diff -Nrcpad gcc-4.0.2/boehm-gc/.cvsignore gcc-4.1.0/boehm-gc/.cvsignore
*** gcc-4.0.2/boehm-gc/.cvsignore	Tue Jun 15 07:42:06 2004
--- gcc-4.1.0/boehm-gc/.cvsignore	Thu Jan  1 00:00:00 1970
***************
*** 1 ****
- autom4te.cache
--- 0 ----
diff -Nrcpad gcc-4.0.2/boehm-gc/ChangeLog gcc-4.1.0/boehm-gc/ChangeLog
*** gcc-4.0.2/boehm-gc/ChangeLog	Wed Sep 21 03:54:54 2005
--- gcc-4.1.0/boehm-gc/ChangeLog	Tue Feb 28 08:29:08 2006
***************
*** 1,6 ****
! 2005-09-20  Release Manager
  
! 	* GCC 4.0.2 released.
  
  2005-09-06  Tom Tromey  <tromey@redhat.com>
  
--- 1,33 ----
! 2006-02-28  Release Manager
  
! 	* GCC 4.1.0 released.
! 
! 2006-02-09  Tom Tromey  <tromey@redhat.com>
! 
! 	* pthread_support.c: Conditionally include dlfcn.h.
! 
! 2006-02-06  Jakub Jelinek  <jakub@redhat.com>
! 	    Anthony Green  <green@redhat.com>
! 	    Tom Tromey  <tromey@redhat.com>
! 
! 	* include/gc_ext_config.h.in: Added GC_PTHREAD_SYM_VERSION.
! 	* include/gc_config.h.in: Rebuilt.
! 	* include/gc_pthread_redirects.h (pthread_create): Conditionally
! 	define.
! 	* pthread_support.c (pthread_create_): New global.
! 	(constr): New function.
! 	(pthread_create): Conditionally renamed.
! 	* configure: Rebuilt.
! 	* configure.ac (GC_PTHREAD_SYM_VERSION): Define.
! 
! 2005-11-01  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* include/private/gc_priv.h: Increase MAX_ROOT_SETS to 1024.
! 
! 2005-09-15  Kazu Hirata  <kazu@codesourcery.com>
! 
! 	* include/private/gc_locks.h (GC_test_and_set): Change the
! 	constraint of the first operand to '0'.
  
  2005-09-06  Tom Tromey  <tromey@redhat.com>
  
***************
*** 12,34 ****
  
  	* include/private/gcconfig.h (sh-linux): Use LINUX_STACKBOTTOM.
  
! 2005-07-07  Release Manager
  
! 	* GCC 4.0.1 released.
  
  2005-05-25  Andrew Haley  <aph@redhat.com>
  
  	* include/private/gcconfig.h (HBLKSIZE): Define to 4096 on
  	powerpc64-linux.
  
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
  2005-04-12  Richard Henderson  <rth@redhat.com>
  
  	* include/private/gcconfig.h (alpha-linux): Use LINUX_STACKBOTTOM.
  
  2005-03-01  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Makefile.in, include/Makefile.in: Regenerate.
--- 39,86 ----
  
  	* include/private/gcconfig.h (sh-linux): Use LINUX_STACKBOTTOM.
  
! 2005-06-15  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* os_dep.c: Add FreeBSD/PowerPC bits.
! 	(GC_SysVGetDataStart): Likewise.
! 	* include/private/gcconfig.h: Likewise.
  
  2005-05-25  Andrew Haley  <aph@redhat.com>
  
  	* include/private/gcconfig.h (HBLKSIZE): Define to 4096 on
  	powerpc64-linux.
  
! 2005-05-09  Mike Stump  <mrs@apple.com>
  
! 	* configure: Regenerate.
! 
! 2005-04-19  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* os_dep.c, include/private/gc_locks.h: Import CRIS port by
! 	Simon Posnjak from gc6.4.
! 	* include/private/gcconfig.h: Ditto.  Add M32R note from gc6.4.
! 
! 2005-04-17  David S. Miller  <davem@davemloft.net>
! 
! 	* include/private/gcconfig.h (sparc-linux): Use LINUX_STACKBOTTOM.
! 	* os_dep.c (GC_linux_stack_base): Check for bug present in some
! 	Sparc glibc variants where __libc_stack_end is erroneously set
! 	to "1".  Fallback to procfs code in that case.
! 
! 2005-04-12  Mike Stump  <mrs@apple.com>
! 
! 	* configure: Regenerate.
  
  2005-04-12  Richard Henderson  <rth@redhat.com>
  
  	* include/private/gcconfig.h (alpha-linux): Use LINUX_STACKBOTTOM.
  
+ 2005-03-23  Mike Stump  <mrs@apple.com>
+ 
+ 	* darwin_stop_world.c: Update for -m64 multilib.
+ 	* include/private/gcconfig.h: Likewise.
+ 	* powerpc_darwin_mach_dep.s: Likewise.
+ 
  2005-03-01  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Makefile.in, include/Makefile.in: Regenerate.
diff -Nrcpad gcc-4.0.2/boehm-gc/configure gcc-4.1.0/boehm-gc/configure
*** gcc-4.0.2/boehm-gc/configure	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/boehm-gc/configure	Tue Feb 28 08:39:11 2006
*************** deplibs_check_method=$lt_cv_deplibs_chec
*** 4379,4384 ****
--- 4379,4445 ----
  
  # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
  
+ # find the maximum length of command line arguments
+ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+ echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+ if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+     i=0
+   teststring="ABCD"
+ 
+   case $build_os in
+   msdosdjgpp*)
+     # On DJGPP, this test can blow up pretty badly due to problems in libc
+     # (any single argument exceeding 2000 bytes causes a buffer overrun
+     # during glob expansion).  Even if it were fixed, the result of this
+     # check would be larger than it should be.
+     lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+     ;;
+ 
+   cygwin* | mingw*)
+     # On Win9x/ME, this test blows up -- it succeeds, but takes
+     # about 5 minutes as the teststring grows exponentially.
+     # Worse, since 9x/ME are not pre-emptively multitasking,
+     # you end up with a "frozen" computer, even though with patience
+     # the test eventually succeeds (with a max line length of 256k).
+     # Instead, let's just punt: use the minimum linelength reported by
+     # all of the supported platforms: 8192 (on NT/2K/XP).
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
+   amigaos*)
+     # On AmigaOS with pdksh, this test takes hours, literally.
+     # So we just punt and use a minimum line length of 8192.
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
+   netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+     # This has been around since 386BSD, at least.  Likely further.
+     if test -x /sbin/sysctl; then
+       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+     elif test -x /usr/sbin/sysctl; then
+       lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+     else
+       lt_cv_sys_max_cmd_len=65536 # usable default for *BSD
+     fi
+     # And add a safety zone
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+     ;;
+   esac
+ 
+ fi
+ 
+ if test -n "$lt_cv_sys_max_cmd_len" ; then
+   echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+ echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+ else
+   echo "$as_me:$LINENO: result: none" >&5
+ echo "${ECHO_T}none" >&6
+ fi
+ 
+ 
  # Only perform the check for file, if the check method requires it
  case $deplibs_check_method in
  file_magic*)
*************** test x"$pic_mode" = xno && libtool_flags
*** 4712,4718 ****
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 4715 "configure"' > conftest.$ac_ext
    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
    (eval $ac_compile) 2>&5
    ac_status=$?
--- 4773,4779 ----
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 4776 "configure"' > conftest.$ac_ext
    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
    (eval $ac_compile) 2>&5
    ac_status=$?
*************** _ACEOF
*** 6566,6571 ****
--- 6627,6655 ----
  
  fi
  
+ symver=
+ case "$target" in
+   *-*-linux* )
+     cat > conftest.c <<EOF
+ #include <pthread.h>
+ void *tf (void *arg) { (void) arg; return NULL; }
+ int main (void) { pthread_t th; pthread_create (&th, NULL, tf, NULL); return 0; }
+ EOF
+     if $CC $CFLAGS -pthread -o conftest conftest.c > /dev/null 2>&1; then
+       symver=`readelf -s conftest 2> /dev/null | sed -n '/UND pthread_create@/{s/^.*@//;s/ .*$//;p;q}'`
+     fi
+     rm -f conftest conftest.c
+     ;;
+ esac
+ if test -n "$symver"; then
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define GC_PTHREAD_SYM_VERSION "$symver"
+ _ACEOF
+ 
+ fi
+ 
+ 
  if test -n "$with_cross_host" &&
     test x"$with_cross_host" != x"no"; then
    toolexecdir='$(exec_prefix)/$(target_noncanonical)'
diff -Nrcpad gcc-4.0.2/boehm-gc/configure.ac gcc-4.1.0/boehm-gc/configure.ac
*** gcc-4.0.2/boehm-gc/configure.ac	Wed Feb 16 04:10:41 2005
--- gcc-4.1.0/boehm-gc/configure.ac	Tue Feb  7 01:05:55 2006
*************** if test "${gc_use_mmap}" = "yes"; then
*** 450,455 ****
--- 450,474 ----
    AC_DEFINE(USE_MMAP, 1, [use MMAP instead of sbrk to get new memory])
  fi
  
+ symver=
+ case "$target" in
+   *-*-linux* )
+     cat > conftest.c <<EOF
+ #include <pthread.h>
+ void *tf (void *arg) { (void) arg; return NULL; }
+ int main (void) { pthread_t th; pthread_create (&th, NULL, tf, NULL); return 0; }
+ EOF
+     if $CC $CFLAGS -pthread -o conftest conftest.c > /dev/null 2>&1; then
+       symver=`readelf -s conftest 2> /dev/null | sed -n '/UND pthread_create@/{s/^.*@//;s/ .*$//;p;q}'`
+     fi
+     rm -f conftest conftest.c
+     ;;
+ esac
+ if test -n "$symver"; then
+   AC_DEFINE_UNQUOTED(GC_PTHREAD_SYM_VERSION, "$symver", [symbol version of pthread_create])
+ fi
+ 
+ 
  if test -n "$with_cross_host" &&
     test x"$with_cross_host" != x"no"; then
    toolexecdir='$(exec_prefix)/$(target_noncanonical)'
diff -Nrcpad gcc-4.0.2/boehm-gc/darwin_stop_world.c gcc-4.1.0/boehm-gc/darwin_stop_world.c
*** gcc-4.0.2/boehm-gc/darwin_stop_world.c	Fri Aug 13 23:05:29 2004
--- gcc-4.1.0/boehm-gc/darwin_stop_world.c	Thu Mar 24 00:48:39 2005
***************
*** 1,5 ****
--- 1,7 ----
  #include "private/pthread_support.h"
  
+ /* This probably needs more porting work to ppc64. */
+ 
  # if defined(GC_DARWIN_THREADS)
  
  /* From "Inside Mac OS X - Mach-O Runtime Architecture" published by Apple
***************
*** 14,26 ****
  */
  #define PPC_RED_ZONE_SIZE 224
  
- /* Not 64-bit clean. Wait until Apple defines their 64-bit ABI */
  typedef struct StackFrame {
!   unsigned int	savedSP;
!   unsigned int	savedCR;
!   unsigned int	savedLR;
!   unsigned int	reserved[2];
!   unsigned int	savedRTOC;
  } StackFrame;
  
  
--- 16,27 ----
  */
  #define PPC_RED_ZONE_SIZE 224
  
  typedef struct StackFrame {
!   unsigned long	savedSP;
!   unsigned long	savedCR;
!   unsigned long	savedLR;
!   unsigned long	reserved[2];
!   unsigned long	savedRTOC;
  } StackFrame;
  
  
diff -Nrcpad gcc-4.0.2/boehm-gc/include/gc_config.h.in gcc-4.1.0/boehm-gc/include/gc_config.h.in
*** gcc-4.0.2/boehm-gc/include/gc_config.h.in	Wed Feb 16 04:10:42 2005
--- gcc-4.1.0/boehm-gc/include/gc_config.h.in	Tue Feb  7 01:05:55 2006
***************
*** 45,50 ****
--- 45,53 ----
  /* support for Tru64 pthreads */
  #undef GC_OSF1_THREADS
  
+ /* symbol version of pthread_create */
+ #undef GC_PTHREAD_SYM_VERSION
+ 
  /* support for Solaris pthreads */
  #undef GC_SOLARIS_PTHREADS
  
diff -Nrcpad gcc-4.0.2/boehm-gc/include/gc_ext_config.h.in gcc-4.1.0/boehm-gc/include/gc_ext_config.h.in
*** gcc-4.0.2/boehm-gc/include/gc_ext_config.h.in	Sun Jan  2 03:35:57 2005
--- gcc-4.1.0/boehm-gc/include/gc_ext_config.h.in	Tue Feb  7 01:05:55 2006
*************** external clients that do not want to inc
*** 3,5 ****
--- 3,7 ----
  is used by libjava/include/boehm-gc.h. */
  
  #undef THREAD_LOCAL_ALLOC
+ 
+ #undef GC_PTHREAD_SYM_VERSION
diff -Nrcpad gcc-4.0.2/boehm-gc/include/gc_pthread_redirects.h gcc-4.1.0/boehm-gc/include/gc_pthread_redirects.h
*** gcc-4.0.2/boehm-gc/include/gc_pthread_redirects.h	Mon Jul 28 04:18:23 2003
--- gcc-4.1.0/boehm-gc/include/gc_pthread_redirects.h	Tue Feb  7 01:05:55 2006
***************
*** 68,74 ****
--- 68,76 ----
  # undef pthread_detach
  #endif
  
+ #ifndef GC_PTHREAD_SYM_VERSION
  # define pthread_create GC_pthread_create
+ #endif
  # define pthread_join GC_pthread_join
  # define pthread_detach GC_pthread_detach
  
diff -Nrcpad gcc-4.0.2/boehm-gc/include/private/gc_locks.h gcc-4.1.0/boehm-gc/include/private/gc_locks.h
*** gcc-4.0.2/boehm-gc/include/private/gc_locks.h	Mon Jul 28 04:18:23 2003
--- gcc-4.1.0/boehm-gc/include/private/gc_locks.h	Thu Sep 15 22:35:52 2005
***************
*** 209,220 ****
            /* See linuxthreads/sysdeps/arm/pt-machine.h in glibc-2.1 */
            __asm__ __volatile__("swp %0, %1, [%2]"
        		  	     : "=r"(oldval)
!       			     : "r"(1), "r"(addr)
  			     : "memory");
            return oldval;
          }
  #       define GC_TEST_AND_SET_DEFINED
  #    endif /* ARM32 */
  #    ifdef S390
         inline static int GC_test_and_set(volatile unsigned int *addr) {
           int ret;
--- 209,244 ----
            /* See linuxthreads/sysdeps/arm/pt-machine.h in glibc-2.1 */
            __asm__ __volatile__("swp %0, %1, [%2]"
        		  	     : "=r"(oldval)
!       			     : "0"(1), "r"(addr)
  			     : "memory");
            return oldval;
          }
  #       define GC_TEST_AND_SET_DEFINED
  #    endif /* ARM32 */
+ #    ifdef CRIS
+         inline static int GC_test_and_set(volatile unsigned int *addr) {
+ 	  /* Ripped from linuxthreads/sysdeps/cris/pt-machine.h.	*/
+ 	  /* Included with Hans-Peter Nilsson's permission.		*/
+ 	  register unsigned long int ret;
+ 
+ 	  /* Note the use of a dummy output of *addr to expose the write.
+ 	   * The memory barrier is to stop *other* writes being moved past
+ 	   * this code.
+ 	   */
+ 	    __asm__ __volatile__("clearf\n"
+         		         "0:\n\t"
+                     		 "movu.b [%2],%0\n\t"
+                     		 "ax\n\t"
+                     		 "move.b %3,[%2]\n\t"
+                     		 "bwf 0b\n\t"
+                     		 "clearf"
+                     		 : "=&r" (ret), "=m" (*addr)
+                     		 : "r" (addr), "r" ((int) 1), "m" (*addr)
+                     		 : "memory");
+ 	    return ret;
+         }
+ #       define GC_TEST_AND_SET_DEFINED
+ #    endif /* CRIS */
  #    ifdef S390
         inline static int GC_test_and_set(volatile unsigned int *addr) {
           int ret;
diff -Nrcpad gcc-4.0.2/boehm-gc/include/private/gc_priv.h gcc-4.1.0/boehm-gc/include/private/gc_priv.h
*** gcc-4.0.2/boehm-gc/include/private/gc_priv.h	Wed Feb 16 04:10:42 2005
--- gcc-4.1.0/boehm-gc/include/private/gc_priv.h	Wed Nov  2 00:06:30 2005
*************** struct hblk {
*** 760,776 ****
  # ifdef LARGE_CONFIG
  #   define MAX_ROOT_SETS 4096
  # else
! #   ifdef PCR
! #     define MAX_ROOT_SETS 1024
! #   else
! #     if defined(MSWIN32) || defined(MSWINCE)
! #	define MAX_ROOT_SETS 1024
! 	    /* Under NT, we add only written pages, which can result 	*/
! 	    /* in many small root sets.					*/
! #     else
! #       define MAX_ROOT_SETS 256
! #     endif
! #   endif
  # endif
  
  # define MAX_EXCLUSIONS (MAX_ROOT_SETS/4)
--- 760,768 ----
  # ifdef LARGE_CONFIG
  #   define MAX_ROOT_SETS 4096
  # else
!     /* GCJ LOCAL: MAX_ROOT_SETS increased to permit more shared */
!     /* libraries to be loaded.                                  */ 
! #   define MAX_ROOT_SETS 1024
  # endif
  
  # define MAX_EXCLUSIONS (MAX_ROOT_SETS/4)
diff -Nrcpad gcc-4.0.2/boehm-gc/include/private/gcconfig.h gcc-4.1.0/boehm-gc/include/private/gcconfig.h
*** gcc-4.0.2/boehm-gc/include/private/gcconfig.h	Tue Sep  6 14:21:25 2005
--- gcc-4.1.0/boehm-gc/include/private/gcconfig.h	Tue Sep  6 14:22:01 2005
***************
*** 229,238 ****
--- 229,248 ----
  #    define ARM32
  #    define mach_type_known
  # endif
+ # if defined(LINUX) && defined(__cris__)
+ #    ifndef CRIS
+ #	define CRIS
+ #    endif
+ #    define mach_type_known
+ # endif
  # if defined(LINUX) && (defined(powerpc) || defined(__powerpc__) || defined(powerpc64) || defined(__powerpc64__))
  #    define POWERPC
  #    define mach_type_known
  # endif
+ # if defined(FREEBSD) && (defined(powerpc) || defined(__powerpc__))
+ #    define POWERPC
+ #    define mach_type_known
+ # endif
  # if defined(LINUX) && defined(__mc68000__)
  #    define M68K
  #    define mach_type_known
***************
*** 277,284 ****
  #   define MACOS
  #   define mach_type_known
  # endif
! # if defined(macosx) || \
!      defined(__APPLE__) && defined(__MACH__) && defined(__ppc__)
  #    define DARWIN
  #    define POWERPC
  #    define mach_type_known
--- 287,295 ----
  #   define MACOS
  #   define mach_type_known
  # endif
! # if defined(macosx) \
!      || defined(__APPLE__) && defined(__MACH__) && defined(__ppc__) \
!      || defined(__APPLE__) && defined(__MACH__) && defined(__ppc64__)
  #    define DARWIN
  #    define POWERPC
  #    define mach_type_known
***************
*** 475,480 ****
--- 486,493 ----
  		    /*		   POWERPC    ==> IBM/Apple PowerPC	*/
  		    /*			(MACOS(<=9),DARWIN(incl.MACOSX),*/
  		    /*			 LINUX, NETBSD, NOSYS variants)	*/
+ 		    /*		   CRIS       ==> Axis Etrax		*/
+ 		    /*		   M32R	      ==> Renesas M32R		*/
  
  
  /*
***************
*** 757,763 ****
  #     define DATAEND (_end)
  #   endif
  #   ifdef DARWIN
! #     define ALIGNMENT 4
  #     define OS_TYPE "DARWIN"
  #     define DYNAMIC_LOADING
        /* XXX: see get_end(3), get_etext() and get_end() should not be used.
--- 770,781 ----
  #     define DATAEND (_end)
  #   endif
  #   ifdef DARWIN
! #     if (defined (__ppc64__))
! #       define ALIGNMENT 8
! #       define CPP_WORDSZ 64
! #     else
! #       define ALIGNMENT 4
! #     endif
  #     define OS_TYPE "DARWIN"
  #     define DYNAMIC_LOADING
        /* XXX: see get_end(3), get_etext() and get_end() should not be used.
***************
*** 784,789 ****
--- 802,823 ----
           should be looked into some more */
  #     define NO_PTHREAD_TRYLOCK
  #   endif
+ #   ifdef FREEBSD
+ #       define ALIGNMENT 4
+ #       define OS_TYPE "FREEBSD"
+ #       ifndef GC_FREEBSD_THREADS
+ #           define MPROTECT_VDB
+ #       endif
+ #       define SIG_SUSPEND SIGUSR1
+ #       define SIG_THR_RESTART SIGUSR2
+ #       define FREEBSD_STACKBOTTOM
+ #       ifdef __ELF__
+ #           define DYNAMIC_LOADING
+ #       endif
+         extern char etext[];
+         extern char * GC_FreeBSDGetDataStart();
+ #       define DATASTART GC_FreeBSDGetDataStart(0x1000, &etext)
+ #   endif
  #   ifdef NETBSD
  #     define ALIGNMENT 4
  #     define OS_TYPE "NETBSD"
***************
*** 1796,1801 ****
--- 1830,1848 ----
  #   endif
  #endif
  
+ # ifdef CRIS
+ #   define MACH_TYPE "CRIS"
+ #   define CPP_WORDSZ 32
+ #   define ALIGNMENT 1
+ #   define OS_TYPE "LINUX"
+ #   define DYNAMIC_LOADING
+ #   define LINUX_STACKBOTTOM
+ #   define USE_GENERIC_PUSH_REGS
+ #   define SEARCH_FOR_DATA_START
+       extern int _end[];
+ #   define DATAEND (_end)
+ # endif
+ 
  # ifdef SH
  #   define MACH_TYPE "SH"
  #   define ALIGNMENT 4
***************
*** 2061,2067 ****
  # endif
  
  # if defined(HP_PA) || defined(M88K) || defined(POWERPC) && !defined(DARWIN) \
! 	     || defined(LINT) || defined(MSWINCE) || defined(ARM32) \
  	     || (defined(I386) && defined(__LCC__))
  	/* Use setjmp based hack to mark from callee-save registers.    */
  	/* The define should move to the individual platform 		*/
--- 2108,2114 ----
  # endif
  
  # if defined(HP_PA) || defined(M88K) || defined(POWERPC) && !defined(DARWIN) \
! 	     || defined(LINT) || defined(MSWINCE) || defined(ARM32) || defined(CRIS) \
  	     || (defined(I386) && defined(__LCC__))
  	/* Use setjmp based hack to mark from callee-save registers.    */
  	/* The define should move to the individual platform 		*/
diff -Nrcpad gcc-4.0.2/boehm-gc/os_dep.c gcc-4.1.0/boehm-gc/os_dep.c
*** gcc-4.0.2/boehm-gc/os_dep.c	Fri Apr 22 18:11:30 2005
--- gcc-4.1.0/boehm-gc/os_dep.c	Wed Jun 15 21:25:54 2005
***************
*** 80,86 ****
  #   define NEED_FIND_LIMIT
  # endif
  
! #if defined(FREEBSD) && defined(I386)
  #  include <machine/trap.h>
  #  if !defined(PCR)
  #    define NEED_FIND_LIMIT
--- 80,86 ----
  #   define NEED_FIND_LIMIT
  # endif
  
! #if defined(FREEBSD) && (defined(I386) || defined(powerpc) || defined(__powerpc__))
  #  include <machine/trap.h>
  #  if !defined(PCR)
  #    define NEED_FIND_LIMIT
*************** int * etext_addr;
*** 1387,1393 ****
  }
  # endif
  
! # if defined(FREEBSD) && defined(I386) && !defined(PCR)
  /* Its unclear whether this should be identical to the above, or 	*/
  /* whether it should apply to non-X86 architectures.			*/
  /* For now we don't assume that there is always an empty page after	*/
--- 1387,1393 ----
  }
  # endif
  
! # if defined(FREEBSD) && (defined(I386) || defined(powerpc) || defined(__powerpc__)) && !defined(PCR)
  /* Its unclear whether this should be identical to the above, or 	*/
  /* whether it should apply to non-X86 architectures.			*/
  /* For now we don't assume that there is always an empty page after	*/
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2519,2525 ****
  #               if defined(ARM32)
                    char * addr = (char *)sc.fault_address;
  #               else
! 		  --> architecture not supported
  #               endif
  #	      endif
  #	    endif
--- 2519,2529 ----
  #               if defined(ARM32)
                    char * addr = (char *)sc.fault_address;
  #               else
! #		  if defined(CRIS)
! 		    char * addr = (char *)sc.regs.csraddr;
! #		  else
! 		    --> architecture not supported
! #		  endif
  #               endif
  #	      endif
  #	    endif
diff -Nrcpad gcc-4.0.2/boehm-gc/powerpc_darwin_mach_dep.s gcc-4.1.0/boehm-gc/powerpc_darwin_mach_dep.s
*** gcc-4.0.2/boehm-gc/powerpc_darwin_mach_dep.s	Sun Aug 15 21:32:11 2004
--- gcc-4.1.0/boehm-gc/powerpc_darwin_mach_dep.s	Thu Mar 24 00:48:39 2005
***************
*** 1,10 ****
  
  ; GC_push_regs function. Under some optimization levels GCC will clobber
  ; some of the non-volatile registers before we get a chance to save them
  ; therefore, this can't be inline asm.
  
  .text
! 	.align 2
  	.globl _GC_push_regs
  _GC_push_regs:
      
--- 1,21 ----
+ #if defined(__ppc64__)
+ #define MODE_CHOICE(x, y) y
+ #else
+ #define MODE_CHOICE(x, y) x
+ #endif
+ 
+ #define lgu     MODE_CHOICE(lwzu, ldu)
+ 
+ #define g_long  MODE_CHOICE(long, quad)         /* usage is ".g_long" */
+ 
+ #define LOG2_GPR_BYTES  MODE_CHOICE(2,3)        /* log2(GPR_BYTES) */
  
  ; GC_push_regs function. Under some optimization levels GCC will clobber
  ; some of the non-volatile registers before we get a chance to save them
  ; therefore, this can't be inline asm.
  
  .text
! 	.align LOG2_GPR_BYTES
  	.globl _GC_push_regs
  _GC_push_regs:
      
*************** _GC_push_regs:
*** 65,71 ****
  
  .data
  .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
! 	.align 2
  L_GC_push_one$stub:
  	.indirect_symbol _GC_push_one
  	mflr r0
--- 76,82 ----
  
  .data
  .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
! 	.align LOG2_GPR_BYTES
  L_GC_push_one$stub:
  	.indirect_symbol _GC_push_one
  	mflr r0
*************** L0$_GC_push_one:
*** 74,84 ****
  	mflr r11
  	addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
  	mtlr r0
! 	lwzu r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11)
  	mtctr r12
  	bctr
  .data
  .lazy_symbol_pointer
  L_GC_push_one$lazy_ptr:
  	.indirect_symbol _GC_push_one
! 	.long dyld_stub_binding_helper
--- 85,95 ----
  	mflr r11
  	addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
  	mtlr r0
! 	lgu r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11)
  	mtctr r12
  	bctr
  .data
  .lazy_symbol_pointer
  L_GC_push_one$lazy_ptr:
  	.indirect_symbol _GC_push_one
! 	.g_long dyld_stub_binding_helper
diff -Nrcpad gcc-4.0.2/boehm-gc/pthread_support.c gcc-4.1.0/boehm-gc/pthread_support.c
*** gcc-4.0.2/boehm-gc/pthread_support.c	Fri Aug 13 23:05:30 2004
--- gcc-4.1.0/boehm-gc/pthread_support.c	Fri Feb 10 01:54:34 2006
***************
*** 47,52 ****
--- 47,59 ----
  /*#define DEBUG_THREADS 1*/
  /*#define GC_ASSERTIONS*/
  
+ #include "gc_config.h"
+ 
+ #ifdef GC_PTHREAD_SYM_VERSION
+ #define _GNU_SOURCE
+ #include <dlfcn.h>
+ #endif
+ 
  # include "gc.h"
  # include "private/pthread_support.h"
  
*************** void * GC_start_routine(void * arg)
*** 1194,1201 ****
      return(result);
  }
  
  int
! WRAP_FUNC(pthread_create)(pthread_t *new_thread,
  		  const pthread_attr_t *attr,
                    void *(*start_routine)(void *), void *arg)
  {
--- 1201,1237 ----
      return(result);
  }
  
+ #ifdef GC_PTHREAD_SYM_VERSION
+ 
+ /* Force constr to execute prior to main().  */
+ static void constr (void) __attribute__ ((constructor));
+ 
+ static int
+ (*pthread_create_)(pthread_t *new_thread,
+ 		   const pthread_attr_t *attr_in,
+ 		   void * (*thread_execp)(void *), void *arg);
+ 
+ static void
+ constr (void)
+ {
+   /* Get a pointer to the real pthread_create.  */
+   pthread_create_ = dlvsym (RTLD_NEXT, "pthread_create",
+ 			    GC_PTHREAD_SYM_VERSION);
+ }
+ 
+ #define GC_PTHREAD_CREATE_NAME pthread_create
+ #define GC_PTHREAD_REAL_NAME (*pthread_create_)
+ 
+ #else
+ 
+ #define GC_PTHREAD_CREATE_NAME WRAP_FUNC(pthread_create)
+ #define GC_PTHREAD_REAL_NAME REAL_FUNC(pthread_create)
+ 
+ #endif
+ 
+ 
  int
! GC_PTHREAD_CREATE_NAME(pthread_t *new_thread,
  		  const pthread_attr_t *attr,
                    void *(*start_routine)(void *), void *arg)
  {
*************** WRAP_FUNC(pthread_create)(pthread_t *new
*** 1250,1256 ****
  		   pthread_self());
  #   endif
  
!     result = REAL_FUNC(pthread_create)(new_thread, attr, GC_start_routine, si);
  
  #   ifdef DEBUG_THREADS
          GC_printf1("Started thread 0x%X\n", *new_thread);
--- 1286,1292 ----
  		   pthread_self());
  #   endif
  
!     result = GC_PTHREAD_REAL_NAME(new_thread, attr, GC_start_routine, si);
  
  #   ifdef DEBUG_THREADS
          GC_printf1("Started thread 0x%X\n", *new_thread);
diff -Nrcpad gcc-4.0.2/fastjar/.cvsignore gcc-4.1.0/fastjar/.cvsignore
*** gcc-4.0.2/fastjar/.cvsignore	Tue Jun 15 07:36:33 2004
--- gcc-4.1.0/fastjar/.cvsignore	Thu Jan  1 00:00:00 1970
***************
*** 1 ****
- autom4te.cache
--- 0 ----
diff -Nrcpad gcc-4.0.2/fastjar/COPYING gcc-4.1.0/fastjar/COPYING
*** gcc-4.0.2/fastjar/COPYING	Sat Dec  9 03:08:22 2000
--- gcc-4.1.0/fastjar/COPYING	Wed Jun 29 02:59:06 2005
***************
*** 2,8 ****
  		       Version 2, June 1991
  
   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
!                        59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   Everyone is permitted to copy and distribute verbatim copies
   of this license document, but changing it is not allowed.
  
--- 2,8 ----
  		       Version 2, June 1991
  
   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
!      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   Everyone is permitted to copy and distribute verbatim copies
   of this license document, but changing it is not allowed.
  
diff -Nrcpad gcc-4.0.2/fastjar/ChangeLog gcc-4.1.0/fastjar/ChangeLog
*** gcc-4.0.2/fastjar/ChangeLog	Wed Sep 21 03:55:15 2005
--- gcc-4.1.0/fastjar/ChangeLog	Tue Feb 28 08:29:20 2006
***************
*** 1,14 ****
! 2005-09-20  Release Manager
  
! 	* GCC 4.0.2 released.
  
! 2005-07-07  Release Manager
  
! 	* GCC 4.0.1 released.
  
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
  2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
  
--- 1,48 ----
! 2006-02-28  Release Manager
  
! 	* GCC 4.1.0 released.
  
! 2006-02-08  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jartool.h (ACTION_INDEX): New macro.
! 	* jartool.c (main): Handle -i option.
! 	* fastjar.texi (Invoking fastjar): Add description of -i option.
  
! 2006-01-31  Tom Tromey  <tromey@redhat.com>
  
! 	* jartool.c (version): Use 2006.
! 	* jargrep.c (version): Use 2006.
! 
! 2005-06-29  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* all files: Update FSF address.
! 
! 2005-05-17  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS.
! 	Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF.
! 	* Makefile.am: Remove ACLOCAL_AMFLAGS.
! 	* aclocal.m4, Makefile.in, configure, config.h.in: Regenerate.
! 
! 2005-03-28  Marcin Dalecki  <martin@dalecki.de>
! 
! 	* jartool.c (main): Indentation fixlet.
! 	(add_entry): Likewise.
! 	(init_args): Don't use K&R style.
! 	(jt_strdup): Likewise.
! 	(get_next_arg): Add explicit '(void)'.
! 	(init_headers): Likewise.
! 	(version): Likewise.
! 
! 2005-03-15  Zack Weinberg  <zack@codesourcery.com>
! 
! 	* Makefile.am (fastjar_TEXINFOS): Add gcc-vers.texi.
! 	(BASEVER, DEVPHASE): New variables.
! 	(POD2MAN): Adjust setting of --release option.
! 	(fastjar.1, grepjar.1, gcc-vers.texi): New rules.
! 	* Makefile.in: Regenerate.
! 	* configure.ac: Do not invoke TL_AC_GCC_VERSION.
! 	* aclocal.m4, configure: Regenerate.
  
  2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
  
***************
*** 68,114 ****
  
  	* Makefile.in: Regenerate.
  	* fastjar.texi: Update for '-u'.
! 	
  2004-07-06  Casey Marshall <csm@gnu.org>
  
  	PR 7854
  	* Makefile.am
  	(jar_SOURCES): added shift.c, shift.h.
!         (jar_CPPFLAGS): define WITH_SHIFT_DOWN.
  
!         * compress.c
!         Added FSF copyright.
!         (write_data): new function.
!         (compress_file): call write_data.
  
!         * jartool.c
!         Updated copyright year.
!         (progname): new variable.
!         (end_of_entries): new variable.
!         (main): open and read file when updating.
!         (find_entry): new function.
!         (looks_like_dir): new function.
!         (read_entries): new function.
!         (make_manifest): added parameter `updating'.
!         Call `add_file_to_jar' with `updating'.
!         (add_to_jar_with_dir): added parameter `updating'.
!         Call `add_to_jar' with `updating'.
!         (add_to_jar): added parameter `updating'.
!         Call `add_file_to_jar' with `updating'.
!         Don't add directories if they already exist.
!         (add_file_to_jar): added parameter `updating'.
!         Update entries if they already exist.
  
!         * jartool.h
!         Added #ifndef __FASTJAR_JARTOOL_H__.
!         (struct zipentry): added `flags'.
  
!         * shift.c: new file.
  
!         * shift.h: new file.
  
!         * zipfile.h
!         (CEN_FLAGS): new constant.
  
  2004-07-05  Kelley Cook  <kcook@gcc.gnu.org>
  
--- 102,148 ----
  
  	* Makefile.in: Regenerate.
  	* fastjar.texi: Update for '-u'.
! 
  2004-07-06  Casey Marshall <csm@gnu.org>
  
  	PR 7854
  	* Makefile.am
  	(jar_SOURCES): added shift.c, shift.h.
! 	(jar_CPPFLAGS): define WITH_SHIFT_DOWN.
  
! 	* compress.c
! 	Added FSF copyright.
! 	(write_data): new function.
! 	(compress_file): call write_data.
  
! 	* jartool.c
! 	Updated copyright year.
! 	(progname): new variable.
! 	(end_of_entries): new variable.
! 	(main): open and read file when updating.
! 	(find_entry): new function.
! 	(looks_like_dir): new function.
! 	(read_entries): new function.
! 	(make_manifest): added parameter `updating'.
! 	Call `add_file_to_jar' with `updating'.
! 	(add_to_jar_with_dir): added parameter `updating'.
! 	Call `add_to_jar' with `updating'.
! 	(add_to_jar): added parameter `updating'.
! 	Call `add_file_to_jar' with `updating'.
! 	Don't add directories if they already exist.
! 	(add_file_to_jar): added parameter `updating'.
! 	Update entries if they already exist.
  
! 	* jartool.h
! 	Added #ifndef __FASTJAR_JARTOOL_H__.
! 	(struct zipentry): added `flags'.
  
! 	* shift.c: new file.
  
! 	* shift.h: new file.
  
! 	* zipfile.h
! 	(CEN_FLAGS): new constant.
  
  2004-07-05  Kelley Cook  <kcook@gcc.gnu.org>
  
diff -Nrcpad gcc-4.0.2/fastjar/Makefile.am gcc-4.1.0/fastjar/Makefile.am
*** gcc-4.0.2/fastjar/Makefile.am	Mon Nov 15 23:50:05 2004
--- gcc-4.1.0/fastjar/Makefile.am	Wed May 18 01:38:46 2005
***************
*** 1,7 ****
  # Process this with automake to create Makefile.in
  
- ACLOCAL_AMFLAGS = -I ../config
- 
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
  # values defined in terms of make variables, as is the case for CC and
  # friends when we are called from the top level Makefile.
--- 1,5 ----
*************** TEXINFO_TEX = ../gcc/doc/include/texinfo
*** 63,74 ****
  info_TEXINFOS = fastjar.texi
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
! 	../gcc/doc/include/gpl.texi
  man_MANS = fastjar.1 grepjar.1
  EXTRA_DIST = $(man_MANS)
  
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
! POD2MAN = pod2man --center="GNU" --release="gcc-@gcc_version@"
  
  .pod.1:
  	-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
--- 61,76 ----
  info_TEXINFOS = fastjar.texi
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
! 	../gcc/doc/include/gpl.texi \
! 	gcc-vers.texi
  man_MANS = fastjar.1 grepjar.1
  EXTRA_DIST = $(man_MANS)
  
+ BASEVER = $(srcdir)/../gcc/BASE-VER
+ DEVPHASE = $(srcdir)/../gcc/DEV-PHASE
+ 
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
! POD2MAN = pod2man --center="GNU" --release="gcc-$(shell cat $(BASEVER))"
  
  .pod.1:
  	-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
*************** fastjar.pod: $(srcdir)/fastjar.texi
*** 83,88 ****
--- 85,101 ----
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
  
+ fastjar.1 grepjar.1: $(BASEVER)
+ 
+ # gcc-vers.texi is generated from the version files.
+ gcc-vers.texi: $(BASEVER) $(DEVPHASE)
+ 	(echo "@set version-GCC $(shell cat $(BASEVER))"; \
+ 	 if [ "$(shell cat $(DEVPHASE))" = "experimental" ]; \
+ 	 then echo "@set DEVELOPMENT"; \
+ 	 else echo "@clear DEVELOPMENT"; \
+ 	 fi) > $@T
+ 	mv -f $@T $@
+ 
  # GCC LOCAL CHANGE
  # The following commands allow us to release tarballs with the man pages
  # and info documentation prebuilt.  This feature is enabled via 
diff -Nrcpad gcc-4.0.2/fastjar/Makefile.in gcc-4.1.0/fastjar/Makefile.in
*** gcc-4.0.2/fastjar/Makefile.in	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/fastjar/Makefile.in	Wed May 18 01:38:46 2005
*************** DIST_COMMON = README $(am__configure_dep
*** 48,56 ****
  	$(srcdir)/install-defs.sh.in $(top_srcdir)/configure AUTHORS \
  	COPYING ChangeLog INSTALL NEWS
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/../config/accross.m4 \
! 	$(top_srcdir)/../config/gcc-version.m4 \
! 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
--- 48,55 ----
  	$(srcdir)/install-defs.sh.in $(top_srcdir)/configure AUTHORS \
  	COPYING ChangeLog INSTALL NEWS
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
! 	$(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
*************** build_alias = @build_alias@
*** 175,183 ****
  datadir = @datadir@
  exec_prefix = @exec_prefix@
  fastjar_warn_cflags = @fastjar_warn_cflags@
- gcc_version = @gcc_version@
- gcc_version_full = @gcc_version_full@
- gcc_version_trigger = @gcc_version_trigger@
  host_alias = @host_alias@
  includedir = @includedir@
  infodir = @infodir@
--- 174,179 ----
*************** sbindir = @sbindir@
*** 194,200 ****
  sharedstatedir = @sharedstatedir@
  sysconfdir = @sysconfdir@
  target_alias = @target_alias@
- ACLOCAL_AMFLAGS = -I ../config
  
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
  # values defined in terms of make variables, as is the case for CC and
--- 190,195 ----
*************** TEXINFO_TEX = ../gcc/doc/include/texinfo
*** 253,264 ****
  info_TEXINFOS = fastjar.texi
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
! 	../gcc/doc/include/gpl.texi
  
  man_MANS = fastjar.1 grepjar.1
  EXTRA_DIST = $(man_MANS)
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
! POD2MAN = pod2man --center="GNU" --release="gcc-@gcc_version@"
  @GENINSRC_FALSE@STAMP_GENINSRC = 
  
  # GCC LOCAL CHANGE
--- 248,262 ----
  info_TEXINFOS = fastjar.texi
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
! 	../gcc/doc/include/gpl.texi \
! 	gcc-vers.texi
  
  man_MANS = fastjar.1 grepjar.1
  EXTRA_DIST = $(man_MANS)
+ BASEVER = $(srcdir)/../gcc/BASE-VER
+ DEVPHASE = $(srcdir)/../gcc/DEV-PHASE
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
! POD2MAN = pod2man --center="GNU" --release="gcc-$(shell cat $(BASEVER))"
  @GENINSRC_FALSE@STAMP_GENINSRC = 
  
  # GCC LOCAL CHANGE
*************** distclean-tags:
*** 646,652 ****
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
! 	$(mkdir_p) $(distdir)/. $(distdir)/.. $(distdir)/../config $(distdir)/../gcc/doc/include
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
--- 644,650 ----
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
! 	$(mkdir_p) $(distdir)/. $(distdir)/.. $(distdir)/../gcc/doc/include
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
*************** fastjar.pod: $(srcdir)/fastjar.texi
*** 924,929 ****
--- 922,938 ----
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
  
+ fastjar.1 grepjar.1: $(BASEVER)
+ 
+ # gcc-vers.texi is generated from the version files.
+ gcc-vers.texi: $(BASEVER) $(DEVPHASE)
+ 	(echo "@set version-GCC $(shell cat $(BASEVER))"; \
+ 	 if [ "$(shell cat $(DEVPHASE))" = "experimental" ]; \
+ 	 then echo "@set DEVELOPMENT"; \
+ 	 else echo "@clear DEVELOPMENT"; \
+ 	 fi) > $@T
+ 	mv -f $@T $@
+ 
  all-local: $(STAMP_GENINSRC) 
  
  stamp-geninsrc: fastjar.1 grepjar.1 fastjar.info
diff -Nrcpad gcc-4.0.2/fastjar/aclocal.m4 gcc-4.1.0/fastjar/aclocal.m4
*** gcc-4.0.2/fastjar/aclocal.m4	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/fastjar/aclocal.m4	Wed May 18 01:38:46 2005
*************** AC_SUBST([am__tar])
*** 1082,1087 ****
  AC_SUBST([am__untar])
  ]) # _AM_PROG_TAR
  
- m4_include([../config/accross.m4])
- m4_include([../config/gcc-version.m4])
  m4_include([acinclude.m4])
--- 1082,1085 ----
diff -Nrcpad gcc-4.0.2/fastjar/compress.c gcc-4.1.0/fastjar/compress.c
*** gcc-4.0.2/fastjar/compress.c	Tue Jul  6 21:40:08 2004
--- gcc-4.1.0/fastjar/compress.c	Wed Jun 29 02:59:06 2005
***************
*** 88,94 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   */
  
  #include "config.h"
--- 88,94 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
   */
  
  #include "config.h"
diff -Nrcpad gcc-4.0.2/fastjar/compress.h gcc-4.1.0/fastjar/compress.h
*** gcc-4.0.2/fastjar/compress.h	Tue Jul  6 21:40:08 2004
--- gcc-4.1.0/fastjar/compress.h	Wed Jun 29 02:59:06 2005
***************
*** 39,45 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   */
  
  /* Initializes the compression data structure(s) */
--- 39,45 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
   */
  
  /* Initializes the compression data structure(s) */
diff -Nrcpad gcc-4.0.2/fastjar/config.h.in gcc-4.1.0/fastjar/config.h.in
*** gcc-4.0.2/fastjar/config.h.in	Mon Jul 19 20:08:20 2004
--- gcc-4.1.0/fastjar/config.h.in	Wed May 18 01:38:46 2005
***************
*** 1,8 ****
  /* config.h.in.  Generated from configure.ac by autoheader.  */
  
- /* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
- #undef BYTEORDER
- 
  /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
     */
  #undef HAVE_DIRENT_H
--- 1,5 ----
***************
*** 63,72 ****
  /* Define to 1 if you have the `_chsize' function. */
  #undef HAVE__CHSIZE
  
- /* Define if the host machine stores words of multi-word integers in
-    big-endian order. */
- #undef HOST_WORDS_BIG_ENDIAN
- 
  /* Define if host mkdir takes a single argument. */
  #undef MKDIR_TAKES_ONE_ARG
  
--- 60,65 ----
***************
*** 88,106 ****
  /* Define to the version of this package. */
  #undef PACKAGE_VERSION
  
! /* The number of bytes in type char */
  #undef SIZEOF_CHAR
  
! /* The number of bytes in type int */
  #undef SIZEOF_INT
  
! /* The number of bytes in type long */
  #undef SIZEOF_LONG
  
! /* The number of bytes in type long long */
  #undef SIZEOF_LONG_LONG
  
! /* The number of bytes in type short */
  #undef SIZEOF_SHORT
  
  /* Define to 1 if you have the ANSI C header files. */
--- 81,99 ----
  /* Define to the version of this package. */
  #undef PACKAGE_VERSION
  
! /* The size of a `char', as computed by sizeof. */
  #undef SIZEOF_CHAR
  
! /* The size of a `int', as computed by sizeof. */
  #undef SIZEOF_INT
  
! /* The size of a `long', as computed by sizeof. */
  #undef SIZEOF_LONG
  
! /* The size of a `long long', as computed by sizeof. */
  #undef SIZEOF_LONG_LONG
  
! /* The size of a `short', as computed by sizeof. */
  #undef SIZEOF_SHORT
  
  /* Define to 1 if you have the ANSI C header files. */
***************
*** 112,118 ****
  /* Version number of package */
  #undef VERSION
  
! /* whether byteorder is bigendian */
  #undef WORDS_BIGENDIAN
  
  /* Define to `long' if <sys/types.h> does not define. */
--- 105,112 ----
  /* Version number of package */
  #undef VERSION
  
! /* Define to 1 if your processor stores words with the most significant byte
!    first (like Motorola and SPARC, unlike Intel and VAX). */
  #undef WORDS_BIGENDIAN
  
  /* Define to `long' if <sys/types.h> does not define. */
diff -Nrcpad gcc-4.0.2/fastjar/configure gcc-4.1.0/fastjar/configure
*** gcc-4.0.2/fastjar/configure	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/fastjar/configure	Wed May 18 01:38:46 2005
*************** ac_includes_default="\
*** 309,315 ****
  # include <unistd.h>
  #endif"
  
! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RM CP CHMOD MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT fastjar_warn_cflags CPP EGREP ZLIBS ZDEPS ZINCS GENINSRC_TRUE GENINSRC_FALSE gcc_version_trigger gcc_version_full gcc_version LIBOBJS LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
--- 309,315 ----
  # include <unistd.h>
  #endif"
  
! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RM CP CHMOD MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT fastjar_warn_cflags CPP EGREP ZLIBS ZDEPS ZINCS GENINSRC_TRUE GENINSRC_FALSE LIBOBJS LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
*************** _ACEOF
*** 4469,4494 ****
  fi
  
  
  echo "$as_me:$LINENO: checking size of char" >&5
  echo $ECHO_N "checking size of char... $ECHO_C" >&6
  if test "${ac_cv_sizeof_char+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! #include "confdefs.h"
! #include <sys/types.h>
  
  
  int
  main ()
  {
! switch (0) case 0: case (sizeof (char) == $ac_size):;
    ;
    return 0;
  }
--- 4469,4654 ----
  fi
  
  
+ echo "$as_me:$LINENO: checking for char" >&5
+ echo $ECHO_N "checking for char... $ECHO_C" >&6
+ if test "${ac_cv_type_char+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ if ((char *) 0)
+   return 0;
+ if (sizeof (char))
+   return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_type_char=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_type_char=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
+ echo "${ECHO_T}$ac_cv_type_char" >&6
+ 
  echo "$as_me:$LINENO: checking size of char" >&5
  echo $ECHO_N "checking size of char... $ECHO_C" >&6
  if test "${ac_cv_sizeof_char+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test "$ac_cv_type_char" = yes; then
!   # The cast to unsigned long works around a bug in the HP C Compiler
!   # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
!   # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
!   # This bug is HP SR number 8606223364.
!   if test "$cross_compiling" = yes; then
!   # Depending upon the size, compute the lo and hi bounds.
! cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)];
! test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_lo=0 ac_mid=0
+   while :; do
+     cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+ test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_hi=$ac_mid; break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_lo=`expr $ac_mid + 1`
+ 		    if test $ac_lo -le $ac_mid; then
+ 		      ac_lo= ac_hi=
+ 		      break
+ 		    fi
+ 		    ac_mid=`expr 2 '*' $ac_mid + 1`
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
  int
  main ()
  {
! static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)];
! test_array [0] = 0
! 
    ;
    return 0;
  }
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4515,4565 ****
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_cv_sizeof_char=$ac_size
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   if test x$ac_cv_sizeof_char != x ; then break; fi
! done
  
  fi
  
! if test x$ac_cv_sizeof_char = x ; then
!   { { echo "$as_me:$LINENO: error: cannot determine a size for char" >&5
! echo "$as_me: error: cannot determine a size for char" >&2;}
     { (exit 1); exit 1; }; }
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
  echo "${ECHO_T}$ac_cv_sizeof_char" >&6
- 
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_CHAR $ac_cv_sizeof_char
  _ACEOF
  
  
  echo "$as_me:$LINENO: checking size of short" >&5
  echo $ECHO_N "checking size of short... $ECHO_C" >&6
  if test "${ac_cv_sizeof_short+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! #include "confdefs.h"
! #include <sys/types.h>
  
  
  int
  main ()
  {
! switch (0) case 0: case (sizeof (short) == $ac_size):;
    ;
    return 0;
  }
--- 4675,5068 ----
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_hi=-1 ac_mid=-1
!   while :; do
!     cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_lo=$ac_mid; break
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ 		       if test $ac_mid -le $ac_hi; then
+ 			 ac_lo= ac_hi=
+ 			 break
+ 		       fi
+ 		       ac_mid=`expr 2 '*' $ac_mid`
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   done
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_lo= ac_hi=
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ # Binary search between lo and hi bounds.
+ while test "x$ac_lo" != "x$ac_hi"; do
+   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+ test_array [0] = 0
  
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_lo=`expr '(' $ac_mid ')' + 1`
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! done
! case $ac_lo in
! ?*) ac_cv_sizeof_char=$ac_lo;;
! '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute sizeof (char), 77
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; } ;;
! esac
! else
!   if test "$cross_compiling" = yes; then
!   { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; }
! else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! long longval () { return (long) (sizeof (char)); }
! unsigned long ulongval () { return (long) (sizeof (char)); }
! #include <stdio.h>
! #include <stdlib.h>
! int
! main ()
! {
! 
!   FILE *f = fopen ("conftest.val", "w");
!   if (! f)
!     exit (1);
!   if (((long) (sizeof (char))) < 0)
!     {
!       long i = longval ();
!       if (i != ((long) (sizeof (char))))
! 	exit (1);
!       fprintf (f, "%ld\n", i);
!     }
!   else
!     {
!       unsigned long i = ulongval ();
!       if (i != ((long) (sizeof (char))))
! 	exit (1);
!       fprintf (f, "%lu\n", i);
!     }
!   exit (ferror (f) || fclose (f) != 0);
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest$ac_exeext
! if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_cv_sizeof_char=`cat conftest.val`
! else
!   echo "$as_me: program exited with status $ac_status" >&5
! echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ( exit $ac_status )
! { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute sizeof (char), 77
! See \`config.log' for more details." >&2;}
     { (exit 1); exit 1; }; }
  fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ rm -f conftest.val
+ else
+   ac_cv_sizeof_char=0
+ fi
+ fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
  echo "${ECHO_T}$ac_cv_sizeof_char" >&6
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_CHAR $ac_cv_sizeof_char
  _ACEOF
  
  
+ echo "$as_me:$LINENO: checking for short" >&5
+ echo $ECHO_N "checking for short... $ECHO_C" >&6
+ if test "${ac_cv_type_short+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ if ((short *) 0)
+   return 0;
+ if (sizeof (short))
+   return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_type_short=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_type_short=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
+ echo "${ECHO_T}$ac_cv_type_short" >&6
+ 
  echo "$as_me:$LINENO: checking size of short" >&5
  echo $ECHO_N "checking size of short... $ECHO_C" >&6
  if test "${ac_cv_sizeof_short+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test "$ac_cv_type_short" = yes; then
!   # The cast to unsigned long works around a bug in the HP C Compiler
!   # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
!   # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
!   # This bug is HP SR number 8606223364.
!   if test "$cross_compiling" = yes; then
!   # Depending upon the size, compute the lo and hi bounds.
! cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
! test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_lo=0 ac_mid=0
+   while :; do
+     cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+ test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_hi=$ac_mid; break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_lo=`expr $ac_mid + 1`
+ 		    if test $ac_lo -le $ac_mid; then
+ 		      ac_lo= ac_hi=
+ 		      break
+ 		    fi
+ 		    ac_mid=`expr 2 '*' $ac_mid + 1`
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
  int
  main ()
  {
! static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
! test_array [0] = 0
! 
    ;
    return 0;
  }
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4586,4636 ****
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_cv_sizeof_short=$ac_size
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   if test x$ac_cv_sizeof_short != x ; then break; fi
! done
  
  fi
  
! if test x$ac_cv_sizeof_short = x ; then
!   { { echo "$as_me:$LINENO: error: cannot determine a size for short" >&5
! echo "$as_me: error: cannot determine a size for short" >&2;}
     { (exit 1); exit 1; }; }
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
  echo "${ECHO_T}$ac_cv_sizeof_short" >&6
- 
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_SHORT $ac_cv_sizeof_short
  _ACEOF
  
  
  echo "$as_me:$LINENO: checking size of int" >&5
  echo $ECHO_N "checking size of int... $ECHO_C" >&6
  if test "${ac_cv_sizeof_int+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! #include "confdefs.h"
! #include <sys/types.h>
  
  
  int
  main ()
  {
! switch (0) case 0: case (sizeof (int) == $ac_size):;
    ;
    return 0;
  }
--- 5089,5482 ----
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_hi=-1 ac_mid=-1
!   while :; do
!     cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_lo=$ac_mid; break
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ 		       if test $ac_mid -le $ac_hi; then
+ 			 ac_lo= ac_hi=
+ 			 break
+ 		       fi
+ 		       ac_mid=`expr 2 '*' $ac_mid`
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   done
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_lo= ac_hi=
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ # Binary search between lo and hi bounds.
+ while test "x$ac_lo" != "x$ac_hi"; do
+   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+ test_array [0] = 0
  
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_lo=`expr '(' $ac_mid ')' + 1`
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! done
! case $ac_lo in
! ?*) ac_cv_sizeof_short=$ac_lo;;
! '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute sizeof (short), 77
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; } ;;
! esac
! else
!   if test "$cross_compiling" = yes; then
!   { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&2;}
     { (exit 1); exit 1; }; }
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ long longval () { return (long) (sizeof (short)); }
+ unsigned long ulongval () { return (long) (sizeof (short)); }
+ #include <stdio.h>
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ 
+   FILE *f = fopen ("conftest.val", "w");
+   if (! f)
+     exit (1);
+   if (((long) (sizeof (short))) < 0)
+     {
+       long i = longval ();
+       if (i != ((long) (sizeof (short))))
+ 	exit (1);
+       fprintf (f, "%ld\n", i);
+     }
+   else
+     {
+       unsigned long i = ulongval ();
+       if (i != ((long) (sizeof (short))))
+ 	exit (1);
+       fprintf (f, "%lu\n", i);
+     }
+   exit (ferror (f) || fclose (f) != 0);
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_sizeof_short=`cat conftest.val`
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ( exit $ac_status )
+ { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot compute sizeof (short), 77
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ rm -f conftest.val
+ else
+   ac_cv_sizeof_short=0
+ fi
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
  echo "${ECHO_T}$ac_cv_sizeof_short" >&6
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_SHORT $ac_cv_sizeof_short
  _ACEOF
  
  
+ echo "$as_me:$LINENO: checking for int" >&5
+ echo $ECHO_N "checking for int... $ECHO_C" >&6
+ if test "${ac_cv_type_int+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ if ((int *) 0)
+   return 0;
+ if (sizeof (int))
+   return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_type_int=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_type_int=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+ echo "${ECHO_T}$ac_cv_type_int" >&6
+ 
  echo "$as_me:$LINENO: checking size of int" >&5
  echo $ECHO_N "checking size of int... $ECHO_C" >&6
  if test "${ac_cv_sizeof_int+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test "$ac_cv_type_int" = yes; then
!   # The cast to unsigned long works around a bug in the HP C Compiler
!   # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
!   # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
!   # This bug is HP SR number 8606223364.
!   if test "$cross_compiling" = yes; then
!   # Depending upon the size, compute the lo and hi bounds.
! cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_lo=0 ac_mid=0
!   while :; do
!     cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid; break
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_lo=`expr $ac_mid + 1`
+ 		    if test $ac_lo -le $ac_mid; then
+ 		      ac_lo= ac_hi=
+ 		      break
+ 		    fi
+ 		    ac_mid=`expr 2 '*' $ac_mid + 1`
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
  
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
  int
  main ()
  {
! static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
! test_array [0] = 0
! 
    ;
    return 0;
  }
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4657,4707 ****
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_cv_sizeof_int=$ac_size
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   if test x$ac_cv_sizeof_int != x ; then break; fi
! done
  
  fi
  
! if test x$ac_cv_sizeof_int = x ; then
!   { { echo "$as_me:$LINENO: error: cannot determine a size for int" >&5
! echo "$as_me: error: cannot determine a size for int" >&2;}
     { (exit 1); exit 1; }; }
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
  echo "${ECHO_T}$ac_cv_sizeof_int" >&6
- 
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_INT $ac_cv_sizeof_int
  _ACEOF
  
  
  echo "$as_me:$LINENO: checking size of long" >&5
  echo $ECHO_N "checking size of long... $ECHO_C" >&6
  if test "${ac_cv_sizeof_long+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! #include "confdefs.h"
! #include <sys/types.h>
  
  
  int
  main ()
  {
! switch (0) case 0: case (sizeof (long) == $ac_size):;
    ;
    return 0;
  }
--- 5503,5937 ----
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_hi=-1 ac_mid=-1
!   while :; do
!     cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_lo=$ac_mid; break
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ 		       if test $ac_mid -le $ac_hi; then
+ 			 ac_lo= ac_hi=
+ 			 break
+ 		       fi
+ 		       ac_mid=`expr 2 '*' $ac_mid`
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   done
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_lo= ac_hi=
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ # Binary search between lo and hi bounds.
+ while test "x$ac_lo" != "x$ac_hi"; do
+   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+ test_array [0] = 0
  
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_lo=`expr '(' $ac_mid ')' + 1`
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! done
! case $ac_lo in
! ?*) ac_cv_sizeof_int=$ac_lo;;
! '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute sizeof (int), 77
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; } ;;
! esac
! else
!   if test "$cross_compiling" = yes; then
!   { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&2;}
     { (exit 1); exit 1; }; }
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ long longval () { return (long) (sizeof (int)); }
+ unsigned long ulongval () { return (long) (sizeof (int)); }
+ #include <stdio.h>
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ 
+   FILE *f = fopen ("conftest.val", "w");
+   if (! f)
+     exit (1);
+   if (((long) (sizeof (int))) < 0)
+     {
+       long i = longval ();
+       if (i != ((long) (sizeof (int))))
+ 	exit (1);
+       fprintf (f, "%ld\n", i);
+     }
+   else
+     {
+       unsigned long i = ulongval ();
+       if (i != ((long) (sizeof (int))))
+ 	exit (1);
+       fprintf (f, "%lu\n", i);
+     }
+   exit (ferror (f) || fclose (f) != 0);
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_sizeof_int=`cat conftest.val`
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ( exit $ac_status )
+ { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot compute sizeof (int), 77
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ rm -f conftest.val
+ else
+   ac_cv_sizeof_int=0
+ fi
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
  echo "${ECHO_T}$ac_cv_sizeof_int" >&6
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_INT $ac_cv_sizeof_int
  _ACEOF
  
  
+ echo "$as_me:$LINENO: checking for long" >&5
+ echo $ECHO_N "checking for long... $ECHO_C" >&6
+ if test "${ac_cv_type_long+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ if ((long *) 0)
+   return 0;
+ if (sizeof (long))
+   return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_type_long=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_type_long=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+ echo "${ECHO_T}$ac_cv_type_long" >&6
+ 
  echo "$as_me:$LINENO: checking size of long" >&5
  echo $ECHO_N "checking size of long... $ECHO_C" >&6
  if test "${ac_cv_sizeof_long+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test "$ac_cv_type_long" = yes; then
!   # The cast to unsigned long works around a bug in the HP C Compiler
!   # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
!   # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
!   # This bug is HP SR number 8606223364.
!   if test "$cross_compiling" = yes; then
!   # Depending upon the size, compute the lo and hi bounds.
! cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_lo=0 ac_mid=0
!   while :; do
!     cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid; break
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_lo=`expr $ac_mid + 1`
! 		    if test $ac_lo -le $ac_mid; then
! 		      ac_lo= ac_hi=
! 		      break
! 		    fi
! 		    ac_mid=`expr 2 '*' $ac_mid + 1`
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   done
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+ test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_hi=-1 ac_mid=-1
+   while :; do
+     cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
  int
  main ()
  {
! static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
! test_array [0] = 0
! 
    ;
    return 0;
  }
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4728,4753 ****
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_cv_sizeof_long=$ac_size
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   if test x$ac_cv_sizeof_long != x ; then break; fi
! done
  
  fi
  
! if test x$ac_cv_sizeof_long = x ; then
!   { { echo "$as_me:$LINENO: error: cannot determine a size for long" >&5
! echo "$as_me: error: cannot determine a size for long" >&2;}
     { (exit 1); exit 1; }; }
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
  echo "${ECHO_T}$ac_cv_sizeof_long" >&6
- 
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_LONG $ac_cv_sizeof_long
  _ACEOF
--- 5958,6125 ----
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_lo=$ac_mid; break
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ 		       if test $ac_mid -le $ac_hi; then
+ 			 ac_lo= ac_hi=
+ 			 break
+ 		       fi
+ 		       ac_mid=`expr 2 '*' $ac_mid`
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   done
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_lo= ac_hi=
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ # Binary search between lo and hi bounds.
+ while test "x$ac_lo" != "x$ac_hi"; do
+   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+ test_array [0] = 0
  
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_lo=`expr '(' $ac_mid ')' + 1`
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! done
! case $ac_lo in
! ?*) ac_cv_sizeof_long=$ac_lo;;
! '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute sizeof (long), 77
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; } ;;
! esac
! else
!   if test "$cross_compiling" = yes; then
!   { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&2;}
     { (exit 1); exit 1; }; }
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ long longval () { return (long) (sizeof (long)); }
+ unsigned long ulongval () { return (long) (sizeof (long)); }
+ #include <stdio.h>
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ 
+   FILE *f = fopen ("conftest.val", "w");
+   if (! f)
+     exit (1);
+   if (((long) (sizeof (long))) < 0)
+     {
+       long i = longval ();
+       if (i != ((long) (sizeof (long))))
+ 	exit (1);
+       fprintf (f, "%ld\n", i);
+     }
+   else
+     {
+       unsigned long i = ulongval ();
+       if (i != ((long) (sizeof (long))))
+ 	exit (1);
+       fprintf (f, "%lu\n", i);
+     }
+   exit (ferror (f) || fclose (f) != 0);
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_sizeof_long=`cat conftest.val`
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ( exit $ac_status )
+ { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot compute sizeof (long), 77
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ rm -f conftest.val
+ else
+   ac_cv_sizeof_long=0
+ fi
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
  echo "${ECHO_T}$ac_cv_sizeof_long" >&6
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_LONG $ac_cv_sizeof_long
  _ACEOF
*************** cat >>confdefs.h <<_ACEOF
*** 4815,4840 ****
  #define HAVE_LONG_LONG 1
  _ACEOF
  
  echo "$as_me:$LINENO: checking size of long long" >&5
  echo $ECHO_N "checking size of long long... $ECHO_C" >&6
  if test "${ac_cv_sizeof_long_long+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! #include "confdefs.h"
! #include <sys/types.h>
  
  
  int
  main ()
  {
! switch (0) case 0: case (sizeof (long long) == $ac_size):;
    ;
    return 0;
  }
--- 6187,6413 ----
  #define HAVE_LONG_LONG 1
  _ACEOF
  
+ echo "$as_me:$LINENO: checking for long long" >&5
+ echo $ECHO_N "checking for long long... $ECHO_C" >&6
+ if test "${ac_cv_type_long_long+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ if ((long long *) 0)
+   return 0;
+ if (sizeof (long long))
+   return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_type_long_long=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_type_long_long=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
+ echo "${ECHO_T}$ac_cv_type_long_long" >&6
+ 
  echo "$as_me:$LINENO: checking size of long long" >&5
  echo $ECHO_N "checking size of long long... $ECHO_C" >&6
  if test "${ac_cv_sizeof_long_long+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test "$ac_cv_type_long_long" = yes; then
!   # The cast to unsigned long works around a bug in the HP C Compiler
!   # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
!   # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
!   # This bug is HP SR number 8606223364.
!   if test "$cross_compiling" = yes; then
!   # Depending upon the size, compute the lo and hi bounds.
! cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_lo=0 ac_mid=0
!   while :; do
!     cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid; break
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_lo=`expr $ac_mid + 1`
! 		    if test $ac_lo -le $ac_mid; then
! 		      ac_lo= ac_hi=
! 		      break
! 		    fi
! 		    ac_mid=`expr 2 '*' $ac_mid + 1`
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   done
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)];
+ test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_hi=-1 ac_mid=-1
+   while :; do
+     cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
  int
  main ()
  {
! static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)];
! test_array [0] = 0
! 
    ;
    return 0;
  }
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4861,4886 ****
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_cv_sizeof_long_long=$ac_size
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   if test x$ac_cv_sizeof_long_long != x ; then break; fi
! done
  
  fi
  
! if test x$ac_cv_sizeof_long_long = x ; then
!   { { echo "$as_me:$LINENO: error: cannot determine a size for long long" >&5
! echo "$as_me: error: cannot determine a size for long long" >&2;}
     { (exit 1); exit 1; }; }
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
  echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6
- 
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
  _ACEOF
--- 6434,6601 ----
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_lo=$ac_mid; break
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ 		       if test $ac_mid -le $ac_hi; then
+ 			 ac_lo= ac_hi=
+ 			 break
+ 		       fi
+ 		       ac_mid=`expr 2 '*' $ac_mid`
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   done
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_lo= ac_hi=
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ # Binary search between lo and hi bounds.
+ while test "x$ac_lo" != "x$ac_hi"; do
+   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
+ test_array [0] = 0
  
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_lo=`expr '(' $ac_mid ')' + 1`
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! done
! case $ac_lo in
! ?*) ac_cv_sizeof_long_long=$ac_lo;;
! '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute sizeof (long long), 77
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; } ;;
! esac
! else
!   if test "$cross_compiling" = yes; then
!   { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&2;}
     { (exit 1); exit 1; }; }
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ long longval () { return (long) (sizeof (long long)); }
+ unsigned long ulongval () { return (long) (sizeof (long long)); }
+ #include <stdio.h>
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ 
+   FILE *f = fopen ("conftest.val", "w");
+   if (! f)
+     exit (1);
+   if (((long) (sizeof (long long))) < 0)
+     {
+       long i = longval ();
+       if (i != ((long) (sizeof (long long))))
+ 	exit (1);
+       fprintf (f, "%ld\n", i);
+     }
+   else
+     {
+       unsigned long i = ulongval ();
+       if (i != ((long) (sizeof (long long))))
+ 	exit (1);
+       fprintf (f, "%lu\n", i);
+     }
+   exit (ferror (f) || fclose (f) != 0);
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_sizeof_long_long=`cat conftest.val`
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ( exit $ac_status )
+ { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot compute sizeof (long long), 77
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ rm -f conftest.val
+ else
+   ac_cv_sizeof_long_long=0
+ fi
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
  echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
  _ACEOF
*************** echo $ECHO_N "checking whether byte orde
*** 4894,4901 ****
  if test "${ac_cv_c_bigendian+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_cv_c_bigendian=unknown
! # See if sys/param.h defines the BYTE_ORDER macro.
  cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
--- 6609,6615 ----
  if test "${ac_cv_c_bigendian+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   # See if sys/param.h defines the BYTE_ORDER macro.
  cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 4904,4916 ****
  /* end confdefs.h.  */
  #include <sys/types.h>
  #include <sys/param.h>
  int
  main ()
  {
- 
  #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
   bogus endian macros
  #endif
    ;
    return 0;
  }
--- 6618,6631 ----
  /* end confdefs.h.  */
  #include <sys/types.h>
  #include <sys/param.h>
+ 
  int
  main ()
  {
  #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
   bogus endian macros
  #endif
+ 
    ;
    return 0;
  }
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 4946,4958 ****
  /* end confdefs.h.  */
  #include <sys/types.h>
  #include <sys/param.h>
  int
  main ()
  {
- 
  #if BYTE_ORDER != BIG_ENDIAN
   not big endian
  #endif
    ;
    return 0;
  }
--- 6661,6674 ----
  /* end confdefs.h.  */
  #include <sys/types.h>
  #include <sys/param.h>
+ 
  int
  main ()
  {
  #if BYTE_ORDER != BIG_ENDIAN
   not big endian
  #endif
+ 
    ;
    return 0;
  }
*************** else
*** 4991,5001 ****
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- if test $ac_cv_c_bigendian = unknown; then
- if test "$cross_compiling" = yes; then
-    echo $ac_n "cross-compiling... " 2>&6
  else
    cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
--- 6707,6775 ----
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
+ # It does not; compile a test program.
+ if test "$cross_compiling" = yes; then
+   # try to guess the endianness by grepping values into an object file
+   ac_cv_c_bigendian=unknown
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+ short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+ int
+ main ()
+ {
+  _ascii (); _ebcdic ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+   ac_cv_c_bigendian=yes
+ fi
+ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+   if test "$ac_cv_c_bigendian" = unknown; then
+     ac_cv_c_bigendian=no
+   else
+     # finding both strings is unlikely to happen, but who knows?
+     ac_cv_c_bigendian=unknown
+   fi
+ fi
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  else
    cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
*************** _ACEOF
*** 5003,5009 ****
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! main () {
    /* Are we little or big endian?  From Harbison&Steele.  */
    union
    {
--- 6777,6785 ----
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! int
! main ()
! {
    /* Are we little or big endian?  From Harbison&Steele.  */
    union
    {
*************** fi
*** 5037,5103 ****
  rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
  fi
  echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
  echo "${ECHO_T}$ac_cv_c_bigendian" >&6
! if test $ac_cv_c_bigendian = unknown; then
! echo "$as_me:$LINENO: checking to probe for byte ordering" >&5
! echo $ECHO_N "checking to probe for byte ordering... $ECHO_C" >&6
! 
! cat >conftest.c <<EOF
! short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
! short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
! void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; }
! short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
! short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
! void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; }
! int main() { _ascii (); _ebcdic (); return 0; }
! EOF
!  if test -f conftest.c ; then
!      if ${CC-cc} ${CFLAGS} -c conftest.c -o conftest.o && test -f conftest.o ; then
!         if test `grep -l BIGenDianSyS conftest.o` ; then
!            echo $ac_n ' big endian probe OK, ' 1>&6
!            ac_cv_c_bigendian=yes
!         fi
!         if test `grep -l LiTTleEnDian conftest.o` ; then
!            echo $ac_n ' little endian probe OK, ' 1>&6
!            if test $ac_cv_c_bigendian = yes ; then
!             ac_cv_c_bigendian=unknown;
!            else
!             ac_cv_c_bigendian=no
!            fi
!         fi
!         echo $ac_n 'guessing bigendian ...  ' >&6
!      fi
!   fi
! echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
! echo "${ECHO_T}$ac_cv_c_bigendian" >&6
! fi
! if test $ac_cv_c_bigendian = yes; then
  
  cat >>confdefs.h <<\_ACEOF
  #define WORDS_BIGENDIAN 1
  _ACEOF
! 
! 
! cat >>confdefs.h <<\_ACEOF
! #define HOST_WORDS_BIG_ENDIAN 1
! _ACEOF
! 
!   BYTEORDER=4321
! else
!   BYTEORDER=1234
! fi
! 
! cat >>confdefs.h <<_ACEOF
! #define BYTEORDER $BYTEORDER
! _ACEOF
! 
! if test $ac_cv_c_bigendian = unknown; then
!   { { echo "$as_me:$LINENO: error: unknown endianess - sorry, please pre-set ac_cv_c_bigendian" >&5
! echo "$as_me: error: unknown endianess - sorry, please pre-set ac_cv_c_bigendian" >&2;}
!    { (exit 1); exit 1; }; }
! fi
  
  
  
--- 6813,6838 ----
  rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
  echo "${ECHO_T}$ac_cv_c_bigendian" >&6
! case $ac_cv_c_bigendian in
!   yes)
  
  cat >>confdefs.h <<\_ACEOF
  #define WORDS_BIGENDIAN 1
  _ACEOF
!  ;;
!   no)
!      ;;
!   *)
!     { { echo "$as_me:$LINENO: error: unknown endianness
! presetting ac_cv_c_bigendian=no (or yes) will help" >&5
! echo "$as_me: error: unknown endianness
! presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
!    { (exit 1); exit 1; }; } ;;
! esac
  
  
  
*************** else
*** 5226,5248 ****
  fi
  
  
- 
- if test "${with_gcc_version_trigger+set}" = set; then
-   gcc_version_trigger=$with_gcc_version_trigger
- else
-   gcc_version_trigger=$srcdir/../gcc/version.c
- fi
- if test -f "${gcc_version_trigger}"; then
-   gcc_version_full=`grep version_string "${gcc_version_trigger}" | sed -e 's/.*"\([^"]*\)".*/\1/'`
- else
-   gcc_version_full=`$CC -v 2>&1 | sed -n 's/^gcc version //p'`
- fi
- gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
- 
- 
- 
- 
- 
                      ac_config_files="$ac_config_files Makefile install-defs.sh"
  cat >confcache <<\_ACEOF
  # This file is a shell script that caches the results of configure
--- 6961,6966 ----
*************** s,@ZDEPS@,$ZDEPS,;t t
*** 5948,5956 ****
  s,@ZINCS@,$ZINCS,;t t
  s,@GENINSRC_TRUE@,$GENINSRC_TRUE,;t t
  s,@GENINSRC_FALSE@,$GENINSRC_FALSE,;t t
- s,@gcc_version_trigger@,$gcc_version_trigger,;t t
- s,@gcc_version_full@,$gcc_version_full,;t t
- s,@gcc_version@,$gcc_version,;t t
  s,@LIBOBJS@,$LIBOBJS,;t t
  s,@LTLIBOBJS@,$LTLIBOBJS,;t t
  CEOF
--- 7666,7671 ----
diff -Nrcpad gcc-4.0.2/fastjar/configure.ac gcc-4.1.0/fastjar/configure.ac
*** gcc-4.0.2/fastjar/configure.ac	Thu Dec  2 11:03:21 2004
--- gcc-4.1.0/fastjar/configure.ac	Wed May 18 01:38:46 2005
*************** AC_STRUCT_TM
*** 37,50 ****
  gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG
  
  dnl Check for type-widths
! AC_COMPILE_CHECK_SIZEOF(char)
! AC_COMPILE_CHECK_SIZEOF(short)
! AC_COMPILE_CHECK_SIZEOF(int)
! AC_COMPILE_CHECK_SIZEOF(long)
! AC_CHECK_TYPES([long long],[AC_COMPILE_CHECK_SIZEOF(long long)])
  
  dnl Check byte order
! AC_C_BIGENDIAN_CROSS
  
  AC_ARG_WITH(system-zlib,
  [  --with-system-zlib      use installed libz])
--- 37,50 ----
  gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG
  
  dnl Check for type-widths
! AC_CHECK_SIZEOF(char)
! AC_CHECK_SIZEOF(short)
! AC_CHECK_SIZEOF(int)
! AC_CHECK_SIZEOF(long)
! AC_CHECK_TYPES([long long],[AC_CHECK_SIZEOF(long long)])
  
  dnl Check byte order
! AC_C_BIGENDIAN
  
  AC_ARG_WITH(system-zlib,
  [  --with-system-zlib      use installed libz])
*************** AC_MSG_CHECKING([whether to place genera
*** 89,94 ****
  AC_MSG_RESULT($generated_files_in_srcdir)
  AM_CONDITIONAL(GENINSRC, test x$generated_files_in_srcdir = xyes)
  
- TL_AC_GCC_VERSION([$srcdir/..])
- 
  AC_OUTPUT(Makefile install-defs.sh)
--- 89,92 ----
diff -Nrcpad gcc-4.0.2/fastjar/dostime.c gcc-4.1.0/fastjar/dostime.c
*** gcc-4.0.2/fastjar/dostime.c	Mon Mar 10 19:52:15 2003
--- gcc-4.1.0/fastjar/dostime.c	Wed Jun 29 02:59:06 2005
***************
*** 14,20 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
  
  #include <config.h>
--- 14,20 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
  
  #include <config.h>
diff -Nrcpad gcc-4.0.2/fastjar/dostime.h gcc-4.1.0/fastjar/dostime.h
*** gcc-4.0.2/fastjar/dostime.h	Thu Nov  7 14:07:19 2002
--- gcc-4.1.0/fastjar/dostime.h	Wed Jun 29 02:59:06 2005
***************
*** 14,20 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   */
  
  time_t dos2unixtime(unsigned long dostime);
--- 14,20 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
   */
  
  time_t dos2unixtime(unsigned long dostime);
diff -Nrcpad gcc-4.0.2/fastjar/fastjar.1 gcc-4.1.0/fastjar/fastjar.1
*** gcc-4.0.2/fastjar/fastjar.1	Wed Sep 28 06:40:03 2005
--- gcc-4.1.0/fastjar/fastjar.1	Tue Feb 28 09:19:55 2006
***************
*** 129,135 ****
  .\" ========================================================================
  .\"
  .IX Title "FASTJAR 1"
! .TH FASTJAR 1 "2005-09-28" "gcc-4.0.2" "GNU"
  .SH "NAME"
  fastjar \- archive tool for Java archives
  .SH "SYNOPSIS"
--- 129,135 ----
  .\" ========================================================================
  .\"
  .IX Title "FASTJAR 1"
! .TH FASTJAR 1 "2006-02-28" "gcc-4.1.0" "GNU"
  .SH "NAME"
  fastjar \- archive tool for Java archives
  .SH "SYNOPSIS"
*************** in the \s-1GCC\s0 version.
*** 178,183 ****
--- 178,187 ----
  .IP "\fB\-M\fR" 4
  .IX Item "-M"
  Do not create a manifest file for the entries.
+ .IP "\fB\-i\fR" 4
+ .IX Item "-i"
+ Generate an index of the packages in this jar and its Class-Path
+ (currently a no-op for jar command-line compatibility).
  .IP "\fB\-0\fR" 4
  .IX Item "-0"
  Store only; use no \s-1ZIP\s0 compression.
diff -Nrcpad gcc-4.0.2/fastjar/fastjar.info gcc-4.1.0/fastjar/fastjar.info
*** gcc-4.0.2/fastjar/fastjar.info	Wed Sep 28 06:40:02 2005
--- gcc-4.1.0/fastjar/fastjar.info	Tue Feb 28 09:19:54 2006
***************
*** 1,5 ****
  This is fastjar.info, produced by makeinfo version 4.8 from
! /scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/fastjar/fastjar.texi.
  
  INFO-DIR-SECTION Programming
  START-INFO-DIR-ENTRY
--- 1,5 ----
  This is fastjar.info, produced by makeinfo version 4.8 from
! /scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/fastjar/fastjar.texi.
  
  INFO-DIR-SECTION Programming
  START-INFO-DIR-ENTRY
*************** the same order the `-m' and `-f' flags a
*** 84,89 ****
--- 84,93 ----
  `-M'
       Do not create a manifest file for the entries.
  
+ `-i'
+      Generate an index of the packages in this jar and its Class-Path
+      (currently a no-op for jar command-line compatibility).
+ 
  `-0'
       Store only; use no ZIP compression.
  
*************** GNU GENERAL PUBLIC LICENSE
*** 149,155 ****
                           Version 2, June 1991
  
       Copyright (C) 1989, 1991 Free Software Foundation, Inc.
!      59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
  
       Everyone is permitted to copy and distribute verbatim copies
       of this license document, but changing it is not allowed.
--- 153,159 ----
                           Version 2, June 1991
  
       Copyright (C) 1989, 1991 Free Software Foundation, Inc.
!      51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  
       Everyone is permitted to copy and distribute verbatim copies
       of this license document, but changing it is not allowed.
*************** modification follow.
*** 435,442 ****
       ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  
                        END OF TERMS AND CONDITIONS
! How to Apply These Terms to Your New Programs
! =============================================
  
  If you develop a new program, and you want it to be of the greatest
  possible use to the public, the best way to achieve this is to make it
--- 439,446 ----
       ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  
                        END OF TERMS AND CONDITIONS
! Appendix: How to Apply These Terms to Your New Programs
! =======================================================
  
  If you develop a new program, and you want it to be of the greatest
  possible use to the public, the best way to achieve this is to make it
*************** the "copyright" line and a pointer to wh
*** 462,469 ****
       GNU General Public License for more details.
  
       You should have received a copy of the GNU General Public License
!      along with this program; if not, write to the Free Software Foundation,
!      Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  
     Also add information on how to contact you by electronic and paper
  mail.
--- 466,473 ----
       GNU General Public License for more details.
  
       You should have received a copy of the GNU General Public License
!      along with this program; if not, write to the Free Software
!      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  
     Also add information on how to contact you by electronic and paper
  mail.
*************** GNU Library General Public License inste
*** 504,510 ****
  Tag Table:
  Node: Top889
  Node: Invoking fastjar1207
! Node: Invoking grepjar2907
! Node: Copying3518
  
  End Tag Table
--- 508,514 ----
  Tag Table:
  Node: Top889
  Node: Invoking fastjar1207
! Node: Invoking grepjar3044
! Node: Copying3655
  
  End Tag Table
diff -Nrcpad gcc-4.0.2/fastjar/fastjar.texi gcc-4.1.0/fastjar/fastjar.texi
*** gcc-4.0.2/fastjar/fastjar.texi	Fri Jul 23 23:34:13 2004
--- gcc-4.1.0/fastjar/fastjar.texi	Wed Feb  8 05:55:47 2006
*************** Copyright @copyright{} @value{copyrights
*** 58,65 ****
  For the @value{which-gcj} Version*
  @sp 1
  Published by the Free Software Foundation @*
! 59 Temple Place - Suite 330@*
! Boston, MA 02111-1307, USA@*
  @sp 1
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU General Public License as published by the
--- 58,65 ----
  For the @value{which-gcj} Version*
  @sp 1
  Published by the Free Software Foundation @*
! 51 Franklin Street, Fifth Floor@*
! Boston, MA 02110-1301, USA@*
  @sp 1
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU General Public License as published by the
*************** in the GCC version.
*** 150,155 ****
--- 150,159 ----
  @item -M
  Do not create a manifest file for the entries.
  
+ @item -i
+ Generate an index of the packages in this jar and its Class-Path
+ (currently a no-op for jar command-line compatibility).
+ 
  @item -0
  Store only; use no ZIP compression.
  
diff -Nrcpad gcc-4.0.2/fastjar/grepjar.1 gcc-4.1.0/fastjar/grepjar.1
*** gcc-4.0.2/fastjar/grepjar.1	Wed Sep 28 06:40:03 2005
--- gcc-4.1.0/fastjar/grepjar.1	Tue Feb 28 09:19:55 2006
***************
*** 129,135 ****
  .\" ========================================================================
  .\"
  .IX Title "GREPJAR 1"
! .TH GREPJAR 1 "2005-09-28" "gcc-4.0.2" "GNU"
  .SH "NAME"
  grepjar \- search files in a jar file for a pattern
  .SH "SYNOPSIS"
--- 129,135 ----
  .\" ========================================================================
  .\"
  .IX Title "GREPJAR 1"
! .TH GREPJAR 1 "2006-02-28" "gcc-4.1.0" "GNU"
  .SH "NAME"
  grepjar \- search files in a jar file for a pattern
  .SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.2/fastjar/jargrep.c gcc-4.1.0/fastjar/jargrep.c
*** gcc-4.0.2/fastjar/jargrep.c	Tue Jan 28 22:25:47 2003
--- gcc-4.1.0/fastjar/jargrep.c	Thu Feb  2 00:48:20 2006
***************
*** 1,6 ****
  /*
    jargrep.c - main functions for jargrep utility
!   Copyright (C) 2002, 2003 Free Software Foundation
    Copyright (C) 1999, 2000 Bryan Burns
    Copyright (C) 2000 Cory Hollingsworth 
   
--- 1,6 ----
  /*
    jargrep.c - main functions for jargrep utility
!   Copyright (C) 2002, 2003, 2006 Free Software Foundation
    Copyright (C) 1999, 2000 Bryan Burns
    Copyright (C) 2000 Cory Hollingsworth 
   
***************
*** 19,25 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
  
  /* Id: jargrep.c,v 1.5 2002/01/03 04:57:56 rodrigc Exp
--- 19,25 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
  
  /* Id: jargrep.c,v 1.5 2002/01/03 04:57:56 rodrigc Exp
*************** void version ()
*** 783,789 ****
    printf("grepjar (%s) %s\n\n", PACKAGE, VERSION);
    printf("Copyright 1999, 2000, 2001  Bryan Burns\n");
    printf("Copyright 2000 Cory Hollingsworth\n");
!   printf("Copyright 2002 Free Software Foundation\n");
    printf("\
  This is free software; see the source for copying conditions.  There is NO\n\
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
--- 783,789 ----
    printf("grepjar (%s) %s\n\n", PACKAGE, VERSION);
    printf("Copyright 1999, 2000, 2001  Bryan Burns\n");
    printf("Copyright 2000 Cory Hollingsworth\n");
!   printf("Copyright 2006 Free Software Foundation\n");
    printf("\
  This is free software; see the source for copying conditions.  There is NO\n\
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
diff -Nrcpad gcc-4.0.2/fastjar/jargrep.h gcc-4.1.0/fastjar/jargrep.h
*** gcc-4.0.2/fastjar/jargrep.h	Wed Jan  9 23:22:20 2002
--- gcc-4.1.0/fastjar/jargrep.h	Wed Jun 29 02:59:06 2005
***************
*** 15,21 ****
  
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
  
  #define JG_PRINT_BYTEOFFSET		0x00000001
--- 15,21 ----
  
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
  
  #define JG_PRINT_BYTEOFFSET		0x00000001
diff -Nrcpad gcc-4.0.2/fastjar/jartool.c gcc-4.1.0/fastjar/jartool.c
*** gcc-4.0.2/fastjar/jartool.c	Thu Sep 23 23:40:33 2004
--- gcc-4.1.0/fastjar/jartool.c	Wed Feb  8 05:55:47 2006
***************
*** 1,6 ****
  /*
    jartool.c - main functions for fastjar utility
!   Copyright (C) 2002, 2004  Free Software Foundation
    Copyright (C) 1999, 2000, 2001  Bryan Burns
    
    This program is free software; you can redistribute it and/or
--- 1,6 ----
  /*
    jartool.c - main functions for fastjar utility
!   Copyright (C) 2002, 2004, 2005, 2006  Free Software Foundation
    Copyright (C) 1999, 2000, 2001  Bryan Burns
    
    This program is free software; you can redistribute it and/or
***************
*** 15,21 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
  
  /*
--- 15,21 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
  
  /*
*************** ub4 end_of_entries;
*** 321,327 ****
  #define OPT_HELP     LONG_OPT (0)
  
  /* This holds all options.  */
! #define OPTION_STRING "-ctxuvVf:m:C:0ME@"
  
  /* Define the MANIFEST content here to have it easier with calculations
     below.  This is for the case we create an empty MANIFEST.MF.  */
--- 321,327 ----
  #define OPT_HELP     LONG_OPT (0)
  
  /* This holds all options.  */
! #define OPTION_STRING "-ctxuvVf:m:C:0MiE@"
  
  /* Define the MANIFEST content here to have it easier with calculations
     below.  This is for the case we create an empty MANIFEST.MF.  */
*************** static const struct option options[] =
*** 335,341 ****
    { NULL, no_argument, NULL, 0 }
  };
  
! int main(int argc, char **argv){
  
    char *mfile = NULL;
    
--- 335,342 ----
    { NULL, no_argument, NULL, 0 }
  };
  
! int main(int argc, char **argv)
! {
  
    char *mfile = NULL;
    
*************** int main(int argc, char **argv){
*** 406,411 ****
--- 407,415 ----
      case 'M':
        manifest = FALSE;
        break;
+     case 'i':
+       action = ACTION_INDEX;
+       break;
  
      case OPT_HELP:
        help(argv[0]);
*************** int main(int argc, char **argv){
*** 423,428 ****
--- 427,439 ----
      }
    }
  
+   if(verbose && action == ACTION_INDEX)
+     fprintf(stderr, "Warning: '-i' option is currently a no-op\n");
+ 
+   /* FIXME: implement -i option. */
+   if(action == ACTION_INDEX)
+     exit(0);
+ 
    /* We might have seen `--'.  In this case we want to make sure that
       all following options are handled as file names.  */
    while (optind < argc)
*************** static int args_current_g;
*** 602,610 ****
  static char **args_g;
  
  static void 
! init_args(args, current)
!      char **args;
!      int current;
  {
    if(!read_names_from_stdin)
      {
--- 613,619 ----
  static char **args_g;
  
  static void 
! init_args(char **args, int current)
  {
    if(!read_names_from_stdin)
      {
*************** init_args(args, current)
*** 614,620 ****
  }
  
  static char *
! get_next_arg ()
  {
    static int reached_end = 0;
  
--- 623,629 ----
  }
  
  static char *
! get_next_arg (void)
  {
    static int reached_end = 0;
  
*************** get_next_arg ()
*** 674,680 ****
      }
  }
  
! void init_headers(){
    /* packing file header */
    /* magic number */
    file_header[0] = 0x50;
--- 683,690 ----
      }
  }
  
! void init_headers(void)
! {
    /* packing file header */
    /* magic number */
    file_header[0] = 0x50;
*************** void init_headers(){
*** 725,731 ****
    
  }
  
! void add_entry(struct zipentry *ze){
  
    if(ziplist == NULL){
      ziplist = ze;
--- 735,742 ----
    
  }
  
! void add_entry(struct zipentry *ze)
! {
  
    if(ziplist == NULL){
      ziplist = ze;
*************** int read_entries (int fd)
*** 906,912 ****
    return 0;
  }
  
! int make_manifest(int jfd, const char *mf_name, int updating){
    time_t current_time;
    int nlen;   /* length of file name */
    int mod_time; /* file modification time */
--- 917,924 ----
    return 0;
  }
  
! int make_manifest(int jfd, const char *mf_name, int updating)
! {
    time_t current_time;
    int nlen;   /* length of file name */
    int mod_time; /* file modification time */
*************** void usage(const char *filename){
*** 2212,2222 ****
    exit (1);
  }
  
! void version ()
  {
    printf("jar (%s) %s\n\n", PACKAGE, VERSION);
    printf("Copyright 1999, 2000, 2001  Bryan Burns\n");
!   printf("Copyright 2002, 2004 Free Software Foundation\n");
    printf("\
  This is free software; see the source for copying conditions.  There is NO\n\
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
--- 2224,2234 ----
    exit (1);
  }
  
! void version (void)
  {
    printf("jar (%s) %s\n\n", PACKAGE, VERSION);
    printf("Copyright 1999, 2000, 2001  Bryan Burns\n");
!   printf("Copyright 2006 Free Software Foundation\n");
    printf("\
  This is free software; see the source for copying conditions.  There is NO\n\
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
*************** Store many files together in a single `j
*** 2245,2250 ****
--- 2257,2264 ----
    --help          print this help, then exit\n\
    -m FILE         include manifest information from specified manifest file\n\
    -M              Do not create a manifest file for the entries\n\
+   -i              generate an index of the packages in this jar\n\
+                   and its Class-Path (currently unimplemented)\n\
    -v              generate verbose output on standard output\n\
    -V, --version   display version information\n\
  ");
*************** Example 2: use an existing manifest file
*** 2264,2271 ****
  }
  
  static char *
! jt_strdup(s)
!      char *s;
  {
    char *result = (char*)malloc(strlen(s) + 1);
    if (result == (char*)0)
--- 2278,2284 ----
  }
  
  static char *
! jt_strdup(char *s)
  {
    char *result = (char*)malloc(strlen(s) + 1);
    if (result == (char*)0)
diff -Nrcpad gcc-4.0.2/fastjar/jartool.h gcc-4.1.0/fastjar/jartool.h
*** gcc-4.0.2/fastjar/jartool.h	Tue Jul  6 21:40:08 2004
--- gcc-4.1.0/fastjar/jartool.h	Wed Feb  8 05:55:47 2006
***************
*** 49,55 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   */
  
  #ifndef __FASTJAR_JARTOOL_H__
--- 49,55 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
   */
  
  #ifndef __FASTJAR_JARTOOL_H__
***************
*** 63,68 ****
--- 63,69 ----
  #define ACTION_EXTRACT 2
  #define ACTION_UPDATE 3
  #define ACTION_LIST 4
+ #define ACTION_INDEX 5
  
  #define TRUE 1
  #define FALSE 0
diff -Nrcpad gcc-4.0.2/fastjar/pushback.c gcc-4.1.0/fastjar/pushback.c
*** gcc-4.0.2/fastjar/pushback.c	Thu Jan  3 04:57:56 2002
--- gcc-4.1.0/fastjar/pushback.c	Wed Jun 29 02:59:06 2005
***************
*** 66,72 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   */
  
  #include <unistd.h>
--- 66,72 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
   */
  
  #include <unistd.h>
diff -Nrcpad gcc-4.0.2/fastjar/pushback.h gcc-4.1.0/fastjar/pushback.h
*** gcc-4.0.2/fastjar/pushback.h	Sat Dec  9 03:08:23 2000
--- gcc-4.1.0/fastjar/pushback.h	Wed Jun 29 02:59:06 2005
***************
*** 14,20 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
  
  struct pb_file {
--- 14,20 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
  
  struct pb_file {
diff -Nrcpad gcc-4.0.2/fastjar/shift.c gcc-4.1.0/fastjar/shift.c
*** gcc-4.0.2/fastjar/shift.c	Tue Jul  6 21:40:08 2004
--- gcc-4.1.0/fastjar/shift.c	Wed Jun 29 02:59:06 2005
*************** General Public License for more details.
*** 13,19 ****
    
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  USA.  */
  
  
--- 13,19 ----
    
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
  USA.  */
  
  
diff -Nrcpad gcc-4.0.2/fastjar/shift.h gcc-4.1.0/fastjar/shift.h
*** gcc-4.0.2/fastjar/shift.h	Tue Jul  6 21:40:08 2004
--- gcc-4.1.0/fastjar/shift.h	Wed Jun 29 02:59:06 2005
*************** General Public License for more details.
*** 13,19 ****
    
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  USA.  */
  
  
--- 13,19 ----
    
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
  USA.  */
  
  
diff -Nrcpad gcc-4.0.2/fastjar/zipfile.h gcc-4.1.0/fastjar/zipfile.h
*** gcc-4.0.2/fastjar/zipfile.h	Tue Jul  6 21:40:08 2004
--- gcc-4.1.0/fastjar/zipfile.h	Wed Jun 29 02:59:06 2005
***************
*** 34,40 ****
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   */
  
  #define LOC_EXTRA   6  /* extra bytes */
--- 34,40 ----
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
!   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
   */
  
  #define LOC_EXTRA   6  /* extra bytes */
diff -Nrcpad gcc-4.0.2/gcc/java/ChangeLog gcc-4.1.0/gcc/java/ChangeLog
*** gcc-4.0.2/gcc/java/ChangeLog	Wed Sep 21 03:57:07 2005
--- gcc-4.1.0/gcc/java/ChangeLog	Tue Feb 28 08:27:36 2006
***************
*** 1,41 ****
! 2005-09-20  Release Manager
  
! 	* GCC 4.0.2 released.
  
! 2005-08-17  Tom Tromey  <tromey@redhat.com>
  
  	* class.c (make_class_data): Always emit JV_STATE_PRELOADING for
  	class' initial state.
  
! 2005-08-17  Paolo Bonzini  <bonzini@gnu.org>
  
! 	Backport from mainline:
  
! 	2005-05-19  Paolo Bonzini  <bonzini@gnu.org>
  
! 	PR java/17845
  
! 	* parse.y (register_package, package_list): Remove.
! 	(package_declaration): Do not call register_package.
! 	(do_resolve_class): Do not use package_list.
  
! 	2005-05-10  Paolo Bonzini  <bonzini@gnu.org>
  
! 	PR java/21436
! 	* class.c (maybe_layout_super_class): Look for imports in this_class.
! 	* parse.h (ctxp_for_generation_last): New.
! 	(do_resolve_class): Add a parameter.
! 	* parse.y (ctxp_for_generation_last): New.
! 	(java_pop_parser_context): Add at end of list.
! 	(find_in_imports, find_in_imports_on_demand): Look in ctxp
! 	if the TYPE_IMPORT_LIST or respectively the TYPE_IMPORT_DEMAND_LIST of
! 	the given type are NULL.
! 	(do_resolve_class): Look into the imports of the new second parameter.
! 	Adjust recursive calls.
! 	(resolve_class, resolve_inner_class, find_as_inner_class): Adjust
! 	calls to do_resolve_class.
! 	(create_class): Set the TYPE_IMPORT_LIST and TYPE_IMPORT_DEMAND_LIST.
! 	(java_complete_class): Do not do that here.
  
  2005-08-10  Robin Green <greenrd@greenrd.org>
  
--- 1,257 ----
! 2006-02-28  Release Manager
  
! 	* GCC 4.1.0 released.
  
! 2006-02-09  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/26192
! 	* expr.c (expand_invoke): Allow methods in arrays to be resolved
! 	in their superclass.
! 
! 2006-02-07  Andrew Haley  <aph@redhat.com>
! 
! 	* expr.c (expand_invoke): (BC mode.)  If we find a method in a
! 	class other than the one in which we expected to find it, ignore
! 	the result.
! 
! 2006-01-30  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/21428
! 	* parse.y (source_start_java_method): Mark DECL_ARTIFICIAL("this").
! 
! 2006-01-21  Joseph S. Myers  <joseph@codesourcery.com>
! 
! 	* jv-scan.c (version), jcf-dump.c (version), gjavah.c (version):
! 	Update copyright notice dates.
! 
! 2006-01-16  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/25535
! 	* constants.c (build_constants_constructor): move initializer into
! 	first halfword on a 64-bit big-endian machine.
! 
! 2006-01-06  Tom Tromey  <tromey@redhat.com>
! 
! 	* gcj.texi (Arrays): Added more documentation for
! 	JvNewObjectArray.
! 	(Primitive types): Correct information about primitive classes.
! 	(Reference types): New node.
! 	(Index): New node.
! 
! 2005-12-16  Alexandre Oliva  <aoliva@redhat.com>
! 
! 	* jcf-parse.c (set_source_filename): Set the decl source location
! 	even when returning early.
! 
! 2005-12-15  Tom Tromey  <tromey@redhat.com>
! 	    Andrew Haley  <aph@redhat.com>
! 
! 	PR java/25429
! 	* parse.y (resolve_expression_name): Don't generate accessor
! 	methods for constant fields.
! 
! 2005-12-13  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/25366
! 	PR java/25368
! 	* class.c (maybe_layout_super_class): Update current_class before
! 	calling do_resolve_class.
! 
! 2005-12-08  Andrew Haley  <aph@redhat.com>
! 
! 	PR libgcj/25265
! 	* java-tree.h (enum java_tree_index): Add JTI_SOFT_NOSUCHFIELD_NODE.
! 	(soft_abstractmethod_node): New.
! 	* expr.c (build_field_ref): Add in-line check for missing field.
! 	* decl.c (java_init_decl_processing): Add soft_nosuchfield_node.
! 
! 2005-12-06  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/25283:
! 	* parse.y (patch_new_array_init): Revert previous patch.
! 	(lookup_method_invoke): Use size-less array type when creating an
! 	anonymous constructor.
! 
! 2005-12-05  Tom Tromey  <tromey@redhat.com>
! 
! 	* parse.y (patch_new_array_init): Don't set length on array.
! 
! 2005-11-29  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/18278:
! 	* expr.c (build_jni_stub): Unwrap the return value.
! 	* java-tree.h (soft_unwrapjni_node): New define.
! 	(enum java_tree_index): Added JTI_SOFT_UNWRAPJNI_NODE.
! 	* decl.c (java_init_decl_processing): Initialize
! 	soft_unwrapjni_node.
! 
! 2005-11-24  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* gcj.texi (gij options): Add -Xss documentation.
! 
! 2005-11-08  Wil Mahan  <wmahan@gmail.com>
! 
! 	PR java/23617
! 	* zextract.c (read_zip_archive): Fix out of memory error when
! 	reading jar files with zip-style comments.
! 
! 2005-11-07   Terry Laurenzo   <tlaurenzo@gmail.com>
! 
! 	* gjavah.c (HANDLE_CODE_ATTRIBUTE): Only define for ELF Object
! 	formats.
! 	* gjavah.c (decompile_method): Add ATTRIBUTE_UNUSED
! 
! 2005-10-12  Nathan Sidwell  <nathan@codesourcery.com>
! 	    Wil Mahan <wmahan@gmail.com>
! 
! 	PR java/23620
! 	* class.c (make_class): Create empty binfo here.
! 	(set_super_info): Only create binfo if we have superclasses.
! 
! 2005-10-03  Ranjit Mathew  <rmathew@gcc.gnu.org>
! 
! 	PR java/24127
! 	* parse.y (method_header): Make the result of the rule a NULL_TREE
! 	when a parsing error occurs.
! 
! 2005-09-29  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/24120:
! 	* jcf-io.c (memoized_dirlist_hash): New function.
! 	(caching_stat): Use it.
! 
! 2005-09-21  Ranjit Mathew  <rmathew@gcc.gnu.org>
! 
! 	PR java/21418
! 	* class.c (inherits_from_p): Try to lay out super class
! 	if it is not already laid out.
! 	(maybe_layout_super_class): Handle the case where SUPER_CLASS
! 	is a NULL_TREE.
! 
! 2005-09-18  James A. Morrison  <phython@gcc.gnu.org>
! 
! 	* builtins.c (max_builtin, min_builtin, abs_builtin,
! 	java_build_function_call_expr): Use fold_buildN.
! 	* class.c (layout_class_method): Likewise.
! 	* expr.c (java_truthvalue_conversion, build_java_jsr,
! 	build_java_arrayaccess, expand_java_arrayload, expand_iinc,
! 	build_java_binop, build_field_ref, expand_compare,
! 	build_known_method_ref, build_invokevirtual,
! 	process_jvm_instruction): Likewise.
! 	* parse.y (patch_binop, patch_exit_expr): Likewise.
! 	* typeck.c (convert_ieee_real_to_integer): Likewise.
! 	(convert): Don't call fold after convert_ieee_real_to_integer.
! 
! 2005-09-14  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR java/23891
! 	* parse.y (maybe_create_class_interface_decl): Set TYPE_PACKAGE for
! 	the newly created type. Set import lists here, not in create_class.
! 	(jdep_resolve_class): Set current_class.
! 	(do_resolve_class): Use current_class's TYPE_PACKAGE to determine 
! 	the current package context, not ctxp->package.
! 	(cicp_cache): Removed.
! 	(class_in_current_package): Simplify implementation using TYPE_PACKAGE.
! 	* jcf-parse.c (give_name_to_class): Set TYPE_PACKAGE.
! 	* java-tree.h (TYPE_PACKAGE): New macro.
! 	(struct lang_type): New member 'package'.
! 
! 2005-09-09  Andrew Haley  <aph@redhat.com>
! 
! 	PR libgcj/23182 
! 	* expr.c (pop_type_0): If the expected type is object or ptr
! 	(i.e. void*), return the type of the object we just popped from
! 	the stack.
! 
! 2005-09-06  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* java-gimplify.c (java_gimplify_block): NULL out the old BLOCK's
! 	BLOCK_EXPR_BODY before returning the new BIND_EXPR.
! 
! 2005-09-06  Kazu Hirata  <kazu@codesourcery.com>
! 
! 	* check-init.c, decl.c, expr.c, gcj.texi, java-tree.h,
! 	jcf-parse.c, jcf.h, parse.h, parse.y, typeck.c: Fix comment
! 	typos.  Follow spelling conventions.
! 
! 2005-09-05  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	PR java/23431
! 	* typeck.c (lookup_do): Look up interfaces for the original class,
! 	not the base class.
! 	* parse.y (java_check_regular_methods): Fix diagnostic message for
! 	more restrictive overriding of a method from an interface.
! 
! 2005-08-16  Tom Tromey  <tromey@redhat.com>
  
  	* class.c (make_class_data): Always emit JV_STATE_PRELOADING for
  	class' initial state.
  
! 2005-08-16  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	PR java/22113
! 	* lex.c (do_java_lex): Define MAX_TOKEN_LEN. Avoid overflowing
! 	`literal_token' for large numeric input tokens.
  
! 2005-08-16  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	PR java/19870
! 	* parse.y (nested_field_access_p): Rename to nested_member_access_p
! 	and expand to handle method accesses across nested classes.
! 	(build_outer_method_access_method): Rename to
! 	build_nested_method_access_method.  Minor adjustments to comments.
! 	(resolve_expression_name): Use the newly-renamed
! 	nested_member_access_p method.
! 	(resolve_qualified_expression_name): Likewise.
! 	(patch_method_invocation): Also consider static methods for access
! 	method generation.  Minor adjustments to comments.
! 	(maybe_use_access_method): Use the more general
! 	nested_memeber_access_p to determine access across nested class
! 	boundaries.  Allow THIS_ARG to be NULL (for static methods).
  
! 2005-08-15  Tom Tromey  <tromey@redhat.com>
  
! 	PR java/23300.
! 	* expr.c (build_field_ref): Don't generate otable reference when
! 	DECL_FIELD_OFFSET is 0.
! 	* class.c (maybe_layout_super_class): Pass outer class to
! 	do_resolve_class.
  
! 2005-08-15  Tom Tromey  <tromey@redhat.com>
! 
! 	* java-tree.h (LABEL_IN_SUBR): Removed.
! 	(LABEL_IN_SUBR): Likewise.
! 	(LABEL_IS_SUBR_START): Likewise.
! 	(LABEL_SUBR_START): Likewise.
! 	(LABEL_SUBR_CONTEXT): Likewise.
! 	(LABEL_CHANGED): Likewise.
! 	(LABEL_RETURN_LABEL): Likewise.
! 	(LABEL_RETURN_TYPE_STATE): Likewise.
! 	(LABEL_RETURN_LABELS): Likewise.
! 	(RETURN_MAP_ADJUSTED): Likewise.
! 	(LABEL_PENDING_CHAIN): Likewise.
! 
! 2005-08-15  Tom Tromey  <tromey@redhat.com>
! 
! 	* Make-lang.in (JAVA_OBJS): Removed verify.o
! 	(java/verify.o): Removed.
! 	* verify.c: Removed.
! 	* lang.c (flag_new_verifier): Removed.
! 	(java_post_options): Updated.
! 	* java-tree.h (flag_new_verifier): Removed.
! 	(verify_jvm_instructions): Removed.
! 	* expr.c (pop_type_0): Assume flag_new_verifier is true.
! 	(build_java_check_indexed_type): Likewise.
! 	(expand_java_arraystore): Likewise.
! 	(expand_java_arrayload): Likewise.
! 	(pop_arguments): Likewise.
! 	(expand_byte_code): Likewise.
! 	(process_jvm_instruction): Likewise.
! 
! 2005-08-10  Andrew Haley  <aph@redhat.com>
! 
! 	* java-gimplify.c (java_gimplify_modify_expr): Fix any pointer
! 	type mismatches to make legal GIMPLE.
  
  2005-08-10  Robin Green <greenrd@greenrd.org>
  
***************
*** 43,81 ****
  	* parse.y (maybe_use_access_method): Generalize check from
  	java.lang.Object to any superclass of current_class
  
  2005-07-28  Andrew Haley  <aph@redhat.com>
  
! 	* except.c (expand_end_java_handler): Insert an empty ASM_EXPR at
! 	the start of each catch block.
  
! 2005-07-07  Release Manager
  
! 	* GCC 4.0.1 released.
  
  2005-06-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	* jv-scan.c (fatal_error, warning): Use gmsgid instead of msgid for
! 	argument name.
  	* gjavah.c (error): Likewise.
  	* java-tree.h (parse_error_context): Likewise.
  	* parse.y (parse_error_context, parse_warning_context,
  	issue_warning_error_from_context): Likewise.
  
! 2005-06-02  Tom Tromey  <tromey@redhat.com>
  
  	PR java/21722:
  	* class.c (build_static_field_ref): Don't fold constant fields if
  	current class is from a .class file and we're using indirect
  	dispatch.
  
  2005-05-26  Bryce McKinlay  <mckinlay@redhat.com>
  
  	* decl.c (GCJ_BINARYCOMPAT_ADDITION, 
  	GCJ_BOOTSTRAP_LOADER_ADDITION): Removed.
! 	(FLAG_BINARYCOMPAT_ABI, MINOR_BINARYCOMPAT_ABI_VERSION): New.
  	(GCJ_CURRENT_BC_ABI_VERSION): Use new method to calculate version ID.
! 	(parse_version): Calculate version ID using new method. Use bit-flag
! 	for flag_indirect_dispatch.
  
  2005-05-15  Tom Tromey  <tromey@redhat.com>
  
--- 259,609 ----
  	* parse.y (maybe_use_access_method): Generalize check from
  	java.lang.Object to any superclass of current_class
  
+ 2005-08-08  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* class.c (build_class_ref): Wrap the primary class type in a
+ 	NOP_EXPR.
+ 	* parse.y (java_complete_lhs) <COMPONENT_REF case>: Extract the
+ 	primary class type from the NOP_EXPR in which it was placed.
+ 
+ 2005-07-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* expr.c (expand_load_internal): Fix missing parens in
+ 	predicate.
+ 
  2005-07-28  Andrew Haley  <aph@redhat.com>
  
! 	* expr.c (expand_load_internal): Convert to destination type.
  
! 2005-07-22  Manfred Hollstein  <mh@suse.com>
  
! 	* verify-impl.c (check_class_constant): Fix uninitialised warnings.
! 	(check_constant): Likewise.
! 	(check_wide_constant): Likewise.
! 
! 2005-07-20  Giovanni Bajo  <giovannibajo@libero.it>
! 
! 	Make CONSTRUCTOR use VEC to store initializers.
! 	* check-init.c (check_init): Update to cope with VEC in
! 	CONSTRUCTOR_ELTS.
! 	* class.c (make_field_value, make_method_value, get_dispatch_table,
! 	make_class_data, emit_symbol_table, emit_catch_table,
! 	emit_assertion_table): Use build_constructor_from_list instead of
! 	build_constructor.
! 	* constants.c (build_constants_constructor): Likewise.
! 	* java-gimplify.c (java_gimplify_new_array_init): Update to cope with
! 	VEC in CONSTRUCTOR_ELTS.
! 	* java-tree.h (START_RECORD_CONSTRUCTOR, PUSH_SUPER_VALUE,
! 	PUSH_FIELD_VALUE, FINISH_RECORD_CONSTRUCTOR): Create a VEC instead
! 	of a TREE_LIST.
! 	* jcf-write.c (generate_bytecode_insns): Update to cope with VEC in
! 	CONSTRUCTOR_ELTS.
! 	* parse.y (build_new_array_init): Use build_constructor_from_list
! 	instead of build_constructor.
! 	(patch_new_array_init): Update to cope with VEC in
! 	CONSTRUCTOR_ELTS.
! 	(array_constructor_check_entry): Likewise.
! 
! 2005-07-12  Tom Tromey  <tromey@redhat.com>
! 
! 	* jvspec.c (lang_specific_driver): Put filelist_filename first on
! 	command line.
! 
! 2005-07-12  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/19674:
! 	* parse-scan.y (interface_member_declaration): Added
! 	empty_statement.
! 
! 2005-07-08  Daniel Berlin  <dberlin@dberlin.org>
! 	
! 	* java-tree.h (LABEL_RETURN_LABELS): Use decl_non_common.
! 	(LABEL_PENDING_CHAIN): Ditto.
! 	(LABEL_PC): Ditto.
! 	(DECL_BIT_INDEX): Ditto.	
! 
! 2005-07-07  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR java/18119
! 	* parse.y (inner_class_accessible): New function. Logic moved from
! 	check_inner_class_access.
! 	(check_inner_class_access): Use inner_class_accessible.
! 	(resolve_inner_class): Simplify arguments. Create circularity hash
! 	here. Keep looking for classes if we found one that was inaccessible. 
! 	Return the inaccessible class only if there is no other match.
! 	(do_resolve_class): Update for new resolve_inner_class arguments.
! 	Don't create circularity_hash here.
! 
! 2005-07-07  Bryce McKinlay  <mckinlay@redhat.com>
! 
!         PR java/21045
! 	* parse.y (add_exception_to_throws): New function.
! 	(purge_unchecked_exceptions): Removed.
! 	(get_constructor_super): Renamed from verify_constructor_super. Now
! 	returns the super constructor after verification.
! 	(java_complete_expand_method): Don't use purge_unchecked_exceptions
! 	or save/restore the exception list.
! 	(check_thrown_exceptions): Add uncaught exceptions in anonymous
! 	class initializers and constructors to the throws clause of the method.	
! 
! 2005-07-05  Bryce McKinlay  <mckinlay@redhat.com>
! 
!         PR java/19674
!         * parse.y (interface_member_declaration): Allow empty statements in
!         interface declarations.
! 
! 2005-07-05  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.in (parse.o): Adjust dependencies.
! 	* parse.y: Include tree-dump.h.
! 
! 2005-07-02  Joseph S. Myers  <joseph@codesourcery.com>
! 
! 	* class.c, decl.c, expr.c: Use '+' flag instead of %J.  Use 'q'
! 	flag for quoting.
! 
! 2005-07-01  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* parse.y (issue_warning_error_from_context): Call
! 	pp_output_formatted_text to be able to get the buffer.
! 
! 2005-06-30  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* parse.y (issue_warning_error_from_context): Update for the
! 	renaming of pp_format_text to pp_format.
! 
! 2005-06-28  Paul Brook  <paul@codesourcery.com>
! 
! 	* decl.c (java_init_decl_processing): Call
! 	default_init_unwind_resume_libfunc.
! 
! 2005-06-27  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/21540, PR java/13788:
! 	* parse.y (java_complete_lhs) <CASE_EXPR>: Use
! 	fold_constant_for_init.
! 	(patch_binop): Added 'folding' argument.  Updated all callers.
! 	(patch_unaryop) <NOP_EXPR>: New case.
! 	(fold_constant_for_init) <NOP_EXPR>: Likewise.
! 	(fold_constant_for_init) <COND_EXPR>: Fix sense of test.
! 
! 2005-06-25  Jan Hubicka  <jh@suse.cz>
! 
! 	* builtins.c (define_builtin): Accept new flags parameter.
! 	(initialize_builtins): Mark the builtins const and nothrow accordingly.
! 
! 2005-06-25  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* all files: Update FSF address in copyright headers.
! 
! 2005-06-24  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify-impl.c (verify_instructions_0): Correctly handle
! 	situation where PC falls off end.
! 
! 2005-06-23  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR java/20697
! 	* parse.y (find_most_specific_methods_list): Remove special case for
! 	inner classes.
! 
! 2005-06-15  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/21906:
! 	* class.c (make_method_value): Use soft_abstractmethod_node for
! 	abstract method.
! 	* java-tree.h (soft_abstractmethod_node): New define.
! 	(JTI_SOFT_ABSTRACTMETHOD_NODE): New enum constant.
! 	* decl.c (java_init_decl_processing): Initialize
! 	soft_abstractmethod_node.
! 
! 2005-06-13  Geoffrey Keating  <geoffk@apple.com>
! 
! 	* Make-lang.in (rule for installing gcj.1): Depends on installdirs.
! 
! 2005-06-13  Per Bothner  <per@bothner.com>
! 
! 	* expr.c (int highest_label_pc_this_method,
! 	start_label_pc_this_method): New globals.
! 	(lookup_label): Add start_label_pc_this_method to pc for label, and
! 	update highest_label_pc_this_method.  This prevents conflicts between
! 	labels from different methods.
! 	* java-tree.h: Declare new globals.
! 	* jcf-parse.c (parse_class_file): If needed bump
! 	start_label_pc_this_method and reset highest_label_pc_this_method.
! 
! 2005-06-13  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/21844:
! 	* parse.y (nested_field_access_p): Handle case where outer field
! 	is inherited by enclosing class.
! 
! 2005-06-12  Per Bothner  <per@bothner.com>
! 
! 	* class.c (inherits_from_p): Do load_class if needed.
! 
! 2005-06-09  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
! 
! 	* gjavah.c (error): Add ATTRIBUTE_PRINTF_1.
! 	* java-tree.h (parse_error_context): Move...
! 	* parse.h (parse_error_context): ... here, add ATTRIBUTE_GCC_DIAG.
! 	* parse.y (parse_warning_context): Add ATTRIBUTE_GCC_DIAG.
! 	* verify-impl.c (debug_print): Add ATTRIBUTE_PRINTF_1.
! 
! 2005-06-08  Roger Sayle  <roger@eyesopen.com>
! 
! 	* typeck.c (convert): Only clear TREE_OVERFLOW on INTEGER_CST nodes.
  
  2005-06-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	* jv-scan.c (fatal_error, warning, warning0): Use gmsgid instead of
! 	msgid for argument name.
  	* gjavah.c (error): Likewise.
  	* java-tree.h (parse_error_context): Likewise.
  	* parse.y (parse_error_context, parse_warning_context,
  	issue_warning_error_from_context): Likewise.
  
! 2005-06-01  Tom Tromey  <tromey@redhat.com>
  
  	PR java/21722:
  	* class.c (build_static_field_ref): Don't fold constant fields if
  	current class is from a .class file and we're using indirect
  	dispatch.
  
+ 2005-05-31  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* java/verify-glue.c: Don't include errors.h and include toplev.h.
+ 	* java/Make-lang.in: Updates dependencies.
+ 
+ 2005-05-26  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	PR java/19870.
+ 	* java-tree.h (OUTER_FIELD_ACCESS_IDENTIFIER_P): Rename to
+ 	NESTED_FIELD_ACCESS_IDENTIFIER_P.
+ 	(FIELD_INNER_ACCESS): Rename to FIELD_NESTED_ACCESS.
+ 	(FIELD_INNER_ACCESS_P): Rename to FIELD_NESTED_ACCESS_P.
+ 	* jcf-write.c (generate_classfile): Use
+ 	NESTED_FIELD_ACCESS_IDENTIFIER_P instead of
+ 	OUTER_FIELD_ACCESS_IDENTIFIER_P.
+ 	* parse.y (build_outer_field_access): Rename to
+ 	build_nested_field_access. Support static fields and outer-to-inner
+ 	class accesses.
+ 	(outer_field_access_p): Rename to nested_field_access_p. Support
+ 	static fields and generalise to outer-to-inner class and sibling
+ 	inner class accesses.
+ 	(outer_field_expanded_access_p): Rename to
+ 	nested_field_expanded_access_p and support static fields.
+ 	(outer_field_access_fix): Rename to nested_field_access_fix and
+ 	support static fields.
+ 	(build_outer_field_access_expr): Rename to
+ 	build_nested_field_access_expr and support static fields.
+ 	(build_outer_field_access_methods): Rename to
+ 	build_nested_field_access_methods and support static fields. For
+ 	static fields, generate accessors without class instance parameters.
+ 	(build_outer_field_access_method): Rename to
+ 	build_nested_field_access_method and support static fields.
+ 	(build_outer_method_access_method): Use
+ 	NESTED_FIELD_ACCESS_IDENTIFIER_P instead of
+ 	OUTER_FIELD_ACCESS_IDENTIFIER_P.
+ 	(resolve_expression_name): Consider static field accesses across
+ 	nested classes.
+ 	(resolve_qualified_expression_name): Likewise.
+ 	(java_complete_lhs): Use nested_field_access_fix instead of
+ 	outer_field_access_fix.
+ 	(patch_unary_op): Rename outer_field_flag to nested_field_flag.
+ 	Use nested_field_expanded_access_p instead of
+ 	outer_field_expanded_access_p. Use nested_field_access_fix instead
+ 	of outer_field_access_fix.
+ 	(check_thrown_exceptions): Use NESTED_FIELD_ACCESS_IDENTIFIER_P
+ 	instead of OUTER_FIELD_ACCESS_IDENTIFIER_P.
+ 
  2005-05-26  Bryce McKinlay  <mckinlay@redhat.com>
  
  	* decl.c (GCJ_BINARYCOMPAT_ADDITION, 
  	GCJ_BOOTSTRAP_LOADER_ADDITION): Removed.
! 	(FLAG_BINARYCOMPAT_ABI, FLAG_BOOTSTRAP_LOADER,
! 	MINOR_BINARYCOMPAT_ABI_VERSION): New.
  	(GCJ_CURRENT_BC_ABI_VERSION): Use new method to calculate version ID.
! 	(parse_version): Calculate version ID using new method. Use bit-flags
! 	for flag_indirect_dispatch and flag_bootstrap_classes.
! 
! 2005-05-25  Richard Henderson  <rth@redhat.com>
! 
! 	PR libgcj/21692
! 	* Make-lang.in (java/mangle.o): Depend on LANGHOOKS_DEF_H.
! 	* class.c (build_class_ref): Set DECL_CLASS_FIELD_P and
! 	DECL_CONTEXT; avoid pushdecl_top_level.
! 	(build_dtable_decl): Set DECL_VTABLE_P and DECL_CONTEXT.
! 	(layout_class): Don't SET_DECL_ASSEMBLER_NAME.
! 	(layout_class_method): Likewise.
! 	* decl.c (java_mark_cni_decl_local): New.
! 	(java_mark_class_local): Use it.
! 	* java-tree.h (DECL_LOCAL_CNI_METHOD_P): New.
! 	(DECL_CLASS_FIELD_P, DECL_VTABLE_P): New.
! 	(struct lang_decl_func): Add local_cni;
! 	(struct lang_decl_var): Add class_field, vtable.
! 	(java_mangle_decl): Declare.
! 	* lang.c (LANG_HOOKS_SET_DECL_ASSEMBLER_NAME): New.
! 	* mangle.c: Remove dup obstack.h; include langhooks-def.h.
! 	(mangle_obstack_1): New.
! 	(java_mangle_decl): Remove obstack argument.  Call mangle_class_field,
! 	mangle_vtable, and mangle_local_cni_method_decl.  Fall back to
! 	lhd_set_decl_assembler_name for things that don't need mangling.
! 	(mangle_class_field): Rename from java_mangle_class_field, make
! 	static, don't call init_mangling or finish_mangling.
! 	(mangle_vtable): Similarly.
! 	(mangle_local_cni_method_decl): New.
! 	(init_mangling): Remove obstack argument.  Use &mangle_obstack_1,
! 	gcc_assert, and MANGLE_RAW_STRING.
! 	(finish_mangling): Use gcc_assert, remove if 0 debugging code.
! 
! 2005-05-25  DJ Delorie  <dj@redhat.com>
! 
! 	* class.c (set_constant_value): Move warning control from if() to
! 	warning(OPT_*).
! 
! 2005-05-24  Richard Henderson  <rth@redhat.com>
! 
! 	* builtins.c (define_builtin): Don't call make_decl_rtl.
! 	* constants.c (build_constant_data_ref): Likewise.
! 	* class.c (build_utf8_ref): Likewise.
! 	(build_fieldref_cache_entry, build_static_field_ref): Likewise.
! 	(get_dispatch_table, layout_class_method): Likewise.
! 	(build_class_ref): Likewise. Don't set DECL_SIZE or DECL_SIZE_UNIT
! 	by hand.
! 	(make_local_function_alias): Don't SET_DECL_ASSEMBLER_NAME.
! 	(make_method_value): Use METHOD_ABSTRACT instead of DECL_RTL_SET_P
! 	to determine if we need a non-zero address.
! 	* decl.c (builtin_function): Don't call make_decl_rtl.
! 	(give_name_to_locals): Don't SET_DECL_ASSEMBLER_NAME.
! 	* expr.c (build_known_method_ref): Don't call make_decl_rtl.
! 	* resource.c (compile_resource_data): Likewise.
! 	* parse.y (resolve_field_access): Re-word comment to avoid
! 	building DECL_RTL.
! 
! 2005-05-24  Richard Henderson  <rth@redhat.com>
! 
! 	* class.c (registered_class): Take it out of class_roots; turn into
! 	a vec of trees.
! 	(register_class): Make static.  Don't duplicate decl node.  Use
! 	VEC_safe_push.
! 	(emit_register_classes): Use VEC_iterate.  Use output_constant
! 	instead of assemble_integer.  Don't call mark_decl_referenced
! 	directly.
! 	* java-tree.h (register_class): Remove decl.
! 
! 2005-05-19  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	PR java/17845
! 
! 	* parse.y (register_package, package_list): Remove.
! 	(package_declaration): Do not call register_package.
! 	(do_resolve_class): Do not use package_list.
! 
! 2005-05-15  Gerald Pfeifer  <gerald@pfeifer.com>
! 
! 	* jcf-write.c (generate_bytecode_insns) <SAVE_EXPR>: Remove
! 	unused variable.
  
  2005-05-15  Tom Tromey  <tromey@redhat.com>
  
***************
*** 83,112 ****
  	* jcf-write.c (generate_bytecode_insns) <SAVE_EXPR>: Don't call
  	NOTE_PUSH.
  
! 2005-05-13  Aaron Luchko <aluchko@redhat.com>
  
  	* gcj.texi: Add '-verify', '-noverify', and '-verifyremote'.
  
! 2005-04-28  Andrew Haley  <aph@redhat.com>
  
! 	PR java/19285
! 	* java-tree.h (soft_resolvepoolentry_node): New.
! 	(alloc_constant_fieldref): Declare.
! 	* expr.c (expand_java_field_op): Don't call class_init for
! 	accesses to static fields with indirect dispatch.
! 	* builtins.c (initialize_builtins): Add "__builtin_expect".
! 	* decl.c (soft_resolvepoolentry_node): New variable.
! 	(java_init_decl_processing): Create a decl for
! 	"_Jv_ResolvePoolEntry".
! 	* class.c (build_fieldref_cache_entry): New function.
! 	* class.c (build_static_field_ref): New function.
! 	(build_static_field_ref): Rewrite for indirect dispatch.
! 	* constants.c (find_name_and_type_constant_tree): New function.
! 	(alloc_constant_fieldref): Likewise.
! 	(build_constants_constructor): Handle CONSTANT_Fieldref and
! 	CONSTANT_NameAndType.
  
! 2005-05-06  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
  	PR java/20309
  	* Make-lang.in (java): Add gjnih.
--- 611,646 ----
  	* jcf-write.c (generate_bytecode_insns) <SAVE_EXPR>: Don't call
  	NOTE_PUSH.
  
! 2005-05-12  Aaron Luchko <aluchko@redhat.com>
  
  	* gcj.texi: Add '-verify', '-noverify', and '-verifyremote'.
  
! 2005-05-11  Tom Tromey  <tromey@redhat.com>
  
! 	* gcj.texi (Code Generation): Document -fbootstrap-classes.
! 	* decl.c (GCJ_BOOTSTRAP_LOADER_ADDITION): New macro.
! 	(parse_version): Use it.
! 	* lang.opt (-fbootstrap-classes): New option.
  
! 2005-05-10  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	PR java/21436
! 	* class.c (maybe_layout_super_class): Look for imports in this_class.
! 	* parse.h (ctxp_for_generation_last): New.
! 	(do_resolve_class): Add a parameter.
! 	* parse.y (ctxp_for_generation_last): New.
! 	(java_pop_parser_context): Add at end of list.
! 	(find_in_imports, find_in_imports_on_demand): Look in ctxp
! 	if the TYPE_IMPORT_LIST or respectively the TYPE_IMPORT_DEMAND_LIST of
! 	the given type are NULL.
! 	(do_resolve_class): Look into the imports of the new second parameter.
! 	Adjust recursive calls.
! 	(resolve_class, resolve_inner_class, find_as_inner_class): Adjust
! 	calls to do_resolve_class.
! 	(create_class): Set the TYPE_IMPORT_LIST and TYPE_IMPORT_DEMAND_LIST.
! 	(java_complete_class): Do not do that here.
! 
! 2005-05-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
  	PR java/20309
  	* Make-lang.in (java): Add gjnih.
***************
*** 137,169 ****
  	(options): Add force, old, trace and J fields.
  	(main): Handle -force, -old, -trace and -J options.
  
  2005-04-28  Andrew Haley  <aph@redhat.com>
  
  	PR java/21115
  	* expr.c (force_evaluation_order): Convert outgoing args smaller
  	than integer.
  
! 	PR java/20768
!         * java-except.h (struct eh_range.handler): Remove unused field.
!         (handle_nested_ranges): Remove function declaration.
!         (sanity_check_exception_range): Add function declaration.
!         * verify.c (verify_jvm_instructions): Remove call to
!         handle_nested_ranges.
! 	(start_pc_cmp): Remove function.
! 	(verify_jvm_instructions): Remove PC sorting of exception regions.
!         * verify-glue.c (verify_jvm_instructions_new): Call
!         sanity_check_exception_range.
!         * except.c (link_handler, eh_range_freelist, link_handler,
!         handle_nested_ranges): Remove.
!         (add_handler): Rewrite.
!         (sanity_check_exception_range): New function.
!         (print_ranges): New function.
  
  2005-04-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
  	* gjavah.c, jcf-dump.c, jv-scan.c, jvgenmain.c: Replace calls
  	to `unlock_stream' with `unlock_std_streams'.
  
  2005-04-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
  	* gjavah.c (main): Unlock the stdio streams.
--- 671,732 ----
  	(options): Add force, old, trace and J fields.
  	(main): Handle -force, -old, -trace and -J options.
  
+ 2005-05-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR java/21245:
+ 	* gjavah.c (main): Unlink output file on error.
+ 
+ 2005-05-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* constants.c, jvgenmain.c, lang.opt, resource.c: Update
+ 	copyright.
+ 
+ 2005-04-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* expr.c (build_jni_stub): Updated for change to build_block.
+ 
+ 2005-04-29  Andrew Pinski  <pinskia@gcc.gnu.org>
+ 
+ 	* expr.c (force_evaluation_order): Declare 'saved' earlier.
+ 
  2005-04-28  Andrew Haley  <aph@redhat.com>
  
+ 	PR java/19285
+ 	* java-tree.h (soft_resolvepoolentry_node): New.
+ 	(alloc_constant_fieldref): Declare.
+ 	* expr.c (expand_java_field_op): Don't call class_init for
+ 	accesses to static fields with indirect dispatch.
+ 	* builtins.c (initialize_builtins): Add "__builtin_expect".
+ 	* decl.c (soft_resolvepoolentry_node): New variable.
+ 	(java_init_decl_processing): Create a decl for
+ 	"_Jv_ResolvePoolEntry".
+ 	* class.c (build_fieldref_cache_entry): New function.
+ 	(build_static_field_ref): Rewrite for indirect dispatch.
+ 	* constants.c (find_name_and_type_constant_tree): New function.
+ 	(alloc_constant_fieldref): Likewise.
+ 	(build_constants_constructor): Handle CONSTANT_Fieldref and
+ 	CONSTANT_NameAndType.
+ 
  	PR java/21115
  	* expr.c (force_evaluation_order): Convert outgoing args smaller
  	than integer.
  
! 2005-04-27  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* gcj.texi (libgcj Runtime Properties): Remove obsolete
! 	gnu.gcj.runtime.NameFinder.* system properties. Update documentation 
! 	for gnu.gcj.runtime.NameFinder.use_addr2line and gnu.gcj.progname.
  
  2005-04-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
  	* gjavah.c, jcf-dump.c, jv-scan.c, jvgenmain.c: Replace calls
  	to `unlock_stream' with `unlock_std_streams'.
  
+ 2005-04-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* Make-lang.in (java/decl.o, java/resource.o): Depend on $(EXPR_H)
+ 	instead of just expr.h.
+ 
  2005-04-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
  	* gjavah.c (main): Unlock the stdio streams.
***************
*** 171,193 ****
  	* jv-scan.c (main): Likewise.
  	* jvgenmain.c (main): Likewise.
  
! 2005-04-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	* Make-lang.in (java/decl.o, java/resource.o): Depend on $(EXPR_H)
! 	instead of just expr.h.
  
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
  2005-04-07  Andrew Haley  <aph@redhat.com>
  
  	* gcj.texi: Correct gcj-dbtool instructions.
  
! 2005-04-06  Tom Tromey  <tromey@redhat.com>
  
! 	* gcj.texi (libgcj Runtime Properties): Document
! 	gnu.gcj.runtime.endorsed.dirs.
  
  2005-04-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
--- 734,802 ----
  	* jv-scan.c (main): Likewise.
  	* jvgenmain.c (main): Likewise.
  
! 2005-04-23  DJ Delorie  <dj@redhat.com>
  
! 	* class.c, decl.c, expr.c, jcf-io.c, jcf-parse.c, jv-scan.c,
! 	parse.y: Adjust warning() callers.
  
! 2005-04-21  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* gcj.texi (Object fields): Change "Integer" to "Int" in example
! 	contructor.
! 
! 2005-04-20  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* gcj.texi: Fix typos and bogus example.
! 
! 2005-04-19  Kazu Hirata  <kazu@cs.umass.edu>
! 
! 	* except.c: Fix a comment typo.
! 
! 2005-04-19  Julian Brown  <julian@codesourcery.com>
! 
! 	* decl.c (finish_method): Revert patch from 2005-04-13 for breaking
! 	indirect dispatch with PIC.
! 
! 2005-04-18  Andrew Haley  <aph@redhat.com>
! 
! 	* java-except.h (struct eh_range.handler): Remove unused field.
! 	(handle_nested_ranges): Remove function declaration.
! 	(sanity_check_exception_range): Add function declaration.	
! 	* verify.c (verify_jvm_instructions): Remove call to
! 	handle_nested_ranges.
! 	* verify-glue.c (verify_jvm_instructions_new): Call
! 	sanity_check_exception_range.
! 	* except.c (link_handler, eh_range_freelist, link_handler,
! 	handle_nested_ranges): Remove.
! 	(add_handler): Rewrite.
! 	(sanity_check_exception_range): New function.
! 	(print_ranges): New function.
! 
! 2005-04-13  Julian Brown  <julian@codesourcery.com>
! 
! 	* decl.c (finish_method): Give methods once-only linkage.
! 
! 2005-04-11  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* lang.opt: Refer to the GCC internals documentation instead of c.opt.
! 
! 2005-04-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
! 
! 	* java-tree.h: Don't use PARAMS().
! 
! 2005-04-07  Per Bothner  <per@bothner.com>
! 
! 	* class.c (push_class): By default, suppress debug output.
! 	(finish_class): Enable debug output for classes we're emitting.
  
  2005-04-07  Andrew Haley  <aph@redhat.com>
  
  	* gcj.texi: Correct gcj-dbtool instructions.
  
! 2005-04-04  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* gcj.texi: Fix a typo.
! 	* lang.c: Fix a comment typo.
  
  2005-04-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
***************
*** 204,214 ****
--- 813,854 ----
  	_Jv_AllocObjectNoFinalizer, _Jv_Throw, _Jv_NewPrimArray,
  	_Jv_JNI_PopSystemFrame, _Jv_divI, _Jv_remI, _Jv_divJ, _Jv_remJ.
  
+ 2005-03-31  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* Make-lang.in (class.o, decl.o): Depend on cgraph.h.
+ 	* class.c: Include cgraph.h
+ 	(make_local_functoin_alias): Mark aslias as needed.
+ 	* resource.c: Include cgraph.h
+ 	(compile_resource_data): Go via cgraph interface.
+ 
+ 2005-03-30  Ian Lance Taylor  <ian@airs.com>
+ 
+ 	* parse.y (maybe_yank_clinit): Don't crash if bbody is NULL.
+ 
+ 2005-03-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jcf-dump.c (HANDLE_INNERCLASSES_ATTRIBUTE): Handle cases where
+ 	inner_class_info_index==0 or outer_class_info_index==0.
+ 
+ 2005-03-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gcj.texi (libgcj Runtime Properties): Document
+ 	gnu.gcj.runtime.endorsed.dirs.
+ 
  2005-03-24  Anthony Green  <green@redhat.com>
  
  	* gcj.texi (Invoking gcj-dbtool): Document new LIBDIR option to
  	'gcj-dbtool -p'.
  
+ 2005-03-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* decl.c (GCJ_CURRENT_BC_ABI_VERSION): New define.
+ 	(parse_version): Use it.
+ 
+ 2005-03-23  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Remove.
+ 
  2005-03-18  Andrew Haley  <aph@redhat.com>
  
  	PR java/20522
***************
*** 216,238 ****
  	to die.
  	(maybe_poplevels): Add comment.
  
  2005-03-16  Andrew Haley  <aph@redhat.com>
  
!         * expr.c (expand_java_arrayload): Don't generate a
!         NullPointerException based on the type of the node.
!         (build_java_array_length_access): Likewise.
  
! 2005-03-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
! 	* jcf-io.c (caching_stat): Use __extension__ to avoid pedantic
! 	warning.
! 	* Make-lang.in: Don't elide warnings in jcf-io.c.
  
! 2005-03-10  Tom Tromey  <tromey@redhat.com>
  
  	* gcj.texi (Invoking gcj-dbtool): Document 'gcj-dbtool -p'.
  	(libgcj Runtime Properties): Document the default .db.
  
  2005-03-07  Bryce McKinlay  <mckinlay@redhat.com>
  
  	* verify-glue.c (vfy_is_assignable_from): Perform static check using
--- 856,910 ----
  	to die.
  	(maybe_poplevels): Add comment.
  
+ 2005-03-17  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR java/20502
+ 	* jcf-parse.c (duplicate_class_warning): New function.
+ 	(java_parse_file): Call duplicate_class_warning if 
+ 	CLASS_FROM_CURRENTLY_COMPILED_P is already set.
+ 	(parse_zip_file_entries): Likewise. Also set
+ 	CLASS_FROM_CURRENTLY_COMPILED_P.
+ 
  2005-03-16  Andrew Haley  <aph@redhat.com>
  
! 	* expr.c (expand_java_arrayload): Don't generate a
! 	NullPointerException based on the type of the node.
! 	(build_java_array_length_access): Likewise.
  
! 2005-03-15  Zack Weinberg  <zack@codesourcery.com>
  
! 	* Make-lang.in (TEXI_JAVA_FILES): Add gcc-vers.texi.
  
! 2005-03-11  Tom Tromey  <tromey@redhat.com>
  
  	* gcj.texi (Invoking gcj-dbtool): Document 'gcj-dbtool -p'.
  	(libgcj Runtime Properties): Document the default .db.
  
+ 2005-03-10  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	PR java/20312
+ 	* parse.y (checks_throws_clauses): Check exceptions list even when
+ 	the base class does not come from a source file being compiled.
+ 	(java_complete_lhs): Remove unused variable 'wfl'.
+ 
+ 2005-03-09  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	PR java/20338
+ 	* decl.c (finish_method): Emit _Jv_InitClass for private static
+ 	methods inside inner classes as well.
+ 
+ 2005-03-08  Julian Brown  <julian@codesourcery.com>
+ 	* Revert patch from 2005-03-08 for causing bootstrap failure on
+ 	ppc-darwin.
+ 
+ 2005-03-08  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* decl.c (finish_method): Give methods once-only linkage.
+ 
+ 2005-03-07  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* lang.c (flag_new_verifier): Enable by default, regardless of ABI.
+ 
  2005-03-07  Bryce McKinlay  <mckinlay@redhat.com>
  
  	* verify-glue.c (vfy_is_assignable_from): Perform static check using
***************
*** 257,262 ****
--- 929,966 ----
  
  	* gcj.texi (Invoking gcj-dbtool): Document '-f'.
  
+ 2005-03-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* jcf-dump.c, jcf-io.c, jcf-reader.c, lang.c, parse.h,
+ 	typeck.c: Update copyright.
+ 
+ 2005-03-06  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Remove xref code.
+ 	* xref.c, xref.h: Remove file.
+ 	* Make-lang.in (java/xref.o): Remove.
+ 	* java-tree.h (flag_emit_xref, do_not_fold): Remove declaration.
+ 	* lang.c (flag_emit_xref): Remove definition.
+ 	* parse.h (DECL_END_SOURCE_LINE, DECL_INHERITED_SOURCE_LINE): Remove.
+ 	* typeck.c (convert): Remove use of do_not_fold.
+ 	* parse.y (do_not_fold): Remove definition.
+ 	(parser grammar): Remove xref code.
+ 	(maybe_create_class_interface_decl, create_class): Likewise.
+ 	(register_fields, method_header, finish_method_declaration): Likewise.
+ 	(declare_local_variables, source_end_java_method): Likewise.
+ 	(java_complete_expand_classes): Do not set do_not_fold.
+ 	(java_complete_expand_method): Remove xref code.
+ 	(java_expand_classes, resolve_field_access, patch_invoke): Likewise.
+ 	(java_complete_tree, java_complete_lhs, patch_assignment): Likewise.
+ 	(patch_binop, build_string_concatenation, patch_array_ref): Likewise.
+ 	(patch_synchronized_statement, patch_throw_statement): Likewise.
+ 	(maybe_build_class_init_for_field): Likewise.
+ 
+ 2005-03-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (build_expr_wfl, expr_add_location): Use TYPE_P
+ 	instead of IS_NON_TYPE_CODE_CLASS.
+ 
  2005-03-04  Andrew Haley  <aph@redhat.com>
  
  	PR java/18362
***************
*** 265,270 ****
--- 969,998 ----
  	(layout_class_method): Don't complain about "non-static method foo
  	overrides static method" in the case of indirect dispatch.
  
+ 2005-03-02  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* jcf-io.c (caching_stat): Use __extension__ to avoid pedantic
+ 	warning.
+ 	* Make-lang.in: Don't elide warnings in jcf-io.c.
+ 
+ 2005-03-01  Per Bothner  <per@bothner.com>
+ 
+ 	PR java/8608
+ 	* check-init.c (wfl): Remove static.
+ 	(final_assign_error, check_init): Replace calls to parse_error_context
+ 	by plain error.
+ 	(check_init): Save, set, and restore input_location for each exp.
+ 
+ 2005-03-01  Per Bothner  <per@bothner.com>
+ 
+ 	* jcf-reader.c (get_attribute): Handle SourceDebugExtension (JSR 45)
+ 	if HANDLE_SOURCEDEBUGEXTENSION_ATTRIBUTE is defined.
+ 	* jcf-dump.c (HANDLE_SOURCEDEBUGEXTENSION_ATTRIBUTE): Print contents.
+ 
+ 2005-03-01  Per Bothner  <per@bothner.com>
+ 
+ 	* java-tree.h (IDENTIFIER_HANDLECLASS_VALUE): Remove ancient macro.
+ 
  2005-02-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
  	PR libgcj/16923
***************
*** 302,312 ****
  	PR java/19907
  	* expr.c (expand_byte_code): Call promote_arguments().
  	(promote_arguments): New function.
! 	* decl.c (check_local_unnamed_variable): Remve special case for
  	new verifier.
  	(find_local_variable): Promote all boolean types to int
  	when searching for local variable decls.
! 	
  2005-02-12  Kazu Hirata  <kazu@cs.umass.edu>
  
  	* builtins.c, java-except.h, jcf-parse.c, jv-scan.c, lex.c,
--- 1030,1040 ----
  	PR java/19907
  	* expr.c (expand_byte_code): Call promote_arguments().
  	(promote_arguments): New function.
! 	* decl.c (check_local_unnamed_variable): Remove special case for
  	new verifier.
  	(find_local_variable): Promote all boolean types to int
  	when searching for local variable decls.
! 
  2005-02-12  Kazu Hirata  <kazu@cs.umass.edu>
  
  	* builtins.c, java-except.h, jcf-parse.c, jv-scan.c, lex.c,
***************
*** 471,477 ****
  	* convert.h (convert_to_boolean, convert_to_char) : Remove.
  	* expr.c (expand_load_internal): Do type conversion if type is not
  	as required.
! 	
  2004-12-13  Danny Smith  <dannysmith@users.sourceforge.net>
  
  	PR target/18459
--- 1199,1205 ----
  	* convert.h (convert_to_boolean, convert_to_char) : Remove.
  	* expr.c (expand_load_internal): Do type conversion if type is not
  	as required.
! 
  2004-12-13  Danny Smith  <dannysmith@users.sourceforge.net>
  
  	PR target/18459
***************
*** 483,489 ****
  	PR java/18811:
  	* jcf-parse.c (load_class): Remove sanity test for missing inner
  	class file.
! 	
  2004-12-06  Tom Tromey  <tromey@redhat.com>
  
  	* Make-lang.in (JAVA_MANFILES): Added gcj-dbtool.
--- 1211,1217 ----
  	PR java/18811:
  	* jcf-parse.c (load_class): Remove sanity test for missing inner
  	class file.
! 
  2004-12-06  Tom Tromey  <tromey@redhat.com>
  
  	* Make-lang.in (JAVA_MANFILES): Added gcj-dbtool.
***************
*** 525,532 ****
  	range we're demoting.
  
  2004-12-03  Andrew Haley  <aph@redhat.com>
! 	
! 	PR java/18697 
  	* class.c (layout_class_method): Don't fail to override a method
  	simply because it has DECL_ARTIFICIAL set.
  
--- 1253,1260 ----
  	range we're demoting.
  
  2004-12-03  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/18697
  	* class.c (layout_class_method): Don't fail to override a method
  	simply because it has DECL_ARTIFICIAL set.
  
***************
*** 628,634 ****
  	(build_signature_for_libgcj): Move here from expr.c.
  	(add_assertion_table_entry): New function. Callback for assertion
  	hashtable traversal.
! 	(emit_assertion_table): New. Take class argument, and generate 
  	assertion table DECL based on the TYPE_ASSERTIONS hashtable.
  	* decl.c (init_decl_processing): Define assertion_entry_type record.
  	Push 'assertion_table' class field instead of 'verify'.
--- 1356,1362 ----
  	(build_signature_for_libgcj): Move here from expr.c.
  	(add_assertion_table_entry): New function. Callback for assertion
  	hashtable traversal.
! 	(emit_assertion_table): New. Take class argument, and generate
  	assertion table DECL based on the TYPE_ASSERTIONS hashtable.
  	* decl.c (init_decl_processing): Define assertion_entry_type record.
  	Push 'assertion_table' class field instead of 'verify'.
***************
*** 637,643 ****
  	(add_type_assertion): Rewritten. Take class and assertion_code
  	arguments. Add assertions to the TYPE_ASSERTIONS hashtable.
  	(can_widen_reference_to): Use new add_type_assertion() arguments.
! 	* java-tree.h (java_tree_index): Add JTI_ASSERTION_ENTRY_TYPE, 
  	JTI_ASSERTION_TABLE_TYPE. Remove JTI_VERIFY_IDENTIFIER_NODE.
  	(verify_identifier_node): Removed.
  	(assertion_entry_type, assertion_table_type): New.
--- 1365,1371 ----
  	(add_type_assertion): Rewritten. Take class and assertion_code
  	arguments. Add assertions to the TYPE_ASSERTIONS hashtable.
  	(can_widen_reference_to): Use new add_type_assertion() arguments.
! 	* java-tree.h (java_tree_index): Add JTI_ASSERTION_ENTRY_TYPE,
  	JTI_ASSERTION_TABLE_TYPE. Remove JTI_VERIFY_IDENTIFIER_NODE.
  	(verify_identifier_node): Removed.
  	(assertion_entry_type, assertion_table_type): New.
***************
*** 653,659 ****
  	(vfy_note_local_type): Likewise.
  	* verify.h (vfy_is_assignable_from): Declare.
  	* verify-impl.c (is_assignable_from_slow): Remove unused function.
! 	(ref_compatible): Rename arguments. Call vfy_is_assignable_from() 
  	instead of is_assignable_from_slow().
  	(types_compatible): Reinstate ref_compatible() call.
  
--- 1381,1387 ----
  	(vfy_note_local_type): Likewise.
  	* verify.h (vfy_is_assignable_from): Declare.
  	* verify-impl.c (is_assignable_from_slow): Remove unused function.
! 	(ref_compatible): Rename arguments. Call vfy_is_assignable_from()
  	instead of is_assignable_from_slow().
  	(types_compatible): Reinstate ref_compatible() call.
  
***************
*** 754,763 ****
  
  2004-10-20  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* verify-impl.c (type_array_elementpop_raw, vfy_pop_type_t, 
  	vfy_push_type_t, set_variable, add_new_state, merge_into,
  	handle_jsr_insn, branch_prepass, check_class_constant,
! 	check_wide_constant, get_one_type, compute_static_types, 
  	verify_instructions_0): Clean up C99 declarations after statements.
  
  2004-10-20  Tom Tromey  <tromey@redhat.com>
--- 1482,1491 ----
  
  2004-10-20  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* verify-impl.c (type_array_elementpop_raw, vfy_pop_type_t,
  	vfy_push_type_t, set_variable, add_new_state, merge_into,
  	handle_jsr_insn, branch_prepass, check_class_constant,
! 	check_wide_constant, get_one_type, compute_static_types,
  	verify_instructions_0): Clean up C99 declarations after statements.
  
  2004-10-20  Tom Tromey  <tromey@redhat.com>
***************
*** 802,808 ****
  	if flag_new_verifier is set.
  	* java-tree.h (flag_new_verifier): Declare.
  	* lang.opt (fnew-verifier): New option.
! 	* verify-impl.c: Work around namespace pollution by undef'ing 
  	'current_class'.
  	(struct verifier_context): Make 'bytecode' const.
  	(verify_fail_pc): Pass -1 PC argument to vfy_fail.
--- 1530,1536 ----
  	if flag_new_verifier is set.
  	* java-tree.h (flag_new_verifier): Declare.
  	* lang.opt (fnew-verifier): New option.
! 	* verify-impl.c: Work around namespace pollution by undef'ing
  	'current_class'.
  	(struct verifier_context): Make 'bytecode' const.
  	(verify_fail_pc): Pass -1 PC argument to vfy_fail.
***************
*** 850,856 ****
  
  2004-10-13  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* verify-impl.c: Formatting fixes. Reformat C++-style comments to 
  	C-style.
  
  2004-10-06  Bryce McKinlay  <mckinlay@redhat.com>
--- 1578,1584 ----
  
  2004-10-13  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* verify-impl.c: Formatting fixes. Reformat C++-style comments to
  	C-style.
  
  2004-10-06  Bryce McKinlay  <mckinlay@redhat.com>
***************
*** 910,916 ****
  	interfaces.
  	* expr.c (add_type_assertion): Don't generate assertions when
  	source type is array of Object.
! 		
  2004-09-03  Andrew Haley  <aph@redhat.com>
  
  	* class.c (finish_class): Nullify TYPE_VERIFY_METHOD.
--- 1638,1644 ----
  	interfaces.
  	* expr.c (add_type_assertion): Don't generate assertions when
  	source type is array of Object.
! 
  2004-09-03  Andrew Haley  <aph@redhat.com>
  
  	* class.c (finish_class): Nullify TYPE_VERIFY_METHOD.
***************
*** 1075,1081 ****
  	soft_lookupinterfacemethodbyname_node.
  
  	* gjavah.c (print_method_info): Final methods have vtable entries,
! 	so gjavah needs to output them. 
  	* class.c (layout_class_method): Generate vtable entries for final
  	methods.
  	* parse.y (invocation_mode): Use INVOKE_VIRTUAL for indirect
--- 1803,1809 ----
  	soft_lookupinterfacemethodbyname_node.
  
  	* gjavah.c (print_method_info): Final methods have vtable entries,
! 	so gjavah needs to output them.
  	* class.c (layout_class_method): Generate vtable entries for final
  	methods.
  	* parse.y (invocation_mode): Use INVOKE_VIRTUAL for indirect
***************
*** 1086,1102 ****
  	* class.c (build_symbol_entry): Convert the names of constructors
  	to init_identifier_node when generating an entry for the indirect
  	dispatch table.
! 	
  	* expr.c (build_known_method_ref): Generate indirect calls for
  	all methods marked DECL_EXTERNAL or TREE_PUBLIC.
  
  2004-05-24  Andrew Haley  <aph@redhat.com>
  
!         * expr.c (build_known_method_ref): Make sure ARRAY_REF access to
!         atable element is of the right type.
  
!         * class.c (build_static_field_ref): Cast pointer to correct type
!         for field.
  
  2004-04-20  Bryce McKinlay  <mckinlay@redhat.com>
  
--- 1814,1830 ----
  	* class.c (build_symbol_entry): Convert the names of constructors
  	to init_identifier_node when generating an entry for the indirect
  	dispatch table.
! 
  	* expr.c (build_known_method_ref): Generate indirect calls for
  	all methods marked DECL_EXTERNAL or TREE_PUBLIC.
  
  2004-05-24  Andrew Haley  <aph@redhat.com>
  
! 	* expr.c (build_known_method_ref): Make sure ARRAY_REF access to
! 	atable element is of the right type.
  
! 	* class.c (build_static_field_ref): Cast pointer to correct type
! 	for field.
  
  2004-04-20  Bryce McKinlay  <mckinlay@redhat.com>
  
***************
*** 1146,1152 ****
  	(build_known_method_ref): Always use indirect dispatch via the
  	atable for static methods.
  
! 	(expand_java_NEW): Break out object creation into new function,	
  	java_create_object.
  
  	(can_widen_reference_to): Issue a warning to say that we need to
--- 1874,1880 ----
  	(build_known_method_ref): Always use indirect dispatch via the
  	atable for static methods.
  
! 	(expand_java_NEW): Break out object creation into new function,
  	java_create_object.
  
  	(can_widen_reference_to): Issue a warning to say that we need to
***************
*** 1216,1222 ****
  
  	* gjavah.c (output_directory): Make static.
  	(temp_directory): Likewise.
! 	
  2004-11-15  Tom Tromey  <tromey@redhat.com>
  
  	* decl.c (instn_ptr_type_node): Removed.
--- 1944,1950 ----
  
  	* gjavah.c (output_directory): Make static.
  	(temp_directory): Likewise.
! 
  2004-11-15  Tom Tromey  <tromey@redhat.com>
  
  	* decl.c (instn_ptr_type_node): Removed.
***************
*** 1248,1254 ****
  	* decl.c (end_java_method): Remove duplicated code.
  
  2004-11-06  Zack Weinberg  <zack@codesourcery.com>
!             Gerald Pfeifer  <gerald@pfeifer.com>
  
  	* lex.h (HAVE_ICONV): Undefine if we do not have HAVE_ICONV_H
  	as well.
--- 1976,1982 ----
  	* decl.c (end_java_method): Remove duplicated code.
  
  2004-11-06  Zack Weinberg  <zack@codesourcery.com>
! 	    Gerald Pfeifer  <gerald@pfeifer.com>
  
  	* lex.h (HAVE_ICONV): Undefine if we do not have HAVE_ICONV_H
  	as well.
***************
*** 1256,1262 ****
  2004-11-02  Bryce McKinlay  <mckinlay@redhat.com>
  
  	PR java/17265
! 	* class.c: Reinstate 2004-08-18 patch. 
  	(make_local_function_alias): Don't create an alias for extern (native)
  	functions.
  
--- 1984,1990 ----
  2004-11-02  Bryce McKinlay  <mckinlay@redhat.com>
  
  	PR java/17265
! 	* class.c: Reinstate 2004-08-18 patch.
  	(make_local_function_alias): Don't create an alias for extern (native)
  	functions.
  
***************
*** 1335,1341 ****
  
  	* lang.c (java_tree_inlining_walk_subtrees): Last arg is struct
  	pointer_set_t* now.
! 	
  2004-10-13  Tom Tromey  <tromey@redhat.com>
  
  	PR java/15578:
--- 2063,2069 ----
  
  	* lang.c (java_tree_inlining_walk_subtrees): Last arg is struct
  	pointer_set_t* now.
! 
  2004-10-13  Tom Tromey  <tromey@redhat.com>
  
  	PR java/15578:
***************
*** 10252,10258 ****
  	properly initialize `finished_label'. Don't emit gotos for empty
  	try statements.
  
! 2000-03-19  Martin v. Löwis  <loewis@informatik.hu-berlin.de>
  
  	* except.c (emit_handlers): Clear catch_clauses_last.
  
--- 10980,10986 ----
  	properly initialize `finished_label'. Don't emit gotos for empty
  	try statements.
  
! 2000-03-19  Martin v. Loewis  <loewis@informatik.hu-berlin.de>
  
  	* except.c (emit_handlers): Clear catch_clauses_last.
  
***************
*** 15361,15367 ****
  	(CLASS_P): Moved around.
  	(java_parse_abort_on_error): Macro moved from jcf-parse.c
  	* jcf-parse.c (java_parse_abort_on_error): Macro moved to
! 	java-parse.h
  	(jcf_parse_source): Changed leading comment. Removed unnecessary
  	fclose and CLASS_FROM_SOURCE_P marking.
  	(parse_source_file): New local variables remember_for_generation
--- 16089,16095 ----
  	(CLASS_P): Moved around.
  	(java_parse_abort_on_error): Macro moved from jcf-parse.c
  	* jcf-parse.c (java_parse_abort_on_error): Macro moved to
! 	java-tree.h
  	(jcf_parse_source): Changed leading comment. Removed unnecessary
  	fclose and CLASS_FROM_SOURCE_P marking.
  	(parse_source_file): New local variables remember_for_generation
diff -Nrcpad gcc-4.0.2/gcc/java/Make-lang.in gcc-4.1.0/gcc/java/Make-lang.in
*** gcc-4.0.2/gcc/java/Make-lang.in	Fri May  6 22:53:36 2005
--- gcc-4.1.0/gcc/java/Make-lang.in	Mon Aug 15 21:26:35 2005
***************
*** 16,23 ****
  
  #You should have received a copy of the GNU General Public License
  #along with GCC; see the file COPYING.  If not, write to
! #the Free Software Foundation, 59 Temple Place - Suite 330,
! #Boston, MA 02111-1307, USA.
  
  #Java and all Java-based marks are trademarks or registered trademarks
  #of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  #You should have received a copy of the GNU General Public License
  #along with GCC; see the file COPYING.  If not, write to
! #the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! #Boston, MA 02110-1301, USA.
  
  #Java and all Java-based marks are trademarks or registered trademarks
  #of Sun Microsystems, Inc. in the United States and other countries.
*************** gt-java-builtins.h gtype-java.h gt-java-
*** 102,113 ****
  
  # Executables built by this Makefile:
  JAVA_OBJS = java/parse.o java/class.o java/decl.o java/expr.o \
!   java/constants.o java/lang.o java/typeck.o java/except.o java/verify.o \
    java/verify-glue.o java/verify-impl.o \
    java/zextract.o java/jcf-io.o java/win32-host.o java/jcf-parse.o java/mangle.o \
    java/mangle_name.o java/builtins.o java/resource.o \
    java/jcf-write.o java/buffer.o java/check-init.o java/jcf-depend.o \
!   java/jcf-path.o java/xref.o java/boehm.o java/java-gimplify.o
  
  GCJH_OBJS = java/gjavah.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \
    java/win32-host.o java/zextract.o version.o errors.o ggc-none.o \
--- 102,113 ----
  
  # Executables built by this Makefile:
  JAVA_OBJS = java/parse.o java/class.o java/decl.o java/expr.o \
!   java/constants.o java/lang.o java/typeck.o java/except.o \
    java/verify-glue.o java/verify-impl.o \
    java/zextract.o java/jcf-io.o java/win32-host.o java/jcf-parse.o java/mangle.o \
    java/mangle_name.o java/builtins.o java/resource.o \
    java/jcf-write.o java/buffer.o java/check-init.o java/jcf-depend.o \
!   java/jcf-path.o java/boehm.o java/java-gimplify.o
  
  GCJH_OBJS = java/gjavah.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \
    java/win32-host.o java/zextract.o version.o errors.o ggc-none.o \
*************** java/check-init.o: java/check-init.c $(C
*** 310,322 ****
    coretypes.h $(TM_H) toplev.h
  java/class.o: java/class.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(JAVA_TREE_H) $(RTL_H) java/jcf.h java/parse.h toplev.h output.h $(GGC_H) \
!   $(TARGET_H) function.h gt-java-class.h
  java/constants.o: java/constants.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \
    toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) gt-java-constants.h
  java/decl.o: java/decl.c $(CONFIG_H) $(JAVA_TREE_H) $(RTL_H) java/jcf.h \
    toplev.h flags.h $(SYSTEM_H) coretypes.h $(TM_H) function.h $(EXPR_H) \
    libfuncs.h except.h java/java-except.h $(GGC_H) real.h gt-java-decl.h \
!   target.h
  java/except.o: java/except.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h real.h \
    $(RTL_H) java/javaop.h java/java-opcodes.h except.h java/java-except.h \
    toplev.h $(SYSTEM_H) coretypes.h $(TM_H) function.h 
--- 310,322 ----
    coretypes.h $(TM_H) toplev.h
  java/class.o: java/class.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(JAVA_TREE_H) $(RTL_H) java/jcf.h java/parse.h toplev.h output.h $(GGC_H) \
!   $(TARGET_H) function.h gt-java-class.h cgraph.h
  java/constants.o: java/constants.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \
    toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) gt-java-constants.h
  java/decl.o: java/decl.c $(CONFIG_H) $(JAVA_TREE_H) $(RTL_H) java/jcf.h \
    toplev.h flags.h $(SYSTEM_H) coretypes.h $(TM_H) function.h $(EXPR_H) \
    libfuncs.h except.h java/java-except.h $(GGC_H) real.h gt-java-decl.h \
!   target.h cgraph.h
  java/except.o: java/except.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h real.h \
    $(RTL_H) java/javaop.h java/java-opcodes.h except.h java/java-except.h \
    toplev.h $(SYSTEM_H) coretypes.h $(TM_H) function.h 
*************** java/lang.o: java/lang.c $(CONFIG_H) $(J
*** 340,346 ****
    toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(EXPR_H) diagnostic.h \
    langhooks.h $(LANGHOOKS_DEF_H) gt-java-lang.h opts.h options.h
  java/mangle.o: java/mangle.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) $(SYSTEM_H) \
!   coretypes.h $(TM_H) toplev.h $(GGC_H) gt-java-mangle.h
  java/mangle_name.o: java/mangle_name.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) \
    $(SYSTEM_H) coretypes.h $(TM_H) toplev.h $(GGC_H)
  java/resource.o: java/resource.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
--- 340,346 ----
    toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(EXPR_H) diagnostic.h \
    langhooks.h $(LANGHOOKS_DEF_H) gt-java-lang.h opts.h options.h
  java/mangle.o: java/mangle.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) $(SYSTEM_H) \
!   coretypes.h $(TM_H) toplev.h $(GGC_H) gt-java-mangle.h $(LANGHOOKS_DEF_H)
  java/mangle_name.o: java/mangle_name.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) \
    $(SYSTEM_H) coretypes.h $(TM_H) toplev.h $(GGC_H)
  java/resource.o: java/resource.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
*************** java/resource.o: java/resource.c $(CONFI
*** 349,363 ****
  java/typeck.o: java/typeck.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \
    java/convert.h toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) real.h
  java/win32-host.o: java/win32-host.c $(CONFIG_H) $(SYSTEM_H) coretypes.h java/jcf.h
- java/verify.o: java/verify.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \
-   java/javaop.h java/java-opcodes.h java/java-except.h toplev.h $(SYSTEM_H) \
-   coretypes.h $(TM_H)
  java/verify-glue.o: java/verify-glue.c $(CONFIG_H) $(SYSTEM_H) $(JAVA_TREE_H) \
!   coretypes.h $(TM_H) java/verify.h
  java/verify-impl.o: java/verify-impl.c $(CONFIG_H) java/verify.h $(SYSTEM_H) \
    coretypes.h  java/jcf.h $(JAVA_TREE_H)
- java/xref.o: java/xref.c java/xref.h $(CONFIG_H) $(JAVA_TREE_H) toplev.h \
-   $(SYSTEM_H) coretypes.h $(TM_H)
  java/zextract.o: java/zextract.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    java/zipfile.h
  java/java-gimplify.o: java/java-gimplify.c $(CONFIG_H) $(SYSTEM_H) \
--- 349,358 ----
  java/typeck.o: java/typeck.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \
    java/convert.h toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) real.h
  java/win32-host.o: java/win32-host.c $(CONFIG_H) $(SYSTEM_H) coretypes.h java/jcf.h
  java/verify-glue.o: java/verify-glue.c $(CONFIG_H) $(SYSTEM_H) $(JAVA_TREE_H) \
!   coretypes.h $(TM_H) java/verify.h toplev.h
  java/verify-impl.o: java/verify-impl.c $(CONFIG_H) java/verify.h $(SYSTEM_H) \
    coretypes.h  java/jcf.h $(JAVA_TREE_H)
  java/zextract.o: java/zextract.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    java/zipfile.h
  java/java-gimplify.o: java/java-gimplify.c $(CONFIG_H) $(SYSTEM_H) \
*************** java/parse-scan.o: java/parse-scan.c $(C
*** 367,373 ****
    coretypes.h $(TM_H) toplev.h $(JAVA_LEX_C) java/parse.h java/lex.h input.h
  java/parse.o: java/parse.c java/jcf-reader.c $(CONFIG_H) $(SYSTEM_H) \
    coretypes.h $(TM_H) function.h $(JAVA_TREE_H) $(JAVA_LEX_C) java/parse.h \
!   java/lex.h input.h $(GGC_H) debug.h gt-java-parse.h gtype-java.h target.h
  
  # jcf-io.o needs $(ZLIBINC) added to cflags.
  java/jcf-io.o: java/jcf-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
--- 362,369 ----
    coretypes.h $(TM_H) toplev.h $(JAVA_LEX_C) java/parse.h java/lex.h input.h
  java/parse.o: java/parse.c java/jcf-reader.c $(CONFIG_H) $(SYSTEM_H) \
    coretypes.h $(TM_H) function.h $(JAVA_TREE_H) $(JAVA_LEX_C) java/parse.h \
!   java/lex.h input.h $(GGC_H) debug.h gt-java-parse.h gtype-java.h target.h \
!   $(TREE_DUMP_H)
  
  # jcf-io.o needs $(ZLIBINC) added to cflags.
  java/jcf-io.o: java/jcf-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
*************** java/gjavah-jni.o: $(CONFIG_H) $(SYSTEM_
*** 388,398 ****
    java/gjavah.c java/jcf-reader.c java/jcf.h java/javaop.h version.h $(GGC_H) \
    intl.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(ZLIBINC) \
! 	  -DJNI_DEFAULT=1 \
! 	  $(srcdir)/java/gjavah.c $(OUTPUT_OPTION)
  
! TEXI_JAVA_FILES = java/gcj.texi $(docdir)/include/fdl.texi $(docdir)/include/gpl.texi \
! 	 $(docdir)/include/gcc-common.texi
  
  # Documentation
  doc/gcj.info: $(TEXI_JAVA_FILES)
--- 384,395 ----
    java/gjavah.c java/jcf-reader.c java/jcf.h java/javaop.h version.h $(GGC_H) \
    intl.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(ZLIBINC) \
! 		-DJNI_DEFAULT=1 \
! 		$(srcdir)/java/gjavah.c $(OUTPUT_OPTION)
  
! TEXI_JAVA_FILES = java/gcj.texi $(docdir)/include/fdl.texi		\
! 	 $(docdir)/include/gpl.texi $(docdir)/include/gcc-common.texi   \
! 	 gcc-vers.texi
  
  # Documentation
  doc/gcj.info: $(TEXI_JAVA_FILES)
*************** java.install-man: installdirs \
*** 454,460 ****
  	  chmod a-x $$man_name ; \
  	done
  
! $(DESTDIR)$(man1dir)/$(JAVA_INSTALL_NAME)$(man1ext): doc/gcj.1
  	-rm -f $@
  	-$(INSTALL_DATA) $< $@
  	-chmod a-x $@
--- 451,457 ----
  	  chmod a-x $$man_name ; \
  	done
  
! $(DESTDIR)$(man1dir)/$(JAVA_INSTALL_NAME)$(man1ext): doc/gcj.1 installdirs
  	-rm -f $@
  	-$(INSTALL_DATA) $< $@
  	-chmod a-x $@
diff -Nrcpad gcc-4.0.2/gcc/java/boehm.c gcc-4.1.0/gcc/java/boehm.c
*** gcc-4.0.2/gcc/java/boehm.c	Fri Oct 15 14:55:00 2004
--- gcc-4.1.0/gcc/java/boehm.c	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 15,22 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 15,22 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/buffer.c gcc-4.1.0/gcc/java/buffer.c
*** gcc-4.0.2/gcc/java/buffer.c	Sun Jan 12 02:14:55 2003
--- gcc-4.1.0/gcc/java/buffer.c	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 15,22 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  */
  
  /* Written by Per Bothner <bothner@cygnus.com>, July 1998. */
  
--- 15,22 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  */
  
  /* Written by Per Bothner <bothner@cygnus.com>, July 1998. */
  
diff -Nrcpad gcc-4.0.2/gcc/java/buffer.h gcc-4.1.0/gcc/java/buffer.h
*** gcc-4.0.2/gcc/java/buffer.h	Thu Jan  9 23:16:48 2003
--- gcc-4.1.0/gcc/java/buffer.h	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 15,22 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  */
  
  /* Written by Per Bothner <bothner@cygnus.com>, July 1998. */
  
--- 15,22 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  */
  
  /* Written by Per Bothner <bothner@cygnus.com>, July 1998. */
  
diff -Nrcpad gcc-4.0.2/gcc/java/builtins.c gcc-4.1.0/gcc/java/builtins.c
*** gcc-4.0.2/gcc/java/builtins.c	Mon May  9 13:49:56 2005
--- gcc-4.1.0/gcc/java/builtins.c	Sun Sep 18 19:10:15 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** static tree min_builtin (tree, tree);
*** 41,48 ****
  static tree abs_builtin (tree, tree);
  
  static tree java_build_function_call_expr (tree, tree);
- static void define_builtin (enum built_in_function, const char *,
- 			    tree, const char *);
  
  
  
--- 41,46 ----
*************** static GTY(()) struct builtin_record jav
*** 96,119 ****
  static tree
  max_builtin (tree method_return_type, tree method_arguments)
  {
!   return fold (build2 (MAX_EXPR, method_return_type,
! 		       TREE_VALUE (method_arguments),
! 		       TREE_VALUE (TREE_CHAIN (method_arguments))));
  }
  
  static tree
  min_builtin (tree method_return_type, tree method_arguments)
  {
!   return fold (build2 (MIN_EXPR, method_return_type,
! 		       TREE_VALUE (method_arguments),
! 		       TREE_VALUE (TREE_CHAIN (method_arguments))));
  }
  
  static tree
  abs_builtin (tree method_return_type, tree method_arguments)
  {
!   return fold (build1 (ABS_EXPR, method_return_type,
! 		       TREE_VALUE (method_arguments)));
  }
  
  /* Mostly copied from ../builtins.c.  */
--- 94,117 ----
  static tree
  max_builtin (tree method_return_type, tree method_arguments)
  {
!   return fold_build2 (MAX_EXPR, method_return_type,
! 		      TREE_VALUE (method_arguments),
! 		      TREE_VALUE (TREE_CHAIN (method_arguments)));
  }
  
  static tree
  min_builtin (tree method_return_type, tree method_arguments)
  {
!   return fold_build2 (MIN_EXPR, method_return_type,
! 		      TREE_VALUE (method_arguments),
! 		      TREE_VALUE (TREE_CHAIN (method_arguments)));
  }
  
  static tree
  abs_builtin (tree method_return_type, tree method_arguments)
  {
!   return fold_build1 (ABS_EXPR, method_return_type,
! 		      TREE_VALUE (method_arguments));
  }
  
  /* Mostly copied from ../builtins.c.  */
*************** java_build_function_call_expr (tree fn, 
*** 123,142 ****
    tree call_expr;
  
    call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
!   call_expr = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
  		      call_expr, arglist, NULL_TREE);
-   TREE_SIDE_EFFECTS (call_expr) = 1;
-   return fold (call_expr);
  }
  
  
  
  /* Define a single builtin.  */
  static void
  define_builtin (enum built_in_function val,
  		const char *name,
  		tree type,
! 		const char *libname)
  {
    tree decl;
  
--- 121,141 ----
    tree call_expr;
  
    call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
!   return fold_build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
  		      call_expr, arglist, NULL_TREE);
  }
  
  
  
+ #define BUILTIN_NOTHROW 1
+ #define BUILTIN_CONST 2
  /* Define a single builtin.  */
  static void
  define_builtin (enum built_in_function val,
  		const char *name,
  		tree type,
! 		const char *libname,
! 		int flags)
  {
    tree decl;
  
*************** define_builtin (enum built_in_function v
*** 144,153 ****
    DECL_EXTERNAL (decl) = 1;
    TREE_PUBLIC (decl) = 1;
    SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
-   make_decl_rtl (decl);
    pushdecl (decl);
    DECL_BUILT_IN_CLASS (decl) = BUILT_IN_NORMAL;
    DECL_FUNCTION_CODE (decl) = val;
  
    implicit_built_in_decls[val] = decl;
    built_in_decls[val] = decl;
--- 143,155 ----
    DECL_EXTERNAL (decl) = 1;
    TREE_PUBLIC (decl) = 1;
    SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
    pushdecl (decl);
    DECL_BUILT_IN_CLASS (decl) = BUILT_IN_NORMAL;
    DECL_FUNCTION_CODE (decl) = val;
+   if (flags & BUILTIN_NOTHROW)
+     TREE_NOTHROW (decl) = 1;
+   if (flags & BUILTIN_CONST)
+     TREE_READONLY (decl) = 1;
  
    implicit_built_in_decls[val] = decl;
    built_in_decls[val] = decl;
*************** initialize_builtins (void)
*** 187,229 ****
    double_ftype_double_double = build_function_type (double_type_node, t);
  
    define_builtin (BUILT_IN_FMOD, "__builtin_fmod",
! 		  double_ftype_double_double, "fmod");
    define_builtin (BUILT_IN_FMODF, "__builtin_fmodf",
! 		  float_ftype_float_float, "fmodf");
  
    define_builtin (BUILT_IN_ACOS, "__builtin_acos",
! 		  double_ftype_double, "_ZN4java4lang4Math4acosEd");
    define_builtin (BUILT_IN_ASIN, "__builtin_asin",
! 		  double_ftype_double, "_ZN4java4lang4Math4asinEd");
    define_builtin (BUILT_IN_ATAN, "__builtin_atan",
! 		  double_ftype_double, "_ZN4java4lang4Math4atanEd");
    define_builtin (BUILT_IN_ATAN2, "__builtin_atan2",
! 		  double_ftype_double_double, "_ZN4java4lang4Math5atan2Edd");
    define_builtin (BUILT_IN_CEIL, "__builtin_ceil",
! 		  double_ftype_double, "_ZN4java4lang4Math4ceilEd");
    define_builtin (BUILT_IN_COS, "__builtin_cos",
! 		  double_ftype_double, "_ZN4java4lang4Math3cosEd");
    define_builtin (BUILT_IN_EXP, "__builtin_exp",
! 		  double_ftype_double, "_ZN4java4lang4Math3expEd");
    define_builtin (BUILT_IN_FLOOR, "__builtin_floor",
! 		  double_ftype_double, "_ZN4java4lang4Math5floorEd");
    define_builtin (BUILT_IN_LOG, "__builtin_log",
! 		  double_ftype_double, "_ZN4java4lang4Math3logEd");
    define_builtin (BUILT_IN_POW, "__builtin_pow",
! 		  double_ftype_double_double, "_ZN4java4lang4Math3powEdd");
    define_builtin (BUILT_IN_SIN, "__builtin_sin",
! 		  double_ftype_double, "_ZN4java4lang4Math3sinEd");
    define_builtin (BUILT_IN_SQRT, "__builtin_sqrt",
! 		  double_ftype_double, "_ZN4java4lang4Math4sqrtEd");
    define_builtin (BUILT_IN_TAN, "__builtin_tan",
! 		  double_ftype_double, "_ZN4java4lang4Math3tanEd");
    
    t = tree_cons (NULL_TREE, boolean_type_node, end_params_node);
    t = tree_cons (NULL_TREE, boolean_type_node, t);
    boolean_ftype_boolean_boolean = build_function_type (boolean_type_node, t);
    define_builtin (BUILT_IN_EXPECT, "__builtin_expect", 
  		  boolean_ftype_boolean_boolean,
! 		  "__builtin_expect");
  		  
    build_common_builtin_nodes ();
  }
--- 189,245 ----
    double_ftype_double_double = build_function_type (double_type_node, t);
  
    define_builtin (BUILT_IN_FMOD, "__builtin_fmod",
! 		  double_ftype_double_double, "fmod", BUILTIN_CONST);
    define_builtin (BUILT_IN_FMODF, "__builtin_fmodf",
! 		  float_ftype_float_float, "fmodf", BUILTIN_CONST);
  
    define_builtin (BUILT_IN_ACOS, "__builtin_acos",
! 		  double_ftype_double, "_ZN4java4lang4Math4acosEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_ASIN, "__builtin_asin",
! 		  double_ftype_double, "_ZN4java4lang4Math4asinEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_ATAN, "__builtin_atan",
! 		  double_ftype_double, "_ZN4java4lang4Math4atanEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_ATAN2, "__builtin_atan2",
! 		  double_ftype_double_double, "_ZN4java4lang4Math5atan2Edd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_CEIL, "__builtin_ceil",
! 		  double_ftype_double, "_ZN4java4lang4Math4ceilEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_COS, "__builtin_cos",
! 		  double_ftype_double, "_ZN4java4lang4Math3cosEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_EXP, "__builtin_exp",
! 		  double_ftype_double, "_ZN4java4lang4Math3expEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_FLOOR, "__builtin_floor",
! 		  double_ftype_double, "_ZN4java4lang4Math5floorEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_LOG, "__builtin_log",
! 		  double_ftype_double, "_ZN4java4lang4Math3logEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_POW, "__builtin_pow",
! 		  double_ftype_double_double, "_ZN4java4lang4Math3powEdd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_SIN, "__builtin_sin",
! 		  double_ftype_double, "_ZN4java4lang4Math3sinEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_SQRT, "__builtin_sqrt",
! 		  double_ftype_double, "_ZN4java4lang4Math4sqrtEd",
! 		  BUILTIN_CONST);
    define_builtin (BUILT_IN_TAN, "__builtin_tan",
! 		  double_ftype_double, "_ZN4java4lang4Math3tanEd",
! 		  BUILTIN_CONST);
    
    t = tree_cons (NULL_TREE, boolean_type_node, end_params_node);
    t = tree_cons (NULL_TREE, boolean_type_node, t);
    boolean_ftype_boolean_boolean = build_function_type (boolean_type_node, t);
    define_builtin (BUILT_IN_EXPECT, "__builtin_expect", 
  		  boolean_ftype_boolean_boolean,
! 		  "__builtin_expect",
! 		  BUILTIN_CONST | BUILTIN_NOTHROW);
  		  
    build_common_builtin_nodes ();
  }
diff -Nrcpad gcc-4.0.2/gcc/java/check-init.c gcc-4.1.0/gcc/java/check-init.c
*** gcc-4.0.2/gcc/java/check-init.c	Mon Jan 10 18:01:04 2005
--- gcc-4.1.0/gcc/java/check-init.c	Tue Sep  6 02:25:00 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** The Free Software Foundation is independ
*** 37,43 ****
  /* The basic idea is that we assign each local variable declaration
     and each blank final field an index, and then we pass around
     bitstrings, where the (2*i)'th bit is set if decl whose DECL_BIT_INDEX
!    is i is definitely assigned, and the the (2*i=1)'th bit is set if 
     decl whose DECL_BIT_INDEX is i is definitely unassigned */
  
  /* One segment of a bitstring. */
--- 37,43 ----
  /* The basic idea is that we assign each local variable declaration
     and each blank final field an index, and then we pass around
     bitstrings, where the (2*i)'th bit is set if decl whose DECL_BIT_INDEX
!    is i is definitely assigned, and the (2*i=1)'th bit is set if 
     decl whose DECL_BIT_INDEX is i is definitely unassigned */
  
  /* One segment of a bitstring. */
*************** static int start_current_locals = 0;
*** 77,84 ****
  
  static int num_current_words;
  
- static tree wfl;
- 
  #define COPYN(DST, SRC, NWORDS) memcpy (DST, SRC, NWORDS * sizeof(word))
  #define COPY(DST, SRC) COPYN (DST, SRC, num_current_words)
  
--- 77,82 ----
*************** get_variable_decl (tree exp)
*** 247,255 ****
  static void
  final_assign_error (tree name)
  {
!   parse_error_context (wfl,
!                        "Can't reassign a value to the final variable %qs",
!                        IDENTIFIER_POINTER (name));
  }
  
  static void
--- 245,252 ----
  static void
  final_assign_error (tree name)
  {
!   error ("Can't reassign a value to the final variable %qs",
! 	 IDENTIFIER_POINTER (name));
  }
  
  static void
*************** static void
*** 501,507 ****
--- 498,507 ----
  check_init (tree exp, words before)
  {
    tree tmp;
+   location_t save_location = input_location;
   again:
+   if (EXPR_HAS_LOCATION (exp))
+     input_location = EXPR_LOCATION (exp);
    switch (TREE_CODE (exp))
      {
      case VAR_DECL:
*************** check_init (tree exp, words before)
*** 515,524 ****
  	  if (! LOCAL_CLASS_INITIALIZATION_FLAG_P (exp)
  	      && index >= 0 && ! ASSIGNED_P (before, index))
  	    {
! 	      parse_error_context 
! 		(wfl, "Variable %qs may not have been initialized",
! 		 IDENTIFIER_POINTER (DECL_NAME (exp)));
! 	      /* Suppress further errors. */
  	      DECL_BIT_INDEX (exp) = -2;
  	    }
  	}
--- 515,521 ----
  	  if (! LOCAL_CLASS_INITIALIZATION_FLAG_P (exp)
  	      && index >= 0 && ! ASSIGNED_P (before, index))
  	    {
! 	      error ("variable %qD may not have been initialized", exp);
  	      DECL_BIT_INDEX (exp) = -2;
  	    }
  	}
*************** check_init (tree exp, words before)
*** 531,539 ****
  	  int index = DECL_BIT_INDEX (tmp);
  	  if (index >= 0 && ! ASSIGNED_P (before, index))
  	    {
! 	      parse_error_context 
! 		(wfl, "variable %qs may not have been initialized",
! 		 IDENTIFIER_POINTER (DECL_NAME (tmp)));
  	      /* Suppress further errors. */
  	      DECL_BIT_INDEX (tmp) = -2;
  	    }
--- 528,534 ----
  	  int index = DECL_BIT_INDEX (tmp);
  	  if (index >= 0 && ! ASSIGNED_P (before, index))
  	    {
! 	      error ("variable %qD may not have been initialized", tmp);
  	      /* Suppress further errors. */
  	      DECL_BIT_INDEX (tmp) = -2;
  	    }
*************** check_init (tree exp, words before)
*** 669,675 ****
  	END_ALTERNATIVES (before, alt);
  	loop_current_locals = save_loop_current_locals;
  	start_current_locals = save_start_current_locals;
! 	return;
        }
      case EXIT_EXPR:
        {
--- 664,670 ----
  	END_ALTERNATIVES (before, alt);
  	loop_current_locals = save_loop_current_locals;
  	start_current_locals = save_start_current_locals;
! 	break;
        }
      case EXIT_EXPR:
        {
*************** check_init (tree exp, words before)
*** 684,690 ****
  	done_alternative (when_true, alt);
  	COPY (before, when_false);
  	RELEASE_BUFFERS(when_true);
! 	return;
        }
      case LABELED_BLOCK_EXPR:
        {
--- 679,685 ----
  	done_alternative (when_true, alt);
  	COPY (before, when_false);
  	RELEASE_BUFFERS(when_true);
! 	break;
        }
      case LABELED_BLOCK_EXPR:
        {
*************** check_init (tree exp, words before)
*** 695,701 ****
  	  check_init (LABELED_BLOCK_BODY (exp), before);
  	done_alternative (before, &alt);
  	END_ALTERNATIVES (before, alt);
! 	return;
        }
      case EXIT_BLOCK_EXPR:
        {
--- 690,696 ----
  	  check_init (LABELED_BLOCK_BODY (exp), before);
  	done_alternative (before, &alt);
  	END_ALTERNATIVES (before, alt);
! 	break;
        }
      case EXIT_BLOCK_EXPR:
        {
*************** check_init (tree exp, words before)
*** 705,711 ****
  	  alt = alt->outer;
  	done_alternative (before, alt);
  	SET_ALL (before);
! 	return;
        }
      case SWITCH_EXPR:
        {
--- 700,706 ----
  	  alt = alt->outer;
  	done_alternative (before, alt);
  	SET_ALL (before);
! 	break;
        }
      case SWITCH_EXPR:
        {
*************** check_init (tree exp, words before)
*** 722,728 ****
  	  done_alternative (alt.saved, &alt);
  	FREE_BUFFER(alt.saved, buf);
  	END_ALTERNATIVES (before, alt);
! 	return;
        }
      case CASE_EXPR:
      case DEFAULT_EXPR:
--- 717,723 ----
  	  done_alternative (alt.saved, &alt);
  	FREE_BUFFER(alt.saved, buf);
  	END_ALTERNATIVES (before, alt);
! 	break;
        }
      case CASE_EXPR:
      case DEFAULT_EXPR:
*************** check_init (tree exp, words before)
*** 764,770 ****
  	  }
  	END_ALTERNATIVES (before, alt);
        }
!     return;
  
      case TRY_FINALLY_EXPR:
        {
--- 759,765 ----
  	  }
  	END_ALTERNATIVES (before, alt);
        }
!     break;
  
      case TRY_FINALLY_EXPR:
        {
*************** check_init (tree exp, words before)
*** 775,781 ****
  	UNION (before, before, tmp);
  	RELEASE_BUFFERS(tmp);
        }
!       return;
  
      case RETURN_EXPR:
      case THROW_EXPR:
--- 770,776 ----
  	UNION (before, before, tmp);
  	RELEASE_BUFFERS(tmp);
        }
!       break;
  
      case RETURN_EXPR:
      case THROW_EXPR:
*************** check_init (tree exp, words before)
*** 786,792 ****
      case ERROR_MARK:
      never_continues:
        SET_ALL (before);
!       return;
        
      case COND_EXPR:
      case TRUTH_ANDIF_EXPR:
--- 781,787 ----
      case ERROR_MARK:
      never_continues:
        SET_ALL (before);
!       break;
        
      case COND_EXPR:
      case TRUTH_ANDIF_EXPR:
*************** check_init (tree exp, words before)
*** 848,854 ****
  
      case SAVE_EXPR:
        if (IS_INIT_CHECKED (exp))
! 	return;
        IS_INIT_CHECKED (exp) = 1;
        exp = TREE_OPERAND (exp, 0);
        goto again;
--- 843,849 ----
  
      case SAVE_EXPR:
        if (IS_INIT_CHECKED (exp))
! 	break;
        IS_INIT_CHECKED (exp) = 1;
        exp = TREE_OPERAND (exp, 0);
        goto again;
*************** check_init (tree exp, words before)
*** 923,942 ****
  
      case NEW_ARRAY_INIT:
        {
! 	tree x = CONSTRUCTOR_ELTS (TREE_OPERAND (exp, 0));
! 	for ( ;  x != NULL_TREE;  x = TREE_CHAIN (x))
! 	  check_init (TREE_VALUE (x), before);
        }
        break;
  
      case EXPR_WITH_FILE_LOCATION:
        {
  	location_t saved_location = input_location;
- 	tree saved_wfl = wfl;
  	tree body = EXPR_WFL_NODE (exp);
  	if (IS_EMPTY_STMT (body))
  	  break;
- 	wfl = exp;
  #ifdef USE_MAPPED_LOCATION
  	input_location = EXPR_LOCATION (exp);
  #else
--- 918,937 ----
  
      case NEW_ARRAY_INIT:
        {
! 	tree value;
! 	unsigned HOST_WIDE_INT idx;
! 	FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (TREE_OPERAND (exp, 0)),
! 				    idx, value)
! 	  check_init (value, before);
        }
        break;
  
      case EXPR_WITH_FILE_LOCATION:
        {
  	location_t saved_location = input_location;
  	tree body = EXPR_WFL_NODE (exp);
  	if (IS_EMPTY_STMT (body))
  	  break;
  #ifdef USE_MAPPED_LOCATION
  	input_location = EXPR_LOCATION (exp);
  #else
*************** check_init (tree exp, words before)
*** 945,951 ****
  #endif
  	check_init (body, before);
  	input_location = saved_location;
- 	wfl = saved_wfl;
        }
        break;
        
--- 940,945 ----
*************** check_init (tree exp, words before)
*** 954,959 ****
--- 948,954 ----
  	("internal error in check-init: tree code not implemented: %s",
  	 tree_code_name [(int) TREE_CODE (exp)]);
      }
+   input_location = save_location;
  }
  
  void
diff -Nrcpad gcc-4.0.2/gcc/java/class.c gcc-4.1.0/gcc/java/class.c
*** gcc-4.0.2/gcc/java/class.c	Wed Aug 17 22:08:15 2005
--- gcc-4.1.0/gcc/java/class.c	Tue Dec 13 09:44:35 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** The Free Software Foundation is independ
*** 45,50 ****
--- 45,51 ----
  #include "except.h"
  #include "cgraph.h"
  #include "tree-iterator.h"
+ #include "cgraph.h"
  
  /* DOS brain-damage */
  #ifndef O_BINARY
*************** static void add_miranda_methods (tree, t
*** 63,68 ****
--- 64,70 ----
  static int assume_compiled (const char *);
  static tree build_symbol_entry (tree);
  static tree emit_assertion_table (tree);
+ static void register_class (void);
  
  struct obstack temporary_obstack;
  
*************** static class_flag_node *assume_compiled_
*** 97,108 ****
  
  static class_flag_node *enable_assert_tree;
  
! static GTY(()) tree class_roots[5];
! #define registered_class class_roots[0]
! #define fields_ident class_roots[1]  /* get_identifier ("fields") */
! #define info_ident class_roots[2]  /* get_identifier ("info") */
! #define class_list class_roots[3]
! #define class_dtable_decl class_roots[4]
  
  /* Return the node that most closely represents the class whose name
     is IDENT.  Start the search from NODE (followed by its siblings).
--- 99,111 ----
  
  static class_flag_node *enable_assert_tree;
  
! static GTY(()) tree class_roots[4];
! #define fields_ident class_roots[0]  /* get_identifier ("fields") */
! #define info_ident class_roots[1]  /* get_identifier ("info") */
! #define class_list class_roots[2]
! #define class_dtable_decl class_roots[3]
! 
! static GTY(()) VEC(tree,gc) *registered_class;
  
  /* Return the node that most closely represents the class whose name
     is IDENT.  Start the search from NODE (followed by its siblings).
*************** make_class (void)
*** 316,321 ****
--- 319,327 ----
  {
    tree type;
    type = make_node (RECORD_TYPE);
+   /* Unfortunately we must create the binfo here, so that class
+      loading works.  */
+   TYPE_BINFO (type) = make_tree_binfo (0);
    MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC (type);
  
    return type;
*************** push_class (tree class_type, tree class_
*** 422,427 ****
--- 428,434 ----
  #endif
    CLASS_P (class_type) = 1;
    decl = build_decl (TYPE_DECL, class_name, class_type);
+   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
  
    /* dbxout needs a DECL_SIZE if in gstabs mode */
    DECL_SIZE (decl) = integer_zero_node;
*************** set_super_info (int access_flags, tree t
*** 464,470 ****
    if (super_class)
      total_supers++;
  
!   TYPE_BINFO (this_class) = make_tree_binfo (total_supers);
    TYPE_VFIELD (this_class) = TYPE_VFIELD (object_type_node);
    if (super_class)
      {
--- 471,478 ----
    if (super_class)
      total_supers++;
  
!   if (total_supers)
!     TYPE_BINFO (this_class) = make_tree_binfo (total_supers);
    TYPE_VFIELD (this_class) = TYPE_VFIELD (object_type_node);
    if (super_class)
      {
*************** inherits_from_p (tree type1, tree type2)
*** 545,551 ****
      {
        if (type1 == type2)
  	return 1;
!       type1 = CLASSTYPE_SUPER (type1);
      }
    return 0;
  }
--- 553,563 ----
      {
        if (type1 == type2)
  	return 1;
! 
!       if (! CLASS_LOADED_P (type1))
! 	load_class (type1, 1);
! 
!       type1 = maybe_layout_super_class (CLASSTYPE_SUPER (type1), type1);
      }
    return 0;
  }
*************** void
*** 786,794 ****
  set_constant_value (tree field, tree constant)
  {
    if (field == NULL_TREE)
!     warning ("misplaced ConstantValue attribute (not in any field)");
    else if (DECL_INITIAL (field) != NULL_TREE)
!     warning ("duplicate ConstantValue attribute for field '%s'",
  	     IDENTIFIER_POINTER (DECL_NAME (field)));
    else
      {
--- 798,808 ----
  set_constant_value (tree field, tree constant)
  {
    if (field == NULL_TREE)
!     warning (OPT_Wattributes,
! 	     "misplaced ConstantValue attribute (not in any field)");
    else if (DECL_INITIAL (field) != NULL_TREE)
!     warning (OPT_Wattributes,
! 	     "duplicate ConstantValue attribute for field '%s'",
  	     IDENTIFIER_POINTER (DECL_NAME (field)));
    else
      {
*************** build_utf8_ref (tree name)
*** 910,917 ****
    layout_decl (decl, 0);
    pushdecl (decl);
    rest_of_decl_compilation (decl, global_bindings_p (), 0);
    utf8_decl_list = decl;
-   make_decl_rtl (decl);
    ref = build1 (ADDR_EXPR, utf8const_ptr_type, decl);
    IDENTIFIER_UTF8_REF (name) = ref;
    return ref;
--- 924,931 ----
    layout_decl (decl, 0);
    pushdecl (decl);
    rest_of_decl_compilation (decl, global_bindings_p (), 0);
+   cgraph_varpool_mark_needed_node (cgraph_varpool_node (decl));
    utf8_decl_list = decl;
    ref = build1 (ADDR_EXPR, utf8const_ptr_type, decl);
    IDENTIFIER_UTF8_REF (name) = ref;
    return ref;
*************** build_class_ref (tree type)
*** 943,951 ****
        if (TREE_CODE (type) == POINTER_TYPE)
  	type = TREE_TYPE (type);
  
!       if  (flag_indirect_dispatch
! 	   && type != output_class
! 	   && TREE_CODE (type) == RECORD_TYPE)
  	return build_indirect_class_ref (type);
  
        if (TREE_CODE (type) == RECORD_TYPE)
--- 957,965 ----
        if (TREE_CODE (type) == POINTER_TYPE)
  	type = TREE_TYPE (type);
  
!       if (flag_indirect_dispatch
! 	  && type != output_class
! 	  && TREE_CODE (type) == RECORD_TYPE)
  	return build_indirect_class_ref (type);
  
        if (TREE_CODE (type) == RECORD_TYPE)
*************** build_class_ref (tree type)
*** 958,976 ****
  	  if (decl == NULL_TREE)
  	    {
  	      decl = build_decl (VAR_DECL, decl_name, class_type_node);
- 	      DECL_SIZE (decl) = TYPE_SIZE (class_type_node);
- 	      DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (class_type_node);
  	      TREE_STATIC (decl) = 1;
  	      TREE_PUBLIC (decl) = 1;
  	      DECL_IGNORED_P (decl) = 1;
  	      DECL_ARTIFICIAL (decl) = 1;
  	      if (is_compiled == 1)
  		DECL_EXTERNAL (decl) = 1;
! 	      SET_DECL_ASSEMBLER_NAME (decl, 
! 				       java_mangle_class_field
! 				       (&temporary_obstack, type));
! 	      make_decl_rtl (decl);
! 	      pushdecl_top_level (decl);
  	    }
  	}
        else
--- 972,990 ----
  	  if (decl == NULL_TREE)
  	    {
  	      decl = build_decl (VAR_DECL, decl_name, class_type_node);
  	      TREE_STATIC (decl) = 1;
  	      TREE_PUBLIC (decl) = 1;
  	      DECL_IGNORED_P (decl) = 1;
  	      DECL_ARTIFICIAL (decl) = 1;
  	      if (is_compiled == 1)
  		DECL_EXTERNAL (decl) = 1;
! 	      MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
! 	      DECL_CLASS_FIELD_P (decl) = 1;
! 	      DECL_CONTEXT (decl) = type;
! 
! 	      /* ??? We want to preserve the DECL_CONTEXT we set just above,
! 		 that that means not calling pushdecl_top_level.  */
! 	      IDENTIFIER_GLOBAL_VALUE (decl_name) = decl;
  	    }
  	}
        else
*************** build_class_ref (tree type)
*** 1003,1008 ****
--- 1017,1027 ----
  		abort ();
  
  	      prim_class = lookup_class (get_identifier (prim_class_name));
+ 	      /* We wrap the class in a NOP_EXPR, because it is a
+ 	         type.  We can't hold it in the COMPONENT_REF itself,
+ 	         as that type must remain NULL.  */
+ 	      prim_class = build1 (NOP_EXPR, prim_class, NULL_TREE);
+ 	      
  	      return build3 (COMPONENT_REF, NULL_TREE,
  			     prim_class, TYPE_identifier_node, NULL_TREE);
  	    }
*************** build_class_ref (tree type)
*** 1022,1028 ****
  	      TREE_PUBLIC (decl) = 1;
  	      DECL_EXTERNAL (decl) = 1;
  	      DECL_ARTIFICIAL (decl) = 1;
- 	      make_decl_rtl (decl);
  	      pushdecl_top_level (decl);
  	    }
  	}
--- 1041,1046 ----
*************** build_fieldref_cache_entry (int index, t
*** 1053,1059 ****
        TREE_PUBLIC (decl) = 0;
        DECL_EXTERNAL (decl) = 0;
        DECL_ARTIFICIAL (decl) = 1;
-       make_decl_rtl (decl);
        pushdecl_top_level (decl);
      }
    return decl;
--- 1071,1076 ----
*************** build_static_field_ref (tree fdecl)
*** 1077,1088 ****
  		  || JNUMERIC_TYPE_P (TREE_TYPE (fdecl)))
  	      && TREE_CONSTANT (DECL_INITIAL (fdecl)))))
      {
!       if (!DECL_RTL_SET_P (fdecl))
! 	{
! 	  if (is_compiled == 1)
! 	    DECL_EXTERNAL (fdecl) = 1;
! 	  make_decl_rtl (fdecl);
! 	}
      }
    else
      {
--- 1094,1101 ----
  		  || JNUMERIC_TYPE_P (TREE_TYPE (fdecl)))
  	      && TREE_CONSTANT (DECL_INITIAL (fdecl)))))
      {
!       if (is_compiled == 1)
! 	DECL_EXTERNAL (fdecl) = 1;
      }
    else
      {
*************** make_local_function_alias (tree method)
*** 1234,1240 ****
    DECL_INITIAL (alias) = error_mark_node;
    TREE_ADDRESSABLE (alias) = 1;
    TREE_USED (alias) = 1;
-   SET_DECL_ASSEMBLER_NAME (alias, DECL_NAME (alias));
    TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (alias)) = 1;
    if (!flag_syntax_only)
      assemble_alias (alias, DECL_ASSEMBLER_NAME (method));
--- 1247,1252 ----
*************** make_field_value (tree fdecl)
*** 1277,1283 ****
  
    PUSH_FIELD_VALUE
      (finit, "info",
!      build_constructor (field_info_union_node,
  	    build_tree_list
  	    ((FIELD_STATIC (fdecl)
  	      ? TREE_CHAIN (TYPE_FIELDS (field_info_union_node))
--- 1289,1295 ----
  
    PUSH_FIELD_VALUE
      (finit, "info",
!      build_constructor_from_list (field_info_union_node,
  	    build_tree_list
  	    ((FIELD_STATIC (fdecl)
  	      ? TREE_CHAIN (TYPE_FIELDS (field_info_union_node))
*************** make_method_value (tree mdecl)
*** 1314,1320 ****
      index = integer_minus_one_node;
  
    code = null_pointer_node;
!   if (DECL_RTL_SET_P (mdecl))
      code = build1 (ADDR_EXPR, nativecode_ptr_type_node, 
  		   make_local_function_alias (mdecl));
    START_RECORD_CONSTRUCTOR (minit, method_type_node);
--- 1326,1335 ----
      index = integer_minus_one_node;
  
    code = null_pointer_node;
!   if (METHOD_ABSTRACT (mdecl))
!     code = build1 (ADDR_EXPR, nativecode_ptr_type_node,
! 		   soft_abstractmethod_node);
!   else
      code = build1 (ADDR_EXPR, nativecode_ptr_type_node, 
  		   make_local_function_alias (mdecl));
    START_RECORD_CONSTRUCTOR (minit, method_type_node);
*************** make_method_value (tree mdecl)
*** 1355,1361 ****
  	    table = tree_cons (NULL_TREE, utf8, table);
  	  }
  	type = build_prim_array_type (ptr_type_node, length);
! 	table = build_constructor (type, table);
  	/* Compute something unique enough.  */
  	sprintf (buf, "_methods%d", method_name_count++);
  	array = build_decl (VAR_DECL, get_identifier (buf), type);
--- 1370,1376 ----
  	    table = tree_cons (NULL_TREE, utf8, table);
  	  }
  	type = build_prim_array_type (ptr_type_node, length);
! 	table = build_constructor_from_list (type, table);
  	/* Compute something unique enough.  */
  	sprintf (buf, "_methods%d", method_name_count++);
  	array = build_decl (VAR_DECL, get_identifier (buf), type);
*************** get_dispatch_table (tree type, tree this
*** 1426,1432 ****
        if (METHOD_ABSTRACT (method))
  	{
  	  if (! abstract_p)
! 	    warning ("%Jabstract method in non-abstract class", method);
  
  	  if (TARGET_VTABLE_USES_DESCRIPTORS)
  	    for (j = 0; j < TARGET_VTABLE_USES_DESCRIPTORS; ++j)
--- 1441,1447 ----
        if (METHOD_ABSTRACT (method))
  	{
  	  if (! abstract_p)
! 	    warning (0, "%Jabstract method in non-abstract class", method);
  
  	  if (TARGET_VTABLE_USES_DESCRIPTORS)
  	    for (j = 0; j < TARGET_VTABLE_USES_DESCRIPTORS; ++j)
*************** get_dispatch_table (tree type, tree this
*** 1436,1444 ****
  	}
        else
  	{
- 	  if (!DECL_RTL_SET_P (method))
- 	    make_decl_rtl (method);
- 
  	  if (TARGET_VTABLE_USES_DESCRIPTORS)
  	    for (j = 0; j < TARGET_VTABLE_USES_DESCRIPTORS; ++j)
  	      {
--- 1451,1456 ----
*************** get_dispatch_table (tree type, tree this
*** 1479,1486 ****
    if (TARGET_VTABLE_USES_DESCRIPTORS)
      arraysize *= TARGET_VTABLE_USES_DESCRIPTORS;
    arraysize += 2;
!   return build_constructor (build_prim_array_type (nativecode_ptr_type_node,
! 						   arraysize), list);
  }
  
  
--- 1491,1499 ----
    if (TARGET_VTABLE_USES_DESCRIPTORS)
      arraysize *= TARGET_VTABLE_USES_DESCRIPTORS;
    arraysize += 2;
!   return build_constructor_from_list
! 	  (build_prim_array_type (nativecode_ptr_type_node,
! 				  arraysize), list);
  }
  
  
*************** make_class_data (tree type)
*** 1607,1614 ****
        field_array_type = build_prim_array_type (field_type_node, field_count);
        fields_decl = build_decl (VAR_DECL, mangled_classname ("_FL_", type),
  				field_array_type);
!       DECL_INITIAL (fields_decl) = build_constructor (field_array_type,
! 						      static_fields);
        TREE_STATIC (fields_decl) = 1;
        DECL_ARTIFICIAL (fields_decl) = 1;
        DECL_IGNORED_P (fields_decl) = 1;
--- 1620,1627 ----
        field_array_type = build_prim_array_type (field_type_node, field_count);
        fields_decl = build_decl (VAR_DECL, mangled_classname ("_FL_", type),
  				field_array_type);
!       DECL_INITIAL (fields_decl) = build_constructor_from_list
! 				    (field_array_type, static_fields);
        TREE_STATIC (fields_decl) = 1;
        DECL_ARTIFICIAL (fields_decl) = 1;
        DECL_IGNORED_P (fields_decl) = 1;
*************** make_class_data (tree type)
*** 1638,1645 ****
    method_array_type = build_prim_array_type (method_type_node, method_count);
    methods_decl = build_decl (VAR_DECL, mangled_classname ("_MT_", type),
  			     method_array_type);
!   DECL_INITIAL (methods_decl) = build_constructor (method_array_type,
! 						   nreverse (methods));
    TREE_STATIC (methods_decl) = 1;
    DECL_ARTIFICIAL (methods_decl) = 1;
    DECL_IGNORED_P (methods_decl) = 1;
--- 1651,1658 ----
    method_array_type = build_prim_array_type (method_type_node, method_count);
    methods_decl = build_decl (VAR_DECL, mangled_classname ("_MT_", type),
  			     method_array_type);
!   DECL_INITIAL (methods_decl) = build_constructor_from_list
! 				 (method_array_type, nreverse (methods));
    TREE_STATIC (methods_decl) = 1;
    DECL_ARTIFICIAL (methods_decl) = 1;
    DECL_IGNORED_P (methods_decl) = 1;
*************** make_class_data (tree type)
*** 1714,1720 ****
  	    }
  	  init = tree_cons (NULL_TREE, index, init); 
  	}
!       DECL_INITIAL (idecl) = build_constructor (interface_array_type, init);
        TREE_STATIC (idecl) = 1;
        DECL_ARTIFICIAL (idecl) = 1;
        DECL_IGNORED_P (idecl) = 1;
--- 1727,1734 ----
  	    }
  	  init = tree_cons (NULL_TREE, index, init); 
  	}
!       DECL_INITIAL (idecl) = build_constructor_from_list (interface_array_type,
! 							  init);
        TREE_STATIC (idecl) = 1;
        DECL_ARTIFICIAL (idecl) = 1;
        DECL_IGNORED_P (idecl) = 1;
*************** finish_class (void)
*** 1912,1917 ****
--- 1926,1932 ----
    java_expand_catch_classes (current_class);
  
    current_function_decl = NULL_TREE;
+   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (current_class)) = 0;
    make_class_data (current_class);
    register_class ();
    rest_of_decl_compilation (TYPE_NAME (current_class), 1, 0);
*************** is_compiled_class (tree class)
*** 1970,1976 ****
  tree
  build_dtable_decl (tree type)
  {
!   tree dtype;
  
    /* We need to build a new dtable type so that its size is uniquely
       computed when we're dealing with the class for real and not just
--- 1985,1991 ----
  tree
  build_dtable_decl (tree type)
  {
!   tree dtype, decl;
  
    /* We need to build a new dtable type so that its size is uniquely
       computed when we're dealing with the class for real and not just
*************** build_dtable_decl (tree type)
*** 2018,2025 ****
    else
      dtype = dtable_type;
  
!   return build_decl (VAR_DECL, 
! 		     java_mangle_vtable (&temporary_obstack, type), dtype);
  }
  
  /* Pre-pend the TYPE_FIELDS of THIS_CLASS with a dummy FIELD_DECL for the
--- 2033,2044 ----
    else
      dtype = dtable_type;
  
!   decl = build_decl (VAR_DECL, get_identifier ("vt$"), dtype);
!   DECL_CONTEXT (decl) = type;
!   MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
!   DECL_VTABLE_P (decl) = 1;
! 
!   return decl;
  }
  
  /* Pre-pend the TYPE_FIELDS of THIS_CLASS with a dummy FIELD_DECL for the
*************** push_super_field (tree this_class, tree 
*** 2045,2051 ****
  static tree
  maybe_layout_super_class (tree super_class, tree this_class)
  {
!   if (TREE_CODE (super_class) == RECORD_TYPE)
      {
        if (!CLASS_LOADED_P (super_class) && CLASS_FROM_SOURCE_P (super_class))
  	safe_layout_class (super_class);
--- 2064,2072 ----
  static tree
  maybe_layout_super_class (tree super_class, tree this_class)
  {
!   if (!super_class)
!     return NULL_TREE;
!   else if (TREE_CODE (super_class) == RECORD_TYPE)
      {
        if (!CLASS_LOADED_P (super_class) && CLASS_FROM_SOURCE_P (super_class))
  	safe_layout_class (super_class);
*************** maybe_layout_super_class (tree super_cla
*** 2064,2069 ****
--- 2085,2093 ----
  	     we give it one.  */
  	  tree this_wrap = NULL_TREE;
  
+ 	  /* Set the correct context for class resolution.  */
+ 	  current_class = this_class;
+ 
  	  if (this_class)
  	    {
  	      tree this_decl = TYPE_NAME (this_class);
*************** maybe_layout_super_class (tree super_cla
*** 2076,2083 ****
  					  DECL_SOURCE_LINE (this_decl), 0);
  #endif
  	    }
! 	  super_class = do_resolve_class (NULL_TREE, this_class,
! 					  super_class, NULL_TREE, this_wrap);
  	  if (!super_class)
  	    return NULL_TREE;	/* FIXME, NULL_TREE not checked by caller. */
  	  super_class = TREE_TYPE (super_class);
--- 2100,2108 ----
  					  DECL_SOURCE_LINE (this_decl), 0);
  #endif
  	    }
! 	  super_class
! 	    = do_resolve_class (DECL_CONTEXT (TYPE_NAME (this_class)),
! 				this_class, super_class, NULL_TREE, this_wrap);
  	  if (!super_class)
  	    return NULL_TREE;	/* FIXME, NULL_TREE not checked by caller. */
  	  super_class = TREE_TYPE (super_class);
*************** void
*** 2093,2099 ****
  layout_class (tree this_class)
  {
    tree super_class = CLASSTYPE_SUPER (this_class);
-   tree field;
  
    class_list = tree_cons (this_class, NULL_TREE, class_list);
    if (CLASS_BEING_LAIDOUT (this_class))
--- 2118,2123 ----
*************** layout_class (tree this_class)
*** 2141,2158 ****
  	push_super_field (this_class, maybe_super_class);
      }
  
-   for (field = TYPE_FIELDS (this_class);
-        field != NULL_TREE;  field = TREE_CHAIN (field))
-     {
-       if (FIELD_STATIC (field))
- 	{
- 	  /* Set DECL_ASSEMBLER_NAME to something suitably mangled. */
- 	  SET_DECL_ASSEMBLER_NAME (field,
- 				   java_mangle_decl
- 				   (&temporary_obstack, field));
- 	}
-     }
- 
    layout_type (this_class);
  
    /* Also recursively load/layout any superinterfaces, but only if
--- 2165,2170 ----
*************** layout_class_method (tree this_class, tr
*** 2320,2336 ****
       compiled into this object file.  */
    DECL_EXTERNAL (method_decl) = 1;
  
-   /* This is a good occasion to mangle the method's name */
-   SET_DECL_ASSEMBLER_NAME (method_decl,
- 			   java_mangle_decl (&temporary_obstack, 
- 					     method_decl));
-   /* We don't generate a RTL for the method if it's abstract, or if
-      it's an interface method that isn't clinit. */
-   if (! METHOD_ABSTRACT (method_decl) 
-       || (CLASS_INTERFACE (TYPE_NAME (this_class)) 
- 	  && (DECL_CLINIT_P (method_decl))))
-     make_decl_rtl (method_decl);
- 
    if (ID_INIT_P (method_name))
      {
        const char *p = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (this_class)));
--- 2332,2337 ----
*************** layout_class_method (tree this_class, tr
*** 2373,2380 ****
  	      && ! flag_indirect_dispatch
  	      && !CLASS_FROM_SOURCE_P (this_class)
  	      && ! DECL_ARTIFICIAL (super_method))
! 	    error ("%Jnon-static method '%D' overrides static method",
!                    method_decl, method_decl);
  	}
        else if (this_class == object_type_node
  	       && (METHOD_FINAL (method_decl)
--- 2374,2381 ----
  	      && ! flag_indirect_dispatch
  	      && !CLASS_FROM_SOURCE_P (this_class)
  	      && ! DECL_ARTIFICIAL (super_method))
! 	    error ("non-static method %q+D overrides static method",
!                    method_decl);
  	}
        else if (this_class == object_type_node
  	       && (METHOD_FINAL (method_decl)
*************** layout_class_method (tree this_class, tr
*** 2390,2420 ****
  	  /* We generate vtable entries for final methods because they
  	     may one day be changed to non-final.  */
  	  set_method_index (method_decl, dtable_count);
! 	  dtable_count = fold (build2 (PLUS_EXPR, integer_type_node,
! 				       dtable_count, integer_one_node));
  	}
      }
  
    return dtable_count;
  }
  
! void
  register_class (void)
  {
!   /* END does not need to be registered with the garbage collector
!      because it always points into the list given by REGISTERED_CLASS,
!      and that variable is registered with the collector.  */
!   static tree end;
!   tree node    = TREE_OPERAND (build_class_ref (current_class), 0);
!   tree current = copy_node (node);
  
-   XEXP (DECL_RTL (current), 0) = copy_rtx (XEXP (DECL_RTL(node), 0));
    if (!registered_class)
!     registered_class = current;
!   else
!     TREE_CHAIN (end) = current;
  
!   end = current;
  }
  
  /* Emit something to register classes at start-up time.
--- 2391,2414 ----
  	  /* We generate vtable entries for final methods because they
  	     may one day be changed to non-final.  */
  	  set_method_index (method_decl, dtable_count);
! 	  dtable_count = fold_build2 (PLUS_EXPR, integer_type_node,
! 				      dtable_count, integer_one_node);
  	}
      }
  
    return dtable_count;
  }
  
! static void
  register_class (void)
  {
!   tree node;
  
    if (!registered_class)
!     registered_class = VEC_alloc (tree, gc, 8);
  
!   node = TREE_OPERAND (build_class_ref (current_class), 0);
!   VEC_safe_push (tree, gc, registered_class, node);
  }
  
  /* Emit something to register classes at start-up time.
*************** emit_register_classes (tree *list_p)
*** 2439,2460 ****
       targets can overide the default in tm.h to use the fallback mechanism.  */
    if (TARGET_USE_JCR_SECTION)
      {
  #ifdef JCR_SECTION_NAME
-       tree t;
        named_section_flags (JCR_SECTION_NAME, SECTION_WRITE);
-       assemble_align (POINTER_SIZE);
-       for (t = registered_class; t; t = TREE_CHAIN (t))
- 	assemble_integer (XEXP (DECL_RTL (t), 0),
- 			  POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
  #else
!       /* A target has defined TARGET_USE_JCR_SECTION, but doesn't have a
! 	 JCR_SECTION_NAME.  */
!       abort ();
  #endif
      }
    else
      {
        tree klass, t, register_class_fn;
  
        t = build_function_type_list (void_type_node, class_ptr_type, NULL);
        t = build_decl (FUNCTION_DECL, get_identifier ("_Jv_RegisterClass"), t);
--- 2433,2460 ----
       targets can overide the default in tm.h to use the fallback mechanism.  */
    if (TARGET_USE_JCR_SECTION)
      {
+       tree klass, t;
+       int i;
+ 
  #ifdef JCR_SECTION_NAME
        named_section_flags (JCR_SECTION_NAME, SECTION_WRITE);
  #else
!       /* A target has defined TARGET_USE_JCR_SECTION,
! 	 but doesn't have a JCR_SECTION_NAME.  */
!       gcc_unreachable ();
  #endif
+       assemble_align (POINTER_SIZE);
+ 
+       for (i = 0; VEC_iterate (tree, registered_class, i, klass); ++i)
+ 	{
+ 	  t = build_fold_addr_expr (klass);
+ 	  output_constant (t, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE);
+ 	}
      }
    else
      {
        tree klass, t, register_class_fn;
+       int i;
  
        t = build_function_type_list (void_type_node, class_ptr_type, NULL);
        t = build_decl (FUNCTION_DECL, get_identifier ("_Jv_RegisterClass"), t);
*************** emit_register_classes (tree *list_p)
*** 2462,2468 ****
        DECL_EXTERNAL (t) = 1;
        register_class_fn = t;
  
!       for (klass = registered_class; klass; klass = TREE_CHAIN (klass))
  	{
  	  t = build_fold_addr_expr (klass);
  	  t = tree_cons (NULL, t, NULL);
--- 2462,2468 ----
        DECL_EXTERNAL (t) = 1;
        register_class_fn = t;
  
!       for (i = 0; VEC_iterate (tree, registered_class, i, klass); ++i)
  	{
  	  t = build_fold_addr_expr (klass);
  	  t = tree_cons (NULL, t, NULL);
*************** emit_symbol_table (tree name, tree the_t
*** 2543,2549 ****
  
    /* Put the list in the right order and make it a constructor. */
    list = nreverse (list);
!   table = build_constructor (symbols_array_type, list);  
  
    /* Make it the initial value for otable_syms and emit the decl. */
    DECL_INITIAL (the_syms_decl) = table;
--- 2543,2549 ----
  
    /* Put the list in the right order and make it a constructor. */
    list = nreverse (list);
!   table = build_constructor_from_list (symbols_array_type, list);  
  
    /* Make it the initial value for otable_syms and emit the decl. */
    DECL_INITIAL (the_syms_decl) = table;
*************** emit_catch_table (tree this_class)
*** 2604,2610 ****
    table = 
      build_decl (VAR_DECL, DECL_NAME (TYPE_CTABLE_DECL (this_class)), array_type);
    DECL_INITIAL (table) = 
!     build_constructor (array_type, TYPE_CATCH_CLASSES (this_class));
    TREE_STATIC (table) = 1;
    TREE_READONLY (table) = 1;  
    DECL_IGNORED_P (table) = 1;
--- 2604,2610 ----
    table = 
      build_decl (VAR_DECL, DECL_NAME (TYPE_CTABLE_DECL (this_class)), array_type);
    DECL_INITIAL (table) = 
!     build_constructor_from_list (array_type, TYPE_CATCH_CLASSES (this_class));
    TREE_STATIC (table) = 1;
    TREE_READONLY (table) = 1;  
    DECL_IGNORED_P (table) = 1;
*************** emit_assertion_table (tree class)
*** 2684,2690 ****
    
    /* Put the list in the right order and make it a constructor. */
    list = nreverse (list);
!   ctor = build_constructor (assertion_table_type, list);
  
    table_decl = build_decl (VAR_DECL, mangled_classname ("_type_assert_", class),
  			   assertion_table_type);
--- 2684,2690 ----
    
    /* Put the list in the right order and make it a constructor. */
    list = nreverse (list);
!   ctor = build_constructor_from_list (assertion_table_type, list);
  
    table_decl = build_decl (VAR_DECL, mangled_classname ("_type_assert_", class),
  			   assertion_table_type);
diff -Nrcpad gcc-4.0.2/gcc/java/config-lang.in gcc-4.1.0/gcc/java/config-lang.in
*** gcc-4.0.2/gcc/java/config-lang.in	Fri May  6 22:53:37 2005
--- gcc-4.1.0/gcc/java/config-lang.in	Sat Jun 25 00:33:05 2005
***************
*** 16,23 ****
  
  #You should have received a copy of the GNU General Public License
  #along with GCC; see the file COPYING.  If not, write to
! #the Free Software Foundation, 59 Temple Place - Suite 330,
! #Boston, MA 02111-1307, USA.
  
  #Java and all Java-based marks are trademarks or registered trademarks
  #of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  #You should have received a copy of the GNU General Public License
  #along with GCC; see the file COPYING.  If not, write to
! #the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! #Boston, MA 02110-1301, USA.
  
  #Java and all Java-based marks are trademarks or registered trademarks
  #of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/constants.c gcc-4.1.0/gcc/java/constants.c
*** gcc-4.0.2/gcc/java/constants.c	Mon May  9 13:49:59 2005
--- gcc-4.1.0/gcc/java/constants.c	Mon Jan 16 15:51:42 2006
***************
*** 1,5 ****
  /* Handle the constant pool of the Java(TM) Virtual Machine.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Handle the constant pool of the Java(TM) Virtual Machine.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** MERCHANTABILITY or FITNESS FOR A PARTICU
*** 15,22 ****
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 15,22 ----
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** alloc_name_constant (int tag, tree name)
*** 356,362 ****
    return find_tree_constant (outgoing_cpool, tag, name);
  }
  
! /* Create a cinstant pool entry for a name_and_type.  This one has '.'
     rather than '/' because it isn't going into a class file, it's
     going into a compiled object.  We don't use the '/' separator in
     compiled objects.  */
--- 356,362 ----
    return find_tree_constant (outgoing_cpool, tag, name);
  }
  
! /* Create a constant pool entry for a name_and_type.  This one has '.'
     rather than '/' because it isn't going into a class file, it's
     going into a compiled object.  We don't use the '/' separator in
     compiled objects.  */
*************** build_constant_data_ref (void)
*** 446,452 ****
  
        decl = build_decl (VAR_DECL, decl_name, type);
        TREE_STATIC (decl) = 1;
-       make_decl_rtl (decl);
        TYPE_CPOOL_DATA_REF (output_class) = decl;
      }
  
--- 446,451 ----
*************** build_constants_constructor (void)
*** 482,488 ****
        case CONSTANT_Fieldref:
        case CONSTANT_NameAndType:
  	{
! 	  jword temp = outgoing_cpool->data[i].w;
  
  	  tags_list
  	    = tree_cons (NULL_TREE, 
--- 481,492 ----
        case CONSTANT_Fieldref:
        case CONSTANT_NameAndType:
  	{
! 	  unsigned HOST_WIDE_INT temp = outgoing_cpool->data[i].w;
! 
! 	  /* Make sure that on a 64-bit big-endian machine this 32-bit
! 	     jint appears in the first word.  */
! 	  if (BYTES_BIG_ENDIAN && BITS_PER_WORD > 32)
! 	    temp <<= BITS_PER_WORD - 32;
  
  	  tags_list
  	    = tree_cons (NULL_TREE, 
*************** build_constants_constructor (void)
*** 516,523 ****
    
        data_decl = build_constant_data_ref ();
        TREE_TYPE (data_decl) = build_array_type (ptr_type_node, index_type);
!       DECL_INITIAL (data_decl) = build_constructor (TREE_TYPE (data_decl),
! 						    data_list);
        DECL_SIZE (data_decl) = TYPE_SIZE (TREE_TYPE (data_decl));
        DECL_SIZE_UNIT (data_decl) = TYPE_SIZE_UNIT (TREE_TYPE (data_decl));
        rest_of_decl_compilation (data_decl, 1, 0);
--- 520,527 ----
    
        data_decl = build_constant_data_ref ();
        TREE_TYPE (data_decl) = build_array_type (ptr_type_node, index_type);
!       DECL_INITIAL (data_decl) = build_constructor_from_list
! 				  (TREE_TYPE (data_decl), data_list);
        DECL_SIZE (data_decl) = TYPE_SIZE (TREE_TYPE (data_decl));
        DECL_SIZE_UNIT (data_decl) = TYPE_SIZE_UNIT (TREE_TYPE (data_decl));
        rest_of_decl_compilation (data_decl, 1, 0);
*************** build_constants_constructor (void)
*** 528,534 ****
  							   current_class),
  			      tags_type);
        TREE_STATIC (tags_decl) = 1;
!       DECL_INITIAL (tags_decl) = build_constructor (tags_type, tags_list);
        rest_of_decl_compilation (tags_decl, 1, 0);
        tags_value = build_address_of (tags_decl);
      }
--- 532,539 ----
  							   current_class),
  			      tags_type);
        TREE_STATIC (tags_decl) = 1;
!       DECL_INITIAL (tags_decl) = build_constructor_from_list
! 				 (tags_type, tags_list);
        rest_of_decl_compilation (tags_decl, 1, 0);
        tags_value = build_address_of (tags_decl);
      }
diff -Nrcpad gcc-4.0.2/gcc/java/convert.h gcc-4.1.0/gcc/java/convert.h
*** gcc-4.0.2/gcc/java/convert.h	Fri Dec 17 15:09:10 2004
--- gcc-4.1.0/gcc/java/convert.h	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 15,22 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  */
  
  /* Written by Jeffrey Hsu <hsu@cygnus.com> */
  
--- 15,22 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  */
  
  /* Written by Jeffrey Hsu <hsu@cygnus.com> */
  
diff -Nrcpad gcc-4.0.2/gcc/java/decl.c gcc-4.1.0/gcc/java/decl.c
*** gcc-4.0.2/gcc/java/decl.c	Thu May 26 14:38:43 2005
--- gcc-4.1.0/gcc/java/decl.c	Thu Dec  8 14:40:48 2005
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** static tree create_primitive_vtable (con
*** 61,72 ****
--- 61,77 ----
  static tree check_local_unnamed_variable (tree, tree, tree);
  static void parse_version (void);
  
+ 
  /* The following ABI flags are used in the high-order bits of the version
     ID field. The version ID number itself should never be larger than 
     0xfffff, so it should be safe to use top 12 bits for these flags. */
  
  #define FLAG_BINARYCOMPAT_ABI (1<<31)  /* Class is built with the BC-ABI. */
  
+ #define FLAG_BOOTSTRAP_LOADER (1<<30)  /* Used when defining a class that 
+ 					  should be loaded by the bootstrap
+ 					  loader.  */
+ 
  /* If an ABI change is made within a GCC release series, rendering current
     binaries incompatible with the old runtimes, this number can be set to
     enforce the compatibility rules. */
*************** static void parse_version (void);
*** 82,88 ****
  #define GCJ_CURRENT_BC_ABI_VERSION \
    (4 * 100000 + 0 * 1000 + MINOR_BINARYCOMPAT_ABI_VERSION)
  
- 
  /* The ABI version number.  */
  tree gcj_abi_version;
  
--- 87,92 ----
*************** builtin_function (const char *name,
*** 566,572 ****
    TREE_PUBLIC (decl) = 1;
    if (library_name)
      SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
-   make_decl_rtl (decl);
    pushdecl (decl);
    DECL_BUILT_IN_CLASS (decl) = cl;
    DECL_FUNCTION_CODE (decl) = function_code;
--- 570,575 ----
*************** parse_version (void)
*** 630,639 ****
    else /* C++ ABI */
      {
        /* Implicit in this computation is the idea that we won't break the
!        old-style binary ABI in a sub-minor release (e.g., from 4.0.0 to
!        4.0.1).  */
!       abi_version = 10000 * major + 10 * minor;
      }
  
    gcj_abi_version = build_int_cstu (ptr_type_node, abi_version);
  }
--- 633,644 ----
    else /* C++ ABI */
      {
        /* Implicit in this computation is the idea that we won't break the
! 	 old-style binary ABI in a sub-minor release (e.g., from 4.0.0 to
! 	 4.0.1).  */
!       abi_version = 100000 * major + 1000 * minor;
      }
+   if (flag_bootstrap_classes)
+     abi_version |= FLAG_BOOTSTRAP_LOADER;
  
    gcj_abi_version = build_int_cstu (ptr_type_node, abi_version);
  }
*************** java_init_decl_processing (void)
*** 1102,1107 ****
--- 1107,1130 ----
    TREE_THIS_VOLATILE (soft_nullpointer_node) = 1;
    TREE_SIDE_EFFECTS (soft_nullpointer_node) = 1;
  
+   soft_abstractmethod_node
+     = builtin_function ("_Jv_ThrowAbstractMethodError",
+ 			build_function_type (void_type_node, endlink),
+ 			0, NOT_BUILT_IN, NULL, NULL_TREE);
+   /* Mark soft_abstractmethod_node as a `noreturn' function with side
+      effects.  */
+   TREE_THIS_VOLATILE (soft_abstractmethod_node) = 1;
+   TREE_SIDE_EFFECTS (soft_abstractmethod_node) = 1;
+ 
+   soft_nosuchfield_node
+     = builtin_function ("_Jv_ThrowNoSuchFieldError",
+ 			build_function_type (void_type_node, endlink),
+ 			0, NOT_BUILT_IN, NULL, NULL_TREE);
+   /* Mark soft_nosuchfield_node as a `noreturn' function with side
+      effects.  */
+   TREE_THIS_VOLATILE (soft_nosuchfield_node) = 1;
+   TREE_SIDE_EFFECTS (soft_nosuchfield_node) = 1;
+ 
    t = tree_cons (NULL_TREE, class_ptr_type,
  		 tree_cons (NULL_TREE, object_ptr_type_node, endlink));
    soft_checkcast_node
*************** java_init_decl_processing (void)
*** 1155,1160 ****
--- 1178,1189 ----
  			build_function_type (void_type_node, t),
  			0, NOT_BUILT_IN, NULL, NULL_TREE);
  
+   t = tree_cons (NULL_TREE, object_ptr_type_node, endlink);
+   soft_unwrapjni_node
+     = builtin_function ("_Jv_UnwrapJNIweakReference",
+ 			build_function_type (object_ptr_type_node, t),
+ 			0, NOT_BUILT_IN, NULL, NULL_TREE);
+ 
    t = tree_cons (NULL_TREE, int_type_node,
  		 tree_cons (NULL_TREE, int_type_node, endlink));
    soft_idiv_node
*************** java_init_decl_processing (void)
*** 1183,1188 ****
--- 1212,1218 ----
    eh_personality_libfunc = init_one_libfunc (USING_SJLJ_EXCEPTIONS
                                               ? "__gcj_personality_sj0"
                                               : "__gcj_personality_v0");
+   default_init_unwind_resume_libfunc ();
  
    lang_eh_runtime_type = do_nothing;
  
*************** lookup_name (tree name)
*** 1216,1222 ****
  }
  
  /* Similar to `lookup_name' but look only at current binding level and
!    the previous one if its the parameter level.  */
  
  static tree
  lookup_name_current_level (tree name)
--- 1246,1252 ----
  }
  
  /* Similar to `lookup_name' but look only at current binding level and
!    the previous one if it's the parameter level.  */
  
  static tree
  lookup_name_current_level (tree name)
*************** pushdecl (tree x)
*** 1295,1301 ****
  	/* error_mark_node is 0 for a while during initialization!  */
  	{
  	  t = 0;
! 	  error ("%J'%D' used prior to declaration", x, x);
  	}
  
        /* If we're naming a hitherto-unnamed type, set its TYPE_NAME
--- 1325,1331 ----
  	/* error_mark_node is 0 for a while during initialization!  */
  	{
  	  t = 0;
! 	  error ("%q+D used prior to declaration", x);
  	}
  
        /* If we're naming a hitherto-unnamed type, set its TYPE_NAME
*************** pushdecl (tree x)
*** 1369,1375 ****
  		warnstring = "declaration of %qs shadows global declaration";
  
  	      if (warnstring)
! 		warning (warnstring, IDENTIFIER_POINTER (name));
  	    }
  #endif
  
--- 1399,1405 ----
  		warnstring = "declaration of %qs shadows global declaration";
  
  	      if (warnstring)
! 		warning (0, warnstring, IDENTIFIER_POINTER (name));
  	    }
  #endif
  
*************** poplevel (int keep, int reverse, int fun
*** 1667,1678 ****
  
  	  if (DECL_INITIAL (label) == 0)
  	    {
! 	      error ("%Jlabel '%D' used but not defined", label, label);
  	      /* Avoid crashing later.  */
  	      define_label (input_location, DECL_NAME (label));
  	    }
  	  else if (warn_unused[UNUSED_LABEL] && !TREE_USED (label))
! 	    warning ("%Jlabel '%D' defined but not used", label, label);
  	  IDENTIFIER_LABEL_VALUE (DECL_NAME (label)) = 0;
  
  	  /* Put the labels into the "variables" of the
--- 1697,1708 ----
  
  	  if (DECL_INITIAL (label) == 0)
  	    {
! 	      error ("label %q+D used but not defined", label);
  	      /* Avoid crashing later.  */
  	      define_label (input_location, DECL_NAME (label));
  	    }
  	  else if (warn_unused[UNUSED_LABEL] && !TREE_USED (label))
! 	    warning (0, "label %q+D defined but not used", label);
  	  IDENTIFIER_LABEL_VALUE (DECL_NAME (label)) = 0;
  
  	  /* Put the labels into the "variables" of the
*************** maybe_poplevels (int pc)
*** 1784,1790 ****
       terminate a range if the current pc is equal to the end of the
       range, and this is *before* we have generated code for the
       instruction at end_pc.  We're closing a binding level one
!      instruction too early.  */
    while (current_binding_level->end_pc <= pc)
      poplevel (1, 0, 0);
  }
--- 1814,1820 ----
       terminate a range if the current pc is equal to the end of the
       range, and this is *before* we have generated code for the
       instruction at end_pc.  We're closing a binding level one
!      instruction too early.*/
    while (current_binding_level->end_pc <= pc)
      poplevel (1, 0, 0);
  }
*************** force_poplevels (int start_pc)
*** 1800,1807 ****
    while (current_binding_level->start_pc > start_pc)
      {
        if (pedantic && current_binding_level->start_pc > start_pc)
! 	warning ("%JIn %D: overlapped variable and exception ranges at %d",
!                  current_function_decl, current_function_decl,
  		 current_binding_level->start_pc);
        poplevel (1, 0, 0);
      }
--- 1830,1837 ----
    while (current_binding_level->start_pc > start_pc)
      {
        if (pedantic && current_binding_level->start_pc > start_pc)
! 	warning (0, "In %+D: overlapped variable and exception ranges at %d",
!                  current_function_decl,
  		 current_binding_level->start_pc);
        poplevel (1, 0, 0);
      }
*************** give_name_to_locals (JCF *jcf)
*** 1862,1870 ****
  	{
  	  tree decl = TREE_VEC_ELT (decl_map, slot);
  	  DECL_NAME (decl) = name;
- 	  SET_DECL_ASSEMBLER_NAME (decl, name);
  	  if (TREE_CODE (decl) != PARM_DECL || TREE_TYPE (decl) != type)
! 	    warning ("bad type in parameter debug info");
  	}
        else
  	{
--- 1892,1899 ----
  	{
  	  tree decl = TREE_VEC_ELT (decl_map, slot);
  	  DECL_NAME (decl) = name;
  	  if (TREE_CODE (decl) != PARM_DECL || TREE_TYPE (decl) != type)
! 	    warning (0, "bad type in parameter debug info");
  	}
        else
  	{
*************** give_name_to_locals (JCF *jcf)
*** 1873,1880 ****
  	  tree decl = build_decl (VAR_DECL, name, type);
  	  if (end_pc > DECL_CODE_LENGTH (current_function_decl))
  	    {
! 	      warning ("%Jbad PC range for debug info for local '%D'",
!                        decl, decl);
  	      end_pc = DECL_CODE_LENGTH (current_function_decl);
  	    }
  
--- 1902,1909 ----
  	  tree decl = build_decl (VAR_DECL, name, type);
  	  if (end_pc > DECL_CODE_LENGTH (current_function_decl))
  	    {
! 	      warning (0, "bad PC range for debug info for local %q+D",
!                        decl);
  	      end_pc = DECL_CODE_LENGTH (current_function_decl);
  	    }
  
*************** give_name_to_locals (JCF *jcf)
*** 1929,1935 ****
  	      sprintf (buffer, "ARG_%d", arg_i);
  	      DECL_NAME (parm) = get_identifier (buffer);
  	    }
- 	  SET_DECL_ASSEMBLER_NAME (parm, DECL_NAME (parm));
  	}
      }
  }
--- 1958,1963 ----
*************** finish_method (tree fndecl)
*** 2082,2088 ****
  
    /* Prepend class initialization for static methods reachable from
       other classes.  */
!   if (METHOD_STATIC (fndecl) && ! METHOD_PRIVATE (fndecl)
        && ! DECL_CLINIT_P (fndecl)
        && ! CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (fndecl))))
      {
--- 2110,2118 ----
  
    /* Prepend class initialization for static methods reachable from
       other classes.  */
!   if (METHOD_STATIC (fndecl)
!       && (! METHOD_PRIVATE (fndecl)
!           || INNER_CLASS_P (DECL_CONTEXT (fndecl)))
        && ! DECL_CLINIT_P (fndecl)
        && ! CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (fndecl))))
      {
*************** java_mark_decl_local (tree decl)
*** 2133,2142 ****
--- 2163,2201 ----
  
    /* If we've already constructed DECL_RTL, give encode_section_info
       a second chance, now that we've changed the flags.  */
+   /* ??? Ideally, we'd have flag_unit_at_a_time set, and not have done
+      anything that would have referenced DECL_RTL so far.  But at the
+      moment we force flag_unit_at_a_time off due to excessive memory
+      consumption when compiling large jar files.  Which probably means
+      that we need to re-order how we process jar files...  */
    if (DECL_RTL_SET_P (decl))
      make_decl_rtl (decl);
  }
  
+ /* Given appropriate target support, G++ will emit hidden aliases for native
+    methods.  Using this hidden name is required for proper operation of
+    _Jv_Method::ncode, but it doesn't hurt to use it everywhere.  Look for
+    proper target support, then mark the method for aliasing.  */
+ 
+ static void
+ java_mark_cni_decl_local (tree decl)
+ {
+   /* Setting DECL_LOCAL_CNI_METHOD_P changes the behavior of the mangler.
+      We expect that we should not yet have referenced this decl in a 
+      context that requires it.  Check this invariant even if we don't have
+      support for hidden aliases.  */
+   gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
+ 
+ #if !defined(HAVE_GAS_HIDDEN) || !defined(ASM_OUTPUT_DEF)
+   return;
+ #endif
+ 
+   DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
+   DECL_LOCAL_CNI_METHOD_P (decl) = 1;
+ }
+ 
+ /* Use the preceding two functions and mark all members of the class.  */
+ 
  void
  java_mark_class_local (tree class)
  {
*************** java_mark_class_local (tree class)
*** 2147,2154 ****
        java_mark_decl_local (t);
  
    for (t = TYPE_METHODS (class); t ; t = TREE_CHAIN (t))
!     if (!METHOD_ABSTRACT (t) && (!METHOD_NATIVE (t) || flag_jni))
!       java_mark_decl_local (t);
  }
  
  /* Add a statement to a compound_expr.  */
--- 2206,2218 ----
        java_mark_decl_local (t);
  
    for (t = TYPE_METHODS (class); t ; t = TREE_CHAIN (t))
!     if (!METHOD_ABSTRACT (t))
!       {
! 	if (METHOD_NATIVE (t) && !flag_jni)
! 	  java_mark_cni_decl_local (t);
!         else
! 	  java_mark_decl_local (t);
!       }
  }
  
  /* Add a statement to a compound_expr.  */
diff -Nrcpad gcc-4.0.2/gcc/java/except.c gcc-4.1.0/gcc/java/except.c
*** gcc-4.0.2/gcc/java/except.c	Thu Jul 28 16:51:11 2005
--- gcc-4.1.0/gcc/java/except.c	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** sanity_check_exception_range (struct eh_
*** 77,83 ****
  		  && ptr->end_pc <=  ptr->outer->end_pc);
        (void) sanity_check_exception_range (ptr);
      }
- 
    return true;
  }
  
--- 77,82 ----
*************** split_range (struct eh_range *range, int
*** 231,237 ****
    first_child = &range->first_child;
    second_child = &h->first_child;
  
!   /* Distribute the sub-ranges bewteen the two new ranges.  */
    for (ptr = range->first_child; ptr; ptr = ptr->next_sibling)
      {
        if (ptr->start_pc < pc)
--- 230,236 ----
    first_child = &range->first_child;
    second_child = &h->first_child;
  
!   /* Distribute the sub-ranges between the two new ranges.  */
    for (ptr = range->first_child; ptr; ptr = ptr->next_sibling)
      {
        if (ptr->start_pc < pc)
*************** expand_end_java_handler (struct eh_range
*** 496,516 ****
        type = prepare_eh_table_type (type);
  
        {
! 	tree goto_expr = build1 (GOTO_EXPR, void_type_node,
! 				 TREE_VALUE (handler));
! 	/* Build an asm to prevent gcc from attempting to merge this
! 	   handler with the next basic block; this is a workaround for
! 	   a bug in cfgbuild.c.  */
! 	tree asm_expr = build (ASM_EXPR, void_type_node,
! 			       build_string (0, ""),
! 			       NULL_TREE, NULL_TREE, NULL_TREE);
! 	tree compound = build2 (COMPOUND_EXPR, void_type_node,
! 				asm_expr, goto_expr);
! 	tree try_catch_expr 
! 	  = build2 (TRY_CATCH_EXPR, void_type_node,
! 		    *get_stmts (), 
! 		    build2 (CATCH_EXPR, void_type_node, type, 
! 			    compound));
  	*get_stmts () = try_catch_expr;
        }
      }
--- 495,505 ----
        type = prepare_eh_table_type (type);
  
        {
! 	tree catch_expr = build2 (CATCH_EXPR, void_type_node, type,
! 				  build1 (GOTO_EXPR, void_type_node,
! 					  TREE_VALUE (handler)));
! 	tree try_catch_expr = build2 (TRY_CATCH_EXPR, void_type_node,
! 				      *get_stmts (), catch_expr);	
  	*get_stmts () = try_catch_expr;
        }
      }
diff -Nrcpad gcc-4.0.2/gcc/java/expr.c gcc-4.1.0/gcc/java/expr.c
*** gcc-4.0.2/gcc/java/expr.c	Mon May  9 13:49:54 2005
--- gcc-4.1.0/gcc/java/expr.c	Thu Feb  9 14:03:17 2006
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** int stack_pointer;
*** 138,143 ****
--- 138,149 ----
  const unsigned char *linenumber_table;
  int linenumber_count;
  
+ /* Largest pc so far in this method that has been passed to lookup_label. */
+ int highest_label_pc_this_method = -1;
+ 
+ /* Base value for this method to add to pc to get generated label. */
+ int start_label_pc_this_method = 0;
+ 
  void
  init_expr_processing (void)
  {
*************** java_truthvalue_conversion (tree expr)
*** 186,195 ****
  
      case COND_EXPR:
        /* Distribute the conversion into the arms of a COND_EXPR.  */
!       return fold
! 	       (build3 (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
! 			java_truthvalue_conversion (TREE_OPERAND (expr, 1)),
! 			java_truthvalue_conversion (TREE_OPERAND (expr, 2))));
  
      case NOP_EXPR:
        /* If this is widening the argument, we can ignore it.  */
--- 192,200 ----
  
      case COND_EXPR:
        /* Distribute the conversion into the arms of a COND_EXPR.  */
!       return fold_build3 (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
! 			  java_truthvalue_conversion (TREE_OPERAND (expr, 1)),
! 			  java_truthvalue_conversion (TREE_OPERAND (expr, 2)));
  
      case NOP_EXPR:
        /* If this is widening the argument, we can ignore it.  */
*************** java_truthvalue_conversion (tree expr)
*** 199,206 ****
        /* fall through to default */
  
      default:
!       return fold (build2 (NE_EXPR, boolean_type_node,
! 			   expr, boolean_false_node));
      }
  }
  
--- 204,211 ----
        /* fall through to default */
  
      default:
!       return fold_build2 (NE_EXPR, boolean_type_node,
! 			  expr, boolean_false_node);
      }
  }
  
*************** pop_type_0 (tree type, char **messagep)
*** 344,379 ****
      return t;
    if (TREE_CODE (type) == POINTER_TYPE && TREE_CODE (t) == POINTER_TYPE)
      {
!       if (flag_new_verifier)
! 	{
! 	  /* Since the verifier has already run, we know that any
! 	     types we see will be compatible.  In BC mode, this fact
! 	     may be checked at runtime, but if that is so then we can
! 	     assume its truth here as well.  So, we always succeed
! 	     here, with the expected type.  */
! 	  return type;
! 	}
!       else
! 	{
! 	  if (type == ptr_type_node || type == object_ptr_type_node)
! 	    return t;
! 	  else if (t == ptr_type_node)  /* Special case for null reference. */
! 	    return type;
! 	  /* This is a kludge, but matches what Sun's verifier does.
! 	     It can be tricked, but is safe as long as type errors
! 	     (i.e. interface method calls) are caught at run-time. */
! 	  else if (CLASS_INTERFACE (TYPE_NAME (TREE_TYPE (type))))
! 	    return object_ptr_type_node;
! 	  else if (can_widen_reference_to (t, type))
! 	    return t;
! 	}
      }
  
    if (! flag_verify_invocations && flag_indirect_dispatch
        && t == object_ptr_type_node)
      {
        if (type != ptr_type_node)
! 	warning ("need to insert runtime check for %s", 
  		 xstrdup (lang_printable_name (type, 0)));
        return type;
      }
--- 349,372 ----
      return t;
    if (TREE_CODE (type) == POINTER_TYPE && TREE_CODE (t) == POINTER_TYPE)
      {
!       /* If the expected type we've been passed is object or ptr
! 	 (i.e. void*), the caller needs to know the real type.  */
!       if (type == ptr_type_node || type == object_ptr_type_node)
!         return t;
! 
!       /* Since the verifier has already run, we know that any
! 	 types we see will be compatible.  In BC mode, this fact
! 	 may be checked at runtime, but if that is so then we can
! 	 assume its truth here as well.  So, we always succeed
! 	 here, with the expected type.  */
!       return type;
      }
  
    if (! flag_verify_invocations && flag_indirect_dispatch
        && t == object_ptr_type_node)
      {
        if (type != ptr_type_node)
! 	warning (0, "need to insert runtime check for %s", 
  		 xstrdup (lang_printable_name (type, 0)));
        return type;
      }
*************** can_widen_reference_to (tree source_type
*** 502,508 ****
  			  source_type, target_type);
  
        if (!quiet_flag)
!        warning ("assert: %s is assign compatible with %s", 
  		xstrdup (lang_printable_name (target_type, 0)),
  		xstrdup (lang_printable_name (source_type, 0)));
        /* Punt everything to runtime.  */
--- 495,501 ----
  			  source_type, target_type);
  
        if (!quiet_flag)
!        warning (0, "assert: %s is assign compatible with %s", 
  		xstrdup (lang_printable_name (target_type, 0)),
  		xstrdup (lang_printable_name (source_type, 0)));
        /* Punt everything to runtime.  */
*************** can_widen_reference_to (tree source_type
*** 549,555 ****
  	  if (TYPE_DUMMY (source_type) || TYPE_DUMMY (target_type))
  	    {
  	      if (! quiet_flag)
! 		warning ("assert: %s is assign compatible with %s", 
  			 xstrdup (lang_printable_name (target_type, 0)),
  			 xstrdup (lang_printable_name (source_type, 0)));
  	      return 1;
--- 542,548 ----
  	  if (TYPE_DUMMY (source_type) || TYPE_DUMMY (target_type))
  	    {
  	      if (! quiet_flag)
! 		warning (0, "assert: %s is assign compatible with %s", 
  			 xstrdup (lang_printable_name (target_type, 0)),
  			 xstrdup (lang_printable_name (source_type, 0)));
  	      return 1;
*************** build_java_jsr (int target_pc, int retur
*** 735,741 ****
  {
    tree where =  lookup_label (target_pc);
    tree ret = lookup_label (return_pc);
!   tree ret_label = fold (build1 (ADDR_EXPR, return_address_type_node, ret));
    push_value (ret_label);
    flush_quick_stack ();
    java_add_stmt (build1 (GOTO_EXPR, void_type_node, where));
--- 728,734 ----
  {
    tree where =  lookup_label (target_pc);
    tree ret = lookup_label (return_pc);
!   tree ret_label = fold_build1 (ADDR_EXPR, return_address_type_node, ret);
    push_value (ret_label);
    flush_quick_stack ();
    java_add_stmt (build1 (GOTO_EXPR, void_type_node, where));
*************** build_java_arrayaccess (tree array, tree
*** 902,910 ****
        tree test;
        tree len = convert (unsigned_int_type_node,
  			  build_java_array_length_access (array));
!       test = fold (build2 (GE_EXPR, boolean_type_node, 
! 			   convert (unsigned_int_type_node, index),
! 			   len));
        if (! integer_zerop (test))
  	{
  	  throw = build2 (TRUTH_ANDIF_EXPR, int_type_node, test,
--- 895,903 ----
        tree test;
        tree len = convert (unsigned_int_type_node,
  			  build_java_array_length_access (array));
!       test = fold_build2 (GE_EXPR, boolean_type_node, 
! 			  convert (unsigned_int_type_node, index),
! 			  len);
        if (! integer_zerop (test))
  	{
  	  throw = build2 (TRUTH_ANDIF_EXPR, int_type_node, test,
*************** build_java_arraystore_check (tree array,
*** 1016,1048 ****
     return unchanged.  */
  
  static tree
! build_java_check_indexed_type (tree array_node, tree indexed_type)
  {
-   tree elt_type;
- 
    /* We used to check to see if ARRAY_NODE really had array type.
       However, with the new verifier, this is not necessary, as we know
       that the object will be an array of the appropriate type.  */
  
!   if (flag_new_verifier)
!     return indexed_type;
! 
!   if (!is_array_type_p (TREE_TYPE (array_node)))
!     abort ();
! 
!   elt_type = (TYPE_ARRAY_ELEMENT (TREE_TYPE (TREE_TYPE (array_node))));
! 
!   if (indexed_type == ptr_type_node)
!     return promote_type (elt_type);
! 
!   /* BYTE/BOOLEAN store and load are used for both type */
!   if (indexed_type == byte_type_node && elt_type == boolean_type_node)
!     return boolean_type_node;
! 
!   if (indexed_type != elt_type )
!     abort ();
!   else
!     return indexed_type;
  }
  
  /* newarray triggers a call to _Jv_NewPrimArray. This function should be 
--- 1009,1022 ----
     return unchanged.  */
  
  static tree
! build_java_check_indexed_type (tree array_node ATTRIBUTE_UNUSED,
! 			       tree indexed_type)
  {
    /* We used to check to see if ARRAY_NODE really had array type.
       However, with the new verifier, this is not necessary, as we know
       that the object will be an array of the appropriate type.  */
  
!   return indexed_type;
  }
  
  /* newarray triggers a call to _Jv_NewPrimArray. This function should be 
*************** expand_java_arraystore (tree rhs_type_no
*** 1149,1171 ****
    tree index = pop_value (int_type_node);
    tree array_type, array;
  
!   if (flag_new_verifier)
      {
!       /* If we're processing an `aaload' we might as well just pick
! 	 `Object'.  */
!       if (TREE_CODE (rhs_type_node) == POINTER_TYPE)
! 	{
! 	  array_type = build_java_array_type (object_ptr_type_node, -1);
! 	  rhs_type_node = object_ptr_type_node;
! 	}
!       else
! 	array_type = build_java_array_type (rhs_type_node, -1);
      }
    else
!     array_type = ptr_type_node;
    array = pop_value (array_type);
!   if (flag_new_verifier)
!     array = build1 (NOP_EXPR, promote_type (array_type), array);
  
    rhs_type_node    = build_java_check_indexed_type (array, rhs_type_node);
  
--- 1123,1140 ----
    tree index = pop_value (int_type_node);
    tree array_type, array;
  
!   /* If we're processing an `aaload' we might as well just pick
!      `Object'.  */
!   if (TREE_CODE (rhs_type_node) == POINTER_TYPE)
      {
!       array_type = build_java_array_type (object_ptr_type_node, -1);
!       rhs_type_node = object_ptr_type_node;
      }
    else
!     array_type = build_java_array_type (rhs_type_node, -1);
! 
    array = pop_value (array_type);
!   array = build1 (NOP_EXPR, promote_type (array_type), array);
  
    rhs_type_node    = build_java_check_indexed_type (array, rhs_type_node);
  
*************** expand_java_arrayload (tree lhs_type_nod
*** 1199,1221 ****
    tree array_type;
    tree array_node;
  
!   if (flag_new_verifier)
      {
!       /* If we're processing an `aaload' we might as well just pick
! 	 `Object'.  */
!       if (TREE_CODE (lhs_type_node) == POINTER_TYPE)
! 	{
! 	  array_type = build_java_array_type (object_ptr_type_node, -1);
! 	  lhs_type_node = object_ptr_type_node;
! 	}
!       else
! 	array_type = build_java_array_type (lhs_type_node, -1);
      }
    else
!     array_type = ptr_type_node;
    array_node = pop_value (array_type);
!   if (flag_new_verifier)
!     array_node = build1 (NOP_EXPR, promote_type (array_type), array_node);
  
    index_node = save_expr (index_node);
    array_node = save_expr (array_node);
--- 1168,1184 ----
    tree array_type;
    tree array_node;
  
!   /* If we're processing an `aaload' we might as well just pick
!      `Object'.  */
!   if (TREE_CODE (lhs_type_node) == POINTER_TYPE)
      {
!       array_type = build_java_array_type (object_ptr_type_node, -1);
!       lhs_type_node = object_ptr_type_node;
      }
    else
!     array_type = build_java_array_type (lhs_type_node, -1);
    array_node = pop_value (array_type);
!   array_node = build1 (NOP_EXPR, promote_type (array_type), array_node);
  
    index_node = save_expr (index_node);
    array_node = save_expr (array_node);
*************** expand_java_arrayload (tree lhs_type_nod
*** 1226,1232 ****
  				      lhs_type_node,
  				      index_node);
    if (INTEGRAL_TYPE_P (lhs_type_node) && TYPE_PRECISION (lhs_type_node) <= 32)
!     load_node = fold (build1 (NOP_EXPR, int_type_node, load_node));
    push_value (load_node);
  }
  
--- 1189,1195 ----
  				      lhs_type_node,
  				      index_node);
    if (INTEGRAL_TYPE_P (lhs_type_node) && TYPE_PRECISION (lhs_type_node) <= 32)
!     load_node = fold_build1 (NOP_EXPR, int_type_node, load_node);
    push_value (load_node);
  }
  
*************** expand_load_internal (int index, tree ty
*** 1315,1321 ****
       value into it.  Then we push this new local on the stack.
       Hopefully this all gets optimized out.  */
    copy = build_decl (VAR_DECL, NULL_TREE, type);
!   if (INTEGRAL_TYPE_P (type)
        && TREE_TYPE (copy) != TREE_TYPE (var))
      var = convert (type, var);
    java_add_local_var (copy);
--- 1278,1284 ----
       value into it.  Then we push this new local on the stack.
       Hopefully this all gets optimized out.  */
    copy = build_decl (VAR_DECL, NULL_TREE, type);
!   if ((INTEGRAL_TYPE_P (type) || POINTER_TYPE_P (type))
        && TREE_TYPE (copy) != TREE_TYPE (var))
      var = convert (type, var);
    java_add_local_var (copy);
*************** expand_iinc (unsigned int local_var_inde
*** 1487,1493 ****
    flush_quick_stack ();
    local_var = find_local_variable (local_var_index, int_type_node, pc);
    constant_value = build_int_cst (NULL_TREE, ival);
!   res = fold (build2 (PLUS_EXPR, int_type_node, local_var, constant_value));
    java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (local_var), local_var, res));
    update_aliases (local_var, local_var_index, pc);
  }
--- 1450,1456 ----
    flush_quick_stack ();
    local_var = find_local_variable (local_var_index, int_type_node, pc);
    constant_value = build_int_cst (NULL_TREE, ival);
!   res = fold_build2 (PLUS_EXPR, int_type_node, local_var, constant_value);
    java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (local_var), local_var, res));
    update_aliases (local_var, local_var_index, pc);
  }
*************** build_java_binop (enum tree_code op, tre
*** 1558,1593 ****
      case RSHIFT_EXPR:
        mask = build_int_cst (NULL_TREE,
  			    TYPE_PRECISION (TREE_TYPE (arg1)) - 1);
!       arg2 = fold (build2 (BIT_AND_EXPR, int_type_node, arg2, mask));
        break;
  
      case COMPARE_L_EXPR:  /* arg1 > arg2 ?  1 : arg1 == arg2 ? 0 : -1 */
      case COMPARE_G_EXPR:  /* arg1 < arg2 ? -1 : arg1 == arg2 ? 0 :  1 */
        arg1 = save_expr (arg1);  arg2 = save_expr (arg2);
        {
! 	tree ifexp1 = fold (build2 (op == COMPARE_L_EXPR ? GT_EXPR : LT_EXPR,
! 				    boolean_type_node, arg1, arg2));
! 	tree ifexp2 = fold (build2 (EQ_EXPR, boolean_type_node, arg1, arg2));
! 	tree second_compare = fold (build3 (COND_EXPR, int_type_node,
! 					    ifexp2, integer_zero_node,
! 					    op == COMPARE_L_EXPR
! 					    ? integer_minus_one_node
! 					    : integer_one_node));
! 	return fold (build3 (COND_EXPR, int_type_node, ifexp1,
! 			     op == COMPARE_L_EXPR ? integer_one_node
! 			     : integer_minus_one_node,
! 			     second_compare));
        }
      case COMPARE_EXPR:
        arg1 = save_expr (arg1);  arg2 = save_expr (arg2);
        {
! 	tree ifexp1 = fold (build2 (LT_EXPR, boolean_type_node, arg1, arg2));
! 	tree ifexp2 = fold (build2 (GT_EXPR, boolean_type_node, arg1, arg2));
! 	tree second_compare = fold (build3 (COND_EXPR, int_type_node,
! 					    ifexp2, integer_one_node,
! 					    integer_zero_node));
! 	return fold (build3 (COND_EXPR, int_type_node,
! 			     ifexp1, integer_minus_one_node, second_compare));
        }      
      case TRUNC_DIV_EXPR:
      case TRUNC_MOD_EXPR:
--- 1521,1556 ----
      case RSHIFT_EXPR:
        mask = build_int_cst (NULL_TREE,
  			    TYPE_PRECISION (TREE_TYPE (arg1)) - 1);
!       arg2 = fold_build2 (BIT_AND_EXPR, int_type_node, arg2, mask);
        break;
  
      case COMPARE_L_EXPR:  /* arg1 > arg2 ?  1 : arg1 == arg2 ? 0 : -1 */
      case COMPARE_G_EXPR:  /* arg1 < arg2 ? -1 : arg1 == arg2 ? 0 :  1 */
        arg1 = save_expr (arg1);  arg2 = save_expr (arg2);
        {
! 	tree ifexp1 = fold_build2 (op == COMPARE_L_EXPR ? GT_EXPR : LT_EXPR,
! 				   boolean_type_node, arg1, arg2);
! 	tree ifexp2 = fold_build2 (EQ_EXPR, boolean_type_node, arg1, arg2);
! 	tree second_compare = fold_build3 (COND_EXPR, int_type_node,
! 					   ifexp2, integer_zero_node,
! 					   op == COMPARE_L_EXPR
! 					   ? integer_minus_one_node
! 					   : integer_one_node);
! 	return fold_build3 (COND_EXPR, int_type_node, ifexp1,
! 			    op == COMPARE_L_EXPR ? integer_one_node
! 			    : integer_minus_one_node,
! 			    second_compare);
        }
      case COMPARE_EXPR:
        arg1 = save_expr (arg1);  arg2 = save_expr (arg2);
        {
! 	tree ifexp1 = fold_build2 (LT_EXPR, boolean_type_node, arg1, arg2);
! 	tree ifexp2 = fold_build2 (GT_EXPR, boolean_type_node, arg1, arg2);
! 	tree second_compare = fold_build3 (COND_EXPR, int_type_node,
! 					   ifexp2, integer_one_node,
! 					   integer_zero_node);
! 	return fold_build3 (COND_EXPR, int_type_node,
! 			    ifexp1, integer_minus_one_node, second_compare);
        }      
      case TRUNC_DIV_EXPR:
      case TRUNC_MOD_EXPR:
*************** build_java_binop (enum tree_code op, tre
*** 1618,1624 ****
        break;
      default:  ;
      }
!   return fold (build2 (op, type, arg1, arg2));
  }
  
  static void
--- 1581,1587 ----
        break;
      default:  ;
      }
!   return fold_build2 (op, type, arg1, arg2);
  }
  
  static void
*************** build_field_ref (tree self_value, tree s
*** 1728,1741 ****
  
        tree base_type = promote_type (base_class);
        if (base_type != TREE_TYPE (self_value))
! 	self_value = fold (build1 (NOP_EXPR, base_type, self_value));
!       if (! flag_syntax_only
! 	  && (flag_indirect_dispatch
! 	      /* DECL_FIELD_OFFSET == 0 if we have no reference for
! 		 the field, perhaps because we couldn't find the class
! 		 in which the field is defined.  
! 		 FIXME: We should investigate this.  */
! 	      || DECL_FIELD_OFFSET (field_decl) == 0))
  	{
  	  tree otable_index
  	    = build_int_cst (NULL_TREE, get_symbol_table_index 
--- 1691,1698 ----
  
        tree base_type = promote_type (base_class);
        if (base_type != TREE_TYPE (self_value))
! 	self_value = fold_build1 (NOP_EXPR, base_type, self_value);
!       if (! flag_syntax_only && flag_indirect_dispatch)
  	{
  	  tree otable_index
  	    = build_int_cst (NULL_TREE, get_symbol_table_index 
*************** build_field_ref (tree self_value, tree s
*** 1746,1763 ****
  		      NULL_TREE, NULL_TREE);
  	  tree address;
  
  	  field_offset = fold (convert (sizetype, field_offset));
  	  address 
! 	    = fold (build2 (PLUS_EXPR, 
! 			    build_pointer_type (TREE_TYPE (field_decl)),
! 			    self_value, field_offset));
! 	  return fold (build1 (INDIRECT_REF, TREE_TYPE (field_decl), address));
  	}
  
        self_value = build_java_indirect_ref (TREE_TYPE (TREE_TYPE (self_value)),
  					    self_value, check);
!       return fold (build3 (COMPONENT_REF, TREE_TYPE (field_decl),
! 			   self_value, field_decl, NULL_TREE));
      }
  }
  
--- 1703,1731 ----
  		      NULL_TREE, NULL_TREE);
  	  tree address;
  
+ 	  if (DECL_CONTEXT (field_decl) != output_class)
+ 	    field_offset
+ 	      = build3 (COND_EXPR, TREE_TYPE (field_offset),
+ 			build2 (EQ_EXPR, boolean_type_node,
+ 				field_offset, integer_zero_node),
+ 			build3 (CALL_EXPR, void_type_node, 
+ 				build_address_of (soft_nosuchfield_node),
+ 				build_tree_list (NULL_TREE, otable_index), 
+ 				NULL_TREE),
+ 			field_offset);
+ 	  
  	  field_offset = fold (convert (sizetype, field_offset));
  	  address 
! 	    = fold_build2 (PLUS_EXPR, 
! 			   build_pointer_type (TREE_TYPE (field_decl)),
! 			   self_value, field_offset);
! 	  return fold_build1 (INDIRECT_REF, TREE_TYPE (field_decl), address);
  	}
  
        self_value = build_java_indirect_ref (TREE_TYPE (TREE_TYPE (self_value)),
  					    self_value, check);
!       return fold_build3 (COMPONENT_REF, TREE_TYPE (field_decl),
! 			  self_value, field_decl, NULL_TREE);
      }
  }
  
*************** lookup_label (int pc)
*** 1766,1772 ****
  {
    tree name;
    char buf[32];
!   ASM_GENERATE_INTERNAL_LABEL(buf, "LJpc=", pc);
    name = get_identifier (buf);
    if (IDENTIFIER_LOCAL_VALUE (name))
      return IDENTIFIER_LOCAL_VALUE (name);
--- 1734,1742 ----
  {
    tree name;
    char buf[32];
!   if (pc > highest_label_pc_this_method)
!     highest_label_pc_this_method = pc;
!   ASM_GENERATE_INTERNAL_LABEL(buf, "LJpc=", start_label_pc_this_method + pc);
    name = get_identifier (buf);
    if (IDENTIFIER_LOCAL_VALUE (name))
      return IDENTIFIER_LOCAL_VALUE (name);
*************** expand_compare (enum tree_code condition
*** 1821,1827 ****
  		int target_pc)
  {
    tree target = lookup_label (target_pc);
!   tree cond = fold (build2 (condition, boolean_type_node, value1, value2));
    java_add_stmt 
      (build3 (COND_EXPR, void_type_node, java_truthvalue_conversion (cond),
  	     build1 (GOTO_EXPR, void_type_node, target), 
--- 1791,1797 ----
  		int target_pc)
  {
    tree target = lookup_label (target_pc);
!   tree cond = fold_build2 (condition, boolean_type_node, value1, value2);
    java_add_stmt 
      (build3 (COND_EXPR, void_type_node, java_truthvalue_conversion (cond),
  	     build1 (GOTO_EXPR, void_type_node, target), 
*************** pop_arguments (tree arg_types)
*** 1908,1919 ****
        tree type = TREE_VALUE (arg_types);
        tree arg = pop_value (type);
  
!       /* With the new verifier we simply cast each argument to its
! 	 proper type.  This is needed since we lose type information
! 	 coming out of the verifier.  We also have to do this with the
! 	 old verifier when we pop an integer type that must be
! 	 promoted for the function call.  */
!       if (flag_new_verifier && TREE_CODE (type) == POINTER_TYPE)
  	arg = build1 (NOP_EXPR, type, arg);
        else if (targetm.calls.promote_prototypes (type)
  	       && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)
--- 1878,1888 ----
        tree type = TREE_VALUE (arg_types);
        tree arg = pop_value (type);
  
!       /* We simply cast each argument to its proper type.  This is
! 	 needed since we lose type information coming out of the
! 	 verifier.  We also have to do this when we pop an integer
! 	 type that must be promoted for the function call.  */
!       if (TREE_CODE (type) == POINTER_TYPE)
  	arg = build1 (NOP_EXPR, type, arg);
        else if (targetm.calls.promote_prototypes (type)
  	       && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)
*************** build_known_method_ref (tree method, tre
*** 2050,2056 ****
        if (! flag_indirect_dispatch 
  	  || (! DECL_EXTERNAL (method) && ! TREE_PUBLIC (method)))
  	{
- 	  make_decl_rtl (method);
  	  func = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (method)),
  			 method);
  	}
--- 2019,2024 ----
*************** build_known_method_ref (tree method, tre
*** 2103,2110 ****
  	  method_index++;
  	}
        method_index *= int_size_in_bytes (method_type_node);
!       ref = fold (build2 (PLUS_EXPR, method_ptr_type_node,
! 			  ref, build_int_cst (NULL_TREE, method_index)));
        ref = build1 (INDIRECT_REF, method_type_node, ref);
        func = build3 (COMPONENT_REF, nativecode_ptr_type_node,
  		     ref, lookup_field (&method_type_node, ncode_ident),
--- 2071,2078 ----
  	  method_index++;
  	}
        method_index *= int_size_in_bytes (method_type_node);
!       ref = fold_build2 (PLUS_EXPR, method_ptr_type_node,
! 			 ref, build_int_cst (NULL_TREE, method_index));
        ref = build1 (INDIRECT_REF, method_type_node, ref);
        func = build3 (COMPONENT_REF, nativecode_ptr_type_node,
  		     ref, lookup_field (&method_type_node, ncode_ident),
*************** build_invokevirtual (tree dtable, tree m
*** 2207,2214 ****
  				   size_int (TARGET_VTABLE_USES_DESCRIPTORS));
      }
  
!   func = fold (build2 (PLUS_EXPR, nativecode_ptr_ptr_type_node, dtable,
! 		       convert (nativecode_ptr_ptr_type_node, method_index)));
  
    if (TARGET_VTABLE_USES_DESCRIPTORS)
      func = build1 (NOP_EXPR, nativecode_ptr_type_node, func);
--- 2175,2182 ----
  				   size_int (TARGET_VTABLE_USES_DESCRIPTORS));
      }
  
!   func = fold_build2 (PLUS_EXPR, nativecode_ptr_ptr_type_node, dtable,
! 		      convert (nativecode_ptr_ptr_type_node, method_index));
  
    if (TARGET_VTABLE_USES_DESCRIPTORS)
      func = build1 (NOP_EXPR, nativecode_ptr_type_node, func);
*************** expand_invoke (int opcode, int method_re
*** 2312,2317 ****
--- 2280,2294 ----
    else
      method = lookup_java_method (self_type, method_name, method_signature);
  
+   /* We've found a method in a class other than the one in which it
+      was wanted.  This can happen if, for instance, we're trying to
+      compile invokespecial super.equals().  */
+   if (! flag_verify_invocations
+       && method
+       && ! TYPE_ARRAY_P (self_type)
+       && self_type != DECL_CONTEXT (method))
+     method = NULL_TREE;
+ 
    /* We've found a method in an interface, but this isn't an interface
       call.  */
    if (opcode != OPCODE_invokeinterface
*************** build_jni_stub (tree method)
*** 2513,2520 ****
      method_args = DECL_ARGUMENTS (method);
    else
      method_args = BLOCK_EXPR_DECLS (DECL_FUNCTION_BODY (method));
!   block = build_block (env_var, NULL_TREE, NULL_TREE,
! 		       method_args, NULL_TREE);
    TREE_SIDE_EFFECTS (block) = 1;
    /* When compiling from source we don't set the type of the block,
       because that will prevent patch_return from ever being run.  */
--- 2490,2496 ----
      method_args = DECL_ARGUMENTS (method);
    else
      method_args = BLOCK_EXPR_DECLS (DECL_FUNCTION_BODY (method));
!   block = build_block (env_var, NULL_TREE, method_args, NULL_TREE);
    TREE_SIDE_EFFECTS (block) = 1;
    /* When compiling from source we don't set the type of the block,
       because that will prevent patch_return from ever being run.  */
*************** build_jni_stub (tree method)
*** 2602,2609 ****
    /* If the JNI call returned a result, capture it here.  If we had to
       unwrap JNI object results, we would do that here.  */
    if (res_var != NULL_TREE)
!     call = build2 (MODIFY_EXPR, TREE_TYPE (TREE_TYPE (method)),
! 		   res_var, call);
  
    TREE_SIDE_EFFECTS (call) = 1;
    CAN_COMPLETE_NORMALLY (call) = 1;
--- 2578,2594 ----
    /* If the JNI call returned a result, capture it here.  If we had to
       unwrap JNI object results, we would do that here.  */
    if (res_var != NULL_TREE)
!     {
!       /* If the call returns an object, it may return a JNI weak
! 	 reference, in which case we must unwrap it.  */
!       if (! JPRIMITIVE_TYPE_P (TREE_TYPE (TREE_TYPE (method))))
! 	call = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (method)),
! 		       build_address_of (soft_unwrapjni_node),
! 		       build_tree_list (NULL_TREE, call),
! 		       NULL_TREE);
!       call = build2 (MODIFY_EXPR, TREE_TYPE (TREE_TYPE (method)),
! 		     res_var, call);
!     }
  
    TREE_SIDE_EFFECTS (call) = 1;
    CAN_COMPLETE_NORMALLY (call) = 1;
*************** expand_java_field_op (int is_static, int
*** 2724,2745 ****
        if (FIELD_FINAL (field_decl))
  	{
  	  if (DECL_CONTEXT (field_decl) != current_class)
!             error ("%Jassignment to final field '%D' not in field's class",
!                    field_decl, field_decl);
  	  else if (FIELD_STATIC (field_decl))
  	    {
  	      if (!DECL_CLINIT_P (current_function_decl))
! 		warning ("%Jassignment to final static field %qD not in "
                           "class initializer",
!                          field_decl, field_decl);
  	    }
  	  else
  	    {
  	      tree cfndecl_name = DECL_NAME (current_function_decl);
  	      if (! DECL_CONSTRUCTOR_P (current_function_decl)
  		  && !ID_FINIT_P (cfndecl_name))
!                 warning ("%Jassignment to final field '%D' not in constructor",
! 			 field_decl, field_decl);
  	    }
  	}
        java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (field_ref),
--- 2709,2730 ----
        if (FIELD_FINAL (field_decl))
  	{
  	  if (DECL_CONTEXT (field_decl) != current_class)
!             error ("assignment to final field %q+D not in field's class",
!                    field_decl);
  	  else if (FIELD_STATIC (field_decl))
  	    {
  	      if (!DECL_CLINIT_P (current_function_decl))
! 		warning (0, "assignment to final static field %q+D not in "
                           "class initializer",
!                          field_decl);
  	    }
  	  else
  	    {
  	      tree cfndecl_name = DECL_NAME (current_function_decl);
  	      if (! DECL_CONSTRUCTOR_P (current_function_decl)
  		  && !ID_FINIT_P (cfndecl_name))
!                 warning (0, "assignment to final field %q+D not in constructor",
! 			 field_decl);
  	    }
  	}
        java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (field_ref),
*************** expand_byte_code (JCF *jcf, tree method)
*** 2928,2934 ****
        int pc = GET_u2 (linenumber_pointer);
        linenumber_pointer += 4;
        if (pc >= length)
! 	warning ("invalid PC in line number table");
        else
  	{
  	  if ((instruction_bits[pc] & BCODE_HAS_LINENUMBER) != 0)
--- 2913,2919 ----
        int pc = GET_u2 (linenumber_pointer);
        linenumber_pointer += 4;
        if (pc >= length)
! 	warning (0, "invalid PC in line number table");
        else
  	{
  	  if ((instruction_bits[pc] & BCODE_HAS_LINENUMBER) != 0)
*************** expand_byte_code (JCF *jcf, tree method)
*** 2937,2952 ****
  	}
      }  
  
!   if (flag_new_verifier)
!     {
!       if (! verify_jvm_instructions_new (jcf, byte_ops, length))
!         return;
!     }
!   else
!     {
!       if (! verify_jvm_instructions (jcf, byte_ops, length))
! 	return;
!     }
  
    promote_arguments ();
  
--- 2922,2929 ----
  	}
      }  
  
!   if (! verify_jvm_instructions_new (jcf, byte_ops, length))
!     return;
  
    promote_arguments ();
  
*************** expand_byte_code (JCF *jcf, tree method)
*** 2984,2990 ****
  	    {
                /* We've just reached the end of a region of dead code.  */
  	      if (extra_warnings)
! 		warning ("unreachable bytecode from %d to before %d",
  			 dead_code_index, PC);
                dead_code_index = -1;
              }
--- 2961,2967 ----
  	    {
                /* We've just reached the end of a region of dead code.  */
  	      if (extra_warnings)
! 		warning (0, "unreachable bytecode from %d to before %d",
  			 dead_code_index, PC);
                dead_code_index = -1;
              }
*************** expand_byte_code (JCF *jcf, tree method)
*** 3026,3032 ****
      {
        /* We've just reached the end of a region of dead code.  */
        if (extra_warnings)
! 	warning ("unreachable bytecode from %d to the end of the method", 
  		 dead_code_index);
      }
  }
--- 3003,3009 ----
      {
        /* We've just reached the end of a region of dead code.  */
        if (extra_warnings)
! 	warning (0, "unreachable bytecode from %d to the end of the method", 
  		 dead_code_index);
      }
  }
*************** process_jvm_instruction (int PC, const u
*** 3055,3068 ****
    const char *opname; /* Temporary ??? */
    int oldpc = PC; /* PC at instruction start. */
  
!   /* If the instruction is at the beginning of a exception handler,
!      replace the top of the stack with the thrown object reference */
    if (instruction_bits [PC] & BCODE_EXCEPTION_TARGET)
      {
!       /* Note that the new verifier will not emit a type map at all
! 	 for dead exception handlers.  In this case we just ignore
! 	 the situation.  */
!       if (! flag_new_verifier || (instruction_bits[PC] & BCODE_VERIFIED) != 0)
  	{
  	  tree type = pop_type (promote_type (throwable_type_node));
  	  push_value (build_exception_object_ref (type));
--- 3032,3045 ----
    const char *opname; /* Temporary ??? */
    int oldpc = PC; /* PC at instruction start. */
  
!   /* If the instruction is at the beginning of an exception handler,
!      replace the top of the stack with the thrown object reference.  */
    if (instruction_bits [PC] & BCODE_EXCEPTION_TARGET)
      {
!       /* Note that the verifier will not emit a type map at all for
! 	 dead exception handlers.  In this case we just ignore the
! 	 situation.  */
!       if ((instruction_bits[PC] & BCODE_VERIFIED) != 0)
  	{
  	  tree type = pop_type (promote_type (throwable_type_node));
  	  push_value (build_exception_object_ref (type));
*************** process_jvm_instruction (int PC, const u
*** 3233,3240 ****
    }
  
  #define UNOP(OPERAND_TYPE, OPERAND_VALUE) \
!   push_value (fold (build1 (NEGATE_EXPR, OPERAND_TYPE##_type_node, \
! 			    pop_value (OPERAND_TYPE##_type_node))));
  
  #define CONVERT2(FROM_TYPE, TO_TYPE)					 \
    {									 \
--- 3210,3217 ----
    }
  
  #define UNOP(OPERAND_TYPE, OPERAND_VALUE) \
!   push_value (fold_build1 (NEGATE_EXPR, OPERAND_TYPE##_type_node, \
! 			   pop_value (OPERAND_TYPE##_type_node)));
  
  #define CONVERT2(FROM_TYPE, TO_TYPE)					 \
    {									 \
*************** peek_opcode_at_pc (JCF *jcf, int code_of
*** 3377,3383 ****
  
     This function is used by `give_name_to_locals' so that a local's
     DECL features a DECL_LOCAL_START_PC such that the first related
!    store operation will use DECL as a destination, not a unrelated
     temporary created for the occasion.
  
     This function uses a global (instruction_bits) `note_instructions' should
--- 3354,3360 ----
  
     This function is used by `give_name_to_locals' so that a local's
     DECL features a DECL_LOCAL_START_PC such that the first related
!    store operation will use DECL as a destination, not an unrelated
     temporary created for the occasion.
  
     This function uses a global (instruction_bits) `note_instructions' should
*************** force_evaluation_order (tree node)
*** 3522,3535 ****
  	{
  	  /* Promote types smaller than integer.  This is required by
  	     some ABIs.  */
- 	  tree saved;
  	  tree type = TREE_TYPE (TREE_VALUE (arg));
  	  if (targetm.calls.promote_prototypes (type)
  	      && INTEGRAL_TYPE_P (type)
  	      && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
  				      TYPE_SIZE (integer_type_node)))
! 	    TREE_VALUE (arg) 
! 	      = fold_convert (integer_type_node, TREE_VALUE (arg));
  
  	  saved = save_expr (force_evaluation_order (TREE_VALUE (arg)));
  	  cmp = (cmp == NULL_TREE ? saved :
--- 3499,3511 ----
  	{
  	  /* Promote types smaller than integer.  This is required by
  	     some ABIs.  */
  	  tree type = TREE_TYPE (TREE_VALUE (arg));
+ 	  tree saved;
  	  if (targetm.calls.promote_prototypes (type)
  	      && INTEGRAL_TYPE_P (type)
  	      && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
  				      TYPE_SIZE (integer_type_node)))
! 	    TREE_VALUE (arg) = fold_convert (integer_type_node, TREE_VALUE (arg));
  
  	  saved = save_expr (force_evaluation_order (TREE_VALUE (arg)));
  	  cmp = (cmp == NULL_TREE ? saved :
*************** build_expr_wfl (tree node,
*** 3589,3595 ****
    EXPR_WFL_NODE (wfl) = node;
    if (node)
      {
!       if (IS_NON_TYPE_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (node))))
  	TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
        TREE_TYPE (wfl) = TREE_TYPE (node);
      }
--- 3565,3571 ----
    EXPR_WFL_NODE (wfl) = node;
    if (node)
      {
!       if (!TYPE_P (node))
  	TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
        TREE_TYPE (wfl) = TREE_TYPE (node);
      }
*************** expr_add_location (tree node, source_loc
*** 3625,3631 ****
      EXPR_WFL_EMIT_LINE_NOTE (wfl) = 1;
    if (node)
      {
!       if (IS_NON_TYPE_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (node))))
  	TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
        TREE_TYPE (wfl) = TREE_TYPE (node);
      }
--- 3601,3607 ----
      EXPR_WFL_EMIT_LINE_NOTE (wfl) = 1;
    if (node)
      {
!       if (!TYPE_P (node))
  	TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
        TREE_TYPE (wfl) = TREE_TYPE (node);
      }
diff -Nrcpad gcc-4.0.2/gcc/java/gcj.texi gcc-4.1.0/gcc/java/gcj.texi
*** gcc-4.0.2/gcc/java/gcj.texi	Fri May 13 20:40:34 2005
--- gcc-4.1.0/gcc/java/gcj.texi	Fri Jan  6 21:23:36 2006
***************
*** 2,7 ****
--- 2,14 ----
  @setfilename gcj.info
  @settitle Guide to GNU gcj
  
+ @c Merge the standard indexes into a single one.
+ @syncodeindex fn cp
+ @syncodeindex vr cp
+ @syncodeindex ky cp
+ @syncodeindex pg cp
+ @syncodeindex tp cp
+ 
  @include gcc-common.texi
  
  @c Note: When reading this manual you'll find lots of strange
*************** man page gfdl(7).
*** 89,96 ****
  For the @value{which-gcj} Version*
  @sp 1
  Published by the Free Software Foundation @*
! 59 Temple Place - Suite 330@*
! Boston, MA 02111-1307, USA@*
  @sp 1
  @insertcopying
  @end titlepage
--- 96,103 ----
  For the @value{which-gcj} Version*
  @sp 1
  Published by the Free Software Foundation @*
! 51 Franklin Street, Fifth Floor@*
! Boston, MA 02110-1301, USA@*
  @sp 1
  @insertcopying
  @end titlepage
*************** files and object files, and it can read 
*** 124,129 ****
--- 131,137 ----
  * About CNI::           Description of the Compiled Native Interface
  * System properties::   Modifying runtime behavior of the libgcj library
  * Resources::		Where to look for more information
+ * Index::               Index.
  @end menu
  
  
*************** ABI.  These restrictions will be lifted 
*** 515,520 ****
--- 523,537 ----
  However, if you compile CNI code with the standard ABI, you can call
  it from code built with the binary compatibility ABI.
  
+ @item -fbootstrap-classes
+ This option can be use to tell @code{libgcj} that the compiled classes
+ should be loaded by the bootstrap loader, not the system class loader.
+ By default, if you compile a class and link it into an executable, it
+ will be treated as if it was loaded using the system class loader.
+ This is convenient, as it means that things like
+ @code{Class.forName()} will search @samp{CLASSPATH} to find the
+ desired class.
+ 
  @end table
  
  
*************** Set the initial heap size.
*** 1102,1107 ****
--- 1119,1127 ----
  
  @item -Xmx@var{size}
  Set the maximum heap size.
+ 
+ @item -Xss@var{size}
+ Set the thread stack size.
  @end table
  
  Unrecognized @code{-X} options are ignored, for compatibility with
*************** alternative to the standard JNI (Java Na
*** 1414,1420 ****
  @menu
  * Basic concepts::              Introduction to using CNI@.
  * Packages::                    How packages are mapped to C++.
! * Primitive types::             Handling Java types in C++.
  * Interfaces::                  How Java interfaces map to C++.
  * Objects and Classes::         C++ and Java classes.
  * Class Initialization::        How objects are initialized.
--- 1434,1441 ----
  @menu
  * Basic concepts::              Introduction to using CNI@.
  * Packages::                    How packages are mapped to C++.
! * Primitive types::             Handling primitive Java types in C++.
! * Reference types::             Handling Java reference types in C++.
  * Interfaces::                  How Java interfaces map to C++.
  * Objects and Classes::         C++ and Java classes.
  * Class Initialization::        How objects are initialized.
*************** to avoid disappointment.
*** 1611,1617 ****
  @subsection Reference types associated with primitive types
  
  In Java each primitive type has an associated reference type, 
! e.g.: @code{boolean} has an associated @code{java.lang.Boolean} class.
  In order to make working with such classes easier GCJ provides the macro
  @code{JvPrimClass}:
  
--- 1632,1638 ----
  @subsection Reference types associated with primitive types
  
  In Java each primitive type has an associated reference type, 
! e.g.: @code{boolean} has an associated @code{java.lang.Boolean.TYPE} class.
  In order to make working with such classes easier GCJ provides the macro
  @code{JvPrimClass}:
  
*************** JvPrimClass(void) @result{} java.lang.Vo
*** 1625,1630 ****
--- 1646,1686 ----
  @end deffn
  
  
+ @node Reference types
+ @section Reference types
+ 
+ A Java reference type is treated as a class in C++.  Classes and
+ interfaces are handled this way.  A Java reference is translated to a
+ C++ pointer, so for instance a Java @code{java.lang.String} becomes,
+ in C++, @code{java::lang::String *}.
+ 
+ CNI provides a few built-in typedefs for the most common classes:
+ @multitable @columnfractions .30 .25 .60
+ @item @strong{Java type} @tab @strong{C++ typename} @tab @strong{Description}
+ @item @code{java.lang.Object} @tab @code{jobject} @tab Object type
+ @item @code{java.lang.String} @tab @code{jstring} @tab String type
+ @item @code{java.lang.Class} @tab @code{jclass} @tab Class type
+ @end multitable
+ @cindex jobject
+ @cindex jstring
+ @cindex jclass
+ 
+ Every Java class or interface has a corresponding @code{Class}
+ instance.  These can be accessed in CNI via the static @code{class$}
+ field of a class.  The @code{class$} field is of type @code{Class}
+ (and not @code{Class *}), so you will typically take the address of
+ it.
+ @cindex class$
+ 
+ Here is how you can refer to the class of @code{String}, which in
+ Java would be written @code{String.class}:
+ 
+ @example
+ using namespace java::lang;
+ doSomething (&String::class$);
+ @end example
+ 
+ 
  @node Interfaces
  @section Interfaces
  
*************** management, but this is invisible to the
*** 1684,1690 ****
  reference to the object points to the dispatch table pointer.)
  
  The fields are laid out in the same order, alignment, and size as in
! C++.  Specifically, 8-bite and 16-bit native types (@code{byte},
  @code{short}, @code{char}, and @code{boolean}) are @emph{not} widened
  to 32 bits.  Note that the Java VM does extend 8-bit and 16-bit types
  to 32 bits when on the VM stack or temporary registers.
--- 1740,1746 ----
  reference to the object points to the dispatch table pointer.)
  
  The fields are laid out in the same order, alignment, and size as in
! C++.  Specifically, 8-bit and 16-bit native types (@code{byte},
  @code{short}, @code{char}, and @code{boolean}) are @emph{not} widened
  to 32 bits.  Note that the Java VM does extend 8-bit and 16-bit types
  to 32 bits when on the VM stack or temporary registers.
*************** way.  For example, given the following J
*** 1697,1704 ****
  public class Int
  @{
    public int i;
!   public Integer (int i) @{ this.i = i; @}
!   public static zero = new Integer(0);
  @}
  @end example
  
--- 1753,1760 ----
  public class Int
  @{
    public int i;
!   public Int (int i) @{ this.i = i; @}
!   public static Int zero = new Int(0);
  @}
  @end example
  
*************** it is safe to leave it out).
*** 1768,1774 ****
  
  Accessing a static field also requires the class of the
  field to be initialized.  The Java compiler will generate code
! to call @code{Jv_InitClass} before getting or setting the field.
  However, the C++ compiler will not generate this extra code,
  so it is your responsibility to make sure the class is
  initialized before you access a static field from C++.
--- 1824,1830 ----
  
  Accessing a static field also requires the class of the
  field to be initialized.  The Java compiler will generate code
! to call @code{JvInitClass} before getting or setting the field.
  However, the C++ compiler will not generate this extra code,
  so it is your responsibility to make sure the class is
  initialized before you access a static field from C++.
*************** java::util::Hashtable *ht = new java::ut
*** 1803,1809 ****
  @node Memory allocation
  @section Memory allocation
  
! When allocting memory in @acronym{CNI} methods it is best to handle
  out-of-memory conditions by throwing a Java exception.  These
  functions are provided for that purpose:
  
--- 1859,1865 ----
  @node Memory allocation
  @section Memory allocation
  
! When allocating memory in @acronym{CNI} methods it is best to handle
  out-of-memory conditions by throwing a Java exception.  These
  functions are provided for that purpose:
  
*************** The name of this function may change in 
*** 1884,1893 ****
  
  
  @deftypefun jobjectArray JvNewObjectArray (jsize @var{length}, jclass @var{klass}, jobject @var{init})
! Here @code{klass} is the type of elements of the array and
  @code{init} is the initial value put into every slot in the array.
  @end deftypefun
  
  
  @subsection Creating arrays
  
--- 1940,1956 ----
  
  
  @deftypefun jobjectArray JvNewObjectArray (jsize @var{length}, jclass @var{klass}, jobject @var{init})
! This creates a new array whose elements have reference type.
! @code{klass} is the type of elements of the array and
  @code{init} is the initial value put into every slot in the array.
  @end deftypefun
  
+ @example
+ using namespace java::lang;
+ JArray<String *> *array
+   = (JArray<String *> *) JvNewObjectArray(length, &String::class$, NULL);
+ @end example
+ 
  
  @subsection Creating arrays
  
*************** Enables printing serialization debugging
*** 2640,2646 ****
  string.  Only used when running a debug build of the library.
  
  @item gnu.classpath.vm.shortname
! This is a succint name of the virtual machine.  For @code{libgcj},
  this will always be @samp{libgcj}.
  
  @item gnu.classpath.home.url
--- 2703,2709 ----
  string.  Only used when running a debug build of the library.
  
  @item gnu.classpath.vm.shortname
! This is a succinct name of the virtual machine.  For @code{libgcj},
  this will always be @samp{libgcj}.
  
  @item gnu.classpath.home.url
*************** try to load a class @code{java.net.[impl
*** 2671,2702 ****
  the normal @code{java.net.PlainDatagramSocketImpl}.
  
  @item gnu.gcj.progname
! The name that was used to invoked the program.
! 
! @item gnu.gcj.runtime.NameFinder.demangle
! Whether names in a stack trace should be demangled.  Defaults to @code{true}.
! 
! @item gnu.gcj.runtime.NameFinder.sanitize
! Whether calls to initialize exceptions and starting the runtime system
! should be removed from the stack trace.  Only done when names are
! demangled.  Defaults to @code{true}.
! 
! @item gnu.gcj.runtime.NameFinder.remove_unknown
! Whether calls to unknown functions (class and method names are unknown)
! should be removed from the stack trace.  Only done when the stack is
! sanitized.  Ignored if this means no stack trace information would be
! available anymore.  Defaults to @code{true}.
! 
! @item gnu.gcj.runtime.NameFinder.remove_interpreter
! Whether runtime interpreter calls (methods in the @code{_Jv_InterpMethod} class
! and functions starting with @samp{ffi_}) should be removed from the stack
! trace.  Only done when the stack is sanitized.  Defaults to @code{true}.
! 
  
  @item gnu.gcj.runtime.NameFinder.use_addr2line
! Whether an external process (@command{addr2line} or @command{addr2name.awk})
! should be used as fallback to convert the addresses to function names when
! the runtime is unable to do it through @code{dladdr}.
  
  @item gnu.gcj.runtime.VMClassLoader.library_control
  This controls how shared libraries are automatically loaded by the
--- 2734,2751 ----
  the normal @code{java.net.PlainDatagramSocketImpl}.
  
  @item gnu.gcj.progname
! The class or binary name that was used to invoke the program. This will be
! the name of the "main" class in the case where the @code{gij} front end is
! used, or the program binary name in the case where an application is compiled 
! to a native binary.
  
  @item gnu.gcj.runtime.NameFinder.use_addr2line
! Whether an external process, @command{addr2line}, should be used to determine
! line number information when tracing the stack. Setting this to @code{false} 
! may suppress line numbers when printing stack traces and when using
! the java.util.logging infrastructure. However, performance may improve
! significantly for applications that print stack traces or make logging calls
! frequently.
  
  @item gnu.gcj.runtime.VMClassLoader.library_control
  This controls how shared libraries are automatically loaded by the
*************** a free software Java class library test 
*** 2763,2766 ****
--- 2812,2821 ----
  because the JCK is not free.  See
  @uref{http://sources.redhat.com/mauve/} for more information.
  
+ 
+ @node Index
+ @unnumbered Index
+ 
+ @printindex cp
+ 
  @bye
diff -Nrcpad gcc-4.0.2/gcc/java/gen-table.pl gcc-4.1.0/gcc/java/gen-table.pl
*** gcc-4.0.2/gcc/java/gen-table.pl	Mon Feb 24 02:14:48 2003
--- gcc-4.1.0/gcc/java/gen-table.pl	Sat Jun 25 00:33:05 2005
***************
*** 14,21 ****
  
  #    You should have received a copy of the GNU General Public License
  #    along with this program; if not, write to the Free Software
! #    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! #    02111-1307, USA.
  
  # gen-table.pl - Generate tables for gcj from Unicode data.
  # Usage: perl gen-table.pl DATA-FILE
--- 14,21 ----
  
  #    You should have received a copy of the GNU General Public License
  #    along with this program; if not, write to the Free Software
! #    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
! #    02110-1301, USA.
  
  # gen-table.pl - Generate tables for gcj from Unicode data.
  # Usage: perl gen-table.pl DATA-FILE
diff -Nrcpad gcc-4.0.2/gcc/java/gjavah.c gcc-4.1.0/gcc/java/gjavah.c
*** gcc-4.0.2/gcc/java/gjavah.c	Mon Jun  6 19:20:56 2005
--- gcc-4.1.0/gcc/java/gjavah.c	Sat Jan 21 18:29:08 2006
***************
*** 1,7 ****
  /* Program to write C++-suitable header files from a Java(TM) .class
     file.  This is similar to SUN's javah.
  
! Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
  Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,7 ----
  /* Program to write C++-suitable header files from a Java(TM) .class
     file.  This is similar to SUN's javah.
  
! Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
  Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** GNU General Public License for more deta
*** 18,25 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 18,25 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** static void print_method_info (FILE*, JC
*** 145,151 ****
  static void print_c_decl (FILE*, JCF*, int, int, int, const char *, int);
  static void print_stub_or_jni (FILE*, JCF*, int, int, int, const char *, int);
  static void print_full_cxx_name (FILE*, JCF*, int, int, int, const char *, int);
! static void decompile_method (FILE*, JCF*, int);
  static void add_class_decl (FILE*, JCF*, JCF_u2);
  
  static void print_name (FILE *, JCF *, int);
--- 145,151 ----
  static void print_c_decl (FILE*, JCF*, int, int, int, const char *, int);
  static void print_stub_or_jni (FILE*, JCF*, int, int, int, const char *, int);
  static void print_full_cxx_name (FILE*, JCF*, int, int, int, const char *, int);
! static void decompile_method (FILE*, JCF*, int) ATTRIBUTE_UNUSED;
  static void add_class_decl (FILE*, JCF*, JCF_u2);
  
  static void print_name (FILE *, JCF *, int);
*************** static const unsigned char *
*** 164,170 ****
    decode_signature_piece (FILE *, const unsigned char *,
  			  const unsigned char *, int *);
  static void print_class_decls (FILE *, JCF *, int);
! static void error (const char *gmsgid, ...);
  static void usage (void) ATTRIBUTE_NORETURN;
  static void help (void) ATTRIBUTE_NORETURN;
  static void version (void) ATTRIBUTE_NORETURN;
--- 164,170 ----
    decode_signature_piece (FILE *, const unsigned char *,
  			  const unsigned char *, int *);
  static void print_class_decls (FILE *, JCF *, int);
! static void error (const char *gmsgid, ...) ATTRIBUTE_PRINTF_1;
  static void usage (void) ATTRIBUTE_NORETURN;
  static void help (void) ATTRIBUTE_NORETURN;
  static void version (void) ATTRIBUTE_NORETURN;
*************** static int is_first_data_member = 0;
*** 250,257 ****
--- 250,263 ----
        }									\
    }
  
+ /* Only include byte-code decompilation optimizations for ELF targets
+    since the generated headers are only known to work with ELF weak
+    symbol semnatics. Specifically, these optimizations are known to
+    not work on PE-COFF and possibly others.  */
+ #ifdef OBJECT_FORMAT_ELF
  #define HANDLE_CODE_ATTRIBUTE(MAX_STACK, MAX_LOCALS, CODE_LENGTH)	\
    if (out && method_declared) decompile_method (out, jcf, CODE_LENGTH);
+ #endif
  
  static int decompiled = 0;
  #define HANDLE_END_METHOD()				\
*************** static void
*** 2397,2403 ****
  version (void)
  {
    printf (TOOLNAME " (GCC) %s\n\n", version_string);
!   printf ("Copyright %s 2004 Free Software Foundation, Inc.\n", _("(C)"));
    printf (_("This is free software; see the source for copying conditions.  There is NO\n"
  	    "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"));
    exit (0);
--- 2403,2409 ----
  version (void)
  {
    printf (TOOLNAME " (GCC) %s\n\n", version_string);
!   printf ("Copyright %s 2006 Free Software Foundation, Inc.\n", _("(C)"));
    printf (_("This is free software; see the source for copying conditions.  There is NO\n"
  	    "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"));
    exit (0);
*************** main (int argc, char** argv)
*** 2411,2416 ****
--- 2417,2423 ----
    char *output_file = NULL;
    int emit_dependencies = 0, suppress_output = 0;
    int opt;
+   int local_found_error;
  
    /* Unlock the stdio streams.  */
    unlock_std_streams ();
*************** main (int argc, char** argv)
*** 2558,2569 ****
        exit (1);
      }
  
    for (argi = optind; argi < argc; argi++)
      {
        char *classname = argv[argi];
!       char *current_output_file;
        const char *classfile_name;
  
        if (verbose)
  	printf (_("Processing %s\n"), classname);
        if (! output_file)
--- 2565,2582 ----
        exit (1);
      }
  
+   local_found_error = 0;
    for (argi = optind; argi < argc; argi++)
      {
        char *classname = argv[argi];
!       char *current_output_file = NULL;
        const char *classfile_name;
  
+       /* We reset the error state here so that we can detect errors
+ 	 that occur when processing this file, so the output can be
+ 	 unlinked if need be.  */
+       found_error = 0;
+ 
        if (verbose)
  	printf (_("Processing %s\n"), classname);
        if (! output_file)
*************** main (int argc, char** argv)
*** 2639,2651 ****
        free_method_name_list ();
        process_file (&jcf, out);
        JCF_FINISH (&jcf);
        if (current_output_file != output_file)
  	free (current_output_file);
        jcf_dependency_write ();
      }
  
    if (out != NULL && out != stdout)
      fclose (out);
  
!   return found_error;
  }
--- 2652,2673 ----
        free_method_name_list ();
        process_file (&jcf, out);
        JCF_FINISH (&jcf);
+ 
+       /* If we found an error and we're writing to a real file,
+ 	 delete it.  */
+       if (found_error && ! suppress_output && current_output_file != NULL
+ 	  && strcmp (current_output_file, "-"))
+ 	unlink (current_output_file);
+ 
        if (current_output_file != output_file)
  	free (current_output_file);
        jcf_dependency_write ();
+ 
+       local_found_error |= found_error;
      }
  
    if (out != NULL && out != stdout)
      fclose (out);
  
!   return local_found_error;
  }
diff -Nrcpad gcc-4.0.2/gcc/java/java-except.h gcc-4.1.0/gcc/java/java-except.h
*** gcc-4.0.2/gcc/java/java-except.h	Thu Apr 28 16:35:22 2005
--- gcc-4.1.0/gcc/java/java-except.h	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/java-gimplify.c gcc-4.1.0/gcc/java/java-gimplify.c
*** gcc-4.0.2/gcc/java/java-gimplify.c	Thu Dec  2 16:37:41 2004
--- gcc-4.1.0/gcc/java/java-gimplify.c	Tue Sep  6 15:22:34 2005
*************** GNU General Public License for more deta
*** 15,22 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 15,22 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** java_gimplify_exit_block_expr (tree expr
*** 208,224 ****
    return build1 (GOTO_EXPR, void_type_node, label);
  }
  
- /* This is specific to the bytecode compiler.  If a variable has
-    LOCAL_SLOT_P set, replace an assignment to it with an assignment to
-    the corresponding variable that holds all its aliases.  */
- 
  static tree
  java_gimplify_modify_expr (tree modify_expr)
  {
    tree lhs = TREE_OPERAND (modify_expr, 0);
    tree rhs = TREE_OPERAND (modify_expr, 1);
    tree lhs_type = TREE_TYPE (lhs);
!   
    if (TREE_CODE (lhs) == VAR_DECL
        && DECL_LANG_SPECIFIC (lhs)
        && LOCAL_SLOT_P (lhs)
--- 208,223 ----
    return build1 (GOTO_EXPR, void_type_node, label);
  }
  
  static tree
  java_gimplify_modify_expr (tree modify_expr)
  {
    tree lhs = TREE_OPERAND (modify_expr, 0);
    tree rhs = TREE_OPERAND (modify_expr, 1);
    tree lhs_type = TREE_TYPE (lhs);
! 
!   /* This is specific to the bytecode compiler.  If a variable has
!      LOCAL_SLOT_P set, replace an assignment to it with an assignment
!      to the corresponding variable that holds all its aliases.  */
    if (TREE_CODE (lhs) == VAR_DECL
        && DECL_LANG_SPECIFIC (lhs)
        && LOCAL_SLOT_P (lhs)
*************** java_gimplify_modify_expr (tree modify_e
*** 230,236 ****
  			    new_lhs, new_rhs);
        modify_expr = build1 (NOP_EXPR, lhs_type, modify_expr);
      }
!   
    return modify_expr;
  }
  
--- 229,240 ----
  			    new_lhs, new_rhs);
        modify_expr = build1 (NOP_EXPR, lhs_type, modify_expr);
      }
!   else if (lhs_type != TREE_TYPE (rhs))
!     /* Fix up type mismatches to make legal GIMPLE.  These are
!        generated in several places, in particular null pointer
!        assignment and subclass assignment.  */
!     TREE_OPERAND (modify_expr, 1) = convert (lhs_type, rhs);
! 
    return modify_expr;
  }
  
*************** java_gimplify_block (tree java_block)
*** 281,286 ****
--- 285,291 ----
        outer = BIND_EXPR_BLOCK (outer);
        BLOCK_SUBBLOCKS (outer) = chainon (BLOCK_SUBBLOCKS (outer), block);
      }
+   BLOCK_EXPR_BODY (java_block) = NULL_TREE;
  
    return build3 (BIND_EXPR, TREE_TYPE (java_block), decls, body, block);
  }
*************** java_gimplify_new_array_init (tree exp)
*** 296,302 ****
    HOST_WIDE_INT ilength = java_array_type_length (array_type);
    tree length = build_int_cst (NULL_TREE, ilength);
    tree init = TREE_OPERAND (exp, 0);
!   tree values = CONSTRUCTOR_ELTS (init);
  
    tree array_ptr_type = build_pointer_type (array_type);
    tree tmp = create_tmp_var (array_ptr_type, "array");
--- 301,308 ----
    HOST_WIDE_INT ilength = java_array_type_length (array_type);
    tree length = build_int_cst (NULL_TREE, ilength);
    tree init = TREE_OPERAND (exp, 0);
!   tree value;
!   unsigned HOST_WIDE_INT cnt;
  
    tree array_ptr_type = build_pointer_type (array_type);
    tree tmp = create_tmp_var (array_ptr_type, "array");
*************** java_gimplify_new_array_init (tree exp)
*** 306,312 ****
    int index = 0;
  
    /* FIXME: try to allocate array statically?  */
!   while (values != NULL_TREE)
      {
        /* FIXME: Should use build_java_arrayaccess here, but avoid
  	 bounds checking.  */
--- 312,318 ----
    int index = 0;
  
    /* FIXME: try to allocate array statically?  */
!   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), cnt, value)
      {
        /* FIXME: Should use build_java_arrayaccess here, but avoid
  	 bounds checking.  */
*************** java_gimplify_new_array_init (tree exp)
*** 317,325 ****
  				build4 (ARRAY_REF, element_type, lhs,
  					build_int_cst (NULL_TREE, index++),
  					NULL_TREE, NULL_TREE),
! 				TREE_VALUE (values));
        body = build2 (COMPOUND_EXPR, element_type, body, assignment);
-       values = TREE_CHAIN (values);
      }
  
    return build2 (COMPOUND_EXPR, array_ptr_type, body, tmp);
--- 323,330 ----
  				build4 (ARRAY_REF, element_type, lhs,
  					build_int_cst (NULL_TREE, index++),
  					NULL_TREE, NULL_TREE),
! 				value);
        body = build2 (COMPOUND_EXPR, element_type, body, assignment);
      }
  
    return build2 (COMPOUND_EXPR, array_ptr_type, body, tmp);
diff -Nrcpad gcc-4.0.2/gcc/java/java-tree.h gcc-4.1.0/gcc/java/java-tree.h
*** gcc-4.0.2/gcc/java/java-tree.h	Mon Jun  6 19:20:57 2005
--- gcc-4.1.0/gcc/java/java-tree.h	Thu Dec  8 14:40:48 2005
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** struct JCF;
*** 52,59 ****
        COMPOUND_ASSIGN_P (in EXPR (binop_*))
        LOCAL_CLASS_P (in RECORD_TYPE)
        BLOCK_IS_IMPLICIT (in BLOCK)
!    2: RETURN_MAP_ADJUSTED (in TREE_VEC).
!       QUALIFIED_P (in IDENTIFIER_NODE)
        PRIMARY_P (in EXPR_WITH_FILE_LOCATION)
        MODIFY_EXPR_FROM_INITIALIZATION_P (in MODIFY_EXPR)
        CLASS_METHOD_CHECKED_P (in RECORD_TYPE) 
--- 52,58 ----
        COMPOUND_ASSIGN_P (in EXPR (binop_*))
        LOCAL_CLASS_P (in RECORD_TYPE)
        BLOCK_IS_IMPLICIT (in BLOCK)
!    2: QUALIFIED_P (in IDENTIFIER_NODE)
        PRIMARY_P (in EXPR_WITH_FILE_LOCATION)
        MODIFY_EXPR_FROM_INITIALIZATION_P (in MODIFY_EXPR)
        CLASS_METHOD_CHECKED_P (in RECORD_TYPE) 
*************** struct JCF;
*** 71,77 ****
        IS_CRAFTED_STRING_BUFFER_P (in CALL_EXPR)
        IS_INIT_CHECKED (in SAVE_EXPR)
     6: CAN_COMPLETE_NORMALLY (in statement nodes)
!       OUTER_FIELD_ACCESS_IDENTIFIER_P (in IDENTIFIER_NODE)
  
     Usage of TYPE_LANG_FLAG_?:
     0: CLASS_ACCESS0_GENERATED_P (in RECORD_TYPE)
--- 70,76 ----
        IS_CRAFTED_STRING_BUFFER_P (in CALL_EXPR)
        IS_INIT_CHECKED (in SAVE_EXPR)
     6: CAN_COMPLETE_NORMALLY (in statement nodes)
!       NESTED_FIELD_ACCESS_IDENTIFIER_P (in IDENTIFIER_NODE)
  
     Usage of TYPE_LANG_FLAG_?:
     0: CLASS_ACCESS0_GENERATED_P (in RECORD_TYPE)
*************** struct JCF;
*** 98,112 ****
        CLASS_FINAL (in TYPE_DECL)
        DECL_FINAL (in any decl)
     4: METHOD_SYNCHRONIZED (in FUNCTION_DECL).
-       LABEL_IN_SUBR (in LABEL_DECL)
        CLASS_INTERFACE (in TYPE_DECL)
        FIELD_VOLATILE (int FIELD_DECL)
     5: METHOD_ABSTRACT (in FUNCTION_DECL).
-       LABEL_IS_SUBR_START (in LABEL_DECL)
        CLASS_ABSTRACT (in TYPE_DECL)
        FIELD_TRANSIENT (in FIELD_DECL)
!    6: LABEL_CHANGED (in LABEL_DECL)
!       CLASS_SUPER (in TYPE_DECL, ACC_SUPER flag)
        FIELD_LOCAL_ALIAS (in FIELD_DECL)
     7: DECL_CONSTRUCTOR_P (in FUNCTION_DECL).
        CLASS_STATIC (in TYPE_DECL)
--- 97,108 ----
        CLASS_FINAL (in TYPE_DECL)
        DECL_FINAL (in any decl)
     4: METHOD_SYNCHRONIZED (in FUNCTION_DECL).
        CLASS_INTERFACE (in TYPE_DECL)
        FIELD_VOLATILE (int FIELD_DECL)
     5: METHOD_ABSTRACT (in FUNCTION_DECL).
        CLASS_ABSTRACT (in TYPE_DECL)
        FIELD_TRANSIENT (in FIELD_DECL)
!    6: CLASS_SUPER (in TYPE_DECL, ACC_SUPER flag)
        FIELD_LOCAL_ALIAS (in FIELD_DECL)
     7: DECL_CONSTRUCTOR_P (in FUNCTION_DECL).
        CLASS_STATIC (in TYPE_DECL)
*************** extern int flag_extraneous_semicolon;
*** 182,195 ****
  
  extern int flag_force_classes_archive_check;
  
- /* When nonzero, we emit xref strings. Values of the flag for xref
-    backends are defined in xref.h.  */
- 
- extern int flag_emit_xref;
- 
- /* When doing xrefs, tell when not to fold.   */
- extern int do_not_fold;
- 
  /* Resource name.  */
  extern const char *resource_name;
  
--- 178,183 ----
*************** extern int flag_indirect_dispatch;
*** 227,235 ****
  /* When zero, don't generate runtime array store checks. */
  extern int flag_store_check;
  
- /* When nonzero, use the new bytecode verifier.  */
- extern int flag_new_verifier;
- 
  /* Encoding used for source files.  */
  extern const char *current_encoding;
  
--- 215,220 ----
*************** extern int always_initialize_class_p;
*** 242,247 ****
--- 227,238 ----
  
  extern int flag_verify_invocations;
  
+ /* Largest pc so far in this method that has been passed to lookup_label. */
+ extern int highest_label_pc_this_method;
+ 
+ /* Base value for this method to add to pc to get generated label. */
+ extern int start_label_pc_this_method;
+ 
  typedef struct CPool constant_pool;
  
  #define CONSTANT_ResolvedFlag 16
*************** enum java_tree_index
*** 394,399 ****
--- 385,392 ----
    JTI_SOFT_MULTIANEWARRAY_NODE,
    JTI_SOFT_BADARRAYINDEX_NODE,
    JTI_SOFT_NULLPOINTER_NODE,
+   JTI_SOFT_ABSTRACTMETHOD_NODE,
+   JTI_SOFT_NOSUCHFIELD_NODE,
    JTI_SOFT_CHECKARRAYSTORE_NODE,
    JTI_SOFT_MONITORENTER_NODE,
    JTI_SOFT_MONITOREXIT_NODE,
*************** enum java_tree_index
*** 402,407 ****
--- 395,401 ----
    JTI_SOFT_LOOKUPJNIMETHOD_NODE,
    JTI_SOFT_GETJNIENVNEWFRAME_NODE,
    JTI_SOFT_JNIPOPSYSTEMFRAME_NODE,
+   JTI_SOFT_UNWRAPJNI_NODE,
    JTI_SOFT_FMOD_NODE,
    JTI_SOFT_IDIV_NODE,
    JTI_SOFT_IREM_NODE,
*************** extern GTY(()) tree java_global_trees[JT
*** 653,658 ****
--- 647,656 ----
    java_global_trees[JTI_SOFT_BADARRAYINDEX_NODE]
  #define soft_nullpointer_node \
    java_global_trees[JTI_SOFT_NULLPOINTER_NODE]
+ #define soft_abstractmethod_node \
+   java_global_trees[JTI_SOFT_ABSTRACTMETHOD_NODE]
+ #define soft_nosuchfield_node \
+   java_global_trees[JTI_SOFT_NOSUCHFIELD_NODE]
  #define soft_checkarraystore_node \
    java_global_trees[JTI_SOFT_CHECKARRAYSTORE_NODE]
  #define soft_monitorenter_node \
*************** extern GTY(()) tree java_global_trees[JT
*** 669,674 ****
--- 667,674 ----
    java_global_trees[JTI_SOFT_GETJNIENVNEWFRAME_NODE]
  #define soft_jnipopsystemframe_node \
    java_global_trees[JTI_SOFT_JNIPOPSYSTEMFRAME_NODE]
+ #define soft_unwrapjni_node \
+   java_global_trees[JTI_SOFT_UNWRAPJNI_NODE]
  #define soft_fmod_node \
    java_global_trees[JTI_SOFT_FMOD_NODE]
  #define soft_idiv_node \
*************** extern GTY(()) tree java_global_trees[JT
*** 694,699 ****
--- 694,700 ----
  #define wfl_operator \
    java_global_trees[JTI_WFL_OPERATOR]
  
+ /* The decl for "_Jv_ResolvePoolEntry".  */
  extern GTY(()) tree soft_resolvepoolentry_node;
  
  extern const char *cyclic_inheritance_report;
*************** union lang_tree_node 
*** 732,747 ****
  #define IDENTIFIER_LOCAL_VALUE(NODE)    \
    (((struct lang_identifier *)(NODE))->local_value)
  
! /* Given an identifier NODE, get the corresponding (non-handle) class.
!    For get_identifier ("java.lang.Number"), the result is
!    the struct whose DECL_ASSEMBLER_NAME is "Classjava_lang_Number". */
  #define IDENTIFIER_CLASS_VALUE(NODE) IDENTIFIER_GLOBAL_VALUE(NODE)
  
- /* Given an identifier NODE, get the corresponding handle class.
-    For get_identifier ("java.lang.Number"), the result is
-    the struct whose DECL_ASSEMBLER_NAME is "Hjava_lang_Number". */
- #define IDENTIFIER_HANDLECLASS_VALUE(NODE) ???
- 
  /* Given a signature of a reference (or array) type, or a method, return the
     corresponding type (if one has been allocated).
     Do not use for primitive types, since they may be ambiguous.
--- 733,743 ----
  #define IDENTIFIER_LOCAL_VALUE(NODE)    \
    (((struct lang_identifier *)(NODE))->local_value)
  
! /* Given an identifier NODE, get the corresponding class.
!    E.g. IDENTIFIER_CLASS_VALUE(get_identifier ("java.lang.Number"))
!    is the corresponding RECORD_TYPE. */
  #define IDENTIFIER_CLASS_VALUE(NODE) IDENTIFIER_GLOBAL_VALUE(NODE)
  
  /* Given a signature of a reference (or array) type, or a method, return the
     corresponding type (if one has been allocated).
     Do not use for primitive types, since they may be ambiguous.
*************** union lang_tree_node 
*** 830,835 ****
--- 826,834 ----
  #define DECL_FIXED_CONSTRUCTOR_P(DECL) \
    (DECL_LANG_SPECIFIC(DECL)->u.f.fixed_ctor)
  
+ #define DECL_LOCAL_CNI_METHOD_P(NODE) \
+     (DECL_LANG_SPECIFIC (NODE)->u.f.local_cni)
+ 
  /* A constructor that calls this. */
  #define DECL_INIT_CALLS_THIS(DECL) \
    (DECL_LANG_SPECIFIC(DECL)->u.f.init_calls_this)
*************** union lang_tree_node 
*** 850,903 ****
  #define FIELD_THISN(DECL) DECL_LANG_FLAG_7 (VAR_OR_FIELD_CHECK (DECL))
  
  /* In a LABEL_DECL, a TREE_VEC that saves the type_map at that point. */
! #define LABEL_TYPE_STATE(NODE) (DECL_INITIAL (LABEL_DECL_CHECK (NODE)))
! 
! /* In the label of a subroutine, a dummy label that records the
!    state following a merge of all the ret instructions in this subroutine. */
! #define LABEL_RETURN_LABEL(DECL) DECL_ARGUMENTS(DECL)
! 
! /* In the label of a sub-routine, records the type state at return.
!    A local may be TYPE_UNUSED, which means that the local is not
!    used (stored to or loaded from) in this subroutine - at least for
!    code that we have verified so far. */
! #define LABEL_RETURN_TYPE_STATE(NODE) \
!   LABEL_TYPE_STATE (LABEL_RETURN_LABEL (NODE))
! 
! /* In a TREE_VEC for a LABEL_RETURN_TYPE_STATE, notes that
!    TREE_VEC_LENGTH has been adjusted to the correct stack size. */
! #define RETURN_MAP_ADJUSTED(NODE) TREE_LANG_FLAG_2 (TREE_VEC_CHECK (NODE))
! 
! /* In the label of a sub-routine, a chain of the return location labels. */
! #define LABEL_RETURN_LABELS(node) \
!   (LABEL_DECL_CHECK (LABEL_RETURN_LABEL (node))->decl.result)
! 
! /* In a LABEL_DECL, the next pending label.
!    See pending_blocks in expr.c. */
! #define LABEL_PENDING_CHAIN(NODE) (LABEL_DECL_CHECK (NODE)->decl.result)
  
  /* In a LABEL_DECL, the corresponding bytecode program counter. */
! #define LABEL_PC(NODE) (LABEL_DECL_CHECK (NODE)->decl.u2.i)
! 
! /* Used during verification to mark the label has "changed". (See JVM Spec). */
! #define LABEL_CHANGED(NODE) DECL_LANG_FLAG_6 (LABEL_DECL_CHECK (NODE))
  
  /* In a LABEL_DECL, true if we have verified instructions starting here. */
  #define LABEL_VERIFIED(NODE) \
    (instruction_bits[LABEL_PC (NODE)] & BCODE_VERIFIED)
  
- /* True if this code is within a subroutine (target of a jsr). */
- #define LABEL_IN_SUBR(NODE) DECL_LANG_FLAG_4 (LABEL_DECL_CHECK (NODE))
- /* True if this code is the start of a subroutine (target of a jsr). */
- #define LABEL_IS_SUBR_START(NODE) DECL_LANG_FLAG_5 (LABEL_DECL_CHECK (NODE))
- 
- /* In a LABEL_DECL, if LABEL_IN_SUBR(NODE), points to start of subroutine. */
- #define LABEL_SUBR_START(NODE) DECL_ABSTRACT_ORIGIN (LABEL_DECL_CHECK (NODE))
- 
- /* In a LABEL_DECL that has LABEL_IS_SUBR_START, this points to the start
-    of surrounding subroutine in the case of a nested subroutine,
-    and NULL_TREE otherwise. */
- #define LABEL_SUBR_CONTEXT(NODE) DECL_CONTEXT (LABEL_RETURN_LABEL (NODE))
- 
  /* The slot number for this local variable. */
  #define DECL_LOCAL_SLOT_NUMBER(NODE) \
    (DECL_LANG_SPECIFIC (NODE)->u.v.slot_number)
--- 849,863 ----
  #define FIELD_THISN(DECL) DECL_LANG_FLAG_7 (VAR_OR_FIELD_CHECK (DECL))
  
  /* In a LABEL_DECL, a TREE_VEC that saves the type_map at that point. */
! #define LABEL_TYPE_STATE(NODE) (LABEL_DECL_CHECK (NODE)->label_decl.java_field_1)
  
  /* In a LABEL_DECL, the corresponding bytecode program counter. */
! #define LABEL_PC(NODE) (LABEL_DECL_CHECK (NODE)->label_decl.java_field_4)
  
  /* In a LABEL_DECL, true if we have verified instructions starting here. */
  #define LABEL_VERIFIED(NODE) \
    (instruction_bits[LABEL_PC (NODE)] & BCODE_VERIFIED)
  
  /* The slot number for this local variable. */
  #define DECL_LOCAL_SLOT_NUMBER(NODE) \
    (DECL_LANG_SPECIFIC (NODE)->u.v.slot_number)
*************** union lang_tree_node 
*** 905,920 ****
  #define DECL_LOCAL_START_PC(NODE)  (DECL_LANG_SPECIFIC (NODE)->u.v.start_pc)
  /* The end (bytecode) pc for the valid range of this local variable. */
  #define DECL_LOCAL_END_PC(NODE)    (DECL_LANG_SPECIFIC (NODE)->u.v.end_pc)
! /* For a VAR_DECLor PARM_DECL, used to chain decls with the same
     slot_number in decl_map. */
  #define DECL_LOCAL_SLOT_CHAIN(NODE) (DECL_LANG_SPECIFIC(NODE)->u.v.slot_chain)
  /* For a FIELD_DECL, holds the name of the access method. Used to
!    read/write the content of the field from an inner class.  */
! #define FIELD_INNER_ACCESS(DECL) \
    (DECL_LANG_SPECIFIC (VAR_OR_FIELD_CHECK (DECL))->u.v.am)
! /* Safely tests whether FIELD_INNER_ACCESS exists or not. */
! #define FIELD_INNER_ACCESS_P(DECL) \
!   DECL_LANG_SPECIFIC (DECL) && FIELD_INNER_ACCESS (DECL)
  /* True if a final field was initialized upon its declaration
     or in an initializer.  Set after definite assignment.  */
  #define DECL_FIELD_FINAL_IUD(NODE)  (DECL_LANG_SPECIFIC (NODE)->u.v.final_iud)
--- 865,880 ----
  #define DECL_LOCAL_START_PC(NODE)  (DECL_LANG_SPECIFIC (NODE)->u.v.start_pc)
  /* The end (bytecode) pc for the valid range of this local variable. */
  #define DECL_LOCAL_END_PC(NODE)    (DECL_LANG_SPECIFIC (NODE)->u.v.end_pc)
! /* For a VAR_DECL or PARM_DECL, used to chain decls with the same
     slot_number in decl_map. */
  #define DECL_LOCAL_SLOT_CHAIN(NODE) (DECL_LANG_SPECIFIC(NODE)->u.v.slot_chain)
  /* For a FIELD_DECL, holds the name of the access method. Used to
!    read/write the content of the field across nested class boundaries.  */
! #define FIELD_NESTED_ACCESS(DECL) \
    (DECL_LANG_SPECIFIC (VAR_OR_FIELD_CHECK (DECL))->u.v.am)
! /* Safely tests whether FIELD_NESTED_ACCESS exists or not.  */
! #define FIELD_NESTED_ACCESS_P(DECL) \
!   DECL_LANG_SPECIFIC (DECL) && FIELD_NESTED_ACCESS (DECL)
  /* True if a final field was initialized upon its declaration
     or in an initializer.  Set after definite assignment.  */
  #define DECL_FIELD_FINAL_IUD(NODE)  (DECL_LANG_SPECIFIC (NODE)->u.v.final_iud)
*************** union lang_tree_node 
*** 943,948 ****
--- 903,914 ----
      (DECL_LANG_SPECIFIC (NODE)->u.v.freed)
  #define LOCAL_SLOT_P(NODE) \
      (DECL_LANG_SPECIFIC (NODE)->u.v.local_slot)
+ 
+ #define DECL_CLASS_FIELD_P(NODE) \
+     (DECL_LANG_SPECIFIC (NODE)->u.v.class_field)
+ #define DECL_VTABLE_P(NODE) \
+     (DECL_LANG_SPECIFIC (NODE)->u.v.vtable)
+ 
  /* Create a DECL_LANG_SPECIFIC if necessary. */
  #define MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC(T)			\
    if (DECL_LANG_SPECIFIC (T) == NULL)				\
*************** union lang_tree_node 
*** 963,969 ****
     that specifies if this decl is definitively assigned.
     The value -1 means the variable has been definitely assigned (and not
     definitely unassigned).  The value -2 means we already reported an error. */
! #define DECL_BIT_INDEX(DECL) VAR_OR_FIELD_CHECK (DECL)->decl.pointer_alias_set
  
  /* DECL_LANG_SPECIFIC for FUNCTION_DECLs. */
  struct lang_decl_func GTY(())
--- 929,935 ----
     that specifies if this decl is definitively assigned.
     The value -1 means the variable has been definitely assigned (and not
     definitely unassigned).  The value -2 means we already reported an error. */
! #define DECL_BIT_INDEX(DECL) VAR_OR_FIELD_CHECK (DECL)->decl_common.pointer_alias_set
  
  /* DECL_LANG_SPECIFIC for FUNCTION_DECLs. */
  struct lang_decl_func GTY(())
*************** struct lang_decl_func GTY(())
*** 1005,1011 ****
    unsigned int invisible : 1;	/* Set for methods we generate
  				   internally but which shouldn't be
  				   written to the .class file.  */
!   unsigned int dummy:1;		
  };
  
  struct treetreehash_entry GTY(())
--- 971,978 ----
    unsigned int invisible : 1;	/* Set for methods we generate
  				   internally but which shouldn't be
  				   written to the .class file.  */
!   unsigned int dummy : 1;
!   unsigned int local_cni : 1;	/* Decl needs mangle_local_cni_method.  */
  };
  
  struct treetreehash_entry GTY(())
*************** struct lang_decl_var GTY(())
*** 1049,1054 ****
--- 1016,1023 ----
    unsigned int cif : 1;		/* True: decl is a class initialization flag */
    unsigned int freed : 1;		/* Decl is no longer in scope.  */
    unsigned int local_slot : 1;	/* Decl is a temporary in the stack frame.  */
+   unsigned int class_field : 1; /* Decl needs mangle_class_field.  */
+   unsigned int vtable : 1;	/* Decl needs mangle_vtable.  */
  };
  
  /* This is what 'lang_decl' really points to.  */
*************** struct lang_decl GTY(())
*** 1111,1116 ****
--- 1080,1086 ----
  
  #define TYPE_TO_RUNTIME_MAP(T)   (TYPE_LANG_SPECIFIC (T)->type_to_runtime_map)
  #define TYPE_ASSERTIONS(T)   	 (TYPE_LANG_SPECIFIC (T)->type_assertions)
+ #define TYPE_PACKAGE(T)     	 (TYPE_LANG_SPECIFIC (T)->package)
  
  struct lang_type GTY(())
  {
*************** struct lang_type GTY(())
*** 1159,1164 ****
--- 1129,1137 ----
  				/* Table of type assertions to be evaluated 
    				   by the runtime when this class is loaded. */
  
+   tree package;			/* IDENTIFIER_NODE for package this class is
+   				   a member of.  */
+ 
    unsigned pic:1;		/* Private Inner Class. */
    unsigned poic:1;		/* Protected Inner Class. */
    unsigned strictfp:1;		/* `strictfp' class.  */
*************** extern tree build_result_decl (tree);
*** 1298,1304 ****
  extern void set_method_index (tree decl, tree method_index);
  extern tree get_method_index (tree decl);
  extern void make_class_data (tree);
- extern void register_class (void);
  extern int alloc_name_constant (int, tree);
  extern int alloc_constant_fieldref (tree, tree);
  extern void emit_register_classes (tree *);
--- 1271,1276 ----
*************** extern tree emit_symbol_table (tree, tre
*** 1306,1312 ****
  extern void lang_init_source (int);
  extern void write_classfile (tree);
  extern char *print_int_node (tree);
- extern void parse_error_context (tree cl, const char *gmsgid, ...);
  extern void finish_class (void);
  extern void java_layout_seen_class_methods (void);
  extern void check_for_initialization (tree, tree);
--- 1278,1283 ----
*************** extern void init_class_processing (void)
*** 1321,1327 ****
  extern void add_type_assertion (tree, int, tree, tree);
  extern int can_widen_reference_to (tree, tree);
  extern int class_depth (tree);
- extern int verify_jvm_instructions (struct JCF *, const unsigned char *, long);
  extern int verify_jvm_instructions_new (struct JCF *, const unsigned char *,
  					long);
  extern void maybe_pushlevels (int);
--- 1292,1297 ----
*************** extern void init_jcf_parse (void);
*** 1380,1386 ****
  extern void init_src_parse (void);
  
  extern int cxx_keyword_p (const char *, int);
! extern tree java_mangle_decl (struct obstack *, tree);
  extern tree java_mangle_class_field (struct obstack *, tree);
  extern tree java_mangle_vtable (struct obstack *, tree);
  extern void append_gpp_mangled_name (const char *, int);
--- 1350,1356 ----
  extern void init_src_parse (void);
  
  extern int cxx_keyword_p (const char *, int);
! extern void java_mangle_decl (tree);
  extern tree java_mangle_class_field (struct obstack *, tree);
  extern tree java_mangle_vtable (struct obstack *, tree);
  extern void append_gpp_mangled_name (const char *, int);
*************** extern tree *type_map;
*** 1690,1698 ****
  /* True if NODE (a statement) can complete normally. */
  #define CAN_COMPLETE_NORMALLY(NODE) TREE_LANG_FLAG_6 (NODE)
  
! /* True if NODE (an IDENTIFIER) bears the name of a outer field from
!    inner class access function.  */
! #define OUTER_FIELD_ACCESS_IDENTIFIER_P(NODE) \
    TREE_LANG_FLAG_6 (IDENTIFIER_NODE_CHECK (NODE))
  
  /* True if NODE belongs to an inner class TYPE_DECL node.
--- 1660,1668 ----
  /* True if NODE (a statement) can complete normally. */
  #define CAN_COMPLETE_NORMALLY(NODE) TREE_LANG_FLAG_6 (NODE)
  
! /* True if NODE (an IDENTIFIER) bears the name of an outer field from
!    inner class (or vice versa) access function.  */
! #define NESTED_FIELD_ACCESS_IDENTIFIER_P(NODE) \
    TREE_LANG_FLAG_6 (IDENTIFIER_NODE_CHECK (NODE))
  
  /* True if NODE belongs to an inner class TYPE_DECL node.
*************** extern tree *type_map;
*** 1700,1711 ****
  #define INNER_CLASS_DECL_P(NODE) (TYPE_NAME (TREE_TYPE (NODE)) == NODE	\
  				  && DECL_CONTEXT (NODE))
  
! /* True if NODE is an top level class TYPE_DECL node: NODE isn't
     an inner class or NODE is a static class.  */
  #define TOPLEVEL_CLASS_DECL_P(NODE) (!INNER_CLASS_DECL_P (NODE) 	\
  				     || CLASS_STATIC (NODE))
  
! /* True if the class decl NODE was declared in a inner scope and is
     not a toplevel class */
  #define PURE_INNER_CLASS_DECL_P(NODE) \
    (INNER_CLASS_DECL_P (NODE) && !CLASS_STATIC (NODE))
--- 1670,1681 ----
  #define INNER_CLASS_DECL_P(NODE) (TYPE_NAME (TREE_TYPE (NODE)) == NODE	\
  				  && DECL_CONTEXT (NODE))
  
! /* True if NODE is a top level class TYPE_DECL node: NODE isn't
     an inner class or NODE is a static class.  */
  #define TOPLEVEL_CLASS_DECL_P(NODE) (!INNER_CLASS_DECL_P (NODE) 	\
  				     || CLASS_STATIC (NODE))
  
! /* True if the class decl NODE was declared in an inner scope and is
     not a toplevel class */
  #define PURE_INNER_CLASS_DECL_P(NODE) \
    (INNER_CLASS_DECL_P (NODE) && !CLASS_STATIC (NODE))
*************** extern tree *type_map;
*** 1718,1724 ****
  #define TOPLEVEL_CLASS_TYPE_P(NODE) (!INNER_CLASS_TYPE_P (NODE) 	\
  				     || CLASS_STATIC (TYPE_NAME (NODE)))
  
! /* True if the class type NODE was declared in a inner scope and is
     not a toplevel class */
  #define PURE_INNER_CLASS_TYPE_P(NODE) \
    (INNER_CLASS_TYPE_P (NODE) && !CLASS_STATIC (TYPE_NAME (NODE)))
--- 1688,1694 ----
  #define TOPLEVEL_CLASS_TYPE_P(NODE) (!INNER_CLASS_TYPE_P (NODE) 	\
  				     || CLASS_STATIC (TYPE_NAME (NODE)))
  
! /* True if the class type NODE was declared in an inner scope and is
     not a toplevel class */
  #define PURE_INNER_CLASS_TYPE_P(NODE) \
    (INNER_CLASS_TYPE_P (NODE) && !CLASS_STATIC (TYPE_NAME (NODE)))
*************** extern tree *type_map;
*** 1755,1795 ****
  #define FINISH_RECORD(RTYPE) layout_type (RTYPE)
  
  /* Start building a RECORD_TYPE constructor with a given TYPE in CONS. */
! #define START_RECORD_CONSTRUCTOR(CONS, CTYPE)	\
! { CONS = build_constructor ((CTYPE), NULL_TREE);	\
!   TREE_CHAIN (CONS) = TYPE_FIELDS (CTYPE); }
  
  /* Append a field initializer to CONS for the dummy field for the inherited
     fields.  The dummy field has the given VALUE, and the same type as the
     super-class.   Must be specified before calls to PUSH_FIELD_VALUE. */
! #define PUSH_SUPER_VALUE(CONS, VALUE)			\
! {							\
!   tree _field = TREE_CHAIN (CONS);			\
!   if (DECL_NAME (_field) != NULL_TREE)			\
!     abort ();						\
!   CONSTRUCTOR_ELTS (CONS)				\
!     = tree_cons (_field, (VALUE), CONSTRUCTOR_ELTS (CONS)); \
!   TREE_CHAIN (CONS) = TREE_CHAIN (_field);		\
! }
  
  /* Append a field initializer to CONS for a field with the given VALUE.
     NAME is a char* string used for error checking;
     the initializer must be specified in order. */
  #define PUSH_FIELD_VALUE(CONS, NAME, VALUE) 				\
! do									\
! {									\
!   tree _field = TREE_CHAIN (CONS);					\
!   if (strcmp (IDENTIFIER_POINTER (DECL_NAME (_field)), NAME) != 0) 	\
!     abort ();								\
!   CONSTRUCTOR_ELTS (CONS)						\
!     = tree_cons (_field, (VALUE), CONSTRUCTOR_ELTS (CONS));		\
!   TREE_CHAIN (CONS) = TREE_CHAIN (_field); 				\
! }									\
! while (0)
  
  /* Finish creating a record CONSTRUCTOR CONS. */
  #define FINISH_RECORD_CONSTRUCTOR(CONS) \
!   CONSTRUCTOR_ELTS(CONS) = nreverse (CONSTRUCTOR_ELTS (CONS))
  
  /* Macros on constructors invocations.  */
  #define CALL_CONSTRUCTOR_P(NODE)		\
--- 1725,1773 ----
  #define FINISH_RECORD(RTYPE) layout_type (RTYPE)
  
  /* Start building a RECORD_TYPE constructor with a given TYPE in CONS. */
! #define START_RECORD_CONSTRUCTOR(CONS, CTYPE) \
!   do \
!     { \
!       CONS = build_constructor ((CTYPE), VEC_alloc (constructor_elt, gc, 0)); \
!       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (CONS), TYPE_FIELDS (CTYPE), \
! 			      NULL); \
!     } \
!   while (0)
  
  /* Append a field initializer to CONS for the dummy field for the inherited
     fields.  The dummy field has the given VALUE, and the same type as the
     super-class.   Must be specified before calls to PUSH_FIELD_VALUE. */
! #define PUSH_SUPER_VALUE(CONS, VALUE) \
!   do \
!     { \
!       constructor_elt *_elt___ = VEC_last (constructor_elt, \
! 					   CONSTRUCTOR_ELTS (CONS)); \
!       tree _next___ = TREE_CHAIN (_elt___->index); \
!       gcc_assert (!DECL_NAME (_elt___->index)); \
!       _elt___->value = VALUE; \
!       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (CONS), _next___, NULL); \
!     } \
!   while (0)
  
  /* Append a field initializer to CONS for a field with the given VALUE.
     NAME is a char* string used for error checking;
     the initializer must be specified in order. */
  #define PUSH_FIELD_VALUE(CONS, NAME, VALUE) 				\
!   do \
!     { \
!       constructor_elt *_elt___ = VEC_last (constructor_elt, \
! 					   CONSTRUCTOR_ELTS (CONS)); \
!       tree _next___ = TREE_CHAIN (_elt___->index); \
!       gcc_assert (strcmp (IDENTIFIER_POINTER (DECL_NAME (_elt___->index)), \
! 			  NAME) == 0); \
!       _elt___->value = VALUE; \
!       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (CONS), _next___, NULL); \
!     } \
!   while (0)
  
  /* Finish creating a record CONSTRUCTOR CONS. */
  #define FINISH_RECORD_CONSTRUCTOR(CONS) \
!   VEC_pop (constructor_elt, CONSTRUCTOR_ELTS (CONS))
  
  /* Macros on constructors invocations.  */
  #define CALL_CONSTRUCTOR_P(NODE)		\
*************** enum
*** 1899,1906 ****
  #define EXPR_WFL_LINECOL(NODE) ((NODE)->exp.locus)
  #define EXPR_WFL_FILENAME(NODE) EXPR_FILENAME (NODE)
  #define EXPR_WFL_LINENO(NODE) EXPR_LINENO (NODE)
! extern tree build_expr_wfl              PARAMS ((tree, source_location));
! extern tree expr_add_location           PARAMS ((tree, source_location, bool));
  #define build_unknown_wfl(NODE) build_expr_wfl(NODE, UNKNOWN_LOCATION)
  #else
  #define EXPR_WFL_LINECOL(NODE) (EXPR_CHECK (NODE)->exp.complexity)
--- 1877,1884 ----
  #define EXPR_WFL_LINECOL(NODE) ((NODE)->exp.locus)
  #define EXPR_WFL_FILENAME(NODE) EXPR_FILENAME (NODE)
  #define EXPR_WFL_LINENO(NODE) EXPR_LINENO (NODE)
! extern tree build_expr_wfl (tree, source_location);
! extern tree expr_add_location (tree, source_location, bool);
  #define build_unknown_wfl(NODE) build_expr_wfl(NODE, UNKNOWN_LOCATION)
  #else
  #define EXPR_WFL_LINECOL(NODE) (EXPR_CHECK (NODE)->exp.complexity)
*************** extern tree expr_add_location           
*** 1915,1926 ****
  #define EXPR_WFL_SET_LINECOL(NODE, LINE, COL) \
    (EXPR_WFL_LINECOL(NODE) = ((LINE) << 12) | ((COL) & 0xfff))
  
! extern tree build_expr_wfl              PARAMS ((tree, const char *, int, int));
  #define build_unknown_wfl(NODE) build_expr_wfl(NODE, NULL, 0, 0)
  #endif
  
! extern void java_genericize		PARAMS ((tree));
! extern int java_gimplify_expr		PARAMS ((tree *, tree *, tree *));
  
  extern tree extract_field_decl (tree);
  
--- 1893,1904 ----
  #define EXPR_WFL_SET_LINECOL(NODE, LINE, COL) \
    (EXPR_WFL_LINECOL(NODE) = ((LINE) << 12) | ((COL) & 0xfff))
  
! extern tree build_expr_wfl (tree, const char *, int, int);
  #define build_unknown_wfl(NODE) build_expr_wfl(NODE, NULL, 0, 0)
  #endif
  
! extern void java_genericize (tree);
! extern int java_gimplify_expr (tree *, tree *, tree *);
  
  extern tree extract_field_decl (tree);
  
diff -Nrcpad gcc-4.0.2/gcc/java/javaop.def gcc-4.1.0/gcc/java/javaop.def
*** gcc-4.0.2/gcc/java/javaop.def	Wed Jan  1 15:10:01 2003
--- gcc-4.1.0/gcc/java/javaop.def	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/javaop.h gcc-4.1.0/gcc/java/javaop.h
*** gcc-4.0.2/gcc/java/javaop.h	Fri Mar 21 17:10:02 2003
--- gcc-4.1.0/gcc/java/javaop.h	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/jcf-depend.c gcc-4.1.0/gcc/java/jcf-depend.c
*** gcc-4.0.2/gcc/java/jcf-depend.c	Sun Jan 12 02:14:55 2003
--- gcc-4.1.0/gcc/java/jcf-depend.c	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/jcf-dump.c gcc-4.1.0/gcc/java/jcf-dump.c
*** gcc-4.0.2/gcc/java/jcf-dump.c	Tue Apr 26 00:30:22 2005
--- gcc-4.1.0/gcc/java/jcf-dump.c	Sat Jan 21 18:29:08 2006
***************
*** 1,8 ****
  /* Program to dump out a Java(TM) .class file.
     Functionally similar to Sun's javap.
  
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,8 ----
  /* Program to dump out a Java(TM) .class file.
     Functionally similar to Sun's javap.
  
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
!    2006 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** GNU General Public License for more deta
*** 18,25 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 18,25 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** The Free Software Foundation is independ
*** 65,71 ****
  #include <getopt.h>
  #include <math.h>
  
! /* Outout file. */
  FILE *out;
  /* Name of output file, if NULL if stdout. */
  char *output_file = NULL;
--- 65,71 ----
  #include <getopt.h>
  #include <math.h>
  
! /* Output file. */
  FILE *out;
  /* Name of output file, if NULL if stdout. */
  char *output_file = NULL;
*************** utf8_equal_string (JCF *jcf, int index, 
*** 320,327 ****
        if (flag_print_class_info)					    \
  	{								    \
  	  fprintf (out, "\n  inner: ");					    \
! 	  print_constant_terse_with_index (out, jcf,			    \
! 				inner_class_info_index, CONSTANT_Class);    \
  	  if (inner_name_index == 0)					    \
  	    fprintf (out, " (anonymous)");				    \
  	  else if (verbose || flag_print_constant_pool)			    \
--- 320,331 ----
        if (flag_print_class_info)					    \
  	{								    \
  	  fprintf (out, "\n  inner: ");					    \
! 	  if (inner_class_info_index == 0)				    \
! 	    fprintf (out, " (no inner info index)");			    \
! 	  else								    \
! 	    print_constant_terse_with_index (out, jcf,			    \
! 					     inner_class_info_index,	    \
! 					     CONSTANT_Class);		    \
  	  if (inner_name_index == 0)					    \
  	    fprintf (out, " (anonymous)");				    \
  	  else if (verbose || flag_print_constant_pool)			    \
*************** utf8_equal_string (JCF *jcf, int index, 
*** 334,347 ****
  	  fprintf (out, ", access flags: 0x%x", inner_class_access_flags);  \
  	  print_access_flags (out, inner_class_access_flags, 'c');	    \
  	  fprintf (out, ", outer class: ");				    \
! 	  print_constant_terse_with_index (out, jcf,			    \
! 				outer_class_info_index, CONSTANT_Class);    \
  	}								    \
      }									    \
!       if (flag_print_class_info)					    \
! 	fputc ('\n', out);						    \
  }
  
  #define PROCESS_OTHER_ATTRIBUTE(JCF, INDEX, LENGTH) \
  { COMMON_HANDLE_ATTRIBUTE(JCF, INDEX, LENGTH); \
    fputc ('\n', out); JCF_SKIP (JCF, LENGTH); }
--- 338,362 ----
  	  fprintf (out, ", access flags: 0x%x", inner_class_access_flags);  \
  	  print_access_flags (out, inner_class_access_flags, 'c');	    \
  	  fprintf (out, ", outer class: ");				    \
! 	  if (outer_class_info_index == 0)				    \
! 	    fprintf (out, "(not a member)");				    \
! 	  else								    \
! 	    print_constant_terse_with_index (out, jcf,			    \
! 					     outer_class_info_index,	    \
! 					     CONSTANT_Class);		    \
  	}								    \
      }									    \
!   if (flag_print_class_info)						    \
!     fputc ('\n', out);							    \
  }
  
+ #define HANDLE_SOURCEDEBUGEXTENSION_ATTRIBUTE(LENGTH) \
+ { int i, n = (LENGTH), c = 0;					  \
+   COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); \
+   fputc ('\n', out); \
+   for (i = 0;  i < n;  i++) { c = JCF_readu(jcf); fputc(c, out); } \
+   if (c != '\r' && c != '\n') fputc('\n', out); }
+ 
  #define PROCESS_OTHER_ATTRIBUTE(JCF, INDEX, LENGTH) \
  { COMMON_HANDLE_ATTRIBUTE(JCF, INDEX, LENGTH); \
    fputc ('\n', out); JCF_SKIP (JCF, LENGTH); }
*************** static void
*** 913,919 ****
  version (void)
  {
    printf ("jcf-dump (GCC) %s\n\n", version_string);
!   printf ("Copyright %s 2004 Free Software Foundation, Inc.\n", _("(C)"));
    printf (_("This is free software; see the source for copying conditions.  There is NO\n"
  	    "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"));
    exit (0);
--- 928,934 ----
  version (void)
  {
    printf ("jcf-dump (GCC) %s\n\n", version_string);
!   printf ("Copyright %s 2006 Free Software Foundation, Inc.\n", _("(C)"));
    printf (_("This is free software; see the source for copying conditions.  There is NO\n"
  	    "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"));
    exit (0);
diff -Nrcpad gcc-4.0.2/gcc/java/jcf-io.c gcc-4.1.0/gcc/java/jcf-io.c
*** gcc-4.0.2/gcc/java/jcf-io.c	Sat Mar 12 02:16:28 2005
--- gcc-4.1.0/gcc/java/jcf-io.c	Fri Sep 30 00:33:26 2005
***************
*** 1,5 ****
  /* Utility routines for finding and reading Java(TM) .class files.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Utility routines for finding and reading Java(TM) .class files.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** typedef struct memoized_dirlist_entry 
*** 311,316 ****
--- 311,324 ----
    struct dirent **files;
  } memoized_dirlist_entry;
  
+ /* A hash function for a memoized_dirlist_entry.  */
+ static hashval_t
+ memoized_dirlist_hash (const void *entry)
+ {
+   const memoized_dirlist_entry *mde = (const memoized_dirlist_entry *) entry;
+   return htab_hash_string (mde->dir);
+ }
+ 
  /* Returns true if ENTRY (a memoized_dirlist_entry *) corresponds to
     the directory given by KEY (a char *) giving the directory 
     name.  */
*************** caching_stat (char *filename, struct sta
*** 341,351 ****
    char *base;
    memoized_dirlist_entry *dent;
    void **slot;
    
    /* If the hashtable has not already been created, create it now.  */
    if (!memoized_dirlists)
      memoized_dirlists = htab_create (37,
! 				     htab_hash_string,
  				     memoized_dirlist_lookup_eq,
  				     NULL);
  
--- 349,360 ----
    char *base;
    memoized_dirlist_entry *dent;
    void **slot;
+   struct memoized_dirlist_entry temp;
    
    /* If the hashtable has not already been created, create it now.  */
    if (!memoized_dirlists)
      memoized_dirlists = htab_create (37,
! 				     memoized_dirlist_hash,
  				     memoized_dirlist_lookup_eq,
  				     NULL);
  
*************** caching_stat (char *filename, struct sta
*** 364,371 ****
    else
      base = filename;
  
!   /* Obtain the entry for this directory from the hash table.  */
!   slot = htab_find_slot (memoized_dirlists, filename, INSERT);
    if (!*slot)
      {
        /* We have not already scanned this directory; scan it now.  */
--- 373,385 ----
    else
      base = filename;
  
!   /* Obtain the entry for this directory from the hash table.  This
!      approach is ok since we know that the hash function only looks at
!      the directory name.  */
!   temp.dir = filename;
!   temp.num_files = 0;
!   temp.files = NULL;
!   slot = htab_find_slot (memoized_dirlists, &temp, INSERT);
    if (!*slot)
      {
        /* We have not already scanned this directory; scan it now.  */
*************** find_class (const char *classname, int c
*** 533,539 ****
    if (! java && ! class && java_buf.st_mtime > class_buf.st_mtime)
      {
        if (flag_newer)
! 	warning ("source file for class %qs is newer than its matching class file.  Source file %qs used instead", classname, java_buffer);
        class = -1;
      }
  
--- 547,553 ----
    if (! java && ! class && java_buf.st_mtime > class_buf.st_mtime)
      {
        if (flag_newer)
! 	warning (0, "source file for class %qs is newer than its matching class file.  Source file %qs used instead", classname, java_buffer);
        class = -1;
      }
  
diff -Nrcpad gcc-4.0.2/gcc/java/jcf-parse.c gcc-4.1.0/gcc/java/jcf-parse.c
*** gcc-4.0.2/gcc/java/jcf-parse.c	Sat Feb 12 15:21:14 2005
--- gcc-4.1.0/gcc/java/jcf-parse.c	Fri Dec 16 17:28:38 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** set_source_filename (JCF *jcf, int index
*** 142,148 ****
  	  && strcmp (sfname, old_filename + old_len - new_len) == 0
  	  && (old_filename[old_len - new_len - 1] == '/'
  	      || old_filename[old_len - new_len - 1] == '\\'))
! 	return;
      }
    if (strchr (sfname, '/') == NULL && strchr (sfname, '\\') == NULL)
      {
--- 142,154 ----
  	  && strcmp (sfname, old_filename + old_len - new_len) == 0
  	  && (old_filename[old_len - new_len - 1] == '/'
  	      || old_filename[old_len - new_len - 1] == '\\'))
! 	{
! #ifndef USE_MAPPED_LOCATION
! 	  DECL_SOURCE_LOCATION (TYPE_NAME (current_class)) = input_location;
! 	  file_start_location = input_location;
! #endif
! 	  return;
! 	}
      }
    if (strchr (sfname, '/') == NULL && strchr (sfname, '\\') == NULL)
      {
*************** give_name_to_class (JCF *jcf, int i)
*** 444,449 ****
--- 450,456 ----
      abort ();
    else
      {
+       tree package_name = NULL_TREE, tmp;
        tree this_class;
        int j = JPOOL_USHORT1 (jcf, i);
        /* verify_constant_pool confirmed that j is a CONSTANT_Utf8. */
*************** give_name_to_class (JCF *jcf, int i)
*** 469,474 ****
--- 476,484 ----
  
        jcf->cpool.data[i].t = this_class;
        JPOOL_TAG (jcf, i) = CONSTANT_ResolvedClass;
+       split_qualified_name (&package_name, &tmp, 
+       			    DECL_NAME (TYPE_NAME (this_class)));
+       TYPE_PACKAGE (this_class) = package_name;
        return this_class;
      }
  }
*************** load_class (tree class_or_name, int verb
*** 683,689 ****
  	    break;
  
  	  /* We failed loading name. Now consider that we might be looking
! 	     for a inner class. */
  	  if ((separator = strrchr (IDENTIFIER_POINTER (name), '$'))
  	      || (separator = strrchr (IDENTIFIER_POINTER (name), '.')))
  	    {
--- 693,699 ----
  	    break;
  
  	  /* We failed loading name. Now consider that we might be looking
! 	     for an inner class.  */
  	  if ((separator = strrchr (IDENTIFIER_POINTER (name), '$'))
  	      || (separator = strrchr (IDENTIFIER_POINTER (name), '.')))
  	    {
*************** load_class (tree class_or_name, int verb
*** 717,724 ****
  	{
  	  /* This is just a diagnostic during testing, not a real problem.  */
  	  if (!quiet_flag)
! 	    warning("cannot find file for class %s", 
! 		    IDENTIFIER_POINTER (saved));
  	  
  	  /* Fake it.  */
  	  if (TREE_CODE (class_or_name) == RECORD_TYPE)
--- 727,734 ----
  	{
  	  /* This is just a diagnostic during testing, not a real problem.  */
  	  if (!quiet_flag)
! 	    warning (0, "cannot find file for class %s", 
! 		     IDENTIFIER_POINTER (saved));
  	  
  	  /* Fake it.  */
  	  if (TREE_CODE (class_or_name) == RECORD_TYPE)
*************** load_inner_classes (tree cur_class)
*** 823,828 ****
--- 833,852 ----
  }
  
  static void
+ duplicate_class_warning (const char *filename)
+ {
+   location_t warn_loc;
+ #ifdef USE_MAPPED_LOCATION
+   linemap_add (&line_table, LC_RENAME, 0, filename, 0);
+   warn_loc = linemap_line_start (&line_table, 0, 1);
+ #else
+   warn_loc.file = filename;
+   warn_loc.line = 0;
+ #endif
+   warning (0, "%Hduplicate class will only be compiled once", &warn_loc);
+ }
+ 
+ static void
  parse_class_file (void)
  {
    tree method;
*************** parse_class_file (void)
*** 915,920 ****
--- 939,959 ----
  
        give_name_to_locals (jcf);
  
+       /* Bump up start_label_pc_this_method so we get a unique label number
+ 	 and reset highest_label_pc_this_method. */
+       if (highest_label_pc_this_method >= 0)
+ 	{
+ 	  /* We adjust to the next multiple of 1000.  This is just a frill
+ 	     so the last 3 digits of the label number match the bytecode
+ 	     offset, which might make debugging marginally more convenient. */
+ 	  start_label_pc_this_method
+ 	    = ((((start_label_pc_this_method + highest_label_pc_this_method)
+ 		 / 1000)
+ 		+ 1)
+ 	       * 1000);
+ 	  highest_label_pc_this_method = -1;
+ 	}
+ 
        /* Convert bytecode to trees.  */
        expand_byte_code (jcf, method);
  
*************** java_parse_file (int set_yydebug ATTRIBU
*** 1124,1142 ****
  	  /* Exclude file that we see twice on the command line. */
  	     
  	  if (IS_A_COMMAND_LINE_FILENAME_P (node))
! 	    {
! 	      location_t warn_loc;
! #ifdef USE_MAPPED_LOCATION
! 	      linemap_add (&line_table, LC_RENAME, 0,
! 			   IDENTIFIER_POINTER (node), 0);
! 	      warn_loc = linemap_line_start (&line_table, 0, 1);
! #else
! 	      warn_loc.file = IDENTIFIER_POINTER (node);
! 	      warn_loc.line = 0;
! #endif
! 	      warning ("%Hsource file seen twice on command line and "
! 		       "will be compiled only once", &warn_loc);
! 	    }
  	  else
  	    {
  	      tree file_decl = build_decl (TRANSLATION_UNIT_DECL, node, NULL);
--- 1163,1169 ----
  	  /* Exclude file that we see twice on the command line. */
  	     
  	  if (IS_A_COMMAND_LINE_FILENAME_P (node))
! 	    duplicate_class_warning (IDENTIFIER_POINTER (node));
  	  else
  	    {
  	      tree file_decl = build_decl (TRANSLATION_UNIT_DECL, node, NULL);
*************** java_parse_file (int set_yydebug ATTRIBU
*** 1152,1158 ****
      free (file_list);
  
    if (filename_count == 0)
!     warning ("no input file specified");
  
    if (resource_name)
      {
--- 1179,1185 ----
      free (file_list);
  
    if (filename_count == 0)
!     warning (0, "no input file specified");
  
    if (resource_name)
      {
*************** java_parse_file (int set_yydebug ATTRIBU
*** 1214,1219 ****
--- 1241,1252 ----
  	  jcf_parse (current_jcf);
  	  DECL_SOURCE_LOCATION (node) = file_start_location;
  	  TYPE_JCF (current_class) = current_jcf;
+ 	  if (CLASS_FROM_CURRENTLY_COMPILED_P (current_class))
+ 	    {
+ 	      /* We've already compiled this class.  */
+ 	      duplicate_class_warning (filename);
+ 	      continue;
+ 	    }
  	  CLASS_FROM_CURRENTLY_COMPILED_P (current_class) = 1;
  	  TREE_TYPE (node) = current_class;
  	}
*************** java_parse_file (int set_yydebug ATTRIBU
*** 1236,1245 ****
  	  linemap_add (&line_table, LC_LEAVE, false, NULL, 0);
  #endif
  	  parse_zip_file_entries ();
- 	  /*
- 	  for (each entry)
- 	    CLASS_FROM_CURRENTLY_COMPILED_P (current_class) = 1;
- 	  */
  	}
        else
  	{
--- 1269,1274 ----
*************** parse_zip_file_entries (void)
*** 1383,1388 ****
--- 1412,1426 ----
  	    current_jcf = TYPE_JCF (class);
  	    output_class = current_class = class;
  
+ 	    if (CLASS_FROM_CURRENTLY_COMPILED_P (current_class))
+ 	      {
+ 	        /* We've already compiled this class.  */
+ 		duplicate_class_warning (current_jcf->filename);
+ 		break;
+ 	      }
+ 	    
+ 	    CLASS_FROM_CURRENTLY_COMPILED_P (current_class) = 1;
+ 
  	    if (TYPE_DUMMY (class))
  	      {
  		/* This is a dummy class, and now we're compiling it
diff -Nrcpad gcc-4.0.2/gcc/java/jcf-path.c gcc-4.1.0/gcc/java/jcf-path.c
*** gcc-4.0.2/gcc/java/jcf-path.c	Fri Oct 15 14:55:00 2004
--- gcc-4.1.0/gcc/java/jcf-path.c	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/jcf-reader.c gcc-4.1.0/gcc/java/jcf-reader.c
*** gcc-4.0.2/gcc/java/jcf-reader.c	Mon Feb 24 02:14:49 2003
--- gcc-4.1.0/gcc/java/jcf-reader.c	Sat Jun 25 00:33:05 2005
***************
*** 1,7 ****
  /* This file read a Java(TM) .class file.
     It is not stand-alone:  It depends on tons of macros, and the
     intent is you #include this file after you've defined the macros.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,7 ----
  /* This file read a Java(TM) .class file.
     It is not stand-alone:  It depends on tons of macros, and the
     intent is you #include this file after you've defined the macros.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** GNU General Public License for more deta
*** 18,25 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 18,25 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** get_attribute (JCF *jcf)
*** 228,233 ****
--- 228,240 ----
      }
    else
  #endif
+ #ifdef HANDLE_SOURCEDEBUGEXTENSION_ATTRIBUTE
+   if (MATCH_ATTRIBUTE ("SourceDebugExtension")) /* JSR 45 */
+     {
+       HANDLE_SOURCEDEBUGEXTENSION_ATTRIBUTE (attribute_length);
+     }
+   else
+ #endif
      {
  #ifdef PROCESS_OTHER_ATTRIBUTE
        PROCESS_OTHER_ATTRIBUTE(jcf, attribute_name, attribute_length);
diff -Nrcpad gcc-4.0.2/gcc/java/jcf-write.c gcc-4.1.0/gcc/java/jcf-write.c
*** gcc-4.0.2/gcc/java/jcf-write.c	Sun May 15 19:09:12 2005
--- gcc-4.1.0/gcc/java/jcf-write.c	Wed Jul 20 01:19:59 2005
*************** MERCHANTABILITY or FITNESS FOR A PARTICU
*** 15,22 ****
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 15,22 ----
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** generate_bytecode_insns (tree exp, int t
*** 2233,2239 ****
  	}
        else
  	{
- 	  tree type = TREE_TYPE (exp);
  	  emit_load (arg, state);
  	}
        break;
--- 2233,2238 ----
*************** generate_bytecode_insns (tree exp, int t
*** 2462,2475 ****
        break;
      case NEW_ARRAY_INIT:
        {
! 	tree values = CONSTRUCTOR_ELTS (TREE_OPERAND (exp, 0));
  	tree array_type = TREE_TYPE (TREE_TYPE (exp));
  	tree element_type = TYPE_ARRAY_ELEMENT (array_type);
  	HOST_WIDE_INT length = java_array_type_length (array_type);
  	if (target == IGNORE_TARGET)
  	  {
! 	    for ( ;  values != NULL_TREE;  values = TREE_CHAIN (values))
! 	      generate_bytecode_insns (TREE_VALUE (values), target, state);
  	    break;
  	  }
  	push_int_const (length, state);
--- 2461,2476 ----
        break;
      case NEW_ARRAY_INIT:
        {
! 	VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (TREE_OPERAND (exp, 0));
  	tree array_type = TREE_TYPE (TREE_TYPE (exp));
  	tree element_type = TYPE_ARRAY_ELEMENT (array_type);
+ 	unsigned HOST_WIDE_INT idx;
+ 	tree value;
  	HOST_WIDE_INT length = java_array_type_length (array_type);
  	if (target == IGNORE_TARGET)
  	  {
! 	    FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
! 	      generate_bytecode_insns (value, target, state);
  	    break;
  	  }
  	push_int_const (length, state);
*************** generate_bytecode_insns (tree exp, int t
*** 2490,2505 ****
  	  }
  	offset = 0;
  	jopcode = OPCODE_iastore + adjust_typed_op (element_type, 7);
! 	for ( ;  values != NULL_TREE;  values = TREE_CHAIN (values), offset++)
  	  {
  	    int save_SP = state->code_SP;
  	    emit_dup (1, 0, state);
  	    push_int_const (offset, state);
  	    NOTE_PUSH (1);
! 	    generate_bytecode_insns (TREE_VALUE (values), STACK_TARGET, state);
  	    RESERVE (1);
  	    OP1 (jopcode);
  	    state->code_SP = save_SP;
  	  }
        }
        break;
--- 2491,2507 ----
  	  }
  	offset = 0;
  	jopcode = OPCODE_iastore + adjust_typed_op (element_type, 7);
! 	FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
  	  {
  	    int save_SP = state->code_SP;
  	    emit_dup (1, 0, state);
  	    push_int_const (offset, state);
  	    NOTE_PUSH (1);
! 	    generate_bytecode_insns (value, STACK_TARGET, state);
  	    RESERVE (1);
  	    OP1 (jopcode);
  	    state->code_SP = save_SP;
+ 	    offset++;
  	  }
        }
        break;
*************** generate_classfile (tree clas, struct jc
*** 3088,3094 ****
        /* Make room for the Synthetic attribute (of zero length.)  */
        if (DECL_FINIT_P (part)
  	  || DECL_INSTINIT_P (part)
! 	  || OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (part))
  	  || TYPE_DOT_CLASS (clas) == part)
  	{
  	  i++;
--- 3090,3096 ----
        /* Make room for the Synthetic attribute (of zero length.)  */
        if (DECL_FINIT_P (part)
  	  || DECL_INSTINIT_P (part)
! 	  || NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (part))
  	  || TYPE_DOT_CLASS (clas) == part)
  	{
  	  i++;
diff -Nrcpad gcc-4.0.2/gcc/java/jcf.h gcc-4.1.0/gcc/java/jcf.h
*** gcc-4.0.2/gcc/java/jcf.h	Fri Oct 15 14:55:00 2004
--- gcc-4.1.0/gcc/java/jcf.h	Tue Sep  6 02:25:00 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** The Free Software Foundation is independ
*** 62,69 ****
     open() call.
  
     If you want to add another host, add your define to the list below
!    (i.e. defined(WIN32) || defined(YOUR_HOST)) and add an host-specific
!    .c file to Make-lang.in similar to win32-host.c  */
  #if defined(WIN32)
  extern int
  jcf_open_exact_case (const char* filename, int oflag);
--- 62,69 ----
     open() call.
  
     If you want to add another host, add your define to the list below
!    (i.e. defined(WIN32) || defined(YOUR_HOST)) and add a host-specific
!    .c file to Make-lang.in similar to win32-host.c.  */
  #if defined(WIN32)
  extern int
  jcf_open_exact_case (const char* filename, int oflag);
diff -Nrcpad gcc-4.0.2/gcc/java/jv-scan.c gcc-4.1.0/gcc/java/jv-scan.c
*** gcc-4.0.2/gcc/java/jv-scan.c	Mon Jun  6 19:20:58 2005
--- gcc-4.1.0/gcc/java/jv-scan.c	Sat Jan 21 18:29:08 2006
***************
*** 1,5 ****
  /* Main for jv-scan
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
--- 1,5 ----
  /* Main for jv-scan
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
     Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  */
  
  #include "config.h"
  #include "system.h"
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  */
  
  #include "config.h"
  #include "system.h"
*************** Boston, MA 02111-1307, USA.  */
*** 42,48 ****
  
  extern void fatal_error (const char *gmsgid, ...)
       ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
! void warning (const char *gmsgid, ...) ATTRIBUTE_PRINTF_1;
  void report (void);
  
  static void usage (void) ATTRIBUTE_NORETURN;
--- 42,49 ----
  
  extern void fatal_error (const char *gmsgid, ...)
       ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
! void warning (int opt, const char *gmsgid, ...) ATTRIBUTE_PRINTF_2;
! void warning0 (const char *gmsgid, ...) ATTRIBUTE_PRINTF_1;
  void report (void);
  
  static void usage (void) ATTRIBUTE_NORETURN;
*************** static void
*** 125,131 ****
  version (void)
  {
    printf ("jv-scan (GCC) %s\n\n", version_string);
!   printf ("Copyright %s 2004 Free Software Foundation, Inc.\n", _("(C)"));
    printf (_("This is free software; see the source for copying conditions.  There is NO\n"
  	    "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"));
    exit (0);
--- 126,132 ----
  version (void)
  {
    printf ("jv-scan (GCC) %s\n\n", version_string);
!   printf ("Copyright %s 2006 Free Software Foundation, Inc.\n", _("(C)"));
    printf (_("This is free software; see the source for copying conditions.  There is NO\n"
  	    "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"));
    exit (0);
*************** fatal_error (const char *gmsgid, ...)
*** 261,267 ****
  }
  
  void
! warning (const char *gmsgid, ...)
  {
    va_list ap;
    va_start (ap, gmsgid);
--- 262,279 ----
  }
  
  void
! warning (int opt ATTRIBUTE_UNUSED, const char *gmsgid, ...)
! {
!   va_list ap;
!   va_start (ap, gmsgid);
!   fprintf (stderr, _("%s: warning: "), exec_name);
!   vfprintf (stderr, _(gmsgid), ap);
!   fputc ('\n', stderr);
!   va_end (ap);
! }
! 
! void
! warning0 (const char *gmsgid, ...)
  {
    va_list ap;
    va_start (ap, gmsgid);
diff -Nrcpad gcc-4.0.2/gcc/java/jvgenmain.c gcc-4.1.0/gcc/java/jvgenmain.c
*** gcc-4.0.2/gcc/java/jvgenmain.c	Tue Apr 26 00:30:22 2005
--- gcc-4.1.0/gcc/java/jvgenmain.c	Sat Jun 25 00:33:05 2005
***************
*** 1,5 ****
  /* Program to generate "main" a Java(TM) class containing a main method.
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Program to generate "main" a Java(TM) class containing a main method.
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/jvspec.c gcc-4.1.0/gcc/java/jvspec.c
*** gcc-4.0.2/gcc/java/jvspec.c	Thu Nov 25 11:13:38 2004
--- gcc-4.1.0/gcc/java/jvspec.c	Wed Jul 13 16:44:37 2005
***************
*** 1,6 ****
  /* Specific flags and argument handling of the front-end of the 
     GNU compiler for the Java(TM) language.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,6 ----
  /* Specific flags and argument handling of the front-end of the 
     GNU compiler for the Java(TM) language.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** lang_specific_driver (int *in_argc, cons
*** 458,464 ****
        if (filelist_file == NULL)
  	pfatal_with_name (filelist_filename);
        num_args -= java_files_count + class_files_count + zip_files_count;
!       num_args += 2;  /* for the combined arg and "-xjava" */
      }
    /* If we know we don't have to do anything, bail now.  */
  #if 0
--- 458,464 ----
        if (filelist_file == NULL)
  	pfatal_with_name (filelist_filename);
        num_args -= java_files_count + class_files_count + zip_files_count;
!       num_args += 3;  /* for the combined arg "-xjava", and "-xnone" */
      }
    /* If we know we don't have to do anything, bail now.  */
  #if 0
*************** lang_specific_driver (int *in_argc, cons
*** 493,503 ****
    arglist = xmalloc ((num_args + 1) * sizeof (char *));
    j = 0;
  
!   for (i = 0; i < argc; i++, j++)
      {
        arglist[j] = argv[i];
  
!       if ((args[i] & PARAM_ARG) || i == 0)
  	continue;
  
        if ((args[i] & RESOURCE_FILE_ARG) != 0)
--- 493,515 ----
    arglist = xmalloc ((num_args + 1) * sizeof (char *));
    j = 0;
  
!   arglist[j++] = argv[0];
! 
!   if (combine_inputs || indirect_files_count > 0)
!     arglist[j++] = "-ffilelist-file";
! 
!   if (combine_inputs)
!     {
!       arglist[j++] = "-xjava";
!       arglist[j++] = filelist_filename;
!       arglist[j++] = "-xnone";
!     }
! 
!   for (i = 1; i < argc; i++, j++)
      {
        arglist[j] = argv[i];
  
!       if ((args[i] & PARAM_ARG))
  	continue;
  
        if ((args[i] & RESOURCE_FILE_ARG) != 0)
*************** lang_specific_driver (int *in_argc, cons
*** 559,573 ****
  	}
    }
  
-   if (combine_inputs || indirect_files_count > 0)
-     arglist[j++] = "-ffilelist-file";
- 
    if (combine_inputs)
      {
        if (fclose (filelist_file))
  	pfatal_with_name (filelist_filename);
-       arglist[j++] = "-xjava";
-       arglist[j++] = filelist_filename;
      }
  
    /* If we saw no -O or -g option, default to -g1, for javac compatibility. */
--- 571,580 ----
diff -Nrcpad gcc-4.0.2/gcc/java/keyword.gperf gcc-4.1.0/gcc/java/keyword.gperf
*** gcc-4.0.2/gcc/java/keyword.gperf	Thu Jan  9 23:16:54 2003
--- gcc-4.1.0/gcc/java/keyword.gperf	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 18,25 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 18,25 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/keyword.h gcc-4.1.0/gcc/java/keyword.h
*** gcc-4.0.2/gcc/java/keyword.h	Sat Dec 20 15:38:27 2003
--- gcc-4.1.0/gcc/java/keyword.h	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 19,26 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 19,26 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/lang-specs.h gcc-4.1.0/gcc/java/lang-specs.h
*** gcc-4.0.2/gcc/java/lang-specs.h	Fri Oct 15 14:55:00 2004
--- gcc-4.1.0/gcc/java/lang-specs.h	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/lang.c gcc-4.1.0/gcc/java/lang.c
*** gcc-4.0.2/gcc/java/lang.c	Fri Dec  3 19:43:51 2004
--- gcc-4.1.0/gcc/java/lang.c	Mon Aug 15 21:26:35 2005
***************
*** 1,5 ****
  /* Java(TM) language-specific utility routines.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Java(TM) language-specific utility routines.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** The Free Software Foundation is independ
*** 39,45 ****
  #include "langhooks.h"
  #include "langhooks-def.h"
  #include "flags.h"
- #include "xref.h"
  #include "ggc.h"
  #include "diagnostic.h"
  #include "tree-inline.h"
--- 39,44 ----
*************** int compiling_from_source;
*** 117,127 ****
  
  const char *resource_name;
  
- /* When nonzero, we emit xref strings. Values of the flag for xref
-    backends are defined in xref_flag_table, xref.c.  */
- 
- int flag_emit_xref = 0;
- 
  /* When nonzero, -Wall was turned on.  */
  int flag_wall = 0;
  
--- 116,121 ----
*************** int flag_deprecated = 1;
*** 139,147 ****
  /* Don't attempt to verify invocations.  */
  int flag_verify_invocations = 0; 
  
- /* True if the new bytecode verifier should be used.  */
- int flag_new_verifier = 0;
- 
  /* When nonzero, print extra version information.  */
  static int v_flag = 0;
  
--- 133,138 ----
*************** struct language_function GTY(())
*** 178,185 ****
  #define LANG_HOOKS_PARSE_FILE java_parse_file
  #undef LANG_HOOKS_MARK_ADDRESSABLE
  #define LANG_HOOKS_MARK_ADDRESSABLE java_mark_addressable
- #undef LANG_HOOKS_TRUTHVALUE_CONVERSION
- #define LANG_HOOKS_TRUTHVALUE_CONVERSION java_truthvalue_conversion
  #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL
  #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL java_dup_lang_specific_decl
  #undef LANG_HOOKS_DECL_PRINTABLE_NAME
--- 169,174 ----
*************** struct language_function GTY(())
*** 221,226 ****
--- 210,218 ----
  #undef LANG_HOOKS_CLEAR_BINDING_STACK
  #define LANG_HOOKS_CLEAR_BINDING_STACK java_clear_binding_stack
  
+ #undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME
+ #define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME java_mangle_decl
+ 
  /* Each front end provides its own.  */
  const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
  
*************** java_post_options (const char **pfilenam
*** 611,622 ****
       must always verify everything.  */
    if (! flag_indirect_dispatch)
      flag_verify_invocations = true;
-   else
-     {
-       /* If we are using indirect dispatch, then we want the new
- 	 verifier as well.  */
-       flag_new_verifier = 1;
-     }
  
    /* Open input file.  */
  
--- 603,608 ----
*************** merge_init_test_initialization (void **e
*** 809,815 ****
    does this by setting the DECL_INITIAL of the init_test_decl for that
    class, and no initializations are emitted for that class.
  
!   However, what if the method that is suppoed to do the initialization
    is itself inlined in the caller?  When expanding the called method
    we'll assume that the class initialization has already been done,
    because the DECL_INITIAL of the init_test_decl is set.
--- 795,801 ----
    does this by setting the DECL_INITIAL of the init_test_decl for that
    class, and no initializations are emitted for that class.
  
!   However, what if the method that is supposed to do the initialization
    is itself inlined in the caller?  When expanding the called method
    we'll assume that the class initialization has already been done,
    because the DECL_INITIAL of the init_test_decl is set.
diff -Nrcpad gcc-4.0.2/gcc/java/lang.opt gcc-4.1.0/gcc/java/lang.opt
*** gcc-4.0.2/gcc/java/lang.opt	Fri Dec  3 19:43:52 2004
--- gcc-4.1.0/gcc/java/lang.opt	Sat Jun 25 00:33:05 2005
***************
*** 1,5 ****
  ; Options for the Java front end.
! ; Copyright (C) 2003 Free Software Foundation, Inc.
  ;
  ; This file is part of GCC.
  ;
--- 1,5 ----
  ; Options for the Java front end.
! ; Copyright (C) 2003, 2005 Free Software Foundation, Inc.
  ;
  ; This file is part of GCC.
  ;
***************
*** 15,24 ****
  ; 
  ; You should have received a copy of the GNU General Public License
  ; along with GCC; see the file COPYING.  If not, write to the Free
! ; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
! ; 02111-1307, USA.
  
! ; See c.opt for a description of this file's format.
  
  ; Please try to keep this file in ASCII collating order.
  
--- 15,24 ----
  ; 
  ; You should have received a copy of the GNU General Public License
  ; along with GCC; see the file COPYING.  If not, write to the Free
! ; Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
! ; 02110-1301, USA.
  
! ; See the GCC internals manual for a description of this file's format.
  
  ; Please try to keep this file in ASCII collating order.
  
*************** fuse-divide-subroutine
*** 176,180 ****
--- 176,184 ----
  Java Var(flag_use_divide_subroutine) Init(1)
  Call a library routine to do integer divisions
  
+ fbootstrap-classes
+ Java Var(flag_bootstrap_classes)
+ Generated should be loaded by bootstrap loader
+ 
  version
  Java
diff -Nrcpad gcc-4.0.2/gcc/java/lex.c gcc-4.1.0/gcc/java/lex.c
*** gcc-4.0.2/gcc/java/lex.c	Sat Feb 12 15:21:14 2005
--- gcc-4.1.0/gcc/java/lex.c	Tue Aug 16 18:46:18 2005
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** do_java_lex (YYSTYPE *java_lval)
*** 965,971 ****
        int parts[TOTAL_PARTS];
        HOST_WIDE_INT high, low;
        /* End borrowed section.  */
!       char literal_token [256];
        int  literal_index = 0, radix = 10, long_suffix = 0, overflow = 0, bytes;
        int  found_hex_digits = 0, found_non_octal_digits = -1;
        int  i;
--- 965,973 ----
        int parts[TOTAL_PARTS];
        HOST_WIDE_INT high, low;
        /* End borrowed section.  */
! 
! #define MAX_TOKEN_LEN 256
!       char literal_token [MAX_TOKEN_LEN + 1];
        int  literal_index = 0, radix = 10, long_suffix = 0, overflow = 0, bytes;
        int  found_hex_digits = 0, found_non_octal_digits = -1;
        int  i;
*************** do_java_lex (YYSTYPE *java_lval)
*** 1020,1028 ****
  		}
  	    }
  	}
        /* Parse the first part of the literal, until we find something
  	 which is not a number.  */
!       while (radix == 16 ? JAVA_ASCII_HEXDIGIT (c) : JAVA_ASCII_DIGIT (c))
  	{
  	  /* We store in a string (in case it turns out to be a FP) and in
  	     PARTS if we have to process a integer literal.  */
--- 1022,1035 ----
  		}
  	    }
  	}
+ 
+       /* Terminate LITERAL_TOKEN in case we bail out on large tokens.  */
+       literal_token [MAX_TOKEN_LEN] = '\0';
+ 
        /* Parse the first part of the literal, until we find something
  	 which is not a number.  */
!       while ((radix == 16 ? JAVA_ASCII_HEXDIGIT (c) : JAVA_ASCII_DIGIT (c))
!              && literal_index < MAX_TOKEN_LEN)
  	{
  	  /* We store in a string (in case it turns out to be a FP) and in
  	     PARTS if we have to process a integer literal.  */
*************** do_java_lex (YYSTYPE *java_lval)
*** 1078,1084 ****
  	    java_lex_error ("Can't express non-decimal FP literal", 0);
  	  radix = 10;
  
! 	  for (;;)
  	    {
  	      if (c == '.')
  		{
--- 1085,1091 ----
  	    java_lex_error ("Can't express non-decimal FP literal", 0);
  	  radix = 10;
  
! 	  for (; literal_index < MAX_TOKEN_LEN;)
  	    {
  	      if (c == '.')
  		{
*************** do_java_lex (YYSTYPE *java_lval)
*** 1095,1101 ****
  		    java_lex_error ("Invalid character in FP literal", 0);
  		}
  
! 	      if (c == 'e' || c == 'E')
  		{
  		  if (stage < 2)
  		    {
--- 1102,1108 ----
  		    java_lex_error ("Invalid character in FP literal", 0);
  		}
  
! 	      if ((c == 'e' || c == 'E') && literal_index < MAX_TOKEN_LEN)
  		{
  		  if (stage < 2)
  		    {
*************** do_java_lex (YYSTYPE *java_lval)
*** 1119,1125 ****
  		  stage = 4;	/* So we fall through.  */
  		}
  
! 	      if ((c=='-' || c =='+') && stage == 2)
  		{
  		  stage = 3;
  		  literal_token [literal_index++] = c;
--- 1126,1133 ----
  		  stage = 4;	/* So we fall through.  */
  		}
  
! 	      if ((c=='-' || c =='+') && stage == 2
!                   && literal_index < MAX_TOKEN_LEN)
  		{
  		  stage = 3;
  		  literal_token [literal_index++] = c;
*************** do_java_lex (YYSTYPE *java_lval)
*** 1127,1136 ****
  		  c = java_peek_unicode ();
  		}
  
! 	      if ((stage == 0 && JAVA_ASCII_FPCHAR (c)) ||
! 		  (stage == 1 && JAVA_ASCII_FPCHAR (c) && !(c == '.')) ||
! 		  (stage == 2 && (JAVA_ASCII_DIGIT (c) || JAVA_FP_PM (c))) ||
! 		  (stage == 3 && JAVA_ASCII_DIGIT (c)))
  		{
  		  if (JAVA_ASCII_DIGIT (c))
  		    seen_digit = 1;
--- 1135,1145 ----
  		  c = java_peek_unicode ();
  		}
  
!               if (((stage == 0 && JAVA_ASCII_FPCHAR (c))
!                    || (stage == 1 && JAVA_ASCII_FPCHAR (c) && !(c == '.'))
!                    || (stage == 2 && (JAVA_ASCII_DIGIT (c) || JAVA_FP_PM (c)))
!                    || (stage == 3 && JAVA_ASCII_DIGIT (c)))
!                   && literal_index < MAX_TOKEN_LEN)
  		{
  		  if (JAVA_ASCII_DIGIT (c))
  		    seen_digit = 1;
*************** do_java_lex (YYSTYPE *java_lval)
*** 1140,1146 ****
  		  java_next_unicode ();
  		  c = java_peek_unicode ();
  		}
! 	      else
  		{
  		  if (stage == 4) /* Don't push back fF/dD.  */
  		    java_next_unicode ();
--- 1149,1155 ----
  		  java_next_unicode ();
  		  c = java_peek_unicode ();
  		}
! 	      else if (literal_index < MAX_TOKEN_LEN)
  		{
  		  if (stage == 4) /* Don't push back fF/dD.  */
  		    java_next_unicode ();
diff -Nrcpad gcc-4.0.2/gcc/java/lex.h gcc-4.1.0/gcc/java/lex.h
*** gcc-4.0.2/gcc/java/lex.h	Sat Nov  6 08:50:30 2004
--- gcc-4.1.0/gcc/java/lex.h	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/mangle.c gcc-4.1.0/gcc/java/mangle.c
*** gcc-4.0.2/gcc/java/mangle.c	Wed Oct 22 18:00:06 2003
--- gcc-4.1.0/gcc/java/mangle.c	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** The Free Software Foundation is independ
*** 35,45 ****
  #include "java-tree.h"
  #include "obstack.h"
  #include "toplev.h"
- #include "obstack.h"
  #include "ggc.h"
  
  static void mangle_field_decl (tree);
  static void mangle_method_decl (tree);
  
  static void mangle_type (tree);
  static void mangle_pointer_type (tree);
--- 35,48 ----
  #include "java-tree.h"
  #include "obstack.h"
  #include "toplev.h"
  #include "ggc.h"
+ #include "langhooks-def.h"
  
+ static void mangle_class_field (tree);
+ static void mangle_vtable (tree);
  static void mangle_field_decl (tree);
  static void mangle_method_decl (tree);
+ static void mangle_local_cni_method_decl (tree);
  
  static void mangle_type (tree);
  static void mangle_pointer_type (tree);
*************** static void set_type_package_list (tree)
*** 55,69 ****
  static int  entry_match_pointer_p (tree, int);
  static void emit_compression_string (int);
  
! static void init_mangling (struct obstack *);
  static tree finish_mangling (void);
  static void compression_table_add (tree);
  
  static void mangle_member_name (tree);
  
! /* We use an incoming obstack, always to be provided to the interface
!    functions. */
  struct obstack *mangle_obstack;
  #define MANGLE_RAW_STRING(S) \
    obstack_grow (mangle_obstack, (S), sizeof (S)-1)
  
--- 58,72 ----
  static int  entry_match_pointer_p (tree, int);
  static void emit_compression_string (int);
  
! static void init_mangling (void);
  static tree finish_mangling (void);
  static void compression_table_add (tree);
  
  static void mangle_member_name (tree);
  
! static struct obstack mangle_obstack_1;
  struct obstack *mangle_obstack;
+ 
  #define MANGLE_RAW_STRING(S) \
    obstack_grow (mangle_obstack, (S), sizeof (S)-1)
  
*************** static GTY(()) tree atms;
*** 73,118 ****
  /* This is the mangling interface: a decl, a class field (.class) and
     the vtable. */
  
! tree
! java_mangle_decl (struct obstack *obstack, tree decl)
  {
!   init_mangling (obstack);
!   switch (TREE_CODE (decl))
      {
!     case VAR_DECL:
!       mangle_field_decl (decl);
!       break;
!     case FUNCTION_DECL:
!       mangle_method_decl (decl);
!       break;
!     default:
!       internal_error ("can't mangle %s", tree_code_name [TREE_CODE (decl)]);
      }
!   return finish_mangling ();
  }
  
! tree 
! java_mangle_class_field (struct obstack *obstack, tree type)
  {
-   init_mangling (obstack);
    mangle_record_type (type, /* for_pointer = */ 0);
    MANGLE_RAW_STRING ("6class$");
    obstack_1grow (mangle_obstack, 'E');
-   return finish_mangling ();
  }
  
! tree
! java_mangle_vtable (struct obstack *obstack, tree type)
  {
-   init_mangling (obstack);
    MANGLE_RAW_STRING ("TV");
    mangle_record_type (type, /* for_pointer = */ 0);
    obstack_1grow (mangle_obstack, 'E');
-   return finish_mangling ();
  }
  
- /* Beginning of the helper functions */
- 
  /* This mangles a field decl */
  
  static void
--- 76,150 ----
  /* This is the mangling interface: a decl, a class field (.class) and
     the vtable. */
  
! void
! java_mangle_decl (tree decl)
  {
!   /* A copy of the check from the beginning of lhd_set_decl_assembler_name.
!      Only FUNCTION_DECLs and VAR_DECLs for variables with static storage
!      duration need a real DECL_ASSEMBLER_NAME.  */
!   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
! 	      || (TREE_CODE (decl) == VAR_DECL
! 		  && (TREE_STATIC (decl)
! 		      || DECL_EXTERNAL (decl)
! 		      || TREE_PUBLIC (decl))));
!   
!   /* Mangling only applies to class members.  */
!   if (DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl)))
      {
!       init_mangling ();
!       switch (TREE_CODE (decl))
! 	{
! 	case VAR_DECL:
! 	  if (DECL_LANG_SPECIFIC (decl))
! 	    {
! 	      if (DECL_CLASS_FIELD_P (decl))
! 		{
! 		  mangle_class_field (DECL_CONTEXT (decl));
! 		  break;
! 		}
! 	      else if (DECL_VTABLE_P (decl))
! 		{
! 		  mangle_vtable (DECL_CONTEXT (decl));
! 		  break;
! 		}
! 	    }
! 	  mangle_field_decl (decl);
! 	  break;
! 
! 	case FUNCTION_DECL:
! 	  if (DECL_LANG_SPECIFIC (decl) && DECL_LOCAL_CNI_METHOD_P (decl))
! 	    mangle_local_cni_method_decl (decl);
! 	  else
! 	    mangle_method_decl (decl);
! 	  break;
! 
! 	default:
! 	  gcc_unreachable ();
! 	}
!       SET_DECL_ASSEMBLER_NAME (decl, finish_mangling ());
      }
!   else
!     lhd_set_decl_assembler_name (decl);
  }
  
! /* Beginning of the helper functions */
! 
! static void
! mangle_class_field (tree type)
  {
    mangle_record_type (type, /* for_pointer = */ 0);
    MANGLE_RAW_STRING ("6class$");
    obstack_1grow (mangle_obstack, 'E');
  }
  
! static void
! mangle_vtable (tree type)
  {
    MANGLE_RAW_STRING ("TV");
    mangle_record_type (type, /* for_pointer = */ 0);
    obstack_1grow (mangle_obstack, 'E');
  }
  
  /* This mangles a field decl */
  
  static void
*************** mangle_method_decl (tree mdecl)
*** 167,172 ****
--- 199,216 ----
      }
  }
  
+ /* This mangles a CNI method for a local class.  If the target supports
+    hidden aliases, then G++ will have generated one for us.  It is the
+    responsibility of java_mark_class_local to check target support, since
+    we need to set DECL_VISIBILITY (or not) much earlier.  */
+ 
+ static void
+ mangle_local_cni_method_decl (tree decl)
+ {
+   MANGLE_RAW_STRING ("GA");
+   mangle_method_decl (decl);
+ }
+ 
  /* This mangles a member name, like a function name or a field
     name. Handle cases were `name' is a C++ keyword.  Return a nonzero
     value if unicode encoding was required.  */
*************** compression_table_add (tree type)
*** 585,601 ****
  /* Mangling initialization routine.  */
  
  static void
! init_mangling (struct obstack *obstack)
  {
!   mangle_obstack = obstack;
!   if (!compression_table)
!     compression_table = make_tree_vec (10);
!   else
!     /* Mangling already in progress.  */
!     abort ();
  
    /* Mangled name are to be suffixed */
!   obstack_grow (mangle_obstack, "_Z", 2);
  }
  
  /* Mangling finalization routine. The mangled name is returned as a
--- 629,647 ----
  /* Mangling initialization routine.  */
  
  static void
! init_mangling (void)
  {
!   if (!mangle_obstack)
!     {
!       mangle_obstack = &mangle_obstack_1;
!       gcc_obstack_init (mangle_obstack);
!     }
! 
!   gcc_assert (compression_table == NULL);
!   compression_table = make_tree_vec (10);
  
    /* Mangled name are to be suffixed */
!   MANGLE_RAW_STRING ("_Z");
  }
  
  /* Mangling finalization routine. The mangled name is returned as a
*************** finish_mangling (void)
*** 606,623 ****
  {
    tree result;
  
!   if (!compression_table)
!     /* Mangling already finished.  */
!     abort ();
  
    compression_table = NULL_TREE;
    compression_next = 0;
    obstack_1grow (mangle_obstack, '\0');
    result = get_identifier (obstack_base (mangle_obstack));
    obstack_free (mangle_obstack, obstack_base (mangle_obstack));
! #if 0
!   printf ("// %s\n", IDENTIFIER_POINTER (result));
! #endif
    return result;
  }
  
--- 652,665 ----
  {
    tree result;
  
!   gcc_assert (compression_table);
  
    compression_table = NULL_TREE;
    compression_next = 0;
    obstack_1grow (mangle_obstack, '\0');
    result = get_identifier (obstack_base (mangle_obstack));
    obstack_free (mangle_obstack, obstack_base (mangle_obstack));
! 
    return result;
  }
  
diff -Nrcpad gcc-4.0.2/gcc/java/mangle_name.c gcc-4.1.0/gcc/java/mangle_name.c
*** gcc-4.0.2/gcc/java/mangle_name.c	Sun Jan 12 02:14:55 2003
--- gcc-4.1.0/gcc/java/mangle_name.c	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA. 
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/parse-scan.c gcc-4.1.0/gcc/java/parse-scan.c
*** gcc-4.0.2/gcc/java/parse-scan.c	Wed Sep 28 06:21:18 2005
--- gcc-4.1.0/gcc/java/parse-scan.c	Tue Feb 28 08:43:03 2006
***************
*** 278,284 ****
  
  
  /* Copy the first part of user declarations.  */
! #line 38 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
  
  #define JC1_LITE
  
--- 278,284 ----
  
  
  /* Copy the first part of user declarations.  */
! #line 38 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
  
  #define JC1_LITE
  
*************** void report (void); 
*** 383,389 ****
  #endif
  
  #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 128 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
  typedef union YYSTYPE {
    char *node;
    struct method_declarator *declarator;
--- 383,389 ----
  #endif
  
  #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 128 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
  typedef union YYSTYPE {
    char *node;
    struct method_declarator *declarator;
*************** typedef union YYSTYPE {
*** 399,405 ****
  
  
  /* Copy the second part of user declarations.  */
! #line 134 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
  
  extern int flag_assert;
  
--- 399,405 ----
  
  
  /* Copy the second part of user declarations.  */
! #line 134 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
  
  extern int flag_assert;
  
*************** union yyalloc
*** 509,524 ****
  /* YYFINAL -- State number of the termination state. */
  #define YYFINAL  28
  /* YYLAST -- Last index in YYTABLE.  */
! #define YYLAST   3334
  
  /* YYNTOKENS -- Number of terminals. */
  #define YYNTOKENS  112
  /* YYNNTS -- Number of nonterminals. */
  #define YYNNTS  154
  /* YYNRULES -- Number of rules. */
! #define YYNRULES  357
  /* YYNRULES -- Number of states. */
! #define YYNSTATES  616
  
  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
  #define YYUNDEFTOK  2
--- 509,524 ----
  /* YYFINAL -- State number of the termination state. */
  #define YYFINAL  28
  /* YYLAST -- Last index in YYTABLE.  */
! #define YYLAST   3393
  
  /* YYNTOKENS -- Number of terminals. */
  #define YYNTOKENS  112
  /* YYNNTS -- Number of nonterminals. */
  #define YYNNTS  154
  /* YYNRULES -- Number of rules. */
! #define YYNRULES  358
  /* YYNRULES -- Number of states. */
! #define YYNSTATES  617
  
  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
  #define YYUNDEFTOK  2
*************** static const unsigned short int yyprhs[]
*** 587,615 ****
       269,   272,   274,   278,   283,   288,   294,   298,   303,   306,
       310,   314,   319,   324,   330,   338,   345,   347,   349,   350,
       355,   356,   362,   363,   369,   370,   377,   380,   384,   387,
!      391,   393,   396,   398,   400,   402,   404,   406,   409,   412,
!      416,   420,   425,   427,   431,   434,   438,   440,   443,   445,
!      447,   449,   452,   455,   459,   461,   463,   465,   467,   469,
       471,   473,   475,   477,   479,   481,   483,   485,   487,   489,
!      491,   493,   495,   497,   499,   501,   503,   505,   507,   510,
!      513,   516,   519,   521,   523,   525,   527,   529,   531,   533,
!      539,   547,   555,   561,   564,   568,   572,   577,   579,   582,
!      585,   587,   590,   594,   597,   602,   605,   608,   610,   618,
!      626,   633,   641,   648,   651,   654,   655,   657,   659,   660,
!      662,   664,   668,   671,   675,   678,   682,   685,   689,   693,
!      699,   703,   706,   710,   716,   722,   724,   728,   732,   737,
!      739,   742,   748,   751,   753,   755,   757,   759,   763,   765,
!      767,   769,   771,   773,   777,   781,   785,   789,   793,   799,
!      804,   806,   811,   817,   823,   830,   831,   838,   839,   847,
!      851,   855,   857,   861,   865,   869,   873,   878,   883,   888,
!      893,   895,   898,   902,   905,   909,   913,   917,   921,   926,
!      932,   939,   945,   952,   957,   962,   964,   966,   968,   970,
!      973,   976,   978,   980,   983,   986,   988,   991,   994,   996,
!      999,  1002,  1004,  1010,  1015,  1020,  1026,  1028,  1032,  1036,
!     1040,  1042,  1046,  1050,  1052,  1056,  1060,  1064,  1066,  1070,
!     1074,  1078,  1082,  1086,  1088,  1092,  1096,  1098,  1102,  1104,
!     1108,  1110,  1114,  1116,  1120,  1122,  1126,  1128,  1134,  1136,
!     1138,  1142,  1144,  1146,  1148,  1150,  1152,  1154
  };
  
  /* YYRHS -- A `-1'-separated list of the rules' RHS. */
--- 587,615 ----
       269,   272,   274,   278,   283,   288,   294,   298,   303,   306,
       310,   314,   319,   324,   330,   338,   345,   347,   349,   350,
       355,   356,   362,   363,   369,   370,   377,   380,   384,   387,
!      391,   393,   396,   398,   400,   402,   404,   406,   408,   411,
!      414,   418,   422,   427,   429,   433,   436,   440,   442,   445,
!      447,   449,   451,   454,   457,   461,   463,   465,   467,   469,
       471,   473,   475,   477,   479,   481,   483,   485,   487,   489,
!      491,   493,   495,   497,   499,   501,   503,   505,   507,   509,
!      512,   515,   518,   521,   523,   525,   527,   529,   531,   533,
!      535,   541,   549,   557,   563,   566,   570,   574,   579,   581,
!      584,   587,   589,   592,   596,   599,   604,   607,   610,   612,
!      620,   628,   635,   643,   650,   653,   656,   657,   659,   661,
!      662,   664,   666,   670,   673,   677,   680,   684,   687,   691,
!      695,   701,   705,   708,   712,   718,   724,   726,   730,   734,
!      739,   741,   744,   750,   753,   755,   757,   759,   761,   765,
!      767,   769,   771,   773,   775,   779,   783,   787,   791,   795,
!      801,   806,   808,   813,   819,   825,   832,   833,   840,   841,
!      849,   853,   857,   859,   863,   867,   871,   875,   880,   885,
!      890,   895,   897,   900,   904,   907,   911,   915,   919,   923,
!      928,   934,   941,   947,   954,   959,   964,   966,   968,   970,
!      972,   975,   978,   980,   982,   985,   988,   990,   993,   996,
!      998,  1001,  1004,  1006,  1012,  1017,  1022,  1028,  1030,  1034,
!     1038,  1042,  1044,  1048,  1052,  1054,  1058,  1062,  1066,  1068,
!     1072,  1076,  1080,  1084,  1088,  1090,  1094,  1098,  1100,  1104,
!     1106,  1110,  1112,  1116,  1118,  1122,  1124,  1128,  1130,  1136,
!     1138,  1140,  1144,  1146,  1148,  1150,  1152,  1154,  1156
  };
  
  /* YYRHS -- A `-1'-separated list of the rules' RHS. */
*************** static const short int yyrhs[] =
*** 655,736 ****
       134,    62,   125,   171,   170,   172,    -1,    64,   120,    -1,
       171,   102,   120,    -1,    97,    98,    -1,    97,   173,    98,
        -1,   174,    -1,   173,   174,    -1,   175,    -1,   176,    -1,
!      135,    -1,   166,    -1,   145,    -1,   152,   101,    -1,    97,
!       98,    -1,    97,   178,    98,    -1,    97,   102,    98,    -1,
!       97,   178,   102,    98,    -1,   149,    -1,   178,   102,   149,
!       -1,    97,    98,    -1,    97,   180,    98,    -1,   181,    -1,
!      180,   181,    -1,   182,    -1,   184,    -1,   135,    -1,   183,
!      101,    -1,   115,   146,    -1,   134,   115,   146,    -1,   186,
!       -1,   189,    -1,   193,    -1,   194,    -1,   203,    -1,   207,
!       -1,   186,    -1,   190,    -1,   195,    -1,   204,    -1,   208,
!       -1,   179,    -1,   187,    -1,   191,    -1,   196,    -1,   206,
!       -1,   214,    -1,   215,    -1,   216,    -1,   219,    -1,   217,
!       -1,   221,    -1,   218,    -1,   101,    -1,   125,    90,    -1,
!      188,   184,    -1,   188,   185,    -1,   192,   101,    -1,   261,
!       -1,   245,    -1,   246,    -1,   242,    -1,   243,    -1,   239,
!       -1,   228,    -1,    49,    95,   264,    96,   184,    -1,    49,
!       95,   264,    96,   185,    57,   184,    -1,    49,    95,   264,
!       96,   185,    57,   185,    -1,    69,    95,   264,    96,   197,
!       -1,    97,    98,    -1,    97,   200,    98,    -1,    97,   198,
!       98,    -1,    97,   198,   200,    98,    -1,   199,    -1,   198,
!      199,    -1,   200,   180,    -1,   201,    -1,   200,   201,    -1,
!       63,   265,    90,    -1,    48,    90,    -1,    67,    95,   264,
!       96,    -1,   202,   184,    -1,   202,   185,    -1,    52,    -1,
!      205,   184,    67,    95,   264,    96,   101,    -1,   210,   101,
!      264,   101,   212,    96,   184,    -1,   210,   101,   101,   212,
!       96,   184,    -1,   210,   101,   264,   101,   212,    96,   185,
!       -1,   210,   101,   101,   212,    96,   185,    -1,    72,    95,
!       -1,   209,   211,    -1,    -1,   213,    -1,   183,    -1,    -1,
!      213,    -1,   192,    -1,   213,   102,   192,    -1,    55,   101,
!       -1,    55,   125,   101,    -1,    74,   101,    -1,    74,   125,
!      101,    -1,    59,   101,    -1,    59,   264,   101,    -1,    50,
!      264,   101,    -1,    78,   264,    90,   264,   101,    -1,    78,
!      264,   101,    -1,    78,     1,    -1,    78,   264,     1,    -1,
!      220,    95,   264,    96,   179,    -1,   220,    95,   264,    96,
!        1,    -1,    44,    -1,    71,   179,   222,    -1,    71,   179,
!      224,    -1,    71,   179,   222,   224,    -1,   223,    -1,   222,
!      223,    -1,    61,    95,   155,    96,   179,    -1,    65,   179,
!       -1,   226,    -1,   234,    -1,   114,    -1,    77,    -1,    95,
!      264,    96,    -1,   228,    -1,   238,    -1,   239,    -1,   240,
!       -1,   227,    -1,   122,   103,    77,    -1,   122,   103,    68,
!       -1,   121,   103,    68,    -1,   116,   103,    68,    -1,    60,
!      103,    68,    -1,    73,   119,    95,   233,    96,    -1,    73,
!      119,    95,    96,    -1,   229,    -1,   232,   125,    95,    96,
!       -1,   232,   125,    95,    96,   141,    -1,   232,   125,    95,
!      233,    96,    -1,   232,   125,    95,   233,    96,   141,    -1,
!       -1,    73,   119,    95,    96,   230,   141,    -1,    -1,    73,
!      119,    95,   233,    96,   231,   141,    -1,   122,   103,    73,
!       -1,   225,   103,    73,    -1,   264,    -1,   233,   102,   264,
!       -1,   233,   102,     1,    -1,    73,   116,   235,    -1,    73,
!      118,   235,    -1,    73,   116,   235,   237,    -1,    73,   118,
!      235,   237,    -1,    73,   118,   237,   177,    -1,    73,   116,
!      237,   177,    -1,   236,    -1,   235,   236,    -1,    99,   264,
!      100,    -1,    99,   100,    -1,   237,    99,   100,    -1,   225,
!      103,   125,    -1,    66,   103,   125,    -1,   122,    95,    96,
!       -1,   122,    95,   233,    96,    -1,   225,   103,   125,    95,
!       96,    -1,   225,   103,   125,    95,   233,    96,    -1,    66,
!      103,   125,    95,    96,    -1,    66,   103,   125,    95,   233,
!       96,    -1,   122,    99,   264,   100,    -1,   226,    99,   264,
!      100,    -1,   225,    -1,   122,    -1,   242,    -1,   243,    -1,
!      241,    47,    -1,   241,    46,    -1,   245,    -1,   246,    -1,
!        3,   244,    -1,     4,   244,    -1,   247,    -1,    47,   244,
!       -1,    46,   244,    -1,   241,    -1,    91,   244,    -1,    92,
!      244,    -1,   248,    -1,    95,   116,   237,    96,   244,    -1,
!       95,   116,    96,   244,    -1,    95,   264,    96,   247,    -1,
!       95,   122,   237,    96,   247,    -1,   244,    -1,   249,     5,
!      244,    -1,   249,     6,   244,    -1,   249,     7,   244,    -1,
!      249,    -1,   250,     3,   249,    -1,   250,     4,   249,    -1,
!      250,    -1,   251,     8,   250,    -1,   251,     9,   250,    -1,
!      251,    10,   250,    -1,   251,    -1,   252,    20,   251,    -1,
!      252,    18,   251,    -1,   252,    21,   251,    -1,   252,    19,
!      251,    -1,   252,    58,   117,    -1,   252,    -1,   253,    16,
!      252,    -1,   253,    17,   252,    -1,   253,    -1,   254,    11,
!      253,    -1,   254,    -1,   255,    12,   254,    -1,   255,    -1,
!      256,    13,   255,    -1,   256,    -1,   257,    14,   256,    -1,
!      257,    -1,   258,    15,   257,    -1,   258,    -1,   258,    89,
!      264,    90,   259,    -1,   259,    -1,   261,    -1,   262,   263,
!      260,    -1,   122,    -1,   238,    -1,   240,    -1,    93,    -1,
!       94,    -1,   260,    -1,   264,    -1
  };
  
  /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
--- 655,736 ----
       134,    62,   125,   171,   170,   172,    -1,    64,   120,    -1,
       171,   102,   120,    -1,    97,    98,    -1,    97,   173,    98,
        -1,   174,    -1,   173,   174,    -1,   175,    -1,   176,    -1,
!      135,    -1,   166,    -1,   187,    -1,   145,    -1,   152,   101,
!       -1,    97,    98,    -1,    97,   178,    98,    -1,    97,   102,
!       98,    -1,    97,   178,   102,    98,    -1,   149,    -1,   178,
!      102,   149,    -1,    97,    98,    -1,    97,   180,    98,    -1,
!      181,    -1,   180,   181,    -1,   182,    -1,   184,    -1,   135,
!       -1,   183,   101,    -1,   115,   146,    -1,   134,   115,   146,
!       -1,   186,    -1,   189,    -1,   193,    -1,   194,    -1,   203,
!       -1,   207,    -1,   186,    -1,   190,    -1,   195,    -1,   204,
!       -1,   208,    -1,   179,    -1,   187,    -1,   191,    -1,   196,
!       -1,   206,    -1,   214,    -1,   215,    -1,   216,    -1,   219,
!       -1,   217,    -1,   221,    -1,   218,    -1,   101,    -1,   125,
!       90,    -1,   188,   184,    -1,   188,   185,    -1,   192,   101,
!       -1,   261,    -1,   245,    -1,   246,    -1,   242,    -1,   243,
!       -1,   239,    -1,   228,    -1,    49,    95,   264,    96,   184,
!       -1,    49,    95,   264,    96,   185,    57,   184,    -1,    49,
!       95,   264,    96,   185,    57,   185,    -1,    69,    95,   264,
!       96,   197,    -1,    97,    98,    -1,    97,   200,    98,    -1,
!       97,   198,    98,    -1,    97,   198,   200,    98,    -1,   199,
!       -1,   198,   199,    -1,   200,   180,    -1,   201,    -1,   200,
!      201,    -1,    63,   265,    90,    -1,    48,    90,    -1,    67,
!       95,   264,    96,    -1,   202,   184,    -1,   202,   185,    -1,
!       52,    -1,   205,   184,    67,    95,   264,    96,   101,    -1,
!      210,   101,   264,   101,   212,    96,   184,    -1,   210,   101,
!      101,   212,    96,   184,    -1,   210,   101,   264,   101,   212,
!       96,   185,    -1,   210,   101,   101,   212,    96,   185,    -1,
!       72,    95,    -1,   209,   211,    -1,    -1,   213,    -1,   183,
!       -1,    -1,   213,    -1,   192,    -1,   213,   102,   192,    -1,
!       55,   101,    -1,    55,   125,   101,    -1,    74,   101,    -1,
!       74,   125,   101,    -1,    59,   101,    -1,    59,   264,   101,
!       -1,    50,   264,   101,    -1,    78,   264,    90,   264,   101,
!       -1,    78,   264,   101,    -1,    78,     1,    -1,    78,   264,
!        1,    -1,   220,    95,   264,    96,   179,    -1,   220,    95,
!      264,    96,     1,    -1,    44,    -1,    71,   179,   222,    -1,
!       71,   179,   224,    -1,    71,   179,   222,   224,    -1,   223,
!       -1,   222,   223,    -1,    61,    95,   155,    96,   179,    -1,
!       65,   179,    -1,   226,    -1,   234,    -1,   114,    -1,    77,
!       -1,    95,   264,    96,    -1,   228,    -1,   238,    -1,   239,
!       -1,   240,    -1,   227,    -1,   122,   103,    77,    -1,   122,
!      103,    68,    -1,   121,   103,    68,    -1,   116,   103,    68,
!       -1,    60,   103,    68,    -1,    73,   119,    95,   233,    96,
!       -1,    73,   119,    95,    96,    -1,   229,    -1,   232,   125,
!       95,    96,    -1,   232,   125,    95,    96,   141,    -1,   232,
!      125,    95,   233,    96,    -1,   232,   125,    95,   233,    96,
!      141,    -1,    -1,    73,   119,    95,    96,   230,   141,    -1,
!       -1,    73,   119,    95,   233,    96,   231,   141,    -1,   122,
!      103,    73,    -1,   225,   103,    73,    -1,   264,    -1,   233,
!      102,   264,    -1,   233,   102,     1,    -1,    73,   116,   235,
!       -1,    73,   118,   235,    -1,    73,   116,   235,   237,    -1,
!       73,   118,   235,   237,    -1,    73,   118,   237,   177,    -1,
!       73,   116,   237,   177,    -1,   236,    -1,   235,   236,    -1,
!       99,   264,   100,    -1,    99,   100,    -1,   237,    99,   100,
!       -1,   225,   103,   125,    -1,    66,   103,   125,    -1,   122,
!       95,    96,    -1,   122,    95,   233,    96,    -1,   225,   103,
!      125,    95,    96,    -1,   225,   103,   125,    95,   233,    96,
!       -1,    66,   103,   125,    95,    96,    -1,    66,   103,   125,
!       95,   233,    96,    -1,   122,    99,   264,   100,    -1,   226,
!       99,   264,   100,    -1,   225,    -1,   122,    -1,   242,    -1,
!      243,    -1,   241,    47,    -1,   241,    46,    -1,   245,    -1,
!      246,    -1,     3,   244,    -1,     4,   244,    -1,   247,    -1,
!       47,   244,    -1,    46,   244,    -1,   241,    -1,    91,   244,
!       -1,    92,   244,    -1,   248,    -1,    95,   116,   237,    96,
!      244,    -1,    95,   116,    96,   244,    -1,    95,   264,    96,
!      247,    -1,    95,   122,   237,    96,   247,    -1,   244,    -1,
!      249,     5,   244,    -1,   249,     6,   244,    -1,   249,     7,
!      244,    -1,   249,    -1,   250,     3,   249,    -1,   250,     4,
!      249,    -1,   250,    -1,   251,     8,   250,    -1,   251,     9,
!      250,    -1,   251,    10,   250,    -1,   251,    -1,   252,    20,
!      251,    -1,   252,    18,   251,    -1,   252,    21,   251,    -1,
!      252,    19,   251,    -1,   252,    58,   117,    -1,   252,    -1,
!      253,    16,   252,    -1,   253,    17,   252,    -1,   253,    -1,
!      254,    11,   253,    -1,   254,    -1,   255,    12,   254,    -1,
!      255,    -1,   256,    13,   255,    -1,   256,    -1,   257,    14,
!      256,    -1,   257,    -1,   258,    15,   257,    -1,   258,    -1,
!      258,    89,   264,    90,   259,    -1,   259,    -1,   261,    -1,
!      262,   263,   260,    -1,   122,    -1,   238,    -1,   240,    -1,
!       93,    -1,    94,    -1,   260,    -1,   264,    -1
  };
  
  /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
*************** static const unsigned short int yyrline[
*** 749,777 ****
       544,   548,   558,   559,   562,   564,   571,   573,   578,   579,
       580,   581,   586,   587,   590,   592,   597,   598,   605,   604,
       608,   607,   611,   610,   614,   613,   619,   620,   624,   626,
!      631,   632,   636,   637,   638,   639,   643,   647,   652,   653,
!      654,   655,   659,   660,   665,   666,   670,   671,   675,   676,
!      677,   681,   685,   687,   692,   693,   694,   695,   696,   697,
!      701,   702,   703,   704,   705,   709,   710,   711,   712,   713,
!      714,   715,   716,   717,   718,   719,   720,   724,   728,   733,
!      737,   743,   747,   748,   749,   750,   751,   752,   753,   757,
!      761,   766,   771,   775,   776,   777,   778,   782,   783,   787,
!      792,   793,   797,   798,   802,   806,   810,   814,   818,   823,
!      824,   828,   829,   833,   837,   839,   840,   841,   844,   845,
!      849,   850,   854,   855,   861,   862,   866,   867,   871,   875,
!      876,   877,   879,   883,   884,   888,   893,   894,   895,   899,
!      900,   904,   908,   913,   914,   918,   919,   920,   921,   922,
!      923,   924,   925,   929,   934,   936,   938,   940,   945,   946,
!      947,   948,   949,   950,   951,   956,   955,   959,   958,   964,
!      966,   970,   971,   972,   976,   977,   978,   979,   982,   983,
!      987,   988,   992,   996,   998,  1003,  1004,  1011,  1013,  1015,
!     1016,  1017,  1018,  1022,  1024,  1028,  1029,  1031,  1032,  1036,
!     1040,  1044,  1045,  1046,  1047,  1048,  1052,  1056,  1060,  1061,
!     1062,  1063,  1067,  1068,  1069,  1070,  1074,  1075,  1076,  1077,
!     1081,  1082,  1083,  1087,  1088,  1089,  1090,  1094,  1095,  1096,
!     1097,  1098,  1099,  1103,  1104,  1105,  1109,  1110,  1114,  1115,
!     1119,  1120,  1124,  1125,  1130,  1131,  1136,  1137,  1142,  1143,
!     1147,  1151,  1153,  1154,  1158,  1159,  1163,  1167
  };
  #endif
  
--- 749,777 ----
       544,   548,   558,   559,   562,   564,   571,   573,   578,   579,
       580,   581,   586,   587,   590,   592,   597,   598,   605,   604,
       608,   607,   611,   610,   614,   613,   619,   620,   624,   626,
!      631,   632,   636,   637,   638,   639,   640,   644,   648,   653,
!      654,   655,   656,   660,   661,   666,   667,   671,   672,   676,
!      677,   678,   682,   686,   688,   693,   694,   695,   696,   697,
!      698,   702,   703,   704,   705,   706,   710,   711,   712,   713,
!      714,   715,   716,   717,   718,   719,   720,   721,   725,   729,
!      734,   738,   744,   748,   749,   750,   751,   752,   753,   754,
!      758,   762,   767,   772,   776,   777,   778,   779,   783,   784,
!      788,   793,   794,   798,   799,   803,   807,   811,   815,   819,
!      824,   825,   829,   830,   834,   838,   840,   841,   842,   845,
!      846,   850,   851,   855,   856,   862,   863,   867,   868,   872,
!      876,   877,   878,   880,   884,   885,   889,   894,   895,   896,
!      900,   901,   905,   909,   914,   915,   919,   920,   921,   922,
!      923,   924,   925,   926,   930,   935,   937,   939,   941,   946,
!      947,   948,   949,   950,   951,   952,   957,   956,   960,   959,
!      965,   967,   971,   972,   973,   977,   978,   979,   980,   983,
!      984,   988,   989,   993,   997,   999,  1004,  1005,  1012,  1014,
!     1016,  1017,  1018,  1019,  1023,  1025,  1029,  1030,  1032,  1033,
!     1037,  1041,  1045,  1046,  1047,  1048,  1049,  1053,  1057,  1061,
!     1062,  1063,  1064,  1068,  1069,  1070,  1071,  1075,  1076,  1077,
!     1078,  1082,  1083,  1084,  1088,  1089,  1090,  1091,  1095,  1096,
!     1097,  1098,  1099,  1100,  1104,  1105,  1106,  1110,  1111,  1115,
!     1116,  1120,  1121,  1125,  1126,  1131,  1132,  1137,  1138,  1143,
!     1144,  1148,  1152,  1154,  1155,  1159,  1160,  1164,  1168
  };
  #endif
  
*************** static const unsigned short int yyr1[] =
*** 890,918 ****
       159,   160,   161,   161,   161,   161,   162,   162,   163,   163,
       163,   163,   164,   164,   164,   164,   165,   165,   167,   166,
       168,   166,   169,   166,   170,   166,   171,   171,   172,   172,
!      173,   173,   174,   174,   174,   174,   175,   176,   177,   177,
!      177,   177,   178,   178,   179,   179,   180,   180,   181,   181,
!      181,   182,   183,   183,   184,   184,   184,   184,   184,   184,
!      185,   185,   185,   185,   185,   186,   186,   186,   186,   186,
!      186,   186,   186,   186,   186,   186,   186,   187,   188,   189,
!      190,   191,   192,   192,   192,   192,   192,   192,   192,   193,
!      194,   195,   196,   197,   197,   197,   197,   198,   198,   199,
!      200,   200,   201,   201,   202,   203,   204,   205,   206,   207,
!      207,   208,   208,   209,   210,   211,   211,   211,   212,   212,
!      213,   213,   214,   214,   215,   215,   216,   216,   217,   218,
!      218,   218,   218,   219,   219,   220,   221,   221,   221,   222,
!      222,   223,   224,   225,   225,   226,   226,   226,   226,   226,
!      226,   226,   226,   226,   227,   227,   227,   227,   228,   228,
!      228,   228,   228,   228,   228,   230,   229,   231,   229,   232,
!      232,   233,   233,   233,   234,   234,   234,   234,   234,   234,
!      235,   235,   236,   237,   237,   238,   238,   239,   239,   239,
!      239,   239,   239,   240,   240,   241,   241,   241,   241,   242,
!      243,   244,   244,   244,   244,   244,   245,   246,   247,   247,
!      247,   247,   248,   248,   248,   248,   249,   249,   249,   249,
!      250,   250,   250,   251,   251,   251,   251,   252,   252,   252,
!      252,   252,   252,   253,   253,   253,   254,   254,   255,   255,
!      256,   256,   257,   257,   258,   258,   259,   259,   260,   260,
!      261,   262,   262,   262,   263,   263,   264,   265
  };
  
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
--- 890,918 ----
       159,   160,   161,   161,   161,   161,   162,   162,   163,   163,
       163,   163,   164,   164,   164,   164,   165,   165,   167,   166,
       168,   166,   169,   166,   170,   166,   171,   171,   172,   172,
!      173,   173,   174,   174,   174,   174,   174,   175,   176,   177,
!      177,   177,   177,   178,   178,   179,   179,   180,   180,   181,
!      181,   181,   182,   183,   183,   184,   184,   184,   184,   184,
!      184,   185,   185,   185,   185,   185,   186,   186,   186,   186,
!      186,   186,   186,   186,   186,   186,   186,   186,   187,   188,
!      189,   190,   191,   192,   192,   192,   192,   192,   192,   192,
!      193,   194,   195,   196,   197,   197,   197,   197,   198,   198,
!      199,   200,   200,   201,   201,   202,   203,   204,   205,   206,
!      207,   207,   208,   208,   209,   210,   211,   211,   211,   212,
!      212,   213,   213,   214,   214,   215,   215,   216,   216,   217,
!      218,   218,   218,   218,   219,   219,   220,   221,   221,   221,
!      222,   222,   223,   224,   225,   225,   226,   226,   226,   226,
!      226,   226,   226,   226,   226,   227,   227,   227,   227,   228,
!      228,   228,   228,   228,   228,   228,   230,   229,   231,   229,
!      232,   232,   233,   233,   233,   234,   234,   234,   234,   234,
!      234,   235,   235,   236,   237,   237,   238,   238,   239,   239,
!      239,   239,   239,   239,   240,   240,   241,   241,   241,   241,
!      242,   243,   244,   244,   244,   244,   244,   245,   246,   247,
!      247,   247,   247,   248,   248,   248,   248,   249,   249,   249,
!      249,   250,   250,   250,   251,   251,   251,   251,   252,   252,
!      252,   252,   252,   252,   253,   253,   253,   254,   254,   255,
!      255,   256,   256,   257,   257,   258,   258,   259,   259,   260,
!      260,   261,   262,   262,   262,   263,   263,   264,   265
  };
  
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
*************** static const unsigned char yyr2[] =
*** 931,959 ****
         2,     1,     3,     4,     4,     5,     3,     4,     2,     3,
         3,     4,     4,     5,     7,     6,     1,     1,     0,     4,
         0,     5,     0,     5,     0,     6,     2,     3,     2,     3,
!        1,     2,     1,     1,     1,     1,     1,     2,     2,     3,
!        3,     4,     1,     3,     2,     3,     1,     2,     1,     1,
!        1,     2,     2,     3,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
!        1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
!        2,     2,     1,     1,     1,     1,     1,     1,     1,     5,
!        7,     7,     5,     2,     3,     3,     4,     1,     2,     2,
!        1,     2,     3,     2,     4,     2,     2,     1,     7,     7,
!        6,     7,     6,     2,     2,     0,     1,     1,     0,     1,
!        1,     3,     2,     3,     2,     3,     2,     3,     3,     5,
!        3,     2,     3,     5,     5,     1,     3,     3,     4,     1,
!        2,     5,     2,     1,     1,     1,     1,     3,     1,     1,
!        1,     1,     1,     3,     3,     3,     3,     3,     5,     4,
!        1,     4,     5,     5,     6,     0,     6,     0,     7,     3,
!        3,     1,     3,     3,     3,     3,     4,     4,     4,     4,
!        1,     2,     3,     2,     3,     3,     3,     3,     4,     5,
!        6,     5,     6,     4,     4,     1,     1,     1,     1,     2,
!        2,     1,     1,     2,     2,     1,     2,     2,     1,     2,
!        2,     1,     5,     4,     4,     5,     1,     3,     3,     3,
!        1,     3,     3,     1,     3,     3,     3,     1,     3,     3,
!        3,     3,     3,     1,     3,     3,     1,     3,     1,     3,
!        1,     3,     1,     3,     1,     3,     1,     5,     1,     1,
!        3,     1,     1,     1,     1,     1,     1,     1
  };
  
  /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
--- 931,959 ----
         2,     1,     3,     4,     4,     5,     3,     4,     2,     3,
         3,     4,     4,     5,     7,     6,     1,     1,     0,     4,
         0,     5,     0,     5,     0,     6,     2,     3,     2,     3,
!        1,     2,     1,     1,     1,     1,     1,     1,     2,     2,
!        3,     3,     4,     1,     3,     2,     3,     1,     2,     1,
!        1,     1,     2,     2,     3,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
!        1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
!        2,     2,     2,     1,     1,     1,     1,     1,     1,     1,
!        5,     7,     7,     5,     2,     3,     3,     4,     1,     2,
!        2,     1,     2,     3,     2,     4,     2,     2,     1,     7,
!        7,     6,     7,     6,     2,     2,     0,     1,     1,     0,
!        1,     1,     3,     2,     3,     2,     3,     2,     3,     3,
!        5,     3,     2,     3,     5,     5,     1,     3,     3,     4,
!        1,     2,     5,     2,     1,     1,     1,     1,     3,     1,
!        1,     1,     1,     1,     3,     3,     3,     3,     3,     5,
!        4,     1,     4,     5,     5,     6,     0,     6,     0,     7,
!        3,     3,     1,     3,     3,     3,     3,     4,     4,     4,
!        4,     1,     2,     3,     2,     3,     3,     3,     3,     4,
!        5,     6,     5,     6,     4,     4,     1,     1,     1,     1,
!        2,     2,     1,     1,     2,     2,     1,     2,     2,     1,
!        2,     2,     1,     5,     4,     4,     5,     1,     3,     3,
!        3,     1,     3,     3,     1,     3,     3,     3,     1,     3,
!        3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
!        3,     1,     3,     1,     3,     1,     3,     1,     5,     1,
!        1,     3,     1,     1,     1,     1,     1,     1,     1
  };
  
  /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
*************** static const unsigned char yyr2[] =
*** 961,1701 ****
     means the default is an error.  */
  static const unsigned short int yydefact[] =
  {
!       26,    46,     0,     0,     0,     0,   177,     0,     2,    28,
        29,    27,    34,    39,    40,    36,     0,    43,    44,    45,
        25,     0,    21,    22,    23,   118,    52,     0,     1,    32,
        35,    37,    30,    31,    47,     0,     0,    41,     0,     0,
         0,   122,     0,    54,    38,     0,    33,   120,    52,     0,
        24,    18,   126,    16,     0,   119,     0,     0,    17,    53,
         0,    50,     0,   124,    54,    42,    13,     0,    11,    12,
!      128,     0,     9,    10,    14,    15,    16,     0,   134,   136,
!        0,   135,     0,   130,   132,   133,   127,   123,    56,    55,
!        0,   121,     0,    48,     0,    94,    77,     0,    73,    75,
!       94,     0,    19,    20,     0,     0,   137,   129,   131,     0,
!        0,    51,   125,     0,     0,     0,     0,    84,    71,     0,
!        0,     0,    83,   283,     0,    94,     0,    94,    57,    46,
!        0,    58,    21,     0,    68,     0,    60,    62,    66,    67,
!       81,    63,     0,    64,    94,    69,    65,    70,    49,    87,
!        0,     0,     0,    90,    96,    95,    89,    77,    74,     0,
!        0,     0,     0,     0,     0,     0,   246,     0,     0,     0,
!        0,     7,     6,     3,     4,     5,     8,   245,     0,     0,
!      296,    76,    80,   295,   243,   252,   248,   260,     0,   244,
!      249,   250,   251,   308,   297,   298,   316,   301,   302,   305,
!      311,   320,   323,   327,   333,   336,   338,   340,   342,   344,
!      346,   348,   356,   349,     0,    79,    78,   284,    86,    72,
!       85,    46,     0,     0,   207,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,   144,     0,     9,    15,   296,    23,
!        0,   150,   165,     0,   146,   148,     0,   149,   154,   166,
!        0,   155,   167,     0,   156,   157,   168,     0,   158,     0,
!      169,   159,   215,     0,   170,   171,   172,   174,   176,   173,
!        0,   175,   248,   250,     0,   185,   186,   183,   184,   182,
!        0,    94,    59,    61,     0,   100,     0,    92,     0,    88,
!        0,     0,   296,   249,   251,   303,   304,   307,   306,     0,
!        0,     0,    17,     0,   309,   310,     0,   296,     0,   138,
!        0,   142,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,   300,   299,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,   354,   355,     0,     0,     0,   222,
!        0,   226,     0,     0,     0,     0,   213,   224,     0,   231,
!        0,     0,   152,   178,     0,   145,   147,   151,   235,   179,
!      181,   205,     0,     0,   217,   220,   214,   216,     0,     0,
!      106,     0,     0,    99,    82,    98,     0,   102,    93,    91,
!       97,   257,   286,     0,   274,   280,     0,   275,     0,     0,
!        0,    19,    20,   247,   140,   139,     0,   256,   255,   287,
!        0,   271,     0,   254,   269,   253,   270,   285,     0,     0,
!      317,   318,   319,   321,   322,   324,   325,   326,   329,   331,
!      328,   330,     0,   332,   334,   335,   337,   339,   341,   343,
!      345,     0,   350,     0,   228,   223,   227,     0,     0,     0,
!        0,   236,   239,   237,   225,   232,     0,   230,   247,   153,
!        0,     0,   218,     0,     0,   107,   103,   117,   246,   108,
!      296,     0,     0,     0,   104,     0,     0,   281,   276,   279,
!      277,   278,   259,     0,   313,     0,     0,   314,   141,   143,
!      288,     0,   293,     0,   294,   261,     0,     0,     0,   204,
!        0,     0,   242,   240,   238,     0,     0,   221,     0,   219,
!      218,     0,   105,     0,   109,     0,     0,   110,   291,     0,
!      282,     0,   258,   312,   315,   273,   272,   289,     0,   262,
!      263,   347,     0,   189,     0,   154,     0,   161,   162,     0,
!      163,   164,     0,     0,   192,     0,   229,     0,     0,     0,
!      234,   233,     0,   111,     0,     0,   292,   266,     0,   290,
!      264,     0,     0,   180,   206,     0,     0,     0,   193,     0,
!      197,     0,   200,     0,     0,   210,     0,     0,   112,     0,
!      268,     0,   190,   218,     0,   203,   357,     0,   195,   198,
!        0,   194,   199,   201,   241,   208,   209,     0,     0,   113,
!        0,     0,   218,   202,   196,   115,     0,     0,     0,     0,
!      114,     0,   212,     0,   191,   211
  };
  
  /* YYDEFGOTO[NTERM-NUM]. */
  static const short int yydefgoto[] =
  {
!       -1,     7,   177,   235,   178,    73,    74,    59,    52,   179,
!      180,    22,    23,    24,     8,     9,    10,    11,    12,    13,
!       14,    15,   240,   241,   113,    90,    43,    61,    89,   111,
!      135,   136,   137,    79,    97,    98,    99,   181,   139,   284,
!       80,    95,   152,   153,   117,   155,   384,   141,   142,   143,
!      144,   387,   471,   472,    18,    40,    62,    57,    92,    41,
!       55,    82,    83,    84,    85,   182,   312,   242,   592,   244,
!      245,   246,   247,   534,   248,   249,   250,   251,   537,   252,
!      253,   254,   255,   538,   256,   544,   569,   570,   571,   572,
!      257,   258,   540,   259,   260,   261,   541,   262,   263,   376,
!      508,   509,   264,   265,   266,   267,   268,   269,   270,   271,
!      451,   452,   453,   183,   184,   185,   186,   187,   521,   558,
!      188,   410,   189,   394,   395,   103,   190,   191,   192,   193,
!      194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
!      204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
!      214,   346,   411,   587
  };
  
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
     STATE-NUM.  */
! #define YYPACT_NINF -465
  static const short int yypact[] =
  {
!      237,  -465,   -32,   -32,   -32,   -32,  -465,    83,  -465,   124,
!       -8,   124,  -465,  -465,  -465,  -465,   183,  -465,  -465,  -465,
!     -465,   -38,  -465,  -465,  -465,    51,    97,   276,  -465,    -8,
!     -465,  -465,   124,    -8,  -465,   -32,   -32,  -465,    17,   -32,
!      134,    42,   -32,   150,  -465,   -32,    -8,    51,    97,   191,
!     -465,  -465,  -465,   158,   297,  -465,   -32,   134,  -465,  -465,
!      -32,  -465,   134,    42,   150,  -465,  -465,   -32,  -465,  -465,
!     -465,   -32,   212,  -465,  -465,  -465,   160,   740,  -465,  -465,
!      223,  -465,   549,  -465,  -465,  -465,  -465,  -465,  -465,   232,
!      272,  -465,   134,  -465,   285,    32,   285,    68,  -465,   -14,
!       32,   289,   293,   293,   -32,   -32,  -465,  -465,  -465,   -32,
!      678,  -465,  -465,   272,   121,   -32,   305,  -465,  -465,   -32,
!     1690,   328,  -465,  -465,   349,    32,   147,    32,  -465,   320,
!     2602,  -465,   358,   740,  -465,   761,  -465,  -465,  -465,  -465,
!     -465,  -465,   363,  -465,   346,  -465,  -465,  -465,  -465,  -465,
!      -32,   202,    47,  -465,  -465,   367,  -465,  -465,  -465,  2398,
!     2398,  2398,  2398,   362,   369,     0,  -465,  2398,  2398,  2398,
!     1558,  -465,  -465,  -465,  -465,  -465,  -465,  -465,   253,   374,
!      555,  -465,  -465,   378,   375,  -465,  -465,  -465,   -32,  -465,
!       -2,  -465,   392,   467,  -465,  -465,  -465,  -465,  -465,  -465,
!     -465,   277,   522,   490,   300,   523,   482,   484,   509,   489,
!       23,  -465,  -465,  -465,   464,  -465,  -465,  -465,  -465,  -465,
!     -465,   436,   440,  2398,  -465,    93,  1742,   449,   453,   363,
!      457,   113,  1424,  2398,  -465,   -32,   253,   374,   461,   460,
!      420,  -465,  -465,  2670,  -465,  -465,   475,  -465,  -465,  -465,
!     3078,  -465,  -465,   483,  -465,  -465,  -465,  3078,  -465,  3078,
!     -465,  -465,  3198,   487,  -465,  -465,  -465,  -465,  -465,  -465,
!      499,  -465,   207,   292,   467,   516,   519,  -465,  -465,  -465,
!      450,   346,  -465,  -465,   163,  -465,   488,   497,   -32,  -465,
!      431,   -32,   241,  -465,  -465,  -465,  -465,  -465,  -465,   530,
!      -32,   502,   502,   507,  -465,  -465,   303,   555,   508,  -465,
!      514,  -465,   262,   538,   546,  1808,  1860,   239,   114,  2398,
!      520,  -465,  -465,  2398,  2398,  2398,  2398,  2398,  2398,  2398,
!     2398,  2398,  2398,  2398,  2398,     0,  2398,  2398,  2398,  2398,
!     2398,  2398,  2398,  2398,  -465,  -465,  2398,  2398,   517,  -465,
!      524,  -465,   526,  2398,  2398,   317,  -465,  -465,   528,  -465,
!       28,   534,   518,  -465,   -32,  -465,  -465,  -465,  -465,  -465,
!     -465,  -465,   572,   202,  -465,  -465,  -465,   550,  1926,  2398,
!     -465,   122,   488,  -465,  -465,  -465,  2738,   540,   497,  -465,
!     -465,  -465,   558,  1860,   502,  -465,   327,   502,   327,  1978,
!     2398,   -75,    54,  1220,  -465,  -465,  1624,  -465,  -465,  -465,
!      142,  -465,   557,  -465,  -465,  -465,  -465,   560,   561,  2044,
!     -465,  -465,  -465,   277,   277,   522,   522,   522,   490,   490,
!      490,   490,   212,  -465,   300,   300,   523,   482,   484,   509,
!      489,   570,  -465,   566,  -465,  -465,  -465,   569,   577,   571,
!      363,   317,  -465,  -465,  -465,  -465,  2398,  -465,  -465,   518,
!      579,  3223,  3223,   574,   582,  -465,   586,   369,   588,  -465,
!      591,  2806,   597,  2874,  -465,  2096,   595,  -465,   293,  -465,
!      293,  -465,   602,   208,  -465,  2398,  1220,  -465,  -465,  -465,
!     -465,  1490,  -465,  2162,  -465,   272,   249,  2398,  3146,  -465,
!      604,   431,  -465,  -465,  -465,   601,  2398,  -465,   607,   550,
!     3223,    12,  -465,   455,  -465,  2942,  2214,  -465,  -465,   323,
!     -465,   272,   608,  -465,  -465,  -465,  -465,  -465,   325,  -465,
!      272,  -465,   609,  -465,   649,   650,  3146,  -465,  -465,  3146,
!     -465,  -465,   613,    34,  -465,   612,  -465,   619,  3078,   620,
!     -465,  -465,   625,  -465,   629,   355,  -465,  -465,   272,  -465,
!     -465,  2398,  3078,  -465,  -465,  2280,   631,  2398,  -465,    58,
!     -465,  2466,  -465,   363,   632,  -465,  3078,  2332,  -465,   633,
!     -465,   639,  -465,  3223,   638,  -465,  -465,   646,  -465,  -465,
!     2534,  -465,  3010,  -465,  -465,  -465,  -465,   641,   371,  -465,
!     3146,   647,  3223,  -465,  -465,  -465,   648,   690,  3146,   652,
!     -465,  3146,  -465,  3146,  -465,  -465
  };
  
  /* YYPGOTO[NTERM-NUM].  */
  static const short int yypgoto[] =
  {
!     -465,  -465,  -465,   -11,   -10,   415,   -19,   -87,    19,   240,
!      106,   102,  -465,    -3,  -465,   741,    41,  -465,    44,  -465,
!     -465,    48,    16,   635,  -465,  -465,   706,   692,  -465,  -108,
!     -465,   622,  -465,   -76,  -102,   640,  -136,  -164,  -465,  -465,
!       29,    86,   478,  -282,   -70,  -465,  -465,  -465,  -465,  -465,
!      627,   382,  -465,  -465,     7,  -465,  -465,  -465,  -465,   721,
!      101,  -465,   689,  -465,  -465,    60,  -465,   -95,  -128,  -239,
!     -465,   511,   468,  -313,  -429,   167,  -210,  -465,  -465,  -465,
!     -255,  -465,  -465,  -465,  -465,  -465,  -465,   209,   211,  -436,
!     -124,  -465,  -465,  -465,  -465,  -465,  -465,  -465,   -84,  -465,
!     -464,   515,  -465,  -465,  -465,  -465,  -465,  -465,  -465,  -465,
!     -465,   330,   332,  -465,  -465,  -465,    80,  -465,  -465,  -465,
!     -465,  -380,  -465,   485,  -199,    65,  1069,   161,  1122,   324,
!      381,   469,  -150,   539,   594,  -372,  -465,   243,     3,    76,
!      235,   452,   454,   448,   451,   462,  -465,   302,   463,   752,
!     -465,  -465,   873,  -465
  };
  
  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
     positive, shift that token.  If negative, reduce the rule which
     number is the opposite.  If zero, do what YYDEFACT says.
     If YYTABLE_NINF, syntax error.  */
! #define YYTABLE_NINF -354
  static const short int yytable[] =
  {
!       25,    26,   243,   126,   366,   148,   311,   375,   389,   295,
!      296,   297,   298,   550,   287,   146,    16,   304,   305,   483,
!       51,   485,    49,    58,   124,    16,    16,    16,   154,   455,
!      122,   487,    47,    48,   138,    50,     1,    51,   342,   496,
!      146,    51,    50,    71,    72,    16,   549,   285,    16,    16,
!       29,    66,    33,    30,     3,   218,    20,   220,    31,   138,
!        4,    81,    16,    37,    94,    38,   105,    72,    96,   535,
!       77,    71,    72,    46,   286,    86,    30,    31,   303,    88,
!      120,    31,   566,    28,    68,   121,   115,    69,    20,    81,
!       51,  -352,  -352,     6,    31,   519,    58,   567,    77,    71,
!       72,    94,    96,   150,    72,    20,   566,   535,    21,   130,
!      535,    27,   343,   528,   524,    39,   157,   145,   456,   601,
!      236,   567,   105,    72,    71,    72,   133,   239,   128,   457,
!      151,   116,   568,   362,   355,   593,   555,   102,   609,   140,
!      288,    72,   145,   289,    56,    53,   302,   157,    53,   290,
!      486,   133,   388,   124,   593,   301,   588,   100,    87,   306,
!       76,    42,    53,    91,   140,     1,    53,    19,     1,   118,
!      119,   535,    66,   420,   421,   422,    19,    19,    19,   535,
!        2,    20,   535,    76,   535,   320,     3,   416,    76,   385,
!      125,   127,     4,   112,   349,   477,    19,   598,   477,    19,
!       19,    20,    20,    60,   390,    68,   507,   375,    69,    20,
!      272,   382,   132,    19,   357,    53,    76,   149,   465,   545,
!       76,    53,   350,   563,   290,     6,   564,    34,   358,   364,
!       72,    54,   157,   236,   366,   132,   238,   132,   490,    76,
!      239,    76,   489,   102,   491,    35,    34,   239,   219,   119,
!      484,    36,   236,    66,   239,   375,   239,    76,   473,   101,
!      130,    45,   459,    45,   383,   292,   292,   292,   292,   150,
!       72,    53,    58,   292,   292,   307,   366,   147,   373,   150,
!       72,     1,   323,   324,   325,   157,    68,   607,   536,    69,
!       20,   273,    65,     2,    75,   612,   151,   392,   614,     3,
!      615,   102,   147,  -188,   522,     4,   151,   413,  -188,  -188,
!      491,   101,   414,     5,    50,   417,   415,    75,   331,   332,
!      333,   334,    75,   272,   106,   432,   536,    20,   375,   536,
!      272,   425,   426,   427,   109,   523,   315,   272,     6,   272,
!      316,     1,   272,   515,   317,   530,    76,   375,    66,   238,
!       75,   491,   101,   366,    75,   502,   313,    67,   335,     3,
!      405,   157,   364,    72,   406,     4,   396,   398,   238,   110,
!      237,   401,   402,    75,   539,    75,   236,    44,   449,    45,
!      114,    68,   450,   239,    69,    20,    76,   529,  -187,   123,
!      536,    75,   124,  -187,  -187,    70,    76,    53,   536,   400,
!      115,   536,   101,   536,   273,   156,   313,   428,   429,   430,
!      431,   273,   539,   557,   542,   539,   551,  -101,   273,   556,
!      273,   559,   560,   273,   170,   491,   124,   491,   216,   292,
!      292,   292,   292,   292,   292,   292,   292,   292,   292,   292,
!      292,    76,   292,   292,   292,   292,   292,   292,   292,   217,
!      580,   579,   542,   280,   274,   542,   479,   491,   481,   478,
!      130,   236,   480,   236,    34,   299,   272,   606,   239,   291,
!      239,    66,   300,   491,   319,     1,   539,   314,   594,    76,
!       75,   318,    66,   237,   539,  -353,  -353,   539,    36,   539,
!      150,    72,   470,   338,     1,   239,   339,   102,   328,   329,
!      330,    66,   237,   341,    68,   236,   292,    69,    20,   292,
!       50,   275,   239,   321,   322,    68,   542,   151,    69,    20,
!       75,   552,   340,   413,   542,   326,   327,   542,   414,   542,
!       75,  -235,   415,   239,    68,   347,   239,    69,    20,   336,
!      337,   272,   272,    20,   353,   239,   380,   273,   354,   -16,
!      363,   272,   356,   272,  -351,  -351,   315,   344,   345,   239,
!      316,   236,  -297,  -297,   317,  -298,  -298,   274,   239,   423,
!      424,   434,   435,   239,   274,    75,   367,   238,   272,   238,
!      236,   274,   236,   274,   370,   386,   274,   239,   378,   239,
!      272,   292,   292,     1,   379,   272,   121,   239,   391,   276,
!       66,   393,   399,   292,   403,   239,   407,    76,   239,    67,
!      239,     3,   404,    75,   408,   419,   272,     4,   444,   272,
!      119,   238,   273,   273,   275,   445,   237,   446,   272,   454,
!      458,   275,   273,    68,   273,    17,    69,    20,   275,   460,
!      275,   474,   272,   275,    17,    17,    17,   107,  -351,  -351,
!      315,   272,   461,   475,   316,   493,   272,   492,   317,   273,
!      497,   494,   498,   272,    17,   499,   501,    17,    17,   277,
!      272,   273,   272,   500,   506,   510,   273,   238,   511,   -16,
!      272,    17,   272,  -116,  -351,  -351,   315,   512,   272,    78,
!      316,   272,   516,   272,   513,   520,   238,   273,   238,  -265,
!      273,   543,   546,   548,   561,  -267,   562,  -160,   573,   273,
!      274,   237,   276,   237,   565,   574,   576,    78,   369,   276,
!      577,   585,   129,   273,   278,   371,   276,   372,   276,    66,
!      578,   276,   273,   595,   599,   600,   603,   273,    67,   602,
!        3,    75,   605,   608,   273,   134,     4,   611,   613,   610,
!      433,   273,    32,   273,    64,   237,    93,   283,   381,   158,
!      281,   273,    68,   273,   466,    69,    20,   275,    63,   273,
!      134,   108,   273,   374,   273,   130,   131,   377,   589,     6,
!      590,   503,   277,   504,    34,   274,   274,   397,   438,   277,
!      436,    66,   439,   437,     0,   274,   277,   274,   277,   531,
!      104,   277,    35,     0,   440,   129,     0,     0,    36,   442,
!        0,   237,    66,     0,     0,     0,     0,     0,     0,     0,
!        0,    67,   274,     3,    68,     0,     0,    69,    20,     4,
!      237,     0,   237,     0,   274,     0,     0,   278,     0,   274,
!        0,     0,   275,   275,   278,    68,     0,     0,    69,    20,
!        0,   278,   275,   278,   275,   276,   278,     0,   130,   282,
!      274,     0,     6,   274,     0,     0,     0,     0,     0,     0,
!        0,     0,   274,     0,     0,     0,     0,     0,     0,   275,
!        0,     0,   279,     0,     0,     0,   274,     0,     0,     0,
!        0,   275,     0,     0,     0,   274,   275,     0,     0,     0,
!      274,     0,     0,     0,     0,     0,     0,   274,     0,     0,
!        0,     0,     0,     0,   274,     0,   274,   275,     0,     0,
!      275,     0,     0,     0,   274,   277,   274,     0,     0,   275,
!      276,   276,   274,     0,     0,   274,     0,   274,     0,     0,
!      276,     0,   276,   275,     0,     0,     0,     0,     0,     0,
!        0,     0,   275,     0,     0,     0,     0,   275,     0,     0,
!        0,     0,     0,     0,   275,     0,   533,   276,     0,     0,
!        0,   275,     0,   275,     0,     0,     0,     0,     0,   276,
!      278,   275,     0,   275,   276,     0,     0,     0,     0,   275,
!        0,     0,   275,   215,   275,   279,     0,     0,     0,     0,
!      277,   277,   279,     0,   369,   276,     0,   371,   276,   279,
!      277,   279,   277,     0,   279,     0,   575,   276,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!      582,   276,     0,     0,     0,     0,     0,   277,     0,     0,
!      276,     0,   308,   215,   596,   276,     0,     0,     0,   277,
!        0,     0,   276,     0,   277,   278,   278,     0,     0,   276,
!        0,   276,     0,     0,     0,   278,     0,   278,   533,   276,
!        0,   276,     0,     0,     0,   277,   575,   276,   277,   582,
!      276,   596,   276,     0,     0,     0,     0,   277,     0,     0,
!        0,     0,   278,     0,     0,     0,   348,     0,     0,   352,
!        0,   277,     0,     0,   278,   360,   361,     0,     0,   278,
!      277,     0,     0,     0,     0,   277,     0,     0,     0,     0,
!        0,     0,   277,     0,     0,     0,     0,     0,     0,   277,
!      278,   277,     0,   278,     0,     0,     0,     0,   279,   277,
!        0,   277,   278,     0,     0,     0,     0,   277,     0,     0,
!      277,     0,   277,     0,     0,     0,   278,     0,     0,     0,
!        0,     0,     0,     0,     0,   278,     0,     0,     0,     0,
!      278,     0,     0,     0,     0,     0,     0,   278,     0,     0,
!        0,     0,     0,     0,   278,     0,   278,     0,     0,   412,
!        0,     0,   418,     0,   278,     0,   278,     0,     0,     0,
!        0,     0,   278,     0,     0,   278,     0,   278,     0,     0,
!        0,     0,     0,   279,   279,     0,   441,     0,     0,     0,
!      443,     0,     0,   279,     0,   279,   447,   448,   293,   293,
!      293,   293,     0,     0,     0,     0,   293,   293,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!      279,   463,   464,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,   279,     0,     0,     0,   476,   279,     0,     0,
!        0,    66,     0,     0,     0,     0,     0,     0,     0,   215,
!      163,   294,   294,   294,   294,     0,   164,     0,   279,   294,
!      294,   279,     0,   165,     0,     0,     0,   166,     0,     0,
!      279,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,   167,   168,     0,   279,   169,     0,     0,     0,     0,
!        0,     0,     0,   279,   171,   172,   173,   174,   279,   505,
!      175,   176,     0,     0,     0,   279,     0,     0,     0,     0,
!        0,     0,   279,     0,   279,     0,     0,     0,     0,     0,
!        0,     0,   279,     0,   279,     0,     0,     0,     0,     0,
!      279,     0,     0,   279,   526,   279,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,   547,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,   293,   293,   293,   293,   293,   293,   293,   293,
!      293,   293,   293,   293,     0,   293,   293,   293,   293,   293,
!      293,   293,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,   359,     0,   159,   160,     0,
!        0,     0,     0,     0,   581,     0,     0,     0,   584,     0,
!      586,     0,     0,     0,     0,   294,   294,   294,   294,   294,
!      294,   294,   294,   294,   294,   294,   294,     0,   294,   294,
!      294,   294,   294,   294,   294,     0,     0,     0,     0,   293,
!      161,   162,   293,     0,     0,    66,     0,     0,     0,     0,
!        0,     0,     0,     0,   163,     0,     0,     0,     0,     0,
!      164,   525,     0,   159,   160,     0,     0,   165,     0,     0,
!        0,   166,     0,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,   167,   168,     0,     0,   169,
!        0,     0,   294,     0,     0,   294,     0,     0,   171,   172,
!      173,   174,     0,     0,   175,   176,   161,   162,     0,     0,
!        0,    66,     0,     0,     0,     0,     0,     0,     0,     0,
!      163,     0,     0,     0,   293,   293,   164,     0,     0,     0,
!        0,   159,   160,   165,     0,     0,   293,   166,     0,     0,
!        0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,   167,   168,     0,     0,   169,     0,     0,     0,     0,
!        0,     0,     0,     0,   171,   172,   173,   174,     0,     0,
!      175,   176,     0,     0,   161,   162,     0,   294,   294,    66,
!        0,     0,     0,     0,     0,     0,     0,     0,   163,   294,
!        0,     0,     0,     0,   164,     0,     0,   159,   160,     0,
!        0,   165,     0,     0,     0,   166,     0,     0,     0,     0,
!        0,     0,    68,     0,     0,    69,    20,     0,     0,   167,
!      168,     0,     0,   169,     0,   170,   309,     0,     0,     0,
!      310,     0,   171,   172,   173,   174,     0,     0,   175,   176,
!      161,   162,     0,     0,     0,    66,     0,     0,     0,     0,
!        0,     0,     0,     0,   163,     0,     0,     0,     0,     0,
!      164,     0,     0,   159,   160,     0,     0,   165,     0,     0,
!        0,   166,     0,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,   167,   168,     0,     0,   169,
!        0,   170,   488,     0,     0,     0,     0,     0,   171,   172,
!      173,   174,     0,     0,   175,   176,   161,   162,     0,     0,
!        0,    66,     0,     0,     0,   159,   160,     0,     0,     0,
!      163,     0,     0,     0,     0,     0,   164,     0,     0,     0,
!        0,     0,     0,   165,     0,     0,     0,   166,     0,     0,
!        0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,   167,   168,     0,     0,   169,     0,   170,   161,   162,
!        0,     0,     0,    66,   171,   172,   173,   174,     0,     0,
!      175,   176,   163,     0,     0,     0,     0,     0,   164,     0,
!        0,   159,   160,     0,     0,   165,     0,     0,     0,   166,
         0,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,   167,   168,     0,     0,   169,     0,     0,
!        0,     0,     0,   351,     0,     0,   171,   172,   173,   174,
!        0,     0,   175,   176,   161,   162,     0,     0,     0,    66,
!        0,     0,     0,   159,   160,     0,     0,     0,   163,     0,
!        0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
!        0,   165,     0,     0,     0,   166,     0,     0,     0,     0,
!        0,     0,    68,     0,     0,    69,    20,     0,     0,   167,
!      168,     0,     0,   169,   409,     0,   161,   162,     0,     0,
!        0,    66,   171,   172,   173,   174,     0,     0,   175,   176,
!      163,     0,     0,     0,     0,     0,   164,     0,     0,   159,
!      160,     0,     0,   165,     0,     0,     0,   166,     0,     0,
         0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,   167,   168,     0,     0,   169,     0,     0,     0,     0,
!      123,     0,     0,     0,   171,   172,   173,   174,     0,     0,
!      175,   176,   161,   162,     0,     0,     0,    66,     0,     0,
!        0,   159,   160,     0,     0,     0,   163,     0,     0,     0,
!        0,     0,   164,     0,     0,     0,     0,     0,     0,   165,
!        0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
!       68,     0,     0,    69,    20,     0,     0,   167,   168,     0,
!        0,   169,     0,     0,   161,   162,     0,   462,     0,    66,
!      171,   172,   173,   174,     0,     0,   175,   176,   163,     0,
!        0,     0,     0,     0,   164,     0,     0,   159,   160,     0,
!        0,   165,     0,     0,     0,   166,     0,     0,     0,     0,
!        0,     0,    68,     0,     0,    69,    20,     0,     0,   167,
!      168,     0,     0,   169,   482,     0,     0,     0,     0,     0,
!        0,     0,   171,   172,   173,   174,     0,     0,   175,   176,
!      161,   162,     0,     0,     0,    66,     0,     0,     0,   159,
!      160,     0,     0,     0,   163,     0,     0,     0,     0,     0,
!      164,     0,     0,     0,     0,     0,     0,   165,     0,     0,
!        0,   166,     0,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,   167,   168,     0,     0,   169,
!      495,     0,   161,   162,     0,     0,     0,    66,   171,   172,
!      173,   174,     0,     0,   175,   176,   163,     0,     0,     0,
!        0,     0,   164,     0,     0,   159,   160,     0,     0,   165,
!        0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
!       68,     0,     0,    69,    20,     0,     0,   167,   168,     0,
!        0,   169,   518,     0,     0,     0,     0,     0,     0,     0,
!      171,   172,   173,   174,     0,     0,   175,   176,   161,   162,
!        0,     0,     0,    66,     0,     0,     0,   159,   160,     0,
!        0,     0,   163,     0,     0,     0,     0,     0,   164,     0,
!        0,     0,     0,     0,     0,   165,     0,     0,     0,   166,
         0,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,   167,   168,     0,     0,   169,   527,     0,
!      161,   162,     0,     0,     0,    66,   171,   172,   173,   174,
!        0,     0,   175,   176,   163,     0,     0,     0,     0,     0,
!      164,     0,     0,   159,   160,     0,     0,   165,     0,     0,
!        0,   166,     0,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,   167,   168,     0,     0,   169,
!      554,     0,     0,     0,     0,     0,     0,     0,   171,   172,
!      173,   174,     0,     0,   175,   176,   161,   162,     0,     0,
!        0,    66,     0,     0,     0,   159,   160,     0,     0,     0,
!      163,     0,     0,     0,     0,     0,   164,     0,     0,     0,
!        0,     0,     0,   165,     0,     0,     0,   166,     0,     0,
         0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,   167,   168,     0,     0,   169,     0,     0,   161,   162,
!        0,   583,     0,    66,   171,   172,   173,   174,     0,     0,
!      175,   176,   163,     0,     0,     0,     0,     0,   164,     0,
!        0,   159,   160,     0,     0,   165,     0,     0,     0,   166,
         0,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,   167,   168,     0,     0,   169,   597,     0,
!        0,     0,     0,     0,     0,     0,   171,   172,   173,   174,
!        0,     0,   175,   176,   161,   162,     0,     0,     0,    66,
!        0,     0,     0,     0,     0,     0,     0,     0,   163,     0,
!        0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
!        0,   165,     0,     0,     0,   166,     0,     0,     0,     0,
!        0,     0,    68,     0,     0,    69,    20,     0,     0,   167,
!      168,     0,     0,   169,     0,     0,     0,     0,     0,     0,
!        0,     0,   171,   172,   173,   174,     0,     0,   175,   176,
!      221,     0,   161,   162,   566,   222,   223,    66,   224,     0,
!        0,   225,     0,     0,     0,   226,   163,     0,     0,   567,
!        0,     0,   164,   227,     4,   228,     0,   229,   230,   165,
!      231,     0,     0,   166,   232,     0,     0,     0,     0,     0,
!       68,     0,     0,    69,    20,     0,     0,     0,     0,     0,
!        0,   233,     0,   130,   591,     0,     0,     6,     0,     0,
!      171,   172,   173,   174,     0,     0,   175,   176,   221,     0,
!      161,   162,   566,   222,   223,    66,   224,     0,     0,   225,
!        0,     0,     0,   226,   163,     0,     0,   567,     0,     0,
!      164,   227,     4,   228,     0,   229,   230,   165,   231,     0,
!        0,   166,   232,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,     0,     0,     0,     0,   233,
!        0,   130,   604,     0,     0,     6,     0,     0,   171,   172,
!      173,   174,     0,     0,   175,   176,   221,     0,   161,   162,
!        0,   222,   223,    66,   224,     0,     0,   225,     0,     0,
!        0,   226,   163,     0,     0,     0,     0,     0,   164,   227,
!        4,   228,     0,   229,   230,   165,   231,     0,     0,   166,
!      232,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,     0,     0,     0,     0,   233,     0,   130,
!      234,     0,     0,     6,     0,     0,   171,   172,   173,   174,
!        0,     0,   175,   176,   221,     0,   161,   162,     0,   222,
!      223,    66,   224,     0,     0,   225,     0,     0,     0,   226,
!      163,     0,     0,     0,     0,     0,   164,   227,     4,   228,
!        0,   229,   230,   165,   231,     0,     0,   166,   232,     0,
         0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,     0,     0,     0,     0,   233,     0,   130,   365,     0,
!        0,     6,     0,     0,   171,   172,   173,   174,     0,     0,
!      175,   176,   221,     0,   161,   162,     0,   222,   223,    66,
!      224,     0,     0,   225,     0,     0,     0,   226,   163,     0,
!        0,     0,     0,     0,   467,   227,     4,   228,     0,   229,
!      230,   165,   231,     0,     0,   468,   232,     0,     0,     0,
         0,     0,    68,     0,     0,    69,    20,     0,     0,     0,
!        0,     0,     0,   233,     0,   130,   469,     0,     0,     6,
!        0,     0,   171,   172,   173,   174,     0,     0,   175,   176,
!      221,     0,   161,   162,     0,   222,   223,    66,   224,     0,
!        0,   225,     0,     0,     0,   226,   163,     0,     0,     0,
!        0,     0,   164,   227,     4,   228,     0,   229,   230,   165,
!      231,     0,     0,   166,   232,     0,     0,     0,     0,     0,
        68,     0,     0,    69,    20,     0,     0,     0,     0,     0,
!        0,   233,     0,   130,   514,     0,     0,     6,     0,     0,
!      171,   172,   173,   174,     0,     0,   175,   176,   221,     0,
!      161,   162,     0,   222,   223,    66,   224,     0,     0,   225,
!        0,     0,     0,   226,   163,     0,     0,     0,     0,     0,
!      164,   227,     4,   228,     0,   229,   230,   165,   231,     0,
!        0,   166,   232,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,     0,     0,     0,     0,   233,
!        0,   130,   517,     0,     0,     6,     0,     0,   171,   172,
!      173,   174,     0,     0,   175,   176,   221,     0,   161,   162,
!        0,   222,   223,    66,   224,     0,     0,   225,     0,     0,
!        0,   226,   163,     0,     0,     0,     0,     0,   164,   227,
!        4,   228,     0,   229,   230,   165,   231,     0,     0,   166,
!      232,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,     0,     0,     0,     0,   233,     0,   130,
!      553,     0,     0,     6,     0,     0,   171,   172,   173,   174,
!        0,     0,   175,   176,   221,     0,   161,   162,     0,   222,
!      223,    66,   224,     0,     0,   225,     0,     0,     0,   226,
!      163,     0,     0,     0,     0,     0,   164,   227,     4,   228,
!        0,   229,   230,   165,   231,     0,     0,   166,   232,     0,
         0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,     0,     0,     0,     0,   233,     0,   130,     0,     0,
!        0,     6,     0,     0,   171,   172,   173,   174,     0,     0,
!      175,   176,   368,     0,   161,   162,     0,   222,   223,    66,
!      224,     0,     0,   225,     0,     0,     0,   226,   163,     0,
!        0,     0,     0,     0,   164,   227,     0,   228,     0,   229,
!      230,   165,   231,     0,     0,   166,   232,     0,     0,     0,
         0,     0,    68,     0,     0,    69,    20,     0,     0,     0,
!        0,     0,     0,   233,     0,   130,     0,     0,     0,     6,
!        0,     0,   171,   172,   173,   174,     0,     0,   175,   176,
!      368,     0,   161,   162,     0,   532,   223,    66,   224,     0,
!        0,   225,     0,     0,     0,   226,   163,     0,     0,     0,
!        0,     0,   164,   227,     0,   228,     0,   229,   230,   165,
!      231,     0,     0,   166,   232,     0,     0,     0,     0,     0,
        68,     0,     0,    69,    20,     0,     0,     0,     0,     0,
!        0,   233,     1,   130,   161,   162,     0,     6,     0,    66,
!      171,   172,   173,   174,     0,     0,   175,   176,   163,     0,
!        0,     0,     0,     0,   164,     0,     0,     0,     0,   161,
!      162,   165,     0,     0,    66,   166,     0,     0,     0,     0,
!        0,     0,    68,   163,     0,    69,    20,     0,     0,   164,
!        0,     0,     0,   233,     0,     0,   165,     0,     0,     0,
!      166,     0,   171,   172,   173,   174,     0,    68,   175,   176,
!       69,    20,     0,     0,     0,     0,     0,     0,   233,     0,
!        0,     0,     0,     0,     0,     0,     0,   171,   172,   173,
!      174,     0,     0,   175,   176
  };
  
  static const short int yycheck[] =
  {
!        3,     4,   130,   105,   243,   113,   170,   262,   290,   159,
!      160,   161,   162,     1,   150,   110,     0,   167,   168,   399,
!       39,    96,     5,    42,    99,     9,    10,    11,   115,     1,
!      100,   403,    35,    36,   110,    38,    44,    56,    15,   419,
!      135,    60,    45,    54,    54,    29,   510,   142,    32,    33,
!        9,    51,    11,     9,    62,   125,    88,   127,    10,   135,
!       68,    54,    46,   101,    67,   103,    77,    77,    71,   498,
!       54,    82,    82,    32,   144,    56,    32,    29,   165,    60,
!       94,    33,    48,     0,    84,    99,    54,    87,    88,    82,
!      109,    93,    94,   101,    46,   475,   115,    63,    82,   110,
!      110,   104,   105,   114,   114,    88,    48,   536,     2,    97,
!      539,     5,    89,   493,   486,    64,   119,   110,    90,   583,
!      130,    63,   133,   133,   135,   135,   110,   130,   109,   101,
!      114,    99,    98,   235,   229,   571,   516,    72,   602,   110,
!      151,   151,   135,    96,   102,    39,   165,   150,    42,   102,
!       96,   135,   288,    99,   590,   165,    98,    71,    57,   169,
!       54,    64,    56,    62,   135,    44,    60,     0,    44,   101,
!      102,   600,    51,   323,   324,   325,     9,    10,    11,   608,
!       56,    88,   611,    77,   613,   188,    62,    73,    82,   284,
!      104,   105,    68,    92,   101,   394,    29,   577,   397,    32,
!       33,    88,    88,    53,   291,    84,   461,   462,    87,    88,
!      130,   281,   110,    46,   101,   109,   110,    96,    96,   501,
!      114,   115,   225,   536,   102,   101,   539,    44,   231,   240,
!      240,    97,   235,   243,   473,   133,   130,   135,    96,   133,
!      243,   135,   406,   178,   102,    62,    44,   250,   101,   102,
!      400,    68,   262,    51,   257,   510,   259,   151,   386,    99,
!       97,   103,   364,   103,   101,   159,   160,   161,   162,   280,
!      280,   165,   291,   167,   168,   169,   515,   110,   262,   290,
!      290,    44,     5,     6,     7,   288,    84,   600,   498,    87,
!       88,   130,   101,    56,    54,   608,   280,   300,   611,    62,
!      613,   236,   135,    96,    96,    68,   290,    68,   101,   102,
!      102,    99,    73,    76,   317,   318,    77,    77,    18,    19,
!       20,    21,    82,   243,   101,   335,   536,    88,   583,   539,
!      250,   328,   329,   330,   102,   485,    95,   257,   101,   259,
!       99,    44,   262,   471,   103,    96,   240,   602,    51,   243,
!      110,   102,    99,   592,   114,   450,   103,    60,    58,    62,
!       98,   364,   373,   373,   102,    68,   301,   302,   262,    97,
!      130,   306,   307,   133,   498,   135,   386,   101,    61,   103,
!       95,    84,    65,   386,    87,    88,   280,   495,    96,   100,
!      600,   151,    99,   101,   102,    98,   290,   291,   608,    96,
!       54,   611,    99,   613,   243,   100,   103,   331,   332,   333,
!      334,   250,   536,   521,   498,   539,   511,    97,   257,    96,
!      259,    96,   530,   262,    97,   102,    99,   102,   100,   323,
!      324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
!      334,   335,   336,   337,   338,   339,   340,   341,   342,   100,
!      558,    96,   536,    95,   130,   539,   396,   102,   398,   394,
!       97,   471,   397,   473,    44,   103,   386,    96,   471,   102,
!      473,    51,   103,   102,    99,    44,   600,   103,   573,   373,
!      240,   103,    51,   243,   608,    93,    94,   611,    68,   613,
!      501,   501,   386,    11,    44,   498,    12,   432,     8,     9,
!       10,    51,   262,    14,    84,   515,   400,    87,    88,   403,
!      513,   130,   515,    46,    47,    84,   600,   501,    87,    88,
!      280,    66,    13,    68,   608,     3,     4,   611,    73,   613,
!      290,    95,    77,   536,    84,    95,   539,    87,    88,    16,
!       17,   461,   462,    88,    95,   548,    96,   386,    95,    88,
!       90,   471,    95,   473,    93,    94,    95,    93,    94,   562,
!       99,   571,    46,    47,   103,    46,    47,   243,   571,   326,
!      327,   336,   337,   576,   250,   335,   101,   471,   498,   473,
!      590,   257,   592,   259,   101,    97,   262,   590,   101,   592,
!      510,   485,   486,    44,    95,   515,    99,   600,    68,   130,
!       51,    99,    95,   497,    96,   608,    68,   501,   611,    60,
!      613,    62,    98,   373,    68,    95,   536,    68,   101,   539,
!      102,   515,   461,   462,   243,   101,   386,   101,   548,   101,
!       96,   250,   471,    84,   473,     0,    87,    88,   257,    67,
!      259,   101,   562,   262,     9,    10,    11,    98,    93,    94,
!       95,   571,   102,    95,    99,    95,   576,   100,   103,   498,
!       90,   100,    96,   583,    29,    96,    95,    32,    33,   130,
!      590,   510,   592,    96,    95,   101,   515,   571,    96,    88,
!      600,    46,   602,    95,    93,    94,    95,   101,   608,    54,
!       99,   611,    95,   613,   103,   100,   590,   536,   592,    97,
!      539,    97,   101,    96,    95,    97,    57,    57,    96,   548,
!      386,   471,   243,   473,   101,    96,    96,    82,   250,   250,
!       95,    90,    44,   562,   130,   257,   257,   259,   259,    51,
!      101,   262,   571,   101,   101,    96,    90,   576,    60,   101,
!       62,   501,   101,    96,   583,   110,    68,    57,    96,   101,
!      335,   590,    11,   592,    48,   515,    64,   135,   280,   119,
!      133,   600,    84,   602,   382,    87,    88,   386,    47,   608,
!      135,    82,   611,   262,   613,    97,    98,   262,   569,   101,
!      569,   451,   243,   451,    44,   461,   462,   302,   340,   250,
!      338,    51,   341,   339,    -1,   471,   257,   473,   259,   497,
!       60,   262,    62,    -1,   342,    44,    -1,    -1,    68,   346,
!       -1,   571,    51,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    60,   498,    62,    84,    -1,    -1,    87,    88,    68,
!      590,    -1,   592,    -1,   510,    -1,    -1,   243,    -1,   515,
!       -1,    -1,   461,   462,   250,    84,    -1,    -1,    87,    88,
!       -1,   257,   471,   259,   473,   386,   262,    -1,    97,    98,
!      536,    -1,   101,   539,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   548,    -1,    -1,    -1,    -1,    -1,    -1,   498,
!       -1,    -1,   130,    -1,    -1,    -1,   562,    -1,    -1,    -1,
!       -1,   510,    -1,    -1,    -1,   571,   515,    -1,    -1,    -1,
!      576,    -1,    -1,    -1,    -1,    -1,    -1,   583,    -1,    -1,
!       -1,    -1,    -1,    -1,   590,    -1,   592,   536,    -1,    -1,
!      539,    -1,    -1,    -1,   600,   386,   602,    -1,    -1,   548,
!      461,   462,   608,    -1,    -1,   611,    -1,   613,    -1,    -1,
!      471,    -1,   473,   562,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   571,    -1,    -1,    -1,    -1,   576,    -1,    -1,
!       -1,    -1,    -1,    -1,   583,    -1,   498,   498,    -1,    -1,
!       -1,   590,    -1,   592,    -1,    -1,    -1,    -1,    -1,   510,
!      386,   600,    -1,   602,   515,    -1,    -1,    -1,    -1,   608,
!       -1,    -1,   611,   120,   613,   243,    -1,    -1,    -1,    -1,
!      461,   462,   250,    -1,   536,   536,    -1,   539,   539,   257,
!      471,   259,   473,    -1,   262,    -1,   548,   548,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!      562,   562,    -1,    -1,    -1,    -1,    -1,   498,    -1,    -1,
!      571,    -1,   169,   170,   576,   576,    -1,    -1,    -1,   510,
!       -1,    -1,   583,    -1,   515,   461,   462,    -1,    -1,   590,
!       -1,   592,    -1,    -1,    -1,   471,    -1,   473,   600,   600,
!       -1,   602,    -1,    -1,    -1,   536,   608,   608,   539,   611,
!      611,   613,   613,    -1,    -1,    -1,    -1,   548,    -1,    -1,
!       -1,    -1,   498,    -1,    -1,    -1,   223,    -1,    -1,   226,
!       -1,   562,    -1,    -1,   510,   232,   233,    -1,    -1,   515,
!      571,    -1,    -1,    -1,    -1,   576,    -1,    -1,    -1,    -1,
!       -1,    -1,   583,    -1,    -1,    -1,    -1,    -1,    -1,   590,
!      536,   592,    -1,   539,    -1,    -1,    -1,    -1,   386,   600,
!       -1,   602,   548,    -1,    -1,    -1,    -1,   608,    -1,    -1,
!      611,    -1,   613,    -1,    -1,    -1,   562,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,   571,    -1,    -1,    -1,    -1,
!      576,    -1,    -1,    -1,    -1,    -1,    -1,   583,    -1,    -1,
!       -1,    -1,    -1,    -1,   590,    -1,   592,    -1,    -1,   316,
!       -1,    -1,   319,    -1,   600,    -1,   602,    -1,    -1,    -1,
!       -1,    -1,   608,    -1,    -1,   611,    -1,   613,    -1,    -1,
!       -1,    -1,    -1,   461,   462,    -1,   343,    -1,    -1,    -1,
!      347,    -1,    -1,   471,    -1,   473,   353,   354,   159,   160,
!      161,   162,    -1,    -1,    -1,    -1,   167,   168,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!      498,   378,   379,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   510,    -1,    -1,    -1,   393,   515,    -1,    -1,
!       -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   406,
!       60,   159,   160,   161,   162,    -1,    66,    -1,   536,   167,
!      168,   539,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!      548,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,   562,    95,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   571,   104,   105,   106,   107,   576,   456,
!      110,   111,    -1,    -1,    -1,   583,    -1,    -1,    -1,    -1,
!       -1,    -1,   590,    -1,   592,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   600,    -1,   602,    -1,    -1,    -1,    -1,    -1,
!      608,    -1,    -1,   611,   491,   613,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   506,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   323,   324,   325,   326,   327,   328,   329,   330,
!      331,   332,   333,   334,    -1,   336,   337,   338,   339,   340,
!      341,   342,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,    -1,
!       -1,    -1,    -1,    -1,   561,    -1,    -1,    -1,   565,    -1,
!      567,    -1,    -1,    -1,    -1,   323,   324,   325,   326,   327,
!      328,   329,   330,   331,   332,   333,   334,    -1,   336,   337,
!      338,   339,   340,   341,   342,    -1,    -1,    -1,    -1,   400,
!       46,    47,   403,    -1,    -1,    51,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
!       66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,
!       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    -1,   400,    -1,    -1,   403,    -1,    -1,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,
!       -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       60,    -1,    -1,    -1,   485,   486,    66,    -1,    -1,    -1,
!       -1,     3,     4,    73,    -1,    -1,   497,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    -1,    -1,    46,    47,    -1,   485,   486,    51,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,   497,
!       -1,    -1,    -1,    -1,    66,    -1,    -1,     3,     4,    -1,
!       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    97,    98,    -1,    -1,    -1,
!      102,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       46,    47,    -1,    -1,    -1,    51,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
!       66,    -1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,
!       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    97,    98,    -1,    -1,    -1,    -1,    -1,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,
!       -1,    51,    -1,    -1,    -1,     3,     4,    -1,    -1,    -1,
!       60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
        -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    97,    46,    47,
!       -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
        -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,
        -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
!       -1,    -1,    -1,   101,    -1,    -1,   104,   105,   106,   107,
        -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,
        -1,    -1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,
        -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
        -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    96,    -1,    46,    47,    -1,    -1,
        -1,    51,   104,   105,   106,   107,    -1,    -1,   110,   111,
        60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,     3,
         4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
        -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
        -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,
!      100,    -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
       110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,    -1,
        -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,
        -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
        -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
        84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    46,    47,    -1,   101,    -1,    51,
       104,   105,   106,   107,    -1,    -1,   110,   111,    60,    -1,
        -1,    -1,    -1,    -1,    66,    -1,    -1,     3,     4,    -1,
        -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
        46,    47,    -1,    -1,    -1,    51,    -1,    -1,    -1,     3,
         4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
        66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
        -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
        -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       96,    -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,
       106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,
        -1,    -1,    66,    -1,    -1,     3,     4,    -1,    -1,    73,
        -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
--- 961,1702 ----
     means the default is an error.  */
  static const unsigned short int yydefact[] =
  {
!       26,    46,     0,     0,     0,     0,   178,     0,     2,    28,
        29,    27,    34,    39,    40,    36,     0,    43,    44,    45,
        25,     0,    21,    22,    23,   118,    52,     0,     1,    32,
        35,    37,    30,    31,    47,     0,     0,    41,     0,     0,
         0,   122,     0,    54,    38,     0,    33,   120,    52,     0,
        24,    18,   126,    16,     0,   119,     0,     0,    17,    53,
         0,    50,     0,   124,    54,    42,    13,     0,    11,    12,
!      128,     0,     9,    10,    14,    15,    16,     0,   134,   137,
!        0,   135,     0,   130,   132,   133,   136,   127,   123,    56,
!       55,     0,   121,     0,    48,     0,    94,    77,     0,    73,
!       75,    94,     0,    19,    20,     0,     0,   138,   129,   131,
!        0,     0,    51,   125,     0,     0,     0,     0,    84,    71,
!        0,     0,     0,    83,   284,     0,    94,     0,    94,    57,
!       46,     0,    58,    21,     0,    68,     0,    60,    62,    66,
!       67,    81,    63,     0,    64,    94,    69,    65,    70,    49,
!       87,     0,     0,     0,    90,    96,    95,    89,    77,    74,
!        0,     0,     0,     0,     0,     0,     0,   247,     0,     0,
!        0,     0,     7,     6,     3,     4,     5,     8,   246,     0,
!        0,   297,    76,    80,   296,   244,   253,   249,   261,     0,
!      245,   250,   251,   252,   309,   298,   299,   317,   302,   303,
!      306,   312,   321,   324,   328,   334,   337,   339,   341,   343,
!      345,   347,   349,   357,   350,     0,    79,    78,   285,    86,
!       72,    85,    46,     0,     0,   208,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,   145,     0,     9,    15,   297,
!       23,     0,   151,   166,     0,   147,   149,     0,   150,   155,
!      167,     0,   156,   168,     0,   157,   158,   169,     0,   159,
!        0,   170,   160,   216,     0,   171,   172,   173,   175,   177,
!      174,     0,   176,   249,   251,     0,   186,   187,   184,   185,
!      183,     0,    94,    59,    61,     0,   100,     0,    92,     0,
!       88,     0,     0,   297,   250,   252,   304,   305,   308,   307,
!        0,     0,     0,    17,     0,   310,   311,     0,   297,     0,
!      139,     0,   143,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,   301,   300,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,   355,   356,     0,     0,     0,
!      223,     0,   227,     0,     0,     0,     0,   214,   225,     0,
!      232,     0,     0,   153,   179,     0,   146,   148,   152,   236,
!      180,   182,   206,     0,     0,   218,   221,   215,   217,     0,
!        0,   106,     0,     0,    99,    82,    98,     0,   102,    93,
!       91,    97,   258,   287,     0,   275,   281,     0,   276,     0,
!        0,     0,    19,    20,   248,   141,   140,     0,   257,   256,
!      288,     0,   272,     0,   255,   270,   254,   271,   286,     0,
!        0,   318,   319,   320,   322,   323,   325,   326,   327,   330,
!      332,   329,   331,     0,   333,   335,   336,   338,   340,   342,
!      344,   346,     0,   351,     0,   229,   224,   228,     0,     0,
!        0,     0,   237,   240,   238,   226,   233,     0,   231,   248,
!      154,     0,     0,   219,     0,     0,   107,   103,   117,   247,
!      108,   297,     0,     0,     0,   104,     0,     0,   282,   277,
!      280,   278,   279,   260,     0,   314,     0,     0,   315,   142,
!      144,   289,     0,   294,     0,   295,   262,     0,     0,     0,
!      205,     0,     0,   243,   241,   239,     0,     0,   222,     0,
!      220,   219,     0,   105,     0,   109,     0,     0,   110,   292,
!        0,   283,     0,   259,   313,   316,   274,   273,   290,     0,
!      263,   264,   348,     0,   190,     0,   155,     0,   162,   163,
!        0,   164,   165,     0,     0,   193,     0,   230,     0,     0,
!        0,   235,   234,     0,   111,     0,     0,   293,   267,     0,
!      291,   265,     0,     0,   181,   207,     0,     0,     0,   194,
!        0,   198,     0,   201,     0,     0,   211,     0,     0,   112,
!        0,   269,     0,   191,   219,     0,   204,   358,     0,   196,
!      199,     0,   195,   200,   202,   242,   209,   210,     0,     0,
!      113,     0,     0,   219,   203,   197,   115,     0,     0,     0,
!        0,   114,     0,   213,     0,   192,   212
  };
  
  /* YYDEFGOTO[NTERM-NUM]. */
  static const short int yydefgoto[] =
  {
!       -1,     7,   178,   236,   179,    73,    74,    59,    52,   180,
!      181,    22,    23,    24,     8,     9,    10,    11,    12,    13,
!       14,    15,   241,   242,   114,    91,    43,    61,    90,   112,
!      136,   137,   138,    79,    98,    99,   100,   182,   140,   285,
!       80,    96,   153,   154,   118,   156,   385,   142,   143,   144,
!      145,   388,   472,   473,    18,    40,    62,    57,    93,    41,
!       55,    82,    83,    84,    85,   183,   313,   243,   593,   245,
!      246,   247,   248,   535,   249,   250,   251,   252,   538,   253,
!      254,   255,   256,   539,   257,   545,   570,   571,   572,   573,
!      258,   259,   541,   260,   261,   262,   542,   263,   264,   377,
!      509,   510,   265,   266,   267,   268,   269,   270,   271,   272,
!      452,   453,   454,   184,   185,   186,   187,   188,   522,   559,
!      189,   411,   190,   395,   396,   104,   191,   192,   193,   194,
!      195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
!      205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
!      215,   347,   412,   588
  };
  
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
     STATE-NUM.  */
! #define YYPACT_NINF -513
  static const short int yypact[] =
  {
!      280,  -513,   -68,   -68,   -68,   -68,  -513,    27,  -513,   108,
!      105,   108,  -513,  -513,  -513,  -513,   112,  -513,  -513,  -513,
!     -513,   -54,  -513,  -513,  -513,    13,    45,   115,  -513,   105,
!     -513,  -513,   108,   105,  -513,   -68,   -68,  -513,     5,   -68,
!       42,    18,   -68,    72,  -513,   -68,   105,    13,    45,   165,
!     -513,  -513,  -513,   148,   346,  -513,   -68,    42,  -513,  -513,
!      -68,  -513,    42,    18,    72,  -513,  -513,   -68,  -513,  -513,
!     -513,   -68,   169,  -513,  -513,  -513,    66,   624,  -513,  -513,
!      186,  -513,   457,  -513,  -513,  -513,  -513,  -513,  -513,  -513,
!      179,   206,  -513,    42,  -513,   235,   -28,   235,   -64,  -513,
!      121,   -28,   205,   269,   269,   -68,   -68,  -513,  -513,  -513,
!      -68,   295,  -513,  -513,   206,   147,   -68,   303,  -513,  -513,
!      -68,  1758,   327,  -513,  -513,   329,   -28,   136,   -28,  -513,
!      304,  2670,  -513,   321,   624,  -513,   402,  -513,  -513,  -513,
!     -513,  -513,  -513,   339,  -513,   385,  -513,  -513,  -513,  -513,
!     -513,   -68,   323,    17,  -513,  -513,   340,  -513,  -513,  -513,
!     2466,  2466,  2466,  2466,   342,   345,   185,  -513,  2466,  2466,
!     2466,  1626,  -513,  -513,  -513,  -513,  -513,  -513,  -513,    78,
!      353,   399,  -513,  -513,   360,   369,  -513,  -513,  -513,   -68,
!     -513,   445,  -513,   455,   414,  -513,  -513,  -513,  -513,  -513,
!     -513,  -513,   316,   512,   351,   259,   549,   474,   462,   475,
!      477,    16,  -513,  -513,  -513,   490,  -513,  -513,  -513,  -513,
!     -513,  -513,   400,   409,  2466,  -513,    99,  1810,   417,   427,
!      339,   434,   109,  1460,  2466,  -513,   -68,    78,   353,   469,
!      407,   463,  -513,  -513,  2738,  -513,  -513,   435,  -513,  -513,
!     -513,  3146,  -513,  -513,   439,  -513,  -513,  -513,  3146,  -513,
!     3146,  -513,  -513,  1312,   442,  -513,  -513,  -513,  -513,  -513,
!     -513,   458,  -513,   174,   268,   414,   547,   550,  -513,  -513,
!     -513,   436,   385,  -513,  -513,   301,  -513,   464,   460,   -68,
!     -513,   422,   -68,   150,  -513,  -513,  -513,  -513,  -513,  -513,
!      505,   -68,   476,   476,   484,  -513,  -513,   -16,   399,   491,
!     -513,   493,  -513,   311,   521,   527,  1876,  1928,   220,   117,
!     2466,   507,  -513,  -513,  2466,  2466,  2466,  2466,  2466,  2466,
!     2466,  2466,  2466,  2466,  2466,  2466,   185,  2466,  2466,  2466,
!     2466,  2466,  2466,  2466,  2466,  -513,  -513,  2466,  2466,   499,
!     -513,   509,  -513,   511,  2466,  2466,   367,  -513,  -513,   535,
!     -513,    10,   541,   536,  -513,   -68,  -513,  -513,  -513,  -513,
!     -513,  -513,  -513,   577,   323,  -513,  -513,  -513,   543,  1994,
!     2466,  -513,    40,   464,  -513,  -513,  -513,  2806,   545,   460,
!     -513,  -513,  -513,   554,  1928,   476,  -513,   159,   476,   159,
!     2046,  2466,   196,   239,  3282,  -513,  -513,  1692,  -513,  -513,
!     -513,   200,  -513,   551,  -513,  -513,  -513,  -513,   555,   553,
!     2112,  -513,  -513,  -513,   316,   316,   512,   512,   512,   351,
!      351,   351,   351,   169,  -513,   259,   259,   549,   474,   462,
!      475,   477,   566,  -513,   564,  -513,  -513,  -513,   565,   568,
!      570,   339,   367,  -513,  -513,  -513,  -513,  2466,  -513,  -513,
!      536,   571,  3257,  3257,   569,   582,  -513,   572,   345,   587,
!     -513,   483,  2874,   588,  2942,  -513,  2164,   567,  -513,   269,
!     -513,   269,  -513,   575,   210,  -513,  2466,  3282,  -513,  -513,
!     -513,  -513,  1559,  -513,  2230,  -513,   206,   223,  2466,  3214,
!     -513,   591,   422,  -513,  -513,  -513,   584,  2466,  -513,   593,
!      543,  3257,     7,  -513,   241,  -513,  3010,  2282,  -513,  -513,
!      230,  -513,   206,   598,  -513,  -513,  -513,  -513,  -513,   238,
!     -513,   206,  -513,   602,  -513,   641,   642,  3214,  -513,  -513,
!     3214,  -513,  -513,   599,    33,  -513,   605,  -513,   608,  3146,
!      609,  -513,  -513,   611,  -513,   612,   251,  -513,  -513,   206,
!     -513,  -513,  2466,  3146,  -513,  -513,  2348,   619,  2466,  -513,
!       95,  -513,  2534,  -513,   339,   613,  -513,  3146,  2400,  -513,
!      614,  -513,   622,  -513,  3257,   618,  -513,  -513,   620,  -513,
!     -513,  2602,  -513,  3078,  -513,  -513,  -513,  -513,   625,   293,
!     -513,  3214,   627,  3257,  -513,  -513,  -513,   626,   664,  3214,
!      629,  -513,  3214,  -513,  3214,  -513,  -513
  };
  
  /* YYPGOTO[NTERM-NUM].  */
  static const short int yypgoto[] =
  {
!     -513,  -513,  -513,   -20,   -37,   395,    28,  -103,   -35,   131,
!      289,   -13,  -513,    -3,  -513,   721,   151,  -513,    44,  -513,
!     -513,    26,    19,   648,  -513,  -513,   685,   670,  -513,  -105,
!     -513,   601,  -513,    15,  -101,   615,  -144,  -167,  -513,  -513,
!       30,    97,   459,  -285,   -87,  -513,  -513,  -513,  -513,  -513,
!      604,   356,  -513,  -513,    36,  -513,  -513,  -513,  -513,   694,
!       -1,  -513,   660,  -513,  -513,  -169,  -513,   -93,  -128,  -242,
!     -513,   481,  -236,  -362,  -455,   736,  -430,  -513,  -513,  -513,
!     -251,  -513,  -513,  -513,  -513,  -513,  -513,   178,   181,  -512,
!     -413,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -387,  -513,
!     -495,   486,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,
!     -513,   298,   302,  -513,  -513,  -513,   180,  -513,  -513,  -513,
!     -513,  -354,  -513,   450,    23,   -18,  1117,   341,  1141,   411,
!      556,   576,   315,   635,   734,  -381,  -513,   307,   197,    53,
!      270,   416,   418,   415,   420,   424,  -513,   262,   423,   789,
!     -513,  -513,  1033,  -513
  };
  
  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
     positive, shift that token.  If negative, reduce the rule which
     number is the opposite.  If zero, do what YYDEFACT says.
     If YYTABLE_NINF, syntax error.  */
! #define YYTABLE_NINF -355
  static const short int yytable[] =
  {
!       25,    26,   367,   244,   312,   127,   390,   288,   551,   149,
!       49,   456,   376,   155,   123,   370,   550,    72,   147,    16,
!       20,    87,   372,   488,   373,    89,   116,    28,    16,    16,
!       16,   343,    47,    48,    71,    50,    31,   119,   120,   219,
!       72,   221,    50,   147,   536,    72,   484,    37,    16,    38,
!      286,    16,    16,    30,   103,    31,    88,   106,   287,    31,
!      594,    92,    71,   304,    95,    16,   497,    51,    97,   537,
!       58,   117,    31,    77,    72,   129,    30,    39,    72,   594,
!      401,   567,   536,   102,    51,   536,   540,   314,    51,   602,
!       81,    71,   113,    20,   237,   151,   568,    72,   133,    72,
!      457,    77,    95,    97,   131,   344,   525,   537,   610,    42,
!      537,   458,   543,   290,   106,    72,    71,   158,    81,   291,
!       56,   133,   520,   133,   540,    60,   139,   540,   240,   302,
!      134,   569,   289,   307,   152,   363,   466,   356,    51,    54,
!      529,   141,   291,   567,    58,   389,   536,   146,   158,     1,
!      543,   139,     1,   543,   536,   134,    34,   536,   568,   536,
!       29,   103,    33,   556,     2,   102,   141,     3,   101,    45,
!        3,   537,   146,     4,    35,   564,     4,   102,   565,   537,
!       36,   314,   537,    46,   537,    75,   321,    20,   540,   391,
!      417,     1,   386,   589,   303,   383,   540,    20,    66,   540,
!      350,   540,   126,   128,    72,    20,     6,   237,    75,     6,
!      358,   508,   376,    75,   543,   121,    44,   546,    45,   103,
!      122,   365,   543,   351,   599,   543,   237,   543,   480,   359,
!      482,    68,   367,   158,    69,    20,    66,   220,   120,   608,
!      490,   240,    75,   150,    72,   316,    75,   613,   240,   317,
!      615,    45,   616,   318,    72,   240,   171,   240,   125,   474,
!      376,   151,   238,   534,   460,    75,    65,    75,   102,    68,
!     -189,   151,    69,    20,   367,  -189,  -189,   332,   333,   334,
!      335,   110,   374,    75,   397,   399,   158,   107,   414,   402,
!      403,    21,   486,   415,    27,   125,   491,   416,   393,   433,
!      152,   370,   492,   111,   372,   124,   523,   553,    20,   414,
!      152,   273,   492,   576,   415,    50,   418,   336,   416,   531,
!       58,   324,   325,   326,     1,   492,   557,   583,    53,    20,
!      115,    53,   492,   376,   560,   487,     2,    72,   125,   130,
!      492,   597,     3,    76,   516,    53,    66,   580,     4,    53,
!      237,   367,   376,   492,   365,    67,     5,     3,   503,   329,
!      330,   331,   158,     4,  -188,   534,    76,    34,   125,  -188,
!     -188,    76,    75,   576,    66,   238,   583,   479,   597,    68,
!      481,     6,    69,    20,   240,   429,   430,   431,   432,   607,
!        1,   530,   131,   132,   238,   492,     6,    66,   131,    53,
!       76,  -101,   384,   157,    76,    53,    67,    68,     3,   406,
!       69,    20,    75,   407,     4,   103,   281,   558,   478,   552,
!      239,   478,    75,    76,   273,    76,   561,   217,   450,   218,
!       68,   273,   451,    69,    20,   237,   131,   237,   273,   116,
!      273,    76,   292,   273,    70,   300,   130,     6,   301,   293,
!      293,   293,   293,    66,   581,    53,   315,   293,   293,   308,
!      322,   323,    67,   319,     3,    72,     1,    75,   320,   240,
!        4,   240,   274,    66,   340,   296,   297,   298,   299,   237,
!        1,   595,   151,   305,   306,   339,    68,    66,   341,    69,
!       20,   342,  -352,  -352,   316,  -236,   240,   364,   317,   131,
!      283,     1,   318,     6,   348,    75,    68,    34,    66,    69,
!       20,    50,   354,   240,    66,   327,   328,    67,   238,     3,
!       68,   152,   355,    69,    20,     4,   426,   427,   428,   357,
!       76,    36,   381,   239,   240,   237,   368,   240,  -353,  -353,
!      371,    68,   275,   379,    69,    20,   240,    68,  -354,  -354,
!       69,    20,   239,   380,   237,   108,   237,   -16,     6,   122,
!      240,   387,  -352,  -352,   316,   337,   338,   273,   317,   240,
!       76,   -16,   318,   392,   240,   394,  -352,  -352,   316,   400,
!       76,    53,   317,   345,   346,   274,   514,   404,   240,   408,
!      240,   405,   274,  -298,  -298,   409,  -299,  -299,   240,   274,
!      445,   274,   420,   238,   274,   238,   240,   435,   436,   240,
!      446,   240,   447,   293,   293,   293,   293,   293,   293,   293,
!      293,   293,   293,   293,   293,    76,   293,   293,   293,   293,
!      293,   293,   293,    75,   424,   425,   455,   459,   120,   421,
!      422,   423,   273,   273,   461,   462,   475,   238,    17,   476,
!      494,   493,   273,   495,   273,   275,   498,    17,    17,    17,
!      499,   500,   275,    76,   501,   502,   507,   521,    34,   275,
!      511,   275,  -266,   513,   275,    66,   471,    17,   512,   273,
!       17,    17,  -116,   517,   105,   547,    35,   276,   544,   549,
!      293,   273,    36,   293,    17,  -268,   273,   562,   563,  -161,
!      566,   574,    78,   238,   575,   577,   578,   277,    68,   586,
!      604,    69,    20,   579,   596,   600,   485,   273,   601,   603,
!      273,   612,   238,   609,   238,   614,   606,   611,   274,   273,
!       78,   434,    32,    64,    94,   159,    19,   284,   282,   467,
!      382,    63,   109,   273,   375,    19,    19,    19,   590,   378,
!      504,   591,   273,   398,   505,   437,   439,   273,   438,   135,
!      532,   239,   440,   239,   273,    19,   278,   441,    19,    19,
!      443,   273,     0,   273,     0,   293,   293,     0,     0,     0,
!        0,   273,    19,   273,   135,     0,     0,   293,     0,   273,
!       86,    76,   273,     0,   273,     0,     0,     0,   275,     0,
!      276,   524,     0,   274,   274,   239,     0,   276,     0,     0,
!        0,     0,     0,   274,   276,   274,   276,     0,    86,   276,
!      277,     0,     0,     0,     0,     0,     0,   277,     0,     0,
!        0,     0,     0,     0,   277,     0,   277,     0,     0,   277,
!      274,     0,     0,     0,     0,     0,     0,   148,     0,     0,
!        0,     0,   274,     0,     0,     0,     0,   274,     0,     0,
!        0,   239,     0,     0,     0,   279,     0,     0,     0,     0,
!        0,     0,   148,   275,   275,     0,     0,     0,   274,   278,
!      239,   274,   239,   275,     0,   275,   278,     0,     0,     0,
!      274,     0,     0,   278,     0,   278,     0,     0,   278,     0,
!        0,     0,     0,     0,   274,     0,     0,     0,     0,     0,
!      275,     0,     0,   274,     0,     0,     0,     0,   274,     0,
!      280,     0,   275,     0,     0,   274,     0,   275,     0,     0,
!        0,     0,   274,     0,   274,     0,     0,     0,     0,     0,
!        0,     0,   274,   276,   274,     0,     0,     0,   275,     0,
!      274,   275,     0,   274,     0,   274,     0,     0,     0,     0,
!      275,     0,     0,   277,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,   275,     0,     0,     0,   279,     0,
!        0,     0,     0,   275,     0,   279,     0,     0,   275,     0,
!        0,     0,   279,     0,   279,   275,     0,   279,     0,     0,
!        0,     0,   275,     0,   275,     0,     0,     0,     0,     0,
!        0,     0,   275,     0,   275,     0,     0,     0,   276,   276,
!      275,     0,   278,   275,     0,   275,     0,     0,   276,     0,
!      276,     0,     0,   280,     0,     0,     0,     0,   277,   277,
!      280,     0,     0,     0,     0,     0,     0,   280,   277,   280,
!      277,     0,   280,     0,     0,   276,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,   276,     0,     0,
!        0,     0,   276,     0,     0,   277,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,   277,     0,     0,
!        0,     0,   277,   276,     0,     0,   276,   278,   278,     0,
!        0,     0,     0,     0,     0,   276,     0,   278,     0,   278,
!        0,     0,     0,   277,     0,     0,   277,     0,     0,   276,
!        0,   279,     0,     0,     0,   277,     0,     0,   276,     0,
!        0,     0,     0,   276,   278,     0,     0,     0,     0,   277,
!      276,     0,     0,     0,     0,     0,   278,   276,   277,   276,
!        0,   278,     0,   277,   216,     0,     0,   276,     0,   276,
!      277,     0,     0,     0,     0,   276,     0,   277,   276,   277,
!      276,     0,   278,     0,     0,   278,   280,   277,     0,   277,
!        0,     0,     0,     0,   278,   277,     0,     0,   277,     0,
!      277,     0,     0,     0,     0,     0,   279,   279,   278,     0,
!        0,     0,     0,   309,   216,     0,   279,   278,   279,     0,
!        0,     0,   278,     0,     0,     0,     0,     0,     0,   278,
!        0,     0,     0,     0,     0,     0,   278,     0,   278,     0,
!        0,     0,     0,   279,     0,     0,   278,     0,   278,     0,
!        0,     0,     0,     0,   278,   279,     0,   278,     0,   278,
!      279,   280,   280,     0,     0,     0,     0,   349,     0,     0,
!      353,   280,     0,   280,     0,     0,   361,   362,     0,     0,
!        0,   279,     0,     0,   279,     0,     0,   294,   294,   294,
!      294,     0,     0,   279,     0,   294,   294,     0,   280,     0,
!        0,     0,     0,     0,     0,     0,     0,   279,     0,     0,
!      280,   295,   295,   295,   295,   280,   279,     0,     0,   295,
!      295,   279,     0,     0,     0,     0,     0,     0,   279,     0,
!        0,     0,     0,     0,     0,   279,   280,   279,     0,   280,
!        0,     0,     0,     0,     0,   279,     0,   279,   280,     0,
!        0,     0,     0,   279,     0,     0,   279,     0,   279,     0,
!      413,     0,   280,   419,     0,     0,     1,     0,   162,   163,
!        0,   280,     0,    66,     0,     0,   280,     0,     0,     0,
!        0,     0,   164,   280,     0,     0,     0,   442,   165,     0,
!      280,   444,   280,     0,     0,   166,     0,   448,   449,   167,
!      280,     0,   280,     0,     0,     0,    68,     0,   280,    69,
!       20,   280,     0,   280,     0,     0,     0,   234,     0,     0,
!        0,     0,   464,   465,     0,     0,   172,   173,   174,   175,
!        0,     0,   176,   177,     0,     0,     0,   477,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!      216,   294,   294,   294,   294,   294,   294,   294,   294,   294,
!      294,   294,   294,     0,   294,   294,   294,   294,   294,   294,
!      294,   360,     0,   160,   161,   295,   295,   295,   295,   295,
!      295,   295,   295,   295,   295,   295,   295,     0,   295,   295,
!      295,   295,   295,   295,   295,     0,     0,     0,     0,     0,
!      506,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,   162,   163,     0,     0,
!        0,    66,     0,     0,     0,     0,     0,     0,   294,     0,
!      164,   294,     0,     0,     0,   527,   165,     0,     0,     0,
!        0,     0,     0,   166,     0,     0,     0,   167,     0,     0,
!      548,     0,   295,     0,    68,   295,     0,    69,    20,     0,
!        0,   168,   169,     0,     0,   170,     0,     0,     0,     0,
!      526,     0,   160,   161,   172,   173,   174,   175,     0,     0,
!      176,   177,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,   582,     0,     0,     0,   585,
!        0,   587,     0,   294,   294,   162,   163,     0,     0,     0,
!       66,     0,     0,     0,     0,   294,     0,     0,     0,   164,
!        0,     0,     0,     0,     0,   165,     0,   295,   295,   160,
!      161,     0,   166,     0,     0,     0,   167,     0,     0,   295,
!        0,     0,     0,    68,     0,     0,    69,    20,     0,     0,
!      168,   169,     0,     0,   170,     0,     0,     0,     0,     0,
!        0,     0,     0,   172,   173,   174,   175,     0,     0,   176,
!      177,     0,   162,   163,     0,     0,     0,    66,     0,     0,
!        0,     0,     0,     0,     0,     0,   164,     0,     0,     0,
!        0,     0,   165,     0,     0,   160,   161,     0,     0,   166,
!        0,     0,     0,   167,     0,     0,     0,     0,     0,     0,
!       68,     0,     0,    69,    20,     0,     0,   168,   169,     0,
!        0,   170,     0,   171,   310,     0,     0,     0,   311,     0,
!      172,   173,   174,   175,     0,     0,   176,   177,   162,   163,
!        0,     0,     0,    66,     0,     0,     0,     0,     0,     0,
!        0,     0,   164,     0,     0,     0,     0,     0,   165,     0,
!        0,   160,   161,     0,     0,   166,     0,     0,     0,   167,
         0,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,   168,   169,     0,     0,   170,     0,   171,
!      489,     0,     0,     0,     0,     0,   172,   173,   174,   175,
!        0,     0,   176,   177,   162,   163,     0,     0,     0,    66,
!        0,     0,     0,   160,   161,     0,     0,     0,   164,     0,
!        0,     0,     0,     0,   165,     0,     0,     0,     0,     0,
!        0,   166,     0,     0,     0,   167,     0,     0,     0,     0,
!        0,     0,    68,     0,     0,    69,    20,     0,     0,   168,
!      169,     0,     0,   170,     0,   171,   162,   163,     0,     0,
!        0,    66,   172,   173,   174,   175,     0,     0,   176,   177,
!      164,     0,     0,     0,     0,     0,   165,     0,     0,   160,
!      161,     0,     0,   166,     0,     0,     0,   167,     0,     0,
         0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,   168,   169,     0,     0,   170,     0,     0,     0,     0,
!        0,   352,     0,     0,   172,   173,   174,   175,     0,     0,
!      176,   177,   162,   163,     0,     0,     0,    66,     0,     0,
!        0,   160,   161,     0,     0,     0,   164,     0,     0,     0,
!        0,     0,   165,     0,     0,     0,     0,     0,     0,   166,
!        0,     0,     0,   167,     0,     0,     0,     0,     0,     0,
!       68,     0,     0,    69,    20,     0,     0,   168,   169,     0,
!        0,   170,   410,     0,   162,   163,     0,     0,     0,    66,
!      172,   173,   174,   175,     0,     0,   176,   177,   164,     0,
!        0,     0,     0,     0,   165,     0,     0,   160,   161,     0,
!        0,   166,     0,     0,     0,   167,     0,     0,     0,     0,
!        0,     0,    68,     0,     0,    69,    20,     0,     0,   168,
!      169,     0,     0,   170,     0,     0,     0,     0,   124,     0,
!        0,     0,   172,   173,   174,   175,     0,     0,   176,   177,
!      162,   163,     0,     0,     0,    66,     0,     0,     0,   160,
!      161,     0,     0,     0,   164,     0,     0,     0,     0,     0,
!      165,     0,     0,     0,     0,     0,     0,   166,     0,     0,
!        0,   167,     0,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,   168,   169,     0,     0,   170,
!        0,     0,   162,   163,     0,   463,     0,    66,   172,   173,
!      174,   175,     0,     0,   176,   177,   164,     0,     0,     0,
!        0,     0,   165,     0,     0,   160,   161,     0,     0,   166,
!        0,     0,     0,   167,     0,     0,     0,     0,     0,     0,
!       68,     0,     0,    69,    20,     0,     0,   168,   169,     0,
!        0,   170,   483,     0,     0,     0,     0,     0,     0,     0,
!      172,   173,   174,   175,     0,     0,   176,   177,   162,   163,
!        0,     0,     0,    66,     0,     0,     0,   160,   161,     0,
!        0,     0,   164,     0,     0,     0,     0,     0,   165,     0,
!        0,     0,     0,     0,     0,   166,     0,     0,     0,   167,
         0,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,   168,   169,     0,     0,   170,   496,     0,
!      162,   163,     0,     0,     0,    66,   172,   173,   174,   175,
!        0,     0,   176,   177,   164,     0,     0,     0,     0,     0,
!      165,     0,     0,   160,   161,     0,     0,   166,     0,     0,
!        0,   167,     0,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,   168,   169,     0,     0,   170,
!      519,     0,     0,     0,     0,     0,     0,     0,   172,   173,
!      174,   175,     0,     0,   176,   177,   162,   163,     0,     0,
!        0,    66,     0,     0,     0,   160,   161,     0,     0,     0,
!      164,     0,     0,     0,     0,     0,   165,     0,     0,     0,
!        0,     0,     0,   166,     0,     0,     0,   167,     0,     0,
         0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,   168,   169,     0,     0,   170,   528,     0,   162,   163,
!        0,     0,     0,    66,   172,   173,   174,   175,     0,     0,
!      176,   177,   164,     0,     0,     0,     0,     0,   165,     0,
!        0,   160,   161,     0,     0,   166,     0,     0,     0,   167,
         0,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,   168,   169,     0,     0,   170,   555,     0,
!        0,     0,     0,     0,     0,     0,   172,   173,   174,   175,
!        0,     0,   176,   177,   162,   163,     0,     0,     0,    66,
!        0,     0,     0,   160,   161,     0,     0,     0,   164,     0,
!        0,     0,     0,     0,   165,     0,     0,     0,     0,     0,
!        0,   166,     0,     0,     0,   167,     0,     0,     0,     0,
!        0,     0,    68,     0,     0,    69,    20,     0,     0,   168,
!      169,     0,     0,   170,     0,     0,   162,   163,     0,   584,
!        0,    66,   172,   173,   174,   175,     0,     0,   176,   177,
!      164,     0,     0,     0,     0,     0,   165,     0,     0,   160,
!      161,     0,     0,   166,     0,     0,     0,   167,     0,     0,
         0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,   168,   169,     0,     0,   170,   598,     0,     0,     0,
!        0,     0,     0,     0,   172,   173,   174,   175,     0,     0,
!      176,   177,   162,   163,     0,     0,     0,    66,     0,     0,
!        0,     0,     0,     0,     0,     0,   164,     0,     0,     0,
!        0,     0,   165,     0,     0,     0,     0,     0,     0,   166,
!        0,     0,     0,   167,     0,     0,     0,     0,     0,     0,
!       68,     0,     0,    69,    20,     0,     0,   168,   169,     0,
!        0,   170,     0,     0,     0,     0,     0,     0,     0,     0,
!      172,   173,   174,   175,     0,     0,   176,   177,   222,     0,
!      162,   163,   567,   223,   224,    66,   225,     0,     0,   226,
!        0,     0,     0,   227,   164,     0,     0,   568,     0,     0,
!      165,   228,     4,   229,     0,   230,   231,   166,   232,     0,
!        0,   167,   233,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,     0,     0,     0,     0,   234,
!        0,   131,   592,     0,     0,     6,     0,     0,   172,   173,
!      174,   175,     0,     0,   176,   177,   222,     0,   162,   163,
!      567,   223,   224,    66,   225,     0,     0,   226,     0,     0,
!        0,   227,   164,     0,     0,   568,     0,     0,   165,   228,
!        4,   229,     0,   230,   231,   166,   232,     0,     0,   167,
!      233,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,     0,     0,     0,     0,   234,     0,   131,
!      605,     0,     0,     6,     0,     0,   172,   173,   174,   175,
!        0,     0,   176,   177,   222,     0,   162,   163,     0,   223,
!      224,    66,   225,     0,     0,   226,     0,     0,     0,   227,
!      164,     0,     0,     0,     0,     0,   165,   228,     4,   229,
!        0,   230,   231,   166,   232,     0,     0,   167,   233,     0,
!        0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,     0,     0,     0,     0,   234,     0,   131,   235,     0,
!        0,     6,     0,     0,   172,   173,   174,   175,     0,     0,
!      176,   177,   222,     0,   162,   163,     0,   223,   224,    66,
!      225,     0,     0,   226,     0,     0,     0,   227,   164,     0,
!        0,     0,     0,     0,   165,   228,     4,   229,     0,   230,
!      231,   166,   232,     0,     0,   167,   233,     0,     0,     0,
         0,     0,    68,     0,     0,    69,    20,     0,     0,     0,
!        0,     0,     0,   234,     0,   131,   366,     0,     0,     6,
!        0,     0,   172,   173,   174,   175,     0,     0,   176,   177,
!      222,     0,   162,   163,     0,   223,   224,    66,   225,     0,
!        0,   226,     0,     0,     0,   227,   164,     0,     0,     0,
!        0,     0,   468,   228,     4,   229,     0,   230,   231,   166,
!      232,     0,     0,   469,   233,     0,     0,     0,     0,     0,
        68,     0,     0,    69,    20,     0,     0,     0,     0,     0,
!        0,   234,     0,   131,   470,     0,     0,     6,     0,     0,
!      172,   173,   174,   175,     0,     0,   176,   177,   222,     0,
!      162,   163,     0,   223,   224,    66,   225,     0,     0,   226,
!        0,     0,     0,   227,   164,     0,     0,     0,     0,     0,
!      165,   228,     4,   229,     0,   230,   231,   166,   232,     0,
!        0,   167,   233,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,     0,     0,     0,     0,     0,     0,   234,
!        0,   131,   515,     0,     0,     6,     0,     0,   172,   173,
!      174,   175,     0,     0,   176,   177,   222,     0,   162,   163,
!        0,   223,   224,    66,   225,     0,     0,   226,     0,     0,
!        0,   227,   164,     0,     0,     0,     0,     0,   165,   228,
!        4,   229,     0,   230,   231,   166,   232,     0,     0,   167,
!      233,     0,     0,     0,     0,     0,    68,     0,     0,    69,
!       20,     0,     0,     0,     0,     0,     0,   234,     0,   131,
!      518,     0,     0,     6,     0,     0,   172,   173,   174,   175,
!        0,     0,   176,   177,   222,     0,   162,   163,     0,   223,
!      224,    66,   225,     0,     0,   226,     0,     0,     0,   227,
!      164,     0,     0,     0,     0,     0,   165,   228,     4,   229,
!        0,   230,   231,   166,   232,     0,     0,   167,   233,     0,
         0,     0,     0,     0,    68,     0,     0,    69,    20,     0,
!        0,     0,     0,     0,     0,   234,     0,   131,   554,     0,
!        0,     6,     0,     0,   172,   173,   174,   175,     0,     0,
!      176,   177,   222,     0,   162,   163,     0,   223,   224,    66,
!      225,     0,     0,   226,     0,     0,     0,   227,   164,     0,
!        0,     0,     0,     0,   165,   228,     4,   229,     0,   230,
!      231,   166,   232,     0,     0,   167,   233,     0,     0,     0,
         0,     0,    68,     0,     0,    69,    20,     0,     0,     0,
!        0,     0,     0,   234,     0,   131,     0,     0,     0,     6,
!        0,     0,   172,   173,   174,   175,     0,     0,   176,   177,
!      369,     0,   162,   163,     0,   223,   224,    66,   225,     0,
!        0,   226,     0,     0,     0,   227,   164,     0,     0,     0,
!        0,     0,   165,   228,     0,   229,     0,   230,   231,   166,
!      232,     0,     0,   167,   233,     0,     0,     0,     0,     0,
        68,     0,     0,    69,    20,     0,     0,     0,     0,     0,
!        0,   234,     0,   131,     0,     0,     0,     6,     0,     0,
!      172,   173,   174,   175,     0,     0,   176,   177,   369,     0,
!      162,   163,     0,   533,   224,    66,   225,     0,     0,   226,
!        0,     0,     0,   227,   164,     0,     0,     0,     0,     0,
!      165,   228,     0,   229,     0,   230,   231,   166,   232,     0,
!        0,   167,   233,     0,     0,     0,     0,     0,    68,     0,
!        0,    69,    20,   162,   163,     0,     0,     0,    66,   234,
!        0,   131,     0,     0,     0,     6,     0,   164,   172,   173,
!      174,   175,     0,   165,   176,   177,     0,     0,     0,     0,
!      166,     0,     0,    66,   167,     0,     0,     0,     0,     0,
!        0,    68,   164,     0,    69,    20,     0,     0,   165,     0,
!        0,     0,   234,     0,     0,   166,     0,     0,     0,   167,
!        0,   172,   173,   174,   175,     0,    68,   176,   177,    69,
!       20,     0,     0,   168,   169,     0,     0,   170,     0,     0,
!        0,     0,     0,     0,     0,     0,   172,   173,   174,   175,
!        0,     0,   176,   177
  };
  
  static const short int yycheck[] =
  {
!        3,     4,   244,   131,   171,   106,   291,   151,     1,   114,
!        5,     1,   263,   116,   101,   251,   511,    54,   111,     0,
!       88,    56,   258,   404,   260,    60,    54,     0,     9,    10,
!       11,    15,    35,    36,    54,    38,    10,   101,   102,   126,
!       77,   128,    45,   136,   499,    82,   400,   101,    29,   103,
!      143,    32,    33,     9,    72,    29,    57,    77,   145,    33,
!      572,    62,    82,   166,    67,    46,   420,    39,    71,   499,
!       42,    99,    46,    54,   111,   110,    32,    64,   115,   591,
!       96,    48,   537,    99,    56,   540,   499,   103,    60,   584,
!       54,   111,    93,    88,   131,   115,    63,   134,   111,   136,
!       90,    82,   105,   106,    97,    89,   487,   537,   603,    64,
!      540,   101,   499,    96,   134,   152,   136,   120,    82,   102,
!      102,   134,   476,   136,   537,    53,   111,   540,   131,   166,
!      111,    98,   152,   170,   115,   236,    96,   230,   110,    97,
!      494,   111,   102,    48,   116,   289,   601,   111,   151,    44,
!      537,   136,    44,   540,   609,   136,    44,   612,    63,   614,
!        9,   179,    11,   517,    56,    99,   136,    62,    71,   103,
!       62,   601,   136,    68,    62,   537,    68,    99,   540,   609,
!       68,   103,   612,    32,   614,    54,   189,    88,   601,   292,
!       73,    44,   285,    98,   166,   282,   609,    88,    51,   612,
!      101,   614,   105,   106,   241,    88,   101,   244,    77,   101,
!      101,   462,   463,    82,   601,    94,   101,   502,   103,   237,
!       99,   241,   609,   226,   578,   612,   263,   614,   397,   232,
!      399,    84,   474,   236,    87,    88,    51,   101,   102,   601,
!      407,   244,   111,    96,   281,    95,   115,   609,   251,    99,
!      612,   103,   614,   103,   291,   258,    97,   260,    99,   387,
!      511,   281,   131,   499,   365,   134,   101,   136,    99,    84,
!       96,   291,    87,    88,   516,   101,   102,    18,    19,    20,
!       21,   102,   263,   152,   302,   303,   289,   101,    68,   307,
!      308,     2,    96,    73,     5,    99,    96,    77,   301,   336,
!      281,   537,   102,    97,   540,   100,    96,    66,    88,    68,
!      291,   131,   102,   549,    73,   318,   319,    58,    77,    96,
!      292,     5,     6,     7,    44,   102,    96,   563,    39,    88,
!       95,    42,   102,   584,    96,    96,    56,   374,    99,    44,
!      102,   577,    62,    54,   472,    56,    51,    96,    68,    60,
!      387,   593,   603,   102,   374,    60,    76,    62,   451,     8,
!        9,    10,   365,    68,    96,   601,    77,    44,    99,   101,
!      102,    82,   241,   609,    51,   244,   612,   395,   614,    84,
!      398,   101,    87,    88,   387,   332,   333,   334,   335,    96,
!       44,   496,    97,    98,   263,   102,   101,    51,    97,   110,
!      111,    97,   101,   100,   115,   116,    60,    84,    62,    98,
!       87,    88,   281,   102,    68,   433,    95,   522,   395,   512,
!      131,   398,   291,   134,   244,   136,   531,   100,    61,   100,
!       84,   251,    65,    87,    88,   472,    97,   474,   258,    54,
!      260,   152,   102,   263,    98,   103,    44,   101,   103,   160,
!      161,   162,   163,    51,   559,   166,   103,   168,   169,   170,
!       46,    47,    60,   103,    62,   502,    44,   336,    99,   472,
!       68,   474,   131,    51,    12,   160,   161,   162,   163,   516,
!       44,   574,   502,   168,   169,    11,    84,    51,    13,    87,
!       88,    14,    93,    94,    95,    95,   499,    90,    99,    97,
!       98,    44,   103,   101,    95,   374,    84,    44,    51,    87,
!       88,   514,    95,   516,    51,     3,     4,    60,   387,    62,
!       84,   502,    95,    87,    88,    68,   329,   330,   331,    95,
!      241,    68,    96,   244,   537,   572,   101,   540,    93,    94,
!      101,    84,   131,   101,    87,    88,   549,    84,    93,    94,
!       87,    88,   263,    95,   591,    98,   593,    88,   101,    99,
!      563,    97,    93,    94,    95,    16,    17,   387,    99,   572,
!      281,    88,   103,    68,   577,    99,    93,    94,    95,    95,
!      291,   292,    99,    93,    94,   244,   103,    96,   591,    68,
!      593,    98,   251,    46,    47,    68,    46,    47,   601,   258,
!      101,   260,    95,   472,   263,   474,   609,   337,   338,   612,
!      101,   614,   101,   324,   325,   326,   327,   328,   329,   330,
!      331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
!      341,   342,   343,   502,   327,   328,   101,    96,   102,   324,
!      325,   326,   462,   463,    67,   102,   101,   516,     0,    95,
!       95,   100,   472,   100,   474,   244,    90,     9,    10,    11,
!       96,    96,   251,   374,    96,    95,    95,   100,    44,   258,
!      101,   260,    97,   101,   263,    51,   387,    29,    96,   499,
!       32,    33,    95,    95,    60,   101,    62,   131,    97,    96,
!      401,   511,    68,   404,    46,    97,   516,    95,    57,    57,
!      101,    96,    54,   572,    96,    96,    95,   131,    84,    90,
!       90,    87,    88,   101,   101,   101,   401,   537,    96,   101,
!      540,    57,   591,    96,   593,    96,   101,   101,   387,   549,
!       82,   336,    11,    48,    64,   120,     0,   136,   134,   383,
!      281,    47,    82,   563,   263,     9,    10,    11,   570,   263,
!      452,   570,   572,   303,   452,   339,   341,   577,   340,   111,
!      498,   472,   342,   474,   584,    29,   131,   343,    32,    33,
!      347,   591,    -1,   593,    -1,   486,   487,    -1,    -1,    -1,
!       -1,   601,    46,   603,   136,    -1,    -1,   498,    -1,   609,
!       54,   502,   612,    -1,   614,    -1,    -1,    -1,   387,    -1,
!      244,   486,    -1,   462,   463,   516,    -1,   251,    -1,    -1,
!       -1,    -1,    -1,   472,   258,   474,   260,    -1,    82,   263,
!      244,    -1,    -1,    -1,    -1,    -1,    -1,   251,    -1,    -1,
!       -1,    -1,    -1,    -1,   258,    -1,   260,    -1,    -1,   263,
!      499,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
!       -1,    -1,   511,    -1,    -1,    -1,    -1,   516,    -1,    -1,
!       -1,   572,    -1,    -1,    -1,   131,    -1,    -1,    -1,    -1,
!       -1,    -1,   136,   462,   463,    -1,    -1,    -1,   537,   244,
!      591,   540,   593,   472,    -1,   474,   251,    -1,    -1,    -1,
!      549,    -1,    -1,   258,    -1,   260,    -1,    -1,   263,    -1,
!       -1,    -1,    -1,    -1,   563,    -1,    -1,    -1,    -1,    -1,
!      499,    -1,    -1,   572,    -1,    -1,    -1,    -1,   577,    -1,
!      131,    -1,   511,    -1,    -1,   584,    -1,   516,    -1,    -1,
!       -1,    -1,   591,    -1,   593,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   601,   387,   603,    -1,    -1,    -1,   537,    -1,
!      609,   540,    -1,   612,    -1,   614,    -1,    -1,    -1,    -1,
!      549,    -1,    -1,   387,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,   563,    -1,    -1,    -1,   244,    -1,
!       -1,    -1,    -1,   572,    -1,   251,    -1,    -1,   577,    -1,
!       -1,    -1,   258,    -1,   260,   584,    -1,   263,    -1,    -1,
!       -1,    -1,   591,    -1,   593,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   601,    -1,   603,    -1,    -1,    -1,   462,   463,
!      609,    -1,   387,   612,    -1,   614,    -1,    -1,   472,    -1,
!      474,    -1,    -1,   244,    -1,    -1,    -1,    -1,   462,   463,
!      251,    -1,    -1,    -1,    -1,    -1,    -1,   258,   472,   260,
!      474,    -1,   263,    -1,    -1,   499,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   511,    -1,    -1,
!       -1,    -1,   516,    -1,    -1,   499,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   511,    -1,    -1,
!       -1,    -1,   516,   537,    -1,    -1,   540,   462,   463,    -1,
!       -1,    -1,    -1,    -1,    -1,   549,    -1,   472,    -1,   474,
!       -1,    -1,    -1,   537,    -1,    -1,   540,    -1,    -1,   563,
!       -1,   387,    -1,    -1,    -1,   549,    -1,    -1,   572,    -1,
!       -1,    -1,    -1,   577,   499,    -1,    -1,    -1,    -1,   563,
!      584,    -1,    -1,    -1,    -1,    -1,   511,   591,   572,   593,
!       -1,   516,    -1,   577,   121,    -1,    -1,   601,    -1,   603,
!      584,    -1,    -1,    -1,    -1,   609,    -1,   591,   612,   593,
!      614,    -1,   537,    -1,    -1,   540,   387,   601,    -1,   603,
!       -1,    -1,    -1,    -1,   549,   609,    -1,    -1,   612,    -1,
!      614,    -1,    -1,    -1,    -1,    -1,   462,   463,   563,    -1,
!       -1,    -1,    -1,   170,   171,    -1,   472,   572,   474,    -1,
!       -1,    -1,   577,    -1,    -1,    -1,    -1,    -1,    -1,   584,
!       -1,    -1,    -1,    -1,    -1,    -1,   591,    -1,   593,    -1,
!       -1,    -1,    -1,   499,    -1,    -1,   601,    -1,   603,    -1,
!       -1,    -1,    -1,    -1,   609,   511,    -1,   612,    -1,   614,
!      516,   462,   463,    -1,    -1,    -1,    -1,   224,    -1,    -1,
!      227,   472,    -1,   474,    -1,    -1,   233,   234,    -1,    -1,
!       -1,   537,    -1,    -1,   540,    -1,    -1,   160,   161,   162,
!      163,    -1,    -1,   549,    -1,   168,   169,    -1,   499,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   563,    -1,    -1,
!      511,   160,   161,   162,   163,   516,   572,    -1,    -1,   168,
!      169,   577,    -1,    -1,    -1,    -1,    -1,    -1,   584,    -1,
!       -1,    -1,    -1,    -1,    -1,   591,   537,   593,    -1,   540,
!       -1,    -1,    -1,    -1,    -1,   601,    -1,   603,   549,    -1,
!       -1,    -1,    -1,   609,    -1,    -1,   612,    -1,   614,    -1,
!      317,    -1,   563,   320,    -1,    -1,    44,    -1,    46,    47,
!       -1,   572,    -1,    51,    -1,    -1,   577,    -1,    -1,    -1,
!       -1,    -1,    60,   584,    -1,    -1,    -1,   344,    66,    -1,
!      591,   348,   593,    -1,    -1,    73,    -1,   354,   355,    77,
!      601,    -1,   603,    -1,    -1,    -1,    84,    -1,   609,    87,
!       88,   612,    -1,   614,    -1,    -1,    -1,    95,    -1,    -1,
!       -1,    -1,   379,   380,    -1,    -1,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    -1,    -1,    -1,   394,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!      407,   324,   325,   326,   327,   328,   329,   330,   331,   332,
!      333,   334,   335,    -1,   337,   338,   339,   340,   341,   342,
!      343,     1,    -1,     3,     4,   324,   325,   326,   327,   328,
!      329,   330,   331,   332,   333,   334,   335,    -1,   337,   338,
!      339,   340,   341,   342,   343,    -1,    -1,    -1,    -1,    -1,
!      457,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    -1,    -1,
!       -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,   401,    -1,
!       60,   404,    -1,    -1,    -1,   492,    66,    -1,    -1,    -1,
        -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!      507,    -1,   401,    -1,    84,   404,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,
!        1,    -1,     3,     4,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,   562,    -1,    -1,    -1,   566,
!       -1,   568,    -1,   486,   487,    46,    47,    -1,    -1,    -1,
!       51,    -1,    -1,    -1,    -1,   498,    -1,    -1,    -1,    60,
!       -1,    -1,    -1,    -1,    -1,    66,    -1,   486,   487,     3,
!        4,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,   498,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    -1,    46,    47,    -1,    -1,    -1,    51,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,
!       -1,    -1,    66,    -1,    -1,     3,     4,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    97,    98,    -1,    -1,    -1,   102,    -1,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    46,    47,
!       -1,    -1,    -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
        -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,
        -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    97,
!       98,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,
        -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,
        -1,    -1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,
        -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
        -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    97,    46,    47,    -1,    -1,
        -1,    51,   104,   105,   106,   107,    -1,    -1,   110,   111,
        60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,     3,
         4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
        -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
        -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,
!       -1,   101,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
       110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,    -1,
        -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,
        -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
        -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
        84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    96,    -1,    46,    47,    -1,    -1,    -1,    51,
       104,   105,   106,   107,    -1,    -1,   110,   111,    60,    -1,
        -1,    -1,    -1,    -1,    66,    -1,    -1,     3,     4,    -1,
        -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    -1,    -1,   100,    -1,
        -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
        46,    47,    -1,    -1,    -1,    51,    -1,    -1,    -1,     3,
         4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
        66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
        -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
        -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    -1,    46,    47,    -1,   101,    -1,    51,   104,   105,
       106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,
        -1,    -1,    66,    -1,    -1,     3,     4,    -1,    -1,    73,
        -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
*************** static const short int yycheck[] =
*** 1718,1743 ****
        60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
        -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
        -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,
!       -1,   101,    -1,    51,   104,   105,   106,   107,    -1,    -1,
       110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
        -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,
        -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
        88,    -1,    -1,    91,    92,    -1,    -1,    95,    96,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,
        -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,
        -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
        -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       44,    -1,    46,    47,    48,    49,    50,    51,    52,    -1,
!       -1,    55,    -1,    -1,    -1,    59,    60,    -1,    -1,    63,
!       -1,    -1,    66,    67,    68,    69,    -1,    71,    72,    73,
!       74,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
!       -1,    95,    -1,    97,    98,    -1,    -1,   101,    -1,    -1,
       104,   105,   106,   107,    -1,    -1,   110,   111,    44,    -1,
        46,    47,    48,    49,    50,    51,    52,    -1,    -1,    55,
        -1,    -1,    -1,    59,    60,    -1,    -1,    63,    -1,    -1,
--- 1719,1749 ----
        60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
        -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
        -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    96,    -1,    46,    47,
!       -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,
       110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
        -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,
        -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
        88,    -1,    -1,    91,    92,    -1,    -1,    95,    96,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,
        -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,
!       -1,    -1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,
        -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
        -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    46,    47,    -1,   101,
!       -1,    51,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,     3,
!        4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    96,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,
!       -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       104,   105,   106,   107,    -1,    -1,   110,   111,    44,    -1,
        46,    47,    48,    49,    50,    51,    52,    -1,    -1,    55,
        -1,    -1,    -1,    59,    60,    -1,    -1,    63,    -1,    -1,
*************** static const short int yycheck[] =
*** 1746,1753 ****
        -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,    95,
        -1,    97,    98,    -1,    -1,   101,    -1,    -1,   104,   105,
       106,   107,    -1,    -1,   110,   111,    44,    -1,    46,    47,
!       -1,    49,    50,    51,    52,    -1,    -1,    55,    -1,    -1,
!       -1,    59,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,
        68,    69,    -1,    71,    72,    73,    74,    -1,    -1,    77,
        78,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
        88,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    97,
--- 1752,1759 ----
        -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,    95,
        -1,    97,    98,    -1,    -1,   101,    -1,    -1,   104,   105,
       106,   107,    -1,    -1,   110,   111,    44,    -1,    46,    47,
!       48,    49,    50,    51,    52,    -1,    -1,    55,    -1,    -1,
!       -1,    59,    60,    -1,    -1,    63,    -1,    -1,    66,    67,
        68,    69,    -1,    71,    72,    73,    74,    -1,    -1,    77,
        78,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
        88,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    97,
*************** static const short int yycheck[] =
*** 1791,1801 ****
        60,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,    69,
        -1,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
        -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    -1,    -1,    -1,    -1,    95,    -1,    97,    -1,    -1,
        -1,   101,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
       110,   111,    44,    -1,    46,    47,    -1,    49,    50,    51,
        52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,    -1,
!       -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,    71,
        72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    -1,
        -1,    -1,    -1,    95,    -1,    97,    -1,    -1,    -1,   101,
--- 1797,1807 ----
        60,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,    69,
        -1,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
        -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    -1,    -1,    -1,    -1,    95,    -1,    97,    98,    -1,
        -1,   101,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
       110,   111,    44,    -1,    46,    47,    -1,    49,    50,    51,
        52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,    -1,
!       -1,    -1,    -1,    -1,    66,    67,    68,    69,    -1,    71,
        72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    -1,
        -1,    -1,    -1,    95,    -1,    97,    -1,    -1,    -1,   101,
*************** static const short int yycheck[] =
*** 1805,1820 ****
        -1,    -1,    66,    67,    -1,    69,    -1,    71,    72,    73,
        74,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    -1,
        84,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
!       -1,    95,    44,    97,    46,    47,    -1,   101,    -1,    51,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    60,    -1,
!       -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    46,
!       47,    73,    -1,    -1,    51,    77,    -1,    -1,    -1,    -1,
!       -1,    -1,    84,    60,    -1,    87,    88,    -1,    -1,    66,
!       -1,    -1,    -1,    95,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,   104,   105,   106,   107,    -1,    84,   110,   111,
!       87,    88,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
!      107,    -1,    -1,   110,   111
  };
  
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
--- 1811,1832 ----
        -1,    -1,    66,    67,    -1,    69,    -1,    71,    72,    73,
        74,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    -1,
        84,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
!       -1,    95,    -1,    97,    -1,    -1,    -1,   101,    -1,    -1,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    44,    -1,
!       46,    47,    -1,    49,    50,    51,    52,    -1,    -1,    55,
!       -1,    -1,    -1,    59,    60,    -1,    -1,    -1,    -1,    -1,
!       66,    67,    -1,    69,    -1,    71,    72,    73,    74,    -1,
!       -1,    77,    78,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    46,    47,    -1,    -1,    -1,    51,    95,
!       -1,    97,    -1,    -1,    -1,   101,    -1,    60,   104,   105,
!      106,   107,    -1,    66,   110,   111,    -1,    -1,    -1,    -1,
!       73,    -1,    -1,    51,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    60,    -1,    87,    88,    -1,    -1,    66,    -1,
!       -1,    -1,    95,    -1,    -1,    73,    -1,    -1,    -1,    77,
!       -1,   104,   105,   106,   107,    -1,    84,   110,   111,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,
!       -1,    -1,   110,   111
  };
  
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
*************** static const unsigned short int yystos[]
*** 1829,1888 ****
       125,   118,   120,   122,    97,   172,   102,   169,   118,   119,
        53,   139,   168,   171,   138,   101,    51,    60,    84,    87,
        98,   115,   116,   117,   118,   121,   122,   134,   135,   145,
!      152,   166,   173,   174,   175,   176,   120,   172,   120,   140,
!      137,   172,   170,   139,   125,   153,   125,   146,   147,   148,
!      153,    99,   237,   237,    60,   115,   101,    98,   174,   102,
!       97,   141,   172,   136,    95,    54,    99,   156,   101,   102,
!       94,    99,   156,   100,    99,   153,   146,   153,   120,    44,
!       97,    98,   123,   134,   135,   142,   143,   144,   145,   150,
!      152,   159,   160,   161,   162,   166,   179,   187,   141,    96,
!      115,   134,   154,   155,   119,   157,   100,   125,   147,     3,
!        4,    46,    47,    60,    66,    73,    77,    91,    92,    95,
!       97,   104,   105,   106,   107,   110,   111,   114,   116,   121,
!      122,   149,   177,   225,   226,   227,   228,   229,   232,   234,
!      238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
!      248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
!      258,   259,   260,   261,   262,   264,   100,   100,   156,   101,
!      156,    44,    49,    50,    52,    55,    59,    67,    69,    71,
!       72,    74,    78,    95,    98,   115,   116,   121,   122,   125,
!      134,   135,   179,   180,   181,   182,   183,   184,   186,   187,
!      188,   189,   191,   192,   193,   194,   196,   202,   203,   205,
!      206,   207,   209,   210,   214,   215,   216,   217,   218,   219,
!      220,   221,   228,   239,   241,   242,   243,   245,   246,   261,
!       95,   162,    98,   143,   151,   179,   156,   148,   115,    96,
!      102,   102,   122,   238,   240,   244,   244,   244,   244,   103,
!      103,   116,   118,   119,   244,   244,   116,   122,   264,    98,
!      102,   149,   178,   103,   103,    95,    99,   103,   103,    99,
!      125,    46,    47,     5,     6,     7,     3,     4,     8,     9,
!       10,    18,    19,    20,    21,    58,    16,    17,    11,    12,
!       13,    14,    15,    89,    93,    94,   263,    95,   264,   101,
!      125,   101,   264,    95,    95,   179,    95,   101,   125,     1,
!      264,   264,   146,    90,   115,    98,   181,   101,    44,   184,
!      101,   184,   184,   134,   183,   192,   211,   213,   101,    95,
!       96,   154,   156,   101,   158,   179,    97,   163,   148,   155,
!      119,    68,   125,    99,   235,   236,   237,   235,   237,    95,
!       96,   237,   237,    96,    98,    98,   102,    68,    68,    96,
!      233,   264,   264,    68,    73,    77,    73,   125,   264,    95,
!      244,   244,   244,   249,   249,   250,   250,   250,   251,   251,
!      251,   251,   116,   117,   252,   252,   253,   254,   255,   256,
!      257,   264,   260,   264,   101,   101,   101,   264,   264,    61,
!       65,   222,   223,   224,   101,     1,    90,   101,    96,   146,
!       67,   102,   101,   264,   264,    96,   163,    66,    77,    98,
!      122,   164,   165,   180,   101,    95,   264,   236,   237,   177,
!      237,   177,    96,   233,   244,    96,    96,   247,    98,   149,
!       96,   102,   100,    95,   100,    96,   233,    90,    96,    96,
!       96,    95,   179,   223,   224,   264,    95,   192,   212,   213,
!      101,    96,   101,   103,    98,   180,    95,    98,    96,   233,
!      100,   230,    96,   244,   247,     1,   264,    96,   233,   141,
!       96,   259,    49,   184,   185,   186,   188,   190,   195,   202,
!      204,   208,   210,    97,   197,   155,   101,   264,    96,   212,
!        1,   179,    66,    98,    96,   233,    96,   141,   231,    96,
!      141,    95,    57,   185,   185,   101,    48,    63,    98,   198,
!      199,   200,   201,    96,    96,   184,    96,    95,   101,    96,
!      141,   264,   184,   101,   264,    90,   264,   265,    98,   199,
!      200,    98,   180,   201,   179,   101,   184,    96,   233,   101,
!       96,   212,   101,    90,    98,   101,    96,   185,    96,   212,
!      101,    57,   185,    96,   185,   185
  };
  
  #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
--- 1841,1900 ----
       125,   118,   120,   122,    97,   172,   102,   169,   118,   119,
        53,   139,   168,   171,   138,   101,    51,    60,    84,    87,
        98,   115,   116,   117,   118,   121,   122,   134,   135,   145,
!      152,   166,   173,   174,   175,   176,   187,   120,   172,   120,
!      140,   137,   172,   170,   139,   125,   153,   125,   146,   147,
!      148,   153,    99,   237,   237,    60,   115,   101,    98,   174,
!      102,    97,   141,   172,   136,    95,    54,    99,   156,   101,
!      102,    94,    99,   156,   100,    99,   153,   146,   153,   120,
!       44,    97,    98,   123,   134,   135,   142,   143,   144,   145,
!      150,   152,   159,   160,   161,   162,   166,   179,   187,   141,
!       96,   115,   134,   154,   155,   119,   157,   100,   125,   147,
!        3,     4,    46,    47,    60,    66,    73,    77,    91,    92,
!       95,    97,   104,   105,   106,   107,   110,   111,   114,   116,
!      121,   122,   149,   177,   225,   226,   227,   228,   229,   232,
!      234,   238,   239,   240,   241,   242,   243,   244,   245,   246,
!      247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
!      257,   258,   259,   260,   261,   262,   264,   100,   100,   156,
!      101,   156,    44,    49,    50,    52,    55,    59,    67,    69,
!       71,    72,    74,    78,    95,    98,   115,   116,   121,   122,
!      125,   134,   135,   179,   180,   181,   182,   183,   184,   186,
!      187,   188,   189,   191,   192,   193,   194,   196,   202,   203,
!      205,   206,   207,   209,   210,   214,   215,   216,   217,   218,
!      219,   220,   221,   228,   239,   241,   242,   243,   245,   246,
!      261,    95,   162,    98,   143,   151,   179,   156,   148,   115,
!       96,   102,   102,   122,   238,   240,   244,   244,   244,   244,
!      103,   103,   116,   118,   119,   244,   244,   116,   122,   264,
!       98,   102,   149,   178,   103,   103,    95,    99,   103,   103,
!       99,   125,    46,    47,     5,     6,     7,     3,     4,     8,
!        9,    10,    18,    19,    20,    21,    58,    16,    17,    11,
!       12,    13,    14,    15,    89,    93,    94,   263,    95,   264,
!      101,   125,   101,   264,    95,    95,   179,    95,   101,   125,
!        1,   264,   264,   146,    90,   115,    98,   181,   101,    44,
!      184,   101,   184,   184,   134,   183,   192,   211,   213,   101,
!       95,    96,   154,   156,   101,   158,   179,    97,   163,   148,
!      155,   119,    68,   125,    99,   235,   236,   237,   235,   237,
!       95,    96,   237,   237,    96,    98,    98,   102,    68,    68,
!       96,   233,   264,   264,    68,    73,    77,    73,   125,   264,
!       95,   244,   244,   244,   249,   249,   250,   250,   250,   251,
!      251,   251,   251,   116,   117,   252,   252,   253,   254,   255,
!      256,   257,   264,   260,   264,   101,   101,   101,   264,   264,
!       61,    65,   222,   223,   224,   101,     1,    90,   101,    96,
!      146,    67,   102,   101,   264,   264,    96,   163,    66,    77,
!       98,   122,   164,   165,   180,   101,    95,   264,   236,   237,
!      177,   237,   177,    96,   233,   244,    96,    96,   247,    98,
!      149,    96,   102,   100,    95,   100,    96,   233,    90,    96,
!       96,    96,    95,   179,   223,   224,   264,    95,   192,   212,
!      213,   101,    96,   101,   103,    98,   180,    95,    98,    96,
!      233,   100,   230,    96,   244,   247,     1,   264,    96,   233,
!      141,    96,   259,    49,   184,   185,   186,   188,   190,   195,
!      202,   204,   208,   210,    97,   197,   155,   101,   264,    96,
!      212,     1,   179,    66,    98,    96,   233,    96,   141,   231,
!       96,   141,    95,    57,   185,   185,   101,    48,    63,    98,
!      198,   199,   200,   201,    96,    96,   184,    96,    95,   101,
!       96,   141,   264,   184,   101,   264,    90,   264,   265,    98,
!      199,   200,    98,   180,   201,   179,   101,   184,    96,   233,
!      101,    96,   212,   101,    90,    98,   101,    96,   185,    96,
!      212,   101,    57,   185,    96,   185,   185
  };
  
  #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
*************** yyreduce:
*** 2523,2529 ****
    switch (yyn)
      {
          case 11:
! #line 229 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      {
  		  /* use preset global here. FIXME */
  		  (yyval.node) = xstrdup ("int");
--- 2535,2541 ----
    switch (yyn)
      {
          case 11:
! #line 229 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      {
  		  /* use preset global here. FIXME */
  		  (yyval.node) = xstrdup ("int");
*************** yyreduce:
*** 2531,2537 ****
      break;
  
    case 12:
! #line 234 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      {
  		  /* use preset global here. FIXME */
  		  (yyval.node) = xstrdup ("double");
--- 2543,2549 ----
      break;
  
    case 12:
! #line 234 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      {
  		  /* use preset global here. FIXME */
  		  (yyval.node) = xstrdup ("double");
*************** yyreduce:
*** 2539,2545 ****
      break;
  
    case 13:
! #line 239 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      {
  		  /* use preset global here. FIXME */
  		  (yyval.node) = xstrdup ("boolean");
--- 2551,2557 ----
      break;
  
    case 13:
! #line 239 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      {
  		  /* use preset global here. FIXME */
  		  (yyval.node) = xstrdup ("boolean");
*************** yyreduce:
*** 2547,2553 ****
      break;
  
    case 19:
! #line 264 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      {
  	          while (bracket_count-- > 0) 
  		    (yyval.node) = concat ("[", (yyvsp[-1].node), NULL);
--- 2559,2565 ----
      break;
  
    case 19:
! #line 264 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      {
  	          while (bracket_count-- > 0) 
  		    (yyval.node) = concat ("[", (yyvsp[-1].node), NULL);
*************** yyreduce:
*** 2555,2561 ****
      break;
  
    case 20:
! #line 269 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      {
  	          while (bracket_count-- > 0) 
  		    (yyval.node) = concat ("[", (yyvsp[-1].node), NULL);
--- 2567,2573 ----
      break;
  
    case 20:
! #line 269 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      {
  	          while (bracket_count-- > 0) 
  		    (yyval.node) = concat ("[", (yyvsp[-1].node), NULL);
*************** yyreduce:
*** 2563,2581 ****
      break;
  
    case 24:
! #line 287 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { 
  		  (yyval.node) = concat ((yyvsp[-2].node), ".", (yyvsp[0].node), NULL);
  		;}
      break;
  
    case 38:
! #line 319 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { package_name = (yyvsp[-1].node); ;}
      break;
  
    case 46:
! #line 346 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { 
  		  if ((yyvsp[0].value) == PUBLIC_TK)
  		    modifier_value++;
--- 2575,2593 ----
      break;
  
    case 24:
! #line 287 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { 
  		  (yyval.node) = concat ((yyvsp[-2].node), ".", (yyvsp[0].node), NULL);
  		;}
      break;
  
    case 38:
! #line 319 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { package_name = (yyvsp[-1].node); ;}
      break;
  
    case 46:
! #line 346 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { 
  		  if ((yyvsp[0].value) == PUBLIC_TK)
  		    modifier_value++;
*************** yyreduce:
*** 2586,2592 ****
      break;
  
    case 47:
! #line 354 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { 
  		  if ((yyvsp[0].value) == PUBLIC_TK)
  		    modifier_value++;
--- 2598,2604 ----
      break;
  
    case 47:
! #line 354 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { 
  		  if ((yyvsp[0].value) == PUBLIC_TK)
  		    modifier_value++;
*************** yyreduce:
*** 2597,2603 ****
      break;
  
    case 48:
! #line 366 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { 
  		  report_class_declaration((yyvsp[-2].node));
  		  modifier_value = 0;
--- 2609,2615 ----
      break;
  
    case 48:
! #line 366 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { 
  		  report_class_declaration((yyvsp[-2].node));
  		  modifier_value = 0;
*************** yyreduce:
*** 2605,2676 ****
      break;
  
    case 50:
! #line 372 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { report_class_declaration((yyvsp[-2].node)); ;}
      break;
  
    case 56:
! #line 386 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 57:
! #line 388 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 58:
! #line 393 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { pop_class_context (); ;}
      break;
  
    case 59:
! #line 395 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { pop_class_context (); ;}
      break;
  
    case 71:
! #line 421 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 72:
! #line 423 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
    case 77:
! #line 439 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { bracket_count = 0; USE_ABSORBER; ;}
      break;
  
    case 78:
! #line 441 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++bracket_count; ;}
      break;
  
    case 81:
! #line 452 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++method_depth; ;}
      break;
  
    case 82:
! #line 454 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { --method_depth; ;}
      break;
  
    case 83:
! #line 459 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 85:
! #line 462 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
    case 86:
! #line 464 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { 
                    report_main_declaration ((yyvsp[-1].declarator));
  		  modifier_value = 0;
--- 2617,2688 ----
      break;
  
    case 50:
! #line 372 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { report_class_declaration((yyvsp[-2].node)); ;}
      break;
  
    case 56:
! #line 386 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 57:
! #line 388 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 58:
! #line 393 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { pop_class_context (); ;}
      break;
  
    case 59:
! #line 395 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { pop_class_context (); ;}
      break;
  
    case 71:
! #line 421 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 72:
! #line 423 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
    case 77:
! #line 439 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { bracket_count = 0; USE_ABSORBER; ;}
      break;
  
    case 78:
! #line 441 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++bracket_count; ;}
      break;
  
    case 81:
! #line 452 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++method_depth; ;}
      break;
  
    case 82:
! #line 454 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { --method_depth; ;}
      break;
  
    case 83:
! #line 459 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 85:
! #line 462 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
    case 86:
! #line 464 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { 
                    report_main_declaration ((yyvsp[-1].declarator));
  		  modifier_value = 0;
*************** yyreduce:
*** 2678,2684 ****
      break;
  
    case 87:
! #line 472 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { 
  		  struct method_declarator *d;
  		  NEW_METHOD_DECLARATOR (d, (yyvsp[-2].node), NULL);
--- 2690,2696 ----
      break;
  
    case 87:
! #line 472 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { 
  		  struct method_declarator *d;
  		  NEW_METHOD_DECLARATOR (d, (yyvsp[-2].node), NULL);
*************** yyreduce:
*** 2687,2693 ****
      break;
  
    case 88:
! #line 478 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { 
  		  struct method_declarator *d;
  		  NEW_METHOD_DECLARATOR (d, (yyvsp[-3].node), (yyvsp[-1].node));
--- 2699,2705 ----
      break;
  
    case 88:
! #line 478 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { 
  		  struct method_declarator *d;
  		  NEW_METHOD_DECLARATOR (d, (yyvsp[-3].node), (yyvsp[-1].node));
*************** yyreduce:
*** 2696,2709 ****
      break;
  
    case 91:
! #line 489 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      {
  		  (yyval.node) = concat ((yyvsp[-2].node), ",", (yyvsp[0].node), NULL);
  		;}
      break;
  
    case 92:
! #line 496 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { 
  		  USE_ABSORBER;
  		  if (bracket_count)
--- 2708,2721 ----
      break;
  
    case 91:
! #line 489 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      {
  		  (yyval.node) = concat ((yyvsp[-2].node), ",", (yyvsp[0].node), NULL);
  		;}
      break;
  
    case 92:
! #line 496 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { 
  		  USE_ABSORBER;
  		  if (bracket_count)
*************** yyreduce:
*** 2721,2727 ****
      break;
  
    case 93:
! #line 511 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      {
  		  if (bracket_count)
  		    {
--- 2733,2739 ----
      break;
  
    case 93:
! #line 511 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      {
  		  if (bracket_count)
  		    {
*************** yyreduce:
*** 2738,3009 ****
      break;
  
    case 96:
! #line 532 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 97:
! #line 534 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 101:
! #line 549 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 103:
! #line 560 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
    case 105:
! #line 565 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
    case 106:
! #line 572 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 107:
! #line 574 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 114:
! #line 591 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 115:
! #line 593 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 118:
! #line 605 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;}
      break;
  
    case 120:
! #line 608 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;}
      break;
  
    case 122:
! #line 611 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;}
      break;
  
    case 124:
! #line 614 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;}
      break;
  
    case 128:
! #line 625 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { pop_class_context (); ;}
      break;
  
    case 129:
! #line 627 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { pop_class_context (); ;}
      break;
  
!   case 152:
! #line 686 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 153:
! #line 688 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
!   case 178:
! #line 729 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 189:
! #line 757 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 190:
! #line 762 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 191:
! #line 767 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 199:
! #line 787 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 204:
! #line 802 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 208:
! #line 819 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 214:
! #line 837 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 225:
! #line 862 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 228:
! #line 871 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 231:
! #line 878 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 232:
! #line 880 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 235:
! #line 889 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
-   case 241:
- #line 904 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
-     { ++complexity; ;}
-     break;
- 
    case 242:
! #line 908 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 253:
! #line 930 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
!     { USE_ABSORBER; ;}
      break;
  
    case 254:
! #line 935 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 255:
! #line 937 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 256:
! #line 939 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 257:
! #line 941 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 265:
! #line 956 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { report_class_declaration (anonymous_context); ;}
      break;
  
!   case 267:
! #line 959 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { report_class_declaration (anonymous_context); ;}
      break;
  
!   case 269:
! #line 965 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 283:
! #line 997 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { bracket_count = 1; ;}
      break;
  
!   case 284:
! #line 999 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { bracket_count++; ;}
      break;
  
-   case 287:
- #line 1012 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
-     { USE_ABSORBER; ++complexity; ;}
-     break;
- 
    case 288:
! #line 1014 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ++complexity; ;}
      break;
  
    case 289:
! #line 1015 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
!     { ++complexity; ;}
      break;
  
    case 290:
! #line 1016 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
    case 291:
! #line 1017 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
    case 292:
! #line 1018 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
    case 293:
! #line 1023 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 296:
! #line 1030 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 343:
! #line 1126 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 345:
! #line 1132 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 347:
! #line 1138 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 351:
! #line 1152 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
--- 2750,3021 ----
      break;
  
    case 96:
! #line 532 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 97:
! #line 534 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 101:
! #line 549 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 103:
! #line 560 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
    case 105:
! #line 565 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
    case 106:
! #line 572 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 107:
! #line 574 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 114:
! #line 591 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 115:
! #line 593 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 118:
! #line 605 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;}
      break;
  
    case 120:
! #line 608 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;}
      break;
  
    case 122:
! #line 611 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;}
      break;
  
    case 124:
! #line 614 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;}
      break;
  
    case 128:
! #line 625 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { pop_class_context (); ;}
      break;
  
    case 129:
! #line 627 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { pop_class_context (); ;}
      break;
  
!   case 153:
! #line 687 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 154:
! #line 689 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { modifier_value = 0; ;}
      break;
  
!   case 179:
! #line 730 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 190:
! #line 758 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 191:
! #line 763 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 192:
! #line 768 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 200:
! #line 788 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 205:
! #line 803 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 209:
! #line 820 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 215:
! #line 838 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 226:
! #line 863 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 229:
! #line 872 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 232:
! #line 879 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 233:
! #line 881 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 236:
! #line 890 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 242:
! #line 905 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 243:
! #line 909 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
!     { ++complexity; ;}
      break;
  
    case 254:
! #line 931 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 255:
! #line 936 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 256:
! #line 938 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
    case 257:
! #line 940 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 258:
! #line 942 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
!     { USE_ABSORBER; ;}
!     break;
! 
!   case 266:
! #line 957 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { report_class_declaration (anonymous_context); ;}
      break;
  
!   case 268:
! #line 960 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { report_class_declaration (anonymous_context); ;}
      break;
  
!   case 270:
! #line 966 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 284:
! #line 998 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { bracket_count = 1; ;}
      break;
  
!   case 285:
! #line 1000 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { bracket_count++; ;}
      break;
  
    case 288:
! #line 1013 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ++complexity; ;}
      break;
  
    case 289:
! #line 1015 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
!     { USE_ABSORBER; ++complexity; ;}
      break;
  
    case 290:
! #line 1016 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
    case 291:
! #line 1017 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
    case 292:
! #line 1018 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
    case 293:
! #line 1019 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
!     { ++complexity; ;}
!     break;
! 
!   case 294:
! #line 1024 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 297:
! #line 1031 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
!   case 344:
! #line 1127 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 346:
! #line 1133 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 348:
! #line 1139 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { ++complexity; ;}
      break;
  
!   case 352:
! #line 1153 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
      { USE_ABSORBER; ;}
      break;
  
*************** yyreduce:
*** 3011,3017 ****
      }
  
  /* Line 1037 of yacc.c.  */
! #line 3015 "java/parse-scan.c"
  
    yyvsp -= yylen;
    yyssp -= yylen;
--- 3023,3029 ----
      }
  
  /* Line 1037 of yacc.c.  */
! #line 3027 "java/parse-scan.c"
  
    yyvsp -= yylen;
    yyssp -= yylen;
*************** yyreturn:
*** 3239,3245 ****
  }
  
  
! #line 1170 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y"
  
  
  /* Create a new parser context */
--- 3251,3257 ----
  }
  
  
! #line 1171 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse-scan.y"
  
  
  /* Create a new parser context */
diff -Nrcpad gcc-4.0.2/gcc/java/parse-scan.y gcc-4.1.0/gcc/java/parse-scan.y
*** gcc-4.0.2/gcc/java/parse-scan.y	Sat Feb 12 15:21:14 2005
--- gcc-4.1.0/gcc/java/parse-scan.y	Tue Jul 12 22:35:03 2005
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** interface_member_declaration:
*** 637,642 ****
--- 637,643 ----
  |	abstract_method_declaration
  |	class_declaration	/* Added, JDK1.1 inner classes */
  |	interface_declaration	/* Added, JDK1.1 inner classes */
+ |	empty_statement
  ;
  
  constant_declaration:
diff -Nrcpad gcc-4.0.2/gcc/java/parse.c gcc-4.1.0/gcc/java/parse.c
*** gcc-4.0.2/gcc/java/parse.c	Wed Sep 28 06:21:18 2005
--- gcc-4.1.0/gcc/java/parse.c	Tue Feb 28 08:43:03 2006
***************
*** 286,292 ****
  
  
  /* Copy the first part of user declarations.  */
! #line 49 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
  
  #include "config.h"
  #include "system.h"
--- 286,292 ----
  
  
  /* Copy the first part of user declarations.  */
! #line 49 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
  
  #include "config.h"
  #include "system.h"
***************
*** 308,319 ****
  #include "zipfile.h"
  #include "convert.h"
  #include "buffer.h"
- #include "xref.h"
  #include "function.h"
  #include "except.h"
  #include "ggc.h"
  #include "debug.h"
  #include "tree-inline.h"
  #include "cgraph.h"
  #include "target.h"
  
--- 308,319 ----
  #include "zipfile.h"
  #include "convert.h"
  #include "buffer.h"
  #include "function.h"
  #include "except.h"
  #include "ggc.h"
  #include "debug.h"
  #include "tree-inline.h"
+ #include "tree-dump.h"
  #include "cgraph.h"
  #include "target.h"
  
*************** static tree lookup_java_method2 (tree, t
*** 338,344 ****
  static tree method_header (int, tree, tree, tree);
  static void fix_method_argument_names (tree ,tree);
  static tree method_declarator (tree, tree);
! static void parse_warning_context (tree cl, const char *gmsgid, ...);
  #ifdef USE_MAPPED_LOCATION
  static void issue_warning_error_from_context
    (source_location, const char *gmsgid, va_list *);
--- 338,344 ----
  static tree method_header (int, tree, tree, tree);
  static void fix_method_argument_names (tree ,tree);
  static tree method_declarator (tree, tree);
! static void parse_warning_context (tree cl, const char *gmsgid, ...) ATTRIBUTE_GCC_DIAG(2,3);
  #ifdef USE_MAPPED_LOCATION
  static void issue_warning_error_from_context
    (source_location, const char *gmsgid, va_list *);
*************** static int process_imports (void);
*** 353,358 ****
--- 353,359 ----
  static void read_import_dir (tree);
  static int find_in_imports_on_demand (tree, tree);
  static void find_in_imports (tree, tree);
+ static bool inner_class_accessible (tree, tree);
  static void check_inner_class_access (tree, tree, tree);
  static int check_pkg_class_access (tree, tree, bool, tree);
  static tree resolve_package (tree, tree *, tree *);
*************** static tree build_new_invocation (tree, 
*** 403,409 ****
  static tree build_assignment (int, int, tree, tree);
  static tree build_binop (enum tree_code, int, tree, tree);
  static tree patch_assignment (tree, tree);
! static tree patch_binop (tree, tree, tree);
  static tree build_unaryop (int, int, tree);
  static tree build_incdec (int, int, tree, int);
  static tree patch_unaryop (tree, tree);
--- 404,410 ----
  static tree build_assignment (int, int, tree, tree);
  static tree build_binop (enum tree_code, int, tree, tree);
  static tree patch_assignment (tree, tree);
! static tree patch_binop (tree, tree, tree, int);
  static tree build_unaryop (int, int, tree);
  static tree build_incdec (int, int, tree, int);
  static tree patch_unaryop (tree, tree);
*************** static tree build_try_finally_statement 
*** 474,486 ****
  static tree patch_try_statement (tree);
  static tree patch_synchronized_statement (tree, tree);
  static tree patch_throw_statement (tree, tree);
  #ifdef USE_MAPPED_LOCATION
  static void check_thrown_exceptions (source_location, tree, tree);
  #else
  static void check_thrown_exceptions (int, tree, tree);
  #endif
  static int check_thrown_exceptions_do (tree);
- static void purge_unchecked_exceptions (tree);
  static bool ctors_unchecked_throws_clause_p (tree);
  static void check_concrete_throws_clauses (tree, tree, tree, tree);
  static void check_throws_clauses (tree, tree, tree);
--- 475,487 ----
  static tree patch_try_statement (tree);
  static tree patch_synchronized_statement (tree, tree);
  static tree patch_throw_statement (tree, tree);
+ static void add_exception_to_throws (tree, tree);
  #ifdef USE_MAPPED_LOCATION
  static void check_thrown_exceptions (source_location, tree, tree);
  #else
  static void check_thrown_exceptions (int, tree, tree);
  #endif
  static int check_thrown_exceptions_do (tree);
  static bool ctors_unchecked_throws_clause_p (tree);
  static void check_concrete_throws_clauses (tree, tree, tree, tree);
  static void check_throws_clauses (tree, tree, tree);
*************** static tree build_instinit_invocation (t
*** 497,503 ****
  static void fix_constructors (tree);
  static tree build_alias_initializer_parameter_list (int, tree, tree, int *);
  static tree craft_constructor (tree, tree);
! static int verify_constructor_super (tree);
  static tree create_artificial_method (tree, int, tree, tree, tree);
  static void start_artificial_method_body (tree);
  static void end_artificial_method_body (tree);
--- 498,504 ----
  static void fix_constructors (tree);
  static tree build_alias_initializer_parameter_list (int, tree, tree, int *);
  static tree craft_constructor (tree, tree);
! static tree get_constructor_super (tree);
  static tree create_artificial_method (tree, int, tree, tree, tree);
  static void start_artificial_method_body (tree);
  static void end_artificial_method_body (tree);
*************** static void missing_return_error (tree);
*** 514,520 ****
  static tree build_new_array_init (int, tree);
  static tree patch_new_array_init (tree, tree);
  static tree maybe_build_array_element_wfl (tree);
! static int array_constructor_check_entry (tree, tree);
  static const char *purify_type_name (const char *);
  static tree fold_constant_for_init (tree, tree);
  static jdeplist *reverse_jdep_list (struct parser_ctxt *);
--- 515,521 ----
  static tree build_new_array_init (int, tree);
  static tree patch_new_array_init (tree, tree);
  static tree maybe_build_array_element_wfl (tree);
! static int array_constructor_check_entry (tree, constructor_elt *);
  static const char *purify_type_name (const char *);
  static tree fold_constant_for_init (tree, tree);
  static jdeplist *reverse_jdep_list (struct parser_ctxt *);
*************** static int pop_current_osb (struct parse
*** 552,558 ****
  static tree maybe_make_nested_class_name (tree);
  static int make_nested_class_name (tree);
  static void link_nested_class_to_enclosing (void);
! static tree resolve_inner_class (htab_t, tree, tree *, tree *, tree);
  static tree find_as_inner_class (tree, tree, tree);
  static tree find_as_inner_class_do (tree, tree);
  static int check_inner_class_redefinition (tree, tree);
--- 553,559 ----
  static tree maybe_make_nested_class_name (tree);
  static int make_nested_class_name (tree);
  static void link_nested_class_to_enclosing (void);
! static tree resolve_inner_class (tree, tree, tree, tree);
  static tree find_as_inner_class (tree, tree, tree);
  static tree find_as_inner_class_do (tree, tree);
  static int check_inner_class_redefinition (tree, tree);
*************** static tree build_current_thisn (tree);
*** 562,580 ****
  static tree build_access_to_thisn (tree, tree, int);
  static tree maybe_build_thisn_access_method (tree);
  
! static tree build_outer_field_access (tree, tree);
! static tree build_outer_field_access_methods (tree);
! static tree build_outer_field_access_expr (int, tree, tree,
! 						  tree, tree);
! static tree build_outer_method_access_method (tree);
  static tree build_new_access_id (void);
- static tree build_outer_field_access_method (tree, tree, tree,
- 						    tree, tree);
  
! static int outer_field_access_p (tree, tree);
! static int outer_field_expanded_access_p (tree, tree *,
! 						 tree *, tree *);
! static tree outer_field_access_fix (tree, tree, tree);
  static tree build_incomplete_class_ref (int, tree);
  static tree patch_incomplete_class_ref (tree);
  static tree create_anonymous_class (tree);
--- 563,579 ----
  static tree build_access_to_thisn (tree, tree, int);
  static tree maybe_build_thisn_access_method (tree);
  
! static tree build_nested_field_access (tree, tree);
! static tree build_nested_field_access_methods (tree);
! static tree build_nested_field_access_method (tree, tree, tree, tree, tree);
! static tree build_nested_field_access_expr (int, tree, tree, tree, tree);
! static tree build_nested_method_access_method (tree);
  static tree build_new_access_id (void);
  
! static int nested_member_access_p (tree, tree);
! static int nested_field_expanded_access_p (tree, tree *, tree *, tree *);
! static tree nested_field_access_fix (tree, tree, tree);
! 
  static tree build_incomplete_class_ref (int, tree);
  static tree patch_incomplete_class_ref (tree);
  static tree create_anonymous_class (tree);
*************** static char *string_convert_int_cst (tre
*** 594,601 ****
  int java_error_count;
  /* Number of warning found so far. */
  int java_warning_count;
- /* Tell when not to fold, when doing xrefs */
- int do_not_fold;
  /* Cyclic inheritance report, as it can be set by layout_class */
  const char *cyclic_inheritance_report;
  
--- 593,598 ----
*************** static GTY(()) tree src_parse_roots[1];
*** 706,712 ****
  #endif
  
  #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 454 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
  typedef union YYSTYPE {
    tree node;
    int sub_token;
--- 703,709 ----
  #endif
  
  #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 451 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
  typedef union YYSTYPE {
    tree node;
    int sub_token;
*************** typedef union YYSTYPE {
*** 721,727 ****
    int value;
  } YYSTYPE;
  /* Line 190 of yacc.c.  */
! #line 725 "java/parse.c"
  # define yystype YYSTYPE /* obsolescent; will be withdrawn */
  # define YYSTYPE_IS_DECLARED 1
  # define YYSTYPE_IS_TRIVIAL 1
--- 718,724 ----
    int value;
  } YYSTYPE;
  /* Line 190 of yacc.c.  */
! #line 722 "java/parse.c"
  # define yystype YYSTYPE /* obsolescent; will be withdrawn */
  # define YYSTYPE_IS_DECLARED 1
  # define YYSTYPE_IS_TRIVIAL 1
*************** typedef union YYSTYPE {
*** 730,736 ****
  
  
  /* Copy the second part of user declarations.  */
! #line 468 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
  
  #ifdef USE_MAPPED_LOCATION
  #define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \
--- 727,733 ----
  
  
  /* Copy the second part of user declarations.  */
! #line 465 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
  
  #ifdef USE_MAPPED_LOCATION
  #define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \
*************** typedef union YYSTYPE {
*** 744,750 ****
  
  
  /* Line 213 of yacc.c.  */
! #line 748 "java/parse.c"
  
  #if ! defined (yyoverflow) || YYERROR_VERBOSE
  
--- 741,747 ----
  
  
  /* Line 213 of yacc.c.  */
! #line 745 "java/parse.c"
  
  #if ! defined (yyoverflow) || YYERROR_VERBOSE
  
*************** union yyalloc
*** 846,861 ****
  /* YYFINAL -- State number of the termination state. */
  #define YYFINAL  32
  /* YYLAST -- Last index in YYTABLE.  */
! #define YYLAST   5705
  
  /* YYNTOKENS -- Number of terminals. */
  #define YYNTOKENS  112
  /* YYNNTS -- Number of nonterminals. */
  #define YYNNTS  165
  /* YYNRULES -- Number of rules. */
! #define YYNRULES  516
  /* YYNRULES -- Number of states. */
! #define YYNSTATES  791
  
  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
  #define YYUNDEFTOK  2
--- 843,858 ----
  /* YYFINAL -- State number of the termination state. */
  #define YYFINAL  32
  /* YYLAST -- Last index in YYTABLE.  */
! #define YYLAST   5769
  
  /* YYNTOKENS -- Number of terminals. */
  #define YYNTOKENS  112
  /* YYNNTS -- Number of nonterminals. */
  #define YYNNTS  165
  /* YYNRULES -- Number of rules. */
! #define YYNRULES  517
  /* YYNRULES -- Number of states. */
! #define YYNSTATES  792
  
  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
  #define YYUNDEFTOK  2
*************** static const unsigned short int yyprhs[]
*** 928,968 ****
       411,   415,   419,   424,   427,   431,   435,   440,   442,   447,
       453,   461,   468,   470,   472,   473,   478,   479,   485,   486,
       492,   493,   500,   504,   509,   512,   516,   519,   523,   526,
!      530,   532,   535,   537,   539,   541,   543,   545,   548,   551,
!      554,   558,   562,   567,   569,   573,   577,   580,   584,   586,
!      588,   590,   593,   595,   597,   599,   602,   605,   609,   611,
       613,   615,   617,   619,   621,   623,   625,   627,   629,   631,
       633,   635,   637,   639,   641,   643,   645,   647,   649,   651,
!      653,   655,   657,   660,   663,   666,   669,   672,   675,   678,
!      681,   685,   690,   695,   701,   706,   712,   719,   727,   734,
!      736,   738,   740,   742,   744,   746,   748,   754,   757,   761,
!      766,   774,   782,   783,   787,   792,   795,   799,   805,   808,
!      812,   816,   821,   823,   826,   829,   831,   834,   838,   841,
!      844,   848,   851,   856,   859,   862,   866,   871,   874,   876,
!      884,   892,   899,   903,   909,   914,   922,   929,   932,   935,
!      939,   942,   943,   945,   947,   950,   951,   953,   955,   959,
!      963,   966,   970,   973,   977,   980,   984,   987,   991,   994,
!      998,  1001,  1005,  1009,  1012,  1016,  1022,  1026,  1029,  1033,
!     1039,  1045,  1048,  1053,  1057,  1059,  1063,  1067,  1072,  1075,
!     1077,  1080,  1083,  1088,  1091,  1095,  1100,  1103,  1106,  1108,
!     1110,  1112,  1114,  1116,  1120,  1122,  1124,  1126,  1128,  1130,
!     1134,  1138,  1142,  1146,  1150,  1154,  1158,  1162,  1166,  1172,
!     1177,  1179,  1184,  1190,  1196,  1203,  1207,  1211,  1216,  1222,
!     1225,  1229,  1230,  1238,  1239,  1246,  1250,  1254,  1256,  1260,
!     1264,  1268,  1272,  1277,  1282,  1286,  1290,  1295,  1300,  1304,
!     1308,  1310,  1313,  1317,  1321,  1324,  1327,  1331,  1335,  1339,
!     1343,  1346,  1350,  1355,  1361,  1368,  1374,  1381,  1386,  1391,
!     1396,  1401,  1406,  1410,  1415,  1419,  1424,  1428,  1433,  1435,
!     1437,  1439,  1441,  1444,  1447,  1449,  1451,  1454,  1456,  1459,
!     1461,  1464,  1467,  1470,  1473,  1476,  1479,  1481,  1484,  1487,
!     1489,  1492,  1495,  1501,  1506,  1511,  1517,  1522,  1525,  1531,
!     1536,  1542,  1544,  1548,  1552,  1556,  1560,  1564,  1568,  1570,
!     1574,  1578,  1582,  1586,  1588,  1592,  1596,  1600,  1604,  1608,
!     1612,  1614,  1618,  1622,  1626,  1630,  1634,  1638,  1642,  1646,
!     1650,  1654,  1656,  1660,  1664,  1668,  1672,  1674,  1678,  1682,
!     1684,  1688,  1692,  1694,  1698,  1702,  1704,  1708,  1712,  1714,
!     1718,  1722,  1724,  1730,  1735,  1739,  1745,  1747,  1749,  1753,
!     1757,  1759,  1761,  1763,  1765,  1767,  1769
  };
  
  /* YYRHS -- A `-1'-separated list of the rules' RHS. */
--- 925,965 ----
       411,   415,   419,   424,   427,   431,   435,   440,   442,   447,
       453,   461,   468,   470,   472,   473,   478,   479,   485,   486,
       492,   493,   500,   504,   509,   512,   516,   519,   523,   526,
!      530,   532,   535,   537,   539,   541,   543,   545,   547,   550,
!      553,   556,   560,   564,   569,   571,   575,   579,   582,   586,
!      588,   590,   592,   595,   597,   599,   601,   604,   607,   611,
       613,   615,   617,   619,   621,   623,   625,   627,   629,   631,
       633,   635,   637,   639,   641,   643,   645,   647,   649,   651,
!      653,   655,   657,   659,   662,   665,   668,   671,   674,   677,
!      680,   683,   687,   692,   697,   703,   708,   714,   721,   729,
!      736,   738,   740,   742,   744,   746,   748,   750,   756,   759,
!      763,   768,   776,   784,   785,   789,   794,   797,   801,   807,
!      810,   814,   818,   823,   825,   828,   831,   833,   836,   840,
!      843,   846,   850,   853,   858,   861,   864,   868,   873,   876,
!      878,   886,   894,   901,   905,   911,   916,   924,   931,   934,
!      937,   941,   944,   945,   947,   949,   952,   953,   955,   957,
!      961,   965,   968,   972,   975,   979,   982,   986,   989,   993,
!      996,  1000,  1003,  1007,  1011,  1014,  1018,  1024,  1028,  1031,
!     1035,  1041,  1047,  1050,  1055,  1059,  1061,  1065,  1069,  1074,
!     1077,  1079,  1082,  1085,  1090,  1093,  1097,  1102,  1105,  1108,
!     1110,  1112,  1114,  1116,  1118,  1122,  1124,  1126,  1128,  1130,
!     1132,  1136,  1140,  1144,  1148,  1152,  1156,  1160,  1164,  1168,
!     1174,  1179,  1181,  1186,  1192,  1198,  1205,  1209,  1213,  1218,
!     1224,  1227,  1231,  1232,  1240,  1241,  1248,  1252,  1256,  1258,
!     1262,  1266,  1270,  1274,  1279,  1284,  1288,  1292,  1297,  1302,
!     1306,  1310,  1312,  1315,  1319,  1323,  1326,  1329,  1333,  1337,
!     1341,  1345,  1348,  1352,  1357,  1363,  1370,  1376,  1383,  1388,
!     1393,  1398,  1403,  1408,  1412,  1417,  1421,  1426,  1430,  1435,
!     1437,  1439,  1441,  1443,  1446,  1449,  1451,  1453,  1456,  1458,
!     1461,  1463,  1466,  1469,  1472,  1475,  1478,  1481,  1483,  1486,
!     1489,  1491,  1494,  1497,  1503,  1508,  1513,  1519,  1524,  1527,
!     1533,  1538,  1544,  1546,  1550,  1554,  1558,  1562,  1566,  1570,
!     1572,  1576,  1580,  1584,  1588,  1590,  1594,  1598,  1602,  1606,
!     1610,  1614,  1616,  1620,  1624,  1628,  1632,  1636,  1640,  1644,
!     1648,  1652,  1656,  1658,  1662,  1666,  1670,  1674,  1676,  1680,
!     1684,  1686,  1690,  1694,  1696,  1700,  1704,  1706,  1710,  1714,
!     1716,  1720,  1724,  1726,  1732,  1737,  1741,  1747,  1749,  1751,
!     1755,  1759,  1761,  1763,  1765,  1767,  1769,  1771
  };
  
  /* YYRHS -- A `-1'-separated list of the rules' RHS. */
*************** static const short int yyrhs[] =
*** 1022,1208 ****
       120,    -1,   175,   102,   120,    -1,    64,     1,    -1,   175,
       102,     1,    -1,    97,    98,    -1,    97,   177,    98,    -1,
       178,    -1,   177,   178,    -1,   179,    -1,   180,    -1,   135,
!       -1,   170,    -1,   145,    -1,   152,   101,    -1,   152,     1,
!       -1,    97,    98,    -1,    97,   102,    98,    -1,    97,   182,
!       98,    -1,    97,   182,   102,    98,    -1,   149,    -1,   182,
!      102,   149,    -1,   182,   102,     1,    -1,   184,   185,    -1,
!      184,   186,   185,    -1,    97,    -1,    98,    -1,   187,    -1,
!      186,   187,    -1,   188,    -1,   190,    -1,   135,    -1,   189,
!      101,    -1,   115,   146,    -1,   156,   115,   146,    -1,   192,
!       -1,   195,    -1,   199,    -1,   200,    -1,   211,    -1,   215,
!       -1,   192,    -1,   196,    -1,   201,    -1,   212,    -1,   216,
!       -1,   183,    -1,   193,    -1,   197,    -1,   202,    -1,   214,
!       -1,   222,    -1,   223,    -1,   224,    -1,   227,    -1,   225,
!       -1,   229,    -1,   226,    -1,   101,    -1,   125,    90,    -1,
!      194,   190,    -1,   125,     1,    -1,   194,   191,    -1,   198,
!      101,    -1,     1,   101,    -1,     1,    97,    -1,     1,    98,
!       -1,   169,    95,     1,    -1,   169,    95,    96,     1,    -1,
!      169,    95,   242,     1,    -1,   169,    95,   242,    96,     1,
!       -1,   122,   103,    66,     1,    -1,   122,   103,    66,    95,
!        1,    -1,   122,   103,    66,    95,   242,     1,    -1,   122,
!      103,    66,    95,   242,    96,     1,    -1,   122,   103,    66,
!       95,    96,     1,    -1,   272,    -1,   256,    -1,   257,    -1,
!      252,    -1,   253,    -1,   249,    -1,   237,    -1,    49,    95,
!      275,    96,   190,    -1,    49,     1,    -1,    49,    95,     1,
!       -1,    49,    95,   275,     1,    -1,    49,    95,   275,    96,
!      191,    57,   190,    -1,    49,    95,   275,    96,   191,    57,
!      191,    -1,    -1,   204,   203,   205,    -1,    69,    95,   275,
!       96,    -1,    69,     1,    -1,    69,    95,     1,    -1,    69,
!       95,   275,    96,     1,    -1,    97,    98,    -1,    97,   208,
!       98,    -1,    97,   206,    98,    -1,    97,   206,   208,    98,
!       -1,   207,    -1,   206,   207,    -1,   208,   186,    -1,   209,
!       -1,   208,   209,    -1,    63,   276,    90,    -1,    48,    90,
!       -1,    63,     1,    -1,    63,   276,     1,    -1,    48,     1,
!       -1,    67,    95,   275,    96,    -1,   210,   190,    -1,    67,
!        1,    -1,    67,    95,     1,    -1,    67,    95,   275,     1,
!       -1,   210,   191,    -1,    52,    -1,   213,   190,    67,    95,
!      275,    96,   101,    -1,   218,   101,   275,   101,   220,    96,
!      190,    -1,   218,   101,   101,   220,    96,   190,    -1,   218,
!      101,     1,    -1,   218,   101,   275,   101,     1,    -1,   218,
!      101,   101,     1,    -1,   218,   101,   275,   101,   220,    96,
!      191,    -1,   218,   101,   101,   220,    96,   191,    -1,    72,
!       95,    -1,    72,     1,    -1,    72,    95,     1,    -1,   217,
!      219,    -1,    -1,   221,    -1,   189,    -1,   221,     1,    -1,
!       -1,   221,    -1,   198,    -1,   221,   102,   198,    -1,   221,
!      102,     1,    -1,    55,   101,    -1,    55,   125,   101,    -1,
!       55,     1,    -1,    55,   125,     1,    -1,    74,   101,    -1,
!       74,   125,   101,    -1,    74,     1,    -1,    74,   125,     1,
!       -1,    59,   101,    -1,    59,   275,   101,    -1,    59,     1,
!       -1,    59,   275,     1,    -1,    50,   275,   101,    -1,    50,
!        1,    -1,    50,   275,     1,    -1,    78,   275,    90,   275,
!      101,    -1,    78,   275,   101,    -1,    78,     1,    -1,    78,
!      275,     1,    -1,   228,    95,   275,    96,   183,    -1,   228,
!       95,   275,    96,     1,    -1,   228,     1,    -1,   228,    95,
!        1,    96,    -1,   228,    95,     1,    -1,   134,    -1,    71,
!      183,   230,    -1,    71,   183,   233,    -1,    71,   183,   230,
!      233,    -1,    71,     1,    -1,   231,    -1,   230,   231,    -1,
!      232,   183,    -1,    61,    95,   155,    96,    -1,    61,     1,
!       -1,    61,    95,     1,    -1,    61,    95,     1,    96,    -1,
!       65,   183,    -1,    65,     1,    -1,   235,    -1,   243,    -1,
!      244,    -1,   114,    -1,    77,    -1,    95,   275,    96,    -1,
!      237,    -1,   248,    -1,   249,    -1,   250,    -1,   236,    -1,
!      122,   103,    77,    -1,    95,   275,     1,    -1,   122,   103,
!        1,    -1,   116,   103,     1,    -1,    60,   103,     1,    -1,
!      122,   103,    68,    -1,   121,   103,    68,    -1,   116,   103,
!       68,    -1,    60,   103,    68,    -1,    73,   119,    95,   242,
!       96,    -1,    73,   119,    95,    96,    -1,   238,    -1,   241,
!      125,    95,    96,    -1,   241,   125,    95,    96,   141,    -1,
!      241,   125,    95,   242,    96,    -1,   241,   125,    95,   242,
!       96,   141,    -1,    73,     1,   101,    -1,    73,   119,     1,
!       -1,    73,   119,    95,     1,    -1,    73,   119,    95,   242,
!        1,    -1,   241,     1,    -1,   241,   125,     1,    -1,    -1,
!       73,   119,    95,   242,    96,   239,   141,    -1,    -1,    73,
!      119,    95,    96,   240,   141,    -1,   122,   103,    73,    -1,
!      234,   103,    73,    -1,   275,    -1,   242,   102,   275,    -1,
!      242,   102,     1,    -1,    73,   116,   245,    -1,    73,   118,
!      245,    -1,    73,   116,   245,   247,    -1,    73,   118,   245,
!      247,    -1,    73,     1,   100,    -1,    73,     1,    99,    -1,
!       73,   118,   247,   181,    -1,    73,   116,   247,   181,    -1,
!       73,     1,   100,    -1,    73,     1,    99,    -1,   246,    -1,
!      245,   246,    -1,    99,   275,   100,    -1,    99,   275,     1,
!       -1,    99,     1,    -1,    99,   100,    -1,   247,    99,   100,
!       -1,   247,    99,     1,    -1,   234,   103,   125,    -1,    66,
!      103,   125,    -1,    66,     1,    -1,   122,    95,    96,    -1,
!      122,    95,   242,    96,    -1,   234,   103,   125,    95,    96,
!       -1,   234,   103,   125,    95,   242,    96,    -1,    66,   103,
!      125,    95,    96,    -1,    66,   103,   125,    95,   242,    96,
!       -1,    66,   103,     1,    96,    -1,    66,   103,     1,   103,
!       -1,   122,    99,   275,   100,    -1,   235,    99,   275,   100,
!       -1,   244,    99,   275,   100,    -1,   122,    99,     1,    -1,
!      122,    99,   275,     1,    -1,   235,    99,     1,    -1,   235,
!       99,   275,     1,    -1,   244,    99,     1,    -1,   244,    99,
!      275,     1,    -1,   234,    -1,   122,    -1,   252,    -1,   253,
!       -1,   251,    47,    -1,   251,    46,    -1,   256,    -1,   257,
!       -1,     3,   255,    -1,   258,    -1,     3,     1,    -1,   254,
!       -1,     4,   254,    -1,     4,     1,    -1,    47,   255,    -1,
!       47,     1,    -1,    46,   255,    -1,    46,     1,    -1,   251,
!       -1,    91,   255,    -1,    92,   255,    -1,   259,    -1,    91,
!        1,    -1,    92,     1,    -1,    95,   116,   247,    96,   255,
!       -1,    95,   116,    96,   255,    -1,    95,   275,    96,   258,
!       -1,    95,   122,   247,    96,   258,    -1,    95,   116,    99,
!        1,    -1,    95,     1,    -1,    95,   116,   247,    96,     1,
!       -1,    95,   116,    96,     1,    -1,    95,   122,   247,    96,
!        1,    -1,   255,    -1,   260,     5,   255,    -1,   260,     6,
!      255,    -1,   260,     7,   255,    -1,   260,     5,     1,    -1,
!      260,     6,     1,    -1,   260,     7,     1,    -1,   260,    -1,
!      261,     3,   260,    -1,   261,     4,   260,    -1,   261,     3,
!        1,    -1,   261,     4,     1,    -1,   261,    -1,   262,     8,
!      261,    -1,   262,     9,   261,    -1,   262,    10,   261,    -1,
!      262,     8,     1,    -1,   262,     9,     1,    -1,   262,    10,
!        1,    -1,   262,    -1,   263,    20,   262,    -1,   263,    18,
!      262,    -1,   263,    21,   262,    -1,   263,    19,   262,    -1,
!      263,    58,   117,    -1,   263,    20,     1,    -1,   263,    18,
!        1,    -1,   263,    21,     1,    -1,   263,    19,     1,    -1,
!      263,    58,     1,    -1,   263,    -1,   264,    16,   263,    -1,
!      264,    17,   263,    -1,   264,    16,     1,    -1,   264,    17,
!        1,    -1,   264,    -1,   265,    11,   264,    -1,   265,    11,
!        1,    -1,   265,    -1,   266,    12,   265,    -1,   266,    12,
!        1,    -1,   266,    -1,   267,    13,   266,    -1,   267,    13,
!        1,    -1,   267,    -1,   268,    14,   267,    -1,   268,    14,
!        1,    -1,   268,    -1,   269,    15,   268,    -1,   269,    15,
!        1,    -1,   269,    -1,   269,    89,   275,    90,   270,    -1,
!      269,    89,    90,     1,    -1,   269,    89,     1,    -1,   269,
!       89,   275,    90,     1,    -1,   270,    -1,   272,    -1,   273,
!      274,   271,    -1,   273,   274,     1,    -1,   122,    -1,   248,
!       -1,   250,    -1,    93,    -1,    94,    -1,   271,    -1,   275,
!       -1
  };
  
  /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
  static const unsigned short int yyrline[] =
  {
!        0,   627,   627,   633,   634,   635,   636,   637,   638,   643,
!      644,   648,   649,   650,   654,   655,   659,   663,   667,   671,
!      679,   691,   692,   696,   700,   705,   710,   711,   712,   713,
!      714,   715,   716,   717,   721,   725,   732,   733,   737,   741,
!      743,   748,   749,   753,   779,   781,   786,   804,   806,   811,
!      813,   815,   816,   827,   831,   848,   847,   852,   851,   855,
!      857,   859,   864,   869,   870,   872,   874,   879,   880,   882,
!      890,   895,   900,   905,   912,   922,   923,   927,   928,   929,
!      930,   941,   942,   943,   945,   947,   952,   954,   966,   967,
!      969,   974,   976,   983,   989,   998,   999,  1001,  1003,  1008,
!     1013,  1014,  1020,  1019,  1030,  1035,  1037,  1039,  1041,  1043,
!     1048,  1053,  1058,  1063,  1071,  1076,  1078,  1087,  1089,  1094,
!     1098,  1103,  1108,  1112,  1117,  1122,  1130,  1140,  1141,  1143,
!     1148,  1150,  1152,  1157,  1158,  1163,  1172,  1189,  1188,  1198,
!     1200,  1205,  1210,  1218,  1223,  1225,  1227,  1232,  1237,  1243,
!     1251,  1253,  1258,  1264,  1276,  1275,  1280,  1279,  1284,  1283,
!     1288,  1287,  1291,  1293,  1298,  1303,  1308,  1310,  1315,  1317,
!     1322,  1323,  1327,  1328,  1329,  1331,  1336,  1340,  1345,  1351,
!     1353,  1355,  1357,  1362,  1367,  1371,  1377,  1379,  1384,  1389,
!     1402,  1403,  1407,  1408,  1410,  1418,  1422,  1424,  1429,  1430,
!     1431,  1432,  1433,  1434,  1439,  1440,  1441,  1442,  1443,  1448,
!     1449,  1450,  1451,  1452,  1453,  1454,  1455,  1456,  1457,  1458,
!     1459,  1463,  1485,  1496,  1498,  1503,  1510,  1523,  1528,  1533,
!     1538,  1540,  1545,  1547,  1552,  1554,  1556,  1558,  1560,  1565,
!     1566,  1567,  1568,  1569,  1570,  1571,  1575,  1580,  1582,  1584,
!     1589,  1594,  1600,  1599,  1615,  1621,  1623,  1625,  1633,  1635,
!     1637,  1639,  1644,  1645,  1649,  1653,  1654,  1658,  1664,  1670,
!     1672,  1674,  1679,  1687,  1689,  1691,  1693,  1698,  1703,  1712,
!     1717,  1723,  1730,  1732,  1734,  1739,  1741,  1751,  1757,  1759,
!     1764,  1777,  1778,  1784,  1790,  1795,  1796,  1801,  1803,  1805,
!     1810,  1812,  1814,  1816,  1821,  1823,  1825,  1827,  1832,  1834,
!     1836,  1838,  1843,  1848,  1850,  1855,  1859,  1863,  1865,  1870,
!     1876,  1878,  1880,  1882,  1887,  1899,  1901,  1903,  1908,  1913,
!     1914,  1922,  1931,  1956,  1958,  1963,  1968,  1970,  1976,  1977,
!     1978,  1982,  1983,  1985,  1987,  1988,  1989,  1990,  1991,  1995,
!     2000,  2002,  2004,  2006,  2011,  2013,  2015,  2017,  2025,  2027,
!     2029,  2033,  2039,  2040,  2046,  2047,  2049,  2051,  2053,  2055,
!     2062,  2073,  2072,  2106,  2105,  2123,  2125,  2130,  2135,  2140,
!     2145,  2147,  2149,  2151,  2153,  2155,  2162,  2173,  2182,  2184,
!     2189,  2191,  2196,  2206,  2208,  2217,  2243,  2245,  2250,  2254,
!     2260,  2265,  2267,  2269,  2280,  2291,  2296,  2305,  2307,  2312,
!     2314,  2316,  2318,  2323,  2328,  2333,  2338,  2343,  2351,  2352,
!     2353,  2354,  2358,  2363,  2368,  2369,  2370,  2372,  2373,  2378,
!     2384,  2386,  2391,  2393,  2398,  2400,  2405,  2406,  2408,  2410,
!     2411,  2413,  2418,  2426,  2428,  2430,  2444,  2446,  2451,  2453,
!     2455,  2460,  2461,  2466,  2471,  2476,  2478,  2480,  2485,  2486,
!     2491,  2496,  2498,  2503,  2504,  2509,  2514,  2519,  2521,  2523,
!     2528,  2529,  2534,  2539,  2544,  2549,  2551,  2553,  2555,  2557,
!     2559,  2564,  2565,  2570,  2575,  2577,  2582,  2583,  2588,  2593,
!     2594,  2599,  2604,  2605,  2610,  2615,  2616,  2621,  2626,  2627,
!     2632,  2637,  2638,  2643,  2649,  2651,  2656,  2657,  2661,  2663,
!     2671,  2672,  2673,  2677,  2678,  2682,  2686
  };
  #endif
  
--- 1019,1205 ----
       120,    -1,   175,   102,   120,    -1,    64,     1,    -1,   175,
       102,     1,    -1,    97,    98,    -1,    97,   177,    98,    -1,
       178,    -1,   177,   178,    -1,   179,    -1,   180,    -1,   135,
!       -1,   170,    -1,   193,    -1,   145,    -1,   152,   101,    -1,
!      152,     1,    -1,    97,    98,    -1,    97,   102,    98,    -1,
!       97,   182,    98,    -1,    97,   182,   102,    98,    -1,   149,
!       -1,   182,   102,   149,    -1,   182,   102,     1,    -1,   184,
!      185,    -1,   184,   186,   185,    -1,    97,    -1,    98,    -1,
!      187,    -1,   186,   187,    -1,   188,    -1,   190,    -1,   135,
!       -1,   189,   101,    -1,   115,   146,    -1,   156,   115,   146,
!       -1,   192,    -1,   195,    -1,   199,    -1,   200,    -1,   211,
!       -1,   215,    -1,   192,    -1,   196,    -1,   201,    -1,   212,
!       -1,   216,    -1,   183,    -1,   193,    -1,   197,    -1,   202,
!       -1,   214,    -1,   222,    -1,   223,    -1,   224,    -1,   227,
!       -1,   225,    -1,   229,    -1,   226,    -1,   101,    -1,   125,
!       90,    -1,   194,   190,    -1,   125,     1,    -1,   194,   191,
!       -1,   198,   101,    -1,     1,   101,    -1,     1,    97,    -1,
!        1,    98,    -1,   169,    95,     1,    -1,   169,    95,    96,
!        1,    -1,   169,    95,   242,     1,    -1,   169,    95,   242,
!       96,     1,    -1,   122,   103,    66,     1,    -1,   122,   103,
!       66,    95,     1,    -1,   122,   103,    66,    95,   242,     1,
!       -1,   122,   103,    66,    95,   242,    96,     1,    -1,   122,
!      103,    66,    95,    96,     1,    -1,   272,    -1,   256,    -1,
!      257,    -1,   252,    -1,   253,    -1,   249,    -1,   237,    -1,
!       49,    95,   275,    96,   190,    -1,    49,     1,    -1,    49,
!       95,     1,    -1,    49,    95,   275,     1,    -1,    49,    95,
!      275,    96,   191,    57,   190,    -1,    49,    95,   275,    96,
!      191,    57,   191,    -1,    -1,   204,   203,   205,    -1,    69,
!       95,   275,    96,    -1,    69,     1,    -1,    69,    95,     1,
!       -1,    69,    95,   275,    96,     1,    -1,    97,    98,    -1,
!       97,   208,    98,    -1,    97,   206,    98,    -1,    97,   206,
!      208,    98,    -1,   207,    -1,   206,   207,    -1,   208,   186,
!       -1,   209,    -1,   208,   209,    -1,    63,   276,    90,    -1,
!       48,    90,    -1,    63,     1,    -1,    63,   276,     1,    -1,
!       48,     1,    -1,    67,    95,   275,    96,    -1,   210,   190,
!       -1,    67,     1,    -1,    67,    95,     1,    -1,    67,    95,
!      275,     1,    -1,   210,   191,    -1,    52,    -1,   213,   190,
!       67,    95,   275,    96,   101,    -1,   218,   101,   275,   101,
!      220,    96,   190,    -1,   218,   101,   101,   220,    96,   190,
!       -1,   218,   101,     1,    -1,   218,   101,   275,   101,     1,
!       -1,   218,   101,   101,     1,    -1,   218,   101,   275,   101,
!      220,    96,   191,    -1,   218,   101,   101,   220,    96,   191,
!       -1,    72,    95,    -1,    72,     1,    -1,    72,    95,     1,
!       -1,   217,   219,    -1,    -1,   221,    -1,   189,    -1,   221,
!        1,    -1,    -1,   221,    -1,   198,    -1,   221,   102,   198,
!       -1,   221,   102,     1,    -1,    55,   101,    -1,    55,   125,
!      101,    -1,    55,     1,    -1,    55,   125,     1,    -1,    74,
!      101,    -1,    74,   125,   101,    -1,    74,     1,    -1,    74,
!      125,     1,    -1,    59,   101,    -1,    59,   275,   101,    -1,
!       59,     1,    -1,    59,   275,     1,    -1,    50,   275,   101,
!       -1,    50,     1,    -1,    50,   275,     1,    -1,    78,   275,
!       90,   275,   101,    -1,    78,   275,   101,    -1,    78,     1,
!       -1,    78,   275,     1,    -1,   228,    95,   275,    96,   183,
!       -1,   228,    95,   275,    96,     1,    -1,   228,     1,    -1,
!      228,    95,     1,    96,    -1,   228,    95,     1,    -1,   134,
!       -1,    71,   183,   230,    -1,    71,   183,   233,    -1,    71,
!      183,   230,   233,    -1,    71,     1,    -1,   231,    -1,   230,
!      231,    -1,   232,   183,    -1,    61,    95,   155,    96,    -1,
!       61,     1,    -1,    61,    95,     1,    -1,    61,    95,     1,
!       96,    -1,    65,   183,    -1,    65,     1,    -1,   235,    -1,
!      243,    -1,   244,    -1,   114,    -1,    77,    -1,    95,   275,
!       96,    -1,   237,    -1,   248,    -1,   249,    -1,   250,    -1,
!      236,    -1,   122,   103,    77,    -1,    95,   275,     1,    -1,
!      122,   103,     1,    -1,   116,   103,     1,    -1,    60,   103,
!        1,    -1,   122,   103,    68,    -1,   121,   103,    68,    -1,
!      116,   103,    68,    -1,    60,   103,    68,    -1,    73,   119,
!       95,   242,    96,    -1,    73,   119,    95,    96,    -1,   238,
!       -1,   241,   125,    95,    96,    -1,   241,   125,    95,    96,
!      141,    -1,   241,   125,    95,   242,    96,    -1,   241,   125,
!       95,   242,    96,   141,    -1,    73,     1,   101,    -1,    73,
!      119,     1,    -1,    73,   119,    95,     1,    -1,    73,   119,
!       95,   242,     1,    -1,   241,     1,    -1,   241,   125,     1,
!       -1,    -1,    73,   119,    95,   242,    96,   239,   141,    -1,
!       -1,    73,   119,    95,    96,   240,   141,    -1,   122,   103,
!       73,    -1,   234,   103,    73,    -1,   275,    -1,   242,   102,
!      275,    -1,   242,   102,     1,    -1,    73,   116,   245,    -1,
!       73,   118,   245,    -1,    73,   116,   245,   247,    -1,    73,
!      118,   245,   247,    -1,    73,     1,   100,    -1,    73,     1,
!       99,    -1,    73,   118,   247,   181,    -1,    73,   116,   247,
!      181,    -1,    73,     1,   100,    -1,    73,     1,    99,    -1,
!      246,    -1,   245,   246,    -1,    99,   275,   100,    -1,    99,
!      275,     1,    -1,    99,     1,    -1,    99,   100,    -1,   247,
!       99,   100,    -1,   247,    99,     1,    -1,   234,   103,   125,
!       -1,    66,   103,   125,    -1,    66,     1,    -1,   122,    95,
!       96,    -1,   122,    95,   242,    96,    -1,   234,   103,   125,
!       95,    96,    -1,   234,   103,   125,    95,   242,    96,    -1,
!       66,   103,   125,    95,    96,    -1,    66,   103,   125,    95,
!      242,    96,    -1,    66,   103,     1,    96,    -1,    66,   103,
!        1,   103,    -1,   122,    99,   275,   100,    -1,   235,    99,
!      275,   100,    -1,   244,    99,   275,   100,    -1,   122,    99,
!        1,    -1,   122,    99,   275,     1,    -1,   235,    99,     1,
!       -1,   235,    99,   275,     1,    -1,   244,    99,     1,    -1,
!      244,    99,   275,     1,    -1,   234,    -1,   122,    -1,   252,
!       -1,   253,    -1,   251,    47,    -1,   251,    46,    -1,   256,
!       -1,   257,    -1,     3,   255,    -1,   258,    -1,     3,     1,
!       -1,   254,    -1,     4,   254,    -1,     4,     1,    -1,    47,
!      255,    -1,    47,     1,    -1,    46,   255,    -1,    46,     1,
!       -1,   251,    -1,    91,   255,    -1,    92,   255,    -1,   259,
!       -1,    91,     1,    -1,    92,     1,    -1,    95,   116,   247,
!       96,   255,    -1,    95,   116,    96,   255,    -1,    95,   275,
!       96,   258,    -1,    95,   122,   247,    96,   258,    -1,    95,
!      116,    99,     1,    -1,    95,     1,    -1,    95,   116,   247,
!       96,     1,    -1,    95,   116,    96,     1,    -1,    95,   122,
!      247,    96,     1,    -1,   255,    -1,   260,     5,   255,    -1,
!      260,     6,   255,    -1,   260,     7,   255,    -1,   260,     5,
!        1,    -1,   260,     6,     1,    -1,   260,     7,     1,    -1,
!      260,    -1,   261,     3,   260,    -1,   261,     4,   260,    -1,
!      261,     3,     1,    -1,   261,     4,     1,    -1,   261,    -1,
!      262,     8,   261,    -1,   262,     9,   261,    -1,   262,    10,
!      261,    -1,   262,     8,     1,    -1,   262,     9,     1,    -1,
!      262,    10,     1,    -1,   262,    -1,   263,    20,   262,    -1,
!      263,    18,   262,    -1,   263,    21,   262,    -1,   263,    19,
!      262,    -1,   263,    58,   117,    -1,   263,    20,     1,    -1,
!      263,    18,     1,    -1,   263,    21,     1,    -1,   263,    19,
!        1,    -1,   263,    58,     1,    -1,   263,    -1,   264,    16,
!      263,    -1,   264,    17,   263,    -1,   264,    16,     1,    -1,
!      264,    17,     1,    -1,   264,    -1,   265,    11,   264,    -1,
!      265,    11,     1,    -1,   265,    -1,   266,    12,   265,    -1,
!      266,    12,     1,    -1,   266,    -1,   267,    13,   266,    -1,
!      267,    13,     1,    -1,   267,    -1,   268,    14,   267,    -1,
!      268,    14,     1,    -1,   268,    -1,   269,    15,   268,    -1,
!      269,    15,     1,    -1,   269,    -1,   269,    89,   275,    90,
!      270,    -1,   269,    89,    90,     1,    -1,   269,    89,     1,
!       -1,   269,    89,   275,    90,     1,    -1,   270,    -1,   272,
!       -1,   273,   274,   271,    -1,   273,   274,     1,    -1,   122,
!       -1,   248,    -1,   250,    -1,    93,    -1,    94,    -1,   271,
!       -1,   275,    -1
  };
  
  /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
  static const unsigned short int yyrline[] =
  {
!        0,   624,   624,   630,   631,   632,   633,   634,   635,   640,
!      641,   645,   646,   647,   651,   652,   656,   660,   664,   668,
!      676,   688,   689,   693,   697,   702,   707,   708,   709,   710,
!      711,   712,   713,   714,   718,   722,   729,   730,   734,   738,
!      740,   745,   746,   750,   776,   778,   783,   801,   803,   808,
!      810,   812,   813,   824,   828,   845,   844,   849,   848,   852,
!      854,   856,   861,   866,   867,   869,   871,   876,   877,   879,
!      887,   892,   897,   902,   906,   913,   914,   918,   919,   920,
!      921,   932,   933,   934,   936,   938,   943,   945,   957,   958,
!      960,   965,   967,   974,   980,   989,   990,   992,   994,   999,
!     1004,  1005,  1011,  1010,  1021,  1026,  1028,  1030,  1032,  1034,
!     1040,  1046,  1052,  1058,  1067,  1072,  1074,  1083,  1085,  1090,
!     1094,  1099,  1104,  1108,  1113,  1118,  1126,  1136,  1137,  1139,
!     1144,  1146,  1148,  1153,  1154,  1159,  1168,  1185,  1184,  1194,
!     1196,  1201,  1206,  1214,  1219,  1221,  1223,  1228,  1233,  1239,
!     1247,  1249,  1254,  1260,  1272,  1271,  1276,  1275,  1280,  1279,
!     1284,  1283,  1287,  1289,  1294,  1299,  1304,  1306,  1311,  1313,
!     1318,  1319,  1323,  1324,  1325,  1327,  1329,  1333,  1337,  1342,
!     1348,  1350,  1352,  1354,  1359,  1364,  1368,  1374,  1376,  1381,
!     1386,  1396,  1397,  1401,  1402,  1404,  1412,  1416,  1418,  1423,
!     1424,  1425,  1426,  1427,  1428,  1433,  1434,  1435,  1436,  1437,
!     1442,  1443,  1444,  1445,  1446,  1447,  1448,  1449,  1450,  1451,
!     1452,  1453,  1457,  1479,  1490,  1492,  1497,  1504,  1517,  1522,
!     1527,  1532,  1534,  1539,  1541,  1546,  1548,  1550,  1552,  1554,
!     1559,  1560,  1561,  1562,  1563,  1564,  1565,  1569,  1574,  1576,
!     1578,  1583,  1588,  1594,  1593,  1609,  1615,  1617,  1619,  1627,
!     1629,  1631,  1633,  1638,  1639,  1643,  1647,  1648,  1652,  1658,
!     1664,  1666,  1668,  1673,  1681,  1683,  1685,  1687,  1692,  1697,
!     1706,  1711,  1717,  1724,  1726,  1728,  1733,  1735,  1745,  1751,
!     1753,  1758,  1771,  1772,  1778,  1784,  1789,  1790,  1795,  1797,
!     1799,  1804,  1806,  1808,  1810,  1815,  1817,  1819,  1821,  1826,
!     1828,  1830,  1832,  1837,  1842,  1844,  1849,  1853,  1857,  1859,
!     1864,  1870,  1872,  1874,  1876,  1881,  1893,  1895,  1897,  1902,
!     1907,  1908,  1916,  1925,  1950,  1952,  1957,  1962,  1964,  1970,
!     1971,  1972,  1976,  1977,  1979,  1981,  1982,  1983,  1984,  1985,
!     1989,  1994,  1996,  1998,  2000,  2005,  2007,  2009,  2011,  2019,
!     2021,  2023,  2027,  2033,  2034,  2040,  2041,  2043,  2045,  2047,
!     2049,  2056,  2067,  2066,  2100,  2099,  2117,  2119,  2124,  2129,
!     2134,  2139,  2141,  2143,  2145,  2147,  2149,  2156,  2167,  2176,
!     2178,  2183,  2185,  2190,  2200,  2202,  2211,  2237,  2239,  2244,
!     2248,  2254,  2259,  2261,  2263,  2274,  2285,  2290,  2299,  2301,
!     2306,  2308,  2310,  2312,  2317,  2322,  2327,  2332,  2337,  2345,
!     2346,  2347,  2348,  2352,  2357,  2362,  2363,  2364,  2366,  2367,
!     2372,  2378,  2380,  2385,  2387,  2392,  2394,  2399,  2400,  2402,
!     2404,  2405,  2407,  2412,  2420,  2422,  2424,  2438,  2440,  2445,
!     2447,  2449,  2454,  2455,  2460,  2465,  2470,  2472,  2474,  2479,
!     2480,  2485,  2490,  2492,  2497,  2498,  2503,  2508,  2513,  2515,
!     2517,  2522,  2523,  2528,  2533,  2538,  2543,  2545,  2547,  2549,
!     2551,  2553,  2558,  2559,  2564,  2569,  2571,  2576,  2577,  2582,
!     2587,  2588,  2593,  2598,  2599,  2604,  2609,  2610,  2615,  2620,
!     2621,  2626,  2631,  2632,  2637,  2643,  2645,  2650,  2651,  2655,
!     2657,  2665,  2666,  2667,  2671,  2672,  2676,  2680
  };
  #endif
  
*************** static const unsigned short int yyr1[] =
*** 1328,1368 ****
       164,   165,   165,   166,   166,   166,   166,   167,   168,   168,
       168,   168,   169,   169,   171,   170,   172,   170,   173,   170,
       174,   170,   170,   170,   175,   175,   175,   175,   176,   176,
!      177,   177,   178,   178,   178,   178,   179,   180,   180,   181,
!      181,   181,   181,   182,   182,   182,   183,   183,   184,   185,
!      186,   186,   187,   187,   187,   188,   189,   189,   190,   190,
!      190,   190,   190,   190,   191,   191,   191,   191,   191,   192,
       192,   192,   192,   192,   192,   192,   192,   192,   192,   192,
!      192,   193,   194,   195,   195,   196,   197,   197,   197,   197,
!      197,   197,   197,   197,   197,   197,   197,   197,   197,   198,
!      198,   198,   198,   198,   198,   198,   199,   199,   199,   199,
!      200,   201,   203,   202,   204,   204,   204,   204,   205,   205,
!      205,   205,   206,   206,   207,   208,   208,   209,   209,   209,
!      209,   209,   210,   211,   211,   211,   211,   212,   213,   214,
!      215,   215,   215,   215,   215,   216,   216,   217,   217,   217,
!      218,   219,   219,   219,   219,   220,   220,   221,   221,   221,
!      222,   222,   222,   222,   223,   223,   223,   223,   224,   224,
!      224,   224,   225,   225,   225,   226,   226,   226,   226,   227,
!      227,   227,   227,   227,   228,   229,   229,   229,   229,   230,
!      230,   231,   232,   232,   232,   232,   233,   233,   234,   234,
!      234,   235,   235,   235,   235,   235,   235,   235,   235,   235,
!      235,   235,   235,   235,   236,   236,   236,   236,   237,   237,
       237,   237,   237,   237,   237,   237,   237,   237,   237,   237,
!      237,   239,   238,   240,   238,   241,   241,   242,   242,   242,
!      243,   243,   243,   243,   243,   243,   244,   244,   244,   244,
!      245,   245,   246,   246,   246,   247,   247,   247,   248,   248,
!      248,   249,   249,   249,   249,   249,   249,   249,   249,   250,
!      250,   250,   250,   250,   250,   250,   250,   250,   251,   251,
!      251,   251,   252,   253,   254,   254,   254,   254,   254,   255,
!      255,   255,   256,   256,   257,   257,   258,   258,   258,   258,
!      258,   258,   259,   259,   259,   259,   259,   259,   259,   259,
!      259,   260,   260,   260,   260,   260,   260,   260,   261,   261,
!      261,   261,   261,   262,   262,   262,   262,   262,   262,   262,
!      263,   263,   263,   263,   263,   263,   263,   263,   263,   263,
!      263,   264,   264,   264,   264,   264,   265,   265,   265,   266,
!      266,   266,   267,   267,   267,   268,   268,   268,   269,   269,
!      269,   270,   270,   270,   270,   270,   271,   271,   272,   272,
!      273,   273,   273,   274,   274,   275,   276
  };
  
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
--- 1325,1365 ----
       164,   165,   165,   166,   166,   166,   166,   167,   168,   168,
       168,   168,   169,   169,   171,   170,   172,   170,   173,   170,
       174,   170,   170,   170,   175,   175,   175,   175,   176,   176,
!      177,   177,   178,   178,   178,   178,   178,   179,   180,   180,
!      181,   181,   181,   181,   182,   182,   182,   183,   183,   184,
!      185,   186,   186,   187,   187,   187,   188,   189,   189,   190,
!      190,   190,   190,   190,   190,   191,   191,   191,   191,   191,
       192,   192,   192,   192,   192,   192,   192,   192,   192,   192,
!      192,   192,   193,   194,   195,   195,   196,   197,   197,   197,
!      197,   197,   197,   197,   197,   197,   197,   197,   197,   197,
!      198,   198,   198,   198,   198,   198,   198,   199,   199,   199,
!      199,   200,   201,   203,   202,   204,   204,   204,   204,   205,
!      205,   205,   205,   206,   206,   207,   208,   208,   209,   209,
!      209,   209,   209,   210,   211,   211,   211,   211,   212,   213,
!      214,   215,   215,   215,   215,   215,   216,   216,   217,   217,
!      217,   218,   219,   219,   219,   219,   220,   220,   221,   221,
!      221,   222,   222,   222,   222,   223,   223,   223,   223,   224,
!      224,   224,   224,   225,   225,   225,   226,   226,   226,   226,
!      227,   227,   227,   227,   227,   228,   229,   229,   229,   229,
!      230,   230,   231,   232,   232,   232,   232,   233,   233,   234,
!      234,   234,   235,   235,   235,   235,   235,   235,   235,   235,
!      235,   235,   235,   235,   235,   236,   236,   236,   236,   237,
       237,   237,   237,   237,   237,   237,   237,   237,   237,   237,
!      237,   237,   239,   238,   240,   238,   241,   241,   242,   242,
!      242,   243,   243,   243,   243,   243,   243,   244,   244,   244,
!      244,   245,   245,   246,   246,   246,   247,   247,   247,   248,
!      248,   248,   249,   249,   249,   249,   249,   249,   249,   249,
!      250,   250,   250,   250,   250,   250,   250,   250,   250,   251,
!      251,   251,   251,   252,   253,   254,   254,   254,   254,   254,
!      255,   255,   255,   256,   256,   257,   257,   258,   258,   258,
!      258,   258,   258,   259,   259,   259,   259,   259,   259,   259,
!      259,   259,   260,   260,   260,   260,   260,   260,   260,   261,
!      261,   261,   261,   261,   262,   262,   262,   262,   262,   262,
!      262,   263,   263,   263,   263,   263,   263,   263,   263,   263,
!      263,   263,   264,   264,   264,   264,   264,   265,   265,   265,
!      266,   266,   266,   267,   267,   267,   268,   268,   268,   269,
!      269,   269,   270,   270,   270,   270,   270,   271,   271,   272,
!      272,   273,   273,   273,   274,   274,   275,   276
  };
  
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
*************** static const unsigned char yyr2[] =
*** 1385,1425 ****
         3,     3,     4,     2,     3,     3,     4,     1,     4,     5,
         7,     6,     1,     1,     0,     4,     0,     5,     0,     5,
         0,     6,     3,     4,     2,     3,     2,     3,     2,     3,
!        1,     2,     1,     1,     1,     1,     1,     2,     2,     2,
!        3,     3,     4,     1,     3,     3,     2,     3,     1,     1,
!        1,     2,     1,     1,     1,     2,     2,     3,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
!        1,     1,     2,     2,     2,     2,     2,     2,     2,     2,
!        3,     4,     4,     5,     4,     5,     6,     7,     6,     1,
!        1,     1,     1,     1,     1,     1,     5,     2,     3,     4,
!        7,     7,     0,     3,     4,     2,     3,     5,     2,     3,
!        3,     4,     1,     2,     2,     1,     2,     3,     2,     2,
!        3,     2,     4,     2,     2,     3,     4,     2,     1,     7,
!        7,     6,     3,     5,     4,     7,     6,     2,     2,     3,
!        2,     0,     1,     1,     2,     0,     1,     1,     3,     3,
!        2,     3,     2,     3,     2,     3,     2,     3,     2,     3,
!        2,     3,     3,     2,     3,     5,     3,     2,     3,     5,
!        5,     2,     4,     3,     1,     3,     3,     4,     2,     1,
!        2,     2,     4,     2,     3,     4,     2,     2,     1,     1,
!        1,     1,     1,     3,     1,     1,     1,     1,     1,     3,
!        3,     3,     3,     3,     3,     3,     3,     3,     5,     4,
!        1,     4,     5,     5,     6,     3,     3,     4,     5,     2,
!        3,     0,     7,     0,     6,     3,     3,     1,     3,     3,
!        3,     3,     4,     4,     3,     3,     4,     4,     3,     3,
!        1,     2,     3,     3,     2,     2,     3,     3,     3,     3,
!        2,     3,     4,     5,     6,     5,     6,     4,     4,     4,
!        4,     4,     3,     4,     3,     4,     3,     4,     1,     1,
!        1,     1,     2,     2,     1,     1,     2,     1,     2,     1,
!        2,     2,     2,     2,     2,     2,     1,     2,     2,     1,
!        2,     2,     5,     4,     4,     5,     4,     2,     5,     4,
!        5,     1,     3,     3,     3,     3,     3,     3,     1,     3,
!        3,     3,     3,     1,     3,     3,     3,     3,     3,     3,
!        1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
!        3,     1,     3,     3,     3,     3,     1,     3,     3,     1,
!        3,     3,     1,     3,     3,     1,     3,     3,     1,     3,
!        3,     1,     5,     4,     3,     5,     1,     1,     3,     3,
!        1,     1,     1,     1,     1,     1,     1
  };
  
  /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
--- 1382,1422 ----
         3,     3,     4,     2,     3,     3,     4,     1,     4,     5,
         7,     6,     1,     1,     0,     4,     0,     5,     0,     5,
         0,     6,     3,     4,     2,     3,     2,     3,     2,     3,
!        1,     2,     1,     1,     1,     1,     1,     1,     2,     2,
!        2,     3,     3,     4,     1,     3,     3,     2,     3,     1,
!        1,     1,     2,     1,     1,     1,     2,     2,     3,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
!        1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
!        2,     3,     4,     4,     5,     4,     5,     6,     7,     6,
!        1,     1,     1,     1,     1,     1,     1,     5,     2,     3,
!        4,     7,     7,     0,     3,     4,     2,     3,     5,     2,
!        3,     3,     4,     1,     2,     2,     1,     2,     3,     2,
!        2,     3,     2,     4,     2,     2,     3,     4,     2,     1,
!        7,     7,     6,     3,     5,     4,     7,     6,     2,     2,
!        3,     2,     0,     1,     1,     2,     0,     1,     1,     3,
!        3,     2,     3,     2,     3,     2,     3,     2,     3,     2,
!        3,     2,     3,     3,     2,     3,     5,     3,     2,     3,
!        5,     5,     2,     4,     3,     1,     3,     3,     4,     2,
!        1,     2,     2,     4,     2,     3,     4,     2,     2,     1,
!        1,     1,     1,     1,     3,     1,     1,     1,     1,     1,
!        3,     3,     3,     3,     3,     3,     3,     3,     3,     5,
!        4,     1,     4,     5,     5,     6,     3,     3,     4,     5,
!        2,     3,     0,     7,     0,     6,     3,     3,     1,     3,
!        3,     3,     3,     4,     4,     3,     3,     4,     4,     3,
!        3,     1,     2,     3,     3,     2,     2,     3,     3,     3,
!        3,     2,     3,     4,     5,     6,     5,     6,     4,     4,
!        4,     4,     4,     3,     4,     3,     4,     3,     4,     1,
!        1,     1,     1,     2,     2,     1,     1,     2,     1,     2,
!        1,     2,     2,     2,     2,     2,     2,     1,     2,     2,
!        1,     2,     2,     5,     4,     4,     5,     4,     2,     5,
!        4,     5,     1,     3,     3,     3,     3,     3,     3,     1,
!        3,     3,     3,     3,     1,     3,     3,     3,     3,     3,
!        3,     1,     3,     3,     3,     3,     3,     3,     3,     3,
!        3,     3,     1,     3,     3,     3,     3,     1,     3,     3,
!        1,     3,     3,     1,     3,     3,     1,     3,     3,     1,
!        3,     3,     1,     5,     4,     3,     5,     1,     1,     3,
!        3,     1,     1,     1,     1,     1,     1,     1
  };
  
  /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
*************** static const unsigned char yyr2[] =
*** 1427,1433 ****
     means the default is an error.  */
  static const unsigned short int yydefact[] =
  {
!        0,    52,    53,     0,     0,     0,     0,   221,     0,     2,
         0,     0,     0,    34,    41,    42,    36,     0,    49,    50,
        51,    44,    25,     0,    21,    22,    23,     0,    60,     0,
        39,     0,     1,     0,    35,    37,     0,     0,    54,     0,
--- 1424,1430 ----
     means the default is an error.  */
  static const unsigned short int yydefact[] =
  {
!        0,    52,    53,     0,     0,     0,     0,   222,     0,     2,
         0,     0,     0,    34,    41,    42,    36,     0,    49,    50,
        51,    44,    25,     0,    21,    22,    23,     0,    60,     0,
        39,     0,     1,     0,    35,    37,     0,     0,    54,     0,
*************** static const unsigned short int yydefact
*** 1436,2798 ****
        24,   166,    18,   164,    16,     0,   155,     0,     0,    66,
        17,     0,     0,    57,   163,     0,   160,    62,    67,    48,
        46,    13,     0,    11,    12,   168,     0,     9,    10,    14,
!       15,    16,     0,   174,   176,     0,   175,     0,   170,   172,
!      173,   167,   165,   159,    65,    69,    70,    68,     0,   157,
!        0,    55,   111,     0,   127,   109,     0,     0,    88,    91,
!      127,     0,    19,    20,   113,     0,     0,   178,   177,   169,
!      171,     0,     0,    58,   161,     0,     0,     0,     0,   106,
!       97,    86,     0,     0,     0,     0,   105,   395,     0,   112,
!      127,   110,     0,   127,    72,    71,   188,    73,    21,     0,
!       83,     0,    75,    77,    81,    82,     0,    78,     0,    79,
!      137,   127,    84,    80,     0,    85,    56,   117,   114,     0,
!      126,     0,   119,     0,   129,   130,   128,   118,   116,    90,
!        0,    89,    93,     0,     0,     0,     0,     0,     0,     0,
!      342,     0,     0,     0,     0,     7,     6,     3,     4,     5,
!        8,   341,     0,     0,   419,     0,   101,   418,   338,   348,
!      344,   360,     0,   339,   340,   345,   346,   347,   436,   420,
!      421,   429,   451,   424,   425,   427,   439,   458,   463,   470,
!      481,   486,   489,   492,   495,   498,   501,   506,   515,   507,
!        0,   100,    98,    96,    99,   397,   396,   108,    87,   107,
!        0,   127,    74,    76,   104,     0,   135,     0,   139,     0,
!        0,     0,   278,     0,     0,     0,     0,     0,     0,     0,
!        0,   342,     0,     0,   189,     0,     9,    15,   419,     0,
!      126,   194,     0,     0,   209,   186,     0,   190,   192,     0,
!      193,   198,   210,     0,   199,   211,     0,   200,   201,   212,
!      252,     0,   202,     0,   213,   203,   291,     0,   214,   215,
!      216,   218,   220,   217,     0,   219,   245,   244,     0,   242,
!      243,   240,   241,   239,   124,   122,   115,     0,     0,     0,
!      428,   419,   345,   347,   426,   431,   430,   435,   434,   433,
!      432,     0,   400,     0,     0,     0,    17,     0,   440,   437,
!      441,   438,   447,     0,   419,     0,   179,     0,   183,     0,
!        0,     0,     0,     0,     0,    94,     0,     0,   369,     0,
!        0,   423,   422,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,   513,   514,     0,   141,     0,   140,
!      134,   103,   133,   138,     0,   228,   229,   227,   247,     0,
!      313,     0,   302,   300,     0,   310,   308,     0,   274,     0,
!      255,     0,   328,     0,   288,     0,   306,   304,     0,   317,
!        0,     0,   196,     0,   224,   222,     0,     0,   187,   191,
!      195,   419,   324,   223,   226,     0,   273,     0,   419,   293,
!      297,   290,     0,     0,   321,     0,   121,   120,   125,   123,
!      132,   131,   353,   357,     0,   399,   385,   384,   365,     0,
!      380,   390,     0,   381,     0,   366,     0,     0,     0,    19,
!       20,   350,   343,   180,   181,     0,   352,   356,   355,   401,
!        0,   377,   412,     0,   351,   354,   375,   349,   376,   398,
!      414,     0,   370,     0,   416,     0,   455,   452,   456,   453,
!      457,   454,   461,   459,   462,   460,   467,   464,   468,   465,
!      469,   466,   477,   472,   479,   474,   476,   471,   478,   473,
!      480,     0,   475,   484,   482,   485,   483,   488,   487,   491,
!      490,   494,   493,   497,   496,   500,   499,   504,     0,     0,
!      509,   508,   142,   419,   143,     0,     0,   147,     0,   248,
!        0,   314,   312,   303,   301,   311,   309,   275,     0,   256,
!        0,     0,     0,   325,   329,     0,   326,   289,   307,   305,
!      318,     0,   316,   343,     0,   197,   230,     0,     0,     0,
!      253,     0,   294,     0,   282,     0,     0,   323,     0,   407,
!      408,     0,   394,     0,   391,   382,   387,   383,   386,   367,
!      359,     0,   449,   443,   446,     0,     0,   444,   185,   182,
!      184,   402,     0,   413,   409,     0,   415,   410,   361,     0,
!      417,   411,   503,     0,     0,   144,     0,     0,   145,   249,
!        0,   276,   272,     0,   333,     0,   337,   336,   330,   327,
!      331,     0,   234,     0,   231,   232,     0,     0,     0,   258,
!        0,   262,     0,   265,     0,   299,   298,   284,     0,   296,
!        0,   322,     0,   405,     0,   393,   392,     0,   368,   358,
!      448,   442,   450,   445,   379,   378,   403,     0,   362,   363,
!      505,   502,     0,   146,     0,     0,     0,   246,     0,   198,
!        0,   205,   206,     0,   207,   208,     0,   257,   334,     0,
!      315,   235,     0,     0,   233,   271,   268,   269,   516,     0,
!      260,   263,     0,   259,     0,   266,     0,     0,   283,     0,
!      320,   319,   406,   374,     0,   404,   364,     0,   148,     0,
!        0,     0,   225,   277,     0,   335,   332,   238,   236,     0,
!      270,   267,   261,     0,   281,     0,   372,     0,     0,   149,
!        0,   250,     0,     0,   237,   279,   280,   151,     0,     0,
!        0,     0,   150,     0,     0,     0,     0,   286,     0,   251,
!      285
  };
  
  /* YYDEFGOTO[NTERM-NUM]. */
  static const short int yydefgoto[] =
  {
!       -1,     8,   211,   285,   212,    88,    89,    71,    63,   213,
!      214,    24,    25,    26,     9,    10,    11,    12,    13,    14,
!       15,    16,   452,   291,   135,   108,    50,    73,   107,   133,
!      161,   162,   163,    94,   117,   118,   119,   215,   165,   265,
!       95,   114,   181,   182,   292,   139,   186,   411,   167,   168,
!      169,   267,   170,   171,   413,   564,   565,   293,    19,    46,
!       75,    68,   110,    47,    66,    97,    98,    99,   100,   216,
!      369,   294,   174,   567,   734,   297,   298,   299,   300,   708,
!      301,   302,   303,   304,   711,   305,   306,   307,   308,   712,
!      309,   455,   310,   600,   670,   671,   672,   673,   311,   312,
!      714,   313,   314,   315,   715,   316,   317,   461,   678,   679,
!      318,   319,   320,   321,   322,   323,   324,   325,   583,   584,
!      585,   586,   217,   218,   219,   220,   221,   744,   687,   222,
!      500,   223,   224,   480,   481,   123,   225,   226,   227,   228,
!      229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
!      239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
!      249,   250,   406,   501,   729
  };
  
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
     STATE-NUM.  */
! #define YYPACT_NINF -641
  static const short int yypact[] =
  {
!      472,  -641,  -641,   313,   -38,   413,   435,  -641,    85,  -641,
!      364,   161,   670,  -641,  -641,  -641,  -641,   617,  -641,  -641,
!     -641,  -641,  -641,    18,  -641,  -641,  -641,   340,  -641,   377,
!     -641,    56,  -641,   267,  -641,  -641,   688,   567,  -641,   -38,
!      445,  -641,  -641,   508,  -641,   451,   -37,    22,  -641,   463,
!       38,  -641,  -641,   -38,   592,   341,  -641,   405,  -641,    26,
!     -641,  -641,  -641,  -641,   129,  1344,  -641,   518,   -37,  -641,
!     -641,   401,   521,  -641,  -641,   -37,    22,  -641,    38,  -641,
!     -641,  -641,   525,  -641,  -641,  -641,   543,   141,  -641,  -641,
!     -641,   619,   974,  -641,  -641,    65,  -641,  1394,  -641,  -641,
!     -641,  -641,  -641,  -641,  -641,  -641,  -641,   200,   316,  -641,
!      -37,  -641,  -641,   396,   -11,  -641,   604,     5,  -641,   573,
!      -11,   414,   400,   400,  -641,   548,   554,  -641,  -641,  -641,
!     -641,   568,  1052,  -641,  -641,   316,   679,   593,    79,  -641,
!     -641,  -641,   599,  2059,   104,   523,  -641,  -641,   137,  -641,
!      -11,  -641,   369,   -11,  -641,  -641,  -641,  -641,   436,   890,
!     -641,  1255,  -641,  -641,  -641,  -641,   275,  -641,   455,  -641,
!     -641,   553,  -641,  -641,  1779,  -641,  -641,  -641,  -641,   623,
!      575,   -41,  -641,   747,  -641,  -641,   551,  -641,  -641,  -641,
!      484,  -641,  -641,  2767,  1191,  2819,  2885,   558,    48,   607,
!     -641,  2937,  3003,  3055,  5240,  -641,  -641,  -641,  -641,  -641,
!     -641,  -641,   624,   598,   862,    76,  -641,   638,   673,  -641,
!     -641,  -641,   625,  -641,   680,   478,  -641,   539,   803,  -641,
!     -641,  -641,  -641,  -641,  -641,  -641,  -641,   975,   871,  1030,
!      852,   891,   785,   828,   790,   832,     9,  -641,  -641,  -641,
!      833,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
!      908,   553,  -641,  -641,  -641,   668,  -641,   455,  -641,   801,
!      235,  3121,  -641,    81,  2111,    28,   320,   332,   208,   411,
!      227,   767,  3173,  5542,  -641,   -38,   624,   598,   938,   556,
!      448,  -641,   747,   773,  -641,  -641,  1779,  -641,  -641,   776,
!     -641,  -641,  -641,  1848,  -641,  -641,   795,  -641,  -641,  -641,
!     -641,  1848,  -641,  1848,  -641,  -641,  5594,   799,  -641,  -641,
!     -641,  -641,  -641,  -641,   432,  -641,   786,   846,   803,   893,
!      896,  -641,  -641,  -641,  -641,   863,  -641,   633,   637,   663,
!     -641,   791,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
!     -641,    32,  -641,   664,   956,   804,   804,   441,  -641,  -641,
!     -641,  -641,  -641,   756,   862,    19,  -641,   807,  -641,   695,
!      422,   844,  5306,  2177,   753,  -641,    -2,  3239,  -641,   443,
!     3291,  -641,  -641,  3357,  3409,  3475,  3527,  3593,  3645,  3711,
!     3763,  3829,  3881,  3947,  3999,   837,  4065,  4117,  4183,  4235,
!     4301,  4353,  4419,  2229,  -641,  -641,  4471,  -641,   433,  -641,
!     -641,  -641,  -641,  -641,  1779,  -641,  -641,  -641,  -641,  4537,
!     -641,   174,  -641,  -641,   193,  -641,  -641,   194,  -641,  4589,
!     -641,  4655,  -641,   758,  -641,  5061,  -641,  -641,   210,  -641,
!      111,    72,   820,   718,  -641,  -641,   -38,  2295,  -641,  -641,
!     -641,   988,   575,  -641,  -641,   836,  -641,   870,   981,  -641,
!     -641,  -641,   113,  2347,  -641,  4707,  -641,  -641,  -641,   863,
!     -641,  -641,  -641,  -641,   152,   851,   849,   868,  -641,  2413,
!      804,  -641,   464,   804,   464,  -641,  2465,  4773,   164,   640,
!      714,  -641,  1078,  -641,  -641,  1993,  -641,  -641,  -641,  -641,
!      600,  -641,  -641,   245,  -641,  -641,  -641,  -641,  -641,   856,
!     -641,   253,  -641,  5358,  -641,   260,  -641,  -641,  -641,  -641,
!     -641,  -641,  -641,   975,  -641,   975,  -641,   871,  -641,   871,
!     -641,   871,  -641,  1030,  -641,  1030,  -641,  1030,  -641,  1030,
!     -641,   141,  -641,  -641,   852,  -641,   852,  -641,   891,  -641,
!      785,  -641,   828,  -641,   790,  -641,   832,  -641,   983,   898,
!     -641,  -641,  -641,  1016,  -641,  1779,   894,  -641,  1779,  -641,
!      188,  -641,  -641,  -641,  -641,  -641,  -641,  -641,   273,  -641,
!      895,   475,   276,   758,  -641,   455,  -641,  -641,  -641,  -641,
!     -641,  5542,  -641,  -641,   479,   820,  -641,   992,    50,   493,
!     -641,   902,  -641,  5154,  -641,  5086,   900,   906,   909,  -641,
!     -641,  5424,  -641,   271,  -641,   400,  -641,   400,  -641,  -641,
!      910,   185,  -641,  -641,  -641,  4825,  5197,  -641,  -641,  -641,
!     -641,  -641,  4891,  -641,  -641,  5476,  -641,  -641,   316,   657,
!     -641,  -641,  -641,  4943,   741,  -641,  1779,  2531,  -641,  -641,
!     1915,  -641,  -641,   319,  -641,   760,  -641,  -641,  -641,  -641,
!     -641,   907,  -641,  2583,  -641,  -641,  1009,   265,  5009,  -641,
!      729,  -641,  1556,  -641,  5542,  -641,  -641,  -641,   915,   912,
!     5129,  -641,   325,  -641,   662,  -641,  -641,   316,  -641,   919,
!     -641,  -641,  -641,  -641,  -641,  -641,  -641,   678,  -641,   316,
!     -641,  -641,   480,  -641,   215,   207,   482,  -641,   960,   964,
!     1915,  -641,  -641,  1915,  -641,  -641,   922,  -641,   933,   934,
!     -641,  -641,  1034,   223,  -641,  -641,  -641,  -641,  -641,   366,
!     -641,  -641,  1631,  -641,  1700,  -641,   947,  1848,  -641,   948,
!     -641,  -641,  -641,  -641,   316,  -641,  -641,  2649,  -641,   242,
!     4537,  1848,  -641,  -641,  2701,  -641,  -641,  -641,  -641,  1058,
!     -641,  -641,  -641,   962,  -641,  1848,  -641,   243,   244,  -641,
!      399,  -641,  5086,   963,  -641,  -641,  -641,  -641,   249,  1915,
!      970,  5129,  -641,  1010,  1915,   976,  1915,  -641,  1915,  -641,
!     -641
  };
  
  /* YYPGOTO[NTERM-NUM].  */
  static const short int yypgoto[] =
  {
!     -641,  -641,  -641,   -39,   -58,   676,    23,  -112,   -13,   -57,
!       -3,   531,  -641,   144,  -641,  1065,   609,  -641,    60,  -641,
!     -641,    30,    11,   467,  -641,  -641,  1021,  1007,  -641,  -133,
!     -641,   931,  -641,   -80,  -122,   954,  -164,  -199,  -641,  -641,
!      131,   456,   839,  -324,  -130,    17,  -641,  -641,  -641,  -641,
!     -641,  -641,  -641,   958,  -641,  -134,  -641,   692,   354,  -641,
!     -641,  -641,  -641,  1063,   485,  -641,  1033,  -641,  -641,   383,
!     -641,  -123,   840,  -156,  -162,  -295,  -641,   797,   150,   266,
!     -537,    99,  -425,  -641,  -641,  -641,  -306,  -641,  -641,  -641,
!     -641,  -641,  -641,  -641,  -641,   461,   462,  -640,  -409,  -641,
!     -641,  -641,  -641,  -641,  -641,  -641,  -292,  -641,  -516,   817,
!     -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,   552,
!     -641,   559,  -641,  -641,  -641,    36,  -641,  -641,  -641,  -641,
!     -430,  -641,  -641,   778,   345,   -73,  1177,   132,  1197,   234,
!      314,   444,   943,  -165,   540,   687,  -476,  -641,   583,   733,
!      734,   576,   743,   748,   746,   751,   759,  -641,   505,   752,
!      757,  -641,  -641,   885,  -641
  };
  
  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
     positive, shift that token.  If negative, reduce the rule which
     number is the opposite.  If zero, do what YYDEFACT says.
     If YYTABLE_NINF, syntax error.  */
! #define YYTABLE_NINF -513
  static const short int yytable[] =
  {
!       23,   449,   176,    31,   152,   368,   183,    87,    90,   173,
!      460,    17,   296,   467,   122,   335,   627,   598,   295,    41,
!      491,    17,    17,    17,   402,   185,    86,    79,   344,   352,
!      348,   350,   735,   472,    87,    90,   359,   361,   173,    87,
!       90,    35,    64,   137,    17,   266,    64,    17,    17,   352,
!       22,   665,   164,   126,   102,   336,   621,    51,    86,   106,
!       65,   337,    91,    35,    64,    17,   127,    35,    62,    64,
!       34,   508,    70,   491,    87,    90,    92,   375,    87,    90,
!      187,   164,   422,   639,    35,    32,    22,   357,   138,    91,
!       62,    72,   735,    86,    91,    62,    34,   179,   403,    20,
!      473,    87,    90,    87,    90,   252,   141,   142,    92,    20,
!       20,    20,   590,   709,   602,   492,   286,   287,   155,    42,
!      126,    43,    86,  -153,    67,    87,    90,    80,    64,    91,
!      183,   353,    20,    91,    64,    20,    20,   146,   255,   122,
!      448,   355,   412,   159,   338,   363,   666,   180,    27,    29,
!      693,   353,   632,    20,    62,   433,    91,    52,    91,    53,
!       70,   -29,     1,   442,   739,   624,   128,   257,   593,    22,
!      259,   288,   159,   709,   469,   571,   709,   -92,   -92,   188,
!       91,   684,   423,    55,    57,   290,   688,    60,   268,   649,
!      341,   341,   341,   341,   573,   575,    64,    60,   341,   341,
!      364,   591,    87,    90,   253,   697,     2,   183,   665,   432,
!      326,   588,   592,   122,  -292,   603,   664,   705,   517,   519,
!      521,   179,   356,     4,   758,   710,   113,   471,   436,     5,
!      116,   175,    53,   723,    87,    90,   418,   256,   286,   287,
!      121,   713,   709,   724,   757,   758,   633,   709,   609,   709,
!      774,   709,   568,   446,   636,   610,   780,    91,   286,   287,
!      175,   640,     7,   166,   147,   785,   725,   -32,     1,   113,
!      116,   180,   685,   449,   651,   572,   264,   656,   409,    87,
!       90,   689,   482,   484,   650,   710,   190,   632,   710,    91,
!      489,   490,   166,   288,   574,   576,   630,   676,   179,   460,
!      451,   713,   131,   749,   713,   156,   327,   290,   451,   632,
!      451,   589,     2,   458,    21,    22,   748,   768,   289,   759,
!      717,   428,   623,   190,   595,   632,   740,   180,   437,     4,
!      419,   719,   326,   430,    91,     5,    64,   541,    90,   326,
!      778,    44,    74,   769,   777,   634,   632,   326,   180,   326,
!      782,   449,   326,   637,   710,   726,   286,   287,   716,   710,
!      641,   710,    70,   710,   -28,     1,   379,   760,     7,   652,
!      713,   686,  -102,   156,   460,   713,  -102,   713,    48,   713,
!      341,   341,   341,   341,   341,   341,   341,   341,   341,   341,
!      341,   341,    91,   341,   341,   341,   341,   341,   341,   341,
!      649,    22,   104,   646,    45,    45,    77,   615,   328,     2,
!      617,   563,   434,   132,    28,   429,  -254,   424,   716,    96,
!        3,   716,   156,   496,   438,   290,     4,   431,   327,   190,
!      -63,   645,     5,   464,   648,   327,    30,  -154,  -156,   449,
!      289,    49,   485,   327,   512,   327,    56,   289,   327,  -324,
!      326,    96,    61,   453,   -64,   289,   761,   289,   -63,   657,
!      691,   456,   660,   457,    69,     7,   460,    18,   122,    49,
!      258,   142,   -26,     1,   -63,   460,   654,    18,    18,    18,
!      662,   662,   190,   418,   341,   140,   172,   716,   329,   341,
!      497,   136,   716,    38,   716,   779,   716,   475,   -64,   148,
!       18,    22,   -63,    18,    18,   698,   435,   286,   287,    58,
!      286,   287,   703,    59,   147,   172,    40,     2,    60,   101,
!      509,    18,   105,    22,   254,   183,   112,   465,     3,   562,
!      328,   260,    93,    22,     4,   337,   486,   328,   513,    22,
!        5,   667,   120,  -324,   115,   328,   327,   328,     6,   149,
!      328,    22,   156,   103,   743,   151,   668,   444,   289,   741,
!      109,   204,   288,   148,    93,   288,   746,   -31,     1,   154,
!      655,  -511,  -511,     7,   663,   747,   290,   750,   -95,   290,
!      -95,   150,   153,   -95,   -95,   -95,   -95,    60,   286,   287,
!      190,   669,   -33,     1,   184,   134,    22,    87,    90,   160,
!      189,   326,   -23,   -23,   326,   140,    22,   137,   354,    22,
!      329,   766,     2,    22,   286,   287,   179,   329,   330,    33,
!       38,    37,   341,   341,   334,   329,   378,   329,   160,     4,
!      329,    22,  -512,  -512,   466,     5,    22,     2,   468,   326,
!      341,   326,    22,   288,   -23,    54,   445,   451,   328,   -23,
!      -23,   -23,    91,   339,     4,   -23,    22,   290,    81,   -23,
!        5,   351,    38,   158,   470,   474,   180,   143,     7,   288,
!      -27,     1,   144,   145,   286,   287,   286,   287,     2,    39,
!      177,    22,   326,   290,    81,    40,   326,    22,   -30,     1,
!      158,    83,   158,     7,    84,    22,   631,   327,   -95,   136,
!      327,   371,   632,   -95,   -95,   -95,   -95,   451,   326,   289,
!      451,    22,   289,    22,   331,     2,   326,    83,   121,   504,
!       84,    22,    53,   121,     2,    22,     3,   370,   329,   288,
!       81,   288,     4,     2,   451,   327,   625,   327,     5,   148,
!      330,   376,   504,   290,     3,   290,   326,   330,   451,   326,
!        4,    22,    22,   699,   504,   330,     5,   330,   742,   632,
!      330,   718,   451,    83,   632,   156,    84,    22,   326,   410,
!      326,     7,   377,   326,   745,   178,   451,   667,   327,   380,
!      632,   451,   327,   451,   594,   451,   505,   326,    60,     7,
!      289,   506,   668,   494,   289,   507,   398,   495,    81,   328,
!      707,   326,   328,   400,   327,     2,    22,   702,   326,   505,
!      626,    81,   327,   148,   506,   326,   289,   326,   507,   581,
!      326,   505,   326,   582,   326,   614,   506,   730,   614,    22,
!      507,    83,  -344,  -344,    84,    22,   331,   328,   540,   328,
!      399,    22,   327,   331,    83,   327,   401,    84,    22,   381,
!      382,   331,   487,   331,   289,   488,   331,   289,   330,   370,
!      453,   332,  -152,   456,   327,   616,   327,   618,   447,   327,
!      391,   392,   393,   394,   386,   387,   289,   450,   289,   329,
!      328,   289,   329,   327,   328,  -344,   372,   764,    81,  -344,
!      373,   124,  -346,  -346,   374,   289,   454,   327,   415,   416,
!      463,   771,   417,   479,   327,   493,   328,   396,   397,   289,
!      395,   327,   498,   327,   328,   776,   327,   329,   327,   329,
!      327,    83,   142,   289,    84,    22,   404,   405,   289,   707,
!      289,   333,   289,   599,   764,    38,   771,   601,   776,  -420,
!     -420,    81,  -421,  -421,   328,  -346,   611,   328,  -389,  -346,
!      125,   635,    39,     2,   331,  -510,  -510,   372,    40,    81,
!      329,   373,   144,   145,   329,   374,   328,  -388,   328,   523,
!      525,   328,   544,   546,    83,   124,   752,    84,    22,   753,
!      383,   384,   385,   332,   642,   328,   329,  -136,   643,   647,
!      332,   653,    83,   664,   329,    84,    22,   674,   332,   328,
!      332,   680,   681,   332,   407,   682,   328,  -373,   720,   330,
!      724,   737,   330,   328,   603,   328,  -371,   751,   328,    38,
!      328,  -204,   328,   754,   329,    81,   -16,   329,   251,   755,
!      756,  -510,  -510,   372,   125,   757,    39,   373,   388,   389,
!      390,   443,    40,   763,   765,   783,   329,   330,   329,   330,
!      787,   329,   789,   333,   790,   476,   477,   478,    83,   774,
!      333,    84,    22,   775,   781,   329,   784,   786,   333,   -16,
!      333,   542,   788,   333,  -510,  -510,   372,    36,    78,   329,
!      373,  -510,  -510,   372,   374,   111,   329,   373,   365,   251,
!      330,   443,   263,   329,   330,   329,   191,     2,   329,   408,
!      329,   332,   329,    81,   -16,   331,   566,   414,   331,  -510,
!     -510,   372,    82,   459,     4,   373,   330,   261,    76,   644,
!        5,   527,   529,   531,   330,   533,   535,   537,   539,    81,
!      130,   731,   732,   462,   483,   658,    83,   346,   197,    84,
!       22,   548,   659,   331,   198,   331,   552,   550,   701,   156,
!      157,   199,   554,     7,   330,   200,   421,   330,   561,   427,
!        0,   556,    83,     0,     0,    84,    22,   440,   441,   201,
!      202,   333,     0,   203,     0,     0,   330,     0,   330,     0,
!        0,   330,   205,   206,   207,   208,   331,     0,   209,   210,
!      331,     0,   345,     0,   193,   330,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,   330,
!        0,     0,   331,     0,     0,     0,   330,     0,     0,     0,
!      331,     0,     0,   330,     0,   330,     0,     0,   330,     0,
!      330,     0,   330,     0,     0,     0,     0,   195,   196,     0,
!        0,     0,    81,     0,     0,     0,     0,     0,     0,     0,
!      331,   197,   332,   331,     0,   332,     0,   198,   503,     0,
!        0,     0,   511,     0,   199,   515,     0,     0,   200,     0,
!        0,     0,   331,     0,   331,    83,     0,   331,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,   559,     0,
!      332,   331,   332,     0,     0,   205,   206,   207,   208,     0,
!        2,   209,   210,     0,   570,   331,    81,     0,     0,     0,
!        0,     0,   331,     0,   578,    82,   580,     4,     0,   331,
!        0,   331,   333,     5,   331,   333,   331,     0,   331,     0,
!        0,     0,     0,   332,     0,     0,     0,   332,     0,    83,
!        0,     0,    84,    22,     0,     0,     0,     0,   606,     0,
!      608,     0,   156,   262,     0,     0,     7,     0,     0,   332,
!      333,     0,   333,     0,   613,     0,     0,   332,     0,     0,
!      342,   342,   342,   342,     0,     0,     0,     0,   342,   342,
!      251,     0,     0,     0,     0,     0,     0,     0,     0,     2,
!      343,   343,   343,   343,     0,    81,     0,   332,   343,   343,
!      332,     0,     0,   333,    82,     0,     4,   333,     0,     0,
!        0,     0,     5,     0,     0,     0,     0,     0,     0,   332,
!        0,   332,     0,     0,   332,     0,     0,     0,    83,   333,
!        0,    84,    22,     0,     0,     0,     0,   333,   332,     2,
!        0,     0,    85,     0,     0,    81,     0,     0,     0,     0,
!        0,     0,   332,     0,    82,     0,     4,     0,     0,   332,
!        0,     0,     5,     0,     0,     0,   332,   333,   332,     0,
!      333,   332,     0,   332,     0,   332,   661,     0,    83,     0,
!        0,    84,    22,     0,     0,     0,     0,     0,     0,   333,
!        0,   333,   129,     0,   333,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,   333,     0,
!        0,     0,     0,     0,     0,     0,     0,   695,     0,     0,
!        0,     0,   333,     0,     0,     0,     0,     0,     0,   333,
!        0,     0,     0,     0,     0,     0,   333,     0,   333,     0,
!        0,   333,     0,   333,     0,   333,     0,     0,     0,     0,
!        0,     0,     0,   728,     0,     0,     0,   269,     0,   736,
!      342,   342,   342,   342,   342,   342,   342,   342,   342,   342,
!      342,   342,     0,   342,   342,   342,   342,   342,   342,   342,
       343,   343,   343,   343,   343,   343,   343,   343,   343,   343,
!      343,   343,     0,   343,   343,   343,   343,   343,   343,   343,
!        0,     2,   195,   196,   667,   270,   271,    81,   272,     0,
!        0,   273,     0,     0,     0,   274,   197,     0,     0,   668,
!        0,     0,   275,   276,     5,   277,     0,   278,   279,   199,
!      280,     0,   269,   281,   282,   770,     0,     0,     0,   773,
!       83,     0,     0,    84,    22,     0,     0,     0,     0,     0,
!        0,   283,     0,   156,   733,     0,     0,     7,     0,     0,
!      205,   206,   207,   208,   342,     0,   209,   210,     0,   342,
!        0,     0,     0,     0,     0,     0,     2,   195,   196,   667,
!      270,   271,    81,   272,   343,     0,   273,     0,     0,   343,
!      274,   197,     0,     0,   668,     0,     0,   275,   276,     5,
!      277,   269,   278,   279,   199,   280,     0,     0,   281,   282,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,     0,     0,     0,     0,   283,     0,   156,   762,
!        0,     0,     7,     0,     0,   205,   206,   207,   208,     0,
!        0,   209,   210,     0,     0,     2,   195,   196,  -264,   270,
!      271,    81,   272,     0,     0,   273,     0,     0,     0,   274,
!      197,     0,     0,  -264,     0,     0,   275,   276,     5,   277,
!        0,   278,   279,   199,   280,     0,     0,   281,   282,     0,
!      269,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,     0,     0,     0,     0,   283,     0,   156,  -264,     0,
!        0,     7,   342,   342,   205,   206,   207,   208,     0,     0,
!      209,   210,     0,     0,     0,     0,     0,     0,     0,     0,
!      342,     0,   343,   343,     2,   195,   196,     0,   270,   271,
!       81,   272,     0,     0,   273,     0,     0,     0,   274,   197,
!      343,     0,     0,     0,     0,   275,   276,     5,   277,   269,
!      278,   279,   199,   280,     0,     0,   281,   282,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!        0,     0,     0,     0,   283,     0,   156,   284,     0,     0,
!        7,     0,     0,   205,   206,   207,   208,     0,     0,   209,
!      210,     0,     0,     2,   195,   196,     0,   270,   271,    81,
!      272,     0,     0,   273,     0,     0,     0,   274,   197,     0,
!        0,     0,     0,     0,   275,   276,   269,   277,     0,   278,
!      279,   199,   280,     0,     0,   281,   282,     0,     0,     0,
         0,     0,    83,     0,     0,    84,    22,     0,     0,     0,
!        0,     0,     0,   283,     0,   156,     0,     0,     0,     7,
!        0,     0,   205,   206,   207,   208,     0,     0,   209,   210,
!        2,   195,   196,     0,   706,   271,    81,   272,     0,     0,
!      273,     0,     0,     0,   274,   197,     0,     0,     0,     0,
!        0,   275,   276,     0,   277,     0,   278,   279,   199,   280,
!        0,     0,   281,   282,   628,     0,   193,   194,     0,    83,
!        0,     0,    84,    22,     0,     0,     0,     0,     0,     0,
!      283,     0,   156,     0,     0,     0,     7,     0,     0,   205,
!      206,   207,   208,     0,     0,   209,   210,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,   195,
!      196,     0,     0,     0,    81,     0,     0,     0,     0,     0,
!        0,     0,     0,   197,     0,     0,     0,     0,     0,   198,
!      192,     0,   193,   194,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!      204,   629,     0,     0,     0,     0,     0,   205,   206,   207,
!      208,     0,     0,   209,   210,   195,   196,     0,     0,     0,
!       81,     0,   425,     0,   193,   194,     0,     0,     0,   197,
!        0,     0,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,     0,   204,   195,   196,     0,
!        0,     0,    81,   205,   206,   207,   208,     0,     0,   209,
!      210,   197,     0,     0,     0,     0,     0,   198,   502,     0,
!      193,   194,     0,     0,   199,     0,     0,     0,   200,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,     0,     0,
!        0,     0,   426,     0,     0,   205,   206,   207,   208,     0,
!        0,   209,   210,   195,   196,     0,     0,     0,    81,     0,
!      557,     0,   193,   194,     0,     0,     0,   197,     0,     0,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,   195,   196,   147,     0,     0,
!       81,   205,   206,   207,   208,     0,     0,   209,   210,   197,
!        0,     0,     0,     0,     0,   198,   596,     0,   193,   194,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,   558,
!      201,   202,     0,     0,   203,     0,     0,     0,     0,     0,
!        0,     0,     0,   205,   206,   207,   208,     0,     0,   209,
!      210,   195,   196,     0,     0,     0,    81,     0,   604,     0,
!      193,   194,     0,     0,     0,   197,     0,     0,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,   597,     0,   195,   196,     0,     0,     0,    81,   205,
!      206,   207,   208,     0,     0,   209,   210,   197,     0,     0,
!        0,     0,     0,   198,   612,     0,   193,   194,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,     0,     0,     0,   605,     0,
!        0,   205,   206,   207,   208,     0,     0,   209,   210,   195,
!      196,     0,     0,     0,    81,     0,   619,     0,   193,   194,
!        0,     0,     0,   197,     0,     0,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!        0,   195,   196,   147,     0,     0,    81,   205,   206,   207,
!      208,     0,     0,   209,   210,   197,     0,     0,     0,     0,
!        0,   198,   596,     0,   193,   194,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,   620,     0,     0,     0,     0,     0,     0,     0,   205,
!      206,   207,   208,     0,     0,   209,   210,   195,   196,     0,
!        0,     0,    81,     0,   721,     0,   193,   194,     0,     0,
!        0,   197,     0,     0,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,   200,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,   704,     0,   195,
!      196,     0,     0,     0,    81,   205,   206,   207,   208,     0,
!        0,   209,   210,   197,     0,     0,     0,     0,     0,   198,
!      721,     0,   193,   194,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,   722,
!        0,     0,     0,     0,     0,     0,     0,   205,   206,   207,
!      208,     0,     0,   209,   210,   195,   196,     0,     0,     0,
!       81,     0,   604,     0,   193,   194,     0,     0,     0,   197,
!        0,     0,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,   767,     0,   195,   196,     0,
!        0,     0,    81,   205,   206,   207,   208,     0,     0,   209,
!      210,   197,     0,     0,     0,     0,     0,   198,   340,     0,
!      193,   194,     0,     0,   199,     0,     0,     0,   200,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,     0,     0,
!        0,     0,   772,     0,     0,   205,   206,   207,   208,     0,
!        0,   209,   210,   195,   196,     0,     0,     0,    81,     0,
!      347,     0,   193,   194,     0,     0,     0,   197,     0,     0,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,   195,   196,     0,     0,     0,
!       81,   205,   206,   207,   208,     0,     0,   209,   210,   197,
!        0,     0,     0,     0,     0,   198,   349,     0,   193,   194,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,     0,     0,     0,     0,     0,
!        0,     0,     0,   205,   206,   207,   208,     0,     0,   209,
!      210,   195,   196,     0,     0,     0,    81,     0,   358,     0,
!      193,   194,     0,     0,     0,   197,     0,     0,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,     0,     0,   195,   196,     0,     0,     0,    81,   205,
!      206,   207,   208,     0,     0,   209,   210,   197,     0,     0,
!        0,     0,     0,   198,   360,     0,   193,   194,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,     0,     0,     0,     0,     0,
!        0,   205,   206,   207,   208,     0,     0,   209,   210,   195,
!      196,     0,     0,     0,    81,     0,   362,     0,   193,   194,
!        0,     0,     0,   197,     0,     0,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!        0,   195,   196,     0,     0,     0,    81,   205,   206,   207,
!      208,     0,     0,   209,   210,   197,     0,     0,     0,     0,
!        0,   198,   420,     0,   193,   194,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,     0,     0,     0,     0,     0,     0,     0,     0,   205,
!      206,   207,   208,     0,     0,   209,   210,   195,   196,     0,
!        0,     0,    81,     0,   439,     0,   193,   194,     0,     0,
!        0,   197,     0,     0,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,   200,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,     0,   195,
!      196,     0,     0,     0,    81,   205,   206,   207,   208,     0,
!        0,   209,   210,   197,     0,     0,     0,     0,     0,   198,
!      510,     0,   193,   194,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!        0,     0,     0,     0,     0,     0,     0,   205,   206,   207,
!      208,     0,     0,   209,   210,   195,   196,     0,     0,     0,
!       81,     0,   514,     0,   193,   194,     0,     0,     0,   197,
!        0,     0,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,     0,     0,   195,   196,     0,
!        0,     0,    81,   205,   206,   207,   208,     0,     0,   209,
!      210,   197,     0,     0,     0,     0,     0,   198,   516,     0,
!      193,   194,     0,     0,   199,     0,     0,     0,   200,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,     0,     0,
!        0,     0,     0,     0,     0,   205,   206,   207,   208,     0,
!        0,   209,   210,   195,   196,     0,     0,     0,    81,     0,
!      518,     0,   193,   194,     0,     0,     0,   197,     0,     0,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,   195,   196,     0,     0,     0,
!       81,   205,   206,   207,   208,     0,     0,   209,   210,   197,
!        0,     0,     0,     0,     0,   198,   520,     0,   193,   194,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,     0,     0,     0,     0,     0,
!        0,     0,     0,   205,   206,   207,   208,     0,     0,   209,
!      210,   195,   196,     0,     0,     0,    81,     0,   522,     0,
!      193,   194,     0,     0,     0,   197,     0,     0,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,     0,     0,   195,   196,     0,     0,     0,    81,   205,
!      206,   207,   208,     0,     0,   209,   210,   197,     0,     0,
!        0,     0,     0,   198,   524,     0,   193,   194,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,     0,     0,     0,     0,     0,
!        0,   205,   206,   207,   208,     0,     0,   209,   210,   195,
!      196,     0,     0,     0,    81,     0,   526,     0,   193,   194,
!        0,     0,     0,   197,     0,     0,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!        0,   195,   196,     0,     0,     0,    81,   205,   206,   207,
!      208,     0,     0,   209,   210,   197,     0,     0,     0,     0,
!        0,   198,   528,     0,   193,   194,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,     0,     0,     0,     0,     0,     0,     0,     0,   205,
!      206,   207,   208,     0,     0,   209,   210,   195,   196,     0,
!        0,     0,    81,     0,   530,     0,   193,   194,     0,     0,
!        0,   197,     0,     0,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,   200,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,     0,   195,
!      196,     0,     0,     0,    81,   205,   206,   207,   208,     0,
!        0,   209,   210,   197,     0,     0,     0,     0,     0,   198,
!      532,     0,   193,   194,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!        0,     0,     0,     0,     0,     0,     0,   205,   206,   207,
!      208,     0,     0,   209,   210,   195,   196,     0,     0,     0,
!       81,     0,   534,     0,   193,   194,     0,     0,     0,   197,
!        0,     0,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,     0,     0,   195,   196,     0,
!        0,     0,    81,   205,   206,   207,   208,     0,     0,   209,
!      210,   197,     0,     0,     0,     0,     0,   198,   536,     0,
!      193,   194,     0,     0,   199,     0,     0,     0,   200,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,     0,     0,
!        0,     0,     0,     0,     0,   205,   206,   207,   208,     0,
!        0,   209,   210,   195,   196,     0,     0,     0,    81,     0,
!      538,     0,   193,   194,     0,     0,     0,   197,     0,     0,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,   195,   196,     0,     0,     0,
!       81,   205,   206,   207,   208,     0,     0,   209,   210,   197,
!        0,     0,     0,     0,     0,   198,   543,     0,   193,   194,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,     0,     0,     0,     0,     0,
!        0,     0,     0,   205,   206,   207,   208,     0,     0,   209,
!      210,   195,   196,     0,     0,     0,    81,     0,   545,     0,
!      193,   194,     0,     0,     0,   197,     0,     0,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,     0,     0,   195,   196,     0,     0,     0,    81,   205,
!      206,   207,   208,     0,     0,   209,   210,   197,     0,     0,
!        0,     0,     0,   198,   547,     0,   193,   194,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,     0,     0,     0,     0,     0,
!        0,   205,   206,   207,   208,     0,     0,   209,   210,   195,
!      196,     0,     0,     0,    81,     0,   549,     0,   193,   194,
!        0,     0,     0,   197,     0,     0,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!        0,   195,   196,     0,     0,     0,    81,   205,   206,   207,
!      208,     0,     0,   209,   210,   197,     0,     0,     0,     0,
!        0,   198,   551,     0,   193,   194,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,     0,     0,     0,     0,     0,     0,     0,     0,   205,
!      206,   207,   208,     0,     0,   209,   210,   195,   196,     0,
!        0,     0,    81,     0,   553,     0,   193,   194,     0,     0,
!        0,   197,     0,     0,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,   200,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,     0,   195,
!      196,     0,     0,     0,    81,   205,   206,   207,   208,     0,
!        0,   209,   210,   197,     0,     0,     0,     0,     0,   198,
!      555,     0,   193,   194,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!        0,     0,     0,     0,     0,     0,     0,   205,   206,   207,
!      208,     0,     0,   209,   210,   195,   196,     0,     0,     0,
!       81,     0,   560,     0,   193,   194,     0,     0,     0,   197,
!        0,     0,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,     0,     0,   195,   196,     0,
!        0,     0,    81,   205,   206,   207,   208,     0,     0,   209,
!      210,   197,     0,     0,     0,     0,     0,   198,   569,     0,
!      193,   194,     0,     0,   199,     0,     0,     0,   200,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,     0,     0,
!        0,     0,     0,     0,     0,   205,   206,   207,   208,     0,
!        0,   209,   210,   195,   196,     0,     0,     0,    81,     0,
!      577,     0,   193,   194,     0,     0,     0,   197,     0,     0,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,   195,   196,     0,     0,     0,
!       81,   205,   206,   207,   208,     0,     0,   209,   210,   197,
!        0,     0,     0,     0,     0,   198,   579,     0,   193,   194,
!        0,     0,   199,     0,     0,     0,   200,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,     0,     0,     0,     0,     0,
!        0,     0,     0,   205,   206,   207,   208,     0,     0,   209,
!      210,   195,   196,     0,     0,     0,    81,     0,   607,     0,
!      193,   194,     0,     0,     0,   197,     0,     0,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,     0,     0,   195,   196,     0,     0,     0,    81,   205,
!      206,   207,   208,     0,     0,   209,   210,   197,     0,     0,
!        0,     0,     0,   198,   622,     0,   193,   194,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   201,   202,
!        0,     0,   203,     0,     0,     0,     0,     0,     0,     0,
!        0,   205,   206,   207,   208,     0,     0,   209,   210,   195,
!      196,     0,     0,     0,    81,     0,   690,     0,   193,   194,
!        0,     0,     0,   197,     0,     0,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!        0,   195,   196,     0,     0,     0,    81,   205,   206,   207,
!      208,     0,     0,   209,   210,   197,     0,     0,     0,     0,
!        0,   198,   694,     0,   193,   194,     0,     0,   199,     0,
!        0,     0,   200,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   201,   202,     0,     0,
!      203,     0,     0,     0,     0,     0,     0,     0,     0,   205,
!      206,   207,   208,     0,     0,   209,   210,   195,   196,     0,
!        0,     0,    81,     0,   700,     0,   193,   194,     0,     0,
!        0,   197,     0,     0,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,   200,     0,
         0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   201,   202,     0,     0,   203,     0,     0,   195,
!      196,     0,     0,     0,    81,   205,   206,   207,   208,     0,
!        0,   209,   210,   197,     0,     0,     0,     0,     0,   198,
!      727,     0,   193,   194,     0,     0,   199,     0,     0,     0,
!      200,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   201,   202,     0,     0,   203,     0,
!        0,     0,     0,     0,     0,     0,     0,   205,   206,   207,
!      208,     0,     0,   209,   210,   195,   196,     0,     0,     0,
!       81,     0,   587,     0,     0,     0,     0,     0,     0,   197,
!        0,     0,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,   200,   677,     0,     0,
         0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      201,   202,     0,     0,   203,     0,  -287,  -287,  -287,     0,
!        0,     0,  -287,   205,   206,   207,   208,     0,     0,   209,
!      210,  -287,     0,     0,     0,     0,     0,  -287,     0,     0,
!      738,     0,   195,   196,  -287,     0,     0,    81,  -287,     0,
!        0,     0,     0,     0,     0,  -287,   197,     0,  -287,  -287,
!        0,     0,   198,     0,     0,   675,  -287,     0,     0,   199,
!        0,     0,  -287,   200,     0,  -287,  -287,  -287,  -287,     0,
!       83,  -287,  -287,    84,    22,   195,   196,     0,     0,     0,
!       81,   283,  -295,     0,     0,     0,     0,     0,     0,   197,
!      205,   206,   207,   208,     0,   198,   209,   210,   692,     0,
!      195,   196,   199,     0,     0,    81,   200,     0,     0,     0,
!        0,     0,     0,    83,   197,     0,    84,    22,     0,     0,
!      198,     0,     0,     0,   283,  -295,     0,   199,     0,     0,
!        0,   200,     0,   205,   206,   207,   208,     0,    83,   209,
!      210,    84,    22,   193,   194,     0,     0,     0,    81,   283,
!        0,     0,     0,     0,     0,     0,     0,   197,   205,   206,
!      207,   208,     0,   198,   209,   210,     0,     0,     0,     0,
!      199,     0,     0,     0,   200,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,   195,   196,   201,   202,
!        0,    81,   203,     0,     0,     0,     0,     0,     0,     0,
!      197,   205,   206,   207,   208,     0,   198,   209,   210,   193,
!      194,     0,     0,   199,     0,     0,     0,   200,     0,     0,
         0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   201,   202,     0,     0,   203,     0,   204,   366,     0,
!        0,     0,   367,     0,   205,   206,   207,   208,     0,     0,
!      209,   210,   195,   196,     0,     0,     0,    81,     0,     0,
!        0,   193,   194,     0,     0,     0,   197,     0,     0,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,   199,
!        0,     0,     0,   200,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   201,   202,     0,
!        0,   203,   499,     0,   195,   196,     0,     0,     0,    81,
!      205,   206,   207,   208,     0,     0,   209,   210,   197,     0,
!        0,     0,     0,     0,   198,     0,     0,   193,   194,     0,
!        0,   199,     0,     0,     0,   200,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   201,
!      202,     0,     0,   203,   638,     0,     0,     0,     0,     0,
!        0,     0,   205,   206,   207,   208,     0,     0,   209,   210,
!      195,   196,     0,     0,     0,    81,     0,     0,     0,   193,
!      194,     0,     0,     0,   197,     0,     0,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,   199,     0,     0,
!        0,   200,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   201,   202,     0,     0,   203,
!      683,     0,   195,   196,     0,     0,     0,    81,   205,   206,
!      207,   208,     0,     0,   209,   210,   197,     0,     0,     0,
!        0,     0,   198,     0,     0,   193,   194,     0,     0,   199,
!        0,     0,     0,   200,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   201,   202,     0,
!        0,   203,   696,     0,     0,     0,     0,     0,     0,     0,
!      205,   206,   207,   208,     0,     0,   209,   210,   195,   196,
!        0,     0,     0,    81,     0,     0,     0,     0,     0,     0,
!        0,     0,   197,     0,     0,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,     0,   199,     0,     0,     0,   200,
         0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   201,   202,     0,     0,   203,     0,     2,
!      195,   196,     0,     0,     0,    81,   205,   206,   207,   208,
!        0,     0,   209,   210,   197,     0,     0,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,   199,     0,     0,
!        0,   200,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,     0,     0,     0,     0,   283,
!        0,     0,     0,     0,     0,     0,     0,     0,   205,   206,
!      207,   208,     0,     0,   209,   210
  };
  
  static const short int yycheck[] =
  {
!        3,   296,   135,     6,   126,   204,   136,    65,    65,   132,
!      316,     0,   174,   337,    87,   179,   492,   447,   174,     1,
!        1,    10,    11,    12,    15,   137,    65,     1,   193,     1,
!      195,   196,   672,     1,    92,    92,   201,   202,   161,    97,
!       97,    11,    45,    54,    33,   168,    49,    36,    37,     1,
!       88,     1,   132,    92,    67,    96,   486,     1,    97,    72,
!       97,   102,    65,    33,    67,    54,     1,    37,    45,    72,
!       10,    73,    49,     1,   132,   132,    65,     1,   136,   136,
!        1,   161,     1,   513,    54,     0,    88,   199,    99,    92,
!       67,    53,   732,   132,    97,    72,    36,   136,    89,     0,
!       68,   159,   159,   161,   161,     1,   101,   102,    97,    10,
!       11,    12,     1,   650,     1,    96,   174,   174,   131,   101,
!      159,   103,   161,    95,   102,   183,   183,   101,   131,   132,
!      260,   103,    33,   136,   137,    36,    37,   120,     1,   212,
!      296,   199,   265,   132,   183,   203,    96,   136,     4,     5,
!      626,   103,   102,    54,   131,   278,   159,   101,   161,   103,
!      137,     0,     1,   285,   680,     1,   101,   150,    96,    88,
!      153,   174,   161,   710,   338,     1,   713,   101,   102,   100,
!      183,   611,   101,    39,    40,   174,     1,    43,   171,     1,
!      193,   194,   195,   196,     1,     1,   199,    53,   201,   202,
!      203,    90,   260,   260,   100,   635,    45,   337,     1,     1,
!      174,     1,   101,   286,   101,   102,     1,   647,   383,   384,
!      385,   260,   199,    62,     1,   650,    82,   339,     1,    68,
!       86,   132,   103,   663,   292,   292,     1,   100,   296,   296,
!       99,   650,   779,     1,     1,     1,     1,   784,    96,   786,
!        1,   788,   414,   292,     1,   103,   772,   260,   316,   316,
!      161,     1,   101,   132,   100,   781,     1,     0,     1,   125,
!      126,   260,     1,   568,     1,   101,     1,     1,   261,   337,
!      337,    96,   355,   356,    96,   710,   142,   102,   713,   292,
!      363,   364,   161,   296,   101,   101,   495,   603,   337,   605,
!      303,   710,   102,    96,   713,    97,   174,   296,   311,   102,
!      313,   101,    45,   316,     1,    88,   101,   747,   174,    96,
!        1,     1,   487,   179,   446,   102,     1,   316,   101,    62,
!       95,   655,   296,     1,   337,    68,   339,   395,   395,   303,
!       96,     1,     1,   101,   101,   100,   102,   311,   337,   313,
!      101,   646,   316,   100,   779,    90,   414,   414,   650,   784,
!      100,   786,   339,   788,     0,     1,   222,     1,   101,    96,
!      779,   100,    97,    97,   680,   784,   101,   786,     1,   788,
!      383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
       393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
!        1,    88,     1,   565,    64,    64,     1,   480,   174,    45,
!      483,   414,     1,    97,     1,    95,    97,   273,   710,    65,
!       56,   713,    97,     1,   280,   414,    62,    95,   296,   285,
!       53,   565,    68,     1,   568,   303,     1,    97,    97,   734,
!      296,    64,     1,   311,     1,   313,     1,   303,   316,     1,
!      414,    97,     1,   303,    53,   311,    90,   313,    53,   582,
!      625,   311,   585,   313,     1,   101,   772,     0,   541,    64,
!      101,   102,     0,     1,    97,   781,     1,    10,    11,    12,
!        1,     1,   338,     1,   487,     1,   132,   779,   174,   492,
!       68,    95,   784,    45,   786,    96,   788,   353,    97,    99,
!       33,    88,    97,    36,    37,   638,    95,   565,   565,     1,
!      568,   568,   646,     5,   100,   161,    68,    45,   374,     1,
!      376,    54,     1,    88,     1,   655,     1,    95,    56,    96,
!      296,    95,    65,    88,    62,   102,    95,   303,    95,    88,
!       68,    48,    86,    95,     1,   311,   414,   313,    76,     1,
!      316,    88,    97,    68,   687,     1,    63,     1,   414,   682,
!       75,    97,   565,    99,    97,   568,   699,     0,     1,     1,
!       95,    93,    94,   101,    95,    95,   565,    95,    94,   568,
!       96,   125,   126,    99,   100,   101,   102,   443,   646,   646,
!      446,    98,     0,     1,     1,   110,    88,   655,   655,   132,
!        1,   565,    46,    47,   568,     1,    88,    54,     1,    88,
!      296,   744,    45,    88,   672,   672,   655,   303,   174,    10,
!       45,    12,   625,   626,     1,   311,     1,   313,   161,    62,
!      316,    88,    93,    94,     1,    68,    88,    45,     1,   603,
!      643,   605,    88,   646,    88,    36,    90,   650,   414,    93,
!       94,    95,   655,   102,    62,    99,    88,   646,    51,   103,
!       68,   103,    45,   132,     1,     1,   655,    94,   101,   672,
!        0,     1,    99,   100,   732,   732,   734,   734,    45,    62,
!        1,    88,   646,   672,    51,    68,   650,    88,     0,     1,
!      159,    84,   161,   101,    87,    88,    96,   565,    94,    95,
!      568,   103,   102,    99,   100,   101,   102,   710,   672,   565,
!      713,    88,   568,    88,   174,    45,   680,    84,    99,     1,
!       87,    88,   103,    99,    45,    88,    56,   103,   414,   732,
!       51,   734,    62,    45,   737,   603,    96,   605,    68,    99,
!      296,   103,     1,   732,    56,   734,   710,   303,   751,   713,
!       62,    88,    88,    96,     1,   311,    68,   313,    96,   102,
!      316,     1,   765,    84,   102,    97,    87,    88,   732,   101,
!      734,   101,    99,   737,    96,    96,   779,    48,   646,    99,
!      102,   784,   650,   786,    66,   788,    68,   751,   644,   101,
!      646,    73,    63,    98,   650,    77,    11,   102,    51,   565,
!      650,   765,   568,    13,   672,    45,    88,    66,   772,    68,
!       96,    51,   680,    99,    73,   779,   672,   781,    77,    61,
!      784,    68,   786,    65,   788,   480,    73,    98,   483,    88,
!       77,    84,    46,    47,    87,    88,   296,   603,     1,   605,
!       12,    88,   710,   303,    84,   713,    14,    87,    88,    46,
!       47,   311,    96,   313,   710,    99,   316,   713,   414,   103,
!      710,   174,    95,   713,   732,   482,   734,   484,    95,   737,
!       18,    19,    20,    21,     3,     4,   732,   101,   734,   565,
!      646,   737,   568,   751,   650,    99,    95,   737,    51,   103,
!       99,     1,    46,    47,   103,   751,   101,   765,    97,    98,
!      101,   751,   101,    99,   772,    98,   672,    16,    17,   765,
!       58,   779,    68,   781,   680,   765,   784,   603,   786,   605,
!      788,    84,   102,   779,    87,    88,    93,    94,   784,   779,
!      786,   174,   788,    97,   784,    45,   786,    67,   788,    46,
!       47,    51,    46,    47,   710,    99,    95,   713,    99,   103,
!       60,    95,    62,    45,   414,    93,    94,    95,    68,    51,
!      646,    99,    99,   100,   650,   103,   732,    99,   734,   386,
!      387,   737,   396,   397,    84,     1,   710,    87,    88,   713,
!        5,     6,     7,   296,     1,   751,   672,    97,    90,    95,
!      303,    96,    84,     1,   680,    87,    88,    95,   311,   765,
!      313,   101,    96,   316,    96,    96,   772,    97,   101,   565,
!        1,    96,   568,   779,   102,   781,    97,    57,   784,    45,
!      786,    57,   788,   101,   710,    51,    88,   713,   143,    96,
!       96,    93,    94,    95,    60,     1,    62,    99,     8,     9,
!       10,   103,    68,    96,    96,   779,   732,   603,   734,   605,
!      784,   737,   786,   296,   788,    99,   100,   101,    84,     1,
!      303,    87,    88,   101,   101,   751,    96,    57,   311,    88,
!      313,   395,    96,   316,    93,    94,    95,    12,    57,   765,
!       99,    93,    94,    95,   103,    78,   772,    99,   203,   204,
!      646,   103,   161,   779,   650,   781,   142,    45,   784,   260,
!      786,   414,   788,    51,    88,   565,   414,   267,   568,    93,
!       94,    95,    60,   316,    62,    99,   672,   159,    55,   103,
!       68,   388,   389,   390,   680,   391,   392,   393,   394,    51,
!       97,   670,   670,   316,   356,   583,    84,   194,    60,    87,
!       88,   398,   583,   603,    66,   605,   400,   399,   643,    97,
!       98,    73,   401,   101,   710,    77,   271,   713,   406,   274,
!       -1,   402,    84,    -1,    -1,    87,    88,   282,   283,    91,
!       92,   414,    -1,    95,    -1,    -1,   732,    -1,   734,    -1,
!       -1,   737,   104,   105,   106,   107,   646,    -1,   110,   111,
!      650,    -1,     1,    -1,     3,   751,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   765,
!       -1,    -1,   672,    -1,    -1,    -1,   772,    -1,    -1,    -1,
!      680,    -1,    -1,   779,    -1,   781,    -1,    -1,   784,    -1,
!      786,    -1,   788,    -1,    -1,    -1,    -1,    46,    47,    -1,
!       -1,    -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!      710,    60,   565,   713,    -1,   568,    -1,    66,   373,    -1,
!       -1,    -1,   377,    -1,    73,   380,    -1,    -1,    77,    -1,
!       -1,    -1,   732,    -1,   734,    84,    -1,   737,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,   403,    -1,
!      603,   751,   605,    -1,    -1,   104,   105,   106,   107,    -1,
!       45,   110,   111,    -1,   419,   765,    51,    -1,    -1,    -1,
!       -1,    -1,   772,    -1,   429,    60,   431,    62,    -1,   779,
!       -1,   781,   565,    68,   784,   568,   786,    -1,   788,    -1,
!       -1,    -1,    -1,   646,    -1,    -1,    -1,   650,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    -1,    -1,   463,    -1,
!      465,    -1,    97,    98,    -1,    -1,   101,    -1,    -1,   672,
!      603,    -1,   605,    -1,   479,    -1,    -1,   680,    -1,    -1,
!      193,   194,   195,   196,    -1,    -1,    -1,    -1,   201,   202,
!      495,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,
!      193,   194,   195,   196,    -1,    51,    -1,   710,   201,   202,
!      713,    -1,    -1,   646,    60,    -1,    62,   650,    -1,    -1,
!       -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,   732,
!       -1,   734,    -1,    -1,   737,    -1,    -1,    -1,    84,   672,
!       -1,    87,    88,    -1,    -1,    -1,    -1,   680,   751,    45,
!       -1,    -1,    98,    -1,    -1,    51,    -1,    -1,    -1,    -1,
!       -1,    -1,   765,    -1,    60,    -1,    62,    -1,    -1,   772,
!       -1,    -1,    68,    -1,    -1,    -1,   779,   710,   781,    -1,
!      713,   784,    -1,   786,    -1,   788,   591,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,   732,
!       -1,   734,    98,    -1,   737,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   751,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   632,    -1,    -1,
!       -1,    -1,   765,    -1,    -1,    -1,    -1,    -1,    -1,   772,
!       -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,   781,    -1,
!       -1,   784,    -1,   786,    -1,   788,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   668,    -1,    -1,    -1,     1,    -1,   674,
!      383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
!      393,   394,    -1,   396,   397,   398,   399,   400,   401,   402,
!      383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
!      393,   394,    -1,   396,   397,   398,   399,   400,   401,   402,
!       -1,    45,    46,    47,    48,    49,    50,    51,    52,    -1,
!       -1,    55,    -1,    -1,    -1,    59,    60,    -1,    -1,    63,
!       -1,    -1,    66,    67,    68,    69,    -1,    71,    72,    73,
!       74,    -1,     1,    77,    78,   750,    -1,    -1,    -1,   754,
!       84,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
!       -1,    95,    -1,    97,    98,    -1,    -1,   101,    -1,    -1,
!      104,   105,   106,   107,   487,    -1,   110,   111,    -1,   492,
!       -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
!       49,    50,    51,    52,   487,    -1,    55,    -1,    -1,   492,
        59,    60,    -1,    -1,    63,    -1,    -1,    66,    67,    68,
        69,     1,    71,    72,    73,    74,    -1,    -1,    77,    78,
        -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
        -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    97,    98,
        -1,    -1,   101,    -1,    -1,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    -1,    -1,    45,    46,    47,    48,    49,
        50,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,
!       60,    -1,    -1,    63,    -1,    -1,    66,    67,    68,    69,
!       -1,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
!        1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
        -1,    -1,    -1,    -1,    -1,    95,    -1,    97,    98,    -1,
!       -1,   101,   625,   626,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!      643,    -1,   625,   626,    45,    46,    47,    -1,    49,    50,
        51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,
!      643,    -1,    -1,    -1,    -1,    66,    67,    68,    69,     1,
        71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
        -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       -1,    -1,    -1,    -1,    95,    -1,    97,    98,    -1,    -1,
       101,    -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    -1,    -1,    45,    46,    47,    -1,    49,    50,    51,
!       52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,    -1,
!       -1,    -1,    -1,    -1,    66,    67,     1,    69,    -1,    71,
!       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    -1,
!       -1,    -1,    -1,    95,    -1,    97,    -1,    -1,    -1,   101,
!       -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       45,    46,    47,    -1,    49,    50,    51,    52,    -1,    -1,
!       55,    -1,    -1,    -1,    59,    60,    -1,    -1,    -1,    -1,
!       -1,    66,    67,    -1,    69,    -1,    71,    72,    73,    74,
!       -1,    -1,    77,    78,     1,    -1,     3,     4,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,
!       95,    -1,    97,    -1,    -1,    -1,   101,    -1,    -1,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
!       47,    -1,    -1,    -1,    51,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
!        1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       97,    98,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,
!       51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,
!       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    97,    46,    47,    -1,
!       -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,
!        3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,
!       -1,    -1,   101,    -1,    -1,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,
!        1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,
!       -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    46,    47,   100,    -1,    -1,
!       51,   104,   105,   106,   107,    -1,    -1,   110,   111,    60,
!       -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,     4,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    90,
!       91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,
!        3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
!       -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    96,    -1,    46,    47,    -1,    -1,    -1,    51,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,
!       -1,    -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,   101,    -1,
!       -1,   104,   105,   106,   107,    -1,    -1,   110,   111,    46,
!       47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,
!       -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
!       -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       -1,    46,    47,   100,    -1,    -1,    51,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,
!       -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    46,    47,    -1,
!       -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,
!       -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,
!       -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    96,    -1,    46,
!       47,    -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,
!        1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    96,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,
!       51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,
!       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    96,    -1,    46,    47,    -1,
!       -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,
!        3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,
!       -1,    -1,   101,    -1,    -1,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,
!        1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,
!       -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    46,    47,    -1,    -1,    -1,
!       51,   104,   105,   106,   107,    -1,    -1,   110,   111,    60,
!       -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,     4,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,
!        3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
!       -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,
!       -1,    -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,   104,   105,   106,   107,    -1,    -1,   110,   111,    46,
!       47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,
!       -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
!       -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,
!       -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    46,    47,    -1,
!       -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,
!       -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,
!       -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,
!       47,    -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,
!        1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,
!       51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,
!       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,    -1,
!       -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,
!        3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,
!        1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,
!       -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    46,    47,    -1,    -1,    -1,
!       51,   104,   105,   106,   107,    -1,    -1,   110,   111,    60,
!       -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,     4,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,
!        3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
!       -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,
!       -1,    -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,   104,   105,   106,   107,    -1,    -1,   110,   111,    46,
!       47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,
!       -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
!       -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,
!       -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    46,    47,    -1,
!       -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,
!       -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,
!       -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,
!       47,    -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,
!        1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,
!       51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,
!       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,    -1,
!       -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,
!        3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,
!        1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,
!       -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    46,    47,    -1,    -1,    -1,
!       51,   104,   105,   106,   107,    -1,    -1,   110,   111,    60,
!       -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,     4,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,
!        3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
!       -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,
!       -1,    -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,   104,   105,   106,   107,    -1,    -1,   110,   111,    46,
!       47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,
!       -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
!       -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,
!       -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    46,    47,    -1,
!       -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,
!       -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,
!       -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,
!       47,    -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,
!        1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,
!       51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,
!       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,    -1,
!       -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,
!        3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,
!        1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,
!       -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    46,    47,    -1,    -1,    -1,
!       51,   104,   105,   106,   107,    -1,    -1,   110,   111,    60,
!       -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,     4,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,
!        3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
!       -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,
!       -1,    -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,   104,   105,   106,   107,    -1,    -1,   110,   111,    46,
!       47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,
!       -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
!       -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,
!       -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    46,    47,    -1,
!       -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,
!       -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,
!       -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,
!       47,    -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,
!        1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,
!       51,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
!       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
!       -1,    -1,    73,    -1,    -1,    -1,    77,     1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    45,    46,    47,    -1,
!       -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,
!        1,    -1,    46,    47,    73,    -1,    -1,    51,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    60,    -1,    87,    88,
!       -1,    -1,    66,    -1,    -1,     1,    95,    -1,    -1,    73,
!       -1,    -1,   101,    77,    -1,   104,   105,   106,   107,    -1,
!       84,   110,   111,    87,    88,    46,    47,    -1,    -1,    -1,
!       51,    95,    96,    -1,    -1,    -1,    -1,    -1,    -1,    60,
!      104,   105,   106,   107,    -1,    66,   110,   111,     1,    -1,
!       46,    47,    73,    -1,    -1,    51,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    60,    -1,    87,    88,    -1,    -1,
!       66,    -1,    -1,    -1,    95,    96,    -1,    73,    -1,    -1,
!       -1,    77,    -1,   104,   105,   106,   107,    -1,    84,   110,
!      111,    87,    88,     3,     4,    -1,    -1,    -1,    51,    95,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,   104,   105,
!      106,   107,    -1,    66,   110,   111,    -1,    -1,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    46,    47,    91,    92,
!       -1,    51,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       60,   104,   105,   106,   107,    -1,    66,   110,   111,     3,
         4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
        -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    97,    98,    -1,
!       -1,    -1,   102,    -1,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,    -1,
        -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,
        -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
        -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
        84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
        -1,    95,    96,    -1,    46,    47,    -1,    -1,    -1,    51,
       104,   105,   106,   107,    -1,    -1,   110,   111,    60,    -1,
!       -1,    -1,    -1,    -1,    66,    -1,    -1,     3,     4,    -1,
        -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
        92,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       46,    47,    -1,    -1,    -1,    51,    -1,    -1,    -1,     3,
         4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
        66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
        -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
        -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       96,    -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,
       106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,
!       -1,    -1,    66,    -1,    -1,     3,     4,    -1,    -1,    73,
        -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
        84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       104,   105,   106,   107,    -1,    -1,   110,   111,    46,    47,
!       -1,    -1,    -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
        -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,
        -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    45,
        46,    47,    -1,    -1,    -1,    51,   104,   105,   106,   107,
        -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,
        66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
        -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,    95,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
!      106,   107,    -1,    -1,   110,   111
  };
  
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
--- 1433,2807 ----
        24,   166,    18,   164,    16,     0,   155,     0,     0,    66,
        17,     0,     0,    57,   163,     0,   160,    62,    67,    48,
        46,    13,     0,    11,    12,   168,     0,     9,    10,    14,
!       15,    16,     0,   174,   177,     0,   175,     0,   170,   172,
!      173,   176,   167,   165,   159,    65,    69,    70,    68,     0,
!      157,     0,    55,   111,     0,   127,   109,     0,     0,    88,
!       91,   127,     0,    19,    20,   113,     0,     0,   179,   178,
!      169,   171,     0,     0,    58,   161,     0,     0,     0,     0,
!      106,    97,    86,     0,     0,     0,     0,   105,   396,     0,
!      112,   127,   110,     0,   127,    72,    71,   189,    73,    21,
!        0,    83,     0,    75,    77,    81,    82,     0,    78,     0,
!       79,   137,   127,    84,    80,     0,    85,    56,   117,   114,
!        0,   126,     0,   119,     0,   129,   130,   128,   118,   116,
!       90,     0,    89,    93,     0,     0,     0,     0,     0,     0,
!        0,   343,     0,     0,     0,     0,     7,     6,     3,     4,
!        5,     8,   342,     0,     0,   420,     0,   101,   419,   339,
!      349,   345,   361,     0,   340,   341,   346,   347,   348,   437,
!      421,   422,   430,   452,   425,   426,   428,   440,   459,   464,
!      471,   482,   487,   490,   493,   496,   499,   502,   507,   516,
!      508,     0,   100,    98,    96,    99,   398,   397,   108,    87,
!      107,     0,   127,    74,    76,   104,     0,   135,     0,   139,
!        0,     0,     0,   279,     0,     0,     0,     0,     0,     0,
!        0,     0,   343,     0,     0,   190,     0,     9,    15,   420,
!        0,   126,   195,     0,     0,   210,   187,     0,   191,   193,
!        0,   194,   199,   211,     0,   200,   212,     0,   201,   202,
!      213,   253,     0,   203,     0,   214,   204,   292,     0,   215,
!      216,   217,   219,   221,   218,     0,   220,   246,   245,     0,
!      243,   244,   241,   242,   240,   124,   122,   115,     0,     0,
!        0,   429,   420,   346,   348,   427,   432,   431,   436,   435,
!      434,   433,     0,   401,     0,     0,     0,    17,     0,   441,
!      438,   442,   439,   448,     0,   420,     0,   180,     0,   184,
!        0,     0,     0,     0,     0,     0,    94,     0,     0,   370,
!        0,     0,   424,   423,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,   514,   515,     0,   141,     0,
!      140,   134,   103,   133,   138,     0,   229,   230,   228,   248,
!        0,   314,     0,   303,   301,     0,   311,   309,     0,   275,
!        0,   256,     0,   329,     0,   289,     0,   307,   305,     0,
!      318,     0,     0,   197,     0,   225,   223,     0,     0,   188,
!      192,   196,   420,   325,   224,   227,     0,   274,     0,   420,
!      294,   298,   291,     0,     0,   322,     0,   121,   120,   125,
!      123,   132,   131,   354,   358,     0,   400,   386,   385,   366,
!        0,   381,   391,     0,   382,     0,   367,     0,     0,     0,
!       19,    20,   351,   344,   181,   182,     0,   353,   357,   356,
!      402,     0,   378,   413,     0,   352,   355,   376,   350,   377,
!      399,   415,     0,   371,     0,   417,     0,   456,   453,   457,
!      454,   458,   455,   462,   460,   463,   461,   468,   465,   469,
!      466,   470,   467,   478,   473,   480,   475,   477,   472,   479,
!      474,   481,     0,   476,   485,   483,   486,   484,   489,   488,
!      492,   491,   495,   494,   498,   497,   501,   500,   505,     0,
!        0,   510,   509,   142,   420,   143,     0,     0,   147,     0,
!      249,     0,   315,   313,   304,   302,   312,   310,   276,     0,
!      257,     0,     0,     0,   326,   330,     0,   327,   290,   308,
!      306,   319,     0,   317,   344,     0,   198,   231,     0,     0,
!        0,   254,     0,   295,     0,   283,     0,     0,   324,     0,
!      408,   409,     0,   395,     0,   392,   383,   388,   384,   387,
!      368,   360,     0,   450,   444,   447,     0,     0,   445,   186,
!      183,   185,   403,     0,   414,   410,     0,   416,   411,   362,
!        0,   418,   412,   504,     0,     0,   144,     0,     0,   145,
!      250,     0,   277,   273,     0,   334,     0,   338,   337,   331,
!      328,   332,     0,   235,     0,   232,   233,     0,     0,     0,
!      259,     0,   263,     0,   266,     0,   300,   299,   285,     0,
!      297,     0,   323,     0,   406,     0,   394,   393,     0,   369,
!      359,   449,   443,   451,   446,   380,   379,   404,     0,   363,
!      364,   506,   503,     0,   146,     0,     0,     0,   247,     0,
!      199,     0,   206,   207,     0,   208,   209,     0,   258,   335,
!        0,   316,   236,     0,     0,   234,   272,   269,   270,   517,
!        0,   261,   264,     0,   260,     0,   267,     0,     0,   284,
!        0,   321,   320,   407,   375,     0,   405,   365,     0,   148,
!        0,     0,     0,   226,   278,     0,   336,   333,   239,   237,
!        0,   271,   268,   262,     0,   282,     0,   373,     0,     0,
!      149,     0,   251,     0,     0,   238,   280,   281,   151,     0,
!        0,     0,     0,   150,     0,     0,     0,     0,   287,     0,
!      252,   286
  };
  
  /* YYDEFGOTO[NTERM-NUM]. */
  static const short int yydefgoto[] =
  {
!       -1,     8,   212,   286,   213,    88,    89,    71,    63,   214,
!      215,    24,    25,    26,     9,    10,    11,    12,    13,    14,
!       15,    16,   453,   292,   136,   109,    50,    73,   108,   134,
!      162,   163,   164,    94,   118,   119,   120,   216,   166,   266,
!       95,   115,   182,   183,   293,   140,   187,   412,   168,   169,
!      170,   268,   171,   172,   414,   565,   566,   294,    19,    46,
!       75,    68,   111,    47,    66,    97,    98,    99,   100,   217,
!      370,   295,   175,   568,   735,   298,   299,   300,   301,   709,
!      302,   303,   304,   305,   712,   306,   307,   308,   309,   713,
!      310,   456,   311,   601,   671,   672,   673,   674,   312,   313,
!      715,   314,   315,   316,   716,   317,   318,   462,   679,   680,
!      319,   320,   321,   322,   323,   324,   325,   326,   584,   585,
!      586,   587,   218,   219,   220,   221,   222,   745,   688,   223,
!      501,   224,   225,   481,   482,   124,   226,   227,   228,   229,
!      230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
!      240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
!      250,   251,   407,   502,   730
  };
  
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
     STATE-NUM.  */
! #define YYPACT_NINF -660
  static const short int yypact[] =
  {
!      204,  -660,  -660,   100,   -49,   377,   448,  -660,    63,  -660,
!      455,   515,   477,  -660,  -660,  -660,  -660,   665,  -660,  -660,
!     -660,  -660,  -660,    25,  -660,  -660,  -660,    92,  -660,   372,
!     -660,    35,  -660,   621,  -660,  -660,   487,   705,  -660,   -49,
!      504,  -660,  -660,    28,  -660,   545,   -26,   -11,  -660,   546,
!      175,  -660,  -660,   -49,   758,   404,  -660,   379,  -660,    95,
!     -660,  -660,  -660,  -660,   258,  1466,  -660,   551,   -26,  -660,
!     -660,   433,   552,  -660,  -660,   -26,   -11,  -660,   175,  -660,
!     -660,  -660,   564,  -660,  -660,  -660,   567,   198,  -660,  -660,
!     -660,   380,   812,  -660,  -660,   126,  -660,  1648,  -660,  -660,
!     -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,   313,   333,
!     -660,   -26,  -660,  -660,   389,     6,  -660,   162,   140,  -660,
!      257,     6,   395,   411,   411,  -660,   571,   585,  -660,  -660,
!     -660,  -660,   586,  1250,  -660,  -660,   333,   743,   597,   183,
!     -660,  -660,  -660,   614,  2204,   272,   528,  -660,  -660,   307,
!     -660,     6,  -660,   518,     6,  -660,  -660,  -660,  -660,   467,
!      942,  -660,  1262,  -660,  -660,  -660,  -660,   209,  -660,   483,
!     -660,  -660,   541,  -660,  -660,  1990,  -660,  -660,  -660,  -660,
!      616,   568,   130,  -660,   799,  -660,  -660,   488,  -660,  -660,
!     -660,   425,  -660,  -660,  2846,  5150,  2912,  2964,   542,    30,
!      761,  -660,  3030,  3082,  3148,  5279,  -660,  -660,  -660,  -660,
!     -660,  -660,  -660,   562,   561,   961,   105,  -660,   573,   592,
!     -660,  -660,  -660,   624,  -660,   600,   788,  -660,   801,   820,
!     -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,   919,   894,
!      964,   932,   885,   709,   615,   728,   724,    13,  -660,  -660,
!     -660,   892,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,
!     -660,   998,   541,  -660,  -660,  -660,   659,  -660,   483,  -660,
!      695,   234,  3200,  -660,    89,  1495,    76,   284,   342,   120,
!      439,   142,   673,  3266,  5581,  -660,   -49,   562,   561,   912,
!      228,   496,  -660,   799,   694,  -660,  -660,  1990,  -660,  -660,
!      703,  -660,  -660,  -660,  2059,  -660,  -660,   713,  -660,  -660,
!     -660,  -660,  2059,  -660,  2059,  -660,  -660,  5633,   715,  -660,
!     -660,  -660,  -660,  -660,  -660,   463,  -660,   838,   898,   820,
!      948,   962,  -660,  -660,  -660,  -660,   879,  -660,   876,   627,
!      631,  -660,   676,  -660,  -660,  -660,  -660,  -660,  -660,  -660,
!     -660,  -660,   230,  -660,   635,   988,   722,   722,   490,  -660,
!     -660,  -660,  -660,  -660,   547,   961,    65,  -660,   727,  -660,
!      596,   295,   755,  5345,  2256,   666,  -660,    10,  3318,  -660,
!      505,  3384,  -660,  -660,  3436,  3502,  3554,  3620,  3672,  3738,
!     3790,  3856,  3908,  3974,  4026,  4092,   768,  4144,  4210,  4262,
!     4328,  4380,  4446,  4498,  2322,  -660,  -660,  4564,  -660,   452,
!     -660,  -660,  -660,  -660,  -660,  1990,  -660,  -660,  -660,  -660,
!     4616,  -660,   194,  -660,  -660,   202,  -660,  -660,   211,  -660,
!     4682,  -660,  4734,  -660,   652,  -660,  1660,  -660,  -660,   232,
!     -660,    74,   150,   730,   583,  -660,  -660,   -49,  2374,  -660,
!     -660,  -660,  1157,   568,  -660,  -660,   746,  -660,   780,  1065,
!     -660,  -660,  -660,   117,  2440,  -660,  4800,  -660,  -660,  -660,
!      879,  -660,  -660,  -660,  -660,   318,   745,   759,   762,  -660,
!     2492,   722,  -660,   -17,   722,   -17,  -660,  2558,  4852,   335,
!      -41,   582,  -660,  5658,  -660,  -660,  1132,  -660,  -660,  -660,
!     -660,   465,  -660,  -660,   346,  -660,  -660,  -660,  -660,  -660,
!      775,  -660,   351,  -660,  5397,  -660,   363,  -660,  -660,  -660,
!     -660,  -660,  -660,  -660,   919,  -660,   919,  -660,   894,  -660,
!      894,  -660,   894,  -660,   964,  -660,   964,  -660,   964,  -660,
!      964,  -660,   198,  -660,  -660,   932,  -660,   932,  -660,   885,
!     -660,   709,  -660,   615,  -660,   728,  -660,   724,  -660,   852,
!      785,  -660,  -660,  -660,  1092,  -660,  1990,   783,  -660,  1990,
!     -660,   224,  -660,  -660,  -660,  -660,  -660,  -660,  -660,   361,
!     -660,   796,   512,   312,   652,  -660,   483,  -660,  -660,  -660,
!     -660,  -660,  5581,  -660,  -660,   517,   730,  -660,   903,   119,
!      305,  -660,   818,  -660,  5227,  -660,   641,   814,   821,   823,
!     -660,  -660,  5463,  -660,   373,  -660,   411,  -660,   411,  -660,
!     -660,   825,   185,  -660,  -660,  -660,  4918,  1018,  -660,  -660,
!     -660,  -660,  -660,  4970,  -660,  -660,  5515,  -660,  -660,   333,
!      479,  -660,  -660,  -660,  5036,   756,  -660,  1990,  2610,  -660,
!     -660,  2126,  -660,  -660,   347,  -660,   904,  -660,  -660,  -660,
!     -660,  -660,   828,  -660,  2676,  -660,  -660,   934,    29,  5088,
!     -660,   668,  -660,  1738,  -660,  5581,  -660,  -660,  -660,   842,
!      840,  5202,  -660,   348,  -660,   607,  -660,  -660,   333,  -660,
!      843,  -660,  -660,  -660,  -660,  -660,  -660,  -660,   674,  -660,
!      333,  -660,  -660,   536,  -660,   243,   223,   543,  -660,   891,
!      900,  2126,  -660,  -660,  2126,  -660,  -660,   861,  -660,   869,
!      871,  -660,  -660,   969,   236,  -660,  -660,  -660,  -660,  -660,
!      277,  -660,  -660,  1852,  -660,  1921,  -660,   880,  2059,  -660,
!      887,  -660,  -660,  -660,  -660,   333,  -660,  -660,  2728,  -660,
!      264,  4616,  2059,  -660,  -660,  2794,  -660,  -660,  -660,  -660,
!      980,  -660,  -660,  -660,   888,  -660,  2059,  -660,   268,   244,
!     -660,   374,  -660,   641,   897,  -660,  -660,  -660,  -660,   270,
!     2126,   907,  5202,  -660,   960,  2126,   926,  2126,  -660,  2126,
!     -660,  -660
  };
  
  /* YYPGOTO[NTERM-NUM].  */
  static const short int yypgoto[] =
  {
!     -660,  -660,  -660,   -45,   155,   628,    36,  -126,   -35,   -38,
!       -3,   524,  -660,   127,  -660,  1013,   773,  -660,    31,  -660,
!     -660,   754,     7,   417,  -660,  -660,   974,   954,  -660,  -131,
!     -660,   873,  -660,   -55,  -121,   893,  -166,  -197,  -660,  -660,
!      271,   -16,   781,  -328,  -136,   -86,  -660,  -660,  -660,  -660,
!     -660,  -660,  -660,   881,  -660,   106,  -660,   629,   341,  -660,
!     -660,  -660,  -660,   990,   526,  -660,   950,  -660,  -660,   123,
!     -660,  -124,   784,  -150,  -164,  -293,  -660,   744,  -291,    84,
!     -635,   593,  -627,  -660,  -660,  -660,  -315,  -660,  -660,  -660,
!     -660,  -660,  -660,  -660,  -660,   392,   397,  -620,  -602,  -660,
!     -660,  -660,  -660,  -660,  -660,  -660,  -503,  -660,  -659,   749,
!     -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,   489,
!     -660,   491,  -660,  -660,  -660,   195,  -660,  -660,  -660,  -660,
!     -414,  -660,  -660,   714,   334,    54,  1265,   285,  1287,   365,
!      493,   606,   882,  -146,   642,   736,  -478,  -660,   626,   725,
!      442,   630,   681,   683,   680,   688,   689,  -660,   449,   697,
!      859,  -660,  -660,  1127,  -660
  };
  
  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
     positive, shift that token.  If negative, reduce the rule which
     number is the opposite.  If zero, do what YYDEFACT says.
     If YYTABLE_NINF, syntax error.  */
! #define YYTABLE_NINF -514
  static const short int yytable[] =
  {
!       23,   184,   461,    31,   450,   177,   153,    17,   369,   174,
!      468,   297,   186,   454,   336,   628,   710,    17,    17,    17,
!       86,   457,   740,   458,   711,   296,    41,    90,   403,    58,
!      726,   353,   103,    59,   599,   147,    51,   107,   174,    22,
!       17,    34,    64,    17,    17,   267,    64,   127,   345,   714,
!      349,   351,    86,   736,    90,   626,   360,   362,   149,    90,
!      138,    17,    91,    32,    64,   258,   492,    34,   260,    64,
!      121,    65,    92,   622,   358,   591,   710,   353,   165,   710,
!      205,    62,   149,   509,   711,    70,   269,   711,    86,    91,
!      423,    67,   180,    44,    91,    90,    79,   156,    22,    90,
!      640,    21,   404,    62,    92,   139,   376,   165,    62,   714,
!      151,   154,   714,   736,   781,   127,    22,    86,   603,   727,
!      666,   433,    90,   786,    90,   184,    42,   128,    43,    64,
!       91,    27,    29,   354,    91,    64,    52,   288,    53,   339,
!      160,   123,   413,   437,   181,   710,    90,   449,   717,   694,
!      710,   492,   710,   711,   710,   434,    45,    91,   711,    91,
!      711,   493,   711,   141,   592,   443,    55,    57,    62,   160,
!       60,  -153,   289,   470,    70,   593,   410,    22,   714,   354,
!       60,    91,   291,   714,   188,   714,   689,   714,    22,  -154,
!      424,   342,   342,   342,   342,   572,    80,    64,   685,   342,
!      342,   365,   184,   574,   -26,     1,   -92,   -92,   717,   114,
!      265,   717,   576,   117,   472,   667,   180,   157,  -293,   604,
!       87,   633,   698,    90,   666,   650,   337,   129,    72,   445,
!       22,   473,   338,   589,   706,   419,   357,   759,   518,   520,
!      522,   142,   143,   438,   665,   759,   594,    87,   447,     2,
!      724,   569,    87,   114,   117,    90,   -95,   137,    91,   288,
!        3,   -95,   -95,   -95,   -95,   725,     4,   123,   181,   758,
!      191,   775,     5,   253,   -23,   -23,   450,   717,   761,   288,
!        6,   690,   717,   189,   717,   429,   717,   633,    87,   677,
!       91,   461,    87,   180,   289,   573,   497,   122,   474,   631,
!       90,   452,   290,   575,   291,     7,  -102,   191,   256,   452,
!     -102,   452,   577,   657,   459,    87,   -23,    87,   446,   750,
!      651,   -23,   -23,   -23,   181,   633,   596,   -23,   720,   420,
!      287,   -23,   760,   590,   769,    91,   625,    64,   633,    87,
!      779,   123,   624,   431,   749,   181,   633,   634,   718,   741,
!      380,   144,   637,   668,   450,   356,   145,   146,    90,   364,
!      708,    53,   652,   498,   641,   770,   461,   762,   669,   778,
!      327,   783,   254,    48,   686,   650,    70,   288,    28,   430,
!       77,   342,   342,   342,   342,   342,   342,   342,   342,   342,
!      342,   342,   342,    91,   342,   342,   342,   342,   342,   342,
!      342,   425,   647,   670,   167,    74,    96,   257,   439,   157,
!      483,   485,   564,   191,   610,   132,    87,    18,   490,   491,
!      454,   611,   291,   457,   290,   -63,   141,    18,    18,    18,
!      133,   290,   -63,   167,   105,   148,    49,   432,    96,   290,
!      435,   290,   450,    49,  -255,   157,   635,   765,    87,    30,
!       18,   638,   287,    18,    18,   -28,     1,   653,   461,   658,
!      328,   772,   661,   642,   465,    22,   191,   461,    45,   -63,
!      780,    18,   287,   687,   173,   777,   -63,   -27,     1,   122,
!      692,   476,    93,    53,   137,   342,   -64,   -30,     1,   708,
!      342,   486,   327,    87,   765,   148,   772,  -325,   777,   327,
!        2,  -156,    60,   173,   510,    56,   513,   327,   699,   327,
!      149,     3,   327,   655,    93,   -29,     1,     4,   663,   -95,
!      184,   -95,     2,     5,   -95,   -95,   -95,   -95,   288,   255,
!      -64,   288,     2,     3,   436,   616,    22,   663,   618,     4,
!      329,    38,   290,     3,   419,     5,    61,    69,   563,     4,
!      161,   542,   102,   106,   338,     5,     7,   744,   466,   742,
!        2,   632,   261,   289,    40,   113,   289,   633,   116,   747,
!      287,    60,   150,   291,   191,   700,   291,     4,     7,   161,
!      157,   633,   328,     5,   505,   487,   152,   155,     7,   328,
!      340,  -325,    22,    20,   104,   138,   123,   328,   185,   328,
!      514,   110,   328,    20,    20,    20,   617,   656,   619,   288,
!      327,   180,   664,    38,   767,   190,     7,   335,    90,   259,
!      143,   -32,     1,   342,   342,   379,    20,   400,   469,    20,
!       20,   748,   471,    22,    22,   288,   475,   135,   751,    22,
!       22,   342,   678,   488,   289,   352,   489,    20,   452,   595,
!      371,   506,    22,    91,   291,    22,   507,   159,   101,    22,
!      508,   122,   329,   181,   372,   371,     2,   505,   330,   329,
!      289,    22,   646,    22,    22,   649,   377,   329,   627,   329,
!      291,   149,   329,     4,   159,    22,   159,   196,   197,     5,
!      101,   378,    81,   290,   495,   288,   290,   288,   496,   381,
!      328,   198,    22,   743,    22,   -31,     1,   199,   452,   633,
!       38,   452,    22,   582,   200,    22,   668,   583,   201,    22,
!      399,   287,     7,    22,   287,    83,   176,    39,    84,    22,
!      289,   669,   289,    40,   506,   452,   284,  -296,   402,   507,
!      291,   401,   291,   508,   178,   206,   207,   208,   209,   452,
!        2,   210,   211,   704,    22,   176,   157,   505,   -33,     1,
!      411,   327,   355,   452,   327,    35,   731,     4,  -152,   541,
!      746,   373,    60,     5,   290,   374,   633,   452,   290,   375,
!      329,   331,   452,    33,   452,    37,   452,    35,     2,   448,
!      330,    35,   416,   417,    81,   753,   418,   330,   754,   327,
!      290,   327,   287,     2,   451,   330,     7,   330,    35,    54,
!      330,    87,    81,   125,   455,   615,   464,   332,   615,    81,
!        4,   480,   703,   499,   506,   494,     5,    83,   287,   507,
!       84,    22,   143,   508,   534,   536,   538,   540,   290,   179,
!      612,   290,   327,   600,    22,    83,   327,   602,    84,    22,
!       81,   328,    83,   643,   328,    84,    22,    38,  -390,     7,
!      290,  -389,   290,    81,   784,   290,   382,   383,   327,   788,
!      636,   790,   126,   791,    39,   644,   327,   467,   648,   290,
!       40,  -512,  -512,    83,  -345,  -345,    84,    22,   287,   328,
!      287,   328,   654,   290,  -513,  -513,    83,   387,   388,    84,
!       22,   397,   398,   331,   665,   719,   327,   290,   330,   327,
!      331,   333,   290,   675,   290,   681,   290,   682,   331,   683,
!      331,     2,  -374,   331,   384,   385,   386,    81,   327,   721,
!      327,   329,   328,   327,   329,   725,   328,  -345,   738,   332,
!     -372,  -345,   604,   125,  -347,  -347,   332,   327,   752,     2,
!      392,   393,   394,   395,   332,    81,   332,  -205,   328,   332,
!       83,   327,   755,    84,    22,   756,   328,   757,   327,   329,
!      758,   329,   389,   390,   391,   327,   764,   327,   145,   146,
!      327,   775,   327,   766,   327,   405,   406,    38,    83,   776,
!      396,    84,    22,    81,  -421,  -421,   328,  -347,   782,   328,
!      -16,  -347,   126,   785,    39,  -511,  -511,   373,  -422,  -422,
!       40,   374,   329,   524,   526,   444,   329,   787,   328,   693,
!      328,   331,   789,   328,   543,    36,    83,   545,   547,    84,
!       22,    78,   112,   333,   334,   264,   192,   328,   329,  -136,
!      333,   262,   409,     2,   567,    76,   329,   131,   333,    81,
!      333,   328,   415,   333,  -511,  -511,   373,   332,   328,   330,
!      374,   460,   330,   732,   375,   328,   463,   328,   733,    81,
!      328,   484,   328,   659,   328,   660,   329,   347,   198,   329,
!      549,   553,    83,   551,   199,    84,    22,   477,   478,   479,
!      555,   200,   557,   702,   408,   201,     0,   330,   329,   330,
!      329,     0,    83,   329,   562,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,   528,   530,   532,   329,     0,     0,
!        0,     0,   206,   207,   208,   209,     0,     0,   210,   211,
!        0,   329,     0,   629,     0,   194,   195,     0,   329,     0,
!      330,     0,     0,     0,   330,   329,     0,   329,     0,     0,
!      329,   333,   329,   -16,   329,     0,   334,     0,  -511,  -511,
!      373,     0,     0,   334,   374,     0,   330,     0,   375,     0,
!        0,   334,   331,   334,   330,   331,   334,     0,   196,   197,
!      -16,     0,     0,    81,     0,  -511,  -511,   373,     0,     0,
!        0,   374,   198,     0,     0,   645,     0,     0,   199,     0,
!        0,     0,     0,     0,   330,   200,     0,   330,   332,   201,
!      331,   332,   331,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,   330,   204,   330,   205,
!      630,   330,     0,     0,     0,     0,   206,   207,   208,   209,
!        0,     0,   210,   211,     0,   330,   332,     0,   332,     0,
!     -511,  -511,   373,   331,     0,     0,   374,   331,     0,   330,
!      444,     0,     0,     0,     0,     0,   330,     0,     0,     0,
!        0,   252,     0,   330,   334,   330,     0,     0,   330,   331,
!      330,     0,   330,     0,     0,     0,     0,   331,     0,   332,
!        0,     0,     0,   332,     0,     2,     0,     0,     0,     0,
!        0,    81,   333,     0,     0,   333,     0,     2,     0,     0,
!       82,     0,     4,    81,     0,   332,     0,   331,     5,     0,
!      331,     0,    82,   332,     4,     0,     0,     0,     0,     0,
!        5,   366,   252,     0,    83,     0,     0,    84,    22,   331,
!      333,   331,   333,     0,   331,     0,    83,   157,   158,    84,
!       22,     7,     0,   332,     0,     0,   332,     0,   331,   157,
!      263,     0,     0,     7,     0,     0,     0,     0,     0,     0,
!        0,     0,   331,     0,     0,   332,     0,   332,     0,   331,
!      332,     0,     0,   333,     0,     0,   331,   333,   331,     0,
!        0,   331,     0,   331,   332,   331,     0,     0,     0,   422,
!        0,     0,   428,     0,     0,     0,     0,     0,   332,   333,
!      441,   442,     0,     0,     0,   332,     0,   333,     0,     0,
!        0,     0,   332,     0,   332,   334,     0,   332,   334,   332,
!        0,   332,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,   333,     0,     0,
!      333,     0,     0,     0,     0,     0,     0,     0,     0,   343,
!      343,   343,   343,   334,     0,   334,     0,   343,   343,   333,
!        0,   333,     0,     0,   333,     0,     0,     0,     0,     0,
!        0,   344,   344,   344,   344,     0,     0,     0,   333,   344,
!      344,     0,     0,     0,     0,     0,   426,     0,   194,   195,
!        0,   504,   333,     0,     0,   512,   334,     0,   516,   333,
!      334,     2,     0,     0,     0,     0,   333,    81,   333,     0,
!        0,   333,     0,   333,     0,   333,    82,     0,     4,     0,
!        0,   560,   334,     0,     5,     0,     0,     0,     0,     0,
!      334,   196,   197,     0,     0,     0,    81,   571,     0,     0,
!       83,     0,     0,    84,    22,   198,     0,   579,     0,   581,
!        0,   199,     0,     0,    85,     0,     0,     7,   200,     0,
!      334,     0,   201,   334,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   202,   203,     0,     0,
!      204,   607,   334,   609,   334,     0,   427,   334,     0,   206,
!      207,   208,   209,     0,     0,   210,   211,   614,     0,     0,
!        0,   334,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,   252,     0,   334,     0,     0,     0,     0,
!        0,     0,   334,     0,     0,     0,     0,     0,     0,   334,
!        0,   334,     0,     0,   334,     0,   334,     0,   334,   343,
       343,   343,   343,   343,   343,   343,   343,   343,   343,   343,
!      343,   588,   343,   343,   343,   343,   343,   343,   343,     0,
!        0,   344,   344,   344,   344,   344,   344,   344,   344,   344,
!      344,   344,   344,     0,   344,   344,   344,   344,   344,   344,
!      344,     0,     0,     2,     0,     0,     0,     0,     0,    81,
!        0,     0,     0,     0,     0,  -288,  -288,  -288,    82,     0,
!        4,  -288,     0,     0,     0,     0,     5,     0,     0,   662,
!     -288,     0,     0,     0,     0,     0,  -288,     0,     0,     0,
!        0,     0,    83,  -288,     0,    84,    22,  -288,     0,   270,
!        0,     0,     0,     0,  -288,     0,   130,  -288,  -288,     7,
!        0,     0,     0,   343,     0,  -288,     0,     0,   343,     0,
!      696,  -288,     0,     0,  -288,  -288,  -288,  -288,     0,     0,
!     -288,  -288,     0,     0,     0,   344,     0,     0,     0,     0,
!      344,     0,     0,     2,   196,   197,   668,   271,   272,    81,
!      273,     0,     0,   274,     0,     0,   729,   275,   198,     0,
!        0,   669,   737,     0,   276,   277,     5,   278,     0,   279,
!      280,   200,   281,     0,     0,   282,   283,     0,     0,     0,
         0,     0,    83,     0,     0,    84,    22,     0,     0,     0,
!        0,     0,     0,   284,     0,   157,   734,     0,     0,     7,
!        0,     0,   206,   207,   208,   209,     0,     0,   210,   211,
!        0,     0,     0,   270,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,   771,     0,
!        0,     0,   774,     0,     0,     0,     0,     0,     0,     0,
!        0,   343,   343,     0,     0,     0,     0,     2,   196,   197,
!      668,   271,   272,    81,   273,     0,     0,   274,     0,   343,
!        0,   275,   198,   344,   344,   669,     0,     0,   276,   277,
!        5,   278,   270,   279,   280,   200,   281,     0,     0,   282,
!      283,   344,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,     0,     0,     0,     0,   284,     0,   157,
!      763,     0,     0,     7,     0,     0,   206,   207,   208,   209,
!        0,     0,   210,   211,     0,     0,     2,   196,   197,  -265,
!      271,   272,    81,   273,     0,     0,   274,     0,     0,     0,
!      275,   198,     0,     0,  -265,     0,     0,   276,   277,     5,
!      278,   270,   279,   280,   200,   281,     0,     0,   282,   283,
         0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,     0,     0,     0,     0,   284,     0,   157,  -265,
!        0,     0,     7,     0,     0,   206,   207,   208,   209,     0,
!        0,   210,   211,     0,     0,     2,   196,   197,     0,   271,
!      272,    81,   273,     0,     0,   274,     0,     0,     0,   275,
!      198,     0,     0,     0,     0,     0,   276,   277,     5,   278,
!      270,   279,   280,   200,   281,     0,     0,   282,   283,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,     0,     0,     0,     0,   284,     0,   157,   285,     0,
!        0,     7,     0,     0,   206,   207,   208,   209,     0,     0,
!      210,   211,     0,     0,     2,   196,   197,     0,   271,   272,
!       81,   273,     0,     0,   274,     0,     0,     0,   275,   198,
!        0,     0,     0,     0,     0,   276,   277,   270,   278,     0,
!      279,   280,   200,   281,     0,     0,   282,   283,     0,     0,
         0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!        0,     0,     0,     0,   284,     0,   157,     0,     0,     0,
!        7,     0,     0,   206,   207,   208,   209,     0,     0,   210,
!      211,     2,   196,   197,     0,   707,   272,    81,   273,     0,
!        0,   274,     0,     0,     0,   275,   198,     0,     0,     0,
!        0,     0,   276,   277,     0,   278,     0,   279,   280,   200,
!      281,     0,     0,   282,   283,   193,     0,   194,   195,     0,
!       83,     0,     0,    84,    22,     0,     0,     0,     0,     0,
!        0,   284,     0,   157,     0,     0,     0,     7,     0,     0,
!      206,   207,   208,   209,     0,     0,   210,   211,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!      196,   197,     0,     0,     0,    81,     0,   503,     0,   194,
!      195,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,     0,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!        0,   205,   196,   197,     0,     0,     0,    81,   206,   207,
!      208,   209,     0,     0,   210,   211,   198,     0,     0,     0,
!        0,     0,   199,   558,     0,   194,   195,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,     0,     0,     0,     0,   148,     0,     0,     0,
!      206,   207,   208,   209,     0,     0,   210,   211,   196,   197,
!        0,     0,     0,    81,     0,   597,     0,   194,   195,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,     0,     0,     0,   200,     0,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,   559,   202,   203,     0,     0,   204,     0,     0,
!      196,   197,     0,     0,     0,    81,   206,   207,   208,   209,
!        0,     0,   210,   211,   198,     0,     0,     0,     0,     0,
!      199,   605,     0,   194,   195,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!      598,     0,     0,     0,     0,     0,     0,     0,   206,   207,
!      208,   209,     0,     0,   210,   211,   196,   197,     0,     0,
!        0,    81,     0,   613,     0,   194,   195,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!        0,     0,     0,   200,     0,     0,     0,   201,     0,     0,
         0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,   196,   197,
!        0,   606,     0,    81,   206,   207,   208,   209,     0,     0,
!      210,   211,   198,     0,     0,     0,     0,     0,   199,   620,
!        0,   194,   195,     0,     0,   200,     0,     0,     0,   201,
         0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,     0,   204,     0,     0,
!        0,     0,   148,     0,     0,     0,   206,   207,   208,   209,
!        0,     0,   210,   211,   196,   197,     0,     0,     0,    81,
!        0,   597,     0,   194,   195,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,     0,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,   621,     0,   196,   197,     0,     0,
!        0,    81,   206,   207,   208,   209,     0,     0,   210,   211,
!      198,     0,     0,     0,     0,     0,   199,   722,     0,   194,
!      195,     0,     0,   200,     0,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,   705,     0,     0,     0,
!        0,     0,     0,     0,   206,   207,   208,   209,     0,     0,
!      210,   211,   196,   197,     0,     0,     0,    81,     0,   722,
!        0,   194,   195,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,     0,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,   723,     0,   196,   197,     0,     0,     0,    81,
!      206,   207,   208,   209,     0,     0,   210,   211,   198,     0,
!        0,     0,     0,     0,   199,   605,     0,   194,   195,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,   768,     0,     0,     0,     0,     0,
!        0,     0,   206,   207,   208,   209,     0,     0,   210,   211,
!      196,   197,     0,     0,     0,    81,     0,   341,     0,   194,
!      195,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,     0,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!        0,     0,   196,   197,     0,   773,     0,    81,   206,   207,
!      208,   209,     0,     0,   210,   211,   198,     0,     0,     0,
!        0,     0,   199,   348,     0,   194,   195,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,     0,     0,     0,     0,     0,     0,     0,     0,
!      206,   207,   208,   209,     0,     0,   210,   211,   196,   197,
!        0,     0,     0,    81,     0,   350,     0,   194,   195,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,     0,     0,     0,   200,     0,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,     0,   204,     0,     0,
!      196,   197,     0,     0,     0,    81,   206,   207,   208,   209,
!        0,     0,   210,   211,   198,     0,     0,     0,     0,     0,
!      199,   359,     0,   194,   195,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!        0,     0,     0,     0,     0,     0,     0,     0,   206,   207,
!      208,   209,     0,     0,   210,   211,   196,   197,     0,     0,
!        0,    81,     0,   361,     0,   194,   195,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!        0,     0,     0,   200,     0,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,   196,   197,
!        0,     0,     0,    81,   206,   207,   208,   209,     0,     0,
!      210,   211,   198,     0,     0,     0,     0,     0,   199,   363,
!        0,   194,   195,     0,     0,   200,     0,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,     0,   204,     0,     0,
!        0,     0,     0,     0,     0,     0,   206,   207,   208,   209,
!        0,     0,   210,   211,   196,   197,     0,     0,     0,    81,
!        0,   421,     0,   194,   195,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,     0,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,     0,     0,   196,   197,     0,     0,
!        0,    81,   206,   207,   208,   209,     0,     0,   210,   211,
!      198,     0,     0,     0,     0,     0,   199,   440,     0,   194,
!      195,     0,     0,   200,     0,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,     0,     0,
!        0,     0,     0,     0,   206,   207,   208,   209,     0,     0,
!      210,   211,   196,   197,     0,     0,     0,    81,     0,   511,
!        0,   194,   195,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,     0,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,     0,     0,   196,   197,     0,     0,     0,    81,
!      206,   207,   208,   209,     0,     0,   210,   211,   198,     0,
!        0,     0,     0,     0,   199,   515,     0,   194,   195,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,     0,     0,     0,     0,     0,     0,
!        0,     0,   206,   207,   208,   209,     0,     0,   210,   211,
!      196,   197,     0,     0,     0,    81,     0,   517,     0,   194,
!      195,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,     0,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!        0,     0,   196,   197,     0,     0,     0,    81,   206,   207,
!      208,   209,     0,     0,   210,   211,   198,     0,     0,     0,
!        0,     0,   199,   519,     0,   194,   195,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,     0,     0,     0,     0,     0,     0,     0,     0,
!      206,   207,   208,   209,     0,     0,   210,   211,   196,   197,
!        0,     0,     0,    81,     0,   521,     0,   194,   195,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,     0,     0,     0,   200,     0,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,     0,   204,     0,     0,
!      196,   197,     0,     0,     0,    81,   206,   207,   208,   209,
!        0,     0,   210,   211,   198,     0,     0,     0,     0,     0,
!      199,   523,     0,   194,   195,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!        0,     0,     0,     0,     0,     0,     0,     0,   206,   207,
!      208,   209,     0,     0,   210,   211,   196,   197,     0,     0,
!        0,    81,     0,   525,     0,   194,   195,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!        0,     0,     0,   200,     0,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,   196,   197,
!        0,     0,     0,    81,   206,   207,   208,   209,     0,     0,
!      210,   211,   198,     0,     0,     0,     0,     0,   199,   527,
!        0,   194,   195,     0,     0,   200,     0,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,     0,   204,     0,     0,
!        0,     0,     0,     0,     0,     0,   206,   207,   208,   209,
!        0,     0,   210,   211,   196,   197,     0,     0,     0,    81,
!        0,   529,     0,   194,   195,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,     0,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,     0,     0,   196,   197,     0,     0,
!        0,    81,   206,   207,   208,   209,     0,     0,   210,   211,
!      198,     0,     0,     0,     0,     0,   199,   531,     0,   194,
!      195,     0,     0,   200,     0,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,     0,     0,
!        0,     0,     0,     0,   206,   207,   208,   209,     0,     0,
!      210,   211,   196,   197,     0,     0,     0,    81,     0,   533,
!        0,   194,   195,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,     0,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,     0,     0,   196,   197,     0,     0,     0,    81,
!      206,   207,   208,   209,     0,     0,   210,   211,   198,     0,
!        0,     0,     0,     0,   199,   535,     0,   194,   195,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,     0,     0,     0,     0,     0,     0,
!        0,     0,   206,   207,   208,   209,     0,     0,   210,   211,
!      196,   197,     0,     0,     0,    81,     0,   537,     0,   194,
!      195,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,     0,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!        0,     0,   196,   197,     0,     0,     0,    81,   206,   207,
!      208,   209,     0,     0,   210,   211,   198,     0,     0,     0,
!        0,     0,   199,   539,     0,   194,   195,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,     0,     0,     0,     0,     0,     0,     0,     0,
!      206,   207,   208,   209,     0,     0,   210,   211,   196,   197,
!        0,     0,     0,    81,     0,   544,     0,   194,   195,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,     0,     0,     0,   200,     0,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,     0,   204,     0,     0,
!      196,   197,     0,     0,     0,    81,   206,   207,   208,   209,
!        0,     0,   210,   211,   198,     0,     0,     0,     0,     0,
!      199,   546,     0,   194,   195,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!        0,     0,     0,     0,     0,     0,     0,     0,   206,   207,
!      208,   209,     0,     0,   210,   211,   196,   197,     0,     0,
!        0,    81,     0,   548,     0,   194,   195,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!        0,     0,     0,   200,     0,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,   196,   197,
!        0,     0,     0,    81,   206,   207,   208,   209,     0,     0,
!      210,   211,   198,     0,     0,     0,     0,     0,   199,   550,
!        0,   194,   195,     0,     0,   200,     0,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,     0,   204,     0,     0,
!        0,     0,     0,     0,     0,     0,   206,   207,   208,   209,
!        0,     0,   210,   211,   196,   197,     0,     0,     0,    81,
!        0,   552,     0,   194,   195,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,     0,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,     0,     0,   196,   197,     0,     0,
!        0,    81,   206,   207,   208,   209,     0,     0,   210,   211,
!      198,     0,     0,     0,     0,     0,   199,   554,     0,   194,
!      195,     0,     0,   200,     0,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,     0,     0,
!        0,     0,     0,     0,   206,   207,   208,   209,     0,     0,
!      210,   211,   196,   197,     0,     0,     0,    81,     0,   556,
!        0,   194,   195,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,     0,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,     0,     0,   196,   197,     0,     0,     0,    81,
!      206,   207,   208,   209,     0,     0,   210,   211,   198,     0,
!        0,     0,     0,     0,   199,   561,     0,   194,   195,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,     0,     0,     0,     0,     0,     0,
!        0,     0,   206,   207,   208,   209,     0,     0,   210,   211,
!      196,   197,     0,     0,     0,    81,     0,   570,     0,   194,
!      195,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!      199,     0,     0,     0,     0,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!        0,     0,   196,   197,     0,     0,     0,    81,   206,   207,
!      208,   209,     0,     0,   210,   211,   198,     0,     0,     0,
!        0,     0,   199,   578,     0,   194,   195,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,     0,     0,     0,     0,     0,     0,     0,     0,
!      206,   207,   208,   209,     0,     0,   210,   211,   196,   197,
!        0,     0,     0,    81,     0,   580,     0,   194,   195,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,     0,     0,     0,   200,     0,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,     0,   204,     0,     0,
!      196,   197,     0,     0,     0,    81,   206,   207,   208,   209,
!        0,     0,   210,   211,   198,     0,     0,     0,     0,     0,
!      199,   608,     0,   194,   195,     0,     0,   200,     0,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,    83,     0,
!        0,    84,    22,     0,     0,   202,   203,     0,     0,   204,
!        0,     0,     0,     0,     0,     0,     0,     0,   206,   207,
!      208,   209,     0,     0,   210,   211,   196,   197,     0,     0,
!        0,    81,     0,   623,     0,   194,   195,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!        0,     0,     0,   200,     0,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,   196,   197,
!        0,     0,     0,    81,   206,   207,   208,   209,     0,     0,
!      210,   211,   198,     0,     0,     0,     0,     0,   199,   691,
!        0,   194,   195,     0,     0,   200,     0,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,    83,     0,     0,    84,
!       22,     0,     0,   202,   203,     0,     0,   204,     0,     0,
!        0,     0,     0,     0,     0,     0,   206,   207,   208,   209,
!        0,     0,   210,   211,   196,   197,     0,     0,     0,    81,
!        0,   695,     0,   194,   195,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,   199,     0,     0,     0,     0,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,     0,     0,   196,   197,     0,     0,
!        0,    81,   206,   207,   208,   209,     0,     0,   210,   211,
!      198,     0,     0,     0,     0,     0,   199,   701,     0,   194,
!      195,     0,     0,   200,     0,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,     0,     0,
!        0,     0,     0,     0,   206,   207,   208,   209,     0,     0,
!      210,   211,   196,   197,     0,     0,     0,    81,     0,   728,
!        0,   194,   195,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,   199,     0,     0,     0,     0,     0,     0,   200,
!        0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!       83,     0,     0,    84,    22,     0,     0,   202,   203,     0,
!        0,   204,     0,     0,   196,   197,     0,     0,     0,    81,
!      206,   207,   208,   209,     0,     0,   210,   211,   198,     0,
!        0,   346,     0,   194,   199,     0,     0,     0,     0,     0,
!        0,   200,     0,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,    83,     0,     0,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,     0,     0,     0,     0,     0,     0,
!        0,     0,   206,   207,   208,   209,   196,   197,   210,   211,
!        0,    81,     0,   739,     0,     0,     0,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,   199,     0,     0,     0,
!        0,     0,     0,   200,     0,     0,     0,   201,   676,     0,
!        0,     0,     0,     0,    83,     0,     0,    84,    22,     0,
!        0,   202,   203,     0,     0,   204,     0,     0,   196,   197,
!        0,     0,     0,    81,   206,   207,   208,   209,     0,     0,
!      210,   211,   198,     0,     0,     0,     0,     0,   199,     0,
!        0,     0,     0,   196,   197,   200,     0,     0,    81,   201,
!        0,     0,   194,   195,     0,     0,    83,   198,     0,    84,
!       22,     0,     0,   199,     0,     0,     0,   284,  -296,     0,
!      200,     0,     0,     0,   201,     0,   206,   207,   208,   209,
!        0,    83,   210,   211,    84,    22,     0,     0,     0,     0,
!        0,     0,   284,     0,     0,   196,   197,     0,     0,     0,
!       81,   206,   207,   208,   209,     0,     0,   210,   211,   198,
!        0,     0,     0,     0,     0,   199,     0,     0,   194,   195,
!        0,     0,   200,     0,     0,     0,   201,     0,     0,     0,
!        0,     0,     0,    83,     0,     0,    84,    22,     0,     0,
!      202,   203,     0,     0,   204,     0,   205,   367,     0,     0,
!        0,   368,     0,   206,   207,   208,   209,     0,     0,   210,
!      211,   196,   197,     0,     0,     0,    81,     0,     0,     0,
!      194,   195,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,   199,     0,     0,     0,     0,     0,     0,   200,     0,
!        0,     0,   201,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   202,   203,     0,     0,
!      204,   500,     0,   196,   197,     0,     0,     0,    81,   206,
!      207,   208,   209,     0,     0,   210,   211,   198,     0,     0,
!        0,     0,     0,   199,     0,     0,   194,   195,     0,     0,
!      200,     0,     0,     0,   201,     0,     0,     0,     0,     0,
!        0,    83,     0,     0,    84,    22,     0,     0,   202,   203,
!        0,     0,   204,   639,     0,     0,     0,     0,     0,     0,
!        0,   206,   207,   208,   209,     0,     0,   210,   211,   196,
!      197,     0,     0,     0,    81,     0,     0,     0,   194,   195,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,   199,
!        0,     0,     0,     0,     0,     0,   200,     0,     0,     0,
!      201,     0,     0,     0,     0,     0,     0,    83,     0,     0,
!       84,    22,     0,     0,   202,   203,     0,     0,   204,   684,
!        0,   196,   197,     0,     0,     0,    81,   206,   207,   208,
!      209,     0,     0,   210,   211,   198,     0,     0,     0,     0,
!        0,   199,     0,     0,   194,   195,     0,     0,   200,     0,
!        0,     0,   201,     0,     0,     0,     0,     0,     0,    83,
!        0,     0,    84,    22,     0,     0,   202,   203,     0,     0,
!      204,   697,     0,     0,     0,     0,     0,     0,     0,   206,
!      207,   208,   209,     0,     0,   210,   211,   196,   197,     0,
!        0,     0,    81,     0,     0,     0,     0,     0,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,   199,     0,     0,
!        0,     0,     0,     0,   200,     0,     0,     0,   201,     0,
!        0,     0,     0,     0,     0,    83,     0,     0,    84,    22,
!        0,     0,   202,   203,     0,     0,   204,     0,     2,   196,
!      197,     0,     0,     0,    81,   206,   207,   208,   209,     0,
!        0,   210,   211,   198,     0,     0,     0,     0,     0,   199,
!        0,     0,     0,     0,     0,     0,   200,     0,     0,    81,
!      201,     0,     0,     0,     0,     0,     0,    83,   198,     0,
!       84,    22,     0,     0,   199,     0,     0,     0,   284,     0,
!        0,   200,     0,     0,     0,   201,     0,   206,   207,   208,
!      209,     0,    83,   210,   211,    84,    22,     0,     0,   202,
!      203,     0,     0,   204,     0,     0,     0,     0,     0,     0,
!        0,     0,   206,   207,   208,   209,     0,     0,   210,   211
  };
  
  static const short int yycheck[] =
  {
!        3,   137,   317,     6,   297,   136,   127,     0,   205,   133,
!      338,   175,   138,   304,   180,   493,   651,    10,    11,    12,
!       65,   312,   681,   314,   651,   175,     1,    65,    15,     1,
!        1,     1,    67,     5,   448,   121,     1,    72,   162,    88,
!       33,    10,    45,    36,    37,   169,    49,    92,   194,   651,
!      196,   197,    97,   673,    92,    96,   202,   203,    99,    97,
!       54,    54,    65,     0,    67,   151,     1,    36,   154,    72,
!       86,    97,    65,   487,   200,     1,   711,     1,   133,   714,
!       97,    45,    99,    73,   711,    49,   172,   714,   133,    92,
!        1,   102,   137,     1,    97,   133,     1,   132,    88,   137,
!      514,     1,    89,    67,    97,    99,     1,   162,    72,   711,
!      126,   127,   714,   733,   773,   160,    88,   162,     1,    90,
!        1,     1,   160,   782,   162,   261,   101,     1,   103,   132,
!      133,     4,     5,   103,   137,   138,   101,   175,   103,   184,
!      133,    87,   266,     1,   137,   780,   184,   297,   651,   627,
!      785,     1,   787,   780,   789,   279,    64,   160,   785,   162,
!      787,    96,   789,     1,    90,   286,    39,    40,   132,   162,
!       43,    95,   175,   339,   138,   101,   262,    88,   780,   103,
!       53,   184,   175,   785,     1,   787,     1,   789,    88,    97,
!      101,   194,   195,   196,   197,     1,   101,   200,   612,   202,
!      203,   204,   338,     1,     0,     1,   101,   102,   711,    82,
!        1,   714,     1,    86,   340,    96,   261,    97,   101,   102,
!       65,   102,   636,   261,     1,     1,    96,   101,    53,     1,
!       88,     1,   102,     1,   648,     1,   200,     1,   384,   385,
!      386,   101,   102,   101,     1,     1,    96,    92,   293,    45,
!      664,   415,    97,   126,   127,   293,    94,    95,   261,   297,
!       56,    99,   100,   101,   102,     1,    62,   213,   261,     1,
!      143,     1,    68,     1,    46,    47,   569,   780,     1,   317,
!       76,    96,   785,   100,   787,     1,   789,   102,   133,   604,
!      293,   606,   137,   338,   297,   101,     1,    99,    68,   496,
!      338,   304,   175,   101,   297,   101,    97,   180,     1,   312,
!      101,   314,   101,     1,   317,   160,    88,   162,    90,    96,
!       96,    93,    94,    95,   317,   102,   447,    99,   656,    95,
!      175,   103,    96,   101,   748,   338,     1,   340,   102,   184,
!       96,   287,   488,     1,   101,   338,   102,     1,     1,     1,
!      223,    94,     1,    48,   647,   200,    99,   100,   396,   204,
!      651,   103,     1,    68,     1,   101,   681,    90,    63,   101,
!      175,   101,   100,     1,     1,     1,   340,   415,     1,    95,
!        1,   384,   385,   386,   387,   388,   389,   390,   391,   392,
       393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
!      403,   274,   566,    98,   133,     1,    65,   100,   281,    97,
!      356,   357,   415,   286,    96,   102,   261,     0,   364,   365,
!      711,   103,   415,   714,   297,    53,     1,    10,    11,    12,
!       97,   304,    53,   162,     1,   100,    64,    95,    97,   312,
!        1,   314,   735,    64,    97,    97,   100,   738,   293,     1,
!       33,   100,   297,    36,    37,     0,     1,    96,   773,   583,
!      175,   752,   586,   100,     1,    88,   339,   782,    64,    97,
!       96,    54,   317,   100,   133,   766,    97,     0,     1,    99,
!      626,   354,    65,   103,    95,   488,    53,     0,     1,   780,
!      493,     1,   297,   338,   785,   100,   787,     1,   789,   304,
!       45,    97,   375,   162,   377,     1,     1,   312,   639,   314,
!       99,    56,   317,     1,    97,     0,     1,    62,     1,    94,
!      656,    96,    45,    68,    99,   100,   101,   102,   566,     1,
!       97,   569,    45,    56,    95,   481,    88,     1,   484,    62,
!      175,    45,   415,    56,     1,    68,     1,     1,    96,    62,
!      133,   396,     1,     1,   102,    68,   101,   688,    95,   683,
!       45,    96,    95,   566,    68,     1,   569,   102,     1,   700,
!      415,   444,     1,   566,   447,    96,   569,    62,   101,   162,
!       97,   102,   297,    68,     1,    95,     1,     1,   101,   304,
!      102,    95,    88,     0,    68,    54,   542,   312,     1,   314,
!       95,    75,   317,    10,    11,    12,   483,    95,   485,   647,
!      415,   656,    95,    45,   745,     1,   101,     1,   656,   101,
!      102,     0,     1,   626,   627,     1,    33,    12,     1,    36,
!       37,    95,     1,    88,    88,   673,     1,   111,    95,    88,
!       88,   644,     1,    96,   647,   103,    99,    54,   651,    66,
!      103,    68,    88,   656,   647,    88,    73,   133,    65,    88,
!       77,    99,   297,   656,   103,   103,    45,     1,   175,   304,
!      673,    88,   566,    88,    88,   569,   103,   312,    96,   314,
!      673,    99,   317,    62,   160,    88,   162,    46,    47,    68,
!       97,    99,    51,   566,    98,   733,   569,   735,   102,    99,
!      415,    60,    88,    96,    88,     0,     1,    66,   711,   102,
!       45,   714,    88,    61,    73,    88,    48,    65,    77,    88,
!       11,   566,   101,    88,   569,    84,   133,    62,    87,    88,
!      733,    63,   735,    68,    68,   738,    95,    96,    14,    73,
!      733,    13,   735,    77,     1,   104,   105,   106,   107,   752,
!       45,   110,   111,   647,    88,   162,    97,     1,     0,     1,
!      101,   566,     1,   766,   569,    11,    98,    62,    95,     1,
!       96,    95,   645,    68,   647,    99,   102,   780,   651,   103,
!      415,   175,   785,    10,   787,    12,   789,    33,    45,    95,
!      297,    37,    97,    98,    51,   711,   101,   304,   714,   604,
!      673,   606,   647,    45,   101,   312,   101,   314,    54,    36,
!      317,   656,    51,     1,   101,   481,   101,   175,   484,    51,
!       62,    99,    66,    68,    68,    98,    68,    84,   673,    73,
!       87,    88,   102,    77,   392,   393,   394,   395,   711,    96,
!       95,   714,   647,    97,    88,    84,   651,    67,    87,    88,
!       51,   566,    84,     1,   569,    87,    88,    45,    99,   101,
!      733,    99,   735,    51,   780,   738,    46,    47,   673,   785,
!       95,   787,    60,   789,    62,    90,   681,     1,    95,   752,
!       68,    93,    94,    84,    46,    47,    87,    88,   733,   604,
!      735,   606,    96,   766,    93,    94,    84,     3,     4,    87,
!       88,    16,    17,   297,     1,     1,   711,   780,   415,   714,
!      304,   175,   785,    95,   787,   101,   789,    96,   312,    96,
!      314,    45,    97,   317,     5,     6,     7,    51,   733,   101,
!      735,   566,   647,   738,   569,     1,   651,    99,    96,   297,
!       97,   103,   102,     1,    46,    47,   304,   752,    57,    45,
!       18,    19,    20,    21,   312,    51,   314,    57,   673,   317,
!       84,   766,   101,    87,    88,    96,   681,    96,   773,   604,
!        1,   606,     8,     9,    10,   780,    96,   782,    99,   100,
!      785,     1,   787,    96,   789,    93,    94,    45,    84,   101,
!       58,    87,    88,    51,    46,    47,   711,    99,   101,   714,
!       88,   103,    60,    96,    62,    93,    94,    95,    46,    47,
!       68,    99,   647,   387,   388,   103,   651,    57,   733,     1,
!      735,   415,    96,   738,   396,    12,    84,   397,   398,    87,
!       88,    57,    78,   297,   175,   162,   143,   752,   673,    97,
!      304,   160,   261,    45,   415,    55,   681,    97,   312,    51,
!      314,   766,   268,   317,    93,    94,    95,   415,   773,   566,
!       99,   317,   569,   671,   103,   780,   317,   782,   671,    51,
!      785,   357,   787,   584,   789,   584,   711,   195,    60,   714,
!      399,   401,    84,   400,    66,    87,    88,    99,   100,   101,
!      402,    73,   403,   644,    96,    77,    -1,   604,   733,   606,
!      735,    -1,    84,   738,   407,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,   389,   390,   391,   752,    -1,    -1,
!       -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       -1,   766,    -1,     1,    -1,     3,     4,    -1,   773,    -1,
!      647,    -1,    -1,    -1,   651,   780,    -1,   782,    -1,    -1,
!      785,   415,   787,    88,   789,    -1,   297,    -1,    93,    94,
!       95,    -1,    -1,   304,    99,    -1,   673,    -1,   103,    -1,
!       -1,   312,   566,   314,   681,   569,   317,    -1,    46,    47,
!       88,    -1,    -1,    51,    -1,    93,    94,    95,    -1,    -1,
!       -1,    99,    60,    -1,    -1,   103,    -1,    -1,    66,    -1,
!       -1,    -1,    -1,    -1,   711,    73,    -1,   714,   566,    77,
!      604,   569,   606,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,   733,    95,   735,    97,
!       98,   738,    -1,    -1,    -1,    -1,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    -1,   752,   604,    -1,   606,    -1,
!       93,    94,    95,   647,    -1,    -1,    99,   651,    -1,   766,
!      103,    -1,    -1,    -1,    -1,    -1,   773,    -1,    -1,    -1,
!       -1,   144,    -1,   780,   415,   782,    -1,    -1,   785,   673,
!      787,    -1,   789,    -1,    -1,    -1,    -1,   681,    -1,   647,
!       -1,    -1,    -1,   651,    -1,    45,    -1,    -1,    -1,    -1,
!       -1,    51,   566,    -1,    -1,   569,    -1,    45,    -1,    -1,
!       60,    -1,    62,    51,    -1,   673,    -1,   711,    68,    -1,
!      714,    -1,    60,   681,    62,    -1,    -1,    -1,    -1,    -1,
!       68,   204,   205,    -1,    84,    -1,    -1,    87,    88,   733,
!      604,   735,   606,    -1,   738,    -1,    84,    97,    98,    87,
!       88,   101,    -1,   711,    -1,    -1,   714,    -1,   752,    97,
!       98,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   766,    -1,    -1,   733,    -1,   735,    -1,   773,
!      738,    -1,    -1,   647,    -1,    -1,   780,   651,   782,    -1,
!       -1,   785,    -1,   787,   752,   789,    -1,    -1,    -1,   272,
!       -1,    -1,   275,    -1,    -1,    -1,    -1,    -1,   766,   673,
!      283,   284,    -1,    -1,    -1,   773,    -1,   681,    -1,    -1,
!       -1,    -1,   780,    -1,   782,   566,    -1,   785,   569,   787,
!       -1,   789,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,   711,    -1,    -1,
!      714,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   194,
!      195,   196,   197,   604,    -1,   606,    -1,   202,   203,   733,
!       -1,   735,    -1,    -1,   738,    -1,    -1,    -1,    -1,    -1,
!       -1,   194,   195,   196,   197,    -1,    -1,    -1,   752,   202,
!      203,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
!       -1,   374,   766,    -1,    -1,   378,   647,    -1,   381,   773,
!      651,    45,    -1,    -1,    -1,    -1,   780,    51,   782,    -1,
!       -1,   785,    -1,   787,    -1,   789,    60,    -1,    62,    -1,
!       -1,   404,   673,    -1,    68,    -1,    -1,    -1,    -1,    -1,
!      681,    46,    47,    -1,    -1,    -1,    51,   420,    -1,    -1,
!       84,    -1,    -1,    87,    88,    60,    -1,   430,    -1,   432,
!       -1,    66,    -1,    -1,    98,    -1,    -1,   101,    73,    -1,
!      711,    -1,    77,   714,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,   464,   733,   466,   735,    -1,   101,   738,    -1,   104,
!      105,   106,   107,    -1,    -1,   110,   111,   480,    -1,    -1,
!       -1,   752,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   496,    -1,   766,    -1,    -1,    -1,    -1,
!       -1,    -1,   773,    -1,    -1,    -1,    -1,    -1,    -1,   780,
!       -1,   782,    -1,    -1,   785,    -1,   787,    -1,   789,   384,
!      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
!      395,     1,   397,   398,   399,   400,   401,   402,   403,    -1,
!       -1,   384,   385,   386,   387,   388,   389,   390,   391,   392,
!      393,   394,   395,    -1,   397,   398,   399,   400,   401,   402,
!      403,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    51,
!       -1,    -1,    -1,    -1,    -1,    45,    46,    47,    60,    -1,
!       62,    51,    -1,    -1,    -1,    -1,    68,    -1,    -1,   592,
!       60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
!       -1,    -1,    84,    73,    -1,    87,    88,    77,    -1,     1,
!       -1,    -1,    -1,    -1,    84,    -1,    98,    87,    88,   101,
!       -1,    -1,    -1,   488,    -1,    95,    -1,    -1,   493,    -1,
!      633,   101,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    -1,    -1,    -1,   488,    -1,    -1,    -1,    -1,
!      493,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
!       52,    -1,    -1,    55,    -1,    -1,   669,    59,    60,    -1,
!       -1,    63,   675,    -1,    66,    67,    68,    69,    -1,    71,
!       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    -1,
!       -1,    -1,    -1,    95,    -1,    97,    98,    -1,    -1,   101,
!       -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   751,    -1,
!       -1,    -1,   755,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,   626,   627,    -1,    -1,    -1,    -1,    45,    46,    47,
!       48,    49,    50,    51,    52,    -1,    -1,    55,    -1,   644,
!       -1,    59,    60,   626,   627,    63,    -1,    -1,    66,    67,
!       68,    69,     1,    71,    72,    73,    74,    -1,    -1,    77,
!       78,   644,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    97,
!       98,    -1,    -1,   101,    -1,    -1,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    -1,    -1,    45,    46,    47,    48,
!       49,    50,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,
        59,    60,    -1,    -1,    63,    -1,    -1,    66,    67,    68,
        69,     1,    71,    72,    73,    74,    -1,    -1,    77,    78,
        -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
        -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    97,    98,
        -1,    -1,   101,    -1,    -1,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    -1,    -1,    45,    46,    47,    -1,    49,
        50,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,
!       60,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,    69,
!        1,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
        -1,    -1,    -1,    -1,    -1,    95,    -1,    97,    98,    -1,
!       -1,   101,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    -1,    -1,    45,    46,    47,    -1,    49,    50,
        51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,
!       -1,    -1,    -1,    -1,    -1,    66,    67,     1,    69,    -1,
        71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
        -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       -1,    -1,    -1,    -1,    95,    -1,    97,    -1,    -1,    -1,
       101,    -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    45,    46,    47,    -1,    49,    50,    51,    52,    -1,
!       -1,    55,    -1,    -1,    -1,    59,    60,    -1,    -1,    -1,
!       -1,    -1,    66,    67,    -1,    69,    -1,    71,    72,    73,
!       74,    -1,    -1,    77,    78,     1,    -1,     3,     4,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
!       -1,    95,    -1,    97,    -1,    -1,    -1,   101,    -1,    -1,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,
!        4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
!       66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
!       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    97,    46,    47,    -1,    -1,    -1,    51,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,
!       -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    46,    47,
!       -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,
!       -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
!       -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,
!       -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    90,    91,    92,    -1,    -1,    95,    -1,    -1,
!       46,    47,    -1,    -1,    -1,    51,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,
!       66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,
!       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,
!       -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
!       60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
!       -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,
!       -1,   101,    -1,    51,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,
!       -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,
!       -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
!       -1,    -1,   100,    -1,    -1,    -1,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,
!       -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,
!       -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
!       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    96,    -1,    46,    47,    -1,    -1,
!       -1,    51,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,
         4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
        -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    96,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,
        -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,
        -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
        -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
        84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
        -1,    95,    96,    -1,    46,    47,    -1,    -1,    -1,    51,
       104,   105,   106,   107,    -1,    -1,   110,   111,    60,    -1,
!       -1,    -1,    -1,    -1,    66,     1,    -1,     3,     4,    -1,
        -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
        -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
        92,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,
         4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
        66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
        -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
        -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    -1,    46,    47,    -1,   101,    -1,    51,   104,   105,
       106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,
!       -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,
        -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
        84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       104,   105,   106,   107,    -1,    -1,   110,   111,    46,    47,
!       -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,
        -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
        -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,
        -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
        46,    47,    -1,    -1,    -1,    51,   104,   105,   106,   107,
        -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,
+       66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,
+       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
+       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
+      106,   107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,
+       -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
+       60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
+       -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
+       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
+       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,
+       -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,
+      110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,
+       -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,
+       -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
+       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,
+       -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,
+       -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,
+       -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
+       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
+       92,    -1,    -1,    95,    -1,    -1,    46,    47,    -1,    -1,
+       -1,    51,   104,   105,   106,   107,    -1,    -1,   110,   111,
+       60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,
+        4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
+       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
+       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
+      110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,
+       -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,
+       -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
+       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
+       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
+       -1,    95,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,
+      104,   105,   106,   107,    -1,    -1,   110,   111,    60,    -1,
+       -1,    -1,    -1,    -1,    66,     1,    -1,     3,     4,    -1,
+       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
+       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
+       92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
+       46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,
+        4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
        66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
        -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,
!       -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    46,    47,
!       -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,
!       -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
!       -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,
!       -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
!       46,    47,    -1,    -1,    -1,    51,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,
!       66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,
!       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,
!       -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
!       60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
!       -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,
!       -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,
!       -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,
!       -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,
!       -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,
!       -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
!       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    46,    47,    -1,    -1,
!       -1,    51,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,
!        4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,
!       -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,
!       -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    60,    -1,
!       -1,    -1,    -1,    -1,    66,     1,    -1,     3,     4,    -1,
!       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,
!        4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
!       66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
!       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,
!       -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    46,    47,
!       -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,
!       -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
!       -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,
!       -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
!       46,    47,    -1,    -1,    -1,    51,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,
!       66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,
!       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,
!       -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
!       60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
!       -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,
!       -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,
!       -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,
!       -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,
!       -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,
!       -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
!       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    46,    47,    -1,    -1,
!       -1,    51,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,
!        4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,
!       -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,
!       -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    60,    -1,
!       -1,    -1,    -1,    -1,    66,     1,    -1,     3,     4,    -1,
!       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       46,    47,    -1,    -1,    -1,    51,    -1,     1,    -1,     3,
!        4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
!       66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
!       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,
!       -1,    -1,    66,     1,    -1,     3,     4,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    46,    47,
!       -1,    -1,    -1,    51,    -1,     1,    -1,     3,     4,    -1,
!       -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
!       -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,
!       -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
!       46,    47,    -1,    -1,    -1,    51,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,
!       66,     1,    -1,     3,     4,    -1,    -1,    73,    -1,    -1,
!       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,
!       -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
!      106,   107,    -1,    -1,   110,   111,    46,    47,    -1,    -1,
!       -1,    51,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
!       60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
!       -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,
!       -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,     1,
!       -1,     3,     4,    -1,    -1,    73,    -1,    -1,    -1,    77,
!       -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,   107,
!       -1,    -1,   110,   111,    46,    47,    -1,    -1,    -1,    51,
!       -1,     1,    -1,     3,     4,    -1,    -1,    -1,    60,    -1,
!       -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
!       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    46,    47,    -1,    -1,
!       -1,    51,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       60,    -1,    -1,    -1,    -1,    -1,    66,     1,    -1,     3,
!        4,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    46,    47,    -1,    -1,    -1,    51,    -1,     1,
!       -1,     3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,
!       -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
!       84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,
!       -1,    95,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    60,    -1,
!       -1,     1,    -1,     3,    66,    -1,    -1,    -1,    -1,    -1,
!       -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
!       -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   104,   105,   106,   107,    46,    47,   110,   111,
!       -1,    51,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,
!       60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
!       -1,    -1,    -1,    73,    -1,    -1,    -1,    77,     1,    -1,
!       -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,
!       -1,    91,    92,    -1,    -1,    95,    -1,    -1,    46,    47,
!       -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,    -1,
!      110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
!       -1,    -1,    -1,    46,    47,    73,    -1,    -1,    51,    77,
!       -1,    -1,     3,     4,    -1,    -1,    84,    60,    -1,    87,
!       88,    -1,    -1,    66,    -1,    -1,    -1,    95,    96,    -1,
!       73,    -1,    -1,    -1,    77,    -1,   104,   105,   106,   107,
!       -1,    84,   110,   111,    87,    88,    -1,    -1,    -1,    -1,
!       -1,    -1,    95,    -1,    -1,    46,    47,    -1,    -1,    -1,
!       51,   104,   105,   106,   107,    -1,    -1,   110,   111,    60,
!       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,     3,     4,
!       -1,    -1,    73,    -1,    -1,    -1,    77,    -1,    -1,    -1,
!       -1,    -1,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,    97,    98,    -1,    -1,
!       -1,   102,    -1,   104,   105,   106,   107,    -1,    -1,   110,
!      111,    46,    47,    -1,    -1,    -1,    51,    -1,    -1,    -1,
!        3,     4,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
!       -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    96,    -1,    46,    47,    -1,    -1,    -1,    51,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    60,    -1,    -1,
!       -1,    -1,    -1,    66,    -1,    -1,     3,     4,    -1,    -1,
!       73,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
!       -1,    84,    -1,    -1,    87,    88,    -1,    -1,    91,    92,
!       -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,   104,   105,   106,   107,    -1,    -1,   110,   111,    46,
!       47,    -1,    -1,    -1,    51,    -1,    -1,    -1,     3,     4,
!       -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
!       -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    91,    92,    -1,    -1,    95,    96,
!       -1,    46,    47,    -1,    -1,    -1,    51,   104,   105,   106,
!      107,    -1,    -1,   110,   111,    60,    -1,    -1,    -1,    -1,
!       -1,    66,    -1,    -1,     3,     4,    -1,    -1,    73,    -1,
!       -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
!       -1,    -1,    87,    88,    -1,    -1,    91,    92,    -1,    -1,
!       95,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
!      105,   106,   107,    -1,    -1,   110,   111,    46,    47,    -1,
!       -1,    -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,
!       -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    77,    -1,
!       -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    45,    46,
!       47,    -1,    -1,    -1,    51,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    60,    -1,    -1,    -1,    -1,    -1,    66,
!       -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    51,
!       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    60,    -1,
!       87,    88,    -1,    -1,    66,    -1,    -1,    -1,    95,    -1,
!       -1,    73,    -1,    -1,    -1,    77,    -1,   104,   105,   106,
!      107,    -1,    84,   110,   111,    87,    88,    -1,    -1,    91,
!       92,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   104,   105,   106,   107,    -1,    -1,   110,   111
  };
  
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
*************** static const unsigned short int yystos[]
*** 2809,2884 ****
       118,   119,    53,   139,     1,   172,   175,     1,   138,     1,
       101,    51,    60,    84,    87,    98,   115,   116,   117,   118,
       121,   122,   134,   135,   145,   152,   170,   177,   178,   179,
!      180,     1,   120,   176,     1,     1,   120,   140,   137,   176,
!      174,   139,     1,   125,   153,     1,   125,   146,   147,   148,
!      153,    99,   247,   247,     1,    60,   115,     1,   101,    98,
!      178,   102,    97,   141,   176,   136,    95,    54,    99,   157,
!        1,   101,   102,    94,    99,   100,   157,   100,    99,     1,
!      153,     1,   146,   153,     1,   120,    97,    98,   123,   134,
!      135,   142,   143,   144,   145,   150,   152,   160,   161,   162,
!      164,   165,   170,   183,   184,   193,   141,     1,    96,   115,
!      134,   154,   155,   156,     1,   119,   158,     1,   100,     1,
!      125,   147,     1,     3,     4,    46,    47,    60,    66,    73,
!       77,    91,    92,    95,    97,   104,   105,   106,   107,   110,
!      111,   114,   116,   121,   122,   149,   181,   234,   235,   236,
!      237,   238,   241,   243,   244,   248,   249,   250,   251,   252,
!      253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
!      263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
!      273,   275,     1,   100,     1,     1,   100,   157,   101,   157,
!       95,   165,    98,   143,     1,   151,   183,   163,   157,     1,
!       49,    50,    52,    55,    59,    66,    67,    69,    71,    72,
!       74,    77,    78,    95,    98,   115,   116,   121,   122,   125,
!      134,   135,   156,   169,   183,   185,   186,   187,   188,   189,
!      190,   192,   193,   194,   195,   197,   198,   199,   200,   202,
!      204,   210,   211,   213,   214,   215,   217,   218,   222,   223,
!      224,   225,   226,   227,   228,   229,   237,   249,   251,   252,
!      253,   256,   257,   272,     1,   148,    96,   102,   115,   102,
!        1,   122,   248,   250,   255,     1,   254,     1,   255,     1,
!      255,   103,     1,   103,     1,   116,   118,   119,     1,   255,
!        1,   255,     1,   116,   122,   275,    98,   102,   149,   182,
!      103,   103,    95,    99,   103,     1,   103,    99,     1,   125,
!       99,    46,    47,     5,     6,     7,     3,     4,     8,     9,
!       10,    18,    19,    20,    21,    58,    16,    17,    11,    12,
!       13,    14,    15,    89,    93,    94,   274,    96,   154,   157,
!      101,   159,   183,   166,   184,    97,    98,   101,     1,    95,
!        1,   275,     1,   101,   125,     1,   101,   275,     1,    95,
!        1,    95,     1,   183,     1,    95,     1,   101,   125,     1,
!      275,   275,   146,   103,     1,    90,   115,    95,   185,   187,
!      101,   122,   134,   190,   101,   203,   190,   190,   122,   189,
!      198,   219,   221,   101,     1,    95,     1,   155,     1,   148,
!        1,   119,     1,    68,     1,   125,    99,   100,   101,    99,
!      245,   246,   247,   245,   247,     1,    95,    96,    99,   247,
!      247,     1,    96,    98,    98,   102,     1,    68,    68,    96,
!      242,   275,     1,   275,     1,    68,    73,    77,    73,   125,
!        1,   275,     1,    95,     1,   275,     1,   255,     1,   255,
!        1,   255,     1,   260,     1,   260,     1,   261,     1,   261,
!        1,   261,     1,   262,     1,   262,     1,   262,     1,   262,
!        1,   116,   117,     1,   263,     1,   263,     1,   264,     1,
!      265,     1,   266,     1,   267,     1,   268,     1,    90,   275,
!        1,   271,    96,   122,   167,   168,   169,   185,   186,     1,
!      275,     1,   101,     1,   101,     1,   101,     1,   275,     1,
!      275,    61,    65,   230,   231,   232,   233,     1,     1,   101,
!        1,    90,   101,    96,    66,   146,     1,    96,   242,    97,
!      205,    67,     1,   102,     1,   101,   275,     1,   275,    96,
!      103,    95,     1,   275,   246,   247,   181,   247,   181,     1,
!       96,   242,     1,   255,     1,    96,    96,   258,     1,    98,
!      149,    96,   102,     1,   100,    95,     1,   100,    96,   242,
!        1,   100,     1,    90,   103,   167,   186,    95,   167,     1,
!       96,     1,    96,    96,     1,    95,     1,   183,   231,   233,
!      183,   275,     1,    95,     1,     1,    96,    48,    63,    98,
!      206,   207,   208,   209,    95,     1,   198,     1,   220,   221,
!      101,    96,    96,    96,   242,     1,   100,   240,     1,    96,
!        1,   255,     1,   258,     1,   275,    96,   242,   141,    96,
!        1,   270,    66,   167,    96,   242,    49,   190,   191,   192,
!      194,   196,   201,   210,   212,   216,   218,     1,     1,   155,
!      101,     1,    96,   242,     1,     1,    90,     1,   275,   276,
!       98,   207,   208,    98,   186,   209,   275,    96,     1,   220,
!        1,   183,    96,   141,   239,    96,   141,    95,   101,    96,
!       95,    57,   191,   191,   101,    96,    96,     1,     1,    96,
!        1,    90,    98,    96,   190,    96,   141,    96,   242,   101,
!      275,   190,   101,   275,     1,   101,   190,   101,    96,    96,
!      220,   101,   101,   191,    96,   220,    57,   191,    96,   191,
!      191
  };
  
  #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
--- 2818,2893 ----
       118,   119,    53,   139,     1,   172,   175,     1,   138,     1,
       101,    51,    60,    84,    87,    98,   115,   116,   117,   118,
       121,   122,   134,   135,   145,   152,   170,   177,   178,   179,
!      180,   193,     1,   120,   176,     1,     1,   120,   140,   137,
!      176,   174,   139,     1,   125,   153,     1,   125,   146,   147,
!      148,   153,    99,   247,   247,     1,    60,   115,     1,   101,
!       98,   178,   102,    97,   141,   176,   136,    95,    54,    99,
!      157,     1,   101,   102,    94,    99,   100,   157,   100,    99,
!        1,   153,     1,   146,   153,     1,   120,    97,    98,   123,
!      134,   135,   142,   143,   144,   145,   150,   152,   160,   161,
!      162,   164,   165,   170,   183,   184,   193,   141,     1,    96,
!      115,   134,   154,   155,   156,     1,   119,   158,     1,   100,
!        1,   125,   147,     1,     3,     4,    46,    47,    60,    66,
!       73,    77,    91,    92,    95,    97,   104,   105,   106,   107,
!      110,   111,   114,   116,   121,   122,   149,   181,   234,   235,
!      236,   237,   238,   241,   243,   244,   248,   249,   250,   251,
!      252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
!      262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
!      272,   273,   275,     1,   100,     1,     1,   100,   157,   101,
!      157,    95,   165,    98,   143,     1,   151,   183,   163,   157,
!        1,    49,    50,    52,    55,    59,    66,    67,    69,    71,
!       72,    74,    77,    78,    95,    98,   115,   116,   121,   122,
!      125,   134,   135,   156,   169,   183,   185,   186,   187,   188,
!      189,   190,   192,   193,   194,   195,   197,   198,   199,   200,
!      202,   204,   210,   211,   213,   214,   215,   217,   218,   222,
!      223,   224,   225,   226,   227,   228,   229,   237,   249,   251,
!      252,   253,   256,   257,   272,     1,   148,    96,   102,   115,
!      102,     1,   122,   248,   250,   255,     1,   254,     1,   255,
!        1,   255,   103,     1,   103,     1,   116,   118,   119,     1,
!      255,     1,   255,     1,   116,   122,   275,    98,   102,   149,
!      182,   103,   103,    95,    99,   103,     1,   103,    99,     1,
!      125,    99,    46,    47,     5,     6,     7,     3,     4,     8,
!        9,    10,    18,    19,    20,    21,    58,    16,    17,    11,
!       12,    13,    14,    15,    89,    93,    94,   274,    96,   154,
!      157,   101,   159,   183,   166,   184,    97,    98,   101,     1,
!       95,     1,   275,     1,   101,   125,     1,   101,   275,     1,
!       95,     1,    95,     1,   183,     1,    95,     1,   101,   125,
!        1,   275,   275,   146,   103,     1,    90,   115,    95,   185,
!      187,   101,   122,   134,   190,   101,   203,   190,   190,   122,
!      189,   198,   219,   221,   101,     1,    95,     1,   155,     1,
!      148,     1,   119,     1,    68,     1,   125,    99,   100,   101,
!       99,   245,   246,   247,   245,   247,     1,    95,    96,    99,
!      247,   247,     1,    96,    98,    98,   102,     1,    68,    68,
!       96,   242,   275,     1,   275,     1,    68,    73,    77,    73,
!      125,     1,   275,     1,    95,     1,   275,     1,   255,     1,
!      255,     1,   255,     1,   260,     1,   260,     1,   261,     1,
!      261,     1,   261,     1,   262,     1,   262,     1,   262,     1,
!      262,     1,   116,   117,     1,   263,     1,   263,     1,   264,
!        1,   265,     1,   266,     1,   267,     1,   268,     1,    90,
!      275,     1,   271,    96,   122,   167,   168,   169,   185,   186,
!        1,   275,     1,   101,     1,   101,     1,   101,     1,   275,
!        1,   275,    61,    65,   230,   231,   232,   233,     1,     1,
!      101,     1,    90,   101,    96,    66,   146,     1,    96,   242,
!       97,   205,    67,     1,   102,     1,   101,   275,     1,   275,
!       96,   103,    95,     1,   275,   246,   247,   181,   247,   181,
!        1,    96,   242,     1,   255,     1,    96,    96,   258,     1,
!       98,   149,    96,   102,     1,   100,    95,     1,   100,    96,
!      242,     1,   100,     1,    90,   103,   167,   186,    95,   167,
!        1,    96,     1,    96,    96,     1,    95,     1,   183,   231,
!      233,   183,   275,     1,    95,     1,     1,    96,    48,    63,
!       98,   206,   207,   208,   209,    95,     1,   198,     1,   220,
!      221,   101,    96,    96,    96,   242,     1,   100,   240,     1,
!       96,     1,   255,     1,   258,     1,   275,    96,   242,   141,
!       96,     1,   270,    66,   167,    96,   242,    49,   190,   191,
!      192,   194,   196,   201,   210,   212,   216,   218,     1,     1,
!      155,   101,     1,    96,   242,     1,     1,    90,     1,   275,
!      276,    98,   207,   208,    98,   186,   209,   275,    96,     1,
!      220,     1,   183,    96,   141,   239,    96,   141,    95,   101,
!       96,    95,    57,   191,   191,   101,    96,    96,     1,     1,
!       96,     1,    90,    98,    96,   190,    96,   141,    96,   242,
!      101,   275,   190,   101,   275,     1,   101,   190,   101,    96,
!       96,   220,   101,   101,   191,    96,   220,    57,   191,    96,
!      191,   191
  };
  
  #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
*************** yyreduce:
*** 3519,3530 ****
    switch (yyn)
      {
          case 2:
! #line 628 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {;}
      break;
  
    case 19:
! #line 672 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  int osb = pop_current_osb (ctxp);
  		  tree t = build_java_array_type (((yyvsp[-1].node)), -1);
--- 3528,3539 ----
    switch (yyn)
      {
          case 2:
! #line 625 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {;}
      break;
  
    case 19:
! #line 669 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  int osb = pop_current_osb (ctxp);
  		  tree t = build_java_array_type (((yyvsp[-1].node)), -1);
*************** yyreduce:
*** 3535,3541 ****
      break;
  
    case 20:
! #line 680 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  int osb = pop_current_osb (ctxp);
  		  tree t = (yyvsp[-1].node);
--- 3544,3550 ----
      break;
  
    case 20:
! #line 677 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  int osb = pop_current_osb (ctxp);
  		  tree t = (yyvsp[-1].node);
*************** yyreduce:
*** 3546,3593 ****
      break;
  
    case 24:
! #line 701 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = make_qualified_name ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;}
      break;
  
    case 26:
! #line 710 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = NULL;;}
      break;
  
    case 34:
! #line 722 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = NULL;
  		;}
      break;
  
    case 35:
! #line 726 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = NULL;
  		;}
      break;
  
    case 38:
! #line 738 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->package = EXPR_WFL_NODE ((yyvsp[-1].node));
  		;}
      break;
  
    case 39:
! #line 742 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing name"); RECOVER;;}
      break;
  
    case 40:
! #line 744 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
    case 43:
! #line 754 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree name = EXPR_WFL_NODE ((yyvsp[-1].node)), last_name;
  		  int   i = IDENTIFIER_LENGTH (name)-1;
--- 3555,3602 ----
      break;
  
    case 24:
! #line 698 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = make_qualified_name ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;}
      break;
  
    case 26:
! #line 707 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = NULL;;}
      break;
  
    case 34:
! #line 719 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = NULL;
  		;}
      break;
  
    case 35:
! #line 723 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = NULL;
  		;}
      break;
  
    case 38:
! #line 735 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->package = EXPR_WFL_NODE ((yyvsp[-1].node));
  		;}
      break;
  
    case 39:
! #line 739 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing name"); RECOVER;;}
      break;
  
    case 40:
! #line 741 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
    case 43:
! #line 751 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree name = EXPR_WFL_NODE ((yyvsp[-1].node)), last_name;
  		  int   i = IDENTIFIER_LENGTH (name)-1;
*************** yyreduce:
*** 3616,3632 ****
      break;
  
    case 44:
! #line 780 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing name"); RECOVER;;}
      break;
  
    case 45:
! #line 782 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
    case 46:
! #line 787 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree name = EXPR_WFL_NODE ((yyvsp[-3].node));
  		  tree it;
--- 3625,3641 ----
      break;
  
    case 44:
! #line 777 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing name"); RECOVER;;}
      break;
  
    case 45:
! #line 779 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
    case 46:
! #line 784 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree name = EXPR_WFL_NODE ((yyvsp[-3].node));
  		  tree it;
*************** yyreduce:
*** 3647,3673 ****
      break;
  
    case 47:
! #line 805 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'*' expected"); RECOVER;;}
      break;
  
    case 48:
! #line 807 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
    case 49:
! #line 812 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { end_class_declaration (0); ;}
      break;
  
    case 50:
! #line 814 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { end_class_declaration (0); ;}
      break;
  
    case 52:
! #line 817 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  YYERROR_NOW;
  		  yyerror ("Class or interface declaration expected");
--- 3656,3682 ----
      break;
  
    case 47:
! #line 802 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'*' expected"); RECOVER;;}
      break;
  
    case 48:
! #line 804 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
    case 49:
! #line 809 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { end_class_declaration (0); ;}
      break;
  
    case 50:
! #line 811 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { end_class_declaration (0); ;}
      break;
  
    case 52:
! #line 814 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  YYERROR_NOW;
  		  yyerror ("Class or interface declaration expected");
*************** yyreduce:
*** 3675,3688 ****
      break;
  
    case 53:
! #line 828 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.value) = (1 << (yyvsp[0].value));
  		;}
      break;
  
    case 54:
! #line 832 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  int acc = (1 << (yyvsp[0].value));
  		  if ((yyval.value) & acc)
--- 3684,3697 ----
      break;
  
    case 53:
! #line 825 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.value) = (1 << (yyvsp[0].value));
  		;}
      break;
  
    case 54:
! #line 829 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  int acc = (1 << (yyvsp[0].value));
  		  if ((yyval.value) & acc)
*************** yyreduce:
*** 3697,3733 ****
      break;
  
    case 55:
! #line 848 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { create_class ((yyvsp[-4].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 56:
! #line 850 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {;;}
      break;
  
    case 57:
! #line 852 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { create_class (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 58:
! #line 854 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {;;}
      break;
  
    case 59:
! #line 856 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { yyerror ("Missing class name"); RECOVER; ;}
      break;
  
    case 60:
! #line 858 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { yyerror ("Missing class name"); RECOVER; ;}
      break;
  
    case 61:
! #line 860 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  if (!ctxp->class_err) yyerror ("'{' expected");
  		  DRECOVER(class1);
--- 3706,3742 ----
      break;
  
    case 55:
! #line 845 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { create_class ((yyvsp[-4].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 56:
! #line 847 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {;;}
      break;
  
    case 57:
! #line 849 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { create_class (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 58:
! #line 851 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {;;}
      break;
  
    case 59:
! #line 853 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { yyerror ("Missing class name"); RECOVER; ;}
      break;
  
    case 60:
! #line 855 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { yyerror ("Missing class name"); RECOVER; ;}
      break;
  
    case 61:
! #line 857 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  if (!ctxp->class_err) yyerror ("'{' expected");
  		  DRECOVER(class1);
*************** yyreduce:
*** 3735,3776 ****
      break;
  
    case 62:
! #line 865 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER; ;}
      break;
  
    case 63:
! #line 869 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = NULL; ;}
      break;
  
    case 64:
! #line 871 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 65:
! #line 873 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'{' expected"); ctxp->class_err=1;;}
      break;
  
    case 66:
! #line 875 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing super class name"); ctxp->class_err=1;;}
      break;
  
    case 67:
! #line 879 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 68:
! #line 881 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 69:
! #line 883 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->class_err=1;
  		  yyerror ("Missing interface name");
--- 3744,3785 ----
      break;
  
    case 62:
! #line 862 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER; ;}
      break;
  
    case 63:
! #line 866 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = NULL; ;}
      break;
  
    case 64:
! #line 868 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 65:
! #line 870 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'{' expected"); ctxp->class_err=1;;}
      break;
  
    case 66:
! #line 872 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing super class name"); ctxp->class_err=1;;}
      break;
  
    case 67:
! #line 876 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 68:
! #line 878 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 69:
! #line 880 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->class_err=1;
  		  yyerror ("Missing interface name");
*************** yyreduce:
*** 3778,3784 ****
      break;
  
    case 70:
! #line 891 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->interface_number = 1;
  		  (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE);
--- 3787,3793 ----
      break;
  
    case 70:
! #line 888 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->interface_number = 1;
  		  (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE);
*************** yyreduce:
*** 3786,3792 ****
      break;
  
    case 71:
! #line 896 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->interface_number++;
  		  (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE));
--- 3795,3801 ----
      break;
  
    case 71:
! #line 893 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->interface_number++;
  		  (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE));
*************** yyreduce:
*** 3794,3825 ****
      break;
  
    case 72:
! #line 901 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing interface name"); RECOVER;;}
      break;
  
    case 73:
! #line 906 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
- 		  /* Store the location of the `}' when doing xrefs */
- 		  if (flag_emit_xref)
- 		    DECL_END_SOURCE_LINE (GET_CPC ()) = (yyvsp[0].operator).location;
  		  (yyval.node) = GET_CPC ();
  		;}
      break;
  
    case 74:
! #line 913 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
- 		  /* Store the location of the `}' when doing xrefs */
- 		  if (flag_emit_xref)
- 		    DECL_END_SOURCE_LINE (GET_CPC ()) = (yyvsp[0].operator).location;
  		  (yyval.node) = GET_CPC ();
  		;}
      break;
  
    case 80:
! #line 931 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  if (!IS_EMPTY_STMT ((yyvsp[0].node)))
  		    {
--- 3803,3828 ----
      break;
  
    case 72:
! #line 898 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing interface name"); RECOVER;;}
      break;
  
    case 73:
! #line 903 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = GET_CPC ();
  		;}
      break;
  
    case 74:
! #line 907 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = GET_CPC ();
  		;}
      break;
  
    case 80:
! #line 922 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  if (!IS_EMPTY_STMT ((yyvsp[0].node)))
  		    {
*************** yyreduce:
*** 3830,3851 ****
      break;
  
    case 83:
! #line 944 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { end_class_declaration (1); ;}
      break;
  
    case 84:
! #line 946 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { end_class_declaration (1); ;}
      break;
  
    case 86:
! #line 953 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { register_fields (0, (yyvsp[-2].node), (yyvsp[-1].node)); ;}
      break;
  
    case 87:
! #line 955 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  check_modifiers
  		    ("Illegal modifier %qs for field declaration",
--- 3833,3854 ----
      break;
  
    case 83:
! #line 935 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { end_class_declaration (1); ;}
      break;
  
    case 84:
! #line 937 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { end_class_declaration (1); ;}
      break;
  
    case 86:
! #line 944 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { register_fields (0, (yyvsp[-2].node), (yyvsp[-1].node)); ;}
      break;
  
    case 87:
! #line 946 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  check_modifiers
  		    ("Illegal modifier %qs for field declaration",
*************** yyreduce:
*** 3856,3877 ****
      break;
  
    case 89:
! #line 968 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
    case 90:
! #line 970 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 91:
! #line 975 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE); ;}
      break;
  
    case 92:
! #line 977 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  if (java_error_count)
  		    (yyvsp[0].node) = NULL_TREE;
--- 3859,3880 ----
      break;
  
    case 89:
! #line 959 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
    case 90:
! #line 961 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 91:
! #line 966 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE); ;}
      break;
  
    case 92:
! #line 968 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  if (java_error_count)
  		    (yyvsp[0].node) = NULL_TREE;
*************** yyreduce:
*** 3881,3887 ****
      break;
  
    case 93:
! #line 984 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Missing variable initializer");
  		  (yyval.node) = build_tree_list ((yyvsp[-2].node), NULL_TREE);
--- 3884,3890 ----
      break;
  
    case 93:
! #line 975 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Missing variable initializer");
  		  (yyval.node) = build_tree_list ((yyvsp[-2].node), NULL_TREE);
*************** yyreduce:
*** 3890,3896 ****
      break;
  
    case 94:
! #line 990 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("';' expected");
  		  (yyval.node) = build_tree_list ((yyvsp[-3].node), NULL_TREE);
--- 3893,3899 ----
      break;
  
    case 94:
! #line 981 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("';' expected");
  		  (yyval.node) = build_tree_list ((yyvsp[-3].node), NULL_TREE);
*************** yyreduce:
*** 3899,3915 ****
      break;
  
    case 96:
! #line 1000 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_unresolved_array_type ((yyvsp[-2].node)); ;}
      break;
  
    case 97:
! #line 1002 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Invalid declaration"); DRECOVER(vdi);;}
      break;
  
    case 98:
! #line 1004 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("']' expected");
  		  DRECOVER(vdi);
--- 3902,3918 ----
      break;
  
    case 96:
! #line 991 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_unresolved_array_type ((yyvsp[-2].node)); ;}
      break;
  
    case 97:
! #line 993 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Invalid declaration"); DRECOVER(vdi);;}
      break;
  
    case 98:
! #line 995 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("']' expected");
  		  DRECOVER(vdi);
*************** yyreduce:
*** 3917,3928 ****
      break;
  
    case 99:
! #line 1009 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Unbalanced ']'"); DRECOVER(vdi);;}
      break;
  
    case 102:
! #line 1020 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  current_function_decl = (yyvsp[0].node);
  		  if (current_function_decl
--- 3920,3931 ----
      break;
  
    case 99:
! #line 1000 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Unbalanced ']'"); DRECOVER(vdi);;}
      break;
  
    case 102:
! #line 1011 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  current_function_decl = (yyvsp[0].node);
  		  if (current_function_decl
*************** yyreduce:
*** 3934,4010 ****
      break;
  
    case 103:
! #line 1029 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { finish_method_declaration ((yyvsp[0].node)); ;}
      break;
  
    case 104:
! #line 1031 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;}
      break;
  
    case 105:
! #line 1036 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = method_header (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 106:
! #line 1038 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = method_header (0, void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 107:
! #line 1040 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = method_header ((yyvsp[-3].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 108:
! #line 1042 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = method_header ((yyvsp[-3].value), void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 109:
! #line 1044 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Invalid method declaration, method name required");
  		  RECOVER;
  		;}
      break;
  
    case 110:
! #line 1049 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Identifier expected");
  		  RECOVER;
  		;}
      break;
  
    case 111:
! #line 1054 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Identifier expected");
  		  RECOVER;
  		;}
      break;
  
    case 112:
! #line 1059 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Identifier expected");
  		  RECOVER;
  		;}
      break;
  
    case 113:
! #line 1064 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Invalid method declaration, return type required");
  		  RECOVER;
  		;}
      break;
  
    case 114:
! #line 1072 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number = 0;
  		  (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE);
--- 3937,4018 ----
      break;
  
    case 103:
! #line 1020 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { finish_method_declaration ((yyvsp[0].node)); ;}
      break;
  
    case 104:
! #line 1022 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;}
      break;
  
    case 105:
! #line 1027 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = method_header (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 106:
! #line 1029 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = method_header (0, void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 107:
! #line 1031 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = method_header ((yyvsp[-3].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 108:
! #line 1033 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = method_header ((yyvsp[-3].value), void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 109:
! #line 1035 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Invalid method declaration, method name required");
+ 		  (yyval.node) = NULL_TREE;
  		  RECOVER;
  		;}
      break;
  
    case 110:
! #line 1041 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Identifier expected");
+ 		  (yyval.node) = NULL_TREE;
  		  RECOVER;
  		;}
      break;
  
    case 111:
! #line 1047 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Identifier expected");
+ 		  (yyval.node) = NULL_TREE;
  		  RECOVER;
  		;}
      break;
  
    case 112:
! #line 1053 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Identifier expected");
+ 		  (yyval.node) = NULL_TREE;
  		  RECOVER;
  		;}
      break;
  
    case 113:
! #line 1059 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Invalid method declaration, return type required");
+ 		  (yyval.node) = NULL_TREE;
  		  RECOVER;
  		;}
      break;
  
    case 114:
! #line 1068 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number = 0;
  		  (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE);
*************** yyreduce:
*** 4012,4023 ****
      break;
  
    case 115:
! #line 1077 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
    case 116:
! #line 1079 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  SET_EXPR_LOCATION_FROM_TOKEN (wfl_operator, (yyvsp[-1].operator));
  		  TREE_PURPOSE ((yyvsp[-2].node)) =
--- 4020,4031 ----
      break;
  
    case 115:
! #line 1073 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
    case 116:
! #line 1075 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  SET_EXPR_LOCATION_FROM_TOKEN (wfl_operator, (yyvsp[-1].operator));
  		  TREE_PURPOSE ((yyvsp[-2].node)) =
*************** yyreduce:
*** 4029,4052 ****
      break;
  
    case 117:
! #line 1088 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("')' expected"); DRECOVER(method_declarator);;}
      break;
  
    case 118:
! #line 1090 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("']' expected"); RECOVER;;}
      break;
  
    case 119:
! #line 1095 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number = 1;
  		;}
      break;
  
    case 120:
! #line 1099 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number += 1;
  		  (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node));
--- 4037,4060 ----
      break;
  
    case 117:
! #line 1084 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("')' expected"); DRECOVER(method_declarator);;}
      break;
  
    case 118:
! #line 1086 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("']' expected"); RECOVER;;}
      break;
  
    case 119:
! #line 1091 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number = 1;
  		;}
      break;
  
    case 120:
! #line 1095 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number += 1;
  		  (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node));
*************** yyreduce:
*** 4054,4072 ****
      break;
  
    case 121:
! #line 1104 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { yyerror ("Missing formal parameter term"); RECOVER; ;}
      break;
  
    case 122:
! #line 1109 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node));
  		;}
      break;
  
    case 123:
! #line 1113 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node));
  		  ARG_FINAL_P ((yyval.node)) = 1;
--- 4062,4080 ----
      break;
  
    case 121:
! #line 1100 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { yyerror ("Missing formal parameter term"); RECOVER; ;}
      break;
  
    case 122:
! #line 1105 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node));
  		;}
      break;
  
    case 123:
! #line 1109 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node));
  		  ARG_FINAL_P ((yyval.node)) = 1;
*************** yyreduce:
*** 4074,4080 ****
      break;
  
    case 124:
! #line 1118 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Missing identifier"); RECOVER;
  		  (yyval.node) = NULL_TREE;
--- 4082,4088 ----
      break;
  
    case 124:
! #line 1114 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Missing identifier"); RECOVER;
  		  (yyval.node) = NULL_TREE;
*************** yyreduce:
*** 4082,4088 ****
      break;
  
    case 125:
! #line 1123 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Missing identifier"); RECOVER;
  		  (yyval.node) = NULL_TREE;
--- 4090,4096 ----
      break;
  
    case 125:
! #line 1119 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Missing identifier"); RECOVER;
  		  (yyval.node) = NULL_TREE;
*************** yyreduce:
*** 4090,4096 ****
      break;
  
    case 126:
! #line 1131 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  check_modifiers ("Illegal modifier %qs. Only %<final%> was expected here",
  				   (yyvsp[0].value), ACC_FINAL);
--- 4098,4104 ----
      break;
  
    case 126:
! #line 1127 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  check_modifiers ("Illegal modifier %qs. Only %<final%> was expected here",
  				   (yyvsp[0].value), ACC_FINAL);
*************** yyreduce:
*** 4100,4141 ****
      break;
  
    case 127:
! #line 1140 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 128:
! #line 1142 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 129:
! #line 1144 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing class type term"); RECOVER;;}
      break;
  
    case 130:
! #line 1149 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[0].node)); ;}
      break;
  
    case 131:
! #line 1151 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = tree_cons ((yyvsp[0].node), (yyvsp[0].node), (yyvsp[-2].node)); ;}
      break;
  
    case 132:
! #line 1153 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing class type term"); RECOVER;;}
      break;
  
    case 134:
! #line 1158 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 135:
! #line 1164 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  TREE_CHAIN ((yyvsp[0].node)) = CPC_STATIC_INITIALIZER_STMT (ctxp);
  		  SET_CPC_STATIC_INITIALIZER_STMT (ctxp, (yyvsp[0].node));
--- 4108,4149 ----
      break;
  
    case 127:
! #line 1136 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 128:
! #line 1138 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 129:
! #line 1140 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing class type term"); RECOVER;;}
      break;
  
    case 130:
! #line 1145 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[0].node)); ;}
      break;
  
    case 131:
! #line 1147 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = tree_cons ((yyvsp[0].node), (yyvsp[0].node), (yyvsp[-2].node)); ;}
      break;
  
    case 132:
! #line 1149 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing class type term"); RECOVER;;}
      break;
  
    case 134:
! #line 1154 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 135:
! #line 1160 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  TREE_CHAIN ((yyvsp[0].node)) = CPC_STATIC_INITIALIZER_STMT (ctxp);
  		  SET_CPC_STATIC_INITIALIZER_STMT (ctxp, (yyvsp[0].node));
*************** yyreduce:
*** 4144,4150 ****
      break;
  
    case 136:
! #line 1173 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  check_modifiers ("Illegal modifier %qs for static initializer", (yyvsp[0].value), ACC_STATIC);
  		  /* Can't have a static initializer in an innerclass */
--- 4152,4158 ----
      break;
  
    case 136:
! #line 1169 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  check_modifiers ("Illegal modifier %qs for static initializer", (yyvsp[0].value), ACC_STATIC);
  		  /* Can't have a static initializer in an innerclass */
*************** yyreduce:
*** 4159,4165 ****
      break;
  
    case 137:
! #line 1189 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  current_function_decl = (yyvsp[0].node);
  		  source_start_java_method (current_function_decl);
--- 4167,4173 ----
      break;
  
    case 137:
! #line 1185 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  current_function_decl = (yyvsp[0].node);
  		  source_start_java_method (current_function_decl);
*************** yyreduce:
*** 4167,4188 ****
      break;
  
    case 138:
! #line 1194 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { finish_method_declaration ((yyvsp[0].node)); ;}
      break;
  
    case 139:
! #line 1199 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = method_header (0, NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 140:
! #line 1201 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = method_header ((yyvsp[-2].value), NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 141:
! #line 1206 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number = 0;
  		  (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE);
--- 4175,4196 ----
      break;
  
    case 138:
! #line 1190 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { finish_method_declaration ((yyvsp[0].node)); ;}
      break;
  
    case 139:
! #line 1195 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = method_header (0, NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 140:
! #line 1197 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = method_header ((yyvsp[-2].value), NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 141:
! #line 1202 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number = 0;
  		  (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE);
*************** yyreduce:
*** 4190,4201 ****
      break;
  
    case 142:
! #line 1211 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
    case 143:
! #line 1219 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  BLOCK_EXPR_BODY ((yyvsp[0].node)) = build_java_empty_stmt ();
  		  (yyval.node) = (yyvsp[0].node);
--- 4198,4209 ----
      break;
  
    case 142:
! #line 1207 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
    case 143:
! #line 1215 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  BLOCK_EXPR_BODY ((yyvsp[0].node)) = build_java_empty_stmt ();
  		  (yyval.node) = (yyvsp[0].node);
*************** yyreduce:
*** 4203,4224 ****
      break;
  
    case 144:
! #line 1224 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 145:
! #line 1226 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 146:
! #line 1228 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 148:
! #line 1238 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_method_invocation ((yyvsp[-3].node), NULL_TREE);
  		  (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-3].node)), (yyval.node));
--- 4211,4232 ----
      break;
  
    case 144:
! #line 1220 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 145:
! #line 1222 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 146:
! #line 1224 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
    case 148:
! #line 1234 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_method_invocation ((yyvsp[-3].node), NULL_TREE);
  		  (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-3].node)), (yyval.node));
*************** yyreduce:
*** 4227,4233 ****
      break;
  
    case 149:
! #line 1244 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_method_invocation ((yyvsp[-4].node), (yyvsp[-2].node));
  		  (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyval.node));
--- 4235,4241 ----
      break;
  
    case 149:
! #line 1240 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_method_invocation ((yyvsp[-4].node), (yyvsp[-2].node));
  		  (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyval.node));
*************** yyreduce:
*** 4236,4252 ****
      break;
  
    case 150:
! #line 1252 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;}
      break;
  
    case 151:
! #line 1254 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;}
      break;
  
    case 152:
! #line 1259 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree wfl = build_wfl_node (this_identifier_node);
  		  SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator));
--- 4244,4260 ----
      break;
  
    case 150:
! #line 1248 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;}
      break;
  
    case 151:
! #line 1250 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;}
      break;
  
    case 152:
! #line 1255 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree wfl = build_wfl_node (this_identifier_node);
  		  SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator));
*************** yyreduce:
*** 4255,4261 ****
      break;
  
    case 153:
! #line 1265 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree wfl = build_wfl_node (super_identifier_node);
  		  SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator));
--- 4263,4269 ----
      break;
  
    case 153:
! #line 1261 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree wfl = build_wfl_node (super_identifier_node);
  		  SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator));
*************** yyreduce:
*** 4264,4320 ****
      break;
  
    case 154:
! #line 1276 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { create_interface (0, (yyvsp[0].node), NULL_TREE); ;}
      break;
  
    case 155:
! #line 1278 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { ; ;}
      break;
  
    case 156:
! #line 1280 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { create_interface ((yyvsp[-2].value), (yyvsp[0].node), NULL_TREE); ;}
      break;
  
    case 157:
! #line 1282 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { ; ;}
      break;
  
    case 158:
! #line 1284 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { create_interface (0, (yyvsp[-1].node), (yyvsp[0].node));	;}
      break;
  
    case 159:
! #line 1286 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { ; ;}
      break;
  
    case 160:
! #line 1288 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { create_interface ((yyvsp[-3].value), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 161:
! #line 1290 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { ; ;}
      break;
  
    case 162:
! #line 1292 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { yyerror ("'{' expected"); RECOVER; ;}
      break;
  
    case 163:
! #line 1294 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { yyerror ("'{' expected"); RECOVER; ;}
      break;
  
    case 164:
! #line 1299 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->interface_number = 1;
  		  (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE);
--- 4272,4328 ----
      break;
  
    case 154:
! #line 1272 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { create_interface (0, (yyvsp[0].node), NULL_TREE); ;}
      break;
  
    case 155:
! #line 1274 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { ; ;}
      break;
  
    case 156:
! #line 1276 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { create_interface ((yyvsp[-2].value), (yyvsp[0].node), NULL_TREE); ;}
      break;
  
    case 157:
! #line 1278 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { ; ;}
      break;
  
    case 158:
! #line 1280 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { create_interface (0, (yyvsp[-1].node), (yyvsp[0].node));	;}
      break;
  
    case 159:
! #line 1282 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { ; ;}
      break;
  
    case 160:
! #line 1284 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { create_interface ((yyvsp[-3].value), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
    case 161:
! #line 1286 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { ; ;}
      break;
  
    case 162:
! #line 1288 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { yyerror ("'{' expected"); RECOVER; ;}
      break;
  
    case 163:
! #line 1290 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { yyerror ("'{' expected"); RECOVER; ;}
      break;
  
    case 164:
! #line 1295 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->interface_number = 1;
  		  (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE);
*************** yyreduce:
*** 4322,4328 ****
      break;
  
    case 165:
! #line 1304 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->interface_number++;
  		  (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE));
--- 4330,4336 ----
      break;
  
    case 165:
! #line 1300 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->interface_number++;
  		  (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE));
*************** yyreduce:
*** 4330,4480 ****
      break;
  
    case 166:
! #line 1309 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Invalid interface type"); RECOVER;;}
      break;
  
    case 167:
! #line 1311 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 168:
! #line 1316 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 169:
! #line 1318 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 174:
! #line 1330 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { end_class_declaration (1); ;}
      break;
  
    case 175:
! #line 1332 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { end_class_declaration (1); ;}
      break;
  
!   case 177:
! #line 1341 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  check_abstract_method_header ((yyvsp[-1].node));
  		  current_function_decl = NULL_TREE; /* FIXME ? */
  		;}
      break;
  
!   case 178:
! #line 1346 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 179:
! #line 1352 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_new_array_init ((yyvsp[-1].operator).location, NULL_TREE); ;}
      break;
  
!   case 180:
! #line 1354 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, NULL_TREE); ;}
      break;
  
!   case 181:
! #line 1356 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;}
      break;
  
!   case 182:
! #line 1358 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_new_array_init ((yyvsp[-3].operator).location, (yyvsp[-2].node)); ;}
      break;
  
!   case 183:
! #line 1363 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)),
  				  (yyvsp[0].node), NULL_TREE);
  		;}
      break;
  
!   case 184:
! #line 1368 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)), (yyvsp[0].node), (yyvsp[-2].node));
  		;}
      break;
  
!   case 185:
! #line 1372 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 186:
! #line 1378 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
!   case 187:
! #line 1380 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
!   case 188:
! #line 1385 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { enter_block (); ;}
      break;
  
!   case 189:
! #line 1390 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  maybe_absorb_scoping_blocks ();
- 		  /* Store the location of the `}' when doing xrefs */
- 		  if (current_function_decl && flag_emit_xref)
- 		    DECL_END_SOURCE_LINE (current_function_decl) = (yyvsp[0].operator).location;
  		  (yyval.node) = exit_block ();
  		  if (!BLOCK_SUBBLOCKS ((yyval.node)))
  		    BLOCK_SUBBLOCKS ((yyval.node)) = build_java_empty_stmt ();
  		;}
      break;
  
!   case 193:
! #line 1409 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { java_method_add_stmt (current_function_decl, (yyvsp[0].node)); ;}
      break;
  
!   case 194:
! #line 1411 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  LOCAL_CLASS_P (TREE_TYPE (GET_CPC ())) = 1;
  		  end_class_declaration (1);
  		;}
      break;
  
!   case 196:
! #line 1423 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { declare_local_variables (0, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 197:
! #line 1425 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { declare_local_variables ((yyvsp[-2].value), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 203:
! #line 1435 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = exit_block (); ;}
      break;
  
!   case 208:
! #line 1444 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = exit_block (); ;}
      break;
  
!   case 221:
! #line 1464 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  if (flag_extraneous_semicolon
  		      && ! current_static_block
--- 4338,4485 ----
      break;
  
    case 166:
! #line 1305 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Invalid interface type"); RECOVER;;}
      break;
  
    case 167:
! #line 1307 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 168:
! #line 1312 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 169:
! #line 1314 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 174:
! #line 1326 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { end_class_declaration (1); ;}
      break;
  
    case 175:
! #line 1328 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { end_class_declaration (1); ;}
      break;
  
!   case 178:
! #line 1338 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  check_abstract_method_header ((yyvsp[-1].node));
  		  current_function_decl = NULL_TREE; /* FIXME ? */
  		;}
      break;
  
!   case 179:
! #line 1343 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 180:
! #line 1349 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_new_array_init ((yyvsp[-1].operator).location, NULL_TREE); ;}
      break;
  
!   case 181:
! #line 1351 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, NULL_TREE); ;}
      break;
  
!   case 182:
! #line 1353 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;}
      break;
  
!   case 183:
! #line 1355 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_new_array_init ((yyvsp[-3].operator).location, (yyvsp[-2].node)); ;}
      break;
  
!   case 184:
! #line 1360 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)),
  				  (yyvsp[0].node), NULL_TREE);
  		;}
      break;
  
!   case 185:
! #line 1365 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)), (yyvsp[0].node), (yyvsp[-2].node));
  		;}
      break;
  
!   case 186:
! #line 1369 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 187:
! #line 1375 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
!   case 188:
! #line 1377 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
!   case 189:
! #line 1382 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { enter_block (); ;}
      break;
  
!   case 190:
! #line 1387 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  maybe_absorb_scoping_blocks ();
  		  (yyval.node) = exit_block ();
  		  if (!BLOCK_SUBBLOCKS ((yyval.node)))
  		    BLOCK_SUBBLOCKS ((yyval.node)) = build_java_empty_stmt ();
  		;}
      break;
  
!   case 194:
! #line 1403 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { java_method_add_stmt (current_function_decl, (yyvsp[0].node)); ;}
      break;
  
!   case 195:
! #line 1405 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  LOCAL_CLASS_P (TREE_TYPE (GET_CPC ())) = 1;
  		  end_class_declaration (1);
  		;}
      break;
  
!   case 197:
! #line 1417 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { declare_local_variables (0, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 198:
! #line 1419 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { declare_local_variables ((yyvsp[-2].value), (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 204:
! #line 1429 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = exit_block (); ;}
      break;
  
!   case 209:
! #line 1438 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = exit_block (); ;}
      break;
  
!   case 222:
! #line 1458 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  if (flag_extraneous_semicolon
  		      && ! current_static_block
*************** yyreduce:
*** 4495,4502 ****
  		;}
      break;
  
!   case 222:
! #line 1486 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_labeled_block (EXPR_WFL_LINECOL ((yyvsp[-1].node)),
  					    EXPR_WFL_NODE ((yyvsp[-1].node)));
--- 4500,4507 ----
  		;}
      break;
  
!   case 223:
! #line 1480 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_labeled_block (EXPR_WFL_LINECOL ((yyvsp[-1].node)),
  					    EXPR_WFL_NODE ((yyvsp[-1].node)));
*************** yyreduce:
*** 4506,4528 ****
  		;}
      break;
  
!   case 223:
! #line 1497 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 224:
! #line 1499 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("':' expected"); RECOVER;;}
      break;
  
!   case 225:
! #line 1504 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 226:
! #line 1511 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  /* We have a statement. Generate a WFL around it so
  		     we can debug it */
--- 4511,4533 ----
  		;}
      break;
  
!   case 224:
! #line 1491 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 225:
! #line 1493 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("':' expected"); RECOVER;;}
      break;
  
!   case 226:
! #line 1498 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 227:
! #line 1505 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  /* We have a statement. Generate a WFL around it so
  		     we can debug it */
*************** yyreduce:
*** 4537,4659 ****
  		;}
      break;
  
!   case 227:
! #line 1524 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;}
      break;
  
!   case 228:
! #line 1529 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;}
      break;
  
!   case 229:
! #line 1534 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;}
      break;
  
!   case 230:
! #line 1539 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 231:
! #line 1541 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  parse_ctor_invocation_error ();
  		  RECOVER;
  		;}
      break;
  
!   case 232:
! #line 1546 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 233:
! #line 1548 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  parse_ctor_invocation_error ();
  		  RECOVER;
  		;}
      break;
  
!   case 234:
! #line 1553 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 235:
! #line 1555 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 236:
! #line 1557 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 237:
! #line 1559 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 238:
! #line 1561 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 246:
! #line 1576 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_if_else_statement ((yyvsp[-3].operator).location, (yyvsp[-2].node),
  						(yyvsp[0].node), NULL_TREE);
  		;}
      break;
  
!   case 247:
! #line 1581 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 248:
! #line 1583 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 249:
! #line 1585 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 250:
! #line 1590 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 251:
! #line 1595 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 252:
! #line 1600 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  enter_block ();
  		;}
      break;
  
!   case 253:
! #line 1604 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  /* Make into "proper list" of COMPOUND_EXPRs.
  		     I.e. make the last statement also have its own
--- 4542,4664 ----
  		;}
      break;
  
!   case 228:
! #line 1518 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;}
      break;
  
!   case 229:
! #line 1523 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;}
      break;
  
!   case 230:
! #line 1528 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;}
      break;
  
!   case 231:
! #line 1533 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 232:
! #line 1535 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  parse_ctor_invocation_error ();
  		  RECOVER;
  		;}
      break;
  
!   case 233:
! #line 1540 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 234:
! #line 1542 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  parse_ctor_invocation_error ();
  		  RECOVER;
  		;}
      break;
  
!   case 235:
! #line 1547 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 236:
! #line 1549 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 237:
! #line 1551 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 238:
! #line 1553 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 239:
! #line 1555 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 247:
! #line 1570 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_if_else_statement ((yyvsp[-3].operator).location, (yyvsp[-2].node),
  						(yyvsp[0].node), NULL_TREE);
  		;}
      break;
  
!   case 248:
! #line 1575 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 249:
! #line 1577 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 250:
! #line 1579 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 251:
! #line 1584 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 252:
! #line 1589 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 253:
! #line 1594 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  enter_block ();
  		;}
      break;
  
!   case 254:
! #line 1598 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  /* Make into "proper list" of COMPOUND_EXPRs.
  		     I.e. make the last statement also have its own
*************** yyreduce:
*** 4664,4671 ****
  		;}
      break;
  
!   case 254:
! #line 1616 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build3 (SWITCH_EXPR, NULL_TREE, (yyvsp[-1].node),
  			       NULL_TREE, NULL_TREE);
--- 4669,4676 ----
  		;}
      break;
  
!   case 255:
! #line 1610 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build3 (SWITCH_EXPR, NULL_TREE, (yyvsp[-1].node),
  			       NULL_TREE, NULL_TREE);
*************** yyreduce:
*** 4673,4715 ****
  		;}
      break;
  
-   case 255:
- #line 1622 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
-     {yyerror ("'(' expected"); RECOVER;;}
-     break;
- 
    case 256:
! #line 1624 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;}
      break;
  
    case 257:
! #line 1626 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     {yyerror ("'{' expected"); RECOVER;;}
      break;
  
    case 258:
! #line 1634 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 259:
! #line 1636 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 260:
! #line 1638 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 261:
! #line 1640 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
!   case 267:
! #line 1659 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree lab = build1 (CASE_EXPR, NULL_TREE, (yyvsp[-1].node));
  		  SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-2].operator));
--- 4678,4720 ----
  		;}
      break;
  
    case 256:
! #line 1616 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("'(' expected"); RECOVER;;}
      break;
  
    case 257:
! #line 1618 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;}
      break;
  
    case 258:
! #line 1620 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("'{' expected"); RECOVER;;}
      break;
  
    case 259:
! #line 1628 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 260:
! #line 1630 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
    case 261:
! #line 1632 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = NULL_TREE; ;}
      break;
  
!   case 262:
! #line 1634 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     { (yyval.node) = NULL_TREE; ;}
!     break;
! 
!   case 268:
! #line 1653 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree lab = build1 (CASE_EXPR, NULL_TREE, (yyvsp[-1].node));
  		  SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-2].operator));
*************** yyreduce:
*** 4717,4724 ****
  		;}
      break;
  
!   case 268:
! #line 1665 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree lab = make_node (DEFAULT_EXPR);
  		  SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-1].operator));
--- 4722,4729 ----
  		;}
      break;
  
!   case 269:
! #line 1659 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree lab = make_node (DEFAULT_EXPR);
  		  SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-1].operator));
*************** yyreduce:
*** 4726,4794 ****
  		;}
      break;
  
!   case 269:
! #line 1671 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing or invalid constant expression"); RECOVER;;}
      break;
  
!   case 270:
! #line 1673 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("':' expected"); RECOVER;;}
      break;
  
!   case 271:
! #line 1675 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("':' expected"); RECOVER;;}
      break;
  
!   case 272:
! #line 1680 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree body = build_loop_body ((yyvsp[-2].operator).location, (yyvsp[-1].node), 0);
  		  (yyval.node) = build_new_loop (body);
  		;}
      break;
  
!   case 273:
! #line 1688 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;}
      break;
  
!   case 274:
! #line 1690 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 275:
! #line 1692 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term and ')' expected"); RECOVER;;}
      break;
  
!   case 276:
! #line 1694 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 277:
! #line 1699 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;}
      break;
  
!   case 278:
! #line 1704 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree body = build_loop_body (0, NULL_TREE, 1);
  		  (yyval.node) = build_new_loop (body);
  		;}
      break;
  
!   case 279:
! #line 1713 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = finish_loop_body ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[-5].node), 1); ;}
      break;
  
!   case 280:
! #line 1718 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  if (CONSTANT_CLASS_P ((yyvsp[-4].node)))
  		    (yyvsp[-4].node) = build_wfl_node ((yyvsp[-4].node));
--- 4731,4799 ----
  		;}
      break;
  
!   case 270:
! #line 1665 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing or invalid constant expression"); RECOVER;;}
      break;
  
!   case 271:
! #line 1667 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("':' expected"); RECOVER;;}
      break;
  
!   case 272:
! #line 1669 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("':' expected"); RECOVER;;}
      break;
  
!   case 273:
! #line 1674 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree body = build_loop_body ((yyvsp[-2].operator).location, (yyvsp[-1].node), 0);
  		  (yyval.node) = build_new_loop (body);
  		;}
      break;
  
!   case 274:
! #line 1682 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;}
      break;
  
!   case 275:
! #line 1684 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 276:
! #line 1686 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term and ')' expected"); RECOVER;;}
      break;
  
!   case 277:
! #line 1688 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 278:
! #line 1693 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;}
      break;
  
!   case 279:
! #line 1698 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree body = build_loop_body (0, NULL_TREE, 1);
  		  (yyval.node) = build_new_loop (body);
  		;}
      break;
  
!   case 280:
! #line 1707 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = finish_loop_body ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[-5].node), 1); ;}
      break;
  
!   case 281:
! #line 1712 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  if (CONSTANT_CLASS_P ((yyvsp[-4].node)))
  		    (yyvsp[-4].node) = build_wfl_node ((yyvsp[-4].node));
*************** yyreduce:
*** 4796,4803 ****
  		;}
      break;
  
!   case 281:
! #line 1724 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node));
  		  /* We have not condition, so we get rid of the EXIT_EXPR */
--- 4801,4808 ----
  		;}
      break;
  
!   case 282:
! #line 1718 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node));
  		  /* We have not condition, so we get rid of the EXIT_EXPR */
*************** yyreduce:
*** 4806,4833 ****
  		;}
      break;
  
!   case 282:
! #line 1731 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Invalid control expression"); RECOVER;;}
      break;
  
!   case 283:
! #line 1733 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Invalid update expression"); RECOVER;;}
      break;
  
!   case 284:
! #line 1735 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Invalid update expression"); RECOVER;;}
      break;
  
!   case 285:
! #line 1740 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = finish_for_loop (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node));;}
      break;
  
!   case 286:
! #line 1742 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node));
  		  /* We have not condition, so we get rid of the EXIT_EXPR */
--- 4811,4838 ----
  		;}
      break;
  
!   case 283:
! #line 1725 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Invalid control expression"); RECOVER;;}
      break;
  
!   case 284:
! #line 1727 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Invalid update expression"); RECOVER;;}
      break;
  
!   case 285:
! #line 1729 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Invalid update expression"); RECOVER;;}
      break;
  
!   case 286:
! #line 1734 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = finish_for_loop (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node));;}
      break;
  
!   case 287:
! #line 1736 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node));
  		  /* We have not condition, so we get rid of the EXIT_EXPR */
*************** yyreduce:
*** 4836,4843 ****
  		;}
      break;
  
!   case 287:
! #line 1752 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  /* This scope defined for local variable that may be
                       defined within the scope of the for loop */
--- 4841,4848 ----
  		;}
      break;
  
!   case 288:
! #line 1746 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  /* This scope defined for local variable that may be
                       defined within the scope of the for loop */
*************** yyreduce:
*** 4845,4862 ****
  		;}
      break;
  
!   case 288:
! #line 1758 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'(' expected"); DRECOVER(for_1);;}
      break;
  
!   case 289:
! #line 1760 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Invalid init statement"); RECOVER;;}
      break;
  
!   case 290:
! #line 1765 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  /* We now declare the loop body. The loop is
                       declared as a for loop. */
--- 4850,4867 ----
  		;}
      break;
  
!   case 289:
! #line 1752 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'(' expected"); DRECOVER(for_1);;}
      break;
  
!   case 290:
! #line 1754 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Invalid init statement"); RECOVER;;}
      break;
  
!   case 291:
! #line 1759 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  /* We now declare the loop body. The loop is
                       declared as a for loop. */
*************** yyreduce:
*** 4869,4881 ****
  		;}
      break;
  
!   case 291:
! #line 1777 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_java_empty_stmt (); ;}
      break;
  
!   case 292:
! #line 1779 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  /* Init statement recorded within the previously
                       defined block scope */
--- 4874,4886 ----
  		;}
      break;
  
!   case 292:
! #line 1771 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_java_empty_stmt (); ;}
      break;
  
!   case 293:
! #line 1773 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  /* Init statement recorded within the previously
                       defined block scope */
*************** yyreduce:
*** 4883,4890 ****
  		;}
      break;
  
!   case 293:
! #line 1785 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  /* Local variable are recorded within the previously
  		     defined block scope */
--- 4888,4895 ----
  		;}
      break;
  
!   case 294:
! #line 1779 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  /* Local variable are recorded within the previously
  		     defined block scope */
*************** yyreduce:
*** 4892,5031 ****
  		;}
      break;
  
!   case 294:
! #line 1791 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); DRECOVER(for_init_1);;}
      break;
  
!   case 295:
! #line 1795 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = build_java_empty_stmt ();;}
      break;
  
!   case 296:
! #line 1797 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_debugable_stmt (BUILD_LOCATION (), (yyvsp[0].node)); ;}
      break;
  
!   case 297:
! #line 1802 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = add_stmt_to_compound (NULL_TREE, NULL_TREE, (yyvsp[0].node)); ;}
      break;
  
!   case 298:
! #line 1804 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = add_stmt_to_compound ((yyvsp[-2].node), NULL_TREE, (yyvsp[0].node)); ;}
      break;
  
!   case 299:
! #line 1806 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 300:
! #line 1811 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 1, NULL_TREE); ;}
      break;
  
!   case 301:
! #line 1813 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 1, (yyvsp[-1].node)); ;}
      break;
  
!   case 302:
! #line 1815 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 303:
! #line 1817 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 304:
! #line 1822 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 0, NULL_TREE); ;}
      break;
  
!   case 305:
! #line 1824 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 0, (yyvsp[-1].node)); ;}
      break;
  
!   case 306:
! #line 1826 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 307:
! #line 1828 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 308:
! #line 1833 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_return ((yyvsp[-1].operator).location, NULL_TREE); ;}
      break;
  
!   case 309:
! #line 1835 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_return ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;}
      break;
  
!   case 310:
! #line 1837 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 311:
! #line 1839 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 312:
! #line 1844 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build1 (THROW_EXPR, NULL_TREE, (yyvsp[-1].node));
  		  SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-2].operator));
  		;}
      break;
  
!   case 313:
! #line 1849 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 314:
! #line 1851 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 315:
! #line 1856 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_assertion ((yyvsp[-4].operator).location, (yyvsp[-3].node), (yyvsp[-1].node));
  		;}
      break;
  
!   case 316:
! #line 1860 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_assertion ((yyvsp[-2].operator).location, (yyvsp[-1].node), NULL_TREE);
  		;}
      break;
  
!   case 317:
! #line 1864 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 318:
! #line 1866 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 319:
! #line 1871 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build2 (SYNCHRONIZED_EXPR, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node));
  		  EXPR_WFL_LINECOL ((yyval.node)) =
--- 4897,5036 ----
  		;}
      break;
  
!   case 295:
! #line 1785 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); DRECOVER(for_init_1);;}
      break;
  
!   case 296:
! #line 1789 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = build_java_empty_stmt ();;}
      break;
  
!   case 297:
! #line 1791 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_debugable_stmt (BUILD_LOCATION (), (yyvsp[0].node)); ;}
      break;
  
!   case 298:
! #line 1796 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = add_stmt_to_compound (NULL_TREE, NULL_TREE, (yyvsp[0].node)); ;}
      break;
  
!   case 299:
! #line 1798 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = add_stmt_to_compound ((yyvsp[-2].node), NULL_TREE, (yyvsp[0].node)); ;}
      break;
  
!   case 300:
! #line 1800 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 301:
! #line 1805 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 1, NULL_TREE); ;}
      break;
  
!   case 302:
! #line 1807 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 1, (yyvsp[-1].node)); ;}
      break;
  
!   case 303:
! #line 1809 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 304:
! #line 1811 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 305:
! #line 1816 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 0, NULL_TREE); ;}
      break;
  
!   case 306:
! #line 1818 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 0, (yyvsp[-1].node)); ;}
      break;
  
!   case 307:
! #line 1820 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 308:
! #line 1822 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 309:
! #line 1827 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_return ((yyvsp[-1].operator).location, NULL_TREE); ;}
      break;
  
!   case 310:
! #line 1829 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_return ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;}
      break;
  
!   case 311:
! #line 1831 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 312:
! #line 1833 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 313:
! #line 1838 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build1 (THROW_EXPR, NULL_TREE, (yyvsp[-1].node));
  		  SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-2].operator));
  		;}
      break;
  
!   case 314:
! #line 1843 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 315:
! #line 1845 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 316:
! #line 1850 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_assertion ((yyvsp[-4].operator).location, (yyvsp[-3].node), (yyvsp[-1].node));
  		;}
      break;
  
!   case 317:
! #line 1854 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_assertion ((yyvsp[-2].operator).location, (yyvsp[-1].node), NULL_TREE);
  		;}
      break;
  
!   case 318:
! #line 1858 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 319:
! #line 1860 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("';' expected"); RECOVER;;}
      break;
  
!   case 320:
! #line 1865 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build2 (SYNCHRONIZED_EXPR, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node));
  		  EXPR_WFL_LINECOL ((yyval.node)) =
*************** yyreduce:
*** 5033,5060 ****
  		;}
      break;
  
!   case 320:
! #line 1877 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'{' expected"); RECOVER;;}
      break;
  
!   case 321:
! #line 1879 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 322:
! #line 1881 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 323:
! #line 1883 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 324:
! #line 1888 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  check_modifiers (
               "Illegal modifier %qs. Only %<synchronized%> was expected here",
--- 5038,5065 ----
  		;}
      break;
  
!   case 321:
! #line 1871 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'{' expected"); RECOVER;;}
      break;
  
!   case 322:
! #line 1873 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 323:
! #line 1875 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 324:
! #line 1877 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 325:
! #line 1882 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  check_modifiers (
               "Illegal modifier %qs. Only %<synchronized%> was expected here",
*************** yyreduce:
*** 5065,5103 ****
  		;}
      break;
  
!   case 325:
! #line 1900 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_try_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 326:
! #line 1902 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_try_finally_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 327:
! #line 1904 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_try_finally_statement
  		    ((yyvsp[-3].operator).location, build_try_statement ((yyvsp[-3].operator).location,
  						       (yyvsp[-2].node), (yyvsp[-1].node)), (yyvsp[0].node));
  		;}
      break;
  
!   case 328:
! #line 1909 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'{' expected"); DRECOVER (try_statement);;}
      break;
  
!   case 330:
! #line 1915 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  TREE_CHAIN ((yyvsp[0].node)) = (yyvsp[-1].node);
  		  (yyval.node) = (yyvsp[0].node);
  		;}
      break;
  
!   case 331:
! #line 1923 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  java_method_add_stmt (current_function_decl, (yyvsp[0].node));
  		  exit_block ();
--- 5070,5108 ----
  		;}
      break;
  
!   case 326:
! #line 1894 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_try_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 327:
! #line 1896 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_try_finally_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;}
      break;
  
!   case 328:
! #line 1898 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_try_finally_statement
  		    ((yyvsp[-3].operator).location, build_try_statement ((yyvsp[-3].operator).location,
  						       (yyvsp[-2].node), (yyvsp[-1].node)), (yyvsp[0].node));
  		;}
      break;
  
!   case 329:
! #line 1903 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'{' expected"); DRECOVER (try_statement);;}
      break;
  
!   case 331:
! #line 1909 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  TREE_CHAIN ((yyvsp[0].node)) = (yyvsp[-1].node);
  		  (yyval.node) = (yyvsp[0].node);
  		;}
      break;
  
!   case 332:
! #line 1917 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  java_method_add_stmt (current_function_decl, (yyvsp[0].node));
  		  exit_block ();
*************** yyreduce:
*** 5105,5112 ****
  		;}
      break;
  
!   case 332:
! #line 1932 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  /* We add a block to define a scope for
  		     formal_parameter (CCBP). The formal parameter is
--- 5110,5117 ----
  		;}
      break;
  
!   case 333:
! #line 1926 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  /* We add a block to define a scope for
  		     formal_parameter (CCBP). The formal parameter is
*************** yyreduce:
*** 5133,5239 ****
  		;}
      break;
  
!   case 333:
! #line 1957 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'(' expected"); RECOVER; (yyval.node) = NULL_TREE;;}
      break;
  
!   case 334:
! #line 1959 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Missing term or ')' expected");
  		  RECOVER; (yyval.node) = NULL_TREE;
  		;}
      break;
  
!   case 335:
! #line 1964 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER; (yyval.node) = NULL_TREE;;}
      break;
  
!   case 336:
! #line 1969 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
!   case 337:
! #line 1971 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'{' expected"); RECOVER; ;}
      break;
  
!   case 342:
! #line 1984 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_this ((yyvsp[0].operator).location); ;}
      break;
  
!   case 343:
! #line 1986 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = (yyvsp[-1].node);;}
      break;
  
!   case 349:
! #line 1996 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree wfl = build_wfl_node (this_identifier_node);
  		  (yyval.node) = make_qualified_primary ((yyvsp[-2].node), wfl, EXPR_WFL_LINECOL ((yyvsp[-2].node)));
  		;}
      break;
  
-   case 350:
- #line 2001 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
-     {yyerror ("')' expected"); RECOVER;;}
-     break;
- 
    case 351:
! #line 2003 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     {yyerror ("'class' or 'this' expected" ); RECOVER;;}
      break;
  
    case 352:
! #line 2005 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     {yyerror ("'class' expected" ); RECOVER;;}
      break;
  
    case 353:
! #line 2007 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'class' expected" ); RECOVER;;}
      break;
  
    case 354:
! #line 2012 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;}
      break;
  
    case 355:
! #line 2014 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;}
      break;
  
    case 356:
! #line 2016 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;}
      break;
  
    case 357:
! #line 2018 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
                     (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location,
                                                     void_type_node);
                  ;}
      break;
  
!   case 358:
! #line 2026 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
!   case 359:
! #line 2028 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_new_invocation ((yyvsp[-2].node), NULL_TREE); ;}
      break;
  
!   case 361:
! #line 2034 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree ctor = build_new_invocation ((yyvsp[-2].node), NULL_TREE);
  		  (yyval.node) = make_qualified_primary ((yyvsp[-3].node), ctor,
--- 5138,5244 ----
  		;}
      break;
  
!   case 334:
! #line 1951 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'(' expected"); RECOVER; (yyval.node) = NULL_TREE;;}
      break;
  
!   case 335:
! #line 1953 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Missing term or ')' expected");
  		  RECOVER; (yyval.node) = NULL_TREE;
  		;}
      break;
  
!   case 336:
! #line 1958 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER; (yyval.node) = NULL_TREE;;}
      break;
  
!   case 337:
! #line 1963 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[0].node); ;}
      break;
  
!   case 338:
! #line 1965 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'{' expected"); RECOVER; ;}
      break;
  
!   case 343:
! #line 1978 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_this ((yyvsp[0].operator).location); ;}
      break;
  
!   case 344:
! #line 1980 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = (yyvsp[-1].node);;}
      break;
  
!   case 350:
! #line 1990 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree wfl = build_wfl_node (this_identifier_node);
  		  (yyval.node) = make_qualified_primary ((yyvsp[-2].node), wfl, EXPR_WFL_LINECOL ((yyvsp[-2].node)));
  		;}
      break;
  
    case 351:
! #line 1995 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("')' expected"); RECOVER;;}
      break;
  
    case 352:
! #line 1997 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("'class' or 'this' expected" ); RECOVER;;}
      break;
  
    case 353:
! #line 1999 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'class' expected" ); RECOVER;;}
      break;
  
    case 354:
! #line 2001 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("'class' expected" ); RECOVER;;}
      break;
  
    case 355:
! #line 2006 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;}
      break;
  
    case 356:
! #line 2008 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;}
      break;
  
    case 357:
! #line 2010 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;}
!     break;
! 
!   case 358:
! #line 2012 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
                     (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location,
                                                     void_type_node);
                  ;}
      break;
  
!   case 359:
! #line 2020 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
!   case 360:
! #line 2022 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_new_invocation ((yyvsp[-2].node), NULL_TREE); ;}
      break;
  
!   case 362:
! #line 2028 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree ctor = build_new_invocation ((yyvsp[-2].node), NULL_TREE);
  		  (yyval.node) = make_qualified_primary ((yyvsp[-3].node), ctor,
*************** yyreduce:
*** 5241,5248 ****
  		;}
      break;
  
!   case 363:
! #line 2041 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree ctor = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node));
  		  (yyval.node) = make_qualified_primary ((yyvsp[-4].node), ctor,
--- 5246,5253 ----
  		;}
      break;
  
!   case 364:
! #line 2035 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree ctor = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node));
  		  (yyval.node) = make_qualified_primary ((yyvsp[-4].node), ctor,
*************** yyreduce:
*** 5250,5277 ****
  		;}
      break;
  
!   case 365:
! #line 2048 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); DRECOVER(new_1);;}
      break;
  
!   case 366:
! #line 2050 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 367:
! #line 2052 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("')' or term expected"); RECOVER;;}
      break;
  
!   case 368:
! #line 2054 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 369:
! #line 2056 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = NULL_TREE;
  		  YYERROR_NOW;
--- 5255,5282 ----
  		;}
      break;
  
!   case 366:
! #line 2042 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); DRECOVER(new_1);;}
      break;
  
!   case 367:
! #line 2044 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 368:
! #line 2046 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("')' or term expected"); RECOVER;;}
      break;
  
!   case 369:
! #line 2048 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("')' expected"); RECOVER;;}
      break;
  
!   case 370:
! #line 2050 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = NULL_TREE;
  		  YYERROR_NOW;
*************** yyreduce:
*** 5280,5297 ****
  		;}
      break;
  
!   case 370:
! #line 2063 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 371:
! #line 2073 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { create_anonymous_class ((yyvsp[-3].node)); ;}
      break;
  
!   case 372:
! #line 2075 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
  		  EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-5].node));
--- 5285,5302 ----
  		;}
      break;
  
!   case 371:
! #line 2057 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;}
      break;
  
!   case 372:
! #line 2067 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { create_anonymous_class ((yyvsp[-3].node)); ;}
      break;
  
!   case 373:
! #line 2069 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
  		  EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-5].node));
*************** yyreduce:
*** 5314,5320 ****
  		     must be generated following the hints provided by
  		     the `new' expression. Whether a super constructor
  		     of that nature exists or not is to be verified
! 		     later on in verify_constructor_super.
  
  		     It's during the expansion of a `new' statement
  		     referring to an anonymous class that a ctor will
--- 5319,5325 ----
  		     must be generated following the hints provided by
  		     the `new' expression. Whether a super constructor
  		     of that nature exists or not is to be verified
! 		     later on in get_constructor_super.
  
  		     It's during the expansion of a `new' statement
  		     referring to an anonymous class that a ctor will
*************** yyreduce:
*** 5324,5336 ****
  		;}
      break;
  
!   case 373:
! #line 2106 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { create_anonymous_class ((yyvsp[-2].node)); ;}
      break;
  
!   case 374:
! #line 2108 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
  		  EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-4].node));
--- 5329,5341 ----
  		;}
      break;
  
!   case 374:
! #line 2100 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { create_anonymous_class ((yyvsp[-2].node)); ;}
      break;
  
!   case 375:
! #line 2102 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
  		  EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-4].node));
*************** yyreduce:
*** 5345,5413 ****
  		;}
      break;
  
!   case 375:
! #line 2124 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[-2].node); ;}
      break;
  
!   case 376:
! #line 2126 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[-2].node); ;}
      break;
  
!   case 377:
! #line 2131 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), NULL_TREE);
  		  ctxp->formal_parameter_number = 1;
  		;}
      break;
  
!   case 378:
! #line 2136 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number += 1;
  		  (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyvsp[-2].node));
  		;}
      break;
  
-   case 379:
- #line 2141 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
-     {yyerror ("Missing term"); RECOVER;;}
-     break;
- 
    case 380:
! #line 2146 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;}
      break;
  
    case 381:
! #line 2148 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;}
      break;
  
    case 382:
! #line 2150 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;}
      break;
  
    case 383:
! #line 2152 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;}
      break;
  
    case 384:
! #line 2154 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     {yyerror ("'[' expected"); DRECOVER ("]");;}
      break;
  
    case 385:
! #line 2156 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     {yyerror ("']' expected"); RECOVER;;}
      break;
  
    case 386:
! #line 2163 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  char *sig;
  		  int osb = pop_current_osb (ctxp);
--- 5350,5418 ----
  		;}
      break;
  
!   case 376:
! #line 2118 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[-2].node); ;}
      break;
  
!   case 377:
! #line 2120 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = (yyvsp[-2].node); ;}
      break;
  
!   case 378:
! #line 2125 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), NULL_TREE);
  		  ctxp->formal_parameter_number = 1;
  		;}
      break;
  
!   case 379:
! #line 2130 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  ctxp->formal_parameter_number += 1;
  		  (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyvsp[-2].node));
  		;}
      break;
  
    case 380:
! #line 2135 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 381:
! #line 2140 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;}
      break;
  
    case 382:
! #line 2142 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;}
      break;
  
    case 383:
! #line 2144 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;}
      break;
  
    case 384:
! #line 2146 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;}
      break;
  
    case 385:
! #line 2148 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("'[' expected"); DRECOVER ("]");;}
      break;
  
    case 386:
! #line 2150 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("']' expected"); RECOVER;;}
!     break;
! 
!   case 387:
! #line 2157 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  char *sig;
  		  int osb = pop_current_osb (ctxp);
*************** yyreduce:
*** 5420,5427 ****
  		;}
      break;
  
!   case 387:
! #line 2174 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  int osb = pop_current_osb (ctxp);
  		  tree type = (yyvsp[-2].node);
--- 5425,5432 ----
  		;}
      break;
  
!   case 388:
! #line 2168 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  int osb = pop_current_osb (ctxp);
  		  tree type = (yyvsp[-2].node);
*************** yyreduce:
*** 5432,5459 ****
  		;}
      break;
  
!   case 388:
! #line 2183 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("'[' expected"); DRECOVER ("]");;}
      break;
  
!   case 389:
! #line 2185 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("']' expected"); RECOVER;;}
      break;
  
!   case 390:
! #line 2190 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_tree_list (NULL_TREE, (yyvsp[0].node)); ;}
      break;
  
!   case 391:
! #line 2192 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyval.node)); ;}
      break;
  
!   case 392:
! #line 2197 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  if (JNUMERIC_TYPE_P (TREE_TYPE ((yyvsp[-1].node))))
  		    {
--- 5437,5464 ----
  		;}
      break;
  
!   case 389:
! #line 2177 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("'[' expected"); DRECOVER ("]");;}
      break;
  
!   case 390:
! #line 2179 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("']' expected"); RECOVER;;}
      break;
  
!   case 391:
! #line 2184 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_tree_list (NULL_TREE, (yyvsp[0].node)); ;}
      break;
  
!   case 392:
! #line 2186 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyval.node)); ;}
      break;
  
!   case 393:
! #line 2191 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  if (JNUMERIC_TYPE_P (TREE_TYPE ((yyvsp[-1].node))))
  		    {
*************** yyreduce:
*** 5465,5477 ****
  		;}
      break;
  
!   case 393:
! #line 2207 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("']' expected"); RECOVER;;}
      break;
  
!   case 394:
! #line 2209 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Missing term");
  		  yyerror ("']' expected");
--- 5470,5482 ----
  		;}
      break;
  
!   case 394:
! #line 2201 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("']' expected"); RECOVER;;}
      break;
  
!   case 395:
! #line 2203 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Missing term");
  		  yyerror ("']' expected");
*************** yyreduce:
*** 5479,5486 ****
  		;}
      break;
  
!   case 395:
! #line 2218 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  int allocate = 0;
  		  /* If not initialized, allocate memory for the osb
--- 5484,5491 ----
  		;}
      break;
  
!   case 396:
! #line 2212 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  int allocate = 0;
  		  /* If not initialized, allocate memory for the osb
*************** yyreduce:
*** 5508,5530 ****
  		;}
      break;
  
!   case 396:
! #line 2244 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { CURRENT_OSB (ctxp)++; ;}
      break;
  
!   case 397:
! #line 2246 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { yyerror ("']' expected"); RECOVER;;}
      break;
  
!   case 398:
! #line 2251 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = make_qualified_primary ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;}
      break;
  
!   case 399:
! #line 2255 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree super_wfl = build_wfl_node (super_identifier_node);
  		  SET_EXPR_LOCATION_FROM_TOKEN (super_wfl, (yyvsp[-2].operator));
--- 5513,5535 ----
  		;}
      break;
  
!   case 397:
! #line 2238 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { CURRENT_OSB (ctxp)++; ;}
      break;
  
!   case 398:
! #line 2240 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { yyerror ("']' expected"); RECOVER;;}
      break;
  
!   case 399:
! #line 2245 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = make_qualified_primary ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;}
      break;
  
!   case 400:
! #line 2249 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree super_wfl = build_wfl_node (super_identifier_node);
  		  SET_EXPR_LOCATION_FROM_TOKEN (super_wfl, (yyvsp[-2].operator));
*************** yyreduce:
*** 5532,5554 ****
  		;}
      break;
  
!   case 400:
! #line 2261 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Field expected"); DRECOVER (super_field_acces);;}
      break;
  
!   case 401:
! #line 2266 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_method_invocation ((yyvsp[-2].node), NULL_TREE); ;}
      break;
  
!   case 402:
! #line 2268 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_method_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
!   case 403:
! #line 2270 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  if (TREE_CODE ((yyvsp[-4].node)) == THIS_EXPR)
  		    (yyval.node) = build_this_super_qualified_invocation
--- 5537,5559 ----
  		;}
      break;
  
!   case 401:
! #line 2255 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Field expected"); DRECOVER (super_field_acces);;}
      break;
  
!   case 402:
! #line 2260 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_method_invocation ((yyvsp[-2].node), NULL_TREE); ;}
      break;
  
!   case 403:
! #line 2262 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_method_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
!   case 404:
! #line 2264 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  if (TREE_CODE ((yyvsp[-4].node)) == THIS_EXPR)
  		    (yyval.node) = build_this_super_qualified_invocation
*************** yyreduce:
*** 5561,5568 ****
  		;}
      break;
  
!   case 404:
! #line 2281 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  if (TREE_CODE ((yyvsp[-5].node)) == THIS_EXPR)
  		    (yyval.node) = build_this_super_qualified_invocation
--- 5566,5573 ----
  		;}
      break;
  
!   case 405:
! #line 2275 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  if (TREE_CODE ((yyvsp[-5].node)) == THIS_EXPR)
  		    (yyval.node) = build_this_super_qualified_invocation
*************** yyreduce:
*** 5575,5691 ****
  		;}
      break;
  
!   case 405:
! #line 2292 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_this_super_qualified_invocation
  		    (0, (yyvsp[-2].node), NULL_TREE, (yyvsp[-4].operator).location, (yyvsp[-3].operator).location);
  		;}
      break;
  
!   case 406:
! #line 2297 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_this_super_qualified_invocation
  		    (0, (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[-5].operator).location, (yyvsp[-4].operator).location);
  		;}
      break;
  
-   case 407:
- #line 2306 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
-     { yyerror ("'(' expected"); DRECOVER (method_invocation); ;}
-     break;
- 
    case 408:
! #line 2308 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { yyerror ("'(' expected"); DRECOVER (method_invocation); ;}
      break;
  
    case 409:
! #line 2313 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
    case 410:
! #line 2315 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
    case 411:
! #line 2317 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
    case 412:
! #line 2319 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 413:
! #line 2324 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 414:
! #line 2329 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 415:
! #line 2334 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 416:
! #line 2339 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 417:
! #line 2344 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 422:
! #line 2359 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;}
      break;
  
!   case 423:
! #line 2364 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;}
      break;
  
!   case 426:
! #line 2371 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
      break;
  
!   case 428:
! #line 2374 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 429:
! #line 2379 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  if ((yyvsp[0].node))
  		    error_if_numeric_overflow ((yyvsp[0].node));
--- 5580,5696 ----
  		;}
      break;
  
!   case 406:
! #line 2286 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_this_super_qualified_invocation
  		    (0, (yyvsp[-2].node), NULL_TREE, (yyvsp[-4].operator).location, (yyvsp[-3].operator).location);
  		;}
      break;
  
!   case 407:
! #line 2291 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_this_super_qualified_invocation
  		    (0, (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[-5].operator).location, (yyvsp[-4].operator).location);
  		;}
      break;
  
    case 408:
! #line 2300 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { yyerror ("'(' expected"); DRECOVER (method_invocation); ;}
      break;
  
    case 409:
! #line 2302 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     { yyerror ("'(' expected"); DRECOVER (method_invocation); ;}
      break;
  
    case 410:
! #line 2307 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
    case 411:
! #line 2309 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;}
      break;
  
    case 412:
! #line 2311 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;}
!     break;
! 
!   case 413:
! #line 2313 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 414:
! #line 2318 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 415:
! #line 2323 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 416:
! #line 2328 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 417:
! #line 2333 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 418:
! #line 2338 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;}
      break;
  
!   case 423:
! #line 2353 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;}
      break;
  
!   case 424:
! #line 2358 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;}
      break;
  
!   case 427:
! #line 2365 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
      break;
  
!   case 429:
! #line 2368 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 430:
! #line 2373 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  if ((yyvsp[0].node))
  		    error_if_numeric_overflow ((yyvsp[0].node));
*************** yyreduce:
*** 5693,5750 ****
  		;}
      break;
  
!   case 430:
! #line 2385 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
      break;
  
!   case 431:
! #line 2387 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 432:
! #line 2392 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;}
      break;
  
!   case 433:
! #line 2394 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 434:
! #line 2399 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;}
      break;
  
!   case 435:
! #line 2401 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 437:
! #line 2407 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
      break;
  
!   case 438:
! #line 2409 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
      break;
  
!   case 440:
! #line 2412 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 441:
! #line 2414 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 442:
! #line 2419 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  tree type = (yyvsp[-3].node);
  		  int osb = pop_current_osb (ctxp);
--- 5698,5755 ----
  		;}
      break;
  
!   case 431:
! #line 2379 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
      break;
  
!   case 432:
! #line 2381 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 433:
! #line 2386 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;}
      break;
  
!   case 434:
! #line 2388 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 435:
! #line 2393 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;}
      break;
  
!   case 436:
! #line 2395 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 438:
! #line 2401 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
      break;
  
!   case 439:
! #line 2403 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
      break;
  
!   case 441:
! #line 2406 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 442:
! #line 2408 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;}
      break;
  
!   case 443:
! #line 2413 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  tree type = (yyvsp[-3].node);
  		  int osb = pop_current_osb (ctxp);
*************** yyreduce:
*** 5754,5771 ****
  		;}
      break;
  
!   case 443:
! #line 2427 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 444:
! #line 2429 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 445:
! #line 2431 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  const char *ptr;
  		  int osb = pop_current_osb (ctxp);
--- 5759,5776 ----
  		;}
      break;
  
!   case 444:
! #line 2421 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 445:
! #line 2423 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 446:
! #line 2425 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  const char *ptr;
  		  int osb = pop_current_osb (ctxp);
*************** yyreduce:
*** 5781,5928 ****
  		;}
      break;
  
!   case 446:
! #line 2445 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("']' expected, invalid type expression");;}
      break;
  
!   case 447:
! #line 2447 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  	          YYNOT_TWICE yyerror ("Invalid type expression"); RECOVER;
  		  RECOVER;
  		;}
      break;
  
!   case 448:
! #line 2452 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 449:
! #line 2454 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 450:
! #line 2456 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 452:
! #line 2462 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token),
  				    (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 453:
! #line 2467 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 454:
! #line 2472 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 455:
! #line 2477 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 456:
! #line 2479 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 457:
! #line 2481 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 459:
! #line 2487 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 460:
! #line 2492 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 461:
! #line 2497 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 462:
! #line 2499 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 464:
! #line 2505 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 465:
! #line 2510 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 466:
! #line 2515 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
-   case 467:
- #line 2520 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
-     {yyerror ("Missing term"); RECOVER;;}
-     break;
- 
    case 468:
! #line 2522 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 469:
! #line 2524 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 471:
! #line 2530 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     {
! 		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! 				    (yyvsp[-2].node), (yyvsp[0].node));
! 		;}
      break;
  
    case 472:
! #line 2535 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
--- 5786,5925 ----
  		;}
      break;
  
!   case 447:
! #line 2439 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("']' expected, invalid type expression");;}
      break;
  
!   case 448:
! #line 2441 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  	          YYNOT_TWICE yyerror ("Invalid type expression"); RECOVER;
  		  RECOVER;
  		;}
      break;
  
!   case 449:
! #line 2446 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 450:
! #line 2448 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 451:
! #line 2450 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 453:
! #line 2456 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token),
  				    (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 454:
! #line 2461 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 455:
! #line 2466 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 456:
! #line 2471 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 457:
! #line 2473 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 458:
! #line 2475 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 460:
! #line 2481 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 461:
! #line 2486 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 462:
! #line 2491 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 463:
! #line 2493 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 465:
! #line 2499 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 466:
! #line 2504 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 467:
! #line 2509 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
    case 468:
! #line 2514 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 469:
! #line 2516 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 470:
! #line 2518 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 472:
! #line 2524 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
*************** yyreduce:
*** 5930,5936 ****
      break;
  
    case 473:
! #line 2540 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
--- 5927,5933 ----
      break;
  
    case 473:
! #line 2529 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
*************** yyreduce:
*** 5938,5944 ****
      break;
  
    case 474:
! #line 2545 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
--- 5935,5941 ----
      break;
  
    case 474:
! #line 2534 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
*************** yyreduce:
*** 5946,6081 ****
      break;
  
    case 475:
! #line 2550 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     { (yyval.node) = build_binop (INSTANCEOF_EXPR, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
    case 476:
! #line 2552 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
!     {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 477:
! #line 2554 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 478:
! #line 2556 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 479:
! #line 2558 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 480:
! #line 2560 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Invalid reference type"); RECOVER;;}
      break;
  
!   case 482:
! #line 2566 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 483:
! #line 2571 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 484:
! #line 2576 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 485:
! #line 2578 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 487:
! #line 2584 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 488:
! #line 2589 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 490:
! #line 2595 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 491:
! #line 2600 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 493:
! #line 2606 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 494:
! #line 2611 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 496:
! #line 2617 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 497:
! #line 2622 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 499:
! #line 2628 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 500:
! #line 2633 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 502:
! #line 2639 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  (yyval.node) = build3 (CONDITIONAL_EXPR, NULL_TREE, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node));
  		  SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-3].operator));
  		;}
      break;
  
!   case 503:
! #line 2644 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  YYERROR_NOW;
  		  yyerror ("Missing term");
--- 5943,6086 ----
      break;
  
    case 475:
! #line 2539 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {
! 		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! 				    (yyvsp[-2].node), (yyvsp[0].node));
! 		;}
      break;
  
    case 476:
! #line 2544 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     { (yyval.node) = build_binop (INSTANCEOF_EXPR, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
    case 477:
! #line 2546 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 478:
! #line 2548 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 479:
! #line 2550 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
    case 480:
! #line 2552 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
!     {yyerror ("Missing term"); RECOVER;;}
!     break;
! 
!   case 481:
! #line 2554 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Invalid reference type"); RECOVER;;}
      break;
  
!   case 483:
! #line 2560 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 484:
! #line 2565 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 485:
! #line 2570 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 486:
! #line 2572 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 488:
! #line 2578 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 489:
! #line 2583 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 491:
! #line 2589 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 492:
! #line 2594 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 494:
! #line 2600 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 495:
! #line 2605 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 497:
! #line 2611 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 498:
! #line 2616 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 500:
! #line 2622 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
  				    (yyvsp[-2].node), (yyvsp[0].node));
  		;}
      break;
  
!   case 501:
! #line 2627 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); RECOVER;;}
      break;
  
!   case 503:
! #line 2633 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  (yyval.node) = build3 (CONDITIONAL_EXPR, NULL_TREE, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node));
  		  SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-3].operator));
  		;}
      break;
  
!   case 504:
! #line 2638 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  YYERROR_NOW;
  		  yyerror ("Missing term");
*************** yyreduce:
*** 6083,6105 ****
  		;}
      break;
  
!   case 504:
! #line 2650 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); DRECOVER (2);;}
      break;
  
!   case 505:
! #line 2652 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {yyerror ("Missing term"); DRECOVER (3);;}
      break;
  
!   case 508:
! #line 2662 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      { (yyval.node) = build_assignment ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 509:
! #line 2664 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
      {
  		  YYNOT_TWICE yyerror ("Missing term");
  		  DRECOVER (assign);
--- 6088,6110 ----
  		;}
      break;
  
!   case 505:
! #line 2644 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); DRECOVER (2);;}
      break;
  
!   case 506:
! #line 2646 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {yyerror ("Missing term"); DRECOVER (3);;}
      break;
  
!   case 509:
! #line 2656 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      { (yyval.node) = build_assignment ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
      break;
  
!   case 510:
! #line 2658 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
      {
  		  YYNOT_TWICE yyerror ("Missing term");
  		  DRECOVER (assign);
*************** yyreduce:
*** 6110,6116 ****
      }
  
  /* Line 1037 of yacc.c.  */
! #line 6114 "java/parse.c"
  
    yyvsp -= yylen;
    yyssp -= yylen;
--- 6115,6121 ----
      }
  
  /* Line 1037 of yacc.c.  */
! #line 6119 "java/parse.c"
  
    yyvsp -= yylen;
    yyssp -= yylen;
*************** yyreturn:
*** 6338,6344 ****
  }
  
  
! #line 2689 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y"
  
  
  /* Helper function to retrieve an OSB count. Should be used when the
--- 6343,6349 ----
  }
  
  
! #line 2683 "/scratch/mitchell/gcc-releases/gcc-4.1.0/gcc-4.1.0/gcc/java/parse.y"
  
  
  /* Helper function to retrieve an OSB count. Should be used when the
*************** yyerror (const char *msgid)
*** 6771,6777 ****
  		 code_from_source, strlen (code_from_source));
    remainder = obstack_finish (&temporary_obstack);
    if (do_warning)
!     warning ("%s.\n%s", msgid, remainder);
    else
      error ("%s.\n%s", msgid, remainder);
  
--- 6776,6782 ----
  		 code_from_source, strlen (code_from_source));
    remainder = obstack_finish (&temporary_obstack);
    if (do_warning)
!     warning (0, "%s.\n%s", msgid, remainder);
    else
      error ("%s.\n%s", msgid, remainder);
  
*************** issue_warning_error_from_context (
*** 6808,6814 ****
    text.err_no = errno;
    text.args_ptr = ap;
    text.format_spec = gmsgid;
!   pp_format_text (global_dc->printer, &text);
    strncpy (buffer, pp_formatted_text (global_dc->printer), sizeof (buffer) - 1);
    buffer[sizeof (buffer) - 1] = '\0';
    pp_clear_output_area (global_dc->printer);
--- 6813,6820 ----
    text.err_no = errno;
    text.args_ptr = ap;
    text.format_spec = gmsgid;
!   pp_format (global_dc->printer, &text);
!   pp_output_formatted_text (global_dc->printer);
    strncpy (buffer, pp_formatted_text (global_dc->printer), sizeof (buffer) - 1);
    buffer[sizeof (buffer) - 1] = '\0';
    pp_clear_output_area (global_dc->printer);
*************** check_inner_class_redefinition (tree raw
*** 7327,7372 ****
    return 0;
  }
  
! /* Tries to find a decl for CLASS_TYPE within ENCLOSING. If we fail,
!    we remember ENCLOSING and SUPER.  */
  
  static tree
! resolve_inner_class (htab_t circularity_hash, tree cl, tree *enclosing,
! 		     tree *super, tree class_type)
  {
-   tree local_enclosing = *enclosing;
    tree local_super = NULL_TREE;
  
!   while (local_enclosing)
!     {
!       tree intermediate, decl;
  
!       *htab_find_slot (circularity_hash, local_enclosing, INSERT) =
! 	local_enclosing;
  
!       if ((decl = find_as_inner_class (local_enclosing, class_type, cl)))
! 	return decl;
  
!       intermediate = local_enclosing;
!       /* Explore enclosing contexts. */
!       while (INNER_CLASS_DECL_P (intermediate))
! 	{
! 	  intermediate = DECL_CONTEXT (intermediate);
! 	  if ((decl = find_as_inner_class (intermediate, class_type, cl)))
! 	    return decl;
! 	}
  
        /* Now go to the upper classes, bail out if necessary.  We will
  	 analyze the returned SUPER and act accordingly (see
  	 do_resolve_class).  */
!       if (JPRIMITIVE_TYPE_P (TREE_TYPE (local_enclosing))
! 	  || TREE_TYPE (local_enclosing) == void_type_node)
  	{
  	  parse_error_context (cl, "Qualifier must be a reference");
! 	  local_enclosing = NULL_TREE;
  	  break;
  	}
!       local_super = CLASSTYPE_SUPER (TREE_TYPE (local_enclosing));
        if (!local_super || local_super == object_type_node)
          break;
  
--- 7333,7384 ----
    return 0;
  }
  
! /* Tries to find a decl for CLASS_TYPE within ENCLOSING.  May return an
!    invisible/non-accessible matching decl when an accessible one could not be 
!    found, in order to give a better error message when accessibility is 
!    checked later.  */
  
  static tree
! resolve_inner_class (tree context, tree cl, tree enclosing, tree class_type)
  {
    tree local_super = NULL_TREE;
+   tree candidate = NULL_TREE;
  
!   /* This hash table is used to register the classes we're going
!      through when searching the current class as an inner class, in
!      order to detect circular references.  */
!   htab_t circularity_hash = htab_create (20, htab_hash_pointer, htab_eq_pointer,
! 					 NULL);
  
!   while (enclosing)
!     {
!       tree decl;
  
!       *htab_find_slot (circularity_hash, enclosing, INSERT) = enclosing;
  
!       if ((decl = find_as_inner_class (enclosing, class_type, cl)))
!         {
! 	  if (inner_class_accessible (decl, context))
! 	    {
! 	      candidate = decl;
! 	      break;
! 	    }
! 	  else
! 	    if (candidate == NULL_TREE)
! 	      candidate = decl;
! 	}	
  
        /* Now go to the upper classes, bail out if necessary.  We will
  	 analyze the returned SUPER and act accordingly (see
  	 do_resolve_class).  */
!       if (JPRIMITIVE_TYPE_P (TREE_TYPE (enclosing))
! 	  || TREE_TYPE (enclosing) == void_type_node)
  	{
  	  parse_error_context (cl, "Qualifier must be a reference");
! 	  enclosing = NULL_TREE;
  	  break;
  	}
!       local_super = CLASSTYPE_SUPER (TREE_TYPE (enclosing));
        if (!local_super || local_super == object_type_node)
          break;
  
*************** resolve_inner_class (htab_t circularity_
*** 7380,7401 ****
        if (htab_find (circularity_hash, local_super) != NULL)
          {
            if (!cl)
!             cl = lookup_cl (local_enclosing);
  
            parse_error_context
              (cl, "Cyclic inheritance involving %s",
! 	     IDENTIFIER_POINTER (DECL_NAME (local_enclosing)));
! 	  local_enclosing = NULL_TREE;
          }
        else
! 	local_enclosing = local_super;
      }
  
!   /* We failed. Return LOCAL_SUPER and LOCAL_ENCLOSING. */
!   *super = local_super;
!   *enclosing = local_enclosing;
  
!   return NULL_TREE;
  }
  
  /* Within ENCLOSING, find a decl for NAME and return it. NAME can be
--- 7392,7413 ----
        if (htab_find (circularity_hash, local_super) != NULL)
          {
            if (!cl)
!             cl = lookup_cl (enclosing);
  
            parse_error_context
              (cl, "Cyclic inheritance involving %s",
! 	     IDENTIFIER_POINTER (DECL_NAME (enclosing)));
! 	  enclosing = NULL_TREE;
          }
        else
! 	enclosing = local_super;
      }
  
!   htab_delete (circularity_hash);
  
!   /* We failed, but we might have found a matching class that wasn't 
!      accessible.  Return that to get a better error message.  */
!   return candidate;
  }
  
  /* Within ENCLOSING, find a decl for NAME and return it. NAME can be
*************** maybe_create_class_interface_decl (tree 
*** 7539,7549 ****
    DECL_SOURCE_LOCATION (decl) = EXPR_LOCATION (cl);
  #else
    DECL_SOURCE_FILE (decl) = EXPR_WFL_FILENAME (cl);
!   /* If we're emitting xrefs, store the line/col number information */
!   if (flag_emit_xref)
!     DECL_SOURCE_LINE (decl) = EXPR_WFL_LINECOL (cl);
!   else
!     DECL_SOURCE_LINE (decl) = EXPR_WFL_LINENO (cl);
  #endif
    CLASS_FROM_SOURCE_P (TREE_TYPE (decl)) = 1;
    CLASS_PARSED_P (TREE_TYPE (decl)) = 1;
--- 7551,7557 ----
    DECL_SOURCE_LOCATION (decl) = EXPR_LOCATION (cl);
  #else
    DECL_SOURCE_FILE (decl) = EXPR_WFL_FILENAME (cl);
!   DECL_SOURCE_LINE (decl) = EXPR_WFL_LINENO (cl);
  #endif
    CLASS_FROM_SOURCE_P (TREE_TYPE (decl)) = 1;
    CLASS_PARSED_P (TREE_TYPE (decl)) = 1;
*************** maybe_create_class_interface_decl (tree 
*** 7572,7577 ****
--- 7580,7593 ----
    /* Install a new dependency list element */
    create_jdep_list (ctxp);
  
+   /* We keep the compilation unit imports in the class so that
+      they can be used later to resolve type dependencies that
+      aren't necessary to solve now. */
+   TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list;
+   TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list;
+ 
+   TYPE_PACKAGE (TREE_TYPE (decl)) = ctxp->package;
+ 
    SOURCE_FRONTEND_DEBUG (("Defining class/interface %s",
  			  IDENTIFIER_POINTER (qualified_name)));
    return decl;
*************** create_class (int flags, tree id, tree s
*** 7846,7868 ****
       virtual function table in java.lang.object.  */
    TYPE_VFIELD (TREE_TYPE (decl)) = TYPE_VFIELD (object_type_node);
  
-   /* We keep the compilation unit imports in the class so that
-      they can be used later to resolve type dependencies that
-      aren't necessary to solve now. */
-   TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list;
-   TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list;
- 
    /* Add the private this$<n> field, Replicate final locals still in
       scope as private final fields mangled like val$<local_name>.
       This does not occur for top level (static) inner classes. */
    if (PURE_INNER_CLASS_DECL_P (decl))
      add_inner_class_fields (decl, current_function_decl);
  
-   /* If doing xref, store the location at which the inherited class
-      (if any) was seen. */
-   if (flag_emit_xref && super)
-     DECL_INHERITED_SOURCE_LINE (decl) = EXPR_WFL_LINECOL (super);
- 
    /* Eventually sets the @deprecated tag flag */
    CHECK_DEPRECATED (decl);
  
--- 7862,7873 ----
*************** register_fields (int flags, tree type, t
*** 8154,8163 ****
  #ifdef USE_MAPPED_LOCATION
        input_location = EXPR_LOCATION (cl);
  #else
!       if (flag_emit_xref)
! 	input_line = EXPR_WFL_LINECOL (cl);
!       else
! 	input_line = EXPR_WFL_LINENO (cl);
  #endif
        field_decl = add_field (class_type, current_name, real_type, flags);
        CHECK_DEPRECATED_NO_RESET (field_decl);
--- 8159,8165 ----
  #ifdef USE_MAPPED_LOCATION
        input_location = EXPR_LOCATION (cl);
  #else
!       input_line = EXPR_WFL_LINENO (cl);
  #endif
        field_decl = add_field (class_type, current_name, real_type, flags);
        CHECK_DEPRECATED_NO_RESET (field_decl);
*************** method_header (int flags, tree type, tre
*** 8554,8570 ****
    /* Eventually set the @deprecated tag flag */
    CHECK_DEPRECATED (meth);
  
-   /* If doing xref, store column and line number information instead
-      of the line number only. */
-   if (flag_emit_xref)
-     {
- #ifdef USE_MAPPED_LOCATION
-       DECL_SOURCE_LOCATION (meth) = EXPR_LOCATION (id);
- #else
-       DECL_SOURCE_LINE (meth) = EXPR_WFL_LINECOL (id);
- #endif
-     }
- 
    return meth;
  }
  
--- 8556,8561 ----
*************** finish_method_declaration (tree method_b
*** 8630,8637 ****
    exit_block ();
    /* Merge last line of the function with first line, directly in the
       function decl. It will be used to emit correct debug info. */
!   if (!flag_emit_xref)
!     DECL_FUNCTION_LAST_LINE (current_function_decl) = ctxp->last_ccb_indent1;
  
    /* Since function's argument's list are shared, reset the
       ARG_FINAL_P parameter that might have been set on some of this
--- 8621,8627 ----
    exit_block ();
    /* Merge last line of the function with first line, directly in the
       function decl. It will be used to emit correct debug info. */
!   DECL_FUNCTION_LAST_LINE (current_function_decl) = ctxp->last_ccb_indent1;
  
    /* Since function's argument's list are shared, reset the
       ARG_FINAL_P parameter that might have been set on some of this
*************** static tree
*** 9325,9330 ****
--- 9315,9323 ----
  jdep_resolve_class (jdep *dep)
  {
    tree decl;
+   
+   /* Set the correct context for class resolution.  */
+   current_class = TREE_TYPE (JDEP_ENCLOSING (dep));
  
    if (JDEP_RESOLVED_P (dep))
      decl = JDEP_RESOLVED_DECL (dep);
*************** tree
*** 9554,9563 ****
  do_resolve_class (tree enclosing, tree import_type, tree class_type, tree decl,
  		  tree cl)
  {
!   tree new_class_decl = NULL_TREE, super = NULL_TREE;
    tree saved_enclosing_type = enclosing ? TREE_TYPE (enclosing) : NULL_TREE;
    tree decl_result;
-   htab_t circularity_hash;
  
    if (QUALIFIED_P (TYPE_NAME (class_type)))
      {
--- 9547,9556 ----
  do_resolve_class (tree enclosing, tree import_type, tree class_type, tree decl,
  		  tree cl)
  {
!   tree new_class_decl = NULL_TREE;
    tree saved_enclosing_type = enclosing ? TREE_TYPE (enclosing) : NULL_TREE;
+   tree candidate = NULL_TREE;
    tree decl_result;
  
    if (QUALIFIED_P (TYPE_NAME (class_type)))
      {
*************** do_resolve_class (tree enclosing, tree i
*** 9581,9592 ****
  
    if (enclosing)
      {
!       /* This hash table is used to register the classes we're going
! 	 through when searching the current class as an inner class, in
! 	 order to detect circular references. Remember to free it before
! 	 returning the section 0- of this function. */
!       circularity_hash = htab_create (20, htab_hash_pointer, htab_eq_pointer,
! 				      NULL);
  
        /* 0- Search in the current class as an inner class.
  	 Maybe some code here should be added to load the class or
--- 9574,9580 ----
  
    if (enclosing)
      {
!       tree context = enclosing;
  
        /* 0- Search in the current class as an inner class.
  	 Maybe some code here should be added to load the class or
*************** do_resolve_class (tree enclosing, tree i
*** 9594,9615 ****
  	 being loaded from class file. FIXME. */
        while (enclosing)
  	{
! 	  new_class_decl = resolve_inner_class (circularity_hash, cl, &enclosing,
! 						&super, class_type);
  	  if (new_class_decl)
! 	    break;
  
! 	  /* If we haven't found anything because SUPER reached Object and
! 	     ENCLOSING happens to be an innerclass, try the enclosing context. */
! 	  if ((!super || super == object_type_node) &&
! 	      enclosing && INNER_CLASS_DECL_P (enclosing))
! 	    enclosing = DECL_CONTEXT (enclosing);
! 	  else
! 	    enclosing = NULL_TREE;
  	}
  
-       htab_delete (circularity_hash);
- 
        if (new_class_decl)
  	return new_class_decl;
      }
--- 9582,9604 ----
  	 being loaded from class file. FIXME. */
        while (enclosing)
  	{
! 	  new_class_decl = resolve_inner_class (context, cl, enclosing, class_type);
! 	  
  	  if (new_class_decl)
! 	    {
! 	      if (inner_class_accessible (new_class_decl, context))
! 	        break;
! 	      else
! 	        if (candidate == NULL_TREE)
! 		  candidate = new_class_decl;
! 		new_class_decl = NULL_TREE;
! 	    }
  
! 	  /* Now that we've looked through all superclasses, try the enclosing
! 	     context. */
! 	  enclosing = DECL_CONTEXT (enclosing);
  	}
  
        if (new_class_decl)
  	return new_class_decl;
      }
*************** do_resolve_class (tree enclosing, tree i
*** 9632,9639 ****
    /* 3- Search according to the current package definition */
    if (!QUALIFIED_P (TYPE_NAME (class_type)))
      {
!       if ((new_class_decl = qualify_and_find (class_type, ctxp->package,
! 					     TYPE_NAME (class_type))))
  	return new_class_decl;
      }
  
--- 9621,9628 ----
    /* 3- Search according to the current package definition */
    if (!QUALIFIED_P (TYPE_NAME (class_type)))
      {
!       if ((new_class_decl = qualify_and_find (class_type, 
!       		TYPE_PACKAGE (current_class), TYPE_NAME (class_type))))
  	return new_class_decl;
      }
  
*************** do_resolve_class (tree enclosing, tree i
*** 9695,9701 ****
           }
        } while (!decl_result && separator);
      }
!   return decl_result;
  }
  
  static tree
--- 9684,9693 ----
           }
        } while (!decl_result && separator);
      }
!   if (decl_result)
!     return decl_result;
!   else
!     return candidate;
  }
  
  static tree
*************** resolve_and_layout (tree something, tree
*** 9756,9763 ****
    if (TREE_CODE (something) == EXPR_WITH_FILE_LOCATION)
      something = EXPR_WFL_NODE (something);
  
!   /* Otherwise, if something is not and IDENTIFIER_NODE, it can be a a
!      TYPE_DECL or a real TYPE */
    else if (TREE_CODE (something) != IDENTIFIER_NODE)
      something = (TREE_CODE (TYPE_NAME (something)) == TYPE_DECL ?
  	    DECL_NAME (TYPE_NAME (something)) : TYPE_NAME (something));
--- 9748,9755 ----
    if (TREE_CODE (something) == EXPR_WITH_FILE_LOCATION)
      something = EXPR_WFL_NODE (something);
  
!   /* Otherwise, if something is not and IDENTIFIER_NODE, it can be a
!      TYPE_DECL or a real TYPE.  */
    else if (TREE_CODE (something) != IDENTIFIER_NODE)
      something = (TREE_CODE (TYPE_NAME (something)) == TYPE_DECL ?
  	    DECL_NAME (TYPE_NAME (something)) : TYPE_NAME (something));
*************** java_check_regular_methods (tree class_d
*** 10200,10206 ****
  	  tree found_decl = TYPE_NAME (DECL_CONTEXT (found));
  	  parse_error_context (method_wfl, "Class %qs must override %qs with a public method in order to implement interface %qs",
  			       IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 			       lang_printable_name (method, 2),
  			       IDENTIFIER_POINTER (DECL_NAME (found_decl)));
  	}
  
--- 10192,10198 ----
  	  tree found_decl = TYPE_NAME (DECL_CONTEXT (found));
  	  parse_error_context (method_wfl, "Class %qs must override %qs with a public method in order to implement interface %qs",
  			       IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 			       lang_printable_name (found, 0),
  			       IDENTIFIER_POINTER (DECL_NAME (found_decl)));
  	}
  
*************** check_throws_clauses (tree method, tree 
*** 10385,10394 ****
  {
    tree mthrows;
  
-   /* Can't check these things with class loaded from bytecode. FIXME */
-   if (!CLASS_FROM_SOURCE_P (DECL_CONTEXT (found)))
-     return;
- 
    for (mthrows = DECL_FUNCTION_THROWS (method);
         mthrows; mthrows = TREE_CHAIN (mthrows))
      {
--- 10377,10382 ----
*************** resolve_package (tree pkg, tree *next, t
*** 10955,10979 ****
    return decl;
  }
  
  
! /* Check accessibility of inner classes according to member access rules.
!    DECL is the inner class, ENCLOSING_DECL is the class from which the
!    access is being attempted. */
! 
! static void
! check_inner_class_access (tree decl, tree enclosing_decl, tree cl)
  {
-   const char *access;
    tree enclosing_decl_type;
  
-   /* We don't issue an error message when CL is null. CL can be null
-      as a result of processing a JDEP crafted by source_start_java_method
-      for the purpose of patching its parm decl. But the error would
-      have been already trapped when fixing the method's signature.
-      DECL can also be NULL in case of earlier errors. */
-   if (!decl || !cl)
-     return;
- 
    enclosing_decl_type = TREE_TYPE (enclosing_decl);
  
    if (CLASS_PRIVATE (decl))
--- 10943,10956 ----
    return decl;
  }
  
+ /* Check accessibility of inner class DECL, from the context ENCLOSING_DECL,
+    according to member access rules.  */
  
! static bool
! inner_class_accessible (tree decl, tree enclosing_decl)
  {
    tree enclosing_decl_type;
  
    enclosing_decl_type = TREE_TYPE (enclosing_decl);
  
    if (CLASS_PRIVATE (decl))
*************** check_inner_class_access (tree decl, tre
*** 10986,11000 ****
        while (DECL_CONTEXT (enclosing_decl))
          enclosing_decl = DECL_CONTEXT (enclosing_decl);
        if (top_level == enclosing_decl)
!         return;
!       access = "private";
      }
    else if (CLASS_PROTECTED (decl))
      {
        tree decl_context;
        /* Access is permitted from within the same package... */
        if (in_same_package (decl, enclosing_decl))
!         return;
  
        /* ... or from within the body of a subtype of the context in which
           DECL is declared. */
--- 10963,10976 ----
        while (DECL_CONTEXT (enclosing_decl))
          enclosing_decl = DECL_CONTEXT (enclosing_decl);
        if (top_level == enclosing_decl)
!         return true;
      }
    else if (CLASS_PROTECTED (decl))
      {
        tree decl_context;
        /* Access is permitted from within the same package... */
        if (in_same_package (decl, enclosing_decl))
!         return true;
  
        /* ... or from within the body of a subtype of the context in which
           DECL is declared. */
*************** check_inner_class_access (tree decl, tre
*** 11005,11034 ****
  	    {
  	      if (interface_of_p (TREE_TYPE (decl_context),
  				  enclosing_decl_type))
! 		return;
  	    }
  	  else
  	    {
  	      /* Eww. The order of the arguments is different!! */
  	      if (inherits_from_p (enclosing_decl_type,
  				   TREE_TYPE (decl_context)))
! 		return;
  	    }
  	  enclosing_decl = DECL_CONTEXT (enclosing_decl);
  	}
-       access = "protected";
      }
    else if (! CLASS_PUBLIC (decl))
      {
        /* Access is permitted only from within the same package as DECL. */
        if (in_same_package (decl, enclosing_decl))
!         return;
!       access = "non-public";
      }
    else
      /* Class is public. */
      return;
  
    parse_error_context (cl, "Nested %s %s is %s; cannot be accessed from here",
  		       (CLASS_INTERFACE (decl) ? "interface" : "class"),
  		       lang_printable_name (decl, 2), access);
--- 10981,11038 ----
  	    {
  	      if (interface_of_p (TREE_TYPE (decl_context),
  				  enclosing_decl_type))
! 		return true;
  	    }
  	  else
  	    {
  	      /* Eww. The order of the arguments is different!! */
  	      if (inherits_from_p (enclosing_decl_type,
  				   TREE_TYPE (decl_context)))
! 		return true;
  	    }
  	  enclosing_decl = DECL_CONTEXT (enclosing_decl);
  	}
      }
    else if (! CLASS_PUBLIC (decl))
      {
        /* Access is permitted only from within the same package as DECL. */
        if (in_same_package (decl, enclosing_decl))
!         return true;
      }
    else
      /* Class is public. */
+     return true;
+ 
+   return false;
+ }
+ 
+ /* Check accessibility of inner classes according to member access rules.
+    DECL is the inner class, ENCLOSING_DECL is the class from which the
+    access is being attempted. */
+ 
+ static void
+ check_inner_class_access (tree decl, tree enclosing_decl, tree cl)
+ {
+   const char *access;
+ 
+   /* We don't issue an error message when CL is null. CL can be null
+      as a result of processing a JDEP crafted by source_start_java_method
+      for the purpose of patching its parm decl. But the error would
+      have been already trapped when fixing the method's signature.
+      DECL can also be NULL in case of earlier errors. */
+   if (!decl || !cl)
      return;
  
+   if (inner_class_accessible (decl, enclosing_decl))
+     return;
+ 
+   if (CLASS_PRIVATE (decl))
+       access = "private";
+   else if (CLASS_PROTECTED (decl))
+       access = "protected";
+   else
+       access = "non-public";
+ 
    parse_error_context (cl, "Nested %s %s is %s; cannot be accessed from here",
  		       (CLASS_INTERFACE (decl) ? "interface" : "class"),
  		       lang_printable_name (decl, 2), access);
*************** declare_local_variables (int modifier, t
*** 11151,11166 ****
        DECL_FINAL (decl) = final_p;
        BLOCK_CHAIN_DECL (decl);
  
-       /* If doing xreferencing, replace the line number with the WFL
-          compound value */
- #ifdef USE_MAPPED_LOCATION
-       if (flag_emit_xref)
- 	DECL_SOURCE_LOCATION (decl) = EXPR_LOCATION (wfl);
- #else
-       if (flag_emit_xref)
- 	DECL_SOURCE_LINE (decl) = EXPR_WFL_LINECOL (wfl);
- #endif
- 
        /* Don't try to use an INIT statement when an error was found */
        if (init && java_error_count)
  	init = NULL_TREE;
--- 11155,11160 ----
*************** source_start_java_method (tree fndecl)
*** 11241,11246 ****
--- 11235,11243 ----
  	  DECL_FINAL (parm_decl) = 1;
  	}
  
+       if (name == this_identifier_node)
+ 	DECL_ARTIFICIAL (parm_decl) = 1;
+ 
        BLOCK_CHAIN_DECL (parm_decl);
      }
    tem = BLOCK_EXPR_DECLS (DECL_FUNCTION_BODY (current_function_decl));
*************** source_end_java_method (void)
*** 11341,11348 ****
      BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl)) = NULL_TREE;
  
    if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl))
!       && ! flag_emit_class_files
!       && ! flag_emit_xref)
      finish_method (fndecl);
  
    current_function_decl = NULL_TREE;
--- 11338,11344 ----
      BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl)) = NULL_TREE;
  
    if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl))
!       && ! flag_emit_class_files)
      finish_method (fndecl);
  
    current_function_decl = NULL_TREE;
*************** java_complete_expand_classes (void)
*** 11503,11510 ****
  {
    tree current;
  
-   do_not_fold = flag_emit_xref;
- 
    for (current = ctxp->class_list; current; current = TREE_CHAIN (current))
      if (!INNER_CLASS_DECL_P (current))
        java_complete_expand_class (current);
--- 11499,11504 ----
*************** maybe_yank_clinit (tree mdecl)
*** 11778,11784 ****
  
    /* Now we analyze the method body and look for something that
       isn't a MODIFY_EXPR */
!   if (!IS_EMPTY_STMT (bbody) && analyze_clinit_body (type, bbody))
      return 0;
  
    /* Get rid of <clinit> in the class' list of methods */
--- 11772,11778 ----
  
    /* Now we analyze the method body and look for something that
       isn't a MODIFY_EXPR */
!   if (bbody && !IS_EMPTY_STMT (bbody) && analyze_clinit_body (type, bbody))
      return 0;
  
    /* Get rid of <clinit> in the class' list of methods */
*************** java_complete_expand_method (tree mdecl)
*** 11866,11876 ****
    current_this = (!METHOD_STATIC (mdecl) ?
  		  BLOCK_EXPR_DECLS (DECL_FUNCTION_BODY (mdecl)) : NULL_TREE);
  
-   /* Purge the `throws' list of unchecked exceptions (we save a copy
-      of the list and re-install it later.) */
-   exception_copy = copy_list (DECL_FUNCTION_THROWS (mdecl));
-   purge_unchecked_exceptions (mdecl);
- 
    /* Install exceptions thrown with `throws' */
    PUSH_EXCEPTIONS (DECL_FUNCTION_THROWS (mdecl));
  
--- 11860,11865 ----
*************** java_complete_expand_method (tree mdecl)
*** 11883,11889 ****
        htab_traverse (DECL_FUNCTION_INIT_TEST_TABLE (mdecl),
  		     attach_init_test_initialization_flags, block_body);
  
!       if (! flag_emit_xref && ! METHOD_NATIVE (mdecl))
  	{
  	  check_for_initialization (block_body, mdecl);
  
--- 11872,11878 ----
        htab_traverse (DECL_FUNCTION_INIT_TEST_TABLE (mdecl),
  		     attach_init_test_initialization_flags, block_body);
  
!       if (! METHOD_NATIVE (mdecl))
  	{
  	  check_for_initialization (block_body, mdecl);
  
*************** java_complete_expand_method (tree mdecl)
*** 11913,11920 ****
       an error_mark_node here. */
    if (block_body != error_mark_node
        && (block_body == NULL_TREE || CAN_COMPLETE_NORMALLY (block_body))
!       && TREE_CODE (TREE_TYPE (TREE_TYPE (mdecl))) != VOID_TYPE
!       && !flag_emit_xref)
      missing_return_error (current_function_decl);
  
    /* See if we can get rid of <clinit> if MDECL happens to be <clinit> */
--- 11902,11908 ----
       an error_mark_node here. */
    if (block_body != error_mark_node
        && (block_body == NULL_TREE || CAN_COMPLETE_NORMALLY (block_body))
!       && TREE_CODE (TREE_TYPE (TREE_TYPE (mdecl))) != VOID_TYPE)
      missing_return_error (current_function_decl);
  
    /* See if we can get rid of <clinit> if MDECL happens to be <clinit> */
*************** java_complete_expand_method (tree mdecl)
*** 11929,11937 ****
    POP_EXCEPTIONS();
    if (currently_caught_type_list)
      abort ();
- 
-   /* Restore the copy of the list of exceptions if emitting xrefs. */
-   DECL_FUNCTION_THROWS (mdecl) = exception_copy;
  }
  
  /* For with each class for which there's code to generate. */
--- 11917,11922 ----
*************** java_expand_method_bodies (tree class)
*** 11996,12109 ****
     fields either directly by using the relevant access to this$<n> or
     by invoking an access method crafted for that purpose.  */
  
! /* Build the necessary access from an inner class to an outer
!    class. This routine could be optimized to cache previous result
     (decl, current_class and returned access).  When an access method
!    needs to be generated, it always takes the form of a read. It might
!    be later turned into a write by calling outer_field_access_fix.  */
  
  static tree
! build_outer_field_access (tree id, tree decl)
  {
    tree access = NULL_TREE;
!   tree ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class)));
    tree decl_ctx = DECL_CONTEXT (decl);
  
!   /* If the immediate enclosing context of the current class is the
!      field decl's class or inherits from it; build the access as
!      `this$<n>.<field>'. Note that we will break the `private' barrier
!      if we're not emitting bytecodes. */
!   if ((ctx == decl_ctx || inherits_from_p (ctx, decl_ctx))
!       && (!FIELD_PRIVATE (decl) || !flag_emit_class_files ))
      {
        tree thisn = build_current_thisn (current_class);
        access = make_qualified_primary (build_wfl_node (thisn),
  				       id, EXPR_WFL_LINECOL (id));
      }
!   /* Otherwise, generate access methods to outer this and access the
!      field (either using an access method or by direct access.) */
    else
      {
        int lc = EXPR_WFL_LINECOL (id);
  
        /* Now we chain the required number of calls to the access$0 to
! 	 get a hold to the enclosing instance we need, and then we
! 	 build the field access. */
!       access = build_access_to_thisn (current_class, decl_ctx, lc);
  
        /* If the field is private and we're generating bytecode, then
!          we generate an access method */
!       if (FIELD_PRIVATE (decl) && flag_emit_class_files )
  	{
! 	  tree name = build_outer_field_access_methods (decl);
! 	  access = build_outer_field_access_expr (lc, decl_ctx,
! 						  name, access, NULL_TREE);
  	}
!       /* Otherwise we use `access$(this$<j>). ... access$(this$<i>).<field>'.
  	 Once again we break the `private' access rule from a foreign
! 	 class. */
        else
! 	access = make_qualified_primary (access, id, lc);
      }
    return resolve_expression_name (access, NULL);
  }
  
! /* Return a nonzero value if NODE describes an outer field inner
!    access.  */
  
  static int
! outer_field_access_p (tree type, tree decl)
  {
    if (!INNER_CLASS_TYPE_P (type)
!       || TREE_CODE (decl) != FIELD_DECL
!       || DECL_CONTEXT (decl) == type)
      return 0;
  
!   /* If the inner class extends the declaration context of the field
!      we're trying to access, then this isn't an outer field access */
!   if (inherits_from_p (type, DECL_CONTEXT (decl)))
      return 0;
  
!   for (type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type))); ;
!        type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type))))
      {
!       if (type == DECL_CONTEXT (decl))
! 	return 1;
  
!       if (!DECL_CONTEXT (TYPE_NAME (type)))
! 	{
! 	  /* Before we give up, see whether the field is inherited from
! 	     the enclosing context we're considering. */
! 	  if (inherits_from_p (type, DECL_CONTEXT (decl)))
! 	    return 1;
! 	  break;
! 	}
      }
  
    return 0;
  }
  
! /* Return a nonzero value if NODE represents an outer field inner
!    access that was been already expanded. As a side effect, it returns
     the name of the field being accessed and the argument passed to the
     access function, suitable for a regeneration of the access method
!    call if necessary. */
  
  static int
! outer_field_expanded_access_p (tree node, tree *name, tree *arg_type,
! 			       tree *arg)
  {
    int identified = 0;
  
    if (TREE_CODE (node) != CALL_EXPR)
      return 0;
  
!   /* Well, gcj generates slightly different tree nodes when compiling
!      to native or bytecodes. It's the case for function calls. */
  
    if (flag_emit_class_files
        && TREE_CODE (node) == CALL_EXPR
!       && OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0))))
      identified = 1;
    else if (!flag_emit_class_files)
      {
--- 11981,12143 ----
     fields either directly by using the relevant access to this$<n> or
     by invoking an access method crafted for that purpose.  */
  
! /* Build the necessary access across nested class boundaries.
!    This routine could be optimized to cache previous result
     (decl, current_class and returned access).  When an access method
!    needs to be generated, it always takes the form of a read.  It might
!    be later turned into a write by calling nested_field_access_fix.  */
  
  static tree
! build_nested_field_access (tree id, tree decl)
  {
    tree access = NULL_TREE;
!   tree ctx = NULL_TREE;
    tree decl_ctx = DECL_CONTEXT (decl);
+   bool is_static = FIELD_STATIC (decl);
  
!   if (DECL_CONTEXT (TYPE_NAME (current_class)))
!     ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class)));
! 
!   /* For non-static fields, if the immediate enclosing context of the
!      current class is the field decl's class or inherits from it,
!      build the access as `this$<n>.<field>'.  Note that we will break
!      the `private' barrier if we're not emitting bytecodes.  */
!   if (!is_static
!       && ctx
!       && (ctx == decl_ctx || inherits_from_p (ctx, decl_ctx))
!       && (!FIELD_PRIVATE (decl) || !flag_emit_class_files))
      {
        tree thisn = build_current_thisn (current_class);
        access = make_qualified_primary (build_wfl_node (thisn),
  				       id, EXPR_WFL_LINECOL (id));
      }
!   /* Otherwise, generate and use accessor methods for the field as
!      needed.  */
    else
      {
        int lc = EXPR_WFL_LINECOL (id);
  
        /* Now we chain the required number of calls to the access$0 to
! 	 get a hold to the enclosing instance we need for a non-static
!          field, and then we build the field access. */
!       if (!is_static)
!         access = build_access_to_thisn (current_class, decl_ctx, lc);
  
        /* If the field is private and we're generating bytecode, then
!          we generate an access method.  */
!       if (FIELD_PRIVATE (decl) && flag_emit_class_files)
  	{
! 	  tree name = build_nested_field_access_methods (decl);
! 	  access = build_nested_field_access_expr (lc, decl_ctx,
! 						   name, access, NULL_TREE);
  	}
!       /* Otherwise we use `access$(this$<j>). ... access$(this$<i>).<field>'
!          for non-static fields.
  	 Once again we break the `private' access rule from a foreign
! 	 class.  */
!       else if (is_static)
!         {
!           tree class_name = DECL_NAME (TYPE_NAME (decl_ctx));
!           access
!             = make_qualified_primary (build_wfl_node (class_name), id, lc);
!         }
        else
!         access = make_qualified_primary (access, id, lc);
      }
+ 
    return resolve_expression_name (access, NULL);
  }
  
! /* Return a nonzero value if DECL describes a member access across nested
!    class boundaries.  That is, DECL is in a class that either encloses,
!    is enclosed by or shares a common enclosing class with the class
!    TYPE.  */
  
  static int
! nested_member_access_p (tree type, tree decl)
  {
+   bool is_static = false;
+   tree decl_type = DECL_CONTEXT (decl);
+   tree type_root, decl_type_root;
+ 
+   if (decl_type == type
+       || (TREE_CODE (decl) != FIELD_DECL
+           && TREE_CODE (decl) != VAR_DECL
+           && TREE_CODE (decl) != FUNCTION_DECL))
+     return 0;
+   
    if (!INNER_CLASS_TYPE_P (type)
!       && !(TREE_CODE (decl_type) == RECORD_TYPE
!            && INNER_CLASS_TYPE_P (decl_type)))
      return 0;
  
!   is_static = (TREE_CODE (decl) == FUNCTION_DECL)
!               ? METHOD_STATIC (decl)
!               : FIELD_STATIC (decl);
! 
!   /* If TYPE extends the declaration context of the non-static
!      member we're trying to access, then this isn't a nested member
!      access we need to worry about.  */
!   if (!is_static && inherits_from_p (type, decl_type))
      return 0;
  
!   for (type_root = type;
!        DECL_CONTEXT (TYPE_NAME (type_root));
!        type_root = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type_root))))
      {
!       if (type_root == decl_type)
!         return 1;
!     }
  
!   if (TREE_CODE (decl_type) == RECORD_TYPE
!       && INNER_CLASS_TYPE_P (decl_type))
!     {
!       for (decl_type_root = decl_type;
!            DECL_CONTEXT (TYPE_NAME (decl_type_root));
!            decl_type_root
!              = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (decl_type_root))))
!         {
!           if (decl_type_root == type)
!             return 1;
!         }
      }
+   else
+     decl_type_root = decl_type;
+     
+   if (type_root == decl_type_root)
+     return 1;
+ 
+   /* Before we give up, see whether it is a non-static field
+      inherited from the enclosing context we are considering.  */
+   if (!DECL_CONTEXT (TYPE_NAME (type_root))
+       && !is_static
+       && inherits_from_p (type_root, decl_type))
+     return 1;
  
    return 0;
  }
  
! /* Return a nonzero value if NODE represents a cross-nested-class 
!    access that has already been expanded.  As a side effect, it returns
     the name of the field being accessed and the argument passed to the
     access function, suitable for a regeneration of the access method
!    call if necessary.  */
  
  static int
! nested_field_expanded_access_p (tree node, tree *name, tree *arg_type,
! 			        tree *arg)
  {
    int identified = 0;
  
    if (TREE_CODE (node) != CALL_EXPR)
      return 0;
  
!   /* Well, GCJ generates slightly different tree nodes when compiling
!      to native or bytecodes.  It's the case for function calls.  */
  
    if (flag_emit_class_files
        && TREE_CODE (node) == CALL_EXPR
!       && NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0))))
      identified = 1;
    else if (!flag_emit_class_files)
      {
*************** outer_field_expanded_access_p (tree node
*** 12115,12121 ****
  	  node = TREE_OPERAND (node, 0);
  	  if (TREE_OPERAND (node, 0)
  	      && TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL
! 	      && (OUTER_FIELD_ACCESS_IDENTIFIER_P
  		  (DECL_NAME (TREE_OPERAND (node, 0)))))
  	    identified = 1;
  	}
--- 12149,12155 ----
  	  node = TREE_OPERAND (node, 0);
  	  if (TREE_OPERAND (node, 0)
  	      && TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL
! 	      && (NESTED_FIELD_ACCESS_IDENTIFIER_P
  		  (DECL_NAME (TREE_OPERAND (node, 0)))))
  	    identified = 1;
  	}
*************** outer_field_expanded_access_p (tree node
*** 12125,12150 ****
      {
        tree argument = TREE_OPERAND (node, 1);
        *name = DECL_NAME (TREE_OPERAND (node, 0));
!       *arg_type = TREE_TYPE (TREE_TYPE (TREE_VALUE (argument)));
!       *arg = TREE_VALUE (argument);
      }
    return identified;
  }
  
! /* Detect in NODE an outer field read access from an inner class and
!    transform it into a write with RHS as an argument. This function is
!    called from the java_complete_lhs when an assignment to a LHS can
!    be identified. */
  
  static tree
! outer_field_access_fix (tree wfl, tree node, tree rhs)
  {
    tree name, arg_type, arg;
  
!   if (outer_field_expanded_access_p (node, &name, &arg_type, &arg))
      {
!       node = build_outer_field_access_expr (EXPR_WFL_LINECOL (wfl),
! 					    arg_type, name, arg, rhs);
        return java_complete_tree (node);
      }
    return NULL_TREE;
--- 12159,12195 ----
      {
        tree argument = TREE_OPERAND (node, 1);
        *name = DECL_NAME (TREE_OPERAND (node, 0));
! 
!       /* The accessors for static fields do not take in a this$<n> argument,
!          so we take the class name from the accessor's context instead.  */
!       if (argument)
!         {
!           *arg_type = TREE_TYPE (TREE_TYPE (TREE_VALUE (argument)));
!           *arg = TREE_VALUE (argument);
!         }
!       else
!         {
!           *arg_type = DECL_CONTEXT (TREE_OPERAND (node, 0));
!           *arg = NULL_TREE;
!         }
      }
    return identified;
  }
  
! /* Detect in NODE cross-nested-class field read access and
!    transform it into a write with RHS as an argument.  This function
!    is called from the java_complete_lhs when an assignment to a LHS can
!    be identified.  */
  
  static tree
! nested_field_access_fix (tree wfl, tree node, tree rhs)
  {
    tree name, arg_type, arg;
  
!   if (nested_field_expanded_access_p (node, &name, &arg_type, &arg))
      {
!       node = build_nested_field_access_expr (EXPR_WFL_LINECOL (wfl),
! 					     arg_type, name, arg, rhs);
        return java_complete_tree (node);
      }
    return NULL_TREE;
*************** outer_field_access_fix (tree wfl, tree n
*** 12157,12179 ****
     read access.  */
  
  static tree
! build_outer_field_access_expr (int lc, tree type, tree access_method_name,
! 			       tree arg1, tree arg2)
  {
    tree args, cn, access;
  
!   args = arg1 ? arg1 :
!     build_wfl_node (build_current_thisn (current_class));
!   args = build_tree_list (NULL_TREE, args);
  
    if (arg2)
!     args = tree_cons (NULL_TREE, arg2, args);
  
!   access = build_method_invocation (build_wfl_node (access_method_name), args);
    cn = build_wfl_node (DECL_NAME (TYPE_NAME (type)));
    return make_qualified_primary (cn, access, lc);
  }
  
  static tree
  build_new_access_id (void)
  {
--- 12202,12235 ----
     read access.  */
  
  static tree
! build_nested_field_access_expr (int lc, tree type, tree access_method_name,
! 			        tree arg1, tree arg2)
  {
    tree args, cn, access;
  
!   if (arg1)
!     args = build_tree_list (NULL_TREE, arg1);
!   else
!     args = NULL_TREE;
  
    if (arg2)
!     {
!       if (args)
!         args = tree_cons (NULL_TREE, arg2, args);
!       else
!         args = build_tree_list (NULL_TREE, arg2);
!     }
  
!   access
!     = build_method_invocation (build_wfl_node (access_method_name), args);
    cn = build_wfl_node (DECL_NAME (TYPE_NAME (type)));
+ 
    return make_qualified_primary (cn, access, lc);
  }
  
+ /* Build the name of a synthetic accessor used to access class members
+    across nested class boundaries.  */
+ 
  static tree
  build_new_access_id (void)
  {
*************** build_new_access_id (void)
*** 12184,12191 ****
    return get_identifier (buffer);
  }
  
! /* Create the static access functions for the outer field DECL. We define a
!    read:
       TREE_TYPE (<field>) access$<n> (DECL_CONTEXT (<field>) inst$) {
         return inst$.field;
       }
--- 12240,12247 ----
    return get_identifier (buffer);
  }
  
! /* Create the static access functions for the cross-nested-class field DECL.
!    We define a read:
       TREE_TYPE (<field>) access$<n> (DECL_CONTEXT (<field>) inst$) {
         return inst$.field;
       }
*************** build_new_access_id (void)
*** 12194,12256 ****
                                       TREE_TYPE (<field>) value$) {
         return inst$.field = value$;
       }
!    We should have a usage flags on the DECL so we can lazily turn the ones
!    we're using for code generation. FIXME.
  */
  
  static tree
! build_outer_field_access_methods (tree decl)
  {
!   tree id, args, stmt, mdecl;
  
!   if (FIELD_INNER_ACCESS_P (decl))
!     return FIELD_INNER_ACCESS (decl);
  
    MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
  
!   /* Create the identifier and a function named after it. */
    id = build_new_access_id ();
  
    /* The identifier is marked as bearing the name of a generated write
!      access function for outer field accessed from inner classes. */
!   OUTER_FIELD_ACCESS_IDENTIFIER_P (id) = 1;
  
!   /* Create the read access */
!   args = build_tree_list (inst_id, build_pointer_type (DECL_CONTEXT (decl)));
!   TREE_CHAIN (args) = end_params_node;
!   stmt = make_qualified_primary (build_wfl_node (inst_id),
! 				 build_wfl_node (DECL_NAME (decl)), 0);
    stmt = build_return (0, stmt);
!   mdecl = build_outer_field_access_method (DECL_CONTEXT (decl),
! 					   TREE_TYPE (decl), id, args, stmt);
    DECL_FUNCTION_ACCESS_DECL (mdecl) = decl;
  
!   /* Create the write access method. No write access for final variable */
    if (!FIELD_FINAL (decl))
      {
!       args = build_tree_list (inst_id,
! 			      build_pointer_type (DECL_CONTEXT (decl)));
!       TREE_CHAIN (args) = build_tree_list (wpv_id, TREE_TYPE (decl));
!       TREE_CHAIN (TREE_CHAIN (args)) = end_params_node;
!       stmt = make_qualified_primary (build_wfl_node (inst_id),
! 				     build_wfl_node (DECL_NAME (decl)), 0);
        stmt = build_return (0, build_assignment (ASSIGN_TK, 0, stmt,
  						build_wfl_node (wpv_id)));
!       mdecl = build_outer_field_access_method (DECL_CONTEXT (decl),
! 					       TREE_TYPE (decl), id,
! 					       args, stmt);
      }
    DECL_FUNCTION_ACCESS_DECL (mdecl) = decl;
  
    /* Return the access name */
!   return FIELD_INNER_ACCESS (decl) = id;
  }
  
! /* Build an field access method NAME.  */
  
  static tree
! build_outer_field_access_method (tree class, tree type, tree name,
! 				 tree args, tree body)
  {
    tree saved_current_function_decl, mdecl;
  
--- 12250,12338 ----
                                       TREE_TYPE (<field>) value$) {
         return inst$.field = value$;
       }
!    For static fields, these methods are generated without the instance
!    parameter.
!    We should have a usage flag on the DECL so we can lazily turn the ones
!    we're using for code generation.  FIXME.
  */
  
  static tree
! build_nested_field_access_methods (tree decl)
  {
!   tree id, args, stmt, mdecl, class_name = NULL_TREE;
!   bool is_static = FIELD_STATIC (decl);
  
!   if (FIELD_NESTED_ACCESS_P (decl))
!     return FIELD_NESTED_ACCESS (decl);
  
    MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
  
!   /* Create the identifier and a function named after it.  */
    id = build_new_access_id ();
  
    /* The identifier is marked as bearing the name of a generated write
!      access function for outer field accessed from inner classes.  */
!   NESTED_FIELD_ACCESS_IDENTIFIER_P (id) = 1;
  
!   /* Create the read access.  */
!   if (!is_static)
!     {
!       args = build_tree_list (inst_id,
!                               build_pointer_type (DECL_CONTEXT (decl)));
!       TREE_CHAIN (args) = end_params_node;
!       stmt = make_qualified_primary (build_wfl_node (inst_id),
! 				     build_wfl_node (DECL_NAME (decl)), 0);
!     }
!   else
!     {
!       args = end_params_node;
!       class_name = DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)));
!       stmt = make_qualified_primary (build_wfl_node (class_name),
!                                      build_wfl_node (DECL_NAME (decl)), 0);
!     }
    stmt = build_return (0, stmt);
!   mdecl = build_nested_field_access_method (DECL_CONTEXT (decl),
! 					    TREE_TYPE (decl), id, args, stmt);
    DECL_FUNCTION_ACCESS_DECL (mdecl) = decl;
  
!   /* Create the write access method.  No write access for final variable */
    if (!FIELD_FINAL (decl))
      {
!       if (!is_static)
!         {
!           args = build_tree_list (inst_id,
! 			          build_pointer_type (DECL_CONTEXT (decl)));
!           TREE_CHAIN (args) = build_tree_list (wpv_id, TREE_TYPE (decl));
!           TREE_CHAIN (TREE_CHAIN (args)) = end_params_node;
!           stmt = make_qualified_primary (build_wfl_node (inst_id),
! 				         build_wfl_node (DECL_NAME (decl)),
!                                          0);
!         }
!       else
!         {
!           args = build_tree_list (wpv_id, TREE_TYPE (decl));
!           TREE_CHAIN (args) = end_params_node;
!           stmt = make_qualified_primary (build_wfl_node (class_name),
!                                          build_wfl_node (DECL_NAME (decl)),
!                                          0);
!         }
        stmt = build_return (0, build_assignment (ASSIGN_TK, 0, stmt,
  						build_wfl_node (wpv_id)));
!       mdecl = build_nested_field_access_method (DECL_CONTEXT (decl),
! 					        TREE_TYPE (decl), id,
! 					        args, stmt);
      }
    DECL_FUNCTION_ACCESS_DECL (mdecl) = decl;
  
    /* Return the access name */
!   return FIELD_NESTED_ACCESS (decl) = id;
  }
  
! /* Build a field access method NAME.  */
  
  static tree
! build_nested_field_access_method (tree class, tree type, tree name,
! 				  tree args, tree body)
  {
    tree saved_current_function_decl, mdecl;
  
*************** build_outer_field_access_method (tree cl
*** 12271,12280 ****
  
  
  /* This section deals with building access function necessary for
!    certain kinds of method invocation from inner classes.  */
  
  static tree
! build_outer_method_access_method (tree decl)
  {
    tree saved_current_function_decl, mdecl;
    tree args = NULL_TREE, call_args = NULL_TREE;
--- 12353,12362 ----
  
  
  /* This section deals with building access function necessary for
!    certain kinds of method invocation across nested class boundaries.  */
  
  static tree
! build_nested_method_access_method (tree decl)
  {
    tree saved_current_function_decl, mdecl;
    tree args = NULL_TREE, call_args = NULL_TREE;
*************** build_outer_method_access_method (tree d
*** 12294,12300 ****
  
    /* Obtain an access identifier and mark it */
    id = build_new_access_id ();
!   OUTER_FIELD_ACCESS_IDENTIFIER_P (id) = 1;
  
    carg = TYPE_ARG_TYPES (TREE_TYPE (decl));
    /* Create the arguments, as much as the original */
--- 12376,12382 ----
  
    /* Obtain an access identifier and mark it */
    id = build_new_access_id ();
!   NESTED_FIELD_ACCESS_IDENTIFIER_P (id) = 1;
  
    carg = TYPE_ARG_TYPES (TREE_TYPE (decl));
    /* Create the arguments, as much as the original */
*************** build_outer_method_access_method (tree d
*** 12323,12330 ****
    start_artificial_method_body (mdecl);
  
    /* The actual method invocation uses the same args. When invoking a
!      static methods that way, we don't want to skip the first
!      argument. */
    carg = args;
    if (!METHOD_STATIC (decl))
      carg = TREE_CHAIN (carg);
--- 12405,12411 ----
    start_artificial_method_body (mdecl);
  
    /* The actual method invocation uses the same args. When invoking a
!      static methods that way, we don't want to skip the first argument.  */
    carg = args;
    if (!METHOD_STATIC (decl))
      carg = TREE_CHAIN (carg);
*************** build_outer_method_access_method (tree d
*** 12343,12352 ****
    end_artificial_method_body (mdecl);
    current_function_decl = saved_current_function_decl;
  
!   /* Back tag the access function so it know what it accesses */
    DECL_FUNCTION_ACCESS_DECL (decl) = mdecl;
  
!   /* Tag the current method so it knows it has an access generated */
    return DECL_FUNCTION_INNER_ACCESS (decl) = mdecl;
  }
  
--- 12424,12433 ----
    end_artificial_method_body (mdecl);
    current_function_decl = saved_current_function_decl;
  
!   /* Back tag the access function so it know what it accesses.  */
    DECL_FUNCTION_ACCESS_DECL (decl) = mdecl;
  
!   /* Tag the current method so it knows it has an access generated.  */
    return DECL_FUNCTION_INNER_ACCESS (decl) = mdecl;
  }
  
*************** build_outer_method_access_method (tree d
*** 12360,12366 ****
     others. Access methods to this$<n> are build on the fly if
     necessary. This CAN'T be used to solely access this$<n-1> from
     this$<n> (which alway yield to special cases and optimization, see
!    for example build_outer_field_access).  */
  
  static tree
  build_access_to_thisn (tree from, tree to, int lc)
--- 12441,12447 ----
     others. Access methods to this$<n> are build on the fly if
     necessary. This CAN'T be used to solely access this$<n-1> from
     this$<n> (which alway yield to special cases and optimization, see
!    for example build_nested_field_access).  */
  
  static tree
  build_access_to_thisn (tree from, tree to, int lc)
*************** fix_constructors (tree mdecl)
*** 12651,12657 ****
        /* It is an error for the compiler to generate a default
  	 constructor if the superclass doesn't have a constructor that
  	 takes no argument, or the same args for an anonymous class */
!       if (verify_constructor_super (mdecl))
  	{
  	  tree sclass_decl = TYPE_NAME (CLASSTYPE_SUPER (class_type));
  	  tree save = DECL_NAME (mdecl);
--- 12732,12739 ----
        /* It is an error for the compiler to generate a default
  	 constructor if the superclass doesn't have a constructor that
  	 takes no argument, or the same args for an anonymous class */
!       tree sdecl = get_constructor_super (mdecl);
!       if (sdecl == NULL_TREE)
  	{
  	  tree sclass_decl = TYPE_NAME (CLASSTYPE_SUPER (class_type));
  	  tree save = DECL_NAME (mdecl);
*************** fix_constructors (tree mdecl)
*** 12664,12669 ****
--- 12746,12758 ----
  	  DECL_NAME (mdecl) = save;
  	}
  
+       if (ANONYMOUS_CLASS_P (class_type))
+ 	{
+ 	  /* Copy throws clause from the super constructor.  */
+ 	  tree throws = DECL_FUNCTION_THROWS (sdecl);
+ 	  DECL_FUNCTION_THROWS (mdecl) = copy_list (throws);
+ 	}
+ 
        /* The constructor body must be crafted by hand. It's the
  	 constructor we defined when we realize we didn't have the
  	 CLASSNAME() constructor */
*************** fix_constructors (tree mdecl)
*** 12748,12766 ****
  }
  
  /* Browse constructors in the super class, searching for a constructor
!    that doesn't take any argument. Return 0 if one is found, 1
!    otherwise.  If the current class is an anonymous inner class, look
!    for something that has the same signature. */
! 
! static int
! verify_constructor_super (tree mdecl)
  {
    tree class = CLASSTYPE_SUPER (current_class);
    int super_inner = PURE_INNER_CLASS_TYPE_P (class);
    tree sdecl;
  
    if (!class)
!     return 0;
  
    if (ANONYMOUS_CLASS_P (current_class))
      {
--- 12837,12854 ----
  }
  
  /* Browse constructors in the super class, searching for a constructor
!    that doesn't take any argument. Return the constructor if one is found, 
!    NULL_TREE otherwise.  If the current class is an anonymous inner class, 
!    look for something that has the same signature. */
! static tree
! get_constructor_super (tree mdecl)
  {
    tree class = CLASSTYPE_SUPER (current_class);
    int super_inner = PURE_INNER_CLASS_TYPE_P (class);
    tree sdecl;
  
    if (!class)
!     return NULL_TREE;
  
    if (ANONYMOUS_CLASS_P (current_class))
      {
*************** verify_constructor_super (tree mdecl)
*** 12784,12790 ****
  		break;
  
  	    if (arg_type == end_params_node && m_arg_type == end_params_node)
! 	      return 0;
  	  }
      }
    else
--- 12872,12878 ----
  		break;
  
  	    if (arg_type == end_params_node && m_arg_type == end_params_node)
! 	      return sdecl;
  	  }
      }
    else
*************** verify_constructor_super (tree mdecl)
*** 12795,12804 ****
  	  if (super_inner)
  	    arg = TREE_CHAIN (arg);
  	  if (DECL_CONSTRUCTOR_P (sdecl) && arg == end_params_node)
! 	    return 0;
  	}
      }
!   return 1;
  }
  
  /* Generate code for all context remembered for code generation.  */
--- 12883,12892 ----
  	  if (super_inner)
  	    arg = TREE_CHAIN (arg);
  	  if (DECL_CONSTRUCTOR_P (sdecl) && arg == end_params_node)
! 	    return sdecl;
  	}
      }
!   return NULL_TREE;
  }
  
  /* Generate code for all context remembered for code generation.  */
*************** java_expand_classes (void)
*** 12916,12925 ****
  #endif
  
    /* If we've found error at that stage, don't try to generate
!      anything, unless we're emitting xrefs or checking the syntax only
       (but not using -fsyntax-only for the purpose of generating
!      bytecode. */
!   if (java_error_count && !flag_emit_xref
        && (!flag_syntax_only && !flag_emit_class_files))
      return;
  
--- 13004,13013 ----
  #endif
  
    /* If we've found error at that stage, don't try to generate
!      anything, unless we're checking the syntax only
       (but not using -fsyntax-only for the purpose of generating
!      bytecode).  */
!   if (java_error_count
        && (!flag_syntax_only && !flag_emit_class_files))
      return;
  
*************** java_expand_classes (void)
*** 12965,12972 ****
  	  output_class = current_class = TREE_TYPE (TREE_VALUE (current));
  	  if (flag_emit_class_files)
  	    write_classfile (current_class);
- 	  if (flag_emit_xref)
- 	    expand_xref (current_class);
  	  else if (! flag_syntax_only)
  	    java_expand_method_bodies (current_class);
  	}
--- 13053,13058 ----
*************** resolve_expression_name (tree id, tree *
*** 13165,13179 ****
  
  	      /* If we're processing an inner class and we're trying
  		 to access a field belonging to an outer class, build
! 		 the access to the field */
! 	      if (!fs && outer_field_access_p (current_class, decl))
  		{
! 		  if (CLASS_STATIC (TYPE_NAME (current_class)))
  		    {
  		      static_ref_err (id, DECL_NAME (decl), current_class);
  		      return error_mark_node;
  		    }
! 		  access = build_outer_field_access (id, decl);
  		  if (orig)
  		    *orig = access;
  		  return access;
--- 13251,13272 ----
  
  	      /* If we're processing an inner class and we're trying
  		 to access a field belonging to an outer class, build
! 		 the access to the field.
! 		 As usual, we have to treat initialized static final
! 		 variables as a special case.  */
!               if (nested_member_access_p (current_class, decl)
!                   && ! (JDECL_P (decl) && CLASS_FINAL_VARIABLE_P (decl)
!                         && DECL_INITIAL (decl) != NULL_TREE
! 			&& (JSTRING_TYPE_P (TREE_TYPE (decl))
! 			    || JNUMERIC_TYPE_P (TREE_TYPE (decl)))
! 			&& TREE_CONSTANT (DECL_INITIAL (decl))))
  		{
! 		  if (!fs && CLASS_STATIC (TYPE_NAME (current_class)))
  		    {
  		      static_ref_err (id, DECL_NAME (decl), current_class);
  		      return error_mark_node;
  		    }
! 		  access = build_nested_field_access (id, decl);
  		  if (orig)
  		    *orig = access;
  		  return access;
*************** resolve_field_access (tree qual_wfl, tre
*** 13253,13269 ****
    /* Resolve the LENGTH field of an array here */
    if (DECL_P (decl) && DECL_NAME (decl) == length_identifier_node
        && type_found && TYPE_ARRAY_P (type_found)
!       && ! flag_emit_class_files && ! flag_emit_xref)
      {
        tree length = build_java_array_length_access (where_found);
        field_ref = length;
  
        /* In case we're dealing with a static array, we need to
! 	 initialize its class before the array length can be fetched.
! 	 It's also a good time to create a DECL_RTL for the field if
! 	 none already exists, otherwise if the field was declared in a
! 	 class found in an external file and hasn't been (and won't
! 	 be) accessed for its value, none will be created. */
        if (TREE_CODE (where_found) == VAR_DECL && FIELD_STATIC (where_found))
  	{
  	  build_static_field_ref (where_found);
--- 13346,13358 ----
    /* Resolve the LENGTH field of an array here */
    if (DECL_P (decl) && DECL_NAME (decl) == length_identifier_node
        && type_found && TYPE_ARRAY_P (type_found)
!       && ! flag_emit_class_files)
      {
        tree length = build_java_array_length_access (where_found);
        field_ref = length;
  
        /* In case we're dealing with a static array, we need to
! 	 initialize its class before the array length can be fetched.  */
        if (TREE_CODE (where_found) == VAR_DECL && FIELD_STATIC (where_found))
  	{
  	  build_static_field_ref (where_found);
*************** resolve_field_access (tree qual_wfl, tre
*** 13279,13285 ****
        if (!type_found)
  	type_found = DECL_CONTEXT (decl);
        is_static = FIELD_STATIC (decl);
!       field_ref = build_field_ref ((is_static && !flag_emit_xref?
  				    NULL_TREE : where_found),
  				   type_found, DECL_NAME (decl));
        if (field_ref == error_mark_node)
--- 13368,13374 ----
        if (!type_found)
  	type_found = DECL_CONTEXT (decl);
        is_static = FIELD_STATIC (decl);
!       field_ref = build_field_ref ((is_static ?
  				    NULL_TREE : where_found),
  				   type_found, DECL_NAME (decl));
        if (field_ref == error_mark_node)
*************** resolve_field_access (tree qual_wfl, tre
*** 13292,13298 ****
  	 looks like `field.ref', where `field' is a static field in an
  	 interface we implement.  */
        if (!flag_emit_class_files
- 	  && !flag_emit_xref
  	  && TREE_CODE (where_found) == VAR_DECL
  	  && FIELD_STATIC (where_found))
  	{
--- 13381,13386 ----
*************** resolve_qualified_expression_name (tree 
*** 13707,13724 ****
  	      decl = QUAL_RESOLUTION (q);
  	      if (!type)
  		{
! 		  if (TREE_CODE (decl) == FIELD_DECL && !FIELD_STATIC (decl))
  		    {
! 		      if (current_this)
! 			*where_found = current_this;
! 		      else
! 			{
! 			  static_ref_err (qual_wfl, DECL_NAME (decl),
! 					  current_class);
! 			  return 1;
! 			}
!                       if (outer_field_access_p (current_class, decl))
!                         decl = build_outer_field_access (qual_wfl, decl);
  		    }
  		  else
  		    {
--- 13795,13823 ----
  	      decl = QUAL_RESOLUTION (q);
  	      if (!type)
  		{
! 		  if (TREE_CODE (decl) == FIELD_DECL
!                       || TREE_CODE (decl) == VAR_DECL)
  		    {
!                       if (TREE_CODE (decl) == FIELD_DECL
!                           && !FIELD_STATIC (decl))
!                         {
!                	          if (current_this)
!                             *where_found = current_this;
!                           else
!                             {
!                               static_ref_err (qual_wfl, DECL_NAME (decl),
!                                               current_class);
!                               return 1;
!                             }
!                         }
!                       else
!                         {
!                           *where_found = TREE_TYPE (decl);
!                           if (TREE_CODE (*where_found) == POINTER_TYPE)
!                             *where_found = TREE_TYPE (*where_found);
!                         }
!                       if (nested_member_access_p (current_class, decl))
!                         decl = build_nested_field_access (qual_wfl, decl);
  		    }
  		  else
  		    {
*************** resolve_qualified_expression_name (tree 
*** 13827,13833 ****
  		}
  	      from_cast = from_super = 0;
  
! 	      /* It's an access from a type but it isn't static, we
  		 make it relative to `this'. */
  	      if (!is_static && from_type)
  		decl = current_this;
--- 13926,13932 ----
  		}
  	      from_cast = from_super = 0;
  
! 	      /* If it's an access from a type but isn't static, we
  		 make it relative to `this'. */
  	      if (!is_static && from_type)
  		decl = current_this;
*************** resolve_qualified_expression_name (tree 
*** 13842,13849 ****
  		    return 1;
  		}
  
! 	      /* We want to keep the location were found it, and the type
! 		 we found. */
  	      *where_found = decl;
  	      *type_found = type;
  
--- 13941,13948 ----
  		    return 1;
  		}
  
!               /* We want to keep the location where we found it, and the
!                  type we found.  */
  	      *where_found = decl;
  	      *type_found = type;
  
*************** resolve_qualified_expression_name (tree 
*** 13851,13860 ****
  		 qualified this */
  	      if (from_qualified_this)
  		{
! 		  field_decl = build_outer_field_access (qual_wfl, field_decl);
  		  from_qualified_this = 0;
  		}
  
  	      /* This is the decl found and eventually the next one to
  		 search from */
  	      decl = field_decl;
--- 13950,13967 ----
  		 qualified this */
  	      if (from_qualified_this)
  		{
! 		  field_decl
!                     = build_nested_field_access (qual_wfl, field_decl);
  		  from_qualified_this = 0;
  		}
  
+               /* If needed, generate accessors for static field access.  */
+               if (is_static
+                   && FIELD_PRIVATE (field_decl)
+                   && flag_emit_class_files
+                   && nested_member_access_p (current_class, field_decl))
+                 field_decl = build_nested_field_access (qual_wfl, field_decl);
+ 
  	      /* This is the decl found and eventually the next one to
  		 search from */
  	      decl = field_decl;
*************** check_deprecation (tree wfl, tree decl)
*** 14023,14059 ****
  
  /* Returns 1 if class was declared in the current package, 0 otherwise */
  
- static GTY(()) tree cicp_cache;
  static int
  class_in_current_package (tree class)
  {
!   int qualified_flag;
!   tree left;
! 
!   if (cicp_cache == class)
!     return 1;
! 
!   qualified_flag = QUALIFIED_P (DECL_NAME (TYPE_NAME (class)));
! 
!   /* If the current package is empty and the name of CLASS is
!      qualified, class isn't in the current package.  If there is a
!      current package and the name of the CLASS is not qualified, class
!      isn't in the current package */
!   if ((!ctxp->package && qualified_flag) || (ctxp->package && !qualified_flag))
!     return 0;
! 
!   /* If there is not package and the name of CLASS isn't qualified,
!      they belong to the same unnamed package */
!   if (!ctxp->package && !qualified_flag)
      return 1;
- 
-   /* Compare the left part of the name of CLASS with the package name */
-   split_qualified_name (&left, NULL, DECL_NAME (TYPE_NAME (class)));
-   if (ctxp->package == left)
-     {
-       cicp_cache = class;
-       return 1;
-     }
    return 0;
  }
  
--- 14130,14140 ----
  
  /* Returns 1 if class was declared in the current package, 0 otherwise */
  
  static int
  class_in_current_package (tree class)
  {
!   if (TYPE_PACKAGE (current_class) == TYPE_PACKAGE (class))
      return 1;
    return 0;
  }
  
*************** patch_method_invocation (tree patch, tre
*** 14119,14125 ****
        if (TREE_CODE (resolved) == VAR_DECL && FIELD_STATIC (resolved)
           && FIELD_FINAL (resolved)
           && !inherits_from_p (DECL_CONTEXT (resolved), current_class)
!          && !flag_emit_class_files && !flag_emit_xref)
         resolved = build_class_init (DECL_CONTEXT (resolved), resolved);
  
        if (resolved == error_mark_node)
--- 14200,14206 ----
        if (TREE_CODE (resolved) == VAR_DECL && FIELD_STATIC (resolved)
           && FIELD_FINAL (resolved)
           && !inherits_from_p (DECL_CONTEXT (resolved), current_class)
!          && !flag_emit_class_files)
         resolved = build_class_init (DECL_CONTEXT (resolved), resolved);
  
        if (resolved == error_mark_node)
*************** patch_method_invocation (tree patch, tre
*** 14152,14167 ****
  		 IDENTIFIER_POINTER (name));
  	      PATCH_METHOD_RETURN_ERROR ();
  	    }
! 	  if (list && !METHOD_STATIC (list))
  	    {
! 	      char *fct_name = xstrdup (lang_printable_name (list, 2));
! 	      parse_error_context
! 		(identifier_wfl,
! 		 "Can't make static reference to method %<%s %s%> in class %qs",
! 		 lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0),
! 		 fct_name, IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
! 	      free (fct_name);
! 	      PATCH_METHOD_RETURN_ERROR ();
  	    }
  	}
        else
--- 14233,14254 ----
  		 IDENTIFIER_POINTER (name));
  	      PATCH_METHOD_RETURN_ERROR ();
  	    }
! 	  if (list)
  	    {
!               if (METHOD_STATIC (list))
!                 maybe_use_access_method (0, &list, NULL);
!               else
!                 {
!                   char *fct_name = xstrdup (lang_printable_name (list, 2));
!                   parse_error_context
!                     (identifier_wfl,
!                      "Can't make static reference to method %<%s %s%> in class %qs",
!                      lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0),
!                      fct_name,
!                      IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
!                   free (fct_name);
!                   PATCH_METHOD_RETURN_ERROR ();
!                 }
  	    }
  	}
        else
*************** patch_method_invocation (tree patch, tre
*** 14278,14284 ****
            && DECL_NAME (list) == get_identifier ("clone"))
          is_array_clone_call = 1;
  
!       /* Check for static reference if non static methods */
        if (check_for_static_method_reference (wfl, patch, list,
  					     class_to_search, primary))
  	PATCH_METHOD_RETURN_ERROR ();
--- 14365,14371 ----
            && DECL_NAME (list) == get_identifier ("clone"))
          is_array_clone_call = 1;
  
!       /* Check for static reference of non static methods.  */
        if (check_for_static_method_reference (wfl, patch, list,
  					     class_to_search, primary))
  	PATCH_METHOD_RETURN_ERROR ();
*************** patch_method_invocation (tree patch, tre
*** 14298,14305 ****
  	}
  
        /* Non static methods are called with the current object extra
! 	 argument. If patch a `new TYPE()', the argument is the value
! 	 returned by the object allocator. If method is resolved as a
  	 primary, use the primary otherwise use the current THIS. */
        args = nreverse (args);
        if (TREE_CODE (patch) != NEW_CLASS_EXPR)
--- 14385,14392 ----
  	}
  
        /* Non static methods are called with the current object extra
! 	 argument.  If PATCH is a `new TYPE()', the argument is the value
! 	 returned by the object allocator.  If method is resolved as a
  	 primary, use the primary otherwise use the current THIS. */
        args = nreverse (args);
        if (TREE_CODE (patch) != NEW_CLASS_EXPR)
*************** patch_method_invocation (tree patch, tre
*** 14311,14326 ****
  
  	     1) We're not generating bytecodes:
  
! 	     - LIST is non static. It's invocation is transformed from
  	       x(a1,...,an) into this$<n>.x(a1,....an).
! 	     - LIST is static. It's invocation is transformed from
  	       x(a1,...,an) into TYPE_OF(this$<n>).x(a1,....an)
  
  	     2) We're generating bytecodes:
  
! 	     - LIST is non static. It's invocation is transformed from
  	       x(a1,....,an) into access$<n>(this$<n>,a1,...,an).
! 	     - LIST is static. It's invocation is transformed from
  	       x(a1,....,an) into TYPE_OF(this$<n>).x(a1,....an).
  
  	     Of course, this$<n> can be arbitrarily complex, ranging from
--- 14398,14413 ----
  
  	     1) We're not generating bytecodes:
  
! 	     - LIST is non-static.  Its invocation is transformed from
  	       x(a1,...,an) into this$<n>.x(a1,....an).
! 	     - LIST is static.  Its invocation is transformed from
  	       x(a1,...,an) into TYPE_OF(this$<n>).x(a1,....an)
  
  	     2) We're generating bytecodes:
  
! 	     - LIST is non-static.  Its invocation is transformed from
  	       x(a1,....,an) into access$<n>(this$<n>,a1,...,an).
! 	     - LIST is static.  Its invocation is transformed from
  	       x(a1,....,an) into TYPE_OF(this$<n>).x(a1,....an).
  
  	     Of course, this$<n> can be arbitrarily complex, ranging from
*************** patch_method_invocation (tree patch, tre
*** 14329,14338 ****
  
  	     maybe_use_access_method returns a nonzero value if the
  	     this_arg has to be moved into the (then generated) stub
! 	     argument list. In the meantime, the selected function
! 	     might have be replaced by a generated stub. */
! 	  if (!primary &&
! 	      maybe_use_access_method (is_super_init, &list, &this_arg))
  	    {
  	      args = tree_cons (NULL_TREE, this_arg, args);
  	      this_arg = NULL_TREE; /* So it doesn't get chained twice */
--- 14416,14427 ----
  
  	     maybe_use_access_method returns a nonzero value if the
  	     this_arg has to be moved into the (then generated) stub
! 	     argument list.  In the meantime, the selected function
! 	     might have been replaced by a generated stub.  */
!           if (METHOD_STATIC (list))
!             maybe_use_access_method (0, &list, NULL);
! 	  else if (!primary &&
! 	           maybe_use_access_method (is_super_init, &list, &this_arg))
  	    {
  	      args = tree_cons (NULL_TREE, this_arg, args);
  	      this_arg = NULL_TREE; /* So it doesn't get chained twice */
*************** check_for_static_method_reference (tree 
*** 14500,14507 ****
    return 0;
  }
  
! /* Fix the invocation of *MDECL if necessary in the case of a
!    invocation from an inner class. *THIS_ARG might be modified
     appropriately and an alternative access to *MDECL might be
     returned.  */
  
--- 14589,14596 ----
    return 0;
  }
  
! /* Fix the invocation of *MDECL if necessary in the case of an
!    invocation across a nested class.  *THIS_ARG might be modified
     appropriately and an alternative access to *MDECL might be
     returned.  */
  
*************** static int
*** 14509,14533 ****
  maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg)
  {
    tree ctx;
!   tree md = *mdecl, ta = *this_arg;
    int to_return = 0;
    int non_static_context = !METHOD_STATIC (md);
  
    if (is_super_init
-       || DECL_CONTEXT (md) == current_class
-       || !PURE_INNER_CLASS_TYPE_P (current_class)
        || DECL_FINIT_P (md)
!       || DECL_INSTINIT_P (md))
      return 0;
  
    /* If we're calling a method found in an enclosing class, generate
!      what it takes to retrieve the right this. Don't do that if we're
!      invoking a static method. Note that if MD's type is unrelated to
       CURRENT_CLASS, then the current this can be used. */
  
    if (non_static_context 
!       && !inherits_from_p (current_class, DECL_CONTEXT (md)))
      {
        ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class)));
        if (inherits_from_p (ctx, DECL_CONTEXT (md)))
  	{
--- 14598,14623 ----
  maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg)
  {
    tree ctx;
!   tree md = *mdecl, ta = NULL_TREE;
    int to_return = 0;
    int non_static_context = !METHOD_STATIC (md);
  
    if (is_super_init
        || DECL_FINIT_P (md)
!       || DECL_INSTINIT_P (md)
!       || !nested_member_access_p (current_class, md))
      return 0;
  
    /* If we're calling a method found in an enclosing class, generate
!      what it takes to retrieve the right `this'.  Don't do that if we're
!      invoking a static method.  Note that if MD's type is unrelated to
       CURRENT_CLASS, then the current this can be used. */
  
    if (non_static_context 
!       && !inherits_from_p (current_class, DECL_CONTEXT (md))
!       && DECL_CONTEXT (TYPE_NAME (current_class)))
      {
+       ta = *this_arg;
        ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class)));
        if (inherits_from_p (ctx, DECL_CONTEXT (md)))
  	{
*************** maybe_use_access_method (int is_super_in
*** 14553,14568 ****
      }
  
    /* We might have to use an access method to get to MD. We can
!      break the method access rule as far as we're not generating
!      bytecode */
    if (METHOD_PRIVATE (md) && flag_emit_class_files)
      {
!       md = build_outer_method_access_method (md);
        to_return = 1;
      }
  
    *mdecl = md;
!   *this_arg = ta;
  
    /* Returning a nonzero value indicates we were doing a non static
       method invocation that is now a static invocation. It will have
--- 14643,14659 ----
      }
  
    /* We might have to use an access method to get to MD. We can
!      break the method access rule as long as we're not generating
!      bytecode.  */
    if (METHOD_PRIVATE (md) && flag_emit_class_files)
      {
!       md = build_nested_method_access_method (md);
        to_return = 1;
      }
  
    *mdecl = md;
!   if (this_arg)
!     *this_arg = ta;
  
    /* Returning a nonzero value indicates we were doing a non static
       method invocation that is now a static invocation. It will have
*************** patch_invoke (tree patch, tree method, t
*** 14599,14605 ****
    if (TREE_CODE (t) == POINTER_TYPE && !CLASS_LOADED_P (TREE_TYPE (t)))
      resolve_and_layout (TREE_TYPE (t), NULL);
  
!   if (flag_emit_class_files || flag_emit_xref)
      func = method;
    else
      {
--- 14690,14696 ----
    if (TREE_CODE (t) == POINTER_TYPE && !CLASS_LOADED_P (TREE_TYPE (t)))
      resolve_and_layout (TREE_TYPE (t), NULL);
  
!   if (flag_emit_class_files)
      func = method;
    else
      {
*************** patch_invoke (tree patch, tree method, t
*** 14665,14671 ****
        tree c1, saved_new, new;
        tree alloc_node;
  
!       if (flag_emit_class_files || flag_emit_xref)
  	{
  	  TREE_TYPE (patch) = build_pointer_type (class);
  	  return patch;
--- 14756,14762 ----
        tree c1, saved_new, new;
        tree alloc_node;
  
!       if (flag_emit_class_files)
  	{
  	  TREE_TYPE (patch) = build_pointer_type (class);
  	  return patch;
*************** lookup_method_invoke (int lc, tree cl, t
*** 14787,14792 ****
--- 14878,14894 ----
        /* And promoted */
        if (TREE_CODE (current_arg) == RECORD_TYPE)
          current_arg = promote_type (current_arg);
+       /* If we're building an anonymous constructor call, and one of
+ 	 the arguments has array type, cast it to a size-less array
+ 	 type.  This prevents us from getting a strange gcj-specific
+ 	 "sized array" signature in the constructor's signature.  */
+       if (lc && ANONYMOUS_CLASS_P (class)
+ 	  && TREE_CODE (current_arg) == POINTER_TYPE
+ 	  && TYPE_ARRAY_P (TREE_TYPE (current_arg)))
+ 	{
+ 	  tree elt = TYPE_ARRAY_ELEMENT (TREE_TYPE (current_arg));
+ 	  current_arg = build_pointer_type (build_java_array_type (elt, -1));
+ 	}
        atl = tree_cons (NULL_TREE, current_arg, atl);
      }
  
*************** find_most_specific_methods_list (tree li
*** 15021,15033 ****
  	  if (argument_types_convertible (method_v, current_v))
  	    {
  	      if (valid_method_invocation_conversion_p
! 		  (DECL_CONTEXT (method_v), DECL_CONTEXT (current_v))
! 		  || (INNER_CLASS_TYPE_P (DECL_CONTEXT (current_v))
! 		      && enclosing_context_p (DECL_CONTEXT (method_v),
! 					      DECL_CONTEXT (current_v))))
  		{
! 		  int v = (DECL_SPECIFIC_COUNT (current_v) +=
! 		    (INNER_CLASS_TYPE_P (DECL_CONTEXT (current_v)) ? 2 : 1));
  		  max = (v > max ? v : max);
  		}
  	    }
--- 15123,15131 ----
  	  if (argument_types_convertible (method_v, current_v))
  	    {
  	      if (valid_method_invocation_conversion_p
! 		  (DECL_CONTEXT (method_v), DECL_CONTEXT (current_v)))
  		{
! 		  int v = (DECL_SPECIFIC_COUNT (current_v) += 1);
  		  max = (v > max ? v : max);
  		}
  	    }
*************** java_complete_tree (tree node)
*** 15212,15219 ****
  {
    node = java_complete_lhs (node);
    if (JDECL_P (node) && CLASS_FINAL_VARIABLE_P (node)
!       && DECL_INITIAL (node) != NULL_TREE
!       && !flag_emit_xref)
      {
        tree value = fold_constant_for_init (node, node);
        if (value != NULL_TREE)
--- 15310,15316 ----
  {
    node = java_complete_lhs (node);
    if (JDECL_P (node) && CLASS_FINAL_VARIABLE_P (node)
!       && DECL_INITIAL (node) != NULL_TREE)
      {
        tree value = fold_constant_for_init (node, node);
        if (value != NULL_TREE)
*************** java_complete_lhs (tree node)
*** 15401,15408 ****
  
        /* First, the case expression must be constant. Values of final
           fields are accepted. */
        cn = fold (cn);
!       if ((TREE_CODE (cn) == COMPOUND_EXPR || TREE_CODE (cn) == COMPONENT_REF)
  	  && JDECL_P (TREE_OPERAND (cn, 1))
  	  && FIELD_FINAL (TREE_OPERAND (cn, 1))
  	  && DECL_INITIAL (TREE_OPERAND (cn, 1)))
--- 15498,15510 ----
  
        /* First, the case expression must be constant. Values of final
           fields are accepted. */
+       nn = fold_constant_for_init (cn, NULL_TREE);
+       if (nn != NULL_TREE)
+ 	cn = nn;
+ 
        cn = fold (cn);
!       if ((TREE_CODE (cn) == COMPOUND_EXPR
! 	   || TREE_CODE (cn) == COMPONENT_REF)
  	  && JDECL_P (TREE_OPERAND (cn, 1))
  	  && FIELD_FINAL (TREE_OPERAND (cn, 1))
  	  && DECL_INITIAL (TREE_OPERAND (cn, 1)))
*************** java_complete_lhs (tree node)
*** 15415,15421 ****
  	       && DECL_INITIAL (cn))
  	cn = fold_constant_for_init (DECL_INITIAL (cn), cn);
  
!       if (!TREE_CONSTANT (cn) && !flag_emit_xref)
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (node, "Constant expression required");
--- 15517,15523 ----
  	       && DECL_INITIAL (cn))
  	cn = fold_constant_for_init (DECL_INITIAL (cn), cn);
  
!       if (!TREE_CONSTANT (cn))
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (node, "Constant expression required");
*************** java_complete_lhs (tree node)
*** 15600,15616 ****
        if (!EXPR_WFL_NODE (node) /* Or a PRIMARY flag ? */
  	  || TREE_CODE (EXPR_WFL_NODE (node)) == IDENTIFIER_NODE)
  	{
- 	  tree wfl = node;
  	  node = resolve_expression_name (node, NULL);
  	  if (node == error_mark_node)
  	    return node;
- 	  /* Keep line number information somewhere were it doesn't
- 	     disrupt the completion process. */
- 	  if (flag_emit_xref && TREE_CODE (node) != CALL_EXPR)
- 	    {
- 	      EXPR_WFL_NODE (wfl) = TREE_OPERAND (node, 1);
- 	      TREE_OPERAND (node, 1) = wfl;
- 	    }
  	  CAN_COMPLETE_NORMALLY (node) = 1;
  	}
        else
--- 15702,15710 ----
*************** java_complete_lhs (tree node)
*** 15844,15853 ****
        if ((nn = patch_string (TREE_OPERAND (node, 1))))
  	TREE_OPERAND (node, 1) = nn;
  
!       if ((nn = outer_field_access_fix (wfl_op1, TREE_OPERAND (node, 0),
! 					TREE_OPERAND (node, 1))))
  	{
! 	  /* We return error_mark_node if outer_field_access_fix
  	     detects we write into a final. */
  	  if (nn == error_mark_node)
  	    return error_mark_node;
--- 15938,15947 ----
        if ((nn = patch_string (TREE_OPERAND (node, 1))))
  	TREE_OPERAND (node, 1) = nn;
  
!       if ((nn = nested_field_access_fix (wfl_op1, TREE_OPERAND (node, 0),
! 					 TREE_OPERAND (node, 1))))
  	{
! 	  /* We return error_mark_node if nested_field_access_fix
  	     detects we write into a final. */
  	  if (nn == error_mark_node)
  	    return error_mark_node;
*************** java_complete_lhs (tree node)
*** 15921,15937 ****
  
            TREE_OPERAND (node, 1) = nn;
          }
!       return patch_binop (node, wfl_op1, wfl_op2);
  
      case INSTANCEOF_EXPR:
        wfl_op1 = TREE_OPERAND (node, 0);
        COMPLETE_CHECK_OP_0 (node);
!       if (flag_emit_xref)
! 	{
! 	  TREE_TYPE (node) = boolean_type_node;
! 	  return node;
! 	}
!       return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1));
  
      case UNARY_PLUS_EXPR:
      case NEGATE_EXPR:
--- 16015,16026 ----
  
            TREE_OPERAND (node, 1) = nn;
          }
!       return patch_binop (node, wfl_op1, wfl_op2, 0);
  
      case INSTANCEOF_EXPR:
        wfl_op1 = TREE_OPERAND (node, 0);
        COMPLETE_CHECK_OP_0 (node);
!       return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1), 0);
  
      case UNARY_PLUS_EXPR:
      case NEGATE_EXPR:
*************** java_complete_lhs (tree node)
*** 15960,15973 ****
        TREE_OPERAND (node, 0) = java_complete_tree (wfl_op1);
        if (TREE_OPERAND (node, 0) == error_mark_node)
  	return error_mark_node;
!       if (!flag_emit_class_files && !flag_emit_xref)
  	TREE_OPERAND (node, 0) = save_expr (TREE_OPERAND (node, 0));
        /* The same applies to wfl_op2 */
        wfl_op2 = TREE_OPERAND (node, 1);
        TREE_OPERAND (node, 1) = java_complete_tree (wfl_op2);
        if (TREE_OPERAND (node, 1) == error_mark_node)
  	return error_mark_node;
!       if (!flag_emit_class_files && !flag_emit_xref)
  	TREE_OPERAND (node, 1) = save_expr (TREE_OPERAND (node, 1));
        return patch_array_ref (node);
  
--- 16049,16062 ----
        TREE_OPERAND (node, 0) = java_complete_tree (wfl_op1);
        if (TREE_OPERAND (node, 0) == error_mark_node)
  	return error_mark_node;
!       if (!flag_emit_class_files)
  	TREE_OPERAND (node, 0) = save_expr (TREE_OPERAND (node, 0));
        /* The same applies to wfl_op2 */
        wfl_op2 = TREE_OPERAND (node, 1);
        TREE_OPERAND (node, 1) = java_complete_tree (wfl_op2);
        if (TREE_OPERAND (node, 1) == error_mark_node)
  	return error_mark_node;
!       if (!flag_emit_class_files)
  	TREE_OPERAND (node, 1) = save_expr (TREE_OPERAND (node, 1));
        return patch_array_ref (node);
  
*************** java_complete_lhs (tree node)
*** 15976,16001 ****
  
      case COMPONENT_REF:
        /* The first step in the re-write of qualified name handling.  FIXME.
! 	 So far, this is only to support PRIMTYPE.class -> PRIMCLASS.TYPE. */
!       TREE_OPERAND (node, 0) = java_complete_tree (TREE_OPERAND (node, 0));
!       if (TREE_CODE (TREE_OPERAND (node, 0)) == RECORD_TYPE)
! 	{
! 	  tree name = TREE_OPERAND (node, 1);
! 	  tree field = lookup_field_wrapper (TREE_OPERAND (node, 0), name);
! 	  if (field == NULL_TREE)
! 	    {
! 	      error ("missing static field %qs", IDENTIFIER_POINTER (name));
! 	      return error_mark_node;
! 	    }
! 	  if (! FIELD_STATIC (field))
! 	    {
! 	      error ("not a static field %qs", IDENTIFIER_POINTER (name));
! 	      return error_mark_node;
! 	    }
! 	  return field;
! 	}
!       else
! 	abort ();
        break;
  
      case THIS_EXPR:
--- 16065,16094 ----
  
      case COMPONENT_REF:
        /* The first step in the re-write of qualified name handling.  FIXME.
! 	 So far, this is only to support PRIMTYPE.class ->
! 	 PRIMCLASS.TYPE. */
!       {
! 	tree prim_class = TREE_OPERAND (node, 0);
! 	tree name = TREE_OPERAND (node, 1);
! 	tree field;
! 	
! 	gcc_assert (TREE_CODE (prim_class) == NOP_EXPR);
! 	prim_class = java_complete_tree (TREE_TYPE (prim_class));
! 	gcc_assert (TREE_CODE (prim_class) == RECORD_TYPE);
! 	field = lookup_field_wrapper (prim_class, name);
! 	
! 	if (field == NULL_TREE)
! 	  {
! 	    error ("missing static field %qs", IDENTIFIER_POINTER (name));
! 	    return error_mark_node;
! 	  }
! 	if (! FIELD_STATIC (field))
! 	  {
! 	    error ("not a static field %qs", IDENTIFIER_POINTER (name));
! 	    return error_mark_node;
! 	  }
! 	return field;
!       }
        break;
  
      case THIS_EXPR:
*************** patch_assignment (tree node, tree wfl_op
*** 16532,16538 ****
  
    /* 10.10: Array Store Exception runtime check */
    if (!flag_emit_class_files
-       && !flag_emit_xref
        && lvalue_from_array
        && JREFERENCE_TYPE_P (TYPE_ARRAY_ELEMENT (lhs_type)))
      {
--- 16625,16630 ----
*************** java_refold (tree t)
*** 17066,17072 ****
     of remaining nodes and detects more errors in certain cases.  */
  
  static tree
! patch_binop (tree node, tree wfl_op1, tree wfl_op2)
  {
    tree op1 = TREE_OPERAND (node, 0);
    tree op2 = TREE_OPERAND (node, 1);
--- 17158,17164 ----
     of remaining nodes and detects more errors in certain cases.  */
  
  static tree
! patch_binop (tree node, tree wfl_op1, tree wfl_op2, int folding)
  {
    tree op1 = TREE_OPERAND (node, 0);
    tree op2 = TREE_OPERAND (node, 1);
*************** patch_binop (tree node, tree wfl_op1, tr
*** 17241,17263 ****
  
        /* Shift int only up to 0x1f and long up to 0x3f */
        if (prom_type == int_type_node)
! 	op2 = fold (build2 (BIT_AND_EXPR, int_type_node, op2,
! 			    build_int_cst (NULL_TREE, 0x1f)));
        else
! 	op2 = fold (build2 (BIT_AND_EXPR, int_type_node, op2,
! 			    build_int_cst (NULL_TREE, 0x3f)));
  
        /* The >>> operator is a >> operating on unsigned quantities */
!       if (code == URSHIFT_EXPR && ! flag_emit_class_files)
  	{
  	  tree to_return;
            tree utype = java_unsigned_type (prom_type);
            op1 = convert (utype, op1);
! 	  TREE_SET_CODE (node, RSHIFT_EXPR);
!           TREE_OPERAND (node, 0) = op1;
!           TREE_OPERAND (node, 1) = op2;
!           TREE_TYPE (node) = utype;
! 	  to_return = convert (prom_type, node);
  	  /* Copy the original value of the COMPOUND_ASSIGN_P flag */
  	  COMPOUND_ASSIGN_P (to_return) = COMPOUND_ASSIGN_P (node);
  	  TREE_SIDE_EFFECTS (to_return)
--- 17333,17353 ----
  
        /* Shift int only up to 0x1f and long up to 0x3f */
        if (prom_type == int_type_node)
! 	op2 = fold_build2 (BIT_AND_EXPR, int_type_node, op2,
! 			   build_int_cst (NULL_TREE, 0x1f));
        else
! 	op2 = fold_build2 (BIT_AND_EXPR, int_type_node, op2,
! 			   build_int_cst (NULL_TREE, 0x3f));
  
        /* The >>> operator is a >> operating on unsigned quantities */
!       if (code == URSHIFT_EXPR && (folding || ! flag_emit_class_files))
  	{
  	  tree to_return;
            tree utype = java_unsigned_type (prom_type);
            op1 = convert (utype, op1);
! 
! 	  to_return = fold_build2 (RSHIFT_EXPR, utype, op1, op2);
! 	  to_return = convert (prom_type, to_return);
  	  /* Copy the original value of the COMPOUND_ASSIGN_P flag */
  	  COMPOUND_ASSIGN_P (to_return) = COMPOUND_ASSIGN_P (node);
  	  TREE_SIDE_EFFECTS (to_return)
*************** patch_binop (tree node, tree wfl_op1, tr
*** 17472,17480 ****
    TREE_TYPE (node) = prom_type;
    TREE_SIDE_EFFECTS (node) = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2);
  
-   if (flag_emit_xref)
-     return node;
- 
    /* fold does not respect side-effect order as required for Java but not C.
     * Also, it sometimes create SAVE_EXPRs which are bad when emitting
     * bytecode.
--- 17562,17567 ----
*************** build_string_concatenation (tree op1, tr
*** 17619,17627 ****
    tree result;
    int side_effects = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2);
  
-   if (flag_emit_xref)
-     return build2 (PLUS_EXPR, string_type_node, op1, op2);
- 
    /* Try to do some static optimization */
    if ((result = string_constant_concatenation (op1, op2)))
      return result;
--- 17706,17711 ----
*************** patch_unaryop (tree node, tree wfl_op)
*** 17879,17885 ****
    tree op = TREE_OPERAND (node, 0);
    tree op_type = TREE_TYPE (op);
    tree prom_type = NULL_TREE, value, decl;
!   int outer_field_flag = 0;
    int code = TREE_CODE (node);
    int error_found = 0;
  
--- 17963,17969 ----
    tree op = TREE_OPERAND (node, 0);
    tree op_type = TREE_TYPE (op);
    tree prom_type = NULL_TREE, value, decl;
!   int nested_field_flag = 0;
    int code = TREE_CODE (node);
    int error_found = 0;
  
*************** patch_unaryop (tree node, tree wfl_op)
*** 17896,17905 ****
        /* 15.14.2 Prefix Decrement Operator -- */
      case PREDECREMENT_EXPR:
        op = decl = extract_field_decl (op);
!       outer_field_flag = outer_field_expanded_access_p (op, NULL, NULL, NULL);
        /* We might be trying to change an outer field accessed using
           access method. */
!       if (outer_field_flag)
  	{
  	  /* Retrieve the decl of the field we're trying to access. We
               do that by first retrieving the function we would call to
--- 17980,17990 ----
        /* 15.14.2 Prefix Decrement Operator -- */
      case PREDECREMENT_EXPR:
        op = decl = extract_field_decl (op);
!       nested_field_flag
!         = nested_field_expanded_access_p (op, NULL, NULL, NULL);
        /* We might be trying to change an outer field accessed using
           access method. */
!       if (nested_field_flag)
  	{
  	  /* Retrieve the decl of the field we're trying to access. We
               do that by first retrieving the function we would call to
*************** patch_unaryop (tree node, tree wfl_op)
*** 17953,17967 ****
  	    }
  
  	  /* We remember we might be accessing an outer field */
! 	  if (outer_field_flag)
  	    {
  	      /* We re-generate an access to the field */
  	      value = build2 (PLUS_EXPR, TREE_TYPE (op),
! 			      build_outer_field_access (wfl_op, decl), value);
  
  	      /* And we patch the original access$() into a write
                   with plus_op as a rhs */
! 	      return outer_field_access_fix (node, op, value);
  	    }
  
  	  /* And write back into the node. */
--- 18038,18052 ----
  	    }
  
  	  /* We remember we might be accessing an outer field */
! 	  if (nested_field_flag)
  	    {
  	      /* We re-generate an access to the field */
  	      value = build2 (PLUS_EXPR, TREE_TYPE (op),
! 			      build_nested_field_access (wfl_op, decl), value);
  
  	      /* And we patch the original access$() into a write
                   with plus_op as a rhs */
! 	      return nested_field_access_fix (node, op, value);
  	    }
  
  	  /* And write back into the node. */
*************** patch_unaryop (tree node, tree wfl_op)
*** 18042,18047 ****
--- 18127,18138 ----
  	  return value;
  	}
        break;
+ 
+     case NOP_EXPR:
+       /* This can only happen when the type is already known.  */
+       gcc_assert (TREE_TYPE (node) != NULL_TREE);
+       prom_type = TREE_TYPE (node);
+       break;
      }
  
    if (error_found)
*************** patch_array_ref (tree node)
*** 18235,18241 ****
  
    array_type = TYPE_ARRAY_ELEMENT (array_type);
  
!   if (flag_emit_class_files || flag_emit_xref)
      {
        TREE_OPERAND (node, 0) = array;
        TREE_OPERAND (node, 1) = index;
--- 18326,18332 ----
  
    array_type = TYPE_ARRAY_ELEMENT (array_type);
  
!   if (flag_emit_class_files)
      {
        TREE_OPERAND (node, 0) = array;
        TREE_OPERAND (node, 1) = index;
*************** maybe_build_array_element_wfl (tree node
*** 18389,18395 ****
  static tree
  build_new_array_init (int location, tree values)
  {
!   tree constructor = build_constructor (NULL_TREE, values);
    tree to_return = build1 (NEW_ARRAY_INIT, NULL_TREE, constructor);
    EXPR_WFL_LINECOL (to_return) = location;
    return to_return;
--- 18480,18487 ----
  static tree
  build_new_array_init (int location, tree values)
  {
!   tree constructor = build_constructor_from_list (NULL_TREE,
! 						  nreverse (values));
    tree to_return = build1 (NEW_ARRAY_INIT, NULL_TREE, constructor);
    EXPR_WFL_LINECOL (to_return) = location;
    return to_return;
*************** static tree
*** 18403,18410 ****
  patch_new_array_init (tree type, tree node)
  {
    int error_seen = 0;
!   tree current, element_type;
!   HOST_WIDE_INT length;
    int all_constant = 1;
    tree init = TREE_OPERAND (node, 0);
  
--- 18495,18503 ----
  patch_new_array_init (tree type, tree node)
  {
    int error_seen = 0;
!   tree element_type;
!   unsigned HOST_WIDE_INT length;
!   constructor_elt *current;
    int all_constant = 1;
    tree init = TREE_OPERAND (node, 0);
  
*************** patch_new_array_init (tree type, tree no
*** 18418,18433 ****
    type = TREE_TYPE (type);
    element_type = TYPE_ARRAY_ELEMENT (type);
  
!   CONSTRUCTOR_ELTS (init) = nreverse (CONSTRUCTOR_ELTS (init));
! 
!   for (length = 0, current = CONSTRUCTOR_ELTS (init);
!        current;  length++, current = TREE_CHAIN (current))
      {
!       tree elt = TREE_VALUE (current);
        if (elt == NULL_TREE || TREE_CODE (elt) != NEW_ARRAY_INIT)
  	{
  	  error_seen |= array_constructor_check_entry (element_type, current);
! 	  elt = TREE_VALUE (current);
  	  /* When compiling to native code, STRING_CST is converted to
  	     INDIRECT_REF, but still with a TREE_CONSTANT flag. */
  	  if (! TREE_CONSTANT (elt) || TREE_CODE (elt) == INDIRECT_REF)
--- 18511,18526 ----
    type = TREE_TYPE (type);
    element_type = TYPE_ARRAY_ELEMENT (type);
  
!   for (length = 0;
!        VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init),
! 		    length, current);
!        length++)
      {
!       tree elt = current->value;
        if (elt == NULL_TREE || TREE_CODE (elt) != NEW_ARRAY_INIT)
  	{
  	  error_seen |= array_constructor_check_entry (element_type, current);
! 	  elt = current->value;
  	  /* When compiling to native code, STRING_CST is converted to
  	     INDIRECT_REF, but still with a TREE_CONSTANT flag. */
  	  if (! TREE_CONSTANT (elt) || TREE_CODE (elt) == INDIRECT_REF)
*************** patch_new_array_init (tree type, tree no
*** 18435,18442 ****
  	}
        else
  	{
! 	  TREE_VALUE (current) = patch_new_array_init (element_type, elt);
! 	  TREE_PURPOSE (current) = NULL_TREE;
  	  all_constant = 0;
  	}
        if (elt && TREE_CODE (elt) == TREE_LIST
--- 18528,18535 ----
  	}
        else
  	{
! 	  current->value = patch_new_array_init (element_type, elt);
! 	  current->index = NULL_TREE;
  	  all_constant = 0;
  	}
        if (elt && TREE_CODE (elt) == TREE_LIST
*************** patch_new_array_init (tree type, tree no
*** 18465,18480 ****
     otherwise.  */
  
  static int
! array_constructor_check_entry (tree type, tree entry)
  {
    char *array_type_string = NULL;	/* For error reports */
    tree value, type_value, new_value, wfl_value, patched;
    int error_seen = 0;
  
    new_value = NULL_TREE;
!   wfl_value = TREE_VALUE (entry);
  
!   value = java_complete_tree (TREE_VALUE (entry));
    /* patch_string return error_mark_node if arg is error_mark_node */
    if ((patched = patch_string (value)))
      value = patched;
--- 18558,18573 ----
     otherwise.  */
  
  static int
! array_constructor_check_entry (tree type, constructor_elt *entry)
  {
    char *array_type_string = NULL;	/* For error reports */
    tree value, type_value, new_value, wfl_value, patched;
    int error_seen = 0;
  
    new_value = NULL_TREE;
!   wfl_value = entry->value;
  
!   value = java_complete_tree (entry->value);
    /* patch_string return error_mark_node if arg is error_mark_node */
    if ((patched = patch_string (value)))
      value = patched;
*************** array_constructor_check_entry (tree type
*** 18485,18491 ****
  
    /* At anytime, try_builtin_assignconv can report a warning on
       constant overflow during narrowing. */
!   SET_WFL_OPERATOR (wfl_operator, TREE_PURPOSE (entry), wfl_value);
    new_value = try_builtin_assignconv (wfl_operator, type, value);
    if (!new_value && (new_value = try_reference_assignconv (type, value)))
      type_value = promote_type (type);
--- 18578,18584 ----
  
    /* At anytime, try_builtin_assignconv can report a warning on
       constant overflow during narrowing. */
!   SET_WFL_OPERATOR (wfl_operator, entry->index, wfl_value);
    new_value = try_builtin_assignconv (wfl_operator, type, value);
    if (!new_value && (new_value = try_reference_assignconv (type, value)))
      type_value = promote_type (type);
*************** array_constructor_check_entry (tree type
*** 18504,18515 ****
      }
  
    if (new_value)
!     TREE_VALUE (entry) = new_value;
  
    if (array_type_string)
      free (array_type_string);
  
!   TREE_PURPOSE (entry) = NULL_TREE;
    return error_seen;
  }
  
--- 18597,18608 ----
      }
  
    if (new_value)
!     entry->value = new_value;
  
    if (array_type_string)
      free (array_type_string);
  
!   entry->index = NULL_TREE;
    return error_seen;
  }
  
*************** patch_exit_expr (tree node)
*** 19019,19025 ****
    /* Now we know things are allright, invert the condition, fold and
       return */
    TREE_OPERAND (node, 0) =
!     fold (build1 (TRUTH_NOT_EXPR, boolean_type_node, expression));
  
    if (! integer_zerop (TREE_OPERAND (node, 0))
        && ctxp->current_loop != NULL_TREE
--- 19112,19118 ----
    /* Now we know things are allright, invert the condition, fold and
       return */
    TREE_OPERAND (node, 0) =
!     fold_build1 (TRUTH_NOT_EXPR, boolean_type_node, expression);
  
    if (! integer_zerop (TREE_OPERAND (node, 0))
        && ctxp->current_loop != NULL_TREE
*************** patch_synchronized_statement (tree node,
*** 19398,19411 ****
        return error_mark_node;
      }
  
-   if (flag_emit_xref)
-     {
-       TREE_OPERAND (node, 0) = expr;
-       TREE_OPERAND (node, 1) = java_complete_tree (block);
-       CAN_COMPLETE_NORMALLY (node) = 1;
-       return node;
-     }
- 
    /* Generate a try-finally for the synchronized statement, except
       that the handler that catches all throw exception calls
       _Jv_MonitorExit and then rethrow the exception.
--- 19491,19496 ----
*************** patch_throw_statement (tree node, tree w
*** 19530,19544 ****
        return error_mark_node;
      }
  
!   if (! flag_emit_class_files && ! flag_emit_xref)
      BUILD_THROW (node, expr);
  
-   /* If doing xrefs, keep the location where the `throw' was seen. */
-   if (flag_emit_xref)
-     EXPR_WFL_LINECOL (node) = EXPR_WFL_LINECOL (wfl_op1);
    return node;
  }
  
  /* Check that exception said to be thrown by method DECL can be
     effectively caught from where DECL is invoked.  THIS_EXPR is the
     expression that computes `this' for the method call.  */
--- 19615,19654 ----
        return error_mark_node;
      }
  
!   if (! flag_emit_class_files)
      BUILD_THROW (node, expr);
  
    return node;
  }
  
+ /* Add EXCEPTION to the throws clause of MDECL.  If MDECL already throws
+    a super-class of EXCEPTION, keep the superclass instead.  If MDECL already
+    throws a sub-class of EXCEPTION, replace the sub-class with EXCEPTION.  */
+ static void
+ add_exception_to_throws (tree mdecl, tree exception)
+ {
+   tree mthrows;
+   
+   /* Ignore unchecked exceptions. */
+   if (IS_UNCHECKED_EXCEPTION_P (exception))
+     return;
+ 
+   for (mthrows = DECL_FUNCTION_THROWS (mdecl);
+        mthrows; mthrows = TREE_CHAIN (mthrows))
+     {
+       if (inherits_from_p (exception, TREE_VALUE (mthrows)))
+         return;
+       if (inherits_from_p (TREE_VALUE (mthrows), exception))
+         {
+ 	  TREE_VALUE (mthrows) = exception;
+ 	  return;
+ 	}
+     }
+   
+   mthrows = DECL_FUNCTION_THROWS (mdecl);
+   DECL_FUNCTION_THROWS (mdecl) = build_tree_list (mthrows, exception);
+ }
+ 
  /* Check that exception said to be thrown by method DECL can be
     effectively caught from where DECL is invoked.  THIS_EXPR is the
     expression that computes `this' for the method call.  */
*************** check_thrown_exceptions (
*** 19556,19562 ****
    int is_array_call = 0;
  
    /* Skip check within generated methods, such as access$<n>.  */
!   if (OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (current_function_decl)))
      return;
  
    if (this_expr != NULL_TREE
--- 19666,19672 ----
    int is_array_call = 0;
  
    /* Skip check within generated methods, such as access$<n>.  */
!   if (NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (current_function_decl)))
      return;
  
    if (this_expr != NULL_TREE
*************** check_thrown_exceptions (
*** 19578,19587 ****
  #else
  	EXPR_WFL_LINECOL (wfl_operator) = location;
  #endif
! 	if (DECL_FINIT_P (current_function_decl))
! 	  parse_error_context
!             (wfl_operator, "Exception %qs can't be thrown in initializer",
! 	     lang_printable_name (TREE_VALUE (throws), 0));
  	else
  	  {
  	    parse_error_context
--- 19688,19708 ----
  #else
  	EXPR_WFL_LINECOL (wfl_operator) = location;
  #endif
! 	if (ANONYMOUS_CLASS_P (DECL_CONTEXT (current_function_decl))
! 	    && (DECL_FINIT_P (current_function_decl)
! 	        || DECL_INIT_P (current_function_decl)
! 		|| DECL_CONSTRUCTOR_P (current_function_decl)))
! 	  {
! 	    /* Add "throws" to the initializer's exception list */
! 	    tree exception = TREE_VALUE (throws);
! 	    add_exception_to_throws (current_function_decl, exception);	  
! 	  }
! 	else if (DECL_FINIT_P (current_function_decl))
! 	  {
! 	    parse_error_context
!               (wfl_operator, "Exception %qs can't be thrown in initializer",
! 	       lang_printable_name (TREE_VALUE (throws), 0));
! 	  }
  	else
  	  {
  	    parse_error_context
*************** check_thrown_exceptions_do (tree excepti
*** 19618,19643 ****
    return 0;
  }
  
- static void
- purge_unchecked_exceptions (tree mdecl)
- {
-   tree throws = DECL_FUNCTION_THROWS (mdecl);
-   tree new = NULL_TREE;
- 
-   while (throws)
-     {
-       tree next = TREE_CHAIN (throws);
-       if (!IS_UNCHECKED_EXCEPTION_P (TREE_VALUE (throws)))
- 	{
- 	  TREE_CHAIN (throws) = new;
- 	  new = throws;
- 	}
-       throws = next;
-     }
-   /* List is inverted here, but it doesn't matter */
-   DECL_FUNCTION_THROWS (mdecl) = new;
- }
- 
  /* This function goes over all of CLASS_TYPE ctors and checks whether
     each of them features at least one unchecked exception in its
     `throws' clause. If it's the case, it returns `true', `false'
--- 19739,19744 ----
*************** static tree
*** 19790,19796 ****
  maybe_build_class_init_for_field (tree decl, tree expr)
  {
    tree clas = DECL_CONTEXT (decl);
!   if (flag_emit_class_files || flag_emit_xref)
      return expr;
  
    if (TREE_CODE (decl) == VAR_DECL && FIELD_STATIC (decl)
--- 19891,19897 ----
  maybe_build_class_init_for_field (tree decl, tree expr)
  {
    tree clas = DECL_CONTEXT (decl);
!   if (flag_emit_class_files)
      return expr;
  
    if (TREE_CODE (decl) == VAR_DECL && FIELD_STATIC (decl)
*************** fold_constant_for_init (tree node, tree 
*** 19854,19866 ****
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
  	return NULL_TREE;
        TREE_OPERAND (node, 1) = val;
!       return patch_binop (node, op0, op1);
  
      case UNARY_PLUS_EXPR:
      case NEGATE_EXPR:
      case TRUTH_NOT_EXPR:
      case BIT_NOT_EXPR:
      case CONVERT_EXPR:
        op0 = TREE_OPERAND (node, 0);
        val = fold_constant_for_init (op0, context);
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
--- 19955,19968 ----
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
  	return NULL_TREE;
        TREE_OPERAND (node, 1) = val;
!       return patch_binop (node, op0, op1, 1);
  
      case UNARY_PLUS_EXPR:
      case NEGATE_EXPR:
      case TRUTH_NOT_EXPR:
      case BIT_NOT_EXPR:
      case CONVERT_EXPR:
+     case NOP_EXPR:
        op0 = TREE_OPERAND (node, 0);
        val = fold_constant_for_init (op0, context);
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
*************** fold_constant_for_init (tree node, tree 
*** 19886,19893 ****
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
  	return NULL_TREE;
        TREE_OPERAND (node, 2) = val;
!       return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 1)
! 	: TREE_OPERAND (node, 2);
  
      case VAR_DECL:
      case FIELD_DECL:
--- 19988,19995 ----
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
  	return NULL_TREE;
        TREE_OPERAND (node, 2) = val;
!       return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 2)
! 	: TREE_OPERAND (node, 1);
  
      case VAR_DECL:
      case FIELD_DECL:
diff -Nrcpad gcc-4.0.2/gcc/java/parse.h gcc-4.1.0/gcc/java/parse.h
*** gcc-4.0.2/gcc/java/parse.h	Wed Aug 17 12:57:04 2005
--- gcc-4.1.0/gcc/java/parse.h	Tue Sep  6 02:25:00 2005
***************
*** 1,5 ****
  /* Language parser definitions for the GNU compiler for the Java(TM) language.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
--- 1,5 ----
  /* Language parser definitions for the GNU compiler for the Java(TM) language.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
*************** GNU General Public License for more deta
*** 17,24 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 17,24 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** extern tree stabilize_reference (tree);
*** 120,125 ****
--- 120,129 ----
      }
  #endif
  
+ #ifdef ATTRIBUTE_GCC_DIAG
+ extern void parse_error_context (tree cl, const char *gmsgid, ...) ATTRIBUTE_GCC_DIAG(2,3);
+ #endif
+ 
  #define ABSTRACT_CHECK(FLAG, V, CL, S)				\
    if ((FLAG) & (V))						\
      parse_error_context ((CL), "%s method can't be abstract", (S));
*************** extern tree stabilize_reference (tree);
*** 153,159 ****
     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (TYPE))))
  
  /* Pedantic warning on obsolete modifiers. Note: when cl is NULL,
!    flags was set artificially, such as for a interface method */
  #define OBSOLETE_MODIFIER_WARNING(cl, flags, __modifier, arg)                \
    {                                                                          \
      if (flag_redundant && (cl) && ((flags) & (__modifier)))		     \
--- 157,163 ----
     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (TYPE))))
  
  /* Pedantic warning on obsolete modifiers. Note: when cl is NULL,
!    flags was set artificially, such as for an interface method.  */
  #define OBSOLETE_MODIFIER_WARNING(cl, flags, __modifier, arg)                \
    {                                                                          \
      if (flag_redundant && (cl) && ((flags) & (__modifier)))		     \
*************** typedef struct jdeplist_s jdeplist;
*** 739,748 ****
  /* Macro to access the osb (opening square bracket) count */
  #define CURRENT_OSB(C) (C)->osb_number [(C)->osb_depth]
  
- /* Macro for the xreferencer */
- #define DECL_END_SOURCE_LINE(DECL)       (DECL_CHECK (DECL)->decl.u1.i)
- #define DECL_INHERITED_SOURCE_LINE(DECL) (DECL_CHECK (DECL)->decl.u2.i)
-      
  /* Parser context data structure. */
  struct parser_ctxt GTY(()) {
    const char *filename;		     /* Current filename */
--- 743,748 ----
diff -Nrcpad gcc-4.0.2/gcc/java/parse.y gcc-4.1.0/gcc/java/parse.y
*** gcc-4.0.2/gcc/java/parse.y	Wed Aug 17 12:57:04 2005
--- gcc-4.1.0/gcc/java/parse.y	Mon Jan 30 16:25:40 2006
*************** GNU General Public License for more deta
*** 18,25 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 18,25 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** definitions and other extensions.  */
*** 67,78 ****
  #include "zipfile.h"
  #include "convert.h"
  #include "buffer.h"
- #include "xref.h"
  #include "function.h"
  #include "except.h"
  #include "ggc.h"
  #include "debug.h"
  #include "tree-inline.h"
  #include "cgraph.h"
  #include "target.h"
  
--- 67,78 ----
  #include "zipfile.h"
  #include "convert.h"
  #include "buffer.h"
  #include "function.h"
  #include "except.h"
  #include "ggc.h"
  #include "debug.h"
  #include "tree-inline.h"
+ #include "tree-dump.h"
  #include "cgraph.h"
  #include "target.h"
  
*************** static tree lookup_java_method2 (tree, t
*** 97,103 ****
  static tree method_header (int, tree, tree, tree);
  static void fix_method_argument_names (tree ,tree);
  static tree method_declarator (tree, tree);
! static void parse_warning_context (tree cl, const char *gmsgid, ...);
  #ifdef USE_MAPPED_LOCATION
  static void issue_warning_error_from_context
    (source_location, const char *gmsgid, va_list *);
--- 97,103 ----
  static tree method_header (int, tree, tree, tree);
  static void fix_method_argument_names (tree ,tree);
  static tree method_declarator (tree, tree);
! static void parse_warning_context (tree cl, const char *gmsgid, ...) ATTRIBUTE_GCC_DIAG(2,3);
  #ifdef USE_MAPPED_LOCATION
  static void issue_warning_error_from_context
    (source_location, const char *gmsgid, va_list *);
*************** static int process_imports (void);
*** 112,117 ****
--- 112,118 ----
  static void read_import_dir (tree);
  static int find_in_imports_on_demand (tree, tree);
  static void find_in_imports (tree, tree);
+ static bool inner_class_accessible (tree, tree);
  static void check_inner_class_access (tree, tree, tree);
  static int check_pkg_class_access (tree, tree, bool, tree);
  static tree resolve_package (tree, tree *, tree *);
*************** static tree build_new_invocation (tree, 
*** 162,168 ****
  static tree build_assignment (int, int, tree, tree);
  static tree build_binop (enum tree_code, int, tree, tree);
  static tree patch_assignment (tree, tree);
! static tree patch_binop (tree, tree, tree);
  static tree build_unaryop (int, int, tree);
  static tree build_incdec (int, int, tree, int);
  static tree patch_unaryop (tree, tree);
--- 163,169 ----
  static tree build_assignment (int, int, tree, tree);
  static tree build_binop (enum tree_code, int, tree, tree);
  static tree patch_assignment (tree, tree);
! static tree patch_binop (tree, tree, tree, int);
  static tree build_unaryop (int, int, tree);
  static tree build_incdec (int, int, tree, int);
  static tree patch_unaryop (tree, tree);
*************** static tree build_try_finally_statement 
*** 233,245 ****
  static tree patch_try_statement (tree);
  static tree patch_synchronized_statement (tree, tree);
  static tree patch_throw_statement (tree, tree);
  #ifdef USE_MAPPED_LOCATION
  static void check_thrown_exceptions (source_location, tree, tree);
  #else
  static void check_thrown_exceptions (int, tree, tree);
  #endif
  static int check_thrown_exceptions_do (tree);
- static void purge_unchecked_exceptions (tree);
  static bool ctors_unchecked_throws_clause_p (tree);
  static void check_concrete_throws_clauses (tree, tree, tree, tree);
  static void check_throws_clauses (tree, tree, tree);
--- 234,246 ----
  static tree patch_try_statement (tree);
  static tree patch_synchronized_statement (tree, tree);
  static tree patch_throw_statement (tree, tree);
+ static void add_exception_to_throws (tree, tree);
  #ifdef USE_MAPPED_LOCATION
  static void check_thrown_exceptions (source_location, tree, tree);
  #else
  static void check_thrown_exceptions (int, tree, tree);
  #endif
  static int check_thrown_exceptions_do (tree);
  static bool ctors_unchecked_throws_clause_p (tree);
  static void check_concrete_throws_clauses (tree, tree, tree, tree);
  static void check_throws_clauses (tree, tree, tree);
*************** static tree build_instinit_invocation (t
*** 256,262 ****
  static void fix_constructors (tree);
  static tree build_alias_initializer_parameter_list (int, tree, tree, int *);
  static tree craft_constructor (tree, tree);
! static int verify_constructor_super (tree);
  static tree create_artificial_method (tree, int, tree, tree, tree);
  static void start_artificial_method_body (tree);
  static void end_artificial_method_body (tree);
--- 257,263 ----
  static void fix_constructors (tree);
  static tree build_alias_initializer_parameter_list (int, tree, tree, int *);
  static tree craft_constructor (tree, tree);
! static tree get_constructor_super (tree);
  static tree create_artificial_method (tree, int, tree, tree, tree);
  static void start_artificial_method_body (tree);
  static void end_artificial_method_body (tree);
*************** static void missing_return_error (tree);
*** 273,279 ****
  static tree build_new_array_init (int, tree);
  static tree patch_new_array_init (tree, tree);
  static tree maybe_build_array_element_wfl (tree);
! static int array_constructor_check_entry (tree, tree);
  static const char *purify_type_name (const char *);
  static tree fold_constant_for_init (tree, tree);
  static jdeplist *reverse_jdep_list (struct parser_ctxt *);
--- 274,280 ----
  static tree build_new_array_init (int, tree);
  static tree patch_new_array_init (tree, tree);
  static tree maybe_build_array_element_wfl (tree);
! static int array_constructor_check_entry (tree, constructor_elt *);
  static const char *purify_type_name (const char *);
  static tree fold_constant_for_init (tree, tree);
  static jdeplist *reverse_jdep_list (struct parser_ctxt *);
*************** static int pop_current_osb (struct parse
*** 311,317 ****
  static tree maybe_make_nested_class_name (tree);
  static int make_nested_class_name (tree);
  static void link_nested_class_to_enclosing (void);
! static tree resolve_inner_class (htab_t, tree, tree *, tree *, tree);
  static tree find_as_inner_class (tree, tree, tree);
  static tree find_as_inner_class_do (tree, tree);
  static int check_inner_class_redefinition (tree, tree);
--- 312,318 ----
  static tree maybe_make_nested_class_name (tree);
  static int make_nested_class_name (tree);
  static void link_nested_class_to_enclosing (void);
! static tree resolve_inner_class (tree, tree, tree, tree);
  static tree find_as_inner_class (tree, tree, tree);
  static tree find_as_inner_class_do (tree, tree);
  static int check_inner_class_redefinition (tree, tree);
*************** static tree build_current_thisn (tree);
*** 321,339 ****
  static tree build_access_to_thisn (tree, tree, int);
  static tree maybe_build_thisn_access_method (tree);
  
! static tree build_outer_field_access (tree, tree);
! static tree build_outer_field_access_methods (tree);
! static tree build_outer_field_access_expr (int, tree, tree,
! 						  tree, tree);
! static tree build_outer_method_access_method (tree);
  static tree build_new_access_id (void);
- static tree build_outer_field_access_method (tree, tree, tree,
- 						    tree, tree);
  
! static int outer_field_access_p (tree, tree);
! static int outer_field_expanded_access_p (tree, tree *,
! 						 tree *, tree *);
! static tree outer_field_access_fix (tree, tree, tree);
  static tree build_incomplete_class_ref (int, tree);
  static tree patch_incomplete_class_ref (tree);
  static tree create_anonymous_class (tree);
--- 322,338 ----
  static tree build_access_to_thisn (tree, tree, int);
  static tree maybe_build_thisn_access_method (tree);
  
! static tree build_nested_field_access (tree, tree);
! static tree build_nested_field_access_methods (tree);
! static tree build_nested_field_access_method (tree, tree, tree, tree, tree);
! static tree build_nested_field_access_expr (int, tree, tree, tree, tree);
! static tree build_nested_method_access_method (tree);
  static tree build_new_access_id (void);
  
! static int nested_member_access_p (tree, tree);
! static int nested_field_expanded_access_p (tree, tree *, tree *, tree *);
! static tree nested_field_access_fix (tree, tree, tree);
! 
  static tree build_incomplete_class_ref (int, tree);
  static tree patch_incomplete_class_ref (tree);
  static tree create_anonymous_class (tree);
*************** static char *string_convert_int_cst (tre
*** 353,360 ****
  int java_error_count;
  /* Number of warning found so far. */
  int java_warning_count;
- /* Tell when not to fold, when doing xrefs */
- int do_not_fold;
  /* Cyclic inheritance report, as it can be set by layout_class */
  const char *cyclic_inheritance_report;
  
--- 352,357 ----
*************** interface_type_list:
*** 904,919 ****
  class_body:
  	OCB_TK CCB_TK
  		{
- 		  /* Store the location of the `}' when doing xrefs */
- 		  if (flag_emit_xref)
- 		    DECL_END_SOURCE_LINE (GET_CPC ()) = $2.location;
  		  $$ = GET_CPC ();
  		}
  |	OCB_TK class_body_declarations CCB_TK
  		{
- 		  /* Store the location of the `}' when doing xrefs */
- 		  if (flag_emit_xref)
- 		    DECL_END_SOURCE_LINE (GET_CPC ()) = $3.location;
  		  $$ = GET_CPC ();
  		}
  ;
--- 901,910 ----
*************** method_header:
*** 1043,1068 ****
--- 1034,1064 ----
  |	type error
  		{
  		  yyerror ("Invalid method declaration, method name required");
+ 		  $$ = NULL_TREE;
  		  RECOVER;
  		}
  |	modifiers type error
  		{
  		  yyerror ("Identifier expected");
+ 		  $$ = NULL_TREE;
  		  RECOVER;
  		}
  |	VOID_TK error
  		{
  		  yyerror ("Identifier expected");
+ 		  $$ = NULL_TREE;
  		  RECOVER;
  		}
  |	modifiers VOID_TK error
  		{
  		  yyerror ("Identifier expected");
+ 		  $$ = NULL_TREE;
  		  RECOVER;
  		}
  |	modifiers error
  		{
  		  yyerror ("Invalid method declaration, return type required");
+ 		  $$ = NULL_TREE;
  		  RECOVER;
  		}
  ;
*************** interface_member_declaration:
*** 1330,1335 ****
--- 1326,1332 ----
  		{ end_class_declaration (1); }
  |	interface_declaration	/* Added, JDK1.1 inner interfaces */
  		{ end_class_declaration (1); }
+ |	empty_statement
  ;
  
  constant_declaration:
*************** block_end:
*** 1389,1397 ****
  	CCB_TK
  		{
  		  maybe_absorb_scoping_blocks ();
- 		  /* Store the location of the `}' when doing xrefs */
- 		  if (current_function_decl && flag_emit_xref)
- 		    DECL_END_SOURCE_LINE (current_function_decl) = $1.location;
  		  $$ = exit_block ();
  		  if (!BLOCK_SUBBLOCKS ($$))
  		    BLOCK_SUBBLOCKS ($$) = build_java_empty_stmt ();
--- 1386,1391 ----
*************** anonymous_class_creation:
*** 2094,2100 ****
  		     must be generated following the hints provided by
  		     the `new' expression. Whether a super constructor
  		     of that nature exists or not is to be verified
! 		     later on in verify_constructor_super.
  
  		     It's during the expansion of a `new' statement
  		     referring to an anonymous class that a ctor will
--- 2088,2094 ----
  		     must be generated following the hints provided by
  		     the `new' expression. Whether a super constructor
  		     of that nature exists or not is to be verified
! 		     later on in get_constructor_super.
  
  		     It's during the expansion of a `new' statement
  		     referring to an anonymous class that a ctor will
*************** yyerror (const char *msgid)
*** 3118,3124 ****
  		 code_from_source, strlen (code_from_source));
    remainder = obstack_finish (&temporary_obstack);
    if (do_warning)
!     warning ("%s.\n%s", msgid, remainder);
    else
      error ("%s.\n%s", msgid, remainder);
  
--- 3112,3118 ----
  		 code_from_source, strlen (code_from_source));
    remainder = obstack_finish (&temporary_obstack);
    if (do_warning)
!     warning (0, "%s.\n%s", msgid, remainder);
    else
      error ("%s.\n%s", msgid, remainder);
  
*************** issue_warning_error_from_context (
*** 3155,3161 ****
    text.err_no = errno;
    text.args_ptr = ap;
    text.format_spec = gmsgid;
!   pp_format_text (global_dc->printer, &text);
    strncpy (buffer, pp_formatted_text (global_dc->printer), sizeof (buffer) - 1);
    buffer[sizeof (buffer) - 1] = '\0';
    pp_clear_output_area (global_dc->printer);
--- 3149,3156 ----
    text.err_no = errno;
    text.args_ptr = ap;
    text.format_spec = gmsgid;
!   pp_format (global_dc->printer, &text);
!   pp_output_formatted_text (global_dc->printer);
    strncpy (buffer, pp_formatted_text (global_dc->printer), sizeof (buffer) - 1);
    buffer[sizeof (buffer) - 1] = '\0';
    pp_clear_output_area (global_dc->printer);
*************** check_inner_class_redefinition (tree raw
*** 3674,3719 ****
    return 0;
  }
  
! /* Tries to find a decl for CLASS_TYPE within ENCLOSING. If we fail,
!    we remember ENCLOSING and SUPER.  */
  
  static tree
! resolve_inner_class (htab_t circularity_hash, tree cl, tree *enclosing,
! 		     tree *super, tree class_type)
  {
-   tree local_enclosing = *enclosing;
    tree local_super = NULL_TREE;
  
!   while (local_enclosing)
!     {
!       tree intermediate, decl;
  
!       *htab_find_slot (circularity_hash, local_enclosing, INSERT) =
! 	local_enclosing;
  
!       if ((decl = find_as_inner_class (local_enclosing, class_type, cl)))
! 	return decl;
  
!       intermediate = local_enclosing;
!       /* Explore enclosing contexts. */
!       while (INNER_CLASS_DECL_P (intermediate))
! 	{
! 	  intermediate = DECL_CONTEXT (intermediate);
! 	  if ((decl = find_as_inner_class (intermediate, class_type, cl)))
! 	    return decl;
! 	}
  
        /* Now go to the upper classes, bail out if necessary.  We will
  	 analyze the returned SUPER and act accordingly (see
  	 do_resolve_class).  */
!       if (JPRIMITIVE_TYPE_P (TREE_TYPE (local_enclosing))
! 	  || TREE_TYPE (local_enclosing) == void_type_node)
  	{
  	  parse_error_context (cl, "Qualifier must be a reference");
! 	  local_enclosing = NULL_TREE;
  	  break;
  	}
!       local_super = CLASSTYPE_SUPER (TREE_TYPE (local_enclosing));
        if (!local_super || local_super == object_type_node)
          break;
  
--- 3669,3720 ----
    return 0;
  }
  
! /* Tries to find a decl for CLASS_TYPE within ENCLOSING.  May return an
!    invisible/non-accessible matching decl when an accessible one could not be 
!    found, in order to give a better error message when accessibility is 
!    checked later.  */
  
  static tree
! resolve_inner_class (tree context, tree cl, tree enclosing, tree class_type)
  {
    tree local_super = NULL_TREE;
+   tree candidate = NULL_TREE;
  
!   /* This hash table is used to register the classes we're going
!      through when searching the current class as an inner class, in
!      order to detect circular references.  */
!   htab_t circularity_hash = htab_create (20, htab_hash_pointer, htab_eq_pointer,
! 					 NULL);
  
!   while (enclosing)
!     {
!       tree decl;
  
!       *htab_find_slot (circularity_hash, enclosing, INSERT) = enclosing;
  
!       if ((decl = find_as_inner_class (enclosing, class_type, cl)))
!         {
! 	  if (inner_class_accessible (decl, context))
! 	    {
! 	      candidate = decl;
! 	      break;
! 	    }
! 	  else
! 	    if (candidate == NULL_TREE)
! 	      candidate = decl;
! 	}	
  
        /* Now go to the upper classes, bail out if necessary.  We will
  	 analyze the returned SUPER and act accordingly (see
  	 do_resolve_class).  */
!       if (JPRIMITIVE_TYPE_P (TREE_TYPE (enclosing))
! 	  || TREE_TYPE (enclosing) == void_type_node)
  	{
  	  parse_error_context (cl, "Qualifier must be a reference");
! 	  enclosing = NULL_TREE;
  	  break;
  	}
!       local_super = CLASSTYPE_SUPER (TREE_TYPE (enclosing));
        if (!local_super || local_super == object_type_node)
          break;
  
*************** resolve_inner_class (htab_t circularity_
*** 3727,3748 ****
        if (htab_find (circularity_hash, local_super) != NULL)
          {
            if (!cl)
!             cl = lookup_cl (local_enclosing);
  
            parse_error_context
              (cl, "Cyclic inheritance involving %s",
! 	     IDENTIFIER_POINTER (DECL_NAME (local_enclosing)));
! 	  local_enclosing = NULL_TREE;
          }
        else
! 	local_enclosing = local_super;
      }
  
!   /* We failed. Return LOCAL_SUPER and LOCAL_ENCLOSING. */
!   *super = local_super;
!   *enclosing = local_enclosing;
  
!   return NULL_TREE;
  }
  
  /* Within ENCLOSING, find a decl for NAME and return it. NAME can be
--- 3728,3749 ----
        if (htab_find (circularity_hash, local_super) != NULL)
          {
            if (!cl)
!             cl = lookup_cl (enclosing);
  
            parse_error_context
              (cl, "Cyclic inheritance involving %s",
! 	     IDENTIFIER_POINTER (DECL_NAME (enclosing)));
! 	  enclosing = NULL_TREE;
          }
        else
! 	enclosing = local_super;
      }
  
!   htab_delete (circularity_hash);
  
!   /* We failed, but we might have found a matching class that wasn't 
!      accessible.  Return that to get a better error message.  */
!   return candidate;
  }
  
  /* Within ENCLOSING, find a decl for NAME and return it. NAME can be
*************** maybe_create_class_interface_decl (tree 
*** 3886,3896 ****
    DECL_SOURCE_LOCATION (decl) = EXPR_LOCATION (cl);
  #else
    DECL_SOURCE_FILE (decl) = EXPR_WFL_FILENAME (cl);
!   /* If we're emitting xrefs, store the line/col number information */
!   if (flag_emit_xref)
!     DECL_SOURCE_LINE (decl) = EXPR_WFL_LINECOL (cl);
!   else
!     DECL_SOURCE_LINE (decl) = EXPR_WFL_LINENO (cl);
  #endif
    CLASS_FROM_SOURCE_P (TREE_TYPE (decl)) = 1;
    CLASS_PARSED_P (TREE_TYPE (decl)) = 1;
--- 3887,3893 ----
    DECL_SOURCE_LOCATION (decl) = EXPR_LOCATION (cl);
  #else
    DECL_SOURCE_FILE (decl) = EXPR_WFL_FILENAME (cl);
!   DECL_SOURCE_LINE (decl) = EXPR_WFL_LINENO (cl);
  #endif
    CLASS_FROM_SOURCE_P (TREE_TYPE (decl)) = 1;
    CLASS_PARSED_P (TREE_TYPE (decl)) = 1;
*************** maybe_create_class_interface_decl (tree 
*** 3919,3924 ****
--- 3916,3929 ----
    /* Install a new dependency list element */
    create_jdep_list (ctxp);
  
+   /* We keep the compilation unit imports in the class so that
+      they can be used later to resolve type dependencies that
+      aren't necessary to solve now. */
+   TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list;
+   TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list;
+ 
+   TYPE_PACKAGE (TREE_TYPE (decl)) = ctxp->package;
+ 
    SOURCE_FRONTEND_DEBUG (("Defining class/interface %s",
  			  IDENTIFIER_POINTER (qualified_name)));
    return decl;
*************** create_class (int flags, tree id, tree s
*** 4193,4215 ****
       virtual function table in java.lang.object.  */
    TYPE_VFIELD (TREE_TYPE (decl)) = TYPE_VFIELD (object_type_node);
  
-   /* We keep the compilation unit imports in the class so that
-      they can be used later to resolve type dependencies that
-      aren't necessary to solve now. */
-   TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list;
-   TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list;
- 
    /* Add the private this$<n> field, Replicate final locals still in
       scope as private final fields mangled like val$<local_name>.
       This does not occur for top level (static) inner classes. */
    if (PURE_INNER_CLASS_DECL_P (decl))
      add_inner_class_fields (decl, current_function_decl);
  
-   /* If doing xref, store the location at which the inherited class
-      (if any) was seen. */
-   if (flag_emit_xref && super)
-     DECL_INHERITED_SOURCE_LINE (decl) = EXPR_WFL_LINECOL (super);
- 
    /* Eventually sets the @deprecated tag flag */
    CHECK_DEPRECATED (decl);
  
--- 4198,4209 ----
*************** register_fields (int flags, tree type, t
*** 4501,4510 ****
  #ifdef USE_MAPPED_LOCATION
        input_location = EXPR_LOCATION (cl);
  #else
!       if (flag_emit_xref)
! 	input_line = EXPR_WFL_LINECOL (cl);
!       else
! 	input_line = EXPR_WFL_LINENO (cl);
  #endif
        field_decl = add_field (class_type, current_name, real_type, flags);
        CHECK_DEPRECATED_NO_RESET (field_decl);
--- 4495,4501 ----
  #ifdef USE_MAPPED_LOCATION
        input_location = EXPR_LOCATION (cl);
  #else
!       input_line = EXPR_WFL_LINENO (cl);
  #endif
        field_decl = add_field (class_type, current_name, real_type, flags);
        CHECK_DEPRECATED_NO_RESET (field_decl);
*************** method_header (int flags, tree type, tre
*** 4901,4917 ****
    /* Eventually set the @deprecated tag flag */
    CHECK_DEPRECATED (meth);
  
-   /* If doing xref, store column and line number information instead
-      of the line number only. */
-   if (flag_emit_xref)
-     {
- #ifdef USE_MAPPED_LOCATION
-       DECL_SOURCE_LOCATION (meth) = EXPR_LOCATION (id);
- #else
-       DECL_SOURCE_LINE (meth) = EXPR_WFL_LINECOL (id);
- #endif
-     }
- 
    return meth;
  }
  
--- 4892,4897 ----
*************** finish_method_declaration (tree method_b
*** 4977,4984 ****
    exit_block ();
    /* Merge last line of the function with first line, directly in the
       function decl. It will be used to emit correct debug info. */
!   if (!flag_emit_xref)
!     DECL_FUNCTION_LAST_LINE (current_function_decl) = ctxp->last_ccb_indent1;
  
    /* Since function's argument's list are shared, reset the
       ARG_FINAL_P parameter that might have been set on some of this
--- 4957,4963 ----
    exit_block ();
    /* Merge last line of the function with first line, directly in the
       function decl. It will be used to emit correct debug info. */
!   DECL_FUNCTION_LAST_LINE (current_function_decl) = ctxp->last_ccb_indent1;
  
    /* Since function's argument's list are shared, reset the
       ARG_FINAL_P parameter that might have been set on some of this
*************** static tree
*** 5672,5677 ****
--- 5651,5659 ----
  jdep_resolve_class (jdep *dep)
  {
    tree decl;
+   
+   /* Set the correct context for class resolution.  */
+   current_class = TREE_TYPE (JDEP_ENCLOSING (dep));
  
    if (JDEP_RESOLVED_P (dep))
      decl = JDEP_RESOLVED_DECL (dep);
*************** tree
*** 5901,5910 ****
  do_resolve_class (tree enclosing, tree import_type, tree class_type, tree decl,
  		  tree cl)
  {
!   tree new_class_decl = NULL_TREE, super = NULL_TREE;
    tree saved_enclosing_type = enclosing ? TREE_TYPE (enclosing) : NULL_TREE;
    tree decl_result;
-   htab_t circularity_hash;
  
    if (QUALIFIED_P (TYPE_NAME (class_type)))
      {
--- 5883,5892 ----
  do_resolve_class (tree enclosing, tree import_type, tree class_type, tree decl,
  		  tree cl)
  {
!   tree new_class_decl = NULL_TREE;
    tree saved_enclosing_type = enclosing ? TREE_TYPE (enclosing) : NULL_TREE;
+   tree candidate = NULL_TREE;
    tree decl_result;
  
    if (QUALIFIED_P (TYPE_NAME (class_type)))
      {
*************** do_resolve_class (tree enclosing, tree i
*** 5928,5939 ****
  
    if (enclosing)
      {
!       /* This hash table is used to register the classes we're going
! 	 through when searching the current class as an inner class, in
! 	 order to detect circular references. Remember to free it before
! 	 returning the section 0- of this function. */
!       circularity_hash = htab_create (20, htab_hash_pointer, htab_eq_pointer,
! 				      NULL);
  
        /* 0- Search in the current class as an inner class.
  	 Maybe some code here should be added to load the class or
--- 5910,5916 ----
  
    if (enclosing)
      {
!       tree context = enclosing;
  
        /* 0- Search in the current class as an inner class.
  	 Maybe some code here should be added to load the class or
*************** do_resolve_class (tree enclosing, tree i
*** 5941,5962 ****
  	 being loaded from class file. FIXME. */
        while (enclosing)
  	{
! 	  new_class_decl = resolve_inner_class (circularity_hash, cl, &enclosing,
! 						&super, class_type);
  	  if (new_class_decl)
! 	    break;
  
! 	  /* If we haven't found anything because SUPER reached Object and
! 	     ENCLOSING happens to be an innerclass, try the enclosing context. */
! 	  if ((!super || super == object_type_node) &&
! 	      enclosing && INNER_CLASS_DECL_P (enclosing))
! 	    enclosing = DECL_CONTEXT (enclosing);
! 	  else
! 	    enclosing = NULL_TREE;
  	}
  
-       htab_delete (circularity_hash);
- 
        if (new_class_decl)
  	return new_class_decl;
      }
--- 5918,5940 ----
  	 being loaded from class file. FIXME. */
        while (enclosing)
  	{
! 	  new_class_decl = resolve_inner_class (context, cl, enclosing, class_type);
! 	  
  	  if (new_class_decl)
! 	    {
! 	      if (inner_class_accessible (new_class_decl, context))
! 	        break;
! 	      else
! 	        if (candidate == NULL_TREE)
! 		  candidate = new_class_decl;
! 		new_class_decl = NULL_TREE;
! 	    }
  
! 	  /* Now that we've looked through all superclasses, try the enclosing
! 	     context. */
! 	  enclosing = DECL_CONTEXT (enclosing);
  	}
  
        if (new_class_decl)
  	return new_class_decl;
      }
*************** do_resolve_class (tree enclosing, tree i
*** 5979,5986 ****
    /* 3- Search according to the current package definition */
    if (!QUALIFIED_P (TYPE_NAME (class_type)))
      {
!       if ((new_class_decl = qualify_and_find (class_type, ctxp->package,
! 					     TYPE_NAME (class_type))))
  	return new_class_decl;
      }
  
--- 5957,5964 ----
    /* 3- Search according to the current package definition */
    if (!QUALIFIED_P (TYPE_NAME (class_type)))
      {
!       if ((new_class_decl = qualify_and_find (class_type, 
!       		TYPE_PACKAGE (current_class), TYPE_NAME (class_type))))
  	return new_class_decl;
      }
  
*************** do_resolve_class (tree enclosing, tree i
*** 6042,6048 ****
           }
        } while (!decl_result && separator);
      }
!   return decl_result;
  }
  
  static tree
--- 6020,6029 ----
           }
        } while (!decl_result && separator);
      }
!   if (decl_result)
!     return decl_result;
!   else
!     return candidate;
  }
  
  static tree
*************** resolve_and_layout (tree something, tree
*** 6103,6110 ****
    if (TREE_CODE (something) == EXPR_WITH_FILE_LOCATION)
      something = EXPR_WFL_NODE (something);
  
!   /* Otherwise, if something is not and IDENTIFIER_NODE, it can be a a
!      TYPE_DECL or a real TYPE */
    else if (TREE_CODE (something) != IDENTIFIER_NODE)
      something = (TREE_CODE (TYPE_NAME (something)) == TYPE_DECL ?
  	    DECL_NAME (TYPE_NAME (something)) : TYPE_NAME (something));
--- 6084,6091 ----
    if (TREE_CODE (something) == EXPR_WITH_FILE_LOCATION)
      something = EXPR_WFL_NODE (something);
  
!   /* Otherwise, if something is not and IDENTIFIER_NODE, it can be a
!      TYPE_DECL or a real TYPE.  */
    else if (TREE_CODE (something) != IDENTIFIER_NODE)
      something = (TREE_CODE (TYPE_NAME (something)) == TYPE_DECL ?
  	    DECL_NAME (TYPE_NAME (something)) : TYPE_NAME (something));
*************** java_check_regular_methods (tree class_d
*** 6547,6553 ****
  	  tree found_decl = TYPE_NAME (DECL_CONTEXT (found));
  	  parse_error_context (method_wfl, "Class %qs must override %qs with a public method in order to implement interface %qs",
  			       IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 			       lang_printable_name (method, 2),
  			       IDENTIFIER_POINTER (DECL_NAME (found_decl)));
  	}
  
--- 6528,6534 ----
  	  tree found_decl = TYPE_NAME (DECL_CONTEXT (found));
  	  parse_error_context (method_wfl, "Class %qs must override %qs with a public method in order to implement interface %qs",
  			       IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 			       lang_printable_name (found, 0),
  			       IDENTIFIER_POINTER (DECL_NAME (found_decl)));
  	}
  
*************** check_throws_clauses (tree method, tree 
*** 6732,6741 ****
  {
    tree mthrows;
  
-   /* Can't check these things with class loaded from bytecode. FIXME */
-   if (!CLASS_FROM_SOURCE_P (DECL_CONTEXT (found)))
-     return;
- 
    for (mthrows = DECL_FUNCTION_THROWS (method);
         mthrows; mthrows = TREE_CHAIN (mthrows))
      {
--- 6713,6718 ----
*************** resolve_package (tree pkg, tree *next, t
*** 7302,7326 ****
    return decl;
  }
  
  
! /* Check accessibility of inner classes according to member access rules.
!    DECL is the inner class, ENCLOSING_DECL is the class from which the
!    access is being attempted. */
! 
! static void
! check_inner_class_access (tree decl, tree enclosing_decl, tree cl)
  {
-   const char *access;
    tree enclosing_decl_type;
  
-   /* We don't issue an error message when CL is null. CL can be null
-      as a result of processing a JDEP crafted by source_start_java_method
-      for the purpose of patching its parm decl. But the error would
-      have been already trapped when fixing the method's signature.
-      DECL can also be NULL in case of earlier errors. */
-   if (!decl || !cl)
-     return;
- 
    enclosing_decl_type = TREE_TYPE (enclosing_decl);
  
    if (CLASS_PRIVATE (decl))
--- 7279,7292 ----
    return decl;
  }
  
+ /* Check accessibility of inner class DECL, from the context ENCLOSING_DECL,
+    according to member access rules.  */
  
! static bool
! inner_class_accessible (tree decl, tree enclosing_decl)
  {
    tree enclosing_decl_type;
  
    enclosing_decl_type = TREE_TYPE (enclosing_decl);
  
    if (CLASS_PRIVATE (decl))
*************** check_inner_class_access (tree decl, tre
*** 7333,7347 ****
        while (DECL_CONTEXT (enclosing_decl))
          enclosing_decl = DECL_CONTEXT (enclosing_decl);
        if (top_level == enclosing_decl)
!         return;
!       access = "private";
      }
    else if (CLASS_PROTECTED (decl))
      {
        tree decl_context;
        /* Access is permitted from within the same package... */
        if (in_same_package (decl, enclosing_decl))
!         return;
  
        /* ... or from within the body of a subtype of the context in which
           DECL is declared. */
--- 7299,7312 ----
        while (DECL_CONTEXT (enclosing_decl))
          enclosing_decl = DECL_CONTEXT (enclosing_decl);
        if (top_level == enclosing_decl)
!         return true;
      }
    else if (CLASS_PROTECTED (decl))
      {
        tree decl_context;
        /* Access is permitted from within the same package... */
        if (in_same_package (decl, enclosing_decl))
!         return true;
  
        /* ... or from within the body of a subtype of the context in which
           DECL is declared. */
*************** check_inner_class_access (tree decl, tre
*** 7352,7381 ****
  	    {
  	      if (interface_of_p (TREE_TYPE (decl_context),
  				  enclosing_decl_type))
! 		return;
  	    }
  	  else
  	    {
  	      /* Eww. The order of the arguments is different!! */
  	      if (inherits_from_p (enclosing_decl_type,
  				   TREE_TYPE (decl_context)))
! 		return;
  	    }
  	  enclosing_decl = DECL_CONTEXT (enclosing_decl);
  	}
-       access = "protected";
      }
    else if (! CLASS_PUBLIC (decl))
      {
        /* Access is permitted only from within the same package as DECL. */
        if (in_same_package (decl, enclosing_decl))
!         return;
!       access = "non-public";
      }
    else
      /* Class is public. */
      return;
  
    parse_error_context (cl, "Nested %s %s is %s; cannot be accessed from here",
  		       (CLASS_INTERFACE (decl) ? "interface" : "class"),
  		       lang_printable_name (decl, 2), access);
--- 7317,7374 ----
  	    {
  	      if (interface_of_p (TREE_TYPE (decl_context),
  				  enclosing_decl_type))
! 		return true;
  	    }
  	  else
  	    {
  	      /* Eww. The order of the arguments is different!! */
  	      if (inherits_from_p (enclosing_decl_type,
  				   TREE_TYPE (decl_context)))
! 		return true;
  	    }
  	  enclosing_decl = DECL_CONTEXT (enclosing_decl);
  	}
      }
    else if (! CLASS_PUBLIC (decl))
      {
        /* Access is permitted only from within the same package as DECL. */
        if (in_same_package (decl, enclosing_decl))
!         return true;
      }
    else
      /* Class is public. */
+     return true;
+ 
+   return false;
+ }
+ 
+ /* Check accessibility of inner classes according to member access rules.
+    DECL is the inner class, ENCLOSING_DECL is the class from which the
+    access is being attempted. */
+ 
+ static void
+ check_inner_class_access (tree decl, tree enclosing_decl, tree cl)
+ {
+   const char *access;
+ 
+   /* We don't issue an error message when CL is null. CL can be null
+      as a result of processing a JDEP crafted by source_start_java_method
+      for the purpose of patching its parm decl. But the error would
+      have been already trapped when fixing the method's signature.
+      DECL can also be NULL in case of earlier errors. */
+   if (!decl || !cl)
      return;
  
+   if (inner_class_accessible (decl, enclosing_decl))
+     return;
+ 
+   if (CLASS_PRIVATE (decl))
+       access = "private";
+   else if (CLASS_PROTECTED (decl))
+       access = "protected";
+   else
+       access = "non-public";
+ 
    parse_error_context (cl, "Nested %s %s is %s; cannot be accessed from here",
  		       (CLASS_INTERFACE (decl) ? "interface" : "class"),
  		       lang_printable_name (decl, 2), access);
*************** declare_local_variables (int modifier, t
*** 7498,7513 ****
        DECL_FINAL (decl) = final_p;
        BLOCK_CHAIN_DECL (decl);
  
-       /* If doing xreferencing, replace the line number with the WFL
-          compound value */
- #ifdef USE_MAPPED_LOCATION
-       if (flag_emit_xref)
- 	DECL_SOURCE_LOCATION (decl) = EXPR_LOCATION (wfl);
- #else
-       if (flag_emit_xref)
- 	DECL_SOURCE_LINE (decl) = EXPR_WFL_LINECOL (wfl);
- #endif
- 
        /* Don't try to use an INIT statement when an error was found */
        if (init && java_error_count)
  	init = NULL_TREE;
--- 7491,7496 ----
*************** source_start_java_method (tree fndecl)
*** 7588,7593 ****
--- 7571,7579 ----
  	  DECL_FINAL (parm_decl) = 1;
  	}
  
+       if (name == this_identifier_node)
+ 	DECL_ARTIFICIAL (parm_decl) = 1;
+ 
        BLOCK_CHAIN_DECL (parm_decl);
      }
    tem = BLOCK_EXPR_DECLS (DECL_FUNCTION_BODY (current_function_decl));
*************** source_end_java_method (void)
*** 7688,7695 ****
      BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl)) = NULL_TREE;
  
    if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl))
!       && ! flag_emit_class_files
!       && ! flag_emit_xref)
      finish_method (fndecl);
  
    current_function_decl = NULL_TREE;
--- 7674,7680 ----
      BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl)) = NULL_TREE;
  
    if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl))
!       && ! flag_emit_class_files)
      finish_method (fndecl);
  
    current_function_decl = NULL_TREE;
*************** java_complete_expand_classes (void)
*** 7850,7857 ****
  {
    tree current;
  
-   do_not_fold = flag_emit_xref;
- 
    for (current = ctxp->class_list; current; current = TREE_CHAIN (current))
      if (!INNER_CLASS_DECL_P (current))
        java_complete_expand_class (current);
--- 7835,7840 ----
*************** maybe_yank_clinit (tree mdecl)
*** 8125,8131 ****
  
    /* Now we analyze the method body and look for something that
       isn't a MODIFY_EXPR */
!   if (!IS_EMPTY_STMT (bbody) && analyze_clinit_body (type, bbody))
      return 0;
  
    /* Get rid of <clinit> in the class' list of methods */
--- 8108,8114 ----
  
    /* Now we analyze the method body and look for something that
       isn't a MODIFY_EXPR */
!   if (bbody && !IS_EMPTY_STMT (bbody) && analyze_clinit_body (type, bbody))
      return 0;
  
    /* Get rid of <clinit> in the class' list of methods */
*************** java_complete_expand_method (tree mdecl)
*** 8213,8223 ****
    current_this = (!METHOD_STATIC (mdecl) ?
  		  BLOCK_EXPR_DECLS (DECL_FUNCTION_BODY (mdecl)) : NULL_TREE);
  
-   /* Purge the `throws' list of unchecked exceptions (we save a copy
-      of the list and re-install it later.) */
-   exception_copy = copy_list (DECL_FUNCTION_THROWS (mdecl));
-   purge_unchecked_exceptions (mdecl);
- 
    /* Install exceptions thrown with `throws' */
    PUSH_EXCEPTIONS (DECL_FUNCTION_THROWS (mdecl));
  
--- 8196,8201 ----
*************** java_complete_expand_method (tree mdecl)
*** 8230,8236 ****
        htab_traverse (DECL_FUNCTION_INIT_TEST_TABLE (mdecl),
  		     attach_init_test_initialization_flags, block_body);
  
!       if (! flag_emit_xref && ! METHOD_NATIVE (mdecl))
  	{
  	  check_for_initialization (block_body, mdecl);
  
--- 8208,8214 ----
        htab_traverse (DECL_FUNCTION_INIT_TEST_TABLE (mdecl),
  		     attach_init_test_initialization_flags, block_body);
  
!       if (! METHOD_NATIVE (mdecl))
  	{
  	  check_for_initialization (block_body, mdecl);
  
*************** java_complete_expand_method (tree mdecl)
*** 8260,8267 ****
       an error_mark_node here. */
    if (block_body != error_mark_node
        && (block_body == NULL_TREE || CAN_COMPLETE_NORMALLY (block_body))
!       && TREE_CODE (TREE_TYPE (TREE_TYPE (mdecl))) != VOID_TYPE
!       && !flag_emit_xref)
      missing_return_error (current_function_decl);
  
    /* See if we can get rid of <clinit> if MDECL happens to be <clinit> */
--- 8238,8244 ----
       an error_mark_node here. */
    if (block_body != error_mark_node
        && (block_body == NULL_TREE || CAN_COMPLETE_NORMALLY (block_body))
!       && TREE_CODE (TREE_TYPE (TREE_TYPE (mdecl))) != VOID_TYPE)
      missing_return_error (current_function_decl);
  
    /* See if we can get rid of <clinit> if MDECL happens to be <clinit> */
*************** java_complete_expand_method (tree mdecl)
*** 8276,8284 ****
    POP_EXCEPTIONS();
    if (currently_caught_type_list)
      abort ();
- 
-   /* Restore the copy of the list of exceptions if emitting xrefs. */
-   DECL_FUNCTION_THROWS (mdecl) = exception_copy;
  }
  
  /* For with each class for which there's code to generate. */
--- 8253,8258 ----
*************** java_expand_method_bodies (tree class)
*** 8343,8456 ****
     fields either directly by using the relevant access to this$<n> or
     by invoking an access method crafted for that purpose.  */
  
! /* Build the necessary access from an inner class to an outer
!    class. This routine could be optimized to cache previous result
     (decl, current_class and returned access).  When an access method
!    needs to be generated, it always takes the form of a read. It might
!    be later turned into a write by calling outer_field_access_fix.  */
  
  static tree
! build_outer_field_access (tree id, tree decl)
  {
    tree access = NULL_TREE;
!   tree ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class)));
    tree decl_ctx = DECL_CONTEXT (decl);
  
!   /* If the immediate enclosing context of the current class is the
!      field decl's class or inherits from it; build the access as
!      `this$<n>.<field>'. Note that we will break the `private' barrier
!      if we're not emitting bytecodes. */
!   if ((ctx == decl_ctx || inherits_from_p (ctx, decl_ctx))
!       && (!FIELD_PRIVATE (decl) || !flag_emit_class_files ))
      {
        tree thisn = build_current_thisn (current_class);
        access = make_qualified_primary (build_wfl_node (thisn),
  				       id, EXPR_WFL_LINECOL (id));
      }
!   /* Otherwise, generate access methods to outer this and access the
!      field (either using an access method or by direct access.) */
    else
      {
        int lc = EXPR_WFL_LINECOL (id);
  
        /* Now we chain the required number of calls to the access$0 to
! 	 get a hold to the enclosing instance we need, and then we
! 	 build the field access. */
!       access = build_access_to_thisn (current_class, decl_ctx, lc);
  
        /* If the field is private and we're generating bytecode, then
!          we generate an access method */
!       if (FIELD_PRIVATE (decl) && flag_emit_class_files )
  	{
! 	  tree name = build_outer_field_access_methods (decl);
! 	  access = build_outer_field_access_expr (lc, decl_ctx,
! 						  name, access, NULL_TREE);
  	}
!       /* Otherwise we use `access$(this$<j>). ... access$(this$<i>).<field>'.
  	 Once again we break the `private' access rule from a foreign
! 	 class. */
        else
! 	access = make_qualified_primary (access, id, lc);
      }
    return resolve_expression_name (access, NULL);
  }
  
! /* Return a nonzero value if NODE describes an outer field inner
!    access.  */
  
  static int
! outer_field_access_p (tree type, tree decl)
  {
    if (!INNER_CLASS_TYPE_P (type)
!       || TREE_CODE (decl) != FIELD_DECL
!       || DECL_CONTEXT (decl) == type)
      return 0;
  
!   /* If the inner class extends the declaration context of the field
!      we're trying to access, then this isn't an outer field access */
!   if (inherits_from_p (type, DECL_CONTEXT (decl)))
      return 0;
  
!   for (type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type))); ;
!        type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type))))
      {
!       if (type == DECL_CONTEXT (decl))
! 	return 1;
  
!       if (!DECL_CONTEXT (TYPE_NAME (type)))
! 	{
! 	  /* Before we give up, see whether the field is inherited from
! 	     the enclosing context we're considering. */
! 	  if (inherits_from_p (type, DECL_CONTEXT (decl)))
! 	    return 1;
! 	  break;
! 	}
      }
  
    return 0;
  }
  
! /* Return a nonzero value if NODE represents an outer field inner
!    access that was been already expanded. As a side effect, it returns
     the name of the field being accessed and the argument passed to the
     access function, suitable for a regeneration of the access method
!    call if necessary. */
  
  static int
! outer_field_expanded_access_p (tree node, tree *name, tree *arg_type,
! 			       tree *arg)
  {
    int identified = 0;
  
    if (TREE_CODE (node) != CALL_EXPR)
      return 0;
  
!   /* Well, gcj generates slightly different tree nodes when compiling
!      to native or bytecodes. It's the case for function calls. */
  
    if (flag_emit_class_files
        && TREE_CODE (node) == CALL_EXPR
!       && OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0))))
      identified = 1;
    else if (!flag_emit_class_files)
      {
--- 8317,8479 ----
     fields either directly by using the relevant access to this$<n> or
     by invoking an access method crafted for that purpose.  */
  
! /* Build the necessary access across nested class boundaries.
!    This routine could be optimized to cache previous result
     (decl, current_class and returned access).  When an access method
!    needs to be generated, it always takes the form of a read.  It might
!    be later turned into a write by calling nested_field_access_fix.  */
  
  static tree
! build_nested_field_access (tree id, tree decl)
  {
    tree access = NULL_TREE;
!   tree ctx = NULL_TREE;
    tree decl_ctx = DECL_CONTEXT (decl);
+   bool is_static = FIELD_STATIC (decl);
  
!   if (DECL_CONTEXT (TYPE_NAME (current_class)))
!     ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class)));
! 
!   /* For non-static fields, if the immediate enclosing context of the
!      current class is the field decl's class or inherits from it,
!      build the access as `this$<n>.<field>'.  Note that we will break
!      the `private' barrier if we're not emitting bytecodes.  */
!   if (!is_static
!       && ctx
!       && (ctx == decl_ctx || inherits_from_p (ctx, decl_ctx))
!       && (!FIELD_PRIVATE (decl) || !flag_emit_class_files))
      {
        tree thisn = build_current_thisn (current_class);
        access = make_qualified_primary (build_wfl_node (thisn),
  				       id, EXPR_WFL_LINECOL (id));
      }
!   /* Otherwise, generate and use accessor methods for the field as
!      needed.  */
    else
      {
        int lc = EXPR_WFL_LINECOL (id);
  
        /* Now we chain the required number of calls to the access$0 to
! 	 get a hold to the enclosing instance we need for a non-static
!          field, and then we build the field access. */
!       if (!is_static)
!         access = build_access_to_thisn (current_class, decl_ctx, lc);
  
        /* If the field is private and we're generating bytecode, then
!          we generate an access method.  */
!       if (FIELD_PRIVATE (decl) && flag_emit_class_files)
  	{
! 	  tree name = build_nested_field_access_methods (decl);
! 	  access = build_nested_field_access_expr (lc, decl_ctx,
! 						   name, access, NULL_TREE);
  	}
!       /* Otherwise we use `access$(this$<j>). ... access$(this$<i>).<field>'
!          for non-static fields.
  	 Once again we break the `private' access rule from a foreign
! 	 class.  */
!       else if (is_static)
!         {
!           tree class_name = DECL_NAME (TYPE_NAME (decl_ctx));
!           access
!             = make_qualified_primary (build_wfl_node (class_name), id, lc);
!         }
        else
!         access = make_qualified_primary (access, id, lc);
      }
+ 
    return resolve_expression_name (access, NULL);
  }
  
! /* Return a nonzero value if DECL describes a member access across nested
!    class boundaries.  That is, DECL is in a class that either encloses,
!    is enclosed by or shares a common enclosing class with the class
!    TYPE.  */
  
  static int
! nested_member_access_p (tree type, tree decl)
  {
+   bool is_static = false;
+   tree decl_type = DECL_CONTEXT (decl);
+   tree type_root, decl_type_root;
+ 
+   if (decl_type == type
+       || (TREE_CODE (decl) != FIELD_DECL
+           && TREE_CODE (decl) != VAR_DECL
+           && TREE_CODE (decl) != FUNCTION_DECL))
+     return 0;
+   
    if (!INNER_CLASS_TYPE_P (type)
!       && !(TREE_CODE (decl_type) == RECORD_TYPE
!            && INNER_CLASS_TYPE_P (decl_type)))
      return 0;
  
!   is_static = (TREE_CODE (decl) == FUNCTION_DECL)
!               ? METHOD_STATIC (decl)
!               : FIELD_STATIC (decl);
! 
!   /* If TYPE extends the declaration context of the non-static
!      member we're trying to access, then this isn't a nested member
!      access we need to worry about.  */
!   if (!is_static && inherits_from_p (type, decl_type))
      return 0;
  
!   for (type_root = type;
!        DECL_CONTEXT (TYPE_NAME (type_root));
!        type_root = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type_root))))
      {
!       if (type_root == decl_type)
!         return 1;
!     }
  
!   if (TREE_CODE (decl_type) == RECORD_TYPE
!       && INNER_CLASS_TYPE_P (decl_type))
!     {
!       for (decl_type_root = decl_type;
!            DECL_CONTEXT (TYPE_NAME (decl_type_root));
!            decl_type_root
!              = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (decl_type_root))))
!         {
!           if (decl_type_root == type)
!             return 1;
!         }
      }
+   else
+     decl_type_root = decl_type;
+     
+   if (type_root == decl_type_root)
+     return 1;
+ 
+   /* Before we give up, see whether it is a non-static field
+      inherited from the enclosing context we are considering.  */
+   if (!DECL_CONTEXT (TYPE_NAME (type_root))
+       && !is_static
+       && inherits_from_p (type_root, decl_type))
+     return 1;
  
    return 0;
  }
  
! /* Return a nonzero value if NODE represents a cross-nested-class 
!    access that has already been expanded.  As a side effect, it returns
     the name of the field being accessed and the argument passed to the
     access function, suitable for a regeneration of the access method
!    call if necessary.  */
  
  static int
! nested_field_expanded_access_p (tree node, tree *name, tree *arg_type,
! 			        tree *arg)
  {
    int identified = 0;
  
    if (TREE_CODE (node) != CALL_EXPR)
      return 0;
  
!   /* Well, GCJ generates slightly different tree nodes when compiling
!      to native or bytecodes.  It's the case for function calls.  */
  
    if (flag_emit_class_files
        && TREE_CODE (node) == CALL_EXPR
!       && NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0))))
      identified = 1;
    else if (!flag_emit_class_files)
      {
*************** outer_field_expanded_access_p (tree node
*** 8462,8468 ****
  	  node = TREE_OPERAND (node, 0);
  	  if (TREE_OPERAND (node, 0)
  	      && TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL
! 	      && (OUTER_FIELD_ACCESS_IDENTIFIER_P
  		  (DECL_NAME (TREE_OPERAND (node, 0)))))
  	    identified = 1;
  	}
--- 8485,8491 ----
  	  node = TREE_OPERAND (node, 0);
  	  if (TREE_OPERAND (node, 0)
  	      && TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL
! 	      && (NESTED_FIELD_ACCESS_IDENTIFIER_P
  		  (DECL_NAME (TREE_OPERAND (node, 0)))))
  	    identified = 1;
  	}
*************** outer_field_expanded_access_p (tree node
*** 8472,8497 ****
      {
        tree argument = TREE_OPERAND (node, 1);
        *name = DECL_NAME (TREE_OPERAND (node, 0));
!       *arg_type = TREE_TYPE (TREE_TYPE (TREE_VALUE (argument)));
!       *arg = TREE_VALUE (argument);
      }
    return identified;
  }
  
! /* Detect in NODE an outer field read access from an inner class and
!    transform it into a write with RHS as an argument. This function is
!    called from the java_complete_lhs when an assignment to a LHS can
!    be identified. */
  
  static tree
! outer_field_access_fix (tree wfl, tree node, tree rhs)
  {
    tree name, arg_type, arg;
  
!   if (outer_field_expanded_access_p (node, &name, &arg_type, &arg))
      {
!       node = build_outer_field_access_expr (EXPR_WFL_LINECOL (wfl),
! 					    arg_type, name, arg, rhs);
        return java_complete_tree (node);
      }
    return NULL_TREE;
--- 8495,8531 ----
      {
        tree argument = TREE_OPERAND (node, 1);
        *name = DECL_NAME (TREE_OPERAND (node, 0));
! 
!       /* The accessors for static fields do not take in a this$<n> argument,
!          so we take the class name from the accessor's context instead.  */
!       if (argument)
!         {
!           *arg_type = TREE_TYPE (TREE_TYPE (TREE_VALUE (argument)));
!           *arg = TREE_VALUE (argument);
!         }
!       else
!         {
!           *arg_type = DECL_CONTEXT (TREE_OPERAND (node, 0));
!           *arg = NULL_TREE;
!         }
      }
    return identified;
  }
  
! /* Detect in NODE cross-nested-class field read access and
!    transform it into a write with RHS as an argument.  This function
!    is called from the java_complete_lhs when an assignment to a LHS can
!    be identified.  */
  
  static tree
! nested_field_access_fix (tree wfl, tree node, tree rhs)
  {
    tree name, arg_type, arg;
  
!   if (nested_field_expanded_access_p (node, &name, &arg_type, &arg))
      {
!       node = build_nested_field_access_expr (EXPR_WFL_LINECOL (wfl),
! 					     arg_type, name, arg, rhs);
        return java_complete_tree (node);
      }
    return NULL_TREE;
*************** outer_field_access_fix (tree wfl, tree n
*** 8504,8526 ****
     read access.  */
  
  static tree
! build_outer_field_access_expr (int lc, tree type, tree access_method_name,
! 			       tree arg1, tree arg2)
  {
    tree args, cn, access;
  
!   args = arg1 ? arg1 :
!     build_wfl_node (build_current_thisn (current_class));
!   args = build_tree_list (NULL_TREE, args);
  
    if (arg2)
!     args = tree_cons (NULL_TREE, arg2, args);
  
!   access = build_method_invocation (build_wfl_node (access_method_name), args);
    cn = build_wfl_node (DECL_NAME (TYPE_NAME (type)));
    return make_qualified_primary (cn, access, lc);
  }
  
  static tree
  build_new_access_id (void)
  {
--- 8538,8571 ----
     read access.  */
  
  static tree
! build_nested_field_access_expr (int lc, tree type, tree access_method_name,
! 			        tree arg1, tree arg2)
  {
    tree args, cn, access;
  
!   if (arg1)
!     args = build_tree_list (NULL_TREE, arg1);
!   else
!     args = NULL_TREE;
  
    if (arg2)
!     {
!       if (args)
!         args = tree_cons (NULL_TREE, arg2, args);
!       else
!         args = build_tree_list (NULL_TREE, arg2);
!     }
  
!   access
!     = build_method_invocation (build_wfl_node (access_method_name), args);
    cn = build_wfl_node (DECL_NAME (TYPE_NAME (type)));
+ 
    return make_qualified_primary (cn, access, lc);
  }
  
+ /* Build the name of a synthetic accessor used to access class members
+    across nested class boundaries.  */
+ 
  static tree
  build_new_access_id (void)
  {
*************** build_new_access_id (void)
*** 8531,8538 ****
    return get_identifier (buffer);
  }
  
! /* Create the static access functions for the outer field DECL. We define a
!    read:
       TREE_TYPE (<field>) access$<n> (DECL_CONTEXT (<field>) inst$) {
         return inst$.field;
       }
--- 8576,8583 ----
    return get_identifier (buffer);
  }
  
! /* Create the static access functions for the cross-nested-class field DECL.
!    We define a read:
       TREE_TYPE (<field>) access$<n> (DECL_CONTEXT (<field>) inst$) {
         return inst$.field;
       }
*************** build_new_access_id (void)
*** 8541,8603 ****
                                       TREE_TYPE (<field>) value$) {
         return inst$.field = value$;
       }
!    We should have a usage flags on the DECL so we can lazily turn the ones
!    we're using for code generation. FIXME.
  */
  
  static tree
! build_outer_field_access_methods (tree decl)
  {
!   tree id, args, stmt, mdecl;
  
!   if (FIELD_INNER_ACCESS_P (decl))
!     return FIELD_INNER_ACCESS (decl);
  
    MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
  
!   /* Create the identifier and a function named after it. */
    id = build_new_access_id ();
  
    /* The identifier is marked as bearing the name of a generated write
!      access function for outer field accessed from inner classes. */
!   OUTER_FIELD_ACCESS_IDENTIFIER_P (id) = 1;
  
!   /* Create the read access */
!   args = build_tree_list (inst_id, build_pointer_type (DECL_CONTEXT (decl)));
!   TREE_CHAIN (args) = end_params_node;
!   stmt = make_qualified_primary (build_wfl_node (inst_id),
! 				 build_wfl_node (DECL_NAME (decl)), 0);
    stmt = build_return (0, stmt);
!   mdecl = build_outer_field_access_method (DECL_CONTEXT (decl),
! 					   TREE_TYPE (decl), id, args, stmt);
    DECL_FUNCTION_ACCESS_DECL (mdecl) = decl;
  
!   /* Create the write access method. No write access for final variable */
    if (!FIELD_FINAL (decl))
      {
!       args = build_tree_list (inst_id,
! 			      build_pointer_type (DECL_CONTEXT (decl)));
!       TREE_CHAIN (args) = build_tree_list (wpv_id, TREE_TYPE (decl));
!       TREE_CHAIN (TREE_CHAIN (args)) = end_params_node;
!       stmt = make_qualified_primary (build_wfl_node (inst_id),
! 				     build_wfl_node (DECL_NAME (decl)), 0);
        stmt = build_return (0, build_assignment (ASSIGN_TK, 0, stmt,
  						build_wfl_node (wpv_id)));
!       mdecl = build_outer_field_access_method (DECL_CONTEXT (decl),
! 					       TREE_TYPE (decl), id,
! 					       args, stmt);
      }
    DECL_FUNCTION_ACCESS_DECL (mdecl) = decl;
  
    /* Return the access name */
!   return FIELD_INNER_ACCESS (decl) = id;
  }
  
! /* Build an field access method NAME.  */
  
  static tree
! build_outer_field_access_method (tree class, tree type, tree name,
! 				 tree args, tree body)
  {
    tree saved_current_function_decl, mdecl;
  
--- 8586,8674 ----
                                       TREE_TYPE (<field>) value$) {
         return inst$.field = value$;
       }
!    For static fields, these methods are generated without the instance
!    parameter.
!    We should have a usage flag on the DECL so we can lazily turn the ones
!    we're using for code generation.  FIXME.
  */
  
  static tree
! build_nested_field_access_methods (tree decl)
  {
!   tree id, args, stmt, mdecl, class_name = NULL_TREE;
!   bool is_static = FIELD_STATIC (decl);
  
!   if (FIELD_NESTED_ACCESS_P (decl))
!     return FIELD_NESTED_ACCESS (decl);
  
    MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
  
!   /* Create the identifier and a function named after it.  */
    id = build_new_access_id ();
  
    /* The identifier is marked as bearing the name of a generated write
!      access function for outer field accessed from inner classes.  */
!   NESTED_FIELD_ACCESS_IDENTIFIER_P (id) = 1;
  
!   /* Create the read access.  */
!   if (!is_static)
!     {
!       args = build_tree_list (inst_id,
!                               build_pointer_type (DECL_CONTEXT (decl)));
!       TREE_CHAIN (args) = end_params_node;
!       stmt = make_qualified_primary (build_wfl_node (inst_id),
! 				     build_wfl_node (DECL_NAME (decl)), 0);
!     }
!   else
!     {
!       args = end_params_node;
!       class_name = DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)));
!       stmt = make_qualified_primary (build_wfl_node (class_name),
!                                      build_wfl_node (DECL_NAME (decl)), 0);
!     }
    stmt = build_return (0, stmt);
!   mdecl = build_nested_field_access_method (DECL_CONTEXT (decl),
! 					    TREE_TYPE (decl), id, args, stmt);
    DECL_FUNCTION_ACCESS_DECL (mdecl) = decl;
  
!   /* Create the write access method.  No write access for final variable */
    if (!FIELD_FINAL (decl))
      {
!       if (!is_static)
!         {
!           args = build_tree_list (inst_id,
! 			          build_pointer_type (DECL_CONTEXT (decl)));
!           TREE_CHAIN (args) = build_tree_list (wpv_id, TREE_TYPE (decl));
!           TREE_CHAIN (TREE_CHAIN (args)) = end_params_node;
!           stmt = make_qualified_primary (build_wfl_node (inst_id),
! 				         build_wfl_node (DECL_NAME (decl)),
!                                          0);
!         }
!       else
!         {
!           args = build_tree_list (wpv_id, TREE_TYPE (decl));
!           TREE_CHAIN (args) = end_params_node;
!           stmt = make_qualified_primary (build_wfl_node (class_name),
!                                          build_wfl_node (DECL_NAME (decl)),
!                                          0);
!         }
        stmt = build_return (0, build_assignment (ASSIGN_TK, 0, stmt,
  						build_wfl_node (wpv_id)));
!       mdecl = build_nested_field_access_method (DECL_CONTEXT (decl),
! 					        TREE_TYPE (decl), id,
! 					        args, stmt);
      }
    DECL_FUNCTION_ACCESS_DECL (mdecl) = decl;
  
    /* Return the access name */
!   return FIELD_NESTED_ACCESS (decl) = id;
  }
  
! /* Build a field access method NAME.  */
  
  static tree
! build_nested_field_access_method (tree class, tree type, tree name,
! 				  tree args, tree body)
  {
    tree saved_current_function_decl, mdecl;
  
*************** build_outer_field_access_method (tree cl
*** 8618,8627 ****
  
  
  /* This section deals with building access function necessary for
!    certain kinds of method invocation from inner classes.  */
  
  static tree
! build_outer_method_access_method (tree decl)
  {
    tree saved_current_function_decl, mdecl;
    tree args = NULL_TREE, call_args = NULL_TREE;
--- 8689,8698 ----
  
  
  /* This section deals with building access function necessary for
!    certain kinds of method invocation across nested class boundaries.  */
  
  static tree
! build_nested_method_access_method (tree decl)
  {
    tree saved_current_function_decl, mdecl;
    tree args = NULL_TREE, call_args = NULL_TREE;
*************** build_outer_method_access_method (tree d
*** 8641,8647 ****
  
    /* Obtain an access identifier and mark it */
    id = build_new_access_id ();
!   OUTER_FIELD_ACCESS_IDENTIFIER_P (id) = 1;
  
    carg = TYPE_ARG_TYPES (TREE_TYPE (decl));
    /* Create the arguments, as much as the original */
--- 8712,8718 ----
  
    /* Obtain an access identifier and mark it */
    id = build_new_access_id ();
!   NESTED_FIELD_ACCESS_IDENTIFIER_P (id) = 1;
  
    carg = TYPE_ARG_TYPES (TREE_TYPE (decl));
    /* Create the arguments, as much as the original */
*************** build_outer_method_access_method (tree d
*** 8670,8677 ****
    start_artificial_method_body (mdecl);
  
    /* The actual method invocation uses the same args. When invoking a
!      static methods that way, we don't want to skip the first
!      argument. */
    carg = args;
    if (!METHOD_STATIC (decl))
      carg = TREE_CHAIN (carg);
--- 8741,8747 ----
    start_artificial_method_body (mdecl);
  
    /* The actual method invocation uses the same args. When invoking a
!      static methods that way, we don't want to skip the first argument.  */
    carg = args;
    if (!METHOD_STATIC (decl))
      carg = TREE_CHAIN (carg);
*************** build_outer_method_access_method (tree d
*** 8690,8699 ****
    end_artificial_method_body (mdecl);
    current_function_decl = saved_current_function_decl;
  
!   /* Back tag the access function so it know what it accesses */
    DECL_FUNCTION_ACCESS_DECL (decl) = mdecl;
  
!   /* Tag the current method so it knows it has an access generated */
    return DECL_FUNCTION_INNER_ACCESS (decl) = mdecl;
  }
  
--- 8760,8769 ----
    end_artificial_method_body (mdecl);
    current_function_decl = saved_current_function_decl;
  
!   /* Back tag the access function so it know what it accesses.  */
    DECL_FUNCTION_ACCESS_DECL (decl) = mdecl;
  
!   /* Tag the current method so it knows it has an access generated.  */
    return DECL_FUNCTION_INNER_ACCESS (decl) = mdecl;
  }
  
*************** build_outer_method_access_method (tree d
*** 8707,8713 ****
     others. Access methods to this$<n> are build on the fly if
     necessary. This CAN'T be used to solely access this$<n-1> from
     this$<n> (which alway yield to special cases and optimization, see
!    for example build_outer_field_access).  */
  
  static tree
  build_access_to_thisn (tree from, tree to, int lc)
--- 8777,8783 ----
     others. Access methods to this$<n> are build on the fly if
     necessary. This CAN'T be used to solely access this$<n-1> from
     this$<n> (which alway yield to special cases and optimization, see
!    for example build_nested_field_access).  */
  
  static tree
  build_access_to_thisn (tree from, tree to, int lc)
*************** fix_constructors (tree mdecl)
*** 8998,9004 ****
        /* It is an error for the compiler to generate a default
  	 constructor if the superclass doesn't have a constructor that
  	 takes no argument, or the same args for an anonymous class */
!       if (verify_constructor_super (mdecl))
  	{
  	  tree sclass_decl = TYPE_NAME (CLASSTYPE_SUPER (class_type));
  	  tree save = DECL_NAME (mdecl);
--- 9068,9075 ----
        /* It is an error for the compiler to generate a default
  	 constructor if the superclass doesn't have a constructor that
  	 takes no argument, or the same args for an anonymous class */
!       tree sdecl = get_constructor_super (mdecl);
!       if (sdecl == NULL_TREE)
  	{
  	  tree sclass_decl = TYPE_NAME (CLASSTYPE_SUPER (class_type));
  	  tree save = DECL_NAME (mdecl);
*************** fix_constructors (tree mdecl)
*** 9011,9016 ****
--- 9082,9094 ----
  	  DECL_NAME (mdecl) = save;
  	}
  
+       if (ANONYMOUS_CLASS_P (class_type))
+ 	{
+ 	  /* Copy throws clause from the super constructor.  */
+ 	  tree throws = DECL_FUNCTION_THROWS (sdecl);
+ 	  DECL_FUNCTION_THROWS (mdecl) = copy_list (throws);
+ 	}
+ 
        /* The constructor body must be crafted by hand. It's the
  	 constructor we defined when we realize we didn't have the
  	 CLASSNAME() constructor */
*************** fix_constructors (tree mdecl)
*** 9095,9113 ****
  }
  
  /* Browse constructors in the super class, searching for a constructor
!    that doesn't take any argument. Return 0 if one is found, 1
!    otherwise.  If the current class is an anonymous inner class, look
!    for something that has the same signature. */
! 
! static int
! verify_constructor_super (tree mdecl)
  {
    tree class = CLASSTYPE_SUPER (current_class);
    int super_inner = PURE_INNER_CLASS_TYPE_P (class);
    tree sdecl;
  
    if (!class)
!     return 0;
  
    if (ANONYMOUS_CLASS_P (current_class))
      {
--- 9173,9190 ----
  }
  
  /* Browse constructors in the super class, searching for a constructor
!    that doesn't take any argument. Return the constructor if one is found, 
!    NULL_TREE otherwise.  If the current class is an anonymous inner class, 
!    look for something that has the same signature. */
! static tree
! get_constructor_super (tree mdecl)
  {
    tree class = CLASSTYPE_SUPER (current_class);
    int super_inner = PURE_INNER_CLASS_TYPE_P (class);
    tree sdecl;
  
    if (!class)
!     return NULL_TREE;
  
    if (ANONYMOUS_CLASS_P (current_class))
      {
*************** verify_constructor_super (tree mdecl)
*** 9131,9137 ****
  		break;
  
  	    if (arg_type == end_params_node && m_arg_type == end_params_node)
! 	      return 0;
  	  }
      }
    else
--- 9208,9214 ----
  		break;
  
  	    if (arg_type == end_params_node && m_arg_type == end_params_node)
! 	      return sdecl;
  	  }
      }
    else
*************** verify_constructor_super (tree mdecl)
*** 9142,9151 ****
  	  if (super_inner)
  	    arg = TREE_CHAIN (arg);
  	  if (DECL_CONSTRUCTOR_P (sdecl) && arg == end_params_node)
! 	    return 0;
  	}
      }
!   return 1;
  }
  
  /* Generate code for all context remembered for code generation.  */
--- 9219,9228 ----
  	  if (super_inner)
  	    arg = TREE_CHAIN (arg);
  	  if (DECL_CONSTRUCTOR_P (sdecl) && arg == end_params_node)
! 	    return sdecl;
  	}
      }
!   return NULL_TREE;
  }
  
  /* Generate code for all context remembered for code generation.  */
*************** java_expand_classes (void)
*** 9263,9272 ****
  #endif
  
    /* If we've found error at that stage, don't try to generate
!      anything, unless we're emitting xrefs or checking the syntax only
       (but not using -fsyntax-only for the purpose of generating
!      bytecode. */
!   if (java_error_count && !flag_emit_xref
        && (!flag_syntax_only && !flag_emit_class_files))
      return;
  
--- 9340,9349 ----
  #endif
  
    /* If we've found error at that stage, don't try to generate
!      anything, unless we're checking the syntax only
       (but not using -fsyntax-only for the purpose of generating
!      bytecode).  */
!   if (java_error_count
        && (!flag_syntax_only && !flag_emit_class_files))
      return;
  
*************** java_expand_classes (void)
*** 9312,9319 ****
  	  output_class = current_class = TREE_TYPE (TREE_VALUE (current));
  	  if (flag_emit_class_files)
  	    write_classfile (current_class);
- 	  if (flag_emit_xref)
- 	    expand_xref (current_class);
  	  else if (! flag_syntax_only)
  	    java_expand_method_bodies (current_class);
  	}
--- 9389,9394 ----
*************** resolve_expression_name (tree id, tree *
*** 9512,9526 ****
  
  	      /* If we're processing an inner class and we're trying
  		 to access a field belonging to an outer class, build
! 		 the access to the field */
! 	      if (!fs && outer_field_access_p (current_class, decl))
  		{
! 		  if (CLASS_STATIC (TYPE_NAME (current_class)))
  		    {
  		      static_ref_err (id, DECL_NAME (decl), current_class);
  		      return error_mark_node;
  		    }
! 		  access = build_outer_field_access (id, decl);
  		  if (orig)
  		    *orig = access;
  		  return access;
--- 9587,9608 ----
  
  	      /* If we're processing an inner class and we're trying
  		 to access a field belonging to an outer class, build
! 		 the access to the field.
! 		 As usual, we have to treat initialized static final
! 		 variables as a special case.  */
!               if (nested_member_access_p (current_class, decl)
!                   && ! (JDECL_P (decl) && CLASS_FINAL_VARIABLE_P (decl)
!                         && DECL_INITIAL (decl) != NULL_TREE
! 			&& (JSTRING_TYPE_P (TREE_TYPE (decl))
! 			    || JNUMERIC_TYPE_P (TREE_TYPE (decl)))
! 			&& TREE_CONSTANT (DECL_INITIAL (decl))))
  		{
! 		  if (!fs && CLASS_STATIC (TYPE_NAME (current_class)))
  		    {
  		      static_ref_err (id, DECL_NAME (decl), current_class);
  		      return error_mark_node;
  		    }
! 		  access = build_nested_field_access (id, decl);
  		  if (orig)
  		    *orig = access;
  		  return access;
*************** resolve_field_access (tree qual_wfl, tre
*** 9600,9616 ****
    /* Resolve the LENGTH field of an array here */
    if (DECL_P (decl) && DECL_NAME (decl) == length_identifier_node
        && type_found && TYPE_ARRAY_P (type_found)
!       && ! flag_emit_class_files && ! flag_emit_xref)
      {
        tree length = build_java_array_length_access (where_found);
        field_ref = length;
  
        /* In case we're dealing with a static array, we need to
! 	 initialize its class before the array length can be fetched.
! 	 It's also a good time to create a DECL_RTL for the field if
! 	 none already exists, otherwise if the field was declared in a
! 	 class found in an external file and hasn't been (and won't
! 	 be) accessed for its value, none will be created. */
        if (TREE_CODE (where_found) == VAR_DECL && FIELD_STATIC (where_found))
  	{
  	  build_static_field_ref (where_found);
--- 9682,9694 ----
    /* Resolve the LENGTH field of an array here */
    if (DECL_P (decl) && DECL_NAME (decl) == length_identifier_node
        && type_found && TYPE_ARRAY_P (type_found)
!       && ! flag_emit_class_files)
      {
        tree length = build_java_array_length_access (where_found);
        field_ref = length;
  
        /* In case we're dealing with a static array, we need to
! 	 initialize its class before the array length can be fetched.  */
        if (TREE_CODE (where_found) == VAR_DECL && FIELD_STATIC (where_found))
  	{
  	  build_static_field_ref (where_found);
*************** resolve_field_access (tree qual_wfl, tre
*** 9626,9632 ****
        if (!type_found)
  	type_found = DECL_CONTEXT (decl);
        is_static = FIELD_STATIC (decl);
!       field_ref = build_field_ref ((is_static && !flag_emit_xref?
  				    NULL_TREE : where_found),
  				   type_found, DECL_NAME (decl));
        if (field_ref == error_mark_node)
--- 9704,9710 ----
        if (!type_found)
  	type_found = DECL_CONTEXT (decl);
        is_static = FIELD_STATIC (decl);
!       field_ref = build_field_ref ((is_static ?
  				    NULL_TREE : where_found),
  				   type_found, DECL_NAME (decl));
        if (field_ref == error_mark_node)
*************** resolve_field_access (tree qual_wfl, tre
*** 9639,9645 ****
  	 looks like `field.ref', where `field' is a static field in an
  	 interface we implement.  */
        if (!flag_emit_class_files
- 	  && !flag_emit_xref
  	  && TREE_CODE (where_found) == VAR_DECL
  	  && FIELD_STATIC (where_found))
  	{
--- 9717,9722 ----
*************** resolve_qualified_expression_name (tree 
*** 10054,10071 ****
  	      decl = QUAL_RESOLUTION (q);
  	      if (!type)
  		{
! 		  if (TREE_CODE (decl) == FIELD_DECL && !FIELD_STATIC (decl))
  		    {
! 		      if (current_this)
! 			*where_found = current_this;
! 		      else
! 			{
! 			  static_ref_err (qual_wfl, DECL_NAME (decl),
! 					  current_class);
! 			  return 1;
! 			}
!                       if (outer_field_access_p (current_class, decl))
!                         decl = build_outer_field_access (qual_wfl, decl);
  		    }
  		  else
  		    {
--- 10131,10159 ----
  	      decl = QUAL_RESOLUTION (q);
  	      if (!type)
  		{
! 		  if (TREE_CODE (decl) == FIELD_DECL
!                       || TREE_CODE (decl) == VAR_DECL)
  		    {
!                       if (TREE_CODE (decl) == FIELD_DECL
!                           && !FIELD_STATIC (decl))
!                         {
!                	          if (current_this)
!                             *where_found = current_this;
!                           else
!                             {
!                               static_ref_err (qual_wfl, DECL_NAME (decl),
!                                               current_class);
!                               return 1;
!                             }
!                         }
!                       else
!                         {
!                           *where_found = TREE_TYPE (decl);
!                           if (TREE_CODE (*where_found) == POINTER_TYPE)
!                             *where_found = TREE_TYPE (*where_found);
!                         }
!                       if (nested_member_access_p (current_class, decl))
!                         decl = build_nested_field_access (qual_wfl, decl);
  		    }
  		  else
  		    {
*************** resolve_qualified_expression_name (tree 
*** 10174,10180 ****
  		}
  	      from_cast = from_super = 0;
  
! 	      /* It's an access from a type but it isn't static, we
  		 make it relative to `this'. */
  	      if (!is_static && from_type)
  		decl = current_this;
--- 10262,10268 ----
  		}
  	      from_cast = from_super = 0;
  
! 	      /* If it's an access from a type but isn't static, we
  		 make it relative to `this'. */
  	      if (!is_static && from_type)
  		decl = current_this;
*************** resolve_qualified_expression_name (tree 
*** 10189,10196 ****
  		    return 1;
  		}
  
! 	      /* We want to keep the location were found it, and the type
! 		 we found. */
  	      *where_found = decl;
  	      *type_found = type;
  
--- 10277,10284 ----
  		    return 1;
  		}
  
!               /* We want to keep the location where we found it, and the
!                  type we found.  */
  	      *where_found = decl;
  	      *type_found = type;
  
*************** resolve_qualified_expression_name (tree 
*** 10198,10207 ****
  		 qualified this */
  	      if (from_qualified_this)
  		{
! 		  field_decl = build_outer_field_access (qual_wfl, field_decl);
  		  from_qualified_this = 0;
  		}
  
  	      /* This is the decl found and eventually the next one to
  		 search from */
  	      decl = field_decl;
--- 10286,10303 ----
  		 qualified this */
  	      if (from_qualified_this)
  		{
! 		  field_decl
!                     = build_nested_field_access (qual_wfl, field_decl);
  		  from_qualified_this = 0;
  		}
  
+               /* If needed, generate accessors for static field access.  */
+               if (is_static
+                   && FIELD_PRIVATE (field_decl)
+                   && flag_emit_class_files
+                   && nested_member_access_p (current_class, field_decl))
+                 field_decl = build_nested_field_access (qual_wfl, field_decl);
+ 
  	      /* This is the decl found and eventually the next one to
  		 search from */
  	      decl = field_decl;
*************** check_deprecation (tree wfl, tree decl)
*** 10370,10406 ****
  
  /* Returns 1 if class was declared in the current package, 0 otherwise */
  
- static GTY(()) tree cicp_cache;
  static int
  class_in_current_package (tree class)
  {
!   int qualified_flag;
!   tree left;
! 
!   if (cicp_cache == class)
!     return 1;
! 
!   qualified_flag = QUALIFIED_P (DECL_NAME (TYPE_NAME (class)));
! 
!   /* If the current package is empty and the name of CLASS is
!      qualified, class isn't in the current package.  If there is a
!      current package and the name of the CLASS is not qualified, class
!      isn't in the current package */
!   if ((!ctxp->package && qualified_flag) || (ctxp->package && !qualified_flag))
!     return 0;
! 
!   /* If there is not package and the name of CLASS isn't qualified,
!      they belong to the same unnamed package */
!   if (!ctxp->package && !qualified_flag)
      return 1;
- 
-   /* Compare the left part of the name of CLASS with the package name */
-   split_qualified_name (&left, NULL, DECL_NAME (TYPE_NAME (class)));
-   if (ctxp->package == left)
-     {
-       cicp_cache = class;
-       return 1;
-     }
    return 0;
  }
  
--- 10466,10476 ----
  
  /* Returns 1 if class was declared in the current package, 0 otherwise */
  
  static int
  class_in_current_package (tree class)
  {
!   if (TYPE_PACKAGE (current_class) == TYPE_PACKAGE (class))
      return 1;
    return 0;
  }
  
*************** patch_method_invocation (tree patch, tre
*** 10466,10472 ****
        if (TREE_CODE (resolved) == VAR_DECL && FIELD_STATIC (resolved)
           && FIELD_FINAL (resolved)
           && !inherits_from_p (DECL_CONTEXT (resolved), current_class)
!          && !flag_emit_class_files && !flag_emit_xref)
         resolved = build_class_init (DECL_CONTEXT (resolved), resolved);
  
        if (resolved == error_mark_node)
--- 10536,10542 ----
        if (TREE_CODE (resolved) == VAR_DECL && FIELD_STATIC (resolved)
           && FIELD_FINAL (resolved)
           && !inherits_from_p (DECL_CONTEXT (resolved), current_class)
!          && !flag_emit_class_files)
         resolved = build_class_init (DECL_CONTEXT (resolved), resolved);
  
        if (resolved == error_mark_node)
*************** patch_method_invocation (tree patch, tre
*** 10499,10514 ****
  		 IDENTIFIER_POINTER (name));
  	      PATCH_METHOD_RETURN_ERROR ();
  	    }
! 	  if (list && !METHOD_STATIC (list))
  	    {
! 	      char *fct_name = xstrdup (lang_printable_name (list, 2));
! 	      parse_error_context
! 		(identifier_wfl,
! 		 "Can't make static reference to method %<%s %s%> in class %qs",
! 		 lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0),
! 		 fct_name, IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
! 	      free (fct_name);
! 	      PATCH_METHOD_RETURN_ERROR ();
  	    }
  	}
        else
--- 10569,10590 ----
  		 IDENTIFIER_POINTER (name));
  	      PATCH_METHOD_RETURN_ERROR ();
  	    }
! 	  if (list)
  	    {
!               if (METHOD_STATIC (list))
!                 maybe_use_access_method (0, &list, NULL);
!               else
!                 {
!                   char *fct_name = xstrdup (lang_printable_name (list, 2));
!                   parse_error_context
!                     (identifier_wfl,
!                      "Can't make static reference to method %<%s %s%> in class %qs",
!                      lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0),
!                      fct_name,
!                      IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
!                   free (fct_name);
!                   PATCH_METHOD_RETURN_ERROR ();
!                 }
  	    }
  	}
        else
*************** patch_method_invocation (tree patch, tre
*** 10625,10631 ****
            && DECL_NAME (list) == get_identifier ("clone"))
          is_array_clone_call = 1;
  
!       /* Check for static reference if non static methods */
        if (check_for_static_method_reference (wfl, patch, list,
  					     class_to_search, primary))
  	PATCH_METHOD_RETURN_ERROR ();
--- 10701,10707 ----
            && DECL_NAME (list) == get_identifier ("clone"))
          is_array_clone_call = 1;
  
!       /* Check for static reference of non static methods.  */
        if (check_for_static_method_reference (wfl, patch, list,
  					     class_to_search, primary))
  	PATCH_METHOD_RETURN_ERROR ();
*************** patch_method_invocation (tree patch, tre
*** 10645,10652 ****
  	}
  
        /* Non static methods are called with the current object extra
! 	 argument. If patch a `new TYPE()', the argument is the value
! 	 returned by the object allocator. If method is resolved as a
  	 primary, use the primary otherwise use the current THIS. */
        args = nreverse (args);
        if (TREE_CODE (patch) != NEW_CLASS_EXPR)
--- 10721,10728 ----
  	}
  
        /* Non static methods are called with the current object extra
! 	 argument.  If PATCH is a `new TYPE()', the argument is the value
! 	 returned by the object allocator.  If method is resolved as a
  	 primary, use the primary otherwise use the current THIS. */
        args = nreverse (args);
        if (TREE_CODE (patch) != NEW_CLASS_EXPR)
*************** patch_method_invocation (tree patch, tre
*** 10658,10673 ****
  
  	     1) We're not generating bytecodes:
  
! 	     - LIST is non static. It's invocation is transformed from
  	       x(a1,...,an) into this$<n>.x(a1,....an).
! 	     - LIST is static. It's invocation is transformed from
  	       x(a1,...,an) into TYPE_OF(this$<n>).x(a1,....an)
  
  	     2) We're generating bytecodes:
  
! 	     - LIST is non static. It's invocation is transformed from
  	       x(a1,....,an) into access$<n>(this$<n>,a1,...,an).
! 	     - LIST is static. It's invocation is transformed from
  	       x(a1,....,an) into TYPE_OF(this$<n>).x(a1,....an).
  
  	     Of course, this$<n> can be arbitrarily complex, ranging from
--- 10734,10749 ----
  
  	     1) We're not generating bytecodes:
  
! 	     - LIST is non-static.  Its invocation is transformed from
  	       x(a1,...,an) into this$<n>.x(a1,....an).
! 	     - LIST is static.  Its invocation is transformed from
  	       x(a1,...,an) into TYPE_OF(this$<n>).x(a1,....an)
  
  	     2) We're generating bytecodes:
  
! 	     - LIST is non-static.  Its invocation is transformed from
  	       x(a1,....,an) into access$<n>(this$<n>,a1,...,an).
! 	     - LIST is static.  Its invocation is transformed from
  	       x(a1,....,an) into TYPE_OF(this$<n>).x(a1,....an).
  
  	     Of course, this$<n> can be arbitrarily complex, ranging from
*************** patch_method_invocation (tree patch, tre
*** 10676,10685 ****
  
  	     maybe_use_access_method returns a nonzero value if the
  	     this_arg has to be moved into the (then generated) stub
! 	     argument list. In the meantime, the selected function
! 	     might have be replaced by a generated stub. */
! 	  if (!primary &&
! 	      maybe_use_access_method (is_super_init, &list, &this_arg))
  	    {
  	      args = tree_cons (NULL_TREE, this_arg, args);
  	      this_arg = NULL_TREE; /* So it doesn't get chained twice */
--- 10752,10763 ----
  
  	     maybe_use_access_method returns a nonzero value if the
  	     this_arg has to be moved into the (then generated) stub
! 	     argument list.  In the meantime, the selected function
! 	     might have been replaced by a generated stub.  */
!           if (METHOD_STATIC (list))
!             maybe_use_access_method (0, &list, NULL);
! 	  else if (!primary &&
! 	           maybe_use_access_method (is_super_init, &list, &this_arg))
  	    {
  	      args = tree_cons (NULL_TREE, this_arg, args);
  	      this_arg = NULL_TREE; /* So it doesn't get chained twice */
*************** check_for_static_method_reference (tree 
*** 10847,10854 ****
    return 0;
  }
  
! /* Fix the invocation of *MDECL if necessary in the case of a
!    invocation from an inner class. *THIS_ARG might be modified
     appropriately and an alternative access to *MDECL might be
     returned.  */
  
--- 10925,10932 ----
    return 0;
  }
  
! /* Fix the invocation of *MDECL if necessary in the case of an
!    invocation across a nested class.  *THIS_ARG might be modified
     appropriately and an alternative access to *MDECL might be
     returned.  */
  
*************** static int
*** 10856,10880 ****
  maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg)
  {
    tree ctx;
!   tree md = *mdecl, ta = *this_arg;
    int to_return = 0;
    int non_static_context = !METHOD_STATIC (md);
  
    if (is_super_init
-       || DECL_CONTEXT (md) == current_class
-       || !PURE_INNER_CLASS_TYPE_P (current_class)
        || DECL_FINIT_P (md)
!       || DECL_INSTINIT_P (md))
      return 0;
  
    /* If we're calling a method found in an enclosing class, generate
!      what it takes to retrieve the right this. Don't do that if we're
!      invoking a static method. Note that if MD's type is unrelated to
       CURRENT_CLASS, then the current this can be used. */
  
    if (non_static_context 
!       && !inherits_from_p (current_class, DECL_CONTEXT (md)))
      {
        ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class)));
        if (inherits_from_p (ctx, DECL_CONTEXT (md)))
  	{
--- 10934,10959 ----
  maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg)
  {
    tree ctx;
!   tree md = *mdecl, ta = NULL_TREE;
    int to_return = 0;
    int non_static_context = !METHOD_STATIC (md);
  
    if (is_super_init
        || DECL_FINIT_P (md)
!       || DECL_INSTINIT_P (md)
!       || !nested_member_access_p (current_class, md))
      return 0;
  
    /* If we're calling a method found in an enclosing class, generate
!      what it takes to retrieve the right `this'.  Don't do that if we're
!      invoking a static method.  Note that if MD's type is unrelated to
       CURRENT_CLASS, then the current this can be used. */
  
    if (non_static_context 
!       && !inherits_from_p (current_class, DECL_CONTEXT (md))
!       && DECL_CONTEXT (TYPE_NAME (current_class)))
      {
+       ta = *this_arg;
        ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class)));
        if (inherits_from_p (ctx, DECL_CONTEXT (md)))
  	{
*************** maybe_use_access_method (int is_super_in
*** 10900,10915 ****
      }
  
    /* We might have to use an access method to get to MD. We can
!      break the method access rule as far as we're not generating
!      bytecode */
    if (METHOD_PRIVATE (md) && flag_emit_class_files)
      {
!       md = build_outer_method_access_method (md);
        to_return = 1;
      }
  
    *mdecl = md;
!   *this_arg = ta;
  
    /* Returning a nonzero value indicates we were doing a non static
       method invocation that is now a static invocation. It will have
--- 10979,10995 ----
      }
  
    /* We might have to use an access method to get to MD. We can
!      break the method access rule as long as we're not generating
!      bytecode.  */
    if (METHOD_PRIVATE (md) && flag_emit_class_files)
      {
!       md = build_nested_method_access_method (md);
        to_return = 1;
      }
  
    *mdecl = md;
!   if (this_arg)
!     *this_arg = ta;
  
    /* Returning a nonzero value indicates we were doing a non static
       method invocation that is now a static invocation. It will have
*************** patch_invoke (tree patch, tree method, t
*** 10946,10952 ****
    if (TREE_CODE (t) == POINTER_TYPE && !CLASS_LOADED_P (TREE_TYPE (t)))
      resolve_and_layout (TREE_TYPE (t), NULL);
  
!   if (flag_emit_class_files || flag_emit_xref)
      func = method;
    else
      {
--- 11026,11032 ----
    if (TREE_CODE (t) == POINTER_TYPE && !CLASS_LOADED_P (TREE_TYPE (t)))
      resolve_and_layout (TREE_TYPE (t), NULL);
  
!   if (flag_emit_class_files)
      func = method;
    else
      {
*************** patch_invoke (tree patch, tree method, t
*** 11012,11018 ****
        tree c1, saved_new, new;
        tree alloc_node;
  
!       if (flag_emit_class_files || flag_emit_xref)
  	{
  	  TREE_TYPE (patch) = build_pointer_type (class);
  	  return patch;
--- 11092,11098 ----
        tree c1, saved_new, new;
        tree alloc_node;
  
!       if (flag_emit_class_files)
  	{
  	  TREE_TYPE (patch) = build_pointer_type (class);
  	  return patch;
*************** lookup_method_invoke (int lc, tree cl, t
*** 11134,11139 ****
--- 11214,11230 ----
        /* And promoted */
        if (TREE_CODE (current_arg) == RECORD_TYPE)
          current_arg = promote_type (current_arg);
+       /* If we're building an anonymous constructor call, and one of
+ 	 the arguments has array type, cast it to a size-less array
+ 	 type.  This prevents us from getting a strange gcj-specific
+ 	 "sized array" signature in the constructor's signature.  */
+       if (lc && ANONYMOUS_CLASS_P (class)
+ 	  && TREE_CODE (current_arg) == POINTER_TYPE
+ 	  && TYPE_ARRAY_P (TREE_TYPE (current_arg)))
+ 	{
+ 	  tree elt = TYPE_ARRAY_ELEMENT (TREE_TYPE (current_arg));
+ 	  current_arg = build_pointer_type (build_java_array_type (elt, -1));
+ 	}
        atl = tree_cons (NULL_TREE, current_arg, atl);
      }
  
*************** find_most_specific_methods_list (tree li
*** 11368,11380 ****
  	  if (argument_types_convertible (method_v, current_v))
  	    {
  	      if (valid_method_invocation_conversion_p
! 		  (DECL_CONTEXT (method_v), DECL_CONTEXT (current_v))
! 		  || (INNER_CLASS_TYPE_P (DECL_CONTEXT (current_v))
! 		      && enclosing_context_p (DECL_CONTEXT (method_v),
! 					      DECL_CONTEXT (current_v))))
  		{
! 		  int v = (DECL_SPECIFIC_COUNT (current_v) +=
! 		    (INNER_CLASS_TYPE_P (DECL_CONTEXT (current_v)) ? 2 : 1));
  		  max = (v > max ? v : max);
  		}
  	    }
--- 11459,11467 ----
  	  if (argument_types_convertible (method_v, current_v))
  	    {
  	      if (valid_method_invocation_conversion_p
! 		  (DECL_CONTEXT (method_v), DECL_CONTEXT (current_v)))
  		{
! 		  int v = (DECL_SPECIFIC_COUNT (current_v) += 1);
  		  max = (v > max ? v : max);
  		}
  	    }
*************** java_complete_tree (tree node)
*** 11559,11566 ****
  {
    node = java_complete_lhs (node);
    if (JDECL_P (node) && CLASS_FINAL_VARIABLE_P (node)
!       && DECL_INITIAL (node) != NULL_TREE
!       && !flag_emit_xref)
      {
        tree value = fold_constant_for_init (node, node);
        if (value != NULL_TREE)
--- 11646,11652 ----
  {
    node = java_complete_lhs (node);
    if (JDECL_P (node) && CLASS_FINAL_VARIABLE_P (node)
!       && DECL_INITIAL (node) != NULL_TREE)
      {
        tree value = fold_constant_for_init (node, node);
        if (value != NULL_TREE)
*************** java_complete_lhs (tree node)
*** 11748,11755 ****
  
        /* First, the case expression must be constant. Values of final
           fields are accepted. */
        cn = fold (cn);
!       if ((TREE_CODE (cn) == COMPOUND_EXPR || TREE_CODE (cn) == COMPONENT_REF)
  	  && JDECL_P (TREE_OPERAND (cn, 1))
  	  && FIELD_FINAL (TREE_OPERAND (cn, 1))
  	  && DECL_INITIAL (TREE_OPERAND (cn, 1)))
--- 11834,11846 ----
  
        /* First, the case expression must be constant. Values of final
           fields are accepted. */
+       nn = fold_constant_for_init (cn, NULL_TREE);
+       if (nn != NULL_TREE)
+ 	cn = nn;
+ 
        cn = fold (cn);
!       if ((TREE_CODE (cn) == COMPOUND_EXPR
! 	   || TREE_CODE (cn) == COMPONENT_REF)
  	  && JDECL_P (TREE_OPERAND (cn, 1))
  	  && FIELD_FINAL (TREE_OPERAND (cn, 1))
  	  && DECL_INITIAL (TREE_OPERAND (cn, 1)))
*************** java_complete_lhs (tree node)
*** 11762,11768 ****
  	       && DECL_INITIAL (cn))
  	cn = fold_constant_for_init (DECL_INITIAL (cn), cn);
  
!       if (!TREE_CONSTANT (cn) && !flag_emit_xref)
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (node, "Constant expression required");
--- 11853,11859 ----
  	       && DECL_INITIAL (cn))
  	cn = fold_constant_for_init (DECL_INITIAL (cn), cn);
  
!       if (!TREE_CONSTANT (cn))
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (node, "Constant expression required");
*************** java_complete_lhs (tree node)
*** 11947,11963 ****
        if (!EXPR_WFL_NODE (node) /* Or a PRIMARY flag ? */
  	  || TREE_CODE (EXPR_WFL_NODE (node)) == IDENTIFIER_NODE)
  	{
- 	  tree wfl = node;
  	  node = resolve_expression_name (node, NULL);
  	  if (node == error_mark_node)
  	    return node;
- 	  /* Keep line number information somewhere were it doesn't
- 	     disrupt the completion process. */
- 	  if (flag_emit_xref && TREE_CODE (node) != CALL_EXPR)
- 	    {
- 	      EXPR_WFL_NODE (wfl) = TREE_OPERAND (node, 1);
- 	      TREE_OPERAND (node, 1) = wfl;
- 	    }
  	  CAN_COMPLETE_NORMALLY (node) = 1;
  	}
        else
--- 12038,12046 ----
*************** java_complete_lhs (tree node)
*** 12191,12200 ****
        if ((nn = patch_string (TREE_OPERAND (node, 1))))
  	TREE_OPERAND (node, 1) = nn;
  
!       if ((nn = outer_field_access_fix (wfl_op1, TREE_OPERAND (node, 0),
! 					TREE_OPERAND (node, 1))))
  	{
! 	  /* We return error_mark_node if outer_field_access_fix
  	     detects we write into a final. */
  	  if (nn == error_mark_node)
  	    return error_mark_node;
--- 12274,12283 ----
        if ((nn = patch_string (TREE_OPERAND (node, 1))))
  	TREE_OPERAND (node, 1) = nn;
  
!       if ((nn = nested_field_access_fix (wfl_op1, TREE_OPERAND (node, 0),
! 					 TREE_OPERAND (node, 1))))
  	{
! 	  /* We return error_mark_node if nested_field_access_fix
  	     detects we write into a final. */
  	  if (nn == error_mark_node)
  	    return error_mark_node;
*************** java_complete_lhs (tree node)
*** 12268,12284 ****
  
            TREE_OPERAND (node, 1) = nn;
          }
!       return patch_binop (node, wfl_op1, wfl_op2);
  
      case INSTANCEOF_EXPR:
        wfl_op1 = TREE_OPERAND (node, 0);
        COMPLETE_CHECK_OP_0 (node);
!       if (flag_emit_xref)
! 	{
! 	  TREE_TYPE (node) = boolean_type_node;
! 	  return node;
! 	}
!       return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1));
  
      case UNARY_PLUS_EXPR:
      case NEGATE_EXPR:
--- 12351,12362 ----
  
            TREE_OPERAND (node, 1) = nn;
          }
!       return patch_binop (node, wfl_op1, wfl_op2, 0);
  
      case INSTANCEOF_EXPR:
        wfl_op1 = TREE_OPERAND (node, 0);
        COMPLETE_CHECK_OP_0 (node);
!       return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1), 0);
  
      case UNARY_PLUS_EXPR:
      case NEGATE_EXPR:
*************** java_complete_lhs (tree node)
*** 12307,12320 ****
        TREE_OPERAND (node, 0) = java_complete_tree (wfl_op1);
        if (TREE_OPERAND (node, 0) == error_mark_node)
  	return error_mark_node;
!       if (!flag_emit_class_files && !flag_emit_xref)
  	TREE_OPERAND (node, 0) = save_expr (TREE_OPERAND (node, 0));
        /* The same applies to wfl_op2 */
        wfl_op2 = TREE_OPERAND (node, 1);
        TREE_OPERAND (node, 1) = java_complete_tree (wfl_op2);
        if (TREE_OPERAND (node, 1) == error_mark_node)
  	return error_mark_node;
!       if (!flag_emit_class_files && !flag_emit_xref)
  	TREE_OPERAND (node, 1) = save_expr (TREE_OPERAND (node, 1));
        return patch_array_ref (node);
  
--- 12385,12398 ----
        TREE_OPERAND (node, 0) = java_complete_tree (wfl_op1);
        if (TREE_OPERAND (node, 0) == error_mark_node)
  	return error_mark_node;
!       if (!flag_emit_class_files)
  	TREE_OPERAND (node, 0) = save_expr (TREE_OPERAND (node, 0));
        /* The same applies to wfl_op2 */
        wfl_op2 = TREE_OPERAND (node, 1);
        TREE_OPERAND (node, 1) = java_complete_tree (wfl_op2);
        if (TREE_OPERAND (node, 1) == error_mark_node)
  	return error_mark_node;
!       if (!flag_emit_class_files)
  	TREE_OPERAND (node, 1) = save_expr (TREE_OPERAND (node, 1));
        return patch_array_ref (node);
  
*************** java_complete_lhs (tree node)
*** 12323,12348 ****
  
      case COMPONENT_REF:
        /* The first step in the re-write of qualified name handling.  FIXME.
! 	 So far, this is only to support PRIMTYPE.class -> PRIMCLASS.TYPE. */
!       TREE_OPERAND (node, 0) = java_complete_tree (TREE_OPERAND (node, 0));
!       if (TREE_CODE (TREE_OPERAND (node, 0)) == RECORD_TYPE)
! 	{
! 	  tree name = TREE_OPERAND (node, 1);
! 	  tree field = lookup_field_wrapper (TREE_OPERAND (node, 0), name);
! 	  if (field == NULL_TREE)
! 	    {
! 	      error ("missing static field %qs", IDENTIFIER_POINTER (name));
! 	      return error_mark_node;
! 	    }
! 	  if (! FIELD_STATIC (field))
! 	    {
! 	      error ("not a static field %qs", IDENTIFIER_POINTER (name));
! 	      return error_mark_node;
! 	    }
! 	  return field;
! 	}
!       else
! 	abort ();
        break;
  
      case THIS_EXPR:
--- 12401,12430 ----
  
      case COMPONENT_REF:
        /* The first step in the re-write of qualified name handling.  FIXME.
! 	 So far, this is only to support PRIMTYPE.class ->
! 	 PRIMCLASS.TYPE. */
!       {
! 	tree prim_class = TREE_OPERAND (node, 0);
! 	tree name = TREE_OPERAND (node, 1);
! 	tree field;
! 	
! 	gcc_assert (TREE_CODE (prim_class) == NOP_EXPR);
! 	prim_class = java_complete_tree (TREE_TYPE (prim_class));
! 	gcc_assert (TREE_CODE (prim_class) == RECORD_TYPE);
! 	field = lookup_field_wrapper (prim_class, name);
! 	
! 	if (field == NULL_TREE)
! 	  {
! 	    error ("missing static field %qs", IDENTIFIER_POINTER (name));
! 	    return error_mark_node;
! 	  }
! 	if (! FIELD_STATIC (field))
! 	  {
! 	    error ("not a static field %qs", IDENTIFIER_POINTER (name));
! 	    return error_mark_node;
! 	  }
! 	return field;
!       }
        break;
  
      case THIS_EXPR:
*************** patch_assignment (tree node, tree wfl_op
*** 12879,12885 ****
  
    /* 10.10: Array Store Exception runtime check */
    if (!flag_emit_class_files
-       && !flag_emit_xref
        && lvalue_from_array
        && JREFERENCE_TYPE_P (TYPE_ARRAY_ELEMENT (lhs_type)))
      {
--- 12961,12966 ----
*************** java_refold (tree t)
*** 13413,13419 ****
     of remaining nodes and detects more errors in certain cases.  */
  
  static tree
! patch_binop (tree node, tree wfl_op1, tree wfl_op2)
  {
    tree op1 = TREE_OPERAND (node, 0);
    tree op2 = TREE_OPERAND (node, 1);
--- 13494,13500 ----
     of remaining nodes and detects more errors in certain cases.  */
  
  static tree
! patch_binop (tree node, tree wfl_op1, tree wfl_op2, int folding)
  {
    tree op1 = TREE_OPERAND (node, 0);
    tree op2 = TREE_OPERAND (node, 1);
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13588,13610 ****
  
        /* Shift int only up to 0x1f and long up to 0x3f */
        if (prom_type == int_type_node)
! 	op2 = fold (build2 (BIT_AND_EXPR, int_type_node, op2,
! 			    build_int_cst (NULL_TREE, 0x1f)));
        else
! 	op2 = fold (build2 (BIT_AND_EXPR, int_type_node, op2,
! 			    build_int_cst (NULL_TREE, 0x3f)));
  
        /* The >>> operator is a >> operating on unsigned quantities */
!       if (code == URSHIFT_EXPR && ! flag_emit_class_files)
  	{
  	  tree to_return;
            tree utype = java_unsigned_type (prom_type);
            op1 = convert (utype, op1);
! 	  TREE_SET_CODE (node, RSHIFT_EXPR);
!           TREE_OPERAND (node, 0) = op1;
!           TREE_OPERAND (node, 1) = op2;
!           TREE_TYPE (node) = utype;
! 	  to_return = convert (prom_type, node);
  	  /* Copy the original value of the COMPOUND_ASSIGN_P flag */
  	  COMPOUND_ASSIGN_P (to_return) = COMPOUND_ASSIGN_P (node);
  	  TREE_SIDE_EFFECTS (to_return)
--- 13669,13689 ----
  
        /* Shift int only up to 0x1f and long up to 0x3f */
        if (prom_type == int_type_node)
! 	op2 = fold_build2 (BIT_AND_EXPR, int_type_node, op2,
! 			   build_int_cst (NULL_TREE, 0x1f));
        else
! 	op2 = fold_build2 (BIT_AND_EXPR, int_type_node, op2,
! 			   build_int_cst (NULL_TREE, 0x3f));
  
        /* The >>> operator is a >> operating on unsigned quantities */
!       if (code == URSHIFT_EXPR && (folding || ! flag_emit_class_files))
  	{
  	  tree to_return;
            tree utype = java_unsigned_type (prom_type);
            op1 = convert (utype, op1);
! 
! 	  to_return = fold_build2 (RSHIFT_EXPR, utype, op1, op2);
! 	  to_return = convert (prom_type, to_return);
  	  /* Copy the original value of the COMPOUND_ASSIGN_P flag */
  	  COMPOUND_ASSIGN_P (to_return) = COMPOUND_ASSIGN_P (node);
  	  TREE_SIDE_EFFECTS (to_return)
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13819,13827 ****
    TREE_TYPE (node) = prom_type;
    TREE_SIDE_EFFECTS (node) = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2);
  
-   if (flag_emit_xref)
-     return node;
- 
    /* fold does not respect side-effect order as required for Java but not C.
     * Also, it sometimes create SAVE_EXPRs which are bad when emitting
     * bytecode.
--- 13898,13903 ----
*************** build_string_concatenation (tree op1, tr
*** 13966,13974 ****
    tree result;
    int side_effects = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2);
  
-   if (flag_emit_xref)
-     return build2 (PLUS_EXPR, string_type_node, op1, op2);
- 
    /* Try to do some static optimization */
    if ((result = string_constant_concatenation (op1, op2)))
      return result;
--- 14042,14047 ----
*************** patch_unaryop (tree node, tree wfl_op)
*** 14226,14232 ****
    tree op = TREE_OPERAND (node, 0);
    tree op_type = TREE_TYPE (op);
    tree prom_type = NULL_TREE, value, decl;
!   int outer_field_flag = 0;
    int code = TREE_CODE (node);
    int error_found = 0;
  
--- 14299,14305 ----
    tree op = TREE_OPERAND (node, 0);
    tree op_type = TREE_TYPE (op);
    tree prom_type = NULL_TREE, value, decl;
!   int nested_field_flag = 0;
    int code = TREE_CODE (node);
    int error_found = 0;
  
*************** patch_unaryop (tree node, tree wfl_op)
*** 14243,14252 ****
        /* 15.14.2 Prefix Decrement Operator -- */
      case PREDECREMENT_EXPR:
        op = decl = extract_field_decl (op);
!       outer_field_flag = outer_field_expanded_access_p (op, NULL, NULL, NULL);
        /* We might be trying to change an outer field accessed using
           access method. */
!       if (outer_field_flag)
  	{
  	  /* Retrieve the decl of the field we're trying to access. We
               do that by first retrieving the function we would call to
--- 14316,14326 ----
        /* 15.14.2 Prefix Decrement Operator -- */
      case PREDECREMENT_EXPR:
        op = decl = extract_field_decl (op);
!       nested_field_flag
!         = nested_field_expanded_access_p (op, NULL, NULL, NULL);
        /* We might be trying to change an outer field accessed using
           access method. */
!       if (nested_field_flag)
  	{
  	  /* Retrieve the decl of the field we're trying to access. We
               do that by first retrieving the function we would call to
*************** patch_unaryop (tree node, tree wfl_op)
*** 14300,14314 ****
  	    }
  
  	  /* We remember we might be accessing an outer field */
! 	  if (outer_field_flag)
  	    {
  	      /* We re-generate an access to the field */
  	      value = build2 (PLUS_EXPR, TREE_TYPE (op),
! 			      build_outer_field_access (wfl_op, decl), value);
  
  	      /* And we patch the original access$() into a write
                   with plus_op as a rhs */
! 	      return outer_field_access_fix (node, op, value);
  	    }
  
  	  /* And write back into the node. */
--- 14374,14388 ----
  	    }
  
  	  /* We remember we might be accessing an outer field */
! 	  if (nested_field_flag)
  	    {
  	      /* We re-generate an access to the field */
  	      value = build2 (PLUS_EXPR, TREE_TYPE (op),
! 			      build_nested_field_access (wfl_op, decl), value);
  
  	      /* And we patch the original access$() into a write
                   with plus_op as a rhs */
! 	      return nested_field_access_fix (node, op, value);
  	    }
  
  	  /* And write back into the node. */
*************** patch_unaryop (tree node, tree wfl_op)
*** 14389,14394 ****
--- 14463,14474 ----
  	  return value;
  	}
        break;
+ 
+     case NOP_EXPR:
+       /* This can only happen when the type is already known.  */
+       gcc_assert (TREE_TYPE (node) != NULL_TREE);
+       prom_type = TREE_TYPE (node);
+       break;
      }
  
    if (error_found)
*************** patch_array_ref (tree node)
*** 14582,14588 ****
  
    array_type = TYPE_ARRAY_ELEMENT (array_type);
  
!   if (flag_emit_class_files || flag_emit_xref)
      {
        TREE_OPERAND (node, 0) = array;
        TREE_OPERAND (node, 1) = index;
--- 14662,14668 ----
  
    array_type = TYPE_ARRAY_ELEMENT (array_type);
  
!   if (flag_emit_class_files)
      {
        TREE_OPERAND (node, 0) = array;
        TREE_OPERAND (node, 1) = index;
*************** maybe_build_array_element_wfl (tree node
*** 14736,14742 ****
  static tree
  build_new_array_init (int location, tree values)
  {
!   tree constructor = build_constructor (NULL_TREE, values);
    tree to_return = build1 (NEW_ARRAY_INIT, NULL_TREE, constructor);
    EXPR_WFL_LINECOL (to_return) = location;
    return to_return;
--- 14816,14823 ----
  static tree
  build_new_array_init (int location, tree values)
  {
!   tree constructor = build_constructor_from_list (NULL_TREE,
! 						  nreverse (values));
    tree to_return = build1 (NEW_ARRAY_INIT, NULL_TREE, constructor);
    EXPR_WFL_LINECOL (to_return) = location;
    return to_return;
*************** static tree
*** 14750,14757 ****
  patch_new_array_init (tree type, tree node)
  {
    int error_seen = 0;
!   tree current, element_type;
!   HOST_WIDE_INT length;
    int all_constant = 1;
    tree init = TREE_OPERAND (node, 0);
  
--- 14831,14839 ----
  patch_new_array_init (tree type, tree node)
  {
    int error_seen = 0;
!   tree element_type;
!   unsigned HOST_WIDE_INT length;
!   constructor_elt *current;
    int all_constant = 1;
    tree init = TREE_OPERAND (node, 0);
  
*************** patch_new_array_init (tree type, tree no
*** 14765,14780 ****
    type = TREE_TYPE (type);
    element_type = TYPE_ARRAY_ELEMENT (type);
  
!   CONSTRUCTOR_ELTS (init) = nreverse (CONSTRUCTOR_ELTS (init));
! 
!   for (length = 0, current = CONSTRUCTOR_ELTS (init);
!        current;  length++, current = TREE_CHAIN (current))
      {
!       tree elt = TREE_VALUE (current);
        if (elt == NULL_TREE || TREE_CODE (elt) != NEW_ARRAY_INIT)
  	{
  	  error_seen |= array_constructor_check_entry (element_type, current);
! 	  elt = TREE_VALUE (current);
  	  /* When compiling to native code, STRING_CST is converted to
  	     INDIRECT_REF, but still with a TREE_CONSTANT flag. */
  	  if (! TREE_CONSTANT (elt) || TREE_CODE (elt) == INDIRECT_REF)
--- 14847,14862 ----
    type = TREE_TYPE (type);
    element_type = TYPE_ARRAY_ELEMENT (type);
  
!   for (length = 0;
!        VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init),
! 		    length, current);
!        length++)
      {
!       tree elt = current->value;
        if (elt == NULL_TREE || TREE_CODE (elt) != NEW_ARRAY_INIT)
  	{
  	  error_seen |= array_constructor_check_entry (element_type, current);
! 	  elt = current->value;
  	  /* When compiling to native code, STRING_CST is converted to
  	     INDIRECT_REF, but still with a TREE_CONSTANT flag. */
  	  if (! TREE_CONSTANT (elt) || TREE_CODE (elt) == INDIRECT_REF)
*************** patch_new_array_init (tree type, tree no
*** 14782,14789 ****
  	}
        else
  	{
! 	  TREE_VALUE (current) = patch_new_array_init (element_type, elt);
! 	  TREE_PURPOSE (current) = NULL_TREE;
  	  all_constant = 0;
  	}
        if (elt && TREE_CODE (elt) == TREE_LIST
--- 14864,14871 ----
  	}
        else
  	{
! 	  current->value = patch_new_array_init (element_type, elt);
! 	  current->index = NULL_TREE;
  	  all_constant = 0;
  	}
        if (elt && TREE_CODE (elt) == TREE_LIST
*************** patch_new_array_init (tree type, tree no
*** 14812,14827 ****
     otherwise.  */
  
  static int
! array_constructor_check_entry (tree type, tree entry)
  {
    char *array_type_string = NULL;	/* For error reports */
    tree value, type_value, new_value, wfl_value, patched;
    int error_seen = 0;
  
    new_value = NULL_TREE;
!   wfl_value = TREE_VALUE (entry);
  
!   value = java_complete_tree (TREE_VALUE (entry));
    /* patch_string return error_mark_node if arg is error_mark_node */
    if ((patched = patch_string (value)))
      value = patched;
--- 14894,14909 ----
     otherwise.  */
  
  static int
! array_constructor_check_entry (tree type, constructor_elt *entry)
  {
    char *array_type_string = NULL;	/* For error reports */
    tree value, type_value, new_value, wfl_value, patched;
    int error_seen = 0;
  
    new_value = NULL_TREE;
!   wfl_value = entry->value;
  
!   value = java_complete_tree (entry->value);
    /* patch_string return error_mark_node if arg is error_mark_node */
    if ((patched = patch_string (value)))
      value = patched;
*************** array_constructor_check_entry (tree type
*** 14832,14838 ****
  
    /* At anytime, try_builtin_assignconv can report a warning on
       constant overflow during narrowing. */
!   SET_WFL_OPERATOR (wfl_operator, TREE_PURPOSE (entry), wfl_value);
    new_value = try_builtin_assignconv (wfl_operator, type, value);
    if (!new_value && (new_value = try_reference_assignconv (type, value)))
      type_value = promote_type (type);
--- 14914,14920 ----
  
    /* At anytime, try_builtin_assignconv can report a warning on
       constant overflow during narrowing. */
!   SET_WFL_OPERATOR (wfl_operator, entry->index, wfl_value);
    new_value = try_builtin_assignconv (wfl_operator, type, value);
    if (!new_value && (new_value = try_reference_assignconv (type, value)))
      type_value = promote_type (type);
*************** array_constructor_check_entry (tree type
*** 14851,14862 ****
      }
  
    if (new_value)
!     TREE_VALUE (entry) = new_value;
  
    if (array_type_string)
      free (array_type_string);
  
!   TREE_PURPOSE (entry) = NULL_TREE;
    return error_seen;
  }
  
--- 14933,14944 ----
      }
  
    if (new_value)
!     entry->value = new_value;
  
    if (array_type_string)
      free (array_type_string);
  
!   entry->index = NULL_TREE;
    return error_seen;
  }
  
*************** patch_exit_expr (tree node)
*** 15366,15372 ****
    /* Now we know things are allright, invert the condition, fold and
       return */
    TREE_OPERAND (node, 0) =
!     fold (build1 (TRUTH_NOT_EXPR, boolean_type_node, expression));
  
    if (! integer_zerop (TREE_OPERAND (node, 0))
        && ctxp->current_loop != NULL_TREE
--- 15448,15454 ----
    /* Now we know things are allright, invert the condition, fold and
       return */
    TREE_OPERAND (node, 0) =
!     fold_build1 (TRUTH_NOT_EXPR, boolean_type_node, expression);
  
    if (! integer_zerop (TREE_OPERAND (node, 0))
        && ctxp->current_loop != NULL_TREE
*************** patch_synchronized_statement (tree node,
*** 15745,15758 ****
        return error_mark_node;
      }
  
-   if (flag_emit_xref)
-     {
-       TREE_OPERAND (node, 0) = expr;
-       TREE_OPERAND (node, 1) = java_complete_tree (block);
-       CAN_COMPLETE_NORMALLY (node) = 1;
-       return node;
-     }
- 
    /* Generate a try-finally for the synchronized statement, except
       that the handler that catches all throw exception calls
       _Jv_MonitorExit and then rethrow the exception.
--- 15827,15832 ----
*************** patch_throw_statement (tree node, tree w
*** 15877,15891 ****
        return error_mark_node;
      }
  
!   if (! flag_emit_class_files && ! flag_emit_xref)
      BUILD_THROW (node, expr);
  
-   /* If doing xrefs, keep the location where the `throw' was seen. */
-   if (flag_emit_xref)
-     EXPR_WFL_LINECOL (node) = EXPR_WFL_LINECOL (wfl_op1);
    return node;
  }
  
  /* Check that exception said to be thrown by method DECL can be
     effectively caught from where DECL is invoked.  THIS_EXPR is the
     expression that computes `this' for the method call.  */
--- 15951,15990 ----
        return error_mark_node;
      }
  
!   if (! flag_emit_class_files)
      BUILD_THROW (node, expr);
  
    return node;
  }
  
+ /* Add EXCEPTION to the throws clause of MDECL.  If MDECL already throws
+    a super-class of EXCEPTION, keep the superclass instead.  If MDECL already
+    throws a sub-class of EXCEPTION, replace the sub-class with EXCEPTION.  */
+ static void
+ add_exception_to_throws (tree mdecl, tree exception)
+ {
+   tree mthrows;
+   
+   /* Ignore unchecked exceptions. */
+   if (IS_UNCHECKED_EXCEPTION_P (exception))
+     return;
+ 
+   for (mthrows = DECL_FUNCTION_THROWS (mdecl);
+        mthrows; mthrows = TREE_CHAIN (mthrows))
+     {
+       if (inherits_from_p (exception, TREE_VALUE (mthrows)))
+         return;
+       if (inherits_from_p (TREE_VALUE (mthrows), exception))
+         {
+ 	  TREE_VALUE (mthrows) = exception;
+ 	  return;
+ 	}
+     }
+   
+   mthrows = DECL_FUNCTION_THROWS (mdecl);
+   DECL_FUNCTION_THROWS (mdecl) = build_tree_list (mthrows, exception);
+ }
+ 
  /* Check that exception said to be thrown by method DECL can be
     effectively caught from where DECL is invoked.  THIS_EXPR is the
     expression that computes `this' for the method call.  */
*************** check_thrown_exceptions (
*** 15903,15909 ****
    int is_array_call = 0;
  
    /* Skip check within generated methods, such as access$<n>.  */
!   if (OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (current_function_decl)))
      return;
  
    if (this_expr != NULL_TREE
--- 16002,16008 ----
    int is_array_call = 0;
  
    /* Skip check within generated methods, such as access$<n>.  */
!   if (NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (current_function_decl)))
      return;
  
    if (this_expr != NULL_TREE
*************** check_thrown_exceptions (
*** 15925,15934 ****
  #else
  	EXPR_WFL_LINECOL (wfl_operator) = location;
  #endif
! 	if (DECL_FINIT_P (current_function_decl))
! 	  parse_error_context
!             (wfl_operator, "Exception %qs can't be thrown in initializer",
! 	     lang_printable_name (TREE_VALUE (throws), 0));
  	else
  	  {
  	    parse_error_context
--- 16024,16044 ----
  #else
  	EXPR_WFL_LINECOL (wfl_operator) = location;
  #endif
! 	if (ANONYMOUS_CLASS_P (DECL_CONTEXT (current_function_decl))
! 	    && (DECL_FINIT_P (current_function_decl)
! 	        || DECL_INIT_P (current_function_decl)
! 		|| DECL_CONSTRUCTOR_P (current_function_decl)))
! 	  {
! 	    /* Add "throws" to the initializer's exception list */
! 	    tree exception = TREE_VALUE (throws);
! 	    add_exception_to_throws (current_function_decl, exception);	  
! 	  }
! 	else if (DECL_FINIT_P (current_function_decl))
! 	  {
! 	    parse_error_context
!               (wfl_operator, "Exception %qs can't be thrown in initializer",
! 	       lang_printable_name (TREE_VALUE (throws), 0));
! 	  }
  	else
  	  {
  	    parse_error_context
*************** check_thrown_exceptions_do (tree excepti
*** 15965,15990 ****
    return 0;
  }
  
- static void
- purge_unchecked_exceptions (tree mdecl)
- {
-   tree throws = DECL_FUNCTION_THROWS (mdecl);
-   tree new = NULL_TREE;
- 
-   while (throws)
-     {
-       tree next = TREE_CHAIN (throws);
-       if (!IS_UNCHECKED_EXCEPTION_P (TREE_VALUE (throws)))
- 	{
- 	  TREE_CHAIN (throws) = new;
- 	  new = throws;
- 	}
-       throws = next;
-     }
-   /* List is inverted here, but it doesn't matter */
-   DECL_FUNCTION_THROWS (mdecl) = new;
- }
- 
  /* This function goes over all of CLASS_TYPE ctors and checks whether
     each of them features at least one unchecked exception in its
     `throws' clause. If it's the case, it returns `true', `false'
--- 16075,16080 ----
*************** static tree
*** 16137,16143 ****
  maybe_build_class_init_for_field (tree decl, tree expr)
  {
    tree clas = DECL_CONTEXT (decl);
!   if (flag_emit_class_files || flag_emit_xref)
      return expr;
  
    if (TREE_CODE (decl) == VAR_DECL && FIELD_STATIC (decl)
--- 16227,16233 ----
  maybe_build_class_init_for_field (tree decl, tree expr)
  {
    tree clas = DECL_CONTEXT (decl);
!   if (flag_emit_class_files)
      return expr;
  
    if (TREE_CODE (decl) == VAR_DECL && FIELD_STATIC (decl)
*************** fold_constant_for_init (tree node, tree 
*** 16201,16213 ****
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
  	return NULL_TREE;
        TREE_OPERAND (node, 1) = val;
!       return patch_binop (node, op0, op1);
  
      case UNARY_PLUS_EXPR:
      case NEGATE_EXPR:
      case TRUTH_NOT_EXPR:
      case BIT_NOT_EXPR:
      case CONVERT_EXPR:
        op0 = TREE_OPERAND (node, 0);
        val = fold_constant_for_init (op0, context);
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
--- 16291,16304 ----
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
  	return NULL_TREE;
        TREE_OPERAND (node, 1) = val;
!       return patch_binop (node, op0, op1, 1);
  
      case UNARY_PLUS_EXPR:
      case NEGATE_EXPR:
      case TRUTH_NOT_EXPR:
      case BIT_NOT_EXPR:
      case CONVERT_EXPR:
+     case NOP_EXPR:
        op0 = TREE_OPERAND (node, 0);
        val = fold_constant_for_init (op0, context);
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
*************** fold_constant_for_init (tree node, tree 
*** 16233,16240 ****
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
  	return NULL_TREE;
        TREE_OPERAND (node, 2) = val;
!       return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 1)
! 	: TREE_OPERAND (node, 2);
  
      case VAR_DECL:
      case FIELD_DECL:
--- 16324,16331 ----
        if (val == NULL_TREE || ! TREE_CONSTANT (val))
  	return NULL_TREE;
        TREE_OPERAND (node, 2) = val;
!       return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 2)
! 	: TREE_OPERAND (node, 1);
  
      case VAR_DECL:
      case FIELD_DECL:
diff -Nrcpad gcc-4.0.2/gcc/java/resource.c gcc-4.1.0/gcc/java/resource.c
*** gcc-4.0.2/gcc/java/resource.c	Fri Oct 15 14:55:00 2004
--- gcc-4.1.0/gcc/java/resource.c	Sat Jun 25 00:33:05 2005
***************
*** 1,5 ****
  /* Functions related to building resource files.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Functions related to building resource files.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** The Free Software Foundation is independ
*** 42,47 ****
--- 42,48 ----
  #include "target.h"
  #include "expr.h"
  #include "tree-iterator.h"
+ #include "cgraph.h"
  
  /* DOS brain-damage */
  #ifndef O_BINARY
*************** compile_resource_data (const char *name,
*** 92,99 ****
    layout_decl (decl, 0);
    pushdecl (decl);
    rest_of_decl_compilation (decl, global_bindings_p (), 0);
!   make_decl_rtl (decl);
!   assemble_variable (decl, 1, 0, 0);
  
    resources = tree_cons (NULL_TREE, decl, resources);
  }
--- 93,99 ----
    layout_decl (decl, 0);
    pushdecl (decl);
    rest_of_decl_compilation (decl, global_bindings_p (), 0);
!   cgraph_varpool_finalize_decl (decl);
  
    resources = tree_cons (NULL_TREE, decl, resources);
  }
diff -Nrcpad gcc-4.0.2/gcc/java/typeck.c gcc-4.1.0/gcc/java/typeck.c
*** gcc-4.0.2/gcc/java/typeck.c	Mon Dec 20 13:35:25 2004
--- gcc-4.1.0/gcc/java/typeck.c	Sun Sep 18 19:10:15 2005
***************
*** 1,5 ****
  /* Handle types for the GNU compiler for the Java(TM) language.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Handle types for the GNU compiler for the Java(TM) language.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** convert_ieee_real_to_integer (tree type,
*** 83,106 ****
    tree result;
    expr = save_expr (expr);
  
!   result = fold (build3 (COND_EXPR, type,
! 			 fold (build2 (NE_EXPR, boolean_type_node, expr, expr)),
  			 convert (type, integer_zero_node),
! 			 convert_to_integer (type, expr)));
    
!   result = fold (build3 (COND_EXPR, type, 
! 			 fold (build2 (LE_EXPR, boolean_type_node, expr, 
! 				       convert (TREE_TYPE (expr), 
! 						TYPE_MIN_VALUE (type)))),
! 			 TYPE_MIN_VALUE (type),
! 			 result));
    
!   result = fold (build3 (COND_EXPR, type,
! 			 fold (build2 (GE_EXPR, boolean_type_node, expr, 
! 				       convert (TREE_TYPE (expr), 
! 						TYPE_MAX_VALUE (type)))),
! 			 TYPE_MAX_VALUE (type),
! 			 result));
  
    return result;
  }  
--- 83,106 ----
    tree result;
    expr = save_expr (expr);
  
!   result = fold_build3 (COND_EXPR, type,
! 			fold_build2 (NE_EXPR, boolean_type_node, expr, expr),
  			 convert (type, integer_zero_node),
! 			 convert_to_integer (type, expr));
    
!   result = fold_build3 (COND_EXPR, type, 
! 			fold_build2 (LE_EXPR, boolean_type_node, expr, 
! 				     convert (TREE_TYPE (expr), 
! 					      TYPE_MIN_VALUE (type))),
! 			TYPE_MIN_VALUE (type),
! 			result);
    
!   result = fold_build3 (COND_EXPR, type,
! 			fold_build2 (GE_EXPR, boolean_type_node, expr, 
! 				     convert (TREE_TYPE (expr), 
! 					      TYPE_MAX_VALUE (type))),
! 			TYPE_MAX_VALUE (type),
! 			result);
  
    return result;
  }  
*************** convert (tree type, tree expr)
*** 119,127 ****
    if (!expr)
     return error_mark_node;
  
-   if (do_not_fold)
-     return build1 (NOP_EXPR, type, expr);
- 
    if (type == TREE_TYPE (expr)
        || TREE_CODE (expr) == ERROR_MARK)
      return expr;
--- 119,124 ----
*************** convert (tree type, tree expr)
*** 138,151 ****
  	       && ! flag_emit_class_files))
  	  && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
  	  && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
! 	return fold (convert_ieee_real_to_integer (type, expr));
        else
  	{
  	  /* fold very helpfully sets the overflow status if a type
  	     overflows in a narrowing integer conversion, but Java
  	     doesn't care.  */
  	  tree tmp = fold (convert_to_integer (type, expr));
! 	  TREE_OVERFLOW (tmp) = 0;
  	  return tmp;
  	}
      }	  
--- 135,149 ----
  	       && ! flag_emit_class_files))
  	  && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
  	  && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
! 	return convert_ieee_real_to_integer (type, expr);
        else
  	{
  	  /* fold very helpfully sets the overflow status if a type
  	     overflows in a narrowing integer conversion, but Java
  	     doesn't care.  */
  	  tree tmp = fold (convert_to_integer (type, expr));
! 	  if (TREE_CODE (tmp) == INTEGER_CST)
! 	    TREE_OVERFLOW (tmp) = 0;
  	  return tmp;
  	}
      }	  
*************** java_array_type_length (tree array_type)
*** 331,337 ****
    return -1;
  }
  
! /* An array of unknown length will be ultimately given an length of
     -2, so that we can still have `length' producing a negative value
     even if found. This was part of an optimization aiming at removing
     `length' from static arrays. We could restore it, FIXME.  */
--- 329,335 ----
    return -1;
  }
  
! /* An array of unknown length will be ultimately given a length of
     -2, so that we can still have `length' producing a negative value
     even if found. This was part of an optimization aiming at removing
     `length' from static arrays. We could restore it, FIXME.  */
*************** lookup_do (tree searched_class, int flag
*** 844,849 ****
--- 842,848 ----
  	   tree signature, tree (*signature_builder) (tree))
  {
    tree method;
+   tree orig_class = searched_class;
      
    if (searched_class == NULL_TREE)
      return NULL_TREE;
*************** lookup_do (tree searched_class, int flag
*** 870,876 ****
    
    /* If that doesn't work, look in our interfaces.  */
    if (flags & SEARCH_INTERFACE)
!     method = find_method_in_interfaces (searched_class, flags, method_name, 
  					signature, signature_builder);
    
    return method;
--- 869,875 ----
    
    /* If that doesn't work, look in our interfaces.  */
    if (flags & SEARCH_INTERFACE)
!     method = find_method_in_interfaces (orig_class, flags, method_name, 
  					signature, signature_builder);
    
    return method;
diff -Nrcpad gcc-4.0.2/gcc/java/verify-glue.c gcc-4.1.0/gcc/java/verify-glue.c
*** gcc-4.0.2/gcc/java/verify-glue.c	Thu Apr 28 16:35:22 2005
--- gcc-4.1.0/gcc/java/verify-glue.c	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 15,22 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 15,22 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** The Free Software Foundation is independ
*** 30,41 ****
  #include "coretypes.h"
  #include "tm.h"
  #include "tree.h"
- #include "errors.h"
  #include "parse.h"
  
  #include "verify.h"
  #include "java-tree.h"
  #include "java-except.h"
  
  void *
  vfy_alloc (size_t bytes)
--- 30,41 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "tree.h"
  #include "parse.h"
  
  #include "verify.h"
  #include "java-tree.h"
  #include "java-except.h"
+ #include "toplev.h"
  
  void *
  vfy_alloc (size_t bytes)
diff -Nrcpad gcc-4.0.2/gcc/java/verify-impl.c gcc-4.1.0/gcc/java/verify-impl.c
*** gcc-4.0.2/gcc/java/verify-impl.c	Mon Mar  7 21:37:34 2005
--- gcc-4.1.0/gcc/java/verify-impl.c	Fri Jul 22 07:31:32 2005
*************** details.  */
*** 26,46 ****
     verification. */
  #define INVALID_STATE ((state *) -1)
  
! #ifdef VERIFY_DEBUG
! static void
! debug_print (const char *fmt, ...)
  {
    va_list ap;
    va_start (ap, fmt);
    vfprintf (stderr, fmt, ap);
    va_end (ap);
- }
- #else
- static void
- debug_print (const char *fmt ATTRIBUTE_UNUSED, ...)
- {
- }    
  #endif /* VERIFY_DEBUG */
  
  /* This started as a fairly ordinary verifier, and for the most part
     it remains so.  It works in the obvious way, by modeling the effect
--- 26,41 ----
     verification. */
  #define INVALID_STATE ((state *) -1)
  
! static void ATTRIBUTE_PRINTF_1
! debug_print (const char *fmt ATTRIBUTE_UNUSED, ...)
  {
+ #ifdef VERIFY_DEBUG
    va_list ap;
    va_start (ap, fmt);
    vfprintf (stderr, fmt, ap);
    va_end (ap);
  #endif /* VERIFY_DEBUG */
+ }
  
  /* This started as a fairly ordinary verifier, and for the most part
     it remains so.  It works in the obvious way, by modeling the effect
*************** check_pool_index (int index)
*** 1951,1957 ****
  static type
  check_class_constant (int index)
  {
!   type t;
    vfy_constants *pool;
  
    check_pool_index (index);
--- 1946,1952 ----
  static type
  check_class_constant (int index)
  {
!   type t = { 0, 0, 0 };
    vfy_constants *pool;
  
    check_pool_index (index);
*************** check_class_constant (int index)
*** 1968,1974 ****
  static type
  check_constant (int index)
  {
!   type t;
    vfy_constants *pool;
  
    check_pool_index (index);
--- 1963,1969 ----
  static type
  check_constant (int index)
  {
!   type t = { 0, 0, 0 };
    vfy_constants *pool;
  
    check_pool_index (index);
*************** check_constant (int index)
*** 1988,1994 ****
  static type
  check_wide_constant (int index)
  {
!   type t;
    vfy_constants *pool;
  
    check_pool_index (index);
--- 1983,1989 ----
  static type
  check_wide_constant (int index)
  {
!   type t = { 0, 0, 0 };
    vfy_constants *pool;
  
    check_pool_index (index);
*************** verify_instructions_0 (void)
*** 2256,2265 ****
        else
  	{
  	  /* We only have to do this checking in the situation where
! 	     control flow falls through from the previous
! 	     instruction.  Otherwise merging is done at the time we
! 	     push the branch.  */
! 	  if (vfr->states[vfr->PC] != NULL)
  	    {
  	      /* We've already visited this instruction.  So merge
  	         the states together.  It is simplest, but not most
--- 2251,2262 ----
        else
  	{
  	  /* We only have to do this checking in the situation where
! 	     control flow falls through from the previous instruction.
! 	     Otherwise merging is done at the time we push the branch.
! 	     Note that we'll catch the off-the-end problem just
! 	     below.  */
! 	  if (vfr->PC < vfr->current_method->code_length
! 	      && vfr->states[vfr->PC] != NULL)
  	    {
  	      /* We've already visited this instruction.  So merge
  	         the states together.  It is simplest, but not most
diff -Nrcpad gcc-4.0.2/gcc/java/verify.c gcc-4.1.0/gcc/java/verify.c
*** gcc-4.0.2/gcc/java/verify.c	Thu Apr 28 16:35:22 2005
--- gcc-4.1.0/gcc/java/verify.c	Thu Jan  1 00:00:00 1970
***************
*** 1,1561 ****
- /* Handle verification of bytecoded methods for the GNU compiler for 
-    the Java(TM) language.
-    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-    Free Software Foundation, Inc.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
- 
- GCC 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 General Public License for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING.  If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
- 
- Java and all Java-based marks are trademarks or registered trademarks
- of Sun Microsystems, Inc. in the United States and other countries.
- The Free Software Foundation is independent of Sun Microsystems, Inc.  */
- 
- /* This bytecode verifier is an implementation of the bytecode
- verification process described in section 4.9 of "The Java(TM) Virtual
- Machine Specification", Second Edition, by Tim Lindholm and Frank Yellin,
- published by Addison-Wesley in 1999.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "tm.h"
- #include "tree.h"
- #include "java-tree.h"
- #include "javaop.h"
- #include "java-opcodes.h"
- #include "jcf.h"
- #include "java-except.h"
- #include "toplev.h"
- 
- static void push_pending_label (tree);
- static tree merge_types (tree, tree);
- static const char *check_pending_block (tree);
- static void type_stack_dup (int, int);
- static char *pop_argument_types (tree);
- 
- extern int stack_pointer;
- 
- /* During verification, start of the current subroutine (jsr target). */
- tree current_subr;
- 
- /* A list of pending blocks, chained using  LABEL_PENDING_CHAIN.
-    A pending block is one that has LABEL_CHANGED set, which means
-    it requires (re-) verification. */
- tree pending_blocks;
- 
- /* Append TARGET_LABEL to the pending_block stack unless already in it. */
- 
- static void
- push_pending_label (tree target_label) 
- {
-   if (! LABEL_CHANGED (target_label))
-     {
-       LABEL_PENDING_CHAIN (target_label) = pending_blocks;
-       pending_blocks = target_label;
-       LABEL_CHANGED (target_label) = 1;
-     }
- }
- 
- /* Note that TARGET_LABEL is a possible successor instruction.
-    Merge the type state etc.
-    Return NULL on success, or an error message on failure. */
- 
- static const char *
- check_pending_block (tree target_label)
- {
-   int changed = merge_type_state (target_label);
- 
-   if (changed)
-     {
-       if (changed < 0)
- 	return "types could not be merged";
-       push_pending_label (target_label);
-     }
- 
-   if (current_subr == NULL_TREE)
-     {
-       if (LABEL_IN_SUBR (target_label))
- 	return "might transfer control into subroutine";
-     }
-   else
-     {
-       if (LABEL_IN_SUBR (target_label))
- 	{
- 	  if (LABEL_SUBR_START (target_label) != current_subr)
- 	    return "transfer out of subroutine";
- 	}
-       else if (! LABEL_VERIFIED (target_label))
- 	{
- 	  LABEL_IN_SUBR (target_label) = 1;
- 	  LABEL_SUBR_START (target_label) = current_subr;
- 	}
-       else
- 	return "transfer out of subroutine";
-     }
-   return NULL;
- }
- 
- /* Count the number of nested jsr calls needed to reach LABEL. */
- 
- static int
- subroutine_nesting (tree label)
- {
-   int nesting = 0;
-   while (label != NULL_TREE && LABEL_IN_SUBR (label))
-     {
-       if (! LABEL_IS_SUBR_START (label))
- 	label = LABEL_SUBR_START (label);
-       label = LABEL_SUBR_CONTEXT (label);
-       nesting++;
-     }
-   return nesting;
- }
- 
- /* Return the "merged" types of TYPE1 and TYPE2.
-    If either is primitive, the other must match (after promotion to int).
-    For reference types, return the common super-class.
-    Return TYPE_UNKNOWN if the types cannot be merged. */   
- 
- static tree
- merge_types (tree type1, tree type2)
- {
-   if (type1 == type2)
-     return type1;
-   if (type1 == TYPE_UNKNOWN || type2 == TYPE_UNKNOWN
-       || type1 == TYPE_RETURN_ADDR || type2 == TYPE_RETURN_ADDR)
-     return TYPE_UNKNOWN;
-   if (TREE_CODE (type1) == POINTER_TYPE && TREE_CODE (type2) == POINTER_TYPE)
-     {
-       int depth1, depth2;
-       tree tt1, tt2;
-       /* ptr_type_node is only used for a null reference,
- 	 which is compatible with any reference type. */
-       if (type1 == ptr_type_node || type2 == object_ptr_type_node)
- 	return type2;
-       if (type2 == ptr_type_node || type1 == object_ptr_type_node)
- 	return type1;
- 
-       tt1 = TREE_TYPE (type1);
-       tt2 = TREE_TYPE (type2);
- 
-       /* If tt{1,2} haven't been properly loaded, now is a good time
-          to do it. */
-       if (!TYPE_SIZE (tt1))
- 	{
- 	  load_class (tt1, 1);
- 	  safe_layout_class (tt1);
- 	}
- 
-       if (!TYPE_SIZE (tt2))
- 	{
- 	  load_class (tt2, 1);
- 	  safe_layout_class (tt2);
- 	}
- 
-       if (TYPE_ARRAY_P (tt1) || TYPE_ARRAY_P (tt2))
- 	{
- 	  if (TYPE_ARRAY_P (tt1) == TYPE_ARRAY_P (tt2))
- 	    {
- 	      tree el_type1 = TYPE_ARRAY_ELEMENT (tt1);
- 	      tree el_type2 = TYPE_ARRAY_ELEMENT (tt2);
- 	      tree el_type = NULL_TREE;
- 	      if (el_type1 == el_type2)
- 		el_type = el_type1;
- 	      else if (TREE_CODE (el_type1) == POINTER_TYPE
- 		       && TREE_CODE (el_type2) == POINTER_TYPE)
- 		el_type = merge_types (el_type1, el_type2);
- 	      if (el_type != NULL_TREE)
- 		{
- 		  HOST_WIDE_INT len1 = java_array_type_length (tt1);
- 		  HOST_WIDE_INT len2 = java_array_type_length (tt2);
- 		  if (len1 != len2)
- 		    len1 = -1;
- 		  else if (el_type1 == el_type2)
- 		    return type1;
- 		  return promote_type (build_java_array_type (el_type, len1));
- 		}
- 	    }
- 	  return object_ptr_type_node;
- 	}
- 
-       if (CLASS_INTERFACE (TYPE_NAME (tt1)))
- 	{
- 	  /* FIXME: should see if two interfaces have a common
- 	     superinterface.  */
- 	  if (CLASS_INTERFACE (TYPE_NAME (tt2)))
- 	    {
- 	      /* This is a kludge, but matches what Sun's verifier does.
- 		 It can be tricked, but is safe as long as type errors
- 		 (i.e. interface method calls) are caught at run-time. */
- 	      return object_ptr_type_node;
- 	    }
- 	  else
- 	    {
- 	      if (can_widen_reference_to (tt2, tt1))
- 		return type1;
- 	      else
- 		return object_ptr_type_node;
- 	    }
- 	}
-       else if (CLASS_INTERFACE (TYPE_NAME (tt2)))
- 	{
- 	  if (can_widen_reference_to (tt1, tt2))
- 	    return type2;
- 	  else
- 	    return object_ptr_type_node;
- 	}
- 
-       type1 = tt1;
-       type2 = tt2;
- 
-       depth1 = class_depth (type1);
-       depth2 = class_depth (type2);
-       for ( ; depth1 > depth2;  depth1--)
- 	type1 = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (type1), 0));
-       for ( ; depth2 > depth1;  depth2--)
- 	type2 = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (type2), 0));
-       while (type1 != type2)
- 	{
- 	  type1 = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (type1), 0));
- 	  type2 = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (type2), 0));
- 	}
-       return promote_type (type1);
-     }
-   if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2)
-       && TYPE_PRECISION (type1) <= 32 && TYPE_PRECISION (type2) <= 32)
-     return int_type_node;
-   return TYPE_UNKNOWN;
- }
- 
- /* Merge the current type state with that at LABEL.
-    Return -1 if the states are incompatible (i.e. on error),
-    0 if there was no change, and 1 if there was a change. */
- 
- int
- merge_type_state (tree label)
- {
-   int nlocals = DECL_MAX_LOCALS (current_function_decl);
-   int cur_length = stack_pointer + nlocals;
-   tree vec = LABEL_TYPE_STATE (label);
-   tree return_map;
-   if (vec == NULL_TREE)
-     {
-       vec = make_tree_vec (cur_length);
-       LABEL_TYPE_STATE (label) = vec;
- 
-       while (--cur_length >= 0)
- 	TREE_VEC_ELT (vec, cur_length) = type_map[cur_length];
-       return 1;
-     }
-   else
-     {
-       int i;
-       int changed = 0;
-       if (LABEL_IS_SUBR_START (label) && LABEL_VERIFIED (label)
- 	  && current_subr != label)
- 	return_map = LABEL_RETURN_TYPE_STATE (label);
-       else
- 	return_map = NULL_TREE;
-       if (TREE_VEC_LENGTH (vec) != cur_length)
- 	{
- 	  return -1;
- 	}
-       for (i = 0; i < cur_length; i++)
- 	{
- 	  tree old_type = TREE_VEC_ELT (vec, i);
- 	  tree new_type = merge_types (old_type, type_map[i]);
- 	  if (TREE_VEC_ELT (vec, i) != new_type)
- 	    {
- 	      /* If there has been a change, note that since we must re-verify.
- 		 However, if the label is the start of a subroutine,
- 		 we don't care about local variables that are neither
- 		 set nor used in the subroutine. */
- 	      if (return_map == NULL_TREE || i >= nlocals
- 		  || TREE_VEC_ELT (return_map, i) != TYPE_UNUSED
- 		  || (TYPE_IS_WIDE (new_type)
- 		      && TREE_VEC_ELT (return_map, i+1) != TYPE_UNUSED))
- 		changed = 1;
- 	    }
- 	  TREE_VEC_ELT (vec, i) = new_type;
- 	  if (new_type == TYPE_UNKNOWN)
- 	    {
- 	      if (i >= nlocals)
- 		return -1;
- 	    }
- 	  else if (TYPE_IS_WIDE (new_type))
- 	    i++;
- 	}
-       return changed;
-     }
- }
- 
- /* Handle dup-like operations. */
- 
- static void
- type_stack_dup (int size, int offset)
- {
-   tree type[4];
-   int index;
-   for (index = 0;  index < size + offset; index++)
-     {
-       type[index] = stack_type_map[stack_pointer - 1];
-       if (type[index] == void_type_node)
- 	{
- 	  index++;
- 	  type[index] = stack_type_map[stack_pointer - 2];
- 	  if (! TYPE_IS_WIDE (type[index]))
- 	    abort ();
- 	  if (index == size || index == size + offset)
- 	    /* Dup operation splits 64-bit number.  */
- 	    abort ();
- 	}
-       pop_type (type[index]);
-     }
-   for (index = size;  --index >= 0; )
-     {
-       if (type[index] != void_type_node)
- 	push_type (type[index]);
-     }
- 
-   for (index = size + offset;  --index >= 0; )
-     {
-       if (type[index] != void_type_node)
- 	push_type (type[index]);
-     }
- }
- 
- /* This keeps track of a start PC and corresponding initial index.  */
- struct pc_index
- {
-   int start_pc;
-   int index;
- };
- 
- /* This causes the next iteration to ignore the next instruction
-    and look for some other unhandled instruction. */
- #define INVALIDATE_PC (prevpc = -1, oldpc = PC, PC = INVALID_PC)
- #define INVALID_PC (-1)
- 
- #define VERIFICATION_ERROR(MESSAGE) \
-   do { message = MESSAGE;  goto verify_error; } while (0)
- 
- #define VERIFICATION_ERROR_WITH_INDEX(MESSAGE) \
-   do { message = MESSAGE;  goto error_with_index; } while (0)
- 
- /* Recursive helper function to pop argument types during verification.
-    ARG_TYPES is the list of formal parameter types.
-    Return NULL on success and a freshly malloc'd error message on failure. */
- 
- static char *
- pop_argument_types (tree arg_types)
- {
-   if (arg_types == end_params_node)
-     return NULL;
-   if (TREE_CODE (arg_types) == TREE_LIST)
-     {
-       char *message = pop_argument_types (TREE_CHAIN (arg_types));
-       if (message == NULL)
- 	pop_type_0 (TREE_VALUE (arg_types), &message);
-       return message;
-     }
-   abort ();
- }
- 
- #define POP_TYPE(TYPE, MESSAGE) \
-   do { pmessage = NULL;  pop_type_0 (TYPE, &pmessage); \
-        if (pmessage != NULL) goto pop_type_error; \
-   } while (0)
- 
- #define POP_TYPE_CONV(TYPE, POPPED_TYPE, MESSAGE) \
-   do { pmessage = NULL;  POPPED_TYPE = pop_type_0 (TYPE, &pmessage); \
-        if (pmessage != NULL) goto pop_type_error; \
-   } while (0)
- 
- #define PUSH_TYPE(TYPE) \
-   do { if (! push_type_0 (TYPE)) { goto stack_overflow; }} while (0)
- 
- #define PUSH_PENDING(LABEL) \
-      do { tree tmplab = LABEL; \
-           if ((message = check_pending_block (tmplab)) != NULL) \
-             { oldpc = LABEL_PC (tmplab); goto verify_error; }} while (0)
- 
- #ifdef __GNUC__
- #define CHECK_PC_IN_RANGE(PC) __extension__ \
-   ({if (PC < 0 || PC > length) goto bad_pc; (void)1;})
- #else
- #define CHECK_PC_IN_RANGE(PC) (PC < 0 || PC > length ? (abort (), 0) : 1)
- #endif
- 
- #define BCODE byte_ops
- 
- 
- /* Verify the bytecodes of the current method, with the instructions
-    starting at BYTE_OPS and LENGTH in number, from the class file pointed to
-    by JCF.
-    Return 1 on success, 0 on failure.  */
- int
- verify_jvm_instructions (JCF* jcf, const unsigned char *byte_ops, long length)
- {
-   tree label;
-   int wide = 0;
-   int op_code;
-   int PC;
-   int oldpc = 0; /* PC of start of instruction. */
-   int prevpc = 0;  /* If >= 0, PC of previous instruction. */
-   const char *message = 0;
-   char *pmessage;
-   int i;
-   int index;
-   unsigned char *p;
-   struct eh_range *prev_eh_ranges = NULL_EH_RANGE;
-   struct eh_range *eh_ranges;
-   tree return_type = TREE_TYPE (TREE_TYPE (current_function_decl));
-   struct pc_index *starts;
-   int eh_count;
- 
-   jint int_value = -1;
- 
-   pending_blocks = NULL_TREE;
- 
-   current_subr = NULL_TREE;
- 
-   /* Handle the exception table.  */
-   method_init_exceptions ();
-   JCF_SEEK (jcf, DECL_CODE_OFFSET (current_function_decl) + length);
-   eh_count = JCF_readu2 (jcf);
- 
-   starts = xmalloc (eh_count * sizeof (struct pc_index));
-   for (i = 0; i < eh_count; ++i)
-     {
-       starts[i].start_pc = GET_u2 (jcf->read_ptr + 8 * i);
-       starts[i].index = i;
-     }
- 
-   for (i = 0; i < eh_count; ++i)
-     {
-       int start_pc, end_pc, handler_pc, catch_type;
- 
-       p = jcf->read_ptr + 8 * starts[i].index;
- 
-       start_pc = GET_u2 (p);
-       end_pc = GET_u2 (p+2);
-       handler_pc = GET_u2 (p+4);
-       catch_type = GET_u2 (p+6);
- 
-       if (start_pc < 0 || start_pc >= length
- 	  || end_pc < 0 || end_pc > length || start_pc >= end_pc
- 	  || handler_pc < 0 || handler_pc >= length
- 	  || ! (instruction_bits[start_pc] & BCODE_INSTRUCTION_START)
- 	  || (end_pc < length &&
- 	     ! (instruction_bits[end_pc] & BCODE_INSTRUCTION_START))
- 	  || ! (instruction_bits[handler_pc] & BCODE_INSTRUCTION_START))
- 	{
- 	  error ("bad pc in exception_table");
- 	  free (starts);
- 	  return 0;
- 	}
- 
-       add_handler (start_pc, end_pc,
- 		   lookup_label (handler_pc),
- 		   catch_type == 0 ? NULL_TREE
- 		   : get_class_constant (jcf, catch_type));
- 
-       instruction_bits[handler_pc] |= BCODE_EXCEPTION_TARGET;
-     }
- 
-   free (starts);
- 
-   for (PC = 0;;)
-     {
-       tree type, tmp;
- 
-       if (((PC != INVALID_PC
- 	   && instruction_bits[PC] & BCODE_TARGET) != 0)
- 	  || PC == 0)
- 	{
- 	  PUSH_PENDING (lookup_label (PC));
- 	  INVALIDATE_PC;
- 	}
- 
-       /* Check if there are any more pending blocks in the current
- 	 subroutine.  Because we push pending blocks in a
- 	 last-in-first-out order, and because we don't push anything
- 	 from our caller until we are done with this subroutine or
- 	 anything nested in it, we are done if the top of the
- 	 pending_blocks stack is not in a subroutine, or it is in our
- 	 caller. */
-       if (current_subr && PC == INVALID_PC)
- 	{
- 	  if (pending_blocks == NULL_TREE
- 	      || (subroutine_nesting (pending_blocks)
- 		  < subroutine_nesting (current_subr)))
- 	    {
- 	      int size
-                 = DECL_MAX_LOCALS (current_function_decl) + stack_pointer;
- 
- 	      tree ret_map = LABEL_RETURN_TYPE_STATE (current_subr);
- 	      tmp = LABEL_RETURN_LABELS (current_subr);
- 	      
- 	      /* FIXME: If we exit a subroutine via a throw, we might
- 		 have returned to an earlier caller.  Obviously a
- 		 "ret" can only return one level, but a throw may
- 		 return many levels.  */
- 	      current_subr = LABEL_SUBR_CONTEXT (current_subr);
- 
- 	      if (RETURN_MAP_ADJUSTED (ret_map))
- 		{
- 		  /* Since we are done with this subroutine, set up
- 		     the (so far known) return address as pending -
- 		     with the merged type state.  */
- 		  for ( ; tmp != NULL_TREE;  tmp = TREE_CHAIN (tmp))
- 		    {
- 		      tree return_label = TREE_VALUE (tmp);
- 		      tree return_state = LABEL_TYPE_STATE (return_label);
- 		      if (return_state == NULL_TREE)
- 			{
- 			  /* This means we had not verified the subroutine
-                              earlier, so this is the first jsr to call it.
-                              In this case, the type_map of the return
- 			     address is just the current type_map - and that
- 			     is handled by the following PUSH_PENDING.  */
- 			}
- 		      else
- 			{
- 			  /* In this case we have to do a merge.  But first
- 			     restore the type_map for unused slots to those
- 			     that were in effect at the jsr.  */
- 			  for (index = size; --index >= 0; )
- 			    {
- 			      type_map[index]
-                                 = TREE_VEC_ELT (ret_map, index);
- 
- 			      if (type_map[index] == TYPE_UNUSED)
- 				type_map[index]
- 				  = TREE_VEC_ELT (return_state, index);
- 			    }
- 			}
- 		      PUSH_PENDING (return_label);
- 		    }
- 		}
- 	    }
- 	}
- 
-       if (PC == INVALID_PC)
- 	{
- 	  label = pending_blocks;
- 
- 	  if (label == NULL_TREE)
- 	    break;  /* We're done! */
- 
- 	  pending_blocks = LABEL_PENDING_CHAIN (label);
- 	  LABEL_CHANGED (label) = 0;
- 
- 	  if (LABEL_IN_SUBR (label))
- 	    current_subr = LABEL_SUBR_START (label);
- 	  else
- 	    current_subr = NULL_TREE;
- 
- 	  /* Restore type_map and stack_pointer from
- 	     LABEL_TYPE_STATE (label), and continue
- 	     compiling from there.  */
- 	  load_type_state (label);
- 
- 	  PC = LABEL_PC (label);
- 	}
-       else if (PC >= length)
- 	VERIFICATION_ERROR ("falling through the end of the method");
- 
- 
-       oldpc = PC;
- 
-       if (! (instruction_bits[PC] & BCODE_INSTRUCTION_START) && ! wide)
- 	VERIFICATION_ERROR ("PC not at instruction start");
- 
-       instruction_bits[PC] |= BCODE_VERIFIED;
- 
-       eh_ranges = find_handler (oldpc);
- 
-       op_code = byte_ops[PC++];
-       switch (op_code)
- 	{
- 	  int is_static, is_putting;
- 
- 	case OPCODE_nop:
- 	  break;
- 
- 	case OPCODE_iconst_m1:
- 	case OPCODE_iconst_0:	case OPCODE_iconst_1:	case OPCODE_iconst_2:
- 	case OPCODE_iconst_3:	case OPCODE_iconst_4:	case OPCODE_iconst_5:
- 	  i = op_code - OPCODE_iconst_0;
- 	  goto push_int;
- 	push_int:
- 	  if (byte_ops[PC] == OPCODE_newarray
- 	      || byte_ops[PC] == OPCODE_anewarray)
- 	    int_value = i;
- 	  PUSH_TYPE (int_type_node);  break;
- 
- 	case OPCODE_lconst_0:	case OPCODE_lconst_1:
- 	  PUSH_TYPE (long_type_node);  break;
- 
- 	case OPCODE_fconst_0:	case OPCODE_fconst_1:	case OPCODE_fconst_2:
- 	  PUSH_TYPE (float_type_node);  break;
- 
- 	case OPCODE_dconst_0:	case OPCODE_dconst_1:
- 	  PUSH_TYPE (double_type_node);  break;
- 
- 	case OPCODE_bipush:
- 	  i = IMMEDIATE_s1;
- 	  goto push_int;
- 
- 	case OPCODE_sipush:
- 	  i = IMMEDIATE_s2;
- 	  goto push_int;
- 
- 	case OPCODE_iload:  type = int_type_node;  goto general_load;
- 	case OPCODE_lload:  type = long_type_node;  goto general_load;
- 	case OPCODE_fload:  type = float_type_node;  goto general_load;
- 	case OPCODE_dload:  type = double_type_node;  goto general_load;
- 	case OPCODE_aload:  type = ptr_type_node;  goto general_load;
- 	general_load:
- 	index = wide ? IMMEDIATE_u2 : IMMEDIATE_u1;
- 	wide = 0;
- 	goto load;
- 	case OPCODE_iload_0:  type = int_type_node;  index = 0; goto load;
- 	case OPCODE_iload_1:  type = int_type_node;  index = 1; goto load;
- 	case OPCODE_iload_2:  type = int_type_node;  index = 2; goto load;
- 	case OPCODE_iload_3:  type = int_type_node;  index = 3; goto load;
- 	case OPCODE_lload_0:  type = long_type_node; index = 0; goto load;
- 	case OPCODE_lload_1:  type = long_type_node; index = 1; goto load;
- 	case OPCODE_lload_2:  type = long_type_node; index = 2; goto load;
- 	case OPCODE_lload_3:  type = long_type_node; index = 3; goto load;
- 	case OPCODE_fload_0:  type = float_type_node; index = 0; goto load;
- 	case OPCODE_fload_1:  type = float_type_node; index = 1; goto load;
- 	case OPCODE_fload_2:  type = float_type_node; index = 2; goto load;
- 	case OPCODE_fload_3:  type = float_type_node; index = 3; goto load;
- 	case OPCODE_dload_0: type = double_type_node; index = 0; goto load;
- 	case OPCODE_dload_1: type = double_type_node; index = 1; goto load;
- 	case OPCODE_dload_2: type = double_type_node; index = 2; goto load;
- 	case OPCODE_dload_3: type = double_type_node; index = 3; goto load;
- 	case OPCODE_aload_0:  type = ptr_type_node;  index = 0;  goto load;
- 	case OPCODE_aload_1:  type = ptr_type_node;  index = 1;  goto load;
- 	case OPCODE_aload_2:  type = ptr_type_node;  index = 2;  goto load;
- 	case OPCODE_aload_3:  type = ptr_type_node;  index = 3;  goto load;
- 	load:
- 	if (index < 0
- 	    || (index + TYPE_IS_WIDE (type)
- 		>= DECL_MAX_LOCALS (current_function_decl)))
- 	  VERIFICATION_ERROR_WITH_INDEX
- 	    ("invalid local variable index %d in load");
- 	tmp = type_map[index];
- 	if (tmp == TYPE_UNKNOWN)
- 	  VERIFICATION_ERROR_WITH_INDEX
- 	    ("loading local variable %d which has unknown type");
- 	else if (tmp == TYPE_SECOND
- 	    || (TYPE_IS_WIDE (type)
- 		&& type_map[index+1] != void_type_node)
- 	    || (type == ptr_type_node
- 		? TREE_CODE (tmp) != POINTER_TYPE
- 		: type == int_type_node
- 		? (! INTEGRAL_TYPE_P (tmp) || TYPE_PRECISION (tmp) > 32)
- 		: type != tmp))
- 	  VERIFICATION_ERROR_WITH_INDEX
- 	    ("loading local variable %d which has invalid type");
- 	PUSH_TYPE (tmp);
- 	goto note_used;
- 	case OPCODE_istore:  type = int_type_node;  goto general_store;
- 	case OPCODE_lstore:  type = long_type_node;  goto general_store;
- 	case OPCODE_fstore:  type = float_type_node;  goto general_store;
- 	case OPCODE_dstore:  type = double_type_node;  goto general_store;
- 	case OPCODE_astore:  type = object_ptr_type_node;  goto general_store;
- 	general_store:
- 	index = wide ? IMMEDIATE_u2 : IMMEDIATE_u1;
- 	wide = 0;
- 	goto store;
- 	case OPCODE_istore_0:  type = int_type_node; index = 0; goto store;
- 	case OPCODE_istore_1:  type = int_type_node; index = 1; goto store;
- 	case OPCODE_istore_2:  type = int_type_node; index = 2; goto store;
- 	case OPCODE_istore_3:  type = int_type_node; index = 3; goto store;
- 	case OPCODE_lstore_0:  type = long_type_node; index=0; goto store;
- 	case OPCODE_lstore_1:  type = long_type_node; index=1; goto store;
- 	case OPCODE_lstore_2:  type = long_type_node; index=2; goto store;
- 	case OPCODE_lstore_3:  type = long_type_node; index=3; goto store;
- 	case OPCODE_fstore_0:  type=float_type_node; index=0; goto store;
- 	case OPCODE_fstore_1:  type=float_type_node; index=1; goto store;
- 	case OPCODE_fstore_2:  type=float_type_node; index=2; goto store;
- 	case OPCODE_fstore_3:  type=float_type_node; index=3; goto store;
- 	case OPCODE_dstore_0:  type=double_type_node; index=0; goto store;
- 	case OPCODE_dstore_1:  type=double_type_node; index=1; goto store;
- 	case OPCODE_dstore_2:  type=double_type_node; index=2; goto store;
- 	case OPCODE_dstore_3:  type=double_type_node; index=3; goto store;
- 	case OPCODE_astore_0:  type = ptr_type_node; index = 0; goto store;
- 	case OPCODE_astore_1:  type = ptr_type_node; index = 1; goto store;
- 	case OPCODE_astore_2:  type = ptr_type_node; index = 2; goto store;
- 	case OPCODE_astore_3:  type = ptr_type_node; index = 3; goto store;
- 	store:
- 	if (index < 0
- 	    || (index + TYPE_IS_WIDE (type)
- 		>= DECL_MAX_LOCALS (current_function_decl)))
- 	  {
- 	    VERIFICATION_ERROR_WITH_INDEX
- 	      ("invalid local variable index %d in store");
- 	    return 0;
- 	  }
- 	POP_TYPE_CONV (type, type, NULL);
- 	type_map[index] = type;
- 
- 	/* If a local variable has changed, we need to reconsider exception
-         handlers.  */
- 	prev_eh_ranges = NULL_EH_RANGE;
- 
- 	/* Allocate decl for this variable now, so we get a temporary
- ! 	   that survives the whole method. */
- 	find_local_variable (index, type, oldpc);
- 
-         if (TYPE_IS_WIDE (type))
-           type_map[index+1] = TYPE_SECOND;
- 
- 	/* ... fall through to note_used ... */
- 	note_used:
- 	  /* For store or load, note that local variable INDEX is used.
- 	     This is needed to verify try-finally subroutines. */
- 	  if (current_subr)
- 	    {
- 	      tree vec = LABEL_RETURN_TYPE_STATE (current_subr);
- 	      tree subr_vec = LABEL_TYPE_STATE (current_subr);
- 	      int len = 1 + TYPE_IS_WIDE (type);
- 	      while (--len >= 0)
- 		{
- 		  if (TREE_VEC_ELT (vec, index) == TYPE_UNUSED)
- 		    TREE_VEC_ELT (vec, index) = TREE_VEC_ELT (subr_vec, index);
- 		}
- 	    }
- 	break;
- 	case OPCODE_iadd:
- 	case OPCODE_iand:
- 	case OPCODE_idiv:
- 	case OPCODE_imul:
- 	case OPCODE_ior:
- 	case OPCODE_irem:
- 	case OPCODE_ishl:
- 	case OPCODE_ishr:
- 	case OPCODE_isub:
- 	case OPCODE_iushr:
- 	case OPCODE_ixor:
- 	  type = int_type_node;  goto binop;
- 	case OPCODE_ineg:
- 	case OPCODE_i2c:
- 	case OPCODE_i2b:
- 	case OPCODE_i2s:
- 	  type = int_type_node;  goto unop;
- 	case OPCODE_ladd:
- 	case OPCODE_land:
- 	case OPCODE_ldiv:
- 	case OPCODE_lsub:
- 	case OPCODE_lmul:
- 	case OPCODE_lrem:
- 	case OPCODE_lor:
- 	case OPCODE_lxor:
- 	  type = long_type_node;  goto binop;
- 	case OPCODE_lneg:
- 	  type = long_type_node;  goto unop;
- 	case OPCODE_fadd:	case OPCODE_fsub:
- 	case OPCODE_fmul:	case OPCODE_fdiv:	case OPCODE_frem:
- 	  type = float_type_node;  goto binop;
- 	case OPCODE_fneg:
- 	  type = float_type_node;  goto unop;
- 	case OPCODE_dadd:	case OPCODE_dsub:
- 	case OPCODE_dmul:	case OPCODE_ddiv:	case OPCODE_drem:
- 	  type = double_type_node;  goto binop;
- 	case OPCODE_dneg:
- 	  type = double_type_node;  goto unop;
- 
- 	unop:
- 	  pop_type (type);
- 	  PUSH_TYPE (type);
- 	  break;
- 
- 	binop:
- 	  pop_type (type);
- 	  pop_type (type);
- 	  PUSH_TYPE (type);
- 	  break;
- 
- 	case OPCODE_lshl:
- 	case OPCODE_lshr:
- 	case OPCODE_lushr:
- 	  pop_type (int_type_node);
- 	  pop_type (long_type_node);
- 	  PUSH_TYPE (long_type_node);
- 	  break;
- 
- 	case OPCODE_iinc:
- 	  index = wide ? IMMEDIATE_u2 : IMMEDIATE_u1;
- 	  PC += wide + 1;
- 	  wide = 0;
- 	  if (index < 0 || index >= DECL_MAX_LOCALS (current_function_decl))
- 	    VERIFICATION_ERROR ("invalid local variable index in iinc");
- 	  tmp = type_map[index];
- 	  if (tmp == NULL_TREE
- 	      || ! INTEGRAL_TYPE_P (tmp) || TYPE_PRECISION (tmp) > 32)
- 	    VERIFICATION_ERROR ("invalid local variable type in iinc");
- 	  break;
- 
- 	case OPCODE_i2l:
- 	  pop_type (int_type_node);    PUSH_TYPE (long_type_node);   break;
- 	case OPCODE_i2f:
- 	  pop_type (int_type_node);    PUSH_TYPE (float_type_node);  break;
- 	case OPCODE_i2d:
- 	  pop_type (int_type_node);    PUSH_TYPE (double_type_node); break;
- 	case OPCODE_l2i:
- 	  pop_type (long_type_node);   PUSH_TYPE (int_type_node);    break;
- 	case OPCODE_l2f:
- 	  pop_type (long_type_node);   PUSH_TYPE (float_type_node);  break;
- 	case OPCODE_l2d:
- 	  pop_type (long_type_node);   PUSH_TYPE (double_type_node); break;
- 	case OPCODE_f2i:
- 	  pop_type (float_type_node);  PUSH_TYPE (int_type_node);    break;
- 	case OPCODE_f2l:
- 	  pop_type (float_type_node);  PUSH_TYPE (long_type_node);   break;
- 	case OPCODE_f2d:
- 	  pop_type (float_type_node);  PUSH_TYPE (double_type_node); break;
- 	case OPCODE_d2i:
- 	  pop_type (double_type_node); PUSH_TYPE (int_type_node);    break;
- 	case OPCODE_d2l:
- 	  pop_type (double_type_node); PUSH_TYPE (long_type_node);   break;
- 	case OPCODE_d2f:
- 	  pop_type (double_type_node); PUSH_TYPE (float_type_node);  break;
- 
- 	case OPCODE_lcmp:
- 	  type = long_type_node;  goto compare;
- 	case OPCODE_fcmpl:
- 	case OPCODE_fcmpg:
- 	  type = float_type_node;  goto compare;
- 	case OPCODE_dcmpl:
- 	case OPCODE_dcmpg:
- 	  type = double_type_node;  goto compare;
- 	compare:
- 	  pop_type (type);  pop_type (type);
- 	  PUSH_TYPE (int_type_node);  break;
- 
- 	case OPCODE_ifeq:
- 	case OPCODE_ifne:
- 	case OPCODE_iflt:
- 	case OPCODE_ifge:
- 	case OPCODE_ifgt:
- 	case OPCODE_ifle:
- 	  pop_type (int_type_node);  goto cond;
- 	case OPCODE_ifnull:
- 	case OPCODE_ifnonnull:
- 	  pop_type (ptr_type_node ); goto cond;
- 	case OPCODE_if_icmpeq:
- 	case OPCODE_if_icmpne:
- 	case OPCODE_if_icmplt:
- 	case OPCODE_if_icmpge:
- 	case OPCODE_if_icmpgt:
- 	case OPCODE_if_icmple:
- 	  pop_type (int_type_node);  pop_type (int_type_node);  goto cond;
- 	case OPCODE_if_acmpeq:
- 	case OPCODE_if_acmpne:
- 	  pop_type (object_ptr_type_node);  pop_type (object_ptr_type_node);
- 	  goto cond;
- 
- 	cond:
- 	  PUSH_PENDING (lookup_label (oldpc + IMMEDIATE_s2));
- 	  break;
-           
- 	case OPCODE_goto:
- 	  PUSH_PENDING (lookup_label (oldpc + IMMEDIATE_s2));
- 	  INVALIDATE_PC;
- 	  break;
- 
- 	case OPCODE_wide:
- 	  switch (byte_ops[PC])
- 	    {
- 	    case OPCODE_iload:  case OPCODE_lload:
- 	    case OPCODE_fload:  case OPCODE_dload:  case OPCODE_aload:
- 	    case OPCODE_istore:  case OPCODE_lstore:
- 	    case OPCODE_fstore:  case OPCODE_dstore:  case OPCODE_astore:
- 	    case OPCODE_iinc:
- 	    case OPCODE_ret:
- 	      wide = 1;
- 	      break;
- 	    default:
- 	      VERIFICATION_ERROR ("invalid use of wide instruction");
- 	    }
- 	  break;
- 
- 	case OPCODE_return:   type = void_type_node;   goto ret;
- 	case OPCODE_ireturn:
- 	  if ((TREE_CODE (return_type) == BOOLEAN_TYPE
- 	       || TREE_CODE (return_type) == CHAR_TYPE
- 	       || TREE_CODE (return_type) == INTEGER_TYPE)
- 	      && TYPE_PRECISION (return_type) <= 32)
- 	    type = return_type;
- 	  else
- 	    type = NULL_TREE;
- 	  goto ret;
- 	case OPCODE_lreturn:  type = long_type_node;   goto ret;
- 	case OPCODE_freturn:  type = float_type_node;  goto ret;
- 	case OPCODE_dreturn:  type = double_type_node; goto ret;
- 	case OPCODE_areturn:
- 	  if (TREE_CODE (return_type) == POINTER_TYPE)
- 	    type = return_type;
- 	  else
- 	    type = NULL_TREE;
- 	  goto ret;
- 
- 	ret:
- 	  if (type != return_type)
- 	    VERIFICATION_ERROR ("incorrect ?return opcode");
- 	  if (type != void_type_node)
- 	    POP_TYPE (type, "return value has wrong type");
- 	  INVALIDATE_PC;
- 	  break;
- 
- 	case OPCODE_getstatic: is_putting = 0;  is_static = 1;  goto field;
- 	case OPCODE_putstatic: is_putting = 1;  is_static = 1;  goto field;
- 	case OPCODE_getfield:  is_putting = 0;  is_static = 0;  goto field;
- 	case OPCODE_putfield:  is_putting = 1;  is_static = 0;  goto field;
- 	field:
- 	  {
- 	    tree field_signature, field_type;
- 	    index = IMMEDIATE_u2;
- 
- 	    if (index <= 0 || index >= JPOOL_SIZE (current_jcf))
- 	      VERIFICATION_ERROR_WITH_INDEX ("bad constant pool index %d");
- 
- 	    if (JPOOL_TAG (current_jcf, index) != CONSTANT_Fieldref)
- 	      VERIFICATION_ERROR
- 		("field instruction does not reference a Fieldref");
- 
- 	    field_signature
-               = COMPONENT_REF_SIGNATURE (&current_jcf->cpool, index);
- 
- 	    field_type = get_type_from_signature (field_signature);
- 
- 	    if (is_putting)
- 	      POP_TYPE (field_type, "incorrect type for field");
- 
- 	    if (! is_static)
- 	      {
- 		int clindex
-                   = COMPONENT_REF_CLASS_INDEX (&current_jcf->cpool, index);
- 
- 		tree self_type = get_class_constant (current_jcf, clindex);
- 
- 		/* Defer actual checking until next pass. */
- 		POP_TYPE (self_type, "incorrect type for field reference");
- 	      }
- 
- 	    if (! is_putting)
- 	      PUSH_TYPE (field_type);
- 	    break;
- 	  }
- 
- 	case OPCODE_new:
- 	  PUSH_TYPE (get_class_constant (jcf, IMMEDIATE_u2));
- 	  break;
- 
- 	case OPCODE_dup:     wide = 1; index = 0;  goto dup;
- 	case OPCODE_dup_x1:  wide = 1; index = 1;  goto dup;
- 	case OPCODE_dup_x2:  wide = 1; index = 2;  goto dup;
- 	case OPCODE_dup2:    wide = 2; index = 0;  goto dup;
- 	case OPCODE_dup2_x1: wide = 2; index = 1;  goto dup;
- 	case OPCODE_dup2_x2: wide = 2; index = 2;  goto dup;
- 
- 	dup:
- 	  if (wide + index > stack_pointer)
- 	    VERIFICATION_ERROR ("stack underflow - dup* operation");
- 	  type_stack_dup (wide, index);
- 	  wide = 0;
- 	  break;
- 
- 	case OPCODE_pop:  index = 1;  goto pop;
- 	case OPCODE_pop2: index = 2;  goto pop;
- 
- 	pop:
- 	  if (stack_pointer < index)
- 	    VERIFICATION_ERROR ("stack underflow");
- 	  stack_pointer -= index;
- 	  break;
- 
- 	case OPCODE_swap:
- 	  if (stack_pointer < 2)
- 	    VERIFICATION_ERROR ("stack underflow (in swap)");
- 	  else
- 	    {
- 	      tree type1 = stack_type_map[stack_pointer - 1];
- 	      tree type2 = stack_type_map[stack_pointer - 2];
- 
- 	      if (type1 == void_type_node || type2 == void_type_node)
- 		VERIFICATION_ERROR ("verifier (swap):  double or long value");
- 
- 	      stack_type_map[stack_pointer - 2] = type1;
- 	      stack_type_map[stack_pointer - 1] = type2;
- 	    }
- 	  break;
- 
- 	case OPCODE_ldc:   index = IMMEDIATE_u1;  goto ldc;
- 	case OPCODE_ldc2_w:
- 	case OPCODE_ldc_w:
- 	  index = IMMEDIATE_u2;  goto ldc;
- 
- 	ldc:
- 	  if (index <= 0 || index >= JPOOL_SIZE (current_jcf))
- 	    VERIFICATION_ERROR_WITH_INDEX ("bad constant pool index %d in ldc");
- 
- 	  int_value = -1;
- 	  switch (JPOOL_TAG (current_jcf, index) & ~CONSTANT_ResolvedFlag)
- 	    {
- 	    case CONSTANT_Integer:  type = int_type_node;  goto check_ldc;
- 	    case CONSTANT_Float:    type = float_type_node;  goto check_ldc;
- 	    case CONSTANT_String:   type = string_type_node; goto check_ldc;
- 	    case CONSTANT_Long:    type = long_type_node;    goto check_ldc;
- 	    case CONSTANT_Double:  type = double_type_node;  goto check_ldc;
- 	    check_ldc:
- 	      if (TYPE_IS_WIDE (type) == (op_code == OPCODE_ldc2_w))
- 		break;
- 	      /* ... else fall through ... */
- 	    default:
- 	      VERIFICATION_ERROR ("bad constant pool tag in ldc");
- 	    }
- 	  if (type == int_type_node)
- 	    {
- 	      i = TREE_INT_CST_LOW (get_constant (current_jcf, index));
- 	      goto push_int;
- 	    }
- 	  PUSH_TYPE (type);
- 	  break;
- 
- 	case OPCODE_invokevirtual:
- 	case OPCODE_invokespecial:
- 	case OPCODE_invokestatic:
- 	case OPCODE_invokeinterface:
- 	  {
- 	    tree sig, method_name, method_type, self_type;
- 	    int self_is_interface, tag;
- 	    index = IMMEDIATE_u2;
- 
- 	    if (index <= 0 || index >= JPOOL_SIZE (current_jcf))
- 	      VERIFICATION_ERROR_WITH_INDEX
- 		("bad constant pool index %d for invoke");
- 
- 	    tag = JPOOL_TAG (current_jcf, index);
- 
- 	    if (op_code == OPCODE_invokeinterface)
- 	      {
- 		if (tag != CONSTANT_InterfaceMethodref)
- 		  VERIFICATION_ERROR
- 		    ("invokeinterface does not reference an InterfaceMethodref");
- 	      }
- 	    else
- 	      {
- 		if (tag != CONSTANT_Methodref)
- 		  VERIFICATION_ERROR ("invoke does not reference a Methodref");
- 	      }
- 
- 	    sig = COMPONENT_REF_SIGNATURE (&current_jcf->cpool, index);
- 
- 	    self_type
-               = get_class_constant (current_jcf,
-                                     COMPONENT_REF_CLASS_INDEX
-                                       (&current_jcf->cpool, index));
- 
- 	    if (! CLASS_LOADED_P (self_type))
- 	      load_class (self_type, 1);
- 
- 	    self_is_interface = CLASS_INTERFACE (TYPE_NAME (self_type));
- 	    method_name = COMPONENT_REF_NAME (&current_jcf->cpool, index);
- 	    method_type = parse_signature_string ((const unsigned char *) IDENTIFIER_POINTER (sig),
- 						  IDENTIFIER_LENGTH (sig));
- 
- 	    if (TREE_CODE (method_type) != FUNCTION_TYPE)
- 	      VERIFICATION_ERROR ("bad method signature");
- 
- 	    pmessage = pop_argument_types (TYPE_ARG_TYPES (method_type));
- 	    if (pmessage != NULL)
- 	      {
- 		message = "invalid argument type";
- 		goto pop_type_error;
- 	      }
- 
- 	    /* Can't invoke <clinit>.  */
- 	    if (ID_CLINIT_P (method_name))
- 	      VERIFICATION_ERROR ("invoke opcode can't invoke <clinit>");
- 
- 	    /* Apart from invokespecial, can't invoke <init>.  */
- 	    if (op_code != OPCODE_invokespecial && ID_INIT_P (method_name))
- 	      VERIFICATION_ERROR ("invoke opcode can't invoke <init>");
- 
- 	    if (op_code != OPCODE_invokestatic)
- 	      POP_TYPE (self_type,
- 			"stack type not subclass of invoked method's class");
- 
- 	    switch (op_code)
- 	      {
- 	      case OPCODE_invokeinterface:
- 	        {
- 		  int nargs    = IMMEDIATE_u1;
- 		  int notZero  = IMMEDIATE_u1;
- 		
- 		  if (!nargs || notZero)
- 		      VERIFICATION_ERROR 
- 		        ("invalid argument number in invokeinterface");
- 
- 		  /* If we verify/resolve the constant pool, as we should,
- 		     this test (and the one just following) are redundant.  */
- 		  if (! self_is_interface)
- 		    VERIFICATION_ERROR
-                       ("invokeinterface calls method not in interface");
- 		  break;
- 
- 		default:
- 		  if (self_is_interface)
- 		    VERIFICATION_ERROR ("method in interface called");
- 		}
- 	      }
- 
- 	    if (TREE_TYPE (method_type) != void_type_node)
- 	      PUSH_TYPE (TREE_TYPE (method_type));
- 	    break;
- 	  }
- 
- 	case OPCODE_arraylength:
- 	    /* Type checking actually made during code generation.  */
- 	    pop_type (ptr_type_node);
- 	    PUSH_TYPE (int_type_node);
- 	    break;
- 	    
-         /* Q&D verification *or* more checking done during code generation
- 	   for byte/boolean/char/short, the value popped is a int coerced
- 	   into the right type before being stored.  */
- 	case OPCODE_iastore: type = int_type_node;     goto astore;
- 	case OPCODE_lastore: type = long_type_node;    goto astore;
- 	case OPCODE_fastore: type = float_type_node;   goto astore;
- 	case OPCODE_dastore: type = double_type_node;  goto astore;
- 	case OPCODE_aastore: type = ptr_type_node;     goto astore;
- 	case OPCODE_bastore: type = int_type_node; goto astore;
- 	case OPCODE_castore: type = int_type_node; goto astore;
- 	case OPCODE_sastore: type = int_type_node; goto astore;
- 
- 	astore:
- 	  /* FIXME - need better verification here.  */
- 	  pop_type (type);	     /* new value */
- 	  pop_type (int_type_node);  /* index */
- 	  pop_type (ptr_type_node);  /* array */
- 	  break;
- 
-         /* Q&D verification *or* more checking done during code generation
- 	   for byte/boolean/char/short, the value pushed is a int.  */
- 	case OPCODE_iaload: type = int_type_node;     goto aload;
- 	case OPCODE_laload: type = long_type_node;    goto aload;
- 	case OPCODE_faload: type = float_type_node;   goto aload;
- 	case OPCODE_daload: type = double_type_node;  goto aload;
- 	case OPCODE_aaload: type = ptr_type_node;     goto aload;
- 	case OPCODE_baload: type = promote_type (byte_type_node);  goto aload;
- 	case OPCODE_caload: type = promote_type (char_type_node);  goto aload;
- 	case OPCODE_saload: type = promote_type (short_type_node); goto aload;
- 
-         aload:
- 	  pop_type (int_type_node);
- 	  tmp = pop_type (ptr_type_node);
- 	  if (is_array_type_p (tmp))
- 	    type = TYPE_ARRAY_ELEMENT (TREE_TYPE (tmp));
- 	  else if (tmp != TYPE_NULL)
- 	    VERIFICATION_ERROR ("array load from non-array type");
- 	  PUSH_TYPE (type);
- 	  break;
- 
- 	case OPCODE_anewarray:
- 	  type = get_class_constant (current_jcf, IMMEDIATE_u2);
- 	  type = promote_type (type);
- 	  goto newarray;
- 
- 	case OPCODE_newarray:
- 	  index = IMMEDIATE_u1;
- 	  type = decode_newarray_type (index);
- 	  if (type == NULL_TREE)
- 	    VERIFICATION_ERROR ("invalid type code in newarray opcode");
- 	  goto newarray;
- 
- 	newarray:
- 	  if (int_value >= 0 && prevpc >= 0)
- 	    {
- 	      /* If the previous instruction pushed an int constant,
- 		 we want to use it. */
- 	      switch (byte_ops[prevpc])
- 		{
- 		case OPCODE_iconst_0: case OPCODE_iconst_1:
- 		case OPCODE_iconst_2: case OPCODE_iconst_3:
- 		case OPCODE_iconst_4: case OPCODE_iconst_5:
- 		case OPCODE_bipush:  case OPCODE_sipush:
- 		case OPCODE_ldc: case OPCODE_ldc_w:
- 		  break;
- 		default:
- 		  int_value = -1;
- 		}
- 	    }
- 	  else
- 	    int_value = -1;
- 
- 	  type = build_java_array_type (type, int_value);
- 	  pop_type (int_type_node);
- 	  PUSH_TYPE (type);
- 	  break;
- 
- 	case OPCODE_multianewarray:
- 	  {
- 	    int ndim, i;
- 	    index = IMMEDIATE_u2;
- 	    ndim  = IMMEDIATE_u1;
- 
-             if (ndim < 1)
-               VERIFICATION_ERROR
-                 ("number of dimension lower that 1 in multianewarray" );
- 
- 	    for (i = 0; i < ndim; i++)
- 	      pop_type (int_type_node);
- 
- 	    PUSH_TYPE (get_class_constant (current_jcf, index));
- 	    break;
- 	  }
- 
- 	case OPCODE_aconst_null:
- 	  PUSH_TYPE (ptr_type_node);
- 	  break;
- 
- 	case OPCODE_athrow:
- 	  /* FIXME: athrow also empties the stack.  */
- 	  POP_TYPE (throwable_type_node, "missing throwable at athrow" );
- 	  INVALIDATE_PC;
- 	  break;
- 
- 	case OPCODE_checkcast:
- 	  POP_TYPE (object_ptr_type_node,
- 		    "checkcast operand is not a pointer");
- 	  type = get_class_constant (current_jcf, IMMEDIATE_u2);
- 	  PUSH_TYPE (type);
- 	  break;
- 
- 	case OPCODE_instanceof:
- 	  POP_TYPE (object_ptr_type_node,
- 		    "instanceof operand is not a pointer");
- 	  get_class_constant (current_jcf, IMMEDIATE_u2);
- 	  PUSH_TYPE (int_type_node);
- 	  break;
- 
- 	case OPCODE_tableswitch:
- 	  {
- 	    jint low, high;
- 
- 	    POP_TYPE (int_type_node, "missing int for tableswitch");
- 
- 	    while (PC%4)
- 	      {
- 	        if (byte_ops[PC++])
- 		  VERIFICATION_ERROR ("bad alignment in tableswitch pad");
- 	      }
- 
- 	    PUSH_PENDING (lookup_label (oldpc + IMMEDIATE_s4));
- 	    low  = IMMEDIATE_s4;
- 	    high = IMMEDIATE_s4;
- 
- 	    if (low > high)
- 	      VERIFICATION_ERROR ("unsorted low/high value in tableswitch");
- 
- 	    while (low++ <= high)
- 	      PUSH_PENDING (lookup_label (oldpc + IMMEDIATE_s4));
- 
- 	    INVALIDATE_PC;
- 	    break;
- 	  }
- 
- 	case OPCODE_lookupswitch:
- 	  {
- 	    jint npairs, last = 0, not_registered = 1;
- 
- 	    POP_TYPE (int_type_node, "missing int for lookupswitch");
- 
- 	    while (PC%4)
- 	      {
- 	        if (byte_ops[PC++])
- 		  VERIFICATION_ERROR ("bad alignment in lookupswitch pad");
- 	      }
- 
- 	    PUSH_PENDING (lookup_label (oldpc + IMMEDIATE_s4));
- 	    npairs = IMMEDIATE_s4;
- 	    
- 	    if (npairs < 0)
- 	      VERIFICATION_ERROR ("invalid number of targets in lookupswitch");
- 
- 	    while (npairs--)
- 	      {
- 	        int match = IMMEDIATE_s4;
- 
- 		if (not_registered)
- 		  not_registered = 0;
- 		else if (last >= match)
- 		  VERIFICATION_ERROR ("unsorted match value in lookupswitch");
- 
- 		last = match;
- 		PUSH_PENDING (lookup_label (oldpc + IMMEDIATE_s4));
- 	      }
- 	    INVALIDATE_PC;
- 	    break;
- 	  }
- 
- 	case OPCODE_monitorenter: 
- 	  /* fall thru */
- 	case OPCODE_monitorexit:
- 	  pop_type (ptr_type_node);
- 	  break;
- 
- 	case OPCODE_goto_w:
- 	  PUSH_PENDING (lookup_label (oldpc + IMMEDIATE_s4));
- 	  INVALIDATE_PC;
- 	  break;
- 
- 	case OPCODE_jsr:
- 	  {
- 	    tree target = lookup_label (oldpc + IMMEDIATE_s2);
- 	    tree return_label = lookup_label (PC);
- 	    PUSH_TYPE (return_address_type_node);
- 	    /* The return label chain will be null if this is the first
- 	       time we've seen this jsr target.  */
-             if (LABEL_RETURN_LABEL (target) == NULL_TREE)
- 	      {
- 		tree return_type_map;
- 		int nlocals = DECL_MAX_LOCALS (current_function_decl);
- 		index = nlocals + DECL_MAX_STACK (current_function_decl);
- 		return_type_map = make_tree_vec (index);
- 
- 		while (index > nlocals)
- 		  TREE_VEC_ELT (return_type_map, --index) = TYPE_UNKNOWN;
- 
- 		while (index > 0)
- 		  TREE_VEC_ELT (return_type_map, --index) = TYPE_UNUSED;
- 
- 		LABEL_RETURN_LABEL (target)
- 		  = build_decl (LABEL_DECL, NULL_TREE, TREE_TYPE (target));
- 		LABEL_PC (LABEL_RETURN_LABEL (target)) = INVALID_PC;
- 		LABEL_RETURN_TYPE_STATE (target) = return_type_map;
- 		LABEL_IS_SUBR_START (target) = 1;
- 		LABEL_IN_SUBR (target) = 1;
- 		LABEL_SUBR_START (target) = target;
- 		LABEL_SUBR_CONTEXT (target) = current_subr;
- 	      }
- 	    else if (! LABEL_IS_SUBR_START (target)
- 		     || LABEL_SUBR_CONTEXT (target) != current_subr)
- 	      VERIFICATION_ERROR ("label part of different subroutines");
- 
- 	    i = merge_type_state (target);
- 	    if (i != 0)
- 	      {
- 		if (i < 0)
- 		  VERIFICATION_ERROR ("types could not be merged at jsr");
- 		push_pending_label (target);
- 	      }
- 	    current_subr = target;
- 
- 	    /* Chain return_pc onto LABEL_RETURN_LABELS (target) if needed. */
- 	    if (! value_member (return_label, LABEL_RETURN_LABELS (target)))
- 	      {
- 		LABEL_RETURN_LABELS (target)
- 		  = tree_cons (NULL_TREE, return_label,
- 			       LABEL_RETURN_LABELS (target));
- 	      }
- 
- 	    if (LABEL_VERIFIED (target))
- 	      {
- 		tree return_map = LABEL_RETURN_TYPE_STATE (target);
- 		int len = TREE_VEC_LENGTH (return_map);
- 		stack_pointer = len - DECL_MAX_LOCALS (current_function_decl);
- 		while (--len >= 0)
- 		  {
- 		    if (TREE_VEC_ELT (return_map, len) != TYPE_UNUSED)
- 		      type_map[len] = TREE_VEC_ELT (return_map, len);
- 		  }
- 		current_subr = LABEL_SUBR_CONTEXT (target);
- 		if (RETURN_MAP_ADJUSTED (return_map))
- 		  PUSH_PENDING (return_label);
- 	      }
- 
- 	    INVALIDATE_PC;
- 	  }
- 	  break;
- 
- 	case OPCODE_ret:
- 	  if (current_subr == NULL_TREE)
- 	    VERIFICATION_ERROR ("ret instruction not in a jsr subroutine");
- 	  else
- 	    {
- 	      tree ret_map = LABEL_RETURN_TYPE_STATE (current_subr);
- 	      int size
-                 = DECL_MAX_LOCALS (current_function_decl) + stack_pointer;
- 	      index = wide ? IMMEDIATE_u2 : IMMEDIATE_u1;
- 	      wide = 0;
- 	      INVALIDATE_PC;
- 	      if (index < 0 || index >= DECL_MAX_LOCALS (current_function_decl)
- 		  || type_map[index] != TYPE_RETURN_ADDR)
- 		VERIFICATION_ERROR ("invalid ret index");
- 
- 	      /* The next chunk of code is similar to an inlined version of
-                merge_type_state (LABEL_RETURN_LABEL (current_subr)).
- 	       The main differences are that LABEL_RETURN_LABEL is
- 	       pre-allocated by the jsr (but we don't know the size then);
- 	       and that we have to handle TYPE_UNUSED.  */
- 
- 	      if (! RETURN_MAP_ADJUSTED (ret_map))
- 		{
-                   /* First return from this subroutine - fix stack
-                   pointer.  */
- 		  TREE_VEC_LENGTH (ret_map) = size;
- 		  for (index = size;  --index >= 0; )
- 		    {
- 		      if (TREE_VEC_ELT (ret_map, index) != TYPE_UNUSED)
- 			TREE_VEC_ELT (ret_map, index) = type_map[index];
- 		    }
- 		  RETURN_MAP_ADJUSTED (ret_map) = 1;
- 		}
- 	      else
- 		{
- 		  if (TREE_VEC_LENGTH (ret_map) != size)
- 		    VERIFICATION_ERROR ("inconsistent stack size on ret");
- 		  for (index = 0;  index < size;  index++)
- 		    {
- 		      tree type = TREE_VEC_ELT (ret_map, index);
- 		      if (type != TYPE_UNUSED)
- 			{
- 			  type = merge_types (type, type_map[index]);
- 			  TREE_VEC_ELT (ret_map, index) = type;
- 			  if (type == TYPE_UNKNOWN)
- 			    {
- 			      if (index >= size - stack_pointer)
- 				VERIFICATION_ERROR
- 				  ("inconsistent types on ret from jsr");
- 			    }
- 			  else if (TYPE_IS_WIDE (type))
- 			    index++;
- 			}
- 		    }
- 		}
-             }
-           break;
- 
-         case OPCODE_jsr_w:        
-         case OPCODE_ret_w:
-         default:
-           error ("unknown opcode %d@pc=%d during verification", op_code, PC-1);
-           return 0;
-         }
- 
-       prevpc = oldpc;
- 
-       /* The following test is true if we have entered or exited an exception
- 	 handler range *or* we have done a store to a local variable.
- 	 In either case we need to consider any exception handlers that
- 	 might "follow" this instruction.  */
- 
-       if (eh_ranges != prev_eh_ranges)
- 	{
- 	  int save_stack_pointer = stack_pointer;
- 	  int index = DECL_MAX_LOCALS (current_function_decl);
- 	  tree save_type = type_map[index];
- 	  tree save_current_subr = current_subr;
- 	  struct eh_range *ranges = find_handler (oldpc);
- 	  stack_pointer = 1;
- 
- 	  for ( ; ranges != NULL_EH_RANGE; ranges = ranges->outer)
- 	    {
- 	      tree chain = ranges->handlers;
- 
- 	      /* We need to determine if the handler is part of current_subr.
- 		 The are two cases:  (1) The exception catch range
- 		 is entirely within current_subr.  In that case the handler
- 		 is also part of current_subr.
- 		 (2) Some of the catch range is not in current_subr.
- 		 In that case, the handler is *not* part of current_subr.
- 
- 		 Figuring out which is the case is not necessarily obvious,
- 		 in the presence of clever code generators (and obfuscators).
- 		 We make a simplifying assumption that in case (2) we
- 		 have that the current_subr is entirely within the catch range.
- 		 In that case we can assume if that if a caller (the jsr) of
- 		 a subroutine is within the catch range, then the handler is
- 		 *not* part of the subroutine, and vice versa.  */
- 
- 	      current_subr = save_current_subr;
- 	      for ( ; current_subr != NULL_TREE;
- 		    current_subr = LABEL_SUBR_CONTEXT (current_subr))
- 		{
- 		  tree return_labels = LABEL_RETURN_LABELS (current_subr);
- 		  /* There could be multiple return_labels, but
- 		     we only need to check one.  */
- 		  int return_pc = LABEL_PC (TREE_VALUE (return_labels));
- 		  if (return_pc <= ranges->start_pc
- 		      || return_pc > ranges->end_pc)
- 		    break;
- 		}
- 
- 	      for ( ; chain != NULL_TREE; chain = TREE_CHAIN (chain))
- 		{
- 		  tree handler = TREE_VALUE (chain);
- 		  tree type = TREE_PURPOSE (chain);
- 
- 		  if (type == NULL_TREE)  /* a finally handler */
- 		    type = throwable_type_node;
- 
- 		  type_map[index] = promote_type (type);
- 
- 		  PUSH_PENDING (handler);
- 		}
- 	    }
- 	  stack_pointer = save_stack_pointer;
- 	  current_subr = save_current_subr;
- 	  type_map[index] = save_type;
- 	  prev_eh_ranges = eh_ranges;
- 	}
-     }
- 
-   return 1;
- 
-  pop_type_error:
-   error ("verification error at PC=%d", oldpc);
-   if (message != NULL)
-     error ("%s", message);
-   error ("%s", pmessage);
-   free (pmessage);
-   return 0;
- 
-  stack_overflow:
-   message = "stack overflow";
-   goto verify_error;
- 
-  bad_pc:
-   message = "program counter out of range";
-   goto verify_error;
- 
-  error_with_index:
-   error ("verification error at PC=%d", oldpc);
-   error (message, index);
-   return 0;
- 
-  verify_error:
-   error ("verification error at PC=%d", oldpc);
-   error ("%s", message);
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-4.0.2/gcc/java/verify.h gcc-4.1.0/gcc/java/verify.h
*** gcc-4.0.2/gcc/java/verify.h	Sat Feb 19 01:14:17 2005
--- gcc-4.1.0/gcc/java/verify.h	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 15,22 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 15,22 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/win32-host.c gcc-4.1.0/gcc/java/win32-host.c
*** gcc-4.0.2/gcc/java/win32-host.c	Sun Oct 17 22:51:35 2004
--- gcc-4.1.0/gcc/java/win32-host.c	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 15,22 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 15,22 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/gcc/java/xref.c gcc-4.1.0/gcc/java/xref.c
*** gcc-4.0.2/gcc/java/xref.c	Tue Nov 23 06:52:22 2004
--- gcc-4.1.0/gcc/java/xref.c	Thu Jan  1 00:00:00 1970
***************
*** 1,59 ****
- /* Write cross reference information extracted from Java(TM)
-    source and bytecode files, in one of formats documented below.
-    Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
-    Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
- 
- GCC 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 General Public License for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING.  If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
- 
- Java and all Java-based marks are trademarks or registered trademarks
- of Sun Microsystems, Inc. in the United States and other countries.
- The Free Software Foundation is independent of Sun Microsystems, Inc.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "tm.h"
- #include "tree.h"
- #include "java-tree.h"
- #include "xref.h"
- #include "jcf.h"
- #include "parse.h"
- 
- static xref_flag_table xref_table [] = {
-   {NULL, NULL, NULL, NULL},
- };
- 
- /* Branch to the right xref "back-end".  */
- 
- void
- expand_xref (tree node)
- {
-   /* Maintain these two cached. */
-   static FILE *fp = NULL;
-   static void (*current_expand) (FILE *, tree) = NULL;
- 
-   if ( !flag_emit_xref )
-     return;
- 
-   if (!fp)
-     fp = xref_table [flag_emit_xref-1].fp;
-   if (!current_expand)
-     current_expand = xref_table [flag_emit_xref-1].expand;
- 
-   (*current_expand) (fp, node);
- }
--- 0 ----
diff -Nrcpad gcc-4.0.2/gcc/java/xref.h gcc-4.1.0/gcc/java/xref.h
*** gcc-4.0.2/gcc/java/xref.h	Tue Nov 23 06:52:22 2004
--- gcc-4.1.0/gcc/java/xref.h	Thu Jan  1 00:00:00 1970
***************
*** 1,35 ****
- /* Definitions for the cross reference backend xref.c
-    Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
-    Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
- 
- GCC 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 General Public License for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING.  If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
- 
- Java and all Java-based marks are trademarks or registered trademarks
- of Sun Microsystems, Inc. in the United States and other countries.
- The Free Software Foundation is independent of Sun Microsystems, Inc.  */
- 
- /* Exported functions. */
- void expand_xref (tree);
- 
- /* Lookup table to be used with the value of flag_emit_xref */
- typedef struct {
-   char *key;			         /* Activator in -fxref=<key>  */
-   void (*expand) (FILE *, tree);         /* Function to write xrefs out */
-   FILE *fp;			         /* fp to use during the call.  */
-   void *data;			         /* Placeholder for additional data */
- } xref_flag_table;
--- 0 ----
diff -Nrcpad gcc-4.0.2/gcc/java/zextract.c gcc-4.1.0/gcc/java/zextract.c
*** gcc-4.0.2/gcc/java/zextract.c	Sat Jul 24 00:03:28 2004
--- gcc-4.1.0/gcc/java/zextract.c	Tue Nov  8 19:10:39 2005
***************
*** 1,7 ****
  /* Handle a .class file embedded in a .zip archive.
     This extracts a member from a .zip file, but does not handle
     uncompression (since that is not needed for classes.zip).
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,7 ----
  /* Handle a .class file embedded in a .zip archive.
     This extracts a member from a .zip file, but does not handle
     uncompression (since that is not needed for classes.zip).
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** GNU General Public License for more deta
*** 18,25 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 18,25 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
*************** read_zip_archive (ZipFile *zipf)
*** 287,292 ****
--- 287,311 ----
      return -1;
    if (read (zipf->fd, buffer, ECREC_SIZE+4) != ECREC_SIZE+4)
      return -2;
+   if (buffer[0] != 'P'
+       || strncmp ((const char *) &buffer[1], END_CENTRAL_SIG, 3))
+     {
+       /* We could not find the end-central-header signature, probably
+ 	 because a zipfile comment is present. Scan backwards until we
+ 	 find the signature. */
+       if (lseek (zipf->fd, (long)(-ECREC_SIZE), SEEK_END) <= 0)
+ 	return -2;
+       while (buffer[0] != 'P'
+ 	     || strncmp ((const char *) &buffer[1], END_CENTRAL_SIG, 3))
+ 	{
+ 	  if (lseek (zipf->fd, -5, SEEK_CUR) < 0)
+ 	    return -2;
+ 	  if (read (zipf->fd, buffer, 4) != 4)
+ 	    return -2;
+ 	}
+       if (read (zipf->fd, buffer + 4, ECREC_SIZE) != ECREC_SIZE)
+ 	return -2;
+     }
    zipf->count = makeword((const uch *) &buffer[TOTAL_ENTRIES_CENTRAL_DIR]);
    zipf->dir_size = makelong((const uch *) &buffer[SIZE_CENTRAL_DIRECTORY]);
  #define ALLOC xmalloc
diff -Nrcpad gcc-4.0.2/gcc/java/zipfile.h gcc-4.1.0/gcc/java/zipfile.h
*** gcc-4.0.2/gcc/java/zipfile.h	Thu Jan  9 23:16:56 2003
--- gcc-4.1.0/gcc/java/zipfile.h	Sat Jun 25 00:33:05 2005
*************** GNU General Public License for more deta
*** 16,23 ****
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
--- 16,23 ----
  
  You should have received a copy of the GNU General Public License
  along with GCC; see the file COPYING.  If not, write to
! the Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.  
  
  Java and all Java-based marks are trademarks or registered trademarks
  of Sun Microsystems, Inc. in the United States and other countries.
diff -Nrcpad gcc-4.0.2/libffi/.cvsignore gcc-4.1.0/libffi/.cvsignore
*** gcc-4.0.2/libffi/.cvsignore	Tue Jun 15 07:42:07 2004
--- gcc-4.1.0/libffi/.cvsignore	Thu Jan  1 00:00:00 1970
***************
*** 1 ****
- autom4te.cache
--- 0 ----
diff -Nrcpad gcc-4.0.2/libffi/ChangeLog gcc-4.1.0/libffi/ChangeLog
*** gcc-4.0.2/libffi/ChangeLog	Wed Sep 21 03:57:52 2005
--- gcc-4.1.0/libffi/ChangeLog	Tue Feb 28 08:29:24 2006
***************
*** 1,6 ****
! 2005-09-20  Release Manager
  
! 	* GCC 4.0.2 released.
  
  2005-08-25  Alan Modra  <amodra@bigpond.net.au>
  
--- 1,44 ----
! 2006-02-28  Release Manager
  
! 	* GCC 4.1.0 released.
! 
! 2006-01-18  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* src/powerpc/sysv.S (smst_two_register): Don't call __ashldi3,
! 	instead do the shifting inline.
! 	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't compute %r5
! 	shift count unconditionally.  Simplify load sequences for 1, 2, 3, 4
! 	and 8 byte structs, for the remaining struct sizes don't call
! 	__lshrdi3, instead do the shifting inline.
! 
! 2005-12-07  Thiemo Seufer  <ths@networkno.de>
! 
! 	* src/mips/ffitarget.h: Remove obsolete sgidefs.h include. Add
! 	missing parentheses.
! 	* src/mips/o32.S (ffi_call_O32): Code formatting. Define
! 	and use A3_OFF, FP_OFF, RA_OFF. Micro-optimizations.
! 	(ffi_closure_O32): Likewise, but with newly defined A3_OFF2,
! 	A2_OFF2, A1_OFF2, A0_OFF2, RA_OFF2, FP_OFF2, S0_OFF2, GP_OFF2,
! 	V1_OFF2, V0_OFF2, FA_1_1_OFF2, FA_1_0_OFF2, FA_0_1_OFF2,
! 	FA_0_0_OFF2.
! 	* src/mips/ffi.c (ffi_prep_args): Code formatting. Fix
! 	endianness bugs.
! 	(ffi_prep_closure): Improve trampoline instruction scheduling.
! 	(ffi_closure_mips_inner_O32): Fix endianness bugs.
! 
! 2005-09-30  Geoffrey Keating  <geoffk@apple.com>
! 
! 	* testsuite/lib/libffi-dg.exp (libffi_target_compile): For
! 	darwin, use -shared-libgcc not -lgcc_s, and explain why.
! 
! 2005-09-26  Tom Tromey  <tromey@redhat.com>
! 
! 	* testsuite/libffi.call/float1.c (value_type): New typedef.
! 	(CANARY): New define.
! 	(main): Check for result buffer overflow.
! 	* src/powerpc/linux64.S: Handle linux64 long double returns.
! 	* src/powerpc/ffi.c (FLAG_RETURNS_128BITS): New constant.
! 	(ffi_prep_cif_machdep): Handle linux64 long double returns.
  
  2005-08-25  Alan Modra  <amodra@bigpond.net.au>
  
***************
*** 9,19 ****
  	homed fp args.
  	(ffi_status ffi_prep_cif_machdep): Correct stack sizing for same.
  
! 2005-08-18  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	PR libgcj/21943
! 	* src/mips/n32.S: Enforce PIC code.
! 	* src/mips/o32.S: Likewise.
  
  2005-08-10  Alfred M. Szmidt  <ams@gnu.org>
  
--- 47,68 ----
  	homed fp args.
  	(ffi_status ffi_prep_cif_machdep): Correct stack sizing for same.
  
! 2005-08-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	* configure.ac (HAVE_HIDDEN_VISIBILITY_ATTRIBUTE): New test.
! 	(AH_BOTTOM): Add FFI_HIDDEN definition.
! 	* configure: Rebuilt.
! 	* fficonfig.h.in: Rebuilt.
! 	* src/powerpc/ffi.c (hidden): Remove.
! 	(ffi_closure_LINUX64, ffi_prep_args64, ffi_call_LINUX64,
! 	ffi_closure_helper_LINUX64): Use FFI_HIDDEN instead of hidden.
! 	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64,
! 	.ffi_closure_LINUX64): Use FFI_HIDDEN instead of .hidden.
! 	* src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): Remove,
! 	add FFI_HIDDEN to its prototype.
! 	(ffi_closure_SYSV_inner): New.
! 	* src/x86/sysv.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New.
! 	* src/x86/win32.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New.
  
  2005-08-10  Alfred M. Szmidt  <ams@gnu.org>
  
***************
*** 21,27 ****
  	* configure: Rebuilt.
  	* configure.ac: Handle i*86-*-gnu*.
  
! 2005-08-03  Randolph Chung  <tausq@debian.org>
  
  	* src/pa/ffi.c (ffi_struct_type): Rename FFI_TYPE_SMALL_STRUCT1
  	as FFI_TYPE_SMALL_STRUCT3.  Break out handling for 5-7 byte
--- 70,131 ----
  	* configure: Rebuilt.
  	* configure.ac: Handle i*86-*-gnu*.
  
! 2005-08-09  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Use
! 	DW_CFA_offset_extended_sf rather than
! 	DW_CFA_GNU_negative_offset_extended.
! 	* src/powerpc/sysv.S (ffi_call_SYSV): Likewise.
! 
! 2005-07-22  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
! 
! 	* src/sh/sysv.S (ffi_call_SYSV): Stop argument popping correctly
! 	on sh3.
! 	(ffi_closure_SYSV): Change the stack layout for sh3 struct argument.
! 	* src/sh/ffi.c (ffi_prep_args): Fix sh3 argument copy, when it is
! 	partially on register.
! 	(ffi_closure_helper_SYSV): Likewise.
! 	(ffi_prep_cif_machdep): Don't set too many cif->flags.
! 
! 2005-07-20  Kaz Kojima  <kkojima@gcc.gnu.org>
! 
! 	* src/sh/ffi.c (ffi_call): Handle small structures correctly.
! 	Remove empty line.
! 	* src/sh64/ffi.c (simple_type): Remove.
! 	(return_type): Handle small structures correctly.
! 	(ffi_prep_args): Likewise.
! 	(ffi_call): Likewise.
! 	(ffi_closure_helper_SYSV): Likewise.
! 	* src/sh64/sysv.S (ffi_call_SYSV): Handle 1, 2 and 4-byte return.
! 	Emit position independent code if PIC and remove wrong datalabel
! 	prefixes from EH data.
! 
! 2005-07-19  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* Makefile.am (nodist_libffi_la_SOURCES): Add POWERPC_FREEBSD.
! 	* Makefile.in: Regenerate.
! 	* include/Makefile.in: Likewise.
! 	* testsuite/Makefile.in: Likewise.
! 	* configure.ac: Add POWERPC_FREEBSD rules.
! 	* configure: Regenerate.
! 	* src/powerpc/ffitarget.h: Add POWERPC_FREEBSD rules.
! 	(FFI_SYSV_TYPE_SMALL_STRUCT): Define.
! 	* src/powerpc/ffi.c: Add flags to handle small structure returns
! 	in ffi_call_SYSV.
! 	(ffi_prep_cif_machdep): Handle small structures for SYSV 4 ABI.
! 	Aka FFI_SYSV.
! 	(ffi_closure_helper_SYSV): Likewise.
! 	* src/powerpc/ppc_closure.S: Add return types for small structures.
! 	* src/powerpc/sysv.S: Add bits to handle small structures for
! 	final SYSV 4 ABI.
! 
! 2005-07-10  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* testsuite/libffi.call/cls_5_1_byte.c: New test file.
! 	* testsuite/libffi.call/cls_6_1_byte.c: Likewise.
! 	* testsuite/libffi.call/cls_7_1_byte.c: Likewise.
! 
! 2005-07-05  Randolph Chung  <tausq@debian.org>
  
  	* src/pa/ffi.c (ffi_struct_type): Rename FFI_TYPE_SMALL_STRUCT1
  	as FFI_TYPE_SMALL_STRUCT3.  Break out handling for 5-7 byte
***************
*** 38,55 ****
  	(checksmst3): Optimize handling of 3-byte struct returns.
  	(checksmst567): Properly handle 5-7 byte struct returns.
  
! 2005-07-07  Release Manager
  
! 	* GCC 4.0.1 released.
  
  2005-05-08  Richard Henderson  <rth@redhat.com>
  
  	PR libffi/21285
  	* src/alpha/osf.S: Update unwind into to match code.
  
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
  2005-02-22  Andrew Haley  <aph@redhat.com>
  
--- 142,246 ----
  	(checksmst3): Optimize handling of 3-byte struct returns.
  	(checksmst567): Properly handle 5-7 byte struct returns.
  
! 2005-06-15  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	PR libgcj/21943
! 	* src/mips/n32.S: Enforce PIC code.
! 	* src/mips/o32.S: Likewise.
! 
! 2005-06-15  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
! 
! 	* configure.ac: Treat i*86-*-solaris2.10 and up as X86_64.
! 	* configure: Regenerate.
! 	
! 2005-06-01  Alan Modra  <amodra@bigpond.net.au>
! 
! 	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't use JUMPTARGET
! 	to call ffi_closure_helper_SYSV.  Append @local instead.
! 	* src/powerpc/sysv.S (ffi_call_SYSV): Likewise for ffi_prep_args_SYSV.
! 
! 2005-05-17  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS.
! 	Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF.
! 	* Makefile.am (ACLOCAL_AMFLAGS): Remove -I ../config.
! 	* aclocal.m4, configure, fficonfig.h.in, Makefile.in,
! 	include/Makefile.in, testsuite/Makefile.in: Regenerate.
! 	
! 2005-05-09  Mike Stump  <mrs@apple.com>
! 
! 	* configure: Regenerate.
  
  2005-05-08  Richard Henderson  <rth@redhat.com>
  
  	PR libffi/21285
  	* src/alpha/osf.S: Update unwind into to match code.
  
! 2005-05-04  Andreas Degert <ad@papyrus-gmbh.de>
! 	    Richard Henderson  <rth@redhat.com>
  
! 	* src/x86/ffi64.c (ffi_prep_cif_machdep): Save sse-used flag in
! 	bit 11 of flags.
! 	(ffi_call): Mask return type field.  Pass ssecount to ffi_call_unix64.
! 	(ffi_prep_closure): Set carry bit if sse-used flag set.
! 	* src/x86/unix64.S (ffi_call_unix64): Add ssecount argument.
! 	Only load sse registers if ssecount non-zero.
! 	(ffi_closure_unix64): Only save sse registers if carry set on entry.
! 
! 2005-04-29  Ralf Corsepius  <ralf.corsepius@rtems.org>
! 
! 	* configure.ac: Add i*86-*-rtems*, sparc*-*-rtems*,
! 	powerpc-*rtems*, arm*-*-rtems*, sh-*-rtems*.
! 	* configure: Regenerate.
! 
! 2005-04-20  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* testsuite/lib/libffi-dg.exp (libffi-dg-test-1): In regsub use,
! 	have Tcl8.3-compatible intermediate variable.
! 
! 2005-04-18  Simon Posnjak <simon.posnjak@siol.net> 
! 	    Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* Makefile.am: Add CRIS support.
! 	* configure.ac: Likewise.
! 	* Makefile.in, configure, testsuite/Makefile.in,
! 	include/Makefile.in: Regenerate.
! 	* src/cris: New directory.
! 	* src/cris/ffi.c, src/cris/sysv.S, src/cris/ffitarget.h: New files.
! 	* src/prep_cif.c (ffi_prep_cif): Wrap in #ifndef __CRIS__.
! 
! 	* testsuite/lib/libffi-dg.exp (libffi-dg-test-1): Replace \n with
! 	\r?\n in output tests.
! 
! 2005-04-12  Mike Stump  <mrs@apple.com>
! 
! 	* configure: Regenerate.
! 
! 2005-03-30  Hans Boehm  <Hans.Boehm@hp.com>
! 
! 	* src/ia64/ffitarget.h (ffi_arg): Use long long instead of DI.
! 	
! 2005-03-30  Steve Ellcey  <sje@cup.hp.com>
! 
! 	* src/ia64/ffitarget.h (ffi_arg) ADD DI attribute.
! 	(ffi_sarg) Ditto.
! 	* src/ia64/unix.S (ffi_closure_unix): Extend gp
! 	to 64 bits in ILP32 mode.
! 	Load 64 bits even for short data.
! 
! 2005-03-23  Mike Stump  <mrs@apple.com>
! 
! 	* src/powerpc/darwin.S: Update for -m64 multilib.
! 	* src/powerpc/darwin_closure.S: Likewise.
! 
! 2005-03-21  Zack Weinberg  <zack@codesourcery.com>
! 
! 	* configure.ac: Do not invoke TL_AC_GCC_VERSION.
! 	Do not set tool_include_dir.
! 	* aclocal.m4, configure, Makefile.in, testsuite/Makefile.in:
! 	Regenerate.
! 	* include/Makefile.am: Set gcc_version and toollibffidir.
! 	* include/Makefile.in: Regenerate.
  
  2005-02-22  Andrew Haley  <aph@redhat.com>
  
***************
*** 88,94 ****
  
  	* src/types.c (FFI_TYPE_POINTER): Define with sizeof.
  	(FFI_TYPE_LONGDOUBLE): Fix for ia64.
! 	* src/ia64/ffitarget.h (struct ffi_ia64_trampoline_struct): Move 
  	into ffi_prep_closure.
  	* src/ia64/ia64_flags.h, src/ia64/ffi.c, src/ia64/unix.S: Rewrite
  	from scratch.
--- 279,285 ----
  
  	* src/types.c (FFI_TYPE_POINTER): Define with sizeof.
  	(FFI_TYPE_LONGDOUBLE): Fix for ia64.
! 	* src/ia64/ffitarget.h (struct ffi_ia64_trampoline_struct): Move
  	into ffi_prep_closure.
  	* src/ia64/ia64_flags.h, src/ia64/ffi.c, src/ia64/unix.S: Rewrite
  	from scratch.
***************
*** 365,371 ****
  	integer (O32 ABI only).
  	(ffi_prep_closure): new function.
  	(ffi_closure_mips_inner_O32): new function.
! 	* src/mips/ffitarget.h: Define `FFI_CLOSURES' and 
  	`FFI_TRAMPOLINE_SIZE' appropriately if the ABI is o32.
  	* src/mips/o32.S (ffi_call_O32): add labels for .eh_frame. Return
  	64 bit integers correctly.
--- 556,562 ----
  	integer (O32 ABI only).
  	(ffi_prep_closure): new function.
  	(ffi_closure_mips_inner_O32): new function.
! 	* src/mips/ffitarget.h: Define `FFI_CLOSURES' and
  	`FFI_TRAMPOLINE_SIZE' appropriately if the ABI is o32.
  	* src/mips/o32.S (ffi_call_O32): add labels for .eh_frame. Return
  	64 bit integers correctly.
***************
*** 445,451 ****
  	* src/powerpc/darwin.S: Go through a non-lazy pointer for initial
  	FDE location.
  	* src/powerpc/darwin_closure.S: Likewise.
! 	
  2004-04-24  Andreas Tobler  <a.tobler@schweiz.ch>
  
  	* testsuite/libffi.call/cls_multi_schar.c (main): Fix initialization
--- 636,642 ----
  	* src/powerpc/darwin.S: Go through a non-lazy pointer for initial
  	FDE location.
  	* src/powerpc/darwin_closure.S: Likewise.
! 
  2004-04-24  Andreas Tobler  <a.tobler@schweiz.ch>
  
  	* testsuite/libffi.call/cls_multi_schar.c (main): Fix initialization
diff -Nrcpad gcc-4.0.2/libffi/Makefile.am gcc-4.1.0/libffi/Makefile.am
*** gcc-4.0.2/libffi/Makefile.am	Wed Dec  8 15:48:53 2004
--- gcc-4.1.0/libffi/Makefile.am	Tue Jul 19 21:15:36 2005
***************
*** 1,13 ****
  ## Process this with automake to create Makefile.in
  
  AUTOMAKE_OPTIONS = foreign subdir-objects
! ACLOCAL_AMFLAGS = -I .. -I ../config
  
  SUBDIRS = include testsuite
  
  EXTRA_DIST = LICENSE ChangeLog.v1 \
  	src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \
  	src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \
  	src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
  	src/mips/ffitarget.h \
  	src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \
--- 1,14 ----
  ## Process this with automake to create Makefile.in
  
  AUTOMAKE_OPTIONS = foreign subdir-objects
! ACLOCAL_AMFLAGS = -I ..
  
  SUBDIRS = include testsuite
  
  EXTRA_DIST = LICENSE ChangeLog.v1 \
  	src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \
  	src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \
+ 	src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \
  	src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
  	src/mips/ffitarget.h \
  	src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \
*************** endif
*** 116,124 ****
--- 117,131 ----
  if POWERPC_DARWIN
  nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
  endif
+ if POWERPC_FREEBSD
+ nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
+ endif
  if ARM
  nodist_libffi_la_SOURCES += src/arm/sysv.S src/arm/ffi.c
  endif
+ if LIBFFI_CRIS
+ nodist_libffi_la_SOURCES += src/cris/sysv.S src/cris/ffi.c
+ endif
  if FRV
  nodist_libffi_la_SOURCES += src/frv/eabi.S src/frv/ffi.c
  endif
diff -Nrcpad gcc-4.0.2/libffi/Makefile.in gcc-4.1.0/libffi/Makefile.in
*** gcc-4.0.2/libffi/Makefile.in	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/libffi/Makefile.in	Tue Feb 28 08:39:11 2006
*************** target_triplet = @target@
*** 51,63 ****
  @POWERPC_TRUE@am__append_10 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
  @POWERPC_AIX_TRUE@am__append_11 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
  @POWERPC_DARWIN_TRUE@am__append_12 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
! @ARM_TRUE@am__append_13 = src/arm/sysv.S src/arm/ffi.c
! @FRV_TRUE@am__append_14 = src/frv/eabi.S src/frv/ffi.c
! @S390_TRUE@am__append_15 = src/s390/sysv.S src/s390/ffi.c
! @X86_64_TRUE@am__append_16 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
! @SH_TRUE@am__append_17 = src/sh/sysv.S src/sh/ffi.c
! @SH64_TRUE@am__append_18 = src/sh64/sysv.S src/sh64/ffi.c
! @PA_TRUE@am__append_19 = src/pa/linux.S src/pa/ffi.c
  DIST_COMMON = README $(am__configure_deps) $(srcdir)/../compile \
  	$(srcdir)/../config.guess $(srcdir)/../config.sub \
  	$(srcdir)/../depcomp $(srcdir)/../install-sh \
--- 51,65 ----
  @POWERPC_TRUE@am__append_10 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
  @POWERPC_AIX_TRUE@am__append_11 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
  @POWERPC_DARWIN_TRUE@am__append_12 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
! @POWERPC_FREEBSD_TRUE@am__append_13 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
! @ARM_TRUE@am__append_14 = src/arm/sysv.S src/arm/ffi.c
! @LIBFFI_CRIS_TRUE@am__append_15 = src/cris/sysv.S src/cris/ffi.c
! @FRV_TRUE@am__append_16 = src/frv/eabi.S src/frv/ffi.c
! @S390_TRUE@am__append_17 = src/s390/sysv.S src/s390/ffi.c
! @X86_64_TRUE@am__append_18 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
! @SH_TRUE@am__append_19 = src/sh/sysv.S src/sh/ffi.c
! @SH64_TRUE@am__append_20 = src/sh64/sysv.S src/sh64/ffi.c
! @PA_TRUE@am__append_21 = src/pa/linux.S src/pa/ffi.c
  DIST_COMMON = README $(am__configure_deps) $(srcdir)/../compile \
  	$(srcdir)/../config.guess $(srcdir)/../config.sub \
  	$(srcdir)/../depcomp $(srcdir)/../install-sh \
*************** DIST_COMMON = README $(am__configure_dep
*** 67,76 ****
  	$(top_srcdir)/configure ChangeLog
  subdir = .
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/../config/accross.m4 \
! 	$(top_srcdir)/../config/gcc-version.m4 \
! 	$(top_srcdir)/../libtool.m4 $(top_srcdir)/acinclude.m4 \
! 	$(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
--- 69,76 ----
  	$(top_srcdir)/configure ChangeLog
  subdir = .
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
! 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
*************** am_libffi_la_OBJECTS = src/debug.lo src/
*** 112,146 ****
  @POWERPC_DARWIN_TRUE@am__objects_12 = src/powerpc/ffi_darwin.lo \
  @POWERPC_DARWIN_TRUE@	src/powerpc/darwin.lo \
  @POWERPC_DARWIN_TRUE@	src/powerpc/darwin_closure.lo
! @ARM_TRUE@am__objects_13 = src/arm/sysv.lo src/arm/ffi.lo
! @FRV_TRUE@am__objects_14 = src/frv/eabi.lo src/frv/ffi.lo
! @S390_TRUE@am__objects_15 = src/s390/sysv.lo src/s390/ffi.lo
! @X86_64_TRUE@am__objects_16 = src/x86/ffi64.lo src/x86/unix64.lo \
  @X86_64_TRUE@	src/x86/ffi.lo src/x86/sysv.lo
! @SH_TRUE@am__objects_17 = src/sh/sysv.lo src/sh/ffi.lo
! @SH64_TRUE@am__objects_18 = src/sh64/sysv.lo src/sh64/ffi.lo
! @PA_TRUE@am__objects_19 = src/pa/linux.lo src/pa/ffi.lo
  nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
  	$(am__objects_3) $(am__objects_4) $(am__objects_5) \
  	$(am__objects_6) $(am__objects_7) $(am__objects_8) \
  	$(am__objects_9) $(am__objects_10) $(am__objects_11) \
  	$(am__objects_12) $(am__objects_13) $(am__objects_14) \
  	$(am__objects_15) $(am__objects_16) $(am__objects_17) \
! 	$(am__objects_18) $(am__objects_19)
  libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \
  	$(nodist_libffi_la_OBJECTS)
  libffi_convenience_la_LIBADD =
! am__objects_20 = src/debug.lo src/prep_cif.lo src/types.lo \
  	src/raw_api.lo src/java_raw_api.lo
! am_libffi_convenience_la_OBJECTS = $(am__objects_20)
! am__objects_21 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
  	$(am__objects_4) $(am__objects_5) $(am__objects_6) \
  	$(am__objects_7) $(am__objects_8) $(am__objects_9) \
  	$(am__objects_10) $(am__objects_11) $(am__objects_12) \
  	$(am__objects_13) $(am__objects_14) $(am__objects_15) \
  	$(am__objects_16) $(am__objects_17) $(am__objects_18) \
! 	$(am__objects_19)
! nodist_libffi_convenience_la_OBJECTS = $(am__objects_21)
  libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \
  	$(nodist_libffi_convenience_la_OBJECTS)
  DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
--- 112,151 ----
  @POWERPC_DARWIN_TRUE@am__objects_12 = src/powerpc/ffi_darwin.lo \
  @POWERPC_DARWIN_TRUE@	src/powerpc/darwin.lo \
  @POWERPC_DARWIN_TRUE@	src/powerpc/darwin_closure.lo
! @POWERPC_FREEBSD_TRUE@am__objects_13 = src/powerpc/ffi.lo \
! @POWERPC_FREEBSD_TRUE@	src/powerpc/sysv.lo \
! @POWERPC_FREEBSD_TRUE@	src/powerpc/ppc_closure.lo
! @ARM_TRUE@am__objects_14 = src/arm/sysv.lo src/arm/ffi.lo
! @LIBFFI_CRIS_TRUE@am__objects_15 = src/cris/sysv.lo src/cris/ffi.lo
! @FRV_TRUE@am__objects_16 = src/frv/eabi.lo src/frv/ffi.lo
! @S390_TRUE@am__objects_17 = src/s390/sysv.lo src/s390/ffi.lo
! @X86_64_TRUE@am__objects_18 = src/x86/ffi64.lo src/x86/unix64.lo \
  @X86_64_TRUE@	src/x86/ffi.lo src/x86/sysv.lo
! @SH_TRUE@am__objects_19 = src/sh/sysv.lo src/sh/ffi.lo
! @SH64_TRUE@am__objects_20 = src/sh64/sysv.lo src/sh64/ffi.lo
! @PA_TRUE@am__objects_21 = src/pa/linux.lo src/pa/ffi.lo
  nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
  	$(am__objects_3) $(am__objects_4) $(am__objects_5) \
  	$(am__objects_6) $(am__objects_7) $(am__objects_8) \
  	$(am__objects_9) $(am__objects_10) $(am__objects_11) \
  	$(am__objects_12) $(am__objects_13) $(am__objects_14) \
  	$(am__objects_15) $(am__objects_16) $(am__objects_17) \
! 	$(am__objects_18) $(am__objects_19) $(am__objects_20) \
! 	$(am__objects_21)
  libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \
  	$(nodist_libffi_la_OBJECTS)
  libffi_convenience_la_LIBADD =
! am__objects_22 = src/debug.lo src/prep_cif.lo src/types.lo \
  	src/raw_api.lo src/java_raw_api.lo
! am_libffi_convenience_la_OBJECTS = $(am__objects_22)
! am__objects_23 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
  	$(am__objects_4) $(am__objects_5) $(am__objects_6) \
  	$(am__objects_7) $(am__objects_8) $(am__objects_9) \
  	$(am__objects_10) $(am__objects_11) $(am__objects_12) \
  	$(am__objects_13) $(am__objects_14) $(am__objects_15) \
  	$(am__objects_16) $(am__objects_17) $(am__objects_18) \
! 	$(am__objects_19) $(am__objects_20) $(am__objects_21)
! nodist_libffi_convenience_la_OBJECTS = $(am__objects_23)
  libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \
  	$(nodist_libffi_convenience_la_OBJECTS)
  DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
*************** INSTALL_DATA = @INSTALL_DATA@
*** 225,230 ****
--- 230,237 ----
  INSTALL_PROGRAM = @INSTALL_PROGRAM@
  INSTALL_SCRIPT = @INSTALL_SCRIPT@
  INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LIBFFI_CRIS_FALSE = @LIBFFI_CRIS_FALSE@
+ LIBFFI_CRIS_TRUE = @LIBFFI_CRIS_TRUE@
  LIBOBJS = @LIBOBJS@
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
*************** POWERPC_AIX_TRUE = @POWERPC_AIX_TRUE@
*** 257,262 ****
--- 264,271 ----
  POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
  POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
  POWERPC_FALSE = @POWERPC_FALSE@
+ POWERPC_FREEBSD_FALSE = @POWERPC_FREEBSD_FALSE@
+ POWERPC_FREEBSD_TRUE = @POWERPC_FREEBSD_TRUE@
  POWERPC_TRUE = @POWERPC_TRUE@
  RANLIB = @RANLIB@
  S390_FALSE = @S390_FALSE@
*************** build_os = @build_os@
*** 299,307 ****
  build_vendor = @build_vendor@
  datadir = @datadir@
  exec_prefix = @exec_prefix@
- gcc_version = @gcc_version@
- gcc_version_full = @gcc_version_full@
- gcc_version_trigger = @gcc_version_trigger@
  host = @host@
  host_alias = @host_alias@
  host_cpu = @host_cpu@
--- 308,313 ----
*************** target_alias = @target_alias@
*** 327,341 ****
  target_cpu = @target_cpu@
  target_os = @target_os@
  target_vendor = @target_vendor@
- tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  AUTOMAKE_OPTIONS = foreign subdir-objects
! ACLOCAL_AMFLAGS = -I .. -I ../config
  SUBDIRS = include testsuite
  EXTRA_DIST = LICENSE ChangeLog.v1 \
  	src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \
  	src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \
  	src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
  	src/mips/ffitarget.h \
  	src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \
--- 333,347 ----
  target_cpu = @target_cpu@
  target_os = @target_os@
  target_vendor = @target_vendor@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  AUTOMAKE_OPTIONS = foreign subdir-objects
! ACLOCAL_AMFLAGS = -I ..
  SUBDIRS = include testsuite
  EXTRA_DIST = LICENSE ChangeLog.v1 \
  	src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \
  	src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \
+ 	src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \
  	src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
  	src/mips/ffitarget.h \
  	src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \
*************** nodist_libffi_la_SOURCES = $(am__append_
*** 405,411 ****
  	$(am__append_9) $(am__append_10) $(am__append_11) \
  	$(am__append_12) $(am__append_13) $(am__append_14) \
  	$(am__append_15) $(am__append_16) $(am__append_17) \
! 	$(am__append_18) $(am__append_19)
  libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
  nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
  AM_CFLAGS = -Wall -g -fexceptions
--- 411,418 ----
  	$(am__append_9) $(am__append_10) $(am__append_11) \
  	$(am__append_12) $(am__append_13) $(am__append_14) \
  	$(am__append_15) $(am__append_16) $(am__append_17) \
! 	$(am__append_18) $(am__append_19) $(am__append_20) \
! 	$(am__append_21)
  libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
  nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
  AM_CFLAGS = -Wall -g -fexceptions
*************** src/arm/sysv.lo: src/arm/$(am__dirstamp)
*** 626,631 ****
--- 633,648 ----
  	src/arm/$(DEPDIR)/$(am__dirstamp)
  src/arm/ffi.lo: src/arm/$(am__dirstamp) \
  	src/arm/$(DEPDIR)/$(am__dirstamp)
+ src/cris/$(am__dirstamp):
+ 	@$(mkdir_p) src/cris
+ 	@: > src/cris/$(am__dirstamp)
+ src/cris/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) src/cris/$(DEPDIR)
+ 	@: > src/cris/$(DEPDIR)/$(am__dirstamp)
+ src/cris/sysv.lo: src/cris/$(am__dirstamp) \
+ 	src/cris/$(DEPDIR)/$(am__dirstamp)
+ src/cris/ffi.lo: src/cris/$(am__dirstamp) \
+ 	src/cris/$(DEPDIR)/$(am__dirstamp)
  src/frv/$(am__dirstamp):
  	@$(mkdir_p) src/frv
  	@: > src/frv/$(am__dirstamp)
*************** mostlyclean-compile:
*** 693,698 ****
--- 710,719 ----
  	-rm -f src/arm/ffi.lo
  	-rm -f src/arm/sysv.$(OBJEXT)
  	-rm -f src/arm/sysv.lo
+ 	-rm -f src/cris/ffi.$(OBJEXT)
+ 	-rm -f src/cris/ffi.lo
+ 	-rm -f src/cris/sysv.$(OBJEXT)
+ 	-rm -f src/cris/sysv.lo
  	-rm -f src/debug.$(OBJEXT)
  	-rm -f src/debug.lo
  	-rm -f src/frv/eabi.$(OBJEXT)
*************** distclean-compile:
*** 788,793 ****
--- 809,815 ----
  @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/types.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@src/alpha/$(DEPDIR)/ffi.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/cris/$(DEPDIR)/ffi.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@src/frv/$(DEPDIR)/ffi.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@src/ia64/$(DEPDIR)/ffi.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@src/m32r/$(DEPDIR)/ffi.Plo@am__quote@
*************** clean-libtool:
*** 844,849 ****
--- 866,872 ----
  	-rm -rf src/.libs src/_libs
  	-rm -rf src/alpha/.libs src/alpha/_libs
  	-rm -rf src/arm/.libs src/arm/_libs
+ 	-rm -rf src/cris/.libs src/cris/_libs
  	-rm -rf src/frv/.libs src/frv/_libs
  	-rm -rf src/ia64/.libs src/ia64/_libs
  	-rm -rf src/m32r/.libs src/m32r/_libs
*************** distclean-tags:
*** 1001,1007 ****
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
! 	$(mkdir_p) $(distdir)/.. $(distdir)/../config $(distdir)/include $(distdir)/src/alpha $(distdir)/src/arm $(distdir)/src/frv $(distdir)/src/m32r $(distdir)/src/m68k $(distdir)/src/mips $(distdir)/src/pa $(distdir)/src/powerpc $(distdir)/src/s390 $(distdir)/src/sh $(distdir)/src/sh64 $(distdir)/src/sparc $(distdir)/src/x86
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
--- 1024,1030 ----
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
! 	$(mkdir_p) $(distdir)/.. $(distdir)/include $(distdir)/src/alpha $(distdir)/src/arm $(distdir)/src/cris $(distdir)/src/frv $(distdir)/src/m32r $(distdir)/src/m68k $(distdir)/src/mips $(distdir)/src/pa $(distdir)/src/powerpc $(distdir)/src/s390 $(distdir)/src/sh $(distdir)/src/sh64 $(distdir)/src/sparc $(distdir)/src/x86
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
*************** distclean-generic:
*** 1174,1179 ****
--- 1197,1204 ----
  	-rm -f src/alpha/$(am__dirstamp)
  	-rm -f src/arm/$(DEPDIR)/$(am__dirstamp)
  	-rm -f src/arm/$(am__dirstamp)
+ 	-rm -f src/cris/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/cris/$(am__dirstamp)
  	-rm -f src/frv/$(DEPDIR)/$(am__dirstamp)
  	-rm -f src/frv/$(am__dirstamp)
  	-rm -f src/ia64/$(DEPDIR)/$(am__dirstamp)
*************** clean-am: clean-generic clean-libtool cl
*** 1209,1215 ****
  
  distclean: distclean-multi distclean-recursive
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
! 	-rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR)
  	-rm -f Makefile
  distclean-am: clean-am distclean-compile distclean-generic \
  	distclean-hdr distclean-libtool distclean-tags
--- 1234,1240 ----
  
  distclean: distclean-multi distclean-recursive
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
! 	-rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR)
  	-rm -f Makefile
  distclean-am: clean-am distclean-compile distclean-generic \
  	distclean-hdr distclean-libtool distclean-tags
*************** installcheck-am:
*** 1237,1243 ****
  maintainer-clean: maintainer-clean-multi maintainer-clean-recursive
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -rf $(top_srcdir)/autom4te.cache
! 	-rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR)
  	-rm -f Makefile
  maintainer-clean-am: distclean-am maintainer-clean-generic
  
--- 1262,1268 ----
  maintainer-clean: maintainer-clean-multi maintainer-clean-recursive
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -rf $(top_srcdir)/autom4te.cache
! 	-rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR)
  	-rm -f Makefile
  maintainer-clean-am: distclean-am maintainer-clean-generic
  
diff -Nrcpad gcc-4.0.2/libffi/aclocal.m4 gcc-4.1.0/libffi/aclocal.m4
*** gcc-4.0.2/libffi/aclocal.m4	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/libffi/aclocal.m4	Tue Feb 28 08:39:11 2006
*************** AC_SUBST([am__tar])
*** 1199,1205 ****
  AC_SUBST([am__untar])
  ]) # _AM_PROG_TAR
  
- m4_include([../config/accross.m4])
- m4_include([../config/gcc-version.m4])
  m4_include([../libtool.m4])
  m4_include([acinclude.m4])
--- 1199,1203 ----
diff -Nrcpad gcc-4.0.2/libffi/configure gcc-4.1.0/libffi/configure
*** gcc-4.0.2/libffi/configure	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/libffi/configure	Tue Feb 28 08:39:11 2006
*************** ac_includes_default="\
*** 310,316 ****
  # include <unistd.h>
  #endif"
  
! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CFLAGS CCAS CCASFLAGS LN_S RANLIB ac_ct_RANLIB LIBTOOL MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CPP CPPFLAGS EGREP TESTSUBDIR_TRUE TESTSUBDIR_FALSE AM_RUNTESTFLAGS MIPS_IRIX_TRUE MIPS_IRIX_FALSE MIPS_LINUX_TRUE MIPS_LINUX_FALSE SPARC_TRUE SPARC_FALSE X86_TRUE X86_FALSE X86_WIN32_TRUE X86_WIN32_FALSE ALPHA_TRUE ALPHA_FALSE IA64_TRUE IA64_FALSE M32R_TRUE M32R_FALSE M68K_TRUE M68K_FALSE POWERPC_TRUE POWERPC_FALSE POWERPC_AIX_TRUE POWERPC_AIX_FALSE POWERPC_DARWIN_TRUE POWERPC_DARWIN_FALSE ARM_TRUE ARM_FALSE FRV_TRUE FRV_FALSE S390_TRUE S390_FALSE X86_64_TRUE X86_64_FALSE SH_TRUE SH_FALSE SH64_TRUE SH64_FALSE PA_TRUE PA_FALSE ALLOCA HAVE_LONG_DOUBLE TARGET TARGETDIR toolexecdir toolexeclibdir gcc_version_trigger gcc_version_full gcc_version tool_include_dir LIBOBJS LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
--- 310,316 ----
  # include <unistd.h>
  #endif"
  
! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CFLAGS CCAS CCASFLAGS LN_S RANLIB ac_ct_RANLIB LIBTOOL MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CPP CPPFLAGS EGREP TESTSUBDIR_TRUE TESTSUBDIR_FALSE AM_RUNTESTFLAGS MIPS_IRIX_TRUE MIPS_IRIX_FALSE MIPS_LINUX_TRUE MIPS_LINUX_FALSE SPARC_TRUE SPARC_FALSE X86_TRUE X86_FALSE X86_WIN32_TRUE X86_WIN32_FALSE ALPHA_TRUE ALPHA_FALSE IA64_TRUE IA64_FALSE M32R_TRUE M32R_FALSE M68K_TRUE M68K_FALSE POWERPC_TRUE POWERPC_FALSE POWERPC_AIX_TRUE POWERPC_AIX_FALSE POWERPC_DARWIN_TRUE POWERPC_DARWIN_FALSE POWERPC_FREEBSD_TRUE POWERPC_FREEBSD_FALSE ARM_TRUE ARM_FALSE LIBFFI_CRIS_TRUE LIBFFI_CRIS_FALSE FRV_TRUE FRV_FALSE S390_TRUE S390_FALSE X86_64_TRUE X86_64_FALSE SH_TRUE SH_FALSE SH64_TRUE SH64_FALSE PA_TRUE PA_FALSE ALLOCA HAVE_LONG_DOUBLE TARGET TARGETDIR toolexecdir toolexeclibdir LIBOBJS LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
*************** deplibs_check_method=$lt_cv_deplibs_chec
*** 3516,3521 ****
--- 3516,3582 ----
  
  # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
  
+ # find the maximum length of command line arguments
+ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+ echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+ if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+     i=0
+   teststring="ABCD"
+ 
+   case $build_os in
+   msdosdjgpp*)
+     # On DJGPP, this test can blow up pretty badly due to problems in libc
+     # (any single argument exceeding 2000 bytes causes a buffer overrun
+     # during glob expansion).  Even if it were fixed, the result of this
+     # check would be larger than it should be.
+     lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+     ;;
+ 
+   cygwin* | mingw*)
+     # On Win9x/ME, this test blows up -- it succeeds, but takes
+     # about 5 minutes as the teststring grows exponentially.
+     # Worse, since 9x/ME are not pre-emptively multitasking,
+     # you end up with a "frozen" computer, even though with patience
+     # the test eventually succeeds (with a max line length of 256k).
+     # Instead, let's just punt: use the minimum linelength reported by
+     # all of the supported platforms: 8192 (on NT/2K/XP).
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
+   amigaos*)
+     # On AmigaOS with pdksh, this test takes hours, literally.
+     # So we just punt and use a minimum line length of 8192.
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
+   netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+     # This has been around since 386BSD, at least.  Likely further.
+     if test -x /sbin/sysctl; then
+       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+     elif test -x /usr/sbin/sysctl; then
+       lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+     else
+       lt_cv_sys_max_cmd_len=65536 # usable default for *BSD
+     fi
+     # And add a safety zone
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+     ;;
+   esac
+ 
+ fi
+ 
+ if test -n "$lt_cv_sys_max_cmd_len" ; then
+   echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+ echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+ else
+   echo "$as_me:$LINENO: result: none" >&5
+ echo "${ECHO_T}none" >&6
+ fi
+ 
+ 
  # Only perform the check for file, if the check method requires it
  case $deplibs_check_method in
  file_magic*)
*************** test x"$pic_mode" = xno && libtool_flags
*** 3849,3855 ****
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 3852 "configure"' > conftest.$ac_ext
    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
    (eval $ac_compile) 2>&5
    ac_status=$?
--- 3910,3916 ----
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 3913 "configure"' > conftest.$ac_ext
    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
    (eval $ac_compile) 2>&5
    ac_status=$?
*************** i*86-*-solaris*) TARGET=X86; TARGETDIR=x
*** 5322,5327 ****
--- 5383,5389 ----
  i*86-*-beos*) TARGET=X86; TARGETDIR=x86;;
  i*86-*-freebsd* | i*86-*-kfreebsd*-gnu) TARGET=X86; TARGETDIR=x86;;
  i*86-*-netbsdelf* | i*86-*-knetbsd*-gnu) TARGET=X86; TARGETDIR=x86;;
+ i*86-*-rtems*) TARGET=X86; TARGETDIR=x86;;
  i*86-*-win32*) TARGET=X86_WIN32; TARGETDIR=x86;;
  i*86-*-cygwin*) TARGET=X86_WIN32; TARGETDIR=x86;;
  i*86-*-mingw*) TARGET=X86_WIN32; TARGETDIR=x86;;
*************** frv-*-*) TARGET=FRV; TARGETDIR=frv;;
*** 5329,5334 ****
--- 5391,5397 ----
  sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;;
  sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;;
  sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;;
+ sparc*-*-rtems*) TARGET=SPARC; TARGETDIR=sparc;;
  sparc64-*-linux* | sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;;
  alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu | alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu) TARGET=ALPHA; TARGETDIR=alpha;;
  ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;;
*************** powerpc*-*-linux* | powerpc-*-sysv*) TAR
*** 5341,5353 ****
--- 5404,5421 ----
  powerpc-*-beos*) TARGET=POWERPC; TARGETDIR=powerpc;;
  powerpc-*-darwin*) TARGET=POWERPC_DARWIN; TARGETDIR=powerpc;;
  powerpc-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
+ powerpc-*-freebsd*) TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc;;
+ powerpc*-*-rtems*) TARGET=POWERPC; TARGETDIR=powerpc;;
  rs6000-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
  arm*-*-linux-*) TARGET=ARM; TARGETDIR=arm;;
  arm*-*-netbsdelf* | arm*-*-knetbsd*-gnu) TARGET=ARM; TARGETDIR=arm;;
+ arm*-*-rtems*) TARGET=ARM; TARGETDIR=arm;;
+ cris-*-*) TARGET=LIBFFI_CRIS; TARGETDIR=cris;;
  s390-*-linux-*) TARGET=S390; TARGETDIR=s390;;
  s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;;
  x86_64-*-linux* | x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) TARGET=X86_64; TARGETDIR=x86;;
  sh-*-linux* | sh[34]*-*-linux*) TARGET=SH; TARGETDIR=sh;;
+ sh-*-rtems*) TARGET=SH; TARGETDIR=sh;;
  sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
  hppa-*-linux* | parisc-*-linux*) TARGET=PA; TARGETDIR=pa;;
  esac
*************** fi
*** 5482,5487 ****
--- 5550,5565 ----
  
  
  
+ if test x$TARGET = xPOWERPC_FREEBSD; then
+   POWERPC_FREEBSD_TRUE=
+   POWERPC_FREEBSD_FALSE='#'
+ else
+   POWERPC_FREEBSD_TRUE='#'
+   POWERPC_FREEBSD_FALSE=
+ fi
+ 
+ 
+ 
  if test x$TARGET = xARM; then
    ARM_TRUE=
    ARM_FALSE='#'
*************** fi
*** 5492,5497 ****
--- 5570,5585 ----
  
  
  
+ if test x$TARGET = xLIBFFI_CRIS; then
+   LIBFFI_CRIS_TRUE=
+   LIBFFI_CRIS_FALSE='#'
+ else
+   LIBFFI_CRIS_TRUE='#'
+   LIBFFI_CRIS_FALSE=
+ fi
+ 
+ 
+ 
  if test x$TARGET = xFRV; then
    FRV_TRUE=
    FRV_FALSE='#'
*************** _ACEOF
*** 6184,6209 ****
  fi
  
  
  echo "$as_me:$LINENO: checking size of double" >&5
  echo $ECHO_N "checking size of double... $ECHO_C" >&6
  if test "${ac_cv_sizeof_double+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! #include "confdefs.h"
! #include <sys/types.h>
  
  
  int
  main ()
  {
! switch (0) case 0: case (sizeof (double) == $ac_size):;
    ;
    return 0;
  }
--- 6272,6457 ----
  fi
  
  
+ echo "$as_me:$LINENO: checking for double" >&5
+ echo $ECHO_N "checking for double... $ECHO_C" >&6
+ if test "${ac_cv_type_double+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ if ((double *) 0)
+   return 0;
+ if (sizeof (double))
+   return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_type_double=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_type_double=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_type_double" >&5
+ echo "${ECHO_T}$ac_cv_type_double" >&6
+ 
  echo "$as_me:$LINENO: checking size of double" >&5
  echo $ECHO_N "checking size of double... $ECHO_C" >&6
  if test "${ac_cv_sizeof_double+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test "$ac_cv_type_double" = yes; then
!   # The cast to unsigned long works around a bug in the HP C Compiler
!   # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
!   # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
!   # This bug is HP SR number 8606223364.
!   if test "$cross_compiling" = yes; then
!   # Depending upon the size, compute the lo and hi bounds.
! cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (double))) >= 0)];
! test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_lo=0 ac_mid=0
+   while :; do
+     cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)];
+ test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_hi=$ac_mid; break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_lo=`expr $ac_mid + 1`
+ 		    if test $ac_lo -le $ac_mid; then
+ 		      ac_lo= ac_hi=
+ 		      break
+ 		    fi
+ 		    ac_mid=`expr 2 '*' $ac_mid + 1`
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
  int
  main ()
  {
! static int test_array [1 - 2 * !(((long) (sizeof (double))) < 0)];
! test_array [0] = 0
! 
    ;
    return 0;
  }
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 6230,6280 ****
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_cv_sizeof_double=$ac_size
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   if test x$ac_cv_sizeof_double != x ; then break; fi
! done
  
  fi
  
! if test x$ac_cv_sizeof_double = x ; then
!   { { echo "$as_me:$LINENO: error: cannot determine a size for double" >&5
! echo "$as_me: error: cannot determine a size for double" >&2;}
     { (exit 1); exit 1; }; }
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5
  echo "${ECHO_T}$ac_cv_sizeof_double" >&6
- 
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_DOUBLE $ac_cv_sizeof_double
  _ACEOF
  
  
  echo "$as_me:$LINENO: checking size of long double" >&5
  echo $ECHO_N "checking size of long double... $ECHO_C" >&6
  if test "${ac_cv_sizeof_long_double+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! #include "confdefs.h"
! #include <sys/types.h>
  
  
  int
  main ()
  {
! switch (0) case 0: case (sizeof (long double) == $ac_size):;
    ;
    return 0;
  }
--- 6478,6871 ----
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_hi=-1 ac_mid=-1
!   while :; do
!     cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (double))) >= $ac_mid)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_lo=$ac_mid; break
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ 		       if test $ac_mid -le $ac_hi; then
+ 			 ac_lo= ac_hi=
+ 			 break
+ 		       fi
+ 		       ac_mid=`expr 2 '*' $ac_mid`
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   done
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_lo= ac_hi=
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ # Binary search between lo and hi bounds.
+ while test "x$ac_lo" != "x$ac_hi"; do
+   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)];
+ test_array [0] = 0
  
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_lo=`expr '(' $ac_mid ')' + 1`
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! done
! case $ac_lo in
! ?*) ac_cv_sizeof_double=$ac_lo;;
! '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute sizeof (double), 77
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; } ;;
! esac
! else
!   if test "$cross_compiling" = yes; then
!   { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; }
! else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! long longval () { return (long) (sizeof (double)); }
! unsigned long ulongval () { return (long) (sizeof (double)); }
! #include <stdio.h>
! #include <stdlib.h>
! int
! main ()
! {
! 
!   FILE *f = fopen ("conftest.val", "w");
!   if (! f)
!     exit (1);
!   if (((long) (sizeof (double))) < 0)
!     {
!       long i = longval ();
!       if (i != ((long) (sizeof (double))))
! 	exit (1);
!       fprintf (f, "%ld\n", i);
!     }
!   else
!     {
!       unsigned long i = ulongval ();
!       if (i != ((long) (sizeof (double))))
! 	exit (1);
!       fprintf (f, "%lu\n", i);
!     }
!   exit (ferror (f) || fclose (f) != 0);
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest$ac_exeext
! if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_cv_sizeof_double=`cat conftest.val`
! else
!   echo "$as_me: program exited with status $ac_status" >&5
! echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ( exit $ac_status )
! { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute sizeof (double), 77
! See \`config.log' for more details." >&2;}
     { (exit 1); exit 1; }; }
  fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ rm -f conftest.val
+ else
+   ac_cv_sizeof_double=0
+ fi
+ fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5
  echo "${ECHO_T}$ac_cv_sizeof_double" >&6
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_DOUBLE $ac_cv_sizeof_double
  _ACEOF
  
  
+ echo "$as_me:$LINENO: checking for long double" >&5
+ echo $ECHO_N "checking for long double... $ECHO_C" >&6
+ if test "${ac_cv_type_long_double+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ if ((long double *) 0)
+   return 0;
+ if (sizeof (long double))
+   return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_type_long_double=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_type_long_double=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_type_long_double" >&5
+ echo "${ECHO_T}$ac_cv_type_long_double" >&6
+ 
  echo "$as_me:$LINENO: checking size of long double" >&5
  echo $ECHO_N "checking size of long double... $ECHO_C" >&6
  if test "${ac_cv_sizeof_long_double+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test "$ac_cv_type_long_double" = yes; then
!   # The cast to unsigned long works around a bug in the HP C Compiler
!   # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
!   # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
!   # This bug is HP SR number 8606223364.
!   if test "$cross_compiling" = yes; then
!   # Depending upon the size, compute the lo and hi bounds.
! cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (long double))) >= 0)];
! test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_lo=0 ac_mid=0
+   while :; do
+     cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (long double))) <= $ac_mid)];
+ test_array [0] = 0
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_hi=$ac_mid; break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_lo=`expr $ac_mid + 1`
+ 		    if test $ac_lo -le $ac_mid; then
+ 		      ac_lo= ac_hi=
+ 		      break
+ 		    fi
+ 		    ac_mid=`expr 2 '*' $ac_mid + 1`
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
  int
  main ()
  {
! static int test_array [1 - 2 * !(((long) (sizeof (long double))) < 0)];
! test_array [0] = 0
! 
    ;
    return 0;
  }
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 6301,6326 ****
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_cv_sizeof_long_double=$ac_size
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   if test x$ac_cv_sizeof_long_double != x ; then break; fi
! done
  
  fi
  
! if test x$ac_cv_sizeof_long_double = x ; then
!   { { echo "$as_me:$LINENO: error: cannot determine a size for long double" >&5
! echo "$as_me: error: cannot determine a size for long double" >&2;}
     { (exit 1); exit 1; }; }
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_double" >&5
  echo "${ECHO_T}$ac_cv_sizeof_long_double" >&6
- 
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
  _ACEOF
--- 6892,7100 ----
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
!   ac_hi=-1 ac_mid=-1
!   while :; do
!     cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! int
! main ()
! {
! static int test_array [1 - 2 * !(((long) (sizeof (long double))) >= $ac_mid)];
! test_array [0] = 0
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_lo=$ac_mid; break
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ 		       if test $ac_mid -le $ac_hi; then
+ 			 ac_lo= ac_hi=
+ 			 break
+ 		       fi
+ 		       ac_mid=`expr 2 '*' $ac_mid`
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   done
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_lo= ac_hi=
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ # Binary search between lo and hi bounds.
+ while test "x$ac_lo" != "x$ac_hi"; do
+   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ static int test_array [1 - 2 * !(((long) (sizeof (long double))) <= $ac_mid)];
+ test_array [0] = 0
  
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_hi=$ac_mid
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_lo=`expr '(' $ac_mid ')' + 1`
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! done
! case $ac_lo in
! ?*) ac_cv_sizeof_long_double=$ac_lo;;
! '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double), 77
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute sizeof (long double), 77
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; } ;;
! esac
! else
!   if test "$cross_compiling" = yes; then
!   { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&2;}
     { (exit 1); exit 1; }; }
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ long longval () { return (long) (sizeof (long double)); }
+ unsigned long ulongval () { return (long) (sizeof (long double)); }
+ #include <stdio.h>
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ 
+   FILE *f = fopen ("conftest.val", "w");
+   if (! f)
+     exit (1);
+   if (((long) (sizeof (long double))) < 0)
+     {
+       long i = longval ();
+       if (i != ((long) (sizeof (long double))))
+ 	exit (1);
+       fprintf (f, "%ld\n", i);
+     }
+   else
+     {
+       unsigned long i = ulongval ();
+       if (i != ((long) (sizeof (long double))))
+ 	exit (1);
+       fprintf (f, "%lu\n", i);
+     }
+   exit (ferror (f) || fclose (f) != 0);
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_sizeof_long_double=`cat conftest.val`
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ( exit $ac_status )
+ { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double), 77
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot compute sizeof (long double), 77
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ rm -f conftest.val
+ else
+   ac_cv_sizeof_long_double=0
+ fi
  fi
  echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_double" >&5
  echo "${ECHO_T}$ac_cv_sizeof_long_double" >&6
  cat >>confdefs.h <<_ACEOF
  #define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
  _ACEOF
*************** echo $ECHO_N "checking whether byte orde
*** 6346,6353 ****
  if test "${ac_cv_c_bigendian+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_cv_c_bigendian=unknown
! # See if sys/param.h defines the BYTE_ORDER macro.
  cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
--- 7120,7126 ----
  if test "${ac_cv_c_bigendian+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   # See if sys/param.h defines the BYTE_ORDER macro.
  cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 6356,6368 ****
  /* end confdefs.h.  */
  #include <sys/types.h>
  #include <sys/param.h>
  int
  main ()
  {
- 
  #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
   bogus endian macros
  #endif
    ;
    return 0;
  }
--- 7129,7142 ----
  /* end confdefs.h.  */
  #include <sys/types.h>
  #include <sys/param.h>
+ 
  int
  main ()
  {
  #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
   bogus endian macros
  #endif
+ 
    ;
    return 0;
  }
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 6398,6410 ****
  /* end confdefs.h.  */
  #include <sys/types.h>
  #include <sys/param.h>
  int
  main ()
  {
- 
  #if BYTE_ORDER != BIG_ENDIAN
   not big endian
  #endif
    ;
    return 0;
  }
--- 7172,7185 ----
  /* end confdefs.h.  */
  #include <sys/types.h>
  #include <sys/param.h>
+ 
  int
  main ()
  {
  #if BYTE_ORDER != BIG_ENDIAN
   not big endian
  #endif
+ 
    ;
    return 0;
  }
*************** else
*** 6443,6453 ****
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- if test $ac_cv_c_bigendian = unknown; then
- if test "$cross_compiling" = yes; then
-    echo $ac_n "cross-compiling... " 2>&6
  else
    cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
--- 7218,7286 ----
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
+ # It does not; compile a test program.
+ if test "$cross_compiling" = yes; then
+   # try to guess the endianness by grepping values into an object file
+   ac_cv_c_bigendian=unknown
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+ short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+ int
+ main ()
+ {
+  _ascii (); _ebcdic ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+   ac_cv_c_bigendian=yes
+ fi
+ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+   if test "$ac_cv_c_bigendian" = unknown; then
+     ac_cv_c_bigendian=no
+   else
+     # finding both strings is unlikely to happen, but who knows?
+     ac_cv_c_bigendian=unknown
+   fi
+ fi
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
  fi
  rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  else
    cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
*************** _ACEOF
*** 6455,6461 ****
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! main () {
    /* Are we little or big endian?  From Harbison&Steele.  */
    union
    {
--- 7288,7296 ----
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
! int
! main ()
! {
    /* Are we little or big endian?  From Harbison&Steele.  */
    union
    {
*************** fi
*** 6489,6555 ****
  rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
  fi
  echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
  echo "${ECHO_T}$ac_cv_c_bigendian" >&6
! if test $ac_cv_c_bigendian = unknown; then
! echo "$as_me:$LINENO: checking to probe for byte ordering" >&5
! echo $ECHO_N "checking to probe for byte ordering... $ECHO_C" >&6
! 
! cat >conftest.c <<EOF
! short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
! short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
! void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; }
! short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
! short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
! void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; }
! int main() { _ascii (); _ebcdic (); return 0; }
! EOF
!  if test -f conftest.c ; then
!      if ${CC-cc} ${CFLAGS} -c conftest.c -o conftest.o && test -f conftest.o ; then
!         if test `grep -l BIGenDianSyS conftest.o` ; then
!            echo $ac_n ' big endian probe OK, ' 1>&6
!            ac_cv_c_bigendian=yes
!         fi
!         if test `grep -l LiTTleEnDian conftest.o` ; then
!            echo $ac_n ' little endian probe OK, ' 1>&6
!            if test $ac_cv_c_bigendian = yes ; then
!             ac_cv_c_bigendian=unknown;
!            else
!             ac_cv_c_bigendian=no
!            fi
!         fi
!         echo $ac_n 'guessing bigendian ...  ' >&6
!      fi
!   fi
! echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
! echo "${ECHO_T}$ac_cv_c_bigendian" >&6
! fi
! if test $ac_cv_c_bigendian = yes; then
  
  cat >>confdefs.h <<\_ACEOF
  #define WORDS_BIGENDIAN 1
  _ACEOF
! 
! 
! cat >>confdefs.h <<\_ACEOF
! #define HOST_WORDS_BIG_ENDIAN 1
! _ACEOF
! 
!   BYTEORDER=4321
! else
!   BYTEORDER=1234
! fi
! 
! cat >>confdefs.h <<_ACEOF
! #define BYTEORDER $BYTEORDER
! _ACEOF
! 
! if test $ac_cv_c_bigendian = unknown; then
!   { { echo "$as_me:$LINENO: error: unknown endianess - sorry, please pre-set ac_cv_c_bigendian" >&5
! echo "$as_me: error: unknown endianess - sorry, please pre-set ac_cv_c_bigendian" >&2;}
!    { (exit 1); exit 1; }; }
! fi
  
  
  if test x$TARGET = xSPARC; then
--- 7324,7349 ----
  rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
  echo "${ECHO_T}$ac_cv_c_bigendian" >&6
! case $ac_cv_c_bigendian in
!   yes)
  
  cat >>confdefs.h <<\_ACEOF
  #define WORDS_BIGENDIAN 1
  _ACEOF
!  ;;
!   no)
!      ;;
!   *)
!     { { echo "$as_me:$LINENO: error: unknown endianness
! presetting ac_cv_c_bigendian=no (or yes) will help" >&5
! echo "$as_me: error: unknown endianness
! presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
!    { (exit 1); exit 1; }; } ;;
! esac
  
  
  if test x$TARGET = xSPARC; then
*************** _ACEOF
*** 6728,6733 ****
--- 7522,7561 ----
  
  fi
  
+ echo "$as_me:$LINENO: checking for __attribute__((visibility(\"hidden\")))" >&5
+ echo $ECHO_N "checking for __attribute__((visibility(\"hidden\")))... $ECHO_C" >&6
+ if test "${libffi_cv_hidden_visibility_attribute+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ 
+ 	echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
+ 	libffi_cv_hidden_visibility_attribute=no
+ 	if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+ 	    if grep '\.hidden.*foo' conftest.s >/dev/null; then
+ 		libffi_cv_hidden_visibility_attribute=yes
+ 	    fi
+ 	fi
+ 	rm -f conftest.*
+ 
+ fi
+ echo "$as_me:$LINENO: result: $libffi_cv_hidden_visibility_attribute" >&5
+ echo "${ECHO_T}$libffi_cv_hidden_visibility_attribute" >&6
+ if test $libffi_cv_hidden_visibility_attribute = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1
+ _ACEOF
+ 
+ fi
+ 
+ 
+ 
+ 
  
  
  
*************** esac
*** 6797,6823 ****
  
  
  
- 
- if test "${with_gcc_version_trigger+set}" = set; then
-   gcc_version_trigger=$with_gcc_version_trigger
- else
-   gcc_version_trigger=$srcdir/../gcc/version.c
- fi
- if test -f "${gcc_version_trigger}"; then
-   gcc_version_full=`grep version_string "${gcc_version_trigger}" | sed -e 's/.*"\([^"]*\)".*/\1/'`
- else
-   gcc_version_full=`$CC -v 2>&1 | sed -n 's/^gcc version //p'`
- fi
- gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
- 
- 
- 
- 
- 
- #Figure out where generated headers like ffitarget.h get installed.
- tool_include_dir='$(libdir)/gcc/$(target_alias)/'${gcc_version}/include
- 
- 
  if test "${multilib}" = "yes"; then
    multilib_arg="--enable-multilib"
  else
--- 7625,7630 ----
*************** echo "$as_me: error: conditional \"POWER
*** 7038,7043 ****
--- 7845,7857 ----
  Usually this means the macro was only invoked conditionally." >&2;}
     { (exit 1); exit 1; }; }
  fi
+ if test -z "${POWERPC_FREEBSD_TRUE}" && test -z "${POWERPC_FREEBSD_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"POWERPC_FREEBSD\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"POWERPC_FREEBSD\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
  if test -z "${ARM_TRUE}" && test -z "${ARM_FALSE}"; then
    { { echo "$as_me:$LINENO: error: conditional \"ARM\" was never defined.
  Usually this means the macro was only invoked conditionally." >&5
*************** echo "$as_me: error: conditional \"ARM\"
*** 7045,7050 ****
--- 7859,7871 ----
  Usually this means the macro was only invoked conditionally." >&2;}
     { (exit 1); exit 1; }; }
  fi
+ if test -z "${LIBFFI_CRIS_TRUE}" && test -z "${LIBFFI_CRIS_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"LIBFFI_CRIS\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"LIBFFI_CRIS\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
  if test -z "${FRV_TRUE}" && test -z "${FRV_FALSE}"; then
    { { echo "$as_me:$LINENO: error: conditional \"FRV\" was never defined.
  Usually this means the macro was only invoked conditionally." >&5
*************** s,@POWERPC_AIX_TRUE@,$POWERPC_AIX_TRUE,;
*** 7730,7737 ****
--- 8551,8562 ----
  s,@POWERPC_AIX_FALSE@,$POWERPC_AIX_FALSE,;t t
  s,@POWERPC_DARWIN_TRUE@,$POWERPC_DARWIN_TRUE,;t t
  s,@POWERPC_DARWIN_FALSE@,$POWERPC_DARWIN_FALSE,;t t
+ s,@POWERPC_FREEBSD_TRUE@,$POWERPC_FREEBSD_TRUE,;t t
+ s,@POWERPC_FREEBSD_FALSE@,$POWERPC_FREEBSD_FALSE,;t t
  s,@ARM_TRUE@,$ARM_TRUE,;t t
  s,@ARM_FALSE@,$ARM_FALSE,;t t
+ s,@LIBFFI_CRIS_TRUE@,$LIBFFI_CRIS_TRUE,;t t
+ s,@LIBFFI_CRIS_FALSE@,$LIBFFI_CRIS_FALSE,;t t
  s,@FRV_TRUE@,$FRV_TRUE,;t t
  s,@FRV_FALSE@,$FRV_FALSE,;t t
  s,@S390_TRUE@,$S390_TRUE,;t t
*************** s,@TARGET@,$TARGET,;t t
*** 7750,7759 ****
  s,@TARGETDIR@,$TARGETDIR,;t t
  s,@toolexecdir@,$toolexecdir,;t t
  s,@toolexeclibdir@,$toolexeclibdir,;t t
- s,@gcc_version_trigger@,$gcc_version_trigger,;t t
- s,@gcc_version_full@,$gcc_version_full,;t t
- s,@gcc_version@,$gcc_version,;t t
- s,@tool_include_dir@,$tool_include_dir,;t t
  s,@LIBOBJS@,$LIBOBJS,;t t
  s,@LTLIBOBJS@,$LTLIBOBJS,;t t
  CEOF
--- 8575,8580 ----
diff -Nrcpad gcc-4.0.2/libffi/configure.ac gcc-4.1.0/libffi/configure.ac
*** gcc-4.0.2/libffi/configure.ac	Fri Aug 19 14:57:22 2005
--- gcc-4.1.0/libffi/configure.ac	Thu Aug 11 21:18:24 2005
*************** i*86-*-solaris*) TARGET=X86; TARGETDIR=x
*** 48,53 ****
--- 48,54 ----
  i*86-*-beos*) TARGET=X86; TARGETDIR=x86;;
  i*86-*-freebsd* | i*86-*-kfreebsd*-gnu) TARGET=X86; TARGETDIR=x86;;
  i*86-*-netbsdelf* | i*86-*-knetbsd*-gnu) TARGET=X86; TARGETDIR=x86;;
+ i*86-*-rtems*) TARGET=X86; TARGETDIR=x86;;
  i*86-*-win32*) TARGET=X86_WIN32; TARGETDIR=x86;;
  i*86-*-cygwin*) TARGET=X86_WIN32; TARGETDIR=x86;;
  i*86-*-mingw*) TARGET=X86_WIN32; TARGETDIR=x86;;
*************** frv-*-*) TARGET=FRV; TARGETDIR=frv;;
*** 55,60 ****
--- 56,62 ----
  sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;;
  sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;;
  sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;;
+ sparc*-*-rtems*) TARGET=SPARC; TARGETDIR=sparc;;
  sparc64-*-linux* | sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;;
  alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu | alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu) TARGET=ALPHA; TARGETDIR=alpha;;
  ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;;
*************** powerpc*-*-linux* | powerpc-*-sysv*) TAR
*** 67,79 ****
--- 69,86 ----
  powerpc-*-beos*) TARGET=POWERPC; TARGETDIR=powerpc;;
  powerpc-*-darwin*) TARGET=POWERPC_DARWIN; TARGETDIR=powerpc;;
  powerpc-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
+ powerpc-*-freebsd*) TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc;;
+ powerpc*-*-rtems*) TARGET=POWERPC; TARGETDIR=powerpc;;
  rs6000-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
  arm*-*-linux-*) TARGET=ARM; TARGETDIR=arm;;
  arm*-*-netbsdelf* | arm*-*-knetbsd*-gnu) TARGET=ARM; TARGETDIR=arm;;
+ arm*-*-rtems*) TARGET=ARM; TARGETDIR=arm;;
+ cris-*-*) TARGET=LIBFFI_CRIS; TARGETDIR=cris;;
  s390-*-linux-*) TARGET=S390; TARGETDIR=s390;;
  s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;;
  x86_64-*-linux* | x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) TARGET=X86_64; TARGETDIR=x86;;
  sh-*-linux* | sh[[34]]*-*-linux*) TARGET=SH; TARGETDIR=sh;;
+ sh-*-rtems*) TARGET=SH; TARGETDIR=sh;;
  sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
  hppa-*-linux* | parisc-*-linux*) TARGET=PA; TARGETDIR=pa;;
  esac
*************** AM_CONDITIONAL(M68K, test x$TARGET = xM6
*** 96,102 ****
--- 103,111 ----
  AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
  AM_CONDITIONAL(POWERPC_AIX, test x$TARGET = xPOWERPC_AIX)
  AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN)
+ AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD)
  AM_CONDITIONAL(ARM, test x$TARGET = xARM)
+ AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS)
  AM_CONDITIONAL(FRV, test x$TARGET = xFRV)
  AM_CONDITIONAL(S390, test x$TARGET = xS390)
  AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64)
*************** AC_HEADER_STDC
*** 113,120 ****
  AC_CHECK_FUNCS(memcpy)
  AC_FUNC_ALLOCA
  
! AC_COMPILE_CHECK_SIZEOF(double)
! AC_COMPILE_CHECK_SIZEOF(long double)
  
  # Also AC_SUBST this variable for ffi.h.
  HAVE_LONG_DOUBLE=0
--- 122,129 ----
  AC_CHECK_FUNCS(memcpy)
  AC_FUNC_ALLOCA
  
! AC_CHECK_SIZEOF(double)
! AC_CHECK_SIZEOF(long double)
  
  # Also AC_SUBST this variable for ffi.h.
  HAVE_LONG_DOUBLE=0
*************** if test $ac_cv_sizeof_double != $ac_cv_s
*** 126,132 ****
  fi
  AC_SUBST(HAVE_LONG_DOUBLE)
  
! AC_C_BIGENDIAN_CROSS
  
  if test x$TARGET = xSPARC; then
      AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs],
--- 135,141 ----
  fi
  AC_SUBST(HAVE_LONG_DOUBLE)
  
! AC_C_BIGENDIAN
  
  if test x$TARGET = xSPARC; then
      AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs],
*************** else
*** 183,188 ****
--- 192,229 ----
  	      [Define to the flags needed for the .section .eh_frame directive.])
  fi
  
+ AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
+     libffi_cv_hidden_visibility_attribute, [
+ 	echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
+ 	libffi_cv_hidden_visibility_attribute=no
+ 	if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ 	    if grep '\.hidden.*foo' conftest.s >/dev/null; then
+ 		libffi_cv_hidden_visibility_attribute=yes
+ 	    fi
+ 	fi
+ 	rm -f conftest.*
+     ])
+ if test $libffi_cv_hidden_visibility_attribute = yes; then
+     AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
+ 	      [Define if __attribute__((visibility("hidden"))) is supported.])
+ fi
+ 
+ AH_BOTTOM([
+ #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
+ #ifdef LIBFFI_ASM
+ #define FFI_HIDDEN(name) .hidden name
+ #else
+ #define FFI_HIDDEN __attribute__ ((visibility ("hidden")))
+ #endif
+ #else
+ #ifdef LIBFFI_ASM
+ #define FFI_HIDDEN(name)
+ #else
+ #define FFI_HIDDEN
+ #endif
+ #endif
+ ])
+ 
  AC_SUBST(TARGET)
  AC_SUBST(TARGETDIR)
  
*************** esac
*** 228,239 ****
  AC_SUBST(toolexecdir)
  AC_SUBST(toolexeclibdir)
  
- TL_AC_GCC_VERSION([$srcdir/..])
- 
- #Figure out where generated headers like ffitarget.h get installed.
- tool_include_dir='$(libdir)/gcc/$(target_alias)/'${gcc_version}/include
- AC_SUBST(tool_include_dir)
- 
  if test "${multilib}" = "yes"; then
    multilib_arg="--enable-multilib"
  else
--- 269,274 ----
diff -Nrcpad gcc-4.0.2/libffi/fficonfig.h.in gcc-4.1.0/libffi/fficonfig.h.in
*** gcc-4.0.2/libffi/fficonfig.h.in	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/libffi/fficonfig.h.in	Tue Feb 28 08:39:11 2006
***************
*** 1,8 ****
  /* fficonfig.h.in.  Generated from configure.ac by autoheader.  */
  
- /* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
- #undef BYTEORDER
- 
  /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
     systems. This function is required for `alloca.c' support on those systems.
     */
--- 1,5 ----
***************
*** 37,42 ****
--- 34,42 ----
     */
  #undef HAVE_AS_SPARC_UA_PCREL
  
+ /* Define if __attribute__((visibility("hidden"))) is supported. */
+ #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
+ 
  /* Define to 1 if you have the <inttypes.h> header file. */
  #undef HAVE_INTTYPES_H
  
***************
*** 88,97 ****
  /* Define to 1 if you have the <unistd.h> header file. */
  #undef HAVE_UNISTD_H
  
- /* Define if the host machine stores words of multi-word integers in
-    big-endian order. */
- #undef HOST_WORDS_BIG_ENDIAN
- 
  /* Define to 1 if your C compiler doesn't accept -c and -o together. */
  #undef NO_MINUS_C_MINUS_O
  
--- 88,93 ----
***************
*** 113,122 ****
  /* Define to the version of this package. */
  #undef PACKAGE_VERSION
  
! /* The number of bytes in type double */
  #undef SIZEOF_DOUBLE
  
! /* The number of bytes in type long double */
  #undef SIZEOF_LONG_DOUBLE
  
  /* If using the C implementation of alloca, define if you know the
--- 109,118 ----
  /* Define to the version of this package. */
  #undef PACKAGE_VERSION
  
! /* The size of a `double', as computed by sizeof. */
  #undef SIZEOF_DOUBLE
  
! /* The size of a `long double', as computed by sizeof. */
  #undef SIZEOF_LONG_DOUBLE
  
  /* If using the C implementation of alloca, define if you know the
***************
*** 137,141 ****
  /* Version number of package */
  #undef VERSION
  
! /* whether byteorder is bigendian */
  #undef WORDS_BIGENDIAN
--- 133,154 ----
  /* Version number of package */
  #undef VERSION
  
! /* Define to 1 if your processor stores words with the most significant byte
!    first (like Motorola and SPARC, unlike Intel and VAX). */
  #undef WORDS_BIGENDIAN
+ 
+ 
+ #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
+ #ifdef LIBFFI_ASM
+ #define FFI_HIDDEN(name) .hidden name
+ #else
+ #define FFI_HIDDEN __attribute__ ((visibility ("hidden")))
+ #endif
+ #else
+ #ifdef LIBFFI_ASM
+ #define FFI_HIDDEN(name)
+ #else
+ #define FFI_HIDDEN
+ #endif
+ #endif
+ 
diff -Nrcpad gcc-4.0.2/libffi/include/Makefile.am gcc-4.1.0/libffi/include/Makefile.am
*** gcc-4.0.2/libffi/include/Makefile.am	Wed Nov 12 18:18:30 2003
--- gcc-4.1.0/libffi/include/Makefile.am	Mon Mar 21 18:01:47 2005
*************** hackdir=$(includedir)
*** 9,13 ****
  
  hack_DATA= ffi.h
  
! toollibffidir = @tool_include_dir@/libffi
  toollibffi_HEADERS = ffitarget.h
--- 9,16 ----
  
  hack_DATA= ffi.h
  
! # Where generated headers like ffitarget.h get installed.
! gcc_version   := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
! toollibffidir := $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/libffi
! 
  toollibffi_HEADERS = ffitarget.h
diff -Nrcpad gcc-4.0.2/libffi/include/Makefile.in gcc-4.1.0/libffi/include/Makefile.in
*** gcc-4.0.2/libffi/include/Makefile.in	Thu Dec  2 11:05:08 2004
--- gcc-4.1.0/libffi/include/Makefile.in	Tue Jul 19 21:15:36 2005
*************** subdir = include
*** 42,51 ****
  DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
  	$(srcdir)/ffi.h.in $(toollibffi_HEADERS)
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/../config/accross.m4 \
! 	$(top_srcdir)/../config/gcc-version.m4 \
! 	$(top_srcdir)/../libtool.m4 $(top_srcdir)/acinclude.m4 \
! 	$(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
--- 42,49 ----
  DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
  	$(srcdir)/ffi.h.in $(toollibffi_HEADERS)
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
! 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
*************** INSTALL_DATA = @INSTALL_DATA@
*** 105,110 ****
--- 103,110 ----
  INSTALL_PROGRAM = @INSTALL_PROGRAM@
  INSTALL_SCRIPT = @INSTALL_SCRIPT@
  INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LIBFFI_CRIS_FALSE = @LIBFFI_CRIS_FALSE@
+ LIBFFI_CRIS_TRUE = @LIBFFI_CRIS_TRUE@
  LIBOBJS = @LIBOBJS@
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
*************** POWERPC_AIX_TRUE = @POWERPC_AIX_TRUE@
*** 137,142 ****
--- 137,144 ----
  POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
  POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
  POWERPC_FALSE = @POWERPC_FALSE@
+ POWERPC_FREEBSD_FALSE = @POWERPC_FREEBSD_FALSE@
+ POWERPC_FREEBSD_TRUE = @POWERPC_FREEBSD_TRUE@
  POWERPC_TRUE = @POWERPC_TRUE@
  RANLIB = @RANLIB@
  S390_FALSE = @S390_FALSE@
*************** build_os = @build_os@
*** 179,187 ****
  build_vendor = @build_vendor@
  datadir = @datadir@
  exec_prefix = @exec_prefix@
- gcc_version = @gcc_version@
- gcc_version_full = @gcc_version_full@
- gcc_version_trigger = @gcc_version_trigger@
  host = @host@
  host_alias = @host_alias@
  host_cpu = @host_cpu@
--- 181,186 ----
*************** target_alias = @target_alias@
*** 207,213 ****
  target_cpu = @target_cpu@
  target_os = @target_os@
  target_vendor = @target_vendor@
- tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  AUTOMAKE_OPTIONS = foreign
--- 206,211 ----
*************** DISTCLEANFILES = ffitarget.h
*** 215,221 ****
  EXTRA_DIST = ffi.h.in ffi_common.h
  hackdir = $(includedir)
  hack_DATA = ffi.h
! toollibffidir = @tool_include_dir@/libffi
  toollibffi_HEADERS = ffitarget.h
  all: all-am
  
--- 213,222 ----
  EXTRA_DIST = ffi.h.in ffi_common.h
  hackdir = $(includedir)
  hack_DATA = ffi.h
! 
! # Where generated headers like ffitarget.h get installed.
! gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
! toollibffidir := $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/libffi
  toollibffi_HEADERS = ffitarget.h
  all: all-am
  
diff -Nrcpad gcc-4.0.2/libffi/src/cris/ffi.c gcc-4.1.0/libffi/src/cris/ffi.c
*** gcc-4.0.2/libffi/src/cris/ffi.c	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libffi/src/cris/ffi.c	Mon Apr 18 17:08:58 2005
***************
*** 0 ****
--- 1,381 ----
+ /* -----------------------------------------------------------------------
+    ffi.c - Copyright (c) 1998 Cygnus Solutions
+            Copyright (c) 2004 Simon Posnjak
+ 	   Copyright (c) 2005 Axis Communications AB
+ 
+    CRIS Foreign Function Interface
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+ 
+    The above copyright notice and this permission notice shall be included
+    in all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+    IN NO EVENT SHALL SIMON POSNJAK BE LIABLE FOR ANY CLAIM, DAMAGES OR
+    OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+    ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+    ----------------------------------------------------------------------- */
+ 
+ #include <ffi.h>
+ #include <ffi_common.h>
+ 
+ #define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG)
+ 
+ static ffi_status
+ initialize_aggregate_packed_struct (ffi_type * arg)
+ {
+   ffi_type **ptr;
+ 
+   FFI_ASSERT (arg != NULL);
+ 
+   FFI_ASSERT (arg->elements != NULL);
+   FFI_ASSERT (arg->size == 0);
+   FFI_ASSERT (arg->alignment == 0);
+ 
+   ptr = &(arg->elements[0]);
+ 
+   while ((*ptr) != NULL)
+     {
+       if (((*ptr)->size == 0)
+ 	  && (initialize_aggregate_packed_struct ((*ptr)) != FFI_OK))
+ 	return FFI_BAD_TYPEDEF;
+ 
+       FFI_ASSERT (ffi_type_test ((*ptr)));
+ 
+       arg->size += (*ptr)->size;
+ 
+       arg->alignment = (arg->alignment > (*ptr)->alignment) ?
+ 	arg->alignment : (*ptr)->alignment;
+ 
+       ptr++;
+     }
+ 
+   if (arg->size == 0)
+     return FFI_BAD_TYPEDEF;
+   else
+     return FFI_OK;
+ }
+ 
+ int
+ ffi_prep_args (char *stack, extended_cif * ecif)
+ {
+   unsigned int i;
+   unsigned int struct_count = 0;
+   void **p_argv;
+   char *argp;
+   ffi_type **p_arg;
+ 
+   argp = stack;
+ 
+   p_argv = ecif->avalue;
+ 
+   for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
+        (i != 0); i--, p_arg++)
+     {
+       size_t z;
+ 
+       switch ((*p_arg)->type)
+ 	{
+ 	case FFI_TYPE_STRUCT:
+ 	  {
+ 	    z = (*p_arg)->size;
+ 	    if (z <= 4)
+ 	      {
+ 		memcpy (argp, *p_argv, z);
+ 		z = 4;
+ 	      }
+ 	    else if (z <= 8)
+ 	      {
+ 		memcpy (argp, *p_argv, z);
+ 		z = 8;
+ 	      }
+ 	    else
+ 	      {
+ 		unsigned int uiLocOnStack;
+ 		z = sizeof (void *);
+ 		uiLocOnStack = 4 * ecif->cif->nargs + struct_count;
+ 		struct_count = struct_count + (*p_arg)->size;
+ 		*(unsigned int *) argp =
+ 		  (unsigned int) (UINT32 *) (stack + uiLocOnStack);
+ 		memcpy ((stack + uiLocOnStack), *p_argv, (*p_arg)->size);
+ 	      }
+ 	    break;
+ 	  }
+ 	default:
+ 	  z = (*p_arg)->size;
+ 	  if (z < sizeof (int))
+ 	    {
+ 	      switch ((*p_arg)->type)
+ 		{
+ 		case FFI_TYPE_SINT8:
+ 		  *(signed int *) argp = (signed int) *(SINT8 *) (*p_argv);
+ 		  break;
+ 
+ 		case FFI_TYPE_UINT8:
+ 		  *(unsigned int *) argp =
+ 		    (unsigned int) *(UINT8 *) (*p_argv);
+ 		  break;
+ 
+ 		case FFI_TYPE_SINT16:
+ 		  *(signed int *) argp = (signed int) *(SINT16 *) (*p_argv);
+ 		  break;
+ 
+ 		case FFI_TYPE_UINT16:
+ 		  *(unsigned int *) argp =
+ 		    (unsigned int) *(UINT16 *) (*p_argv);
+ 		  break;
+ 
+ 		default:
+ 		  FFI_ASSERT (0);
+ 		}
+ 	      z = sizeof (int);
+ 	    }
+ 	  else if (z == sizeof (int))
+ 	    *(unsigned int *) argp = (unsigned int) *(UINT32 *) (*p_argv);
+ 	  else
+ 	    memcpy (argp, *p_argv, z);
+ 	  break;
+ 	}
+       p_argv++;
+       argp += z;
+     }
+ 
+   return (struct_count);
+ }
+ 
+ ffi_status
+ ffi_prep_cif (ffi_cif * cif,
+ 	      ffi_abi abi, unsigned int nargs,
+ 	      ffi_type * rtype, ffi_type ** atypes)
+ {
+   unsigned bytes = 0;
+   unsigned int i;
+   ffi_type **ptr;
+ 
+   FFI_ASSERT (cif != NULL);
+   FFI_ASSERT ((abi > FFI_FIRST_ABI) && (abi <= FFI_DEFAULT_ABI));
+ 
+   cif->abi = abi;
+   cif->arg_types = atypes;
+   cif->nargs = nargs;
+   cif->rtype = rtype;
+ 
+   cif->flags = 0;
+ 
+   if ((cif->rtype->size == 0)
+       && (initialize_aggregate_packed_struct (cif->rtype) != FFI_OK))
+     return FFI_BAD_TYPEDEF;
+ 
+   FFI_ASSERT_VALID_TYPE (cif->rtype);
+ 
+   for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
+     {
+       if (((*ptr)->size == 0)
+ 	  && (initialize_aggregate_packed_struct ((*ptr)) != FFI_OK))
+ 	return FFI_BAD_TYPEDEF;
+ 
+       FFI_ASSERT_VALID_TYPE (*ptr);
+ 
+       if (((*ptr)->alignment - 1) & bytes)
+ 	bytes = ALIGN (bytes, (*ptr)->alignment);
+       if ((*ptr)->type == FFI_TYPE_STRUCT)
+ 	{
+ 	  if ((*ptr)->size > 8)
+ 	    {
+ 	      bytes += (*ptr)->size;
+ 	      bytes += sizeof (void *);
+ 	    }
+ 	  else
+ 	    {
+ 	      if ((*ptr)->size > 4)
+ 		bytes += 8;
+ 	      else
+ 		bytes += 4;
+ 	    }
+ 	}
+       else
+ 	bytes += STACK_ARG_SIZE ((*ptr)->size);
+     }
+ 
+   cif->bytes = bytes;
+ 
+   return ffi_prep_cif_machdep (cif);
+ }
+ 
+ ffi_status
+ ffi_prep_cif_machdep (ffi_cif * cif)
+ {
+   switch (cif->rtype->type)
+     {
+     case FFI_TYPE_VOID:
+     case FFI_TYPE_STRUCT:
+     case FFI_TYPE_FLOAT:
+     case FFI_TYPE_DOUBLE:
+     case FFI_TYPE_SINT64:
+     case FFI_TYPE_UINT64:
+       cif->flags = (unsigned) cif->rtype->type;
+       break;
+ 
+     default:
+       cif->flags = FFI_TYPE_INT;
+       break;
+     }
+ 
+   return FFI_OK;
+ }
+ 
+ extern void ffi_call_SYSV (int (*)(char *, extended_cif *),
+ 			   extended_cif *,
+ 			   unsigned, unsigned, unsigned *, void (*fn) ())
+      __attribute__ ((__visibility__ ("hidden")));
+ 
+ void
+ ffi_call (ffi_cif * cif, void (*fn) (), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+ 
+   ecif.cif = cif;
+   ecif.avalue = avalue;
+ 
+   if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+       ecif.rvalue = alloca (cif->rtype->size);
+     }
+   else
+     ecif.rvalue = rvalue;
+ 
+   switch (cif->abi)
+     {
+     case FFI_SYSV:
+       ffi_call_SYSV (ffi_prep_args, &ecif, cif->bytes,
+ 		     cif->flags, ecif.rvalue, fn);
+       break;
+     default:
+       FFI_ASSERT (0);
+       break;
+     }
+ }
+ 
+ /* Because the following variables are not exported outside libffi, we
+    mark them hidden.  */
+ 
+ /* Assembly code for the jump stub.  */
+ extern const char ffi_cris_trampoline_template[]
+  __attribute__ ((__visibility__ ("hidden")));
+ 
+ /* Offset into ffi_cris_trampoline_template of where to put the
+    ffi_prep_closure_inner function.  */
+ extern const int ffi_cris_trampoline_fn_offset
+  __attribute__ ((__visibility__ ("hidden")));
+ 
+ /* Offset into ffi_cris_trampoline_template of where to put the
+    closure data.  */
+ extern const int ffi_cris_trampoline_closure_offset
+  __attribute__ ((__visibility__ ("hidden")));
+ 
+ /* This function is sibling-called (jumped to) by the closure
+    trampoline.  We get R10..R13 at PARAMS[0..3] and a copy of [SP] at
+    PARAMS[4] to simplify handling of a straddling parameter.  A copy
+    of R9 is at PARAMS[5] and SP at PARAMS[6].  These parameters are
+    put at the appropriate place in CLOSURE which is then executed and
+    the return value is passed back to the caller.  */
+ 
+ static unsigned long long
+ ffi_prep_closure_inner (void **params, ffi_closure* closure)
+ {
+   char *register_args = (char *) params;
+   void *struct_ret = params[5];
+   char *stack_args = params[6];
+   char *ptr = register_args;
+   ffi_cif *cif = closure->cif;
+   ffi_type **arg_types = cif->arg_types;
+ 
+   /* Max room needed is number of arguments as 64-bit values.  */
+   void **avalue = alloca (closure->cif->nargs * sizeof(void *));
+   int i;
+   int doing_regs;
+   long long llret = 0;
+ 
+   /* Find the address of each argument.  */
+   for (i = 0, doing_regs = 1; i < cif->nargs; i++)
+     {
+       /* Types up to and including 8 bytes go by-value.  */
+       if (arg_types[i]->size <= 4)
+ 	{
+ 	  avalue[i] = ptr;
+ 	  ptr += 4;
+ 	}
+       else if (arg_types[i]->size <= 8)
+ 	{
+ 	  avalue[i] = ptr;
+ 	  ptr += 8;
+ 	}
+       else
+ 	{
+ 	  FFI_ASSERT (arg_types[i]->type == FFI_TYPE_STRUCT);
+ 
+ 	  /* Passed by-reference, so copy the pointer.  */
+ 	  avalue[i] = *(void **) ptr;
+ 	  ptr += 4;
+ 	}
+ 
+       /* If we've handled more arguments than fit in registers, start
+ 	 looking at the those passed on the stack.  Step over the
+ 	 first one if we had a straddling parameter.  */
+       if (doing_regs && ptr >= register_args + 4*4)
+ 	{
+ 	  ptr = stack_args + ((ptr > register_args + 4*4) ? 4 : 0);
+ 	  doing_regs = 0;
+ 	}
+     }
+ 
+   /* Invoke the closure.  */
+   (closure->fun) (cif,
+ 
+ 		  cif->rtype->type == FFI_TYPE_STRUCT
+ 		  /* The caller allocated space for the return
+ 		     structure, and passed a pointer to this space in
+ 		     R9.  */
+ 		  ? struct_ret
+ 
+ 		  /* We take advantage of being able to ignore that
+ 		     the high part isn't set if the return value is
+ 		     not in R10:R11, but in R10 only.  */
+ 		  : (void *) &llret,
+ 
+ 		  avalue, closure->user_data);
+ 
+   return llret;
+ }
+ 
+ /* API function: Prepare the trampoline.  */
+ 
+ ffi_status
+ ffi_prep_closure (ffi_closure* closure,
+ 		  ffi_cif* cif,
+ 		  void (*fun)(ffi_cif *, void *, void **, void*),
+ 		  void *user_data)
+ {
+   void *innerfn = ffi_prep_closure_inner;
+   FFI_ASSERT (cif->abi == FFI_SYSV);
+   closure->cif  = cif;
+   closure->user_data = user_data;
+   closure->fun  = fun;
+   memcpy (closure->tramp, ffi_cris_trampoline_template,
+ 	  FFI_CRIS_TRAMPOLINE_CODE_PART_SIZE);
+   memcpy (closure->tramp + ffi_cris_trampoline_fn_offset,
+ 	  &innerfn, sizeof (void *));
+   memcpy (closure->tramp + ffi_cris_trampoline_closure_offset,
+ 	  &closure, sizeof (void *));
+ 
+   return FFI_OK;
+ }
diff -Nrcpad gcc-4.0.2/libffi/src/cris/ffitarget.h gcc-4.1.0/libffi/src/cris/ffitarget.h
*** gcc-4.0.2/libffi/src/cris/ffitarget.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libffi/src/cris/ffitarget.h	Mon Apr 18 17:08:58 2005
***************
*** 0 ****
--- 1,50 ----
+ /* -----------------------------------------------------------------*-C-*-
+    ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for CRIS.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+ 
+    The above copyright notice and this permission notice shall be included
+    in all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+    IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+    OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+    ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+   FFI_SYSV,
+   FFI_DEFAULT_ABI = FFI_SYSV,
+   FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
+ } ffi_abi;
+ #endif
+ 
+ /* ---- Definitions for closures ----------------------------------------- */
+ 
+ #define FFI_CLOSURES 1
+ #define FFI_CRIS_TRAMPOLINE_CODE_PART_SIZE 36
+ #define FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE (7*4)
+ #define FFI_TRAMPOLINE_SIZE \
+  (FFI_CRIS_TRAMPOLINE_CODE_PART_SIZE + FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE)
+ #define FFI_NATIVE_RAW_API 0
+ 
+ #endif
diff -Nrcpad gcc-4.0.2/libffi/src/cris/sysv.S gcc-4.1.0/libffi/src/cris/sysv.S
*** gcc-4.0.2/libffi/src/cris/sysv.S	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libffi/src/cris/sysv.S	Mon Apr 18 17:08:58 2005
***************
*** 0 ****
--- 1,215 ----
+ /* -----------------------------------------------------------------------
+    sysv.S - Copyright (c) 2004 Simon Posnjak
+ 	    Copyright (c) 2005 Axis Communications AB
+ 
+    CRIS Foreign Function Interface
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+ 
+    The above copyright notice and this permission notice shall be included
+    in all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+    IN NO EVENT SHALL SIMON POSNJAK BE LIABLE FOR ANY CLAIM, DAMAGES OR
+    OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+    ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+    ----------------------------------------------------------------------- */
+ 
+ #define LIBFFI_ASM
+ #include <ffi.h>
+ #define CONCAT(x,y) x ## y
+ #define XCONCAT(x,y) CONCAT (x, y)
+ #define L(x) XCONCAT (__USER_LABEL_PREFIX__, x)
+ 
+ 	.text
+ 
+ 	;; OK, when we get called we should have this (according to
+ 	;; AXIS ETRAX 100LX Programmer's Manual chapter 6.3).
+ 	;;
+ 	;; R10:	 ffi_prep_args (func. pointer)
+ 	;; R11:  &ecif
+ 	;; R12:  cif->bytes
+ 	;; R13:  fig->flags
+ 	;; sp+0: ecif.rvalue
+ 	;; sp+4: fn (function pointer to the function that we need to call)
+ 
+ 	.globl  L(ffi_call_SYSV)
+ 	.type   L(ffi_call_SYSV),@function
+ 	.hidden	L(ffi_call_SYSV)
+ 
+ L(ffi_call_SYSV):
+ 	;; Save the regs to the stack.
+ 	push $srp
+ 	;; Used for stack pointer saving.
+ 	push $r6
+ 	;; Used for function address pointer.
+ 	push $r7
+ 	;; Used for stack pointer saving.
+ 	push $r8
+ 	;; We save fig->flags to stack we will need them after we
+ 	;; call The Function.
+ 	push $r13
+ 
+ 	;; Saving current stack pointer.
+ 	move.d $sp,$r8
+ 	move.d $sp,$r6
+ 
+ 	;; Move address of ffi_prep_args to r13.
+ 	move.d $r10,$r13
+ 
+ 	;; Make room on the stack for the args of fn.
+ 	sub.d  $r12,$sp
+ 
+ 	;; Function void ffi_prep_args(char *stack, extended_cif *ecif) parameters are:
+ 	;; 	r10 <-- stack pointer
+ 	;; 	r11 <-- &ecif (already there)
+ 	move.d $sp,$r10
+ 
+ 	;; Call the function.
+ 	jsr $r13
+ 
+ 	;; Save the size of the structures which are passed on stack.
+ 	move.d $r10,$r7
+ 
+ 	;; Move first four args in to r10..r13.
+ 	move.d [$sp+0],$r10
+ 	move.d [$sp+4],$r11
+ 	move.d [$sp+8],$r12
+ 	move.d [$sp+12],$r13
+ 
+ 	;; Adjust the stack and check if any parameters are given on stack.
+ 	addq 16,$sp
+ 	sub.d $r7,$r6
+ 	cmp.d $sp,$r6
+ 
+ 	bpl go_on
+ 	nop
+ 
+ go_on_no_params_on_stack:
+ 	move.d $r6,$sp
+ 
+ go_on:
+ 	;; Discover if we need to put rval address in to r9.
+ 	move.d [$r8+0],$r7
+ 	cmpq FFI_TYPE_STRUCT,$r7
+ 	bne call_now
+ 	nop
+ 
+ 	;; Move rval address to $r9.
+ 	move.d [$r8+20],$r9
+ 
+ call_now:
+ 	;; Move address of The Function in to r7.
+ 	move.d [$r8+24],$r7
+ 
+ 	;; Call The Function.
+ 	jsr $r7
+ 
+ 	;; Reset stack.
+ 	move.d $r8,$sp
+ 
+ 	;; Load rval type (fig->flags) in to r13.
+ 	pop $r13
+ 
+ 	;; Detect rval type.
+ 	cmpq FFI_TYPE_VOID,$r13
+ 	beq epilogue
+ 
+ 	cmpq FFI_TYPE_STRUCT,$r13
+ 	beq epilogue
+ 
+ 	cmpq FFI_TYPE_DOUBLE,$r13
+ 	beq return_double_or_longlong
+ 
+ 	cmpq FFI_TYPE_UINT64,$r13
+ 	beq return_double_or_longlong
+ 
+ 	cmpq FFI_TYPE_SINT64,$r13
+ 	beq return_double_or_longlong
+ 	nop
+ 
+ 	;; Just return the 32 bit value.
+ 	ba return
+ 	nop
+ 
+ return_double_or_longlong:
+ 	;; Load half of the rval to r10 and the other half to r11.
+ 	move.d [$sp+16],$r13
+ 	move.d $r10,[$r13]
+ 	addq 4,$r13
+ 	move.d $r11,[$r13]
+ 	ba epilogue
+ 	nop
+ 
+ return:
+ 	;; Load the rval to r10.
+ 	move.d [$sp+16],$r13
+ 	move.d $r10,[$r13]
+ 
+ epilogue:
+ 	pop $r8
+ 	pop $r7
+ 	pop $r6
+ 	Jump [$sp+]
+ 
+ 	.size   ffi_call_SYSV,.-ffi_call_SYSV
+ 
+ /* Save R10..R13 into an array, somewhat like varargs.  Copy the next
+    argument too, to simplify handling of any straddling parameter.
+    Save R9 and SP after those.  Jump to function handling the rest.
+    Since this is a template, copied and the main function filled in by
+    the user.  */
+ 
+ 	.globl	L(ffi_cris_trampoline_template)
+ 	.type	L(ffi_cris_trampoline_template),@function
+ 	.hidden	L(ffi_cris_trampoline_template)
+ 
+ L(ffi_cris_trampoline_template):
+ 0:
+ 	/* The value we get for "PC" is right after the prefix instruction,
+ 	   two bytes from the beginning, i.e. 0b+2. */
+ 	move.d $r10,[$pc+2f-(0b+2)]
+ 	move.d $pc,$r10
+ 1:
+ 	addq 2f-1b+4,$r10
+ 	move.d $r11,[$r10+]
+ 	move.d $r12,[$r10+]
+ 	move.d $r13,[$r10+]
+ 	move.d [$sp],$r11
+ 	move.d $r11,[$r10+]
+ 	move.d $r9,[$r10+]
+ 	move.d $sp,[$r10+]
+ 	subq FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE,$r10
+ 	move.d 0,$r11
+ 3:
+         jump 0
+ 2:
+ 	.size	ffi_cris_trampoline_template,.-0b
+ 
+ /* This macro create a constant usable as "extern const int \name" in
+    C from within libffi, when \name has no prefix decoration.  */
+ 
+ 	.macro const name,value
+ 	.globl	\name
+ 	.type	\name,@object
+ 	.hidden	\name
+ \name:
+ 	.dword  \value
+ 	.size	\name,4
+ 	.endm
+ 
+ /* Constants for offsets within the trampoline.  We could do this with
+    just symbols, avoiding memory contents and memory accesses, but the
+    C usage code would look a bit stranger.  */
+ 
+ 	const L(ffi_cris_trampoline_fn_offset),2b-4-0b
+ 	const L(ffi_cris_trampoline_closure_offset),3b-4-0b
diff -Nrcpad gcc-4.0.2/libffi/src/ia64/ffitarget.h gcc-4.1.0/libffi/src/ia64/ffitarget.h
*** gcc-4.0.2/libffi/src/ia64/ffitarget.h	Fri Dec 31 20:11:17 2004
--- gcc-4.1.0/libffi/src/ia64/ffitarget.h	Thu Mar 31 01:22:46 2005
***************
*** 27,34 ****
  #define LIBFFI_TARGET_H
  
  #ifndef LIBFFI_ASM
! typedef unsigned long          ffi_arg;
! typedef signed long            ffi_sarg;
  
  typedef enum ffi_abi {
    FFI_FIRST_ABI = 0,
--- 27,34 ----
  #define LIBFFI_TARGET_H
  
  #ifndef LIBFFI_ASM
! typedef unsigned long long          ffi_arg;
! typedef signed long long            ffi_sarg;
  
  typedef enum ffi_abi {
    FFI_FIRST_ABI = 0,
diff -Nrcpad gcc-4.0.2/libffi/src/ia64/unix.S gcc-4.1.0/libffi/src/ia64/unix.S
*** gcc-4.0.2/libffi/src/ia64/unix.S	Fri Dec 31 20:11:17 2004
--- gcc-4.1.0/libffi/src/ia64/unix.S	Wed Mar 30 21:49:19 2005
*************** ffi_closure_unix:
*** 290,297 ****
--- 290,302 ----
  	.body
  
  	/* Retrieve closure pointer and real gp.  */
+ #ifdef _ILP32
+ 	addp4	out0 = 0, gp
+ 	addp4	gp = 16, gp
+ #else
  	mov	out0 = gp
  	add	gp = 16, gp
+ #endif
  	;;
  	ld8	gp = [gp]
  
*************** ffi_closure_unix:
*** 368,398 ****
  	add	sp = FRAME_SIZE, sp
  	br.ret.sptk.many b0
  	;;
! .Lld_int8:
! 	.body
! 	.copy_state 1
! 	ld1	r8 = [r16]
! 	.restore sp
! 	add	sp = FRAME_SIZE, sp
! 	br.ret.sptk.many b0
! 	;;
! .Lld_int16:
! 	.body
! 	.copy_state 1
! 	ld2	r8 = [r16]
! 	.restore sp
! 	add	sp = FRAME_SIZE, sp
! 	br.ret.sptk.many b0
! 	;;
! .Lld_int32:
! 	.body
! 	.copy_state 1
! 	ld4	r8 = [r16]
! 	.restore sp
! 	add	sp = FRAME_SIZE, sp
! 	br.ret.sptk.many b0
! 	;;
! .Lld_int64:
  	.body
  	.copy_state 1
  	ld8	r8 = [r16]
--- 373,379 ----
  	add	sp = FRAME_SIZE, sp
  	br.ret.sptk.many b0
  	;;
! .Lld_int:
  	.body
  	.copy_state 1
  	ld8	r8 = [r16]
*************** ffi_closure_unix:
*** 554,573 ****
  
  .Lld_table:
  	data8	@pcrel(.Lld_void)		// FFI_TYPE_VOID
! 	data8	@pcrel(.Lld_int32)		// FFI_TYPE_INT
  	data8	@pcrel(.Lld_float)		// FFI_TYPE_FLOAT
  	data8	@pcrel(.Lld_double)		// FFI_TYPE_DOUBLE
  	data8	@pcrel(.Lld_ldouble)		// FFI_TYPE_LONGDOUBLE
! 	data8	@pcrel(.Lld_int8)		// FFI_TYPE_UINT8
! 	data8	@pcrel(.Lld_int8)		// FFI_TYPE_SINT8
! 	data8	@pcrel(.Lld_int16)		// FFI_TYPE_UINT16
! 	data8	@pcrel(.Lld_int16)		// FFI_TYPE_SINT16
! 	data8	@pcrel(.Lld_int32)		// FFI_TYPE_UINT32
! 	data8	@pcrel(.Lld_int32)		// FFI_TYPE_SINT32
! 	data8	@pcrel(.Lld_int64)		// FFI_TYPE_UINT64
! 	data8	@pcrel(.Lld_int64)		// FFI_TYPE_SINT64
  	data8	@pcrel(.Lld_void)		// FFI_TYPE_STRUCT
! 	data8	@pcrel(.Lld_int64)		// FFI_TYPE_POINTER
  	data8 	@pcrel(.Lld_small_struct)	// FFI_IA64_TYPE_SMALL_STRUCT
  	data8	@pcrel(.Lld_hfa_float)		// FFI_IA64_TYPE_HFA_FLOAT
  	data8	@pcrel(.Lld_hfa_double)		// FFI_IA64_TYPE_HFA_DOUBLE
--- 535,554 ----
  
  .Lld_table:
  	data8	@pcrel(.Lld_void)		// FFI_TYPE_VOID
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_INT
  	data8	@pcrel(.Lld_float)		// FFI_TYPE_FLOAT
  	data8	@pcrel(.Lld_double)		// FFI_TYPE_DOUBLE
  	data8	@pcrel(.Lld_ldouble)		// FFI_TYPE_LONGDOUBLE
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_UINT8
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_SINT8
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_UINT16
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_SINT16
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_UINT32
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_SINT32
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_UINT64
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_SINT64
  	data8	@pcrel(.Lld_void)		// FFI_TYPE_STRUCT
! 	data8	@pcrel(.Lld_int)		// FFI_TYPE_POINTER
  	data8 	@pcrel(.Lld_small_struct)	// FFI_IA64_TYPE_SMALL_STRUCT
  	data8	@pcrel(.Lld_hfa_float)		// FFI_IA64_TYPE_HFA_FLOAT
  	data8	@pcrel(.Lld_hfa_double)		// FFI_IA64_TYPE_HFA_DOUBLE
diff -Nrcpad gcc-4.0.2/libffi/src/mips/ffi.c gcc-4.1.0/libffi/src/mips/ffi.c
*** gcc-4.0.2/libffi/src/mips/ffi.c	Mon Aug 23 16:49:17 2004
--- gcc-4.1.0/libffi/src/mips/ffi.c	Wed Dec  7 14:58:27 2005
*************** static void ffi_prep_args(char *stack, 
*** 50,66 ****
  			  int bytes,
  			  int flags)
  {
!   register int i;
!   register void **p_argv;
!   register char *argp;
!   register ffi_type **p_arg;
  
  #if _MIPS_SIM == _ABIN32
    /* If more than 8 double words are used, the remainder go
       on the stack. We reorder stuff on the stack here to 
       support this easily. */
!   if (bytes > 8 * FFI_SIZEOF_ARG)
!     argp = &stack[bytes - (8 * FFI_SIZEOF_ARG)];
    else
      argp = stack;
  #else
--- 50,66 ----
  			  int bytes,
  			  int flags)
  {
!   int i;
!   void **p_argv;
!   char *argp;
!   ffi_type **p_arg;
  
  #if _MIPS_SIM == _ABIN32
    /* If more than 8 double words are used, the remainder go
       on the stack. We reorder stuff on the stack here to 
       support this easily. */
!   if (bytes > 8 * sizeof(ffi_arg))
!     argp = &stack[bytes - (8 * sizeof(ffi_arg))];
    else
      argp = stack;
  #else
*************** static void ffi_prep_args(char *stack, 
*** 85,186 ****
    for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i; i--, p_arg++)
      {
        size_t z;
!       unsigned short a;
  
!       /* Align if necessary */
        a = (*p_arg)->alignment;
!       if (a < FFI_SIZEOF_ARG)
!         a = FFI_SIZEOF_ARG;
        
!       if ((a - 1) & (unsigned) argp) {
! 	argp = (char *) ALIGN(argp, a);
! 	FIX_ARGP;
!       }
  
! #if _MIPS_SIM == _ABIO32
! #define OFFSET 0
! #else
! #define OFFSET sizeof(int)
! #endif      
  
! 	  z = (*p_arg)->size;
! 	  if (z < sizeof(ffi_arg))
  	    {
! 	      z = sizeof(ffi_arg);
  
! 	      switch ((*p_arg)->type)
! 		{
! 		case FFI_TYPE_SINT8:
! 		  *(SINT32 *) &argp[OFFSET] = (SINT32)*(SINT8 *)(* p_argv);
! 		  break;
! 		  
! 		case FFI_TYPE_UINT8:
! 		  *(UINT32 *) &argp[OFFSET] = (UINT32)*(UINT8 *)(* p_argv);
! 		  break;
  		  
! 		case FFI_TYPE_SINT16:
! 		  *(SINT32 *) &argp[OFFSET] = (SINT32)*(SINT16 *)(* p_argv);
! 		  break;
  		  
! 		case FFI_TYPE_UINT16:
! 		  *(UINT32 *) &argp[OFFSET] = (UINT32)*(UINT16 *)(* p_argv);
! 		  break;
  		  
! 		case FFI_TYPE_SINT32:
! 		  *(SINT32 *) &argp[OFFSET] = (SINT32)*(SINT32 *)(* p_argv);
! 		  break;
  		  
! 		case FFI_TYPE_UINT32:
! 		case FFI_TYPE_POINTER:
! 		  *(UINT32 *) &argp[OFFSET] = (UINT32)*(UINT32 *)(* p_argv);
! 		  break;
! 
! 		  /* This can only happen with 64bit slots */
! 		case FFI_TYPE_FLOAT:
! 		  *(float *) argp = *(float *)(* p_argv);
! 		  break;
  
! 		  /* Handle small structures */
! 		case FFI_TYPE_STRUCT:
! 		  memcpy(argp, *p_argv, (*p_arg)->size);
! 		  break;
  
! 		default:
! 		  FFI_ASSERT(0);
! 		}
  	    }
! 	  else
! 	    {
! #if _MIPS_SIM == _ABIO32	      
! 	      memcpy(argp, *p_argv, z);
  #else
! 	      {
! 		unsigned end = (unsigned) argp+z;
! 		unsigned cap = (unsigned) stack+bytes;
  
! 		/* Check if the data will fit within the register
! 		   space. Handle it if it doesn't. */
  
! 		if (end <= cap)
! 		  memcpy(argp, *p_argv, z);
! 		else
! 		  {
! 		    unsigned portion = end - cap;
  
! 		    memcpy(argp, *p_argv, portion);
! 		    argp = stack;
! 		    memcpy(argp, 
! 			   (void*)((unsigned)(*p_argv)+portion), z - portion);
! 		  }
  	      }
  #endif
! 	    }
! 	  p_argv++;
! 	  argp += z;
! 	  FIX_ARGP;
      }
-   
-   return;
  }
  
  #if _MIPS_SIM == _ABIN32
--- 85,177 ----
    for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i; i--, p_arg++)
      {
        size_t z;
!       unsigned int a;
  
!       /* Align if necessary.  */
        a = (*p_arg)->alignment;
!       if (a < sizeof(ffi_arg))
!         a = sizeof(ffi_arg);
        
!       if ((a - 1) & (unsigned int) argp)
! 	{
! 	  argp = (char *) ALIGN(argp, a);
! 	  FIX_ARGP;
! 	}
  
!       z = (*p_arg)->size;
!       if (z <= sizeof(ffi_arg))
! 	{
! 	  z = sizeof(ffi_arg);
  
! 	  switch ((*p_arg)->type)
  	    {
! 	      case FFI_TYPE_SINT8:
! 		*(ffi_arg *)argp = *(SINT8 *)(* p_argv);
! 		break;
  
! 	      case FFI_TYPE_UINT8:
! 		*(ffi_arg *)argp = *(UINT8 *)(* p_argv);
! 		break;
  		  
! 	      case FFI_TYPE_SINT16:
! 		*(ffi_arg *)argp = *(SINT16 *)(* p_argv);
! 		break;
  		  
! 	      case FFI_TYPE_UINT16:
! 		*(ffi_arg *)argp = *(UINT16 *)(* p_argv);
! 		break;
  		  
! 	      case FFI_TYPE_SINT32:
! 		*(ffi_arg *)argp = *(SINT32 *)(* p_argv);
! 		break;
  		  
! 	      case FFI_TYPE_UINT32:
! 	      case FFI_TYPE_POINTER:
! 		*(ffi_arg *)argp = *(UINT32 *)(* p_argv);
! 		break;
  
! 	      /* This can only happen with 64bit slots.  */
! 	      case FFI_TYPE_FLOAT:
! 		*(float *) argp = *(float *)(* p_argv);
! 		break;
  
! 	      /* Handle small structures.  */
! 	      case FFI_TYPE_STRUCT:
! 	      default:
! 		memcpy(argp, *p_argv, (*p_arg)->size);
! 		break;
  	    }
! 	}
!       else
! 	{
! #if _MIPS_SIM == _ABIO32
! 	  memcpy(argp, *p_argv, z);
  #else
! 	  {
! 	    unsigned end = (unsigned) argp+z;
! 	    unsigned cap = (unsigned) stack+bytes;
  
! 	    /* Check if the data will fit within the register space.
! 	       Handle it if it doesn't.  */
  
! 	    if (end <= cap)
! 	      memcpy(argp, *p_argv, z);
! 	    else
! 	      {
! 		unsigned portion = end - cap;
  
! 		memcpy(argp, *p_argv, portion);
! 		argp = stack;
! 		memcpy(argp,
! 		       (void*)((unsigned)(*p_argv)+portion), z - portion);
  	      }
+ 	  }
  #endif
!       }
!       p_argv++;
!       argp += z;
!       FIX_ARGP;
      }
  }
  
  #if _MIPS_SIM == _ABIN32
*************** ffi_prep_closure (ffi_closure *closure,
*** 524,531 ****
  #endif /* FFI_MIPS_O32 */
  
    tramp[0] = 0x3c190000 | (fn >> 16);     /* lui  $25,high(fn) */
!   tramp[1] = 0x3c080000 | (ctx >> 16);    /* lui  $8,high(ctx) */
!   tramp[2] = 0x37390000 | (fn & 0xffff);  /* ori  $25,low(fn)  */
    tramp[3] = 0x03200008;                  /* jr   $25          */
    tramp[4] = 0x35080000 | (ctx & 0xffff); /* ori  $8,low(ctx)  */
  
--- 515,522 ----
  #endif /* FFI_MIPS_O32 */
  
    tramp[0] = 0x3c190000 | (fn >> 16);     /* lui  $25,high(fn) */
!   tramp[1] = 0x37390000 | (fn & 0xffff);  /* ori  $25,low(fn)  */
!   tramp[2] = 0x3c080000 | (ctx >> 16);    /* lui  $8,high(ctx) */
    tramp[3] = 0x03200008;                  /* jr   $25          */
    tramp[4] = 0x35080000 | (ctx & 0xffff); /* ori  $8,low(ctx)  */
  
*************** ffi_prep_closure (ffi_closure *closure,
*** 558,573 ****
   */
  int
  ffi_closure_mips_inner_O32 (ffi_closure *closure,
! 			    void *rvalue, unsigned long *ar,
  			    double *fpr)
  {
    ffi_cif *cif;
!   void **avalue;
    ffi_type **arg_types;
    int i, avn, argn, seen_int;
  
    cif = closure->cif;
!   avalue = alloca (cif->nargs * sizeof (void *));
  
    seen_int = (cif->abi == FFI_O32_SOFT_FLOAT);
    argn = 0;
--- 549,566 ----
   */
  int
  ffi_closure_mips_inner_O32 (ffi_closure *closure,
! 			    void *rvalue, ffi_arg *ar,
  			    double *fpr)
  {
    ffi_cif *cif;
!   void **avaluep;
!   ffi_arg *avalue;
    ffi_type **arg_types;
    int i, avn, argn, seen_int;
  
    cif = closure->cif;
!   avalue = alloca (cif->nargs * sizeof (ffi_arg));
!   avaluep = alloca (cif->nargs * sizeof (ffi_arg));
  
    seen_int = (cif->abi == FFI_O32_SOFT_FLOAT);
    argn = 0;
*************** ffi_closure_mips_inner_O32 (ffi_closure 
*** 588,600 ****
  	  (arg_types[i]->type == FFI_TYPE_FLOAT ||
  	   arg_types[i]->type == FFI_TYPE_DOUBLE))
  	{
! 	  avalue[i] = ((char *) &fpr[i]);
  	}
        else
  	{
  	  if (arg_types[i]->alignment == 8 && (argn & 0x1))
  	    argn++;
! 	  avalue[i] = ((char *) &ar[argn]);
  	  seen_int = 1;
  	}
        argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG;
--- 581,623 ----
  	  (arg_types[i]->type == FFI_TYPE_FLOAT ||
  	   arg_types[i]->type == FFI_TYPE_DOUBLE))
  	{
! #ifdef __MIPSEB__
! 	  if (arg_types[i]->type == FFI_TYPE_FLOAT)
! 	    avaluep[i] = ((char *) &fpr[i]) + sizeof (float);
! 	  else
! #endif
! 	    avaluep[i] = (char *) &fpr[i];
  	}
        else
  	{
  	  if (arg_types[i]->alignment == 8 && (argn & 0x1))
  	    argn++;
! 	  switch (arg_types[i]->type)
! 	    {
! 	      case FFI_TYPE_SINT8:
! 		avaluep[i] = &avalue[i];
! 		*(SINT8 *) &avalue[i] = (SINT8) ar[argn];
! 		break;
! 
! 	      case FFI_TYPE_UINT8:
! 		avaluep[i] = &avalue[i];
! 		*(UINT8 *) &avalue[i] = (UINT8) ar[argn];
! 		break;
! 		  
! 	      case FFI_TYPE_SINT16:
! 		avaluep[i] = &avalue[i];
! 		*(SINT16 *) &avalue[i] = (SINT16) ar[argn];
! 		break;
! 		  
! 	      case FFI_TYPE_UINT16:
! 		avaluep[i] = &avalue[i];
! 		*(UINT16 *) &avalue[i] = (UINT16) ar[argn];
! 		break;
! 
! 	      default:
! 		avaluep[i] = (char *) &ar[argn];
! 		break;
! 	    }
  	  seen_int = 1;
  	}
        argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG;
*************** ffi_closure_mips_inner_O32 (ffi_closure 
*** 602,608 ****
      }
  
    /* Invoke the closure. */
!   (closure->fun) (cif, rvalue, avalue, closure->user_data);
  
    if (cif->abi == FFI_O32_SOFT_FLOAT)
      {
--- 625,631 ----
      }
  
    /* Invoke the closure. */
!   (closure->fun) (cif, rvalue, avaluep, closure->user_data);
  
    if (cif->abi == FFI_O32_SOFT_FLOAT)
      {
diff -Nrcpad gcc-4.0.2/libffi/src/mips/ffitarget.h gcc-4.1.0/libffi/src/mips/ffitarget.h
*** gcc-4.0.2/libffi/src/mips/ffitarget.h	Mon Aug 23 16:49:17 2004
--- gcc-4.1.0/libffi/src/mips/ffitarget.h	Wed Dec  7 14:58:27 2005
***************
*** 26,42 ****
  #ifndef LIBFFI_TARGET_H
  #define LIBFFI_TARGET_H
  
- #ifndef LIBFFI_ASM
- #include <sgidefs.h>
- #endif
- 
  #if !defined(_MIPS_SIM)
  -- something is very wrong --
  #else
  #  if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64))
  #    define FFI_MIPS_N32
  #  else
! #    if _MIPS_SIM==_ABIO32 && defined(_ABIO32)
  #      define FFI_MIPS_O32
  #    else
  -- this is an unsupported platform --
--- 26,38 ----
  #ifndef LIBFFI_TARGET_H
  #define LIBFFI_TARGET_H
  
  #if !defined(_MIPS_SIM)
  -- something is very wrong --
  #else
  #  if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64))
  #    define FFI_MIPS_N32
  #  else
! #    if (_MIPS_SIM==_ABIO32 && defined(_ABIO32))
  #      define FFI_MIPS_O32
  #    else
  -- this is an unsupported platform --
diff -Nrcpad gcc-4.0.2/libffi/src/mips/o32.S gcc-4.1.0/libffi/src/mips/o32.S
*** gcc-4.0.2/libffi/src/mips/o32.S	Fri Aug 19 14:53:01 2005
--- gcc-4.1.0/libffi/src/mips/o32.S	Wed Dec  7 14:58:27 2005
***************
*** 35,41 ****
  #define bytes	 a2
  #define flags	 a3
  		
! #define SIZEOF_FRAME	( 4 * FFI_SIZEOF_ARG + 2 * FFI_SIZEOF_ARG )
  
  	.abicalls
  	.text
--- 35,44 ----
  #define bytes	 a2
  #define flags	 a3
  		
! #define SIZEOF_FRAME	(4 * FFI_SIZEOF_ARG + 2 * FFI_SIZEOF_ARG)
! #define A3_OFF		(SIZEOF_FRAME + 3 * FFI_SIZEOF_ARG)
! #define FP_OFF		(SIZEOF_FRAME - 2 * FFI_SIZEOF_ARG)
! #define RA_OFF		(SIZEOF_FRAME - 1 * FFI_SIZEOF_ARG)
  
  	.abicalls
  	.text
***************
*** 45,92 ****
  ffi_call_O32:	
  $LFB0:
  	# Prologue
! 	SUBU	$sp, SIZEOF_FRAME			# Frame size
  $LCFI0:
! 	REG_S	$fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp)	# Save frame pointer
  $LCFI1:
! 	REG_S	ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp)	# Save return address
  $LCFI2:
  	move	$fp, $sp
  
  $LCFI3:
! 	move	t9, callback	# callback function pointer
! 	REG_S	flags, SIZEOF_FRAME + 3*FFI_SIZEOF_ARG($fp) # flags
  
  	# Allocate at least 4 words in the argstack
- 	move	v0, bytes
- 	bge	bytes, 4 * FFI_SIZEOF_ARG, bigger	
  	LI	v0, 4 * FFI_SIZEOF_ARG
! 	b	sixteen
  
! bigger:	
! 	ADDU	t0, v0, 2 * FFI_SIZEOF_ARG -1	# make sure it is aligned 
! 	and	v0, t0, -2 * FFI_SIZEOF_ARG		# to an 8 byte boundry
  
  sixteen:
! 	SUBU	$sp, $sp, v0	# move the stack pointer to reflect the
  				# arg space
  
  	ADDU	a0, $sp, 4 * FFI_SIZEOF_ARG
- 	ADDU	a3, $fp, SIZEOF_FRAME + 3*FFI_SIZEOF_ARG
  
  	jalr	t9
  	
! 	REG_L	t0, SIZEOF_FRAME + 3*FFI_SIZEOF_ARG($fp)  # load the flags word
! 	add	t2, t0, 0			   # and copy it into t2
! 
  	and     t0, ((1<<4)-1)          # mask out the return type
- 	SRL	t2, 4			# shift our arg info
  		
! 	ADDU	$sp, $sp, 4 * FFI_SIZEOF_ARG	# adjust $sp to new args
  
  	bnez	t0, pass_d			# make it quick for int
! 	REG_L	a0, 0*FFI_SIZEOF_ARG($sp)		# just go ahead and load the
! 	REG_L	a1, 1*FFI_SIZEOF_ARG($sp)		# four regs.
  	REG_L	a2, 2*FFI_SIZEOF_ARG($sp)
  	REG_L	a3, 3*FFI_SIZEOF_ARG($sp)
  	b	call_it
--- 48,89 ----
  ffi_call_O32:	
  $LFB0:
  	# Prologue
! 	SUBU	$sp, SIZEOF_FRAME	# Frame size
  $LCFI0:
! 	REG_S	$fp, FP_OFF($sp)	# Save frame pointer
  $LCFI1:
! 	REG_S	ra, RA_OFF($sp)		# Save return address
  $LCFI2:
  	move	$fp, $sp
  
  $LCFI3:
! 	move	t9, callback		# callback function pointer
! 	REG_S	flags, A3_OFF($fp)	# flags
  
  	# Allocate at least 4 words in the argstack
  	LI	v0, 4 * FFI_SIZEOF_ARG
! 	blt	bytes, v0, sixteen
  
! 	ADDU	v0, bytes, 7	# make sure it is aligned 
! 	and	v0, -8		# to an 8 byte boundry
  
  sixteen:
! 	SUBU	$sp, v0		# move the stack pointer to reflect the
  				# arg space
  
  	ADDU	a0, $sp, 4 * FFI_SIZEOF_ARG
  
  	jalr	t9
  	
! 	REG_L	t0, A3_OFF($fp)		# load the flags word
! 	SRL	t2, t0, 4		# shift our arg info
  	and     t0, ((1<<4)-1)          # mask out the return type
  		
! 	ADDU	$sp, 4 * FFI_SIZEOF_ARG		# adjust $sp to new args
  
  	bnez	t0, pass_d			# make it quick for int
! 	REG_L	a0, 0*FFI_SIZEOF_ARG($sp)	# just go ahead and load the
! 	REG_L	a1, 1*FFI_SIZEOF_ARG($sp)	# four regs.
  	REG_L	a2, 2*FFI_SIZEOF_ARG($sp)
  	REG_L	a3, 3*FFI_SIZEOF_ARG($sp)
  	b	call_it
*************** noretval:	
*** 176,184 ****
  	# Epilogue
  epilogue:	
  	move	$sp, $fp	
! 	REG_L	$fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp) # Restore frame pointer
! 	REG_L	ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp)  # Restore return address
! 	ADDU	$sp, SIZEOF_FRAME		      # Fix stack pointer
  	j	ra
  
  $LFE0:
--- 173,181 ----
  	# Epilogue
  epilogue:	
  	move	$sp, $fp	
! 	REG_L	$fp, FP_OFF($sp)	# Restore frame pointer
! 	REG_L	ra, RA_OFF($sp)		# Restore return address
! 	ADDU	$sp, SIZEOF_FRAME	# Fix stack pointer
  	j	ra
  
  $LFE0:
*************** $LFE0:
*** 209,215 ****
  	 0 - Called function a0 save our sp, fp point here
  	 */
  	
! #define SIZEOF_FRAME2	( 14 * FFI_SIZEOF_ARG )
  
  	.text
  	.align	2
--- 206,226 ----
  	 0 - Called function a0 save our sp, fp point here
  	 */
  	
! #define SIZEOF_FRAME2	(14 * FFI_SIZEOF_ARG)
! #define A3_OFF2		(SIZEOF_FRAME2 + 3 * FFI_SIZEOF_ARG)
! #define A2_OFF2		(SIZEOF_FRAME2 + 2 * FFI_SIZEOF_ARG)
! #define A1_OFF2		(SIZEOF_FRAME2 + 1 * FFI_SIZEOF_ARG)
! #define A0_OFF2		(SIZEOF_FRAME2 + 0 * FFI_SIZEOF_ARG)
! #define RA_OFF2		(SIZEOF_FRAME2 - 1 * FFI_SIZEOF_ARG)
! #define FP_OFF2		(SIZEOF_FRAME2 - 2 * FFI_SIZEOF_ARG)
! #define S0_OFF2		(SIZEOF_FRAME2 - 3 * FFI_SIZEOF_ARG)
! #define GP_OFF2		(SIZEOF_FRAME2 - 4 * FFI_SIZEOF_ARG)
! #define V1_OFF2		(SIZEOF_FRAME2 - 5 * FFI_SIZEOF_ARG)
! #define V0_OFF2		(SIZEOF_FRAME2 - 6 * FFI_SIZEOF_ARG)
! #define FA_1_1_OFF2	(SIZEOF_FRAME2 - 7 * FFI_SIZEOF_ARG)
! #define FA_1_0_OFF2	(SIZEOF_FRAME2 - 8 * FFI_SIZEOF_ARG)
! #define FA_0_1_OFF2	(SIZEOF_FRAME2 - 9 * FFI_SIZEOF_ARG)
! #define FA_0_0_OFF2	(SIZEOF_FRAME2 - 10 * FFI_SIZEOF_ARG)
  
  	.text
  	.align	2
*************** $LFE0:
*** 218,245 ****
  ffi_closure_O32:
  $LFB1:
  	# Prologue
! 	.frame	$fp, SIZEOF_FRAME2, $31
  	.set	noreorder
! 	.cpload	$25
  	.set	reorder
  	SUBU	$sp, SIZEOF_FRAME2
! 	.cprestore SIZEOF_FRAME2 - 4*FFI_SIZEOF_ARG
  $LCFI4:
! 	REG_S	$16, SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp)	 # Save s0
! 	REG_S	$fp, SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp)	 # Save frame pointer
! 	REG_S	ra, SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)	 # Save return address
  $LCFI6:
  	move	$fp, $sp
  
  $LCFI7:
  	# Store all possible argument registers. If there are more than
! 	# four arguments, then they should be stored above where we put $7.
! 	REG_S	$4, SIZEOF_FRAME2 + 0*FFI_SIZEOF_ARG($fp)
! 	REG_S	$5, SIZEOF_FRAME2 + 1*FFI_SIZEOF_ARG($fp)
! 	REG_S	$6, SIZEOF_FRAME2 + 2*FFI_SIZEOF_ARG($fp)
! 	REG_S	$7, SIZEOF_FRAME2 + 3*FFI_SIZEOF_ARG($fp)
  
! 	# Load ABI enum to $16
  	REG_L	$16, 20($8)	# cif pointer follows tramp.
  	REG_L	$16, 0($16)	# abi is first member.
  
--- 229,256 ----
  ffi_closure_O32:
  $LFB1:
  	# Prologue
! 	.frame	$fp, SIZEOF_FRAME2, ra
  	.set	noreorder
! 	.cpload	t9
  	.set	reorder
  	SUBU	$sp, SIZEOF_FRAME2
! 	.cprestore GP_OFF2
  $LCFI4:
! 	REG_S	$16, S0_OFF2($sp)	 # Save s0
! 	REG_S	$fp, FP_OFF2($sp)	 # Save frame pointer
! 	REG_S	ra, RA_OFF2($sp)	 # Save return address
  $LCFI6:
  	move	$fp, $sp
  
  $LCFI7:
  	# Store all possible argument registers. If there are more than
! 	# four arguments, then they are stored above where we put a3.
! 	REG_S	a0, A0_OFF2($fp)
! 	REG_S	a1, A1_OFF2($fp)
! 	REG_S	a2, A2_OFF2($fp)
! 	REG_S	a3, A3_OFF2($fp)
  
! 	# Load ABI enum to s0
  	REG_L	$16, 20($8)	# cif pointer follows tramp.
  	REG_L	$16, 0($16)	# abi is first member.
  
*************** $LCFI7:
*** 247,262 ****
  	bne	$16, $13, 1f	# Skip fp save if FFI_O32_SOFT_FLOAT
  	
  	# Store all possible float/double registers.
! 	s.d	$f12, SIZEOF_FRAME2 - 10*FFI_SIZEOF_ARG($fp)
! 	s.d	$f14, SIZEOF_FRAME2 -  8*FFI_SIZEOF_ARG($fp)
  1:	
  	# Call ffi_closure_mips_inner_O32 to do the work.
! 	la	$25, ffi_closure_mips_inner_O32
! 	move	$4, $8	 # Pointer to the ffi_closure
! 	addu	$5, $fp, SIZEOF_FRAME2 -  6*FFI_SIZEOF_ARG
! 	addu	$6, $fp, SIZEOF_FRAME2 +  0*FFI_SIZEOF_ARG
! 	addu	$7, $fp, SIZEOF_FRAME2 - 10*FFI_SIZEOF_ARG
! 	jalr	$31, $25
  
  	# Load the return value into the appropriate register.
  	move	$8, $2
--- 258,273 ----
  	bne	$16, $13, 1f	# Skip fp save if FFI_O32_SOFT_FLOAT
  	
  	# Store all possible float/double registers.
! 	s.d	$f12, FA_0_0_OFF2($fp)
! 	s.d	$f14, FA_1_0_OFF2($fp)
  1:	
  	# Call ffi_closure_mips_inner_O32 to do the work.
! 	la	t9, ffi_closure_mips_inner_O32
! 	move	a0, $8	 # Pointer to the ffi_closure
! 	addu	a1, $fp, V0_OFF2
! 	addu	a2, $fp, A0_OFF2
! 	addu	a3, $fp, FA_0_0_OFF2
! 	jalr	t9
  
  	# Load the return value into the appropriate register.
  	move	$8, $2
*************** $LCFI7:
*** 267,294 ****
  	bne	$16, $13, 1f	# Skip fp restore if FFI_O32_SOFT_FLOAT
  
  	li	$9, FFI_TYPE_FLOAT
! 	l.s	$f0, SIZEOF_FRAME2 - 6*FFI_SIZEOF_ARG($fp)
  	beq	$8, $9, closure_done
  
  	li	$9, FFI_TYPE_DOUBLE
! 	l.d	$f0, SIZEOF_FRAME2 - 6*FFI_SIZEOF_ARG($fp)
  	beq	$8, $9, closure_done
  1:	
! 	li	$9, FFI_TYPE_SINT64
! 	REG_L	$3, SIZEOF_FRAME2 - 5*FFI_SIZEOF_ARG($fp)
! 	beq	$8, $9, integer
! 	li	$9, FFI_TYPE_UINT64
! 	beq	$8, $9, integer
! 
! integer:
! 	REG_L	$2, SIZEOF_FRAME2 - 6*FFI_SIZEOF_ARG($fp)
  
  closure_done:
  	# Epilogue
  	move	$sp, $fp
! 	REG_L	$16, SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp)	 # Restore s0
! 	REG_L	$fp, SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp)	 # Restore frame pointer
! 	REG_L	ra,  SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)	 # Restore return address
  	ADDU	$sp, SIZEOF_FRAME2
  	j	ra
  $LFE1:
--- 278,299 ----
  	bne	$16, $13, 1f	# Skip fp restore if FFI_O32_SOFT_FLOAT
  
  	li	$9, FFI_TYPE_FLOAT
! 	l.s	$f0, V0_OFF2($fp)
  	beq	$8, $9, closure_done
  
  	li	$9, FFI_TYPE_DOUBLE
! 	l.d	$f0, V0_OFF2($fp)
  	beq	$8, $9, closure_done
  1:	
! 	REG_L	$3, V1_OFF2($fp)
! 	REG_L	$2, V0_OFF2($fp)
  
  closure_done:
  	# Epilogue
  	move	$sp, $fp
! 	REG_L	$16, S0_OFF2($sp)	 # Restore s0
! 	REG_L	$fp, FP_OFF2($sp)	 # Restore frame pointer
! 	REG_L	ra,  RA_OFF2($sp)	 # Restore return address
  	ADDU	$sp, SIZEOF_FRAME2
  	j	ra
  $LFE1:
diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/darwin.S gcc-4.1.0/libffi/src/powerpc/darwin.S
*** gcc-4.0.2/libffi/src/powerpc/darwin.S	Sat Sep  4 22:09:19 2004
--- gcc-4.1.0/libffi/src/powerpc/darwin.S	Thu Mar 24 00:45:38 2005
***************
*** 24,29 ****
--- 24,39 ----
     OTHER DEALINGS IN THE SOFTWARE.
     ----------------------------------------------------------------------- */
  
+ #if defined(__ppc64__)
+ #define MODE_CHOICE(x, y) y
+ #else
+ #define MODE_CHOICE(x, y) x
+ #endif
+ 
+ #define g_long  MODE_CHOICE(long, quad)         /* usage is ".g_long" */
+ 
+ #define LOG2_GPR_BYTES  MODE_CHOICE(2,3)        /* log2(GPR_BYTES) */
+ 
  #define LIBFFI_ASM
  #include <fficonfig.h>
  #include <ffi.h>
*************** LSCIE1:
*** 190,196 ****
  	.byte	0xc	; DW_CFA_def_cfa
  	.byte	0x1	; uleb128 0x1
  	.byte	0x0	; uleb128 0x0
! 	.align	2
  LECIE1:
  .globl _ffi_call_DARWIN.eh
  _ffi_call_DARWIN.eh:
--- 200,206 ----
  	.byte	0xc	; DW_CFA_def_cfa
  	.byte	0x1	; uleb128 0x1
  	.byte	0x0	; uleb128 0x0
! 	.align	LOG2_GPR_BYTES
  LECIE1:
  .globl _ffi_call_DARWIN.eh
  _ffi_call_DARWIN.eh:
*************** LSFDE1:
*** 199,207 ****
  	.long	L$set$1	; FDE Length
  LASFDE1:
  	.long	LASFDE1-EH_frame1 ; FDE CIE offset
! 	.long	LLFB0$non_lazy_ptr-.	; FDE initial location
  	.set	L$set$3,LFE1-LFB0
! 	.long	L$set$3	; FDE address range
  	.byte   0x0     ; uleb128 0x0; Augmentation size
  	.byte	0x4	; DW_CFA_advance_loc4
  	.set	L$set$4,LCFI0-LFB1
--- 209,217 ----
  	.long	L$set$1	; FDE Length
  LASFDE1:
  	.long	LASFDE1-EH_frame1 ; FDE CIE offset
! 	.g_long	LLFB0$non_lazy_ptr-.	; FDE initial location
  	.set	L$set$3,LFE1-LFB0
! 	.g_long	L$set$3	; FDE address range
  	.byte   0x0     ; uleb128 0x0; Augmentation size
  	.byte	0x4	; DW_CFA_advance_loc4
  	.set	L$set$4,LCFI0-LFB1
*************** LASFDE1:
*** 227,235 ****
  	.long	L$set$6
  	.byte	0xd	; DW_CFA_def_cfa_register
  	.byte	0x1c	; uleb128 0x1c
! 	.align 2
  LEFDE1:
  .data
! 	.align 2
  LLFB0$non_lazy_ptr:
! 	.long   LFB0
--- 237,245 ----
  	.long	L$set$6
  	.byte	0xd	; DW_CFA_def_cfa_register
  	.byte	0x1c	; uleb128 0x1c
! 	.align LOG2_GPR_BYTES
  LEFDE1:
  .data
! 	.align LOG2_GPR_BYTES
  LLFB0$non_lazy_ptr:
! 	.g_long LFB0
diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/darwin_closure.S gcc-4.1.0/libffi/src/powerpc/darwin_closure.S
*** gcc-4.0.2/libffi/src/powerpc/darwin_closure.S	Sat Sep  4 22:09:20 2004
--- gcc-4.1.0/libffi/src/powerpc/darwin_closure.S	Thu Mar 24 00:45:38 2005
***************
*** 27,39 ****
  #define LIBFFI_ASM
  #define L(x) x
  
  	.file	"darwin_closure.S"
  .text
! 	.align 2
  .globl _ffi_closure_ASM
  
  .text
! 	.align 2
  _ffi_closure_ASM:
  LFB1:
  	mflr	r0		/* extract return address  */
--- 27,51 ----
  #define LIBFFI_ASM
  #define L(x) x
  
+ #if defined(__ppc64__)
+ #define MODE_CHOICE(x, y) y
+ #else
+ #define MODE_CHOICE(x, y) x
+ #endif
+ 
+ #define lgu     MODE_CHOICE(lwzu, ldu)
+ 
+ #define g_long  MODE_CHOICE(long, quad)         /* usage is ".g_long" */
+ 
+ #define LOG2_GPR_BYTES  MODE_CHOICE(2,3)        /* log2(GPR_BYTES) */
+ 
  	.file	"darwin_closure.S"
  .text
! 	.align LOG2_GPR_BYTES
  .globl _ffi_closure_ASM
  
  .text
! 	.align LOG2_GPR_BYTES
  _ffi_closure_ASM:
  LFB1:
  	mflr	r0		/* extract return address  */
*************** Lfinish:
*** 234,240 ****
  /* END(ffi_closure_ASM)  */
  
  .data
! .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms
  EH_frame1:
  	.set	L$set$0,LECIE1-LSCIE1
  	.long	L$set$0	; Length of Common Information Entry
--- 246,252 ----
  /* END(ffi_closure_ASM)  */
  
  .data
! .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
  EH_frame1:
  	.set	L$set$0,LECIE1-LSCIE1
  	.long	L$set$0	; Length of Common Information Entry
*************** LSCIE1:
*** 250,256 ****
  	.byte	0xc	; DW_CFA_def_cfa
  	.byte	0x1	; uleb128 0x1
  	.byte	0x0	; uleb128 0x0
! 	.align	2
  LECIE1:
  .globl _ffi_closure_ASM.eh
  _ffi_closure_ASM.eh:
--- 262,268 ----
  	.byte	0xc	; DW_CFA_def_cfa
  	.byte	0x1	; uleb128 0x1
  	.byte	0x0	; uleb128 0x0
! 	.align	LOG2_GPR_BYTES
  LECIE1:
  .globl _ffi_closure_ASM.eh
  _ffi_closure_ASM.eh:
*************** LSFDE1:
*** 260,268 ****
  
  LASFDE1:
  	.long	LASFDE1-EH_frame1	; FDE CIE offset
! 	.long	LLFB1$non_lazy_ptr-.	; FDE initial location
  	.set	L$set$3,LFE1-LFB1
! 	.long	L$set$3	; FDE address range
  	.byte   0x0     ; uleb128 0x0; Augmentation size
  	.byte	0x4	; DW_CFA_advance_loc4
  	.set	L$set$3,LCFI1-LCFI0
--- 272,280 ----
  
  LASFDE1:
  	.long	LASFDE1-EH_frame1	; FDE CIE offset
! 	.g_long	LLFB1$non_lazy_ptr-.	; FDE initial location
  	.set	L$set$3,LFE1-LFB1
! 	.g_long	L$set$3	; FDE address range
  	.byte   0x0     ; uleb128 0x0; Augmentation size
  	.byte	0x4	; DW_CFA_advance_loc4
  	.set	L$set$3,LCFI1-LCFI0
*************** LASFDE1:
*** 275,288 ****
  	.byte   0x11    ; DW_CFA_offset_extended_sf
  	.byte	0x41	; uleb128 0x41
  	.byte   0x7e    ; sleb128 -2
! 	.align	2
  LEFDE1:
  .data
! 	.align	2
  LDFCM0:
  .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
! 	.align	2
  Lffi_closure_helper_DARWIN$stub:
  	.indirect_symbol _ffi_closure_helper_DARWIN
  	mflr	r0
  	bcl	20,31,LO$ffi_closure_helper_DARWIN
--- 287,301 ----
  	.byte   0x11    ; DW_CFA_offset_extended_sf
  	.byte	0x41	; uleb128 0x41
  	.byte   0x7e    ; sleb128 -2
! 	.align	LOG2_GPR_BYTES
  LEFDE1:
  .data
! 	.align	LOG2_GPR_BYTES
  LDFCM0:
  .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
! 	.align	LOG2_GPR_BYTES
  Lffi_closure_helper_DARWIN$stub:
+ #if 1
  	.indirect_symbol _ffi_closure_helper_DARWIN
  	mflr	r0
  	bcl	20,31,LO$ffi_closure_helper_DARWIN
*************** LO$ffi_closure_helper_DARWIN:
*** 290,304 ****
  	mflr	r11
  	addis	r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)
  	mtlr	r0
! 	lwzu	r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11)
  	mtctr	r12
  	bctr
- .data
  .lazy_symbol_pointer
  L_ffi_closure_helper_DARWIN$lazy_ptr:
  	.indirect_symbol _ffi_closure_helper_DARWIN
! 	.long   dyld_stub_binding_helper
  .data
! 	.align 2
  LLFB1$non_lazy_ptr:
! 	.long LFB1
--- 303,317 ----
  	mflr	r11
  	addis	r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)
  	mtlr	r0
! 	lgu	r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11)
  	mtctr	r12
  	bctr
  .lazy_symbol_pointer
  L_ffi_closure_helper_DARWIN$lazy_ptr:
  	.indirect_symbol _ffi_closure_helper_DARWIN
! 	.g_long dyld_stub_binding_helper
! #endif
  .data
! 	.align LOG2_GPR_BYTES
  LLFB1$non_lazy_ptr:
! 	.g_long LFB1
diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/ffi.c gcc-4.1.0/libffi/src/powerpc/ffi.c
*** gcc-4.0.2/libffi/src/powerpc/ffi.c	Thu Aug 25 00:56:36 2005
--- gcc-4.1.0/libffi/src/powerpc/ffi.c	Mon Sep 26 19:56:22 2005
***************
*** 29,49 ****
  #include <stdlib.h>
  #include <stdio.h>
  
- #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 1)
- # define hidden __attribute__ ((visibility ("hidden")))
- #else
- # define hidden
- #endif
- 
  
  extern void ffi_closure_SYSV(void);
! extern void hidden ffi_closure_LINUX64(void);
  
  enum {
    /* The assembly depends on these exact flags.  */
    FLAG_RETURNS_NOTHING  = 1 << (31-30), /* These go in cr7 */
    FLAG_RETURNS_FP       = 1 << (31-29),
    FLAG_RETURNS_64BITS   = 1 << (31-28),
  
    FLAG_ARG_NEEDS_COPY   = 1 << (31- 7),
    FLAG_FP_ARGUMENTS     = 1 << (31- 6), /* cr1.eq; specified by ABI */
--- 29,45 ----
  #include <stdlib.h>
  #include <stdio.h>
  
  
  extern void ffi_closure_SYSV(void);
! extern void FFI_HIDDEN ffi_closure_LINUX64(void);
  
  enum {
    /* The assembly depends on these exact flags.  */
+   FLAG_RETURNS_SMST	= 1 << (31-31), /* Used for FFI_SYSV small structs.  */
    FLAG_RETURNS_NOTHING  = 1 << (31-30), /* These go in cr7 */
    FLAG_RETURNS_FP       = 1 << (31-29),
    FLAG_RETURNS_64BITS   = 1 << (31-28),
+   FLAG_RETURNS_128BITS  = 1 << (31-27),
  
    FLAG_ARG_NEEDS_COPY   = 1 << (31- 7),
    FLAG_FP_ARGUMENTS     = 1 << (31- 6), /* cr1.eq; specified by ABI */
*************** enum { ASM_NEEDS_REGISTERS64 = 4 };
*** 301,307 ****
  */
  
  /*@-exportheader@*/
! void hidden ffi_prep_args64(extended_cif *ecif, unsigned long *const stack)
  /*@=exportheader@*/
  {
    const unsigned long bytes = ecif->cif->bytes;
--- 297,303 ----
  */
  
  /*@-exportheader@*/
! void FFI_HIDDEN ffi_prep_args64(extended_cif *ecif, unsigned long *const stack)
  /*@=exportheader@*/
  {
    const unsigned long bytes = ecif->cif->bytes;
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 463,468 ****
--- 459,465 ----
    unsigned flags = 0;
    unsigned struct_copy_size = 0;
    unsigned type = cif->rtype->type;
+   unsigned size = cif->rtype->size;
  
    if (cif->abi != FFI_LINUX64)
      {
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 519,537 ****
        break;
  
      case FFI_TYPE_STRUCT:
!       if (cif->abi != FFI_GCC_SYSV && cif->abi != FFI_LINUX64)
  	{
! 	  if (cif->rtype->size <= 4)
! 	    break;
! 	  else if (cif->rtype->size <= 8)
! 	    {
! 	      flags |= FLAG_RETURNS_64BITS;
  	      break;
  	    }
  	}
        /* else fall through.  */
  #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
      case FFI_TYPE_LONGDOUBLE:
  #endif
        intarg_count++;
        flags |= FLAG_RETVAL_REFERENCE;
--- 516,555 ----
        break;
  
      case FFI_TYPE_STRUCT:
!       if (cif->abi == FFI_SYSV)
  	{
! 	  /* The final SYSV ABI says that structures smaller or equal 8 bytes
! 	     are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them
! 	     in memory.  */
! 
! 	  /* Treat structs with size <= 8 bytes.  */
! 	  if (size <= 8) {
! 	    flags |= FLAG_RETURNS_SMST;
! 	    /* These structs are returned in r3. We pack the type and the
! 	       precalculated shift value (needed in the sysv.S) into flags.
! 	       The same applies for the structs returned in r3/r4.  */
! 	    if (size <= 4) {
! 	      flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 1 )
! 		| (8 * (4 - size) << 4);
  	      break;
  	    }
+ 	    /* These structs are returned in r3 and r4. See above.   */
+ 	    if  (size <= 8) {
+ 	      flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 2 )
+ 		| (8 * (8 - size) << 4);
+ 	    break;
+ 	    }
+ 	  }
  	}
        /* else fall through.  */
  #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
      case FFI_TYPE_LONGDOUBLE:
+       if (type == FFI_TYPE_LONGDOUBLE && cif->abi == FFI_LINUX64)
+ 	{
+ 	  flags |= FLAG_RETURNS_128BITS;
+ 	  flags |= FLAG_RETURNS_FP;
+ 	  break;
+ 	}
  #endif
        intarg_count++;
        flags |= FLAG_RETVAL_REFERENCE;
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 575,581 ****
  	    /* 'long long' arguments are passed as two words, but
  	       either both words must fit in registers or both go
  	       on the stack.  If they go on the stack, they must
! 	       be 8-byte-aligned.  
  
  	       Also, only certain register pairs can be used for
  	       passing long long int -- specifically (r3,r4), (r5,r6),
--- 593,599 ----
  	    /* 'long long' arguments are passed as two words, but
  	       either both words must fit in registers or both go
  	       on the stack.  If they go on the stack, they must
! 	       be 8-byte-aligned.
  
  	       Also, only certain register pairs can be used for
  	       passing long long int -- specifically (r3,r4), (r5,r6),
*************** extern void ffi_call_SYSV(/*@out@*/ exte
*** 682,691 ****
  			  unsigned, unsigned,
  			  /*@out@*/ unsigned *,
  			  void (*fn)());
! extern void hidden ffi_call_LINUX64(/*@out@*/ extended_cif *,
! 				    unsigned long, unsigned long,
! 				    /*@out@*/ unsigned long *,
! 				    void (*fn)());
  /*@=declundef@*/
  /*@=exportheader@*/
  
--- 700,709 ----
  			  unsigned, unsigned,
  			  /*@out@*/ unsigned *,
  			  void (*fn)());
! extern void FFI_HIDDEN ffi_call_LINUX64(/*@out@*/ extended_cif *,
! 					unsigned long, unsigned long,
! 					/*@out@*/ unsigned long *,
! 					void (*fn)());
  /*@=declundef@*/
  /*@=exportheader@*/
  
*************** ffi_prep_closure (ffi_closure* closure,
*** 772,778 ****
  #else
    unsigned int *tramp;
  
!   FFI_ASSERT (cif->abi == FFI_GCC_SYSV);
  
    tramp = (unsigned int *) &closure->tramp[0];
    tramp[0] = 0x7c0802a6;  /*   mflr    r0 */
--- 790,796 ----
  #else
    unsigned int *tramp;
  
!   FFI_ASSERT (cif->abi == FFI_GCC_SYSV || cif->abi == FFI_SYSV);
  
    tramp = (unsigned int *) &closure->tramp[0];
    tramp[0] = 0x7c0802a6;  /*   mflr    r0 */
*************** ffi_closure_helper_SYSV (ffi_closure* cl
*** 831,850 ****
    long             ng;   /* number of general registers already used */
    ffi_cif *        cif;
    double           temp;
  
    cif = closure->cif;
    avalue = alloca(cif->nargs * sizeof(void *));
  
    nf = 0;
    ng = 0;
  
    /* Copy the caller's structure return value address so that the closure
!      returns the data directly to the caller.  */
    if (cif->rtype->type == FFI_TYPE_STRUCT)
      {
!       rvalue = (void *) *pgr;
!       ng++;
!       pgr++;
      }
  
    i = 0;
--- 849,875 ----
    long             ng;   /* number of general registers already used */
    ffi_cif *        cif;
    double           temp;
+   unsigned         size;
  
    cif = closure->cif;
    avalue = alloca(cif->nargs * sizeof(void *));
+   size = cif->rtype->size;
  
    nf = 0;
    ng = 0;
  
    /* Copy the caller's structure return value address so that the closure
!      returns the data directly to the caller.
!      For FFI_SYSV the result is passed in r3/r4 if the struct size is less
!      or equal 8 bytes.  */
! 
    if (cif->rtype->type == FFI_TYPE_STRUCT)
      {
!       if (!((cif->abi == FFI_SYSV) && (size <= 8))) {
! 	rvalue = (void *) *pgr;
! 	ng++;
! 	pgr++;
!       }
      }
  
    i = 0;
*************** ffi_closure_helper_SYSV (ffi_closure* cl
*** 988,1002 ****
  
    (closure->fun) (cif, rvalue, avalue, closure->user_data);
  
!   /* Tell ffi_closure_SYSV how to perform return type promotions.  */
    return cif->rtype->type;
  
  }
  
! int hidden ffi_closure_helper_LINUX64 (ffi_closure*, void*, unsigned long*,
! 				       ffi_dblfl*);
  
! int hidden
  ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue,
  			    unsigned long *pst, ffi_dblfl *pfr)
  {
--- 1013,1032 ----
  
    (closure->fun) (cif, rvalue, avalue, closure->user_data);
  
!   /* Tell ffi_closure_SYSV how to perform return type promotions.
!      Because the FFI_SYSV ABI returns the structures <= 8 bytes in r3/r4
!      we have to tell ffi_closure_SYSV how to treat them.  */
!   if (cif->abi == FFI_SYSV && cif->rtype->type == FFI_TYPE_STRUCT
!       && size <= 8)
!     return FFI_SYSV_TYPE_SMALL_STRUCT + size;
    return cif->rtype->type;
  
  }
  
! int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure*, void*, unsigned long*,
! 					   ffi_dblfl*);
  
! int FFI_HIDDEN
  ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue,
  			    unsigned long *pst, ffi_dblfl *pfr)
  {
diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/ffitarget.h gcc-4.1.0/libffi/src/powerpc/ffitarget.h
*** gcc-4.0.2/libffi/src/powerpc/ffitarget.h	Thu Sep  2 21:07:21 2004
--- gcc-4.1.0/libffi/src/powerpc/ffitarget.h	Tue Jul 19 21:15:36 2005
*************** typedef enum ffi_abi {
*** 62,67 ****
--- 62,74 ----
    FFI_DEFAULT_ABI = FFI_DARWIN,
  #endif
  
+ #ifdef POWERPC_FREEBSD
+   FFI_SYSV,
+   FFI_GCC_SYSV,
+   FFI_LINUX64,
+   FFI_DEFAULT_ABI = FFI_SYSV,
+ #endif
+ 
    FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
  } ffi_abi;
  #endif
*************** typedef enum ffi_abi {
*** 71,76 ****
--- 78,86 ----
  #define FFI_CLOSURES 1
  #define FFI_NATIVE_RAW_API 0
  
+ /* Needed for FFI_SYSV small structure returns.  */
+ #define FFI_SYSV_TYPE_SMALL_STRUCT  (FFI_TYPE_LAST)
+ 
  #if defined(POWERPC64) || defined(POWERPC_AIX)
  #define FFI_TRAMPOLINE_SIZE 24
  #else /* POWERPC || POWERPC_AIX */
diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/linux64.S gcc-4.1.0/libffi/src/powerpc/linux64.S
*** gcc-4.0.2/libffi/src/powerpc/linux64.S	Thu Sep  2 21:07:21 2004
--- gcc-4.1.0/libffi/src/powerpc/linux64.S	Mon Sep 26 19:56:22 2005
*************** ffi_call_LINUX64:
*** 120,128 ****
  	blr
  
  .Lfp_return_value:
  	bf	28, .Lfloat_return_value
  	stfd	%f1, 0(%r30)
! 	stfd	%f2, 8(%r30)	/* It might be a long double */
  	b	.Ldone_return_value
  .Lfloat_return_value:
  	stfs	%f1, 0(%r30)
--- 120,132 ----
  	blr
  
  .Lfp_return_value:
+ 	bt	27, .Lfd_return_value
  	bf	28, .Lfloat_return_value
  	stfd	%f1, 0(%r30)
! 	b	.Ldone_return_value
! .Lfd_return_value:
! 	stfd	%f1, 0(%r30)
! 	stfd	%f2, 8(%r30)
  	b	.Ldone_return_value
  .Lfloat_return_value:
  	stfs	%f1, 0(%r30)
diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/linux64_closure.S gcc-4.1.0/libffi/src/powerpc/linux64_closure.S
*** gcc-4.0.2/libffi/src/powerpc/linux64_closure.S	Thu Sep  2 21:07:21 2004
--- gcc-4.1.0/libffi/src/powerpc/linux64_closure.S	Thu Aug 11 21:18:24 2005
***************
*** 5,11 ****
  	.file	"linux64_closure.S"
  
  #ifdef __powerpc64__
! 	.hidden ffi_closure_LINUX64, .ffi_closure_LINUX64
  	.globl  ffi_closure_LINUX64, .ffi_closure_LINUX64
  	.section        ".opd","aw"
  	.align  3
--- 5,12 ----
  	.file	"linux64_closure.S"
  
  #ifdef __powerpc64__
! 	FFI_HIDDEN (ffi_closure_LINUX64)
! 	FFI_HIDDEN (.ffi_closure_LINUX64)
  	.globl  ffi_closure_LINUX64, .ffi_closure_LINUX64
  	.section        ".opd","aw"
  	.align  3
diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/ppc_closure.S gcc-4.1.0/libffi/src/powerpc/ppc_closure.S
*** gcc-4.0.2/libffi/src/powerpc/ppc_closure.S	Thu Sep  2 21:07:21 2004
--- gcc-4.1.0/libffi/src/powerpc/ppc_closure.S	Wed Jan 18 08:06:25 2006
*************** ENTRY(ffi_closure_SYSV)
*** 57,63 ****
  	addi %r7,%r1,152
  
  	# make the call
! 	bl JUMPTARGET(ffi_closure_helper_SYSV)
  
  	# now r3 contains the return type
  	# so use it to look up in a table
--- 57,63 ----
  	addi %r7,%r1,152
  
  	# make the call
! 	bl ffi_closure_helper_SYSV@local
  
  	# now r3 contains the return type
  	# so use it to look up in a table
*************** ENTRY(ffi_closure_SYSV)
*** 65,71 ****
  
  	# look up the proper starting point in table
  	# by using return type as offset
! 	addi %r5,%r1,112   # get pointer to results area
  	bl .Lget_ret_type0_addr # get pointer to .Lret_type0 into LR
  	mflr %r4           # move to r4
  	slwi %r3,%r3,4     # now multiply return type by 16
--- 65,71 ----
  
  	# look up the proper starting point in table
  	# by using return type as offset
! 	addi %r6,%r1,112   # get pointer to results area
  	bl .Lget_ret_type0_addr # get pointer to .Lret_type0 into LR
  	mflr %r4           # move to r4
  	slwi %r3,%r3,4     # now multiply return type by 16
*************** ENTRY(ffi_closure_SYSV)
*** 94,178 ****
  
  # case FFI_TYPE_INT
  .Lret_type1:
! 	lwz %r3,0(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_FLOAT
  .Lret_type2:
! 	lfs %f1,0(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_DOUBLE
  .Lret_type3:
! 	lfd %f1,0(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_LONGDOUBLE
  .Lret_type4:
! 	lfd %f1,0(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_UINT8
  .Lret_type5:
! 	lbz %r3,3(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_SINT8
  .Lret_type6:
! 	lbz %r3,3(%r5)
  	extsb %r3,%r3
  	b .Lfinish
  	nop
  
  # case FFI_TYPE_UINT16
  .Lret_type7:
! 	lhz %r3,2(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_SINT16
  .Lret_type8:
! 	lha %r3,2(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_UINT32
  .Lret_type9:
! 	lwz %r3,0(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_SINT32
  .Lret_type10:
! 	lwz %r3,0(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_UINT64
  .Lret_type11:
! 	lwz %r3,0(%r5)
! 	lwz %r4,4(%r5)
  	b .Lfinish
  	nop
  
  # case FFI_TYPE_SINT64
  .Lret_type12:
! 	lwz %r3,0(%r5)
! 	lwz %r4,4(%r5)
  	b .Lfinish
  	nop
  
--- 94,178 ----
  
  # case FFI_TYPE_INT
  .Lret_type1:
! 	lwz %r3,0(%r6)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_FLOAT
  .Lret_type2:
! 	lfs %f1,0(%r6)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_DOUBLE
  .Lret_type3:
! 	lfd %f1,0(%r6)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_LONGDOUBLE
  .Lret_type4:
! 	lfd %f1,0(%r6)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_UINT8
  .Lret_type5:
! 	lbz %r3,3(%r6)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_SINT8
  .Lret_type6:
! 	lbz %r3,3(%r6)
  	extsb %r3,%r3
  	b .Lfinish
  	nop
  
  # case FFI_TYPE_UINT16
  .Lret_type7:
! 	lhz %r3,2(%r6)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_SINT16
  .Lret_type8:
! 	lha %r3,2(%r6)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_UINT32
  .Lret_type9:
! 	lwz %r3,0(%r6)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_SINT32
  .Lret_type10:
! 	lwz %r3,0(%r6)
  	b .Lfinish
  	nop
  	nop
  
  # case FFI_TYPE_UINT64
  .Lret_type11:
! 	lwz %r3,0(%r6)
! 	lwz %r4,4(%r6)
  	b .Lfinish
  	nop
  
  # case FFI_TYPE_SINT64
  .Lret_type12:
! 	lwz %r3,0(%r6)
! 	lwz %r4,4(%r6)
  	b .Lfinish
  	nop
  
*************** ENTRY(ffi_closure_SYSV)
*** 185,195 ****
  
  # case FFI_TYPE_POINTER
  .Lret_type14:
! 	lwz %r3,0(%r5)
  	b .Lfinish
  	nop
  	nop
  
  # case done
  .Lfinish:
  
--- 185,260 ----
  
  # case FFI_TYPE_POINTER
  .Lret_type14:
! 	lwz %r3,0(%r6)
! 	b .Lfinish
! 	nop
! 	nop
! 
! # The return types below are only used when the ABI type is FFI_SYSV.
! # case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct.
! .Lret_type15:
! # fall through.
! 	lbz %r3,0(%r6)
! 	b .Lfinish
! 	nop
! 	nop
! 
! # case FFI_SYSV_TYPE_SMALL_STRUCT + 2. Two byte struct.
! .Lret_type16:
! # fall through.
! 	lhz %r3,0(%r6)
  	b .Lfinish
  	nop
  	nop
  
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct.
+ .Lret_type17:
+ # fall through.
+ 	lwz %r3,0(%r6)
+ 	srwi %r3,%r3,8
+ 	b .Lfinish
+ 	nop
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct.
+ .Lret_type18:
+ # this one handles the structs from above too.
+ 	lwz %r3,0(%r6)
+ 	b .Lfinish
+ 	nop
+ 	nop
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct.
+ .Lret_type19:
+ # fall through.
+ 	lwz %r3,0(%r6)
+ 	lwz %r4,4(%r6)
+ 	li %r5,24
+ 	b .Lstruct567
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct.
+ .Lret_type20:
+ # fall through.
+ 	lwz %r3,0(%r6)
+ 	lwz %r4,4(%r6)
+ 	li %r5,16
+ 	b .Lstruct567
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct.
+ .Lret_type21:
+ # fall through.
+ 	lwz %r3,0(%r6)
+ 	lwz %r4,4(%r6)
+ 	li %r5,8
+ 	b .Lstruct567
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct.
+ .Lret_type22:
+ # this one handles the above unhandled structs.
+ 	lwz %r3,0(%r6)
+ 	lwz %r4,4(%r6)
+ 	b .Lfinish
+ 	nop
+ 
  # case done
  .Lfinish:
  
*************** ENTRY(ffi_closure_SYSV)
*** 197,202 ****
--- 262,275 ----
  	mtlr %r0
  	addi %r1,%r1,144
  	blr
+ 
+ .Lstruct567:
+ 	subfic %r0,%r5,32
+ 	srw %r4,%r4,%r5
+ 	slw %r0,%r3,%r0
+ 	srw %r3,%r3,%r5
+ 	or %r4,%r0,%r4
+ 	b .Lfinish
  END(ffi_closure_SYSV)
  
  	.section	".eh_frame",EH_FRAME_FLAGS,@progbits
*************** END(ffi_closure_SYSV)
*** 241,249 ****
  	.uleb128 144
  	.byte	0x4	 # DW_CFA_advance_loc4
  	.4byte	.LCFI1-.LCFI0
! 	.byte	0x2f	 # DW_CFA_GNU_negative_offset_extended
  	.uleb128 0x41
! 	.uleb128 0x1
  	.align 2
  .LEFDE1:
  
--- 314,322 ----
  	.uleb128 144
  	.byte	0x4	 # DW_CFA_advance_loc4
  	.4byte	.LCFI1-.LCFI0
! 	.byte	0x11	 # DW_CFA_offset_extended_sf
  	.uleb128 0x41
! 	.sleb128 -1
  	.align 2
  .LEFDE1:
  
diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/sysv.S gcc-4.1.0/libffi/src/powerpc/sysv.S
*** gcc-4.0.2/libffi/src/powerpc/sysv.S	Thu Sep  2 21:07:21 2004
--- gcc-4.1.0/libffi/src/powerpc/sysv.S	Wed Jan 18 08:06:25 2006
*************** ENTRY(ffi_call_SYSV)
*** 60,66 ****
  
  	/* Call ffi_prep_args_SYSV.  */
  	mr	%r4,%r1
! 	bl	JUMPTARGET(ffi_prep_args_SYSV)
  
  	/* Now do the call.  */
  	/* Set up cr1 with bits 4-7 of the flags.  */
--- 60,66 ----
  
  	/* Call ffi_prep_args_SYSV.  */
  	mr	%r4,%r1
! 	bl	ffi_prep_args_SYSV@local
  
  	/* Now do the call.  */
  	/* Set up cr1 with bits 4-7 of the flags.  */
*************** ENTRY(ffi_call_SYSV)
*** 99,104 ****
--- 99,105 ----
  
  	/* Now, deal with the return value.  */
  	mtcrf	0x01,%r31
+ 	bt-	31,L(small_struct_return_value)
  	bt-	30,L(done_return_value)
  	bt-	29,L(fp_return_value)
  	stw	%r3,0(%r30)
*************** L(fp_return_value):
*** 124,129 ****
--- 125,157 ----
  L(float_return_value):
  	stfs	%f1,0(%r30)
  	b	L(done_return_value)
+ 
+ L(small_struct_return_value):
+ 	mtcrf	0x10,%r31	/* cr3  */
+ 	bt-	15,L(smst_one_register)
+ 	mtcrf	0x08,%r31	/* cr4  */
+ 	bt-	16,L(smst_two_register)
+ 	b       L(done_return_value)
+ 
+ L(smst_one_register):
+ 	rlwinm  %r5,%r31,5+23,32-5,31 /* Extract the value to shift.  */
+ 	slw	%r3,%r3,%r5
+ 	stw	%r3,0(%r30)
+ 	b	L(done_return_value)
+ L(smst_two_register):
+ 	rlwinm  %r5,%r31,5+23,32-5,31 /* Extract the value to shift.  */
+ 	cmpwi	%r5,0
+ 	subfic	%r9,%r5,32
+ 	slw	%r29,%r3,%r5
+ 	srw	%r9,%r4,%r9
+ 	beq-	L(smst_8byte)
+ 	or	%r3,%r9,%r29
+ 	slw	%r4,%r4,%r5
+ L(smst_8byte):
+ 	stw	%r3,0(%r30)
+ 	stw	%r4,4(%r30)
+ 	b	L(done_return_value)
+ 
  .LFE1:
  END(ffi_call_SYSV)
  
*************** END(ffi_call_SYSV)
*** 169,177 ****
        .uleb128  0x08
        .byte     0x4      /*  DW_CFA_advance_loc4 */
        .4byte    .LCFI5-.LCFI0
!       .byte     0x2f     /*  DW_CFA_GNU_negative_offset_extended */
        .uleb128  0x41
!       .uleb128  0x1
        .byte     0x9f     /*  DW_CFA_offset, column 0x1f */
        .uleb128  0x1
        .byte     0x9e     /*  DW_CFA_offset, column 0x1e */
--- 197,205 ----
        .uleb128  0x08
        .byte     0x4      /*  DW_CFA_advance_loc4 */
        .4byte    .LCFI5-.LCFI0
!       .byte     0x11     /*  DW_CFA_offset_extended_sf */
        .uleb128  0x41
!       .sleb128  -1
        .byte     0x9f     /*  DW_CFA_offset, column 0x1f */
        .uleb128  0x1
        .byte     0x9e     /*  DW_CFA_offset, column 0x1e */
diff -Nrcpad gcc-4.0.2/libffi/src/prep_cif.c gcc-4.1.0/libffi/src/prep_cif.c
*** gcc-4.0.2/libffi/src/prep_cif.c	Fri Mar 19 22:34:17 2004
--- gcc-4.1.0/libffi/src/prep_cif.c	Mon Apr 18 17:08:58 2005
*************** static ffi_status initialize_aggregate(/
*** 81,86 ****
--- 81,91 ----
    /*@=usedef@*/
  }
  
+ #ifndef __CRIS__
+ /* The CRIS ABI specifies structure elements to have byte
+    alignment only, so it completely overrides this functions,
+    which assumes "natural" alignment and padding.  */
+ 
  /* Perform machine independent ffi_cif preparation, then call
     machine dependent routine. */
  
*************** ffi_status ffi_prep_cif(/*@out@*/ /*@par
*** 158,160 ****
--- 163,166 ----
    /* Perform machine dependent cif processing */
    return ffi_prep_cif_machdep(cif);
  }
+ #endif /* not __CRIS__ */
diff -Nrcpad gcc-4.0.2/libffi/src/sh/ffi.c gcc-4.1.0/libffi/src/sh/ffi.c
*** gcc-4.0.2/libffi/src/sh/ffi.c	Mon Oct 18 23:12:20 2004
--- gcc-4.1.0/libffi/src/sh/ffi.c	Fri Jul 22 22:56:27 2005
***************
*** 1,5 ****
  /* -----------------------------------------------------------------------
!    ffi.c - Copyright (c) 2002, 2003, 2004 Kaz Kojima
     
     SuperH Foreign Function Interface 
  
--- 1,5 ----
  /* -----------------------------------------------------------------------
!    ffi.c - Copyright (c) 2002, 2003, 2004, 2005 Kaz Kojima
     
     SuperH Foreign Function Interface 
  
*************** void ffi_prep_args(char *stack, extended
*** 210,224 ****
  #if defined(__SH4__)
  	  if (greg + n - 1 >= NGREGARG)
  	    continue;
- 	  greg += n;
  #else
  	  if (greg >= NGREGARG)
  	    continue;
- 	  else if (greg + n - 1 >= NGREGARG)
- 	    greg = NGREGARG;
- 	  else
- 	    greg += n;
  #endif
  	  memcpy (argp, *p_argv, z);
  	  argp += n * sizeof (int);
  	}
--- 210,220 ----
  #if defined(__SH4__)
  	  if (greg + n - 1 >= NGREGARG)
  	    continue;
  #else
  	  if (greg >= NGREGARG)
  	    continue;
  #endif
+ 	  greg += n;
  	  memcpy (argp, *p_argv, z);
  	  argp += n * sizeof (int);
  	}
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 380,388 ****
        if (greg >= NGREGARG)
  	continue;
        else if (greg + n - 1 >= NGREGARG)
! 	greg = NGREGARG;
!       else
! 	greg += n;
        for (m = 0; m < n; m++)
          cif->flags += FFI_TYPE_INT << (2 * j++);
      }
--- 376,383 ----
        if (greg >= NGREGARG)
  	continue;
        else if (greg + n - 1 >= NGREGARG)
! 	n = NGREGARG - greg;
!       greg += n;
        for (m = 0; m < n; m++)
          cif->flags += FFI_TYPE_INT << (2 * j++);
      }
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 427,432 ****
--- 422,428 ----
  	      /*@dependent@*/ void **avalue)
  {
    extended_cif ecif;
+   UINT64 trvalue;
  
    ecif.cif = cif;
    ecif.avalue = avalue;
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 434,440 ****
    /* If the return value is a struct and we don't have a return	*/
    /* value address then we need to make one		        */
  
!   if ((rvalue == NULL) && 
        (cif->rtype->type == FFI_TYPE_STRUCT))
      {
        /*@-sysunrecog@*/
--- 430,439 ----
    /* If the return value is a struct and we don't have a return	*/
    /* value address then we need to make one		        */
  
!   if (cif->rtype->type == FFI_TYPE_STRUCT
!       && return_type (cif->rtype) != FFI_TYPE_STRUCT)
!     ecif.rvalue = &trvalue;
!   else if ((rvalue == NULL) && 
        (cif->rtype->type == FFI_TYPE_STRUCT))
      {
        /*@-sysunrecog@*/
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 443,449 ****
      }
    else
      ecif.rvalue = rvalue;
-     
  
    switch (cif->abi) 
      {
--- 442,447 ----
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 457,462 ****
--- 455,465 ----
        FFI_ASSERT(0);
        break;
      }
+ 
+   if (rvalue
+       && cif->rtype->type == FFI_TYPE_STRUCT
+       && return_type (cif->rtype) != FFI_TYPE_STRUCT)
+     memcpy (rvalue, &trvalue, cif->rtype->size);
  }
  
  extern void ffi_closure_SYSV (void);
*************** ffi_closure_helper_SYSV (ffi_closure *cl
*** 620,634 ****
  #if defined(__SH4__)
  	  if (greg + n - 1 >= NGREGARG)
  	    continue;
- 	  greg += n;
  #else
  	  if (greg >= NGREGARG)
  	    continue;
- 	  else if (greg + n - 1 >= NGREGARG)
- 	    greg = NGREGARG;
- 	  else
- 	    greg += n;
  #endif
  	  avalue[i] = pgr;
  	  pgr += n;
  	}
--- 623,633 ----
  #if defined(__SH4__)
  	  if (greg + n - 1 >= NGREGARG)
  	    continue;
  #else
  	  if (greg >= NGREGARG)
  	    continue;
  #endif
+ 	  greg += n;
  	  avalue[i] = pgr;
  	  pgr += n;
  	}
*************** ffi_closure_helper_SYSV (ffi_closure *cl
*** 712,718 ****
  #if (! defined(__SH4__))
  	  else if (greg < NGREGARG)
  	    {
! 	      greg = NGREGARG;
  	      continue;
  	    }
  #endif
--- 711,718 ----
  #if (! defined(__SH4__))
  	  else if (greg < NGREGARG)
  	    {
! 	      greg += n;
! 	      pst += greg - NGREGARG;
  	      continue;
  	    }
  #endif
diff -Nrcpad gcc-4.0.2/libffi/src/sh/sysv.S gcc-4.1.0/libffi/src/sh/sysv.S
*** gcc-4.0.2/libffi/src/sh/sysv.S	Thu Oct 21 06:00:41 2004
--- gcc-4.1.0/libffi/src/sh/sysv.S	Fri Jul 22 22:56:27 2005
*************** L_pop_d:
*** 401,406 ****
--- 401,409 ----
  	 mov.l	@r15+,r7
  
  L_pass_i:
+ 	cmp/eq	#FFI_TYPE_INT,r0
+ 	bf	L_call_it
+ 
  	mov	#8,r0
  	cmp/hs	r0,r2
  	bt/s	2f
*************** L_epilogue:
*** 492,530 ****
  
  ENTRY(ffi_closure_SYSV)
  .LFB2:
! 	mov.l	r14,@-r15
  .LCFI7:
  	sts.l	pr,@-r15
  
  	/* Stack layout:	
! 	   ...
! 	   32 bytes (floating register parameters, SH-4 only)
  	   16 bytes (register parameters)
  	    8 bytes (result)
  	    4 bytes (pad)
  	    4 bytes (5th arg)
  	   <- new stack pointer
  	*/
! .LCFI8:
  #if defined(__SH4__)
! 	add	#-64,r15
  #else
! 	add	#-32,r15
  #endif
! .LCFI9:
  	mov	r15,r14
! .LCFIA:
! 	mov	r14,r1
! 	add	#32,r1
! 	mov.l	r7,@-r1
! 	mov.l	r6,@-r1
! 	mov.l	r5,@-r1
! 	mov.l	r4,@-r1
! 	mov	r1,r6
  
  #if defined(__SH4__)
  	mov	r14,r1
! 	add	#64,r1
  #ifdef __LITTLE_ENDIAN__
  	fmov.s	fr10,@-r1
  	fmov.s	fr11,@-r1
--- 495,536 ----
  
  ENTRY(ffi_closure_SYSV)
  .LFB2:
! 	mov.l	r7,@-r15
  .LCFI7:
+ 	mov.l	r6,@-r15
+ .LCFI8:
+ 	mov.l	r5,@-r15
+ .LCFI9:
+ 	mov.l	r4,@-r15
+ .LCFIA:
+ 	mov.l	r14,@-r15
+ .LCFIB:
  	sts.l	pr,@-r15
  
  	/* Stack layout:	
! 	   xx bytes (on stack parameters)
  	   16 bytes (register parameters)
+ 	    4 bytes (saved frame pointer)
+ 	    4 bytes (saved return address)
+ 	   32 bytes (floating register parameters, SH-4 only)
  	    8 bytes (result)
  	    4 bytes (pad)
  	    4 bytes (5th arg)
  	   <- new stack pointer
  	*/
! .LCFIC:
  #if defined(__SH4__)
! 	add	#-48,r15
  #else
! 	add	#-16,r15
  #endif
! .LCFID:
  	mov	r15,r14
! .LCFIE:
  
  #if defined(__SH4__)
  	mov	r14,r1
! 	add	#48,r1
  #ifdef __LITTLE_ENDIAN__
  	fmov.s	fr10,@-r1
  	fmov.s	fr11,@-r1
*************** ENTRY(ffi_closure_SYSV)
*** 545,550 ****
--- 551,561 ----
  	fmov.s	fr4,@-r1
  #endif
  	mov	r1,r7
+ 	mov	r14,r6
+ 	add	#56,r6
+ #else
+ 	mov	r14,r6
+ 	add	#24,r6
  #endif
  
  	bt/s	10f
*************** L_case_uh:
*** 678,690 ****
  
  L_case_v:
  #if defined(__SH4__)
! 	add	#64,r15
  #else
! 	add	#32,r15
  #endif
  	lds.l	@r15+,pr
  	rts
! 	 mov.l	@r15+,r14
  .LFE2:
  .ffi_closure_SYSV_end:
          .size    CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
--- 689,702 ----
  
  L_case_v:
  #if defined(__SH4__)
! 	add	#48,r15
  #else
! 	add	#16,r15
  #endif
  	lds.l	@r15+,pr
+ 	mov.l	@r15+,r14
  	rts
! 	 add	#16,r15
  .LFE2:
  .ffi_closure_SYSV_end:
          .size    CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
*************** __FRAME_BEGIN__:
*** 788,808 ****
  	.byte	0x4	/* DW_CFA_advance_loc4 */
  	.4byte	.LCFI8-.LCFI7
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
! 	.byte	0x8	/* uleb128 0x8 */
  	.byte	0x4	/* DW_CFA_advance_loc4 */
  	.4byte	.LCFI9-.LCFI8
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
  #if defined(__SH4__)
! 	.byte	8+64	/* uleb128 8+64 */
  #else
! 	.byte	8+32	/* uleb128 8+32 */
  #endif
  	.byte	0x91	/* DW_CFA_offset, column 0x11 */
!         .byte	0x2
!         .byte	0x8e	/* DW_CFA_offset, column 0xe */
!         .byte	0x1
  	.byte	0x4	/* DW_CFA_advance_loc4 */
! 	.4byte	.LCFIA-.LCFI9
  	.byte	0xd	/* DW_CFA_def_cfa_register */
  	.byte	0xe	/* uleb128 0xe */
  	.align	2
--- 800,844 ----
  	.byte	0x4	/* DW_CFA_advance_loc4 */
  	.4byte	.LCFI8-.LCFI7
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
! 	.byte	0x8	/* uleb128 0x4 */
  	.byte	0x4	/* DW_CFA_advance_loc4 */
  	.4byte	.LCFI9-.LCFI8
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
+ 	.byte	0xc	/* uleb128 0x4 */
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.4byte	.LCFIA-.LCFI9
+ 	.byte	0xe	/* DW_CFA_def_cfa_offset */
+ 	.byte	0x10	/* uleb128 0x4 */
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.4byte	.LCFIB-.LCFIA
+ 	.byte	0xe	/* DW_CFA_def_cfa_offset */
+ 	.byte	0x14	/* uleb128 0x4 */
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.4byte	.LCFIC-.LCFIB
+ 	.byte	0xe	/* DW_CFA_def_cfa_offset */
+ 	.byte	0x18	/* uleb128 0x4 */
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.4byte	.LCFID-.LCFIC
+ 	.byte	0xe	/* DW_CFA_def_cfa_offset */
  #if defined(__SH4__)
! 	.byte	24+48	/* uleb128 24+48 */
  #else
! 	.byte	24+16	/* uleb128 24+16 */
  #endif
  	.byte	0x91	/* DW_CFA_offset, column 0x11 */
! 	.byte	0x6	/* uleb128 0x6 */
! 	.byte	0x8e	/* DW_CFA_offset, column 0xe */
! 	.byte	0x5	/* uleb128 0x5 */
! 	.byte	0x8b	/* DW_CFA_offset, column 0xb */
! 	.byte	0x4	/* uleb128 0x4 */
! 	.byte	0x8a	/* DW_CFA_offset, column 0xa */
! 	.byte	0x3	/* uleb128 0x3 */
! 	.byte	0x89	/* DW_CFA_offset, column 0x9 */
! 	.byte	0x2	/* uleb128 0x2 */
! 	.byte	0x88	/* DW_CFA_offset, column 0x8 */
! 	.byte	0x1	/* uleb128 0x1 */
  	.byte	0x4	/* DW_CFA_advance_loc4 */
! 	.4byte	.LCFIE-.LCFID
  	.byte	0xd	/* DW_CFA_def_cfa_register */
  	.byte	0xe	/* uleb128 0xe */
  	.align	2
diff -Nrcpad gcc-4.0.2/libffi/src/sh64/ffi.c gcc-4.1.0/libffi/src/sh64/ffi.c
*** gcc-4.0.2/libffi/src/sh64/ffi.c	Fri Jun 13 02:23:26 2003
--- gcc-4.1.0/libffi/src/sh64/ffi.c	Wed Jul 20 23:32:01 2005
***************
*** 1,5 ****
  /* -----------------------------------------------------------------------
!    ffi.c - Copyright (c) 2003 Kaz Kojima
     
     SuperH SHmedia Foreign Function Interface 
  
--- 1,5 ----
  /* -----------------------------------------------------------------------
!    ffi.c - Copyright (c) 2003, 2004 Kaz Kojima
     
     SuperH SHmedia Foreign Function Interface 
  
***************
*** 31,78 ****
  #define NGREGARG 8
  #define NFREGARG 12
  
- /* If the structure has essentialy an unique element, return its type.  */
- static int
- simple_type (ffi_type *arg)
- {
-   if (arg->type != FFI_TYPE_STRUCT)
-     return arg->type;
-   else if (arg->elements[1])
-     return FFI_TYPE_STRUCT;
- 
-   return simple_type (arg->elements[0]);
- }
- 
  static int
  return_type (ffi_type *arg)
  {
-   unsigned short type;
  
    if (arg->type != FFI_TYPE_STRUCT)
      return arg->type;
  
-   type = simple_type (arg->elements[0]);
-   if (! arg->elements[1])
-     {
-       switch (type)
- 	{
- 	case FFI_TYPE_SINT8:
- 	case FFI_TYPE_UINT8:
- 	case FFI_TYPE_SINT16:
- 	case FFI_TYPE_UINT16:
- 	case FFI_TYPE_SINT32:
- 	case FFI_TYPE_UINT32:
- 	case FFI_TYPE_SINT64:
- 	case FFI_TYPE_UINT64:
- 	  return FFI_TYPE_UINT64;
- 
- 	default:
- 	  return type;
- 	}
-     }
- 
    /* gcc uses r2 if the result can be packed in on register.  */
!   if (arg->size <= sizeof (UINT64))
      return FFI_TYPE_UINT64;
  
    return FFI_TYPE_STRUCT;
--- 31,51 ----
  #define NGREGARG 8
  #define NFREGARG 12
  
  static int
  return_type (ffi_type *arg)
  {
  
    if (arg->type != FFI_TYPE_STRUCT)
      return arg->type;
  
    /* gcc uses r2 if the result can be packed in on register.  */
!   if (arg->size <= sizeof (UINT8))
!     return FFI_TYPE_UINT8;
!   else if (arg->size <= sizeof (UINT16))
!     return FFI_TYPE_UINT16;
!   else if (arg->size <= sizeof (UINT32))
!     return FFI_TYPE_UINT32;
!   else if (arg->size <= sizeof (UINT64))
      return FFI_TYPE_UINT64;
  
    return FFI_TYPE_STRUCT;
*************** void ffi_prep_args(char *stack, extended
*** 105,112 ****
--- 78,87 ----
    for (i = 0, p_arg = ecif->cif->arg_types; i < avn; i++, p_arg++, p_argv++)
      {
        size_t z;
+       int align;
  
        z = (*p_arg)->size;
+       align = (*p_arg)->alignment;
        if (z < sizeof (UINT32))
  	{
  	  switch ((*p_arg)->type)
*************** void ffi_prep_args(char *stack, extended
*** 128,134 ****
  	      break;
    
  	    case FFI_TYPE_STRUCT:
! 	      *(UINT64 *) argp = (UINT64) *(UINT32 *)(*p_argv);
  	      break;
  
  	    default:
--- 103,109 ----
  	      break;
    
  	    case FFI_TYPE_STRUCT:
! 	      memcpy (argp, *p_argv, z);
  	      break;
  
  	    default:
*************** void ffi_prep_args(char *stack, extended
*** 136,147 ****
  	    }
  	  argp += sizeof (UINT64);
  	}
!       else if (z == sizeof (UINT32))
  	{
! 	  *(UINT64 *) argp = (UINT64) *(UINT32 *) (*p_argv);
  	  argp += sizeof (UINT64);
  	}
!       else if (z == sizeof (UINT64))
  	{
  	  *(UINT64 *) argp = *(UINT64 *) (*p_argv);
  	  argp += sizeof (UINT64);
--- 111,141 ----
  	    }
  	  argp += sizeof (UINT64);
  	}
!       else if (z == sizeof (UINT32) && align == sizeof (UINT32))
  	{
! 	  switch ((*p_arg)->type)
! 	    {
! 	    case FFI_TYPE_INT:
! 	    case FFI_TYPE_SINT32:
! 	      *(SINT64 *) argp = (SINT64) *(SINT32 *) (*p_argv);
! 	      break;
! 
! 	    case FFI_TYPE_FLOAT:
! 	    case FFI_TYPE_POINTER:
! 	    case FFI_TYPE_UINT32:
! 	    case FFI_TYPE_STRUCT:
! 	      *(UINT64 *) argp = (UINT64) *(UINT32 *) (*p_argv);
! 	      break;
! 
! 	    default:
! 	      FFI_ASSERT(0);
! 	      break;
! 	    }
  	  argp += sizeof (UINT64);
  	}
!       else if (z == sizeof (UINT64)
! 	       && align == sizeof (UINT64)
! 	       && ((int) *p_argv & (sizeof (UINT64) - 1)) == 0)
  	{
  	  *(UINT64 *) argp = *(UINT64 *) (*p_argv);
  	  argp += sizeof (UINT64);
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 254,259 ****
--- 248,254 ----
  	      /*@dependent@*/ void **avalue)
  {
    extended_cif ecif;
+   UINT64 trvalue;
  
    ecif.cif = cif;
    ecif.avalue = avalue;
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 261,267 ****
    /* If the return value is a struct and we don't have a return	*/
    /* value address then we need to make one		        */
  
!   if ((rvalue == NULL) && 
        (cif->rtype->type == FFI_TYPE_STRUCT))
      {
        /*@-sysunrecog@*/
--- 256,265 ----
    /* If the return value is a struct and we don't have a return	*/
    /* value address then we need to make one		        */
  
!   if (cif->rtype->type == FFI_TYPE_STRUCT
!       && return_type (cif->rtype) != FFI_TYPE_STRUCT)
!     ecif.rvalue = &trvalue;
!   else if ((rvalue == NULL) && 
        (cif->rtype->type == FFI_TYPE_STRUCT))
      {
        /*@-sysunrecog@*/
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 283,288 ****
--- 281,291 ----
        FFI_ASSERT(0);
        break;
      }
+ 
+   if (rvalue
+       && cif->rtype->type == FFI_TYPE_STRUCT
+       && return_type (cif->rtype) != FFI_TYPE_STRUCT)
+     memcpy (rvalue, &trvalue, cif->rtype->size);
  }
  
  extern void ffi_closure_SYSV (void);
*************** ffi_closure_helper_SYSV (ffi_closure *cl
*** 353,359 ****
  
    /* Copy the caller's structure return value address so that the closure
       returns the data directly to the caller.  */
!   if (cif->rtype->type == FFI_TYPE_STRUCT)
      {
        rvalue = *pgr;
        greg = 1;
--- 356,362 ----
  
    /* Copy the caller's structure return value address so that the closure
       returns the data directly to the caller.  */
!   if (return_type (cif->rtype) == FFI_TYPE_STRUCT)
      {
        rvalue = *pgr;
        greg = 1;
*************** ffi_closure_helper_SYSV (ffi_closure *cl
*** 443,448 ****
    (closure->fun) (cif, rvalue, avalue, closure->user_data);
  
    /* Tell ffi_closure_SYSV how to perform return type promotions.  */
!   return cif->rtype->type;
  }
  
--- 446,451 ----
    (closure->fun) (cif, rvalue, avalue, closure->user_data);
  
    /* Tell ffi_closure_SYSV how to perform return type promotions.  */
!   return return_type (cif->rtype);
  }
  
diff -Nrcpad gcc-4.0.2/libffi/src/sh64/sysv.S gcc-4.1.0/libffi/src/sh64/sysv.S
*** gcc-4.0.2/libffi/src/sh64/sysv.S	Tue Oct 21 19:01:58 2003
--- gcc-4.1.0/libffi/src/sh64/sysv.S	Wed Jul 20 23:32:01 2005
***************
*** 1,5 ****
  /* -----------------------------------------------------------------------
!    sysv.S - Copyright (c) 2003 Kaz Kojima
     
     SuperH SHmedia Foreign Function Interface 
  
--- 1,5 ----
  /* -----------------------------------------------------------------------
!    sysv.S - Copyright (c) 2003, 2004 Kaz Kojima
     
     SuperH SHmedia Foreign Function Interface 
  
*************** ENTRY(ffi_call_SYSV)
*** 64,71 ****
  	st.q	r15, 8, r28
  	st.l	r15, 4, r18
  	st.l	r15, 0, r14
- 	add.l	r15, r63, r14
  .LCFI1:
  #	add	r4, r63, r28
  	add	r5, r63, r29
  	add	r6, r63, r30
--- 64,72 ----
  	st.q	r15, 8, r28
  	st.l	r15, 4, r18
  	st.l	r15, 0, r14
  .LCFI1:
+ 	add.l	r15, r63, r14
+ .LCFI2:
  #	add	r4, r63, r28
  	add	r5, r63, r29
  	add	r6, r63, r30
*************** ENTRY(ffi_call_SYSV)
*** 252,261 ****
--- 253,269 ----
  	pt/l	.L_epilogue, tr4
  
  	beqi/l	r29, FFI_TYPE_INT, tr0
+ 	beqi/l	r29, FFI_TYPE_UINT32, tr0
  	beqi/l	r29, FFI_TYPE_SINT64, tr1
  	beqi/l	r29, FFI_TYPE_UINT64, tr1
  	beqi/l	r29, FFI_TYPE_DOUBLE, tr2
  	beqi/l	r29, FFI_TYPE_FLOAT, tr3
+ 
+ 	pt/l	.L_ret_q, tr0
+ 	pt/l	.L_ret_h, tr1
+ 
+ 	beqi/l	r29, FFI_TYPE_UINT8, tr0
+ 	beqi/l	r29, FFI_TYPE_UINT16, tr1
  	blink	tr4, r63
  
  .L_ret_d:
*************** ENTRY(ffi_call_SYSV)
*** 270,275 ****
--- 278,291 ----
  	fst.s	r31, OFS_FLT, fr0
  	blink	tr4, r63
  
+ .L_ret_q:
+ 	st.b	r31, 0, r2
+ 	blink	tr4, r63
+ 
+ .L_ret_h:
+ 	st.w	r31, 0, r2
+ 	blink	tr4, r63
+ 
  .L_ret_i:
  	st.l	r31, 0, r2
  	# Fall
*************** ENTRY(ffi_call_SYSV)
*** 297,308 ****
  ENTRY(ffi_closure_SYSV)
  .LFB2:
  	addi.l	r15, -136, r15
! .LCFI2:
  	st.l	r15, 12, r18
  	st.l	r15, 8, r14
  	st.l	r15, 4, r12
  	add	r15, r63, r14
! .LCFI3:
  	/* Stack layout:	
  	   ...
  	   64 bytes (register parameters)
--- 313,325 ----
  ENTRY(ffi_closure_SYSV)
  .LFB2:
  	addi.l	r15, -136, r15
! .LCFI3:
  	st.l	r15, 12, r18
  	st.l	r15, 8, r14
  	st.l	r15, 4, r12
+ .LCFI4:
  	add	r15, r63, r14
! .LCFI5:
  	/* Stack layout:	
  	   ...
  	   64 bytes (register parameters)
*************** __FRAME_BEGIN__:
*** 418,429 ****
  .LSCIE1:
  	.4byte	0x0	/* CIE Identifier Tag */
  	.byte	0x1	/* CIE Version */
  	.ascii "zR\0"	/* CIE Augmentation */
  	.uleb128 0x1	/* CIE Code Alignment Factor */
  	.sleb128 -4	/* CIE Data Alignment Factor */
  	.byte	0x12	/* CIE RA Column */
  	.uleb128 0x1	/* Augmentation size */
! 	.byte	0x1b	/* FDE Encoding (pcrel sdata4) */
  	.byte	0xc	/* DW_CFA_def_cfa */
  	.uleb128 0xf
  	.uleb128 0x0
--- 435,452 ----
  .LSCIE1:
  	.4byte	0x0	/* CIE Identifier Tag */
  	.byte	0x1	/* CIE Version */
+ #ifdef PIC
  	.ascii "zR\0"	/* CIE Augmentation */
+ #else
+ 	.byte	0x0	/* CIE Augmentation */
+ #endif
  	.uleb128 0x1	/* CIE Code Alignment Factor */
  	.sleb128 -4	/* CIE Data Alignment Factor */
  	.byte	0x12	/* CIE RA Column */
+ #ifdef PIC
  	.uleb128 0x1	/* Augmentation size */
! 	.byte	0x10	/* FDE Encoding (pcrel) */
! #endif
  	.byte	0xc	/* DW_CFA_def_cfa */
  	.uleb128 0xf
  	.uleb128 0x0
*************** __FRAME_BEGIN__:
*** 433,440 ****
  	.4byte	datalabel .LEFDE1-datalabel .LASFDE1	/* FDE Length */
  .LASFDE1:
  	.4byte	datalabel .LASFDE1-datalabel __FRAME_BEGIN__
! 	.4byte	datalabel .LFB1-.		/* FDE initial location */
  	.4byte	datalabel .LFE1-datalabel .LFB1	/* FDE address range */
  	.byte	0x4	/* DW_CFA_advance_loc4 */
  	.4byte	datalabel .LCFI0-datalabel .LFB1
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
--- 456,470 ----
  	.4byte	datalabel .LEFDE1-datalabel .LASFDE1	/* FDE Length */
  .LASFDE1:
  	.4byte	datalabel .LASFDE1-datalabel __FRAME_BEGIN__
! #ifdef PIC
! 	.4byte	.LFB1-.	/* FDE initial location */
! #else
! 	.4byte	.LFB1	/* FDE initial location */
! #endif
  	.4byte	datalabel .LFE1-datalabel .LFB1	/* FDE address range */
+ #ifdef PIC
+ 	.uleb128 0x0	/* Augmentation size */
+ #endif
  	.byte	0x4	/* DW_CFA_advance_loc4 */
  	.4byte	datalabel .LCFI0-datalabel .LFB1
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
*************** __FRAME_BEGIN__:
*** 455,460 ****
--- 485,492 ----
  	.uleb128 0x4
  	.byte   0xa0	/* DW_CFA_offset, column 0x20 */
  	.uleb128 0x2
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.4byte	datalabel .LCFI2-datalabel .LCFI1
  	.byte	0xd	/* DW_CFA_def_cfa_register */
  	.uleb128 0xe
  	.align	2
*************** __FRAME_BEGIN__:
*** 464,483 ****
  	.4byte	datalabel .LEFDE3-datalabel .LASFDE3	/* FDE Length */
  .LASFDE3:
  	.4byte	datalabel .LASFDE3-datalabel __FRAME_BEGIN__
! 	.4byte	datalabel .LFB2-.		/* FDE initial location */
  	.4byte	datalabel .LFE2-datalabel .LFB2	/* FDE address range */
  	.byte	0x4	/* DW_CFA_advance_loc4 */
! 	.4byte	datalabel .LCFI2-datalabel .LFB2
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
  	.uleb128 0x88
  	.byte	0x4	/* DW_CFA_advance_loc4 */
! 	.4byte	datalabel .LCFI3-datalabel .LCFI2
  	.byte   0x8c	/* DW_CFA_offset, column 0xc */
  	.uleb128 0x21
  	.byte   0x8e	/* DW_CFA_offset, column 0xe */
  	.uleb128 0x20
  	.byte   0x92	/* DW_CFA_offset, column 0x12 */
  	.uleb128 0x1f
  	.byte	0xd	/* DW_CFA_def_cfa_register */
  	.uleb128 0xe
  	.align	2
--- 496,524 ----
  	.4byte	datalabel .LEFDE3-datalabel .LASFDE3	/* FDE Length */
  .LASFDE3:
  	.4byte	datalabel .LASFDE3-datalabel __FRAME_BEGIN__
! #ifdef PIC
! 	.4byte	.LFB2-.	/* FDE initial location */
! #else
! 	.4byte	.LFB2	/* FDE initial location */
! #endif
  	.4byte	datalabel .LFE2-datalabel .LFB2	/* FDE address range */
+ #ifdef PIC
+ 	.uleb128 0x0	/* Augmentation size */
+ #endif
  	.byte	0x4	/* DW_CFA_advance_loc4 */
! 	.4byte	datalabel .LCFI3-datalabel .LFB2
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
  	.uleb128 0x88
  	.byte	0x4	/* DW_CFA_advance_loc4 */
! 	.4byte	datalabel .LCFI4-datalabel .LCFI3
  	.byte   0x8c	/* DW_CFA_offset, column 0xc */
  	.uleb128 0x21
  	.byte   0x8e	/* DW_CFA_offset, column 0xe */
  	.uleb128 0x20
  	.byte   0x92	/* DW_CFA_offset, column 0x12 */
  	.uleb128 0x1f
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.4byte	datalabel .LCFI5-datalabel .LCFI4
  	.byte	0xd	/* DW_CFA_def_cfa_register */
  	.uleb128 0xe
  	.align	2
diff -Nrcpad gcc-4.0.2/libffi/src/x86/ffi.c gcc-4.1.0/libffi/src/x86/ffi.c
*** gcc-4.0.2/libffi/src/x86/ffi.c	Tue Mar 16 19:17:33 2004
--- gcc-4.1.0/libffi/src/x86/ffi.c	Thu Aug 11 21:18:24 2005
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 241,266 ****
  
  static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
  					 void** args, ffi_cif* cif);
! static void ffi_closure_SYSV (ffi_closure *)
       __attribute__ ((regparm(1)));
! static void ffi_closure_raw_SYSV (ffi_raw_closure *)
       __attribute__ ((regparm(1)));
  
  /* This function is jumped to by the trampoline */
  
! static void
! ffi_closure_SYSV (closure)
       ffi_closure *closure;
  {
-   // this is our return value storage
-   long double    res;
- 
    // our various things...
    ffi_cif       *cif;
    void         **arg_area;
-   unsigned short rtype;
-   void          *resp = (void*)&res;
-   void *args = __builtin_dwarf_cfa ();
  
    cif         = closure->cif;
    arg_area    = (void**) alloca (cif->nargs * sizeof (void*));  
--- 241,264 ----
  
  static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
  					 void** args, ffi_cif* cif);
! void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *)
       __attribute__ ((regparm(1)));
! unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *)
!      __attribute__ ((regparm(1)));
! void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *)
       __attribute__ ((regparm(1)));
  
  /* This function is jumped to by the trampoline */
  
! unsigned int FFI_HIDDEN
! ffi_closure_SYSV_inner (closure, respp, args)
       ffi_closure *closure;
+      void **respp;
+      void *args;
  {
    // our various things...
    ffi_cif       *cif;
    void         **arg_area;
  
    cif         = closure->cif;
    arg_area    = (void**) alloca (cif->nargs * sizeof (void*));  
*************** ffi_closure_SYSV (closure)
*** 271,316 ****
     * a structure, it will re-set RESP to point to the
     * structure return address.  */
  
!   ffi_prep_incoming_args_SYSV(args, (void**)&resp, arg_area, cif);
!   
!   (closure->fun) (cif, resp, arg_area, closure->user_data);
  
!   rtype = cif->flags;
  
!   /* now, do a generic return based on the value of rtype */
!   if (rtype == FFI_TYPE_INT)
!     {
!       asm ("movl (%0),%%eax" : : "r" (resp) : "eax");
!     }
!   else if (rtype == FFI_TYPE_FLOAT)
!     {
!       asm ("flds (%0)" : : "r" (resp) : "st" );
!     }
!   else if (rtype == FFI_TYPE_DOUBLE)
!     {
!       asm ("fldl (%0)" : : "r" (resp) : "st", "st(1)" );
!     }
!   else if (rtype == FFI_TYPE_LONGDOUBLE)
!     {
!       asm ("fldt (%0)" : : "r" (resp) : "st", "st(1)" );
!     }
!   else if (rtype == FFI_TYPE_SINT64)
!     {
!       asm ("movl 0(%0),%%eax;"
! 	   "movl 4(%0),%%edx" 
! 	   : : "r"(resp)
! 	   : "eax", "edx");
!     }
! #ifdef X86_WIN32
!   else if (rtype == FFI_TYPE_SINT8) /* 1-byte struct  */
!     {
!       asm ("movsbl (%0),%%eax" : : "r" (resp) : "eax");
!     }
!   else if (rtype == FFI_TYPE_SINT16) /* 2-bytes struct */
!     {
!       asm ("movswl (%0),%%eax" : : "r" (resp) : "eax");
!     }
! #endif
  }
  
  /*@-exportheader@*/
--- 269,279 ----
     * a structure, it will re-set RESP to point to the
     * structure return address.  */
  
!   ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif);
  
!   (closure->fun) (cif, *respp, arg_area, closure->user_data);
  
!   return cif->flags;
  }
  
  /*@-exportheader@*/
*************** ffi_prep_closure (ffi_closure* closure,
*** 394,450 ****
  
  #if !FFI_NO_RAW_API
  
- static void
- ffi_closure_raw_SYSV (closure)
-      ffi_raw_closure *closure;
- {
-   // this is our return value storage
-   long double    res;
- 
-   // our various things...
-   ffi_raw         *raw_args;
-   ffi_cif         *cif;
-   unsigned short   rtype;
-   void            *resp = (void*)&res;
- 
-   /* get the cif */
-   cif = closure->cif;
- 
-   /* the SYSV/X86 abi matches the RAW API exactly, well.. almost */
-   raw_args = (ffi_raw*) __builtin_dwarf_cfa ();
- 
-   (closure->fun) (cif, resp, raw_args, closure->user_data);
- 
-   rtype = cif->flags;
- 
-   /* now, do a generic return based on the value of rtype */
-   if (rtype == FFI_TYPE_INT)
-     {
-       asm ("movl (%0),%%eax" : : "r" (resp) : "eax");
-     }
-   else if (rtype == FFI_TYPE_FLOAT)
-     {
-       asm ("flds (%0)" : : "r" (resp) : "st" );
-     }
-   else if (rtype == FFI_TYPE_DOUBLE)
-     {
-       asm ("fldl (%0)" : : "r" (resp) : "st", "st(1)" );
-     }
-   else if (rtype == FFI_TYPE_LONGDOUBLE)
-     {
-       asm ("fldt (%0)" : : "r" (resp) : "st", "st(1)" );
-     }
-   else if (rtype == FFI_TYPE_SINT64)
-     {
-       asm ("movl 0(%0),%%eax; movl 4(%0),%%edx" 
- 	   : : "r"(resp)
- 	   : "eax", "edx");
-     }
- }
- 
-  
- 
- 
  ffi_status
  ffi_prep_raw_closure (ffi_raw_closure* closure,
  		      ffi_cif* cif,
--- 357,362 ----
diff -Nrcpad gcc-4.0.2/libffi/src/x86/ffi64.c gcc-4.1.0/libffi/src/x86/ffi64.c
*** gcc-4.0.2/libffi/src/x86/ffi64.c	Sat Dec 25 09:54:40 2004
--- gcc-4.1.0/libffi/src/x86/ffi64.c	Thu May  5 04:06:38 2005
*************** struct register_args
*** 42,48 ****
  };
  
  extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
! 			     void *raddr, void (*fnaddr)());
  
  /* All reference to register classes here is identical to the code in
     gcc/config/i386/i386.c. Do *not* change one without the other.  */
--- 42,48 ----
  };
  
  extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
! 			     void *raddr, void (*fnaddr)(), unsigned ssecount);
  
  /* All reference to register classes here is identical to the code in
     gcc/config/i386/i386.c. Do *not* change one without the other.  */
*************** ffi_prep_cif_machdep (ffi_cif *cif)
*** 303,312 ****
  	  else if (sse0 && sse1)
  	    flags |= 1 << 10;
  	  /* Mark the true size of the structure.  */
! 	  flags |= cif->rtype->size << 11;
  	}
      }
-   cif->flags = flags;
  
    /* Go over all arguments and determine the way they should be passed.
       If it's in a register and there is space for it, let that be so. If
--- 303,311 ----
  	  else if (sse0 && sse1)
  	    flags |= 1 << 10;
  	  /* Mark the true size of the structure.  */
! 	  flags |= cif->rtype->size << 12;
  	}
      }
  
    /* Go over all arguments and determine the way they should be passed.
       If it's in a register and there is space for it, let that be so. If
*************** ffi_prep_cif_machdep (ffi_cif *cif)
*** 331,336 ****
--- 330,338 ----
  	  ssecount += nsse;
  	}
      }
+   if (ssecount)
+     flags |= 1 << 11;
+   cif->flags = flags;
    cif->bytes = bytes;
  
    return FFI_OK;
*************** ffi_call (ffi_cif *cif, void (*fn)(), vo
*** 353,359 ****
       address then we need to make one.  Note the setting of flags to
       VOID above in ffi_prep_cif_machdep.  */
    ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT
! 		   && cif->flags == FFI_TYPE_VOID);
    if (rvalue == NULL && ret_in_memory)
      rvalue = alloca (cif->rtype->size);
  
--- 355,361 ----
       address then we need to make one.  Note the setting of flags to
       VOID above in ffi_prep_cif_machdep.  */
    ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT
! 		   && (cif->flags & 0xff) == FFI_TYPE_VOID);
    if (rvalue == NULL && ret_in_memory)
      rvalue = alloca (cif->rtype->size);
  
*************** ffi_call (ffi_cif *cif, void (*fn)(), vo
*** 424,430 ****
      }
  
    ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args),
! 		   cif->flags, rvalue, fn);
  }
  
  
--- 426,432 ----
      }
  
    ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args),
! 		   cif->flags, rvalue, fn, ssecount);
  }
  
  
*************** ffi_prep_closure (ffi_closure* closure,
*** 439,451 ****
    volatile unsigned short *tramp;
  
    tramp = (volatile unsigned short *) &closure->tramp[0];
    tramp[0] = 0xbb49;		/* mov <code>, %r11	*/
-   tramp[5] = 0xba49;		/* mov <data>, %r10	*/
-   tramp[10] = 0xff49;		/* jmp *%r11	*/
-   tramp[11] = 0x00e3;
    *(void * volatile *) &tramp[1] = ffi_closure_unix64;
    *(void * volatile *) &tramp[6] = closure;
  
    closure->cif = cif;
    closure->fun = fun;
    closure->user_data = user_data;
--- 441,458 ----
    volatile unsigned short *tramp;
  
    tramp = (volatile unsigned short *) &closure->tramp[0];
+ 
    tramp[0] = 0xbb49;		/* mov <code>, %r11	*/
    *(void * volatile *) &tramp[1] = ffi_closure_unix64;
+   tramp[5] = 0xba49;		/* mov <data>, %r10	*/
    *(void * volatile *) &tramp[6] = closure;
  
+   /* Set the carry bit iff the function uses any sse registers.
+      This is clc or stc, together with the first byte of the jmp.  */
+   tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8;
+ 
+   tramp[11] = 0xe3ff;			/* jmp *%r11    */
+ 
    closure->cif = cif;
    closure->fun = fun;
    closure->user_data = user_data;
diff -Nrcpad gcc-4.0.2/libffi/src/x86/sysv.S gcc-4.1.0/libffi/src/x86/sysv.S
*** gcc-4.0.2/libffi/src/x86/sysv.S	Tue Oct 21 19:01:58 2003
--- gcc-4.1.0/libffi/src/x86/sysv.S	Thu Aug 11 21:18:24 2005
***************
*** 1,5 ****
  /* -----------------------------------------------------------------------
!    sysv.S - Copyright (c) 1996, 1998, 2001, 2002, 2003  Red Hat, Inc.
     
     X86 Foreign Function Interface 
  
--- 1,5 ----
  /* -----------------------------------------------------------------------
!    sysv.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005  Red Hat, Inc.
     
     X86 Foreign Function Interface 
  
*************** epilogue:
*** 130,135 ****
--- 130,264 ----
  .ffi_call_SYSV_end:
          .size    ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV
  
+ 	.align	4
+ FFI_HIDDEN (ffi_closure_SYSV)
+ .globl ffi_closure_SYSV
+ 	.type	ffi_closure_SYSV, @function
+ 
+ ffi_closure_SYSV:
+ .LFB2:
+ 	pushl	%ebp
+ .LCFI2:
+ 	movl	%esp, %ebp
+ .LCFI3:
+ 	subl	$40, %esp
+ 	leal	-24(%ebp), %edx
+ 	movl	%edx, -12(%ebp)	/* resp */
+ 	leal	8(%ebp), %edx
+ 	movl	%edx, 4(%esp)	/* args = __builtin_dwarf_cfa () */
+ 	leal	-12(%ebp), %edx
+ 	movl	%edx, (%esp)	/* &resp */
+ #if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__
+ 	call	ffi_closure_SYSV_inner
+ #else
+ 	movl	%ebx, 8(%esp)
+ .LCFI7:
+ 	call	1f
+ 1:	popl	%ebx
+ 	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
+ 	call	ffi_closure_SYSV_inner@PLT
+ 	movl	8(%esp), %ebx
+ #endif
+ 	movl	-12(%ebp), %ecx
+ 	cmpl	$FFI_TYPE_INT, %eax
+ 	je	.Lcls_retint
+ 	cmpl	$FFI_TYPE_FLOAT, %eax
+ 	je	.Lcls_retfloat
+ 	cmpl	$FFI_TYPE_DOUBLE, %eax
+ 	je	.Lcls_retdouble
+ 	cmpl	$FFI_TYPE_LONGDOUBLE, %eax
+ 	je	.Lcls_retldouble
+ 	cmpl	$FFI_TYPE_SINT64, %eax
+ 	je	.Lcls_retllong
+ .Lcls_epilogue:
+ 	movl	%ebp, %esp
+ 	popl	%ebp
+ 	ret
+ .Lcls_retint:
+ 	movl	(%ecx), %eax
+ 	jmp	.Lcls_epilogue
+ .Lcls_retfloat:
+ 	flds	(%ecx)
+ 	jmp	.Lcls_epilogue
+ .Lcls_retdouble:
+ 	fldl	(%ecx)
+ 	jmp	.Lcls_epilogue
+ .Lcls_retldouble:
+ 	fldt	(%ecx)
+ 	jmp	.Lcls_epilogue
+ .Lcls_retllong:
+ 	movl	(%ecx), %eax
+ 	movl	4(%ecx), %edx
+ 	jmp	.Lcls_epilogue
+ .LFE2:
+ 	.size	ffi_closure_SYSV, .-ffi_closure_SYSV
+ 
+ #if !FFI_NO_RAW_API
+ 
+ #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3)
+ #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
+ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
+ #define CIF_FLAGS_OFFSET 20
+ 
+ 	.align	4
+ FFI_HIDDEN (ffi_closure_raw_SYSV)
+ .globl ffi_closure_raw_SYSV
+ 	.type	ffi_closure_raw_SYSV, @function
+ 
+ ffi_closure_raw_SYSV:
+ .LFB3:
+ 	pushl	%ebp
+ .LCFI4:
+ 	movl	%esp, %ebp
+ .LCFI5:
+ 	pushl	%esi
+ .LCFI6:
+ 	subl	$36, %esp
+ 	movl	RAW_CLOSURE_CIF_OFFSET(%eax), %esi	 /* closure->cif */
+ 	movl	RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
+ 	movl	%edx, 12(%esp)	/* user_data */
+ 	leal	8(%ebp), %edx	/* __builtin_dwarf_cfa () */
+ 	movl	%edx, 8(%esp)	/* raw_args */
+ 	leal	-24(%ebp), %edx
+ 	movl	%edx, 4(%esp)	/* &res */
+ 	movl	%esi, (%esp)	/* cif */
+ 	call	*RAW_CLOSURE_FUN_OFFSET(%eax)		 /* closure->fun */
+ 	movl	CIF_FLAGS_OFFSET(%esi), %eax		 /* rtype */
+ 	cmpl	$FFI_TYPE_INT, %eax
+ 	je	.Lrcls_retint
+ 	cmpl	$FFI_TYPE_FLOAT, %eax
+ 	je	.Lrcls_retfloat
+ 	cmpl	$FFI_TYPE_DOUBLE, %eax
+ 	je	.Lrcls_retdouble
+ 	cmpl	$FFI_TYPE_LONGDOUBLE, %eax
+ 	je	.Lrcls_retldouble
+ 	cmpl	$FFI_TYPE_SINT64, %eax
+ 	je	.Lrcls_retllong
+ .Lrcls_epilogue:
+ 	addl	$36, %esp
+ 	popl	%esi
+ 	popl	%ebp
+ 	ret
+ .Lrcls_retint:
+ 	movl	-24(%ebp), %eax
+ 	jmp	.Lrcls_epilogue
+ .Lrcls_retfloat:
+ 	flds	-24(%ebp)
+ 	jmp	.Lrcls_epilogue
+ .Lrcls_retdouble:
+ 	fldl	-24(%ebp)
+ 	jmp	.Lrcls_epilogue
+ .Lrcls_retldouble:
+ 	fldt	-24(%ebp)
+ 	jmp	.Lrcls_epilogue
+ .Lrcls_retllong:
+ 	movl	-24(%ebp), %eax
+ 	movl	-20(%ebp), %edx
+ 	jmp	.Lrcls_epilogue
+ .LFE3:
+ 	.size	ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV
+ #endif
+ 
  	.section	.eh_frame,EH_FRAME_FLAGS,@progbits
  .Lframe1:
  	.long	.LECIE1-.LSCIE1	/* Length of Common Information Entry */
*************** epilogue:
*** 180,184 ****
--- 309,378 ----
  	.byte	0x5	/* .uleb128 0x5 */
  	.align 4
  .LEFDE1:
+ .LSFDE2:
+ 	.long	.LEFDE2-.LASFDE2	/* FDE Length */
+ .LASFDE2:
+ 	.long	.LASFDE2-.Lframe1	/* FDE CIE offset */
+ #ifdef __PIC__
+ 	.long	.LFB2-.	/* FDE initial location */
+ #else
+ 	.long	.LFB2
+ #endif
+ 	.long	.LFE2-.LFB2	/* FDE address range */
+ #ifdef __PIC__
+ 	.byte	0x0	/* .uleb128 0x0; Augmentation size */
+ #endif
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI2-.LFB2
+ 	.byte	0xe	/* DW_CFA_def_cfa_offset */
+ 	.byte	0x8	/* .uleb128 0x8 */
+ 	.byte	0x85	/* DW_CFA_offset, column 0x5 */
+ 	.byte	0x2	/* .uleb128 0x2 */
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI3-.LCFI2
+ 	.byte	0xd	/* DW_CFA_def_cfa_register */
+ 	.byte	0x5	/* .uleb128 0x5 */
+ #if !defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE && defined __PIC__
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI7-.LCFI3
+ 	.byte	0x83	/* DW_CFA_offset, column 0x3 */
+ 	.byte	0xa	/* .uleb128 0xa */
+ #endif
+ 	.align 4
+ .LEFDE2:
+ 
+ #if !FFI_NO_RAW_API
+ 
+ .LSFDE3:
+ 	.long	.LEFDE3-.LASFDE3	/* FDE Length */
+ .LASFDE3:
+ 	.long	.LASFDE3-.Lframe1	/* FDE CIE offset */
+ #ifdef __PIC__
+ 	.long	.LFB3-.	/* FDE initial location */
+ #else
+ 	.long	.LFB3
+ #endif
+ 	.long	.LFE3-.LFB3	/* FDE address range */
+ #ifdef __PIC__
+ 	.byte	0x0	/* .uleb128 0x0; Augmentation size */
+ #endif
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI4-.LFB3
+ 	.byte	0xe	/* DW_CFA_def_cfa_offset */
+ 	.byte	0x8	/* .uleb128 0x8 */
+ 	.byte	0x85	/* DW_CFA_offset, column 0x5 */
+ 	.byte	0x2	/* .uleb128 0x2 */
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI5-.LCFI4
+ 	.byte	0xd	/* DW_CFA_def_cfa_register */
+ 	.byte	0x5	/* .uleb128 0x5 */
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI6-.LCFI5
+ 	.byte	0x86	/* DW_CFA_offset, column 0x6 */
+ 	.byte	0x3	/* .uleb128 0x3 */
+ 	.align 4
+ .LEFDE3:
+ 
+ #endif
  
  #endif /* ifndef __x86_64__ */
diff -Nrcpad gcc-4.0.2/libffi/src/x86/unix64.S gcc-4.1.0/libffi/src/x86/unix64.S
*** gcc-4.0.2/libffi/src/x86/unix64.S	Mon Dec 27 09:20:10 2004
--- gcc-4.1.0/libffi/src/x86/unix64.S	Thu May  5 04:06:38 2005
***************
*** 31,37 ****
  .text
  
  /* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
!                     void *raddr, void (*fnaddr)());
  
     Bit o trickiness here -- ARGS+BYTES is the base of the stack frame
     for this function.  This has been allocated by ffi_call.  We also
--- 31,37 ----
  .text
  
  /* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
! 	            void *raddr, void (*fnaddr)());
  
     Bit o trickiness here -- ARGS+BYTES is the base of the stack frame
     for this function.  This has been allocated by ffi_call.  We also
***************
*** 39,45 ****
  
  	.align	2
  	.globl	ffi_call_unix64
!         .type	ffi_call_unix64,@function
  
  ffi_call_unix64:
  .LUW0:
--- 39,45 ----
  
  	.align	2
  	.globl	ffi_call_unix64
! 	.type	ffi_call_unix64,@function
  
  ffi_call_unix64:
  .LUW0:
*************** ffi_call_unix64:
*** 53,58 ****
--- 53,59 ----
  .LUW1:
  	movq	%rdi, %r10		/* Save a copy of the register area. */
  	movq	%r8, %r11		/* Save a copy of the target fn.  */
+ 	movl	%r9d, %eax		/* Set number of SSE registers.  */
  
  	/* Load up all argument registers.  */
  	movq	(%r10), %rdi
*************** ffi_call_unix64:
*** 61,74 ****
  	movq	24(%r10), %rcx
  	movq	32(%r10), %r8
  	movq	40(%r10), %r9
! 	movdqa	48(%r10), %xmm0
! 	movdqa	64(%r10), %xmm1
! 	movdqa	80(%r10), %xmm2
! 	movdqa	96(%r10), %xmm3
! 	movdqa	112(%r10), %xmm4
! 	movdqa	128(%r10), %xmm5
! 	movdqa	144(%r10), %xmm6
! 	movdqa	160(%r10), %xmm7
  
  	/* Deallocate the reg arg area.  */
  	leaq	176(%r10), %rsp
--- 62,70 ----
  	movq	24(%r10), %rcx
  	movq	32(%r10), %r8
  	movq	40(%r10), %r9
! 	testl	%eax, %eax
! 	jnz	.Lload_sse
! .Lret_from_load_sse:
  
  	/* Deallocate the reg arg area.  */
  	leaq	176(%r10), %rsp
*************** ffi_call_unix64:
*** 181,217 ****
  	movq	%rax, (%rsi)
  	movq	%rdx, 8(%rsi)
  
! 	/* Bits 11-31 contain the true size of the structure.  Copy from
  	   the scratch area to the true destination.  */
! 	shrl	$11, %ecx
  	rep movsb
  	ret
  .LUW3:
  	.size    ffi_call_unix64,.-ffi_call_unix64
  
  	.align	2
  	.globl ffi_closure_unix64
!         .type	ffi_closure_unix64,@function
  
  ffi_closure_unix64:
- .LUW4:
- 	subq	$200, %rsp
  .LUW5:
! 
  	movq	%rdi, (%rsp)
!         movq    %rsi, 8(%rsp)
!         movq    %rdx, 16(%rsp)
!         movq    %rcx, 24(%rsp)
!         movq    %r8, 32(%rsp)
!         movq    %r9, 40(%rsp)
! 	movdqa	%xmm0, 48(%rsp)
! 	movdqa	%xmm1, 64(%rsp)
! 	movdqa	%xmm2, 80(%rsp)
! 	movdqa	%xmm3, 96(%rsp)
! 	movdqa	%xmm4, 112(%rsp)
! 	movdqa	%xmm5, 128(%rsp)
! 	movdqa	%xmm6, 144(%rsp)
! 	movdqa	%xmm7, 160(%rsp)
  
  	movq	%r10, %rdi
  	leaq	176(%rsp), %rsi
--- 177,225 ----
  	movq	%rax, (%rsi)
  	movq	%rdx, 8(%rsi)
  
! 	/* Bits 12-31 contain the true size of the structure.  Copy from
  	   the scratch area to the true destination.  */
! 	shrl	$12, %ecx
  	rep movsb
  	ret
+ 
+ 	/* Many times we can avoid loading any SSE registers at all.
+ 	   It's not worth an indirect jump to load the exact set of
+ 	   SSE registers needed; zero or all is a good compromise.  */
+ 	.align 2
  .LUW3:
+ .Lload_sse:
+ 	movdqa	48(%r10), %xmm0
+ 	movdqa	64(%r10), %xmm1
+ 	movdqa	80(%r10), %xmm2
+ 	movdqa	96(%r10), %xmm3
+ 	movdqa	112(%r10), %xmm4
+ 	movdqa	128(%r10), %xmm5
+ 	movdqa	144(%r10), %xmm6
+ 	movdqa	160(%r10), %xmm7
+ 	jmp	.Lret_from_load_sse
+ 
+ .LUW4:
  	.size    ffi_call_unix64,.-ffi_call_unix64
  
  	.align	2
  	.globl ffi_closure_unix64
! 	.type	ffi_closure_unix64,@function
  
  ffi_closure_unix64:
  .LUW5:
! 	/* The carry flag is set by the trampoline iff SSE registers
! 	   are used.  Don't clobber it before the branch instruction.  */
! 	leaq    -200(%rsp), %rsp
! .LUW6:
  	movq	%rdi, (%rsp)
! 	movq    %rsi, 8(%rsp)
! 	movq    %rdx, 16(%rsp)
! 	movq    %rcx, 24(%rsp)
! 	movq    %r8, 32(%rsp)
! 	movq    %r9, 40(%rsp)
! 	jc      .Lsave_sse
! .Lret_from_save_sse:
  
  	movq	%r10, %rdi
  	leaq	176(%rsp), %rsi
*************** ffi_closure_unix64:
*** 221,227 ****
  
  	/* Deallocate stack frame early; return value is now in redzone.  */
  	addq	$200, %rsp
! .LUW6:
  
  	/* The first byte of the return value contains the FFI_TYPE.  */
  	movzbl	%al, %r10d
--- 229,235 ----
  
  	/* Deallocate stack frame early; return value is now in redzone.  */
  	addq	$200, %rsp
! .LUW7:
  
  	/* The first byte of the return value contains the FFI_TYPE.  */
  	movzbl	%al, %r10d
*************** ffi_closure_unix64:
*** 300,306 ****
  	movq	-24(%rsp), %rax
  	cmovnz	%rdx, %rax
  	ret
! .LUW7:
  	.size	ffi_closure_unix64,.-ffi_closure_unix64
  
  	.section	.eh_frame,"a",@progbits
--- 308,329 ----
  	movq	-24(%rsp), %rax
  	cmovnz	%rdx, %rax
  	ret
! 
! 	/* See the comment above .Lload_sse; the same logic applies here.  */
! 	.align 2
! .LUW8:
! .Lsave_sse:
! 	movdqa	%xmm0, 48(%rsp)
! 	movdqa	%xmm1, 64(%rsp)
! 	movdqa	%xmm2, 80(%rsp)
! 	movdqa	%xmm3, 96(%rsp)
! 	movdqa	%xmm4, 112(%rsp)
! 	movdqa	%xmm5, 128(%rsp)
! 	movdqa	%xmm6, 144(%rsp)
! 	movdqa	%xmm7, 160(%rsp)
! 	jmp	.Lret_from_save_sse
! 
! .LUW9:
  	.size	ffi_closure_unix64,.-ffi_closure_unix64
  
  	.section	.eh_frame,"a",@progbits
*************** ffi_closure_unix64:
*** 327,350 ****
  .LASFDE1:
  	.long	.LASFDE1-.Lframe1	/* FDE CIE offset */
  	.long	.LUW0-.			/* FDE initial location */
! 	.long	.LUW3-.LUW0		/* FDE address range */
  	.uleb128 0x0			/* Augmentation size */
  
  	.byte	0x4			/* DW_CFA_advance_loc4 */
  	.long	.LUW1-.LUW0
  
!         /* New stack frame based off rbp.  This is a itty bit of unwind
!            trickery in that the CFA *has* changed.  There is no easy way
!            to describe it correctly on entry to the function.  Fortunately,
!            it doesn't matter too much since at all points we can correctly
!            unwind back to ffi_call.  Note that the location to which we
!            moved the return address is (the new) CFA-8, so from the
!            perspective of the unwind info, it hasn't moved.  */
  	.byte	0xc			/* DW_CFA_def_cfa, %rbp offset 32 */
  	.uleb128 6
  	.uleb128 32
  	.byte	0x80+6			/* DW_CFA_offset, %rbp offset 2*-8 */
  	.uleb128 2
  
  	.byte	0x4			/* DW_CFA_advance_loc4 */
  	.long	.LUW2-.LUW1
--- 350,374 ----
  .LASFDE1:
  	.long	.LASFDE1-.Lframe1	/* FDE CIE offset */
  	.long	.LUW0-.			/* FDE initial location */
! 	.long	.LUW4-.LUW0		/* FDE address range */
  	.uleb128 0x0			/* Augmentation size */
  
  	.byte	0x4			/* DW_CFA_advance_loc4 */
  	.long	.LUW1-.LUW0
  
! 	/* New stack frame based off rbp.  This is a itty bit of unwind
! 	   trickery in that the CFA *has* changed.  There is no easy way
! 	   to describe it correctly on entry to the function.  Fortunately,
! 	   it doesn't matter too much since at all points we can correctly
! 	   unwind back to ffi_call.  Note that the location to which we
! 	   moved the return address is (the new) CFA-8, so from the
! 	   perspective of the unwind info, it hasn't moved.  */
  	.byte	0xc			/* DW_CFA_def_cfa, %rbp offset 32 */
  	.uleb128 6
  	.uleb128 32
  	.byte	0x80+6			/* DW_CFA_offset, %rbp offset 2*-8 */
  	.uleb128 2
+ 	.byte	0xa			/* DW_CFA_remember_state */
  
  	.byte	0x4			/* DW_CFA_advance_loc4 */
  	.long	.LUW2-.LUW1
*************** ffi_closure_unix64:
*** 352,374 ****
  	.uleb128 7
  	.uleb128 8
  	.byte	0xc0+6			/* DW_CFA_restore, %rbp */
  	.align 8
  .LEFDE1:
  .LSFDE3:
  	.long	.LEFDE3-.LASFDE3	/* FDE Length */
  .LASFDE3:
  	.long	.LASFDE3-.Lframe1	/* FDE CIE offset */
! 	.long	.LUW4-.			/* FDE initial location */
! 	.long	.LUW7-.LUW4		/* FDE address range */
  	.uleb128 0x0			/* Augmentation size */
  	.byte	0x4			/* DW_CFA_advance_loc4 */
! 	.long	.LUW5-.LUW4
  	.byte	0xe			/* DW_CFA_def_cfa_offset */
  	.uleb128 208
  	.byte	0x4			/* DW_CFA_advance_loc4 */
! 	.long	.LUW6-.LUW5
  	.byte	0xe			/* DW_CFA_def_cfa_offset */
  	.uleb128 8
  	.align 8
  .LEFDE3:
  
--- 376,411 ----
  	.uleb128 7
  	.uleb128 8
  	.byte	0xc0+6			/* DW_CFA_restore, %rbp */
+ 
+ 	.byte	0x4			/* DW_CFA_advance_loc4 */
+ 	.long	.LUW3-.LUW2
+ 	.byte	0xb			/* DW_CFA_restore_state */
+ 
  	.align 8
  .LEFDE1:
  .LSFDE3:
  	.long	.LEFDE3-.LASFDE3	/* FDE Length */
  .LASFDE3:
  	.long	.LASFDE3-.Lframe1	/* FDE CIE offset */
! 	.long	.LUW5-.			/* FDE initial location */
! 	.long	.LUW9-.LUW5		/* FDE address range */
  	.uleb128 0x0			/* Augmentation size */
+ 
  	.byte	0x4			/* DW_CFA_advance_loc4 */
! 	.long	.LUW6-.LUW5
  	.byte	0xe			/* DW_CFA_def_cfa_offset */
  	.uleb128 208
+ 	.byte	0xa			/* DW_CFA_remember_state */
+ 
  	.byte	0x4			/* DW_CFA_advance_loc4 */
! 	.long	.LUW7-.LUW6
  	.byte	0xe			/* DW_CFA_def_cfa_offset */
  	.uleb128 8
+ 
+ 	.byte	0x4			/* DW_CFA_advance_loc4 */
+ 	.long	.LUW8-.LUW7
+ 	.byte	0xb			/* DW_CFA_restore_state */
+ 
  	.align 8
  .LEFDE3:
  
diff -Nrcpad gcc-4.0.2/libffi/src/x86/win32.S gcc-4.1.0/libffi/src/x86/win32.S
*** gcc-4.0.2/libffi/src/x86/win32.S	Tue Mar 16 19:17:33 2004
--- gcc-4.1.0/libffi/src/x86/win32.S	Thu Aug 11 21:18:24 2005
*************** sc_epilogue:
*** 257,259 ****
--- 257,373 ----
          ret
  
  .ffi_call_STDCALL_end:
+ 
+ 	.globl _ffi_closure_SYSV
+ _ffi_closure_SYSV:
+ 	pushl	%ebp
+ 	movl	%esp, %ebp
+ 	subl	$40, %esp
+ 	leal	-24(%ebp), %edx
+ 	movl	%edx, -12(%ebp)	/* resp */
+ 	leal	8(%ebp), %edx
+ 	movl	%edx, 4(%esp)	/* args = __builtin_dwarf_cfa () */
+ 	leal	-12(%ebp), %edx
+ 	movl	%edx, (%esp)	/* &resp */
+ 	call	_ffi_closure_SYSV_inner
+ 	movl	-12(%ebp), %ecx
+ 	cmpl	$FFI_TYPE_INT, %eax
+ 	je	.Lcls_retint
+ 	cmpl	$FFI_TYPE_FLOAT, %eax
+ 	je	.Lcls_retfloat
+ 	cmpl	$FFI_TYPE_DOUBLE, %eax
+ 	je	.Lcls_retdouble
+ 	cmpl	$FFI_TYPE_LONGDOUBLE, %eax
+ 	je	.Lcls_retldouble
+ 	cmpl	$FFI_TYPE_SINT64, %eax
+ 	je	.Lcls_retllong
+ 	cmpl	$FFI_TYPE_SINT8, %eax	/* 1-byte struct */
+ 	je	.Lcls_retstruct1
+ 	cmpl	$FFI_TYPE_SINT16, %eax	/* 2-bytes struct */
+ 	je	.Lcls_retstruct2
+ .Lcls_epilogue:
+ 	movl	%ebp, %esp
+ 	popl	%ebp
+ 	ret
+ .Lcls_retint:
+ 	movl	(%ecx), %eax
+ 	jmp	.Lcls_epilogue
+ .Lcls_retfloat:
+ 	flds	(%ecx)
+ 	jmp	.Lcls_epilogue
+ .Lcls_retdouble:
+ 	fldl	(%ecx)
+ 	jmp	.Lcls_epilogue
+ .Lcls_retldouble:
+ 	fldt	(%ecx)
+ 	jmp	.Lcls_epilogue
+ .Lcls_retllong:
+ 	movl	(%ecx), %eax
+ 	movl	4(%ecx), %edx
+ 	jmp	.Lcls_epilogue
+ .Lcls_retstruct1:
+ 	movsbl	(%ecx), %eax
+ 	jmp	.Lcls_epilogue
+ .Lcls_retstruct2:
+ 	movswl	(%ecx), %eax
+ 	jmp	.Lcls_epilogue
+ .ffi_closure_SYSV_end:
+ 
+ #if !FFI_NO_RAW_API
+ 
+ #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3)
+ #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
+ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
+ #define CIF_FLAGS_OFFSET 20
+ 
+ 	.balign	16
+ 	.globl _ffi_closure_raw_SYSV
+ _ffi_closure_raw_SYSV:
+ 	pushl	%ebp
+ 	movl	%esp, %ebp
+ 	pushl	%esi
+ 	subl	$36, %esp
+ 	movl	RAW_CLOSURE_CIF_OFFSET(%eax), %esi	 /* closure->cif */
+ 	movl	RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
+ 	movl	%edx, 12(%esp)	/* user_data */
+ 	leal	8(%ebp), %edx	/* __builtin_dwarf_cfa () */
+ 	movl	%edx, 8(%esp)	/* raw_args */
+ 	leal	-24(%ebp), %edx
+ 	movl	%edx, 4(%esp)	/* &res */
+ 	movl	%esi, (%esp)	/* cif */
+ 	call	*RAW_CLOSURE_FUN_OFFSET(%eax)		 /* closure->fun */
+ 	movl	CIF_FLAGS_OFFSET(%esi), %eax		 /* rtype */
+ 	cmpl	$FFI_TYPE_INT, %eax
+ 	je	.Lrcls_retint
+ 	cmpl	$FFI_TYPE_FLOAT, %eax
+ 	je	.Lrcls_retfloat
+ 	cmpl	$FFI_TYPE_DOUBLE, %eax
+ 	je	.Lrcls_retdouble
+ 	cmpl	$FFI_TYPE_LONGDOUBLE, %eax
+ 	je	.Lrcls_retldouble
+ 	cmpl	$FFI_TYPE_SINT64, %eax
+ 	je	.Lrcls_retllong
+ .Lrcls_epilogue:
+ 	addl	$36, %esp
+ 	popl	%esi
+ 	popl	%ebp
+ 	ret
+ .Lrcls_retint:
+ 	movl	-24(%ebp), %eax
+ 	jmp	.Lrcls_epilogue
+ .Lrcls_retfloat:
+ 	flds	-24(%ebp)
+ 	jmp	.Lrcls_epilogue
+ .Lrcls_retdouble:
+ 	fldl	-24(%ebp)
+ 	jmp	.Lrcls_epilogue
+ .Lrcls_retldouble:
+ 	fldt	-24(%ebp)
+ 	jmp	.Lrcls_epilogue
+ .Lrcls_retllong:
+ 	movl	-24(%ebp), %eax
+ 	movl	-20(%ebp), %edx
+ 	jmp	.Lrcls_epilogue
+ .ffi_closure_raw_SYSV_end:
+ 
+ #endif
diff -Nrcpad gcc-4.0.2/libffi/testsuite/Makefile.in gcc-4.1.0/libffi/testsuite/Makefile.in
*** gcc-4.0.2/libffi/testsuite/Makefile.in	Thu Dec  2 11:05:09 2004
--- gcc-4.1.0/libffi/testsuite/Makefile.in	Tue Jul 19 21:15:36 2005
*************** target_triplet = @target@
*** 39,48 ****
  subdir = testsuite
  DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/../config/accross.m4 \
! 	$(top_srcdir)/../config/gcc-version.m4 \
! 	$(top_srcdir)/../libtool.m4 $(top_srcdir)/acinclude.m4 \
! 	$(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
--- 39,46 ----
  subdir = testsuite
  DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
! 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
*************** INSTALL_DATA = @INSTALL_DATA@
*** 91,96 ****
--- 89,96 ----
  INSTALL_PROGRAM = @INSTALL_PROGRAM@
  INSTALL_SCRIPT = @INSTALL_SCRIPT@
  INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LIBFFI_CRIS_FALSE = @LIBFFI_CRIS_FALSE@
+ LIBFFI_CRIS_TRUE = @LIBFFI_CRIS_TRUE@
  LIBOBJS = @LIBOBJS@
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
*************** POWERPC_AIX_TRUE = @POWERPC_AIX_TRUE@
*** 123,128 ****
--- 123,130 ----
  POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
  POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
  POWERPC_FALSE = @POWERPC_FALSE@
+ POWERPC_FREEBSD_FALSE = @POWERPC_FREEBSD_FALSE@
+ POWERPC_FREEBSD_TRUE = @POWERPC_FREEBSD_TRUE@
  POWERPC_TRUE = @POWERPC_TRUE@
  RANLIB = @RANLIB@
  S390_FALSE = @S390_FALSE@
*************** build_os = @build_os@
*** 165,173 ****
  build_vendor = @build_vendor@
  datadir = @datadir@
  exec_prefix = @exec_prefix@
- gcc_version = @gcc_version@
- gcc_version_full = @gcc_version_full@
- gcc_version_trigger = @gcc_version_trigger@
  host = @host@
  host_alias = @host_alias@
  host_cpu = @host_cpu@
--- 167,172 ----
*************** target_alias = @target_alias@
*** 193,199 ****
  target_cpu = @target_cpu@
  target_os = @target_os@
  target_vendor = @target_vendor@
- tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  AUTOMAKE_OPTIONS = foreign dejagnu
--- 192,197 ----
diff -Nrcpad gcc-4.0.2/libffi/testsuite/lib/libffi-dg.exp gcc-4.1.0/libffi/testsuite/lib/libffi-dg.exp
*** gcc-4.0.2/libffi/testsuite/lib/libffi-dg.exp	Wed Nov 24 04:39:39 2004
--- gcc-4.1.0/libffi/testsuite/lib/libffi-dg.exp	Sat Oct  1 06:11:29 2005
***************
*** 1,4 ****
! #   Copyright (C) 2003 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 1,4 ----
! #   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** load_gcc_lib wrapper.exp
*** 28,33 ****
--- 28,49 ----
  # Define libffi callbacks for dg.exp.
  
  proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } {
+ 
+     # To get all \n in dg-output test strings to match printf output
+     # in a system that outputs it as \015\012 (i.e. not just \012), we
+     # need to change all \n into \r?\n.  As there is no dejagnu flag
+     # or hook to do that, we simply change the text being tested.
+     # Unfortunately, we have to know that the variable is called
+     # dg-output-text and lives in the caller of libffi-dg-test, which
+     # is two calls up.  Overriding proc dg-output would be longer and
+     # would necessarily have the same assumption.
+     upvar 2 dg-output-text output_match
+ 
+     if { [llength $output_match] > 1 } {
+ 	regsub -all "\n" [lindex $output_match 1] "\r?\n" x
+ 	set output_match [lreplace $output_match 1 1 $x]
+     }
+ 
      # Set up the compiler flags, based on what we're going to do.
  
      set options [list]
*************** proc libffi_target_compile { source dest
*** 171,178 ****
      lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include  -I${libffi_include}/.."
      lappend options "additional_flags=${libffi_link_flags}"
  
!     if { [string match "powerpc-*-darwin*" $target_triplet] } {
! 	lappend options "libs= -lgcc_s"
      }
  
      lappend options "libs= -lffi"
--- 187,199 ----
      lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include  -I${libffi_include}/.."
      lappend options "additional_flags=${libffi_link_flags}"
  
!     # If you're building the compiler with --prefix set to a place
!     # where it's not yet installed, then the linker won't be able to
!     # find the libgcc used by libffi.dylib.  We could pass the
!     # -dylib_file option, but that's complicated, and it's much easier
!     # to just make the linker find libgcc using -L options.
!     if { [string match "*-*-darwin*" $target_triplet] } {
! 	lappend options "libs= -shared-libgcc"
      }
  
      lappend options "libs= -lffi"
diff -Nrcpad gcc-4.0.2/libffi/testsuite/libffi.call/cls_5_1_byte.c gcc-4.1.0/libffi/testsuite/libffi.call/cls_5_1_byte.c
*** gcc-4.0.2/libffi/testsuite/libffi.call/cls_5_1_byte.c	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libffi/testsuite/libffi.call/cls_5_1_byte.c	Sun Jul 10 20:14:37 2005
***************
*** 0 ****
--- 1,116 ----
+ /* Area:	ffi_call, closure_call
+    Purpose:	Check structure passing with different structure size.
+ 		Depending on the ABI. Check overlapping.
+    Limitations:	none.
+    PR:		none.
+    Originator:	<andreast@gcc.gnu.org> 20050708	 */
+ 
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+ typedef struct cls_struct_5byte {
+   unsigned char a;
+   unsigned char b;
+   unsigned char c;
+   unsigned char d;
+   unsigned char e;
+ } cls_struct_5byte;
+ 
+ cls_struct_5byte cls_struct_5byte_fn(struct cls_struct_5byte a1,
+ 			    struct cls_struct_5byte a2)
+ {
+   struct cls_struct_5byte result;
+ 
+   result.a = a1.a + a2.a;
+   result.b = a1.b + a2.b;
+   result.c = a1.c + a2.c;
+   result.d = a1.d + a2.d;
+   result.e = a1.e + a2.e;
+ 
+   printf("%d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d\n",
+ 	 a1.a, a1.b, a1.c, a1.d, a1.e,
+ 	 a2.a, a2.b, a2.c, a2.d, a2.e,
+ 	 result.a, result.b, result.c, result.d, result.e);
+ 
+   return  result;
+ }
+ 
+ static void
+ cls_struct_5byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
+ {
+ 
+   struct cls_struct_5byte a1, a2;
+ 
+   a1 = *(struct cls_struct_5byte*)(args[0]);
+   a2 = *(struct cls_struct_5byte*)(args[1]);
+ 
+   *(cls_struct_5byte*)resp = cls_struct_5byte_fn(a1, a2);
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+ #ifndef USING_MMAP
+   static ffi_closure cl;
+ #endif
+   ffi_closure *pcl;
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[6];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
+ #ifdef USING_MMAP
+   pcl = allocate_mmap (sizeof(ffi_closure));
+ #else
+   pcl = &cl;
+ #endif
+ 
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   struct cls_struct_5byte g_dbl = { 127, 120, 1, 3, 4 };
+   struct cls_struct_5byte f_dbl = { 12, 128, 9, 3, 4 };
+   struct cls_struct_5byte res_dbl = { 0, 0, 0, 0, 0 };
+ 
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_uchar;
+   cls_struct_fields[4] = &ffi_type_uchar;
+   cls_struct_fields[5] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
+ 		     dbl_arg_types) == FFI_OK);
+ 
+   args_dbl[0] = &g_dbl;
+   args_dbl[1] = &f_dbl;
+   args_dbl[2] = NULL;
+ 
+   ffi_call(&cif, FFI_FN(cls_struct_5byte_fn), &res_dbl, args_dbl);
+   /* { dg-output "127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */
+   printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
+ 	 res_dbl.d, res_dbl.e);
+   /* { dg-output "\nres: 139 248 10 6 8" } */
+ 
+   res_dbl.a = 0;
+   res_dbl.b = 0;
+   res_dbl.c = 0;
+   res_dbl.d = 0;
+   res_dbl.e = 0;
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, cls_struct_5byte_gn, NULL) == FFI_OK);
+ 
+   res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(pcl))(g_dbl, f_dbl);
+   /* { dg-output "\n127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */
+   printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
+ 	 res_dbl.d, res_dbl.e);
+   /* { dg-output "\nres: 139 248 10 6 8" } */
+ 
+   exit(0);
+ }
diff -Nrcpad gcc-4.0.2/libffi/testsuite/libffi.call/cls_6_1_byte.c gcc-4.1.0/libffi/testsuite/libffi.call/cls_6_1_byte.c
*** gcc-4.0.2/libffi/testsuite/libffi.call/cls_6_1_byte.c	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libffi/testsuite/libffi.call/cls_6_1_byte.c	Sun Jul 10 20:14:37 2005
***************
*** 0 ****
--- 1,120 ----
+ /* Area:	ffi_call, closure_call
+    Purpose:	Check structure passing with different structure size.
+ 		Depending on the ABI. Check overlapping.
+    Limitations:	none.
+    PR:		none.
+    Originator:	<andreast@gcc.gnu.org> 20050708	 */
+ 
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+ typedef struct cls_struct_6byte {
+   unsigned char a;
+   unsigned char b;
+   unsigned char c;
+   unsigned char d;
+   unsigned char e;
+   unsigned char f;
+ } cls_struct_6byte;
+ 
+ cls_struct_6byte cls_struct_6byte_fn(struct cls_struct_6byte a1,
+ 			    struct cls_struct_6byte a2)
+ {
+   struct cls_struct_6byte result;
+ 
+   result.a = a1.a + a2.a;
+   result.b = a1.b + a2.b;
+   result.c = a1.c + a2.c;
+   result.d = a1.d + a2.d;
+   result.e = a1.e + a2.e;
+   result.f = a1.f + a2.f;
+ 
+   printf("%d %d %d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d %d\n",
+ 	 a1.a, a1.b, a1.c, a1.d, a1.e, a1.f,
+ 	 a2.a, a2.b, a2.c, a2.d, a2.e, a2.f,
+ 	 result.a, result.b, result.c, result.d, result.e, result.f);
+ 
+   return  result;
+ }
+ 
+ static void
+ cls_struct_6byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
+ {
+ 
+   struct cls_struct_6byte a1, a2;
+ 
+   a1 = *(struct cls_struct_6byte*)(args[0]);
+   a2 = *(struct cls_struct_6byte*)(args[1]);
+ 
+   *(cls_struct_6byte*)resp = cls_struct_6byte_fn(a1, a2);
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+ #ifndef USING_MMAP
+   static ffi_closure cl;
+ #endif
+   ffi_closure *pcl;
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[7];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
+ #ifdef USING_MMAP
+   pcl = allocate_mmap (sizeof(ffi_closure));
+ #else
+   pcl = &cl;
+ #endif
+ 
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   struct cls_struct_6byte g_dbl = { 127, 120, 1, 3, 4, 5 };
+   struct cls_struct_6byte f_dbl = { 12, 128, 9, 3, 4, 5 };
+   struct cls_struct_6byte res_dbl = { 0, 0, 0, 0, 0, 0 };
+ 
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_uchar;
+   cls_struct_fields[4] = &ffi_type_uchar;
+   cls_struct_fields[5] = &ffi_type_uchar;
+   cls_struct_fields[6] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
+ 		     dbl_arg_types) == FFI_OK);
+ 
+   args_dbl[0] = &g_dbl;
+   args_dbl[1] = &f_dbl;
+   args_dbl[2] = NULL;
+ 
+   ffi_call(&cif, FFI_FN(cls_struct_6byte_fn), &res_dbl, args_dbl);
+   /* { dg-output "127 120 1 3 4 5 12 128 9 3 4 5: 139 248 10 6 8 10" } */
+   printf("res: %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
+ 	 res_dbl.d, res_dbl.e, res_dbl.f);
+   /* { dg-output "\nres: 139 248 10 6 8 10" } */
+ 
+   res_dbl.a = 0;
+   res_dbl.b = 0;
+   res_dbl.c = 0;
+   res_dbl.d = 0;
+   res_dbl.e = 0;
+   res_dbl.f = 0;
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, cls_struct_6byte_gn, NULL) == FFI_OK);
+ 
+   res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(pcl))(g_dbl, f_dbl);
+   /* { dg-output "\n127 120 1 3 4 5 12 128 9 3 4 5: 139 248 10 6 8 10" } */
+   printf("res: %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
+ 	 res_dbl.d, res_dbl.e, res_dbl.f);
+   /* { dg-output "\nres: 139 248 10 6 8 10" } */
+ 
+   exit(0);
+ }
diff -Nrcpad gcc-4.0.2/libffi/testsuite/libffi.call/cls_7_1_byte.c gcc-4.1.0/libffi/testsuite/libffi.call/cls_7_1_byte.c
*** gcc-4.0.2/libffi/testsuite/libffi.call/cls_7_1_byte.c	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libffi/testsuite/libffi.call/cls_7_1_byte.c	Sun Jul 10 20:14:37 2005
***************
*** 0 ****
--- 1,124 ----
+ /* Area:	ffi_call, closure_call
+    Purpose:	Check structure passing with different structure size.
+ 		Depending on the ABI. Check overlapping.
+    Limitations:	none.
+    PR:		none.
+    Originator:	<andreast@gcc.gnu.org> 20050708	 */
+ 
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+ typedef struct cls_struct_7byte {
+   unsigned char a;
+   unsigned char b;
+   unsigned char c;
+   unsigned char d;
+   unsigned char e;
+   unsigned char f;
+   unsigned char g;
+ } cls_struct_7byte;
+ 
+ cls_struct_7byte cls_struct_7byte_fn(struct cls_struct_7byte a1,
+ 			    struct cls_struct_7byte a2)
+ {
+   struct cls_struct_7byte result;
+ 
+   result.a = a1.a + a2.a;
+   result.b = a1.b + a2.b;
+   result.c = a1.c + a2.c;
+   result.d = a1.d + a2.d;
+   result.e = a1.e + a2.e;
+   result.f = a1.f + a2.f;
+   result.g = a1.g + a2.g;
+ 
+   printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d %d %d\n",
+ 	 a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g,
+ 	 a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g,
+ 	 result.a, result.b, result.c, result.d, result.e, result.f, result.g);
+ 
+   return  result;
+ }
+ 
+ static void
+ cls_struct_7byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
+ {
+ 
+   struct cls_struct_7byte a1, a2;
+ 
+   a1 = *(struct cls_struct_7byte*)(args[0]);
+   a2 = *(struct cls_struct_7byte*)(args[1]);
+ 
+   *(cls_struct_7byte*)resp = cls_struct_7byte_fn(a1, a2);
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+ #ifndef USING_MMAP
+   static ffi_closure cl;
+ #endif
+   ffi_closure *pcl;
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[8];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
+ #ifdef USING_MMAP
+   pcl = allocate_mmap (sizeof(ffi_closure));
+ #else
+   pcl = &cl;
+ #endif
+ 
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   struct cls_struct_7byte g_dbl = { 127, 120, 1, 3, 4, 5, 6 };
+   struct cls_struct_7byte f_dbl = { 12, 128, 9, 3, 4, 5, 6 };
+   struct cls_struct_7byte res_dbl = { 0, 0, 0, 0, 0, 0, 0 };
+ 
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_uchar;
+   cls_struct_fields[4] = &ffi_type_uchar;
+   cls_struct_fields[5] = &ffi_type_uchar;
+   cls_struct_fields[6] = &ffi_type_uchar;
+   cls_struct_fields[7] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
+ 		     dbl_arg_types) == FFI_OK);
+ 
+   args_dbl[0] = &g_dbl;
+   args_dbl[1] = &f_dbl;
+   args_dbl[2] = NULL;
+ 
+   ffi_call(&cif, FFI_FN(cls_struct_7byte_fn), &res_dbl, args_dbl);
+   /* { dg-output "127 120 1 3 4 5 6 12 128 9 3 4 5 6: 139 248 10 6 8 10 12" } */
+   printf("res: %d %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
+ 	 res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g);
+   /* { dg-output "\nres: 139 248 10 6 8 10 12" } */
+ 
+   res_dbl.a = 0;
+   res_dbl.b = 0;
+   res_dbl.c = 0;
+   res_dbl.d = 0;
+   res_dbl.e = 0;
+   res_dbl.f = 0;
+   res_dbl.g = 0;
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, cls_struct_7byte_gn, NULL) == FFI_OK);
+ 
+   res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(pcl))(g_dbl, f_dbl);
+   /* { dg-output "\n127 120 1 3 4 5 6 12 128 9 3 4 5 6: 139 248 10 6 8 10 12" } */
+   printf("res: %d %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
+ 	 res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g);
+   /* { dg-output "\nres: 139 248 10 6 8 10 12" } */
+ 
+   exit(0);
+ }
diff -Nrcpad gcc-4.0.2/libffi/testsuite/libffi.call/float1.c gcc-4.1.0/libffi/testsuite/libffi.call/float1.c
*** gcc-4.0.2/libffi/testsuite/libffi.call/float1.c	Thu Sep  4 14:47:48 2003
--- gcc-4.1.0/libffi/testsuite/libffi.call/float1.c	Mon Sep 26 19:56:22 2005
***************
*** 8,13 ****
--- 8,21 ----
  #include "ffitest.h"
  #include "float.h"
  
+ typedef union
+ {
+   double d;
+   unsigned char c[sizeof (double)];
+ } value_type;
+ 
+ #define CANARY 0xba
+ 
  static double dblit(float f)
  {
    return f/3.0;
*************** int main (void)
*** 19,26 ****
    ffi_type *args[MAX_ARGS];
    void *values[MAX_ARGS];
    float f;
!   double d;
! 
  
    args[0] = &ffi_type_float;
    values[0] = &f;
--- 27,34 ----
    ffi_type *args[MAX_ARGS];
    void *values[MAX_ARGS];
    float f;
!   value_type result[2];
!   int i;
  
    args[0] = &ffi_type_float;
    values[0] = &f;
*************** int main (void)
*** 31,41 ****
    
    f = 3.14159;
    
!   ffi_call(&cif, FFI_FN(dblit), &d, values);
    
    /* These are not always the same!! Check for a reasonable delta */
   
!   CHECK(d - dblit(f) < DBL_EPSILON);
  
    exit(0);
  
--- 39,57 ----
    
    f = 3.14159;
    
!   /* Put a canary in the return array.  This is a regression test for
!      a buffer overrun.  */
!   memset(result[1].c, CANARY, sizeof (double));
! 
!   ffi_call(&cif, FFI_FN(dblit), &result[0].d, values);
    
    /* These are not always the same!! Check for a reasonable delta */
   
!   CHECK(result[0].d - dblit(f) < DBL_EPSILON);
! 
!   /* Check the canary.  */
!   for (i = 0; i < sizeof (double); ++i)
!     CHECK(result[1].c[i] == CANARY);
  
    exit(0);
  
diff -Nrcpad gcc-4.0.2/libjava/.cvsignore gcc-4.1.0/libjava/.cvsignore
*** gcc-4.0.2/libjava/.cvsignore	Mon Aug 23 23:51:56 2004
--- gcc-4.1.0/libjava/.cvsignore	Thu Jan  1 00:00:00 1970
***************
*** 1 ****
- autom4te.cache
--- 0 ----
diff -Nrcpad gcc-4.0.2/libjava/ChangeLog gcc-4.1.0/libjava/ChangeLog
*** gcc-4.0.2/libjava/ChangeLog	Wed Sep 21 03:58:07 2005
--- gcc-4.1.0/libjava/ChangeLog	Tue Feb 28 08:29:55 2006
***************
*** 1,47 ****
! 2005-09-20  Release Manager
  
! 	* GCC 4.0.2 released.
  
! 2005-09-08  David Daney  <ddaney@avtrex.com>
  
! 	* java/io/ByteArrayOutputStream.java (toString(int)):  Pass
! 	correct parameters to String constructor.
  
  2005-09-08  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
  	PR libgcj/23549
  	* gij.cc (main): Don't expect arguments to -enableassertions, -ea,
  	-disableassertions and -da.
  
! 2005-06-29  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/22211:
! 	* java/lang/natThread.cc (finish_): Synchronize when updating
! 	alive_flag.
! 	(_Jv_AttachCurrentThread): Likewise.
! 	(interrupt): Only call _Jv_ThreadInterrupt if thread is alive.
! 	* java/lang/Thread.java (isAlive): Now synchronized.
  
! 2005-09-06  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/23739:
! 	* jni.cc (_Jv_JNI_IsAssignableFrom): Reversed arguments.
  
! 2005-04-26  Andrew Haley  <aph@redhat.com>
  
! 	PR libgcj/21020:
! 	* jni.cc (_Jv_JNI_GetAnyFieldID): Use class' loader to find
! 	field's type.
  
! 2005-06-15  Goffredo Baroncelli  <kreijack@inwind.it>
  
! 	PR libgcj/21074:
! 	* gnu/java/net/protocol/http/HTTPURLConnection.java
! 	(getHeaderFieldKey): Check index.
  
! 2005-08-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* configure.host: Handle Solaris 10/x86.
  
  2005-08-17  Tom Tromey  <tromey@redhat.com>
  
--- 1,923 ----
! 2006-02-28  Release Manager
  
! 	* GCC 4.1.0 released.
  
! 2006-02-15  Matthias Klose  <doko@debian.org>
  
! 	* gnu/java/nio/charset, gnu/java/net/protocol/file,
! 	gnu/regexp: Remove empty directories.
! 
! 2006-02-10  Tom Tromey  <tromey@redhat.com>
! 
! 	Re-merged all regular expression code.
! 	For PR libgcj/26177, PR libgcj/26202.
! 	See classpath/ChangeLog.gcj for full details.
! 	* java/lang/Character.java: Merged from Classpath.
! 	(start, end): Now 'int's.
! 	(canonicalName): New field.
! 	(CANONICAL_NAME, NO_SPACES_NAME, CONSTANT_NAME): New constants.
! 	(UnicodeBlock): Added argument.
! 	(of): New overload.
! 	(forName): New method.
! 	Updated unicode blocks.
! 	(sets): Updated.
! 	* sources.am, Makefile.in: Rebuilt.
! 
! 2006-01-13  Tom Tromey  <tromey@redhat.com>
! 
! 	* gnu/regexp/MessagesBundle_fr.properties: Removed.
! 	* gnu/regexp/MessagesBundle.properties: Removed.
! 
! 2006-02-06  Tom Tromey  <tromey@redhat.com>
! 
! 	* gij.cc (version): Use 2006.
! 	* gnu/java/rmi/rmic/RMIC.java (parseOptions): Use 2006.
! 	* gnu/gcj/convert/Convert.java (version): Use 2006.
! 	* gnu/gcj/tools/gcj_dbtool/Main.java (main): Use 2006.
! 
! 2006-02-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* Makefile.am (src.zip): Update src.zip file search to look in
! 	classpath directory.
! 	* Makefile.in: Regenerate.
! 
! 2006-01-31  Mark Wielaard  <mark@klomp.org>
! 
! 	* NEWS: Add 4.1 updates.
! 
! 2006-01-24  Archit Shah  <ashah@redhat.com>
! 	    Tom Tromey  <tromey@redhat.com>
! 
! 	* prims.cc (next_property_value): Never return NULL.
! 	(process_gcj_properties): Copy 'props' before using it.
! 
! 2006-01-23  David Daney  <ddaney@avtrex.com>
! 
! 	* configure.host (disable_dladdr): Remove variable and its
! 	documentation.
! 	* configure.ac: Do not test for disable_dladdr.
! 	* configure: Regenerate.
! 
! 2006-01-19  H.J. Lu  <hongjiu.lu@intel.com>
! 
! 	PR libgcj/25840
! 	* include/x86_64-signal.h (RESTORE2): Add ".text\n".
! 
! 2006-01-18  Tom Tromey  <tromey@redhat.com>
! 
! 	* jni.cc (_Jv_JNI_AttachCurrentThread): Return environment if it
! 	already exists.
! 
! 2006-01-17  Tom Tromey  <tromey@redhat.com>
! 
! 	PR classpath/20198:
! 	* java/net/URLClassLoader.java (FileURLLoader): Added argument.
! 	(JarURLLoader): Likewise.
! 	(addURLImpl): Canonicalize file URLs.
! 
! 2006-01-17  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* configure.ac (dbexecdir): New substituted var.
! 	* configure: Rebuilt.
! 	* Makefile.am (dbexecdir): Remove.
! 	* Makefile.in: Rebuilt.
! 
! 2006-01-08  Chris Burdess  <dog@gnu.org>
! 
! 	* java/lang/Character.java (toChars,toCodePoint): Correct these
! 	  methods to use algorithms from Unicode specification.
! 
! 2006-01-09  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/21637:
! 	* gnu/java/net/protocol/jar/Connection.java (getInputStream):
! 	Throw FileNotFoundException if jar entry not found.
! 
! 2006-01-08  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/StringBuilder.java (appendCodePoint): New method.
! 	(insert): New overloads.
! 	* java/lang/StringBuffer.java (StringBuffer): New constructor.
! 	(charAt): Remerged javadoc.
! 	(codePointAt, codePointBefore): New methods.
! 	(appendCodePoint): New method.
! 	(append): New overloads.
! 	(insert): Likewise.
! 	(trimToSize, codePointCount, offsetByCodePoints): New methods.
! 	* java/lang/Float.java (SIZE): New field.
! 	(valueOf): New method.
! 	* java/lang/natDouble.cc (initIDs): Removed.
! 	* java/lang/Double.java (static initializer): Removed.
! 	(SIZE): New field.
! 	(valueOf): New method.
! 	(initIDs): Removed.
! 
! 2006-01-07  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR libgcj/24940
! 	* shlibpath.m4: Replace $SED with sed.
! 	* configure: Rebuilt.
! 
! 2006-01-06  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/Character.java (SIZE, MAX_CACHE, charCache,
! 	MIN_SURROGATE, MAX_SURROGATE): New fields from Classpath.
! 	(MIN_HIGH_SURROGATE, MAX_HIGH_SURROGATE, MIN_LOW_SURROGATE,
! 	MAX_LOW_SURROGATE): Javadoc fixes.
! 	(valueOf, reverseBytes, isHighSurrogate, isLowSurrogate,
! 	isSurrogatePair, toCodePoint, codePointAt, codePointBefore): New
! 	methods from Classpath.
! 	* java/lang/String.java (codePointAt, codePointBefore,
! 	codePointCount, contains, replace): New methods from Classpath.
! 	(contentEquals): Declare.
! 	* java/lang/natString.cc (contentEquals): New method.
! 
! 2005-12-26  Anthony Green  <green@redhat.com>
! 
! 	* gnu/java/nio/SocketChannelImpl.java (read): Compute the right amount
! 	of data to read (dst.remaining()).
! 	* gnu/java/nio/DatagramChannelImpl.java (receive): Ditto.
! 
! 2005-11-11  Mark Wielaard  <mark@klomp.org>
! 
! 	Reported by john.zigman@anu.edu.au as bug #24608.
! 	* gnu/java/nio/SocketChannelImpl.java (read): Put readBytes in
! 	destination ByteBuffer when it doesn't have an array instead of len
! 	bytes.
! 
! 2006-01-05  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/natThread.cc (finish_): Don't clear 'group'.
! 	* sources.am, Makefile.in: Rebuilt.
! 	* java/lang/Runtime.java (exit): Merged with Classpath.
! 	(runShutdownHooks): New method from Classpath.
! 	* java/io/File.java (deleteOnExit): Use DeleteFileHelper, not
! 	FileDeleter.
! 	* gnu/gcj/runtime/FileDeleter.java: Removed.
! 	* java/lang/natRuntime.cc (runFinalizationForExit): New method.
! 	(exitInternal): Don't run finalizers or delete files.
! 
! 2006-01-05  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/natPosixProcess.cc (reap): Ignore unknown children.
! 
! 2006-01-04  Krister Walfridsson  <cato@df.lth.se>
! 
! 	* posix-threads.cc (_Jv_InitThreads): #ifdef PTHREAD_STACK_MIN
! 
! 2006-01-04  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/Class.h (_Jv_CopyClassesToSystemLoader): Updated.
! 	* java/lang/natClassLoader.cc (_Jv_CopyClassesToSystemLoader):
! 	Changed argument type.  Use SystemClassLoader.addClass.
! 	* gnu/gcj/runtime/SystemClassLoader.java (addClass): New method.
! 
! 2005-12-24  David Daney <ddaney@avtrex.com>
! 	    Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/9715, PR libgcj/19132:
! 	* java/nio/charset/Charset.java (charsetForName): Try default
! 	provider first.
! 	(availableCharsets): Re-merged.
! 	(providers2): Likewise.
! 	(defaultCharset): Likewise.
! 	* sources.am, Makefile.in: Rebuilt.
! 	* gnu/java/nio/charset/Provider.java: Removed.
! 	* java/io/OutputStreamWriter.java
! 	(OutputStreamWriter(OutputStream,Charset)): New constructor.
! 	(OutputStreamWriter(OutputStream,CharsetEncoder)): Likewise.
! 	* java/io/InputStreamReader.java
! 	(InputStreamReader(InputStream,CharsetDecoder)): New constructor.
! 	(InputStreamReader(InputStream,Charset)): Likewise.
! 	* gnu/gcj/convert/BytesToUnicode.java (getDecoder): Try a
! 	BytesToCharsetAdaptor.
! 	* gnu/gcj/convert/UnicodeToBytes.java (getEncoder): Try a
! 	CharsetToBytesAdaptor.
! 	* gnu/gcj/convert/CharsetToBytesAdaptor.java: New file.
! 	* gnu/gcj/convert/BytesToCharsetAdaptor.java: New file.
! 	* mauve-libgcj: Remove getEncoding exclusion.
! 
! 2005-12-28  Anthony Green  <green@redhat.com>
! 
! 	* gnu/java/net/natPlainSocketImplWin32.cc (connect): Same 
! 	as previous patch, but for win32.
! 
! 2005-12-28  Anthony Green  <green@redhat.com>
! 
! 	* gnu/java/net/natPlainSocketImplPosix.cc (connect): Record
! 	address and port before attempting anything.
! 
! 2005-12-28  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
! 
! 	* sysdep/pa/locks.h (compare_and_swap): Add ldcw semaphore to make
! 	operation atomic.
! 
! 2005-12-22  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/natClassLoader.cc (_Jv_NewArrayClass): Don't
! 	reference NUM_OBJECT_METHODS.
! 	* include/jvm.h (NUM_OBJECT_METHODS): Removed.
! 
! 2005-12-18  Anthony Green  <green@redhat.com>
! 
! 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc (getLocalAddress): 
! 	New helper function.
! 	(setOption): Use getLocalAddress.  Don't downcast value to
! 	InetAddress.
! 	(getOption): Use getLocalAddress.
! 
! 2005-12-16  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/Class.java (getPackage): Get package from
! 	VMClassLoader if needed.
! 
! 2005-12-16  Tom Tromey  <tromey@redhat.com>
! 
! 	* testsuite/libjava.jacks/jacks.xfail
! 	(8.5.2-accessible-static-member-usage-3): Removed.
! 
! 2005-12-15  Tom Tromey  <tromey@redhat.com>
! 
! 	* testsuite/libjava.compile/rh175833.java: New file.
! 	* testsuite/libjava.compile/pr25429.java: New file.
! 
! 2005-12-14  Andrew Haley  <aph@redhat.com>
! 
! 	* gnu/java/rmi/rmic/CompilerProcess.java: Use a new thread to
! 	handle stdout from the child process.
! 
! 2005-12-14  Tom Tromey  <tromey@redhat.com>
! 
! 	PR classpath/25389:
! 	* java/io/File.java (File): Throw IllegalArgumentException if URI is
! 	non-hierarchical.
! 
! 2005-12-12  Andrew Haley  <aph@redhat.com>
! 
! 	* java/lang/VMCompiler.java: Directly generate a new instance of
! 	gnu.java.security.provider.MD5.
! 
! 2005-12-08  Andrew Haley  <aph@redhat.com>
! 
! 	PR libgcj/25265
! 	* java/lang/Object.h (throwNoSuchMethodError): New method.
! 	* java/lang/Object.java (throwNoSuchMethodError): New method.
! 	* include/jvm.h (_Jv_ThrowNoSuchFieldError): Declare.
! 	* link.cc (_Jv_ThrowNoSuchFieldError): New.
! 	(link_symbol_table): Don't throw a NoSuchFieldError if a field is
! 	missing.  Instead, set the otable entry to zero.
! 	(link_symbol_table): If we don't find a nonstatic method, insert
! 	the vtable offset of Object.throwNoSuchMethodError() into the
! 	otable.
! 
! 2005-12-05  Tom Tromey  <tromey@redhat.com>
! 
! 	* testsuite/libjava.compile/rh174912.java: New file.
! 
! 2005-12-01  Alan Modra  <amodra@bigpond.net.au>
! 
! 	* stacktrace.cc (UnwindTraceFn): Use UNWRAP_FUNCTION_DESCRIPTOR
! 	to compare _Jv_InterpMethod::run against current func.
! 
! 2005-11-30  Andrew Haley  <aph@redhat.com>
! 
! 	* classpath/lib/Makefile.am (resources): Use `cp -p'.
! 	Remove `@' from start of line.
! 
! 2005-11-29  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/18278:
! 	* testsuite/libjava.jni/pr18278.out: New file.
! 	* testsuite/libjava.jni/pr18278.c: New file.
! 	* testsuite/libjava.jni/pr18278.java: New file.
! 	* include/jvm.h (_Jv_UnwrapJNIweakReference): Declare.
! 	* jni.cc (_Jv_UnwrapJNIweakReference): New function.
! 	(call): Unwrap return value if needed.
! 
! 2005-11-25  Mark Wielaard  <mark@klomp.org>
! 
! 	* standard.omit.in: Remove javax/rmi, org/omg, gnu/CORBA and
! 	gnu/javax/rmi.
! 	* scripts/makemake.tcl: Set javax/rmi, org/omg, gnu/CORBA and
! 	gnu/javax/rmi to bc.
! 	* gnu/CORBA/ObjectCreator.java: New override file for missing
! 	VMStackWalker issue.
! 	* gnu/CORBA/DynAn/gnuDynValue.java: New override file for bug #24938
! 	* gnu/CORBA/DynAn/RecordAny.java: Likewise
! 	* sources.am: Regenerated.
! 	* Makefile.in: Regenerated
! 
! 2005-11-25  Andrew Haley  <aph@redhat.com>
! 
! 	PR libgcj/25016
! 	* posix-threads.cc (_Jv_CondWait): Rewrite calculation of the
! 	struct timespec we pass to pthread_cond_timedwait.
! 
! 2005-11-24  Bryce McKinlay  <mckinlay@redhat.com>
! 
!         * gij.cc (nonstandard_opts_help): Add entry for -Xss.
! 
! 2005-11-17  Mark Wielaard  <mark@klomp.org>
! 
! 	Imported GNU Classpath gcj-import-20051117.
! 	* gnu/java/net/protocol/file/Connection.java: Removed, fully merged.
! 	* sources.am: Regenerated.
! 	* Makefile.in: Likewise.
! 
! 2005-11-17  Mark Wielaard  <mark@klomp.org>
! 
! 	* gnu/java/net/protocol/file/Handler.java: Removed, fully merged now.
! 	* java/net/ServerSocket.java: Likewise.
! 	* sources.am: Regenerated.
! 	* Makefile.in: Regenerated.
! 
! 2005-11-17  Mark Wielaard  <mark@klomp.org>
! 
! 	Fixes bug #24006
! 	* java/net/ServerSocket.java (implAccept): Set Socket.bound to true.
! 
! 2005-11-17  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/net/ServerSocket.java (accept): Use correct security manager
! 	call.
! 
! 2005-11-17  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/net/ServerSocket.java
! 	(bound): Removed.
! 	(local): New field.
! 	(bind): Cache local socket address.
! 	(getInetAddress, getLocalPort, getLocalSocketAddress, isBound):
! 	Use cached local socket address.
! 	(close): bound field was removed.
! 
! 2005-11-17  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/net/URLConnection.java (setDoInput): Javadoc fix.
! 	(setDoOutput): Likewise.
! 	(setContentHandlerFactory): Likewise.
! 	(setFileNameMap): Likewise.
! 
! 2005-11-17  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/net/URLClassloader.java (addURLs): Add comment about jboss.
! 
! 2005-11-17  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/net/URLClassLoader.java (addURLs): Don't call addURL(), but
! 	call urls.add() and addURLImpl() directly on each URL.
! 
! 2005-11-17  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/net/URLClassLoader.java (definePackage): Javadoc fixes.
! 
! 2005-11-17  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/net/URLClassLoader.java
! 	(Resource.name): Removed field.
! 	(JarURLResource.name): Added field.
! 	(FileResource.getURL): Use File.toURL() instead of doing it in
! 	a way that breaks on Windows.
! 
! 2005-11-17  Roman Kennke  <roman@kennke.org>
! 
! 	Reported by: Ingo Proetel  <proetel@aicas.com>
! 	* java/net/URLClassLoader.java
! 	(findClass): Added null check to avoid NullPointerException.
! 
! 2005-11-17  David Gilbert  <david.gilbert@object-refinery.com>
! 
! 	* java/net/URLClassLoader.java: reordered some API doc comments to
! 	suppress Eclipse warnings, and fixed API doc link.
! 
! 2005-11-17  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/net/URLClassLoader.java (URLClassLoader): Removed
! 	unused constructor.
! 
! 2005-11-17  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/net/URLClassLoader (findClass): Close InputStream after we're
! 	done with it.
! 
! 2005-11-17  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	Implement -Xss.
! 	* include/jvm.h (gcj::stack_size): Declare.
! 	(_Jv_StackSize): Declare.
! 	* posix-threads.cc (_Jv_InitThreads): Validate gcj::stack_size.
! 	(_Jv_ThreadStart): Set stack size if specified.
! 	* prims.cc (gcj::stack_size): Define.
! 	(parse_memory_size): Renamed from parse_heap_size.
! 	(_Jv_SetStackSize): Parse stack size argument and set 
! 	gcj::stack_size.
! 
! 2005-11-17  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/text/SimpleDateFormat.java: Removed, fully merged now.
! 	* sources.am: Regenerated.
! 	* Makefile.in: Regenerated.
! 
! 2005-11-17  Sven de Marothy  <sven@physto.se>
! 
! 	* java/text/SimpleDateFormat.java
! 	(computeOffset): Allow timezone to be first in the parsed String.
! 
! 2005-11-17  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/text/SimpleDateFormat.java (field, size): Make package private.
! 
! 2005-11-17  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/text/SimpleDateFormat.java (compileFormat): Correctly
! 	handle quoted single quotes.  PR classspath/23183.
! 
! 2005-11-17  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/text/SimpleDateFormat.java (compileFormat): Reformatted.
! 
! 2005-11-17  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/text/DateFormat.java (serialVersionUID): New field.
! 
! 2005-11-17  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/text/DateFormat.java (equals): Reimplement.
! 
! 2005-11-17  David Gilbert  <david.gilbert@object-refinery.com>
! 
! 	* java/text/Collator.java: API doc fixes,
! 	* java/text/DateFormat.java: likewise,
! 	* java/text/DecimalFormatSymbols.java: likewise,
! 	* java/text/DateFormatSymbols.java: likewise,
! 	* java/text/SimpleDateFormat.java: likewise.
! 
! 2005-11-17  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/text/Collator.java (getInstance(Locale)):
! 	Added default collation pattern to handle case when resource
! 	is missing and throw InternalError instead of returning null
! 	should parsing fail.
! 
! 2005-11-15  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/util/zip/ZipEntry.java: Removed, fully merged now.
! 	* java/util/zip/ZipFile.java: Likewise.
! 	* sources.am: Regenerated.
! 	* Makefile.in: Regenerated.
! 
! 2005-11-15  Tom Tromey  <tromey@redhat.com>
! 
! 	classpath/23890:
! 	* java/util/Calendar.java (equals): Include other calendar
! 	attributes.
! 	(hashCode): Updated.
! 	* java/util/GregorianCalendar.java (hashCode): New method.
! 	(equals): Use super.equals().
! 
! 2005-11-15  Sven de Marothy  <sven@physto.se>
! 
! 	* java/util/Calendar (setTimeInMillis): Recompute time fields.
! 
! 2005-11-15  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/util/SimpleTimeZone.java: Removed, fully merged now.
! 	* java/util/Date.java: Likewise.
! 	* sources.am: Regenerated.
! 	* Makefile.in: Regenerated.
! 
! 2005-11-15  David Gilbert  <david.gilbert@object-refinery.com>
! 
! 	* java/util/Calendar.java: fixed minor problems in API docs,
! 	* java/util/Date.java: likewise,
! 	* java/util/ResourceBundle.java: likewise,
! 	* java/util/SimpleTimeZone.java: likewise,
! 
! 2005-11-15  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/io/ObjectInputStream.java
! 	(parseContent): Removed bogus println and fixed bug #24422.
! 		
! 2005-11-15  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/io/ObjectStreamClass.java: Removed, fully merged now.
! 	* sources.am: Regenerated.
! 	* Makefile.in: Regenerated.
! 
! 2005-11-15  Wolfgang Baer  <WBaer@gmx.de>
! 
! 	* java/io/ObjectInputStream.java
! 	(processResolution): Pass Error, RuntimeException and
! 	ObjectStreamException through to the caller.
! 	(readObject): Documentation update.
! 
! 2005-11-15  Mark Wielaard  <mark@klomp.org>
! 
! 	Imported GNU Classpath 0.19 + gcj-import-20051115.
! 	* sources.am: Regenerated.
! 	* Makefile.in: Likewise.
! 	* scripts/makemake.tcl: Use glob -nocomplain.
! 
! 2005-11-15  Scott Gilbertson  <scottg@mantatest.com>
! 
! 	* Makefile.in: Re-generated.
! 	* gnu/awt/xlib/XGraphicsDevice.java: New file.
! 	* gnu/awt/xlib/XToolkit.java
! 	(getLocalGraphicsEnvironment): Implemented. 
! 	* gnu/awt/xlib/XGraphicsEnvironment.java: New file.
! 	* sources.am: Re-generated.
! 
! 2005-15-09  David Daney <ddaney@avtrex.com>
! 
! 	PR libgcj/15430
! 	* gnu/java/net/natPlainSocketImplPosix.cc (throw_on_sock_closed): New
! 	function.
! 	(accept): Call it.
! 	(close): Call shutdown before closing.
! 	(read()): Call read_helper with proper parameters.
! 	(read(buffer, int, int)): Likewise.
! 	(read_helper):  Pass pointer to the PlainSocketImpl, remove native_fd
! 	and timeout parameters.  Make prototype to match. Use 
! 	pointer to PlainSocketImpl to access members. Call throw_on_sock_closed
! 	in two places.
! 
! 2005-11-15  Andrew Haley  <aph@redhat.com>
! 
! 	* Merge from Classpath head:
! 
!    2005-09-16  Andrew Haley  <aph@redhat.com>
!    
!            * java/io/ObjectStreamClass.java (findAccessibleMethod): Allow
!            protected readResolve().  Rewrite accessibility check.
!    
!    2005-07-07  Jeroen Frijters  <jeroen@frijters.net>
!    
!            * java/io/ObjectStreamClass.java
!            (findAccessibleMethod): Added code to make method accessible.
!    
!    2005-07-03  Daniel Bonniot  <bonniot@users.sf.net>
!    
!            * java/io/ObjectStreamClass.java (inSamePackage): New private method.
!            (findAccessibleMethod): Likewise.
!            (cacheMethods): Lookup readResolve and writeReplace using the new
!            findAccessibleMethod().
!    
! 2005-11-14  Mohan Embar  <gnustuff@thisiscool.com>
! 
! 	* java/net/natVMNetworkInterfaceWin32.cc: Include
! 	java/net/VMNetworkInterface.h.
! 
! 2005-11-14  Mohan Embar  <gnustuff@thisiscool.com>
! 	    David Daney  <ddaney@avtrex.com>
! 
! 	* gnu/java/net/natPlainSocketImplWin32.cc: Updated copyright.
! 	(read): Handle count == 0 case.
! 
! 2005-11-09  Tom Tromey  <tromey@redhat.com>
! 
! 	* testsuite/libjava.jacks/jacks.xfail (non-jls-zip-2): Now
! 	passes.
! 
! 2005-11-08  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/24587:
! 	* gnu/classpath/SystemProperties.java: Set gnu.classpath.version.
! 
! 2005-11-08  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/23763.  From aeby@graeff.com.
! 	* java/lang/natPosixProcess.cc (nativeSpawn): Unblock SIGCHLD
! 	before exec.
! 
! 2005-11-08  Mark Wielaard  <mark@klomp.org>
! 
! 	* scripts/makemake.tcl: Set package gnu/javax/sound/midi to bc.
! 
! 2005-11-07  David Daney  <ddaney@avtrex.com>
! 
! 	* mauve-libgcj: Disable javax.rmi.* and
! 	java.io.InputStreamReader.getEncoding.
! 
! 2005-11-04  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/14358, libgcj/24552:
! 	* gnu/gcj/convert/IOConverter.java: Regenerate aliases.  Add
! 	aliases for 'euc_jp' and 'eucjp'.
! 	* scripts/encodings.pl: Recognize 'none', not 'NONE'.  Include
! 	canonical names in output.
! 	(%map): Added UnicodeLittle and UnicodeBig.
! 
! 2005-11-04  Kaz Kojima  <kkojima@gcc.gnu.org>
! 
! 	* include/sh-signal.h (MAKE_THROW_FRAME): Remove trailing whitespace.
! 
! 2005-11-02  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* testsuite/lib/libjava.exp (libjava_find_lib): Add dylib to the shared
! 	library extensions.
! 
! 2005-10-12  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/24251
! 	* link.cc (ensure_method_table_complete): Install Miranda methods
! 	for interfaces too.
! 
! 2005-10-10  Tom Tromey  <tromey@redhat.com>
! 
! 	* testsuite/libjava.lang/ExtraClassLoader.out: New file.
! 	* testsuite/libjava.lang/TestProxy.java (MyInvocationHandler):
! 	Now static.
! 
! 2005-10-05  Richard Henderson  <rth@redhat.com>
! 
! 	PR target/23602
! 	* configure.host (i?86-*): Set -fomit-frame-pointer in libgcj_flags,
! 	but not BACKTRACESPEC.
! 	(x86_64-*): Similarly.  Don't set -ffloat-store in 64-bit mode.
! 
! 2005-10-02  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* testsuite/lib/jni.exp (gcj_jni_test_one): For
! 	darwin, use -shared-libgcc not -lgcc_s, and explain why.
! 	(gcj_jni_invocation_test_one): Likewise.
! 
! 2005-09-30  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/24051:
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (toolexeclib_LTLIBRARIES): Add Qt library if
! 	requested.
! 	(lib_gnu_java_awt_peer_qt_la_SOURCES): New variable.
! 	(lib_gnu_java_awt_peer_qt_la_LIBADD): Likewise.
! 	(lib_gnu_java_awt_peer_qt_la_DEPENDENCIES): Likewise.
! 	(lib_gnu_java_awt_peer_qt_la_LDFLAGS): Likewise.
! 	(lib_gnu_java_awt_peer_qt_la_LINK): Likewise.
! 	* configure: Rebuilt.
! 	* configure.ac: Pass --enable-qt-peers when qt is requested.
! 
! 2005-09-29  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* configure.ac: Fix typo.
! 	* configure: Regenerate.
! 
! 2005-09-28  Geoffrey Keating  <geoffk@apple.com>
! 
! 	* sysdep/powerpc/locks.h: Use 64-bit versions of primitives when
! 	__LP64__ is defined rather than __powerpc64__.
! 	(compare_and_swap): 'ret' is an obj_addr_t not just an int.
! 	(compare_and_swap_release): Likewise.
! 
! 2005-09-28  David Daney  <ddaney@avtrex.com>
! 
! 	* HACKING: Update instructions for classpath import.
! 
! 2005-09-27  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/23367:
! 	* include/jvm.h (_Jv_FreeMethodCache): Declare.
! 	* java/lang/natClass.cc (MCACHE_SIZE): Conditional on HAVE_TLS.
! 	(struct _Jv_mcache): Likewise.
! 	(method_cache): Likewise.
! 	(_Jv_FindMethodInCache): Do nothing unless TLS is available.
! 	(_Jv_AddMethodToCache): Likewise.
! 	(_Jv_FreeMethodCache): New function.
! 	* java/lang/natThread.cc (finish_): Call _Jv_FreeMethodCache.
! 	* aclocal.m4, configure, include/config.h.in: Rebuilt.
! 	* configure.ac: Invoke GCC_CHECK_TLS.
! 
! 2005-09-27  Tom Tromey  <tromey@redhat.com>
! 
! 	* configure, Makefile.in: Rebuilt.
! 	* sources.am: Rebuilt.
! 	* scripts/makemake.tcl (emit_bc_rule): Special-case qt.
! 	* configure.ac (TOOLKIT): Handle Qt peers properly.
! 
! 2005-09-23  Tom Tromey  <tromey@redhat.com>
! 
! 	Imported Classpath 0.18.
! 	* sources.am, Makefile.in: Updated.
! 	* Makefile.am (nat_source_files): Removed natProxy.cc.
! 	* java/lang/reflect/natProxy.cc: Removed.
! 	* gnu/classpath/jdwp/VMFrame.java,
! 	gnu/classpath/jdwp/VMIdManager.java,
! 	gnu/classpath/jdwp/VMVirtualMachine.java,
! 	java/lang/reflect/VMProxy.java: New files.
! 
! 2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* scripts/makemake.tcl (verbose): Add gnu/java/awt/peer/qt to BC
! 	list.
! 
! 2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* gnu/java/net/DefaultContentHandlerFactory.java (getContent):
! 	Remove ClasspathToolkit references.
! 
! 2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* gnu/awt/xlib/XCanvasPeer.java: Add new peer methods.
! 	* gnu/awt/xlib/XFramePeer.java: Likewise.
! 	* gnu/awt/xlib/XGraphicsConfiguration.java: Likewise.
! 
! 2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* Makefile.am (libgcjawt_la_SOURCES): Remove jawt.c.  Add
! 	classpath/native/jawt/jawt.c.
! 	* Makefile.in: Regenerate.
! 	* jawt.c: Remove file.
! 	* include/Makefile.am (tool_include__HEADERS): Remove jawt.h and
! 	jawt_md.h.  Add ../classpath/include/jawt.h and
! 	../classpath/include/jawt_md.h.
! 	* include/Makefile.in: Regenerate.
! 	* include/jawt.h: Regenerate.
! 	* include/jawt_md.h: Regenerate.
! 
! 2005-09-21  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* gnu/gcj/runtime/BootClassLoader.java (BootClassLoader): Pass
! 	`null' parent ClassLoader to parent constructor.
! 	* gnu/gcj/runtime/HelperClassLoader.java (HelperClassLoader): New
! 	constructor.
! 
! 2005-09-21  Ranjit Mathew  <rmathew@gcc.gnu.org>
! 
! 	* testsuite/libjava.jacks/jacks.xfail: Updated for PR java/23891.
! 
! 2005-09-17  H.J. Lu  <hongjiu.lu@intel.com>
! 
! 	* testsuite/libjava.jni/jni.exp (gcj_jni_invocation_test_one):
! 	Use libjava_find_lib to find the proper libgcj.
! 
! 2005-09-16  Anthony Green  <green@redhat.com>
! 
! 	PR libgcj/20198
! 	* java/net/URLClassLoader.java (FileURLLoader.getResource): File
! 	resources should all have canonicalized names.
! 
! 2005-09-15  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/16032:
! 	* interpret.cc (AVAL1U): Resolve pool entry when not direct
! 	threaded.
! 	(AVAL2U): Likewise.
! 	(compile): Handle 'ldc class' specially.
! 	(_Jv_InterpMethod::run): Added special 'ldc class' instruction.
! 	* verify.cc (check_constant): Handle 'ldc class' for 1.5 classes.
! 	* defineclass.cc (handleCodeAttribute): Set new field.
! 	(MAJOR_1_1, MINOR_1_1, MAJOR_1_2, MINOR_1_2, MAJOR_1_3, MINOR_1_3,
! 	MAJOR_1_4, MINOR_1_4, MAJOR_1_5, MINOR_1_5): New defines.
! 	(parse): Check version numbers.
! 	(_Jv_ClassReader::is_15): New field.
! 	(_Jv_ClassReader): Initialize it.
! 	* include/java-interp.h (_Jv_InterpMethod::is_15): New field.
! 
! 2005-09-15  Tom Tromey  <tromey@redhat.com>
! 
! 	For PR libgcj/23288:
! 	* java/net/URLClassLoader.java (definePackage): Correctly order
! 	arguments to definePackage.  Look up per-entry Attributes.
! 	(getAttributeValue): New method.
! 
! 2005-09-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	PR libgcj/23762
! 	* shlibpath.m4: New file.
! 	* configure.ac: If libltdl is being used call AC_LTDL_SHLIBPATH
! 	macro.
! 	* gnu/classpath/natSystemProperties.cc (insertSystemProperties)
! 	[USE_LTDL]: If it was not defined with -D set java.library.path to
! 	the value of LTDL_SHLIBPATH_VAR.
! 
! 2005-09-08  Andrew Haley  <aph@redhat.com>
! 
! 	* java/net/URLClassLoader.java (addURLImpl): Synchronize on the
! 	loader.
! 	(toString): Likewise.
! 
! 2005-09-08  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/22084
! 	* include/i386-signal.h (HANDLE_DIVIDE_OVERFLOW): Bump IP by 1 if
! 	R/M field in instruction is 100.
  
  2005-09-08  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
+ 	PR libgcj/23761
+ 	* include/java-props.h (_Jv_Module_Load_Path): Declare variable.
+ 	* java/lang/natRuntime.cc (init): Call lt_dlsetsearchpath after
+ 	lt_dlinit.
+ 	* gnu/classpath/natSystemProperties.cc (_Jv_Module_Load_Path):
+ 	Define variable.
+ 	(_Jv_SetDLLSearchPath): Do not call lt_dlsetsearchpath.  Set
+ 	_Jv_Module_Load_Path.
+ 
+ 2005-09-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/23739:
+ 	* testsuite/libjava.jni/pr23739.c: New file.
+ 	* testsuite/libjava.jni/pr23739.java: New file.
+ 	* testsuite/libjava.jni/pr23739.out: New file.
+ 	* jni.cc (_Jv_JNI_IsAssignableFrom): Reversed arguments.
+ 	* java/lang/reflect/natMethod.cc (invoke): Updated.
+ 	* java/lang/natClass.cc (isAssignableFrom): Updated.
+ 	(isInstance): Likewise.
+ 	(_Jv_IsAssignableFrom): Reversed arguments.
+ 	(_Jv_IsInstanceOf): Updated.
+ 	(_Jv_CheckCast): Likewise.
+ 	(_Jv_CheckArrayStore): Likewise.
+ 	(_Jv_IsAssignableFromSlow): Reversed arguments.
+ 	(_Jv_InterfaceAssignableFrom): Likewise.
+ 	* link.cc (verify_type_assertions): Updated.
+ 	* prims.cc (_Jv_CheckAccess): Updated.
+ 
+ 2005-09-05  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Testsuite changes for PR java/23431.
+ 	* testsuite/libjava.jacks/jacks.xfail: Remove 8.1.1.1-12 and
+ 	8.4.6.2-hiding-5.
+ 	* testsuite/libjava.compile/PR23431_1.java: New testcase.
+ 	* testsuite/libjava.compile/PR23431_2.java: Likewise.
+ 	* testsuite/libjava.compile/PR23431_1.xfail: New file.
+ 	* testsuite/libjava.compile/PR23431_2.xfail: Likewise.
+ 
+ 2005-08-29  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
  	PR libgcj/23549
  	* gij.cc (main): Don't expect arguments to -enableassertions, -ea,
  	-disableassertions and -da.
  
! 2005-08-29  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	* configure.ac: Replace "*-*-darwin[0-7].*" with
! 	"*-*-darwin[[0-7]].*"
! 	* configure: Regenerate.
  
! 2005-08-24  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* configure.ac (extra_ldflags_libjava): Enable -single_module only for
! 	darwin < 8.
! 	* configure: Regenerate.
  
! 2005-08-23  Roman Kennke  <roman@kennke.org>
  
! 	* java/lang/Character.java
! 	(toChars(int)): New JDK1.5 method.
! 	(toChars(int, char[], int)): New JDK1.5 method.
! 	(charCount): New JDK1.5 method.
! 	(isSupplementaryCodePoint): New JDK1.5 method.
! 	(isValidCodePoint): New JDK1.5 method.
  
! 2005-08-23  Tom Tromey  <tromey@redhat.com>
  
! 	* aclocal.m4, Makefile.in: Rebuilt.
! 	* Makefile.am (property_files): Added META-INF files.
! 	(propertyo_files): Changed definition.
! 	($(propertyo_files)): Updated patterns.
  
! 2005-08-22  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/22622:
! 	* configure: Rebuilt.
! 	* configure.ac: Correctly create Configuration.java (for
! 	temporary use).
! 
! 2005-08-22  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am (ACLOCAL_AMFLAGS): Also include "..".
! 	* acinclude.m4: Delete.  Extract CHECK_FOR_BROKEN_MINGW_LD to ...
! 	* mingwld.m4: ... this new file.
! 	* aclocal.m4, Makefile.in, gcj/Makefile.in: Regenerate. 
! 	* include/Makefile.in, testsuite/Makfile.in: Regenerate.
! 
! 2005-08-21  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
! 
! 	PR libgcj/23507
! 	* stacktrace.cc (_Jv_StackTrace::UnwindTraceFn): Fix typo in newLength
! 	assignment.  Cast operands of compare to function pointer type.
! 
! 2005-08-21  Tom Tromey  <tromey@redhat.com>
! 
! 	* HACKING: Updated for hacking classpath in libgcj.
! 
! 2005-08-20  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
! 
! 	PR libgcj/21692
! 	* sysdep/pa/descriptor.h: New file.
! 	* configure.host: Use sysdep/pa/descriptor.h on hppa*-*.
! 
! 2005-08-19  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* Makefile.am (extra_ldflags_libjava): New variable to
! 	substitute in.
! 	(LIBLINK): Add extra_ldflags_libjava to it.
! 	* configure.ac (extra_ldflags_libjava): Set for *-darwin* to
! 	"-Wl,-single_module".
! 	* Makefile.in: Regenerate.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regenerate.
! 	* gcj/Makefile.in: Regenerate.
! 	* include/Makefile.in: Regenerate.
! 	* testsuite/Makefile.in: Regenerate.
  
  2005-08-17  Tom Tromey  <tromey@redhat.com>
  
***************
*** 53,132 ****
  	* link.cc (print_class_loaded): Changed ABI test to look at
  	various _syms fields.
  
! 2005-08-17  Paolo Bonzini  <bonzini@gnu.org>
  
! 	Backport from mainline:
  
! 	2005-05-18  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* Makefile.am (Makefile.deps): Do not use \0, it is unportable.
! 	* Makefile.in: Regenerate.
  
! 	2005-05-17  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* configure.ac (--enable-libgcj-multifile): Remove.
  
! 	* Makefile.am (all_native_compiled_source_files,
! 	(all_native_compiled_dirs, all_java_dirs, all_java_lo_files,
! 	all_libgcj_lo_files, all_xlib_lo_files,
! 	all_java_deps_files, all_java_stamp_files,
! 	all_java_filelist_files): New variables.
! 	(EXTRA_DIST): New Automake variable.
! 	(CLEANFILES): Add .stamp, .list and .lo files.
! 	(%.list, %.lo, %.stamp, Makefile.deps): New rules.
! 	(classes.stamp): Depend on $(all_java_stamp_files).
! 	(libgcj.la): Pass $(libgcj_la_LIBADD) to the linker without
! 	going through write_entries_to_file.
  
! 	(all_java_source_files, all_property_files): Move earlier.
! 	(libgcj_la_OBJECTS, javao_files, xlib_javao_files,
! 	all_java_class_files): Remove.
! 	(gtk_awt_peer_sources): Rename to...
! 	(gtk_awt_peer_source_files): ... this.  Adjust throughout.
  
! 	(ONESTEP): Remove.
! 	(libgcj0_convenience_la_SOURCES): Remove Java source files.
! 	(libgcj0_convenience_la_LIBADD): Add $(all_libgcj_lo_files).
! 	(libgcj0_convenience_la_DEPENDENCIES): Likewise.
! 	(libgcj_la_SOURCES): Remove.
! 	(lib_gnu_awt_xlib_la_SOURCES): Remove Java source files.
! 	(lib_gnu_awt_xlib_la_LIBADD): Add $(all_xlib_lo_files).
! 	(lib_gnu_awt_xlib_la_DEPENDENCIES): Likewise.
  
! 	* configure: Regenerate.
! 	* Makefile.in: Regenerate.
! 	* external/Makefile.in: Regenerate.
! 	* external/sax/Makefile.in: Regenerate.
! 	* external/w3c_dom/Makefile.in: Regenerate.
! 	* gcj/Makefile.in: Regenerate.
! 	* include/Makefile.in: Regenerate.
! 	* libltdl/Makefile.in: Regenerate.
! 	* testsuite/Makefile.in: Regenerate.
  
! 	2005-05-10  Paolo Bonzini  <bonzini@gnu.org>
  
! 	PR java/21436
! 	* testsuite/libjava.jacks/jacks.xfail: Adjust.
  
! 2005-08-12  Morgan Deters  <mdeters@morgandeters.com>
  
! 	PR libgcj/23353:
! 	* java/lang/natObject.cc (clone): Clear sync_info.
  
! 2005-07-13  Andrew Haley  <aph@redhat.com>
  
! 	* gnu/java/net/protocol/file/Connection.java (unquote): New
! 	method.
! 	(connect): Unquote filename.
! 	gnu/java/net/protocol/jar/Connection.java (getInputStream):
! 	Likewise.  
! 	(getJarFile): Likewise.
  
! 	* java/net/URLConnection.java (getContentHandler): Guard cast with
! 	instaceof.
  
! 	* java/net/URL.java (URL): If the file part of a spec is absolute,
! 	ignore the file part of its context.
  
  2005-07-08  Colin Walters  <walters@verbum.org>
  
--- 929,1189 ----
  	* link.cc (print_class_loaded): Changed ABI test to look at
  	various _syms fields.
  
! 2005-08-17  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* testsuite/libjava.jacks/jacks.xfail: Remove 15.21-assoc-7,
! 	15.21-assoc-8, 15.21-equal-3, 15.28-string-11.
  
! 2005-08-16  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	More testsuite adjustments for PR java/19870.
! 	* testsuite/libjava.lang/PR19870_2.java: New testcase.
! 	* testsuite/libjava.lang/PR19870_2.out: Expected output for the
! 	new testcase.
! 	* testsuite/libjava.jacks/jacks.xfail: Remove
! 	8.5.2-non-static-member-usage-2 and add 15.12.3-explicit-constructor-9.
  
! 2005-08-16  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/xml/xpath/XPathParser.y: Removed.
  
! 2005-08-12  Morgan Deters  <mdeters@morgandeters.com>
  
! 	PR libgcj/23353:
! 	* java/lang/natObject.cc (clone): Clear sync_info.
  
! 2005-07-26  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/java/net/protocol/ftp/package.html,
! 	gnu/javax/swing/text/html/package.html,
! 	gnu/javax/swing/text/html/parser/package.html,
! 	gnu/javax/swing/text/html/parser/models/package.html,
! 	gnu/javax/swing/text/html/parser/support/package.html,
! 	gnu/javax/swing/text/html/parser/support/low/package.html,
! 	gnu/xml/aelfred2/package.html, gnu/xml/dom/package.html,
! 	gnu/xml/pipeline/package.html, gnu/xml/transform/package.html,
! 	gnu/xml/util/package.html, java/awt/geom/doc-files/Area-1.png,
! 	java/awt/geom/doc-files/CubicCurve2D-1.png,
! 	java/awt/geom/doc-files/CubicCurve2D-2.png,
! 	java/awt/geom/doc-files/CubicCurve2D-3.png,
! 	java/awt/geom/doc-files/CubicCurve2D-4.png,
! 	java/awt/geom/doc-files/CubicCurve2D-5.png,
! 	java/awt/geom/doc-files/Ellipse-1.png,
! 	java/awt/geom/doc-files/FlatteningPathIterator-1.html,
! 	java/awt/geom/doc-files/GeneralPath-1.png,
! 	java/awt/geom/doc-files/QuadCurve2D-1.png,
! 	java/awt/geom/doc-files/QuadCurve2D-2.png,
! 	java/awt/geom/doc-files/QuadCurve2D-3.png,
! 	java/awt/geom/doc-files/QuadCurve2D-4.png,
! 	java/awt/geom/doc-files/QuadCurve2D-5.png,
! 	javax/imageio/package.html, javax/imageio/event/package.html,
! 	javax/imageio/metadata/package.html,
! 	javax/imageio/spi/package.html, javax/imageio/stream/package.html,
! 	javax/swing/border/doc-files/BevelBorder-1.png,
! 	javax/swing/border/doc-files/BevelBorder-2.png,
! 	javax/swing/border/doc-files/BevelBorder-3.png,
! 	javax/swing/border/doc-files/EmptyBorder-1.png,
! 	javax/swing/border/doc-files/EtchedBorder-1.png,
! 	javax/swing/border/doc-files/EtchedBorder-2.png,
! 	javax/swing/border/doc-files/LineBorder-1.png,
! 	javax/swing/border/doc-files/MatteBorder-1.png,
! 	javax/swing/border/doc-files/MatteBorder-2.png,
! 	javax/swing/border/doc-files/MatteBorder-3.png,
! 	javax/swing/border/doc-files/MatteBorder-4.png,
! 	javax/swing/border/doc-files/MatteBorder-5.png,
! 	javax/swing/border/doc-files/MatteBorder-6.png,
! 	javax/swing/border/doc-files/SoftBevelBorder-1.png,
! 	javax/swing/border/doc-files/SoftBevelBorder-2.png,
! 	javax/swing/border/doc-files/SoftBevelBorder-3.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders-2.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.FieldBorder-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.MarginBorder-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.MenuBarBorder-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.RadioButtonBorder-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-2.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneDividerBorder-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.ToggleButtonBorder-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-2.png,
! 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-3.png,
! 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-4.png,
! 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-5.png,
! 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-6.png,
! 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-7.png,
! 	javax/swing/plaf/doc-files/ComponentUI-1.dia,
! 	javax/swing/plaf/doc-files/ComponentUI-1.png,
! 	javax/swing/plaf/doc-files/TreeUI-1.png,
! 	javax/xml/datatype/package.html, javax/xml/namespace/package.html,
! 	javax/xml/parsers/package.html, javax/xml/transform/package.html,
! 	javax/xml/transform/dom/package.html,
! 	javax/xml/transform/sax/package.html,
! 	javax/xml/transform/stream/package.html,
! 	javax/xml/validation/package.html, javax/xml/xpath/package.html:
! 	Removed.
  
! 2005-07-22  Tom Tromey  <tromey@redhat.com>
  
! 	* include/Makefile.in: Rebuilt.
! 	* include/Makefile.am (tool_include__HEADERS): Include
! 	classpath's jni.h.
  
! 2005-07-20  Tom Tromey  <tromey@redhat.com>
  
! 	* sources.am, Makefile.in: Rebuilt.
! 	* Makefile.am (all_xlib_lo_files): Removed.
! 	(all_libgcj_lo_files): Likewise.
! 	(lib_gnu_awt_xlib_la_LIBADD): List correct .lo files.
! 	(xlib_java_source_files): Removed.
! 	(xlib_nat_headers): Updated.
! 	* configure: Rebuilt.
! 	* configure.ac: Create standard.omit.
! 	* standard.omit.in: New file.
! 	* standard.omit: Removed.
! 	* scripts/makemake.tcl (gnu/gcj/xlib, gnu/awt/xlib): Now
! 	'package'.
! 	(emit_package_rule): Special case xlib peers.
! 	(emit_source_var): Likewise.
! 	Read standard.omit.in.
! 	* gnu/awt/xlib/XToolkit.java (createEmbeddedWindow): New method.
  
! 2005-07-18  Tom Tromey  <tromey@redhat.com>
  
! 	* HACKING: Updated.
  
! 2005-07-19  Matthias Klose  <doko@debian.org>
  
! 	* classpath/java/awt/im/InputContext.java (clinit): Initialize
! 	  line, im.
! 
! 2005-07-18  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgj/21058:
! 	* sources.am, Makefile.in: Rebuilt.
! 	* scripts/makemake.tcl (emit_bc_rule): Create a temporary list
! 	file.
! 	(emit_source_var): Don't emit patsubst with './'.
! 
! 2005-07-18  Tom Tromey  <tromey@redhat.com>
! 
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am ($(libgij_la_OBJECTS)): Depend on headers.stamp.
! 
! 2005-07-17  Andreas Jaeger  <aj@suse.de>
! 
! 	* defineclass.cc (handleClassBegin): Remove unused variable.
! 
! 2005-07-16  Andreas Schwab  <schwab@suse.de>
! 
! 	* scripts/makemake.tcl (emit_package_rule): Emit command to create
! 	target directory.
! 	* Makefile.am (%.lo): Don't create it here.
! 	* sources.am, Makefile.in: Regenerated.
! 
! 2005-07-15  Tom Tromey  <tromey@redhat.com>
! 
! 	Major merge with Classpath.
! 	Removed many duplicate files.
! 	* HACKING: Updated.x
! 	* classpath: Imported new directory.
! 	* standard.omit: New file.
! 	* Makefile.in, aclocal.m4, configure: Rebuilt.
! 	* sources.am: New file.
! 	* configure.ac: Run Classpath configure script.  Moved code around
! 	to support.  Disable xlib AWT peers (temporarily).
! 	* Makefile.am (SUBDIRS): Added 'classpath'
! 	(JAVAC): Removed.
! 	(AM_CPPFLAGS): Added more -I options.
! 	(BOOTCLASSPATH): Simplified.
! 	Completely redid how sources are built.
! 	Include sources.am.
! 	* include/Makefile.am (tool_include__HEADERS): Removed jni.h.
! 	* include/jni.h: Removed (in Classpath).
! 	* scripts/classes.pl: Updated to look at built classes.
! 	* scripts/makemake.tcl: New file.
! 	* testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Added
! 	-I options.
! 	(gcj_jni_invocation_compile_c_to_binary): Likewise.
! 
! 2005-07-15  Scott Gilbertson  <scottg@mantatest.com>
! 
! 	* gnu/awt/xlib/XCanvasPeer.java (attributes): New field.
! 	(eventMask): New field.
! 	(XCanvasPeer(Component)): Use attributes field.
! 	(setBackground): Implemented.
! 	(setEventMask): Process mask only if changed.
! 	* gnu/awt/xlib/XEventLoop.java (class): Iplement Runnable.
! 	(eventLoopThread): New field.
! 	(XEventLoop(Display,EventQueue)): Start eventLoopThread.
! 	(interrupt): Removed.
! 	(run): New method.
! 	* gnu/awt/xlib/XEventQueue.java (getNextEvent): Process Container
! 	and Component events.
! 	* gnu/awt/xlib/XFramePeer.java (processingConfigureNotify): New
! 	field.
! 	(configureNotify): Set and clear processingConfigureNotify.
! 	(setBounds): Process only if processingConfigureNotify is false.
! 	(toBack): Implemented.
! 	(toFront): Implemented.
! 	* gnu/awt/xlib/XGraphics.java (setColor): Ignore null color.
! 	* gnu/awt/xlib/XGraphicsConfiguration.java (getPixel): Ignore null
! 	color.
! 	* gnu/awt/xlib/XToolkit.java (nativeQueueEmpty): Always return true.
! 	(wakeNativeQueue): Do nothing.
! 	(iterateNativeQueue): Do queue.wait if blocking.
! 	* gnu/gcj/xlib/Font.java (loadFont): New method.
! 	(loadFontImpl): Renamed native method, was loadFont. 
! 	* gnu/gcj/xlib/Window.java (toFront): New method.
! 	(toBack): New method.
! 	* gnu/gcj/xlib/natFont.cc (loadFontImpl): Renamed method, was 
! 	loadFont.
! 	* gnu/gcj/xlib/natWindow.cc (toBack): New method.
! 	(toFront): New method. 
! 	* gnu/gcj/xlib/natXAnyEvent.cc (loadNext): Removed timeout.
! 
! 2005-07-14  Andrew Haley  <aph@redhat.com>
! 
!         * gnu/java/net/protocol/file/Connection.java (unquote): New
!         method.
!         (connect): Unquote filename.
!         gnu/java/net/protocol/jar/Connection.java (getInputStream):
!         Likewise.  
!         (getJarFile): Likewise.
! 
!         * java/net/URLConnection.java (getContentHandler): Guard cast with
!         instaceof.
! 
!         * java/net/URL.java (URL): If the file part of a spec is absolute,
!         ignore the file part of its context.
! 
! 2005-07-14  Aaron Luchko  <aluchko@redhat.com>
! 
! 	* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java:
! 	Implemented VirtualMachine Command Set.
! 
! 2005-07-14  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/Class.java (getProtectionDomain): Merged javadoc from
! 	Classpath.
! 
! 2005-07-12  Aaron Luchko  <aluchko@redhat.com>
! 
! 	* gnu/classpath/jdwp/processor/FieldCommandSet.java:
! 	Implemented the Field CommandSet.
! 	* gnu/classpath/jdwp/processor/InterfaceTypeCommandSet.java:
! 	Implemented the InterfaceType CommandSet.
! 
! 2005-07-12  Aaron Luchko  <aluchko@redhat.com>
! 
! 	* gnu/classpath/jdwp/processor/PacketProcessor.java (run): Send
! 	shutdown to jdwp instead of connection.
! 
! 2005-07-12  Aaron Luchko  <aluchko@redhat.com>
! 
! 	* gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java:
! 	New file.
  
  2005-07-08  Colin Walters  <walters@verbum.org>
  
***************
*** 142,150 ****
  	(regular, non-realtime scheduling), not SCHED_RR (realtime,
  	round-robin).
  
! 2005-07-07  Release Manager
  
! 	* GCC 4.0.1 released.
  
  2005-06-05  Anthony Green  <green@redhat.com>
  
--- 1199,1493 ----
  	(regular, non-realtime scheduling), not SCHED_RR (realtime,
  	round-robin).
  
! 2005-07-07  Aaron Luchko  <aluchko@redhat.com>
  
! 	* gnu/classpath/jdwp/util/Signature.java
! 	(computeFieldSignature): New Method.
! 
! 2005-07-07  Aaron Luchko  <aluchko@redhat.com>
! 
! 	* gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java:New
! 	file.
! 
! 2005-07-07  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* testsuite/libjava.jacks/jacks.xfail: Remove 6.5.5.1-nested-4,
! 	6.5.5.1-nested-7, 6.5.5.1-nested-16, 6.5.5.1-nested-17.
! 
! 2005-07-07  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* testsuite/libjava.compile/PR21045.java: New test.
! 	* testsuite/libjava.jacks/jacks.xfail: Remove 15.9.5.1-exception-1,
! 	15.9.5.1-exception-3, 8.3.2-abrupt-6, 8.3.2-abrupt-7.
! 
! 2005-07-06  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/io/InputStreamReader.java (refill): Handle no-progress
! 	case correctly.
! 	* gnu/gcj/convert/IOConverter.java: Add 'utf8' alias.
! 
! 2005-07-06  Tom Tromey  <tromey@redhat.com>
! 
! 	* testsuite/libjava.jacks/jacks.xfail: Removed 9.1.3-body-5.
! 
! 2005-07-05  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* testsuite/libjava.compile/PR19674.java: New test.
! 
! 2005-07-05  Aaron Luchko  <aluchko@redhat.com>
! 
! 	* gnu/classpath/jdwp/processor/StringReferenceCommandSet.java:
! 	New file.
! 
! 2005-07-04  Aaron Luchko  <aluchko@redhat.com>
! 
! 	* gnu/classpath/jdwp/processor/CommandSet.java: New file.
! 	* gnu/classpath/jdwp/processor/PacketProcessor.java: Use
! 	CommandSets to handle JdwpCommandPackets.
! 	* gnu/classpath/jdwp/transport/JdwpReplyPacket.java: New
! 	Constructor.
! 
! 2005-07-01  Tom Tromey  <tromey@redhat.com>
! 
! 	* libtool-version: Updated.
! 
! 2005-06-30  Aaron Luchko  <aluchko@redhat.com>
! 
! 	* gnu/classpath/jdwp/util/JdwpString.java: New file.
! 
! 2005-06-30  Keith Seitz  <keiths@redhat.com>
! 
! 	* gnu/classpath/jdwp/transport/JdwpPacket.java (write): New method.
! 	(myWrite): New abstract method.
! 	(toBytes): Remove.
! 	(myToBytes): Remove.
! 	* gnu/classpath/jdwp/transport/JdwpReplyPacket.java (myWrite): New
! 	method.
! 	* gnu/classpath/jdwp/transport/JdwpCommandPacket.java (myWrite): New
! 	method.
! 	* gnu/classpath/jdwp/transport/JdwpConnection.java (sendPacket): Use
! 	JdwpPacket.write instead of JdwpPacket.toBytes.
! 
! 2005-06-30  Keith Seitz  <keiths@redhat.com>
! 
! 	* gnu/classpath/jdwp/transport/JdwpConnection.java (sendEvent): New
! 	method.
! 	(_bytes): New member.
! 	(_doStream): New member.
! 	(JdwpConnection): Initialize new members.
! 
! 2005-06-29  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* all files: Update for new FSF address.
! 
! 2005-06-29  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/22211:
! 	* testsuite/libjava.lang/pr22211.java: New file.
! 	* java/lang/natThread.cc (finish_): Synchronize when updating
! 	alive_flag.
! 	(_Jv_AttachCurrentThread): Likewise.
! 	(interrupt): Only call _Jv_ThreadInterrupt if thread is alive.
! 	* java/lang/Thread.java (isAlive): Now synchronized.
! 
! 2005-06-29  Tom Tromey  <tromey@redhat.com>
! 
! 	* interpret.cc (run) <insn_checkcast, checkcast_resolved>: Use
! 	_Jv_CheckCast.
! 
! 2005-06-28  Robin Green  <greenrd@greenrd.org>
! 
! 	PR java/22189
! 	* gnu/gcj/runtime/PersistentByteMap.java (init): Fix rounding
! 	error.
! 
! 2005-06-27  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/21540, PR java/13788:
! 	* testsuite/libjava.compile/pr21540.java: New file.
! 	* testsuite/libjava.compile/pr13788.java: New file.
! 	* testsuite/libjava.jacks/jacks.xfail: Updated.
! 
! 2005-06-26  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* testsuite/libjava.mauve/xfails: Updated to reflect current state
! 	of mauve and libjava. 
! 
! 2005-06-24  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/natClassLoader.cc (_Jv_UnregisterClass): Handle case
! 	where class' name is NULL.
! 	(_Jv_FindClass): Don't wait for class state.
! 	* java/lang/natVMClassLoader.cc (defineClass): Only unregister if
! 	name found.
! 	* include/java-interp.h (_Jv_DefineClass): Updated.
! 	* defineclass.cc (_Jv_DefineClass): Added 'name_result' argument.
! 	(struct _Jv_ClassReader): Likewise.
! 	(found_name): New field.
! 	(handleClassBegin): Set *found_name.
! 	(_Jv_VerifyMethodSignature): Handle case where ptr==NULL.
! 	(handleClassBegin): Throw error if super class not set.
! 	(read_methods): Correctly call check_tag and prepare_pool_entry.
! 
! 2005-06-24  Tom Tromey  <tromey@redhat.com>
! 
! 	* boehm.cc (_Jv_MarkObj): Handle case where field's type is NULL.
! 
! 2005-06-24  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify.cc (verify_instructions_0): Correctly handle situation
! 	where PC falls off end.
! 
! 2005-06-24  Tom Tromey  <tromey@redhat.com>
! 
! 	* interpret.cc (compile): Handle case where table entry is
! 	outside of PC range.
! 
! 2005-06-23  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* testsuite/libjava.compile/PR20697.java: New test-case.
! 
! 2005-06-22  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am (SUBDIRS): Use append for conditional.
! 	(toolexeclib_LTLIBRARIES): Likewise.
! 	(lib_gnu_java_awt_peer_gtk_la_SOURCES): Directly define with
! 	a conditional append.
! 	* Makefile.in: Regenerate.
! 
! 2005-06-17  Keith Seitz  <keiths@redhat.com>
! 
! 	* gnu/classpath/jdwp/exception/VmDeadException.java: New file.
! 	* gnu/classpath/jdwp/exception/NotImplementedException.java: New file.
! 	* gnu/classpath/jdwp/exception/JdwpInternalErrorException.java: New
! 	file.
! 	* gnu/classpath/jdwp/exception/JdwpException.java: New file.
! 	* gnu/classpath/jdwp/exception/InvalidThreadGroupException.java: New
! 	file.
! 	* gnu/classpath/jdwp/exception/InvalidThreadException.java: New file.
! 	* gnu/classpath/jdwp/exception/InvalidStringException.java: New file
! 	* gnu/classpath/jdwp/exception/InvalidObjectException.java: New file.
! 	* gnu/classpath/jdwp/exception/InvalidEventTypeException.java: New
! 	file.
! 	* gnu/classpath/jdwp/exception/InvalidCountException.java: New file.
! 	* gnu/classpath/jdwp/exception/InvalidClassException.java: New file.
! 
! 2005-06-16  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am (libgcj_la_SOURCES): Define without conditional sources.
! 	(if USING_BOEHMGC): Directly append libgcj_la_SOURCES.
! 	(if USING_NOGC, SUPPLY_BACKTRACE, USING_POSIX_PLATFORM,
! 	USING_WIN32_PLATFORM, USING_DARWIN_CRT, USING_POSIX_THREADS,
! 	USING_WIN32_THREADS, USING_NO_THREADS): Likewise.
! 	* Makefile.in: Regenerate.
! 
! 2005-06-15  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure.ac (USING_ECOS_PLATFORM): Remove and merge into...
! 	(USING_POSIX_PLATFORM): ... here.
! 	* Makefile.am: Delete USING_ECOS_PLATFORM.
! 	* configure, Makefile.in, include/Makefile.in, testsuite/Makefile.in,
! 	external/Makefile.in, external/sax/Makefile.in,
! 	external/w3c_dom/Makefile.in, gcj/Makefile.in: Regenerate.
! 
! 2005-06-15  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/17536:
! 	* testsuite/libjava.lang/pr17536.java: New file.
! 	* testsuite/libjava.lang/pr17536.out: New file.
! 
! 2005-06-15  Goffredo Baroncelli  <kreijack@inwind.it>
! 
! 	PR libgcj/21074:
! 	* gnu/java/net/protocol/http/HTTPURLConnection.java
! 	(getHeaderFieldKey): Check index.
! 
! 2005-06-15  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/21906:
! 	* defineclass.cc (handleMethodsEnd): Set ncode for abstract
! 	methods.
! 	* include/jvm.h (_Jv_ThrowAbstractMethodError): Declare.
! 	* link.cc (_Jv_ThrowAbstractMethodError): Renamed.  No longer
! 	static.
! 	(append_partial_itable): Use it.
! 	(set_vtable_entries): Likewise.
! 
! 2005-06-15  Tom Tromey  <tromey@redhat.com>
! 
! 	* gnu/gcj/runtime/SystemClassLoader.java (init): Clear
! 	last_was_sep in loop.
! 
! 2005-06-15  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
! 
! 	* configure.host: Handle Solaris 10/x86.
! 
! 2005-06-14  Keith Seitz  <keiths@redhat.com>
! 
! 	* gnu/classpath/jdwp/id/JdwpIdFactory.java: New file.
! 	* gnu/classpath/jdwp/processor/PacketProcessor.java: New file.
! 
! 2005-06-14  Keith Seitz  <keiths@redhat.com>
! 
! 	* gnu/classpath/jdwp/id/ArrayId.java: New file.
! 	* gnu/classpath/jdwp/id/ArrayReferenceTypeId.java: New file.
! 	* gnu/classpath/jdwp/id/ClassLoaderId.java: New file.
! 	* gnu/classpath/jdwp/id/ClassObjectId.java: New file.
! 	* gnu/classpath/jdwp/id/ClassReferenceTypeId.java: New file.
! 	* gnu/classpath/jdwp/id/InterfaceReferenceTypeId.java: New file.
! 	* gnu/classpath/jdwp/id/JdwpId.java: New file.
! 	* gnu/classpath/jdwp/id/ObjectId.java: New file.
! 	* gnu/classpath/jdwp/id/ReferenceTypeId.java: New file.
! 	* gnu/classpath/jdwp/id/StringId.java: New file.
! 	* gnu/classpath/jdwp/id/ThreadGroupId.java: New file.
! 	* gnu/classpath/jdwp/id/ThreadId.java: New file.
! 
! 2005-06-14  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/19877:
! 	* configure, aclocal.m4, Makefile.in: Rebuilt.
! 
! 2005-06-14  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/Class.java (getClasses): New method.
! 	(internalGetClasses): Likewise.
! 	(getClassLoader): Updated documentation.
! 	(getDeclaredClasses): New overload; old overload no longer
! 	native.
! 	(_getConstructors): Removed.
! 	(resourcePath): Updated.
! 	* java/lang/natClass.cc (getClasses): Removed.
! 	* java/lang/Class.h (getDeclaredClasses, getDeclaredConstructors):
! 	Updated.
! 	(_getConstructors): Removed.
! 
! 2005-06-13  Jim Huang  <jserv@kaffe.org>
! 
! 	PR libgcj/22036:
! 	* jni.cc (_Jv_JNI_NewObjectV): Use chars() method.
! 	(_Jv_JNI_NewObject): Likewise.
! 
! 2005-06-13  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/21844:
! 	* testsuite/libjava.lang/pr21844.java: New file.
! 	* testsuite/libjava.lang/pr21844.out: New file.
! 
! 2005-06-08  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR libgcj/21949
! 	* java/rmi/server/RMIClassLoader.java (getClassLoader): Make public.
! 	From Gary Benson.
! 
! 2005-06-08  Ziga Mahkovec  <ziga.mahkovec@klika.si>
! 
! 	* java/text/MessageFormat.java (parse): When parsing strings, check
! 	for an empty pattern trailer.
! 
! 2005-06-06  Keith Seitz  <keiths@redhat.com>
! 
! 	* gnu/classpath/jdwp/util/Signature.java: New file.
! 	* gnu/classpath/jdwp/transport/JdwpConnection.java: New file.
  
  2005-06-05  Anthony Green  <green@redhat.com>
  
***************
*** 160,196 ****
  	(addURLImpl): Add special treatment for the "core" protocol.
  	* gnu/gcj/natCore.cc (find): New method.
  	* gnu/gcj/Core.java (find): New method.
- 	
- 2005-06-04  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* jawt.c: Remove malloc.h include and use stdlib.h instead.
  
  2005-06-01  Tom Tromey  <tromey@redhat.com>
  
  	PR libgcj/21753:
  	* java/lang/natString.cc (substring): Changed sharing heuristic.
  
  2005-05-29  Michael Koch  <konqueror@gmx.de>
  
  	PR libgcj/20273:
  	* java/util/LinkedHashMap.java (access): Set 'root.pred'.
  
! 2005-05-27  Robin Green  <greenrd@greenrd.org>
  
- 	PR libgcj/21775:
- 	* java/util/logging/natLogger.cc (getCallerStackFrame): Start
- 	with i=1.
  
  2005-05-26  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* include/jvm.h (FLAG_BINARYCOMPAT_ABI): New.
! 	(GCJ_BINARYCOMPAT_ADDITION): Removed.
  	(OLD_GCJ_40_BC_ABI_VERSION): Renamed. Old-style version ID for BC-ABI
  	classes.
! 	(GCJ_40_BC_ABI_VERSION): New. Calculate version	ID using new method.
  	(_Jv_CheckABIVersion): Check for both old and new style version IDs.
  
! 2005-05-14  Chris Burdess  <dog@gnu.org>
  
  	* gnu/xml/dom/ls/SAXEventSink.java: Ignore XML entities in start/
  	end entity callbacks.
--- 1503,1627 ----
  	(addURLImpl): Add special treatment for the "core" protocol.
  	* gnu/gcj/natCore.cc (find): New method.
  	* gnu/gcj/Core.java (find): New method.
  
! 2005-06-03  Keith Seitz  <keiths@redhat.com>
! 
! 	* gnu/classpath/jdwp/transport/ITransport.java: New file.
! 	* gnu/classpath/jdwp/transport/SocketTransport.java: New file.
! 	* gnu/classpath/jdwp/transport/TransportFactory.java: New file.
! 
! 2005-06-03  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* jawt.c: Remove malloc.h, covered by stdlib.h.
! 
! 	* testsuite/libjava.jni/jni.exp
! 	(gcj_jni_invocation_compile_c_to_binary): Add -bind_at_load to silence
! 	the build process.
! 
! 2005-06-02  Keith Seitz  <keiths@redhat.com>
! 
! 	* gnu/classpath/jdwp/transport/TransportException.java: New file.
! 
! 2005-06-02  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* mauve-libgcj: Remove implemented classes from the fail section.
! 	Add two new not implemented to it.
! 
! 2005-06-01  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* configure.ac (BACKTRACESPEC): Remove definition, but continue to
! 	AC_SUBST definition from configure.host.
! 	* configure.host: Don't use -fno-omit-frame-pointer. Set BACKTRACESPEC
! 	to -fomit-frame-pointer on 32-bit x86 targets.
! 
! 2005-06-01  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/io/ObjectInputStream.java (currentLoader): Fixed typo.
! 
! 2005-06-01  Ziga Mahkovec  <ziga.mahkovec@klika.si>
! 
! 	PR libgcj/20435:
! 	* gnu/regexp/RESyntax.java (RE_POSSESSIVE_OPS): New field.
! 	(static): Add possessive matching to JAVA_1_4 syntax.
! 	* gnu/regexp/RETokenRepeated.java (possessive): New field.
! 	(makePossessive, isPossessive): New methods.
! 	(match): Don't back off during possessive matching.
! 	* gnu/regexp/RE.java (initalize): Accept possessive quantifier.
! 	* java/util/regex/Pattern.java (constructor): Switch syntax from PERL5
! 	to JAVA_1_4.
! 
! 2005-06-01  Keith Seitz  <keiths@redhat.com>
! 
! 	* gnu/classpath/jdwp/transport/JdwpPacket.java: New file.
! 	* gnu/classpath/jdwp/transport/JdwpCommandPacket.java: New file.
! 	* gnu/classpath/jdwp/transport/JdwpReplyPacket.java: New file.
! 
! 2005-06-01  Tom Tromey  <tromey@redhat.com>
! 
! 	PR libgcj/21785:
! 	* java/io/natObjectInputStream.cc (currentClassLoader): Removed.
! 	(currentLoader): New method.
! 	* java/io/ObjectInputStream.java (resolveProxyClass): Use
! 	currentLoader.
! 	(currentLoader): Now native.
! 	(currentClassLoader): Removed.
! 	* testsuite/libjava.lang/pr21785.java: New file.
! 	* testsuite/libjava.lang/pr21785.out: New file.
  
  2005-06-01  Tom Tromey  <tromey@redhat.com>
  
  	PR libgcj/21753:
  	* java/lang/natString.cc (substring): Changed sharing heuristic.
  
+ 2005-05-30  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/21821
+ 	* gnu/java/nio/channels/natFileChannelPosix.cc (open): Don't use
+ 	MAXPATHLEN. Format exception message using a StringBuffer instead.
+ 
  2005-05-29  Michael Koch  <konqueror@gmx.de>
  
  	PR libgcj/20273:
  	* java/util/LinkedHashMap.java (access): Set 'root.pred'.
  
! 2005-05-27  Ziga Mahkovec  <ziga.mahkovec@klika.si>
! 
! 	* ChangeLog: Fix typo.
! 
! 2005-05-26  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	Testsuite adjustments for PR java/19870.
! 	* testsuite/libjava.lang/PR19870.java: New testcase.
! 	* testsuite/libjava.lang/PR19870.out: Expected output for the
! 	testcase.
! 	* testsuite/libjava.jacks/jacks.xfail: Add
! 	8.5.2-accessible-static-member-usage-3 and 15.8.4-static-2
  
  
  2005-05-26  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* include/jvm.h (FLAG_BINARYCOMPAT_ABI, FLAG_BOOTSTRAP_LOADER): New.
! 	(GCJ_BINARYCOMPAT_ADDITION, GCJ_BOOTSTRAP_LOADER_ADDITION): Removed.
  	(OLD_GCJ_40_BC_ABI_VERSION): Renamed. Old-style version ID for BC-ABI
  	classes.
! 	(GCJ_CXX_ABI_VERSION): Renamed from GCJ_ABI_VERSION.
! 	(GCJ_40_BC_ABI_VERSION): New. Calculate version	IDs using new method.
  	(_Jv_CheckABIVersion): Check for both old and new style version IDs.
+ 	(_Jv_ClassForBootstrapLoader): Use FLAG_BOOTSTRAP_LOADER. 
  
! 2005-05-25  Richard Henderson  <rth@redhat.com>
! 
! 	PR libgcj/21692
! 	* sysdep/descriptor-n.h: New file.
! 	* sysdep/descriptor-y.h: New file.
! 	* sysdep/powerpc/descriptor.h: New file.
! 	* configure.host: Set $descriptor_h appropriate for the host.
! 	* configure.ac: Link it.
! 	* configure: Regenerate.
! 	* stacktrace.cc: Include sysdep/descriptor.h.
! 	(_Jv_StackTrace::UpdateNCodeMap): Use UNWRAP_FUNCTION_DESCRIPTOR.
! 
! 2005-05-25  Chris Burdess  <dog@gnu.org>
  
  	* gnu/xml/dom/ls/SAXEventSink.java: Ignore XML entities in start/
  	end entity callbacks.
***************
*** 209,219 ****
  	* java/lang/natString.cc (_Jv_StringFindSlot): Handle case where
  	table has no NULL entries.
  
! 2005-05-20  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/21637:
! 	* gnu/java/net/protocol/jar/Connection.java (getInputStream):
! 	Throw FileNotFoundException if jar entry not found.
  
  2005-05-18  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
--- 1640,1672 ----
  	* java/lang/natString.cc (_Jv_StringFindSlot): Handle case where
  	table has no NULL entries.
  
! 2005-05-22  Andreas Jaeger  <aj@suse.de>
  
! 	* java/lang/mprec.c (mult, lshift, b2d, d2b): Add parenthesis to
! 	avoid warnings.
! 
! 2005-05-21  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	* testsuite/libjava.jacks/jacks.xfail: Remove 3.10.2-round-6.
! 
! 2005-05-19  Richard Henderson  <rth@redhat.com>
! 
! 	* exception.cc: Revert 05-17 gcc_unreachable change.
! 
! 2005-05-19  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* java/lang/natClassLoader.cc (_Jv_NewClass): Use
! 	_Jv_RegisterInitiatingLoader to register array classes, not
! 	_Jv_RegisterClass.
! 	(_Jv_RegisterInitiatingLoader): Give up if called very early during
! 	bootstrapping. Add a FIXME to handle this case better.
! 
! 2005-05-19  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* Makefile.am (libgcj0_convenience_la): Removed. Don't build a libgcj
! 	convenience library.
! 	(libgcj_la_SOURCES): New. Move sources here.
! 	(libgcj.la): Remove rule.
  
  2005-05-18  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
***************
*** 238,252 ****
  	(_Jv_FreeDrawingSurface): Destroy lock.
  	(_Jv_FreeDrawingSurfaceInfo): Free platformInfo.
  
  2005-05-17  David Daney  <ddaney@avtrex.com>
  
  	PR libgcj/18220
  	* testsuite/libjava.lang/Process_3.java (run):  Exit on error.
  
  2005-05-16  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/21140:
! 	* java/nio/charset/Charset.java (encode, decode): Don't cache.
  
  2005-05-16  Tom Tromey  <tromey@redhat.com>
  
--- 1691,1772 ----
  	(_Jv_FreeDrawingSurface): Destroy lock.
  	(_Jv_FreeDrawingSurfaceInfo): Free platformInfo.
  
+ 2005-05-18  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Makefile.am (Makefile.deps): Do not use \0, it is unportable.
+ 	* Makefile.in: Regenerate.
+ 
+ 2005-05-17  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS.
+ 	Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF.
+ 	* aclocal.m4, configure, config.h.in, include/config.h.in,
+ 	Makefile.in, include/Makefile.in, testsuite/Makefile.in,
+ 	external/Makefile.in, external/sax/Makefile.in,
+ 	external/w3c_dom/Makefile.in, gcj/Makefile.in: Regenerate.
+ 
  2005-05-17  David Daney  <ddaney@avtrex.com>
  
  	PR libgcj/18220
  	* testsuite/libjava.lang/Process_3.java (run):  Exit on error.
  
+ 2005-05-17  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* exception.cc (abort): Remove std::abort hack.
+ 	(gcc_unreacheable): Define.
+ 
+ 2005-05-17  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Makefile.am (Makefile.deps): Do not create native.list and
+ 	bytecodes.list.
+ 	(all_native_compiled_dirs, all_java_dirs): Compute dir list here.
+ 	* Makefile.in: Regenerate.
+ 
+ 2005-05-17  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* configure.ac (--enable-libgcj-multifile): Remove.
+ 
+ 	* Makefile.am (all_native_compiled_source_files,
+ 	(all_native_compiled_dirs, all_java_dirs, all_java_lo_files,
+ 	all_libgcj_lo_files, all_xlib_lo_files,
+ 	all_java_deps_files, all_java_stamp_files,
+ 	all_java_filelist_files): New variables.
+ 	(EXTRA_DIST): New Automake variable.
+ 	(CLEANFILES): Add .stamp, .list and .lo files.
+ 	(%.list, %.lo, %.stamp, Makefile.deps): New rules.
+ 	(classes.stamp): Depend on $(all_java_stamp_files).
+ 	(libgcj.la): Pass $(libgcj_la_LIBADD) to the linker without
+ 	going through write_entries_to_file.
+ 
+ 	(all_java_source_files, all_property_files): Move earlier.
+ 	(libgcj_la_OBJECTS, javao_files, xlib_javao_files,
+ 	all_java_class_files): Remove.
+ 	(gtk_awt_peer_sources): Rename to...
+ 	(gtk_awt_peer_source_files): ... this.  Adjust throughout.
+ 
+ 	(ONESTEP): Remove.
+ 	(libgcj0_convenience_la_SOURCES): Remove Java source files.
+ 	(libgcj0_convenience_la_LIBADD): Add $(all_libgcj_lo_files).
+ 	(libgcj0_convenience_la_DEPENDENCIES): Likewise.
+ 	(libgcj_la_SOURCES): Remove.
+ 	(lib_gnu_awt_xlib_la_SOURCES): Remove Java source files.
+ 	(lib_gnu_awt_xlib_la_LIBADD): Add $(all_xlib_lo_files).
+ 	(lib_gnu_awt_xlib_la_DEPENDENCIES): Likewise.
+ 
+ 	* configure: Regenerate.
+ 	* Makefile.in: Regenerate.
+ 	* external/Makefile.in: Regenerate.
+ 	* external/sax/Makefile.in: Regenerate.
+ 	* external/w3c_dom/Makefile.in: Regenerate.
+ 	* gcj/Makefile.in: Regenerate.
+ 	* include/Makefile.in: Regenerate.
+ 	* libltdl/Makefile.in: Regenerate.
+ 	* testsuite/Makefile.in: Regenerate.
+ 
  2005-05-16  Tom Tromey  <tromey@redhat.com>
  
! 	* java/nio/charset/Charset.java (encode, decode): Synchronize on
! 	'this', not the class.
  
  2005-05-16  Tom Tromey  <tromey@redhat.com>
  
***************
*** 261,267 ****
  2005-05-16  Ziga Mahkovec  <ziga.mahkovec@klika.si>
  
  	PR libgcj/20504
! 	gnu/regexp/RE.java: Add support for quoting constructs.
  
  2005-05-15  Tom Tromey  <tromey@redhat.com>
  
--- 1781,1791 ----
  2005-05-16  Ziga Mahkovec  <ziga.mahkovec@klika.si>
  
  	PR libgcj/20504
! 	* gnu/regexp/RE.java: Add support for quoting constructs.
! 
! 2005-05-15  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/String.java (startsWith): Fixed javadoc.
  
  2005-05-15  Tom Tromey  <tromey@redhat.com>
  
***************
*** 269,281 ****
  	* testsuite/libjava.compile/pr21519.java: New file.
  	* testsuite/libjava.compile/pr21519.no-link: New file.
  
  2005-05-13  Bryce McKinlay  <mckinlay@redhat.com>
  
  	PR libgcj/21557
  	* java/lang/natObject.cc (_Jv_MonitorEnter): Save and clear thread
  	interrupt status flag if _Jv_CondWait is interrupted.
  
! 2005-05-13  Bryce McKinlay  <mckinlay@redhat.com>
  
  	* include/jvm.h (gcj::verifyClasses): Declare.
  	* link.cc (gcj::verbose_class_flag): Moved.
--- 1793,1814 ----
  	* testsuite/libjava.compile/pr21519.java: New file.
  	* testsuite/libjava.compile/pr21519.no-link: New file.
  
+ 2005-05-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* stacktrace.cc (getLineNumberForFrame): Use _Jv_GetSafeArg.
+ 
  2005-05-13  Bryce McKinlay  <mckinlay@redhat.com>
  
  	PR libgcj/21557
  	* java/lang/natObject.cc (_Jv_MonitorEnter): Save and clear thread
  	interrupt status flag if _Jv_CondWait is interrupted.
  
! 2005-05-13  Tom Tromey  <tromey@redhat.com>
! 
! 	* gnu/gcj/runtime/SystemClassLoader.java (init): Handle empty
! 	element in path.
! 
! 2005-05-12  Bryce McKinlay  <mckinlay@redhat.com>
  
  	* include/jvm.h (gcj::verifyClasses): Declare.
  	* link.cc (gcj::verbose_class_flag): Moved.
***************
*** 285,320 ****
  	if gcj::verifyClasses is not set.
  	* gij.cc (main): Set gcj::verifyClasses when '-noverify' is given.
  
! 2005-05-13  Aaron Luchko  <aluchko@redhat.com>
  
  	* gij.cc (main): Recognize '-verify', '-noverify', and
  	'-verifyremote'
  
! 2005-05-13  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/gcj/runtime/SystemClassLoader.java (init): Handle empty
! 	element in path.
  
  2005-05-09  David Daney  <ddaney@avtrex.com>
  
  	* java/util/BitSet.java (get(int, int)): Fix breakage when
  	requested set doesn't start on a multiple of 64.
  
! 2005-04-27  Andrew Haley  <aph@redhat.com>
  
! 	PR java/19285
! 	* prims.cc (_Jv_ResolvePoolEntry): New function.
! 	* include/jvm.h (_Jv_Linker::find_field): New arg: found_class.
! 	* link.cc (_Jv_Linker::find_field): New arg: found_class.
! 	(resolve_pool_entry): Initialize the class in which a field is
! 	found.
! 	(link_symbol_table): Pass new arg to found_class.
  
! 2005-05-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
! 	(init_glib_threads): Check if threading system is already
! 	initialized.
  
  2005-05-04  Tom Tromey  <tromey@redhat.com>
  
--- 1818,1994 ----
  	if gcj::verifyClasses is not set.
  	* gij.cc (main): Set gcj::verifyClasses when '-noverify' is given.
  
! 2005-05-12  Aaron Luchko  <aluchko@redhat.com>
  
  	* gij.cc (main): Recognize '-verify', '-noverify', and
  	'-verifyremote'
  
! 2005-05-12  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	* configure.host: Set IEEESPEC to -mieee for sh*-*-*.
! 
! 2005-05-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* Makefile.am (cond_gtk_gcjawt_ltlibrary): Rename libjawt.la
! 	libgcjawt.la.
! 
! 2005-05-11  Tom Tromey  <tromey@redhat.com>
! 
! 	* external/w3c_dom/Makefile.in: Rebuilt.
! 	* external/w3c_dom/Makefile.am (libw3c_gcj_la_GCJFLAGS): Added
! 	-fbootstrap-classes.
! 	* external/sax/Makefile.in: Rebuilt.
! 	* external/sax/Makefile.am (libsax_gcj_la_GCJFLAGS): Added
! 	-fbootstrap-classes.
! 	* java/lang/Class.h (_Jv_CopyClassesToSystemLoader): Declare as
! 	friend.
! 	* java/lang/natVMClassLoader.cc (getSystemClassLoaderInternal):
! 	Call _Jv_CopyClassesToSystemLoader.
! 	* java/lang/natClassLoader.cc (system_class_list): New global.
! 	(_Jv_RegisterClassHookDefault): Handle bootstrap and system
! 	classes differently.
! 	(_Jv_CopyClassesToSystemLoader): New function.
! 	(SYSTEM_LOADER_INITIALIZED): New define.
! 	* include/jvm.h (GCJ_BOOTSTRAP_LOADER_ADDITION): New define.
! 	(_Jv_CheckABIVersion): Use it.
! 	(_Jv_ClassForBootstrapLoader): New function.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (AM_GCJFLAGS): Added -fbootstrap-classes.
! 
! 2005-05-10  Tom Tromey  <tromey@redhat.com>
! 
! 	* gcj/javaprims.h: Updated.
! 	* java/lang/String.java (String(StringBuilder)): New constructor.
! 	* java/lang/natStringBuilder.cc: New file.
! 	* java/lang/StringBuilder.java: New file.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (core_java_source_files): Added StringBuilder.java.
! 	(nat_source_files): Added natStringBuilder.cc.
! 
! 2005-05-10  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	PR java/21436
! 	* testsuite/libjava.jacks/jacks.xfail: Adjust.
! 
! 2005-05-09  Mike Stump  <mrs@apple.com>
! 
! 	* configure: Regenerate.
  
  2005-05-09  David Daney  <ddaney@avtrex.com>
  
  	* java/util/BitSet.java (get(int, int)): Fix breakage when
  	requested set doesn't start on a multiple of 64.
  
! 2005-05-07  Matthias Klose  <doko@debian.org>
  
! 	* gnu/java/awt/peer/gtk/GtkVolatileImage.java: Add imports.
  
! 2005-05-06  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* Makefile.am (gtk_awt_peer_sources): Add GtkVolatileImage.java.
! 	* Makefile.in: Regenerate.
! 	* gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
! 	(createCompatibleVolatileImage(int,int)): Implement.
! 	(createCompatibleVolatileImage(int,int,ImageCapabilities)):
! 	Likewise.
! 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (backBuffer, caps):
! 	New fields.
! 	(createVolatileImage): Implement.
! 	(createBuffers): Likewise.
! 	(getBackBuffer): Likewise.
! 	(flip): Likewise.
! 	(destroyBuffers): Likewise.
! 	* gnu/java/awt/peer/gtk/GtkVolatileImage.java: New file.
! 	* java/awt/Canvas.java (CanvasBltBufferStrategy): New class.
! 	(CanvasFlipBufferStrategy): Likewise.
! 	(createBufferStrategy(int)): New method.
! 	(createBufferStrategy(int,BufferCapabilities)): Likewise.
! 	* java/awt/Component.java (BltBufferStrategy): Implement and
! 	document class.
! 	(FlipBufferStrategy): Likewise.
! 	* java/awt/Window.java (WindowBltBufferStrategy): New class.
! 	(WindowFlipBufferStrategy): Likewise.
! 	(createBufferStrategy(int)): New method.
! 	(createBufferStrategy(int,BufferCapabilities)): Likewise.
! 	(getBufferStrategy): Likewise.
! 	* java/awt/BufferCapabilities.java (BufferCapabilities): Rename
! 	front to frontCaps and back to backCaps.
! 
! 2005-05-06  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/awt/BufferCapabilities.java
! 	(BufferCapabilities): Merged javadoc.
! 
! 2005-05-06  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/util/Locale.java
! 	(defaultLocale): Use gnu.classpath.SystemProperties to get properties.
! 	(getLocale): New methods. Use it everywhere where instances of Locales
! 	are needed.
! 	(getDisplayLanguage): Merged javadoc.
! 	(getDisplayCountry): Likewise.
! 	(getDisplayVariant): Likewise.
! 
! 2005-05-06  Archie Cobbs  <archie@dellroad.org>
! 
! 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c:
! 	use DeleteLocalRef() to avoid exhausting local native references.
! 
! 2005-05-06  Mark Wielaard  <mark@klomp.org>
! 
! 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
! 	(window_delete_cb): Don't use C++ style comments.
! 
! 2005-05-06  Robert Schuster  <thebohemian@gmx.net>
! 
! 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Fixed
! 	copyright header.
! 
! 2005-05-06  Robert Schuster  <thebohemian@gmx.net>
! 
! 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
! 	(window_delete_cb): Made the function return TRUE.
! 
! 2005-05-06  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/PlainView.java
! 	(drawUnselectedText): Call Utilities.drawTabbedText() with correct
! 	offset parameter.
! 	* javax/swing/text/Utilities.java
! 	(drawTabbedText): Initilialize local variable pos correctly.
! 
! 2005-05-06  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/AbstractDocument.java
! 	(LeafElement): Made start and end package private fields for
! 	effective reindexing.
! 	* javax/swing/text/PlainDocument.java
! 	(constructor): The field rootElement is always BranchElement,
! 	so we handle it as such.
! 	(removeUpdate): Rewritten reindexing for removeUpdate so that
! 	the actual removal is taken into account.
! 
! 2005-05-06  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/GapContent.java:
! 	Removed debugging output stuff, which I accidentally left in.
! 
! 2005-05-06  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/GapContent.java:
! 	Implemented a real GapContent. Only the public methods have
! 	been implemented so far and still no UndoableEdit support.
! 
! 2005-05-04  H.J. Lu  <hongjiu.lu@intel.com>
! 
! 	* java/awt/BufferCapabilities.java (BufferCapabilities): Fix
! 	the typo.
! 
! 2005-05-04  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* java/awt/image/BufferStrategy.java: Document.
! 
! 	* java/awt/BufferCapabilities.java: Document.
  
  2005-05-04  Tom Tromey  <tromey@redhat.com>
  
***************
*** 326,331 ****
--- 2000,2021 ----
  	* java/nio/channels/FileLock.java (toString): Re-implement using
  	StringBuffer.
  
+ 2005-05-04  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/ImageCapabilities.java: Document.
+ 
+ 	* java/awt/image/VolatileImage.java: Unindent copyright header.
+ 
+ 2005-05-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/image/VolatileImage.java: Document.
+ 
+ 2005-05-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(init_glib_threads): Check if threading system is already
+ 	initialized.
+ 
  2005-05-03  Andrew Overholt  <overholt@redhat.com>
  
  	PR libgcj/21372:
***************
*** 334,345 ****
  	* java/nio/channels/FileLock.java (toString): Re-implement to be
  	in line with other implementations.
  
! 2005-04-26  Luca Barbieri  <luca.barbieri@gmail.com>
  
! 	PR libgcj/21136:
! 	* gnu/java/nio/channels/FileChannelImpl.java (tryLock): Pass
! 	'false' to native lock().
! 	(lock): Pass 'true' to native lock().
  
  2005-04-27  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
--- 2024,2165 ----
  	* java/nio/channels/FileLock.java (toString): Re-implement to be
  	in line with other implementations.
  
! 2005-05-03  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/VMSecurityManager.java (currentClassLoader): Use
! 	'systemClasssLoader' directly.
! 
! 2005-05-03  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/VMSecurityManager.java (currentClassLoader): Don't
! 	call VMClassLoader.getSystemClassLoader.
! 
! 2005-04-29  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/net/NetworkInterface.java
! 	(static): Removed.
! 	(NetworkInterface(String,InetAddress)): Made package-private.
! 	(NetworkInterface(String,InetAddress[])): New constructor.
! 	(getRealNetworkInterfaces): Removed.
! 	(getByName): Use VMNetworkInterface.getInterfaces().
! 	(getByInetAddress): Likewise.
! 	(getNetworkInterfaces): Likewise.
! 	* java/net/VMNetworkInterface.java,
! 	java/net/natVMNetworkInterfaceNoNet.cc,
! 	java/net/natVMNetworkInterfacePosix.c,c
! 	java/net/natVMNetworkInterfaceWin32.cc: New files.
! 	* java/net/natNetworkInterfaceNoNet.cc,
! 	java/net/natNetworkInterfacePosix.cc,
! 	 java/net/natNetworkInterfaceWin32.cc: Removed.
! 	* configure.ac
! 	* Makefile.am
! 	* configure, Makefile.in: Regenerated.
! 
! 2005-04-29  Andrew Haley  <aph@redhat.com>
! 
! 	* java/lang/Class.h (_Jv_ResolvePoolEntry): Declare as friend.
! 
! 2005-04-29  Dalibor Topic  <robilad@kaffe.org>
! 
! 	* java/nio/channels/FileChannelImpl.java
! 	(FileChannelImpl(String, int)): Removed.
! 	(FileChannelImpl(File, int)): Added. Check if opened file is a
! 	directory.
! 	* java/io/FileInputStream.java(FileInputStream): Fixed javadocs.
! 	Call FileChannelImpl(File, int).
! 	* java/io/FileOutputStream.java (FileInputStream): Call
! 	FileChannelImpl(File, int).
! 	* java/io/RandomAccessFile.java (RandomAccessFile):
! 	Call FileChannelImpl(File, int). Switched constructors around.
! 
! 2005-04-27  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/19285
! 	* prims.cc (_Jv_ResolvePoolEntry): New function.
! 	* include/jvm.h (_Jv_Linker::find_field): New arg: found_class.
! 	* link.cc (_Jv_Linker::find_field): New arg: found_class.
! 	(resolve_pool_entry): Initialize the class in which a field is
! 	found.
! 	(link_symbol_table): Pass new arg to found_class.
! 
! 2005-04-29  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/nio/charset/Charset.java
! 	(provider): Reformatted.
! 
! 2005-04-29  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/net/protocol/http/HTTPConnection.java:
! 	(userAgent): Initialize from system properties.
! 	(initUserAgent): Removed.
! 
! 2005-04-29  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/util/ResourceBundle.java (getObject): Clarify
! 	MissingResourceException detailed message.
! 	(tryBundle(String,ClassLoader)): Likewise.
! 
! 2005-04-29  Robert Schuster  <thebohemian@gmx.net>
! 
! 	* java/beans/FeatureDescriptor.java:
! 	(getShortDescription): Implemented fallback mechanism and fixed
! 	documentation (fixes bug #12637).
! 	(getDisplayName): Dito.
! 
! 2005-04-29  Robert Schuster  <thebohemian@gmx.net>
! 
! 	* java/beans/Introspector.java: Fixed bug #12624, BeanDescriptors
! 	will now be set correctly.
! 	(flushCaches): Now flushes all cached intermediate data.
! 
! 2005-04-28  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/net/InetAddress.java
! 	(aton): Fixed javadoc.
! 	(lookup): Likewise.
! 
! 2005-04-28  Tom Tromey  <tromey@redhat.com>
! 
! 	* javax/swing/Timer.java
! 	(drainEvents, queueEvent): Now package-private.
! 
! 2005-04-28  Audrius Meskauskas  <audriusa@bluewin.ch>
! 
! 	* javax/swing/Timer.java
! 	(constructor): Assigning initialDelay.
! 
! 2005-04-28  Audrius Meskauskas  <audriusa@bluewin.ch>
! 
! 	* javax/swing/Timer.java
! 	(Waker.run): firing the first action event.
! 
! 2005-04-28  Michael Koch  <konqueror@gmx.de>
! 
! 	* javax/swing/Timer.java: Reordered all fields and methods,
! 	Added more javadocs.
! 
! 2005-04-28  Michael Koch  <konqueror@gmx.de>
! 
! 	* javax/swing/Timer.java: Javadocs merged
! 	from GNU classpath.
! 
! 2005-04-28  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* gnu/java/net/protocol/file/Connection.java
! 	(StaticData): New inner class to contain statics.
! 	(connect, getHeaderField): Modified to use StaticData.
! 
! 2005-04-28  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/net/protocol/file/Connection.java
! 	(lineSeparator): Initialize with SystemProperties.getProperty().
! 
! 2005-04-27  Chris Burdess  <dog@gnu.org>
! 
! 	* gnu/java/net/protocol/file/Connection.java: Return correct content
! 	length for directory listing.
! 	* java/net/URLClassLoader.java: Correction for URLClassLoader, bug
! 	#11285: return valid URLs for directories.i
  
  2005-04-27  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
***************
*** 353,381 ****
  
  	* gnu/java/net/protocol/https/Handler.java: New file.
  
! 2005-04-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	PR libgcj/21233:
! 	* gij.cc (version): Properly quote java version.
! 	(main): Fix typo in comment.
  
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2005-04-17  Mark Wielaard  <mark@klomp.org>
  
  	* java/lang/natRuntime.cc (insertSystemProperties): Set
  	java.class.path to CLASSPATH only when not empty. Fall back to
  	default path "." when java.class.path is empty.
  
! 2005-04-16  Anthony Green  <green@redhat.com>
  
! 	* Makefile.am (gnu-xml.lo, javax-imageio.lo, javax-xml.lo,
! 	gnu-java-beans.lo, gtk-awt-peer.lo) : Sort the output of all
! 	"find" output in order to work around the libtool bug described in
! 	PR libgcj/20693.
! 	* Makefile.in: Rebuilt.
  
  2005-04-16  Tom Tromey  <tromey@redhat.com>
  
--- 2173,3725 ----
  
  	* gnu/java/net/protocol/https/Handler.java: New file.
  
! 2005-04-27  Jeroen Frijters  <jeroen@frijters.net>
  
! 	* javax/imageio/spi/IIORegistry.java (IIORegistry):
! 	Don't assume that awt Toolkit is always ClasspathToolkit.
  
! 2005-04-27  Chris Burdess  <dog@gnu.org>
  
! 	* java/net/protocol/http/HTTPURLConnection.java (connect): Accept
! 	absolute and relative paths in Location header.
  
! 2005-04-27  Chris Burdess  <dog@gnu.org>
! 
! 	* gnu/java/net/protocol/http/HTTPURLConnection.java: Throw
! 	FileNotFoundException and implement getErrorStream on 404.
! 
! 2005-04-27  Sven de Marothy <sven@physto.se>
! 
! 	* java/util/TimeZone.java,
! 	(getDefaultDisplayName): Fix previous fix.
! 
! 2005-04-27  Sven de Marothy <sven@physto.se>
! 
! 	* java/util/TimeZone.java,
! 	(getDefaultDisplayName): Don't print zero offsets.
! 
! 2005-04-27  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicScrollBarUI
! 	(getThumbBounds): Do not make thumb smaller than
! 	minimumThumbSize.
! 	* javax/swing/plaf/metal/MetalLookAndFeel
! 	(initComponentDefaults): Added color defaults for ScrollBar.
! 	* javax/swing/plaf/metal/MetalScrollBarUI
! 	(paintThumb): Added.
! 	(getMinimumThumbSize): Added.
! 
! 2005-04-27  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalLookAndFeel
! 	(initComponentDefaults): Added some default colors.
! 
! 2005-04-27  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicScrollBarUI.java
! 	(configureScrollBarColors: Changed key 'ScrollBar.thumbLightShadow'
! 	to 'ScrollBar.thumbShadow'. The formes does not exist.
! 	(paintThumb): Use BasicGraphicsUtils for painting the thumb.
! 
! 2005-04-27  Roman Kennke  <roman@kennke.org>
! 
! 	* java/awt/MediaTracker.java: Added 2005 to copyright statement.
! 	* javax/swing/BoxLayout.java: Likewise.
! 	* javax/swing/UIManager.java: Likewise.
! 	* javax/swing/plaf/basic/BasicButtonListener.java: Likewise.
! 	* javax/swing/plaf/basic/BasicGraphicsUtils.java: Likewise.
! 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Likewise.
! 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
! 	* javax/swing/plaf/basic/BasicScrollPaneUI.java: Likewise.
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java: Likewise.
! 	* javax/swing/text/Document.java: Likewise.
! 	* javax/swing/text/GapContent.java: Likewise.
! 	* javax/swing/text/SimpleAttributeSet.java: Likewise.
! 	* javax/swing/tree/DefaultTreeSelectionModel.java: Likewise.
! 
! 2005-04-27  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicToggleButtonUI.java:
! 	(getPropertyPrefix): Added.
! 
! 2005-04-27  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicButtonUI.java
! 	(getPropertyPrefix): Added.
! 	(installDefaults): Use getPropertyPrefix instead of hard-coded
! 	prefix.
! 
! 2005-04-27  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/JToggleButton.java
! 	(JToggleButton): Removed horizontalAlignment setting, this
! 	was wrong. Added setting of an actionCommand, ToggleButtons
! 	have "" as default actionCommand.
! 
! 2005-04-27  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/nio/charset/Charset.java (providers2): Renamed from 'providers'
! 	to work around CNI limitation.
! 
! 2005-04-27  Sven de Marothy  <sven@physto.se>
! 
! 	* java/nio/charset/Charset.java:
! 	(defaultCharset()): New method.
! 	Status updated to 1.5
! 
! 2005-04-27  Sven de Marothy  <sven@physto.se>
! 
! 	* java/nio/charset/Charset.java: Cached encoders shouldn't be static.
! 
! 2005-04-27  Sven de Marothy  <sven@physto.se>
! 
! 	* java/nio/charset/Charset.java: Reset cached de/encoders.
! 
! 2005-04-27  Robert Schuster <thebohemian@gmx.net>
! 
! 	* java/nio/charset/Charset.java (forName): Throws
! 	IllegalArgumentException when argument is null
! 	and added documentation.
! 
! 2005-04-27  Ito Kazumitsu  <kaz@maczuka.gcd.org>
! 
! 	* java/nio/charset/Charset.java (providers):
! 	New method to make an array of CharsetProviders defined in
! 	META-INF/services/java.nio.charset.spi.CharsetProvider.
! 	(charsetForName, availableCharsets): Use the
! 	new method providers().
! 
! 2005-04-26  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/net/InetAddress.java: Made all hexadecimal numbers lowercase.
! 	Fixed typos in javadocs.
! 	(isSiteLocalAddress): Fixed handling of byte values.
! 	(isMCLinkLocal): Likewise.
! 	* java/net/Inet4Address.java
! 	(isMulticastAddress): Call super method.
! 	(isLoopbackAddress): Likewise.
! 	(isAnyLocalAddress): Likewise.
! 	(isLinkLocalAddress): Likewise.
! 	(isSiteLocalAddress): Likewise.
! 	(isMCGlobal): Likewise.
! 	(isMCNodeLocal): Likewise.
! 	(isMCLinkLocal): Likewise.
! 	(isMCSiteLocal): Likewise.
! 	(isMCOrgLocal): Likewise.
! 	(getHostAddress): Likewise.
! 
! 2005-04-26  Sven de Marothy  <sven@physto.se>
! 
! 	* java/net/InetAddress.java
! 	(toString): Don't print empty hostnames.
! 
! 2005-04-26  Luca Barbieri  <luca.barbieri@gmail.com>
! 
! 	PR libgcj/21136:
! 	* gnu/java/nio/channels/FileChannelImpl.java (tryLock): Pass
! 	'false' to native lock().
! 	(lock): Pass 'true' to native lock().
! 
! 2005-04-26  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/net/InetAddress.java:
! 	Fixed typos in javadocs.
! 
! 2005-04-26  Andrew Haley  <aph@redhat.com>
! 
! 	PR libgcj/21020:
! 	* jni.cc (_Jv_JNI_GetAnyFieldID): Use class' loader to find
! 	field's type.
! 
! 2005-04-26  Tom Tromey  <tromey@redhat.com>
! 
! 	* javax/swing/text/html/parser/ParserDelegator.java (callBack,
! 	gnu): Now package-private.
! 	* javax/swing/text/html/parser/DocumentParser.java (parser,
! 	callBack, gnu): Now package-private.
! 	* javax/swing/text/StringContent.java (content, setOffset,
! 	checkLocation): Now package-private.
! 	* javax/swing/text/JTextComponent.java (doc): Now
! 	package-private.
! 	* javax/swing/plaf/basic/BasicToolBarUI.java (owner,
! 	lastGoodOrientation, origParent, borders, cachedBounds,
! 	cachedOrientation, DragWindow): Now package-private.
! 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java (incrButton,
! 	decrButton, viewport, panel, currentScrollLocation, layoutManager,
! 	tabAreaRect, contentRect, createIncreaseButton,
! 	createDecreaseButton, findPointForIndex): Now package-private.
! 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java
! 	(currentDividerLocation, moveDividerTo): Now package-private.
! 	* javax/swing/plaf/basic/BasicSliderUI.java (findClosestTick): Now
! 	package-private.
! 	* javax/swing/plaf/basic/BasicScrollBarUI.java
! 	(calculatePreferredSize, valueForYPosition, valueForXPosition):
! 	Now package-private.
! 	* javax/swing/plaf/basic/BasicPopupMenuUI.java
! 	(topWindowListener): Now package-private.
! 	* javax/swing/plaf/basic/BasicOptionPaneUI.java (iconSize,
! 	OK_STRING, YES_STRING, NO_STRING, CANCEL_STRING): Now constants.
! 	(messageAreaContainer, buttonContainer, resetSelectedValue): Now
! 	package-private.
! 	* javax/swing/plaf/basic/BasicListUI.java (damageLayout): Now
! 	package-private.
! 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java (title):
! 	Now package-private.
! 	* javax/swing/plaf/basic/BasicDesktopIconUI.java (button): Now
! 	package-private.
! 	* javax/swing/plaf/basic/BasicComboBoxUI.java (largestItemSize,
! 	borderInsets): Now package-private.
! 	(arrowButtonWidth): Likewise.  Now a constant.
! 	* javax/swing/plaf/basic/BasicColorChooserUI.java (chooser, pane,
! 	makeTabs, updatePreviewPanel): Now package-private.
! 	* javax/swing/plaf/basic/BasicArrowButton.java (shadow,
! 	darkShadow, highlight): Now package-private.
! 	* javax/swing/colorchooser/DefaultSwatchChooserPanel.java
! 	(addColorToQueue): Now package-private.
! 	* javax/swing/colorchooser/DefaultRGBChooserPanel.java
! 	(spinnerChange, sliderChange, updateChange, R, G, B, RSpinner,
! 	GSpinner, BSpinner): Now package-private.
! 	* javax/swing/colorchooser/DefaultHSBChooserPanel.java
! 	(gradientImage, trackImage, slider, hRadio, sRadio, bRadio,
! 	hSpinner, sSpinner, bSpinner, gradientPoint, internalChange,
! 	spinnerTrigger, locked, handlingMouse, updateImage, updateSlider,
! 	updateTrack): Now package-private.
! 	* javax/swing/TransferHandler.java (clipboard): Now
! 	package-private.
! 	* javax/swing/ToolTipManager.java (showTip, hideTip): Now
! 	package-private.
! 	* javax/swing/Timer.java (drainEvents, queueEvent): Now
! 	package-private.
! 	* javax/swing/RepaintManager.java (globalManager): Now
! 	package-private.
! 	* javax/swing/JFormattedTextField.java (editValid): Now
! 	package-private.
! 	* javax/swing/JColorChooser.java (makeModal): Now
! 	package-private.
! 	* java/awt/geom/GeneralPath.java (rule, types, xpoints, ypoints,
! 	index, path): Now package-private.
! 	* java/awt/geom/Area.java (solids, holes, cubicCubicIntersect,
! 	lineQuadIntersect, lineCubicIntersect, linesIntersect,
! 	pointEquals): Now package-private.
! 	* java/awt/geom/Arc2D.java (type): Now package-private.
! 	* java/awt/Window.java (windowFocusOwner): Now package-private.
! 	* java/awt/TextComponent.java (editable, selectionStart,
! 	selectionEnd, text, getIndexAtPoint, getCharacterBounds): Now
! 	package-private.
! 	* java/awt/MenuItem.java (actionCommand, enabled, label): Now
! 	package-private.
! 	* java/awt/MenuComponent.java (focusListener): Now
! 	package-private.
! 	* java/awt/Frame.java (state): Now package-private.
! 	* java/awt/Choice.java (pItems): Now package-private.
! 	* java/awt/Checkbox.java (state): Now package-private.
! 	* java/awt/Button.java (actionCommand, label): Now
! 	package-private.
! 	* gnu/javax/swing/text/html/parser/support/Parser.java
! 	(attributes, _handleEndTag_remaining, _handleStartTag): Now
! 	package-private.
! 	* gnu/java/beans/decoder/PersistenceParser.java (javaHandler): Now
! 	package-private.
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (paint, stroke, fg, bg,
! 	clip, transform, font, comp): Now package-private.
! 
! 2005-04-26  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/awt/Robot.java (waitForIdle): Call invokeAndWait in a
! 	static way.
! 
! 2005-04-26  Mark Wielaard  <mark@klomp.org>
! 
! 	* java/net/URL.java (URL(URL,String,URLStreamHandler)): Add spec
! 	to MalformedURLException.
! 
! 2005-04-26  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/security/AccessControlContext.java:
! 	Reformated.
! 	(protectedDomains): Renamed from 'protectionDomain'.
! 	* java/security/AccessController.java:
! 	Reformatted.
! 
! 2005-04-26  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* gnu/java/security/action/GetSecurityPropertyAction.java
! 	(GetSecurityPropertyAction): Implement PrivilegedAction instead
! 	of extending GetPropertyAction.
! 	(name): New field.
! 	(value): Likewise.
! 	(setParamters): New methods.
! 	(GetSecurityPropertyAction): Use new setParameters methods.
! 
! 2005-04-26  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/security/Security.java,
! 	java/security/cert/X509CRLSelector.java,
! 	java/security/cert/X509CertSelector.java:
! 	Modified to use SystemProperties.
! 
! 2005-04-26  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/lang/System.java
! 	(setSecurityManager): Fixed comment.
! 	(getSecurityManager): Removed obsolete comment.
! 
! 2005-04-25  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/awt/AWTKeyStroke.java (vktable): Now package-private.
! 
! 2005-04-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
! 	(connectSignals): Realize the window widget after connecting
! 	signals.
! 
! 2005-04-25  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/awt/GraphicsEnvironment.java
! 	(localGraphicsEnvironment): New field.
! 	(getLocalGraphicsEnvironment): Added support for java.awt.graphicsenv
! 	property.
! 	(isHeadless): Added support for java.awt.headless property.
! 	(isHeadlessInstance): Call headless().
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java
! 	(getDisplayMode): Added. Returns the current display mode.
! 	(isFullScreenSupported): Added.
! 	* java/awt/GraphicsDevice.java
! 	(setFullScreenWindow): Implemented a primitive fullscreen mode.
! 	This resizes and relocates the fullscreen window so that it uses
! 	the whole screen. This is not a fully accelerated fullscreen
! 	exclusive mode.
! 
! 2005-04-25  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/lang/Runtime.java,
! 	java/lang/SecurityManager.java,
! 	java/lang/System.java,
! 	java/lang/ThreadGroup.java:
! 	Replaced java.lang.Runtime.securityManager by
! 	java.lang.SecurityManager.current (as used in GNU classpath).
! 
! 2005-04-25  David Gilbert  <david.gilbert@object-refinery.com>
! 
! 	* java/awt/Transparency.java
! 	(getTransparency): fixed API docs.
! 
! 2005-04-25  Archie Cobbs  <archie@dellroad.org>
! 
! 	* java/lang/Throwable.java: simplify initializing cause in constructor
! 
! 2005-04-25  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/classpath/SystemProperties.java: New file.
! 	* gnu/classpath/natSystemProperties.cc: New file.
! 	* java/lang/Runtime.java
! 	(defaultProperties): Removed.
! 	(static): Likewise.
! 	(): Made thrown exceptions more verbose.
! 	(insertSystemProperties): Removed.
! 	* java/lang/System.java
! 	(static): Likewise.
! 	(properties): Likewise.
! 	(setSecurityManager): Reordered modifiers.
! 	(getenv): Improved javadoc.
! 	(): Likewise.
! 	(isWordsBigEndian): Removed.
! 	* java/lang/natRuntime.cc
! 	(_Jv_SetDLLSearchPath): Likewise.
! 	(file_encoding): Likewise.
! 	(default_file_encoding): Likewise.
! 	(getpwuid_adaptor): Likewise.
! 	(insertSystemProperties): Likewise.
! 	* java/lang/natSystem.cc
! 	(isWordsBigEndian): Likewise.
! 	* Makefile.am
! 	(ordinary_java_source_files):
! 	Added gnu/classpath/SystemProperties.java.
! 	(nat_source_files): Added gnu/classpath/natSystemProperties.cc.
! 	* Makefile.in: Regenerated.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicScrollBarUI.java
! 	(initDefaults): Initialize thumb*Color fields correctly.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/GapContent.java:
! 	Added API comments.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalBorders.java:
! 	Added inner class ScrollPaneBorder.
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java
! 	(initComponentDefaults): Added default for "ScrollPane.border"
! 	to use the new ScrollPaneBorder.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/AbstractDocument.java:
! 	Added FIXME comments. This class still has to be
! 	implemented thread-safe.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/tree/DefaultTreeSelectionModel.java
! 	(DefaultTreeSelectionModel): Initialize listenerList here.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalTextFieldUI.java
! 	(createUI): Return one instance per Component instead of a
! 	shared instance.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/Document.java:
! 	Added API documentation comments.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/AbstractDocument.java
! 	(getDocumentProperties): Implemented.
! 	(setDocumentProperties): Implemented.
! 	(getProperty): Implemented.
! 	(putProperty): Implemented.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/BoxLayout
! 	(preferredLayoutSize): Fixed computation so that it correctly
! 	adds the top and bottom insets of the container.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicMenuItemUI.java
! 	(paintText): Make use of the 'selectionForeground' UI default
! 	for text painting.
! 
! 2005-04-25  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicLookAndFeel.java
! 	(initSystemColorDefaults): Modified colors to match the
! 	BasicLookAndFeel in the reference implementation.
! 	(initComponentDefaults): Likewise.
! 
! 2005-04-25  Tom Tromey  <tromey@redhat.com>
! 
! 	* include/jni.h (_Jv_va_list): Removed.
! 	Moved configuration code...
! 	* include/jni_md.h: ... here.  New file.
! 	* include/Makefile.in: Rebuilt.
! 	* include/Makefile.am (tool_include__HEADERS): Added jni_md.h.
! 
! 2005-04-23  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/io/FileInputStream.java (FileInputStream(File)),
! 	java/io/FileOutputStream.java (FileOutputStream(File)):
! 	Removed unnecessary File.isDirectory() check.
! 
! 2005-04-22  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* testsuite/lib/libjava.exp (libjava_find_gij): Use $objdir/.. to find
! 	gij if get_multilibs fails.
! 
! 2005-04-22  Anthony Green  <green@redhat.com>
! 
! 	* jni.cc (natrehash): Don't bother clearing memory again.
! 	* interpret.cc (do_allocate_static_fields): Ditto.
! 	* java/lang/natString.cc (rehash): Ditto.
! 
! 2005-04-22  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicLookAndFeel.java
! 	(initComponentDefaults): Changed Button.border to be
! 	BasicBorders.getButtonBorder as it should be.
! 
! 2005-04-22  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
! 	(getMaximumSize): Return (Short.MAX_VALUE, Short.MAX_VALUE) as it
! 	should according to a mauve testcase, instead of the preferred
! 	size.
! 
! 2005-04-22  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/JMenu.java
! 	(add): add(Component) now calls PopupMenu.insert(..) instead of
! 	PopupMenu.add(..). add(..) is not implemented for Component,
! 	so JComponent.add(..) is called instead, adding the component
! 	in the wrong place.
! 
! 2005-04-22  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicButtonListener.java
! 	(mousePressed): replaced query to getModifiersEx with getModifiers.
! 	This method relied on faulty behaviour in getModifierEx.
! 	(mouseReleased): replaced query to getModifiersEx with getModifiers.
! 	This method relied on faulty behaviour in getModifierEx.
! 
! 2005-04-22  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java
! 	(getDefaults): Call addCustomEntriesToTable on the theme.
! 
! 2005-04-22  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/tree/DefaultTreeSelectionModel.java
! 	(constructor): Added implementation.
! 	(getRowMapper): Added implementation.
! 	(setSelectionMode): Added implementation.
! 	(getSelectionMode): Added implementation.
! 	(getSelectionPath): Added implementation.
! 	(getSelectionPaths): Added implementation.
! 	(getSelectionCount): Added implementation.
! 	(isSelectionEmpty): Added implementation.
! 	(getSelectionRows): Added implementation.
! 	(getMinSelectionRow): Added implementation.
! 	(getMaxSelectionRow): Added implementation.
! 	(getLeadSelectionRow): Added implementation.
! 	(getLeadSelectionPath): Added implementation.
! 
! 2005-04-22  Casey Marshall <csm@gnu.org>
! 
! 	* gnu/java/security/der/DERValue.java
! 	(getValueAs): new method.
! 	* gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java
! 	(<init>): read both dates with 'DERValue.getValueAs', with
! 	'GENERALIZED_TIME' as the argument.
! 
! 2005-04-22  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* gnu/gcj/runtime/NameFinder.java (close): IN, OUT, and PROC can all
! 	be null, check for that case and don't deference it.
! 
! 2005-04-22  Sven de Marothy  <sven@physto.se>
! 
! 	* java/util/logging/LogManager.java: Reformatted.
! 	(readConfiguration): If a logger for a key is not found, create one.
! 
! 2005-04-22  Andrew John Hughes  <gnu_andrew@member.fsf.org>
! 
! 	* java/rmi/Naming.java:
! 	Added class documentation.
! 	(lookup(String)): Call parseURL and getName.
! 	(bind(String,java.rmi.Remote)): Likewise.
! 	(unbind(String)): Likewise.
! 	(rebind(String, java.rmi.Remote)): Likewise.
! 	(list(String)): Call parseURL.
! 	(parseURL(String)): New method to handle parsing and defaults.
! 	(getName(java.net.URL)): New method to handle finding the service name.
! 
! 2005-04-21  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/natClass.cc (initializeClass): Link class.
! 
! 2005-04-21  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/AssertionError.java: Typo fix.
! 
! 2005-04-21  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/VMClassLoader.java (transformException): Removed.
! 	(resolveClass): No longer native.  Now does nothing.
! 	* java/lang/natVMClassLoader.cc (resolveClass): Removed.
! 
! 2005-04-21  Anthony Green  <green@redhat.com>
! 
! 	PR libgcj/21115
! 	* testsuite/libjava.special/special.exp,
! 	testsuite/libjava.special/pr21115I.java,
! 	testsuite/libjava.special/pr21115.java,
! 	testsuite/libjava.special/pr21115.out: New files.
! 
! 2005-04-21  Chris Burdess  <dog@gnu.org>
! 
! 	* gnu/java/net/CRLFInputStream.java: Rewrite to return
! 	CRLF-delimited chunks.
! 
! 2005-04-20  Andrew John Hughes  <gnu_andrew@member.fsf.org>
! 
! 	* java/net/URI.java:
! 	Added class documentation.
! 	(parseURI(String)): Only handle scheme-specific parts
! 	if URI is not opaque.  Allow for parts that can't be null.
! 	(toString()): Output the scheme-specific part whole, rather
! 	than as its possibly non-existent components.
! 
! 2005-04-20  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/net/URI.java (AUTHORITY_REGEXP): Corrected regexp.
! 	(AUTHORITY_USERINFO_GROUP,AUTHORITY_HOST_GROUP,AUTHORITY_PORT_GROUP):
! 	Adjusted to match new regexp.
! 
! 2005-04-20  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/net/protocol/file/Connection.java,
! 	gnu/java/net/protocol/jar/Connection.java:
! 	Reorganized import statements. Fixed @author tags.
! 
! 2005-04-20  Chris Burdess  <dog@gnu.org>
! 
! 	* java/io/DataOutputStream.java (writeUTF): Use block write for
! 	output.
! 
! 2005-04-20  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/io/DataInputStream.java (ignoreInitialNewline): Removed
! 	(readLine): Changed newline handling.
! 
! 2005-04-20  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/awt/image/PixelGrabber.java (setPixels(int,int,int,int,
! 	ColorModel,byte[],int,int): Fixed byte to int conversion.
! 
! 2005-04-20  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/io/FilePermission.java
! 	(serialVersionUID): Made private.
! 	(ALL_FILES): New constant.
! 	(implies): Handle '<<ALL FILES>>' case.
! 
! 2005-04-20  Sven de Marothy  <sven@physto.se>
! 
! 	* gnu/java/awt/peer/gtk/GdkGraphics.java:
! 	(drawImage): Don't notify the image observer for offscreen images.
! 	* gnu/java/awt/peer/gtk/GtkImagePainter.java:
! 	(setPixels): Don't notify the image observer.
! 
! 2005-04-20  Sven de Marothy  <sven@physto.se>
! 
! 	* java/nio/ByteBufferImpl.java:
! 	(putChar): Inlined for speed.
! 	(put, get): Bulk methods can use arraycopy.
! 	* java/nio/CharBufferImpl.java:
! 	(put, get): Bulk methods can use arraycopy.
! 
! 2005-04-20  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/nio/ByteBufferImpl.java (get(), put(byte)): Inlined checks
! 	and field updates.
! 	* java/nio/CharBufferImpl.java
! 	(CharBufferImpl(CharBufferImpl)): Copy array_offset field.
! 	(get(), put(char)): Inlined checks and field updates. Fixed to
! 	take array_offset into account.
! 	(get(int), put(int, char)): Fixed to take array_offset into account.
! 
! 2005-04-20  Sven de Marothy  <sven@physto.se>
! 
! 	* java/text/SimpleDateFormat.java:
! 	(formatWithAttribute): Pad year before truncating digits.
! 
! 2005-04-20  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/net/PlainDatagramSocketImpl.java:
! 	Merged copyright header.
! 	* gnu/java/net/PlainSocketImpl.java:
! 	Reorganized import statements. Fixed @author tags.
! 
! 2005-04-20  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/lang/ClassHelper.java,
! 	gnu/java/lang/reflect/TypeSignature.java:
! 	Fixed @author tag.
! 
! 2005-04-20  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/beans/IntrospectionIncubator.java:
! 	Fixed HTML tags in javadocs.
! 
! 2005-04-20  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* gnu/java/beans/IntrospectionIncubator.java
! 	(addToPropertyHash, addToListenerHash): Don't confuse get(),
! 	set(), is(), add() and remove() with properties or events.
! 
! 2005-04-20  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/awt/image/XBMDecoder.java:
! 	Fixed modifier order.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicButtonUI.java
! 	(paint): This should not care about margin and insets
! 	at the same time, as insets already include the margin
! 	through the border.
! 	* javax/swing/plaf/basic/BasicGraphicsUtils.java
! 	(getPreferredButtonSize): Likewise.
! 	* javax/swing/plaf/metal/MetalBorders.java
! 	(getBorderInsets): Likewise.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
! 	(createMessageArea): The JPanel that holds the message area
! 	doesn't need to override getPreferredSize. This prevents some
! 	message components from rendering nicely.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalInternalFrameUI.java
! 	(createUI): Do not share instances between components.
! 	* javax/swing/plaf/metal/MetalSliderUI.java
! 	(createUI): Do not share instances between components.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalBorders:
! 	(PopupMenuBorder): Added.
! 	* javax/swing/plaf/metal/MetalLookAndFeel
! 	(initComponentDefaults): Added PopupMenuBorder.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/tree/DefaultTreeSelectionModel.java:
! 	Added API documentation all over the class.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
! 	(installDefaults): Link managed JScrollPane in instance field.
! 	(uninstallDefaults): Unlink managed JScrollPane in instance field.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicScrollBarUI.java
! 	(PropertyChangeHandler.propertyChange): Add default
! 	to switch statement to avoid errors with unusual values
! 	for orientation.
! 	(installComponents): Likewise.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalScrollBarUI.java:
! 	(createUI): Instances cannot be shared among JScrollPanes.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java
! 	(initComponentDefaults): Added defaults for Menu, MenuBar
! 	MenuEntry fonts.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicScrollBarUI.java
! 	(installUI): Install listeners after everything all, otherwise
! 	we get strange NPEs in some situations, especially with
! 	custom L&Fs.
! 	(createIncreaseButton): Orientation is expected to be
! 	SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
! 	HORIZONTAL or VERTICAL.
! 	(createDecreaseButton): Orientation is expected to be
! 	SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
! 	HORIZONTAL or VERTICAL.
! 	(installComponents): Orientation for buttons is expected to be
! 	SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
! 	HORIZONTAL or VERTICAL.
! 
! 2005-04-20  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/JToolBar.java
! 	(addImpl): Adjust added AbstractButtons to look and feel like
! 	toolbar buttons.
! 	* javax/swing/plaf/metal/MetalBorders.java:
! 	Adjusted insets of ButtonBorder.
! 	(RolloverMarginBorder): Added class for toolbar buttons.
! 	(getButtonBorder): Adjusted factory method to return a shared
! 	instance of button border.
! 	(getToolbarButtonBorder): Added factory method to return a shared
! 	instance of toolbar button border.
! 	(getMarginBorder): Added factory method to return a shared
! 	instance of margin border.
! 	* javax/swing/plaf/metal/MetalButtonUI.java
! 	(installDefauls): If button is child of a JToolBar then set
! 	special border on this button.
! 
! 2005-04-20  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/net/URLConnection.java
! 	(getContent): Fixed javadoc comment.
! 
! 2005-04-20  Andrew John Hughes  <gnu_andrew@member.fsf.org>
! 
! 	* java/net/URL.java:
! 	(toURI()): Implemented.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/net/InetAddress.java
! 	(InetAddress): Fixed javadoc comment.
! 	(aton): Likewise.
! 	(lookup): Added javadoc.
! 	(getFamily): Likewise.
! 	* java/net/ServerSocket.java
! 	(getChannel): Improved javadoc comment.
! 
! 2005-04-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
! 
! 	* gnu/xml/dom/html2/DomHTMLParser.java:
! 	Changed 'enum' references to become 'enumeration'.
! 
! 2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
! 
! 	* gnu/xml/dom/html2/DomHTMLParser.java: New file.
! 
! 2005-04-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
! 
! 	* gnu/javax/swing/text/html/parser/htmlAttributeSet.java:
! 	(getAttributeNames()): Replaced 'enum' with 'enumeration'.
! 	* gnu/javax/swing/text/html/parser/htmlValidator.java:
! 	(validateParameters(TagElement,htmlAttributeSet)):
! 	Replaced 'enum' with 'enumeration'.
! 	(validateAttribute(TagElement,htmlAttributeSet,Enumeration,Enumeration)):
! 	Likewise.
! 
! 2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
! 
! 	* javax/swing/text/html/parser/Entity.java (getType): New method.
! 	* javax/swing/text/html/parser/DocumentParser.java:
! 	Inherit from javax.swing.text.html.parser.Parser.
! 
! 2005-04-19  Chris Burdess  <dog@gnu.org>
! 
! 	* gnu/xml/dom/html2/DomHTMLDocument.java: Fixed element creation and
! 	check for HTML/XHTML namespace.
! 
! 2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
! 
! 	* javax/swing/text/html/parser/Parser.java,
! 	javax/swing/text/html/parser/Entity.java:
! 	Inheriting from DTDConstants.
! 	* javax/swing/text/html/parser/AttributeList.java
! 	(getValues): Changed return type.
! 	* javax/swing/text/html/parser/DocumentParser
! 	(parse): Adding the callback parameter that receives
! 	the parsing events.
! 
! 2005-04-19  Chris Burdess  <dog@gnu.org>
! 
! 	* gnu/xml/dom/DomImpl.java,
! 	gnu/xml/dom/html2/DomHTMLAnchorElement.java,
! 	gnu/xml/dom/html2/DomHTMLDocument.java,
! 	gnu/xml/dom/html2/DomHTMLElement.java,
! 	gnu/xml/dom/html2/DomHTMLFormElement.java,
! 	gnu/xml/dom/html2/DomHTMLFrameElement.java,
! 	gnu/xml/dom/html2/DomHTMLIFrameElement.java,
! 	gnu/xml/dom/html2/DomHTMLImpl.java,
! 	gnu/xml/dom/html2/DomHTMLInputElement.java,
! 	gnu/xml/dom/html2/DomHTMLObjectElement.java,
! 	gnu/xml/dom/html2/DomHTMLOptionElement.java,
! 	gnu/xml/dom/html2/DomHTMLSelectElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableCellElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableRowElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableSectionElement.java,
! 	gnu/xml/dom/html2/DomHTMLTextAreaElement.java: JAXP integration,
! 	UI events, and tree utility functions.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/javax/swing/text/html/parser/HTML_401F.java,
! 	gnu/javax/swing/text/html/parser/gnuDTD.java,
! 	gnu/javax/swing/text/html/parser/models/node.java:
! 	Reworked import statements.
! 
! 2005-04-19  Audrius Meskauskas, Lithuania  <AudriusA@Bioinformatics.org>
! 
! 	* javax/swing/text/html/HTMLDocument.java: New file.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* javax/swing/text/html/HTMLFrameHyperlinkEvent.java:
! 	Reformatted.
! 	* javax/swing/text/html/parser/AttributeList.java:
! 	Fixed order of modifiers.
! 	(AttributeList): Made final.
! 	* javax/swing/text/html/parser/ContentModel.java:
! 	Fixed html characters in javadocs.
! 	* javax/swing/text/html/parser/DTD.java
! 	(DTD): Don't implement java.io.Serializable directly.
! 	(getElement): Simplified.
! 	* javax/swing/text/html/parser/DTDConstants.java:
! 	Reformatted file.
! 	* javax/swing/text/html/parser/Element.java:
! 	Fixed order of modifiers.
! 	* javax/swing/text/html/parser/Parser.java:
! 	Reformatted. Don't use fully-qualified class names.
! 	* javax/swing/text/html/parser/ParserDelegator.java:
! 	Fixed order of modifiers.
! 	* javax/swing/text/rtf/RTFParser.java:
! 	Re-ordered import statements.
! 	* javax/swing/text/rtf/RTFScanner.java:
! 	Removed unused import statement.
! 
! 2005-04-19  Chris Burdess  <dog@gnu.org>
! 
! 	* gnu/xml/dom/html2/DomHTMLButtonElement.java,
! 	gnu/xml/dom/html2/DomHTMLCollection.java,
! 	gnu/xml/dom/html2/DomHTMLDocument.java,
! 	gnu/xml/dom/html2/DomHTMLElement.java: Extensions for new element
! 	types.
! 	* gnu/xml/dom/html2/DomHTMLDListElement.java,
! 	gnu/xml/dom/html2/DomHTMLDirectoryElement.java,
! 	gnu/xml/dom/html2/DomHTMLDivElement.java,
! 	gnu/xml/dom/html2/DomHTMLFieldSetElement.java,
! 	gnu/xml/dom/html2/DomHTMLFontElement.java,
! 	gnu/xml/dom/html2/DomHTMLFormElement.java,
! 	gnu/xml/dom/html2/DomHTMLFrameElement.java,
! 	gnu/xml/dom/html2/DomHTMLFrameSetElement.java,
! 	gnu/xml/dom/html2/DomHTMLHRElement.java,
! 	gnu/xml/dom/html2/DomHTMLHeadElement.java,
! 	gnu/xml/dom/html2/DomHTMLHeadingElement.java,
! 	gnu/xml/dom/html2/DomHTMLHtmlElement.java,
! 	gnu/xml/dom/html2/DomHTMLIFrameElement.java,
! 	gnu/xml/dom/html2/DomHTMLImageElement.java,
! 	gnu/xml/dom/html2/DomHTMLInputElement.java,
! 	gnu/xml/dom/html2/DomHTMLIsIndexElement.java,
! 	gnu/xml/dom/html2/DomHTMLLIElement.java,
! 	gnu/xml/dom/html2/DomHTMLLabelElement.java,
! 	gnu/xml/dom/html2/DomHTMLLegendElement.java,
! 	gnu/xml/dom/html2/DomHTMLLinkElement.java,
! 	gnu/xml/dom/html2/DomHTMLMapElement.java,
! 	gnu/xml/dom/html2/DomHTMLMenuElement.java,
! 	gnu/xml/dom/html2/DomHTMLMetaElement.java,
! 	gnu/xml/dom/html2/DomHTMLModElement.java,
! 	gnu/xml/dom/html2/DomHTMLOListElement.java,
! 	gnu/xml/dom/html2/DomHTMLObjectElement.java,
! 	gnu/xml/dom/html2/DomHTMLOptGroupElement.java,
! 	gnu/xml/dom/html2/DomHTMLOptionElement.java,
! 	gnu/xml/dom/html2/DomHTMLParagraphElement.java,
! 	gnu/xml/dom/html2/DomHTMLParamElement.java,
! 	gnu/xml/dom/html2/DomHTMLPreElement.java,
! 	gnu/xml/dom/html2/DomHTMLQuoteElement.java,
! 	gnu/xml/dom/html2/DomHTMLScriptElement.java,
! 	gnu/xml/dom/html2/DomHTMLSelectElement.java,
! 	gnu/xml/dom/html2/DomHTMLStyleElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableCaptionElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableCellElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableColElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableRowElement.java,
! 	gnu/xml/dom/html2/DomHTMLTableSectionElement.java,
! 	gnu/xml/dom/html2/DomHTMLTextAreaElement.java,
! 	gnu/xml/dom/html2/DomHTMLTitleElement.java,
! 	gnu/xml/dom/html2/DomHTMLUListElement.java: New files.
! 
! 2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
! 
! 	* javax/swing/text/ChangedCharSetException.java,
! 	javax/swing/text/html/HTMLEditorKit.java,
! 	javax/swing/text/html/HTMLFrameHyperlinkEvent.java,
! 	javax/swing/text/html/parser/AttributeList.java,
! 	javax/swing/text/html/parser/ContentModel.java,
! 	javax/swing/text/html/parser/DocumentParser.java,
! 	javax/swing/text/html/parser/DTD.java,
! 	javax/swing/text/html/parser/DTDConstants.java,
! 	javax/swing/text/html/parser/Element.java,
! 	javax/swing/text/html/parser/Entity.java,
! 	javax/swing/text/html/parser/Parser.java,
! 	javax/swing/text/html/parser/TagElement.java,
! 	gnu/javax/swing/text/html/package.html,
! 	gnu/javax/swing/text/html/parser/gnuDTD.java,
! 	gnu/javax/swing/text/html/parser/HTML_401F.java,
! 	gnu/javax/swing/text/html/parser/htmlAttributeSet.java,
! 	gnu/javax/swing/text/html/parser/htmlValidator.java,
! 	gnu/javax/swing/text/html/parser/package.html,
! 	gnu/javax/swing/text/html/parser/models/list.java,
! 	gnu/javax/swing/text/html/parser/models/node.java,
! 	gnu/javax/swing/text/html/parser/models/noTagModel.java,
! 	gnu/javax/swing/text/html/parser/models/package.html,
! 	gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java,
! 	gnu/javax/swing/text/html/parser/models/TableRowContentModel.java,
! 	gnu/javax/swing/text/html/parser/models/transformer.java,
! 	gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java,
! 	gnu/javax/swing/text/html/parser/support/package.html,
! 	gnu/javax/swing/text/html/parser/support/parameterDefaulter.java,
! 	gnu/javax/swing/text/html/parser/support/Parser.java,
! 	gnu/javax/swing/text/html/parser/support/textPreProcessor.java,
! 	gnu/javax/swing/text/html/parser/support/low/Buffer.java,
! 	gnu/javax/swing/text/html/parser/support/low/Constants.java,
! 	gnu/javax/swing/text/html/parser/support/low/Location.java,
! 	gnu/javax/swing/text/html/parser/support/low/node.java,
! 	gnu/javax/swing/text/html/parser/support/low/package.html,
! 	gnu/javax/swing/text/html/parser/support/low/ParseException.java,
! 	gnu/javax/swing/text/html/parser/support/low/pattern.java,
! 	gnu/javax/swing/text/html/parser/support/low/Queue.java,
! 	gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java:
! 	New files.
! 	* javax/swing/text/html/HTML.java,
! 	javax/swing/text/html/parser/ParserDelegator.java:
! 	New files (replacing).
! 	* javax/swing/text/html/package.html,
! 	javax/swing/text/html/parser/package.html: Documenting the
! 	packages.
! 
! 2005-04-19  Chris Burdess  <dog@gnu.org>
! 
! 	* gnu/xml/dom/html2/DomHTMLAnchorElement.java,
! 	gnu/xml/dom/html2/DomHTMLAppletElement.java,
! 	gnu/xml/dom/html2/DomHTMLAreaElement.java,
! 	gnu/xml/dom/html2/DomHTMLBaseElement.java,
! 	gnu/xml/dom/html2/DomHTMLBaseFontElement.java,
! 	gnu/xml/dom/html2/DomHTMLBodyElement.java,
! 	gnu/xml/dom/html2/DomHTMLBRElement.java,
! 	gnu/xml/dom/html2/DomHTMLButtonElement.java,
! 	gnu/xml/dom/html2/DomHTMLCollection.java,
! 	gnu/xml/dom/html2/DomHTMLDocument.java,
! 	gnu/xml/dom/html2/DomHTMLElement.java: New files.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* Makefile.am: Added new files.
! 	* Makefile.in: Regenerated.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/JTextComponent.java
! 	(JTextComponent): Added repaintListener which issues repaint
! 	requests when the underlying document changes.
! 	(setDocument): Adds repaintListener to document when the
! 	document is changed.
! 	* javax/swing/text/DefaultEditorKit.java:
! 	Removed repaint calls on JTextComponent. This is now handled
! 	through a DocumentListener in JTextComponent that repaints
! 	the component when needed.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	PR libgcj/21064
! 	* javax/swing/text/StyleContext.java
! 	(NamedStyle.setResolveParent): Added null
! 	pointer check.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/rmi/server/RemoteObject.java:
! 	Removed unused import statement.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/net/URL.java: Formatting cleanups.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/awt/FontMetrics.java: Reformatted.
! 	(getFontRenderContext): Handle case when java.awt.Graphics context is
! 	given.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/awt/FontMetrics.java
! 	(getStringBounds): New methods.
! 
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/security/x509/X509Certificate.java
! 	(parse): Handle val == null case.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java
! 	(initComponentDefaults): Added defaults for Menu, MenuBar
! 	MenuEntry fonts.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java
! 	(initComponentDefaults): Added Label.font.
! 	(initSystemColorDefaults): Added this method and adjusted the
! 	general control color.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalBorders.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalButtonUI.java:
! 	(installDefaults): Install button font.
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java:
! 	(initComponentDefaults): Added button border, font and margin.
! 	Changed components background color to the Metal current themes
! 	standard color.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java
! 	(initComponentDefaults): Added to set Metal specific component
! 	defaults.
! 
! 2005-04-19  Mark Wielaard  <mark@klomp.org>
! 
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java
! 	(initClassDefaults): Call super.initClassDefaults().
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java
! 	(initClassDefaults): Added to include the *UI classes.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalComboBoxUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalDesktopIconUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalInternalFrameUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalProgressBarUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalRootPaneUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalScrollBarUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalSeparatorUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalSliderUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalSplitPaneUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalTextFieldUI.java:
! 	Added.
! 	* javax/swing/plaf/metal/MetalToggleButtonUI.java:
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/metal/MetalButtonUI.java:
! 	Added skeleton class.
! 	* javax/swing/plaf/metal/MetalCheckBoxUI.java:
! 	Added skeleton class.
! 	* javax/swing/plaf/metal/MetalLabelUI.java:
! 	Added skeleton class.
! 	* javax/swing/plaf/metal/MetalRadioButtonUI.java:
! 	Added skeleton class.
! 	* javax/swing/plaf/metal/MetalScrollPaneUI.java:
! 	Added skeleton class.
! 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java:
! 	Added skeleton class.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/UIDefaults.java:
! 	Added API documentation for all methods.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/UIDefaults.java
! 	(put): Now uses new checkAndPut method instead of checking
! 	directly.
! 	(putDefaults): Fixed so that it accepts null-values and
! 	treats them like remove(key).
! 	(checkAndPut): Added. This checks for null-values and calls
! 	put or remove.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* Makefile.am: Added new files.
! 	* Makefile.in: Regenerated.
! 
! 2005-04-19  Mark Wielaard  <mark@klomp.org>
  
  	* java/lang/natRuntime.cc (insertSystemProperties): Set
  	java.class.path to CLASSPATH only when not empty. Fall back to
  	default path "." when java.class.path is empty.
  
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/text/rtf/ControlWordToken.java,
! 	javax/swing/text/rtf/RTFEditorKit.java,
! 	javax/swing/text/rtf/RTFParseException.java,
! 	javax/swing/text/rtf/RTFParser.java,
! 	javax/swing/text/rtf/RTFScanner.java,
! 	javax/swing/text/rtf/TextToken.java,
! 	javax/swing/text/rtf/Token.java: New files.
! 	* Makefile.am: Added new files.
! 	* Makefile.in: Regenerated.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/awt/geom/QuadCurve2D.java:
! 	Fixed Brian Gough's name for real.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/UIManager.java:
! 	Make the UIManager respect the swing.defaultlaf system
! 	property.
! 
! 2005-04-19  Tom Tromey  <tromey@redhat.com>
! 
! 	* java/lang/natVMClassLoader.cc (loadClass): Call resolveClass,
! 	not _Jv_InitClass.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
! 	Fixed tabs to spaces.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/plaf/basic/BasicMenuUI.java
! 	(getMaximumSize): Now returns preferredSize because JMenu should
! 	never be bigger than that.
! 	* javax/swing/JRootPane
! 	(RootLayout.layoutContainer): Make JMenuBars take the whole width.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/JRootPane.java:
! 	Fixed various tabs to be spaces.
! 	(RootLayout.layoutContainer): Made menubar left aligned.
! 
! 2005-04-19  Roman Kennke  <roman@ontographics.com>
! 
! 	* javax/swing/JList.java
! 	(getPreferredScrollableViewportSize):
! 	The previous implementation was merely guessing the size,
! 	now it respects layoutOrientation, visibleRowCount
! 	and preferredSize.
! 	(getScrollableTracksViewportHeight):
! 	Reimplemented so that layoutOrientation, visibleRowCount
! 	and preferred size are respected.
! 	(getScrollableTracksViewportWidth):
! 	Reimplemented so that layoutOrientation, visibleRowCount
! 	and preferred size are respected.
! 	* javax/swing/plaf/basic/BasicListUI.java
! 	(getPreferredSize):
! 	Improved calculation of preferredSize when JList is
! 	set to HORIZONTAL_WRAP or VERTICAL_WRAP.
! 	(getCellBounds):
! 	The previous implementation assumed a layoutOrientation of
! 	JList.VERTICAL, now also ok with JList.HORIZONTAL_WRAP and
! 	JList.VERTICAL_WRAP.
! 
! 2005-04-19  Roman Kennke  <roman@ontographics.com>
! 
! 	* javax/swing/plaf/basic/BasicListUI.java
! 	(paintCell): use CellRendererPane for painting the cells.
! 
! 2005-04-19  Roman Kennke  <roman@ontographics.com>
! 
! 	* javax/swing/plaf/basic/BasicListUI:
! 	fixed modifiers of several fields, methods and inner
! 	classes to match the 'spec'.
! 	(getMaximumSize): removed. It's not in the spec and the
! 	implementations was superfluous.
! 
! 2005-04-19  Roman Kennke  <roman@ontographics.com>
! 
! 	* javax/swing/plaf/basic/BasicListUI:
! 	make BasicListUI capable of wrapping lists
! 	(layoutOrientation property of javax.swing.JList)
! 
! 2005-04-19  Roman Kennke  <roman@ontographics.com>
! 
! 	* javax/swing/plaf/basic/BasicListUI
! 	(updateLayoutState,paint): make BasicListUI aware of the
! 	width of the rendered JList.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/ImageIcon.java
! 	Added API documentation.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/text/ImageIcon.java
! 	(ImageIcon): Use setImage instead of direct assignment.
! 	(setImage): Call loadImage to make sure that the image is loaded.
! 	(loadImage): Waits for the image to complete loading.
! 	(getImageLoadStatus): Added. Returns the load status of the
! 	image.
! 
! 2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
! 
! 	* javax/swing/JTextArea.java (replaceRange):
! 	Fixing doc.remove(start, length) misinterpretation.
! 
! 2005-04-19  Roman Kennke  <roman@ontographics.com>
! 
! 	* javax/swing/CellRendererPane.java:
! 	implemented all methods of this class.
! 	reformatted all wrong formatted code.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/BoxLayout.java:
! 	(layoutContainer): Made this layout manager respect the
! 	minimum, maximum and preferred size more correctly.
! 
! 2005-04-19  Roman Kennke  <roman@ontographics.com>
! 
! 	* javax/swing/BoxLayout.java:
! 	(preferredLayoutSize,minimumLayoutSize,maximumLayoutSize,
! 	layoutContainer): Make these methods and thereby the
! 	BoxLayout respect the insets (like borders) of the
! 	component that is laid out.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* javax/swing/JComponent.java:
! 	Modified alignmentX and alignmentY to be 0.5 instead of 0.0.
! 	Untabified the file.
! 
! 2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
! 
! 	* javax/swing/JComboBox.java (constructors): selecting the
! 	first item if the box was constructed from the provided
! 	non - empty array or vector.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/awt/peer/gtk/GdkGraphics.java
! 	(getClipBounds): Handle clip being null.
! 	(setClip): Likewise.
! 	* java/beans/beancontext/BeanContextSupport.java
! 	(add): Implemented.
! 	(addAll): Likewise.
! 	(clear): Likewise.
! 	(removeAll): Likewise.
! 	(retainAll): Likewise.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/beans/beancontext/BeanContextServicesSupport.java
! 	(BeanContextServicesSupport): Reimplemented.
! 	(addBeanContextServicesListener): Implemented.
! 	(initialize): Likewise.
! 	(removeBeanContextServicesListener): Likewise.
! 	* java/beans/beancontext/BeanContextSupport.java
! 	(add): Likewise.
! 	(addBeanContextMembershipListener): Likewise.
! 	(getLocale): Likewise.
! 	(initialize): Likewise.
! 	(iterator): Likewise.
! 	(remove): Likewise.
! 	(toArray): Likewise.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* java/awt/MediaTracker.java:
! 	Reindented tabs to spaces.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* java/awt/MediaTracker.java
! 	(MediaEntry.imageUpdate): Removed check for SOMEBITS, this
! 	confused the media tracker and lead to lockups. The LOADING
! 	bit is handled on other places.
! 	(addImage): Removed the 'start image tracking' stuff. This
! 	is not necessary and could confuse the media tracker.
! 	(checkAll): Improved the check for image status so that
! 	images that already complete images are detected. Also now
! 	are really all images checked and if necessary loaded. Before
! 	the method bailed out after the first incomplete image.
! 	(statusAll): Detect images that are complete after the
! 	call to Component.prepareImage(..).
! 	(checkID): The same as in checkAll.
! 	(statusID): The same as in statusAll.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* java/awt/MediaTracker.java
! 	(addImage): Synchronized list access.
! 	(waitForAll): Fixed comparison of time (changed < to >).
! 	(waitForID): Fixed comparison of time (changed < to >).
! 	(removeImage): Synchronized list access.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* java/awt/MediaTracker.java
! 	Added API documentation.
! 
! 2005-04-19  Roman Kennke  <roman@kennke.org>
! 
! 	* java/awt/MediaTracker.java
! 	(MediaEntry.imageUpdate): Fixed flags. The different flags
! 	must not be ORed together.
! 	(checkAll): Modified to handle different meaning of the flags.
! 	(waitForAll): Fixed so that it waits maximum the
! 	specified amount of milliseconds.
! 	(statusAll): Modified to handle different meaning of the flags.
! 	(waitForID): Fixed so that it waits maximum the
! 	specified amount of milliseconds.
! 
! 2005-04-19  vid Gilbert <david.gilbert@object-refinery.com>
! 
! 	* java/awt/Font.java (decode): Handle null argument and allow
! 	space as delimiter.
! 
! 2005-04-19  Robert Schuster <thebohemian@gmx.net>
! 
! 	* java/beans/EventHandler.java: Reworked documentation.
! 	(invoke): Fixed behavior to match spec.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/awt/print/PrinterJob.java
! 	(pageDialog): New method.
! 	(printDialog): Implemented.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/awt/image/ConvolveOp.java:
! 	Removed comment added by eclipse.
! 
! 2005-04-19  Guilhem Lavaux  <guilhem@kaffe.org>
! 
! 	* java/awt/image/IndexColorModel.java
! 	(getRGB): Check if pixel is negative.
! 
! 2005-04-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/awt/image/RasterOp.java:
! 	Fixed wrong formatting.
! 
! 2005-04-18  Roman Kennke  <roman@kennke.org>
! 
! 	* java/awt/Compmonent.java
! 	(setComponentOrientation): Made this property firing a
! 	PropertyChangeEvent.
! 
! 2005-04-18  Roman Kennke  <roman@kennke.org>
! 
! 	* java/awt/BorderLayout.java
! 	(calcSize): Check for overflow when component sizes are added.
! 
! 2005-04-18  Robert Schuster <thebohemian@gmx.net>
! 
! 	* java/awt/AWTEvent.java (toString): Added case
! 	for source not being an AWT component.
! 
! 2005-04-18  Chris Burdess  <dog@gnu.org>
! 
! 	* gnu/java/net/BASE64.java: Truncate encoded byte array.
! 
! 2005-04-18  Michael Koch  <konqueror@gmx.de>
! 
! 	gnu/java/awt/EmbeddedWindowSupport.java,
! 	gnu/java/net/HeaderFieldHelper.java,
! 	gnu/java/net/URLParseError.java,
! 	gnu/java/net/protocol/file/Handler.java,
! 	gnu/java/net/protocol/jar/Handler.java:
! 	Fixed usage of @author tag.
! 
! 2005-04-18  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/xml/aelfred2/XmlParser.java:
! 	Reverted my typo fix.
! 
! 2005-04-18  Michael Koch  <konqueror@gmx.de>
! 
! 	* java/awt/geom/CubicCurve2D.java,
! 	java/awt/geom/QuadCurve2D.java:
! 	Fixed mentioning of Brian Gouph.
! 
! 2005-04-18  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/awt/Buffers.java,
! 	gnu/java/awt/image/ImageDecoder.java,
! 	gnu/java/awt/image/XBMDecoder.java,
! 	gnu/java/awt/peer/ClasspathFontPeer.java,
! 	gnu/java/net/CRLFInputStream.java,
! 	gnu/java/net/EmptyX509TrustManager.java,
! 	gnu/java/net/LineInputStream.java,
! 	gnu/java/net/protocol/ftp/ActiveModeDTP.java,
! 	gnu/java/net/protocol/ftp/BlockInputStream.java,
! 	gnu/java/net/protocol/ftp/CompressedInputStream.java,
! 	gnu/java/net/protocol/ftp/DTP.java,
! 	gnu/java/net/protocol/ftp/DTPInputStream.java,
! 	gnu/java/net/protocol/ftp/FTPConnection.java,
! 	gnu/java/net/protocol/ftp/FTPURLConnection.java,
! 	gnu/java/net/protocol/ftp/PassiveModeDTP.java,
! 	gnu/java/net/protocol/ftp/StreamInputStream.java,
! 	gnu/java/net/protocol/http/ChunkedInputStream.java,
! 	gnu/java/net/protocol/http/HTTPConnection.java,
! 	gnu/java/net/protocol/http/HTTPURLConnection.java,
! 	gnu/java/net/protocol/http/Headers.java,
! 	gnu/java/net/protocol/http/Request.java,
! 	gnu/java/nio/ChannelInputStream.java,
! 	gnu/java/nio/ChannelOutputStream.java,
! 	gnu/java/nio/InputStreamChannel.java,
! 	gnu/java/nio/OutputStreamChannel.java,
! 	gnu/java/nio/SelectorProviderImpl.java,
! 	gnu/java/rmi/RMIMarshalledObjectInputStream.java,
! 	gnu/java/rmi/RMIMarshalledObjectOutputStream.java,
! 	gnu/java/rmi/dgc/DGCImpl.java,
! 	gnu/java/rmi/registry/RegistryImpl.java,
! 	gnu/java/rmi/server/ProtocolConstants.java,
! 	gnu/java/rmi/server/RMIDefaultSocketFactory.java,
! 	gnu/java/rmi/server/RMIIncomingThread.java,
! 	gnu/java/rmi/server/RMIObjectInputStream.java,
! 	gnu/java/rmi/server/RMIObjectOutputStream.java,
! 	gnu/java/rmi/server/RMIVoidValue.java,
! 	gnu/java/rmi/server/UnicastConnectionManager.java,
! 	gnu/java/rmi/server/UnicastRef.java,
! 	gnu/java/rmi/server/UnicastRemoteCall.java,
! 	gnu/java/rmi/server/UnicastRemoteStub.java,
! 	gnu/java/rmi/server/UnicastServerRef.java,
! 	gnu/java/security/OID.java,
! 	gnu/java/security/der/DERReader.java,
! 	gnu/java/security/provider/CollectionCertStoreImpl.java,
! 	gnu/java/security/provider/DSAParameterGenerator.java,
! 	gnu/java/security/provider/DefaultPolicy.java,
! 	gnu/java/security/provider/EncodedKeyFactory.java,
! 	gnu/java/security/provider/GnuDHPublicKey.java,
! 	gnu/java/security/provider/GnuDSAPrivateKey.java,
! 	gnu/java/security/provider/GnuDSAPublicKey.java,
! 	gnu/java/security/provider/GnuRSAPrivateKey.java,
! 	gnu/java/security/provider/GnuRSAPublicKey.java,
! 	gnu/java/security/provider/PKIXCertPathValidatorImpl.java,
! 	gnu/java/security/provider/RSA.java,
! 	gnu/java/security/provider/SHA1PRNG.java,
! 	gnu/java/security/provider/SHA1withRSA.java,
! 	gnu/java/security/provider/X509CertificateFactory.java,
! 	gnu/java/security/x509/GnuPKIExtension.java,
! 	gnu/java/security/x509/X500DistinguishedName.java,
! 	gnu/java/security/x509/X509CRL.java,
! 	gnu/java/security/x509/X509CRLEntry.java,
! 	gnu/java/security/x509/X509CertPath.java,
! 	gnu/java/security/x509/X509CertSelectorImpl.java,
! 	gnu/java/security/x509/X509Certificate.java,
! 	gnu/java/security/x509/ext/AuthorityKeyIdentifier.java,
! 	gnu/java/security/x509/ext/BasicConstraints.java,
! 	gnu/java/security/x509/ext/CRLNumber.java,
! 	gnu/java/security/x509/ext/CertificatePolicies.java,
! 	gnu/java/security/x509/ext/ExtendedKeyUsage.java,
! 	gnu/java/security/x509/ext/Extension.java,
! 	gnu/java/security/x509/ext/GeneralNames.java,
! 	gnu/java/security/x509/ext/IssuerAlternativeNames.java,
! 	gnu/java/security/x509/ext/KeyUsage.java,
! 	gnu/java/security/x509/ext/PolicyConstraint.java,
! 	gnu/java/security/x509/ext/PolicyMappings.java,
! 	gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java,
! 	gnu/java/security/x509/ext/ReasonCode.java,
! 	gnu/java/security/x509/ext/SubjectAlternativeNames.java,
! 	gnu/java/security/x509/ext/SubjectKeyIdentifier.java:
! 	Reorganized import statements.
! 
! 2005-04-18  Michael Koch  <konqueror@gmx.de>
! 
! 	* gnu/java/awt/color/CieXyzConverter.java,
! 	gnu/java/awt/color/ClutProfileConverter.java,
! 	gnu/java/awt/color/ColorLookUpTable.java,
! 	gnu/java/awt/color/ColorSpaceConverter.java,
! 	gnu/java/awt/color/GrayProfileConverter.java,
! 	gnu/java/awt/color/GrayScaleConverter.java,
! 	gnu/java/awt/color/LinearRGBConverter.java,
! 	gnu/java/awt/color/ProfileHeader.java,
! 	gnu/java/awt/color/PyccConverter.java,
! 	gnu/java/awt/color/RgbProfileConverter.java,
! 	gnu/java/awt/color/SrgbConverter.java,
! 	gnu/java/awt/color/TagEntry.java,
! 	gnu/java/awt/color/ToneReproductionCurve.java:
! 	Standardized file headers.
  
  2005-04-16  Tom Tromey  <tromey@redhat.com>
  
***************
*** 388,409 ****
  	* Makefile.am (libgij_la_LIBADD): Moved SAX and DOM...
  	(libgcj0_convenience_la_LIBADD): ... here.
  
! 2005-04-14  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natClassLoader.cc (_Jv_FindClass): Use system loader,
! 	not boot loader.
! 	(_Jv_RegisterInitiatingLoader): Likewise.
! 	(_Jv_UnregisterInitiatingLoader): Likewise.
  
  2005-04-13  Mark Wielaard  <mark@klomp.org>
  
  	* java/lang/natRuntime.cc (insertSystemProperties): Set
  	java.class.path to CLASSPATH if not already set.
  
! 2005-04-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
  	* prims.cc (parse_verbose_args): Fix verbose argument parsing.
  
  2005-04-11  Michael Koch  <konqueror@gmx.de>
  
  	* javax/imageio/ImageIO.java (ReaderFormatFilter.filter):
--- 3732,3768 ----
  	* Makefile.am (libgij_la_LIBADD): Moved SAX and DOM...
  	(libgcj0_convenience_la_LIBADD): ... here.
  
! 2005-04-14  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* gij.cc (version): Properly quote java version.
! 	(main): Fix typo in comment.
  
  2005-04-13  Mark Wielaard  <mark@klomp.org>
  
  	* java/lang/natRuntime.cc (insertSystemProperties): Set
  	java.class.path to CLASSPATH if not already set.
  
! 2005-04-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
  	* prims.cc (parse_verbose_args): Fix verbose argument parsing.
  
+ 2005-04-12  Mike Stump  <mrs@apple.com>
+ 
+ 	* configure: Regenerate.
+ 
+ 2005-04-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	PR libgcj/20958
+ 	* gnu/gcj/runtime/PersistentByteMap.java (close): Throw IOException.
+ 	* gnu/gcj/tools/gcj_dbtool/Main.java (addJar): Make 'length' an int.
+ 
+ 2005-04-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	PR libgcj/20975
+ 	* scripts/TexinfoDoclet.java: Removed.
+ 	* Makefile.am (texinfo): Removed.
+ 	* Makefile.in: Regenerated.
+ 
  2005-04-11  Michael Koch  <konqueror@gmx.de>
  
  	* javax/imageio/ImageIO.java (ReaderFormatFilter.filter):
***************
*** 417,554 ****
  	(loadClass): Use it.
  	* java/lang/natClassLoader.cc (loadClassFromSig): New method.
  
! 2005-04-06  Tom Tromey  <tromey@redhat.com>
! 
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (lib_gnu_java_awt_peer_gtk_la_SOURCES): Removed
! 	gtk_awt_peer_sources.
! 	(lib_gnu_java_awt_peer_gtk_la_LIBADD): Added gtk-awt-peer.lo.
! 	(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES): Likewise.
! 	($(gtk_awt_peer_sources:.java=.lo)): Removed.
! 	(gtk-awt-peer.lo): New target.
! 
! 	* java/lang/natVMClassLoader.cc (getSystemClassLoaderInternal):
! 	Updated for name change.
! 	(nativeFindClass): New method.
! 	(loadClass): Use nativeFindClass.
! 	* java/lang/natClassLoader.cc (_Jv_FindClass): Use single-argument
! 	form of loadClass.
! 	* java/lang/VMClassLoader.java (tried_libraries, lib_control,
! 	LIB_FULL, LIB_CACHE, LIB_NEVER): New fields from old
! 	VMClassLoader.
! 	(initialize): New method.
! 	(nativeFindClass): Declare.
! 	* gnu/gcj/runtime/natVMClassLoader.cc: Removed.
! 	* gnu/gcj/runtime/VMClassLoader.java: Removed.
! 	* gnu/gcj/runtime/ExtensionClassLoader.java: Renamed from
! 	VMClassLoader.java.
! 	(definePackageForNative): Removed.
! 	(tried_libraries, LIB_CACHE, LIB_FULL, LIB_NEVER, lib_control):
! 	Moved to VMClassLoader.java.
! 	* prims.cc (_Jv_CreateJavaVM): Updated for renaming.
! 	* Makefile.am (gnu/gcj/runtime/ExtensionClassLoader.h): Renamed.
! 	(ordinary_java_source_files): Added ExtensionClassLoader.java,
! 	removed VMClassLoader.java.
! 	(nat_source_files): Removed natVMClassLoader.cc.
! 
! 	* java/lang/natRuntime.cc (insertSystemProperties): Set
! 	gnu.gcj.runtime.endorsed.dirs.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (ordinary_java_source_files): Added
! 	HelperClassLoader.java.
! 	(AM_CXXFLAGS): Define GCJ_ENDORSED_DIRS.
! 	* gnu/gcj/runtime/VMClassLoader.java (VMClassLoader): Extends
! 	HelperClassLoader.
! 	(init): Use addDirectoriesFromProperty.
! 	* gnu/gcj/runtime/BootClassLoader.java (BootClassLoader): Extends
! 	HelperClassLoader.  Use addDirectoriesFromProperty.  Handle
! 	gnu.gcj.runtime.endorsed.dirs.
! 	* gnu/gcj/runtime/HelperClassLoader.java: New file.
! 
! 	* gnu/gcj/runtime/BootClassLoader.java (BootClassLoader): Don't
! 	add sax and w3c libraries.
! 	* Makefile.am (libgij_la_LIBADD): Added libsax-gcj.la and
! 	libw3c-gcj.la.
! 	* external/w3c_dom/Makefile.in: Rebuilt.
! 	* external/w3c_dom/Makefile.am (libw3c_gcj_la_GCJFLAGS): Include
! 	AM_GCJFLAGS.
! 	(libw3c_gcj_la_LDFLAGS): New variable.
! 	(noinst_LTLIBRARIES): Renamed.
! 	* external/sax/Makefile.in: Rebuilt.
! 	* external/sax/Makefile.am (libsax_gcj_la_GCJFLAGS): Include
! 	AM_GCJFLAGS.
! 	(libsax_gcj_la_LDFLAGS): New variable.
! 	(noinst_LTLIBRARIES): Renamed.
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (AM_CXXFLAGS): Define TOOLEXECLIBDIR.
! 	(libgcj0_convenience_la_SOURCES): Don't include
! 	gnu_xml_source_files.
! 	(libgcj0_convenience_la_LIBADD): New variable.
! 	(libgcj_la_LIBADD): Don't include sax or w3c_dom.
! 	(all_java_source_files): javax_imageio_source_files,
! 	javax_xml_source_files, and gnu_java_beans_source_files.
! 	($(gnu_xml_source_files:.java=.lo)): Removed target.
! 	(gnu-xml.lo): New target.
! 	(javax-imageio.lo): Likewise.
! 	(javax-xml.lo): Likewise.
! 	(gnu-java-beans.lo): Likewise.
! 	(gnu_java_beans_source_files): New variable.
! 	(javax_imageio_source_files): Likewise.
! 	(javax_xml_source_files): Likewise.
! 	(javax_source_files): Moved files to other variable.
! 	(awt_java_source_files): Likewise.
! 	(ordinary_java_source_files): Added BootClassLoader.java.
! 	* java/lang/natVMClassLoader.cc (defineClass): Use boot loader,
! 	not system class loader.
! 	(initBootLoader): New method.
! 	(loadClass): Search bootLoader.
! 	* java/lang/natClassLoader.cc (_Jv_RegisterInitiatingLoader): Use
! 	boot loader, not system class loader.
! 	(_Jv_UnregisterInitiatingLoader): Likewise.
! 	(_Jv_FindClass): Likewise.  Ensure entries in
! 	bootstrap_class_list are unique.
! 	* java/lang/natClass.cc (getClassLoader): Don't special case
! 	system class loader.
! 	* java/lang/VMClassLoader.java (bootLoader): New field.
! 	(getResource): Use bootLoader.
! 	(getResources): Likewise.
! 	(initBootLoader): Declare.
! 	* gnu/gcj/runtime/BootClassLoader.java: New file.
! 	* external/sax/org/xml/sax/helpers/NamespaceSupport.java
! 	(EMPTY_ENUMERATION): Now package-private.
! 	* external/w3c_com/Makefile.in: Rebuilt.
! 	* external/w3c_com/Makefile.am (MULTIBUILDTOP): New variable.
! 	(w3c.jar): New target.
! 	(classes.stamp): Updated.
! 	(toolexeclib_LTLIBRARIES): Renamed from noinst_LTLIBRARIES.
! 	Changed name of library.
! 	(libw3c_gcj_la_SOURCES): New variable.
! 	(libw3c_gcj_la_GCJFLAGS): Likewise.
! 	(source_files): Renamed from lib3c_convenience_la_SOURCES.
! 	* external/sax/Makefile.in: Rebuilt.
! 	* external/sax/Makefile.am (MULTIBUILDTOP): New variable.
! 	(sax.jar): New target.
! 	(classes.stamp): Updated.
! 	(toolexeclib_LTLIBRARIES): Renamed from noinst_LTLIBRARIES.
! 	Changed name of library.
! 	(libsax_gcj_la_SOURCES): New variable.
! 	(libsax_gcj_la_GCJFLAGS): Likewise.
! 	(source_files): Renamed from libsax_convenience_la_SOURCES.
! 	* prims.cc (_Jv_CreateJavaVM): Initialize the bootstrap class
! 	loader.
! 	(_Jv_RunMain): Handle case where 'runtime' is NULL at exit.
  
! 2005-03-28  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* configure.ac: Revert 2005-03-25's patch.  Propagate MULTIlib
! 	settings to sub Makefiles.
! 	(GCJH, ZIP): Prefix with top_builddir.
! 	* configure: Rebuild.
! 	* external/w3c_dom/Makefile.am (MULTIBUILDTOP): Don't override.
! 	* external/w3c_dom/Makefile.in: Rebuild.
! 	* external/sax/Makefile.am (MULTIBUILDTOP): Don't override.
! 	* external/sax/Makefile.in: Rebuild.
  
  2005-04-05  Andrew Haley  <aph@redhat.com>
  
--- 3776,3791 ----
  	(loadClass): Use it.
  	* java/lang/natClassLoader.cc (loadClassFromSig): New method.
  
! 2005-04-06  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* Makefile.am ($(db_name)): Add $(EXEEXT) suffix to
! 	gcj-dbtool dependency
! 	* Makefile.in: Regenerated
  
! 2005-04-06  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* java/util/logging/natLogger.cc (getCallerStackFrame): Don't crash on
! 	NULL klass and meth values from _Jv_StackTrace::GetCallerInfo().
  
  2005-04-05  Andrew Haley  <aph@redhat.com>
  
***************
*** 578,583 ****
--- 3815,3842 ----
  	* java/lang/natRuntime.cc (insertSystemProperties): Set java.home
  	to JAVA_HOME macro.
  
+ 2005-04-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc (_Jv_JNI_GetAnyFieldID): Throw ClassNotFoundException.
+ 	* java/lang/reflect/natMethod.cc (_Jv_GetTypesFromSignature):
+ 	Rewrote to use _Jv_FindClassFromSignature.
+ 	* verify.cc (resolve): throw NoClassDefFoundError.
+ 	* link.cc (resolve_field): Throw NoClassDefFoundError.
+ 	(find_field): Likewise.
+ 	* prims.cc (_Jv_FindClassFromSignature): Removed recursion.
+ 	Handle error cases.  Added 'endp' argument.
+ 	* include/jvm.h (_Jv_FindClassFromSignature): Updated prototype.
+ 
+ 2005-04-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (lib_gnu_java_awt_peer_gtk_la_SOURCES): Removed
+ 	gtk_awt_peer_sources.
+ 	(lib_gnu_java_awt_peer_gtk_la_LIBADD): Added gtk-awt-peer.lo.
+ 	(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES): Likewise.
+ 	($(gtk_awt_peer_sources:.java=.lo)): Removed.
+ 	(gtk-awt-peer.lo): New target.
+ 
  2005-04-04  Steve Pribyl <steve@netfuel.com>
  
  	PR libgcj/20761
***************
*** 631,637 ****
  	* configure: Regenerate.
  	* include/config.h.in: Regenerate.
  
! 2005-04-01  Mark Anderson <mark@panonet.net>
  
  	* java/lang/natDouble.cc (parseDouble): Handle NaN, Infinity and
  	-Infinity as parameters.
--- 3890,3896 ----
  	* configure: Regenerate.
  	* include/config.h.in: Regenerate.
  
! 2005-04-01 Mark Anderson <mark@panonet.net>
  
  	* java/lang/natDouble.cc (parseDouble): Handle NaN, Infinity and
  	-Infinity as parameters.
***************
*** 642,647 ****
--- 3901,3938 ----
  	(read): Make sure a positive byte value is returned. Revised javadoc.
  	Thanks to Olafur Bragason for reporting these bugs.
  
+ 2005-04-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natVMClassLoader.cc (getSystemClassLoaderInternal):
+ 	Updated for name change.
+ 	(nativeFindClass): New method.
+ 	(loadClass): Use nativeFindClass.
+ 	* java/lang/natClassLoader.cc (_Jv_FindClass): Use single-argument
+ 	form of loadClass.
+ 	* java/lang/VMClassLoader.java (tried_libraries, lib_control,
+ 	LIB_FULL, LIB_CACHE, LIB_NEVER): New fields from old
+ 	VMClassLoader.
+ 	(initialize): New method.
+ 	(nativeFindClass): Declare.
+ 	* gnu/gcj/runtime/natVMClassLoader.cc: Removed.
+ 	* gnu/gcj/runtime/VMClassLoader.java: Removed.
+ 	* gnu/gcj/runtime/ExtensionClassLoader.java: Renamed from
+ 	VMClassLoader.java.
+ 	(definePackageForNative): Removed.
+ 	(tried_libraries, LIB_CACHE, LIB_FULL, LIB_NEVER, lib_control):
+ 	Moved to VMClassLoader.java.
+ 	* prims.cc (_Jv_CreateJavaVM): Updated for renaming.
+ 	* Makefile.am (gnu/gcj/runtime/ExtensionClassLoader.h): Renamed.
+ 	(ordinary_java_source_files): Added ExtensionClassLoader.java,
+ 	removed VMClassLoader.java.
+ 	(nat_source_files): Removed natVMClassLoader.cc.
+ 
+ 2005-04-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (db_pathtail): Use $(gcc_version), not
+ 	@gcc_version@.
+ 
  2005-04-01  Jeroen Frijters  <jeroen@frijters.net>
  
  	* java/util/Timer.java
***************
*** 651,688 ****
  
  	* javax/swing/text/JTextComponent.java (viewToModel): New method.
  
! 2005-03-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* Makefile.am (gtk_c_source_files): Remove jni/classpath/jcl.c,
! 	jni/classpath/jnilink.c, jni/classpath/primlib.c.
! 	(lib_gnu_java_awt_peer_gtk_la_SOURCES): jni/classpath/jcl.h,
! 	jni/classpath/jnilink.h, jni/classpath/primlib.h.
! 	* Makefile.in: Regenerate.
! 	* jni/classpath/jcl.h: Remove.
! 	* jni/classpath/jcl.c: Likewise.
! 	* jni/classpath/jnilink.h: Likewise.
! 	* jni/classpath/jnilink.c: Likewise.
! 	* jni/classpath/primlib.h: Likewise.
! 	* jni/classpath/primlib.c: Likewise.
! 
! 2005-03-30  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* Makefile.am (classes.stamp): Add gnu/gcj/tools/gcj_dbtool/Main.java
! 	to fix a ONESTEP fallout.
! 	* Makefile.in: Regenerate.
  
! 2005-03-30  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* testsuite/lib/libjava.exp (libjava_init): Use the same target
! 	check for Darwin.
! 	(libjava_arguments): Likewise.
  
! 	* testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Likewise.
! 	(gcj_jni_test_one): Likewise.
! 	(gcj_jni_invocation_compile_c_to_binary): Likewise.
! 	Add flags to keep the Darwin linker quiet.
! 	(gcj_jni_invocation_test_one): Use the same target check for Darwin.
! 	Add -liconv and lgcc_s for Darwin.
  
  2005-03-26  Chris Burdess  <dog@gnu.org>
  
--- 3942,3970 ----
  
  	* javax/swing/text/JTextComponent.java (viewToModel): New method.
  
! 2005-03-29  Ian Lance Taylor  <ian@airs.com>
  
! 	* external/sax/Makefile.am (GCJ_WITH_FLAGS): Add "-fclasspath=".
! 	* external/sax/Makefile.in: Rebuild.
! 	* external/w3c_dom/Makefile.am (GCJ_WITH_FLAGS): Add
! 	"-fclasspath=".
! 	* external/w3c_dom/Makefile.in: Rebuild.
  
! 2005-03-29  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natRuntime.cc (insertSystemProperties): Set
! 	gnu.gcj.runtime.endorsed.dirs.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (ordinary_java_source_files): Added
! 	HelperClassLoader.java.
! 	(AM_CXXFLAGS): Define GCJ_ENDORSED_DIRS.
! 	* gnu/gcj/runtime/VMClassLoader.java (VMClassLoader): Extends
! 	HelperClassLoader.
! 	(init): Use addDirectoriesFromProperty.
! 	* gnu/gcj/runtime/BootClassLoader.java (BootClassLoader): Extends
! 	HelperClassLoader.  Use addDirectoriesFromProperty.  Handle
! 	gnu.gcj.runtime.endorsed.dirs.
! 	* gnu/gcj/runtime/HelperClassLoader.java: New file.
  
  2005-03-26  Chris Burdess  <dog@gnu.org>
  
***************
*** 701,709 ****
  2005-02-27  Chris Burdess  <dog@gnu.org>
  
  	* gnu/xml/aelfred2/JAXPFactory.java,
! 	  gnu/xml/aelfred2/SAXDriver.java,
! 	  gnu/xml/aelfred2/XmlParser.java,
! 	  gnu/xml/aelfred2/XmlReader.java: Applied GNU Classpath source code
  	formatting conventions. Replaced arrays of Object with struct-like
  	classes for easier maintainability. Made SAXDriver.stringInterning
  	package private to allow access from XmlParser inside the loop without
--- 3983,3991 ----
  2005-02-27  Chris Burdess  <dog@gnu.org>
  
  	* gnu/xml/aelfred2/JAXPFactory.java,
! 	gnu/xml/aelfred2/SAXDriver.java,
! 	gnu/xml/aelfred2/XmlParser.java,
! 	gnu/xml/aelfred2/XmlReader.java: Applied GNU Classpath source code
  	formatting conventions. Replaced arrays of Object with struct-like
  	classes for easier maintainability. Made SAXDriver.stringInterning
  	package private to allow access from XmlParser inside the loop without
***************
*** 714,729 ****
  	* gnu/xml/aelfred2/SAXDriver.java: Corrected bug handling URI
  	warnings.
  
! 2005-03-28  Per Bothner  <per@bothner.com>
  
! 	* boehm.cc (_Jv_MarkObj): Don't follow null pointer to static field,
! 	which can happen if class is JV_STATE_LOADED but not JV_STATE_PREPARED.
  
  2005-03-28  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
  	* testsuite/libjava.jni/jni.exp (gcj_jni_invocation_test_one): Add
  	libsocket to the libraries to link for Solaris.
  
  2005-03-24  Anthony Green  <green@redhat.com>
  
  	* gnu/gcj/tools/gcj_dbtool/Main.java: Accept libdir argument with
--- 3996,4034 ----
  	* gnu/xml/aelfred2/SAXDriver.java: Corrected bug handling URI
  	warnings.
  
! 2005-03-28  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* configure.ac: Revert 2005-03-25's patch.  Propagate MULTIlib
! 	settings to sub Makefiles.
! 	(GCJH, ZIP): Prefix with top_builddir.
! 	* configure: Rebuild.
! 	* external/w3c_dom/Makefile.am (MULTIBUILDTOP): Don't override.
! 	* external/w3c_dom/Makefile.in: Rebuild.
! 	* external/sax/Makefile.am (MULTIBUILDTOP): Don't override.
! 	* external/sax/Makefile.in: Rebuild.
  
  2005-03-28  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
  	* testsuite/libjava.jni/jni.exp (gcj_jni_invocation_test_one): Add
  	libsocket to the libraries to link for Solaris.
  
+ 2005-03-28  Per Bothner  <per@bothner.com>
+ 
+ 	* boehm.cc (_Jv_MarkObj): Don't follow null pointer to static field,
+ 	which can happen if class is JV_STATE_LOADED but not JV_STATE_PREPARED.
+ 
+ 2005-03-27  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* Makefile.am (classes.stamp): Add gnu/gcj/tools/gcj_dbtool/Main.java
+ 	to fix a ONESTEP fallout.
+ 	* Makefile.in: Regenerate.
+ 
+ 2005-03-25  Mike Stump  <mrs@apple.com>
+ 
+ 	* configure.ac: Fix ZIP and GCJH at configure time to absolute
+ 	paths like we do for the compiler, as we use it in external/sax
+ 	and it doesn't get MULTIBUILDTOP right when multilibing.
+ 
  2005-03-24  Anthony Green  <green@redhat.com>
  
  	* gnu/gcj/tools/gcj_dbtool/Main.java: Accept libdir argument with
***************
*** 734,739 ****
--- 4039,4124 ----
  	LIBGCJ_DEFAULT_DATABASE_PATH_TAIL.
  	(db_pathtail): New macro.
  
+ 2005-03-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/runtime/BootClassLoader.java (BootClassLoader): Don't
+ 	add sax and w3c libraries.
+ 	* Makefile.am (libgij_la_LIBADD): Added libsax-gcj.la and
+ 	libw3c-gcj.la.
+ 	* external/w3c_dom/Makefile.in: Rebuilt.
+ 	* external/w3c_dom/Makefile.am (libw3c_gcj_la_GCJFLAGS): Include
+ 	AM_GCJFLAGS.
+ 	(libw3c_gcj_la_LDFLAGS): New variable.
+ 	(noinst_LTLIBRARIES): Renamed.
+ 	* external/sax/Makefile.in: Rebuilt.
+ 	* external/sax/Makefile.am (libsax_gcj_la_GCJFLAGS): Include
+ 	AM_GCJFLAGS.
+ 	(libsax_gcj_la_LDFLAGS): New variable.
+ 	(noinst_LTLIBRARIES): Renamed.
+ 
+ 2005-03-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_CXXFLAGS): Define TOOLEXECLIBDIR.
+ 	(libgcj0_convenience_la_SOURCES): Don't include
+ 	gnu_xml_source_files.
+ 	(libgcj0_convenience_la_LIBADD): New variable.
+ 	(libgcj_la_LIBADD): Don't include sax or w3c_dom.
+ 	(all_java_source_files): javax_imageio_source_files,
+ 	javax_xml_source_files, and gnu_java_beans_source_files.
+ 	($(gnu_xml_source_files:.java=.lo)): Removed target.
+ 	(gnu-xml.lo): New target.
+ 	(javax-imageio.lo): Likewise.
+ 	(javax-xml.lo): Likewise.
+ 	(gnu-java-beans.lo): Likewise.
+ 	(gnu_java_beans_source_files): New variable.
+ 	(javax_imageio_source_files): Likewise.
+ 	(javax_xml_source_files): Likewise.
+ 	(javax_source_files): Moved files to other variable.
+ 	(awt_java_source_files): Likewise.
+ 	(ordinary_java_source_files): Added BootClassLoader.java.
+ 	* java/lang/natVMClassLoader.cc (defineClass): Use boot loader,
+ 	not system class loader.
+ 	(initBootLoader): New method.
+ 	(loadClass): Search bootLoader.
+ 	* java/lang/natClassLoader.cc (_Jv_RegisterInitiatingLoader): Use
+ 	boot loader, not system class loader.
+ 	(_Jv_UnregisterInitiatingLoader): Likewise.
+ 	(_Jv_FindClass): Likewise.  Ensure entries in
+ 	bootstrap_class_list are unique.
+ 	* java/lang/natClass.cc (getClassLoader): Don't special case
+ 	system class loader.
+ 	* java/lang/VMClassLoader.java (bootLoader): New field.
+ 	(getResource): Use bootLoader.
+ 	(getResources): Likewise.
+ 	(initBootLoader): Declare.
+ 	* gnu/gcj/runtime/BootClassLoader.java: New file.
+ 	* external/sax/org/xml/sax/helpers/NamespaceSupport.java
+ 	(EMPTY_ENUMERATION): Now package-private.
+ 	* external/w3c_com/Makefile.in: Rebuilt.
+ 	* external/w3c_com/Makefile.am (MULTIBUILDTOP): New variable.
+ 	(w3c.jar): New target.
+ 	(classes.stamp): Updated.
+ 	(toolexeclib_LTLIBRARIES): Renamed from noinst_LTLIBRARIES.
+ 	Changed name of library.
+ 	(libw3c_gcj_la_SOURCES): New variable.
+ 	(libw3c_gcj_la_GCJFLAGS): Likewise.
+ 	(source_files): Renamed from lib3c_convenience_la_SOURCES.
+ 	* external/sax/Makefile.in: Rebuilt.
+ 	* external/sax/Makefile.am (MULTIBUILDTOP): New variable.
+ 	(sax.jar): New target.
+ 	(classes.stamp): Updated.
+ 	(toolexeclib_LTLIBRARIES): Renamed from noinst_LTLIBRARIES.
+ 	Changed name of library.
+ 	(libsax_gcj_la_SOURCES): New variable.
+ 	(libsax_gcj_la_GCJFLAGS): Likewise.
+ 	(source_files): Renamed from libsax_convenience_la_SOURCES.
+ 	* stacktrace.cc (non_system_trace_fn): Don't look at system class
+ 	loader.
+ 	* prims.cc (_Jv_CreateJavaVM): Initialize the bootstrap class
+ 	loader.
+ 	(_Jv_RunMain): Handle case where 'runtime' is NULL at exit.
+ 
  2005-03-23  Sven de Marothy  <sven@physto.se>
  
  	PR libgcj/2641, PR libgcj/9854, PR libgcj/14892, PR libgcj/18083,
***************
*** 747,763 ****
  	(nonLeniencyCheck): Adjust leniency checking to that fact.
  	(getLinearDay): Should be private.
  
! 2005-03-22  Mohan Embar  <gnustuff@thisiscool.com>
! 	    David Daney  <ddaney@avtrex.com>
  
! 	* gnu/java/net/natPlainSocketImplWin32.cc (read): Handle
! 	count == 0 case.
  
! 2005-03-22  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* Makefile.am ($(db_name)): Add $(EXEEXT) suffix to
! 	gcj-dbtool dependency
! 	* Makefile.in: Regenerated
  
  2005-03-22  Tom Tromey  <tromey@redhat.com>
  
--- 4132,4148 ----
  	(nonLeniencyCheck): Adjust leniency checking to that fact.
  	(getLinearDay): Should be private.
  
! 2005-03-23  Tom Tromey  <tromey@redhat.com>
  
! 	* include/jvm.h (GCJ_40_BC_ABI_VERSION): New define.
! 	(_Jv_CheckABIVersion): Use it.
  
! 2005-03-22  Mike Stump  <mrs@apple.com>
  
! 	* stacktrace.cc: Delete unused _Jv_FindCallingClassState.
! 
! 	* include/posix.h: .dylib is used on all Apple MACH platforms.
! 	* java/lang/ieeefp.h: ppc64 is also __IEEE_BIG_ENDIAN.
  
  2005-03-22  Tom Tromey  <tromey@redhat.com>
  
***************
*** 768,773 ****
--- 4153,4200 ----
  	* java/lang/VMCompiler.java (static block): Also catch
  	BufferUnderflowException.
  
+ 2005-03-21  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* configure.ac: Do not invoke TL_AC_GCC_VERSION.  Do not
+ 	set tool_include_dir.  In all substitutions, leave $(gcc_version)
+ 	to be expanded by the Makefile.
+ 	* aclocal.m4, configure: Regenerate.
+ 	* Makefile.am: Set gcc_version.  Replace all uses of
+ 	@gcc_version@ with $(gcc_version).
+ 	* external/Makefile.am, external/sax/Makefile.am
+ 	* external/w3c_dom/Makefile.am, gcj/Makefile.am
+ 	* testsuite/Makefile.am: Set gcc_version.
+ 	* include/Makefile.am: Set gcc_version and tool_include_dir.
+ 	* Makefile.in, external/Makefile.in, external/sax/Makefile.in
+ 	* external/w3c_dom/Makefile.in, gcj/Makefile.in, include/Makefile.in
+ 	* testsuite/Makefile.in: Regenerate.
+ 
+ 2005-03-17  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natVMSecurityManager.cc (getClassContext): Add new
+ 	arg: klass.
+ 	Pass klass to _Jv_StackTrace::GetClassContext().
+ 	* java/lang/ClassLoader.java (getParent): Pass class to
+ 	VMSecurityManager.getClassContext()
+ 	(getSystemClassLoader): Likewise.
+ 	* java/lang/Package.java (getPackage): Likewise.
+ 	(getPackages): Likewise.
+ 	* java/lang/SecurityManager.java (getClassContext): Likewise.
+ 	(currentClassLoader): Likewise.
+ 	* java/lang/VMSecurityManager.java: (getClassContext): Likewise.
+ 	(currentClassLoader) Add new arg: caller.
+ 	Pass caller to VMSecurityManager.getClassContext.
+ 
+ 	* stacktrace.cc (GetClassContext): Correct calculation of
+ 	jframe_count.
+ 
+ 	* boehm.cc (_Jv_MarkObj): (_Jv_MarkObj): Mark
+ 	im->source_file_name.
+ 
+ 2005-03-16  Andrew Haley  <aph@redhat.com>
+ 
+ 	* boehm.cc (_Jv_MarkObj): Mark the interpreted method line_table.
+ 
  2005-03-16  Tom Tromey  <tromey@redhat.com>
  
  	* link.cc (ensure_class_linked): Removed #ifdef.
***************
*** 782,787 ****
--- 4209,4231 ----
  	* gnu/java/lang/MainThread.java (run): Load main class using
  	system class loader.
  
+ 2005-03-16  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* testsuite/libjava.jni/jni.exp (gcj_jni_invocation_test_one): Add
+ 	lgcc_s to the libraries to link for Darwin.
+ 
+ 2005-03-15  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* stacktrace.cc (_Jv_StackTrace::UnwindTraceFn): Protect
+ 	interpreter-specific code with #ifdef INTERPRETER.
+ 	(_Jv_StackTrace::getLineNumberForFrame): Likewise.
+ 	(_Jv_StackTrace::FillInFrameInfo): Likewise.
+ 	(_Jv_StackTrace::non_system_trace_fn): Likewise.
+ 	* include/java-stack.h (struct _Jv_InterpFrameInfo): Protect with
+ 	#ifdef INTERPRETER. Also protect declarations that use it.
+ 	* java/lang/Class.h: Move _Jv_StackTrace friend declaration outside
+ 	#ifdef INTERPRETER block.
+ 
  2005-03-15  Jakub Jelinek  <jakub@redhat.com>
  
  	PR libgcj/20251
***************
*** 800,812 ****
  	(close): Ditto.
  	(read(byte[], int, int)): Ditto.
  	(refill): Ditto.
! 	(skip): Call skip on underlying stream when possible. 
  
! 2005-03-14  David Daney  <ddaney@avtrex.com>
  
! 	* configure.host: Don't use -mxgot for MIPS builds.
! 	
! 2005-03-10  Tom Tromey  <tromey@redhat.com>
  
  	* gnu/gcj/tools/gcj_dbtool/Main.java (main): Handle '-p'.
  	(usage): Document '-p'.
--- 4244,4280 ----
  	(close): Ditto.
  	(read(byte[], int, int)): Ditto.
  	(refill): Ditto.
! 	(skip): Call skip on underlying stream when possible.
  
! 2005-03-12  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* stacktrace.cc (GetCallerInfo): Return nothing in case of
! 	SJLJ_EXCEPTIONS is defined.
! 
! 2005-03-12  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	* testsuite/libjava.jacks/jacks.xfail: Add XFAILs for new JSR-201
! 	tests.
! 
! 2005-03-11  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* testsuite/lib/libjava.exp (libjava_init): Use the same target
! 	check for Darwin.
! 	(libjava_arguments): Likewise.
! 
! 	* testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Likewise.
! 	(gcj_jni_test_one): Likewise.
! 	(gcj_jni_invocation_compile_c_to_binary): Likewise.
! 	Add flags to keep the Darwin linker quiet.
! 	(gcj_jni_invocation_test_one): Use the same target check for Darwin.
! 	Add -liconv for Darwin.
! 
! 2005-03-11  Tom Tromey  <tromey@redhat.com>
! 
! 	* include/jvm.h (GCJ_40_BC_ABI_VERSION): New define.
! 	(_Jv_CheckABIVersion): Use it.
! 
! 2005-03-11  Tom Tromey  <tromey@redhat.com>
  
  	* gnu/gcj/tools/gcj_dbtool/Main.java (main): Handle '-p'.
  	(usage): Document '-p'.
***************
*** 819,830 ****
  	* java/lang/natRuntime.cc (insertSystemProperties): Set default
  	system database.
  
  2005-03-10  Chris Burdess  <dog@bluezoo.org>
  
  	* gnu/xml/dom/ls/SAXEventSink.java: Ignore element declarations if
  	not currently parsing the DTD.
  
! 2005-03-10  Andrew Haley  <aph@redhat.com>
  
  	* gnu/java/nio/channels/FileChannelImpl.java (smallTransferFrom):
  	New.
--- 4287,4406 ----
  	* java/lang/natRuntime.cc (insertSystemProperties): Set default
  	system database.
  
+ 2005-03-10  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* exception.cc: Remove stray MethodRef.h include.
+ 	* java/lang/natClass.cc: Likewise.
+ 	* gnu/gcj/runtime/MethodRef.java: Removed.
+ 	* gnu/gcj/runtime/StackTrace.java, gnu/gcj/runtime/natNameFinder.cc,
+ 	gnu/gcj/runtime/natStackTrace.cc: Really removed.
+ 	* java/lang/natRuntime.cc (_load): Remove unsed variable.
+ 	* Makefile.am (ordinary_java_source_files): Remove MethodRef.java.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2005-03-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ordinary_java_source_files): Added MethodRef.java.
+ 
  2005-03-10  Chris Burdess  <dog@bluezoo.org>
  
  	* gnu/xml/dom/ls/SAXEventSink.java: Ignore element declarations if
  	not currently parsing the DTD.
  
! 2005-03-10  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	New Stack Trace infrastructure.
! 	* Makefile.am (libgcj0_convenience_la_SOURCES): Add stacktrace.cc.
! 	(gnu/gcj/runtime/StackTrace.java): Removed.
! 	(ordinary_java_source_files): Remove obsolete files.
! 	(nat_source_files): Remove obsolete files. Add natVMThrowable.cc.
! 	* configure.host (fallback_backtrace_h): Set backtrace header
! 	for mingw and cygwin targets.
! 	* configure.ac: Make symlink for fallback backtrace headers.
! 	* Makefile.in, configure: Rebuilt.
! 	* defineclass.cc (_Jv_ClassReader::read_one_code_attribute):
! 	Read 'LineNumberTable' attribute.
! 	(_Jv_ClassReader::read_one_class_attribute): Read 'SourceFile'
! 	attribute.
! 	(_Jv_ClassReader::handleCodeAttribute): Initialize method line
! 	table fields.
! 	* exception.cc: Remove unused include.
! 	* interpret.cc (DIRECT_THREADED, insn_slot): Moved to java-interp.h.
! 	(SAVE_PC): New macro. Save current PC in the interpreter frame.
! 	(NULLCHECK, NULLARRAYCHECK): Use SAVE_PC.
! 	(_Jv_InterpMethod::compile): Translate bytecode PC values in the line
! 	table to direct threaded instruction values.
! 	(_Jv_StartOfInterpreter, _Jv_EndOfInterpreter): Removed.
! 	(_Jv_InterpMethod::run): No longer member function. All
! 	callers updated. Remove _Unwind calls. Call SAVE_PC whenever a call
! 	is made or where an instruction could throw.
! 	(_Jv_InterpMethod::get_source_line): New. Look up source line numbers
! 	in line_table.
! 	* prims.cc (catch_segv): Construct exception after MAKE_THROW_FRAME.
! 	(catch_fpe): Likewise.
! 	* stacktrace.cc: New file. Stack trace code now here.
! 	* gnu/gcj/runtime/MethodRef.java:
! 	* gnu/gcj/runtime/NameFinder.java: Mostly reimplemented. Now simply
! 	calls addr2line to look up PC addresses in a given binary or shared
! 	library.
! 	* gnu/gcj/runtime/StackTrace.java, gnu/gcj/runtime/natNameFinder.cc,
! 	gnu/gcj/runtime/natStackTrace.cc: Removed.
! 	* gnu/java/lang/MainThread.java (call_main): Add comment warning that
! 	this function name is specially recognised by the stack trace code
! 	and shouldn't be changed.
! 	* include/java-interp.h (DIRECT_THREADED, insn_slot): Moved here.
! 	(struct  _Jv_LineTableEntry, line_table, line_table_len): New.
! 	(_Jv_InterpMethod::run): Update declaration.
! 	(_Jv_StackTrace_): New friend. NameFinder and StackTrace no longer
! 	friends.
! 	(_Jv_InterpFrame): Renamed from _Jv_MethodChain. Add PC field.
! 	* include/java-stack.h: New file. Declarations for stack tracing.
! 	* include/jvm.h (_Jv_Frame_info): Removed.
! 	* java/lang/Class.h: Update friend declarations.
! 	* java/lang/VMClassLoader.java (getSystemClassLoader): Simplify
! 	exception message.
! 	* java/lang/VMThrowable.java (fillInStackTrace): Now native.
! 	(getStackTrace): Now native.
! 	(data): New RawDataManaged field.
! 	* java/lang/natClass.cc: Update includes.
! 	(forName): Use _Jv_StackTrace::GetCallingClass for
! 	calling-classloader check.
! 	(getClassLoader): Likewise.
! 	* java/lang/natRuntime.cc: Update includes.
! 	(_load): Use _Jv_StackTrace::GetFirstNonSystemClassLoader.
! 	* java/lang/natVMSecurityManager.cc: Update includes.
! 	(getClassContext): Use _Jv_StackTrace::GetClassContext.
! 	* java/lang/natVMThrowable.cc: New file. Native methods for
! 	VMThrowable.
! 	* java/lang/reflect/natArray.cc: Update includes.
! 	(newInstance): Use _Jv_StackTrace::GetCallingClass to implement
! 	accessibility check.
! 	* java/lang/reflect/natConstructor.cc: Update includes.
! 	(newInstance): Use _Jv_StackTrace::GetCallingClass to implement
! 	accessibility check.
! 	* java/lang/reflect/natField.cc: Update includes.
! 	(getAddr): Use _Jv_StackTrace::GetCallingClass to implement
! 	accessibility check.
! 	* java/lang/reflect/natMethod.cc: Update includes.
! 	(invoke): Use _Jv_StackTrace::GetCallingClass to implement
! 	accessibility check.
! 	* java/util/natResourceBundle.cc: Update includes.
! 	(getCallingClassLoader): Use _Jv_StackTrace::GetCallingClass.
! 	* java/util/logging/natLogger.cc: Update includes. Use
! 	_Jv_StackTrace::GetCallerInfo to get call-site info.
! 	* sysdep/generic/backtrace.h: Fallback backtrace code. Stub
! 	implementation.
! 	* sysdep/i386/backtrace.h: New. Fallback backtrace code. i386
! 	implementation.
! 
! 2005-03-10  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	* testsuite/libjava.compile/PR20312.java: New file.
! 	* testsuite/libjava.compile/PR20312.xfail: Likewise.
! 	* testsuite/libjava.jacks/jacks.xfail: Remove 9.2-implicit-15.
! 
! 2005-03-09  Andrew Haley  <aph@redhat.com>
  
  	* gnu/java/nio/channels/FileChannelImpl.java (smallTransferFrom):
  	New.
***************
*** 861,908 ****
  	(_Jv_UnregisterInitiatingLoader): Likewise.
  	(_Jv_FindClass): Likewise.
  
  2005-03-09  Tom Tromey  <tromey@redhat.com>
  
  	* java/net/URLClassLoader.java (addURLImpl): Reset 'thisString'.
  	(toString): Synchronize.
  
  2005-03-07  Tom Tromey  <tromey@redhat.com>
  
  	* gnu/gcj/tools/gcj_dbtool/Main.java (main): Recognize '-f'.
  	(usage): Document '-f'.
  
- 2005-02-13  Anthony Green  <green@redhat.com>
- 
- 	* jni/gtk-peer/gtk_jawt.c (classpath_jawt_get_drawable,
- 	classpath_jawt_lock, classpath_jawt_unlock): New functions.
- 	* jawt.c (_Jv_AWTLock, _Jv_AWTUnlock): New functions.
- 	(_Jv_GetDrawingSurface): Set visualID.
- 	(_Jv_FreeDrawingSurfaceInfo): Clear visualID.
- 	(JAWT_GetAWT): Set Lock and Unlock.
- 	* include/jawt_md.h (struct _JAWT_X11DrawingSurfaceInfo): Add visualID.
- 	* include/jawt.h (JAWT_VERSION_1_4, JAWT_LOCK_ERROR,
- 	JAWT_LOCK_CLIP_CHANGED, JAWT_LOCK_BOUNDS_CHANGED,
- 	JAWT_LOCK_SURFACE_CHANGED): New macros.
- 	(struct _JAWT): Add Lock and Unlock.
- 
  2005-03-07  Tom Tromey  <tromey@redhat.com>
  
  	* java/lang/VMCompiler.java (md5Digest): New field.
  	(compileClass): Clone md5Digest instead of looking up a new one.
  
! 2005-03-06  Tom Tromey  <tromey@redhat.com>
  
  	PR java/20215:
  	* include/jvm.h (_Jv_Linker::find_field_helper): Updated.
  	* link.cc (find_field_helper): Added 'type' argument.
  	(find_field): Updated.
  
  2005-03-06  Roger Sayle  <roger@eyesopen.com>
  
  	PR libgcj/20155
  	* Makefile.am (libgcj0_convenience.la): Revert last change.
  	* Makefile.in: Regenerate.
  
  2005-03-05  Roger Sayle  <roger@eyesopen.com>
  	    Alexandre Oliva  <aoliva@redhat.com>
  	    Kelley Cook  <kcook@gcc.gnu.org>
--- 4437,4509 ----
  	(_Jv_UnregisterInitiatingLoader): Likewise.
  	(_Jv_FindClass): Likewise.
  
+ 2005-03-09  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* java/lang/fdlibm.h: Merge an AIX define from GNU Classpath.
+ 
+ 	* java/lang/mprec.h: Remove commented headers. Fix comment to match
+ 	the file in GNU Classpath style.
+ 
  2005-03-09  Tom Tromey  <tromey@redhat.com>
  
  	* java/net/URLClassLoader.java (addURLImpl): Reset 'thisString'.
  	(toString): Synchronize.
  
+ 2005-03-08  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* testsuite/libjava.lang/pr13107_2.xfail: Remove xfail.
+ 	* testsuite/libjava.lang/pr13107_3.xfail: Likewise.
+ 
  2005-03-07  Tom Tromey  <tromey@redhat.com>
  
  	* gnu/gcj/tools/gcj_dbtool/Main.java (main): Recognize '-f'.
  	(usage): Document '-f'.
  
  2005-03-07  Tom Tromey  <tromey@redhat.com>
  
  	* java/lang/VMCompiler.java (md5Digest): New field.
  	(compileClass): Clone md5Digest instead of looking up a new one.
  
! 2005-03-07  Tom Tromey  <tromey@redhat.com>
  
  	PR java/20215:
  	* include/jvm.h (_Jv_Linker::find_field_helper): Updated.
  	* link.cc (find_field_helper): Added 'type' argument.
  	(find_field): Updated.
  
+ 2005-04-07  Scott Gilbertson  <scottg@mantatest.com>
+ 	* gnu/gcj/xlib/natXAnyEvent.cc (loadNext): Added timeout.
+ 	* gnu/awt/xlib/XCanvasPeer.java (setBackground): Removed
+ 	throw UnsupportedOperationException, fixed comments.
+ 	(setFont, setForeground): Fixed comments.
+ 	* gnu/awt/xlib/XEventLoop.java (postNextEvent): Changed
+ 	return type to boolean.
+ 	(getNextEvent): Fixed javadocs.
+ 	* gnu/awt/xlib/XToolkit.java (interrupted): Removed field.
+ 	(nativeQueueEmpty): Removed unused code.
+ 	(iterateNativeQueue): Removed outer loop.
+ 
  2005-03-06  Roger Sayle  <roger@eyesopen.com>
  
  	PR libgcj/20155
  	* Makefile.am (libgcj0_convenience.la): Revert last change.
  	* Makefile.in: Regenerate.
  
+ 2005-03-05  Anthony Green  <green@redhat.com>
+ 
+ 	* jni/gtk-peer/gtk_jawt.c (classpath_jawt_get_drawable,
+ 	classpath_jawt_lock, classpath_jawt_unlock): New functions.
+ 	* jawt.c (_Jv_AWTLock, _Jv_AWTUnlock): New functions.
+ 	(_Jv_GetDrawingSurface): Set visualID.
+ 	(_Jv_FreeDrawingSurfaceInfo): Clear visualID.
+ 	(JAWT_GetAWT): Set Lock and Unlock.
+ 	* include/jawt_md.h (struct _JAWT_X11DrawingSurfaceInfo): Add
+ 	visualID.
+ 	* include/jawt.h (JAWT_VERSION_1_4, JAWT_LOCK_ERROR,
+ 	JAWT_LOCK_CLIP_CHANGED, JAWT_LOCK_BOUNDS_CHANGED,
+ 	JAWT_LOCK_SURFACE_CHANGED): New macros.
+ 	(struct _JAWT): Add Lock and Unlock.
+ 
  2005-03-05  Roger Sayle  <roger@eyesopen.com>
  	    Alexandre Oliva  <aoliva@redhat.com>
  	    Kelley Cook  <kcook@gcc.gnu.org>
***************
*** 914,920 ****
  	(clean-local): Clean up objectlist files.
  	* Makefile.in: Regenerate.
  
! 2005-03-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
  	PR libgcj/20292
  	* testsuite/libjava.jni/jni.exp
--- 4515,4544 ----
  	(clean-local): Clean up objectlist files.
  	* Makefile.in: Regenerate.
  
! 2005-03-05  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* java/lang/dtoa.c (_dtoa_r): Initialize variables ilim, ilim1 and
! 	spec_case. Initialize pointer mlo.
! 
! 	* java/lang/strtod.c (_strtod_r): Initialize pointers bb, bd, ds and
! 	delta.
! 
! 	* java/lang/e_asin.c (__ieee754_asin): Initialize variable t.
! 
! 	* java/lang/e_exp.c (__ieee754_exp): Initialize variables hi, lo
! 	and k.
! 
! 	* java/lang/e_rem_pio2.c (__ieee754_rem_pio2): Initialize
! 	uninitialized variable z.
! 
! 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc (mcastGrp): Ifdef
! 	possible unused variables.
! 
! 	* gnu/java/nio/natPipeImplPosix.cc (init): Remove self.
! 
! 	* jawt.c: Include <stdlib.h> to fix implict declaration of malloc.
! 
! 2005-03-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
  	PR libgcj/20292
  	* testsuite/libjava.jni/jni.exp
***************
*** 922,927 ****
--- 4546,4567 ----
  	flags.
  	(gcj_jni_invocation_test_one): Add -L../.libs to cxx flags.
  
+ 2005-02-23  David Daney  <ddaney@avtrex.com>
+ 
+ 	* configure.host: Don't use -mxgot for MIPS builds.
+ 
+ 2005-02-28  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR bootstrap/17383
+ 	* configure.ac: Call GCC_TOPLEV_SUBDIRS.
+ 	(COMPPATH): Removed.
+ 	(ZIP, GCJH): Replace it with ../$(host_subdir).
+ 	(built_gcc_dir): Add $(host_subdir).
+ 	* configure: Regenerate.
+ 	* Makefile.in, include/Makefile.in, testsuite/Makefile.in,
+ 	gcj/Makefile.in, external/Makefile.in, external/sax/Makefile.in,
+ 	external/w3c_dom/Makefile.in: Regenerate.
+ 
  2005-02-24  David Gilbert  <david.gilbert@object-refinery.com>
  
  	* java/awt/font/TextAttribute.java: changed names to lower case;
***************
*** 1109,1115 ****
  
  	Merge serialization from GNU Classpath.
  	* gcj/method.h: Add missing #includes.
! 	* java/io/ObjectInputStream.java (readClassDescriptor): Check for 
  	primitive class IDs on the stream here...
  	(resolveClass): ...not here.
  	* java/io/ObjectStreamField.java: Use VMObjectStream class calls to set
--- 4749,4755 ----
  
  	Merge serialization from GNU Classpath.
  	* gcj/method.h: Add missing #includes.
! 	* java/io/ObjectInputStream.java (readClassDescriptor): Check for
  	primitive class IDs on the stream here...
  	(resolveClass): ...not here.
  	* java/io/ObjectStreamField.java: Use VMObjectStream class calls to set
***************
*** 1140,1146 ****
  	# Fixes bug #11957
  	* java/io/ObjectInputStream.java (resolveClass): Don't check "void"
  	twice.
! 	
  2005-02-21  Mark Wielaard  <mark@klomp.org>
  
  	Fixes bug #11618.
--- 4780,4786 ----
  	# Fixes bug #11957
  	* java/io/ObjectInputStream.java (resolveClass): Don't check "void"
  	twice.
! 
  2005-02-21  Mark Wielaard  <mark@klomp.org>
  
  	Fixes bug #11618.
***************
*** 1182,1188 ****
  
  	* java/io/ObjectStreamClass.java
  	(firstNonSerializableParent): Removed.
! 	(firstNonSerializableParentConstructor): Added.	
  
  2005-02-21  Mark Wielaard  <mark@klomp.org>
  
--- 4822,4828 ----
  
  	* java/io/ObjectStreamClass.java
  	(firstNonSerializableParent): Removed.
! 	(firstNonSerializableParentConstructor): Added.
  
  2005-02-21  Mark Wielaard  <mark@klomp.org>
  
***************
*** 1223,1237 ****
  
  2005-02-21  Sven de Marothy  <sven@physto.se>
  
! 	* java/util/Calendar.java 
  	(clear): Dates should clear to local time.
! 	* java/util/GregorianCalendar.java      
  	(computeTime): Fix priority problem with DAY_OF_WEEK,
  	Handle non-sunday-startig weeks and minimumDaysInFirstWeek.
  
  2005-02-21  Sven de Marothy  <sven@physto.se>
  
! 	* java/util/Calendar.java 
  	(Calendar): Constructor should clear fields.
  
  2005-02-21  Sven de Marothy  <sven@physto.se>
--- 4863,4877 ----
  
  2005-02-21  Sven de Marothy  <sven@physto.se>
  
! 	* java/util/Calendar.java
  	(clear): Dates should clear to local time.
! 	* java/util/GregorianCalendar.java
  	(computeTime): Fix priority problem with DAY_OF_WEEK,
  	Handle non-sunday-startig weeks and minimumDaysInFirstWeek.
  
  2005-02-21  Sven de Marothy  <sven@physto.se>
  
! 	* java/util/Calendar.java
  	(Calendar): Constructor should clear fields.
  
  2005-02-21  Sven de Marothy  <sven@physto.se>
***************
*** 1287,1300 ****
  
  2005-02-21  Sven de Marothy <sven@physto.se>
  
!         * java/util/GregorianCalendar.java
!         (GregorianCalendar): Update fields in the constructor
  
  2005-02-21  Noa Resare  <noa@resare.com>
  
!         * java/util/Calendar.java (explicitDSTOffset): New instance field.
!         (set(int,int)): Set and use new field.
!         (set(int,int,int)): Check new field.
  
  2005-02-21  Noa Resare  <address@hidden>
  
--- 4927,4940 ----
  
  2005-02-21  Sven de Marothy <sven@physto.se>
  
! 	* java/util/GregorianCalendar.java
! 	(GregorianCalendar): Update fields in the constructor
  
  2005-02-21  Noa Resare  <noa@resare.com>
  
! 	* java/util/Calendar.java (explicitDSTOffset): New instance field.
! 	(set(int,int)): Set and use new field.
! 	(set(int,int,int)): Check new field.
  
  2005-02-21  Noa Resare  <address@hidden>
  
***************
*** 1626,1632 ****
  
  2005-02-18  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* java/util/LinkedHashMap (addEntry): Call remove() with key argument, 
  	not the HashEntry. Reported by Jean-Marie White.
  
  2005-02-18  Tom Tromey  <tromey@redhat.com>
--- 5266,5272 ----
  
  2005-02-18  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* java/util/LinkedHashMap (addEntry): Call remove() with key argument,
  	not the HashEntry. Reported by Jean-Marie White.
  
  2005-02-18  Tom Tromey  <tromey@redhat.com>
***************
*** 2610,2629 ****
  	(minimumLayoutSize): Likewise.
  	(layoutContainer): Don't try to layout when there is no view.
  
- 2005-02-15  Anthony Green  <green@redhat.com>
- 
- 	* jni/gtk-peer/gtk_jawt.c (classpath_jawt_get_drawable,
- 	classpath_jawt_lock, classpath_jawt_unlock): New functions.
- 	* jawt.c (_Jv_JAWT_Lock, _Jv_JAWT_Unlock): New functions.
- 	(_Jv_GetDrawingSurface): Set visualID.
- 	(_Jv_FreeDrawingSurfaceInfo): Clear visualID.
- 	(JAWT_GetAWT): Set Lock and Unlock.
- 	* include/jawt_md.h (struct _JAWT_X11DrawingSurfaceInfo): Add visualID.
- 	* include/jawt.h (JAWT_VERSION_1_4, JAWT_LOCK_ERROR,
- 	JAWT_LOCK_CLIP_CHANGED, JAWT_LOCK_BOUNDS_CHANGED,
- 	JAWT_LOCK_SURFACE_CHANGED): New macros.
- 	(struct _JAWT): Add Lock and Unlock.
- 
  2005-02-15  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
  	* jawt.c: New file.
--- 6250,6255 ----
***************
*** 2762,2780 ****
  	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
  	(finalize): Call finish from here.
  	(produce): Not from here.
! 	* Makefile.am (gtk_c_source_files): 
  	Remove jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c.
  	* Makefile.in: Regenerate.
  	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
  	(cairoSetFont):
  	(cairoDrawGdkTextLayout):
! 	(cairoDrawString): 
  	(getPeerTextMetrics):
  	(getPeerFontMetrics): Remove.
  	(setFont): Don't call cairoSetFont.
  	(cairoDrawGlyphVector): Accept font peer argument.
  	(drawGlyphVector): Pass font peer to cairoDrawGlyphVector.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c	
  	(ensure_metrics_cairo):
  	(gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont):
  	(gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawString):
--- 6388,6406 ----
  	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
  	(finalize): Call finish from here.
  	(produce): Not from here.
! 	* Makefile.am (gtk_c_source_files):
  	Remove jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c.
  	* Makefile.in: Regenerate.
  	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
  	(cairoSetFont):
  	(cairoDrawGdkTextLayout):
! 	(cairoDrawString):
  	(getPeerTextMetrics):
  	(getPeerFontMetrics): Remove.
  	(setFont): Don't call cairoSetFont.
  	(cairoDrawGlyphVector): Accept font peer argument.
  	(drawGlyphVector): Pass font peer to cairoDrawGlyphVector.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
  	(ensure_metrics_cairo):
  	(gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont):
  	(gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawString):
***************
*** 2803,2811 ****
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Remove.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
  	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector):
! 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics): 
! 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getTextMetrics): New methods.	
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: Remove.	
  	* gnu/java/awt/peer/gtk/GdkFontPeer.java
  	(getGlyphVector):
  	(getFontMetrics):
--- 6429,6437 ----
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Remove.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
  	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector):
! 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics):
! 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getTextMetrics): New methods.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: Remove.
  	* gnu/java/awt/peer/gtk/GdkFontPeer.java
  	(getGlyphVector):
  	(getFontMetrics):
***************
*** 3386,3394 ****
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
  	Rewrite uses of extern variable to be function calls.
! 	* jni/gtk-peer/gtkpeer.h (gdk_env): Change declaration to 
  	function, from extern variable.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c 
  	(gdk_env): Remove variable, add new function.
  	(java_vm): Add new variable.
  	(Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit): Initialize
--- 7012,7020 ----
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
  	Rewrite uses of extern variable to be function calls.
! 	* jni/gtk-peer/gtkpeer.h (gdk_env): Change declaration to
  	function, from extern variable.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
  	(gdk_env): Remove variable, add new function.
  	(java_vm): Add new variable.
  	(Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit): Initialize
***************
*** 3411,3421 ****
  	* gnu/gcj/xlib/natXAnyEvent.cc: Likewise.
  	* gnu/java/awt/ClasspathToolkit.java: Likewise.
  	* gnu/java/awt/peer/gtk/GtkToolkit.java: Likewise.
! 	* java/awt/EventQueue.java (getNextEvent): 
  	Adjust event loop to switch to native mode after 100ms.
  	* javax/swing/Timer.java (drainEvents): Reuse Runnable.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose): 
  	Wake up event thread.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
  	(Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue):
--- 7037,7047 ----
  	* gnu/gcj/xlib/natXAnyEvent.cc: Likewise.
  	* gnu/java/awt/ClasspathToolkit.java: Likewise.
  	* gnu/java/awt/peer/gtk/GtkToolkit.java: Likewise.
! 	* java/awt/EventQueue.java (getNextEvent):
  	Adjust event loop to switch to native mode after 100ms.
  	* javax/swing/Timer.java (drainEvents): Reuse Runnable.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose):
  	Wake up event thread.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
  	(Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue):
***************
*** 3548,3570 ****
  
  2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* gnu/java/awt/ClasspathToolkit.java 
  	(registerImageIOSpis): New method.
! 	* gnu/java/awt/image/ImageDecoder.java 
  	(imageDecoder): New constructor using InputStream
  	(startProduction): Handle existing InputStream.
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java 
  	(findSimpleIntegerArray): Make public and static.
  	(updateBufferedImage): Set each pixel, in a loop.
! 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: 
  	Implement ImageIO SPI classes.
  	(createBufferedImage): Rewrite in terms of SPI classes.
  	* gnu/java/awt/peer/gtk/GtkToolkit.java
  	(registerImageIOSpis): New method.
! 	* java/lang/reflect/natMethod.cc 
! 	(_Jv_CallAnyMethodA): Borrow a patch from aph, applied to trunk, 
  	which lets JNI call interface methods properly.
! 	* javax/imageio/ImageIO.java 
  	(WriterFormatFilter.filter): Fix copy-and-paste typos.
  	(WriterMIMETypeFilter.filter): Likewise.
  	(ImageReaderIterator): Pass extension argument through to SPI.
--- 7174,7196 ----
  
  2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* gnu/java/awt/ClasspathToolkit.java
  	(registerImageIOSpis): New method.
! 	* gnu/java/awt/image/ImageDecoder.java
  	(imageDecoder): New constructor using InputStream
  	(startProduction): Handle existing InputStream.
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
  	(findSimpleIntegerArray): Make public and static.
  	(updateBufferedImage): Set each pixel, in a loop.
! 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
  	Implement ImageIO SPI classes.
  	(createBufferedImage): Rewrite in terms of SPI classes.
  	* gnu/java/awt/peer/gtk/GtkToolkit.java
  	(registerImageIOSpis): New method.
! 	* java/lang/reflect/natMethod.cc
! 	(_Jv_CallAnyMethodA): Borrow a patch from aph, applied to trunk,
  	which lets JNI call interface methods properly.
! 	* javax/imageio/ImageIO.java
  	(WriterFormatFilter.filter): Fix copy-and-paste typos.
  	(WriterMIMETypeFilter.filter): Likewise.
  	(ImageReaderIterator): Pass extension argument through to SPI.
***************
*** 3578,3584 ****
  	(getImageWritersBySuffix): Likewise.
  	(read): Implement.
  	(write): Implement.
! 	* javax/imageio/ImageReader.java 
  	(progressListeners): Initialize.
  	(setInput): Implement.
  	* javax/imageio/ImageWriter.java
--- 7204,7210 ----
  	(getImageWritersBySuffix): Likewise.
  	(read): Implement.
  	(write): Implement.
! 	* javax/imageio/ImageReader.java
  	(progressListeners): Initialize.
  	(setInput): Implement.
  	* javax/imageio/ImageWriter.java
***************
*** 3608,3629 ****
  	(rowAtPoint): Likewise.
  	(countSelections): Fixed few small count errors.
  	(getSelections): Likewise.
! 	(setSelectionMode): Set selection mode for column 
  	selection model in addition to row selection model.
  	* javax/swing/plaf/basic/BasicTableUI.java:
  	(getRowForPoint): Removed. Replaced by
  	JTable.rowAtPoint().
! 	(getColForPoint): Removed. Replaced by 
  	JTable.columnAtPoint().
! 	(updateSelection): Updated to call JTable.columnAtPoint 
  	and JTable.rowAtPoint.
  	* javax/swing/table/DefaultTableColumnModel.java:
  	(getSelectedColumns): Implemented.
! 	(getSelectedColumnCount): Implemented.		
  
  2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* Makefile.am 
  	(jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c)
  	(gnu/java/awt/peer/gtk/GtkMainThread.java) : Remove.
  	* Makefile.in: Regenerate.
--- 7234,7255 ----
  	(rowAtPoint): Likewise.
  	(countSelections): Fixed few small count errors.
  	(getSelections): Likewise.
! 	(setSelectionMode): Set selection mode for column
  	selection model in addition to row selection model.
  	* javax/swing/plaf/basic/BasicTableUI.java:
  	(getRowForPoint): Removed. Replaced by
  	JTable.rowAtPoint().
! 	(getColForPoint): Removed. Replaced by
  	JTable.columnAtPoint().
! 	(updateSelection): Updated to call JTable.columnAtPoint
  	and JTable.rowAtPoint.
  	* javax/swing/table/DefaultTableColumnModel.java:
  	(getSelectedColumns): Implemented.
! 	(getSelectedColumnCount): Implemented.
  
  2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* Makefile.am
  	(jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c)
  	(gnu/java/awt/peer/gtk/GtkMainThread.java) : Remove.
  	* Makefile.in: Regenerate.
***************
*** 3632,3638 ****
  	* gnu/awt/xlib/XToolkit.java: Likewise.
  	* gnu/gcj/xlib/XAnyEvent.java: Likewise.
  	* gnu/gcj/xlib/natXAnyEvent.cc: Likewise.
! 	* gnu/java/awt/ClasspathToolkit.java 
  	(nativeQueueEmpty)
  	(wakeNativeQueue)
  	(iterateNativeQueue): New methods.
--- 7258,7264 ----
  	* gnu/awt/xlib/XToolkit.java: Likewise.
  	* gnu/gcj/xlib/XAnyEvent.java: Likewise.
  	* gnu/gcj/xlib/natXAnyEvent.cc: Likewise.
! 	* gnu/java/awt/ClasspathToolkit.java
  	(nativeQueueEmpty)
  	(wakeNativeQueue)
  	(iterateNativeQueue): New methods.
***************
*** 3646,3652 ****
  	(wakeNativeQueue)
  	(iterateNativeQueue): New methods.
  	* java/awt/Component.java (removeNotify): Remove race.
! 	* java/awt/EventDispatchThread.java 
  	(EventDispatchThread): Don't start on construction.
  	(run): Remove isInterrupted check.
  	* java/awt/EventQueue.java (shutdown): New flag.
--- 7272,7278 ----
  	(wakeNativeQueue)
  	(iterateNativeQueue): New methods.
  	* java/awt/Component.java (removeNotify): Remove race.
! 	* java/awt/EventDispatchThread.java
  	(EventDispatchThread): Don't start on construction.
  	(run): Remove isInterrupted check.
  	* java/awt/EventQueue.java (shutdown): New flag.
***************
*** 3655,3661 ****
  	(getNextEvent): Restructure to use ClasspathToolkit.
  	(postEvent): Activate new thread on posting, wake thread on
  	post of possible shutdown condition event.
! 	* java/awt/Frame.java 
  	(Frame): Call noteFrame in all constructors.
  	(fireDummyEvent): New helper method.
  	(addNotify): Fire a dummy event to wake up queue.
--- 7281,7287 ----
  	(getNextEvent): Restructure to use ClasspathToolkit.
  	(postEvent): Activate new thread on posting, wake thread on
  	post of possible shutdown condition event.
! 	* java/awt/Frame.java
  	(Frame): Call noteFrame in all constructors.
  	(fireDummyEvent): New helper method.
  	(addNotify): Fire a dummy event to wake up queue.
***************
*** 3663,3669 ****
  	(noteFrame): New method.
  	(weakFrames): New static field.
  	(getFrames): Implement.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: 
  	Remove.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c:
  	Move everything from GtkMainThread into this file
--- 7289,7295 ----
  	(noteFrame): New method.
  	(weakFrames): New static field.
  	(getFrames): Implement.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c:
  	Remove.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c:
  	Move everything from GtkMainThread into this file
***************
*** 3845,3851 ****
  	not in dataModel.
  	(removeColumn): Implemented.
  	(moveColumm): Likewise.
! 	(setRowHeight): throw IllegalArgumentException if height is 
  	less then 1.
  	* javax/swing/table/DefaultTableColumnModel.java: Add javadocs.
  	(DefaultTableColumnModel):Add call to createSelectionModel().
--- 7471,7477 ----
  	not in dataModel.
  	(removeColumn): Implemented.
  	(moveColumm): Likewise.
! 	(setRowHeight): throw IllegalArgumentException if height is
  	less then 1.
  	* javax/swing/table/DefaultTableColumnModel.java: Add javadocs.
  	(DefaultTableColumnModel):Add call to createSelectionModel().
***************
*** 3861,3868 ****
  	(fireColumnMarginChanged): Likewise.
  	(getListeners): Changed parameter name.
  	(propertyChange): Implemented.
! 	(valueChanged): Changed parameter name. 
! 	(createSelectionModel): Implemented.	
  
  2005-02-15  Michael Koch  <konqueror@gmx.de>
  
--- 7487,7494 ----
  	(fireColumnMarginChanged): Likewise.
  	(getListeners): Changed parameter name.
  	(propertyChange): Implemented.
! 	(valueChanged): Changed parameter name.
! 	(createSelectionModel): Implemented.
  
  2005-02-15  Michael Koch  <konqueror@gmx.de>
  
***************
*** 4279,4285 ****
  	(setRowSelectionInterval): Likewise.
  	(removeColumnSelectionInterval): Likewise.
  	(removeRowSelectionInterval): Likewise.
!  	(isColumnSelected): Likewise.
  	(isRowSelected): Likewise.
  	(isCellSelected): Likewise.
  	(selectAll): Likewise.
--- 7905,7911 ----
  	(setRowSelectionInterval): Likewise.
  	(removeColumnSelectionInterval): Likewise.
  	(removeRowSelectionInterval): Likewise.
! 	(isColumnSelected): Likewise.
  	(isRowSelected): Likewise.
  	(isCellSelected): Likewise.
  	(selectAll): Likewise.
***************
*** 4427,4440 ****
  
  2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: 
  	Rework painting into BufferedImages
  	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
  	Construct BufferedImage with alpha only when alpha is
  	present in colormodel.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
  	Rework painting into client-side jint arrays.
! 	* jni/gtk-peer/gtkcairopeer.h: 
  	Likewise.
  
  2005-02-15  Michael Koch  <konqueror@gmx.de>
--- 8053,8066 ----
  
  2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
  	Rework painting into BufferedImages
  	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
  	Construct BufferedImage with alpha only when alpha is
  	present in colormodel.
  	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
  	Rework painting into client-side jint arrays.
! 	* jni/gtk-peer/gtkcairopeer.h:
  	Likewise.
  
  2005-02-15  Michael Koch  <konqueror@gmx.de>
***************
*** 4522,4528 ****
  
  	* java/awt/image/IndexColorModel.java:
  	Add FIXME with respect to alpha handling.
! 	(getAlpha): Default to returning opaque pixels. 
  	* java/awt/image/MultiPixelPackedSampleModel.java
  	(MultiPixelPackedSampleModel): Corrected parameters, order of
  	bit shifts and masks, stride length off by one.
--- 8148,8154 ----
  
  	* java/awt/image/IndexColorModel.java:
  	Add FIXME with respect to alpha handling.
! 	(getAlpha): Default to returning opaque pixels.
  	* java/awt/image/MultiPixelPackedSampleModel.java
  	(MultiPixelPackedSampleModel): Corrected parameters, order of
  	bit shifts and masks, stride length off by one.
***************
*** 4584,4590 ****
  	implementation class names to conform to Classpath guidelines.  Make
  	DomLSException use JDK 1.4+ exception chaining.
  	* gnu/xml/util/SAXNullTransformerFactory.java,
! 	gnu/xml/xpath/Predicate.java: Use constants relative to 
  	declaring class or interface.
  
  2005-02-16  Andrew Haley  <aph@redhat.com>
--- 8210,8216 ----
  	implementation class names to conform to Classpath guidelines.  Make
  	DomLSException use JDK 1.4+ exception chaining.
  	* gnu/xml/util/SAXNullTransformerFactory.java,
! 	gnu/xml/xpath/Predicate.java: Use constants relative to
  	declaring class or interface.
  
  2005-02-16  Andrew Haley  <aph@redhat.com>
***************
*** 4603,4616 ****
  	(addStub): New method.
  	(deleteStub): New method.
  	(toStub): Rewrite.
! 	
  	* java/lang/VMCompiler.java (loadSharedLibrary): Pass
  	true to findHelper (tryParents).
  	* gnu/gcj/runtime/SharedLibLoader.java (SharedLibLoader):
  	Likewise.
  	* java/net/URLClassLoader.java (SoURLLoader): Likewise.
  	* gnu/gcj/runtime/SharedLibHelper.java (SharedLibHelper): Pass
! 	ProtectionDomain.  
  	If tryParents is false, don't scan parent class loaders.
  
  	* java/security/Permissions.java (PermissionsHash.implies):
--- 8229,8242 ----
  	(addStub): New method.
  	(deleteStub): New method.
  	(toStub): Rewrite.
! 
  	* java/lang/VMCompiler.java (loadSharedLibrary): Pass
  	true to findHelper (tryParents).
  	* gnu/gcj/runtime/SharedLibLoader.java (SharedLibLoader):
  	Likewise.
  	* java/net/URLClassLoader.java (SoURLLoader): Likewise.
  	* gnu/gcj/runtime/SharedLibHelper.java (SharedLibHelper): Pass
! 	ProtectionDomain.
  	If tryParents is false, don't scan parent class loaders.
  
  	* java/security/Permissions.java (PermissionsHash.implies):
***************
*** 4646,4652 ****
  
  2005-02-15  David Daney <ddaney@avtrex.com>
  	    Bryce McKinlay  <mckinlay@redhat.com>
! 	    
  	* prims.cc (_Jv_CreateJavaVM): Add comment about initialization order.
  	* posix-threads.cc (_Jv_InitThreads): Call block_sigchld() here to
  	ensure that GC threads inherit the new signal mask.
--- 8272,8278 ----
  
  2005-02-15  David Daney <ddaney@avtrex.com>
  	    Bryce McKinlay  <mckinlay@redhat.com>
! 
  	* prims.cc (_Jv_CreateJavaVM): Add comment about initialization order.
  	* posix-threads.cc (_Jv_InitThreads): Call block_sigchld() here to
  	ensure that GC threads inherit the new signal mask.
***************
*** 4682,4688 ****
  	(FileResource.toString): Removed method.
  
  2005-02-15  Mark Wielaard  <mark@klomp.org>
!  
  	* javax/net/ssl/SSLContext.java (getInstance): Add exception message
  	and/or cause before throwing.
  
--- 8308,8314 ----
  	(FileResource.toString): Removed method.
  
  2005-02-15  Mark Wielaard  <mark@klomp.org>
! 
  	* javax/net/ssl/SSLContext.java (getInstance): Add exception message
  	and/or cause before throwing.
  
***************
*** 4768,4774 ****
  
  2005-02-10  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* testsuite/libjava.mauve/xfails: Updated to reflect current state 
  	of mauve and libjava.
  
  2005-02-09  Tom Tromey  <tromey@redhat.com>
--- 8394,8400 ----
  
  2005-02-10  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	* testsuite/libjava.mauve/xfails: Updated to reflect current state
  	of mauve and libjava.
  
  2005-02-09  Tom Tromey  <tromey@redhat.com>
***************
*** 4814,4834 ****
  
  2005-02-07  Mark Wielaard  <mark@klomp.org>
  
!         Reported by Timo Lindfors <timo.lindfors@iki.fi>
!         java/util/regex/Matcher.java (lookingAt): Set position when match
!         found.
!         (matches): Implemented through lookingAt().
  
  2005-02-07  Mark Wielaard  <mark@klomp.org>
  
!         Fix suggested by Timo Lindfors <timo.lindfors@iki.fi>
!         * java/util/regex/Pattern.java (split(CharSequence,int)):
!         Fix while empties > 0 loops.
  
  2005-02-07  Robert Schuster  <thebohemian@gmx.net>
  
  	* gnu/java/nio/charset/ISO_8859_1.java,
! 	gnu/java/nio/charset/US_ASCII.java, 
  	gnu/java/nio/charset/UTF_16.java,
  	gnu/java/nio/charset/UTF_16_LE.java,
  	gnu/java/nio/charset/UTF_16_BE.java,
--- 8440,8460 ----
  
  2005-02-07  Mark Wielaard  <mark@klomp.org>
  
! 	Reported by Timo Lindfors <timo.lindfors@iki.fi>
! 	java/util/regex/Matcher.java (lookingAt): Set position when match
! 	found.
! 	(matches): Implemented through lookingAt().
  
  2005-02-07  Mark Wielaard  <mark@klomp.org>
  
! 	Fix suggested by Timo Lindfors <timo.lindfors@iki.fi>
! 	* java/util/regex/Pattern.java (split(CharSequence,int)):
! 	Fix while empties > 0 loops.
  
  2005-02-07  Robert Schuster  <thebohemian@gmx.net>
  
  	* gnu/java/nio/charset/ISO_8859_1.java,
! 	gnu/java/nio/charset/US_ASCII.java,
  	gnu/java/nio/charset/UTF_16.java,
  	gnu/java/nio/charset/UTF_16_LE.java,
  	gnu/java/nio/charset/UTF_16_BE.java,
***************
*** 4838,4844 ****
  	 "http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html"
  	 and "http://oss.software.ibm.com/cgi-bin/icu/convexp?s=ALL".
  	* gnu/java/nio/charset/Provider.java: Made charset lookup
! 	 case-insensitive which fixes bug #11740. 
  
  2005-02-07  Tom Tromey  <tromey@redhat.com>
  
--- 8464,8470 ----
  	 "http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html"
  	 and "http://oss.software.ibm.com/cgi-bin/icu/convexp?s=ALL".
  	* gnu/java/nio/charset/Provider.java: Made charset lookup
! 	 case-insensitive which fixes bug #11740.
  
  2005-02-07  Tom Tromey  <tromey@redhat.com>
  
***************
*** 4887,4893 ****
  	(static): Add reader and writer SPIs.
  	(IIORegistry): Call ClasspathToolkit.registerImageIOSpis.
  
! 2004-02-06  Michael Koch  <konqueror@gmx.de>
  
  	* javax/imageio/metadata/IIOInvalidTreeException.java
  	(IIOInvalidTreeException): Reformatted.
--- 8513,8519 ----
  	(static): Add reader and writer SPIs.
  	(IIORegistry): Call ClasspathToolkit.registerImageIOSpis.
  
! 2005-02-06  Michael Koch  <konqueror@gmx.de>
  
  	* javax/imageio/metadata/IIOInvalidTreeException.java
  	(IIOInvalidTreeException): Reformatted.
***************
*** 4896,4907 ****
  	* javax/imageio/stream/MemoryCacheImageInputStream.java:
  	Reworked import statements.
  
! 2004-02-06  Michael Koch  <konqueror@gmx.de>
  
  	* javax/imageio/stream/FileImageOutputStream.java:
  	Implemented.
  
! 2004-02-06  Michael Koch  <konqueror@gmx.de>
  
  	* javax/imageio/stream/FileCacheImageInputStream.java,
  	javax/imageio/stream/FileCacheImageOutputStream.java,
--- 8522,8533 ----
  	* javax/imageio/stream/MemoryCacheImageInputStream.java:
  	Reworked import statements.
  
! 2005-02-06  Michael Koch  <konqueror@gmx.de>
  
  	* javax/imageio/stream/FileImageOutputStream.java:
  	Implemented.
  
! 2005-02-06  Michael Koch  <konqueror@gmx.de>
  
  	* javax/imageio/stream/FileCacheImageInputStream.java,
  	javax/imageio/stream/FileCacheImageOutputStream.java,
***************
*** 5292,5298 ****
  	SO_REUSEADDR support.
  	(getOption): Support SO_REUSEADDR.
  
! 2004-01-28  Jeroen Frijters  <jeroen@frijters.net>
  
  	PR libgcj/19649
  	* java/util/Date.java
--- 8918,8924 ----
  	SO_REUSEADDR support.
  	(getOption): Support SO_REUSEADDR.
  
! 2005-01-28  Jeroen Frijters  <jeroen@frijters.net>
  
  	PR libgcj/19649
  	* java/util/Date.java
***************
*** 5565,21515 ****
  2005-01-01  Bryce McKinlay  <mckinlay@redhat.com>
  
  	* include/boehm-gc.h: Include gc_ext_config.h, not gc_config.h.
- 
- 2004-12-31  Andreas Jaeger  <aj@suse.de>
- 
- 	* testsuite/lib/libjava.exp (libjava_find_gij): Handle multilibs.
- 
- 2004-12-20  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/lang/natClassLoader.cc (_Jv_RegisterClassHookDefault):
- 	Re-enable duplicate class registration error.
- 
- 	* testsuite/libjava.jar/jar.exp (gcj_jar_interpret): Updated.
- 	* testsuite/libjava.verify/verify.exp (gcj_verify_run): Updated.
- 	* testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Updated.
- 	* testsuite/lib/libjava.exp (libjava_find_spec): Don't use
- 	get_multilibs.
- 	(libjava_find_gij): Likewise.  Changed return result if gij not
- 	found.
- 	(test_libjava_from_javac): Updated.
- 
- 	PR java/15001
- 	* testsuite/libjava.jni/iface.c: New file.
- 	* testsuite/libjava.jni/iface.out: New file.
- 	* testsuite/libjava.jni/iface.java: New file.
- 
- 2004-12-19  Kelley Cook  <kcook@gcc.gnu.org>
- 
- 	* include/config.h.in: Regenerate.
- 
- 2004-12-10  Andrew Haley  <aph@redhat.com>
- 
- 	PR java/15001
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Look up
- 	abstract methods by name.
- 
- 2004-12-08  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	* java/util/IdentityHashMap.java (put): Replace mistaken use
- 	of "<<" by "*".
- 
- 2004-12-06  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/14853:
- 	* testsuite/libjava.compile/PR14853.java: New file.
- 	* testsuite/libjava.compile/PR14853.xfail: New file.
- 
- 2004-12-03  Richard Sandiford  <rsandifo@redhat.com>
- 
- 	PR libgcj/7305
- 	* configure.ac: Use TL_AC_GXX_INCLUDE_DIR.
- 	* Makefile.am (install-data-local): Install headers into
- 	$(gxx_include_dir) rather than $(includedir).
- 	(AM_MAKEFLAGS): Pass down gxx_include_dir.
- 	* gcj/Makefile.am (gcjdir): Set to $(gxx_include_dir)/gcj.
- 	* include/Makefile.am (tool_include__HEADERS): Define this...
- 	(include_HEADERS): ...instead of this.
- 	* configure, aclocal.m4, Makefile.in, gcj/Makefile.in: Regenerate.
- 	* include/Makefile.in, testsuite/Makefile.in: Regenerate.
- 
- 2004-12-02  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/16675:
- 	* testsuite/libjava.compile/PR16675.java: New file.
- 
- 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
- 
- 	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.
- 	* configure, aclocal.m4, Makefile.in, gcj/Makefile.in: Regenerate.
- 	* include/Makefile.in, testsuite/Makefile.in: Regenerate.
- 
- 2004-12-01  Tom Tromey  <tromey@redhat.com>
- 
- 	* include/no-threads.h (_Jv_ThreadDestroyData): Removed argument
- 	name.
- 	(_Jv_ThreadRegister): Likewise.
- 	(_Jv_MutexCheckMonitor): Likewise.
- 
- 	* link.cc: Include limits.h.
- 
- 2004-12-01  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/18699
- 	* testsuite/libjava.lang/PR18699.java,
- 	testsuite/libjava.lang/PR18699.out: New test.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java (drawImage variants):
- 	Update image observer.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage):
- 	Start image production.
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Protect
- 	against negative menu bar widths.
- 	(setBounds): Likewise.
- 	(postConfigureEvent): Likewise.
- 	* gnu/java/awt/peer/gtk/GtkImage.java (imageComplete): Don't
- 	remove consumer unless only a single frame has completed.
- 	* gnu/java/awt/peer/gtk/GtkImagePainter.java (GtkImagePainter):
- 	Add observer parameter.
- 	(setPixels): Update image observer.
- 	(imageComplete): Likewise.
- 	* java/applet/Applet.java (width): New field.
- 	(height): Likewise.
- 	(setStub): Set size if width or height field has been set.
- 	(resize): If stub is null save width and height values.
- 	* java/awt/Component.java (reshape): Protect against null
- 	parent.
- 	* java/awt/image/MemoryImageSource.java
- 	(MemoryImageSource(int,int,ColorModel,byte[],int,int)):
- 	Document.
- 	(MemoryImageSource(int,int,ColorModel,int[],int,int)):
- 	Likewise.
- 	(MemoryImageSource(int,int,ColorModel,byte[],int,int,Hashtable)):
- 	Reference pixel array directly, rather than creating a local
- 	copy.
- 	(MemoryImageSource(int,int,ColorModel,int[],int,int,Hashtable)):
- 	Likewise.
- 	(newPixels(int,int,int,int)): Fix for loop and array copy
- 	bounds.
- 	(newPixels(int,int,int,int,boolean)): Likewise.
- 	(startProduction): If animated call imageComplete with
- 	SINGLEFRAME.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Uncomment
- 	gdk_flush lines.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
- 	(drawPixels): Return if g is null or g->drawable is not a gdk
- 	drawable.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/DefaultSingleSelectionModel.java,
- 	javax/swing/JPasswordField.java,
- 	javax/swing/tree/AbstractLayoutCache.java:
- 	Reformatted and javadocs cleaned up.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/Component.java:
- 	Fixed argument names to match javadocs.
- 	(setFont): Rewritten set property first and then fire event.
- 	(setLocale): Likewise.
- 	* javax/swing/text/JTextComponent.java
- 	(setEditable): Likewise.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Button.java
- 	(AccessibleAWTButton.getAccessibleActionDescription): Explain the
- 	source of 'click'.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Checkbox.java: Remove stub comments.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Button.java
- 	(AccessibleAWTButton.getAccessibleActionDescription): Return
- 	'click'.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/CardLayout.java:
- 	Made some constants static.
- 	(serialVersionUID): Made private.
- 	(addLayoutComponent): Simplified code.
- 	* java/awt/event/InputEvent.java
- 	(getModifiersEx): Added missing @param tag.
- 	* java/awt/image/RGBImageFilter.java
- 	(filterRGBPixels): Reformatted, removed wrong @param tag.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/FieldView.java,
- 	javax/swing/text/JTextComponent.java:
- 	Removed debug code.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/BorderFactory.java
- 	(BorderFactory): Added private constructor.
- 	* javax/swing/SwingUtilities.java
- 	(SwingUtilities): Likewise.
- 	(computeStringWidth): New method.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/color/ICC_Profile.java
- 	(icSigNamedColorTag): Removed.
- 	* java/awt/datatransfer/DataFlavor.java
- 	(isMimeTypeEqual): Made final.
- 	* java/awt/image/AffineTransformOp.java:
- 	Reworked javadocs.
- 	(TYPE_BICUBIC): Added @since tag.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Checkbox.java (AccessibleAWTCheckBox): Remove todo
- 	comments.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Checkbox.java (itemStateChanged): Implement function.
- 	(getAccessibleContext): Add AccessibleAWTCheckBox to item listeners.
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	* java/awt/Polygon.java (contains): Reimplemented.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/print/PrinterJob.java: Reformatted.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/image/AffineTransformOp.java,
- 	java/awt/image/ColorConvertOp.java,
- 	java/awt/image/LookupOp.java,
- 	java/awt/image/RescaleOp.java:
- 	Added final keywords where they belong.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/CardLayout.java,
- 	java/awt/Component.java,
- 	java/awt/Font.java,
- 	java/awt/image/SinglePixelPackedSampleModel.java:
- 	Fixed javadocs and argument names all over.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/image/DataBufferShort.java: Fixed file header.
- 	* java/awt/image/DataBufferUShort.java: Likewise.
- 	(DataBufferUShort): Throw NullPointerException if dataArray is null.
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	* java/awt/geom/Arc2D.java
- 	(setAngleStart): Corrected (wrong sign on atan2 y parameter).
- 	(setAngles): Likewise.
- 	(containsAngle): Return false on zero extent, don't include
- 	final angle.
- 	(contains): Treat OPEN-type arcs like CHORD ones, not as PIE
- 	ones.
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	* java/awt/geom/AffineTransform.java,
- 	(inverseTransform): Fixed bug and simplified code.
- 	(createTransformedShape): Return null on null parameter.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/color/ICC_ColorSpace.java,
- 	java/awt/color/ICC_Profile.java,
- 	java/awt/color/ICC_ProfileGray.java,
- 	java/awt/color/ICC_ProfileRGB.java:
- 	Re-indent copyright header to be standardish.
- 	* java/awt/datatransfer/StringSelection.java:
- 	Reformatted.
- 	* java/awt/geom/Area.java
- 	(EPSILON): Made static.
- 	(RS_EPSILON): Likewise.
- 	(PE_EPSILON): Likewide.
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	* javax/swing/SwingUtilities.java:
- 	(computeDifference): Implemented
- 	(computeIntersection): Likewise
- 	(computeUnion): Likewise
- 	(isRectangleContainingRectangle): Likewise
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/BasicStroke.java,
- 	java/awt/Button.java,
- 	java/awt/Canvas.java,
- 	java/awt/CheckboxMenuItem.java,
- 	java/awt/Container.java,
- 	java/awt/EventQueue.java,
- 	java/awt/FileDialog.java,
- 	java/awt/FlowLayout.java,
- 	java/awt/FontMetrics.java,
- 	java/awt/Graphics.java,
- 	java/awt/GridLayout.java,
- 	java/awt/KeyboardFocusManager.java,
- 	java/awt/Label.java,
- 	java/awt/LayoutManager2.java,
- 	java/awt/List.java,
- 	java/awt/MenuBar.java,
- 	java/awt/Scrollbar.java,
- 	java/awt/Toolkit.java,
- 	java/awt/Window.java,
- 	java/awt/datatransfer/DataFlavor.java,
- 	java/awt/datatransfer/FlavorTable.java,
- 	java/awt/event/ActionListener.java,
- 	java/awt/event/HierarchyBoundsAdapter.java,
- 	java/awt/geom/Arc2D.java,
- 	java/awt/geom/Rectangle2D.java,
- 	java/awt/geom/RectangularShape.java,
- 	java/awt/im/spi/InputMethod.java,
- 	java/awt/image/ByteLookupTable.java,
- 	java/awt/image/ColorModel.java,
- 	java/awt/image/DirectColorModel.java,
- 	java/awt/image/ShortLookupTable.java,
- 	java/awt/print/Book.java:
- 	Fixed javadocs and method argument names all over.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/gtk/GdkFontPeer.java
- 	(buildString): Optimise String building.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/TextArea.java (AccessibleAWTTextArea,
- 	getAccessibleContext): Implement.
- 	* java/awt/TextField.java (AccessibleAWTTextField,
- 	getAccessibleContext): Implement.
- 
- 2004-11-30  Tom Tromey  <tromey@redhat.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo):
- 	Fixed typo.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Menu.java (AccessibleAWTMenu, getAccessibleContext):
- 	Implement.
- 	* java/awt/PopupMenu.java (AccessibleAWTMenu, getAccessibleContext):
- 	Implement.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/print/PrinterJob.java (lookupPrintServices,
- 	getPrintService, setPrintService): Implement.
- 	(lookupStreamPrintServices): Add commented out implementation.
- 	(printer): New field.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* javax/swing/ToolTipManager.java (mouseMoved): Set currentComponent
- 	when not yet set.
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	* java/awt/geom/GeneralPath.java (evaluateCrossings):
- 	Fixed epsilon value, should always be nonzero.
- 
- 2004-11-30  Paul Jenner  <psj.home@ntlworld.com>
- 
- 	* java/awt/image/Raster.java
- 	(createPackedRaster): Implemented.
- 
- 2004-11-30  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicTextUI.java:
- 	Listen to focus events, indicate focus via caret.
- 	* javax/swing/text/GapContent.java (getString): Return substring.
- 	* javax/swing/text/PlainDocument.java (reindex): New method.
- 	(createDefaultRoot): Call it.
- 	(insertUpdate): Likewise.
- 	(removeUpdate): Likewise.
- 	* javax/swing/text/Utilities.java (drawTabbedText): Always advance
- 	on tab and newline, even if no painting happens.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* Makefile.am: List peer JNI header: Java source file
- 	dependencies explicitly.  Likewise for JNI .lo: JNI header
- 	dependencies.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-30  Graydon Hoare  <graydon@redhat.com>
- 
- 	* Makefile.am: Add entry for BasicTextPaneUI.java
- 	* Makefile.in: Regenerate.
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(GdkGraphics2D): Set clip after transform.
- 	(drawImage): Protect against null image.
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
- 	(setIconImage): Protect against non-GtkImage args.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java
- 	(checkImage): Protect against non-GtkImage args.
- 	* java/awt/print/PrinterJob.java:
- 	(print): Add variant taking PrintRequestAttributeSet.
- 	(printDialog): Likewise.
- 	* javax/swing/JComponent.java:
- 	(transferHandler): New field.
- 	(getComponentGraphics): Build new Graphics for each sub-paint.
- 	(getTransferHandler): New method.
- 	(setTransferHandler): New method.
- 	* javax/swing/JDesktopPane.java
- 	(setDragMode): Force LIVE_DRAG_MODE.
- 	* javax/swing/JMenuItem.java
- 	(menuSelectionChanged): Protect against null parent.
- 	* javax/swing/JTable.java (setDefaultRenderer): New method.
- 	* javax/swing/JTree.java: Get basic ctors and UI working.
- 	* javax/swing/JViewport.java (JViewport): Set scroll mode.
- 	* javax/swing/RepaintManager.java
- 	(addDirtyRegion): Skip empty regions.
- 	* javax/swing/ScrollPaneLayout.java (minimumLayoutSize): Do not
- 	bound scrollpane minimum by central view minimum.
- 	* javax/swing/ToolTipManager.java
- 	(showTip): Guard against null component.
- 	* javax/swing/TransferHandler.java: Stub out.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Add entry for TextPaneUI, change Tree icons to pngs.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	(installDefaults): Set text position and alignment.
- 	(paintMenuItem): Layout icon with normal compound function.
- 	* javax/swing/plaf/basic/BasicTableHeaderUI.java:
- 	(getMaximumSize): Delete.
- 	(getMinimumSize): Delete.
- 	(getPreferredSize): Use column model's total width.
- 	* javax/swing/plaf/basic/BasicTextPaneUI.java: New file.
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(modelChanged): Make resilient against nulls.
- 	* javax/swing/plaf/basic/BasicTreeUI.java:
- 	Add some simplistic config / painting functions.
- 	* javax/swing/plaf/basic/BasicViewportUI.java
- 	(paintSimple): Add new non-backingstore paint mode.
- 	(paintBackingStore): Split out backing store code.
- 	(paint): Switch on painting mode.
- 	* javax/swing/text/SimpleAttributeSet.java
- 	(SimpleAttributeSet): Resist nulls.
- 	* javax/swing/tree/DefaultTreeCellRenderer.java: Implement.
- 	* javax/swing/tree/DefaultTreeModel.java: Partially implement.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (setFont):
- 	Set pango context's description and language.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/awt/image/LookupOp.java: Comments and indentation fixes.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Checkbox.java (AccessibleAWTCheckBox): Implement.
- 	(getAccessibleContext): Implement.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/TextComponent.java (AccessibleAWTTextComponent):
- 	Implement.
- 	(getIndexAtPoint, getCharacterBounds): New methods.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Button.java (AccessibleAWTButton): Implement.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(filenameFilterCallback): Made static.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(cairoShowGlyphs) Removed.
- 
- 2004-11-30  Sven de Marothy <sven@physto.se>
- 
- 	* gnu/java/awt/color/RgbProfileConverter.java (RgbProfileConverter):
- 	Don't invert matrix when reverse CLUT is available.
- 	* gnu/java/awt/color/LinearRGBConverter.java: Documentation update.
- 	* java/awt/color/ICC_ColorSpace.java: Likewise.
- 	* java/awt/color/ICC_Profile.java: Likewise.
- 	* java/awt/color/ICC_ProfileGray.java: Likewise.
- 	* java/awt/color/ICC_ProfileRGB.java: Likewise.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/MenuItem.java (AccessibleAWTMenuItem): Implement.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Choice.java (AccessibleAWTChoice): Implement.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/BandedSampleModel.java (scanlineStride): Remove
- 	field hiding ComponentSampleModel.scanlineStride.
- 
- 2004-11-30  Noa Resare  <noa@resare.com>
- 
- 	* java/awt/geom/GeneralPath.java (currentSegment):
- 	Fix typo in transform.transform() invocation.
- 
- 2004-11-30  Sven de Marothy <sven@physto.se>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(createImage): Created bitmap should be filled with bg color
- 
- 2004-11-30  Noa Resare  <noa@resare.com>
- 
- 	* java/awt/Choice.java (add):
- 	Implement correct selection behavior when peer == null.
- 	(insert): Likewise.
- 	(remove): Likewise.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (GtkChoicePeer):
- 	Call select() when Choice has a selected item.
- 
- 2004-11-30  Michael Koch  <address@bogus.example.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
- 	Fixed method names to start at begin of line. This is desired by GNU
- 	coding style guide.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(gtkWidgetSetVisible): Unused. Removed.
- 	(connectJObject): Likewise.
- 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
- 	(gtkScrolledWindowSetScrollPosition): Commented out.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
- 	(Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText): Installed and
- 	renamed from Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
- 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText): Removed.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(init_dpi_conversion_factor): Correct prototype.
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	* java/awt/image/ConvolveOp.java: Added missing
- 	copyright notice.
- 
- 2004-11-30  Robert Schuster  <theBohemian@gmx.net>
- 
- 	Fixes bug #10908
- 	* gnu/java/beans/IntrospectionIncubator.java:
- 	(addMethod): static methods are discarded now, too.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.am (awt_java_source_files): Add new gnu/java/awt/color
- 	java source files.
- 	* Makefile.in: Regenerated.
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	* gnu/java/awt/color/CieXyzConverter.java,
- 	gnu/java/awt/color/GrayScaleConverter.java,
- 	gnu/java/awt/color/SrgbConverter.java,
- 	gnu/java/awt/color/ClutProfileConverter.java,
- 	gnu/java/awt/color/LinearRGBConverter.java,
- 	gnu/java/awt/color/TagEntry.java,
- 	gnu/java/awt/color/ColorLookUpTable.java,
- 	gnu/java/awt/color/ProfileHeader.java,
- 	gnu/java/awt/color/ToneReproductionCurve.java,
- 	gnu/java/awt/color/ColorSpaceConverter.java,
- 	gnu/java/awt/color/PyccConverter.java,
- 	gnu/java/awt/color/GrayProfileConverter.java,
- 	gnu/java/awt/color/RgbProfileConverter.java:
- 	New files.
- 	* java/awt/color/ICC_ColorSpace.java,
- 	java/awt/color/ICC_Profile.java,
- 	java/awt/color/ICC_ProfileGray.java,
- 	java/awt/color/ICC_ProfileRGB.java:
- 	Implemented (sans PhotoYCC color space).
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/AffineTransformOp.java (filter):  Implement
- 	bilinear interpolation for Rasters.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/IndexColorModel.java (IndexColorModel): Actually
- 	use the provided colormap.  Throw documented exceptions.  Document
- 	exceptions.
- 
- 2004-11-30  Paul Jenner  <psj.home@ntlworld.com>
- 
- 	* java/awt/image/IndexColorModel.java (IndexColorModel): Fix
- 	constructor.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/AffineTransformOp.java: Add TYPE_BICUBIC.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/AffineTransformOp.java (filter): Implement Raster
- 	filtering.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ComponentSampleModel.java (getDataElements,
- 	setDataElements): Implement SHORT, FLOAT, and INT transfer types.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/Font.java (name): New field.
- 	(size): Likewise.
- 	(style): Likewise.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/Raster.java (createBandedRaster): Implement.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ConvolveOp.java: New class.
- 	* Makefile.am: Add ConvolveOp.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/RescaleOp.java (BandCombineOp, ColorConvertOp,
- 	LookupOp, RescaleOp): Fix loop bounds.
- 
- 2004-11-30  jlquinn  <jlquinn@optonline.net>
- 
- 	* Makefile.am: Fix typo in BandCombineOp.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/BandCombineOp.java: New class.
- 	* Makefile.am: Add BandCombineOp.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/LookupOp.java: New class.
- 	* Makefile.am: Add LookupOp.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/SampleModel.java (createSubsetSampleModel): Add
- 	javadocs.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ColorModel.java (cloneColorModel): Fix line
- 	wrap.  Use Boolean.valueOf.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(releasePeerGraphicsResource): Fixed typo in method name.
- 	* gnu/java/awt/peer/gtk/GdkFontPeer.java
- 	(finalize): Fixed typo in releasePeerGraphicsResource.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/font/TextAttribute.java
- 	(RUN_DIRECTION_LTR): Initialie with static value instead of
- 	calculating it.
- 	(RUN_DIRECTION_RTL): Likewise.
- 	(STRIKETHROUGH_ON): Likewise.
- 	(SWAP_COLORS_ON): Likewise.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ColorConvertOp.java: New class.
- 	* java/awt/image/ColorModel.java (cloneColorModel): New method.
- 	* Makefile.am: Add ColorConvertOp.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
- 	Track Window focus owner on FOCUS_GAINED events.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
- 	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
- 
- 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
- 	(Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun):
- 	Fix pointer warning.
- 
- 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter):
- 	Fix pointer warning.
- 
- 	* jni/gtk-peer/gtkpeer.h: Introduce widget_union to fix type punned
- 	warnings.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
- 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect): Use widget_union
- 	to fix type punned pointer warning.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (pre_event_handler):
- 	Likewise.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(window_get_new_state): Introduce unions to fix warnings as above.
- 	(window_property_changed_cb): Likewise.
- 	(window_active_state_change_cb): Mark unused variables unused.
- 	(window_focus_state_change_cb): Likewise.
- 	(window_focus_in_cb): Likewise.
- 	(window_focus_out_cb): Likewise.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont): Convert
- 	PangoFontMap correctly with PANGO_FT2FONT_MAP macro.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JMenuBar.java
- 	(updateUI): Simplified.
- 	* javax/swing/tree/DefaultTreeSelectionModel.java:
- 	Reorganized import statements.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/font/TextAttribute.java,
- 	javax/swing/JComponent.java,
- 	javax/swing/JInternalFrame.java,
- 	javax/swing/table/TableColumn.java,
- 	javax/swing/text/StyleConstants.java:
- 	Replaced "new Boolean(boolean)" with "Boolean.valueOf(boolean)".
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/tree/DefaultTreeCellEditor.java,
- 	javax/swing/tree/DefaultTreeModel.java,
- 	javax/swing/tree/DefaultTreeSelectionModel.java:
- 	Jalopied.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/tree/DefaultTreeCellEditor.java
- 	(EditorContainer.EditorContainer): Fixed arguments.
- 	(EditorContainer.EditorContainer): New method.
- 	(DefaultTextField.DefaultTextField): Fixed arguments, implemented.
- 	(DefaultTextField.getBorder): Implemented.
- 	(listenerList): New field.
- 	(addCellEditorListener): Implemented.
- 	(removeCellEditorListener): Implemented.
- 	(getCellEditorListeners): New method.
- 	* javax/swing/tree/DefaultTreeModel.java
- 	(addTreeModelListener): Fixed javadoc.
- 	(removeTreeModelListener): Likewise.
- 	(getTreeModelListeners): New method.
- 	(fireTreeNodesChanged): Implemented.
- 	(fireTreeNodesInserted): Likewise.
- 	(fireTreeNodesRemoved): Likewise.
- 	(fireTreeStructureChanged): Likewise.
- 	(getListeners): Fixed javadoc.
- 	* javax/swing/tree/DefaultTreeSelectionModel.java
- 	(addTreeSelectionListener): Implemented.
- 	(removeTreeSelectionListener): Likewise.
- 	(fireValueChanged): Likewise.
- 	(getListeners): Likewise.
- 	(addPropertyChangeListener): Likewise.
- 	(removePropertyChangeListener): Likewise.
- 	(getTreeSelectionListeners): New method.
- 	(getPropertyChangeListeners): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java
- 	(maximumThumbSize): Removed static keyword.
- 	(minimumThumbSize): Likewise.
- 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
- 	(CloseAction): Made public.
- 	(IconifyAction): Likewise.
- 	(MaximizeAction): Likewise.
- 	(MoveAction): Likewise.
- 	(RestoreAction): Likewise.
- 	(SizeAction): Likewise.
- 	(SystemMenuBar): Likewise.
- 	* javax/swing/plaf/basic/BasicSliderUI.java
- 	(TrackListener): Likewise.
- 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
- 	(KeyboardDownRightHandler): Likewise.
- 	(KeyboardEndHandler): Likewise.
- 	(KeyboardHomeHandler): Likewise.
- 	(KeyboardResizeToggleHandler): Likewise.
- 	(KeyboardUpLeftHandler): Likewise.
- 	(PropertyHandler): Likewise.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
- 	(PropertyChangeHandler): Likewise.
- 	(TabSelectionHandler): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/JTextComponent.java
- 	(getKeymap): Made public.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JEditorPane.java
- 	(getStream): Throws IOException.
- 	(read): Likewise.
- 	* javax/swing/JRootPane.java
- 	(createContentPane): Fixed return type.
- 	* javax/swing/JSpinner.java
- 	(commitEdit): Throws ParseException.
- 	* javax/swing/plaf/metal/MetalLookAndFeel.java
- 	(serialVersionUID): New field.
- 	* javax/swing/table/TableColumn.java
- 	(resizedPostingDisableCount): Added @deprecated tag.
- 	(disableResizedPosting): Likewise.
- 	(enableResizedPosting): Likewise.
- 	* javax/swing/text/Document.java
- 	(TitleProperty): Fixed value.
- 	* javax/swing/tree/TreeCellEditor.java
- 	(TreeCellEditor): Extends CellEditor.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JWindow.java
- 	javax/swing/SpinnerModel.java
- 	javax/swing/Timer.java
- 	javax/swing/event/MenuKeyEvent.java
- 	javax/swing/plaf/basic/BasicButtonUI.java
- 	javax/swing/plaf/basic/BasicIconFactory.java
- 	javax/swing/plaf/basic/BasicTabbedPaneUI.java
- 	javax/swing/text/AttributeSet.java
- 	javax/swing/text/Highlighter.java
- 	javax/swing/text/StyleConstants.java
- 	javax/swing/tree/TreeCellEditor.java:
- 	Removed redundant and reordered modifiers.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicToolTipUI.java:
- 	Reformatted copyright header.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractAction.java,
- 	javax/swing/AbstractButton.java,
- 	javax/swing/AbstractCellEditor.java,
- 	javax/swing/AbstractListModel.java,
- 	javax/swing/AbstractSpinnerModel.java,
- 	javax/swing/ActionMap.java,
- 	javax/swing/BorderFactory.java,
- 	javax/swing/Box.java,
- 	javax/swing/ButtonModel.java,
- 	javax/swing/CellEditor.java,
- 	javax/swing/CellRendererPane.java,
- 	javax/swing/DefaultBoundedRangeModel.java,
- 	javax/swing/DefaultButtonModel.java,
- 	javax/swing/DefaultCellEditor.java,
- 	javax/swing/DefaultDesktopManager.java,
- 	javax/swing/DefaultListCellRenderer.java,
- 	javax/swing/DefaultListSelectionModel.java,
- 	javax/swing/DefaultSingleSelectionModel.java,
- 	javax/swing/GrayFilter.java,
- 	javax/swing/InputMap.java,
- 	javax/swing/JApplet.java,
- 	javax/swing/JCheckBoxMenuItem.java,
- 	javax/swing/JColorChooser.java,
- 	javax/swing/JComboBox.java,
- 	javax/swing/JComponent.java,
- 	javax/swing/JDesktopPane.java,
- 	javax/swing/JDialog.java,
- 	javax/swing/JEditorPane.java,
- 	javax/swing/JFileChooser.java,
- 	javax/swing/JFormattedTextField.java,
- 	javax/swing/JFrame.java,
- 	javax/swing/JInternalFrame.java,
- 	javax/swing/JLabel.java,
- 	javax/swing/JLayeredPane.java,
- 	javax/swing/JList.java,
- 	javax/swing/JMenu.java,
- 	javax/swing/JMenuBar.java,
- 	javax/swing/JMenuItem.java,
- 	javax/swing/JOptionPane.java,
- 	javax/swing/JPanel.java,
- 	javax/swing/JPasswordField.java,
- 	javax/swing/JPopupMenu.java,
- 	javax/swing/JRadioButtonMenuItem.java,
- 	javax/swing/JRootPane.java,
- 	javax/swing/JSpinner.java,
- 	javax/swing/JSplitPane.java,
- 	javax/swing/JTabbedPane.java,
- 	javax/swing/JTable.java,
- 	javax/swing/JTextArea.java,
- 	javax/swing/JTextPane.java,
- 	javax/swing/JToggleButton.java,
- 	javax/swing/JToolBar.java,
- 	javax/swing/JToolTip.java,
- 	javax/swing/JTree.java,
- 	javax/swing/JViewport.java,
- 	javax/swing/ListModel.java,
- 	javax/swing/LookAndFeel.java,
- 	javax/swing/MenuSelectionManager.java,
- 	javax/swing/ProgressMonitorInputStream.java,
- 	javax/swing/RepaintManager.java,
- 	javax/swing/RootPaneContainer.java,
- 	javax/swing/ScrollPaneLayout.java,
- 	javax/swing/SpringLayout.java,
- 	javax/swing/SwingUtilities.java,
- 	javax/swing/Timer.java,
- 	javax/swing/ToolTipManager.java,
- 	javax/swing/UIDefaults.java,
- 	javax/swing/UIManager.java,
- 	javax/swing/border/MatteBorder.java,
- 	javax/swing/colorchooser/AbstractColorChooserPanel.java,
- 	javax/swing/colorchooser/ColorSelectionModel.java,
- 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
- 	javax/swing/colorchooser/DefaultHSBChooserPanel.java,
- 	javax/swing/colorchooser/DefaultPreviewPanel.java,
- 	javax/swing/colorchooser/DefaultRGBChooserPanel.java,
- 	javax/swing/colorchooser/DefaultSwatchChooserPanel.java,
- 	javax/swing/event/AncestorEvent.java,
- 	javax/swing/event/HyperlinkEvent.java,
- 	javax/swing/event/InternalFrameEvent.java,
- 	javax/swing/event/MenuDragMouseEvent.java,
- 	javax/swing/event/TableColumnModelEvent.java,
- 	javax/swing/event/TableModelEvent.java,
- 	javax/swing/event/TreeExpansionEvent.java,
- 	javax/swing/event/TreeModelEvent.java,
- 	javax/swing/event/TreeSelectionEvent.java,
- 	javax/swing/event/TreeWillExpandListener.java,
- 	javax/swing/event/UndoableEditEvent.java,
- 	javax/swing/filechooser/FileView.java,
- 	javax/swing/plaf/BorderUIResource.java,
- 	javax/swing/plaf/ComponentUI.java,
- 	javax/swing/plaf/FileChooserUI.java,
- 	javax/swing/plaf/IconUIResource.java,
- 	javax/swing/plaf/ListUI.java,
- 	javax/swing/plaf/PopupMenuUI.java,
- 	javax/swing/plaf/SplitPaneUI.java,
- 	javax/swing/plaf/TabbedPaneUI.java,
- 	javax/swing/plaf/TextUI.java,
- 	javax/swing/plaf/TreeUI.java,
- 	javax/swing/plaf/basic/BasicArrowButton.java,
- 	javax/swing/plaf/basic/BasicBorders.java,
- 	javax/swing/plaf/basic/BasicButtonUI.java,
- 	javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java,
- 	javax/swing/plaf/basic/BasicColorChooserUI.java,
- 	javax/swing/plaf/basic/BasicComboBoxEditor.java,
- 	javax/swing/plaf/basic/BasicComboBoxRenderer.java,
- 	javax/swing/plaf/basic/BasicComboBoxUI.java,
- 	javax/swing/plaf/basic/BasicComboPopup.java,
- 	javax/swing/plaf/basic/BasicDesktopIconUI.java,
- 	javax/swing/plaf/basic/BasicDesktopPaneUI.java,
- 	javax/swing/plaf/basic/BasicIconFactory.java,
- 	javax/swing/plaf/basic/BasicInternalFrameTitlePane.java,
- 	javax/swing/plaf/basic/BasicInternalFrameUI.java,
- 	javax/swing/plaf/basic/BasicListUI.java,
- 	javax/swing/plaf/basic/BasicLookAndFeel.java,
- 	javax/swing/plaf/basic/BasicMenuBarUI.java,
- 	javax/swing/plaf/basic/BasicMenuItemUI.java,
- 	javax/swing/plaf/basic/BasicMenuUI.java,
- 	javax/swing/plaf/basic/BasicOptionPaneUI.java,
- 	javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java,
- 	javax/swing/plaf/basic/BasicPopupMenuUI.java,
- 	javax/swing/plaf/basic/BasicProgressBarUI.java,
- 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
- 	javax/swing/plaf/basic/BasicRootPaneUI.java,
- 	javax/swing/plaf/basic/BasicScrollBarUI.java,
- 	javax/swing/plaf/basic/BasicSeparatorUI.java,
- 	javax/swing/plaf/basic/BasicSliderUI.java,
- 	javax/swing/plaf/basic/BasicSpinnerUI.java,
- 	javax/swing/plaf/basic/BasicSplitPaneDivider.java,
- 	javax/swing/plaf/basic/BasicSplitPaneUI.java,
- 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
- 	javax/swing/plaf/basic/BasicTableHeaderUI.java,
- 	javax/swing/plaf/basic/BasicTableUI.java,
- 	javax/swing/plaf/basic/BasicTextAreaUI.java,
- 	javax/swing/plaf/basic/BasicTextFieldUI.java,
- 	javax/swing/plaf/basic/BasicTextUI.java,
- 	javax/swing/plaf/basic/BasicToolBarSeparatorUI.java,
- 	javax/swing/plaf/basic/BasicToolBarUI.java,
- 	javax/swing/plaf/basic/BasicToolTipUI.java,
- 	javax/swing/plaf/basic/BasicTreeUI.java,
- 	javax/swing/plaf/basic/BasicViewportUI.java,
- 	javax/swing/plaf/basic/ComboPopup.java,
- 	javax/swing/table/AbstractTableModel.java,
- 	javax/swing/table/DefaultTableCellRenderer.java,
- 	javax/swing/table/DefaultTableColumnModel.java,
- 	javax/swing/table/DefaultTableModel.java,
- 	javax/swing/table/JTableHeader.java,
- 	javax/swing/table/TableCellEditor.java,
- 	javax/swing/table/TableCellRenderer.java,
- 	javax/swing/table/TableColumn.java,
- 	javax/swing/table/TableColumnModel.java,
- 	javax/swing/text/AbstractDocument.java,
- 	javax/swing/text/Caret.java,
- 	javax/swing/text/DefaultCaret.java,
- 	javax/swing/text/DefaultEditorKit.java,
- 	javax/swing/text/DefaultHighlighter.java,
- 	javax/swing/text/EditorKit.java,
- 	javax/swing/text/JTextComponent.java,
- 	javax/swing/text/LayeredHighlighter.java,
- 	javax/swing/text/PasswordView.java,
- 	javax/swing/text/SimpleAttributeSet.java,
- 	javax/swing/text/StyleConstants.java,
- 	javax/swing/text/StyleContext.java,
- 	javax/swing/text/StyledEditorKit.java,
- 	javax/swing/text/TextAction.java,
- 	javax/swing/text/View.java,
- 	javax/swing/tree/AbstractLayoutCache.java,
- 	javax/swing/tree/DefaultTreeCellRenderer.java,
- 	javax/swing/tree/DefaultTreeModel.java,
- 	javax/swing/tree/DefaultTreeSelectionModel.java,
- 	javax/swing/tree/FixedHeightLayoutCache.java,
- 	javax/swing/tree/TreeCellRenderer.java,
- 	javax/swing/tree/TreeSelectionModel.java,
- 	javax/swing/tree/VariableHeightLayoutCache.java,
- 	javax/swing/undo/AbstractUndoableEdit.java,
- 	javax/swing/undo/UndoableEditSupport.java:
- 	Imports cleaned up.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/Container.java,
- 	java/awt/Font.java,
- 	java/awt/font/TextLayout.java:
- 	Imports cleaned up.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractButton.java
- 	(getLabel): Added @deprecated tag.
- 	(setLabel): Likewise.
- 	* javax/swing/FocusManager.java
- 	(disableSwingFocusManager): Likewise.
- 	(isFocusManagerEnabled): Likewise.
- 	* javax/swing/JComponent.java
- 	(isManagingFocus): Added version to @deprecated tag.
- 	(getNextFocusableComponent): Moved @deprecated tag to bottom of
- 	javadoc.
- 	(getConditionForKeyStroke): Likewise.
- 	(getActionForKeyStroke): Likewise.
- 	* javax/swing/JDesktopPane.java
- 	(LIVE_DRAG_MODE): Added @specnote tag.
- 	(OUTLINE_DRAG_MODE): Likewise.
- 	* javax/swing/JInternalFrame.java
- 	(MENU_BAR_PROPERTY): Fixed value.
- 	(getMenuBar): Added @deprecated tag.
- 	(setMenuBar): Likewise.
- 	* javax/swing/JViewport.java
- 	(isBackingStoreEnabled): Likewise.
- 	(setBackingStoreEnabled): Likewise.
- 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java
- 	(closeKey): Likewise.
- 	(maximizeKey): Likewise.
- 	(minimizeKey): Likewise.
- 	(navigateKey): Likewise.
- 	(navigateKey2): Likewise.
- 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
- 	(openMenuKey): Likewise.
- 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
- 	(keyboardDownRightListener): Likewise.
- 	(keyboardEndListener): Likewise.
- 	(keyboardHomeListener): Likewise.
- 	(keyboardResizeToggleListener): Likewise.
- 	(keyboardUpLeftListener): Likewise.
- 	(dividerResizeToggleKey): Likewise.
- 	(downKey): Likewise.
- 	(endKey): Likewise.
- 	(homeKey): Likewise.
- 	(leftKey): Likewise.
- 	(rightKey): Likewise.
- 	(upKey): Likewise.
- 	(createKeyboardUpLeftListener): Likewise.
- 	(createKeyboardDownRightListener): Likewise.
- 	(createKeyboardHomeListener): Likewise.
- 	(createKeyboardEndListener): Likewise.
- 	(createKeyboardResizeToggleListener): Likewise.
- 	(getDividerBorderSize): Likewise.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
- 	(downKey): Likewise.
- 	(leftKey): Likewise.
- 	(rightKey): Likewise.
- 	(upKey): Likewise.
- 
- 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Use the
- 	GTK_TEXT_VIEW macro.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(connect_awt_hook_cb): Mark unused variable unused.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c (selection_get):
- 	Do the cast right.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create): According to
- 	the gtk API gtk_combo_box_new_text actually returns a GtkWidget.
- 	Remove unused var menu.
- 	(selection_changed): Remove unused value.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds): Fix pointer
- 	warning with using an intermediate variable.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
- 	(area_updated): Fix unused var warning for BE archs.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
- 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_connectSignals): Remove unused
- 	var.
- 	(realize_cb): Mark unused variable unused.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
- 	(seek_glyphstring_idx): Fix a C90 warning.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
- 	(Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun):
- 	Mark unused arguments unused.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
- 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_initState),
- 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setGlyphCodes),
- 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphCharIndex),
- 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphIsHorizontal):
- 	Likewise.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
- 	(Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerFontMetrics),
- 	(Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerTextMetrics):
- 	Likewise.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter):
- 	Likewise.
- 	(filenameFilterCallback): Remove unused var.
- 	(handle_response): Declare str_fileName and remove last else statement.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c:
- 	New File.
- 	(nativeGetNumFontsFamilies) New function.
- 	(nativeGetFontFamilies) Likewise.
- 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
- 	(getAvailableFontFamilyNames): Implement.
- 	* Makefile.am (gtk_c_source_files): Add GdkGraphicsEnvironment.c.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/ClasspathFontPeer.java
- 	(setStandardAttributes(String,Map)): If size attribute doesn't
- 	exist, default to size 12.  Clamp size value to a minimum of 1.
- 
- 2004-11-30  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* javax/swing/JDialog.java
- 	(decorated): Likewise.
- 	* javax/swing/JFrame.java
- 	(defaultLookAndFeelDecorated): Likewise.
- 
- 2004-11-30  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* javax/swing/plaf/basic/BasicToolBarUI.java
- 	(offset, regular): Made final.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java
- 	(DECREASE_HIGHLIGHT, INCREASE_HIGHLIGHT, NO_HIGHLIGHT,
- 	POSITIVE_SCROLL, NEGATIVE_SCROLL): Made final.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/BitwiseXORComposite.java,
- 	gnu/java/awt/ClasspathToolkit.java,
- 	gnu/java/awt/image/XBMDecoder.java,
- 	gnu/java/awt/peer/GLightweightPeer.java,
- 	gnu/java/awt/peer/gtk/GdkGlyphVector.java:
- 	Reorganized import statements.
- 
- 2004-11-30  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/awt/Button.java
- 	(next_button_number): Removed useless initializer.
- 	* java/awt/Frame.java
- 	(next_frame_number): Likewise.
- 	* java/awt/Panel.java
- 	(next_panel_number): Likewise,
- 	* java/awt/Scrollbar.java
- 	(next_scrollbar_number): Likewise.
- 	* java/awt/TextArea.java
- 	(next_text_number): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/image/ByteLookupTable.java
- 	(ByteLookupTable) :Fixed HTML entities in javadocs.
- 	(lookupPixel): Fix case when dst is null.
- 	* java/awt/image/ShortLookupTable.java
- 	(ShortLookupTable) :Fixed HTML entities in javadocs.
- 	(lookupPixel): Fix case when dst is null.
- 	* java/awt/image/DataBufferByte.java,
- 	java/awt/image/DataBufferDouble.java,
- 	java/awt/image/DataBufferFloat.java,
- 	java/awt/image/DataBufferInt.java,
- 	java/awt/image/DataBufferShort.java,
- 	java/awt/image/DataBufferUShort.java:
- 	Fix initialization of bankData in constructors.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
- 	(setNativeBounds): Set GtkEventBox, GtkButton and GtkLabel size
- 	requests.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(setNativeBounds): Make package private.  Set size request even
- 	if GTK parent is NULL.
- 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
- 	(setNativeBounds): Set GtkEventBox and GtkLabel size requests.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	Workaround for bug #17952.
- 	*  jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(request_frame_extents): Check window->window != NULL.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* jni/gtk-peer/gdkfont.h: Include gtkpeer.h not gtkcairopeer.h.
- 
- 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Use
- 	native_text_layout_state_table here.
- 
- 	* jni/gtk-peer/gdkfont.h: Mark native_text_layout_state_table extern.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
- 	(setChars): Only call pango_itemize() when vec->glyphitems != NULL.
- 	Only call pango_shape() when gi->glyphs->num_glyphs > 0.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java:
- 	Merged import statements.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(isBufferedImageGraphics): Simplified.
- 
- 2004-11-30  Paul Jenner  <psj.home@ntlworld.com>
- 
- 	* javax/swing/JTree.java
- 	(isRootVisible): Fixed typo in method name.
- 	* javax/swing/JScrollBar.java
- 	(setValues): Likewise.
- 	* javax/swing/JScrollPane.java
- 	(createScrollListener): Call JScrollBar.setValues.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (endValidate):
- 	Don't call setParentAndBounds on GtkWindowPeers.
- 
- 	* java/awt/Component.java (static): Don't set default keyboard
- 	focus manager.
- 	* java/awt/KeyboardFocusManager.java
- 	(getCurrentKeyboardFocusManager): If current keyboard focus
- 	manager is null set a default.
- 
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
- 	(gtkWidgetSetBackground): New method.
- 	(block_expose_events_cb): New function.
- 	(connectSignals): Block the AWT's expose event processing on
- 	button press and release.
- 	(gtkSetLabel): Set text on proper widget.
- 	(gtkWidgetModifyFont): Modify font on proper widget.
- 	(gtkWidgetSetBackground): Set normal, active and prelight
- 	colours.
- 	(gtkWidgetSetForeground): Set forground colour of proper widget.
- 	(gtkActivate): Activate the correct widget.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (clearRect):
- 	Only clear rectangle if the backing component is not an event
- 	box.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(beginNativeRepaintID): New variable.
- 	(endNativeRepaintID): Likewise.
- 	(gtkInit): Initialize new fields with method IDs.
- 	* jni/gtk-peer/gtkpeer.h (beginNativeRepaintID): Declare extern.
- 	(endNativeRepaintID): Likewise.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* javax/swing/JList.java (init): Revert accidental commit.
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (GdkGraphics):
- 	Call initComponentGraphics or connectSignals depending on
- 	component's realization status.
- 	(realize_cb): New function.
- 	(initComponentGraphics): New method.
- 	(connectSignals): New method.
- 	(clipRect): Return immediately if component is not realized.
- 	(setClip): Likewise.
- 	(translate): Likewise.
- 	(drawImage variants): Return false immediately if component is
- 	not realized.
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(connectSignals): New method.
- 	(GdkGraphics2D): Call initComponentGraphics2D or connectSignals
- 	depending on component's realization status.  Move other
- 	initialization calls to ...
- 	(initComponentGraphics2D): New method.
- 	(realize_cb): New function.
- 	(cairoSetMatrix): Return immediately if gr is NULL.
- 	(cairoNewPath): Likewise.
- 	(cairoRectangle): Likewise.
- 	(cairoClip): Likewise.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(gtkWidgetRepaintArea): Remove method.
- 	(isRealized): New method.
- 	(GtkComponentPeer): Move setParent, connectJObject and setCursor
- 	calls to setParentAndBounds.  Call setParentAndBounds.
- 	(setParentAndBounds): New method.
- 	(setComponentBounds): Return immediately if bounds are all zero.
- 	(repaint): Remove call to gtkWidgetRepaintArea.  Return
- 	immediately if requested paint region is 0x0.
- 	(setCursor): New method.
- 	(gtkWidgetSetParent): Only set widget's parent if its parent is
- 	currently NULL.
- 	(setNativeBounds): Only set widget's bounds if it has a parent.
- 	(connectSignals): Don't call gtk_widget_realize.  Connect
- 	"realize" signal to connect_awt_hook_cb handler.
- 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (isValidating):
- 	New field.
- 	(beginValidate): Set isValidating true.
- 	(endValidate): Set parents and bounds for children first, then
- 	for this.  Set isValidating false.
- 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(connectJObject): Remove method.
- 	(connectSignals): Don't call gtk_widget_realize.
- 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
- 	(connectJObject): Remove method.
- 	(connectSignals): Don't call gtk_widget_realize.
- 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
- 	(connectJObject): Remove method.
- 	* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
- 	(connectJObject): Remove method.
- 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(create): Don't call gtk_widget_realize.
- 	(connectJObject): Remove method.
- 	(connectSignals): Don't call gtk_widget_realize.  Connect
- 	"realize" signal to connect_awt_hook_cb handler.
- 	(nativeSetBounds): Don't attempt to move GDK window if it is
- 	NULL.
- 	* java/awt/Container.java (addImpl): Don't call comp.addNotify
- 	if peer is not null.
- 	(validateTree): Create peers for all children before calling
- 	doLayout.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
- 	(connectSignals): Don't call gtk_widget_realize.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(connect_awt_hook_cb): New function.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(initComponentGraphicsID): New variable.
- 	(initComponentGraphics2DID): Likewise.
- 	(setCursorID): Likewise.
- 	(gtkInit): Initialize new fields with method IDs.
- 	* jni/gtk-peer/gtkpeer.h (initComponentGraphicsID): Declare
- 	extern.
- 	(initComponentGraphics2DID): Declare extern.
- 	(setCursorID): Likewise.
- 	(connect_awt_hook_cb): Declare function.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java,
- 	gnu/java/awt/peer/gtk/GdkGlyphVector.java,
- 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
- 	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java,
- 	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
- 	gnu/java/awt/peer/gtk/GtkButtonPeer.java,
- 	gnu/java/awt/peer/gtk/GtkClipboard.java,
- 	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
- 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
- 	gnu/java/awt/peer/gtk/GtkFontPeer.java,
- 	gnu/java/awt/peer/gtk/GtkListPeer.java,
- 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
- 	gnu/java/awt/peer/gtk/GtkToolkit.java,
- 	gnu/java/awt/peer/gtk/GtkWindowPeer.java:
- 	Import statements reworked.  Some little reformattings.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/image/AffineTransformOp.java
- 	(TYPE_BILINEAR): Initialize with 2.
- 	* java/awt/print/Printable.java: Jalopied.
- 	(PAGE_EXISTS): Initialize with 0;
- 	(NO_SUCH_PAGE): Initialized with 1.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* Makefile.am: Add BufferedImageFilter.java.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-30  Graydon Hoare  <graydon@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(install_font_peer): Minor bug fixes to track cairo font semantics.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/BufferedImageFilter.java: Implement.
- 
- 2004-11-30  Graydon Hoare  <graydon@redhat.com>
- 
- 	* Makefile.am
- 	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c)
- 	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c)
- 	(gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java)
- 	(gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java): Remove.
- 	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c)
- 	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c)
- 	(gnu/java/awt/peer/gtk/GdkTextLayout.java)
- 	(gnu/java/awt/peer/gtk/GdkFontPeer.java)
- 	(gnu/java/awt/peer/ClasspathTextLayoutPeer.java): Add
- 	* Makefile.in: Regenerate.
- 	* gnu/awt/xlib/XToolkit.java
- 	(getClasspathTextLayoutPeer): Add stub.
- 	* gnu/java/awt/ClasspathToolkit.java
- 	(getClasspathTextLayoutPeer) Add.
- 	* gnu/java/awt/peer/ClasspathFontPeer.java
- 	(copyStyleToAttrs)
- 	(copySizeToAttrs): Make public.
- 	* gnu/java/awt/peer/ClasspathTextLayoutPeer.java: New file.
- 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java: Remove.
- 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java: Remove.
- 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java: Rewrite.
- 	* gnu/java/awt/peer/gtk/GdkFontPeer.java: New file.
- 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java: Adjust type names.
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java
- 	(getFontPeer): New function.
- 	(drawString): Pass font peer to native side.
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(cairoSetFont)
- 	(cairoShowGlyphs)
- 	(PainterThread): Remove.
- 	(GdkGraphics2D): Set hints during construction.
- 	(shifted)
- 	(walkPath)
- 	(draw)
- 	(setRenderingHint)
- 	(setRenderingHints): Reimplement normalization logic.
- 	(getDefaultHints)
- 	(updateBufferedImage)
- 	(isBufferedImageGraphics)
- 	(updateImagePixels)
- 	(drawImage): Make final.
- 	(drawImage): Always paint synchronously.
- 	(drawString)
- 	(drawGlyphVector): Rewrite.
- 	(releasePeerGraphicResource)
- 	(getPeerTextMetrics)
- 	(getPeerFontMetrics)
- 	(drawGdkGlyphVector)
- 	(drawGdkTextLayout)
- 	(cairoDrawGdkGlyphVector)
- 	(cairoDrawGdkTextLayout)
- 	(cairoDrawString)
- 	(getFontPeer): New functions.
- 	* gnu/java/awt/peer/gtk/GdkTextLayout.java: New file.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(getFontMetrics): Get metrics via toolkit, to hit cache.
- 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Use getFontMetrics.
- 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java (LRUCache): New class.
- 	(fontCache)
- 	(metricsCache)
- 	(imageCache): New members.
- 	(getFontMetrics)
- 	(getImage)
- 	(getClasspathFontPeer): Use caches.
- 	(getFontPeer): Route through getClasspathFontPeer.
- 	* java/awt/Font.java (attrsToMap): Remove, adjust ctors.
- 	* java/awt/font/TextLayout.java: Implement in terms of peer.
- 	* javax/swing/plaf/basic/BasicSliderUI.java
- 	(paintThumb): Use polyline rather than polygon.
- 	* javax/swing/plaf/basic/BasicGraphicsUtils.java:
- 	Update comment but, alas, still do not switch to using TextLayouts.
- 	* javax/swing/text/Utilities.java (drawTabbedText):
- 	Draw text run-at-a-time, not char-at-a-time.
- 	* jni/gtk-peer/gdkfont.h: Publicize some of the font interface, add
- 	layout table.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c:
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
- 	Remove files.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Rewrite to
- 	incorporate brains of old GdkClasspathFontPeerMetrics.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Rewrite to
- 	incorporate brains of old GdkClasspathFontPeer.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: New file.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
- 	(drawString): Rewrite to use persistent layout in peer font.
- 	Comment out extraneous gdk_flush calls.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(metrics_cairo)
- 	(metrics_surface): New static variables.
- 	(paint_glyph_run)
- 	(install_font_peer): New helper functions.
- 	(releasePeerGraphicResource)
- 	(getPeerTextMetrics)
- 	(getPeerFontMetrics)
- 	(cairoDrawGdkTextLayout)
- 	(cairoDrawGdkGlyphVector): New native methods.
- 	(cairoDrawString): Rewrite, leaving layout-based version
- 	commented out for the time being.
- 	* jni/gtk-peer/gtkpeer.h (graphics): Add fields for pango stuff.
- 
- 2004-11-30  David Gilbert  <david.gilbert@object-refinery.com>
- 
- 	* java/awt/geom/AffineTransform.java:
- 	Fixed javadocs overall.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ComponentColorModel.java: Remove FIXME comment since
- 	it's correct.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/IndexColorModel.java: Fix use of immutable
- 	BigIntegers.
- 
- 2004-11-30  Tom Tromey  <tromey@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicOptionPaneUI.java (MessageIcon):
- 	Renamed from 'messageIcon'.
- 	(errorIcon, infoIcon, warningIcon, questionIcon): Updated.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/RescaleOp.java: Fix formatting.
- 
- 2004-11-30   Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicComboPopup.java
- 	(SCROLL_DOWN): made final.
- 	(SCROLL_UP): made final.
- 
- 2004-11-30   Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicComboPopup.java:
- 	Added javadocs for undocumented fields.
- 	(show): scroll down to the selected item and
- 	highlight selected item.
- 	(startAutoScrolling): Implemented.
- 	(stopAutoScrolling): Implemented.
- 	(autoScrollUp): Implemented.
- 	(autoScrollDown): Implemented.
- 	(InvocationMouseHandler.mouseReleased): Implemented.
- 	(InvocationMouseMotionHandler.mouseDragged): Implemented.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/RescaleOp.java: Implement.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/IndexColorModel.java (getRGBs,
- 	convertToIntDiscrete): Implement.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/IndexColorModel.java: Add class docs.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/IndexColorModel.java (isValid, getValidPixels):
- 	Implement.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/MenuBar.java,
- 	java/awt/peer/MenuBarPeer.java:
- 	Revert accidentally commited changes.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/AWTKeyStroke.java,
- 	java/awt/Canvas.java,
- 	java/awt/CardLayout.java,
- 	java/awt/CheckboxMenuItem.java,
- 	java/awt/Component.java,
- 	java/awt/Container.java,
- 	java/awt/DefaultKeyboardFocusManager.java,
- 	java/awt/EventDispatchThread.java,
- 	java/awt/FileDialog.java,
- 	java/awt/FlowLayout.java,
- 	java/awt/Font.java,
- 	java/awt/Frame.java,
- 	java/awt/Graphics2D.java,
- 	java/awt/GraphicsEnvironment.java,
- 	java/awt/GridBagConstraints.java,
- 	java/awt/GridBagLayout.java,
- 	java/awt/GridLayout.java,
- 	java/awt/Image.java,
- 	java/awt/KeyboardFocusManager.java,
- 	java/awt/Label.java,
- 	java/awt/List.java,
- 	java/awt/MediaTracker.java,
- 	java/awt/Menu.java,
- 	java/awt/MenuBar.java,
- 	java/awt/MenuComponent.java,
- 	java/awt/Panel.java,
- 	java/awt/PopupMenu.java,
- 	java/awt/ScrollPane.java,
- 	java/awt/Scrollbar.java,
- 	java/awt/SystemColor.java,
- 	java/awt/TextArea.java,
- 	java/awt/TextField.java,
- 	java/awt/Toolkit.java,
- 	java/awt/Window.java,
- 	java/awt/color/ICC_Profile.java,
- 	java/awt/datatransfer/DataFlavor.java,
- 	java/awt/datatransfer/StringSelection.java,
- 	java/awt/datatransfer/SystemFlavorMap.java,
- 	java/awt/dnd/Autoscroll.java,
- 	java/awt/dnd/DropTarget.java,
- 	java/awt/dnd/DropTargetContext.java,
- 	java/awt/dnd/DropTargetDragEvent.java,
- 	java/awt/dnd/peer/DropTargetContextPeer.java,
- 	java/awt/event/AdjustmentEvent.java,
- 	java/awt/event/InputEvent.java,
- 	java/awt/event/InvocationEvent.java,
- 	java/awt/event/KeyEvent.java,
- 	java/awt/event/MouseEvent.java,
- 	java/awt/font/TextLayout.java,
- 	java/awt/geom/GeneralPath.java,
- 	java/awt/geom/Point2D.java,
- 	java/awt/im/InputContext.java,
- 	java/awt/im/spi/InputMethodContext.java,
- 	java/awt/image/AffineTransformOp.java,
- 	java/awt/image/BufferedImage.java,
- 	java/awt/image/ColorModel.java,
- 	java/awt/image/ComponentColorModel.java,
- 	java/awt/image/CropImageFilter.java,
- 	java/awt/image/DirectColorModel.java,
- 	java/awt/image/MemoryImageSource.java,
- 	java/awt/image/PackedColorModel.java,
- 	java/awt/image/PixelGrabber.java,
- 	java/awt/image/RasterOp.java,
- 	java/awt/peer/MenuBarPeer.java:
- 	Some fixes for checkstyle. Import statement and modifier order
- 	redordering.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTable.java
- 	(setModel): Reimplemented.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTextArea.java
- 	(append): Re-implemented.
- 	(insert): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JSpinner.java
- 	(serialVersionUID): New static field.
- 	* javax/swing/JToggleButton.java
- 	(JToggleButton): Fixed email addresses.
- 	* javax/swing/SpinnerNumberModel.java
- 	(serialVersionUID): Added javadoc.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTextArea.java:
- 	Don't use JTextComponent.doc directly. GCJ from java-gui-branch has a
- 	bug here which is fixed in HEAD ...
- 
- 2004-11-30  Andrew John Hughes  <address@hidden>
- 
- 	* javax/swing/JTextArea.java: Added additional
- 	documentation.
- 
- 2004-11-30  Andrew John Hughes  <address@hidden>
- 
- 	* javax/swing/JRadioButton.java:
- 	Implemented additional constructors and accessibility
- 	classes.  Added documentation and fixed a typo in
- 	AbstractButton.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/IndexColorModel.java (IndexColorModel): Implement
- 	missing constructor.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ComponentColorModel.java (ComponentColorModel):
- 	Implement missing 1.4 constructor.
- 
- 2004-11-30  Andrew John Hughes  <address@hidden>
- 
- 	* javax/swing/JToggleButton.java:
- 	Implemented additional constructors and accessibility
- 	classes.  Added documentation and fixed a typo in
- 	AbstractButton.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ColorModel.java (getDataElement,
- 	getDataElements): Document since 1.4.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/BandedSampleModel.java: Implement.
- 	* Makefile.am: Add java/awt/image/BandedSampleModel.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/Window.java: Fixed whitespace difference with GNU
- 	classpath.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.am: Add javax/swing/SpinnerListModel.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
- 
- 	* javax/swing/SpinnerListModel.java, javax/swing/SpinnerModel.java
- 	Implemented SpinnerListModel.  Added documentation to
- 	SpinnerModel.
- 
- 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(init_dpi_conversion_factor): Apply the patch from main correctly.
- 	2004-06-26  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 2004-11-30  Tom Tromey  <tromey@redhat.com>
- 
- 	Bug 9948.
- 	* javax/swing/JDesktopPane.java (LIVE_DRAG_MODE): Now final.
- 	(OUTLINE_DRAG_MODE): LIVE_DRAG_MODE.
- 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
- 	(NON_CONTINUOUS_DIVIDER): Now final.  Initialize.
- 
- 2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
- 
- 	* java/awt/Canvas.java
- 	(AccessibleAWTCanvas): added serialization UID
- 	* java/awt/Label.java
- 	(AccessibleAWTLabel): added serialization UID
- 	* javax/swing/JRootPane.java
- 	(AccessibleJRootPane): added comment to existing UID
- 	* javax/swing/JSpinner.java
- 	(DefaultEditor): added serialization UID
- 	(NumberEditor): added serialization UID
- 	* javax/swing/text/html/HTML.java
- 	(UnknownTag): added serialization UID
- 
- 2004-11-30  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* javax/swing/JInternalFrame.java
- 	(CONTENT_PANE_PROPERTY,FRAME_ICON_PROPERTY,GLASS_PANE_PROPERTY,
- 	IS_CLOSED_PROPERTY,IS_ICON_PROPERTY,IS_MAXIMUM_PROPERTY,
- 	IS_SELECTED_PROPERTY,LAYERED_PANE_PROPERTY,MENU_BAR_PROPERTY,
- 	ROOT_PANE_PROPERTY,TITLE_PROPERTY): Made final as per API spec.
- 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
- 	(CLOSE_CMD,ICONIFY_CMD,MAXIMIZE_CMD,MOVE_CMD,RESTORE_CMD,SIZE_CMD):
- 	Made final as per API spec.
- 
- 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* jni/gtk-peer/gtkpeer.h: Remove duplicated copyright string.
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	* java/awt/geom/Arc2D.java: Reformatted.
- 	(setArc): Correct documentation to say 'upper left corner'.
- 	(setArcByTangent,contains,intersects): Implemented.
- 	(containsAngle): Corrected to handle negative extents.
- 	(ArcIterator): Set to private.
- 	(ArcIterator): Corrected for CHORD-type arcs, negative extents.
- 	(intersects): Fix: Now checks the arc segment.
- 	(contains): Cleaned up.
- 	* java/awt/geom/CubicCurve2a.javaD: Fix insideness-test. Reindent.
- 	(contains): Implemented.
- 	(intersects): Implemented.
- 	* java/awt/geom/QuadCurve2D.java: Fix insideness-test. Reindent.
- 	* java/awt/geom/GeneralPath: Fix insideness-test. Reindent and
- 	document.  Fully (re)implemented using separate xpoints and ypoints
- 	float[] coords.
- 
- 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* configure.ac: Introduce AC_C_BIGENDIAN_CROSS for WORDS_BIGENDIAN.
- 	* configure: Regenerate.
- 	* include/config.h.in: Likewise.
- 	* jni/gtk-peer/gtkpeer.h (SWAPU32): Introduce macro to swap pixels.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c: Moved SWAPU32
- 	macro to gtkpeer.h.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePixels): Convert
- 	pixels from  0xBBGGRRAA to 0xAARRGGBB only on Little Endian
- 	architectures.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_updated):
- 	Likewise.
- 
- 2004-11-30  David Gilbert  <david.gilbert@object-refinery.com>
- 
- 	* java/awt/SystemColor.java: Fix @link doc entries.
- 
- 2004-11-30  David Gilbert  <david.gilbert@object-refinery.com>
- 
- 	* java/awt/RenderingHints.java: Documented.
- 	(RenderingHints): Accept null init Map.
- 	(putAll): Preprocess map to generate appropriate exceptions.
- 	(remove): Cast object to Key and remove from hintMap.
- 
- 2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
- 
- 	* java/awt/MenuComponent.java, java/awt/MenuBar.java:
- 	Implementation of accessibility classes and methods
- 	for these two components.
- 
- 2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
- 
- 	* java/awt/KeyboardFocusManager.java:
- 	Added missing documentation.
- 
- 2004-11-30  Andrew John Hughes <gnu_andrew@member.fsf.org>
- 
- 	* java/awt/Label.java, java/awt/Canvas.java:
- 	Added accessibility classes to AWT Label and Canvas,
- 	as well as additional documentation for Canvas.
- 
- 2004-11-30  David Gilbert  <address@bogus.example.com>
- 
- 	* java/awt/image/DataBuffer.java: Update API documentation.
- 	* java/awt/image/DataBufferByte.java: Likewise.
- 	* java/awt/image/DataBufferDouble.java: Likewise.
- 	* java/awt/image/DataBufferFloat.java: Likewise.
- 	* java/awt/image/DataBufferInt.java: Likewise.
- 	* java/awt/image/DataBufferShort.java: Likewise.
- 	* java/awt/image/DataBufferUShort.java: Likewise.
- 
- 2004-11-30  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* java/awt/Component.java (postEvent):
- 	Only delegate to parent if a parent exists.
- 	Reported by: Stephane Meslin-Weber <steph@tangency.co.uk>
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	*java/awt/AWTEventMulticaster.java,
- 	java/awt/Adjustable.java,
- 	java/awt/Point.java,
- 	java/awt/Polygon.java,
- 	java/awt/Rectangle.java,
- 	java/awt/Shape.java,
- 	java/awt/geom/Area.java,
- 	java/awt/geom/Ellipse2D.java,
- 	java/awt/geom/PathIterator.java,
- 	java/awt/geom/Point2D.java,
- 	java/awt/geom/Rectangle2D.java,
- 	java/lang/Comparable.java,
- 	java/util/Arrays.java:
- 	Fixed documentation errors
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ComponentSampleModel.java: Add documentation.
- 
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ComponentSampleModel.java (constructor):
- 	Initialize numBanks when figuring out the max bank index.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/Raster.java (createPackedRaster): Implement
- 	MultiPixelPackedSampleModel codepath.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/MultiPixelPackedSampleModel.java: Implement.
- 	* Makefile.am: Add MultiPixelPackedSampleModel.java.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/Raster.java (getNumBands): Implement.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/Raster.java
- 	(createPackedRaster(int,int,int,int,int,Point)): Implement for
- 	bands>1.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/SinglePixelPackedSampleModel.java
- 	(SinglePixelPackedSampleModel): Throw exception for unsupported
- 	datatype.
- 
- 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ColorModel.java (getDataElement): Implemented.
- 	Update javadoc.
- 	(getDataElements): Add missing version.  Remove bogus version.
- 	Update javadoc.
- 
- 2004-11-30  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicComboBoxUI.java:
- 	(paintCurrentValue): Pass correct parameters to
- 	getListCellRendererComponent().
- 	(ListDataHandler.intervalRemoved): Implemented.
- 	(PropertyChangeHandler.propertyChange): Handle changes in
- 	MODEL_CHANGED_PROPERTY of the JComboBox
- 	* javax/swing/plaf/basic/BasicComboPopup.java:
- 	(BasicComboPopup): Moved code that configures popup to
- 	configurePopup() and call it instead.
- 	(firePopupMenuWillBecomeVisible): Implemented.
- 	(firePopupMenuWillBecomeInvisible): Likewise.
- 	(firePopupMenuCanceled): Likewise.
- 	(configureList): Set list's visibleRowCount same as
- 	comboBox's visibleRowCount.
- 	(configurePopup): Implemented.
- 	(getPopupHeightForRowCount): Get item's from JComboBox's model and
- 	not from model of the JList.
- 	(ListMouseMotionHandler.mouseMoved): Implemented.
- 	(PropertyChangeHandler.propertyChange): Handles change in the
- 	JComboBox's model.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JComponent.java
- 	(isMaximumSizeSet): New method.
- 	(isMinimumSizeSet): Likewise.
- 	(isPreferredSizeSet): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JSpinner.java:
- 	Some Re-formatting.
- 	(spinner): New field.
- 	(DefaultEditor): New method.
- 	(getSpinner): Likewise.
- 	(NumberEdito): Likewise.
- 	(getModel): Likewise
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/InputVerifier.java:
- 	Re-formatted.
- 	* javax/swing/JComponent.java
- 	(inputVerifier): New property field.
- 	(getInputVerifier): New method.
- 	(setInputVerifier): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JComponent.java
- 	(JComponent): Added javadoc comment.
- 	(setBorder): Fire property change eventr.
- 	(setEnabled): Likewise.
- 	(setMaximumSize): Likewise.
- 	(setMinimumSize): Likewise.
- 	(setPreferredSize): Likewise.
- 	(setOpaque): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTextField.java
- 	(action): New field.
- 	(actionCommand): Likewise.
- 	(actionPropertyChangeListener): Likewise.
- 	(setHorizontalAlignment): Abort soon if new value == old value. Fire
- 	event before repainting.
- 	(postActionEvent): New method.
- 	(getAction): Likewise.
- 	(setAction): Likewise.
- 	(getActionCommand): Likewise.
- 	(setActionCommand): Likewise.
- 	(createActionPropertyChangeListener): Likewise.
- 	(configurePropertiesFromAction): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/DebugGraphics.java:
- 	Re-formatted. Fixed some javadocs.
- 	* javax/swing/JApplet.java
- 	(rootPaneCheckingEnabled): Renamed from checking.
- 	* javax/swing/JCheckBox.java
- 	(BORDER_PAINTED_FLAT_CHANGED_PROPERTY): New statif field.
- 	* javax/swing/JFrame.java:
- 	Re-formatted a bit and reordered some methods.
- 	(rootPaneCheckingEnabled): Renamed from checking.
- 	(getPreferredSize): Simplified.
- 	* javax/swing/JTextArea.java
- 	(getColumnWidth): New method.
- 	(getLineCount): Likewise.
- 	(getLineStartOffset): Likewise.
- 	(getLineEndOffset): Likewise.
- 	(getLineOfOffset): Likewise.
- 	(getRowHeight): Likewise.
- 	(insert): Likewise.
- 	(replaceRange): Likewise.
- 	* javax/swing/JTextField.java
- 	(scrollOffset): new field.
- 	(getScrollOffset): New method.
- 	(setScrollOffset): Likewise.
- 	(getColumnWidth): Likewise.
- 	* javax/swing/JTree.java
- 	(ANCHOR_SELECTION_PATH_PROPERTY): New static field.
- 	(CELL_EDITOR_PROPERTY): Likewise.
- 	(CELL_RENDERER_PROPERTY): Likewise.
- 	(EDITABLE_PROPERTY): Likewise.
- 	(EXPANDS_SELECTED_PATHS_PROPERTY): Likewise.
- 	(INVOKES_STOP_CELL_EDITING_PROPERTY): Likewise.
- 	(LARGE_MODEL_PROPERTY): Likewise.
- 	(LEAD_SELECTION_PATH_PROPERTY): Likewise.
- 	(ROOT_VISIBLE_PROPERTY): Likewise.
- 	(ROW_HEIGHT_PROPERTY): Likewise.
- 	(SCROLLS_ON_EXPAND_PROPERTY): Likewise.
- 	(SELECTION_MODEL_PROPERTY): Likewise.
- 	(SHOWS_ROOT_HANDLES_PROPERTY): Likewise.
- 	(TOGGLE_CLICK_COUNT_PROPERTY): Likewise.
- 	(TREE_MODEL_PROPERTY): Likewise.
- 	(VISIBLE_ROW_COUNT_PROPERTY): Likewise.
- 	(cellEditor): New field.
- 	(invokesStopCellEditing): Likewise.
- 	(largeModel): Likewise.
- 	(rowHeight): Likewise.
- 	(scrollsOnExpand): Likewise.
- 	(selectionModel): Likewise.
- 	(toggleClickCount): Likewise.
- 	(visibleRowCount): Likewise.
- 	(setShowsRootHandles): Fixed typo in method name.
- 	(getCellEditor): New method.
- 	(setCellEditor): Likewise.
- 	(getSelectionModel): Likewise.
- 	(setSelectionModel): Likewise.
- 	(getVisibleRowCount): Likewise.
- 	(setVisibleRowCount): Likewise.
- 	(isLargeModel): Likewise.
- 	(setLargeModel): Likewise.
- 	(getRowHeight): Likewise.
- 	(setRowHeight): Likewise.
- 	(getInvokesStopCellEditing): Likewise.
- 	(setInvokesStopCellEditing): Likewise.
- 	(getToggleClickCount): Likewise.
- 	(setToggleClickCount): Likewise.
- 	(getScrollsOnExpand): Likewise.
- 	(setScrollsOnExpand): Likewise.
- 	* javax/swing/table/DefaultTableColumnModel.java
- 	(addColumnModelListener): Fixed javadoc.
- 	(removeColumnModelListener): Implemented. Fixed javadoc.
- 	(getColumnModelListeners): New method.
- 	* javax/swing/table/JTableHeader.java
- 	(columnModel): Made protected.
- 	(draggedColumn): Likewise.
- 	(draggedDistance): Likewise.
- 	(reorderingAllowed): Likewise.
- 	(resizingAllowed): Likewise.
- 	(resizingColumn): Likewise.
- 	(table): Likewise.
- 	(updateTableInRealTime): Likewise.
- 	(createDefaultColumnModel): Renamed from
- 	createDefaultTableColumnModel.
- 	(setDefaultRenderer): New method.
- 	* javax/swing/table/TableColumn.java
- 	(getPropertyChangeListeners): New method.
- 	* javax/swing/text/DefaultHighlighter.java
- 	(drawsLayeredHighlights): New field.
- 	(getDrawsLayeredHighlights): New method.
- 	(setDrawsLayeredHighlights): Likewise.
- 	* javax/swing/text/DocumentFilter.java
- 	(FilterBypass): New inner class.
- 	(insertString): New method.
- 	(remove): Likewise.
- 	(replace): Likewise.
- 	* javax/swing/text/JTextComponent.java
- 	(dragEnabled): New field.
- 	(getSelectedText): New method.
- 	(getDragEnabled): Likewise.
- 	(setDragEnabled): Likewise.
- 	(replaceSelection): Reimplemented.
- 	* javax/swing/text/NavigationFilter.java
- 	(FilterBypass): New inner class.
- 	(NavigationFilter): New method.
- 	(moveDot): Likewise.
- 	(setDot): Likewise.
- 	* javax/swing/text/SimpleAttributeSet.java
- 	(EMPTY): Made public final.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/SpinnerNumberModel.java
- 	(getMinimum): New method.
- 	(setMinimum): Likewise.
- 	(getMaximum): Likewise.
- 	(setMaximum): Likewise.
- 	(getStepSize): Likewise.
- 	(setStepSize): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JMenu.java
- 	(getMenuListeners): New method.
- 	(fireMenuSelected): Simplified.
- 	* javax/swing/JRootPane.java
- 	(NONE): New static field.
- 	(FRAME): Likewise.
- 	(PLAIN_DIALOG): Likewise.
- 	(INFORMATION_DIALOG): Likewise.
- 	(ERROR_DIALOG): Likewise.
- 	(COLOR_CHOOSER_DIALOG): Likewise.
- 	(FILE_CHOOSER_DIALOG): Likewise.
- 	(QUESTION_DIALOG): Likewise.
- 	(WARNING_DIALOG): Likewise.
- 	(defaultButton): New field.
- 	(getDefaultButton): New method.
- 	(setDefaultButton): Likewise.
- 	* javax/swing/JScrollPane.java
- 	(getUI): New method.
- 	(setUI): Likewise.
- 	* javax/swing/JTable.java
- 	(getUI): Javadoc added.
- 	(setUI): New method.
- 	* javax/swing/JViewport.java
- 	(getUI): New method.
- 	(setUI): Likewise.
- 	* javax/swing/UIDefaults.java
- 	(removePropertyChangeListener): Made public.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JApplet.java, javax/swing/JFrame.java:
- 	Re-indented.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractButton.java:
- 	Little re-formatting.
- 	(changeEvent): Made protected.
- 	(fireStateChanged): Removed argument.
- 	(setHorizontalAlignment): Abort method when old value is equal too new
- 	value.
- 	(setHorizontalTextPosition): Likewise.
- 	(setVerticalAlignment): Likewise.
- 	(setVerticalTextPosition): Likewise.
- 	(setBorderPainted): Likewise.
- 	(setIcon): Likewise.
- 	(setText): Likewise.
- 	(setIconTextGap): Likewise.
- 	(setMargin): Likewise.
- 	(setPressedIcon): Likewise.
- 	(setFocusPainted): Likewise.
- 	(setDisabledSelectedIcon): Likewise.
- 	(setRolloverIcon): Likewise.
- 	(setRolloverSelectedIcon): Likewise.
- 	(setSelectedIcon): Likewise.
- 	(setContentAreaFilled): Likewise.
- 
- 2004-11-30  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicArrowButton.java:
- 	Jalopy. Reimplement.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
- 	Jalopy.
- 	(arrowIcon, upIcon, downIcon, leftIcon,
- 	rightIcon): Removed.
- 	(createIncreaseButton): Use BasicArrowButton.
- 	(createDecreaseButton): Ditto.
- 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
- 	(createRightOneTouchButton): Remove button border.
- 	(createLeftOneTouchButton): Ditto.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JSpinner.java
- 	(setModel): New method.
- 	* javax/swing/SpringLayout.java
- 	(Constraints): May not be final.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/gtk/GtkClipboard.java,
- 	java/awt/datatransfer/Clipboard.java,
- 	java/awt/datatransfer/ClipboardOwner.java:
- 	Reformated to make it use our coding standard.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/SpinnerNumberModel.java
- 	(SpinnerNumberModel): Implements java.io.Serializable.
- 	(serialVersionUID): New field.
- 	(SpinnerNumberModel): Added missing @throws tags to javadocs.
- 	* javax/swing/UIManager.java
- 	(get): New method.
- 	(getBoolean): Likewise.
- 	(getBorder): Likewise.
- 	(getColor): Likewise.
- 	(getDimension): Likewise.
- 	(getFont): Likewise.
- 	(getIcon): Likewise.
- 	(getInsets): Likewise.
- 	(getInt): Likewise.
- 	(getString): Likewise.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JPasswordField.java:
- 	Reformated. Implemented construtors.
- 	* javax/swing/plaf/basic/BasicPasswordFieldUI.java
- 	(create): New method.
- 	* javax/swing/text/PlainView.java
- 	(selectedColor): Made package-private to allow access from sub-classes
- 	in same package too.
- 	(unselectedColor): Likewise.
- 	(font): Likewise.
- 	(drawSelectedText): Make protected.
- 	(drawUnselectedText): Likewise.
- 	* javax/swing/text/PasswordView.java: New file.
- 	* Makefile.am: Added javax/swing/text/PasswordView.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Set menu
- 	bar's width.
- 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (nativeSetHelpMenu):
- 	Add FIXME comment.
- 	(addHelpMenu): Elide call to nativeSetHelpMenu.
- 	* java/awt/Menu.java (isTearOff): Rename to tearOff.
- 	(menuSerializedDataVersion): Initialize to 1.
- 	(separatorLabel): Mark transient.
- 	(insert(MenuItem,int)): Implement.
- 	* java/awt/MenuBar.java (setHelpMenu): Call getPeer to retrieve
- 	peer.
- 	(countMenus): Count help menu.
- 	* java/awt/MenuComponent.java (nameExplicitlySet, newEventsOnly,
- 	accessibleContext): Add fields.
- 	* java/awt/MenuItem.java: Remove event mask FIXME.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
- 	(gtkWidgetModifyFont): Only set font if label is non-NULL.
- 	(setLabel): Don't treat "-" specially.
- 
- 2004-11-30  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/colorchooser/DefaultHSBChooserPanel.java:
- 	(stateChanged): Only update the image and the track if
- 	the values are not being adjusted.
- 	(updateChooser): Grab the new mouse point from the
- 	spinner values. Update the image and track only if
- 	the values are not being adjusted.
- 	(getHSBValues): New method.
- 	* javax/swing/colorchooser/DefaultRGBChooserPanel.java:
- 	(SliderHandler::stateChanged): Changed internalChange
- 	to updateChange. Set sliderChange.
- 	(SpinnerHandler::stateChanged): Ditto. Set spinnerChange.
- 	(spinnerChange): New variable.
- 	(sliderChange): Ditto.
- 	(updateChange): Renamed from internalChange.
- 	(updateChooser): Do not update sliders if the sliders
- 	were the original source of the change. Ditto for spinners.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
- 	(mousePress): Don't scroll the JViewport if there will
- 	be extra space at the end of the run. Change layout() to
- 	revalidate().
- 	(calculateSize): Use the component's width/height unless
- 	it is smaller than the max tab width/height.
- 	(calculateTabRects): Subtract the tab run overlay.
- 	(rotateTabRuns): Don't rotate if there's only one run.
- 	(layoutContainer): Reuse the viewport point.
- 	(createLayoutManager): Set the viewport to use no layout.
- 	(paintTabArea): Don't paint the tabs that are not visible
- 	to the JViewport.
- 	(paintContentBorderTopEdge): Check for scroll tab layout before
- 	looking for gap.
- 	(paintContentBorderLeftEdge): Ditto.
- 	(paintContentBorderBottomEdge): Ditto.
- 	(paintContentBorderRightEdge): Ditto.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java (gtkWidgetSetFont):
- 	Rename ...
- 	(gtkWidgetModifyFont): New method.
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
- 	(setMenuBarWidth): New method.
- 	(setBounds): Set the menu bar width.
- 	(postConfigureEvent): Set the menu bar width if the window's
- 	width has changed.
- 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (GtkMenuBarPeer):
- 	Don't call create.
- 	(setFont): New method.
- 	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java (create): New
- 	method.
- 	(setFont): Likewise.
- 	(GtkMenuComponentPeer): Call create and setFont.
- 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
- 	(connectSignals): Make package private.
- 	(gtkWidgetModifyFont): New method.
- 	(create): Likewise.
- 	(GtkMenuItemPeer): Don't call create.
- 	(setFont): New method.
- 	* java/awt/CheckboxMenuItem.java (addNotify): Fix peer == null
- 	condition.
- 	* java/awt/Container.java (validateTree): Fix comment typos.
- 	* java/awt/MenuComponent.java (getFont): Return parent's font if
- 	our font is null.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
- 	(create): Remove call to deprecated
- 	gtk_check_menu_item_set_show_toggle function.
- 
- 2004-11-30  Hans Boehm <Hans.Boehm@hp.com>
- 
- 	* java/lang/natObject.cc (LOCK_LOG, LOG): Add debug tracing.
- 	(Almost everywhere): add LOG calls, fix, add comments.
- 	(_Jv_MonitorEnter): Replace masking of LOCKED bit with assertion.
- 	Add explicit check for LOCKED bit in slow case (PR 16662).
- 	(_Jv_MonitorExit): Add casts in debug-only code.
- 	Always release LOCKED bit before throwing exception.
- 	(_Jv_ObjectCheckMonitor): Lock may be held if lightweight lock
- 	isn't.  Handle easy cases without lock acquisition.
- 	(Object::wait): Use NotifyAll for lock inflation.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
- 	(gtkFixedMove): Remove method.
- 
- 2004-11-30  Sven de Marothy  <sven@physto.se>
- 
- 	* java/awt/geom/Area.java: Implemented.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/awt/geom/Arc2D.java (ArcIterator): Make package private.
- 
- 2004-11-30 Sven de Marothy <sven@physto.se>
- 
- 	* java/awt/geom/Arc2D.java
- 	Reformatted.
- 	(setArc): Correct documentation to say 'upper left corner'.
- 	(setArcByTangent,contains,intersects): Implemented.
- 	(containsAngle): Corrected to handle negative extents.
- 	(ArcIterator): Set to private.
- 	(ArcIterator): Corrected for CHORD-type arcs, negative extents.
- 	* java/awt/geom/Ellipse2D.java
- 	Documented.
- 	(contains,intersects): Implemented.
- 	* java/awt/geom/Line2D.java
- 	(linesIntersect): Correct handling of special cases.
- 
- 2004-11-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Use
- 	Color.BLACK if c == null, don't create new Color object each time.
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (comp): New private
- 	field.
- 	(setColor): Use Color.BLACK when argument null.
- 	(setComposite): Set this.comp field.
- 	(getComposite): Return this.comp, or AlphaComposite.SrcOver when null.
- 	(DrawState.comp): New private field.
- 	(DrawState.save): Save Composite.
- 	(DrawState.restore): Restore comp field.
- 	* java/awt/FontMetrics.java (gRC): New static final private field.
- 	(getLineMetrics(String, Graphics)): New method.
- 	(getLineMetrics(String, int, int, Graphics)): Likewise.
- 	(getLineMetrics(char[], int, int, Graphics)): Likewise.
- 	(getLineMetrics(CharacterIterator, int, int, Graphics)): Likewise.
- 	* javax/swing/JMenu.java (JMenu(String, boolean)): Ignore tearoff
- 	argument. PR SWING/17294.
- 	* javax/swing/plaf/basic/BasicGraphicsUtils.java (): Always use
- 	the fall-back code since none of the TextArea methods are really
- 	implemented now. PR SWING/17296.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
- 	(GdkGlyphVector_setChars): Replace assert() with if block when
- 	pango_itemize() returns null. PR AWT/17295.
- 	(GdkGlyphVector_allInkExtents): Likewise when vec->glyphitems is null.
- 
- 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* Makefile.am (gtk_c_source_files): Add
- 	gnu_java_awt_peer_gtk_GtkFramePeer.c.
- 	* Makefile.in: Regenerate.
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java (getClipBounds): Remove
- 	comment.
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
- 	(create): Pack GtkButton in GtkEventBox.
- 	(connectJObject): Remove.
- 	(focus_in_cb): New function.
- 	(focus_out_cb): Likewise.
- 	(connectSignals): Connect focus-in-event and focus-out-event
- 	signals.
- 	(gtkSetFont): Rename to ...
- 	(gtkWidgetModifyFont): New method.
- 	(gtkWidgetRequestFocus): New method.
- 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
- 	(gtkSetFont): Rename to ...
- 	(gtkWidgetModifyFont): New method.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(isInRepaint): New field.
- 	(gtkSetFont): Remove method.
- 	(addExposeFilter): Likewise.
- 	(removeExposeFilter): Likewise.
- 	(gtkWidgetQueueDrawArea): Rename to ...
- 	(gtkWidgetRepaintArea): New method.
- 	(beginNativeRepaint): New method.
- 	(endNativeRepaint): New method.
- 	(setComponentBounds): Move implementation here from
- 	GtkComponentPeer.
- 	(paint): Remove implementation.
- 	(repaint): Wrap call to gtkWidgetRepaintArea with calls to
- 	beginNativeRepaint and endNativeRepaint.
- 	(setBounds): Use menu bar height in bounds calculation.
- 	(postExposeEvent): Only post paint event if we're not doing a
- 	native repaint.
- 	(gtkWidgetSetParent): Replace gtk_layout_put with gtk_fixed_put.
- 	(setNativeBounds): Replace gtk_layout_move with gtk_fixed_move.
- 	(find_gtk_layout): Remove function.
- 	(filter_expose_event_handler): Likewise.
- 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (postExposeEvent):
- 	Likewise.
- 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
- 	(setComponentBounds): Call GtkComponentPeer's
- 	setComponentBounds.
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight):
- 	New method.
- 	(moveLayout): Rename to ...
- 	(gtkFixedMove): New method.
- 	(gtkLayoutSetVisible): Rename to ...
- 	(gtkFixedSetVisible): New method.
- 	(setMenuBar): Rearrange, to make the three separate cases
- 	clearer.
- 	(postExposeEvent): Only post paint event if we're not doing a
- 	native repaint.
- 	* gnu/java/awt/peer/gtk/GtkGenericPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
- 	(gtkWidgetModifyFont): New method.
- 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
- 	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,Color)):
- 	Call run directly, rather than spawning a new thread.
- 	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,int,int,int,int,Color)):
- 	Likewise.
- 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (gtkSetFont):
- 	Rename to ...
- 	(gtkWidgetModifyFont): New method.
- 	(create): Rename ebox to eventbox.
- 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
- 	Rename to ...
- 	(gtkWidgetModifyFont): New method.
- 	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
- 	(GtkMenuComponentPeer): Set the default font.
- 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
- 	(gtkSetFont): Rename to ...
- 	(gtkWidgetModifyFont): New method.
- 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
- 	* java/awt/Component.java (locale): Initialize to default
- 	locale.
- 	* java/awt/Container.java (invalidateTree): Make
- 	package-private.
- 	(paint): Paint self first.
- 	(setMenuBar): Call invalidateTree.
- 	* java/awt/Panel.java (dispatchEventImpl): Remove method.
- 	* java/awt/Window.java (show): Call no-parameter variant of
- 	requestFocusInWindow.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (initState):
- 	Remove special case for window widget.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(grab_current_drawable): Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
- 	(create): Replace GtkLayout with GtkFixed.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(pre_event_handler): Remove special cases for GDK_EXPOSE events.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: New file.
- 	Move all GtkFramePeer native method implementations here from
- 	gnu_java_awt_peer_gtk_GtkWindowPeer.c.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
- 	Replace GtkLayout with GtkFixed.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(find_layout): Remove function.
- 	(create): Replace GtkLayout with GtkFixed.
- 	(connectSignals): Remove find_layout call.
- 	(toBack): Replace XFlush with gdk_flush.
- 	(toFront): Replace XFlush with gdk_flush.
- 	Move GtkFramePeer native method implementations to
- 	gnu_java_awt_peer_gtk_GtkFramePeer.c.
- 	* jni/gtk-peer/gtkpeer.h: Remove declaration of find_gtk_layout.
- 
- 2004-11-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTextArea.java
- 	(lineWrap): Renamed from "wrapping".
- 	(wrapStyleWord): NEw field.
- 	(getLineWrap): Re-edited javadoc comment.
- 	(setLineWrap): Likewise.
- 	(getWrapStyleWord): New method.
- 	(setWrapStyleWord): Likewise.
- 
- 2004-11-29  Kelley Cook  <kcook@gcc.gnu.org>
- 
- 	* configure: Regenerate for libtool change.
- 
- 2004-11-29  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/gcj/tools/gcj_dbtool/Main.java (main): Mention gcj-dbtool.
- 	Recognize --help and --version.
- 	(usage): Mention gcj-dbtool.  Added "out" argument.
- 	(insist): Updated.
- 
- 2004-11-29  Eric Botcazou  <ebotcazou@libertysurf.fr>
- 
- 	* link.cc (link_symbol_table): Do not use intptr_t.
- 
- 2004-11-28  Mark Wielaard  <mark@klomp.org>
- 
- 	* mauve-libgcj: Disable SpinnerListModel, SwingUtilities and
- 	XMLDecoder tests which currently don't compile.
- 
- 2004-11-27  Andrew Haley  <aph@redhat.com>
- 
- 	* link.cc (ensure_class_linked): Conditionally compile
- 	_Jv_IsInterpretedClass on INTERPRETER.
- 	(print_class_loaded): Likewise.
- 	(wait_for_state): Likewise.
- 	* include/jvm.h (ROUND): Move to here from include/java-interp.h.
- 	* include/java-interp.h (ROUND): Remove.
- 
- 2004-11-25  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/gcj/util/natDebug.cc (getField): Don't qualify name.
- 	* java/lang/Class.h (_Jv_Linker): Declare.
- 	(Class): Fix names of friends.
- 	(_Jv_getInterfaceMethod): Declare.
- 
- 2004-11-25  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
- 
- 	* testsuite/lib/libjava.exp (libjava_arguments): Add new global
- 	variable libjava_ld_library_path.
- 	(gcj_invoke, libjava_invoke): Use it to set ld_library_path.
- 
- 2004-11-25  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/util/ResourceBundle.java (BundleKey): Don't implement
- 	Cloneable.
- 	(BundleKey.clone): Removed.
- 	(getBundle): Copy BundleKey using constructor, not clone().
- 
- 2004-11-25  Kelley Cook  <kcook@gcc.gnu.org>
- 
- 	* configure: Regenerate for libtool reversion.
- 
- 2004-11-25  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am: Added most of javax.print again.
- 	* Makefile.in: Regenerated.
- 
- 2004-11-25  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am: Added most of javax.print again.
- 	* Makefile.in: Regenerated.
- 
- 2004-11-24  Tom Tromey  <tromey@redhat.com>
- 
- 	* Merged gcj-abi-2-dev-branch to trunk.
- 
- 2004-11-16  Tom Tromey  <tromey@redhat.com>
- 
- 	* include/java-interp.h (_Jv_DefineClass): Updated.
- 	* java/lang/natVMClassLoader.cc (defineClass): Pass protection
- 	domain to class reader.
- 	* defineclass.cc (parse): Use print_class_loaded.
- 	Include ProtectionDomain.h.
- 	(_Jv_DefineClass): Added ProtectionDomain argument.
- 	(_Jv_ClassReader): Likewise.
- 	* include/jvm.h (_Jv_Linker::print_class_loaded): Declare.
- 	* link.cc: Include CodeSource.h.
- 	(print_class_loaded): New function.
- 	(wait_for_state): Use it.
- 
- 2004-11-16  Andrew Haley  <aph@redhat.com>
- 
- 	* gnu/gcj/util/Debug.java (print): Add RawDataManaged.
- 
- 2004-11-16  Andrew Haley  <aph@redhat.com>
- 
- 	* configure.ac (LIBGCJ_LD_SYMBOLIC): AC_SUBST this definition.
- 	* configure.host: Define libgcj_ld_symbolic for Linux hosts.
- 	* Makefile.am (lib_*_la_LDFLAGS): Add LIBGCJ_LD_SYMBOLIC.
- 	* configure: Regenerate.
- 	* Makefile.in: Regenerate.
- 
- 2004-11-15  Andrew Haley  <aph@redhat.com>
- 
- 	* boehm.cc (_Jv_GCRegisterDisappearingLink): Check that *objp is a
- 	gc-allocated object.
- 
- 2004-11-15  Andrew Haley  <aph@redhat.com>
- 
- 	* java/net/URLClassLoader.java
- 	(URLLoader.getClassPath): New method.
- 	(JarURLLoader.JarURLLoader): Read mainfest to parse "Class-Path"
- 	attribute and add URLs for each entry.
- 	(JarURLLoader.classPath): New field.
- 	(JarURLLoader.getClassPath): New method.
- 	(addURLImpl): Scan through the list of extraUrls in the new
- 	loader, adding them to our urlinfos.
- 	(definePackage, findURLResource, findResources): Use
- 	urlinfos.size(), not urls.size().
- 
- 2004-11-11  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/gcj/runtime/natSharedLibLoader.cc (ensureSupersLinked): New
- 	method.
- 	* gnu/gcj/runtime/SharedLibHelper.java (findClass): Ensure supers
- 	linked.
- 	(ensureSupersLinked): Declare.
- 	* java/lang/natVMClassLoader.cc (loadClass): Ensure supers
- 	linked.
- 
- 2004-11-10  Tom Tromey  <tromey@redhat.com>
- 
- 	* gij.cc (main): Treat -verbose the same as -verbose:class.
- 	(help): Document -verbose and -verbose:class.
- 
- 	* link.cc (verbose_class_flag): Declare.
- 	(wait_for_state): Print message when handling precompiled class.
- 	* java/lang/natClass.cc (verbose_class_flag): Moved to link.cc.
- 
- 2004-11-09  Tom Tromey  <tromey@redhat.com>
- 
- 	* testsuite/libjava.lang/assign2.out: New file.
- 	* testsuite/libjava.lang/assign2.java: New file.
- 
- 	* java/lang/natRuntime.cc (insertSystemProperties): Set
- 	java.version to 1.4.2 and java.specification.version to 1.4.  Set
- 	java.runtime.version.
- 
- 2004-11-08  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/lang/natClass.cc (_Jv_IsAssignableFromSlow): Ensure
- 	supers installed.
- 	* link.cc (verify_type_assertions): Don't link supers.
- 
- 	* include/jvm.h (_Jv_Linker::search_method_in_class): Declare.
- 	* include/java-interp.h (class _Jv_InterpClass)
- 	<_Jv_PrepareMissingMethods>: No longer `friend'.
- 	* java/lang/Class.h (_Jv_SearchMethodInClass): No longer
- 	`friend'.
- 	(_Jv_PrepareMissingMethods, _Jv_PrepareCompiledClass,
- 	_Jv_GetInterfaces, _Jv_GenerateITable, _Jv_FindIIndex,
- 	_Jv_AppendPartialITable, _Jv_LinkSymbolTable,
- 	_Jv_LayoutInterfaceMethods, _Jv_SetVTableEntries, _Jv_MakeVTable,
- 	_Jv_linkExceptionClassTable, _Jv_WaitForState): Likewise.
- 	* link.cc (search_method_in_class): Renamed from
- 	_Jv_SearchMethodInClass.
- 	(resolve_pool_entry): Updated.
- 
- 	* include/jvm.h (_Jv_CheckAssignment): Removed.
- 	* java/lang/natClass.cc (_Jv_CheckAssignment): Removed.
- 
- 2004-11-05  Tom Tromey  <tromey@redhat.com>
- 
- 	* link.cc (verify_type_assertions): Ensure classes have supers
- 	linked.  Strip off array types first.
- 
- 2004-11-05  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* link.cc: Include VerifyError.h.
- 	(_Jv_Linker::verify_type_assertions): New. Read and evaluate entries
- 	in the type assertion table.
- 	* include/execution.h (_Jv_CompiledEngine::do_verify): Use
- 	verify_type_assertions.
- 	* include/jvm.h (_Jv_Linker::verify_type_assertions): declare.
- 	* java/lang/Class.h (JV_ASSERT_END_OF_TABLE,
- 	JV_ASSERT_TYPES_COMPATIBLE, JV_ASSERT_IS_INSTANTIABLE): Declare
- 	assertion code values.
- 	(struct _Jv_TypeAssertion): Declare.
- 	(assertion_table): New class field.
- 	(verify): Remove class field.
- 
- 2004-11-05  Andrew Haley  <aph@redhat.com>
- 
- 	* Makefile.am: Move jv_dbtool.java to
- 	gnu/gcj/tools/gcj_dbtool/Main.java.
- 	* Makefile.in: Rebuild.
- 	* java/lang/VMCompiler.java: Rename property
- 	"gnu.gcj.precompiled.db" to "gnu.gcj.precompiled.db.path".
- 	* gnu/gcj/tools/gcj_dbtool/Main.java: moved here from
- 	jv_dbtool.java.
- 
- 2004-11-05  Andrew Haley  <aph@redhat.com>
- 
- 	* jv_dbtool.java (main): Allow the user to specify the size of the
- 	database.  Display the capacity and the size.
- 	(usage): Show the new option.
- 
- 2004-11-04  Tom Tromey  <tromey@redhat.com>
- 
- 	* include/jvm.h (_Jv_Linker::set_vtable_entries): Updated.
- 	* link.cc (make_vtable): Use correct index when searching for
- 	missing method's name.  Don't use `flags'.
- 	(set_vtable_entries): Removed `flags' argument.  Don't recurse
- 	into superclasses.
- 	(link_symbol_table): Ensure target class method table is
- 	complete.  Ensure target fields are laid out before entering
- 	loop.
- 
- 	* java/lang/natClass.cc (_Jv_getInterfaceMethod): Indentation
- 	fix.
- 
- 	* interpret.cc (do_verify): Don't verify abstract methods.
- 
- 2004-11-01  Tom Tromey  <tromey@redhat.com>
- 
- 	* link.cc (wait_for_state): Call verify_class.
- 
- 	* verify.cc (state::check_no_uninitialized_objects): Removed.
- 	(push_jump): Updated.
- 	(push_exception_jump): Likewise.
- 	(handle_ret_insn): Likewise.
- 	(handle_jsr_insn): Likewise.
- 
- 2004-10-28  Andrew Haley  <aph@redhat.com>
- 
- 	* gnu/gcj/runtime/PersistentByteMap.java: New file.
- 	* jv_dbtool.java: New file.
- 	* Makefile.am (bin_PROGRAMS): Add jv-dbtool
- 	(jv_dbtool_SOURCES, jv_dbtool_LDFLAGS, jv_dbtool_LINK)
- 	(jv_dbtool_LDADD, jv_dbtool_DEPENDENCIES): New.
- 	* Makefile.in: Regenerate,
- 	* java/lang/VMCompiler.java: Import NoSuchAlgorithmException,
- 	Enumeration, StringTokenizer, Vector, PersistentByteMap.
- 	(precompiledMapFiles): New variable.
- 	(VMCompiler static intializer): Read "gnu.gcj.precompiled.db" to
- 	initialize precompiledMapFiles.
- 	(compileClass): Look at the database of precompiled class files
- 	before firing up gcj.
- 
- 	* gnu/gcj/runtime/VMClassLoader.java (findClass): Fix comment.
- 
- 2004-10-27  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/VMCompiler.java (compileClass): try looking for
- 	precompiledMapFiles.
- 	* gnu/gcj/runtime/PersistentByteMap.java: New file.
- 
- 2004-10-27  Tom Tromey  <tromey@redhat.com>
- 
- 	* link.cc (ensure_class_linked): Only resolve classes for
- 	compiled classes.
- 	(add_miranda_methods): Ensure interface supers are installed.
- 	(resolve_pool_entry): Better error message.
- 
- 2004-10-25  Tom Tromey  <tromey@redhat.com>
- 
- 	* boehm.cc (_Jv_MarkObj): Test aux_info before dereferencing it.
- 
- 	* java/util/ResourceBundle.java (tryBundle): Use
- 	Class.isAssignableFrom rather than catching ClassCastException.
- 
- 	* java/util/zip/InflaterInputStream.java (fill): Don't throw an
- 	exception if we hit EOF of `in'.
- 	(read): Handle case where inflating returns -1.
- 
- 	* gnu/java/text/WordBreakIterator.java (WordBreakIterator): Don't
- 	initialize `iter'.
- 	* gnu/java/text/SentenceBreakIterator.java
- 	(SentenceBreakIterator): Don't initialize `iter'.
- 	* gnu/java/text/LineBreakIterator.java (LineBreakIterator): Don't
- 	initialize `iter'.
- 	* gnu/java/text/CharacterBreakIterator.java
- 	(CharacterBreakIterator): Don't initialize `iter'.
- 	* gnu/java/text/BaseBreakIterator.java (BaseBreakIterator): New
- 	constructor.
- 	* java/text/BreakIterator.java: Updated documentation.
- 
- 2004-10-20  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/util/ResourceBundle.java (tryBundle): Also ignore
- 	ClassCastException.
- 
- 2004-10-18  Tom Tromey  <tromey@redhat.com>
- 
- 	* interpret.cc (do_post_miranda_hook): New method.
- 	* include/execution.h (_Jv_ExecutionEngine::post_miranda_hook):
- 	New field.
- 	(_Jv_CompiledEngine::do_post_miranda_hook): New method.
- 	(_Jv_CompiledEngine): Initialize new field.
- 	(_Jv_InterpreterEngine::do_post_miranda_hook): Declare.
- 	(_Jv_InterpreterEngine): Initialize new field.
- 	* link.cc (resolve_pool_entry): Put Miranda methods in target
- 	class.
- 	(ensure_method_table_complete): Call post_miranda_hook.
- 	* java/lang/natVMClassLoader.cc (defineClass): Don't set class'
- 	aux_info.
- 	* defineclass.cc (read_one_method_attribute): Use _Jv_AllocBytes.
- 	(parse): Set class' aux_info here.
- 
- 	* boehm.cc (_Jv_MarkObj): Mark `throws'.
- 
- 	* boehm.cc: Re-merged with trunk.
- 
- 2004-10-18  Andrew Haley  <aph@redhat.com>
- 
- 	PR java/18036:
- 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Reorganize
- 	and correct logic used to find interpreter.
- 
- 2004-10-13  Andrew Haley  <aph@redhat.com>
- 
- 	* interpret.cc (_Jv_InterpMethod::run): Initialize
- 	_Jv_StartOfInterpreter.
- 	(_Jv_StartOfInterpreter, _Jv_EndOfInterpreter): Functions removed.
- 	(_Jv_StartOfInterpreter, _Jv_EndOfInterpreter): New variables.
- 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Use
- 	_Unwind_FindEnclosingFunction to discover whether PC is within the
- 	interpreter.
- 
- 2004-10-13  Tom Tromey  <tromey@redhat.com>
- 
- 	* link.cc (find_iindex): Copy correct number of slots to new
- 	ioffsets.
- 
- 2004-10-12  Tom Tromey  <tromey@redhat.com>
- 
- 	* testsuite/libjava.loader/loader.exp (gcj_object_file_name): New
- 	proc.
- 	(gcj_loader_test_one): Use it.
- 	(gcj_loader_run): Likewise.
- 
- 	* prims.cc: Don't include FirstThread.h.
- 
- 2004-10-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* link.cc (ensure_method_table_complete): Ensure superclass
- 	Miranda methods installed.
- 
- 	* include/java-interp.h (class _Jv_JNIMethod): Added
- 	JV_MARKOBJ_DECL as a friend.
- 	* interpret.cc (ncode): Allocate jni_arg_types field with GC.
- 	* boehm.cc (_Jv_MarkObj): Skip abstract methods when marking
- 	interpreter method structures.  Mark jni_arg_types of JNI
- 	methods.
- 
- 	* defineclass.cc (parse): Use JV_STATE_READ.
- 	* java/lang/Class.h (JV_STATE_READ): New enum value.
- 
- 2004-10-05  Tom Tromey  <tromey@redhat.com>
- 
- 	* link.cc (resolve_pool_entry): Add signature info to missing
- 	method's information.
- 
- 	* gnu/gcj/util/Debug.java (Debug(int,boolean)): New constructor.
- 	* gnu/gcj/util/natDebug.cc (_Jv_StaticDeepDebug): New function.
- 
- 2004-10-04  Tom Tromey  <tromey@redhat.com>
- 
- 	* boehm.cc (_Jv_MarkObj): Correctly indicate base pointer when
- 	marking IDT.
- 
- 2004-09-29  Tom Tromey  <tromey@redhat.com>
- 
- 	* Makefile.am (libgcj_la_SOURCES): Mention link.cc, not
- 	resolve.cc.
- 	* include/jvm.h (class _Jv_Linker): Renamed from _Jv_Resolver.
- 	* jni.cc: Use _Jv_Linker.
- 	* interpret.cc: Use _Jv_Linker.
- 	* java/lang/reflect/natField.cc (getType): Use _Jv_Linker.
- 	* java/lang/natClassLoader.cc: Use _Jv_Linker.
- 	* java/lang/natVMClassLoader.cc (resolveClass): Use _Jv_Linker.
- 	* java/lang/Class.h: Use _Jv_Linker.
- 	* java/lang/natClass.cc (initializeClass): Use _Jv_Linker.
- 	* resolve.cc: Renamed ...
- 	* link.cc: ... here.  Use _Jv_Linker.
- 	* defineclass.cc (checkExtends): Use _Jv_Linker.
- 
- 2004-09-17  Tom Tromey  <tromey@redhat.com>
- 
- 	* defineclass.cc (handleCodeAttribute): Don't reference
- 	`deferred'.
- 	(handleMethodsEnd): Likewise.
- 	* include/java-interp.h (_Jv_MethodBase::deferred): Removed
- 	field.
- 	(_Jv_Defer_Resolution): Don't declare or define.
- 	* interpret.cc (do_create_ncode): Don't resolve deferred method
- 	pointers.
- 	* java/lang/Class.h (_Jv_Defer_Resolution): Don't declare.
- 	* resolve.cc (link_symbol_table): No need to defer resolution.
- 
- 2004-09-14  Tom Tromey  <tromey@redhat.com>
- 
- 	* boehm.cc (MAYBE_MARK): Remove unused `Exit' argument.
- 	(_Jv_MarkObj): Updated.
- 	(_Jv_MarkArray): Likewise.
- 
- 	* include/jvm.h (StringClass): Removed.
- 	* jni.cc (_Jv_JNI_ThrowNew): Don't use StringClass.
- 	* interpret.cc (_Jv_InitField): Don't use StringClass.
- 	* java/lang/natString.cc (_Jv_StringFindSlot): Don't use
- 	StringClass.
- 	(rehash): Likewise
- 	(intern): Likewise.
- 	(_Jv_FinalizeString): Likewise.
- 	(_Jv_NewStringUtf8Const): Likewise.
- 	(equals): Likewise.
- 	* prims.cc (JvConvertArgv): Don't use StringClass.
- 
- 	* gcj/field.h (struct _Jv_Field): Don't mention COMPACT_FIELDS.
- 	* resolve.cc (ensure_fields_laid_out): Don't mention
- 	COMPACT_FIELDS.
- 	* defineclass.cc (handleField): Don't mention COMPACT_FIELDS.
- 	* boehm.cc (_Jv_MarkObj): Don't mention COMPACT_FIELDS.
- 
- 	* java/lang/reflect/natField.cc (getType): Use resolve_field.
- 	* java/lang/natVMClassLoader.cc (resolveClass): New native
- 	implementation.
- 	(linkClass0): Removed.
- 	(markClassErrorState0): Likewise.
- 	* java/lang/natClassLoader.cc: Include execution.h.  Moved class
- 	preparation code to resolve.cc.
- 	(_Jv_RegisterClassHookDefault): Set class's execution engine if
- 	not already set.
- 	(_Jv_FindClass): Use wait_for_state.
- 	(_Jv_NewArrayClass): Likewise.  Simplified permissions setting.
- 	* java/lang/natClass.cc (_Jv_IsInstanceOf): Include execution.h.
- 	Moved interface table and class preparation code to resolve.cc.
- 	(finalize): Rewrote.
- 	(initializeClass): Simplified locking and class preparation.
- 	* java/lang/VMClassLoader.java (linkClass0): Removed.
- 	(markClassErrorState0): Likewise.
- 	(resolveClass): Now native.
- 	(transformException): New method.
- 	* java/lang/Class.h (getSuperclass): Don't try to resolve super
- 	reference.
- 	(getInterface): Likewise.
- 	(size): Likewise.
- 	(set_state): New method.
- 	(Class): Updated friend declarations.
- 	(verify): Field now private.
- 	(engine): New field.
- 	* include/jvm.h (class _Jv_Resolver): New class declaration.
- 	(_Jv_ResolveField): Removed declaration.
- 	(_Jv_CheckAccessNoInit): Likewise.
- 	(_Jv_isBinaryCompatible): Removed.
- 	* include/java-interp.h (class _Jv_MethodBase): Updated friend
- 	declarations.
- 	(class _Jv_InterpMethod): Likewise.
- 	(class _Jv_InterpClass): Likewise.
- 	(class _Jv_JNIMethod): Likewise.
- 	* include/execution.h: New file.
- 	* gnu/gcj/runtime/natSharedLibLoader.cc: Include execution.h.
- 	(_Jv_sharedlib_register_hook): Set `engine' on loaded class.
- 	Register class after setting fields.
- 	* resolve.cc: Include execution.h, VerifyError.h.  Moved
- 	interpreter-specific code to interpret.cc.
- 	(uaddr): New location.
- 	(struct aligner): Likewise.
- 	(ALIGNOF): Likewise.
- 	(INITIAL_IOFFSETS_LEN): Interface dispatch code moved here.
- 	(INITIAL_IFACES_LEN): Likewise.
- 	(null_idt): Likewise.
- 	(_Jv_GetMethodString): Likewise.
- 	(_Jv_ThrowNoSuchMethodError): Likewise.
- 	(_Jv_abstractMethodError): Likewise.
- 	(_Jv_Resolver::get_alignment_from_class): Renamed.
- 	(_Jv_Resolver::resolve_field): Likewise.
- 	(_Jv_Resolver::resolve_pool_entry): Likewise.
- 	(_Jv_Resolver::resolve_class_ref): Likewise.
- 	(_Jv_Resolver::prepare_constant_time_tables): Likewise.
- 	(_Jv_Resolver::indexof): Likewise.
- 	(_Jv_Resolver::get_interfaces): Likewise.
- 	(_Jv_Resolver::generate_itable): Likewise.
- 	(_Jv_Resolver::append_partial_itable): Likewise.
- 	(_Jv_Resolver::find_iindex): Likewise.
- 	(_Jv_Resolver::link_symbol_table): Likewise.
- 	(_Jv_Resolver::link_exception_table): Likewise.
- 	(_Jv_Resolver::layout_interface_methods): Likewise.
- 	(_Jv_Resolver::layout_vtable_methods): Likewise.
- 	(_Jv_Resolver::set_vtable_entries): Likewise.
- 	(_Jv_Resolver::make_vtable): Likewise.
- 	(_Jv_Resolver::ensure_fields_laid_out): Likewise.
- 	(_Jv_Resolver::ensure_class_linked): Likewise.
- 	(_Jv_Resolver::ensure_supers_installed): Likewise.
- 	(_Jv_Resolver::add_miranda_methods): Likewise.
- 	(_Jv_Resolver::ensure_method_table_complete): Likewise.
- 	(_Jv_Resolver::verify_class): Likewise.
- 	(_Jv_Resolver::wait_for_state): Likewise.
- 	* prims.cc (_Jv_soleCompiledEngine): New global.
- 	(_Jv_CheckAccess): Use _Jv_IsAssignableFromSlow.
- 	(_Jv_CheckAccessNoInit): Removed.
- 	* jni.cc (_Jv_JNI_GetAnyFieldID): Use resolve_field.
- 	* interpret.cc: Include platform.h, ClassFormatError.h,
- 	Modifier.h, execution.h.
- 	(_Jv_soleInterpreterEngine): New global.
- 	(compile): Use resolve_pool_entry.
- 	(run): Likewise.
- 	(_Jv_InitField): New location.
- 	(skip_one_type): Likewise.
- 	(get_ffi_type_from_signature): Likewise.
- 	(_Jv_count_arguments): Likewise.
- 	(init_cif): Likewise.
- 	(ncode_closure): Likewise.
- 	(ffi_closure_fun): Likewise.
- 	(ncode): Likewise.
- 	(throw_class_format_error): Likewise.
- 	(throw_class_format_error): Likewise.
- 	(_Jv_InterpreterEngine::do_verify): New method.
- 	(_Jv_InterpreterEngine::do_create_ncode): Likewise.
- 	(_Jv_InterpreterEngine::do_allocate_static_fields): Likewise.
- 	(_Jv_InterpreterEngine::do_resolve_method): Likewise.
- 	* defineclass.cc: Include execution.h.
- 	(_Jv_ClassReader): Initialize size_in_bytes, vtable_method_count,
- 	engine.
- 	(checkExtends): Ensure superclass has supers installed.
- 	(_Jv_ClassNameSamePackage): Clarify usage constraints.
- 	* boehm.cc (GC_enable, GC_disable): Declare at top of file.
- 	(_Jv_MarkObj): Unconditionally mark vtable.  Mark interface
- 	dispatch tables.
- 
- 2004-09-13  Tom Tromey  <tromey@redhat.com>
- 
- 	* mauve-libgcj: List some classes we don't have.
- 
- 2004-09-10  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/Class.h (_Jv_getInterfaceMethod(): new friend.
- 	* java/lang/natClass.cc (initializeClass): Check itable.
- 	(_Jv_getInterfaceMethod): New.
- 	(_Jv_LinkSymbolTable): Rewrite code that handles inerface calls.
- 	Check that an interface method isn't called with invokevirtual.
- 
- 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Make sure
- 	super_meth is virtual.
- 
- 2004-09-01  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/lang/Class.h (_Jv_CheckAccessNoInit): Declare as friend.
- 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Use
- 	_Jv_CheckAccessNoInit.
- 	* include/jvm.h (_Jv_CheckAccessNoInit): Declare.
- 	* prims.cc (_Jv_CheckAccessNoInit): New method.
- 
- 	* java/lang/reflect/natMethod.cc (invoke): Check access against
- 	declaring class, not object's class.
- 	* java/lang/natClass.cc (_Jv_LookupDeclaredMethod): Added another
- 	argument.
- 	(_Jv_LayoutVTableMethods): Perform checks of accessibility of
- 	overridden method.
- 	* java/lang/Class.h (_Jv_LookupDeclaredMethod): Added another
- 	argument.
- 
- 2004-08-30  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/natClass.cc (_Jv_CheckAssignment): Catch
- 	ClassNotFoundException.
- 	Throw NoClassDefFoundError.
- 
- 	* java/lang/natClassLoader.cc (_Jv_FindClassInCache): Remove call
- 	to klass->verify() from here ...
- 	(_Jv_PrepareCompiledClass): ...and put it here.
- 
- 2004-08-27  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/natClassLoader.cc (_Jv_FindClassInCache): Call
- 	klass->verify().
- 	* java/lang/natClass.cc (_Jv_LinkSymbolTable): Add debugging.
- 	(_Jv_LinkSymbolTable): Call Jv_LayoutClass on target class.
- 
- 2004-08-27  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/lang/Class.h (_Jv_IsAssignableFromSlow): Declare as
- 	friend.
- 	* java/lang/natClass.cc (_Jv_CheckAssignment): New function.
- 	(_Jv_IsAssignableFromSlow): New function.
- 	Include VerifyError.h.
- 	* include/jvm.h (_Jv_CheckAssignment): Declare.
- 
- 2004-08-18  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/VMCompiler.java (loadSharedLibrary): Add className
- 	argument.  Pass it to findClass instead of fileName.
- 	(compileClass): Pass class name to loadSharedLibrary.
- 
- 2004-06-22  Andrew Haley  <aph@redhat.com>
- 
- 	* testsuite/libjava.compile/compile.exp: Force indirect dispatch.
- 
- 2004-06-15  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/natSystem.cc (getenv0): Don't assume environment
- 	variable is Latin 1 coded.
- 
- 2004-06-07  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/System.java: (getenv0): New method.
- 	(getenv): Add security check.  Do the right thing.
- 	* java/lang/natSystem.cc (getenv0): New method.
- 
- 2004-04-19    Andrew Haley  <aph@redhat.com>
- 
- 	* gnu/gcj/runtime/NameFinder.java: Call waitFor() on the processes
- 	we destroy.
- 
- 	* gnu/java/net/natPlainSocketImplPosix.cc (read): The value byte
- 	is returned as an int in the range 0 to 255.
- 
- 2004-08-13  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/lang/natClass.cc (_Jv_LinkSymbolTable): Prepare the target
- 	class if it is interpreted.
- 
- 2004-08-12  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/lang/natClassLoader.cc (_Jv_WaitForState): Updated.
- 	* java/lang/Class.h (_Jv_ResolveClassRef): Updated declaration.
- 	(Class::getSuperclass): Updated.
- 	(Class::getInterfaces): Likewise.
- 	(Class::size): Updated.
- 	(_Jv_LayoutClass): Updated declaration.
- 	* java/lang/natClass.cc (_Jv_ResolveClassRef): Changed interface.
- 	Synchronize on class.
- 	(_Jv_LayoutClass): Changed interface.
- 	(initializeClass): Updated.
- 	(_Jv_LinkSymbolTable): Likewise.
- 
- 	* java/lang/Class.h (Class::_Jv_isBinaryCompatible): Declare as
- 	friend.
- 	* java/lang/natClassLoader.cc (_Jv_WaitForState): Use
- 	_Jv_isBinaryCompatible.
- 	* java/lang/natClass.cc (initializeClass): Use
- 	_Jv_isBinaryCompatible.
- 	(_Jv_LinkSymbolTable): Likewise.
- 	* include/jvm.h (_Jv_isBinaryCompatible): New function.
- 
- 2004-08-11  Tom Tromey  <tromey@redhat.com>
- 
- 	* gcj/javaprims.h: Regenerated.
- 	* java/lang/natClassLoader.cc (getClassLoader0): Removed.
- 	(_registerClass): Likewise.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (core_java_source_files): Added VMCompiler.
- 	* java/lang/Compiler.java: Rewrote in terms of VMCompiler.
- 	* java/lang/VMCompiler.java: New file.
- 	* gnu/gcj/runtime/SharedLibHelper.java (findClass): Removed
- 	`verbose' code.
- 	(copyFile): Don't use fully-qualified name.
- 	(h): Removed.
- 	* java/lang/natVMClassLoader.cc: Include VMCompiler.h.
- 	(defineClass): Use VMCompiler.
- 	* java/lang/ClassLoader.java (defineClass): Removed jit
- 	compilation code and `verbose' code.
- 	(getClassLoader0): Removed.
- 	(_registerClass): Likewise.
- 	(SharedLibHelpers): Removed.
- 
- 2004-08-10  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/net/URLClassLoader.java (URLLoader(URLClassLoader, URL,
- 	URL)): New constructor.
- 	(SoURLLoader): Likewise.
- 	(JarURLLoader): Create SoURLLoader with override URL.
- 
- 2004-08-10  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (interpret.lo): New rule.
- 
- 2004-08-05  Andrew Haley  <aph@redhat.com>
- 
- 	* java/net/URLClassLoader.java (JarURLLoader.JarURLLoader): Look
- 	aside for "GCJLIBS" in directory where jarfiles are loaded.
- 	(JarURLLoader.getClass): New method.
- 	(JarURLLoader.toString):  New method.
- 	(FileResource.toString):  New method.
- 	* java/lang/natClassLoader.cc (_Jv_RegisterClassHookDefault):
- 	Remove "Duplicate class registration: " bug.
- 	(_registerClass): New method.
- 	* java/lang/natClass.cc (_Jv_LinkSymbolTable): Check method index.
- 	(_Jv_LinkSymbolTable): Call _Jv_LayoutClass().
- 	Add debugging.
- 	(_Jv_LayoutClass): Use getSuperclass() rather than directly
- 	accessing the field.
- 	* java/lang/ClassLoader.java (SharedLibHelpers): New variable.
- 	(defineClass): Call gcj to JIT-compile a class.
- 	(_registerClass): New method.
- 	* gnu/gcj/runtime/SharedLibHelper.java (findHelper): A shared
- 	library name can refer to more than one loaded library, so use a
- 	Set of SharedLibHelpers.
- 	If a shared library is already loaded, take a copy.
- 	(copyFile): New function.
- 
- 	* testsuite/libjava.compile/compile.exp: Force
- 	-findirect-dispatch.
- 
- 	* java/security/BasicPermission.java: Remove bogus checks.
- 
- 	* java/lang/System.java (getenv0): New method.
- 	* java/lang/natSystem.cc (getenv0): New method.
- 
- 2004-05-24  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/natClass.cc (_Jv_LayoutClass): Remove warning message.
- 
- 2004-04-20  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* Merged with HEAD as of 20040514. Diff against
- 	gcj-abi-2-merge-20040514.
- 
- 2004-04-16  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/natClassLoader.cc (_Jv_WaitForState): Call
- 	_Jv_LayoutClass.
- 	(_Jv_PrepareCompiledClass): Cast address to uaddr for comparison.
- 	(_Jv_PrepareCompiledClass): If we throw an exception during
- 	preparation, restore state.
- 	(ClassLoader::getClassLoader0): New method.
- 
- 	* java/lang/natClass.cc (get_alignment_from_class): Moved here
- 	from resolve.cc.
- 	(ALIGNOF): Use offsetof, not __alignof__.
- 	(_Jv_ResolveClassRef): Resolve a reference to a class in a
- 	constant pool.
- 	(getInterfaces): Emit debug output if interface hasn't been
- 	resolved.
- 	(initializeClass): Call _Jv_LayoutClass.
- 	(_Jv_LinkSymbolTable): Add debugging output.
- 	(_Jv_LinkSymbolTable): NoClassDefFoundError if target_class isn't
- 	found.
- 	(_Jv_LinkSymbolTable): Call _Jv_PrepareClass.
- 	(_Jv_LinkSymbolTable): Pass the real class loader to
- 	_Jv_FindClass.
- 	(_Jv_linkExceptionClassTable): Don't throw if we fail to find an
- 	exception class.
- 	(_Jv_LinkSymbolTable): Assert if we find a static field reference
- 	to an interpreted class.
- 	(_Jv_LayoutVTableMethods): Use klass->getSuperclass to get the
- 	superclass.
- 	(_Jv_LayoutClass): Moved here; it was part of _Jv_PrepareClass in
- 	resolve.cc.
- 
- 	* java/lang/VMSecurityManager.java: Check for the system class
- 	loader as well as loader != null.
- 
- 	* java/lang/SecurityManager.java (checkPermission): Remove
- 	security check.
- 	(checkRead): Likewise.
- 	(checkConnect): Likewise.
- 
- 	* java/lang/ClassLoader.java (loadClass): Include all class
- 	loaders in stack trace string.
- 	Look for class in "gcjlib.so" in the same directory.
- 	(getSystemClassLoader) Use getClassLoader0.
- 	(getClassLoader0): New native method.
- 
- 	* java/lang/Class.h (getSuperclass): New method.
- 	(getInterface): New method.
- 	(size): Lay out class if needed.
- 	(firstMethodIndex): New method.
- 	(Jv_ResolveClassRef): New declaration.
- 	(_Jv_LinkSymbolTable): New declaration.
- 
- 	* java/io/ObjectOutputStream.java: Add DEBUG statements
- 	everywhere.
- 	(dumpElementln): New method.
- 	(depth): New field.
- 	* java/io/ObjectInputStream.java (MyIOException): new, for
- 	debugging.
- 	Everywhere: use MyIOException rather than IOException.
- 	Indent debugging output to make nesting visible.
- 	(currentClassLoader): Make native
- 	(callersClassLoader): New field.
- 	(depth): New field.
- 	* java/io/natObjectInputStream.cc (getCallersClassLoader): New
- 	method.
- 
- 	(readObject): ENDBLOCKDATA is generated if the class has a write
- 	method, not if it has a read method.
- 
- 	* include/jvm.h (_Jv_CallAnyMethodA): Add new arg, iface.
- 
- 	* gnu/javax/rmi/CORBA/DelegateFactory.java: Use the
- 	getContextClassLoader form the current thread after our own class
- 	loader.
- 
- 	* gnu/gcj/runtime/SharedLibHelper.java (findClass): Class loader
- 	debugging.
- 	(toString): New method.
- 
- 	* verify.cc (class _Jv_BytecodeVerifier): Don't directly access
- 	interfaces array.
- 
- 	* resolve.cc (_Jv_PrepareMissingMethods): If interface looks like
- 	a constant pool entry, resolve it now.
- 	(_Jv_PrepareClass): Break out part of this function to Jv_LayoutClass
- 	in natClass.cc.
- 	Move get_alignment_from_class to natClass.cc.
- 
- 	* prims.cc (_Jv_AllocObjectNoFinalizer): Use size field from class.
- 	(_Jv_AllocObjectNoInitNoFinalizer): Likewise.
- 
- 	* defineclass.cc (checkExtends): Don't access superclass field
- 	directly.
- 
- 	* Makefile.in: regenerate.
- 
- 	* gnu/gcj/util/natDebug.cc: New
- 	* gnu/gcj/util/Debug.java: New.
- 
- 	* Makefile.am (java/io/ObjectInputStream.lo): Use
- 	-fno-optimize-sibling-calls.
- 
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Use
- 	_Jv_LookupInterfaceMethodIdx to calculate the address of a method
- 	in an interface.
- 	* include/jvm.h (_Jv_CallAnyMethodA): Add new arg: iface.
- 
- 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
- 
- 	* configure: Regenerate for libtool change.
- 
- 2004-11-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/security/PolicyFile.java: New file.
- 	* Makefile.am: Added gnu/java/security/PolicyFile.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-11-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Character.java, scripts/unicode-blocks.pl:
- 	Reorder "final static" to "static final".
- 
- 2004-11-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/ResourceBundle.java: Reformatted.
- 	(tryBundle): Fixed javadoc.
- 
- 2004-11-24  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/text/MessageFormat.java
- 	(formatInternal): Made private.
- 
- 2004-11-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/DirectByteBufferImpl.java
- 	(ReadWrite.ReadWrite): New constructor.
- 	(DirectByteBufferImpl): Likewise.
- 	* jni.cc (_Jv_JNI_NewDirectByteBuffer):
- 	Use DirectByteBufferImpl.ReadWrite.
- 	* Makefile.am:
- 	Generate java/nio/DirectByteBufferImpl$ReadWrite.h.
- 	* Makefile.in: Rgenerated.
- 
- 2004-11-24  Jeroen Frijters  <address@bogus.example.com>
- 
- 	* java/nio/DirectByteBufferImpl.java
- 	(ReadOnly): New inner subclass.
- 	(ReadWrite): New inner subclass.
- 	(owner): Made final and private.
- 	(address): Made final.
- 	(DirectByteBufferImpl(int)): New constructor.
- 	(DirectByteBufferImpl(Object,RawData,int,int,int)): New constructor.
- 	(DirectByteBufferImpl(Object,RawData,int,int,int,boolean)): Removed.
- 	(allocate): Modified to instantiate ReadWrite subclass.
- 	(finalize): Fixed to only free the buffer, if we own it.
- 	(put): Removed read-only check.
- 	(slice, duplicate): Modified to instantiate appropriate subclass.
- 	(isReadOnly): Removed.
- 	* java/nio/MappedByteBufferImpl.java
- 	(slice, duplicate): Modified to instantiate appropriate
- 	DirectByteBufferImpl subclass.
- 
- 2004-11-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/NIOServerSocket.java: Added email to @author tag.
- 	* java/nio/DirectByteBufferImpl.java:
- 	Moved native methods to java.nio.VMDirectByteBuffer class.
- 	* java/nio/MappedByteBufferImpl.java:
- 	Use native methods from java.nio.VMDirectByteBuffer class.
- 	* java/nio/VMDirectByteBuffer.java: New file,
- 	* java/nio/natDirectByteBufferImpl.cc:
- 	Moved all methods into java.nio.VMDirectByteBuffer class.
- 	* java/nio/channels/spi/AbstractSelectableChannel.java
- 	(register): Only re-use valid keys.
- 	* Makefile.am: Added java/nio/VMDirectByteBuffer.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-11-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/DirectByteBufferImpl.java,
- 	java/nio/MappedByteBufferImpl.java:
- 	Reformatted.
- 
- 2004-11-23  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
- 
- 	* testsuite/lib/libjava.exp,
- 	testsuite/libjava.jacks/jacks.exp: Use new procs in target-libpath.exp.
- 
- 2004-11-23  Richard Sandiford  <rsandifo@redhat.com>
- 
- 	* configure.host: Enable the interpreter for mips*-*-linux*.
- 
- 2004-11-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/String.java (rehash): Removed.
- 	* java/lang/natString.cc (rehash): Made static.
- 	(_Jv_NewStringUtf8Const): Use static rehash method.
- 
- 2004-11-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.in, aclocal.m4, configure, gcj/Makefile.in,
- 	include/Makefile.in, testsuite/Makefile.in: Regenerated.
- 
- 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
- 
- 	PR target/18444
- 	* configure.ac (threading): Accept 'posix95'.
- 	* configure: Regenerate.
- 
- 2004-11-22  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/SocketChannelImpl.java
- 	(read): Made check for blocking un-ambiguous.
- 	Removed wrong check for data array length.
- 
- 2004-11-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/SocketChannelImpl.java
- 	(read): Only return 0 when no bytes for reading available in
- 	non-blocking mode.
- 	* java/nio/channels/SocketChannel.java:
- 	Added some missing @return tags.
- 
- 2004-11-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/beans/PropertyChangeSupport.java
- 	(propertyChangeSupportSerializedDataVersion): Made static.
- 	* java/beans/VetoableChangeSupport.java
- 	(propertyChangeSupportSerializedDataVersion): Likewise.
- 
- 2004-11-18  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/net/URLStreamHandler.java
- 	(parseURL): Fixed file path canonicalisation.
- 
- 2004-11-18  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/net/URLStreamHandler.java
- 	(parseURL): Fixed file path canonicalisation.
- 
- 2004-11-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/URLClassLoader.java: Whitespace cleanup.
- 
- 2004-11-18  Robert Schuster <address@bogus.example.com>
- 
- 	Complete 1.4 support
- 	* java/beans/PropertyDescriptor.java:
- 	(setReadMethod): New method
- 	(setWriteMethod): New method
- 	(equals): Implemented (1.4)
- 	(checkMethods): operates on arguments now (private)
- 
- 
- 2004-11-18  Mattias Rehnberg  <Mattias.Rehnberg@home.se>
- 
- 	* java/net/Inet6Address.java (getHostAddress): Fix textual
- 	representation of IPv6 address with embedded zeroes
- 	to conform to RFC 2373.
- 
- 2004-11-18  Jeroen Frijters  <address@bogus.example.com>
- 
- 	* java/lang/StackTraceElement.java: Made final.
- 	* java/nio/channels/Channels.java: Added private constructor.
- 	* java/rmi/Naming.java: Added private constructor.
- 	* java/rmi/registry/LocateRegistry.java: Added private constructor.
- 	* java/rmi/server/RMIClassLoader.java: Added private constructor.
- 	* java/security/KeyPairGeneratorSpi.java
- 	(clone): Made protected and simplified implementation.
- 	* java/text/DateFormat.java
- 	(allFields): Made package accessible.
- 	* java/text/DecimalFormat.java
- 	(formatInternal): Made private.
- 	* java/text/Format.java
- 	(formatInternal): Made private.
- 	* java/util/logging/Handler.java: Made constructor protected.
- 	* java/util/regex/Matcher.java: Made final.
- 	* java/util/regex/Pattern.java: Made final.
- 	* javax/crypto/CipherInputStream.java
- 	(mark): Corrected mark parameter type (from long to int).
- 	* javax/crypto/ExemptionMechanism.java
- 	(finalize): Added.
- 	* javax/crypto/Mac.java
- 	(getMacLength): Made final.
- 	(clone): Made final.
- 	* javax/imageio/ImageIO.java: Added private constructor.
- 	* javax/imageio/stream/ImageInputStreamImpl.java
- 	(checkClosed): Made final.
- 	* javax/net/ssl/SSLPermission.java: Made final.
- 	* javax/print/DocFlavor.java
- 	(hostEncoding): Added work-around to prevent the field from being
- 	a compile time constant.
- 	* javax/print/attribute/AttributeSetUtilities.java: Added private
- 	constructor.
- 	(UnmodifiableDocAttributeSet): Made private.
- 	(UnmodifiablePrintJobAttributeSet): Made private.
- 	(UnmodifiablePrintRequestAttributeSet): Made private.
- 	(UnmodifiablePrintServiceAttributeSet): Made private.
- 	(SynchronizedAttributeSet): Made private.
- 	(SynchronizedDocAttributeSet): Made private.
- 	(SynchronizedPrintJobAttributeSet): Made private.
- 	(SynchronizedPrintRequestAttributeSet): Made private.
- 	(SynchronizedPrintServiceAttributeSet): Made private.
- 	* javax/security/auth/PrivateCredentialPermission.java: Made final.
- 
- 2004-11-18  Craig Black  <craig.black@aonix.com>
- 
- 	* gnu/java/beans/BeanInfoEmbryo.java: Use TreeMap for proper sorting.
- 
- 2004-11-18  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
- 
- 	* Makefile.am: Correct friend function declaration.
- 	* Makefile.in: Regenerated.
- 	* include/boehm-gc.h (JV_MARKOBJ_DECL, JV_MARKARRAY_DECL): Add
- 	scope to function names.  Declare functions directly.
- 	* libjava/java/lang/Class.h
- 	(java::lang::Class): Correct friend class declaration.
- 	(_Jv_InitClass, _Jv_GetArrayClass): Move definition to global
- 	scope.
- 	* libjava/java/lang/Class.h
- 	(java::lang::Object): Correct friend class declaration.
- 
- 2004-11-17  David Daney  <ddaney@avtrex.com>
- 
- 	* java/io/BufferedInputStream.java (skip): Return zero on EOF.
- 
- 2004-11-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/Socket.java (getPort): Return 0 in error case.
- 
- 2004-11-17  Michael Koch  <konqueror@gmx.de>
- 
- 	*  java/nio/DirectByteBufferImpl.java
- 	(owner): Updated comment.
- 	(allocate): New method.
- 
- 2004-11-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/URL.java (URL): Handle case when argument is null.
- 
- 2004-11-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/beans/Beans.java,
- 	java/beans/PropertyChangeEvent.java,
- 	java/beans/PropertyEditorSupport.java:
- 	Fixed javadocs.
- 
- 2004-11-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/Timer.java (DEFAULT_SIZE): Made static.
- 
- 2004-11-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/InetAddress.java (getCanonicalHostName):
- 	Support IPv6 addresses.
- 
- 2004-11-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Object.java: Added javadocs all over (merged from GNU
- 	classpath).
- 
- 2004-11-16  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* java/security/Security.java (Security): Silence the warning about no
- 	providers found in the no debug case.
- 
- 2004-11-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/InetAddress.java
- 	(toString): Merged from GNU classpath.
- 
- 2004-11-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/geom/doc-files/Area-1.png,
- 	java/awt/geom/doc-files/Ellipse-1.png,
- 	java/awt/geom/doc-files/GeneralPath-1.png:
- 	New files.
- 
- 2004-11-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/Currency.java (cache): Fix modifier order.
- 
- 2004-11-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/BufferedReader.java,
- 	java/io/FileInputStream.java,
- 	java/io/FileOutputStream.java,
- 	java/io/FileWriter.java,
- 	java/io/OutputStreamWriter.java,
- 	java/io/PipedInputStream.java,
- 	java/io/PipedOutputStream.java,
- 	java/io/PipedReader.java,
- 	java/io/PipedWriter.java,
- 	java/io/PrintStream.java,
- 	java/io/PushbackInputStream.java,
- 	java/io/RandomAccessFile.java,
- 	java/io/Reader.java,
- 	java/io/StreamTokenizer.java,
- 	java/io/StringReader.java,
- 	java/net/NetworkInterface.java,
- 	java/net/URLClassLoader.java,
- 	java/nio/ByteOrder.java,
- 	java/nio/channels/Channel.java:
- 	Fixed javadocs all over.
- 
- 2004-11-16  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* Makefile.am: Add imported files.
- 	* Makefile.in: Regenerate.
- 
- 	2004-10-24  Casey Marshall  <csm@gnu.org>
- 
- 	* javax/security/auth/login/LoginContext.java: Implemented.
- 	* javax/security/auth/login/Configuration.java (getConfig): New method.
- 	* javax/security/auth/spi/LoginModule.java,
- 	* gnu/java/security/action/GetSecurityPropertyAction.java: New files.
- 
- 2004-11-15  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	Import/Merge the X.509 certificate code from Classpath.
- 
- 	* Makefile.am: Add imported files.
- 	* Makefile.in: Regenerate.
- 
- 	2004-11-07  Casey Marshall  <csm@gnu.org>
- 
- 	* gnu/java/security/provider/Gnu.java(<init>): Add entries in a
- 	priviliged action. Add new algorithms.
- 	* gnu/java/security/provider/X509CertificateFactory.java
- 	(engineGenerateCertificate): Chain exceptions.
- 	(engineGenerateCertificates): Likewise.
- 	(engineGenerateCRL): Likewise.
- 	(engineGenerateCRLs): Likewise.
- 	(engineGenerateCertPath): New methods.
- 	(generateCert): Throw exception if 'inStream' is null.
- 	(generateCRL): Likewise.
- 	* gnu/java/security/x509/X500DistinguishedName.java: Replaced with
- 	version from GNU Crypto CVS.
- 	* gnu/java/security/x509/X509CRL.java: Likewise.
- 	* gnu/java/security/x509/X509CRLEntry.java: Likewise.
- 	* gnu/java/security/x509/X509Certificate.java: Likewise.
- 	* java/security/cert/TrustAnchor.java: Call 'toString' and not
- 	toRFC2253.
- 	* gnu/java/security/provider/CollectionCertStoreImpl.java,
- 	* gnu/java/security/provider/EncodedKeyFactory.java,
- 	* gnu/java/security/provider/GnuDHPublicKey.java,
- 	* gnu/java/security/provider/GnuRSAPrivateKey.java,
- 	* gnu/java/security/provider/GnuRSAPublicKey.java,
- 	* gnu/java/security/provider/MD2withRSA.java,
- 	* gnu/java/security/provider/MD4withRSA.java,
- 	* gnu/java/security/provider/MD5withRSA.java,
- 	* gnu/java/security/provider/PKIXCertPathValidatorImpl.java,
- 	* gnu/java/security/provider/RSA.java,
- 	* gnu/java/security/provider/RSAKeyFactory.java,
- 	* gnu/java/security/provider/SHA1withRSA.java,
- 	* gnu/java/security/x509/GnuPKIExtension.java,
- 	* gnu/java/security/x509/PolicyNodeImpl.java,
- 	* gnu/java/security/x509/Util.java,
- 	* gnu/java/security/x509/X509CRLSelectorImpl.java,
- 	* gnu/java/security/x509/X509CertPath.java,
- 	* gnu/java/security/x509/X509CertSelectorImpl.java,
- 	* gnu/java/security/x509/ext/AuthorityKeyIdentifier.java,
- 	* gnu/java/security/x509/ext/BasicConstraints.java,
- 	* gnu/java/security/x509/ext/CRLNumber.java,
- 	* gnu/java/security/x509/ext/CertificatePolicies.java,
- 	* gnu/java/security/x509/ext/ExtendedKeyUsage.java,
- 	* gnu/java/security/x509/ext/Extension.java,
- 	* gnu/java/security/x509/ext/GeneralNames.java,
- 	* gnu/java/security/x509/ext/IssuerAlternativeNames.java,
- 	* gnu/java/security/x509/ext/KeyUsage.java,
- 	* gnu/java/security/x509/ext/PolicyConstraint.java,
- 	* gnu/java/security/x509/ext/PolicyMappings.java,
- 	* gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java,
- 	* gnu/java/security/x509/ext/ReasonCode.java,
- 	* gnu/java/security/x509/ext/SubjectAlternativeNames.java,
- 	* gnu/java/security/x509/ext/SubjectKeyIdentifier.java: New files.
- 
- 	2004-11-07  Casey Marshall  <csm@gnu.org>
- 
- 	* gnu/java/security/x509/X509CRL.java:
- 	Missed import statements in previous checkin.
- 
- 	2004-11-07  Casey Marshall  <csm@gnu.org>
- 
- 	* gnu/java/security/x509/X509CertPath.java (parse): Fixed reference
- 	to 'X509CertificateImpl' from previous checkin.
- 
- 2004-11-12  Andrew Pinski  <pinskia@physics.uc.edu>
- 
- 	PR other/14264
- 	* testsuite/lib/libjava.exp: Set LC_ALL and LANG to C.
- 
- 2004-11-11  Casey Marshall  <csm@gnu.org>
- 
- 	* gnu/java/nio/FileLock.java (isValid): locks are valid if the
- 	channel is open.
- 	* gnu/java/nio/channels/natFileChannelPosix.cc (lock): use
- 	'F_RDLCK' for shared locks, 'F_WRLCK' for exclusive locks.
- 
- 2004-11-11  Robert Schuster <thebohemian@gmx.net>
- 
- 	Fixed regression:
- 	* gnu/java/beans/IntrospectionIncubator.java:
- 	(addMethod): Corrected classification of normal and property methods.
- 	(capitalize): Added documentation.
- 	(DoubleKey): [class] Added documentation.
- 
- 2004-11-09  Tom Tromey  <tromey@redhat.com>
- 
- 	* include/jni.h: Added FIXME.
- 
- 2004-11-08  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/util/GregorianCalendar.java: Removed unused imports.
- 	* java/util/Vector.java: Removed unused import.
- 
- 2004-11-07  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Process.java:
- 	Import cleanups.
- 
- 2004-11-07  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/util/zip/ZipEntry.java
- 	(KNOWN_SIZE, KNOWN_CSIZE, KNOWN_CRC, KNOWN_TIME): Made final.
- 
- 2004-11-07  Robert Schuster  <theBohemian@gmx.net>
- 
- 	Fixes bug #10908
- 	* gnu/java/beans/IntrospectionIncubator.java:
- 	(addMethod): static methods are discarded now, too.
- 
- 2004-11-07  Andrew John Hughes <gnu_andrew@member.fsf.org>
- 
- 	* java/util/GregorianCalendar.java
- 	Added/amended documentation.
- 
- 2004-11-07  Andrew John Hughes <gnu_andrew@member.fsf.org>
- 
- 	* java/util/Collections.java
- 	Added documentation.
- 	* java/util/SortedMap.java
- 	Clarified some method examples.
- 	* java/util/SortedSet.java
- 	Clarified some method examples.
- 
- 2004-11-07  Andrew John Hughes <gnu_andrew@member.fsf.org>
- 
- 	* java/util/Currency.java
- 	Documented variables and methods more fully.
- 	Caches the currency instances, so that a request
- 	for a locale, l, only ever returns the same
- 	instance (i.e. successive calls to getInstance(l)
- 	are reference equivalent (==)).
- 
- 2004-11-07  Andrew John Hughes  <gnu_andrew@member.fsf.org>
- 
- 	* java/util/Date.java
- 	Added missing documentation.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/zip/CheckedInputStream.java,
- 	java/util/zip/InflaterInputStream.java,
- 	java/util/zip/ZipFile.java,
- 	java/util/zip/ZipInputStream.java:
- 	Import cleanups.
- 
- 2004-11-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/java/rmi/server/UnicastConnectionManager.java (clients): Now
- 	package-private.
- 	(connections): Likewise.
- 	(scavenger): Likewise.
- 	* gnu/java/rmi/server/ConnectionRunnerPool.java (freelist): Now
- 	package-private.
- 	* gnu/java/rmi/server/UnicastRemoteCall.java (vec): Now
- 	package-private.
- 	(ptr): Likewise.
- 	* gnu/classpath/ServiceFactory.java (log): Now package-private.
- 
- 2004-11-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* javax/naming/directory/BasicAttributes.java (attributes): Now
- 	package-private.
- 	* javax/imageio/spi/ServiceRegistry.java (categories): Now
- 	package-private.
- 
- 2004-11-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/net/URLClassLoader.java (URLClassLoader): Now
- 	package-private.
- 	* java/nio/charset/CoderResult.java (CoderResult): Now
- 	package-private.
- 	(get): Likewise.
- 	(Cache): Likewise.  Don't synchronize on `this'.
- 	* java/rmi/server/RMIClassLoader.java (MyClassLoader): Now
- 	package-private.
- 	* java/util/TimeZone.java (timezones): Now package-private.
- 
- 2004-11-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/security/Permissions.java (perms): Now package-private.
- 	* java/security/UnresolvedPermission.java (permissions): Now
- 	package-private.
- 
- 2004-11-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/io/FilePermission.java: Reindented.
- 
- 2004-11-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/io/ObjectOutputStream.java (currentObjectStreamClass): Now
- 	package-private.
- 	(setBlockDataMode): Likewise.
- 
- 2004-11-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/java/nio/charset/ISO_8859_1.java (Decoder): Now
- 	package-private.
- 	(Encoder): Likewise.
- 	* gnu/java/nio/charset/UTF_8.java (Decoder): Now package-private.
- 	(Encoder): Likewise.
- 	* gnu/java/nio/charset/US_ASCII.java (Decoder): Now
- 	package-private.
- 	(Encoder): Likewise.
- 
- 2004-11-06  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.am: Add new javax.imageio files.
- 	* Makefile.in: Regenerated.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/event/IIOReadProgressListener.java,
-         javax/imageio/event/IIOReadUpdateListener.java,
- 	javax/imageio/event/IIOReadWarningListener.java,
- 	javax/imageio/event/IIOWriteProgressListener.java,
- 	javax/imageio/event/IIOWriteWarningListener.java,
- 	javax/imageio/metadata/IIOMetadataFormat.java,
- 	javax/imageio/stream/FileCacheImageInputStream.java,
- 	javax/imageio/stream/FileCacheImageOutputStream.java,
- 	javax/imageio/stream/ImageInputStreamImpl.java:
- 	Import cleanup.
- 	* javax/imageio/metadata/package.html: New file.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/spi/ImageReaderSpi.java
- 	(isOwnReader): New method.
- 	* javax/imageio/spi/ImageWriterSpi.java
- 	(isOwnWriter): Likewise.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/ImageWriter.java
- 	(convertImageMetadata): New abstract method.
- 	(convertStreamMetadata): Likewise.
- 	(write): Likewise.
- 	* javax/imageio/stream/FileCacheImageInputStream.java
- 	(close): Fixed setting of stream to null.
- 	(checkStreamClosed): Throws IOException.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/stream/FileCacheImageInputStream.java,
- 	javax/imageio/stream/FileCacheImageOutputStream.java,
- 	javax/imageio/stream/FileImageInputStream.java,
- 	javax/imageio/stream/FileImageOutputStream.java,
- 	javax/imageio/stream/MemoryCacheImageInputStream.java,
- 	javax/imageio/stream/MemoryCacheImageOutputStream.java:
- 	New files.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/metadata/IIOInvalidTreeException.java,
- 	javax/imageio/metadata/IIOMetadataFormatImpl.java,
- 	javax/imageio/metadata/IIOMetadataNode.java:
- 	New stub files.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/stream/ImageInputStreamImpl.java,
- 	javax/imageio/stream/ImageOutputStreamImpl.java:
- 	New files.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/ImageIO.java:
- 	Added much new methods.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/ImageReader.java,
- 	javax/imageio/ImageWriter.java,
- 	javax/imageio/spi/ImageWriterSpi.java:
- 	Add SOME new methods.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/IIOParam.java,
- 	javax/imageio/ImageReadParam.java,
- 	javax/imageio/ImageReader.java,
- 	javax/imageio/ImageWriter.java:
- 	Mostly implemented.
- 	* javax/imageio/spi/ImageReaderSpi.java,
- 	javax/imageio/spi/ImageWriterSpi.java:
- 	New files.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/ImageWriteParam.java,
- 	javax/imageio/metadata/IIOMetadataFormat.java:
- 	Implemented.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/ImageTypeSpecifier.java:
- 	Mostly implemented.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/metadata/IIOMetadata.java:
- 	Mostly implemented.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/IIOImage.java,
- 	javax/imageio/ImageReadParam.java,
- 	javax/imageio/metadata/IIOMetadataController.java,
- 	javax/imageio/metadata/IIOMetadataFormat.java:
- 	New files.
- 	* javax/imageio/stream/ImageOutputStream.java:
- 	Implemented.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/IIOParam.java,
- 	javax/imageio/IIOParamController.java,
- 	javax/imageio/ImageTypeSpecifier.java,
- 	javax/imageio/ImageWriteParam.java,
- 	javax/imageio/metadata/IIOMetadata.java:
- 	New files.
- 	* javax/imageio/ImageTranscoder.java:
- 	Implemented.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/spi/ImageInputStreamSpi.java,
- 	javax/imageio/spi/ImageOutputStreamSpi.java:
- 	Reworked import startments.
- 	* javax/imageio/spi/ServiceRegistry.java:
- 	Reworked import startments. Fixed XHTML in javadocs.
- 	(ServiceRegistry): Added @param tag to javadoc.
- 	* javax/imageio/stream/ImageInputStream.java
- 	(mark): Doesn't throws IOException;
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/ImageIO.java:
- 	New file.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/spi/IIORegistry.java
- 	(static): Don't register ImageReaderSpi.class and
- 	ImageWriterSpi.class yet.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/spi/IIORegistry.java:
- 	New file.
- 
- 2004-11-06  Noa Resare  <noa@resare.com>
- 
- 	* java/net/Socket.java (getPort): Return 0 instead of -1 on
- 	unconnected sockets.
- 
- 2004-11-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/StringBuffer.java,
- 	java/lang/Throwable.java,
- 	java/security/spec/DSAParameterSpec.java,
- 	java/util/zip/ZipEntry.java,
- 	java/util/zip/ZipFile.java,
- 	java/util/zip/ZipInputStream.java,
- 	java/util/zip/ZipOutputStream.java:
- 	Removed redundant and reordered modifiers.
- 
- 2004-11-06  Mattias Rehnberg  <Mattias.Rehnberg@home.se>
- 
- 	* java/io/Vector.java
- 	(writeObject): New function to serialized output thread safe.
- 
- 	* java/io/ObjectOutputStream.java
- 	(writeObject): Move the assignment of the class handle to after
- 	the assignment of class descriptor handle.
- 
- 2004-11-06  Robert Schuster <thebohemian@gmx.net>
- 
- 	Fixes documentation and indentation
- 	* java/beans/PropertyEditorSupport.java:
- 	reworked initial API doc
- 	(value): changed name from val
- 
- 2004-11-06  Robert Schuster <thebohemian@gmx.net>
- 
- 	Updates to 1.5
- 	* java/beans/PropertyEditorSupport.java
- 	(PropertyEditorSupport()): Changed modifier to public
- 	(PropertyEditorSupport(Object): Changed modifier to public
- 	(setSource): New method
- 	(getSource): New method
- 
- 2004-11-06  Robert Schuster <thebohemian@gmx.net>
- 
- 	Fixes bug #10799
- 	* java/beans/PropertyEditorSupport.java
- 	(setValue): Fire property change event
- 
- 2004-11-03  Tom Tromey  <tromey@redhat.com>
- 
- 	* jni.cc (_Jv_JNI_NewObjectArray): Fixed return type.
- 	* include/jni.h (struct JNINativeInterface) <NewObjectArray>: Now
- 	returns jobjectArray.
- 	(_Jv_JNIEnv::NewObjectArray): Likewise.
- 
- 2004-11-01  Tom Tromey  <tromey@redhat.com>
- 
- 	* verify.cc (state::check_no_uninitialized_objects): Removed.
- 	(push_jump): Updated.
- 	(push_exception_jump): Likewise.
- 	(handle_ret_insn): Likewise.
- 	(handle_jsr_insn): Likewise.
- 
- 2004-10-30  Mark Wielaard  <mark@klomp.org>
- 
- 	PR libgcj/18234
- 	* java/lang/Runtime.java (static): Call init().
- 	(Runtime): Remove call to init().
- 	(init): Make static.
- 
- 2004-10-28  David Daney  <ddaney@avtrex.com>
- 
- 	* gnu/gcj/convert/Output_UnicodeLittleUnmarked.java: New file.
- 	* Makefile.am: Build it.
- 	* Makefile.in: Regenerate.
- 
- 2004-10-27  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
- 
- 	PR libgcj/18104
- 	* Makefile.am (CLASSPATH_SEPARATOR): Use instead of a
- 	colon.
- 	* Makefile.in: Regenerate.
- 	* configure: Regenerate.
- 	* configure.ac (CLASSPATH_SEPARATOR): Define.
- 	* gcj/Makefile.in: Regenerate.
- 	* include/Makefile.in: Regenerate.
- 	* testsuite/Makefile.in: Regenerate.
- 	* testsuite/lib/libjava.exp (libjava_arguments): Fix
- 	CLASSPATH separator handling for Windows.
- 
- 2004-10-26  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/http/Connection.java
- 	(getOutputStream): Implicitely switch to POST method.
- 
- 2004-10-26  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
- 
- 	* libjava/java/lang/Class.h
- 	(java::lang::Class): Correct friend class declaration.
- 
- 2004-10-25  Geoffrey Keating  <geoffk@apple.com>
- 
- 	* Makefile.am (DARWIN_CRT_SRC): New.
- 	(libgcj_la_SOURCES): Use it.
- 	* configure.ac: Define USING_DARWIN_CRT when on Darwin.
- 	* darwin.cc: New file.
- 	* include/jvm.h (_Jv_RegisterClasses): Constify.
- 	(_Jv_RegisterClasses_Counted): New prototype.
- 	* java/lang/Class.h: Include stddef.h.
- 	(_Jv_RegisterClasses): Constify.
- 	(_Jv_RegisterClasses_Counted): New prototype.
- 	(Object): Make '_Jv_RegisterClasses_Counted' a friend.
- 	* java/lang/natClassLoader.cc (_Jv_RegisterClasses): Constify.
- 	(_Jv_RegisterClasses_Counted): New function.
- 	* configure: Regenerate.
- 	* Makefile.in: Regenerate.
- 	* gcj/Makefile.in: Regenerate.
- 	* include/Makefile.in: Regenerate.
- 	* testsuite/Makefile.in: Regenerate.
- 
- 2004-10-25  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/util/ResourceBundle.java (tryBundle): Use
- 	Class.isAssignableFrom rather than catching ClassCastException.
- 
- 2004-10-25  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/java/text/WordBreakIterator.java (WordBreakIterator): Don't
- 	initialize `iter'.
- 	* gnu/java/text/SentenceBreakIterator.java
- 	(SentenceBreakIterator): Don't initialize `iter'.
- 	* gnu/java/text/LineBreakIterator.java (LineBreakIterator): Don't
- 	initialize `iter'.
- 	* gnu/java/text/CharacterBreakIterator.java
- 	(CharacterBreakIterator): Don't initialize `iter'.
- 	* gnu/java/text/BaseBreakIterator.java (BaseBreakIterator): New
- 	constructor.
- 	* java/text/BreakIterator.java: Updated documentation.
- 
- 2004-10-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
- 
- 	PR other/18138
- 	* testsuite/lib/libjava.exp: Accept more than one multilib libgcc.
- 
- 2004-10-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/DocFlavor.java,
- 	javax/print/attribute/standard/JobStateReason.java,
- 	javax/print/attribute/standard/MultipleDocumentHandling.java:
- 	Added missing constants.
- 
- 2004-10-22  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/java/net/protocol/http/Connection.java (sendRequest): Fix
- 	typo.
- 
- 2004-10-22  Michael Koch  <konqueror@gmx.de>
- 
- 	PR libjava/14009
- 	* gnu/java/net/protocol/http/Connection.java
- 	(sendRequest): Handle case when url.getFile() returns an empty string.
- 
- 2004-10-22  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Math.java,
- 	java/lang/StackTraceElement.java,
- 	java/nio/Buffer.java,
- 	java/nio/ByteBuffer.java,
- 	java/nio/CharBuffer.java,
- 	java/nio/DoubleBuffer.java,
- 	java/nio/FloatBuffer.java,
- 	java/nio/IntBuffer.java,
- 	java/nio/LongBuffer.java,
- 	java/nio/ShortBuffer.java,
- 	java/nio/charset/Charset.java,
- 	java/rmi/server/RMIClassLoader.java,
- 	java/rmi/server/RMISocketFactory.java,
- 	java/security/Policy.java,
- 	java/text/ChoiceFormat.java,
- 	java/text/CollationElementIterator.java,
- 	java/text/DateFormat.java,
- 	java/text/DecimalFormat.java,
- 	java/text/DecimalFormatSymbols.java,
- 	java/text/MessageFormat.java,
- 	java/text/NumberFormat.java,
- 	java/text/RuleBasedCollator.java,
- 	java/text/SimpleDateFormat.java,
- 	java/util/BitSet.java,
- 	java/util/Calendar.java,
- 	java/util/Collections.java,
- 	java/util/IdentityHashMap.java,
- 	java/util/Locale.java,
- 	java/util/TreeMap.java,
- 	java/util/logging/LogRecord.java,
- 	java/util/logging/XMLFormatter.java,
- 	java/util/prefs/AbstractPreferences.java,
- 	java/util/prefs/Preferences.java,
- 	javax/crypto/interfaces/DHPrivateKey.java,
- 	javax/crypto/interfaces/DHPublicKey.java,
- 	javax/crypto/interfaces/PBEKey.java,
- 	javax/net/ssl/HandshakeCompletedEvent.java,
- 	javax/security/auth/Subject.java:
- 	Removed redundant and reordered modifiers.
- 
- 2004-10-22  Ulrich Weigand  <uweigand@de.ibm.com>
- 
- 	* gnu/java/net/natPlainSocketImplPosix.cc
- 	(gnu::java::net::PlainSocketImpl::available): Call FIONREAD ioctl
- 	with 'int *' argument instead of 'long *'.
- 
- 2004-10-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/NetworkInterface.java,
- 	java/text/Format.java,
- 	javax/security/auth/x500/X500Principal.java,
- 	javax/security/auth/x500/X500PrivateCredential.java,
- 	javax/security/cert/X509CertBridge.java,
- 	javax/security/sasl/Sasl.java,
- 	javax/sql/XAConnection.java:
- 	Import cleanup.
- 
- 2004-10-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/net/ssl/HandshakeCompletedEvent.java,
- 	javax/net/ssl/KeyManagerFactory.java,
- 	javax/net/ssl/SSLContext.java,
- 	javax/net/ssl/SSLServerSocketFactory.java,
- 	javax/net/ssl/SSLSession.java,
- 	javax/net/ssl/SSLSocketFactory.java,
- 	javax/net/ssl/TrustManagerFactory.java:
- 	Import cleanup.
- 
- 2004-10-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/naming/directory/BasicAttribute.java,
- 	javax/naming/directory/BasicAttributes.java,
- 	javax/naming/directory/InitialDirContext.java,
- 	javax/naming/event/NamingEvent.java,
- 	javax/naming/ldap/ControlFactory.java,
- 	javax/naming/ldap/ExtendedRequest.java,
- 	javax/naming/ldap/InitialLdapContext.java,
- 	javax/naming/ldap/LdapReferralException.java,
- 	javax/naming/spi/DirObjectFactory.java,
- 	javax/naming/spi/DirStateFactory.java,
- 	javax/naming/spi/DirectoryManager.java,
- 	javax/naming/spi/InitialContextFactory.java,
- 	javax/naming/spi/InitialContextFactoryBuilder.java,
- 	javax/naming/spi/NamingManager.java,
- 	javax/naming/spi/ObjectFactory.java,
- 	javax/naming/spi/ObjectFactoryBuilder.java,
- 	javax/naming/spi/StateFactory.java:
- 	Import cleanup.
- 
- 2004-10-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/crypto/Cipher.java,
- 	javax/crypto/EncryptedPrivateKeyInfo.java,
- 	javax/crypto/ExemptionMechanism.java,
- 	javax/crypto/KeyAgreement.java,
- 	javax/crypto/KeyGenerator.java,
- 	javax/crypto/Mac.java,
- 	javax/crypto/SecretKeyFactory.java,
- 	javax/crypto/SecretKeyFactorySpi.java,
- 	javax/crypto/spec/SecretKeySpec.java:
- 	Import cleanup.
- 
- 2004-10-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/security/AlgorithmParameterGenerator.java,
- 	java/security/AlgorithmParameters.java,
- 	java/security/AlgorithmParametersSpi.java,
- 	java/security/AllPermission.java,
- 	java/security/BasicPermission.java,
- 	java/security/Certificate.java,
- 	java/security/CodeSource.java,
- 	java/security/DigestInputStream.java,
- 	java/security/DigestOutputStream.java,
- 	java/security/GuardedObject.java,
- 	java/security/KeyFactory.java,
- 	java/security/KeyFactorySpi.java,
- 	java/security/KeyPairGenerator.java,
- 	java/security/KeyStore.java,
- 	java/security/KeyStoreSpi.java,
- 	java/security/Permissions.java,
- 	java/security/Security.java,
- 	java/security/Signature.java,
- 	java/security/UnresolvedPermission.java,
- 	java/security/cert/CertPathBuilder.java,
- 	java/security/cert/CertPathValidator.java,
- 	java/security/cert/CertStore.java,
- 	java/security/cert/Certificate.java,
- 	java/security/cert/CertificateFactory.java,
- 	java/security/cert/PolicyQualifierInfo.java,
- 	java/security/cert/TrustAnchor.java,
- 	java/security/cert/X509CRL.java,
- 	java/security/cert/X509CRLSelector.java,
- 	java/security/cert/X509CertSelector.java:
- 	Import cleanup.
- 
- 2004-10-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/rmi/MarshalledObject.java,
- 	java/rmi/Naming.java,
- 	java/rmi/activation/Activatable.java,
- 	java/rmi/activation/ActivationGroup.java,
- 	java/rmi/activation/ActivationGroupDesc.java,
- 	java/rmi/activation/ActivationInstantiator.java,
- 	java/rmi/activation/ActivationMonitor.java,
- 	java/rmi/activation/ActivationSystem.java,
- 	java/rmi/activation/Activator.java,
- 	java/rmi/registry/LocateRegistry.java,
- 	java/rmi/registry/Registry.java,
- 	java/rmi/server/LogStream.java,
- 	java/rmi/server/ObjID.java,
- 	java/rmi/server/RMIClientSocketFactory.java,
- 	java/rmi/server/RMIServerSocketFactory.java,
- 	java/rmi/server/RMISocketFactory.java,
- 	java/rmi/server/RemoteCall.java,
- 	java/rmi/server/RemoteServer.java,
- 	java/rmi/server/ServerRef.java,
- 	java/rmi/server/UID.java,
- 	java/rmi/server/UnicastRemoteObject.java:
- 	Import cleanup.
- 
- 2004-10-21  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/util/zip/InflaterInputStream.java (fill): Don't throw an
- 	exception if we hit EOF of `in'.
- 	(read): Handle case where inflating returns -1.
- 
- 2004-10-21  Ulrich Weigand  <uweigand@de.ibm.com>
- 
- 	* gnu/java/nio/channels/natFileChannelPosix.cc
- 	(FileChannelImpl::available): Call FIONREAD ioctl with 'int *'
- 	argument instead of 'long *'.
- 
- 2004-10-21  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/util/ResourceBundle.java (tryBundle): Also ignore
- 	ClassCastException.
- 
- 2004-10-21  Kaz Kojima  <kkojima@gcc.gnu.org>
- 
- 	* configure.ac (SIGNAL_HANDLER): Set to include/sh-signal.h
- 	for all sh*-*-linux* targets.
- 	* configure: Regenerate.
- 	* include/sh-signal.h: New file.
- 
- 2004-10-21  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
- 
- 	* java/lang/ieeefp.h: Add m32r support.
- 
- 2004-10-20  Andreas Schwab  <schwab@suse.de>
- 
- 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Cast pointers
- 	to uaddr, not int.
- 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass):
- 	Likewise.
- 
- 2004-10-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/attribute/standard/ColorSupported.java,
- 	javax/print/attribute/standard/Compression.java,
- 	javax/print/attribute/standard/Copies.java,
- 	javax/print/attribute/standard/CopiesSupported.java,
- 	javax/print/attribute/standard/DateTimeAtCompleted.java,
- 	javax/print/attribute/standard/DateTimeAtCreation.java,
- 	javax/print/attribute/standard/DateTimeAtProcessing.java,
- 	javax/print/attribute/standard/DocumentName.java,
- 	javax/print/attribute/standard/Fidelity.java,
- 	javax/print/attribute/standard/Finishings.java,
- 	javax/print/attribute/standard/JobHoldUntil.java,
- 	javax/print/attribute/standard/JobImpressions.java,
- 	javax/print/attribute/standard/JobImpressionsCompleted.java,
- 	javax/print/attribute/standard/JobImpressionsSupported.java,
- 	javax/print/attribute/standard/JobKOctets.java,
- 	javax/print/attribute/standard/JobKOctetsProcessed.java,
- 	javax/print/attribute/standard/JobKOctetsSupported.java,
- 	javax/print/attribute/standard/JobMediaSheets.java,
- 	javax/print/attribute/standard/JobMediaSheetsCompleted.java,
- 	javax/print/attribute/standard/JobMediaSheetsSupported.java,
- 	javax/print/attribute/standard/JobMessageFromOperator.java,
- 	javax/print/attribute/standard/JobName.java,
- 	javax/print/attribute/standard/JobOriginatingUserName.java,
- 	javax/print/attribute/standard/JobPriority.java,
- 	javax/print/attribute/standard/JobPrioritySupported.java,
- 	javax/print/attribute/standard/JobSheets.java,
- 	javax/print/attribute/standard/JobState.java,
- 	javax/print/attribute/standard/JobStateReason.java,
- 	javax/print/attribute/standard/JobStateReasons.java,
- 	javax/print/attribute/standard/Media.java,
- 	javax/print/attribute/standard/MultipleDocumentHandling.java,
- 	javax/print/attribute/standard/NumberOfDocuments.java,
- 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
- 	javax/print/attribute/standard/NumberUp.java,
- 	javax/print/attribute/standard/NumberUpSupported.java,
- 	javax/print/attribute/standard/OrientationRequested.java,
- 	javax/print/attribute/standard/OutputDeviceAssigned.java,
- 	javax/print/attribute/standard/PDLOverrideSupported.java,
- 	javax/print/attribute/standard/PageRanges.java,
- 	javax/print/attribute/standard/PagesPerMinute.java,
- 	javax/print/attribute/standard/PagesPerMinuteColor.java,
- 	javax/print/attribute/standard/PrintQuality.java,
- 	javax/print/attribute/standard/PrinterInfo.java,
- 	javax/print/attribute/standard/PrinterIsAcceptingJobs.java,
- 	javax/print/attribute/standard/PrinterLocation.java,
- 	javax/print/attribute/standard/PrinterMakeAndModel.java,
- 	javax/print/attribute/standard/PrinterMessageFromOperator.java,
- 	javax/print/attribute/standard/PrinterMoreInfo.java,
- 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.java,
- 	javax/print/attribute/standard/PrinterName.java,
- 	javax/print/attribute/standard/PrinterStateReason.java,
- 	javax/print/attribute/standard/PrinterStateReasons.java,
- 	javax/print/attribute/standard/PrinterURI.java,
- 	javax/print/attribute/standard/ReferenceUriSchemesSupported.java,
- 	javax/print/attribute/standard/RequestingUserName.java:
- 	Reorganized imports and removed redundant final modifiers.
- 
- 2004-10-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/security/sasl/SaslClient.java,
- 	javax/security/sasl/SaslClientFactory.java,
- 	javax/security/sasl/SaslException.java,
- 	javax/security/sasl/SaslServer.java,
- 	javax/security/sasl/SaslServerFactory.java:
- 	Remvoed CVS tags.
- 
- 2004-10-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/security/auth/login/NullConfiguration.java,
- 	javax/security/auth/x500/X500Principal.java,
- 	javax/security/cert/X509Certificate.java,
- 	javax/security/sasl/AuthenticationException.java,
- 	javax/security/sasl/AuthorizeCallback.java,
- 	javax/security/sasl/RealmCallback.java,
- 	javax/security/sasl/RealmChoiceCallback.java,
- 	javax/security/sasl/Sasl.java,
- 	javax/security/sasl/SaslClient.java,
- 	javax/security/sasl/SaslClientFactory.java,
- 	javax/security/sasl/SaslException.java,
- 	javax/security/sasl/SaslServer.java,
- 	javax/security/sasl/SaslServerFactory.java:
- 	Cleaned up import statements and copyright notices.
- 
- 2004-10-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/rmi/rmic/RMIC.java: Reformatted.
- 
- 2004-10-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/sql/Timestamp.java,
- 	java/text/AttributedCharacterIterator.java,
- 	java/text/AttributedString.java,
- 	java/util/zip/CheckedOutputStream.java,
- 	java/util/zip/DeflaterOutputStream.java,
- 	java/util/zip/ZipFile.java,
- 	javax/crypto/Cipher.java,
- 	javax/crypto/ExemptionMechanismException.java,
- 	javax/crypto/SecretKey.java,
- 	javax/crypto/SecretKeyFactory.java,
- 	javax/naming/directory/ModificationItem.java,
- 	javax/naming/directory/SearchControls.java,
- 	javax/naming/event/NamingListener.java,
- 	javax/naming/ldap/Control.java,
- 	javax/naming/ldap/ExtendedResponse.java,
- 	javax/net/ssl/SSLSocketFactory.java:
- 	Reorganized imports and fixed copyright headers.
- 
- 2004-10-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/logging/ConsoleHandler.java,
- 	java/util/logging/ErrorManager.java,
- 	java/util/logging/FileHandler.java,
- 	java/util/logging/Filter.java,
- 	java/util/logging/Formatter.java,
- 	java/util/logging/Handler.java,
- 	java/util/logging/Level.java,
- 	java/util/logging/LogManager.java,
- 	java/util/logging/LogRecord.java,
- 	java/util/logging/Logger.java,
- 	java/util/logging/LoggingPermission.java,
- 	java/util/logging/MemoryHandler.java,
- 	java/util/logging/SimpleFormatter.java,
- 	java/util/logging/SocketHandler.java,
- 	java/util/logging/StreamHandler.java,
- 	java/util/logging/XMLFormatter.java:
- 	Standardized copyrigth header.
- 
- 2004-10-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/security/AlgorithmParameterGenerator.java,
- 	java/security/AlgorithmParameters.java,
- 	java/security/DigestInputStream.java,
- 	java/security/Identity.java,
- 	java/security/KeyFactory.java,
- 	java/security/KeyPairGenerator.java,
- 	java/security/KeyStore.java,
- 	java/security/MessageDigest.java,
- 	java/security/MessageDigestSpi.java,
- 	java/security/Policy.java,
- 	java/security/SecureRandom.java,
- 	java/security/Security.java,
- 	java/security/Signature.java,
- 	java/security/SignatureSpi.java,
- 	java/security/cert/CertPathBuilder.java,
- 	java/security/cert/CertPathValidator.java,
- 	java/security/cert/CertStore.java,
- 	java/security/cert/Certificate.java,
- 	java/security/cert/CertificateFactory.java,
- 	java/security/cert/PolicyQualifierInfo.java,
- 	java/security/cert/TrustAnchor.java,
- 	java/security/cert/X509CRL.java,
- 	java/security/cert/X509CRLEntry.java,
- 	java/security/cert/X509Certificate.java,
- 	java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java:
- 	Import statements reorganized, some little formatting issues,
- 	used java-style array declarations, added comments in empty catch
- 	blocks.
- 
- 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/security/Security.java
- 	(static): Use AccessController.doPrivileged to get system property.
- 
- 2004-10-18  Sven de Marothy  <sven@physto.se>
- 
- 	* java/nio/ByteBufferHelper.java
- 	(putDouble): Use Double.toRawLongBits instead.
- 
- 2004-10-18  Mark Wielaard  <mark@klomp.org>
- 	Andrew Haley  <aph@redhat.com>
- 
- 	* testsuite/libjava.lang/ExtraClassLoader.java: New.
- 
- 2004-10-18  Andrew Haley  <aph@redhat.com>
- 
- 	PR java/18036:
- 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Reorganize
- 	and correct logic used to find interpreter.
- 
- 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/util/logging/LogManager.java
- 	(findAncestor): Fixed IndexOutOfBoundsException.
- 
- 2004-10-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/BufferedInputStream.java: Fixed @author tag.
- 	(read): Simplified expression.
- 	(read): Merged javadoc a bit more.
- 	(read): Renamed 'remain' to 'totalBytesRead'.
- 	* java/io/DataInputStream.java,
- 	java/io/DataOutputStream.java,
- 	java/io/ObjectInputStream.java,
- 	java/io/ObjectOutputStream.java:
- 	Reworked modifier order.
- 
- 2004-10-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/Inet4Address.java: Merged file header and javadocs.
- 	* java/net/Inet6Address.java: Likewise.
- 	* java/net/InetAddress.java
- 	(getCanonicalHostName): Create Inet4Address object instead of
- 	InetAddress and add comment regarding IPv6.
- 	(toString): Simplified.
- 
- 2004-10-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/http/Connection.java,
- 	java/nio/MappedByteBufferImpl.java,
- 	java/text/RuleBasedCollator.java,
- 	java/util/ResourceBundle.java:
- 	Reworked import statements.
- 
- 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/security/IdentityScope.java
- 	(systemScope): Removed useless initializer.
- 	* java/security/Policy.java
- 	(currentPolicy): Likewise.
- 
- 2004-10-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/System.java: Revert accidential change.
- 
- 2004-10-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Math.java,
- 	java/lang/Package.java,
- 	java/lang/Runtime.java,
- 	java/lang/StrictMath.java,
- 	java/lang/System.java,
- 	java/lang/Thread.java,
- 	java/lang/ThreadLocal.java,
- 	java/lang/Void.java:
- 	Reworked import statements, HTML in javadocs and modifier orders.
- 
- 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/util/Timer.java
- 	(nr): Removed useless initializer.
- 	* java/util/logging/LogRecord.java
- 	(lastSeqNum): Likewise.
- 	* javax/naming/spi/NamingManager.java
- 	(icfb, ofb): Likewise.
- 
- 2004-10-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/PlainDatagramSocketImpl.java:
- 	Reworked import statements.
- 	* gnu/java/security/provider/DSAParameters.java:
- 	Fixed copyrigth years.
- 	* java/net/JarURLConnection.java:
- 	Fixed HTML in @author tags.
- 
- 
- 2004-10-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/rmi/activation/ActivationSystem.java
- 	(SYSTEM_PORT): Initialize with correct port number.
- 
- 2004-10-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/reflect/Proxy.java: Improved javadocs.
- 
- 2004-10-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/reflect/AccessibleObject.java
- 	(checkPermission): Removed redundant final modifier.
- 	(secureSetAccessible): Likewise.
- 	* java/lang/reflect/Proxy.java:
- 	Reworked import statements.
- 	(generate): Removed redundant final modifier.
- 	* java/lang/reflect/ReflectPermission.java:
- 	Reorder package declaration and import statement.
- 
- 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/lang/reflect/Proxy.java
- 	(count): Removed useless initializer.
- 
- 2004-10-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/BindException.java,
- 	java/net/ConnectException.java,
- 	java/net/ContentHandler.java,
- 	java/net/ContentHandlerFactory.java,
- 	java/net/DatagramPacket.java,
- 	java/net/DatagramSocket.java,
- 	java/net/DatagramSocketImpl.java,
- 	java/net/DatagramSocketImplFactory.java,
- 	java/net/FileNameMap.java,
- 	java/net/HttpURLConnection.java,
- 	java/net/MalformedURLException.java,
- 	java/net/MulticastSocket.java,
- 	java/net/NetworkInterface.java,
- 	java/net/NoRouteToHostException.java,
- 	java/net/PasswordAuthentication.java,
- 	java/net/PortUnreachableException.java,
- 	java/net/ProtocolException.java,
- 	java/net/ServerSocket.java,
- 	java/net/Socket.java,
- 	java/net/SocketException.java,
- 	java/net/SocketImpl.java,
- 	java/net/SocketImplFactory.java,
- 	java/net/SocketOptions.java,
- 	java/net/SocketPermission.java,
- 	java/net/SocketTimeoutException.java,
- 	java/net/URI.java,
- 	java/net/URISyntaxException.java,
- 	java/net/URL.java,
- 	java/net/URLDecoder.java,
- 	java/net/URLEncoder.java,
- 	java/net/URLStreamHandler.java,
- 	java/net/URLStreamHandlerFactory.java,
- 	java/net/UnknownHostException.java,
- 	java/net/UnknownServiceException.java:
- 	Big import statement and @author tag cleanup.
- 
- 2004-10-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/security/OID.java,
- 	gnu/java/security/provider/DSAParameters.java,
- 	gnu/java/security/provider/DSASignature.java,
- 	gnu/java/security/x509/X500DistinguishedName.java,
- 	gnu/java/security/x509/X509CRL.java:
- 	Import statements cleaned up.
- 
- 2004-10-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/NIODatagramSocket.java,
- 	gnu/java/nio/ServerSocketChannelImpl.java:
- 	Reorganized import statements.
- 
- 2004-10-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/rmi/RMIMarshalledObjectOutputStream.java
- 	gnu/java/rmi/rmic/RMIC.java,
- 	gnu/java/rmi/server/RMIHashes.java,
- 	gnu/java/rmi/server/RMIObjectInputStream.java,
- 	gnu/java/rmi/server/RMIObjectOutputStream.java,
- 	gnu/java/rmi/server/UnicastConnection.java,
- 	gnu/java/rmi/server/UnicastConnectionManager.java,
- 	gnu/java/rmi/server/UnicastRemoteCall.java,
- 	gnu/java/rmi/server/UnicastServer.java,
- 	gnu/java/rmi/server/UnicastServerRef.java,
- 	java/rmi/MarshalledObject.java,
- 	java/rmi/Naming.java,
- 	java/rmi/RMISecurityManager.java,
- 	java/rmi/Remote.java,
- 	java/rmi/activation/Activatable.java,
- 	java/rmi/activation/ActivationDesc.java,
- 	java/rmi/activation/ActivationGroup.java,
- 	java/rmi/activation/ActivationGroupDesc.java,
- 	java/rmi/activation/ActivationGroupID.java,
- 	java/rmi/activation/ActivationID.java,
- 	java/rmi/activation/ActivationInstantiator.java,
- 	java/rmi/activation/ActivationMonitor.java,
- 	java/rmi/activation/ActivationSystem.java,
- 	java/rmi/activation/Activator.java,
- 	java/rmi/dgc/DGC.java,
- 	java/rmi/dgc/Lease.java,
- 	java/rmi/dgc/VMID.java,
- 	java/rmi/registry/LocateRegistry.java,
- 	java/rmi/registry/Registry.java,
- 	java/rmi/registry/RegistryHandler.java,
- 	java/rmi/server/LoaderHandler.java,
- 	java/rmi/server/LogStream.java,
- 	java/rmi/server/ObjID.java,
- 	java/rmi/server/Operation.java,
- 	java/rmi/server/RMIClassLoader.java,
- 	java/rmi/server/RMIClassLoaderSpi.java,
- 	java/rmi/server/RMIClientSocketFactory.java,
- 	java/rmi/server/RMIFailureHandler.java,
- 	java/rmi/server/RMIServerSocketFactory.java,
- 	java/rmi/server/RMISocketFactory.java,
- 	java/rmi/server/RemoteCall.java,
- 	java/rmi/server/RemoteObject.java,
- 	java/rmi/server/RemoteRef.java,
- 	java/rmi/server/RemoteServer.java,
- 	java/rmi/server/RemoteStub.java,
- 	java/rmi/server/ServerRef.java,
- 	java/rmi/server/Skeleton.java,
- 	java/rmi/server/SkeletonMismatchException.java,
- 	java/rmi/server/UID.java,
- 	java/rmi/server/UnicastRemoteObject.java,
- 	java/rmi/server/Unreferenced.java:
- 	File headers and import statements cleaned up.
- 
- 2004-10-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* libjava/gnu/java/nio/charset/UTF_16.java,
- 	libjava/gnu/java/nio/charset/UTF_16BE.java,
- 	libjava/gnu/java/nio/charset/UTF_16LE.java,
- 	libjava/java/nio/ByteOrder.java,
- 	libjava/java/nio/MappedByteBuffer.java,
- 	libjava/java/nio/channels/Channels.java,
- 	libjava/java/nio/channels/spi/SelectorProvider.java,
- 	libjava/java/nio/charset/Charset.java:
- 	Cleanup.
- 
- 2004-10-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/charset/UTF_16Encoder.java
- 	(UTF_16Encoder): Fixed maxBytesPerChar handling.
- 
- 2004-10-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/math/BigDecimal.java, java/math/BigInteger.java:
- 	Reorganized import statements, removed redundant and
- 	reorganized modifiers.
- 
- 2004-10-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/beans/ExplicitBeanInfo.java:
- 	Explicitely import java.awt.Image.
- 	(getIcon): Fixed off-by-one error.
- 
- 2004-10-15  Andrew Haley  <aph@redhat.com>
- 
-         * Makefile.am (nat_files, xlib_nat_files): New.
-         * Makefile.in: Regenerate.
- 
- 2004-10-14  Ulrich Weigand  <uweigand@de.ibm.com>
- 
- 	* jni.cc (_Jv_JNIMethod::call): Use ffi_java_raw_call instead of
- 	ffi_raw_call if FFI_NATIVE_RAW_API is not defined.
- 
- 2004-10-13  Andrew Haley  <aph@redhat.com>
- 
- 	* interpret.cc (_Jv_InterpMethod::run): Initialize
- 	_Jv_StartOfInterpreter.
- 	(_Jv_StartOfInterpreter, _Jv_EndOfInterpreter): Functions removed.
- 	(_Jv_StartOfInterpreter, _Jv_EndOfInterpreter): New variables.
- 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Use
- 	_Unwind_FindEnclosingFunction to discover whether PC is within the
- 	interpreter.
- 
- 2004-10-12  Rutger Ovidius  <ovidr@users.sourceforge.net>
- 
- 	PR libgcj/17903:
- 	* testsuite/libjava.lang/md5test.java: New file.
- 	* testsuite/libjava.lang/md5test.out: Likewise.
- 	* testsuite/libjava.lang/shatest.java: Likewise.
- 	* testsuite/libjava.lang/shatest.out: Likewise.
- 
- 2004-10-11  Richard Henderson  <rth@redhat.com>
- 
- 	* include/posix-threads.h <__alpha__> (_Jv_ThreadId_t): Use void*.
- 	(_Jv_ThreadSelf): Use __builtin_thread_pointer.
- 
- 2004-10-08  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/util/Calendar.java (set): Invalidate DST_OFFSET
- 	field as a DST boundary may have been crossed.
- 	* java/util/GregorianCalendar.java (add): Throw
- 	IllegalArgumentException on attempt to add to DST_OFFSET or
- 	ZONE_OFFSET fields. Update javadoc.
- 
- 2004-10-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/CharArrayWriter.java
- 	(resize): Removed redundant 'final' modifier.
- 	* java/io/DataInputStream.java
- 	(readFully): Throw IndexOutOfBoundsException of len < 0.
- 	* java/io/FileDescriptor.java,
- 	java/io/FileInputStream.java,
- 	java/io/FileOutputStream.java,
- 	java/io/ObjectOutputStream.java,
- 	java/io/ObjectStreamClass.java,
- 	java/io/PipedInputStream.java,
- 	java/io/RandomAccessFile.java:
- 	Reorganized import statements.
- 
- 2004-10-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/rmi/rmic/RMIC.java,
- 	gnu/java/rmi/server/RMIHashes.java,
- 	gnu/java/rmi/server/RMIObjectInputStream.java,
- 	gnu/java/rmi/server/UnicastConnection.java,
- 	gnu/java/rmi/server/UnicastConnectionManager.java,
- 	gnu/java/rmi/server/UnicastRemoteCall.java,
- 	gnu/java/rmi/server/UnicastServerRef.java:
- 	Reworked import statements and fixed file headers.
- 
- 2004-10-04  Loren J. Rittle  <ljrittle@acm.org>
- 
- 	* configure.ac (*-*-freebsd[[1234]]*): Refine error message
- 	emission rule.
- 	* configure: Rebuilt.
- 
- 2004-09-30  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/text/MessageFormat.java (Field): Constructor now
- 	protected.
- 
- 2004-09-30  Tom Tromey  <tromey@redhat.com>
- 
- 	* javax/crypto/MacSpi.java: Fixed typo.
- 
- 2004-09-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/InetAddress.java: Reformatted.
- 	(loopback): Initialize with Inet4Address object.
- 	(static): Initialize ANY_IF with Inet4Address object.
- 	(InetAddress): Removed unused package-private constructor.
- 
- 2004-09-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/beans/Beans.java,
- 	java/beans/EventHandler.java,
- 	java/beans/EventSetDescriptor.java,
- 	java/beans/Introspector.java,
- 	java/beans/PropertyEditorManager.java,
- 	java/beans/beancontext/BeanContext.java,
- 	java/beans/beancontext/BeanContextChild.java,
- 	java/beans/beancontext/BeanContextChildSupport.java,
- 	java/beans/beancontext/BeanContextMembershipEvent.java:
- 	Reordered import statements and removed redundant modifiers.
- 
- 2004-09-29  Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/17715:
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (libgcj-@gcc_version@.jar): Include properties
- 	files.
- 	(all_property_files): New macro.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (ordinary_java_source_files): Re-sorted.
- 	(libgcj.la): Moved to old location near lib-gnu-awt-xlib.la.
- 
- 2004-09-28  Tom Tromey  <tromey@redhat.com>
- 
- 	* jni.cc (_Jv_JNI_RegisterNatives): Formatting fixlets.
- 
- 	PR libgcj/17222:
- 	* Makefile.am (libgcj.la): Restored.
- 	* Makefile.in: Rebuilt.
- 
- 2004-09-28  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/URLConnection.java: Reformatted.
- 	* java/net/URLClassLoader.java: Reformatted.
- 	(getContent): Reordered return of content.
- 	(getContentHandler): Don't check for null explicitely.
- 
- 2004-09-27  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/BufferedInputStream.java
- 	(BufferedInputStream): Added Jeroen Frijters to authors.
- 	(count): Don't explicitely initialize with default value.
- 	(pos): Likewise.
- 	(marklimit): Likewise.
- 	(read): Changed boolean expression to match GNU classpath' version.
- 	(reset): Add proper message to exception.
- 	(skip): Check for closed stream.
- 	(refill): Likewise.
- 
- 2004-09-26  Per Bothner  <per@bothner.com>
- 
- 	* prims.cc (unblock_signal): Annotate signum with __unused__ to
- 	avoid warnings in the non-POSIX_VERSION case.
- 	Also, we only need this function if either HANDLE_SEGV or HANDLE_FPE,
- 	so place it inside an #if block.
- 	* include/default-signal.h (SIGNAL_HANDLER): Parameters are __unused__.
- 	* include/i386-signal.h (SIGNAL_HANDLER):  Likewise
- 	* include/mips-signal.h (SIGNAL_HANDLER):  Likewise
- 	* include/sparc-signal.h (SIGNAL_HANDLER):  Likewise
- 
- 2004-09-26  Per Bothner  <per@bothner.com>
- 
- 	* prims.cc (process_gcj_properties):  Optimization.
- 
- 2004-09-26  Per Bothner  <per@bothner.com>
- 
- 	* java/util/Collections.java (sort):  Copy from array in forwards
- 	order, rather than reverse order which may be much less efficient.
- 
- 2004-09-26  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/lang/System.java (properties): Make package private.
- 	* java/lang/Throwable.java (StaticData.nl): Initialize through
- 	directly accessing System.properties.getProperty().
- 
- 	* java/lang/Throwable.java (nl): Remove static field.
- 	(StaticData): New private static inner class.
- 	(stackTraceStringBuffer): Use StaticData.nl.
- 
- 2004-09-26  Casey Marshall <csm@gnu.org>
- 
- 	* java/security/ProtectionDomain.java
- 	(<init>(CodeSource,PermissionCollection)): set `staticBinding' to
- 	`true'.
- 
- 	* java/security/SecureClassLoader.java
- 	(defineClass): make protection domain dynamically bound.
- 	(getPermissions): call `getCurrentPolicy' to avoid permission
- 	check.
- 
- 2004-09-25  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.am (core_java_source_files): Add VMTimeZone.java.
- 	(nat_source_files): Rename natTimeZone.cc to natVMTimeZone.cc.
- 	* Makefile.in: Regenerated.
- 
- 	* gcj/javaprims.h: Regenerated.
- 
- 	* java/util/TimeZone.java (defaultZone): Use VMTimeZone.
- 	(getDefaultTimeZone): Make package private. Check that GMToffset
- 	contains at least one digit.
- 	(getDefaultTimeZoneId, readTimeZoneFile, readtzFile): (Re)Moved to
- 	VMTimeZone.
- 	* util/VMTimeZone.java: New file with above methods.
- 
- 	* java/util/natTimeZone.cc: Removed (renamed).
- 	* java/util/natVMTimeZone.cc: Added (renamed).
- 
- 2004-09-25  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/util/TimeZone.java
- 	(getDefaultTimeZone): Fixed test to distinguish between hours and
- 	minutes in specified timezone.
- 
- 2004-09-25  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/lang/reflect/Proxy.java (getPackage, ClassFactory): Fixed
- 	handling of default package. (generate): Removed confused comments
- 	and code about making Method and Field accessible.
- 
- 2004-09-25  Tom Tromey  <tromey@redhat.com>
- 
- 	PR java/17500:
- 	* testsuite/libjava.compile/pr17500.java: New file.
- 
- 2004-09-25  Shashank Bapat  <shashankbapat@yahoo.com>
-             Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/regexp/RE.java (initialize): Add RETokenLookAhead support.
- 	* gnu/regexp/RETokenLookAhead.java: New file.
- 
- 	* Makefile.am (ordinary_java_source_files): Add RETokenLookAhead.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-09-25  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/ObjectStreamField.java:
- 	Removed unused import statement.
- 
- 2004-09-24  Tom Tromey  <tromey@redhat.com>
- 
- 	PR java/15656:
- 	* testsuite/libjava.compile/pr15656.xfail: New file.
- 	* testsuite/libjava.compile/pr15656.java: new file.
- 
- 	PR java/16789:
- 	* testsuite/libjava.lang/pr16789.out: New file.
- 	* testsuite/libjava.lang/pr16789.java: New file.
- 
- 2004-09-24  Andrew Haley  <aph@redhat.com>
- 
- 	PR java/16927
- 	* testsuite/libjava.compile/AssertBug.java: New file.
- 
- 2004-09-24  Casey Marshall <csm@gnu.org>
- 
- 	* java/util/PropertyPermissionCollection.java
- 	(implies): avoid infinite loop.
- 
- 2004-09-24  Andrew John Hughes  <gnu_andrew@member.fsf.org>
- 
- 	* javax/security/auth/PrivateCredentialPermission.java
- 	(PrivateCredentialPermission): added serialization UID
- 
- 
- 2004-09-24  Ilya Perminov  <iperminov@logicalsoft.com>
- 
- 	* gnu/java/rmi/server/UnicastServer.java
- 	(incomingMessageCall): Added code to handle Errors.
- 	* gnu/java/rmi/server/UnicastServerRef.java
- 	(incomingMessageCall): Added code to handle Errors.
- 
- 
- 2004-09-24  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/lang/ClassLoader.java (loadedClasses): Declare as HashMap.
- 	(definedPackages): Likewise.
- 
- 2004-09-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/ObjectInputStream.java:
- 	Re-ordered imports.
- 
- 2004-09-24  Casey Marshall <csm@gnu.org>
- 
- 	* java/io/ObjectInputStream.java (callReadMethod): re-throw
- 	`ClassNotFoundException'.
- 
- 2004-09-24  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/io/ObjectInputStream.java (readObject): Delegate instantation
- 	of Externalizable classes to ObjectStreamClass.
- 	* java/io/ObjectStreamClass.java (newInstance): New method to
- 	instantiate Externalizable (while ignoring the accessibility of
- 	the constructor). (constructor): New field to cache the constructor.
- 
- 2004-09-24  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/net/URL.java (systemClassLoader): New static field.
- 	(getURLStreamHandler): Always use system/application classloader
- 	for finding URLStreamhandler. Remove unecessary instanceof checks.
- 
- 2004-09-24  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/net/URL.java
- 	(set): This method now matches the behaviour of the JDK.
- 	(DEFAULT_SEARCH_PATH): Added "gnu.inet".
- 
- 2004-09-24  Guilhem Lavaux  <guilhem@kaffe.org>
- 
- 	* java/net/URL.java (URL): Delete whitespaces in the protocol string.
- 
- 2004-09-24  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/net/URL.java (URL(String,String,int,String,URLStreamHandler):
- 	Don't set authority if host isn't specified.
- 
- 2004-09-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/PipeImpl.java: Use VMPipe for native stuff.
- 	* gnu/java/nio/SelectorImpl.java: Use VMSelector for native stuff.
- 	* gnu/java/nio/VMPipe.java,
- 	gnu/java/nio/VMSelector.java:
- 	New files.
- 	* gnu/java/nio/natPipeImplEcos.cc,
- 	gnu/java/nio/natPipeImplPosix.cc,
- 	gnu/java/nio/natPipeImplWin32.cc:
- 	Ported to VMPipe.
- 	* gnu/java/nio/natSelectorImplEcos.cc,
- 	gnu/java/nio/natSelectorImplPosix.cc,
- 	gnu/java/nio/natSelectorImplWin32.cc:
- 	Ported to VMSelector.
- 	* Makefile.am: Added new files gnu/java/nio/VMPipe.java and
- 	gnu/java/nio/VMSelector.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-09-24  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/lang/StackTraceElement.java
- 	(className): Renamed field to declaringClass to be compatible
- 	with Sun serialization format.
- 
- 2004-09-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/applet/AppletContext.java,
- 	java/applet/Applet.java,
- 	java/applet/AppletStub.java,
- 	java/applet/AudioClip.java:
- 	Jalopied and checkstyle clean.
- 
- 	* javax/swing/JCheckBox.java: Reformated.
- 	(JCheckBox): Fixed all constructors.
- 	(isBorderPaintedFlat): New method.
- 	(setBorderPaintedFlat): New method.
- 	* javax/swing/JEditorPane.java
- 	(createEditorKitForContentType): Made public.
- 	(scrollToReference): Likewise.
- 	* javax/swing/JTextArea.java
- 	(setLineWrap): Fire property change.
- 	* javax/swing/JToggleButton.java
- 	(JToggleButton): New constructor.
- 	(JToggleButton): Simplified.
- 	* javax/swing/text/AttributeSet.java
- 	(FontAttribute): Renamed from FontCharacterAttribute.
- 	* javax/swing/text/JTextComponent.java
- 	(KeyBinBinding): Added javadoc.
- 	(JTextComponent): Likewise.
- 	(getAccessibleContext): Fixed javadoc.
- 	* javax/swing/text/View.java
- 	(View): Added javadoc.
- 	* javax/swing/text/TabableView.java: New file.
- 	* Makefile.am: Added javax/swing/text/TabableView.java.
- 	* Makefile.in: Regenerated.
- 2004-09-23  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/util/Collections.java
- 	(binarySearch(List, Object, Comparator)): Explicitly
- 	reverse direction in list iterator.
- 	(rotate): Just return when list is empty.
- 
- 2004-09-23  Tom Tromey  <tromey@redhat.com>
- 
- 	PR java/17329:
- 	* testsuite/libjava.compile/pr17329.java: New file.
- 
- 	PR java/17380:
- 	* testsuite/libjava.jacks/jacks.xfail: Added 9.2-implicit-6 and
- 	9.2-implicit-7.
- 
- 2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
- 
- 	* Makefile.am: Run aclocal with -I ../config
- 	* acinclude.m4: Delete macros picked up from ../config and tidy.
- 	(AM_ICONV,AM_LC_MESSAGES, PKG_CHECK_MODULES): Delete.
- 	* aclocal.m4, configure, Makefile.in, gcj/Makefile.in: Regenerate.
- 	* include/Makefile.in, testsuite/Makefile.in: Regenerate.
- 
- 2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
- 
- 	* aclocal.m4: Regenerate with aclocal 1.9.2.
- 	* configure: Regenerate.
- 	* Makefile.in, gcj/Makefile.in: Regenerate with automake 1.9.2.
- 	* include/Makefile.in, testsuite/Makefile.in: Likewise.
- 
- 2004-09-22  David Daney  <ddaney@avtrex.com>
- 
- 	PR libgcj/17623
- 	* java/net/URL.java (URL): Copy userInfo from context.
- 	(getUserInfo): Return cached userInfo if present.
- 
- 2004-09-22  Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/6182:
- 	* mauve-libgcj: Enable java.lang.Character tests.
- 
- 2004-09-22  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* Makefile.am (lib_org_ietf_jgss_la_DEPENDENCIES): Add missing
- 	dependencies.
- 	(lib_org_ietf_jgss_la_LIBADD): Likewise.
- 	* Makefile.in: Regenerated.
- 
- 2004-09-22  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* configure.ac: Introduce AC_C_BIGENDIAN_CROSS for WORDS_BIGENDIAN.
- 	* configure: Regenerate.
- 	* include/config.h.in: Likewise.
- 	* jni/gtk-peer/gtkpeer.h (SWAPU32): Introduce macro to swap pixels.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c: Moved SWAPU32
- 	macro to gtkpeer.h.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePixels): Convert
- 	pixels from  0xBBGGRRAA to 0xAARRGGBB only on Little Endian
- 	architectures.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_updated):
- 	Likewise.
- 
- 2004-09-22  Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/14446:
- 	* java/util/zip/GZIPInputStream.java (read): Avoid sign extension
- 	when comparing CRCs.
- 	* java/util/zip/InflaterInputStream.java (onebytebuffer): New
- 	field.
- 	(read()): New overload.
- 
- 2004-09-21  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA):
- 	Indentation fix.
- 
- 2004-09-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/Socket.java
- 	(getLocalAddress): Return InetAddress.ANY_IF if not bound yet.
- 
- 2004-09-21  Casey Marshall  <csm@gnu.org>
- 
- 	* javax/crypto/MacSpi.java (clone): Provide meaningful
- 	implementation.
- 
- 2004-09-21  Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/16869:
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (MOSTLYCLEANFILES): Removed.
- 	(mostlyclean-local): Remove header files.
- 
- 2004-09-21  Casey Marshall  <csm@gnu.org>
- 
- 	* java/security/cert/X509CRLSelector.java:
- 	(match): remove unreachable try-catch clauses.
- 	Reported by: Dalibor Topic <robilad@kaffe.org>
- 
- 2004-09-21  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/util/TreeMap.java (root): Don't initialize.
- 	(TreeMap(Comparator)): Call fabricateTree(0).
- 	(fabricateTree): Initialize root and size when count is 0.
- 
- 2004-09-21  Sven de Marothy <sven@physto.se>
- 
- 	* java/nio/ByteBuffer.java (hashCode): Implemented.
- 	* java/nio/CharBuffer.java: Likewise.
- 	* java/nio/DoubleBuffer.java: Likewise.
- 	* java/nio/FloatBuffer.java: Likewise.
- 	* java/nio/LongBuffer.java: Likewise.
- 	* java/nio/IntBuffer.java: Likewise.
- 	* java/nio/ShortBuffer.java: Likewise.
- 
- 2004-09-21  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* javax/security/auth/x500/X500Principal.java: Fix some merge glitches.
- 
- 2004-09-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/net/ssl/SSLServerSocket.java:
- 	Removed comment about "Do not edit this file, it's generated.".
- 
- 2004-09-21  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	Import the big Crypto/Jessie/Security merge from Classpath.
- 
- 	* Makefile.am: Add imported files.
- 	* Makefile.in: Regenerate.
- 
- 	2004-08-14  Casey Marshall <csm@gnu.org>
- 
- 	The Big Crypto Merge of 2004.
- 
- 	* javax/security/auth/x500/X500Principal.java: Replaced with GNU
- 	Crypto's version.
- 
- 	Files imported from GNU Crypto.
- 	* javax/crypto/BadPaddingException.java
- 	* javax/crypto/Cipher.java
- 	* javax/crypto/CipherInputStream.java
- 	* javax/crypto/CipherOutputStream.java
- 	* javax/crypto/CipherSpi.java
- 	* javax/crypto/EncryptedPrivateKeyInfo.java
- 	* javax/crypto/ExemptionMechanism.java
- 	* javax/crypto/ExemptionMechanismException.java
- 	* javax/crypto/ExemptionMechanismSpi.java
- 	* javax/crypto/IllegalBlockSizeException.java
- 	* javax/crypto/KeyAgreement.java
- 	* javax/crypto/KeyAgreementSpi.java
- 	* javax/crypto/KeyGenerator.java
- 	* javax/crypto/KeyGeneratorSpi.java
- 	* javax/crypto/Mac.java
- 	* javax/crypto/MacSpi.java
- 	* javax/crypto/Makefile.am
- 	* javax/crypto/NoSuchPaddingException.java
- 	* javax/crypto/NullCipher.java
- 	* javax/crypto/NullCipherImpl.java
- 	* javax/crypto/SealedObject.java
- 	* javax/crypto/SecretKey.java
- 	* javax/crypto/SecretKeyFactory.java
- 	* javax/crypto/SecretKeyFactorySpi.java
- 	* javax/crypto/ShortBufferException.java
- 	* javax/crypto/interfaces/DHKey.java
- 	* javax/crypto/interfaces/DHPrivateKey.java
- 	* javax/crypto/interfaces/DHPublicKey.java
- 	* javax/crypto/interfaces/PBEKey.java
- 	* javax/crypto/spec/DESKeySpec.java
- 	* javax/crypto/spec/DESedeKeySpec.java
- 	* javax/crypto/spec/DHGenParameterSpec.java
- 	* javax/crypto/spec/DHParameterSpec.java
- 	* javax/crypto/spec/DHPrivateKeySpec.java
- 	* javax/crypto/spec/DHPublicKeySpec.java
- 	* javax/crypto/spec/IvParameterSpec.java
- 	* javax/crypto/spec/PBEKeySpec.java
- 	* javax/crypto/spec/PBEParameterSpec.java
- 	* javax/crypto/spec/RC2ParameterSpec.java
- 	* javax/crypto/spec/RC5ParameterSpec.java
- 	* javax/crypto/spec/SecretKeySpec.java
- 	* javax/security/auth/AuthPermission.java
- 	* javax/security/auth/DestroyFailedException.java
- 	* javax/security/auth/Destroyable.java
- 	* javax/security/auth/Policy.java
- 	* javax/security/auth/PrivateCredentialPermission.java
- 	* javax/security/auth/RefreshFailedException.java
- 	* javax/security/auth/Refreshable.java
- 	* javax/security/auth/Subject.java
- 	* javax/security/auth/SubjectDomainCombiner.java
- 	* javax/security/auth/callback/Callback.java
- 	* javax/security/auth/callback/CallbackHandler.java
- 	* javax/security/auth/callback/ChoiceCallback.java
- 	* javax/security/auth/callback/ConfirmationCallback.java
- 	* javax/security/auth/callback/LanguageCallback.java
- 	* javax/security/auth/callback/NameCallback.java
- 	* javax/security/auth/callback/PasswordCallback.java
- 	* javax/security/auth/callback/TextInputCallback.java
- 	* javax/security/auth/callback/TextOutputCallback.java
- 	* javax/security/auth/callback/UnsupportedCallbackException.java
- 	* javax/security/auth/login/AccountExpiredException.java
- 	* javax/security/auth/login/AppConfigurationEntry.java
- 	* javax/security/auth/login/Configuration.java
- 	* javax/security/auth/login/CredentialExpiredException.java
- 	* javax/security/auth/login/FailedLoginException.java
- 	* javax/security/auth/login/LoginContext.java
- 	* javax/security/auth/login/LoginException.java
- 	* javax/security/auth/login/NullConfiguration.java
- 	* javax/security/auth/x500/X500PrivateCredential.java
- 	* javax/security/sasl/AuthenticationException.java
- 	* javax/security/sasl/AuthorizeCallback.java
- 	* javax/security/sasl/RealmCallback.java
- 	* javax/security/sasl/RealmChoiceCallback.java
- 	* javax/security/sasl/Sasl.java
- 	* javax/security/sasl/SaslClient.java
- 	* javax/security/sasl/SaslClientFactory.java
- 	* javax/security/sasl/SaslException.java
- 	* javax/security/sasl/SaslServer.java
- 	* javax/security/sasl/SaslServerFactory.java
- 	* org/ietf/jgss/ChannelBinding.java
- 	* org/ietf/jgss/GSSContext.java
- 	* org/ietf/jgss/GSSCredential.java
- 	* org/ietf/jgss/GSSException.java
- 	* org/ietf/jgss/GSSManager.java
- 	* org/ietf/jgss/GSSName.java
- 	* org/ietf/jgss/MessageProp.java
- 	* org/ietf/jgss/Oid.java
- 	* org/ietf/jgss/MessagesBundle.properties
- 
- 	Files imported from Jessie <http://www.nongnu.org/jessie/>
- 	* javax/net/ServerSocketFactory.java
- 	* javax/net/SocketFactory.java
- 	* javax/net/VanillaServerSocketFactory.java
- 	* javax/net/VanillaSocketFactory.java
- 	* javax/net/ssl/HandshakeCompletedEvent.java
- 	* javax/net/ssl/HandshakeCompletedListener.java
- 	* javax/net/ssl/HostnameVerifier.java
- 	* javax/net/ssl/HttpsURLConnection.java
- 	* javax/net/ssl/KeyManager.java
- 	* javax/net/ssl/KeyManagerFactory.java
- 	* javax/net/ssl/KeyManagerFactorySpi.java
- 	* javax/net/ssl/ManagerFactoryParameters.java
- 	* javax/net/ssl/SSLContext.java
- 	* javax/net/ssl/SSLContextSpi.java
- 	* javax/net/ssl/SSLException.java
- 	* javax/net/ssl/SSLHandshakeException.java
- 	* javax/net/ssl/SSLKeyException.java
- 	* javax/net/ssl/SSLPeerUnverifiedException.java
- 	* javax/net/ssl/SSLPermission.java
- 	* javax/net/ssl/SSLProtocolException.java
- 	* javax/net/ssl/SSLServerSocket.java
- 	* javax/net/ssl/SSLServerSocketFactory.java
- 	* javax/net/ssl/SSLSession.java
- 	* javax/net/ssl/SSLSessionBindingEvent.java
- 	* javax/net/ssl/SSLSessionBindingListener.java
- 	* javax/net/ssl/SSLSessionContext.java
- 	* javax/net/ssl/SSLSocket.java
- 	* javax/net/ssl/SSLSocketFactory.java
- 	* javax/net/ssl/TrivialHostnameVerifier.java
- 	* javax/net/ssl/TrustManager.java
- 	* javax/net/ssl/TrustManagerFactory.java
- 	* javax/net/ssl/TrustManagerFactorySpi.java
- 	* javax/net/ssl/X509KeyManager.java
- 	* javax/net/ssl/X509TrustManager.java
- 	* javax/security/cert/Certificate.java
- 	* javax/security/cert/CertificateEncodingException.java
- 	* javax/security/cert/CertificateException.java
- 	* javax/security/cert/CertificateExpiredException.java
- 	* javax/security/cert/CertificateNotYetValidException.java
- 	* javax/security/cert/CertificateParsingException.java
- 	* javax/security/cert/X509CertBridge.java
- 	* javax/security/cert/X509Certificate.java
- 
- 	2004-08-20  Casey Marshall  <csm@gnu.org>
- 
- 	* java/security/cert/X509CRLSelector.java: New file.
- 	* java/security/cert/X509CertSelector.java: New file.
- 
- 2004-09-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/file/Handler.java
- 	(openConnection): Don't throw exception if host part for file: URI is
- 	present. setURL() keeps file: protocol if ftp: protocol is not
- 	available.
- 
- 2004-09-14  Richard Henderson  <rth@redhat.com>
- 
- 	* java/lang/natPosixProcess.cc (waitForSignal): Ignore return
- 	value of sigsuspend.
- 
- 2004-09-12  Tom Tromey  <tromey@redhat.com>
- 
- 	* javax/naming/CompoundName.java (CompoundName): Don't check for
- 	separator in "flat" case.
- 
- 2004-09-12  Michael Koch  <konqueror@gmx.de>
- 
- 	* libltdl/configure.ac: Fixed AM_INIT_AUTOMAKE usage and replaces
- 	AM_CONFIG_HEADER by AC_CONFIG_FILES.
- 	* libltdl/Makefile.in, libltdl/aclocal.m4, libltdl/configure:
- 	Regenerate.
- 
- 2004-09-11  Mohan Embar  <gnustuff@thisiscool.com>
- 
- 	PR libgcj/14751
- 	* win32-threads.cc (_Jv_ThreadInitData): Zero out thread
- 	handle in newly-allocated _Jv_Thread_t.
- 	(_Jv_ThreadDestroyData): Close thread handle.
- 	(_Jv_ThreadStart): Remove obsolete comment.
- 	Store handle of newly-created thread in _Jv_Thread_t.
- 	* include/win32-threads.h: #define WIN32_LEAN_AND_MEAN
- 	before including <windows.h>
- 	#define _Jv_HaveCondDestroy
- 
- 2004-09-11  Mohan Embar  <gnustuff@thisiscool.com>
- 
- 	* java/lang/natThread.cc (finalize_native): Destroy
- 	join conditional variable and mutex if these destroy
- 	operations are supported.
- 
- 2004-09-10  Dalibor Topic <robilad@kaffe.org>
- 
- 	* gnu/java/net/protocol/file/Connection.java (permission): New field.
- 	(DEFAULT_PERMISSION): New constant.
- 	(Connection): Create a FilePermission with permission to read file.
- 
- 2004-09-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/file/Connection.java
- 	(getLastModified): Moved around.
- 	(getPermission): Return stored permission.
- 
- 2004-09-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.in: Regenerate.
- 
- 2004-09-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am: Reverted accidently commited stuff.
- 	* configure: Regenerated.
- 
- 2004-09-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/file/Connection.java
- 	(lineSeparator): Made non-final.
- 	(static): Removed.
- 	(connect): Initialize lineSeparator lazily. Use ByteArrayInputStream
- 	instead of StringBufferInputStream.
- 
- 2004-09-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/file/Connection.java
- 	(connect): Handle file is a directory case.
- 
- 2004-09-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am
- 	(xlib_includes): Removed.
- 	(AM_CPPFLAGS): Renamed from INCLUDES.
- 	(lib_gnu_awt_xlib_la_CPPFLAGS): New automake variable.
- 	* Makefile.in: Regenerate.
- 
- 2004-09-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/security/ProtectionDomain.java,
- 	* java/util/PropertyPermissionCollection.java:
- 	Fixed javadocs all over.
- 
- 2004-09-09  Sven de Marothy  <sven@physto.se>
- 
- 	Patch from David Gilbert <david.gilbert@object-refinery.com>
- 	* java/lang/Comparable.java: Fixed documentation errors.
- 	* java/util/Arrays.java: Likewise.
- 
- 2004-09-09  Andrew John Hughes  <gnu_andrew@member.fsf.org>
- 
- 	* java/net/Inet4Address.java
- 	(Inet4Address): Added comment to serialization UID.
- 	* java/text/Format.java
- 	(Format): Added comment to serialization UID.
- 
- 2004-09-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/System.java
- 	(err): Fixed javadoci to point to setErr() and not setOut().
- 
- 2004-09-09  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	(normalizePath): Added special case for windows systems.
- 
- 2004-09-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/File.java
- 	(dupSeparator): Made private.
- 	(File(URI)): New constructor.
- 	(getParentFile): Fixed javadoc.
- 	(createTempFile): Reformated.
- 	(setReadOnly): Added comment.
- 	(deleteOnExit): Merged javadoc with classpath version.
- 
- 2004-09-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am: Don't try to include deps.mk.
- 	* Makefile.in: Regenerated.
- 
- 2004-09-08  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* configure.ac (AC_CONFIG_COMMANDS): Don't create subdirectories and
- 	.d files.
- 	* configure: Rebuilt.
- 
- 2004-09-04  Mohan Embar  <gnustuff@thisiscool.com>
- 
- 	* java/net/natNetworkInterfaceWin32.cc (getRealNetworkInterfaces):
- 	Changed pfn from static local to local.
- 
- 2004-09-03  Bryce McKinlay  <mckinlay@redhat.com>
-             H.J. Lu  <hongjiu.lu@intel.com>
- 
- 	PR libgcj/17290
- 	* Makefile.am (GCJCOMPILE): Remove definition.
- 	(AM_CFLAGS): Add -fclasspath and -fbootclasspath flags.
- 	Use LTGCJCOMPILE, not GCJCOMPILE, to build .lo targets.
- 	* Makefile.in: Rebuilt.
- 
- 2004-09-03  Kelley Cook  <kcook@gcc.gnu.org>
- 
- 	* configure.ac (enable-gc-debug): Update help for new syntax.
- 	* configure: Regenerate.
- 
- 2004-09-03  David Daney  <ddaney@avtrex.com>
- 
- 	* include/mips-signal.h: Update copyright.
- 
- 2004-09-03  David Daney  <ddaney@avtrex.com>
- 
- 	* configure.host: Use -fno-use-divide-subroutine for mips*-*-linux*.
- 	* include/mips-signal.h: Added HANDLE_FPE support.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicTextAreaUI.java
- 	(create): New method.
- 	* javax/swing/text/DefaultHighlighter.java
- 	(DefaultHighlightPainter.debugRect): Removed.
- 	* javax/swing/text/StyleContext.java
- 	(DEFAULT_STYLE): New field.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java
- 	(initComponentDefaults): Add keybindings for selection.backward and
- 	selection-forward for text components.
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(paintSafely): Paint highlight only when something is actually
- 	selected.
- 	* javax/swing/text/DefaultCaret.java
- 	(handleHighlight): New method.
- 	(setSelectionVisible): Don't do anything when nothing changes.
- 	Handle highlight.
- 	(moveDot): Reimplemented. Handle highlight.
- 	(setDot): Set mark too. Handle highlight.
- 	(getSelectionPainter): New method.
- 	* javax/swing/text/DefaultEditorKit.java
- 	(defaultActions): Added new actions for text selection.
- 	* javax/swing/text/DefaultHighlighter.java
- 	(DefaultHighlightPainter): New inner class.
- 	(DefaultPainter): New field.
- 	(paint): Implemented.
- 	* javax/swing/text/PlainView.java
- 	(paint): Don't draw background here again.
- 	* javax/swing/text/Utilities.java
- 	(getTabbedTextWidth): Use width of ' ' instead of 'm' for tabsize.
- 	(drawTabbedText): Likewise.
- 
- 2004-08-31  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/JComponent.java
- 	(resetKeyboardActions): Add null checks.
- 
- 2004-08-31  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/DefaultButtonModel.java:
- 	Skip group notification when no group is set.
- 
- 2004-08-31  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/JColorChooser.java:
- 	Make a couple inner classes static, for jikes.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(RottView.modelToView): New method.
- 	(UpdateHandler): Renamed from EventHandler.
- 	(updateHandler): Renamed from eventHandler.
- 	(modelToView): Implemented.
- 	* javax/swing/text/AbstractDocument.java
- 	(BranchElement.getElement): Return null for non-existing indeces.
- 	(BranchElement.getElementIndex): Return 0 in some corner cases.
- 	* javax/swing/text/FieldView.java
- 	(modelToView): New method.
- 	* javax/swing/text/PlainView.java
- 	(modelToView): Made public.
- 
- 2004-08-31  Kim Ho  <kho@redhat.com>
- 
- 	* Makefile.am: New files.
- 	* Makefile.in: Regenerate.
- 	* gcj/Makefile.in: Regenerate.
- 	* include/Makefile.in: Regenerate.
- 	* java/awt/Color.java: Fix documentation.
- 	(RGBtoHSB): Use floats for conversions.
- 	* javax/swing/ButtonGroup.java: Run Jalopy.
- 	(setSelected): Reimplement.
- 	* javax/swing/DefaultButtonModel.java: Run Jalopy.
- 	(changeState): Let ButtonGroup know that the button
- 	is changing state.
- 	* javax/swing/JColorChooser.java: Implement.
- 	* javax/swing/JLabel.java: Run Jalopy.
- 	* javax/swing/JSpinner.java: Run Jalopy.
- 	(setValue): New method.
- 	* javax/swing/JTabbedPane.java: Run Jalopy.
- 	(removeTabAt): Call correct remove method.
- 	* javax/swing/SpinnerNumberModel.java: Run Jalopy.
- 	(getPreviousValue): Compare minimum value.
- 	* javax/swing/Timer.java: Run Jalopy.
- 	(run): Comment out println.
- 	* javax/swing/ToolTipManager.java:
- 	(mouseMoved): Get new tooltip text for location.
- 	* javax/swing/colorchooser/AbstractColorChooserPanel.java:
- 	Jalopy and Javadoc.
- 	* javax/swing/colorchooser/ColorChooserComponentFactory.java:
- 	Implement.
- 	* javax/swing/colorchooser/DefaultColorSelectionModel.java:
- 	Run Jalopy.
- 	(setSelectedColor): Fire ChangeEvent.
- 	* javax/swing/colorchooser/DefaultHSBChooserPanel.java:
- 	New file. Implement.
- 	* javax/swing/colorchooser/DefaultPreviewPanel.java:
- 	Ditto.
- 	* javax/swing/colorchooser/DefaultRGBChooserPanel.java:
- 	Ditto.
- 	* javax/swing/colorchooser/DefaultSwatchChooserPanel.java:
- 	Ditto.
- 	* javax/swing/plaf/basic/BasicArrowButton.java:
- 	(getArrow): Fix size of upward pointing button.
- 	* javax/swing/plaf/basic/BasicColorChooserUI.java:
- 	Implement.
- 	* javax/swing/plaf/basic/BasicSliderUI.java:
- 	(getWidthOfWidestLabel): Use preferred dimensions.
- 	(getHeightOfTallestLabel): Ditto.
- 	* javax/swing/plaf/basic/BasicSpinnerUI.java:
- 	Run Jalopy.
- 	(mousePressed): Disable changes to spinner if it is not enabled.
- 	* testsuite/Makefile.in: Regenerate.
- 
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicTableHeaderUI.java,
- 	javax/swing/plaf/basic/BasicTableUI.java:
- 	Added copyright notice.
- 
- 2004-08-31  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* Makefile.am: Added new files.
- 	* Makefile.in: Regenerate.
- 	* javax/swing/ComboBoxEditor.java: Added javadocs.
- 	* javax/swing/ComboBoxModel.java: Likewise.
- 	* javax/swing/DefaultComboBoxModel.java: Implemented.
- 	* javax/swing/DefaultListCellRenderer.java: Added javadocs
- 	and ran through jalopy to fix formatting style.
- 	(getListCellRendererComponent): Use appropriate border
- 	if renderer has focus and use noFocusBorder when it doesn't.
- 	* javax/swing/JComboBox.java: Implemented.
- 	* javax/swing/JList.java:
- 	(locationToIndex): New Method. Implemented.
- 	(indexToLocation): New Method.
- 	* javax/swing/JPopupMenu.java:
- 	(visible): New field.
- 	(isVisible): Changed to use new field above.
- 	(setVisible): Likewise.
- 	* javax/swing/MutableComboBoxModel.java: Added javadocs.
- 	* javax/swing/plaf/basic/BasicArrowButton.java:
- 	(shadow): Changed default color to Color.gray.
- 	* javax/swing/plaf/basic/BasicComboBoxUI.java: New File.
- 	UI delegate for JComboBox.
- 	* javax/swing/plaf/basic/BasicComboPopup.java: New File.
- 	Popup menu containing list of JComboBox's items.
- 	* javax/swing/plaf/basic/BasicComboBoxEditor.java: New File.
- 	* javax/swing/plaf/basic/BasicComboBoxRenderer.java: New File.
- 	* javax/swing/plaf/basic/BasicComboBoxUI.java: New File.
- 	* javax/swing/plaf/basic/BasicComboPopup.java: New File.
- 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
- 	(popupMenuWillBecomeVisible): Set selected path to the first
- 	element only if it is of type MenuElement. Also fix formatting
- 	style.
- 	* javax/swing/plaf/basic/ComboPopup.java: Added javadocs and missing
- 	methods signatures.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AbstractDocument.java
- 	(createBranchElement): Use new constructor of BranchElement.
- 	(createLeafElement): Renamed arguments.
- 	(getRootElements): Implemented.
- 	(BranchElement.start): Removed.
- 	(BranchElement.end): Likewise.
- 	(BranchElement.BranchElement): Fixed arguments.
- 	(BranchElement.getEndOffset): Reimplemented.
- 	(BranchElement.getStartOffset): Likewis.
- 	* javax/swing/text/DefaultCaret.java
- 	(paint): Draw simple vertical line as caret instead of a rectangle.
- 	* javax/swing/text/JTextComponent.java
- 	(setText): Use doc directly.
- 	* javax/swing/text/PlainView.java
- 	(nextTabStop): Implemented.
- 	* javax/swing/text/Utilities.java
- 	(drawTabbedText): nextTabStop() returns an absolute x position.
- 	(getTabbedTextWidth): Likewise.
- 
- 2004-08-31  Graydon Hoare  <graydon@redhat.com>
- 
- 	* java/awt/Component.java
- 	(isFocusTraversable): Predicate on isLightweight()
- 	(setFocusable): Set isFocusTraversableOverridden.
- 	(requestFocus): Predicate peer dispatch on !isLightweight()
- 	(requestFocusInWindow): Likewise.
- 	(dispatchEventImpl): Coordinate with KeyboardFocusManager.
- 	* java/awt/Container.java
- 	(dispatchEventImpl): Predicate on event mask.
- 	(LightweightDispatcher): Remove focus machinery.
- 	* java/awt/DefaultFocusTraversalPolicy.java
- 	(accept): Expand predicate to include isFocusable().
- 	* java/awt/DefaultKeyboardFocusManager.java:
- 	Globally change c.dispatchEvent(e) to redispatchEvent(c,e)
- 	* java/awt/KeyboardFocusManager.java
- 	(redispatchEvent): Synchronize on event to prevent feedback.
- 	* javax/swing/AbstractButton.java
- 	(ButtonFocusListener): Remove class.
- 	(init): Set focusPainted, focusable.
- 	* javax/swing/ActionMap.java (get): Check parent for null.
- 	* javax/swing/InputMap.java (get): Likewise.
- 	* javax/swing/JComponent.java
- 	(inputMap_whenFocused): New InputMap.
- 	(inputMap_whenAncestorOfFocused): Likewise.
- 	(inputMap_whenInFocusedWindow): Likewise.
- 	(getActionForKeyStroke): Rewrite.
- 	(getConditionForKeystroke): Likewise.
- 	(ActionListenerProxy): New private class.
- 	(setInputMap): Implement.
- 	(getInputMap): Likewise.
- 	(setActionMap): Likewise.
- 	(getActionMap): Likewise.
- 	(processComponentKeyEvent): New empty method.
- 	(processKeyEvent): Implement.
- 	(processKeyBinding): Likewise.
- 	(resetKeyboardActions): Rewrite.
- 	* javax/swing/KeyStroke.java: Rewrite.
- 	* javax/swing/SwingUtilities.java
- 	(notifyAction): Implement.
- 	(replaceUIActionMap): Likewise.
- 	(replaceUIInputMap): Likewise.
- 	* javax/swing/plaf/basic/BasicButtonListener.java
- 	(focusGained): Implement.
- 	(focusLost): Repaint if focusPainted().
- 	(installKeyboardActions): Install pressed / released actions.
- 	(uninstallKeyboardActions): Implement.
- 	* javax/swing/plaf/basic/BasicButtonUI.java
- 	(focusColor): New field.
- 	(installDefaults): Load focus color, install input map.
- 	(installKeyboardActions): Implement.
- 	(uninstallKeyboardActions): Likewise.
- 	(paintFocus): Rewrite.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java
- 	(Button.focus): New default, midPurple.
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(kit): Make static.
- 	(installUI): Get doc from kit, load defaults.
- 	(getKeymapName): Implement.
- 	(createKeymap): Likewise.
- 	(installKeyboardActions): Likewise.
- 	(getInputMap): Likewise.
- 	(getActionMap): Likewise.
- 	(createActionMap): Likewise.
- 	* javax/swing/text/AbstractDocument.java
- 	(getStartPosition): Implement.
- 	(getEndPosition): Likewise.
- 	* javax/swing/text/DefaultEditorKit.java
- 	(CopyAction): New class.
- 	(CutAction): Likewise.
- 	(DefaultKeyTypedAction): Likewise.
- 	(InsertBreakAction): Likewise.
- 	(InsertContentAction): Likewise.
- 	(InsertTabAction): Likewise.
- 	(PasteAction): Likewise.
- 	(defaultActions): New static table.
- 	(createCaret): Implement.
- 	(getActions): Likewise.
- 	* javax/swing/text/JTextComponent.java
- 	(KeymapWrapper): New private class.
- 	(KeymapActionMap): Likewise.
- 	(DefaultKeymap): New class.
- 	(keymaps): New static table.
- 	(keymap): New field.
- 	(getKeymap): Implement.
- 	(removeKeymap): Likewise.
- 	(addKeymap): Likewise.
- 	(setKeymap): Likewise.
- 	(loadKeymap): Likewise.
- 	(getActions): Likewise.
- 	(margin): New field.
- 	(JTextComponent): Build and install default keymap.
- 	* javax/swing/text/TextAction.java
- 	(textAction): Call super properly.
- 	(getTextComponent): Implement.
- 	* javax/swing/text/Utilities.java
- 	(drawTabbedText): Adjust position by ascent.
- 
- 2004-08-31  David Jee  <djee@redhat.com>
- 
- 	PR AWT/17156
- 
- 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
- 	(setEnabled): Make it a native method.
- 	* java/awt/DefaultKeyboardFocusManager.java
- 	(postProcessKeyEvent): Only post event if the menu item
- 	is active.
- 	* java/awt/MenuItem.java:
- 	Private field 'enabled' should be true by default.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
- 	(setEnabled): New function.
- 
- 2004-08-31  David Jee  <djee@redhat.com>
- 
- 	PR AWT/17059
- 
- 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
- 	(nativeSetHelpMenu): New native method declaration.
- 	(addHelpMenu): Call nativeSetHelpMenu().
- 	(addMenu): Remove.
- 	* java/awt/MenuBar.java
- 	(setHelpMenu): Call addNotify() on the new help menu.
- 	(add): Call addNotify() on the new menu.
- 	(addNotify): Set the help menu if one exists.
- 	* java/awt/peer/MenuBarPeer.java
- 	(addMenu): Remove.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
- 	(nativeSetHelpMenu): New method.
- 
- 2004-08-31  Graydon Hoare  <graydon@redhat.com>
- 
- 	* Makefile.am: Add new files.
- 	* Makefile.in: Regenerate.
- 	* javax/swing/Box.java: Fix setting of layout in ctor.
- 	* javax/swing/JScrollPane.java: Scroll headers as well.
- 	* javax/swing/JTable.java: Reimplement.
- 	* javax/swing/JViewPort.java: Only add non-null children.
- 	* javax/swing/ScrollPaneLayout.java: Correct header calculations.
- 	* javax/swing/Timer.java: Fix stopping null waker.
- 	* javax/swing/plaf/basic/BasicTableHeaderUI.java: New file.
- 	* javax/swing/plaf/basic/BasicTableUI.java: New file.
- 	* javax/swing/table/DefaultTableCellRenderer.java: Configure.
- 	* javax/swing/table/DefaultTableColumnModel.java: Flesh out.
- 	* javax/swing/table/DefaultTableModel.java: Clean up.
- 	* javax/swing/table/JTableHeader.java: Implement.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* javax/swing/JSpinner.java (getChangeListeners): Remove double
- 	semi-colon.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
- 	Declare variables at top of functions/block.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Likewise.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/lang/Rectangle.java (intersects): Check r.width and r.height
- 	first.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/PlainView.java
- 	(selectedColor): New field.
- 	(unselectedColor): Likewise.
- 	(font): Likewise.
- 	(updateMetrics): New method.
- 	(lineToRect): Likewise.
- 	(modelToView): Likewise.
- 	(drawSelectedText): Use color from JTextComponent ad draw with
- 	Utilities class.
- 	(drawUnselectedText): Likewise.
- 	(paint): Initialize helper fields.
- 	* javax/swing/text/View.java
- 	(getChildAllocation): New method.
- 	(getViewIndex): Likewise.
- 	(getToolTipText): Likewise.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/Utilities.java
- 	(drawTabbedText): Reimplemented.
- 	(getTabbedTextWidth): Likewise.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(installDefaults): Install caret and highlighter.
- 	(modelToView): Use Bias.Forward when calling sibling.
- 	* javax/swing/text/AbstractDocument.java
- 	(ElementEdit): Implements DocumentEvent.ElementChange.
- 	(ElementEdit.ElementEdit): New method.
- 	(ElementEdit.getChildrenAdded): Likewise.
- 	(ElementEdit.getChildrenRemoved): Likewise.
- 	(ElementEdit.getElement): Likewise.
- 	(ElementEdit.getIndex): Likewise.
- 	* javax/swing/text/DefaultCaret.java
- 	(color): Removed.
- 	(textComponent): Renamed from parent, made private.
- 	(selectionVisible): Renamed from vis_sel, made private.
- 	(blinkRate): Renamed from blink, made private.
- 	(magicCaretPosition): Renamed from magic, made private.
- 	(visible): Renamed from vis, made private.
- 	(dot): Made private.
- 	(mark): Likewise.
- 	(deinstall): Remove as MouseMotionListener.
- 	(install): Initialize textComponent first. Add as MouseMotionListener.
- 	(paint): Reimplemented.
- 	* javax/swing/text/JTextComponent.java
- 	(setCaret): Deinstall old caret, install new one and fire property
- 	change after setting property.
- 	(setHighlighter): Deinstall old highlighter, install new one and fire
- 	property change after setting property.
- 	(setCaretColor): Fire property change after setting property.
- 	(setDisabledTextColor): Likewise.
- 	(setSelectedTextColor): Likewise.
- 	(setSelectionColor): Likewise.
- 	(modelToView): New method.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AbstractDocument.java
- 	(getText): Simplified.
- 	* javax/swing/text/Segment.java
- 	(current): New field.
- 	(current): Reimplemented.
- 	(first): Likewise.
- 	(getIndex): Likewise.
- 	(last): Likewise.
- 	(next): Likewise.
- 	(previous): Likewise.
- 	(setIndex): Likewise.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicButtonUI.java
- 	(defaultTextIconGap): Made protected.
- 	(defaultTextShiftOffset): Likewise.
- 	(textShiftOffset): New field.
- 	(clearTextShiftOffset): New method.
- 	(getTextShiftOffset): Likewise.
- 	(setTextShiftOffset): Likewise.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(installUI): Add eventHandler as property listener.
- 	(uninstallUI): remove eventHandler as propert listener.
- 	(installDefaults): Added comment.
- 	(installListeners): Likewise.
- 	(installKeyboardActions): Likewise.
- 	(uninstallDefaults): Likewise.
- 	(uninstallListeners): Likewise.
- 	(uninstallKeyboardActions): Likewise.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AbstractDocument.java:
- 	Fixed some typos in comments.
- 	(insertString): Reimplemented.
- 	(remove): Likewise.
- 	(replace): New method.
- 	(children): Dont use fully qualified class name.
- 	(DefaultDocumentEvent.offset): Renamed from off.
- 	(DefaultDocumentEvent.length): Renamed from len.
- 	(DefaultDocumentEvent.type): New field.
- 	(DefaultDocumentEvent.DefaultDocumentEvent): New constructor.
- 	(DefaultDocumentEvent.getType): Implemented.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(RootView.textComponent): Removed.
- 	(RootView.RootView): Don't initialize textComponent.
- 	(RootView.getViewFactory): New method.
- 	(EventHandler): New inner class.
- 	(rootView): Initialize at instance creation.
- 	(eventHandler): New field.
- 	(installUI): Don't create view hierarchy directly,
- 	call modelChanged() instead.
- 	(modelChanged): New method.
- 	* javax/swing/text/JTextComponent.java
- 	(setDocument): Fire property change event.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(RootView.paint): Removed debug output.
- 	(paintSafely): Draw highlighter before text.
- 	(paintBackground): Use background color of text component.
- 	* javax/swing/plaf/basic/BasicToggleButtonUI.java:
- 	Reformatted.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicToolBarUI.java
- 	(BasicToolBarUI): Fixed arguments for constructor.
- 	(createUI): Fixed creation of object.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/DefaultListSelectionModel.java
- 	(fireValueChanged): Renamed from fireSelectionValueChanged,
- 	made protected.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/TabSet.java
- 	(TabSet): Implements java.io.Serializable.
- 	* javax/swing/text/TabStop.java
- 	(TabStop): Implements java.io.Serializable.
- 	(TabStop): Made public.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JComponent.java
- 	(setUI): Fire PropertyChange.
- 	* javax/swing/JLabel.java
- 	(text): Renamed from labelText.
- 	(horizontalAlignment): New default vlaue.
- 	(icon): Renamed from activeIcon.
- 	(displayedMnemonic): Renamed from mnemonicKey, added default value.
- 	(displayedMnemonicIndex): Renamed from underlineChar.
- 	(setDisplayedMnemonic): Reimplemented.
- 	* javax/swing/JRadioButton.java
- 	(JRadioButton): New constructors.
- 	* javax/swing/JTextField.java
- 	(JTextField): Throw exception if colums < 0, initialitialz
- 	this.columns directly and initialize document with text conditionally.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicFormattedTextFieldUI.java,
- 	javax/swing/plaf/basic/BasicPasswordFieldUI.java,
- 	javax/swing/plaf/basic/BasicTextAreaUI.java: New files.
- 	* javax/swing/text/FieldView.java
- 	(paint): Just call super method for now.
- 	* Makefile.am: Added new files.
- 	* Makefile.in: Regenerated.
- 
- 2004-08-31  Ka-Hing Cheung  <kahing@javabsp.org>
- 
- 	* javax/swing/AbstractSpinnerModel.java,
- 	javax/swing/JSpinner.java,
- 	javax/swing/SpinnerNumberModel.java,
- 	javax/swing/plaf/basic/BasicSpinnerUI.java:
- 	New files.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java
- 	(initClassDefaults): Added defaults for BasicSpinnerUI.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am: Added new files.
- 	* Makefile.in: Regenerated.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/TransferHandler.java,
- 	javax/swing/plaf/basic/ComboPopup.java: New files
- 	* Makefile.am: Added javax/swing/TransferHandler.java and
- 	javax/swing/plaf/basic/ComboPopup.java
- 	* Makefile.in: Regenerated.
- 
- 2004-08-31  Roman Kennke  <roman@ontographics.com>
- 
- 	* javax/swing/text/Utilities.java: New file.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am: Added javax/swing/text/Utilities.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-08-31  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/text/SimpleAttributeSet.java: New file.
- 	* javax/swing/text/StyleConstants.java: New file.
- 	* javax/swing/text/StyleContext.java: New file.
- 	* javax/swing/text/TabSet.java: New file.
- 	* javax/swing/text/TabStop.java: New file.
- 	* javax/swing/text/AbstactDocument.java:
- 	(AbstractElement): Implement attribute support.
- 	* javax/swing/text/AttributeSet.java
- 	(NameAttribute): New static field.
- 	(ResolveAttribute): New static field.
- 	* Makefile.am: Update for new files.
- 	* Makefile.in: Regenerate.
- 
- 2004-08-31  Craig Black  <craig.black@aonix.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java
- 	(drawImage): Add support for scaling pixmaps.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
- 	(copyAndScalePixmap): New native method.
- 
- 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	PR AWT/16121
- 	* jni/gtk-peer/gthread-jni.c: Include stdio.h.  Eliminate
- 	type-punning compiler warnings using unions.
- 	(throw): Replace bzero with memset.
- 
- 2004-08-31  Andreas Tobler  <a.tobler@schweiz.ch>
- 	    Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: Move
- 	NSA_PB macros to gtkpeer.h.  Include gtkpeer.h.
- 	* jni/gtk-peer/gtkpeer.h: Move NSA_PB macros here.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(nativeSetIconImageFromDecoder): Use NSA_GET_PB_PTR macro.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c:
- 	#include gdk.h, not gtk.h. #include jni.h, native_state.h, string.h
- 	and stdlib.h, not gtkpeer.h.
- 	(*vm): New static variable.
- 	(areaPreparedID): Make static.
- 	(areaUpdatedID): Likewise.
- 	(area_prepared): Get and use JNIEnv through stored JavaVM *vm.
- 	(area_prepared): Likewise.
- 	(area_updated): Likewise.
- 	(closed): Likewise.
- 	(initStaticState): Initialize *vm javaVM.
- 	(pumpBytes): Use given env, not global gdk_env.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/awt/geom/CubicCurve2D.java (solveCubic): Removed duplicate
- 	comments.
- 
- 2004-08-31  Sven de Marothy  <sven@physto.se>
- 
- 	* java/awt/geom/CubicCurve2D.java: Reindent.
- 	(contains): Implemented.
- 	(intersects): Implemented.
- 	* java/awt/geom/QuadCurve2D.java: Likewise.
- 	* java/awt/geom/GeneralPath.java: Reindent and document.
- 	Fully (re)implemented using separate xpoints and ypoints
- 	float[] coords.
- 	* java/awt/geom/RoundRectangle2D.java: Several bugfixes (Bug #6007).
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JMenuItem.java
- 	(getMenuDragMouseListeners): New method.
- 	(getMenuKeyListeners): Likewise.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractButton.java
- 	(model): Made protected.
- 	(actionListener): Likewise.
- 	(changeListener): Likewise.
- 	(itemListener): Likewise.
- 	(multiClickThreshhold): New field.
- 	(getActionListeners): New method.
- 	(getChangeListeners): Likewise.
- 	(getItemListeners): Likewise.
- 	(fireItemStateChanged): Simplified implementation.
- 	(fireActionPerformed): Likewise.
- 	(fireStateChanged): Likewise.
- 	(getMultiClickThreshhold): New method.
- 	(setMultiClickThreshhold): Likewise.
- 
- 2004-08-31  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/awt/image/Kernel.java (clone): Use super.clone().
- 
- 2004-08-31  David Jee  <djee@redhat.com>
- 
- 	PR AWT/16682
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
- 	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
- 	(nativeSetIconImageFromData): New native method declaration.
- 	(setIconImage): Handle images not produced from GdkPixbufDecoder.
- 	* gnu/java/awt/peer/gtk/GtkImage.java
- 	(getPixelCache): New method.
- 	(getColorModel): New method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
- 	(free_pixbuf_data): New helper function.
- 	(nativeSetIconImageFromData): New function.
- 
- 2004-08-31  Graydon Hoare  <graydon@redhat.com>
- 
- 	PR SWING/16576
- 	* javax/swing/JLayeredPane.java
- 	(setLayer): Permit changing layer after addition.
- 	(setPosition): Permit over-length positions.
- 	(layerToRange): Compare intValue()s.
- 	* javax/swing/Box.java (createHorizontalBox): Implement.
- 	(createRigidArea): Likewise.
- 	(createVerticalBox): Likewise.
- 
- 2004-08-31  Kim Ho  <kho@redhat.com>
- 
- 	* java/awt/Component.java:
- 	(processMouseEvent): Consume event after
- 	listeners process it.
- 	(processMouseMotionEvent): ditto.
- 	(processMouseWheelEvent): ditto.
- 	* java/awt/Container.java:
- 	(acquireComponentForMouseEvent):
- 	Do not dispatch to events that have been
- 	removed from the Container.
- 	(handleEvent): Consume the MouseEvents.
- 	* javax/swing/RepaintManager.java:
- 	(paintDirtyRegions): Do not add to list of
- 	damaged areas if the component has no root.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Clean ip imports.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java (getFontPeer): Don't return
- 	null when a MissingResourceException is thrown. Should never happen.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/awt/EventQueue.java (postEvent): Throw NullPointerException
- 	when argument is null.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
- 	Define hid at start of function.
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
- 	Likewise.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/awt/EmbeddedWindow.java: Reindent.
- 	* javax/swing/JButton.java: Reindent.
- 	* javax/swing/JCheckBox.java: Reindent.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.am (gtk_c_source_files): Added
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c.
- 	(gtk_awt_peer_sources): Added
- 	gnu/java/awt/peer/gtk/GThreadMutex.java and
- 	gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-08-31  Archie Cobbs  <archie@dellroad.org>
- 
- 	* jni/gtk-peer/gthread-jni.c: don't #include nonexistent files
- 
- 2004-08-31  Steven Augart  <augart@watson.ibm.com>
- 
- 	* jni/gtk-peer/gthread-jni.c (c-font-lock-extra-types):
- 	Added jfieldID, jmethodID.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): Initialize
- 	gdk_env before calling any gdk or gtk function.
- 
- 	* gnu/java/awt/peer/gtk/GtkMainThread.java (gtkInitCalled): New field.
- 	(GtkMainThread): Call wait() in while loop waiting for gtkInitCalled.
- 	(run): Set gtkInitCalled.
- 
- 2004-08-31  Steven Augart  <augart@watson.ibm.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkMainThread.java (run): Pass the value of
- 	the gnu.classpath.awt.gtk.portable.native.sync system property to C.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): New argument,
- 	portableNativeSync.  Delegate PORTABLE_NATIVE_SYNC work to
- 	init_glib_threads.
- 	(init_glib_threads): New function.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* jni/gtk-peer/gthread-jni.c: Define MIN_, MAX_ and NORM_
- 	PRIORITY when not already defined in header file.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* jni/gtk-peer/gthread-jni.c (setup_cache): Call
- 	ExceptionOccurred, not ExceptionCheck, when we don't have JNI 1.2.
- 
- 2004-08-31  Steven Augart  <augart@watson.ibm.com>
- 
- 	* gnu/native/jni/gtk-peer/gthread-jni.c: Indentation fixes.
- 	Implemented missing functions for GTK2.
- 	Added error handling.
- 	Renamed static functions out of the g_ namespace.
- 	Added TRACE_API_CALLS, EXPLAIN_TROUBLE, EXPLAIN_BROKEN,
- 	EXPLAIN_BADLY_BROKEN, and DELETE_LOCAL_REFS options.
- 	Rewrote global-reference code.
- 	Eliminated cascading errors.
- 	(mutex_trylock_jni_impl) Fully implemented.
- 	(cond_timed_wait_jni_impl) Went from millisecond to microsecond
- 	resolution.
- 	(setup_cache) New function.
- 	(mutex_cond_wait_jni_impl, mutex_cond_timed_wait_jni_impl) Fixed
- 	bug where they were not unlocking the GMutex associated with the
- 	condition variable during the wait on that condition variable.
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
- 	native/jni/gtk-peer/gthread-jni.c,
- 	native/jni/gtk-peer/gthread-jni.h
- 	(g_thread_jni_functions): Renamed to ...
- 	(portable_native_sync_jni_functions): this name.
- 	(gdk_vm): Renamed to...
- 	(the_vm): this name.
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(gdk_vm): Removed duplicate definition.
- 	(gtkInit): Removed stray message to stdout.
- 	(gtkInit): Use g_malloc and g_free instead of malloc and free.
- 	(gtkInit): Fix a const assignment bug.
- 	(gtkInit): Simplified code.
- 
- 	* gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java,
- 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c,
- 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h,
- 	gnu/java/awt/peer/gtk/GThreadMutex.java:
- 	New files.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* javax/swing/Box.java: Put FIXME comment above class declaration.
- 	* javax/swing/JButton.java: Remove illegal L&F HTML from comments.
- 	* javax/swing/JCheckBox.java: Likewise.
- 	* javax/swing/JDialog.java: Likewise.
- 	* javax/swing/JRadioButton.java: Likewise.
- 	* javax/swing/JToggleButton.java: Likewise.
- 	* javax/swing/UIManager.java: Likewise.
- 	* javax/swing/border/TitledBorder.java: Likewise.
- 	* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Likewise.
- 	* javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
- 	* javax/swing/text/JTextComponent.java: Likewise.
- 
- 2004-08-31  David Jee  <djee@redhat.com>
- 
- 	PR AWT/16682
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
- 	(setIconImage): Add a FIXME for unhandled cases.
- 
- 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	PR AWT/16040
- 	* gnu/awt/LightweightRedirector.java: Call getModifiersEx, not
- 	getModifiers.  Replace old button masks with new ones.
- 	* gnu/awt/xlib/XEventLoop.java: Likewise.
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Likewise.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
- 	* gnu/java/awt/peer/gtk/GtkListPeer.java: Likewise.
- 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
- 	* java/awt/AWTKeyStroke.java: Remove old modifier masks.
- 	* java/awt/Component.java: Replace old modifier	masks with new
- 	ones.
- 	* java/awt/Container.java: Call getModifiersEx, not
- 	getModifiers.
- 	* java/awt/DefaultKeyboardFocusManager.java: Likewise.  Remove
- 	old modifier masks.
- 	* javax/swing/JMenuItem.java: Replace old button masks with new
- 	ones.
- 	* javax/swing/KeyStroke.java: Call getModifiersEx, not
- 	getModifiers.
- 	* javax/swing/SwingUtilities.java: Likewise.
- 	* javax/swing/plaf/basic/BasicButtonListener.java: Likewise.
- 	* javax/swing/plaf/basic/BasicInternalFrameUI.java: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Replace old
- 	mask macros with new ones.
- 	* jni/gtk-peer/gtkpeer.h: Replace old button and modifier mask
- 	macros with new ones representing new masks.
- 
- 2004-08-31  Craig Black  <craig.black@aonix.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java
- 	(drawRoundRect): Implemented.
- 	(fillRoundRect): Implemented.
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(drawRoundRect): Reimplemented to match GdkGraphics.
- 	(fillRoundRect): Reimplemented to match GdkGraphics.
- 
- 2004-08-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.in: Regenerated.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/EmbeddedWindow.java
- 	(addNotify): Use AccessController to allow execution of privileged
- 	code.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/EmbeddedWindow.java
- 	(static): Removed.
- 	(addNotify): Set peer via reflection.
- 	(setWindowPeer): Removed.
- 	* gnu/java/awt/natEmbeddedWindow.cc: Removed.
- 	* Makefile.am (nat_source_files):
- 	Removed gnu/java/awt/natEmbeddedWindow.cc.
- 
- 2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* Makefile.am: Add  gnu/java/security/action/GetPropertyAction.java
- 	and gnu/java/security/action/SetAccessibleAction.java.
- 
- 2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gnu/java/security/action/GetPropertyAction.java (setParameters):
- 	Renamed from 'setName'. New 2-argument form with default value.
- 	(run): Pass default 'value' parameter to System.getProperty().
- 	* gnu/java/security/action/SetAccessibleAction.java: Fix javadoc
- 	typos.
- 
- 2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gnu/java/security/action/GetPropertyAction.java: New class.
- 	* gnu/java/security/action/SetAccessibleAction.java: New class.
- 
- 2004-08-31  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
- 	(setIconImage): Check if image is null.
- 
- 2004-08-31  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
- 	(create): Set the icon image.
- 	(nativeSetIconImage): New native method declaration.
- 	(setIconImage): Implement.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(nativeSetIconImage): New function.
- 
- 2004-08-31  Dalibor Topic <robilad@kaffe.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(filenameFilterCallback): Declare local variable accepted before use.
- 
- 2004-08-31  Dalibor Topic <robilad@kaffe.org>
- 
- 	* gnu/java/awt/ComponentDataBlitOp.java:
- 	Cleaned up imports.
- 
- 2004-08-31  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/java/awt/peer/GLightweightPeer.java,
- 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
- 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	javax/swing/JScrollPane.java: Removed
- 	redundant imports.
- 
- 2004-08-31  David Jee  <djee@redhat.com>
- 
- 	* java/awt/DefaultKeyboardFocusManager.java
- 	(postProcessKeyEvent): Only activate MenuShortcuts on KEY_PRESSED
- 	event.  Fix shift modifier checking.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
- 	(accel_attach): Remove.
- 	(setupAccelGroup): Remove calls to accel_attach.
- 
- 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkArg.java: Remove file.
- 	* gnu/java/awt/peer/gtk/GtkArgList.java: Remove file.
- 
- 	* Makefile.am (gtk_awt_peer_sources): Remove GtkArg.java and
- 	GtkArgList.java.
- 	(gtk_c_files): Use CAIRO_CFLAGS and PANGOFT2_CFLAGS, not _LIBS.
- 	* Makefile.in: Regenerate.
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
- 	(create(String)): New method.
- 	(create): Call new create method.
- 	(getArgs): Remove method.
- 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
- 	(nativeCreate): Rename to create.
- 	(gtkSetLabel): Rename to gtkButtonSetLabel.
- 	(gtkToggleButtonSetActive): New method.
- 	(create): Call gtkToggleButtonSetActive and gtkButtonSetLabel.
- 	(setState): Replace set call with gtkToggleButtonSetActive.
- 	(setLabel): Replace gtkSetLabel call with gtkButtonSetLabel.
- 	(getArgs): Remove method.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(gtkWidgetSetSensitive): New method.
- 	(gtkWidgetSetParent): Likewise.
- 	(GtkComponentPeer): Call setParent, setComponentBounds and
- 	setVisibleAndEnabled.
- 	(setParent): New method.
- 	(setComponentBounds): New method.
- 	(setVisibleAndEnabled): New method.
- 	(setEnabled): Call gtkWidgetSetSensitive.
- 	(getArgs): Remove method.
- 	Remove all set methods.
- 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (create): Call
- 	gtkWindowSetModal, setTitle and setResizable.
- 	(getArgs): Remove method.
- 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
- 	(setComponentBounds): New method.
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setResizable):
- 	Replace set call with gtkWindowSetResizable.
- 	(getArgs): Remove method.
- 	(create): Call setTitle and setResizable.
- 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(gtkWindowSetTitle): New method.
- 	(gtkWindowSetResizable): New method.
- 	(gtkWindowSetModal): New method.
- 	(setParent): New method.
- 	(setVisibleAndEnabled): New method.
- 	(getArgs): Remove method.
- 	(setTitle): Call gtkWindowSetTitle.
- 	(setResizable): Call gtkWindowSetResizable.
- 	* jni/gtk-peer/gtkpeer.h [DEBUG_LOCKING]: New define to turn on
- 	and off locking instrumentation.
- 
- 2004-08-31  Kim Ho  <kho@redhat.com>
- 
- 	* Makefile.am: Add new file.
- 	* Makefile.in: Regenerate.
- 	* gcj/Makefile.in: Regenerate
- 	* include/Makefile.in:
- 	* java/awt/Container.java:
- 	(acquireComponentForMouseEvent): Respect
- 	the event mask when looking for candidate.
- 	* javax/swing/JComponent.java:
- 	Remove toolTip field.
- 	(createToolTip): Create a tooltip on demand.
- 	(setToolTipText): Register with the ToolTipManager.
- 	(getToolTipText(MouseEvent)): Return getToolTipText().
- 	* javax/swing/JToolTip.java: Implement.
- 	* javax/swing/Timer.java: Jalopy.
- 	(restart): Call stop, then start.
- 	(stop): Interrupt the timer rather than wait for
- 	the timer to come to a stop naturally.
- 	* javax/swing/ToolTipManager.java: Implement.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Change ToolTip.background color.
- 	* javax/swing/plaf/basic/BasicToolTipUI.java:
- 	Implement.
- 	* testsuite/Makefile.in: Regenerate
- 
- 2004-08-31  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/DirectColorModel.java (DirectColorModel): Fix
- 	constructor param comments.
- 
- 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/Component.java: Document AWT 1.0 event handler
- 	methods.
- 
- 2004-08-31  Roman Kennke  <roman@ontographics.com>
- 
- 	* javax/swing/Box.java:
- 	(createGlue): Implemented
- 	(createHorizontalGlue): Implemented
- 	(createHorizontalStrut): Implemented
- 	(createVerticalGlue): Implemented
- 	(createVerticalStrut): Implemented
- 
- 2004-08-31  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java
- 	(GtkChoicePeer): Do not automatically select first item.
- 	(getHistory): Remove.
- 	(nativeGetSelected): New method.
- 	(nativeRemoveAll): New method.
- 	(add): Use nativeGetSelected() instead of getHistory().
- 	(remove): Likewise.
- 	(removeAll): Call nativeRemoveAll().
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
- 	(create): Migrate to GtkComboBox.
- 	(append): Likewise.
- 	(nativeAdd): Likewise.
- 	(nativeRemove): Likewise.
- 	(select): Likewise.
- 	(nativeRemoveAll): New method.
- 	(nativeGetSelected): New method.
- 	(selection_changed): New method.
- 	(getHistory): Remove.
- 	(item_activate): Remove.
- 	(item_removed): Remove.
- 	(connect_choice_item_selectable_hook): Remove.
- 
- 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (create): Use tf
- 	variable in setEditable call.
- 
- 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
- 	(gtkWidgetSetBackground): New method.
- 	(gtkWidgetSetForeground): Likewise.
- 	(create): Set peer's editable state based on awtComponent's.
- 
- 	* java/awt/Button.java (Button()): Use empty string rather than
- 	null in no-label constructor.
- 
- 2004-08-31  Roman Kennke  <roman@ontographics.com>
- 
- 	* javax/swing/BoxLayout.java: Reimplement.
- 
- 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
- 	gnu_java_awt_peer_gtk_GdkGraphics.c
- 	(initState(GtkComponentPeer)): Don't return array of colour
- 	values.
- 	(GdkGraphics(int,int)): Set default font to size 12.
- 	(GdkGraphics(GtkComponentPeer)): Set graphics colour to
- 	component's foreground colour.
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
- 	gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(initState(GtkComponentPeer)): Don't return array of colour
- 	values.
- 	(GdkGraphics2D(GtkComponentPeer)): Set foreground and background
- 	colours to component's colours.
- 	(current_colors_of_widget): Remove function.
- 	* gnu/java/awt/peer/gtk/GtkOffScreenImage.java (getGraphics):
- 	Return a new graphics object.
- 	* java/awt/Font.java (toString): Fix format.
- 	* java/awt/Graphics.java (toString): Likewise.
- 
- 2004-08-31  Craig Black  <craig.black@aonix.com>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
- 	(addTearOff): New function.
- 	* gnu/java/awt/peer/gtk/GtkMenuPeer.java (addTearOff):
- 	New native method.
- 	(init): Call addTearOff() when menu.isTearOff().
- 
- 2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gnu/java/awt/ClasspathToolkit.java (createImageProducer): New.
- 	Default implementation.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createImageProducer): New.
- 	Implement using GdkPixbufDecoder.
- 
- 2004-08-31  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(GtkComponentPeer): Use gtkWidgetGetPreferredDimensions() for
- 	setting the size of GtkFileDialogPeers.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(gtkWidgetGetPreferredDimensions): For widgets extending GtkWindow,
- 	use their default sizes rather than their natural requisitions.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JFormattedTextField.java
- 	(JFormattedTextField): Implemented.
- 	* javax/swing/text/DefaultEditorKit.java
- 	(BeepAction): New inner class.
- 	* javax/swing/text/Segment.java
- 	(partialReturn): New field.
- 	(setPartialReturn): New method.
- 	(isPartialReturn): Likewise.
- 	* javax/swing/text/View.java
- 	(createFragment): Fixed typo.
- 	(getStartOffset): New method.
- 	(getEndOffset): Likewise.
- 
- 2004-08-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/table/DefaultTableColumnModel.java
- 	(serialVersionUID): Made private.
- 	(listenerList): Initialize.
- 	(changeEvent): Initialize.
- 	* javax/swing/table/JTableHeader.java
- 	(JTableHeader): New constructors.
- 	(createDefaultColumnModel): New method.
- 	* javax/swing/table/TableColumn.java
- 	(setHeaderRenderer): Simplified code.
- 	(setCellRenderer): Likewise.
- 	(setWidth): Likewise.
- 
- 2004-08-31  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/text/AttributedString.java (AttributedString): Use
- 	ArrayList to build array of attribute ranges.  Don't use
- 	`attribs' before it is set.
- 
- 2004-08-30  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* HACKING: Remove reference to special automake. No longer needed.
- 
- 2004-08-30  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/java/security/util/Prime.java (generateRandomPrime): Use
- 	return result from `add'.
- 
- 2004-08-30  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/rmi/server/UID.java (UID): Read `nextCount', not count.
- 
- 2004-08-30  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* gnu/java/security/der/DEREncodingException.java: Remove whitespaces.
- 
- 2004-08-30  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/io/File.java File(String,String): Fixed handling of empty
- 	path.
- 
- 2004-08-30  Casey Marshall  <csm@gnu.org>
- 
- 	Author e-mail updated for all files.
- 	* gnu/java/security/OID.java (equals): Test if the aurgment is an
- 	instance of OID.
- 	(compareTo): Use `equals'.
- 	* gnu/java/security/der/BitString.java (equals): Test if the
- 	argument is an instance of BitString.
- 	* gnu/java/security/der/DERReader.java: Removed NIO imports.  Made
- 	class final. Made fields private.
- 	(<init>): New constructor.
- 	(skip): New method.
- 	(makeString): Made static; don't use NIO.
- 	(fromIso88591, fromUtf16Be, fromUtf8): New methods.
- 	* gnu/java/security/der/DERWriter.java: Fixed imports.
- 	(writeString): Don't use NIO.
- 	(toIso88591, toUtf16Be, toUtf8): New methods.
- 	* gnu/java/security/der/DERValue.java: Formatting changes only.
- 	* gnu/java/security/der/DER.java: Likewise.
- 
- 2004-08-30  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/nio/CharBuffer.java (put): Fix typo.
- 	* java/nio/DoubleBuffer.java (put): Fix typo.
- 	* java/nio/FloatBuffer.java (put): Fix typo.
- 	* java/nio/IntBuffer.java (put): Fix typo.
- 	* java/nio/LongBuffer.java (put): Fix typo.
- 	* java/nio/ShortBuffer.java (put): Fix typo.
- 
- 2004-08-30  Florian Weimer  <fw@deneb.enyo.de>
- 
- 	* java/nio/ByteBuffer.java (put): Fix typo.
- 
- 2004-08-30  Casey Marshall  <csm@gnu.org>
- 
- 	* java/security/DummyKeyPairGenerator.java (clone): Removed
- 	useless instanceof check.
- 	* java/security/DummyMessageDigest.java (clone): Likewise.
- 	* java/security/DummySignature.java (clone): Likewise.
- 	* java/security/MessageDigest.java (clone): Remove useless
- 	instanceof check.
- 	* java/security/MessageDigestSpi.java (clone): Likewise.
- 	* java/security/Signature.java (clone): Provide meaningful
- 	implementation.
- 	* java/security/SignatureSpi.java (clone): Likewise.
- 
- 2004-08-29  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/util/Arrays.java
- 	(sort(byte[], int, int)): Check fromIndex < 0.
- 	(sort(char[], int, int)): Likewise.
- 	(sort(short[], int, int)): Likewise.
- 	(sort(int[], int, int)): Likewise.
- 	(sort(long[], int, int)): Likewise.
- 	(sort(float[], int, int)): Likewise.
- 	(sort(double[], int, int)): Likewise.
- 	(sort(Object[], int, int, Comparator)): Likewise.
- 	(qsort(byte[], int, int)): Honor lower bound from in insertion sort.
- 	(qsort(char[], int, int)): Likewise.
- 	(qsort(short[], int, int)): Likewise.
- 	(qsort(int[], int, int)): Likewise.
- 	(qsort(long[], int, int)): Likewise.
- 	(qsort(float[], int, int)): Likewise.
- 	(qsort(double[], int, int)): Likewise.
- 
- 2004-08-29  Andrew John Hughes  <gnu_andrew@member.fsf.org>
- 
- 	* java/util/AbstractCollection.java, java/util/AbstractList.java,
- 	java/util/AbstractMap.java, java/util/AbstractSequentialList.java,
- 	java/util/ArrayList.java, java/util/Arrays.java,
- 	java/util/BitSet.java, java/util/Calendar.java,
- 	java/util/Collection.java, java/util/ListIterator.java,
- 	java/util/Map.java, java/util/SortedSet.java:
- 	Added additional exceptions to documentation, along
- 	with some additions and corrections.
- 
- 2004-08-27  Hans Boehm  <Hans.Boehm@hp.com>
- 
- 	* configure.ac: Handle --enable-gc-debug.
- 	* configure: Regenerate.
- 	* include/config.h.in (LIBGCJ_GC_DEBUG): Add.
- 	* boehm.cc: Include gc_mark.h, javaxfc.h, but no GC private files.
- 	Rearrange include file order.
- 	(GC_DEBUG): Set if LIBGCJ_GC_DEBUG is set.
- 	(GC_finalize_all, GC_debug_generic_malloc): Don't declare.
- 	(disable_gc_mutex): Delete along with all references.
- 	(_Jv_MarkObj, _Jv_MarkArray): Use public types,
- 	adjust for debug header size.
- 	(_Jv_AllocObj, _Jv_allocPtrFreeObj): Define out of line for
- 	debug case.
- 	(_Jv_AllocArray): Declare min_heap_addr only if needed.
- 	(gcj_describe_type_fn): New.
- 	(_Jv_InitGC): Use GC_new_free_list, GC_new_proc, and GC_new_kind.
- 	Register gcj_describe_type_fn.
- 	* include/boehm-gc.h:
- 	(_Jv_AllocObj, _Jv_allocPtrFreeObj):
- 	Don't define, but declare, for debug case.
- 	* java/lang/natObject.cc:
- 	(GC_DEBUG): Define if LIBGCJ_GC_DEBUG is set.
- 
- 2004-08-26  Mark Wielaard  <mark@klomp.org>
- 
- 	Fixes PR libgcj/17002:
- 	* java/util/TimeZone.java (defaultZone): Try a couple of ways to get
- 	a TimeZoneId string and then try to convert that to a TimeZone with
- 	getDefaultSystemTimeZone(String).
- 	(timezones0): Changed type from Hashtable to HashMap.
- 	(timezones): Create HashMap, not Hashtable.
- 	(getDefaultTimeZone): New method, rewritten from CNI version.
- 	(readTimeZoneFile): New method.
- 	(readtzFile): Likewise.
- 	(skipFully): Likewise.
- 	* java/util/natTimeZone.cc (getSystemTimeZone): Renamed to
- 	getDefaultTimeZoneId and rewritten.
- 	(getDefaultTimeZoneId): Rewritten in java.
- 
- 2004-08-25  David Daney  <daney@avtrex.com>
- 
- 	* Makefile.am (AM_GCJFLAGS):  Add LIBGCJ_JAVAFLAGS.
- 	* Makefile.in: Regenerated.
- 
- 2004-08-23  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* prims.cc (JVMPI_NOTIFY_ALLOC): New macro. Call jvmpi_notify_alloc
- 	only if jvmpi is enabled.
- 	(jvmpi_notify_alloc): Don't check if jvmpi is enabled here.
- 	(_Jv_AllocObjectNoFinalizer): Use JVMPI_NOTIFY_ALLOC.
- 	(_Jv_AllocString): Likewise.
- 	(_Jv_AllocPtrFreeObject): Likewise.
- 
- 2004-08-23  Hans Boehm  <Hans.Boehm@hp.com>
- 
- 	* defineclass.cc: Include <stdio.h>.
- 	* java/lang/natClassLoader.cc: Include <stdio.h>.
- 
- 2004-08-21  Andreas Tobler  <a.tobler@schweiz.ch>
- 	    Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am (lib_gnu_java_awt_peer_gtk_la_LINK): Added.
- 	* Makefile.in: Regenerated.
- 
- 2004-08-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* configure.ac: Replaced all AC_TRY_COMPILE macros with
- 	AC_COMPILE_IFELSE macros.
- 
- 2004-08-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* configure.in: Renamed to configure.ac.
- 	* configure.ac: New file.
- 	* configure, Makefile.in, gcj/Makefile.in, include/Makefile.in
- 	include/config.h.in, testsuite/Makefile.in: Regenerated.
- 
- 2004-08-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* configure.in: Rewrote some obsolete stuff for autoconf 2.59.
- 	* aclocal.m4, configure: Regenerated.
- 
- 2004-08-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 	    Michael Koch  <konqueror@gmx.de>
- 
- 	* configure.in,	Makefile.am: Ported to automake 1.9.
- 	* Makefile.in, aclocal.m4, configure, gcj/Makefile.in,
- 	include/Makefile.in, testsuite/Makefile.in, include/config.h.in:
- 	Regenerated.
- 
- 2004-08-19  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/net/DatagramSocket.java: Fixed typo.
- 
- 2004-08-18  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/17081
- 	* java/net/URI.java (string): New field. Make all other fields
- 	transient.
- 	(readObject): Implemented.
- 	(writeObject): Implemented.
- 	(URI): Set 'string'.
- 
- 2004-08-18  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/17079
- 	* java/util/logging/Handler.java (isLoggable): Accept record if its
- 	log level equals the threshold level. From Robin Green.
- 
- 2004-08-18  David Daney  <ddaney@avtrex.com>
- 
- 	* java/lang/natPosixProcess.cc (waitForSignal): Use sigsuspend
- 	instead of sigwait.
- 
- 2004-08-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am (AM_CXXFLAGS): Reformatted to make it more ease to read.
- 	* Makefile.in: Regenerated.
- 
- 2004-08-16  Tom Tromey  <tromey@redhat.com>
- 
- 	PR java/8473:
- 	* testsuite/libjava.jacks/jacks.xfail: Removed passing test.
- 
- 2004-08-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am
- 	(math_c_files): Renamed from c_files.
- 	(math_c_source_files): Renamed from c_source_files.
- 	* Makefile.in,
- 	gcj/Makefile.in,
- 	include/Makefile.in,
- 	testsuite/Makefile.in: Regenerated.
- 
- 2004-08-16  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* configure.in (AC_CONF_SUBDIRS): Use literal for ltdl directory
- 	to avoid autoconf warning.
- 	* configure: Rebuilt.
- 
- 2004-08-14  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* java/net/natInetAddressPosix.cc (lookup): Reflect rename of
- 	localhostAddress to loopbackAddress.
- 	* java/net/natInetAddressWin32.cc (lookup): Likewise.
- 
- 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* configure.in (GCINCS): Don't use "boehm-cflags". Instead, -I
- 	boehm-gc's include dirs.
- 	* configure: Rebuilt.
- 	* include/boehm-gc.h: Include gc_config.h.
- 
- 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/net/InetAddress.java (loopbackAddress): Renamed from
- 	localhostAddress.
- 	(getByName): Return loopback address for null hostname, without
- 	security check. Use lookup(), not getAllByName.
- 	(getAllByName): Return loopback address for null hostname, without
- 	security check.
- 	* java/net/natInetAddressPosix.cc (lookup): Don't perform security
- 	check here.
- 
- 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/17020
- 	Reported by Robin Green.
- 	* defineclass.cc (handleField): Don't throw exception on unrecognised
- 	modifier. Add FIXME comments for spec compliance.
- 	(handleMethod): Likewise.
- 
- 2004-08-10  Hans Boehm <Hans.Boehm@hp.com>
- 
- 	PR libgcj/16662
- 	* java/lang/natObject.cc (LOCK_LOG, LOG): Add debug tracing.
- 	(Almost everywhere): add LOG calls, fix, add comments.
- 	(_Jv_MonitorEnter): Replace masking of LOCKED bit with assertion.
- 	Add explicit check for LOCKED bit in slow case (PR 16662).
- 	(_Jv_MonitorExit): Add casts in debug-only code.
- 	Always release LOCKED bit before throwing exception.
- 	(_Jv_ObjectCheckMonitor): Lock may be held if lightweight lock
- 	isn't.  Handle easy cases without lock acquisition.
- 	(Object::wait): Use NotifyAll for lock inflation.
- 
- 2004-08-12  David Daney  <ddaney@avtrex.com>
- 
- 	* testsuite/libjava.lang/Process_1.java: New test.
- 	* testsuite/libjava.lang/Process_2.java: New test.
- 	* testsuite/libjava.lang/Process_3.java: New test.
- 	* testsuite/libjava.lang/Process_4.java: New test.
- 	* testsuite/libjava.lang/Process_5.java: New test.
- 	* testsuite/libjava.lang/Process_6.java: New test.
- 	* testsuite/libjava.lang/Process_1.out: Expected result.
- 	* testsuite/libjava.lang/Process_2.out: Expected result.
- 	* testsuite/libjava.lang/Process_3.out: Expected result.
- 	* testsuite/libjava.lang/Process_4.out: Expected result.
- 	* testsuite/libjava.lang/Process_5.out: Expected result.
- 	* testsuite/libjava.lang/Process_6.out: Expected result.
- 
- 2004-08-12  David Daney  <ddaney@avtrex.com>
- 
- 	PR libgcj/11801
- 	* java/lang/PosixProcess.java: Rewrote.
- 	* java/lang/natPosixProcess.cc: Rewrote.
- 	* java/lang/Runtime.java (execInternal): Declare throws IOException.
- 	* gcj/javaprims.h (ConcreteProcess$ProcessManager): Declare.
- 	* posix-threads.cc (block_sigchld) New function.
- 	(_Jv_ThreadRegister) Use it.
- 	(_Jv_ThreadStart) Use it.
- 	* configure.in (PLATFORM_INNER_NAT_HDRS): New AC_SUBST() used in...
- 	* Makefile.am: ... to specify extra native headers.
- 	* configure: Regenerated.
- 	* include/config.h: Regenerated.
- 	* Makefile.in: Regenerated.
- 	* gcj/Makefile.in: Regenerated.
- 	* include/Makefile.in: Regenerated.
- 	* testsuite/Makefile.in: Regenerated.
- 
- 2004-08-12  Diego Novillo  <dnovillo@redhat.com>
- 
- 	PR tree-optimization/16867
- 	* testsuite/libjava.lang/PR16867.java: New test.
- 
- 2004-08-09  Per Bothner  <per@bothner.com>
- 
- 	* gcj/javaprims.h (_Jv_Utf8Const): Change struct to a class,
- 	with private fields and access methods.
- 	(_Jv_NewStringUTF, _Jv_hashUtf8String): New function declarations.
- 	* gcj/cni.h (_Jv_NewStringUTF): Move to javaprims.h.
- 	* prims.cc (_Jv_Utf8COnst::init): New method implementation.
- 	( _Jv_makeUtf8Const): Rewrite using new constructors.
- 	(hashUtf8String): Rename to +_Jv_hashUtf8String and make non-static.
- 	* defineclass.cc: Use new _Utf8Const access/convenience methods.
- 	* jni.cc: Likewise.
- 	* resolve.cc: Likewise.
- 	* gcj/field.h: Likewise.
- 	* include/jvm.h: Likewise.
- 	* java/lang/Class.h: Likewise.
- 	* java/lang/natClass.cc: Likwise.
- 	* java/lang/natClassLoader.cc: Likewise
- 	* java/lang/reflect/natMethod.cc: Likewise
- 	* verify.cc: Likewise.
- 	(_Jv_BytecodeVerifier::make_utf8_const):  Optimize.
- 	(~_Jv_BytecodeVerifier):  Don't need second _Jv_Free call.
- 
- 2004-08-10  Andrew Haley  <aph@redhat.com>
- 
- 	* testsuite/libjava.lang/err14.java: New file.
- 	* testsuite/libjava.lang/err14.out: New file.
- 
- 2004-08-05  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* Makefile.am: Fix missing rename from x_nat_headers to
- 	xlib_nat_headers.
- 	* Makefile.in: Regenerated.
- 
- 2004-08-04  Andrew Haley  <aph@redhat.com>
- 
- 	* java/security/BasicPermission.java: Don't check wildcards.
- 
- 2004-08-04  Thomas Fitzsimmons <fitzsim@redhat.com>
- 	    Michael Koch  <konqueror@gmx.de>
- 
- 	* acinclude.m4: Correctly quote PKG_CHECK_MODULES.
- 	* configure.in: Replaced all usages of AC_LINK_FILES by
- 	AC_CONFIG_LINKS.
- 	* aclocal.m4,
- 	configure: Regenerated.
- 
- 2004-08-04  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 	    Michael Koch  <konqueror@gmx.de>
- 
- 	* acconfig.h: Removed.
- 	* Makefile.am: Rename variables for xlib peer to include xlib and
- 	gtk_c_headers to gtk_jni_headers.
- 	* Makefile.in: Regenerated.
- 
- 2004-08-04  Andrew Haley  <aph@redhat.com>
- 
- 	* testsuite/lib/libjava.exp (bytecompile_file): Byte compile with
- 	debugging.
- 
- 2004-08-03  Nathanael Nerode  <neroden@gcc.gnu.org>
- 
- 	* configure.in: Eliminate uses of changequote (mostly by quoting []).
- 	Replace most top level 'dnl' comments with '#' comments, conforming
- 	to new autoconf style.  Use AS_HELP_STRING throughout; improve a few
- 	help strings.
- 	* configure: Rebuilt.
- 
- 2004-07-17  Nathanael Nerode  <neroden@gcc.gnu.org>
- 
- 	* acinclude.m4: Include no-executables.m4.
- 	* aclocal.m4: Rebuild.
- 	* configure.in: Convert to the autoconf 2.59 version of
- 	of the no-executables hack, and also of the nonstandard CXX
- 	hack and the multilibbed CC and CXX hack.  Change prerequisite
- 	to autoconf 2.59.
- 	* configure: Rebuild with autoconf 2.59.  (Woo-hoo!)
- 	* Makefile.in, gcj/Makefile.in, include/Makefile.in,
- 	testsuite/Makefile.in: Regenerate.
- 
- 2004-08-03  Tom Tromey  <tromey@redhat.com>
- 
- 	* jni.cc: Reindented.
- 
- 2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/sql/Timestamp.java (valueOf): Synchronize access to dateFormat.
- 
- 2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* testsuite/libjava.compile/PR16701.java: New test.
- 
- 2004-08-01  Andrew John Hughes  <gnu_andrew@member.fsf.org>
- 
- 	* java/util/Collection.java, java/util/List.java,
- 	java/util/Map.java, java/util/Set.java,
- 	java/util/SortedMap.java, java/util/SortedSet.java:
- 	Added additional exceptions to documentation.
- 
- 2004-08-01  Danny Smith  <dannysmith@users.sourceforge.net>
- 
- 	PR libgcj/16814
- 	* configure.in [host *mingw*] (SYSTEMSPEC): Remove -lwsock32.
- 	* configure. Regenerate.
- 	* include/win32.h: Explicitly include winsock2.h
- 	* win32.cc (_Jv_platform_initialize): Require version 2.2 of
- 	Winsock api.
- 
- 2004-07-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/zip/GZIPInputStream.java
- 	(GZIPInputStream): Increase buffer size to 4k.
- 	* java/util/zip/GZIPOutputStream.java
- 	(GZIPOutputStream): Likewise.
- 	* java/util/zip/Inflater.java
- 	(setInput): Merged formating with GNU classpath.
- 	* java/util/zip/InflaterInputStream.java
- 	(InflaterInputStream): Increase buffer size to 4k.
- 	(fill): Throw exception if stream ends early.
- 	(read): Merged endless-loop with GNU classpath.
- 	(skip): Increase buffer size to 2k.
- 
- 2004-07-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/EmbeddedWindow.java
- 	(addNotify): Use AccessController to allow execution of privileged
- 	code.
- 
- 2004-07-29  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/lang/MainThread.java:
- 	Explicitely import used classes.
- 	(args): Make it type String[].
- 
- 2004-07-29 Dalibor Topic <robilad@kaffe.org>
- 
- 	* gnu/java/awt/ComponentDataBlitOp.java,
- 	gnu/java/beans/ExplicitBeanInfo.java,
- 	gnu/java/beans/IntrospectionIncubator.java,
- 	gnu/java/beans/editors/ColorEditor.java,
- 	gnu/java/beans/editors/FontEditor.java,
- 	gnu/java/beans/editors/NativeBooleanEditor.java,
- 	gnu/java/beans/editors/NativeByteEditor.java,
- 	gnu/java/beans/editors/NativeDoubleEditor.java,
- 	gnu/java/beans/editors/NativeFloatEditor.java,
- 	gnu/java/beans/editors/NativeIntEditor.java,
- 	gnu/java/beans/editors/NativeLongEditor.java,
- 	gnu/java/beans/editors/NativeShortEditor.java,
- 	gnu/java/beans/editors/StringEditor.java,
- 	gnu/java/io/ClassLoaderObjectInputStream.java,
- 	gnu/java/io/decode/Decoder.java,
- 	gnu/java/io/encode/Encoder.java,
- 	gnu/java/lang/ClassHelper.java,
- 	gnu/java/locale/Calendar.java,
- 	gnu/java/locale/Calendar_de.java,
- 	gnu/java/locale/Calendar_en.java,
- 	gnu/java/locale/Calendar_nl.java,
- 	gnu/java/locale/LocaleInformation_de.java,
- 	gnu/java/locale/LocaleInformation_en.java,
- 	gnu/java/locale/LocaleInformation_nl.java:
- 	Cleaned up imports.
- 
- 2004-07-28  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* README: Remove obsolete info. Update bug URL.
- 	* THANKS: Updated.
- 	* NEWS: Updated with news up to GCC 3.4 release.
- 
- 2004-07-28  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gnu/java/security/action/GetPropertyAction.java (setParameters):
- 	Renamed from 'setName'. New 2-argument form with default value.
- 	(run): Pass default 'value' parameter to System.getProperty().
- 	* gnu/java/security/action/SetAccessibleAction.java: Fix javadoc
- 	typos.
- 	* gnu/java/net/protocol/http/Connection.java: Use 'setParameters'
- 	not 'setName'.
- 
- 2004-07-28  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* configure.in: Check for minimum GTK version 2.4 requirement.
- 	* configure: Rebuilt.
- 
- 2004-07-27  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* testsuite/libjava.lang/TLtest.java: Reduce sleep time.
- 	* testsuite/libjava.lang/Thread_Alive.java: Remove old email address.
- 	Reduce sleep time.
- 	* testsuite/libjava.lang/Thread_HoldsLock.java: Modify to work around
- 	compiler bug.
- 	* testsuite/libjava.lang/Thread_Interrupt.java: Remove old email
- 	address. Reduce sleep times. Synchronize with target threads before
- 	attempting to interrupt them. Don't try to calibrate yeild count,
- 	instead, always loop for a fixed time.
- 	* testsuite/libjava.lang/Thread_Join.java: Remove old email address.
- 	* testsuite/libjava.lang/Thread_Monitor.java: Likewise.
- 	* testsuite/libjava.lang/Thread_Wait.java: Likewise.
- 	* testsuite/libjava.lang/Thread_Wait_2.java: Likewise.
- 	* testsuite/libjava.lang/Thread_Wait_Interrupt.java: Likewise.
- 	* testsuite/libjava.lang/pr179.java: Likewise.
- 	* testsuite/libjava.lang/Thread_Sleep.java: Likewise. Reduce sleep
- 	time. Remove upper bounds check on sleep time.
- 
- 2004-07-27  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* testsuite/libjava.lang/Thread_HoldsLock.java: New test case.
- 	* testsuite/libjava.lang/Thread_HoldsLock.out: New.
- 
- 2004-07-27  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/io/File.java (toURI): Throw RuntimeException, not
- 	InternalError.
- 	* java/lang/Runtime.java (exit): Qualify static sleep() call with
- 	class name, not instance.
- 
- 2004-07-24  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* Makefile.am: Add gnu/java/security/action/GetPropertyAction.java
- 	and gnu/java/security/action/SetAccessibleAction.java.
- 	* Makefile.in: Rebuilt.
- 
- 2004-07-23  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* prims.cc (_Jv_InitPrimClass): Don't create an array class.
- 	(_Jv_CreateJavaVM): Don't pass array vtable parameter to
- 	_Jv_InitPrimClass.
- 	(DECLARE_PRIM_TYPE): Don't declare array vtables.
- 	* include/jvm.h (struct _Jv_ArrayVTable): Removed.
- 	* java/lang/Class.h (_Jv_InitPrimClass): Update friend declaration.
- 
- 2004-07-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* Makefile.am: Replace jar, rmic and rmiregistry references with
- 	gjar, grmic and grmiregistry.
- 	* configure.in: Likewise.
- 	* Makefile.in: Regenerate.
- 	* configure: Likewise.
- 	* gcj/Makefile.in: Likewise.
- 	* include/Makefile.in: Likewise.
- 	* testsuite/Makefile.in: Likewise.
- 
- 2004-07-23  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gnu/java/net/protocol/http/Connection.java: Use GetPropertyAction
- 	for privileged getProperty calls.
- 	* java/io/ObjectOutputStream.java (getField): No longer static. Use
- 	SetAccessibleAction instead of anonymous class for doPrivileged call.
- 	(getMethod): Likewise.
- 	(setAccessible): New field. PrivilegedAction object to use when
- 	calling setAccessible.
- 	* java/io/ObjectStreamClass.java (calculateOffsets): Use
- 	SetAccessibleAction instead of anonymous class for diPrivileged call.
- 	(setFields): Likewise.
- 	(getClassUID): Likewise.
- 	(findMethod): Likewise.
- 	* gnu/java/security/action/GetPropertyAction.java: New class.
- 	* gnu/java/security/action/SetAccessibleAction.java: New class.
- 
- 2004-07-23  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/io/ObjectStreamField (ObjectStreamField): Don't unset 'toset'
- 	for final fields.
- 	* testsuite/libjava.lang/Serialization.java: New test.
- 	* testsuite/libjava.lang/Serialization.out: New.
- 
- 2004-07-23  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gnu/java/net/DefaultContentHandlerFactory.java: Check in real file
- 	missed in last commit.
- 
- 2004-07-23  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/lang/System.java (static): Set http.agent system property when
- 	not yet set.
- 	* gnu/java/net/protocol/http/Connection.java (static): Get httpAgent
- 	from system property inside AccessController.doPrivileged() call.
- 	(proxyPort): Made package private.
- 	(proxyInUse): Likewise.
- 	(proxyHost): Likewise.
- 	(userAgent): Likewise.
- 
- 2004-07-23  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/net/DefaultContentHandlerFactory.java: New dummy
- 	implementation.
- 
- 2004-07-22  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* Makefile.am (ordinary_java_source_files): Add
- 	DefaultContentHandlerFactory.java.
- 	* Makefile.in: Rebuilt.
- 	* java/net/URLConnection.java (defaultFactory): New field.
- 	(getContent):
- 	(getContentHandler): Renamed from 'setContentHandler'. Try
- 	defaultFactory after user-set factory, if any. Search for content
- 	handler implementations in gnu.java.net.content, not gnu.gcj.content.
- 	* gnu/java/net/protocol/file/Connection.java (getHeaderField):
- 	Implemented.
- 	(getLastModified): Implemented.
- 	(getPermission): Create file permission here, instead of in
- 	constructor.
- 	* gnu/java/net/protocol/gcjlib/Connection.java (getHeaderField):
- 	Implemented.
- 	* gnu/java/net/protocol/jar/Connection.java (getHeaderField):
- 	Implemented.
- 	(getLastModified): Implemented.
- 	* gnu/java/awt/ClasspathToolkit.java (createImageProducer): New.
- 	Default implementation.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createImageProducer): New.
- 	Implement using GdkPixbufDecoder.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTextArea.java
- 	(setLineWrap): Fire property change event after new value is set.
- 	(setTabSize): Likewise.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTable.java
- 	(autoCreateColumnsFromModel): New field.
- 	(autoResizeMode): Likewise.
- 	(cellEditor): Likewise.
- 	(cellSelectionEnabled): Likewise.
- 	(columnModel): Likewise.
- 	(dataModel): Likewise.
- 	(defaultEditorsByColumnClass): Likewise.
- 	(defaultRenderersByColumnClass): Likewise.
- 	(editingColumn): Likewise.
- 	(editingRow): Likewise.
- 	(gridColor): Likewise.
- 	(preferredViewportSize): Likewise.
- 	(rowHeight): Likewise.
- 	(rowMargin): Likewise.
- 	(rowSelectionAllowed): Likewise.
- 	(selectionBackground): Likewise.
- 	(selectionForeground): Likewise.
- 	(selectionModel): Likewise.
- 	(showHorizontalLines): Likewise.
- 	(showVerticalLines): Likewise.
- 	(tableHeader): Likewise.
- 	(JTable): Implemented.
- 	(getColumnModel): Likewise.
- 	(getSelectedRow): Likewise.
- 	(getSelectionModel): Likewise.
- 	(setModel): Likewise.
- 	(setSelectionModel): Likewise.
- 	(createScrollPaneForTable): New method.
- 	(createDefaultDataModel): Likewise.
- 	(createDefaultListSelectionModel): Likewise.
- 	(getModel): Likewise.
- 	(getTableHeader): Likewise.
- 	(setTableHeader): Likewise.
- 	(getColumnSelectionAllowed): Likewise.
- 	(setColumnSelectionAllowed): Likewise.
- 	(getRowSelectionAllowed): Likewise.
- 	(setRowSelectionAllowed): Likewise.
- 	(getAutoResizeMode): Likewise.
- 	(setAutoResizeMode): Likewise.
- 	(getColumnCount): Likewise.
- 	(getRowCount): Likewise.
- 	(getCellRenderer): Likewise.
- 	* javax/swing/JTree.java
- 	(cellRenderer): New field.
- 	(editable): Likewise.
- 	(rootVisible): Likewise.
- 	(showsRootHandles): Likewise.
- 	(getModel): New method.
- 	(setModel): Likewise.
- 	(isEditable): Likewise.
- 	(setEditable): Likewise.
- 	(isRootVisbile): Likewise.
- 	(setRootVisible): Likewise.
- 	(getShowsRootHandles): Likewise.
- 	(setShowRootHandles): Likewise.
- 	(getCellRenderer): Likewise.
- 	(setCellRenderer): Likewise.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JFormattedTextField.java
- 	(setDocument): Implemented.
- 	* javax/swing/JRootPane.java:
- 	Fixed javadocs.
- 	* javax/swing/JTable.java
- 	(getDefaultRenderer): New method.
- 	* javax/swing/JTextField.java
- 	(setFont): Likewise.
- 	(getPreferredSize): Likewise.
- 	* javax/swing/JToggleButton.java
- 	(getAccessibleContext): Fix javadoc.
- 	* javax/swing/JTree.java:
- 	Add some javadocs.
- 	* javax/swing/JViewport.java:
- 	Likewise.
- 
- 2004-07-21  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java:
- 	Collect all native method declaration at the top.
- 	(create): Set the filename filter if necessary.
- 	(setDirectory): Call nativeSetDirectory().
- 	(setFilenameFilter): Implement.
- 	(filenameFilterCallback): New method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(create): Configure dialog to show hidden files.
- 	(filenameFilterCallback): New function.
- 	(nativeSetFilenameFilter): New function.
- 	(nativeSetDirectory): New function.
- 
- 2004-07-21  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicSliderUI.java:
- 	Ran Jalopy.
- 	(paintTrack): Fill the track before painting
- 	the borders.
- 
- 2004-07-21  Graydon Hoare  <graydon@redhat.com>
- 
- 	patch from Roman Kennke <roman@ontographics.com>
- 	* javax/swing/Spring.java: New file.
- 	* javax/swing/SpringLayout.java: New file.
- 	* Makefile.am: Add new files.
- 	* Makefile.in: Regenerate.
- 
- 2004-07-21  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicSplitPaneUI.java: Minor layout fixes.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Likewise.
- 	* javax/swing/ScrollPaneLayout.java: Likewise.
- 
- 2004-07-21  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/DefaultDesktopManager.java:
- 	(findMinimum): Removed.
- 	(resizeFrame): Trust the UI to pass valid
- 	bounds.
- 	* javax/swing/JOptionPane.java:
- 	Implemented showInternalXXXDialog methods.
- 	(startModal): New method.
- 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
- 	(BorderListener::mouseDragged): Verify that the new
- 	bounds are valid before passing them to the DesktopManager.
- 	(preferredLayoutSize): Delegate
- 	to getSize.
- 	(minimumLayoutSize): Ditto.
- 	(getSize): New method.
- 	(GlassPaneDispatcher): Reimplemented by copying
- 	a stripped down LightweightDispatcher from Container.
- 	(getMinimumSize): Call minimumLayoutSize.
- 	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
- 	Ran Jalopy.
- 	(mousePressed): Add ability to properly close
- 	JInternalFrames.
- 	* javax/swing/plaf/basic/BasicToolBarUI.java:
- 	(DragWindow): Set owner for DragWindow.
- 
- 2004-07-21  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/ShortLookupTable.java: New file.
- 	* java/awt/image/ByteLookupTable.java: New file.
- 	* Makefile.am: Added new files.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-21  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
- 	(create(GtkContainerPeer)): New native method.
- 	(create()): Call native create(), passing in the parent frame
- 	as the paramter. Natively set the current file and directory.
- 	(setFile): Construct an absolute filename before passing it to
- 	the native peer.
- 	(nativeGetDirectory): New method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(window_closed): Removed.
- 	(ok_clicked): Likewise.
- 	(cancel_clicked): Likewise.
- 	(handle_response): New method.
- 	(create): Use GtkFileChooserDialog.
- 	(connectSignals): Connect to handle_response.
- 	(nativeGetDirectory): New method.
- 	(nativeSetFile): Use GtkFileChooserDialog.
- 
- 2004-07-21  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/LookupTable.java: New file.
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-21  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/image/Kernel.java: New file.
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JCheckBoxMenuItem.java: Fixed Javadocs.
- 	* javax/swing/JMenu.java: Likewise.
- 	* javax/swing/JMenuBar.java: Likewise.
- 	(MARGIN_CHANGED_PROPERTY): New property.
- 	(setMargin): Implemented.
- 	* javax/swing/JMenuItem.java: Fixed javadocs.
- 	* javax/swing/JPopupMenuUI.java: Fixed javadocs.
- 	(LABEL_CHANGED_PROPERTY): New property.
- 	(add): changed to use createActionComponent.
- 	(createActionComponent): Implemented.
- 	(setLabel): Fire PropertyChangeEvent if label property
- 	changes.
- 	* javax/swing/JRadioButtonMenuItem.java: Fixed javadocs.
- 	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
- 	(ContainerHandler): Repaint if margin property has changed.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	(installUI): Call installComponents().
- 	(uninstallUI): Call uinstallComponents().
- 	* javax/swing/plaf/basic/BasicMenuUI.java:
- 	Fixed javadocs.
- 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
- 	Likewise.
- 
- 2004-07-21  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicToolBarUI.java:
- 	(DragWindow): Use the right constructor.
- 
- 2004-07-21  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/JToolBar.java:
- 	(layoutContainer): Use getComponents.
- 	* javax/swing/plaf/basic/BasicToolBarUI.java:
- 	(DragWindow): Don't use SwingUtilities'
- 	getOwnerFrame
- 	(ToolBarDialog): ditto.
- 
- 2004-07-21  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/JRootPane.java:
- 	Ran jalopy.
- 	(layoutContainer): Set the glasspane's size to
- 	be the same as the content pane.
- 	(createGlassPane): Set opaque property to false.
- 
- 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/Component.java (requestFocus()): Don't handle Panels
- 	specially.
- 	(requestFocus(boolean)): Likewise.
- 	(requestFocusInWindow(boolean)): Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
- 	Set GTK_CAN_FOCUS flag.
- 
- 2004-07-21  Kim Ho  <kho@redhat.com>
- 
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Regenerated.
- 	* gcj/Makefile.in: Regenerated.
- 	* include/Makefile.in: Regenerated.
- 	* javax/swing/AbstractButton.java:
- 	Add rollOverEnabled property.
- 	(setRolloverEnabled): Use new property.
- 	(isRolloverEnabled): Use new property.
- 	* javax/swing/JTabbedPane.java:
- 	(setComponent): Remove useless JTabbedPane.this.
- 	* javax/swing/JToolBar.java: Finish implementation.
- 	* javax/swing/plaf/basic/BasicArrowButton.java:
- 	(paint): Moved border painting to a border.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Change JToolBar look and feel defaults.
- 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
- 	(actionPerformed): Return Integer index instead of name.
- 	(addButtonComponents): Check to see if component is
- 	JButton last.
- 	(createMessageArea): Don't use components that are not
- 	completed yet.
- 	(getIconForType): Use temporary icons.
- 	* javax/swing/plaf/basic/BasicSliderUI.java:
- 	(mousePressed): Do not return if it's on thumb.
- 	(paintMinorTickForHorizSlider): Use BLACK to paint ticks.
- 	(paintMinorTickForVertSlider): ditto.
- 	(paintMajorTickForHorizSlider): ditto.
- 	(paintMajorTickForVertSlider): ditto.
- 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
- 	Add a border around the SplitPaneDivider.
- 	* javax/swing/plaf/basic/BasicSplitPaneUI.java:
- 	Remove comments.
- 	* javax/swing/plaf/basic/BasicToolBarSeparatorUI.java:
- 	New file. Implemented.
- 	* javax/swing/plaf/basic/BasicToolBarUI.java:
- 	Implemented.
- 	* testsuite/Makefile.in: Regenerated.
- 
- 2004-07-21  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/Timer.java (run): Queue events each time cycle.
- 
- 2004-07-21  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
- 	(imageComplete): Call image.imageComplete().
- 	* java/awt/image/MemoryImageSource.java:
- 	Reimplement consumers as a Vector instead of a Hashtable.  This is
- 	because enumeration on a Hashtable is not thread-safe.
- 	(addConsumer): Adapt to Vector consumers.
- 	(isConsumer): Adapt to Vector consumers.
- 	(removeConsumer): Adapt to Vector consumers.
- 	(startProduction): Adapt to Vector consumers. Call imageComplete()
- 	with STATICIMAGEDONE flag instead of SINGLEFRAME flag.
- 	(newPixels): Adapt to Vector consumers.
- 	(sendPicture): Set the color model of the image consumer.
- 	(newPixels(IIII)): Adapt to Vector consumers.
- 	(newPixels(IIIIB)): Adapt to Vector consumers.
- 
- 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/Component.java (deliverEvent): Implement.
- 	(postEvent): Implement.
- 	(handleEvent): Implement.
- 	(translateEvent): New method.
- 	(dispatchEventImpl): Document.  Add AWT 1.0 event handling.
- 	* java/awt/Container.java (deliverEvent): Implement.
- 	* java/awt/Event.java (paramString): Fix formatting.
- 	* java/awt/Font.java (toString): Likewise.
- 	* java/awt/Window.java (postEvent): Implement.
- 
- 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
- 	Set window's focus owner upon receiving a FOCUS_LOST event.
- 	* java/awt/Window.java (Window()): Refocus the previously
- 	focused component within the window when the window regains the
- 	top-level focus.
- 	(setFocusOwner): New method.
- 	* java/awt/Component.java (requestFocus): Add FIXME.
- 
- 	* libgcj.pc.in: Remove library flags.
- 
- 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java (handleEvent): Handle
- 	MOUSE_PRESSED event.
- 	* java/awt/Component.java (requestFocus()): Handle Panel
- 	specially.  Post FOCUS_LOST event on opposite component.
- 	(requestFocus(boolean)): Likewise.
- 	(requestFocusInWindow(boolean)): Likewise.
- 	(paramString): Reorder dimension fields.
- 	* java/awt/Container.java (paramString): Fix string format.
- 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
- 	Handle FOCUS_LOST events.  Don't handle Windows specially.  Only
- 	process key events if the focus owner is non-null.
- 	(dispatchKeyEvent): Likewise.
- 	* java/awt/Frame.java (paramString): Fix formatting.
- 	(generateName): New method.
- 	(getUniqueLong): Likewise.
- 	* java/awt/KeyboardFocusManager.java (getFocusOwner): Check if
- 	the temporary focus owner is null.  If so, return the permanent
- 	focus owner.
- 	* java/awt/Panel.java (generateName): New method.
- 	(getUniqueLong): Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Rework
- 	signal handling to make callbacks more specific.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/Position.java
- 	(Bias): Implemented.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/LookAndFeel.java
- 	(provideErrorFeedback): New method.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTextArea.java
- 	(tabSize): New field.
- 	(getTabSize): New method.
- 	(setTabSize): Likewise.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/ActionMap.java:
- 	Fixed javadocs all over.
- 	(serialVersionUID): Made private.
- 	(parent): Don't explicitely initialize with default value.
- 	(get): SImplified.
- 	(keys): Reimplemented.
- 	(allKeys): Likewise.
- 	(convertSet): Removed.
- 	* javax/swing/ComponentInputMap.java:
- 	Fixed javadocs all over.
- 	(ComponentInputMap): Implemented.
- 	(put): Likewise.
- 	(clear): Likewise.
- 	(remove): Likewise.
- 	(SetParent): Likewise.
- 	(getComponent): Likewise.
- 	* javax/swing/InputMap.java:
- 	Fixed javadocs all over.
- 	(serialVersionUID): Made private.
- 	(parent): Don't explicitely initialize with default value.
- 	(get): SImplified.
- 	(keys): Reimplemented.
- 	(allKeys): Likewise.
- 	(convertSet): Removed.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/ActionMap.java,
- 	javax/swing/ComponentInputMap.java,
- 	javax/swing/InputMap.java,
- 	javax/swing/table/DefaultTableColumnModel.java,
- 	javax/swing/table/TableColumn.java,
- 	javax/swing/table/TableColumnModel.java,
- 	javax/swing/table/TableModel.java,
- 	javax/swing/text/AbstractDocument.java,
- 	javax/swing/text/TextAction.java:
- 	Reformated.
- 
- 2004-07-21  Graydon Hoare  <graydon@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java (bufferedImageOrError):
- 	Make method non-static.
- 	* javax/swing/AbstractButton.java:
- 	Rename fields to match property names where possible.
- 	(iconTextGap): New property.
- 	* javax/swing/JCheckBox.java: Match AbstractButton changes.
- 	(init) New method, call from after various constructors.
- 	* javax/swing/JComponent.java (revalidate):
- 	Invalidate before queueing repair.
- 	* javax/swing/JList.java (getPreferredScrollableViewportSize):
- 	Reimplement in terms of visibleRowCount property.
- 	* javax/swing/JMenuButton.java: Match AbstractButton changes.
- 	* javax/swing/JScrollPane.java (createScrollListener):
- 	Remove tracing chatter.
- 	* javax/swing/JToggleButton.java: Match AbstractButton changes.
- 	* javax/swing/RepaintManager.java (addInvalidComponent):
- 	Don't invalidate.
- 	* javax/swing/ScrollPaneLayout.java: Various corrections to layout
- 	calculations.
- 	* javax/swing/SwingUtilities.java (layoutCompoundLabel):
- 	Mimic sun behavior on top left/right positioning.
- 	* javax/swing/ViewportLayout.java (preferredLayoutSize):
- 	Remove mistaken use of preferredScrollableViewportSize here.
- 	(layoutContainer): Use view's preferred size as basis.
- 	* javax/swing/plaf/basic/BasicButtonUI.java:
- 	Set, get, and use textIconGap property.
- 	(paint) Paint text returned from layout (with ellipsis).
- 	* javax/swing/plaf/basic/BasicListUI.java:
- 	Remove tracing chatter, correct various minor calculations.
- 	(getCellBounds): Update layout state before calculating.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java (Button.Margin):
- 	Use margin default similar to sun's.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java (ArrowIcon):
- 	(createIncreaseIcon): Center icon, minimize margins.
- 	(createDecreaseIcon): Likewise.
- 	* javax/swing/plaf/basic/BasicScrollPaneUI.java (installDefaults):
- 	Implement.
- 	(installUI): Call it.
- 	(uninstallDefaults): Implement.
- 	(uninstallUI): Call it.
- 	* javax/swing/plaf/basic/BasicToolBarUI.java (DragWindow):
- 	Call existing Window constructor.
- 	* javax/swing/plaf/basic/BasicViewportUI.java (paint):
- 	Set clip before painting.
- 
- 2004-07-21  Olga Rodimina <rodimina@redhat.com>
- 
- 	* javax/swing/JMenuItem.java:
- 	(processMouseEvent): Reimplemented to deal with
- 	mouse drag events.
- 	(createMenuDragMouseEvent): New private helper method.
- 	Creates MenuDragMouseEvent.
- 	* javax/swing/MenuSelectionManager.java
- 	(componentForPoint): Implemented.
- 	(isComponentPartOfCurrentMenu): Made public.
- 	(processMouseEvent): Reimplemented to deal with
- 	mouse drag events.
- 	(setSelectedPath): Corrected small mistake that caused
- 	path to be set incorrectly.
- 	(getPath): If given component is JMenu then also add this
- 	menu's popup menu to the selected path.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	(getPath): Ditto.
- 	(getPreferredSize): Call getPreferredMenuItemSize().
- 	(getPreferredItemSize): Moved code from getPreferredSize to here.
- 	(installListeners): Install MouseMotionListeners.
- 	(MouseInputHandler): Pass mouse release event to MenuSelectionManager
- 	if mouse wasn't released in the bounds of this menu item.
- 	(MenuDragMouseHandler): Implemented.
- 	* javax/swing/plaf/basic/BasicMenuUI.java:
- 	(installListeners): Install MouseMotionListener and
- 	MenuDrageMouseListener.
- 	(MenuDragMouseHandler): Implemented.
- 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
- 	(uninstallListeners): Implemented.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JCheckBox.java: Reformated.
-         (JCheckBox): Fixed all constructors.
-         (isBorderPaintedFlat): New method.
-         (setBorderPaintedFlat): New method.
- 	* javax/swing/JEditorPane.java
-         (createEditorKitForContentType): Made public.
-         (scrollToReference): Likewise.
- 	* javax/swing/JTextArea.java
-         (setLineWrap): Fire property change.
- 	* javax/swing/JToggleButton.java
-         (JToggleButton): New constructor.
-         (JToggleButton): Simplified.
- 	* javax/swing/text/AttributeSet.java
-         (FontAttribute): Renamed from FontCharacterAttribute.
- 	* javax/swing/text/JTextComponent.java
-         (KeyBinBinding): Added javadoc.
-         (JTextComponent): Likewise.
-         (getAccessibleContext): Fixed javadoc.
- 	* javax/swing/text/View.java
-         (View): Added javadoc.
- 	* javax/swing/text/TabableView.java: New file.
- 	* Makefile.am: Added javax/swing/text/TabableView.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-21  Graydon Hoare  <graydon@redhat.com>
- 
- 	* java/awt/image/BufferedImage.java (getSource): Remove tracing chatter.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java
- 	(GtkErrorImage): New helper class.
- 	(bufferedImageOrError): New helper method.
- 	(createImage): Use it.
- 
- 2004-07-21  David Jee  <djee@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
- 	(setCaretPosition): Scroll the text view so the new caret position
- 	is visible on screen.
- 
- 2004-07-21  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
- 	(setBounds): Do not validate awtComponent here.
- 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
- 	(getPreferredSize): New method.
- 	* java/awt/ScrollPane.java
- 	(ScrollPane): Set default size to 100x100.
- 	(addNotify): If child is not a Panel, wrap it with a new Panel.
- 	(paramString): Implement.
- 
- 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JMenu.java:
- 	(setSelected): Display popup menu only if this menu
- 	is showing on the screen.
- 	* javax/swing/JPopupMenu.java:
- 	(processMouseEvent): Added comment.
- 	(processKeyEvent): Likewise.
- 	* javax/swing/MenuSelectionManager.java:
- 	(clearSelectedPath): Only fireStateChanged() after
- 	selected path was changed, not before.
- 	(setSelectedPath): Likewise.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	(paintMenuItem): Corrected position of menu item's
- 	icon.
- 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
- 	(installUI): Correct setDefaultLightWeightPopupEnabled call.
- 	(popupMenuCanceled): Reimplemented.
- 	(popupMenuWillBecomeVisible): Select first menu item by default
- 	when displaying free floating popup menus.
- 	(TopWindowListener): Reimplemented.
- 
- 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/Panel.java (dispatchEventImpl): Override to prevent
- 	Panel from being painted twice when it is first shown.
- 
- 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* java/awt/Window.java: Reverted changes from my
- 	previous patch for creating window without an owner.
- 	* javax/swing/SwingUtilities.java:
- 	(SwingUtilities.OwnerFrame): made static.
- 	(OwnerFrame.setVisible): New method. Overridden with
- 	empty implementation.
- 	(OwnerFrame.isShowing): New method. Ovverridden
- 	to return always true.
- 
- 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(GtkComponentPeer): Remove temporary try/catch block.
- 	(setVisible): Call show and hide.
- 	(show): Make native.
- 	(hide): Likewise.
- 	(getArgs): Don't add "visible" argument.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(property_notify_predicate): Return Bool instead of int.
- 	(find_layout): New function.
- 	(connectJObject): Call find_layout.
- 	(connectSignals): Likewise.
- 	(moveLayout): Likewise.
- 	(gtkLayoutSetVisible): Likewise.
- 
- 2004-07-21  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/awt/event/InvocationEvent.java (dispatch): Synchronize
- 	on notifier object before calling notifyAll().
- 
- 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* java/awt/Window.java: Changed constructors to use new
- 	method that is described below. Constructors call this
- 	methods only if newly created window should have an owner.
- 	(setWindowOwner): New method. Implementation for
- 	this method is moved from this(owner,configuration).
- 	* javax/swing/JWindow.java:
- 	(JWindow): Reimplement to use SwingUtilities.ownerFrame
- 	instead of owner.
- 	* javax/swing/SwingUtilities.java:
- 	(ownerFrame): Change type of this field to OwnerFrame.
- 	(getOwnerFrame): Changed to return object of type OwnerFrame.
- 	(SwingUtilities.OwnerFrame): New class. Represents owner
- 	of a Window that is not provided with one.
- 
- 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	*  javax/swing/AbstractButton.java:
- 	(configurePropertiesFromAction): Set action command
- 	to button's text by default if action command is not
- 	explicitely specified.
- 	* javax/swing/JMenu.java: Remove unnecessary listener
- 	and methods relevant to it.
- 	(setSelected): Reimplemented.
- 	(menuSelectionChanged): Moved most part of implementation to
- 	setSelected() and call it instead.
- 	* javax/swing/JMenuItem.java:
- 	(init): Comment out statement that sets paint_border to false.
- 	(configurePropertiesFromAction): Do not set accelerator
- 	for JMenu.
- 	(menuSelectionChanged): Change selected index in the selection
- 	model of menu item's parent.
- 	* javax/swing/JPopupMenu.java:
- 	(remove): Set constraints.fill field to GridBagConstraints.BOTH
- 	instead of GridBagConstraints.HORIZONTAL.
- 	(insert): Likewise.
- 	(createActionChangeListener): Implemented.
- 	(setVisible): Correct location of HeavyWeightMenu and
- 	don't firePopupMenuCanceled().
- 	(menuSelectionChanged): Implemented.
- 	(ActionChangeListener): New Listener. Implemented.
- 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
- 	(BasicMenuBarUI.ContainerHandler): Implemented.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	(paintMenuItem): Uncommented out code that paints
- 	icon, now that icons are working properly.
- 	(PropertyChangeListener): Implemented.
- 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
- 	Added javadocs.
- 	(topWindowListener): New field.
- 	(Constructor): initialize topWindowListener.
- 	(BasicPopupMenuUI.TopWindowListener): Implemented.
- 	(BasicPopupMenuUI.PopupMenuHandler): Implemented.
- 	(BasicPopupMenuUI.TopWindowListener): New ComponentListener.
- 	Implemented.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicButtonUI.java
- 	(paintFocus): Fixed method signature.
- 	(paintButtonPressed): Likewise.
- 	(paintButtonNormal): Likewise.
- 	(paintText): New method.
- 	* javax/swing/plaf/basic/BasicLabelUI.java
- 	(paint): Re-indented.
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(installUI): Set parent textComponent to opaque.
- 	* javax/swing/text/DefaultHighlighter.java
- 	(checkPositions): New helper method.
- 	(addHighlight): Throws BadLocationException, check positions.
- 	(changeHighlight): Likewise.
- 	* javax/swing/text/EditorKit.java
- 	(EditorKit): Implements Serializable.
- 	* javax/swing/text/JTextComponent.java
- 	(getUI): Added javadoc.
- 	(setUI): Likewise.
- 	(upadteUI): Added javadoc, don't revalidate and repaint.
- 
- 2004-07-21  David Jee  <djee@redhat.com>
- 
- 	* java/awt/GridBagLayout.java
- 	(ArrangeGrid): Use PREFERREDSIZE instead of MINSIZE.
- 	* javax/swing/AbstractButton.java
- 	(setText): Reindent.
- 	* javax/swing/RepaintManager.java
- 	(addInvalidComponent): Find the first ancestor that isValidateRoot().
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JFormattedTextField.java
- 	(value): New field.
- 	(JFormattedTextField): Implemented.
- 	(getValue): Likewise.
- 	(setValue): Likewise.
- 	* javax/swing/LookAndFeel.java
- 	(getSupportsWindowDecorations): New method.
- 	* javax/swing/UIDefaults.java:
- 	Use java.beans.PropertyChangeSupport instead of doing all ourself.
- 	(addPropertyChangeListener): Made public.
- 	(addResourceBundle): Likewise.
- 	(removeResourceBundle): Likewise.
- 	(setDefaultLocale): Likewise.
- 	* javax/swing/plaf/basic/BasicRootPaneUI.java
- 	(BasicRootPaneUI): Implements PropertyChangeListener.
- 	(propertyChange): New method.
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(BasicHighlighter): New inner class.
- 	(createHighlighter): New method.
- 	* javax/swing/plaf/basic/BasicToolBarUI.java
- 	(DragWindow): Extends java.awt.Window.
- 	* javax/swing/text/JTextComponent.java
- 	(getDocument): Removed debug output.
- 	* javax/swing/plaf/basic/BasicTextFieldUI.java,
- 	javax/swing/text/DefaultHighlighter.java,
- 	javax/swing/text/FieldView.java,
- 	javax/swing/text/PlainView.java: New files.
- 	* Makefile.am: Added new files.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JEditorPane.java
- 	(createDefaultEditorKit): Use javax.swing.text.DefaultEditorKit.
- 	(createEditorKitForContentType): Likewise.
- 	* javax/swing/text/DefaultEditorKit.java
- 	(serialVersionUID): Added constant field.
- 	(EndOfLineStringPropery): Fixed typo.
- 	(DefaultEditorKit): New constructor.
- 	* javax/swing/text/Segment.java:
- 	Import java.text.CharacterIterator.
- 	* javax/swing/text/CharacterIterator.java,
- 	javax/swing/text/PlainEditorKit.java: Removed.
- 	* Makefile.am: Removed javax/swing/text/CharacterIterator.java and
- 	javax/swing/text/PlainEditorKit.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JButton.java,
- 	javax/swing/text/DefaultEditorKit.java,
- 	javax/swing/text/EditorKit.java,
- 	javax/swing/text/Segment.java,
- 	javax/swing/text/StyledEditorKit.java:
- 	Reformatted.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/ImageIcon.java
- 	(file): Removed.
- 	(description): Renamed from descr.
- 	(ImageIcon): Added missing constructors.
- 	(setParent): Removed.
- 	(setImageObserver): New method.
- 	(getImageObserver): New method.
- 	(paintIcon): Handle observer = null.
- 	* javax/swing/JButton.java
- 	(removeNotify): Fixed javadoc.
- 	(updateUI): Simplified.
- 	* javax/swing/JRootPane.java
- 	(serialVersionUID): New constant field.
- 	* javax/swing/UIManager.java:
- 	Fixed javadocs all over.
- 	(setLookAndFeel): Throws UnsupportedLookAndFeelException.
- 	* javax/swing/text/AbstractDocument.java
- 	(createPosition): Throws BadLocationException.
- 	(getText): Likewise.
- 	(remove): Likewise.
- 	* javax/swing/text/ComponentView.java
- 	(modelToView): Likewise.
- 	* javax/swing/text/DefaultEditorKit.java:
- 	Made all public methods public.
- 	(read): Throws BadLocationException and IOException.
- 	(write): Likewise.
- 	* javax/swing/text/EditorKit.java:
- 	Made all public methods public.
- 	(serialVersionUID): New constant field.
- 	(clone): New method.
- 	(read): Throws BadLocationException and IOException.
- 	(write): Likewise.
- 	* javax/swing/text/Segment.java
- 	(array): Made public.
- 	(count): Likewise.
- 	(offset): Likewise.
- 	(Segment): New constructors.
- 	(clone): Reimplemented.
- 	* javax/swing/text/StyledEditorKit.java
- 	(serialVersionUID): New constant field.
- 
- 2004-07-21  Graydon Hoare  <graydon@redhat.com>
- 
- 	* java/awt/image/BufferedImage.java
- 	(getSource): Implement.
- 	* javax/swing/ImageIcon.java
- 	(ImageIcon): Implement ctor.
- 	* javax/swing/ScrollPaneLayout.java
- 	(preferredLayoutSize): Be more careful about nulls.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AttributeSet.java
- 	(CharacterAttribute): New interface
- 	(ColorAttribute): Likewise.
- 	(FontCharacterAttribute): Likewise.
- 	(ParagraphAttribute): Likewise.
- 	* javax/swing/text/DefaultCaret.java
- 	(moveCaret): New method.
- 	(positionCaret): Likewise.
- 	(repaint): Made protected.
- 	* javax/swing/text/JTextComponent.java
- 	(KeyBinding): Made it static.
- 	* javax/swing/text/View.java
- 	(getContainer): Honor parent == null.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AbstractDocument.java:
- 	Reformatted.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicRootPaneUI.java:
- 	Import javax.swing.UIManager explicitely.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
- 	(ScrollingButton): Made it static.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/UIDefaults.java
- 	(ActiveValue): Made public.
- 	(LazyValue): Likewise.
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(RootView): Reintroduced.
- 	(view): Removed.
- 	(rootView): New field.
- 	(installUI): Create document if needed, initialize rootView.
- 	(uninstallUI): Hanle rootView.
- 	(paint): Likewise.
- 	(getRootView): Likewise.
- 	(setView): Likewise.
- 	* javax/swing/text/DefaultCaret.java:
- 	Renamed all "evt" variables to "event".
- 
- 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* libgcj.spec.in: Add -l-java-util-logging.
- 
- 2004-07-21  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(init_dpi_conversion_factor): Check for int_dpi < 0 in case
- 	gtk-xft-dpi can no calculate the right value.
- 	(dpi_changed_cb): Mark *pspec as unsused.
- 
- 2004-07-21  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Component.java
- 	(move): Delegate to setBounds().
- 	(resize): Likewise.
- 	(reshape): Fix so it repaints parent and self only when necessary.
- 
- 2004-07-21  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(GtkComponentPeer): Revert previous patch from 2004-06-22.
- 	(setVisible): Likewise.
- 	(show): Likewise.
- 	(hide): Likewise.
- 	(getArgs): Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(property_notify_predicate): Likewise.
- 	(find_layout): Likewise.
- 	(connectJObject): Likewise.
- 	(connectSignals): Likewise.
- 	(moveLayout): Likewise.
- 	(gtkLayoutSetVisible): Likewise.
- 
- 2004-07-21  Graydon Hoare  <graydon@redhat.com>
- 
- 	* Makefile.am
- 	(jv_convert_LDADD):
- 	(gij_LDADD):
- 	(rmic_LDADD):
- 	(rmiregistry_LDADD): Add lib-java-util-logging.la
- 	* Makefile.in: Regenerate.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AbstractDocument.java
- 	(replace): Dont use protected method of java.util.Vector directly.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(installUI): Call specialized install methods.
- 	(installDefaults): New method.
- 	(installListeners): Likewise.
- 	(installKeyboardActions): Likewise.
- 	(uninstallUI): Likewise.
- 	(uninstallDefaults): New method.
- 	(uninstallListeners): Likewise.
- 	(uninstallKeyboardActions): Likewise.
- 	(getPropertyPrefix): New abstract method.
- 	(paint): Made final, just call paintSafely().
- 	(paintSavely): New method.
- 	(paintBackground): Likewise.
- 	(getVisibleEditorRect): Likewise.
- 	* javax/swing/text/LayeredHighlighter.java,
- 	javax/swing/text/TabExpander.java: New files.
- 	* Makefile.am: Added javax/swing/text/LayeredHighlighter.java
- 	and javax/swing/text/TabExpander.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicTextUI.java
- 	(BasicTextUI): Made abstract.
- 	(BasicCaret): New inner class.
- 	(view): Don't explicitely initialize with "null".
- 	(textComponent): New field.
- 	(textColor): Removed.
- 	(disabledTextColor): Removed.
- 	(normalBackgroundColor): Removed.
- 	(RootView): Removed commented out inner class.
- 	(createUI): Removed.
- 	(createCaret): New method.
- 	(getComponent): Likewise.
- 	(installUI): Initialize textComponent only.
- 	(getPreferredSize): Use installed JTextComponent.
- 	(setView): New method.
- 	(create): Likewise.
- 	* javax/swing/text/JTextComponent.java
- 	(highlighter): New field.
- 	(caretColor): Likewise.
- 	(disabledTextColor): Likewise.
- 	(seletedTextColor): Likewise.
- 	(selectionColor): Likewise.
- 	(setUI): New method.
- 	(getCaretColor): Likewise.
- 	(setCaretColor): Likewise.
- 	(getDisabledColor): Likewise.
- 	(setDisabledColor): Likewise.
- 	(getSelectedTextColor): Likewise.
- 	(setSelectedTextColor): Likewise.
- 	(getSelectionColor): Likewise.
- 	(setSelectionColor): Likewise.
- 	(getHighlighter): Likewise.
- 	(setHighlighter): Likewise.
- 	(replaceSelection): Likewise.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
- 	(BasicScrollPaneUI): Implements ScrollPaneConstants.
- 	* javax/swing/plaf/basic/BasicToolBarUI.java
- 	(BasicToolBarUI): Implements SwingConstants.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JPopupMenu.java: Removed CVS tags.
- 	* javax/swing/UIDefaults.java: Reformatted.
- 	* javax/swing/plaf/basic/BasicRootPaneUI.java:
- 	Explicitely import used classes.
- 
- 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(GtkComponentPeer): Remove temporary try/catch block.
- 	(setVisible): Call show and hide.
- 	(show): Make native.
- 	(hide): Likewise.
- 	(getArgs): Don't add "visible" argument.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(property_notify_predicate): Return Bool instead of int.
- 	(find_layout): New function.
- 	(connectJObject): Call find_layout.
- 	(connectSignals): Likewise.
- 	(moveLayout): Likewise.
- 	(gtkLayoutSetVisible): Likewise.
- 
- 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/AbstractButton.java:
- 	(setDisplayedMnemonicIndex): Check if button
- 	text is not null before checking its length.
- 	* javax/swing/JMenuItem.java:
- 	(processMouseEvent): Disarm menu item if mouse has
- 	exited it.
- 	* javax/swing/plaf/basic/BasicMenuUI.java:
- 	(MouseInputHandler.mouseEntered): Do not raise
- 	popup menu if this menu is already selected.
- 	(MouseInputHandler.mousePressed): Do not fire
- 	MenuEvents.
- 	(MenuHandler): Implemented.
- 
- 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JCheckBoxMenuItem.java: Added Javadoc.
- 	(getSelectedObjects): Implemented.
- 	* javax/swing/JRadioButtonMenuItem.java: Added Javadoc.
- 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java:
- 	Added javadoc for few methods.
- 	(processMouseEvent): Made public.
- 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
- 	(processMouseEvent): Likewise.
- 
- 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/AbstractButton.java:
- 	(init): Set display mnemonic index to -1.
- 	(setMnemonic(char)): Use setMnemonic(int).
- 	(setMnemonic(int)): Set display mnemonic index.
- 	(getDisplayedMnemonicIndex): Change method signature
- 	by removing 'index' parameter.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Added default for Menu.selectionBackground.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	(paintMenuItem): Change background color of the selected
- 	menu item.
- 	(paintText): Paint differently when menu item is disabled.
- 	Also paint mnemonic if it appears in the menu item's label.
- 	(paintAccelerator): Paint accelerator differently
- 	if menu item is disabled.
- 	* javax/swing/plaf/basic/BasicMenuUI.java:
- 	(installDefaults): Install defaults for
- 	selectionForeground and selectionBackground.
- 	(uninstallDefaults): Uninstall defauls for
- 	selectionForeground and selectionBackground.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AbstractDocument.java
- 	(BranchElement): Implemented.
- 	(LeafElement): Implemented.
- 	* javax/swing/text/DefaultCaret.java:
- 	Import used classes.
- 	(serialVersionUID): New constant.
- 	* javax/swing/text/JTextComponent.java
- 	(AccessibleJTextComponent): Removed dead declaration.
- 	(caretPos): Removed.
- 	(setCaret): New method.
- 	* javax/swing/text/PlainDocument.java
- 	(rootElement): New field.
- 	(PlainDocument): Initialize rootElement.
- 	(createDefaultRoot): New method.
- 	(getDefaultRootElement): Implemented.
- 	* javax/swing/text/View.java: Reformatted.
- 	* javax/swing/text/ViewFactory.java
- 	(create): Added javadoc.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/ToolTipManager.java: Reformatted.
- 
- 2004-07-21  Rodimina Olga  <rodimina@redhat.com>
- 
- 	* javax/swing/AbstractButton.java
- 	(changeEvent): New field.
- 	(fireItemStateChanged): Change source of the event
- 	to 'this' before firing it to button listeners.
- 	(fireActionPerformed): Likewise.
- 	(fireStateChanged): Likewise.
- 	(createActionListener): Do not set source
- 	of the event to AbstractButton.
- 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
- 	(ContainerHandler.componentAdded): Removed
- 	print out statement.
- 	(ContainerHandler.componentRemoved): Likewise.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/Highlighter.java: New file.
- 	* Makefile.am: Added javax/swing/text/Highlighter.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/ToolTipManager.java
- 	(stillInsideTimerAction): Fixed constructor arguments.
- 	(outsideTimerAction): Likewise.
- 	(insideTimerAction): Likewise.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JButton.java: Reformatted.
- 	* javax/swing/JFormattedTextField.java
- 	(getUIClassID): Implemented.
- 	* javax/swing/JRootPane.java
- 	(serialVersionUID): New constant.
- 	* javax/swing/JTextField.java
- 	(align): New field.
- 	(JTextField): Simplified.
- 	(getUIClassID): New method.
- 	(getActionListeners): Added @since tag.
- 	(setColumns): Invalidate layout and repaint.
- 	(getHorizontalAlignment): New method.
- 	(setHorizontalAlignment): New method.
- 	(selectAll): Removed.
- 	* javax/swing/SwingUtilities.java
- 	(getAncestorOfClass): Removed redundant @see tag.
- 	(isLeftMouseButton): Fixed implementation.
- 	(isMiddleMouseButton): Likewise.
- 	(isRightMouseButton): Likewise.
- 	* javax/swing/text/AbstractDocument.java
- 	(AttributeContext.addAttribute): New method.
- 	(AttributeContext.addAttributes): New method.
- 	(AttributeContext.getEmptySet): New method.
- 	(AttributeContext.reclaim): New method.
- 	(AttributeContext.removeAttribute): New method.
- 	(AttributeContext.removeAttributes): New method.
- 	* javax/swing/text/Document.java
- 	(createPosition): Throws BadLocationException.
- 	(getText): Likewise.
- 	(remove): Likewise.
- 	* javax/swing/text/JTextComponent.java
- 	(getText): Return null if no document is set. Catch
- 	BadLocationException.
- 	(getUI): Return ui.
- 	(updateUI): Simplified.
- 
- 2004-07-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JButton.java
- 	(removeNotify): Fixed javadoc.
- 	(updateUI): Simplified.
- 
- 2004-07-21  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/image/ImageDecoder.java
- 	(startProduction): Only add consumer if it's not added yet.
- 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
- 	(GdkPixbufDecoder): Don't call initState() here.
- 	(produce): Call initState() here, to ensure area_prepared and
- 	area_updated signals are properly connected.
- 	* gnu/java/awt/peer/gtk/GtkImage.java
- 	(setColorModel): Use equals() to compare ColorModel objects.
- 	(setPixels): Likewise.
- 	* java/awt/image/ColorModel.java
- 	(equals): Fix typo. Use Arrays.equals() to compare int arrays.
- 	* java/awt/image/RGBImageFilter.java
- 	(setColorModel): Set consumer's color model.
- 	(setPixels): Use equals() to compare ColorModel objects.
- 
- 2004-07-21  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/net/URLConnection.java (position): New field.
- 	(dateFormat1, dateFormat2, dateFormat3): Removed.
- 	(dateFormats): New field.
- 	(getHeaderFieldDate): Use new dateFormats array. Re-use parsePosition
- 	each time instead of re-allocating.
- 	(initializeDateFormats): Initialize 'dateFormats'.
- 
- 2004-07-20  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/16591
- 	* prims.cc (_Jv_RunMain): Don't call _Jv_SetArgs if DISABLE_MAIN_ARGS
- 	is defined.
- 
- 2004-07-20  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/net/Socket.java (getImpl): Now private. Remove comment.
- 
- 2004-07-20  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/io/BufferedWriter.java (BufferedWriter): Use existing lock
- 	of chained Writer when calling super-constructor.
- 	* java/io/FilterWriter.java (FilterWriter): Likewise.
- 	* java/io/PrintWriter.java (PrintWriter): Likewise.
- 
- 2004-07-19  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* prims.cc (process_gcj_properties): Don't increment i within LHS
- 	of assignment.
- 
- 2004-07-19  Per Bothner  <per@bothner.com>
- 
- 	Print -verbose:message on "loading", not initialization.
- 	* java/lang/Class.h (JV_STATE_LOADED, JV_STATE_COMPILED):  Swap order.
- 	* defineclass.cc (_Jv_ClassReader::parse):  Print message if
- 	gcj::verbose_class_flag.
- 	* java/lang/natClass.cc (initializeClass):  Don't print message here.
- 	* java/lang/natClassLoader.cc (_Jv_WaitForState):  If state was
- 	_JV_STATE_COMPILED, set to JV_STATE_LOADED and may print message.
- 	(_Jv_PrepareCompiledClass):  Likewise.
- 
- 2004-07-18  Matthias Klose  <doko@debian.org>
- 
- 	* configure.in: Substitute target_noncanonical.
- 	* configure: Regenerate
- 
- 2004-07-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/String.java: Fixed javadocs all over.
- 
- 2004-07-17  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/nio/channels/FileChannelImpl.java (truncate): Only truncate
- 	when size is smaller.
- 	* java/io/RandomAccessFile.java (setLength): Use truncate for
- 	shrinking the file and seek plus write for expanding the file.
- 
- 2004-07-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/channels/natFileChannelPosix.cc
- 	(implTruncate): Always save current position. Only reposition file
- 	pointer to where we started if not beyond new lenght. Reposition file
- 	pointer to file length if it points beyond the end of file.
- 
- 2004-07-17  Mark Wielaard  <mark@klomp.org>
- 
- 	* javax/swing/Box.java: Put FIXME comment above class declaration.
- 	* javax/swing/JButton.java: Remove illegal L&F HTML from comments.
- 	* javax/swing/JCheckBox.java: Likewise.
- 	* javax/swing/JDialog.java: Likewise.
- 	* javax/swing/JRadioButton.java: Likewise.
- 	* javax/swing/JToggleButton.java: Likewise.
- 	* javax/swing/UIManager.java: Likewise.
- 	* javax/swing/border/TitledBorder.java: Likewise.
- 	* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Likewise.
- 	* javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
- 	* javax/swing/text/JTextComponent.java: Likewise.
- 
- 2004-07-17  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/net/DatagramPacket.java (setAddress): Removed check for
- 	null address.
- 
- 2004-07-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/DatagramSocket.java
- 	(getLocalAddress): Check if socket is bound or not.
- 	* java/net/Socket.java
- 	(getLocalAddrss): Check if socket is bound or not.
- 	(getPort): Return -1 when not connected. Dont check getImpl() for
- 	null.
- 	(setReuseAddress): Check if socket is closed.
- 	(isConnected): Check if getImpl() returns null.
- 
- 2004-07-17  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/awt/event/InvocationEvent.java (dispatch): Synchronize
- 	on notifier object before calling notifyAll().
- 
- 2004-07-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/channels/FileChannelImpl.java
- 	(finalize): Added javadoc.
- 
- 2004-07-17  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/text/CollationElementIterator.java
- 	(text_decomposition): Changed type to RuleBasedCollator.CollationElement[]
- 	(setText): Use ArrayList instead of Vector.
- 
- 2004-07-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/ByteOrder.java
- 	(static): Removed. Not needed.
- 	Thanks to Patrick Reali for noticing.
- 	* java/nio/charset/CharsetDecoder.java
- 	(decode): Fix for classpath bug #9177: Reset state before flipping.
- 
- 2004-07-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/security/Security.java: Fixed javadocs all over.
- 
- 2004-07-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/EmbeddedWindow.java
- 	(static): Removed.
- 	(addNotify): Set peer via reflection.
- 	(setWindowPeer): Removed.
- 	* gnu/java/awt/natEmbeddedWindow.cc: Removed.
- 	* Makefile.am (nat_source_files):
- 	Removed gnu/java/awt/natEmbeddedWindow.cc.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-17  Richard Earnshaw  <rearnsha@arm.com>
- 
- 	* configure.in(ZIP, GCJH): Remove white space around '=' in variable
- 	assignment.
- 	* configure: Regenerated.
- 
- 2004-07-16  Nathanael Nerode  <neroden@gcc.gnu.org>
- 
- 	* configure.in: Use build_noncanonical rather than build_alias.
- 	* configure: Rebuild.
- 
- 	* configure.in: Eliminate CANADIAN and NULL_TARGET variables
- 	by logic refactoring.  Move default definition of NATIVE closer
- 	to first alternate definition.
- 	* configure: Regenerate.
- 
- 	* Makefile.am: Set ZIP and GCJH directly using autoconf.
- 	* Makefile.in, include/Makefile.in, testsuite/Makefile.in,
- 	gcj/Makefile.in: Regenerate.
- 	* configure.in: Set ZIP and GCJH.  Remove redundant condition
- 	in AM_CONDITIONAL(NATIVE,...)
- 	* configure: Regenerate.
- 
- 2004-07-15  Nathanael Nerode  <neroden@gcc.gnu.org>
- 
- 	* configure.in: Use target_noncanonical rather than
- 	target_alias for forward-compatibility with autoconf 2.59.
- 	* configure: Regenerate.
- 	* Makefile.am, gcj/Makefile.am, include/Makefile.am,
- 	testsuite/Makefile.am: Substitute target_noncanonical.
- 	* Makefile.in, gcj/Makefile.in, include/Makefile.in,
- 	testsuite/Makefile.in: Regenerate.
- 
- 	* configure.in: Move as much as possible below AC_CANONICAL_SYSTEM.
- 	Introduce _GCC_TOPLEV_NONCANONICAL_TARGET.
- 	* acinclude.m4: Include acx.m4.
- 	* aclocal.m4: Regenerate.
- 	* configure: Regenerate.
- 
- 2004-07-15  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/16574
- 	* java/sql/Timestamp.java (dateFormat): Renamed from sdf.
- 	(decimalFormat): New static variable.
- 	(sbuf): Likewise.
- 	(getTime): New. Override Date.getTime().
- 	(toString): Synchronize. Use decimalFormat to format nanos value
- 	correctly. Truncate extra zeros.
- 	(before): Compare getNanos() only if getTime() is equal.
- 	(after): Likewise.
- 
- 2004-07-14  Nathanael Nerode  <neroden@gcc.gnu.org>
- 
- 	* acinclude.m4: "Inline" LIBGCJ_CONFIGURE macro into...
- 	* configure.in: ...here.
- 	* aclocal.m4: Regenerate.
- 	* configure: Regenerate.
- 
- 	* aclocal.m4: Rebuilt with aclocal gcj-1.4.
- 	* configure: Rebuilt with autoconf 2.13.
- 	* Makefile.in, gcj/Makefile.in, include/Makefile.in,
- 	testsuite/Makefile.in: Rebuilt with automake gcj-1.4.
- 
- 2004-07-14  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/16204
- 	* Makefile.am (AM_CXXFLAGS): Add -D_FILE_OFFSET_BITS=64 to enable
- 	large file support.
- 	* Makefile.in: Rebuilt.
- 	* testsuite/libjava.lang/LargeFile.java: New test case.
- 	* testsuite/libjava.lang/LargeFile.out: New file.
- 
- 2004-07-14  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/beans/EventHandler.java: Remove debugging statements.
- 
- 2004-07-14  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/beans/EventHandler.java: New file.
- 	* Makefile.am (awt_java_source_files): Add EventHandler.java.
- 	* Makefile.in, gcj/Makefile.in, include/Makefile.in,
- 	testsuite/Makefile.in: Regenerate.
- 
- 2004-07-14  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* testsuite/libjava.jacks/jacks.exp (gcj_jacks_write): Add deprecation
- 	flag to the gcj_setup.
- 	(gcj_jacks_run): Check tclsh version and launch jacks directly with
- 	the tclsh.
- 	* testsuite/libjava.jacks/jacks.xfail: Update fails to reflect the
- 	deprecation flag change. 58 XFAILS removed.
- 
- 2004-07-14  Ulrich Weigand  <uweigand@de.ibm.com>
- 
- 	* configure.host (DIVIDESPEC) [s390*-*-*]: Set to
- 	-fno-use-divide-subroutine.
- 	* include/s390-signal.h: Include <ucontext.h> and <limits.h>.
- 	(HANDLE_FPE): Define.
- 	(SIGNAL_HANDLER): Change third argument to ucontext_t *.
- 	(struct old_s390_kernel_sigaction): Likewise for k_sa_handler.
- 	(HANDLE_DIVIDE_OVERFLOW): Define.
- 
- 2004-07-14  Michael Koch  <konqueror@gmx.de>
- 	    Matthias Klose  <doko@debian.org>
- 
- 	* java/awt/im/InputContext.java: Initialize in, line.
- 
- 2004-07-13  Ulrich Weigand  <uweigand@de.ibm.com>
- 
- 	* interpret.cc (run): Correctly access libffi return values of
- 	integral smaller-than-int type; these are implicitly promoted.
- 
- 2004-07-13  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/7587
- 	* interpret.cc (compile_mutex): New.
- 	(_Jv_InitInterpreter): New. Initialize compile_mutex.
- 	(run): Lock compile_mutex before calling compile() if compilation is
- 	required.
- 	* prims.cc (_Jv_CreateJavaVM): Call _Jv_InitInterpreter().
- 	* include/java-interp.h (_Jv_InitInterpreter): Declare.
- 
- 2004-07-12  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/15713
- 	* include/jvm.h (_Jv_value): New union type.
- 	* gcj/field.h (_Jv_Field): Add new _addr union field variants
- 	* interperet.cc (run): Use _Jv_value union type and *_addr _Jv_Field
- 	union members.
- 
- 2004-07-12  Scott Gilbertson  <scottg@mantatest.com>
- 
- 	* gnu/awt/xlib/XCanvasPeer.java (createImage): Implement.
- 	* gnu/awt/xlib/XOffScreenImage.java
- 	  (XOffScreenImage): Add ImageConsumer interface. Add ColorModel
- 	  constructor argument. Add constructor using ImageProducer.
- 	  (getSource): Implement.
- 	  (imageComplete): New method.
- 	  (setColorModel): New method.
- 	  (setDimensions): New method.
- 	  (setHints): New method.
- 	  (setPixels): New method.
- 	  (setProperties): New method.
- 	* gnu/gcj/xlib/GC.java (drawPoint): New native method.
- 	* gnu/gcj/xlib/natGC.cc (drawPoint): New native method.
- 
- 2004-07-11  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/16478
- 	* prims.cc (_Jv_CreateJavaVM): Fix comment.
- 	* gnu/gcj/runtime/FinalizerThread.java (init): New. Native.
- 	(finalizerReady): Now native.
- 	(run): Likewise.
- 	(runFinalizers): Removed.
- 	* gnu/gcj/runtime/natFinalizerThread.cc (run): Implement here. Use
- 	a primitive lock, and don't hold it while running the finalizers.
- 	(runFinalizers): Implement. Don't aquire any Java lock.
- 	(finalizerReady): Use lock primitives to signal finalizer thread.
- 
- 2004-07-11  Mark Wielaard  <mark@klomp.org>
- 
- 	Reported by Roman Kennke <roman@ontographics.com> (bug #9331)
- 	* java/net/URLStreamHandler.java (parseURL): When url file part
- 	doesn't contain a '/' just ignore context.
- 
- 2004-07-11  Ulrich Weigand  <uweigand@de.ibm.com>
- 
- 	* include/s390-signal.c (SIGNAL_HANDLER): Use SIGINFO-style prototype.
- 	(struct old_s390_kernel_sigaction): Likewise for k_sa_handler.
- 	(MAKE_THROW_FRAME): Do not modify PSW address.
- 	(INIT_SEGV): Install SIGINFO-style signal handler.
- 	(INIT_FPE): Likewise.
- 
- 2004-07-10  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* testsuite/libjava.jacks/jacks.xfail: Updates to reflect current
- 	status. 21 xfail's removed, 1 added.
- 
- 2004-07-10  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gcj/javaprims.h: Regenerate CNI namespace definitions.
- 
- 2004-07-10  Ito Kazumitsu  <kaz@maczuka.gcd.org>
- 
- 	* java/text/MessageFormat.java
- 	(formatInternal): Append "{n}" if argument n is unavailable.
- 	(format(Object, StringBuffer, FieldPosition)): This
- 	should be equivalent to format(Object[],
- 	StringBuffer, FieldPosition).
- 
- 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java.util.Calendar.java (cache): New private static field. Cached
- 	mappings of locales->calendar classes.
- 	(ctorArgTypes): New private static field. Singleton argument for
- 	calendar class constructor lookup.
- 	(getInstance): Cache Locale->Calendar class mappings using HashMap.
- 	Optimize by bypassing reflection instantiation for the
- 	GregorianCalendar case.
- 
- 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/util/Calendar.java: Use getSystemClassLoader as argument for
- 	ResourceBundle.getBundle() calls.
- 	* java/util/GregorianCalendar.java: Likewise.
- 	* java/util/Currency.java: Likewise.
- 	* java/text/BreakIterator.java: Likewise.
- 	* java/text/Collator.java: Likewise.
- 	* java/text/DateFormat.java: Likewise.
- 	* java/text/DateFormatSymbols.java: Likewise.
- 	* java/text/DecimalFormatSymbols.java: Likewise.
- 	* java/text/NumberFormat.java: Likewise.
- 	* java/awt/Window.java: Likewise.
- 
- 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/util/ResourceBundle.java (bundleCache): Renamed from
- 	resourceBundleCache. Update comments.
- 	(getObject): Don't catch MissingResourceException.
- 	(getBundle(String)): Remove 'final'. Use system classloader if
- 	getCallingClassLoader returned null.
- 	(getBundle(String, Locale)): Likewise.
- 	(BundleKey): New private class. HashMap key for bundle cache lookup.
- 	(lookupKey): New. Singleton instance of BundleKey.
- 	(nullEntry): New. Cache entry to represent failed lookups.
- 	(getBundle(String, Locale, ClassLoader)): Re-written to use new
- 	caching strategy, no-allocation lookup, and new tryBundle methods.
- 	(tryBundle(String, ClassLoader)): New. Load a locale-qualified bundle
- 	name using given classloader.
- 	(tryBundle(String, Locale, ClassLoader, boolean): New. Qualify
- 	baseName for given Locale and attempt to load bundle.
- 
- 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicMenuUI.java (mousePressed): Remove
- 	illegal protected method calls.
- 
- 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	Fix or remove some bogus test cases.
- 	* testsuite/libjava.compile/pr10459_2.java: Removed.
- 	* testsuite/libjava.compile/pr10459.java: Test using its own method,
- 	not Object.clone().
- 	* testsuite/libjava.compile/inner_data.java: Test against its own
- 	protected field.
- 
- 2004-07-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* scripts/unicode-muncher.pl: Updated to version 2.1
- 	from GNU classpath. Added some clarifications on where to find the
- 	needed files from www.unicode.org.
- 	* gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html,
- 	gnu/gcj/convert/UnicodeData-3.0.0.txt:
- 	Removed, these can directly be downloaded from www.unicode.org if
- 	needed.
- 	* gnu/java/lang/CharData.java: Regenerated.
- 	* include/java-chartables.h: Regenerated.
- 	* Makefile.am (ordinary_java_source_files):
- 	Removed gnu/java/lang/CharData.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/security/AccessControlContext.java,
- 	java/security/SecureClassLoader.java:
- 	Fixed javadocs.
- 
- 2004-07-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/ObjectInputStream.java (readFields): Use long datatype
- 	when shifting byte values more then 24 bits left.
- 
- 2004-07-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/zip/DeflaterOutputStream.java,
- 	java/util/zip/GZIPInputStream.java,
- 	java/util/zip/GZIPOutputStream.java,
- 	java/util/zip/InflaterInputStream.java:
- 	Reformatted. Added javadocs. Reordered all stuff.
- 	Renamed variables to be more clear.
- 
- 2004-07-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/IIOException.java,
- 	javax/imageio/event/IIOReadProgressListener.java,
- 	javax/imageio/event/IIOReadUpdateListener.java,
- 	javax/imageio/event/IIOReadWarningListener.java,
- 	javax/imageio/event/IIOWriteProgressListener.java,
- 	javax/imageio/event/IIOWriteWarningListener.java:
- 	New files.
- 	* Makefile.am: Added new files.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-09  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/text/RuleBasedCollator.java
- 	(mergeRules): Use ArrayList instead of Vector.
- 	(subParseString): likewise.
- 	(parseString): likewise.
- 	(buildCollationVector): likewise.
- 	(getCollationKey): likewise.
- 
- 2004-07-09  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* java/text/DateFormat.java (parse):
- 	Improved javadoc. Improved exception message.
- 
- 2004-07-09  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/nio/SelectorImpl.java (select): Call static Thread
- 	interrupted() method to clear interupt flag of our Thread.
- 
- 2004-07-09  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* java/nio/Buffer.java,
- 	java/nio/ByteBuffer.java,
- 	java/nio/ByteBufferHelper.java,
- 	java/nio/ByteBufferImpl.java,
- 	java/nio/CharBuffer.java,
- 	java/nio/CharBufferImpl.java,
- 	java/nio/CharViewBufferImpl.java,
- 	java/nio/DirectByteBufferImpl.java,
- 	java/nio/DoubleBuffer.java,
- 	java/nio/DoubleBufferImpl.java,
- 	java/nio/DoubleViewBufferImpl.java,
- 	java/nio/FloatBuffer.java,
- 	java/nio/FloatBufferImpl.java,
- 	java/nio/FloatViewBufferImpl.java,
- 	java/nio/IntBuffer.java,
- 	java/nio/IntBufferImpl.java,
- 	java/nio/IntViewBufferImpl.java,
- 	java/nio/LongBuffer.java,
- 	java/nio/LongBufferImpl.java,
- 	java/nio/LongViewBufferImpl.java,
- 	java/nio/MappedByteBufferImpl.java,
- 	java/nio/ShortBuffer.java,
- 	java/nio/ShortBufferImpl.java,
- 	java/nio/ShortViewBufferImpl.java:
-         Fixed javadocs all over. Improved input error
-         checking.
- 
- 	* java/nio/Buffer.java
- 	(checkForUnderflow, checkForOverflow, checkIndex,
- 	checkIfReadOnly, checkArraySize): New helper methods
-         for error checking.
- 
- 	* java/nio/ByteBufferHelper.java
- 	(checkRemainingForRead, checkRemainingForWrite,
- 	checkAvailableForRead, checkAvailableForWrite): Removed
-         no longer needed methods.
- 
- 2004-07-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/regexp/CharIndexedInputStream.java:
- 	Reordered imports to match classpath.
- 
- 2004-07-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/EmbeddedWindow.java:
- 	Load native library for setWindowPeer method.
- 
- 2004-07-08  Randolph Chung  <tausq@debian.org>
- 
- 	* configure.in (SIGNAL_HANDLER): Use pa-signal.h for hppa.
- 	* configure: Regenerate.
- 	* configure.host: Set can_unwind_signal for hppa*-linux.
- 	* include/pa-signal.h: New file.
- 
- 2004-07-07  Per Bothner  <per@bothner.com>
- 
- 	* Makefile.am:  Add rules to build libgij from just gij.cc.
- 
- 	* include/jvm.h (namespace jcj):  Declare verbose_class_flag
- 	* java/lang/natClass.cc (gcj::verbose_class_flag):  New variable.
- 	(initializeClass):  If verbose_class_flag, print message.
- 	* gij.cc (main):  Handle -verbose:class flag.
- 
- 2004-07-07  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* configure.host: Enable hash synchronization on Darwin.
- 	* sysdep/powerpc/locks.h (compare_and_swap): Use '\n' instead of
- 	';', since this is a comment on Darwin.
- 	(compare_and_swap_release): Likewise.
- 
- 2004-07-06  Mohan Embar  <gnustuff@thisiscool.com>
- 
- 	* java/net/URLStreamHandler.java (parseURL): Canonicalize
- 	file portion of URL in addition to spec for file: protocol.
- 
- 2004-07-05  Anthony Green  <green@redhat.com>
- 
- 	* java/io/File.java (toURI): Merge from Classpath.
- 
- 2004-07-05  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gnu/gcj/runtime/VMClassLoader.java (init): Check classpath entry
- 	before passing to URL constructor. Rethrow any MalformedURLException
- 	as a RuntimeException. Catch MalformedURLException specifically, not
- 	all exceptions.
- 
- 2004-07-05  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/util/Locale.java (readObject): Intern strings read from object
- 	stream.
- 
- 2004-07-04  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/gcj/runtime/FirstThread.java,
- 	gnu/gcj/runtime/natFirstThread.cc: Removed.
- 	* gnu/java/lang/MainThread.java,
- 	gnu/java/lang/natMainThread.cc: New files.
- 	* prims.cc (_Jv_RunMain): Use MainThread instead of FirstThread.
- 	* Makefile.am: Added new files and removed deleted ones.
- 	* Makefile.in: Regenerated.
- 
- 2004-07-03  Mark Wielaard  <mark@klomp.org>
- 	    Anthony Green  <green@redhat.com>
- 
- 	* java/net/URL.java (getFile): Clarify return value doc.
- 	(getPath): Return null if file is empty - not empty String.
- 	(set): Convert protocol to lower case before doing anything.
- 	Only change the protocol handler if it's different.
- 
- 2004-07-03  Anthony Green  <green@redhat.com>
- 
- 	* java/net/URL.java (URL): Convert protocol to lower case before
- 	doing anything, so we getURLStreamHandler() with the proper value.
- 
- 2004-07-02  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/util/Locale.java (hashcode): Made transient.
- 	(hashCode): No longer synchronized.
- 	(equals): Remove comment.
- 	(writeObject): No longer synchronized. Implement using writeObject
- 	calls instead of tweaking hashCode field. Update doc.
- 	(readObject): Implement using readObject calls.
- 
- 2004-06-26  Geoffrey Keating  <geoffk@apple.com>
- 	    Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* configure.host (powerpc-*-darwin*): New case, define
- 	can_unwind_signal.
- 	* configure.in (*-*-darwin*): New case, point to darwin-signal.h.
- 	* configure: Regenerate.
- 	* include/darwin-signal.h: New.
- 
- 2004-06-30  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/beans/Statement.java (doExecute): Fix formatting.
- 
- 2004-06-29  Per Bothner  <per@bothner.com>
- 
- 	* jni.cc (_Jv_JNI_NewGlobalRef, JNICALL _Jv_JNI_DeleteGlobalRef,
- 	etc etc):  Remove needless parenthesis, which causes __stdcall__
- 	attribute on MinGW to get ignored.
- 
- 2004-06-29  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* testsuite/libjava.compile/PR16249.java: New test case. PR gcc/16249.
- 
- 2004-06-28  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* testsuite/libjava.jacks/jacks.xfail: Remove 8.1.3-superclass-6.
- 
- 2004-06-28  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/beans/Expression.java: New file.
- 	* java/beans/Statement.java: New file.
- 	* Makefile.am: Added new files.
- 	* Makefile.in: Re-generate.
- 
- 2004-06-27 Mark Wielaard  <mark@klomp.org>
- 
- 	* java/io/FilePermission.java (usingPerms): Removed.
- 	(actionsString): Made final.
- 	(cachePerms): Renamed to checkPerms.
- 	(checkPerms): Renamed from cachePerms. Call trim() and toLowerCase()
- 	on action String.
- 	(FilePermission): Check arguments, call checkPerms().
- 	(equals): Remove cachePerms() call.
- 	(implies): Likewise.
- 
- 2004-06-27  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/net/protocol/http/Connection.java (userAgent): New static
- 	final field.
- 	(sendRequest): Use new field in user-agent http agent.
- 
- 2004-06-27  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/awt/EventQueue.java (postEvent): Throw NullPointerException
- 	when argument is null.
- 
- 2004-06-26  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(ok_clicked): Use Ljava/lang/String; not Ljava.lang.String; in JNI
- 	GetMethodID call.
- 	(cancel_clicked): Likewise.
- 
- 2004-06-26  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(init_dpi_conversion_factor): Check for int_dpi < 0 in case gtk-xft-dpi
- 	can not calculate the right value.
- 	(dpi_changed_cb): Likewise. Mark *pspec as unused.
- 
- 2004-06-24  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* testsuite/libjava.jacks/jacks.xfail: Remove
- 	15.9.1-qualified-concrete-20.
- 
- 2004-06-22  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gnu/gcj/convert/BytesToUnicode.java (getDecoder): Pass original
- 	encoding name to iconv.
- 	* gnu/gcj/convert/UnicodeToBytes.java (getEncoder): Likewise.
- 
- 2004-06-22  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	PR libgcj/16134:
- 	* gnu/gcj/convert/BytesToUnicode.java (getDecoder): Canonicalize
- 	encoding name before cache lookup. Thanks to Hannes Wallnoefer.
- 	* gnu/gcj/convert/UnicodeToBytes.java (getEncoder): Likewise.
- 
- 2004-06-21  Andrew Haley  <aph@redhat.com>
- 
- 	* java/io/ObjectOutputStream.java: Add DEBUG statements
- 	everywhere.
- 	(dumpElementln): New method.
- 	(depth): New field.
- 	* java/io/ObjectInputStream.java
- 	(currentClassLoader): Make native.
- 	(callersClassLoader): New field.
- 	(depth): New field.
- 	(readObject): ENDBLOCKDATA is generated if the class has a write
- 	method, not if it has a read method.
- 	(readObject): Save and restore this.currentObject and
- 	this.currentObjectStreamClass around calls to callReadMethod().
- 	* java/io/natObjectInputStream.cc (getCallersClassLoader): New
- 	method.
- 
- 2004-06-18  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Add lgcc_s for
- 	darwin.
- 
- 2004-06-18  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	* prims.cc (_Jv_CreateJavaVM): Install SEGV and FPE handlers,
- 	if desired, before the default class loader is initialised.
- 	Call INIT_SEGV only if HANDLE_SEGV is defined.
- 
- 2004-06-18  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	* gnu/gcj/runtime/VMClassLoader.java (init): Add extensions
- 	directory only if it actually exists.
- 
- 2004-06-18  Graydon Hoare  <graydon@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
- 	Fix up non-ansi comments.
- 
- 2004-06-18  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	* javax/swing/text/AbstractDocument.java: Adding missing import
- 	for javax.swing.event.EventListenerList.
- 	* javax/swing/text/DefaultCaret.java: Likewise.
- 
- 2004-06-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JToolBar.java
- 	(name): Removed.
- 	(JToolBar): Use Component.setName(String) instead of doing it all
- 	alone.
- 	* javax/swing/Timer.java
- 	(queueEvent): Added missing modifier.
- 
- 2004-06-17  Olga Rodimina  <rodimina@redhat.coom>
- 
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Re-generate.
- 	* javax/swing/JMenu.java:
- 	(insertSeparator): Implemented.
- 	* javax/swing/JPopupMenu.java:
- 	(JPopupMenu.Separator): Implemented.
- 	* javax/swing/MenuSelectionManager.java:
- 	(processMouseEvent): Use java.awt.Component
- 	for event source instead of javax.swing.JComponent.
- 	* javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java:
- 	New File. Implemented.
- 
- 2004-06-16  David Jee  <djee@redhat.com>
- 
- 	* java/awt/GridBagLayout.java
- 	(GetLayoutInfo): Adjust cell sizes iff parent size is not zero.
- 	Make sure pos_x and pos_y are never negative.
- 
- 2004-04-16  Andrew Overholt  <overholt@redhat.com>
- 
- 	* Makefile.am: Add new file.
- 	* Makefile.in: Re-generate.
- 	* javax/swing/JToolBar.java
- 	Partially implemented.
- 	* javax/swing/plaf/basic/BasicToolBarUI.java
- 	New file. Partially implemented.
- 
- 2004-06-16  Graydon Hoare  <graydon@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(setComposite): Accept AlphaComposite arguments.
- 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
- 	(createBufferedImage): Add new overloads.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java
- 	(createImage): Use GdkPixbufDecoder.createBufferedImage
- 	when useGraphics2D() is true.
- 	(getImage): Delegate to createImage.
- 	* javax/swing/JList.java
- 	(isSelectionEmpty):
- 	(getFirstVisibleIndex):
- 	(getLastVisibleIndex):
- 	(setSelectedValue):
- 	(ensureIndexIsVisible): New methods.
- 	* javax/swing/Timer.java: Reimplement.
- 
- 2004-06-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AbstractDocument.java
- 	(AbstracElement): Made public, implements java.io.Serializable.
- 	(AttributeContext): Made public.
- 	(BranchElement): Likewise.
- 	(Content): Likewise.
- 	(DefaultDocumentEvent): Made public, extends
- 	javax.swing.undo.CompoundEdit.
- 	(ElementEdit): Made public, extends
- 	javax.swing.undo.AbstractUndoableEdit.
- 	(LeafElement): Made public.
- 	(LeafElement.LeafElement): Made public.
- 
- 2004-06-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/JTextComponent.java: Totally reworked. Removed many
- 	methods (that were obviously never be intended to get included hi this
- 	class. Added some methods too.
- 
- 2004-06-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/PlainDocument.java
- 	(serialVersionUID): New constant.
- 	(lineLimitAttribute): Likewise.
- 	(tabSizeAttribute): Likewise.
- 	(tabSize): New field.
- 	(PlainDocument): Made public.
- 	(PlainDocument): New constructor.
- 
- 2004-06-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AbstractDocument.java
- 	(insertString): Throws BadLocationException.
- 	* javax/swing/text/Document.java
- 	(insertString): Likewise.
- 	* javax/swing/text/JTextComponent.java:
- 	Javadocs and comments cleaned up.
- 
- 2004-06-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/event/UndoableEditListener.java: Reformatted.
- 	* javax/swing/text/AbstractDocument.java
- 	(AbstractDocument): Implements java.io.Serializable.
- 	(doc_list): Removed.
- 	(undo_list): Removed.
- 	(AbstractElement.serialVerionUID): New field.
- 	(BranchElement.serialVerionUID): Likewise.
- 	(DefaultDocumentEvent.serialVerionUID): Likewise.
- 	(ElementEdit.serialVerionUID): Likewise.
- 	(LeafElement.serialVerionUID): Likewise.
- 	(serialVerionUID): Likewise.
- 	(BAD_LOCATION): New constant.
- 	(BidiElementName): Likewise.
- 	(ContentElementName): Likewise.
- 	(ParagraphElementName): Likewise.
- 	(SectionElementName): Likewise.
- 	(ElementNameAttribute): Likewise.
- 	(AbstractDocument): Made protected.
- 	(AbstractDocument): New construtor.
- 	(listenerList): New field.
- 	(fireChangedUpdate): Implemented.
- 	(fireInsertUpdate): Likewise.
- 	(fireRemoveUpdate): Likewise.
- 	(fireUndoableEditUpdate): Likewise.
- 	(getListeners): Likewise.
- 	(addDocumentListener): Likewise.
- 	(removeDocumentListener): Likewise.
- 	(addUndoableEditListener): Likewise.
- 	(removeUndoableEditListener): Likewise.
- 	(getDocumentListeners): New method.
- 	(getUndoableEditListeners): Likewise.
- 	(getAsynchronousLoadPriority): Made public.
- 	(getBidiRootElement): Likewise.
- 	(setAsynchronousLoadPriority): Likewise.
- 	(setDocumentProperties): Likewise.
- 	* javax/swing/text/BadLocationException.java
- 	(serialVerionUID): New field.
- 	* javax/swing/text/DefaultCaret.java
- 	(changeEvent): New field.
- 	(listenerList): Likewise.
- 	(changes): Removed.
- 	(addChangeListener): Reimplemented.
- 	(removeChangeListener): Likewise.
- 	(getListeners): New method.
- 	(getChangeListeners): Likwise.
- 	(getComponent): Likewise.
- 	* javax/swing/text/GapContent.java
- 	(GapContent): Implements java.io.Serializable.
- 	(serialVerionUID): New field.
- 
- 2004-06-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTree.java
- 	(treeModel): New field.
- 	(JTree): New constructors, one existing one made public.
- 	(createTreeModel): New method.
- 	(addTreeExpansionListener): Likewise.
- 	(removeTreeExpansionListener): Likewise.
- 	(getTreeExpansionListeners): Likewise.
- 	(fireTreeCollapsed): Likewise.
- 	(fireTreeExpanded): Likewise.
- 	(addTreeSelectionListener): Likewise.
- 	(removeTreeSelectionListener): Likewise.
- 	(getTreeSelectionListeners): Likewise.
- 	(fireValueChanged): Likewise.
- 	(addTreeWillExpandListener): Likewise.
- 	(removeTreeWillExpandListener): Likewise.
- 	(getTreeWillExpandListeners): Likewise.
- 	(fireTreeWillCollapse): Likewise.
- 	(fireTreeWillExpand): Likewise.
- 
- 2004-06-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTree.java: Reformatted.
- 
- 2004-06-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTextArea.java: New file.
- 	* javax/swing/JTextField.java
- 	(actions): Removed.
- 	(notifyAction): New constant.
- 	(columns): New field.
- 	(JTextField): New constructors.
- 	(createDefaultModel): New method.
- 	(addActionListener): Reimplmemented.
- 	(removeActionListener): Reimplemented.
- 	(getActionListeners): New method.
- 	(fireActionPerformed): New method.
- 	(getColumns): New method.
- 	(setColumne): New method.
- 	* javax/swing/text/JTextComponent.java
- 	(AccessibleJTextComponent.serialVersionUID): New field.
- 	(serialVersionUID): Likewise.
- 	(DEFAULT_KEYMAP): Likewise.
- 	(FOCUS_ACCELERATOR_KEY): Likewise.
- 	(doc): Made private.
- 	(icon_gap): Likewise.
- 	(icon): Likewise.
- 	(align): Likewise.
- 	(JTextComponent): Some constructors removed.
- 	(getScrollableTracksViewportHeight): New method.
- 	(getScrollableTracksViewportWidth): Likewise.
- 	* Makefile.am: Added javax/swing/JTextArea.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-06-15  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/ImageIcon.java (ImageIcon): New constructor.
- 	* javax/swing/JFrame.java (defaultLookAndFeelDecorated): New property.
- 	* javax/swing/JViewport.java
- 	(getExtentSize): Return size rather than preferred size.
- 	(toViewCoordinates): New methods.
- 	(getViewSize): Return size rather than preferred size.
- 	(setViewSize): Note view size as set.
- 	* javax/swing/ViewportLayout.java (layoutContainer): Reimplement.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java
- 	(getPreferredSize): Don't redo layout.
- 	* javax/swing/plaf/basic/BasicViewportUI.java
- 	(paint): Translate image properly and eat exceptions.
- 
- 2004-06-15  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/JTabbedPane.java
- 	(setComponent): Remove old component and
- 	add new component.
- 	(setSelectedIndex): Don't operate on the
- 	components if they're null. Don't set index
- 	on the model if the index is the same.
- 	(insertTab): Don't add or hide the component
- 	if it's null. Repaint the container.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java
- 	Change colors for TabbedPane.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
- 	(mousePressed): Re-layout and paint the component.
- 	(layoutContainer): Don't set location on the view.
- 	(ScrollingViewport::paint): Remove.
- 
- 2004-06-14  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(gtkWidgetDispatchKeyEvent): Change warning message to comment.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
- 	Wrap baseline y value in PANGO_PIXELS macro, rather than simply
- 	dividing by PANGO_SCALE.  Call gdk_flush before leaving GDK
- 	critical region.
- 	(drawLine): Call gdk_flush before leaving GDK critical region.
- 	(fillRect): Likewise.
- 	(drawRect): Likewise.
- 	(copyArea): Likewise.
- 	(copyPixmap): Likewise.
- 	(clearRect): Likewise.
- 	(drawArc): Likewise.
- 	(drawPolyline): Likewise.
- 	(drawPolygon): Likewise.
- 	(fillPolygon): Likewise.
- 	(fillArc): Likewise.
- 	(drawOval): Likewise.
- 	(fillOval): Likewise.
- 
- 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java (initState): Add
- 	style parameter.
- 	(GdkFontMetrics): Add style argument to initState call.
- 	(stringWidth(String,int,int,String)): Add style parameter.
- 	(stringWidth(String)): Add style argument to stringWidth call.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
- 	(initState): Set pango font style and weight based on AWT style
- 	parameter.  Pass default GTK language to
- 	pango_context_get_metrics.  Use PANGO_PIXELS macro rather than
- 	simply dividing by PANGO_SCALE.
- 	(stringWidth): Set pango font style and weight based on AWT style
- 	parameter.
- 
- 	* java/awt/Button.java (next_button_number): New field.
- 	(paramString): Change output.
- 	(generateName): New method.
- 	(getUniqueLong): New method.
- 
- 2004-06-14  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/JTabbedPane.java:
- 	(setComponentAt): Set the component, not
- 	the enabled status.
- 	* javax/swing/plaf/basic/BasicDesktopIconUI.java
- 	(actionPerformed): Let deiconize catch exception.
- 
- 2004-06-14  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JPopupMenu.java:
- 	(setVisible): Corrected location of a
- 	heavyweight popup menu.
- 
- 2004-06-14  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/MenuSelectionManager.java:
- 	Ran through jalopy to fix formatting style.
- 
- 2004-06-14  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JLayeredPane.java:
- 	(remove): Revalidate and repaint layered pane after
- 	the component was removed.
- 	javax/swing/JMenu.java:
- 	(setVisible): Display popup menu at the user location,
- 	if one was set by the user.
- 	(setMenuLocation): Reimplemented. Fixed javadoc.
- 	* javax/swing/JMenuBar.java: Added javadoc.
- 	(BORDER_PAINTED_CHANGED_PROPERTY): New Property.
- 	(MODEL_CHANGED_PROPERTY): New Property.
- 	(isSelected): Implemented.
- 	(setBorderPainted): Fire PropertyChangeEvent
- 	if paintBorder property changes.
- 	(setSelected): Implemented.
- 	(setSelectionModel): Implemented.
- 	* javax/swing/JPopupMenu.java: Added Javadoc
- 	(pack): Implemented.
- 	(setVisible): Reimplemented.
- 	(show): Fixed location.
- 	(JPopupMenu.LigthWeightPopup): Reimplemented to use
- 	Container instead of JPanel.
- 	* javax/swing/MenuSelectionManager.java: Added Javadocs.
- 	(clearSelectedPath): Reimplemented to clear selectedPath
- 	in reverse order.
- 	(processMouseEvent): Reimplemented.
- 	(setSelectedPath): Fire stateChange event indicating that
- 	selected menu path has changed.
- 	(getPath): Change to use ArrayList instead of Vector.
- 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
- 	(installUI): call installKeyboardActions().
- 	(uninstallUI): call uninstallKeyboardActions().
- 
- 2004-06-13  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/DefaultCaret.java,
- 	javax/swing/text/BadLocationException.java:
- 	Reformatted.
- 
- 2004-06-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (DEFAULT_ROWS,
- 	DEFAULT_COLS): New variables.
- 	(create): Don't allow 0 rows or 0 columns.  Instead, set the
- 	values to DEFAULT_ROWS or DEFAULT_COLS.
- 	(getMinimumSize): Likewise.
- 	(getPreferredSize): Likewise.
- 	(minimumSize): Likewise.
- 	(preferredSize): Likewise.
- 	(create): Set peer's editable state.
- 	* java/awt/TextArea.java (TextArea()): Set rows and columns to
- 	zero.  Update javadocs.
- 	(TextArea(String)): Likewise.
- 	(TextArea(int,int)): Fix javadocs.
- 	(TextArea(String,int,int,int)): Only throw exception if one of
- 	rows or columns is zero.  Fix javadocs.
- 
- 2004-06-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/AWTEvent.java (toString): Handle MenuComponents in
- 	addition to Components.
- 
- 	* java/awt/MenuItem.java (dispatchEventImpl): If the event
- 	wasn't consumed by normal processing, send it to the parent
- 	menu.
- 
- 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
- 	(setPixels(int,int,int,int,ColorModel,int[],int,int)): Remove
- 	translation.
- 
- 2004-06-11  David Jee  <djee@redhat.com>
- 
- 	* java/awt/MediaTracker.java
- 	(addImage(Image,int)): Call imageUpdate() to udpate image status.
- 	(addImage(Image,int,int,int)): Likewise.
- 
- 2004-06-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/AbstractDocument.java,
- 	javax/swing/text/Document.java,
- 	javax/swing/text/GapContent.java,
- 	javax/swing/text/JTextComponent.java,
- 	javax/swing/text/PlainDocument.java:
- 	Reformatted.
- 
- 2004-06-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JRootPane.java
- 	(AccessibleJRootPane.serialVersionUID): New field.
- 	(AccessibleJRootPane.AccessibleJRootPane): New constructor.
- 	(AccessibleJRootPane.getAccessibleRole): New method.
- 	(RootLayout): Implements Serializable.
- 	(RootLayout.serialVersionUID): New field.
- 	(RootLayout.RootLayout): New constructor.
- 	(setJMenuBar): Made public.
- 	(getJMenuBar): Likewise.
- 	(JRootPane): Likewise.
- 	(createContentPane): Likewise.
- 	(createGlassPane): Likewise.
- 	(createLayeredPane): Likewise.
- 
- 2004-06-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/SwingUtilities.java
- 	(isLeftMouseButton): Fixed javadoc.
- 	(isMiddleMouseButton): Likewise.
- 	(isRightMouseButton): Likewise.
- 
- 2004-06-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JScrollPane.java
- 	(serialVersionUID): New field.
- 	(columnHeader): Made protected.
- 	(rowHeader): Likewise.
- 	(lowerLeft): Likewise.
- 	(lowerRight): Likewise.
- 	(upperLeft): Likewise.
- 	(upperRight): Likewise.
- 	(horizontalScrollBar): Likewise.
- 	(horizontalScrollBarPolicy): Likewise.
- 	(verticalScrollBar): Likewise.
- 	(verticalScrollBarPolicy): Likewise.
- 	(viewport): Likewise.
- 
- 2004-06-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/LookAndFeel.java: Fixed javadocs.
- 
- 2004-06-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JEditorPane.java: Fixed javadocs.
- 	(JEditorPane): Removed redundant call to to this().
- 	(fireHyperlinkUpdate): Implemented.
- 
- 2004-06-10  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JMenu.java: Fixed file name
- 	in the file comment.
- 
- 2004-06-10  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JMenu.java: Added javadoc.
- 	(JMenu): Added MenuChangeListener to listen to
- 	ChangeEvents occuring in menu's model.
- 	(insert): Throw IllegalArgumentException if
- 	index is less than 0
- 	(setSelected): Reimplement.
- 	(setPopupMenuVisible): Call menu's model isEnabled()
- 	(setDelay): Throw IllegalArgumentException if
- 	given amount of delay is less than 0.
- 	(createActionComponent): Implemented.
- 	(createActionChangeListener): Implemented.
- 	(addSeparator): Implemented.
- 	(getItem): Throw IllegalArgumentException if index is
- 	less than 0.
- 	(getItemCount): Implemented.
- 	(fireMenuSelected): Changed to use menuEvent.
- 	(fireMenuDeselected): Likewise.
- 	(fireMenuCanceled): Likewise.
- 	(setAccelerator): Changed to throw an error if this
- 	method is used.
- 	(doClick): Implemented.
- 	(JMenu.ActionChangedListener): New inner class to handle
- 	PropertyChangeEvents occuring in the actions associated with menu.
- 	* javax/swing/plaf/basic/BasicMenuUI.java: Added javadoc.
- 	(BasicMenuUI): Added PropertyChangeListener to the menu.
- 	(createChangeListener): Implemented.
- 	(createMenuDragMouseListener): Likewise.
- 	(createMenuKeyListener): Likewise.
- 	(createPropertyChangeListener): Likewise.
- 	(uninstallListeners): Likewise.
- 	(BasicMenuUI.MouseInputHandler): Reimplemented.
- 	(BasicMenuUI.PropertyChangeHandler): New class. Not implemented yet.
- 	(BasicMenuUI.ChangeHandler): Likewise.
- 	(BasicMenuUI.MenuDragMouseHandler): Likewise.
- 	(BasicMenuUI.MenuKeyHandler): Likewise.
- 
- 2004-06-10  David Jee  <djee@redhat.com>
- 
- 	* java/awt/MediaTracker.java
- 	(imageUpdate): Only do notifyAll() if the image is complete.
- 
- 2004-06-10  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JApplet.java:
- 	(getJMenuBar): Made public.
- 	(setJMenuBar): Likewise.
- 	* javax/swing/JFrame.java:
- 	(getJMenuBar): Made public.
- 	(setJMenuBar): Likewise.
- 	* javax/swing/JWindow.java:
- 	(getJMenuBar): Removed.
- 	(setJMenuBar): Removed.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JEditorPane.java
- 	(createEditorKitForContentType): Fixed visibility.
- 	(fireHyperlinkUpdate): Likewise.
- 	(getContentType): Likewise.
- 	(getEditorKit): Likewise.
- 	(getEditorKitForContentType): Likewise.
- 	(getPage): Likewise.
- 	(read): Likewise.
- 	(registerEditorKitForContentTyoe): Likewise.
- 	(replaceSelection): Likewise.
- 	(setContentType): Likewise.
- 	(setEditorKit): Likewise.
- 	(setPage): Likewise.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/Timer.java
- 	(Timer): New constructor.
- 	* javax/swing/plaf/basic/BasicProgressBarUI.java
- 	(animationTimer): Don't initialize at construction.
- 	(startAnimationTimer): Added since tag.
- 	(stopAnimationTimer): Likewise.
- 	(installUI): Use new Timer constructor.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java
- 	(installUI): Likewise.
- 	* javax/swing/plaf/basic/BasicSliderUI.java
- 	(installUI): Likewise.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/ButtonGroup.java
- 	(serialVersionUID): Made private.
- 	(buttons): Renamed from v, added javadoc.
- 	(sel): Added javadoc.
- 	(ButtonGroup): Likewise.
- 	(add): Likewise.
- 	(remove): Likewise.
- 	(getElements): Likewise.
- 	(getSelection): Likewise.
- 	(setSelected): Likewise.
- 	(isSelected): Likewise.
- 	(getButtonCount): Likewise.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/ButtonGroup.java,
- 	javax/swing/ImageIcon.java,
- 	javax/swing/JEditorPane.java,
- 	javax/swing/JRootPane.java,
- 	javax/swing/JTextField.java,
- 	javax/swing/LookAndFeel.java,
- 	javax/swing/plaf/basic/BasicTextUI.java:
- 	Reindented.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/text/Style.java: Added javadocs.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JComponent.java
- 	(fireVetoableChange): Removed redundant cast.
- 	* javax/swing/JLabel.java
- 	(getDisabledIcon): Save icon for next call.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/KeyStroke.java
- 	(getKeyStroke(char,boolean)): Marked deprecated.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/DefaultCellEditor.java,
- 	javax/swing/GrayFilter.java,
- 	javax/swing/event/DocumentEvent.java,
- 	javax/swing/text/JTextComponent.java,
- 	javax/swing/text/MutableAttributeSet.java:
- 	Reindented.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/BorderUIResource.java:
- 	Added serialVersionUID all over.
- 
- 2004-06-10  Sascha Brawer  <brawer@dandelis.ch>
- 
- 	* javax/swing/undo/UndoManager.java: Re-written from scratch.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/table/DefaultTableCellRenderer.java
- 	(noFocusBorder): Initialize directly.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicArrowButton.java
- 	(setDirection): Use method argument.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/BorderUIResource.java,
- 	javax/swing/plaf/ComponentUI.java,
- 	javax/swing/undo/CompoundEdit.java,
- 	javax/swing/undo/StateEdit.java:
- 	Fixed javadocs all over.
- 
- 2004-06-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/DefaultButtonModel.java
- 	(ARMED): Made public final, fixed value.
- 	(ENABLED): Likewise.
- 	(PRESSED): Likewise.
- 	(ROLLOVER): Likewise.
- 	(SELECTED): Likewise.
- 	(stateMask): Initialize directly.
- 	(listenerList): Likewise.
- 	(mnemonic): Likewise.
- 	(fireStateChanged): Removed argument, use changeEvent as event.
- 	All places where this method is called are fixed too.
- 	(getActionCommant): Fixed javadoc.
- 	(setGroup): Fixed javadoc.
- 	(getGroup): New method.
- 
- 2004-06-09  Olga Rodimina <rodimina@redhat.com>
- 
- 	* javax/swing/AbstractButton.java
- 	(AbstractButton): Use init() to initialize the button.
- 	(init): New Method. Initializes AbstractButton.
- 	* javax/swing/JMenuItem.java: Documented.
- 	(JMenuItem): Reimplemented.
- 	(init): Implemented.
- 	(setEnabled): Changed to call super.setEnabled()
- 	(processMouseEvent): Reimplemented.
- 	(fireMenuKeyPressed): Implemented.
- 	(fireMenuKeyReleased): Implemented.
- 	(fireMenuKeyTyped): Implemented.
- 	(menuSelectionChanged): disarm the model if the menu item was
- 	deselected.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:Documented.
- 	(getPath): Change to use ArrayList instead of Vector.
- 	(getPreferredSize): Renamed variable.
- 	(paintMenuItem): Paint margin area of menu item.
- 	(MouseInputHandler.mouseEntered): Set selection in MenuSelectionManager.
- 	(MouseInputHandler.mouseReleased): Check if mouse was pressed inside
- 	menu item's bounds before clearing the selection.
- 
- 2004-06-09  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
- 	(GtkTextComponentPeer): Set caret position to 0.
- 	* java/awt/TextComponent.java
- 	(setText): Set caret position to 0.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
- 	Handle GtkScrolledWindow separately. Fix signal handler blocking.
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
- 	Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Make cursor
- 	visible.
- 
- 2004-06-09  Kim Ho  <kho@redhat.com>
- 
- 	* Makefile.am: New files
- 	* Makefile.in: Regenerated
- 	* java/awt/Container.java
- 	(getComponentAt): Removed.
- 	* javax/swing/AbstractAction.java
- 	(ENABLED_PROPERTY): New property.
- 	(putValue): Fire PropertyChangeEvents.
- 	(setEnabled): ditto.
- 	(firePropertyChange): Javadoc and implement
- 	convenience method.
- 	* javax/swing/AbstractButton.java
- 	(setAction): Don't create PropertyChangeListener
- 	if new Action is null.
- 	(setIcon): Don't set icon till after comparing
- 	it.
- 	(configurePropertiesFromAction): Check mnemonic
- 	key before calling intValue().
- 	(createActionPropertyChangeListener): Check
- 	properties rather than bulk change.
- 	* javax/swing/DefaultDesktopManager.java:
- 	Implement.
- 	* javax/swing/DesktopManager.java:
- 	Jalopy and javadoc.
- 	* javax/swing/JComponent.java
- 	(fireVetoableChange): Implement.
- 	(paintImmediately): Use root component.
- 	* javax/swing/JDesktopPane.java: Implement
- 	* javax/swing/JInternalFrame.java: Implement
- 	* javax/swing/JLabel.java
- 	(getDisabledIcon): Return grayscaled icon if
- 	no disabled icon specified.
- 	* javax/swing/JMenuBar.java
- 	(getComponentAtIndex): Use getComponent
- 	* javax/swing/JOptionPane.java
- 	(getDesktopPaneForComponent): Use SwingUtilities'
- 	getAncestorOfClass
- 	(getFrameForComponent): ditto.
- 	* javax/swing/JSplitPane.java
- 	(remove): Use getComponent.
- 	* javax/swing/SwingUtilities.java
- 	(convertPoint): Implement.
- 	* javax/swing/plaf/basic/BasicButtonUI.java
- 	(paintButtonNormal): Check opaqueness before
- 	filling background.
- 	* javax/swing/plaf/basic/BasicDesktopIconUI.java:
- 	Implement
- 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java:
- 	Implement.
- 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java:
- 	Implement.
- 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
- 	Implement.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Change InternalFrame and Desktop colors.
- 
- 2004-06-09  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Container.java
- 	(remove): Do not set component to invisible.
- 
- 2004-06-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/tree/DefaultMutableTreeNode.java
- 	(getLeafCount): Renamed enum to e.
- 
- 2004-06-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java
- 	(positionForMouseEvent): Removed redundant semicolon.
- 	(continueDrag): Use method arguments.
- 
- 2004-06-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/border/TitledBorder.java,
- 	javax/swing/filechooser/FileSystemView.java,
- 	javax/swing/plaf/basic/BasicButtonListener.java,
- 	javax/swing/plaf/basic/BasicGraphicsUtils.java,
- 	javax/swing/plaf/basic/BasicLabelUI.java,
- 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
- 	javax/swing/plaf/basic/BasicScrollBarUI.java,
- 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
- 	javax/swing/plaf/basic/BasicSliderUI.java,
- 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
- 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
- 	javax/swing/table/JTableHeader.java,
- 	javax/swing/text/AbstractDocument.java,
- 	javax/swing/text/DefaultCaret.java,
- 	javax/swing/text/StyledEditorKit.java,
- 	javax/swing/tree/DefaultTreeCellEditor.java:
- 	Reworked import statements.
- 
- 2004-06-08  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/Box.java: Temporarily comment out code
- 	broken due to visibility bug.
- 
- 2004-06-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/ImageIcon.java
- 	(ImageIcon): Added missing constructor.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JToggleButton.java
- 	(JToggleButton): New constructor.
- 	(getAccessibleContext): Moved documentation into javadoc.
- 	(getUIClassID): Likewise.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractButton.java
- 	(getDisabledIcon): Create disabled icon if none exists yet.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java
- 	(initClassDefaults): Added FormattedTextFieldUI.
- 	(loadResourceBundle): Renamed enum to e.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicButtonUI.java
- 	(paintIcon): Simplified.
- 	(paintText): Paint disabled button correctly.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JComponent.java
- 	(createToolTip): Use official JToolTip API.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JToolTip.java
- 	(JToolTip): No arguments in API.
- 	(setTipText): New method.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/SwingUtilities.java
- 	(isLeftMouseButton): New method.
- 	(isMiddleMouseButton): New method.
- 	(isRightMouseButton): New method.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractButton.java,
- 	javax/swing/CellRendererPane.java,
- 	javax/swing/JCheckBoxMenuItem.java,
- 	javax/swing/JColorChooser.java,
- 	javax/swing/JComboBox.java,
- 	javax/swing/JComponent.java,
- 	javax/swing/JDesktopPane.java,
- 	javax/swing/JFileChooser.java,
- 	javax/swing/JMenu.java,
- 	javax/swing/JMenuItem.java,
- 	javax/swing/JOptionPane.java,
- 	javax/swing/JPasswordField.java,
- 	javax/swing/JPopupMenu.java,
- 	javax/swing/JProgressBar.java,
- 	javax/swing/JRadioButtonMenuItem.java,
- 	javax/swing/JScrollBar.java,
- 	javax/swing/JSeparator.java,
- 	javax/swing/JSlider.java,
- 	javax/swing/JSplitPane.java,
- 	javax/swing/JTabbedPane.java,
- 	javax/swing/JTextField.java,
- 	javax/swing/JToolBar.java,
- 	javax/swing/text/JTextComponent.java:
- 	Fixed all constructors of accessibility classes.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/ScrollPaneLayout.java: Renamed all memeber variables all
- 	over.
- 
- 2004-06-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/Box.java
- 	(AccessibleBoxFiller): Extends AccessibleAWTComponent.
- 	(AccessibleBoxFiller.serialVersionUID): New member variable.
- 	* javax/swing/DefaultButtonModel.java
- 	(stateMask): Made protected.
- 	(listenerList): Likewise.
- 	(changeEvent): Likewise.
- 	(group): Likewise.
- 	(mnemonic): Likewise.
- 	(actionCommand): Likewise.
- 	(getListeners): New method.
- 	(getActionListeners): New method.
- 	(getItemListeners): New method.
- 	(getChangeListeners): New method.
- 	(fireItemStateChanged): Simplified.
- 	(fireActionPerformed): Simplified.
- 	(fireStateChanged): Simplified.
- 	* javax/swing/JFrame.java
- 	(JFrame): Implements WindowContants.
- 	(HIDE_ON_CLOSE): Removed.
- 	(EXIT_ON_CLOSE): Removed.
- 	(DISPOSE_ON_CLOSE): Removed.
- 	(DO_NOTHING_ON_CLOSE): Removed.
- 	(processWindowEvent): Exit with code 0.
- 	(setDefaultCloseOperation): Do security check before setting value.
- 	* javax/swing/JOptionPane.java
- 	(message): Initialize only in constructor.
- 	* javax/swing/JToolTip.java: Removed unused imports.
- 	* javax/swing/JViewport.java
- 	(serialVersionUID): New member variable.
- 	(SIMPLE_SCROLL_MODE): Made final, fixed value.
- 	(BLIT_SCROLL_MODE): Likewise.
- 	(BACKINGSTORE_SCROLL_MODE): Likewise.
- 	(scrollUnderway): Made protected.
- 	(isViewSizeSet): Likewise.
- 	* javax/swing/ListModel.java: Fixed javadoc.
- 	* javax/swing/Popup.java: Likewise.
- 	* javax/swing/RepaintManager.java
- 	(paintDirtyRegions): Don't use internal classes of
- 	java.util.AbstractMap.
- 	* javax/swing/ScrollPaneConstants.java: Reindented.
- 	* javax/swing/ScrollPaneLayout.java
- 	(viewport): Made protected.
- 	(verticalScrollBar): Made protected, renamed to vsb.
- 	(horizontalScrollBar): Made protected, renamed to hsb.
- 	(rowHeader): Made protected, renamed to rowHead.
- 	(columnHeader): Made protected, renamed to colHead.
- 	(lowerLeft): Made protected.
- 	(lowerRight): Made protected.
- 	(upperLeft): Made protected.
- 	(upperRight): Made protected.
- 	(verticalScrollBarPolicy): Made protected, renamed to vsbPolicy.
- 	(horizontalScrollBarPolicy): Made protected, renamed to hsbPolicy.
- 
- 2004-06-07  Bernd Schmidt  <bernds@btinternet.com>
- 
- 	* java/awt/MediaTracker.java (imageUpdate): Only set status to
- 	LOADING if flags has SOMEBITS set.
- 
- 2004-06-07  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractButton.java: Reorganized imports.
- 	* javax/swing/ActionMap.java: Likewise.
- 	* javax/swing/DefaultButtonModel.java: Likewise.
- 	* javax/swing/DefaultListModel.java: Likewise.
- 	* javax/swing/ImageIcon.java: Likewise.
- 	(serialVersionUID): New member variable.
- 	* javax/swing/JComboBox.java: Reorganized imports.
- 	* javax/swing/JComponent.java: Likewise.
- 	(ui): Made protected.
- 	(listenerList): Made protected.
- 	(TOOL_TIP_TEXT_KEY): New constant.
- 	(scrollRectToVisible): Removed redundant null check.
- 	* javax/swing/JFrame.java: Reorganized imports.
- 	* javax/swing/JInternalFrame.java: Reorganized imports.
- 	* javax/swing/JProgressBar.java: Likewise.
- 	* javax/swing/JRootPane.java: Likewise.
- 	* javax/swing/JScrollBar.java: Likewise.
- 	* javax/swing/JSeparator.java: Likewise.
- 	* javax/swing/JSlider.java: Likewise.
- 	* javax/swing/JTabbedPane.java: Likewise.
- 	* javax/swing/JTextField.java: Likewise.
- 	* javax/swing/JToolBar.java: Likewise.
- 	* javax/swing/JTree.java: Likewise.
- 	* javax/swing/JViewport.java: Likewise.
- 	* javax/swing/JWindow.java: Likewise.
- 	* javax/swing/KeyStroke.java: Likewise.
- 	* javax/swing/LookAndFeel.java: Likewise.
- 	* javax/swing/MenuSelectionManager.java: Likewise.
- 	* javax/swing/SwingUtilities.java: Likewise.
- 	* javax/swing/Timer.java: Likewise.
- 	* javax/swing/DefaultBoundedRangeModel.java: Fixed javadoc.
- 	* javax/swing/JList.java
- 	(HORIZONTAL_WRAP): Made final, fixed value.
- 	(VERTICAL): Likewise.
- 	(VERTICAL_WRAP): Likewise.
- 
- 2004-06-07  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractButton.java
- 	(serialVersionUID): New member variable.
- 	(AccessibleAbstractButton.serialVersionUID): Likewise.
- 	(AbstractButton): Made public.
- 	* javax/swing/Box.java
- 	(AccessibleBox.serialVersionUID): New member variable.
- 	(Filler.serialVersionUID): Likewise.
- 	* javax/swing/DefaultListSelectionModel.java
- 	(serialVersionUID): Likewise.
- 	* javax/swing/JApplet.java
- 	(serialVersionUID): Likewise.
- 	* javax/swing/JCheckBox.java
- 	(serialVersionUID): Likewise.
- 	* javax/swing/JCheckBoxMenuItem.java
- 	(serialVersionUID): Likewise.
- 	(AccessibleJCheckBoxMenuItem.serialVersionUID): Likewise.
- 	* javax/swing/JColorChooser.java
- 	(serialVersionUID): Likewise.
- 	(AccessibleJColorChooser.serialVersionUID): Likewise.
- 	* javax/swing/JComponent.java
- 	(serialVersionUID): Made private.
- 	(AccessibleJComponent.serialVersionUID): New member variable.
- 	* javax/swing/JDesktopPane.java
- 	(serialVersionUID): Likewise.
- 	* javax/swing/JDialog.java
- 	(serialVersionUID): Likewise.
- 	* javax/swing/JFormattedTextField.java
- 	(serialVersionUID): Fixed value.
- 	* javax/swing/JFrame.java
- 	(serialVersionUID): New member variable.
- 	(getDefaultCloseOpertation): Made public.
- 	* javax/swing/JLayeredPane.java
- 	(serialVersionUID): Likewise.
- 	(LAYER_PROPERTY): Made final, fixed value.
- 	(JLayeredPane): Made public.
- 	* javax/swing/JMenu.java
- 	(AccessibleJMenu.serialVersionUID): New member variable.
- 	(WinListener.serialVersionUID): Likewise.
- 	* javax/swing/JMenuBar.java
- 	(serialVersionUID): Likewise.
- 	(getComponentAtIndex): Added @deprecated tag.
- 	* javax/swing/JMenuItem.java
- 	(serialVersionUID): New member variable.
- 	(AccessibleJMenuItem.serialVersionUID): Likewise.
- 	* javax/swing/JOptionPane.java
- 	(serialVersionUID): Likewise.
- 	(AccessibleJOptionPane.serialVersionUID): Likewise.
- 	* javax/swing/JPopupMenu.java
- 	(serialVersionUID): Likewise.
- 	(AccessibleJPopupMenu.serialVersionUID): Likewise.
- 	(getPopupMenuListeners): New method.
- 	(getComponentAtIndex): Added @deprecated tag.
- 	* javax/swing/JProgressBar.java
- 	(serialVersionUID): New member variable.
- 	(AccessibleJProgressBar.serialVersionUID): Likewise.
- 	* javax/swing/JRadioButton.java
- 	(serialVersionUID): Likewise.
- 	* javax/swing/JRadioButtonMenuItem.java
- 	(serialVersionUID): Likewise.
- 	(AccessibleJRadioButtonMenuItem.serialVersionUID): Likewise.
- 	* javax/swing/JScrollBar.java
- 	(serialVersionUID): Likewise.
- 	(AccessibleJScrollBar.serialVersionUID): Likewise.
- 	* javax/swing/JSeparator.java
- 	(serialVersionUID): Likewise.
- 	(AccessibleJSeparator.serialVersionUID): Likewise.
- 	* javax/swing/JSlider.java: Fixed javadocs.
- 	(AccessibleJSlider.serialVersionUID): New member variable.
- 	* javax/swing/JSplitPane.java: Added copyright statement.
- 	(serialVersionUID): New member variable.
- 	(AccessibleJSplitPane.serialVersionUID): Likewise.
- 	* javax/swing/JTabbedPane.java
- 	(serialVersionUID): Likewise.
- 	(AccessibleJTabbedPane.serialVersionUID): Likewise.
- 	(ModelListener.serialVersionUID): Likewise.
- 	(ModelListener.ModelListener): New constructor.
- 	(SCROLL_TAB_LAYOUT): Made public final, fixed value.
- 	(WRAP_TAB_LAYOUT): Likewise.
- 	* javax/swing/JTable.java
- 	(serialVersionUID): New member variable.
- 	* javax/swing/JToggleButton.java
- 	(serialVersionUID): Likewise.
- 	(ToggleButtonModel): Made static.
- 	(ToggleButtonModel.serialVersionUID): New member variable.
- 	* javax/swing/JToolTip.java
- 	(serialVersionUID): Likewise.
- 	* javax/swing/JTree.java
- 	(serialVersionUID): Likewise.
- 	* javax/swing/JWindow.java
- 	(serialVersionUID): Likewise.
- 	* javax/swing/Timer.java
- 	(serialVersionUID): Likewise.
- 
- 2004-06-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/SwingConstants.java
- 	(NEXT): New constant.
- 	(PREVIOUS): Likewise.
- 	* javax/swing/UIManager.java
- 	(LookAndFeel): Made public.
- 	(LookAndFeel.getClassName): Likewise.
- 	(LookAndFeel.getName): Likewise.
- 
- 2004-06-02  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JCheckBoxMenuItem.java:
- 	Removed CVS tags.
- 	* javax/swing/JMenu.java: Likewise.
- 	* javax/swing/JMenuBar.java: Likewise.
- 	* javax/swing/JMenuItem.java: Likewise.
- 	* javax/swing/JPopupMenu.java: Likewise.
- 	* javax/swing/JRadioButtonMenuItem.java: Likewise.
- 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java:Likewise.
- 	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicMenuUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicPopupMenuUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Likewise.
- 
- 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicMenuUI.java:
- 	(MouseEntered): Do not call getPath() from MenuSelectionManager.
- 	Call getPath() from super class instead.
- 
- 2004-05-31  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Container.java
- 	(remove): Set component visibility to false after removing it.
- 
- 2004-05-27  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/Component.java (getForeground): Return SystemColor if
- 	parent is null.
- 	(getBackground): Likewise.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
- 	(item_highlighted): New function.
- 	(connectSignals): Set item_highlighted as list's select
- 	function.
- 
- 	* java/applet/Applet.java: Revert changes from 2004-04-29,
- 	2004-03-15 and 2004-03-14.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
- 	Divide baseline y coordinate by PANGO_SCALE, not DPI conversion
- 	factor.
- 
- 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (create): Set
- 	"Dialog" as the default font.
- 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (create):
- 	Likewise.
- 	* java/awt/Component.java (getFont): Return "Dialog" font by
- 	default.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c:
- 	Multiply size argument to pango_font_description_set_size by the
- 	DPI conversion factor rather than by PANGO_SCALE.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
- 	Divide baseline y coordinate by DPI conversion factor rather
- 	than by PANGO_SCALE.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
- 	(area_prepared): Fix typo.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
- 	(gtkSetFont): Move gtk_bin_get_child inside GDK critical region.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
- 	(dpi_conversion_factor): New global variable.
- 	(init_dpi_conversion_factor): New function to calculate and
- 	track DPI conversion factor.
- 	(dpi_changed_cb): New callback.
- 	* jni/gtk-peer/gtkpeer.h (dpi_conversion_factor): Declare.
- 
- 2004-05-27  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(getGraphics): Return a new GdkGraphics instance.
- 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
- 	(getGraphics): Call super.getGraphics().
- 
- 2004-05-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(setNativeBounds): Clamp width and height values to >= 0.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(find_fg_color_widget): Handle GtkOptionMenu specially.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(pre_event_handler): Only post configure events to visible
- 	top-level windows.
- 
- 2004-05-26  David Jee  <djee@redhat.com>
- 
- 	* java/awt/BorderLayout.java
- 	(layoutContainer): Fix size calculations.
- 
- 2004-05-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(window_wm_protocols_filter): Remove function.
- 	(create): Remove filter that removes WM_TAKE_FOCUS client
- 	messages.
- 
- 2004-06-17  Anthony Green  <green@redhat.com>
- 
- 	* java/util/zip/ZipFile.java (getInputStream): Return null if
- 	entry not found.
- 
- 	* gnu/gcj/runtime/VMClassLoader.java (init): Add extension
- 	directory contents to the class path.
- 
- 2004-06-15  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/natSystem.cc (getenv0): Don't assume environment
- 	variable is Latin 1 coded.
- 
- 2004-06-14  Andreas Jaeger  <aj@suse.de>
- 
- 	* configure.in: Support --enable-version-specific-runtime-libs.
- 	* configure: Regenerated.
- 
- 2004-06-14  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/util/Calendar.java: Change ResourceBundle.getBundle() calls
- 	to pass ClassLoader argument.
- 	* java/util/GregorianCalendar.java: Likewise.
- 	* java/util/Currency.java: Likewise.
- 	* java/text/BreakIterator.java: Likewise.
- 	* java/text/Collator.java: Likewise.
- 	* java/text/DateFormat.java: Likewise.
- 	* java/text/DateFormatSymbols.java: Likewise.
- 	* java/text/DecimalFormatSymbols.java: Likewise.
- 	* java/text/NumberFormat.java: Likewise.
- 	* java/awt/Window.java: Likewise.
- 
- 2004-06-14  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/System.java: (getenv0): New method.
- 	(getenv): Add security check.  Do the right thing.
- 	* java/lang/natSystem.cc (getenv0): New method.
- 
- 2004-06-12  Mark Wielaard  <mark@klomp.org>
- 
- 	* javax/swing/RepaintManager.java
- 	(paintDirtyRegions): Use entrySet(), not values().
- 
- 2004-06-10  Mark Wielaard  <mark@klomp.org>
- 
- 	* jni.cc (_Jv_JNI_GetAnyMethodID): Add name and signature to
- 	NoSuchMethodError.
- 
- 2004-06-11  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/util/GregorianCalendar.java (computeTime):  Skip buggy formulae
- 	when we already know the answer.
- 	* java/util/SimpleTimeZone.java (serialVersionOnStream): Bump to 2.
- 	(setStartRule,setEndRule): Don't take abs of day number.
- 	(getOffset): Clarify docs.  Add argument checks.
- 	(isBefore): Take abs of day number in DOW_LE_DOM_MODE.
- 	(equals,hasSameRules,toString,readObject): Use startTimeMode and
- 	endTimeMode.
- 
- 2004-06-10  Tom Tromey  <tromey@redhat.com>
- 
- 	* interpret.cc (run): Handle wide fload.
- 
- 2004-06-06  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/util/zip/ZipEntry.java (setTime): Remove scaling.
- 
- 2004-06-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/SwingConstants.java
- 	(NEXT): New constant.
- 	(PREVIOUS): Likewise.
- 
- 2004-06-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/UIManager.java
- 	(LookAndFeel): Made public.
- 	(LookAndFeel.getName): Likewise.
- 	(LookAndFeel.getClassName): Likewise.
- 
- 2004-06-03  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(requestFocus): Revert last changes.
- 	(gtkRequestFocus): Removed.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkRequestFocus):
- 	Renamed to ...
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRequestFocus):
- 	Reverted last patch.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_setupAccelGroup):
- 	Reverted comment change.
- 
- 2004-06-02  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JCheckBoxMenuItem.java:
- 	Removed CVS tags.
- 	* javax/swing/JMenu.java: Likewise.
- 	* javax/swing/JMenuBar.java: Likewise.
- 	* javax/swing/JMenuItem.java: Likewise.
- 	* javax/swing/JPopupMenu.java: Likewise.
- 	* javax/swing/JRadioButtonMenuItem.java: Likewise.
- 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java:Likewise.
- 	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicMenuUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicPopupMenuUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Likewise.
- 
- 2004-06-01  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/io/ObjectStreamField.java: Cleaned up imports.
- 
- 2004-06-01  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/ObjectStreamField.java: Style and javadoc cleanup.
- 
- 2004-06-01  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/io/Writer.java (Writer(Object)): Fixed API doc.
- 
- 2004-06-01  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/security/Security.java
- 	(insertProviderAt): Use equals() instead of ==.
- 	(removeProvicer): Likewise.
- 	(getProvider): Likewise.
- 	* java/security/Signature.java
- 	(sign): Don't set state to UNINITIALIZED.
- 	(verify): Likewise.
- 
- 2004-06-01  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (requestFocus):
- 	Implement by calling gtkRequestFocus.
- 	(gtkRequestFocus): New native method.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_requestFocus__):
- 	Renamed to ...
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkRequestFocus):
- 	New function name.
- 	(filter_expose_event_handler):
- 	Mark static.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
- 	(menu_pos): Mark static.
- 
- 2004-06-01  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/text/CollationElementIterator.java,
- 	java/text/CollationKey.java,
- 	java/text/RuleBasedCollator.java: New versions from GNU classpath.
- 	* testsuite/libjava.mauve/xfails: Removed all
- 	java.text.CollationElementIterator tests.
- 
- 2004-06-01  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/zip/InflaterInputStream.java: Merged more with Classpath
- 	version.
- 	* java/util/zip/ZipOutputStream.java (): Renamed enum to e to removed
- 	Java 1.5 keyword usage.
- 
- 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicMenuUI.java:
- 	(MouseEntered): Do not call getPath() from MenuSelectionManager.
- 	Call getPath() from super class instead.
- 
- 2004-05-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/SequenceInputStream.java:
- 	Rename enum to e because enum is a keyword in Java 1.5.
- 
- 2004-05-31  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/rmi/rmic/CompilerProcess.java:
- 	Fixed javadoc to by XHTML compliant.
- 
- 2004-05-30  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/awt/Toolkit.java (loadSystemColors): Implement.
- 
- 2004-05-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/System.java: Reordered imports.
- 
- 2004-05-30  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/text/DecimalFormat.java
- 	(parse): Fixed parsing of decimal strings. Number of maximum
- 	digits to be read should now work.
- 	* java/text/SimpleDateFormat.java
- 	(SimpleDateFormat): Set maximumFractionDigit to 0 for the number
- 	formatter. This fixes DateFormatTest.
- 
- 2004-05-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/Buffer.java
- 	(limit): Fixed off by one error.
- 	* java/nio/CharBuffer.java
- 	(wrap): Fixed arguments, added javadocs.
- 
- 2004-05-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/beans/BeanInfoEmbryo.java,
- 	java/awt/im/InputContext.java,
- 	javax/swing/tree/DefaultMutableTreeNode.java:
- 	Rename enum to e because enum is a keyword in Java 1.5.
- 
- 2004-05-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/math/MPN.java,
- 	java/awt/geom/Arc2D.java:
- 	Fixed javadocs all over.
- 
- 2004-05-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/DefaultKeyboardFocusManager.java
- 	(dispatchEvent): Call method to get key event dispatchers.
- 	(dispatchKeyEvent): Call method to get key event post processors.
- 	* javax/swing/JComponent.java
- 	(listenerList): Made protected.
- 	* javax/swing/JOptionPane.java
- 	(message): Don't initialize.
- 	(JOptionPane): Set message text.
- 	* javax/swing/JPopupMenu.java
- 	(show): Fixed typo in argument name.
- 	* javax/swing/RepaintManager.java
- 	(paintDirtyRegions): Use public API of java.util.Map.
- 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java
- 	(positionForMouseEvent): Removed redundant ';'.
- 	(continueDrag): Use method arguments.
- 
- 2004-05-29  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	* testsuite/libjava.jacks/jacks.xfail: Update for post tree-ssa merge
- 	results.
- 
- 2004-05-28  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gcj/cni.h (JvAllocBytes): New public CNI function. Calls
- 	_Jv_AllocBytes.
- 	* gnu/gcj/RawDataManaged.java: New file.
- 	* java/lang/Thread.java (data): Declare as RawDataManaged.
- 	* java/lang/natThread.cc (init_native): Cast natThread data to
- 	RawDataManaged, not jobject.
- 	* Makefile.am (ordinary_java_source_files): Add RawDataManaged.
- 	* Makefile.in: Rebuilt.
- 
- 2004-05-27  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/util/SimpleTimeZone.java: Reverting my last change until I
- 	can fix it properly.
- 
- 2004-05-27  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JPopupMenu.java
- 	(isVisible): Do not use visible directly.
- 	(setVisible): Likewise.
- 	* javax/swing/JWindow.java
- 	(JWindow): call accessible constructor.
- 	* javax/swing/RepaintManager.java
- 	(paintDirtyRegions): Use public methods to obtain iterator.
- 
- 2004-05-25  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Container.java
- 	(remove): Set component's parent to null only after we removed the
- 	component from its parent's layout manager.
- 
- 2004-05-25  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(GtkComponentPeer): Set bounds regardless of whether awtComponent
- 	is valid.
- 	* gnu/java/awt/peer/gtk/GtkListPeer.java
- 	(getSize): Change native method declaration.
- 	(minimumSize): Pass visible row count into getSize().
- 	(preferredSize): Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize): Use scroll window's
- 	natural size. Use visible row count to determine the final height
- 	value to return.
- 
- 2004-05-21  Graydon Hoare  <graydon@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(setClip): Minor correction to order of operations.
- 
- 	* javax/swing/JScrollPane.java: Extend sketchy implementation.
- 	* javax/swing/ScrollPaneLayout.java: Likewise.
- 	* javax/swing/JViewPort.java: Likewise.
- 	* javax/swing/ViewportLayout.java: Likewise.
- 
- 	* javax/swing/JComponent.java: Rewrite.
- 	* javax/swing/RepaintManager.java: Likewise.
- 
- 	* javax/swing/JLayeredPane.java: Change validate() to revalidate().
- 	* javax/swing/JList.java
- 	(setSelectedIndices):
- 	(getSelectedIndices):
- 	(getSelectedValues): New functions.
- 	(getPreferredScrollableViewportSize): Return preferred size.
- 	(getScrollableUnitIncrement):
- 	(getScrollableBlockIncrement): Initial implementations.
- 	* javax/swing/JRootPane.java: Clean up slightly.
- 	(getUI):
- 	(setUI):
- 	(updateUI):
- 	(getUIClassID):
- 	(isValidateRoot): Add overrides from JComponent.
- 	* javax/swing/JScrollBar.java: Set default orientation to VERTICAL.
- 	* javax/swing/UIManager.java (getDimension): Return the dimension.
- 
- 	* javax/swing/plaf/basic/BasicButtonUI.java: Set component opaque.
- 	* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicSliderUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Likewise.
- 	* javax/swing/plaf/basic/BasicRootPaneUI.java:
- 	Likewise, and set background.
- 	* javax/swing/plaf/basic/BasicListUI.java:
- 	Likewise, and improve a bit.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
- 	Likewise, and adjust calculations.
- 	* javax/swing/plaf/basic/BasicViewportUI.java:
- 	Likewise, and improve a bit.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java
- 	(Button.margin): Shrink.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
- 	Hack to set horizontal always, workaround pango.
- 
- 	* jni/gtk-peer/gtkcairopeer.h: Change to match pattern API.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
- 	Synchronize more often, check cairo status after ops,
- 	handle changes to cairo pattern API, check for disposal.
- 
- 2004-05-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	(BasicMenuItemUI): Create propertyChangeListener.
- 	(getPath):Implemented.
- 	(installListeners): Add propertyChangeListener to menuItem.
- 	(uninstallListeners): Remove propertyChangeListener from menuItem.
- 	(update): Implemented.
- 	* javax/swing/plaf/basic/BasicMenuUI.MouseInputHandler:
- 	(mouseEntered): Take insets of popup menu into account when
- 	calculating position of popup menu.
- 
- 2004-05-18  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Regenerate.
- 	* javax/swing/JMenuBar.java:
- 	Started implementation.
- 	* javax/swing/JPopupMenu.java:
- 	(setVisible): Fixed location of lightweight/mediumweight
- 	popup menu.
- 	(show): Fixed location of PopupMenu.
- 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
- 	New file. UI Delegate for JMenuBar.
- 	* javax/swing/plaf/basic/BasicMenuUI.MouseInputHandler:
- 	(mouseEntered): Corrected position of the submenu.
- 
- 2004-05-18  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Remove calls
- 	to _gtk_accel_group_attach.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
- 	Likewise.
- 
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Give gtkSetFont
- 	package access.  Don't override setFont.
- 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: Likewise.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Give
- 	gtkWidgetRequestFocus package access.
- 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java: Don't override
- 	setFont.
- 	* gnu/java/awt/peer/gtk/GtkListPeer.java: Override gtkSetFont.
- 	Give gtkWidgetRequestFocus package access.
- 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Give
- 	gtkWidgetRequestFocus package access.  Don't override setFont.
- 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Don't override
- 	setFont.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
- 	(gtkSetLabel): Move call to gtk_bin_get_child into GDK critical
- 	region.
- 	(gtkSetFont): Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
- 	Implement.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
- 	(gtkSetFont): Whitespace fix.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(gtkWidgetSetUsize): Remove method.
- 
- 2004-05-18  David Jee  <djee@redhat.com>
- 
- 	* java/awt/image/MemoryImageSource.java
- 	(newPixels(int,int,int,int,boolean)): Set only the specified
- 	rectangle of pixels.
- 	(newPixels(byte[],ColorModel,int,int)): Implement.
- 	(newPixels(int[],ColorModel,int,int)): Implement.
- 
- 2004-05-18  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Regenerate.
- 	* javax/swing/JMenu.java: Started
- 	implementation.
- 	* javax/swing/JPopupMenu.java:
- 	(insert): If specified index is -1, then
- 	add component at the end.
- 	(isPopupTrigger): Reimplemented.
- 	(JPopupMenu.LightWeightPopup): setBounds
- 	of the lightWeightPopup before adding it
- 	to the layeredPane.
- 	(javax/swing/plaf/basic/BasicIconFactory.java):
- 	(getMenuArrowIcon): Implemented.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	(getPreferredSize): Add size of the arrow icon
- 	if this menu item is instance of JMenu.
- 	(paintMenuItem): Paint arrow icon if this
- 	menu item is a submenu.
- 	* javax/swing/plaf/basic/BasicMenuUI.java:
- 	New File. UI Delegate for JMenu.
- 
- 2004-05-17  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (postKeyEvent):
- 	Post KEY_TYPED events.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(generates_key_typed_event): Remove function.
- 
- 2004-05-17  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JRootPane.java
- 	(JRootPane.RootLayout): Reimplemented to
- 	set bounds of contentPane and menuBar.
- 	(setJMenuBar): Add menu bar to the layered pane.
- 	(createLayeredPane): Set layout of layeredPane
- 	to null.
- 	* javax/swing/JLayeredPane.java:
- 	(addImpl): Calculate index of the component in the
- 	layeredPane according to the specified position within
- 	the layer.
- 
- 2004-05-17  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
- 	(setPixels): Change color model to the default model after
- 	converting pixels.
- 	* java/awt/image/MemoryImageSource.java
- 	(newPixels): Set only the specified rectangle of pixels.
- 
- 2004-05-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* libgcj.spec.in (lib): Add -l-java-awt -l-java-applet
- 	-l-java-beans -l-javax-accessibility -l-javax-swing.
- 
- 	* java/awt/AWTEvent.java (toString): Print source's name rather
- 	than the source itself.
- 
- 2004-05-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java (loadSystemColors): Make
- 	native.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
- 	(gdk_color_to_java_color): New function.
- 	* jni/gtk-peer/gtkpeer.h: Add SystemColor defines.
- 
- 2004-05-12  David Jee  <djee@redhat.com>
- 
- 	* java/awt/image/RGBImageFilter.java:
- 	Initialize origmodel as null.
- 	(makeColor): Fix pixel component order.
- 	(filterRGBPixels): Fix pixel iteration.
- 	(setPixels): Add extra checks for index color model. Convert pixels
- 	to default color model if necessary.
- 	(convertColorModelToDefault): New override method for byte pixels.
- 	(convertColorModelToDefault): For int pixels, fix pixel iteration.
- 	(makeColorbyDefaultCM): New override method for byte pixels.
- 	(makeColorbyDefaultCM): For int pixel, add color model as argument.
- 	(makeColor): Fix pixel component order.
- 
- 2004-05-11  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/Box.java:
- 	Comment out more parts of Box.Filler.
- 
- 2004-05-11  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/Box.java:
- 	Remove reference to AccessibleAWTComponent so
- 	it compiles again.
- 
- 2004-05-10  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Update
- 	implementation of list peer to use GtkTreeView instead of
- 	deprecated GtkCList.
- 
- 2004-05-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(gtkWidgetDispatchKeyEvent): Remove keyChar parameter.
- 	(handleEvent): Remove keyChar argument to
- 	gtkWidgetDispatchKeyEvent calls.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Fix
- 	compiler warnings.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
- 	Likewise.
- 
- 2004-05-06  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(gtkWidgetRequestFocus): Mark protected.
- 	(GtkComponentPeer): Only set the peer's bounds if its component
- 	is valid.
- 	* java/awt/Component.java (static): Set the default keyboard
- 	focus manager.
- 	(requestFocus(), requestFocus(boolean), requestFocusInWindow(),
- 	requestFocusInWindow(temporary)): Don't request focus if the
- 	component is not showing.  Get tree lock before traversing
- 	component hierarchy.
- 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
- 	Only set the global focus owner if it is not a Window.
- 	(processKeyEvent): Consume keystrokes associated with the focus
- 	traversal keystroke.
- 	(focusPreviousComponent, focusNextComponent, upFocusCycle,
- 	downFocusCycle): Call requestFocusInWindow instead of
- 	requestFocus.
- 	* java/awt/EventDispatchThread.java (run): Move setting of
- 	default keyboard focus manager to Component.java.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(awt_keycode_to_keysym): New function.
- 	(gtkWidgetDispatchKeyEvent): Finish implementation.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(pre_event_handler): Add FIXME comment.
- 
- 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
- 	(gtkWidgetRequestFocus): New method.
- 	* java/awt/TextArea.java (TextArea): Set focus traversal keys to
- 	disable Tab and Shift-Tab keystrokes.
- 	(addNotify, appendText, insertText, replaceText): Simplify peer
- 	retrieval code.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
- 	(connectSignals): Remove connections to "commit" signals.
- 	Remove C++-style comments.
- 
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
- 	(handleEvent): Activate GTK button when the space bar key is
- 	pressed.
- 	(gtkActivate): New method.
- 
- 2004-05-06  David Jee  <djee@redhat.com>
- 
- 	* java/awt/image/CropImageFilter.java
- 	(setPixels): Implement for byte array pixels.
- 	* java/awt/image/ReplicateScaleFilter.java
- 	(setPixels): Implement for byte array pixels.
- 	(replicatePixels): Overload for byte array pixels.
- 
- 2004-05-06  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/Box.java:
- 	(getAccessibleContext): Return an instance of the
- 	correct class.
- 
- 2004-05-05  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java
- 	(drawImage): When component is null, use SystemColor.window as
- 	the default bgcolor.
- 	* gnu/java/awt/peer/gtk/GtkImage.java
- 	(setPixels): We can avoid iterating through the pixel rows only
- 	when height is 1.
- 	* java/awt/Image.java
- 	(getScaledInstance): Partially implement.
- 	* java/awt/image/CropImageFilter.java
- 	(setProperties): Fix "filter" property.
- 	(setPixels): Implement.
- 	* java/awt/image/ReplicateScaleFilter.java
- 	(setDimensions): Use scaled dimensions.
- 	(setPixels): Implement.
- 	(replicatePixels): New method.
- 
- 2004-05-05  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
- 	(convertPixels): If either pixels or model is null, return null.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
- 	(Java_gnu_java_awt_peer_gtk_GtkImagePainter_drawPixels): If jpixels
- 	is null, do nothing and return.
- 
- 2004-05-03  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java:
- 	(getGraphics): Like GtkFramePeer, the Graphics
- 	object needs to be translate to account for
- 	window decorations.
- 	(postMouseEvent): New method. Account for
- 	translation.
- 	(postExposeEvent): ditto.
- 	* javax/swing/Box.java: Stubbed.
- 	* javax/swing/JDialog.java: Ran through jalopy
- 	to fix indentation.
- 	(JDialog): Call SwingUtilities' getOwnerFrame
- 	for null owners.
- 	(setLayout): Check isRootPaneCheckingEnabled
- 	* javax/swing/JOptionPane.java: Re-implemented.
- 	* javax/swing/SwingUtilities.java:
- 	(getOwnerFrame): Static method to grab a default
- 	owner frame for Dialogs that don't specify owners.
- 	* javax/swing/event/SwingPropertyChangeSupport.java:
- 	(firePropertyChange): Fix early exit condition.
- 	* javax/swing/plaf/basic/BasicLabelUI.java:
- 	(paint): Avoid painting text if it is null
- 	or empty.
- 	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
- 	Implement.
- 
- 2004-05-03  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Regenerate.
- 	* javax/swing/JPopupMenu.java:
- 	Started implementation.
- 	* javax/swing/JWindow.java
- 	(JWindow): call super() if parent for window
- 	is not specified.
- 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
- 	New File. UI Delegate for JPopupMenu.
- 
- 2004-04-30  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JApplet.java: Indicated that JApplet
- 	implements RootPaneContainer and made method of this
- 	interface public.
- 	* javax/swing/JFrame.java: Ditto.
- 	* javax/swing/JWindow.java: Ditto.
- 
- 2004-04-29  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(nativeSetBounds): Call gdk_window_move in addition to
- 	gtk_window_move.
- 
- 	* java/applet/Applet.java (preferredSize): Call parent's
- 	preferredSize if the applet stub is null.
- 	(minimumSize): Likewise for parent's minimumSize.
- 
- 2004-04-27  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JMenuItem.java
- 	(createActionPropertyChangeListener): Implemented.
- 	(processMouseEvent): Ditto.
- 	(fireMenuDragMouseEntered): Ditto.
- 	(fireMenuDragMouseExited): Ditto.
- 	(fireMenuDragMouseDragged): Ditto.
- 	(fireMenuDragMouseReleased): Ditto.
- 	(menuSelectionChanged): Ditto.
- 	(getSubElements): Ditto.
- 	(getComponent): Ditto.
- 	(addMenuDragMouseListener): Ditto.
- 	(removeMenuDragMouseListener):Ditto.
- 	(addMenuKeyListener): Ditto.
- 	(removeMenuKeyListener): Ditto.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java
- 	(doClick): Imlemented.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.MouseInputHandler:
- 	Don't handle mouse events here. Pass them to
- 	MenuSelectionManager.
- 
- 2004-04-26  Olga Rodimina  <rodimina@redhat.com>
- 	Used correct version of jalopy configuration
- 	file to fix style in the files below.
- 
- 2004-04-26  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/JCheckBoxMenuItem.java:
- 	Fixed style and removed unnecessary comments.
- 	* javax/swing/JMenuItem.java: Ditto.
- 	* javax/swing/JRadioButtonMenuItem.java: Ditto.
- 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java: Ditto.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Ditto.
- 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Ditto.
- 
- 2004-04-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu_java_awt_peer_gtk_GtkWindowPeer.c: Change FIXME comment to
- 	C-style.
- 
- 	* gnu_java_awt_peer_gtk_GtkWindowPeer.c: Add FIXME comment.
- 
- 	* java/awt/ContainerOrderFocusTraversalPolicy.java
- 	(getComponentAfter): Start from current component and work up
- 	the component hierarchy until an acceptable component is found.
- 	Synchronize on tree lock.
- 	(getComponentBefore): Likewise.
- 
- 2004-04-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Remove
- 	focus-related debugging messages.
- 	* java/awt/DefaultKeyboardFocusManager.java: Likewise.
- 	* java/awt/EventDispatchThread.java: Likewise.
- 	* java/awt/KeyboardFocusManager.java: Likewise.
- 	* java/awt/Window.java: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Change
- 	new C++-style comments to C-style comments.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(handleEvent): Dispatch key press and key release events to
- 	backing widget.
- 	(requestFocus): Post a FOCUS_GAINED event to the event queue.
- 	(gtkWidgetRequestFocus): New method.
- 	(gtkWidgetDispatchKeyEvent): Likewise.
- 	* java/awt/Component.java (requestFocus, requestFocus(boolean),
- 	requestFocusInWindow, requestFocusInWindow(boolean),
- 	getFocusCycleRootAncestor, nextFocus, transferFocus,
- 	transferFocusBackward, transferFocusUpCycle, hasFocus,
- 	isFocusOwner): Implement and document focus-handling methods.
- 	(setFocusTraversalKeys): Inherit focus traversal keys when
- 	keystrokes argument is null.  Fix focus-handling documentation
- 	throughout class.
- 	* java/awt/Container.java (setFocusTraversalKeys,
- 	getFocusTraversalKeys, areFocusTraversalKeysSet,
- 	isFocusCycleRoot, setFocusTraversalPolicy,
- 	getFocusTraversalPolicy, isFocusTraversalPolicySet,
- 	setFocusCycleRoot, isFocusCycleRoot, transferFocusDownCycle):
- 	Implement and document focus-handling methods.
- 	(transferFocusBackward): Remove method.
- 	(readObject, writeObject): Implement and document serialization
- 	methods.
- 	* java/awt/ContainerOrderFocusTraversalPolicy.java: Implement
- 	and document.
- 	* java/awt/DefaultFocusTraversalPolicy.java: Implement and
- 	document.
- 	* java/awt/DefaultKeyboardFocusManager.java: Implement and
- 	partially document.
- 	* java/awt/EventDispatchThread.java (run): Set default keyboard
- 	focus manager.  Attempt to dispatch each event to the keyboard
- 	focus manager before normal dispatch.
- 	* java/awt/KeyboardFocusManager.java: Implement and partially
- 	document.
- 	* java/awt/Window.java (Window): Set focusCycleRoot to true.
- 	(show): Focus initial component when window is shown for the
- 	first time.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(pre_event_handler): Replace complex key press and key release
- 	logic with simple callbacks into GtkComponentPeer.
- 	* jni/gtk-peer/gtkpeer.h: Fix FOCUS_GAINED/FOCUS_LOST reversal.
- 
- 2004-04-21  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/MenuSelectionManager.java
- 	(componentForPoint): Added new method.
- 	(defaultManager): New Method. Implemented.
- 	(getSelectedPath): Ditto.
- 	(isComponentPartOfCurrentMenu): Ditto.
- 	(processKeyEvent): Added new method.
- 	(processMouseEvent): New Method. Implemented.
- 	(setSelectedPath): Ditto.
- 	(getPath): Ditto.
- 
- 2004-04-19  Kim Ho  <kho@redhat.com>
- 
- 	* java/awt/Container.java:
- 	(remove): Set the component's parent to null.
- 	(getComponentAt): Implement.
- 	* javax/swing/JComponent.java:
- 	(JComponent): Initialize defaultLocale
- 	(getDefaultLocale): Implement.
- 	(setDefaultLocale): ditto.
- 	* javax/swing/JSlider.java:
- 	(JSlider): Fix calculation of value.
- 	* javax/swing/JSplitPane.java: Implement.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Change SplitPane's default divider size.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
- 	(paint): Remove unused code.
- 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
- 	Added comments and ran through jalopy.
- 	(setBasicSplitPaneUI): Get reference to hidden divider
- 	and set up one touch buttons if necessary.
- 	(setBorder): Fire propertyChangeEvent only if
- 	borders are different.
- 	(getPreferredSize): Defer to layout manager.
- 	(propertyChange): Implement.
- 	(oneTouchExpandableChanged): ditto.
- 	(createLeftOneTouchButton): Use BasicArrowButton.
- 	(createRightOneTouchButton): ditto.
- 	(moveDividerTo): New method. Moves the divider
- 	to a set location based on the last divider location.
- 	(BasicSplitPaneDivider::MouseHandler): Implement.
- 	(BasicSplitPaneDivider::OneTouchButton): Removed.
- 	(BasicSplitPaneDivider::DragController): Implement.
- 	(BasicSplitPaneDivider::VerticalDragController):
- 	ditto.
- 	(BasicSplitPaneDivider::DividerLayout): ditto.
- 	* javax/swing/plaf/basic/BasicSplitPaneUI.java: Reimplement.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
- 	(calculateLayoutInfo): Don't show component if it's
- 	null.
- 	(paintTab): Fix title paint logic.
- 
- 2004-05-26  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	PR libgcj/8321
- 	* java/util/SimpleTimeZone.java (serialVersionOnStream): Bump to 2.
- 	(setStartRule,setEndRule): Don't take abs of day number.
- 	(getOffset): Clarify docs.  Add argument checks.
- 	(isBefore): Take abs of day number in DOW_LE_DOM_MODE.
- 	(equals,hasSameRules,toString,readObject): Use startTimeMode and
- 	endTimeMode.
- 	* testsuite/libjava.mauve/xfails
- 	(gnu.testlet.java.util.SimpleTimeZone.check12): XFAIL test 22.
- 
- 2004-05-21  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	Layout interfaces during preparation, not initialization.
- 	* java/lang/natClass.cc (initializeClass): Move
- 	_Jv_LayoutInterfaceMethods call...
- 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): to here.
- 
- 2004-05-19  Anthony Green  <green@localhost.localdomain>
- 
- 	* Makefile.am (awt_java_source_files): Remove javax.rmi and
- 	gnu.javax.rmi code.
- 	* Makefile.in: Rebuilt.
- 	* javax/rmi/ClassDesc.java, javax/rmi/StubDelegate.java,
- 	javax/rmi/UtilDelegate.java, javax/rmi/Stub.java,
- 	javax/rmi/Util.java, javax/rmi/ObjectImpl.java,
- 	javax/rmi/SystemException.java, javax/rmi/ValueHandler.java,
- 	javax/rmi/PortableRemoteObjectDelegate.java, javax/rmi/Tie.java,
- 	gnu/javax/rmi/CORBA/DelegateFactory.java,
- 	gnu/javax/rmi/CORBA/GetDelegateInstanceException.java,
- 	gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java,
- 	gnu/javax/rmi/CORBA/StubDelegateImpl.java,
- 	gnu/javax/rmi/CORBA/UtilDelegateImpl.java,
- 	gnu/javax/rmi/CORBA/ValueHandlerImpl.java,
- 	gnu/javax/rmi/PortableServer.java: Remove files.
- 
- 2004-05-19  Anthony Green  <green@redhat.com>
- 
- 	* Makefile.am: Define JAVA_EXT_DIRS.
- 	* Makefile.in: Rebuilt.
- 	* java/lang/natRuntime.cc (insertSystemProperties): Set
- 	java.ext.dirs property.
- 
- 2004-05-16  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/io/Writer.java (Writer(Object)): Check for null lock object.
- 
- 2004-05-15  Mark Wielaard  <mark@klomp.org>
- 
- 	* doc/cni.sgml: Removed, merged into gcj.texi.
- 
- 2004-05-15  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.am (ordinary_java_source_files): Add new javax.print
- 	classes.
- 	* Makefile.in: Regenerated.
- 
- 2004-05-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/attribute/standard/DateTimeAtCompleted.java,
- 	javax/print/attribute/standard/DateTimeAtCreation.java,
- 	javax/print/attribute/standard/DateTimeAtProcessing.java,
- 	javax/print/attribute/standard/DocumentName.java,
- 	javax/print/attribute/standard/JobHoldUntil.java,
- 	javax/print/attribute/standard/JobImpressionsCompleted.java,
- 	javax/print/attribute/standard/JobMessageFromOperator.java,
- 	javax/print/attribute/standard/JobName.java,
- 	javax/print/attribute/standard/JobOriginatingUserName.java,
- 	javax/print/attribute/standard/JobPriority.java,
- 	javax/print/attribute/standard/JobPrioritySupported.java,
- 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
- 	javax/print/attribute/standard/OutputDeviceAssigned.java,
- 	javax/print/attribute/standard/PrinterInfo.java,
- 	javax/print/attribute/standard/PrinterLocation.java,
- 	javax/print/attribute/standard/PrinterMakeAndModel.java,
- 	javax/print/attribute/standard/PrinterMessageFromOperator.java,
- 	javax/print/attribute/standard/PrinterName.java,
- 	javax/print/attribute/standard/QueuedJobCount.java,
- 	javax/print/attribute/standard/RequestingUserName.java:
- 	Fixed javadocs all over.
- 
- 2004-05-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/DocFlavor.java,
- 	javax/print/attribute/standard/ColorSupported.java,
- 	javax/print/attribute/standard/Compression.java,
- 	javax/print/attribute/standard/CopiesSupported.java,
- 	javax/print/attribute/standard/Fidelity.java,
- 	javax/print/attribute/standard/Finishings.java,
- 	javax/print/attribute/standard/JobImpressionsSupported.java,
- 	javax/print/attribute/standard/JobKOctetsSupported.java,
- 	javax/print/attribute/standard/JobMediaSheetsSupported.java,
- 	javax/print/attribute/standard/JobSheets.java,
- 	javax/print/attribute/standard/JobState.java,
- 	javax/print/attribute/standard/JobStateReason.java,
- 	javax/print/attribute/standard/JobStateReasons.java,
- 	javax/print/attribute/standard/Media.java,
- 	javax/print/attribute/standard/MediaSizeName.java,
- 	javax/print/attribute/standard/MultipleDocumentHandling.java,
- 	javax/print/attribute/standard/NumberUpSupported.java,
- 	javax/print/attribute/standard/OrientationRequested.java,
- 	javax/print/attribute/standard/PDLOverrideSupported.java,
- 	javax/print/attribute/standard/PageRanges.java,
- 	javax/print/attribute/standard/PresentationDirection.java,
- 	javax/print/attribute/standard/PrintQuality.java,
- 	javax/print/attribute/standard/PrinterIsAcceptingJobs.java,
- 	javax/print/attribute/standard/PrinterMoreInfo.java,
- 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.java,
- 	javax/print/attribute/standard/PrinterResolution.java,
- 	javax/print/attribute/standard/PrinterState.java,
- 	javax/print/attribute/standard/PrinterStateReason.java,
- 	javax/print/attribute/standard/PrinterStateReasons.java,
- 	javax/print/attribute/standard/PrinterURI.java,
- 	javax/print/attribute/standard/ReferenceUriSchemesSupported.java,
- 	javax/print/attribute/standard/Severity.java,
- 	javax/print/attribute/standard/SheetCollate.java,
- 	javax/print/attribute/standard/Sides.java:
- 	Added serialVersionUID and removed final keyword where it doenst
- 	belong.
- 
- 2004-05-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/PrintServiceLookup.java: New file.
- 
- 2004-05-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/DocFlavor.java:
- 	Implemented all flavor classes.
- 
- 2004-05-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/attribute/standard/ColorSupported.java,
- 	javax/print/attribute/standard/Compression.java,
- 	javax/print/attribute/standard/CopiesSupported.java,
- 	javax/print/attribute/standard/Fidelity.java,
- 	javax/print/attribute/standard/Finishings.java,
- 	javax/print/attribute/standard/JobImpressionsSupported.java,
- 	javax/print/attribute/standard/JobKOctetsSupported.java,
- 	javax/print/attribute/standard/JobMediaSheetsSupported.java,
- 	javax/print/attribute/standard/JobSheets.java,
- 	javax/print/attribute/standard/JobState.java,
- 	javax/print/attribute/standard/JobStateReason.java,
- 	javax/print/attribute/standard/JobStateReasons.java,
- 	javax/print/attribute/standard/Media.java,
- 	javax/print/attribute/standard/MediaSizeName.java,
- 	javax/print/attribute/standard/MultipleDocumentHandling.java,
- 	javax/print/attribute/standard/NumberUpSupported.java,
- 	javax/print/attribute/standard/OrientationRequested.java,
- 	javax/print/attribute/standard/PDLOverrideSupported.java,
- 	javax/print/attribute/standard/PageRanges.java,
- 	javax/print/attribute/standard/PresentationDirection.java,
- 	javax/print/attribute/standard/PrintQuality.java,
- 	javax/print/attribute/standard/PrinterIsAcceptingJobs.java,
- 	javax/print/attribute/standard/PrinterMoreInfo.java,
- 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.java,
- 	javax/print/attribute/standard/PrinterResolution.java,
- 	javax/print/attribute/standard/PrinterState.java,
- 	javax/print/attribute/standard/PrinterStateReason.java,
- 	javax/print/attribute/standard/PrinterStateReasons.java,
- 	javax/print/attribute/standard/PrinterURI.java,
- 	javax/print/attribute/standard/ReferenceUriSchemesSupported.java,
- 	javax/print/attribute/standard/Severity.java,
- 	javax/print/attribute/standard/SheetCollate.java,
- 	javax/print/attribute/standard/Sides.java: New files.
- 
- 2004-05-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/Doc.java
- 	(getPrintData): Throws IOException.
- 	(getReaderForText): Likewise.
- 	(getStreamForBytes): Likewise.
- 	* javax/print/DocFlavor.java:
- 	Fixed filename in copyright.
- 	(serialVersionUID): New field.
- 	* javax/print/ServiceUIFactory.java:
- 	Made all constants final.
- 	* javax/print/AttributeException.java
- 	javax/print/MultiDoc.java
- 	javax/print/MultiDocPrintJob.java
- 	javax/print/MultiDocPrintService.java
- 	javax/print/StreamPrintService.java
- 	javax/print/URIException.java: New files.
- 	* javax/print/Makefile.am
- 	(EXTRA_DIST): Added all new files.
- 
- 2004-05-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/attribute/standard/Copies.java,
- 	javax/print/attribute/standard/DateTimeAtCompleted.java,
- 	javax/print/attribute/standard/DateTimeAtCreation.java,
- 	javax/print/attribute/standard/DateTimeAtProcessing.java,
- 	javax/print/attribute/standard/DocumentName.java,
- 	javax/print/attribute/standard/JobHoldUntil.java,
- 	javax/print/attribute/standard/JobImpressions.java,
- 	javax/print/attribute/standard/JobImpressionsCompleted.java,
- 	javax/print/attribute/standard/JobKOctets.java,
- 	javax/print/attribute/standard/JobKOctetsProcessed.java,
- 	javax/print/attribute/standard/JobMediaSheets.java,
- 	javax/print/attribute/standard/JobMediaSheetsCompleted.java,
- 	javax/print/attribute/standard/JobMessageFromOperator.java,
- 	javax/print/attribute/standard/JobName.java,
- 	javax/print/attribute/standard/JobOriginatingUserName.java,
- 	javax/print/attribute/standard/JobPriority.java,
- 	javax/print/attribute/standard/JobPrioritySupported.java,
- 	javax/print/attribute/standard/NumberOfDocuments.java,
- 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
- 	javax/print/attribute/standard/NumberUp.java,
- 	javax/print/attribute/standard/OutputDeviceAssigned.java,
- 	javax/print/attribute/standard/PagesPerMinute.java,
- 	javax/print/attribute/standard/PagesPerMinuteColor.java:
- 	Fixed @return tag all over.
- 
- 2004-05-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/attribute/AttributeSetUtilities.java
- 	(verifyCategoryForValue): Fixed typo in javadoc.
- 	* javax/print/attribute/HashAttributeSet.java
- 	(containsKey): Fixed @return tag.
- 	(comtainsValue): Likewise.
- 	(equals): Likewise.
- 	* javax/print/attribute/IntegerSyntax.java
- 	(equals): Likewise.
- 	* javax/print/attribute/ResolutionSyntax.java
- 	(equals): Likewise.
- 	(getCrossFeedResolution): Removed unused code.
- 	(getFeedResolution): Likewise.
- 	* javax/print/attribute/SetOfIntegerSyntax.java
- 	(SetOfIntegerSyntax): Fixed HTML entities in javadoc.
- 	(equals): Fixed @return tag.
- 	* javax/print/attribute/TextSyntax.java
- 	(TextSyntax): Take locale into account.
- 	(hashCode): Better implementation.
- 
- 2004-05-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/CancelablePrintJob.java,
- 	javax/print/Doc.java,
- 	javax/print/DocFlavor.java,
- 	javax/print/DocPrintJob.java,
- 	javax/print/FlavorException.java,
- 	javax/print/PrintException.java,
- 	javax/print/PrintService.java,
- 	javax/print/ServiceUIFactory.java: New files.
- 
- 2004-05-15  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/regexp/CharIndexedReader.java: Removed.
- 	* gnu/regexp/REFilterReader.java: Likewise.
- 	* gnu/regexp/RETokenLookAhead.java: Likewise.
- 	* Makefile.am (ordinary_java_source_files): Remove above classes.
- 	* Makefile.in: Regenerated.
- 
- 2004-05-14  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/awt/xlib/XGraphics.java (drawImage): Use `XOffScreenImage',
- 	not `XGraphicsConfiguration.XOffScreenImage'.
- 
- 2004-05-14  Scott Gilbertson  <scottg@mantatest.com>
- 
- 	* gnu/awt/xlib/XCanvasPeer.java (setVisible): Implement unmap.
- 
- 2004-05-14  Steven Augart  <augart@watson.ibm.com>
- 
- 	* include/jni.h (_Jv_func): Removed.
- 	(struct JNINativeInterface): Use `void *' for reserved slots.
- 	(struct JNIInvokeInterface): Likewise.
- 
- 2004-05-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/natPlainSocketImplPosix.cc
- 	(read): Fixed typo in expression.
- 
- 2004-05-10  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* testsuite/lib/libjava.exp (libjava_invoke): Add new argument
- 	ld_library_additions. Adjust all calls to libjava_invoke to match
- 	the new argument.
- 
- 	* testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Pass stdc++
- 	path to cxxflagslist.
- 	Pass path of libstdc++ to libjava_invoke.
- 
- 	* testsuite/libjava.jar/jar.exp (gcj_jar_inerpret): Adjust
- 	libjava_invoke arguments.
- 
- 2004-05-10  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	* testsuite/libjava.jacks/jacks.xfail: Update to reflect the current
- 	reality.
- 
- 2004-05-07  Ranjit Mathew  <rmathew@gmail.com>
- 
- 	* testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Don't link the
- 	main binary against the JNI shared library.
- 
- 2004-05-07  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/util/SimpleTimeZone.java (startTimeMode, endTimeMode,
-         WALL_TIME, STANDARD_TIME, UTC_TIME): New members.
- 	(SimpleTimeZone): Tweak docs.  Add new variation.
- 	(setStartRule,setEndRule): Add new variations.  Use
-         startTimeMode and endTimeMode.
- 
- 2004-05-07  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/util/Calendar.java (getActualMinimum,
-         getActualMaximum):  Remove abstract.  Implement.
- 
- 2004-05-06  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	Run the jni tests using the interpreter.
- 	* testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Append
- 	options_cxx to shared lib compile command.
- 	(gcj_jni_test_one): Pass cxxflags to gcj_jni_compile_c_to_so, so
- 	they are used to link the shared lib, not the main binary.
- 	Use libjava_invoke to run gij.
- 
- 2004-05-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/logging/Level.java
- 	(parse): Use == instead of String.equals().
- 
- 2004-05-06  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* defineclass.cc (_Jv_ClassReader::prepare_pool_entry): Use
- 	verify_field_signature and verify_method_signature, not
- 	_Jv_VerifyFieldSignature and _Jv_VerifyMethodSigntature.
- 	(_Jv_ClassReader::handleField): Likewise.
- 	(_Jv_ClassReader::handleMethod): Likewise.
- 
- 2004-05-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/table/TableColumn.java:
- 	Reformated.
- 
- 2004-05-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/imageio/spi/ImageReaderWriterSpi.java
- 	(ImageReaderWriterSpi): Made it public.
- 	* javax/imageio/stream/ImageInputStream.java:
- 	Clean up imports.
- 
- 2004-05-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
- 	Removed empty line.
- 
- 2004-05-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c:
- 	New files.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c:
- 	Include gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c:
- 	Moved GtkCheckboxGroupPeer_dispose and GtkCheckboxGroupPeer_remove to
- 	their own source file.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
- 	Moved GtkGenericPeer_dispose and GtkComponentPeer_requestFocus to
- 	their own source file. Removed GtkComponentPeer_gtkWidgetSetUsize.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
- 	(create): Define variable on top of function.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
- 	(menu_pos): Prototyped.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(setTitle): Removed.
- 	* jni/gtk-peer/gthread-jni.c
- 	(gdk_threads_wake): Removed.
- 	* Makefile.am (gtk_c_source_files): Added new files
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c and
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c.
- 	* Makefile.in: Regenerated.
- 
- 2004-05-05  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* testsuite/libjava.jni/pr11951.java: Add missing System.loadLibrary()
- 	call.
- 
- 2004-05-05  Mark Wielaard  <mark@klomp.org>
- 
- 	* javax/swing/AbstractButton.java: Replace special HTML entities with
- 	ASCII equivalent.
- 	* javax/swing/DefaultBoundedRangeModel.java: Likewise.
- 	* javax/swing/DefaultButtonModel.java: Likewise.
- 	* javax/swing/DefaultListModel.java: Likewise.
- 	* javax/swing/JList.java: Likewise.
- 	* javax/swing/JSlider.java: Likewise.
- 	* javax/swing/ListModel.java: Likewise.
- 	* javax/swing/Popup.java: Likewise.
- 	* javax/swing/SwingUtilities.java: Likewise.
- 
- 2004-05-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractButton.java,
- 	javax/swing/ActionMap.java,
- 	javax/swing/DefaultButtonModel.java,
- 	javax/swing/DefaultListModel.java,
- 	javax/swing/ImageIcon.java,
- 	javax/swing/JComboBox.java,
- 	javax/swing/JComponent.java,
- 	javax/swing/JFrame.java,
- 	javax/swing/JInternalFrame.java,
- 	javax/swing/JMenuBar.java,
- 	javax/swing/JMenuItem.java,
- 	javax/swing/JOptionPane.java,
- 	javax/swing/JProgressBar.java,
- 	javax/swing/JRootPane.java,
- 	javax/swing/JScrollBar.java,
- 	javax/swing/JScrollPane.java,
- 	javax/swing/JSeparator.java,
- 	javax/swing/JSlider.java,
- 	javax/swing/JTabbedPane.java,
- 	javax/swing/JTable.java,
- 	javax/swing/JTextField.java,
- 	javax/swing/JToolBar.java,
- 	javax/swing/JToolTip.java,
- 	javax/swing/JTree.java,
- 	javax/swing/JViewport.java,
- 	javax/swing/JWindow.java,
- 	javax/swing/KeyStroke.java,
- 	javax/swing/LookAndFeel.java,
- 	javax/swing/SwingUtilities.java,
- 	javax/swing/Timer.java,
- 	javax/swing/ToolTipManager.java,
- 	javax/swing/UIDefaults.java,
- 	javax/swing/border/TitledBorder.java,
- 	javax/swing/filechooser/FileSystemView.java,
- 	javax/swing/plaf/basic/BasicButtonListener.java,
- 	javax/swing/plaf/basic/BasicButtonUI.java,
- 	javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java,
- 	javax/swing/plaf/basic/BasicGraphicsUtils.java,
- 	javax/swing/plaf/basic/BasicLabelUI.java,
- 	javax/swing/plaf/basic/BasicMenuItemUI.java,
- 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
- 	javax/swing/plaf/basic/BasicRootPaneUI.java,
- 	javax/swing/plaf/basic/BasicScrollBarUI.java,
- 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
- 	javax/swing/plaf/basic/BasicSliderUI.java,
- 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
- 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
- 	javax/swing/table/JTableHeader.java,
- 	javax/swing/text/AbstractDocument.java,
- 	javax/swing/text/DefaultCaret.java,
- 	javax/swing/text/StyledEditorKit.java,
- 	javax/swing/tree/DefaultTreeCellEditor.java:
- 	Cleaned up imports.
- 
- 2004-05-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/prefs/AbstractPreferences.java
- 	(AbstractPreferences): Added parenthesis for clarity.
- 	Closes classpath bug #7940.
- 
- 2004-05-05  Tom Tromey  <tromey@redhat.com>
- 
- 	* javax/naming/CompoundName.java (endsWith): Look at correct
- 	element of source name.
- 
- 2004-05-05  Mark Wielaard  <mark@klomp.org>
- 
- 	Reported by f.haeglsperger@gmx.de [classpath patch #2485]
- 	* java/util/HashMap.java (rehash): Add entry at start of bucket.
- 
- 2004-05-05  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/io/BufferedReader.java (skip): Removed unused
- 	variable.
- 
- 2004-05-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/FileDialog.java: Import java.io.Serializable explicitly.
- 
- 2004-05-05  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* java/text/AttributedString.java,
- 	java/text/AttributedStringIterator.java,
- 	java/text/Collator.java,
- 	java/text/DecimalFormatSymbols.java,
- 	java/text/NumberFormat.java,
- 	java/text/RuleBasedCollator.java:
- 	Cleaned up imports.
- 
- 2004-05-05  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/text/Format.java: Cleaned up imports.
- 	* java/text/DecimalFormat.java: Cleaned up imports.
- 	* java/security/SecureRandom.java: Cleaned up imports.
- 	(SecureRandom): Removed unused variable.
- 	* java/security/UnresolvedPermission.java: Cleaned up imports.
- 	* java/util/Date.java (parse): Removed unused variable.
- 	* java/util/ResourceBundle.java: Cleaned up imports.
- 	(getBundle): Removed unused variable.
- 	(tryBundle): Likewise.
- 	* java/util/regex/Pattern.java (Pattern): Removed unused constructor.
- 
- 2004-05-05  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/text/SimpleDateFormat.java:
- 	(formatWithAttribute): New method. It implements
- 	the formatting process with attributes.
- 	(format): Use formatWithAttribute.
- 	(formatToCharacterIterator): New method. Use
- 	formatWithAttribute.
- 
- 2004-05-05  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/text/MessageFormat.java:
- 	(class Field): New class.
- 	(formatToCharacterIterator): New method.
- 	(format): Use formatInternal now.
- 	(formatInternal): New method. String formatter should
- 	be done here (with attributes). Attributes merging supported.
- 	(parse): More documentation.
- 	(getFormatsByArgumentIndex): New method.
- 	(setFormatByArgumentIndex): New method.
- 	(setFormatsByArgumentIndex): New method.
- 
- 2004-05-05  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/text/DecimalFormat.java
- 	(MAXIMUM_INTEGER_DIGITS): New constant to keep the numeric value 309.
- 	(applyPatternWithSymbols): Use MAXIMUM_INTEGER_DIGITS.
- 	(parse): Fixed handling of exponentiation notation and grouping.
- 
- 2004-05-05  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/text/DecimalFormat.java
- 	(scanFix): Build attribute array. Fixed error reporting.
- 	(applyPatternWithSymbols): Store attributes for the prefix and
- 	suffix.
- 	(formatInternal): New method. Changed the way the string is
- 	computed. Implemented attributes. Cleant up rounding in
- 	exponential notation.
- 	(format): Use formatInternal.
- 	(formatToCharacterIterator): New method.
- 	(exponentRound, negativePrefixRanges, positivePrefixRanges,
- 	negativePrefixAttrs, positivePrefixAttrs, negativeSuffixRanges,
- 	positiveSuffixRanges, negativeSuffixAttrs, positiveSuffixAttrs):
- 	New fields.
- 
- 2004-05-04  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* java/security/interfaces/DSAKeyPairGenerator.java,
- 	java/security/interfaces/DSAPrivateKey.java,
- 	java/security/interfaces/DSAPublicKey.java,
- 	java/security/interfaces/RSAPrivateKey.java,
- 	java/security/interfaces/RSAPublicKey.java:
- 	Cleaned up imports.
- 
- 2004-05-04  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/ByteBuffer.java,
- 	java/nio/CharBuffer.java,
- 	java/nio/DoubleBuffer.java,
- 	java/nio/FloatBuffer.java,
- 	java/nio/IntBuffer.java,
- 	java/nio/LongBuffer.java,
- 	java/nio/ShortBuffer.java:
- 	(compareTo): Fixed bogus implementation in all buffer classes.
- 
- 2004-05-04  Ingo Proetel  <proetel@aicas.com>
- 
- 	* java/awt/image/ColorModel.java (getRGBdefault): Default ColorModel has
-         32 bit pixels not 8 bit pixels.
- 	(isCompatibleRaster): Added javadoc comment.
- 
- 2004-05-04  Ingo Proetel  <proetel@aicas.com>
- 
- 	* java/awt/image/ComponentSampleModel.java (setDataSamples):Do not reset
- 	scanline stride.
- 
- 2004-05-04  Ingo Proetel  <proetel@aicas.com>
- 
- 	* java/awt/ColorPaintContext.java (<init>): Added ColorModel to signature.
- 	(getColorModel): Return the actual color model.
- 	(getRaster): Implemented.
- 	(ColorRaster): New inner class.
- 	* java/awt/SystemColor.java (createContext): Use ColorModel when creating
- 	a PaintContext.
- 	* java/awt/Color.java (<init>): Make exception more verbose.
- 	(createContext): Use ColorModel when creating a PaintContext.
- 
- 2004-05-04  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/text/CharacterBreakIterator.java
- 	(previous): Removed unused variable.
- 
- 2004-05-04  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* gnu/java/text/FormatBuffer.java,
- 	gnu/java/text/AttributedFormatBuffer.java,
- 	gnu/java/text/StringFormatBuffer.java: New classes to implement
- 	attributed iterators in java.text.
- 	* gnu/java/text/FormatCharacterIterator.java: Moved
- 	from java/text as it is an internal class.
- 	* java/text/FormatCharacterIterator.java: Removed.
- 	* java/text/Format.java:
- 	Import gnu.java.text.FormatCharacterIterator.
- 	* Makefile.am (java_source_files): Added new files.
- 	* Makefile.in: Regenerated.
- 
- 
- 2004-05-04  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/nio/channels/FileChannelImpl.java (finalize): New method.
- 
- 2004-05-03  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* Makefile.am (WARNINGS): Replace -W with the more speaking -Wextra.
- 	* Makefile.in: Rebuilt.
- 
- 2004-05-03  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/security/der/DERReader.java: Call static methods staticly.
- 	* java/awt/TextComponent.java (select): Use selectionEnd parameter.
- 	* java/net/URL.java
- 	(set(String, String, int, String, String, String, String, String)):
- 	Assign this.file to path or path + "?" + query.
- 	* java/util/Arrays.java: Call static methods staticly.
- 	* java/util/zip/ZipEntry.java: Likewise.
- 	* javax/swing/plaf/basic/BasicArrowButton.java (setDirection): Assign
- 	dir to this.direction.
- 	* javax/swing/table/DefaultTableCellRenderer.java (noFocusBorder):
- 	Assign static field only once.
- 	(DefaultTableCellRenderer): Don't reassign noFocusBorder each time.
- 
- 2004-05-03  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (minimumSize): Removed
- 	unused variables hScrollbarHeight and vScrollbarWidth.
- 	(preferredSize): Likewise.
- 	* gnu/java/security/provider/DSAParameters.java (engineToString):
- 	Removed unused call to System.getProperty("line.seperator");
- 	* java/security/Security.java (loadProviders): Return result.
- 
- 2004-05-03  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/net/URLStreamHandler.java (toExternalForm): Removed
- 	unused variables.
- 	unused constructor.
- 	* java/math/BigDecimal.java (divide): Removed unused variable.
- 	* java/lang/Throwable.java: Cleaned up imports.
- 	* java/lang/ClassLoader.java: Cleaned up imports.
- 	* java/io/FilePermission.java (implies): Removed unused
- 	variable.
- 	* java/awt/TextComponent.java: Removed unused import.
- 	* gnu/java/util/prefs/NodeReader.java: Cleaned up imports.
- 	* gnu/java/util/DoubleEnumeration.java: Removed unused import.
- 	* gnu/java/text/WordBreakIterator.java: Removed unused import.
- 	* gnu/java/text/SentenceBreakIterator.java: Removed unused
- 	import.
- 	* gnu/java/text/LineBreakIterator.java: Removed unused import.
- 	* gnu/java/text/CharacterBreakIterator.java: Removed
- 	unused import.
- 	* gnu/java/security/provider/DSAKeyPairGenerator.java:
- 	Cleaned up imports.
- 	* gnu/java/security/der/DERWriter.java: Cleaned up imports.
- 	* gnu/java/nio/charset/UTF_16Decoder.java (put): Removed
- 	unused method.
- 	* gnu/java/nio/SocketChannelImpl.java: Cleaned up imports.
- 	* gnu/java/nio/FileLockImpl.java: Cleaned up imports.
- 	* gnu/java/io/Base64InputStream.java: Cleaned up imports.
- 	* gnu/java/beans/info/ComponentBeanInfo.java: Cleaned up imports.
- 	* gnu/classpath/ServiceFactory.java: Cleaned up imports.
- 	(lookupProviders): Removed unused variable.
- 	(loadNextServiceProvider): Likewise.
- 	* gnu/java/beans/BeanInfoEmbryo.java: Cleaned up imports.
- 
- 2004-05-03  Michael Koch  <konqueror@gmx.de>
- 
- 	Fixes PR libgcj/14695:
- 	* java/net/NetworkInterface.java
- 	(getByName): Return null when no interface was found.
- 
- 2004-04-30  Ranjit Mathew  <rmathew@hotmail.com>
-             Tom Tromey  <tromey@redhat.com>
- 
- 	* testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Use
- 	additional option "-Wmissing-prototypes" for compiling C sources.
- 	Print actual filename for pass/fail rather than $name.c.
- 	* testsuite/libjava.jni/PR15133.java: New testcase file.
- 	* testsuite/libjava.jni/PR15133.c: Likewise.
- 	* testsuite/libjava.jni/PR15133.out: Likewise.
- 
- 2004-04-30  Roger Sayle  <roger@eyesopen.com>
- 
- 	* testsuite/libjava.lang/MathBuiltin.java: Add tests for acos, asin,
- 	ceil and floor.
- 
- 2004-04-25  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	* testsuite/libjava.jacks/jacks.exp (gcj_jacks_write): Explicitly
- 	limit the maximum heap size to avoid unnecessary thrashing.
- 
- 2004-04-24  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/text/CollationElementIterator.java (reset): Reset
-         lookahead variables.
- 
- 2004-04-23  Mark Wielaard  <mark@klomp.org>
- 
- 	* jni/classpath/jcl.c: Changed C++ comments into C comments.
- 
- 2004-04-23 Dalibor Topic <robilad@kaffe.org>
- 
- 	* java/sql/DriverManager.java:
- 	Cleaned up imports.
- 
- 2004-04-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/URL.java
- 	(hashcode): Don't initialize with default value explicitely.
- 	(getContent): Removed redundant "final" keyword.
- 	(openStream): Likewise.
- 	(getURLStreamHandler): Fixed coding style.
- 	* java/net/URLConnection.java
- 	(defaultAllowUserInteraction): Don't initialize with default value
- 	explicitely.
- 	(connected): Likewise.
- 	(doOutput): Likewise.
- 	(ifModifiedSince): Likewise.
- 	(dateformats_initialized): Likewise.
- 	(setURLStreamHander): Use StreamTokenizer where it belongs to.
- 
- 2004-04-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/channels/FileChannelImpl.java
- 	(SET, CUR): Unused, removed.
- 	(read): Implement here directly.
- 	(implRead): Removed.
- 	(write): Implement here directly.
- 	(implWrite): Removed.
- 
- 2004-04-23  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* javax/rmi/CORBA/PortableRemoteObjectDelegate.java,
- 	javax/rmi/CORBA/Stub.java,
- 	javax/rmi/CORBA/Util.java,
- 	javax/rmi/CORBA/ValueHandler.java,
- 	javax/rmi/CORBA/ValueHandler.java,
- 	javax/rmi/PortableRemoteObject.java:
- 	Cleaned up imports.
- 
- 2004-04-23 Dalibor Topic <robilad@kaffe.org>
- 
- 	* java/util/jar/JarFile.java,
- 	java/util/jar/JarInputStream.java,
- 	java/util/jar/JarOutputStream.java,
- 	java/util/jar/Manifest.java:
- 	Cleaned up imports.
- 
- 2004-04-23 Dalibor Topic <robilad@kaffe.org>
- 
- 	* java/util/ArrayList.java,
- 	java/util/Calendar.java,
- 	java/util/Currency.java,
- 	java/util/HashMap.java,
- 	java/util/HashSet.java,
- 	java/util/Hashtable.java,
- 	java/util/LinkedList.java,
- 	java/util/Properties.java,
- 	java/util/PropertyPermission.java,
- 	java/util/TimeZone.java,
- 	java/util/TreeMap.java,
- 	java/util/TreeSet.java,
- 	java/util/Vector.java,
- 	java/util/WeakHashMap.java:
- 	Cleaned up imports.
- 
- 2004-04-23  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* java/util/logging/FileHandler.java,
- 	java/util/logging/Formatter.java,
- 	java/util/logging/Handler.java,
- 	java/util/logging/Logger.java,
- 	java/util/logging/SimpleFormatter.java,
- 	java/util/logging/XMLFormatter.java:
- 	Cleaned up imports.
- 
- 2004-04-22  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.am (PEDANTIC_CFLAGS): New -ansi -pedantic -Wall
- 	-Wno-long-long flags variable.
- 	(gtk_c_files): Use PEDANTIC_CFLAGS.
- 	* Makefile.in: Regenerated.
- 
- 2004-04-22  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
- 	Changed C++ comments into C comments.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c:
- 	Likewise.
- 
- 2004-04-22  Michael Koch  <konqueror@gmx.de>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
- 	Merged copyright year with GNU classpath.
- 
- 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* javax/security/auth/x500/X500Principal.java:
- 	Cleaned up imports.
- 
- 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* javax/swing/JSlider.java:
- 	Fixed HTML tags in comments.
- 
- 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* javax/accessibility/AccessibleText.java:
- 	Cleaned up imports.
- 
- 2004-04-22  Jeroen Frijters <jeroen@sumatra.nl>
- 
- 	* java/net/URLStreamHandler.java
- 	(parseURL): Convert the file path to using '/' instead of native
- 	file separator.
- 
- 2004-04-22  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/net/URL.java
- 	(userInfo): New field.
- 	(URL): Set authority to the right value.
- 	(setURL): Fixed authority and file initialization.
- 	* java/net/URLStreamHandler.java
- 	(parseURL): Take care of the query tag. Build authority.
- 	(toExternalForm): Fixed URL building using authority.
- 
- 2004-04-22  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/Socket.java
- 	(impl): Made package-private.
- 	* java/net/ServerSocket.java
- 	(implAccept): Access Socket.impl field directly.
- 
- 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* java/util/prefs/Preferences.java,
- 	java/util/prefs/InvalidPreferencesFormatException.java,
- 	java/util/prefs/BackingStoreException.java,
- 	java/util/prefs/AbstractPreferences.java:
- 	Cleaned up imports.
- 
- 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* java/util/regex/Matcher.java,
- 	java/util/regex/Pattern.java:
- 	Cleaned up imports.
- 
- 2004-04-22  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/charset/IllegalCharsetNameException.java
- 	(charsetName): Made private.
- 	(IllegalCharsetNameException): Added @param tag to javadoc.
- 	(getCharsetName): Added @return tag to javadoc.
- 	* java/nio/charset/MalformedInputException.java
- 	(MalformedInputException): Added @param tag to javadoc.
- 	(getInputLength): Revised method description, added @return tag.
- 	(getMessage): Added @return tag.
- 
- 2004-04-22  Jerry Quinn  <jlquinn@optonline.net>
- 
- 	* java/awt/Font.java (deriveFont): Implement missing variants.
- 	* gnu/java/awt/peer/ClasspathFontPeer.java (deriveFont): Implement
- 	missing variants.
- 
- 2004-04-21  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/lang/natClass.cc (_Jv_LayoutInterfaceMethods): New method.
- 	Set method->index values for interface methods to their itable index.
- 	(initializeClass): Call _Jv_LayoutInterfaceMethods.
- 
- 2004-04-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/DirectByteBufferImpl.java
- 	(shiftDown): Made static, give address as argument and
- 	provide a convenience method that overwrites shiftDown in
- 	ByteBufferImpl and calls the native shiftDown.
- 	* java/nio/MappedByteBufferImpl.java
- 	(): Use optimized method in DirectByteBufferImpl.
- 	* java/nio/natDirectByteBufferImpl.cc
- 	(shiftDown): Changed method signature. Removed usage of array_offset.
- 
- 2004-04-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/natPlainSocketImplPosix.cc
- 	(SocketInputStream::read): Make sure returned data is a byte value.
- 
- 2004-04-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/classpath/ServiceFactory.java,
- 	gnu/classpath/ServiceProviderLoadingAction.java,
- 	javax/imageio/ImageReader.java,
- 	javax/imageio/ImageTranscoder.java,
- 	javax/imageio/ImageWriter.java,
- 	javax/imageio/package.html,
- 	javax/imageio/spi/IIOServiceProvider.java,
- 	javax/imageio/spi/ImageInputStreamSpi.java,
- 	javax/imageio/spi/ImageOutputStreamSpi.java,
- 	javax/imageio/spi/ImageReaderWriterSpi.java,
- 	javax/imageio/spi/ImageTranscoderSpi.java,
- 	javax/imageio/spi/RegisterableService.java,
- 	javax/imageio/spi/ServiceRegistry.java,
- 	javax/imageio/spi/package.html,
- 	javax/imageio/stream/IIOByteBuffer.java,
- 	javax/imageio/stream/ImageInputStream.java,
- 	javax/imageio/stream/ImageOutputStream.java,
- 	javax/imageio/stream/package.html:
- 	New files.
- 	* Makefile.am
- 	(ordinary_java_source_files): Added
- 	gnu/classpath/ServiceFactory.java and
- 	gnu/classpath/ServiceProviderLoadingAction.java.
- 	(javax_source_files): Added
- 	javax/imageio/ImageReader.java,
- 	javax/imageio/ImageTranscoder.java,
- 	javax/imageio/ImageWriter.java,
- 	javax/imageio/spi/IIOServiceProvider.java,
- 	javax/imageio/spi/ImageInputStreamSpi.java,
- 	javax/imageio/spi/ImageOutputStreamSpi.java,
- 	javax/imageio/spi/ImageReaderWriterSpi.java,
- 	javax/imageio/spi/ImageTranscoderSpi.java,
- 	javax/imageio/spi/RegisterableService.java,
- 	javax/imageio/spi/ServiceRegistry.java,
- 	javax/imageio/stream/IIOByteBuffer.java,
- 	javax/imageio/stream/ImageInputStream.java and
- 	javax/imageio/stream/ImageOutputStream.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-04-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/Properties.java
- 	(load): Fix wrongly merged fix.
- 
- 2004-04-21  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gthread-jni.c (maybe_rethrow): Explicitly
- 	malloc and free buf.
- 
- 2004-04-21  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* javax/naming/AuthenticationException.java,
- 	javax/naming/AuthenticationNotSupportedException.java,
- 	javax/naming/CannotProceedException.java,
- 	javax/naming/CommunicationException.java,
- 	javax/naming/CompoundName.java,
- 	javax/naming/ConfigurationException.java,
- 	javax/naming/ContextNotEmptyException.java,
- 	javax/naming/InitialContext.java,
- 	javax/naming/InsufficientResourcesException.java,
- 	javax/naming/InterruptedNamingException.java,
- 	javax/naming/LimitExceededException.java,
- 	javax/naming/LinkException.java,
- 	javax/naming/LinkLoopException.java,
- 	javax/naming/LinkRef.java,
- 	javax/naming/MalformedLinkException.java,
- 	javax/naming/Name.java,
- 	javax/naming/NameAlreadyBoundException.java,
- 	javax/naming/NameNotFoundException.java,
- 	javax/naming/NamingSecurityException.java,
- 	javax/naming/NoInitialContextException.java,
- 	javax/naming/NoPermissionException.java,
- 	javax/naming/NotContextException.java,
- 	javax/naming/PartialResultException.java,
- 	javax/naming/ReferralException.java,
- 	javax/naming/ServiceUnavailableException.java,
- 	javax/naming/SizeLimitExceededException.java,
- 	javax/naming/TimeLimitExceededException.java,
- 	javax/naming/directory/Attribute.java,
- 	javax/naming/directory/Attributes.java,
- 	javax/naming/directory/SearchResult.java,
- 	javax/naming/event/NamingExceptionEvent.java,
- 	javax/naming/spi/ResolveResult.java:
- 	Cleaned up imports.
- 
- 2004-04-21  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c:
- 	Changed C++ comments into C comments. Removed commented out code.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
- 	Likewise.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c:
- 	Likewise.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c:
- 	Likewise.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c:
- 	Likewise.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
- 	Likewise.
- 	* native/jni/gtk-peer/gthread-jni.c:
- 	Likewise.
- 
- 2004-04-21  Mark Wielaard  <mark@klomp.org>
- 
- 	* javax/awt/JFrame.java: Implement WindowConstants. Remove final
- 	static fields defined in interface.
- 	* javax/awt/JDialog.java: Likewise.
- 	(JDialog): Make constructors public.
- 	(getDefaultCloseOperation): Make public.
- 	(processWindowEvent): Call System.exit(0) when EXIT_ON_CLOSE set.
- 	(setDefaultCloseOperation): Make public. Check argument. Add API doc.
- 	* javax/swing/JViewport.java (JViewport): Make constructor public.
- 
- 2004-04-21  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/Map.java
- 	(Entry): Removed redundant "static" modifier.
- 	* java/text/AttributedCharacterIterator.java:
- 	Updated copyright year.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/naming/directory/SearchControls.java:
- 	Don't explicitely extend java.lang.Object.
- 	* javax/naming/spi/DirStateFactory.java:
- 	Merged copyright year with GNU classpath.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/channels/Channels.java:
- 	Merged coding style with GNU classpath.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/ServerSocket.java
- 	Merged coding style from GNU classpath.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/BufferedWriter.java:
- 	Reordered variables to be at top of the class.
- 	(localFlush): Removed redundant final keyword.
- 
- 2004-04-20  Ingo Proetel  <proetel@aicas.com>
- 
- 	* java/awt/event/MouseEvent.java (<init>): fixed field assignment
- 
- 2004-04-20  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/text/DecimalFormat.java (scanFix): Removed suffix check
- 	for percent and permill check.
- 
- 2004-04-20  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/text/FieldPosition.java
- 	(FieldPosition) Constructor now behaves as it should according
- 	to the java documentation.
- 
- 2004-04-20  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/util/Properties.java: Use the word umlaut, not &auml; in api
- 	documentation.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/Buffer.java,
- 	java/nio/channels/AlreadyConnectedException.java,
- 	java/nio/channels/AsynchronousCloseException.java,
- 	java/nio/channels/ByteChannel.java,
- 	java/nio/channels/CancelledKeyException.java,
- 	java/nio/channels/Channel.java,
- 	java/nio/channels/Channels.java,
- 	java/nio/channels/ClosedByInterruptException.java,
- 	java/nio/channels/ClosedChannelException.java,
- 	java/nio/channels/ClosedSelectorException.java,
- 	java/nio/channels/ConnectionPendingException.java,
- 	java/nio/channels/DatagramChannel.java,
- 	java/nio/channels/FileChannel.java,
- 	java/nio/channels/FileLock.java,
- 	java/nio/channels/FileLockInterruptionException.java,
- 	java/nio/channels/GatheringByteChannel.java,
- 	java/nio/channels/IllegalBlockingModeException.java,
- 	java/nio/channels/IllegalSelectorException.java,
- 	java/nio/channels/InterruptibleChannel.java,
- 	java/nio/channels/NoConnectionPendingException.java,
- 	java/nio/channels/NonReadableChannelException.java,
- 	java/nio/channels/NonWritableChannelException.java,
- 	java/nio/channels/NotYetBoundException.java,
- 	java/nio/channels/NotYetConnectedException.java,
- 	java/nio/channels/OverlappingFileLockException.java,
- 	java/nio/channels/Pipe.java,
- 	java/nio/channels/ReadableByteChannel.java,
- 	java/nio/channels/ScatteringByteChannel.java,
- 	java/nio/channels/SelectableChannel.java,
- 	java/nio/channels/SelectionKey.java,
- 	java/nio/channels/Selector.java,
- 	java/nio/channels/ServerSocketChannel.java,
- 	java/nio/channels/SocketChannel.java,
- 	java/nio/channels/UnresolvedAddressException.java,
- 	java/nio/channels/UnsupportedAddressTypeException.java,
- 	java/nio/channels/WritableByteChannel.java,
- 	java/nio/channels/spi/AbstractInterruptibleChannel.java,
- 	java/nio/channels/spi/AbstractSelectableChannel.java,
- 	java/nio/channels/spi/AbstractSelectionKey.java,
- 	java/nio/channels/spi/AbstractSelector.java,
- 	java/nio/channels/spi/SelectorProvider.java,
- 	java/nio/charset/spi/CharsetProvider.java:
- 	Fixed javadocs and jalopied all over java.nio.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/ByteBufferImpl.java,
- 	java/nio/CharBufferImpl.java,
- 	java/nio/DirectByteBufferImpl.java,
- 	java/nio/DoubleBufferImpl.java,
- 	java/nio/DoubleViewBufferImpl.java,
- 	java/nio/FloatBufferImpl.java,
- 	java/nio/FloatViewBufferImpl.java,
- 	java/nio/IntBufferImpl.java,
- 	java/nio/IntViewBufferImpl.java,
- 	java/nio/LongBufferImpl.java,
- 	java/nio/LongViewBufferImpl.java,
- 	java/nio/MappedByteBufferImpl.java,
- 	java/nio/ShortBufferImpl.java,
- 	java/nio/ShortViewBufferImpl.java:
- 	Made sure all classes are final and removed final keyword from all
- 	methods.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/rmi/MarshalledObject.java,
- 	java/rmi/Naming.java,
- 	java/rmi/RemoteException.java,
- 	java/rmi/activation/ActivationException.java,
- 	java/rmi/server/ServerCloneException.java,
- 	java/security/AccessController.java,
- 	java/security/AlgorithmParameterGenerator.java,
- 	java/security/AlgorithmParameters.java,
- 	java/security/CodeSource.java,
- 	java/security/Identity.java,
- 	java/security/IdentityScope.java,
- 	java/security/KeyPairGenerator.java,
- 	java/security/KeyStore.java,
- 	java/security/Security.java,
- 	java/security/Signature.java,
- 	java/security/SignatureSpi.java,
- 	java/security/SignedObject.java,
- 	java/security/spec/DSAParameterSpec.java,
- 	java/security/spec/DSAPrivateKeySpec.java,
- 	java/security/spec/DSAPublicKeySpec.java,
- 	java/sql/Array.java,
- 	java/sql/DatabaseMetaData.java,
- 	java/sql/ResultSet.java,
- 	java/text/ChoiceFormat.java,
- 	java/text/CollationElementIterator.java,
- 	java/text/CollationKey.java,
- 	java/text/Collator.java,
- 	java/text/DateFormat.java,
- 	java/text/DateFormatSymbols.java,
- 	java/text/DecimalFormatSymbols.java,
- 	java/text/Format.java,
- 	java/text/ParsePosition.java,
- 	java/text/RuleBasedCollator.java,
- 	java/text/SimpleDateFormat.java,
- 	java/text/StringCharacterIterator.java,
- 	java/util/Collections.java,
- 	java/util/PropertyResourceBundle.java,
- 	java/util/ResourceBundle.java,
- 	java/util/StringTokenizer.java,
- 	java/util/jar/Attributes.java,
- 	java/util/logging/ConsoleHandler.java,
- 	java/util/logging/LogManager.java,
- 	java/util/logging/MemoryHandler.java,
- 	java/util/logging/SocketHandler.java,
- 	javax/naming/NamingException.java:
- 	Fixed javadoc, coding style and argument names all over.
- 
- 2004-04-20  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/io/FileDescriptor.java: (FileDescriptor) Added public
- 	constructor. (valid) Added null check.
- 
- 2004-04-20  Guilhem Lavaux <guilhem@kaffe.org>
- 
-         Reported by Nektarios Papadopoulos <npapadop@inaccessnetworks.com>
- 	* java/io/FileOutputStream.java
- 	(FileOutputStream) Reorganized constructors. Constructors now
- 	check whether the given path is directory.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/Authenticator.java,
- 	java/net/BindException.java,
- 	java/net/ConnectException.java,
- 	java/net/ContentHandler.java,
- 	java/net/ContentHandlerFactory.java,
- 	java/net/DatagramPacket.java,
- 	java/net/DatagramSocket.java,
- 	java/net/DatagramSocketImpl.java,
- 	java/net/DatagramSocketImplFactory.java,
- 	java/net/FileNameMap.java,
- 	java/net/HttpURLConnection.java,
- 	java/net/Inet4Address.java,
- 	java/net/Inet6Address.java,
- 	java/net/InetAddress.java,
- 	java/net/InetSocketAddress.java,
- 	java/net/JarURLConnection.java,
- 	java/net/MalformedURLException.java,
- 	java/net/MulticastSocket.java,
- 	java/net/NetPermission.java,
- 	java/net/NetworkInterface.java,
- 	java/net/NoRouteToHostException.java,
- 	java/net/PasswordAuthentication.java,
- 	java/net/PortUnreachableException.java,
- 	java/net/ProtocolException.java,
- 	java/net/ServerSocket.java,
- 	java/net/Socket.java,
- 	java/net/SocketAddress.java,
- 	java/net/SocketException.java,
- 	java/net/SocketImpl.java,
- 	java/net/SocketImplFactory.java,
- 	java/net/SocketOptions.java,
- 	java/net/SocketPermission.java,
- 	java/net/SocketTimeoutException.java,
- 	java/net/URI.java,
- 	java/net/URISyntaxException.java,
- 	java/net/URL.java,
- 	java/net/URLClassLoader.java,
- 	java/net/URLConnection.java,
- 	java/net/URLDecoder.java,
- 	java/net/URLEncoder.java,
- 	java/net/URLStreamHandler.java,
- 	java/net/URLStreamHandlerFactory.java,
- 	java/net/UnknownHostException.java,
- 	java/net/UnknownServiceException.java:
- 	Fixed javadocs, coding style and argument names all over.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Byte.java,
- 	java/lang/CharSequence.java,
- 	java/lang/ClassLoader.java,
- 	java/lang/Compiler.java,
- 	java/lang/Double.java,
- 	java/lang/Float.java,
- 	java/lang/Integer.java,
- 	java/lang/Long.java,
- 	java/lang/Math.java,
- 	java/lang/Number.java,
- 	java/lang/Package.java,
- 	java/lang/Runtime.java,
- 	java/lang/RuntimePermission.java,
- 	java/lang/SecurityManager.java,
- 	java/lang/Short.java,
- 	java/lang/StringBuffer.java,
- 	java/lang/System.java,
- 	java/lang/ThreadGroup.java,
- 	java/lang/Throwable.java,
- 	java/lang/reflect/InvocationHandler.java,
- 	java/lang/reflect/Proxy.java:
- 	Fixed javadocs, coding style and argument names all over.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/BufferedWriter.java,
- 	java/io/ByteArrayInputStream.java,
- 	java/io/CharArrayWriter.java,
- 	java/io/DataInput.java,
- 	java/io/DataInputStream.java,
- 	java/io/File.java,
- 	java/io/FilterInputStream.java,
- 	java/io/InputStream.java,
- 	java/io/InputStreamReader.java,
- 	java/io/ObjectInputStream.java,
- 	java/io/ObjectStreamClass.java,
- 	java/io/PipedInputStream.java,
- 	java/io/PipedReader.java,
- 	java/io/PushbackInputStream.java,
- 	java/io/PushbackReader.java,
- 	java/io/RandomAccessFile.java,
- 	java/io/SerializablePermission.java,
- 	java/io/StreamTokenizer.java,
- 	java/io/StringWriter.java,
- 	java/io/WriteAbortedException.java,
- 	java/io/Writer.java:
- 	Fixed javadocs all over, rename arguments to match javadocs,
- 	fixed coding style.
- 
- 2004-04-20  Ingo Proetel  <proetel@aicas.com>
- 
- 	* java/awt/FontMetrics.java:
- 	(charsWidth): fixed accumulation of total_width
- 	(getWidth): simple default implementation
- 	* java/awt/Polygon.java (getBoundingBox): Use correct y-coordinate
- 	in Rectangle constructor.
- 	* java/awt/image/Raster.java (toString): Added method.
- 	* java/awt/image/SampleModel.java (<init>): Added error cause
- 	information to thrown exception.
- 	* java/awt/image/SinglePixelPackedSampleModel.java (getDataElements):
- 	New method.
- 	(setDataElements): New method.
- 	(setPixels): New method.
- 	(toString): New method.
- 
- 2004-04-20  Sascha Brawer  <brawer@dandelis.ch>
- 
- 	* java/awt/image/ComponentColorModel.java
- 	(createCompatibleSampleModel): Return PixelInterleavedSampleModel
- 	for TYPE_BYTE and TYPE_USHORT transferTypes, in order to pass the
- 	Mauve tests on this method. Improved documentation.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JLayeredPane.java,
- 	javax/swing/plaf/BorderUIResource.java,
- 	javax/swing/plaf/ComponentUI.java,
- 	javax/swing/undo/CompoundEdit.java,
- 	javax/swing/undo/StateEdit.java:
- 	Fixed HTML tags in javadocs all over.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/attribute/EnumSyntax.java
- 	(getOffset): Made protected.
- 	* javax/print/attribute/HashAttributeSet.java
- 	(HashAttributeSet): Likewise.
- 	* javax/print/attribute/ResolutionSyntax.java
- 	(getFeedResolution): Fixed typo in exception name.
- 	(getCrossFeedResolution): Likewise.
- 	* javax/print/attribute/SetOfIntegerSyntax.java
- 	(SetOfIntegerSyntax): Fixed HTML entities in javadoc.
- 	* javax/print/attribute/TextSyntax.java
- 	(TextSyntax): Handle locale correctly.
- 	(hashCode): Calc better hashcode value.
- 	(equals): Fixed @return tag.
- 	(toString): New method.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/FileLockImpl.java
- 	(static): Removed, not needed anymore.
- 	* gnu/java/nio/channels/FileChannelImpl.java
- 	(FileChannelImpl): Made final.
- 	(mode): Made private.
- 	(READ, WRITE, APPEND): Made public.
- 	(EXCL, SYNC, DSYNC): Likewise.
- 	(static): Load native JNI library, when needed.
- 	(length): Unused, removed.
- 	(available): Made public.
- 	(implPosition): Throws IOException.
- 	(seek): Likewise.
- 	(implTruncate): Likewise.
- 	(unlock): Likewise.
- 	(lock): Likewise.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/AWTPermission.java,
- 	java/awt/Component.java,
- 	java/awt/ComponentOrientation.java,,
- 	java/awt/Dialog.java,
- 	java/awt/FontMetrics.java,
- 	java/awt/Graphics.java,
- 	java/awt/datatransfer/DataFlavor.java,
- 	java/beans/Introspector.java,
- 	java/beans/PropertyEditor.java,
- 	java/beans/PropertyEditorManager.java,
- 	java/beans/beancontext/BeanContextServiceProvider.java:
- 	Fixed HTML tags in javadocs all over.
- 
- 2004-04-20  Mark Wielaard  <mark@klomp.org>
- 
- 	* gnu/java/awt/peer/gtk/GtkFontPeer.java: Use fallback when
- 	MissingResourceException is thrown.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java (getFontPeer): Don't return
- 	null when a MissingResourceException is thrown. Should never happen.
- 
- 2004-04-20  Sascha Brawer  <brawer@dandelis.ch>
- 
- 	* java/awt/image/DataBufferShort.java,
- 	java/awt/image/DataBufferFloat.java,
- 	java/awt/image/DataBufferDouble.java,
- 	java/awt/image/PixelInterleavedSampleModel.java: New files.
- 	* gnu/java/awt/Buffers.java (createBuffer, createBufferFromData,
- 	getData): Added support	for TYPE_SHORT, TYPE_FLOAT and TYPE_DOUBLE.
- 
- 2004-04-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am (java_source_files): Added
- 	java/awt/image/DataBufferDouble.java,
- 	java/awt/image/DataBufferFloat.java,
- 	java/awt/image/DataBufferShort.java and
- 	java/awt/image/PixelInterleavedSampleModel.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-04-19  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* gcj/cni.h (JvAllocObject): Remove these obsolete,
- 	undocumented CNI calls.
- 	* include/java-interp.h (_Jv_InterpClass): No longer
- 	extends java.lang.Class.
- 	* java/lang/Class.h (Class): Add new field `aux_info'.
- 	* boehm.cc (_Jv_MarkObj): Update java.lang.Class marking.
- 	* defineclass.cc: Remove Class<->_Jv_InterpClass casts.
- 	Use Class->aux_info instead.
- 	* jni.cc (_Jv_JNI_AllocObject): Use _Jv_AllocObject.
- 	* resolve.cc: Remove Class<->_Jv_InterpClass casts.
- 	Use Class->aux_info instead.
- 	* java/io/natObjectInputStream.cc (allocateObject): Use
- 	_Jv_AllocObject.
- 	* java/lang/natClass.cc (newInstance): Likewise.
- 	* java/lang/natClassLoader.cc (_Jv_NewClass): Likewise.
- 	* java/lang/natObject.cc (clone): Likewise.
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Likewise.
- 	* java/lang/natVMClassLoader.cc (defineClass): Don't use
- 	JvAllocObject. Allocate klass->aux_info here for interpreted
- 	class.
- 
- 2004-04-17  Mark Wielaard  <mark@klomp.org>
- 
- 	* javax/swing/JToggleButton.java (ToggleButtonModel):
- 	Make public static inner class.
- 	* javax/swing/JTabbedPane.java (setComponentAt):
- 	Call Page.setComponent().
- 	(SCROLL_TAB_LAYOUT): Make public, value is 1.
- 	(WRAP_TAB_LAYOUT): Make public, value is 0.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java (ScrollingButton):
-         Make private static inner class.
- 
- 2004-04-16  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* interpret.cc (_Jv_InterpMethod::run): Update _Jv_AllocObject
- 	arguments to match new signature. Remove FIXME comments.
- 
- 2004-04-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java (connectSignals):
- 	Remove method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c: Remove
- 	unused code.
- 
- 2004-04-02  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Regenerate.
- 	* javax/swing/ImageIcon.java:
- 	(ImageIcon(file)): set description of the icon
- 	to the file name
- 	* javax/swing/JCheckBoxMenuItem.java:
- 	Mostly Implemented. Work in progress.
- 	* javax/swing/JRadioButtonMenuItem.java:
- 	Reimplement constructors to use JToggleButtonModel.
- 	* javax/swing/plaf/basic/BasicIconFactory.java:
- 	(getCheckBoxMenuItemIcon): return check box
- 	icon.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	paint menu item selected only when it is armed and
- 	pressed.
- 
- 2004-04-02  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
- 	(GtkMenuItemPeer): Only connect signals if this isn't a Menu peer.
- 	* java/awt/Component.java
- 	(add): Set the parent of the popup as this component.
- 	* java/awt/PopupMenu.java
- 	(addNotify): Create popup menu when peer is null.
- 	(show): Call addNotify() if peer is null.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_show): Set the button
- 	argument for gtk_menu_popup() as zero. This causes the popup menu to
- 	respond to any mouse button.
- 
- 2004-03-31  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Regenerate.
- 	* javax/swing/JRadioButtonMenuItem.java:
- 	Implemented.
- 	* javax/swing/plaf/basic/BasicIconFactory.java:
- 	(getRadioButtonMenuItemIcon): Return
- 	radio button icon.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	(getPreferredSize): Add size of checkIcon if it
- 	exists.
- 	(installDefaults): Don't initialize checkIcon.
- 	It's value will be set in subclasses.
- 	(uninstallDefaults): remove uninstallation of
- 	checkIcon.
- 	(paint): Moved code to paintMenuItem().
- 	(paintMenuItem): Implemented.
- 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java:
- 	UI delegate for JRadioButtonMenuItem.
- 
- 2004-03-29  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	Corrected position of the accelerator.
- 
- 2004-03-29  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* Makefile.am: Added new file.
- 	* Makefile.in: Regenerate.
- 	* javax/swing/JMenuItem.java: Partly
- 	implemented. Work in progress
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Changed default value of acceleratorDelimiter.
- 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
- 	New class. Partly implemented.
- 
- 2004-03-26  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
- 	(item_activate): Declare label before use.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(gtkSetFont): Removed unused variable label.
- 	(addExposeFilter): Declare variables before use.
- 	(removeExposeFilter): Likewise.
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(ok_clicked): Declare str_fileName before use.
- 
- 2004-03-26  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkMenuPeer.java
- 	(addSeparator): Remove.
- 	* java/awt/Menu.java
- 	(separator): Remove static final MenuItem field.
- 	(separatorLabel): New static final String field.
- 	(addSeparator): Do not use peer method; use add(MenuItem) instead.
- 	Use separatorLabel to denote that it is a separator.
- 	(insertSeparator): Create a new MenuItem with separatorLabel, instead
- 	of reusing the static separator instance, because a MenuItem instance
- 	can't be added more than once without being cloned.
- 	* java/awt/peer/MenuPeer.java
- 	(addSeparator): Remove from interface.
- 
- 2004-03-26  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
- 	(connectSignals): New native method declaration.
- 	(GtkMenuItemPeer): Connect signals if the parent is a Menu.
- 	* java/awt/MenuItem.java
- 	(getActionCommand): Return the label if the action command is not set.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu): Use
- 	gtk_menu_shell_append().
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
- 	(item_activate): Fix argument type.
- 	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create): Do not connect
- 	signal here.
- 	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_connectSignals): New
- 	method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create): Check if a label is
- 	given. Add the menu widget's top-level GtkWindow to the global window
- 	group, so it can grab the pointer.
- 	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem): Use
- 	gtk_menu_shell_append().
- 
- 2004-03-23  Graydon Hoare  <graydon@redhat.com>
- 
- 	* java/text/AttributedString.java
- 	(addAttribute): Fix off-by-one.
- 	(getIterator): Likewise.
- 	* java/text/AttributedStringIterator.java
- 	(getRunLimit): Correct logic.
- 	(getRunStart): Likewise.
- 	(getAttribute): Fix inequality.
- 	(getAttributes): Likewise.
- 	* testsuite/libjava.mauve/xfails: Remove AttributedString xfail.
- 
- 2004-03-23  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
- 	(calculateSizes): Return real width and height.
- 
- 2004-03-23  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
- 	(calculateTabRects): Set the selectedRun before
- 	trying to rotate tabs.
- 
- 2004-03-23  Kim Ho  <kho@redhat.com>
- 
- 	* Makefile.am: New file
- 	* Makefile.in: Regenerate
- 	* java/awt/Graphics.java: (drawRect):
- 	Draw to the correct point.
- 	* javax/swing/DefaultSingleSelectionModel.java
- 	(isSelected): Return true if the selected index
- 	is not -1.
- 	* javax/swing/JLabel.java: Do not change mnemonic
- 	index if text is null.
- 	* javax/swing/JProgressBar.java: Use JComponent's
- 	EventListenerList.
- 	* javax/swing/JScrollBar.java: Ditto.
- 	* javax/swing/JSlider.java: Ditto.
- 	* javax/swing/JTabbedPane.java: Reimplement.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Add defaults for TabbedPane.
- 	* javax/swing/plaf/basic/BasicArrowButton.java:
- 	Implement
- 	* javax/swing/plaf/basic/BasicProgressBarUI.java:
- 	(paintDeterminate): Don't paint String if it's
- 	empty.
- 	(paintIndeterminate): ditto.
- 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
- 	Reimplement.
- 
- 2004-03-19  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/image/AffineTransformOp.java
- 	(AffineTransformOp): Made public.
- 	* javax/swing/JComponent.java
- 	(listenerList): Made protected.
- 	(accessibleContext): Likewise.
- 	* javax/swing/JList.java
- 	(valueChanged): Dont use internal fields of ListSelectionEvent.
- 	* javax/swing/JViewport.java
- 	(getView): Dont use internal fields of Component.
- 	(addImpl): Likewise.
- 	* javax/swing/Timer.java
- 	(isRunning): Made public.
- 	(start): Likewise.
- 	(stop): Likewise.
- 	* javax/swing/UIDefaults.java
- 	(getInt): Made public.
- 	* javax/swing/plaf/basic/BasicListUI.java
- 	(mousePressed): Dont use internal fields of MouseEvent.
- 	(propertyChanged): Dont use internal fields of PropertyChangeEvent.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java
- 	(arrowIcon): Made static.
- 	* javax/swing/plaf/basic/BasicViewportUI.java
- 	(stateChanged): Dont use internal field on ChangeEvent.
- 	* javax/swing/text/JTextComponent.java
- 	(getUI): Call UIManager.getUI().
- 	(updateUI): Use getUI().
- 
- 2004-03-19  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/JComponent.java: Turn off double buffer by default.
- 	* javax/swing/plaf/basic/BasicViewportUI.java: Clear rects before painting.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable):
- 	Use cairo to copy areas.
- 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClip):
- 	Initialize and set clip region.
- 
- 2004-03-15  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/applet/Applet.java (preferredSize): Override deprecated
- 	variant of getPreferredSize.
- 	(minimumSize): Override deprecated variant of getMinimumSize.
- 
- 2004-03-15  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(drawImage(img,xform,bgcolor,obs)): New Method.
- 	Helper function that every drawImage method will
- 	use.
- 	(drawRaster): Added new parameter, bgcolor. All
- 	transparent pixels are changed to bgcolor before
- 	image is drawn.
- 	(drawRenderedImage): Fixed to use changed drawRaster().
- 	(drawImage(image,xform,obs): Fixed to use new helper function
- 	(drawImage(image,op,x,y)): Ditto.
- 	(drawImage (img,x,y,observer)): Ditto.
- 	((PainterThread) bgcolor): New Field.
- 	((PainterThread) (setPixels)): Changed all transparent pixels
- 	to bgcolor.
- 	(drawImage(img,x,y,width,height,bgcolor,observer)):
- 	Fixed FIXME - all the transparent pixels are
- 	changed to the specified bgcolor.
- 	(drawImage(img, x, y, width, height, observer): Changed to
- 	use function above.
- 	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,bgcolor,observer)):
- 	Fixed FIXME- changed all transparent pixels to bgcolor.
- 	(drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer)):
- 	Changed to use function above.
- 
- 2004-03-14  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/applet/Applet.java (dimensions): New field.
- 	(getDimensions): New method.
- 	(getPreferredSize): Call getDimensions.
- 	(getMinimumSize): Likewise.
- 
- 2004-03-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/classpath/jcl.c: Include stdlib.h, not malloc.h.
- 	* jni/classpath/jnilink.c: Likewise.
- 
- 	* java/applet/Applet.java (getPreferredSize): New method.
- 	(getMinimumSize): New method.
- 
- 2004-04-15  Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* prims.cc (_Jv_AllocObject): Remove `size' argument.
- 	(_Jv_AllocObjectNoFinalizer): Likewise.
- 	(_Jv_AllocObjectNoInitNoFinalizer): Likewise.
- 	(_Jv_AllocPtrFreeObject): Likewise.
- 	(_Jv_AllocString): Moved from natString.cc. Call collector interface
- 	directly even in the JVMPI case.
- 	* gcj/cni.h (JvAllocObject): Remove `size' argument from
- 	_Jv_AllocObject calls.
- 	* gcj/javaprims.h: Update prototypes.
- 	* gnu/gcj/natCore.cc (_Jv_create_core): Use `new', not _Jv_AllocObject.
- 	* java/lang/Class.h: Update _Jv_AllocObject friend prototype.
- 	* java/lang/natString.cc (_Jv_AllocString): Move to prims.cc.
- 
- 2004-04-14  Andrew Haley  <aph@redhat.com>
-             Bryce McKinlay  <mckinlay@redhat.com>
- 
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Use
- 	_Jv_LookupInterfaceMethodIdx for calls to interfaces.
- 	* include/jvm.h (_Jv_CallAnyMethodA): Add new `iface' arg.
- 
- 	* testsuite/libjava.lang/InvokeInterface.java: New file.
- 	* testsuite/libjava.lang/InvokeInterface.out: New file.
- 
- 2004-04-09  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	* java/lang/VMThrowable.java (getStackTrace): Pass trace as-is to
- 	modified lookup().
- 	* gnu/gcj/runtime/NameFinder.java (lookup): Change to take in a
- 	StackTraceElement directly.
- 	(newElement): New native helper method to create StackTraceElement
- 	bypassing Java access control.
- 	(createStackTraceElement): Use newElement() instead of directly
- 	calling StackTraceElement's constructor.
- 	* gnu/gcj/runtime/natNameFinder.cc (newElement): New method.
- 
- 2004-04-01  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/SecurityManager.java
- 	(checkAwtEventQueueAccess): Implemented.
- 
- 2004-04-01  Gary Benson  <gbenson@redhat.com>
- 
- 	* resolve.cc (_Jv_ResolvePoolEntry): Put field name in exception.
- 	(_Jv_SearchMethodInClass): Likewise.
- 
- 2004-03-26  Peter Moon  <peterm@miraculum.com>
- 
- 	* java/text/NumberFormat.java: Fix spelling of setCurrency
- 	method.
- 
- 2004-03-21  Anthony Green  <green@redhat.com>
- 
- 	* java/lang/natClass.cc (getClassLoader): Circumvent infinite
- 	recursion when searching for the system ClassLoader.
- 
- 2004-03-21  Ito Kazumitsu <kaz@maczuka.gcd.org>
- 
-         * java/net/ServerSocket.java
-         (accept): Close the socket when error occured.
- 
- 2004-03-21  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/net/URI.java (parseURI): Added unquoting.
- 	(unquote): New method.
- 	(quoteAuthority): Implemented.
- 	(quote(String,String)): New method.
- 	(quotePath): Implemented.
- 	(getRawSchemeSpecificPart): Return new rawSchemeSpecificPart field.
- 	(getSchemeSpecificPart): Removed FIXME comment.
- 	(getRawAuthority): Return new rawAuthority field.
- 	(getAuthority): Removed FIXME comment.
- 	(getRawUserInfo): Return new rawUserInfo field.
- 	(getUserInfo): Removed FIXME comment.
- 	(getRawPath): Return new rawPath field.
- 	(getPath): Removed FIXME comment.
- 	(getRawQuery): Return new rawQuery field.
- 	(getQuery): Removed FIXME comment.
- 	(getRawFragment): Return new rawFragment field.
- 	(getFragment): Removed FIXME comment.
- 
- 2004-03-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/URLConnection.java: Merged copyright year with classpath.
- 
- 2004-03-20  Norbert Frese  <postfach@nfrese.net>
- 
- 	* gnu/java/rmi/server/RMIIncomingThread.java: New file.
- 	* gcc/libjava/gnu/java/rmi/server/UnicastConnection.java:
- 	Create a new RMIObjectOuputStream/RMIObjectInputStream for every
- 	rmi-message.
- 	(getObjectInputStream): Return object reference, throw IOException if null.
- 	(startObjectInputStream): Create new RMIObjectInputStream on top of 'din'.
- 	(getObjectOutputStream): Return object reference, throw IOException if null.
- 	(startObjectOutputStream): Create new RMIObjectOutputStream on top of 'dout'.
- 	* gcc/libjava/gnu/java/rmi/server/UnicastConnectionManager.java:
- 	(UnicastConnectionManager): Throw RemoteException if port is not available.
- 	(getInstance): Throw RemoteException.
- 	(run): Lookup client host and attach it to new RMIIncomingThread for later retrieval.
- 	* gcc/libjava/gnu/java/rmi/server/UnicastRef.java:
- 	Start a new RMIObjectInputStream/RMIObjectOutputStream for every rmi-message.
- 	Collect Exceptions which are returned by a rmi-call and fix void returns.
- 	* gcc/libjava/gnu/java/rmi/server/UnicastRemoteCall.java:
- 	Start a new RMIObjectInputStream/RMIObjectOutputStream for every rmi-message.
- 	* gcc/libjava/gnu/java/rmi/server/UnicastServer.java:
- 	(dispatch): Answer ping messages which are sent by other java implementions.
- 	(incomingMessageCall): Start a new RMIObjectInputStream/RMIObjectOutputStream
- 	for every rmi-message and fix void return problems.
- 	* gcc/libjava/gnu/java/rmi/server/UnicastServerRef.java
- 	(UnicastServerRef): Throw RemoteException.
- 	(exportObject): Find the class up the class hierarchy which has a _Stub generated by rmic.
- 	In some situations it is necessary to export a subclass of the class which has the _Stub.
- 	For instance when the class with has the _Stub is abstract.
- 	(findStubSkelClass): New method which looks for the class which has the _Stub.
- 	(getClientHost): Implementated.
- 	* gcc/libjava/java/rmi/server/RemoteServer.java
- 	(getClientHost): Implementated.
- 	* gcc/libjava/Makefile.am (rmi_java_source_files):
- 	Added gnu/java/rmi/server/RMIIncomingThread.java.
- 	* Makefile.in: Regenerated.
- 
- 2004-03-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/InetAddress.java
- 	(getLocalHostname): Added javadoc.
- 
- 2004-03-19  Per Bothner  <per@bothner.com>
- 
- 	* configure.in: FILE variable  overrides FLATFORM when linking
- 	natFileChannelXXX.cc.
- 
- 	* gnu/java/nio/channels/natFileChannelEcos.cc (diag_write):  Restored.
- 	(write):  Call diag_write, as in old natFileDescriptorEcos.cc.
- 
- 2004-03-19  Per Bothner  <per@bothner.com>
- 
- 	* gnu/gcj/convert/Input_UnicodeBig.java:  New class..
- 	* gnu/gcj/convert/Input_UnicodeLittle.java:  New class.
- 	* Makefile.am:  Update accordingly.
- 	* gnu/gcj/convert/IOConverter.java:  Define "utf-16le" and "utf16be"
- 	as aliases for UnicodeLittle and UnicodeBig.
- 
- 2004-03-20  Mark Wielaard  <mark@klomp.org>
- 
- 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getVScrollbarWidth):
- 	Don't access ws when it is null.
- 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight):
- 	Likewise.
- 
- 2004-03-19  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/lang/ThreadGroup.java (list): Changed print to println.
- 
- 2004-03-19  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/io/BufferedReader.java: Use &lt;=, not &lt;&eq; to make gjdoc
- 	happy.
- 
- 2004-02-10  Randolph Chung  <tausq@debian.org>
- 
- 	* configure.in: Build java for hppa target.
- 	* configure: Regenerate.
- 	* libjava/configure.host (hppa-*): Add target.
- 	* libjava/sysdeps/pa/lock.h: New file.
- 
- 2004-03-19  Mark Wielaard  <mark@klomp.org>
- 
- 	Reported by Stephen Crawley
- 	* java/io/FilePermission.java (implies): Use String.length() -1 to
- 	access last char of String.
- 
- 2004-03-19  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/image/AffineTransformOp.java
- 	(AffineTransformOp): Made public.
- 	* javax/swing/JComponent.java
- 	(listenerList): Made protected.
- 	(accessibleContext): Likewise.
- 	* javax/swing/JList.java
- 	(valueChanged): Dont use internal fields of ListSelectionEvent.
- 	* javax/swing/JViewport.java
- 	(getView): Dont use internal fields of Component.
- 	(addImpl): Likewise.
- 	* javax/swing/Timer.java
- 	(isRunning): Made public.
- 	(start): Likewise.
- 	(stop): Likewise.
- 	* javax/swing/UIDefaults.java
- 	(getInt): Made public.
- 	* javax/swing/plaf/basic/BasicListUI.java
- 	(mousePressed): Dont use internal fields of MouseEvent.
- 	(propertyChanged): Dont use internal fields of PropertyChangeEvent.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java
- 	(arrowIcon): Made static.
- 	* javax/swing/plaf/basic/BasicViewportUI.java
- 	(stateChanged): Dont use internal field on ChangeEvent.
- 	* javax/swing/text/JTextComponent.java
- 	(getUI): Call UIManager.getUI().
- 	(updateUI): Use getUI().
- 
- 2004-03-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
- 
- 	* verify.cc: Undef PC.
- 
- 2004-03-18  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/channels/spi/AbstractSelectableChannel.java
- 	(keys): Initialize at declaration.
- 	(locate): keys cant be null.
- 	(add): Removed.
- 	(addSelectionKey): New method.
- 	(removeSelectionKey): New method.
- 	* java/nio/channels/spi/AbstractSelectionKey.java
- 	(cancel): Call AbstractSelector.cancelKey(SelectionKey key).
- 	* java/nio/channels/spi/AbstractSelector.java
- 	(provider): Javadoc added.
- 	(cancelledKeys): Javadoc added.
- 	(cancelKey): Javadoc added, add key to cancelledKeys.
- 	(deregister): Implemented.
- 
- 2004-03-18  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
- 
- 	* gnu/java/nio/channels/natFileChannelPosix.cc (mapImpl): Cast
- 	MAP_FAILED to void *.
- 
- 2004-03-12  Graydon Hoare  <graydon@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Clipping fixes.
- 	* javax/swing/JComponent.java (paint): Use persistent double buffer.
- 	* javax/swing/JList.java (ListListener): Revalidate on changes.
- 	* javax/swing/JScrollPane.java: Reimplement.
- 	* javax/swing/JViewport.java: Reimplement.
- 	* javax/swing/ScrollPaneLayout.java: Reimplement.
- 	* javax/swing/ViewportLayout.java: Tidy up.
- 	* javax/swing/plaf/basic/BasicButtonListener.java: Remove printlns.
- 	* javax/swing/plaf/basic/BasicScrollPaneUI.java: Reimplement.
- 	* javax/swing/plaf/basic/BasicSliderUI.java: Handle missing labels.
- 	* javax/swing/plaf/basic/BasicViewportUI.java: Implement in terms of
- 	backing store only.
- 
- 2004-03-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(window_wm_protocols_filter): New function.
- 	(window_focus_in_cb): Remove function.
- 	(window_focus_out_cb): Likewise.
- 	(window_focus_or_active_state_change_cb): New function.
- 	(create): Add filter that removes WM_TAKE_FOCUS client messages.
- 	(connectSignals): Don't attach handlers to focus-in-event or
- 	focus-out-event signals.  Handle notify signal.
- 
- 2004-03-11  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
- 	(gtkSetLabel): New native method declaration.
- 	(setLabel): Use gtkSetLabel.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetLabel): New method.
- 
- 2004-03-10  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Default to
- 	black when color argument is null.
- 
- 2004-03-10  Kim Ho  <kho@redhat.com>
- 
- 	* java/awt/Container.java: Remove check
- 	for drag events.
- 
- 2004-03-10  Kim Ho  <kho@redhat.com>
- 
- 	* java/awt/Container.java: (visitChild):
- 	Remove candidate clip. Use the component
- 	clip to intersect.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
- 	(handleEvent): Use the PaintEvent's clip.
- 
- 2004-03-10  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
- 	(handleEvent): Don't set the clip for the
- 	Graphics object.
- 
- 2004-03-09  Graydon Hoare  <graydon@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
- 	Fix double <-> fixed macros, reset font transform.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
- 	Likewise.
- 
- 2004-03-09  Kim Ho  <kho@redhat.com>
- 
- 	* java/awt/Container.java: (visitChild): Move
- 	the x and y coordinate of the component rectangle
- 	to correct position.
- 	(handleEvent): Forward drag events to the pressed
- 	component.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
- 	Fix comments.
- 	(ArrowButtonListener::mousePressed): Stop the
- 	existing timer.
- 	(mouseDragged): Implement.
- 	(TrackListener::mousePressed): Only react if
- 	the press doesn't occur on the thumb, otherwise
- 	just set the offset.
- 	(TrackListener::mouseReleased): Unset the isAdjusting
- 	value.
- 	(createIncreaseIcon): Switch icon.
- 	(createDecreaseIcon): Switch icon.
- 	(calculatePreferredSize): Use width.
- 	(getThumbBounds): Use the top as the lower value.
- 	(layoutVScrollBar): Switch the button locations.
- 	(paintIncreaseHighlight): Paint correct side of thumb.
- 	(paintDecreaseHighlight): ditto.
- 	(valueForYPosition): Use top as the lower value.
- 	* javax/swing/plaf/basic/BasicSliderUI.java:
- 	Fix comments.
- 	(mouseDragged): Implement.
- 	(mousePressed): Only react when the thumb isn't
- 	pressed, otherwise just set offset.
- 	(mouseReleased): Handle a release of the thumb.
- 	(scrollDueToClickInTrack): Stop the timer first.
- 	* javax/swing/JProgressBar.java:
- 	(setString): Fix change condition.
- 	* javax/swing/JSeparator.java:
- 	Remove println's.
- 
- 2004-03-08  David Jee  <djee@redhat.com>
- 
- 	* java/awt/image/AffineTransformOp.java:
- 	(filter): Use Graphics2D interface instead of directly using the
- 	GdkGraphics2D peer.
- 
- 2004-03-05  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java
- 	(handleEvent): Action events are generated upon MOUSE_RELEASED.
- 	* java/awt/Container.java
- 	(acquireComponentForMouseEvent): Fixed.
- 	(handleEvent): Fixed.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(state_to_awt_mods_with_button_states): New method.
- 	(pre_event_handler): Fixed mouse event generation.
- 
- 2004-03-05  Olga Rodimina  <rodimina@redhat.com>
- 
- 	gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(GdkGraphics2D (BufferedImage)): Initialize
- 	pixmap associated with specified BufferedImage.
- 	(setPaint): Changed implementation of Texture
- 	Paint to use AffineTransformOp.
- 	* java/awt/image/AffineTransformOp.java
- 	(createCompatibleDestRaster): Throw RasterFormatException
- 	if resulting width or height of raster is 0.
- 
- 2004-03-04  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* java/awt/image/AffineTransformOp.java:
- 	Removed unnecessary field interpolationType.
- 	Formatted some of the lines to be consistent with
- 	the GNU style.
- 	(AffineTransformOp): Create new RenderingHints
- 	containing specified interpolation type.
- 	(createCompatibleDestImage): Implemented.
- 	(createCompatibleDestRaster): Implemented.
- 	(filter): Implemented.
- 	(getBounds2D(BufferedImage)): Implemented.
- 	(getBounds2D(Raster)): Implemented.
- 	(getInterpolationType): Get interpolation value from
- 	rendering hints.
- 
- 2004-03-04  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
- 	(setFont): Check if child peers are null.
- 
- 2004-03-04  Graydon Hoare  <graydon@redhat.com>
- 
- 	* testsuite/lib/libjava.exp (libjava_find_lib): Don't include
- 	.libs in -L option.
- 	(libjava_arguments): Add new libraries to argument list.
- 
- 2004-03-02  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* Makefile.am: Added java/awt/image/AffineTransformOp.java
- 	* Makefile.in: Re-generated.
- 	* java/awt/image/AffineTransformOp.java: New Class.
- 
- 2004-03-01  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(setPaint): Interpret correctly TexturePaint's
- 	anchor rectangle.
- 	(drawImage): Fixed scale factors of the affine
- 	transform.
- 
- 2004-02-27  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics.java
- 	(GdkGraphics(Component)): Inherit font from component.
- 	(drawString): Use font style.
- 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
- 	(gtkSetFont): New native method declaration.
- 	(setFont): New method.
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(gtkSetFont): New native method declaration.
- 	(setFont): Call new native method gtkSetFont.
- 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
- 	(setFont): For all child components who do not their fonts set,
-         set their peers' fonts with this container's font.
- 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java:
- 	Move all native method declarations to the top for readability.
- 	(gtkSetFont): New native method declaration.
- 	(setFont): New method.
- 	* java/awt/Component.java
- 	(setFont): Invalidate after setting the font.
- 	* java/awt/Container.java
- 	(invalidateTree): New method.
- 	(setFont): Invalidate the container tree after setting the font.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
- 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString): Use font style.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetFont): New method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkSetFont): New method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkSetFont): New method.
- 
- 2004-02-27  Olga Rodimina <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(updateBufferedImage): New helper function.
- 	Updates BufferedImage in memory if it was changed.
- 	(draw): changed to update BufferedImage in memory after
- 	this drawing operation
- 	(fill): Ditto.
- 	(draw3DRect): Ditto.
- 	(fill3DRect): Ditto.
- 	(clearRect): Ditto.
- 	(drawRaster): Ditto.
- 	(drawImage) : Ditto. Update only in case of GtkOffScreenImage with
- 	no affine transformation.
- 	(drawGlyphVector): Ditto.
- 
- 2004-02-26  Olga Rodimina <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(isBufferedImageGraphics): New Helper function.
- 	Returns true if this graphics2d can be used to draw
- 	into buffered image and false otherwise.
- 	(updateImagePixels): New Helper function.
- 	Updates pixels in the BufferedImage.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- 	(getImagePixels): New function. Returns pixels
- 	of the buffered image associated with
- 	this Graphics2D.
- 
- 2004-02-26  David Jee  <djee@redhat.com>
- 
- 	* java/awt/BorderLayout.java
- 	(layoutContainer): Fix width and height calculations to ensure
- 	that they're non-negative.
- 	* java/awt/Component.java
- 	(setBackground): If c is null, inherit from closest ancestor whose
- 	background color is set.
- 
- 2004-02-26  Kim Ho  <kho@redhat.com>
- 
- 	* Makefile.am: Add new files.
- 	* Makefile.in: Re-generate.
- 	* javax/swing/JProgressBar.java:
- 	(JProgressBar(int, int int)): Throw
- 	IllegalArgumentException if orientation is
- 	invalid.
- 	(JProgressBar(BoundedRangeModel)): Create
- 	ChangeListener and register it. UpdateUI.
- 	(getChangeListeners): Implement.
- 	(setModel): Reset ChangeListener.
- 	* javax/swing/JScrollBar.java: Implement.
- 	* javax/swing/JSeparator.java: Implement.
- 	* javax/swing/JSlider.java:
- 	(JSlider(int, int, int, int)): Throw
- 	IllegalArgumentException if orientation
- 	is invalid.
- 	(getChangeListeners): Fix method name.
- 	* javax/swing/SwingUtilities.java:
- 	(layoutCompoundLabel): If there is no text,
- 	set the text rectangle dimensions to 0.
- 	* javax/swing/plaf/basic/BasicButtonUI.java:
- 	(paint): If there is no text, don't paint it.
- 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
- 	Implement.
- 	* javax/swing/plaf/basic/BasicSeparatorUI.java:
- 	Implement.
- 	* javax/swing/plaf/basic/BasicSliderUI.java:
- 	(propertyChange): If the model changes, change
- 	the listeners accordingly.
- 
- 2004-02-25  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/AbstractButton.java: Add "final" qualifiers.
- 	* javax/swing/JList.java: Reimplement.
- 	* javax/swing/DefaultListSelectionModel.java: Reimplement.
- 	* javax/swing/plaf/basic/BasicListUI.java: Reimplement.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Add "purple" values.
- 	* javax/swing/ListModel.java: Javadoc.
- 	* javax/swing/ListSelectionModel.java: Add missing methods.
- 	* javax/swing/AbstractListModel.java: Javadoc and corrections.
- 	* javax/swing/DefaultListModel.java: Javadoc and corrections.
- 	* javax/swing/ListModel.java: Javadoc and corrections.
- 	* javax/swing/DefaultListCellRenderer.java: Minor tidying.
- 
- 2004-02-25  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFontPeer.java
- 	(GtkFontPeer): Change default size to 12.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java
- 	(getFontPeer): Change default size to 12.
- 	(getClasspathFontPeer): Likewise. Set default name to "Default".
- 	* java/awt/Font.java
- 	(Font(Map)): Call Font(String,Map).
- 	(Font(String,Map)): If attrs is null, initialize it as an empty
- 	HashMap, which will ensure that the Font will get default attributes.
- 
- 2004-02-25  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFontPeer.java
- 	(GtkFontPeer(String,int)): Call the new constructor with size 1.
- 	(GtkFontPeer(String,int,int)): New constructor with size attribute.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java
- 	(getFontPeer(String,int)): Call the new overload method with size 1.
- 	(getFontPeer(String,int,int)): New method. Overloaded with size
- 	attribute.
- 	(getClasspathFontPeer): Set the size of the font.
- 
- 2004-02-24  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(bimage): New field.
- 	(GdkGraphics2D): New Constructor. Constructs Graphics
- 	object that can be used to draw into the Buffered Image.
- 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
- 	(GdkGraphicsEnvironment): Fixed to include public
- 	keyword.
- 	(createGraphics): Implemented.
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java
- 	(getLocalGraphicsEnvironment): Implemented.
- 	* java/awt/GraphicsEnvironment.java:
- 	(getLocalGraphicsEnvironment): Implemented.
- 	* java/awt/image/BufferedImage.java:
- 	(createGraphics): Implemented.
- 
- 2004-02-24  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Component.java
- 	(eventTypeEnabled): Add MOUSE_MOVED and MOUSE_DRAGGED event types.
- 	* java/awt/Container.java
- 	(addNotifyContainerChildren): Fix event enabling.
- 
- 2004-02-23  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* Makefile.am: Added
- 	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
- 	* Makefile.in: Re-generated.
- 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
- 	New Class.
- 
- 2004-02-19  Kim Ho  <kho@redhat.com>
- 
- 	* Makefile.am: Add BasicProgressBarUI
- 	* Makefile.in: Regenerate.
- 	* javax/swing/JProgressBar.java:
- 	Re-implement.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java
- 	Add constants for JProgressBar.
- 	* javax/swing/plaf/basic/BasicProgressBarUI.java
- 	Implement.
- 	* javax/swing/plaf/basic/BasicSliderUI.java
- 	Change comments.
- 	(calculateGeometry): New method
- 	(paint): Remove unnecessary size calculations.
- 
- 2004-02-18  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(drawRaster): Fixed small error that caused
- 	imageToUser transformation to be set incorrectly.
- 	(toString): Implemented.
- 
- 2004-02-18  David Jee  <djee@redhat.com>
- 
- 	* java/awt/CardLayout.java
- 	(addLayoutComponent): Show the first component added as the default.
- 	(removeLayoutComponent): After removing, show the next component.
- 	(gotoComponent): If there is only one component, show it and return.
- 
- 2004-02-18  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/JSlider.java: Re-order
- 	modifiers.
- 	* javax/swing/JLabel.java: Re-order
- 	modifiers.
- 	* javax/swing/JComponent.java:
- 	(addPropertyChangeListener):
- 	Implement.
- 	(removePropertyChangeListener):
- 	ditto.
- 	(firePropertyChangeEvent):
- 	ditto.
- 
- 2004-02-17  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Component.java
- 	(show): Dispatch ComponentEvent via system event queue.
- 	(hide): Likewise.
- 	(move): Likewise.
- 	(resize): Likewise.
- 	(reshape): Likewise.
- 	* java/awt/Window.java
- 	(setBoundsCallback): Likewise.
- 
- 2004-02-17  David Jee  <djee@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds):
- 	Use gtk_widget_set_size_request() instead of the deprecated
- 	gtk_widget_set_usize().
- 
- 2004-02-17  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/JSlider.java: Fix comments and
- 	make property strings constants.
- 	(createStandardLabels): Use the labels
- 	preferred size as bounds.
- 	* javax/swing/plaf/basic/BasicSliderUI.java
- 	Fix comments.
- 	(ScrollHandler::actionPerformed): Don't
- 	calculate the timer stop value. Let the
- 	MouseListeners find the stop location.
- 	(getPreferredHorizontalSize): Re-implement.
- 	(getPreferredVerticalSize): ditto.
- 	(getMinimumHorizontalSize): ditto.
- 	(getMinimumVerticalSize): ditto.
- 	(getPreferredSize): ditto.
- 	(getMinimumSize): ditto.
- 	(getMaximumSize): ditto.
- 	(paintTicks): Use doubles to find the
- 	tick location.
- 	(paintHorizontalLabel):  Use preferredSize
- 	as initial width and height.
- 	(paintVerticalLabel): ditto.
- 
- 2004-02-17  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/JLabel.java: Changed
- 	property strings to constants.
- 	(DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY):
- 	New property.
- 	(setText): Change mnemonic index if
- 	text is too short.
- 	(setDisplayedMnemonicIndex): Fire property
- 	change event.
- 	(getDisplayedMnemonicIndex): Remove check
- 	against short text.
- 
- 2004-02-17 Olga Rodimina <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
- 	(drawImage(img,xform,obs)): Invert xform before
- 	passing the xform to cairo.
- 	(drawImage(img,x,y,bgcolor,obs)): Implemented.
- 	(drawImage (img,x,y,w,h,bgcolor,obs)): Partly
- 	implemented.
- 	(drawImage (img,x,y,w,h,obs)): Implemented.
- 	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,
- 	bgcolor,obs)): Partly implemented.
- 	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,obs)):
- 	Implemented.
- 	* java/awt/image/BufferedImage.java:
- 	(copyData): if dest is null, create raster with same
- 	dimensions as the current image.
- 
- 2004-02-16  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/plaf/basic/BasicLabelUI.java
- 	(getPreferredSize): Use layoutCL.
- 	* javax/swing/plaf/basic/BasicGraphicsUtils.java
- 	(getPreferredButtonSize): Start with empty view rect, layout using
- 	component's preferred alignment.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Add some Label and
- 	List defaults.
- 
- 2004-02-16  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Component.java
- 	(show): Dispatch COMPONENT_SHOWN ComponentEvent.
- 	(hide): Dispatch COMPONENT_HIDDEN ComponentEvent.
- 	(move): Erase old bounds and repaint new bounds. Dispatch
- 	COMPONENT_MOVED ComponentEvent.
- 	(resize): Erase old bounds and repaint new bounds. Dispatch
- 	COMPONENT_RESIZED ComponentEvent.
- 	(reshape): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
- 	ComponentEvents.
- 	* java/awt/Window.java
- 	(setBoundsCallback): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
- 	ComponentEvents.
- 
- 2004-02-16  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
- 	(setRenderingHint): Added implementation of
- 	Interpolation rendering hints.
- 	(setRenderingHints): Ditto.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
- 	(drawPixels): fixed to allow user to choose type
- 	of filtering that should be used when displaying images.
- 	(cairoSurfaceSetFilter): New method. Sets filter type for
- 	interpolation of pixel values.
- 
- 2004-02-16  David Jee  <djee@redhat.com>
- 
- 	* java/awt/GridBagLayout.java
- 	(calcCellSizes): Rows or columns with zero sizes should still be
- 	considered for extra space distribution.
- 
- 2004-02-16  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/JLabel.java: Re-implement.
- 	* javax/swing/plaf/basic/BasicLabelUI.java
- 	Re-implement.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Added constant.
- 
- 2004-02-16  Kim Ho  <kho@redhat.com>
- 
- 	* javax/swing/JSlider.java: Fix indentation and comments.
- 	(setModel): Remove null check to conform with Sun's.
- 	(setOrientation): Throw exception if not
- 	HORIZONTAL or VERTICAL.
- 	(getInverted): Use private variable instead of
- 	ComponentOrientation.
- 	(setInverted): ditto.
- 	* javax/swing/plaf/basic/BasicSliderUI.java:
- 	Fix indentation and comments.
- 	(propertyChange): Remove check for inverted slider, handle
- 	in main paint.
- 	(getMinimumSize): Return preferred size.
- 	(getMaximumSize): ditto.
- 	(calculateFocusRect): Don't relocate rectangle.
- 	(drawInverted): Return XOR of the slider's inversion and
- 	the component's orientation.
- 	(paint): Update leftToRightCache
- 
- 2004-02-13  David Jee  <djee@redhat.com>
- 
- 	* java/awt/GridBagLayout.java
- 	(GetLayoutInfo): Fix weight and size distribution. Relocate repeated
- 	code to helper methods.
- 	(sortBySpan): New helper method.
- 	(distributeSizeAndWeight): Likewise.
- 	(calcCellWeights): Likewise.
- 	(calcCellSizes): Add comments.
- 
- 2004-02-13  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Component.java
-         (show): Only do something if component is invisible at the moment.
-         (hide): Only do something if component is visible at the moment.
-         (reshape): If lightweight, erase old bounds and repaint new bounds.
- 
- 2004-02-13  Kim Ho  <kho@redhat.com>
- 
- 	* Makefile.am: Updated for new file.
- 	* Makefile.in: Regenerated.
- 	* javax/swing/JSlider.java: Reimplement.
- 	* javax/swing/SwingUtilities.java
- 	(layoutCompoundLabel): Use icon height
- 	instead of width.
- 	(paintComponent): Implement.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
- 	Add JSlider defaults.
- 	* javax/swing/plaf/basic/BasicSliderUI.java:
- 	Implement. New file.
- 
- 2004-03-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/PlainDatagramSocketImpl.java
- 	(RECEIVE_LOCK): New member field.
- 	(SEND_LOCK): New member field.
- 	(send0): New method.
- 	(send): Synchronize on SEND_LOCK.
- 	(receive0): New method.
- 	(receive): Synchronize on RECEIVE_LOCK.
- 	* gnu/java/net/natPlainDatagramSocketImplNoNet.cc,
- 	gnu/java/net/natPlainDatagramSocketImplPosix.cc,
- 	gnu/java/net/natPlainDatagramSocketImplWin32.cc
- 	(send0): Renamed from send.
- 	(receive0): Renamed from receive.
- 2004-03-17  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/natPlainSocketImplPosix.cc
- 	(write): Just call write(jbyteArray, offset, len).
- 	(read): Just call read(jbyteArray, offset, len).
- 
- 2004-03-16  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JTabbedPane.java
- 	(serialVersionUID): New field.
- 
- 2004-03-16  Norbert Frese  <postfach@nfrese.net>
- 
- 	* java/net/InetAddress.java
- 	(getByName): Handle hostname == "" case.
- 
- 2004-03-16  Dalibor Topic  <robilad@kaffe.org>
- 
- 	Reported by: Adam Heath <doogie@debian.org>
- 	* gnu/javax/rmi/CORBA/DelegateFactory.java (getInstance): Use context
- 	class loader.
- 
- 2004-03-15  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/Locale.java: Reverting my last patch
- 	and add a comment why the original version was okay.
- 
- 2004-03-14  Andreas Tobler <a.tobler@schweiz.ch>
- 
- 	* gnu/java/nio/channels/natFileChannelPosix.cc: Implement
- 	munmap_adaptor and msync_adaptor for older POSIX_C_SOURCES specs.
- 	(MappedByteBufferImpl::unmapImpl): Use munmap_adaptor.
- 	(MappedByteBufferImpl::forceImpl): Use msync_adptor.
- 
- 2004-03-12  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/text/DateFormatSymbols.java: Fixed file name in copyright.
- 
- 2004-03-12  Ito Kazumitsu  <ito.kazumitsu@hitachi-cable.co.jp>
- 
- 	* java/net/URI.java (toURL): Implemented.
- 
- 2004-03-12  Ito Kazumitsu  <ito.kazumitsu@hitachi-cable.co.jp>
- 
- 	* java/net/URI.java
- 	(URI_REGEXP) updated to contain scheme specific part.
- 	(SCHEME_SPEC_PART_GROUP) new constant.
- 	(AUTHORITY_GROUP, PATH_GROUP, QUERY_GROUP, FRAGMENT_GROUP)
- 	updated to make room for SCHEME_SPEC_PART_GROUP.
- 	(parseURI) parse scheme specific part.
- 	(resolve, isAbsolute, isOpaque, getRawSchemeSpecificPart,
- 	getSchemeSpecificPart, getAuthority, getUserInfo, getPath,
- 	getQuery, getFragment) implemented.
- 
- 2004-03-12  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* libraries/javalib/java/net/URI.java
- 	partially implemented using java.util.regex.
- 	(URI_REGEXP) new constant. Used to parse URIs.
- 	(SCHEME_GROUP) new constant representing index of scheme group
- 	in parsed URI.
- 	(AUTHORITY_GROUP) new constant representing index of authority
- 	group in parsed URI.
- 	(PATH_GROUP) new constant representing index of path group in
- 	parsed URI.
- 	(QUERY_GROUP) new constant representing index of query group in
- 	parsed URI.
- 	(FRAGMENT_GROUP) new constant representing index of fragment
- 	group in parsed URI.
- 	(getURIGroup) new static utility method.
- 	(parseURI) implemented.
- 	(quote) stub for new static utility method.
- 	(quoteAuthority) stub for new static utility method.
- 	(quoteHost) stub for new static utility method.
- 	(quotePath) stub for new static utility method.
- 	(quoteUserInfo) stub for new static utility method.
- 	(URI) implemented.
- 	(create) don't throw URISyntaxException. Implemented.
- 	(toString) implemented.
- 
- 2004-03-12  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/HttpURLConnection.java
- 	(getResponseCode): Fix another typo in javadoc.
- 
- 2004-03-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/logging/Level.java
- 	(parse): Use String.equals() instead of ==.
- 
- 2004-03-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/jar/Connection.java
- 	(getContentLength): New method.
- 
- 2004-03-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/PlainSocketImpl.java:
- 	Reformated to merge better with classpath's version.
- 
- 2004-03-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/Locale.java
- 	(getISO3Language): Use String.equals() instead of ==.
- 	(getISO3Country): Likewise.
- 
- 2004-03-11  Dalibor Topic  <robilad@kaffe.org>
- 
- 	* java/text/AttributedString.java
- 	(addAttribute(AttributedCharacterIterator.Attribute,Object,int,int)):
- 	Use HashMap instead of Hashtable since value can be null, and
- 	you can not store a null value in a Hashtable.
- 
- 2004-03-11  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/text/AttributedStringIterator.java
- 	(getAllAttributesKey): Return only keys concerned
- 	by the current iterator.
- 	(getAttributes): Use strict inequality for
- 	end_index.
- 
- 2004-03-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/HttpURLConnection.java:
- 	Fixed typo in javadoc.
- 
- 2004-03-11  Guilhem Lavaux  <guilhem@kaffe.org>
- 
- 	* java/io/BufferedInputStream.java (marktarget): New field for max
- 	mark limit.
- 	(CHUNKSIZE): New constant for incremental mark buffer allocation.
- 	(mark): Use new fields.
- 	(read): Likewise.
- 	(read(byte[],int,int)): Likewise.
- 	(skip): Likewise.
- 	(refill): Likewise.
- 
- 2004-03-11  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/beans/BeanDescriptor.java (BeanDescriptor):
- 	Set the FeatureDescriptor programmatic name.
- 
- 2004-03-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/channels/natFileChannelEcos.cc: Totally reworked.
- 	This file was was just copied form java/io/natFileDescriptorEcos.cc
- 	and never changed to compile correctly.
- 
- 2004-03-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/PipeImpl.java
- 	(SourceChannelImpl): Made final.
- 	(read): Implemented.
- 	(SinkChannelImpl): Made final.
- 	(write): Implemented.
- 
- 2004-03-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/PlainDatagramSocketImpl.java:
- 	Reformated to match classpath's version more.
- 
- 2004-03-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/ClasspathFontPeer.java:
- 	Fixed javadoc to be correct xhtml.
- 	* gnu/java/awt/peer/gtk/GtkArgList.java
- 	(add): Use Boolean.valueOf() instead of new Boolean().
- 
- 2004-03-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Thread.java
- 	(runnable): Moved around.
- 	(daemon): Renamed from daemon_flag.
- 	(contextClassLoader): Renamed from context_class_loader.
- 	(Thread): Reordered constructors.
- 	(activeCount): Use group directly.
- 	(destroy): Make it a java method. Throw NoSuchMethodError like Sun does.
- 	(holdsLock): Reworked javadoc.
- 	(setDaemon): Reworked.
- 	* java/lang/natThread.cc
- 	(destroy): Removed.
- 
- 2004-03-08  Anthony Green  <green@redhat.com>
- 
- 	* Makefile.am: Build property resource files into libgcj.
- 	* Makefile.in: Rebuilt.
- 	* java/util/regex/Matcher.java, java/util/regex/Pattern.java,
- 	java/util/regex/PatternSyntaxException.java,
- 	gnu/regexp/CharIndexed.java,
- 	gnu/regexp/CharIndexedCharArray.java,
- 	gnu/regexp/CharIndexedInputStream.java,
- 	gnu/regexp/CharIndexedReader.java,
- 	gnu/regexp/CharIndexedString.java,
- 	gnu/regexp/CharIndexedStringBuffer.java, gnu/regexp/RE.java,
- 	gnu/regexp/REException.java,
- 	gnu/regexp/REFilterInputStream.java,
- 	gnu/regexp/REFilterReader.java, gnu/regexp/REMatch.java,
- 	gnu/regexp/REMatchEnumeration.java, gnu/regexp/RESyntax.java,
- 	gnu/regexp/REToken.java, gnu/regexp/RETokenAny.java,
- 	gnu/regexp/RETokenBackRef.java, gnu/regexp/RETokenChar.java,
- 	gnu/regexp/RETokenEnd.java, gnu/regexp/RETokenEndSub.java,
- 	gnu/regexp/RETokenLookAhead.java,
- 	gnu/regexp/RETokenOneOf.java, gnu/regexp/RETokenPOSIX.java,
- 	gnu/regexp/RETokenRange.java, gnu/regexp/RETokenRepeated.java,
- 	gnu/regexp/RETokenStart.java,
- 	gnu/regexp/RETokenWordBoundary.java,
- 	gnu/regexp/UncheckedRE.java: Files merged from GNU Classpath.
- 
- 2004-03-03  Per Bothner  <per@bothner.com>
- 
- 	* java/nio/channels/Channels.java (newInputStream, newOutputStream):
- 	Optimize when argument is a FileChannelImpl.
- 	(newInputStream(FileChannelImpl), newOutputStream(FileChannelImpl)):
- 	New native methods.
- 	* java/nio/channels/natChannels.cc:  New file for new native methods.
- 	* Makefile.am:  Update accordingly.
- 
- 2004-03-02  Jan Hubicka  <jh@suse.cz>
- 
- 	* configure.host: Pass -fno-omit-frame-pointer for i386.
- 	* configure.in: Likewise.
- 	* configure: Regenerate.
- 
- 2004-03-01  Per Bothner  <per@bothner.com>
- 
- 	* java/lang/natPosixProcess.cc (startProcess):  Fix thinko.
- 
- 2004-02-29  Per Bothner  <per@bothner.com>
- 
- 	* java/nio/channels/FileChannelImpl.java:  Moved to package
- 	gnu/java/nio/channels, since we need to refer to it from java.io.
- 	* java/nio/channels/natFileChannelImpl.cc:  Removed file.
- 	* gnu/java/nio/channels/FileChannelImpl.java:  New class, renamed
- 	from java/nio/channels.  Don't depend on FileDescriptor.
- 	(in, out, err):  New static fields.
- 	(mode):  New field.
- 	(SET, CUR, READ, WRITE, APPEND, EXCL, SYNC, DSYNC):  Moved constants
- 	from FileDescriptor.
- 	(by):  Removed MappedByteBuffer field.
- 	(map):  New working implementation.
- 	* gnu/java/nio/channels/natFileChannelPosix.cc:  New file, though
- 	some code "ported" from natFileDescriptoPosix.cc.
- 	* gnu/java/nio/channels/natFileChannelEcos.cc:  Likewise.
- 	* gnu/java/nio/channels/natFileChannelWin32.cc  Likewise.
- 	* java/io/FileDescriptor.java:  Implement on top of FileChannel.
- 	Remove native methods.
- 	* Makefile.am, configure.in:  Updated accordingly.
- 
- 	* gnu/java/nio/FileLockImpl.java (fd):  Remove field, replacing it by:
- 	(ch):  New FileChannelImpl field.  Update constructor to match.
- 	(releaseImpl):  Remove native method.  Instead ...
- 	(release):  Call unlock on channel.
- 	* gnu/java/nio/natFileLockImpl.cc:  Removed file.
- 
- 	* java/io/natFileDescriptorEcos.cc:  Remove file.
- 	* java/io/natFileDescriptorPosix.cc:  Remove file.
- 	* java/io/natFileDescriptorWin32.cc:  Remove file.
- 	* java/io/FileInputStream.java (ch):  Change type to FileChannelImpl.
- 	(<init>(File)):  Allocate a FileChannelImpl, not a FileDescriptor.
- 	(<init>(FileChannelImpl)):  New package-private constructor.
- 	(<init>(FileDescriptor)):  Extract FileChannelImpl from arg.
- 	(available, close, read, skip):  Implement using FileChannelImpl.
- 	(getFD):  Allocate FileDescriptor if needed.
- 	(getChannel):  Is now trivial.
- 	* java/io/FileOutputStream.java:  Corresponding changes.
- 	* java/io/RandomAccessFile.java:  Corresponding changes.
- 
- 	* java/nio/MappedByteBuffer.java: (forceImpl, isLoadedImpl, loadImpl,
- 	unmapImpl):  New dummy methods, to be overridden by subclass.
- 	(finalize, isLoaded, load, force):  New methods.
- 	* java/nio/MappedByteBufferImpl.java:  More-or-less rewrite.
- 	Now works, at least for read mapping.
- 
- 	* java/lang/natPosixProcess.cc (startProcess):  Implement standard
- 	streams using FileChannelImpl, not FileDescriptor.
- 	* java/lang/natWin32Process.cc (startProcess):  Likewise.
- 
- 2004-02-28  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/ObjectInputStream.java: Compile fix, damn I commited the
- 	wrong code.
- 
- 2004-02-28  Guilhem Lavaux <guilhem@kaffe.org>
- 
- 	* java/io/ObjectInputStream.java
- 	(readClassDescriptor): Keep elements of the mapping non null.
- 	(checkTypeConsistency): New method.
- 	(readFields): Fixed main loop and base logic. Small reindentation.
- 	* java/io/ObjectStreamField.java
- 	(lookupField): New method to update the field reference.
- 	(checkFieldType): New method.
- 	* java/io/ObjectStreamClass.java
- 	(setClass, setFields): Call lookupField when building the field
- 	database. Check the real field type.
- 
- 2004-02-28  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/nio/ByteOrder.java
- 	(nativeOrder): Use equals() to compare strings.
- 
- 2004-02-26  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/FileLockImpl.java
- 	(finalize): Made protected.
- 	* java/nio/channels/FileChannel.java
- 	(MapMode.READ_ONLY): Made final.
- 	(MapMode.READ_WRITE): Made final.
- 	(MapMode.PRIVATE): Made final.
- 	* java/nio/channels/SocketChannel.java
- 	(open): Simplified code.
- 	* java/nio/channels/spi/AbstractSelectableChannel.java
- 	(registered): Unused, removed.
- 	(keyFor): Check channel is open, only locate key
- 	and not add a new one.
- 	(register): Don't delete attachments.
- 
- 2004-02-26  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/ComponentDataBlitOp.java
- 	(INSTANCE): Made final.
- 	* gnu/java/awt/image/ImageDecoder.java:
- 	Reworked imports.
- 	(cm): Unused, removed.
- 
- 2004-02-26  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/DatagramChannelImpl.java
- 	(send): Check if target address is resolved.
- 
- 2004-02-26  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am: Generate and install headers for inner classes in
- 	java.nio.channels.Pipe and gnu.java.nio.PipeImpl.
- 	* Makefile.in: Regenerated.
- 
- 2004-02-24  Anthony Green  <green@redhat.com>
- 
- 	* java/lang/StringBuffer.java: No need to NULL out remainder of
- 	buffer since ensureCapacity_unsynchronized will have done this for
- 	us.
- 
- 2004-02-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/jar/Handler.java
- 	(): Removed unneeded check for file != null. java.net.URL.getFile()
- 	returns an empty string but never null.
- 
- 2004-02-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/gcj/convert/Convert.java
- 	(main): Use equals() to compare strings.
- 
- 2004-02-20  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractButton.java: Made several constants final.
- 	(getRolloverSelectedIcon): Made public.
- 	(getSelectedIcon): Made public.
- 
- 2004-02-16  Per Bothner  <per@bothner.com>
- 
- 	* java/nio/CharBufferImpl.java:  Inline super constructor.
- 	* java/nio/DoubleBufferImpl.java:  Likewise.
- 	* java/nio/FloatBufferImpl.java:  Likewise.
- 	* java/nio/IntBufferImpl.java:  Likewise.
- 	* java/nio/LongBufferImpl.java:  Likewise.
- 	* java/nio/ShortBufferImpl.java:  Likewise.
- 	* java/nio/CharBuffer.java:  Remove unused constructor.
- 	* java/nio/DoubleBuffer.java:  Likewise.
- 	* java/nio/FloatBuffer.java:  Likewise.
- 	* java/nio/IntBuffer.java:  Likewise.
- 	* java/nio/LongBuffer.java:  Likewise.
- 	* java/nio/ShortBuffer.java:  Likewise.
- 	* java/nio/CharViewBufferImpl.java:  New convenience constructor.
- 	Fix buggy call to super constructor.
- 	* java/nio/DoubleViewBufferImpl.java:  Likewise.
- 	* java/nio/FloatViewBufferImpl.java:  Likewise.
- 	* java/nio/IntViewBufferImpl.java:  Likewise.
- 	* java/nio/LongViewBufferImpl.java:  Likewise.
- 	* java/nio/ShortViewBufferImpl.java:  Likewise.
- 
- 	* java/nio/ByteBuffer.java (endian):  Make non-private so other
- 	java.nio classes can inherit it.
- 	(<init>):  Don't bother clearing array_offset.
- 	* java/nio/ByteBuffer.java (allocate):  Re-implement using wrap.
- 	* java/nio/ByteBuffer.java (get(byte[],int,int)):  Check underflow.
- 	Remove redundant test.
- 
- 	* java/nio/ByteBufferImpl.java (asCharBuffer, asShortBuffer,
- 	asIntBuffer, asLongBuffer, asFloatBuffer, asDoubleBuffer):
- 	Use new XxxViewBufferImpl constructors.
- 	* java/nio/MappedByteBufferImpl.java:  Likewise.
- 	* java/nio/DirectByteBufferImpl.java:  Likewise.
- 
- 	* java/nio/ByteBufferImpl.java:  Remove one constructor.
- 	Inline super in remaining constructor.
- 	* java/nio/ByteBuffer.java:  Remove unused constructor.
- 
- 	* java/nio/ByteBufferImpl.java (shiftDown):  New optimized method.
- 
- 	* java/nio/ByteBufferImpl.java (get, put):  Add array_offset.
- 	* java/nio/DirectByteBufferImpl.java (owner):  New field.
- 	(offset):  Remove unused field.
- 	(<init>):  Modify one and add another constructor.  Change callers.
- 	(allocateDirect):  Removed - not used.
- 	(getImpl, putImpl):  Make static and pass address explicitly,
- 	to make them useful for MappedByteBufferImpl.
- 	(get, put):  Check for underflow.  Modify for new getImpl.
- 	(getImpl):  New native method where target is array.
- 	(get(byte[],int,int)):  Use the above.
- 	(adjustAddress):  New static native method.
- 	(slice, duplicate, asReadOnly):  New implementations.
- 	* java/nio/natDirectByteBufferImpl.cc (getImpl, putImpl, shiftDown,
- 	adjustAddress):  New or updated native methods.
- 
- 2004-02-15  Ito Kazumitsu  <kaz@maczuka.gcd.org>
- 
- 	* java/io/ObjectInputStream.java (readClassDescriptor): Avoid the
-         overflow of fieldmapping.
- 
- 2004-02-14  Sascha Brawer  <brawer@dandelis.ch>
- 
- 	* javax/swing/undo/UndoManager.java: Re-written from scratch.
- 
- 2004-02-14  Per Bothner  <per@bothner.com>
- 
- 	* java/nio/channels/spi/AbstractInterruptibleChannel.java (close):
- 	Set closed before calling implCloseChannel, as in the spec.
- 
- 2004-02-09  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/ToggleButtonModel.java: Remove dead class.
- 	* javax/swing/plaf/basic/BasicDefaults.java: Remove dead class.
- 	* javax/swing/plaf/basic/BasicButtonListener.java: New class.
- 	* javax/swing/plaf/basic/BasicRootPaneUI.java: New class.
- 	* Makefile.am: Update for new and removed files.
- 	* Makefile.in: Regenerate.
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Initialize default hints.
- 	* javax/swing/AbstractButton.java
- 	(AbstractButton): Initialize fields correctly in ctor.
- 	* javax/swing/JCheckbox.java
- 	(JCheckBox): Override painting flags.
- 	* javax/swing/DefaultButtonModel.java: Conform to sun.
- 	* javax/swing/JComponent.java (paint): Fill with background color
- 	if available.
- 	(processComponentKeyEvent)
- 	(processFocusEvent)
- 	(processKeyEvent)
- 	(processMouseMotionEvent): Remove event-consuming empty methods.
- 	(getUIClassID): Return "ComponentUI" not "JComponent"
- 	* javax/swing/JFrame.java: Remove some debugging chatter.
- 	(JFrame): Subscribe to window events.
- 	* javax/swing/JRadioButton.java
- 	(JRadioButton): Override painting flags.
- 	* javax/swing/JRootPane.java
- 	(JRootPane): Set background from UIDefaults.
- 	* javax/swing/JToggleButton.java
- 	(ToggleButtonModel): New inner class.
- 	(JToggleButton): Override layout alighment.
- 	* javax/swing/SwingUtilities.java:
- 	(getLocalBounds): Return width and height, not x and y.
- 	(calculateInnerArea): Use local bounds, not bounds.
- 	(layoutCompoundLabel): Provide overridden form.
- 	(layoutCompoundLabel): Correct bugs.
- 	* javax/swing/UIDefaults.java: Correct comment.
- 	* javax/swing/plaf/basic/BasicButtonUI.java:
- 	Move most logic into defaults, external listener.
- 	(paintIcon): Implement icon painting.
- 	(paint): Fix state painting to conform to changes in model.
- 	* javax/swing/plaf/basic/BasicCheckBoxUI.java:
- 	Remove most dead/wrong methods.
- 	(getDefaultIcon): Return defaults.getIcon("CheckBox.icon").
- 	* javax/swing/plaf/basic/BasicIconFactory.java:
- 	(DummyIcon): New class.
- 	(getMenuItemCheckIcon)
- 	(getMenuItemArrowIcon)
- 	(getMenuArrowIcon)
- 	(getCheckBoxMenuItemIcon)
- 	(getRadioButtonMenuItemIcon)
- 	(createEmptyFrameIcon): Return DummyIcons, not null.
- 	(getCheckBoxIcon): Implement an icon that looks like sun's.
- 	(getRadioButtonIcon): Implement an icon that looks like sun's.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java
- 	(initComponentDefaults): Fix impossible values, add some missing.
- 	* javax/swing/plaf/basic/BasicPanelUI.java (gap): Remove field.
- 	* javax/swing/plaf/basic/BasicRadioButtonUI.java:
- 	Remove most dead/wrong methods.
- 	(icon): New field.
- 	(getDefaultIcon): New method.
- 	* javax/swing/plaf/basic/BasicToggleButtonUI.java:
- 	Remove most dead/wrong methods.
- 	* javax/swing/plaf/metal/MetalLookAndFeel.java
- 	(getDefaults): Return super.getDefaults(), not BasicDefaults.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
- 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect):
- 	Implement "clearing" as drawing, when on pixmap drawables.
- 
- 	* javax/swing/JButton.java (getUIClassID):
- 	* javax/swing/JCheckBox.java (getUIClassID):
- 	* javax/swing/JEditorPane.java (getUIClassID):
- 	* javax/swing/JLabel.java (getUIClassID):
- 	* javax/swing/JList.java (getUIClassID):
- 	* javax/swing/JOptionPane.java (getUIClassID):
- 	* javax/swing/JPanel.java (getUIClassID):
- 	* javax/swing/JPasswordField.java (uiClassID):
- 	* javax/swing/JRadioButton.java (getUIClassID):
- 	* javax/swing/JRootPane.java (getUIClassID):
- 	* javax/swing/JScrollPane.java (getUIClassID):
- 	* javax/swing/JTabbedPane.java (getUIClassID):
- 	* javax/swing/JToggleButton.java (getUIClassID):
- 	* javax/swing/JTree.java (getUIClassID):
- 	* javax/swing/JViewport.java (getUIClassID):
- 	* javax/swing/text/JTextComponent.java (getUIClassID):
- 	Return "fooUI" not "Jfoo"
- 
- 2004-02-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/DatagramSocket.java
- 	(setReuseAddress): Use Boolean.valueOf() instead of creating a new
- 	Boolean object.
- 	(setBroadcast): Likewise.
- 	* java/net/MulticastSocket.java
- 	(setLoopbackMode): Likewise.
- 	* java/net/ServerSocket.java
- 	(setReuseAddress): Likewise.
- 	* java/net/Socket.java
- 	(setTcpNoDelay): Likewise.
- 	(setSoLinger): Likewise.
- 	(setOOBInline): Likewise.
- 	(setKeepAlive): Likewise.
- 	(setReuseAddress): Likewise.
- 	* java/net/URLConnection.java
- 	(setContentHandler): Replace == with equals().
- 	* java/net/URLStreamHandler.java
- 	(hostSEquals): Fix checking host addresses.
- 	(toExternalForm): Dont check protocol for null. We know already its
- 	not null.
- 
- 2004-02-10  David Jee  <djee@redhat.com>
- 
- 	* java/awt/BorderLayout.java
- 	(calcCompSize): Invisible components get zero dimensions.
- 	* java/awt/Button.java
- 	(setLabel): Set actionCommand.
- 	* java/awt/Component.java
- 	(show): Invalidate component and parent container.
- 	(hide): Likewise.
- 
- 2004-02-10  David Jee  <djee@redhat.com>
- 
- 	* java/awt/GridBagLayout.java
- 	(GridBagLayout): New private field, internalcomptable.
- 	(lookupInternalConstraints): New method.
- 	(ArrangeGrid): Use components' MINSIZE. Use internalcomptable.
- 	(GetLayoutInfo): Reimplement.
- 	(calcCellSizes): Ignore rows/columns with size 0.
- 
- 2004-02-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/EmbeddedWindow.java
- 	(setHandle): Use java.awt.Component.getPeer() instead of
- 	java.awt.Component.peer directly.
- 
- 2004-02-10  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java
- 	(gtkSetLabel): New native method definition.
- 	(setLabel): Use gtkSetLabel.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetLabel): New method.
- 
- 2004-02-10  Alan Modra  <amodra@bigpond.net.au>
- 
- 	* include/powerpc-signal.h: Revert 2004-01-21 change.
- 	(INIT_SEGV, INIT_FPE): Provide powerpc64 versions.  Check return
- 	from syscall for ppc32 versions.
- 
- 2004-02-08  Per Bothner  <per@bothner.com>
- 
- 	* java/nio/ByteBuffer.java (shiftDown):  New helper method.
- 	* java/nio/natDirectByteBufferImpl.cc (shiftDown):  New implementation.
- 	* java/nio/ByteBufferImpl.java (compact):  Use new shiftDown method.
- 	* sava/nio/ByteBufferHelper.java:  Remove redundant 'final' specifiers.
- 	Pass ByteOrder parameter to most methods, since the underlying
- 	ByteBuffer's order isn't always what we should use.
- 	* java/nio/ByteBufferImpl.java:  Pass byte-order various places.
- 	* java/nio/DirectByteBufferImpl.java:  Likewise.
- 	Use ByteBufferHelper methods.
- 	* java/nio/MappedByteBufferImpl.java:  Likewise.
- 	(compact):  Use shiftDown.
- 	* java/nio/CharViewBufferImpl.java (<init>):  Pass byte-order.
- 	(get, put):  Use ByteBufferHelper.
- 	(compact):  Use new shiftDown method.
- 	(duplicate(boolean)):  New helper method.
- 	(duplicate, asReadOnlyBuffer):  Use it.
- 	(order):  Return endian field.
- 	* java/nio/DoubleViewBufferImpl.java:  Likewise.
- 	* java/nio/FloatViewBufferImpl.java:  Likewise.
- 	* java/nio/IntViewBufferImpl.java:  Likewise.
- 	* java/nio/LongViewBufferImpl.java:  Likewise.
- 	* java/nio/ShortViewBufferImpl.java:  Likewise.
- 	* java/nio/CharViewBufferImpl.java (subsequence):  Redundant test.
- 	* java/nio/DirectByteBufferImpl.java (shiftDown):  New native method.
- 	(compact):  Re-implement using shiftDown.
- 
- 2004-02-08  Andreas Jaeger  <aj@suse.de>
- 
- 	* include/x86_64-signal.h: Fix typo.
- 
- 2004-02-08  Diego Novillo  <dnovillo@redhat.com>
- 
- 	* include/i386-signal.h (MAKE_THROW_FRAME): Add volatile
- 	qualifier to _regs.
- 	(HANDLE_DIVIDE_OVERFLOW): Likewise.
- 
- 2004-02-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/ObjectInputStream.java
- 	(currentClassLoader): Reverted to old version of this method.
- 
- 2004-02-06  Jeroen Frijters  <jeroen@frijters.net>
- 
- 	* java/io/ObjectInputStream.java: Made all calls
- 	to dumpElement[ln] conditional on dump flag. (readObject): Changed to
- 	use cached info from ObjectStreamClass. (readClassDescriptor):
- 	Cache more information in ObjectStreamClass. (processResolution,
- 	readFields): Use cached info from ObjectStreamClass.
- 	(newObject): Throw exception instead of returning null for failure.
- 	(getField, getMethod, callReadMethod, setBooleanField, setByteField,
- 	setCharField, setDoubleField, setFloatField, setIntField,
- 	setLongField, setShortField, setObjectField, readObjectParams):
- 	Removed. (dumpElement, dumpElementln): Removed dump flag condition
- 	check.
- 	* java/io/ObjectStreamField.java (hasReadMethod): Removed.
- 	(setClass): Added call to cacheMethods() (findMethod): New method.
- 	(cacheMethods): New method. (ObjectStreamClass): Added call to
- 	cacheMethods(). (setFields): Cache fields. (getClassUID): Use
- 	AccessController.doPrivileged to invoke setAccessible.
- 	(readObjectMethod, readResolveMethod, realClassIsSerializable,
- 	realClassIsExternalizable, fieldMapping, firstNonSerializableParent):
- 	New fields.
- 	* java/io/ObjectStreamField.java (ObjectStreamField): New constructor.
- 	(ObjectStreamField): Removed FIXME workaround. (getTypeString,
- 	isPrimitive): Made safe for cases where type == null.
- 	(setBooleanField, setByteField, setCharField, setShortField,
- 	setIntField, setLongField, setFloatField, setDoubleField,
- 	setObjectField): New methods.
- 
- 2004-02-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/Component.java (getFont): Return a default font
- 	instead of null.
- 
- 	* java/awt/Scrollbar.java (next_scrollbar_number): New field.
- 	(Scrollbar (int, int, int, int, int)): Make default page
- 	increment 10.
- 	(setValues): Only call peer.setValues if one of the values has
- 	changed.
- 	(generateName): New method.
- 	(getUniqueLong): New method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
- 	(range_scrollbar): Remove structure.
- 	(post_adjustment_event): Remove function.
- 	(post_change_event): Accept jobject argument.
- 	(create): Cast jints to gdoubles.  Round scrollbar values to the
- 	nearest integer.  Clamp min, max and value settings.
- 	(connectJObject): Connect hook to widget->window.
- 	(connectSignals): Remove range_scrollbar structure variables.
- 	Remove "move-slider" connection.  Pass global peer reference to
- 	"value-changed" callback.
- 	(setLineIncrement): Cast jint value to gdouble.
- 	(setPageIncrement): Likewise.
- 	(setValues): Likewise.  Clamp min, max and value settings.
- 
- 2004-02-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractCellEditor.java
- 	(getCellEditorValue): Removed.
- 	* javax/swing/Box.java: Reformated.
- 	(serialVersionUID): New field.
- 	* javax/swing/ButtonGroup.java:
- 	Removed some weird whitespace.
- 	* javax/swing/CellEditor.java: Reformated.
- 	* javax/swing/CellRendererPane.java
- 	(serialVersionUID): New field.
- 	(AccessibleCellRendererPaneserialVersionUID): New field.
- 	* javax/swing/DefaultListModel.java
- 	(serialVersionUID): New field.
- 	* javax/swing/JEditorPane.java
- 	(serialVersionUID): New field.
- 	(setPage): Throws IOException.
- 	(addHyperlinkListener): Implemented.
- 	(removeHyperlinkListener): Implemented.
- 	(getHyperlinkListener): New method.
- 	* javax/swing/JFileChooser.java
- 	(serialVersionUID): New field.
- 	(AccessibleJFileChooser.serialVersionUID): New field.
- 	(addActionListener): Implemented.
- 	(removeActionListener): Implemented.
- 	(getActionListeners): New method.
- 	* javax/swing/JFormattedTextField.java
- 	(serialVersionUID): New field.
- 	(AbstractFormatter.serialVersionUID): New field.
- 	(clone): Throws CloneNotSupportedException
- 	(setEditValid): Add missing argument.
- 	(stringToValue): Throws ParseExcpetion.
- 	(valueToString): Throws ParseException.
- 	(commitEdit): Throws ParseException.
- 	* javax/swing/JLabel.java
- 	(serialVersionUID): New field.
- 	* javax/swing/JList.java
- 	(serialVersionUID): New field.
- 	(addListSelectionListener): Reformated.
- 	(removeListSelectionListener): Reformated.
- 	(getListSelectionListeners): New method.
- 	* javax/swing/colorchooser/AbstractColorChooserPanel.java:
- 	Reformated.
- 	(serialVersionUID): New field.
- 	* javax/swing/table/AbstractTableModel.java
- 	(getValueAt): Removed.
- 	(getColumnCount): Removed.
- 	(getRowCount): Removed.
- 
- 2004-02-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/datatransfer/DataFlavor.java
- 	(imageFlavor): Javadoc added.
- 	(javaJVMLocalObjectType): Fixed.
- 
- 2004-02-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Thread.java
- 	(Thread): Reordered.
- 	(setContextClassLoader): Fixed javadoc comment.
- 	(setPriority): Reordered.
- 	(yield): Reordered.
- 	(initialize_native): Reordered.
- 	(gen_name): Reordered.
- 
- 2004-02-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Thread.java: Reordered fields, reformated much code,
- 	no functional changes, some variables renamed, javadoc comments
- 	merged.
- 
- 2004-02-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/zip/Deflater.java,
- 	java/util/zip/DeflaterOutputStream.java,
- 	java/util/zip/GZIPInputStream.java:
- 	Reformated and javadoc comments merged from classpath.
- 
- 2004-02-05  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/NIOServerSocket.java
- 	(impl): Unused, removed.
- 	* gnu/java/nio/SocketChannelImpl.java
- 	(finnishConnect): Don't throw NoConnectionPendingException if not
- 	connected or no connection pending.
- 
- 2004-02-02  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/SwingUtilities.java: Many new functions.
- 	* java/awt/Container.java (LightweightDispatcher): Reimplement.
- 	* javax/swing/basic/BasicGraphicsUtils.java
- 	(getPreferredButtonSize): Start layout from top-left corner.
- 
- 2004-02-04  Olga Rodimina  <rodimina@redhat.com>
- 
- 	* java/awt/geom/AffineTransform.java:
- 	Corrected comments on the field definitions for
- 	m11 and m10.
- 	(shear): Fixed few errors that caused shear
- 	transformation to be performed incorrectly.
- 	(createInverse): Fixed to return correct
- 	inverse of the given matrix.
- 
- 2004-02-03  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/lang/natPosixProcess.cc (startProcess): Handle case where
- 	PATH or LD_LIBRARY_PATH is not set in parent environment.
- 
- 2004-02-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
- 	java/awt/BorderLayout.java, java/awt/CardLayout.java,
- 	java/awt/CheckboxGroup.java, java/awt/Choice.java,
- 	java/awt/Component.java, java/awt/Container.java,
- 	java/awt/FontMetrics.java, java/awt/GridBagLayout.java,
- 	java/awt/LayoutManager2.java, java/awt/List.java,
- 	java/awt/Menu.java, java/awt/MenuBar.java,
- 	java/awt/MenuItem.java, java/awt/Polygon.java,
- 	java/awt/Rectangle.java, java/awt/ScrollPane.java,
- 	java/awt/Scrollbar.java, java/awt/TextArea.java,
- 	java/awt/TextField.java,
- 	java/awt/image/renderable/RenderContext.java,
- 	javax/swing/JApplet.java: Fix handling of alias methods, where a
- 	method has been deprecated in favour of a new one with the same
- 	funtion but a different name.  Put the method implementation in
- 	the deprecated method and have the new method call the
- 	deprecated one.  Make all other code call the new method.
- 
- 2004-02-03  Mohan Embar  <gnustuff@thisiscool.com>
- 
- 	* gnu/java/nio/DatagramChannelImpl.java
- 	(inChannelOperation): New field.
- 	(isInChannelOperation): New accessor.
- 	(setInChannelOperation): New modifier.
- 	(receive): Use capacity() - position() of destination
- 	buffer instead of remaining(). Set and reset our "in
- 	channel operation indicator" before and after delegating
- 	the receive to our datagram socket. Removed testing code.
- 	Update destination buffer's current position if it is
- 	backed by a byte array (hasArray() is true).
- 	(send): Set and reset our "in channel operation indicator"
- 	before and after delegating the send to our datagram socket.
- 	Removed testing code. Update source buffer's current position
- 	if it is backed by a byte array (hasArray() is true).
- 	* gnu/java/nio/SocketChannelImpl.java (read(ByteBuffer)):
- 	Use capacity() - position() of destination buffer instead
- 	of remaining().
- 	* java/net/DatagramSocket.java (receive): Don't throw an
- 	IllegalBlockingModeException if we have a non-blocking
- 	channel which initiated this operation.
- 	(send): Likewise.
- 
- 2004-02-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* configure.in: Add pkgconfig check for glib and gthread.
- 	* configure: Regenerate.
- 
- 2004-02-01  Michael Koch  <konqueror@gmx.de>
- 
- 	* include/jvm.h (MAYBE_UNUSED): New macro tp mark probably unused
- 	arguments.
- 	* jni.cc (_Jv_LookupJNIMethod): Mark 'args_size' unused.
- 	* verify.cc (debug_print): Mark 'fmt' unused.
- 
- 2004-01-30  Michael Koch  <konqueror@gmx.de>
- 
- 	* configure.in: Use pkg-config to check for GTK 2.2 and libart 2.1.
- 	* configure: Regenerated.
- 	* glib-2.0.m4: Removed.
- 	* gtk-2.0.m4: Removed.
- 	* libart.m4: Removed.
- 	* pkg.m4: New file.
- 
- 2004-01-30  Mohan Embar  <gnustuff@thisiscool.com>
- 
- 	* gnu/java/net/PlainSocketImpl.java
- 	(inChannelOperation): New field.
- 	(isInChannelOperation): New accessor.
- 	(setInChannelOperation): New modifier.
- 	* gnu/java/nio/ServerSocketChannelImpl.java
- 	(accept): Set and reset our server socket's PlainSocketImpl's
- 	"in channel operation" indicator before and after delegating
- 	the accept to our server socket.
- 	* gnu/java/nio/SocketChannelImpl.java
- 	(connect): Set and reset our socket's PlainSocketImpl's "in channel
- 	operation" indicator before and after delegating the operation to
- 	our socket.
- 	(read): Likewise.
- 	(write): Likewise.
- 	* java/net/ServerSocket.java (implAccept): Don't throw an
- 	IllegalBlockingModeException if we have a non-blocking
- 	channel which initiated this accept operation.
- 	* java/net/Socket.java (connect): Don't throw an
- 	IllegalBlockingModeException if we have a non-blocking
- 	channel which initiated this connect operation.
- 	* java/nio/channels/spi/AbstractSelectableChannel.java
- 	(configureBlocking): Only call implConfigureBlocking() if
- 	the desired blocking mode is different from our current one.
- 
- 2004-01-29  Mohan Embar  <gnustuff@thisiscool.com>
- 
- 	* java/io/BufferedReader.java (sbuf): New field.
- 	(readLine): Use String.valueOf instead of new String() as per
- 	Per Bothner's suggestion. Use instance sbuf field instead of a
- 	local StringBuffer instance.
- 	* java/io/InputStreamReader.java (read(char[],int,int)): Pass the
- 	caller's buffer to refill().
- 	(read(void)): Pass our internal work buffer to refill if our
- 	input queue is empty.
- 	(refill): Changed return type to int. Use the specified buffer
- 	instead of our work buffer as per Bryce McKinlay's suggestion.
- 	Return the number of characters read or -1 for EOF.
- 
- 2004-01-29  Scott Gilbertson  <scottg@mantatest.com>
- 
- 	* gnu/awt/xlib/XCanvasPeer.java (handleEvent): Implemented.
- 
- 2004-01-29  Scott Gilbertson  <scottg@mantatest.com>
- 
- 	* Makefile.am: Added gnu/awt/xlib/XFontPeer.java.
- 	* Makefile.in: Re-generated.
- 	* gnu/awt/xlib/XFontPeer.java: New file.
- 	* gnu/awt/xlib/XGraphics.java (setFont): Test for null font.
- 	(setClip): Commented out debug printout.
- 	* gnu/awt/xlib/XToolkit.java: Change superclass to ClasspathToolkit.
- 	(getFontPeer): Return XFontPeer.
- 	(getLocalGraphicsEnvironment): New method.
- 	(getClasspathFontPeer): New method.
- 	(createFont): New method.
- 
- 2004-01-29  Scott Gilbertson  <scottg@mantatest.com>
- 
- 	* gnu/java/awt/peer/ClasspathFontPeer.java (getTransform): Never
- 	return null.
- 
- 2004-01-29  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
- 	(gtkLayoutSetVisible): New method
- 	(setMenuBar): Hide layout before setting MenuBar
- 	and reshow it after.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(gtkLayoutSetVisible): Hide or show the Gtk Layout.
- 
- 2004-01-28  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/lang/ClassHelper.java
- 	(getPackagePortion): Removed.
- 
- 2004-01-28  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JComponent.java
- 	(listenerList): Initalize globally.
- 	(ancestor_list): Removed.
- 	(veto_list): Removed.
- 	(change_list): Removed.
- 	(get_veto_list): Removed.
- 	(get_change_list): Removed.
- 	(get_ancestor_list): Removed.
- 	(removeAncestorListener): Reimplemented.
- 	(removePropertyChangeListener): Likewise.
- 	(removeVetoableChangeListener): Likewise.
- 	(addAncestorListener): Likewise.
- 	(addPropertyChangeListener): Likewise.
- 	(addVetoableChangeListener): Likewise.
- 	(getListeners): New method.
- 	(getAncestorListeners): Likewise.
- 	(getVetoableChangeListeners): Likewise.
- 	(fireVetoableChange): Throws PropertyVetoException.
- 	* javax/swing/JEditorPane.java
- 	(JEditorPane): Throws IOException.
- 
- 2004-01-28  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
- 	(create): Set the default foreground color to
- 	java.awt.SystemColor.windowText.
- 
- 2004-01-27  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java,
- 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java:
- 	Reindented to merge with classpath.
- 
- 2004-01-27  David Jee  <djee@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(addExposeFilter): Handle GtkFramePeer separately.
- 	(removeExposeFilter): Likewise.
- 
- 2004-01-27  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/http/Connection.java
- 	(getOutputStream): Fixed typo.
- 
- 2004-01-27  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Class.java
- 	(getConstructor): Removed SecurityException from throws clause.
- 	(_getConstructors): Likewise.
- 	(getConstructors): Likewise.
- 	(getDeclaredConstructor): Likewise.
- 	(getDeclaredClasses): Likewise.
- 	(getDeclaredConstructors): Likewise.
- 	(getDeclaredField): Likewise.
- 	(getDeclaredMethod): Likewise.
- 	(getDeclaredMethods): Likewise.
- 	(getField): Likewise.
- 	(getMethod): Likewise.
- 	(getMethods): Likewise.
- 
- 2004-01-27  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
- 	(removeMenuBarPeer): Remove MenuBarPeer argument.
- 	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
- 	(dispose): Call native method.
- 	* java/awt/Frame.java (setMenuBar): Create and remove
- 	MenuBar peers only if the Frame has a peer.
- 	(addNotify): Create the MenuBar peer if one exists.
- 	(removeNotify): Remove MenuBar peer if one exists.
- 	* java/awt/Menu.java: Fix imports.
- 	(addNotify): Don't use full class name.
- 	(removeNotify): Call removeNotify on all children.
- 	* java/awt/MenuBar.java (removeNotify): Call
- 	removeNotify on all children.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(removeMenuBarPeer): Remove MenuBarPeer argument.
- 	Iterate through children to find the Frame's MenuBar.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c
- 	New file.
- 	(dispose): Remove references to the MenuComponent.
- 
- 2004-01-27  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractCellEditor.java: Reformated.
- 	* javax/swing/DefaultListSelectionModel.java
- 	(listenerList): Made protected.
- 	(addListSelectionListener): Javadoc added.
- 	(removeListSelectionListener): Likewise.
- 	(getListeners): Likewise.
- 	(getListSelectionListeners): Likewise.
- 	* javax/swing/JComboBox.java: Merged copyright year.
- 	* javax/swing/plaf/basic/BasicGraphicsUtils.java: Merged empty line.
- 
- 2004-01-26  Andrew Haley  <aph@redhat.com>
- 
- 	* javax/swing/table/JTableHeader.java: Extend JComponent
- 
- 2004-01-26  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar):
- 	Fix spacing.
- 
- 2004-01-26  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (moveLayout): New
- 	method.
- 	(setMenuBar): Shift the Gtk layout up/down by the MenuBar
- 	height and let the Layout Managers readjust anything that
- 	needs to move.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(moveLayout): New method. Shift everything in the Gtk
- 	layout in the Y direction by an offset.
- 
- 2004-01-26  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(handleEvent): Implemented. Handles PaintEvents.
- 	(paint): Implemented. Use GTK native methods to queue updates
-         for this heavyweight peer.
- 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
- 	(handleEvent): Removed.
- 	* java/awt/Component.java
- 	(paint): Implemented. Explictly paint the heavyweight peer.
- 	(update): Clear the background for heavyweight components.
- 	(paintAll): No need to call peer.paint() anymore.
- 	(processEvent): Don't process PaintEvents here. It's now done in
- 	the peer's handleEvent().
- 	(processPaintEvent): Removed.
- 	* java/awt/Container.java
- 	(paint): No need to call super.paint(). Visit heavyweight
- 	children as well.
- 	(update): Don't clear the background here.  It's done in
- 	Component.update().
- 	(visitChildren): Added check to not recurse into Containers.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(filter_expose_event_handler): New method.  Filter unwanted
- 	expose events while painting heavyweight peers.
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
- 	New method. Connect filter and block pre_event_handler.
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
- 	New method. Disconnect filter and unblock pre_event_handler.
- 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetQueueDrawArea):
- 	New method. Invalidate and update given area.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(pre_event_handler): Add checks for unwanted expose events.
- 
- 2004-01-26  David Jee  <djee@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(find_bg_color_widget): For GtkButton, return its child.
- 
- 2004-01-26  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (menuBarHeight): Mark
- 	private.
- 	(setMenuBar): Grab MenuBar height and change insets.
- 	(setBounds): Account for MenuBar height.
- 	(postInsetsChangedEvent): Ditto.
- 	(postSizeAllocateEvent): Remove.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(menubar_resize_cb): Remove
- 	(setMenuBarPeer): Remove callback.
- 	(getMenuBarHeight): Use size requisition instead of
- 	allocation.
- 
- 2004-01-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/TextArea.java: Fix indentation.  Flesh out javadocs.
- 	(getMinimumSize (int, int)): Fix FIXME -- return Dimension (0,0)
- 	when peer is null.
- 	(setColumns): Remove FIXME -- peer will retrieve number of
- 	columns by calling getColumns.
- 	(setRows): Likewise for number of rows.
- 	(next_text_number): New field.
- 	(paramString): Fix param string.
- 	(generateName): New method.
- 	(getUniqueLong): New method.
- 
- 2004-01-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkToolkit.java (checkImage): Inform
- 	image observer of image loading status.
- 	(getImage (String)): Start image production.
- 	(getImage (URL)): Likewise.
- 
- 2004-01-25  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Class.java: Imports reworked, reformated.
- 	(Class): Javadoc added.
- 	(forName): Likewise.
- 	(getClasses): Likewise.
- 	(getClassLoader): Likewise.
- 	(getComponentType): Likewise.
- 	(getConstructor): Likewise.
- 	(getConstructors): Likewise.
- 	(getDeclaredConstructor): Likewise.
- 	(getDeclaredClasses): Likewise.
- 	(getDeclaredConstructors): Likewise.
- 	(getDeclaredField): Likewise.
- 	(getDeclaredMethod): Likewise.
- 	(getDeclaredMethods): Likewise.
- 	(getDeclaringClass): Likewise.
- 	(getField): Likewise.
- 	(getInterfaces): Likewise.
- 	(getMethod): Likewise.
- 	(getMethods): Likewise.
- 	(getModifiers): Likewise.
- 	(getName): Likewise.
- 	(getResource): Likewise.
- 	(getResourceAsStream): Likewise.
- 	(getSigners): Likewise.
- 	(setSigners): Likewise.
- 	(getSuperclass): Likewise.
- 	(isArray): Likewise.
- 	(isAssignableFrom): Likewise.
- 	(isInstance): Likewise.
- 	(isInterface): Likewise.
- 	(isPrimitive): Likewise.
- 	(newInstance): Likewise.
- 	(getProtectionDomain): Likewise.
- 	(toString): Likewise.
- 	(Class): Moved.
- 	(initializeClass): Likewise.
- 	(finalize): Likewise.
- 
- 2004-01-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/jar/Connection.java
- 	(hdrHash): Removed.
- 	(hdrVec): Removed.
- 	(gotHeaders): Removed.
- 	(getHeaderField): Removed.
- 	(getHeaderFields): Removed.
- 	(getHeaderFieldKey): Removed.
- 	(getKey): Removed.
- 	(getField): Removed.
- 	(getHeaders): Removed.
- 
- 2004-01-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* Makefile.am: Added library version to gtk peer lib.
- 	* Makefile.in: Regenerated.
- 
- 2004-01-24  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/util/zip/InflaterInputStream.java: Merged class documentation
- 	with classpath.
- 
- 2004-01-21  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* include/powerpc-signal.h: Add #ifndef __powerpc64__ around the
- 	header.  For __powerpc64__ provide the default-signal.h definitions
- 	for now.
- 	* include/x86_64-signal.h [!__x86_64__]: Include java-signal-aux.h
- 	instead of the dummy definitions.
- 	* configure.host (x86_64-*): Remove CHECKREFSPEC, add DIVIDESPEC.
- 	(powerpc64*-*): Remove with_libffi_default.
- 	Only add -mminimal-toc for 64-bit compilations.
- 	* configure.in: Use powerpc-signal.h on powerpc64 as well.
- 	(x86_64-*-linux*): Set SIGNAL_HANDLER_AUX.
- 	Link SIGNAL_HANDLER_AUX to include/java-signal-aux.h.
- 	* configure: Rebuilt.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/FileLockImpl.java: Compile fixes.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/VMClassLoader.java: Reworked imports.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractAction.java: Reformated.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/text/CollationElementIterator.java:
- 	(setText): New method.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/FileLockImpl.java:
- 	Fixed filename in copyright.
- 	(released): Removed.
- 	(finalize): New method.
- 	* gnu/java/nio/natFileLockImpl.cc
- 	(releaseImpl): Implemented.
- 	* java/nio/channels/FileChannelImpl.java:
- 	Reworked imports.
- 	(lock): Implemented.
- 	(lockImpl): New method.
- 	(tryLock): Implemented.
- 	(tryLockImpl): New method.
- 	* java/nio/channels/natFileChannelImpl.cc
- 	(lockImpl): New method.
- 	(tryLockImpl): New method.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/FileDescriptor.java
- 	(lock): New method.
- 	(tryLock): New method.
- 	(unlock): New method.
- 	* java/io/natFileDescriptorEcos.cc
- 	(lock): New method.
- 	(tryLock): New method.
- 	(unlock): New method.
- 	* java/io/natFileDescriptorPosix.cc
- 	(lock): New method.
- 	(tryLock): New method.
- 	(unlock): New method.
- 	* java/io/natFileDescriptorWin32.cc
- 	(lock): New method.
- 	(tryLock): New method.
- 	(unlock): New method.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/FileDescriptor.java
- 	(sync): Moved around, added javadoc.
- 	(valid): Likewise.
- 	(open): Likewise.
- 	(write): Likewise.
- 	(close): Likewise.
- 	(setLength): Likewise.
- 	(seek): Likewise.
- 	(getLength): Likewise.
- 	(getFilePointer): Likewise.
- 	(read): Likewise.
- 	(available): Likewise.
- 	(finalize): Likewise.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractAction.java: Reformated.
- 	(getPropertyChangeListeners): New method.
- 	* javax/swing/AbstractCellEditor.java: Reformated.
- 	(getCellEditorListeners): New method.
- 	* javax/swing/DefaultListSelectionModel.java
- 	(listenerList): New field.
- 	(listeners): Removed.
- 	(get_listeners): Removed.
- 	(addListSelectionListener): Rewritten.
- 	(removeListSelectionListener): Rewritten.
- 	(getListSelectionListeners): New method.
- 	(getListeners): New method.
- 	* javax/swing/JComboBox.java: Imports reworked.
- 	(addActionListener): Implemented.
- 	(removeActionListener): Implemented.
- 	(addItemListener): Implemented.
- 	(removeItemListener): Implemented.
- 	(addPopupMenuListener): Implemented.
- 	(removePopupMenuListener): Implemented.
- 	(getActionListeners): New method.
- 	(getItemListeners): New method.
- 	(getPopupMenuListeners): New method.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/http/Connection.java
- 	(connect): Don't initialize bufferedOutputStream if not needed.
- 	(sendRequest): Set property for content length if content is present.
- 	Write content only if present.
- 	(getOutputStream): Check if already connected, dont connect,
- 	initalize bufferedOutputStream if needed.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/FileDescriptor.java
- 	(in, out, err): Added javadoc.
- 	(static): Merged loading code.
- 	(fd, position): Moved around.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/doc-files/BitwiseXORComposite-1.png:
- 	New file.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Class.java,
- 	java/lang/Object.java,
- 	java/lang/Thread.java: Merged copyright with classpath.
- 
- 2004-01-23  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/io/FileDescriptor.java: Merged copyright with classpath to
- 	start merging this class.
- 
- 2004-01-22  Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/13107:
- 	* testsuite/libjava.lang/pr13107_2.xfail: New file.
- 	* testsuite/libjava.lang/pr13107_3.xfail: New file.
- 	* testsuite/libjava.lang/pr13107_3.java: New file.
- 	* testsuite/libjava.lang/pr13107_3.out: New file.
- 	* testsuite/libjava.lang/pr13107_2.java: New file.
- 	* testsuite/libjava.lang/pr13107_2.out: New file.
- 	* testsuite/libjava.lang/pr13107.java: New file.
- 	* testsuite/libjava.lang/pr13107.out: New file.
- 	* verify.cc (jsr_ptrs): Removed.
- 	(entry_points): Likewise.
- 	(struct subr_info): Likewise.
- 	(struct subr_entry_info): Likewise.
- 	(type_val::unused_by_subroutine_type): Likewise.
- 	(type::merge): Don't handle unused_by_subroutine_type.
- 	(type::print): Likewise.
- 	(state::flags): Removed.
- 	(state::subroutine): Likewise.
- 	(state::seen_subrs): Likewise.
- 	(state::NO_STACK): Likewise.
- 	(state::FLAG_CHANGED, state::FLAG_UNUSED): Likewise.
- 	(state): Updated all methods.
- 	(state::clean_subrs): Removed.
- 	(state::state): Removed `ret_semantics' flag.
- 	(state::copy): Likewise.
- 	(state::add_subr): Removed.
- 	(state::enter_subroutine): Likewise.
- 	(type::set_return_address): New method.
- 	(handle_jsr_insn): Set return address on the type.  Always
- 	invalidate PC after call.
- 	(check_nonrecursive_call): Removed.
- 	(~_Jv_BytecodeVerifier): Updated.
- 	(branch_prepass): Removed special handling of jsr.
- 	(note_branch_target): Likewise.
- 	(get_subroutine): Removed.
- 	(state::merge): Don't merge subroutines and don't handle
- 	NO_STACK.  Removed ret_semantics and jsr_semantics arguments.
- 	(state::note_variable): Removed.
- 	(state::is_unmerged_ret_state): Likewise.
- 	(state::print): Updated.
- 	(set_variable): Likewise.
- 	(merge_into): Renamed from push_jump_merge.  Removed ret_semantics
- 	and jsr_semantics arguments.  Updated for new reverification
- 	list.
- 	(pop_jump): Rewrote.
- 	(construct_primitive_array_type): Updated.
- 	(state::next): Removed.
- 	(INVALID_STATE): New define.
- 	(state::INVALID): Removed.
- 	(state::NO_NEXT): New value.
- 	(state::pc, state::next): New fields.
- 	(state::get_pc): New method.
- 	(next_verify_pc): Removed.
- 	(next_verify_state): New field.
- 	(verify_instructions_0): Always check for falling off end.
- 	(linked): New type.
- 	(linked_utf8): Removed.
- 	(states): Changed type.
- 	(type::state_mergeable_p): New method.
- 	(state::state_mergeable_p): Likewise.
- 	(handle_ret_insn): Removed most code.
- 	(state::reverify): New method.
- 	(add_new_state): Likewise.
- 	(state::set_pc): Likewise.
- 
- 2004-01-22  Jeff Sturm  <jsturm@one-point.com>
- 
- 	PR java/13733
- 	* testsuite/libjava.compile/PR13733.java: New file.
- 	* testsuite/libjava.compile/PR13733.xfail: New file.
- 
- 2004-01-22  Arnaud Vandyck  <arnaud.vandyck@ulg.ac.be>
-             Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/table/DefaultTableCellRenderer.java
- 	(DefaultTableCellRenderer): Added javadoc for the class and for
- 	the constructor, Border instance, create an EmptyBorder.
- 	(UIResource): Removed the comment at the end of the class
- 	(setForeground): New method.
- 	(setBackground): New method.
- 	(updateUI): New method.
- 	(getTableCellRendererComponent): Rewritten with the help of
- 	dvholten and Stephane Meslin-Weber.
- 	(validate): New method.
- 	(repaint): New method.
- 	(firePropertyChange): New method.
- 	(setValue): New method.
- 
- 2004-01-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(connectJObject): Replace printf calls with g_assert statements.
- 	Move property-notify-event signal connection to ...
- 	(connectSignals): Connect property-notify-event signal.  Iterate
- 	through the vbox's children to find layout.
- 
- 2004-01-22  Graydon Hoare  <graydon@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java:
- 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java:
- 	Predicate static initialization on GtkToolkit.useGraphics2D().
- 	* java/awt/Component.java (processPaintEvent): Consume event.
- 	* javax/swing/AbstractButton.java: Reimplement, document.
- 	* javax/swing/DefaultButtonModel.java: Reimplement, document.
- 	* javax/swing/JComponent.java (paint): Use double buffer.
- 	(listenerList): Enable member.
- 	* javax/swing/ToggleButtonModel.java: Remove incorrect constructor.
- 	* javax/swing/JToggleButton.java
- 	(JToggleButton): Modify model constructor.
- 	* javax/swing/SwingUtilities.java
- 	(layoutCompoundLabel): Adjust arithmetic.
- 	* javax/swing/plaf/basic/BasicButtonUI.java: Reimplement, document.
- 	* javax/swing/plaf/basic/BasicGraphicsUtils.java
- 	(getPreferredButtonSize): Include margins in calculation.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals):
- 	Receive up events from subordinate layout component.
- 
- 2004-01-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* java/awt/Component.java (show): Set visible to true before
- 	showing the peer.
- 
- 2004-01-21  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (postConfigureEvent):
- 	Fix comments.
- 	(removeMenuBarPeer): Make package private.
- 	(setMenuBarPeer): Make package private.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(menubar_resize_cb): Mark attributes unused.
- 	(getMenuBarHeight): ditto.
- 
- 2004-01-21  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Container.java
- 	(LightweightDispatcher.handleEvent): Add an extra check to avoid
- 	dispatching MOUSE_ENTERED event twice. Translate the point for
- 	the mouse event target before dispatching the event.
- 
- 2004-01-20  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* Makefile.am (lib_org_w3c_dom_la_LIBADD,
- 	lib_org_w3c_dom_la_LDFLAGS): New.
- 	(lib_org_xml_sax_la_LIBADD, lib_org_xml_sax_la_LDFLAGS): New.
- 	* Makefile.in: Rebuilt.
- 
- 2004-01-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (setBounds):
- 	Calculate proper offsets for heavyweight components packed in
- 	lightweight containers.
- 
- 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
- 	(native create): Add width parameter.
- 	(create): Calculate text entry width based on current font's
- 	metrics and number of columns.  Set TextField's font if not
- 	already set.  Call native create.
- 	(gtkEntryGetBorderWidth): New native method.
- 	(gtkEntryGetSize): Remove method.
- 	(getMinimumSize): Call minimumSize.
- 	(getPreferredSize): Call preferredSize.
- 	(minimumSize): Calculate minimum size based on backing
- 	GtkEntry's borders, font metrics and number of columns.
- 	(preferredSize): Likewise for preferred size.
- 	(get_border_width): New static function.
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setResizable):
- 	Override GtkWindowPeer's setResizable method to account for menu
- 	bar height when setting the frame's size.
- 
- 2004-01-19  Matthias Klose  <doko@debian.org>
- 
- 	* libtool-version: Increased `current' to 6.
- 
- 2004-01-19  Kim Ho  <kho@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(connectJObject): Iterate through the vbox's children to find layout.
- 
- 2004-01-19  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* java/awt/EventQueue.java (invokeAndWait): Use list-aware
- 	isDispatchThread method to replace wrong test condition.
- 
- 2004-01-19  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* java/awt/EventQueue.java (pop): Prevent racing condition to add
- 	events to the queue out of order by acquiring locks in the proper
- 	order and not by releasing one before acquiring the other.
- 
- 2004-01-19  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/TestAWT.java (DialogWindow): Make text not
- 	visible so that dialog can be reused.
- 
- 2004-01-19  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* java/awt/EventQueue.java (getCurrentEvent): Consider that system
- 	events may be handled by any queue in the stack.
- 
- 2004-01-19  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight): Added
- 	MenuBarPeer parameter.
- 	(removeMenuBarPeer): New native method.
- 	(setMenuBar): Call remove if menu bar is null. Adjust insets
- 	appropriately.
- 	(postSizeAllocateEvent): New method. Called when menu bar size is
- 	allocated. Adjust insets and redo layout.
- 	(GtkFramePeer): Set menu bar during frame creation.
- 	(postConfigureEvent): Adjust position and size to accomodate
- 	menu bar.
- 	* java/awt/Frame.java (setMenuBar): addNotify to create menu bar.
- 	* java/awt/Menu.java (addSeparator): Use peer's addSeparator.
- 	(addNotify): Create the peer if it doesn't exist and call addNotify
- 	for the menu's items.
- 	* java/awt/MenuBar.java (addNotify): Create this menu bar's menus.
- 	* java/awt/MenuItem.java (addNotify): Create the peer if it
- 	doesn't exist.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(removeMenuBarPeer): New method. Remove menu bar on the current
- 	frame.
- 	(setMenuBarPeer): Add the menu bar to the current frame and the
- 	callback for size-allocate events on the menu bar.
- 	(getMenuBarHeight): Add menu bar parameter.
- 	(menubar_resize_cb): New callback method for postSizeAllocate events.
- 
- 	Also: Fix indentation on last ChangeLog entry.
- 
- 2004-01-16  Kim Ho  <kho@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
- 	(gtkWidgetGetDimensions): Remove.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(gtkWidgetGetDimensions): Remove.
- 
- 2004-01-16  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/awt/Container.java: Typo and indentation fixes.
- 
- 	* java/lang/natClassLoader.cc: Moved VMClassLoader methods...
- 	* java/lang/natVMClassLoader.cc: ...here.  New file.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_source_files): Added natVMClassLoader.cc.
- 
- 2004-01-16  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (pre_event_handler):
- 	Discard GDK_ENTER_NOTIFY related to ungrabs.
- 
- 2004-01-16  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* java/awt/EventQueue.java (pop): Prevent breaking the chain if pop
- 	is called for an intermediate queue.
- 
- 2004-01-16  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(window_property_changed_cb): Set id_set.
- 
- 2004-01-16  Kim Ho  <kho@redhat.com>
- 
-         * gnu/java/awt/peer/gtk/GtkComponentPeer.java (GtkComponentPeer): If
- 	it is a FileDialog and has dimensions of 0 by 0, then the initial
- 	size is set to size request plus insets.
- 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
- 	(gtkWidgetGetDimensions): Override method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
- 	(gtkWidgetGetDimensions): Override method. Returns size request plus
- 	insets.
- 
- 2004-01-16  Andrew Haley  <aph@redhat.com>
- 
- 	* sysdep/x86-64/locks.h: Don't use in/out memory constraints.
- 	* sysdep/i386/locks.h: Likewise.
- 
- 2004-01-16  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* java/awt/EventDispatchThread.java (run): Stop running when
- 	interrupted.
- 	* java/awt/EventQueue.java (pop): Stop dispatch thread when done.
- 	Reset the queue after transferring its contents.
- 	(push): Start a new dispatch thread if none is running.
- 
- 2004-01-16  Olga Rodimina <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
- 	(doPolygon): set fill rule of polygon to
- 	WIND_EVEN_ODD by default.
- 
- 2004-01-15  Olga Rodimina <rodimina@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
- 	Implemented rendering hints related methods.
- 	(getDefaultHints): New helper method. Returns
- 	default rendering hints.
- 	(walkPath): changed to normalize path if
- 	the KEY_STROKE_CONTROL key is in "normalize" mode.
- 	(draw3DRect): changed coordinates of rectangle by +0.5
- 	if in "normalize" mode.
- 
- 2004-01-15  Tom Tromey  <tromey@redhat.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (gnu/gcj/runtime/StackTrace.lo): New rule.
- 	(%.lo: %.java) Filter out StackTrace.lo.
- 
- 2004-01-14  Kelley Cook  <kcook@gcc.gnu.org>
- 
- 	* configure.in: Add in AC_PREREQ(2.13)
- 	* libltdl/configure.ac: Update to AC_PREREQ(2.57).  Delete
- 	FIXME comment.
- 
- 2004-01-14  Nathan Bryant  <nbryant@optonline.net>
- 	    Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/12001:
- 	* gnu/gcj/runtime/VMClassLoader.java (VMClassLoader): Pass empty
- 	array to superclass.
- 	(init): Changed interface; add URLs here.
- 	(initialize): New static method.
- 	* prims.cc (_Jv_CreateJavaVM): Initialize ClassLoader here...
- 	(_Jv_RunMain): ... not here.
- 
- 2004-01-14  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/text/MessageFormat.java:
- 	Added descriptions to exceptions.
- 	This fixes PR libgcj/2429.
- 
- 2004-01-13  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* java/awt/EventQueue.java (isDispatchThread): Do check on top of stack.
- 	(push): Make sure push is performed at the top of the thread stack.
- 
- 2004-01-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
- 	(native	create): Add width and height parameters.  Set text
- 	view's size request according to new parameters.
- 	(create): Calculate text view size based on current font's
- 	metrics and number of rows and columns.  Set TextArea's font if
- 	not already set.  Call native create.
- 	(getMinimumSize): Call minimumSize.
- 	(getPreferredSize): Call preferredSize.
- 	(getHScrollbarHeight): New method.
- 	(getVScrollbarWidth): New method.
- 	(minimumSize): Calculate minimum size based on scrollbar
- 	visibility, scrollbar sizes, font metrics and number of rows and
- 	columns.
- 	(preferredSize): Likewise for preferred size.
- 	(gtkTextGetSize): Remove method.
- 
- 2004-01-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
- 	(initializeInsets): Remove method.
- 	(GtkComponentPeer): Initialize insets field.  Remove call to
- 	initializeInsets.
- 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (initializeInsets):
- 	Remove method.
- 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (initializeInsets):
- 	Remove method.
- 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
- 	(latestInsets): Remove field.
- 	(native create): Add insets parameter.  Call
- 	window_get_frame_extents.  Set the window's default size and
- 	size request based on its frame extents.
- 	(create): Initialize insets.
- 	(postInsetsChangedEvent): New method.
- 	(postConfigureEvent): Remove parameters top, left, bottom,
- 	right.  Remove insets-related logic.
- 	(connectJObject): Handle property-notify-event.
- 	(window_get_frame_extents, request_frame_extents,
- 	property_notify_predicate, window_property_changed_cb): New
- 	static functions.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(pre_event_handler): Remove insets-related logic for configure
- 	events.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (gtkInit):
- 	Update postConfigureEvent signature.
- 
- 2004-01-13  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/TestAWT.java (DialogWindow): Add WindowAdapter
- 	to handle Window "Closing" events.
- 
- 2004-01-13  David Jee  <djee@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
- 	(setBackground): New method. Children with no explicitly-set
- 	background will be repainted with the parent container's new
- 	background color.
- 
- 2004-01-13  David Jee  <djee@redhat.com>
- 
- 	* Makefile.am: Add BitwiseXORComposite.java.
- 	* Makefile.in: Regenerated.
- 	* gcj/Makefile.in: Regenerated.
- 	* include/Makefile.in: Regenerated.
- 	* testsuite/Makefile.in: Regenerated.
- 
- 2004-01-12  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/TestAWT.java: Fix test program so that it does
- 	not show modal dialogs twice and so that it allows showing a modal
- 	dialog from another modal dialog.
- 
- 2004-01-12  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* java/awt/Dialog.java (show): Enable blocking for all modal dialogs
- 	and run secondary dispatch thread to process event queue while this
- 	thread is blocked.
- 
- 2004-01-12  Graydon Hoare  <graydon@redhat.com>
- 
- 	* gnu/java/awt/gtk/GdkGraphics2D.java
- 	(static): Check GtkToolkit before initializing static state.
- 	(Graphics2D): Don't construct transform with 0.5 unit offset.
- 
- 2003-11-06  Sascha Brawer  <brawer@dandelis.ch>
- 
- 	* gnu/java/awt/BitwiseXORComposite.java: Add.
- 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
- 	(setXORMode): Switch to gnu.java.awt.BitwiseXORComposite.
- 	(BitwiseXORComposite): Remove inner class.
- 
- 2004-01-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/lang/reflect/TypeSignature.java
- 	(getEncodingOfClass): Documentation fixed.
- 	(getClassForEncoding): Give class loader to Class.forName().
- 	Documentation fixed.
- 
- 2004-01-11  Sascha Brawer  <brawer@dandelis.ch>
- 
- 	* javax/swing/undo/CompoundEdit.java (serialVersionUID): Added.
- 
- 2004-01-11  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/undo/StateEditable.java
- 	(RCSID): Removed redundant modifiers.
- 
- 2004-01-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/attribute/EnumSyntax.java
- 	(getStringTable): Made protected.
- 	(getEnumValueTable): Likewise.
- 	* javax/print/attribute/standard/JobKOctetsProcessed.java
- 	(JobKOctetsProcessed): Don't implement PrintRequestAttribute.
- 	* javax/print/attribute/standard/JobMediaSheetsCompleted.java
- 	(JobMediaSheetsCompleted): Made class final.
- 	* javax/print/attribute/standard/OutputDeviceAssigned.java
- 	(getName): Fixed typo.
- 	* javax/print/attribute/standard/RequestingUserName.java
- 	(serialVersionUID): Fixed value.
- 
- 2004-01-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/plaf/basic/BasicButtonUI.java,
- 	javax/swing/plaf/basic/BasicCheckBoxUI.java,
- 	javax/swing/plaf/basic/BasicListUI.java,
- 	javax/swing/plaf/basic/BasicOptionPaneUI.java,
- 	javax/swing/plaf/basic/BasicPanelUI.java,
- 	javax/swing/plaf/basic/BasicRadioButtonUI.java,
- 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
- 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
- 	javax/swing/plaf/basic/BasicViewportUI.java:
- 	Fixed import statements.
- 
- 2004-01-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/awt/image/ImageDecoder.java
- 	(produce): Made public.
- 	* gnu/java/awt/peer/GLightweightPeer.java,
- 	gnu/java/awt/peer/gtk/GtkToolkit.java:
- 	Reformated.
- 
- 2004-01-10  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JRadioButtonMenuItem.java,
- 	javax/swing/JSeparator.java,
- 	javax/swing/JSplitPane.java,
- 	javax/swing/JTextPane.java,
- 	javax/swing/JToolBar.java,
- 	javax/swing/ListCellRenderer.java,
- 	javax/swing/ListModel.java,
- 	javax/swing/MenuElement.java,
- 	javax/swing/OverlayLayout.java,
- 	javax/swing/ProgressMonitor.java,
- 	javax/swing/ProgressMonitorInputStream.java,
- 	javax/swing/Renderer.java,
- 	javax/swing/RootPaneContainer.java,
- 	javax/swing/Scrollable.java,
- 	javax/swing/SingleSelectionModel.java,
- 	javax/swing/ToolTipManager.java,
- 	javax/swing/ViewportLayout.java,
- 	javax/swing/event/DocumentEvent.java,
- 	javax/swing/event/SwingPropertyChangeSupport.java,
- 	javax/swing/event/TreeSelectionEvent.java,
- 	javax/swing/event/UndoableEditEvent.java,
- 	javax/swing/text/AbstractDocument.java,
- 	javax/swing/text/AttributeSet.java,
- 	javax/swing/text/Caret.java,
- 	javax/swing/text/ComponentView.java,
- 	javax/swing/text/DefaultCaret.java,
- 	javax/swing/text/DefaultEditorKit.java,
- 	javax/swing/text/Document.java,
- 	javax/swing/text/EditorKit.java,
- 	javax/swing/text/GapContent.java,
- 	javax/swing/text/Keymap.java,
- 	javax/swing/text/MutableAttributeSet.java,
- 	javax/swing/text/PlainEditorKit.java,
- 	javax/swing/text/Segment.java,
- 	javax/swing/text/Style.java,
- 	javax/swing/text/StyledDocument.java,
- 	javax/swing/text/StyledEditorKit.java,
- 	javax/swing/text/TextAction.java,
- 	javax/swing/text/View.java: Fixed import statements.
- 
- 2004-01-08  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/JLayeredPane.java: Rewrite to accomodate
- 	djee@redhat.com's recent inverse ordering of Container elements.
- 
- 2004-01-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/lang/ArrayHelper.java
- 	(equalsArray): Removed.
- 
- 2004-01-09  Andrew Haley  <aph@redhat.com>
- 
- 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Resolve
- 	a Utf8Const field before looking at its class.
- 
- 2004-01-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/attribute/standard/DocumentName.java,
- 	javax/print/attribute/standard/JobHoldUntil.java,
- 	javax/print/attribute/standard/JobMessageFromOperator.java,
- 	javax/print/attribute/standard/JobName.java,
- 	javax/print/attribute/standard/JobOriginatingUserName.java,
- 	javax/print/attribute/standard/OutputDeviceAssigned.java,
- 	javax/print/attribute/standard/PrinterInfo.java,
- 	javax/print/attribute/standard/PrinterLocation.java,
- 	javax/print/attribute/standard/PrinterMakeAndModel.java,
- 	javax/print/attribute/standard/PrinterMessageFromOperator.java,
- 	javax/print/attribute/standard/PrinterName.java,
- 	javax/print/attribute/standard/RequestingUserName.java: New files.
- 	* Makefile.am (javax_source_files): Added new files.
- 	* Makefile.in: Regenerated.
- 
- 2004-01-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/AbstractAction.java,
- 	javax/swing/AbstractSet.java,
- 	javax/swing/Action.java,
- 	javax/swing/ActionMap.java,
- 	javax/swing/BoundedRangeModel.java,
- 	javax/swing/ButtonModel.java,
- 	javax/swing/CellEditor.java,
- 	javax/swing/CellRendererPane.java,
- 	javax/swing/ComboBoxEditor.java,
- 	javax/swing/DebugGraphics.java,
- 	javax/swing/DefaultCellEditor.java,
- 	javax/swing/DefaultCellRenderer.java,
- 	javax/swing/DefaultComboBoxModel.java,
- 	javax/swing/DefaultDesktopManager.java,
- 	javax/swing/DefaultFocusManager.java,
- 	javax/swing/DefaultListCellRenderer.java,
- 	javax/swing/Icon.java,
- 	javax/swing/JButton.java,
- 	javax/swing/JCheckBoxMenuItem.java,
- 	javax/swing/JDesktopPane.java,
- 	javax/swing/JEditorPane.java,
- 	javax/swing/JMenu.java,
- 	javax/swing/JPanel.java,
- 	javax/swing/JPasswordField.java,
- 	javax/swing/JPopupMenu.java,
- 	javax/swing/JProgressBar.java: Reworked imports.
- 
- 2004-01-09  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/awt/geom/PathIterator.java
- 	(WIND_EVEN_ODD): Removed redundant modifiers.
- 	(WIND_NON_ZERO): Likewise.
- 	(SEG_MOVETO): Likewise.
- 	(SEG_LINETO): Likewise.
- 	(SEG_QUADTO): Likewise.
- 	(SEG_CUBICTO): Likewise.
- 	(SEG_CLOSE): Likewise.
- 	* java/awt/image/SinglePixelPackedSampleModel.java:
- 	Removed redundant semicolon.
- 	* java/io/ObjectInputStream.java
- 	(inputGetObjectStreamClasses): Removed unused variable "ret_val".
- 	* java/util/logging/Filter.java
- 	(isLoggable): Removed redundant modifier.
- 	* java/util/logging/LogManager.java:
- 	Removed redundant semicolon.
- 	* java/util/logging/XMLFormatter.java
- 	(format): Removed unused variable "key".
- 
- 2004-01-08  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java (nativeSetFile):
- 	New name for the former setFile native method.
- 	(setFile): New method.
- 	(setDirectory): Implemented.
- 	(connectSignals): New native method.
- 	(setFilenameFilter): Improve comment.
- 	(getGraphics): Comment.
- 	(gtkHideFileDialog): New method.
- 	(gtkDisposeFileDialog): New method.
- 	(gtkSetFilename): New method.
- 	* java/awt/Dialog.java (show): Block on modal dialogs, but only
- 	for FileDialog for now.
- 	(hide): New method.
- 	(dispose): New method.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkFileDialog_create): Replace
- 	deprecated creation functions.  Make dialog modal.  Add it to the
- 	window group.
- 	(Java_gnu_java_awt_peer_gtk_GtkFileDialog_connectSignals): New
- 	function.
- 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_gtkFileSelectionSetFilename):
- 	Rename to...
- 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile): New
- 	name.
- 	(window_closed): New function.
- 	(ok_clicked): New function.
- 	(cancel_clicked): New function.
- 
- 2004-01-08  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/swing/JLayeredPane.java: Revert changes to standard
- 	boilerplate, reworked imports.
- 
- 2004-01-07  Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/13439:
- 	* verify.cc (state::merge): Copy changed locals out of subroutine
- 	in NO_STACK case.
- 	(state::FLAG_CHANGED): New const.
- 	(state::FLAG_UNUSED): Likewise.
- 	(state::local_changed): Removed.  Updated all users.
- 	(state::flags): New field.
- 	(state::merge): Added jsr_semantics argument, more logic.
- 	(push_jump_merge): Added jsr_semantics argument.
- 	(handle_jsr_insn): Set jsr_semantics on push_jump_merge when
- 	merging through the jsr instruction.
- 
- 2004-01-07  Tom Tromey  <tromey@redhat.com>
- 
- 	* scripts/MakeDefaultMimeTypes.java: Use \n, not
- 	backslash-newline.
- 
- 2004-01-07  Graydon Hoare  <graydon@redhat.com>
- 
- 	* java/awt/Container.java (LightweightDispatcher): Implement.
- 	(visitChild): Reuse graphics object.
- 	(dispatchEventImpl): Optionally dispatch to lightweight.
- 	(addNotifyContainerChildren): Build LightweightDispatcher.
- 
- 2004-01-07  David Jee  <djee@redhat.com>
- 
- 	* java/awt/Container.java
- 	(update): Clear only the clipped region, instead of clearing the
- 	entire Container.
- 	(visitChildren): Visit children in descending order.
- 
- 2004-01-07  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/reflect/Array.java: Merged documentation with classpath.
- 
- 2004-01-07  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/text/CollationElementIterator.java
- 	(textIndex): Renamed from index.
- 	* java/text/CollationKey.java
- 	(collator): New member.
- 	(CollationKey): New argument for parent collator.
- 	(equals): Check for same collator, source string and key array.
- 	* java/text/RuleBasedCollator.java:
- 	Reformated.
- 	(RuleBasedCollator): Don't re-initialize frenchAccents with default
- 	value.
- 	(getCollationElementIterator): Rewritten.
- 	(getCollationKey): Added new argument to CollationKey constructor.
- 
- 2004-01-07  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/nio/DatagramChannelImpl.java
- 	(blocking): Removed.
- 	(DatagramChannelImpl): Call configureBlocking().
- 	(implConfigureBlocking): Dont initialize blocking.
- 	* gnu/java/nio/ServerSocketChannelImpl.java
- 	(blocking): Removed.
- 	(ServerSocketChannelImpl): Call configureBlocking().
- 	(implConfigureBlocking): Dont initialize blocking.
- 	* gnu/java/nio/SocketChannelImpl.java
- 	(blocking): Removed.
- 	(SocketChannelImpl): Call configureBlocking().
- 	(implConfigureBlocking): Dont initialize blocking.
- 	(connect): Use isBlocking().
- 	* java/nio/channels/spi/AbstractSelectableChannel.java
- 	(configureBlocking): Use blockingLock() instead of LOCK.
- 	Set blocking after successfully called implConfigureBlocking().
- 	(register): Use blockingLock() instead of LOCK.
- 
- 2004-01-07  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/ServerSocket.java (isBound): Fixed documentation.
- 
- 2004-01-07  Sascha Brawer  <brawer@dandelis.ch>
- 
- 	* javax/swing/DefaultBoundedRangeModel.java: Documented API.
- 	(changeEvent): Create event object on demand.
- 	(DefaultBoundedRangeModel, toString, setValue, setExtent,
- 	setMinimum, setMaximum, setValueIsAdjusting, setRangeProperties,
- 	fireStateChanged): Re-written.
- 	* javax/swing/event/EventListenerList.java: Reformatted, document
- 	typical usage.
- 	(toString): Implemented.
- 	(getListeners): Re-written.
- 	(remove): Re-written.
- 	(add): Re-written.
- 	(NO_LISTENERS): New singleton field.
- 	(listenerList): Declare as transient; document.
- 	(serialVersionUID): Document.
- 	(getListenerCount(Class)): More efficient implementation,
- 	also accepts null argument.  Improve Javadoc.
- 	(getListenerCount()): Remove unnecessary cast; docfix.
- 	* javax/swing/undo/UndoableEditSupport.java:
- 	Re-format, document.
- 	(UndoableEditSupport): Set realSource field. Improve documentation.
- 	(_postEdit): Iterate over cloned listener vector.
- 	(toString): Don't emit realSource.
- 	(beginUpdate, endUpdate): Support nested updates.
- 	(postEdit): Use compound edit if present.
- 
- 2004-01-06  Graydon Hoare  <graydon@redhat.com>
- 
- 	* java/awt/Container.java (swapComponents): Add forgotten
- 	function, required for JLayeredPane change.
- 
- 2004-01-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/text/CollationElementIterator.java: Reformated.
- 	(CollationElementIterator): Changed order of arguments.
- 	* java/text/RuleBasedCollator.java
- 	(RuleBasedCollator): Merged class documentation.
- 	(CollationElement): Added documentation.
- 	(compare): Reformated, renamed arguments.
- 	(equals): Likewise.
- 	(getCollationElementIterator): Likewise.
- 	(getCollationKey): Likewise.
- 
- 2004-01-06  Graydon Hoare  <graydon@redhat.com>
- 
- 	* javax/swing/JLayeredPane.java: Fix semantics, add javadocs.
- 
- 2004-01-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* gnu/java/net/protocol/file/Connection.java:
- 	Reformated copyright.
- 	(hdrHash): Removed.
- 	(hdrVec): Removed.
- 	(gotHeaders): Removed.
- 	(getHeaderField): Removed.
- 	(getHeaderField): Removed.
- 	(getHeaderFieldKey): Removed.
- 	(getKey): Removed.
- 	(getField): Removed.
- 	(getHeaders): Removed.
- 
- 2004-01-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* javax/print/attribute/standard/DateTimeAtCompleted.java,
- 	javax/print/attribute/standard/DateTimeAtCreation.java,
- 	javax/print/attribute/standard/DateTimeAtProcessing.java,
- 	javax/print/attribute/standard/JobImpressionsCompleted.java,
- 	javax/print/attribute/standard/JobKOctets.java,
- 	javax/print/attribute/standard/JobKOctetsProcessed.java,
- 	javax/print/attribute/standard/JobMediaSheetsCompleted.java,
- 	javax/print/attribute/standard/JobPrioritySupported.java: New files.
- 	* Makefile.am (javax_source_files): Added new files.
- 	* Makefile.in: Regenerated.
- 
- 2004-01-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/net/URLConnection.java
- 	(contentHandler): Removed.
- 	(locale): Removed.
- 	(getHeaderFields): Return an empty map instead of null.
- 	(getContent): Connect if needed, renamed "cType" to "type" and
- 	"contentHandler" to "ch" and made it a local variable.
- 	(getPermission): Don't use package in class name.
- 	(setDefaultRequestProperty): Fixed typo in documentation.
- 	(initializeDateFormats): Made locale a local variable.
- 
- 2004-01-06  Michael Koch  <konqueror@gmx.de>
- 
- 	* java/lang/Package.java
- 	(getPackage): Get the current class loader directly.
- 	* java/lang/SecurityManager.java
- 	(currentLoadedClass): Dont iterate over class contexts.
- 	(classLoaderDepth): Don't check class loaders if everything is allowed.
- 
- 2004-01-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
- 	(pre_event_handler): Set all insets to 0 when a Configure event
- 	is received for a GtkPlug.
- 	* gnu/java/awt/EmbeddedWindow.java (window_id): Rename handle.
- 	Make handle long, not int.
- 	(EmbeddedWindow()): New constructor.
- 	(EmbeddedWindow(int)): Rename window_id to handle.  Make handle
- 	long, not int.
- 	(setHandle): New method.
- 	(getHandle): Return long, not int.
- 	* gnu/java/awt/peer/EmbeddedWindowPeer.java (embed): New method
- 	declaration.
- 	* gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
- 	(create(long)): Take long parameter, not int.  Cast gtk_plug_new
- 	argument to GdkNativeWindow.
- 	(construct): New method.
- 	(embed): New method.
- 
- 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
- 	(create(int, int)): New method.
- 	(create): Call new create method.
- 	(gtkScrolledWindowNew, gtkScrolledWindowSetSize): Remove
- 	methods.
- 	(childResized): Remove native implementation.  Implement in
- 	Java.
- 	(getHScrollbarHeight, getVScrollbarWidth): Call
- 	gtk_widget_size_request to get scrollbar dimensions.
- 	* java/awt/ScrollPane.java (getViewportSize): Reimplement.  Only
- 	call getVScrollbarWidth and getHScrollbarHeight when vertical
- 	and horizontal scrollbars respectively are needed.
- 	(doLayout): Enlarge child if it is smaller than the viewport.
- 
- 2004-01-05  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* java/awt/Dialog.java (constructor): Accept null title as per spec.
- 	* java/awt/FileDialog.java (constructor): Throw exception on invalid
- 	argument as per spec.
- 
- 2004-01-05  Fernando Nasser  <fnasser@redhat.com>
- 
- 	* java/awt/Choice.java (add): Leave posting of ItemEvents to peer.
- 	(insert): Ditto.
- 	(remove): Ditto.  Also, Check for valid argument.
- 	(removeAll): Use peer interface method.
- 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (nativeAdd): New name for
- 	native add function.
- 	(nativeRemove): New name for native remove function.
- 	(getHistory): New native function.
- 	(constructor): Generate ItemEvent.
- 	(add): Ditto, if selection is changed.
- 	(remove): Ditto, ditto.
- 	(removeAll): Add implementation.
- 	(handleEvent): Remove.  Dead code.
- 	(choicePostItemEvent): Add comment.
- 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
- 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append): Add comments.
- 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_add): Rename to...
- 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeAdd): New name.  Add
- 	comments and fix condition to change selection.
- 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_remove): Rename to...
- 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemove): New name.  Add
- 	remove all capability.
- 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_getHistory): New function.
- 	(item_activate): Add cast to remove compiler warning.
- 
- 2004-01-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
- 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
- 	(getPreferredSize): Call preferredSize.
- 	(preferredSize): Call gtkWidgetGetPreferredDimensions.
- 	(getMinimumSize): Call minimumSize.
- 	(minimumSize): Call gtkWidgetGetPreferredDimensions.
- 	(gtkWidgetGetDimensions): Return the peer widget's current size
- 	request.
- 	(gtkWidgetGetPreferredDimensions): Return the peer widget's
- 	natural size request.
- 
- 2004-01-05  Sascha Brawer  <brawer@dandelis.ch>
- 
- 	Thanks to Brian Gough <bjg@network-theory.com>
- 	* java/awt/geom/CubicCurve2D.java (solveCubic): Implemented.
- 	* java/awt/geom/QuadCurve2D.java (solveQuadratic): Re-written.
- 
- 2004-01-04  Matthias Klose  <doko@debian.org>
- 
- 	* aclocal.m4: Rebuilt using "aclocal -I .".
- 	* configure: Rebuilt.
- 
- 2004-01-03  Per Bothner  <per@bothner.com>
- 
- 	* java/util/Date.java (parse):  Fix a number of problems.
- 	(skipParens):  Remove no-longer-needed method.
--- 9191,9193 ----
diff -Nrcpad gcc-4.0.2/libjava/ChangeLog-1998 gcc-4.1.0/libjava/ChangeLog-1998
*** gcc-4.0.2/libjava/ChangeLog-1998	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/ChangeLog-1998	Wed May  4 18:29:28 2005
***************
*** 0 ****
--- 1,3601 ----
+ 1998-12-30  Anthony Green  <green@cygnus.com>
+ 
+ 	* README: Removed.
+ 	* LIBJAVA_LICENSE, COPYING.LIB: Created.
+ 
+ 1998-12-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/PushbackInputStream.java (read): `off' already includes
+ 	`numBytes'.
+ 
+ 1998-12-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (GCJ_canadian): Include target_alias.
+ 
+ 	* java/lang/natFirstThread.cc (run): Require main's class to be
+ 	public.
+ 
+ 1998-12-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/Locale.java (JAPAN): Language is `ja', not `jp'.
+ 
+ 	* java/util/ResourceBundle.java (getBundle): Throw
+ 	NullPointerException if locale argument is null.
+ 
+ 	* java/lang/natClass.cc (forName): Throw NullPointerException if
+ 	argument is null.
+ 	Include NullPointerException.h.
+ 
+ 1998-12-14  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Character.java (Character): Implement Comparable.
+ 	(compareTo): New methods.
+ 
+ 	* java/util/Locale.java (CANADA, FRANCE, JAPAN): Now `final'.  Use
+ 	correct country and language codes.
+ 	(UK, US): New constants.
+ 	(setDefault): Language codes are lower-case.
+ 
+ 	* java/lang/natClass.cc (getDeclaredConstructor): New method.
+ 	(getDeclaredConstructors): Likewise.
+ 	(getDeclaredField): Likewise.
+ 	(getDeclaredFields): Likewise.
+ 	(getDeclaredMethod): Likewise.
+ 	(getDeclaredMethods): Likewise.
+ 	(getField): Likewise.
+ 	(getFields): Likewise.
+ 	(getMethod): Likewise.
+ 	(getMethods): Likewise.
+ 	* java/lang/Class.java: Declare new methods.
+ 	* java/lang/Class.h: Declare new methods.
+ 
+ 	* java/lang/natString.cc: Removed `#pragma implementation'.
+ 	* include/cni.h (_Jv_GetStringChars): New function.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (java/lang/String.h): Don't generate definition for
+ 	_Jv_GetStringChars.
+ 
+ 	* java/lang/natString.cc: Added `#pragma implementation'.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (libjava.zip): Put build directory first in class
+ 	path to avoid bug in compiler.
+ 
+ 1998-12-14  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/util/Locale.java: Add CANADA, FRANCE and JAPAN.
+ 
+ 	* include/javaprims.h: Add EventObject, ListResourceBundle and
+ 	ResourceBundle.
+ 
+ 1998-12-13  Anthony Green  <green@cygnus.com>
+ 
+ 	* mauve-libjava: Run the ResourceBundle tests.
+ 
+ 	* java/lang/natClass.cc (_Jv_FindClass): Don't fail when loader is
+ 	NULL.
+ 
+ Sun Dec 13 18:11:21 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* configure.in, configure:  Make --enable-gcj-classes and
+ 	--enable-source-compilation the default.  (Nervously...)  Yeah!
+ 	Based on a patch from Tom Tromey.
+ 
+ 1998-12-13  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/EventObject.java: New file.
+ 	* java/util/EventListener.java: New file.
+ 
+ 	* include/javaprims.h: Updated class declarations.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added Constructor.h.
+ 	(java/lang/String.h): Don't inline String::length().
+ 	* java/lang/Class.h (getConstructor, getConstructors): Declare.
+ 	* java/lang/Class.java (initializeClass, hackRunInitializers,
+ 	hackTrampoline): No need to mark `final'.
+ 	(getConstructor, getConstructors): Declare.
+ 	* java/lang/reflect/Field.java (equals): New method.
+ 	* java/lang/natClass.cc (getConstructor): New method.
+ 	(getConstructors): Likewise.
+ 	Include Method.h, Field.h, Constructor.h.
+ 	* java/lang/reflect/Constructor.java: New file.
+ 	* java/lang/reflect/Method.java (toString): No space before open
+ 	paren.
+ 	(equals): Simplified.
+ 
+ 1998-12-13  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/util/ResourceBundle.java: New file.
+ 	* java/util/ListResourceBundle.java: New file.
+ 
+ 1998-12-12  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/System.java (in, out, err): Now buffered streams by
+ 	default.
+ 
+ 	* include/javaprims.h: Updated class declarations.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added AccessibleObject.h, Method.h,
+ 	InvocationTargetException.h, Void.h, Byte.h, Short.h, Integer.h,
+ 	Long.h, Boolean.h.
+ 	(nat_files): Added natMethod.o.
+ 	* java/lang/reflect/natMethod.cc: New file.
+ 	* java/lang/reflect/Field.java (Field): Now extends
+ 	AccessibleObject.
+ 	* java/lang/reflect/AccessibleObject.java: New file.
+ 	* java/lang/reflect/InvocationTargetException.java: New file.
+ 
+ 1998-12-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* boehm.cc, prims.cc, include/jvm.h, java/lang/Class.h,
+ 	java/lang/Object.h, java/lang/natClass.cc, java/lang/natObject.cc:
+ 	Renamed dtable -> vtable and _Jv_DispatchTable -> _Jv_VTable.
+ 
+ 	* java/io/OutputStreamWriter.java (buffer): Size at 8192 bytes.
+ 
+ 1998-12-09  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/natDate.cc (_POSIX_THREAD_SEMANTICS): Define if
+ 	HAVE_CTIME_R.
+ 
+ 	* java/lang/natCharacter.cc (toTitleCase): Handle case where
+ 	character is already titlecase.
+ 
+ 	* java/lang/Character.java (isJavaLetter): Follow spec.
+ 	(isJavaLetterOrDigit): Likewise.
+ 
+ 	* java/util/GregorianCalendar.java (gregorianCutover): Append
+ 	`L'.
+ 
+ 	* java/lang/Character.java (isWhitespace): Use \r and not \u000d.
+ 
+ 1998-12-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/Modifier.java (toString): Replace second
+ 	`static' with `synchronized'.
+ 
+ 	* java/lang/natObject.cc (_Jv_FinalizeObject): Call hack12_6.
+ 	* java/lang/Object.h (Object::hack12_6): Declare.
+ 	* java/lang/Object.java (hack12_6): New function.
+ 
+ 1998-12-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-array.h (__JArray::clone): Removed decl.
+ 	* prims.cc (__JArray::clone): Removed.
+ 	* java/lang/natObject.cc (clone): Incorporate code to clone an
+ 	array.
+ 
+ 	* java/lang/natClass.cc (_Jv_NewClass): Set class loader.
+ 	(_Jv_FindArrayClass): Set dtable_method_count on new class.
+ 	Correctly use dtable_method_count.
+ 
+ 1998-12-07  Andrew Haley  <aph@cygnus.co.uk>
+ 
+ 	* java/lang/Double.java (isInfinite, isNaN): Handle correct
+ 	IEEE754 values.
+ 
+ 1998-12-06  Anthony Green  <green@cygnus.com>
+ 
+ 	* mauve-libjava: Don't test ResourceBundle.
+ 
+ 1998-12-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	More JDK 1.2 spec fixes:
+ 	* java/util/Date.java (millis): Now private.
+ 	* java/text/DateFormat.java (DateFormat): Constructor now
+ 	protected.
+ 	* java/lang/Void.java (Void): New private constructor.
+ 	* java/lang/System.java (System): New private constructor.
+ 	* java/lang/SecurityManager.java (classLoaderDepth): Uncommented
+ 	body.
+ 	(currentClassLoader): New method.
+ 	(currentLoadedClass): New method.
+ 	* java/lang/Math.java (Math): New private constructor.
+ 	* java/lang/Compiler.java (Compiler): New private constructor.
+ 	* java/lang/Class.java (Class): New private constructor.
+ 	* java/lang/Double.java (toString): Removed access specifier from
+ 	two-argument `toString' method.
+ 
+ 1998-12-04  Andrew Haley  <aph@cygnus.co.uk>
+ 
+ 	* java/lang/s_rint.c (rint): Make the variable w volatile; this
+ 	causes it to be flushed from an fp register (where it may be
+ 	longer than double precision) to a double in memory.  This is
+ 	essential to ensure correct rounding behaviour.
+  
+ 1998-12-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-assert.h (_Jv_Abort): Declare as `noreturn'
+ 	function.
+ 
+ 	* java/lang/Character.java (isIdentifierIgnorable): Added comment
+ 	explaining apparent divergence from JDK 1.2.
+ 
+ 1998-12-04  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* include/no-threads.h:  Remove unused parameter names.
+ 	This silences a bunch of warnings.
+ 
+ 1998-12-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h (HAVE_CTIME_R): New symbol.
+ 
+ 1998-12-03  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* mauve-libjava: Added many more categories to reject.
+ 
+ 	Changes to follow JDK1.2 spec:
+ 	* java/lang/System.java (arraycopy, init_properties, checkSetIO,
+ 	setErr, setIn, setOut): No need to be `final'.
+ 	* java/lang/natObject.cc (wait): `nanos' argument is an int.
+ 	* java/lang/Object.h (Object::wait): `nanos' argument is an int.
+ 	* java/lang/Object.java (wait): `nanos' argument is an int.
+ 	* java/lang/VirtualMachineError.java: Class is abstract.
+ 	* java/lang/ThreadDeath.java: Made constructors public.
+ 	* java/io/FileDescriptor.java (FileDescriptor): Added missing
+ 	constructor.
+ 
+ Thu Dec  3 20:29:38 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/text/DateFormatSymbols.java (getAmPmStrings,
+  	getLocalPatternChars, setShortWeekdays): Fixed typos in method names.
+ 
+ Thu Dec  3 19:21:53 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/RandomAccessFile.java (writeInt, writeLong, writeFloat,
+  	writeDouble, writeByte, writeBytes, writeChar, writeChars,
+  	writeShort, writeUTF): Added 'final' to signature to match JDK 1.1
+  	and 1.2.
+ 
+ 	* java/lang/IllegalThreadStateException.java
+  	(IllegalThreadStateException): Changed extending class to match spec.
+ 
+ 	* java/lang/NumberFormatException.java
+ 	(java/lang/NumberFormatException): Changed extending class to match
+  	spec.
+ 
+ 	* java/util/Observer.java (Observer): Changed sig to match JCL.
+ 
+ Thu Dec  3 19:05:26 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/DataOutputStream.java (writeInt, writeLong, writeFloat,
+  	writeDouble, writeBytes, writeChars, writeUTF): Added 'final' to
+  	signature to match JDK 1.1 and 1.2.
+ 
+ Thu Dec  3 16:47:42 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* Makefile.am: Changed to use $(PERL) rather than hardcoded 'perl'.
+ 	* configure.in (PERL): Added AC_CHECK_PROGS to look for installed perl.
+ 	* Makefile.in, configure: Rebuilt.
+ 
+ 	* java/text/ParsePosition.java (setErrorIndex): Fixed typo in method
+ 	name.
+ 
+ 1998-12-02  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* mauve-libjava: New file.
+ 
+ 	The remaining `-W -Wall' fixes:
+ 	* java/lang/e_sqrt.c (__ieee754_sqrt): Added cast to unsigned to
+ 	avoid warning.
+ 	* java/lang/s_scalbn.c (scalbn): Added braces to avoid ambiguous
+ 	`else'.
+ 	* java/lang/s_floor.c (floor): Added cast to unsigned to avoid
+ 	warning.
+ 	* java/lang/e_pow.c (__ieee754_pow): Added cast to unsigned to
+ 	avoid warning.
+ 	* java/lang/e_log.c (__ieee754_log): Added braces to avoid
+ 	ambiguous `else'.
+ 	* java/lang/s_ceil.c (ceil): Cast `i1' to unsigned to avoid
+ 	warning.
+ 	* java/lang/e_atan2.c (__ieee754_atan2): Added parentheses per gcc
+ 	suggestion.
+ 	* java/lang/strtod.c (_strtod_r): Added parentheses per gcc
+ 	suggestion.
+ 	* java/lang/mprec.c (Balloc): Removed unused variable.
+ 	(mult): Added parentheses per gcc suggestion.
+ 	(pow5mult): Likewise.
+ 	(lshift): Likewise.
+ 	(ulp): Likewise.
+ 	(b2d): Likewise.
+ 	(d2b): Likewise.
+ 	* java/lang/dtoa.c (_dtoa_r): Added some parentheses per gcc
+ 	suggestion.  Added cast to `int' to avoid signed/unsigned
+ 	comparison.
+ 	* jni.cc (_Jv_JNI_GetSuperclass): Removed name of unused
+ 	parameter.
+ 	(IsAssignableFrom): Likewise.
+ 	(_Jv_JNI_GetObjectField): Likewise.
+ 	(_Jv_JNI_GetByteField): Likewise.
+ 	(_Jv_JNI_GetShortField): Likewise.
+ 	(_Jv_JNI_GetIntField): Likewise.
+ 	(_Jv_JNI_GetLongField): Likewise.
+ 	(_Jv_JNI_GetStringLength): Likewise.
+ 	(_Jv_JNI_ToReflectedField): Likewise.
+ 	(_Jv_JNI_FromReflectedField): Likewise.
+ 	(_Jv_JNIFunctions): Uncommented IsAssignableFrom.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_CFLAGS): Define conditionally.
+ 	(WARNINGS): New macro.
+ 	(AM_CXXFLAGS): Include WARNINGS.
+ 	* configure: Rebuilt.
+ 	* configure.in (USING_GCC): New conditional.
+ 
+ 	* prims.cc (_Jv_Abort): Declare twice, to avoid warnings.
+ 
+ 	* java/lang/Character.java: Changed classification constants to
+ 	type `byte' to match JDK 1.2 docs.
+ 
+ 1998-12-01  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	Some fixes to be `-W -Wall' clean:
+ 	* boehm.cc (_Jv_MarkObj): Removed name of unused parameter.
+ 	(_Jv_MarkArray): Likewise.
+ 	* java/lang/natCharacter.cc (to_lower_title): `i' is unsigned.
+ 	(to_upper_title): Likewise.
+ 	(isTitleCase): Likewise.
+ 	(toTitleCase): Likewise.
+ 	(getNumericValue): Likewise.
+ 	(isLowerCase): Likewise.
+ 	* java/lang/natString.cc (charAt): Don't cast `i' to unsigned
+ 	(avoids compiler warning).
+ 	* java/lang/natClass.cc (getDeclaredClasses): Always return a
+ 	value.
+ 	(getDeclaringClass): Likewise.
+ 	(_Jv_LookupInterfaceMethod): Likewise.
+ 	(_Jv_NewClass): Removed name of unused parameter.
+ 	* exception.cc (_Jv_type_matcher): Removed unused variable.
+ 	(_Jv_setup_eh_info): Removed name of unused parameter.
+ 	* prims.cc (_Jv_NewArray): Always return a value.
+ 	(_Jv_FindClassFromSignature): Likewise.
+ 	* include/java-field.h (getNameUtf8Const): Removed name of unused
+ 	parameter.
+ 	* include/quick-threads.h (_Jv_ThreadInitData): Removed name of
+ 	unused parameter.
+ 	(_Jv_ThreadSetPriority): Likewise.
+ 
+ 	* java/lang/natString.cc (hashChars): Now static.
+ 
+ 	* java/lang/FirstThread.java (FirstThread): Now final.
+ 
+ 	* java/io/File.java (performMkdir, performRenameTo): Now private.
+ 
+ 	* java/lang/natSystem.cc (currentTimeMillis): Return a value even
+ 	if no time function defined.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Look for ctime_r, ctime.
+ 	* java/util/Date.java (toString): Now native.
+ 	* java/util/natDate.cc (toString): Rewrote.
+ 
+ 1998-11-27  Andrew Haley  <aph@viagra.cygnus.co.uk>
+ 
+ 	* Add LDFLAGS line to allow TX39 test cases to link when cross
+ 	compiling.
+ 
+ 1998-11-23  Anthony Green  <green@cygnus.com>
+ 
+ 	* boehm.cc, chartables.pl, classes.pl, exception.cc, jni.cc,
+ 	no-threads.cc, nogc.cc, posix-threads.cc, prims.cc,
+ 	quick-threads.cc, include/boehm-gc.h, include/cni.h,
+ 	include/java-array.h, include/java-assert.h, include/java-field.h,
+ 	include/javaprims.h, include/jni.h, include/jvm.h,
+ 	include/no-gc.h, include/no-threads.h, include/posix-threads.h,
+ 	include/quick-threads.h, java/io/BufferedInputStream.java,
+ 	java/io/BufferedOutputStream.java, java/io/BufferedReader.java,
+ 	java/io/BufferedWriter.java, java/io/ByteArrayInputStream.java,
+ 	java/io/ByteArrayOutputStream.java, java/io/CharArrayReader.java,
+ 	java/io/CharArrayWriter.java,
+ 	java/io/CharConversionException.java, java/io/DataInput.java,
+ 	java/io/DataInputStream.java, java/io/DataOutput.java,
+ 	java/io/DataOutputStream.java, java/io/EOFException.java,
+ 	java/io/File.java, java/io/FileDescriptor.java,
+ 	java/io/FileInputStream.java, java/io/FileNotFoundException.java,
+ 	java/io/FileOutputStream.java, java/io/FileReader.java,
+ 	java/io/FileWriter.java, java/io/FilenameFilter.java,
+ 	java/io/FilterInputStream.java, java/io/FilterOutputStream.java,
+ 	java/io/FilterReader.java, java/io/FilterWriter.java,
+ 	java/io/IOException.java, java/io/InputStream.java,
+ 	java/io/InputStreamReader.java,
+ 	java/io/InterruptedIOException.java,
+ 	java/io/LineNumberInputStream.java, java/io/LineNumberReader.java,
+ 	java/io/OutputStream.java, java/io/OutputStreamWriter.java,
+ 	java/io/PipedInputStream.java, java/io/PipedOutputStream.java,
+ 	java/io/PipedReader.java, java/io/PipedWriter.java,
+ 	java/io/PrintStream.java, java/io/PrintWriter.java,
+ 	java/io/PushbackInputStream.java, java/io/PushbackReader.java,
+ 	java/io/RandomAccessFile.java, java/io/Reader.java,
+ 	java/io/SequenceInputStream.java, java/io/Serializable.java,
+ 	java/io/StreamTokenizer.java,
+ 	java/io/StringBufferInputStream.java, java/io/StringReader.java,
+ 	java/io/StringWriter.java, java/io/SyncFailedException.java,
+ 	java/io/UTFDataFormatException.java,
+ 	java/io/UnsupportedEncodingException.java, java/io/Writer.java,
+ 	java/io/natFile.cc, java/io/natFileDescriptorEcos.cc,
+ 	java/io/natFileDescriptorPosix.cc,
+ 	java/lang/AbstractMethodError.java,
+ 	java/lang/ArithmeticException.java,
+ 	java/lang/ArrayIndexOutOfBoundsException.java,
+ 	java/lang/ArrayStoreException.java, java/lang/Boolean.java,
+ 	java/lang/Byte.java, java/lang/Character.java, java/lang/Class.h,
+ 	java/lang/Class.java, java/lang/ClassCastException.java,
+ 	java/lang/ClassCircularityError.java,
+ 	java/lang/ClassFormatError.java, java/lang/ClassLoader.java,
+ 	java/lang/ClassNotFoundException.java,
+ 	java/lang/CloneNotSupportedException.java,
+ 	java/lang/Cloneable.java, java/lang/Comparable.java,
+ 	java/lang/Compiler.java, java/lang/Double.java,
+ 	java/lang/Error.java, java/lang/Exception.java,
+ 	java/lang/ExceptionInInitializerError.java,
+ 	java/lang/FirstThread.java, java/lang/Float.java,
+ 	java/lang/IllegalAccessError.java,
+ 	java/lang/IllegalAccessException.java,
+ 	java/lang/IllegalArgumentException.java,
+ 	java/lang/IllegalMonitorStateException.java,
+ 	java/lang/IllegalStateException.java,
+ 	java/lang/IllegalThreadStateException.java,
+ 	java/lang/IncompatibleClassChangeError.java,
+ 	java/lang/IndexOutOfBoundsException.java,
+ 	java/lang/InstantiationError.java,
+ 	java/lang/InstantiationException.java, java/lang/Integer.java,
+ 	java/lang/InternalError.java, java/lang/InterruptedException.java,
+ 	java/lang/LinkageError.java, java/lang/Long.java,
+ 	java/lang/Math.java, java/lang/NegativeArraySizeException.java,
+ 	java/lang/NoClassDefFoundError.java,
+ 	java/lang/NoSuchFieldError.java,
+ 	java/lang/NoSuchFieldException.java,
+ 	java/lang/NoSuchMethodError.java,
+ 	java/lang/NoSuchMethodException.java,
+ 	java/lang/NullPointerException.java, java/lang/Number.java,
+ 	java/lang/NumberFormatException.java, java/lang/Object.h,
+ 	java/lang/Object.java, java/lang/OutOfMemoryError.java,
+ 	java/lang/Process.java, java/lang/Runnable.java,
+ 	java/lang/Runtime.java, java/lang/RuntimeException.java,
+ 	java/lang/SecurityException.java, java/lang/SecurityManager.java,
+ 	java/lang/Short.java, java/lang/StackOverflowError.java,
+ 	java/lang/String.java, java/lang/StringBuffer.java,
+ 	java/lang/StringIndexOutOfBoundsException.java,
+ 	java/lang/System.java, java/lang/Thread.java,
+ 	java/lang/ThreadDeath.java, java/lang/ThreadGroup.java,
+ 	java/lang/Throwable.java, java/lang/UnknownError.java,
+ 	java/lang/UnsatisfiedLinkError.java,
+ 	java/lang/UnsupportedOperationException.java,
+ 	java/lang/VerifyError.java, java/lang/VirtualMachineError.java,
+ 	java/lang/Void.java, java/lang/natCharacter.cc,
+ 	java/lang/natClass.cc, java/lang/natDouble.cc,
+ 	java/lang/natFirstThread.cc, java/lang/natFloat.cc,
+ 	java/lang/natMath.cc, java/lang/natObject.cc,
+ 	java/lang/natRuntime.cc, java/lang/natString.cc,
+ 	java/lang/natSystem.cc, java/lang/natThread.cc,
+ 	java/lang/reflect/Field.java, java/lang/reflect/Member.java,
+ 	java/lang/reflect/Modifier.java, java/lang/reflect/natField.cc,
+ 	java/text/DateFormat.java, java/text/DateFormatSymbols.java,
+ 	java/text/FieldPosition.java, java/text/Format.java,
+ 	java/text/NumberFormat.java, java/text/ParseException.java,
+ 	java/text/ParsePosition.java, java/text/SimpleDateFormat.java,
+ 	java/util/BitSet.java, java/util/Calendar.java,
+ 	java/util/ConcurrentModificationException.java,
+ 	java/util/Date.java, java/util/Dictionary.java,
+ 	java/util/EmptyStackException.java, java/util/Enumeration.java,
+ 	java/util/GregorianCalendar.java, java/util/Hashtable.java,
+ 	java/util/Locale.java, java/util/MissingResourceException.java,
+ 	java/util/NoSuchElementException.java, java/util/Observable.java,
+ 	java/util/Observer.java, java/util/Properties.java,
+ 	java/util/Random.java, java/util/SimpleTimeZone.java,
+ 	java/util/Stack.java, java/util/StringTokenizer.java,
+ 	java/util/TimeZone.java, java/util/TooManyListenersException.java,
+ 	java/util/Vector.java, java/util/natGregorianCalendar.cc:  Updated
+ 	copyright notices.
+ 
+ 	* exception.cc: Include eh-common.h instead of duplicating 
+ 	code.
+ 
+ 1998-11-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure.host: Don't add `-O2' to libjava_flags.  Only add
+ 	`-Os' to libjava_flags once.
+ 
+ 1998-11-17  Andrew Haley  <aph@viagra.cygnus.co.uk>
+ 
+ 	* Makefile.am: add LIBJAVA_JAVAFLAGS.
+ 	* Makefile.in: likewise
+ 	* acconfig.h: add ECOS conditional for configure.h
+ 	* config.h.in: likewise
+ 	* configure: add test for --with-ecos
+ 	* configure.in: likewise
+ 	* java/io/natFileDescriptorEcos.cc (java::io::FileDescriptor::write):
+ 	rename call to avoid name clash.
+ 	* java/lang/natSystem.cc: add eCos clock support.
+ 	* java/util/natGregorianCalendar.cc: add eCos support.
+ 	
+ 1998-11-20  Andrew Haley  <aph@viagra.cygnus.co.uk>
+ 
+ 	* Makefile.am, Makefile.in, configure.host: tx39 build option 
+ 	"-G 0" added.
+ 
+ Wed Nov 18 18:55:25 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/BufferedReader.java: Added more comments for clarity.
+ 	(mark): Used more mnemonic name for local var extraBuffSpace.
+ 
+ 	* java/io/LineNumberReader.java (lineEnd): Removed method to avoid
+ 	confusion with private method of same name in superclass.
+ 	(skipRedundantLF): Set fields in special case to avoid infinite
+ 	recursion.  Check if markPos has been invalidated in special case.
+ 	(readLine): Rewritten to use readLine method of superclass.
+ 	(skip): Incorporated code from lineEnd.
+ 
+ Wed Nov 18 02:46:03 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/BufferedReader.java (readLine): New method.
+ 	(lineEnd): new private method.
+ 	(mark): Track special case for readLine of getting '\r' at the
+ 	end of the buffer.
+ 	(reset): Ditto.
+ 	(read): Ditto.
+ 	(fill): Ditto.
+ 	(skip): Ditto.
+ 
+ 	* java/io/InputStreamReader.java (read): Return number chars skipped
+ 	rather than requested.
+ 
+ 	* java/lang/StringBuffer.java (append): Update count and differentiate
+ 	between field and local variable.
+ 
+ 	* java/util/Date.java (parseTz): Evaluate in minutes rather than
+ 	seconds.  Deal with military style time.
+ 	(parse): Consistently treat all timezones in minutes until final
+ 	calculation.  Flag as non-local timezone.  Return value in milliseconds.
+ 	(setTime): Adjust for year offset from 1900.
+ 	(UTC): Adjust for year offset from 1900.
+ 
+ 1998-11-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Switch on host, not target.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (GCJ_no): New macro.
+ 	(GCJ): Use @CANADIAN@.
+ 	(GCJH_no): New macro
+ 	(GCJH_canadian): New macro.
+ 	(GCJH): Use @CANADIAN@.
+ 	(ZIP_no): New macro.
+ 	(ZIP_canadian): New macro.
+ 	(ZIP): Use @CANADIAN@.
+ 	* aclocal.m4, configure: Rebuilt.
+ 	* configure.in (CANADIAN): Compute and subst.
+ 
+ Tue Nov 17 12:44:37 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/io/FileDescriptor.java (finalize): Only close file
+ 	descriptor if valid.
+ 
+ 1998-11-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (_Jv_InitRuntime): Removed.
+ 
+ 1998-11-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/FileOutputStream.java (close): Only close file
+ 	descriptor if valid.
+ 	(finalize): New method.
+ 
+ 	* prims.cc (_Jv_NewObjectArray): Set vtbl last.
+ 	(_Jv_NewPrimArray): Likewise.
+ 	* boehm.cc (_Jv_RegisterFinalizer): Use
+ 	GC_REGISTER_FINALIZER_NO_ORDER.
+ 	(GC_GENERIC_MALLOC): New define.
+ 	(_Jv_AllocObj): Use it.
+ 	(_Jv_AllocArray): Likewise.
+ 	(_Jv_AllocBytes): Likewise.
+ 	(_Jv_MarkObj): Just return if vtbl not set.
+ 	(_Jv_MarkArray): Likewise.
+ 	(MAYBE_MARK): New macro; use everywhere.
+ 	(_Jv_MarkObj): Mark fields belonging to superclasses as well.
+ 
+ Mon Nov 16 14:57:53 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/natGregorianCalendar.cc (computeTime): Cast a time_t
+ 	to a jlong before calculation to prevent overflow.
+ 
+ 1998-11-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Fixed typo.
+ 
+ 1998-11-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Class.h (Class::getName): Removed definition.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added InstantiationException.h,
+ 	NoSuchMethodException.h.
+ 	* java/lang/natClass.cc (clinit_name): Renamed from init_name.
+ 	(init_name): New global.
+ 	(hackRunInitializers): Use clinit_name.
+ 	Include InstantiationException.h, NoSuchMethodException.h.
+ 	(newInstance): Do some error checking (but not all).  Call
+ 	constructor.
+ 	(forName): Throw exception if class not found.
+ 	(getName): New method.
+ 	(forName): Transform class name from external format to internal
+ 	format before lookup.
+ 
+ 1998-11-15  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/Class.h (Class::forName): Method is static.
+ 
+ 	* java/lang/natClass.cc (newInstance): Add simple implementation.
+ 	(forName): Ditto.
+ 
+ Sat Nov 14 18:25:13 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* java/lang/Class.h (Class::accflags):  Must be unsigned short (not
+ 	int), for compatibility with jc1.
+ 
+ 1998-11-14  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h (LINUX_THREADS): New define.
+ 	* configure: Rebuilt.
+ 	* configure.in: Define LINUX_THREADS if using POSIX threads on
+ 	Linux.  Look for pthread_mutexattr_setkind_np function.
+ 	* posix-threads.cc (throw_cleanup): New function.
+ 	(really_start): Push cleanup function.
+ 	(_Jv_ThreadCancel): New function.
+ 	(daemon_mutex, daemon_cond, non_daemon_count): New globals.
+ 	(_Jv_ThreadInitData): Set `exception' field in new structure.
+ 	(_Jv_ThreadStart): Increment non_daemon_count if not a daemon
+ 	thread.
+ 	(_Jv_ThreadWait): New function.
+ 	(_Jv_InitThreads): Initialize daemon globals.
+ 	(FLAG_DAEMON): New macro.
+ 	(really_start): Notify daemon_cond when non-daemon thread exits.
+ 	Include <java/lang/System.h>.
+ 	(struct starter): `object' field now a thread.
+ 	(_Jv_MutexInit): Use pthread_mutexattr_setkind_np if it exists.
+ 	* include/posix-threads.h (_Jv_CondInit): Use `0', not NULL.
+ 	(_Jv_ThreadWait): Removed definition.
+ 	(_Jv_Thread_t): Added `exception' field.
+ 	(_Jv_ThreadCancel): Removed definition.
+ 
+ 1998-11-13  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (libjava.zip): Compute javac before changing
+ 	directory.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (libjava.zip): Include directory entries.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (expanded): New macro.
+ 	(GCJ): Use it.
+ 
+ 1998-11-12  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (clone): New function.
+ 	* include/java-array.h (__JArray::clone): Removed definition.
+ 
+ 	* java/lang/natObject.cc (clone): Don't assert that class is not
+ 	an array; array's `clone' method just calls this one.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (libjava.zip): Renamed target from classes.stamp.
+ 	Now creates zip file.  Changed all users.
+ 	(ZIP): New macro.
+ 	(data_DATA): New macro.
+ 
+ 1998-11-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Recognize --enable-java-gc, not --enable-gc.
+ 
+ Wed Nov 11 18:13:46 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/InputStream.java (reset): Add msg to thrown exception.
+ 
+ Wed Nov 11 17:57:02 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/LineNumberInputStream.java: Rewritten.
+ 
+ 	* java/io/StringBufferInputStream.java: Removed extraneous import.
+ 
+ Wed Nov 11 15:19:33 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/StringBufferInputStream.java: Rewritten.
+ 
+ 	* java/util/Date.java (parseMonth): Optimize.
+ 	(parseDayOfWeek): Created.
+ 	(parse): Optimize to use parseDayOfWeek.
+ 
+ 1998-11-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/StringBuffer.java (append): Handle case where STR is
+ 	`null'.
+ 
+ 	* include/javaprims.h: Regenerated class declarations.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Added --enable-gcj-classes,
+ 	--enable-single-compilation, --enable-source-compilation flags.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (java_io_files): New macro.
+ 	(java_lang_files): Likewise.
+ 	(java_text_files): Likewise.
+ 	(java_util_files): Likewise.
+ 	(java_files): Use new macros.
+ 	(java-io.o): New target.
+ 	(java-lang.o): Likewise.
+ 	(java-text.o): Likewise.
+ 	(java-util.o): Likewise.
+ 	(src_io_files): New macro.
+ 	(src_lang_files): Likewise.
+ 	(src_text_files): Likewise.
+ 	(src_util_files): Likewise.
+ 	(class_io_files): New macro.
+ 	(class_lang_files): Likewise.
+ 	(class_text_files): Likewise.
+ 	(class_util_files): Likewise.
+ 	(class_files): Use new macros.
+ 	(javao_files): Define conditionally.
+ 	(.java.o): New target.
+ 	($(javao_files)): New target.
+ 	(GCJ): new macro.
+ 	(GCJH): Added $(EXEEXT).
+ 	(CLASSPATH_ENV): Removed.
+ 	(GCJCOMPILE): New macro.
+ 
+ Wed Nov 11 12:03:15 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/Date.java (parse): Written from scratch.
+ 
+ 1998-11-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Throwable.java (toString): Correct sense of test for
+ 	determining when to include detail message in result.
+ 
+ 	* java/lang/ThreadDeath.java (ThreadDeath): Added missing
+ 	constructor.
+ 
+ Fri Nov  6 16:30:20 1998  Tom Tromey  <tromey@ferrule.cygnus.com>
+ 
+ 	* java/lang/Class.h: Use _Jv_RegisterClasses, not
+ 	_Jv_RegisterClass.
+ 	* java/lang/natClass.cc (_Jv_RegisterClasses): New function.
+ 	(_Jv_RegisterClass): Use it.
+ 	* include/jvm.h (_Jv_RegisterClasses): Declare.
+ 	* java/lang/natObject.cc (init): Removed.
+ 	(sync_init): Never call _Jv_InitializeSyncMutex.
+ 	(_Jv_InitializeSyncMutex): Don't set `init'.
+ 	* prims.cc (JvRunMain): Don't run init functions.
+ 
+ Thu Nov  5 17:14:37 1998  Tom Tromey  <tromey@sanguine.cygnus.com>
+ 
+ 	* java/lang/natClass.cc (initializeClass): Set state before
+ 	resolving constants.
+ 
+ 	* java/lang/natClass.cc (STATE_CONST_INIT): Removed.
+ 	(STATE_RESOLVED): New macro.
+ 	(initializeClass): Call resolveConstants.
+ 	(hackRunInitializers): Don't call resolveConstants.
+ 	(_Jv_FindArrayClass): Move short-circuit return for primitive
+ 	element types earlier in function.
+ 
+ 1998-11-03  Tom Tromey  <tromey@hoser.cygnus.com>
+ 
+ 	* prims.cc (no_memory): New global.
+ 	(_Jv_makeUtf8Const): Throw no_memory.
+ 	(_Jv_AllocObject): Likewise.
+ 	(_Jv_NewObjectArray): Likewise.
+ 	(_Jv_NewPrimArray): Likewise.
+ 	(JvRunMain): Initialize no_memory.
+ 
+ Tue Nov  3 17:15:45 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/FileInputStream.java: Corrected date comment.
+ 	* java/io/SequenceInputStream.java: Rewritten.
+ 
+ Mon Nov  2 17:20:31 1998  Tom Tromey  (tromey@cygnus.com)
+ 
+ 	* java/lang/FirstThread.java (die): New method.
+ 	* java/lang/natFirstThread.cc (die): Removed.
+ 	(DIE): New macro.
+ 	(run): Use `DIE', not `die'.
+ 
+ Mon Nov  2 16:23:41 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/CharArrayReader.java (read): Move check into synchronized
+ 	block to prevent a close while in progress.
+ 	(reset): Ditto.
+ 	(skip): Ditto.
+ 	* java/io/PushbackReader.java (read): Ditto.
+ 	(ready): Ditto.
+ 	(unread): Ditto.
+ 	* java/io/StringReader.java (mark): Ditto.
+ 	(read): Ditto.
+ 	(reset): Ditto.
+ 	(skip): Ditto.
+ 
+ Mon Nov  2 15:56:20 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/PipedInputStream.java: Updated status.
+ 	(connect): Added code to prevent infinite recursion and to
+ 	differentiate exception causes.
+ 	(read): Added code to differentiate exception causes.
+ 	(receive): Made exception pass string with the cause.
+ 
+ 	* java/io/PipedOutputStream.java: Updated status.
+ 	(connect): Added code to call connect at the other end of the pipe.
+ 
+ Mon Nov  2 00:22:12 1998  Warren Levy  <warrenl@cygnus.com>
+ 	
+ 	* java/io/PipedInputStream.java (connect): Throw exception if
+ 	already connected to the same output stream.
+ 	(read): Do bounds checking first.
+ 
+ Sun Nov  1 22:48:55 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/PipedInputStream.java: Added private boolean outClosed.
+ 	(available): Removed check if output stream is open.
+ 	(close): Mark the buffer as empty so available returns 0.
+ 	(read): Check if the output stream was closed and then return EOF
+ 	when the buffer is empty.
+ 	(receive): Mark the output stream as closed when passed a -1.
+ 
+ 	* java/io/PipedOutputStream.java (close): Notify the input stream
+ 	that there's no more data coming.
+ 	(connect): Added a FIXME comment to note more coordination needed
+ 	with PipedInputStream.
+ 	(flush): Added a FIXME comment to mark what this method might do
+ 	instead of nothing.
+ 
+ Fri Oct 30 14:27:21 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/PipedInputStream.java: Rewritten.
+ 
+ 1998-10-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Throwable.java: Rewrote from scratch.
+ 
+ 	* java/lang/Class.h (Class): Don't mention newMultiArray.
+ 	* prims.cc (newMultiArray): Removed.
+ 	(_Jv_NewMultiArray): Removed.
+ 	(newArray): Removed.
+ 	(new_multi_array): New function.
+ 	(_Jv_NewMultiArray): Rewrote from scratch.
+ 
+ 	* include/javaprims.h: Regenerated class declarations.
+ 	* classes.pl (scan): Don't declare PrimClass.
+ 	* include/cni.h (JvPrimClass): Use new names for classes.
+ 	* java/lang/Class.h (Class): Removed _Jv_initPrimClass as friend;
+ 	added _Jv_PrimClass.
+ 	* prims.cc (_Jv_PrimClass): Renamed from PrimClass.
+ 	(_Jv_initPrimClass): Removed.
+ 	(DECLARE_PRIM_TYPE): Generated globals now start with `_Jv_'.
+ 	(_Jv_AllocObject): Added comment.
+ 	(_Jv_NewObjectArray): Likewise.
+ 	(_Jv_NewPrimArray): Likewise.
+ 
+ 1998-10-29  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natClass.cc (_Jv_NewClass): Initialize new field.
+ 	(_Jv_FindArrayClass): Use dtable_method_count to compute size of
+ 	new dtable.
+ 	* java/lang/Class.h (Class): Added `dtable_method_count' field.
+ 
+ 	* java/lang/natObject.cc (init): New global.
+ 	(sync_init): Call _Jv_InitializeSyncMutex if required.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added ClassLoader.h.
+ 	* include/jvm.h (_Jv_FindClassFromSignature): Declare.
+ 	* java/lang/Class.h (Class): simpleLookupClass, insertClass,
+ 	internalAddClass, lookupArray no longer friends.
+ 	_Jv_RegisterClass, _Jv_FindClassInCache, _Jv_NewClass,
+ 	_Jv_FindArrayClass now friends.
+ 	* java/lang/natClass.cc (HASH_LEN): New macro.
+ 	(HASH_UTF): Likewise.
+ 	(loaded_classes): New global.
+ 	(_Jv_FindClass): New function.
+ 	(ClassClass): New define.
+ 	(_Jv_FindClassInCache): New function.
+ 	(_Jv_RegisterClass): Likewise.
+ 	(_Jv_NewClass): Likewise.
+ 	Include <string.h>
+ 	(ObjectClass): New define.
+ 	(CloneableClass): New define.
+ 	* prims.cc (_Jv_FindClass): Removed.
+ 	(simpleLookupClass): Removed.
+ 	(insertClass): Removed.
+ 	(CLASSHASHSZ): Removed.
+ 	(classPool): Removed.
+ 	(_Jv_RegisterClass): Removed.
+ 	(internalAddClass): Removed.
+ 	(ClassClass): Removed.
+ 	(RuntimeClass): Removed.
+ 	(lookupArray): Removed.
+ 	(CloneableClass): Removed.
+ 	(CLASSMAXSIG): Removed.
+ 	Rearranged file to group related functions together.
+ 	(_Jv_IsInstanceOf): Moved to natClass.cc.
+ 	(abort_final): Removed.
+ 	Removed some unused includes.
+ 	(classFromSig): Removed.
+ 	(_Jv_FindClassFromSignature): New function.
+ 	(_Jv_initPrimClass): Renamed.
+ 	(getClass): Removed.
+ 
+ Thu Oct 29 23:17:17 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/FileDescriptor.java (finalize): Throws IOException
+ 	instead of Throwable.
+ 
+ 	* java/io/FileInputStream.java: Rewritten.
+ 
+ 	* java/io/StreamTokenizer.java (nextToken): Unread newline character
+ 	at the end of a comment.
+ 
+ 1998-10-29  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/javaprims.h: Regenerated class declarations.
+ 	* classes.pl (scan): Don't special-case ClassLoader.
+ 
+ 	* prims.cc (processClass): Removed.
+ 	(_Jv_InitClass): Removed.
+ 	Removed all CSTATE_ macros.
+ 	(resolveConstants): Removed.
+ 	(MAXDIMS): Removed.
+ 	(_Jv_NewMultiArray): Cleaned up.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added NoClassDefFoundError.h.
+ 	* java/lang/Class.h (Class): Declare new methods.  processClass no
+ 	longer a friend.
+ 	* java/lang/Class.java (hackTrampoline): New method.
+ 	(initializeClass): Declare.
+ 	(hackRunInitializers): Declare.
+ 	* java/lang/natClass.cc (getClassLoader): Moved into Class.h.
+ 	(initializeClass): New method.
+ 	(hackRunInitializers): New method.
+ 	(init_name, void_signature): Moved from prims.cc.
+ 	(_Jv_InitClass): New function.
+ 	(isAssignableFrom): Don't call processClass.
+ 	(STATE_NOTHING): New macro.
+ 	(resolveConstants): New function.
+ 	Include Thread.h.
+ 	(ErrorClass): New define.
+ 
+ 	* java/lang/Class.java (getClassLoader): Declare.
+ 	* java/lang/ClassLoader.java: Rewrote from scratch.
+ 
+ 	* java/lang/natClass.cc: Include IncompatibleClassChangeError.h,
+ 	AbstractMethodError.h, IllegalAccessError.h,
+ 	NoClassDefFoundError.h.
+ 	* include/jvm.h (StringClass): Declare _Jv_equalUtf8Consts.
+ 	* prims.cc (_Jv_equalUtf8Consts): Renamed from equalUtf8Consts; no
+ 	longer static.  Changed return type.
+ 	* java/lang/natFirstThread.cc (run): Use _Jv_GetMethodLocal.
+ 	* java/lang/Class.h (Class): findMethodLocal no longer a friend.
+ 	* prims.cc (findMethodLocal): Removed.
+ 	(processClass): Use _Jv_GetMethodLocal.
+ 
+ 1998-10-28  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (_Jv_LookupInterfaceMethod): Removed.
+ 	* java/lang/Class.h (Class): Declare _Jv_GetMethodLocal as
+ 	friend.
+ 	* java/lang/natClass.cc (_Jv_GetMethodLocal): New function.
+ 	(_Jv_LookupInterfaceMethod): New function (rewrote from scratch).
+ 
+ 	* include/jni.h: Added copyright header.
+ 	* include/javaprims.h: Added copyright header.
+ 	* include/java-field.h: Added copyright header.
+ 	* include/java-array.h: Added copyright header.
+ 	* include/cni.h: Added copyright header.
+ 
+ 	* include/javaprims.h: Regenerated class declarations using
+ 	classes.pl; now they are complete.
+ 	* classes.pl: New file.
+ 
+ 	* java/lang/natMath.cc: Include <config.h>.
+ 	* java/lang/reflect/natField.cc: Include <config.h>.
+ 	* java/util/NativeUtil.java: Removed.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added Math.h.
+ 	* java/lang/Math.h: Removed.
+ 	* java/util/natGregorianCalendar.cc: Added copyright header.
+ 	Include <config.h>.
+ 	* java/lang/natFloat.cc: Added copyright header.
+ 	* java/lang/Byte.java: Added copyright header.
+ 	* java/lang/Void.java: Added copyright header.
+ 	* java/lang/Short.java: Added copyright header.
+ 
+ Wed Oct 28 12:55:47 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* include/javaprims.h (java::io): Added bunch of missing classes.
+ 	
+ 	* java/io/DataInputStream.java (readLine): Added a special case
+ 	for handling BufferedInputStream data to reduce the likelihood
+ 	of a pushback error.
+ 	(skipBytes): Added code to handle negative number of skip bytes.
+ 	
+ 	* java/io/StreamTokenizer.java: Rewritten.
+ 
+ 1998-10-28  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/natGregorianCalendar.cc (computeFields): Call
+ 	getRawOffset as a method.
+ 
+ 	* include/javaprims.h (java::io): Added FilterOutputStream.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added PrintStream.h,
+ 	FilterOutputStream.h.
+ 	* java/lang/natFirstThread.cc: Include System.h, Modifier.h,
+ 	PrintStream.h.
+ 	(die): New function.
+ 	(run): Die if `main' not found, is not public, or is not static.
+ 
+ 	* boehm.cc (_Jv_MarkObj): Use new field names.
+ 	* include/java-field.h (JvGetFirstInstanceField): Use new field
+ 	names.
+ 	(JvNumInstanceFields): Likewise.
+ 	* java/lang/natClass.cc (isAssignableFrom): Use new field names.
+ 	(getInterfaces): Likewise.
+ 	* prims.cc (CLASS_CONSTANTS): Removed.
+ 	(CLASS_CONST_SIZE): Likewise.
+ 	(CLASS_CONST_TAG): Likewise.
+ 	(CLASS_CONST_DATA): Likewise.
+ 	(CLASS_CONST_UTF8): Likewise.
+ 	(WORD2UTF): Likewise.
+ 	(CLASS_CLASS): Likewise.
+ 	(CLASS_PRIM_SIG): Likewise.
+ 	(CLASS_ARRAY_CACHE): Likewise.
+ 	(HASH_CHARS): Likewise.
+ 	(hashClassName): Likewise.
+ 	Many changes to use new field names.
+ 	* java/lang/Class.h (Class): Renamed fields to track compiler.
+ 
+ 1998-10-27  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natClass.cc: Use #pragma implementation.
+ 	(getComponentType): Moved into header.
+ 	(getModifiers): Likewise.
+ 	(getName): Likewise.
+ 	(getSuperclass): Likewise.
+ 	(isArray): Likewise.
+ 	(isPrimitive): Likewise.
+ 	* include/jvm.h (_Jv_FindClass): Declare.
+ 	* java/lang/natFirstThread.cc (run): Updated for new Class.h.
+ 	* java/lang/natSystem.cc (arraycopy): Updated for new Class.h.
+ 	* include/javaprims.h: Use _Jv_Method, not JvMethod.
+ 	* java/lang/Class.h: Rewrote from scratch.
+ 	* prims.cc: Many changes to work with new Class.h.
+ 	* include/java-field.h (CLASS_FIELDS): Removed.
+ 	(CLASS_SFIELDS): Likewise.
+ 	(CLASS_IFIELDS): Likewise.
+ 	(CLASS_NFIELDS): Likewise.
+ 	(CLASS_NIFIELDS): Likewise.
+ 	(CLASS_NSFIELDS): Likewise.
+ 	(CLASS_FSIZE): Likewise.
+ 	(JvGetFirstInstanceField): Rewrote.
+ 	(JvNumInstanceFields): Likewise.
+ 
+ 	* java/lang/Object.h: Added copyright comment.
+ 
+ Wed Oct 28 00:32:23 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* java/text:  New package directory.
+ 	* java/text/FieldPosition.java:  New class.
+ 	* java/text/ParsePosition.java:  New class. 
+ 	* java/text/ParseException.java:  New Exception class.
+ 	* java/text/Format.java:  New class.
+ 	* java/text/NumberFormat.java:  New (empty placeholder) class.
+ 	* java/text/DateFormatSymbols.java:  New class (no Locales support).
+ 	* java/text/DateFormat.java:  New Format class (incomplete).
+ 	* java/text/SimpleDateFormat.java:  New DateFormat class.
+ 	
+ 	* include/javaprims.h (java::test):  Added new package and classes.
+ 	* java/util/Calendar.java (clone):  New method.
+ 	* java/util/Date.java (toString):  Added non-native implementation.
+ 	(parse):  Made public instead of synchronized.
+ 	* java/util/natDate.cc (toString):  Removed.
+ 	* java/util/natGregorianCalendar.cc (computeFields):
+ 	Use gmtime (or gmtime_r) if no zone offset (the default, for now!).
+ 
+ 1998-10-27  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* boehm.cc (_Jv_MarkObj): Correctly mark a class' interfaces.
+ 
+ 	* prims.cc (lookupArray): Added explanatory comment.
+ 	* boehm.cc (_Jv_MarkObj): Correctly scan methods and fields of
+ 	class.  Mark the class of each object.
+ 	(_Jv_MarkArray): Mark the object's class.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Create java-gc.h.
+ 	* include/boehm-gc.h: New file.
+ 	* include/no-gc.h: New file.
+ 	* java/lang/Class.h (Class): Declare JV_MARKOBJ_DECL as friend, if
+ 	defined.
+ 	* java/lang/Object.h: Include java-gc.h.
+ 	(Object): Declare JV_MARKOBJ_DECL and JV_MARKARRAY_DECL as
+ 	friends, if defined.
+ 	* boehm.cc (_Jv_MarkObj): Renamed from mark_obj; changed
+ 	signature.
+ 	(_Jv_MarkArray): Renamed from mark_array; changed signature.
+ 
+ 1998-10-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natCharacter.cc (isSpaceChar): Look for line and
+ 	paragraph separators, not numbers.
+ 
+ 	* java/io/Writer.java (write): Removed write(char) to avoid
+ 	ambiguity.
+ 	* java/util/Properties.java: Rewrote from scratch.
+ 	* include/javaprims.h (java::io): Added PrintWriter,
+ 	BufferedWriter, PushbackReader.
+ 
+ Mon Oct 26 13:13:28 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/System.java: exit() is a static method.
+ 
+ 1998-10-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natString.cc (_Jv_NewStringUTF): Use
+ 	_Jv_strLengthUtf8.
+ 	(_Jv_NewStringUtf8Const): Likewise.
+ 	* include/jvm.h (_Jv_strLengthUtf8): Declare.
+ 	* prims.cc (_Jv_strLengthUtf8): Renamed from strLengthUtf8.
+ 
+ 	* java/lang/Object.h (Object): Add mark_array as friend function.
+ 	* prims.cc (_Jv_NewPrimArray): Use _Jv_AllocObj, not
+ 	_Jv_AllocBytes, to ensure that header is marked.
+ 	* boehm.cc (mark_obj): Push sync_info field for all objects, not
+ 	just Objects.
+ 	(mark_array): Push sync_info field for array.
+ 
+ 1998-10-24  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/String.java (String): Updated for StringBuffer
+ 	change.
+ 	* java/util/BitSet.java: Renamed field (data->bits) to conform to
+ 	serialization spec.
+ 	* java/lang/StringBuffer.java: Renamed fields to conform to
+ 	serialization spec: buffer->value, next->count, copy->shared.
+ 
+ Wed Oct 21 18:24:57 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* java/util/TimeZone.java:  New class.
+ 	* java/util/SimpleTimeZone.java:  New class.
+ 	* java/util/Locale.java:  New file.
+ 	* java/util/Calendar.java:  Make almost complete.
+ 	* java/util/GregorianCalendar.java
+ 	* java/util/natGregorianCalendar.cc:  New file.
+ 	* java/util/Date.java:  Re-written from scratch.
+ 	* java/util/natDate.cc (setTime):  Removed - no longer native.
+ 	* include/javaprims.h (java::util):  Add new classes.
+ 	* Makefile.am (nat_files):  Add java/util/natGregorianCalendar.o.
+ 	(nat_headers);  Add TimeZone.h, Calendar.h, GregorianCalendar.h.
+ 
+ Sat Oct 24 22:58:25 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/natFileDescriptorPosix.cc (read): Zero extend jbyte b before
+ 	returning it as a jint.
+ 
+ 1998-10-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (arg_vec, main_group, main_thread): New globals.
+ 	(JvRunMain): Use them.
+ 
+ Fri Oct 23 17:10:12 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/DataInputStream.java: Rewritten.
+ 
+ 	* java/io/DataOutputStream.java (writeUTF): OR secondary and
+  	tertiary bytes with 0x80 per spec.
+ 
+ 1998-10-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/String.java (init): Changed name of `copy' argument.
+ 	* java/lang/natString.cc (init): Inverted sense of `copy'
+ 	argument.
+ 
+ 	* java/lang/Object.h (Object): Declare mark_obj as a friend.
+ 	* java/lang/Class.h (Class): Declare mark_obj as a friend.
+ 	* boehm.cc (ObjectClass): New define.
+ 	(ClassClass): Likewise.
+ 	(mark_obj): Special-case Object and Class.
+ 
+ 	* prims.cc (_Jv_NewPrimArray): Pass correct args to memset.
+ 
+ 	* java/util/BitSet.java: Rewrote from scratch.
+ 
+ 	* prims.cc (lookupArray): Removed useless cast.
+ 
+ 	* java/lang/natObject.cc: Use `#pragma implementation'.
+ 
+ 	* java/lang/String.java (init): Added `copy' argument.
+ 	(String): Look in StringBuffer to find char array.
+ 	* java/lang/natString.cc (init): Added `copy' argument.
+ 	* java/lang/StringBuffer.java: Rewrote from scratch.
+ 
+ 	* java/lang/Compiler.java: Rewrote from scratch.
+ 	* java/lang/Throwable.java: Don't use NativeLang.
+ 	* include/javaprims.h (java::lang): Don't mention NativeLang.
+ 	* java/lang/Process.java: Rewrote from scratch.
+ 	* java/lang/SecurityManager.java (classLoaderDepth): Commented
+ 	out.
+ 	(currentClassLoader): Likewise.
+ 	(currentLoadedClass): Likewise.
+ 	* java/lang/natClass.cc (getClassLoader): Commented out.
+ 	* java/lang/Class.java (getClassLoader): Commented out.
+ 	* java/lang/Compiler.java: Removed.
+ 	* java/lang/NativeLang.java: Removed.
+ 
+ 	* java/lang/natFirstThread.cc (run): Use _Jv_makeUtf8Const.
+ 	* include/jvm.h (StringClass): Declare _Jv_makeUtf8Const.
+ 	* prims.cc (_Jv_makeUtf8Const): Renamed from makeUtf8Const.
+ 	(_Jv_hashUtf8String): Now static.
+ 	* include/java-field.h (getNameUtf8Const): Use `_Jv_Utf8Const' as
+ 	name of return type.
+ 
+ 	* java/lang/Class.h (Class): Declare checkMemberAccess.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added Member.h.
+ 	* java/lang/natClass.cc: Include Member.h.
+ 	(getDeclaredClasses): Call checkMemberAccess.
+ 	* java/lang/Class.java (checkMemberAccess): Call
+ 	SecurityManager.checkMemberAccess.
+ 
+ Fri Oct 23 08:01:54 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/SecurityManager.java: Rewritten.
+ 
+ Thu Oct 22 17:16:10 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/applet/Applet.java, java/applet/AppletContext.java,
+ 	java/applet/AppletStub.java, java/applet/AudioClip.java,
+ 	java/awt/AWTError.java, java/awt/AWTException.java,
+ 	java/awt/BorderLayout.java, java/awt/Button.java,
+ 	java/awt/Canvas.java, java/awt/CardLayout.java,
+ 	java/awt/Checkbox.java, java/awt/CheckboxGroup.java,
+ 	java/awt/CheckboxMenuItem.java, java/awt/Choice.java,
+ 	java/awt/Color.java, java/awt/Component.java,
+ 	java/awt/Container.java, java/awt/Dialog.java,
+ 	java/awt/Dimension.java, java/awt/Event.java,
+ 	java/awt/FileDialog.java, java/awt/FlowLayout.java,
+ 	java/awt/Font.java, java/awt/FontMetrics.java,
+ 	java/awt/Frame.java, java/awt/Graphics.java,
+ 	java/awt/GridBagConstraints.java, java/awt/GridBagLayout.java,
+ 	java/awt/GridLayout.java, java/awt/Image.java,
+ 	java/awt/Insets.java, java/awt/Label.java,
+ 	java/awt/LayoutManager.java, java/awt/List.java,
+ 	java/awt/MediaTracker.java, java/awt/Menu.java,
+ 	java/awt/MenuBar.java, java/awt/MenuComponent.java,
+ 	java/awt/MenuContainer.java, java/awt/MenuItem.java,
+ 	java/awt/Panel.java, java/awt/Point.java, java/awt/Polygon.java,
+ 	java/awt/Rectangle.java, java/awt/Scrollbar.java,
+ 	java/awt/TextArea.java, java/awt/TextComponent.java,
+ 	java/awt/TextField.java, java/awt/Toolkit.java,
+ 	java/awt/Window.java, java/awt/image/ColorModel.java,
+ 	java/awt/image/CropImageFilter.java,
+ 	java/awt/image/DirectColorModel.java,
+ 	java/awt/image/FilteredImageSource.java,
+ 	java/awt/image/ImageConsumer.java,
+ 	java/awt/image/ImageFilter.java,
+ 	java/awt/image/ImageObserver.java,
+ 	java/awt/image/ImageProducer.java,
+ 	java/awt/image/IndexColorModel.java,
+ 	java/awt/image/MemoryImageSource.java,
+ 	java/awt/image/PixelGrabber.java,
+ 	java/awt/image/RGBImageFilter.java, java/awt/peer/ButtonPeer.java,
+ 	java/awt/peer/CanvasPeer.java,
+ 	java/awt/peer/CheckboxMenuItemPeer.java,
+ 	java/awt/peer/CheckboxPeer.java, java/awt/peer/ChoicePeer.java,
+ 	java/awt/peer/ComponentPeer.java,
+ 	java/awt/peer/ContainerPeer.java, java/awt/peer/DialogPeer.java,
+ 	java/awt/peer/FileDialogPeer.java, java/awt/peer/FramePeer.java,
+ 	java/awt/peer/LabelPeer.java, java/awt/peer/ListPeer.java,
+ 	java/awt/peer/MenuBarPeer.java,
+ 	java/awt/peer/MenuComponentPeer.java,
+ 	java/awt/peer/MenuItemPeer.java, java/awt/peer/MenuPeer.java,
+ 	java/awt/peer/PanelPeer.java, java/awt/peer/ScrollbarPeer.java,
+ 	java/awt/peer/TextAreaPeer.java,
+ 	java/awt/peer/TextComponentPeer.java,
+ 	java/awt/peer/TextFieldPeer.java, java/awt/peer/WindowPeer.java,
+ 	java/net/ContentHandler.java, java/net/ContentHandlerFactory.java,
+ 	java/net/DatagramPacket.java, java/net/DatagramSocket.java,
+ 	java/net/DefaultSocketImpl.java, java/net/InetAddress.java,
+ 	java/net/MalformedURLException.java, java/net/NativeNet.java,
+ 	java/net/ProtocolException.java, java/net/ServerSocket.java,
+ 	java/net/Socket.java, java/net/SocketException.java,
+ 	java/net/SocketImpl.java, java/net/SocketImplFactory.java,
+ 	java/net/URL.java, java/net/URLConnection.java,
+ 	java/net/URLEncoder.java, java/net/URLStreamHandler.java,
+ 	java/net/URLStreamHandlerFactory.java,
+ 	java/net/UnknownHostException.java,
+ 	java/net/UnknownServiceException.java: Removed.
+ 
+ 1998-10-22  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (_Jv_AllocObject): Register finalizer if class'
+ 	finalizer is not Object.finalize.
+ 	(internalAddClass): Don't set `final' member of class.
+ 	* java/lang/Object.h: Updated _JvObjectPrefix comment to mention
+ 	other places that know about finalize() location.
+ 	* java/lang/Class.h (Class): Removed `final' field.
+ 
+ 	* aclocal.m4, configure: Rebuilt.
+ 	* acinclude.m4 (LIB_AC_PROG_CXX): Unconditionally use
+ 	AC_CHECK_PROGS; otherwise the CXX cache variable might not be
+ 	set.
+ 	* configure.in (AC_OUTPUT): Pass CXX to config.status.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_MAKEFLAGS): Added CXX, CXXFLAGS.
+ 
+ 1998-10-21  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Object.java (finalize): Move to be first method in
+ 	class.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (GCINCS): Include contents of boehm-cflags file.
+ 
+ Tue Oct 20 13:11:04 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* java/lang/ArrayIndexOutOfBoundsException.java
+  	(ArrayIndexOutOfBoundsException): Fixed string literal.
+ 	* java/lang/StringIndexOutOfBoundsException.java
+ 	(StringIndexOutOfBoundsException): Fixed string literal.
+ 
+ 1998-10-20  Andrew Haley  <aph@viagra.cygnus.co.uk>
+ 
+ 	* natFileDescriptorEcos.cc added.
+ 	* natFileDescriptor.cc renamed natFileDescriptorPosix.cc.  
+ 
+ 1998-10-20  Andrew Haley  <aph@viagra.cygnus.co.uk>
+ 
+ 	* acconfig.h: test for __int32_t and __uint32_t added.
+ 	* include/config.h.in: test for __int32_t and __uint32_t added.
+ 	* java/lang/fdlibm.h: test for __int32_t and __uint32_t added.
+ 	* java/lang/mprec.h: test for __int32_t and __uint32_t added.
+ 	* configure.in: test for __int32_t and __uint32_t added.
+ 	* configure: test for __int32_t and __uint32_t added.
+ 	
+ 	* natFileDescriptor.cc renamed natFileDescriptorPosix.cc.  
+ 
+ 	* configure.in: Test for --enable ecos and link
+ 	natFileDescriptor.cc to natFileDescriptorEcos.cc or
+ 	natFileDescriptorPosix.cc
+ 	
+ 	* java/lang/dtoa.c: #include <stdio.h> moved inside #ifdef DEBUG.
+ 	
+ Mon Oct 19 18:13:58 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ByteArrayInputStream.java (skip): Ensure that arg passed
+  	in isn't negative.
+ 
+ 	* java/io/CharArrayReader.java (close): Synchronize on lock
+  	object per Reader contract.
+ 	(read): Synchronize on lock obj.  Verify that reader wasn't closed.
+ 	(reset): Synchronize on lock obj.  Verify that reader wasn't closed.
+ 	(skip): Synchronize on lock obj.  Verify that reader wasn't closed.
+   	Ensure that arg passed in isn't negative.
+ 
+ 	* java/io/FilterReader.java (FilterReader): Use the lock obj when
+ 	constructing the superclass.
+ 
+ 	* java/io/PushbackReader.java (close): Synchronize on lock
+  	object per Reader contract.
+ 	(read): Synchronize on lock obj.  Verify that reader wasn't closed.
+ 	(ready): Synchronize on lock obj.  Throw IOException if reader
+  	wasn't closed.
+ 	(reset): Synchronize on lock obj.  Verify that reader wasn't closed.
+ 	(skip): Synchronize on lock obj.  Verify that reader wasn't closed.
+   	Ensure that arg passed in isn't negative.
+ 	(unread): Synchronize on lock obj.  Verify that reader wasn't closed.
+ 
+ 	* java/io/StringReader.java: Created.
+ 	
+ Sun Oct 18 02:19:11 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/CharArrayReader.java (mark): Removed synchronized modifier
+ 	to match JCL.
+ 	(read): Removed synchronized modifier to match JCL.
+ 	(reset): Removed synchronized modifier to match JCL.
+ 	(skip): Removed synchronized modifier to match JCL.
+ 
+ Sun Oct 18 02:01:54 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/PushbackReader.java (PushbackReader): Made
+ 	constructors public.
+ 
+ 1998-10-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/PushbackInputStream.java (PushbackInputStream): Made
+ 	constructors public.
+ 
+ 1998-10-16  Anthony Green  <green@cygnus.com>
+ 
+ 	* aclocal.m4, configure: Rebuilt.
+ 	* acinclude.m4 (LIBJAVA_CONFIGURE): Changed for new
+ 	configure.host.
+ 	* configure.host: Rewrote.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_CXXFLAGS): Added LIBJAVA_CXXFLAGS.
+ 	(AM_CFLAGS): New macro.
+ 	($(c_files)): Use COMPILE macro.
+ 	(EXTRA_libjava_a_SOURCES): Added dummy file to work around
+ 	automake problem(s).
+ 
+ Fri Oct 16 16:36:28 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ByteArrayInputStream.java (mark): Removed temp. comment.
+ 
+ 	* java/io/CharArrayReader.java: Created.
+ 
+ Fri Oct 16 15:17:01 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/PushbackInputStream.java (PushbackInputStream): Changed
+  	size check to allow 0 per JCL.
+ 
+ 	* java/io/PushbackReader.java: Created.
+ 
+ 1998-10-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/natFileDescriptor.cc: Conditionalize <unistd.h>,
+ 	<sys/time.h> includes. 
+ 	* java/io/natFile.cc: Conditionalize <unistd.h> include.
+ 	* include/no-threads.h: Conditionalize <unistd.h> include on
+ 	HAVE_UNISTD_H.
+ 
+ Fri Oct 16 14:39:51 1998  Andrew Haley  <aph@madras.cygnus.co.uk>
+ 
+ 	* include/no-threads.h: Don't include <unistd.h> unless HAVE_SLEEP
+  	is defined.
+ 
+ Thu Oct 15 19:27:54 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/FilterReader.java: Created.
+ 
+ Thu Oct 15 17:49:43 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/PushbackInputStream.java: Rewritten.
+ 
+ 	* java/io/BufferedInputStream.java (BufferedInputStream): Check
+ 	that size passed to constructor is legal.
+ 	(read): Check that args passed in are legal.
+ 	(skip): Rewritten to get rid of the temporary buffer.
+ 	(refill): Added marklimit check to grow the buffer.
+ 
+ 	* java/io/ByteArrayInputStream.java (read): Optimized invalid args
+ 	check.
+ 	(bytesAvail): Removed.
+ 	(read): Changed bytesAvail to Math.min.
+ 	(skip): Changed bytesAvail to Math.min.
+ 
+ 	* java/io/InputStream.java (read): Got rid of extraneous exceptions
+ 	from the throws clause.
+ 	(skip): Rewritten to use a temporary buffer.
+ 
+ Thu Oct 15 19:42:55 1998  Andrew Haley  <aph@madras.cygnus.co.uk>
+ 
+ 	* prims.cc: (JvConvertArgv): Check added for argc < 0; possible on
+  	some target OSes
+ 
+ 	* java/lang/dtoa.c: (print): Made #ifdef DEBUG only.
+ 
+ 	* java/lang/strtod.c: (_strtod_r): Don't use HUGE_VAL: it's faster
+  	to write the double one word at a time.
+ 
+ Tue Oct 13 14:41:47 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/BufferedInputStream.java:  Rewritten.
+ 
+ 1998-10-12  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* jni.cc: Include config.h and stddef.h.
+ 
+ 	* java/lang/Class.h (_dispatchTable): Removed again.
+ 	Removed all ACC_* defines again.
+ 
+ Fri Oct  9 17:08:34 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* Makefile.am (nat_files):  Add netField.o.
+ 	(libjava_a_SOURCES):  Add jni.cc.
+ 	(java/lang/reflect/Field.h):  New rule.
+ 	* Makefile.in:  Re-generated.
+ 	* include/javaprims.h:  Add some extra class and typedefs.
+ 	* include/jni.h:  New file.
+ 	* jni.cc:  New file.
+ 
+ 	* include/java-field.h:  New file.
+ 	* include/jvm.h:  #include <java-field.h>.
+ 	* boehm.cc:  #include <java-field.h>.
+ 	* java/lang/Class.h (JvField, inline numbers):  Moved to java-field.h.
+ 	* java/lang/reflect/Member.java:  New class.
+ 	* java/lang/reflect/Field.java:  New class.  (Very incomplete.)
+ 	* java/lang/reflect/natField.cc:  New file.  (Very incomplete.)
+ 
+ Sun Oct 11 00:34:44 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* Makefile.in, aclocal.m4, configure, test/Makefile.in,
+ 	testsuite/Makefile.in: Rebuilt.
+ 	* Makefile.am, acinclude.m4, configure.in: Add multilib support.
+ 	* configure.host: Created.
+ 
+ 1998-10-10  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natObject.cc (sync_init): Always allocate a new
+ 	sync_info.
+ 
+ 1998-10-09  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/ByteArrayInputStream.java (mark): Renamed from
+ 	`mark_FIXME'.
+ 
+ 	* java/io/FileOutputStream.java (finalize): Removed.
+ 	* java/io/FileDescriptor.java (finalize): New method.
+ 
+ Thu Oct  8 17:59:43 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* ByteArrayInputStream.java: Corrected status comment.
+ 
+ Thu Oct  8 17:22:49 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* ByteArrayInputStream.java, FilterInputStream.java: Rewritten.
+ 
+ 1998-10-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (lookupArray): Use static array to initialize list of
+ 	interfaces.
+ 
+ Thu Oct  8 12:45:03 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* prims.cc (lookupArray): Initialize the msize for new
+ 	array classes.
+ 
+ Wed Oct  7 12:13:59 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Check for fsync and sleep.
+ 	* acconfig.h (HAVE_SLEEP, HAVE_FSYNC): Added.
+ 
+ 	* include/no-threads.h (_Jv_CondWait): Wrap sleep() use with
+ 	HAVE_SLEEP. Include config.h.
+ 
+ 	* java/io/natFileDescriptor.cc (NO_FSYNC_MESSAGE): Added.
+ 	* java/io/natFileDescriptor.cc (sync): Wrap fsync() use
+ 	with HAVE_FSYNC.
+ 
+ 1998-10-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/natFile.cc: Don't include SecurityManager.h.
+ 	(performList): Renamed.
+ 	(performMkdir): Likewise.
+ 	(performRenameTo): Likewise.
+ 	(performDelete): Likewise.
+ 	Include <stdlib.h>.
+ 	* java/io/File.java (performDelete): Renamed from natDelete.
+ 	(list): Now written in Java.
+ 	(performList): New method.
+ 	(performMkdir): New method.
+ 	(mkdir): Now written in Java.
+ 	(performRenameTo): New method.
+ 	(renameTo): Now written in Java.
+ 
+ 1998-10-06  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ETAGS_ARGS): New macro.
+ 	(TAGS_DEPENDENCIES): Likewise.
+ 
+ Tue Oct  6 22:04:44 PDT 1998 Anthony Green  <green@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am: Use -classpath option with javac.
+ 	
+ Tue Oct  6 18:51:31 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/FileOutputStream.java (finalize): Call
+ 	super.finalize().
+ 
+ Tue Oct  6 16:02:45 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/mprec.h: Remove unused _mprec_log10 which conflicts
+ 	with newlib's libm.
+ 	* java/lang/mprec.c: Ditto.
+ 
+ 	* java/lang/mprec.h: Include math.h for HUGE_VAL when
+ 	cross-compiling.
+ 
+ Tue Oct  6 14:27:00 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/InputStream.java (skip): Make local var i a long.
+ 
+ Mon Oct  5 09:44:24 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natObject.cc (clone): Use memcpy, not memmove.
+ 	* prims.cc (lookupArray): Use memcpy, not memmove.
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h (HAVE_MEMCPY): Added.
+ 	* configure: Rebuilt.
+ 	* configure.in: Check for memcpy again.
+ 
+ 	* java/io/RandomAccessFile.java (RandomAccessFile): Use
+ 	String.compareTo, not ==.
+ 
+ 	* java/lang/Class.h (Class): Use _Jv_DispatchTable.
+ 	(_PRIMITIVE_DTABLE): Use _Jv_DispatchTable.
+ 	* java/lang/natObject.cc (struct _dispatchTable): Removed.
+ 	* include/jvm.h (struct _Jv_DispatchTable): New structure.
+ 	* prims.cc (lookupArray): Removed dead code.  Copy Object's dtable
+ 	into new array's dtable.
+ 	(_Jv_AllocObject): Use _Jv_DispatchTable.
+ 	(_Jv_NewPrimArray): Likewise.
+ 	(_Jv_NewObjectArray): Likewise.
+ 
+ Fri Oct  2 18:57:14 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* prims.cc (_Jv_ThrowBadArrayIndex): Construct a string with the
+  	offending index value.
+ 	(_Jv_NewPrimArray): Throw NegativeArraySizeException when
+  	appropriate.
+ 	* include/jvm.h (_Jv_ThrowBadArrayIndex): Added declaration.
+ 	* java/lang/Throwable.java: (Throwable): fixed argument to this().
+ 
+ Fri Oct  2 15:58:23 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/DataInput.java, java/io/InputStream.java: Rewritten.
+ 	
+ 	* java/io/OutputStream.java (write): Use off and len parameters to
+  	output partial byte array.
+ 	
+ 	* java/io/BufferedReader.java, java/io/FileReader.java,
+  	java/io/InputStreamReader.java, java/io/LineNumberReader.java,
+  	java/io/OutputStreamWriter.java, java/io/PrintWriter.java,
+  	java/io/Reader.java, java/io/UnsupportedEncodingException.java,
+  	java/io/Writer.java: Added COPYRIGHT-TBD comment.
+ 
+ 	* include/javaprims.h (java::lang): Added
+  	ExceptionInInitializerError, IllegalStateException,
+  	NoSuchFieldException, and UnsupportedOperationException.
+ 
+ Fri Oct  2 01:05:38 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natObject.cc (CloneableClass): Is a Class, not a
+ 	Class*.
+ 
+ 	* include/java-array.h (__JArray): Added clone method.
+ 	* prims.cc (CloneableClass): New define.
+ 	(lookupArray): Initialize array class to indicate that it
+ 	implements Cloneable.
+ 
+ 	* java/lang/Class.h: Removed all ACC_* defines.
+ 	* prims.cc: Include Modifier.h.
+ 	(_Jv_LookupInterfaceMethod): Use methods in
+ 	java.lang.reflect.Modifier, not ACC_ defines.
+ 
+ 	* java/lang/Class.h (Class): Declare getClasses,
+ 	getDeclaredClasses, getDeclaringClass, getModifiers, 
+ 	* java/lang/Class.java: Rewrote from scratch.
+ 
+ 	* include/javaprims.h (java::lang): Added reflect and
+ 	reflect::Modifier.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added Modifier.h.
+ 
+ 	* prims.cc (_Jv_IsInstanceOf): Return false if class is
+ 	primitive.
+ 
+ Fri Oct 2 06:49:00 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/natString.cc (_Jv_StringFindSlot): Use JvAssert
+ 	instead of test and abort.
+ 
+ 	* java/lang/natString.cc (_Jv_NewStringUtf8Const): Add cast to
+ 	remove compiler warning.
+ 
+ Fri Oct  2 12:33:44 1998  Andrew Haley  <aph@korai.cygnus.co.uk>
+ 
+ 	* java/lang/natDouble.cc: zero terminate string.
+ 	* strtod.c: Set errno if no digits are found in fraction.
+ 
+ Thu Oct  1 11:48:28 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/Modifier.java: New file.
+ 
+ 	* java/lang/VirtualMachineError.java: Rewrote from scratch.
+ 	* java/lang/VerifyError.java: Rewrote from scratch.
+ 	* java/lang/UnsatisfiedLinkError.java: Rewrote from scratch.
+ 	* java/lang/UnknownError.java: Rewrote from scratch.
+ 	* java/lang/StackOverflowError.java: Rewrote from scratch.
+ 	* java/lang/OutOfMemoryError.java: Rewrote from scratch.
+ 	* java/lang/InternalError.java: Rewrote from scratch.
+ 	* java/lang/IllegalAccessError.java: Rewrote from scratch.
+ 	* java/lang/ExceptionInInitializerError.java: New file.
+ 	* java/lang/Error.java: Rewrote from scratch.
+ 	* java/lang/ClassFormatError.java: Rewrote from scratch.
+ 	* java/lang/ClassCircularityError.java: Rewrote from scratch.
+ 	* java/lang/AbstractMethodError.java: Rewrote from scratch.
+ 	* java/lang/NoClassDefFoundError.java: Rewrote from scratch.
+ 	* java/lang/NoSuchFieldError.java: Rewrote from scratch.
+ 	* java/lang/LinkageError.java: Rewrote from scratch.
+ 	* java/lang/IncompatibleClassChangeError.java: Rewrote from
+ 	scratch.
+ 	* java/lang/NoSuchMethodError.java: Rewrote from scratch.
+ 
+ 	* java/lang/natObject.cc (_Jv_FinalizeObject): New function.
+ 	* java/lang/Object.h (Object): Declare _Jv_FinalizeObject as a
+ 	friend.
+ 	* include/cni.h (JvAllocObject): Moved from prims.cc.
+ 	Include Class.h.
+ 	* prims.cc (JvAllocObject): Moved to cni.h.
+ 	(_Jv_AllocObject): Use _Jv_FinalizeObject.
+ 	(finalize_name): Removed.
+ 
+ Wed Sep 30 12:09:34 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Class.h (Class): Added size() method.
+ 	* prims.cc (_Jv_MonitorEnter): Removed.
+ 	(_Jv_MonitorExit): Removed.
+ 	* java/lang/Object.h (JvSyncInfo): Removed.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added Cloneable.h,
+ 	CloneNotSupportedException.h.
+ 	* java/lang/Object.h: Rewrote.
+ 	* java/lang/natObject.cc: Rewrote from scratch.
+ 	* java/lang/Object.java: Rewrote from scratch.
+ 
+ 	* java/io/natFile.cc: Conditionally include <dirent.h>.
+ 	(list): If no <dirent.h>, always return NULL.
+ 	* configure: Rebuilt.
+ 	* configure.in: Check for dirent.h.
+ 
+ 	* prims.cc (lookupArray): Don't use sprintf.
+ 
+ 	* java/util/Hashtable.java (containsKey): Use `abs' to compute
+ 	initial index.
+ 	(get): Likewise.
+ 	(put): Likewise.
+ 	(rehash): Likewise.
+ 	(remove): Likewise.
+ 
+ 	* java/util/Hashtable.java (hsize): Renamed from size to avoid
+ 	name conflict with method.
+ 
+ 	* include/javaprims.h (java::util): Added HashtableEntry.
+ 
+ Tue Sep 29 16:48:01 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/Hashtable.java: Rewritten.
+ 
+ Tue Sep 29 00:28:42 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/natFileDescriptor.cc (write): Correctly test `write'
+ 	return value.
+ 	(write): Likewise.
+ 
+ 	* java/lang/natThread.cc (join): Fixed assertion to refer to `nt',
+ 	not `curr_nt'.
+ 
+ 	* posix-threads.cc (_Jv_CondWait): Now returns int.
+ 	* include/javaprims.h (java::lang): Added
+ 	IllegalMonitorStateException.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added IllegalMonitorStateException.h.
+ 	* include/no-threads.h (_Jv_CondDestroy): Removed.
+ 	(_Jv_MutexDestroy): Removed.
+ 	(_Jv_CondWait): Now returns int.
+ 	(_Jv_CondNotify): Likewise.  Added mutex argument.
+ 	(_Jv_CondNotifyAll): Likewise.
+ 	(_Jv_MutexLock): Always succeed.
+ 	(_Jv_MutexUnlock): Likewise.
+ 	* include/posix-threads.h (_Jv_HaveCondDestroy): Define.
+ 	(_Jv_HaveMutexDestroy): Define.
+ 	(_Jv_CondNotify): Now returns int.  Added mutex argument.
+ 	(_Jv_CondNotifyAll): Likewise.
+ 	* include/quick-threads.h (_Jv_CondDestroy): Removed.
+ 	(_Jv_MutexDestroy): Removed.
+ 	(_Jv_CondWait): Now returns int.
+ 	(_Jv_CondNotify): Likewise.  Added mutex argument.
+ 	(_Jv_CondNotifyAll): Likewise.
+ 	* java/lang/natObject.cc (finalize_sync_info): New function.
+ 	(init_mutex): Initialize `init' and register finalizer if
+ 	required.
+ 	(CHECK): New macro.
+ 	(init_mutex): Use it.
+ 	(notify): Use it.
+ 	(notifyAll): Use it.
+ 	(wait): Use it.
+ 	(notify): Throw IllegalMonitorStateException on failure.
+ 	(notifyAll): Likewise.
+ 	(wait): Likewise.  Also, throw InterruptedException if
+ 	appropriate.
+ 	Include cni.h, Thread.h, IllegalMonitorStateException.h,
+ 	InterruptedException.h, IllegalArgumentException.h.
+ 	* java/lang/Object.h (struct JvSyncInfo): Added `init' member.
+ 
+ 	* java/lang/natString.cc: Renamed all `JvPriv' functions.
+ 	* java/lang/natRuntime.cc: Renamed all `JvPriv' functions.
+ 	* java/lang/Object.h: Renamed all `JvPriv' functions (and types).
+ 	* java/lang/natObject.cc: Renamed all `JvPriv' functions.
+ 	* java/lang/natThread.cc: Renamed all `JvPriv' functions.
+ 	* quick-threads.cc: Renamed all `JvPriv' functions.
+ 	* prims.cc: Renamed all `JvPriv' functions.
+ 	* posix-threads.cc: Renamed all `JvPriv' functions.
+ 	* nogc.cc: Renamed all `JvPriv' functions.
+ 	* no-threads.cc: Renamed all `JvPriv' functions.
+ 	* boehm.cc: Renamed all `JvPriv' functions.
+ 	* include/quick-threads.h: Renamed all `JvPriv' functions.
+ 	* include/posix-threads.h: Renamed all `JvPriv' functions.
+ 	* include/no-threads.h: Renamed all `JvPriv' functions.
+ 	* include/jvm.h: Renamed all `JvPrivXXX' functions to `_Jv_XXX'.
+ 
+ 	* include/no-threads.h (JvPrivCondWait): Wrote minimal
+ 	implementation.
+ 	(JvPrivCondNotify): Do nothing.
+ 	(JvPrivCondNotifyAll): Do nothing.
+ 
+ 	* prims.cc (processClass): Handle case where state is
+ 	DOING_CONSTINIT.
+ 
+ 	* java/lang/natFirstThread.cc: Include <stdlib.h>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Fixed sense of --enable-libjava-debug.
+ 
+ 	* java/lang/natThread.cc (join): Declare `t' outside the loop so
+ 	it can be used afterward by the assertion.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: When cross-compiling, assume alloca.
+ 
+ 	* java/lang/natDouble.cc: Updated alloca magic to avoid use of
+ 	__builtin_alloca (autoconf docs are wrong here).
+ 
+ 	* java/io/natFileDescriptor.cc (close): Set fd to -1 before
+ 	closing.
+ 	(available): Use `FD_ZERO' (typo fix).
+ 
+ Tue Sep 29 17:43:30 1998  Andrew Haley  <aph@tikka.cygnus.co.uk>
+ 
+ 	* java/lang/mprec.h, java/lang/mprec.c, java/lang/dtoa.c,
+  	java/lang/natDouble.cc, java/lang/strtod.c: struct _Bigint renamed
+ 	struct _Jv_Bigint.
+ 	* java/lang/mprec.h, java/lang/mprec.c, java/lang/dtoa.c,
+  	java/lang/natDouble.cc, java/lang/strtod.c: struct _reent renamed
+  	struct _Jv_reent.
+ 
+ 	* java/lang/natDouble.cc: layout changed to match GNU coding standard.
+ 	
+ Tue Sep 29 07:57:13 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/natDouble.cc: Declare alloca safely.
+ 
+ 	* configure, include/config.h.in: Rebuilt.
+ 	* configure.in: Add alloca check.
+ 
+ Tue Sep 29 00:28:42 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natThread.cc (finish_): Hold mutex for interrupt
+ 	condition while calling notify.
+ 	(join): Remove `curr_nt' from `nt's join list, not vice versa.
+ 	(interrupt): Hold mutex for interrupt condition while calling
+ 	notify.
+ 
+ 	* java/lang/natString.cc (init): Allocate and try to read `count'
+ 	characters, not `count - offset' characters.
+ 
+ 	* java/io/ByteArrayInputStream.java (ByteArrayInputStream):
+ 	Correctly compute `count'.
+ 
+ 	* java/lang/Boolean.java (getBoolean): Return false if property
+ 	not found.
+ 
+ 	* java/lang/System.java (setProperties): Set prop_init.
+ 
+ Mon Sep 28 12:39:25 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/PrintStream.java (println): Use line.separator, not
+ 	file.separator.
+ 	* java/lang/System.java (out, err): Make both autoflush streams.
+ 	* java/io/ByteArrayOutputStream.java (write): Increment `count'.
+ 
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h (HAVE_MEMCPY): Removed.
+ 	* configure: Rebuilt.
+ 	* configure.in: Never define HAVE_MEMCPY.
+ 
+ 	* java/lang/natString.cc: Don't include OutOfMemoryError.h or
+ 	Class.h.
+ 	(_Jv_AllocString): Use JvAllocObject again.
+ 	* java/lang/Class.h (thread): New field.
+ 	(_Jv_AllocString): No longer a friend.
+ 	* prims.cc (processClass): Removed dead code.  Changed to more
+ 	closely follow the Java Language Specification.
+ 	(processClass): Return early if already at the right state.
+ 
+ 	* prims.cc (JvNewStringUTF): Removed.
+ 	* include/cni.h (JvNewStringUTF): New function.
+ 	(_Jv_NewStringUTF): Declare as `extern "C"'.
+ 	* java/lang/natString.cc (_Jv_NewStringUTF): New function.
+ 
+ 	* java/lang/natDouble.cc: Added copyright info and header
+ 	comment.  Include <stdlib.h>.
+ 	(doubleValueOf): Use alloca, not malloc.  Allocate 3 times as many
+ 	bytes as are chars in string.
+ 
+ Sat Sep 26 00:19:27 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/Hashtable.java (hkeys): Member renamed from to avoid
+ 	clash with method.
+ 	(hsize): Likewise.
+ 
+ 	* java/lang/System.java (init_properties): Now native.
+ 	* java/lang/natSystem.cc (init_properties): New method.
+ 	Include java/util/Properties.h.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added ByteArrayOutputStream.h,
+ 	OutputStreamWriter.h, ByteArrayInputStream.h,
+ 	InputStreamReader.h, Writer.h, InputStream.h, OutputStream.h,
+ 	Reader.h, Vector.h, SecurityManager.h, FilenameFilter.h,
+ 	SyncFailedException.h, EOFException.h, FileNotFoundException.h,
+ 	Properties.h, Hashtable.h, Dictionary.h.
+ 	(CFLAGS): Removed.
+ 
+ 	* include/javaprims.h (java::io): Added Reader, Writer,
+ 	InputStreamReader, OutputStreamWriter,
+ 	UnsupportedEncodingException, ByteArrayInputStream,
+ 	ByteArrayOutputStream, EOFException, SyncFailedException,
+ 	PushbackInputStream.
+ 	(java::lang): Added Cloneable.
+ 	(java::util): Added NoSuchElementException, VectorEnumeration,
+ 	Dictionary, HashtableEnumeration, PropertiesEnumeration.
+ 
+ 	* java/io/PipedReader.java: New file.
+ 
+ Fri Sep 25 00:11:25 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natCharacter.cc (getNumericValue): Use `digit' to pick
+ 	up A-Z.
+ 
+ 	* java/io/io-defs.h: Removed.
+ 
+ 	* java/io/FileInputStream.java (skip): Use FileDescriptor.seek.
+ 	(FileInputStream): Use new constructor.  Can throw IOException.
+ 
+ 	* java/lang/System.java (getProperty): Don't throw
+ 	NullPointerException.
+ 
+ 	* java/io/RandomAccessFile.java: Rewrote from scratch.
+ 
+ 	* java/io/natFileDescriptor.cc: Include EOFException.h.
+ 	(seek): New method.
+ 	(length): New method.
+ 	(getFilePointer): New method.
+ 	(read): New method.
+ 	(available): New method.
+ 	* java/io/FileDescriptor.java (SET, CUR): New constants.
+ 	(seek, length, getFilePointer, read, available): New decls.
+ 
+ 	* java/io/PipedWriter.java: New file.
+ 	* java/io/StringWriter.java: New file.
+ 	* java/io/CharArrayWriter.java: New file.
+ 	* java/io/CharConversionException.java: New file.
+ 	* java/io/BufferedWriter.java: New file.
+ 	* java/io/FilterWriter.java: New file.
+ 	* java/io/FileWriter.java: New file.
+ 
+ 	* java/lang/natString.cc: Include ByteArrayOutputStream.h,
+ 	OutputStreamWriter.h, NullPointerException.h,
+ 	ByteArrayInputStream.h, InputStreamReader.h.
+ 	(getBytes): New method.
+ 	(init): Throw NullPointerException.
+ 	(init): New function.
+ 	* java/lang/String.java (getBytes): Added missing decl.
+ 	(getBytes): New method.
+ 	(String): Added byte[]-based constructors.
+ 	(copyValueOf): Wrote.
+ 	(init): Declare variant which takes byte array and encoding.
+ 	Import java.io.UnsupportedEncodingException.
+ 
+ 	* java/io/File.java: Rewrote from scratch.
+ 	* java/io/natFileDescriptor.cc: Rewrote from scratch.
+ 	* java/io/FileDescriptor.java: Rewrote from scratch.
+ 	* java/io/FilenameFilter.java: Rewrote from scratch.
+ 
+ Thu Sep 24 13:30:16 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/SyncFailedException.java: New file.
+ 	* java/io/UTFDataFormatException.java: Rewrote from scratch.
+ 	* java/io/InterruptedIOException.java: Rewrote from scratch.
+ 	* java/io/FileNotFoundException.java: Rewrote from scratch.
+ 	* java/io/EOFException.java: Rewrote from scratch.
+ 	* java/io/IOException.java: Rewrote from scratch.
+ 	* java/io/PrintStream.java: Rewrote from scratch.
+ 	* java/io/DataOutputStream.java: Rewrote from scratch.
+ 	* java/io/BufferedOutputStream.java: Rewrote from scratch.
+ 	* java/io/FilterOutputStream.java: Rewrote from scratch.
+ 	* java/io/ByteArrayOutputStream.java: Rewrote from scratch.
+ 	* java/io/PipedOutputStream.java: Rewrote from scratch.
+ 	* java/io/FileOutputStream.java: Rewrote from scratch.
+ 	* java/io/OutputStream.java: Rewrote from scratch.
+ 	* java/io/DataOutput.java: Rewrote from scratch.
+ 
+ Mon Sep 28 22:59:54 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* prims.cc (_Jv_CheckCast):  Add missing ! operator.
+ 
+ Mon Sep 28 15:50:06 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* configure.in: Add --enable-libjava-debug
+ 
+ 	* Makefile.am (nat_headers): Add java/lang/Float.h and 
+ 	java/lang/Double.h
+ 
+ 	* acconfig.h: Add DEBUG and HAVE_MEMCPY.
+ 
+ 	* Makefile.in, configure, include/config.h.in: Rebuilt.
+ 
+ Mon Sep 28 17:05:58 1998  Andrew Haley  <aph@korai.cygnus.co.uk>
+ 
+ 	* java/lang/Float.java: Rewritten
+ 	* java/lang/Double.java: Rewritten
+ 	* java/lang/natFloat.cc: toString() added.
+ 	* java/lang/natDouble.cc: toString() added.
+ 	* java/lang/natDouble.cc: doubleValueOf() added.
+ 	* java/lang/dtoa.c, java/lang/mprec.c, java/lang/mprec.h, 
+ 	java/lang/strtod.c: added.
+ 	* ieeefp.h: __sparc added.
+ 	* Makefile.am: java/lang/Float.h and java/lang/Double.h added.
+ 	
+ Thu Sep 24 13:30:16 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/javaprims.h (java::lang): Added
+ 	CloneNotSupportedException.
+ 
+ 	* java/lang/Object.java (clone): No longer native.  Implemented.
+ 	* java/lang/natObject.cc (clone): Removed.
+ 
+ Wed Sep 23 12:03:38 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc: Don't make definitions `extern "C"'.
+ 	(_Jv_RegisterClass): Renamed from registerClass.
+ 	* include/jvm.h (_Jv_ThrowBadArrayIndex): Declare.
+ 	(_Jv_NewArray): Likewise.
+ 	(_Jv_NewMultiArray): Likewise.
+ 	(_Jv_CheckCast): Likewise.
+ 	(_Jv_LookupInterfaceMethod): Likewise.
+ 	(_Jv_CheckArrayStore): Likewise.
+ 	(_Jv_RegisterClass): Likewise.
+ 
+ 	* acconfig.h (HAVE_FMOD, HAVE_MEMCPY): Removed.
+ 	* configure: Rebuilt.
+ 	* configure.in: Don't check for fmod; it is provided by the fdlibm
+ 	code.
+ 	* prims.cc (fmod): Removed.
+ 
+ 	* java/lang/natString.cc (charAt): Use _Jv_uint.
+ 	* java/lang/Class.h (class JvField): Use _Jv_ushort.
+ 	* prims.cc (HASH_CHARS): Use _Jv_ushort.
+ 	(equalUtf8Consts): Likewise.
+ 	(internalAddClass): Use _Jv_uint.
+ 	(processClass): Likewise.
+ 	* include/javaprims.h (_Jv_ushort): Renamed from uint16.
+ 	(_Jv_uint): Renamed from uint32.
+ 	(struct _Jv_Utf8Const): Changed members to use new type names.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Don't check for memcpy.  Require memmove and a way
+ 	to get the time.
+ 	* java/lang/natSystem.cc (arraycopy): Removed dead code, and
+ 	#error.
+ 	(currentTimeMillis): Don't use #error.
+ 
+ Tue Sep 22 18:00:16 1998  Andrew Haley  <aph@korai.cygnus.co.uk>
+ 
+ 	* java/lang/Math.java: static member random renamed to random_ to
+  	avoid conflict with member function of the same name.
+ 	* include/javaprims.h: java.util.Random added.
+ 
+ Tue Sep 22 13:53:14 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-chartables.h: Regenerated.
+ 	* chartables.pl: End COMPACT_CHARACTER #if after fast tables
+ 	printed.
+ 
+ Tue Sep 22 17:17:52 1998  Andrew Haley  <aph@tikka.cygnus.co.uk>
+ 
+ 	* java/lang/Math.java: Rewritten.
+ 	* java/lang/natMath.cc: New file.
+ 	* Files added from fdlibm:
+ 	  java/lang/e_acos.c, java/lang/k_sin.c, java/lang/sf_floor.c,
+ 	  java/lang/e_asin.c, java/lang/k_tan.c, java/lang/sf_rint.c,
+ 	  java/lang/e_atan2.c, java/lang/s_atan.c, java/lang/w_acos.c,
+ 	  java/lang/e_exp.c, java/lang/s_ceil.c, java/lang/w_asin.c,
+ 	  java/lang/e_fmod.c, java/lang/s_copysign.c, java/lang/w_atan2.c,
+ 	  java/lang/e_log.c, java/lang/s_cos.c, java/lang/w_exp.c,
+ 	  java/lang/e_pow.c, java/lang/s_fabs.c, java/lang/w_fmod.c,
+ 	  java/lang/e_rem_pio2.c, java/lang/s_floor.c, java/lang/w_log.c,
+ 	  java/lang/e_remainder.c, java/lang/s_rint.c, java/lang/w_pow.c,
+ 	  java/lang/e_scalb.c, java/lang/s_scalbn.c, java/lang/w_remainder.c,
+ 	  java/lang/e_sqrt.c, java/lang/s_sin.c, java/lang/w_sqrt.c,
+ 	  java/lang/ef_fmod.c, java/lang/s_tan.c, java/lang/wf_fmod.c,
+ 	  java/lang/k_cos.c, java/lang/sf_ceil.c,
+ 	  java/lang/k_rem_pio2.c, java/lang/sf_fabs.c,
+ 	  java/lang/ieeefp.h, java/lang/fdlibm.h
+ 	* Makefile.am: rules added for compiling C files from fdlibm.
+   	
+ Mon Sep 21 15:40:58 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* chartables.pl: Minor documentation fixes.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Fixed --help output for --enable-fast-character.
+ 
+ Thu Sep 17 11:03:27 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Recognize --enable-fast-character.
+ 	* acconfig.h (COMPACT_CHARACTER): New define.
+ 	* include/config.h.in: Rebuilt.
+ 	* include/java-chartables.h: New file.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_files): Added natCharacter.o.
+ 	* java/lang/natCharacter.cc: New file.
+ 	* chartables.pl (set_attribute): New function.
+ 	(@attributes, @second_attributes): New globals.
+ 	($ROMAN_START, $ROMAN_END): Likewise.
+ 	(process_char): Call set_attribute when required.
+ 	(print_char): Just print hex value.
+ 	(print_block): Generate C++ syntax.
+ 	(print_numerics): Likewise.
+ 	(print_single_map): Likewise.
+ 	(print_all_block): Likewise.
+ 	(print_case_table): Likewise.
+ 	(print_fast_tables): New function.
+ 	Generate C++ code suitable for a header file.
+ 	* java/lang/Character.java (table_search): Removed.
+ 	(digit_value): Now native.
+ 	(getNumericValue): Likewise.
+ 	(getType): Likewise.
+ 	Removed all automatically-generated tables.
+ 	(Tamil_Digit_One): Removed.
+ 	(isSpaceChar): Now native.
+ 	(isTitleCase): Likewise.
+ 	(isLowerCase): Likewise.
+ 	(isUpperCase): Likewise.
+ 	(toLowerCase): Likewise.
+ 	(toTitleCase): Likewise.
+ 	(toUpperCase): Likewise.
+ 	(isDefined): Fixed sense of test.
+ 
+ Wed Sep 16 12:00:19 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natString.cc (equalsIgnoreCase): Removed obsolete
+ 	FIXME comment.
+ 	(regionMatches): Likewise.
+ 
+ Tue Sep 15 14:35:12 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (_Jv_AllocObject): Call _Jv_InitClass on the class.
+ 
+ 	* java/lang/Class.h (Object): For now, declare _Jv_AllocString as
+ 	a friend.
+ 	* java/lang/natString.cc (_Jv_AllocString): For now, don't call
+ 	_Jv_AllocObject.
+ 
+ 	* java/lang/natString.cc (toUpperCase): Declare `ch' as a jchar,
+ 	not a char.
+ 
+ 	* java/lang/natClass.cc (isAssignableFrom): Handle arrays.
+ 
+ Fri Sep 11 14:01:08 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (instanceof_class): Removed.
+ 	(instanceof_array): Likewise.
+ 	(instanceof): Likewise.
+ 	(_Jv_IsInstanceOf): Use Class::isAssignableFrom.
+ 	(_Jv_CheckCast): Likewise.
+ 	* java/lang/natClass.cc (isAssignableFrom): New method.
+ 	* java/lang/Class.java (isAssignableFrom): Now native.
+ 
+ 	* include/cni.h (JvThrow): Use `extern inline'.
+ 	(JvAllocObject): Likewise.
+ 	(JvInitClass): Likewise.
+ 
+ 	* java/lang/natSystem.cc (arraycopy): Only check class of source
+ 	object if not null.
+ 
+ 	* prims.cc (_Jv_CheckArrayStore): Wrote.
+ 	(_Jv_MonitorEnter): Prefer `JvThrow'.
+ 	Include ArrayStoreException.h.
+ 	(_Jv_CheckCast): Indentation cleanup.
+ 
+ Thu Sep 10 18:59:29 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* chartables.pl: New file.
+ 	* java/lang/Character.java: Rewrote from scratch.
+ 
+ Fri Sep 18 18:15:58 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/lang/ArithmeticException.java,
+  	java/lang/ArrayIndexOutOfBoundsException.java,
+  	java/lang/ArrayStoreException.java,
+  	java/lang/ClassCastException.java,
+  	java/lang/ClassNotFoundException.java,
+  	java/lang/CloneNotSupportedException.java,
+  	java/lang/Exception.java, java/lang/IllegalAccessException.java,
+  	java/lang/IllegalArgumentException.java,
+  	java/lang/IllegalMonitorStateException.java,
+  	java/lang/IllegalThreadStateException.java,
+  	java/lang/IndexOutOfBoundsException.java,
+  	java/lang/InstantiationException.java,
+  	java/lang/InterruptedException.java,
+  	java/lang/NegativeArraySizeException.java,
+  	java/lang/NoSuchMethodException.java,
+  	java/lang/NullPointerException.java,
+  	java/lang/NumberFormatException.java,
+  	java/lang/RuntimeException.java, java/lang/SecurityException.java,
+  	java/lang/StringIndexOutOfBoundsException.java: Rewritten.
+ 
+ 	* java/lang/IllegalStateException.java,
+  	java/lang/NoSuchFieldException.java,
+  	java/lang/UnsupportedOperationException.java: Created.
+ 
+ Fri Sep 18 15:01:42 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/lang/Integer.java, java/lang/Long.java: Rewritten.
+ 	* java/lang/Byte.java, java/lang/Short.java (decode): Uncommented.
+ 
+ Fri Sep 11 16:49:19 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* prims.cc (JvRunMain):  No longer need to call _Jv_InitClass.
+ 
+ Thu Sep 10 12:23:55 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* Makefile.am (nat_headers): Added StringIndexOutOfBoundsException.h.
+ 
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* include/javaprims.h (java::lang): Added
+ 	StringIndexOutOfBoundsException.
+ 
+ 	* java/lang/String.java: Added header comment and FIXME comment for 
+ 	missing constructors/methods.
+ 	(endsWith): Adjusted offset into string to look at just the last chars.
+ 	Commented out undocumented method.
+ 
+ 	* java/lang/natString.cc: Added includes for
+ 	ArrayIndexOutOfBoundsException.h & StringIndexOutOfBoundsException.h.
+ 	(String::init): Throw StringIndexOutOfBoundsException.
+ 	(String::charAt): Throw StringIndexOutOfBoundsException.
+ 	(String::substring): Throw StringIndexOutOfBoundsException.
+ 	(String::getChars): Throw ArrayIndexOutOfBoundsException.
+ 	(String::getBytes): Throw ArrayIndexOutOfBoundsException.
+ 	(String::compareTo): Return difference/offset between chars/strings.
+ 
+ Tue Sep  8 13:22:33 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/lang/Boolean.java (TYPE): Added comment.
+ 	
+   	* java/lang/Byte.java (decode): Added - commented out until dependent
+  	code for Integer is written.
+ 	(compareTo): JDK 1.2 methods written.
+ 	(hashCode): Added comment to note that values have been verified.
+ 	
+ 	* java/lang/Short.java (decode): Added - commented out until dependent
+ 	code for Integer is written.
+ 	(compareTo): JDK 1.2 methods written.
+ 	(hashCode): Added comment to note that values have been verified.
+ 
+ 	* java/lang/Comparable.java: Created - JDK 1.2 interface.
+ 
+ Fri Sep  4 10:36:35 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/javaprims.h (java::lang): Added VirtualMachineError,
+ 	OutOfMemoryError.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added OutOfMemoryError.h,
+ 	VirtualMachineError.h.
+ 	* prims.cc (_Jv_NewPrimArray): Throw OutOfMemoryError.
+ 	(lookupArray): Likewise.
+ 	(makeUtf8Const): Likewise.
+ 	(_Jv_AllocObject): Likewise.
+ 	(_Jv_NewObjectArray): Likewise.
+ 	Include OutOfMemoryError.h.
+ 
+ 	* java/io/natFileDescriptor.cc (newstr): Removed.  Changed callers
+ 	to use JvNewStringLatin1.
+ 
+ 	* java/io/io-defs.h: Include java/lang/IOException.h.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added
+ 	ArrayIndexOutOfBoundsException.h,
+ 	ClassFormatError.h,ClassNotFoundException.h,
+ 	ClassCircularityError.h, ClassCastException.h,
+ 	IncompatibleClassChangeError.h, AbstractMethodError.h,
+ 	IllegalAccessError.h, LinkageError.h, Error.h,
+ 	NegativeArraySizeException.h, IOException.h.
+ 	* include/cni.h (SignalError): Removed declaration.
+ 	* java/util/natDate.cc (setTime): Use JvFail, not sorry.
+ 	* java/lang/natObject.cc (clone): Use JvFail, not sorry.
+ 	* java/lang/natClass.cc (getInterfaces): Use JvFail, not sorry.
+ 	(newInstance): Likewise.
+ 	(forName): Likewise.
+ 	* java/io/natFileDescriptor.cc (open_read_write): Use JvFail, not
+ 	sorry.
+ 	(read): Use JvThrow, not SignalError.
+ 	(read): Likewise.
+ 	(write): Likewise.
+ 	(skip): Likewise.
+ 	(close): Likewise.
+ 	(open_read): Likewise.
+ 	(open_write): Likewise.
+ 	(ftell): Likewise.
+ 	(fseek): Likewise.
+ 	(newstr): New function.
+ 	* java/io/natFile.cc (isDirectoryUnchecked): Use JvFail, not
+ 	sorry.
+ 	(lastModifiedUnchecked): Likewise.
+ 	(lengthUnchecked): Likewise.
+ 	* include/javaprims.h (sorry): Removed declaration.
+ 	(java::lang): Added ArrayIndexOutOfBoundsException, LinkageError,
+ 	ClassFormatError, ClassNotFoundException, ClassCircularityError,
+ 	ClassCastException, IncompatibleClassChangeError,
+ 	AbstractMethodError, IllegalAccessError, NegativeArraySizeException.
+ 	* prims.cc (instanceof_array): Use JvFail, not sorry.
+ 	(sorry): Removed.
+ 	Include ArrayIndexOutOfBoundsException.h,
+ 	ClassFormatError.h,ClassNotFoundException.h,
+ 	ClassCircularityError.h, ClassCastException.h,
+ 	IncompatibleClassChangeError.h, AbstractMethodError.h,
+ 	IllegalAccessError.h, NegativeArraySizeException.h.
+ 	(_Jv_ThrowBadArrayIndex): Implemented.
+ 	(JvNewStringUTF): Use JvFail, not sorry.
+ 	(_Jv_FindClass): Likewise.
+ 	(_Jv_NewArray): Likewise.
+ 	(throwException): Removed.
+ 	(getClass): Use JvThrow.
+ 	(processClass): Likewise.
+ 	(_Jv_NewObjectArray): Likewise.
+ 	(_Jv_NewMultiArray): Likewise.
+ 	(_Jv_CheckCast): Likewise.
+ 	(_Jv_LookupInterfaceMethod): Likewise.
+ 	(SignalError): Removed.
+ 	(getClass): Use _Jv_NewStringUtf8Const to create String.
+ 
+ 	* java/lang/natSystem.cc (arraycopy): Throw
+ 	ArrayIndexOutOfBoundsException, not IndexOutOfBoundsException.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (GCJH): Renamed.  Now use `gcjh'.  Changed all
+ 	users.
+ 	* include/java-array.h: Mention gcjh, not gjavah.
+ 
+ 	* java/io/natFile.cc (existsUnchecked): Use JvGetStringUTFRegion.
+ 	(canReadUnchecked): Likewise.
+ 	(canWriteUnchecked): Likewise.
+ 	(isFileUnchecked): Likewise.
+ 	* java/io/natFileDescriptor.cc: Don't include cni.h.
+ 
+ 	* java/lang/Thread.java (run__): Declare.
+ 	* java/lang/natThread.cc (run__): New method, to avoid compiler
+ 	warning.
+ 	(start): Use run__, not run_.
+ 
+ 	* java/io/io-defs.h: Include cni.h and jvm.h.
+ 
+ Thu Sep  3 18:20:08 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	Re-implement java.lang.String, using "COMPACT_STRINGS" representation.
+ 	* prims.cc (JvAllocString, JvNewString, JvNewStringlatin1):  Moved
+ 	to natString.cc (with suitable renaming, inlines etc).
+ 	(javaString2CString):  Removed.  Subsumed by _Jv_GetStringUTFRegion.
+ 	* java/lang/Class.h:  Renamed Utf8Const to _Jv_Utf8Const.
+ 	* java/lang/String.h:  Removed - now generated using gjavah.
+ 	* java/lang/String.java:  Re-written from scratch. Many native methods.
+ 	* java/lang/natDouble.cc, java/util/natDate.cc:  #include <cni.h>.
+ 	* java/lang/natString.cc:  Many functions re-written for "compact
+  	strings" representation, or native java.lang.String methods added.
+  	(Utf8Const2JavaString):  Renamed to _Jv_NewStringUtf8Const.
+ 	(_Jv_GetStringUTFLength, _Jv_GetStringUTFRegion):  New methods.
+ 	* java/lang/natClass.cc (getName):  Use new _Jv_NewStringUtf8Const.
+ 	* java/io/natFileDescriptor.cc:  Use new JvGetStringUTFRegion.
+ 	* include/cni.h:  Add inline method.
+ 	* include/java-array.h (jobjectArrayjchar):  gjavah bug work-around.
+ 	* include/javaprims.h:  Moved some stuff frm String.h.
+ 	* include/jvm.h (UTF8_GET, Utf8Const, StringClass):  Moved here.
+ 	* Makefile.am (nat_header):  Added Character.h and String.h.
+ 	(String.h):  Add new rule.
+ 
+ Thu Sep  3 10:28:16 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* no-threads.cc: Include config.h, cni.h, jvm.h.  Don't include
+ 	java-assert.h.
+ 	* posix-threads.cc: Include cni.h, jvm.h.
+ 	* quick-threads.cc: Include cni.h, jvm.h.
+ 	* nogc.cc: Include cni.h, not javaprims.h.
+ 	* java/lang/natFirstThread.cc: Include cni.h, jvm.h.
+ 	* java/lang/natThread.cc: Rearranged #include ordering.  Don't
+ 	include java-assert.h.
+ 	* java/lang/natSystem.cc: Include cni.h.  Don't include
+ 	java-assert.h.
+ 	* java/lang/natRuntime.cc: Include cni.h.  Don't include
+ 	java-assert.h.
+ 	* prims.cc: Rearranged #include ordering.  Don't include
+ 	java-array.h or java-assert.h.
+ 	* boehm.cc: Include config.h, cni.h.
+ 	* exception.cc: Include config.h, cni.h.
+ 	* include/jvm.h: Include java-assert.h.
+ 	* include/cni.h: Include java/lang/Object.h.  Don't include
+ 	java-threads.h or java-array.h.
+ 
+ Thu Sep  3 16:03:08 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/lang/Boolean.java: Rewritten.
+ 
+ Thu Sep  3 10:28:16 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natFirstThread.cc (main_func): New typedef.
+ 	(run): Use main_func, not JvPrivThreadStartFunc.
+ 	* include/no-threads.h (JvPrivThreadStartFunc): Use correct
+ 	argument type.
+ 	* include/posix-threads.h (JvPrivThreadStartFunc): Use correct
+ 	argument type.
+ 	* include/quick-threads.h (JvPrivThreadStartFunc): Use correct
+ 	argument type.
+ 
+ 	Can't throw Java exceptions with C++ `throw':
+ 	* quick-threads.cc (qthrow): Use _Jv_Throw, not throw.
+ 	* java/lang/natThread.cc (join): Use _Jv_Throw, not throw.
+ 	(setPriority): Likewise.
+ 	(sleep): Likewise.
+ 	(start): Likewise.
+ 	(stop): Likewise.
+ 	* java/lang/natSystem.cc (arraycopy): Use _Jv_Throw, not throw.
+ 	* prims.cc (_Jv_MonitorEnter): Use _Jv_Throw, not throw.
+ 
+ 	Can't catch Java exceptions from C++:
+ 	* java/lang/natThread.cc (finish_): New method.
+ 	(run_): Removed.
+ 	* java/lang/Thread.java (run_): Rewrote in Java.
+ 	(finish_): New native method.
+ 
+ Wed Sep  2 17:30:39 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/lang/Cloneable.java, java/lang/Number.java: Rewritten.
+ 
+ 	* include/javaprims.h (java::io): Added Serializable.
+ 
+ Wed Sep  2 15:22:00 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/EmptyStackException.java,
+  	java/util/NoSuchElementException.java: Rewritten.
+ 	
+   	* java/util/ConcurrentModificationException.java,
+  	java/util/MissingResourceException.java,
+  	java/util/TooManyListenersException.java: Created.
+ 
+ Wed Sep  2 13:36:57 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/cni.h (JvThrow): New function.
+ 	* include/javaprims.h (_Jv_Throw): Declare.
+ 
+ Wed Sep  2 14:07:48 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/Observable.java: Rewritten.
+ 
+ Wed Sep  2 13:36:57 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (_Jv_MonitorExit): Assert that object is non-null.
+ 	(_Jv_MonitorEnter): Throw NullPointerException if object is null.
+ 	Include NullPointerException.h.
+ 
+ Tue Sep  1 12:07:35 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natSystem.cc (arraycopy): Removed overlapping-copy
+ 	assignability checks.  Don't bother using memcpy.
+ 
+ 	* quick-threads.cc (JvPrivThreadStart): Don't call coop_start.
+ 	(started): Removed.
+ 	* include/quick-threads.h (JvPrivThreadWait): New function.
+ 	* include/no-threads.h (JvPrivThreadWait): New function.
+ 	* include/posix-threads.h (JvPrivThreadWait): New function.
+ 	* prims.cc (JvRunMain): Call JvPrivThreadWait.
+ 
+ 	* java/lang/natSystem.cc (arraycopy): Do nothing if count is 0.
+ 
+ 	* java/lang/natSystem.cc (arraycopy): Multiply both src and dst
+ 	offsets by size of type that is being copied.
+ 
+ 	* java/lang/natThread.cc (start): Don't pass `object' argument to
+ 	JvPrivThreadStart.
+ 	* no-threads.cc (JvPrivThreadStart): Removed `object' argument.
+ 	* posix-threads.cc (JvPrivThreadStart): Removed `object'
+ 	argument.
+ 	* quick-threads.cc (JvPrivThreadStart): Removed `object' argument;
+ 	always pass thread as object.
+ 	* include/quick-threads.h, include/posix-threads.h,
+ 	include/no-threads.h (JvPrivThreadStart): Removed `object'
+ 	argument.
+ 
+ Mon Aug 31 19:11:53 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/Dictionary.java: Rewritten.
+ 
+ Mon Aug 31 14:35:55 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/quick-threads.h (JvPrivThreadInitData): Use 0, not NULL.
+ 	(JvPrivThreadDestroy): Likewise.
+ 	
+ Mon Aug 31 12:56:01 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/lang/natRuntime.cc (exit): Changed final call to ::exit.
+ 
+ Thu Aug 27 12:24:40 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natSystem.cc: Rewrote from scratch.
+ 	* java/lang/System.java: Rewrote from scratch.
+ 	* java/lang/Class.h (Class): Declare isAssignableFrom.
+ 	* include/javaprims.h (java::lang): Added ArrayStoreException,
+ 	IndexOutOfBoundsException.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added ArrayStoreException.h,
+ 	IndexOutOfBoundsException.h.
+ 	* java/lang/natObject.cc (hashCode): Use _Jv_HashCode.
+ 	* include/jvm.h (_Jv_HashCode): New function.
+ 
+ 	* java/lang/natThread.cc (suspend): Call checkAccess.
+ 	(resume): Likewise.
+ 	* java/lang/Thread.java (setDaemon): Call checkAccess.
+ 
+ Thu Aug 27 12:24:40 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Runtime.java: Rewrote from scratch.
+ 	* java/lang/natRuntime.cc: Rewrote from scratch.
+ 
+ 	* nogc.cc (JvPrivGCTotalMemory): New function.
+ 	(JvPrivGCFreeMemory): Likewise.
+ 	(total): New global.
+ 	(JvPrivAllocObj): Increment total.
+ 	(JvPrivAllocArray): Likewise.
+ 	(JvPrivAllocBytes): Likewise.
+ 	* include/jvm.h: Declare JvPrivGCTotalMemory, JvPrivGCFreeMemory.
+ 	* boehm.cc (JvPrivGCTotalMemory): New function.
+ 	(sum_blocks): Likewise.
+ 	(JvPrivGCFreeMemory): Likewise.
+ 
+ Wed Aug 26 12:30:32 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/javaprims.h (java::lang): Added FirstThread.
+ 	* java/lang/natFirstThread.cc: New file.
+ 	* java/lang/FirstThread.java: New file.
+ 	* prims.cc (main_signature): Removed.
+ 	(main_name): Removed.
+ 	#include FirstThread.h.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (TFRIEND): Removed.
+ 	(java/lang/Thread.h): Likewise.
+ 	(FTFRIEND): New macro.
+ 	(java/lang/FirstThread.h): New target.
+ 	(nat_files): Added natFirstThread.o.
+ 	(nat_headers): Added FirstThread.h.
+ 	* include/jvm.h (_Jv_StartFirstThread): Don't declare.
+ 	* java/lang/natThread.cc (_Jv_StartFirstThread): Removed.
+ 
+ 	* java/lang/Thread.java (setName): Throw IllegalArgumentException
+ 	if name is null.
+ 	(Thread): Likewise.
+ 
+ 	* java/lang/natThread.cc (start): Synchronize the thread.
+ 	(stop): Synchronize the thread.
+ 
+ 	* java/lang/ThreadDeath.java: Rewrote from scratch.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (TGFRIEND): New macro.
+ 	(java/lang/ThreadGroup.h): New target.
+ 	($(nat_files) prims.o boehm.o nogc.o): Native files depend on the
+ 	native headers.
+ 	($(javao_files) $(nat_files) prims.o boehm.o nogc.o): Removed.
+ 
+ 	* nogc.cc: Include config.h.
+ 
+ 	* java/lang/ThreadGroup.java: Rewrote from scratch.
+ 
+ Tue Aug 25 00:12:54 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Thread.java (checkAccess): Only call in to security
+ 	manager if it exists.
+ 	(Thread): Don't check access when creating the first thread.  Add
+ 	this thread to the appropriate ThreadGroup.
+ 
+ 	* java/lang/natThread.cc (run_): Call uncaughtException method on
+ 	the ThreadGroup.
+ 
+ 	* java/lang/Runnable.java: Rewrote from scratch.
+ 	* java/lang/Thread.java: Updated copyright comment to correct
+ 	form.
+ 
+ Wed Aug 26 15:16:18 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/Random.java: Rewritten.
+ 
+ Wed Aug 26 14:25:39 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* prims.cc (_Jv_NewMultiArray): Need one more slot to store
+  	trailing 0 in array[].
+ 
+ Wed Aug 26 12:21:06 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* Makefile.am (AM_MAKEFLAGS): Remove RUNTEST, EXPECT, 
+ 	and RUNTESTFLAGS from AM_MAKEFLAGS.
+ 	(SUBDIRS): Conditionally include testsuite.
+ 	* Makefile.in: Rebuilt.
+ 
+ Tue Aug 25 18:14:53 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/Object.h: Include java-assert.h.
+ 
+ Tue Aug 25 17:33:57 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* Makefile.am: Add testsuite directory.
+ 	* configure.in: Build testsuite/Makefile.
+ 	* Makefile.in, configure: Rebuilt.
+ 	
+ Tue Aug 25 00:12:54 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (JvRunMain): Use _Jv_StartFirstThread.
+ 	* include/jvm.h (_Jv_StartFirstThread): Declare.
+ 
+ 	* include/javaprims.h (java::lang): Added Exception,
+ 	RuntimeException.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added NullPointerException.h,
+ 	InterruptedException.h, IllegalArgumentException.h, Exception.h,
+ 	Throwable.h, RuntimeException.h, IllegalThreadStateException.h.
+ 	(java/lang/Thread.h): New target.
+ 	(TFRIEND): New macro
+ 
+ 	* include/java-assert.h (JvFail): Use 0 and not NULL.
+ 
+ 	* posix-threads.cc (JvPrivThreadStart): Use getPriority() method
+ 	instead of assuming we are a friend of Thread.
+ 	* quick-threads.cc (JvPrivThreadStart): Use isDaemon() method
+ 	instead of assuming we are a friend of Thread.
+ 
+ Mon Aug 24 15:58:36 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natThread.cc: Rewrote from scratch.
+ 	* java/lang/Thread.java: Rewrote from scratch.
+ 	* prims.cc (JvRunMain): Use new Thread constructor.
+ 	* include/javaprims.h (java::lang): Added InterruptedException.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added java/lang/Thread.h.
+ 	* java/lang/Thread.h: Removed.
+ 	* quick-threads.cc (JvPrivThreadStart): Added `data' argument.
+ 	* no-threads.cc (JvPrivThreadStart): Added JvPrivThread_t
+ 	argument.
+ 	* posix-threads.cc (JvPrivThreadJoin): Removed.
+ 	(JvPrivThreadInitData): Don't initialize join_mutex or join_cond.
+ 	(really_start): Don't notify join_cond.
+ 	(JvPrivThreadStart): Added `data' argument.
+ 	* include/no-threads.h (JvPrivThreadInterrupt): Removed.
+ 	(JvPrivThreadJoin): Likewise.
+ 	Use JvFail instead of sorry.
+ 	(JvPrivThreadSuspend): Removed.
+ 	(JvPrivThreadResume): Removed.
+ 	* include/quick-threads.h (JvPrivThreadInterrupt): Removed.
+ 	(JvPrivThreadJoin): Likewise.
+ 	(JvPrivThreadSuspend): Use JvFail.
+ 	(JvPrivThreadResume): Likewise.
+ 	(JvPrivThreadSuspend): Removed.
+ 	(JvPrivThreadResume): Likewise.
+ 	* include/posix-threads.h (JvPrivThreadInterrupt): Removed.
+ 	(JvPrivThread_t): Removed join_mutex, join_cond.
+ 	Use JvFail instead of sorry.
+ 	(JvPrivThreadSuspend): Removed.
+ 	(JvPrivThreadResume): Likewise.
+ 
+ Tue Aug 25 12:50:13 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/Observer.java: Rewritten
+ 	* java/util/Enumeration.java: Rewritten
+ 
+ Tue Aug 25 11:33:54 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/StringTokenizer.java: Rewritten
+ 	* java/util/Stack.java: Added COPYRIGHT-TBD comment
+ 	* java/util/Vector.java: Added COPYRIGHT-TBD comment
+ 	* java/io/Serializable.java: Added COPYRIGHT-TBD comment
+ 	
+ Fri Aug 21 10:14:22 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-assert.h (JvFail): Call _Jv_Abort even when DEBUG
+  	not defined.
+ 
+ 	* no-threads.cc (JvPrivThreadStart): Use JvAssert.
+ 	Include java-assert.h.
+ 	* include/java-assert.h: New file.
+ 	* prims.cc (_Jv_Abort): New function.
+ 	Include java-assert.h, not assert.h.
+ 	(_Jv_MonitorExit): Use JvAssert.
+ 	(resolveConstants): Likewise.
+ 	(processClass): Likewise.
+ 	(JvRunMain): Assert that method is found.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Check for test subdir.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (SUBDIRS): Conditional on TESTSUBDIR.
+ 
+ 	* prims.cc (JvRunMain): Use NORM_PRIORITY.
+ 	* java/lang/Thread.h (Thread): Added NORM_PRIORITY.
+ 
+ 	* prims.cc (resolveConstants): Removed unused variables.
+ 	(processClass): Likewise.
+ 
+ 	* include/quick-threads.h (JvPrivThreadCurrent): Use
+ 	coop_getspecific.
+ 	* quick-threads.cc (destroy_data): New function.
+ 	(JvPrivInitThreads): Create key.
+ 	(JvPrivThreadKey): New global.
+ 	(JvPrivThreadStart): Use coop_setspecific.
+ 
+ 	* include/quick-threads.h, include/posix-threads.h,
+ 	include/no-threads.h, no-threads.cc, quick-threads.cc,
+ 	posix-threads.cc, nogc.cc, boehm.cc: Added copyright comment.
+ 
+ Thu Aug 20 10:57:30 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/no-threads.h (JvPrivThreadInitData): Don't set
+ 	JvPrivOnlyThread.
+ 
+ 	* include/quick-threads.h (JvPrivCondWait): coop function now
+ 	takes microseconds.
+ 	(JvPrivThreadJoin): Likewise.
+ 
+ 	* java/lang/Thread.h (Thread): Updated declaration of
+ 	JvPrivThreadStart.
+ 	* include/quick-threads.h, include/posix-threads.h: Updated
+ 	declaration of JvPrivThreadStart.
+ 	* include/no-threads.h (JvPrivThreadStart): Changed definition
+ 	into declaration.
+ 	* no-threads.cc (JvPrivThreadStart): Removed `data' argument.
+ 	* quick-threads.cc (JvPrivThreadStart): Removed `data' argument.
+ 	* posix-threads.cc (JvPrivThreadStart): Removed `data' argument.
+ 
+ Wed Aug 19 14:53:59 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* quick-threads.cc (qthrow): New function.
+ 	(JvPrivInitThreads): New function.
+ 	(started): New global.
+ 	(JvPrivThreadStart): Call coop_start if required.
+ 	* include/quick-threads.h (JvPrivThreadCancel): Implement.
+ 	(JvPrivThreadDestroy): Likewise.
+ 	(JvPrivInitThreads): Removed.
+ 	* include/posix-threads.h (JvPrivThreadCancel): Added error
+ 	argument.
+ 	* java/lang/natThread.cc (stop_): Pass exception to
+ 	JvPrivThreadCancel.
+ 
+ Tue Aug 18 12:58:22 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/javaprims.h (java::lang): Added
+ 	IllegalArgumentException, IllegalThreadStateException, Math,
+ 	NullPointerException, ThreadDeath.
+ 	(java::util): Added Enumeration.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added java/lang/ThreadGroup.h.
+ 
+ 	* java/lang/ThreadGroup.java (ThreadGroup): No-args constructor
+ 	now public.
+ 	(threadsv): Renamed from threads to avoid clash in C++ header.
+ 	(groupsv): Likewise.
+ 	* include/no-threads.h (JvPrivThreadStart): Removed.
+ 	* no-threads.cc (JvPrivThreadStart): New function.
+ 	* java/lang/Thread.java (Thread): New constructor for internal use.
+ 	* java/lang/Thread.h (Thread): Declare JvRunMain as friend.
+ 	(Thread): Declare constructor.
+ 	* prims.cc (JvRunMain): Create the initial Thread and
+ 	ThreadGroup.
+ 	Include <java/lang/Thread.h> and <java/lang/ThreadGroup.h>.
+ 	* posix-threads.cc (JvPrivThreadStart): Added `thread' argument.
+ 	Removed `daemon' argument.
+ 
+ 	* prims.cc (JvRunMain): Call _Jv_InitializeSyncMutex.
+ 	* java/lang/Object.h (Object): Declare _Jv_InitializeSyncMutex as
+ 	a friend.
+ 	* java/lang/natObject.cc (_Jv_InitializeSyncMutex): New function.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (INCLUDES): Include THREADINCS.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Recognize `qt' as a threads package.
+ 
+ Thu Aug 20 12:42:32 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/Stack.java (pop): Null out topmost node for robustness.
+ 
+ Thu Aug 20 12:30:30 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/Stack.java: Rewritten.
+ 	* java/util/Vector.java (isEmpty): Simplified expression.
+ 
+ Wed Aug 19 18:02:19 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* prims.cc (_Jv_NewObjectArray): Renamed from JvNewObjectArray.
+ 	(soft_anewarray): Removed, _Jv_NewObjectArray used instead.
+ 
+ 	* include/java-array.h (JvNewObjectArray): Created inline to
+  	_Jv_NewObjectArray.
+ 
+ 	* java/lang/Class.h (_Jv_NewObjectArray): Renamed from
+  	JvNewObjectArray.
+ 	
+ Wed Aug 19 14:12:02 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/Vector.java: Rewritten.
+ 	* java/io/Serializable.java: Created.
+ 
+ Fri Aug 14 10:31:54 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Float.java (NEGATIVE_INFINITY, POSITIVE_INFINITY):
+ 	Infinity is 1/0, not 1/1.
+ 
+ 	* boehm.cc (JvPrivAllocArray): Use GC_generic_malloc.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Removed duplicate AC_ARG_WITH.
+ 
+ Thu Aug 13 14:51:47 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* prims.cc (_Jv_ThrowBadArrayIndex): Renamed from
+  	soft_badarrayindex.
+ 	(_Jv_InitClass): Renamed from soft_initialise_class.
+ 	(_Jv_NewMultiArray): Renamed from soft_multianewarray.
+ 	(_Jv_CheckCast): Renamed from soft_checkcast.
+ 	(_Jv_LookupInterfaceMethod): Renamed from soft_lookupinterfacemethod.
+ 	(_Jv_CheckArrayStore): Renamed from soft_checkarraystore.
+ 	(JvRunMain): Call JvInitClass instead of soft_initialise_class.
+   	* include/cni.h (JvInitClass): New function.
+ 	(_Jv_InitClass): Renamed from soft_initialise_class.
+ 
+ Wed Aug 12 10:07:04 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (CXX): Don't set.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_CXXFLAGS): New macro.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am ($(javao_files) $(nat_files) prims.o boehm.o
+ 	nogc.o): New target.
+ 
+ 	* boehm.cc (mark_obj): Update PUSH_CONTENTS call for new Boehm
+ 	GC.
+ 	(mark_array): Likewise.
+ 
+ Tue Aug 11 11:44:53 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* java/lang/Class.h (JvMethod):  Removed some unused fields.
+ 	(JvField.info):  Removed unused idx union variant.
+ 
+ Mon Aug 10 15:00:14 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (makeUtf8Const): Mask off high bits of hash value to
+ 	match compiler.
+ 
+ Mon Aug  3 16:13:54 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* configure.in, configure (CXX):  Add -fvtable-thunks.
+ 
+ Thu Jul 30 14:34:47 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* java/lang/Object.java (finalize):  Move first.
+ 	* java/lang/Object.h (_JvObjectPrefix):  New dummy base class.
+ 	(Object):  Re-arrange order to match Object.java.
+ 
+ Tue Jul 28 21:42:16 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* prims.cc (hashUtf8String):  Fix - use new JavaSoft specification.
+ 	* java/lang/natString.cc (hashChars):  Likewise.
+ 
+ 	* prims.cc (RuntimeClass):  New macro.
+ 	(JvRunMain):  Do soft_initialise_class of RuntimeClass before exit.
+ 
+ Mon Jul 27 22:20:10 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_MAKEFLAGS): New macro.
+ 
+ Fri Jul 24 11:21:24 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* nogc.cc: Include <javaprims.h>.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (GJAVAH): gjavah no longer in java subdir.
+ 
+ Thu Jul 23 11:38:40 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* exception.cc (terminate): Removed.
+ 	(unexpected): Removed.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Handle case where target subdir is ".".
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Compute COMPPATH based on --with-target-subdir
+ 	option.  Added --with-target-subdir and --with-cross-host.  Use
+ 	--with-cross-host to determine when a cross compiler is in use.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (GJAVAH): Include COMPPATH.
+ 	* configure: Rebuilt.
+ 	* configure.in: Subst COMPPATH.
+ 
+ Mon Jul 20 16:13:43 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (lockMutex): Removed.
+ 	(unlockMutex): Likewise.
+ 	(processClass): Lock the class using a JvSynchronize object.
+ 
+ Fri Jul 17 11:27:48 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natString.cc (gc_calloc_fixed): Removed.
+ 	(gc_free_fixed): Removed.
+ 	(rehash): Use JvPrivAllocBytes, not gc_calloc_fixed; don't bother
+ 	freeing old value of strhash.
+ 
+ 	* exception.cc (_Jv_type_matcher): Cast first argument to
+ 	_Jv_IsInstanceOf.
+ 
+ Thu Jul 16 14:51:44 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-array.h (jstringArray): New type.
+ 	* java/lang/natSystem.cc (setProperty): Removed.
+ 	(initProperties): Directly call JvNewStringLatin1 for arguments.
+ 	* java/util/natDate.cc: Include java/util/Date.h, not
+ 	java-util.h.
+ 	(setTime): Removed.
+ 	* java/io/FileDescriptor.java (available): No longer static.
+ 	* java/lang/natDouble.cc (Double): Removed class definition.
+ 	* include/javaprims.h (java::lang::Number): Declare.
+ 	(java::lang::NumberFormatException): Likewise.
+ 	(java::io::FilenameFilter): Likewise.
+ 	(java::lang::Character): Likewise.
+ 	(java::lang::Error): Likewise.
+ 	(java::lang::SecurityManager): Likewise.
+ 	(java::util::Vector): Likewise.
+ 	(java::io::FileNotFoundException): Likewise.
+ 	(java::io::IOException): Likewise.
+ 	(java::lang::NativeLang): Likewise.
+ 	(java::lang::UnsatisfiedLinkError): Likewise.
+ 	(java::util::StringTokenizer): Likewise.
+ 	(java::io::InputStream, java::io::OutputStream): Likewise.
+ 	(java::io::PrintStream, java::lang::SecurityException): Likewise.
+ 	(java::util::Hashtable): Likewise.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_headers): Added java/lang/Double.h,
+ 	java/lang/Number.h, java/lang/System.h, java/lang/Runtime.h.
+ 	(MOSTLYCLEANFILES): Added nat_headers.
+ 	* include/jvm.h: Moved many defines, declarations, and functions
+ 	to java/lang/Class.h.
+ 	(struct JvSyncInfo): Moved to java/lang/Object.h.
+ 	(UTF8_GET): Moved to java/lang/String.h.
+ 
+ Wed Jul 15 09:02:31 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/io-defs.h: Don't include java-io.h.
+ 	* include/java-io.h: Removed.
+ 	* include/javaprims.h: Include java::io.
+ 
+ Tue Jul 14 17:04:26 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-io.h (File): Removed
+ 	(FileDescriptor): Likewise.
+ 
+ 	* java/io/io-defs.h: Include java/io/File.h and
+ 	java/io/FileDescriptor.h.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (GJAVAH): New macro.
+ 	(.class.h): New rule.
+ 	(SUFFIXES): Added .h.
+ 	(nat_headers): New macro.
+ 	($(nat_headers)): New target.
+ 	(BUILT_SOURCES): Added nat_headers.
+ 
+ 	* include/java-util.h: Removed.
+ 
+ Fri Jul  3 10:17:14 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-io.h: Changed to avoid java-lang.h.
+ 	* java/lang/natThread.cc: Include java/lang/Thread.h, not
+ 	java-lang.h.
+ 	* java/lang/natSystem.cc: Include java/lang/System.h, not
+ 	java-lang.h.
+ 	* java/lang/natString.cc: Include java/lang/String.h, not
+ 	java-lang.h.
+ 	* java/lang/natRuntime.cc: Include java/lang/Runtime.h, not
+ 	java-lang.h.
+ 	* java/lang/natClass.cc: Include java/lang/Class.h, not
+ 	java-lang.h.
+ 	* java/lang/natDouble.cc: Include java/lang/Object.h, not
+ 	java-lang.h.
+ 	* java/lang/natObject.cc: Include java/lang/Object.h, not
+ 	java-lang.h.
+ 	* exception.cc: Don't include java-lang.h.
+ 	* posix-threads.cc: Include java/lang/Thread.h, not java-lang.h.
+ 	* no-threads.cc: Include java/lang/Thread.h, not java-lang.h.
+ 	* nogc.cc: Don't include java-lang.h.
+ 	* boehm.cc: Include java/lang/Class.h, not java-lang.h.
+ 	* prims.cc (processClass): Don't use `init_type'; just cast to
+ 	type directly.
+ 	Include java/lang/Class.h and jvm.h, not java-lang.h.
+ 	(JvAllocObject): Wrote single-argument version.
+ 	(PrimClass): Inherit from Class.
+ 	(initPrimClass): Removed.
+ 	* include/java-lang.h: Removed.
+ 	* include/jvm.h: Declare struct _dispatchTable.
+ 	* include/cni.h: Don't declare _Jv_MonitorEnter,
+ 	_Jv_MonitorExit, struct _dispatchTable.
+ 	* include/javaprims.h: Moved all typedefs here, from cni.h.
+ 	* java/lang/Class.h: New file.
+ 	* include/java-array.h: New file.
+ 	* java/lang/Object.h: New file.
+ 
+ 	* prims.cc (classFromSig): Now static.
+ 
+ Wed Jul  1 12:28:48 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/cni.h: Don't mention soft_new.
+ 	* include/java-lang.h (Object): Don't mention soft_new.  Mention
+ 	_Jv_NewPrimArray, not newPrimArray.
+ 	* prims.cc (soft_new): Removed.
+ 	(_Jv_NewArray): Renamed from soft_newarray.
+ 	(soft_anewarray): Use JvNewObjectArray.
+ 	(newArray): Likewise.
+ 	(newRefArray): Removed.
+ 	(_Jv_NewPrimArray): Renamed from newPrimArray.
+ 	(equalUtf8Consts): Now static.
+ 	(soft_instanceof): Removed.
+ 	* java/lang/natDouble.cc (doubleToString): Now static.
+ 
+ 	* java/lang/natDouble.cc (java_lang_Double_doubleToLongBits,
+ 	java_lang_Double_longBitsToDouble, java_lang_Double_toString):
+ 	Removed.
+ 
+ Tue Jun 30 10:54:57 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-lang.h: Renamed functions to _Jv_MonitorEnter and
+ 	_Jv_MonitorExit.
+ 	* include/cni.h: Renamed functions to _Jv_MonitorEnter and
+ 	_Jv_MonitorExit.
+ 	* include/no-threads.h (JvPrivMutexLock): Always return -1.
+ 	(JvPrivMutexUnlock): Likewise.
+ 	* prims.cc (_Jv_MonitorEnter): Renamed from soft_monitorenter.
+ 	Return value now jint.
+ 	(_Jv_MonitorExit): Renamed from soft_monitorexit.  Return value
+ 	now jint.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am: Don't allow `jV' names.
+ 	(maintainer-check): Depend on libjava.a.
+ 	* exception.cc (_Jv_eh_free): Renamed from __jV_eh_free.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (NM): New macro.
+ 	(maintainer-check): New target.
+ 
+ 	* include/posix-threads.h (_MIT_POSIX_THREADS): Removed.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Use --enable-threads, not --enable-gc.  Fix
+ 	documentation for --enable-threads.  Changed option to work like
+ 	identical option in gcc/configure.
+ 
+ Mon Jun 29 10:44:29 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* boehm.cc (mark_array): Use JvGetArrayLength.
+ 
+ Thu Jun 25 11:56:21 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* exception.cc:  New file (mostly written by Andrew MacLeod),
+ 	exception handling support.
+ 	* Makefile.am (libjava_a_SOURCES), Makefile.in:  Add exception.cc.
+ 	Remove -fexceptions - it is now the default.
+ 
+ 	* prims.cc (JvIsInstanceOf):  Renamed to _Jv_IsInstanceOf.
+ 	(JvAllocObject):  Renamed to _Jv_AllocObject.
+ 	(soft_athrow):  Removed.  Replaced by _Jv_Throw in exception.cc.
+ 	(loadClass):  Renamed to _Jv_FindClass.
+ 	* include/cni.h (JvIsInstanceOf, JvAllocObject).  Make into
+ 	inline methods that call _Jv_IsInstanceOf and _Jv_AllocObject.
+ 	* include/java-lang.h (JvGetArrayLength):  New CNI function.
+ 	* include/jvm.h (_Jv_FindClass):  Added declaration.
+ 
+ 	* java/lang/natString.cc:  More implementation if COMPACT_STRINGS.
+ 
+ Wed Jun 24 16:41:30 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* java/lang/natClass.cc (getName):  Add implementation.
+ 	* java/lang/Throwable.java (printStackTrace): Handle missing backtrace.
+ 
+ Tue Jun 23 15:56:24 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (.class.o): Added -fexceptions.
+ 
+ Mon Jun 15 14:54:06 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Don't check for __nanosleep.
+ 	* posix-threads.cc (nanosleep): Never define.
+ 
+ Sun Jun 14 22:37:23 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* posix-threads.cc (JvPrivCondWait): Fixed computation of
+ 	timespec.
+ 
+ Thu Jun 11 10:51:44 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natThread.cc (enumerate): Uncommented.
+ 	* java/lang/Thread.java (interrupted_): Renamed from `interrupt_'.
+ 	(interrupt): Call it.
+ 
+ Wed Jun 10 15:57:16 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (GCLIBS): Use `-lgc' so gjavac can recognize it.
+ 
+ Mon Jun  8 12:04:11 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/no-threads.h (JvPrivThreadInterrupt): New method.
+ 	* include/java-lang.h (Thread): Added `interrupted_' method.
+ 	* java/lang/Thread.java (interrupted_): New method.
+ 	* java/lang/natThread.cc (join): Possibly throw interrupted
+ 	exception after join finishes.
+ 	(interrupted_): New method.
+ 	* posix-threads.cc (JvPrivThreadInitData): Initialize join_mutex,
+ 	join_cond.
+ 	(JvPrivThreadJoin): New function.
+ 	(really_start): Notify all threads waiting for this thread.
+ 	(struct starter): Added `data' member.
+ 	(JvPrivThreadStart): Set it.
+ 	* include/posix-threads.h (JvPrivThread_t): Added join_mutex,
+ 	join_cond.
+ 	(JvPrivThreadJoin): No longer inline.
+ 	(JvPrivThreadInterrupt): New function.
+ 
+ 	* include/no-threads.h (JvPrivThreadSleep): Removed.
+ 	* posix-threads.cc (JvPrivThreadSleep): Removed.
+ 
+ Fri Jun  5 13:51:25 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (THREADOBJS): Initialize to no-threads.o in
+ 	no-threads case.
+ 	* posix-threads.cc (key): New global.
+ 	(JvPrivInitThreads): New function.
+ 	(really_start): Set thread-specific data to point to object.
+ 	(JvPrivThreadStart): Added `daemon' argument.
+ 	(JvPrivThreadSleep): Added `data' argument.
+ 	* include/posix-threads.h (JvPrivInitThreads): Removed
+ 	implementation.
+ 	(JvPrivThreadCurrent): New function.
+ 	* include/no-threads.h (JvPrivThreadInitData): Initialize
+ 	JvPrivOnlyThread.  Added `thread' argument.
+ 	(JvPrivThreadCurrent): New function.
+ 	(JvPrivThreadStart): Added `daemon' argument.
+ 	* no-threads.cc: New file.
+ 	* java/lang/natThread.cc (init_data): New function.
+ 	(isAlive): Removed.
+ 	(start): Set `alive' member.
+ 	(stop_): Clear `alive' member.
+ 	(destroy): Likewise.
+ 	(currentThread): Implemented.
+ 	(start): Pass `daemon' argument to JvPrivThreadStart.
+ 	(sleep): Rewrote.
+ 	* include/java-lang.h (Thread): Added `alive', `tsync' members.
+ 	(Thread): Added `init_data' method.
+ 	* java/lang/Thread.java (alive, data): New instance variables.
+ 	(init_data): New private method.
+ 	(isAlive): No longer native.
+ 
+ Thu Jun  4 14:09:32 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-lang.h (JvRunMain): Declare.
+ 	* include/jvm.h (JvPrivInitGC): Revert to C++ linkage.
+ 	* prims.cc (JvRunMain): New function.
+ 	(main_signature, main_name): New globals.
+ 
+ 	* boehm.cc (mark_array): Use `elements' function and not
+ 	operator[] on jarray.
+ 
+ 	* posix-threads.cc: Include <config.h>.  Define nanosleep if
+ 	required.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Check for _nanosleep.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Check for pthread_mutexattr_settype.
+ 
+ 	* include/cni.h (class JvSynchronize): New class.
+ 	* java/lang/Thread.java (sleep): Throws InterruptedException.
+ 	(join): Throws InterruptedException.
+ 	(resume): Not native.
+ 	(resume_): New method.
+ 	(start): Now synchronized.
+ 	(stop_): New method.
+ 	(Thread): Synchronize when accessing threadNumber.
+ 	(misc): Removed.
+ 	* java/lang/natThread.cc (throwException): New macro.
+ 	(sleep): Throw InterruptedException.
+ 	(resume_): Renamed.
+ 	(stop_): Renamed.
+ 	* include/java-lang.h (Runtime): Added interrupted().
+ 
+ 	* boehm.cc (call_finalizer): Correctly initialize jobj.
+ 	* include/java-lang.h (Runtime): Added getRuntime() and exit().
+ 
+ 	* java/lang/natSystem.cc (currentTimeMillis): Use #elif, not
+ 	`#elseif'.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Added support for --disable-threads.
+ 	* include/no-threads.h: New file.
+ 
+ 	* acconfig.h (HAVE_PTHREAD_MUTEXATTR_INIT): New macro.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (EXTRA_libjava_a_SOURCES): Added posix-threads.cc.
+ 	(libjava_a_DEPENDENCIES): Added THREADOBJS.
+ 	(libjava_a_LIBADD): Added THREADOBJS.
+ 	* configure: Rebuilt.
+ 	* configure.in: Added --with-threads option.
+ 	* posix-threads.cc: New file.
+ 	* include/posix-threads.h: New file.
+ 	* include/java-lang.h (Object): Added static member sync_mutex,
+ 	member sync_info, method init_mutex.
+ 	(struct JvSyncInfo): New struct.
+ 	Include "java-threads.h".
+ 	* prims.cc (soft_monitorenter): Wrote.
+ 	(soft_monitorexit): Likewise.
+ 	* java/lang/natObject.cc (init_mutex): New method.
+ 	(notify): Wrote.
+ 	(notifyAll): Wrote.
+ 	(wait): Wrote.
+ 	(sync_mutex): Define.
+ 	Include "java-threads.h".
+ 
+ Tue Jun  2 15:24:33 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* include/java-lang.h (JvPrivInitGC):  Make extern "C".
+ 	* include/jvm.h (JvConvertArgv, JvNewObjectArray):  Likewise.
+ 
+ Mon Jun  1 11:21:34 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* include/cni.h (jbyte etc):  Re-define using __java_byte etc.
+ 	Added extern "Java" in places to tell G++ Object is a "Java" type.
+ 	Other minor renaming and fixes.
+ 	* include/java-io.h (FileDescriptor):  Add friend class declarations.
+ 	G++ no longer allows non-Java types in method parameters and results
+ 	of Java classes.  Converted most offending methods to friends.
+ 	* java/lang/natDouble.cc (Double::toString):  Rename to doubleToString.
+ 	* java/lang/natSystem.cc (setProperty):  Make friend.
+ 	* java/lang/natString.cc, include/java-lang.h (String):  Rename
+ 	methods findInternSlot to __JvStringFindSlot and __JvStringGetSlot.
+ 	* include/java-lang.h (JArray):  Remove getData and eoprator[].
+ 	Add elements friend function instead.
+ 	* java/lang/natSystem.cc (arraycopy):  Use elements function.
+ 	* java/io/natFileDescriptor.cc (read, write):  Likewise.
+ 	* include/java-lang.h (Object):  Remove unused make method.
+ 	(System::setProperty(char*,char*)): Turn into friend function.
+ 	(Class):  Rename newObject by JvAllocObject.
+ 	* prims.cc:  Update to use JvAllocObject, and elements.
+ 
+ 	* java/lang/natDouble.cc:  Fix double -> jdouble.
+ 
+ Wed May 20 16:50:06 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* Makefile.am (INCLUDES):  Add -Iinclude (to get config.h).
+ 
+ Mon May 18 13:46:02 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natRuntime.cc (finalize_on_exit): Define.
+ 	* include/java-lang.h (Runtime): finalize_on_exit and
+ 	runFinalizersOnExit now static.
+ 	* java/lang/Runtime.java (runFinalizersOnExit): Now static, to
+ 	match JDK 1.2b3.
+ 	(finalize_on_exit): Now static.
+ 
+ 	* boehm.cc (mark_obj): Get class using getClass() method on
+ 	object.
+ 	(_dispatchTable): Removed.
+ 
+ Mon May 11 15:26:52 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/natFileDescriptor.cc (open_read): Only call open if
+ 	HAVE_OPEN defined.
+ 	(open_write): Likewise.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am ($(nat_files)): Depend on config.h.
+ 
+ Thu May  7 16:22:00 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (ObjectClass): Now a macro; updated for new class name
+ 	mangling scheme.
+ 	(StringClass): Likewise.
+ 	(ClassClass): Likewise.
+ 
+ Wed May  6 00:26:44 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/natFileDescriptor.cc (available): Do nothing unless
+ 	HAVE_SELECT defined.
+ 	* java/util/natDate.cc (setTime): Conditional on
+ 	HAVE_GETTIMEOFDAY.
+ 	(toString): Conditional on HAVE_TIME.
+ 	* aclocal.m4, configure: Rebuilt.
+ 	* acinclude.m4: New file.
+ 	* configure.in: Don't actually call AM_EXEEXT.  Call
+ 	AC_CANONICAL_HOST.  Use LIB_AC_PROG_CC and LIB_AC_PROG_CXX.  Added
+ 	--with-target-subdir option.  Check for select and open
+ 	functions.
+ 
+ Tue May  5 00:10:45 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* boehm.cc (JvPrivRegisterFinalizer): Changed interface.
+ 	(call_finalizer): Likewise.
+ 	* nogc.cc (JvPrivRegisterFinalizer): Changed interface.
+ 	* prims.cc (newObject): Pass actual method pointer to
+ 	JvPrivRegisterFinalizer.
+ 	* include/jvm.h (JvPrivFinalizerFunc): New typedef.
+ 	(JvPrivRegisterFinalizer): Changed interface.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (MOSTLYCLEANFILES): New macro.
+ 	(CLEANFILES): Removed javao_files.
+ 
+ Fri May  1 22:52:24 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* nogc.cc: New file.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (INCLUDES): Use GCINCS, not paths to boehm-gc.
+ 	(EXTRA_libjava_a_SOURCES): New macro.
+ 	(libjava_a_SOURCES): Removed boehm.cc.
+ 	(libjava_a_DEPENDENCIES): Added GCOBJS.
+ 	(libjava_a_LIBADD): Likewise.
+ 	* configure: Rebuilt.
+ 	* configure.in: Added code for --enable-gc=TYPE.
+ 
+ Thu Apr 30 14:54:00 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* boehm.cc (mark_array): Don't further dereference pointer from
+ 	array.
+ 
+ 	* boehm.cc: Include <boehm-config.h>, not <private/config.h>.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (INCLUDES): Removed -I for boehm-gc/include; added
+ 	one for boehm-gc build directory.
+ 
+ Wed Apr 29 09:45:19 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-lang.h (finalize_on_exit): New instance variable in
+ 	java::lang::Runtime.
+ 	(runFinalizersOnExit): New method.
+ 	* java/lang/Runtime.java (finalize_on_exit): New instance
+ 	variable.
+ 	(runAllFinalizers_): New private method.
+ 	(runFinalizersOnExit): New method.
+ 	* boehm.cc (JvPrivRunFinalizers): New function.
+ 	(JvPrivRunAllFinalizers): Likewise.
+ 	(JvPrivRunGC): Likewise.
+ 	* java/lang/natRuntime.cc: Include "jvm.h".
+ 	(gc): Call JvPrivRunGC.
+ 	(runFinalization): Call JvPrivRunFinalizers.
+ 	(runFinalizersOnExit): New method.
+ 	(exit_): Call JvPrivRunAllFinalizers if required.
+ 	* include/jvm.h: Declare JvPrivRunFinalizers,
+ 	JvPrivRunAllFinalizers, JvPrivRunGC.
+ 
+ Tue Apr 28 15:06:50 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* boehm.cc (JvPrivRegisterFinalizer): New function.
+ 	(call_finalizer): Likewise.
+ 	* include/jvm.h: Declare JvPrivRegisterFinalizer.
+ 	* prims.cc (finalize_name): New global.
+ 	(newObject): Just call other newObject.
+ 	(newObject): Register finalizer if it exists.
+ 
+ Mon Apr 27 12:47:03 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (gc_malloc): Removed.
+ 	(makeUtf8Const): Use JvPrivAllocBytes.
+ 	(lookupArray): Likewise.
+ 	(newPrimArray): Likewise.
+ 	(JvNewObjectArray): Use JvPrivAllocArray.
+ 	(newObject): Use JvPrivAllocObj.
+ 	(newObject): Likewise.
+ 	Changed Method -> JvMethod everywhere.
+ 	Changed Field -> JvField everywhere.
+ 	* include/java-lang.h (Object): Changed type of `fields' to
+ 	JvField*.
+ 	(jmethodID, jfieldID): New typedefs.
+ 	(Object): JvGetFirstInstanceField and JvNumInstanceFields now
+ 	friends.
+ 	* include/jvm.h (struct JvMethod): Renamed from Method, and moved
+ 	from java-lang.h.
+ 	(METHOD_NATIVECODE): Moved from java-lang.h.
+ 	(class JvField): New class.
+ 	(JvGetFirstInstanceField): New function.
+ 	(JvFieldIsRef): Likewise.
+ 	(JvGetObjectField): Likewise.
+ 	(JvNumInstanceFields): Likewise.
+ 
+ Thu Apr 23 16:42:11 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* boehm.cc: New file.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (libjava_a_SOURCES): Added boehm.cc.
+ 	(INCLUDES): Added -I options to find boehm-gc files.
+ 
+ Wed Apr 29 15:11:37 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (CXX): Put -fno-rtti here and not in CXXFLAGS.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_files): New macro.
+ 	(libjava_a_DEPENDENCIES): Use it.
+ 	(libjava_a_LIBADD): Likewise.
+ 	($(nat_files)): New static pattern rule.
+ 	(class_files): Run separate find to find .class files.
+ 	(javao_files): Compute based on class_files.
+ 	(BUILT_SOURCES): New macro.
+ 
+ Thu Apr 23 16:42:11 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.am (java_files): New macro.
+ 	(class_files): Likewise.
+ 	(javao_files): Likewise.
+ 	(libjava_a_DEPENDENCIES): Include $(javao_files).
+ 	(libjava_a_LIBADD): Likewise.
+ 	(classes.stamp): Depend on $(java_files); only recompile changed
+ 	files.
+ 	(here): New macro.
+ 	(CLEANFILES): Don't run find; use macros.  Don't mention
+ 	libjava.a.
+ 	(.class.o): New target.
+ 	(compiled.stamp): Removed.
+ 
+ Thu Apr 23 14:17:43 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* java/io/{Reader,InputStreamReader,FileReader,BufferedReader,
+ 	LineNumberReader}>java:  Newly-implemented standard classes.
+ 
+ Thu Apr 23 14:02:04 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (compiled.stamp): Use $(CC), not $(GCC).
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (hack): New macro.
+ 	(libjava_a_LIBADD): Use $(hack) to work around automake oddity.
+ 
+ Wed Apr 22 16:49:57 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/config.h.in: New file.
+ 	* include/config.h: Removed.
+ 	* acconfig.h: New file.
+ 	* Makefile.am (AR, ARFLAGS, JAVAC, GCC, CXX, CXXFLAGS): Removed.
+ 	(lib_LIBRARIES, libjava_a_SOURCES, libjava_a_DEPENDENCIES,
+ 	libjava_a_LIBADD): New macros.
+ 	(INCLUDES): New macro.
+ 	(prims.o): Removed.
+ 	(.cc.o): Removed.
+ 	(SUFFIXES): Removed.
+ 	(all): Removed.
+ 	(libjava.a): Removed.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Call AC_PROG_CC, AC_PROG_CXX, AC_PROG_RANLIB.
+ 	Look for headers and functions we require.  Create
+ 	include/config.h.
+ 
+ Mon Apr 20 22:25:00 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* prims.cc (instance_class, instanceof, JvIsInstanceOf, JvConvertArgv,
+ 	soft_instanceof, newObject, JbNewObjectArray, soft_checkcast,
+ 	soft_lookupinterfacemethod):  New functions.
+ 	(PrimClass):  Actually initialize the primitive classes.
+ 	(Utf8Const2JavaString):  Moved to java/lang/natString.cc.
+ 
+ 	* include/java-util.h:  Removed java::util definition.
+ 	* include/cni.h:  Moved java::util here and added Properties.
+ 	Added more function prototypes.
+ 	* include/java-lang.h:  Added mroe methods and friend declarations.
+ 	* include/config.h (HAVE_GETTIMEOFDAY, HAVE_TIME):  Added.
+ 	* include/jvm.h (strLengthUtf8):  Add declaration.
+ 	
+ 	* java/lang/{Integer,Long,Boolean,Character,Float,Double}.java (TYPE):
+  	New static field.
+ 	* java/lang/{Byte,Short,Void}.java:  New classes.
+ 	* java/lang/Character.java (isJavaIdentifierStart,
+ 	JavaIdentifierPart):  New static methods.
+ 	* java/lang/Number.java (byteValue, shortValue):  New methods.
+ 
+ 	* java/lang/String.java (intern, hashCode):  Make native.
+ 	* java/lang/natString.cc:  New file.  Handle the string pool.
+ 	* Makefile.am:  Build natString.o.  Use CXXFLAGS.
+ 
+ 	* java/lang/Class.java (isArray, isPrimitive, getComponentType,
+ 	isInstance, isAssignableFrom), java/lang/natClass.cc:  New methods.
+ 	* java/lang/Throwable.java (<init>):  Don't fillInStackTrace yet.
+ 	* java/lang/System.java (setProperty):  New private method.
+ 	(initProperties):  Take argument, and make native.
+ 	* java/lang/natSystem.cc:  Implement (preliminary) initProperties.
+ 	(currentTimeMillis):  Make more robust.
+ 
+ 	* java/io/{Writer,PrintWriter,OutputStreamWriter}.java:  New classes.
+ 	* java/io/UnsupportedEncodingException.java:  New exception class.
+ 
+ 	* java/io/DataInputStream.java:  Don't use a PushbackInputStream.
+ 	* java/io/FilterOutputStream.java:  Add missing 'extends OutputStream'.
+ 	
+ Fri Apr 10 11:52:10 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* Makefile.am (CXXFLAGS, JC1FLAGS):  New macro.
+ 	* prims.cc:  Added bunch of stuff.
+ 	* include/cni.h:  Added various definitions.
+ 	* include/java-lang.h:  Added Method, various friends, some macros.
+ 
+ 	* include/config.h:  Added HAVA_MEMMOVE and HAVE_MEMCPY.
+ 	* java/lang/System.java (arraycopy):  Make native.
+ 
+ Sun Apr  5 23:58:51 1998  Per Bothner  <bothner@cygnus.com>
+ 
+ 	* java/lang/{netObject.cc,natClass.cc,natDouble.cc,natRuntime.cc,
+ 	natSystem.cc,natThread.cc}:  Native (C++) methods for various classes.
+ 	* java/lang/ClassLoader.java (defineClass):  Now takes extra argument.
+ 	* java/lang/Double.java (toString, doubleToLongBits, longBitsToDouble):
+ 	Make native.
+ 	* java/lang/Runtime.java:  Declare methods as native instead of
+ 	using NativeLang.
+ 	* java/lang/SecurityManager.java (getClassContext):  Just throw Error.
+ 	* java/lang/System.java:  Comment out some stuff, for now.
+ 	* java/lang/Thread.java:  Re-write.  Use native methods.
+ 	* java/lang/NativeLang.java:  Remove most of it.
+ 	
+ 	* java/util/natDate.cc:  Native (C++) methods for Date.
+ 	* java/util/{Calendar.java,GregorianCalendar.java}:  New classes.
+ 	* java/util/Date.java:  Complete re-write.
+ 
+ 	* java/io/io-defs.h:  New header file.
+ 	* java/io/FileDescriptor.java:  Add a bunch of private methods,
+ 	mostly moved from NativeIO.java and natNativeIO.cc.
+ 	* java/io/{natFile.cc,java/io/natFileDescriptor.cc}:  New native code.
+ 	* java/io/File.java:  Use new code.
+ 	* java/io/{FileInputStream.java.FileOutputStream.java,
+ 	RandomAccessFile.java}:  Use new private FileDescriptor methods.
+ 	* java/io/NativeIO.java:  Removed, no longer used.
+ 
+ 	* java/io/StreamTokenizer.java (numericChars):  Make char array.
+ 
+ 	* include/*.h:  Various header files used by the C++ native code.
+ 
+ 	* Makefile.am, Makefile.in, aclocal.m4, configure, configure.in:
+ 	New autoconf+automake-based setup.
+ 	* prims.cc:  New file for Java "primitives".
+ 
diff -Nrcpad gcc-4.0.2/libjava/ChangeLog-1999 gcc-4.1.0/libjava/ChangeLog-1999
*** gcc-4.0.2/libjava/ChangeLog-1999	Thu Feb 17 22:57:30 2000
--- gcc-4.1.0/libjava/ChangeLog-1999	Wed May  4 18:29:28 2005
*************** Wed Jan  6 17:27:39 1999  Per Bothner  <
*** 3505,7108 ****
  	* java/lang/StringBuffer.java (insert): If `str' is null, use
  	string "null".
  
- 1998-12-30  Anthony Green  <green@cygnus.com>
- 
- 	* README: Removed.
- 	* LIBJAVA_LICENSE, COPYING.LIB: Created.
- 
- 1998-12-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/PushbackInputStream.java (read): `off' already includes
- 	`numBytes'.
- 
- 1998-12-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (GCJ_canadian): Include target_alias.
- 
- 	* java/lang/natFirstThread.cc (run): Require main's class to be
- 	public.
- 
- 1998-12-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/Locale.java (JAPAN): Language is `ja', not `jp'.
- 
- 	* java/util/ResourceBundle.java (getBundle): Throw
- 	NullPointerException if locale argument is null.
- 
- 	* java/lang/natClass.cc (forName): Throw NullPointerException if
- 	argument is null.
- 	Include NullPointerException.h.
- 
- 1998-12-14  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Character.java (Character): Implement Comparable.
- 	(compareTo): New methods.
- 
- 	* java/util/Locale.java (CANADA, FRANCE, JAPAN): Now `final'.  Use
- 	correct country and language codes.
- 	(UK, US): New constants.
- 	(setDefault): Language codes are lower-case.
- 
- 	* java/lang/natClass.cc (getDeclaredConstructor): New method.
- 	(getDeclaredConstructors): Likewise.
- 	(getDeclaredField): Likewise.
- 	(getDeclaredFields): Likewise.
- 	(getDeclaredMethod): Likewise.
- 	(getDeclaredMethods): Likewise.
- 	(getField): Likewise.
- 	(getFields): Likewise.
- 	(getMethod): Likewise.
- 	(getMethods): Likewise.
- 	* java/lang/Class.java: Declare new methods.
- 	* java/lang/Class.h: Declare new methods.
- 
- 	* java/lang/natString.cc: Removed `#pragma implementation'.
- 	* include/cni.h (_Jv_GetStringChars): New function.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (java/lang/String.h): Don't generate definition for
- 	_Jv_GetStringChars.
- 
- 	* java/lang/natString.cc: Added `#pragma implementation'.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (libjava.zip): Put build directory first in class
- 	path to avoid bug in compiler.
- 
- 1998-12-14  Anthony Green  <green@cygnus.com>
- 
- 	* java/util/Locale.java: Add CANADA, FRANCE and JAPAN.
- 
- 	* include/javaprims.h: Add EventObject, ListResourceBundle and
- 	ResourceBundle.
- 
- 1998-12-13  Anthony Green  <green@cygnus.com>
- 
- 	* mauve-libjava: Run the ResourceBundle tests.
- 
- 	* java/lang/natClass.cc (_Jv_FindClass): Don't fail when loader is
- 	NULL.
- 
- Sun Dec 13 18:11:21 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* configure.in, configure:  Make --enable-gcj-classes and
- 	--enable-source-compilation the default.  (Nervously...)  Yeah!
- 	Based on a patch from Tom Tromey.
- 
- 1998-12-13  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/EventObject.java: New file.
- 	* java/util/EventListener.java: New file.
- 
- 	* include/javaprims.h: Updated class declarations.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added Constructor.h.
- 	(java/lang/String.h): Don't inline String::length().
- 	* java/lang/Class.h (getConstructor, getConstructors): Declare.
- 	* java/lang/Class.java (initializeClass, hackRunInitializers,
- 	hackTrampoline): No need to mark `final'.
- 	(getConstructor, getConstructors): Declare.
- 	* java/lang/reflect/Field.java (equals): New method.
- 	* java/lang/natClass.cc (getConstructor): New method.
- 	(getConstructors): Likewise.
- 	Include Method.h, Field.h, Constructor.h.
- 	* java/lang/reflect/Constructor.java: New file.
- 	* java/lang/reflect/Method.java (toString): No space before open
- 	paren.
- 	(equals): Simplified.
- 
- 1998-12-13  Anthony Green  <green@cygnus.com>
- 
- 	* java/util/ResourceBundle.java: New file.
- 	* java/util/ListResourceBundle.java: New file.
- 
- 1998-12-12  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/System.java (in, out, err): Now buffered streams by
- 	default.
- 
- 	* include/javaprims.h: Updated class declarations.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added AccessibleObject.h, Method.h,
- 	InvocationTargetException.h, Void.h, Byte.h, Short.h, Integer.h,
- 	Long.h, Boolean.h.
- 	(nat_files): Added natMethod.o.
- 	* java/lang/reflect/natMethod.cc: New file.
- 	* java/lang/reflect/Field.java (Field): Now extends
- 	AccessibleObject.
- 	* java/lang/reflect/AccessibleObject.java: New file.
- 	* java/lang/reflect/InvocationTargetException.java: New file.
- 
- 1998-12-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* boehm.cc, prims.cc, include/jvm.h, java/lang/Class.h,
- 	java/lang/Object.h, java/lang/natClass.cc, java/lang/natObject.cc:
- 	Renamed dtable -> vtable and _Jv_DispatchTable -> _Jv_VTable.
- 
- 	* java/io/OutputStreamWriter.java (buffer): Size at 8192 bytes.
- 
- 1998-12-09  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/natDate.cc (_POSIX_THREAD_SEMANTICS): Define if
- 	HAVE_CTIME_R.
- 
- 	* java/lang/natCharacter.cc (toTitleCase): Handle case where
- 	character is already titlecase.
- 
- 	* java/lang/Character.java (isJavaLetter): Follow spec.
- 	(isJavaLetterOrDigit): Likewise.
- 
- 	* java/util/GregorianCalendar.java (gregorianCutover): Append
- 	`L'.
- 
- 	* java/lang/Character.java (isWhitespace): Use \r and not \u000d.
- 
- 1998-12-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/Modifier.java (toString): Replace second
- 	`static' with `synchronized'.
- 
- 	* java/lang/natObject.cc (_Jv_FinalizeObject): Call hack12_6.
- 	* java/lang/Object.h (Object::hack12_6): Declare.
- 	* java/lang/Object.java (hack12_6): New function.
- 
- 1998-12-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-array.h (__JArray::clone): Removed decl.
- 	* prims.cc (__JArray::clone): Removed.
- 	* java/lang/natObject.cc (clone): Incorporate code to clone an
- 	array.
- 
- 	* java/lang/natClass.cc (_Jv_NewClass): Set class loader.
- 	(_Jv_FindArrayClass): Set dtable_method_count on new class.
- 	Correctly use dtable_method_count.
- 
- 1998-12-07  Andrew Haley  <aph@cygnus.co.uk>
- 
- 	* java/lang/Double.java (isInfinite, isNaN): Handle correct
- 	IEEE754 values.
- 
- 1998-12-06  Anthony Green  <green@cygnus.com>
- 
- 	* mauve-libjava: Don't test ResourceBundle.
- 
- 1998-12-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	More JDK 1.2 spec fixes:
- 	* java/util/Date.java (millis): Now private.
- 	* java/text/DateFormat.java (DateFormat): Constructor now
- 	protected.
- 	* java/lang/Void.java (Void): New private constructor.
- 	* java/lang/System.java (System): New private constructor.
- 	* java/lang/SecurityManager.java (classLoaderDepth): Uncommented
- 	body.
- 	(currentClassLoader): New method.
- 	(currentLoadedClass): New method.
- 	* java/lang/Math.java (Math): New private constructor.
- 	* java/lang/Compiler.java (Compiler): New private constructor.
- 	* java/lang/Class.java (Class): New private constructor.
- 	* java/lang/Double.java (toString): Removed access specifier from
- 	two-argument `toString' method.
- 
- 1998-12-04  Andrew Haley  <aph@cygnus.co.uk>
- 
- 	* java/lang/s_rint.c (rint): Make the variable w volatile; this
- 	causes it to be flushed from an fp register (where it may be
- 	longer than double precision) to a double in memory.  This is
- 	essential to ensure correct rounding behaviour.
-  
- 1998-12-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-assert.h (_Jv_Abort): Declare as `noreturn'
- 	function.
- 
- 	* java/lang/Character.java (isIdentifierIgnorable): Added comment
- 	explaining apparent divergence from JDK 1.2.
- 
- 1998-12-04  Per Bothner  <bothner@cygnus.com>
- 
- 	* include/no-threads.h:  Remove unused parameter names.
- 	This silences a bunch of warnings.
- 
- 1998-12-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/config.h.in: Rebuilt.
- 	* acconfig.h (HAVE_CTIME_R): New symbol.
- 
- 1998-12-03  Tom Tromey  <tromey@cygnus.com>
- 
- 	* mauve-libjava: Added many more categories to reject.
- 
- 	Changes to follow JDK1.2 spec:
- 	* java/lang/System.java (arraycopy, init_properties, checkSetIO,
- 	setErr, setIn, setOut): No need to be `final'.
- 	* java/lang/natObject.cc (wait): `nanos' argument is an int.
- 	* java/lang/Object.h (Object::wait): `nanos' argument is an int.
- 	* java/lang/Object.java (wait): `nanos' argument is an int.
- 	* java/lang/VirtualMachineError.java: Class is abstract.
- 	* java/lang/ThreadDeath.java: Made constructors public.
- 	* java/io/FileDescriptor.java (FileDescriptor): Added missing
- 	constructor.
- 
- Thu Dec  3 20:29:38 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/text/DateFormatSymbols.java (getAmPmStrings,
-  	getLocalPatternChars, setShortWeekdays): Fixed typos in method names.
- 
- Thu Dec  3 19:21:53 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/RandomAccessFile.java (writeInt, writeLong, writeFloat,
-  	writeDouble, writeByte, writeBytes, writeChar, writeChars,
-  	writeShort, writeUTF): Added 'final' to signature to match JDK 1.1
-  	and 1.2.
- 
- 	* java/lang/IllegalThreadStateException.java
-  	(IllegalThreadStateException): Changed extending class to match spec.
- 
- 	* java/lang/NumberFormatException.java
- 	(java/lang/NumberFormatException): Changed extending class to match
-  	spec.
- 
- 	* java/util/Observer.java (Observer): Changed sig to match JCL.
- 
- Thu Dec  3 19:05:26 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/DataOutputStream.java (writeInt, writeLong, writeFloat,
-  	writeDouble, writeBytes, writeChars, writeUTF): Added 'final' to
-  	signature to match JDK 1.1 and 1.2.
- 
- Thu Dec  3 16:47:42 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* Makefile.am: Changed to use $(PERL) rather than hardcoded 'perl'.
- 	* configure.in (PERL): Added AC_CHECK_PROGS to look for installed perl.
- 	* Makefile.in, configure: Rebuilt.
- 
- 	* java/text/ParsePosition.java (setErrorIndex): Fixed typo in method
- 	name.
- 
- 1998-12-02  Tom Tromey  <tromey@cygnus.com>
- 
- 	* mauve-libjava: New file.
- 
- 	The remaining `-W -Wall' fixes:
- 	* java/lang/e_sqrt.c (__ieee754_sqrt): Added cast to unsigned to
- 	avoid warning.
- 	* java/lang/s_scalbn.c (scalbn): Added braces to avoid ambiguous
- 	`else'.
- 	* java/lang/s_floor.c (floor): Added cast to unsigned to avoid
- 	warning.
- 	* java/lang/e_pow.c (__ieee754_pow): Added cast to unsigned to
- 	avoid warning.
- 	* java/lang/e_log.c (__ieee754_log): Added braces to avoid
- 	ambiguous `else'.
- 	* java/lang/s_ceil.c (ceil): Cast `i1' to unsigned to avoid
- 	warning.
- 	* java/lang/e_atan2.c (__ieee754_atan2): Added parentheses per gcc
- 	suggestion.
- 	* java/lang/strtod.c (_strtod_r): Added parentheses per gcc
- 	suggestion.
- 	* java/lang/mprec.c (Balloc): Removed unused variable.
- 	(mult): Added parentheses per gcc suggestion.
- 	(pow5mult): Likewise.
- 	(lshift): Likewise.
- 	(ulp): Likewise.
- 	(b2d): Likewise.
- 	(d2b): Likewise.
- 	* java/lang/dtoa.c (_dtoa_r): Added some parentheses per gcc
- 	suggestion.  Added cast to `int' to avoid signed/unsigned
- 	comparison.
- 	* jni.cc (_Jv_JNI_GetSuperclass): Removed name of unused
- 	parameter.
- 	(IsAssignableFrom): Likewise.
- 	(_Jv_JNI_GetObjectField): Likewise.
- 	(_Jv_JNI_GetByteField): Likewise.
- 	(_Jv_JNI_GetShortField): Likewise.
- 	(_Jv_JNI_GetIntField): Likewise.
- 	(_Jv_JNI_GetLongField): Likewise.
- 	(_Jv_JNI_GetStringLength): Likewise.
- 	(_Jv_JNI_ToReflectedField): Likewise.
- 	(_Jv_JNI_FromReflectedField): Likewise.
- 	(_Jv_JNIFunctions): Uncommented IsAssignableFrom.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (AM_CFLAGS): Define conditionally.
- 	(WARNINGS): New macro.
- 	(AM_CXXFLAGS): Include WARNINGS.
- 	* configure: Rebuilt.
- 	* configure.in (USING_GCC): New conditional.
- 
- 	* prims.cc (_Jv_Abort): Declare twice, to avoid warnings.
- 
- 	* java/lang/Character.java: Changed classification constants to
- 	type `byte' to match JDK 1.2 docs.
- 
- 1998-12-01  Tom Tromey  <tromey@cygnus.com>
- 
- 	Some fixes to be `-W -Wall' clean:
- 	* boehm.cc (_Jv_MarkObj): Removed name of unused parameter.
- 	(_Jv_MarkArray): Likewise.
- 	* java/lang/natCharacter.cc (to_lower_title): `i' is unsigned.
- 	(to_upper_title): Likewise.
- 	(isTitleCase): Likewise.
- 	(toTitleCase): Likewise.
- 	(getNumericValue): Likewise.
- 	(isLowerCase): Likewise.
- 	* java/lang/natString.cc (charAt): Don't cast `i' to unsigned
- 	(avoids compiler warning).
- 	* java/lang/natClass.cc (getDeclaredClasses): Always return a
- 	value.
- 	(getDeclaringClass): Likewise.
- 	(_Jv_LookupInterfaceMethod): Likewise.
- 	(_Jv_NewClass): Removed name of unused parameter.
- 	* exception.cc (_Jv_type_matcher): Removed unused variable.
- 	(_Jv_setup_eh_info): Removed name of unused parameter.
- 	* prims.cc (_Jv_NewArray): Always return a value.
- 	(_Jv_FindClassFromSignature): Likewise.
- 	* include/java-field.h (getNameUtf8Const): Removed name of unused
- 	parameter.
- 	* include/quick-threads.h (_Jv_ThreadInitData): Removed name of
- 	unused parameter.
- 	(_Jv_ThreadSetPriority): Likewise.
- 
- 	* java/lang/natString.cc (hashChars): Now static.
- 
- 	* java/lang/FirstThread.java (FirstThread): Now final.
- 
- 	* java/io/File.java (performMkdir, performRenameTo): Now private.
- 
- 	* java/lang/natSystem.cc (currentTimeMillis): Return a value even
- 	if no time function defined.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Look for ctime_r, ctime.
- 	* java/util/Date.java (toString): Now native.
- 	* java/util/natDate.cc (toString): Rewrote.
- 
- 1998-11-27  Andrew Haley  <aph@viagra.cygnus.co.uk>
- 
- 	* Add LDFLAGS line to allow TX39 test cases to link when cross
- 	compiling.
- 
- 1998-11-23  Anthony Green  <green@cygnus.com>
- 
- 	* boehm.cc, chartables.pl, classes.pl, exception.cc, jni.cc,
- 	no-threads.cc, nogc.cc, posix-threads.cc, prims.cc,
- 	quick-threads.cc, include/boehm-gc.h, include/cni.h,
- 	include/java-array.h, include/java-assert.h, include/java-field.h,
- 	include/javaprims.h, include/jni.h, include/jvm.h,
- 	include/no-gc.h, include/no-threads.h, include/posix-threads.h,
- 	include/quick-threads.h, java/io/BufferedInputStream.java,
- 	java/io/BufferedOutputStream.java, java/io/BufferedReader.java,
- 	java/io/BufferedWriter.java, java/io/ByteArrayInputStream.java,
- 	java/io/ByteArrayOutputStream.java, java/io/CharArrayReader.java,
- 	java/io/CharArrayWriter.java,
- 	java/io/CharConversionException.java, java/io/DataInput.java,
- 	java/io/DataInputStream.java, java/io/DataOutput.java,
- 	java/io/DataOutputStream.java, java/io/EOFException.java,
- 	java/io/File.java, java/io/FileDescriptor.java,
- 	java/io/FileInputStream.java, java/io/FileNotFoundException.java,
- 	java/io/FileOutputStream.java, java/io/FileReader.java,
- 	java/io/FileWriter.java, java/io/FilenameFilter.java,
- 	java/io/FilterInputStream.java, java/io/FilterOutputStream.java,
- 	java/io/FilterReader.java, java/io/FilterWriter.java,
- 	java/io/IOException.java, java/io/InputStream.java,
- 	java/io/InputStreamReader.java,
- 	java/io/InterruptedIOException.java,
- 	java/io/LineNumberInputStream.java, java/io/LineNumberReader.java,
- 	java/io/OutputStream.java, java/io/OutputStreamWriter.java,
- 	java/io/PipedInputStream.java, java/io/PipedOutputStream.java,
- 	java/io/PipedReader.java, java/io/PipedWriter.java,
- 	java/io/PrintStream.java, java/io/PrintWriter.java,
- 	java/io/PushbackInputStream.java, java/io/PushbackReader.java,
- 	java/io/RandomAccessFile.java, java/io/Reader.java,
- 	java/io/SequenceInputStream.java, java/io/Serializable.java,
- 	java/io/StreamTokenizer.java,
- 	java/io/StringBufferInputStream.java, java/io/StringReader.java,
- 	java/io/StringWriter.java, java/io/SyncFailedException.java,
- 	java/io/UTFDataFormatException.java,
- 	java/io/UnsupportedEncodingException.java, java/io/Writer.java,
- 	java/io/natFile.cc, java/io/natFileDescriptorEcos.cc,
- 	java/io/natFileDescriptorPosix.cc,
- 	java/lang/AbstractMethodError.java,
- 	java/lang/ArithmeticException.java,
- 	java/lang/ArrayIndexOutOfBoundsException.java,
- 	java/lang/ArrayStoreException.java, java/lang/Boolean.java,
- 	java/lang/Byte.java, java/lang/Character.java, java/lang/Class.h,
- 	java/lang/Class.java, java/lang/ClassCastException.java,
- 	java/lang/ClassCircularityError.java,
- 	java/lang/ClassFormatError.java, java/lang/ClassLoader.java,
- 	java/lang/ClassNotFoundException.java,
- 	java/lang/CloneNotSupportedException.java,
- 	java/lang/Cloneable.java, java/lang/Comparable.java,
- 	java/lang/Compiler.java, java/lang/Double.java,
- 	java/lang/Error.java, java/lang/Exception.java,
- 	java/lang/ExceptionInInitializerError.java,
- 	java/lang/FirstThread.java, java/lang/Float.java,
- 	java/lang/IllegalAccessError.java,
- 	java/lang/IllegalAccessException.java,
- 	java/lang/IllegalArgumentException.java,
- 	java/lang/IllegalMonitorStateException.java,
- 	java/lang/IllegalStateException.java,
- 	java/lang/IllegalThreadStateException.java,
- 	java/lang/IncompatibleClassChangeError.java,
- 	java/lang/IndexOutOfBoundsException.java,
- 	java/lang/InstantiationError.java,
- 	java/lang/InstantiationException.java, java/lang/Integer.java,
- 	java/lang/InternalError.java, java/lang/InterruptedException.java,
- 	java/lang/LinkageError.java, java/lang/Long.java,
- 	java/lang/Math.java, java/lang/NegativeArraySizeException.java,
- 	java/lang/NoClassDefFoundError.java,
- 	java/lang/NoSuchFieldError.java,
- 	java/lang/NoSuchFieldException.java,
- 	java/lang/NoSuchMethodError.java,
- 	java/lang/NoSuchMethodException.java,
- 	java/lang/NullPointerException.java, java/lang/Number.java,
- 	java/lang/NumberFormatException.java, java/lang/Object.h,
- 	java/lang/Object.java, java/lang/OutOfMemoryError.java,
- 	java/lang/Process.java, java/lang/Runnable.java,
- 	java/lang/Runtime.java, java/lang/RuntimeException.java,
- 	java/lang/SecurityException.java, java/lang/SecurityManager.java,
- 	java/lang/Short.java, java/lang/StackOverflowError.java,
- 	java/lang/String.java, java/lang/StringBuffer.java,
- 	java/lang/StringIndexOutOfBoundsException.java,
- 	java/lang/System.java, java/lang/Thread.java,
- 	java/lang/ThreadDeath.java, java/lang/ThreadGroup.java,
- 	java/lang/Throwable.java, java/lang/UnknownError.java,
- 	java/lang/UnsatisfiedLinkError.java,
- 	java/lang/UnsupportedOperationException.java,
- 	java/lang/VerifyError.java, java/lang/VirtualMachineError.java,
- 	java/lang/Void.java, java/lang/natCharacter.cc,
- 	java/lang/natClass.cc, java/lang/natDouble.cc,
- 	java/lang/natFirstThread.cc, java/lang/natFloat.cc,
- 	java/lang/natMath.cc, java/lang/natObject.cc,
- 	java/lang/natRuntime.cc, java/lang/natString.cc,
- 	java/lang/natSystem.cc, java/lang/natThread.cc,
- 	java/lang/reflect/Field.java, java/lang/reflect/Member.java,
- 	java/lang/reflect/Modifier.java, java/lang/reflect/natField.cc,
- 	java/text/DateFormat.java, java/text/DateFormatSymbols.java,
- 	java/text/FieldPosition.java, java/text/Format.java,
- 	java/text/NumberFormat.java, java/text/ParseException.java,
- 	java/text/ParsePosition.java, java/text/SimpleDateFormat.java,
- 	java/util/BitSet.java, java/util/Calendar.java,
- 	java/util/ConcurrentModificationException.java,
- 	java/util/Date.java, java/util/Dictionary.java,
- 	java/util/EmptyStackException.java, java/util/Enumeration.java,
- 	java/util/GregorianCalendar.java, java/util/Hashtable.java,
- 	java/util/Locale.java, java/util/MissingResourceException.java,
- 	java/util/NoSuchElementException.java, java/util/Observable.java,
- 	java/util/Observer.java, java/util/Properties.java,
- 	java/util/Random.java, java/util/SimpleTimeZone.java,
- 	java/util/Stack.java, java/util/StringTokenizer.java,
- 	java/util/TimeZone.java, java/util/TooManyListenersException.java,
- 	java/util/Vector.java, java/util/natGregorianCalendar.cc:  Updated
- 	copyright notices.
- 
- 	* exception.cc: Include eh-common.h instead of duplicating 
- 	code.
- 
- 1998-11-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure.host: Don't add `-O2' to libjava_flags.  Only add
- 	`-Os' to libjava_flags once.
- 
- 1998-11-17  Andrew Haley  <aph@viagra.cygnus.co.uk>
- 
- 	* Makefile.am: add LIBJAVA_JAVAFLAGS.
- 	* Makefile.in: likewise
- 	* acconfig.h: add ECOS conditional for configure.h
- 	* config.h.in: likewise
- 	* configure: add test for --with-ecos
- 	* configure.in: likewise
- 	* java/io/natFileDescriptorEcos.cc (java::io::FileDescriptor::write):
- 	rename call to avoid name clash.
- 	* java/lang/natSystem.cc: add eCos clock support.
- 	* java/util/natGregorianCalendar.cc: add eCos support.
- 	
- 1998-11-20  Andrew Haley  <aph@viagra.cygnus.co.uk>
- 
- 	* Makefile.am, Makefile.in, configure.host: tx39 build option 
- 	"-G 0" added.
- 
- Wed Nov 18 18:55:25 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/BufferedReader.java: Added more comments for clarity.
- 	(mark): Used more mnemonic name for local var extraBuffSpace.
- 
- 	* java/io/LineNumberReader.java (lineEnd): Removed method to avoid
- 	confusion with private method of same name in superclass.
- 	(skipRedundantLF): Set fields in special case to avoid infinite
- 	recursion.  Check if markPos has been invalidated in special case.
- 	(readLine): Rewritten to use readLine method of superclass.
- 	(skip): Incorporated code from lineEnd.
- 
- Wed Nov 18 02:46:03 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/BufferedReader.java (readLine): New method.
- 	(lineEnd): new private method.
- 	(mark): Track special case for readLine of getting '\r' at the
- 	end of the buffer.
- 	(reset): Ditto.
- 	(read): Ditto.
- 	(fill): Ditto.
- 	(skip): Ditto.
- 
- 	* java/io/InputStreamReader.java (read): Return number chars skipped
- 	rather than requested.
- 
- 	* java/lang/StringBuffer.java (append): Update count and differentiate
- 	between field and local variable.
- 
- 	* java/util/Date.java (parseTz): Evaluate in minutes rather than
- 	seconds.  Deal with military style time.
- 	(parse): Consistently treat all timezones in minutes until final
- 	calculation.  Flag as non-local timezone.  Return value in milliseconds.
- 	(setTime): Adjust for year offset from 1900.
- 	(UTC): Adjust for year offset from 1900.
- 
- 1998-11-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Switch on host, not target.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (GCJ_no): New macro.
- 	(GCJ): Use @CANADIAN@.
- 	(GCJH_no): New macro
- 	(GCJH_canadian): New macro.
- 	(GCJH): Use @CANADIAN@.
- 	(ZIP_no): New macro.
- 	(ZIP_canadian): New macro.
- 	(ZIP): Use @CANADIAN@.
- 	* aclocal.m4, configure: Rebuilt.
- 	* configure.in (CANADIAN): Compute and subst.
- 
- Tue Nov 17 12:44:37 1998  Anthony Green  <green@cygnus.com>
- 
- 	* java/io/FileDescriptor.java (finalize): Only close file
- 	descriptor if valid.
- 
- 1998-11-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (_Jv_InitRuntime): Removed.
- 
- 1998-11-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/FileOutputStream.java (close): Only close file
- 	descriptor if valid.
- 	(finalize): New method.
- 
- 	* prims.cc (_Jv_NewObjectArray): Set vtbl last.
- 	(_Jv_NewPrimArray): Likewise.
- 	* boehm.cc (_Jv_RegisterFinalizer): Use
- 	GC_REGISTER_FINALIZER_NO_ORDER.
- 	(GC_GENERIC_MALLOC): New define.
- 	(_Jv_AllocObj): Use it.
- 	(_Jv_AllocArray): Likewise.
- 	(_Jv_AllocBytes): Likewise.
- 	(_Jv_MarkObj): Just return if vtbl not set.
- 	(_Jv_MarkArray): Likewise.
- 	(MAYBE_MARK): New macro; use everywhere.
- 	(_Jv_MarkObj): Mark fields belonging to superclasses as well.
- 
- Mon Nov 16 14:57:53 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/natGregorianCalendar.cc (computeTime): Cast a time_t
- 	to a jlong before calculation to prevent overflow.
- 
- 1998-11-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Fixed typo.
- 
- 1998-11-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Class.h (Class::getName): Removed definition.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added InstantiationException.h,
- 	NoSuchMethodException.h.
- 	* java/lang/natClass.cc (clinit_name): Renamed from init_name.
- 	(init_name): New global.
- 	(hackRunInitializers): Use clinit_name.
- 	Include InstantiationException.h, NoSuchMethodException.h.
- 	(newInstance): Do some error checking (but not all).  Call
- 	constructor.
- 	(forName): Throw exception if class not found.
- 	(getName): New method.
- 	(forName): Transform class name from external format to internal
- 	format before lookup.
- 
- 1998-11-15  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/Class.h (Class::forName): Method is static.
- 
- 	* java/lang/natClass.cc (newInstance): Add simple implementation.
- 	(forName): Ditto.
- 
- Sat Nov 14 18:25:13 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* java/lang/Class.h (Class::accflags):  Must be unsigned short (not
- 	int), for compatibility with jc1.
- 
- 1998-11-14  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/config.h.in: Rebuilt.
- 	* acconfig.h (LINUX_THREADS): New define.
- 	* configure: Rebuilt.
- 	* configure.in: Define LINUX_THREADS if using POSIX threads on
- 	Linux.  Look for pthread_mutexattr_setkind_np function.
- 	* posix-threads.cc (throw_cleanup): New function.
- 	(really_start): Push cleanup function.
- 	(_Jv_ThreadCancel): New function.
- 	(daemon_mutex, daemon_cond, non_daemon_count): New globals.
- 	(_Jv_ThreadInitData): Set `exception' field in new structure.
- 	(_Jv_ThreadStart): Increment non_daemon_count if not a daemon
- 	thread.
- 	(_Jv_ThreadWait): New function.
- 	(_Jv_InitThreads): Initialize daemon globals.
- 	(FLAG_DAEMON): New macro.
- 	(really_start): Notify daemon_cond when non-daemon thread exits.
- 	Include <java/lang/System.h>.
- 	(struct starter): `object' field now a thread.
- 	(_Jv_MutexInit): Use pthread_mutexattr_setkind_np if it exists.
- 	* include/posix-threads.h (_Jv_CondInit): Use `0', not NULL.
- 	(_Jv_ThreadWait): Removed definition.
- 	(_Jv_Thread_t): Added `exception' field.
- 	(_Jv_ThreadCancel): Removed definition.
- 
- 1998-11-13  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (libjava.zip): Compute javac before changing
- 	directory.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (libjava.zip): Include directory entries.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (expanded): New macro.
- 	(GCJ): Use it.
- 
- 1998-11-12  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (clone): New function.
- 	* include/java-array.h (__JArray::clone): Removed definition.
- 
- 	* java/lang/natObject.cc (clone): Don't assert that class is not
- 	an array; array's `clone' method just calls this one.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (libjava.zip): Renamed target from classes.stamp.
- 	Now creates zip file.  Changed all users.
- 	(ZIP): New macro.
- 	(data_DATA): New macro.
- 
- 1998-11-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Recognize --enable-java-gc, not --enable-gc.
- 
- Wed Nov 11 18:13:46 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/InputStream.java (reset): Add msg to thrown exception.
- 
- Wed Nov 11 17:57:02 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/LineNumberInputStream.java: Rewritten.
- 
- 	* java/io/StringBufferInputStream.java: Removed extraneous import.
- 
- Wed Nov 11 15:19:33 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/StringBufferInputStream.java: Rewritten.
- 
- 	* java/util/Date.java (parseMonth): Optimize.
- 	(parseDayOfWeek): Created.
- 	(parse): Optimize to use parseDayOfWeek.
- 
- 1998-11-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/StringBuffer.java (append): Handle case where STR is
- 	`null'.
- 
- 	* include/javaprims.h: Regenerated class declarations.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Added --enable-gcj-classes,
- 	--enable-single-compilation, --enable-source-compilation flags.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (java_io_files): New macro.
- 	(java_lang_files): Likewise.
- 	(java_text_files): Likewise.
- 	(java_util_files): Likewise.
- 	(java_files): Use new macros.
- 	(java-io.o): New target.
- 	(java-lang.o): Likewise.
- 	(java-text.o): Likewise.
- 	(java-util.o): Likewise.
- 	(src_io_files): New macro.
- 	(src_lang_files): Likewise.
- 	(src_text_files): Likewise.
- 	(src_util_files): Likewise.
- 	(class_io_files): New macro.
- 	(class_lang_files): Likewise.
- 	(class_text_files): Likewise.
- 	(class_util_files): Likewise.
- 	(class_files): Use new macros.
- 	(javao_files): Define conditionally.
- 	(.java.o): New target.
- 	($(javao_files)): New target.
- 	(GCJ): new macro.
- 	(GCJH): Added $(EXEEXT).
- 	(CLASSPATH_ENV): Removed.
- 	(GCJCOMPILE): New macro.
- 
- Wed Nov 11 12:03:15 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/Date.java (parse): Written from scratch.
- 
- 1998-11-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Throwable.java (toString): Correct sense of test for
- 	determining when to include detail message in result.
- 
- 	* java/lang/ThreadDeath.java (ThreadDeath): Added missing
- 	constructor.
- 
- Fri Nov  6 16:30:20 1998  Tom Tromey  <tromey@ferrule.cygnus.com>
- 
- 	* java/lang/Class.h: Use _Jv_RegisterClasses, not
- 	_Jv_RegisterClass.
- 	* java/lang/natClass.cc (_Jv_RegisterClasses): New function.
- 	(_Jv_RegisterClass): Use it.
- 	* include/jvm.h (_Jv_RegisterClasses): Declare.
- 	* java/lang/natObject.cc (init): Removed.
- 	(sync_init): Never call _Jv_InitializeSyncMutex.
- 	(_Jv_InitializeSyncMutex): Don't set `init'.
- 	* prims.cc (JvRunMain): Don't run init functions.
- 
- Thu Nov  5 17:14:37 1998  Tom Tromey  <tromey@sanguine.cygnus.com>
- 
- 	* java/lang/natClass.cc (initializeClass): Set state before
- 	resolving constants.
- 
- 	* java/lang/natClass.cc (STATE_CONST_INIT): Removed.
- 	(STATE_RESOLVED): New macro.
- 	(initializeClass): Call resolveConstants.
- 	(hackRunInitializers): Don't call resolveConstants.
- 	(_Jv_FindArrayClass): Move short-circuit return for primitive
- 	element types earlier in function.
- 
- 1998-11-03  Tom Tromey  <tromey@hoser.cygnus.com>
- 
- 	* prims.cc (no_memory): New global.
- 	(_Jv_makeUtf8Const): Throw no_memory.
- 	(_Jv_AllocObject): Likewise.
- 	(_Jv_NewObjectArray): Likewise.
- 	(_Jv_NewPrimArray): Likewise.
- 	(JvRunMain): Initialize no_memory.
- 
- Tue Nov  3 17:15:45 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/FileInputStream.java: Corrected date comment.
- 	* java/io/SequenceInputStream.java: Rewritten.
- 
- Mon Nov  2 17:20:31 1998  Tom Tromey  (tromey@cygnus.com)
- 
- 	* java/lang/FirstThread.java (die): New method.
- 	* java/lang/natFirstThread.cc (die): Removed.
- 	(DIE): New macro.
- 	(run): Use `DIE', not `die'.
- 
- Mon Nov  2 16:23:41 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/CharArrayReader.java (read): Move check into synchronized
- 	block to prevent a close while in progress.
- 	(reset): Ditto.
- 	(skip): Ditto.
- 	* java/io/PushbackReader.java (read): Ditto.
- 	(ready): Ditto.
- 	(unread): Ditto.
- 	* java/io/StringReader.java (mark): Ditto.
- 	(read): Ditto.
- 	(reset): Ditto.
- 	(skip): Ditto.
- 
- Mon Nov  2 15:56:20 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/PipedInputStream.java: Updated status.
- 	(connect): Added code to prevent infinite recursion and to
- 	differentiate exception causes.
- 	(read): Added code to differentiate exception causes.
- 	(receive): Made exception pass string with the cause.
- 
- 	* java/io/PipedOutputStream.java: Updated status.
- 	(connect): Added code to call connect at the other end of the pipe.
- 
- Mon Nov  2 00:22:12 1998  Warren Levy  <warrenl@cygnus.com>
- 	
- 	* java/io/PipedInputStream.java (connect): Throw exception if
- 	already connected to the same output stream.
- 	(read): Do bounds checking first.
- 
- Sun Nov  1 22:48:55 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/PipedInputStream.java: Added private boolean outClosed.
- 	(available): Removed check if output stream is open.
- 	(close): Mark the buffer as empty so available returns 0.
- 	(read): Check if the output stream was closed and then return EOF
- 	when the buffer is empty.
- 	(receive): Mark the output stream as closed when passed a -1.
- 
- 	* java/io/PipedOutputStream.java (close): Notify the input stream
- 	that there's no more data coming.
- 	(connect): Added a FIXME comment to note more coordination needed
- 	with PipedInputStream.
- 	(flush): Added a FIXME comment to mark what this method might do
- 	instead of nothing.
- 
- Fri Oct 30 14:27:21 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/PipedInputStream.java: Rewritten.
- 
- 1998-10-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Throwable.java: Rewrote from scratch.
- 
- 	* java/lang/Class.h (Class): Don't mention newMultiArray.
- 	* prims.cc (newMultiArray): Removed.
- 	(_Jv_NewMultiArray): Removed.
- 	(newArray): Removed.
- 	(new_multi_array): New function.
- 	(_Jv_NewMultiArray): Rewrote from scratch.
- 
- 	* include/javaprims.h: Regenerated class declarations.
- 	* classes.pl (scan): Don't declare PrimClass.
- 	* include/cni.h (JvPrimClass): Use new names for classes.
- 	* java/lang/Class.h (Class): Removed _Jv_initPrimClass as friend;
- 	added _Jv_PrimClass.
- 	* prims.cc (_Jv_PrimClass): Renamed from PrimClass.
- 	(_Jv_initPrimClass): Removed.
- 	(DECLARE_PRIM_TYPE): Generated globals now start with `_Jv_'.
- 	(_Jv_AllocObject): Added comment.
- 	(_Jv_NewObjectArray): Likewise.
- 	(_Jv_NewPrimArray): Likewise.
- 
- 1998-10-29  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natClass.cc (_Jv_NewClass): Initialize new field.
- 	(_Jv_FindArrayClass): Use dtable_method_count to compute size of
- 	new dtable.
- 	* java/lang/Class.h (Class): Added `dtable_method_count' field.
- 
- 	* java/lang/natObject.cc (init): New global.
- 	(sync_init): Call _Jv_InitializeSyncMutex if required.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added ClassLoader.h.
- 	* include/jvm.h (_Jv_FindClassFromSignature): Declare.
- 	* java/lang/Class.h (Class): simpleLookupClass, insertClass,
- 	internalAddClass, lookupArray no longer friends.
- 	_Jv_RegisterClass, _Jv_FindClassInCache, _Jv_NewClass,
- 	_Jv_FindArrayClass now friends.
- 	* java/lang/natClass.cc (HASH_LEN): New macro.
- 	(HASH_UTF): Likewise.
- 	(loaded_classes): New global.
- 	(_Jv_FindClass): New function.
- 	(ClassClass): New define.
- 	(_Jv_FindClassInCache): New function.
- 	(_Jv_RegisterClass): Likewise.
- 	(_Jv_NewClass): Likewise.
- 	Include <string.h>
- 	(ObjectClass): New define.
- 	(CloneableClass): New define.
- 	* prims.cc (_Jv_FindClass): Removed.
- 	(simpleLookupClass): Removed.
- 	(insertClass): Removed.
- 	(CLASSHASHSZ): Removed.
- 	(classPool): Removed.
- 	(_Jv_RegisterClass): Removed.
- 	(internalAddClass): Removed.
- 	(ClassClass): Removed.
- 	(RuntimeClass): Removed.
- 	(lookupArray): Removed.
- 	(CloneableClass): Removed.
- 	(CLASSMAXSIG): Removed.
- 	Rearranged file to group related functions together.
- 	(_Jv_IsInstanceOf): Moved to natClass.cc.
- 	(abort_final): Removed.
- 	Removed some unused includes.
- 	(classFromSig): Removed.
- 	(_Jv_FindClassFromSignature): New function.
- 	(_Jv_initPrimClass): Renamed.
- 	(getClass): Removed.
- 
- Thu Oct 29 23:17:17 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/FileDescriptor.java (finalize): Throws IOException
- 	instead of Throwable.
- 
- 	* java/io/FileInputStream.java: Rewritten.
- 
- 	* java/io/StreamTokenizer.java (nextToken): Unread newline character
- 	at the end of a comment.
- 
- 1998-10-29  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/javaprims.h: Regenerated class declarations.
- 	* classes.pl (scan): Don't special-case ClassLoader.
- 
- 	* prims.cc (processClass): Removed.
- 	(_Jv_InitClass): Removed.
- 	Removed all CSTATE_ macros.
- 	(resolveConstants): Removed.
- 	(MAXDIMS): Removed.
- 	(_Jv_NewMultiArray): Cleaned up.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added NoClassDefFoundError.h.
- 	* java/lang/Class.h (Class): Declare new methods.  processClass no
- 	longer a friend.
- 	* java/lang/Class.java (hackTrampoline): New method.
- 	(initializeClass): Declare.
- 	(hackRunInitializers): Declare.
- 	* java/lang/natClass.cc (getClassLoader): Moved into Class.h.
- 	(initializeClass): New method.
- 	(hackRunInitializers): New method.
- 	(init_name, void_signature): Moved from prims.cc.
- 	(_Jv_InitClass): New function.
- 	(isAssignableFrom): Don't call processClass.
- 	(STATE_NOTHING): New macro.
- 	(resolveConstants): New function.
- 	Include Thread.h.
- 	(ErrorClass): New define.
- 
- 	* java/lang/Class.java (getClassLoader): Declare.
- 	* java/lang/ClassLoader.java: Rewrote from scratch.
- 
- 	* java/lang/natClass.cc: Include IncompatibleClassChangeError.h,
- 	AbstractMethodError.h, IllegalAccessError.h,
- 	NoClassDefFoundError.h.
- 	* include/jvm.h (StringClass): Declare _Jv_equalUtf8Consts.
- 	* prims.cc (_Jv_equalUtf8Consts): Renamed from equalUtf8Consts; no
- 	longer static.  Changed return type.
- 	* java/lang/natFirstThread.cc (run): Use _Jv_GetMethodLocal.
- 	* java/lang/Class.h (Class): findMethodLocal no longer a friend.
- 	* prims.cc (findMethodLocal): Removed.
- 	(processClass): Use _Jv_GetMethodLocal.
- 
- 1998-10-28  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (_Jv_LookupInterfaceMethod): Removed.
- 	* java/lang/Class.h (Class): Declare _Jv_GetMethodLocal as
- 	friend.
- 	* java/lang/natClass.cc (_Jv_GetMethodLocal): New function.
- 	(_Jv_LookupInterfaceMethod): New function (rewrote from scratch).
- 
- 	* include/jni.h: Added copyright header.
- 	* include/javaprims.h: Added copyright header.
- 	* include/java-field.h: Added copyright header.
- 	* include/java-array.h: Added copyright header.
- 	* include/cni.h: Added copyright header.
- 
- 	* include/javaprims.h: Regenerated class declarations using
- 	classes.pl; now they are complete.
- 	* classes.pl: New file.
- 
- 	* java/lang/natMath.cc: Include <config.h>.
- 	* java/lang/reflect/natField.cc: Include <config.h>.
- 	* java/util/NativeUtil.java: Removed.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added Math.h.
- 	* java/lang/Math.h: Removed.
- 	* java/util/natGregorianCalendar.cc: Added copyright header.
- 	Include <config.h>.
- 	* java/lang/natFloat.cc: Added copyright header.
- 	* java/lang/Byte.java: Added copyright header.
- 	* java/lang/Void.java: Added copyright header.
- 	* java/lang/Short.java: Added copyright header.
- 
- Wed Oct 28 12:55:47 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* include/javaprims.h (java::io): Added bunch of missing classes.
- 	
- 	* java/io/DataInputStream.java (readLine): Added a special case
- 	for handling BufferedInputStream data to reduce the likelihood
- 	of a pushback error.
- 	(skipBytes): Added code to handle negative number of skip bytes.
- 	
- 	* java/io/StreamTokenizer.java: Rewritten.
- 
- 1998-10-28  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/natGregorianCalendar.cc (computeFields): Call
- 	getRawOffset as a method.
- 
- 	* include/javaprims.h (java::io): Added FilterOutputStream.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added PrintStream.h,
- 	FilterOutputStream.h.
- 	* java/lang/natFirstThread.cc: Include System.h, Modifier.h,
- 	PrintStream.h.
- 	(die): New function.
- 	(run): Die if `main' not found, is not public, or is not static.
- 
- 	* boehm.cc (_Jv_MarkObj): Use new field names.
- 	* include/java-field.h (JvGetFirstInstanceField): Use new field
- 	names.
- 	(JvNumInstanceFields): Likewise.
- 	* java/lang/natClass.cc (isAssignableFrom): Use new field names.
- 	(getInterfaces): Likewise.
- 	* prims.cc (CLASS_CONSTANTS): Removed.
- 	(CLASS_CONST_SIZE): Likewise.
- 	(CLASS_CONST_TAG): Likewise.
- 	(CLASS_CONST_DATA): Likewise.
- 	(CLASS_CONST_UTF8): Likewise.
- 	(WORD2UTF): Likewise.
- 	(CLASS_CLASS): Likewise.
- 	(CLASS_PRIM_SIG): Likewise.
- 	(CLASS_ARRAY_CACHE): Likewise.
- 	(HASH_CHARS): Likewise.
- 	(hashClassName): Likewise.
- 	Many changes to use new field names.
- 	* java/lang/Class.h (Class): Renamed fields to track compiler.
- 
- 1998-10-27  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natClass.cc: Use #pragma implementation.
- 	(getComponentType): Moved into header.
- 	(getModifiers): Likewise.
- 	(getName): Likewise.
- 	(getSuperclass): Likewise.
- 	(isArray): Likewise.
- 	(isPrimitive): Likewise.
- 	* include/jvm.h (_Jv_FindClass): Declare.
- 	* java/lang/natFirstThread.cc (run): Updated for new Class.h.
- 	* java/lang/natSystem.cc (arraycopy): Updated for new Class.h.
- 	* include/javaprims.h: Use _Jv_Method, not JvMethod.
- 	* java/lang/Class.h: Rewrote from scratch.
- 	* prims.cc: Many changes to work with new Class.h.
- 	* include/java-field.h (CLASS_FIELDS): Removed.
- 	(CLASS_SFIELDS): Likewise.
- 	(CLASS_IFIELDS): Likewise.
- 	(CLASS_NFIELDS): Likewise.
- 	(CLASS_NIFIELDS): Likewise.
- 	(CLASS_NSFIELDS): Likewise.
- 	(CLASS_FSIZE): Likewise.
- 	(JvGetFirstInstanceField): Rewrote.
- 	(JvNumInstanceFields): Likewise.
- 
- 	* java/lang/Object.h: Added copyright comment.
- 
- Wed Oct 28 00:32:23 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* java/text:  New package directory.
- 	* java/text/FieldPosition.java:  New class.
- 	* java/text/ParsePosition.java:  New class. 
- 	* java/text/ParseException.java:  New Exception class.
- 	* java/text/Format.java:  New class.
- 	* java/text/NumberFormat.java:  New (empty placeholder) class.
- 	* java/text/DateFormatSymbols.java:  New class (no Locales support).
- 	* java/text/DateFormat.java:  New Format class (incomplete).
- 	* java/text/SimpleDateFormat.java:  New DateFormat class.
- 	
- 	* include/javaprims.h (java::test):  Added new package and classes.
- 	* java/util/Calendar.java (clone):  New method.
- 	* java/util/Date.java (toString):  Added non-native implementation.
- 	(parse):  Made public instead of synchronized.
- 	* java/util/natDate.cc (toString):  Removed.
- 	* java/util/natGregorianCalendar.cc (computeFields):
- 	Use gmtime (or gmtime_r) if no zone offset (the default, for now!).
- 
- 1998-10-27  Tom Tromey  <tromey@cygnus.com>
- 
- 	* boehm.cc (_Jv_MarkObj): Correctly mark a class' interfaces.
- 
- 	* prims.cc (lookupArray): Added explanatory comment.
- 	* boehm.cc (_Jv_MarkObj): Correctly scan methods and fields of
- 	class.  Mark the class of each object.
- 	(_Jv_MarkArray): Mark the object's class.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Create java-gc.h.
- 	* include/boehm-gc.h: New file.
- 	* include/no-gc.h: New file.
- 	* java/lang/Class.h (Class): Declare JV_MARKOBJ_DECL as friend, if
- 	defined.
- 	* java/lang/Object.h: Include java-gc.h.
- 	(Object): Declare JV_MARKOBJ_DECL and JV_MARKARRAY_DECL as
- 	friends, if defined.
- 	* boehm.cc (_Jv_MarkObj): Renamed from mark_obj; changed
- 	signature.
- 	(_Jv_MarkArray): Renamed from mark_array; changed signature.
- 
- 1998-10-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natCharacter.cc (isSpaceChar): Look for line and
- 	paragraph separators, not numbers.
- 
- 	* java/io/Writer.java (write): Removed write(char) to avoid
- 	ambiguity.
- 	* java/util/Properties.java: Rewrote from scratch.
- 	* include/javaprims.h (java::io): Added PrintWriter,
- 	BufferedWriter, PushbackReader.
- 
- Mon Oct 26 13:13:28 1998  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/System.java: exit() is a static method.
- 
- 1998-10-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natString.cc (_Jv_NewStringUTF): Use
- 	_Jv_strLengthUtf8.
- 	(_Jv_NewStringUtf8Const): Likewise.
- 	* include/jvm.h (_Jv_strLengthUtf8): Declare.
- 	* prims.cc (_Jv_strLengthUtf8): Renamed from strLengthUtf8.
- 
- 	* java/lang/Object.h (Object): Add mark_array as friend function.
- 	* prims.cc (_Jv_NewPrimArray): Use _Jv_AllocObj, not
- 	_Jv_AllocBytes, to ensure that header is marked.
- 	* boehm.cc (mark_obj): Push sync_info field for all objects, not
- 	just Objects.
- 	(mark_array): Push sync_info field for array.
- 
- 1998-10-24  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/String.java (String): Updated for StringBuffer
- 	change.
- 	* java/util/BitSet.java: Renamed field (data->bits) to conform to
- 	serialization spec.
- 	* java/lang/StringBuffer.java: Renamed fields to conform to
- 	serialization spec: buffer->value, next->count, copy->shared.
- 
- Wed Oct 21 18:24:57 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* java/util/TimeZone.java:  New class.
- 	* java/util/SimpleTimeZone.java:  New class.
- 	* java/util/Locale.java:  New file.
- 	* java/util/Calendar.java:  Make almost complete.
- 	* java/util/GregorianCalendar.java
- 	* java/util/natGregorianCalendar.cc:  New file.
- 	* java/util/Date.java:  Re-written from scratch.
- 	* java/util/natDate.cc (setTime):  Removed - no longer native.
- 	* include/javaprims.h (java::util):  Add new classes.
- 	* Makefile.am (nat_files):  Add java/util/natGregorianCalendar.o.
- 	(nat_headers);  Add TimeZone.h, Calendar.h, GregorianCalendar.h.
- 
- Sat Oct 24 22:58:25 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/natFileDescriptorPosix.cc (read): Zero extend jbyte b before
- 	returning it as a jint.
- 
- 1998-10-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (arg_vec, main_group, main_thread): New globals.
- 	(JvRunMain): Use them.
- 
- Fri Oct 23 17:10:12 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/DataInputStream.java: Rewritten.
- 
- 	* java/io/DataOutputStream.java (writeUTF): OR secondary and
-  	tertiary bytes with 0x80 per spec.
- 
- 1998-10-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/String.java (init): Changed name of `copy' argument.
- 	* java/lang/natString.cc (init): Inverted sense of `copy'
- 	argument.
- 
- 	* java/lang/Object.h (Object): Declare mark_obj as a friend.
- 	* java/lang/Class.h (Class): Declare mark_obj as a friend.
- 	* boehm.cc (ObjectClass): New define.
- 	(ClassClass): Likewise.
- 	(mark_obj): Special-case Object and Class.
- 
- 	* prims.cc (_Jv_NewPrimArray): Pass correct args to memset.
- 
- 	* java/util/BitSet.java: Rewrote from scratch.
- 
- 	* prims.cc (lookupArray): Removed useless cast.
- 
- 	* java/lang/natObject.cc: Use `#pragma implementation'.
- 
- 	* java/lang/String.java (init): Added `copy' argument.
- 	(String): Look in StringBuffer to find char array.
- 	* java/lang/natString.cc (init): Added `copy' argument.
- 	* java/lang/StringBuffer.java: Rewrote from scratch.
- 
- 	* java/lang/Compiler.java: Rewrote from scratch.
- 	* java/lang/Throwable.java: Don't use NativeLang.
- 	* include/javaprims.h (java::lang): Don't mention NativeLang.
- 	* java/lang/Process.java: Rewrote from scratch.
- 	* java/lang/SecurityManager.java (classLoaderDepth): Commented
- 	out.
- 	(currentClassLoader): Likewise.
- 	(currentLoadedClass): Likewise.
- 	* java/lang/natClass.cc (getClassLoader): Commented out.
- 	* java/lang/Class.java (getClassLoader): Commented out.
- 	* java/lang/Compiler.java: Removed.
- 	* java/lang/NativeLang.java: Removed.
- 
- 	* java/lang/natFirstThread.cc (run): Use _Jv_makeUtf8Const.
- 	* include/jvm.h (StringClass): Declare _Jv_makeUtf8Const.
- 	* prims.cc (_Jv_makeUtf8Const): Renamed from makeUtf8Const.
- 	(_Jv_hashUtf8String): Now static.
- 	* include/java-field.h (getNameUtf8Const): Use `_Jv_Utf8Const' as
- 	name of return type.
- 
- 	* java/lang/Class.h (Class): Declare checkMemberAccess.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added Member.h.
- 	* java/lang/natClass.cc: Include Member.h.
- 	(getDeclaredClasses): Call checkMemberAccess.
- 	* java/lang/Class.java (checkMemberAccess): Call
- 	SecurityManager.checkMemberAccess.
- 
- Fri Oct 23 08:01:54 1998  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/SecurityManager.java: Rewritten.
- 
- Thu Oct 22 17:16:10 1998  Anthony Green  <green@cygnus.com>
- 
- 	* java/applet/Applet.java, java/applet/AppletContext.java,
- 	java/applet/AppletStub.java, java/applet/AudioClip.java,
- 	java/awt/AWTError.java, java/awt/AWTException.java,
- 	java/awt/BorderLayout.java, java/awt/Button.java,
- 	java/awt/Canvas.java, java/awt/CardLayout.java,
- 	java/awt/Checkbox.java, java/awt/CheckboxGroup.java,
- 	java/awt/CheckboxMenuItem.java, java/awt/Choice.java,
- 	java/awt/Color.java, java/awt/Component.java,
- 	java/awt/Container.java, java/awt/Dialog.java,
- 	java/awt/Dimension.java, java/awt/Event.java,
- 	java/awt/FileDialog.java, java/awt/FlowLayout.java,
- 	java/awt/Font.java, java/awt/FontMetrics.java,
- 	java/awt/Frame.java, java/awt/Graphics.java,
- 	java/awt/GridBagConstraints.java, java/awt/GridBagLayout.java,
- 	java/awt/GridLayout.java, java/awt/Image.java,
- 	java/awt/Insets.java, java/awt/Label.java,
- 	java/awt/LayoutManager.java, java/awt/List.java,
- 	java/awt/MediaTracker.java, java/awt/Menu.java,
- 	java/awt/MenuBar.java, java/awt/MenuComponent.java,
- 	java/awt/MenuContainer.java, java/awt/MenuItem.java,
- 	java/awt/Panel.java, java/awt/Point.java, java/awt/Polygon.java,
- 	java/awt/Rectangle.java, java/awt/Scrollbar.java,
- 	java/awt/TextArea.java, java/awt/TextComponent.java,
- 	java/awt/TextField.java, java/awt/Toolkit.java,
- 	java/awt/Window.java, java/awt/image/ColorModel.java,
- 	java/awt/image/CropImageFilter.java,
- 	java/awt/image/DirectColorModel.java,
- 	java/awt/image/FilteredImageSource.java,
- 	java/awt/image/ImageConsumer.java,
- 	java/awt/image/ImageFilter.java,
- 	java/awt/image/ImageObserver.java,
- 	java/awt/image/ImageProducer.java,
- 	java/awt/image/IndexColorModel.java,
- 	java/awt/image/MemoryImageSource.java,
- 	java/awt/image/PixelGrabber.java,
- 	java/awt/image/RGBImageFilter.java, java/awt/peer/ButtonPeer.java,
- 	java/awt/peer/CanvasPeer.java,
- 	java/awt/peer/CheckboxMenuItemPeer.java,
- 	java/awt/peer/CheckboxPeer.java, java/awt/peer/ChoicePeer.java,
- 	java/awt/peer/ComponentPeer.java,
- 	java/awt/peer/ContainerPeer.java, java/awt/peer/DialogPeer.java,
- 	java/awt/peer/FileDialogPeer.java, java/awt/peer/FramePeer.java,
- 	java/awt/peer/LabelPeer.java, java/awt/peer/ListPeer.java,
- 	java/awt/peer/MenuBarPeer.java,
- 	java/awt/peer/MenuComponentPeer.java,
- 	java/awt/peer/MenuItemPeer.java, java/awt/peer/MenuPeer.java,
- 	java/awt/peer/PanelPeer.java, java/awt/peer/ScrollbarPeer.java,
- 	java/awt/peer/TextAreaPeer.java,
- 	java/awt/peer/TextComponentPeer.java,
- 	java/awt/peer/TextFieldPeer.java, java/awt/peer/WindowPeer.java,
- 	java/net/ContentHandler.java, java/net/ContentHandlerFactory.java,
- 	java/net/DatagramPacket.java, java/net/DatagramSocket.java,
- 	java/net/DefaultSocketImpl.java, java/net/InetAddress.java,
- 	java/net/MalformedURLException.java, java/net/NativeNet.java,
- 	java/net/ProtocolException.java, java/net/ServerSocket.java,
- 	java/net/Socket.java, java/net/SocketException.java,
- 	java/net/SocketImpl.java, java/net/SocketImplFactory.java,
- 	java/net/URL.java, java/net/URLConnection.java,
- 	java/net/URLEncoder.java, java/net/URLStreamHandler.java,
- 	java/net/URLStreamHandlerFactory.java,
- 	java/net/UnknownHostException.java,
- 	java/net/UnknownServiceException.java: Removed.
- 
- 1998-10-22  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (_Jv_AllocObject): Register finalizer if class'
- 	finalizer is not Object.finalize.
- 	(internalAddClass): Don't set `final' member of class.
- 	* java/lang/Object.h: Updated _JvObjectPrefix comment to mention
- 	other places that know about finalize() location.
- 	* java/lang/Class.h (Class): Removed `final' field.
- 
- 	* aclocal.m4, configure: Rebuilt.
- 	* acinclude.m4 (LIB_AC_PROG_CXX): Unconditionally use
- 	AC_CHECK_PROGS; otherwise the CXX cache variable might not be
- 	set.
- 	* configure.in (AC_OUTPUT): Pass CXX to config.status.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (AM_MAKEFLAGS): Added CXX, CXXFLAGS.
- 
- 1998-10-21  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Object.java (finalize): Move to be first method in
- 	class.
- 
- 	* configure: Rebuilt.
- 	* configure.in (GCINCS): Include contents of boehm-cflags file.
- 
- Tue Oct 20 13:11:04 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* java/lang/ArrayIndexOutOfBoundsException.java
-  	(ArrayIndexOutOfBoundsException): Fixed string literal.
- 	* java/lang/StringIndexOutOfBoundsException.java
- 	(StringIndexOutOfBoundsException): Fixed string literal.
- 
- 1998-10-20  Andrew Haley  <aph@viagra.cygnus.co.uk>
- 
- 	* natFileDescriptorEcos.cc added.
- 	* natFileDescriptor.cc renamed natFileDescriptorPosix.cc.  
- 
- 1998-10-20  Andrew Haley  <aph@viagra.cygnus.co.uk>
- 
- 	* acconfig.h: test for __int32_t and __uint32_t added.
- 	* include/config.h.in: test for __int32_t and __uint32_t added.
- 	* java/lang/fdlibm.h: test for __int32_t and __uint32_t added.
- 	* java/lang/mprec.h: test for __int32_t and __uint32_t added.
- 	* configure.in: test for __int32_t and __uint32_t added.
- 	* configure: test for __int32_t and __uint32_t added.
- 	
- 	* natFileDescriptor.cc renamed natFileDescriptorPosix.cc.  
- 
- 	* configure.in: Test for --enable ecos and link
- 	natFileDescriptor.cc to natFileDescriptorEcos.cc or
- 	natFileDescriptorPosix.cc
- 	
- 	* java/lang/dtoa.c: #include <stdio.h> moved inside #ifdef DEBUG.
- 	
- Mon Oct 19 18:13:58 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ByteArrayInputStream.java (skip): Ensure that arg passed
-  	in isn't negative.
- 
- 	* java/io/CharArrayReader.java (close): Synchronize on lock
-  	object per Reader contract.
- 	(read): Synchronize on lock obj.  Verify that reader wasn't closed.
- 	(reset): Synchronize on lock obj.  Verify that reader wasn't closed.
- 	(skip): Synchronize on lock obj.  Verify that reader wasn't closed.
-   	Ensure that arg passed in isn't negative.
- 
- 	* java/io/FilterReader.java (FilterReader): Use the lock obj when
- 	constructing the superclass.
- 
- 	* java/io/PushbackReader.java (close): Synchronize on lock
-  	object per Reader contract.
- 	(read): Synchronize on lock obj.  Verify that reader wasn't closed.
- 	(ready): Synchronize on lock obj.  Throw IOException if reader
-  	wasn't closed.
- 	(reset): Synchronize on lock obj.  Verify that reader wasn't closed.
- 	(skip): Synchronize on lock obj.  Verify that reader wasn't closed.
-   	Ensure that arg passed in isn't negative.
- 	(unread): Synchronize on lock obj.  Verify that reader wasn't closed.
- 
- 	* java/io/StringReader.java: Created.
- 	
- Sun Oct 18 02:19:11 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/CharArrayReader.java (mark): Removed synchronized modifier
- 	to match JCL.
- 	(read): Removed synchronized modifier to match JCL.
- 	(reset): Removed synchronized modifier to match JCL.
- 	(skip): Removed synchronized modifier to match JCL.
- 
- Sun Oct 18 02:01:54 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/PushbackReader.java (PushbackReader): Made
- 	constructors public.
- 
- 1998-10-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/PushbackInputStream.java (PushbackInputStream): Made
- 	constructors public.
- 
- 1998-10-16  Anthony Green  <green@cygnus.com>
- 
- 	* aclocal.m4, configure: Rebuilt.
- 	* acinclude.m4 (LIBJAVA_CONFIGURE): Changed for new
- 	configure.host.
- 	* configure.host: Rewrote.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (AM_CXXFLAGS): Added LIBJAVA_CXXFLAGS.
- 	(AM_CFLAGS): New macro.
- 	($(c_files)): Use COMPILE macro.
- 	(EXTRA_libjava_a_SOURCES): Added dummy file to work around
- 	automake problem(s).
- 
- Fri Oct 16 16:36:28 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ByteArrayInputStream.java (mark): Removed temp. comment.
- 
- 	* java/io/CharArrayReader.java: Created.
- 
- Fri Oct 16 15:17:01 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/PushbackInputStream.java (PushbackInputStream): Changed
-  	size check to allow 0 per JCL.
- 
- 	* java/io/PushbackReader.java: Created.
- 
- 1998-10-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/natFileDescriptor.cc: Conditionalize <unistd.h>,
- 	<sys/time.h> includes. 
- 	* java/io/natFile.cc: Conditionalize <unistd.h> include.
- 	* include/no-threads.h: Conditionalize <unistd.h> include on
- 	HAVE_UNISTD_H.
- 
- Fri Oct 16 14:39:51 1998  Andrew Haley  <aph@madras.cygnus.co.uk>
- 
- 	* include/no-threads.h: Don't include <unistd.h> unless HAVE_SLEEP
-  	is defined.
- 
- Thu Oct 15 19:27:54 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/FilterReader.java: Created.
- 
- Thu Oct 15 17:49:43 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/PushbackInputStream.java: Rewritten.
- 
- 	* java/io/BufferedInputStream.java (BufferedInputStream): Check
- 	that size passed to constructor is legal.
- 	(read): Check that args passed in are legal.
- 	(skip): Rewritten to get rid of the temporary buffer.
- 	(refill): Added marklimit check to grow the buffer.
- 
- 	* java/io/ByteArrayInputStream.java (read): Optimized invalid args
- 	check.
- 	(bytesAvail): Removed.
- 	(read): Changed bytesAvail to Math.min.
- 	(skip): Changed bytesAvail to Math.min.
- 
- 	* java/io/InputStream.java (read): Got rid of extraneous exceptions
- 	from the throws clause.
- 	(skip): Rewritten to use a temporary buffer.
- 
- Thu Oct 15 19:42:55 1998  Andrew Haley  <aph@madras.cygnus.co.uk>
- 
- 	* prims.cc: (JvConvertArgv): Check added for argc < 0; possible on
-  	some target OSes
- 
- 	* java/lang/dtoa.c: (print): Made #ifdef DEBUG only.
- 
- 	* java/lang/strtod.c: (_strtod_r): Don't use HUGE_VAL: it's faster
-  	to write the double one word at a time.
- 
- Tue Oct 13 14:41:47 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/BufferedInputStream.java:  Rewritten.
- 
- 1998-10-12  Tom Tromey  <tromey@cygnus.com>
- 
- 	* jni.cc: Include config.h and stddef.h.
- 
- 	* java/lang/Class.h (_dispatchTable): Removed again.
- 	Removed all ACC_* defines again.
- 
- Fri Oct  9 17:08:34 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* Makefile.am (nat_files):  Add netField.o.
- 	(libjava_a_SOURCES):  Add jni.cc.
- 	(java/lang/reflect/Field.h):  New rule.
- 	* Makefile.in:  Re-generated.
- 	* include/javaprims.h:  Add some extra class and typedefs.
- 	* include/jni.h:  New file.
- 	* jni.cc:  New file.
- 
- 	* include/java-field.h:  New file.
- 	* include/jvm.h:  #include <java-field.h>.
- 	* boehm.cc:  #include <java-field.h>.
- 	* java/lang/Class.h (JvField, inline numbers):  Moved to java-field.h.
- 	* java/lang/reflect/Member.java:  New class.
- 	* java/lang/reflect/Field.java:  New class.  (Very incomplete.)
- 	* java/lang/reflect/natField.cc:  New file.  (Very incomplete.)
- 
- Sun Oct 11 00:34:44 1998  Anthony Green  <green@cygnus.com>
- 
- 	* Makefile.in, aclocal.m4, configure, test/Makefile.in,
- 	testsuite/Makefile.in: Rebuilt.
- 	* Makefile.am, acinclude.m4, configure.in: Add multilib support.
- 	* configure.host: Created.
- 
- 1998-10-10  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natObject.cc (sync_init): Always allocate a new
- 	sync_info.
- 
- 1998-10-09  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/ByteArrayInputStream.java (mark): Renamed from
- 	`mark_FIXME'.
- 
- 	* java/io/FileOutputStream.java (finalize): Removed.
- 	* java/io/FileDescriptor.java (finalize): New method.
- 
- Thu Oct  8 17:59:43 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* ByteArrayInputStream.java: Corrected status comment.
- 
- Thu Oct  8 17:22:49 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* ByteArrayInputStream.java, FilterInputStream.java: Rewritten.
- 
- 1998-10-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (lookupArray): Use static array to initialize list of
- 	interfaces.
- 
- Thu Oct  8 12:45:03 1998  Anthony Green  <green@cygnus.com>
- 
- 	* prims.cc (lookupArray): Initialize the msize for new
- 	array classes.
- 
- Wed Oct  7 12:13:59 1998  Anthony Green  <green@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Check for fsync and sleep.
- 	* acconfig.h (HAVE_SLEEP, HAVE_FSYNC): Added.
- 
- 	* include/no-threads.h (_Jv_CondWait): Wrap sleep() use with
- 	HAVE_SLEEP. Include config.h.
- 
- 	* java/io/natFileDescriptor.cc (NO_FSYNC_MESSAGE): Added.
- 	* java/io/natFileDescriptor.cc (sync): Wrap fsync() use
- 	with HAVE_FSYNC.
- 
- 1998-10-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/natFile.cc: Don't include SecurityManager.h.
- 	(performList): Renamed.
- 	(performMkdir): Likewise.
- 	(performRenameTo): Likewise.
- 	(performDelete): Likewise.
- 	Include <stdlib.h>.
- 	* java/io/File.java (performDelete): Renamed from natDelete.
- 	(list): Now written in Java.
- 	(performList): New method.
- 	(performMkdir): New method.
- 	(mkdir): Now written in Java.
- 	(performRenameTo): New method.
- 	(renameTo): Now written in Java.
- 
- 1998-10-06  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (ETAGS_ARGS): New macro.
- 	(TAGS_DEPENDENCIES): Likewise.
- 
- Tue Oct  6 22:04:44 PDT 1998 Anthony Green  <green@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am: Use -classpath option with javac.
- 	
- Tue Oct  6 18:51:31 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/FileOutputStream.java (finalize): Call
- 	super.finalize().
- 
- Tue Oct  6 16:02:45 1998  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/mprec.h: Remove unused _mprec_log10 which conflicts
- 	with newlib's libm.
- 	* java/lang/mprec.c: Ditto.
- 
- 	* java/lang/mprec.h: Include math.h for HUGE_VAL when
- 	cross-compiling.
- 
- Tue Oct  6 14:27:00 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/InputStream.java (skip): Make local var i a long.
- 
- Mon Oct  5 09:44:24 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natObject.cc (clone): Use memcpy, not memmove.
- 	* prims.cc (lookupArray): Use memcpy, not memmove.
- 	* include/config.h.in: Rebuilt.
- 	* acconfig.h (HAVE_MEMCPY): Added.
- 	* configure: Rebuilt.
- 	* configure.in: Check for memcpy again.
- 
- 	* java/io/RandomAccessFile.java (RandomAccessFile): Use
- 	String.compareTo, not ==.
- 
- 	* java/lang/Class.h (Class): Use _Jv_DispatchTable.
- 	(_PRIMITIVE_DTABLE): Use _Jv_DispatchTable.
- 	* java/lang/natObject.cc (struct _dispatchTable): Removed.
- 	* include/jvm.h (struct _Jv_DispatchTable): New structure.
- 	* prims.cc (lookupArray): Removed dead code.  Copy Object's dtable
- 	into new array's dtable.
- 	(_Jv_AllocObject): Use _Jv_DispatchTable.
- 	(_Jv_NewPrimArray): Likewise.
- 	(_Jv_NewObjectArray): Likewise.
- 
- Fri Oct  2 18:57:14 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* prims.cc (_Jv_ThrowBadArrayIndex): Construct a string with the
-  	offending index value.
- 	(_Jv_NewPrimArray): Throw NegativeArraySizeException when
-  	appropriate.
- 	* include/jvm.h (_Jv_ThrowBadArrayIndex): Added declaration.
- 	* java/lang/Throwable.java: (Throwable): fixed argument to this().
- 
- Fri Oct  2 15:58:23 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/DataInput.java, java/io/InputStream.java: Rewritten.
- 	
- 	* java/io/OutputStream.java (write): Use off and len parameters to
-  	output partial byte array.
- 	
- 	* java/io/BufferedReader.java, java/io/FileReader.java,
-  	java/io/InputStreamReader.java, java/io/LineNumberReader.java,
-  	java/io/OutputStreamWriter.java, java/io/PrintWriter.java,
-  	java/io/Reader.java, java/io/UnsupportedEncodingException.java,
-  	java/io/Writer.java: Added COPYRIGHT-TBD comment.
- 
- 	* include/javaprims.h (java::lang): Added
-  	ExceptionInInitializerError, IllegalStateException,
-  	NoSuchFieldException, and UnsupportedOperationException.
- 
- Fri Oct  2 01:05:38 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natObject.cc (CloneableClass): Is a Class, not a
- 	Class*.
- 
- 	* include/java-array.h (__JArray): Added clone method.
- 	* prims.cc (CloneableClass): New define.
- 	(lookupArray): Initialize array class to indicate that it
- 	implements Cloneable.
- 
- 	* java/lang/Class.h: Removed all ACC_* defines.
- 	* prims.cc: Include Modifier.h.
- 	(_Jv_LookupInterfaceMethod): Use methods in
- 	java.lang.reflect.Modifier, not ACC_ defines.
- 
- 	* java/lang/Class.h (Class): Declare getClasses,
- 	getDeclaredClasses, getDeclaringClass, getModifiers, 
- 	* java/lang/Class.java: Rewrote from scratch.
- 
- 	* include/javaprims.h (java::lang): Added reflect and
- 	reflect::Modifier.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added Modifier.h.
- 
- 	* prims.cc (_Jv_IsInstanceOf): Return false if class is
- 	primitive.
- 
- Fri Oct 2 06:49:00 1998  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/natString.cc (_Jv_StringFindSlot): Use JvAssert
- 	instead of test and abort.
- 
- 	* java/lang/natString.cc (_Jv_NewStringUtf8Const): Add cast to
- 	remove compiler warning.
- 
- Fri Oct  2 12:33:44 1998  Andrew Haley  <aph@korai.cygnus.co.uk>
- 
- 	* java/lang/natDouble.cc: zero terminate string.
- 	* strtod.c: Set errno if no digits are found in fraction.
- 
- Thu Oct  1 11:48:28 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/Modifier.java: New file.
- 
- 	* java/lang/VirtualMachineError.java: Rewrote from scratch.
- 	* java/lang/VerifyError.java: Rewrote from scratch.
- 	* java/lang/UnsatisfiedLinkError.java: Rewrote from scratch.
- 	* java/lang/UnknownError.java: Rewrote from scratch.
- 	* java/lang/StackOverflowError.java: Rewrote from scratch.
- 	* java/lang/OutOfMemoryError.java: Rewrote from scratch.
- 	* java/lang/InternalError.java: Rewrote from scratch.
- 	* java/lang/IllegalAccessError.java: Rewrote from scratch.
- 	* java/lang/ExceptionInInitializerError.java: New file.
- 	* java/lang/Error.java: Rewrote from scratch.
- 	* java/lang/ClassFormatError.java: Rewrote from scratch.
- 	* java/lang/ClassCircularityError.java: Rewrote from scratch.
- 	* java/lang/AbstractMethodError.java: Rewrote from scratch.
- 	* java/lang/NoClassDefFoundError.java: Rewrote from scratch.
- 	* java/lang/NoSuchFieldError.java: Rewrote from scratch.
- 	* java/lang/LinkageError.java: Rewrote from scratch.
- 	* java/lang/IncompatibleClassChangeError.java: Rewrote from
- 	scratch.
- 	* java/lang/NoSuchMethodError.java: Rewrote from scratch.
- 
- 	* java/lang/natObject.cc (_Jv_FinalizeObject): New function.
- 	* java/lang/Object.h (Object): Declare _Jv_FinalizeObject as a
- 	friend.
- 	* include/cni.h (JvAllocObject): Moved from prims.cc.
- 	Include Class.h.
- 	* prims.cc (JvAllocObject): Moved to cni.h.
- 	(_Jv_AllocObject): Use _Jv_FinalizeObject.
- 	(finalize_name): Removed.
- 
- Wed Sep 30 12:09:34 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Class.h (Class): Added size() method.
- 	* prims.cc (_Jv_MonitorEnter): Removed.
- 	(_Jv_MonitorExit): Removed.
- 	* java/lang/Object.h (JvSyncInfo): Removed.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added Cloneable.h,
- 	CloneNotSupportedException.h.
- 	* java/lang/Object.h: Rewrote.
- 	* java/lang/natObject.cc: Rewrote from scratch.
- 	* java/lang/Object.java: Rewrote from scratch.
- 
- 	* java/io/natFile.cc: Conditionally include <dirent.h>.
- 	(list): If no <dirent.h>, always return NULL.
- 	* configure: Rebuilt.
- 	* configure.in: Check for dirent.h.
- 
- 	* prims.cc (lookupArray): Don't use sprintf.
- 
- 	* java/util/Hashtable.java (containsKey): Use `abs' to compute
- 	initial index.
- 	(get): Likewise.
- 	(put): Likewise.
- 	(rehash): Likewise.
- 	(remove): Likewise.
- 
- 	* java/util/Hashtable.java (hsize): Renamed from size to avoid
- 	name conflict with method.
- 
- 	* include/javaprims.h (java::util): Added HashtableEntry.
- 
- Tue Sep 29 16:48:01 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/Hashtable.java: Rewritten.
- 
- Tue Sep 29 00:28:42 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/natFileDescriptor.cc (write): Correctly test `write'
- 	return value.
- 	(write): Likewise.
- 
- 	* java/lang/natThread.cc (join): Fixed assertion to refer to `nt',
- 	not `curr_nt'.
- 
- 	* posix-threads.cc (_Jv_CondWait): Now returns int.
- 	* include/javaprims.h (java::lang): Added
- 	IllegalMonitorStateException.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added IllegalMonitorStateException.h.
- 	* include/no-threads.h (_Jv_CondDestroy): Removed.
- 	(_Jv_MutexDestroy): Removed.
- 	(_Jv_CondWait): Now returns int.
- 	(_Jv_CondNotify): Likewise.  Added mutex argument.
- 	(_Jv_CondNotifyAll): Likewise.
- 	(_Jv_MutexLock): Always succeed.
- 	(_Jv_MutexUnlock): Likewise.
- 	* include/posix-threads.h (_Jv_HaveCondDestroy): Define.
- 	(_Jv_HaveMutexDestroy): Define.
- 	(_Jv_CondNotify): Now returns int.  Added mutex argument.
- 	(_Jv_CondNotifyAll): Likewise.
- 	* include/quick-threads.h (_Jv_CondDestroy): Removed.
- 	(_Jv_MutexDestroy): Removed.
- 	(_Jv_CondWait): Now returns int.
- 	(_Jv_CondNotify): Likewise.  Added mutex argument.
- 	(_Jv_CondNotifyAll): Likewise.
- 	* java/lang/natObject.cc (finalize_sync_info): New function.
- 	(init_mutex): Initialize `init' and register finalizer if
- 	required.
- 	(CHECK): New macro.
- 	(init_mutex): Use it.
- 	(notify): Use it.
- 	(notifyAll): Use it.
- 	(wait): Use it.
- 	(notify): Throw IllegalMonitorStateException on failure.
- 	(notifyAll): Likewise.
- 	(wait): Likewise.  Also, throw InterruptedException if
- 	appropriate.
- 	Include cni.h, Thread.h, IllegalMonitorStateException.h,
- 	InterruptedException.h, IllegalArgumentException.h.
- 	* java/lang/Object.h (struct JvSyncInfo): Added `init' member.
- 
- 	* java/lang/natString.cc: Renamed all `JvPriv' functions.
- 	* java/lang/natRuntime.cc: Renamed all `JvPriv' functions.
- 	* java/lang/Object.h: Renamed all `JvPriv' functions (and types).
- 	* java/lang/natObject.cc: Renamed all `JvPriv' functions.
- 	* java/lang/natThread.cc: Renamed all `JvPriv' functions.
- 	* quick-threads.cc: Renamed all `JvPriv' functions.
- 	* prims.cc: Renamed all `JvPriv' functions.
- 	* posix-threads.cc: Renamed all `JvPriv' functions.
- 	* nogc.cc: Renamed all `JvPriv' functions.
- 	* no-threads.cc: Renamed all `JvPriv' functions.
- 	* boehm.cc: Renamed all `JvPriv' functions.
- 	* include/quick-threads.h: Renamed all `JvPriv' functions.
- 	* include/posix-threads.h: Renamed all `JvPriv' functions.
- 	* include/no-threads.h: Renamed all `JvPriv' functions.
- 	* include/jvm.h: Renamed all `JvPrivXXX' functions to `_Jv_XXX'.
- 
- 	* include/no-threads.h (JvPrivCondWait): Wrote minimal
- 	implementation.
- 	(JvPrivCondNotify): Do nothing.
- 	(JvPrivCondNotifyAll): Do nothing.
- 
- 	* prims.cc (processClass): Handle case where state is
- 	DOING_CONSTINIT.
- 
- 	* java/lang/natFirstThread.cc: Include <stdlib.h>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Fixed sense of --enable-libjava-debug.
- 
- 	* java/lang/natThread.cc (join): Declare `t' outside the loop so
- 	it can be used afterward by the assertion.
- 
- 	* configure: Rebuilt.
- 	* configure.in: When cross-compiling, assume alloca.
- 
- 	* java/lang/natDouble.cc: Updated alloca magic to avoid use of
- 	__builtin_alloca (autoconf docs are wrong here).
- 
- 	* java/io/natFileDescriptor.cc (close): Set fd to -1 before
- 	closing.
- 	(available): Use `FD_ZERO' (typo fix).
- 
- Tue Sep 29 17:43:30 1998  Andrew Haley  <aph@tikka.cygnus.co.uk>
- 
- 	* java/lang/mprec.h, java/lang/mprec.c, java/lang/dtoa.c,
-  	java/lang/natDouble.cc, java/lang/strtod.c: struct _Bigint renamed
- 	struct _Jv_Bigint.
- 	* java/lang/mprec.h, java/lang/mprec.c, java/lang/dtoa.c,
-  	java/lang/natDouble.cc, java/lang/strtod.c: struct _reent renamed
-  	struct _Jv_reent.
- 
- 	* java/lang/natDouble.cc: layout changed to match GNU coding standard.
- 	
- Tue Sep 29 07:57:13 1998  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/natDouble.cc: Declare alloca safely.
- 
- 	* configure, include/config.h.in: Rebuilt.
- 	* configure.in: Add alloca check.
- 
- Tue Sep 29 00:28:42 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natThread.cc (finish_): Hold mutex for interrupt
- 	condition while calling notify.
- 	(join): Remove `curr_nt' from `nt's join list, not vice versa.
- 	(interrupt): Hold mutex for interrupt condition while calling
- 	notify.
- 
- 	* java/lang/natString.cc (init): Allocate and try to read `count'
- 	characters, not `count - offset' characters.
- 
- 	* java/io/ByteArrayInputStream.java (ByteArrayInputStream):
- 	Correctly compute `count'.
- 
- 	* java/lang/Boolean.java (getBoolean): Return false if property
- 	not found.
- 
- 	* java/lang/System.java (setProperties): Set prop_init.
- 
- Mon Sep 28 12:39:25 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/PrintStream.java (println): Use line.separator, not
- 	file.separator.
- 	* java/lang/System.java (out, err): Make both autoflush streams.
- 	* java/io/ByteArrayOutputStream.java (write): Increment `count'.
- 
- 	* include/config.h.in: Rebuilt.
- 	* acconfig.h (HAVE_MEMCPY): Removed.
- 	* configure: Rebuilt.
- 	* configure.in: Never define HAVE_MEMCPY.
- 
- 	* java/lang/natString.cc: Don't include OutOfMemoryError.h or
- 	Class.h.
- 	(_Jv_AllocString): Use JvAllocObject again.
- 	* java/lang/Class.h (thread): New field.
- 	(_Jv_AllocString): No longer a friend.
- 	* prims.cc (processClass): Removed dead code.  Changed to more
- 	closely follow the Java Language Specification.
- 	(processClass): Return early if already at the right state.
- 
- 	* prims.cc (JvNewStringUTF): Removed.
- 	* include/cni.h (JvNewStringUTF): New function.
- 	(_Jv_NewStringUTF): Declare as `extern "C"'.
- 	* java/lang/natString.cc (_Jv_NewStringUTF): New function.
- 
- 	* java/lang/natDouble.cc: Added copyright info and header
- 	comment.  Include <stdlib.h>.
- 	(doubleValueOf): Use alloca, not malloc.  Allocate 3 times as many
- 	bytes as are chars in string.
- 
- Sat Sep 26 00:19:27 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/Hashtable.java (hkeys): Member renamed from to avoid
- 	clash with method.
- 	(hsize): Likewise.
- 
- 	* java/lang/System.java (init_properties): Now native.
- 	* java/lang/natSystem.cc (init_properties): New method.
- 	Include java/util/Properties.h.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added ByteArrayOutputStream.h,
- 	OutputStreamWriter.h, ByteArrayInputStream.h,
- 	InputStreamReader.h, Writer.h, InputStream.h, OutputStream.h,
- 	Reader.h, Vector.h, SecurityManager.h, FilenameFilter.h,
- 	SyncFailedException.h, EOFException.h, FileNotFoundException.h,
- 	Properties.h, Hashtable.h, Dictionary.h.
- 	(CFLAGS): Removed.
- 
- 	* include/javaprims.h (java::io): Added Reader, Writer,
- 	InputStreamReader, OutputStreamWriter,
- 	UnsupportedEncodingException, ByteArrayInputStream,
- 	ByteArrayOutputStream, EOFException, SyncFailedException,
- 	PushbackInputStream.
- 	(java::lang): Added Cloneable.
- 	(java::util): Added NoSuchElementException, VectorEnumeration,
- 	Dictionary, HashtableEnumeration, PropertiesEnumeration.
- 
- 	* java/io/PipedReader.java: New file.
- 
- Fri Sep 25 00:11:25 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natCharacter.cc (getNumericValue): Use `digit' to pick
- 	up A-Z.
- 
- 	* java/io/io-defs.h: Removed.
- 
- 	* java/io/FileInputStream.java (skip): Use FileDescriptor.seek.
- 	(FileInputStream): Use new constructor.  Can throw IOException.
- 
- 	* java/lang/System.java (getProperty): Don't throw
- 	NullPointerException.
- 
- 	* java/io/RandomAccessFile.java: Rewrote from scratch.
- 
- 	* java/io/natFileDescriptor.cc: Include EOFException.h.
- 	(seek): New method.
- 	(length): New method.
- 	(getFilePointer): New method.
- 	(read): New method.
- 	(available): New method.
- 	* java/io/FileDescriptor.java (SET, CUR): New constants.
- 	(seek, length, getFilePointer, read, available): New decls.
- 
- 	* java/io/PipedWriter.java: New file.
- 	* java/io/StringWriter.java: New file.
- 	* java/io/CharArrayWriter.java: New file.
- 	* java/io/CharConversionException.java: New file.
- 	* java/io/BufferedWriter.java: New file.
- 	* java/io/FilterWriter.java: New file.
- 	* java/io/FileWriter.java: New file.
- 
- 	* java/lang/natString.cc: Include ByteArrayOutputStream.h,
- 	OutputStreamWriter.h, NullPointerException.h,
- 	ByteArrayInputStream.h, InputStreamReader.h.
- 	(getBytes): New method.
- 	(init): Throw NullPointerException.
- 	(init): New function.
- 	* java/lang/String.java (getBytes): Added missing decl.
- 	(getBytes): New method.
- 	(String): Added byte[]-based constructors.
- 	(copyValueOf): Wrote.
- 	(init): Declare variant which takes byte array and encoding.
- 	Import java.io.UnsupportedEncodingException.
- 
- 	* java/io/File.java: Rewrote from scratch.
- 	* java/io/natFileDescriptor.cc: Rewrote from scratch.
- 	* java/io/FileDescriptor.java: Rewrote from scratch.
- 	* java/io/FilenameFilter.java: Rewrote from scratch.
- 
- Thu Sep 24 13:30:16 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/SyncFailedException.java: New file.
- 	* java/io/UTFDataFormatException.java: Rewrote from scratch.
- 	* java/io/InterruptedIOException.java: Rewrote from scratch.
- 	* java/io/FileNotFoundException.java: Rewrote from scratch.
- 	* java/io/EOFException.java: Rewrote from scratch.
- 	* java/io/IOException.java: Rewrote from scratch.
- 	* java/io/PrintStream.java: Rewrote from scratch.
- 	* java/io/DataOutputStream.java: Rewrote from scratch.
- 	* java/io/BufferedOutputStream.java: Rewrote from scratch.
- 	* java/io/FilterOutputStream.java: Rewrote from scratch.
- 	* java/io/ByteArrayOutputStream.java: Rewrote from scratch.
- 	* java/io/PipedOutputStream.java: Rewrote from scratch.
- 	* java/io/FileOutputStream.java: Rewrote from scratch.
- 	* java/io/OutputStream.java: Rewrote from scratch.
- 	* java/io/DataOutput.java: Rewrote from scratch.
- 
- Mon Sep 28 22:59:54 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* prims.cc (_Jv_CheckCast):  Add missing ! operator.
- 
- Mon Sep 28 15:50:06 1998  Anthony Green  <green@cygnus.com>
- 
- 	* configure.in: Add --enable-libjava-debug
- 
- 	* Makefile.am (nat_headers): Add java/lang/Float.h and 
- 	java/lang/Double.h
- 
- 	* acconfig.h: Add DEBUG and HAVE_MEMCPY.
- 
- 	* Makefile.in, configure, include/config.h.in: Rebuilt.
- 
- Mon Sep 28 17:05:58 1998  Andrew Haley  <aph@korai.cygnus.co.uk>
- 
- 	* java/lang/Float.java: Rewritten
- 	* java/lang/Double.java: Rewritten
- 	* java/lang/natFloat.cc: toString() added.
- 	* java/lang/natDouble.cc: toString() added.
- 	* java/lang/natDouble.cc: doubleValueOf() added.
- 	* java/lang/dtoa.c, java/lang/mprec.c, java/lang/mprec.h, 
- 	java/lang/strtod.c: added.
- 	* ieeefp.h: __sparc added.
- 	* Makefile.am: java/lang/Float.h and java/lang/Double.h added.
- 	
- Thu Sep 24 13:30:16 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/javaprims.h (java::lang): Added
- 	CloneNotSupportedException.
- 
- 	* java/lang/Object.java (clone): No longer native.  Implemented.
- 	* java/lang/natObject.cc (clone): Removed.
- 
- Wed Sep 23 12:03:38 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc: Don't make definitions `extern "C"'.
- 	(_Jv_RegisterClass): Renamed from registerClass.
- 	* include/jvm.h (_Jv_ThrowBadArrayIndex): Declare.
- 	(_Jv_NewArray): Likewise.
- 	(_Jv_NewMultiArray): Likewise.
- 	(_Jv_CheckCast): Likewise.
- 	(_Jv_LookupInterfaceMethod): Likewise.
- 	(_Jv_CheckArrayStore): Likewise.
- 	(_Jv_RegisterClass): Likewise.
- 
- 	* acconfig.h (HAVE_FMOD, HAVE_MEMCPY): Removed.
- 	* configure: Rebuilt.
- 	* configure.in: Don't check for fmod; it is provided by the fdlibm
- 	code.
- 	* prims.cc (fmod): Removed.
- 
- 	* java/lang/natString.cc (charAt): Use _Jv_uint.
- 	* java/lang/Class.h (class JvField): Use _Jv_ushort.
- 	* prims.cc (HASH_CHARS): Use _Jv_ushort.
- 	(equalUtf8Consts): Likewise.
- 	(internalAddClass): Use _Jv_uint.
- 	(processClass): Likewise.
- 	* include/javaprims.h (_Jv_ushort): Renamed from uint16.
- 	(_Jv_uint): Renamed from uint32.
- 	(struct _Jv_Utf8Const): Changed members to use new type names.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Don't check for memcpy.  Require memmove and a way
- 	to get the time.
- 	* java/lang/natSystem.cc (arraycopy): Removed dead code, and
- 	#error.
- 	(currentTimeMillis): Don't use #error.
- 
- Tue Sep 22 18:00:16 1998  Andrew Haley  <aph@korai.cygnus.co.uk>
- 
- 	* java/lang/Math.java: static member random renamed to random_ to
-  	avoid conflict with member function of the same name.
- 	* include/javaprims.h: java.util.Random added.
- 
- Tue Sep 22 13:53:14 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-chartables.h: Regenerated.
- 	* chartables.pl: End COMPACT_CHARACTER #if after fast tables
- 	printed.
- 
- Tue Sep 22 17:17:52 1998  Andrew Haley  <aph@tikka.cygnus.co.uk>
- 
- 	* java/lang/Math.java: Rewritten.
- 	* java/lang/natMath.cc: New file.
- 	* Files added from fdlibm:
- 	  java/lang/e_acos.c, java/lang/k_sin.c, java/lang/sf_floor.c,
- 	  java/lang/e_asin.c, java/lang/k_tan.c, java/lang/sf_rint.c,
- 	  java/lang/e_atan2.c, java/lang/s_atan.c, java/lang/w_acos.c,
- 	  java/lang/e_exp.c, java/lang/s_ceil.c, java/lang/w_asin.c,
- 	  java/lang/e_fmod.c, java/lang/s_copysign.c, java/lang/w_atan2.c,
- 	  java/lang/e_log.c, java/lang/s_cos.c, java/lang/w_exp.c,
- 	  java/lang/e_pow.c, java/lang/s_fabs.c, java/lang/w_fmod.c,
- 	  java/lang/e_rem_pio2.c, java/lang/s_floor.c, java/lang/w_log.c,
- 	  java/lang/e_remainder.c, java/lang/s_rint.c, java/lang/w_pow.c,
- 	  java/lang/e_scalb.c, java/lang/s_scalbn.c, java/lang/w_remainder.c,
- 	  java/lang/e_sqrt.c, java/lang/s_sin.c, java/lang/w_sqrt.c,
- 	  java/lang/ef_fmod.c, java/lang/s_tan.c, java/lang/wf_fmod.c,
- 	  java/lang/k_cos.c, java/lang/sf_ceil.c,
- 	  java/lang/k_rem_pio2.c, java/lang/sf_fabs.c,
- 	  java/lang/ieeefp.h, java/lang/fdlibm.h
- 	* Makefile.am: rules added for compiling C files from fdlibm.
-   	
- Mon Sep 21 15:40:58 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* chartables.pl: Minor documentation fixes.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Fixed --help output for --enable-fast-character.
- 
- Thu Sep 17 11:03:27 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Recognize --enable-fast-character.
- 	* acconfig.h (COMPACT_CHARACTER): New define.
- 	* include/config.h.in: Rebuilt.
- 	* include/java-chartables.h: New file.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_files): Added natCharacter.o.
- 	* java/lang/natCharacter.cc: New file.
- 	* chartables.pl (set_attribute): New function.
- 	(@attributes, @second_attributes): New globals.
- 	($ROMAN_START, $ROMAN_END): Likewise.
- 	(process_char): Call set_attribute when required.
- 	(print_char): Just print hex value.
- 	(print_block): Generate C++ syntax.
- 	(print_numerics): Likewise.
- 	(print_single_map): Likewise.
- 	(print_all_block): Likewise.
- 	(print_case_table): Likewise.
- 	(print_fast_tables): New function.
- 	Generate C++ code suitable for a header file.
- 	* java/lang/Character.java (table_search): Removed.
- 	(digit_value): Now native.
- 	(getNumericValue): Likewise.
- 	(getType): Likewise.
- 	Removed all automatically-generated tables.
- 	(Tamil_Digit_One): Removed.
- 	(isSpaceChar): Now native.
- 	(isTitleCase): Likewise.
- 	(isLowerCase): Likewise.
- 	(isUpperCase): Likewise.
- 	(toLowerCase): Likewise.
- 	(toTitleCase): Likewise.
- 	(toUpperCase): Likewise.
- 	(isDefined): Fixed sense of test.
- 
- Wed Sep 16 12:00:19 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natString.cc (equalsIgnoreCase): Removed obsolete
- 	FIXME comment.
- 	(regionMatches): Likewise.
- 
- Tue Sep 15 14:35:12 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (_Jv_AllocObject): Call _Jv_InitClass on the class.
- 
- 	* java/lang/Class.h (Object): For now, declare _Jv_AllocString as
- 	a friend.
- 	* java/lang/natString.cc (_Jv_AllocString): For now, don't call
- 	_Jv_AllocObject.
- 
- 	* java/lang/natString.cc (toUpperCase): Declare `ch' as a jchar,
- 	not a char.
- 
- 	* java/lang/natClass.cc (isAssignableFrom): Handle arrays.
- 
- Fri Sep 11 14:01:08 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (instanceof_class): Removed.
- 	(instanceof_array): Likewise.
- 	(instanceof): Likewise.
- 	(_Jv_IsInstanceOf): Use Class::isAssignableFrom.
- 	(_Jv_CheckCast): Likewise.
- 	* java/lang/natClass.cc (isAssignableFrom): New method.
- 	* java/lang/Class.java (isAssignableFrom): Now native.
- 
- 	* include/cni.h (JvThrow): Use `extern inline'.
- 	(JvAllocObject): Likewise.
- 	(JvInitClass): Likewise.
- 
- 	* java/lang/natSystem.cc (arraycopy): Only check class of source
- 	object if not null.
- 
- 	* prims.cc (_Jv_CheckArrayStore): Wrote.
- 	(_Jv_MonitorEnter): Prefer `JvThrow'.
- 	Include ArrayStoreException.h.
- 	(_Jv_CheckCast): Indentation cleanup.
- 
- Thu Sep 10 18:59:29 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* chartables.pl: New file.
- 	* java/lang/Character.java: Rewrote from scratch.
- 
- Fri Sep 18 18:15:58 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/lang/ArithmeticException.java,
-  	java/lang/ArrayIndexOutOfBoundsException.java,
-  	java/lang/ArrayStoreException.java,
-  	java/lang/ClassCastException.java,
-  	java/lang/ClassNotFoundException.java,
-  	java/lang/CloneNotSupportedException.java,
-  	java/lang/Exception.java, java/lang/IllegalAccessException.java,
-  	java/lang/IllegalArgumentException.java,
-  	java/lang/IllegalMonitorStateException.java,
-  	java/lang/IllegalThreadStateException.java,
-  	java/lang/IndexOutOfBoundsException.java,
-  	java/lang/InstantiationException.java,
-  	java/lang/InterruptedException.java,
-  	java/lang/NegativeArraySizeException.java,
-  	java/lang/NoSuchMethodException.java,
-  	java/lang/NullPointerException.java,
-  	java/lang/NumberFormatException.java,
-  	java/lang/RuntimeException.java, java/lang/SecurityException.java,
-  	java/lang/StringIndexOutOfBoundsException.java: Rewritten.
- 
- 	* java/lang/IllegalStateException.java,
-  	java/lang/NoSuchFieldException.java,
-  	java/lang/UnsupportedOperationException.java: Created.
- 
- Fri Sep 18 15:01:42 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/lang/Integer.java, java/lang/Long.java: Rewritten.
- 	* java/lang/Byte.java, java/lang/Short.java (decode): Uncommented.
- 
- Fri Sep 11 16:49:19 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* prims.cc (JvRunMain):  No longer need to call _Jv_InitClass.
- 
- Thu Sep 10 12:23:55 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* Makefile.am (nat_headers): Added StringIndexOutOfBoundsException.h.
- 
- 	* Makefile.in: Rebuilt.
- 
- 	* include/javaprims.h (java::lang): Added
- 	StringIndexOutOfBoundsException.
- 
- 	* java/lang/String.java: Added header comment and FIXME comment for 
- 	missing constructors/methods.
- 	(endsWith): Adjusted offset into string to look at just the last chars.
- 	Commented out undocumented method.
- 
- 	* java/lang/natString.cc: Added includes for
- 	ArrayIndexOutOfBoundsException.h & StringIndexOutOfBoundsException.h.
- 	(String::init): Throw StringIndexOutOfBoundsException.
- 	(String::charAt): Throw StringIndexOutOfBoundsException.
- 	(String::substring): Throw StringIndexOutOfBoundsException.
- 	(String::getChars): Throw ArrayIndexOutOfBoundsException.
- 	(String::getBytes): Throw ArrayIndexOutOfBoundsException.
- 	(String::compareTo): Return difference/offset between chars/strings.
- 
- Tue Sep  8 13:22:33 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/lang/Boolean.java (TYPE): Added comment.
- 	
-   	* java/lang/Byte.java (decode): Added - commented out until dependent
-  	code for Integer is written.
- 	(compareTo): JDK 1.2 methods written.
- 	(hashCode): Added comment to note that values have been verified.
- 	
- 	* java/lang/Short.java (decode): Added - commented out until dependent
- 	code for Integer is written.
- 	(compareTo): JDK 1.2 methods written.
- 	(hashCode): Added comment to note that values have been verified.
- 
- 	* java/lang/Comparable.java: Created - JDK 1.2 interface.
- 
- Fri Sep  4 10:36:35 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/javaprims.h (java::lang): Added VirtualMachineError,
- 	OutOfMemoryError.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added OutOfMemoryError.h,
- 	VirtualMachineError.h.
- 	* prims.cc (_Jv_NewPrimArray): Throw OutOfMemoryError.
- 	(lookupArray): Likewise.
- 	(makeUtf8Const): Likewise.
- 	(_Jv_AllocObject): Likewise.
- 	(_Jv_NewObjectArray): Likewise.
- 	Include OutOfMemoryError.h.
- 
- 	* java/io/natFileDescriptor.cc (newstr): Removed.  Changed callers
- 	to use JvNewStringLatin1.
- 
- 	* java/io/io-defs.h: Include java/lang/IOException.h.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added
- 	ArrayIndexOutOfBoundsException.h,
- 	ClassFormatError.h,ClassNotFoundException.h,
- 	ClassCircularityError.h, ClassCastException.h,
- 	IncompatibleClassChangeError.h, AbstractMethodError.h,
- 	IllegalAccessError.h, LinkageError.h, Error.h,
- 	NegativeArraySizeException.h, IOException.h.
- 	* include/cni.h (SignalError): Removed declaration.
- 	* java/util/natDate.cc (setTime): Use JvFail, not sorry.
- 	* java/lang/natObject.cc (clone): Use JvFail, not sorry.
- 	* java/lang/natClass.cc (getInterfaces): Use JvFail, not sorry.
- 	(newInstance): Likewise.
- 	(forName): Likewise.
- 	* java/io/natFileDescriptor.cc (open_read_write): Use JvFail, not
- 	sorry.
- 	(read): Use JvThrow, not SignalError.
- 	(read): Likewise.
- 	(write): Likewise.
- 	(skip): Likewise.
- 	(close): Likewise.
- 	(open_read): Likewise.
- 	(open_write): Likewise.
- 	(ftell): Likewise.
- 	(fseek): Likewise.
- 	(newstr): New function.
- 	* java/io/natFile.cc (isDirectoryUnchecked): Use JvFail, not
- 	sorry.
- 	(lastModifiedUnchecked): Likewise.
- 	(lengthUnchecked): Likewise.
- 	* include/javaprims.h (sorry): Removed declaration.
- 	(java::lang): Added ArrayIndexOutOfBoundsException, LinkageError,
- 	ClassFormatError, ClassNotFoundException, ClassCircularityError,
- 	ClassCastException, IncompatibleClassChangeError,
- 	AbstractMethodError, IllegalAccessError, NegativeArraySizeException.
- 	* prims.cc (instanceof_array): Use JvFail, not sorry.
- 	(sorry): Removed.
- 	Include ArrayIndexOutOfBoundsException.h,
- 	ClassFormatError.h,ClassNotFoundException.h,
- 	ClassCircularityError.h, ClassCastException.h,
- 	IncompatibleClassChangeError.h, AbstractMethodError.h,
- 	IllegalAccessError.h, NegativeArraySizeException.h.
- 	(_Jv_ThrowBadArrayIndex): Implemented.
- 	(JvNewStringUTF): Use JvFail, not sorry.
- 	(_Jv_FindClass): Likewise.
- 	(_Jv_NewArray): Likewise.
- 	(throwException): Removed.
- 	(getClass): Use JvThrow.
- 	(processClass): Likewise.
- 	(_Jv_NewObjectArray): Likewise.
- 	(_Jv_NewMultiArray): Likewise.
- 	(_Jv_CheckCast): Likewise.
- 	(_Jv_LookupInterfaceMethod): Likewise.
- 	(SignalError): Removed.
- 	(getClass): Use _Jv_NewStringUtf8Const to create String.
- 
- 	* java/lang/natSystem.cc (arraycopy): Throw
- 	ArrayIndexOutOfBoundsException, not IndexOutOfBoundsException.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (GCJH): Renamed.  Now use `gcjh'.  Changed all
- 	users.
- 	* include/java-array.h: Mention gcjh, not gjavah.
- 
- 	* java/io/natFile.cc (existsUnchecked): Use JvGetStringUTFRegion.
- 	(canReadUnchecked): Likewise.
- 	(canWriteUnchecked): Likewise.
- 	(isFileUnchecked): Likewise.
- 	* java/io/natFileDescriptor.cc: Don't include cni.h.
- 
- 	* java/lang/Thread.java (run__): Declare.
- 	* java/lang/natThread.cc (run__): New method, to avoid compiler
- 	warning.
- 	(start): Use run__, not run_.
- 
- 	* java/io/io-defs.h: Include cni.h and jvm.h.
- 
- Thu Sep  3 18:20:08 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	Re-implement java.lang.String, using "COMPACT_STRINGS" representation.
- 	* prims.cc (JvAllocString, JvNewString, JvNewStringlatin1):  Moved
- 	to natString.cc (with suitable renaming, inlines etc).
- 	(javaString2CString):  Removed.  Subsumed by _Jv_GetStringUTFRegion.
- 	* java/lang/Class.h:  Renamed Utf8Const to _Jv_Utf8Const.
- 	* java/lang/String.h:  Removed - now generated using gjavah.
- 	* java/lang/String.java:  Re-written from scratch. Many native methods.
- 	* java/lang/natDouble.cc, java/util/natDate.cc:  #include <cni.h>.
- 	* java/lang/natString.cc:  Many functions re-written for "compact
-  	strings" representation, or native java.lang.String methods added.
-  	(Utf8Const2JavaString):  Renamed to _Jv_NewStringUtf8Const.
- 	(_Jv_GetStringUTFLength, _Jv_GetStringUTFRegion):  New methods.
- 	* java/lang/natClass.cc (getName):  Use new _Jv_NewStringUtf8Const.
- 	* java/io/natFileDescriptor.cc:  Use new JvGetStringUTFRegion.
- 	* include/cni.h:  Add inline method.
- 	* include/java-array.h (jobjectArrayjchar):  gjavah bug work-around.
- 	* include/javaprims.h:  Moved some stuff frm String.h.
- 	* include/jvm.h (UTF8_GET, Utf8Const, StringClass):  Moved here.
- 	* Makefile.am (nat_header):  Added Character.h and String.h.
- 	(String.h):  Add new rule.
- 
- Thu Sep  3 10:28:16 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* no-threads.cc: Include config.h, cni.h, jvm.h.  Don't include
- 	java-assert.h.
- 	* posix-threads.cc: Include cni.h, jvm.h.
- 	* quick-threads.cc: Include cni.h, jvm.h.
- 	* nogc.cc: Include cni.h, not javaprims.h.
- 	* java/lang/natFirstThread.cc: Include cni.h, jvm.h.
- 	* java/lang/natThread.cc: Rearranged #include ordering.  Don't
- 	include java-assert.h.
- 	* java/lang/natSystem.cc: Include cni.h.  Don't include
- 	java-assert.h.
- 	* java/lang/natRuntime.cc: Include cni.h.  Don't include
- 	java-assert.h.
- 	* prims.cc: Rearranged #include ordering.  Don't include
- 	java-array.h or java-assert.h.
- 	* boehm.cc: Include config.h, cni.h.
- 	* exception.cc: Include config.h, cni.h.
- 	* include/jvm.h: Include java-assert.h.
- 	* include/cni.h: Include java/lang/Object.h.  Don't include
- 	java-threads.h or java-array.h.
- 
- Thu Sep  3 16:03:08 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/lang/Boolean.java: Rewritten.
- 
- Thu Sep  3 10:28:16 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natFirstThread.cc (main_func): New typedef.
- 	(run): Use main_func, not JvPrivThreadStartFunc.
- 	* include/no-threads.h (JvPrivThreadStartFunc): Use correct
- 	argument type.
- 	* include/posix-threads.h (JvPrivThreadStartFunc): Use correct
- 	argument type.
- 	* include/quick-threads.h (JvPrivThreadStartFunc): Use correct
- 	argument type.
- 
- 	Can't throw Java exceptions with C++ `throw':
- 	* quick-threads.cc (qthrow): Use _Jv_Throw, not throw.
- 	* java/lang/natThread.cc (join): Use _Jv_Throw, not throw.
- 	(setPriority): Likewise.
- 	(sleep): Likewise.
- 	(start): Likewise.
- 	(stop): Likewise.
- 	* java/lang/natSystem.cc (arraycopy): Use _Jv_Throw, not throw.
- 	* prims.cc (_Jv_MonitorEnter): Use _Jv_Throw, not throw.
- 
- 	Can't catch Java exceptions from C++:
- 	* java/lang/natThread.cc (finish_): New method.
- 	(run_): Removed.
- 	* java/lang/Thread.java (run_): Rewrote in Java.
- 	(finish_): New native method.
- 
- Wed Sep  2 17:30:39 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/lang/Cloneable.java, java/lang/Number.java: Rewritten.
- 
- 	* include/javaprims.h (java::io): Added Serializable.
- 
- Wed Sep  2 15:22:00 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/EmptyStackException.java,
-  	java/util/NoSuchElementException.java: Rewritten.
- 	
-   	* java/util/ConcurrentModificationException.java,
-  	java/util/MissingResourceException.java,
-  	java/util/TooManyListenersException.java: Created.
- 
- Wed Sep  2 13:36:57 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/cni.h (JvThrow): New function.
- 	* include/javaprims.h (_Jv_Throw): Declare.
- 
- Wed Sep  2 14:07:48 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/Observable.java: Rewritten.
- 
- Wed Sep  2 13:36:57 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (_Jv_MonitorExit): Assert that object is non-null.
- 	(_Jv_MonitorEnter): Throw NullPointerException if object is null.
- 	Include NullPointerException.h.
- 
- Tue Sep  1 12:07:35 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natSystem.cc (arraycopy): Removed overlapping-copy
- 	assignability checks.  Don't bother using memcpy.
- 
- 	* quick-threads.cc (JvPrivThreadStart): Don't call coop_start.
- 	(started): Removed.
- 	* include/quick-threads.h (JvPrivThreadWait): New function.
- 	* include/no-threads.h (JvPrivThreadWait): New function.
- 	* include/posix-threads.h (JvPrivThreadWait): New function.
- 	* prims.cc (JvRunMain): Call JvPrivThreadWait.
- 
- 	* java/lang/natSystem.cc (arraycopy): Do nothing if count is 0.
- 
- 	* java/lang/natSystem.cc (arraycopy): Multiply both src and dst
- 	offsets by size of type that is being copied.
- 
- 	* java/lang/natThread.cc (start): Don't pass `object' argument to
- 	JvPrivThreadStart.
- 	* no-threads.cc (JvPrivThreadStart): Removed `object' argument.
- 	* posix-threads.cc (JvPrivThreadStart): Removed `object'
- 	argument.
- 	* quick-threads.cc (JvPrivThreadStart): Removed `object' argument;
- 	always pass thread as object.
- 	* include/quick-threads.h, include/posix-threads.h,
- 	include/no-threads.h (JvPrivThreadStart): Removed `object'
- 	argument.
- 
- Mon Aug 31 19:11:53 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/Dictionary.java: Rewritten.
- 
- Mon Aug 31 14:35:55 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/quick-threads.h (JvPrivThreadInitData): Use 0, not NULL.
- 	(JvPrivThreadDestroy): Likewise.
- 	
- Mon Aug 31 12:56:01 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/lang/natRuntime.cc (exit): Changed final call to ::exit.
- 
- Thu Aug 27 12:24:40 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natSystem.cc: Rewrote from scratch.
- 	* java/lang/System.java: Rewrote from scratch.
- 	* java/lang/Class.h (Class): Declare isAssignableFrom.
- 	* include/javaprims.h (java::lang): Added ArrayStoreException,
- 	IndexOutOfBoundsException.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added ArrayStoreException.h,
- 	IndexOutOfBoundsException.h.
- 	* java/lang/natObject.cc (hashCode): Use _Jv_HashCode.
- 	* include/jvm.h (_Jv_HashCode): New function.
- 
- 	* java/lang/natThread.cc (suspend): Call checkAccess.
- 	(resume): Likewise.
- 	* java/lang/Thread.java (setDaemon): Call checkAccess.
- 
- Thu Aug 27 12:24:40 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Runtime.java: Rewrote from scratch.
- 	* java/lang/natRuntime.cc: Rewrote from scratch.
- 
- 	* nogc.cc (JvPrivGCTotalMemory): New function.
- 	(JvPrivGCFreeMemory): Likewise.
- 	(total): New global.
- 	(JvPrivAllocObj): Increment total.
- 	(JvPrivAllocArray): Likewise.
- 	(JvPrivAllocBytes): Likewise.
- 	* include/jvm.h: Declare JvPrivGCTotalMemory, JvPrivGCFreeMemory.
- 	* boehm.cc (JvPrivGCTotalMemory): New function.
- 	(sum_blocks): Likewise.
- 	(JvPrivGCFreeMemory): Likewise.
- 
- Wed Aug 26 12:30:32 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/javaprims.h (java::lang): Added FirstThread.
- 	* java/lang/natFirstThread.cc: New file.
- 	* java/lang/FirstThread.java: New file.
- 	* prims.cc (main_signature): Removed.
- 	(main_name): Removed.
- 	#include FirstThread.h.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (TFRIEND): Removed.
- 	(java/lang/Thread.h): Likewise.
- 	(FTFRIEND): New macro.
- 	(java/lang/FirstThread.h): New target.
- 	(nat_files): Added natFirstThread.o.
- 	(nat_headers): Added FirstThread.h.
- 	* include/jvm.h (_Jv_StartFirstThread): Don't declare.
- 	* java/lang/natThread.cc (_Jv_StartFirstThread): Removed.
- 
- 	* java/lang/Thread.java (setName): Throw IllegalArgumentException
- 	if name is null.
- 	(Thread): Likewise.
- 
- 	* java/lang/natThread.cc (start): Synchronize the thread.
- 	(stop): Synchronize the thread.
- 
- 	* java/lang/ThreadDeath.java: Rewrote from scratch.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (TGFRIEND): New macro.
- 	(java/lang/ThreadGroup.h): New target.
- 	($(nat_files) prims.o boehm.o nogc.o): Native files depend on the
- 	native headers.
- 	($(javao_files) $(nat_files) prims.o boehm.o nogc.o): Removed.
- 
- 	* nogc.cc: Include config.h.
- 
- 	* java/lang/ThreadGroup.java: Rewrote from scratch.
- 
- Tue Aug 25 00:12:54 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Thread.java (checkAccess): Only call in to security
- 	manager if it exists.
- 	(Thread): Don't check access when creating the first thread.  Add
- 	this thread to the appropriate ThreadGroup.
- 
- 	* java/lang/natThread.cc (run_): Call uncaughtException method on
- 	the ThreadGroup.
- 
- 	* java/lang/Runnable.java: Rewrote from scratch.
- 	* java/lang/Thread.java: Updated copyright comment to correct
- 	form.
- 
- Wed Aug 26 15:16:18 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/Random.java: Rewritten.
- 
- Wed Aug 26 14:25:39 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* prims.cc (_Jv_NewMultiArray): Need one more slot to store
-  	trailing 0 in array[].
- 
- Wed Aug 26 12:21:06 1998  Anthony Green  <green@cygnus.com>
- 
- 	* Makefile.am (AM_MAKEFLAGS): Remove RUNTEST, EXPECT, 
- 	and RUNTESTFLAGS from AM_MAKEFLAGS.
- 	(SUBDIRS): Conditionally include testsuite.
- 	* Makefile.in: Rebuilt.
- 
- Tue Aug 25 18:14:53 1998  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/Object.h: Include java-assert.h.
- 
- Tue Aug 25 17:33:57 1998  Anthony Green  <green@cygnus.com>
- 
- 	* Makefile.am: Add testsuite directory.
- 	* configure.in: Build testsuite/Makefile.
- 	* Makefile.in, configure: Rebuilt.
- 	
- Tue Aug 25 00:12:54 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (JvRunMain): Use _Jv_StartFirstThread.
- 	* include/jvm.h (_Jv_StartFirstThread): Declare.
- 
- 	* include/javaprims.h (java::lang): Added Exception,
- 	RuntimeException.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added NullPointerException.h,
- 	InterruptedException.h, IllegalArgumentException.h, Exception.h,
- 	Throwable.h, RuntimeException.h, IllegalThreadStateException.h.
- 	(java/lang/Thread.h): New target.
- 	(TFRIEND): New macro
- 
- 	* include/java-assert.h (JvFail): Use 0 and not NULL.
- 
- 	* posix-threads.cc (JvPrivThreadStart): Use getPriority() method
- 	instead of assuming we are a friend of Thread.
- 	* quick-threads.cc (JvPrivThreadStart): Use isDaemon() method
- 	instead of assuming we are a friend of Thread.
- 
- Mon Aug 24 15:58:36 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natThread.cc: Rewrote from scratch.
- 	* java/lang/Thread.java: Rewrote from scratch.
- 	* prims.cc (JvRunMain): Use new Thread constructor.
- 	* include/javaprims.h (java::lang): Added InterruptedException.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added java/lang/Thread.h.
- 	* java/lang/Thread.h: Removed.
- 	* quick-threads.cc (JvPrivThreadStart): Added `data' argument.
- 	* no-threads.cc (JvPrivThreadStart): Added JvPrivThread_t
- 	argument.
- 	* posix-threads.cc (JvPrivThreadJoin): Removed.
- 	(JvPrivThreadInitData): Don't initialize join_mutex or join_cond.
- 	(really_start): Don't notify join_cond.
- 	(JvPrivThreadStart): Added `data' argument.
- 	* include/no-threads.h (JvPrivThreadInterrupt): Removed.
- 	(JvPrivThreadJoin): Likewise.
- 	Use JvFail instead of sorry.
- 	(JvPrivThreadSuspend): Removed.
- 	(JvPrivThreadResume): Removed.
- 	* include/quick-threads.h (JvPrivThreadInterrupt): Removed.
- 	(JvPrivThreadJoin): Likewise.
- 	(JvPrivThreadSuspend): Use JvFail.
- 	(JvPrivThreadResume): Likewise.
- 	(JvPrivThreadSuspend): Removed.
- 	(JvPrivThreadResume): Likewise.
- 	* include/posix-threads.h (JvPrivThreadInterrupt): Removed.
- 	(JvPrivThread_t): Removed join_mutex, join_cond.
- 	Use JvFail instead of sorry.
- 	(JvPrivThreadSuspend): Removed.
- 	(JvPrivThreadResume): Likewise.
- 
- Tue Aug 25 12:50:13 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/Observer.java: Rewritten
- 	* java/util/Enumeration.java: Rewritten
- 
- Tue Aug 25 11:33:54 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/StringTokenizer.java: Rewritten
- 	* java/util/Stack.java: Added COPYRIGHT-TBD comment
- 	* java/util/Vector.java: Added COPYRIGHT-TBD comment
- 	* java/io/Serializable.java: Added COPYRIGHT-TBD comment
- 	
- Fri Aug 21 10:14:22 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-assert.h (JvFail): Call _Jv_Abort even when DEBUG
-  	not defined.
- 
- 	* no-threads.cc (JvPrivThreadStart): Use JvAssert.
- 	Include java-assert.h.
- 	* include/java-assert.h: New file.
- 	* prims.cc (_Jv_Abort): New function.
- 	Include java-assert.h, not assert.h.
- 	(_Jv_MonitorExit): Use JvAssert.
- 	(resolveConstants): Likewise.
- 	(processClass): Likewise.
- 	(JvRunMain): Assert that method is found.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Check for test subdir.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (SUBDIRS): Conditional on TESTSUBDIR.
- 
- 	* prims.cc (JvRunMain): Use NORM_PRIORITY.
- 	* java/lang/Thread.h (Thread): Added NORM_PRIORITY.
- 
- 	* prims.cc (resolveConstants): Removed unused variables.
- 	(processClass): Likewise.
- 
- 	* include/quick-threads.h (JvPrivThreadCurrent): Use
- 	coop_getspecific.
- 	* quick-threads.cc (destroy_data): New function.
- 	(JvPrivInitThreads): Create key.
- 	(JvPrivThreadKey): New global.
- 	(JvPrivThreadStart): Use coop_setspecific.
- 
- 	* include/quick-threads.h, include/posix-threads.h,
- 	include/no-threads.h, no-threads.cc, quick-threads.cc,
- 	posix-threads.cc, nogc.cc, boehm.cc: Added copyright comment.
- 
- Thu Aug 20 10:57:30 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/no-threads.h (JvPrivThreadInitData): Don't set
- 	JvPrivOnlyThread.
- 
- 	* include/quick-threads.h (JvPrivCondWait): coop function now
- 	takes microseconds.
- 	(JvPrivThreadJoin): Likewise.
- 
- 	* java/lang/Thread.h (Thread): Updated declaration of
- 	JvPrivThreadStart.
- 	* include/quick-threads.h, include/posix-threads.h: Updated
- 	declaration of JvPrivThreadStart.
- 	* include/no-threads.h (JvPrivThreadStart): Changed definition
- 	into declaration.
- 	* no-threads.cc (JvPrivThreadStart): Removed `data' argument.
- 	* quick-threads.cc (JvPrivThreadStart): Removed `data' argument.
- 	* posix-threads.cc (JvPrivThreadStart): Removed `data' argument.
- 
- Wed Aug 19 14:53:59 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* quick-threads.cc (qthrow): New function.
- 	(JvPrivInitThreads): New function.
- 	(started): New global.
- 	(JvPrivThreadStart): Call coop_start if required.
- 	* include/quick-threads.h (JvPrivThreadCancel): Implement.
- 	(JvPrivThreadDestroy): Likewise.
- 	(JvPrivInitThreads): Removed.
- 	* include/posix-threads.h (JvPrivThreadCancel): Added error
- 	argument.
- 	* java/lang/natThread.cc (stop_): Pass exception to
- 	JvPrivThreadCancel.
- 
- Tue Aug 18 12:58:22 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/javaprims.h (java::lang): Added
- 	IllegalArgumentException, IllegalThreadStateException, Math,
- 	NullPointerException, ThreadDeath.
- 	(java::util): Added Enumeration.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added java/lang/ThreadGroup.h.
- 
- 	* java/lang/ThreadGroup.java (ThreadGroup): No-args constructor
- 	now public.
- 	(threadsv): Renamed from threads to avoid clash in C++ header.
- 	(groupsv): Likewise.
- 	* include/no-threads.h (JvPrivThreadStart): Removed.
- 	* no-threads.cc (JvPrivThreadStart): New function.
- 	* java/lang/Thread.java (Thread): New constructor for internal use.
- 	* java/lang/Thread.h (Thread): Declare JvRunMain as friend.
- 	(Thread): Declare constructor.
- 	* prims.cc (JvRunMain): Create the initial Thread and
- 	ThreadGroup.
- 	Include <java/lang/Thread.h> and <java/lang/ThreadGroup.h>.
- 	* posix-threads.cc (JvPrivThreadStart): Added `thread' argument.
- 	Removed `daemon' argument.
- 
- 	* prims.cc (JvRunMain): Call _Jv_InitializeSyncMutex.
- 	* java/lang/Object.h (Object): Declare _Jv_InitializeSyncMutex as
- 	a friend.
- 	* java/lang/natObject.cc (_Jv_InitializeSyncMutex): New function.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (INCLUDES): Include THREADINCS.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Recognize `qt' as a threads package.
- 
- Thu Aug 20 12:42:32 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/Stack.java (pop): Null out topmost node for robustness.
- 
- Thu Aug 20 12:30:30 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/Stack.java: Rewritten.
- 	* java/util/Vector.java (isEmpty): Simplified expression.
- 
- Wed Aug 19 18:02:19 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* prims.cc (_Jv_NewObjectArray): Renamed from JvNewObjectArray.
- 	(soft_anewarray): Removed, _Jv_NewObjectArray used instead.
- 
- 	* include/java-array.h (JvNewObjectArray): Created inline to
-  	_Jv_NewObjectArray.
- 
- 	* java/lang/Class.h (_Jv_NewObjectArray): Renamed from
-  	JvNewObjectArray.
- 	
- Wed Aug 19 14:12:02 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/Vector.java: Rewritten.
- 	* java/io/Serializable.java: Created.
- 
- Fri Aug 14 10:31:54 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Float.java (NEGATIVE_INFINITY, POSITIVE_INFINITY):
- 	Infinity is 1/0, not 1/1.
- 
- 	* boehm.cc (JvPrivAllocArray): Use GC_generic_malloc.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Removed duplicate AC_ARG_WITH.
- 
- Thu Aug 13 14:51:47 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* prims.cc (_Jv_ThrowBadArrayIndex): Renamed from
-  	soft_badarrayindex.
- 	(_Jv_InitClass): Renamed from soft_initialise_class.
- 	(_Jv_NewMultiArray): Renamed from soft_multianewarray.
- 	(_Jv_CheckCast): Renamed from soft_checkcast.
- 	(_Jv_LookupInterfaceMethod): Renamed from soft_lookupinterfacemethod.
- 	(_Jv_CheckArrayStore): Renamed from soft_checkarraystore.
- 	(JvRunMain): Call JvInitClass instead of soft_initialise_class.
-   	* include/cni.h (JvInitClass): New function.
- 	(_Jv_InitClass): Renamed from soft_initialise_class.
- 
- Wed Aug 12 10:07:04 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in (CXX): Don't set.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (AM_CXXFLAGS): New macro.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am ($(javao_files) $(nat_files) prims.o boehm.o
- 	nogc.o): New target.
- 
- 	* boehm.cc (mark_obj): Update PUSH_CONTENTS call for new Boehm
- 	GC.
- 	(mark_array): Likewise.
- 
- Tue Aug 11 11:44:53 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* java/lang/Class.h (JvMethod):  Removed some unused fields.
- 	(JvField.info):  Removed unused idx union variant.
- 
- Mon Aug 10 15:00:14 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (makeUtf8Const): Mask off high bits of hash value to
- 	match compiler.
- 
- Mon Aug  3 16:13:54 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* configure.in, configure (CXX):  Add -fvtable-thunks.
- 
- Thu Jul 30 14:34:47 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* java/lang/Object.java (finalize):  Move first.
- 	* java/lang/Object.h (_JvObjectPrefix):  New dummy base class.
- 	(Object):  Re-arrange order to match Object.java.
- 
- Tue Jul 28 21:42:16 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* prims.cc (hashUtf8String):  Fix - use new JavaSoft specification.
- 	* java/lang/natString.cc (hashChars):  Likewise.
- 
- 	* prims.cc (RuntimeClass):  New macro.
- 	(JvRunMain):  Do soft_initialise_class of RuntimeClass before exit.
- 
- Mon Jul 27 22:20:10 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (AM_MAKEFLAGS): New macro.
- 
- Fri Jul 24 11:21:24 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* nogc.cc: Include <javaprims.h>.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (GJAVAH): gjavah no longer in java subdir.
- 
- Thu Jul 23 11:38:40 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* exception.cc (terminate): Removed.
- 	(unexpected): Removed.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Handle case where target subdir is ".".
- 
- 	* configure: Rebuilt.
- 	* configure.in: Compute COMPPATH based on --with-target-subdir
- 	option.  Added --with-target-subdir and --with-cross-host.  Use
- 	--with-cross-host to determine when a cross compiler is in use.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (GJAVAH): Include COMPPATH.
- 	* configure: Rebuilt.
- 	* configure.in: Subst COMPPATH.
- 
- Mon Jul 20 16:13:43 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (lockMutex): Removed.
- 	(unlockMutex): Likewise.
- 	(processClass): Lock the class using a JvSynchronize object.
- 
- Fri Jul 17 11:27:48 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natString.cc (gc_calloc_fixed): Removed.
- 	(gc_free_fixed): Removed.
- 	(rehash): Use JvPrivAllocBytes, not gc_calloc_fixed; don't bother
- 	freeing old value of strhash.
- 
- 	* exception.cc (_Jv_type_matcher): Cast first argument to
- 	_Jv_IsInstanceOf.
- 
- Thu Jul 16 14:51:44 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-array.h (jstringArray): New type.
- 	* java/lang/natSystem.cc (setProperty): Removed.
- 	(initProperties): Directly call JvNewStringLatin1 for arguments.
- 	* java/util/natDate.cc: Include java/util/Date.h, not
- 	java-util.h.
- 	(setTime): Removed.
- 	* java/io/FileDescriptor.java (available): No longer static.
- 	* java/lang/natDouble.cc (Double): Removed class definition.
- 	* include/javaprims.h (java::lang::Number): Declare.
- 	(java::lang::NumberFormatException): Likewise.
- 	(java::io::FilenameFilter): Likewise.
- 	(java::lang::Character): Likewise.
- 	(java::lang::Error): Likewise.
- 	(java::lang::SecurityManager): Likewise.
- 	(java::util::Vector): Likewise.
- 	(java::io::FileNotFoundException): Likewise.
- 	(java::io::IOException): Likewise.
- 	(java::lang::NativeLang): Likewise.
- 	(java::lang::UnsatisfiedLinkError): Likewise.
- 	(java::util::StringTokenizer): Likewise.
- 	(java::io::InputStream, java::io::OutputStream): Likewise.
- 	(java::io::PrintStream, java::lang::SecurityException): Likewise.
- 	(java::util::Hashtable): Likewise.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_headers): Added java/lang/Double.h,
- 	java/lang/Number.h, java/lang/System.h, java/lang/Runtime.h.
- 	(MOSTLYCLEANFILES): Added nat_headers.
- 	* include/jvm.h: Moved many defines, declarations, and functions
- 	to java/lang/Class.h.
- 	(struct JvSyncInfo): Moved to java/lang/Object.h.
- 	(UTF8_GET): Moved to java/lang/String.h.
- 
- Wed Jul 15 09:02:31 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/io-defs.h: Don't include java-io.h.
- 	* include/java-io.h: Removed.
- 	* include/javaprims.h: Include java::io.
- 
- Tue Jul 14 17:04:26 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-io.h (File): Removed
- 	(FileDescriptor): Likewise.
- 
- 	* java/io/io-defs.h: Include java/io/File.h and
- 	java/io/FileDescriptor.h.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (GJAVAH): New macro.
- 	(.class.h): New rule.
- 	(SUFFIXES): Added .h.
- 	(nat_headers): New macro.
- 	($(nat_headers)): New target.
- 	(BUILT_SOURCES): Added nat_headers.
- 
- 	* include/java-util.h: Removed.
- 
- Fri Jul  3 10:17:14 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-io.h: Changed to avoid java-lang.h.
- 	* java/lang/natThread.cc: Include java/lang/Thread.h, not
- 	java-lang.h.
- 	* java/lang/natSystem.cc: Include java/lang/System.h, not
- 	java-lang.h.
- 	* java/lang/natString.cc: Include java/lang/String.h, not
- 	java-lang.h.
- 	* java/lang/natRuntime.cc: Include java/lang/Runtime.h, not
- 	java-lang.h.
- 	* java/lang/natClass.cc: Include java/lang/Class.h, not
- 	java-lang.h.
- 	* java/lang/natDouble.cc: Include java/lang/Object.h, not
- 	java-lang.h.
- 	* java/lang/natObject.cc: Include java/lang/Object.h, not
- 	java-lang.h.
- 	* exception.cc: Don't include java-lang.h.
- 	* posix-threads.cc: Include java/lang/Thread.h, not java-lang.h.
- 	* no-threads.cc: Include java/lang/Thread.h, not java-lang.h.
- 	* nogc.cc: Don't include java-lang.h.
- 	* boehm.cc: Include java/lang/Class.h, not java-lang.h.
- 	* prims.cc (processClass): Don't use `init_type'; just cast to
- 	type directly.
- 	Include java/lang/Class.h and jvm.h, not java-lang.h.
- 	(JvAllocObject): Wrote single-argument version.
- 	(PrimClass): Inherit from Class.
- 	(initPrimClass): Removed.
- 	* include/java-lang.h: Removed.
- 	* include/jvm.h: Declare struct _dispatchTable.
- 	* include/cni.h: Don't declare _Jv_MonitorEnter,
- 	_Jv_MonitorExit, struct _dispatchTable.
- 	* include/javaprims.h: Moved all typedefs here, from cni.h.
- 	* java/lang/Class.h: New file.
- 	* include/java-array.h: New file.
- 	* java/lang/Object.h: New file.
- 
- 	* prims.cc (classFromSig): Now static.
- 
- Wed Jul  1 12:28:48 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/cni.h: Don't mention soft_new.
- 	* include/java-lang.h (Object): Don't mention soft_new.  Mention
- 	_Jv_NewPrimArray, not newPrimArray.
- 	* prims.cc (soft_new): Removed.
- 	(_Jv_NewArray): Renamed from soft_newarray.
- 	(soft_anewarray): Use JvNewObjectArray.
- 	(newArray): Likewise.
- 	(newRefArray): Removed.
- 	(_Jv_NewPrimArray): Renamed from newPrimArray.
- 	(equalUtf8Consts): Now static.
- 	(soft_instanceof): Removed.
- 	* java/lang/natDouble.cc (doubleToString): Now static.
- 
- 	* java/lang/natDouble.cc (java_lang_Double_doubleToLongBits,
- 	java_lang_Double_longBitsToDouble, java_lang_Double_toString):
- 	Removed.
- 
- Tue Jun 30 10:54:57 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-lang.h: Renamed functions to _Jv_MonitorEnter and
- 	_Jv_MonitorExit.
- 	* include/cni.h: Renamed functions to _Jv_MonitorEnter and
- 	_Jv_MonitorExit.
- 	* include/no-threads.h (JvPrivMutexLock): Always return -1.
- 	(JvPrivMutexUnlock): Likewise.
- 	* prims.cc (_Jv_MonitorEnter): Renamed from soft_monitorenter.
- 	Return value now jint.
- 	(_Jv_MonitorExit): Renamed from soft_monitorexit.  Return value
- 	now jint.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am: Don't allow `jV' names.
- 	(maintainer-check): Depend on libjava.a.
- 	* exception.cc (_Jv_eh_free): Renamed from __jV_eh_free.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (NM): New macro.
- 	(maintainer-check): New target.
- 
- 	* include/posix-threads.h (_MIT_POSIX_THREADS): Removed.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Use --enable-threads, not --enable-gc.  Fix
- 	documentation for --enable-threads.  Changed option to work like
- 	identical option in gcc/configure.
- 
- Mon Jun 29 10:44:29 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* boehm.cc (mark_array): Use JvGetArrayLength.
- 
- Thu Jun 25 11:56:21 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* exception.cc:  New file (mostly written by Andrew MacLeod),
- 	exception handling support.
- 	* Makefile.am (libjava_a_SOURCES), Makefile.in:  Add exception.cc.
- 	Remove -fexceptions - it is now the default.
- 
- 	* prims.cc (JvIsInstanceOf):  Renamed to _Jv_IsInstanceOf.
- 	(JvAllocObject):  Renamed to _Jv_AllocObject.
- 	(soft_athrow):  Removed.  Replaced by _Jv_Throw in exception.cc.
- 	(loadClass):  Renamed to _Jv_FindClass.
- 	* include/cni.h (JvIsInstanceOf, JvAllocObject).  Make into
- 	inline methods that call _Jv_IsInstanceOf and _Jv_AllocObject.
- 	* include/java-lang.h (JvGetArrayLength):  New CNI function.
- 	* include/jvm.h (_Jv_FindClass):  Added declaration.
- 
- 	* java/lang/natString.cc:  More implementation if COMPACT_STRINGS.
- 
- Wed Jun 24 16:41:30 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* java/lang/natClass.cc (getName):  Add implementation.
- 	* java/lang/Throwable.java (printStackTrace): Handle missing backtrace.
- 
- Tue Jun 23 15:56:24 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (.class.o): Added -fexceptions.
- 
- Mon Jun 15 14:54:06 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Don't check for __nanosleep.
- 	* posix-threads.cc (nanosleep): Never define.
- 
- Sun Jun 14 22:37:23 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* posix-threads.cc (JvPrivCondWait): Fixed computation of
- 	timespec.
- 
- Thu Jun 11 10:51:44 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natThread.cc (enumerate): Uncommented.
- 	* java/lang/Thread.java (interrupted_): Renamed from `interrupt_'.
- 	(interrupt): Call it.
- 
- Wed Jun 10 15:57:16 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in (GCLIBS): Use `-lgc' so gjavac can recognize it.
- 
- Mon Jun  8 12:04:11 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/no-threads.h (JvPrivThreadInterrupt): New method.
- 	* include/java-lang.h (Thread): Added `interrupted_' method.
- 	* java/lang/Thread.java (interrupted_): New method.
- 	* java/lang/natThread.cc (join): Possibly throw interrupted
- 	exception after join finishes.
- 	(interrupted_): New method.
- 	* posix-threads.cc (JvPrivThreadInitData): Initialize join_mutex,
- 	join_cond.
- 	(JvPrivThreadJoin): New function.
- 	(really_start): Notify all threads waiting for this thread.
- 	(struct starter): Added `data' member.
- 	(JvPrivThreadStart): Set it.
- 	* include/posix-threads.h (JvPrivThread_t): Added join_mutex,
- 	join_cond.
- 	(JvPrivThreadJoin): No longer inline.
- 	(JvPrivThreadInterrupt): New function.
- 
- 	* include/no-threads.h (JvPrivThreadSleep): Removed.
- 	* posix-threads.cc (JvPrivThreadSleep): Removed.
- 
- Fri Jun  5 13:51:25 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in (THREADOBJS): Initialize to no-threads.o in
- 	no-threads case.
- 	* posix-threads.cc (key): New global.
- 	(JvPrivInitThreads): New function.
- 	(really_start): Set thread-specific data to point to object.
- 	(JvPrivThreadStart): Added `daemon' argument.
- 	(JvPrivThreadSleep): Added `data' argument.
- 	* include/posix-threads.h (JvPrivInitThreads): Removed
- 	implementation.
- 	(JvPrivThreadCurrent): New function.
- 	* include/no-threads.h (JvPrivThreadInitData): Initialize
- 	JvPrivOnlyThread.  Added `thread' argument.
- 	(JvPrivThreadCurrent): New function.
- 	(JvPrivThreadStart): Added `daemon' argument.
- 	* no-threads.cc: New file.
- 	* java/lang/natThread.cc (init_data): New function.
- 	(isAlive): Removed.
- 	(start): Set `alive' member.
- 	(stop_): Clear `alive' member.
- 	(destroy): Likewise.
- 	(currentThread): Implemented.
- 	(start): Pass `daemon' argument to JvPrivThreadStart.
- 	(sleep): Rewrote.
- 	* include/java-lang.h (Thread): Added `alive', `tsync' members.
- 	(Thread): Added `init_data' method.
- 	* java/lang/Thread.java (alive, data): New instance variables.
- 	(init_data): New private method.
- 	(isAlive): No longer native.
- 
- Thu Jun  4 14:09:32 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-lang.h (JvRunMain): Declare.
- 	* include/jvm.h (JvPrivInitGC): Revert to C++ linkage.
- 	* prims.cc (JvRunMain): New function.
- 	(main_signature, main_name): New globals.
- 
- 	* boehm.cc (mark_array): Use `elements' function and not
- 	operator[] on jarray.
- 
- 	* posix-threads.cc: Include <config.h>.  Define nanosleep if
- 	required.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Check for _nanosleep.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Check for pthread_mutexattr_settype.
- 
- 	* include/cni.h (class JvSynchronize): New class.
- 	* java/lang/Thread.java (sleep): Throws InterruptedException.
- 	(join): Throws InterruptedException.
- 	(resume): Not native.
- 	(resume_): New method.
- 	(start): Now synchronized.
- 	(stop_): New method.
- 	(Thread): Synchronize when accessing threadNumber.
- 	(misc): Removed.
- 	* java/lang/natThread.cc (throwException): New macro.
- 	(sleep): Throw InterruptedException.
- 	(resume_): Renamed.
- 	(stop_): Renamed.
- 	* include/java-lang.h (Runtime): Added interrupted().
- 
- 	* boehm.cc (call_finalizer): Correctly initialize jobj.
- 	* include/java-lang.h (Runtime): Added getRuntime() and exit().
- 
- 	* java/lang/natSystem.cc (currentTimeMillis): Use #elif, not
- 	`#elseif'.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Added support for --disable-threads.
- 	* include/no-threads.h: New file.
- 
- 	* acconfig.h (HAVE_PTHREAD_MUTEXATTR_INIT): New macro.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (EXTRA_libjava_a_SOURCES): Added posix-threads.cc.
- 	(libjava_a_DEPENDENCIES): Added THREADOBJS.
- 	(libjava_a_LIBADD): Added THREADOBJS.
- 	* configure: Rebuilt.
- 	* configure.in: Added --with-threads option.
- 	* posix-threads.cc: New file.
- 	* include/posix-threads.h: New file.
- 	* include/java-lang.h (Object): Added static member sync_mutex,
- 	member sync_info, method init_mutex.
- 	(struct JvSyncInfo): New struct.
- 	Include "java-threads.h".
- 	* prims.cc (soft_monitorenter): Wrote.
- 	(soft_monitorexit): Likewise.
- 	* java/lang/natObject.cc (init_mutex): New method.
- 	(notify): Wrote.
- 	(notifyAll): Wrote.
- 	(wait): Wrote.
- 	(sync_mutex): Define.
- 	Include "java-threads.h".
- 
- Tue Jun  2 15:24:33 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* include/java-lang.h (JvPrivInitGC):  Make extern "C".
- 	* include/jvm.h (JvConvertArgv, JvNewObjectArray):  Likewise.
- 
- Mon Jun  1 11:21:34 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* include/cni.h (jbyte etc):  Re-define using __java_byte etc.
- 	Added extern "Java" in places to tell G++ Object is a "Java" type.
- 	Other minor renaming and fixes.
- 	* include/java-io.h (FileDescriptor):  Add friend class declarations.
- 	G++ no longer allows non-Java types in method parameters and results
- 	of Java classes.  Converted most offending methods to friends.
- 	* java/lang/natDouble.cc (Double::toString):  Rename to doubleToString.
- 	* java/lang/natSystem.cc (setProperty):  Make friend.
- 	* java/lang/natString.cc, include/java-lang.h (String):  Rename
- 	methods findInternSlot to __JvStringFindSlot and __JvStringGetSlot.
- 	* include/java-lang.h (JArray):  Remove getData and eoprator[].
- 	Add elements friend function instead.
- 	* java/lang/natSystem.cc (arraycopy):  Use elements function.
- 	* java/io/natFileDescriptor.cc (read, write):  Likewise.
- 	* include/java-lang.h (Object):  Remove unused make method.
- 	(System::setProperty(char*,char*)): Turn into friend function.
- 	(Class):  Rename newObject by JvAllocObject.
- 	* prims.cc:  Update to use JvAllocObject, and elements.
- 
- 	* java/lang/natDouble.cc:  Fix double -> jdouble.
- 
- Wed May 20 16:50:06 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* Makefile.am (INCLUDES):  Add -Iinclude (to get config.h).
- 
- Mon May 18 13:46:02 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natRuntime.cc (finalize_on_exit): Define.
- 	* include/java-lang.h (Runtime): finalize_on_exit and
- 	runFinalizersOnExit now static.
- 	* java/lang/Runtime.java (runFinalizersOnExit): Now static, to
- 	match JDK 1.2b3.
- 	(finalize_on_exit): Now static.
- 
- 	* boehm.cc (mark_obj): Get class using getClass() method on
- 	object.
- 	(_dispatchTable): Removed.
- 
- Mon May 11 15:26:52 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/natFileDescriptor.cc (open_read): Only call open if
- 	HAVE_OPEN defined.
- 	(open_write): Likewise.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am ($(nat_files)): Depend on config.h.
- 
- Thu May  7 16:22:00 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (ObjectClass): Now a macro; updated for new class name
- 	mangling scheme.
- 	(StringClass): Likewise.
- 	(ClassClass): Likewise.
- 
- Wed May  6 00:26:44 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/natFileDescriptor.cc (available): Do nothing unless
- 	HAVE_SELECT defined.
- 	* java/util/natDate.cc (setTime): Conditional on
- 	HAVE_GETTIMEOFDAY.
- 	(toString): Conditional on HAVE_TIME.
- 	* aclocal.m4, configure: Rebuilt.
- 	* acinclude.m4: New file.
- 	* configure.in: Don't actually call AM_EXEEXT.  Call
- 	AC_CANONICAL_HOST.  Use LIB_AC_PROG_CC and LIB_AC_PROG_CXX.  Added
- 	--with-target-subdir option.  Check for select and open
- 	functions.
- 
- Tue May  5 00:10:45 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* boehm.cc (JvPrivRegisterFinalizer): Changed interface.
- 	(call_finalizer): Likewise.
- 	* nogc.cc (JvPrivRegisterFinalizer): Changed interface.
- 	* prims.cc (newObject): Pass actual method pointer to
- 	JvPrivRegisterFinalizer.
- 	* include/jvm.h (JvPrivFinalizerFunc): New typedef.
- 	(JvPrivRegisterFinalizer): Changed interface.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (MOSTLYCLEANFILES): New macro.
- 	(CLEANFILES): Removed javao_files.
- 
- Fri May  1 22:52:24 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* nogc.cc: New file.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (INCLUDES): Use GCINCS, not paths to boehm-gc.
- 	(EXTRA_libjava_a_SOURCES): New macro.
- 	(libjava_a_SOURCES): Removed boehm.cc.
- 	(libjava_a_DEPENDENCIES): Added GCOBJS.
- 	(libjava_a_LIBADD): Likewise.
- 	* configure: Rebuilt.
- 	* configure.in: Added code for --enable-gc=TYPE.
- 
- Thu Apr 30 14:54:00 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* boehm.cc (mark_array): Don't further dereference pointer from
- 	array.
- 
- 	* boehm.cc: Include <boehm-config.h>, not <private/config.h>.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (INCLUDES): Removed -I for boehm-gc/include; added
- 	one for boehm-gc build directory.
- 
- Wed Apr 29 09:45:19 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-lang.h (finalize_on_exit): New instance variable in
- 	java::lang::Runtime.
- 	(runFinalizersOnExit): New method.
- 	* java/lang/Runtime.java (finalize_on_exit): New instance
- 	variable.
- 	(runAllFinalizers_): New private method.
- 	(runFinalizersOnExit): New method.
- 	* boehm.cc (JvPrivRunFinalizers): New function.
- 	(JvPrivRunAllFinalizers): Likewise.
- 	(JvPrivRunGC): Likewise.
- 	* java/lang/natRuntime.cc: Include "jvm.h".
- 	(gc): Call JvPrivRunGC.
- 	(runFinalization): Call JvPrivRunFinalizers.
- 	(runFinalizersOnExit): New method.
- 	(exit_): Call JvPrivRunAllFinalizers if required.
- 	* include/jvm.h: Declare JvPrivRunFinalizers,
- 	JvPrivRunAllFinalizers, JvPrivRunGC.
- 
- Tue Apr 28 15:06:50 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* boehm.cc (JvPrivRegisterFinalizer): New function.
- 	(call_finalizer): Likewise.
- 	* include/jvm.h: Declare JvPrivRegisterFinalizer.
- 	* prims.cc (finalize_name): New global.
- 	(newObject): Just call other newObject.
- 	(newObject): Register finalizer if it exists.
- 
- Mon Apr 27 12:47:03 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (gc_malloc): Removed.
- 	(makeUtf8Const): Use JvPrivAllocBytes.
- 	(lookupArray): Likewise.
- 	(newPrimArray): Likewise.
- 	(JvNewObjectArray): Use JvPrivAllocArray.
- 	(newObject): Use JvPrivAllocObj.
- 	(newObject): Likewise.
- 	Changed Method -> JvMethod everywhere.
- 	Changed Field -> JvField everywhere.
- 	* include/java-lang.h (Object): Changed type of `fields' to
- 	JvField*.
- 	(jmethodID, jfieldID): New typedefs.
- 	(Object): JvGetFirstInstanceField and JvNumInstanceFields now
- 	friends.
- 	* include/jvm.h (struct JvMethod): Renamed from Method, and moved
- 	from java-lang.h.
- 	(METHOD_NATIVECODE): Moved from java-lang.h.
- 	(class JvField): New class.
- 	(JvGetFirstInstanceField): New function.
- 	(JvFieldIsRef): Likewise.
- 	(JvGetObjectField): Likewise.
- 	(JvNumInstanceFields): Likewise.
- 
- Thu Apr 23 16:42:11 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* boehm.cc: New file.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (libjava_a_SOURCES): Added boehm.cc.
- 	(INCLUDES): Added -I options to find boehm-gc files.
- 
- Wed Apr 29 15:11:37 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in (CXX): Put -fno-rtti here and not in CXXFLAGS.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_files): New macro.
- 	(libjava_a_DEPENDENCIES): Use it.
- 	(libjava_a_LIBADD): Likewise.
- 	($(nat_files)): New static pattern rule.
- 	(class_files): Run separate find to find .class files.
- 	(javao_files): Compute based on class_files.
- 	(BUILT_SOURCES): New macro.
- 
- Thu Apr 23 16:42:11 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.am (java_files): New macro.
- 	(class_files): Likewise.
- 	(javao_files): Likewise.
- 	(libjava_a_DEPENDENCIES): Include $(javao_files).
- 	(libjava_a_LIBADD): Likewise.
- 	(classes.stamp): Depend on $(java_files); only recompile changed
- 	files.
- 	(here): New macro.
- 	(CLEANFILES): Don't run find; use macros.  Don't mention
- 	libjava.a.
- 	(.class.o): New target.
- 	(compiled.stamp): Removed.
- 
- Thu Apr 23 14:17:43 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* java/io/{Reader,InputStreamReader,FileReader,BufferedReader,
- 	LineNumberReader}>java:  Newly-implemented standard classes.
- 
- Thu Apr 23 14:02:04 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (compiled.stamp): Use $(CC), not $(GCC).
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (hack): New macro.
- 	(libjava_a_LIBADD): Use $(hack) to work around automake oddity.
- 
- Wed Apr 22 16:49:57 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/config.h.in: New file.
- 	* include/config.h: Removed.
- 	* acconfig.h: New file.
- 	* Makefile.am (AR, ARFLAGS, JAVAC, GCC, CXX, CXXFLAGS): Removed.
- 	(lib_LIBRARIES, libjava_a_SOURCES, libjava_a_DEPENDENCIES,
- 	libjava_a_LIBADD): New macros.
- 	(INCLUDES): New macro.
- 	(prims.o): Removed.
- 	(.cc.o): Removed.
- 	(SUFFIXES): Removed.
- 	(all): Removed.
- 	(libjava.a): Removed.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Call AC_PROG_CC, AC_PROG_CXX, AC_PROG_RANLIB.
- 	Look for headers and functions we require.  Create
- 	include/config.h.
- 
- Mon Apr 20 22:25:00 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* prims.cc (instance_class, instanceof, JvIsInstanceOf, JvConvertArgv,
- 	soft_instanceof, newObject, JbNewObjectArray, soft_checkcast,
- 	soft_lookupinterfacemethod):  New functions.
- 	(PrimClass):  Actually initialize the primitive classes.
- 	(Utf8Const2JavaString):  Moved to java/lang/natString.cc.
- 
- 	* include/java-util.h:  Removed java::util definition.
- 	* include/cni.h:  Moved java::util here and added Properties.
- 	Added more function prototypes.
- 	* include/java-lang.h:  Added mroe methods and friend declarations.
- 	* include/config.h (HAVE_GETTIMEOFDAY, HAVE_TIME):  Added.
- 	* include/jvm.h (strLengthUtf8):  Add declaration.
- 	
- 	* java/lang/{Integer,Long,Boolean,Character,Float,Double}.java (TYPE):
-  	New static field.
- 	* java/lang/{Byte,Short,Void}.java:  New classes.
- 	* java/lang/Character.java (isJavaIdentifierStart,
- 	JavaIdentifierPart):  New static methods.
- 	* java/lang/Number.java (byteValue, shortValue):  New methods.
- 
- 	* java/lang/String.java (intern, hashCode):  Make native.
- 	* java/lang/natString.cc:  New file.  Handle the string pool.
- 	* Makefile.am:  Build natString.o.  Use CXXFLAGS.
- 
- 	* java/lang/Class.java (isArray, isPrimitive, getComponentType,
- 	isInstance, isAssignableFrom), java/lang/natClass.cc:  New methods.
- 	* java/lang/Throwable.java (<init>):  Don't fillInStackTrace yet.
- 	* java/lang/System.java (setProperty):  New private method.
- 	(initProperties):  Take argument, and make native.
- 	* java/lang/natSystem.cc:  Implement (preliminary) initProperties.
- 	(currentTimeMillis):  Make more robust.
- 
- 	* java/io/{Writer,PrintWriter,OutputStreamWriter}.java:  New classes.
- 	* java/io/UnsupportedEncodingException.java:  New exception class.
- 
- 	* java/io/DataInputStream.java:  Don't use a PushbackInputStream.
- 	* java/io/FilterOutputStream.java:  Add missing 'extends OutputStream'.
- 	
- Fri Apr 10 11:52:10 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* Makefile.am (CXXFLAGS, JC1FLAGS):  New macro.
- 	* prims.cc:  Added bunch of stuff.
- 	* include/cni.h:  Added various definitions.
- 	* include/java-lang.h:  Added Method, various friends, some macros.
- 
- 	* include/config.h:  Added HAVA_MEMMOVE and HAVE_MEMCPY.
- 	* java/lang/System.java (arraycopy):  Make native.
- 
- Sun Apr  5 23:58:51 1998  Per Bothner  <bothner@cygnus.com>
- 
- 	* java/lang/{netObject.cc,natClass.cc,natDouble.cc,natRuntime.cc,
- 	natSystem.cc,natThread.cc}:  Native (C++) methods for various classes.
- 	* java/lang/ClassLoader.java (defineClass):  Now takes extra argument.
- 	* java/lang/Double.java (toString, doubleToLongBits, longBitsToDouble):
- 	Make native.
- 	* java/lang/Runtime.java:  Declare methods as native instead of
- 	using NativeLang.
- 	* java/lang/SecurityManager.java (getClassContext):  Just throw Error.
- 	* java/lang/System.java:  Comment out some stuff, for now.
- 	* java/lang/Thread.java:  Re-write.  Use native methods.
- 	* java/lang/NativeLang.java:  Remove most of it.
- 	
- 	* java/util/natDate.cc:  Native (C++) methods for Date.
- 	* java/util/{Calendar.java,GregorianCalendar.java}:  New classes.
- 	* java/util/Date.java:  Complete re-write.
- 
- 	* java/io/io-defs.h:  New header file.
- 	* java/io/FileDescriptor.java:  Add a bunch of private methods,
- 	mostly moved from NativeIO.java and natNativeIO.cc.
- 	* java/io/{natFile.cc,java/io/natFileDescriptor.cc}:  New native code.
- 	* java/io/File.java:  Use new code.
- 	* java/io/{FileInputStream.java.FileOutputStream.java,
- 	RandomAccessFile.java}:  Use new private FileDescriptor methods.
- 	* java/io/NativeIO.java:  Removed, no longer used.
- 
- 	* java/io/StreamTokenizer.java (numericChars):  Make char array.
- 
- 	* include/*.h:  Various header files used by the C++ native code.
- 
- 	* Makefile.am, Makefile.in, aclocal.m4, configure, configure.in:
- 	New autoconf+automake-based setup.
- 	* prims.cc:  New file for Java "primitives".
- 
--- 3505,3507 ----
diff -Nrcpad gcc-4.0.2/libjava/ChangeLog-2000 gcc-4.1.0/libjava/ChangeLog-2000
*** gcc-4.0.2/libjava/ChangeLog-2000	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/ChangeLog-2000	Wed May  4 18:29:28 2005
***************
*** 0 ****
--- 1,5077 ----
+ 2000-12-30  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* Makefile.am (libgcj_la_LIBADD): Add $(THREADLIBS). This ensures that
+ 	the correct versions of various linuxthreads functions get linked.
+ 	* Makefile.in: Rebuilt.
+ 	* java/lang/natThread.cc (finalize_native): New static function. Call
+ 	_Jv_ThreadDestroyData.
+ 	(initialize_native): Register finalizer for "data".
+ 	* include/posix-threads.h (_Jv_ThreadInitData): New simpler prototype.
+ 	(_Jv_ThreadDestroyData): New prototype.
+ 	* include/win32-threads.h: Ditto.
+ 	* include/no-threads.h: Ditto.
+ 	* posix-threads.cc (_Jv_ThreadInitData): Implement new prototype.
+ 	(_Jv_ThreadDestroyData): New function. Free native thread "data" and
+ 	move mutex and condition variable destroy code from:
+ 	(really_start): ...here.
+ 	(_Jv_ThreadStart): Set PTHREAD_CREATE_DETACHED.
+ 	* win32-threads.cc (_Jv_ThreadInitData): Implement new prototype.
+ 	(_Jv_ThreadDestroyData): Implemented.
+ 	* nogc.cc (_Jv_AllocObject): Use "void *" not "ptr_t".
+ 	(_Jv_AllocArray): Ditto.
+ 
+ 2000-12-27  Jeff Sturm  <jeff.sturm@commerceone.com>
+ 
+ 	* java/sql/DriverManager.java (getConnection): Don't set user/password
+ 	properties if null.
+ 
+ 2000-12-27  Warren Levy  <warrenl@redhat.com>
+ 
+ 	Fix for PR libgcj/1358:
+ 	* java/lang/System.java: Update Copyright date properly.
+ 	* java/util/Calendar.java: Fix typo in comment.
+ 	(set): Set 24-hour clock hour instead of 12-hour clock hour.
+ 	* java/util/GregorianCalendar.java (GregorianCalendar): Properly
+ 	initialize times.  Spec says to set H:M:S values to zero only if
+ 	a date is given.
+ 	* java/util/TimeZone.java (getDefaultDisplayName): Casts to char
+ 	needed for evaluating numbers '0' to '9' in printouts of GMT offsets.
+ 	* java/util/natGregorianCalendar.cc (computeTime): Properly handle
+ 	timezones and GMT offsets, being careful to account for units of
+ 	milliseconds vs. seconds.
+ 
+ 2000-12-28  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/natClass.cc (_Jv_IsAssignableFrom): Primitive TYPEs can
+ 	not be assigned to Object.
+ 
+ 	Fix for PR libgcj/1516:
+ 	* java/lang/reflect/natMethod.cc (primitives): Remove void entry.
+ 	Add boolean entry.
+ 	(can_widen): Declared inline. Remove redundant checks for void
+ 	arguments and char->short conversion. Add special case for boolean
+ 	conversions.
+ 	(ffi_type): Declared inline.
+ 	(_Jv_CallAnyMethodA): Move unwrapping logic inside isPrimitive() block.
+ 
+ 2000-12-26  Petter Reinholdtsen  <pere@hungry.com>
+ 
+ 	* java/sql/SQLWarning.java: Fixed typo in comment.
+ 
+ 2000-12-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/MenuItem.java (paramString): Now protected.
+ 
+ 	* java/awt/MenuShortcut.java: Implements Serializable.
+ 
+ 	* java/awt/MenuBar.java: Rewrote from scratch.
+ 
+ 	* java/awt/MenuComponent.java (removeNotify): Wrote.
+ 	Implements Serializable.
+ 
+ 	* java/awt/GridBagConstraints.java (GridBagConstraints): New
+ 	constructor.
+ 
+ 	* java/awt/CheckboxMenuItem.java: Wrote.
+ 
+ 2000-12-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/MenuContainer.java: Fixed typo.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added SystemColor.java.
+ 	* java/awt/SystemColor.java: New file.
+ 
+ 	* java/awt/Color.java (rgba): Now package-private.
+ 
+ 	* java/awt/event/InputEvent.java (isAltGraphDown): New method.
+ 
+ 	* java/awt/event/ContainerEvent.java (getContainer): Renamed from
+ 	getComponent.
+ 
+ 	* java/awt/MenuItem.java (addNotify): New method.
+ 	(MenuItem(String,MenuShortcut)): New constructor.
+ 	(setLabel): Notify peer of change.
+ 	(setEnabled): Likewise.
+ 
+ 	* java/awt/GridLayout.java (toString): New method.
+ 
+ 	* java/awt/FlowLayout.java (LEADING, TRAILING): New constants.
+ 	(FlowLayout): Check for LEADING and TRAILING.
+ 	(setAlignment): Likewise.
+ 	(layoutContainer): Handle component orientation.
+ 
+ 	* java/awt/Component.java (orientatin): New field.
+ 	(setComponentOrientation): Wrote.
+ 	(getComponentOrientation): Wrote.
+ 
+ 	* java/awt/Event.java (Event): Implements Serializable.
+ 	(consumed): New field for serialization.
+ 	* java/awt/Dimension.java (Dimension): Implements Serializable.
+ 	* java/awt/Cursor.java (Cursor): Implements Serializable.
+ 	* java/awt/Container.java (Container): No longer abstract.
+ 
+ 	* java/awt/Choice.java: Wrote.
+ 	* java/awt/Checkbox.java: Wrote.
+ 	* java/awt/ItemSelectable.java: Documented.
+ 	* java/awt/CheckboxGroup.java: Wrote.
+ 
+ 	* java/awt/CardLayout.java (layoutContainer): Directly use fields
+ 	in other classes.
+ 	(getSize): Likewise.
+ 
+ 2000-12-24  Jeff Sturm  <jeff.sturm@commerceone.com>
+ 
+ 	* java/io/FileDescriptor.java: Initialize fd to -1.
+ 	Remove default constructor.
+ 
+ 2000-12-23  Joseph S. Myers  <jsm28@cam.ac.uk>
+ 
+ 	* java/lang/mprec.h: Change C9X reference to refer to C99.
+ 
+ 2000-12-22  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/Throwable.java (trace_enabled): New static field.
+ 	* java/lang/natThrowable.cc (fillInStackTrace): Do nothing if
+ 	trace_enabled not set.
+ 	* prims.cc (main_init): Turn off trace_enabled while creating
+ 	default exception objects.
+ 
+ 2000-12-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/beans/PropertyChangeListener.java: Extends EventListener.
+ 	* java/beans/VetoableChangeListener.java: Extends EventListener.
+ 
+ 	* java/util/zip/Deflater.java (update, init): Now private.
+ 
+ 2000-12-21  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/BasicMapEntry.java: Re-added.
+ 	* java/util/HashMap.java (Entry): Extend BasicMapEntry.
+ 	(putAll): Test for BasicMapEntry.
+ 	* java/util/Hashtable.java (Entry): Extend BasicMapEntry.
+ 	(putAll): Test for BasicMapEntry.
+ 	Change references from `HashMap.Entry' to `Entry' in various places.
+ 	* Makefile.am: Add BasicMapEntry.java.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-12-18  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/util/GregorianCalendar.java (GregorianCalendar): Constructors
+ 	need to set timezone to a valid non-null value.  Partial fix for
+ 	PR 331.
+ 
+ 2000-12-18  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/awt/Window.java (addNotify): Remove peer casting hack now that
+ 	gcj/312 is fixed.
+ 	* java/awt/Button.java (addNotify): Likewise.
+ 	* java/awt/Label.java (addNotify): Likewise.
+ 	* java/awt/Panel.java (addNotify): Likewise.
+ 	* java/awt/Scrollbar.java (addNotify): Likewise.
+ 	* java/awt/Component.java (processPaintEvent): Use peer not getPeer.
+ 	Remove redundant null checks.
+ 
+ 2000-12-18  Joseph S. Myers  <jsm28@cam.ac.uk>
+ 
+ 	* COPYING: Update to current
+ 	ftp://ftp.gnu.org/pub/gnu/Licenses/COPYING-2.0 (fixes references
+ 	to 19yy as example year in copyright notice).
+ 
+ 2000-12-18  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/zip/natInflater.cc (inflate): Treat Z_BUF_ERROR as
+ 	end-of-stream if avail_in is 0.
+ 
+ 2000-12-17  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/ArrayList.java (data): Declare transient.
+ 	(serialPersistantFields): Removed.
+ 	(readObject): Use defaultReadObject(), not readFields().
+ 	(writeObject): Use defaultWriteObject(), not writeFields().
+ 
+ 2000-12-17  Jeff Sturm  <jeff.sturm@commerceone.com>
+ 
+ 	* java/util/Hashtable.java (put): Remove `last' variable.
+ 	Link new entry to head of list.
+ 	* java/util/HashMap.java (put): Ditto.
+ 
+ 2000-12-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (trySomeGetBundle): Pass class
+ 	loader to Class.forName.
+ 
+ 2000-12-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java
+ 	(getBundle(String,Locale,ClassLoader)): New method.
+ 	(trySomeGetBundle): Added `loader' argument.
+ 	(partialGetBundle): Likewise.
+ 
+ 	* java/text/NumberFormat.java (groupingUsed, parseIntegerOnly,
+ 	maximumFractionDigits, maximumIntegerDigits,
+ 	minimumFractionDigits, minimumIntegerDigits): Now
+ 	package-private.
+ 
+ 	* java/lang/Thread.java (checkAccess): Now final.
+ 
+ 	* java/lang/RuntimePermission.java: Class now final.
+ 
+ 	* java/io/StringWriter.java (StringWriter(int)): Now public.
+ 
+ 	* java/io/SerializablePermission.java (legal_names): Now private.
+ 
+ 	* java/lang/Character.java: Updated UnicodeBlock constants.
+ 	* scripts/blocks.pl: Special case private use and surrogate
+ 	areas.  Updated URL.
+ 
+ 2000-12-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (GCJ_WITH_FLAGS): New macro, includes --encoding
+ 	option.
+ 	(GCJCOMPILE): Use it.
+ 	(JAVAC): Likewise.
+ 
+ 2000-12-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/runtime/FirstThread.java (Kcert, Kfile, Khttp, Kjar):
+ 	New static final fields.
+ 
+ 	* scripts/classes.pl (scan): Skip lines with leading `*'.
+ 	Fix for PR libgcj/378.
+ 
+ 2000-12-11  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* configure.in: Remove check for -fuse-divide-subroutine.
+ 	* configure: Rebuilt.
+ 
+ 	* java/util/Hashtable.java (Enumerator.nextElement): Initialize `e'.
+ 
+ 	* gcj/javaprims.h: Rebuilt CNI namespace declarations.
+ 
+ 2000-12-11  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* Makefile.am: Add HashSet.java and java/lang/ref classes.
+ 	Remove BasicMapEntry.java and Bucket.java.
+ 	* Makefile.in: Rebuilt.
+ 	* java/util/HashMap.java: Rewritten.
+ 	* java/util/HashSet.java: Imported from classpath.
+ 	* java/util/WeakHashMap.java: Imported from classpath.
+ 	* java/util/Hashtable.java: Rewritten based on new HashMap code.
+ 	* java/util/Bucket.java: Deleted.
+ 	* java/util/BasicMapEntry.java: Deleted.
+ 	* java/util/Collections.java (search): Use a for-loop, not iterator
+ 	hasNext().
+ 	(copy): Use a for-loop. Throw an IndexOutOfBoundsException if run out
+ 	of elements in source.
+ 	(max): Use a for-loop.
+ 	(min): Ditto.
+ 	(reverse): Keep track of positions instead of using Iterator's
+ 	nextIndex() and previousIndex().
+ 	(shuffle(List)): Initialize defaultRandom if required using
+ 	double-check thread safety idiom. Call two-argument shuffle method
+ 	using defaultRandom.
+ 	(defaultRandom): New field.
+ 	(shuffle(List, Random)): Use a for-loop. Keep track of pos instead of
+ 	using previousIndex() and nextIndex().
+ 	(singletonMap(iterator)): Use a HashMap.Entry, not BasicMapEntry.
+ 	* java/util/AbstractCollection.java (toString): Use a StringBuffer.
+ 	* java/util/AbstractMap.java (toString): Use StringBuffer.
+ 	* java/lang/ref/PhantomReference.java: Imported from classpath.
+ 	* java/lang/ref/SoftReference.java: Ditto.
+ 	* java/lang/ref/Reference.java: Ditto.
+ 	* java/lang/ref/WeakReference.java: Ditto.
+ 	* java/lang/ref/ReferenceQueue.java: Ditto.
+ 
+ 2000-12-10  Richard Henderson <rth@redhat.com>
+ 
+ 	* configure.host: Recognize alpha*-*, not alphaev6-*.
+ 
+ 2000-12-09  Anthony Green  <green@redhat.com>
+ 
+ 	* configure.host: Enable interpreter for Alpha.
+ 
+ 2000-12-09  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* Makefile.am (data_DATA): libgcj.jar replaces libgcj.zip.
+ 	(ZIP): Points at fastjar instead of zip.
+ 	(libgcj_la_DEPENDENCIES): libgcj.jar replaces libgcj.zip.
+ 	(libgcj_la_LDFLAGS): Correctly point at libsupc++.
+ 	(libgcjx_la_DEPENDENCIES): libgcj.jar replaces libgcj.zip.
+ 	(libgcjx_la_LDFLAGS): Correctly point at libsupc++.
+ 	($(java_source_files:.java=.class):): libgcj.jar replaces libgcj.zip.
+ 	($(x_java_source_files:.java=.class):): Likewise.
+ 	(libgcj.jar:): Replaces libgcj.zip:, builds libgcj.jar and uses
+ 	fastar's flags.
+ 	(CLEANFILES): libgcj.jar replaces libgcj.zip.
+ 	(java/lang/ClassLoader.h:): Depends on libgcj.jar.
+ 	(gnu/gcj/runtime/FirstThread.h:, java/lang/Thread.h:,
+ 	java/lang/String.h:, java/lang/reflect/Constructor.h:,
+ 	java/lang/reflect/Field.h:, java/lang/reflect/Method.h:,
+ 	gnu/gcj/runtime/VMClassLoader.h:,
+ 	java/io/ObjectInputStream$$GetField.h:,
+ 	java/io/ObjectOutputStream$$PutField.h:, header-check:): Likewise.
+ 	(Makefile.in): Rebuilt.
+ 
+ 2000-12-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	From Phil Edwards:
+ 	* configure: Rebuilt.
+ 	* configure.in: Use echo, not `:', to create .d files.
+ 
+ 2000-12-08  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/lang/StringBuffer.java (insert(int,char[])): Avoid
+ 	NullPointerException so proper check of offset can be done.
+ 
+ 2000-12-08  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/io/FileInputStream.java (close): Check if the fd is valid.
+ 	* java/io/RandomAccessFile.java (close): Ditto.
+ 	* java/net/PlainDatagramSocketImpl.java (close): Ditto.
+ 	* java/net/PlainSocketImpl.java (close): Ditto.
+ 
+ 2000-12-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/GridBagConstraints.java: Filled in values for static
+ 	final fields.
+ 
+ 	* java/util/BitSet.java: Updated copyright notice.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new file.
+ 	* java/awt/GridBagConstraints.java: New file.
+ 
+ 2000-12-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/Collator.java (decomposeCharacter, decmp, strength):
+ 	Now package-private, not protected.
+ 	* java/text/DateFormatSymbols.java (equals): Now private.
+ 	* java/text/DecimalFormatSymbols.java (safeGetChar): Now private.
+ 	* java/util/BitSet.java: Class no longer final.
+ 
+ 2000-12-04  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/util/TimeZone.java (getAvailableIDs): Activated commented
+ 	out code dependent on compiler and library changes.
+ 
+ 2000-12-04  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/io/FilePermission.java: Made class final per spec.
+ 	* java/text/DecimalFormatSymbols.java (setCurrencySymbol): Changed
+ 	method name to match spec (fixed typo).
+ 	* java/util/LinkedList.java: Implements List.
+ 
+ 2000-12-04  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/natDouble.cc: Include fdlibm.h, not mprec.h. From
+ 	Edgar Villanueva <edgarvil@home.com>.
+ 
+ 2000-12-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/geom/Point2D.java: Added protected constructor.
+ 	(equals): New method.
+ 	(Float.setLocation(float,float)): New method.
+ 	* java/awt/geom/Dimension2D.java: Added protected constructor.
+ 	* java/awt/geom/AffineTransform.java: Made all constants public.
+ 	(concatenate): Fixed typo in name.
+ 	* java/awt/event/WindowAdapter.java: Class now abstract.
+ 	* java/awt/event/KeyEvent.java (CHAR_UNDEFINED): Now final.
+ 	* java/awt/event/FocusEvent.java: Extend ComponentEvent, not
+ 	AWTEvent.
+ 
+ 	* java/awt/AWTError.java: Extend Error, not
+ 	IllegalStateException.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new file.
+ 	* java/awt/geom/RoundRectangle2D.java: New file.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new file.
+ 	* java/awt/FlowLayout.java: New file.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new file.
+ 	* java/awt/GridLayout.java: New file.
+ 
+ 2000-12-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new files.
+ 	* java/awt/CardLayout.java: New file.
+ 	* java/awt/AWTPermission.java: New file.
+ 
+ 2000-12-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/Vector.java (insertElementAt): Unconditionally
+ 	increment elementCount.
+ 	(removeRange): Clear unused slots in vector.
+ 
+ 2000-12-02  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/natMath.cc: Declare fabsf() function.
+ 	* java/lang/mprec.h: Don't include math.h.
+ 	* java/lang/dtoa.c: Include string.h.
+ 	* java/lang/natString.cc (toLowerCase): Initialize `ch' to prevent
+ 	compiler warning.
+ 
+ 	From Adam Welc <welc@cs.purdue.edu>:
+ 	* java/util/LinkedList.java (removeFirst): Update `first' field.
+ 	Handle the last == first case.
+ 	(removeLast): Update `last' field. Handle the last == first case.
+ 
+ 2000-12-01  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* Makefile.am: Added entries for new java.sql modules.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-12-01  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* mauve-libgcj: Turned on JDK1.2 and turned off tests for classes
+ 	that aren't quite 1.2 compatible yet.
+ 
+ 2000-11-30  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/sql/Array.java: New file from classpath.
+ 	* java/sql/BatchUpdateException.java: Ditto.
+ 	* java/sql/Blob.java: Ditto.
+ 	* java/sql/Clob.java: Ditto.
+ 	* java/sql/Ref.java: Ditto.
+ 	* java/sql/SQLData.java: Ditto.
+ 	* java/sql/SQLInput.java: Ditto.
+ 	* java/sql/SQLOutput.java: Ditto.
+ 	* java/sql/Struct.java: Ditto.
+ 	* java/sql/CallableStatement.java: Merged file from claspath.
+ 	* java/sql/Connection.java: Ditto.
+ 	* java/sql/DataTruncation.java: Ditto.
+ 	* java/sql/DatabaseMetaData.java: Ditto.
+ 	* java/sql/DriverManager.java: Ditto.
+ 	* java/sql/PreparedStatement.java: Ditto.
+ 	* java/sql/ResultSet.java: Ditto.
+ 	* java/sql/ResultSetMetaData.java: Ditto.
+ 	* java/sql/SQLException.java: Ditto.
+ 	* java/sql/SQLWarning.java: Ditto.
+ 	* java/sql/Statement.java: Ditto.
+ 	* java/sql/Types.java: Ditto.
+ 
+ 2000-11-29  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/natSystem.cc (init_properties): Set user.language and
+ 	user.region.
+ 	* configure.in: Check for setlocale.
+ 	* configure: Rebuilt.
+ 	* include/config.h.in: Rebuilt.
+ 
+ 	* java/util/zip/InflaterInputStream (read): Don't return -1 unless
+ 	the infate() call didn't deliver any output. Throw a ZipException if
+ 	the needsDictionary() call returns true.
+ 	* java/io/ByteArrayInputStream (read): Remove redundant bounds checks.
+ 	* java/io/InputStreamReader: Use the default buffer size for the
+ 	contained BufferedInputStream.
+ 
+ 2000-11-28  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/text/DateFormatSymbols.java (zoneStringsDefault): Added
+ 	more time zone entries.
+ 	* java/text/SimpleDateFormat.java (format): Added case for
+ 	TIMEZONE_FIELD.
+ 
+ 2000-11-28  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/io/DataInputStream.java: Merge classpath docs. Call in.read()
+ 	directly rather than read() in all cases. Make primitive read
+ 	implementations	more efficient, as defined in JDK online docs.
+ 	(skipBytes): Behave like the JDK's implementation.
+ 	* java/io/BufferedReader.java: Merge classpath docs. Check for a
+ 	closed stream with checkStatus() whenever an IOException can be
+ 	thrown.
+ 	(checkStatus): New private method.
+ 
+ 2000-11-27  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* Makefile.am: Added natTimeZone.cc.
+ 	* Makefile.in: Rebuilt.
+ 	* gnu/gcj/text/LocaleData_en.java: Added DateFormat entries.
+ 	* java/text/DateFormatSymbols.java (ampms): Made package private.
+ 	(eras): Made package private.
+ 	(months): Made package private.
+ 	(shortMonths): Made package private.
+ 	(shortWeekdays): Made package private.
+ 	(weekdays): Made package private.
+ 	(formatPrefixes): New private field.
+ 	(localPatternCharsDefault): Made private.
+ 	(dateFormats): New package private field.
+ 	(timeFormats): New package private field.
+ 	(formatsForKey): New private method.
+ 	(DateFormatSymbols(Locale)): Set dateFormats and timeFormats.
+ 	(DateFormatSymbols(DateFormatSymbols)): Ditto.
+ 	* java/text/SimpleDateFormat.java: Merged with Classpath.
+ 	* java/util/TimeZone.java: Merged with Classpath.
+ 	* java/util/natTimeZone.cc: New file.
+ 
+ 2000-11-27  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/Vector.java (ensureCapacity): Don't increment modCount.
+ 	(addElement): Don't increment elementCount twice. Doh.
+ 	* java/util/ArrayList.java (add): Only call ensureCapacity if the
+ 	array needs to be expanded.
+ 	(addAll): Ditto.
+ 	* java/util/Collections.java (UnmodifiableCollection): Implement
+ 	toString().
+ 	(UnmodifiableList): Throw UnsupportedOperationException from
+ 	modification methods. Set `l' from the one-parameter constructor.
+ 	(UnmodifiableMap): Implement toString().
+ 	(SynchronizedCollection): Ditto.
+ 	(SynchronizedList): Set `l' from the one-parameter constructor.
+ 	(SynchronizedSortedSet): Set `ss' from the one-parameter constructor.
+ 	(SynchronizedMap): Implement toString().
+ 
+ Sun Nov 26 23:59:55 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* javax/naming/NameParser.java,
+ 	javax/naming/directory/AttributeInUseException.java,
+ 	javax/naming/directory/AttributeModificationException.java,
+ 	javax/naming/directory/InvalidAttributeIdentifierException.java,
+ 	javax/naming/directory/InvalidAttributesException.java,
+ 	javax/naming/directory/InvalidAttributeValueException.java,
+ 	javax/naming/directory/InvalidSearchControlsException.java,
+ 	javax/naming/directory/InvalidSearchFilterException.java,
+ 	javax/naming/directory/NoSuchAttributeException.java,
+ 	javax/naming/directory/SchemaViolationException.java: New files.
+ 
+ Sun Nov 26 22:35:53 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* javax/naming/InitialContext.java (rebind): Implement.
+ 	(unbind): Implement.
+ 	(rename): Implement.
+ 	(list): Implement.
+ 	(listBindings): Implement.
+ 	(destroySubcontext): Implement.
+ 	(createSubcontext): Implement.
+ 	(lookupLink): Implement.
+ 	(getNameParser): Implement.
+ 	(composeName): Implement.
+ 	(addToEnvironment): Implement.
+ 
+ Sun Nov 26 21:30:25 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* javax/naming/AuthenticationException.java,
+ 	javax/naming/AuthenticationNotSupportedException.java,
+ 	javax/naming/CannotProceedException.java,
+ 	javax/naming/CommunicationException.java,
+ 	javax/naming/ConfigurationException.java,
+ 	javax/naming/ContextNotEmptyException.java,
+ 	javax/naming/InsufficientResourcesException.java,
+ 	javax/naming/InterruptedNamingException.java,
+ 	javax/naming/InvalidNameException.java,
+ 	javax/naming/LimitExceededException.java,
+ 	javax/naming/LinkException.java,
+ 	javax/naming/LinkLoopException.java,
+ 	javax/naming/MalformedLinkException.java,
+ 	javax/naming/NameAlreadyBoundException.java,
+ 	javax/naming/NameNotFoundException.java,
+ 	javax/naming/NamingSecurityException.java,
+ 	javax/naming/NoPermissionException.java,
+ 	javax/naming/NotContextException.java,
+ 	javax/naming/PartialResultException.java,
+ 	javax/naming/ReferralException.java,
+ 	javax/naming/ServiceUnavailableException.java,
+ 	javax/naming/SizeLimitExceededException.java,
+ 	javax/naming/TimeLimitExceededException.java: New files.
+ 
+ 	* javax/naming/Name.java (clone): New method.
+ 	(compareTo): New method.
+ 	(isEmpty): New method.
+ 	(getAll): New method.
+ 	(getPrefix): New method.
+ 	(getSuffix): New method.
+ 	(startsWith): New method.
+ 	(endsWith): New method.
+ 	(addAll): New method.
+ 	(addAll): New method.
+ 	(add): New method.
+ 	(add): New method.
+ 	(remove): New method.
+ 
+ 	* javax/naming/Context.java (lookup): New method.
+ 	(rebind): New method.
+ 	(unbind): New method.
+ 	(rename): New method.
+ 	(list): New method.
+ 	(listBindings): New method.
+ 	(destroySubcontext): New method.
+ 	(createSubcontext): New method.
+ 	(lookupLink): New method.
+ 	(getNameParser): New method.
+ 	(composeName): New method.
+ 	(addToEnvironment): New method.
+ 	(removeFromEnvironment): New method.
+ 	(getEnvironment): New method.
+ 	(close): New method.
+ 	(getNameInNamespace): New method.
+ 
+ 	* javax/naming/InitialContext.java (lookup): New method.
+ 	(rebind): New method.
+ 	(unbind): New method.
+ 	(rename): New method.
+ 	(list): New method.
+ 	(listBindings): New method.
+ 	(destroySubcontext): New method.
+ 	(createSubcontext): New method.
+ 	(lookupLink): New method.
+ 	(getNameParser): New method.
+ 	(composeName): New method.
+ 	(addToEnvironment): New method.
+ 	(removeFromEnvironment): New method.
+ 	(getEnvironment): New method.
+ 	(close): New method.
+ 	(getNameInNamespace): New method.
+ 
+ 2000-11-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (core_java_source_files): Added
+ 	RuntimePermission.java.
+ 	* java/lang/RuntimePermission.java: Imported from Classpath.
+ 	* java/lang/Thread.java (getContextClassLoader): Now
+ 	synchronized.  Added security code.
+ 	(setContextClassLoader): Likewise.
+ 
+ 	* prims.cc (_Jv_NewObjectArray): Use const_cast to initialize
+ 	length field of array.
+ 	(_Jv_NewPrimArray): Likewise.
+ 	* gcj/array.h (__JArray): `length' field now const.  Added
+ 	constructor.
+ 
+ 2000-11-26  Anthony Green  <green@redhat.com>
+ 
+ 	* javax/naming/spi/NamingManager.java,
+ 	javax/naming/spi/ObjectFactory.java,
+ 	javax/naming/spi/InitialContextFactory.java,
+ 	javax/naming/spi/InitialContextFactoryBuilder.java,
+ 	javax/naming/RefAddr.java, javax/naming/Reference.java,
+ 	javax/naming/NamingException.java, javax/naming/Context.java,
+ 	javax/naming/Referenceable.java,
+ 	javax/naming/directory/InitialDirContext.java,
+ 	javax/naming/directory/DirContext.java,
+ 	javax/naming/directory/Attributes.java,
+ 	javax/naming/directory/Attribute.java,
+ 	javax/naming/StringRefAddr.java,
+ 	javax/naming/NamingEnumeration.java, javax/naming/Name.java,
+ 	javax/naming/InitialContext.java,
+ 	javax/naming/NoInitialContextException.java: New files.
+ 
+ 2000-11-25  Anthony Green  <green@redhat.com>
+ 
+ 	* prims.cc (_Jv_NewObjectArray): Undo placement change.
+ 	(_Jv_NewPrimArray): Likewise.
+ 	* gcj/array.h (__JArray): Undo const change.  Removed constructor.
+ 	(class JArray): Removed constructor.
+ 
+ 	* java/lang/Thread.java (context_class_loader): New private data.
+ 	(getContextClassLoader): New method.
+ 	(setContextClassLoader): New method.
+ 	(Thread): Initialize context_class_loader.
+ 
+ 	* java/net/URLClassLoader.java: Import java.util.Enumeration.
+ 	(getResource): Rename to findResource.
+ 	(findResource): New method.  Used to be getResource.
+ 	(getResourceAsStream): Deleted.
+ 	(jarFileize): Extracted logic from URLClassLoader constructor into
+ 	this new private method.
+ 	(addURL): New protected method.
+ 	(URLClassLoader): Call jarFileize.  Use addElement instead of
+ 	insertElementAt.
+ 	(findResources): New method.
+ 
+ 	* java/lang/ClassLoader.java: Import java.util.Enumeration.
+ 	(getResource): Implement correct logic.
+ 	(findResource): New method.
+ 	(getResources): New method.
+ 	(findClass): Create a ClassNotFoundException with the name of the
+ 	class rather than nothing at all.
+ 	(defineClass) Only throw ClassFormatError.
+ 
+ 	* java/lang/Class.java (forName): New method.
+ 	* java/lang/Class.h (forName): New method.
+ 	* java/lang/natClass.cc (forName): New method.
+ 
+ 2000-11-24  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/System.java (setProperties): Only call init_properties()
+ 	if properties is null.
+ 	(getProperties): Ditto.
+ 	(getProperty): Ditto.
+ 	(setProperty): Call init_properties if properties are null.
+ 	(prop_init): Remove field.
+ 	* java/lang/natSystem.cc (init_properties): Synchronize the entire
+ 	method. Check for null properties after synchronizing instead of
+ 	prop_init flag. Set the properties field last for thread safety.
+ 
+ 	* java/io/ObjectInputStream.java (ObjectInputStream): If DEBUG is set,
+ 	test for gcj.dumpobjects property and enable object stream dumping
+ 	if it is set.
+ 	(dumpElement): No longer native.
+ 	(dumpElementln): Ditto.
+ 	(setDump): Do not define.
+ 	* java/io/natObjectInputStream.cc (dumpElement): Removed.
+ 	(dumpElementln): Removed.
+ 	(setDump): Removed.
+ 
+ 2000-11-24  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* configure: Rebuilt.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (built_java_source_files): Add Configuration.java.
+ 	* configure.in: Add Configuration.java to CONFIG_FILES. Set
+ 	LIBGCJDEBUG substitution if --enable-libgcj-debug is specified.
+ 	Create `gnu' directory in the build tree.
+ 	* gnu/classpath/Configuration.java.in: New file.
+ 
+ 2000-11-24  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (_Jv_NewObjectArray): Use placement new to create
+ 	array.
+ 	(_Jv_NewPrimArray): Likewise.
+ 	Include <new>.
+ 	* gcj/array.h (__JArray): `length' field now const.  Added
+ 	constructor.
+ 	(class JArray): Added constructor.
+ 
+ 2000-11-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* name-finder.cc (lookup): Check for a NULL _Jv_argv before attempting
+ 	lookup.
+ 
+ 2000-11-23  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/Vector.java: Improve exception messages.
+ 	(Vector): Check initialCapacity for IllegalArgumentException.
+ 	(tromToSize): Don't check for elementCount == elementData.length
+ 	case.
+ 	(toArray): Don't try to set null marker if target array is the same
+ 	length as the vector.
+ 
+ 2000-11-22  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (core_java_source_files): Added Collections.java.
+ 	* java/util/List.java: Merged from classpath.
+ 	* java/util/Vector.java: Ditto.
+ 	* java/util/Collections.java: From classpath.
+ 	* java/util/ArrayList.java (addAll(Collection)): Call
+ 	addAll(int,Collection) instead of duplicating code.
+ 	(indexOf): Clean up int initialization.
+ 	(clear): Set cleared array entries to null, to allow garbage
+ 	collection.
+ 	* java/util/List.java: Minor formatting fixes.
+ 	* java/util/SimpleTimeZone.java: ditto.
+ 
+ 2000-11-18  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (core_java_source_files): Added new files.
+ 	* java/lang/reflect/ReflectPermission.java: New class.
+ 	* java/io/FileFilter.java: From Classpath
+ 	* java/io/FilePermission.java: From Classpath.
+ 
+ 2000-11-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/AccessibleObject.java (isAccessible,
+ 	setAccessible): Now public.
+ 
+ 	* java/lang/natString.cc: Include Locale.h.
+ 	(toUpperCase): Added `locale' argument.  Handle locale
+ 	sensitivity.
+ 	(toLowerCase): Added `locale' argument.  Handle locale
+ 	sensitivity.
+ 	(ESSET, CAPITAL_S, SMALL_I, CAPITAL_I_WITH_DOT, SMALL_DOTLESS_I,
+ 	CAPITAL_I): New defines.
+ 	* java/lang/String.java (CASE_INSENSITIVE_ORDER): Now public and
+ 	final.
+ 	Import Locale.
+ 	(toUpperCase, toLowerCase): New methods.  Variants which accept
+ 	locale now native.
+ 
+ 	* java/lang/ExceptionInInitializerError.java (printStackTrace):
+ 	New methods.
+ 
+ 	* java/util/PropertyPermission.java: Re-merged from Classpath.
+ 
+ 	* java/text/RuleBasedCollator.java (getCollationElementIterator):
+ 	New method.
+ 	* java/text/StringCharacterIterator.java: Reindented.
+ 	(setText): New method.
+ 
+ 2000-11-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Merge with Classpath (changes by Bryce McKinlay)
+ 	* java/util/jar/*.java: Reformat all to unofficial standard coding
+ 	style. No changes of substance.
+ 
+ 2000-11-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/*.java: Javadoc updates.
+ 
+ 2000-11-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/text/CollationKey.java: Implement Comparable.
+ 	(compareTo(Object)): New method.
+ 	* java/text/Collator.java (compare(Object,Object)): New method.
+ 	Implement Comparator.
+ 
+ 	* java/util/zip/InflaterInputStream.java (available): New method.
+ 	(close): New method.
+ 	(read, available, skip, fill): Throw exception if stream closed.
+ 	* java/util/zip/ZipInputStream.java (read, skip, readFully, fill,
+ 	getNextEntry): Throw exception if closed.
+ 
+ 2000-11-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/PushbackReader.java: Merged with Classpath.
+ 	* java/util/Arrays.java: Updated from Classpath.
+ 
+ 	* scripts/blocks.pl: New file.
+ 	* java/lang/Character.java (Subset): New class.
+ 	(UnicodeBlock): New class.
+ 
+ 	* java/lang/Math.java (toDegrees, toRadians): New methods.
+ 
+ 	* java/lang/Float.java: Implement Comparable.
+ 	(compareTo): New methods.
+ 	* java/lang/Double.java: Implement Comparable.
+ 	(compareTo): New methods.
+ 
+ 2000-11-16  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/beans/PropertyChangeSupport.java (propertyListeners): Made
+ 	transient.
+ 	(listeners): Made transient.
+ 	(source): Renamed from 'bean'.
+ 	(children): New field for serialization.
+ 	(propertyChangeSupportSerializedDataVersion): Ditto.
+ 	(serialVersionUID): Ditto.
+ 	(writeObject): New serialization method.
+ 	(readObject): New serialization method.
+ 	* java/beans/VetoableChangeSupport.java (propertyListeners): Made
+ 	transient.
+ 	(listeners): Made transient.
+ 	(source): Renamed from 'bean'.
+ 	(children): New field for serialization.
+ 	(vetoableChangeSupportSerializedDataVersion): Ditto.
+ 	(serialVersionUID): Ditto.
+ 	(writeObject): New serialization method.
+ 	(readObject): New serialization method.
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Fixed assert
+ 	to allow constructor to have a return type (i.e. the class that the
+ 	constructor constructs).
+ 
+ 2000-11-14  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (libgcj.zip): Fail immediately if compilation fails
+ 	and -k not given.
+ 
+ 2000-11-02  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectInputStream.java (readObject): Added code to
+ 	conditionally dump out the serialized data.
+ 	Handle ENDBLOCKDATA case a bit more gracefully since the current
+ 	behavior doesn't seem to work as expected.
+ 	(readStreamHeader): Added code for serialized data dumper.
+ 	(readNextBlock): Ditto.
+ 	(readFields): Ditto.
+ 	(dump): New private static field for turning on/off dumper.
+ 	(setDump): New native method.
+ 	(dumpElement): New native method.
+ 	(dumpElementln): New native method.
+ 	* java/io/natObjectInputStream.cc (setDump): New method.
+ 	(dumpElement): New method.
+ 	(dumpElementln): New method.
+ 
+ 2000-11-02  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/net/InetAddress.java (addr): Renamed from 'address'.
+ 	(address): New field to match Serialized Form doc.
+ 	(hostName): Renamed from 'hostname' to match Serialized Form doc.
+ 	(family): New serialization field.
+ 	(serialVersionUID): New field.
+ 	(readObject): New method.
+ 	(writeObject): New method.
+ 	(getFamily): New native method.
+ 	(InetAddress): Set family.
+ 	* java/net/natInetAddress.cc (getFamily): New method.
+ 	(addr): Renamed from 'address'.
+ 	(hostName): Renamed from 'hostname' to match Serialized Form doc.
+ 	* java/net/natPlainDatagramSocketImpl.cc (addr): Renamed from 'address'.
+ 	* java/net/natPlainSocketImpl.cc (addr): Renamed from 'address'.
+ 
+ 2000-11-03  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/AbstractList.java (SubList): Make it a top-level private
+ 	class.
+ 	* java/util/LinkedList.java (remove): Do update modCount and knownMod.
+ 	(add): Ditto.
+ 	* Makefile.am (ordinary_java_source_files): Add LinkedList.java.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-11-02  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (install-exec-hook): Make `.la' link, not `.so'
+ 	link.
+ 
+ 2000-11-02  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/AbstractList.java (remove): Comment out modCount increment
+ 	to work around compiler bug.
+ 	(add): Ditto.
+ 
+ 2000-11-02  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/AbstractList.java: Throw messages with
+ 	IndexOutOfBoundsExceptions.
+ 	 (listIterator()): Call listIterator(0).
+ 	(size): New field. Initialize to size().
+ 	(hasNext): Test position against size, not size().
+ 	(remove): Increment knownMod by one instead of resetting it from
+ 	modCount.
+ 	(add): Ditto.
+ 	(SubList.upMod): Removed.
+ 	(SubList.set): Don't call upMod() or update knownMod.
+ 	(SubList.add(int,Object)): Increment modCount instead of caling upMod().
+ 	(SubList.remove): Ditto.
+ 	(SubList.addAll): Don't call backingList.size(). Increment size from
+ 	c.size().
+ 	(SubList.iterator): New method. Call listIterator(0).
+ 	(SubList.listIterator): New method. Restore code to return an anonymous
+ 	listIterator implementation (with some changes).
+ 	* java/util/AbstractSequentialList.java: Throw messages with
+ 	IndexOutOfBoundsExceptions.
+ 	(addAll): Add a specnote.
+ 	* java/util/ArrayList.java (removeRange): Get the math right.
+ 	(addAll): Increment modCount _before_ creating iterator.
+ 	* java/util/LinkedList.java: Rewritten, mostly.
+ 
+ 2000-11-01  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* scripts/encodings.pl: Added `ASCII' alias.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (convert_source_files): Added new files.
+ 	* gnu/gcj/convert/Input_ASCII.java: New file.
+ 	* gnu/gcj/convert/Output_ASCII.java: New file.
+ 	* gnu/gcj/convert/Output_8859_1.java (write): Use `?' to represent
+ 	out-of-range characters.
+ 	* gnu/gcj/convert/natIconv.cc (iconv_init): New method.
+ 	(read): Swap bytes if required.  Treat `count' as character count,
+ 	not byte count.
+ 	(write): Likewise.  Also, handle case where iconv fails on a given
+ 	character.
+ 	(init): Put encoding into exception.
+ 	* gnu/gcj/convert/IOConverter.java (iconv_byte_swap): New global.
+ 	(static): Call iconv_init.  Rebuilt alias list.
+ 	(iconv_init): New private method.
+ 
+ 2000-11-01  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (install-exec-hook): Only make a single symlink, and
+ 	remove the destination before making the link.
+ 	* configure: Rebuilt.
+ 	* configure.in: Call AC_PROG_LN_S.
+ 
+ 2000-10-31  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* jni.cc: Added include of java/lang/ThreadGroup.h.
+ 	* gcj/javaprims.h: Removed Replaceable and Resolvable from namespace
+ 	per change of 2000-10-05.
+ 
+ 2000-10-30  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/BitSet.java: Updated @specnote.
+ 
+ 	* java/io/Reader.java: Merge docs from classpath.
+ 	(skip): Synchronize on `lock'.
+ 	* java/io/FileReader.java: Import correct implementation from
+ 	classpath.
+ 	* java/io/StringReader.java: Merge docs from classpath.
+ 	(ready): Throw IOException if stream is closed.
+ 
+ 2000-10-29  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/AbstractCollection.java (addAll): Use size() instead of
+ 	hasNext() in iterator loop.
+ 	(clear): Ditto.
+ 	(contains): Ditto. Simplify loop.
+ 	(containsAll): Ditto.
+ 	(remove): Ditto.
+ 	(removeAll): Ditto.
+ 	(retainAll): Ditto.
+ 	(toArray): Ditto.
+ 	(toString): Ditto. Use string concatenation operators, not
+ 	StringBuffer.
+ 	* java/util/AbstractList.java (addAll): Use size() instead of
+ 	hasNext() in iterator loop.
+ 	(equals): Ditto.
+ 	(hashCode): Ditto.
+ 	(indexOf): Ditto. Don't take null check outside of the loop.
+ 	(iterator): Return an AbstractListItr instead of anonymous class.
+ 	(lastIndexOf): Use a for loop bounded by size() instead of
+ 	hasPrevious() in iterator loop.
+ 	(listIterator): Return an AbstractListItr.
+ 	(removeRange): Remove bounds checking code and docs.
+ 	(AbstractListItr): New inner class. Code moved here from
+ 	listIterator().
+ 	(SubList.iterator): Removed. Use default implementation from
+ 	AbstractList instead.
+ 	(SubList.listIterator): As above.
+ 	* java/util/AbstractMap.java (clear): Use a for loop bounded by size()
+ 	instead of hasNext() in iterator loop.
+ 	(containsValue): Ditto.
+ 	(equals): Ditto.
+ 	(get): Ditto.
+ 	(put): Ditto.
+ 	(putAll): Ditto.
+ 	(remove): Ditto.
+ 	(toString): Ditto. Use string concatenation operators, not
+ 	StringBuffer.
+ 	* java/util/AbstractSequentialList.java (addAll): Use a for loop
+ 	bounded by size() instead of hasNext() in iterator loop.
+ 	* java/util/AbstractSet.java (hashCode): Don't catch exception as
+ 	part of normal execution flow. Do an explicit null check instead.
+ 	* java/util/ArrayList.java (_iSize): Rename to `size'.
+ 	(_arData): Rename to `data'.
+ 	(get): Check lower bounds also. Simplify IndexOutOfBoundsException
+ 	message.
+ 	(remove): Ditto.
+ 	(removeRange): Make protected. Don't check bounds.
+ 	(add): Check lower bounds also. Simplify IndexOutOfBoundsException
+ 	message.
+ 	(addAll (Collection)): Use a size-bounded for loop instead of hasNext()
+ 	check.
+ 	(addAll (int, Collection)): Check lower bounds. Simplify exception
+ 	string.
+ 	(clone): Clone the data array too.
+ 	(indexOf): Inline doesEqual().
+ 	(lastIndexOf): Ditto.
+ 	(clear): Don't set array data to null.
+ 	(set): Check lower bounds. Simplify exception string.
+ 	(toArray): Correct comment.
+ 	(trimToSize): Don't update modCount, this is not a structural change.
+ 	Add comment.
+ 
+ 	* java/util/BitSet.java: Merged with classpath, new JDK 1.2 methods
+ 	implemented.
+ 	(toString): Declare `bit' as long, not int.
+ 	(data): Made package-private, not private.
+ 
+ 2000-10-27  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/util/natGregorianCalendar.cc (computeFields): Set the isSet__
+ 	array elements to true.
+ 
+ 2000-10-27  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* Makefile.am: Added locale files from Classpath.
+ 	* Makefile.in: Rebuilt.
+ 	* gnu/java/locale/Calendar.java: New file.
+ 	* gnu/java/locale/Calendar_de.java: New file.
+ 	* gnu/java/locale/Calendar_en.java: New file.
+ 	* gnu/java/locale/Calendar_nl.java: New file.
+ 	* java/lang/ClassNotFoundException.java: Replaced with Classpath file.
+ 	* java/math/BigDecimal.java (intVal): Renamed from 'num' for
+ 	serialization compatibility.
+ 	(scale): Made private.
+ 	(serialVersionUID): New field.
+ 	* java/math/BigInteger.java (ival): Made transient.
+ 	(words): Made transient.
+ 	(bitCount): New serialization field.
+ 	(bitLength): Ditto.
+ 	(firstNonzeroByteNum): Ditto.
+ 	(lowestSetBit): Ditto.
+ 	(magnitude): Ditto.
+ 	(signum): Ditto.
+ 	(serialVersionUID): New field.
+ 	(readObject): New method.
+ 	(writeObject): New method.
+ 	* java/util/BitSet.java (serialVersionUID): New field.
+ 	* java/util/Calendar.java: Replaced with Classpath file.
+ 	* java/util/GregorianCalendar.java (GregorianCalendar): Pass result
+ 	of getDefault() for TimeZone or Locale instead of passing nulls.
+ 	* java/util/Locale.java (serialVersionUID): New field.
+ 	(writeObject): New method.
+ 	(readObject): New method.
+ 	* java/util/SimpleTimeZone.java: Replaced with Classpath file.
+ 
+ 2000-10-25  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* Makefile.am (GCJCOMPILE): Pass --tag=GCJ to libtool.
+ 	(core_java_source_files): Put java.lang, java.io, and java.util here.
+ 	(ordinary_java_source_files): Order so that core_java_source_files are
+ 	built first.
+ 	(java_source_files): Reorder so that special_java_source_files are
+ 	built first.
+ 	* configure.in: Don't pass -I flag to gcj.
+ 	* Makefile.in: Rebuilt.
+ 	* configure: Rebuilt.
+ 
+ 2000-10-25  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (install-exec-hook): New target.
+ 
+ 2000-10-24  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/EventObject.java: Merged from classpath.
+ 
+ 	* java/lang/ThreadGroup.java (uncaughtException): Print thread name
+ 	with stack dump.
+ 
+ 2000-10-23  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* java/util/AbstractSet.java (equals): Re-installed original code.
+ 
+ 2000-10-22  Rolf W. Rasmussen  <rolfwr@ii.uib.no>
+ 
+ 	* Makefile.am: Added rules for libgcjx library.
+ 	* Makefile.in: Rebuilt.
+ 	* configure.in: Added check for X.
+ 	* configure: Rebuilt.
+ 	* gnu/awt/LightweightRedirector.java: New file.
+ 	* gnu/awt/j2d/AbstractGraphicsState.java: New file.
+ 	* gnu/awt/j2d/DirectRasterGraphics.java: New file.
+ 	* gnu/awt/j2d/Graphics2DImpl.java: New file.
+ 	* gnu/awt/j2d/IntegerGraphicsState.java: New file.
+ 	* gnu/awt/j2d/MappedRaster.java: New file.
+ 	* gnu/awt/xlib/XCanvasPeer.java: New file.
+ 	* gnu/awt/xlib/XEventLoop.java: New file.
+ 	* gnu/awt/xlib/XEventQueue.java: New file.
+ 	* gnu/awt/xlib/XFontMetrics.java: New file.
+ 	* gnu/awt/xlib/XFramePeer.java: New file.
+ 	* gnu/awt/xlib/XGraphics.java: New file.
+ 	* gnu/awt/xlib/XGraphicsConfiguration.java: New file.
+ 	* gnu/awt/xlib/XPanelPeer.java: New file.
+ 	* gnu/awt/xlib/XToolkit.java: New file.
+ 	* gnu/gcj/xlib/Clip.java: New file.
+ 	* gnu/gcj/xlib/Colormap.java: New file.
+ 	* gnu/gcj/xlib/Display.java: New file.
+ 	* gnu/gcj/xlib/Drawable.java: New file.
+ 	* gnu/gcj/xlib/Font.java: New file.
+ 	* gnu/gcj/xlib/GC.java: New file.
+ 	* gnu/gcj/xlib/Pixmap.java: New file.
+ 	* gnu/gcj/xlib/Screen.java: New file.
+ 	* gnu/gcj/xlib/Visual.java: New file.
+ 	* gnu/gcj/xlib/WMSizeHints.java: New file.
+ 	* gnu/gcj/xlib/Window.java: New file.
+ 	* gnu/gcj/xlib/WindowAttributes.java: New file.
+ 	* gnu/gcj/xlib/XAnyEvent.java: New file.
+ 	* gnu/gcj/xlib/XButtonEvent.java: New file.
+ 	* gnu/gcj/xlib/XColor.java: New file.
+ 	* gnu/gcj/xlib/XConfigureEvent.java: New file.
+ 	* gnu/gcj/xlib/XConnectException.java: New file.
+ 	* gnu/gcj/xlib/XEvent.java: New file.
+ 	* gnu/gcj/xlib/XException.java: New file.
+ 	* gnu/gcj/xlib/XExposeEvent.java: New file.
+ 	* gnu/gcj/xlib/XID.java: New file.
+ 	* gnu/gcj/xlib/XImage.java: New file.
+ 	* gnu/gcj/xlib/XUnmapEvent.java: New file.
+ 	* gnu/gcj/xlib/natClip.cc: New file.
+ 	* gnu/gcj/xlib/natColormap.cc: New file.
+ 	* gnu/gcj/xlib/natDisplay.cc: New file.
+ 	* gnu/gcj/xlib/natDrawable.cc: New file.
+ 	* gnu/gcj/xlib/natFont.cc: New file.
+ 	* gnu/gcj/xlib/natGC.cc: New file.
+ 	* gnu/gcj/xlib/natPixmap.cc: New file.
+ 	* gnu/gcj/xlib/natScreen.cc: New file.
+ 	* gnu/gcj/xlib/natVisual.cc: New file.
+ 	* gnu/gcj/xlib/natWMSizeHints.cc: New file.
+ 	* gnu/gcj/xlib/natWindow.cc: New file.
+ 	* gnu/gcj/xlib/natWindowAttributes.cc: New file.
+ 	* gnu/gcj/xlib/natXAnyEvent.cc: New file.
+ 	* gnu/gcj/xlib/natXButtonEvent.cc: New file.
+ 	* gnu/gcj/xlib/natXColor.cc: New file.
+ 	* gnu/gcj/xlib/natXConfigureEvent.cc: New file.
+ 	* gnu/gcj/xlib/natXException.cc: New file.
+ 	* gnu/gcj/xlib/natXExposeEvent.cc: New file.
+ 	* gnu/gcj/xlib/natXImage.cc: New file.
+ 	* gnu/gcj/xlib/natXUnmapEvent.cc: New file.
+ 	* java/awt/EventDispatchThread.java: Start thead on creation.
+ 
+ 2000-10-20  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	From Arno J. Klaassen:
+ 	* interpret.cc: Include <stdlib.h> for alloca.
+ 	* defineclass.cc: Include <stdlib.h> for alloca.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am: Include deps.mk.
+ 	(GCJCOMPILE): Added -MD, -MT, and -MF.
+ 	($(javao_files)): Don't depend on libgcj.zip.
+ 	(all-recursive): New target.
+ 	(%.lo:%.cc): Do dependency tracking.
+ 	($(nat_headers)): Don't depend on libgcj.zip.
+ 	* configure: Rebuilt.
+ 	* configure.in: Make .d files and deps.mk.
+ 
+ 2000-10-13  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* exception.cc: Don't #include "exception".
+ 	(_Jv_eh_alloc): Call abort (), not terminate (), if malloc fails.
+ 
+ 	* Makefile.am (libgcj_la_LDFLAGS): Link in libsupc++.
+ 	* Makefile.in: Updated.
+ 
+ 2000-10-11  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/awt/peer/ChoicePeer.java (addItem): Removed.
+ 	* java/awt/peer/ComponentPeer.java (disable): Removed.
+ 	(enable): Removed.
+ 	(hide): Removed.
+ 	(minimumSize): Removed.
+ 	(preferredSize): Removed.
+ 	(reshape): Removed.
+ 	(show): Removed.
+ 	* java/awt/peer/ListPeer.java (addItem): Removed.
+ 	(clear): Removed.
+ 	(minimumSize): Removed.
+ 	(preferredSize): Removed.
+ 	(setMultipleSelections): Removed.
+ 	* java/awt/peer/MenuBarPeer.java (add): Renamed from addMenu.
+ 	(remove): Renamed from removeMenu.
+ 	* java/awt/peer/MenuItemPeer.java (disable): Removed.
+ 	(enable): Removed.
+ 	* java/awt/peer/MenuPeer.java (add): Renamed from addItem.
+ 	(remove): Renamed from removeItem.
+ 	* java/awt/peer/TextAreaPeer.java (insertText): Removed.
+ 	(getMinimumSize): Removed.
+ 	(getPreferredSize): Removed.
+ 	(minimumSize): Removed.
+ 	(preferredSize): Removed.
+ 	(replaceText): Removed.
+ 	* java/awt/peer/TextFieldPeer.java (minimumSize): Removed.
+ 	(preferredSize): Removed.
+ 	(getMinimumSize): Removed.
+ 	(getPreferredSize): Removed.
+ 	(setEchoCharacter): Removed.
+ 
+ 2000-10-10  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* gnu/gcj/text/LocaleData_en.java (monetarySeparator): Added.
+ 	* java/sql/Date.java (serialVersionUID): New field.
+ 	* java/sql/Time.java (serialVersionUID): New field.
+ 	* java/sql/Timestamp.java (serialVersionUID): New field.
+ 	* java/text/ChoiceFormat.java (serialVersionUID): New field.
+ 	* java/text/DateFormat.java (getDateTimeInstance (int)): Removed.
+ 	* java/text/DateFormatSymbols.java (serialVersionUID): New field.
+ 	* java/text/DecimalFormat.java (serialVersionOnStream): New field.
+ 	(readObject): New serialization method.
+ 	* java/text/DecimalFormatSymbols.java (monetarySeparator): New field.
+ 	(serialVersionOnStream): New field.
+ 	(readObject): New serialization method.
+ 	(getMonetaryDecimalSeparator): New method.
+ 	(setMonetaryDecimalSeparator): New method.
+ 	* java/text/NumberFormat.java (maxFractionDigits): New field.
+ 	(maxIntegerDigits): New field.
+ 	(minFractionDigits): New field.
+ 	(minIntegerDigits): New field.
+ 	(serialVersionOnStream): New field.
+ 	(serialVersionUID): New field.
+ 	(readObject): New serialization method.
+ 	(writeObject): New serialization method.
+ 	* java/text/SimpleDateFormat.java (defaultCenturyStart): Initialized.
+ 	(serialVersionOnStream): New field.
+ 	(serialVersionUID): New field.
+ 	(readObject): New serialization method.
+ 
+ 2000-10-09  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* configure.in (GCJ): Avoid bogus error message when looking for
+ 	(and not finding) gcj in the build tree.
+ 	* configure: Rebuilt.
+ 
+ 2000-10-09  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Include sys/types.h when checking for socklen_t.
+ 	From Arno J. Klaassen.
+ 
+ 2000-10-09  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* include/jvm.h: Enable __builtin_expect().
+ 
+ 	* name-finder.cc (lookup): Don't trust dladdr() if the address is from
+ 	the main program. Fix for PR libgcj/341.
+ 
+ 2000-10-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/Properties.java: Merged with Classpath version.
+ 
+ 2000-10-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/natField.cc (BooleanClass): Don't define.
+ 	* java/lang/reflect/natArray.cc (BooleanClass): Don't define.
+ 	* java/lang/Class.h (Object): Added `class$' field.
+ 	* java/lang/Object.h (Object): Added `class$' field.
+ 	* defineclass.cc (ClassClass): Use `class$' form.
+ 	(ClassObject): Likewise.
+ 	* resolve.cc (ClassObject): Use `class$' form.
+ 	(ObjectClass): Likewise.
+ 	* interpret.cc (ClassError): Removed.
+ 	* java/net/natPlainDatagramSocketImpl.cc (BooleanClass): Use
+ 	`class$' form.
+ 	(IntegerClass): Likewise.
+ 	* java/net/natPlainSocketImpl.cc (BooleanClass): Use `class$'
+ 	form.
+ 	* java/lang/natClassLoader.cc (CloneableClass): Use `class$' form.
+ 	(ObjectClass, ClassClass, VMClassLoaderClass, ClassLoaderClass,
+ 	SerializableClass): Likewise.
+ 	Include Serializable.h, Cloneable.h.
+ 	* java/lang/natSystem.cc (SystemClass): Removed.
+ 	(init_properties): Use `class$' form.
+ 	* java/lang/natObject.cc (CloneableClass): Removed.
+ 	(clone): Use `class$' form.
+ 	* java/lang/natClass.cc (CloneableClass): Use `class$' form.
+ 	(ObjectClass, ErrorClass, ClassClass, MethodClass, FieldClass,
+ 	ConstructorClass): Likewise.
+ 	* java/lang/reflect/natMethod.cc (ObjectClass): Use `class$' form.
+ 	(ClassClass, VoidClass, ByteClass, ShortClass, CharacterClass,
+ 	IntegerClass, LongClass, FloatClass, DoubleClass): Likewise.
+ 	* java/io/natObjectInputStream.cc (ObjectClass): Use `class$'
+ 	form.
+ 	(ClassClass): Likewise.
+ 	* include/jvm.h (StringClass): Use `class$' form.
+ 	* prims.cc (ObjectClass): Removed.
+ 	(_Jv_RunMain): Use `class$' form.
+ 	(_Jv_AllocObject): Likewise.
+ 	* jni.cc (ClassClass): Use `class$' form.
+ 	(ThrowableClass): Likewise.
+ 	(ObjectClass): Likewise.
+ 	(MethodClass): Likewise.
+ 	(ThreadGroupClass): Likewise.
+ 	(NativeThreadClass): Likewise.
+ 	* boehm.cc (ObjectClass): Removed.
+ 	(ClassClass): Removed.
+ 	(_Jv_MarkObj): Use `class$' form.
+ 	* gcj/field.h (JvFieldIsRef): Use `class$' form.
+ 	Include RawData.h.
+ 
+ 2000-10-05  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* Makefile.am: Removed java/io/Replaceable.java and
+ 	java/io/Resolvable.java.
+ 	* Makefile.in: Rebuilt.
+ 	* gcj/javaprims.h: Removed Replaceable and Resolvable from java.io
+ 	namespace.
+ 	* java/io/ObjectInputStream.java (processResolution): Fixed typo
+ 	in method name.
+ 	(processResolution): Handle readResolve method via reflection with
+ 	removal of Resolvable interface.
+ 	* java/io/ObjectOutputStream.java (writeObject): Handle writeReplace
+ 	method via reflection with removal of Replaceable interface.
+ 	* java/io/Replaceable.java: Removed.
+ 	* java/io/Resolvable.java: Removed.
+ 	* java/security/Key.java (serialVersionUID): New field.
+ 	* java/security/Provider.java (serialVersionUID): New field.
+ 	* java/security/interfaces/DSAPrivateKey.java (serialVersionUID):
+ 	New field.
+ 	* java/security/interfaces/DSAPublicKey.java (serialVersionUID):
+ 	New field.
+ 	* java/sql/DataTruncation.java (serialVersionUID): New field.
+ 	* java/sql/SQLException.java (serialVersionUID): New field.
+ 	* java/sql/SQLWarning.java (serialVersionUID): New field.
+ 	* java/util/Date.java (serialVersionUID): New field.
+ 	(millis): Made transient.
+ 	(readObject): New method.
+ 	(writeObject): New method.
+ 
+ 2000-10-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* gnu/gcj/convert/natIconv.cc (init): Terminate buffer.
+ 
+ 2000-10-02  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* prims.cc (_Jv_argv, _Jv_argc): New fields.
+ 	(JvRunMain): Set _Jv_argv and _Jv_argc.
+ 	* java/awt/Component.java: Minor fixes.
+ 	* java/awt/Image.java (UndefinedProperty): Initialize final field.
+ 	* java/awt/Toolkit.java (systemEventQueue): Removed.
+ 	(getDefaultToolkit): Default to "gnu.awt.gtk.GtkToolkit".
+ 	* java/awt/Window.java (getToolkit): Don't call super.
+ 	* java/awt/image/BufferedImage.java: Fix definite assignment errors.
+ 	* java/awt/peer/ContainerPeer.java (insets): Remove unused method.
+ 	* gnu/awt/gtk/GtkComponentPeer.java: New file.
+ 	* gnu/awt/gtk/GtkContainerPeer.java: New file.
+ 	* gnu/awt/gtk/GtkFramePeer.java: New file.
+ 	* gnu/awt/gtk/GtkMainThread.java: New file.
+ 	* gnu/awt/gtk/GtkToolkit.java: New file.
+ 	* gnu/awt/gtk/GtkWindowPeer.java: New file.
+ 	* gnu/awt/gtk/gtkcommon.cc: New file.
+ 	* gnu/awt/gtk/gtkcommon.h: New file.
+ 	* gnu/awt/gtk/natGtkComponentPeer.cc: New file.
+ 	* gnu/awt/gtk/natGtkContainerPeer.cc: New file.
+ 	* gnu/awt/gtk/natGtkFramePeer.cc: New file.
+ 	* gnu/awt/gtk/natGtkMainThread.cc: New file.
+ 	* gnu/awt/gtk/natGtkToolkit.cc: New file.
+ 	* gnu/awt/gtk/natGtkWindowPeer.cc: New file.
+ 
+ 2000-09-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* posix-threads.cc (_Jv_CondWait): Check to see if we are
+ 	interrupted before modifying the cv's wait set.
+ 	From Corey Minyard.
+ 
+ 2000-09-30  Hans Boehm  <boehm@acm.org>
+ 	    Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Implement bitmap descriptor based marking for Boehm GC.
+ 
+ 	* configure.in: Define JC1GCSPEC. Set it if boehm-gc is used.
+ 	* configure: Rebuilt.
+ 	* libgcj.spec.in: Pass JC1GCSPEC to jc1.
+ 	* include/jvm.h (struct _Jv_VTable): New field `gc_descr'. New inline
+ 	method get_finalizer().
+ 	(struct _Jv_ArrayVTable): Ditto. Declare method array with
+ 	NUM_OBJECT_METHODS elements instead of NUM_OBJECT_METHODS + 1.
+ 	(_Jv_AllocObj): Add new jclass parameter.
+ 	(_Jv_AllocArray): Ditto.
+ 	(_Jv_BuildGCDescr): New prototype.
+ 	* prims.cc (_Jv_AllocObject): Rename parameter `c' to `klass'. Pass
+ 	`klass' to _Jv_AllocObj. Don't set the new object's vtable. Use
+ 	get_finalizer() instead of direct finalizer vtable offset.
+ 	(_Jv_NewObjectArray): Rename parameter `clas' to `klass'. Pass
+ 	`klass' to _Jv_AllocArray. Don't set the new array's vtable.
+ 	(_Jv_NewPrimArray): Call _Jv_FindArrayClass before _Jv_AllocObj. Pass
+ 	`klass' to _Jv_AllocObj. Don't set the new array's vtable.
+ 	* resolve.cc (METHOD_NOT_THERE, METHOD_INACCESSIBLE): New #defines.
+ 	(_Jv_ResolvePoolEntry): Use METHOD_NOT_THERE and METHOD_INACCESSIBLE.
+ 	(_Jv_DetermineVTableIndex): Ditto.
+ 	(_Jv_PrepareClass): Ditto. Remove offset-by-one adjustments from vtable
+ 	calculations to account for new gc_descr field.
+ 	* boehm.cc: #include gc_gcj.h.
+ 	(obj_kind_x, obj_free_list): `#if 0'-ed away.
+ 	(_Jv_MarkObj): Check that vtable doesn't point to a cleared object.
+ 	New commentary from HB. Mark the classes vtable.
+ 	(_Jv_MarkArray): Check that vtable doesn't point to a cleared object.
+ 	(GC_DEFAULT_DESCR): New #define.
+ 	(_Jv_BuildGCDescr): New function. Use GC_DEFAULT_DESCR, for now.
+ 	(_Jv_AllocObj): New parameter `klass'. Use GC_GCJ_MALLOC ().
+ 	(_Jv_AllocArray): New parameter `klass'. Allocate with GC_MALLOC and
+ 	scan conservativly if size is less than min_heap_addr. Set vtable
+ 	pointer of new object before returning.
+ 	(_Jv_AllocBytes): Use GC_MALLOC_ATOMIC, not GC_GENERIC_MALLOC.
+ 	(_Jv_InitGC): Call GC_init_gcj_malloc(). Don't set up marking and
+ 	allocation for obj_kind_x.
+ 	* nogc.cc (_Jv_BuildGCDescr): New function. Return 0.
+ 	(_Jv_AllocObj): Set vtable on returned object.
+ 	(_Jv_AllocArray): Ditto.
+ 	* java/lang/Class.h (_Jv_NewObjectArray): No longer a friend.
+ 	(_Jv_NewPrimArray): Ditto.
+ 	(_Jv_AllocObj): Declare as a friend.
+ 	(_Jv_AllocArray): Ditto.
+ 	* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Copy gc_descr
+ 	from &ObjectClass into new array class. Remove offset-by-one
+ 	adjustments from `method' size calculations to account for gc_descr
+ 	field.
+ 
+ 2000-09-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/awt/Scrollbar.java (removeAdjustmentListener): Use
+ 	`remove', not `add'.
+ 
+ 2000-09-26  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* java/lang/natSystem.cc (file_encoding): Added return statement.
+ 
+ 2000-09-14  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* Makefile.am: Re-work shell commands that exceeded command-line
+ 	length limits.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* java/lang/natRuntime.cc (lt_preloaded_symbols): Define as `extern'.
+ 
+ 	* defineclass.cc: Include alloca.h only if HAVE_ALLOCA_H.
+ 	* java/lang/natDouble.cc: Likewise.
+ 	* java/lang/reflect/natMethod.cc: Likewise.
+ 	* interpret.cc: Likewise.  Fix NULLCHECKs that tested a _Jv_word.
+ 
+ 2000-09-13  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* configure.in (LIBDATASTARTSPEC): Use `%s' to search for
+ 	libgcjdata.a.
+ 	(GCJ): Support single-tree builds.  Add -B`pwd`/ and -I$srcdir.
+ 	* acinclude.m4: Arrange for automake to not bring in a new
+ 	libtool.m4 for LT_AC_PROG_GCJ.  AC_SUBST GCJ.
+ 	* Makefile.am: Leave it up to automake to subst GCJ.
+ 	* aclocal.m4, configure, Makefile.in: Rebuilt.
+ 
+ 2000-09-13  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/natArray.cc (BooleanClass): New define.
+ 	(get): Ensure Boolean class is initialized.
+ 	* java/lang/reflect/natField.cc (BooleanClass): New define.
+ 	(get): Ensure Boolean class is initialized.
+ 
+ 2000-09-13  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/String.java (CASE_INSENSITIVE_ORDER): New static field.
+ 	Initialize with anonymous class.
+ 	(compareToIgnoreCase): New method.
+ 
+ 	* java/lang/ThreadGroup.java (had_uncaught_exception): New field.
+ 	(uncaughtException): Set had_uncaught_exception.
+ 	* prims.cc (JvRunMain): Check value of had_uncaught_exception and
+ 	exit with error status if set.
+ 	(_Jv_RunMain): Ditto.
+ 
+ 2000-09-12  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* configure: Rebuilt with new ../libtool.m4.
+ 
+ 2000-09-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/Field.java (toString): Don't rely on
+ 	Class.toString.
+ 
+ 2000-09-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* gnu/gcj/convert/BytesToUnicode.java (getDefaultDecoder): Let
+ 	default decoder use iconv.
+ 	* gnu/gcj/convert/UnicodeToBytes.java (getDefaultEncoder):
+ 	Let default encoder use iconv.
+ 	* configure: Rebuilt.
+ 	* configure.in: Check for nl_langinfo and <langinfo.h>.
+ 	* java/lang/natSystem.cc (file_encoding): New function.
+ 	(DEFAULT_FILE_ENCODING): Define to file_encoding() if possible.
+ 
+ 2000-09-10  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* acinclude.m4: Simplify the tests for CC and CXX.
+ 	* aclocal.m4, configure: Rebuilt.
+ 
+ 	* acinclude.m4: Include libtool macros from the source tree.
+ 	* aclocal.m4, configure: Rebuilt.
+ 
+ 2000-09-08  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/beans/PropertyChangeEvent.java (serialVersionUID): Added.
+ 	* java/beans/PropertyVetoException.java (serialVersionUID): Added.
+ 	* java/io/File.java (writeObject): Added.
+ 	(readObject): Added.
+ 	(serialVersionUID): Added.
+ 	* java/io/ObjectOutputStream.java (writeObject): Initialized
+ 	fieldsAlreadyWritten before recursion rather than after.
+ 	* java/io/ObjectStreamClass.java (serialVersionUID): Added.
+ 	* java/io/OptionalDataException.java (serialVersionUID): Added.
+ 	(OptionalDataException): Made package private.
+ 	* java/io/SyncFailedException.java (SyncFailedException): Removed
+ 	default constructor to match spec.
+ 	* java/lang/Boolean.java (serialVersionUID): Added.
+ 	* java/lang/Byte.java (serialVersionUID): Added.
+ 	* java/lang/Character.java (serialVersionUID): Added.
+ 	* java/lang/Double.java (serialVersionUID): Added.
+ 	* java/lang/Float.java (serialVersionUID): Added.
+ 	* java/lang/Integer.java (serialVersionUID): Added.
+ 	* java/lang/Long.java (serialVersionUID): Added.
+ 	* java/lang/Number.java (serialVersionUID): Added.
+ 	* java/lang/Short.java (serialVersionUID): Added.
+ 	* java/lang/String.java (serialVersionUID): Added.
+ 	* java/lang/ThreadDeath.java (ThreadDeath): Removed constructor
+ 	to match spec.
+ 	* java/lang/reflect/InvocationTargetException.java
+ 	(serialVersionUID): Added.
+ 	* java/net/URL.java (handler): Made transient.
+ 	(hashCode): Added field for serialization, per spec. and use
+ 	cached value if available.
+ 	(serialVersionUID): Added.
+ 	(URL): Initialize hashCode.
+ 	(set): Adjust hashCode.
+ 	(readObject): New Method to initialize the protocol handler when
+ 	deserializing.
+ 	(writeObject): New method.
+ 	* java/text/BreakIterator.java: Removed 'implements Serializable'.
+ 	* java/text/Collator.java: Removed 'implements Serializable'.
+ 	* java/util/GregorianCalendar.java (serialVersionUID): Added.
+ 	* java/util/Properties.java (serialVersionUID): Added.
+ 	* java/util/Random.java (serialVersionUID): Added.
+ 	(seed): Made private.
+ 	(nextNextGaussian): Made private.
+ 	(haveNextNextGaussian): Made private.
+ 	* java/util/Stack.java (serialVersionUID): Added.
+ 	* java/util/TimeZone.java (serialVersionUID): Added.
+ 	* java/util/Vector.java (serialVersionUID): Added.
+ 
+ 2000-09-07  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* Makefile.am (Thread.h): Don't be friends with native threads
+ 	functions.
+ 	* Makefile.in: Rebuilt.
+ 	* java/lang/Thread.java (interrupt_flag): Make package-private.
+ 
+ 2000-09-06  Jeff Sturm  <jeff.sturm@appnet.com>
+ 
+ 	* include/jvm.h (_Jv_HashCode): Cast object ptr to `unsigned long'
+ 	to avoid long long division.
+ 
+ 2000-09-06  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/Constructor.java (toString): Use `getName' for
+ 	parameter types.
+ 	* java/lang/reflect/Method.java (toString): Use `getName' for
+ 	return type.
+ 
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Accept null
+ 	`args' if method takes no parameters.
+ 
+ 	Fix for PR java.lang/339:
+ 	* java/lang/natPosixProcess.cc (fail): New function.
+ 	(cleanup): New function.
+ 	(startProcess): Use them.  Create pipe so child can communicate
+ 	exec failure back to parent.
+ 
+ 2000-09-05  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc: Change various `JvThrow'
+ 	calls to `throw'.
+ 	(send): Undo last patch. Remove the label only.
+ 	(mcastGrp): Ditto.
+ 	* java/net/natPlainSocketImpl.cc: Change various `JvThrow' calls to
+ 	`throw'.
+ 	* java/net/natInetAdress.cc: Ditto.
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc (mcastGrp): Fix typo.
+ 
+ 2000-09-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* doc/cni.sgml: Updated from master copy.
+ 
+ 2000-09-05  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* gnu/gcj/convert/natIconv.cc (read): Remove unused local.
+ 	(write): Ditto.
+ 	* gnu/gcj/runtime/FileDeleter.java (deleteOnExitNow): Check for null
+ 	stack. Synchronize.
+ 	* java/lang/fdlibm.h: #undef __P if previously defined.
+ 	* java/lang/natSystem.cc (currentTimeMillis): Remove unused local.
+ 	* java/net/natPlainDatagramSocketImpl.cc (send): Remove unreachable
+ 	block.
+ 	(mcastGrp): Ditto.
+ 
+ 2000-09-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/zip/ZipFile.java (ZipFile): Delete file when opened in
+ 	DELETE mode.
+ 
+ 2000-09-04  Anthony Green  <green@redhat.com>
+ 
+ 	Fix for PR java.io/203:
+ 	* java/io/File.java (createTempFile): Obey directory argument.
+ 	Use java.io.tmpdir if needed.  Don't leave FileDescripators open.
+ 	* java/lang/natSystem.cc (init_properties): Use TMPDIR environment
+ 	variable to set java.io.tmpdir on non-WIN32 systems.
+ 
+ 2000-09-04  Anthony Green  <green@redhat.com>
+ 
+ 	* java/io/File.java (deleteOnExit): New method.
+ 	* gnu/gcj/runtime/FileDeleter.java: New class.
+ 	* java/lang/natRuntime.cc (exit): Call
+ 	FileDeleter.deleteOnExitNow()
+ 	* Makefile.am: Add FileDeleter.java.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-09-02  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (GCJCOMPILE): Use -fclasspath, not the CLASSPATH
+ 	environment variable.
+ 
+ 2000-09-01  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/io/StreamTokenizer.java: Don't throw a
+ 	NumberFormatException if a field is numeric as far as the
+ 	StreamTokenizer is concerned but not as far as Double.valueOf() is
+ 	concerned: return a zero instead.
+ 
+ 2000-08-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_CXXFLAGS): Added -fdollars-in-identifiers.
+ 
+ 2000-08-28  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* gnu/gcj/awt/BitMaskExtent.java, gnu/gcj/awt/Buffers.java,
+ 	gnu/gcj/awt/ComponentDataBlitOp.java,
+ 	gnu/gcj/awt/GLightweightPeer.java, java/awt/Graphics2D.java,
+ 	java/awt/RenderingHints.java, java/awt/color/ColorSpace.java,
+ 	java/awt/color/ICC_ColorSpace.java,
+ 	java/awt/color/ICC_Profile.java,
+ 	java/awt/image/BufferedImage.java, java/awt/image/ColorModel.java,
+ 	java/awt/image/ComponentColorModel.java,
+ 	java/awt/image/ComponentSampleModel.java,
+ 	java/awt/image/DataBuffer.java,
+ 	java/awt/image/DataBufferByte.java,
+ 	java/awt/image/DataBufferInt.java,
+ 	java/awt/image/DataBufferUShort.java,
+ 	java/awt/image/DirectColorModel.java,
+ 	java/awt/image/IndexColorModel.java,
+ 	java/awt/image/PackedColorModel.java, java/awt/image/Raster.java,
+ 	java/awt/image/RasterOp.java, java/awt/image/SampleModel.java,
+ 	java/awt/image/SinglePixelPackedSampleModel.java,
+ 	java/awt/image/WritableRaster.java, java/util/zip/ZipFile.java:
+ 	Removed Latin-1 copyright symbols.
+ 	* java/util/zip/ZipFile.java: Indentation fixes.
+ 
+ 2000-08-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/ZipFile.java: Implement OPEN_DELETE mode, new
+ 	constructor, close can delete the file, finalize calls close.
+ 	* java/util/jar/JarFile.java: Constructor that takes mode now
+ 	calls super.
+ 
+ 2000-08-27  Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/ArrayList.java, java/util/Timer.java,
+ 	java/util/LinkedList.java, java/util/TimerTask.java,
+ 	java/util/HashMap.java, java/util/AbstractMap.java,
+ 	java/util/SortedMap.java, java/util/AbstractSequentialList.java,
+ 	java/util/SortedSet.java: Imported from GNU Classpath.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am: Added new files.
+ 
+ 2000-08-26  Anthony Green  <green@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (java/lang/ClassLoader.h): Make _Jv_RunMain a
+ 	friend.
+ 
+ 	* prims.cc: Include ClassLoader.h.
+ 	(_Jv_RunMain): When executing jar files, classpath must be the jar
+ 	file only.  Lose our reference to the system ClassLoader in order
+ 	to get a new one with the correct classpath.
+ 	* java/lang/natSystem.cc (init_properties): When executing a jar
+ 	file, only use the jar file for java.class.path.
+ 
+ 	* gnu/gcj/runtime/VMClassLoader.java: Use the canonical file name
+ 	for bytecode archives.
+ 
+ 	* gnu/gcj/runtime/FirstThread.java: Handle case where manifest
+ 	exists, but not Main-Class.
+ 
+ 2000-08-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/InflaterInputStream.java (read(byte[],int,int)):
+ 	return -1 when fill() has no more data for the Inflater.
+ 
+ 2000-08-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/PrintWriter.java (print(String)): Don't catch IOException,
+ 	write(String) already does.
+ 
+ 2000-08-23  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* gnu/gcj/jni/NativeThread.java (NativeThread): Removed assignment
+ 	to `alive_flag', call `init'.
+ 	(init): New native method.
+ 	* gnu/gcj/jni/natNativeThread.cc (init): New native method
+ 	implementation.
+ 
+ 2000-08-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (java/lang/reflect/Constructor.h): Declare Class as
+ 	a `friend class'.
+ 	(java/lang/reflect/Field.h): Likewise.
+ 	(java/lang/reflect/Method.h): Likewise.
+ 	(gnu/gcj/runtime/VMClassLoader.h): Declare ClassLoader as a
+ 	`friend class'.
+ 
+ 2000-08-21  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/ResourceBundle.java (trySomeGetBundle): Removed
+ 	debugging prints.
+ 
+ Sun Aug 20 21:02:48 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/natSystem.cc (init_properties): Change sourceware
+ 	reference to sources.redhat.com.
+ 
+ 	* include/java-props.h: Add _Jv_Jar_Class_Path.
+ 	* prims.cc: Ditto.  Set it from	`gij -jar file' option.
+ 
+ 	* java/lang/natSystem.cc (init_properties): Set java.class.path
+ 	from
+ 	{gij -jar file}:{CLASSPATH variable}:{-Djava.class.path= or .}
+ 
+ 	* java/util/PropertyPermission.java: Import from GNU Classpath.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am: Add java/util/PropertyPermission.java.
+ 	* java/lang/System.java: Add setProperty method.
+ 
+ 	* gij.cc (main): Add -jar option to execute jar files.
+ 	(help): Describe -jar option.
+ 	* prims.cc (_Jv_RunMain): Add support for jar execution mode.
+ 	* include/jvm.h: Add is_jar argument to _Jv_RunMain.
+ 	* gnu/gcj/runtime/FirstThread.java (main): New method.
+ 
+ 	* java/util/jar/Attributes.java: Correct comment spelling.
+ 
+ 2000-08-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/Adler32.java: Make private variables really private
+ 	* java/util/zip/CRC32.java: Make private variables really private
+ 	* java/util/zip/CheckedInputStream.java: skip() could skip to much
+ 	bytes
+ 	* java/util/zip/InflaterInputStream.java: skip() could skip to
+ 	much bytes
+ 	* java/util/zip/ZipEntry.java: setCompressedSize() didn't check input
+ 	* java/util/zip/ZipFile.java: size() new 1.2 method
+ 	* java/util/zip/ZipInputStream.java: Use createZipEntry not new
+ 	ZipEntry.  since 1.2 available() always returns just 1 or 0 when
+ 	closed
+ 
+ Sun Aug 20 12:33:43 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/jar/JarFile.java: Don't call
+ 	java.util.zip.ZipFile.getEntry twice.  From Mark Wielaard
+ 	<mark@klomp.org>.
+ 
+ Sun Aug 20 09:51:48 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java: Find the JarEntry via the JarFile.
+ 	Read the entire contents of the class file, not just what is
+ 	available().
+ 
+ 	* java/net/JarURLConnection.java: getEntry doesn't take any
+ 	arguments.  Return null if element is null.
+ 
+ 	* java/util/zip/ZipFile.java (getInputStream): Read the compressed
+ 	size from the archive, not the inflated size.
+ 
+ 	* java/util/jar/JarFile.java (getEntry): Don't recurse.  Call
+ 	java.util.zip.ZipFile.getEntry.
+ 
+ 	* gij.cc (help): Change sourceware reference to
+ 	sources.redhat.com.
+ 
+ 2000-08-19  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/zip/ZipInputStream.java (createZipEntry):
+ 	Implemented.
+ 
+ Sat Aug 19 11:00:53 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/jar/Attributes.java, java/util/jar/JarEntry.java,
+ 	java/util/jar/JarException.java, java/util/jar/JarFile.java,
+ 	java/util/jar/JarInputStream.java,
+ 	java/util/jar/JarOutputStream.java, java/util/jar/Manifest.java,
+ 	java/util/Set.java, java/util/Map.java, java/util/Bucket.java,
+ 	java/util/AbstractSet.java, java/util/BasicMapEntry.java,
+ 	java/security/cert/CRL.java, java/security/cert/CRLException.java,
+ 	java/security/cert/Certificate.java,
+ 	java/security/cert/CertificateEncodingException.java,
+ 	java/security/cert/CertificateException.java,
+ 	java/security/cert/CertificateExpiredException.java,
+ 	java/security/cert/CertificateFactory.java,
+ 	java/security/cert/CertificateFactorySpi.java,
+ 	java/security/cert/CertificateNotYetValidException.java,
+ 	java/security/cert/CertificateParsingException.java,
+ 	java/security/cert/X509CRL.java,
+ 	java/security/cert/X509CRLEntry.java,
+ 	java/security/cert/X509Certificate.java,
+ 	java/security/cert/X509Extension.java: Imported from Classpath.
+ 	* java/util/Hashtable.java: Imported from Classpath.
+ 
+ 	* java/util/zip/ZipInputStream.java: Create stub for
+ 	createZipEntry.
+ 
+ 	* gcj/javaprims.h: Updated class list.
+ 
+ 	* Makefile.in, gcj/Makefile.in: Rebuilt.
+ 	* Makefile.am (ordinary_java_source_files): Add these new classes.
+ 
+ 2000-08-16  Rolf W. Rasmussen  <rolfwr@ii.uib.no>
+ 
+ 	* gnu/gcj/awt/ComponentDataBlitOp.java: New file.
+ 	* gnu/gcj/awt/GLightweightPeer.java: New file.
+ 	* java/awt/BorderLayout.java: Implemented all methods.
+ 	* java/awt/Button.java (actionListener, actionCommand): Renamed
+ 	and modifier change.
+ 	(addNotify): Call super.
+ 	(dispatchEventImpl): New method.
+ 	(getListeners): New method.
+ 	(label): Made package-private, not private.
+ 	* java/awt/Canvas.java: Implemented class body.
+ 	* java/awt/Color.java (brighter): New method.
+ 	(darker): New method.
+ 	(hashCode): New method.
+ 	* java/awt/Component.java (visible, enabled, eventMask): Set defaults.
+ 	(getGraphicsConfiguration): Delegate to
+ 	getGraphicsConfigurationImpl().
+ 	(getGraphicsConfigurationImpl): New method.
+ 	(getToolkit): Only return value from peer if not null.
+ 	(isDisplayable): Check with parent.
+ 	(isShowing): No parent implies not showing.
+ 	(getForeground): Check parent property if local is null.
+ 	(getBackground): Likewise.
+ 	(getFont): Likewise.
+ 	(setForeground): Inform peer.
+ 	(setBackground): Likewise
+ 	(setLocale): Invalidate component.
+ 	(getColorModel): Implemented.
+ 	(setLocation): Invalidate, or ignore if no change.
+ 	(setSize): Invalidate, or ignore if no change.
+ 	(setBounds): Invalidate, or ignore if no change.
+ 	(isOpaque): By default, heavyweight implies opaque.
+ 	(isLightweight): Implemented.
+ 	(getMaximumSize): Implemented.
+ 	(doLayout): Implemented, NOP.
+ 	(validate): Implemented, NOP.
+ 	(invalidate): Only propagate to parent if parent was valid.
+ 	(getGraphics): Implemented.
+ 	(getFontMetrics): Implemented.
+ 	(update): Implemented.
+ 	(paintAll): Implemented.
+ 	(repaint): Implemented all repaint methods.
+ 	(print): Implemented.
+ 	(printAll): Implemented.
+ 	(createImage): Implemented.
+ 	(dispatchEvent): Give the peer a chance to handle the event.
+ 	(dispatchEventImpl): Dispatch paint events.
+ 	(enableEvents): Lightweights enable events on parent component.
+ 	(coalesceEvents): Coalesce paint events, and select event type
+ 	using a switch.
+ 	(coalescePaintEvents): New method.
+ 	(processEvent): Fix unfortunate ordering of statements, and call
+ 	correct method for MOUSE_CLICKED.
+ 	(processPaintEvent): New method.
+ 	(addNotify): Allow container to notify children before event
+ 	mask is set in peer.
+ 	(addNotifyContainerChildren): New method.
+ 	(removeNotify): Visibility should not change on removeNotify.
+ 	(paramString): Implemented.
+ 	(list): Implemented two of the list methods.
+ 	* Container (myInsets): Removed, insets are managed by peer.
+ 	(getInsets): Query peer.
+ 	(addImpl): Fix reparenting, enable events for lightweights,
+ 	initialize component array.
+ 	(validate): Call doLayout in validateTree() instead.
+ 	(validateTree): Do nothing if already valid. Call beginValidate(),
+ 	endValidate() on peer. Call validateTree() instead of validate()
+ 	for children that are containers. Mark valid after validation of
+ 	children.
+ 	(setFont): Partial implementation.
+ 	(paint): Implemented.
+ 	(visitChildren): New method.
+ 	(visitChild): New method.
+ 	(update): Implemented.
+ 	(print): Implemented.
+ 	(paintComponents): Implemented.
+ 	(printComponents): Consider translation and clipping.
+ 	(getComponentAt): Ignore invisible children. Return this if no
+ 	child match.
+ 	(addNotify): Call super.
+ 	(addNotifyContainerChildren): New method.
+ 	(paramString): Implemented.
+ 	(list): Implemented.
+ 	* java/awt/EventQueue (invokeAndWait): Get system event queue the
+ 	right way.
+ 	(invokeLater): Likewise.
+ 	(isDispatchThread): Likewise.
+ 	* java/awt/FontMetrics (getLeading): Formula change.
+ 	(getDescent): Consider leading also.
+ 	(getMaxAscent): Default to getAscent().
+ 	(getMaxDescent): Default to getDescent.
+ 	(getMaxAdvance): Return value signifying unknown.
+ 	(charWidth): Both methods implemented.
+ 	(charsWidth): Implemented.
+ 	(bytesWidth): Implemented.
+ 	(getWidths): Implemented.
+ 	* java/awt/Frame.java (NORMAL, ICONIFIED, iconImage, isResizable,
+ 	state): New fields.
+ 	(Frame): Rearragend constuctor chaining to disallow null being
+ 	passed as a graphics configuration.
+ 	(getTitle): Return empty string if null.
+ 	(dispose): Removed.
+ 	(getIconImage): New method.
+ 	(setIconImage): New method.
+ 	(finalize): New method.
+ 	(setMenuBar): Notify peer.
+ 	(isResizable): New method.
+ 	(setResizable): New method.
+ 	(getState): New method.
+ 	(getFont): Removed.
+ 	(remove): Implemented.
+ 	(removeNotify): New method.
+ 	(getFrames): New method.
+ 	* java/awt/Graphics.java: Implemented body of class.
+ 	* java/awt/Graphics2D.java: New file.
+ 	* java/awt/GraphicsConfiguration.java: Enabled part of the API.
+ 	* java/awt/Image.java: Implemented body of class.
+ 	* java/awt/Panel.java (Panel): Call correct super constructor.
+ 	(addNotify): Implemented.
+ 	* java/awt/Rectangle.java (isEmpty): Fixed reversed logic.
+ 	* java/awt/RenderingHints.java: New file.
+ 	* java/awt/Toolkit.java (createComponent): Implemented.
+ 	(getSystemEventQueue): Delegate to getSystemEventQueueImpl().
+ 	* java/awt/Window.java (Window): Two new constructors. Reordered
+ 	constructor chaining.
+ 	(getGraphicsConfigurationImpl): New method.
+ 	(finalize): Call super.
+ 	(addNotify): Call super.
+ 	(pack): Do layout stuff.
+ 	(show): Ensure that peer exists and that component is valid.
+ 	(dispose): Dispose owned children.
+ 	(getOwner): Simplify code, casting null pointers is valid.
+ 	(getGraphicsConfiguration): Ask peer if local value is null.
+ 	* java/awt/event/ActionEvent.java (getActionCommand): Renamed from
+ 	getcmd().
+ 	* java/awt/image/BufferedImage.java: New file.
+ 	* java/awt/image/RasterOp.java: New file.
+ 	* java/awt/peer/ComponentPeer.java (getGraphicsConfiguration):
+ 	More powerful replacement for getColorModel().
+ 	(getColorModel) Removed.
+ 	(setEventMask) New method.
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-08-15  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* java/lang/natClass.cc (finit_name): Initialized with `finit$'.
+ 	(finit_leg_name): New global.
+ 	(java::lang::Class::getDeclaredMethods): Test for `finit$' or
+ 	`$finit$'. This is a backward compatibility hack.
+ 	(java::lang::Class::_getMethods): Likewise.
+ 
+ 2000-08-15  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* include/jvm.h (_Jv_HashCode): New hash code.
+ 
+ 2000-08-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/ByteArrayOutputStream.java: Merged with Classpath.
+ 
+ Sun Aug 13 19:53:01 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* THANKS: More thanks.
+ 
+ 2000-08-10  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/net/natPlainSocketImpl.cc (bind): Don't go to error case
+ 	when errno not set.
+ 	(connect): Likewise.
+ 	(accept): Likewise.
+ 	(getOption): Likewise.
+ 	* java/net/natPlainDatagramSocketImpl.cc (bind): Don't go to error
+ 	case when errno not set.
+ 	(peek): Likewise.
+ 	(send): Likewise.
+ 	(receive): Likewise.
+ 	(mcastGrp): Likewise.
+ 	(setOption): Likewise.
+ 	(getOption): Likewise.
+ 
+ 2000-08-10  Bryce McKinlay  <bryce@albatross.co.nz>
+ 	    John Stracke <francis@ecal.com>
+ 
+ 	* gnu/gcj/protocol/http/Connection.java (gotHeaders): Removed.
+ 	(connect): Don't falsely claim HTTP/1.1 compliance. Call
+ 	getHttpHeaders().
+ 	(disconnect): Don't unset connected flag.
+ 	(getHeaderField (String)): Call connect() if not connected.
+ 	(getHeaderField (int)): Ditto.
+ 	(getHeaderFieldKey): Ditto.
+ 	(getHttpHeaders): Don't call connect().
+ 	* java/net/HttpURLConnection.java (instanceFollowRedirects,
+ 	gotResponseVals): New fields.
+ 	(getResponseCode): Call getResponseVals() conditionally.
+ 	(getResponseMessage): Ditto.
+ 	(getResponseVals): Call connect(). Don't throw FileNotFoundException.
+ 
+ 2000-08-09  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* Makefile.am: Move beans and applet classes to awt_java_source_files.
+ 	* Makefile.in: Rebuilt.
+ 	* java/awt/Color.java (getTransparency): New method.
+ 	* java/awt/Component.java: Various updates.
+ 	* java/awt/Container.java (removeNotify): Call super.removeNotify()
+ 	after dealing with children.
+ 	* java/awt/Toolkit.java (changeSupport): Renamed from pcsupport.
+ 	* java/awt/Window.java: Various new methods and updates.
+ 	* java/awt/color/ICC_Profile.java (getNumComponents): Cast profileID
+ 	to int for switch.
+ 	* java/awt/event/KeyEvent.java (paramString): Initialize `r'.
+ 	* java/awt/event/WindowEvent.java (paramString): Ditto.
+ 	* java/awt/geom/Dimension2D.java (clone): Wrap super call with
+ 	try/catch block.
+ 	* java/awt/geom/Point2D.java (clone): Ditto.
+ 	* java/awt/geom/RectangularShape.java (clone): Ditto.
+ 	* java/awt/image/ColorModel.java (bits, cspace, transparency, hasAlpha,
+ 	isAlphaPremultiplied): Make package-private, not private.
+ 
+ 2000-08-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* gnu/gcj/convert/Input_UTF8.java (read): Fixed handling of
+ 	surrogate characters.
+ 	* gnu/gcj/convert/Output_UTF8.java (standardUTF8): Default to
+ 	true.
+ 	(write): Correct handling of surrogate characters.
+ 
+ 2000-08-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/Method.java (hashCode): Use getName().
+ 	(toString): Likewise.
+ 	* java/lang/reflect/natMethod.cc (getType): Initialize
+ 	exception_types.
+ 
+ 	* java/lang/reflect/Method.java (toString): Use Class.getName, not
+ 	Class.toString.
+ 	* java/lang/reflect/Field.java (toString): Correct formatting.
+ 	From Corey Minyard.
+ 
+ 	* java/io/PipedInputStream.java (read(byte[],int,int)): Mostly
+ 	rewrote.
+ 	(receive): Streamlined.
+ 
+ 2000-08-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/PrintWriter.java: Merged comments from Classpath.
+ 	(printlnUnsynchronized): Removed.
+ 	(println()): Print the separator.
+ 	(println): Call println(), not printlnUnsynchronized.
+ 	(out): Now protected, to match spec.
+ 
+ 2000-08-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/StreamTokenizer.java (TT_NONE): Now private.
+ 	(nextToken): Handle backslashed newline.  From Oskar Liljeblad.
+ 	For PR java.io/301.
+ 
+ 2000-08-03  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectInputStream.java (readFields): Turn off
+ 	readDataFromBlock while reading via GetField.
+ 	(GetField$1.get(String, Object)): Pass Class of default value to
+ 	getField.
+ 	(getField): Allow for null default values.
+ 
+ 	* java/io/ObjectOutputStream.java: Fixed typo in comment.
+ 	(PutField$1.put): Fixed calls of checkType in most of the put
+ 	methods to pass the correct parameter.
+ 	(PutField$1.put(String, Object)): Allow for null value arg.
+ 	(PutField$1.write): Turn off writeDataAsBlocks while writing via
+ 	PutField.
+ 
+ 	* java/io/ObjectStreamClass.java (serialPersistentFields): Fixed
+ 	typo in spec'ed field name.
+ 	(getSerialPersistentFields): Changed spelling of method to match
+ 	the correct spelling of the spec'ed field name.
+ 
+ 2000-08-03  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new files.
+ 
+ 2000-08-03  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* Makefile.am: Add new AWT stubs.
+ 	* java/awt/Canvas.java: New placeholder class.
+ 	* java/awt/Checkbox.java: Ditto.
+ 	* java/awt/CheckboxMenuItem.java: Ditto.
+ 	* java/awt/Choice.java: Ditto.
+ 	* java/awt/Dialog.java: Ditto.
+ 	* java/awt/FileDialog.java: Ditto.
+ 	* java/awt/List.java: Ditto.
+ 	* java/awt/ScrollPane.java: Ditto.
+ 	* java/awt/TextField.java: Ditto.
+ 	* java/awt/datatransfer/Clipboard.java: Ditto.
+ 	* java/awt/Component.java (treeLock): Now a static String. Add comment.
+ 	* java/awt/MenuItem.java (MenuItem): Add default constructor.
+ 	* java/awt/Toolkit.java: Added all methods from J2SE 1.3 API docs.
+ 	Some commented out. Partially implemented.
+ 	* java/awt/natToolkit.cc: Removed file.
+ 
+ 2000-08-03  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* Makefile.am: Make inner class CNI headers depend on libgcj.zip only.
+ 	Fixes "make -j" builds.
+ 	* Makefile.in: Rebuild.
+ 
+ 2000-08-02  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (libgcj_la_SOURCES): Added posix.cc.
+ 	* java/net/natPlainSocketImpl.cc: Include posix.h.
+ 	(accept): Use _Jv_select.
+ 	* java/net/natPlainDatagramSocketImpl.cc: Include posix.h.
+ 	(receive): Use _Jv_select.
+ 	* java/io/natFileDescriptorPosix.cc: Include posix.h.
+ 	(available): Use _Jv_select.
+ 	* java/lang/natSystem.cc: Include posix.h.
+ 	(currentTimeMillis): Use _Jv_gettimeofday.
+ 	* include/posix.h: New file.
+ 	* posix.cc: New file.
+ 
+ 	* scripts/encodings.pl: New file.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (convert_source_files): Added IOConverter.java.
+ 	* gnu/gcj/convert/UnicodeToBytes.java (UnicodeToBytes): Extend
+ 	IOConverter.
+ 	(getDefaultDecodingClass): Canonicalize default encoding name.
+ 	(getEncoder): Likewise.
+ 	* gnu/gcj/convert/BytesToUnicode.java (BytesToUnicode): Extend
+ 	IOConverter.
+ 	(getDefaultDecodingClass): Canonicalize default encoding name.
+ 	(getDecoder): Likewise.
+ 	* gnu/gcj/convert/IOConverter.java: New file.
+ 
+ 2000-08-02  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* interpret.cc (_Jv_InterpMethod::continue1): Type of `fun' changed
+ 	to match C declaration in ffi.h.
+ 	* Makefile.am: Add java/awt/Button.java.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-07-29  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Type of the
+ 	cast of the second argument to `ffi_raw_call' changed to match
+ 	prototype.
+ 
+ 2000-07-26  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* jni.cc (_Jv_JNIMethod::call): Type of the cast of the second
+ 	argument to `ffi_raw_call' changed to match prototype.
+ 
+ 2000-07-31  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/awt/Component.java (toString): Implemented.
+ 	* java/awt/Container.java (addImpl): Remove FIXME. Only call
+ 	dispatchEvent() to dispatch the event.
+ 	(removeImpl): Ditto.
+ 
+ 2000-07-30  Anthony Green  <green@redhat.com>
+ 
+ 	* java/awt/Component.java: Add treeLock object.
+ 	(getTreeLock): Implement.
+ 	(isShowing): Implement.
+ 
+ 2000-07-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/awt/BorderLayout.java (BorderLayout()): New constructor.
+ 
+ 	* java/awt/Frame.java (Frame): Pass `null' to Window constructor.
+ 
+ 	* java/awt/Window.java (addNotify): Wrote.
+ 	(addWindowListener): Wrote.
+ 	(getLocale): Wrote.
+ 	(getWarningString): Wrote.
+ 	(processEvent): Wrote.
+ 	(processWindowEvent): Wrote.
+ 	(removeWindowListener): Wrote.
+ 	(show): Call validate(), setVisible().
+ 	(toBack): Wrote.
+ 	(toFront): Wrote.
+ 
+ 	* java/awt/Toolkit.java (createWindow): Declare.
+ 
+ 	* java/awt/Frame.java (addNotify): Use getToolkit to find
+ 	toolkit.
+ 
+ 	* java/awt/Component.java (invalidate): Wrote.
+ 	(isValid): Wrote.
+ 	(getToolkit): Wrote.
+ 
+ 	* java/awt/Container.java (addContainerListener): Removed
+ 	unnecessary cast.
+ 	(removeContainerListener): Likewise.
+ 	(addImpl): Wrote.
+ 	(add(Component)): Use it.
+ 	(add(String,Component)): Likewise.
+ 	(add(Component,int)): Likewise.
+ 	(add(Component,Object)): Likewise.
+ 	(add(Component,Object,int)): Likewise.
+ 	(doLayout): Wrote.
+ 	(getAlignmentX): Wrote.
+ 	(getAlignmentY): Wrote.
+ 	(getComponentAt): Wrote.
+ 	(getMaximumSize): Wrote.
+ 	(invalidate): Wrote.
+ 	(list(PrintStream,int)): Wrote.
+ 	(list(PrintWriter,int)): Wrote.
+ 	(getMinimumSize): Wrote.
+ 	(getPreferredSize): Wrote.
+ 	(printComponents): Wrote.
+ 	(processContainerEvent): Look at containerListener, not
+ 	componentListener.
+ 	(remove): Added event processing and peer destruction.
+ 	(removeAll): Use remove.
+ 	(removeNotify): Wrote.
+ 	(validate): Wrote.
+ 	(validateTree): Wrote.
+ 
+ 	* java/awt/Scrollbar.java (addNotify): Do nothing if peer exists.
+ 	* java/awt/Label.java (addNotify): Do nothing if peer exists.
+ 	* java/awt/Container.java (addNotify): Don't create Container
+ 	peer.
+ 	* java/awt/Button.java (addNotify): Do nothing if peer exists.
+ 
+ 2000-07-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/awt/Container.java (remove(int)): Wrote.
+ 	(remove(Component)): Wrote.
+ 	(add(Component)): Wrote.
+ 	(add(Component,int)): Wrote.
+ 	(removeAll): Wrote.
+ 	(addNotify): Set our own peer.
+ 	* java/awt/Scrollbar.java (listeners): Changed type.
+ 	(Scrollbar): Don't initialize listeners.
+ 	(addNotify): Wrote.
+ 	(setValue): Call setValues.
+ 	(setMinimum): Likewise.
+ 	(setMaxPriority): Likewise.
+ 	(setVisibleAmount): Likewise.
+ 	(setValues): Wrote.
+ 	(setUnitIncrement): Forward to peer.
+ 	(setLineIncrement): Call setUnitIncrement.
+ 	(setPageIncrement): Call setBlockIncrement.
+ 	(setBlockIncrement): Forward to peer.
+ 	(addAdjustmentListener): Rewrote.
+ 	(removeAdjustmentListener): Rewrote.
+ 	(processAdjustmentEvent): Rewrote.
+ 	(paramString): Wrote.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added Button.java.
+ 	* java/awt/Button.java: New file.
+ 	* java/awt/Toolkit.java (createLabel): Declare.
+ 	(createButton): Likewise.
+ 	(createScrollbar): Likewise.
+ 	(createContainer): Likewise.
+ 	* java/awt/Label.java (addNotify): Wrote.
+ 	(setAlignment): Call setAlignment in the peer.
+ 	(setText): Call setText in the peer.
+ 
+ 2000-07-28  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectOutputStream.java (writeObject): Per spec, call
+ 	NotSerializableException with just the class name.
+ 
+ 2000-07-26  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* interpret.cc (continue1): Insert missing break into switch.
+ 
+ 2000-07-28  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectStreamException.java: Made constructors protected.
+ 
+ 2000-07-27  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/OutputStreamWriter.java (close): Only flush if not
+ 	closed.
+ 
+ 2000-07-27  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* mauve-libgcj: Activated serialization tests.
+ 	* gcj/field.h (getModifiers): Mask off unknown flags.
+ 	* gnu/java/security/provider/SHA.java (munch): Reset buffer to 0 so
+ 	spurious bits don't cause discrepancies.
+ 	* java/io/ObjectOutputStream.java: Fixed typo in comment.
+ 	* java/io/ObjectStreamClass.java: Fixed typos in comments.
+ 	(lookup): Applied patch from Brian Jones <cbj@gnu.org> to optimize.
+ 	(hasClassInitializer): Call getDeclaredMethod instead of getMethod.
+ 	* java/lang/Throwable.java (serialVersionUID): New field.
+ 	* java/lang/reflect/Modifier.java (ALL_FLAGS): Preserve STRICT if used.
+ 	* java/lang/reflect/natConstructor.cc (getModifiers): Mask off
+ 	unknown flags.
+ 	* java/lang/reflect/natMethod.cc: Ditto.
+ 	* java/security/Key.java (serialVersionUID): Removed field for now.
+ 	* java/security/interfaces/DSAPrivateKey.java (serialVersionUID): Ditto.
+ 	* java/security/interfaces/DSAPublicKey.java (serialVersionUID): Ditto.
+ 
+ 2000-07-22  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/awt/geom/RectangularShape.java (getPathIterator):
+ 	Wrote.
+ 
+ 2000-07-23  Rolf W. Rasmussen  <rolfwr@ii.uib.no>
+ 
+ 	* libjava/java/awt/image/ColorModel.java: New file, replaces the
+ 	stub libjava/java/awt/ColorModel.java which was located in the
+ 	wrong package.
+ 	* libjava/java/awt/image/ComponentColorModel.java: New file.
+ 	* libjava/java/awt/image/ComponentSampleModel.java: New file.
+ 	* libjava/java/awt/image/DataBuffer.java: New file.
+ 	* libjava/java/awt/image/DataBufferByte.java: New file.
+ 	* libjava/java/awt/image/DataBufferInt.java: New file.
+ 	* libjava/java/awt/image/DataBufferUShort.java: New file.
+ 	* libjava/java/awt/image/DirectColorModel.java: New file.
+ 	* libjava/java/awt/image/PackedColorModel.java: New file.
+ 	* libjava/java/awt/image/Raster.java: New file.
+ 	* libjava/java/awt/image/SampleModel.java: New file.
+ 	* libjava/java/awt/image/SinglePixelPackedSampleModel.java: New
+ 	file.
+ 	* libjava/java/awt/image/IndexColorModel.java: New file.
+ 	* libjava/java/awt/image/ImageConsumer.java: Removed import of
+ 	java.awt.ColorModel stub.
+ 
+ 	* gnu/gcj/util/BitMaskExtent.java: New file, utility class.
+ 	* gnu/gcj/util/Buffers.java: New file, utility class.
+ 
+ 	* libjava/Makefile.am: Updated to include new files.
+ 	* libjava/Makefile.in: Rebuilt.
+ 
+ 2000-07-23  Oskar Liljeblad <osk@hem.passagen.se>
+ 
+ 	* java/io/StreamTokenizer.java: Merged with classpath.
+ 
+ 2000-07-20  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Updated for new files.
+ 	* java/awt/Adjustable.java (HORIZONTAL, VERTICAL): Set values.
+ 	* java/awt/Label.java: New file.
+ 	* java/awt/Rectangle.java (Rectangle): Extend Rectangle2D.
+ 	(createIntersection, createUnion, getBounds2D): New methods.
+ 	* java/awt/Scrollbar.java: New file.
+ 	* java/awt/Shape.java: Updated to 1.2.
+ 	* java/awt/geom/AffineTransform.java: New file.
+ 	* java/awt/geom/Ellipse2D.java: New file.
+ 	* java/awt/geom/NoninvertibleTransformException.java: New file.
+ 	* java/awt/geom/PathIterator.java: New file.
+ 	* java/awt/geom/Rectangle2D.java: New file.
+ 	* java/awt/geom/RectangularShape.java: New file.
+ 	* java/awt/geom/Point2D.java (Double, Float): New inner classes.
+ 	* java/awt/geom/IllegalPathStateException.java: New file.
+ 
+ 	* scripts/showval.java: New file.
+ 
+ 	* scripts/classes.pl (scan): Print inner classes properly.
+ 	* gcj/javaprims.h: Updated class list.
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Only
+ 	initialize String fields for interpreted classes.  Fixes bug
+ 	reported by Hans Boehm.
+ 
+ 	* java/io/File.java (getParentFile): New method, from Classpath
+ 	via Oskar Liljeblad.
+ 
+ 	* java/util/Vector.java (remove(Object)): Implemented.
+ 
+ 2000-07-19  Jeff Sturm  <jeff.sturm@appnet.com>
+ 
+ 	* java/lang/natThrowable.cc (fillInStackTrace): Check for
+ 	zero return from backtrace().
+ 
+ 2000-07-15  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/awt/EventQueue.java (invokeAndWait): Call postEvent() within
+ 	synchronized block.
+ 	* java/awt/event/InvocationEvent (dispatch): Synchronize on notifier
+ 	before calling notifyAll().
+ 
+ 2000-07-13  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Add missing files from last check-in:
+ 	* java/awt/image/ImageConsumer.java: New file.
+ 	* java/awt/image/ImageProducer.java: New file.
+ 	* java/awt/image/ImageObserver.java: New file.
+ 
+ 2000-07-12  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Merged implementation of java.applet from classpath:
+ 	* java/applet/Applet.java: New file.
+ 	* java/applet/AppletContext.java: New file.
+ 	* java/applet/AppletStub.java: New file.
+ 	* java/applet/AudioClip.java: New file.
+ 
+ 	* Makefile.am: Added new java.applet classes.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-07-12  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	AWT Stuff:
+ 	* java/util/ResourceBundle.java (getLocale): stub.
+ 	* Makefile.am: Added new AWT classes.
+ 	* Makefile.in: Rebuilt.
+ 	* java/awt/AWTEvent.java: Add EVENT_MASK constants, isConsumed,
+ 	constructors. Fix toString() and paramString().
+ 	* java/awt/AWTEventMulticaster.java: New class. Implemented.
+ 	* java/awt/CheckboxGroup.java: New class.
+ 	* java/awt/ColorModel.java: New class.
+ 	* java/awt/Component.java: Added stubs for most methods. Implemented
+ 	event dispatch.
+ 	* java/awt/Container.java: ditto.
+ 	* java/awt/ComponentOrientation.java: New class. Partly implemented.
+ 	* java/awt/Cursor.java: ditto.
+ 	* java/awt/Event.java: Fix paramString().
+ 	* java/awt/EventQueue.java: New class. Implemented.
+ 	* java/awt/Font.java: Added additional stub methods. Implemented
+ 	toString().
+ 	* java/awt/FontMetrics.java: New class. Stubbed.
+ 	* java/awt/GraphicsConfiguration.java: New class. Complete, except for
+ 	Java2D parts.
+ 	* java/awt/Insets.java: New class. Implemented.
+ 	* java/awt/Menu.java: Add new methods. Partially implemented.
+ 	* java/awt/MenuItem.java: Add new methods and fields. Partially
+ 	implemented.
+ 	* java/awt/MenuShortcut.java: New class. Implemented.
+ 	* java/awt/Panel.java: New class. Placeholder.
+ 	* java/awt/PopupMenu.java: New class. Stubbed.
+ 	* java/awt/Rectangle.java: New class. Implemented.
+ 	* java/awt/Toolkit.java: Added getSystemEventQueue() stub.
+ 	* java/awt/event/ActionEvent.java: Implement paramString().
+ 	* java/awt/event/AdjustmentEvent.java: Implement paramString().
+ 	* java/awt/event/ComponentEvent.java: Implement paramString().
+ 	* java/awt/event/ContainerEvent.java: Implement paramString().
+ 	* java/awt/event/FocusEvent.java: Implement paramString().
+ 	* java/awt/event/HierarchyBoundsAdapter.java: New class.
+ 	* java/awt/event/HierarchyBoundsListener.java: New class.
+ 	* java/awt/event/HierarchyEvent.java: New class.
+ 	* java/awt/event/HierarchyListener.java: New class.
+ 	* java/awt/event/InputMethodEvent.java: Implement paramString().
+ 	* java/awt/event/InvocationEvent.java: Implement paramString(). Throw
+ 	exception if !catchExceptions.
+ 	* java/awt/event/ItemEvent.java: Implement paramString().
+ 	* java/awt/event/KeyEvent.java: Implement paramString().
+ 	* java/awt/event/MouseEvent.java: Implement paramString().
+ 	* java/awt/event/PaintEvent.java: Implement paramString().
+ 	* java/awt/event/TextEvent.java: Implement paramString().
+ 	* java/awt/event/WindowEvent.java: Implement paramString().
+ 
+ 	AWT Peer interfaces:
+ 	* java/awt/peer/ButtonPeer.java: New file.
+ 	* java/awt/peer/ListPeer.java: New file.
+ 	* java/awt/peer/CanvasPeer.java: New file.
+ 	* java/awt/peer/MenuBarPeer.java: New file.
+ 	* java/awt/peer/CheckboxMenuItemPeer.java: New file.
+ 	* java/awt/peer/MenuComponentPeer.java: New file.
+ 	* java/awt/peer/CheckboxPeer.java: New file.
+ 	* java/awt/peer/MenuItemPeer.java: New file.
+ 	* java/awt/peer/ChoicePeer.java: New file.
+ 	* java/awt/peer/MenuPeer.java: New file.
+ 	* java/awt/peer/ComponentPeer.java: Implemented.
+ 	* java/awt/peer/PanelPeer.java: New file.
+ 	* java/awt/peer/ContainerPeer.java: Implemented.
+ 	* java/awt/peer/PopupMenuPeer.java: New file.
+ 	* java/awt/peer/DialogPeer.java: New file.
+ 	* java/awt/peer/ScrollPanePeer.java: New file.
+ 	* java/awt/peer/FileDialogPeer.java: New file.
+ 	* java/awt/peer/ScrollbarPeer.java: New file.
+ 	* java/awt/peer/FontPeer.java: New file.
+ 	* java/awt/peer/TextAreaPeer.java: New file.
+ 	* java/awt/peer/FramePeer.java: Implemented.
+ 	* java/awt/peer/TextComponentPeer.java: New file.
+ 	* java/awt/peer/LabelPeer.java: New file.
+ 	* java/awt/peer/TextFieldPeer.java: New file.
+ 	* java/awt/peer/LightweightPeer.java: New file.
+ 	* java/awt/peer/WindowPeer.java: Implemented.
+ 
+ 2000-07-06  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass):
+ 	Initialize static final String fields.
+ 
+ 2000-07-03  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/PrintWriter.java (print): Call write(String), not
+ 	print(String).  See PR libgcj/277.
+ 	(print(String)): Use write, not out.write.
+ 
+ 2000-06-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/jni.h: Include <gcj/array.h>.  Fixes PR libgcj/270.
+ 
+ 2000-06-27  Andrew Haley  <aph@cygnus.com>
+ 
+        * java/io/File.java (createTempFile): Close the FileDescriptor
+        used to create a temp file.  Fixes some of PR 203.
+        * java/io/natFileDescriptorPosix.cc (open): Call garbage
+        collection if we run out of file handles.
+ 
+ 2000-06-28  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* gnu/java/security/provider/Gnu.java: New file.
+ 	* gnu/java/security/provider/SHA.java: New file.
+ 	* gnu/java/security/provider/SHA1PRNG.java: New file.
+ 	* Makefile.am: Added the above files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* java/io/ObjectStreamClass.java (setUID): Use Gnu SHA instead of SHS.
+ 
+ 2000-06-28  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/ThreadGroup.java: Added synchronized flag to many methods.
+ 	(destroyed_flag): Removed.
+ 	(isDestroyed, removeGroup, removeThread): Test for parent == null.
+ 	(activeCount): Added spec note.
+ 
+ 2000-06-27  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/security/Principal.java: New file.
+ 	* Makefile.am: Added Principal.java.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-06-27  Rolf W. Rasmussen  <rolfwr@ii.uib.no>
+ 
+ 	* java/awt/event/MouseEvent.java: Fixed coordinate space
+ 	confusion.
+ 
+ 2000-06-27  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/PushbackInputStream.java (read): If there are characters
+ 	in the buffer, don't also call super.read().
+ 	* java/io/PushbackReader.java (read): If there are characters in
+ 	the buffer, don't also call super.read().
+ 
+ 	* java/lang/Double.java (valueOf): Call parseDouble().
+ 
+ 2000-06-26  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/beans/PropertyChangeEvent.java (oldVal): Renamed to oldValue.
+ 	(newVal): Renamed to newValue.
+ 	* java/beans/PropertyVetoException.java (changeEvent): Renamed to evt.
+ 	* java/beans/beancontext/BeanContextServiceRevokedEvent.java
+ 	(revokeNow): Renamed to invalidateRefs.
+ 	* java/io/OptionalDataException.java: Updated FIXME.
+ 	(eof): New placeholder field.
+ 	(length); Ditto.
+ 	* java/io/WriteAbortedException.java (message): Made transient.
+ 	* java/lang/ClassNotFoundException.java: Updated comments for JDK 1.2.
+ 	* java/lang/Throwable.java (stackTrace): Made transient.
+ 	* java/net/InetAddress.java: Made Serializable.
+ 	* java/security/KeyPair.java: Made Serializable.
+ 	* java/security/Provider.java: Replaced with Classpath version that
+ 	implements serialization and proper methods.
+ 	* java/text/ChoiceFormat.java (strings): Renamed to choiceFormats.
+ 	(limits): Renamed to choiceLimits.
+ 
+ 2000-06-24  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natDouble.cc (parseDouble): Renamed from
+ 	doubleValueOf.
+ 	* java/lang/Double.java (parseDouble): Renamed from
+ 	doubleValueOf.  Now public.
+ 
+ 2000-06-23  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* java/lang/ieeefp.h: Handle ia64, fr30, mcore.
+ 	* java/lang/natThrowable.cc: On IA-64, use __ia64_backtrace.
+ 
+ 2000-06-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/natMethod.cc: Include <alloca.h>.
+ 	* java/lang/natDouble.cc: Always include <alloca.h>.
+ 	Fix for PR libgcj/267.
+ 
+ 2000-06-21  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/ThreadGroup.java (add(Thread)): Rename to addThread() to
+ 	comply with classpath VM spec.
+ 	(add(Group)): Rename to addGroup().
+ 	* java/lang/Thread.java (Thread): Use addThread().
+ 	* java/lang/natThread.cc (finish_): Use removeThread().
+ 
+ 2000-06-20  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/ThreadGroup.java: Merged with classpath.
+ 	* prims.cc (_Jv_RunMain): Don't use `main_group'.
+ 	* gnu/gcj/runtime/FirstThread.java: Remove ThreadGroup constructor
+ 	argument.
+ 	* java/lang/Thread.java (Thread): Bootstrap initial thread from
+ 	ThreadGroup.root if Thread.currentThread is null. Honour the
+ 	ThreadGroup's max priority setting.
+ 
+ 2000-06-18  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natClass.cc (forName): Removed dead code.  Initialize
+ 	returned class.  For PR gcj/260.
+ 
+ 2000-06-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	Fix for PR libgcj/261:
+ 	* include/win32-signal.h (MAKE_THROW_FRAME): Added `_exception'
+ 	argument.
+ 	* include/sparc-signal.h (MAKE_THROW_FRAME): Added `_exception'
+ 	argument.  (This is a patch from long ago that somehow went
+ 	missing.)
+ 
+ 2000-06-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* gnu/gcj/convert/natIconv.cc (iconv_adapter): New function.
+ 	(read): Use it.
+ 	(write): Likewise.
+ 
+ 2000-06-15  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Fix for PR java.lang/258:
+ 	* prims.cc (_Jv_PrimClass): Set state of primitive class to
+ 	JV_STATE_DONE, to prevent accidental initialization.
+ 	* java/lang/natClass.cc (_Jv_IsAssignableFrom): Call
+ 	_Jv_InterfaceAssignableFrom if target is an interface and source is an
+ 	interface or an abstract class.	Remove redundant initializeClass calls.
+ 	Remove duplicate if_idt test.
+ 	(_Jv_InterfaceAssignableFrom): New function.
+ 	* java/lang/Class.h (_Jv_InterfaceAssignableFrom): Prototype.
+ 
+ 2000-05-31  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (DECLARE_PRIM_TYPE): Define a vtable as well.
+ 	(_Jv_PrimClass): Set `methods' by calling _Jv_FindArrayClass.
+ 	* include/jvm.h (struct _Jv_ArrayVTable): Declare.
+ 	(NUM_OBJECT_METHODS): New define.
+ 	* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Added
+ 	`array_vtable' parameter.  Added assertion.
+ 	* java/lang/Class.h (_Jv_FindArrayClass): Added `array_vtable'
+ 	parameter.
+ 
+ 2000-05-31  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* gcj/cni.h: Include <string.h>.
+ 	* defineclass.cc: Include <alloca.h>.
+ 	* interpret.cc: Ditto.
+ 	* gij.cc: Include <stdlib.h>.
+ 
+ 2000-05-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/name-finder.h: Include <sys/wait.h>.
+ 	(_Jv_name_finder::pid): Now of type `pid_t'.
+ 	(_Jv_name_finder::~_Jv_name_finder): Call waitpid().
+ 	* java/lang/Throwable.java (CPlusPlusDemangler.close): Call
+ 	`proc.waitFor()'.
+ 
+ 2000-05-24  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectOutputStream.java (writeObject): Use component type
+ 	when writing arrays.
+ 	Fixed typo.
+ 
+ 2000-05-20  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Fix for PR libgcj/226:
+ 	* java/lang/Class.h (_Jv_InitClass): Don't call __builtin_expect,
+ 	since this is an installed header.
+ 
+ 	Fix for PR libgcj/228:
+ 	* java/util/zip/ZipFile (getInputStream): Create inflater with
+ 	nowrapper option.
+ 
+ 	* java/util/zip/natInflater.cc (inflate): Throw zlib's error message
+ 	with DataFormatException.
+ 
+ 2000-05-20  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (hack1): Removed.
+ 	(awto_files): Likewise.
+ 	(libgcjawt_la_SOURCES): Likewise.
+ 	(EXTRA_libgcjawt_la_SOURCES): Likewise.
+ 	(libgcjawt_la_DEPENDENCIES): Likewise.
+ 	(libgcjawt_la_LIBADD): Likewise.
+ 	(libgcjawt_la_LDFLAGS): Likewise.
+ 	(libgcjawt_la_LINK): Likewise.
+ 	($(awt_java_source_files:.java=.class)): Likewise.
+ 	(libgcj.zip): Don't depend on AWT files.
+ 	(MOSTLYCLEANFILES): Don't include AWT files.
+ 	($(awto_files)): Removed.
+ 	(nat_headers): Removed AWT files.
+ 	(cond_awt_java_source_files): Removed.
+ 	(ordinary_java_source_files): Added awt_java_source_files.
+ 	* libgcj.spec.in (*lib): Removed -lgcjawt.
+ 	* configure: Rebuilt.
+ 	* configure.in: Removed --enable-java-awt option.
+ 
+ 2000-05-20  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/zip/ZipEntry.java: Implement Cloneable, per JDK1.2 docs.
+ 	(ZipEntry): Copy the `name' field.
+ 	(clone): Implement JDK1.2 method.
+ 	(setCompressedSize): ditto.
+ 	(hashCode): ditto.
+ 
+ 2000-05-19  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/BufferedWriter.java: Merged with Classpath.
+ 	* java/io/BufferedOutputStream.java: Merged with Classpath.
+ 
+ 2000-05-16  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* sysdep/ia64.c (ia64_backtrace_helper): Pass NULL pointer to
+ 	build_ia64_frame_state.
+ 	* sysdep/ia64-frame.h (build_ia64_frame_state): Match with
+ 	defintion in gcc.
+ 
+ 2000-05-15  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* gnu/gcj/beans/BeanInfoEmbryo.java: Removed.
+ 	* gnu/gcj/beans/EmptyBeanInfo.java: Removed.
+ 	* gnu/gcj/beans/ExplicitBeanInfo.java: Removed.
+ 	* gnu/gcj/beans/IntrospectionIncubator.java: Removed.
+ 	* gnu/gcj/beans/editors/ColorEditor.java: Removed.
+ 	* gnu/gcj/beans/editors/FontEditor.java: Removed.
+ 	* gnu/gcj/beans/editors/NativeBooleanEditor.java: Removed.
+ 	* gnu/gcj/beans/editors/NativeByteEditor.java: Removed.
+ 	* gnu/gcj/beans/editors/NativeDoubleEditor.java: Removed.
+ 	* gnu/gcj/beans/editors/NativeFloatEditor.java: Removed.
+ 	* gnu/gcj/beans/editors/NativeIntEditor.java: Removed.
+ 	* gnu/gcj/beans/editors/NativeLongEditor.java: Removed.
+ 	* gnu/gcj/beans/editors/NativeShortEditor.java: Removed.
+ 	* gnu/gcj/beans/editors/StringEditor.java: Removed.
+ 	* gnu/gcj/beans/info/ComponentBeanInfo.java: Removed.
+ 	* gnu/gcj/io/ClassLoaderObjectInputStream.java: Removed.
+ 	* gnu/gcj/io/NullOutputStream.java: Removed.
+ 	* gnu/gcj/io/ObjectIdentityWrapper.java: Removed.
+ 	* gnu/gcj/lang/ArrayHelper.java: Removed.
+ 	* gnu/gcj/lang/ClassHelper.java: Removed.
+ 	* gnu/gcj/lang/reflect/TypeSignature.java: Removed.
+ 
+ 	* gnu/java/beans/BeanInfoEmbryo.java: New file.
+ 	* gnu/java/beans/EmptyBeanInfo.java: New file.
+ 	* gnu/java/beans/ExplicitBeanInfo.java: New file.
+ 	* gnu/java/beans/IntrospectionIncubator.java: New file.
+ 	* gnu/java/beans/editors/ColorEditor.java: New file.
+ 	* gnu/java/beans/editors/FontEditor.java: New file.
+ 	* gnu/java/beans/editors/NativeBooleanEditor.java: New file.
+ 	* gnu/java/beans/editors/NativeByteEditor.java: New file.
+ 	* gnu/java/beans/editors/NativeDoubleEditor.java: New file.
+ 	* gnu/java/beans/editors/NativeFloatEditor.java: New file.
+ 	* gnu/java/beans/editors/NativeIntEditor.java: New file.
+ 	* gnu/java/beans/editors/NativeLongEditor.java: New file.
+ 	* gnu/java/beans/editors/NativeShortEditor.java: New file.
+ 	* gnu/java/beans/editors/StringEditor.java: New file.
+ 	* gnu/java/beans/info/ComponentBeanInfo.java: New file.
+ 	* gnu/java/io/ClassLoaderObjectInputStream.java: New file.
+ 	* gnu/java/io/NullOutputStream.java: New file.
+ 	* gnu/java/io/ObjectIdentityWrapper.java: New file.
+ 	* gnu/java/lang/ArrayHelper.java: New file.
+ 	* gnu/java/lang/ClassHelper.java: New file.
+ 	* gnu/java/lang/reflect/TypeSignature.java: New file.
+ 
+ 	* Makefile.am: Updated for moving Classpath files from gnu/gcj
+ 	namespace back to the original Classpath gnu/java namespace.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* java/beans/Beans.java: Namespace change.
+ 	* java/beans/EventSetDescriptor.java: Namespace change.
+ 	* java/beans/Introspector.java: Namespace change.
+ 	* java/beans/PropertyEditorManager.java: Namespace change.
+ 	* java/io/ObjectInputStream.java: Namespace change.
+ 	* java/io/ObjectOutputStream.java: Namespace change.
+ 	* java/io/ObjectStreamClass.java: Namespace change.
+ 	* java/io/ObjectStreamField.java: Namespace change.
+ 
+ 2000-04-21  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectInputStream.java: Reverted workarounds of 2000-04-13
+ 	now that compiler patch is available.
+ 	Removed unneeded System.loadLibrary.
+ 	* java/io/ObjectOutputStream.java: Removed unneeded System.loadLibrary.
+ 	* java/io/ObjectStreamClass.java: Removed unneeded System.loadLibrary.
+ 
+ 2000-04-19  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* java/lang/natClass.cc (_Jv_IsAssignableFrom): Make sure source
+ 	and target classes have been initialized.
+ 
+ 2000-04-19  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* java/lang/String.java: implement Serializable, Comparable.
+ 	(compareTo (Object)): New method.
+ 
+ 2000-04-19  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectStreamClass.java (getDefinedSUID): Use getDeclaredField
+ 	instead of getField to retrieve non-public field.
+ 	(getSerialPersistantFields): Ditto.
+ 
+ 2000-04-18  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* mauve-libgcj: Turned off object serialization tests temporarily
+ 	due to compiler error.
+ 
+ 2000-04-17  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectInputStream.java (DEBUG): Disabled unused method
+ 	to avoid build problem.
+ 	(DEBUGln): Ditto.
+ 	* mauve-libgcj: Turned on object serialization tests.
+ 
+ 2000-04-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libgcj.spec.in (*lib): Added -lgcjawt.
+ 
+ 2000-04-17  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* Makefile.am: Add new files:
+ 	gnu/gcj/io/SimpleSHSStream.java, gnu/gcj/io/natSimpleSHSStream.cc,
+ 	gnu/gcj/io/shs.cc.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* java/lang/natClass.cc (_Jv_IsAssignableFrom): Check for an
+ 	interface that has no implementations.
+ 	Check for an attempt to assign an abstract class to an interface.
+ 
+ 	* java/io/ObjectStreamClass.java (setUID): Use a SimpleSHSStream
+ 	if we fail to find MessageDigest.getInstance ("SHA").
+ 
+ 	* gnu/gcj/io/SimpleSHSStream.java: New file.
+ 	* gnu/gcj/io/natSimpleSHSStream.java: New file.
+ 	* gnu/gcj/io/shs.cc: New file.
+ 	* gnu/gcj/io/shs.h: new file.
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Make arrays
+ 	serializable.
+ 
+ 	* gnu/gcj/lang/reflect/TypeSignature.java: Don't remove
+ 	punctuation from the classname of an array element.
+ 
+ 	* gcj/javaprims.h: Add SimpleDigestStream.
+ 
+ 2000-04-17  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* java/lang/natClass.cc (getPrivateField): Make recursive calls
+ 	to getPrivateField for superclasses.
+ 
+ 2000-04-14  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* Makefile.am: Add new files:
+ 	java/io/ObjectOutputStream$PutField.h,
+ 	java/io/ObjectInputStream$GetField.h,java/io/natObjectInputStream.cc,
+ 	java/io/natObjectOutputStream.cc
+ 	* Makefile.in: Rebuilt.
+ 	* gcj/Makefile.in: Rebuilt.
+ 	* include/Makefile.in: Rebuilt.
+ 	* java/lang/Class.h (getPrivateField): New method.
+ 	(getPrivateMethod): Ditto.
+ 	Make java::io::ObjectOutputStream, java::io::ObjectInputStream,
+ 	and java::io::ObjectStreamClass our friends.
+ 	* java/lang/natClass.cc (getPrivateField): New method.
+ 	(getPrivateMethod): Ditto.
+ 	(_Jv_IsAssignableFrom): Return false for Interface with no IDT.
+ 	* gcj/javaprims.h: Add serialization classes.
+ 	* java/io/ObjectInputStream.java (setBooleanField): Rewrite in Java.
+ 	(setByteField): Ditto.
+ 	(setCharField): Ditto.
+ 	(setDoubleField): Ditto.
+ 	(setFloatField): Ditto.
+ 	(setIntField): Ditto.
+ 	(setLongField): Ditto.
+ 	(setShortField): Ditto.
+ 	(setObjectField): Ditto.
+ 	* java/io/ObjectOutputStream.java: (getBooleanField): Rewrite in
+ 	Java.
+ 	(getByteField): Ditto.
+ 	(getCharField): Ditto.
+ 	(getDoubleField): Ditto.
+ 	(getFloatField): Ditto.
+ 	(getIntField): Ditto.
+ 	(getLongField): Ditto.
+ 	(getShortField): Ditto.
+ 	(getObjectField): Ditto.
+ 	* java/io/ObjectStreamClass.java (hasClassInitializer): Rewrite in
+ 	Java.
+ 	(getSerialPersistantFields): Ditto.
+ 	(getDefinedSUID): Ditto.
+ 	* java/io/natObjectOutputStream.cc: New file.
+ 	* java/io/natObjectInputStream.cc: New file.
+ 
+ 2000-04-13  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectInputStream.java: Temporary workarounds for compiler
+ 	problems.  Revert to previous version to reproduce and when fixed.
+ 
+ 2000-04-13  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* gnu/gcj/io/ClassLoaderObjectInputStream.java: New file.
+ 	* gnu/gcj/io/NullOutputStream.java: New file.
+ 	* gnu/gcj/lang/reflect/TypeSignature.java: New file.
+ 	* java/io/BlockDataException.java: New file.
+ 	* java/io/Externalizable.java: New file.
+ 	* java/io/InvalidClassException.java: New file.
+ 	* java/io/InvalidObjectException.java: New file.
+ 	* java/io/NotActiveException.java: New file.
+ 	* java/io/NotSerializableException.java: New file.
+ 	* java/io/ObjectInput.java: New file.
+ 	* java/io/ObjectInputStream.java: New file.
+ 	* java/io/ObjectInputValidation.java: New file.
+ 	* java/io/ObjectOutput.java: New file.
+ 	* java/io/ObjectOutputStream.java: New file.
+ 	* java/io/ObjectStreamClass.java: New file.
+ 	* java/io/ObjectStreamConstants.java: New file.
+ 	* java/io/ObjectStreamField.java: New file.
+ 	* java/io/Replaceable.java: New file.
+ 	* java/io/Resolvable.java: New file.
+ 	* java/io/SerializablePermission.java: New file.
+ 	* java/io/WriteAbortedException.java: New file.
+ 	* java/security/BasicPermission.java: New file.
+ 	* java/security/DigestOutputStream.java: New file.
+ 	* java/security/Guard.java: New file.
+ 	* java/security/Permission.java: New file.
+ 	* java/security/PermissionCollection.java: New file.
+ 	* Makefile.am: Added above files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* java/beans/Beans.java (instantiate): Activated serialization code.
+ 	* java/lang/SecurityManager.java (checkPermission): New method.
+ 
+ 2000-04-12  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* gnu/gcj/beans/BeanInfoEmbryo.java: New file.
+ 	* gnu/gcj/beans/EmptyBeanInfo.java: New file.
+ 	* gnu/gcj/beans/ExplicitBeanInfo.java: New file.
+ 	* gnu/gcj/beans/IntrospectionIncubator.java: New file.
+ 	* gnu/gcj/beans/editors/ColorEditor.java: New file.
+ 	* gnu/gcj/beans/editors/FontEditor.java: New file.
+ 	* gnu/gcj/beans/editors/NativeBooleanEditor.java: New file.
+ 	* gnu/gcj/beans/editors/NativeByteEditor.java: New file.
+ 	* gnu/gcj/beans/editors/NativeDoubleEditor.java: New file.
+ 	* gnu/gcj/beans/editors/NativeFloatEditor.java: New file.
+ 	* gnu/gcj/beans/editors/NativeIntEditor.java: New file.
+ 	* gnu/gcj/beans/editors/NativeLongEditor.java: New file.
+ 	* gnu/gcj/beans/editors/NativeShortEditor.java: New file.
+ 	* gnu/gcj/beans/editors/StringEditor.java: New file.
+ 	* gnu/gcj/beans/info/ComponentBeanInfo.java: New file.
+ 	* gnu/gcj/io/ObjectIdentityWrapper.java: New file.
+ 	* gnu/gcj/lang/ArrayHelper.java: New file.
+ 	* gnu/gcj/lang/ClassHelper.java: New file.
+ 	* java/beans/BeanDescriptor.java: New file.
+ 	* java/beans/BeanInfo.java: New file.
+ 	* java/beans/Beans.java: New file.
+ 	* java/beans/Customizer.java: New file.
+ 	* java/beans/DesignMode.java: New file.
+ 	* java/beans/EventSetDescriptor.java: New file.
+ 	* java/beans/FeatureDescriptor.java: New file.
+ 	* java/beans/IndexedPropertyDescriptor.java: New file.
+ 	* java/beans/IntrospectionException.java: New file.
+ 	* java/beans/Introspector.java: New file.
+ 	* java/beans/MethodDescriptor.java: New file.
+ 	* java/beans/ParameterDescriptor.java: New file.
+ 	* java/beans/PropertyChangeEvent.java: New file.
+ 	* java/beans/PropertyChangeListener.java: New file.
+ 	* java/beans/PropertyChangeSupport.java: New file.
+ 	* java/beans/PropertyDescriptor.java: New file.
+ 	* java/beans/PropertyEditor.java: New file.
+ 	* java/beans/PropertyEditorManager.java: New file.
+ 	* java/beans/PropertyEditorSupport.java: New file.
+ 	* java/beans/PropertyVetoException.java: New file.
+ 	* java/beans/SimpleBeanInfo.java: New file.
+ 	* java/beans/VetoableChangeListener.java: New file.
+ 	* java/beans/VetoableChangeSupport.java: New file.
+ 	* java/beans/Visibility.java: New file.
+ 	* java/beans/beancontext/BeanContext.java: New file.
+ 	* java/beans/beancontext/BeanContextChild.java: New file.
+ 	* java/beans/beancontext/BeanContextChildComponentProxy.java: New file.
+ 	* java/beans/beancontext/BeanContextChildSupport.java: New file.
+ 	* java/beans/beancontext/BeanContextContainerProxy.java: New file.
+ 	* java/beans/beancontext/BeanContextEvent.java: New file.
+ 	* java/beans/beancontext/BeanContextMembershipEvent.java: New file.
+ 	* java/beans/beancontext/BeanContextMembershipListener.java: New file.
+ 	* java/beans/beancontext/BeanContextProxy.java: New file.
+ 	* java/beans/beancontext/BeanContextServiceAvailableEvent.java:
+ 	New file.
+ 	* java/beans/beancontext/BeanContextServiceProvider.java: New file.
+ 	* java/beans/beancontext/BeanContextServiceProviderBeanInfo.java:
+ 	New file.
+ 	* java/beans/beancontext/BeanContextServiceRevokedEvent.java: New file.
+ 	* java/beans/beancontext/BeanContextServiceRevokedListener.java:
+ 	New file.
+ 	* java/beans/beancontext/BeanContextServices.java: New file.
+ 	* java/beans/beancontext/BeanContextServicesListener.java: New file.
+ 	* java/util/AbstractCollection.java: New file.
+ 	* java/util/AbstractList.java: New file.
+ 	* java/util/Arrays.java: New file.
+ 	* Makefile.am: Added above files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-04-11  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/awt/AWTError.java: New file.
+ 	* java/awt/AWTEvent.java: New file.
+ 	* java/awt/AWTException.java: New file.
+ 	* java/awt/ActiveEvent.java: New file.
+ 	* java/awt/Adjustable.java: New file.
+ 	* java/awt/BorderLayout.java: New file.
+ 	* java/awt/Color.java: New file.
+ 	* java/awt/Component.java: New file.
+ 	* java/awt/Container.java: New file.
+ 	* java/awt/Dimension.java: New file.
+ 	* java/awt/Event.java: New file.
+ 	* java/awt/Font.java: New file.
+ 	* java/awt/Frame.java: New file.
+ 	* java/awt/Graphics.java: New file.
+ 	* java/awt/IllegalComponentStateException.java: New file.
+ 	* java/awt/Image.java: New file.
+ 	* java/awt/ItemSelectable.java: New file.
+ 	* java/awt/LayoutManager.java: New file.
+ 	* java/awt/LayoutManager2.java: New file.
+ 	* java/awt/Menu.java: New file.
+ 	* java/awt/MenuBar.java: New file.
+ 	* java/awt/MenuComponent.java: New file.
+ 	* java/awt/MenuContainer.java: New file.
+ 	* java/awt/MenuItem.java: New file.
+ 	* java/awt/Paint.java: New file.
+ 	* java/awt/PaintContext.java: New file.
+ 	* java/awt/Point.java: New file.
+ 	* java/awt/Rectangle.java: New file.
+ 	* java/awt/Shape.java: New file.
+ 	* java/awt/TextArea.java: New file.
+ 	* java/awt/TextComponent.java: New file.
+ 	* java/awt/Toolkit.java: New file.
+ 	* java/awt/Transparency.java: New file.
+ 	* java/awt/Window.java: New file.
+ 	* java/awt/natToolkit.cc: New file.
+ 	* java/awt/event/AWTEventListener.java: New file.
+ 	* java/awt/event/ActionEvent.java: New file.
+ 	* java/awt/event/ActionListener.java: New file.
+ 	* java/awt/event/AdjustmentEvent.java: New file.
+ 	* java/awt/event/AdjustmentListener.java: New file.
+ 	* java/awt/event/ComponentAdapter.java: New file.
+ 	* java/awt/event/ComponentEvent.java: New file.
+ 	* java/awt/event/ComponentListener.java: New file.
+ 	* java/awt/event/ContainerAdapter.java: New file.
+ 	* java/awt/event/ContainerEvent.java: New file.
+ 	* java/awt/event/ContainerListener.java: New file.
+ 	* java/awt/event/FocusAdapter.java: New file.
+ 	* java/awt/event/FocusEvent.java: New file.
+ 	* java/awt/event/FocusListener.java: New file.
+ 	* java/awt/event/InputEvent.java: New file.
+ 	* java/awt/event/InputMethodEvent.java: New file.
+ 	* java/awt/event/InputMethodListener.java: New file.
+ 	* java/awt/event/InvocationEvent.java: New file.
+ 	* java/awt/event/ItemEvent.java: New file.
+ 	* java/awt/event/ItemListener.java: New file.
+ 	* java/awt/event/KeyAdapter.java: New file.
+ 	* java/awt/event/KeyEvent.java: New file.
+ 	* java/awt/event/KeyListener.java: New file.
+ 	* java/awt/event/MouseAdapter.java: New file.
+ 	* java/awt/event/MouseEvent.java: New file.
+ 	* java/awt/event/MouseListener.java: New file.
+ 	* java/awt/event/MouseMotionAdapter.java: New file.
+ 	* java/awt/event/MouseMotionListener.java: New file.
+ 	* java/awt/event/PaintEvent.java: New file.
+ 	* java/awt/event/TextEvent.java: New file.
+ 	* java/awt/event/TextListener.java: New file.
+ 	* java/awt/event/WindowAdapter.java: New file.
+ 	* java/awt/event/WindowEvent.java: New file.
+ 	* java/awt/event/WindowListener.java: New file.
+ 	* java/awt/geom/Dimension2D.java: New file.
+ 	* java/awt/geom/Point2D.java: New file.
+ 	* java/awt/peer/ComponentPeer.java: New file.
+ 	* java/awt/peer/ContainerPeer.java: New file.
+ 	* java/awt/peer/FramePeer.java: New file.
+ 	* java/awt/peer/WindowPeer.java: New file.
+ 	* java/util/Collection.java: New file.
+ 	* java/util/Comparator.java: New file.
+ 	* java/util/Iterator.java: New file.
+ 	* java/util/List.java: New file.
+ 	* java/util/ListIterator.java: New file.
+ 	* Makefile.am: Added above files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-04-10  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* gnu/gcj/runtime/MethodInvocation.java: Fixed copyright.
+ 	* java/lang/FirstThread.java: Ditto.
+ 	* java/lang/StringBuffer.java: Ditto.
+ 	* mauve-libgcj: Turned on java.math, java.sql and java.security tests.
+ 
+ 	* gnu/gcj/math/MPN.java (rshift): Undid Boehm's patch of 03-14.
+ 	Special case handled in java.math.BigInteger.
+ 	* java/math/BigInteger.java (divide): Handle the special case when
+ 	dividing by 1 and the high bit of the dividend is set.
+ 	(setShiftRight): Handle case when count == 0.
+ 
+ 2000-04-05  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* java/net/URL.java (setURLStreamHandler): Make "file" protocol a
+ 	special case.
+ 
+ 2000-04-05  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* sysdep/ia64.c (rse_address_add): Delete.
+ 	(IS_NaT_COLLECTION_ADDR): Delete.
+ 	(ia64_backtrace_helper): check for null unwind_info.
+ 
+ 	* sysdep/ia64-frame.h: add calc_caller_bsp.
+ 
+ 	* java/lang/natThrowable.cc (printRawStackTrace): Flush
+ 	PrintWriter.
+ 
+ 	* prims.cc (_Jv_divI): Use _Jv_ThrowSignal.
+ 	(_Jv_remI): Likewise.
+ 	(_Jv_divJ): Likewise.
+ 	(_Jv_remJ): Likewise.
+ 
+ 	* interpret.cc (continue1): Use divide subroutines to guarantee
+ 	correct Java standard behaviour.
+ 	Floating-point division should not abort; make it so.
+ 
+ 2000-03-29  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Test against `libgcj_sjlj', not
+ 	`enable_sjlj_exceptions'.  Rearranged code to allow SYSDEP_SOURCES
+ 	to be set even when using sjlj.
+ 
+ 2000-03-24  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* Makefile.am: Add file addr2name.awk.
+ 	* Makefile.in: Rebuilt.
+ 	* addr2name.awk: New file.
+ 	* name-finder.cc (_Jv_name_finder): Call addr2name.awk to do name
+ 	lookups on ia64.
+ 	* java/lang/natThrowable.cc(printRawStackTrace): Don't print out a
+ 	blank line.
+ 
+ 2000-03-22  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* configure.host: Add -funwind-tables for IA64.
+ 	* Makefile.am (c_source_files): Add SYSDEP_SORCES.
+ 	* Makefile.in: Rebuilt.
+ 	* java/lang/natThrowable.cc (fillInStackTrace): Add ia64 case.
+ 	* sysdep/ia64.c: New file.
+ 	* sysdep/ia64-frame.h: New file.
+ 	* configure.in: Add sysdep/ia64.c for ia64.
+ 	* configure: Rebuilt.
+ 
+ 2000-03-17  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* java/lang/natString.cc: Remove `register' keyword.
+ 	interpret.cc: ditto.
+ 
+ 2000-03-16  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* configure.host (ia64): Enable interpreter.
+ 
+ 2000-03-14  Hans Boehm  <boehm@acm.org>
+ 
+ 	* gnu/gcj/math/MPN.java (rshift): Handle shift 32 specially.
+ 
+ 2000-03-14  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* include/default-signal.h (MAKE_THROW_FRAME): Add arg
+ 	`_exception'.
+ 
+ 2000-03-10  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* java/lang/ieeefp.h: Import latest version from fdlibm.
+ 
+ 2000-03-14  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* prims.cc (_Jv_ThrowSignal): New function.
+ 	(catch_segv): Add arg `_exception' to MAKE_THROW_FRAME.
+ 	(catch_fpe): Ditto.
+ 	* include/sparc-signal.h (MAKE_THROW_FRAME): Ditto
+ 	* include/i386-signal.h (MAKE_THROW_FRAME): Ditto.
+ 	* include/ppc-signal.h: New file.
+ 
+ 2000-05-18  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/Thread.java: Declare `data' as Object, not RawData.
+ 	* java/lang/natThread.java (initialize_native): Cast `data' to
+ 	jobject.
+ 	* gnu/gcj/RawData.java: Clarify documentation.
+ 
+ 	From Gregory R. Warnes <warnes@biostat.washington.edu>:
+ 	* gnu/gcj/protocol/jar/Connection.java (getJarFile): Test for null
+ 	`jarFile', not `jarFileURL'.
+ 
+ 2000-05-15  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* include/ppc-signal.h: New file.
+ 
+ 2000-05-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/zip/ZipInputStream.java (getNextEntry): When reading
+ 	file headers, don't include `size' in the skip call.
+ 
+ 2000-05-10  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/StringBuffer.java (delete): Call arrayCopy() correctly.
+ 	Avoid arrayCopy() call where possible. Update `count' _after_ calling
+ 	arrayCopy().
+ 	(replace): Reimplemented. Fix javadoc.
+ 	(reverse): Call ensureCapacity_unsynchronized().
+ 	(StringBuffer (String)): Use DEFAULT_CAPACITY.
+ 
+ 	(replace): Calculate length for arraycopy() correctly.
+ 
+ 2000-05-09  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/StringBuffer.java (toString): Don't mark buffer as
+ 	shared.
+ 	(insert(int,char[],int,int): New method.
+ 	(delete): New method from Classpath.
+ 	(deleteCharAt): Likewise.
+ 	(substring): Likewise.
+ 	(shared): No longer private.
+ 	Added JavaDoc comments from Classpath.
+ 	* java/lang/String.java (String(StringBuffer)): Ensure `buffer' is
+ 	shared.
+ 
+ 2000-05-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (LIBLINK): New macro.
+ 	(libgcj_la_LINK): Use it.
+ 	(libgcjawt_la_LINK): Likewise.
+ 
+ 2000-05-06  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (libgcj.zip): Don't pass -L to javac.
+ 
+ 2000-05-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	Fix for PR libgcj/220:
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (gij_LDFLAGS): Don't use libstdc++.
+ 	(jv_convert_LDFLAGS): Likewise.
+ 	(libgcj_la_LDFLAGS): Likewise.
+ 	(GCJLINK): New macro.
+ 	(jv_convert_LINK): Use it.
+ 	(gij_LINK): Likewise.
+ 	(libgcj_la_LINK): New macro.
+ 	(libgcjawt_la_LINK): Likewise.
+ 
+ 2000-05-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* gcj/field.h (JvFieldIsRef): Return false for gnu.gcj.RawData
+ 	field.
+ 	* boehm.cc (_Jv_MarkObj): Removed dead code.  Use `STATIC', not
+ 	`0x0008'.
+ 	Include Modifier.h.
+ 
+ 2000-05-05  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/natClass.cc (isInstance): Use __builtin_expect.
+ 	(_Jv_IsAssignableFrom): Ditto.
+ 	(_Jv_IsInstanceOf): Ditto.
+ 	(_Jv_CheckCast): Ditto.
+ 	(_Jv_CheckArrayStore): Ditto.
+ 	* java/lang/Class.h (_Jv_InitClass): Ditto.
+ 	* java/lang/natObject.cc (_Jv_MonitorEnter): __builtin_expect `false',
+ 	not `0'.
+ 	(notify): Ditto.
+ 	(notifyAll): Ditto.
+ 	(wait): Ditto.
+ 	(_Jv_MonitorExit): Ditto.
+ 	* boehm.cc (_Jv_MarkObj): Ditto.
+ 	(_Jv_MarkObj): Ditto.
+ 	(_Jv_MarkArray): Ditto.
+ 	* prims.cc (_Jv_AllocObject): Ditto.
+ 	(_Jv_NewObjectArray): Ditto.
+ 	(_Jv_NewPrimArray): Ditto.
+ 	(_Jv_Malloc): Ditto.
+ 	(_Jv_Realloc): Ditto.
+ 	(_Jv_MallocUnchecked): Ditto.
+ 	(_Jv_divI): Ditto.
+ 	(_Jv_remI): Ditto.
+ 	(_Jv_divJ): Ditto.
+ 	(_Jv_remJ): Ditto.
+ 
+ 2000-05-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/Locale.java (Locale): Don't explicitly check for
+ 	null.
+ 	* java/util/Hashtable.java (containsKey): Don't explicitly check
+ 	for null.
+ 	(get): Likewise.
+ 	* java/util/BitSet.java (and, or, xor): Don't explicitly check for
+ 	null.
+ 	* java/util/zip/ZipEntry.java (ZipEntry): Don't explicitly check
+ 	for null.
+ 	* java/text/StringCharacterIterator.java
+ 	(StringCharacterIterator): Don't check for null.
+ 	* java/text/ChoiceFormat.java (setChoices): Don't explicitly check
+ 	for null pointer.
+ 	* java/net/MulticastSocket.java (joinGroup): Don't explicitly
+ 	check for null pointer.
+ 	(leaveGroup): Likewise.
+ 	* java/net/DatagramPacket.java (DatagramPacket): Removed erroneous
+ 	comment.
+ 	(setData): Likewise.
+ 	* java/lang/ThreadGroup.java (ThreadGroup): Don't explicitly check
+ 	for `p==null'.
+ 
+ 2000-04-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* Makefile.am (GCJCOMPILE, JCFLAGS, JF1CLAGS, jv_convert_LINK,
+ 	gij_LINK, libgcj.zip, .java=.class): Move -L option out of FLAGS.
+ 	(libgcj_la_LDFLAGS): Add -L../libstdc++ for in-gcc builds.
+ 	(jv_convert_LDFLAGS, gij_LDFLAGS): Add `pwd`/../libstdc++ to
+ 	-rpath for in-gcc builds.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2000-04-28  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libgcj.spec.in (*jc1): Added -fasynchronous-exceptions.
+ 	Fix for PR gcj/218.
+ 
+ 2000-04-28  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava/java/lang/String.java (toString): Remove `final' hack.
+ 
+ 2000-04-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	Runtime support for PR gcj/2:
+ 	* prims.cc (_Jv_ThrowNullPointerException): New function.
+ 	* include/jvm.h (_Jv_ThrowNullPointerException): Declare.
+ 
+ 2000-04-27  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* prims.cc (_Jv_NewObjectArray): Fix typo.
+ 
+ 2000-04-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_CXXFLAGS): Added -fasynchronous-exceptions.
+ 
+ 2000-04-24  Jeff Sturm  <jsturm@sigma6.com>
+ 
+ 	* gnu/gcj/runtime/natFirstThread.cc (run): Initialize class before
+ 	calling main.
+ 
+ 2000-04-22  Anthony Green  <green@cygnus.com>
+ 
+ 	* include/jvm.h (__builtin_expect): Define as unused for now.
+ 	* java/lang/natObject.cc (_Jv_MonitorEnter): Add __builtin_expect.
+ 	(notify): Ditto.
+ 	(notifyAll): Ditto.
+ 	(wait): Ditto.
+ 	(_Jv_MonitorExit): Ditto.
+ 	* boehm.cc (_Jv_MarkObj): Ditto.
+ 	(_Jv_MarkObj): Ditto.
+ 	(_Jv_MarkArray): Ditto.
+ 	(_Jv_AllocBytes): Ditto.
+ 	* prims.cc (_Jv_AllocObject): Ditto.
+ 	(_Jv_NewObjectArray): Ditto.
+ 	(_Jv_NewPrimArray): Ditto.
+ 	(_Jv_Malloc): Ditto.
+ 	(_Jv_Realloc): Ditto.
+ 	(_Jv_MallocUnchecked): Ditto.
+ 	(_Jv_divI): Ditto.
+ 	(_Jv_remI): Ditto.
+ 	(_Jv_divJ): Ditto.
+ 	(_Jv_remJ): Ditto.
+ 
+ 	* include/Makefile.in: Rebuilt.
+ 	* include/Makefile.am (include_HEADERS): Add jvmpi.h.
+ 
+ 2000-04-21  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/PipedInputStream.java, java/io/PipedOutputStream.java:
+ 	Yet another new version from Classpath.
+ 
+ 	Fix for PR libgcj/15:
+ 	* java/util/natGregorianCalendar.cc (_REENTRANT,
+ 	_POSIX_PTHREAD_SEMANTICS): Don't define.
+ 	* java/net/natInetAddress.cc (_REENTRANT): Don't define.
+ 	* java/lang/natSystem.cc (_REENTRANT, _POSIX_PTHREAD_SEMANTICS):
+ 	Don't define.
+ 	* java/io/natFile.cc (_REENTRANT, _POSIX_PTHREAD_SEMANTICS): Don't
+ 	define.
+ 	* configure: Rebuilt.
+ 	* configure.in: If using POSIX threads, define _REENTRANT if
+ 	needed.  Define _POSIX_PTHREAD_SEMANTICS.  Don't define
+ 	GETHOSTBYNAME_R_NEEDS_REENTRANT.
+ 
+ 	* java/io/PipedInputStream.java, java/io/PipedReader.java,
+ 	java/io/PipedOutputStream.java, java/io/PipedWriter.java: New
+ 	version from Classpath.
+ 
+ 	Fix for PR libgcj/213:
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (gij_SOURCES): Added gij.cc.
+ 	(EXTRA_gij_SOURCES): Removed.
+ 	(gij_LDADD): Removed gij.lo.
+ 	(gij_DEPENDENCIES): Likewise.
+ 	($(gij_OBJECTS)): Depend on nat_headers.
+ 
+ 	* gnu/gcj/protocol/file/Handler.java (openConnection): Use
+ 	`setURL', not `url.set'.
+ 
+ 2000-04-20  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	Fix for PR java.io/204:
+ 	* java/io/PipedInputStream.java, java/io/PipedReader.java,
+ 	java/io/PipedOutputStream.java, java/io/PipedWriter.java: Imported
+ 	from Classpath.
+ 
+ 	Fix for PR libgcj/212:
+ 	* gcj/javaprims.h (_Jv_word, _Jv_word2): Removed definitions.
+ 	* include/jvm.h (_Jv_word, _Jv_word2): Define.
+ 	* java/lang/Class.h (_Jv_word): Declare.
+ 
+ 	* jni.cc (_Jv_JNI_PopSystemFrame): Clear `env->ex'.
+ 
+ 2000-04-19  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* jni.cc (_Jv_JNI_FindClass): Use system class loader if class
+ 	doesn't have a loader.
+ 
+ 2000-04-19  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* boehm.cc: (_Jv_MarkObj, _Jv_MarkArray): Cast pointers for
+ 	MAYBE_MARK to ptr_t, for compatibility with new GC version.
+ 
+ 2000-04-16  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/io/natFileDescriptorPosix.cc (open): Use mode 0666. Fix for PR
+ 	libgcj/202.
+ 	(available): Initialize `where' to prevent bogus compiler warning.
+ 
+ 2000-04-12  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natString.cc (intern): Temporarily disable finalizer
+ 	registration.
+ 
+ 	* java/lang/natString.cc (unintern): Added `obj' argument.
+ 	(intern): Register finalizer for string.
+ 	* java/lang/String.java (unintern): Now static; added obj
+ 	argument.
+ 
+ 2000-04-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/Vector.java (VectorEnumeration): Now `final'.
+ 	* java/util/Hashtable.java (HashtableEntry): Now `final'.
+ 	(HashtableEnumeration): Likewise.
+ 	* java/util/zip/ZipFile.java (ZipEnumeration): Now `final'.
+ 	* java/text/RuleBasedCollator.java (RBCElement): Now `final'.
+ 
+ 2000-04-10  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectStreamException.java: New file.
+ 	* java/io/OptionalDataException.java: New file.
+ 	* java/io/StreamCorruptedException.java: New file.
+ 	* java/math/BigDecimal.java: New file.
+ 	* java/sql/CallableStatement.java: New file.
+ 	* java/sql/Connection.java: New file.
+ 	* java/sql/DataTruncation.java: New file.
+ 	* java/sql/DatabaseMetaData.java: New file.
+ 	* java/sql/Date.java: New file.
+ 	* java/sql/Driver.java: New file.
+ 	* java/sql/DriverManager.java: New file.
+ 	* java/sql/DriverPropertyInfo.java: New file.
+ 	* java/sql/PreparedStatement.java: New file.
+ 	* java/sql/ResultSet.java: New file.
+ 	* java/sql/ResultSetMetaData.java: New file.
+ 	* java/sql/SQLException.java: New file.
+ 	* java/sql/SQLWarning.java: New file.
+ 	* java/sql/Statement.java: New file.
+ 	* java/sql/Time.java: New file.
+ 	* java/sql/Timestamp.java: New file.
+ 	* java/sql/Types.java: New file.
+ 	* Makefile.am: Added above new files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* mauve-libgcj: Turned on java.math, java.sql and java.security tests.
+ 	* java/net/MulticastSocket.java (MulticastSocket): Pass values a la
+ 	DatagramSocket constructor instead of null.
+ 
+ 2000-04-08  Anthony Green  <green@cygnus.com>
+ 
+ 	* include/posix-threads.h (_Jv_MutexUnlock): Replace
+ 	_JV_NOT_OWNER.
+ 
+ 2000-04-08  Anthony Green  <green@cygnus.com>
+ 
+ 	* posix-threads.cc (_Jv_MutexLock): Moved back to posix-threads.h.
+ 	(_Jv_MutexUnlock): Ditto.
+ 	* include/posix-threads.h (_Jv_MutexLock): From posix-threads.cc.
+ 	(_Jv_MutexUnlock): Ditto.
+ 
+ 2000-04-08  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/StringBuffer.java (ensureCapacity): Don't call Math::max.
+ 	(ensureCapacity_unsynchronized): New private method.
+ 	(append): Use ensureCapacity_unsynchronized.
+ 
+ 2000-04-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new files.
+ 	* java/awt/IllegalComponentStateException.java: New file.
+ 	* java/awt/ItemSelectable.java: New file.
+ 	* java/awt/event/WindowEvent.java: Finished.
+ 	* java/awt/event/TextEvent.java: Finished.
+ 	* java/awt/event/ContainerEvent.java: New file.
+ 	* java/awt/Component.java (getX, getY): New methods.
+ 	* java/awt/event/PaintEvent.java: New file.
+ 	* java/awt/event/MouseEvent.java: New file.
+ 	* java/awt/ActiveEvent.java: New file.
+ 	* java/awt/event/KeyEvent.java: Finished.
+ 	* java/awt/event/ItemEvent.java: New file.
+ 	* java/awt/Adjustable.java: New file.
+ 	* java/awt/event/InputMethodEvent.java: New file.
+ 	* java/awt/event/InputEvent.java: Finished.
+ 	* java/awt/event/FocusEvent.java: New file.
+ 	* java/awt/event/MouseMotionAdapter.java: New file.
+ 	* java/awt/event/MouseAdapter.java: New file.
+ 	* java/awt/event/KeyAdapter.java: New file.
+ 	* java/awt/event/FocusAdapter.java: New file.
+ 	* java/awt/event/ContainerAdapter.java: New file.
+ 	* java/awt/event/ComponentEvent.java: Finished.
+ 	* java/awt/event/AdjustmentEvent.java: New file.
+ 	* java/awt/event/ComponentAdapter.java: New file.
+ 	* java/awt/event/ActionEvent.java: Finished.
+ 	* java/awt/event/MouseMotionListener.java: New file.
+ 	* java/awt/event/MouseListener.java: New file.
+ 	* java/awt/event/ItemListener.java: New file.
+ 	* java/awt/event/InputMethodListener.java: New file.
+ 	* java/awt/event/ContainerListener.java: New file.
+ 	* java/awt/event/FocusListener.java: New file.
+ 	* java/awt/event/ComponentListener.java: New file.
+ 	* java/awt/event/AWTEventListener.java: New file.
+ 	* java/awt/event/AdjustmentListener.java: New file.
+ 
+ 2000-04-08  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/natObject.cc (_Jv_MonitorEnter): Only perform null
+ 	check when we have to.
+ 
+ 	* gcj/array.h: Mark elements(JArray<T>& x) and elements(JArray<T>*
+ 	x) as `inline'.
+ 
+ 	* java/util/StringTokenizer.java: Minor optimization.  Eliminates
+ 	one method call.
+ 
+ 	* java/util/Vector.java (VectorEnumeration.nextElement): Manually
+ 	inline hasMoreElements.
+ 
+ 2000-04-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Recognize --enable-java-awt.
+ 	(AWT): New conditional.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (toolexeclib_LTLIBRARIES): Build libgcjawt.la if
+ 	requested.
+ 	(libgcjawt_la_SOURCES): New macro.
+ 	(EXTRA_libgcjawt_la_SOURCES): Likewise.
+ 	(libgcjawt_la_DEPENDENCIES): Likewise.
+ 	(libgcjawt_la_LIBADD): Likewise.
+ 	(libgcjawt_la_LDFLAGS): Likewise.
+ 	(libgcj.zip): Depend on cond_java_awt_source_files
+ 	(cond_awt_java_source_files): New macro.
+ 	(MOSTLYCLEANFILES): Added awto_files.
+ 	(awto_files): New macro.  Use where javao_files used.
+ 	(nat_headers): Use cond_awt_java_source_files.
+ 
+ 2000-04-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added AWTException.java.
+ 	* java/awt/AWTException.java: New file.
+ 
+ 2000-04-03  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/jvm.h (_Jv_GetArrayElementFromElementType): More
+ 	commentary from Alex.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am ($(javao_files)): Depend on libgcj.zip.
+ 	From H.J. Lu.
+ 
+ Sun Apr  2 08:27:18 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Add --disable-jvmpi.
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h: Add ENABLE_JVMPI.
+ 
+ 	* include/jvm.h: Declare _Jv_DisableGC and _Jv_EnableGC.
+ 	(_Jv_JVMPI_Notify_OBJECT_ALLOC): New define.
+ 	(_Jv_JVMPI_Notify_THREAD_END): New define.
+ 	(_Jv_JVMPI_Notify_THREAD_END): New define.
+ 	* prims.cc (_Jv_JVMPI_Notify_OBJECT_ALLOC): Declare.
+ 	(_Jv_JVMPI_Notify_THREAD_END): Declare.
+ 	(_Jv_JVMPI_Notify_THREAD_END): Declare.
+ 
+ 	* prims.cc (_Jv_AllocObject): Generate JVMPI object allocation
+ 	events.
+ 
+ 	* java/lang/natThread.cc: Include JVMPI headers if necessary.
+ 	(finish_): Generate JVMPI thread end events.
+ 	(run_): Generate JVMPI thread start events.
+ 	* gnu/gcj/runtime/natFirstThread.cc (run): Call JNI_OnLoad for any
+ 	preloaded JNI library.
+ 	Include JVMPI headers if necessary.
+ 	(run): Generate JVMPI thread start events.
+ 
+ 	* boehm.cc: Define GC_disable and GC_enable.
+ 	(_Jv_DisableGC): New function.
+ 	(_Jv_EnableGC): New function.
+ 	(disable_gc_mutex): Declare.
+ 	* nogc.cc (_Jv_DisableGC): New function.
+ 	(_Jv_EnableGC): New function.
+ 
+ 	* jni.cc (_Jv_JNI_GetEnv): Handle JVMPI interface requests.
+ 	(_Jv_JVMPI_Interface): Define.
+ 	(jvmpiEnableEvent): New function.
+ 	(_Jv_JNI_Init): Initialize _Jv_JVMPI_Interface.
+ 
+ 	* include/jvmpi.h: New file.
+ 
+ 2000-03-27  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* Makefile.in: New #defines and friends for Thread.h.
+ 	* Makefile.am: Ditto.
+ 	* posix-threads.cc: (struct starter): Remove `object'.
+ 	(_Jv_CondWait): Use interruptable condition variables and new
+ 	recursive mutexes. New return codes on interrupt or non-ownership
+ 	of mutex.
+ 	(_Jv_CondNotify): Ditto.
+ 	(_Jv_CondNotifyAll): Ditto.
+ 	(_Jv_ThreadInterrupt): Set thread interrupt flag directly. Interrupt
+ 	the target thread by signaling its wait condition.
+ 	(_Jv_ThreadInitData): Set `thread_obj' in the thread data struct,
+ 	not the starter struct. Initialize wait_mutex and wait_cond.
+ 	(_Jv_MutexLock): New recursive mutex implementation. Moved from
+ 	posix-threads.h.
+ 	(_Jv_MutexUnlock): Ditto.
+ 	(really_start): Set info->data->thread from pthread_self() to work
+ 	around a race condition. Destroy wait_mutex and wait_cond when run()
+ 	returns.
+ 	* java/lang/Thread.java: (isInterrupted_): Renamed to overloaded
+ 	`isInterrupted(boolean)'. Clear interrupted flag if clear_flag is
+ 	set.
+ 	startable_flag: New private field.
+ 	(Thread): Initialize `startable_flag'.
+ 	(toString): Check for null thread group.
+ 	* java/lang/natThread.cc: (struct natThread): New fields
+ 	`join_mutex', `join_cond'. Removed fields `joiner', `next'.
+ 	(class locker): Removed.
+ 	(initialize_native): Initialize `join_cond' and `join_mutex'.
+ 	(interrupt): Now just calls _Jv_ThreadInterrupt().
+ 	(join): Simplified. Just wait on the target thread's join condition.
+ 	(finish_): Remove join list code. Unset thread group. Signal
+ 	potential joiners by notifying the dying threads join_cond.
+ 	(start): Check for illegal restarts.
+ 	* java/lang/natObject.cc: Check for return value of _Jv_CondWait and
+ 	act appropriatly.
+ 	* include/posix-threads.h: Remove all HAVE_RECURSIVE_MUTEX related
+ 	#defines and #ifdefs.
+ 	(struct _Jv_Thread_t): New fields `thread_obj', `wait_cond',
+ 	`wait_mutex', `next'.
+ 	(struct _Jv_ConditionVariable_t): Define as a struct instead of
+ 	directly mapping to pthread_cond_t.
+ 	(struct _Jv_Mutex_t): New recursive implementation.
+ 	(_Jv_PthreadCheckMonitor): Reimplemented. Simple `owner' check.
+ 	_Jv_HaveCondDestroy: Never define this for posix-threads.
+ 	(_Jv_CondNotify): Remove inline implementation(s), prototype instead.
+ 	(_Jv_CondNotifyAll): Ditto.
+ 	(_Jv_MutexLock): Ditto.
+ 	(_Jv_MutexUnlock): Ditto.
+ 	(_Jv_MutexInit): Changed to reflect new mutex implementation.
+ 	(_Jv_MutexDestroy): Ditto.
+ 	(_Jv_CondDestroy): Removed.
+ 	(_Jv_PthreadGetMutex): Removed.
+ 	* include/win32-threads.h: (_Jv_CondNotify): Guess _JV_NOT_OWNER on an
+ 	error. Add a FIXME about this.
+ 	(_Jv_CondNotifyAll): Ditto.
+ 	* win32-threads.cc: (_Jv_CondWait): Return 0 on a timeout. Guess
+ 	_JV_NOT_OWNER on other errors. Add FIXME.
+ 
+ 2000-03-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* jni.cc (_Jv_JNI_PopSystemFrame): If environment has exception
+ 	set, throw it.
+ 	(call): Don't throw exception here.
+ 
+ 2000-03-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/mprec.h: Use SIZEOF_VOID_P.
+ 	* interpret.cc: Use SIZEOF_VOID_P.
+ 	* include/java-cpool.h (_Jv_storeLong): Use SIZEOF_VOID_P.
+ 	(_Jv_loadLong): Likewise.
+ 	(_Jv_storeDouble): Likewise.
+ 	* configure: Rebuilt.
+ 	* configure.in: Check size of void*.
+ 
+ 	* resolve.cc (ncode): Use FFI_PREP_RAW_CLOSURE and FFI_RAW_SIZE.
+ 
+ 2000-03-26  Hans Boehm  <boehm@acm.org>
+ 
+ 	* include/java-cpool.h (_Jv_storeLong, _Jv_loadLong,
+ 	_Jv_storeDouble, _Jv_loadDouble): Define differently on 64 bit
+ 	machine.
+ 	* java/lang/ieeefp.h: Define __IEEE_BIG_ENDIAN or
+ 	__IEEE_LITTLE_ENDIAN appropriately on IA64.
+ 	* java/lang/mprec.h: Don't define Pack_32 on 64 bit machine.
+ 	* javaprims.h (_Jv_word): Added `l' and `d' entries in 64 bit
+ 	case.
+ 	* resolve.cc (FFI_PREP_RAW_CLOSURE): New define.
+ 	(FFI_RAW_SIZE): Likewise.
+ 	(_Jv_InterpMethod::ncode): Use them.
+ 	* interpret.cc (PUSHL, PUSHD, POPL, POPD, LOADL, LOADD, STOREL,
+ 	STORED): Define differently on a 64 bit machine.
+ 	(continue1): Use ffi_java_raw_call when appropriate.
+ 
+ 2000-03-24  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/math/BigInteger.java(divide): Handle the special case when
+ 	dividing by 1 and the high bit of the dividend is set.
+ 	(setShiftRight): Handle case when count == 0.
+ 
+ 2000-03-24  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/awt/Font.java(isBold): Fix syntax error.
+ 	(isItalic): ditto.
+ 	* java/awt/Frame.java(postEvent): ditto.
+ 	* java/awt/Menu.java(postEvent): ditto.
+ 	* java/awt/MenuBar.java(postEvent): ditto.
+ 	* java/awt/Toolkit.java(init): Included a stub.
+ 
+ 2000-03-21  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/awt/Event.java: Add all the event type constants.
+ 	(Event): Implemented constructors.
+ 	(controlDown): Implemented.
+ 	(metaDown): Implemented.
+ 	(paramString): Stubbed.
+ 	(shiftDown): Implemented.
+ 	(toString): Implemented.
+ 	(translate): Implemented.
+ 
+ 2000-03-21  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/natClass.cc (isInstance): Initialize `this'.
+ 	(isAssignableFrom): Initialize `this' and `klass'.
+ 	(_Jv_IsAssignableFrom): If an interface has no idt, it is not
+ 	implemented by any loaded class, so return false.
+ 	* java/lang/natClass.cc (isInstance): Use _Jv_IsAssignableFrom(),
+ 	not Class.isAssignableFrom(). Use JV_CLASS, not getClass().
+ 
+ 2000-03-19  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/awt/Color.java: Specified java.io for Serializable.
+ 	* java/awt/Toolkit.java: Imported java.net.URL.
+ 
+ 2000-03-19  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/awt/Color.java: Rewrote to be more memory efficient (& compile).
+ 
+ 2000-03-16  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/awt/Color.java: New file.
+ 	* java/awt/Graphics.java: New file.
+ 	* java/awt/Image.java: New file.
+ 	* java/awt/Paint.java: New file.
+ 	* java/awt/PaintContext.java: New file.
+ 	* java/awt/Transparency.java: New file.
+ 	* java/util/Collection.java: New file.
+ 	* java/util/Comparator.java: New file.
+ 	* java/util/Iterator.java: New file.
+ 	* java/util/List.java: New file.
+ 	* java/util/ListIterator.java: New file.
+ 	* Makefile.am: Added above new files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* java/awt/Font.java (PLAIN): New field.
+ 	(BOLD): New field.
+ 	(ITALIC): New field.
+ 	(ROMAN_BASELINE): New field.
+ 	(CENTER_BASELINE): New field.
+ 	(HANGING_BASELINE): New field.
+ 	(name): New field.
+ 	(style): New field.
+ 	(size): New field.
+ 	(pointSize): New field.
+ 	(Font): Implemented constructor.
+ 	(isPlain): Implemented method.
+ 	(isBold): Implemented method.
+ 	(isItalic): Implemented method.
+ 	(getName): Implemented method.
+ 	(getStyle): Implemented method.
+ 	(getSize): Implemented method.
+ 	(getSize2D): Implemented method.
+ 	(decode): Stubbed.
+ 	* java/awt/Frame.java (getFont): Stubbed.
+ 	(postEvent): Stubbed.
+ 	(remove): Stubbed.
+ 	* java/awt/Menu.java (postEvent): Stubbed.
+ 	* java/awt/MenuBar.java (getFont): Stubbed.
+ 	(postEvent): Stubbed.
+ 	* java/awt/Toolkit.java (getImage): Added abstract method.
+ 
+ 2000-03-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/natFileDescriptorWin32.cc (winerr): Now static.
+ 
+ 	* prims.cc (win32_exception_handler): Reformatted.
+ 
+ 	* include/win32-threads.h (_Jv_HaveCondDestroy): New define.
+ 	(_Jv_HaveMutexDestroy): Likewise.
+ 
+ 2000-03-15 Jon Beniston <jb7216@bristol.ac.uk>
+ 
+ 	* java/io/natFileDescriptorWin32.cc: New file.
+ 	* java/io/natFileWin32.cc: New file.
+ 	* java/net/natInetAddress.cc: Added conditional inclusion of
+ 	Windows / Winsock headers.
+ 	* java/net/natPlainDatagramSocketImpl.cc: Added conditional
+ 	inclusion of Windows / Winsock headers.
+ 	* java/net/natPlainSocketImpl.cc: Added conditional inclusion of
+ 	Windows / Winsock headers.
+ 	* include/win32-signal.h: New file.
+ 	* include/win32-threads.h: New file.
+ 	* win32-threads.cc: New file.
+ 	* exception.cc (win32_get_restart_frame): New function.
+ 	* prims.cc (win32_exception_handler): New function.
+ 	(main_init) Performs Winsock initialisation.
+ 	(main_init) Installs exeception handler.
+ 
+ 2000-03-14  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* jni.cc (mangled_name): Fixed assertion.
+ 	(JNI_GetCreatedJavaVMs): Don't comment out `buf_len' argument;
+ 	turned assert into actual failure.
+ 
+ 2000-03-09  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/security/Key.java(serialVersionUID): Set to 0 for now.
+ 	* java/security/interfaces/DSAPrivateKey.java(serialVersionUID): Ditto.
+ 	* java/security/interfaces/DSAPublicKey.java(serialVersionUID): Ditto.
+ 
+ 2000-03-09  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/security/AlgorithmParameterGeneratorSpi.java: New file.
+ 	* java/security/DigestException.java: New file.
+ 	* java/security/GeneralSecurityException.java: New file.
+ 	* java/security/InvalidAlgorithmParameterException.java: New file.
+ 	* java/security/InvalidKeyException.java: New file.
+ 	* java/security/InvalidParameterException.java: New file.
+ 	* java/security/Key.java: New file.
+ 	* java/security/KeyException.java: New file.
+ 	* java/security/KeyPair.java: New file.
+ 	* java/security/KeyPairGenerator.java: New file.
+ 	* java/security/KeyPairGeneratorSpi.java: New file.
+ 	* java/security/NoSuchProviderException.java: New file.
+ 	* java/security/PrivateKey.java: New file.
+ 	* java/security/Provider.java: New file.
+ 	* java/security/PublicKey.java: New file.
+ 	* java/security/SecureRandom.java: New file.
+ 	* java/security/Security.java: New file.
+ 	* java/security/Signature.java: New file.
+ 	* java/security/SignatureException.java: New file.
+ 	* java/security/interfaces/DSAKey.java: New file.
+ 	* java/security/interfaces/DSAParams.java: New file.
+ 	* java/security/interfaces/DSAPrivateKey.java: New file.
+ 	* java/security/interfaces/DSAPublicKey.java: New file.
+ 	* java/security/interfaces/RSAPrivateCrtKey.java: New file.
+ 	* java/security/interfaces/RSAPrivateKey.java: New file.
+ 	* java/security/interfaces/RSAPublicKey.java: New file.
+ 	* java/security/spec/AlgorithmParameterSpec.java: New file.
+ 	* java/security/spec/InvalidKeySpecException.java: New file.
+ 	* java/security/spec/InvalidParameterSpecException.java: New file.
+ 	* java/security/spec/KeySpec.java: New file.
+ 	* java/security/spec/RSAPrivateCrtKeySpec.java: New file.
+ 	* java/security/spec/RSAPrivateKeySpec.java: New file.
+ 	* java/security/spec/RSAPublicKeySpec.java: New file.
+ 	* Makefile.am: Added above java.security files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* java/security/MessageDigest.java: Rewritten.
+ 	* java/security/SecureClassLoader.java: Added JDK1.2 comment.
+ 
+ 2000-03-09  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* README: Updated.
+ 
+ 2000-03-09  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Call
+ 	_Jv_PrepareConstantTimeTables.
+ 	* java/lang/natClass.cc (_Jv_PrepareConstantTimeTables): Array
+ 	classes should have an IDT, so don't return if klass is an array
+ 	class.
+ 
+ 2000-03-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/natArray.cc (newInstance): Don't allow array
+ 	of `void' to be created.
+ 
+ 2000-03-08  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/math/BigInteger.java(signum): Handle zero properly.
+ 
+ 2000-03-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* All files: Updated copyright information.
+ 	* COPYING: New file.
+ 	* COPYING.LIB: Removed.
+ 	* LIBGCJ_LICENSE: We now use GPL + special exception.
+ 
+ 2000-03-07  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* resolve.cc (_Jv_SearchMethodInClass): New function.
+ 	(_Jv_ResolvePoolEntry): Search superinterfaces for interface methods.
+ 	* java/lang/Class.h (_Jv_SearchMethodInClass): New prototype.
+ 
+ 2000-03-07  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/lang/Class.h (union _Jv_IDispatchTable): New declaration.
+ 	(struct _Jv_ifaces): New declaration.
+ 	JV_CLASS: New macro definition.
+ 	(getComponentType): Relocate below isArray() for inlining.
+ 	(getModifiers): Declare `inline'.
+ 	(getSuperclass): Ditto.
+ 	(isArray): Ditto.
+ 	(isPrimitive): Ditto.
+ 	(_Jv_IsAssignableFrom): New prototype.
+ 	(_Jv_LookupInterfaceMethodIdx): New prototype. Predeclare with "C"
+ 	linkage.
+ 	(_Jv_InitClass): Move from natClass.cc. Declare `inline'.
+ 	Check for JV_STATE_DONE before invoking initializeClass().
+ 	(_Jv_PrepareConstantTimeTables): New prototype.
+ 	(_Jv_GetInterfaces): Ditto.
+ 	(_Jv_GenerateITable): Ditto.
+ 	(_Jv_GetMethodString): Ditto.
+ 	(_Jv_AppendPartialITable): Ditto.
+ 	(_Jv_FindIIndex): Ditto.
+ 	depth, ancestors, idt: New class fields.
+ 
+ 	* java/lang/natClass.cc (isAssignableFrom): Move functionality to
+ 	inline function `_Jv_IsAssignableFrom'. Use that function.
+ 	(isInstance): Declare `inline'.
+ 	(initializeClass): Get lock on class before checking `state'. Unlock
+ 	before calling resolveClass0. Call _Jv_PrepareConstantTimeTables with
+ 	the lock held.
+ 	(_Jv_LookupInterfaceMethod): Use _Jv_GetMessageString.
+ 	(_Jv_IsAssignableFrom): New inline function. Test assignability using
+ 	class->depth and ancestor table.
+ 	(_Jv_IsInstanceOf): Use _Jv_IsAssignableFrom.
+ 	(_Jv_CheckCast): Move from prims.cc. Use JV_CLASS and
+ 	_Jv_IsAssignableFrom.
+ 	(_Jv_CheckArrayStore): Ditto.
+ 	(_Jv_LookupInterfaceMethodIdx): New function.
+ 	INITIAL_IOFFSETS_LEN, INITIAL_IFACES_LEN: New #defines.
+ 	(_Jv_PrepareConstantTimeTables): New function.
+ 	(_Jv_IndexOf): Ditto.
+ 	(_Jv_GetInterfaces): Ditto.
+ 	(_Jv_GenerateITable): Ditto.
+ 	(_Jv_GetMethodString): Ditto.
+ 	(_Jv_AppendPartialITable): Ditto.
+ 	iindex_mutex, iindex_mutex_initialized: New static fields.
+ 	(_Jv_FindIIndex): New function.
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_NewClass): Set new jclass fields.
+ 
+ 	* prims.cc (_Jv_CheckCast): Moved to natClass.cc.
+ 	(_Jv_CheckArrayStore): Ditto.
+ 	(JvNewCharArray, JvNewBooleanArray, JvNewByteArray, JvNewShortArray,
+ 	JvNewIntArray, JvNewLongArray, JvNewFloatArray, JvNewDoubleArray):
+ 	Moved to gcj/array.h.
+ 	(_Jv_Realloc): New function.
+ 
+ 	* gcj/cni.h: Move _Jv_PrimClass definitions to gcj/array.h.
+ 
+ 	* gcj/array.h: _Jv_PrimClass definitions moved from gcj/cni.h.
+ 	(JvNewCharArray, JvNewBooleanArray, JvNewByteArray,
+ 	JvNewShortArray, JvNewIntArray, JvNewLongArray, JvNewFloatArray,
+ 	JvNewDoubleArray): Implementations moved from prims.cc and
+ 	declared `inline'.
+ 
+ 	* gcj/javaprims.h (_Jv_Realloc): Prototype.
+ 
+ 	* include/jvm.h (_Jv_LookupInterfaceMethodIdx): Prototype.
+ 
+ 2000-03-06  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* jni.cc (MARK_NONE): New define.
+ 	(MARK_USER): Likewise.
+ 	(MARK_SYSTEM): Likewise.
+ 	(struct _Jv_JNI_LocalFrame): Made `marker' bigger and `size'
+ 	smaller.
+ 	(_Jv_JNI_DeleteLocalRef): Use MARK_NONE in assert.
+ 	(_Jv_JNI_EnsureLocalCapacity): Use MARK_NONE.
+ 	(_Jv_JNI_PushLocalFrame): Use MARK_USER.
+ 	(_Jv_JNI_PopLocalFrame): New version with additional `stop'
+ 	argument.
+ 	(call): Use MARK_SYSTEM.
+ 	(_Jv_GetJNIEnvNewFrame): New function.
+ 	(_Jv_LookupJNIMethod): New function.
+ 	(_Jv_JNI_PopSystemFrame): New function.
+ 	(call): Use _Jv_JNI_PopSystemFrame and _Jv_LookupJNIMethod.
+ 
+ 2000-03-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	Fix for PR libgcj/43:
+ 	* include/Makefile.in: Rebuilt.
+ 	* include/Makefile.am (include_HEADERS): New define.
+ 
+ 2000-03-05  Anthony Green  <green@redhat.com>
+ 
+ 	* gcj/javaprims.h ("Java"): Remove FirstThread.
+ 
+ 	* configure.host: Fix __NO_MATH_INLNES botch.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_source_files): Move natFirstThread.cc.
+ 	(gnu/gcj/runtime/FirstThread.h): Moved.
+ 	(ordinary_java_source_files): Move FirstThread.java.
+ 	* prims.cc: Deal with FirstThread movement.
+ 	(JvRunMain): Ditto.
+ 	(_Jv_RunMain): Ditto.
+ 
+ 	* gnu/gcj/runtime/FirstThread.java: Moved from java/lang.
+ 	* gnu/gcj/runtime/natFirstThread.cc: Ditto.
+ 
+ 2000-03-05  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/net/DatagramSocket.java(DatagramSocket(int,InetAddress)):
+ 	  Handle null addresses.
+ 
+ 2000-03-04  Anthony Green  <green@redhat.com>
+ 
+ 	* configure.host (libgcj_flags): Define __NO_MATH_INLINES.
+ 	See PR gcj/151.
+ 
+ 2000-03-04  Anthony Green  <green@redhat.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (ZLIBTESTSPEC): New macro.
+ 	(GCTESTSPEC): New macro.
+ 	(LIBGCJTESTSPEC): New macro.
+ 	* libgcj-test.spec.in: New file.
+ 
+ 2000-03-02  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-interp.h: Don't include MethodInvocation.h.
+ 	(class _Jv_InterpMethod): Don't make MethodInvocation a friend.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (gnu/gcj/runtime/MethodInvocation.h): Removed.
+ 	(ordinary_java_source_files): Don't mention
+ 	MethodInvocation.java.
+ 	* gnu/gcj/runtime/MethodInvocation.java: Removed.
+ 	* interpret.cc (MethodInvocation::continue1): Removed.
+ 	(run): Handle exceptions here.
+ 	* java/lang/ClassLoader.java (defineClass1, defineClass2):
+ 	Removed.
+ 	* java/lang/natClassLoader.cc (defineClass0): Catch exceptions
+ 	here.
+ 	(defineClass2): Removed.
+ 
+ 	* java/lang/reflect/Method.java (hack_trampoline, hack_call):
+ 	Removed.
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Catch
+ 	exceptions here.
+ 	(hack_call): Removed.
+ 
+ 	* java/lang/Class.h (Class): Removed hackRunInitializers,
+ 	hackTrampoline.
+ 	* java/lang/natClass.cc (hackRunInitializers): Removed.
+ 	(initializeClass): Catch exceptions here.
+ 	Include ExceptionInInitializerError.h.
+ 	* java/lang/Class.java (hackTrampoline, hackRunInitializers):
+ 	Removed.
+ 
+ 	* java/lang/Object.h (Object): Don't mention hack12_6.
+ 	* java/lang/natObject.cc (_Jv_FinalizeObject): Catch exceptions
+ 	here.
+ 	* java/lang/Object.java (hack12_6): Removed.
+ 
+ 	* java/lang/natThread.cc (run_): Renamed.  Catch exceptions here.
+ 	(start): Use run_, not run__.
+ 	* java/lang/Thread.java (run_): Renamed from run__; old run_
+ 	removed.
+ 
+ 	* jni.cc (_Jv_JNI_FindClass): Handle exceptions.
+ 	(_Jv_JNI_EnsureLocalCapacity): Likewise.
+ 	(_Jv_JNI_DefineClass): Likewise.
+ 	(_Jv_JNI_ThrowNew): Likewise.
+ 	(_Jv_JNI_AllocObject): Likewise.
+ 	(_Jv_JNI_GetAnyMethodID): Likewise.
+ 	(_Jv_JNI_CallAnyMethodV): Likewise.
+ 	(_Jv_JNI_CallAnyMethodA): Likewise.
+ 	(_Jv_JNI_CallAnyVoidMethodV): Likewise.
+ 	(_Jv_JNI_CallAnyVoidMethodA): Likewise.
+ 	(_Jv_JNI_GetAnyFieldID): Likewise.
+ 	(_Jv_JNI_NewString): Likewise.
+ 	(_Jv_JNI_NewStringUTF): Likewise.
+ 	(_Jv_JNI_GetStringUTFChars): Likewise.
+ 	(_Jv_JNI_NewObjectArray): Likewise.
+ 	(_Jv_JNI_NewPrimitiveArray): Likewise.
+ 	(_Jv_JNI_GetPrimitiveArrayRegion): Likewise.
+ 	(_Jv_JNI_GetStringRegion): Likewise.
+ 	(_Jv_JNI_GetStringUTFRegion): Likewise.
+ 	(_Jv_JNI_SetPrimitiveArrayRegion): Likewise.
+ 	(_Jv_JNI_MonitorEnter): Likewise.
+ 	(_Jv_JNI_MonitorExit): Likewise.
+ 	(_Jv_JNI_ToReflectedField): Likewise.
+ 	(_Jv_JNI_ToReflectedMethod): Likewise.
+ 	(_Jv_JNI_RegisterNatives): Likewise.
+ 	(_Jv_JNI_AttachCurrentThread): Likewise.
+ 	(_Jv_JNI_DestroyJavaVM): Likewise.
+ 
+ 2000-02-28  Mo DeJong  <mdejong@cygnus.com>
+ 
+ 	* java/util/zip/ZipOutputStream.java(closeEntry) : Fixed
+ 	error caused by the incorrect casting of a long to an int.
+ 
+ 2000-02-28  Mo DeJong  <mdejong@cygnus.com>
+ 
+ 	* java/util/zip/ZipOutputStream.java(write_entry) : Fixed
+ 	SIGSEV caused by use of the wrong instance variable.
+ 
+ 2000-02-27  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/io/File.java (File(String, String)): For dirPath, treat an
+ 	empty String the same as `null'.
+ 
+ 2000-02-26  Anthony Green  <green@cygnus.com>
+ 
+ 	* gnu/gcj/io/MimeTypes.java: Test for null.
+ 
+ 	* jni.cc (_Jv_JNI_AttachCurrentThread): Minor cleanup.
+ 	(JNI_GetCreatedJavaVMs): Remove compiler warning.
+ 
+ 	* java/net/URLConnection.java: Update copyright notice.
+ 
+ 2000-02-25  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* jni.cc (_Jv_JNI_RegisterNatives): Conditionalize body on
+ 	`INTERPRETER'.
+ 
+ 2000-02-25  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/net/URLConnection.java (initializeDateFormats): New
+ 	private method.
+ 	(getHeaderFieldDate): Call initializeDateFormats if required.
+ 	locale, dateFormat1, dateFormat2, dateFormat3: Don't initialize
+ 	these.
+ 	Fix for PR libgcj/38.
+ 
+ 2000-02-24  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/math/BigInteger.java(ival): Made private.
+ 	(words): Ditto.
+ 	(neg): Ditto.
+ 
+ 2000-02-20  Anthony Green  <green@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ordinary_java_source_files): Add
+ 	gnu/gcj/io/DefaultMimeTypes.java and gnu/gcj/io/MimeTypes.java
+ 
+ 	* scripts/MakeDefaultMimeTypes.java: New file.
+ 	* scripts/mime.types: New file.
+ 	* scripts/classes.pl: Moved from top level.
+ 	* classes.pl: Moved to scripts directory.
+ 
+ 	* java/net/URLConnection.java: Implement guessContentTypeFromName.
+ 
+ 	* gnu/gcj/io/MimeTypes.java: New file.
+ 	* gnu/gcj/io/DefaultMimeTypes.java: New file.
+ 
+ 2000-02-20  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* boehm.cc (_Jv_AllocBytes): Clear returned memory.
+ 
+ 2000-02-19  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/zip/ZipEntry.java (setCrc): Fix overflow.
+ 	(setSize): ditto.
+ 
+ 2000-02-18  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/jvm.h (_Jv_GetJavaVM): Declare.
+ 	* include/java-interp.h (_Jv_GetFirstMethod): New function.
+ 	(_Jv_MethodBase::get_method): New method.
+ 	(_Jv_JNIMethod::set_function): New method.
+ 	* jni.cc (_Jv_JNI_UnregisterNatives): New function.
+ 	(_Jv_JNI_RegisterNatives): New function.
+ 	(_Jv_JNIFunctions): Updated for new functions.
+ 	(_Jv_GetJavaVM): New function.
+ 	(_Jv_JNI_GetJavaVM): Use it.  Now static.
+ 	(_Jv_JNI_AttachCurrentThread): Create a new JNIEnv if this thread
+ 	is already a Java thread but does not have a JNIEnv yet.
+ 
+ 	* java/lang/natRuntime.cc (_load): Pass the JavaVM to the onload
+ 	function.
+ 
+ 2000-02-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* gcj/field.h (_Jv_Field::getClass): Don't use JvAssert.
+ 	Fixes PR gcj/152.
+ 
+ 2000-02-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* jni.cc (_Jv_JNI_CallStaticMethodV): Added some assertions.
+ 
+ 	* jni.cc (_Jv_JNI_NewObjectV): Corrected assertion.
+ 	(_Jv_JNI_NewObject): Likewise.
+ 	(_Jv_JNI_NewObjectA): Likewise.
+ 	(_Jv_JNI_CallAnyMethodV): In constructor case, pass correct value
+ 	as "return" type to _Jv_CallAnyMethodA.
+ 	(_Jv_JNI_CallAnyMethodA): Likewise.
+ 	(_Jv_JNI_CallAnyVoidMethodV): Likewise.
+ 
+ 	* jni.cc (_Jv_JNI_FindClass): Use ClassLoader.loadClass, not
+ 	findClass.
+ 
+ 2000-02-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* resolve.cc (ncode): Set args_raw_size.  Compute jni_cif and
+ 	jni_arg_types.
+ 	(init_cif): Added `rtype_p' argument.
+ 	* include/java-interp.h (class _Jv_MethodBase): Added
+ 	args_raw_size.
+ 	(class _Jv_InterpMethod): Removed args_raw_size.
+ 	(class _Jv_JNIMethod): Added jni_cif and jni_arg_types fields.
+ 	* jni.cc (call): Pass JNIEnv and (for static methods only) the
+ 	class pointer as well as the ordinary arguments.
+ 
+ 	* jni.cc (mangled_name): Skip leading `(' in signature.
+ 
+ 	* jni.cc (add_char): Added missing `else'.
+ 
+ 	* jni.cc (_Jv_JNI_AttachCurrentThread): Return error if malloc
+ 	fails.
+ 
+ 2000-02-15  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* NEWS: Updated.
+ 
+ 	* java/lang/natRuntime.cc (_load): Include library path with
+ 	exception message.
+ 
+ 	* java/lang/natSystem.cc (init_properties): set java.lang.classpath
+ 	property.
+ 
+ 	* java/lang/natThread.cc (dumpStack): Removed.
+ 	* java/lang/Thread.java (dumpStack): Implemented.
+ 
+ 2000-02-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natRuntime.cc (_load): On Unix, prefix library name
+ 	with `lib' for loadLibrary.  Fixes PR gcj/150.
+ 
+ 2000-02-14  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* gnu/gcj/math/MPN.java(findLowestBit): Made methods public.
+ 
+ 	* java/math/BigInteger.java(BigInteger(int,int,java.util.Random):
+ 	  New constructor.
+ 	(min): Implemented.
+ 	(max): Implemented.
+ 	(modPow): Rewritten to not use the naive, slow, brute force approach.
+ 	(isProbablePrime): Implemented.
+ 	(testBit): Implemented.
+ 	(flipBit): Implemented.
+ 	(getLowestSetBit): Implemented.
+ 
+ 2000-02-16  Anthony Green  <green@redhat.com>
+ 
+ 	* configure.host: Use the same options for i386 and i486 as we do
+ 	for i586 and i686.
+ 
+ 2000-02-12  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/File.java (createTempFile): Use low bits from counter,
+ 	not high bits.
+ 
+ Fri Feb 11 19:48:08 2000  Anthony Green  <green@cygnus.com>
+ 
+ 	* THANKS: More thanks.
+ 
+ 2000-02-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* interpret.cc (continue1): Use STOREA, not STOREI, to implement
+ 	astore instruction.  From Hans Boehm.
+ 
+ 2000-02-11  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/math/BigInteger.java(BigInteger(String, int)): New constructor.
+ 	(BigInteger(String)): New constructor.
+ 	(not): Rewritten using version from Kawa's BitOps class.
+ 	(valueOf): New private methods from Kawa's BitOps class.
+ 	(swappedOp): ditto.
+ 	(bitOp): ditto.
+ 	(setBitOp): ditto.
+ 	(and): Implemented.
+ 	(or): Implemented.
+ 	(xor): Implemented.
+ 	(andNot): Implemented.
+ 	(clearBit): Implemented.
+ 	(setBit): Implemented.
+ 	(bitCount): Implemented.
+ 	(toByteArray): Implemented.
+ 
+ 2000-02-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/File.java (nextValue): Now synchronized.
+ 
+ 2000-02-10  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/natFileDescriptorPosix.cc (open): Recognize EXCL flag.
+ 	* java/io/FileDescriptor.java (EXCL): New static field.
+ 	* java/io/File.java (tmpdir): New static field.
+ 	(createTempFile): New method.
+ 	(nextValue): New method.
+ 	* java/lang/natSystem.cc (init_properties): Set java.io.tmpdir
+ 	property.
+ 
+ 	* include/jni.h (JNI_FALSE): Renamed from JNI_TRUE; oops.
+ 	(jboolean): Declare as an attributed int, not a bool.
+ 	(_Jv_func): Declare differently for C.
+ 
+ 	* gnu/gcj/jni/natNativeThread.cc: New file.
+ 	* gnu/gcj/jni/NativeThread.java: New file.
+ 	* java/lang/Thread.java (data): Now a RawData.
+ 	* include/jvm.h (_Jv_GetCurrentJNIEnv, _Jv_SetCurrentJNIEnv):
+ 	Declare.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (java/lang/Thread.h): New target.
+ 	(ordinary_java_source_files): Added NativeThread.java.
+ 	(nat_source_files): Added natNativeThread.cc.
+ 	* java/lang/natThread.cc: Include <jni.h>
+ 	(struct natThread): Added `jni_env' field.
+ 	(_Jv_GetCurrentJNIEnv): New function.
+ 	(_Jv_SetCurrentJNIEnv): Likewise.
+ 	(initialize_native): Initialize jni_env.
+ 	Include RawData.h.
+ 	* jni.cc (ThreadGroupClass): New define.
+ 	(_Jv_JNI_InvokeFunctions): New structure.
+ 	(JNI_GetCreatedJavaVMs): New function.
+ 	(the_vm): New global.
+ 	(JNI_GetDefaultJavaVMInitArgs): New function.
+ 	Include NativeThread.h.
+ 	(NativeThreadClass): New define.
+ 	(_Jv_JNI_EnsureLocalCapacity): Return JNI_ERR, not -1.
+ 	(_Jv_JNI_DestroyJavaVM): New function.
+ 	(_Jv_JNI_AttachCurrentThread): New function.
+ 	(_Jv_JNI_DetachCurrentThread): New function.
+ 	(_Jv_JNI_GetEnv): New function.
+ 	(JNI_CreateJavaVM): New function.
+ 	(_Jv_JNI_GetJavaVM): New function.
+ 	(_Jv_JNIFunctions): Added entry for GetJavaVM.
+ 	* include/jni.h (JavaVMAttachArgs): New structure.
+ 	(JNI_EDETACHED): New define.
+ 	(JNI_EVERSION): Likewise.
+ 	(JavaVM): Define properly.
+ 	(struct JNIInvokeInterface): New structure.
+ 	(class _Jv_JavaVM): New class.
+ 	(JNI_OnLoad, JNI_OnUnload): Declare.
+ 	(JNI_GetDefaultJavaVMInitArgs, JNI_CreateJavaVM,
+ 	JNI_GetCreatedJavaVMs): Declare.
+ 	(JavaVMInitArgs): New typedef.
+ 	(JavaVMOption): Likewise.
+ 	(JNI_ERR): New define.
+ 	(JNI_OK): Likewise.
+ 
+ 2000-02-10  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* interpret.cc: Don't include fdlibm.h.
+ 	Replace #if with #ifdef throughout.
+ 	Declare extern __ieee754_fmod.
+ 	(continue1): Remove op_getfield, op_getstatic, op_putfield,
+ 	op_putstatic insns.
+ 	* resolve.cc (_Jv_PrepareClass): Use imeth as method pointer.
+ 	Search class hierarchy for superclass vtable.
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_UnregisterClass): Don't fall
+ 	off the end of a pointer list.
+ 
+ 	* java/lang/natThread.cc (stop): Don't abort, throw an exception
+ 	instead.
+ 	(suspend): Ditto.
+ 
+ 2000-02-09  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natRuntime.cc (_load): Call add_library.
+ 	(loadLibraryInternal): Likewise.
+ 
+ 	* gnu/gcj/convert/natIconv.cc (Input_iconv::finalize): Call
+ 	iconv_close when handle is not NULL.  Thanks to Andrew Haley.
+ 	(Output_iconv::finalize): Likewise.
+ 
+ 2000-02-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/Properties.java (setProperty): New method.
+ 	(store): New method.
+ 
+ 2000-02-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Runtime.java (_load): Declare.
+ 	(load, loadLibrary): Wrote in terms of _load.
+ 	* java/lang/natRuntime.cc (load): Call JNI_OnLoad if it appears in
+ 	library.
+ 	(loadLibrary): Likewise.
+ 	Include <jni.h>.
+ 	(_load): New method.
+ 	(loadLibrary, load): Removed.
+ 
+ 	* jni.cc (ThrowableClass): New define.
+ 	(_Jv_JNI_Throw): Check argument.
+ 	(_Jv_JNI_ThrowNew): Likewise.
+ 	(wrap_value): Don't wrap object if it is NULL.
+ 	(_Jv_JNI_DefineClass): Use wrap_value.
+ 	(_Jv_JNI_FindClass): Likewise.
+ 	(_Jv_JNI_GetSuperclass): Likewise.
+ 	(_Jv_JNI_ExceptionOccurred): Likewise.
+ 	(_Jv_JNI_AllocObject): Likewise.
+ 	(_Jv_JNI_GetObjectClass): Likewise.
+ 	(_Jv_JNI_NewString): Likewise.
+ 	(_Jv_JNI_NewStringUTF): Likewise.
+ 	(_Jv_JNI_NewObjectArray): Likewise.
+ 	(_Jv_JNI_GetObjectArrayElement): Likewise.
+ 	(_Jv_JNI_NewPrimitiveArray): Likewise.
+ 	(_Jv_JNI_ToReflectedField): Likewise.
+ 	(_Jv_JNI_ToReflectedMethod): Likewise.
+ 	(_Jv_JNI_AllocObject): Check argument.
+ 	(_Jv_JNI_NewObjectV): Likewise.
+ 	(_Jv_JNI_NewObject): Likewise.
+ 	(_Jv_JNI_NewObjectA): Likewise.
+ 	(_Jv_JNI_GetObjectClass): Likewise.
+ 	(_Jv_JNI_GetField): Likewise.
+ 	(_Jv_JNI_SetField): Likewise.
+ 
+ 	* interpret.cc (PUSHL): Don't use expression statement.
+ 	(PUSHD): Likewise.
+ 	(LOADL): Likewise.
+ 	(STOREL): Likewise.
+ 
+ 	* jni.cc (add_char): Conditional on INTERPRETER.
+ 	(mangled_name): Likewise.
+ 	(call): Likewise.
+ 	* include/java-interp.h (class _Jv_MethodBase): Conditional on
+ 	INTERPRETER.
+ 	(class _Jv_JNIMethod): Likewise.
+ 
+ 2000-02-04  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* Makefile.am: Added MPN.java and BigInteger.java.
+ 	* Makefile.in: Rebuilt.
+ 	* gnu/gcj/math/MPN.java: New file.  From Kawa by Per Bothner
+ 	<per@bothner.com>.
+ 	* java/math/BigInteger.java: New file.  Based primarily on
+ 	Kawa's IntNum.java by Per Bothner <per@bothner.com>.
+ 
+ 2000-02-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* defineclass.cc (handleMethodsBegin): Allocate _Jv_MethodBase
+ 	pointers.
+ 	(handleMethodsEnd): Fixed error messages.  Create a _Jv_JNIMethod
+ 	if the method is native.
+ 	* resolve.cc (ncode): Don't handle native methods.
+ 	(_Jv_JNIMethod::ncode): New method.
+ 	(_Jv_PrepareClass): Handle native methods.
+ 	* jni.cc (call): Renamed from _Jv_JNI_conversion_call.
+ 	Include AbstractMethodError.h.
+ 	(add_char): New function.
+ 	(mangled_name): Likewise.
+ 	* include/java-interp.h (class _Jv_JNIMethod): New class.
+ 	(class _Jv_MethodBase): New class.
+ 	(class _Jv_InterpMethod): Derive from _Jv_MethodBase.
+ 	(_Jv_InterpClass): Changed `interpreted_methods' field to type
+ 	`_Jv_MethodBase'.
+ 
+ 	* include/jvm.h (_Jv_FindSymbolInExecutable): Declare.
+ 	* java/lang/natRuntime.cc (libraries_size, libraries_count,
+ 	libraries): New globals.
+ 	(add_library): New function.
+ 	(_Jv_FindSymbolInExecutable): New function.
+ 
+ 	* java/lang/natClassLoader.cc (initiated_classes, loaded_classes):
+ 	Now static.
+ 
+ 2000-02-04  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* java/lang/Throwable.java (CPlusPlusDemangler): New class.
+ 	(printStackTrace): Use a CPlusPlusDemangler to demangle names.
+ 	* java/lang/natThrowable.cc (printRawStackTrace): Rename
+ 	printStackTrace to printRawStackTrace.
+ 
+ 2000-02-03  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/util/Calendar.java (toString): New method.
+ 	* java/util/SimpleTimeZone.java (clone): New method.
+ 	(toString): New method.
+ 	* java/util/TimeZone.java (clone): New method.
+ 	* java/text/SimpleDateFormat.java (clone): New method.
+ 	* java/text/NumberFormat.java (clone): New method.
+ 	(equals): New method.
+ 	* java/text/Format.java (clone): New method.
+ 	* java/text/DateFormatSymbols.java (DateFormatSymbols): New
+ 	constructor.
+ 	(clone): New method.
+ 	* java/text/DateFormat.java (clone): New method.
+ 	* java/text/Collator.java (clone): New method.
+ 
+ 2000-02-03  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/io/PipedOutputStream.java (write(byte[], int, int)): New
+ 	method.
+ 
+ 2000-02-01  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/java-interp.h (_Jv_JNI_conversion_call): Declare.
+ 	* resolve.cc (ncode): Use _Jv_JNI_conversion_call when
+ 	constructing the closure if the function is native.
+ 	* jni.cc (_Jv_JNI_conversion_call): Now returns `void'.  No longer
+ 	a template function, #if'd out, or static.
+ 	Include <java-interp.h>.
+ 
+ 	* include/jni.h (class _Jv_JNIEnv): Corrected calls using `...'.
+ 
+ 	* include/jni.h (class _Jv_JNIEnv): Added all C++ inline methods.
+ 
+ 	* jni.cc (_Jv_JNI_PopLocalFrame): Leave loop when `n == NULL'.
+ 	(_Jv_JNI_conversion_call): _Jv_JNI_PopLocalFrame will never leave
+ 	`locals == NULL'.
+ 	(wrap_value): New function.
+ 	(_Jv_JNI_CallAnyMethodV): Use it.
+ 	(_Jv_JNI_CallAnyMethodA): Likewise.
+ 	(_Jv_JNI_GetField): Use wrap_value; removed specialized version.
+ 	(_Jv_JNI_GetStaticField): Likewise.
+ 
+ 	* jni.cc (_Jv_JNI_GetField): Specialize for jobject.
+ 	(_Jv_JNI_GetStaticField): Likewise.
+ 
+ 2000-01-31  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (_Jv_MallocUnchecked): New function.
+ 	(main_init): Call _Jv_JNI_Init.
+ 	* include/jvm.h (_Jv_MallocUnchecked): Declare.
+ 	(_Jv_JNI_Init): Declare.
+ 	* jni.cc: Include Hashtable.h, OutOfMemoryError.h, Integer.h,
+ 	<string.h>.
+ 	(_Jv_JNI_NewGlobalRef): New function.
+ 	(_Jv_JNI_DeleteGlobalRef): New function.
+ 	(_Jv_JNI_DeleteLocalRef): New function.
+ 	(_Jv_JNI_conversion_call): Initialize and clear local reference
+ 	frame.
+ 	(_Jv_JNI_NewLocalRef): New function.
+ 	(struct _Jv_JNI_LocalFrame): New structure.
+ 	(_Jv_JNI_PushLocalFrame): New function.
+ 	(_Jv_JNI_EnsureLocalCapacity): New function.
+ 	(FRAME_SIZE): New define.
+ 	(_Jv_JNI_GetStringChars): Mark string, not characters.
+ 	(_Jv_JNI_ReleaseStringChars): Unmark string, not characters.
+ 	(_Jv_JNI_GetPrimitiveArrayElements): Mark array, not elements.
+ 	(_Jv_JNI_ReleasePrimitiveArrayElements): Unmark array, not
+ 	elements.
+ 	(_Jv_JNI_DefineClass): Make return value a local ref.
+ 	(_Jv_JNI_FindClass): Likewise.
+ 	(_Jv_JNI_GetSuperclass): Likewise.
+ 	(_Jv_JNI_ExceptionOccurred): Likewise.
+ 	(_Jv_JNI_AllocObject): Likewise.
+ 	(_Jv_JNI_GetObjectClass): Likewise.
+ 	(_Jv_JNI_CallAnyMethodV): Likewise.
+ 	(_Jv_JNI_NewString): Likewise.
+ 	(_Jv_JNI_NewStringUTF): Likewise.
+ 	(_Jv_JNI_NewObjectArray): Likewise.
+ 	(_Jv_JNI_GetObjectArrayElement): Likewise.
+ 	(_Jv_JNI_ToReflectedField): Likewise.
+ 	(_Jv_JNI_ToReflectedMethod): Likewise.
+ 	(_Jv_JNIFunctions): Updated table for new functions.
+ 	(_Jv_JNI_Init): New function.
+ 	(mark_for_gc): Wrote.
+ 	(unmark_for_gc): Wrote.
+ 	* include/jni.h (struct JNINativeInterface): Removed name from
+ 	PopLocalFrame parameter.
+ 	(class _Jv_JNIEnv): Added `locals' field.
+ 
+ Mon Jan 31 00:43:15 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* gnu/gcj/convert/natIconv.cc (read): Minor fixes.
+ 	(write): Ditto.
+ 
+ 2000-01-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h (HAVE_ICONV): Define.
+ 	* configure: Rebuilt.
+ 	* configure.in: Check for `iconv' function.
+ 	* gnu/gcj/convert/BytesToUnicode.java (getDecoder): Try iconv if
+ 	no specific encoder exists.
+ 	* gnu/gcj/convert/UnicodeToBytes.java (getEncoder): Try iconv if
+ 	no specific encoder exists.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (convert_source_files): Mention Input_iconv.java and
+ 	Output_iconv.java.
+ 	(nat_source_files): Added natIconv.cc.
+ 	* gnu/gcj/convert/natIconv.cc: New file.
+ 	* gnu/gcj/convert/Input_iconv.java: New file.
+ 	* gnu/gcj/convert/Output_iconv.java: New file.
+ 
+ 2000-01-28  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (LIBFFIINCS): Added MULTIBUILDTOP.
+ 
+ 2000-01-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* gcj/method.h (JvNumMethods): Moved from Class.h.
+ 	(JvGetFirstMethod): Likewise.
+ 	* java/lang/Class.h (Object): Updated decl of
+ 	_Jv_JNI_ToReflectedField.
+ 	(Object): Added _Jv_JNI_ToReflectedMethod as a friend.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (java/lang/reflect/Field.h): Added `jboolean'
+ 	argument of _Jv_JNI_ToReflectedField.
+ 	(java/lang/reflect/Constructor.h): Added _Jv_JNI_ToReflectedMethod
+ 	as a friend.
+ 	(java/lang/reflect/Method.h): Likewise.
+ 	* include/jni.h (class _Jv_JNIEnv): Added `klass' member.  Use
+ 	__GCJ_JNI_IMPL__.
+ 	(jweak): New typedef.
+ 	(struct JNINativeInterface): Correctly declare remaining entries.
+ 	* jni.cc: Include Class.h, ClassLoader.h.
+ 	(_Jv_JNI_FindClass): New function.
+ 	(_Jv_JNI_DefineClass): New function.
+ 	(_Jv_JNI_conversion_call): New function.
+ 	(_Jv_JNI_FindClass): Use current class loader to find class.
+ 	(_Jv_JNI_ExceptionCheck): New function.
+ 	(_Jv_JNI_FromReflectedField): Now static.
+ 	(MethodClass): New define.
+ 	(_Jv_JNI_FromReflectedMethod): New function.
+ 	(_Jv_JNI_ToReflectedMethod): Likewise.
+ 	Include Method.h.
+ 	(_Jv_JNI_IsAssignableFrom): Renamed.
+ 	(_Jv_JNI_GetStringRegion): New function.
+ 	Include StringIndexOutOfBoundsException.h.
+ 	(_Jv_JNI_GetStringUTFRegion): New function.
+ 	(_Jv_JNIFunctions): Updated for new functions.
+ 	(_Jv_JNI_GetPrimitiveArrayCritical): New function
+ 	(_Jv_JNI_ReleasePrimitiveArrayCritical): Likewise.
+ 	(_Jv_JNI_GetStringCritical): New function.
+ 	(_Jv_JNI_ReleaseStringCritical): Likewise.
+ 	(get_throwable): Removed.
+ 	(GCJ_JV_JNIENV_FRIEND): Removed.
+ 	(__GCJ_JNI_IMPL__): Define.
+ 	Include method.h.
+ 
+ 	* resolve.cc (get_ffi_type_from_signature): Handle case where
+ 	boolean is an int.
+ 
+ Tue Jan 25 08:51:16 2000  Tom Tromey  <tromey@ferrule.cygnus.com>
+ 
+ 	* interpret.cc (run): Don't call println.
+ 	Don't include PrintStream.h.
+ 
+ 	* gcj/field.h (struct _Jv_Field): Use "jshort" as type for
+ 	nameIndex.  Use "jint" as type for boffset.
+ 	* java/lang/Class.h (struct _Jv_Method): Made accflags a
+ 	_Jv_ushort.
+ 	(Class): Likewise.  Also changed type of method_count,
+ 	vtable_method_count, size_in_bytes, field_count,
+ 	static_field_count, interface_count.
+ 	* gcj/array.h (__JArray): Made `length' a const jsize, not an
+ 	int.
+ 
+ 2000-01-21  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/natConstructor.cc (newInstance): Use
+ 	_Jv_CallAnyMethodA.
+ 	* include/jvm.h: Declare _Jv_CallAnyMethodA.
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Renamed
+ 	from _Jv_CallNonvirtualMethodA.  Changed interface; overloaded.
+ 	Include <jni.h>.
+ 	(COPY): Removed.
+ 	(invoke): Use _Jv_CallAnyMethodA.
+ 	(VAL): Redefined.
+ 	* java/lang/Class.h (Class): Declare JvGetFirstStaticField,
+ 	JvNumStaticFields, JvNumMethods, and JvGetFirstMethod as friend
+ 	functions.
+ 	(struct _Jv_Method): Added getNextMethod method.
+ 	(JvNumMethods): New function.
+ 	(JvGetFirstMethod): Likewise.
+ 	* gcj/field.h (JvGetFirstStaticField): New function.
+ 	(JvNumStaticFields): Likewise.
+ 	(getNextField): Renamed from getNextInstanceField.
+ 	(struct _Jv_Field): New method getClass.
+ 	* jni.cc: Wrote many new functions.
+ 	* include/jni.h (JNI_TRUE): Define.
+ 	(JNI_FALSE): Likewise.
+ 	(jobject, jclass, jstring, jarray, jthrowable, jobjectArray,
+ 	jbyteArray, jshortArray, jintArray, jlongArray, jbooleanArray,
+ 	jcharArray, jfloatArray, jdoubleArray): New typedefs.
+ 	(jfieldID, jmethodID): Likewise.
+ 	(JNI_COMMIT, JNI_ABORT): New defines.
+ 	(JNINativeMethod): New struct.
+ 	(struct JNINativeInterface): Correctly declared more entries.
+ 	(class _Jv_JNIEnv): Added `ex' member.
+ 	(JNI_VERSION_1_1): New define.
+ 	(JNI_VERSION_1_2): Likewise.
+ 
+ 	* boehm.cc (_Jv_MarkObj): Use getNextField, not
+ 	getNextInstanceField.
+ 
+ 2000-01-20  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* resolve.cc (StringClass): Removed.
+ 	* defineclass.cc (StringClass): Removed.
+ 
+ 2000-01-19  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* NEWS: updated.
+ 
+ 2000-01-19  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* interpret.cc (PC_REGISTER_ASM): Removed.
+ 
+ 	* java/lang/natThrowable.cc: Don't use `#pragma implementation'.
+ 	From Bryce McKinlay.
+ 
+ 	* All files: Updated copyright to reflect Cygnus purchase.
+ 
+ 2000-01-18  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Recognize --disable-interpreter.
+ 
+ 2000-01-18  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* name-finder.cc (lookup): Check for dladdr function.
+ 	acconfig.h (HAVE_DLADDR): Add.
+ 	configure.in: Check for HAVE_DLADDR
+ 	configure: Rebuilt.
+ 	include/config.h.in:  Rebuilt.
+ 
+ 2000-01-17  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* prims.cc (_Jv_RunMain): Set the name of this executable.
+ 
+ 2000-01-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natThrowable.cc (fillInStackTrace): Return `this' even
+ 	when backtrace can't be computed.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Fixed typo in AC_CONFIG_SUBDIRS call.
+ 
+ 	* java/lang/Runtime.java (loadLibraryInternal): Declare.
+ 	* java/lang/natClassLoader.cc (_Jv_FindClass): Removed dead copy.
+ 	(_Jv_FindClassInCache): Likewise.
+ 	(_Jv_FindClass): Don't conditionalize body on INTERPRETER.
+ 	(findSystemClass): Try to load class from compiled module.
+ 	Include Runtime.h.
+ 	* java/lang/natRuntime.cc (load): Use UTF-8 copy of filename.
+ 	(loadLibrary): Likewise.
+ 	(lt_preloaded_symbols): Define.
+ 	(loadLibraryInternal): New method.
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h (USE_LTDL): Added.
+ 	* Makefile.am (SUBDIRS): Added $(DIRLTDL).
+ 	(INCLUDES): Added $(INCLTDL).
+ 	(libgcj_la_DEPENDENCIES): Added $(LIBLTDL).
+ 	(libgcj_la_LIBADD): Likewise.
+ 	* aclocal.m4, configure: Rebuilt.
+ 	* configure.in: Added libltdl support.
+ 
+ 2000-01-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* prims.cc (_Jv_PrimClass): Use `JV_STATE_NOTHING', not `0'.
+ 
+ 2000-01-14  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* java/lang/natThrowable.cc: New file.
+ 
+ 	* java/lang/Throwable.java (fillInStackTrace): Make native.
+ 	(printStackTrace): Call native method to do this.
+ 	(Throwable): Call fillInStackTrace.
+ 	(stackTrace): New variable.
+ 
+ 	* include/jvm.h: Add _Jv_ThisExecutable functions.
+ 
+ 	* prims.cc: (_Jv_execName): New variable.
+ 	(catch_segv): Call fillInStackTrace.
+ 	(catch_fpe): Ditto.
+ 	(_Jv_ThisExecutable): New functions.
+ 	(JvRunMain): Set the name of this executable.
+ 
+ 	* Makefile.am: Add java/lang/natThrowable.cc.
+ 	Add name-finder.cc.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* acconfig.h: Add HAVE_PROC_SELF_EXE.
+ 
+ 	* configure.in: Force link with __frame_state_for in
+ 	FORCELIBGCCSPEC.  Add new checks for backtrace.
+ 	* include/config.h.in: Rebuilt.
+ 
+ 	* name-finder.cc: New file.
+ 	* include/name-finder.h: New file.
+ 
+ 2000-01-16  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/StringBuffer.java (StringBuffer): Don't special case
+ 	null argument.
+ 
+ 2000-01-16  Jeff Sturm  <jsturm@sigma6.com>
+ 
+ 	* java/io/StreamTokenizer.java (nextToken): Avoid unread(TT_EOF).
+ 
+ 2000-01-13  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_FindClass): Register `loader',
+ 	not system loader, as initiating loader.
+ 
+ 2000-01-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natSystem.cc (getpwuid_adaptor): New adaptor for
+ 	HP/UX.  From David Scott Urban.
+ 
+ 2000-01-10  Jeff Sturm  <jsturm@sigma6.com>
+ 
+ 	* java/lang/natMath.cc (pow): Cast args to `double', not
+ 	`jdouble'.
+ 	(atan2): Likewise.
+ 	(IEEEremainder): Likewise.
+ 	* java/lang/mprec.h: Don't wrap includes in `extern "C"'.
+ 	* java/lang/fdlibm.h: Don't wrap includes in `extern "C"'.
+ 
+ 2000-01-09  Anthony Green  <green@cygnus.com>
+ 
+ 	* java/lang/natString.cc (init): Test for overflow condition
+ 	during out of bounds check.
+ 	(getChars): Throw StringIndexOutOfBoundsException, not
+ 	ArrayIndexOutOfBoundsException.
+ 	(getBytes): Ditto.
+ 	(regionMatches): Obey case option during string comparison.
+ 
+ 	* configure.host (ligcj_interpreter): New variable.  Enable
+ 	interpreter by default on IA-32.
+ 	* configure.in:  Examine libgcj_interpreter.
+ 	* configure: Rebuilt.
+ 
+ 2000-01-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* mauve-libgcj: Don't disable ClassTest.
+ 
+ 	* java/lang/natClass.cc (getClasses): Wrote.
+ 
+ 2000-01-06  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natClass.cc (_getConstructors): Correctly check
+ 	whether method name is the init name.
+ 	(getMethod): Look at accflags on method in `klass', not `this'.
+ 
+ 2000-01-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/natClass.cc (getMethod): Compute offset relative to
+ 	`klass's methods table, not `this's table.
+ 
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallNonvirtualMethodA):
+ 	In unwrapping/widening case, check whether `k' is null, not
+ 	whether it is primitive.  Initialize `num' from `argelts', not
+ 	`paramelts'.  Correct create and pass arguments to ffi_call.
+ 	Don't let presence of `this' argument affect index used to look in
+ 	argument arrays.
+ 	(COPY): Set appropriate element in `values' vector.
+ 
+ 	* java/lang/natClass.cc: Include <gcj/method.h>.
+ 
+ 	* java/lang/Class.h (_getMethods): Correctly declare as private,
+ 	not public.
+ 
+ 	* java/lang/Class.h (_getMethods): Declare.
+ 	* java/lang/Class.java (_getMethods): Declare.
+ 	* java/lang/natClass.cc (getDeclaringClass): Always return NULL.
+ 	(getDeclaredClasses): Always return empty array.
+ 	(_getMethods): New method.
+ 	(getMethods): Wrote.
+ 	(getDeclaredMethod): Return `rmethod'.
+ 	(finit_name): New global.
+ 	(getDeclaredMethods): Check for finit_name.
+ 	(_getMethods): Likewise.
+ 	(getMethod): Only return public methods.
+ 
+ 	* java/lang/reflect/natMethod.cc (get_ffi_type): Test size of
+ 	jboolean and select correct ffi type on that basis.
+ 	(_Jv_CallNonvirtualMethodA): Handle `void' return type.
+ 	Constructor call always has `void' return type.
+ 
+ 2000-01-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/Class.h (getSignature): Updated.
+ 	* java/lang/Class.java (getSignature): Updated.
+ 	* java/lang/natClass.cc (getSignature): Added `is_constructor'
+ 	argument.
+ 	(getConstructor): Ensure constructor is public.
+ 	(_getConstructors): Check for public-ness of constructor when
+ 	`declared' is false, not when it is true.
+ 
+ 2000-01-04  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc (peek): Removed unnecesary
+ 	comment.
+ 	(receive): Set the sender's address in the DatagramPacket.
+ 
+ 2000-01-04  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/natConstructor.cc (newInstance): Pass
+ 	declaring class as return_type argument to
+ 	_Jv_CallNonvirtualMethodA.
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallNonvirtualMethodA): In
+ 	constructor case, create object and use it as `this' argument.
+ 	* java/lang/Class.h (_getConstructors): Declare.
+ 	(_getFields): Declare.
+ 	* java/lang/Class.java (getConstructors): Wrote.
+ 	(_getConstructors): New native method.
+ 	(getDeclaredConstructors): Wrote.
+ 	(_getFields): Declare new native method.
+ 	* java/lang/natClass.cc (_Jv_LookupInterfaceMethod): Removed
+ 	incorrect comment.
+ 	(getMethod): Work correctly when class is primitive.
+ 	(getDeclaredMethods): Likewise.  Compute offset using `method',
+ 	not `mptr'.
+ 	(getDeclaredMethod): Likewise.
+ 	(getConstructor): Wrote.
+ 	(ConstructorClass): New define.
+ 	(getDeclaredConstructor): Wrote.
+ 	(_getConstructors): New method.
+ 	(_getFields): New method.
+ 	(getFields): Wrote.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_CXXFLAGS): Added -D_GNU_SOURCE.
+ 
+ 	* prims.cc: Remove `#pragma implementation'.
+ 	* gcj/array.h: Remove `#pragma interface'.
+ 
+ 	* prims.cc (_Jv_equaln): New function.
+ 	* java/lang/Class.java (getSignature): Declare.
+ 	* resolve.cc (_Jv_LookupDeclaredMethod): Moved to natClass.cc.
+ 	* java/lang/natClass.cc (_Jv_LookupDeclaredMethod): Moved from
+ 	resolve.cc.
+ 	(getSignature): New method.
+ 	(getDeclaredMethod): Wrote.
+ 	(getMethod): Wrote.
+ 	Include StringBuffer.h.
+ 	* java/lang/Class.h (Class): Added _Jv_FromReflectedConstructor
+ 	as a friend.  Unconditionally declare _Jv_LookupDeclaredMethod as
+ 	a friend.
+ 	(getSignature): Declare.
+ 	* include/jvm.h (_Jv_GetTypesFromSignature): Declare.
+ 	(_Jv_equaln): Declare.
+ 	(_Jv_CallNonvirtualMethodA): Declare.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_source_files): Added natConstructor.cc.
+ 	(java/lang/reflect/Constructor.h): New target.
+ 	* java/lang/reflect/natConstructor.cc: New file.
+ 	* java/lang/reflect/Constructor.java (newInstance): Now native.
+ 	(declaringClass): Renamed from decl_class.
+ 	(offset): Renamed from index.
+ 	(getType): New native method.
+ 	(getModifiers): Now native.
+ 	(getParameterTypes): Call getType if required.
+ 	(hashCode): Include hash code from declaring class.
+ 	(modifiers): Removed.
+ 	(toString): Call getType if required.
+ 	* gcj/method.h (_Jv_FromReflectedConstructor): New function.
+ 	* java/lang/reflect/natMethod.cc (hack_call): New method.
+ 	Removed `#if 0' around FFI code.
+ 	Include <gnu/gcj/RawData.h>.
+ 	(invoke): Use _Jv_CallNonvirtualMethodA.  Throw
+ 	IllegalArgumentException when argument object and class disagree.
+ 	(_Jv_GetTypesFromSignature): New function.
+ 	(getType): Use it.
+ 	(ObjectClass): New define.
+ 	(_Jv_CallNonvirtualMethodA): New function.
+ 	* java/lang/reflect/Method.java (hack_trampoline): New method.
+ 	(hack_call): New native method.
+ 
diff -Nrcpad gcc-4.0.2/libjava/ChangeLog-2001 gcc-4.1.0/libjava/ChangeLog-2001
*** gcc-4.0.2/libjava/ChangeLog-2001	Tue Jan 22 00:20:23 2002
--- gcc-4.1.0/libjava/ChangeLog-2001	Wed May  4 18:29:28 2005
*************** Tue Oct 23 23:52:18 2001  Anthony Green 
*** 3499,3505 ****
  	ancestors array is invalid for interfaces, so do that *after*
  	check that the target type is not an interface.
  
! 2000-03-23  Jeff Sturm  <jsturm@one-point.com>
  
  	* prims.cc (_Jv_FindClassFromSignature): Check return of
  	recursive call.  Do not abort on invalid signature; return NULL
--- 3499,3505 ----
  	ancestors array is invalid for interfaces, so do that *after*
  	check that the target type is not an interface.
  
! 2001-03-23  Jeff Sturm  <jsturm@one-point.com>
  
  	* prims.cc (_Jv_FindClassFromSignature): Check return of
  	recursive call.  Do not abort on invalid signature; return NULL
*************** Tue Oct 23 23:52:18 2001  Anthony Green 
*** 4257,9335 ****
  	(setLayout): Call invalidate.
  	(findComponentAt): Wrote.
  
- 2000-12-30  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* Makefile.am (libgcj_la_LIBADD): Add $(THREADLIBS). This ensures that
- 	the correct versions of various linuxthreads functions get linked.
- 	* Makefile.in: Rebuilt.
- 	* java/lang/natThread.cc (finalize_native): New static function. Call
- 	_Jv_ThreadDestroyData.
- 	(initialize_native): Register finalizer for "data".
- 	* include/posix-threads.h (_Jv_ThreadInitData): New simpler prototype.
- 	(_Jv_ThreadDestroyData): New prototype.
- 	* include/win32-threads.h: Ditto.
- 	* include/no-threads.h: Ditto.
- 	* posix-threads.cc (_Jv_ThreadInitData): Implement new prototype.
- 	(_Jv_ThreadDestroyData): New function. Free native thread "data" and
- 	move mutex and condition variable destroy code from:
- 	(really_start): ...here.
- 	(_Jv_ThreadStart): Set PTHREAD_CREATE_DETACHED.
- 	* win32-threads.cc (_Jv_ThreadInitData): Implement new prototype.
- 	(_Jv_ThreadDestroyData): Implemented.
- 	* nogc.cc (_Jv_AllocObject): Use "void *" not "ptr_t".
- 	(_Jv_AllocArray): Ditto.
- 
- 2000-12-27  Jeff Sturm  <jeff.sturm@commerceone.com>
- 
- 	* java/sql/DriverManager.java (getConnection): Don't set user/password
- 	properties if null.
- 
- 2000-12-27  Warren Levy  <warrenl@redhat.com>
- 
- 	Fix for PR libgcj/1358:
- 	* java/lang/System.java: Update Copyright date properly.
- 	* java/util/Calendar.java: Fix typo in comment.
- 	(set): Set 24-hour clock hour instead of 12-hour clock hour.
- 	* java/util/GregorianCalendar.java (GregorianCalendar): Properly
- 	initialize times.  Spec says to set H:M:S values to zero only if
- 	a date is given.
- 	* java/util/TimeZone.java (getDefaultDisplayName): Casts to char
- 	needed for evaluating numbers '0' to '9' in printouts of GMT offsets.
- 	* java/util/natGregorianCalendar.cc (computeTime): Properly handle
- 	timezones and GMT offsets, being careful to account for units of
- 	milliseconds vs. seconds.
- 
- 2000-12-28  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/natClass.cc (_Jv_IsAssignableFrom): Primitive TYPEs can
- 	not be assigned to Object.
- 
- 	Fix for PR libgcj/1516:
- 	* java/lang/reflect/natMethod.cc (primitives): Remove void entry.
- 	Add boolean entry.
- 	(can_widen): Declared inline. Remove redundant checks for void
- 	arguments and char->short conversion. Add special case for boolean
- 	conversions.
- 	(ffi_type): Declared inline.
- 	(_Jv_CallAnyMethodA): Move unwrapping logic inside isPrimitive() block.
- 
- 2000-12-26  Petter Reinholdtsen  <pere@hungry.com>
- 
- 	* java/sql/SQLWarning.java: Fixed typo in comment.
- 
- 2000-12-26  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/awt/MenuItem.java (paramString): Now protected.
- 
- 	* java/awt/MenuShortcut.java: Implements Serializable.
- 
- 	* java/awt/MenuBar.java: Rewrote from scratch.
- 
- 	* java/awt/MenuComponent.java (removeNotify): Wrote.
- 	Implements Serializable.
- 
- 	* java/awt/GridBagConstraints.java (GridBagConstraints): New
- 	constructor.
- 
- 	* java/awt/CheckboxMenuItem.java: Wrote.
- 
- 2000-12-25  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/awt/MenuContainer.java: Fixed typo.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added SystemColor.java.
- 	* java/awt/SystemColor.java: New file.
- 
- 	* java/awt/Color.java (rgba): Now package-private.
- 
- 	* java/awt/event/InputEvent.java (isAltGraphDown): New method.
- 
- 	* java/awt/event/ContainerEvent.java (getContainer): Renamed from
- 	getComponent.
- 
- 	* java/awt/MenuItem.java (addNotify): New method.
- 	(MenuItem(String,MenuShortcut)): New constructor.
- 	(setLabel): Notify peer of change.
- 	(setEnabled): Likewise.
- 
- 	* java/awt/GridLayout.java (toString): New method.
- 
- 	* java/awt/FlowLayout.java (LEADING, TRAILING): New constants.
- 	(FlowLayout): Check for LEADING and TRAILING.
- 	(setAlignment): Likewise.
- 	(layoutContainer): Handle component orientation.
- 
- 	* java/awt/Component.java (orientatin): New field.
- 	(setComponentOrientation): Wrote.
- 	(getComponentOrientation): Wrote.
- 
- 	* java/awt/Event.java (Event): Implements Serializable.
- 	(consumed): New field for serialization.
- 	* java/awt/Dimension.java (Dimension): Implements Serializable.
- 	* java/awt/Cursor.java (Cursor): Implements Serializable.
- 	* java/awt/Container.java (Container): No longer abstract.
- 
- 	* java/awt/Choice.java: Wrote.
- 	* java/awt/Checkbox.java: Wrote.
- 	* java/awt/ItemSelectable.java: Documented.
- 	* java/awt/CheckboxGroup.java: Wrote.
- 
- 	* java/awt/CardLayout.java (layoutContainer): Directly use fields
- 	in other classes.
- 	(getSize): Likewise.
- 
- 2000-12-24  Jeff Sturm  <jeff.sturm@commerceone.com>
- 
- 	* java/io/FileDescriptor.java: Initialize fd to -1.
- 	Remove default constructor.
- 
- 2000-12-23  Joseph S. Myers  <jsm28@cam.ac.uk>
- 
- 	* java/lang/mprec.h: Change C9X reference to refer to C99.
- 
- 2000-12-22  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/Throwable.java (trace_enabled): New static field.
- 	* java/lang/natThrowable.cc (fillInStackTrace): Do nothing if
- 	trace_enabled not set.
- 	* prims.cc (main_init): Turn off trace_enabled while creating
- 	default exception objects.
- 
- 2000-12-21  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/beans/PropertyChangeListener.java: Extends EventListener.
- 	* java/beans/VetoableChangeListener.java: Extends EventListener.
- 
- 	* java/util/zip/Deflater.java (update, init): Now private.
- 
- 2000-12-21  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/BasicMapEntry.java: Re-added.
- 	* java/util/HashMap.java (Entry): Extend BasicMapEntry.
- 	(putAll): Test for BasicMapEntry.
- 	* java/util/Hashtable.java (Entry): Extend BasicMapEntry.
- 	(putAll): Test for BasicMapEntry.
- 	Change references from `HashMap.Entry' to `Entry' in various places.
- 	* Makefile.am: Add BasicMapEntry.java.
- 	* Makefile.in: Rebuilt.
- 
- 2000-12-18  Warren Levy  <warrenl@redhat.com>
- 
- 	* java/util/GregorianCalendar.java (GregorianCalendar): Constructors
- 	need to set timezone to a valid non-null value.  Partial fix for
- 	PR 331.
- 
- 2000-12-18  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/awt/Window.java (addNotify): Remove peer casting hack now that
- 	gcj/312 is fixed.
- 	* java/awt/Button.java (addNotify): Likewise.
- 	* java/awt/Label.java (addNotify): Likewise.
- 	* java/awt/Panel.java (addNotify): Likewise.
- 	* java/awt/Scrollbar.java (addNotify): Likewise.
- 	* java/awt/Component.java (processPaintEvent): Use peer not getPeer.
- 	Remove redundant null checks.
- 
- 2000-12-18  Joseph S. Myers  <jsm28@cam.ac.uk>
- 
- 	* COPYING: Update to current
- 	ftp://ftp.gnu.org/pub/gnu/Licenses/COPYING-2.0 (fixes references
- 	to 19yy as example year in copyright notice).
- 
- 2000-12-18  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/zip/natInflater.cc (inflate): Treat Z_BUF_ERROR as
- 	end-of-stream if avail_in is 0.
- 
- 2000-12-17  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/ArrayList.java (data): Declare transient.
- 	(serialPersistantFields): Removed.
- 	(readObject): Use defaultReadObject(), not readFields().
- 	(writeObject): Use defaultWriteObject(), not writeFields().
- 
- 2000-12-17  Jeff Sturm  <jeff.sturm@commerceone.com>
- 
- 	* java/util/Hashtable.java (put): Remove `last' variable.
- 	Link new entry to head of list.
- 	* java/util/HashMap.java (put): Ditto.
- 
- 2000-12-15  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/util/ResourceBundle.java (trySomeGetBundle): Pass class
- 	loader to Class.forName.
- 
- 2000-12-14  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/util/ResourceBundle.java
- 	(getBundle(String,Locale,ClassLoader)): New method.
- 	(trySomeGetBundle): Added `loader' argument.
- 	(partialGetBundle): Likewise.
- 
- 	* java/text/NumberFormat.java (groupingUsed, parseIntegerOnly,
- 	maximumFractionDigits, maximumIntegerDigits,
- 	minimumFractionDigits, minimumIntegerDigits): Now
- 	package-private.
- 
- 	* java/lang/Thread.java (checkAccess): Now final.
- 
- 	* java/lang/RuntimePermission.java: Class now final.
- 
- 	* java/io/StringWriter.java (StringWriter(int)): Now public.
- 
- 	* java/io/SerializablePermission.java (legal_names): Now private.
- 
- 	* java/lang/Character.java: Updated UnicodeBlock constants.
- 	* scripts/blocks.pl: Special case private use and surrogate
- 	areas.  Updated URL.
- 
- 2000-12-12  Tom Tromey  <tromey@redhat.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (GCJ_WITH_FLAGS): New macro, includes --encoding
- 	option.
- 	(GCJCOMPILE): Use it.
- 	(JAVAC): Likewise.
- 
- 2000-12-11  Tom Tromey  <tromey@redhat.com>
- 
- 	* gnu/gcj/runtime/FirstThread.java (Kcert, Kfile, Khttp, Kjar):
- 	New static final fields.
- 
- 	* scripts/classes.pl (scan): Skip lines with leading `*'.
- 	Fix for PR libgcj/378.
- 
- 2000-12-11  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* configure.in: Remove check for -fuse-divide-subroutine.
- 	* configure: Rebuilt.
- 
- 	* java/util/Hashtable.java (Enumerator.nextElement): Initialize `e'.
- 
- 	* gcj/javaprims.h: Rebuilt CNI namespace declarations.
- 
- 2000-12-11  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* Makefile.am: Add HashSet.java and java/lang/ref classes.
- 	Remove BasicMapEntry.java and Bucket.java.
- 	* Makefile.in: Rebuilt.
- 	* java/util/HashMap.java: Rewritten.
- 	* java/util/HashSet.java: Imported from classpath.
- 	* java/util/WeakHashMap.java: Imported from classpath.
- 	* java/util/Hashtable.java: Rewritten based on new HashMap code.
- 	* java/util/Bucket.java: Deleted.
- 	* java/util/BasicMapEntry.java: Deleted.
- 	* java/util/Collections.java (search): Use a for-loop, not iterator
- 	hasNext().
- 	(copy): Use a for-loop. Throw an IndexOutOfBoundsException if run out
- 	of elements in source.
- 	(max): Use a for-loop.
- 	(min): Ditto.
- 	(reverse): Keep track of positions instead of using Iterator's
- 	nextIndex() and previousIndex().
- 	(shuffle(List)): Initialize defaultRandom if required using
- 	double-check thread safety idiom. Call two-argument shuffle method
- 	using defaultRandom.
- 	(defaultRandom): New field.
- 	(shuffle(List, Random)): Use a for-loop. Keep track of pos instead of
- 	using previousIndex() and nextIndex().
- 	(singletonMap(iterator)): Use a HashMap.Entry, not BasicMapEntry.
- 	* java/util/AbstractCollection.java (toString): Use a StringBuffer.
- 	* java/util/AbstractMap.java (toString): Use StringBuffer.
- 	* java/lang/ref/PhantomReference.java: Imported from classpath.
- 	* java/lang/ref/SoftReference.java: Ditto.
- 	* java/lang/ref/Reference.java: Ditto.
- 	* java/lang/ref/WeakReference.java: Ditto.
- 	* java/lang/ref/ReferenceQueue.java: Ditto.
- 
- 2000-12-10  Richard Henderson <rth@redhat.com>
- 
- 	* configure.host: Recognize alpha*-*, not alphaev6-*.
- 
- 2000-12-09  Anthony Green  <green@redhat.com>
- 
- 	* configure.host: Enable interpreter for Alpha.
- 
- 2000-12-09  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* Makefile.am (data_DATA): libgcj.jar replaces libgcj.zip.
- 	(ZIP): Points at fastjar instead of zip.
- 	(libgcj_la_DEPENDENCIES): libgcj.jar replaces libgcj.zip.
- 	(libgcj_la_LDFLAGS): Correctly point at libsupc++.
- 	(libgcjx_la_DEPENDENCIES): libgcj.jar replaces libgcj.zip.
- 	(libgcjx_la_LDFLAGS): Correctly point at libsupc++.
- 	($(java_source_files:.java=.class):): libgcj.jar replaces libgcj.zip.
- 	($(x_java_source_files:.java=.class):): Likewise.
- 	(libgcj.jar:): Replaces libgcj.zip:, builds libgcj.jar and uses
- 	fastar's flags.
- 	(CLEANFILES): libgcj.jar replaces libgcj.zip.
- 	(java/lang/ClassLoader.h:): Depends on libgcj.jar.
- 	(gnu/gcj/runtime/FirstThread.h:, java/lang/Thread.h:,
- 	java/lang/String.h:, java/lang/reflect/Constructor.h:,
- 	java/lang/reflect/Field.h:, java/lang/reflect/Method.h:,
- 	gnu/gcj/runtime/VMClassLoader.h:,
- 	java/io/ObjectInputStream$$GetField.h:,
- 	java/io/ObjectOutputStream$$PutField.h:, header-check:): Likewise.
- 	(Makefile.in): Rebuilt.
- 
- 2000-12-08  Tom Tromey  <tromey@redhat.com>
- 
- 	From Phil Edwards:
- 	* configure: Rebuilt.
- 	* configure.in: Use echo, not `:', to create .d files.
- 
- 2000-12-08  Warren Levy  <warrenl@redhat.com>
- 
- 	* java/lang/StringBuffer.java (insert(int,char[])): Avoid
- 	NullPointerException so proper check of offset can be done.
- 
- 2000-12-08  Warren Levy  <warrenl@redhat.com>
- 
- 	* java/io/FileInputStream.java (close): Check if the fd is valid.
- 	* java/io/RandomAccessFile.java (close): Ditto.
- 	* java/net/PlainDatagramSocketImpl.java (close): Ditto.
- 	* java/net/PlainSocketImpl.java (close): Ditto.
- 
- 2000-12-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/awt/GridBagConstraints.java: Filled in values for static
- 	final fields.
- 
- 	* java/util/BitSet.java: Updated copyright notice.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added new file.
- 	* java/awt/GridBagConstraints.java: New file.
- 
- 2000-12-05  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/text/Collator.java (decomposeCharacter, decmp, strength):
- 	Now package-private, not protected.
- 	* java/text/DateFormatSymbols.java (equals): Now private.
- 	* java/text/DecimalFormatSymbols.java (safeGetChar): Now private.
- 	* java/util/BitSet.java: Class no longer final.
- 
- 2000-12-04  Warren Levy  <warrenl@redhat.com>
- 
- 	* java/util/TimeZone.java (getAvailableIDs): Activated commented
- 	out code dependent on compiler and library changes.
- 
- 2000-12-04  Warren Levy  <warrenl@redhat.com>
- 
- 	* java/io/FilePermission.java: Made class final per spec.
- 	* java/text/DecimalFormatSymbols.java (setCurrencySymbol): Changed
- 	method name to match spec (fixed typo).
- 	* java/util/LinkedList.java: Implements List.
- 
- 2000-12-04  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/natDouble.cc: Include fdlibm.h, not mprec.h. From
- 	Edgar Villanueva <edgarvil@home.com>.
- 
- 2000-12-03  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/awt/geom/Point2D.java: Added protected constructor.
- 	(equals): New method.
- 	(Float.setLocation(float,float)): New method.
- 	* java/awt/geom/Dimension2D.java: Added protected constructor.
- 	* java/awt/geom/AffineTransform.java: Made all constants public.
- 	(concatenate): Fixed typo in name.
- 	* java/awt/event/WindowAdapter.java: Class now abstract.
- 	* java/awt/event/KeyEvent.java (CHAR_UNDEFINED): Now final.
- 	* java/awt/event/FocusEvent.java: Extend ComponentEvent, not
- 	AWTEvent.
- 
- 	* java/awt/AWTError.java: Extend Error, not
- 	IllegalStateException.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added new file.
- 	* java/awt/geom/RoundRectangle2D.java: New file.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added new file.
- 	* java/awt/FlowLayout.java: New file.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added new file.
- 	* java/awt/GridLayout.java: New file.
- 
- 2000-12-02  Tom Tromey  <tromey@redhat.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added new files.
- 	* java/awt/CardLayout.java: New file.
- 	* java/awt/AWTPermission.java: New file.
- 
- 2000-12-01  Tom Tromey  <tromey@redhat.com>
- 
- 	* java/util/Vector.java (insertElementAt): Unconditionally
- 	increment elementCount.
- 	(removeRange): Clear unused slots in vector.
- 
- 2000-12-02  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/natMath.cc: Declare fabsf() function.
- 	* java/lang/mprec.h: Don't include math.h.
- 	* java/lang/dtoa.c: Include string.h.
- 	* java/lang/natString.cc (toLowerCase): Initialize `ch' to prevent
- 	compiler warning.
- 
- 	From Adam Welc <welc@cs.purdue.edu>:
- 	* java/util/LinkedList.java (removeFirst): Update `first' field.
- 	Handle the last == first case.
- 	(removeLast): Update `last' field. Handle the last == first case.
- 
- 2000-12-01  Warren Levy  <warrenl@cygnus.com>
- 
- 	* Makefile.am: Added entries for new java.sql modules.
- 	* Makefile.in: Rebuilt.
- 
- 2000-12-01  Warren Levy  <warrenl@cygnus.com>
- 
- 	* mauve-libgcj: Turned on JDK1.2 and turned off tests for classes
- 	that aren't quite 1.2 compatible yet.
- 
- 2000-11-30  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/sql/Array.java: New file from classpath.
- 	* java/sql/BatchUpdateException.java: Ditto.
- 	* java/sql/Blob.java: Ditto.
- 	* java/sql/Clob.java: Ditto.
- 	* java/sql/Ref.java: Ditto.
- 	* java/sql/SQLData.java: Ditto.
- 	* java/sql/SQLInput.java: Ditto.
- 	* java/sql/SQLOutput.java: Ditto.
- 	* java/sql/Struct.java: Ditto.
- 	* java/sql/CallableStatement.java: Merged file from claspath.
- 	* java/sql/Connection.java: Ditto.
- 	* java/sql/DataTruncation.java: Ditto.
- 	* java/sql/DatabaseMetaData.java: Ditto.
- 	* java/sql/DriverManager.java: Ditto.
- 	* java/sql/PreparedStatement.java: Ditto.
- 	* java/sql/ResultSet.java: Ditto.
- 	* java/sql/ResultSetMetaData.java: Ditto.
- 	* java/sql/SQLException.java: Ditto.
- 	* java/sql/SQLWarning.java: Ditto.
- 	* java/sql/Statement.java: Ditto.
- 	* java/sql/Types.java: Ditto.
- 
- 2000-11-29  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/natSystem.cc (init_properties): Set user.language and
- 	user.region.
- 	* configure.in: Check for setlocale.
- 	* configure: Rebuilt.
- 	* include/config.h.in: Rebuilt.
- 
- 	* java/util/zip/InflaterInputStream (read): Don't return -1 unless
- 	the infate() call didn't deliver any output. Throw a ZipException if
- 	the needsDictionary() call returns true.
- 	* java/io/ByteArrayInputStream (read): Remove redundant bounds checks.
- 	* java/io/InputStreamReader: Use the default buffer size for the
- 	contained BufferedInputStream.
- 
- 2000-11-28  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/text/DateFormatSymbols.java (zoneStringsDefault): Added
- 	more time zone entries.
- 	* java/text/SimpleDateFormat.java (format): Added case for
- 	TIMEZONE_FIELD.
- 
- 2000-11-28  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/io/DataInputStream.java: Merge classpath docs. Call in.read()
- 	directly rather than read() in all cases. Make primitive read
- 	implementations	more efficient, as defined in JDK online docs.
- 	(skipBytes): Behave like the JDK's implementation.
- 	* java/io/BufferedReader.java: Merge classpath docs. Check for a
- 	closed stream with checkStatus() whenever an IOException can be
- 	thrown.
- 	(checkStatus): New private method.
- 
- 2000-11-27  Warren Levy  <warrenl@cygnus.com>
- 
- 	* Makefile.am: Added natTimeZone.cc.
- 	* Makefile.in: Rebuilt.
- 	* gnu/gcj/text/LocaleData_en.java: Added DateFormat entries.
- 	* java/text/DateFormatSymbols.java (ampms): Made package private.
- 	(eras): Made package private.
- 	(months): Made package private.
- 	(shortMonths): Made package private.
- 	(shortWeekdays): Made package private.
- 	(weekdays): Made package private.
- 	(formatPrefixes): New private field.
- 	(localPatternCharsDefault): Made private.
- 	(dateFormats): New package private field.
- 	(timeFormats): New package private field.
- 	(formatsForKey): New private method.
- 	(DateFormatSymbols(Locale)): Set dateFormats and timeFormats.
- 	(DateFormatSymbols(DateFormatSymbols)): Ditto.
- 	* java/text/SimpleDateFormat.java: Merged with Classpath.
- 	* java/util/TimeZone.java: Merged with Classpath.
- 	* java/util/natTimeZone.cc: New file.
- 
- 2000-11-27  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/Vector.java (ensureCapacity): Don't increment modCount.
- 	(addElement): Don't increment elementCount twice. Doh.
- 	* java/util/ArrayList.java (add): Only call ensureCapacity if the
- 	array needs to be expanded.
- 	(addAll): Ditto.
- 	* java/util/Collections.java (UnmodifiableCollection): Implement
- 	toString().
- 	(UnmodifiableList): Throw UnsupportedOperationException from
- 	modification methods. Set `l' from the one-parameter constructor.
- 	(UnmodifiableMap): Implement toString().
- 	(SynchronizedCollection): Ditto.
- 	(SynchronizedList): Set `l' from the one-parameter constructor.
- 	(SynchronizedSortedSet): Set `ss' from the one-parameter constructor.
- 	(SynchronizedMap): Implement toString().
- 
- Sun Nov 26 23:59:55 2000  Anthony Green  <green@redhat.com>
- 
- 	* javax/naming/NameParser.java,
- 	javax/naming/directory/AttributeInUseException.java,
- 	javax/naming/directory/AttributeModificationException.java,
- 	javax/naming/directory/InvalidAttributeIdentifierException.java,
- 	javax/naming/directory/InvalidAttributesException.java,
- 	javax/naming/directory/InvalidAttributeValueException.java,
- 	javax/naming/directory/InvalidSearchControlsException.java,
- 	javax/naming/directory/InvalidSearchFilterException.java,
- 	javax/naming/directory/NoSuchAttributeException.java,
- 	javax/naming/directory/SchemaViolationException.java: New files.
- 
- Sun Nov 26 22:35:53 2000  Anthony Green  <green@redhat.com>
- 
- 	* javax/naming/InitialContext.java (rebind): Implement.
- 	(unbind): Implement.
- 	(rename): Implement.
- 	(list): Implement.
- 	(listBindings): Implement.
- 	(destroySubcontext): Implement.
- 	(createSubcontext): Implement.
- 	(lookupLink): Implement.
- 	(getNameParser): Implement.
- 	(composeName): Implement.
- 	(addToEnvironment): Implement.
- 
- Sun Nov 26 21:30:25 2000  Anthony Green  <green@redhat.com>
- 
- 	* javax/naming/AuthenticationException.java,
- 	javax/naming/AuthenticationNotSupportedException.java,
- 	javax/naming/CannotProceedException.java,
- 	javax/naming/CommunicationException.java,
- 	javax/naming/ConfigurationException.java,
- 	javax/naming/ContextNotEmptyException.java,
- 	javax/naming/InsufficientResourcesException.java,
- 	javax/naming/InterruptedNamingException.java,
- 	javax/naming/InvalidNameException.java,
- 	javax/naming/LimitExceededException.java,
- 	javax/naming/LinkException.java,
- 	javax/naming/LinkLoopException.java,
- 	javax/naming/MalformedLinkException.java,
- 	javax/naming/NameAlreadyBoundException.java,
- 	javax/naming/NameNotFoundException.java,
- 	javax/naming/NamingSecurityException.java,
- 	javax/naming/NoPermissionException.java,
- 	javax/naming/NotContextException.java,
- 	javax/naming/PartialResultException.java,
- 	javax/naming/ReferralException.java,
- 	javax/naming/ServiceUnavailableException.java,
- 	javax/naming/SizeLimitExceededException.java,
- 	javax/naming/TimeLimitExceededException.java: New files.
- 
- 	* javax/naming/Name.java (clone): New method.
- 	(compareTo): New method.
- 	(isEmpty): New method.
- 	(getAll): New method.
- 	(getPrefix): New method.
- 	(getSuffix): New method.
- 	(startsWith): New method.
- 	(endsWith): New method.
- 	(addAll): New method.
- 	(addAll): New method.
- 	(add): New method.
- 	(add): New method.
- 	(remove): New method.
- 
- 	* javax/naming/Context.java (lookup): New method.
- 	(rebind): New method.
- 	(unbind): New method.
- 	(rename): New method.
- 	(list): New method.
- 	(listBindings): New method.
- 	(destroySubcontext): New method.
- 	(createSubcontext): New method.
- 	(lookupLink): New method.
- 	(getNameParser): New method.
- 	(composeName): New method.
- 	(addToEnvironment): New method.
- 	(removeFromEnvironment): New method.
- 	(getEnvironment): New method.
- 	(close): New method.
- 	(getNameInNamespace): New method.
- 
- 	* javax/naming/InitialContext.java (lookup): New method.
- 	(rebind): New method.
- 	(unbind): New method.
- 	(rename): New method.
- 	(list): New method.
- 	(listBindings): New method.
- 	(destroySubcontext): New method.
- 	(createSubcontext): New method.
- 	(lookupLink): New method.
- 	(getNameParser): New method.
- 	(composeName): New method.
- 	(addToEnvironment): New method.
- 	(removeFromEnvironment): New method.
- 	(getEnvironment): New method.
- 	(close): New method.
- 	(getNameInNamespace): New method.
- 
- 2000-11-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (core_java_source_files): Added
- 	RuntimePermission.java.
- 	* java/lang/RuntimePermission.java: Imported from Classpath.
- 	* java/lang/Thread.java (getContextClassLoader): Now
- 	synchronized.  Added security code.
- 	(setContextClassLoader): Likewise.
- 
- 	* prims.cc (_Jv_NewObjectArray): Use const_cast to initialize
- 	length field of array.
- 	(_Jv_NewPrimArray): Likewise.
- 	* gcj/array.h (__JArray): `length' field now const.  Added
- 	constructor.
- 
- 2000-11-26  Anthony Green  <green@redhat.com>
- 
- 	* javax/naming/spi/NamingManager.java,
- 	javax/naming/spi/ObjectFactory.java,
- 	javax/naming/spi/InitialContextFactory.java,
- 	javax/naming/spi/InitialContextFactoryBuilder.java,
- 	javax/naming/RefAddr.java, javax/naming/Reference.java,
- 	javax/naming/NamingException.java, javax/naming/Context.java,
- 	javax/naming/Referenceable.java,
- 	javax/naming/directory/InitialDirContext.java,
- 	javax/naming/directory/DirContext.java,
- 	javax/naming/directory/Attributes.java,
- 	javax/naming/directory/Attribute.java,
- 	javax/naming/StringRefAddr.java,
- 	javax/naming/NamingEnumeration.java, javax/naming/Name.java,
- 	javax/naming/InitialContext.java,
- 	javax/naming/NoInitialContextException.java: New files.
- 
- 2000-11-25  Anthony Green  <green@redhat.com>
- 
- 	* prims.cc (_Jv_NewObjectArray): Undo placement change.
- 	(_Jv_NewPrimArray): Likewise.
- 	* gcj/array.h (__JArray): Undo const change.  Removed constructor.
- 	(class JArray): Removed constructor.
- 
- 	* java/lang/Thread.java (context_class_loader): New private data.
- 	(getContextClassLoader): New method.
- 	(setContextClassLoader): New method.
- 	(Thread): Initialize context_class_loader.
- 
- 	* java/net/URLClassLoader.java: Import java.util.Enumeration.
- 	(getResource): Rename to findResource.
- 	(findResource): New method.  Used to be getResource.
- 	(getResourceAsStream): Deleted.
- 	(jarFileize): Extracted logic from URLClassLoader constructor into
- 	this new private method.
- 	(addURL): New protected method.
- 	(URLClassLoader): Call jarFileize.  Use addElement instead of
- 	insertElementAt.
- 	(findResources): New method.
- 
- 	* java/lang/ClassLoader.java: Import java.util.Enumeration.
- 	(getResource): Implement correct logic.
- 	(findResource): New method.
- 	(getResources): New method.
- 	(findClass): Create a ClassNotFoundException with the name of the
- 	class rather than nothing at all.
- 	(defineClass) Only throw ClassFormatError.
- 
- 	* java/lang/Class.java (forName): New method.
- 	* java/lang/Class.h (forName): New method.
- 	* java/lang/natClass.cc (forName): New method.
- 
- 2000-11-24  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/System.java (setProperties): Only call init_properties()
- 	if properties is null.
- 	(getProperties): Ditto.
- 	(getProperty): Ditto.
- 	(setProperty): Call init_properties if properties are null.
- 	(prop_init): Remove field.
- 	* java/lang/natSystem.cc (init_properties): Synchronize the entire
- 	method. Check for null properties after synchronizing instead of
- 	prop_init flag. Set the properties field last for thread safety.
- 
- 	* java/io/ObjectInputStream.java (ObjectInputStream): If DEBUG is set,
- 	test for gcj.dumpobjects property and enable object stream dumping
- 	if it is set.
- 	(dumpElement): No longer native.
- 	(dumpElementln): Ditto.
- 	(setDump): Do not define.
- 	* java/io/natObjectInputStream.cc (dumpElement): Removed.
- 	(dumpElementln): Removed.
- 	(setDump): Removed.
- 
- 2000-11-24  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* configure: Rebuilt.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (built_java_source_files): Add Configuration.java.
- 	* configure.in: Add Configuration.java to CONFIG_FILES. Set
- 	LIBGCJDEBUG substitution if --enable-libgcj-debug is specified.
- 	Create `gnu' directory in the build tree.
- 	* gnu/classpath/Configuration.java.in: New file.
- 
- 2000-11-24  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (_Jv_NewObjectArray): Use placement new to create
- 	array.
- 	(_Jv_NewPrimArray): Likewise.
- 	Include <new>.
- 	* gcj/array.h (__JArray): `length' field now const.  Added
- 	constructor.
- 	(class JArray): Added constructor.
- 
- 2000-11-23  Mark Wielaard  <mark@klomp.org>
- 
- 	* name-finder.cc (lookup): Check for a NULL _Jv_argv before attempting
- 	lookup.
- 
- 2000-11-23  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/Vector.java: Improve exception messages.
- 	(Vector): Check initialCapacity for IllegalArgumentException.
- 	(tromToSize): Don't check for elementCount == elementData.length
- 	case.
- 	(toArray): Don't try to set null marker if target array is the same
- 	length as the vector.
- 
- 2000-11-22  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (core_java_source_files): Added Collections.java.
- 	* java/util/List.java: Merged from classpath.
- 	* java/util/Vector.java: Ditto.
- 	* java/util/Collections.java: From classpath.
- 	* java/util/ArrayList.java (addAll(Collection)): Call
- 	addAll(int,Collection) instead of duplicating code.
- 	(indexOf): Clean up int initialization.
- 	(clear): Set cleared array entries to null, to allow garbage
- 	collection.
- 	* java/util/List.java: Minor formatting fixes.
- 	* java/util/SimpleTimeZone.java: ditto.
- 
- 2000-11-18  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (core_java_source_files): Added new files.
- 	* java/lang/reflect/ReflectPermission.java: New class.
- 	* java/io/FileFilter.java: From Classpath
- 	* java/io/FilePermission.java: From Classpath.
- 
- 2000-11-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/AccessibleObject.java (isAccessible,
- 	setAccessible): Now public.
- 
- 	* java/lang/natString.cc: Include Locale.h.
- 	(toUpperCase): Added `locale' argument.  Handle locale
- 	sensitivity.
- 	(toLowerCase): Added `locale' argument.  Handle locale
- 	sensitivity.
- 	(ESSET, CAPITAL_S, SMALL_I, CAPITAL_I_WITH_DOT, SMALL_DOTLESS_I,
- 	CAPITAL_I): New defines.
- 	* java/lang/String.java (CASE_INSENSITIVE_ORDER): Now public and
- 	final.
- 	Import Locale.
- 	(toUpperCase, toLowerCase): New methods.  Variants which accept
- 	locale now native.
- 
- 	* java/lang/ExceptionInInitializerError.java (printStackTrace):
- 	New methods.
- 
- 	* java/util/PropertyPermission.java: Re-merged from Classpath.
- 
- 	* java/text/RuleBasedCollator.java (getCollationElementIterator):
- 	New method.
- 	* java/text/StringCharacterIterator.java: Reindented.
- 	(setText): New method.
- 
- 2000-11-17  Mark Wielaard  <mark@klomp.org>
- 
- 	Merge with Classpath (changes by Bryce McKinlay)
- 	* java/util/jar/*.java: Reformat all to unofficial standard coding
- 	style. No changes of substance.
- 
- 2000-11-17  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/util/zip/*.java: Javadoc updates.
- 
- 2000-11-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/text/CollationKey.java: Implement Comparable.
- 	(compareTo(Object)): New method.
- 	* java/text/Collator.java (compare(Object,Object)): New method.
- 	Implement Comparator.
- 
- 	* java/util/zip/InflaterInputStream.java (available): New method.
- 	(close): New method.
- 	(read, available, skip, fill): Throw exception if stream closed.
- 	* java/util/zip/ZipInputStream.java (read, skip, readFully, fill,
- 	getNextEntry): Throw exception if closed.
- 
- 2000-11-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/PushbackReader.java: Merged with Classpath.
- 	* java/util/Arrays.java: Updated from Classpath.
- 
- 	* scripts/blocks.pl: New file.
- 	* java/lang/Character.java (Subset): New class.
- 	(UnicodeBlock): New class.
- 
- 	* java/lang/Math.java (toDegrees, toRadians): New methods.
- 
- 	* java/lang/Float.java: Implement Comparable.
- 	(compareTo): New methods.
- 	* java/lang/Double.java: Implement Comparable.
- 	(compareTo): New methods.
- 
- 2000-11-16  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/beans/PropertyChangeSupport.java (propertyListeners): Made
- 	transient.
- 	(listeners): Made transient.
- 	(source): Renamed from 'bean'.
- 	(children): New field for serialization.
- 	(propertyChangeSupportSerializedDataVersion): Ditto.
- 	(serialVersionUID): Ditto.
- 	(writeObject): New serialization method.
- 	(readObject): New serialization method.
- 	* java/beans/VetoableChangeSupport.java (propertyListeners): Made
- 	transient.
- 	(listeners): Made transient.
- 	(source): Renamed from 'bean'.
- 	(children): New field for serialization.
- 	(vetoableChangeSupportSerializedDataVersion): Ditto.
- 	(serialVersionUID): Ditto.
- 	(writeObject): New serialization method.
- 	(readObject): New serialization method.
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Fixed assert
- 	to allow constructor to have a return type (i.e. the class that the
- 	constructor constructs).
- 
- 2000-11-14  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (libgcj.zip): Fail immediately if compilation fails
- 	and -k not given.
- 
- 2000-11-02  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectInputStream.java (readObject): Added code to
- 	conditionally dump out the serialized data.
- 	Handle ENDBLOCKDATA case a bit more gracefully since the current
- 	behavior doesn't seem to work as expected.
- 	(readStreamHeader): Added code for serialized data dumper.
- 	(readNextBlock): Ditto.
- 	(readFields): Ditto.
- 	(dump): New private static field for turning on/off dumper.
- 	(setDump): New native method.
- 	(dumpElement): New native method.
- 	(dumpElementln): New native method.
- 	* java/io/natObjectInputStream.cc (setDump): New method.
- 	(dumpElement): New method.
- 	(dumpElementln): New method.
- 
- 2000-11-02  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/net/InetAddress.java (addr): Renamed from 'address'.
- 	(address): New field to match Serialized Form doc.
- 	(hostName): Renamed from 'hostname' to match Serialized Form doc.
- 	(family): New serialization field.
- 	(serialVersionUID): New field.
- 	(readObject): New method.
- 	(writeObject): New method.
- 	(getFamily): New native method.
- 	(InetAddress): Set family.
- 	* java/net/natInetAddress.cc (getFamily): New method.
- 	(addr): Renamed from 'address'.
- 	(hostName): Renamed from 'hostname' to match Serialized Form doc.
- 	* java/net/natPlainDatagramSocketImpl.cc (addr): Renamed from 'address'.
- 	* java/net/natPlainSocketImpl.cc (addr): Renamed from 'address'.
- 
- 2000-11-03  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/AbstractList.java (SubList): Make it a top-level private
- 	class.
- 	* java/util/LinkedList.java (remove): Do update modCount and knownMod.
- 	(add): Ditto.
- 	* Makefile.am (ordinary_java_source_files): Add LinkedList.java.
- 	* Makefile.in: Rebuilt.
- 
- 2000-11-02  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (install-exec-hook): Make `.la' link, not `.so'
- 	link.
- 
- 2000-11-02  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/AbstractList.java (remove): Comment out modCount increment
- 	to work around compiler bug.
- 	(add): Ditto.
- 
- 2000-11-02  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/AbstractList.java: Throw messages with
- 	IndexOutOfBoundsExceptions.
- 	 (listIterator()): Call listIterator(0).
- 	(size): New field. Initialize to size().
- 	(hasNext): Test position against size, not size().
- 	(remove): Increment knownMod by one instead of resetting it from
- 	modCount.
- 	(add): Ditto.
- 	(SubList.upMod): Removed.
- 	(SubList.set): Don't call upMod() or update knownMod.
- 	(SubList.add(int,Object)): Increment modCount instead of caling upMod().
- 	(SubList.remove): Ditto.
- 	(SubList.addAll): Don't call backingList.size(). Increment size from
- 	c.size().
- 	(SubList.iterator): New method. Call listIterator(0).
- 	(SubList.listIterator): New method. Restore code to return an anonymous
- 	listIterator implementation (with some changes).
- 	* java/util/AbstractSequentialList.java: Throw messages with
- 	IndexOutOfBoundsExceptions.
- 	(addAll): Add a specnote.
- 	* java/util/ArrayList.java (removeRange): Get the math right.
- 	(addAll): Increment modCount _before_ creating iterator.
- 	* java/util/LinkedList.java: Rewritten, mostly.
- 
- 2000-11-01  Tom Tromey  <tromey@cygnus.com>
- 
- 	* scripts/encodings.pl: Added `ASCII' alias.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (convert_source_files): Added new files.
- 	* gnu/gcj/convert/Input_ASCII.java: New file.
- 	* gnu/gcj/convert/Output_ASCII.java: New file.
- 	* gnu/gcj/convert/Output_8859_1.java (write): Use `?' to represent
- 	out-of-range characters.
- 	* gnu/gcj/convert/natIconv.cc (iconv_init): New method.
- 	(read): Swap bytes if required.  Treat `count' as character count,
- 	not byte count.
- 	(write): Likewise.  Also, handle case where iconv fails on a given
- 	character.
- 	(init): Put encoding into exception.
- 	* gnu/gcj/convert/IOConverter.java (iconv_byte_swap): New global.
- 	(static): Call iconv_init.  Rebuilt alias list.
- 	(iconv_init): New private method.
- 
- 2000-11-01  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (install-exec-hook): Only make a single symlink, and
- 	remove the destination before making the link.
- 	* configure: Rebuilt.
- 	* configure.in: Call AC_PROG_LN_S.
- 
- 2000-10-31  Warren Levy  <warrenl@cygnus.com>
- 
- 	* jni.cc: Added include of java/lang/ThreadGroup.h.
- 	* gcj/javaprims.h: Removed Replaceable and Resolvable from namespace
- 	per change of 2000-10-05.
- 
- 2000-10-30  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/BitSet.java: Updated @specnote.
- 
- 	* java/io/Reader.java: Merge docs from classpath.
- 	(skip): Synchronize on `lock'.
- 	* java/io/FileReader.java: Import correct implementation from
- 	classpath.
- 	* java/io/StringReader.java: Merge docs from classpath.
- 	(ready): Throw IOException if stream is closed.
- 
- 2000-10-29  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/AbstractCollection.java (addAll): Use size() instead of
- 	hasNext() in iterator loop.
- 	(clear): Ditto.
- 	(contains): Ditto. Simplify loop.
- 	(containsAll): Ditto.
- 	(remove): Ditto.
- 	(removeAll): Ditto.
- 	(retainAll): Ditto.
- 	(toArray): Ditto.
- 	(toString): Ditto. Use string concatenation operators, not
- 	StringBuffer.
- 	* java/util/AbstractList.java (addAll): Use size() instead of
- 	hasNext() in iterator loop.
- 	(equals): Ditto.
- 	(hashCode): Ditto.
- 	(indexOf): Ditto. Don't take null check outside of the loop.
- 	(iterator): Return an AbstractListItr instead of anonymous class.
- 	(lastIndexOf): Use a for loop bounded by size() instead of
- 	hasPrevious() in iterator loop.
- 	(listIterator): Return an AbstractListItr.
- 	(removeRange): Remove bounds checking code and docs.
- 	(AbstractListItr): New inner class. Code moved here from
- 	listIterator().
- 	(SubList.iterator): Removed. Use default implementation from
- 	AbstractList instead.
- 	(SubList.listIterator): As above.
- 	* java/util/AbstractMap.java (clear): Use a for loop bounded by size()
- 	instead of hasNext() in iterator loop.
- 	(containsValue): Ditto.
- 	(equals): Ditto.
- 	(get): Ditto.
- 	(put): Ditto.
- 	(putAll): Ditto.
- 	(remove): Ditto.
- 	(toString): Ditto. Use string concatenation operators, not
- 	StringBuffer.
- 	* java/util/AbstractSequentialList.java (addAll): Use a for loop
- 	bounded by size() instead of hasNext() in iterator loop.
- 	* java/util/AbstractSet.java (hashCode): Don't catch exception as
- 	part of normal execution flow. Do an explicit null check instead.
- 	* java/util/ArrayList.java (_iSize): Rename to `size'.
- 	(_arData): Rename to `data'.
- 	(get): Check lower bounds also. Simplify IndexOutOfBoundsException
- 	message.
- 	(remove): Ditto.
- 	(removeRange): Make protected. Don't check bounds.
- 	(add): Check lower bounds also. Simplify IndexOutOfBoundsException
- 	message.
- 	(addAll (Collection)): Use a size-bounded for loop instead of hasNext()
- 	check.
- 	(addAll (int, Collection)): Check lower bounds. Simplify exception
- 	string.
- 	(clone): Clone the data array too.
- 	(indexOf): Inline doesEqual().
- 	(lastIndexOf): Ditto.
- 	(clear): Don't set array data to null.
- 	(set): Check lower bounds. Simplify exception string.
- 	(toArray): Correct comment.
- 	(trimToSize): Don't update modCount, this is not a structural change.
- 	Add comment.
- 
- 	* java/util/BitSet.java: Merged with classpath, new JDK 1.2 methods
- 	implemented.
- 	(toString): Declare `bit' as long, not int.
- 	(data): Made package-private, not private.
- 
- 2000-10-27  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/util/natGregorianCalendar.cc (computeFields): Set the isSet__
- 	array elements to true.
- 
- 2000-10-27  Warren Levy  <warrenl@cygnus.com>
- 
- 	* Makefile.am: Added locale files from Classpath.
- 	* Makefile.in: Rebuilt.
- 	* gnu/java/locale/Calendar.java: New file.
- 	* gnu/java/locale/Calendar_de.java: New file.
- 	* gnu/java/locale/Calendar_en.java: New file.
- 	* gnu/java/locale/Calendar_nl.java: New file.
- 	* java/lang/ClassNotFoundException.java: Replaced with Classpath file.
- 	* java/math/BigDecimal.java (intVal): Renamed from 'num' for
- 	serialization compatibility.
- 	(scale): Made private.
- 	(serialVersionUID): New field.
- 	* java/math/BigInteger.java (ival): Made transient.
- 	(words): Made transient.
- 	(bitCount): New serialization field.
- 	(bitLength): Ditto.
- 	(firstNonzeroByteNum): Ditto.
- 	(lowestSetBit): Ditto.
- 	(magnitude): Ditto.
- 	(signum): Ditto.
- 	(serialVersionUID): New field.
- 	(readObject): New method.
- 	(writeObject): New method.
- 	* java/util/BitSet.java (serialVersionUID): New field.
- 	* java/util/Calendar.java: Replaced with Classpath file.
- 	* java/util/GregorianCalendar.java (GregorianCalendar): Pass result
- 	of getDefault() for TimeZone or Locale instead of passing nulls.
- 	* java/util/Locale.java (serialVersionUID): New field.
- 	(writeObject): New method.
- 	(readObject): New method.
- 	* java/util/SimpleTimeZone.java: Replaced with Classpath file.
- 
- 2000-10-25  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* Makefile.am (GCJCOMPILE): Pass --tag=GCJ to libtool.
- 	(core_java_source_files): Put java.lang, java.io, and java.util here.
- 	(ordinary_java_source_files): Order so that core_java_source_files are
- 	built first.
- 	(java_source_files): Reorder so that special_java_source_files are
- 	built first.
- 	* configure.in: Don't pass -I flag to gcj.
- 	* Makefile.in: Rebuilt.
- 	* configure: Rebuilt.
- 
- 2000-10-25  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (install-exec-hook): New target.
- 
- 2000-10-24  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/EventObject.java: Merged from classpath.
- 
- 	* java/lang/ThreadGroup.java (uncaughtException): Print thread name
- 	with stack dump.
- 
- 2000-10-23  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* java/util/AbstractSet.java (equals): Re-installed original code.
- 
- 2000-10-22  Rolf W. Rasmussen  <rolfwr@ii.uib.no>
- 
- 	* Makefile.am: Added rules for libgcjx library.
- 	* Makefile.in: Rebuilt.
- 	* configure.in: Added check for X.
- 	* configure: Rebuilt.
- 	* gnu/awt/LightweightRedirector.java: New file.
- 	* gnu/awt/j2d/AbstractGraphicsState.java: New file.
- 	* gnu/awt/j2d/DirectRasterGraphics.java: New file.
- 	* gnu/awt/j2d/Graphics2DImpl.java: New file.
- 	* gnu/awt/j2d/IntegerGraphicsState.java: New file.
- 	* gnu/awt/j2d/MappedRaster.java: New file.
- 	* gnu/awt/xlib/XCanvasPeer.java: New file.
- 	* gnu/awt/xlib/XEventLoop.java: New file.
- 	* gnu/awt/xlib/XEventQueue.java: New file.
- 	* gnu/awt/xlib/XFontMetrics.java: New file.
- 	* gnu/awt/xlib/XFramePeer.java: New file.
- 	* gnu/awt/xlib/XGraphics.java: New file.
- 	* gnu/awt/xlib/XGraphicsConfiguration.java: New file.
- 	* gnu/awt/xlib/XPanelPeer.java: New file.
- 	* gnu/awt/xlib/XToolkit.java: New file.
- 	* gnu/gcj/xlib/Clip.java: New file.
- 	* gnu/gcj/xlib/Colormap.java: New file.
- 	* gnu/gcj/xlib/Display.java: New file.
- 	* gnu/gcj/xlib/Drawable.java: New file.
- 	* gnu/gcj/xlib/Font.java: New file.
- 	* gnu/gcj/xlib/GC.java: New file.
- 	* gnu/gcj/xlib/Pixmap.java: New file.
- 	* gnu/gcj/xlib/Screen.java: New file.
- 	* gnu/gcj/xlib/Visual.java: New file.
- 	* gnu/gcj/xlib/WMSizeHints.java: New file.
- 	* gnu/gcj/xlib/Window.java: New file.
- 	* gnu/gcj/xlib/WindowAttributes.java: New file.
- 	* gnu/gcj/xlib/XAnyEvent.java: New file.
- 	* gnu/gcj/xlib/XButtonEvent.java: New file.
- 	* gnu/gcj/xlib/XColor.java: New file.
- 	* gnu/gcj/xlib/XConfigureEvent.java: New file.
- 	* gnu/gcj/xlib/XConnectException.java: New file.
- 	* gnu/gcj/xlib/XEvent.java: New file.
- 	* gnu/gcj/xlib/XException.java: New file.
- 	* gnu/gcj/xlib/XExposeEvent.java: New file.
- 	* gnu/gcj/xlib/XID.java: New file.
- 	* gnu/gcj/xlib/XImage.java: New file.
- 	* gnu/gcj/xlib/XUnmapEvent.java: New file.
- 	* gnu/gcj/xlib/natClip.cc: New file.
- 	* gnu/gcj/xlib/natColormap.cc: New file.
- 	* gnu/gcj/xlib/natDisplay.cc: New file.
- 	* gnu/gcj/xlib/natDrawable.cc: New file.
- 	* gnu/gcj/xlib/natFont.cc: New file.
- 	* gnu/gcj/xlib/natGC.cc: New file.
- 	* gnu/gcj/xlib/natPixmap.cc: New file.
- 	* gnu/gcj/xlib/natScreen.cc: New file.
- 	* gnu/gcj/xlib/natVisual.cc: New file.
- 	* gnu/gcj/xlib/natWMSizeHints.cc: New file.
- 	* gnu/gcj/xlib/natWindow.cc: New file.
- 	* gnu/gcj/xlib/natWindowAttributes.cc: New file.
- 	* gnu/gcj/xlib/natXAnyEvent.cc: New file.
- 	* gnu/gcj/xlib/natXButtonEvent.cc: New file.
- 	* gnu/gcj/xlib/natXColor.cc: New file.
- 	* gnu/gcj/xlib/natXConfigureEvent.cc: New file.
- 	* gnu/gcj/xlib/natXException.cc: New file.
- 	* gnu/gcj/xlib/natXExposeEvent.cc: New file.
- 	* gnu/gcj/xlib/natXImage.cc: New file.
- 	* gnu/gcj/xlib/natXUnmapEvent.cc: New file.
- 	* java/awt/EventDispatchThread.java: Start thead on creation.
- 
- 2000-10-20  Tom Tromey  <tromey@cygnus.com>
- 
- 	From Arno J. Klaassen:
- 	* interpret.cc: Include <stdlib.h> for alloca.
- 	* defineclass.cc: Include <stdlib.h> for alloca.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am: Include deps.mk.
- 	(GCJCOMPILE): Added -MD, -MT, and -MF.
- 	($(javao_files)): Don't depend on libgcj.zip.
- 	(all-recursive): New target.
- 	(%.lo:%.cc): Do dependency tracking.
- 	($(nat_headers)): Don't depend on libgcj.zip.
- 	* configure: Rebuilt.
- 	* configure.in: Make .d files and deps.mk.
- 
- 2000-10-13  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* exception.cc: Don't #include "exception".
- 	(_Jv_eh_alloc): Call abort (), not terminate (), if malloc fails.
- 
- 	* Makefile.am (libgcj_la_LDFLAGS): Link in libsupc++.
- 	* Makefile.in: Updated.
- 
- 2000-10-11  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/awt/peer/ChoicePeer.java (addItem): Removed.
- 	* java/awt/peer/ComponentPeer.java (disable): Removed.
- 	(enable): Removed.
- 	(hide): Removed.
- 	(minimumSize): Removed.
- 	(preferredSize): Removed.
- 	(reshape): Removed.
- 	(show): Removed.
- 	* java/awt/peer/ListPeer.java (addItem): Removed.
- 	(clear): Removed.
- 	(minimumSize): Removed.
- 	(preferredSize): Removed.
- 	(setMultipleSelections): Removed.
- 	* java/awt/peer/MenuBarPeer.java (add): Renamed from addMenu.
- 	(remove): Renamed from removeMenu.
- 	* java/awt/peer/MenuItemPeer.java (disable): Removed.
- 	(enable): Removed.
- 	* java/awt/peer/MenuPeer.java (add): Renamed from addItem.
- 	(remove): Renamed from removeItem.
- 	* java/awt/peer/TextAreaPeer.java (insertText): Removed.
- 	(getMinimumSize): Removed.
- 	(getPreferredSize): Removed.
- 	(minimumSize): Removed.
- 	(preferredSize): Removed.
- 	(replaceText): Removed.
- 	* java/awt/peer/TextFieldPeer.java (minimumSize): Removed.
- 	(preferredSize): Removed.
- 	(getMinimumSize): Removed.
- 	(getPreferredSize): Removed.
- 	(setEchoCharacter): Removed.
- 
- 2000-10-10  Warren Levy  <warrenl@cygnus.com>
- 
- 	* gnu/gcj/text/LocaleData_en.java (monetarySeparator): Added.
- 	* java/sql/Date.java (serialVersionUID): New field.
- 	* java/sql/Time.java (serialVersionUID): New field.
- 	* java/sql/Timestamp.java (serialVersionUID): New field.
- 	* java/text/ChoiceFormat.java (serialVersionUID): New field.
- 	* java/text/DateFormat.java (getDateTimeInstance (int)): Removed.
- 	* java/text/DateFormatSymbols.java (serialVersionUID): New field.
- 	* java/text/DecimalFormat.java (serialVersionOnStream): New field.
- 	(readObject): New serialization method.
- 	* java/text/DecimalFormatSymbols.java (monetarySeparator): New field.
- 	(serialVersionOnStream): New field.
- 	(readObject): New serialization method.
- 	(getMonetaryDecimalSeparator): New method.
- 	(setMonetaryDecimalSeparator): New method.
- 	* java/text/NumberFormat.java (maxFractionDigits): New field.
- 	(maxIntegerDigits): New field.
- 	(minFractionDigits): New field.
- 	(minIntegerDigits): New field.
- 	(serialVersionOnStream): New field.
- 	(serialVersionUID): New field.
- 	(readObject): New serialization method.
- 	(writeObject): New serialization method.
- 	* java/text/SimpleDateFormat.java (defaultCenturyStart): Initialized.
- 	(serialVersionOnStream): New field.
- 	(serialVersionUID): New field.
- 	(readObject): New serialization method.
- 
- 2000-10-09  Alexandre Oliva  <aoliva@redhat.com>
- 
- 	* configure.in (GCJ): Avoid bogus error message when looking for
- 	(and not finding) gcj in the build tree.
- 	* configure: Rebuilt.
- 
- 2000-10-09  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Include sys/types.h when checking for socklen_t.
- 	From Arno J. Klaassen.
- 
- 2000-10-09  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* include/jvm.h: Enable __builtin_expect().
- 
- 	* name-finder.cc (lookup): Don't trust dladdr() if the address is from
- 	the main program. Fix for PR libgcj/341.
- 
- 2000-10-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/Properties.java: Merged with Classpath version.
- 
- 2000-10-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/natField.cc (BooleanClass): Don't define.
- 	* java/lang/reflect/natArray.cc (BooleanClass): Don't define.
- 	* java/lang/Class.h (Object): Added `class$' field.
- 	* java/lang/Object.h (Object): Added `class$' field.
- 	* defineclass.cc (ClassClass): Use `class$' form.
- 	(ClassObject): Likewise.
- 	* resolve.cc (ClassObject): Use `class$' form.
- 	(ObjectClass): Likewise.
- 	* interpret.cc (ClassError): Removed.
- 	* java/net/natPlainDatagramSocketImpl.cc (BooleanClass): Use
- 	`class$' form.
- 	(IntegerClass): Likewise.
- 	* java/net/natPlainSocketImpl.cc (BooleanClass): Use `class$'
- 	form.
- 	* java/lang/natClassLoader.cc (CloneableClass): Use `class$' form.
- 	(ObjectClass, ClassClass, VMClassLoaderClass, ClassLoaderClass,
- 	SerializableClass): Likewise.
- 	Include Serializable.h, Cloneable.h.
- 	* java/lang/natSystem.cc (SystemClass): Removed.
- 	(init_properties): Use `class$' form.
- 	* java/lang/natObject.cc (CloneableClass): Removed.
- 	(clone): Use `class$' form.
- 	* java/lang/natClass.cc (CloneableClass): Use `class$' form.
- 	(ObjectClass, ErrorClass, ClassClass, MethodClass, FieldClass,
- 	ConstructorClass): Likewise.
- 	* java/lang/reflect/natMethod.cc (ObjectClass): Use `class$' form.
- 	(ClassClass, VoidClass, ByteClass, ShortClass, CharacterClass,
- 	IntegerClass, LongClass, FloatClass, DoubleClass): Likewise.
- 	* java/io/natObjectInputStream.cc (ObjectClass): Use `class$'
- 	form.
- 	(ClassClass): Likewise.
- 	* include/jvm.h (StringClass): Use `class$' form.
- 	* prims.cc (ObjectClass): Removed.
- 	(_Jv_RunMain): Use `class$' form.
- 	(_Jv_AllocObject): Likewise.
- 	* jni.cc (ClassClass): Use `class$' form.
- 	(ThrowableClass): Likewise.
- 	(ObjectClass): Likewise.
- 	(MethodClass): Likewise.
- 	(ThreadGroupClass): Likewise.
- 	(NativeThreadClass): Likewise.
- 	* boehm.cc (ObjectClass): Removed.
- 	(ClassClass): Removed.
- 	(_Jv_MarkObj): Use `class$' form.
- 	* gcj/field.h (JvFieldIsRef): Use `class$' form.
- 	Include RawData.h.
- 
- 2000-10-05  Warren Levy  <warrenl@cygnus.com>
- 
- 	* Makefile.am: Removed java/io/Replaceable.java and
- 	java/io/Resolvable.java.
- 	* Makefile.in: Rebuilt.
- 	* gcj/javaprims.h: Removed Replaceable and Resolvable from java.io
- 	namespace.
- 	* java/io/ObjectInputStream.java (processResolution): Fixed typo
- 	in method name.
- 	(processResolution): Handle readResolve method via reflection with
- 	removal of Resolvable interface.
- 	* java/io/ObjectOutputStream.java (writeObject): Handle writeReplace
- 	method via reflection with removal of Replaceable interface.
- 	* java/io/Replaceable.java: Removed.
- 	* java/io/Resolvable.java: Removed.
- 	* java/security/Key.java (serialVersionUID): New field.
- 	* java/security/Provider.java (serialVersionUID): New field.
- 	* java/security/interfaces/DSAPrivateKey.java (serialVersionUID):
- 	New field.
- 	* java/security/interfaces/DSAPublicKey.java (serialVersionUID):
- 	New field.
- 	* java/sql/DataTruncation.java (serialVersionUID): New field.
- 	* java/sql/SQLException.java (serialVersionUID): New field.
- 	* java/sql/SQLWarning.java (serialVersionUID): New field.
- 	* java/util/Date.java (serialVersionUID): New field.
- 	(millis): Made transient.
- 	(readObject): New method.
- 	(writeObject): New method.
- 
- 2000-10-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	* gnu/gcj/convert/natIconv.cc (init): Terminate buffer.
- 
- 2000-10-02  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* prims.cc (_Jv_argv, _Jv_argc): New fields.
- 	(JvRunMain): Set _Jv_argv and _Jv_argc.
- 	* java/awt/Component.java: Minor fixes.
- 	* java/awt/Image.java (UndefinedProperty): Initialize final field.
- 	* java/awt/Toolkit.java (systemEventQueue): Removed.
- 	(getDefaultToolkit): Default to "gnu.awt.gtk.GtkToolkit".
- 	* java/awt/Window.java (getToolkit): Don't call super.
- 	* java/awt/image/BufferedImage.java: Fix definite assignment errors.
- 	* java/awt/peer/ContainerPeer.java (insets): Remove unused method.
- 	* gnu/awt/gtk/GtkComponentPeer.java: New file.
- 	* gnu/awt/gtk/GtkContainerPeer.java: New file.
- 	* gnu/awt/gtk/GtkFramePeer.java: New file.
- 	* gnu/awt/gtk/GtkMainThread.java: New file.
- 	* gnu/awt/gtk/GtkToolkit.java: New file.
- 	* gnu/awt/gtk/GtkWindowPeer.java: New file.
- 	* gnu/awt/gtk/gtkcommon.cc: New file.
- 	* gnu/awt/gtk/gtkcommon.h: New file.
- 	* gnu/awt/gtk/natGtkComponentPeer.cc: New file.
- 	* gnu/awt/gtk/natGtkContainerPeer.cc: New file.
- 	* gnu/awt/gtk/natGtkFramePeer.cc: New file.
- 	* gnu/awt/gtk/natGtkMainThread.cc: New file.
- 	* gnu/awt/gtk/natGtkToolkit.cc: New file.
- 	* gnu/awt/gtk/natGtkWindowPeer.cc: New file.
- 
- 2000-09-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* posix-threads.cc (_Jv_CondWait): Check to see if we are
- 	interrupted before modifying the cv's wait set.
- 	From Corey Minyard.
- 
- 2000-09-30  Hans Boehm  <boehm@acm.org>
- 	    Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Implement bitmap descriptor based marking for Boehm GC.
- 
- 	* configure.in: Define JC1GCSPEC. Set it if boehm-gc is used.
- 	* configure: Rebuilt.
- 	* libgcj.spec.in: Pass JC1GCSPEC to jc1.
- 	* include/jvm.h (struct _Jv_VTable): New field `gc_descr'. New inline
- 	method get_finalizer().
- 	(struct _Jv_ArrayVTable): Ditto. Declare method array with
- 	NUM_OBJECT_METHODS elements instead of NUM_OBJECT_METHODS + 1.
- 	(_Jv_AllocObj): Add new jclass parameter.
- 	(_Jv_AllocArray): Ditto.
- 	(_Jv_BuildGCDescr): New prototype.
- 	* prims.cc (_Jv_AllocObject): Rename parameter `c' to `klass'. Pass
- 	`klass' to _Jv_AllocObj. Don't set the new object's vtable. Use
- 	get_finalizer() instead of direct finalizer vtable offset.
- 	(_Jv_NewObjectArray): Rename parameter `clas' to `klass'. Pass
- 	`klass' to _Jv_AllocArray. Don't set the new array's vtable.
- 	(_Jv_NewPrimArray): Call _Jv_FindArrayClass before _Jv_AllocObj. Pass
- 	`klass' to _Jv_AllocObj. Don't set the new array's vtable.
- 	* resolve.cc (METHOD_NOT_THERE, METHOD_INACCESSIBLE): New #defines.
- 	(_Jv_ResolvePoolEntry): Use METHOD_NOT_THERE and METHOD_INACCESSIBLE.
- 	(_Jv_DetermineVTableIndex): Ditto.
- 	(_Jv_PrepareClass): Ditto. Remove offset-by-one adjustments from vtable
- 	calculations to account for new gc_descr field.
- 	* boehm.cc: #include gc_gcj.h.
- 	(obj_kind_x, obj_free_list): `#if 0'-ed away.
- 	(_Jv_MarkObj): Check that vtable doesn't point to a cleared object.
- 	New commentary from HB. Mark the classes vtable.
- 	(_Jv_MarkArray): Check that vtable doesn't point to a cleared object.
- 	(GC_DEFAULT_DESCR): New #define.
- 	(_Jv_BuildGCDescr): New function. Use GC_DEFAULT_DESCR, for now.
- 	(_Jv_AllocObj): New parameter `klass'. Use GC_GCJ_MALLOC ().
- 	(_Jv_AllocArray): New parameter `klass'. Allocate with GC_MALLOC and
- 	scan conservativly if size is less than min_heap_addr. Set vtable
- 	pointer of new object before returning.
- 	(_Jv_AllocBytes): Use GC_MALLOC_ATOMIC, not GC_GENERIC_MALLOC.
- 	(_Jv_InitGC): Call GC_init_gcj_malloc(). Don't set up marking and
- 	allocation for obj_kind_x.
- 	* nogc.cc (_Jv_BuildGCDescr): New function. Return 0.
- 	(_Jv_AllocObj): Set vtable on returned object.
- 	(_Jv_AllocArray): Ditto.
- 	* java/lang/Class.h (_Jv_NewObjectArray): No longer a friend.
- 	(_Jv_NewPrimArray): Ditto.
- 	(_Jv_AllocObj): Declare as a friend.
- 	(_Jv_AllocArray): Ditto.
- 	* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Copy gc_descr
- 	from &ObjectClass into new array class. Remove offset-by-one
- 	adjustments from `method' size calculations to account for gc_descr
- 	field.
- 
- 2000-09-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/awt/Scrollbar.java (removeAdjustmentListener): Use
- 	`remove', not `add'.
- 
- 2000-09-26  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* java/lang/natSystem.cc (file_encoding): Added return statement.
- 
- 2000-09-14  Alexandre Oliva  <aoliva@redhat.com>
- 
- 	* Makefile.am: Re-work shell commands that exceeded command-line
- 	length limits.
- 	* Makefile.in: Rebuilt.
- 
- 	* java/lang/natRuntime.cc (lt_preloaded_symbols): Define as `extern'.
- 
- 	* defineclass.cc: Include alloca.h only if HAVE_ALLOCA_H.
- 	* java/lang/natDouble.cc: Likewise.
- 	* java/lang/reflect/natMethod.cc: Likewise.
- 	* interpret.cc: Likewise.  Fix NULLCHECKs that tested a _Jv_word.
- 
- 2000-09-13  Alexandre Oliva  <aoliva@redhat.com>
- 
- 	* configure.in (LIBDATASTARTSPEC): Use `%s' to search for
- 	libgcjdata.a.
- 	(GCJ): Support single-tree builds.  Add -B`pwd`/ and -I$srcdir.
- 	* acinclude.m4: Arrange for automake to not bring in a new
- 	libtool.m4 for LT_AC_PROG_GCJ.  AC_SUBST GCJ.
- 	* Makefile.am: Leave it up to automake to subst GCJ.
- 	* aclocal.m4, configure, Makefile.in: Rebuilt.
- 
- 2000-09-13  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/natArray.cc (BooleanClass): New define.
- 	(get): Ensure Boolean class is initialized.
- 	* java/lang/reflect/natField.cc (BooleanClass): New define.
- 	(get): Ensure Boolean class is initialized.
- 
- 2000-09-13  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/String.java (CASE_INSENSITIVE_ORDER): New static field.
- 	Initialize with anonymous class.
- 	(compareToIgnoreCase): New method.
- 
- 	* java/lang/ThreadGroup.java (had_uncaught_exception): New field.
- 	(uncaughtException): Set had_uncaught_exception.
- 	* prims.cc (JvRunMain): Check value of had_uncaught_exception and
- 	exit with error status if set.
- 	(_Jv_RunMain): Ditto.
- 
- 2000-09-12  Alexandre Oliva  <aoliva@redhat.com>
- 
- 	* configure: Rebuilt with new ../libtool.m4.
- 
- 2000-09-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/Field.java (toString): Don't rely on
- 	Class.toString.
- 
- 2000-09-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* gnu/gcj/convert/BytesToUnicode.java (getDefaultDecoder): Let
- 	default decoder use iconv.
- 	* gnu/gcj/convert/UnicodeToBytes.java (getDefaultEncoder):
- 	Let default encoder use iconv.
- 	* configure: Rebuilt.
- 	* configure.in: Check for nl_langinfo and <langinfo.h>.
- 	* java/lang/natSystem.cc (file_encoding): New function.
- 	(DEFAULT_FILE_ENCODING): Define to file_encoding() if possible.
- 
- 2000-09-10  Alexandre Oliva  <aoliva@redhat.com>
- 
- 	* acinclude.m4: Simplify the tests for CC and CXX.
- 	* aclocal.m4, configure: Rebuilt.
- 
- 	* acinclude.m4: Include libtool macros from the source tree.
- 	* aclocal.m4, configure: Rebuilt.
- 
- 2000-09-08  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/beans/PropertyChangeEvent.java (serialVersionUID): Added.
- 	* java/beans/PropertyVetoException.java (serialVersionUID): Added.
- 	* java/io/File.java (writeObject): Added.
- 	(readObject): Added.
- 	(serialVersionUID): Added.
- 	* java/io/ObjectOutputStream.java (writeObject): Initialized
- 	fieldsAlreadyWritten before recursion rather than after.
- 	* java/io/ObjectStreamClass.java (serialVersionUID): Added.
- 	* java/io/OptionalDataException.java (serialVersionUID): Added.
- 	(OptionalDataException): Made package private.
- 	* java/io/SyncFailedException.java (SyncFailedException): Removed
- 	default constructor to match spec.
- 	* java/lang/Boolean.java (serialVersionUID): Added.
- 	* java/lang/Byte.java (serialVersionUID): Added.
- 	* java/lang/Character.java (serialVersionUID): Added.
- 	* java/lang/Double.java (serialVersionUID): Added.
- 	* java/lang/Float.java (serialVersionUID): Added.
- 	* java/lang/Integer.java (serialVersionUID): Added.
- 	* java/lang/Long.java (serialVersionUID): Added.
- 	* java/lang/Number.java (serialVersionUID): Added.
- 	* java/lang/Short.java (serialVersionUID): Added.
- 	* java/lang/String.java (serialVersionUID): Added.
- 	* java/lang/ThreadDeath.java (ThreadDeath): Removed constructor
- 	to match spec.
- 	* java/lang/reflect/InvocationTargetException.java
- 	(serialVersionUID): Added.
- 	* java/net/URL.java (handler): Made transient.
- 	(hashCode): Added field for serialization, per spec. and use
- 	cached value if available.
- 	(serialVersionUID): Added.
- 	(URL): Initialize hashCode.
- 	(set): Adjust hashCode.
- 	(readObject): New Method to initialize the protocol handler when
- 	deserializing.
- 	(writeObject): New method.
- 	* java/text/BreakIterator.java: Removed 'implements Serializable'.
- 	* java/text/Collator.java: Removed 'implements Serializable'.
- 	* java/util/GregorianCalendar.java (serialVersionUID): Added.
- 	* java/util/Properties.java (serialVersionUID): Added.
- 	* java/util/Random.java (serialVersionUID): Added.
- 	(seed): Made private.
- 	(nextNextGaussian): Made private.
- 	(haveNextNextGaussian): Made private.
- 	* java/util/Stack.java (serialVersionUID): Added.
- 	* java/util/TimeZone.java (serialVersionUID): Added.
- 	* java/util/Vector.java (serialVersionUID): Added.
- 
- 2000-09-07  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* Makefile.am (Thread.h): Don't be friends with native threads
- 	functions.
- 	* Makefile.in: Rebuilt.
- 	* java/lang/Thread.java (interrupt_flag): Make package-private.
- 
- 2000-09-06  Jeff Sturm  <jeff.sturm@appnet.com>
- 
- 	* include/jvm.h (_Jv_HashCode): Cast object ptr to `unsigned long'
- 	to avoid long long division.
- 
- 2000-09-06  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/Constructor.java (toString): Use `getName' for
- 	parameter types.
- 	* java/lang/reflect/Method.java (toString): Use `getName' for
- 	return type.
- 
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Accept null
- 	`args' if method takes no parameters.
- 
- 	Fix for PR java.lang/339:
- 	* java/lang/natPosixProcess.cc (fail): New function.
- 	(cleanup): New function.
- 	(startProcess): Use them.  Create pipe so child can communicate
- 	exec failure back to parent.
- 
- 2000-09-05  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/net/natPlainDatagramSocketImpl.cc: Change various `JvThrow'
- 	calls to `throw'.
- 	(send): Undo last patch. Remove the label only.
- 	(mcastGrp): Ditto.
- 	* java/net/natPlainSocketImpl.cc: Change various `JvThrow' calls to
- 	`throw'.
- 	* java/net/natInetAdress.cc: Ditto.
- 
- 	* java/net/natPlainDatagramSocketImpl.cc (mcastGrp): Fix typo.
- 
- 2000-09-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	* doc/cni.sgml: Updated from master copy.
- 
- 2000-09-05  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* gnu/gcj/convert/natIconv.cc (read): Remove unused local.
- 	(write): Ditto.
- 	* gnu/gcj/runtime/FileDeleter.java (deleteOnExitNow): Check for null
- 	stack. Synchronize.
- 	* java/lang/fdlibm.h: #undef __P if previously defined.
- 	* java/lang/natSystem.cc (currentTimeMillis): Remove unused local.
- 	* java/net/natPlainDatagramSocketImpl.cc (send): Remove unreachable
- 	block.
- 	(mcastGrp): Ditto.
- 
- 2000-09-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/zip/ZipFile.java (ZipFile): Delete file when opened in
- 	DELETE mode.
- 
- 2000-09-04  Anthony Green  <green@redhat.com>
- 
- 	Fix for PR java.io/203:
- 	* java/io/File.java (createTempFile): Obey directory argument.
- 	Use java.io.tmpdir if needed.  Don't leave FileDescripators open.
- 	* java/lang/natSystem.cc (init_properties): Use TMPDIR environment
- 	variable to set java.io.tmpdir on non-WIN32 systems.
- 
- 2000-09-04  Anthony Green  <green@redhat.com>
- 
- 	* java/io/File.java (deleteOnExit): New method.
- 	* gnu/gcj/runtime/FileDeleter.java: New class.
- 	* java/lang/natRuntime.cc (exit): Call
- 	FileDeleter.deleteOnExitNow()
- 	* Makefile.am: Add FileDeleter.java.
- 	* Makefile.in: Rebuilt.
- 
- 2000-09-02  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (GCJCOMPILE): Use -fclasspath, not the CLASSPATH
- 	environment variable.
- 
- 2000-09-01  Andrew Haley  <aph@redhat.com>
- 
- 	* java/io/StreamTokenizer.java: Don't throw a
- 	NumberFormatException if a field is numeric as far as the
- 	StreamTokenizer is concerned but not as far as Double.valueOf() is
- 	concerned: return a zero instead.
- 
- 2000-08-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (AM_CXXFLAGS): Added -fdollars-in-identifiers.
- 
- 2000-08-28  Tom Tromey  <tromey@cygnus.com>
- 
- 	* gnu/gcj/awt/BitMaskExtent.java, gnu/gcj/awt/Buffers.java,
- 	gnu/gcj/awt/ComponentDataBlitOp.java,
- 	gnu/gcj/awt/GLightweightPeer.java, java/awt/Graphics2D.java,
- 	java/awt/RenderingHints.java, java/awt/color/ColorSpace.java,
- 	java/awt/color/ICC_ColorSpace.java,
- 	java/awt/color/ICC_Profile.java,
- 	java/awt/image/BufferedImage.java, java/awt/image/ColorModel.java,
- 	java/awt/image/ComponentColorModel.java,
- 	java/awt/image/ComponentSampleModel.java,
- 	java/awt/image/DataBuffer.java,
- 	java/awt/image/DataBufferByte.java,
- 	java/awt/image/DataBufferInt.java,
- 	java/awt/image/DataBufferUShort.java,
- 	java/awt/image/DirectColorModel.java,
- 	java/awt/image/IndexColorModel.java,
- 	java/awt/image/PackedColorModel.java, java/awt/image/Raster.java,
- 	java/awt/image/RasterOp.java, java/awt/image/SampleModel.java,
- 	java/awt/image/SinglePixelPackedSampleModel.java,
- 	java/awt/image/WritableRaster.java, java/util/zip/ZipFile.java:
- 	Removed Latin-1 copyright symbols.
- 	* java/util/zip/ZipFile.java: Indentation fixes.
- 
- 2000-08-27  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/util/zip/ZipFile.java: Implement OPEN_DELETE mode, new
- 	constructor, close can delete the file, finalize calls close.
- 	* java/util/jar/JarFile.java: Constructor that takes mode now
- 	calls super.
- 
- 2000-08-27  Anthony Green  <green@redhat.com>
- 
- 	* java/util/ArrayList.java, java/util/Timer.java,
- 	java/util/LinkedList.java, java/util/TimerTask.java,
- 	java/util/HashMap.java, java/util/AbstractMap.java,
- 	java/util/SortedMap.java, java/util/AbstractSequentialList.java,
- 	java/util/SortedSet.java: Imported from GNU Classpath.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am: Added new files.
- 
- 2000-08-26  Anthony Green  <green@redhat.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (java/lang/ClassLoader.h): Make _Jv_RunMain a
- 	friend.
- 
- 	* prims.cc: Include ClassLoader.h.
- 	(_Jv_RunMain): When executing jar files, classpath must be the jar
- 	file only.  Lose our reference to the system ClassLoader in order
- 	to get a new one with the correct classpath.
- 	* java/lang/natSystem.cc (init_properties): When executing a jar
- 	file, only use the jar file for java.class.path.
- 
- 	* gnu/gcj/runtime/VMClassLoader.java: Use the canonical file name
- 	for bytecode archives.
- 
- 	* gnu/gcj/runtime/FirstThread.java: Handle case where manifest
- 	exists, but not Main-Class.
- 
- 2000-08-23  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/util/zip/InflaterInputStream.java (read(byte[],int,int)):
- 	return -1 when fill() has no more data for the Inflater.
- 
- 2000-08-23  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/io/PrintWriter.java (print(String)): Don't catch IOException,
- 	write(String) already does.
- 
- 2000-08-23  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* gnu/gcj/jni/NativeThread.java (NativeThread): Removed assignment
- 	to `alive_flag', call `init'.
- 	(init): New native method.
- 	* gnu/gcj/jni/natNativeThread.cc (init): New native method
- 	implementation.
- 
- 2000-08-21  Mark Wielaard  <mark@klomp.org>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (java/lang/reflect/Constructor.h): Declare Class as
- 	a `friend class'.
- 	(java/lang/reflect/Field.h): Likewise.
- 	(java/lang/reflect/Method.h): Likewise.
- 	(gnu/gcj/runtime/VMClassLoader.h): Declare ClassLoader as a
- 	`friend class'.
- 
- 2000-08-21  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/ResourceBundle.java (trySomeGetBundle): Removed
- 	debugging prints.
- 
- Sun Aug 20 21:02:48 2000  Anthony Green  <green@redhat.com>
- 
- 	* java/lang/natSystem.cc (init_properties): Change sourceware
- 	reference to sources.redhat.com.
- 
- 	* include/java-props.h: Add _Jv_Jar_Class_Path.
- 	* prims.cc: Ditto.  Set it from	`gij -jar file' option.
- 
- 	* java/lang/natSystem.cc (init_properties): Set java.class.path
- 	from
- 	{gij -jar file}:{CLASSPATH variable}:{-Djava.class.path= or .}
- 
- 	* java/util/PropertyPermission.java: Import from GNU Classpath.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am: Add java/util/PropertyPermission.java.
- 	* java/lang/System.java: Add setProperty method.
- 
- 	* gij.cc (main): Add -jar option to execute jar files.
- 	(help): Describe -jar option.
- 	* prims.cc (_Jv_RunMain): Add support for jar execution mode.
- 	* include/jvm.h: Add is_jar argument to _Jv_RunMain.
- 	* gnu/gcj/runtime/FirstThread.java (main): New method.
- 
- 	* java/util/jar/Attributes.java: Correct comment spelling.
- 
- 2000-08-20  Mark Wielaard  <mark@klomp.org>
- 
- 	* java/util/zip/Adler32.java: Make private variables really private
- 	* java/util/zip/CRC32.java: Make private variables really private
- 	* java/util/zip/CheckedInputStream.java: skip() could skip to much
- 	bytes
- 	* java/util/zip/InflaterInputStream.java: skip() could skip to
- 	much bytes
- 	* java/util/zip/ZipEntry.java: setCompressedSize() didn't check input
- 	* java/util/zip/ZipFile.java: size() new 1.2 method
- 	* java/util/zip/ZipInputStream.java: Use createZipEntry not new
- 	ZipEntry.  since 1.2 available() always returns just 1 or 0 when
- 	closed
- 
- Sun Aug 20 12:33:43 2000  Anthony Green  <green@redhat.com>
- 
- 	* java/util/jar/JarFile.java: Don't call
- 	java.util.zip.ZipFile.getEntry twice.  From Mark Wielaard
- 	<mark@klomp.org>.
- 
- Sun Aug 20 09:51:48 2000  Anthony Green  <green@redhat.com>
- 
- 	* java/net/URLClassLoader.java: Find the JarEntry via the JarFile.
- 	Read the entire contents of the class file, not just what is
- 	available().
- 
- 	* java/net/JarURLConnection.java: getEntry doesn't take any
- 	arguments.  Return null if element is null.
- 
- 	* java/util/zip/ZipFile.java (getInputStream): Read the compressed
- 	size from the archive, not the inflated size.
- 
- 	* java/util/jar/JarFile.java (getEntry): Don't recurse.  Call
- 	java.util.zip.ZipFile.getEntry.
- 
- 	* gij.cc (help): Change sourceware reference to
- 	sources.redhat.com.
- 
- 2000-08-19  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/zip/ZipInputStream.java (createZipEntry):
- 	Implemented.
- 
- Sat Aug 19 11:00:53 2000  Anthony Green  <green@redhat.com>
- 
- 	* java/util/jar/Attributes.java, java/util/jar/JarEntry.java,
- 	java/util/jar/JarException.java, java/util/jar/JarFile.java,
- 	java/util/jar/JarInputStream.java,
- 	java/util/jar/JarOutputStream.java, java/util/jar/Manifest.java,
- 	java/util/Set.java, java/util/Map.java, java/util/Bucket.java,
- 	java/util/AbstractSet.java, java/util/BasicMapEntry.java,
- 	java/security/cert/CRL.java, java/security/cert/CRLException.java,
- 	java/security/cert/Certificate.java,
- 	java/security/cert/CertificateEncodingException.java,
- 	java/security/cert/CertificateException.java,
- 	java/security/cert/CertificateExpiredException.java,
- 	java/security/cert/CertificateFactory.java,
- 	java/security/cert/CertificateFactorySpi.java,
- 	java/security/cert/CertificateNotYetValidException.java,
- 	java/security/cert/CertificateParsingException.java,
- 	java/security/cert/X509CRL.java,
- 	java/security/cert/X509CRLEntry.java,
- 	java/security/cert/X509Certificate.java,
- 	java/security/cert/X509Extension.java: Imported from Classpath.
- 	* java/util/Hashtable.java: Imported from Classpath.
- 
- 	* java/util/zip/ZipInputStream.java: Create stub for
- 	createZipEntry.
- 
- 	* gcj/javaprims.h: Updated class list.
- 
- 	* Makefile.in, gcj/Makefile.in: Rebuilt.
- 	* Makefile.am (ordinary_java_source_files): Add these new classes.
- 
- 2000-08-16  Rolf W. Rasmussen  <rolfwr@ii.uib.no>
- 
- 	* gnu/gcj/awt/ComponentDataBlitOp.java: New file.
- 	* gnu/gcj/awt/GLightweightPeer.java: New file.
- 	* java/awt/BorderLayout.java: Implemented all methods.
- 	* java/awt/Button.java (actionListener, actionCommand): Renamed
- 	and modifier change.
- 	(addNotify): Call super.
- 	(dispatchEventImpl): New method.
- 	(getListeners): New method.
- 	(label): Made package-private, not private.
- 	* java/awt/Canvas.java: Implemented class body.
- 	* java/awt/Color.java (brighter): New method.
- 	(darker): New method.
- 	(hashCode): New method.
- 	* java/awt/Component.java (visible, enabled, eventMask): Set defaults.
- 	(getGraphicsConfiguration): Delegate to
- 	getGraphicsConfigurationImpl().
- 	(getGraphicsConfigurationImpl): New method.
- 	(getToolkit): Only return value from peer if not null.
- 	(isDisplayable): Check with parent.
- 	(isShowing): No parent implies not showing.
- 	(getForeground): Check parent property if local is null.
- 	(getBackground): Likewise.
- 	(getFont): Likewise.
- 	(setForeground): Inform peer.
- 	(setBackground): Likewise
- 	(setLocale): Invalidate component.
- 	(getColorModel): Implemented.
- 	(setLocation): Invalidate, or ignore if no change.
- 	(setSize): Invalidate, or ignore if no change.
- 	(setBounds): Invalidate, or ignore if no change.
- 	(isOpaque): By default, heavyweight implies opaque.
- 	(isLightweight): Implemented.
- 	(getMaximumSize): Implemented.
- 	(doLayout): Implemented, NOP.
- 	(validate): Implemented, NOP.
- 	(invalidate): Only propagate to parent if parent was valid.
- 	(getGraphics): Implemented.
- 	(getFontMetrics): Implemented.
- 	(update): Implemented.
- 	(paintAll): Implemented.
- 	(repaint): Implemented all repaint methods.
- 	(print): Implemented.
- 	(printAll): Implemented.
- 	(createImage): Implemented.
- 	(dispatchEvent): Give the peer a chance to handle the event.
- 	(dispatchEventImpl): Dispatch paint events.
- 	(enableEvents): Lightweights enable events on parent component.
- 	(coalesceEvents): Coalesce paint events, and select event type
- 	using a switch.
- 	(coalescePaintEvents): New method.
- 	(processEvent): Fix unfortunate ordering of statements, and call
- 	correct method for MOUSE_CLICKED.
- 	(processPaintEvent): New method.
- 	(addNotify): Allow container to notify children before event
- 	mask is set in peer.
- 	(addNotifyContainerChildren): New method.
- 	(removeNotify): Visibility should not change on removeNotify.
- 	(paramString): Implemented.
- 	(list): Implemented two of the list methods.
- 	* Container (myInsets): Removed, insets are managed by peer.
- 	(getInsets): Query peer.
- 	(addImpl): Fix reparenting, enable events for lightweights,
- 	initialize component array.
- 	(validate): Call doLayout in validateTree() instead.
- 	(validateTree): Do nothing if already valid. Call beginValidate(),
- 	endValidate() on peer. Call validateTree() instead of validate()
- 	for children that are containers. Mark valid after validation of
- 	children.
- 	(setFont): Partial implementation.
- 	(paint): Implemented.
- 	(visitChildren): New method.
- 	(visitChild): New method.
- 	(update): Implemented.
- 	(print): Implemented.
- 	(paintComponents): Implemented.
- 	(printComponents): Consider translation and clipping.
- 	(getComponentAt): Ignore invisible children. Return this if no
- 	child match.
- 	(addNotify): Call super.
- 	(addNotifyContainerChildren): New method.
- 	(paramString): Implemented.
- 	(list): Implemented.
- 	* java/awt/EventQueue (invokeAndWait): Get system event queue the
- 	right way.
- 	(invokeLater): Likewise.
- 	(isDispatchThread): Likewise.
- 	* java/awt/FontMetrics (getLeading): Formula change.
- 	(getDescent): Consider leading also.
- 	(getMaxAscent): Default to getAscent().
- 	(getMaxDescent): Default to getDescent.
- 	(getMaxAdvance): Return value signifying unknown.
- 	(charWidth): Both methods implemented.
- 	(charsWidth): Implemented.
- 	(bytesWidth): Implemented.
- 	(getWidths): Implemented.
- 	* java/awt/Frame.java (NORMAL, ICONIFIED, iconImage, isResizable,
- 	state): New fields.
- 	(Frame): Rearragend constuctor chaining to disallow null being
- 	passed as a graphics configuration.
- 	(getTitle): Return empty string if null.
- 	(dispose): Removed.
- 	(getIconImage): New method.
- 	(setIconImage): New method.
- 	(finalize): New method.
- 	(setMenuBar): Notify peer.
- 	(isResizable): New method.
- 	(setResizable): New method.
- 	(getState): New method.
- 	(getFont): Removed.
- 	(remove): Implemented.
- 	(removeNotify): New method.
- 	(getFrames): New method.
- 	* java/awt/Graphics.java: Implemented body of class.
- 	* java/awt/Graphics2D.java: New file.
- 	* java/awt/GraphicsConfiguration.java: Enabled part of the API.
- 	* java/awt/Image.java: Implemented body of class.
- 	* java/awt/Panel.java (Panel): Call correct super constructor.
- 	(addNotify): Implemented.
- 	* java/awt/Rectangle.java (isEmpty): Fixed reversed logic.
- 	* java/awt/RenderingHints.java: New file.
- 	* java/awt/Toolkit.java (createComponent): Implemented.
- 	(getSystemEventQueue): Delegate to getSystemEventQueueImpl().
- 	* java/awt/Window.java (Window): Two new constructors. Reordered
- 	constructor chaining.
- 	(getGraphicsConfigurationImpl): New method.
- 	(finalize): Call super.
- 	(addNotify): Call super.
- 	(pack): Do layout stuff.
- 	(show): Ensure that peer exists and that component is valid.
- 	(dispose): Dispose owned children.
- 	(getOwner): Simplify code, casting null pointers is valid.
- 	(getGraphicsConfiguration): Ask peer if local value is null.
- 	* java/awt/event/ActionEvent.java (getActionCommand): Renamed from
- 	getcmd().
- 	* java/awt/image/BufferedImage.java: New file.
- 	* java/awt/image/RasterOp.java: New file.
- 	* java/awt/peer/ComponentPeer.java (getGraphicsConfiguration):
- 	More powerful replacement for getColorModel().
- 	(getColorModel) Removed.
- 	(setEventMask) New method.
- 	* Makefile.am: Added new files.
- 	* Makefile.in: Rebuilt.
- 
- 2000-08-15  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* java/lang/natClass.cc (finit_name): Initialized with `finit$'.
- 	(finit_leg_name): New global.
- 	(java::lang::Class::getDeclaredMethods): Test for `finit$' or
- 	`$finit$'. This is a backward compatibility hack.
- 	(java::lang::Class::_getMethods): Likewise.
- 
- 2000-08-15  Andrew Haley  <aph@cygnus.com>
- 
- 	* include/jvm.h (_Jv_HashCode): New hash code.
- 
- 2000-08-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/ByteArrayOutputStream.java: Merged with Classpath.
- 
- Sun Aug 13 19:53:01 2000  Anthony Green  <green@redhat.com>
- 
- 	* THANKS: More thanks.
- 
- 2000-08-10  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/net/natPlainSocketImpl.cc (bind): Don't go to error case
- 	when errno not set.
- 	(connect): Likewise.
- 	(accept): Likewise.
- 	(getOption): Likewise.
- 	* java/net/natPlainDatagramSocketImpl.cc (bind): Don't go to error
- 	case when errno not set.
- 	(peek): Likewise.
- 	(send): Likewise.
- 	(receive): Likewise.
- 	(mcastGrp): Likewise.
- 	(setOption): Likewise.
- 	(getOption): Likewise.
- 
- 2000-08-10  Bryce McKinlay  <bryce@albatross.co.nz>
- 	    John Stracke <francis@ecal.com>
- 
- 	* gnu/gcj/protocol/http/Connection.java (gotHeaders): Removed.
- 	(connect): Don't falsely claim HTTP/1.1 compliance. Call
- 	getHttpHeaders().
- 	(disconnect): Don't unset connected flag.
- 	(getHeaderField (String)): Call connect() if not connected.
- 	(getHeaderField (int)): Ditto.
- 	(getHeaderFieldKey): Ditto.
- 	(getHttpHeaders): Don't call connect().
- 	* java/net/HttpURLConnection.java (instanceFollowRedirects,
- 	gotResponseVals): New fields.
- 	(getResponseCode): Call getResponseVals() conditionally.
- 	(getResponseMessage): Ditto.
- 	(getResponseVals): Call connect(). Don't throw FileNotFoundException.
- 
- 2000-08-09  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* Makefile.am: Move beans and applet classes to awt_java_source_files.
- 	* Makefile.in: Rebuilt.
- 	* java/awt/Color.java (getTransparency): New method.
- 	* java/awt/Component.java: Various updates.
- 	* java/awt/Container.java (removeNotify): Call super.removeNotify()
- 	after dealing with children.
- 	* java/awt/Toolkit.java (changeSupport): Renamed from pcsupport.
- 	* java/awt/Window.java: Various new methods and updates.
- 	* java/awt/color/ICC_Profile.java (getNumComponents): Cast profileID
- 	to int for switch.
- 	* java/awt/event/KeyEvent.java (paramString): Initialize `r'.
- 	* java/awt/event/WindowEvent.java (paramString): Ditto.
- 	* java/awt/geom/Dimension2D.java (clone): Wrap super call with
- 	try/catch block.
- 	* java/awt/geom/Point2D.java (clone): Ditto.
- 	* java/awt/geom/RectangularShape.java (clone): Ditto.
- 	* java/awt/image/ColorModel.java (bits, cspace, transparency, hasAlpha,
- 	isAlphaPremultiplied): Make package-private, not private.
- 
- 2000-08-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* gnu/gcj/convert/Input_UTF8.java (read): Fixed handling of
- 	surrogate characters.
- 	* gnu/gcj/convert/Output_UTF8.java (standardUTF8): Default to
- 	true.
- 	(write): Correct handling of surrogate characters.
- 
- 2000-08-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/Method.java (hashCode): Use getName().
- 	(toString): Likewise.
- 	* java/lang/reflect/natMethod.cc (getType): Initialize
- 	exception_types.
- 
- 	* java/lang/reflect/Method.java (toString): Use Class.getName, not
- 	Class.toString.
- 	* java/lang/reflect/Field.java (toString): Correct formatting.
- 	From Corey Minyard.
- 
- 	* java/io/PipedInputStream.java (read(byte[],int,int)): Mostly
- 	rewrote.
- 	(receive): Streamlined.
- 
- 2000-08-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/PrintWriter.java: Merged comments from Classpath.
- 	(printlnUnsynchronized): Removed.
- 	(println()): Print the separator.
- 	(println): Call println(), not printlnUnsynchronized.
- 	(out): Now protected, to match spec.
- 
- 2000-08-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/StreamTokenizer.java (TT_NONE): Now private.
- 	(nextToken): Handle backslashed newline.  From Oskar Liljeblad.
- 	For PR java.io/301.
- 
- 2000-08-03  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectInputStream.java (readFields): Turn off
- 	readDataFromBlock while reading via GetField.
- 	(GetField$1.get(String, Object)): Pass Class of default value to
- 	getField.
- 	(getField): Allow for null default values.
- 
- 	* java/io/ObjectOutputStream.java: Fixed typo in comment.
- 	(PutField$1.put): Fixed calls of checkType in most of the put
- 	methods to pass the correct parameter.
- 	(PutField$1.put(String, Object)): Allow for null value arg.
- 	(PutField$1.write): Turn off writeDataAsBlocks while writing via
- 	PutField.
- 
- 	* java/io/ObjectStreamClass.java (serialPersistentFields): Fixed
- 	typo in spec'ed field name.
- 	(getSerialPersistentFields): Changed spelling of method to match
- 	the correct spelling of the spec'ed field name.
- 
- 2000-08-03  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added new files.
- 
- 2000-08-03  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* Makefile.am: Add new AWT stubs.
- 	* java/awt/Canvas.java: New placeholder class.
- 	* java/awt/Checkbox.java: Ditto.
- 	* java/awt/CheckboxMenuItem.java: Ditto.
- 	* java/awt/Choice.java: Ditto.
- 	* java/awt/Dialog.java: Ditto.
- 	* java/awt/FileDialog.java: Ditto.
- 	* java/awt/List.java: Ditto.
- 	* java/awt/ScrollPane.java: Ditto.
- 	* java/awt/TextField.java: Ditto.
- 	* java/awt/datatransfer/Clipboard.java: Ditto.
- 	* java/awt/Component.java (treeLock): Now a static String. Add comment.
- 	* java/awt/MenuItem.java (MenuItem): Add default constructor.
- 	* java/awt/Toolkit.java: Added all methods from J2SE 1.3 API docs.
- 	Some commented out. Partially implemented.
- 	* java/awt/natToolkit.cc: Removed file.
- 
- 2000-08-03  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* Makefile.am: Make inner class CNI headers depend on libgcj.zip only.
- 	Fixes "make -j" builds.
- 	* Makefile.in: Rebuild.
- 
- 2000-08-02  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (libgcj_la_SOURCES): Added posix.cc.
- 	* java/net/natPlainSocketImpl.cc: Include posix.h.
- 	(accept): Use _Jv_select.
- 	* java/net/natPlainDatagramSocketImpl.cc: Include posix.h.
- 	(receive): Use _Jv_select.
- 	* java/io/natFileDescriptorPosix.cc: Include posix.h.
- 	(available): Use _Jv_select.
- 	* java/lang/natSystem.cc: Include posix.h.
- 	(currentTimeMillis): Use _Jv_gettimeofday.
- 	* include/posix.h: New file.
- 	* posix.cc: New file.
- 
- 	* scripts/encodings.pl: New file.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (convert_source_files): Added IOConverter.java.
- 	* gnu/gcj/convert/UnicodeToBytes.java (UnicodeToBytes): Extend
- 	IOConverter.
- 	(getDefaultDecodingClass): Canonicalize default encoding name.
- 	(getEncoder): Likewise.
- 	* gnu/gcj/convert/BytesToUnicode.java (BytesToUnicode): Extend
- 	IOConverter.
- 	(getDefaultDecodingClass): Canonicalize default encoding name.
- 	(getDecoder): Likewise.
- 	* gnu/gcj/convert/IOConverter.java: New file.
- 
- 2000-08-02  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* interpret.cc (_Jv_InterpMethod::continue1): Type of `fun' changed
- 	to match C declaration in ffi.h.
- 	* Makefile.am: Add java/awt/Button.java.
- 	* Makefile.in: Rebuilt.
- 
- 2000-07-29  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Type of the
- 	cast of the second argument to `ffi_raw_call' changed to match
- 	prototype.
- 
- 2000-07-26  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* jni.cc (_Jv_JNIMethod::call): Type of the cast of the second
- 	argument to `ffi_raw_call' changed to match prototype.
- 
- 2000-07-31  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/awt/Component.java (toString): Implemented.
- 	* java/awt/Container.java (addImpl): Remove FIXME. Only call
- 	dispatchEvent() to dispatch the event.
- 	(removeImpl): Ditto.
- 
- 2000-07-30  Anthony Green  <green@redhat.com>
- 
- 	* java/awt/Component.java: Add treeLock object.
- 	(getTreeLock): Implement.
- 	(isShowing): Implement.
- 
- 2000-07-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/awt/BorderLayout.java (BorderLayout()): New constructor.
- 
- 	* java/awt/Frame.java (Frame): Pass `null' to Window constructor.
- 
- 	* java/awt/Window.java (addNotify): Wrote.
- 	(addWindowListener): Wrote.
- 	(getLocale): Wrote.
- 	(getWarningString): Wrote.
- 	(processEvent): Wrote.
- 	(processWindowEvent): Wrote.
- 	(removeWindowListener): Wrote.
- 	(show): Call validate(), setVisible().
- 	(toBack): Wrote.
- 	(toFront): Wrote.
- 
- 	* java/awt/Toolkit.java (createWindow): Declare.
- 
- 	* java/awt/Frame.java (addNotify): Use getToolkit to find
- 	toolkit.
- 
- 	* java/awt/Component.java (invalidate): Wrote.
- 	(isValid): Wrote.
- 	(getToolkit): Wrote.
- 
- 	* java/awt/Container.java (addContainerListener): Removed
- 	unnecessary cast.
- 	(removeContainerListener): Likewise.
- 	(addImpl): Wrote.
- 	(add(Component)): Use it.
- 	(add(String,Component)): Likewise.
- 	(add(Component,int)): Likewise.
- 	(add(Component,Object)): Likewise.
- 	(add(Component,Object,int)): Likewise.
- 	(doLayout): Wrote.
- 	(getAlignmentX): Wrote.
- 	(getAlignmentY): Wrote.
- 	(getComponentAt): Wrote.
- 	(getMaximumSize): Wrote.
- 	(invalidate): Wrote.
- 	(list(PrintStream,int)): Wrote.
- 	(list(PrintWriter,int)): Wrote.
- 	(getMinimumSize): Wrote.
- 	(getPreferredSize): Wrote.
- 	(printComponents): Wrote.
- 	(processContainerEvent): Look at containerListener, not
- 	componentListener.
- 	(remove): Added event processing and peer destruction.
- 	(removeAll): Use remove.
- 	(removeNotify): Wrote.
- 	(validate): Wrote.
- 	(validateTree): Wrote.
- 
- 	* java/awt/Scrollbar.java (addNotify): Do nothing if peer exists.
- 	* java/awt/Label.java (addNotify): Do nothing if peer exists.
- 	* java/awt/Container.java (addNotify): Don't create Container
- 	peer.
- 	* java/awt/Button.java (addNotify): Do nothing if peer exists.
- 
- 2000-07-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/awt/Container.java (remove(int)): Wrote.
- 	(remove(Component)): Wrote.
- 	(add(Component)): Wrote.
- 	(add(Component,int)): Wrote.
- 	(removeAll): Wrote.
- 	(addNotify): Set our own peer.
- 	* java/awt/Scrollbar.java (listeners): Changed type.
- 	(Scrollbar): Don't initialize listeners.
- 	(addNotify): Wrote.
- 	(setValue): Call setValues.
- 	(setMinimum): Likewise.
- 	(setMaxPriority): Likewise.
- 	(setVisibleAmount): Likewise.
- 	(setValues): Wrote.
- 	(setUnitIncrement): Forward to peer.
- 	(setLineIncrement): Call setUnitIncrement.
- 	(setPageIncrement): Call setBlockIncrement.
- 	(setBlockIncrement): Forward to peer.
- 	(addAdjustmentListener): Rewrote.
- 	(removeAdjustmentListener): Rewrote.
- 	(processAdjustmentEvent): Rewrote.
- 	(paramString): Wrote.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added Button.java.
- 	* java/awt/Button.java: New file.
- 	* java/awt/Toolkit.java (createLabel): Declare.
- 	(createButton): Likewise.
- 	(createScrollbar): Likewise.
- 	(createContainer): Likewise.
- 	* java/awt/Label.java (addNotify): Wrote.
- 	(setAlignment): Call setAlignment in the peer.
- 	(setText): Call setText in the peer.
- 
- 2000-07-28  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectOutputStream.java (writeObject): Per spec, call
- 	NotSerializableException with just the class name.
- 
- 2000-07-26  Andrew Haley  <aph@cygnus.com>
- 
- 	* interpret.cc (continue1): Insert missing break into switch.
- 
- 2000-07-28  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectStreamException.java: Made constructors protected.
- 
- 2000-07-27  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/OutputStreamWriter.java (close): Only flush if not
- 	closed.
- 
- 2000-07-27  Warren Levy  <warrenl@cygnus.com>
- 
- 	* mauve-libgcj: Activated serialization tests.
- 	* gcj/field.h (getModifiers): Mask off unknown flags.
- 	* gnu/java/security/provider/SHA.java (munch): Reset buffer to 0 so
- 	spurious bits don't cause discrepancies.
- 	* java/io/ObjectOutputStream.java: Fixed typo in comment.
- 	* java/io/ObjectStreamClass.java: Fixed typos in comments.
- 	(lookup): Applied patch from Brian Jones <cbj@gnu.org> to optimize.
- 	(hasClassInitializer): Call getDeclaredMethod instead of getMethod.
- 	* java/lang/Throwable.java (serialVersionUID): New field.
- 	* java/lang/reflect/Modifier.java (ALL_FLAGS): Preserve STRICT if used.
- 	* java/lang/reflect/natConstructor.cc (getModifiers): Mask off
- 	unknown flags.
- 	* java/lang/reflect/natMethod.cc: Ditto.
- 	* java/security/Key.java (serialVersionUID): Removed field for now.
- 	* java/security/interfaces/DSAPrivateKey.java (serialVersionUID): Ditto.
- 	* java/security/interfaces/DSAPublicKey.java (serialVersionUID): Ditto.
- 
- 2000-07-22  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/awt/geom/RectangularShape.java (getPathIterator):
- 	Wrote.
- 
- 2000-07-23  Rolf W. Rasmussen  <rolfwr@ii.uib.no>
- 
- 	* libjava/java/awt/image/ColorModel.java: New file, replaces the
- 	stub libjava/java/awt/ColorModel.java which was located in the
- 	wrong package.
- 	* libjava/java/awt/image/ComponentColorModel.java: New file.
- 	* libjava/java/awt/image/ComponentSampleModel.java: New file.
- 	* libjava/java/awt/image/DataBuffer.java: New file.
- 	* libjava/java/awt/image/DataBufferByte.java: New file.
- 	* libjava/java/awt/image/DataBufferInt.java: New file.
- 	* libjava/java/awt/image/DataBufferUShort.java: New file.
- 	* libjava/java/awt/image/DirectColorModel.java: New file.
- 	* libjava/java/awt/image/PackedColorModel.java: New file.
- 	* libjava/java/awt/image/Raster.java: New file.
- 	* libjava/java/awt/image/SampleModel.java: New file.
- 	* libjava/java/awt/image/SinglePixelPackedSampleModel.java: New
- 	file.
- 	* libjava/java/awt/image/IndexColorModel.java: New file.
- 	* libjava/java/awt/image/ImageConsumer.java: Removed import of
- 	java.awt.ColorModel stub.
- 
- 	* gnu/gcj/util/BitMaskExtent.java: New file, utility class.
- 	* gnu/gcj/util/Buffers.java: New file, utility class.
- 
- 	* libjava/Makefile.am: Updated to include new files.
- 	* libjava/Makefile.in: Rebuilt.
- 
- 2000-07-23  Oskar Liljeblad <osk@hem.passagen.se>
- 
- 	* java/io/StreamTokenizer.java: Merged with classpath.
- 
- 2000-07-20  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Updated for new files.
- 	* java/awt/Adjustable.java (HORIZONTAL, VERTICAL): Set values.
- 	* java/awt/Label.java: New file.
- 	* java/awt/Rectangle.java (Rectangle): Extend Rectangle2D.
- 	(createIntersection, createUnion, getBounds2D): New methods.
- 	* java/awt/Scrollbar.java: New file.
- 	* java/awt/Shape.java: Updated to 1.2.
- 	* java/awt/geom/AffineTransform.java: New file.
- 	* java/awt/geom/Ellipse2D.java: New file.
- 	* java/awt/geom/NoninvertibleTransformException.java: New file.
- 	* java/awt/geom/PathIterator.java: New file.
- 	* java/awt/geom/Rectangle2D.java: New file.
- 	* java/awt/geom/RectangularShape.java: New file.
- 	* java/awt/geom/Point2D.java (Double, Float): New inner classes.
- 	* java/awt/geom/IllegalPathStateException.java: New file.
- 
- 	* scripts/showval.java: New file.
- 
- 	* scripts/classes.pl (scan): Print inner classes properly.
- 	* gcj/javaprims.h: Updated class list.
- 
- 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Only
- 	initialize String fields for interpreted classes.  Fixes bug
- 	reported by Hans Boehm.
- 
- 	* java/io/File.java (getParentFile): New method, from Classpath
- 	via Oskar Liljeblad.
- 
- 	* java/util/Vector.java (remove(Object)): Implemented.
- 
- 2000-07-19  Jeff Sturm  <jeff.sturm@appnet.com>
- 
- 	* java/lang/natThrowable.cc (fillInStackTrace): Check for
- 	zero return from backtrace().
- 
- 2000-07-15  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/awt/EventQueue.java (invokeAndWait): Call postEvent() within
- 	synchronized block.
- 	* java/awt/event/InvocationEvent (dispatch): Synchronize on notifier
- 	before calling notifyAll().
- 
- 2000-07-13  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Add missing files from last check-in:
- 	* java/awt/image/ImageConsumer.java: New file.
- 	* java/awt/image/ImageProducer.java: New file.
- 	* java/awt/image/ImageObserver.java: New file.
- 
- 2000-07-12  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Merged implementation of java.applet from classpath:
- 	* java/applet/Applet.java: New file.
- 	* java/applet/AppletContext.java: New file.
- 	* java/applet/AppletStub.java: New file.
- 	* java/applet/AudioClip.java: New file.
- 
- 	* Makefile.am: Added new java.applet classes.
- 	* Makefile.in: Rebuilt.
- 
- 2000-07-12  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	AWT Stuff:
- 	* java/util/ResourceBundle.java (getLocale): stub.
- 	* Makefile.am: Added new AWT classes.
- 	* Makefile.in: Rebuilt.
- 	* java/awt/AWTEvent.java: Add EVENT_MASK constants, isConsumed,
- 	constructors. Fix toString() and paramString().
- 	* java/awt/AWTEventMulticaster.java: New class. Implemented.
- 	* java/awt/CheckboxGroup.java: New class.
- 	* java/awt/ColorModel.java: New class.
- 	* java/awt/Component.java: Added stubs for most methods. Implemented
- 	event dispatch.
- 	* java/awt/Container.java: ditto.
- 	* java/awt/ComponentOrientation.java: New class. Partly implemented.
- 	* java/awt/Cursor.java: ditto.
- 	* java/awt/Event.java: Fix paramString().
- 	* java/awt/EventQueue.java: New class. Implemented.
- 	* java/awt/Font.java: Added additional stub methods. Implemented
- 	toString().
- 	* java/awt/FontMetrics.java: New class. Stubbed.
- 	* java/awt/GraphicsConfiguration.java: New class. Complete, except for
- 	Java2D parts.
- 	* java/awt/Insets.java: New class. Implemented.
- 	* java/awt/Menu.java: Add new methods. Partially implemented.
- 	* java/awt/MenuItem.java: Add new methods and fields. Partially
- 	implemented.
- 	* java/awt/MenuShortcut.java: New class. Implemented.
- 	* java/awt/Panel.java: New class. Placeholder.
- 	* java/awt/PopupMenu.java: New class. Stubbed.
- 	* java/awt/Rectangle.java: New class. Implemented.
- 	* java/awt/Toolkit.java: Added getSystemEventQueue() stub.
- 	* java/awt/event/ActionEvent.java: Implement paramString().
- 	* java/awt/event/AdjustmentEvent.java: Implement paramString().
- 	* java/awt/event/ComponentEvent.java: Implement paramString().
- 	* java/awt/event/ContainerEvent.java: Implement paramString().
- 	* java/awt/event/FocusEvent.java: Implement paramString().
- 	* java/awt/event/HierarchyBoundsAdapter.java: New class.
- 	* java/awt/event/HierarchyBoundsListener.java: New class.
- 	* java/awt/event/HierarchyEvent.java: New class.
- 	* java/awt/event/HierarchyListener.java: New class.
- 	* java/awt/event/InputMethodEvent.java: Implement paramString().
- 	* java/awt/event/InvocationEvent.java: Implement paramString(). Throw
- 	exception if !catchExceptions.
- 	* java/awt/event/ItemEvent.java: Implement paramString().
- 	* java/awt/event/KeyEvent.java: Implement paramString().
- 	* java/awt/event/MouseEvent.java: Implement paramString().
- 	* java/awt/event/PaintEvent.java: Implement paramString().
- 	* java/awt/event/TextEvent.java: Implement paramString().
- 	* java/awt/event/WindowEvent.java: Implement paramString().
- 
- 	AWT Peer interfaces:
- 	* java/awt/peer/ButtonPeer.java: New file.
- 	* java/awt/peer/ListPeer.java: New file.
- 	* java/awt/peer/CanvasPeer.java: New file.
- 	* java/awt/peer/MenuBarPeer.java: New file.
- 	* java/awt/peer/CheckboxMenuItemPeer.java: New file.
- 	* java/awt/peer/MenuComponentPeer.java: New file.
- 	* java/awt/peer/CheckboxPeer.java: New file.
- 	* java/awt/peer/MenuItemPeer.java: New file.
- 	* java/awt/peer/ChoicePeer.java: New file.
- 	* java/awt/peer/MenuPeer.java: New file.
- 	* java/awt/peer/ComponentPeer.java: Implemented.
- 	* java/awt/peer/PanelPeer.java: New file.
- 	* java/awt/peer/ContainerPeer.java: Implemented.
- 	* java/awt/peer/PopupMenuPeer.java: New file.
- 	* java/awt/peer/DialogPeer.java: New file.
- 	* java/awt/peer/ScrollPanePeer.java: New file.
- 	* java/awt/peer/FileDialogPeer.java: New file.
- 	* java/awt/peer/ScrollbarPeer.java: New file.
- 	* java/awt/peer/FontPeer.java: New file.
- 	* java/awt/peer/TextAreaPeer.java: New file.
- 	* java/awt/peer/FramePeer.java: Implemented.
- 	* java/awt/peer/TextComponentPeer.java: New file.
- 	* java/awt/peer/LabelPeer.java: New file.
- 	* java/awt/peer/TextFieldPeer.java: New file.
- 	* java/awt/peer/LightweightPeer.java: New file.
- 	* java/awt/peer/WindowPeer.java: Implemented.
- 
- 2000-07-06  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass):
- 	Initialize static final String fields.
- 
- 2000-07-03  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/PrintWriter.java (print): Call write(String), not
- 	print(String).  See PR libgcj/277.
- 	(print(String)): Use write, not out.write.
- 
- 2000-06-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/jni.h: Include <gcj/array.h>.  Fixes PR libgcj/270.
- 
- 2000-06-27  Andrew Haley  <aph@cygnus.com>
- 
-        * java/io/File.java (createTempFile): Close the FileDescriptor
-        used to create a temp file.  Fixes some of PR 203.
-        * java/io/natFileDescriptorPosix.cc (open): Call garbage
-        collection if we run out of file handles.
- 
- 2000-06-28  Warren Levy  <warrenl@cygnus.com>
- 
- 	* gnu/java/security/provider/Gnu.java: New file.
- 	* gnu/java/security/provider/SHA.java: New file.
- 	* gnu/java/security/provider/SHA1PRNG.java: New file.
- 	* Makefile.am: Added the above files.
- 	* Makefile.in: Rebuilt.
- 
- 	* java/io/ObjectStreamClass.java (setUID): Use Gnu SHA instead of SHS.
- 
- 2000-06-28  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/ThreadGroup.java: Added synchronized flag to many methods.
- 	(destroyed_flag): Removed.
- 	(isDestroyed, removeGroup, removeThread): Test for parent == null.
- 	(activeCount): Added spec note.
- 
- 2000-06-27  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/security/Principal.java: New file.
- 	* Makefile.am: Added Principal.java.
- 	* Makefile.in: Rebuilt.
- 
- 2000-06-27  Rolf W. Rasmussen  <rolfwr@ii.uib.no>
- 
- 	* java/awt/event/MouseEvent.java: Fixed coordinate space
- 	confusion.
- 
- 2000-06-27  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/PushbackInputStream.java (read): If there are characters
- 	in the buffer, don't also call super.read().
- 	* java/io/PushbackReader.java (read): If there are characters in
- 	the buffer, don't also call super.read().
- 
- 	* java/lang/Double.java (valueOf): Call parseDouble().
- 
- 2000-06-26  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/beans/PropertyChangeEvent.java (oldVal): Renamed to oldValue.
- 	(newVal): Renamed to newValue.
- 	* java/beans/PropertyVetoException.java (changeEvent): Renamed to evt.
- 	* java/beans/beancontext/BeanContextServiceRevokedEvent.java
- 	(revokeNow): Renamed to invalidateRefs.
- 	* java/io/OptionalDataException.java: Updated FIXME.
- 	(eof): New placeholder field.
- 	(length); Ditto.
- 	* java/io/WriteAbortedException.java (message): Made transient.
- 	* java/lang/ClassNotFoundException.java: Updated comments for JDK 1.2.
- 	* java/lang/Throwable.java (stackTrace): Made transient.
- 	* java/net/InetAddress.java: Made Serializable.
- 	* java/security/KeyPair.java: Made Serializable.
- 	* java/security/Provider.java: Replaced with Classpath version that
- 	implements serialization and proper methods.
- 	* java/text/ChoiceFormat.java (strings): Renamed to choiceFormats.
- 	(limits): Renamed to choiceLimits.
- 
- 2000-06-24  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natDouble.cc (parseDouble): Renamed from
- 	doubleValueOf.
- 	* java/lang/Double.java (parseDouble): Renamed from
- 	doubleValueOf.  Now public.
- 
- 2000-06-23  Andrew Haley  <aph@cygnus.com>
- 
- 	* java/lang/ieeefp.h: Handle ia64, fr30, mcore.
- 	* java/lang/natThrowable.cc: On IA-64, use __ia64_backtrace.
- 
- 2000-06-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/natMethod.cc: Include <alloca.h>.
- 	* java/lang/natDouble.cc: Always include <alloca.h>.
- 	Fix for PR libgcj/267.
- 
- 2000-06-21  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/ThreadGroup.java (add(Thread)): Rename to addThread() to
- 	comply with classpath VM spec.
- 	(add(Group)): Rename to addGroup().
- 	* java/lang/Thread.java (Thread): Use addThread().
- 	* java/lang/natThread.cc (finish_): Use removeThread().
- 
- 2000-06-20  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/ThreadGroup.java: Merged with classpath.
- 	* prims.cc (_Jv_RunMain): Don't use `main_group'.
- 	* gnu/gcj/runtime/FirstThread.java: Remove ThreadGroup constructor
- 	argument.
- 	* java/lang/Thread.java (Thread): Bootstrap initial thread from
- 	ThreadGroup.root if Thread.currentThread is null. Honour the
- 	ThreadGroup's max priority setting.
- 
- 2000-06-18  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natClass.cc (forName): Removed dead code.  Initialize
- 	returned class.  For PR gcj/260.
- 
- 2000-06-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	Fix for PR libgcj/261:
- 	* include/win32-signal.h (MAKE_THROW_FRAME): Added `_exception'
- 	argument.
- 	* include/sparc-signal.h (MAKE_THROW_FRAME): Added `_exception'
- 	argument.  (This is a patch from long ago that somehow went
- 	missing.)
- 
- 2000-06-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* gnu/gcj/convert/natIconv.cc (iconv_adapter): New function.
- 	(read): Use it.
- 	(write): Likewise.
- 
- 2000-06-15  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Fix for PR java.lang/258:
- 	* prims.cc (_Jv_PrimClass): Set state of primitive class to
- 	JV_STATE_DONE, to prevent accidental initialization.
- 	* java/lang/natClass.cc (_Jv_IsAssignableFrom): Call
- 	_Jv_InterfaceAssignableFrom if target is an interface and source is an
- 	interface or an abstract class.	Remove redundant initializeClass calls.
- 	Remove duplicate if_idt test.
- 	(_Jv_InterfaceAssignableFrom): New function.
- 	* java/lang/Class.h (_Jv_InterfaceAssignableFrom): Prototype.
- 
- 2000-05-31  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (DECLARE_PRIM_TYPE): Define a vtable as well.
- 	(_Jv_PrimClass): Set `methods' by calling _Jv_FindArrayClass.
- 	* include/jvm.h (struct _Jv_ArrayVTable): Declare.
- 	(NUM_OBJECT_METHODS): New define.
- 	* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Added
- 	`array_vtable' parameter.  Added assertion.
- 	* java/lang/Class.h (_Jv_FindArrayClass): Added `array_vtable'
- 	parameter.
- 
- 2000-05-31  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* gcj/cni.h: Include <string.h>.
- 	* defineclass.cc: Include <alloca.h>.
- 	* interpret.cc: Ditto.
- 	* gij.cc: Include <stdlib.h>.
- 
- 2000-05-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/name-finder.h: Include <sys/wait.h>.
- 	(_Jv_name_finder::pid): Now of type `pid_t'.
- 	(_Jv_name_finder::~_Jv_name_finder): Call waitpid().
- 	* java/lang/Throwable.java (CPlusPlusDemangler.close): Call
- 	`proc.waitFor()'.
- 
- 2000-05-24  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectOutputStream.java (writeObject): Use component type
- 	when writing arrays.
- 	Fixed typo.
- 
- 2000-05-20  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Fix for PR libgcj/226:
- 	* java/lang/Class.h (_Jv_InitClass): Don't call __builtin_expect,
- 	since this is an installed header.
- 
- 	Fix for PR libgcj/228:
- 	* java/util/zip/ZipFile (getInputStream): Create inflater with
- 	nowrapper option.
- 
- 	* java/util/zip/natInflater.cc (inflate): Throw zlib's error message
- 	with DataFormatException.
- 
- 2000-05-20  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (hack1): Removed.
- 	(awto_files): Likewise.
- 	(libgcjawt_la_SOURCES): Likewise.
- 	(EXTRA_libgcjawt_la_SOURCES): Likewise.
- 	(libgcjawt_la_DEPENDENCIES): Likewise.
- 	(libgcjawt_la_LIBADD): Likewise.
- 	(libgcjawt_la_LDFLAGS): Likewise.
- 	(libgcjawt_la_LINK): Likewise.
- 	($(awt_java_source_files:.java=.class)): Likewise.
- 	(libgcj.zip): Don't depend on AWT files.
- 	(MOSTLYCLEANFILES): Don't include AWT files.
- 	($(awto_files)): Removed.
- 	(nat_headers): Removed AWT files.
- 	(cond_awt_java_source_files): Removed.
- 	(ordinary_java_source_files): Added awt_java_source_files.
- 	* libgcj.spec.in (*lib): Removed -lgcjawt.
- 	* configure: Rebuilt.
- 	* configure.in: Removed --enable-java-awt option.
- 
- 2000-05-20  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/zip/ZipEntry.java: Implement Cloneable, per JDK1.2 docs.
- 	(ZipEntry): Copy the `name' field.
- 	(clone): Implement JDK1.2 method.
- 	(setCompressedSize): ditto.
- 	(hashCode): ditto.
- 
- 2000-05-19  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/BufferedWriter.java: Merged with Classpath.
- 	* java/io/BufferedOutputStream.java: Merged with Classpath.
- 
- 2000-05-16  Andrew Haley  <aph@cygnus.com>
- 
- 	* sysdep/ia64.c (ia64_backtrace_helper): Pass NULL pointer to
- 	build_ia64_frame_state.
- 	* sysdep/ia64-frame.h (build_ia64_frame_state): Match with
- 	defintion in gcc.
- 
- 2000-05-15  Warren Levy  <warrenl@cygnus.com>
- 
- 	* gnu/gcj/beans/BeanInfoEmbryo.java: Removed.
- 	* gnu/gcj/beans/EmptyBeanInfo.java: Removed.
- 	* gnu/gcj/beans/ExplicitBeanInfo.java: Removed.
- 	* gnu/gcj/beans/IntrospectionIncubator.java: Removed.
- 	* gnu/gcj/beans/editors/ColorEditor.java: Removed.
- 	* gnu/gcj/beans/editors/FontEditor.java: Removed.
- 	* gnu/gcj/beans/editors/NativeBooleanEditor.java: Removed.
- 	* gnu/gcj/beans/editors/NativeByteEditor.java: Removed.
- 	* gnu/gcj/beans/editors/NativeDoubleEditor.java: Removed.
- 	* gnu/gcj/beans/editors/NativeFloatEditor.java: Removed.
- 	* gnu/gcj/beans/editors/NativeIntEditor.java: Removed.
- 	* gnu/gcj/beans/editors/NativeLongEditor.java: Removed.
- 	* gnu/gcj/beans/editors/NativeShortEditor.java: Removed.
- 	* gnu/gcj/beans/editors/StringEditor.java: Removed.
- 	* gnu/gcj/beans/info/ComponentBeanInfo.java: Removed.
- 	* gnu/gcj/io/ClassLoaderObjectInputStream.java: Removed.
- 	* gnu/gcj/io/NullOutputStream.java: Removed.
- 	* gnu/gcj/io/ObjectIdentityWrapper.java: Removed.
- 	* gnu/gcj/lang/ArrayHelper.java: Removed.
- 	* gnu/gcj/lang/ClassHelper.java: Removed.
- 	* gnu/gcj/lang/reflect/TypeSignature.java: Removed.
- 
- 	* gnu/java/beans/BeanInfoEmbryo.java: New file.
- 	* gnu/java/beans/EmptyBeanInfo.java: New file.
- 	* gnu/java/beans/ExplicitBeanInfo.java: New file.
- 	* gnu/java/beans/IntrospectionIncubator.java: New file.
- 	* gnu/java/beans/editors/ColorEditor.java: New file.
- 	* gnu/java/beans/editors/FontEditor.java: New file.
- 	* gnu/java/beans/editors/NativeBooleanEditor.java: New file.
- 	* gnu/java/beans/editors/NativeByteEditor.java: New file.
- 	* gnu/java/beans/editors/NativeDoubleEditor.java: New file.
- 	* gnu/java/beans/editors/NativeFloatEditor.java: New file.
- 	* gnu/java/beans/editors/NativeIntEditor.java: New file.
- 	* gnu/java/beans/editors/NativeLongEditor.java: New file.
- 	* gnu/java/beans/editors/NativeShortEditor.java: New file.
- 	* gnu/java/beans/editors/StringEditor.java: New file.
- 	* gnu/java/beans/info/ComponentBeanInfo.java: New file.
- 	* gnu/java/io/ClassLoaderObjectInputStream.java: New file.
- 	* gnu/java/io/NullOutputStream.java: New file.
- 	* gnu/java/io/ObjectIdentityWrapper.java: New file.
- 	* gnu/java/lang/ArrayHelper.java: New file.
- 	* gnu/java/lang/ClassHelper.java: New file.
- 	* gnu/java/lang/reflect/TypeSignature.java: New file.
- 
- 	* Makefile.am: Updated for moving Classpath files from gnu/gcj
- 	namespace back to the original Classpath gnu/java namespace.
- 	* Makefile.in: Rebuilt.
- 
- 	* java/beans/Beans.java: Namespace change.
- 	* java/beans/EventSetDescriptor.java: Namespace change.
- 	* java/beans/Introspector.java: Namespace change.
- 	* java/beans/PropertyEditorManager.java: Namespace change.
- 	* java/io/ObjectInputStream.java: Namespace change.
- 	* java/io/ObjectOutputStream.java: Namespace change.
- 	* java/io/ObjectStreamClass.java: Namespace change.
- 	* java/io/ObjectStreamField.java: Namespace change.
- 
- 2000-04-21  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectInputStream.java: Reverted workarounds of 2000-04-13
- 	now that compiler patch is available.
- 	Removed unneeded System.loadLibrary.
- 	* java/io/ObjectOutputStream.java: Removed unneeded System.loadLibrary.
- 	* java/io/ObjectStreamClass.java: Removed unneeded System.loadLibrary.
- 
- 2000-04-19  Andrew Haley  <aph@cygnus.com>
- 
- 	* java/lang/natClass.cc (_Jv_IsAssignableFrom): Make sure source
- 	and target classes have been initialized.
- 
- 2000-04-19  Andrew Haley  <aph@cygnus.com>
- 
- 	* java/lang/String.java: implement Serializable, Comparable.
- 	(compareTo (Object)): New method.
- 
- 2000-04-19  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectStreamClass.java (getDefinedSUID): Use getDeclaredField
- 	instead of getField to retrieve non-public field.
- 	(getSerialPersistantFields): Ditto.
- 
- 2000-04-18  Warren Levy  <warrenl@cygnus.com>
- 
- 	* mauve-libgcj: Turned off object serialization tests temporarily
- 	due to compiler error.
- 
- 2000-04-17  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectInputStream.java (DEBUG): Disabled unused method
- 	to avoid build problem.
- 	(DEBUGln): Ditto.
- 	* mauve-libgcj: Turned on object serialization tests.
- 
- 2000-04-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libgcj.spec.in (*lib): Added -lgcjawt.
- 
- 2000-04-17  Andrew Haley  <aph@cygnus.com>
- 
- 	* Makefile.am: Add new files:
- 	gnu/gcj/io/SimpleSHSStream.java, gnu/gcj/io/natSimpleSHSStream.cc,
- 	gnu/gcj/io/shs.cc.
- 	* Makefile.in: Rebuilt.
- 
- 	* java/lang/natClass.cc (_Jv_IsAssignableFrom): Check for an
- 	interface that has no implementations.
- 	Check for an attempt to assign an abstract class to an interface.
- 
- 	* java/io/ObjectStreamClass.java (setUID): Use a SimpleSHSStream
- 	if we fail to find MessageDigest.getInstance ("SHA").
- 
- 	* gnu/gcj/io/SimpleSHSStream.java: New file.
- 	* gnu/gcj/io/natSimpleSHSStream.java: New file.
- 	* gnu/gcj/io/shs.cc: New file.
- 	* gnu/gcj/io/shs.h: new file.
- 
- 	* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Make arrays
- 	serializable.
- 
- 	* gnu/gcj/lang/reflect/TypeSignature.java: Don't remove
- 	punctuation from the classname of an array element.
- 
- 	* gcj/javaprims.h: Add SimpleDigestStream.
- 
- 2000-04-17  Andrew Haley  <aph@cygnus.com>
- 
- 	* java/lang/natClass.cc (getPrivateField): Make recursive calls
- 	to getPrivateField for superclasses.
- 
- 2000-04-14  Andrew Haley  <aph@cygnus.com>
- 
- 	* Makefile.am: Add new files:
- 	java/io/ObjectOutputStream$PutField.h,
- 	java/io/ObjectInputStream$GetField.h,java/io/natObjectInputStream.cc,
- 	java/io/natObjectOutputStream.cc
- 	* Makefile.in: Rebuilt.
- 	* gcj/Makefile.in: Rebuilt.
- 	* include/Makefile.in: Rebuilt.
- 	* java/lang/Class.h (getPrivateField): New method.
- 	(getPrivateMethod): Ditto.
- 	Make java::io::ObjectOutputStream, java::io::ObjectInputStream,
- 	and java::io::ObjectStreamClass our friends.
- 	* java/lang/natClass.cc (getPrivateField): New method.
- 	(getPrivateMethod): Ditto.
- 	(_Jv_IsAssignableFrom): Return false for Interface with no IDT.
- 	* gcj/javaprims.h: Add serialization classes.
- 	* java/io/ObjectInputStream.java (setBooleanField): Rewrite in Java.
- 	(setByteField): Ditto.
- 	(setCharField): Ditto.
- 	(setDoubleField): Ditto.
- 	(setFloatField): Ditto.
- 	(setIntField): Ditto.
- 	(setLongField): Ditto.
- 	(setShortField): Ditto.
- 	(setObjectField): Ditto.
- 	* java/io/ObjectOutputStream.java: (getBooleanField): Rewrite in
- 	Java.
- 	(getByteField): Ditto.
- 	(getCharField): Ditto.
- 	(getDoubleField): Ditto.
- 	(getFloatField): Ditto.
- 	(getIntField): Ditto.
- 	(getLongField): Ditto.
- 	(getShortField): Ditto.
- 	(getObjectField): Ditto.
- 	* java/io/ObjectStreamClass.java (hasClassInitializer): Rewrite in
- 	Java.
- 	(getSerialPersistantFields): Ditto.
- 	(getDefinedSUID): Ditto.
- 	* java/io/natObjectOutputStream.cc: New file.
- 	* java/io/natObjectInputStream.cc: New file.
- 
- 2000-04-13  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectInputStream.java: Temporary workarounds for compiler
- 	problems.  Revert to previous version to reproduce and when fixed.
- 
- 2000-04-13  Warren Levy  <warrenl@cygnus.com>
- 
- 	* gnu/gcj/io/ClassLoaderObjectInputStream.java: New file.
- 	* gnu/gcj/io/NullOutputStream.java: New file.
- 	* gnu/gcj/lang/reflect/TypeSignature.java: New file.
- 	* java/io/BlockDataException.java: New file.
- 	* java/io/Externalizable.java: New file.
- 	* java/io/InvalidClassException.java: New file.
- 	* java/io/InvalidObjectException.java: New file.
- 	* java/io/NotActiveException.java: New file.
- 	* java/io/NotSerializableException.java: New file.
- 	* java/io/ObjectInput.java: New file.
- 	* java/io/ObjectInputStream.java: New file.
- 	* java/io/ObjectInputValidation.java: New file.
- 	* java/io/ObjectOutput.java: New file.
- 	* java/io/ObjectOutputStream.java: New file.
- 	* java/io/ObjectStreamClass.java: New file.
- 	* java/io/ObjectStreamConstants.java: New file.
- 	* java/io/ObjectStreamField.java: New file.
- 	* java/io/Replaceable.java: New file.
- 	* java/io/Resolvable.java: New file.
- 	* java/io/SerializablePermission.java: New file.
- 	* java/io/WriteAbortedException.java: New file.
- 	* java/security/BasicPermission.java: New file.
- 	* java/security/DigestOutputStream.java: New file.
- 	* java/security/Guard.java: New file.
- 	* java/security/Permission.java: New file.
- 	* java/security/PermissionCollection.java: New file.
- 	* Makefile.am: Added above files.
- 	* Makefile.in: Rebuilt.
- 
- 	* java/beans/Beans.java (instantiate): Activated serialization code.
- 	* java/lang/SecurityManager.java (checkPermission): New method.
- 
- 2000-04-12  Warren Levy  <warrenl@cygnus.com>
- 
- 	* gnu/gcj/beans/BeanInfoEmbryo.java: New file.
- 	* gnu/gcj/beans/EmptyBeanInfo.java: New file.
- 	* gnu/gcj/beans/ExplicitBeanInfo.java: New file.
- 	* gnu/gcj/beans/IntrospectionIncubator.java: New file.
- 	* gnu/gcj/beans/editors/ColorEditor.java: New file.
- 	* gnu/gcj/beans/editors/FontEditor.java: New file.
- 	* gnu/gcj/beans/editors/NativeBooleanEditor.java: New file.
- 	* gnu/gcj/beans/editors/NativeByteEditor.java: New file.
- 	* gnu/gcj/beans/editors/NativeDoubleEditor.java: New file.
- 	* gnu/gcj/beans/editors/NativeFloatEditor.java: New file.
- 	* gnu/gcj/beans/editors/NativeIntEditor.java: New file.
- 	* gnu/gcj/beans/editors/NativeLongEditor.java: New file.
- 	* gnu/gcj/beans/editors/NativeShortEditor.java: New file.
- 	* gnu/gcj/beans/editors/StringEditor.java: New file.
- 	* gnu/gcj/beans/info/ComponentBeanInfo.java: New file.
- 	* gnu/gcj/io/ObjectIdentityWrapper.java: New file.
- 	* gnu/gcj/lang/ArrayHelper.java: New file.
- 	* gnu/gcj/lang/ClassHelper.java: New file.
- 	* java/beans/BeanDescriptor.java: New file.
- 	* java/beans/BeanInfo.java: New file.
- 	* java/beans/Beans.java: New file.
- 	* java/beans/Customizer.java: New file.
- 	* java/beans/DesignMode.java: New file.
- 	* java/beans/EventSetDescriptor.java: New file.
- 	* java/beans/FeatureDescriptor.java: New file.
- 	* java/beans/IndexedPropertyDescriptor.java: New file.
- 	* java/beans/IntrospectionException.java: New file.
- 	* java/beans/Introspector.java: New file.
- 	* java/beans/MethodDescriptor.java: New file.
- 	* java/beans/ParameterDescriptor.java: New file.
- 	* java/beans/PropertyChangeEvent.java: New file.
- 	* java/beans/PropertyChangeListener.java: New file.
- 	* java/beans/PropertyChangeSupport.java: New file.
- 	* java/beans/PropertyDescriptor.java: New file.
- 	* java/beans/PropertyEditor.java: New file.
- 	* java/beans/PropertyEditorManager.java: New file.
- 	* java/beans/PropertyEditorSupport.java: New file.
- 	* java/beans/PropertyVetoException.java: New file.
- 	* java/beans/SimpleBeanInfo.java: New file.
- 	* java/beans/VetoableChangeListener.java: New file.
- 	* java/beans/VetoableChangeSupport.java: New file.
- 	* java/beans/Visibility.java: New file.
- 	* java/beans/beancontext/BeanContext.java: New file.
- 	* java/beans/beancontext/BeanContextChild.java: New file.
- 	* java/beans/beancontext/BeanContextChildComponentProxy.java: New file.
- 	* java/beans/beancontext/BeanContextChildSupport.java: New file.
- 	* java/beans/beancontext/BeanContextContainerProxy.java: New file.
- 	* java/beans/beancontext/BeanContextEvent.java: New file.
- 	* java/beans/beancontext/BeanContextMembershipEvent.java: New file.
- 	* java/beans/beancontext/BeanContextMembershipListener.java: New file.
- 	* java/beans/beancontext/BeanContextProxy.java: New file.
- 	* java/beans/beancontext/BeanContextServiceAvailableEvent.java:
- 	New file.
- 	* java/beans/beancontext/BeanContextServiceProvider.java: New file.
- 	* java/beans/beancontext/BeanContextServiceProviderBeanInfo.java:
- 	New file.
- 	* java/beans/beancontext/BeanContextServiceRevokedEvent.java: New file.
- 	* java/beans/beancontext/BeanContextServiceRevokedListener.java:
- 	New file.
- 	* java/beans/beancontext/BeanContextServices.java: New file.
- 	* java/beans/beancontext/BeanContextServicesListener.java: New file.
- 	* java/util/AbstractCollection.java: New file.
- 	* java/util/AbstractList.java: New file.
- 	* java/util/Arrays.java: New file.
- 	* Makefile.am: Added above files.
- 	* Makefile.in: Rebuilt.
- 
- 2000-04-11  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/awt/AWTError.java: New file.
- 	* java/awt/AWTEvent.java: New file.
- 	* java/awt/AWTException.java: New file.
- 	* java/awt/ActiveEvent.java: New file.
- 	* java/awt/Adjustable.java: New file.
- 	* java/awt/BorderLayout.java: New file.
- 	* java/awt/Color.java: New file.
- 	* java/awt/Component.java: New file.
- 	* java/awt/Container.java: New file.
- 	* java/awt/Dimension.java: New file.
- 	* java/awt/Event.java: New file.
- 	* java/awt/Font.java: New file.
- 	* java/awt/Frame.java: New file.
- 	* java/awt/Graphics.java: New file.
- 	* java/awt/IllegalComponentStateException.java: New file.
- 	* java/awt/Image.java: New file.
- 	* java/awt/ItemSelectable.java: New file.
- 	* java/awt/LayoutManager.java: New file.
- 	* java/awt/LayoutManager2.java: New file.
- 	* java/awt/Menu.java: New file.
- 	* java/awt/MenuBar.java: New file.
- 	* java/awt/MenuComponent.java: New file.
- 	* java/awt/MenuContainer.java: New file.
- 	* java/awt/MenuItem.java: New file.
- 	* java/awt/Paint.java: New file.
- 	* java/awt/PaintContext.java: New file.
- 	* java/awt/Point.java: New file.
- 	* java/awt/Rectangle.java: New file.
- 	* java/awt/Shape.java: New file.
- 	* java/awt/TextArea.java: New file.
- 	* java/awt/TextComponent.java: New file.
- 	* java/awt/Toolkit.java: New file.
- 	* java/awt/Transparency.java: New file.
- 	* java/awt/Window.java: New file.
- 	* java/awt/natToolkit.cc: New file.
- 	* java/awt/event/AWTEventListener.java: New file.
- 	* java/awt/event/ActionEvent.java: New file.
- 	* java/awt/event/ActionListener.java: New file.
- 	* java/awt/event/AdjustmentEvent.java: New file.
- 	* java/awt/event/AdjustmentListener.java: New file.
- 	* java/awt/event/ComponentAdapter.java: New file.
- 	* java/awt/event/ComponentEvent.java: New file.
- 	* java/awt/event/ComponentListener.java: New file.
- 	* java/awt/event/ContainerAdapter.java: New file.
- 	* java/awt/event/ContainerEvent.java: New file.
- 	* java/awt/event/ContainerListener.java: New file.
- 	* java/awt/event/FocusAdapter.java: New file.
- 	* java/awt/event/FocusEvent.java: New file.
- 	* java/awt/event/FocusListener.java: New file.
- 	* java/awt/event/InputEvent.java: New file.
- 	* java/awt/event/InputMethodEvent.java: New file.
- 	* java/awt/event/InputMethodListener.java: New file.
- 	* java/awt/event/InvocationEvent.java: New file.
- 	* java/awt/event/ItemEvent.java: New file.
- 	* java/awt/event/ItemListener.java: New file.
- 	* java/awt/event/KeyAdapter.java: New file.
- 	* java/awt/event/KeyEvent.java: New file.
- 	* java/awt/event/KeyListener.java: New file.
- 	* java/awt/event/MouseAdapter.java: New file.
- 	* java/awt/event/MouseEvent.java: New file.
- 	* java/awt/event/MouseListener.java: New file.
- 	* java/awt/event/MouseMotionAdapter.java: New file.
- 	* java/awt/event/MouseMotionListener.java: New file.
- 	* java/awt/event/PaintEvent.java: New file.
- 	* java/awt/event/TextEvent.java: New file.
- 	* java/awt/event/TextListener.java: New file.
- 	* java/awt/event/WindowAdapter.java: New file.
- 	* java/awt/event/WindowEvent.java: New file.
- 	* java/awt/event/WindowListener.java: New file.
- 	* java/awt/geom/Dimension2D.java: New file.
- 	* java/awt/geom/Point2D.java: New file.
- 	* java/awt/peer/ComponentPeer.java: New file.
- 	* java/awt/peer/ContainerPeer.java: New file.
- 	* java/awt/peer/FramePeer.java: New file.
- 	* java/awt/peer/WindowPeer.java: New file.
- 	* java/util/Collection.java: New file.
- 	* java/util/Comparator.java: New file.
- 	* java/util/Iterator.java: New file.
- 	* java/util/List.java: New file.
- 	* java/util/ListIterator.java: New file.
- 	* Makefile.am: Added above files.
- 	* Makefile.in: Rebuilt.
- 
- 2000-04-10  Warren Levy  <warrenl@cygnus.com>
- 
- 	* gnu/gcj/runtime/MethodInvocation.java: Fixed copyright.
- 	* java/lang/FirstThread.java: Ditto.
- 	* java/lang/StringBuffer.java: Ditto.
- 	* mauve-libgcj: Turned on java.math, java.sql and java.security tests.
- 
- 	* gnu/gcj/math/MPN.java (rshift): Undid Boehm's patch of 03-14.
- 	Special case handled in java.math.BigInteger.
- 	* java/math/BigInteger.java (divide): Handle the special case when
- 	dividing by 1 and the high bit of the dividend is set.
- 	(setShiftRight): Handle case when count == 0.
- 
- 2000-04-05  Andrew Haley  <aph@cygnus.com>
- 
- 	* java/net/URL.java (setURLStreamHandler): Make "file" protocol a
- 	special case.
- 
- 2000-04-05  Andrew Haley  <aph@cygnus.com>
- 
- 	* sysdep/ia64.c (rse_address_add): Delete.
- 	(IS_NaT_COLLECTION_ADDR): Delete.
- 	(ia64_backtrace_helper): check for null unwind_info.
- 
- 	* sysdep/ia64-frame.h: add calc_caller_bsp.
- 
- 	* java/lang/natThrowable.cc (printRawStackTrace): Flush
- 	PrintWriter.
- 
- 	* prims.cc (_Jv_divI): Use _Jv_ThrowSignal.
- 	(_Jv_remI): Likewise.
- 	(_Jv_divJ): Likewise.
- 	(_Jv_remJ): Likewise.
- 
- 	* interpret.cc (continue1): Use divide subroutines to guarantee
- 	correct Java standard behaviour.
- 	Floating-point division should not abort; make it so.
- 
- 2000-03-29  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Test against `libgcj_sjlj', not
- 	`enable_sjlj_exceptions'.  Rearranged code to allow SYSDEP_SOURCES
- 	to be set even when using sjlj.
- 
- 2000-03-24  Andrew Haley  <aph@cygnus.com>
- 
- 	* Makefile.am: Add file addr2name.awk.
- 	* Makefile.in: Rebuilt.
- 	* addr2name.awk: New file.
- 	* name-finder.cc (_Jv_name_finder): Call addr2name.awk to do name
- 	lookups on ia64.
- 	* java/lang/natThrowable.cc(printRawStackTrace): Don't print out a
- 	blank line.
- 
- 2000-03-22  Andrew Haley  <aph@cygnus.com>
- 
- 	* configure.host: Add -funwind-tables for IA64.
- 	* Makefile.am (c_source_files): Add SYSDEP_SORCES.
- 	* Makefile.in: Rebuilt.
- 	* java/lang/natThrowable.cc (fillInStackTrace): Add ia64 case.
- 	* sysdep/ia64.c: New file.
- 	* sysdep/ia64-frame.h: New file.
- 	* configure.in: Add sysdep/ia64.c for ia64.
- 	* configure: Rebuilt.
- 
- 2000-03-17  Andrew Haley  <aph@cygnus.com>
- 
- 	* java/lang/natString.cc: Remove `register' keyword.
- 	interpret.cc: ditto.
- 
- 2000-03-16  Andrew Haley  <aph@cygnus.com>
- 
- 	* configure.host (ia64): Enable interpreter.
- 
- 2000-03-14  Hans Boehm  <boehm@acm.org>
- 
- 	* gnu/gcj/math/MPN.java (rshift): Handle shift 32 specially.
- 
- 2000-03-14  Andrew Haley  <aph@cygnus.com>
- 
- 	* include/default-signal.h (MAKE_THROW_FRAME): Add arg
- 	`_exception'.
- 
- 2000-03-10  Andrew Haley  <aph@cygnus.com>
- 
- 	* java/lang/ieeefp.h: Import latest version from fdlibm.
- 
- 2000-03-14  Andrew Haley  <aph@cygnus.com>
- 
- 	* prims.cc (_Jv_ThrowSignal): New function.
- 	(catch_segv): Add arg `_exception' to MAKE_THROW_FRAME.
- 	(catch_fpe): Ditto.
- 	* include/sparc-signal.h (MAKE_THROW_FRAME): Ditto
- 	* include/i386-signal.h (MAKE_THROW_FRAME): Ditto.
- 	* include/ppc-signal.h: New file.
- 
- 2000-05-18  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/Thread.java: Declare `data' as Object, not RawData.
- 	* java/lang/natThread.java (initialize_native): Cast `data' to
- 	jobject.
- 	* gnu/gcj/RawData.java: Clarify documentation.
- 
- 	From Gregory R. Warnes <warnes@biostat.washington.edu>:
- 	* gnu/gcj/protocol/jar/Connection.java (getJarFile): Test for null
- 	`jarFile', not `jarFileURL'.
- 
- 2000-05-15  Andrew Haley  <aph@cygnus.com>
- 
- 	* include/ppc-signal.h: New file.
- 
- 2000-05-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/zip/ZipInputStream.java (getNextEntry): When reading
- 	file headers, don't include `size' in the skip call.
- 
- 2000-05-10  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/StringBuffer.java (delete): Call arrayCopy() correctly.
- 	Avoid arrayCopy() call where possible. Update `count' _after_ calling
- 	arrayCopy().
- 	(replace): Reimplemented. Fix javadoc.
- 	(reverse): Call ensureCapacity_unsynchronized().
- 	(StringBuffer (String)): Use DEFAULT_CAPACITY.
- 
- 	(replace): Calculate length for arraycopy() correctly.
- 
- 2000-05-09  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/StringBuffer.java (toString): Don't mark buffer as
- 	shared.
- 	(insert(int,char[],int,int): New method.
- 	(delete): New method from Classpath.
- 	(deleteCharAt): Likewise.
- 	(substring): Likewise.
- 	(shared): No longer private.
- 	Added JavaDoc comments from Classpath.
- 	* java/lang/String.java (String(StringBuffer)): Ensure `buffer' is
- 	shared.
- 
- 2000-05-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (LIBLINK): New macro.
- 	(libgcj_la_LINK): Use it.
- 	(libgcjawt_la_LINK): Likewise.
- 
- 2000-05-06  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (libgcj.zip): Don't pass -L to javac.
- 
- 2000-05-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	Fix for PR libgcj/220:
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (gij_LDFLAGS): Don't use libstdc++.
- 	(jv_convert_LDFLAGS): Likewise.
- 	(libgcj_la_LDFLAGS): Likewise.
- 	(GCJLINK): New macro.
- 	(jv_convert_LINK): Use it.
- 	(gij_LINK): Likewise.
- 	(libgcj_la_LINK): New macro.
- 	(libgcjawt_la_LINK): Likewise.
- 
- 2000-05-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* gcj/field.h (JvFieldIsRef): Return false for gnu.gcj.RawData
- 	field.
- 	* boehm.cc (_Jv_MarkObj): Removed dead code.  Use `STATIC', not
- 	`0x0008'.
- 	Include Modifier.h.
- 
- 2000-05-05  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/natClass.cc (isInstance): Use __builtin_expect.
- 	(_Jv_IsAssignableFrom): Ditto.
- 	(_Jv_IsInstanceOf): Ditto.
- 	(_Jv_CheckCast): Ditto.
- 	(_Jv_CheckArrayStore): Ditto.
- 	* java/lang/Class.h (_Jv_InitClass): Ditto.
- 	* java/lang/natObject.cc (_Jv_MonitorEnter): __builtin_expect `false',
- 	not `0'.
- 	(notify): Ditto.
- 	(notifyAll): Ditto.
- 	(wait): Ditto.
- 	(_Jv_MonitorExit): Ditto.
- 	* boehm.cc (_Jv_MarkObj): Ditto.
- 	(_Jv_MarkObj): Ditto.
- 	(_Jv_MarkArray): Ditto.
- 	* prims.cc (_Jv_AllocObject): Ditto.
- 	(_Jv_NewObjectArray): Ditto.
- 	(_Jv_NewPrimArray): Ditto.
- 	(_Jv_Malloc): Ditto.
- 	(_Jv_Realloc): Ditto.
- 	(_Jv_MallocUnchecked): Ditto.
- 	(_Jv_divI): Ditto.
- 	(_Jv_remI): Ditto.
- 	(_Jv_divJ): Ditto.
- 	(_Jv_remJ): Ditto.
- 
- 2000-05-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/Locale.java (Locale): Don't explicitly check for
- 	null.
- 	* java/util/Hashtable.java (containsKey): Don't explicitly check
- 	for null.
- 	(get): Likewise.
- 	* java/util/BitSet.java (and, or, xor): Don't explicitly check for
- 	null.
- 	* java/util/zip/ZipEntry.java (ZipEntry): Don't explicitly check
- 	for null.
- 	* java/text/StringCharacterIterator.java
- 	(StringCharacterIterator): Don't check for null.
- 	* java/text/ChoiceFormat.java (setChoices): Don't explicitly check
- 	for null pointer.
- 	* java/net/MulticastSocket.java (joinGroup): Don't explicitly
- 	check for null pointer.
- 	(leaveGroup): Likewise.
- 	* java/net/DatagramPacket.java (DatagramPacket): Removed erroneous
- 	comment.
- 	(setData): Likewise.
- 	* java/lang/ThreadGroup.java (ThreadGroup): Don't explicitly check
- 	for `p==null'.
- 
- 2000-04-28  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* Makefile.am (GCJCOMPILE, JCFLAGS, JF1CLAGS, jv_convert_LINK,
- 	gij_LINK, libgcj.zip, .java=.class): Move -L option out of FLAGS.
- 	(libgcj_la_LDFLAGS): Add -L../libstdc++ for in-gcc builds.
- 	(jv_convert_LDFLAGS, gij_LDFLAGS): Add `pwd`/../libstdc++ to
- 	-rpath for in-gcc builds.
- 	* Makefile.in: Rebuilt.
- 
- 2000-04-28  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libgcj.spec.in (*jc1): Added -fasynchronous-exceptions.
- 	Fix for PR gcj/218.
- 
- 2000-04-28  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava/java/lang/String.java (toString): Remove `final' hack.
- 
- 2000-04-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	Runtime support for PR gcj/2:
- 	* prims.cc (_Jv_ThrowNullPointerException): New function.
- 	* include/jvm.h (_Jv_ThrowNullPointerException): Declare.
- 
- 2000-04-27  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* prims.cc (_Jv_NewObjectArray): Fix typo.
- 
- 2000-04-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (AM_CXXFLAGS): Added -fasynchronous-exceptions.
- 
- 2000-04-24  Jeff Sturm  <jsturm@sigma6.com>
- 
- 	* gnu/gcj/runtime/natFirstThread.cc (run): Initialize class before
- 	calling main.
- 
- 2000-04-22  Anthony Green  <green@cygnus.com>
- 
- 	* include/jvm.h (__builtin_expect): Define as unused for now.
- 	* java/lang/natObject.cc (_Jv_MonitorEnter): Add __builtin_expect.
- 	(notify): Ditto.
- 	(notifyAll): Ditto.
- 	(wait): Ditto.
- 	(_Jv_MonitorExit): Ditto.
- 	* boehm.cc (_Jv_MarkObj): Ditto.
- 	(_Jv_MarkObj): Ditto.
- 	(_Jv_MarkArray): Ditto.
- 	(_Jv_AllocBytes): Ditto.
- 	* prims.cc (_Jv_AllocObject): Ditto.
- 	(_Jv_NewObjectArray): Ditto.
- 	(_Jv_NewPrimArray): Ditto.
- 	(_Jv_Malloc): Ditto.
- 	(_Jv_Realloc): Ditto.
- 	(_Jv_MallocUnchecked): Ditto.
- 	(_Jv_divI): Ditto.
- 	(_Jv_remI): Ditto.
- 	(_Jv_divJ): Ditto.
- 	(_Jv_remJ): Ditto.
- 
- 	* include/Makefile.in: Rebuilt.
- 	* include/Makefile.am (include_HEADERS): Add jvmpi.h.
- 
- 2000-04-21  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/PipedInputStream.java, java/io/PipedOutputStream.java:
- 	Yet another new version from Classpath.
- 
- 	Fix for PR libgcj/15:
- 	* java/util/natGregorianCalendar.cc (_REENTRANT,
- 	_POSIX_PTHREAD_SEMANTICS): Don't define.
- 	* java/net/natInetAddress.cc (_REENTRANT): Don't define.
- 	* java/lang/natSystem.cc (_REENTRANT, _POSIX_PTHREAD_SEMANTICS):
- 	Don't define.
- 	* java/io/natFile.cc (_REENTRANT, _POSIX_PTHREAD_SEMANTICS): Don't
- 	define.
- 	* configure: Rebuilt.
- 	* configure.in: If using POSIX threads, define _REENTRANT if
- 	needed.  Define _POSIX_PTHREAD_SEMANTICS.  Don't define
- 	GETHOSTBYNAME_R_NEEDS_REENTRANT.
- 
- 	* java/io/PipedInputStream.java, java/io/PipedReader.java,
- 	java/io/PipedOutputStream.java, java/io/PipedWriter.java: New
- 	version from Classpath.
- 
- 	Fix for PR libgcj/213:
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (gij_SOURCES): Added gij.cc.
- 	(EXTRA_gij_SOURCES): Removed.
- 	(gij_LDADD): Removed gij.lo.
- 	(gij_DEPENDENCIES): Likewise.
- 	($(gij_OBJECTS)): Depend on nat_headers.
- 
- 	* gnu/gcj/protocol/file/Handler.java (openConnection): Use
- 	`setURL', not `url.set'.
- 
- 2000-04-20  Tom Tromey  <tromey@cygnus.com>
- 
- 	Fix for PR java.io/204:
- 	* java/io/PipedInputStream.java, java/io/PipedReader.java,
- 	java/io/PipedOutputStream.java, java/io/PipedWriter.java: Imported
- 	from Classpath.
- 
- 	Fix for PR libgcj/212:
- 	* gcj/javaprims.h (_Jv_word, _Jv_word2): Removed definitions.
- 	* include/jvm.h (_Jv_word, _Jv_word2): Define.
- 	* java/lang/Class.h (_Jv_word): Declare.
- 
- 	* jni.cc (_Jv_JNI_PopSystemFrame): Clear `env->ex'.
- 
- 2000-04-19  Tom Tromey  <tromey@cygnus.com>
- 
- 	* jni.cc (_Jv_JNI_FindClass): Use system class loader if class
- 	doesn't have a loader.
- 
- 2000-04-19  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* boehm.cc: (_Jv_MarkObj, _Jv_MarkArray): Cast pointers for
- 	MAYBE_MARK to ptr_t, for compatibility with new GC version.
- 
- 2000-04-16  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/io/natFileDescriptorPosix.cc (open): Use mode 0666. Fix for PR
- 	libgcj/202.
- 	(available): Initialize `where' to prevent bogus compiler warning.
- 
- 2000-04-12  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natString.cc (intern): Temporarily disable finalizer
- 	registration.
- 
- 	* java/lang/natString.cc (unintern): Added `obj' argument.
- 	(intern): Register finalizer for string.
- 	* java/lang/String.java (unintern): Now static; added obj
- 	argument.
- 
- 2000-04-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/Vector.java (VectorEnumeration): Now `final'.
- 	* java/util/Hashtable.java (HashtableEntry): Now `final'.
- 	(HashtableEnumeration): Likewise.
- 	* java/util/zip/ZipFile.java (ZipEnumeration): Now `final'.
- 	* java/text/RuleBasedCollator.java (RBCElement): Now `final'.
- 
- 2000-04-10  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/io/ObjectStreamException.java: New file.
- 	* java/io/OptionalDataException.java: New file.
- 	* java/io/StreamCorruptedException.java: New file.
- 	* java/math/BigDecimal.java: New file.
- 	* java/sql/CallableStatement.java: New file.
- 	* java/sql/Connection.java: New file.
- 	* java/sql/DataTruncation.java: New file.
- 	* java/sql/DatabaseMetaData.java: New file.
- 	* java/sql/Date.java: New file.
- 	* java/sql/Driver.java: New file.
- 	* java/sql/DriverManager.java: New file.
- 	* java/sql/DriverPropertyInfo.java: New file.
- 	* java/sql/PreparedStatement.java: New file.
- 	* java/sql/ResultSet.java: New file.
- 	* java/sql/ResultSetMetaData.java: New file.
- 	* java/sql/SQLException.java: New file.
- 	* java/sql/SQLWarning.java: New file.
- 	* java/sql/Statement.java: New file.
- 	* java/sql/Time.java: New file.
- 	* java/sql/Timestamp.java: New file.
- 	* java/sql/Types.java: New file.
- 	* Makefile.am: Added above new files.
- 	* Makefile.in: Rebuilt.
- 
- 	* mauve-libgcj: Turned on java.math, java.sql and java.security tests.
- 	* java/net/MulticastSocket.java (MulticastSocket): Pass values a la
- 	DatagramSocket constructor instead of null.
- 
- 2000-04-08  Anthony Green  <green@cygnus.com>
- 
- 	* include/posix-threads.h (_Jv_MutexUnlock): Replace
- 	_JV_NOT_OWNER.
- 
- 2000-04-08  Anthony Green  <green@cygnus.com>
- 
- 	* posix-threads.cc (_Jv_MutexLock): Moved back to posix-threads.h.
- 	(_Jv_MutexUnlock): Ditto.
- 	* include/posix-threads.h (_Jv_MutexLock): From posix-threads.cc.
- 	(_Jv_MutexUnlock): Ditto.
- 
- 2000-04-08  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/StringBuffer.java (ensureCapacity): Don't call Math::max.
- 	(ensureCapacity_unsynchronized): New private method.
- 	(append): Use ensureCapacity_unsynchronized.
- 
- 2000-04-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added new files.
- 	* java/awt/IllegalComponentStateException.java: New file.
- 	* java/awt/ItemSelectable.java: New file.
- 	* java/awt/event/WindowEvent.java: Finished.
- 	* java/awt/event/TextEvent.java: Finished.
- 	* java/awt/event/ContainerEvent.java: New file.
- 	* java/awt/Component.java (getX, getY): New methods.
- 	* java/awt/event/PaintEvent.java: New file.
- 	* java/awt/event/MouseEvent.java: New file.
- 	* java/awt/ActiveEvent.java: New file.
- 	* java/awt/event/KeyEvent.java: Finished.
- 	* java/awt/event/ItemEvent.java: New file.
- 	* java/awt/Adjustable.java: New file.
- 	* java/awt/event/InputMethodEvent.java: New file.
- 	* java/awt/event/InputEvent.java: Finished.
- 	* java/awt/event/FocusEvent.java: New file.
- 	* java/awt/event/MouseMotionAdapter.java: New file.
- 	* java/awt/event/MouseAdapter.java: New file.
- 	* java/awt/event/KeyAdapter.java: New file.
- 	* java/awt/event/FocusAdapter.java: New file.
- 	* java/awt/event/ContainerAdapter.java: New file.
- 	* java/awt/event/ComponentEvent.java: Finished.
- 	* java/awt/event/AdjustmentEvent.java: New file.
- 	* java/awt/event/ComponentAdapter.java: New file.
- 	* java/awt/event/ActionEvent.java: Finished.
- 	* java/awt/event/MouseMotionListener.java: New file.
- 	* java/awt/event/MouseListener.java: New file.
- 	* java/awt/event/ItemListener.java: New file.
- 	* java/awt/event/InputMethodListener.java: New file.
- 	* java/awt/event/ContainerListener.java: New file.
- 	* java/awt/event/FocusListener.java: New file.
- 	* java/awt/event/ComponentListener.java: New file.
- 	* java/awt/event/AWTEventListener.java: New file.
- 	* java/awt/event/AdjustmentListener.java: New file.
- 
- 2000-04-08  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/natObject.cc (_Jv_MonitorEnter): Only perform null
- 	check when we have to.
- 
- 	* gcj/array.h: Mark elements(JArray<T>& x) and elements(JArray<T>*
- 	x) as `inline'.
- 
- 	* java/util/StringTokenizer.java: Minor optimization.  Eliminates
- 	one method call.
- 
- 	* java/util/Vector.java (VectorEnumeration.nextElement): Manually
- 	inline hasMoreElements.
- 
- 2000-04-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Recognize --enable-java-awt.
- 	(AWT): New conditional.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (toolexeclib_LTLIBRARIES): Build libgcjawt.la if
- 	requested.
- 	(libgcjawt_la_SOURCES): New macro.
- 	(EXTRA_libgcjawt_la_SOURCES): Likewise.
- 	(libgcjawt_la_DEPENDENCIES): Likewise.
- 	(libgcjawt_la_LIBADD): Likewise.
- 	(libgcjawt_la_LDFLAGS): Likewise.
- 	(libgcj.zip): Depend on cond_java_awt_source_files
- 	(cond_awt_java_source_files): New macro.
- 	(MOSTLYCLEANFILES): Added awto_files.
- 	(awto_files): New macro.  Use where javao_files used.
- 	(nat_headers): Use cond_awt_java_source_files.
- 
- 2000-04-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added AWTException.java.
- 	* java/awt/AWTException.java: New file.
- 
- 2000-04-03  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/jvm.h (_Jv_GetArrayElementFromElementType): More
- 	commentary from Alex.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am ($(javao_files)): Depend on libgcj.zip.
- 	From H.J. Lu.
- 
- Sun Apr  2 08:27:18 2000  Anthony Green  <green@redhat.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Add --disable-jvmpi.
- 	* include/config.h.in: Rebuilt.
- 	* acconfig.h: Add ENABLE_JVMPI.
- 
- 	* include/jvm.h: Declare _Jv_DisableGC and _Jv_EnableGC.
- 	(_Jv_JVMPI_Notify_OBJECT_ALLOC): New define.
- 	(_Jv_JVMPI_Notify_THREAD_END): New define.
- 	(_Jv_JVMPI_Notify_THREAD_END): New define.
- 	* prims.cc (_Jv_JVMPI_Notify_OBJECT_ALLOC): Declare.
- 	(_Jv_JVMPI_Notify_THREAD_END): Declare.
- 	(_Jv_JVMPI_Notify_THREAD_END): Declare.
- 
- 	* prims.cc (_Jv_AllocObject): Generate JVMPI object allocation
- 	events.
- 
- 	* java/lang/natThread.cc: Include JVMPI headers if necessary.
- 	(finish_): Generate JVMPI thread end events.
- 	(run_): Generate JVMPI thread start events.
- 	* gnu/gcj/runtime/natFirstThread.cc (run): Call JNI_OnLoad for any
- 	preloaded JNI library.
- 	Include JVMPI headers if necessary.
- 	(run): Generate JVMPI thread start events.
- 
- 	* boehm.cc: Define GC_disable and GC_enable.
- 	(_Jv_DisableGC): New function.
- 	(_Jv_EnableGC): New function.
- 	(disable_gc_mutex): Declare.
- 	* nogc.cc (_Jv_DisableGC): New function.
- 	(_Jv_EnableGC): New function.
- 
- 	* jni.cc (_Jv_JNI_GetEnv): Handle JVMPI interface requests.
- 	(_Jv_JVMPI_Interface): Define.
- 	(jvmpiEnableEvent): New function.
- 	(_Jv_JNI_Init): Initialize _Jv_JVMPI_Interface.
- 
- 	* include/jvmpi.h: New file.
- 
- 2000-03-27  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* Makefile.in: New #defines and friends for Thread.h.
- 	* Makefile.am: Ditto.
- 	* posix-threads.cc: (struct starter): Remove `object'.
- 	(_Jv_CondWait): Use interruptable condition variables and new
- 	recursive mutexes. New return codes on interrupt or non-ownership
- 	of mutex.
- 	(_Jv_CondNotify): Ditto.
- 	(_Jv_CondNotifyAll): Ditto.
- 	(_Jv_ThreadInterrupt): Set thread interrupt flag directly. Interrupt
- 	the target thread by signaling its wait condition.
- 	(_Jv_ThreadInitData): Set `thread_obj' in the thread data struct,
- 	not the starter struct. Initialize wait_mutex and wait_cond.
- 	(_Jv_MutexLock): New recursive mutex implementation. Moved from
- 	posix-threads.h.
- 	(_Jv_MutexUnlock): Ditto.
- 	(really_start): Set info->data->thread from pthread_self() to work
- 	around a race condition. Destroy wait_mutex and wait_cond when run()
- 	returns.
- 	* java/lang/Thread.java: (isInterrupted_): Renamed to overloaded
- 	`isInterrupted(boolean)'. Clear interrupted flag if clear_flag is
- 	set.
- 	startable_flag: New private field.
- 	(Thread): Initialize `startable_flag'.
- 	(toString): Check for null thread group.
- 	* java/lang/natThread.cc: (struct natThread): New fields
- 	`join_mutex', `join_cond'. Removed fields `joiner', `next'.
- 	(class locker): Removed.
- 	(initialize_native): Initialize `join_cond' and `join_mutex'.
- 	(interrupt): Now just calls _Jv_ThreadInterrupt().
- 	(join): Simplified. Just wait on the target thread's join condition.
- 	(finish_): Remove join list code. Unset thread group. Signal
- 	potential joiners by notifying the dying threads join_cond.
- 	(start): Check for illegal restarts.
- 	* java/lang/natObject.cc: Check for return value of _Jv_CondWait and
- 	act appropriatly.
- 	* include/posix-threads.h: Remove all HAVE_RECURSIVE_MUTEX related
- 	#defines and #ifdefs.
- 	(struct _Jv_Thread_t): New fields `thread_obj', `wait_cond',
- 	`wait_mutex', `next'.
- 	(struct _Jv_ConditionVariable_t): Define as a struct instead of
- 	directly mapping to pthread_cond_t.
- 	(struct _Jv_Mutex_t): New recursive implementation.
- 	(_Jv_PthreadCheckMonitor): Reimplemented. Simple `owner' check.
- 	_Jv_HaveCondDestroy: Never define this for posix-threads.
- 	(_Jv_CondNotify): Remove inline implementation(s), prototype instead.
- 	(_Jv_CondNotifyAll): Ditto.
- 	(_Jv_MutexLock): Ditto.
- 	(_Jv_MutexUnlock): Ditto.
- 	(_Jv_MutexInit): Changed to reflect new mutex implementation.
- 	(_Jv_MutexDestroy): Ditto.
- 	(_Jv_CondDestroy): Removed.
- 	(_Jv_PthreadGetMutex): Removed.
- 	* include/win32-threads.h: (_Jv_CondNotify): Guess _JV_NOT_OWNER on an
- 	error. Add a FIXME about this.
- 	(_Jv_CondNotifyAll): Ditto.
- 	* win32-threads.cc: (_Jv_CondWait): Return 0 on a timeout. Guess
- 	_JV_NOT_OWNER on other errors. Add FIXME.
- 
- 2000-03-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* jni.cc (_Jv_JNI_PopSystemFrame): If environment has exception
- 	set, throw it.
- 	(call): Don't throw exception here.
- 
- 2000-03-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/mprec.h: Use SIZEOF_VOID_P.
- 	* interpret.cc: Use SIZEOF_VOID_P.
- 	* include/java-cpool.h (_Jv_storeLong): Use SIZEOF_VOID_P.
- 	(_Jv_loadLong): Likewise.
- 	(_Jv_storeDouble): Likewise.
- 	* configure: Rebuilt.
- 	* configure.in: Check size of void*.
- 
- 	* resolve.cc (ncode): Use FFI_PREP_RAW_CLOSURE and FFI_RAW_SIZE.
- 
- 2000-03-26  Hans Boehm  <boehm@acm.org>
- 
- 	* include/java-cpool.h (_Jv_storeLong, _Jv_loadLong,
- 	_Jv_storeDouble, _Jv_loadDouble): Define differently on 64 bit
- 	machine.
- 	* java/lang/ieeefp.h: Define __IEEE_BIG_ENDIAN or
- 	__IEEE_LITTLE_ENDIAN appropriately on IA64.
- 	* java/lang/mprec.h: Don't define Pack_32 on 64 bit machine.
- 	* javaprims.h (_Jv_word): Added `l' and `d' entries in 64 bit
- 	case.
- 	* resolve.cc (FFI_PREP_RAW_CLOSURE): New define.
- 	(FFI_RAW_SIZE): Likewise.
- 	(_Jv_InterpMethod::ncode): Use them.
- 	* interpret.cc (PUSHL, PUSHD, POPL, POPD, LOADL, LOADD, STOREL,
- 	STORED): Define differently on a 64 bit machine.
- 	(continue1): Use ffi_java_raw_call when appropriate.
- 
- 2000-03-24  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/math/BigInteger.java(divide): Handle the special case when
- 	dividing by 1 and the high bit of the dividend is set.
- 	(setShiftRight): Handle case when count == 0.
- 
- 2000-03-24  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/awt/Font.java(isBold): Fix syntax error.
- 	(isItalic): ditto.
- 	* java/awt/Frame.java(postEvent): ditto.
- 	* java/awt/Menu.java(postEvent): ditto.
- 	* java/awt/MenuBar.java(postEvent): ditto.
- 	* java/awt/Toolkit.java(init): Included a stub.
- 
- 2000-03-21  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/awt/Event.java: Add all the event type constants.
- 	(Event): Implemented constructors.
- 	(controlDown): Implemented.
- 	(metaDown): Implemented.
- 	(paramString): Stubbed.
- 	(shiftDown): Implemented.
- 	(toString): Implemented.
- 	(translate): Implemented.
- 
- 2000-03-21  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/natClass.cc (isInstance): Initialize `this'.
- 	(isAssignableFrom): Initialize `this' and `klass'.
- 	(_Jv_IsAssignableFrom): If an interface has no idt, it is not
- 	implemented by any loaded class, so return false.
- 	* java/lang/natClass.cc (isInstance): Use _Jv_IsAssignableFrom(),
- 	not Class.isAssignableFrom(). Use JV_CLASS, not getClass().
- 
- 2000-03-19  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/awt/Color.java: Specified java.io for Serializable.
- 	* java/awt/Toolkit.java: Imported java.net.URL.
- 
- 2000-03-19  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/awt/Color.java: Rewrote to be more memory efficient (& compile).
- 
- 2000-03-16  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/awt/Color.java: New file.
- 	* java/awt/Graphics.java: New file.
- 	* java/awt/Image.java: New file.
- 	* java/awt/Paint.java: New file.
- 	* java/awt/PaintContext.java: New file.
- 	* java/awt/Transparency.java: New file.
- 	* java/util/Collection.java: New file.
- 	* java/util/Comparator.java: New file.
- 	* java/util/Iterator.java: New file.
- 	* java/util/List.java: New file.
- 	* java/util/ListIterator.java: New file.
- 	* Makefile.am: Added above new files.
- 	* Makefile.in: Rebuilt.
- 
- 	* java/awt/Font.java (PLAIN): New field.
- 	(BOLD): New field.
- 	(ITALIC): New field.
- 	(ROMAN_BASELINE): New field.
- 	(CENTER_BASELINE): New field.
- 	(HANGING_BASELINE): New field.
- 	(name): New field.
- 	(style): New field.
- 	(size): New field.
- 	(pointSize): New field.
- 	(Font): Implemented constructor.
- 	(isPlain): Implemented method.
- 	(isBold): Implemented method.
- 	(isItalic): Implemented method.
- 	(getName): Implemented method.
- 	(getStyle): Implemented method.
- 	(getSize): Implemented method.
- 	(getSize2D): Implemented method.
- 	(decode): Stubbed.
- 	* java/awt/Frame.java (getFont): Stubbed.
- 	(postEvent): Stubbed.
- 	(remove): Stubbed.
- 	* java/awt/Menu.java (postEvent): Stubbed.
- 	* java/awt/MenuBar.java (getFont): Stubbed.
- 	(postEvent): Stubbed.
- 	* java/awt/Toolkit.java (getImage): Added abstract method.
- 
- 2000-03-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/natFileDescriptorWin32.cc (winerr): Now static.
- 
- 	* prims.cc (win32_exception_handler): Reformatted.
- 
- 	* include/win32-threads.h (_Jv_HaveCondDestroy): New define.
- 	(_Jv_HaveMutexDestroy): Likewise.
- 
- 2000-03-15 Jon Beniston <jb7216@bristol.ac.uk>
- 
- 	* java/io/natFileDescriptorWin32.cc: New file.
- 	* java/io/natFileWin32.cc: New file.
- 	* java/net/natInetAddress.cc: Added conditional inclusion of
- 	Windows / Winsock headers.
- 	* java/net/natPlainDatagramSocketImpl.cc: Added conditional
- 	inclusion of Windows / Winsock headers.
- 	* java/net/natPlainSocketImpl.cc: Added conditional inclusion of
- 	Windows / Winsock headers.
- 	* include/win32-signal.h: New file.
- 	* include/win32-threads.h: New file.
- 	* win32-threads.cc: New file.
- 	* exception.cc (win32_get_restart_frame): New function.
- 	* prims.cc (win32_exception_handler): New function.
- 	(main_init) Performs Winsock initialisation.
- 	(main_init) Installs exeception handler.
- 
- 2000-03-14  Tom Tromey  <tromey@cygnus.com>
- 
- 	* jni.cc (mangled_name): Fixed assertion.
- 	(JNI_GetCreatedJavaVMs): Don't comment out `buf_len' argument;
- 	turned assert into actual failure.
- 
- 2000-03-09  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/security/Key.java(serialVersionUID): Set to 0 for now.
- 	* java/security/interfaces/DSAPrivateKey.java(serialVersionUID): Ditto.
- 	* java/security/interfaces/DSAPublicKey.java(serialVersionUID): Ditto.
- 
- 2000-03-09  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/security/AlgorithmParameterGeneratorSpi.java: New file.
- 	* java/security/DigestException.java: New file.
- 	* java/security/GeneralSecurityException.java: New file.
- 	* java/security/InvalidAlgorithmParameterException.java: New file.
- 	* java/security/InvalidKeyException.java: New file.
- 	* java/security/InvalidParameterException.java: New file.
- 	* java/security/Key.java: New file.
- 	* java/security/KeyException.java: New file.
- 	* java/security/KeyPair.java: New file.
- 	* java/security/KeyPairGenerator.java: New file.
- 	* java/security/KeyPairGeneratorSpi.java: New file.
- 	* java/security/NoSuchProviderException.java: New file.
- 	* java/security/PrivateKey.java: New file.
- 	* java/security/Provider.java: New file.
- 	* java/security/PublicKey.java: New file.
- 	* java/security/SecureRandom.java: New file.
- 	* java/security/Security.java: New file.
- 	* java/security/Signature.java: New file.
- 	* java/security/SignatureException.java: New file.
- 	* java/security/interfaces/DSAKey.java: New file.
- 	* java/security/interfaces/DSAParams.java: New file.
- 	* java/security/interfaces/DSAPrivateKey.java: New file.
- 	* java/security/interfaces/DSAPublicKey.java: New file.
- 	* java/security/interfaces/RSAPrivateCrtKey.java: New file.
- 	* java/security/interfaces/RSAPrivateKey.java: New file.
- 	* java/security/interfaces/RSAPublicKey.java: New file.
- 	* java/security/spec/AlgorithmParameterSpec.java: New file.
- 	* java/security/spec/InvalidKeySpecException.java: New file.
- 	* java/security/spec/InvalidParameterSpecException.java: New file.
- 	* java/security/spec/KeySpec.java: New file.
- 	* java/security/spec/RSAPrivateCrtKeySpec.java: New file.
- 	* java/security/spec/RSAPrivateKeySpec.java: New file.
- 	* java/security/spec/RSAPublicKeySpec.java: New file.
- 	* Makefile.am: Added above java.security files.
- 	* Makefile.in: Rebuilt.
- 
- 	* java/security/MessageDigest.java: Rewritten.
- 	* java/security/SecureClassLoader.java: Added JDK1.2 comment.
- 
- 2000-03-09  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* README: Updated.
- 
- 2000-03-09  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Call
- 	_Jv_PrepareConstantTimeTables.
- 	* java/lang/natClass.cc (_Jv_PrepareConstantTimeTables): Array
- 	classes should have an IDT, so don't return if klass is an array
- 	class.
- 
- 2000-03-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/natArray.cc (newInstance): Don't allow array
- 	of `void' to be created.
- 
- 2000-03-08  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/math/BigInteger.java(signum): Handle zero properly.
- 
- 2000-03-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* All files: Updated copyright information.
- 	* COPYING: New file.
- 	* COPYING.LIB: Removed.
- 	* LIBGCJ_LICENSE: We now use GPL + special exception.
- 
- 2000-03-07  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* resolve.cc (_Jv_SearchMethodInClass): New function.
- 	(_Jv_ResolvePoolEntry): Search superinterfaces for interface methods.
- 	* java/lang/Class.h (_Jv_SearchMethodInClass): New prototype.
- 
- 2000-03-07  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/lang/Class.h (union _Jv_IDispatchTable): New declaration.
- 	(struct _Jv_ifaces): New declaration.
- 	JV_CLASS: New macro definition.
- 	(getComponentType): Relocate below isArray() for inlining.
- 	(getModifiers): Declare `inline'.
- 	(getSuperclass): Ditto.
- 	(isArray): Ditto.
- 	(isPrimitive): Ditto.
- 	(_Jv_IsAssignableFrom): New prototype.
- 	(_Jv_LookupInterfaceMethodIdx): New prototype. Predeclare with "C"
- 	linkage.
- 	(_Jv_InitClass): Move from natClass.cc. Declare `inline'.
- 	Check for JV_STATE_DONE before invoking initializeClass().
- 	(_Jv_PrepareConstantTimeTables): New prototype.
- 	(_Jv_GetInterfaces): Ditto.
- 	(_Jv_GenerateITable): Ditto.
- 	(_Jv_GetMethodString): Ditto.
- 	(_Jv_AppendPartialITable): Ditto.
- 	(_Jv_FindIIndex): Ditto.
- 	depth, ancestors, idt: New class fields.
- 
- 	* java/lang/natClass.cc (isAssignableFrom): Move functionality to
- 	inline function `_Jv_IsAssignableFrom'. Use that function.
- 	(isInstance): Declare `inline'.
- 	(initializeClass): Get lock on class before checking `state'. Unlock
- 	before calling resolveClass0. Call _Jv_PrepareConstantTimeTables with
- 	the lock held.
- 	(_Jv_LookupInterfaceMethod): Use _Jv_GetMessageString.
- 	(_Jv_IsAssignableFrom): New inline function. Test assignability using
- 	class->depth and ancestor table.
- 	(_Jv_IsInstanceOf): Use _Jv_IsAssignableFrom.
- 	(_Jv_CheckCast): Move from prims.cc. Use JV_CLASS and
- 	_Jv_IsAssignableFrom.
- 	(_Jv_CheckArrayStore): Ditto.
- 	(_Jv_LookupInterfaceMethodIdx): New function.
- 	INITIAL_IOFFSETS_LEN, INITIAL_IFACES_LEN: New #defines.
- 	(_Jv_PrepareConstantTimeTables): New function.
- 	(_Jv_IndexOf): Ditto.
- 	(_Jv_GetInterfaces): Ditto.
- 	(_Jv_GenerateITable): Ditto.
- 	(_Jv_GetMethodString): Ditto.
- 	(_Jv_AppendPartialITable): Ditto.
- 	iindex_mutex, iindex_mutex_initialized: New static fields.
- 	(_Jv_FindIIndex): New function.
- 
- 	* java/lang/natClassLoader.cc (_Jv_NewClass): Set new jclass fields.
- 
- 	* prims.cc (_Jv_CheckCast): Moved to natClass.cc.
- 	(_Jv_CheckArrayStore): Ditto.
- 	(JvNewCharArray, JvNewBooleanArray, JvNewByteArray, JvNewShortArray,
- 	JvNewIntArray, JvNewLongArray, JvNewFloatArray, JvNewDoubleArray):
- 	Moved to gcj/array.h.
- 	(_Jv_Realloc): New function.
- 
- 	* gcj/cni.h: Move _Jv_PrimClass definitions to gcj/array.h.
- 
- 	* gcj/array.h: _Jv_PrimClass definitions moved from gcj/cni.h.
- 	(JvNewCharArray, JvNewBooleanArray, JvNewByteArray,
- 	JvNewShortArray, JvNewIntArray, JvNewLongArray, JvNewFloatArray,
- 	JvNewDoubleArray): Implementations moved from prims.cc and
- 	declared `inline'.
- 
- 	* gcj/javaprims.h (_Jv_Realloc): Prototype.
- 
- 	* include/jvm.h (_Jv_LookupInterfaceMethodIdx): Prototype.
- 
- 2000-03-06  Tom Tromey  <tromey@cygnus.com>
- 
- 	* jni.cc (MARK_NONE): New define.
- 	(MARK_USER): Likewise.
- 	(MARK_SYSTEM): Likewise.
- 	(struct _Jv_JNI_LocalFrame): Made `marker' bigger and `size'
- 	smaller.
- 	(_Jv_JNI_DeleteLocalRef): Use MARK_NONE in assert.
- 	(_Jv_JNI_EnsureLocalCapacity): Use MARK_NONE.
- 	(_Jv_JNI_PushLocalFrame): Use MARK_USER.
- 	(_Jv_JNI_PopLocalFrame): New version with additional `stop'
- 	argument.
- 	(call): Use MARK_SYSTEM.
- 	(_Jv_GetJNIEnvNewFrame): New function.
- 	(_Jv_LookupJNIMethod): New function.
- 	(_Jv_JNI_PopSystemFrame): New function.
- 	(call): Use _Jv_JNI_PopSystemFrame and _Jv_LookupJNIMethod.
- 
- 2000-03-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	Fix for PR libgcj/43:
- 	* include/Makefile.in: Rebuilt.
- 	* include/Makefile.am (include_HEADERS): New define.
- 
- 2000-03-05  Anthony Green  <green@redhat.com>
- 
- 	* gcj/javaprims.h ("Java"): Remove FirstThread.
- 
- 	* configure.host: Fix __NO_MATH_INLNES botch.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_source_files): Move natFirstThread.cc.
- 	(gnu/gcj/runtime/FirstThread.h): Moved.
- 	(ordinary_java_source_files): Move FirstThread.java.
- 	* prims.cc: Deal with FirstThread movement.
- 	(JvRunMain): Ditto.
- 	(_Jv_RunMain): Ditto.
- 
- 	* gnu/gcj/runtime/FirstThread.java: Moved from java/lang.
- 	* gnu/gcj/runtime/natFirstThread.cc: Ditto.
- 
- 2000-03-05  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/net/DatagramSocket.java(DatagramSocket(int,InetAddress)):
- 	  Handle null addresses.
- 
- 2000-03-04  Anthony Green  <green@redhat.com>
- 
- 	* configure.host (libgcj_flags): Define __NO_MATH_INLINES.
- 	See PR gcj/151.
- 
- 2000-03-04  Anthony Green  <green@redhat.com>
- 
- 	* configure: Rebuilt.
- 	* configure.in (ZLIBTESTSPEC): New macro.
- 	(GCTESTSPEC): New macro.
- 	(LIBGCJTESTSPEC): New macro.
- 	* libgcj-test.spec.in: New file.
- 
- 2000-03-02  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-interp.h: Don't include MethodInvocation.h.
- 	(class _Jv_InterpMethod): Don't make MethodInvocation a friend.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (gnu/gcj/runtime/MethodInvocation.h): Removed.
- 	(ordinary_java_source_files): Don't mention
- 	MethodInvocation.java.
- 	* gnu/gcj/runtime/MethodInvocation.java: Removed.
- 	* interpret.cc (MethodInvocation::continue1): Removed.
- 	(run): Handle exceptions here.
- 	* java/lang/ClassLoader.java (defineClass1, defineClass2):
- 	Removed.
- 	* java/lang/natClassLoader.cc (defineClass0): Catch exceptions
- 	here.
- 	(defineClass2): Removed.
- 
- 	* java/lang/reflect/Method.java (hack_trampoline, hack_call):
- 	Removed.
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Catch
- 	exceptions here.
- 	(hack_call): Removed.
- 
- 	* java/lang/Class.h (Class): Removed hackRunInitializers,
- 	hackTrampoline.
- 	* java/lang/natClass.cc (hackRunInitializers): Removed.
- 	(initializeClass): Catch exceptions here.
- 	Include ExceptionInInitializerError.h.
- 	* java/lang/Class.java (hackTrampoline, hackRunInitializers):
- 	Removed.
- 
- 	* java/lang/Object.h (Object): Don't mention hack12_6.
- 	* java/lang/natObject.cc (_Jv_FinalizeObject): Catch exceptions
- 	here.
- 	* java/lang/Object.java (hack12_6): Removed.
- 
- 	* java/lang/natThread.cc (run_): Renamed.  Catch exceptions here.
- 	(start): Use run_, not run__.
- 	* java/lang/Thread.java (run_): Renamed from run__; old run_
- 	removed.
- 
- 	* jni.cc (_Jv_JNI_FindClass): Handle exceptions.
- 	(_Jv_JNI_EnsureLocalCapacity): Likewise.
- 	(_Jv_JNI_DefineClass): Likewise.
- 	(_Jv_JNI_ThrowNew): Likewise.
- 	(_Jv_JNI_AllocObject): Likewise.
- 	(_Jv_JNI_GetAnyMethodID): Likewise.
- 	(_Jv_JNI_CallAnyMethodV): Likewise.
- 	(_Jv_JNI_CallAnyMethodA): Likewise.
- 	(_Jv_JNI_CallAnyVoidMethodV): Likewise.
- 	(_Jv_JNI_CallAnyVoidMethodA): Likewise.
- 	(_Jv_JNI_GetAnyFieldID): Likewise.
- 	(_Jv_JNI_NewString): Likewise.
- 	(_Jv_JNI_NewStringUTF): Likewise.
- 	(_Jv_JNI_GetStringUTFChars): Likewise.
- 	(_Jv_JNI_NewObjectArray): Likewise.
- 	(_Jv_JNI_NewPrimitiveArray): Likewise.
- 	(_Jv_JNI_GetPrimitiveArrayRegion): Likewise.
- 	(_Jv_JNI_GetStringRegion): Likewise.
- 	(_Jv_JNI_GetStringUTFRegion): Likewise.
- 	(_Jv_JNI_SetPrimitiveArrayRegion): Likewise.
- 	(_Jv_JNI_MonitorEnter): Likewise.
- 	(_Jv_JNI_MonitorExit): Likewise.
- 	(_Jv_JNI_ToReflectedField): Likewise.
- 	(_Jv_JNI_ToReflectedMethod): Likewise.
- 	(_Jv_JNI_RegisterNatives): Likewise.
- 	(_Jv_JNI_AttachCurrentThread): Likewise.
- 	(_Jv_JNI_DestroyJavaVM): Likewise.
- 
- 2000-02-28  Mo DeJong  <mdejong@cygnus.com>
- 
- 	* java/util/zip/ZipOutputStream.java(closeEntry) : Fixed
- 	error caused by the incorrect casting of a long to an int.
- 
- 2000-02-28  Mo DeJong  <mdejong@cygnus.com>
- 
- 	* java/util/zip/ZipOutputStream.java(write_entry) : Fixed
- 	SIGSEV caused by use of the wrong instance variable.
- 
- 2000-02-27  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/io/File.java (File(String, String)): For dirPath, treat an
- 	empty String the same as `null'.
- 
- 2000-02-26  Anthony Green  <green@cygnus.com>
- 
- 	* gnu/gcj/io/MimeTypes.java: Test for null.
- 
- 	* jni.cc (_Jv_JNI_AttachCurrentThread): Minor cleanup.
- 	(JNI_GetCreatedJavaVMs): Remove compiler warning.
- 
- 	* java/net/URLConnection.java: Update copyright notice.
- 
- 2000-02-25  Tom Tromey  <tromey@cygnus.com>
- 
- 	* jni.cc (_Jv_JNI_RegisterNatives): Conditionalize body on
- 	`INTERPRETER'.
- 
- 2000-02-25  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/net/URLConnection.java (initializeDateFormats): New
- 	private method.
- 	(getHeaderFieldDate): Call initializeDateFormats if required.
- 	locale, dateFormat1, dateFormat2, dateFormat3: Don't initialize
- 	these.
- 	Fix for PR libgcj/38.
- 
- 2000-02-24  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/math/BigInteger.java(ival): Made private.
- 	(words): Ditto.
- 	(neg): Ditto.
- 
- 2000-02-20  Anthony Green  <green@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (ordinary_java_source_files): Add
- 	gnu/gcj/io/DefaultMimeTypes.java and gnu/gcj/io/MimeTypes.java
- 
- 	* scripts/MakeDefaultMimeTypes.java: New file.
- 	* scripts/mime.types: New file.
- 	* scripts/classes.pl: Moved from top level.
- 	* classes.pl: Moved to scripts directory.
- 
- 	* java/net/URLConnection.java: Implement guessContentTypeFromName.
- 
- 	* gnu/gcj/io/MimeTypes.java: New file.
- 	* gnu/gcj/io/DefaultMimeTypes.java: New file.
- 
- 2000-02-20  Tom Tromey  <tromey@cygnus.com>
- 
- 	* boehm.cc (_Jv_AllocBytes): Clear returned memory.
- 
- 2000-02-19  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* java/util/zip/ZipEntry.java (setCrc): Fix overflow.
- 	(setSize): ditto.
- 
- 2000-02-18  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/jvm.h (_Jv_GetJavaVM): Declare.
- 	* include/java-interp.h (_Jv_GetFirstMethod): New function.
- 	(_Jv_MethodBase::get_method): New method.
- 	(_Jv_JNIMethod::set_function): New method.
- 	* jni.cc (_Jv_JNI_UnregisterNatives): New function.
- 	(_Jv_JNI_RegisterNatives): New function.
- 	(_Jv_JNIFunctions): Updated for new functions.
- 	(_Jv_GetJavaVM): New function.
- 	(_Jv_JNI_GetJavaVM): Use it.  Now static.
- 	(_Jv_JNI_AttachCurrentThread): Create a new JNIEnv if this thread
- 	is already a Java thread but does not have a JNIEnv yet.
- 
- 	* java/lang/natRuntime.cc (_load): Pass the JavaVM to the onload
- 	function.
- 
- 2000-02-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* gcj/field.h (_Jv_Field::getClass): Don't use JvAssert.
- 	Fixes PR gcj/152.
- 
- 2000-02-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	* jni.cc (_Jv_JNI_CallStaticMethodV): Added some assertions.
- 
- 	* jni.cc (_Jv_JNI_NewObjectV): Corrected assertion.
- 	(_Jv_JNI_NewObject): Likewise.
- 	(_Jv_JNI_NewObjectA): Likewise.
- 	(_Jv_JNI_CallAnyMethodV): In constructor case, pass correct value
- 	as "return" type to _Jv_CallAnyMethodA.
- 	(_Jv_JNI_CallAnyMethodA): Likewise.
- 	(_Jv_JNI_CallAnyVoidMethodV): Likewise.
- 
- 	* jni.cc (_Jv_JNI_FindClass): Use ClassLoader.loadClass, not
- 	findClass.
- 
- 2000-02-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* resolve.cc (ncode): Set args_raw_size.  Compute jni_cif and
- 	jni_arg_types.
- 	(init_cif): Added `rtype_p' argument.
- 	* include/java-interp.h (class _Jv_MethodBase): Added
- 	args_raw_size.
- 	(class _Jv_InterpMethod): Removed args_raw_size.
- 	(class _Jv_JNIMethod): Added jni_cif and jni_arg_types fields.
- 	* jni.cc (call): Pass JNIEnv and (for static methods only) the
- 	class pointer as well as the ordinary arguments.
- 
- 	* jni.cc (mangled_name): Skip leading `(' in signature.
- 
- 	* jni.cc (add_char): Added missing `else'.
- 
- 	* jni.cc (_Jv_JNI_AttachCurrentThread): Return error if malloc
- 	fails.
- 
- 2000-02-15  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* NEWS: Updated.
- 
- 	* java/lang/natRuntime.cc (_load): Include library path with
- 	exception message.
- 
- 	* java/lang/natSystem.cc (init_properties): set java.lang.classpath
- 	property.
- 
- 	* java/lang/natThread.cc (dumpStack): Removed.
- 	* java/lang/Thread.java (dumpStack): Implemented.
- 
- 2000-02-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natRuntime.cc (_load): On Unix, prefix library name
- 	with `lib' for loadLibrary.  Fixes PR gcj/150.
- 
- 2000-02-14  Warren Levy  <warrenl@cygnus.com>
- 
- 	* gnu/gcj/math/MPN.java(findLowestBit): Made methods public.
- 
- 	* java/math/BigInteger.java(BigInteger(int,int,java.util.Random):
- 	  New constructor.
- 	(min): Implemented.
- 	(max): Implemented.
- 	(modPow): Rewritten to not use the naive, slow, brute force approach.
- 	(isProbablePrime): Implemented.
- 	(testBit): Implemented.
- 	(flipBit): Implemented.
- 	(getLowestSetBit): Implemented.
- 
- 2000-02-16  Anthony Green  <green@redhat.com>
- 
- 	* configure.host: Use the same options for i386 and i486 as we do
- 	for i586 and i686.
- 
- 2000-02-12  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/File.java (createTempFile): Use low bits from counter,
- 	not high bits.
- 
- Fri Feb 11 19:48:08 2000  Anthony Green  <green@cygnus.com>
- 
- 	* THANKS: More thanks.
- 
- 2000-02-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* interpret.cc (continue1): Use STOREA, not STOREI, to implement
- 	astore instruction.  From Hans Boehm.
- 
- 2000-02-11  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/math/BigInteger.java(BigInteger(String, int)): New constructor.
- 	(BigInteger(String)): New constructor.
- 	(not): Rewritten using version from Kawa's BitOps class.
- 	(valueOf): New private methods from Kawa's BitOps class.
- 	(swappedOp): ditto.
- 	(bitOp): ditto.
- 	(setBitOp): ditto.
- 	(and): Implemented.
- 	(or): Implemented.
- 	(xor): Implemented.
- 	(andNot): Implemented.
- 	(clearBit): Implemented.
- 	(setBit): Implemented.
- 	(bitCount): Implemented.
- 	(toByteArray): Implemented.
- 
- 2000-02-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/File.java (nextValue): Now synchronized.
- 
- 2000-02-10  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/natFileDescriptorPosix.cc (open): Recognize EXCL flag.
- 	* java/io/FileDescriptor.java (EXCL): New static field.
- 	* java/io/File.java (tmpdir): New static field.
- 	(createTempFile): New method.
- 	(nextValue): New method.
- 	* java/lang/natSystem.cc (init_properties): Set java.io.tmpdir
- 	property.
- 
- 	* include/jni.h (JNI_FALSE): Renamed from JNI_TRUE; oops.
- 	(jboolean): Declare as an attributed int, not a bool.
- 	(_Jv_func): Declare differently for C.
- 
- 	* gnu/gcj/jni/natNativeThread.cc: New file.
- 	* gnu/gcj/jni/NativeThread.java: New file.
- 	* java/lang/Thread.java (data): Now a RawData.
- 	* include/jvm.h (_Jv_GetCurrentJNIEnv, _Jv_SetCurrentJNIEnv):
- 	Declare.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (java/lang/Thread.h): New target.
- 	(ordinary_java_source_files): Added NativeThread.java.
- 	(nat_source_files): Added natNativeThread.cc.
- 	* java/lang/natThread.cc: Include <jni.h>
- 	(struct natThread): Added `jni_env' field.
- 	(_Jv_GetCurrentJNIEnv): New function.
- 	(_Jv_SetCurrentJNIEnv): Likewise.
- 	(initialize_native): Initialize jni_env.
- 	Include RawData.h.
- 	* jni.cc (ThreadGroupClass): New define.
- 	(_Jv_JNI_InvokeFunctions): New structure.
- 	(JNI_GetCreatedJavaVMs): New function.
- 	(the_vm): New global.
- 	(JNI_GetDefaultJavaVMInitArgs): New function.
- 	Include NativeThread.h.
- 	(NativeThreadClass): New define.
- 	(_Jv_JNI_EnsureLocalCapacity): Return JNI_ERR, not -1.
- 	(_Jv_JNI_DestroyJavaVM): New function.
- 	(_Jv_JNI_AttachCurrentThread): New function.
- 	(_Jv_JNI_DetachCurrentThread): New function.
- 	(_Jv_JNI_GetEnv): New function.
- 	(JNI_CreateJavaVM): New function.
- 	(_Jv_JNI_GetJavaVM): New function.
- 	(_Jv_JNIFunctions): Added entry for GetJavaVM.
- 	* include/jni.h (JavaVMAttachArgs): New structure.
- 	(JNI_EDETACHED): New define.
- 	(JNI_EVERSION): Likewise.
- 	(JavaVM): Define properly.
- 	(struct JNIInvokeInterface): New structure.
- 	(class _Jv_JavaVM): New class.
- 	(JNI_OnLoad, JNI_OnUnload): Declare.
- 	(JNI_GetDefaultJavaVMInitArgs, JNI_CreateJavaVM,
- 	JNI_GetCreatedJavaVMs): Declare.
- 	(JavaVMInitArgs): New typedef.
- 	(JavaVMOption): Likewise.
- 	(JNI_ERR): New define.
- 	(JNI_OK): Likewise.
- 
- 2000-02-10  Andrew Haley  <aph@cygnus.com>
- 
- 	* interpret.cc: Don't include fdlibm.h.
- 	Replace #if with #ifdef throughout.
- 	Declare extern __ieee754_fmod.
- 	(continue1): Remove op_getfield, op_getstatic, op_putfield,
- 	op_putstatic insns.
- 	* resolve.cc (_Jv_PrepareClass): Use imeth as method pointer.
- 	Search class hierarchy for superclass vtable.
- 
- 	* java/lang/natClassLoader.cc (_Jv_UnregisterClass): Don't fall
- 	off the end of a pointer list.
- 
- 	* java/lang/natThread.cc (stop): Don't abort, throw an exception
- 	instead.
- 	(suspend): Ditto.
- 
- 2000-02-09  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natRuntime.cc (_load): Call add_library.
- 	(loadLibraryInternal): Likewise.
- 
- 	* gnu/gcj/convert/natIconv.cc (Input_iconv::finalize): Call
- 	iconv_close when handle is not NULL.  Thanks to Andrew Haley.
- 	(Output_iconv::finalize): Likewise.
- 
- 2000-02-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/Properties.java (setProperty): New method.
- 	(store): New method.
- 
- 2000-02-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Runtime.java (_load): Declare.
- 	(load, loadLibrary): Wrote in terms of _load.
- 	* java/lang/natRuntime.cc (load): Call JNI_OnLoad if it appears in
- 	library.
- 	(loadLibrary): Likewise.
- 	Include <jni.h>.
- 	(_load): New method.
- 	(loadLibrary, load): Removed.
- 
- 	* jni.cc (ThrowableClass): New define.
- 	(_Jv_JNI_Throw): Check argument.
- 	(_Jv_JNI_ThrowNew): Likewise.
- 	(wrap_value): Don't wrap object if it is NULL.
- 	(_Jv_JNI_DefineClass): Use wrap_value.
- 	(_Jv_JNI_FindClass): Likewise.
- 	(_Jv_JNI_GetSuperclass): Likewise.
- 	(_Jv_JNI_ExceptionOccurred): Likewise.
- 	(_Jv_JNI_AllocObject): Likewise.
- 	(_Jv_JNI_GetObjectClass): Likewise.
- 	(_Jv_JNI_NewString): Likewise.
- 	(_Jv_JNI_NewStringUTF): Likewise.
- 	(_Jv_JNI_NewObjectArray): Likewise.
- 	(_Jv_JNI_GetObjectArrayElement): Likewise.
- 	(_Jv_JNI_NewPrimitiveArray): Likewise.
- 	(_Jv_JNI_ToReflectedField): Likewise.
- 	(_Jv_JNI_ToReflectedMethod): Likewise.
- 	(_Jv_JNI_AllocObject): Check argument.
- 	(_Jv_JNI_NewObjectV): Likewise.
- 	(_Jv_JNI_NewObject): Likewise.
- 	(_Jv_JNI_NewObjectA): Likewise.
- 	(_Jv_JNI_GetObjectClass): Likewise.
- 	(_Jv_JNI_GetField): Likewise.
- 	(_Jv_JNI_SetField): Likewise.
- 
- 	* interpret.cc (PUSHL): Don't use expression statement.
- 	(PUSHD): Likewise.
- 	(LOADL): Likewise.
- 	(STOREL): Likewise.
- 
- 	* jni.cc (add_char): Conditional on INTERPRETER.
- 	(mangled_name): Likewise.
- 	(call): Likewise.
- 	* include/java-interp.h (class _Jv_MethodBase): Conditional on
- 	INTERPRETER.
- 	(class _Jv_JNIMethod): Likewise.
- 
- 2000-02-04  Warren Levy  <warrenl@cygnus.com>
- 
- 	* Makefile.am: Added MPN.java and BigInteger.java.
- 	* Makefile.in: Rebuilt.
- 	* gnu/gcj/math/MPN.java: New file.  From Kawa by Per Bothner
- 	<per@bothner.com>.
- 	* java/math/BigInteger.java: New file.  Based primarily on
- 	Kawa's IntNum.java by Per Bothner <per@bothner.com>.
- 
- 2000-02-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* defineclass.cc (handleMethodsBegin): Allocate _Jv_MethodBase
- 	pointers.
- 	(handleMethodsEnd): Fixed error messages.  Create a _Jv_JNIMethod
- 	if the method is native.
- 	* resolve.cc (ncode): Don't handle native methods.
- 	(_Jv_JNIMethod::ncode): New method.
- 	(_Jv_PrepareClass): Handle native methods.
- 	* jni.cc (call): Renamed from _Jv_JNI_conversion_call.
- 	Include AbstractMethodError.h.
- 	(add_char): New function.
- 	(mangled_name): Likewise.
- 	* include/java-interp.h (class _Jv_JNIMethod): New class.
- 	(class _Jv_MethodBase): New class.
- 	(class _Jv_InterpMethod): Derive from _Jv_MethodBase.
- 	(_Jv_InterpClass): Changed `interpreted_methods' field to type
- 	`_Jv_MethodBase'.
- 
- 	* include/jvm.h (_Jv_FindSymbolInExecutable): Declare.
- 	* java/lang/natRuntime.cc (libraries_size, libraries_count,
- 	libraries): New globals.
- 	(add_library): New function.
- 	(_Jv_FindSymbolInExecutable): New function.
- 
- 	* java/lang/natClassLoader.cc (initiated_classes, loaded_classes):
- 	Now static.
- 
- 2000-02-04  Andrew Haley  <aph@cygnus.com>
- 
- 	* java/lang/Throwable.java (CPlusPlusDemangler): New class.
- 	(printStackTrace): Use a CPlusPlusDemangler to demangle names.
- 	* java/lang/natThrowable.cc (printRawStackTrace): Rename
- 	printStackTrace to printRawStackTrace.
- 
- 2000-02-03  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/util/Calendar.java (toString): New method.
- 	* java/util/SimpleTimeZone.java (clone): New method.
- 	(toString): New method.
- 	* java/util/TimeZone.java (clone): New method.
- 	* java/text/SimpleDateFormat.java (clone): New method.
- 	* java/text/NumberFormat.java (clone): New method.
- 	(equals): New method.
- 	* java/text/Format.java (clone): New method.
- 	* java/text/DateFormatSymbols.java (DateFormatSymbols): New
- 	constructor.
- 	(clone): New method.
- 	* java/text/DateFormat.java (clone): New method.
- 	* java/text/Collator.java (clone): New method.
- 
- 2000-02-03  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/io/PipedOutputStream.java (write(byte[], int, int)): New
- 	method.
- 
- 2000-02-01  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/java-interp.h (_Jv_JNI_conversion_call): Declare.
- 	* resolve.cc (ncode): Use _Jv_JNI_conversion_call when
- 	constructing the closure if the function is native.
- 	* jni.cc (_Jv_JNI_conversion_call): Now returns `void'.  No longer
- 	a template function, #if'd out, or static.
- 	Include <java-interp.h>.
- 
- 	* include/jni.h (class _Jv_JNIEnv): Corrected calls using `...'.
- 
- 	* include/jni.h (class _Jv_JNIEnv): Added all C++ inline methods.
- 
- 	* jni.cc (_Jv_JNI_PopLocalFrame): Leave loop when `n == NULL'.
- 	(_Jv_JNI_conversion_call): _Jv_JNI_PopLocalFrame will never leave
- 	`locals == NULL'.
- 	(wrap_value): New function.
- 	(_Jv_JNI_CallAnyMethodV): Use it.
- 	(_Jv_JNI_CallAnyMethodA): Likewise.
- 	(_Jv_JNI_GetField): Use wrap_value; removed specialized version.
- 	(_Jv_JNI_GetStaticField): Likewise.
- 
- 	* jni.cc (_Jv_JNI_GetField): Specialize for jobject.
- 	(_Jv_JNI_GetStaticField): Likewise.
- 
- 2000-01-31  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (_Jv_MallocUnchecked): New function.
- 	(main_init): Call _Jv_JNI_Init.
- 	* include/jvm.h (_Jv_MallocUnchecked): Declare.
- 	(_Jv_JNI_Init): Declare.
- 	* jni.cc: Include Hashtable.h, OutOfMemoryError.h, Integer.h,
- 	<string.h>.
- 	(_Jv_JNI_NewGlobalRef): New function.
- 	(_Jv_JNI_DeleteGlobalRef): New function.
- 	(_Jv_JNI_DeleteLocalRef): New function.
- 	(_Jv_JNI_conversion_call): Initialize and clear local reference
- 	frame.
- 	(_Jv_JNI_NewLocalRef): New function.
- 	(struct _Jv_JNI_LocalFrame): New structure.
- 	(_Jv_JNI_PushLocalFrame): New function.
- 	(_Jv_JNI_EnsureLocalCapacity): New function.
- 	(FRAME_SIZE): New define.
- 	(_Jv_JNI_GetStringChars): Mark string, not characters.
- 	(_Jv_JNI_ReleaseStringChars): Unmark string, not characters.
- 	(_Jv_JNI_GetPrimitiveArrayElements): Mark array, not elements.
- 	(_Jv_JNI_ReleasePrimitiveArrayElements): Unmark array, not
- 	elements.
- 	(_Jv_JNI_DefineClass): Make return value a local ref.
- 	(_Jv_JNI_FindClass): Likewise.
- 	(_Jv_JNI_GetSuperclass): Likewise.
- 	(_Jv_JNI_ExceptionOccurred): Likewise.
- 	(_Jv_JNI_AllocObject): Likewise.
- 	(_Jv_JNI_GetObjectClass): Likewise.
- 	(_Jv_JNI_CallAnyMethodV): Likewise.
- 	(_Jv_JNI_NewString): Likewise.
- 	(_Jv_JNI_NewStringUTF): Likewise.
- 	(_Jv_JNI_NewObjectArray): Likewise.
- 	(_Jv_JNI_GetObjectArrayElement): Likewise.
- 	(_Jv_JNI_ToReflectedField): Likewise.
- 	(_Jv_JNI_ToReflectedMethod): Likewise.
- 	(_Jv_JNIFunctions): Updated table for new functions.
- 	(_Jv_JNI_Init): New function.
- 	(mark_for_gc): Wrote.
- 	(unmark_for_gc): Wrote.
- 	* include/jni.h (struct JNINativeInterface): Removed name from
- 	PopLocalFrame parameter.
- 	(class _Jv_JNIEnv): Added `locals' field.
- 
- Mon Jan 31 00:43:15 2000  Anthony Green  <green@redhat.com>
- 
- 	* gnu/gcj/convert/natIconv.cc (read): Minor fixes.
- 	(write): Ditto.
- 
- 2000-01-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* include/config.h.in: Rebuilt.
- 	* acconfig.h (HAVE_ICONV): Define.
- 	* configure: Rebuilt.
- 	* configure.in: Check for `iconv' function.
- 	* gnu/gcj/convert/BytesToUnicode.java (getDecoder): Try iconv if
- 	no specific encoder exists.
- 	* gnu/gcj/convert/UnicodeToBytes.java (getEncoder): Try iconv if
- 	no specific encoder exists.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (convert_source_files): Mention Input_iconv.java and
- 	Output_iconv.java.
- 	(nat_source_files): Added natIconv.cc.
- 	* gnu/gcj/convert/natIconv.cc: New file.
- 	* gnu/gcj/convert/Input_iconv.java: New file.
- 	* gnu/gcj/convert/Output_iconv.java: New file.
- 
- 2000-01-28  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (LIBFFIINCS): Added MULTIBUILDTOP.
- 
- 2000-01-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* gcj/method.h (JvNumMethods): Moved from Class.h.
- 	(JvGetFirstMethod): Likewise.
- 	* java/lang/Class.h (Object): Updated decl of
- 	_Jv_JNI_ToReflectedField.
- 	(Object): Added _Jv_JNI_ToReflectedMethod as a friend.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (java/lang/reflect/Field.h): Added `jboolean'
- 	argument of _Jv_JNI_ToReflectedField.
- 	(java/lang/reflect/Constructor.h): Added _Jv_JNI_ToReflectedMethod
- 	as a friend.
- 	(java/lang/reflect/Method.h): Likewise.
- 	* include/jni.h (class _Jv_JNIEnv): Added `klass' member.  Use
- 	__GCJ_JNI_IMPL__.
- 	(jweak): New typedef.
- 	(struct JNINativeInterface): Correctly declare remaining entries.
- 	* jni.cc: Include Class.h, ClassLoader.h.
- 	(_Jv_JNI_FindClass): New function.
- 	(_Jv_JNI_DefineClass): New function.
- 	(_Jv_JNI_conversion_call): New function.
- 	(_Jv_JNI_FindClass): Use current class loader to find class.
- 	(_Jv_JNI_ExceptionCheck): New function.
- 	(_Jv_JNI_FromReflectedField): Now static.
- 	(MethodClass): New define.
- 	(_Jv_JNI_FromReflectedMethod): New function.
- 	(_Jv_JNI_ToReflectedMethod): Likewise.
- 	Include Method.h.
- 	(_Jv_JNI_IsAssignableFrom): Renamed.
- 	(_Jv_JNI_GetStringRegion): New function.
- 	Include StringIndexOutOfBoundsException.h.
- 	(_Jv_JNI_GetStringUTFRegion): New function.
- 	(_Jv_JNIFunctions): Updated for new functions.
- 	(_Jv_JNI_GetPrimitiveArrayCritical): New function
- 	(_Jv_JNI_ReleasePrimitiveArrayCritical): Likewise.
- 	(_Jv_JNI_GetStringCritical): New function.
- 	(_Jv_JNI_ReleaseStringCritical): Likewise.
- 	(get_throwable): Removed.
- 	(GCJ_JV_JNIENV_FRIEND): Removed.
- 	(__GCJ_JNI_IMPL__): Define.
- 	Include method.h.
- 
- 	* resolve.cc (get_ffi_type_from_signature): Handle case where
- 	boolean is an int.
- 
- Tue Jan 25 08:51:16 2000  Tom Tromey  <tromey@ferrule.cygnus.com>
- 
- 	* interpret.cc (run): Don't call println.
- 	Don't include PrintStream.h.
- 
- 	* gcj/field.h (struct _Jv_Field): Use "jshort" as type for
- 	nameIndex.  Use "jint" as type for boffset.
- 	* java/lang/Class.h (struct _Jv_Method): Made accflags a
- 	_Jv_ushort.
- 	(Class): Likewise.  Also changed type of method_count,
- 	vtable_method_count, size_in_bytes, field_count,
- 	static_field_count, interface_count.
- 	* gcj/array.h (__JArray): Made `length' a const jsize, not an
- 	int.
- 
- 2000-01-21  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/natConstructor.cc (newInstance): Use
- 	_Jv_CallAnyMethodA.
- 	* include/jvm.h: Declare _Jv_CallAnyMethodA.
- 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Renamed
- 	from _Jv_CallNonvirtualMethodA.  Changed interface; overloaded.
- 	Include <jni.h>.
- 	(COPY): Removed.
- 	(invoke): Use _Jv_CallAnyMethodA.
- 	(VAL): Redefined.
- 	* java/lang/Class.h (Class): Declare JvGetFirstStaticField,
- 	JvNumStaticFields, JvNumMethods, and JvGetFirstMethod as friend
- 	functions.
- 	(struct _Jv_Method): Added getNextMethod method.
- 	(JvNumMethods): New function.
- 	(JvGetFirstMethod): Likewise.
- 	* gcj/field.h (JvGetFirstStaticField): New function.
- 	(JvNumStaticFields): Likewise.
- 	(getNextField): Renamed from getNextInstanceField.
- 	(struct _Jv_Field): New method getClass.
- 	* jni.cc: Wrote many new functions.
- 	* include/jni.h (JNI_TRUE): Define.
- 	(JNI_FALSE): Likewise.
- 	(jobject, jclass, jstring, jarray, jthrowable, jobjectArray,
- 	jbyteArray, jshortArray, jintArray, jlongArray, jbooleanArray,
- 	jcharArray, jfloatArray, jdoubleArray): New typedefs.
- 	(jfieldID, jmethodID): Likewise.
- 	(JNI_COMMIT, JNI_ABORT): New defines.
- 	(JNINativeMethod): New struct.
- 	(struct JNINativeInterface): Correctly declared more entries.
- 	(class _Jv_JNIEnv): Added `ex' member.
- 	(JNI_VERSION_1_1): New define.
- 	(JNI_VERSION_1_2): Likewise.
- 
- 	* boehm.cc (_Jv_MarkObj): Use getNextField, not
- 	getNextInstanceField.
- 
- 2000-01-20  Tom Tromey  <tromey@cygnus.com>
- 
- 	* resolve.cc (StringClass): Removed.
- 	* defineclass.cc (StringClass): Removed.
- 
- 2000-01-19  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* NEWS: updated.
- 
- 2000-01-19  Tom Tromey  <tromey@cygnus.com>
- 
- 	* interpret.cc (PC_REGISTER_ASM): Removed.
- 
- 	* java/lang/natThrowable.cc: Don't use `#pragma implementation'.
- 	From Bryce McKinlay.
- 
- 	* All files: Updated copyright to reflect Cygnus purchase.
- 
- 2000-01-18  Bryce McKinlay <bryce@albatross.co.nz>
- 
- 	* configure: Rebuilt.
- 	* configure.in: Recognize --disable-interpreter.
- 
- 2000-01-18  Andrew Haley  <aph@cygnus.com>
- 
- 	* name-finder.cc (lookup): Check for dladdr function.
- 	acconfig.h (HAVE_DLADDR): Add.
- 	configure.in: Check for HAVE_DLADDR
- 	configure: Rebuilt.
- 	include/config.h.in:  Rebuilt.
- 
- 2000-01-17  Andrew Haley  <aph@cygnus.com>
- 
- 	* prims.cc (_Jv_RunMain): Set the name of this executable.
- 
- 2000-01-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natThrowable.cc (fillInStackTrace): Return `this' even
- 	when backtrace can't be computed.
- 
- 	* configure: Rebuilt.
- 	* configure.in: Fixed typo in AC_CONFIG_SUBDIRS call.
- 
- 	* java/lang/Runtime.java (loadLibraryInternal): Declare.
- 	* java/lang/natClassLoader.cc (_Jv_FindClass): Removed dead copy.
- 	(_Jv_FindClassInCache): Likewise.
- 	(_Jv_FindClass): Don't conditionalize body on INTERPRETER.
- 	(findSystemClass): Try to load class from compiled module.
- 	Include Runtime.h.
- 	* java/lang/natRuntime.cc (load): Use UTF-8 copy of filename.
- 	(loadLibrary): Likewise.
- 	(lt_preloaded_symbols): Define.
- 	(loadLibraryInternal): New method.
- 	* include/config.h.in: Rebuilt.
- 	* acconfig.h (USE_LTDL): Added.
- 	* Makefile.am (SUBDIRS): Added $(DIRLTDL).
- 	(INCLUDES): Added $(INCLTDL).
- 	(libgcj_la_DEPENDENCIES): Added $(LIBLTDL).
- 	(libgcj_la_LIBADD): Likewise.
- 	* aclocal.m4, configure: Rebuilt.
- 	* configure.in: Added libltdl support.
- 
- 2000-01-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* prims.cc (_Jv_PrimClass): Use `JV_STATE_NOTHING', not `0'.
- 
- 2000-01-14  Andrew Haley  <aph@cygnus.com>
- 
- 	* java/lang/natThrowable.cc: New file.
- 
- 	* java/lang/Throwable.java (fillInStackTrace): Make native.
- 	(printStackTrace): Call native method to do this.
- 	(Throwable): Call fillInStackTrace.
- 	(stackTrace): New variable.
- 
- 	* include/jvm.h: Add _Jv_ThisExecutable functions.
- 
- 	* prims.cc: (_Jv_execName): New variable.
- 	(catch_segv): Call fillInStackTrace.
- 	(catch_fpe): Ditto.
- 	(_Jv_ThisExecutable): New functions.
- 	(JvRunMain): Set the name of this executable.
- 
- 	* Makefile.am: Add java/lang/natThrowable.cc.
- 	Add name-finder.cc.
- 	* Makefile.in: Rebuilt.
- 
- 	* acconfig.h: Add HAVE_PROC_SELF_EXE.
- 
- 	* configure.in: Force link with __frame_state_for in
- 	FORCELIBGCCSPEC.  Add new checks for backtrace.
- 	* include/config.h.in: Rebuilt.
- 
- 	* name-finder.cc: New file.
- 	* include/name-finder.h: New file.
- 
- 2000-01-16  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/StringBuffer.java (StringBuffer): Don't special case
- 	null argument.
- 
- 2000-01-16  Jeff Sturm  <jsturm@sigma6.com>
- 
- 	* java/io/StreamTokenizer.java (nextToken): Avoid unread(TT_EOF).
- 
- 2000-01-13  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natClassLoader.cc (_Jv_FindClass): Register `loader',
- 	not system loader, as initiating loader.
- 
- 2000-01-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natSystem.cc (getpwuid_adaptor): New adaptor for
- 	HP/UX.  From David Scott Urban.
- 
- 2000-01-10  Jeff Sturm  <jsturm@sigma6.com>
- 
- 	* java/lang/natMath.cc (pow): Cast args to `double', not
- 	`jdouble'.
- 	(atan2): Likewise.
- 	(IEEEremainder): Likewise.
- 	* java/lang/mprec.h: Don't wrap includes in `extern "C"'.
- 	* java/lang/fdlibm.h: Don't wrap includes in `extern "C"'.
- 
- 2000-01-09  Anthony Green  <green@cygnus.com>
- 
- 	* java/lang/natString.cc (init): Test for overflow condition
- 	during out of bounds check.
- 	(getChars): Throw StringIndexOutOfBoundsException, not
- 	ArrayIndexOutOfBoundsException.
- 	(getBytes): Ditto.
- 	(regionMatches): Obey case option during string comparison.
- 
- 	* configure.host (ligcj_interpreter): New variable.  Enable
- 	interpreter by default on IA-32.
- 	* configure.in:  Examine libgcj_interpreter.
- 	* configure: Rebuilt.
- 
- 2000-01-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* mauve-libgcj: Don't disable ClassTest.
- 
- 	* java/lang/natClass.cc (getClasses): Wrote.
- 
- 2000-01-06  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natClass.cc (_getConstructors): Correctly check
- 	whether method name is the init name.
- 	(getMethod): Look at accflags on method in `klass', not `this'.
- 
- 2000-01-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/natClass.cc (getMethod): Compute offset relative to
- 	`klass's methods table, not `this's table.
- 
- 	* java/lang/reflect/natMethod.cc (_Jv_CallNonvirtualMethodA):
- 	In unwrapping/widening case, check whether `k' is null, not
- 	whether it is primitive.  Initialize `num' from `argelts', not
- 	`paramelts'.  Correct create and pass arguments to ffi_call.
- 	Don't let presence of `this' argument affect index used to look in
- 	argument arrays.
- 	(COPY): Set appropriate element in `values' vector.
- 
- 	* java/lang/natClass.cc: Include <gcj/method.h>.
- 
- 	* java/lang/Class.h (_getMethods): Correctly declare as private,
- 	not public.
- 
- 	* java/lang/Class.h (_getMethods): Declare.
- 	* java/lang/Class.java (_getMethods): Declare.
- 	* java/lang/natClass.cc (getDeclaringClass): Always return NULL.
- 	(getDeclaredClasses): Always return empty array.
- 	(_getMethods): New method.
- 	(getMethods): Wrote.
- 	(getDeclaredMethod): Return `rmethod'.
- 	(finit_name): New global.
- 	(getDeclaredMethods): Check for finit_name.
- 	(_getMethods): Likewise.
- 	(getMethod): Only return public methods.
- 
- 	* java/lang/reflect/natMethod.cc (get_ffi_type): Test size of
- 	jboolean and select correct ffi type on that basis.
- 	(_Jv_CallNonvirtualMethodA): Handle `void' return type.
- 	Constructor call always has `void' return type.
- 
- 2000-01-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/Class.h (getSignature): Updated.
- 	* java/lang/Class.java (getSignature): Updated.
- 	* java/lang/natClass.cc (getSignature): Added `is_constructor'
- 	argument.
- 	(getConstructor): Ensure constructor is public.
- 	(_getConstructors): Check for public-ness of constructor when
- 	`declared' is false, not when it is true.
- 
- 2000-01-04  Warren Levy  <warrenl@cygnus.com>
- 
- 	* java/net/natPlainDatagramSocketImpl.cc (peek): Removed unnecesary
- 	comment.
- 	(receive): Set the sender's address in the DatagramPacket.
- 
- 2000-01-04  Tom Tromey  <tromey@cygnus.com>
- 
- 	* java/lang/reflect/natConstructor.cc (newInstance): Pass
- 	declaring class as return_type argument to
- 	_Jv_CallNonvirtualMethodA.
- 	* java/lang/reflect/natMethod.cc (_Jv_CallNonvirtualMethodA): In
- 	constructor case, create object and use it as `this' argument.
- 	* java/lang/Class.h (_getConstructors): Declare.
- 	(_getFields): Declare.
- 	* java/lang/Class.java (getConstructors): Wrote.
- 	(_getConstructors): New native method.
- 	(getDeclaredConstructors): Wrote.
- 	(_getFields): Declare new native method.
- 	* java/lang/natClass.cc (_Jv_LookupInterfaceMethod): Removed
- 	incorrect comment.
- 	(getMethod): Work correctly when class is primitive.
- 	(getDeclaredMethods): Likewise.  Compute offset using `method',
- 	not `mptr'.
- 	(getDeclaredMethod): Likewise.
- 	(getConstructor): Wrote.
- 	(ConstructorClass): New define.
- 	(getDeclaredConstructor): Wrote.
- 	(_getConstructors): New method.
- 	(_getFields): New method.
- 	(getFields): Wrote.
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (AM_CXXFLAGS): Added -D_GNU_SOURCE.
- 
- 	* prims.cc: Remove `#pragma implementation'.
- 	* gcj/array.h: Remove `#pragma interface'.
- 
- 	* prims.cc (_Jv_equaln): New function.
- 	* java/lang/Class.java (getSignature): Declare.
- 	* resolve.cc (_Jv_LookupDeclaredMethod): Moved to natClass.cc.
- 	* java/lang/natClass.cc (_Jv_LookupDeclaredMethod): Moved from
- 	resolve.cc.
- 	(getSignature): New method.
- 	(getDeclaredMethod): Wrote.
- 	(getMethod): Wrote.
- 	Include StringBuffer.h.
- 	* java/lang/Class.h (Class): Added _Jv_FromReflectedConstructor
- 	as a friend.  Unconditionally declare _Jv_LookupDeclaredMethod as
- 	a friend.
- 	(getSignature): Declare.
- 	* include/jvm.h (_Jv_GetTypesFromSignature): Declare.
- 	(_Jv_equaln): Declare.
- 	(_Jv_CallNonvirtualMethodA): Declare.
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (nat_source_files): Added natConstructor.cc.
- 	(java/lang/reflect/Constructor.h): New target.
- 	* java/lang/reflect/natConstructor.cc: New file.
- 	* java/lang/reflect/Constructor.java (newInstance): Now native.
- 	(declaringClass): Renamed from decl_class.
- 	(offset): Renamed from index.
- 	(getType): New native method.
- 	(getModifiers): Now native.
- 	(getParameterTypes): Call getType if required.
- 	(hashCode): Include hash code from declaring class.
- 	(modifiers): Removed.
- 	(toString): Call getType if required.
- 	* gcj/method.h (_Jv_FromReflectedConstructor): New function.
- 	* java/lang/reflect/natMethod.cc (hack_call): New method.
- 	Removed `#if 0' around FFI code.
- 	Include <gnu/gcj/RawData.h>.
- 	(invoke): Use _Jv_CallNonvirtualMethodA.  Throw
- 	IllegalArgumentException when argument object and class disagree.
- 	(_Jv_GetTypesFromSignature): New function.
- 	(getType): Use it.
- 	(ObjectClass): New define.
- 	(_Jv_CallNonvirtualMethodA): New function.
- 	* java/lang/reflect/Method.java (hack_trampoline): New method.
- 	(hack_call): New native method.
--- 4257,4259 ----
diff -Nrcpad gcc-4.0.2/libjava/ChangeLog-2002 gcc-4.1.0/libjava/ChangeLog-2002
*** gcc-4.0.2/libjava/ChangeLog-2002	Sat Jan 17 08:40:40 2004
--- gcc-4.1.0/libjava/ChangeLog-2002	Wed May  4 18:29:28 2005
***************
*** 2562,2568 ****
  	* java/lang/VMThrowable.java: New class.
  	* java/lang/natVMThrowable.cc: New file.
  
! 2003-08-23  Michael Koch  <konqueror@gmx.de>
  
  	* java/net/URLConnection.java,
  	java/netJarURLConnection.java,
--- 2562,2568 ----
  	* java/lang/VMThrowable.java: New class.
  	* java/lang/natVMThrowable.cc: New file.
  
! 2002-08-23  Michael Koch  <konqueror@gmx.de>
  
  	* java/net/URLConnection.java,
  	java/netJarURLConnection.java,
***************
*** 2587,2593 ****
  	* java/net/SocketAddress.java: New class from Classpath.
  	* java/net/InetSocketAddress.java: Likewise.
  
! 2003-08-21  Michael Koch  <konqueror@gmx.de>
  
  	* java/net/Authenticator.java: updated JDK 1.4
  	* java/net/ContentHandler.java: updated JDK 1.4
--- 2587,2593 ----
  	* java/net/SocketAddress.java: New class from Classpath.
  	* java/net/InetSocketAddress.java: Likewise.
  
! 2002-08-21  Michael Koch  <konqueror@gmx.de>
  
  	* java/net/Authenticator.java: updated JDK 1.4
  	* java/net/ContentHandler.java: updated JDK 1.4
diff -Nrcpad gcc-4.0.2/libjava/ChangeLog-2003 gcc-4.1.0/libjava/ChangeLog-2003
*** gcc-4.0.2/libjava/ChangeLog-2003	Sat Jan 17 08:40:40 2004
--- gcc-4.1.0/libjava/ChangeLog-2003	Wed May  4 18:29:28 2005
*************** i2003-12-16  Guilhem Lavaux <guilhem@kaf
*** 967,973 ****
  	(print): Use new internal print method.
  	(println): Likewise.
  
! 2002-12-08  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
  	* java/util/Hashtable.java (Hashtable(Map)): Use putAll, not
  	putAllInternal.
--- 967,973 ----
  	(print): Use new internal print method.
  	(println): Likewise.
  
! 2003-12-08  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
  	* java/util/Hashtable.java (Hashtable(Map)): Use putAll, not
  	putAllInternal.
*************** i2003-12-16  Guilhem Lavaux <guilhem@kaf
*** 975,981 ****
  	* java/util/HashMap.java (HashMap(Map)): As above.
  	(putAllInternal): As above.
  
! 2002-12-08  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
  	* java/util/Hashtable.java (internalContainsValue): Removed.
  	(containsValue): Don't delegate to internalContainsValue.
--- 975,981 ----
  	* java/util/HashMap.java (HashMap(Map)): As above.
  	(putAllInternal): As above.
  
! 2003-12-08  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
  	* java/util/Hashtable.java (internalContainsValue): Removed.
  	(containsValue): Don't delegate to internalContainsValue.
*************** i2003-12-16  Guilhem Lavaux <guilhem@kaf
*** 6592,6598 ****
  	(static): Check result of loadProvider calls. If necessary
  	display WARNING and fallback to Gnu provider.
  
! 2002-06-06  James Clark  <jjc@jclark.com>
  
  	Fix for PR libgcj/8738:
  	* gnu/gcj/convert/UnicodeToBytes.java (havePendingBytes): New method.
--- 6592,6598 ----
  	(static): Check result of loadProvider calls. If necessary
  	display WARNING and fallback to Gnu provider.
  
! 2003-06-06  James Clark  <jjc@jclark.com>
  
  	Fix for PR libgcj/8738:
  	* gnu/gcj/convert/UnicodeToBytes.java (havePendingBytes): New method.
*************** i2003-12-16  Guilhem Lavaux <guilhem@kaf
*** 6603,6609 ****
  	* java/lang/natString.cc (getBytes): Check converter havePendingBytes()
  	and whether output buffer is full before increasing size.
  
! 2002-06-06  Mark Wielaard  <mark@klomp dot org>
  
  	* java/io/PrintStream.java (writeChars(char[],int, int)):
  	Check converter.havePendingBytes().
--- 6603,6609 ----
  	* java/lang/natString.cc (getBytes): Check converter havePendingBytes()
  	and whether output buffer is full before increasing size.
  
! 2003-06-06  Mark Wielaard  <mark@klomp dot org>
  
  	* java/io/PrintStream.java (writeChars(char[],int, int)):
  	Check converter.havePendingBytes().
*************** i2003-12-16  Guilhem Lavaux <guilhem@kaf
*** 6632,6638 ****
  	* java/lang/w_exp.c (o_threshold, u_threshold): Define only
  	if _IEEE_LIBM is undefined.
  
! 2002-06-05  Loren J. Rittle  <ljrittle@acm.org>
  
  	* libjava/include/posix.h (O_SYNC): Define if not available
  	and a reasonable, perhaps more conservative, replacement exists.
--- 6632,6638 ----
  	* java/lang/w_exp.c (o_threshold, u_threshold): Define only
  	if _IEEE_LIBM is undefined.
  
! 2003-06-05  Loren J. Rittle  <ljrittle@acm.org>
  
  	* libjava/include/posix.h (O_SYNC): Define if not available
  	and a reasonable, perhaps more conservative, replacement exists.
*************** i2003-12-16  Guilhem Lavaux <guilhem@kaf
*** 9660,9666 ****
  	(find_symbol): New function.
  	(_Jv_FindSymbolInExecutable): Use it.
  
! 2002-02-21  Anthony Green  <green@redhat.com>
  
  	* java/lang/Thread.java (Thread): New constructor taking stack
  	size parameter (ignored for now).
--- 9660,9666 ----
  	(find_symbol): New function.
  	(_Jv_FindSymbolInExecutable): Use it.
  
! 2003-02-21  Anthony Green  <green@redhat.com>
  
  	* java/lang/Thread.java (Thread): New constructor taking stack
  	size parameter (ignored for now).
*************** i2003-12-16  Guilhem Lavaux <guilhem@kaf
*** 10176,10182 ****
  	(get): May not be final.
  	(put): May not be final.
  	
! 2002-02-13  Ranjit Mathew  <rmathew@hotmail.com>
  
  	* gnu/gcj/runtime/NameFinder.java (createStackTraceElement): Use
  	lastIndexOf( ) instead of indexOf( ) to find the colon before
--- 10176,10182 ----
  	(get): May not be final.
  	(put): May not be final.
  	
! 2003-02-13  Ranjit Mathew  <rmathew@hotmail.com>
  
  	* gnu/gcj/runtime/NameFinder.java (createStackTraceElement): Use
  	lastIndexOf( ) instead of indexOf( ) to find the colon before
*************** i2003-12-16  Guilhem Lavaux <guilhem@kaf
*** 11251,11257 ****
  	(TreeIterator.remove): Prefer IllegalStateException over
  	ConcurrentModificationException, to match Sun.
  
! 2002-12-22  Anthony Green  <green@redhat.com>
  
  	* boehm.cc (_Jv_MarkObj): Mark the protectionDomain of a class.
  
--- 11251,11257 ----
  	(TreeIterator.remove): Prefer IllegalStateException over
  	ConcurrentModificationException, to match Sun.
  
! 2003-01-03  Anthony Green  <green@redhat.com>
  
  	* boehm.cc (_Jv_MarkObj): Mark the protectionDomain of a class.
  
diff -Nrcpad gcc-4.0.2/libjava/ChangeLog-2004 gcc-4.1.0/libjava/ChangeLog-2004
*** gcc-4.0.2/libjava/ChangeLog-2004	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/ChangeLog-2004	Wed May  4 18:29:28 2005
***************
*** 0 ****
--- 1,15948 ----
+ 2004-12-31  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* testsuite/lib/libjava.exp (libjava_find_gij): Handle multilibs.
+ 
+ 2004-12-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_RegisterClassHookDefault):
+ 	Re-enable duplicate class registration error.
+ 
+ 	* testsuite/libjava.jar/jar.exp (gcj_jar_interpret): Updated.
+ 	* testsuite/libjava.verify/verify.exp (gcj_verify_run): Updated.
+ 	* testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Updated.
+ 	* testsuite/lib/libjava.exp (libjava_find_spec): Don't use
+ 	get_multilibs.
+ 	(libjava_find_gij): Likewise.  Changed return result if gij not
+ 	found.
+ 	(test_libjava_from_javac): Updated.
+ 
+ 	PR java/15001
+ 	* testsuite/libjava.jni/iface.c: New file.
+ 	* testsuite/libjava.jni/iface.out: New file.
+ 	* testsuite/libjava.jni/iface.java: New file.
+ 
+ 2004-12-19  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* include/config.h.in: Regenerate.
+ 
+ 2004-12-10  Andrew Haley  <aph@redhat.com>
+ 
+ 	PR java/15001
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Look up
+ 	abstract methods by name.
+ 
+ 2004-12-08  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/util/IdentityHashMap.java (put): Replace mistaken use
+ 	of "<<" by "*".
+ 
+ 2004-12-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/14853:
+ 	* testsuite/libjava.compile/PR14853.java: New file.
+ 	* testsuite/libjava.compile/PR14853.xfail: New file.
+ 
+ 2004-12-03  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR libgcj/7305
+ 	* configure.ac: Use TL_AC_GXX_INCLUDE_DIR.
+ 	* Makefile.am (install-data-local): Install headers into
+ 	$(gxx_include_dir) rather than $(includedir).
+ 	(AM_MAKEFLAGS): Pass down gxx_include_dir.
+ 	* gcj/Makefile.am (gcjdir): Set to $(gxx_include_dir)/gcj.
+ 	* include/Makefile.am (tool_include__HEADERS): Define this...
+ 	(include_HEADERS): ...instead of this.
+ 	* configure, aclocal.m4, Makefile.in, gcj/Makefile.in: Regenerate.
+ 	* include/Makefile.in, testsuite/Makefile.in: Regenerate.
+ 
+ 2004-12-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/16675:
+ 	* testsuite/libjava.compile/PR16675.java: New file.
+ 
+ 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.
+ 	* configure, aclocal.m4, Makefile.in, gcj/Makefile.in: Regenerate.
+ 	* include/Makefile.in, testsuite/Makefile.in: Regenerate.
+ 
+ 2004-12-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/no-threads.h (_Jv_ThreadDestroyData): Removed argument
+ 	name.
+ 	(_Jv_ThreadRegister): Likewise.
+ 	(_Jv_MutexCheckMonitor): Likewise.
+ 
+ 	* link.cc: Include limits.h.
+ 
+ 2004-12-01  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/18699
+ 	* testsuite/libjava.lang/PR18699.java,
+ 	testsuite/libjava.lang/PR18699.out: New test.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (drawImage variants):
+ 	Update image observer.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage):
+ 	Start image production.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Protect
+ 	against negative menu bar widths.
+ 	(setBounds): Likewise.
+ 	(postConfigureEvent): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java (imageComplete): Don't
+ 	remove consumer unless only a single frame has completed.
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java (GtkImagePainter):
+ 	Add observer parameter.
+ 	(setPixels): Update image observer.
+ 	(imageComplete): Likewise.
+ 	* java/applet/Applet.java (width): New field.
+ 	(height): Likewise.
+ 	(setStub): Set size if width or height field has been set.
+ 	(resize): If stub is null save width and height values.
+ 	* java/awt/Component.java (reshape): Protect against null
+ 	parent.
+ 	* java/awt/image/MemoryImageSource.java
+ 	(MemoryImageSource(int,int,ColorModel,byte[],int,int)):
+ 	Document.
+ 	(MemoryImageSource(int,int,ColorModel,int[],int,int)):
+ 	Likewise.
+ 	(MemoryImageSource(int,int,ColorModel,byte[],int,int,Hashtable)):
+ 	Reference pixel array directly, rather than creating a local
+ 	copy.
+ 	(MemoryImageSource(int,int,ColorModel,int[],int,int,Hashtable)):
+ 	Likewise.
+ 	(newPixels(int,int,int,int)): Fix for loop and array copy
+ 	bounds.
+ 	(newPixels(int,int,int,int,boolean)): Likewise.
+ 	(startProduction): If animated call imageComplete with
+ 	SINGLEFRAME.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Uncomment
+ 	gdk_flush lines.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
+ 	(drawPixels): Return if g is null or g->drawable is not a gdk
+ 	drawable.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultSingleSelectionModel.java,
+ 	javax/swing/JPasswordField.java,
+ 	javax/swing/tree/AbstractLayoutCache.java:
+ 	Reformatted and javadocs cleaned up.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Component.java:
+ 	Fixed argument names to match javadocs.
+ 	(setFont): Rewritten set property first and then fire event.
+ 	(setLocale): Likewise.
+ 	* javax/swing/text/JTextComponent.java
+ 	(setEditable): Likewise.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Button.java
+ 	(AccessibleAWTButton.getAccessibleActionDescription): Explain the
+ 	source of 'click'.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Checkbox.java: Remove stub comments.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Button.java
+ 	(AccessibleAWTButton.getAccessibleActionDescription): Return
+ 	'click'.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/CardLayout.java:
+ 	Made some constants static.
+ 	(serialVersionUID): Made private.
+ 	(addLayoutComponent): Simplified code.
+ 	* java/awt/event/InputEvent.java
+ 	(getModifiersEx): Added missing @param tag.
+ 	* java/awt/image/RGBImageFilter.java
+ 	(filterRGBPixels): Reformatted, removed wrong @param tag.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/FieldView.java,
+ 	javax/swing/text/JTextComponent.java:
+ 	Removed debug code.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/BorderFactory.java
+ 	(BorderFactory): Added private constructor.
+ 	* javax/swing/SwingUtilities.java
+ 	(SwingUtilities): Likewise.
+ 	(computeStringWidth): New method.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/color/ICC_Profile.java
+ 	(icSigNamedColorTag): Removed.
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(isMimeTypeEqual): Made final.
+ 	* java/awt/image/AffineTransformOp.java:
+ 	Reworked javadocs.
+ 	(TYPE_BICUBIC): Added @since tag.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Checkbox.java (AccessibleAWTCheckBox): Remove todo
+ 	comments.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Checkbox.java (itemStateChanged): Implement function.
+ 	(getAccessibleContext): Add AccessibleAWTCheckBox to item listeners.
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/Polygon.java (contains): Reimplemented.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/print/PrinterJob.java: Reformatted.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/AffineTransformOp.java,
+ 	java/awt/image/ColorConvertOp.java,
+ 	java/awt/image/LookupOp.java,
+ 	java/awt/image/RescaleOp.java:
+ 	Added final keywords where they belong.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/CardLayout.java,
+ 	java/awt/Component.java,
+ 	java/awt/Font.java,
+ 	java/awt/image/SinglePixelPackedSampleModel.java:
+ 	Fixed javadocs and argument names all over.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/DataBufferShort.java: Fixed file header.
+ 	* java/awt/image/DataBufferUShort.java: Likewise.
+ 	(DataBufferUShort): Throw NullPointerException if dataArray is null.
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/Arc2D.java
+ 	(setAngleStart): Corrected (wrong sign on atan2 y parameter).
+ 	(setAngles): Likewise.
+ 	(containsAngle): Return false on zero extent, don't include
+ 	final angle.
+ 	(contains): Treat OPEN-type arcs like CHORD ones, not as PIE
+ 	ones.
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/AffineTransform.java,
+ 	(inverseTransform): Fixed bug and simplified code.
+ 	(createTransformedShape): Return null on null parameter.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/color/ICC_ColorSpace.java,
+ 	java/awt/color/ICC_Profile.java,
+ 	java/awt/color/ICC_ProfileGray.java,
+ 	java/awt/color/ICC_ProfileRGB.java:
+ 	Re-indent copyright header to be standardish.
+ 	* java/awt/datatransfer/StringSelection.java:
+ 	Reformatted.
+ 	* java/awt/geom/Area.java
+ 	(EPSILON): Made static.
+ 	(RS_EPSILON): Likewise.
+ 	(PE_EPSILON): Likewide.
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* javax/swing/SwingUtilities.java:
+ 	(computeDifference): Implemented
+ 	(computeIntersection): Likewise
+ 	(computeUnion): Likewise
+ 	(isRectangleContainingRectangle): Likewise
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/BasicStroke.java,
+ 	java/awt/Button.java,
+ 	java/awt/Canvas.java,
+ 	java/awt/CheckboxMenuItem.java,
+ 	java/awt/Container.java,
+ 	java/awt/EventQueue.java,
+ 	java/awt/FileDialog.java,
+ 	java/awt/FlowLayout.java,
+ 	java/awt/FontMetrics.java,
+ 	java/awt/Graphics.java,
+ 	java/awt/GridLayout.java,
+ 	java/awt/KeyboardFocusManager.java,
+ 	java/awt/Label.java,
+ 	java/awt/LayoutManager2.java,
+ 	java/awt/List.java,
+ 	java/awt/MenuBar.java,
+ 	java/awt/Scrollbar.java,
+ 	java/awt/Toolkit.java,
+ 	java/awt/Window.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/awt/datatransfer/FlavorTable.java,
+ 	java/awt/event/ActionListener.java,
+ 	java/awt/event/HierarchyBoundsAdapter.java,
+ 	java/awt/geom/Arc2D.java,
+ 	java/awt/geom/Rectangle2D.java,
+ 	java/awt/geom/RectangularShape.java,
+ 	java/awt/im/spi/InputMethod.java,
+ 	java/awt/image/ByteLookupTable.java,
+ 	java/awt/image/ColorModel.java,
+ 	java/awt/image/DirectColorModel.java,
+ 	java/awt/image/ShortLookupTable.java,
+ 	java/awt/print/Book.java:
+ 	Fixed javadocs and method argument names all over.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontPeer.java
+ 	(buildString): Optimise String building.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/TextArea.java (AccessibleAWTTextArea,
+ 	getAccessibleContext): Implement.
+ 	* java/awt/TextField.java (AccessibleAWTTextField,
+ 	getAccessibleContext): Implement.
+ 
+ 2004-11-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo):
+ 	Fixed typo.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Menu.java (AccessibleAWTMenu, getAccessibleContext):
+ 	Implement.
+ 	* java/awt/PopupMenu.java (AccessibleAWTMenu, getAccessibleContext):
+ 	Implement.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/print/PrinterJob.java (lookupPrintServices,
+ 	getPrintService, setPrintService): Implement.
+ 	(lookupStreamPrintServices): Add commented out implementation.
+ 	(printer): New field.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/ToolTipManager.java (mouseMoved): Set currentComponent
+ 	when not yet set.
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/GeneralPath.java (evaluateCrossings):
+ 	Fixed epsilon value, should always be nonzero.
+ 
+ 2004-11-30  Paul Jenner  <psj.home@ntlworld.com>
+ 
+ 	* java/awt/image/Raster.java
+ 	(createPackedRaster): Implemented.
+ 
+ 2004-11-30  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java:
+ 	Listen to focus events, indicate focus via caret.
+ 	* javax/swing/text/GapContent.java (getString): Return substring.
+ 	* javax/swing/text/PlainDocument.java (reindex): New method.
+ 	(createDefaultRoot): Call it.
+ 	(insertUpdate): Likewise.
+ 	(removeUpdate): Likewise.
+ 	* javax/swing/text/Utilities.java (drawTabbedText): Always advance
+ 	on tab and newline, even if no painting happens.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* Makefile.am: List peer JNI header: Java source file
+ 	dependencies explicitly.  Likewise for JNI .lo: JNI header
+ 	dependencies.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-30  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* Makefile.am: Add entry for BasicTextPaneUI.java
+ 	* Makefile.in: Regenerate.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(GdkGraphics2D): Set clip after transform.
+ 	(drawImage): Protect against null image.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(setIconImage): Protect against non-GtkImage args.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(checkImage): Protect against non-GtkImage args.
+ 	* java/awt/print/PrinterJob.java:
+ 	(print): Add variant taking PrintRequestAttributeSet.
+ 	(printDialog): Likewise.
+ 	* javax/swing/JComponent.java:
+ 	(transferHandler): New field.
+ 	(getComponentGraphics): Build new Graphics for each sub-paint.
+ 	(getTransferHandler): New method.
+ 	(setTransferHandler): New method.
+ 	* javax/swing/JDesktopPane.java
+ 	(setDragMode): Force LIVE_DRAG_MODE.
+ 	* javax/swing/JMenuItem.java
+ 	(menuSelectionChanged): Protect against null parent.
+ 	* javax/swing/JTable.java (setDefaultRenderer): New method.
+ 	* javax/swing/JTree.java: Get basic ctors and UI working.
+ 	* javax/swing/JViewport.java (JViewport): Set scroll mode.
+ 	* javax/swing/RepaintManager.java
+ 	(addDirtyRegion): Skip empty regions.
+ 	* javax/swing/ScrollPaneLayout.java (minimumLayoutSize): Do not
+ 	bound scrollpane minimum by central view minimum.
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Guard against null component.
+ 	* javax/swing/TransferHandler.java: Stub out.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Add entry for TextPaneUI, change Tree icons to pngs.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(installDefaults): Set text position and alignment.
+ 	(paintMenuItem): Layout icon with normal compound function.
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java:
+ 	(getMaximumSize): Delete.
+ 	(getMinimumSize): Delete.
+ 	(getPreferredSize): Use column model's total width.
+ 	* javax/swing/plaf/basic/BasicTextPaneUI.java: New file.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(modelChanged): Make resilient against nulls.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Add some simplistic config / painting functions.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(paintSimple): Add new non-backingstore paint mode.
+ 	(paintBackingStore): Split out backing store code.
+ 	(paint): Switch on painting mode.
+ 	* javax/swing/text/SimpleAttributeSet.java
+ 	(SimpleAttributeSet): Resist nulls.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java: Implement.
+ 	* javax/swing/tree/DefaultTreeModel.java: Partially implement.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (setFont):
+ 	Set pango context's description and language.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/image/LookupOp.java: Comments and indentation fixes.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Checkbox.java (AccessibleAWTCheckBox): Implement.
+ 	(getAccessibleContext): Implement.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/TextComponent.java (AccessibleAWTTextComponent):
+ 	Implement.
+ 	(getIndexAtPoint, getCharacterBounds): New methods.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Button.java (AccessibleAWTButton): Implement.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(filenameFilterCallback): Made static.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(cairoShowGlyphs) Removed.
+ 
+ 2004-11-30  Sven de Marothy <sven@physto.se>
+ 
+ 	* gnu/java/awt/color/RgbProfileConverter.java (RgbProfileConverter):
+ 	Don't invert matrix when reverse CLUT is available.
+ 	* gnu/java/awt/color/LinearRGBConverter.java: Documentation update.
+ 	* java/awt/color/ICC_ColorSpace.java: Likewise.
+ 	* java/awt/color/ICC_Profile.java: Likewise.
+ 	* java/awt/color/ICC_ProfileGray.java: Likewise.
+ 	* java/awt/color/ICC_ProfileRGB.java: Likewise.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/MenuItem.java (AccessibleAWTMenuItem): Implement.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Choice.java (AccessibleAWTChoice): Implement.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/BandedSampleModel.java (scanlineStride): Remove
+ 	field hiding ComponentSampleModel.scanlineStride.
+ 
+ 2004-11-30  Noa Resare  <noa@resare.com>
+ 
+ 	* java/awt/geom/GeneralPath.java (currentSegment):
+ 	Fix typo in transform.transform() invocation.
+ 
+ 2004-11-30  Sven de Marothy <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(createImage): Created bitmap should be filled with bg color
+ 
+ 2004-11-30  Noa Resare  <noa@resare.com>
+ 
+ 	* java/awt/Choice.java (add):
+ 	Implement correct selection behavior when peer == null.
+ 	(insert): Likewise.
+ 	(remove): Likewise.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (GtkChoicePeer):
+ 	Call select() when Choice has a selected item.
+ 
+ 2004-11-30  Michael Koch  <address@bogus.example.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
+ 	Fixed method names to start at begin of line. This is desired by GNU
+ 	coding style guide.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(gtkWidgetSetVisible): Unused. Removed.
+ 	(connectJObject): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
+ 	(gtkScrolledWindowSetScrollPosition): Commented out.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText): Installed and
+ 	renamed from Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText): Removed.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(init_dpi_conversion_factor): Correct prototype.
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/image/ConvolveOp.java: Added missing
+ 	copyright notice.
+ 
+ 2004-11-30  Robert Schuster  <theBohemian@gmx.net>
+ 
+ 	Fixes bug #10908
+ 	* gnu/java/beans/IntrospectionIncubator.java:
+ 	(addMethod): static methods are discarded now, too.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (awt_java_source_files): Add new gnu/java/awt/color
+ 	java source files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/color/CieXyzConverter.java,
+ 	gnu/java/awt/color/GrayScaleConverter.java,
+ 	gnu/java/awt/color/SrgbConverter.java,
+ 	gnu/java/awt/color/ClutProfileConverter.java,
+ 	gnu/java/awt/color/LinearRGBConverter.java,
+ 	gnu/java/awt/color/TagEntry.java,
+ 	gnu/java/awt/color/ColorLookUpTable.java,
+ 	gnu/java/awt/color/ProfileHeader.java,
+ 	gnu/java/awt/color/ToneReproductionCurve.java,
+ 	gnu/java/awt/color/ColorSpaceConverter.java,
+ 	gnu/java/awt/color/PyccConverter.java,
+ 	gnu/java/awt/color/GrayProfileConverter.java,
+ 	gnu/java/awt/color/RgbProfileConverter.java:
+ 	New files.
+ 	* java/awt/color/ICC_ColorSpace.java,
+ 	java/awt/color/ICC_Profile.java,
+ 	java/awt/color/ICC_ProfileGray.java,
+ 	java/awt/color/ICC_ProfileRGB.java:
+ 	Implemented (sans PhotoYCC color space).
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/AffineTransformOp.java (filter):  Implement
+ 	bilinear interpolation for Rasters.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/IndexColorModel.java (IndexColorModel): Actually
+ 	use the provided colormap.  Throw documented exceptions.  Document
+ 	exceptions.
+ 
+ 2004-11-30  Paul Jenner  <psj.home@ntlworld.com>
+ 
+ 	* java/awt/image/IndexColorModel.java (IndexColorModel): Fix
+ 	constructor.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/AffineTransformOp.java: Add TYPE_BICUBIC.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/AffineTransformOp.java (filter): Implement Raster
+ 	filtering.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ComponentSampleModel.java (getDataElements,
+ 	setDataElements): Implement SHORT, FLOAT, and INT transfer types.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Font.java (name): New field.
+ 	(size): Likewise.
+ 	(style): Likewise.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/Raster.java (createBandedRaster): Implement.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ConvolveOp.java: New class.
+ 	* Makefile.am: Add ConvolveOp.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/RescaleOp.java (BandCombineOp, ColorConvertOp,
+ 	LookupOp, RescaleOp): Fix loop bounds.
+ 
+ 2004-11-30  jlquinn  <jlquinn@optonline.net>
+ 
+ 	* Makefile.am: Fix typo in BandCombineOp.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/BandCombineOp.java: New class.
+ 	* Makefile.am: Add BandCombineOp.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/LookupOp.java: New class.
+ 	* Makefile.am: Add LookupOp.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/SampleModel.java (createSubsetSampleModel): Add
+ 	javadocs.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ColorModel.java (cloneColorModel): Fix line
+ 	wrap.  Use Boolean.valueOf.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(releasePeerGraphicsResource): Fixed typo in method name.
+ 	* gnu/java/awt/peer/gtk/GdkFontPeer.java
+ 	(finalize): Fixed typo in releasePeerGraphicsResource.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/font/TextAttribute.java
+ 	(RUN_DIRECTION_LTR): Initialie with static value instead of
+ 	calculating it.
+ 	(RUN_DIRECTION_RTL): Likewise.
+ 	(STRIKETHROUGH_ON): Likewise.
+ 	(SWAP_COLORS_ON): Likewise.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ColorConvertOp.java: New class.
+ 	* java/awt/image/ColorModel.java (cloneColorModel): New method.
+ 	* Makefile.am: Add ColorConvertOp.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
+ 	Track Window focus owner on FOCUS_GAINED events.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
+ 	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
+ 
+ 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
+ 	(Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun):
+ 	Fix pointer warning.
+ 
+ 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter):
+ 	Fix pointer warning.
+ 
+ 	* jni/gtk-peer/gtkpeer.h: Introduce widget_union to fix type punned
+ 	warnings.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect): Use widget_union
+ 	to fix type punned pointer warning.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (pre_event_handler):
+ 	Likewise.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_get_new_state): Introduce unions to fix warnings as above.
+ 	(window_property_changed_cb): Likewise.
+ 	(window_active_state_change_cb): Mark unused variables unused.
+ 	(window_focus_state_change_cb): Likewise.
+ 	(window_focus_in_cb): Likewise.
+ 	(window_focus_out_cb): Likewise.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont): Convert
+ 	PangoFontMap correctly with PANGO_FT2FONT_MAP macro.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JMenuBar.java
+ 	(updateUI): Simplified.
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java:
+ 	Reorganized import statements.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/font/TextAttribute.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JInternalFrame.java,
+ 	javax/swing/table/TableColumn.java,
+ 	javax/swing/text/StyleConstants.java:
+ 	Replaced "new Boolean(boolean)" with "Boolean.valueOf(boolean)".
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/tree/DefaultTreeCellEditor.java,
+ 	javax/swing/tree/DefaultTreeModel.java,
+ 	javax/swing/tree/DefaultTreeSelectionModel.java:
+ 	Jalopied.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(EditorContainer.EditorContainer): Fixed arguments.
+ 	(EditorContainer.EditorContainer): New method.
+ 	(DefaultTextField.DefaultTextField): Fixed arguments, implemented.
+ 	(DefaultTextField.getBorder): Implemented.
+ 	(listenerList): New field.
+ 	(addCellEditorListener): Implemented.
+ 	(removeCellEditorListener): Implemented.
+ 	(getCellEditorListeners): New method.
+ 	* javax/swing/tree/DefaultTreeModel.java
+ 	(addTreeModelListener): Fixed javadoc.
+ 	(removeTreeModelListener): Likewise.
+ 	(getTreeModelListeners): New method.
+ 	(fireTreeNodesChanged): Implemented.
+ 	(fireTreeNodesInserted): Likewise.
+ 	(fireTreeNodesRemoved): Likewise.
+ 	(fireTreeStructureChanged): Likewise.
+ 	(getListeners): Fixed javadoc.
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java
+ 	(addTreeSelectionListener): Implemented.
+ 	(removeTreeSelectionListener): Likewise.
+ 	(fireValueChanged): Likewise.
+ 	(getListeners): Likewise.
+ 	(addPropertyChangeListener): Likewise.
+ 	(removePropertyChangeListener): Likewise.
+ 	(getTreeSelectionListeners): New method.
+ 	(getPropertyChangeListeners): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(maximumThumbSize): Removed static keyword.
+ 	(minimumThumbSize): Likewise.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(CloseAction): Made public.
+ 	(IconifyAction): Likewise.
+ 	(MaximizeAction): Likewise.
+ 	(MoveAction): Likewise.
+ 	(RestoreAction): Likewise.
+ 	(SizeAction): Likewise.
+ 	(SystemMenuBar): Likewise.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(TrackListener): Likewise.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(KeyboardDownRightHandler): Likewise.
+ 	(KeyboardEndHandler): Likewise.
+ 	(KeyboardHomeHandler): Likewise.
+ 	(KeyboardResizeToggleHandler): Likewise.
+ 	(KeyboardUpLeftHandler): Likewise.
+ 	(PropertyHandler): Likewise.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(PropertyChangeHandler): Likewise.
+ 	(TabSelectionHandler): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(getKeymap): Made public.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(getStream): Throws IOException.
+ 	(read): Likewise.
+ 	* javax/swing/JRootPane.java
+ 	(createContentPane): Fixed return type.
+ 	* javax/swing/JSpinner.java
+ 	(commitEdit): Throws ParseException.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(serialVersionUID): New field.
+ 	* javax/swing/table/TableColumn.java
+ 	(resizedPostingDisableCount): Added @deprecated tag.
+ 	(disableResizedPosting): Likewise.
+ 	(enableResizedPosting): Likewise.
+ 	* javax/swing/text/Document.java
+ 	(TitleProperty): Fixed value.
+ 	* javax/swing/tree/TreeCellEditor.java
+ 	(TreeCellEditor): Extends CellEditor.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JWindow.java
+ 	javax/swing/SpinnerModel.java
+ 	javax/swing/Timer.java
+ 	javax/swing/event/MenuKeyEvent.java
+ 	javax/swing/plaf/basic/BasicButtonUI.java
+ 	javax/swing/plaf/basic/BasicIconFactory.java
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	javax/swing/text/AttributeSet.java
+ 	javax/swing/text/Highlighter.java
+ 	javax/swing/text/StyleConstants.java
+ 	javax/swing/tree/TreeCellEditor.java:
+ 	Removed redundant and reordered modifiers.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java:
+ 	Reformatted copyright header.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java,
+ 	javax/swing/AbstractButton.java,
+ 	javax/swing/AbstractCellEditor.java,
+ 	javax/swing/AbstractListModel.java,
+ 	javax/swing/AbstractSpinnerModel.java,
+ 	javax/swing/ActionMap.java,
+ 	javax/swing/BorderFactory.java,
+ 	javax/swing/Box.java,
+ 	javax/swing/ButtonModel.java,
+ 	javax/swing/CellEditor.java,
+ 	javax/swing/CellRendererPane.java,
+ 	javax/swing/DefaultBoundedRangeModel.java,
+ 	javax/swing/DefaultButtonModel.java,
+ 	javax/swing/DefaultCellEditor.java,
+ 	javax/swing/DefaultDesktopManager.java,
+ 	javax/swing/DefaultListCellRenderer.java,
+ 	javax/swing/DefaultListSelectionModel.java,
+ 	javax/swing/DefaultSingleSelectionModel.java,
+ 	javax/swing/GrayFilter.java,
+ 	javax/swing/InputMap.java,
+ 	javax/swing/JApplet.java,
+ 	javax/swing/JCheckBoxMenuItem.java,
+ 	javax/swing/JColorChooser.java,
+ 	javax/swing/JComboBox.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JDesktopPane.java,
+ 	javax/swing/JDialog.java,
+ 	javax/swing/JEditorPane.java,
+ 	javax/swing/JFileChooser.java,
+ 	javax/swing/JFormattedTextField.java,
+ 	javax/swing/JFrame.java,
+ 	javax/swing/JInternalFrame.java,
+ 	javax/swing/JLabel.java,
+ 	javax/swing/JLayeredPane.java,
+ 	javax/swing/JList.java,
+ 	javax/swing/JMenu.java,
+ 	javax/swing/JMenuBar.java,
+ 	javax/swing/JMenuItem.java,
+ 	javax/swing/JOptionPane.java,
+ 	javax/swing/JPanel.java,
+ 	javax/swing/JPasswordField.java,
+ 	javax/swing/JPopupMenu.java,
+ 	javax/swing/JRadioButtonMenuItem.java,
+ 	javax/swing/JRootPane.java,
+ 	javax/swing/JSpinner.java,
+ 	javax/swing/JSplitPane.java,
+ 	javax/swing/JTabbedPane.java,
+ 	javax/swing/JTable.java,
+ 	javax/swing/JTextArea.java,
+ 	javax/swing/JTextPane.java,
+ 	javax/swing/JToggleButton.java,
+ 	javax/swing/JToolBar.java,
+ 	javax/swing/JToolTip.java,
+ 	javax/swing/JTree.java,
+ 	javax/swing/JViewport.java,
+ 	javax/swing/ListModel.java,
+ 	javax/swing/LookAndFeel.java,
+ 	javax/swing/MenuSelectionManager.java,
+ 	javax/swing/ProgressMonitorInputStream.java,
+ 	javax/swing/RepaintManager.java,
+ 	javax/swing/RootPaneContainer.java,
+ 	javax/swing/ScrollPaneLayout.java,
+ 	javax/swing/SpringLayout.java,
+ 	javax/swing/SwingUtilities.java,
+ 	javax/swing/Timer.java,
+ 	javax/swing/ToolTipManager.java,
+ 	javax/swing/UIDefaults.java,
+ 	javax/swing/UIManager.java,
+ 	javax/swing/border/MatteBorder.java,
+ 	javax/swing/colorchooser/AbstractColorChooserPanel.java,
+ 	javax/swing/colorchooser/ColorSelectionModel.java,
+ 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
+ 	javax/swing/colorchooser/DefaultHSBChooserPanel.java,
+ 	javax/swing/colorchooser/DefaultPreviewPanel.java,
+ 	javax/swing/colorchooser/DefaultRGBChooserPanel.java,
+ 	javax/swing/colorchooser/DefaultSwatchChooserPanel.java,
+ 	javax/swing/event/AncestorEvent.java,
+ 	javax/swing/event/HyperlinkEvent.java,
+ 	javax/swing/event/InternalFrameEvent.java,
+ 	javax/swing/event/MenuDragMouseEvent.java,
+ 	javax/swing/event/TableColumnModelEvent.java,
+ 	javax/swing/event/TableModelEvent.java,
+ 	javax/swing/event/TreeExpansionEvent.java,
+ 	javax/swing/event/TreeModelEvent.java,
+ 	javax/swing/event/TreeSelectionEvent.java,
+ 	javax/swing/event/TreeWillExpandListener.java,
+ 	javax/swing/event/UndoableEditEvent.java,
+ 	javax/swing/filechooser/FileView.java,
+ 	javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/ComponentUI.java,
+ 	javax/swing/plaf/FileChooserUI.java,
+ 	javax/swing/plaf/IconUIResource.java,
+ 	javax/swing/plaf/ListUI.java,
+ 	javax/swing/plaf/PopupMenuUI.java,
+ 	javax/swing/plaf/SplitPaneUI.java,
+ 	javax/swing/plaf/TabbedPaneUI.java,
+ 	javax/swing/plaf/TextUI.java,
+ 	javax/swing/plaf/TreeUI.java,
+ 	javax/swing/plaf/basic/BasicArrowButton.java,
+ 	javax/swing/plaf/basic/BasicBorders.java,
+ 	javax/swing/plaf/basic/BasicButtonUI.java,
+ 	javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicColorChooserUI.java,
+ 	javax/swing/plaf/basic/BasicComboBoxEditor.java,
+ 	javax/swing/plaf/basic/BasicComboBoxRenderer.java,
+ 	javax/swing/plaf/basic/BasicComboBoxUI.java,
+ 	javax/swing/plaf/basic/BasicComboPopup.java,
+ 	javax/swing/plaf/basic/BasicDesktopIconUI.java,
+ 	javax/swing/plaf/basic/BasicDesktopPaneUI.java,
+ 	javax/swing/plaf/basic/BasicIconFactory.java,
+ 	javax/swing/plaf/basic/BasicInternalFrameTitlePane.java,
+ 	javax/swing/plaf/basic/BasicInternalFrameUI.java,
+ 	javax/swing/plaf/basic/BasicListUI.java,
+ 	javax/swing/plaf/basic/BasicLookAndFeel.java,
+ 	javax/swing/plaf/basic/BasicMenuBarUI.java,
+ 	javax/swing/plaf/basic/BasicMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicMenuUI.java,
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.java,
+ 	javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java,
+ 	javax/swing/plaf/basic/BasicPopupMenuUI.java,
+ 	javax/swing/plaf/basic/BasicProgressBarUI.java,
+ 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicRootPaneUI.java,
+ 	javax/swing/plaf/basic/BasicScrollBarUI.java,
+ 	javax/swing/plaf/basic/BasicSeparatorUI.java,
+ 	javax/swing/plaf/basic/BasicSliderUI.java,
+ 	javax/swing/plaf/basic/BasicSpinnerUI.java,
+ 	javax/swing/plaf/basic/BasicSplitPaneDivider.java,
+ 	javax/swing/plaf/basic/BasicSplitPaneUI.java,
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
+ 	javax/swing/plaf/basic/BasicTableHeaderUI.java,
+ 	javax/swing/plaf/basic/BasicTableUI.java,
+ 	javax/swing/plaf/basic/BasicTextAreaUI.java,
+ 	javax/swing/plaf/basic/BasicTextFieldUI.java,
+ 	javax/swing/plaf/basic/BasicTextUI.java,
+ 	javax/swing/plaf/basic/BasicToolBarSeparatorUI.java,
+ 	javax/swing/plaf/basic/BasicToolBarUI.java,
+ 	javax/swing/plaf/basic/BasicToolTipUI.java,
+ 	javax/swing/plaf/basic/BasicTreeUI.java,
+ 	javax/swing/plaf/basic/BasicViewportUI.java,
+ 	javax/swing/plaf/basic/ComboPopup.java,
+ 	javax/swing/table/AbstractTableModel.java,
+ 	javax/swing/table/DefaultTableCellRenderer.java,
+ 	javax/swing/table/DefaultTableColumnModel.java,
+ 	javax/swing/table/DefaultTableModel.java,
+ 	javax/swing/table/JTableHeader.java,
+ 	javax/swing/table/TableCellEditor.java,
+ 	javax/swing/table/TableCellRenderer.java,
+ 	javax/swing/table/TableColumn.java,
+ 	javax/swing/table/TableColumnModel.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/Caret.java,
+ 	javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/DefaultEditorKit.java,
+ 	javax/swing/text/DefaultHighlighter.java,
+ 	javax/swing/text/EditorKit.java,
+ 	javax/swing/text/JTextComponent.java,
+ 	javax/swing/text/LayeredHighlighter.java,
+ 	javax/swing/text/PasswordView.java,
+ 	javax/swing/text/SimpleAttributeSet.java,
+ 	javax/swing/text/StyleConstants.java,
+ 	javax/swing/text/StyleContext.java,
+ 	javax/swing/text/StyledEditorKit.java,
+ 	javax/swing/text/TextAction.java,
+ 	javax/swing/text/View.java,
+ 	javax/swing/tree/AbstractLayoutCache.java,
+ 	javax/swing/tree/DefaultTreeCellRenderer.java,
+ 	javax/swing/tree/DefaultTreeModel.java,
+ 	javax/swing/tree/DefaultTreeSelectionModel.java,
+ 	javax/swing/tree/FixedHeightLayoutCache.java,
+ 	javax/swing/tree/TreeCellRenderer.java,
+ 	javax/swing/tree/TreeSelectionModel.java,
+ 	javax/swing/tree/VariableHeightLayoutCache.java,
+ 	javax/swing/undo/AbstractUndoableEdit.java,
+ 	javax/swing/undo/UndoableEditSupport.java:
+ 	Imports cleaned up.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Container.java,
+ 	java/awt/Font.java,
+ 	java/awt/font/TextLayout.java:
+ 	Imports cleaned up.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(getLabel): Added @deprecated tag.
+ 	(setLabel): Likewise.
+ 	* javax/swing/FocusManager.java
+ 	(disableSwingFocusManager): Likewise.
+ 	(isFocusManagerEnabled): Likewise.
+ 	* javax/swing/JComponent.java
+ 	(isManagingFocus): Added version to @deprecated tag.
+ 	(getNextFocusableComponent): Moved @deprecated tag to bottom of
+ 	javadoc.
+ 	(getConditionForKeyStroke): Likewise.
+ 	(getActionForKeyStroke): Likewise.
+ 	* javax/swing/JDesktopPane.java
+ 	(LIVE_DRAG_MODE): Added @specnote tag.
+ 	(OUTLINE_DRAG_MODE): Likewise.
+ 	* javax/swing/JInternalFrame.java
+ 	(MENU_BAR_PROPERTY): Fixed value.
+ 	(getMenuBar): Added @deprecated tag.
+ 	(setMenuBar): Likewise.
+ 	* javax/swing/JViewport.java
+ 	(isBackingStoreEnabled): Likewise.
+ 	(setBackingStoreEnabled): Likewise.
+ 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java
+ 	(closeKey): Likewise.
+ 	(maximizeKey): Likewise.
+ 	(minimizeKey): Likewise.
+ 	(navigateKey): Likewise.
+ 	(navigateKey2): Likewise.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(openMenuKey): Likewise.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(keyboardDownRightListener): Likewise.
+ 	(keyboardEndListener): Likewise.
+ 	(keyboardHomeListener): Likewise.
+ 	(keyboardResizeToggleListener): Likewise.
+ 	(keyboardUpLeftListener): Likewise.
+ 	(dividerResizeToggleKey): Likewise.
+ 	(downKey): Likewise.
+ 	(endKey): Likewise.
+ 	(homeKey): Likewise.
+ 	(leftKey): Likewise.
+ 	(rightKey): Likewise.
+ 	(upKey): Likewise.
+ 	(createKeyboardUpLeftListener): Likewise.
+ 	(createKeyboardDownRightListener): Likewise.
+ 	(createKeyboardHomeListener): Likewise.
+ 	(createKeyboardEndListener): Likewise.
+ 	(createKeyboardResizeToggleListener): Likewise.
+ 	(getDividerBorderSize): Likewise.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(downKey): Likewise.
+ 	(leftKey): Likewise.
+ 	(rightKey): Likewise.
+ 	(upKey): Likewise.
+ 
+ 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Use the
+ 	GTK_TEXT_VIEW macro.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(connect_awt_hook_cb): Mark unused variable unused.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c (selection_get):
+ 	Do the cast right.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create): According to
+ 	the gtk API gtk_combo_box_new_text actually returns a GtkWidget.
+ 	Remove unused var menu.
+ 	(selection_changed): Remove unused value.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds): Fix pointer
+ 	warning with using an intermediate variable.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	(area_updated): Fix unused var warning for BE archs.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_connectSignals): Remove unused
+ 	var.
+ 	(realize_cb): Mark unused variable unused.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
+ 	(seek_glyphstring_idx): Fix a C90 warning.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
+ 	(Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun):
+ 	Mark unused arguments unused.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_initState),
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setGlyphCodes),
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphCharIndex),
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphIsHorizontal):
+ 	Likewise.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerFontMetrics),
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerTextMetrics):
+ 	Likewise.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter):
+ 	Likewise.
+ 	(filenameFilterCallback): Remove unused var.
+ 	(handle_response): Declare str_fileName and remove last else statement.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c:
+ 	New File.
+ 	(nativeGetNumFontsFamilies) New function.
+ 	(nativeGetFontFamilies) Likewise.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
+ 	(getAvailableFontFamilyNames): Implement.
+ 	* Makefile.am (gtk_c_source_files): Add GdkGraphicsEnvironment.c.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java
+ 	(setStandardAttributes(String,Map)): If size attribute doesn't
+ 	exist, default to size 12.  Clamp size value to a minimum of 1.
+ 
+ 2004-11-30  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* javax/swing/JDialog.java
+ 	(decorated): Likewise.
+ 	* javax/swing/JFrame.java
+ 	(defaultLookAndFeelDecorated): Likewise.
+ 
+ 2004-11-30  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(offset, regular): Made final.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(DECREASE_HIGHLIGHT, INCREASE_HIGHLIGHT, NO_HIGHLIGHT,
+ 	POSITIVE_SCROLL, NEGATIVE_SCROLL): Made final.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/BitwiseXORComposite.java,
+ 	gnu/java/awt/ClasspathToolkit.java,
+ 	gnu/java/awt/image/XBMDecoder.java,
+ 	gnu/java/awt/peer/GLightweightPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkGlyphVector.java:
+ 	Reorganized import statements.
+ 
+ 2004-11-30  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/Button.java
+ 	(next_button_number): Removed useless initializer.
+ 	* java/awt/Frame.java
+ 	(next_frame_number): Likewise.
+ 	* java/awt/Panel.java
+ 	(next_panel_number): Likewise,
+ 	* java/awt/Scrollbar.java
+ 	(next_scrollbar_number): Likewise.
+ 	* java/awt/TextArea.java
+ 	(next_text_number): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/ByteLookupTable.java
+ 	(ByteLookupTable) :Fixed HTML entities in javadocs.
+ 	(lookupPixel): Fix case when dst is null.
+ 	* java/awt/image/ShortLookupTable.java
+ 	(ShortLookupTable) :Fixed HTML entities in javadocs.
+ 	(lookupPixel): Fix case when dst is null.
+ 	* java/awt/image/DataBufferByte.java,
+ 	java/awt/image/DataBufferDouble.java,
+ 	java/awt/image/DataBufferFloat.java,
+ 	java/awt/image/DataBufferInt.java,
+ 	java/awt/image/DataBufferShort.java,
+ 	java/awt/image/DataBufferUShort.java:
+ 	Fix initialization of bankData in constructors.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(setNativeBounds): Set GtkEventBox, GtkButton and GtkLabel size
+ 	requests.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(setNativeBounds): Make package private.  Set size request even
+ 	if GTK parent is NULL.
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
+ 	(setNativeBounds): Set GtkEventBox and GtkLabel size requests.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Workaround for bug #17952.
+ 	*  jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(request_frame_extents): Check window->window != NULL.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni/gtk-peer/gdkfont.h: Include gtkpeer.h not gtkcairopeer.h.
+ 
+ 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Use
+ 	native_text_layout_state_table here.
+ 
+ 	* jni/gtk-peer/gdkfont.h: Mark native_text_layout_state_table extern.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
+ 	(setChars): Only call pango_itemize() when vec->glyphitems != NULL.
+ 	Only call pango_shape() when gi->glyphs->num_glyphs > 0.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java:
+ 	Merged import statements.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(isBufferedImageGraphics): Simplified.
+ 
+ 2004-11-30  Paul Jenner  <psj.home@ntlworld.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(isRootVisible): Fixed typo in method name.
+ 	* javax/swing/JScrollBar.java
+ 	(setValues): Likewise.
+ 	* javax/swing/JScrollPane.java
+ 	(createScrollListener): Call JScrollBar.setValues.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (endValidate):
+ 	Don't call setParentAndBounds on GtkWindowPeers.
+ 
+ 	* java/awt/Component.java (static): Don't set default keyboard
+ 	focus manager.
+ 	* java/awt/KeyboardFocusManager.java
+ 	(getCurrentKeyboardFocusManager): If current keyboard focus
+ 	manager is null set a default.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(gtkWidgetSetBackground): New method.
+ 	(block_expose_events_cb): New function.
+ 	(connectSignals): Block the AWT's expose event processing on
+ 	button press and release.
+ 	(gtkSetLabel): Set text on proper widget.
+ 	(gtkWidgetModifyFont): Modify font on proper widget.
+ 	(gtkWidgetSetBackground): Set normal, active and prelight
+ 	colours.
+ 	(gtkWidgetSetForeground): Set forground colour of proper widget.
+ 	(gtkActivate): Activate the correct widget.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (clearRect):
+ 	Only clear rectangle if the backing component is not an event
+ 	box.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(beginNativeRepaintID): New variable.
+ 	(endNativeRepaintID): Likewise.
+ 	(gtkInit): Initialize new fields with method IDs.
+ 	* jni/gtk-peer/gtkpeer.h (beginNativeRepaintID): Declare extern.
+ 	(endNativeRepaintID): Likewise.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/swing/JList.java (init): Revert accidental commit.
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (GdkGraphics):
+ 	Call initComponentGraphics or connectSignals depending on
+ 	component's realization status.
+ 	(realize_cb): New function.
+ 	(initComponentGraphics): New method.
+ 	(connectSignals): New method.
+ 	(clipRect): Return immediately if component is not realized.
+ 	(setClip): Likewise.
+ 	(translate): Likewise.
+ 	(drawImage variants): Return false immediately if component is
+ 	not realized.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(connectSignals): New method.
+ 	(GdkGraphics2D): Call initComponentGraphics2D or connectSignals
+ 	depending on component's realization status.  Move other
+ 	initialization calls to ...
+ 	(initComponentGraphics2D): New method.
+ 	(realize_cb): New function.
+ 	(cairoSetMatrix): Return immediately if gr is NULL.
+ 	(cairoNewPath): Likewise.
+ 	(cairoRectangle): Likewise.
+ 	(cairoClip): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetRepaintArea): Remove method.
+ 	(isRealized): New method.
+ 	(GtkComponentPeer): Move setParent, connectJObject and setCursor
+ 	calls to setParentAndBounds.  Call setParentAndBounds.
+ 	(setParentAndBounds): New method.
+ 	(setComponentBounds): Return immediately if bounds are all zero.
+ 	(repaint): Remove call to gtkWidgetRepaintArea.  Return
+ 	immediately if requested paint region is 0x0.
+ 	(setCursor): New method.
+ 	(gtkWidgetSetParent): Only set widget's parent if its parent is
+ 	currently NULL.
+ 	(setNativeBounds): Only set widget's bounds if it has a parent.
+ 	(connectSignals): Don't call gtk_widget_realize.  Connect
+ 	"realize" signal to connect_awt_hook_cb handler.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (isValidating):
+ 	New field.
+ 	(beginValidate): Set isValidating true.
+ 	(endValidate): Set parents and bounds for children first, then
+ 	for this.  Set isValidating false.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(connectJObject): Remove method.
+ 	(connectSignals): Don't call gtk_widget_realize.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(connectJObject): Remove method.
+ 	(connectSignals): Don't call gtk_widget_realize.
+ 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
+ 	(connectJObject): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(connectJObject): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(create): Don't call gtk_widget_realize.
+ 	(connectJObject): Remove method.
+ 	(connectSignals): Don't call gtk_widget_realize.  Connect
+ 	"realize" signal to connect_awt_hook_cb handler.
+ 	(nativeSetBounds): Don't attempt to move GDK window if it is
+ 	NULL.
+ 	* java/awt/Container.java (addImpl): Don't call comp.addNotify
+ 	if peer is not null.
+ 	(validateTree): Create peers for all children before calling
+ 	doLayout.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(connectSignals): Don't call gtk_widget_realize.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(connect_awt_hook_cb): New function.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(initComponentGraphicsID): New variable.
+ 	(initComponentGraphics2DID): Likewise.
+ 	(setCursorID): Likewise.
+ 	(gtkInit): Initialize new fields with method IDs.
+ 	* jni/gtk-peer/gtkpeer.h (initComponentGraphicsID): Declare
+ 	extern.
+ 	(initComponentGraphics2DID): Declare extern.
+ 	(setCursorID): Likewise.
+ 	(connect_awt_hook_cb): Declare function.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkGlyphVector.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java,
+ 	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
+ 	gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkClipboard.java,
+ 	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java:
+ 	Import statements reworked.  Some little reformattings.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/AffineTransformOp.java
+ 	(TYPE_BILINEAR): Initialize with 2.
+ 	* java/awt/print/Printable.java: Jalopied.
+ 	(PAGE_EXISTS): Initialize with 0;
+ 	(NO_SUCH_PAGE): Initialized with 1.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* Makefile.am: Add BufferedImageFilter.java.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-30  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(install_font_peer): Minor bug fixes to track cairo font semantics.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/BufferedImageFilter.java: Implement.
+ 
+ 2004-11-30  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* Makefile.am
+ 	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c)
+ 	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c)
+ 	(gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java)
+ 	(gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java): Remove.
+ 	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c)
+ 	(jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c)
+ 	(gnu/java/awt/peer/gtk/GdkTextLayout.java)
+ 	(gnu/java/awt/peer/gtk/GdkFontPeer.java)
+ 	(gnu/java/awt/peer/ClasspathTextLayoutPeer.java): Add
+ 	* Makefile.in: Regenerate.
+ 	* gnu/awt/xlib/XToolkit.java
+ 	(getClasspathTextLayoutPeer): Add stub.
+ 	* gnu/java/awt/ClasspathToolkit.java
+ 	(getClasspathTextLayoutPeer) Add.
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java
+ 	(copyStyleToAttrs)
+ 	(copySizeToAttrs): Make public.
+ 	* gnu/java/awt/peer/ClasspathTextLayoutPeer.java: New file.
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java: Remove.
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java: Remove.
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java: Rewrite.
+ 	* gnu/java/awt/peer/gtk/GdkFontPeer.java: New file.
+ 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java: Adjust type names.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(getFontPeer): New function.
+ 	(drawString): Pass font peer to native side.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(cairoSetFont)
+ 	(cairoShowGlyphs)
+ 	(PainterThread): Remove.
+ 	(GdkGraphics2D): Set hints during construction.
+ 	(shifted)
+ 	(walkPath)
+ 	(draw)
+ 	(setRenderingHint)
+ 	(setRenderingHints): Reimplement normalization logic.
+ 	(getDefaultHints)
+ 	(updateBufferedImage)
+ 	(isBufferedImageGraphics)
+ 	(updateImagePixels)
+ 	(drawImage): Make final.
+ 	(drawImage): Always paint synchronously.
+ 	(drawString)
+ 	(drawGlyphVector): Rewrite.
+ 	(releasePeerGraphicResource)
+ 	(getPeerTextMetrics)
+ 	(getPeerFontMetrics)
+ 	(drawGdkGlyphVector)
+ 	(drawGdkTextLayout)
+ 	(cairoDrawGdkGlyphVector)
+ 	(cairoDrawGdkTextLayout)
+ 	(cairoDrawString)
+ 	(getFontPeer): New functions.
+ 	* gnu/java/awt/peer/gtk/GdkTextLayout.java: New file.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(getFontMetrics): Get metrics via toolkit, to hit cache.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Use getFontMetrics.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (LRUCache): New class.
+ 	(fontCache)
+ 	(metricsCache)
+ 	(imageCache): New members.
+ 	(getFontMetrics)
+ 	(getImage)
+ 	(getClasspathFontPeer): Use caches.
+ 	(getFontPeer): Route through getClasspathFontPeer.
+ 	* java/awt/Font.java (attrsToMap): Remove, adjust ctors.
+ 	* java/awt/font/TextLayout.java: Implement in terms of peer.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(paintThumb): Use polyline rather than polygon.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java:
+ 	Update comment but, alas, still do not switch to using TextLayouts.
+ 	* javax/swing/text/Utilities.java (drawTabbedText):
+ 	Draw text run-at-a-time, not char-at-a-time.
+ 	* jni/gtk-peer/gdkfont.h: Publicize some of the font interface, add
+ 	layout table.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c:
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
+ 	Remove files.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Rewrite to
+ 	incorporate brains of old GdkClasspathFontPeerMetrics.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Rewrite to
+ 	incorporate brains of old GdkClasspathFontPeer.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: New file.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(drawString): Rewrite to use persistent layout in peer font.
+ 	Comment out extraneous gdk_flush calls.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(metrics_cairo)
+ 	(metrics_surface): New static variables.
+ 	(paint_glyph_run)
+ 	(install_font_peer): New helper functions.
+ 	(releasePeerGraphicResource)
+ 	(getPeerTextMetrics)
+ 	(getPeerFontMetrics)
+ 	(cairoDrawGdkTextLayout)
+ 	(cairoDrawGdkGlyphVector): New native methods.
+ 	(cairoDrawString): Rewrite, leaving layout-based version
+ 	commented out for the time being.
+ 	* jni/gtk-peer/gtkpeer.h (graphics): Add fields for pango stuff.
+ 
+ 2004-11-30  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/geom/AffineTransform.java:
+ 	Fixed javadocs overall.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ComponentColorModel.java: Remove FIXME comment since
+ 	it's correct.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/IndexColorModel.java: Fix use of immutable
+ 	BigIntegers.
+ 
+ 2004-11-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java (MessageIcon):
+ 	Renamed from 'messageIcon'.
+ 	(errorIcon, infoIcon, warningIcon, questionIcon): Updated.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/RescaleOp.java: Fix formatting.
+ 
+ 2004-11-30   Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboPopup.java
+ 	(SCROLL_DOWN): made final.
+ 	(SCROLL_UP): made final.
+ 
+ 2004-11-30   Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboPopup.java:
+ 	Added javadocs for undocumented fields.
+ 	(show): scroll down to the selected item and
+ 	highlight selected item.
+ 	(startAutoScrolling): Implemented.
+ 	(stopAutoScrolling): Implemented.
+ 	(autoScrollUp): Implemented.
+ 	(autoScrollDown): Implemented.
+ 	(InvocationMouseHandler.mouseReleased): Implemented.
+ 	(InvocationMouseMotionHandler.mouseDragged): Implemented.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/RescaleOp.java: Implement.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/IndexColorModel.java (getRGBs,
+ 	convertToIntDiscrete): Implement.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/IndexColorModel.java: Add class docs.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/IndexColorModel.java (isValid, getValidPixels):
+ 	Implement.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/MenuBar.java,
+ 	java/awt/peer/MenuBarPeer.java:
+ 	Revert accidentally commited changes.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/AWTKeyStroke.java,
+ 	java/awt/Canvas.java,
+ 	java/awt/CardLayout.java,
+ 	java/awt/CheckboxMenuItem.java,
+ 	java/awt/Component.java,
+ 	java/awt/Container.java,
+ 	java/awt/DefaultKeyboardFocusManager.java,
+ 	java/awt/EventDispatchThread.java,
+ 	java/awt/FileDialog.java,
+ 	java/awt/FlowLayout.java,
+ 	java/awt/Font.java,
+ 	java/awt/Frame.java,
+ 	java/awt/Graphics2D.java,
+ 	java/awt/GraphicsEnvironment.java,
+ 	java/awt/GridBagConstraints.java,
+ 	java/awt/GridBagLayout.java,
+ 	java/awt/GridLayout.java,
+ 	java/awt/Image.java,
+ 	java/awt/KeyboardFocusManager.java,
+ 	java/awt/Label.java,
+ 	java/awt/List.java,
+ 	java/awt/MediaTracker.java,
+ 	java/awt/Menu.java,
+ 	java/awt/MenuBar.java,
+ 	java/awt/MenuComponent.java,
+ 	java/awt/Panel.java,
+ 	java/awt/PopupMenu.java,
+ 	java/awt/ScrollPane.java,
+ 	java/awt/Scrollbar.java,
+ 	java/awt/SystemColor.java,
+ 	java/awt/TextArea.java,
+ 	java/awt/TextField.java,
+ 	java/awt/Toolkit.java,
+ 	java/awt/Window.java,
+ 	java/awt/color/ICC_Profile.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/awt/datatransfer/StringSelection.java,
+ 	java/awt/datatransfer/SystemFlavorMap.java,
+ 	java/awt/dnd/Autoscroll.java,
+ 	java/awt/dnd/DropTarget.java,
+ 	java/awt/dnd/DropTargetContext.java,
+ 	java/awt/dnd/DropTargetDragEvent.java,
+ 	java/awt/dnd/peer/DropTargetContextPeer.java,
+ 	java/awt/event/AdjustmentEvent.java,
+ 	java/awt/event/InputEvent.java,
+ 	java/awt/event/InvocationEvent.java,
+ 	java/awt/event/KeyEvent.java,
+ 	java/awt/event/MouseEvent.java,
+ 	java/awt/font/TextLayout.java,
+ 	java/awt/geom/GeneralPath.java,
+ 	java/awt/geom/Point2D.java,
+ 	java/awt/im/InputContext.java,
+ 	java/awt/im/spi/InputMethodContext.java,
+ 	java/awt/image/AffineTransformOp.java,
+ 	java/awt/image/BufferedImage.java,
+ 	java/awt/image/ColorModel.java,
+ 	java/awt/image/ComponentColorModel.java,
+ 	java/awt/image/CropImageFilter.java,
+ 	java/awt/image/DirectColorModel.java,
+ 	java/awt/image/MemoryImageSource.java,
+ 	java/awt/image/PackedColorModel.java,
+ 	java/awt/image/PixelGrabber.java,
+ 	java/awt/image/RasterOp.java,
+ 	java/awt/peer/MenuBarPeer.java:
+ 	Some fixes for checkstyle. Import statement and modifier order
+ 	redordering.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java
+ 	(setModel): Reimplemented.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(append): Re-implemented.
+ 	(insert): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JSpinner.java
+ 	(serialVersionUID): New static field.
+ 	* javax/swing/JToggleButton.java
+ 	(JToggleButton): Fixed email addresses.
+ 	* javax/swing/SpinnerNumberModel.java
+ 	(serialVersionUID): Added javadoc.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java:
+ 	Don't use JTextComponent.doc directly. GCJ from java-gui-branch has a
+ 	bug here which is fixed in HEAD ...
+ 
+ 2004-11-30  Andrew John Hughes  <address@hidden>
+ 
+ 	* javax/swing/JTextArea.java: Added additional
+ 	documentation.
+ 
+ 2004-11-30  Andrew John Hughes  <address@hidden>
+ 
+ 	* javax/swing/JRadioButton.java:
+ 	Implemented additional constructors and accessibility
+ 	classes.  Added documentation and fixed a typo in
+ 	AbstractButton.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/IndexColorModel.java (IndexColorModel): Implement
+ 	missing constructor.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ComponentColorModel.java (ComponentColorModel):
+ 	Implement missing 1.4 constructor.
+ 
+ 2004-11-30  Andrew John Hughes  <address@hidden>
+ 
+ 	* javax/swing/JToggleButton.java:
+ 	Implemented additional constructors and accessibility
+ 	classes.  Added documentation and fixed a typo in
+ 	AbstractButton.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ColorModel.java (getDataElement,
+ 	getDataElements): Document since 1.4.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/BandedSampleModel.java: Implement.
+ 	* Makefile.am: Add java/awt/image/BandedSampleModel.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Window.java: Fixed whitespace difference with GNU
+ 	classpath.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am: Add javax/swing/SpinnerListModel.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* javax/swing/SpinnerListModel.java, javax/swing/SpinnerModel.java
+ 	Implemented SpinnerListModel.  Added documentation to
+ 	SpinnerModel.
+ 
+ 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(init_dpi_conversion_factor): Apply the patch from main correctly.
+ 	2004-06-26  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 2004-11-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Bug 9948.
+ 	* javax/swing/JDesktopPane.java (LIVE_DRAG_MODE): Now final.
+ 	(OUTLINE_DRAG_MODE): LIVE_DRAG_MODE.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(NON_CONTINUOUS_DIVIDER): Now final.  Initialize.
+ 
+ 2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/Canvas.java
+ 	(AccessibleAWTCanvas): added serialization UID
+ 	* java/awt/Label.java
+ 	(AccessibleAWTLabel): added serialization UID
+ 	* javax/swing/JRootPane.java
+ 	(AccessibleJRootPane): added comment to existing UID
+ 	* javax/swing/JSpinner.java
+ 	(DefaultEditor): added serialization UID
+ 	(NumberEditor): added serialization UID
+ 	* javax/swing/text/html/HTML.java
+ 	(UnknownTag): added serialization UID
+ 
+ 2004-11-30  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* javax/swing/JInternalFrame.java
+ 	(CONTENT_PANE_PROPERTY,FRAME_ICON_PROPERTY,GLASS_PANE_PROPERTY,
+ 	IS_CLOSED_PROPERTY,IS_ICON_PROPERTY,IS_MAXIMUM_PROPERTY,
+ 	IS_SELECTED_PROPERTY,LAYERED_PANE_PROPERTY,MENU_BAR_PROPERTY,
+ 	ROOT_PANE_PROPERTY,TITLE_PROPERTY): Made final as per API spec.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(CLOSE_CMD,ICONIFY_CMD,MAXIMIZE_CMD,MOVE_CMD,RESTORE_CMD,SIZE_CMD):
+ 	Made final as per API spec.
+ 
+ 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gtkpeer.h: Remove duplicated copyright string.
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/Arc2D.java: Reformatted.
+ 	(setArc): Correct documentation to say 'upper left corner'.
+ 	(setArcByTangent,contains,intersects): Implemented.
+ 	(containsAngle): Corrected to handle negative extents.
+ 	(ArcIterator): Set to private.
+ 	(ArcIterator): Corrected for CHORD-type arcs, negative extents.
+ 	(intersects): Fix: Now checks the arc segment.
+ 	(contains): Cleaned up.
+ 	* java/awt/geom/CubicCurve2a.javaD: Fix insideness-test. Reindent.
+ 	(contains): Implemented.
+ 	(intersects): Implemented.
+ 	* java/awt/geom/QuadCurve2D.java: Fix insideness-test. Reindent.
+ 	* java/awt/geom/GeneralPath: Fix insideness-test. Reindent and
+ 	document.  Fully (re)implemented using separate xpoints and ypoints
+ 	float[] coords.
+ 
+ 2004-11-30  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* configure.ac: Introduce AC_C_BIGENDIAN_CROSS for WORDS_BIGENDIAN.
+ 	* configure: Regenerate.
+ 	* include/config.h.in: Likewise.
+ 	* jni/gtk-peer/gtkpeer.h (SWAPU32): Introduce macro to swap pixels.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c: Moved SWAPU32
+ 	macro to gtkpeer.h.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePixels): Convert
+ 	pixels from  0xBBGGRRAA to 0xAARRGGBB only on Little Endian
+ 	architectures.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_updated):
+ 	Likewise.
+ 
+ 2004-11-30  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/SystemColor.java: Fix @link doc entries.
+ 
+ 2004-11-30  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/RenderingHints.java: Documented.
+ 	(RenderingHints): Accept null init Map.
+ 	(putAll): Preprocess map to generate appropriate exceptions.
+ 	(remove): Cast object to Key and remove from hintMap.
+ 
+ 2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/MenuComponent.java, java/awt/MenuBar.java:
+ 	Implementation of accessibility classes and methods
+ 	for these two components.
+ 
+ 2004-11-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/KeyboardFocusManager.java:
+ 	Added missing documentation.
+ 
+ 2004-11-30  Andrew John Hughes <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/Label.java, java/awt/Canvas.java:
+ 	Added accessibility classes to AWT Label and Canvas,
+ 	as well as additional documentation for Canvas.
+ 
+ 2004-11-30  David Gilbert  <address@bogus.example.com>
+ 
+ 	* java/awt/image/DataBuffer.java: Update API documentation.
+ 	* java/awt/image/DataBufferByte.java: Likewise.
+ 	* java/awt/image/DataBufferDouble.java: Likewise.
+ 	* java/awt/image/DataBufferFloat.java: Likewise.
+ 	* java/awt/image/DataBufferInt.java: Likewise.
+ 	* java/awt/image/DataBufferShort.java: Likewise.
+ 	* java/awt/image/DataBufferUShort.java: Likewise.
+ 
+ 2004-11-30  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/awt/Component.java (postEvent):
+ 	Only delegate to parent if a parent exists.
+ 	Reported by: Stephane Meslin-Weber <steph@tangency.co.uk>
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	*java/awt/AWTEventMulticaster.java,
+ 	java/awt/Adjustable.java,
+ 	java/awt/Point.java,
+ 	java/awt/Polygon.java,
+ 	java/awt/Rectangle.java,
+ 	java/awt/Shape.java,
+ 	java/awt/geom/Area.java,
+ 	java/awt/geom/Ellipse2D.java,
+ 	java/awt/geom/PathIterator.java,
+ 	java/awt/geom/Point2D.java,
+ 	java/awt/geom/Rectangle2D.java,
+ 	java/lang/Comparable.java,
+ 	java/util/Arrays.java:
+ 	Fixed documentation errors
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ComponentSampleModel.java: Add documentation.
+ 
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ComponentSampleModel.java (constructor):
+ 	Initialize numBanks when figuring out the max bank index.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/Raster.java (createPackedRaster): Implement
+ 	MultiPixelPackedSampleModel codepath.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/MultiPixelPackedSampleModel.java: Implement.
+ 	* Makefile.am: Add MultiPixelPackedSampleModel.java.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/Raster.java (getNumBands): Implement.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/Raster.java
+ 	(createPackedRaster(int,int,int,int,int,Point)): Implement for
+ 	bands>1.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/SinglePixelPackedSampleModel.java
+ 	(SinglePixelPackedSampleModel): Throw exception for unsupported
+ 	datatype.
+ 
+ 2004-11-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ColorModel.java (getDataElement): Implemented.
+ 	Update javadoc.
+ 	(getDataElements): Add missing version.  Remove bogus version.
+ 	Update javadoc.
+ 
+ 2004-11-30  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java:
+ 	(paintCurrentValue): Pass correct parameters to
+ 	getListCellRendererComponent().
+ 	(ListDataHandler.intervalRemoved): Implemented.
+ 	(PropertyChangeHandler.propertyChange): Handle changes in
+ 	MODEL_CHANGED_PROPERTY of the JComboBox
+ 	* javax/swing/plaf/basic/BasicComboPopup.java:
+ 	(BasicComboPopup): Moved code that configures popup to
+ 	configurePopup() and call it instead.
+ 	(firePopupMenuWillBecomeVisible): Implemented.
+ 	(firePopupMenuWillBecomeInvisible): Likewise.
+ 	(firePopupMenuCanceled): Likewise.
+ 	(configureList): Set list's visibleRowCount same as
+ 	comboBox's visibleRowCount.
+ 	(configurePopup): Implemented.
+ 	(getPopupHeightForRowCount): Get item's from JComboBox's model and
+ 	not from model of the JList.
+ 	(ListMouseMotionHandler.mouseMoved): Implemented.
+ 	(PropertyChangeHandler.propertyChange): Handles change in the
+ 	JComboBox's model.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(isMaximumSizeSet): New method.
+ 	(isMinimumSizeSet): Likewise.
+ 	(isPreferredSizeSet): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JSpinner.java:
+ 	Some Re-formatting.
+ 	(spinner): New field.
+ 	(DefaultEditor): New method.
+ 	(getSpinner): Likewise.
+ 	(NumberEdito): Likewise.
+ 	(getModel): Likewise
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/InputVerifier.java:
+ 	Re-formatted.
+ 	* javax/swing/JComponent.java
+ 	(inputVerifier): New property field.
+ 	(getInputVerifier): New method.
+ 	(setInputVerifier): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(JComponent): Added javadoc comment.
+ 	(setBorder): Fire property change eventr.
+ 	(setEnabled): Likewise.
+ 	(setMaximumSize): Likewise.
+ 	(setMinimumSize): Likewise.
+ 	(setPreferredSize): Likewise.
+ 	(setOpaque): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextField.java
+ 	(action): New field.
+ 	(actionCommand): Likewise.
+ 	(actionPropertyChangeListener): Likewise.
+ 	(setHorizontalAlignment): Abort soon if new value == old value. Fire
+ 	event before repainting.
+ 	(postActionEvent): New method.
+ 	(getAction): Likewise.
+ 	(setAction): Likewise.
+ 	(getActionCommand): Likewise.
+ 	(setActionCommand): Likewise.
+ 	(createActionPropertyChangeListener): Likewise.
+ 	(configurePropertiesFromAction): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DebugGraphics.java:
+ 	Re-formatted. Fixed some javadocs.
+ 	* javax/swing/JApplet.java
+ 	(rootPaneCheckingEnabled): Renamed from checking.
+ 	* javax/swing/JCheckBox.java
+ 	(BORDER_PAINTED_FLAT_CHANGED_PROPERTY): New statif field.
+ 	* javax/swing/JFrame.java:
+ 	Re-formatted a bit and reordered some methods.
+ 	(rootPaneCheckingEnabled): Renamed from checking.
+ 	(getPreferredSize): Simplified.
+ 	* javax/swing/JTextArea.java
+ 	(getColumnWidth): New method.
+ 	(getLineCount): Likewise.
+ 	(getLineStartOffset): Likewise.
+ 	(getLineEndOffset): Likewise.
+ 	(getLineOfOffset): Likewise.
+ 	(getRowHeight): Likewise.
+ 	(insert): Likewise.
+ 	(replaceRange): Likewise.
+ 	* javax/swing/JTextField.java
+ 	(scrollOffset): new field.
+ 	(getScrollOffset): New method.
+ 	(setScrollOffset): Likewise.
+ 	(getColumnWidth): Likewise.
+ 	* javax/swing/JTree.java
+ 	(ANCHOR_SELECTION_PATH_PROPERTY): New static field.
+ 	(CELL_EDITOR_PROPERTY): Likewise.
+ 	(CELL_RENDERER_PROPERTY): Likewise.
+ 	(EDITABLE_PROPERTY): Likewise.
+ 	(EXPANDS_SELECTED_PATHS_PROPERTY): Likewise.
+ 	(INVOKES_STOP_CELL_EDITING_PROPERTY): Likewise.
+ 	(LARGE_MODEL_PROPERTY): Likewise.
+ 	(LEAD_SELECTION_PATH_PROPERTY): Likewise.
+ 	(ROOT_VISIBLE_PROPERTY): Likewise.
+ 	(ROW_HEIGHT_PROPERTY): Likewise.
+ 	(SCROLLS_ON_EXPAND_PROPERTY): Likewise.
+ 	(SELECTION_MODEL_PROPERTY): Likewise.
+ 	(SHOWS_ROOT_HANDLES_PROPERTY): Likewise.
+ 	(TOGGLE_CLICK_COUNT_PROPERTY): Likewise.
+ 	(TREE_MODEL_PROPERTY): Likewise.
+ 	(VISIBLE_ROW_COUNT_PROPERTY): Likewise.
+ 	(cellEditor): New field.
+ 	(invokesStopCellEditing): Likewise.
+ 	(largeModel): Likewise.
+ 	(rowHeight): Likewise.
+ 	(scrollsOnExpand): Likewise.
+ 	(selectionModel): Likewise.
+ 	(toggleClickCount): Likewise.
+ 	(visibleRowCount): Likewise.
+ 	(setShowsRootHandles): Fixed typo in method name.
+ 	(getCellEditor): New method.
+ 	(setCellEditor): Likewise.
+ 	(getSelectionModel): Likewise.
+ 	(setSelectionModel): Likewise.
+ 	(getVisibleRowCount): Likewise.
+ 	(setVisibleRowCount): Likewise.
+ 	(isLargeModel): Likewise.
+ 	(setLargeModel): Likewise.
+ 	(getRowHeight): Likewise.
+ 	(setRowHeight): Likewise.
+ 	(getInvokesStopCellEditing): Likewise.
+ 	(setInvokesStopCellEditing): Likewise.
+ 	(getToggleClickCount): Likewise.
+ 	(setToggleClickCount): Likewise.
+ 	(getScrollsOnExpand): Likewise.
+ 	(setScrollsOnExpand): Likewise.
+ 	* javax/swing/table/DefaultTableColumnModel.java
+ 	(addColumnModelListener): Fixed javadoc.
+ 	(removeColumnModelListener): Implemented. Fixed javadoc.
+ 	(getColumnModelListeners): New method.
+ 	* javax/swing/table/JTableHeader.java
+ 	(columnModel): Made protected.
+ 	(draggedColumn): Likewise.
+ 	(draggedDistance): Likewise.
+ 	(reorderingAllowed): Likewise.
+ 	(resizingAllowed): Likewise.
+ 	(resizingColumn): Likewise.
+ 	(table): Likewise.
+ 	(updateTableInRealTime): Likewise.
+ 	(createDefaultColumnModel): Renamed from
+ 	createDefaultTableColumnModel.
+ 	(setDefaultRenderer): New method.
+ 	* javax/swing/table/TableColumn.java
+ 	(getPropertyChangeListeners): New method.
+ 	* javax/swing/text/DefaultHighlighter.java
+ 	(drawsLayeredHighlights): New field.
+ 	(getDrawsLayeredHighlights): New method.
+ 	(setDrawsLayeredHighlights): Likewise.
+ 	* javax/swing/text/DocumentFilter.java
+ 	(FilterBypass): New inner class.
+ 	(insertString): New method.
+ 	(remove): Likewise.
+ 	(replace): Likewise.
+ 	* javax/swing/text/JTextComponent.java
+ 	(dragEnabled): New field.
+ 	(getSelectedText): New method.
+ 	(getDragEnabled): Likewise.
+ 	(setDragEnabled): Likewise.
+ 	(replaceSelection): Reimplemented.
+ 	* javax/swing/text/NavigationFilter.java
+ 	(FilterBypass): New inner class.
+ 	(NavigationFilter): New method.
+ 	(moveDot): Likewise.
+ 	(setDot): Likewise.
+ 	* javax/swing/text/SimpleAttributeSet.java
+ 	(EMPTY): Made public final.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SpinnerNumberModel.java
+ 	(getMinimum): New method.
+ 	(setMinimum): Likewise.
+ 	(getMaximum): Likewise.
+ 	(setMaximum): Likewise.
+ 	(getStepSize): Likewise.
+ 	(setStepSize): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JMenu.java
+ 	(getMenuListeners): New method.
+ 	(fireMenuSelected): Simplified.
+ 	* javax/swing/JRootPane.java
+ 	(NONE): New static field.
+ 	(FRAME): Likewise.
+ 	(PLAIN_DIALOG): Likewise.
+ 	(INFORMATION_DIALOG): Likewise.
+ 	(ERROR_DIALOG): Likewise.
+ 	(COLOR_CHOOSER_DIALOG): Likewise.
+ 	(FILE_CHOOSER_DIALOG): Likewise.
+ 	(QUESTION_DIALOG): Likewise.
+ 	(WARNING_DIALOG): Likewise.
+ 	(defaultButton): New field.
+ 	(getDefaultButton): New method.
+ 	(setDefaultButton): Likewise.
+ 	* javax/swing/JScrollPane.java
+ 	(getUI): New method.
+ 	(setUI): Likewise.
+ 	* javax/swing/JTable.java
+ 	(getUI): Javadoc added.
+ 	(setUI): New method.
+ 	* javax/swing/JViewport.java
+ 	(getUI): New method.
+ 	(setUI): Likewise.
+ 	* javax/swing/UIDefaults.java
+ 	(removePropertyChangeListener): Made public.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JApplet.java, javax/swing/JFrame.java:
+ 	Re-indented.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	Little re-formatting.
+ 	(changeEvent): Made protected.
+ 	(fireStateChanged): Removed argument.
+ 	(setHorizontalAlignment): Abort method when old value is equal too new
+ 	value.
+ 	(setHorizontalTextPosition): Likewise.
+ 	(setVerticalAlignment): Likewise.
+ 	(setVerticalTextPosition): Likewise.
+ 	(setBorderPainted): Likewise.
+ 	(setIcon): Likewise.
+ 	(setText): Likewise.
+ 	(setIconTextGap): Likewise.
+ 	(setMargin): Likewise.
+ 	(setPressedIcon): Likewise.
+ 	(setFocusPainted): Likewise.
+ 	(setDisabledSelectedIcon): Likewise.
+ 	(setRolloverIcon): Likewise.
+ 	(setRolloverSelectedIcon): Likewise.
+ 	(setSelectedIcon): Likewise.
+ 	(setContentAreaFilled): Likewise.
+ 
+ 2004-11-30  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	Jalopy. Reimplement.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	Jalopy.
+ 	(arrowIcon, upIcon, downIcon, leftIcon,
+ 	rightIcon): Removed.
+ 	(createIncreaseButton): Use BasicArrowButton.
+ 	(createDecreaseButton): Ditto.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
+ 	(createRightOneTouchButton): Remove button border.
+ 	(createLeftOneTouchButton): Ditto.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JSpinner.java
+ 	(setModel): New method.
+ 	* javax/swing/SpringLayout.java
+ 	(Constraints): May not be final.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkClipboard.java,
+ 	java/awt/datatransfer/Clipboard.java,
+ 	java/awt/datatransfer/ClipboardOwner.java:
+ 	Reformated to make it use our coding standard.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SpinnerNumberModel.java
+ 	(SpinnerNumberModel): Implements java.io.Serializable.
+ 	(serialVersionUID): New field.
+ 	(SpinnerNumberModel): Added missing @throws tags to javadocs.
+ 	* javax/swing/UIManager.java
+ 	(get): New method.
+ 	(getBoolean): Likewise.
+ 	(getBorder): Likewise.
+ 	(getColor): Likewise.
+ 	(getDimension): Likewise.
+ 	(getFont): Likewise.
+ 	(getIcon): Likewise.
+ 	(getInsets): Likewise.
+ 	(getInt): Likewise.
+ 	(getString): Likewise.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JPasswordField.java:
+ 	Reformated. Implemented construtors.
+ 	* javax/swing/plaf/basic/BasicPasswordFieldUI.java
+ 	(create): New method.
+ 	* javax/swing/text/PlainView.java
+ 	(selectedColor): Made package-private to allow access from sub-classes
+ 	in same package too.
+ 	(unselectedColor): Likewise.
+ 	(font): Likewise.
+ 	(drawSelectedText): Make protected.
+ 	(drawUnselectedText): Likewise.
+ 	* javax/swing/text/PasswordView.java: New file.
+ 	* Makefile.am: Added javax/swing/text/PasswordView.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Set menu
+ 	bar's width.
+ 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (nativeSetHelpMenu):
+ 	Add FIXME comment.
+ 	(addHelpMenu): Elide call to nativeSetHelpMenu.
+ 	* java/awt/Menu.java (isTearOff): Rename to tearOff.
+ 	(menuSerializedDataVersion): Initialize to 1.
+ 	(separatorLabel): Mark transient.
+ 	(insert(MenuItem,int)): Implement.
+ 	* java/awt/MenuBar.java (setHelpMenu): Call getPeer to retrieve
+ 	peer.
+ 	(countMenus): Count help menu.
+ 	* java/awt/MenuComponent.java (nameExplicitlySet, newEventsOnly,
+ 	accessibleContext): Add fields.
+ 	* java/awt/MenuItem.java: Remove event mask FIXME.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(gtkWidgetModifyFont): Only set font if label is non-NULL.
+ 	(setLabel): Don't treat "-" specially.
+ 
+ 2004-11-30  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/colorchooser/DefaultHSBChooserPanel.java:
+ 	(stateChanged): Only update the image and the track if
+ 	the values are not being adjusted.
+ 	(updateChooser): Grab the new mouse point from the
+ 	spinner values. Update the image and track only if
+ 	the values are not being adjusted.
+ 	(getHSBValues): New method.
+ 	* javax/swing/colorchooser/DefaultRGBChooserPanel.java:
+ 	(SliderHandler::stateChanged): Changed internalChange
+ 	to updateChange. Set sliderChange.
+ 	(SpinnerHandler::stateChanged): Ditto. Set spinnerChange.
+ 	(spinnerChange): New variable.
+ 	(sliderChange): Ditto.
+ 	(updateChange): Renamed from internalChange.
+ 	(updateChooser): Do not update sliders if the sliders
+ 	were the original source of the change. Ditto for spinners.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	(mousePress): Don't scroll the JViewport if there will
+ 	be extra space at the end of the run. Change layout() to
+ 	revalidate().
+ 	(calculateSize): Use the component's width/height unless
+ 	it is smaller than the max tab width/height.
+ 	(calculateTabRects): Subtract the tab run overlay.
+ 	(rotateTabRuns): Don't rotate if there's only one run.
+ 	(layoutContainer): Reuse the viewport point.
+ 	(createLayoutManager): Set the viewport to use no layout.
+ 	(paintTabArea): Don't paint the tabs that are not visible
+ 	to the JViewport.
+ 	(paintContentBorderTopEdge): Check for scroll tab layout before
+ 	looking for gap.
+ 	(paintContentBorderLeftEdge): Ditto.
+ 	(paintContentBorderBottomEdge): Ditto.
+ 	(paintContentBorderRightEdge): Ditto.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java (gtkWidgetSetFont):
+ 	Rename ...
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
+ 	(setMenuBarWidth): New method.
+ 	(setBounds): Set the menu bar width.
+ 	(postConfigureEvent): Set the menu bar width if the window's
+ 	width has changed.
+ 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (GtkMenuBarPeer):
+ 	Don't call create.
+ 	(setFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java (create): New
+ 	method.
+ 	(setFont): Likewise.
+ 	(GtkMenuComponentPeer): Call create and setFont.
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(connectSignals): Make package private.
+ 	(gtkWidgetModifyFont): New method.
+ 	(create): Likewise.
+ 	(GtkMenuItemPeer): Don't call create.
+ 	(setFont): New method.
+ 	* java/awt/CheckboxMenuItem.java (addNotify): Fix peer == null
+ 	condition.
+ 	* java/awt/Container.java (validateTree): Fix comment typos.
+ 	* java/awt/MenuComponent.java (getFont): Return parent's font if
+ 	our font is null.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
+ 	(create): Remove call to deprecated
+ 	gtk_check_menu_item_set_show_toggle function.
+ 
+ 2004-11-30  Hans Boehm <Hans.Boehm@hp.com>
+ 
+ 	* java/lang/natObject.cc (LOCK_LOG, LOG): Add debug tracing.
+ 	(Almost everywhere): add LOG calls, fix, add comments.
+ 	(_Jv_MonitorEnter): Replace masking of LOCKED bit with assertion.
+ 	Add explicit check for LOCKED bit in slow case (PR 16662).
+ 	(_Jv_MonitorExit): Add casts in debug-only code.
+ 	Always release LOCKED bit before throwing exception.
+ 	(_Jv_ObjectCheckMonitor): Lock may be held if lightweight lock
+ 	isn't.  Handle easy cases without lock acquisition.
+ 	(Object::wait): Use NotifyAll for lock inflation.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
+ 	(gtkFixedMove): Remove method.
+ 
+ 2004-11-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/Area.java: Implemented.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/geom/Arc2D.java (ArcIterator): Make package private.
+ 
+ 2004-11-30 Sven de Marothy <sven@physto.se>
+ 
+ 	* java/awt/geom/Arc2D.java
+ 	Reformatted.
+ 	(setArc): Correct documentation to say 'upper left corner'.
+ 	(setArcByTangent,contains,intersects): Implemented.
+ 	(containsAngle): Corrected to handle negative extents.
+ 	(ArcIterator): Set to private.
+ 	(ArcIterator): Corrected for CHORD-type arcs, negative extents.
+ 	* java/awt/geom/Ellipse2D.java
+ 	Documented.
+ 	(contains,intersects): Implemented.
+ 	* java/awt/geom/Line2D.java
+ 	(linesIntersect): Correct handling of special cases.
+ 
+ 2004-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Use
+ 	Color.BLACK if c == null, don't create new Color object each time.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (comp): New private
+ 	field.
+ 	(setColor): Use Color.BLACK when argument null.
+ 	(setComposite): Set this.comp field.
+ 	(getComposite): Return this.comp, or AlphaComposite.SrcOver when null.
+ 	(DrawState.comp): New private field.
+ 	(DrawState.save): Save Composite.
+ 	(DrawState.restore): Restore comp field.
+ 	* java/awt/FontMetrics.java (gRC): New static final private field.
+ 	(getLineMetrics(String, Graphics)): New method.
+ 	(getLineMetrics(String, int, int, Graphics)): Likewise.
+ 	(getLineMetrics(char[], int, int, Graphics)): Likewise.
+ 	(getLineMetrics(CharacterIterator, int, int, Graphics)): Likewise.
+ 	* javax/swing/JMenu.java (JMenu(String, boolean)): Ignore tearoff
+ 	argument. PR SWING/17294.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java (): Always use
+ 	the fall-back code since none of the TextArea methods are really
+ 	implemented now. PR SWING/17296.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
+ 	(GdkGlyphVector_setChars): Replace assert() with if block when
+ 	pango_itemize() returns null. PR AWT/17295.
+ 	(GdkGlyphVector_allInkExtents): Likewise when vec->glyphitems is null.
+ 
+ 2004-11-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* Makefile.am (gtk_c_source_files): Add
+ 	gnu_java_awt_peer_gtk_GtkFramePeer.c.
+ 	* Makefile.in: Regenerate.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (getClipBounds): Remove
+ 	comment.
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(create): Pack GtkButton in GtkEventBox.
+ 	(connectJObject): Remove.
+ 	(focus_in_cb): New function.
+ 	(focus_out_cb): Likewise.
+ 	(connectSignals): Connect focus-in-event and focus-out-event
+ 	signals.
+ 	(gtkSetFont): Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	(gtkWidgetRequestFocus): New method.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(gtkSetFont): Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(isInRepaint): New field.
+ 	(gtkSetFont): Remove method.
+ 	(addExposeFilter): Likewise.
+ 	(removeExposeFilter): Likewise.
+ 	(gtkWidgetQueueDrawArea): Rename to ...
+ 	(gtkWidgetRepaintArea): New method.
+ 	(beginNativeRepaint): New method.
+ 	(endNativeRepaint): New method.
+ 	(setComponentBounds): Move implementation here from
+ 	GtkComponentPeer.
+ 	(paint): Remove implementation.
+ 	(repaint): Wrap call to gtkWidgetRepaintArea with calls to
+ 	beginNativeRepaint and endNativeRepaint.
+ 	(setBounds): Use menu bar height in bounds calculation.
+ 	(postExposeEvent): Only post paint event if we're not doing a
+ 	native repaint.
+ 	(gtkWidgetSetParent): Replace gtk_layout_put with gtk_fixed_put.
+ 	(setNativeBounds): Replace gtk_layout_move with gtk_fixed_move.
+ 	(find_gtk_layout): Remove function.
+ 	(filter_expose_event_handler): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (postExposeEvent):
+ 	Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(setComponentBounds): Call GtkComponentPeer's
+ 	setComponentBounds.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight):
+ 	New method.
+ 	(moveLayout): Rename to ...
+ 	(gtkFixedMove): New method.
+ 	(gtkLayoutSetVisible): Rename to ...
+ 	(gtkFixedSetVisible): New method.
+ 	(setMenuBar): Rearrange, to make the three separate cases
+ 	clearer.
+ 	(postExposeEvent): Only post paint event if we're not doing a
+ 	native repaint.
+ 	* gnu/java/awt/peer/gtk/GtkGenericPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,Color)):
+ 	Call run directly, rather than spawning a new thread.
+ 	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,int,int,int,int,Color)):
+ 	Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (gtkSetFont):
+ 	Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	(create): Rename ebox to eventbox.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
+ 	Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
+ 	(GtkMenuComponentPeer): Set the default font.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(gtkSetFont): Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
+ 	* java/awt/Component.java (locale): Initialize to default
+ 	locale.
+ 	* java/awt/Container.java (invalidateTree): Make
+ 	package-private.
+ 	(paint): Paint self first.
+ 	(setMenuBar): Call invalidateTree.
+ 	* java/awt/Panel.java (dispatchEventImpl): Remove method.
+ 	* java/awt/Window.java (show): Call no-parameter variant of
+ 	requestFocusInWindow.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (initState):
+ 	Remove special case for window widget.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(grab_current_drawable): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
+ 	(create): Replace GtkLayout with GtkFixed.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Remove special cases for GDK_EXPOSE events.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: New file.
+ 	Move all GtkFramePeer native method implementations here from
+ 	gnu_java_awt_peer_gtk_GtkWindowPeer.c.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
+ 	Replace GtkLayout with GtkFixed.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(find_layout): Remove function.
+ 	(create): Replace GtkLayout with GtkFixed.
+ 	(connectSignals): Remove find_layout call.
+ 	(toBack): Replace XFlush with gdk_flush.
+ 	(toFront): Replace XFlush with gdk_flush.
+ 	Move GtkFramePeer native method implementations to
+ 	gnu_java_awt_peer_gtk_GtkFramePeer.c.
+ 	* jni/gtk-peer/gtkpeer.h: Remove declaration of find_gtk_layout.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(lineWrap): Renamed from "wrapping".
+ 	(wrapStyleWord): NEw field.
+ 	(getLineWrap): Re-edited javadoc comment.
+ 	(setLineWrap): Likewise.
+ 	(getWrapStyleWord): New method.
+ 	(setWrapStyleWord): Likewise.
+ 
+ 2004-11-29  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure: Regenerate for libtool change.
+ 
+ 2004-11-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/tools/gcj_dbtool/Main.java (main): Mention gcj-dbtool.
+ 	Recognize --help and --version.
+ 	(usage): Mention gcj-dbtool.  Added "out" argument.
+ 	(insist): Updated.
+ 
+ 2004-11-29  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* link.cc (link_symbol_table): Do not use intptr_t.
+ 
+ 2004-11-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* mauve-libgcj: Disable SpinnerListModel, SwingUtilities and
+ 	XMLDecoder tests which currently don't compile.
+ 
+ 2004-11-27  Andrew Haley  <aph@redhat.com>
+ 
+ 	* link.cc (ensure_class_linked): Conditionally compile
+ 	_Jv_IsInterpretedClass on INTERPRETER.
+ 	(print_class_loaded): Likewise.
+ 	(wait_for_state): Likewise.
+ 	* include/jvm.h (ROUND): Move to here from include/java-interp.h.
+ 	* include/java-interp.h (ROUND): Remove.
+ 
+ 2004-11-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/util/natDebug.cc (getField): Don't qualify name.
+ 	* java/lang/Class.h (_Jv_Linker): Declare.
+ 	(Class): Fix names of friends.
+ 	(_Jv_getInterfaceMethod): Declare.
+ 
+ 2004-11-25  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* testsuite/lib/libjava.exp (libjava_arguments): Add new global
+ 	variable libjava_ld_library_path.
+ 	(gcj_invoke, libjava_invoke): Use it to set ld_library_path.
+ 
+ 2004-11-25  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (BundleKey): Don't implement
+ 	Cloneable.
+ 	(BundleKey.clone): Removed.
+ 	(getBundle): Copy BundleKey using constructor, not clone().
+ 
+ 2004-11-25  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure: Regenerate for libtool reversion.
+ 
+ 2004-11-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am: Added most of javax.print again.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-11-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am: Added most of javax.print again.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-11-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Merged gcj-abi-2-dev-branch to trunk.
+ 
+ 2004-11-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/java-interp.h (_Jv_DefineClass): Updated.
+ 	* java/lang/natVMClassLoader.cc (defineClass): Pass protection
+ 	domain to class reader.
+ 	* defineclass.cc (parse): Use print_class_loaded.
+ 	Include ProtectionDomain.h.
+ 	(_Jv_DefineClass): Added ProtectionDomain argument.
+ 	(_Jv_ClassReader): Likewise.
+ 	* include/jvm.h (_Jv_Linker::print_class_loaded): Declare.
+ 	* link.cc: Include CodeSource.h.
+ 	(print_class_loaded): New function.
+ 	(wait_for_state): Use it.
+ 
+ 2004-11-16  Andrew Haley  <aph@redhat.com>
+ 
+ 	* gnu/gcj/util/Debug.java (print): Add RawDataManaged.
+ 
+ 2004-11-16  Andrew Haley  <aph@redhat.com>
+ 
+ 	* configure.ac (LIBGCJ_LD_SYMBOLIC): AC_SUBST this definition.
+ 	* configure.host: Define libgcj_ld_symbolic for Linux hosts.
+ 	* Makefile.am (lib_*_la_LDFLAGS): Add LIBGCJ_LD_SYMBOLIC.
+ 	* configure: Regenerate.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-11-15  Andrew Haley  <aph@redhat.com>
+ 
+ 	* boehm.cc (_Jv_GCRegisterDisappearingLink): Check that *objp is a
+ 	gc-allocated object.
+ 
+ 2004-11-15  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java
+ 	(URLLoader.getClassPath): New method.
+ 	(JarURLLoader.JarURLLoader): Read mainfest to parse "Class-Path"
+ 	attribute and add URLs for each entry.
+ 	(JarURLLoader.classPath): New field.
+ 	(JarURLLoader.getClassPath): New method.
+ 	(addURLImpl): Scan through the list of extraUrls in the new
+ 	loader, adding them to our urlinfos.
+ 	(definePackage, findURLResource, findResources): Use
+ 	urlinfos.size(), not urls.size().
+ 
+ 2004-11-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/runtime/natSharedLibLoader.cc (ensureSupersLinked): New
+ 	method.
+ 	* gnu/gcj/runtime/SharedLibHelper.java (findClass): Ensure supers
+ 	linked.
+ 	(ensureSupersLinked): Declare.
+ 	* java/lang/natVMClassLoader.cc (loadClass): Ensure supers
+ 	linked.
+ 
+ 2004-11-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gij.cc (main): Treat -verbose the same as -verbose:class.
+ 	(help): Document -verbose and -verbose:class.
+ 
+ 	* link.cc (verbose_class_flag): Declare.
+ 	(wait_for_state): Print message when handling precompiled class.
+ 	* java/lang/natClass.cc (verbose_class_flag): Moved to link.cc.
+ 
+ 2004-11-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* testsuite/libjava.lang/assign2.out: New file.
+ 	* testsuite/libjava.lang/assign2.java: New file.
+ 
+ 	* java/lang/natRuntime.cc (insertSystemProperties): Set
+ 	java.version to 1.4.2 and java.specification.version to 1.4.  Set
+ 	java.runtime.version.
+ 
+ 2004-11-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natClass.cc (_Jv_IsAssignableFromSlow): Ensure
+ 	supers installed.
+ 	* link.cc (verify_type_assertions): Don't link supers.
+ 
+ 	* include/jvm.h (_Jv_Linker::search_method_in_class): Declare.
+ 	* include/java-interp.h (class _Jv_InterpClass)
+ 	<_Jv_PrepareMissingMethods>: No longer `friend'.
+ 	* java/lang/Class.h (_Jv_SearchMethodInClass): No longer
+ 	`friend'.
+ 	(_Jv_PrepareMissingMethods, _Jv_PrepareCompiledClass,
+ 	_Jv_GetInterfaces, _Jv_GenerateITable, _Jv_FindIIndex,
+ 	_Jv_AppendPartialITable, _Jv_LinkSymbolTable,
+ 	_Jv_LayoutInterfaceMethods, _Jv_SetVTableEntries, _Jv_MakeVTable,
+ 	_Jv_linkExceptionClassTable, _Jv_WaitForState): Likewise.
+ 	* link.cc (search_method_in_class): Renamed from
+ 	_Jv_SearchMethodInClass.
+ 	(resolve_pool_entry): Updated.
+ 
+ 	* include/jvm.h (_Jv_CheckAssignment): Removed.
+ 	* java/lang/natClass.cc (_Jv_CheckAssignment): Removed.
+ 
+ 2004-11-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* link.cc (verify_type_assertions): Ensure classes have supers
+ 	linked.  Strip off array types first.
+ 
+ 2004-11-05  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* link.cc: Include VerifyError.h.
+ 	(_Jv_Linker::verify_type_assertions): New. Read and evaluate entries
+ 	in the type assertion table.
+ 	* include/execution.h (_Jv_CompiledEngine::do_verify): Use
+ 	verify_type_assertions.
+ 	* include/jvm.h (_Jv_Linker::verify_type_assertions): declare.
+ 	* java/lang/Class.h (JV_ASSERT_END_OF_TABLE,
+ 	JV_ASSERT_TYPES_COMPATIBLE, JV_ASSERT_IS_INSTANTIABLE): Declare
+ 	assertion code values.
+ 	(struct _Jv_TypeAssertion): Declare.
+ 	(assertion_table): New class field.
+ 	(verify): Remove class field.
+ 
+ 2004-11-05  Andrew Haley  <aph@redhat.com>
+ 
+ 	* Makefile.am: Move jv_dbtool.java to
+ 	gnu/gcj/tools/gcj_dbtool/Main.java.
+ 	* Makefile.in: Rebuild.
+ 	* java/lang/VMCompiler.java: Rename property
+ 	"gnu.gcj.precompiled.db" to "gnu.gcj.precompiled.db.path".
+ 	* gnu/gcj/tools/gcj_dbtool/Main.java: moved here from
+ 	jv_dbtool.java.
+ 
+ 2004-11-05  Andrew Haley  <aph@redhat.com>
+ 
+ 	* jv_dbtool.java (main): Allow the user to specify the size of the
+ 	database.  Display the capacity and the size.
+ 	(usage): Show the new option.
+ 
+ 2004-11-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/jvm.h (_Jv_Linker::set_vtable_entries): Updated.
+ 	* link.cc (make_vtable): Use correct index when searching for
+ 	missing method's name.  Don't use `flags'.
+ 	(set_vtable_entries): Removed `flags' argument.  Don't recurse
+ 	into superclasses.
+ 	(link_symbol_table): Ensure target class method table is
+ 	complete.  Ensure target fields are laid out before entering
+ 	loop.
+ 
+ 	* java/lang/natClass.cc (_Jv_getInterfaceMethod): Indentation
+ 	fix.
+ 
+ 	* interpret.cc (do_verify): Don't verify abstract methods.
+ 
+ 2004-11-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* link.cc (wait_for_state): Call verify_class.
+ 
+ 	* verify.cc (state::check_no_uninitialized_objects): Removed.
+ 	(push_jump): Updated.
+ 	(push_exception_jump): Likewise.
+ 	(handle_ret_insn): Likewise.
+ 	(handle_jsr_insn): Likewise.
+ 
+ 2004-10-28  Andrew Haley  <aph@redhat.com>
+ 
+ 	* gnu/gcj/runtime/PersistentByteMap.java: New file.
+ 	* jv_dbtool.java: New file.
+ 	* Makefile.am (bin_PROGRAMS): Add jv-dbtool
+ 	(jv_dbtool_SOURCES, jv_dbtool_LDFLAGS, jv_dbtool_LINK)
+ 	(jv_dbtool_LDADD, jv_dbtool_DEPENDENCIES): New.
+ 	* Makefile.in: Regenerate,
+ 	* java/lang/VMCompiler.java: Import NoSuchAlgorithmException,
+ 	Enumeration, StringTokenizer, Vector, PersistentByteMap.
+ 	(precompiledMapFiles): New variable.
+ 	(VMCompiler static intializer): Read "gnu.gcj.precompiled.db" to
+ 	initialize precompiledMapFiles.
+ 	(compileClass): Look at the database of precompiled class files
+ 	before firing up gcj.
+ 
+ 	* gnu/gcj/runtime/VMClassLoader.java (findClass): Fix comment.
+ 
+ 2004-10-27  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/VMCompiler.java (compileClass): try looking for
+ 	precompiledMapFiles.
+ 	* gnu/gcj/runtime/PersistentByteMap.java: New file.
+ 
+ 2004-10-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* link.cc (ensure_class_linked): Only resolve classes for
+ 	compiled classes.
+ 	(add_miranda_methods): Ensure interface supers are installed.
+ 	(resolve_pool_entry): Better error message.
+ 
+ 2004-10-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* boehm.cc (_Jv_MarkObj): Test aux_info before dereferencing it.
+ 
+ 	* java/util/ResourceBundle.java (tryBundle): Use
+ 	Class.isAssignableFrom rather than catching ClassCastException.
+ 
+ 	* java/util/zip/InflaterInputStream.java (fill): Don't throw an
+ 	exception if we hit EOF of `in'.
+ 	(read): Handle case where inflating returns -1.
+ 
+ 	* gnu/java/text/WordBreakIterator.java (WordBreakIterator): Don't
+ 	initialize `iter'.
+ 	* gnu/java/text/SentenceBreakIterator.java
+ 	(SentenceBreakIterator): Don't initialize `iter'.
+ 	* gnu/java/text/LineBreakIterator.java (LineBreakIterator): Don't
+ 	initialize `iter'.
+ 	* gnu/java/text/CharacterBreakIterator.java
+ 	(CharacterBreakIterator): Don't initialize `iter'.
+ 	* gnu/java/text/BaseBreakIterator.java (BaseBreakIterator): New
+ 	constructor.
+ 	* java/text/BreakIterator.java: Updated documentation.
+ 
+ 2004-10-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (tryBundle): Also ignore
+ 	ClassCastException.
+ 
+ 2004-10-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* interpret.cc (do_post_miranda_hook): New method.
+ 	* include/execution.h (_Jv_ExecutionEngine::post_miranda_hook):
+ 	New field.
+ 	(_Jv_CompiledEngine::do_post_miranda_hook): New method.
+ 	(_Jv_CompiledEngine): Initialize new field.
+ 	(_Jv_InterpreterEngine::do_post_miranda_hook): Declare.
+ 	(_Jv_InterpreterEngine): Initialize new field.
+ 	* link.cc (resolve_pool_entry): Put Miranda methods in target
+ 	class.
+ 	(ensure_method_table_complete): Call post_miranda_hook.
+ 	* java/lang/natVMClassLoader.cc (defineClass): Don't set class'
+ 	aux_info.
+ 	* defineclass.cc (read_one_method_attribute): Use _Jv_AllocBytes.
+ 	(parse): Set class' aux_info here.
+ 
+ 	* boehm.cc (_Jv_MarkObj): Mark `throws'.
+ 
+ 	* boehm.cc: Re-merged with trunk.
+ 
+ 2004-10-18  Andrew Haley  <aph@redhat.com>
+ 
+ 	PR java/18036:
+ 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Reorganize
+ 	and correct logic used to find interpreter.
+ 
+ 2004-10-13  Andrew Haley  <aph@redhat.com>
+ 
+ 	* interpret.cc (_Jv_InterpMethod::run): Initialize
+ 	_Jv_StartOfInterpreter.
+ 	(_Jv_StartOfInterpreter, _Jv_EndOfInterpreter): Functions removed.
+ 	(_Jv_StartOfInterpreter, _Jv_EndOfInterpreter): New variables.
+ 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Use
+ 	_Unwind_FindEnclosingFunction to discover whether PC is within the
+ 	interpreter.
+ 
+ 2004-10-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* link.cc (find_iindex): Copy correct number of slots to new
+ 	ioffsets.
+ 
+ 2004-10-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* testsuite/libjava.loader/loader.exp (gcj_object_file_name): New
+ 	proc.
+ 	(gcj_loader_test_one): Use it.
+ 	(gcj_loader_run): Likewise.
+ 
+ 	* prims.cc: Don't include FirstThread.h.
+ 
+ 2004-10-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* link.cc (ensure_method_table_complete): Ensure superclass
+ 	Miranda methods installed.
+ 
+ 	* include/java-interp.h (class _Jv_JNIMethod): Added
+ 	JV_MARKOBJ_DECL as a friend.
+ 	* interpret.cc (ncode): Allocate jni_arg_types field with GC.
+ 	* boehm.cc (_Jv_MarkObj): Skip abstract methods when marking
+ 	interpreter method structures.  Mark jni_arg_types of JNI
+ 	methods.
+ 
+ 	* defineclass.cc (parse): Use JV_STATE_READ.
+ 	* java/lang/Class.h (JV_STATE_READ): New enum value.
+ 
+ 2004-10-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* link.cc (resolve_pool_entry): Add signature info to missing
+ 	method's information.
+ 
+ 	* gnu/gcj/util/Debug.java (Debug(int,boolean)): New constructor.
+ 	* gnu/gcj/util/natDebug.cc (_Jv_StaticDeepDebug): New function.
+ 
+ 2004-10-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* boehm.cc (_Jv_MarkObj): Correctly indicate base pointer when
+ 	marking IDT.
+ 
+ 2004-09-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.am (libgcj_la_SOURCES): Mention link.cc, not
+ 	resolve.cc.
+ 	* include/jvm.h (class _Jv_Linker): Renamed from _Jv_Resolver.
+ 	* jni.cc: Use _Jv_Linker.
+ 	* interpret.cc: Use _Jv_Linker.
+ 	* java/lang/reflect/natField.cc (getType): Use _Jv_Linker.
+ 	* java/lang/natClassLoader.cc: Use _Jv_Linker.
+ 	* java/lang/natVMClassLoader.cc (resolveClass): Use _Jv_Linker.
+ 	* java/lang/Class.h: Use _Jv_Linker.
+ 	* java/lang/natClass.cc (initializeClass): Use _Jv_Linker.
+ 	* resolve.cc: Renamed ...
+ 	* link.cc: ... here.  Use _Jv_Linker.
+ 	* defineclass.cc (checkExtends): Use _Jv_Linker.
+ 
+ 2004-09-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* defineclass.cc (handleCodeAttribute): Don't reference
+ 	`deferred'.
+ 	(handleMethodsEnd): Likewise.
+ 	* include/java-interp.h (_Jv_MethodBase::deferred): Removed
+ 	field.
+ 	(_Jv_Defer_Resolution): Don't declare or define.
+ 	* interpret.cc (do_create_ncode): Don't resolve deferred method
+ 	pointers.
+ 	* java/lang/Class.h (_Jv_Defer_Resolution): Don't declare.
+ 	* resolve.cc (link_symbol_table): No need to defer resolution.
+ 
+ 2004-09-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* boehm.cc (MAYBE_MARK): Remove unused `Exit' argument.
+ 	(_Jv_MarkObj): Updated.
+ 	(_Jv_MarkArray): Likewise.
+ 
+ 	* include/jvm.h (StringClass): Removed.
+ 	* jni.cc (_Jv_JNI_ThrowNew): Don't use StringClass.
+ 	* interpret.cc (_Jv_InitField): Don't use StringClass.
+ 	* java/lang/natString.cc (_Jv_StringFindSlot): Don't use
+ 	StringClass.
+ 	(rehash): Likewise
+ 	(intern): Likewise.
+ 	(_Jv_FinalizeString): Likewise.
+ 	(_Jv_NewStringUtf8Const): Likewise.
+ 	(equals): Likewise.
+ 	* prims.cc (JvConvertArgv): Don't use StringClass.
+ 
+ 	* gcj/field.h (struct _Jv_Field): Don't mention COMPACT_FIELDS.
+ 	* resolve.cc (ensure_fields_laid_out): Don't mention
+ 	COMPACT_FIELDS.
+ 	* defineclass.cc (handleField): Don't mention COMPACT_FIELDS.
+ 	* boehm.cc (_Jv_MarkObj): Don't mention COMPACT_FIELDS.
+ 
+ 	* java/lang/reflect/natField.cc (getType): Use resolve_field.
+ 	* java/lang/natVMClassLoader.cc (resolveClass): New native
+ 	implementation.
+ 	(linkClass0): Removed.
+ 	(markClassErrorState0): Likewise.
+ 	* java/lang/natClassLoader.cc: Include execution.h.  Moved class
+ 	preparation code to resolve.cc.
+ 	(_Jv_RegisterClassHookDefault): Set class's execution engine if
+ 	not already set.
+ 	(_Jv_FindClass): Use wait_for_state.
+ 	(_Jv_NewArrayClass): Likewise.  Simplified permissions setting.
+ 	* java/lang/natClass.cc (_Jv_IsInstanceOf): Include execution.h.
+ 	Moved interface table and class preparation code to resolve.cc.
+ 	(finalize): Rewrote.
+ 	(initializeClass): Simplified locking and class preparation.
+ 	* java/lang/VMClassLoader.java (linkClass0): Removed.
+ 	(markClassErrorState0): Likewise.
+ 	(resolveClass): Now native.
+ 	(transformException): New method.
+ 	* java/lang/Class.h (getSuperclass): Don't try to resolve super
+ 	reference.
+ 	(getInterface): Likewise.
+ 	(size): Likewise.
+ 	(set_state): New method.
+ 	(Class): Updated friend declarations.
+ 	(verify): Field now private.
+ 	(engine): New field.
+ 	* include/jvm.h (class _Jv_Resolver): New class declaration.
+ 	(_Jv_ResolveField): Removed declaration.
+ 	(_Jv_CheckAccessNoInit): Likewise.
+ 	(_Jv_isBinaryCompatible): Removed.
+ 	* include/java-interp.h (class _Jv_MethodBase): Updated friend
+ 	declarations.
+ 	(class _Jv_InterpMethod): Likewise.
+ 	(class _Jv_InterpClass): Likewise.
+ 	(class _Jv_JNIMethod): Likewise.
+ 	* include/execution.h: New file.
+ 	* gnu/gcj/runtime/natSharedLibLoader.cc: Include execution.h.
+ 	(_Jv_sharedlib_register_hook): Set `engine' on loaded class.
+ 	Register class after setting fields.
+ 	* resolve.cc: Include execution.h, VerifyError.h.  Moved
+ 	interpreter-specific code to interpret.cc.
+ 	(uaddr): New location.
+ 	(struct aligner): Likewise.
+ 	(ALIGNOF): Likewise.
+ 	(INITIAL_IOFFSETS_LEN): Interface dispatch code moved here.
+ 	(INITIAL_IFACES_LEN): Likewise.
+ 	(null_idt): Likewise.
+ 	(_Jv_GetMethodString): Likewise.
+ 	(_Jv_ThrowNoSuchMethodError): Likewise.
+ 	(_Jv_abstractMethodError): Likewise.
+ 	(_Jv_Resolver::get_alignment_from_class): Renamed.
+ 	(_Jv_Resolver::resolve_field): Likewise.
+ 	(_Jv_Resolver::resolve_pool_entry): Likewise.
+ 	(_Jv_Resolver::resolve_class_ref): Likewise.
+ 	(_Jv_Resolver::prepare_constant_time_tables): Likewise.
+ 	(_Jv_Resolver::indexof): Likewise.
+ 	(_Jv_Resolver::get_interfaces): Likewise.
+ 	(_Jv_Resolver::generate_itable): Likewise.
+ 	(_Jv_Resolver::append_partial_itable): Likewise.
+ 	(_Jv_Resolver::find_iindex): Likewise.
+ 	(_Jv_Resolver::link_symbol_table): Likewise.
+ 	(_Jv_Resolver::link_exception_table): Likewise.
+ 	(_Jv_Resolver::layout_interface_methods): Likewise.
+ 	(_Jv_Resolver::layout_vtable_methods): Likewise.
+ 	(_Jv_Resolver::set_vtable_entries): Likewise.
+ 	(_Jv_Resolver::make_vtable): Likewise.
+ 	(_Jv_Resolver::ensure_fields_laid_out): Likewise.
+ 	(_Jv_Resolver::ensure_class_linked): Likewise.
+ 	(_Jv_Resolver::ensure_supers_installed): Likewise.
+ 	(_Jv_Resolver::add_miranda_methods): Likewise.
+ 	(_Jv_Resolver::ensure_method_table_complete): Likewise.
+ 	(_Jv_Resolver::verify_class): Likewise.
+ 	(_Jv_Resolver::wait_for_state): Likewise.
+ 	* prims.cc (_Jv_soleCompiledEngine): New global.
+ 	(_Jv_CheckAccess): Use _Jv_IsAssignableFromSlow.
+ 	(_Jv_CheckAccessNoInit): Removed.
+ 	* jni.cc (_Jv_JNI_GetAnyFieldID): Use resolve_field.
+ 	* interpret.cc: Include platform.h, ClassFormatError.h,
+ 	Modifier.h, execution.h.
+ 	(_Jv_soleInterpreterEngine): New global.
+ 	(compile): Use resolve_pool_entry.
+ 	(run): Likewise.
+ 	(_Jv_InitField): New location.
+ 	(skip_one_type): Likewise.
+ 	(get_ffi_type_from_signature): Likewise.
+ 	(_Jv_count_arguments): Likewise.
+ 	(init_cif): Likewise.
+ 	(ncode_closure): Likewise.
+ 	(ffi_closure_fun): Likewise.
+ 	(ncode): Likewise.
+ 	(throw_class_format_error): Likewise.
+ 	(throw_class_format_error): Likewise.
+ 	(_Jv_InterpreterEngine::do_verify): New method.
+ 	(_Jv_InterpreterEngine::do_create_ncode): Likewise.
+ 	(_Jv_InterpreterEngine::do_allocate_static_fields): Likewise.
+ 	(_Jv_InterpreterEngine::do_resolve_method): Likewise.
+ 	* defineclass.cc: Include execution.h.
+ 	(_Jv_ClassReader): Initialize size_in_bytes, vtable_method_count,
+ 	engine.
+ 	(checkExtends): Ensure superclass has supers installed.
+ 	(_Jv_ClassNameSamePackage): Clarify usage constraints.
+ 	* boehm.cc (GC_enable, GC_disable): Declare at top of file.
+ 	(_Jv_MarkObj): Unconditionally mark vtable.  Mark interface
+ 	dispatch tables.
+ 
+ 2004-09-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* mauve-libgcj: List some classes we don't have.
+ 
+ 2004-09-10  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/Class.h (_Jv_getInterfaceMethod(): new friend.
+ 	* java/lang/natClass.cc (initializeClass): Check itable.
+ 	(_Jv_getInterfaceMethod): New.
+ 	(_Jv_LinkSymbolTable): Rewrite code that handles inerface calls.
+ 	Check that an interface method isn't called with invokevirtual.
+ 
+ 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Make sure
+ 	super_meth is virtual.
+ 
+ 2004-09-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.h (_Jv_CheckAccessNoInit): Declare as friend.
+ 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Use
+ 	_Jv_CheckAccessNoInit.
+ 	* include/jvm.h (_Jv_CheckAccessNoInit): Declare.
+ 	* prims.cc (_Jv_CheckAccessNoInit): New method.
+ 
+ 	* java/lang/reflect/natMethod.cc (invoke): Check access against
+ 	declaring class, not object's class.
+ 	* java/lang/natClass.cc (_Jv_LookupDeclaredMethod): Added another
+ 	argument.
+ 	(_Jv_LayoutVTableMethods): Perform checks of accessibility of
+ 	overridden method.
+ 	* java/lang/Class.h (_Jv_LookupDeclaredMethod): Added another
+ 	argument.
+ 
+ 2004-08-30  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natClass.cc (_Jv_CheckAssignment): Catch
+ 	ClassNotFoundException.
+ 	Throw NoClassDefFoundError.
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_FindClassInCache): Remove call
+ 	to klass->verify() from here ...
+ 	(_Jv_PrepareCompiledClass): ...and put it here.
+ 
+ 2004-08-27  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_FindClassInCache): Call
+ 	klass->verify().
+ 	* java/lang/natClass.cc (_Jv_LinkSymbolTable): Add debugging.
+ 	(_Jv_LinkSymbolTable): Call Jv_LayoutClass on target class.
+ 
+ 2004-08-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.h (_Jv_IsAssignableFromSlow): Declare as
+ 	friend.
+ 	* java/lang/natClass.cc (_Jv_CheckAssignment): New function.
+ 	(_Jv_IsAssignableFromSlow): New function.
+ 	Include VerifyError.h.
+ 	* include/jvm.h (_Jv_CheckAssignment): Declare.
+ 
+ 2004-08-18  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/VMCompiler.java (loadSharedLibrary): Add className
+ 	argument.  Pass it to findClass instead of fileName.
+ 	(compileClass): Pass class name to loadSharedLibrary.
+ 
+ 2004-06-22  Andrew Haley  <aph@redhat.com>
+ 
+ 	* testsuite/libjava.compile/compile.exp: Force indirect dispatch.
+ 
+ 2004-06-15  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natSystem.cc (getenv0): Don't assume environment
+ 	variable is Latin 1 coded.
+ 
+ 2004-06-07  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/System.java: (getenv0): New method.
+ 	(getenv): Add security check.  Do the right thing.
+ 	* java/lang/natSystem.cc (getenv0): New method.
+ 
+ 2004-04-19    Andrew Haley  <aph@redhat.com>
+ 
+ 	* gnu/gcj/runtime/NameFinder.java: Call waitFor() on the processes
+ 	we destroy.
+ 
+ 	* gnu/java/net/natPlainSocketImplPosix.cc (read): The value byte
+ 	is returned as an int in the range 0 to 255.
+ 
+ 2004-08-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natClass.cc (_Jv_LinkSymbolTable): Prepare the target
+ 	class if it is interpreted.
+ 
+ 2004-08-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_WaitForState): Updated.
+ 	* java/lang/Class.h (_Jv_ResolveClassRef): Updated declaration.
+ 	(Class::getSuperclass): Updated.
+ 	(Class::getInterfaces): Likewise.
+ 	(Class::size): Updated.
+ 	(_Jv_LayoutClass): Updated declaration.
+ 	* java/lang/natClass.cc (_Jv_ResolveClassRef): Changed interface.
+ 	Synchronize on class.
+ 	(_Jv_LayoutClass): Changed interface.
+ 	(initializeClass): Updated.
+ 	(_Jv_LinkSymbolTable): Likewise.
+ 
+ 	* java/lang/Class.h (Class::_Jv_isBinaryCompatible): Declare as
+ 	friend.
+ 	* java/lang/natClassLoader.cc (_Jv_WaitForState): Use
+ 	_Jv_isBinaryCompatible.
+ 	* java/lang/natClass.cc (initializeClass): Use
+ 	_Jv_isBinaryCompatible.
+ 	(_Jv_LinkSymbolTable): Likewise.
+ 	* include/jvm.h (_Jv_isBinaryCompatible): New function.
+ 
+ 2004-08-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gcj/javaprims.h: Regenerated.
+ 	* java/lang/natClassLoader.cc (getClassLoader0): Removed.
+ 	(_registerClass): Likewise.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (core_java_source_files): Added VMCompiler.
+ 	* java/lang/Compiler.java: Rewrote in terms of VMCompiler.
+ 	* java/lang/VMCompiler.java: New file.
+ 	* gnu/gcj/runtime/SharedLibHelper.java (findClass): Removed
+ 	`verbose' code.
+ 	(copyFile): Don't use fully-qualified name.
+ 	(h): Removed.
+ 	* java/lang/natVMClassLoader.cc: Include VMCompiler.h.
+ 	(defineClass): Use VMCompiler.
+ 	* java/lang/ClassLoader.java (defineClass): Removed jit
+ 	compilation code and `verbose' code.
+ 	(getClassLoader0): Removed.
+ 	(_registerClass): Likewise.
+ 	(SharedLibHelpers): Removed.
+ 
+ 2004-08-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java (URLLoader(URLClassLoader, URL,
+ 	URL)): New constructor.
+ 	(SoURLLoader): Likewise.
+ 	(JarURLLoader): Create SoURLLoader with override URL.
+ 
+ 2004-08-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (interpret.lo): New rule.
+ 
+ 2004-08-05  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java (JarURLLoader.JarURLLoader): Look
+ 	aside for "GCJLIBS" in directory where jarfiles are loaded.
+ 	(JarURLLoader.getClass): New method.
+ 	(JarURLLoader.toString):  New method.
+ 	(FileResource.toString):  New method.
+ 	* java/lang/natClassLoader.cc (_Jv_RegisterClassHookDefault):
+ 	Remove "Duplicate class registration: " bug.
+ 	(_registerClass): New method.
+ 	* java/lang/natClass.cc (_Jv_LinkSymbolTable): Check method index.
+ 	(_Jv_LinkSymbolTable): Call _Jv_LayoutClass().
+ 	Add debugging.
+ 	(_Jv_LayoutClass): Use getSuperclass() rather than directly
+ 	accessing the field.
+ 	* java/lang/ClassLoader.java (SharedLibHelpers): New variable.
+ 	(defineClass): Call gcj to JIT-compile a class.
+ 	(_registerClass): New method.
+ 	* gnu/gcj/runtime/SharedLibHelper.java (findHelper): A shared
+ 	library name can refer to more than one loaded library, so use a
+ 	Set of SharedLibHelpers.
+ 	If a shared library is already loaded, take a copy.
+ 	(copyFile): New function.
+ 
+ 	* testsuite/libjava.compile/compile.exp: Force
+ 	-findirect-dispatch.
+ 
+ 	* java/security/BasicPermission.java: Remove bogus checks.
+ 
+ 	* java/lang/System.java (getenv0): New method.
+ 	* java/lang/natSystem.cc (getenv0): New method.
+ 
+ 2004-05-24  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natClass.cc (_Jv_LayoutClass): Remove warning message.
+ 
+ 2004-04-20  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* Merged with HEAD as of 20040514. Diff against
+ 	gcj-abi-2-merge-20040514.
+ 
+ 2004-04-16  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_WaitForState): Call
+ 	_Jv_LayoutClass.
+ 	(_Jv_PrepareCompiledClass): Cast address to uaddr for comparison.
+ 	(_Jv_PrepareCompiledClass): If we throw an exception during
+ 	preparation, restore state.
+ 	(ClassLoader::getClassLoader0): New method.
+ 
+ 	* java/lang/natClass.cc (get_alignment_from_class): Moved here
+ 	from resolve.cc.
+ 	(ALIGNOF): Use offsetof, not __alignof__.
+ 	(_Jv_ResolveClassRef): Resolve a reference to a class in a
+ 	constant pool.
+ 	(getInterfaces): Emit debug output if interface hasn't been
+ 	resolved.
+ 	(initializeClass): Call _Jv_LayoutClass.
+ 	(_Jv_LinkSymbolTable): Add debugging output.
+ 	(_Jv_LinkSymbolTable): NoClassDefFoundError if target_class isn't
+ 	found.
+ 	(_Jv_LinkSymbolTable): Call _Jv_PrepareClass.
+ 	(_Jv_LinkSymbolTable): Pass the real class loader to
+ 	_Jv_FindClass.
+ 	(_Jv_linkExceptionClassTable): Don't throw if we fail to find an
+ 	exception class.
+ 	(_Jv_LinkSymbolTable): Assert if we find a static field reference
+ 	to an interpreted class.
+ 	(_Jv_LayoutVTableMethods): Use klass->getSuperclass to get the
+ 	superclass.
+ 	(_Jv_LayoutClass): Moved here; it was part of _Jv_PrepareClass in
+ 	resolve.cc.
+ 
+ 	* java/lang/VMSecurityManager.java: Check for the system class
+ 	loader as well as loader != null.
+ 
+ 	* java/lang/SecurityManager.java (checkPermission): Remove
+ 	security check.
+ 	(checkRead): Likewise.
+ 	(checkConnect): Likewise.
+ 
+ 	* java/lang/ClassLoader.java (loadClass): Include all class
+ 	loaders in stack trace string.
+ 	Look for class in "gcjlib.so" in the same directory.
+ 	(getSystemClassLoader) Use getClassLoader0.
+ 	(getClassLoader0): New native method.
+ 
+ 	* java/lang/Class.h (getSuperclass): New method.
+ 	(getInterface): New method.
+ 	(size): Lay out class if needed.
+ 	(firstMethodIndex): New method.
+ 	(Jv_ResolveClassRef): New declaration.
+ 	(_Jv_LinkSymbolTable): New declaration.
+ 
+ 	* java/io/ObjectOutputStream.java: Add DEBUG statements
+ 	everywhere.
+ 	(dumpElementln): New method.
+ 	(depth): New field.
+ 	* java/io/ObjectInputStream.java (MyIOException): new, for
+ 	debugging.
+ 	Everywhere: use MyIOException rather than IOException.
+ 	Indent debugging output to make nesting visible.
+ 	(currentClassLoader): Make native
+ 	(callersClassLoader): New field.
+ 	(depth): New field.
+ 	* java/io/natObjectInputStream.cc (getCallersClassLoader): New
+ 	method.
+ 
+ 	(readObject): ENDBLOCKDATA is generated if the class has a write
+ 	method, not if it has a read method.
+ 
+ 	* include/jvm.h (_Jv_CallAnyMethodA): Add new arg, iface.
+ 
+ 	* gnu/javax/rmi/CORBA/DelegateFactory.java: Use the
+ 	getContextClassLoader form the current thread after our own class
+ 	loader.
+ 
+ 	* gnu/gcj/runtime/SharedLibHelper.java (findClass): Class loader
+ 	debugging.
+ 	(toString): New method.
+ 
+ 	* verify.cc (class _Jv_BytecodeVerifier): Don't directly access
+ 	interfaces array.
+ 
+ 	* resolve.cc (_Jv_PrepareMissingMethods): If interface looks like
+ 	a constant pool entry, resolve it now.
+ 	(_Jv_PrepareClass): Break out part of this function to Jv_LayoutClass
+ 	in natClass.cc.
+ 	Move get_alignment_from_class to natClass.cc.
+ 
+ 	* prims.cc (_Jv_AllocObjectNoFinalizer): Use size field from class.
+ 	(_Jv_AllocObjectNoInitNoFinalizer): Likewise.
+ 
+ 	* defineclass.cc (checkExtends): Don't access superclass field
+ 	directly.
+ 
+ 	* Makefile.in: regenerate.
+ 
+ 	* gnu/gcj/util/natDebug.cc: New
+ 	* gnu/gcj/util/Debug.java: New.
+ 
+ 	* Makefile.am (java/io/ObjectInputStream.lo): Use
+ 	-fno-optimize-sibling-calls.
+ 
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Use
+ 	_Jv_LookupInterfaceMethodIdx to calculate the address of a method
+ 	in an interface.
+ 	* include/jvm.h (_Jv_CallAnyMethodA): Add new arg: iface.
+ 
+ 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure: Regenerate for libtool change.
+ 
+ 2004-11-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/PolicyFile.java: New file.
+ 	* Makefile.am: Added gnu/java/security/PolicyFile.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-11-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Character.java, scripts/unicode-blocks.pl:
+ 	Reorder "final static" to "static final".
+ 
+ 2004-11-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/ResourceBundle.java: Reformatted.
+ 	(tryBundle): Fixed javadoc.
+ 
+ 2004-11-24  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/text/MessageFormat.java
+ 	(formatInternal): Made private.
+ 
+ 2004-11-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(ReadWrite.ReadWrite): New constructor.
+ 	(DirectByteBufferImpl): Likewise.
+ 	* jni.cc (_Jv_JNI_NewDirectByteBuffer):
+ 	Use DirectByteBufferImpl.ReadWrite.
+ 	* Makefile.am:
+ 	Generate java/nio/DirectByteBufferImpl$ReadWrite.h.
+ 	* Makefile.in: Rgenerated.
+ 
+ 2004-11-24  Jeroen Frijters  <address@bogus.example.com>
+ 
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(ReadOnly): New inner subclass.
+ 	(ReadWrite): New inner subclass.
+ 	(owner): Made final and private.
+ 	(address): Made final.
+ 	(DirectByteBufferImpl(int)): New constructor.
+ 	(DirectByteBufferImpl(Object,RawData,int,int,int)): New constructor.
+ 	(DirectByteBufferImpl(Object,RawData,int,int,int,boolean)): Removed.
+ 	(allocate): Modified to instantiate ReadWrite subclass.
+ 	(finalize): Fixed to only free the buffer, if we own it.
+ 	(put): Removed read-only check.
+ 	(slice, duplicate): Modified to instantiate appropriate subclass.
+ 	(isReadOnly): Removed.
+ 	* java/nio/MappedByteBufferImpl.java
+ 	(slice, duplicate): Modified to instantiate appropriate
+ 	DirectByteBufferImpl subclass.
+ 
+ 2004-11-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIOServerSocket.java: Added email to @author tag.
+ 	* java/nio/DirectByteBufferImpl.java:
+ 	Moved native methods to java.nio.VMDirectByteBuffer class.
+ 	* java/nio/MappedByteBufferImpl.java:
+ 	Use native methods from java.nio.VMDirectByteBuffer class.
+ 	* java/nio/VMDirectByteBuffer.java: New file,
+ 	* java/nio/natDirectByteBufferImpl.cc:
+ 	Moved all methods into java.nio.VMDirectByteBuffer class.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(register): Only re-use valid keys.
+ 	* Makefile.am: Added java/nio/VMDirectByteBuffer.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-11-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DirectByteBufferImpl.java,
+ 	java/nio/MappedByteBufferImpl.java:
+ 	Reformatted.
+ 
+ 2004-11-23  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* testsuite/lib/libjava.exp,
+ 	testsuite/libjava.jacks/jacks.exp: Use new procs in target-libpath.exp.
+ 
+ 2004-11-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* configure.host: Enable the interpreter for mips*-*-linux*.
+ 
+ 2004-11-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/String.java (rehash): Removed.
+ 	* java/lang/natString.cc (rehash): Made static.
+ 	(_Jv_NewStringUtf8Const): Use static rehash method.
+ 
+ 2004-11-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.in, aclocal.m4, configure, gcj/Makefile.in,
+ 	include/Makefile.in, testsuite/Makefile.in: Regenerated.
+ 
+ 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/18444
+ 	* configure.ac (threading): Accept 'posix95'.
+ 	* configure: Regenerate.
+ 
+ 2004-11-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(read): Made check for blocking un-ambiguous.
+ 	Removed wrong check for data array length.
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(read): Only return 0 when no bytes for reading available in
+ 	non-blocking mode.
+ 	* java/nio/channels/SocketChannel.java:
+ 	Added some missing @return tags.
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/PropertyChangeSupport.java
+ 	(propertyChangeSupportSerializedDataVersion): Made static.
+ 	* java/beans/VetoableChangeSupport.java
+ 	(propertyChangeSupportSerializedDataVersion): Likewise.
+ 
+ 2004-11-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(parseURL): Fixed file path canonicalisation.
+ 
+ 2004-11-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(parseURL): Fixed file path canonicalisation.
+ 
+ 2004-11-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLClassLoader.java: Whitespace cleanup.
+ 
+ 2004-11-18  Robert Schuster <address@bogus.example.com>
+ 
+ 	Complete 1.4 support
+ 	* java/beans/PropertyDescriptor.java:
+ 	(setReadMethod): New method
+ 	(setWriteMethod): New method
+ 	(equals): Implemented (1.4)
+ 	(checkMethods): operates on arguments now (private)
+ 
+ 
+ 2004-11-18  Mattias Rehnberg  <Mattias.Rehnberg@home.se>
+ 
+ 	* java/net/Inet6Address.java (getHostAddress): Fix textual
+ 	representation of IPv6 address with embedded zeroes
+ 	to conform to RFC 2373.
+ 
+ 2004-11-18  Jeroen Frijters  <address@bogus.example.com>
+ 
+ 	* java/lang/StackTraceElement.java: Made final.
+ 	* java/nio/channels/Channels.java: Added private constructor.
+ 	* java/rmi/Naming.java: Added private constructor.
+ 	* java/rmi/registry/LocateRegistry.java: Added private constructor.
+ 	* java/rmi/server/RMIClassLoader.java: Added private constructor.
+ 	* java/security/KeyPairGeneratorSpi.java
+ 	(clone): Made protected and simplified implementation.
+ 	* java/text/DateFormat.java
+ 	(allFields): Made package accessible.
+ 	* java/text/DecimalFormat.java
+ 	(formatInternal): Made private.
+ 	* java/text/Format.java
+ 	(formatInternal): Made private.
+ 	* java/util/logging/Handler.java: Made constructor protected.
+ 	* java/util/regex/Matcher.java: Made final.
+ 	* java/util/regex/Pattern.java: Made final.
+ 	* javax/crypto/CipherInputStream.java
+ 	(mark): Corrected mark parameter type (from long to int).
+ 	* javax/crypto/ExemptionMechanism.java
+ 	(finalize): Added.
+ 	* javax/crypto/Mac.java
+ 	(getMacLength): Made final.
+ 	(clone): Made final.
+ 	* javax/imageio/ImageIO.java: Added private constructor.
+ 	* javax/imageio/stream/ImageInputStreamImpl.java
+ 	(checkClosed): Made final.
+ 	* javax/net/ssl/SSLPermission.java: Made final.
+ 	* javax/print/DocFlavor.java
+ 	(hostEncoding): Added work-around to prevent the field from being
+ 	a compile time constant.
+ 	* javax/print/attribute/AttributeSetUtilities.java: Added private
+ 	constructor.
+ 	(UnmodifiableDocAttributeSet): Made private.
+ 	(UnmodifiablePrintJobAttributeSet): Made private.
+ 	(UnmodifiablePrintRequestAttributeSet): Made private.
+ 	(UnmodifiablePrintServiceAttributeSet): Made private.
+ 	(SynchronizedAttributeSet): Made private.
+ 	(SynchronizedDocAttributeSet): Made private.
+ 	(SynchronizedPrintJobAttributeSet): Made private.
+ 	(SynchronizedPrintRequestAttributeSet): Made private.
+ 	(SynchronizedPrintServiceAttributeSet): Made private.
+ 	* javax/security/auth/PrivateCredentialPermission.java: Made final.
+ 
+ 2004-11-18  Craig Black  <craig.black@aonix.com>
+ 
+ 	* gnu/java/beans/BeanInfoEmbryo.java: Use TreeMap for proper sorting.
+ 
+ 2004-11-18  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+ 
+ 	* Makefile.am: Correct friend function declaration.
+ 	* Makefile.in: Regenerated.
+ 	* include/boehm-gc.h (JV_MARKOBJ_DECL, JV_MARKARRAY_DECL): Add
+ 	scope to function names.  Declare functions directly.
+ 	* libjava/java/lang/Class.h
+ 	(java::lang::Class): Correct friend class declaration.
+ 	(_Jv_InitClass, _Jv_GetArrayClass): Move definition to global
+ 	scope.
+ 	* libjava/java/lang/Class.h
+ 	(java::lang::Object): Correct friend class declaration.
+ 
+ 2004-11-17  David Daney  <ddaney@avtrex.com>
+ 
+ 	* java/io/BufferedInputStream.java (skip): Return zero on EOF.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java (getPort): Return 0 in error case.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	*  java/nio/DirectByteBufferImpl.java
+ 	(owner): Updated comment.
+ 	(allocate): New method.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java (URL): Handle case when argument is null.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/Beans.java,
+ 	java/beans/PropertyChangeEvent.java,
+ 	java/beans/PropertyEditorSupport.java:
+ 	Fixed javadocs.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Timer.java (DEFAULT_SIZE): Made static.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java (getCanonicalHostName):
+ 	Support IPv6 addresses.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Object.java: Added javadocs all over (merged from GNU
+ 	classpath).
+ 
+ 2004-11-16  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* java/security/Security.java (Security): Silence the warning about no
+ 	providers found in the no debug case.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(toString): Merged from GNU classpath.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/geom/doc-files/Area-1.png,
+ 	java/awt/geom/doc-files/Ellipse-1.png,
+ 	java/awt/geom/doc-files/GeneralPath-1.png:
+ 	New files.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Currency.java (cache): Fix modifier order.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedReader.java,
+ 	java/io/FileInputStream.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/FileWriter.java,
+ 	java/io/OutputStreamWriter.java,
+ 	java/io/PipedInputStream.java,
+ 	java/io/PipedOutputStream.java,
+ 	java/io/PipedReader.java,
+ 	java/io/PipedWriter.java,
+ 	java/io/PrintStream.java,
+ 	java/io/PushbackInputStream.java,
+ 	java/io/RandomAccessFile.java,
+ 	java/io/Reader.java,
+ 	java/io/StreamTokenizer.java,
+ 	java/io/StringReader.java,
+ 	java/net/NetworkInterface.java,
+ 	java/net/URLClassLoader.java,
+ 	java/nio/ByteOrder.java,
+ 	java/nio/channels/Channel.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-11-16  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* Makefile.am: Add imported files.
+ 	* Makefile.in: Regenerate.
+ 
+ 	2004-10-24  Casey Marshall  <csm@gnu.org>
+ 
+ 	* javax/security/auth/login/LoginContext.java: Implemented.
+ 	* javax/security/auth/login/Configuration.java (getConfig): New method.
+ 	* javax/security/auth/spi/LoginModule.java,
+ 	* gnu/java/security/action/GetSecurityPropertyAction.java: New files.
+ 
+ 2004-11-15  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	Import/Merge the X.509 certificate code from Classpath.
+ 
+ 	* Makefile.am: Add imported files.
+ 	* Makefile.in: Regenerate.
+ 
+ 	2004-11-07  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/security/provider/Gnu.java(<init>): Add entries in a
+ 	priviliged action. Add new algorithms.
+ 	* gnu/java/security/provider/X509CertificateFactory.java
+ 	(engineGenerateCertificate): Chain exceptions.
+ 	(engineGenerateCertificates): Likewise.
+ 	(engineGenerateCRL): Likewise.
+ 	(engineGenerateCRLs): Likewise.
+ 	(engineGenerateCertPath): New methods.
+ 	(generateCert): Throw exception if 'inStream' is null.
+ 	(generateCRL): Likewise.
+ 	* gnu/java/security/x509/X500DistinguishedName.java: Replaced with
+ 	version from GNU Crypto CVS.
+ 	* gnu/java/security/x509/X509CRL.java: Likewise.
+ 	* gnu/java/security/x509/X509CRLEntry.java: Likewise.
+ 	* gnu/java/security/x509/X509Certificate.java: Likewise.
+ 	* java/security/cert/TrustAnchor.java: Call 'toString' and not
+ 	toRFC2253.
+ 	* gnu/java/security/provider/CollectionCertStoreImpl.java,
+ 	* gnu/java/security/provider/EncodedKeyFactory.java,
+ 	* gnu/java/security/provider/GnuDHPublicKey.java,
+ 	* gnu/java/security/provider/GnuRSAPrivateKey.java,
+ 	* gnu/java/security/provider/GnuRSAPublicKey.java,
+ 	* gnu/java/security/provider/MD2withRSA.java,
+ 	* gnu/java/security/provider/MD4withRSA.java,
+ 	* gnu/java/security/provider/MD5withRSA.java,
+ 	* gnu/java/security/provider/PKIXCertPathValidatorImpl.java,
+ 	* gnu/java/security/provider/RSA.java,
+ 	* gnu/java/security/provider/RSAKeyFactory.java,
+ 	* gnu/java/security/provider/SHA1withRSA.java,
+ 	* gnu/java/security/x509/GnuPKIExtension.java,
+ 	* gnu/java/security/x509/PolicyNodeImpl.java,
+ 	* gnu/java/security/x509/Util.java,
+ 	* gnu/java/security/x509/X509CRLSelectorImpl.java,
+ 	* gnu/java/security/x509/X509CertPath.java,
+ 	* gnu/java/security/x509/X509CertSelectorImpl.java,
+ 	* gnu/java/security/x509/ext/AuthorityKeyIdentifier.java,
+ 	* gnu/java/security/x509/ext/BasicConstraints.java,
+ 	* gnu/java/security/x509/ext/CRLNumber.java,
+ 	* gnu/java/security/x509/ext/CertificatePolicies.java,
+ 	* gnu/java/security/x509/ext/ExtendedKeyUsage.java,
+ 	* gnu/java/security/x509/ext/Extension.java,
+ 	* gnu/java/security/x509/ext/GeneralNames.java,
+ 	* gnu/java/security/x509/ext/IssuerAlternativeNames.java,
+ 	* gnu/java/security/x509/ext/KeyUsage.java,
+ 	* gnu/java/security/x509/ext/PolicyConstraint.java,
+ 	* gnu/java/security/x509/ext/PolicyMappings.java,
+ 	* gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java,
+ 	* gnu/java/security/x509/ext/ReasonCode.java,
+ 	* gnu/java/security/x509/ext/SubjectAlternativeNames.java,
+ 	* gnu/java/security/x509/ext/SubjectKeyIdentifier.java: New files.
+ 
+ 	2004-11-07  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/security/x509/X509CRL.java:
+ 	Missed import statements in previous checkin.
+ 
+ 	2004-11-07  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/security/x509/X509CertPath.java (parse): Fixed reference
+ 	to 'X509CertificateImpl' from previous checkin.
+ 
+ 2004-11-12  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR other/14264
+ 	* testsuite/lib/libjava.exp: Set LC_ALL and LANG to C.
+ 
+ 2004-11-11  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/nio/FileLock.java (isValid): locks are valid if the
+ 	channel is open.
+ 	* gnu/java/nio/channels/natFileChannelPosix.cc (lock): use
+ 	'F_RDLCK' for shared locks, 'F_WRLCK' for exclusive locks.
+ 
+ 2004-11-11  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	Fixed regression:
+ 	* gnu/java/beans/IntrospectionIncubator.java:
+ 	(addMethod): Corrected classification of normal and property methods.
+ 	(capitalize): Added documentation.
+ 	(DoubleKey): [class] Added documentation.
+ 
+ 2004-11-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/jni.h: Added FIXME.
+ 
+ 2004-11-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/GregorianCalendar.java: Removed unused imports.
+ 	* java/util/Vector.java: Removed unused import.
+ 
+ 2004-11-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Process.java:
+ 	Import cleanups.
+ 
+ 2004-11-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/zip/ZipEntry.java
+ 	(KNOWN_SIZE, KNOWN_CSIZE, KNOWN_CRC, KNOWN_TIME): Made final.
+ 
+ 2004-11-07  Robert Schuster  <theBohemian@gmx.net>
+ 
+ 	Fixes bug #10908
+ 	* gnu/java/beans/IntrospectionIncubator.java:
+ 	(addMethod): static methods are discarded now, too.
+ 
+ 2004-11-07  Andrew John Hughes <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/GregorianCalendar.java
+ 	Added/amended documentation.
+ 
+ 2004-11-07  Andrew John Hughes <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Collections.java
+ 	Added documentation.
+ 	* java/util/SortedMap.java
+ 	Clarified some method examples.
+ 	* java/util/SortedSet.java
+ 	Clarified some method examples.
+ 
+ 2004-11-07  Andrew John Hughes <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Currency.java
+ 	Documented variables and methods more fully.
+ 	Caches the currency instances, so that a request
+ 	for a locale, l, only ever returns the same
+ 	instance (i.e. successive calls to getInstance(l)
+ 	are reference equivalent (==)).
+ 
+ 2004-11-07  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Date.java
+ 	Added missing documentation.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/CheckedInputStream.java,
+ 	java/util/zip/InflaterInputStream.java,
+ 	java/util/zip/ZipFile.java,
+ 	java/util/zip/ZipInputStream.java:
+ 	Import cleanups.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/rmi/server/UnicastConnectionManager.java (clients): Now
+ 	package-private.
+ 	(connections): Likewise.
+ 	(scavenger): Likewise.
+ 	* gnu/java/rmi/server/ConnectionRunnerPool.java (freelist): Now
+ 	package-private.
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java (vec): Now
+ 	package-private.
+ 	(ptr): Likewise.
+ 	* gnu/classpath/ServiceFactory.java (log): Now package-private.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/directory/BasicAttributes.java (attributes): Now
+ 	package-private.
+ 	* javax/imageio/spi/ServiceRegistry.java (categories): Now
+ 	package-private.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java (URLClassLoader): Now
+ 	package-private.
+ 	* java/nio/charset/CoderResult.java (CoderResult): Now
+ 	package-private.
+ 	(get): Likewise.
+ 	(Cache): Likewise.  Don't synchronize on `this'.
+ 	* java/rmi/server/RMIClassLoader.java (MyClassLoader): Now
+ 	package-private.
+ 	* java/util/TimeZone.java (timezones): Now package-private.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/security/Permissions.java (perms): Now package-private.
+ 	* java/security/UnresolvedPermission.java (permissions): Now
+ 	package-private.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/FilePermission.java: Reindented.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java (currentObjectStreamClass): Now
+ 	package-private.
+ 	(setBlockDataMode): Likewise.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/nio/charset/ISO_8859_1.java (Decoder): Now
+ 	package-private.
+ 	(Encoder): Likewise.
+ 	* gnu/java/nio/charset/UTF_8.java (Decoder): Now package-private.
+ 	(Encoder): Likewise.
+ 	* gnu/java/nio/charset/US_ASCII.java (Decoder): Now
+ 	package-private.
+ 	(Encoder): Likewise.
+ 
+ 2004-11-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am: Add new javax.imageio files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/event/IIOReadProgressListener.java,
+ 	javax/imageio/event/IIOReadUpdateListener.java,
+ 	javax/imageio/event/IIOReadWarningListener.java,
+ 	javax/imageio/event/IIOWriteProgressListener.java,
+ 	javax/imageio/event/IIOWriteWarningListener.java,
+ 	javax/imageio/metadata/IIOMetadataFormat.java,
+ 	javax/imageio/stream/FileCacheImageInputStream.java,
+ 	javax/imageio/stream/FileCacheImageOutputStream.java,
+ 	javax/imageio/stream/ImageInputStreamImpl.java:
+ 	Import cleanup.
+ 	* javax/imageio/metadata/package.html: New file.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/ImageReaderSpi.java
+ 	(isOwnReader): New method.
+ 	* javax/imageio/spi/ImageWriterSpi.java
+ 	(isOwnWriter): Likewise.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageWriter.java
+ 	(convertImageMetadata): New abstract method.
+ 	(convertStreamMetadata): Likewise.
+ 	(write): Likewise.
+ 	* javax/imageio/stream/FileCacheImageInputStream.java
+ 	(close): Fixed setting of stream to null.
+ 	(checkStreamClosed): Throws IOException.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/stream/FileCacheImageInputStream.java,
+ 	javax/imageio/stream/FileCacheImageOutputStream.java,
+ 	javax/imageio/stream/FileImageInputStream.java,
+ 	javax/imageio/stream/FileImageOutputStream.java,
+ 	javax/imageio/stream/MemoryCacheImageInputStream.java,
+ 	javax/imageio/stream/MemoryCacheImageOutputStream.java:
+ 	New files.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/metadata/IIOInvalidTreeException.java,
+ 	javax/imageio/metadata/IIOMetadataFormatImpl.java,
+ 	javax/imageio/metadata/IIOMetadataNode.java:
+ 	New stub files.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/stream/ImageInputStreamImpl.java,
+ 	javax/imageio/stream/ImageOutputStreamImpl.java:
+ 	New files.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageIO.java:
+ 	Added much new methods.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageReader.java,
+ 	javax/imageio/ImageWriter.java,
+ 	javax/imageio/spi/ImageWriterSpi.java:
+ 	Add SOME new methods.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/IIOParam.java,
+ 	javax/imageio/ImageReadParam.java,
+ 	javax/imageio/ImageReader.java,
+ 	javax/imageio/ImageWriter.java:
+ 	Mostly implemented.
+ 	* javax/imageio/spi/ImageReaderSpi.java,
+ 	javax/imageio/spi/ImageWriterSpi.java:
+ 	New files.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageWriteParam.java,
+ 	javax/imageio/metadata/IIOMetadataFormat.java:
+ 	Implemented.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageTypeSpecifier.java:
+ 	Mostly implemented.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/metadata/IIOMetadata.java:
+ 	Mostly implemented.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/IIOImage.java,
+ 	javax/imageio/ImageReadParam.java,
+ 	javax/imageio/metadata/IIOMetadataController.java,
+ 	javax/imageio/metadata/IIOMetadataFormat.java:
+ 	New files.
+ 	* javax/imageio/stream/ImageOutputStream.java:
+ 	Implemented.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/IIOParam.java,
+ 	javax/imageio/IIOParamController.java,
+ 	javax/imageio/ImageTypeSpecifier.java,
+ 	javax/imageio/ImageWriteParam.java,
+ 	javax/imageio/metadata/IIOMetadata.java:
+ 	New files.
+ 	* javax/imageio/ImageTranscoder.java:
+ 	Implemented.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/ImageInputStreamSpi.java,
+ 	javax/imageio/spi/ImageOutputStreamSpi.java:
+ 	Reworked import startments.
+ 	* javax/imageio/spi/ServiceRegistry.java:
+ 	Reworked import startments. Fixed XHTML in javadocs.
+ 	(ServiceRegistry): Added @param tag to javadoc.
+ 	* javax/imageio/stream/ImageInputStream.java
+ 	(mark): Doesn't throws IOException;
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageIO.java:
+ 	New file.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/IIORegistry.java
+ 	(static): Don't register ImageReaderSpi.class and
+ 	ImageWriterSpi.class yet.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/IIORegistry.java:
+ 	New file.
+ 
+ 2004-11-06  Noa Resare  <noa@resare.com>
+ 
+ 	* java/net/Socket.java (getPort): Return 0 instead of -1 on
+ 	unconnected sockets.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/StringBuffer.java,
+ 	java/lang/Throwable.java,
+ 	java/security/spec/DSAParameterSpec.java,
+ 	java/util/zip/ZipEntry.java,
+ 	java/util/zip/ZipFile.java,
+ 	java/util/zip/ZipInputStream.java,
+ 	java/util/zip/ZipOutputStream.java:
+ 	Removed redundant and reordered modifiers.
+ 
+ 2004-11-06  Mattias Rehnberg  <Mattias.Rehnberg@home.se>
+ 
+ 	* java/io/Vector.java
+ 	(writeObject): New function to serialized output thread safe.
+ 
+ 	* java/io/ObjectOutputStream.java
+ 	(writeObject): Move the assignment of the class handle to after
+ 	the assignment of class descriptor handle.
+ 
+ 2004-11-06  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	Fixes documentation and indentation
+ 	* java/beans/PropertyEditorSupport.java:
+ 	reworked initial API doc
+ 	(value): changed name from val
+ 
+ 2004-11-06  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	Updates to 1.5
+ 	* java/beans/PropertyEditorSupport.java
+ 	(PropertyEditorSupport()): Changed modifier to public
+ 	(PropertyEditorSupport(Object): Changed modifier to public
+ 	(setSource): New method
+ 	(getSource): New method
+ 
+ 2004-11-06  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	Fixes bug #10799
+ 	* java/beans/PropertyEditorSupport.java
+ 	(setValue): Fire property change event
+ 
+ 2004-11-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc (_Jv_JNI_NewObjectArray): Fixed return type.
+ 	* include/jni.h (struct JNINativeInterface) <NewObjectArray>: Now
+ 	returns jobjectArray.
+ 	(_Jv_JNIEnv::NewObjectArray): Likewise.
+ 
+ 2004-11-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (state::check_no_uninitialized_objects): Removed.
+ 	(push_jump): Updated.
+ 	(push_exception_jump): Likewise.
+ 	(handle_ret_insn): Likewise.
+ 	(handle_jsr_insn): Likewise.
+ 
+ 2004-10-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	PR libgcj/18234
+ 	* java/lang/Runtime.java (static): Call init().
+ 	(Runtime): Remove call to init().
+ 	(init): Make static.
+ 
+ 2004-10-28  David Daney  <ddaney@avtrex.com>
+ 
+ 	* gnu/gcj/convert/Output_UnicodeLittleUnmarked.java: New file.
+ 	* Makefile.am: Build it.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-10-27  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
+ 
+ 	PR libgcj/18104
+ 	* Makefile.am (CLASSPATH_SEPARATOR): Use instead of a
+ 	colon.
+ 	* Makefile.in: Regenerate.
+ 	* configure: Regenerate.
+ 	* configure.ac (CLASSPATH_SEPARATOR): Define.
+ 	* gcj/Makefile.in: Regenerate.
+ 	* include/Makefile.in: Regenerate.
+ 	* testsuite/Makefile.in: Regenerate.
+ 	* testsuite/lib/libjava.exp (libjava_arguments): Fix
+ 	CLASSPATH separator handling for Windows.
+ 
+ 2004-10-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(getOutputStream): Implicitely switch to POST method.
+ 
+ 2004-10-26  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+ 
+ 	* libjava/java/lang/Class.h
+ 	(java::lang::Class): Correct friend class declaration.
+ 
+ 2004-10-25  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* Makefile.am (DARWIN_CRT_SRC): New.
+ 	(libgcj_la_SOURCES): Use it.
+ 	* configure.ac: Define USING_DARWIN_CRT when on Darwin.
+ 	* darwin.cc: New file.
+ 	* include/jvm.h (_Jv_RegisterClasses): Constify.
+ 	(_Jv_RegisterClasses_Counted): New prototype.
+ 	* java/lang/Class.h: Include stddef.h.
+ 	(_Jv_RegisterClasses): Constify.
+ 	(_Jv_RegisterClasses_Counted): New prototype.
+ 	(Object): Make '_Jv_RegisterClasses_Counted' a friend.
+ 	* java/lang/natClassLoader.cc (_Jv_RegisterClasses): Constify.
+ 	(_Jv_RegisterClasses_Counted): New function.
+ 	* configure: Regenerate.
+ 	* Makefile.in: Regenerate.
+ 	* gcj/Makefile.in: Regenerate.
+ 	* include/Makefile.in: Regenerate.
+ 	* testsuite/Makefile.in: Regenerate.
+ 
+ 2004-10-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (tryBundle): Use
+ 	Class.isAssignableFrom rather than catching ClassCastException.
+ 
+ 2004-10-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/text/WordBreakIterator.java (WordBreakIterator): Don't
+ 	initialize `iter'.
+ 	* gnu/java/text/SentenceBreakIterator.java
+ 	(SentenceBreakIterator): Don't initialize `iter'.
+ 	* gnu/java/text/LineBreakIterator.java (LineBreakIterator): Don't
+ 	initialize `iter'.
+ 	* gnu/java/text/CharacterBreakIterator.java
+ 	(CharacterBreakIterator): Don't initialize `iter'.
+ 	* gnu/java/text/BaseBreakIterator.java (BaseBreakIterator): New
+ 	constructor.
+ 	* java/text/BreakIterator.java: Updated documentation.
+ 
+ 2004-10-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR other/18138
+ 	* testsuite/lib/libjava.exp: Accept more than one multilib libgcc.
+ 
+ 2004-10-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/DocFlavor.java,
+ 	javax/print/attribute/standard/JobStateReason.java,
+ 	javax/print/attribute/standard/MultipleDocumentHandling.java:
+ 	Added missing constants.
+ 
+ 2004-10-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java (sendRequest): Fix
+ 	typo.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	PR libjava/14009
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(sendRequest): Handle case when url.getFile() returns an empty string.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Math.java,
+ 	java/lang/StackTraceElement.java,
+ 	java/nio/Buffer.java,
+ 	java/nio/ByteBuffer.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/ShortBuffer.java,
+ 	java/nio/charset/Charset.java,
+ 	java/rmi/server/RMIClassLoader.java,
+ 	java/rmi/server/RMISocketFactory.java,
+ 	java/security/Policy.java,
+ 	java/text/ChoiceFormat.java,
+ 	java/text/CollationElementIterator.java,
+ 	java/text/DateFormat.java,
+ 	java/text/DecimalFormat.java,
+ 	java/text/DecimalFormatSymbols.java,
+ 	java/text/MessageFormat.java,
+ 	java/text/NumberFormat.java,
+ 	java/text/RuleBasedCollator.java,
+ 	java/text/SimpleDateFormat.java,
+ 	java/util/BitSet.java,
+ 	java/util/Calendar.java,
+ 	java/util/Collections.java,
+ 	java/util/IdentityHashMap.java,
+ 	java/util/Locale.java,
+ 	java/util/TreeMap.java,
+ 	java/util/logging/LogRecord.java,
+ 	java/util/logging/XMLFormatter.java,
+ 	java/util/prefs/AbstractPreferences.java,
+ 	java/util/prefs/Preferences.java,
+ 	javax/crypto/interfaces/DHPrivateKey.java,
+ 	javax/crypto/interfaces/DHPublicKey.java,
+ 	javax/crypto/interfaces/PBEKey.java,
+ 	javax/net/ssl/HandshakeCompletedEvent.java,
+ 	javax/security/auth/Subject.java:
+ 	Removed redundant and reordered modifiers.
+ 
+ 2004-10-22  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* gnu/java/net/natPlainSocketImplPosix.cc
+ 	(gnu::java::net::PlainSocketImpl::available): Call FIONREAD ioctl
+ 	with 'int *' argument instead of 'long *'.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetworkInterface.java,
+ 	java/text/Format.java,
+ 	javax/security/auth/x500/X500Principal.java,
+ 	javax/security/auth/x500/X500PrivateCredential.java,
+ 	javax/security/cert/X509CertBridge.java,
+ 	javax/security/sasl/Sasl.java,
+ 	javax/sql/XAConnection.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/net/ssl/HandshakeCompletedEvent.java,
+ 	javax/net/ssl/KeyManagerFactory.java,
+ 	javax/net/ssl/SSLContext.java,
+ 	javax/net/ssl/SSLServerSocketFactory.java,
+ 	javax/net/ssl/SSLSession.java,
+ 	javax/net/ssl/SSLSocketFactory.java,
+ 	javax/net/ssl/TrustManagerFactory.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/directory/BasicAttribute.java,
+ 	javax/naming/directory/BasicAttributes.java,
+ 	javax/naming/directory/InitialDirContext.java,
+ 	javax/naming/event/NamingEvent.java,
+ 	javax/naming/ldap/ControlFactory.java,
+ 	javax/naming/ldap/ExtendedRequest.java,
+ 	javax/naming/ldap/InitialLdapContext.java,
+ 	javax/naming/ldap/LdapReferralException.java,
+ 	javax/naming/spi/DirObjectFactory.java,
+ 	javax/naming/spi/DirStateFactory.java,
+ 	javax/naming/spi/DirectoryManager.java,
+ 	javax/naming/spi/InitialContextFactory.java,
+ 	javax/naming/spi/InitialContextFactoryBuilder.java,
+ 	javax/naming/spi/NamingManager.java,
+ 	javax/naming/spi/ObjectFactory.java,
+ 	javax/naming/spi/ObjectFactoryBuilder.java,
+ 	javax/naming/spi/StateFactory.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/crypto/Cipher.java,
+ 	javax/crypto/EncryptedPrivateKeyInfo.java,
+ 	javax/crypto/ExemptionMechanism.java,
+ 	javax/crypto/KeyAgreement.java,
+ 	javax/crypto/KeyGenerator.java,
+ 	javax/crypto/Mac.java,
+ 	javax/crypto/SecretKeyFactory.java,
+ 	javax/crypto/SecretKeyFactorySpi.java,
+ 	javax/crypto/spec/SecretKeySpec.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AlgorithmParameterGenerator.java,
+ 	java/security/AlgorithmParameters.java,
+ 	java/security/AlgorithmParametersSpi.java,
+ 	java/security/AllPermission.java,
+ 	java/security/BasicPermission.java,
+ 	java/security/Certificate.java,
+ 	java/security/CodeSource.java,
+ 	java/security/DigestInputStream.java,
+ 	java/security/DigestOutputStream.java,
+ 	java/security/GuardedObject.java,
+ 	java/security/KeyFactory.java,
+ 	java/security/KeyFactorySpi.java,
+ 	java/security/KeyPairGenerator.java,
+ 	java/security/KeyStore.java,
+ 	java/security/KeyStoreSpi.java,
+ 	java/security/Permissions.java,
+ 	java/security/Security.java,
+ 	java/security/Signature.java,
+ 	java/security/UnresolvedPermission.java,
+ 	java/security/cert/CertPathBuilder.java,
+ 	java/security/cert/CertPathValidator.java,
+ 	java/security/cert/CertStore.java,
+ 	java/security/cert/Certificate.java,
+ 	java/security/cert/CertificateFactory.java,
+ 	java/security/cert/PolicyQualifierInfo.java,
+ 	java/security/cert/TrustAnchor.java,
+ 	java/security/cert/X509CRL.java,
+ 	java/security/cert/X509CRLSelector.java,
+ 	java/security/cert/X509CertSelector.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/MarshalledObject.java,
+ 	java/rmi/Naming.java,
+ 	java/rmi/activation/Activatable.java,
+ 	java/rmi/activation/ActivationGroup.java,
+ 	java/rmi/activation/ActivationGroupDesc.java,
+ 	java/rmi/activation/ActivationInstantiator.java,
+ 	java/rmi/activation/ActivationMonitor.java,
+ 	java/rmi/activation/ActivationSystem.java,
+ 	java/rmi/activation/Activator.java,
+ 	java/rmi/registry/LocateRegistry.java,
+ 	java/rmi/registry/Registry.java,
+ 	java/rmi/server/LogStream.java,
+ 	java/rmi/server/ObjID.java,
+ 	java/rmi/server/RMIClientSocketFactory.java,
+ 	java/rmi/server/RMIServerSocketFactory.java,
+ 	java/rmi/server/RMISocketFactory.java,
+ 	java/rmi/server/RemoteCall.java,
+ 	java/rmi/server/RemoteServer.java,
+ 	java/rmi/server/ServerRef.java,
+ 	java/rmi/server/UID.java,
+ 	java/rmi/server/UnicastRemoteObject.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/zip/InflaterInputStream.java (fill): Don't throw an
+ 	exception if we hit EOF of `in'.
+ 	(read): Handle case where inflating returns -1.
+ 
+ 2004-10-21  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* gnu/java/nio/channels/natFileChannelPosix.cc
+ 	(FileChannelImpl::available): Call FIONREAD ioctl with 'int *'
+ 	argument instead of 'long *'.
+ 
+ 2004-10-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (tryBundle): Also ignore
+ 	ClassCastException.
+ 
+ 2004-10-21  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* configure.ac (SIGNAL_HANDLER): Set to include/sh-signal.h
+ 	for all sh*-*-linux* targets.
+ 	* configure: Regenerate.
+ 	* include/sh-signal.h: New file.
+ 
+ 2004-10-21  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	* java/lang/ieeefp.h: Add m32r support.
+ 
+ 2004-10-20  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Cast pointers
+ 	to uaddr, not int.
+ 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass):
+ 	Likewise.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/ColorSupported.java,
+ 	javax/print/attribute/standard/Compression.java,
+ 	javax/print/attribute/standard/Copies.java,
+ 	javax/print/attribute/standard/CopiesSupported.java,
+ 	javax/print/attribute/standard/DateTimeAtCompleted.java,
+ 	javax/print/attribute/standard/DateTimeAtCreation.java,
+ 	javax/print/attribute/standard/DateTimeAtProcessing.java,
+ 	javax/print/attribute/standard/DocumentName.java,
+ 	javax/print/attribute/standard/Fidelity.java,
+ 	javax/print/attribute/standard/Finishings.java,
+ 	javax/print/attribute/standard/JobHoldUntil.java,
+ 	javax/print/attribute/standard/JobImpressions.java,
+ 	javax/print/attribute/standard/JobImpressionsCompleted.java,
+ 	javax/print/attribute/standard/JobImpressionsSupported.java,
+ 	javax/print/attribute/standard/JobKOctets.java,
+ 	javax/print/attribute/standard/JobKOctetsProcessed.java,
+ 	javax/print/attribute/standard/JobKOctetsSupported.java,
+ 	javax/print/attribute/standard/JobMediaSheets.java,
+ 	javax/print/attribute/standard/JobMediaSheetsCompleted.java,
+ 	javax/print/attribute/standard/JobMediaSheetsSupported.java,
+ 	javax/print/attribute/standard/JobMessageFromOperator.java,
+ 	javax/print/attribute/standard/JobName.java,
+ 	javax/print/attribute/standard/JobOriginatingUserName.java,
+ 	javax/print/attribute/standard/JobPriority.java,
+ 	javax/print/attribute/standard/JobPrioritySupported.java,
+ 	javax/print/attribute/standard/JobSheets.java,
+ 	javax/print/attribute/standard/JobState.java,
+ 	javax/print/attribute/standard/JobStateReason.java,
+ 	javax/print/attribute/standard/JobStateReasons.java,
+ 	javax/print/attribute/standard/Media.java,
+ 	javax/print/attribute/standard/MultipleDocumentHandling.java,
+ 	javax/print/attribute/standard/NumberOfDocuments.java,
+ 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
+ 	javax/print/attribute/standard/NumberUp.java,
+ 	javax/print/attribute/standard/NumberUpSupported.java,
+ 	javax/print/attribute/standard/OrientationRequested.java,
+ 	javax/print/attribute/standard/OutputDeviceAssigned.java,
+ 	javax/print/attribute/standard/PDLOverrideSupported.java,
+ 	javax/print/attribute/standard/PageRanges.java,
+ 	javax/print/attribute/standard/PagesPerMinute.java,
+ 	javax/print/attribute/standard/PagesPerMinuteColor.java,
+ 	javax/print/attribute/standard/PrintQuality.java,
+ 	javax/print/attribute/standard/PrinterInfo.java,
+ 	javax/print/attribute/standard/PrinterIsAcceptingJobs.java,
+ 	javax/print/attribute/standard/PrinterLocation.java,
+ 	javax/print/attribute/standard/PrinterMakeAndModel.java,
+ 	javax/print/attribute/standard/PrinterMessageFromOperator.java,
+ 	javax/print/attribute/standard/PrinterMoreInfo.java,
+ 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.java,
+ 	javax/print/attribute/standard/PrinterName.java,
+ 	javax/print/attribute/standard/PrinterStateReason.java,
+ 	javax/print/attribute/standard/PrinterStateReasons.java,
+ 	javax/print/attribute/standard/PrinterURI.java,
+ 	javax/print/attribute/standard/ReferenceUriSchemesSupported.java,
+ 	javax/print/attribute/standard/RequestingUserName.java:
+ 	Reorganized imports and removed redundant final modifiers.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/security/sasl/SaslClient.java,
+ 	javax/security/sasl/SaslClientFactory.java,
+ 	javax/security/sasl/SaslException.java,
+ 	javax/security/sasl/SaslServer.java,
+ 	javax/security/sasl/SaslServerFactory.java:
+ 	Remvoed CVS tags.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/security/auth/login/NullConfiguration.java,
+ 	javax/security/auth/x500/X500Principal.java,
+ 	javax/security/cert/X509Certificate.java,
+ 	javax/security/sasl/AuthenticationException.java,
+ 	javax/security/sasl/AuthorizeCallback.java,
+ 	javax/security/sasl/RealmCallback.java,
+ 	javax/security/sasl/RealmChoiceCallback.java,
+ 	javax/security/sasl/Sasl.java,
+ 	javax/security/sasl/SaslClient.java,
+ 	javax/security/sasl/SaslClientFactory.java,
+ 	javax/security/sasl/SaslException.java,
+ 	javax/security/sasl/SaslServer.java,
+ 	javax/security/sasl/SaslServerFactory.java:
+ 	Cleaned up import statements and copyright notices.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/rmic/RMIC.java: Reformatted.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/sql/Timestamp.java,
+ 	java/text/AttributedCharacterIterator.java,
+ 	java/text/AttributedString.java,
+ 	java/util/zip/CheckedOutputStream.java,
+ 	java/util/zip/DeflaterOutputStream.java,
+ 	java/util/zip/ZipFile.java,
+ 	javax/crypto/Cipher.java,
+ 	javax/crypto/ExemptionMechanismException.java,
+ 	javax/crypto/SecretKey.java,
+ 	javax/crypto/SecretKeyFactory.java,
+ 	javax/naming/directory/ModificationItem.java,
+ 	javax/naming/directory/SearchControls.java,
+ 	javax/naming/event/NamingListener.java,
+ 	javax/naming/ldap/Control.java,
+ 	javax/naming/ldap/ExtendedResponse.java,
+ 	javax/net/ssl/SSLSocketFactory.java:
+ 	Reorganized imports and fixed copyright headers.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/logging/ConsoleHandler.java,
+ 	java/util/logging/ErrorManager.java,
+ 	java/util/logging/FileHandler.java,
+ 	java/util/logging/Filter.java,
+ 	java/util/logging/Formatter.java,
+ 	java/util/logging/Handler.java,
+ 	java/util/logging/Level.java,
+ 	java/util/logging/LogManager.java,
+ 	java/util/logging/LogRecord.java,
+ 	java/util/logging/Logger.java,
+ 	java/util/logging/LoggingPermission.java,
+ 	java/util/logging/MemoryHandler.java,
+ 	java/util/logging/SimpleFormatter.java,
+ 	java/util/logging/SocketHandler.java,
+ 	java/util/logging/StreamHandler.java,
+ 	java/util/logging/XMLFormatter.java:
+ 	Standardized copyrigth header.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AlgorithmParameterGenerator.java,
+ 	java/security/AlgorithmParameters.java,
+ 	java/security/DigestInputStream.java,
+ 	java/security/Identity.java,
+ 	java/security/KeyFactory.java,
+ 	java/security/KeyPairGenerator.java,
+ 	java/security/KeyStore.java,
+ 	java/security/MessageDigest.java,
+ 	java/security/MessageDigestSpi.java,
+ 	java/security/Policy.java,
+ 	java/security/SecureRandom.java,
+ 	java/security/Security.java,
+ 	java/security/Signature.java,
+ 	java/security/SignatureSpi.java,
+ 	java/security/cert/CertPathBuilder.java,
+ 	java/security/cert/CertPathValidator.java,
+ 	java/security/cert/CertStore.java,
+ 	java/security/cert/Certificate.java,
+ 	java/security/cert/CertificateFactory.java,
+ 	java/security/cert/PolicyQualifierInfo.java,
+ 	java/security/cert/TrustAnchor.java,
+ 	java/security/cert/X509CRL.java,
+ 	java/security/cert/X509CRLEntry.java,
+ 	java/security/cert/X509Certificate.java,
+ 	java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java:
+ 	Import statements reorganized, some little formatting issues,
+ 	used java-style array declarations, added comments in empty catch
+ 	blocks.
+ 
+ 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/security/Security.java
+ 	(static): Use AccessController.doPrivileged to get system property.
+ 
+ 2004-10-18  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/nio/ByteBufferHelper.java
+ 	(putDouble): Use Double.toRawLongBits instead.
+ 
+ 2004-10-18  Mark Wielaard  <mark@klomp.org>
+ 	Andrew Haley  <aph@redhat.com>
+ 
+ 	* testsuite/libjava.lang/ExtraClassLoader.java: New.
+ 
+ 2004-10-18  Andrew Haley  <aph@redhat.com>
+ 
+ 	PR java/18036:
+ 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Reorganize
+ 	and correct logic used to find interpreter.
+ 
+ 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/logging/LogManager.java
+ 	(findAncestor): Fixed IndexOutOfBoundsException.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedInputStream.java: Fixed @author tag.
+ 	(read): Simplified expression.
+ 	(read): Merged javadoc a bit more.
+ 	(read): Renamed 'remain' to 'totalBytesRead'.
+ 	* java/io/DataInputStream.java,
+ 	java/io/DataOutputStream.java,
+ 	java/io/ObjectInputStream.java,
+ 	java/io/ObjectOutputStream.java:
+ 	Reworked modifier order.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Inet4Address.java: Merged file header and javadocs.
+ 	* java/net/Inet6Address.java: Likewise.
+ 	* java/net/InetAddress.java
+ 	(getCanonicalHostName): Create Inet4Address object instead of
+ 	InetAddress and add comment regarding IPv6.
+ 	(toString): Simplified.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java,
+ 	java/nio/MappedByteBufferImpl.java,
+ 	java/text/RuleBasedCollator.java,
+ 	java/util/ResourceBundle.java:
+ 	Reworked import statements.
+ 
+ 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/security/IdentityScope.java
+ 	(systemScope): Removed useless initializer.
+ 	* java/security/Policy.java
+ 	(currentPolicy): Likewise.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/System.java: Revert accidential change.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Math.java,
+ 	java/lang/Package.java,
+ 	java/lang/Runtime.java,
+ 	java/lang/StrictMath.java,
+ 	java/lang/System.java,
+ 	java/lang/Thread.java,
+ 	java/lang/ThreadLocal.java,
+ 	java/lang/Void.java:
+ 	Reworked import statements, HTML in javadocs and modifier orders.
+ 
+ 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/Timer.java
+ 	(nr): Removed useless initializer.
+ 	* java/util/logging/LogRecord.java
+ 	(lastSeqNum): Likewise.
+ 	* javax/naming/spi/NamingManager.java
+ 	(icfb, ofb): Likewise.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java:
+ 	Reworked import statements.
+ 	* gnu/java/security/provider/DSAParameters.java:
+ 	Fixed copyrigth years.
+ 	* java/net/JarURLConnection.java:
+ 	Fixed HTML in @author tags.
+ 
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/activation/ActivationSystem.java
+ 	(SYSTEM_PORT): Initialize with correct port number.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/reflect/Proxy.java: Improved javadocs.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/reflect/AccessibleObject.java
+ 	(checkPermission): Removed redundant final modifier.
+ 	(secureSetAccessible): Likewise.
+ 	* java/lang/reflect/Proxy.java:
+ 	Reworked import statements.
+ 	(generate): Removed redundant final modifier.
+ 	* java/lang/reflect/ReflectPermission.java:
+ 	Reorder package declaration and import statement.
+ 
+ 2004-10-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/reflect/Proxy.java
+ 	(count): Removed useless initializer.
+ 
+ 2004-10-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/BindException.java,
+ 	java/net/ConnectException.java,
+ 	java/net/ContentHandler.java,
+ 	java/net/ContentHandlerFactory.java,
+ 	java/net/DatagramPacket.java,
+ 	java/net/DatagramSocket.java,
+ 	java/net/DatagramSocketImpl.java,
+ 	java/net/DatagramSocketImplFactory.java,
+ 	java/net/FileNameMap.java,
+ 	java/net/HttpURLConnection.java,
+ 	java/net/MalformedURLException.java,
+ 	java/net/MulticastSocket.java,
+ 	java/net/NetworkInterface.java,
+ 	java/net/NoRouteToHostException.java,
+ 	java/net/PasswordAuthentication.java,
+ 	java/net/PortUnreachableException.java,
+ 	java/net/ProtocolException.java,
+ 	java/net/ServerSocket.java,
+ 	java/net/Socket.java,
+ 	java/net/SocketException.java,
+ 	java/net/SocketImpl.java,
+ 	java/net/SocketImplFactory.java,
+ 	java/net/SocketOptions.java,
+ 	java/net/SocketPermission.java,
+ 	java/net/SocketTimeoutException.java,
+ 	java/net/URI.java,
+ 	java/net/URISyntaxException.java,
+ 	java/net/URL.java,
+ 	java/net/URLDecoder.java,
+ 	java/net/URLEncoder.java,
+ 	java/net/URLStreamHandler.java,
+ 	java/net/URLStreamHandlerFactory.java,
+ 	java/net/UnknownHostException.java,
+ 	java/net/UnknownServiceException.java:
+ 	Big import statement and @author tag cleanup.
+ 
+ 2004-10-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/OID.java,
+ 	gnu/java/security/provider/DSAParameters.java,
+ 	gnu/java/security/provider/DSASignature.java,
+ 	gnu/java/security/x509/X500DistinguishedName.java,
+ 	gnu/java/security/x509/X509CRL.java:
+ 	Import statements cleaned up.
+ 
+ 2004-10-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIODatagramSocket.java,
+ 	gnu/java/nio/ServerSocketChannelImpl.java:
+ 	Reorganized import statements.
+ 
+ 2004-10-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/RMIMarshalledObjectOutputStream.java
+ 	gnu/java/rmi/rmic/RMIC.java,
+ 	gnu/java/rmi/server/RMIHashes.java,
+ 	gnu/java/rmi/server/RMIObjectInputStream.java,
+ 	gnu/java/rmi/server/RMIObjectOutputStream.java,
+ 	gnu/java/rmi/server/UnicastConnection.java,
+ 	gnu/java/rmi/server/UnicastConnectionManager.java,
+ 	gnu/java/rmi/server/UnicastRemoteCall.java,
+ 	gnu/java/rmi/server/UnicastServer.java,
+ 	gnu/java/rmi/server/UnicastServerRef.java,
+ 	java/rmi/MarshalledObject.java,
+ 	java/rmi/Naming.java,
+ 	java/rmi/RMISecurityManager.java,
+ 	java/rmi/Remote.java,
+ 	java/rmi/activation/Activatable.java,
+ 	java/rmi/activation/ActivationDesc.java,
+ 	java/rmi/activation/ActivationGroup.java,
+ 	java/rmi/activation/ActivationGroupDesc.java,
+ 	java/rmi/activation/ActivationGroupID.java,
+ 	java/rmi/activation/ActivationID.java,
+ 	java/rmi/activation/ActivationInstantiator.java,
+ 	java/rmi/activation/ActivationMonitor.java,
+ 	java/rmi/activation/ActivationSystem.java,
+ 	java/rmi/activation/Activator.java,
+ 	java/rmi/dgc/DGC.java,
+ 	java/rmi/dgc/Lease.java,
+ 	java/rmi/dgc/VMID.java,
+ 	java/rmi/registry/LocateRegistry.java,
+ 	java/rmi/registry/Registry.java,
+ 	java/rmi/registry/RegistryHandler.java,
+ 	java/rmi/server/LoaderHandler.java,
+ 	java/rmi/server/LogStream.java,
+ 	java/rmi/server/ObjID.java,
+ 	java/rmi/server/Operation.java,
+ 	java/rmi/server/RMIClassLoader.java,
+ 	java/rmi/server/RMIClassLoaderSpi.java,
+ 	java/rmi/server/RMIClientSocketFactory.java,
+ 	java/rmi/server/RMIFailureHandler.java,
+ 	java/rmi/server/RMIServerSocketFactory.java,
+ 	java/rmi/server/RMISocketFactory.java,
+ 	java/rmi/server/RemoteCall.java,
+ 	java/rmi/server/RemoteObject.java,
+ 	java/rmi/server/RemoteRef.java,
+ 	java/rmi/server/RemoteServer.java,
+ 	java/rmi/server/RemoteStub.java,
+ 	java/rmi/server/ServerRef.java,
+ 	java/rmi/server/Skeleton.java,
+ 	java/rmi/server/SkeletonMismatchException.java,
+ 	java/rmi/server/UID.java,
+ 	java/rmi/server/UnicastRemoteObject.java,
+ 	java/rmi/server/Unreferenced.java:
+ 	File headers and import statements cleaned up.
+ 
+ 2004-10-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* libjava/gnu/java/nio/charset/UTF_16.java,
+ 	libjava/gnu/java/nio/charset/UTF_16BE.java,
+ 	libjava/gnu/java/nio/charset/UTF_16LE.java,
+ 	libjava/java/nio/ByteOrder.java,
+ 	libjava/java/nio/MappedByteBuffer.java,
+ 	libjava/java/nio/channels/Channels.java,
+ 	libjava/java/nio/channels/spi/SelectorProvider.java,
+ 	libjava/java/nio/charset/Charset.java:
+ 	Cleanup.
+ 
+ 2004-10-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/charset/UTF_16Encoder.java
+ 	(UTF_16Encoder): Fixed maxBytesPerChar handling.
+ 
+ 2004-10-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/math/BigDecimal.java, java/math/BigInteger.java:
+ 	Reorganized import statements, removed redundant and
+ 	reorganized modifiers.
+ 
+ 2004-10-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/beans/ExplicitBeanInfo.java:
+ 	Explicitely import java.awt.Image.
+ 	(getIcon): Fixed off-by-one error.
+ 
+ 2004-10-15  Andrew Haley  <aph@redhat.com>
+ 
+ 	* Makefile.am (nat_files, xlib_nat_files): New.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-10-14  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* jni.cc (_Jv_JNIMethod::call): Use ffi_java_raw_call instead of
+ 	ffi_raw_call if FFI_NATIVE_RAW_API is not defined.
+ 
+ 2004-10-13  Andrew Haley  <aph@redhat.com>
+ 
+ 	* interpret.cc (_Jv_InterpMethod::run): Initialize
+ 	_Jv_StartOfInterpreter.
+ 	(_Jv_StartOfInterpreter, _Jv_EndOfInterpreter): Functions removed.
+ 	(_Jv_StartOfInterpreter, _Jv_EndOfInterpreter): New variables.
+ 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Use
+ 	_Unwind_FindEnclosingFunction to discover whether PC is within the
+ 	interpreter.
+ 
+ 2004-10-12  Rutger Ovidius  <ovidr@users.sourceforge.net>
+ 
+ 	PR libgcj/17903:
+ 	* testsuite/libjava.lang/md5test.java: New file.
+ 	* testsuite/libjava.lang/md5test.out: Likewise.
+ 	* testsuite/libjava.lang/shatest.java: Likewise.
+ 	* testsuite/libjava.lang/shatest.out: Likewise.
+ 
+ 2004-10-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* include/posix-threads.h <__alpha__> (_Jv_ThreadId_t): Use void*.
+ 	(_Jv_ThreadSelf): Use __builtin_thread_pointer.
+ 
+ 2004-10-08  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Calendar.java (set): Invalidate DST_OFFSET
+ 	field as a DST boundary may have been crossed.
+ 	* java/util/GregorianCalendar.java (add): Throw
+ 	IllegalArgumentException on attempt to add to DST_OFFSET or
+ 	ZONE_OFFSET fields. Update javadoc.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/CharArrayWriter.java
+ 	(resize): Removed redundant 'final' modifier.
+ 	* java/io/DataInputStream.java
+ 	(readFully): Throw IndexOutOfBoundsException of len < 0.
+ 	* java/io/FileDescriptor.java,
+ 	java/io/FileInputStream.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/ObjectOutputStream.java,
+ 	java/io/ObjectStreamClass.java,
+ 	java/io/PipedInputStream.java,
+ 	java/io/RandomAccessFile.java:
+ 	Reorganized import statements.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/rmic/RMIC.java,
+ 	gnu/java/rmi/server/RMIHashes.java,
+ 	gnu/java/rmi/server/RMIObjectInputStream.java,
+ 	gnu/java/rmi/server/UnicastConnection.java,
+ 	gnu/java/rmi/server/UnicastConnectionManager.java,
+ 	gnu/java/rmi/server/UnicastRemoteCall.java,
+ 	gnu/java/rmi/server/UnicastServerRef.java:
+ 	Reworked import statements and fixed file headers.
+ 
+ 2004-10-04  Loren J. Rittle  <ljrittle@acm.org>
+ 
+ 	* configure.ac (*-*-freebsd[[1234]]*): Refine error message
+ 	emission rule.
+ 	* configure: Rebuilt.
+ 
+ 2004-09-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/MessageFormat.java (Field): Constructor now
+ 	protected.
+ 
+ 2004-09-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/crypto/MacSpi.java: Fixed typo.
+ 
+ 2004-09-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java: Reformatted.
+ 	(loopback): Initialize with Inet4Address object.
+ 	(static): Initialize ANY_IF with Inet4Address object.
+ 	(InetAddress): Removed unused package-private constructor.
+ 
+ 2004-09-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/Beans.java,
+ 	java/beans/EventHandler.java,
+ 	java/beans/EventSetDescriptor.java,
+ 	java/beans/Introspector.java,
+ 	java/beans/PropertyEditorManager.java,
+ 	java/beans/beancontext/BeanContext.java,
+ 	java/beans/beancontext/BeanContextChild.java,
+ 	java/beans/beancontext/BeanContextChildSupport.java,
+ 	java/beans/beancontext/BeanContextMembershipEvent.java:
+ 	Reordered import statements and removed redundant modifiers.
+ 
+ 2004-09-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/17715:
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (libgcj-@gcc_version@.jar): Include properties
+ 	files.
+ 	(all_property_files): New macro.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ordinary_java_source_files): Re-sorted.
+ 	(libgcj.la): Moved to old location near lib-gnu-awt-xlib.la.
+ 
+ 2004-09-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc (_Jv_JNI_RegisterNatives): Formatting fixlets.
+ 
+ 	PR libgcj/17222:
+ 	* Makefile.am (libgcj.la): Restored.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2004-09-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java: Reformatted.
+ 	* java/net/URLClassLoader.java: Reformatted.
+ 	(getContent): Reordered return of content.
+ 	(getContentHandler): Don't check for null explicitely.
+ 
+ 2004-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedInputStream.java
+ 	(BufferedInputStream): Added Jeroen Frijters to authors.
+ 	(count): Don't explicitely initialize with default value.
+ 	(pos): Likewise.
+ 	(marklimit): Likewise.
+ 	(read): Changed boolean expression to match GNU classpath' version.
+ 	(reset): Add proper message to exception.
+ 	(skip): Check for closed stream.
+ 	(refill): Likewise.
+ 
+ 2004-09-26  Per Bothner  <per@bothner.com>
+ 
+ 	* prims.cc (unblock_signal): Annotate signum with __unused__ to
+ 	avoid warnings in the non-POSIX_VERSION case.
+ 	Also, we only need this function if either HANDLE_SEGV or HANDLE_FPE,
+ 	so place it inside an #if block.
+ 	* include/default-signal.h (SIGNAL_HANDLER): Parameters are __unused__.
+ 	* include/i386-signal.h (SIGNAL_HANDLER):  Likewise
+ 	* include/mips-signal.h (SIGNAL_HANDLER):  Likewise
+ 	* include/sparc-signal.h (SIGNAL_HANDLER):  Likewise
+ 
+ 2004-09-26  Per Bothner  <per@bothner.com>
+ 
+ 	* prims.cc (process_gcj_properties):  Optimization.
+ 
+ 2004-09-26  Per Bothner  <per@bothner.com>
+ 
+ 	* java/util/Collections.java (sort):  Copy from array in forwards
+ 	order, rather than reverse order which may be much less efficient.
+ 
+ 2004-09-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/System.java (properties): Make package private.
+ 	* java/lang/Throwable.java (StaticData.nl): Initialize through
+ 	directly accessing System.properties.getProperty().
+ 
+ 	* java/lang/Throwable.java (nl): Remove static field.
+ 	(StaticData): New private static inner class.
+ 	(stackTraceStringBuffer): Use StaticData.nl.
+ 
+ 2004-09-26  Casey Marshall <csm@gnu.org>
+ 
+ 	* java/security/ProtectionDomain.java
+ 	(<init>(CodeSource,PermissionCollection)): set `staticBinding' to
+ 	`true'.
+ 
+ 	* java/security/SecureClassLoader.java
+ 	(defineClass): make protection domain dynamically bound.
+ 	(getPermissions): call `getCurrentPolicy' to avoid permission
+ 	check.
+ 
+ 2004-09-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (core_java_source_files): Add VMTimeZone.java.
+ 	(nat_source_files): Rename natTimeZone.cc to natVMTimeZone.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 	* gcj/javaprims.h: Regenerated.
+ 
+ 	* java/util/TimeZone.java (defaultZone): Use VMTimeZone.
+ 	(getDefaultTimeZone): Make package private. Check that GMToffset
+ 	contains at least one digit.
+ 	(getDefaultTimeZoneId, readTimeZoneFile, readtzFile): (Re)Moved to
+ 	VMTimeZone.
+ 	* util/VMTimeZone.java: New file with above methods.
+ 
+ 	* java/util/natTimeZone.cc: Removed (renamed).
+ 	* java/util/natVMTimeZone.cc: Added (renamed).
+ 
+ 2004-09-25  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/TimeZone.java
+ 	(getDefaultTimeZone): Fixed test to distinguish between hours and
+ 	minutes in specified timezone.
+ 
+ 2004-09-25  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/reflect/Proxy.java (getPackage, ClassFactory): Fixed
+ 	handling of default package. (generate): Removed confused comments
+ 	and code about making Method and Field accessible.
+ 
+ 2004-09-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR java/17500:
+ 	* testsuite/libjava.compile/pr17500.java: New file.
+ 
+ 2004-09-25  Shashank Bapat  <shashankbapat@yahoo.com>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/regexp/RE.java (initialize): Add RETokenLookAhead support.
+ 	* gnu/regexp/RETokenLookAhead.java: New file.
+ 
+ 	* Makefile.am (ordinary_java_source_files): Add RETokenLookAhead.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectStreamField.java:
+ 	Removed unused import statement.
+ 
+ 2004-09-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR java/15656:
+ 	* testsuite/libjava.compile/pr15656.xfail: New file.
+ 	* testsuite/libjava.compile/pr15656.java: new file.
+ 
+ 	PR java/16789:
+ 	* testsuite/libjava.lang/pr16789.out: New file.
+ 	* testsuite/libjava.lang/pr16789.java: New file.
+ 
+ 2004-09-24  Andrew Haley  <aph@redhat.com>
+ 
+ 	PR java/16927
+ 	* testsuite/libjava.compile/AssertBug.java: New file.
+ 
+ 2004-09-24  Casey Marshall <csm@gnu.org>
+ 
+ 	* java/util/PropertyPermissionCollection.java
+ 	(implies): avoid infinite loop.
+ 
+ 2004-09-24  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* javax/security/auth/PrivateCredentialPermission.java
+ 	(PrivateCredentialPermission): added serialization UID
+ 
+ 
+ 2004-09-24  Ilya Perminov  <iperminov@logicalsoft.com>
+ 
+ 	* gnu/java/rmi/server/UnicastServer.java
+ 	(incomingMessageCall): Added code to handle Errors.
+ 	* gnu/java/rmi/server/UnicastServerRef.java
+ 	(incomingMessageCall): Added code to handle Errors.
+ 
+ 
+ 2004-09-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (loadedClasses): Declare as HashMap.
+ 	(definedPackages): Likewise.
+ 
+ 2004-09-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java:
+ 	Re-ordered imports.
+ 
+ 2004-09-24  Casey Marshall <csm@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java (callReadMethod): re-throw
+ 	`ClassNotFoundException'.
+ 
+ 2004-09-24  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java (readObject): Delegate instantation
+ 	of Externalizable classes to ObjectStreamClass.
+ 	* java/io/ObjectStreamClass.java (newInstance): New method to
+ 	instantiate Externalizable (while ignoring the accessibility of
+ 	the constructor). (constructor): New field to cache the constructor.
+ 
+ 2004-09-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URL.java (systemClassLoader): New static field.
+ 	(getURLStreamHandler): Always use system/application classloader
+ 	for finding URLStreamhandler. Remove unecessary instanceof checks.
+ 
+ 2004-09-24  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/net/URL.java
+ 	(set): This method now matches the behaviour of the JDK.
+ 	(DEFAULT_SEARCH_PATH): Added "gnu.inet".
+ 
+ 2004-09-24  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/net/URL.java (URL): Delete whitespaces in the protocol string.
+ 
+ 2004-09-24  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URL.java (URL(String,String,int,String,URLStreamHandler):
+ 	Don't set authority if host isn't specified.
+ 
+ 2004-09-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/PipeImpl.java: Use VMPipe for native stuff.
+ 	* gnu/java/nio/SelectorImpl.java: Use VMSelector for native stuff.
+ 	* gnu/java/nio/VMPipe.java,
+ 	gnu/java/nio/VMSelector.java:
+ 	New files.
+ 	* gnu/java/nio/natPipeImplEcos.cc,
+ 	gnu/java/nio/natPipeImplPosix.cc,
+ 	gnu/java/nio/natPipeImplWin32.cc:
+ 	Ported to VMPipe.
+ 	* gnu/java/nio/natSelectorImplEcos.cc,
+ 	gnu/java/nio/natSelectorImplPosix.cc,
+ 	gnu/java/nio/natSelectorImplWin32.cc:
+ 	Ported to VMSelector.
+ 	* Makefile.am: Added new files gnu/java/nio/VMPipe.java and
+ 	gnu/java/nio/VMSelector.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-09-24  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/StackTraceElement.java
+ 	(className): Renamed field to declaringClass to be compatible
+ 	with Sun serialization format.
+ 
+ 2004-09-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/applet/AppletContext.java,
+ 	java/applet/Applet.java,
+ 	java/applet/AppletStub.java,
+ 	java/applet/AudioClip.java:
+ 	Jalopied and checkstyle clean.
+ 
+ 	* javax/swing/JCheckBox.java: Reformated.
+ 	(JCheckBox): Fixed all constructors.
+ 	(isBorderPaintedFlat): New method.
+ 	(setBorderPaintedFlat): New method.
+ 	* javax/swing/JEditorPane.java
+ 	(createEditorKitForContentType): Made public.
+ 	(scrollToReference): Likewise.
+ 	* javax/swing/JTextArea.java
+ 	(setLineWrap): Fire property change.
+ 	* javax/swing/JToggleButton.java
+ 	(JToggleButton): New constructor.
+ 	(JToggleButton): Simplified.
+ 	* javax/swing/text/AttributeSet.java
+ 	(FontAttribute): Renamed from FontCharacterAttribute.
+ 	* javax/swing/text/JTextComponent.java
+ 	(KeyBinBinding): Added javadoc.
+ 	(JTextComponent): Likewise.
+ 	(getAccessibleContext): Fixed javadoc.
+ 	* javax/swing/text/View.java
+ 	(View): Added javadoc.
+ 	* javax/swing/text/TabableView.java: New file.
+ 	* Makefile.am: Added javax/swing/text/TabableView.java.
+ 	* Makefile.in: Regenerated.
+ 2004-09-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Collections.java
+ 	(binarySearch(List, Object, Comparator)): Explicitly
+ 	reverse direction in list iterator.
+ 	(rotate): Just return when list is empty.
+ 
+ 2004-09-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR java/17329:
+ 	* testsuite/libjava.compile/pr17329.java: New file.
+ 
+ 	PR java/17380:
+ 	* testsuite/libjava.jacks/jacks.xfail: Added 9.2-implicit-6 and
+ 	9.2-implicit-7.
+ 
+ 2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.am: Run aclocal with -I ../config
+ 	* acinclude.m4: Delete macros picked up from ../config and tidy.
+ 	(AM_ICONV,AM_LC_MESSAGES, PKG_CHECK_MODULES): Delete.
+ 	* aclocal.m4, configure, Makefile.in, gcj/Makefile.in: Regenerate.
+ 	* include/Makefile.in, testsuite/Makefile.in: Regenerate.
+ 
+ 2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* aclocal.m4: Regenerate with aclocal 1.9.2.
+ 	* configure: Regenerate.
+ 	* Makefile.in, gcj/Makefile.in: Regenerate with automake 1.9.2.
+ 	* include/Makefile.in, testsuite/Makefile.in: Likewise.
+ 
+ 2004-09-22  David Daney  <ddaney@avtrex.com>
+ 
+ 	PR libgcj/17623
+ 	* java/net/URL.java (URL): Copy userInfo from context.
+ 	(getUserInfo): Return cached userInfo if present.
+ 
+ 2004-09-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/6182:
+ 	* mauve-libgcj: Enable java.lang.Character tests.
+ 
+ 2004-09-22  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* Makefile.am (lib_org_ietf_jgss_la_DEPENDENCIES): Add missing
+ 	dependencies.
+ 	(lib_org_ietf_jgss_la_LIBADD): Likewise.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-09-22  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* configure.ac: Introduce AC_C_BIGENDIAN_CROSS for WORDS_BIGENDIAN.
+ 	* configure: Regenerate.
+ 	* include/config.h.in: Likewise.
+ 	* jni/gtk-peer/gtkpeer.h (SWAPU32): Introduce macro to swap pixels.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c: Moved SWAPU32
+ 	macro to gtkpeer.h.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePixels): Convert
+ 	pixels from  0xBBGGRRAA to 0xAARRGGBB only on Little Endian
+ 	architectures.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_updated):
+ 	Likewise.
+ 
+ 2004-09-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/14446:
+ 	* java/util/zip/GZIPInputStream.java (read): Avoid sign extension
+ 	when comparing CRCs.
+ 	* java/util/zip/InflaterInputStream.java (onebytebuffer): New
+ 	field.
+ 	(read()): New overload.
+ 
+ 2004-09-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA):
+ 	Indentation fix.
+ 
+ 2004-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(getLocalAddress): Return InetAddress.ANY_IF if not bound yet.
+ 
+ 2004-09-21  Casey Marshall  <csm@gnu.org>
+ 
+ 	* javax/crypto/MacSpi.java (clone): Provide meaningful
+ 	implementation.
+ 
+ 2004-09-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/16869:
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (MOSTLYCLEANFILES): Removed.
+ 	(mostlyclean-local): Remove header files.
+ 
+ 2004-09-21  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/security/cert/X509CRLSelector.java:
+ 	(match): remove unreachable try-catch clauses.
+ 	Reported by: Dalibor Topic <robilad@kaffe.org>
+ 
+ 2004-09-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/TreeMap.java (root): Don't initialize.
+ 	(TreeMap(Comparator)): Call fabricateTree(0).
+ 	(fabricateTree): Initialize root and size when count is 0.
+ 
+ 2004-09-21  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/nio/ByteBuffer.java (hashCode): Implemented.
+ 	* java/nio/CharBuffer.java: Likewise.
+ 	* java/nio/DoubleBuffer.java: Likewise.
+ 	* java/nio/FloatBuffer.java: Likewise.
+ 	* java/nio/LongBuffer.java: Likewise.
+ 	* java/nio/IntBuffer.java: Likewise.
+ 	* java/nio/ShortBuffer.java: Likewise.
+ 
+ 2004-09-21  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* javax/security/auth/x500/X500Principal.java: Fix some merge glitches.
+ 
+ 2004-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/net/ssl/SSLServerSocket.java:
+ 	Removed comment about "Do not edit this file, it's generated.".
+ 
+ 2004-09-21  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	Import the big Crypto/Jessie/Security merge from Classpath.
+ 
+ 	* Makefile.am: Add imported files.
+ 	* Makefile.in: Regenerate.
+ 
+ 	2004-08-14  Casey Marshall <csm@gnu.org>
+ 
+ 	The Big Crypto Merge of 2004.
+ 
+ 	* javax/security/auth/x500/X500Principal.java: Replaced with GNU
+ 	Crypto's version.
+ 
+ 	Files imported from GNU Crypto.
+ 	* javax/crypto/BadPaddingException.java
+ 	* javax/crypto/Cipher.java
+ 	* javax/crypto/CipherInputStream.java
+ 	* javax/crypto/CipherOutputStream.java
+ 	* javax/crypto/CipherSpi.java
+ 	* javax/crypto/EncryptedPrivateKeyInfo.java
+ 	* javax/crypto/ExemptionMechanism.java
+ 	* javax/crypto/ExemptionMechanismException.java
+ 	* javax/crypto/ExemptionMechanismSpi.java
+ 	* javax/crypto/IllegalBlockSizeException.java
+ 	* javax/crypto/KeyAgreement.java
+ 	* javax/crypto/KeyAgreementSpi.java
+ 	* javax/crypto/KeyGenerator.java
+ 	* javax/crypto/KeyGeneratorSpi.java
+ 	* javax/crypto/Mac.java
+ 	* javax/crypto/MacSpi.java
+ 	* javax/crypto/Makefile.am
+ 	* javax/crypto/NoSuchPaddingException.java
+ 	* javax/crypto/NullCipher.java
+ 	* javax/crypto/NullCipherImpl.java
+ 	* javax/crypto/SealedObject.java
+ 	* javax/crypto/SecretKey.java
+ 	* javax/crypto/SecretKeyFactory.java
+ 	* javax/crypto/SecretKeyFactorySpi.java
+ 	* javax/crypto/ShortBufferException.java
+ 	* javax/crypto/interfaces/DHKey.java
+ 	* javax/crypto/interfaces/DHPrivateKey.java
+ 	* javax/crypto/interfaces/DHPublicKey.java
+ 	* javax/crypto/interfaces/PBEKey.java
+ 	* javax/crypto/spec/DESKeySpec.java
+ 	* javax/crypto/spec/DESedeKeySpec.java
+ 	* javax/crypto/spec/DHGenParameterSpec.java
+ 	* javax/crypto/spec/DHParameterSpec.java
+ 	* javax/crypto/spec/DHPrivateKeySpec.java
+ 	* javax/crypto/spec/DHPublicKeySpec.java
+ 	* javax/crypto/spec/IvParameterSpec.java
+ 	* javax/crypto/spec/PBEKeySpec.java
+ 	* javax/crypto/spec/PBEParameterSpec.java
+ 	* javax/crypto/spec/RC2ParameterSpec.java
+ 	* javax/crypto/spec/RC5ParameterSpec.java
+ 	* javax/crypto/spec/SecretKeySpec.java
+ 	* javax/security/auth/AuthPermission.java
+ 	* javax/security/auth/DestroyFailedException.java
+ 	* javax/security/auth/Destroyable.java
+ 	* javax/security/auth/Policy.java
+ 	* javax/security/auth/PrivateCredentialPermission.java
+ 	* javax/security/auth/RefreshFailedException.java
+ 	* javax/security/auth/Refreshable.java
+ 	* javax/security/auth/Subject.java
+ 	* javax/security/auth/SubjectDomainCombiner.java
+ 	* javax/security/auth/callback/Callback.java
+ 	* javax/security/auth/callback/CallbackHandler.java
+ 	* javax/security/auth/callback/ChoiceCallback.java
+ 	* javax/security/auth/callback/ConfirmationCallback.java
+ 	* javax/security/auth/callback/LanguageCallback.java
+ 	* javax/security/auth/callback/NameCallback.java
+ 	* javax/security/auth/callback/PasswordCallback.java
+ 	* javax/security/auth/callback/TextInputCallback.java
+ 	* javax/security/auth/callback/TextOutputCallback.java
+ 	* javax/security/auth/callback/UnsupportedCallbackException.java
+ 	* javax/security/auth/login/AccountExpiredException.java
+ 	* javax/security/auth/login/AppConfigurationEntry.java
+ 	* javax/security/auth/login/Configuration.java
+ 	* javax/security/auth/login/CredentialExpiredException.java
+ 	* javax/security/auth/login/FailedLoginException.java
+ 	* javax/security/auth/login/LoginContext.java
+ 	* javax/security/auth/login/LoginException.java
+ 	* javax/security/auth/login/NullConfiguration.java
+ 	* javax/security/auth/x500/X500PrivateCredential.java
+ 	* javax/security/sasl/AuthenticationException.java
+ 	* javax/security/sasl/AuthorizeCallback.java
+ 	* javax/security/sasl/RealmCallback.java
+ 	* javax/security/sasl/RealmChoiceCallback.java
+ 	* javax/security/sasl/Sasl.java
+ 	* javax/security/sasl/SaslClient.java
+ 	* javax/security/sasl/SaslClientFactory.java
+ 	* javax/security/sasl/SaslException.java
+ 	* javax/security/sasl/SaslServer.java
+ 	* javax/security/sasl/SaslServerFactory.java
+ 	* org/ietf/jgss/ChannelBinding.java
+ 	* org/ietf/jgss/GSSContext.java
+ 	* org/ietf/jgss/GSSCredential.java
+ 	* org/ietf/jgss/GSSException.java
+ 	* org/ietf/jgss/GSSManager.java
+ 	* org/ietf/jgss/GSSName.java
+ 	* org/ietf/jgss/MessageProp.java
+ 	* org/ietf/jgss/Oid.java
+ 	* org/ietf/jgss/MessagesBundle.properties
+ 
+ 	Files imported from Jessie <http://www.nongnu.org/jessie/>
+ 	* javax/net/ServerSocketFactory.java
+ 	* javax/net/SocketFactory.java
+ 	* javax/net/VanillaServerSocketFactory.java
+ 	* javax/net/VanillaSocketFactory.java
+ 	* javax/net/ssl/HandshakeCompletedEvent.java
+ 	* javax/net/ssl/HandshakeCompletedListener.java
+ 	* javax/net/ssl/HostnameVerifier.java
+ 	* javax/net/ssl/HttpsURLConnection.java
+ 	* javax/net/ssl/KeyManager.java
+ 	* javax/net/ssl/KeyManagerFactory.java
+ 	* javax/net/ssl/KeyManagerFactorySpi.java
+ 	* javax/net/ssl/ManagerFactoryParameters.java
+ 	* javax/net/ssl/SSLContext.java
+ 	* javax/net/ssl/SSLContextSpi.java
+ 	* javax/net/ssl/SSLException.java
+ 	* javax/net/ssl/SSLHandshakeException.java
+ 	* javax/net/ssl/SSLKeyException.java
+ 	* javax/net/ssl/SSLPeerUnverifiedException.java
+ 	* javax/net/ssl/SSLPermission.java
+ 	* javax/net/ssl/SSLProtocolException.java
+ 	* javax/net/ssl/SSLServerSocket.java
+ 	* javax/net/ssl/SSLServerSocketFactory.java
+ 	* javax/net/ssl/SSLSession.java
+ 	* javax/net/ssl/SSLSessionBindingEvent.java
+ 	* javax/net/ssl/SSLSessionBindingListener.java
+ 	* javax/net/ssl/SSLSessionContext.java
+ 	* javax/net/ssl/SSLSocket.java
+ 	* javax/net/ssl/SSLSocketFactory.java
+ 	* javax/net/ssl/TrivialHostnameVerifier.java
+ 	* javax/net/ssl/TrustManager.java
+ 	* javax/net/ssl/TrustManagerFactory.java
+ 	* javax/net/ssl/TrustManagerFactorySpi.java
+ 	* javax/net/ssl/X509KeyManager.java
+ 	* javax/net/ssl/X509TrustManager.java
+ 	* javax/security/cert/Certificate.java
+ 	* javax/security/cert/CertificateEncodingException.java
+ 	* javax/security/cert/CertificateException.java
+ 	* javax/security/cert/CertificateExpiredException.java
+ 	* javax/security/cert/CertificateNotYetValidException.java
+ 	* javax/security/cert/CertificateParsingException.java
+ 	* javax/security/cert/X509CertBridge.java
+ 	* javax/security/cert/X509Certificate.java
+ 
+ 	2004-08-20  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/security/cert/X509CRLSelector.java: New file.
+ 	* java/security/cert/X509CertSelector.java: New file.
+ 
+ 2004-09-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java
+ 	(openConnection): Don't throw exception if host part for file: URI is
+ 	present. setURL() keeps file: protocol if ftp: protocol is not
+ 	available.
+ 
+ 2004-09-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* java/lang/natPosixProcess.cc (waitForSignal): Ignore return
+ 	value of sigsuspend.
+ 
+ 2004-09-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/CompoundName.java (CompoundName): Don't check for
+ 	separator in "flat" case.
+ 
+ 2004-09-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* libltdl/configure.ac: Fixed AM_INIT_AUTOMAKE usage and replaces
+ 	AM_CONFIG_HEADER by AC_CONFIG_FILES.
+ 	* libltdl/Makefile.in, libltdl/aclocal.m4, libltdl/configure:
+ 	Regenerate.
+ 
+ 2004-09-11  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	PR libgcj/14751
+ 	* win32-threads.cc (_Jv_ThreadInitData): Zero out thread
+ 	handle in newly-allocated _Jv_Thread_t.
+ 	(_Jv_ThreadDestroyData): Close thread handle.
+ 	(_Jv_ThreadStart): Remove obsolete comment.
+ 	Store handle of newly-created thread in _Jv_Thread_t.
+ 	* include/win32-threads.h: #define WIN32_LEAN_AND_MEAN
+ 	before including <windows.h>
+ 	#define _Jv_HaveCondDestroy
+ 
+ 2004-09-11  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* java/lang/natThread.cc (finalize_native): Destroy
+ 	join conditional variable and mutex if these destroy
+ 	operations are supported.
+ 
+ 2004-09-10  Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java (permission): New field.
+ 	(DEFAULT_PERMISSION): New constant.
+ 	(Connection): Create a FilePermission with permission to read file.
+ 
+ 2004-09-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(getLastModified): Moved around.
+ 	(getPermission): Return stored permission.
+ 
+ 2004-09-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-09-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am: Reverted accidently commited stuff.
+ 	* configure: Regenerated.
+ 
+ 2004-09-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(lineSeparator): Made non-final.
+ 	(static): Removed.
+ 	(connect): Initialize lineSeparator lazily. Use ByteArrayInputStream
+ 	instead of StringBufferInputStream.
+ 
+ 2004-09-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(connect): Handle file is a directory case.
+ 
+ 2004-09-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am
+ 	(xlib_includes): Removed.
+ 	(AM_CPPFLAGS): Renamed from INCLUDES.
+ 	(lib_gnu_awt_xlib_la_CPPFLAGS): New automake variable.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-09-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/ProtectionDomain.java,
+ 	* java/util/PropertyPermissionCollection.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-09-09  Sven de Marothy  <sven@physto.se>
+ 
+ 	Patch from David Gilbert <david.gilbert@object-refinery.com>
+ 	* java/lang/Comparable.java: Fixed documentation errors.
+ 	* java/util/Arrays.java: Likewise.
+ 
+ 2004-09-09  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/net/Inet4Address.java
+ 	(Inet4Address): Added comment to serialization UID.
+ 	* java/text/Format.java
+ 	(Format): Added comment to serialization UID.
+ 
+ 2004-09-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/System.java
+ 	(err): Fixed javadoci to point to setErr() and not setOut().
+ 
+ 2004-09-09  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	(normalizePath): Added special case for windows systems.
+ 
+ 2004-09-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(dupSeparator): Made private.
+ 	(File(URI)): New constructor.
+ 	(getParentFile): Fixed javadoc.
+ 	(createTempFile): Reformated.
+ 	(setReadOnly): Added comment.
+ 	(deleteOnExit): Merged javadoc with classpath version.
+ 
+ 2004-09-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am: Don't try to include deps.mk.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-09-08  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* configure.ac (AC_CONFIG_COMMANDS): Don't create subdirectories and
+ 	.d files.
+ 	* configure: Rebuilt.
+ 
+ 2004-09-04  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* java/net/natNetworkInterfaceWin32.cc (getRealNetworkInterfaces):
+ 	Changed pfn from static local to local.
+ 
+ 2004-09-03  Bryce McKinlay  <mckinlay@redhat.com>
+ 	    H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR libgcj/17290
+ 	* Makefile.am (GCJCOMPILE): Remove definition.
+ 	(AM_CFLAGS): Add -fclasspath and -fbootclasspath flags.
+ 	Use LTGCJCOMPILE, not GCJCOMPILE, to build .lo targets.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2004-09-03  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.ac (enable-gc-debug): Update help for new syntax.
+ 	* configure: Regenerate.
+ 
+ 2004-09-03  David Daney  <ddaney@avtrex.com>
+ 
+ 	* include/mips-signal.h: Update copyright.
+ 
+ 2004-09-03  David Daney  <ddaney@avtrex.com>
+ 
+ 	* configure.host: Use -fno-use-divide-subroutine for mips*-*-linux*.
+ 	* include/mips-signal.h: Added HANDLE_FPE support.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextAreaUI.java
+ 	(create): New method.
+ 	* javax/swing/text/DefaultHighlighter.java
+ 	(DefaultHighlightPainter.debugRect): Removed.
+ 	* javax/swing/text/StyleContext.java
+ 	(DEFAULT_STYLE): New field.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Add keybindings for selection.backward and
+ 	selection-forward for text components.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(paintSafely): Paint highlight only when something is actually
+ 	selected.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(handleHighlight): New method.
+ 	(setSelectionVisible): Don't do anything when nothing changes.
+ 	Handle highlight.
+ 	(moveDot): Reimplemented. Handle highlight.
+ 	(setDot): Set mark too. Handle highlight.
+ 	(getSelectionPainter): New method.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(defaultActions): Added new actions for text selection.
+ 	* javax/swing/text/DefaultHighlighter.java
+ 	(DefaultHighlightPainter): New inner class.
+ 	(DefaultPainter): New field.
+ 	(paint): Implemented.
+ 	* javax/swing/text/PlainView.java
+ 	(paint): Don't draw background here again.
+ 	* javax/swing/text/Utilities.java
+ 	(getTabbedTextWidth): Use width of ' ' instead of 'm' for tabsize.
+ 	(drawTabbedText): Likewise.
+ 
+ 2004-08-31  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(resetKeyboardActions): Add null checks.
+ 
+ 2004-08-31  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/DefaultButtonModel.java:
+ 	Skip group notification when no group is set.
+ 
+ 2004-08-31  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JColorChooser.java:
+ 	Make a couple inner classes static, for jikes.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RottView.modelToView): New method.
+ 	(UpdateHandler): Renamed from EventHandler.
+ 	(updateHandler): Renamed from eventHandler.
+ 	(modelToView): Implemented.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(BranchElement.getElement): Return null for non-existing indeces.
+ 	(BranchElement.getElementIndex): Return 0 in some corner cases.
+ 	* javax/swing/text/FieldView.java
+ 	(modelToView): New method.
+ 	* javax/swing/text/PlainView.java
+ 	(modelToView): Made public.
+ 
+ 2004-08-31  Kim Ho  <kho@redhat.com>
+ 
+ 	* Makefile.am: New files.
+ 	* Makefile.in: Regenerate.
+ 	* gcj/Makefile.in: Regenerate.
+ 	* include/Makefile.in: Regenerate.
+ 	* java/awt/Color.java: Fix documentation.
+ 	(RGBtoHSB): Use floats for conversions.
+ 	* javax/swing/ButtonGroup.java: Run Jalopy.
+ 	(setSelected): Reimplement.
+ 	* javax/swing/DefaultButtonModel.java: Run Jalopy.
+ 	(changeState): Let ButtonGroup know that the button
+ 	is changing state.
+ 	* javax/swing/JColorChooser.java: Implement.
+ 	* javax/swing/JLabel.java: Run Jalopy.
+ 	* javax/swing/JSpinner.java: Run Jalopy.
+ 	(setValue): New method.
+ 	* javax/swing/JTabbedPane.java: Run Jalopy.
+ 	(removeTabAt): Call correct remove method.
+ 	* javax/swing/SpinnerNumberModel.java: Run Jalopy.
+ 	(getPreviousValue): Compare minimum value.
+ 	* javax/swing/Timer.java: Run Jalopy.
+ 	(run): Comment out println.
+ 	* javax/swing/ToolTipManager.java:
+ 	(mouseMoved): Get new tooltip text for location.
+ 	* javax/swing/colorchooser/AbstractColorChooserPanel.java:
+ 	Jalopy and Javadoc.
+ 	* javax/swing/colorchooser/ColorChooserComponentFactory.java:
+ 	Implement.
+ 	* javax/swing/colorchooser/DefaultColorSelectionModel.java:
+ 	Run Jalopy.
+ 	(setSelectedColor): Fire ChangeEvent.
+ 	* javax/swing/colorchooser/DefaultHSBChooserPanel.java:
+ 	New file. Implement.
+ 	* javax/swing/colorchooser/DefaultPreviewPanel.java:
+ 	Ditto.
+ 	* javax/swing/colorchooser/DefaultRGBChooserPanel.java:
+ 	Ditto.
+ 	* javax/swing/colorchooser/DefaultSwatchChooserPanel.java:
+ 	Ditto.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	(getArrow): Fix size of upward pointing button.
+ 	* javax/swing/plaf/basic/BasicColorChooserUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	(getWidthOfWidestLabel): Use preferred dimensions.
+ 	(getHeightOfTallestLabel): Ditto.
+ 	* javax/swing/plaf/basic/BasicSpinnerUI.java:
+ 	Run Jalopy.
+ 	(mousePressed): Disable changes to spinner if it is not enabled.
+ 	* testsuite/Makefile.in: Regenerate.
+ 
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java,
+ 	javax/swing/plaf/basic/BasicTableUI.java:
+ 	Added copyright notice.
+ 
+ 2004-08-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/ComboBoxEditor.java: Added javadocs.
+ 	* javax/swing/ComboBoxModel.java: Likewise.
+ 	* javax/swing/DefaultComboBoxModel.java: Implemented.
+ 	* javax/swing/DefaultListCellRenderer.java: Added javadocs
+ 	and ran through jalopy to fix formatting style.
+ 	(getListCellRendererComponent): Use appropriate border
+ 	if renderer has focus and use noFocusBorder when it doesn't.
+ 	* javax/swing/JComboBox.java: Implemented.
+ 	* javax/swing/JList.java:
+ 	(locationToIndex): New Method. Implemented.
+ 	(indexToLocation): New Method.
+ 	* javax/swing/JPopupMenu.java:
+ 	(visible): New field.
+ 	(isVisible): Changed to use new field above.
+ 	(setVisible): Likewise.
+ 	* javax/swing/MutableComboBoxModel.java: Added javadocs.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	(shadow): Changed default color to Color.gray.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java: New File.
+ 	UI delegate for JComboBox.
+ 	* javax/swing/plaf/basic/BasicComboPopup.java: New File.
+ 	Popup menu containing list of JComboBox's items.
+ 	* javax/swing/plaf/basic/BasicComboBoxEditor.java: New File.
+ 	* javax/swing/plaf/basic/BasicComboBoxRenderer.java: New File.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java: New File.
+ 	* javax/swing/plaf/basic/BasicComboPopup.java: New File.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	(popupMenuWillBecomeVisible): Set selected path to the first
+ 	element only if it is of type MenuElement. Also fix formatting
+ 	style.
+ 	* javax/swing/plaf/basic/ComboPopup.java: Added javadocs and missing
+ 	methods signatures.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(createBranchElement): Use new constructor of BranchElement.
+ 	(createLeafElement): Renamed arguments.
+ 	(getRootElements): Implemented.
+ 	(BranchElement.start): Removed.
+ 	(BranchElement.end): Likewise.
+ 	(BranchElement.BranchElement): Fixed arguments.
+ 	(BranchElement.getEndOffset): Reimplemented.
+ 	(BranchElement.getStartOffset): Likewis.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(paint): Draw simple vertical line as caret instead of a rectangle.
+ 	* javax/swing/text/JTextComponent.java
+ 	(setText): Use doc directly.
+ 	* javax/swing/text/PlainView.java
+ 	(nextTabStop): Implemented.
+ 	* javax/swing/text/Utilities.java
+ 	(drawTabbedText): nextTabStop() returns an absolute x position.
+ 	(getTabbedTextWidth): Likewise.
+ 
+ 2004-08-31  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(isFocusTraversable): Predicate on isLightweight()
+ 	(setFocusable): Set isFocusTraversableOverridden.
+ 	(requestFocus): Predicate peer dispatch on !isLightweight()
+ 	(requestFocusInWindow): Likewise.
+ 	(dispatchEventImpl): Coordinate with KeyboardFocusManager.
+ 	* java/awt/Container.java
+ 	(dispatchEventImpl): Predicate on event mask.
+ 	(LightweightDispatcher): Remove focus machinery.
+ 	* java/awt/DefaultFocusTraversalPolicy.java
+ 	(accept): Expand predicate to include isFocusable().
+ 	* java/awt/DefaultKeyboardFocusManager.java:
+ 	Globally change c.dispatchEvent(e) to redispatchEvent(c,e)
+ 	* java/awt/KeyboardFocusManager.java
+ 	(redispatchEvent): Synchronize on event to prevent feedback.
+ 	* javax/swing/AbstractButton.java
+ 	(ButtonFocusListener): Remove class.
+ 	(init): Set focusPainted, focusable.
+ 	* javax/swing/ActionMap.java (get): Check parent for null.
+ 	* javax/swing/InputMap.java (get): Likewise.
+ 	* javax/swing/JComponent.java
+ 	(inputMap_whenFocused): New InputMap.
+ 	(inputMap_whenAncestorOfFocused): Likewise.
+ 	(inputMap_whenInFocusedWindow): Likewise.
+ 	(getActionForKeyStroke): Rewrite.
+ 	(getConditionForKeystroke): Likewise.
+ 	(ActionListenerProxy): New private class.
+ 	(setInputMap): Implement.
+ 	(getInputMap): Likewise.
+ 	(setActionMap): Likewise.
+ 	(getActionMap): Likewise.
+ 	(processComponentKeyEvent): New empty method.
+ 	(processKeyEvent): Implement.
+ 	(processKeyBinding): Likewise.
+ 	(resetKeyboardActions): Rewrite.
+ 	* javax/swing/KeyStroke.java: Rewrite.
+ 	* javax/swing/SwingUtilities.java
+ 	(notifyAction): Implement.
+ 	(replaceUIActionMap): Likewise.
+ 	(replaceUIInputMap): Likewise.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java
+ 	(focusGained): Implement.
+ 	(focusLost): Repaint if focusPainted().
+ 	(installKeyboardActions): Install pressed / released actions.
+ 	(uninstallKeyboardActions): Implement.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(focusColor): New field.
+ 	(installDefaults): Load focus color, install input map.
+ 	(installKeyboardActions): Implement.
+ 	(uninstallKeyboardActions): Likewise.
+ 	(paintFocus): Rewrite.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(Button.focus): New default, midPurple.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(kit): Make static.
+ 	(installUI): Get doc from kit, load defaults.
+ 	(getKeymapName): Implement.
+ 	(createKeymap): Likewise.
+ 	(installKeyboardActions): Likewise.
+ 	(getInputMap): Likewise.
+ 	(getActionMap): Likewise.
+ 	(createActionMap): Likewise.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(getStartPosition): Implement.
+ 	(getEndPosition): Likewise.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(CopyAction): New class.
+ 	(CutAction): Likewise.
+ 	(DefaultKeyTypedAction): Likewise.
+ 	(InsertBreakAction): Likewise.
+ 	(InsertContentAction): Likewise.
+ 	(InsertTabAction): Likewise.
+ 	(PasteAction): Likewise.
+ 	(defaultActions): New static table.
+ 	(createCaret): Implement.
+ 	(getActions): Likewise.
+ 	* javax/swing/text/JTextComponent.java
+ 	(KeymapWrapper): New private class.
+ 	(KeymapActionMap): Likewise.
+ 	(DefaultKeymap): New class.
+ 	(keymaps): New static table.
+ 	(keymap): New field.
+ 	(getKeymap): Implement.
+ 	(removeKeymap): Likewise.
+ 	(addKeymap): Likewise.
+ 	(setKeymap): Likewise.
+ 	(loadKeymap): Likewise.
+ 	(getActions): Likewise.
+ 	(margin): New field.
+ 	(JTextComponent): Build and install default keymap.
+ 	* javax/swing/text/TextAction.java
+ 	(textAction): Call super properly.
+ 	(getTextComponent): Implement.
+ 	* javax/swing/text/Utilities.java
+ 	(drawTabbedText): Adjust position by ascent.
+ 
+ 2004-08-31  David Jee  <djee@redhat.com>
+ 
+ 	PR AWT/17156
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
+ 	(setEnabled): Make it a native method.
+ 	* java/awt/DefaultKeyboardFocusManager.java
+ 	(postProcessKeyEvent): Only post event if the menu item
+ 	is active.
+ 	* java/awt/MenuItem.java:
+ 	Private field 'enabled' should be true by default.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(setEnabled): New function.
+ 
+ 2004-08-31  David Jee  <djee@redhat.com>
+ 
+ 	PR AWT/17059
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
+ 	(nativeSetHelpMenu): New native method declaration.
+ 	(addHelpMenu): Call nativeSetHelpMenu().
+ 	(addMenu): Remove.
+ 	* java/awt/MenuBar.java
+ 	(setHelpMenu): Call addNotify() on the new help menu.
+ 	(add): Call addNotify() on the new menu.
+ 	(addNotify): Set the help menu if one exists.
+ 	* java/awt/peer/MenuBarPeer.java
+ 	(addMenu): Remove.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
+ 	(nativeSetHelpMenu): New method.
+ 
+ 2004-08-31  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* Makefile.am: Add new files.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/Box.java: Fix setting of layout in ctor.
+ 	* javax/swing/JScrollPane.java: Scroll headers as well.
+ 	* javax/swing/JTable.java: Reimplement.
+ 	* javax/swing/JViewPort.java: Only add non-null children.
+ 	* javax/swing/ScrollPaneLayout.java: Correct header calculations.
+ 	* javax/swing/Timer.java: Fix stopping null waker.
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java: New file.
+ 	* javax/swing/plaf/basic/BasicTableUI.java: New file.
+ 	* javax/swing/table/DefaultTableCellRenderer.java: Configure.
+ 	* javax/swing/table/DefaultTableColumnModel.java: Flesh out.
+ 	* javax/swing/table/DefaultTableModel.java: Clean up.
+ 	* javax/swing/table/JTableHeader.java: Implement.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/JSpinner.java (getChangeListeners): Remove double
+ 	semi-colon.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
+ 	Declare variables at top of functions/block.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Likewise.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Rectangle.java (intersects): Check r.width and r.height
+ 	first.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/PlainView.java
+ 	(selectedColor): New field.
+ 	(unselectedColor): Likewise.
+ 	(font): Likewise.
+ 	(updateMetrics): New method.
+ 	(lineToRect): Likewise.
+ 	(modelToView): Likewise.
+ 	(drawSelectedText): Use color from JTextComponent ad draw with
+ 	Utilities class.
+ 	(drawUnselectedText): Likewise.
+ 	(paint): Initialize helper fields.
+ 	* javax/swing/text/View.java
+ 	(getChildAllocation): New method.
+ 	(getViewIndex): Likewise.
+ 	(getToolTipText): Likewise.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/Utilities.java
+ 	(drawTabbedText): Reimplemented.
+ 	(getTabbedTextWidth): Likewise.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installDefaults): Install caret and highlighter.
+ 	(modelToView): Use Bias.Forward when calling sibling.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(ElementEdit): Implements DocumentEvent.ElementChange.
+ 	(ElementEdit.ElementEdit): New method.
+ 	(ElementEdit.getChildrenAdded): Likewise.
+ 	(ElementEdit.getChildrenRemoved): Likewise.
+ 	(ElementEdit.getElement): Likewise.
+ 	(ElementEdit.getIndex): Likewise.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(color): Removed.
+ 	(textComponent): Renamed from parent, made private.
+ 	(selectionVisible): Renamed from vis_sel, made private.
+ 	(blinkRate): Renamed from blink, made private.
+ 	(magicCaretPosition): Renamed from magic, made private.
+ 	(visible): Renamed from vis, made private.
+ 	(dot): Made private.
+ 	(mark): Likewise.
+ 	(deinstall): Remove as MouseMotionListener.
+ 	(install): Initialize textComponent first. Add as MouseMotionListener.
+ 	(paint): Reimplemented.
+ 	* javax/swing/text/JTextComponent.java
+ 	(setCaret): Deinstall old caret, install new one and fire property
+ 	change after setting property.
+ 	(setHighlighter): Deinstall old highlighter, install new one and fire
+ 	property change after setting property.
+ 	(setCaretColor): Fire property change after setting property.
+ 	(setDisabledTextColor): Likewise.
+ 	(setSelectedTextColor): Likewise.
+ 	(setSelectionColor): Likewise.
+ 	(modelToView): New method.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(getText): Simplified.
+ 	* javax/swing/text/Segment.java
+ 	(current): New field.
+ 	(current): Reimplemented.
+ 	(first): Likewise.
+ 	(getIndex): Likewise.
+ 	(last): Likewise.
+ 	(next): Likewise.
+ 	(previous): Likewise.
+ 	(setIndex): Likewise.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(defaultTextIconGap): Made protected.
+ 	(defaultTextShiftOffset): Likewise.
+ 	(textShiftOffset): New field.
+ 	(clearTextShiftOffset): New method.
+ 	(getTextShiftOffset): Likewise.
+ 	(setTextShiftOffset): Likewise.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installUI): Add eventHandler as property listener.
+ 	(uninstallUI): remove eventHandler as propert listener.
+ 	(installDefaults): Added comment.
+ 	(installListeners): Likewise.
+ 	(installKeyboardActions): Likewise.
+ 	(uninstallDefaults): Likewise.
+ 	(uninstallListeners): Likewise.
+ 	(uninstallKeyboardActions): Likewise.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	Fixed some typos in comments.
+ 	(insertString): Reimplemented.
+ 	(remove): Likewise.
+ 	(replace): New method.
+ 	(children): Dont use fully qualified class name.
+ 	(DefaultDocumentEvent.offset): Renamed from off.
+ 	(DefaultDocumentEvent.length): Renamed from len.
+ 	(DefaultDocumentEvent.type): New field.
+ 	(DefaultDocumentEvent.DefaultDocumentEvent): New constructor.
+ 	(DefaultDocumentEvent.getType): Implemented.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.textComponent): Removed.
+ 	(RootView.RootView): Don't initialize textComponent.
+ 	(RootView.getViewFactory): New method.
+ 	(EventHandler): New inner class.
+ 	(rootView): Initialize at instance creation.
+ 	(eventHandler): New field.
+ 	(installUI): Don't create view hierarchy directly,
+ 	call modelChanged() instead.
+ 	(modelChanged): New method.
+ 	* javax/swing/text/JTextComponent.java
+ 	(setDocument): Fire property change event.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.paint): Removed debug output.
+ 	(paintSafely): Draw highlighter before text.
+ 	(paintBackground): Use background color of text component.
+ 	* javax/swing/plaf/basic/BasicToggleButtonUI.java:
+ 	Reformatted.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(BasicToolBarUI): Fixed arguments for constructor.
+ 	(createUI): Fixed creation of object.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(fireValueChanged): Renamed from fireSelectionValueChanged,
+ 	made protected.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/TabSet.java
+ 	(TabSet): Implements java.io.Serializable.
+ 	* javax/swing/text/TabStop.java
+ 	(TabStop): Implements java.io.Serializable.
+ 	(TabStop): Made public.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(setUI): Fire PropertyChange.
+ 	* javax/swing/JLabel.java
+ 	(text): Renamed from labelText.
+ 	(horizontalAlignment): New default vlaue.
+ 	(icon): Renamed from activeIcon.
+ 	(displayedMnemonic): Renamed from mnemonicKey, added default value.
+ 	(displayedMnemonicIndex): Renamed from underlineChar.
+ 	(setDisplayedMnemonic): Reimplemented.
+ 	* javax/swing/JRadioButton.java
+ 	(JRadioButton): New constructors.
+ 	* javax/swing/JTextField.java
+ 	(JTextField): Throw exception if colums < 0, initialitialz
+ 	this.columns directly and initialize document with text conditionally.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicFormattedTextFieldUI.java,
+ 	javax/swing/plaf/basic/BasicPasswordFieldUI.java,
+ 	javax/swing/plaf/basic/BasicTextAreaUI.java: New files.
+ 	* javax/swing/text/FieldView.java
+ 	(paint): Just call super method for now.
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-31  Ka-Hing Cheung  <kahing@javabsp.org>
+ 
+ 	* javax/swing/AbstractSpinnerModel.java,
+ 	javax/swing/JSpinner.java,
+ 	javax/swing/SpinnerNumberModel.java,
+ 	javax/swing/plaf/basic/BasicSpinnerUI.java:
+ 	New files.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initClassDefaults): Added defaults for BasicSpinnerUI.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/TransferHandler.java,
+ 	javax/swing/plaf/basic/ComboPopup.java: New files
+ 	* Makefile.am: Added javax/swing/TransferHandler.java and
+ 	javax/swing/plaf/basic/ComboPopup.java
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-31  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/text/Utilities.java: New file.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am: Added javax/swing/text/Utilities.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-31  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/text/SimpleAttributeSet.java: New file.
+ 	* javax/swing/text/StyleConstants.java: New file.
+ 	* javax/swing/text/StyleContext.java: New file.
+ 	* javax/swing/text/TabSet.java: New file.
+ 	* javax/swing/text/TabStop.java: New file.
+ 	* javax/swing/text/AbstactDocument.java:
+ 	(AbstractElement): Implement attribute support.
+ 	* javax/swing/text/AttributeSet.java
+ 	(NameAttribute): New static field.
+ 	(ResolveAttribute): New static field.
+ 	* Makefile.am: Update for new files.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-08-31  Craig Black  <craig.black@aonix.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(drawImage): Add support for scaling pixmaps.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(copyAndScalePixmap): New native method.
+ 
+ 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR AWT/16121
+ 	* jni/gtk-peer/gthread-jni.c: Include stdio.h.  Eliminate
+ 	type-punning compiler warnings using unions.
+ 	(throw): Replace bzero with memset.
+ 
+ 2004-08-31  Andreas Tobler  <a.tobler@schweiz.ch>
+ 	    Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: Move
+ 	NSA_PB macros to gtkpeer.h.  Include gtkpeer.h.
+ 	* jni/gtk-peer/gtkpeer.h: Move NSA_PB macros here.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(nativeSetIconImageFromDecoder): Use NSA_GET_PB_PTR macro.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c:
+ 	#include gdk.h, not gtk.h. #include jni.h, native_state.h, string.h
+ 	and stdlib.h, not gtkpeer.h.
+ 	(*vm): New static variable.
+ 	(areaPreparedID): Make static.
+ 	(areaUpdatedID): Likewise.
+ 	(area_prepared): Get and use JNIEnv through stored JavaVM *vm.
+ 	(area_prepared): Likewise.
+ 	(area_updated): Likewise.
+ 	(closed): Likewise.
+ 	(initStaticState): Initialize *vm javaVM.
+ 	(pumpBytes): Use given env, not global gdk_env.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/geom/CubicCurve2D.java (solveCubic): Removed duplicate
+ 	comments.
+ 
+ 2004-08-31  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/CubicCurve2D.java: Reindent.
+ 	(contains): Implemented.
+ 	(intersects): Implemented.
+ 	* java/awt/geom/QuadCurve2D.java: Likewise.
+ 	* java/awt/geom/GeneralPath.java: Reindent and document.
+ 	Fully (re)implemented using separate xpoints and ypoints
+ 	float[] coords.
+ 	* java/awt/geom/RoundRectangle2D.java: Several bugfixes (Bug #6007).
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JMenuItem.java
+ 	(getMenuDragMouseListeners): New method.
+ 	(getMenuKeyListeners): Likewise.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(model): Made protected.
+ 	(actionListener): Likewise.
+ 	(changeListener): Likewise.
+ 	(itemListener): Likewise.
+ 	(multiClickThreshhold): New field.
+ 	(getActionListeners): New method.
+ 	(getChangeListeners): Likewise.
+ 	(getItemListeners): Likewise.
+ 	(fireItemStateChanged): Simplified implementation.
+ 	(fireActionPerformed): Likewise.
+ 	(fireStateChanged): Likewise.
+ 	(getMultiClickThreshhold): New method.
+ 	(setMultiClickThreshhold): Likewise.
+ 
+ 2004-08-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/image/Kernel.java (clone): Use super.clone().
+ 
+ 2004-08-31  David Jee  <djee@redhat.com>
+ 
+ 	PR AWT/16682
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
+ 	(nativeSetIconImageFromData): New native method declaration.
+ 	(setIconImage): Handle images not produced from GdkPixbufDecoder.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java
+ 	(getPixelCache): New method.
+ 	(getColorModel): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
+ 	(free_pixbuf_data): New helper function.
+ 	(nativeSetIconImageFromData): New function.
+ 
+ 2004-08-31  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	PR SWING/16576
+ 	* javax/swing/JLayeredPane.java
+ 	(setLayer): Permit changing layer after addition.
+ 	(setPosition): Permit over-length positions.
+ 	(layerToRange): Compare intValue()s.
+ 	* javax/swing/Box.java (createHorizontalBox): Implement.
+ 	(createRigidArea): Likewise.
+ 	(createVerticalBox): Likewise.
+ 
+ 2004-08-31  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Component.java:
+ 	(processMouseEvent): Consume event after
+ 	listeners process it.
+ 	(processMouseMotionEvent): ditto.
+ 	(processMouseWheelEvent): ditto.
+ 	* java/awt/Container.java:
+ 	(acquireComponentForMouseEvent):
+ 	Do not dispatch to events that have been
+ 	removed from the Container.
+ 	(handleEvent): Consume the MouseEvents.
+ 	* javax/swing/RepaintManager.java:
+ 	(paintDirtyRegions): Do not add to list of
+ 	damaged areas if the component has no root.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Clean ip imports.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (getFontPeer): Don't return
+ 	null when a MissingResourceException is thrown. Should never happen.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/EventQueue.java (postEvent): Throw NullPointerException
+ 	when argument is null.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
+ 	Define hid at start of function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
+ 	Likewise.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java: Reindent.
+ 	* javax/swing/JButton.java: Reindent.
+ 	* javax/swing/JCheckBox.java: Reindent.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (gtk_c_source_files): Added
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c.
+ 	(gtk_awt_peer_sources): Added
+ 	gnu/java/awt/peer/gtk/GThreadMutex.java and
+ 	gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-31  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* jni/gtk-peer/gthread-jni.c: don't #include nonexistent files
+ 
+ 2004-08-31  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* jni/gtk-peer/gthread-jni.c (c-font-lock-extra-types):
+ 	Added jfieldID, jmethodID.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): Initialize
+ 	gdk_env before calling any gdk or gtk function.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMainThread.java (gtkInitCalled): New field.
+ 	(GtkMainThread): Call wait() in while loop waiting for gtkInitCalled.
+ 	(run): Set gtkInitCalled.
+ 
+ 2004-08-31  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMainThread.java (run): Pass the value of
+ 	the gnu.classpath.awt.gtk.portable.native.sync system property to C.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): New argument,
+ 	portableNativeSync.  Delegate PORTABLE_NATIVE_SYNC work to
+ 	init_glib_threads.
+ 	(init_glib_threads): New function.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni/gtk-peer/gthread-jni.c: Define MIN_, MAX_ and NORM_
+ 	PRIORITY when not already defined in header file.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni/gtk-peer/gthread-jni.c (setup_cache): Call
+ 	ExceptionOccurred, not ExceptionCheck, when we don't have JNI 1.2.
+ 
+ 2004-08-31  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* gnu/native/jni/gtk-peer/gthread-jni.c: Indentation fixes.
+ 	Implemented missing functions for GTK2.
+ 	Added error handling.
+ 	Renamed static functions out of the g_ namespace.
+ 	Added TRACE_API_CALLS, EXPLAIN_TROUBLE, EXPLAIN_BROKEN,
+ 	EXPLAIN_BADLY_BROKEN, and DELETE_LOCAL_REFS options.
+ 	Rewrote global-reference code.
+ 	Eliminated cascading errors.
+ 	(mutex_trylock_jni_impl) Fully implemented.
+ 	(cond_timed_wait_jni_impl) Went from millisecond to microsecond
+ 	resolution.
+ 	(setup_cache) New function.
+ 	(mutex_cond_wait_jni_impl, mutex_cond_timed_wait_jni_impl) Fixed
+ 	bug where they were not unlocking the GMutex associated with the
+ 	condition variable during the wait on that condition variable.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
+ 	native/jni/gtk-peer/gthread-jni.c,
+ 	native/jni/gtk-peer/gthread-jni.h
+ 	(g_thread_jni_functions): Renamed to ...
+ 	(portable_native_sync_jni_functions): this name.
+ 	(gdk_vm): Renamed to...
+ 	(the_vm): this name.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(gdk_vm): Removed duplicate definition.
+ 	(gtkInit): Removed stray message to stdout.
+ 	(gtkInit): Use g_malloc and g_free instead of malloc and free.
+ 	(gtkInit): Fix a const assignment bug.
+ 	(gtkInit): Simplified code.
+ 
+ 	* gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h,
+ 	gnu/java/awt/peer/gtk/GThreadMutex.java:
+ 	New files.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/Box.java: Put FIXME comment above class declaration.
+ 	* javax/swing/JButton.java: Remove illegal L&F HTML from comments.
+ 	* javax/swing/JCheckBox.java: Likewise.
+ 	* javax/swing/JDialog.java: Likewise.
+ 	* javax/swing/JRadioButton.java: Likewise.
+ 	* javax/swing/JToggleButton.java: Likewise.
+ 	* javax/swing/UIManager.java: Likewise.
+ 	* javax/swing/border/TitledBorder.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
+ 	* javax/swing/text/JTextComponent.java: Likewise.
+ 
+ 2004-08-31  David Jee  <djee@redhat.com>
+ 
+ 	PR AWT/16682
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(setIconImage): Add a FIXME for unhandled cases.
+ 
+ 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR AWT/16040
+ 	* gnu/awt/LightweightRedirector.java: Call getModifiersEx, not
+ 	getModifiers.  Replace old button masks with new ones.
+ 	* gnu/awt/xlib/XEventLoop.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
+ 	* java/awt/AWTKeyStroke.java: Remove old modifier masks.
+ 	* java/awt/Component.java: Replace old modifier	masks with new
+ 	ones.
+ 	* java/awt/Container.java: Call getModifiersEx, not
+ 	getModifiers.
+ 	* java/awt/DefaultKeyboardFocusManager.java: Likewise.  Remove
+ 	old modifier masks.
+ 	* javax/swing/JMenuItem.java: Replace old button masks with new
+ 	ones.
+ 	* javax/swing/KeyStroke.java: Call getModifiersEx, not
+ 	getModifiers.
+ 	* javax/swing/SwingUtilities.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Replace old
+ 	mask macros with new ones.
+ 	* jni/gtk-peer/gtkpeer.h: Replace old button and modifier mask
+ 	macros with new ones representing new masks.
+ 
+ 2004-08-31  Craig Black  <craig.black@aonix.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(drawRoundRect): Implemented.
+ 	(fillRoundRect): Implemented.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(drawRoundRect): Reimplemented to match GdkGraphics.
+ 	(fillRoundRect): Reimplemented to match GdkGraphics.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java
+ 	(addNotify): Use AccessController to allow execution of privileged
+ 	code.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java
+ 	(static): Removed.
+ 	(addNotify): Set peer via reflection.
+ 	(setWindowPeer): Removed.
+ 	* gnu/java/awt/natEmbeddedWindow.cc: Removed.
+ 	* Makefile.am (nat_source_files):
+ 	Removed gnu/java/awt/natEmbeddedWindow.cc.
+ 
+ 2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* Makefile.am: Add  gnu/java/security/action/GetPropertyAction.java
+ 	and gnu/java/security/action/SetAccessibleAction.java.
+ 
+ 2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/security/action/GetPropertyAction.java (setParameters):
+ 	Renamed from 'setName'. New 2-argument form with default value.
+ 	(run): Pass default 'value' parameter to System.getProperty().
+ 	* gnu/java/security/action/SetAccessibleAction.java: Fix javadoc
+ 	typos.
+ 
+ 2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/security/action/GetPropertyAction.java: New class.
+ 	* gnu/java/security/action/SetAccessibleAction.java: New class.
+ 
+ 2004-08-31  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(setIconImage): Check if image is null.
+ 
+ 2004-08-31  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(create): Set the icon image.
+ 	(nativeSetIconImage): New native method declaration.
+ 	(setIconImage): Implement.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(nativeSetIconImage): New function.
+ 
+ 2004-08-31  Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(filenameFilterCallback): Declare local variable accepted before use.
+ 
+ 2004-08-31  Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* gnu/java/awt/ComponentDataBlitOp.java:
+ 	Cleaned up imports.
+ 
+ 2004-08-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/awt/peer/GLightweightPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	javax/swing/JScrollPane.java: Removed
+ 	redundant imports.
+ 
+ 2004-08-31  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java
+ 	(postProcessKeyEvent): Only activate MenuShortcuts on KEY_PRESSED
+ 	event.  Fix shift modifier checking.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(accel_attach): Remove.
+ 	(setupAccelGroup): Remove calls to accel_attach.
+ 
+ 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkArg.java: Remove file.
+ 	* gnu/java/awt/peer/gtk/GtkArgList.java: Remove file.
+ 
+ 	* Makefile.am (gtk_awt_peer_sources): Remove GtkArg.java and
+ 	GtkArgList.java.
+ 	(gtk_c_files): Use CAIRO_CFLAGS and PANGOFT2_CFLAGS, not _LIBS.
+ 	* Makefile.in: Regenerate.
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(create(String)): New method.
+ 	(create): Call new create method.
+ 	(getArgs): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(nativeCreate): Rename to create.
+ 	(gtkSetLabel): Rename to gtkButtonSetLabel.
+ 	(gtkToggleButtonSetActive): New method.
+ 	(create): Call gtkToggleButtonSetActive and gtkButtonSetLabel.
+ 	(setState): Replace set call with gtkToggleButtonSetActive.
+ 	(setLabel): Replace gtkSetLabel call with gtkButtonSetLabel.
+ 	(getArgs): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetSetSensitive): New method.
+ 	(gtkWidgetSetParent): Likewise.
+ 	(GtkComponentPeer): Call setParent, setComponentBounds and
+ 	setVisibleAndEnabled.
+ 	(setParent): New method.
+ 	(setComponentBounds): New method.
+ 	(setVisibleAndEnabled): New method.
+ 	(setEnabled): Call gtkWidgetSetSensitive.
+ 	(getArgs): Remove method.
+ 	Remove all set methods.
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (create): Call
+ 	gtkWindowSetModal, setTitle and setResizable.
+ 	(getArgs): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(setComponentBounds): New method.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setResizable):
+ 	Replace set call with gtkWindowSetResizable.
+ 	(getArgs): Remove method.
+ 	(create): Call setTitle and setResizable.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(gtkWindowSetTitle): New method.
+ 	(gtkWindowSetResizable): New method.
+ 	(gtkWindowSetModal): New method.
+ 	(setParent): New method.
+ 	(setVisibleAndEnabled): New method.
+ 	(getArgs): Remove method.
+ 	(setTitle): Call gtkWindowSetTitle.
+ 	(setResizable): Call gtkWindowSetResizable.
+ 	* jni/gtk-peer/gtkpeer.h [DEBUG_LOCKING]: New define to turn on
+ 	and off locking instrumentation.
+ 
+ 2004-08-31  Kim Ho  <kho@redhat.com>
+ 
+ 	* Makefile.am: Add new file.
+ 	* Makefile.in: Regenerate.
+ 	* gcj/Makefile.in: Regenerate
+ 	* include/Makefile.in:
+ 	* java/awt/Container.java:
+ 	(acquireComponentForMouseEvent): Respect
+ 	the event mask when looking for candidate.
+ 	* javax/swing/JComponent.java:
+ 	Remove toolTip field.
+ 	(createToolTip): Create a tooltip on demand.
+ 	(setToolTipText): Register with the ToolTipManager.
+ 	(getToolTipText(MouseEvent)): Return getToolTipText().
+ 	* javax/swing/JToolTip.java: Implement.
+ 	* javax/swing/Timer.java: Jalopy.
+ 	(restart): Call stop, then start.
+ 	(stop): Interrupt the timer rather than wait for
+ 	the timer to come to a stop naturally.
+ 	* javax/swing/ToolTipManager.java: Implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Change ToolTip.background color.
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java:
+ 	Implement.
+ 	* testsuite/Makefile.in: Regenerate
+ 
+ 2004-08-31  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/DirectColorModel.java (DirectColorModel): Fix
+ 	constructor param comments.
+ 
+ 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java: Document AWT 1.0 event handler
+ 	methods.
+ 
+ 2004-08-31  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/Box.java:
+ 	(createGlue): Implemented
+ 	(createHorizontalGlue): Implemented
+ 	(createHorizontalStrut): Implemented
+ 	(createVerticalGlue): Implemented
+ 	(createVerticalStrut): Implemented
+ 
+ 2004-08-31  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java
+ 	(GtkChoicePeer): Do not automatically select first item.
+ 	(getHistory): Remove.
+ 	(nativeGetSelected): New method.
+ 	(nativeRemoveAll): New method.
+ 	(add): Use nativeGetSelected() instead of getHistory().
+ 	(remove): Likewise.
+ 	(removeAll): Call nativeRemoveAll().
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(create): Migrate to GtkComboBox.
+ 	(append): Likewise.
+ 	(nativeAdd): Likewise.
+ 	(nativeRemove): Likewise.
+ 	(select): Likewise.
+ 	(nativeRemoveAll): New method.
+ 	(nativeGetSelected): New method.
+ 	(selection_changed): New method.
+ 	(getHistory): Remove.
+ 	(item_activate): Remove.
+ 	(item_removed): Remove.
+ 	(connect_choice_item_selectable_hook): Remove.
+ 
+ 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (create): Use tf
+ 	variable in setEditable call.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(gtkWidgetSetBackground): New method.
+ 	(gtkWidgetSetForeground): Likewise.
+ 	(create): Set peer's editable state based on awtComponent's.
+ 
+ 	* java/awt/Button.java (Button()): Use empty string rather than
+ 	null in no-label constructor.
+ 
+ 2004-08-31  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/BoxLayout.java: Reimplement.
+ 
+ 2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(initState(GtkComponentPeer)): Don't return array of colour
+ 	values.
+ 	(GdkGraphics(int,int)): Set default font to size 12.
+ 	(GdkGraphics(GtkComponentPeer)): Set graphics colour to
+ 	component's foreground colour.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(initState(GtkComponentPeer)): Don't return array of colour
+ 	values.
+ 	(GdkGraphics2D(GtkComponentPeer)): Set foreground and background
+ 	colours to component's colours.
+ 	(current_colors_of_widget): Remove function.
+ 	* gnu/java/awt/peer/gtk/GtkOffScreenImage.java (getGraphics):
+ 	Return a new graphics object.
+ 	* java/awt/Font.java (toString): Fix format.
+ 	* java/awt/Graphics.java (toString): Likewise.
+ 
+ 2004-08-31  Craig Black  <craig.black@aonix.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(addTearOff): New function.
+ 	* gnu/java/awt/peer/gtk/GtkMenuPeer.java (addTearOff):
+ 	New native method.
+ 	(init): Call addTearOff() when menu.isTearOff().
+ 
+ 2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java (createImageProducer): New.
+ 	Default implementation.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createImageProducer): New.
+ 	Implement using GdkPixbufDecoder.
+ 
+ 2004-08-31  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(GtkComponentPeer): Use gtkWidgetGetPreferredDimensions() for
+ 	setting the size of GtkFileDialogPeers.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetGetPreferredDimensions): For widgets extending GtkWindow,
+ 	use their default sizes rather than their natural requisitions.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(JFormattedTextField): Implemented.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(BeepAction): New inner class.
+ 	* javax/swing/text/Segment.java
+ 	(partialReturn): New field.
+ 	(setPartialReturn): New method.
+ 	(isPartialReturn): Likewise.
+ 	* javax/swing/text/View.java
+ 	(createFragment): Fixed typo.
+ 	(getStartOffset): New method.
+ 	(getEndOffset): Likewise.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/DefaultTableColumnModel.java
+ 	(serialVersionUID): Made private.
+ 	(listenerList): Initialize.
+ 	(changeEvent): Initialize.
+ 	* javax/swing/table/JTableHeader.java
+ 	(JTableHeader): New constructors.
+ 	(createDefaultColumnModel): New method.
+ 	* javax/swing/table/TableColumn.java
+ 	(setHeaderRenderer): Simplified code.
+ 	(setCellRenderer): Likewise.
+ 	(setWidth): Likewise.
+ 
+ 2004-08-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/AttributedString.java (AttributedString): Use
+ 	ArrayList to build array of attribute ranges.  Don't use
+ 	`attribs' before it is set.
+ 
+ 2004-08-30  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* HACKING: Remove reference to special automake. No longer needed.
+ 
+ 2004-08-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/security/util/Prime.java (generateRandomPrime): Use
+ 	return result from `add'.
+ 
+ 2004-08-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/rmi/server/UID.java (UID): Read `nextCount', not count.
+ 
+ 2004-08-30  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* gnu/java/security/der/DEREncodingException.java: Remove whitespaces.
+ 
+ 2004-08-30  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/File.java File(String,String): Fixed handling of empty
+ 	path.
+ 
+ 2004-08-30  Casey Marshall  <csm@gnu.org>
+ 
+ 	Author e-mail updated for all files.
+ 	* gnu/java/security/OID.java (equals): Test if the aurgment is an
+ 	instance of OID.
+ 	(compareTo): Use `equals'.
+ 	* gnu/java/security/der/BitString.java (equals): Test if the
+ 	argument is an instance of BitString.
+ 	* gnu/java/security/der/DERReader.java: Removed NIO imports.  Made
+ 	class final. Made fields private.
+ 	(<init>): New constructor.
+ 	(skip): New method.
+ 	(makeString): Made static; don't use NIO.
+ 	(fromIso88591, fromUtf16Be, fromUtf8): New methods.
+ 	* gnu/java/security/der/DERWriter.java: Fixed imports.
+ 	(writeString): Don't use NIO.
+ 	(toIso88591, toUtf16Be, toUtf8): New methods.
+ 	* gnu/java/security/der/DERValue.java: Formatting changes only.
+ 	* gnu/java/security/der/DER.java: Likewise.
+ 
+ 2004-08-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/nio/CharBuffer.java (put): Fix typo.
+ 	* java/nio/DoubleBuffer.java (put): Fix typo.
+ 	* java/nio/FloatBuffer.java (put): Fix typo.
+ 	* java/nio/IntBuffer.java (put): Fix typo.
+ 	* java/nio/LongBuffer.java (put): Fix typo.
+ 	* java/nio/ShortBuffer.java (put): Fix typo.
+ 
+ 2004-08-30  Florian Weimer  <fw@deneb.enyo.de>
+ 
+ 	* java/nio/ByteBuffer.java (put): Fix typo.
+ 
+ 2004-08-30  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/security/DummyKeyPairGenerator.java (clone): Removed
+ 	useless instanceof check.
+ 	* java/security/DummyMessageDigest.java (clone): Likewise.
+ 	* java/security/DummySignature.java (clone): Likewise.
+ 	* java/security/MessageDigest.java (clone): Remove useless
+ 	instanceof check.
+ 	* java/security/MessageDigestSpi.java (clone): Likewise.
+ 	* java/security/Signature.java (clone): Provide meaningful
+ 	implementation.
+ 	* java/security/SignatureSpi.java (clone): Likewise.
+ 
+ 2004-08-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Arrays.java
+ 	(sort(byte[], int, int)): Check fromIndex < 0.
+ 	(sort(char[], int, int)): Likewise.
+ 	(sort(short[], int, int)): Likewise.
+ 	(sort(int[], int, int)): Likewise.
+ 	(sort(long[], int, int)): Likewise.
+ 	(sort(float[], int, int)): Likewise.
+ 	(sort(double[], int, int)): Likewise.
+ 	(sort(Object[], int, int, Comparator)): Likewise.
+ 	(qsort(byte[], int, int)): Honor lower bound from in insertion sort.
+ 	(qsort(char[], int, int)): Likewise.
+ 	(qsort(short[], int, int)): Likewise.
+ 	(qsort(int[], int, int)): Likewise.
+ 	(qsort(long[], int, int)): Likewise.
+ 	(qsort(float[], int, int)): Likewise.
+ 	(qsort(double[], int, int)): Likewise.
+ 
+ 2004-08-29  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/AbstractCollection.java, java/util/AbstractList.java,
+ 	java/util/AbstractMap.java, java/util/AbstractSequentialList.java,
+ 	java/util/ArrayList.java, java/util/Arrays.java,
+ 	java/util/BitSet.java, java/util/Calendar.java,
+ 	java/util/Collection.java, java/util/ListIterator.java,
+ 	java/util/Map.java, java/util/SortedSet.java:
+ 	Added additional exceptions to documentation, along
+ 	with some additions and corrections.
+ 
+ 2004-08-27  Hans Boehm  <Hans.Boehm@hp.com>
+ 
+ 	* configure.ac: Handle --enable-gc-debug.
+ 	* configure: Regenerate.
+ 	* include/config.h.in (LIBGCJ_GC_DEBUG): Add.
+ 	* boehm.cc: Include gc_mark.h, javaxfc.h, but no GC private files.
+ 	Rearrange include file order.
+ 	(GC_DEBUG): Set if LIBGCJ_GC_DEBUG is set.
+ 	(GC_finalize_all, GC_debug_generic_malloc): Don't declare.
+ 	(disable_gc_mutex): Delete along with all references.
+ 	(_Jv_MarkObj, _Jv_MarkArray): Use public types,
+ 	adjust for debug header size.
+ 	(_Jv_AllocObj, _Jv_allocPtrFreeObj): Define out of line for
+ 	debug case.
+ 	(_Jv_AllocArray): Declare min_heap_addr only if needed.
+ 	(gcj_describe_type_fn): New.
+ 	(_Jv_InitGC): Use GC_new_free_list, GC_new_proc, and GC_new_kind.
+ 	Register gcj_describe_type_fn.
+ 	* include/boehm-gc.h:
+ 	(_Jv_AllocObj, _Jv_allocPtrFreeObj):
+ 	Don't define, but declare, for debug case.
+ 	* java/lang/natObject.cc:
+ 	(GC_DEBUG): Define if LIBGCJ_GC_DEBUG is set.
+ 
+ 2004-08-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes PR libgcj/17002:
+ 	* java/util/TimeZone.java (defaultZone): Try a couple of ways to get
+ 	a TimeZoneId string and then try to convert that to a TimeZone with
+ 	getDefaultSystemTimeZone(String).
+ 	(timezones0): Changed type from Hashtable to HashMap.
+ 	(timezones): Create HashMap, not Hashtable.
+ 	(getDefaultTimeZone): New method, rewritten from CNI version.
+ 	(readTimeZoneFile): New method.
+ 	(readtzFile): Likewise.
+ 	(skipFully): Likewise.
+ 	* java/util/natTimeZone.cc (getSystemTimeZone): Renamed to
+ 	getDefaultTimeZoneId and rewritten.
+ 	(getDefaultTimeZoneId): Rewritten in java.
+ 
+ 2004-08-25  David Daney  <daney@avtrex.com>
+ 
+ 	* Makefile.am (AM_GCJFLAGS):  Add LIBGCJ_JAVAFLAGS.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-23  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* prims.cc (JVMPI_NOTIFY_ALLOC): New macro. Call jvmpi_notify_alloc
+ 	only if jvmpi is enabled.
+ 	(jvmpi_notify_alloc): Don't check if jvmpi is enabled here.
+ 	(_Jv_AllocObjectNoFinalizer): Use JVMPI_NOTIFY_ALLOC.
+ 	(_Jv_AllocString): Likewise.
+ 	(_Jv_AllocPtrFreeObject): Likewise.
+ 
+ 2004-08-23  Hans Boehm  <Hans.Boehm@hp.com>
+ 
+ 	* defineclass.cc: Include <stdio.h>.
+ 	* java/lang/natClassLoader.cc: Include <stdio.h>.
+ 
+ 2004-08-21  Andreas Tobler  <a.tobler@schweiz.ch>
+ 	    Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am (lib_gnu_java_awt_peer_gtk_la_LINK): Added.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Replaced all AC_TRY_COMPILE macros with
+ 	AC_COMPILE_IFELSE macros.
+ 
+ 2004-08-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in: Renamed to configure.ac.
+ 	* configure.ac: New file.
+ 	* configure, Makefile.in, gcj/Makefile.in, include/Makefile.in
+ 	include/config.h.in, testsuite/Makefile.in: Regenerated.
+ 
+ 2004-08-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in: Rewrote some obsolete stuff for autoconf 2.59.
+ 	* aclocal.m4, configure: Regenerated.
+ 
+ 2004-08-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 	    Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in,	Makefile.am: Ported to automake 1.9.
+ 	* Makefile.in, aclocal.m4, configure, gcj/Makefile.in,
+ 	include/Makefile.in, testsuite/Makefile.in, include/config.h.in:
+ 	Regenerated.
+ 
+ 2004-08-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/DatagramSocket.java: Fixed typo.
+ 
+ 2004-08-18  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/17081
+ 	* java/net/URI.java (string): New field. Make all other fields
+ 	transient.
+ 	(readObject): Implemented.
+ 	(writeObject): Implemented.
+ 	(URI): Set 'string'.
+ 
+ 2004-08-18  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/17079
+ 	* java/util/logging/Handler.java (isLoggable): Accept record if its
+ 	log level equals the threshold level. From Robin Green.
+ 
+ 2004-08-18  David Daney  <ddaney@avtrex.com>
+ 
+ 	* java/lang/natPosixProcess.cc (waitForSignal): Use sigsuspend
+ 	instead of sigwait.
+ 
+ 2004-08-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am (AM_CXXFLAGS): Reformatted to make it more ease to read.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR java/8473:
+ 	* testsuite/libjava.jacks/jacks.xfail: Removed passing test.
+ 
+ 2004-08-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am
+ 	(math_c_files): Renamed from c_files.
+ 	(math_c_source_files): Renamed from c_source_files.
+ 	* Makefile.in,
+ 	gcj/Makefile.in,
+ 	include/Makefile.in,
+ 	testsuite/Makefile.in: Regenerated.
+ 
+ 2004-08-16  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* configure.in (AC_CONF_SUBDIRS): Use literal for ltdl directory
+ 	to avoid autoconf warning.
+ 	* configure: Rebuilt.
+ 
+ 2004-08-14  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* java/net/natInetAddressPosix.cc (lookup): Reflect rename of
+ 	localhostAddress to loopbackAddress.
+ 	* java/net/natInetAddressWin32.cc (lookup): Likewise.
+ 
+ 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* configure.in (GCINCS): Don't use "boehm-cflags". Instead, -I
+ 	boehm-gc's include dirs.
+ 	* configure: Rebuilt.
+ 	* include/boehm-gc.h: Include gc_config.h.
+ 
+ 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/net/InetAddress.java (loopbackAddress): Renamed from
+ 	localhostAddress.
+ 	(getByName): Return loopback address for null hostname, without
+ 	security check. Use lookup(), not getAllByName.
+ 	(getAllByName): Return loopback address for null hostname, without
+ 	security check.
+ 	* java/net/natInetAddressPosix.cc (lookup): Don't perform security
+ 	check here.
+ 
+ 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/17020
+ 	Reported by Robin Green.
+ 	* defineclass.cc (handleField): Don't throw exception on unrecognised
+ 	modifier. Add FIXME comments for spec compliance.
+ 	(handleMethod): Likewise.
+ 
+ 2004-08-10  Hans Boehm <Hans.Boehm@hp.com>
+ 
+ 	PR libgcj/16662
+ 	* java/lang/natObject.cc (LOCK_LOG, LOG): Add debug tracing.
+ 	(Almost everywhere): add LOG calls, fix, add comments.
+ 	(_Jv_MonitorEnter): Replace masking of LOCKED bit with assertion.
+ 	Add explicit check for LOCKED bit in slow case (PR 16662).
+ 	(_Jv_MonitorExit): Add casts in debug-only code.
+ 	Always release LOCKED bit before throwing exception.
+ 	(_Jv_ObjectCheckMonitor): Lock may be held if lightweight lock
+ 	isn't.  Handle easy cases without lock acquisition.
+ 	(Object::wait): Use NotifyAll for lock inflation.
+ 
+ 2004-08-12  David Daney  <ddaney@avtrex.com>
+ 
+ 	* testsuite/libjava.lang/Process_1.java: New test.
+ 	* testsuite/libjava.lang/Process_2.java: New test.
+ 	* testsuite/libjava.lang/Process_3.java: New test.
+ 	* testsuite/libjava.lang/Process_4.java: New test.
+ 	* testsuite/libjava.lang/Process_5.java: New test.
+ 	* testsuite/libjava.lang/Process_6.java: New test.
+ 	* testsuite/libjava.lang/Process_1.out: Expected result.
+ 	* testsuite/libjava.lang/Process_2.out: Expected result.
+ 	* testsuite/libjava.lang/Process_3.out: Expected result.
+ 	* testsuite/libjava.lang/Process_4.out: Expected result.
+ 	* testsuite/libjava.lang/Process_5.out: Expected result.
+ 	* testsuite/libjava.lang/Process_6.out: Expected result.
+ 
+ 2004-08-12  David Daney  <ddaney@avtrex.com>
+ 
+ 	PR libgcj/11801
+ 	* java/lang/PosixProcess.java: Rewrote.
+ 	* java/lang/natPosixProcess.cc: Rewrote.
+ 	* java/lang/Runtime.java (execInternal): Declare throws IOException.
+ 	* gcj/javaprims.h (ConcreteProcess$ProcessManager): Declare.
+ 	* posix-threads.cc (block_sigchld) New function.
+ 	(_Jv_ThreadRegister) Use it.
+ 	(_Jv_ThreadStart) Use it.
+ 	* configure.in (PLATFORM_INNER_NAT_HDRS): New AC_SUBST() used in...
+ 	* Makefile.am: ... to specify extra native headers.
+ 	* configure: Regenerated.
+ 	* include/config.h: Regenerated.
+ 	* Makefile.in: Regenerated.
+ 	* gcj/Makefile.in: Regenerated.
+ 	* include/Makefile.in: Regenerated.
+ 	* testsuite/Makefile.in: Regenerated.
+ 
+ 2004-08-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/16867
+ 	* testsuite/libjava.lang/PR16867.java: New test.
+ 
+ 2004-08-09  Per Bothner  <per@bothner.com>
+ 
+ 	* gcj/javaprims.h (_Jv_Utf8Const): Change struct to a class,
+ 	with private fields and access methods.
+ 	(_Jv_NewStringUTF, _Jv_hashUtf8String): New function declarations.
+ 	* gcj/cni.h (_Jv_NewStringUTF): Move to javaprims.h.
+ 	* prims.cc (_Jv_Utf8COnst::init): New method implementation.
+ 	( _Jv_makeUtf8Const): Rewrite using new constructors.
+ 	(hashUtf8String): Rename to +_Jv_hashUtf8String and make non-static.
+ 	* defineclass.cc: Use new _Utf8Const access/convenience methods.
+ 	* jni.cc: Likewise.
+ 	* resolve.cc: Likewise.
+ 	* gcj/field.h: Likewise.
+ 	* include/jvm.h: Likewise.
+ 	* java/lang/Class.h: Likewise.
+ 	* java/lang/natClass.cc: Likwise.
+ 	* java/lang/natClassLoader.cc: Likewise
+ 	* java/lang/reflect/natMethod.cc: Likewise
+ 	* verify.cc: Likewise.
+ 	(_Jv_BytecodeVerifier::make_utf8_const):  Optimize.
+ 	(~_Jv_BytecodeVerifier):  Don't need second _Jv_Free call.
+ 
+ 2004-08-10  Andrew Haley  <aph@redhat.com>
+ 
+ 	* testsuite/libjava.lang/err14.java: New file.
+ 	* testsuite/libjava.lang/err14.out: New file.
+ 
+ 2004-08-05  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* Makefile.am: Fix missing rename from x_nat_headers to
+ 	xlib_nat_headers.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-04  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/security/BasicPermission.java: Don't check wildcards.
+ 
+ 2004-08-04  Thomas Fitzsimmons <fitzsim@redhat.com>
+ 	    Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4: Correctly quote PKG_CHECK_MODULES.
+ 	* configure.in: Replaced all usages of AC_LINK_FILES by
+ 	AC_CONFIG_LINKS.
+ 	* aclocal.m4,
+ 	configure: Regenerated.
+ 
+ 2004-08-04  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 	    Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acconfig.h: Removed.
+ 	* Makefile.am: Rename variables for xlib peer to include xlib and
+ 	gtk_c_headers to gtk_jni_headers.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-08-04  Andrew Haley  <aph@redhat.com>
+ 
+ 	* testsuite/lib/libjava.exp (bytecompile_file): Byte compile with
+ 	debugging.
+ 
+ 2004-08-03  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.in: Eliminate uses of changequote (mostly by quoting []).
+ 	Replace most top level 'dnl' comments with '#' comments, conforming
+ 	to new autoconf style.  Use AS_HELP_STRING throughout; improve a few
+ 	help strings.
+ 	* configure: Rebuilt.
+ 
+ 2004-07-17  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* acinclude.m4: Include no-executables.m4.
+ 	* aclocal.m4: Rebuild.
+ 	* configure.in: Convert to the autoconf 2.59 version of
+ 	of the no-executables hack, and also of the nonstandard CXX
+ 	hack and the multilibbed CC and CXX hack.  Change prerequisite
+ 	to autoconf 2.59.
+ 	* configure: Rebuild with autoconf 2.59.  (Woo-hoo!)
+ 	* Makefile.in, gcj/Makefile.in, include/Makefile.in,
+ 	testsuite/Makefile.in: Regenerate.
+ 
+ 2004-08-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc: Reindented.
+ 
+ 2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/sql/Timestamp.java (valueOf): Synchronize access to dateFormat.
+ 
+ 2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* testsuite/libjava.compile/PR16701.java: New test.
+ 
+ 2004-08-01  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Collection.java, java/util/List.java,
+ 	java/util/Map.java, java/util/Set.java,
+ 	java/util/SortedMap.java, java/util/SortedSet.java:
+ 	Added additional exceptions to documentation.
+ 
+ 2004-08-01  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR libgcj/16814
+ 	* configure.in [host *mingw*] (SYSTEMSPEC): Remove -lwsock32.
+ 	* configure. Regenerate.
+ 	* include/win32.h: Explicitly include winsock2.h
+ 	* win32.cc (_Jv_platform_initialize): Require version 2.2 of
+ 	Winsock api.
+ 
+ 2004-07-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/GZIPInputStream.java
+ 	(GZIPInputStream): Increase buffer size to 4k.
+ 	* java/util/zip/GZIPOutputStream.java
+ 	(GZIPOutputStream): Likewise.
+ 	* java/util/zip/Inflater.java
+ 	(setInput): Merged formating with GNU classpath.
+ 	* java/util/zip/InflaterInputStream.java
+ 	(InflaterInputStream): Increase buffer size to 4k.
+ 	(fill): Throw exception if stream ends early.
+ 	(read): Merged endless-loop with GNU classpath.
+ 	(skip): Increase buffer size to 2k.
+ 
+ 2004-07-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java
+ 	(addNotify): Use AccessController to allow execution of privileged
+ 	code.
+ 
+ 2004-07-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/MainThread.java:
+ 	Explicitely import used classes.
+ 	(args): Make it type String[].
+ 
+ 2004-07-29 Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* gnu/java/awt/ComponentDataBlitOp.java,
+ 	gnu/java/beans/ExplicitBeanInfo.java,
+ 	gnu/java/beans/IntrospectionIncubator.java,
+ 	gnu/java/beans/editors/ColorEditor.java,
+ 	gnu/java/beans/editors/FontEditor.java,
+ 	gnu/java/beans/editors/NativeBooleanEditor.java,
+ 	gnu/java/beans/editors/NativeByteEditor.java,
+ 	gnu/java/beans/editors/NativeDoubleEditor.java,
+ 	gnu/java/beans/editors/NativeFloatEditor.java,
+ 	gnu/java/beans/editors/NativeIntEditor.java,
+ 	gnu/java/beans/editors/NativeLongEditor.java,
+ 	gnu/java/beans/editors/NativeShortEditor.java,
+ 	gnu/java/beans/editors/StringEditor.java,
+ 	gnu/java/io/ClassLoaderObjectInputStream.java,
+ 	gnu/java/io/decode/Decoder.java,
+ 	gnu/java/io/encode/Encoder.java,
+ 	gnu/java/lang/ClassHelper.java,
+ 	gnu/java/locale/Calendar.java,
+ 	gnu/java/locale/Calendar_de.java,
+ 	gnu/java/locale/Calendar_en.java,
+ 	gnu/java/locale/Calendar_nl.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_nl.java:
+ 	Cleaned up imports.
+ 
+ 2004-07-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* README: Remove obsolete info. Update bug URL.
+ 	* THANKS: Updated.
+ 	* NEWS: Updated with news up to GCC 3.4 release.
+ 
+ 2004-07-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/security/action/GetPropertyAction.java (setParameters):
+ 	Renamed from 'setName'. New 2-argument form with default value.
+ 	(run): Pass default 'value' parameter to System.getProperty().
+ 	* gnu/java/security/action/SetAccessibleAction.java: Fix javadoc
+ 	typos.
+ 	* gnu/java/net/protocol/http/Connection.java: Use 'setParameters'
+ 	not 'setName'.
+ 
+ 2004-07-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* configure.in: Check for minimum GTK version 2.4 requirement.
+ 	* configure: Rebuilt.
+ 
+ 2004-07-27  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* testsuite/libjava.lang/TLtest.java: Reduce sleep time.
+ 	* testsuite/libjava.lang/Thread_Alive.java: Remove old email address.
+ 	Reduce sleep time.
+ 	* testsuite/libjava.lang/Thread_HoldsLock.java: Modify to work around
+ 	compiler bug.
+ 	* testsuite/libjava.lang/Thread_Interrupt.java: Remove old email
+ 	address. Reduce sleep times. Synchronize with target threads before
+ 	attempting to interrupt them. Don't try to calibrate yeild count,
+ 	instead, always loop for a fixed time.
+ 	* testsuite/libjava.lang/Thread_Join.java: Remove old email address.
+ 	* testsuite/libjava.lang/Thread_Monitor.java: Likewise.
+ 	* testsuite/libjava.lang/Thread_Wait.java: Likewise.
+ 	* testsuite/libjava.lang/Thread_Wait_2.java: Likewise.
+ 	* testsuite/libjava.lang/Thread_Wait_Interrupt.java: Likewise.
+ 	* testsuite/libjava.lang/pr179.java: Likewise.
+ 	* testsuite/libjava.lang/Thread_Sleep.java: Likewise. Reduce sleep
+ 	time. Remove upper bounds check on sleep time.
+ 
+ 2004-07-27  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* testsuite/libjava.lang/Thread_HoldsLock.java: New test case.
+ 	* testsuite/libjava.lang/Thread_HoldsLock.out: New.
+ 
+ 2004-07-27  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/io/File.java (toURI): Throw RuntimeException, not
+ 	InternalError.
+ 	* java/lang/Runtime.java (exit): Qualify static sleep() call with
+ 	class name, not instance.
+ 
+ 2004-07-24  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* Makefile.am: Add gnu/java/security/action/GetPropertyAction.java
+ 	and gnu/java/security/action/SetAccessibleAction.java.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2004-07-23  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* prims.cc (_Jv_InitPrimClass): Don't create an array class.
+ 	(_Jv_CreateJavaVM): Don't pass array vtable parameter to
+ 	_Jv_InitPrimClass.
+ 	(DECLARE_PRIM_TYPE): Don't declare array vtables.
+ 	* include/jvm.h (struct _Jv_ArrayVTable): Removed.
+ 	* java/lang/Class.h (_Jv_InitPrimClass): Update friend declaration.
+ 
+ 2004-07-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* Makefile.am: Replace jar, rmic and rmiregistry references with
+ 	gjar, grmic and grmiregistry.
+ 	* configure.in: Likewise.
+ 	* Makefile.in: Regenerate.
+ 	* configure: Likewise.
+ 	* gcj/Makefile.in: Likewise.
+ 	* include/Makefile.in: Likewise.
+ 	* testsuite/Makefile.in: Likewise.
+ 
+ 2004-07-23  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java: Use GetPropertyAction
+ 	for privileged getProperty calls.
+ 	* java/io/ObjectOutputStream.java (getField): No longer static. Use
+ 	SetAccessibleAction instead of anonymous class for doPrivileged call.
+ 	(getMethod): Likewise.
+ 	(setAccessible): New field. PrivilegedAction object to use when
+ 	calling setAccessible.
+ 	* java/io/ObjectStreamClass.java (calculateOffsets): Use
+ 	SetAccessibleAction instead of anonymous class for diPrivileged call.
+ 	(setFields): Likewise.
+ 	(getClassUID): Likewise.
+ 	(findMethod): Likewise.
+ 	* gnu/java/security/action/GetPropertyAction.java: New class.
+ 	* gnu/java/security/action/SetAccessibleAction.java: New class.
+ 
+ 2004-07-23  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/io/ObjectStreamField (ObjectStreamField): Don't unset 'toset'
+ 	for final fields.
+ 	* testsuite/libjava.lang/Serialization.java: New test.
+ 	* testsuite/libjava.lang/Serialization.out: New.
+ 
+ 2004-07-23  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/net/DefaultContentHandlerFactory.java: Check in real file
+ 	missed in last commit.
+ 
+ 2004-07-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/System.java (static): Set http.agent system property when
+ 	not yet set.
+ 	* gnu/java/net/protocol/http/Connection.java (static): Get httpAgent
+ 	from system property inside AccessController.doPrivileged() call.
+ 	(proxyPort): Made package private.
+ 	(proxyInUse): Likewise.
+ 	(proxyHost): Likewise.
+ 	(userAgent): Likewise.
+ 
+ 2004-07-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/net/DefaultContentHandlerFactory.java: New dummy
+ 	implementation.
+ 
+ 2004-07-22  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* Makefile.am (ordinary_java_source_files): Add
+ 	DefaultContentHandlerFactory.java.
+ 	* Makefile.in: Rebuilt.
+ 	* java/net/URLConnection.java (defaultFactory): New field.
+ 	(getContent):
+ 	(getContentHandler): Renamed from 'setContentHandler'. Try
+ 	defaultFactory after user-set factory, if any. Search for content
+ 	handler implementations in gnu.java.net.content, not gnu.gcj.content.
+ 	* gnu/java/net/protocol/file/Connection.java (getHeaderField):
+ 	Implemented.
+ 	(getLastModified): Implemented.
+ 	(getPermission): Create file permission here, instead of in
+ 	constructor.
+ 	* gnu/java/net/protocol/gcjlib/Connection.java (getHeaderField):
+ 	Implemented.
+ 	* gnu/java/net/protocol/jar/Connection.java (getHeaderField):
+ 	Implemented.
+ 	(getLastModified): Implemented.
+ 	* gnu/java/awt/ClasspathToolkit.java (createImageProducer): New.
+ 	Default implementation.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createImageProducer): New.
+ 	Implement using GdkPixbufDecoder.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(setLineWrap): Fire property change event after new value is set.
+ 	(setTabSize): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java
+ 	(autoCreateColumnsFromModel): New field.
+ 	(autoResizeMode): Likewise.
+ 	(cellEditor): Likewise.
+ 	(cellSelectionEnabled): Likewise.
+ 	(columnModel): Likewise.
+ 	(dataModel): Likewise.
+ 	(defaultEditorsByColumnClass): Likewise.
+ 	(defaultRenderersByColumnClass): Likewise.
+ 	(editingColumn): Likewise.
+ 	(editingRow): Likewise.
+ 	(gridColor): Likewise.
+ 	(preferredViewportSize): Likewise.
+ 	(rowHeight): Likewise.
+ 	(rowMargin): Likewise.
+ 	(rowSelectionAllowed): Likewise.
+ 	(selectionBackground): Likewise.
+ 	(selectionForeground): Likewise.
+ 	(selectionModel): Likewise.
+ 	(showHorizontalLines): Likewise.
+ 	(showVerticalLines): Likewise.
+ 	(tableHeader): Likewise.
+ 	(JTable): Implemented.
+ 	(getColumnModel): Likewise.
+ 	(getSelectedRow): Likewise.
+ 	(getSelectionModel): Likewise.
+ 	(setModel): Likewise.
+ 	(setSelectionModel): Likewise.
+ 	(createScrollPaneForTable): New method.
+ 	(createDefaultDataModel): Likewise.
+ 	(createDefaultListSelectionModel): Likewise.
+ 	(getModel): Likewise.
+ 	(getTableHeader): Likewise.
+ 	(setTableHeader): Likewise.
+ 	(getColumnSelectionAllowed): Likewise.
+ 	(setColumnSelectionAllowed): Likewise.
+ 	(getRowSelectionAllowed): Likewise.
+ 	(setRowSelectionAllowed): Likewise.
+ 	(getAutoResizeMode): Likewise.
+ 	(setAutoResizeMode): Likewise.
+ 	(getColumnCount): Likewise.
+ 	(getRowCount): Likewise.
+ 	(getCellRenderer): Likewise.
+ 	* javax/swing/JTree.java
+ 	(cellRenderer): New field.
+ 	(editable): Likewise.
+ 	(rootVisible): Likewise.
+ 	(showsRootHandles): Likewise.
+ 	(getModel): New method.
+ 	(setModel): Likewise.
+ 	(isEditable): Likewise.
+ 	(setEditable): Likewise.
+ 	(isRootVisbile): Likewise.
+ 	(setRootVisible): Likewise.
+ 	(getShowsRootHandles): Likewise.
+ 	(setShowRootHandles): Likewise.
+ 	(getCellRenderer): Likewise.
+ 	(setCellRenderer): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(setDocument): Implemented.
+ 	* javax/swing/JRootPane.java:
+ 	Fixed javadocs.
+ 	* javax/swing/JTable.java
+ 	(getDefaultRenderer): New method.
+ 	* javax/swing/JTextField.java
+ 	(setFont): Likewise.
+ 	(getPreferredSize): Likewise.
+ 	* javax/swing/JToggleButton.java
+ 	(getAccessibleContext): Fix javadoc.
+ 	* javax/swing/JTree.java:
+ 	Add some javadocs.
+ 	* javax/swing/JViewport.java:
+ 	Likewise.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java:
+ 	Collect all native method declaration at the top.
+ 	(create): Set the filename filter if necessary.
+ 	(setDirectory): Call nativeSetDirectory().
+ 	(setFilenameFilter): Implement.
+ 	(filenameFilterCallback): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(create): Configure dialog to show hidden files.
+ 	(filenameFilterCallback): New function.
+ 	(nativeSetFilenameFilter): New function.
+ 	(nativeSetDirectory): New function.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	Ran Jalopy.
+ 	(paintTrack): Fill the track before painting
+ 	the borders.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	patch from Roman Kennke <roman@ontographics.com>
+ 	* javax/swing/Spring.java: New file.
+ 	* javax/swing/SpringLayout.java: New file.
+ 	* Makefile.am: Add new files.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java: Minor layout fixes.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Likewise.
+ 	* javax/swing/ScrollPaneLayout.java: Likewise.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/DefaultDesktopManager.java:
+ 	(findMinimum): Removed.
+ 	(resizeFrame): Trust the UI to pass valid
+ 	bounds.
+ 	* javax/swing/JOptionPane.java:
+ 	Implemented showInternalXXXDialog methods.
+ 	(startModal): New method.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	(BorderListener::mouseDragged): Verify that the new
+ 	bounds are valid before passing them to the DesktopManager.
+ 	(preferredLayoutSize): Delegate
+ 	to getSize.
+ 	(minimumLayoutSize): Ditto.
+ 	(getSize): New method.
+ 	(GlassPaneDispatcher): Reimplemented by copying
+ 	a stripped down LightweightDispatcher from Container.
+ 	(getMinimumSize): Call minimumLayoutSize.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	Ran Jalopy.
+ 	(mousePressed): Add ability to properly close
+ 	JInternalFrames.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java:
+ 	(DragWindow): Set owner for DragWindow.
+ 
+ 2004-07-21  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ShortLookupTable.java: New file.
+ 	* java/awt/image/ByteLookupTable.java: New file.
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(create(GtkContainerPeer)): New native method.
+ 	(create()): Call native create(), passing in the parent frame
+ 	as the paramter. Natively set the current file and directory.
+ 	(setFile): Construct an absolute filename before passing it to
+ 	the native peer.
+ 	(nativeGetDirectory): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(window_closed): Removed.
+ 	(ok_clicked): Likewise.
+ 	(cancel_clicked): Likewise.
+ 	(handle_response): New method.
+ 	(create): Use GtkFileChooserDialog.
+ 	(connectSignals): Connect to handle_response.
+ 	(nativeGetDirectory): New method.
+ 	(nativeSetFile): Use GtkFileChooserDialog.
+ 
+ 2004-07-21  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/LookupTable.java: New file.
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/Kernel.java: New file.
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java: Fixed Javadocs.
+ 	* javax/swing/JMenu.java: Likewise.
+ 	* javax/swing/JMenuBar.java: Likewise.
+ 	(MARGIN_CHANGED_PROPERTY): New property.
+ 	(setMargin): Implemented.
+ 	* javax/swing/JMenuItem.java: Fixed javadocs.
+ 	* javax/swing/JPopupMenuUI.java: Fixed javadocs.
+ 	(LABEL_CHANGED_PROPERTY): New property.
+ 	(add): changed to use createActionComponent.
+ 	(createActionComponent): Implemented.
+ 	(setLabel): Fire PropertyChangeEvent if label property
+ 	changes.
+ 	* javax/swing/JRadioButtonMenuItem.java: Fixed javadocs.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
+ 	(ContainerHandler): Repaint if margin property has changed.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(installUI): Call installComponents().
+ 	(uninstallUI): Call uinstallComponents().
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	Fixed javadocs.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	Likewise.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java:
+ 	(DragWindow): Use the right constructor.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JToolBar.java:
+ 	(layoutContainer): Use getComponents.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java:
+ 	(DragWindow): Don't use SwingUtilities'
+ 	getOwnerFrame
+ 	(ToolBarDialog): ditto.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JRootPane.java:
+ 	Ran jalopy.
+ 	(layoutContainer): Set the glasspane's size to
+ 	be the same as the content pane.
+ 	(createGlassPane): Set opaque property to false.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (requestFocus()): Don't handle Panels
+ 	specially.
+ 	(requestFocus(boolean)): Likewise.
+ 	(requestFocusInWindow(boolean)): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
+ 	Set GTK_CAN_FOCUS flag.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerated.
+ 	* gcj/Makefile.in: Regenerated.
+ 	* include/Makefile.in: Regenerated.
+ 	* javax/swing/AbstractButton.java:
+ 	Add rollOverEnabled property.
+ 	(setRolloverEnabled): Use new property.
+ 	(isRolloverEnabled): Use new property.
+ 	* javax/swing/JTabbedPane.java:
+ 	(setComponent): Remove useless JTabbedPane.this.
+ 	* javax/swing/JToolBar.java: Finish implementation.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	(paint): Moved border painting to a border.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Change JToolBar look and feel defaults.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(actionPerformed): Return Integer index instead of name.
+ 	(addButtonComponents): Check to see if component is
+ 	JButton last.
+ 	(createMessageArea): Don't use components that are not
+ 	completed yet.
+ 	(getIconForType): Use temporary icons.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	(mousePressed): Do not return if it's on thumb.
+ 	(paintMinorTickForHorizSlider): Use BLACK to paint ticks.
+ 	(paintMinorTickForVertSlider): ditto.
+ 	(paintMajorTickForHorizSlider): ditto.
+ 	(paintMajorTickForVertSlider): ditto.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
+ 	Add a border around the SplitPaneDivider.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java:
+ 	Remove comments.
+ 	* javax/swing/plaf/basic/BasicToolBarSeparatorUI.java:
+ 	New file. Implemented.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java:
+ 	Implemented.
+ 	* testsuite/Makefile.in: Regenerated.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/Timer.java (run): Queue events each time cycle.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(imageComplete): Call image.imageComplete().
+ 	* java/awt/image/MemoryImageSource.java:
+ 	Reimplement consumers as a Vector instead of a Hashtable.  This is
+ 	because enumeration on a Hashtable is not thread-safe.
+ 	(addConsumer): Adapt to Vector consumers.
+ 	(isConsumer): Adapt to Vector consumers.
+ 	(removeConsumer): Adapt to Vector consumers.
+ 	(startProduction): Adapt to Vector consumers. Call imageComplete()
+ 	with STATICIMAGEDONE flag instead of SINGLEFRAME flag.
+ 	(newPixels): Adapt to Vector consumers.
+ 	(sendPicture): Set the color model of the image consumer.
+ 	(newPixels(IIII)): Adapt to Vector consumers.
+ 	(newPixels(IIIIB)): Adapt to Vector consumers.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (deliverEvent): Implement.
+ 	(postEvent): Implement.
+ 	(handleEvent): Implement.
+ 	(translateEvent): New method.
+ 	(dispatchEventImpl): Document.  Add AWT 1.0 event handling.
+ 	* java/awt/Container.java (deliverEvent): Implement.
+ 	* java/awt/Event.java (paramString): Fix formatting.
+ 	* java/awt/Font.java (toString): Likewise.
+ 	* java/awt/Window.java (postEvent): Implement.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
+ 	Set window's focus owner upon receiving a FOCUS_LOST event.
+ 	* java/awt/Window.java (Window()): Refocus the previously
+ 	focused component within the window when the window regains the
+ 	top-level focus.
+ 	(setFocusOwner): New method.
+ 	* java/awt/Component.java (requestFocus): Add FIXME.
+ 
+ 	* libgcj.pc.in: Remove library flags.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java (handleEvent): Handle
+ 	MOUSE_PRESSED event.
+ 	* java/awt/Component.java (requestFocus()): Handle Panel
+ 	specially.  Post FOCUS_LOST event on opposite component.
+ 	(requestFocus(boolean)): Likewise.
+ 	(requestFocusInWindow(boolean)): Likewise.
+ 	(paramString): Reorder dimension fields.
+ 	* java/awt/Container.java (paramString): Fix string format.
+ 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
+ 	Handle FOCUS_LOST events.  Don't handle Windows specially.  Only
+ 	process key events if the focus owner is non-null.
+ 	(dispatchKeyEvent): Likewise.
+ 	* java/awt/Frame.java (paramString): Fix formatting.
+ 	(generateName): New method.
+ 	(getUniqueLong): Likewise.
+ 	* java/awt/KeyboardFocusManager.java (getFocusOwner): Check if
+ 	the temporary focus owner is null.  If so, return the permanent
+ 	focus owner.
+ 	* java/awt/Panel.java (generateName): New method.
+ 	(getUniqueLong): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Rework
+ 	signal handling to make callbacks more specific.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/Position.java
+ 	(Bias): Implemented.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/LookAndFeel.java
+ 	(provideErrorFeedback): New method.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(tabSize): New field.
+ 	(getTabSize): New method.
+ 	(setTabSize): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ActionMap.java:
+ 	Fixed javadocs all over.
+ 	(serialVersionUID): Made private.
+ 	(parent): Don't explicitely initialize with default value.
+ 	(get): SImplified.
+ 	(keys): Reimplemented.
+ 	(allKeys): Likewise.
+ 	(convertSet): Removed.
+ 	* javax/swing/ComponentInputMap.java:
+ 	Fixed javadocs all over.
+ 	(ComponentInputMap): Implemented.
+ 	(put): Likewise.
+ 	(clear): Likewise.
+ 	(remove): Likewise.
+ 	(SetParent): Likewise.
+ 	(getComponent): Likewise.
+ 	* javax/swing/InputMap.java:
+ 	Fixed javadocs all over.
+ 	(serialVersionUID): Made private.
+ 	(parent): Don't explicitely initialize with default value.
+ 	(get): SImplified.
+ 	(keys): Reimplemented.
+ 	(allKeys): Likewise.
+ 	(convertSet): Removed.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ActionMap.java,
+ 	javax/swing/ComponentInputMap.java,
+ 	javax/swing/InputMap.java,
+ 	javax/swing/table/DefaultTableColumnModel.java,
+ 	javax/swing/table/TableColumn.java,
+ 	javax/swing/table/TableColumnModel.java,
+ 	javax/swing/table/TableModel.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/TextAction.java:
+ 	Reformated.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (bufferedImageOrError):
+ 	Make method non-static.
+ 	* javax/swing/AbstractButton.java:
+ 	Rename fields to match property names where possible.
+ 	(iconTextGap): New property.
+ 	* javax/swing/JCheckBox.java: Match AbstractButton changes.
+ 	(init) New method, call from after various constructors.
+ 	* javax/swing/JComponent.java (revalidate):
+ 	Invalidate before queueing repair.
+ 	* javax/swing/JList.java (getPreferredScrollableViewportSize):
+ 	Reimplement in terms of visibleRowCount property.
+ 	* javax/swing/JMenuButton.java: Match AbstractButton changes.
+ 	* javax/swing/JScrollPane.java (createScrollListener):
+ 	Remove tracing chatter.
+ 	* javax/swing/JToggleButton.java: Match AbstractButton changes.
+ 	* javax/swing/RepaintManager.java (addInvalidComponent):
+ 	Don't invalidate.
+ 	* javax/swing/ScrollPaneLayout.java: Various corrections to layout
+ 	calculations.
+ 	* javax/swing/SwingUtilities.java (layoutCompoundLabel):
+ 	Mimic sun behavior on top left/right positioning.
+ 	* javax/swing/ViewportLayout.java (preferredLayoutSize):
+ 	Remove mistaken use of preferredScrollableViewportSize here.
+ 	(layoutContainer): Use view's preferred size as basis.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java:
+ 	Set, get, and use textIconGap property.
+ 	(paint) Paint text returned from layout (with ellipsis).
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	Remove tracing chatter, correct various minor calculations.
+ 	(getCellBounds): Update layout state before calculating.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java (Button.Margin):
+ 	Use margin default similar to sun's.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java (ArrowIcon):
+ 	(createIncreaseIcon): Center icon, minimize margins.
+ 	(createDecreaseIcon): Likewise.
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java (installDefaults):
+ 	Implement.
+ 	(installUI): Call it.
+ 	(uninstallDefaults): Implement.
+ 	(uninstallUI): Call it.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java (DragWindow):
+ 	Call existing Window constructor.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java (paint):
+ 	Set clip before painting.
+ 
+ 2004-07-21  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenuItem.java:
+ 	(processMouseEvent): Reimplemented to deal with
+ 	mouse drag events.
+ 	(createMenuDragMouseEvent): New private helper method.
+ 	Creates MenuDragMouseEvent.
+ 	* javax/swing/MenuSelectionManager.java
+ 	(componentForPoint): Implemented.
+ 	(isComponentPartOfCurrentMenu): Made public.
+ 	(processMouseEvent): Reimplemented to deal with
+ 	mouse drag events.
+ 	(setSelectedPath): Corrected small mistake that caused
+ 	path to be set incorrectly.
+ 	(getPath): If given component is JMenu then also add this
+ 	menu's popup menu to the selected path.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(getPath): Ditto.
+ 	(getPreferredSize): Call getPreferredMenuItemSize().
+ 	(getPreferredItemSize): Moved code from getPreferredSize to here.
+ 	(installListeners): Install MouseMotionListeners.
+ 	(MouseInputHandler): Pass mouse release event to MenuSelectionManager
+ 	if mouse wasn't released in the bounds of this menu item.
+ 	(MenuDragMouseHandler): Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(installListeners): Install MouseMotionListener and
+ 	MenuDrageMouseListener.
+ 	(MenuDragMouseHandler): Implemented.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	(uninstallListeners): Implemented.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JCheckBox.java: Reformated.
+ 	(JCheckBox): Fixed all constructors.
+ 	(isBorderPaintedFlat): New method.
+ 	(setBorderPaintedFlat): New method.
+ 	* javax/swing/JEditorPane.java
+ 	(createEditorKitForContentType): Made public.
+ 	(scrollToReference): Likewise.
+ 	* javax/swing/JTextArea.java
+ 	(setLineWrap): Fire property change.
+ 	* javax/swing/JToggleButton.java
+ 	(JToggleButton): New constructor.
+ 	(JToggleButton): Simplified.
+ 	* javax/swing/text/AttributeSet.java
+ 	(FontAttribute): Renamed from FontCharacterAttribute.
+ 	* javax/swing/text/JTextComponent.java
+ 	(KeyBinBinding): Added javadoc.
+ 	(JTextComponent): Likewise.
+ 	(getAccessibleContext): Fixed javadoc.
+ 	* javax/swing/text/View.java
+ 	(View): Added javadoc.
+ 	* javax/swing/text/TabableView.java: New file.
+ 	* Makefile.am: Added javax/swing/text/TabableView.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/image/BufferedImage.java (getSource): Remove tracing chatter.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(GtkErrorImage): New helper class.
+ 	(bufferedImageOrError): New helper method.
+ 	(createImage): Use it.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(setCaretPosition): Scroll the text view so the new caret position
+ 	is visible on screen.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(setBounds): Do not validate awtComponent here.
+ 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
+ 	(getPreferredSize): New method.
+ 	* java/awt/ScrollPane.java
+ 	(ScrollPane): Set default size to 100x100.
+ 	(addNotify): If child is not a Panel, wrap it with a new Panel.
+ 	(paramString): Implement.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenu.java:
+ 	(setSelected): Display popup menu only if this menu
+ 	is showing on the screen.
+ 	* javax/swing/JPopupMenu.java:
+ 	(processMouseEvent): Added comment.
+ 	(processKeyEvent): Likewise.
+ 	* javax/swing/MenuSelectionManager.java:
+ 	(clearSelectedPath): Only fireStateChanged() after
+ 	selected path was changed, not before.
+ 	(setSelectedPath): Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Corrected position of menu item's
+ 	icon.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	(installUI): Correct setDefaultLightWeightPopupEnabled call.
+ 	(popupMenuCanceled): Reimplemented.
+ 	(popupMenuWillBecomeVisible): Select first menu item by default
+ 	when displaying free floating popup menus.
+ 	(TopWindowListener): Reimplemented.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Panel.java (dispatchEventImpl): Override to prevent
+ 	Panel from being painted twice when it is first shown.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* java/awt/Window.java: Reverted changes from my
+ 	previous patch for creating window without an owner.
+ 	* javax/swing/SwingUtilities.java:
+ 	(SwingUtilities.OwnerFrame): made static.
+ 	(OwnerFrame.setVisible): New method. Overridden with
+ 	empty implementation.
+ 	(OwnerFrame.isShowing): New method. Ovverridden
+ 	to return always true.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(GtkComponentPeer): Remove temporary try/catch block.
+ 	(setVisible): Call show and hide.
+ 	(show): Make native.
+ 	(hide): Likewise.
+ 	(getArgs): Don't add "visible" argument.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(property_notify_predicate): Return Bool instead of int.
+ 	(find_layout): New function.
+ 	(connectJObject): Call find_layout.
+ 	(connectSignals): Likewise.
+ 	(moveLayout): Likewise.
+ 	(gtkLayoutSetVisible): Likewise.
+ 
+ 2004-07-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/event/InvocationEvent.java (dispatch): Synchronize
+ 	on notifier object before calling notifyAll().
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* java/awt/Window.java: Changed constructors to use new
+ 	method that is described below. Constructors call this
+ 	methods only if newly created window should have an owner.
+ 	(setWindowOwner): New method. Implementation for
+ 	this method is moved from this(owner,configuration).
+ 	* javax/swing/JWindow.java:
+ 	(JWindow): Reimplement to use SwingUtilities.ownerFrame
+ 	instead of owner.
+ 	* javax/swing/SwingUtilities.java:
+ 	(ownerFrame): Change type of this field to OwnerFrame.
+ 	(getOwnerFrame): Changed to return object of type OwnerFrame.
+ 	(SwingUtilities.OwnerFrame): New class. Represents owner
+ 	of a Window that is not provided with one.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	*  javax/swing/AbstractButton.java:
+ 	(configurePropertiesFromAction): Set action command
+ 	to button's text by default if action command is not
+ 	explicitely specified.
+ 	* javax/swing/JMenu.java: Remove unnecessary listener
+ 	and methods relevant to it.
+ 	(setSelected): Reimplemented.
+ 	(menuSelectionChanged): Moved most part of implementation to
+ 	setSelected() and call it instead.
+ 	* javax/swing/JMenuItem.java:
+ 	(init): Comment out statement that sets paint_border to false.
+ 	(configurePropertiesFromAction): Do not set accelerator
+ 	for JMenu.
+ 	(menuSelectionChanged): Change selected index in the selection
+ 	model of menu item's parent.
+ 	* javax/swing/JPopupMenu.java:
+ 	(remove): Set constraints.fill field to GridBagConstraints.BOTH
+ 	instead of GridBagConstraints.HORIZONTAL.
+ 	(insert): Likewise.
+ 	(createActionChangeListener): Implemented.
+ 	(setVisible): Correct location of HeavyWeightMenu and
+ 	don't firePopupMenuCanceled().
+ 	(menuSelectionChanged): Implemented.
+ 	(ActionChangeListener): New Listener. Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	(BasicMenuBarUI.ContainerHandler): Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Uncommented out code that paints
+ 	icon, now that icons are working properly.
+ 	(PropertyChangeListener): Implemented.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	Added javadocs.
+ 	(topWindowListener): New field.
+ 	(Constructor): initialize topWindowListener.
+ 	(BasicPopupMenuUI.TopWindowListener): Implemented.
+ 	(BasicPopupMenuUI.PopupMenuHandler): Implemented.
+ 	(BasicPopupMenuUI.TopWindowListener): New ComponentListener.
+ 	Implemented.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paintFocus): Fixed method signature.
+ 	(paintButtonPressed): Likewise.
+ 	(paintButtonNormal): Likewise.
+ 	(paintText): New method.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(paint): Re-indented.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installUI): Set parent textComponent to opaque.
+ 	* javax/swing/text/DefaultHighlighter.java
+ 	(checkPositions): New helper method.
+ 	(addHighlight): Throws BadLocationException, check positions.
+ 	(changeHighlight): Likewise.
+ 	* javax/swing/text/EditorKit.java
+ 	(EditorKit): Implements Serializable.
+ 	* javax/swing/text/JTextComponent.java
+ 	(getUI): Added javadoc.
+ 	(setUI): Likewise.
+ 	(upadteUI): Added javadoc, don't revalidate and repaint.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(ArrangeGrid): Use PREFERREDSIZE instead of MINSIZE.
+ 	* javax/swing/AbstractButton.java
+ 	(setText): Reindent.
+ 	* javax/swing/RepaintManager.java
+ 	(addInvalidComponent): Find the first ancestor that isValidateRoot().
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(value): New field.
+ 	(JFormattedTextField): Implemented.
+ 	(getValue): Likewise.
+ 	(setValue): Likewise.
+ 	* javax/swing/LookAndFeel.java
+ 	(getSupportsWindowDecorations): New method.
+ 	* javax/swing/UIDefaults.java:
+ 	Use java.beans.PropertyChangeSupport instead of doing all ourself.
+ 	(addPropertyChangeListener): Made public.
+ 	(addResourceBundle): Likewise.
+ 	(removeResourceBundle): Likewise.
+ 	(setDefaultLocale): Likewise.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java
+ 	(BasicRootPaneUI): Implements PropertyChangeListener.
+ 	(propertyChange): New method.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(BasicHighlighter): New inner class.
+ 	(createHighlighter): New method.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(DragWindow): Extends java.awt.Window.
+ 	* javax/swing/text/JTextComponent.java
+ 	(getDocument): Removed debug output.
+ 	* javax/swing/plaf/basic/BasicTextFieldUI.java,
+ 	javax/swing/text/DefaultHighlighter.java,
+ 	javax/swing/text/FieldView.java,
+ 	javax/swing/text/PlainView.java: New files.
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(createDefaultEditorKit): Use javax.swing.text.DefaultEditorKit.
+ 	(createEditorKitForContentType): Likewise.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(serialVersionUID): Added constant field.
+ 	(EndOfLineStringPropery): Fixed typo.
+ 	(DefaultEditorKit): New constructor.
+ 	* javax/swing/text/Segment.java:
+ 	Import java.text.CharacterIterator.
+ 	* javax/swing/text/CharacterIterator.java,
+ 	javax/swing/text/PlainEditorKit.java: Removed.
+ 	* Makefile.am: Removed javax/swing/text/CharacterIterator.java and
+ 	javax/swing/text/PlainEditorKit.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JButton.java,
+ 	javax/swing/text/DefaultEditorKit.java,
+ 	javax/swing/text/EditorKit.java,
+ 	javax/swing/text/Segment.java,
+ 	javax/swing/text/StyledEditorKit.java:
+ 	Reformatted.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ImageIcon.java
+ 	(file): Removed.
+ 	(description): Renamed from descr.
+ 	(ImageIcon): Added missing constructors.
+ 	(setParent): Removed.
+ 	(setImageObserver): New method.
+ 	(getImageObserver): New method.
+ 	(paintIcon): Handle observer = null.
+ 	* javax/swing/JButton.java
+ 	(removeNotify): Fixed javadoc.
+ 	(updateUI): Simplified.
+ 	* javax/swing/JRootPane.java
+ 	(serialVersionUID): New constant field.
+ 	* javax/swing/UIManager.java:
+ 	Fixed javadocs all over.
+ 	(setLookAndFeel): Throws UnsupportedLookAndFeelException.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(createPosition): Throws BadLocationException.
+ 	(getText): Likewise.
+ 	(remove): Likewise.
+ 	* javax/swing/text/ComponentView.java
+ 	(modelToView): Likewise.
+ 	* javax/swing/text/DefaultEditorKit.java:
+ 	Made all public methods public.
+ 	(read): Throws BadLocationException and IOException.
+ 	(write): Likewise.
+ 	* javax/swing/text/EditorKit.java:
+ 	Made all public methods public.
+ 	(serialVersionUID): New constant field.
+ 	(clone): New method.
+ 	(read): Throws BadLocationException and IOException.
+ 	(write): Likewise.
+ 	* javax/swing/text/Segment.java
+ 	(array): Made public.
+ 	(count): Likewise.
+ 	(offset): Likewise.
+ 	(Segment): New constructors.
+ 	(clone): Reimplemented.
+ 	* javax/swing/text/StyledEditorKit.java
+ 	(serialVersionUID): New constant field.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/image/BufferedImage.java
+ 	(getSource): Implement.
+ 	* javax/swing/ImageIcon.java
+ 	(ImageIcon): Implement ctor.
+ 	* javax/swing/ScrollPaneLayout.java
+ 	(preferredLayoutSize): Be more careful about nulls.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AttributeSet.java
+ 	(CharacterAttribute): New interface
+ 	(ColorAttribute): Likewise.
+ 	(FontCharacterAttribute): Likewise.
+ 	(ParagraphAttribute): Likewise.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(moveCaret): New method.
+ 	(positionCaret): Likewise.
+ 	(repaint): Made protected.
+ 	* javax/swing/text/JTextComponent.java
+ 	(KeyBinding): Made it static.
+ 	* javax/swing/text/View.java
+ 	(getContainer): Honor parent == null.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	Reformatted.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java:
+ 	Import javax.swing.UIManager explicitely.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(ScrollingButton): Made it static.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/UIDefaults.java
+ 	(ActiveValue): Made public.
+ 	(LazyValue): Likewise.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView): Reintroduced.
+ 	(view): Removed.
+ 	(rootView): New field.
+ 	(installUI): Create document if needed, initialize rootView.
+ 	(uninstallUI): Hanle rootView.
+ 	(paint): Likewise.
+ 	(getRootView): Likewise.
+ 	(setView): Likewise.
+ 	* javax/swing/text/DefaultCaret.java:
+ 	Renamed all "evt" variables to "event".
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* libgcj.spec.in: Add -l-java-util-logging.
+ 
+ 2004-07-21  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(init_dpi_conversion_factor): Check for int_dpi < 0 in case
+ 	gtk-xft-dpi can no calculate the right value.
+ 	(dpi_changed_cb): Mark *pspec as unsused.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(move): Delegate to setBounds().
+ 	(resize): Likewise.
+ 	(reshape): Fix so it repaints parent and self only when necessary.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(GtkComponentPeer): Revert previous patch from 2004-06-22.
+ 	(setVisible): Likewise.
+ 	(show): Likewise.
+ 	(hide): Likewise.
+ 	(getArgs): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(property_notify_predicate): Likewise.
+ 	(find_layout): Likewise.
+ 	(connectJObject): Likewise.
+ 	(connectSignals): Likewise.
+ 	(moveLayout): Likewise.
+ 	(gtkLayoutSetVisible): Likewise.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* Makefile.am
+ 	(jv_convert_LDADD):
+ 	(gij_LDADD):
+ 	(rmic_LDADD):
+ 	(rmiregistry_LDADD): Add lib-java-util-logging.la
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(replace): Dont use protected method of java.util.Vector directly.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installUI): Call specialized install methods.
+ 	(installDefaults): New method.
+ 	(installListeners): Likewise.
+ 	(installKeyboardActions): Likewise.
+ 	(uninstallUI): Likewise.
+ 	(uninstallDefaults): New method.
+ 	(uninstallListeners): Likewise.
+ 	(uninstallKeyboardActions): Likewise.
+ 	(getPropertyPrefix): New abstract method.
+ 	(paint): Made final, just call paintSafely().
+ 	(paintSavely): New method.
+ 	(paintBackground): Likewise.
+ 	(getVisibleEditorRect): Likewise.
+ 	* javax/swing/text/LayeredHighlighter.java,
+ 	javax/swing/text/TabExpander.java: New files.
+ 	* Makefile.am: Added javax/swing/text/LayeredHighlighter.java
+ 	and javax/swing/text/TabExpander.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(BasicTextUI): Made abstract.
+ 	(BasicCaret): New inner class.
+ 	(view): Don't explicitely initialize with "null".
+ 	(textComponent): New field.
+ 	(textColor): Removed.
+ 	(disabledTextColor): Removed.
+ 	(normalBackgroundColor): Removed.
+ 	(RootView): Removed commented out inner class.
+ 	(createUI): Removed.
+ 	(createCaret): New method.
+ 	(getComponent): Likewise.
+ 	(installUI): Initialize textComponent only.
+ 	(getPreferredSize): Use installed JTextComponent.
+ 	(setView): New method.
+ 	(create): Likewise.
+ 	* javax/swing/text/JTextComponent.java
+ 	(highlighter): New field.
+ 	(caretColor): Likewise.
+ 	(disabledTextColor): Likewise.
+ 	(seletedTextColor): Likewise.
+ 	(selectionColor): Likewise.
+ 	(setUI): New method.
+ 	(getCaretColor): Likewise.
+ 	(setCaretColor): Likewise.
+ 	(getDisabledColor): Likewise.
+ 	(setDisabledColor): Likewise.
+ 	(getSelectedTextColor): Likewise.
+ 	(setSelectedTextColor): Likewise.
+ 	(getSelectionColor): Likewise.
+ 	(setSelectionColor): Likewise.
+ 	(getHighlighter): Likewise.
+ 	(setHighlighter): Likewise.
+ 	(replaceSelection): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(BasicScrollPaneUI): Implements ScrollPaneConstants.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(BasicToolBarUI): Implements SwingConstants.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JPopupMenu.java: Removed CVS tags.
+ 	* javax/swing/UIDefaults.java: Reformatted.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java:
+ 	Explicitely import used classes.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(GtkComponentPeer): Remove temporary try/catch block.
+ 	(setVisible): Call show and hide.
+ 	(show): Make native.
+ 	(hide): Likewise.
+ 	(getArgs): Don't add "visible" argument.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(property_notify_predicate): Return Bool instead of int.
+ 	(find_layout): New function.
+ 	(connectJObject): Call find_layout.
+ 	(connectSignals): Likewise.
+ 	(moveLayout): Likewise.
+ 	(gtkLayoutSetVisible): Likewise.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	(setDisplayedMnemonicIndex): Check if button
+ 	text is not null before checking its length.
+ 	* javax/swing/JMenuItem.java:
+ 	(processMouseEvent): Disarm menu item if mouse has
+ 	exited it.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(MouseInputHandler.mouseEntered): Do not raise
+ 	popup menu if this menu is already selected.
+ 	(MouseInputHandler.mousePressed): Do not fire
+ 	MenuEvents.
+ 	(MenuHandler): Implemented.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java: Added Javadoc.
+ 	(getSelectedObjects): Implemented.
+ 	* javax/swing/JRadioButtonMenuItem.java: Added Javadoc.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java:
+ 	Added javadoc for few methods.
+ 	(processMouseEvent): Made public.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
+ 	(processMouseEvent): Likewise.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	(init): Set display mnemonic index to -1.
+ 	(setMnemonic(char)): Use setMnemonic(int).
+ 	(setMnemonic(int)): Set display mnemonic index.
+ 	(getDisplayedMnemonicIndex): Change method signature
+ 	by removing 'index' parameter.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Added default for Menu.selectionBackground.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Change background color of the selected
+ 	menu item.
+ 	(paintText): Paint differently when menu item is disabled.
+ 	Also paint mnemonic if it appears in the menu item's label.
+ 	(paintAccelerator): Paint accelerator differently
+ 	if menu item is disabled.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(installDefaults): Install defaults for
+ 	selectionForeground and selectionBackground.
+ 	(uninstallDefaults): Uninstall defauls for
+ 	selectionForeground and selectionBackground.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(BranchElement): Implemented.
+ 	(LeafElement): Implemented.
+ 	* javax/swing/text/DefaultCaret.java:
+ 	Import used classes.
+ 	(serialVersionUID): New constant.
+ 	* javax/swing/text/JTextComponent.java
+ 	(AccessibleJTextComponent): Removed dead declaration.
+ 	(caretPos): Removed.
+ 	(setCaret): New method.
+ 	* javax/swing/text/PlainDocument.java
+ 	(rootElement): New field.
+ 	(PlainDocument): Initialize rootElement.
+ 	(createDefaultRoot): New method.
+ 	(getDefaultRootElement): Implemented.
+ 	* javax/swing/text/View.java: Reformatted.
+ 	* javax/swing/text/ViewFactory.java
+ 	(create): Added javadoc.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ToolTipManager.java: Reformatted.
+ 
+ 2004-07-21  Rodimina Olga  <rodimina@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(changeEvent): New field.
+ 	(fireItemStateChanged): Change source of the event
+ 	to 'this' before firing it to button listeners.
+ 	(fireActionPerformed): Likewise.
+ 	(fireStateChanged): Likewise.
+ 	(createActionListener): Do not set source
+ 	of the event to AbstractButton.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	(ContainerHandler.componentAdded): Removed
+ 	print out statement.
+ 	(ContainerHandler.componentRemoved): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/Highlighter.java: New file.
+ 	* Makefile.am: Added javax/swing/text/Highlighter.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(stillInsideTimerAction): Fixed constructor arguments.
+ 	(outsideTimerAction): Likewise.
+ 	(insideTimerAction): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JButton.java: Reformatted.
+ 	* javax/swing/JFormattedTextField.java
+ 	(getUIClassID): Implemented.
+ 	* javax/swing/JRootPane.java
+ 	(serialVersionUID): New constant.
+ 	* javax/swing/JTextField.java
+ 	(align): New field.
+ 	(JTextField): Simplified.
+ 	(getUIClassID): New method.
+ 	(getActionListeners): Added @since tag.
+ 	(setColumns): Invalidate layout and repaint.
+ 	(getHorizontalAlignment): New method.
+ 	(setHorizontalAlignment): New method.
+ 	(selectAll): Removed.
+ 	* javax/swing/SwingUtilities.java
+ 	(getAncestorOfClass): Removed redundant @see tag.
+ 	(isLeftMouseButton): Fixed implementation.
+ 	(isMiddleMouseButton): Likewise.
+ 	(isRightMouseButton): Likewise.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(AttributeContext.addAttribute): New method.
+ 	(AttributeContext.addAttributes): New method.
+ 	(AttributeContext.getEmptySet): New method.
+ 	(AttributeContext.reclaim): New method.
+ 	(AttributeContext.removeAttribute): New method.
+ 	(AttributeContext.removeAttributes): New method.
+ 	* javax/swing/text/Document.java
+ 	(createPosition): Throws BadLocationException.
+ 	(getText): Likewise.
+ 	(remove): Likewise.
+ 	* javax/swing/text/JTextComponent.java
+ 	(getText): Return null if no document is set. Catch
+ 	BadLocationException.
+ 	(getUI): Return ui.
+ 	(updateUI): Simplified.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JButton.java
+ 	(removeNotify): Fixed javadoc.
+ 	(updateUI): Simplified.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/image/ImageDecoder.java
+ 	(startProduction): Only add consumer if it's not added yet.
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+ 	(GdkPixbufDecoder): Don't call initState() here.
+ 	(produce): Call initState() here, to ensure area_prepared and
+ 	area_updated signals are properly connected.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java
+ 	(setColorModel): Use equals() to compare ColorModel objects.
+ 	(setPixels): Likewise.
+ 	* java/awt/image/ColorModel.java
+ 	(equals): Fix typo. Use Arrays.equals() to compare int arrays.
+ 	* java/awt/image/RGBImageFilter.java
+ 	(setColorModel): Set consumer's color model.
+ 	(setPixels): Use equals() to compare ColorModel objects.
+ 
+ 2004-07-21  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/net/URLConnection.java (position): New field.
+ 	(dateFormat1, dateFormat2, dateFormat3): Removed.
+ 	(dateFormats): New field.
+ 	(getHeaderFieldDate): Use new dateFormats array. Re-use parsePosition
+ 	each time instead of re-allocating.
+ 	(initializeDateFormats): Initialize 'dateFormats'.
+ 
+ 2004-07-20  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/16591
+ 	* prims.cc (_Jv_RunMain): Don't call _Jv_SetArgs if DISABLE_MAIN_ARGS
+ 	is defined.
+ 
+ 2004-07-20  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/net/Socket.java (getImpl): Now private. Remove comment.
+ 
+ 2004-07-20  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/io/BufferedWriter.java (BufferedWriter): Use existing lock
+ 	of chained Writer when calling super-constructor.
+ 	* java/io/FilterWriter.java (FilterWriter): Likewise.
+ 	* java/io/PrintWriter.java (PrintWriter): Likewise.
+ 
+ 2004-07-19  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* prims.cc (process_gcj_properties): Don't increment i within LHS
+ 	of assignment.
+ 
+ 2004-07-19  Per Bothner  <per@bothner.com>
+ 
+ 	Print -verbose:message on "loading", not initialization.
+ 	* java/lang/Class.h (JV_STATE_LOADED, JV_STATE_COMPILED):  Swap order.
+ 	* defineclass.cc (_Jv_ClassReader::parse):  Print message if
+ 	gcj::verbose_class_flag.
+ 	* java/lang/natClass.cc (initializeClass):  Don't print message here.
+ 	* java/lang/natClassLoader.cc (_Jv_WaitForState):  If state was
+ 	_JV_STATE_COMPILED, set to JV_STATE_LOADED and may print message.
+ 	(_Jv_PrepareCompiledClass):  Likewise.
+ 
+ 2004-07-18  Matthias Klose  <doko@debian.org>
+ 
+ 	* configure.in: Substitute target_noncanonical.
+ 	* configure: Regenerate
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/String.java: Fixed javadocs all over.
+ 
+ 2004-07-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (truncate): Only truncate
+ 	when size is smaller.
+ 	* java/io/RandomAccessFile.java (setLength): Use truncate for
+ 	shrinking the file and seek plus write for expanding the file.
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/channels/natFileChannelPosix.cc
+ 	(implTruncate): Always save current position. Only reposition file
+ 	pointer to where we started if not beyond new lenght. Reposition file
+ 	pointer to file length if it points beyond the end of file.
+ 
+ 2004-07-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/Box.java: Put FIXME comment above class declaration.
+ 	* javax/swing/JButton.java: Remove illegal L&F HTML from comments.
+ 	* javax/swing/JCheckBox.java: Likewise.
+ 	* javax/swing/JDialog.java: Likewise.
+ 	* javax/swing/JRadioButton.java: Likewise.
+ 	* javax/swing/JToggleButton.java: Likewise.
+ 	* javax/swing/UIManager.java: Likewise.
+ 	* javax/swing/border/TitledBorder.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
+ 	* javax/swing/text/JTextComponent.java: Likewise.
+ 
+ 2004-07-17  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/DatagramPacket.java (setAddress): Removed check for
+ 	null address.
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(getLocalAddress): Check if socket is bound or not.
+ 	* java/net/Socket.java
+ 	(getLocalAddrss): Check if socket is bound or not.
+ 	(getPort): Return -1 when not connected. Dont check getImpl() for
+ 	null.
+ 	(setReuseAddress): Check if socket is closed.
+ 	(isConnected): Check if getImpl() returns null.
+ 
+ 2004-07-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/event/InvocationEvent.java (dispatch): Synchronize
+ 	on notifier object before calling notifyAll().
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java
+ 	(finalize): Added javadoc.
+ 
+ 2004-07-17  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(text_decomposition): Changed type to RuleBasedCollator.CollationElement[]
+ 	(setText): Use ArrayList instead of Vector.
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteOrder.java
+ 	(static): Removed. Not needed.
+ 	Thanks to Patrick Reali for noticing.
+ 	* java/nio/charset/CharsetDecoder.java
+ 	(decode): Fix for classpath bug #9177: Reset state before flipping.
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Security.java: Fixed javadocs all over.
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java
+ 	(static): Removed.
+ 	(addNotify): Set peer via reflection.
+ 	(setWindowPeer): Removed.
+ 	* gnu/java/awt/natEmbeddedWindow.cc: Removed.
+ 	* Makefile.am (nat_source_files):
+ 	Removed gnu/java/awt/natEmbeddedWindow.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-17  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* configure.in(ZIP, GCJH): Remove white space around '=' in variable
+ 	assignment.
+ 	* configure: Regenerated.
+ 
+ 2004-07-16  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.in: Use build_noncanonical rather than build_alias.
+ 	* configure: Rebuild.
+ 
+ 	* configure.in: Eliminate CANADIAN and NULL_TARGET variables
+ 	by logic refactoring.  Move default definition of NATIVE closer
+ 	to first alternate definition.
+ 	* configure: Regenerate.
+ 
+ 	* Makefile.am: Set ZIP and GCJH directly using autoconf.
+ 	* Makefile.in, include/Makefile.in, testsuite/Makefile.in,
+ 	gcj/Makefile.in: Regenerate.
+ 	* configure.in: Set ZIP and GCJH.  Remove redundant condition
+ 	in AM_CONDITIONAL(NATIVE,...)
+ 	* configure: Regenerate.
+ 
+ 2004-07-15  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.in: Use target_noncanonical rather than
+ 	target_alias for forward-compatibility with autoconf 2.59.
+ 	* configure: Regenerate.
+ 	* Makefile.am, gcj/Makefile.am, include/Makefile.am,
+ 	testsuite/Makefile.am: Substitute target_noncanonical.
+ 	* Makefile.in, gcj/Makefile.in, include/Makefile.in,
+ 	testsuite/Makefile.in: Regenerate.
+ 
+ 	* configure.in: Move as much as possible below AC_CANONICAL_SYSTEM.
+ 	Introduce _GCC_TOPLEV_NONCANONICAL_TARGET.
+ 	* acinclude.m4: Include acx.m4.
+ 	* aclocal.m4: Regenerate.
+ 	* configure: Regenerate.
+ 
+ 2004-07-15  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/16574
+ 	* java/sql/Timestamp.java (dateFormat): Renamed from sdf.
+ 	(decimalFormat): New static variable.
+ 	(sbuf): Likewise.
+ 	(getTime): New. Override Date.getTime().
+ 	(toString): Synchronize. Use decimalFormat to format nanos value
+ 	correctly. Truncate extra zeros.
+ 	(before): Compare getNanos() only if getTime() is equal.
+ 	(after): Likewise.
+ 
+ 2004-07-14  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* acinclude.m4: "Inline" LIBGCJ_CONFIGURE macro into...
+ 	* configure.in: ...here.
+ 	* aclocal.m4: Regenerate.
+ 	* configure: Regenerate.
+ 
+ 	* aclocal.m4: Rebuilt with aclocal gcj-1.4.
+ 	* configure: Rebuilt with autoconf 2.13.
+ 	* Makefile.in, gcj/Makefile.in, include/Makefile.in,
+ 	testsuite/Makefile.in: Rebuilt with automake gcj-1.4.
+ 
+ 2004-07-14  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/16204
+ 	* Makefile.am (AM_CXXFLAGS): Add -D_FILE_OFFSET_BITS=64 to enable
+ 	large file support.
+ 	* Makefile.in: Rebuilt.
+ 	* testsuite/libjava.lang/LargeFile.java: New test case.
+ 	* testsuite/libjava.lang/LargeFile.out: New file.
+ 
+ 2004-07-14  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/beans/EventHandler.java: Remove debugging statements.
+ 
+ 2004-07-14  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/beans/EventHandler.java: New file.
+ 	* Makefile.am (awt_java_source_files): Add EventHandler.java.
+ 	* Makefile.in, gcj/Makefile.in, include/Makefile.in,
+ 	testsuite/Makefile.in: Regenerate.
+ 
+ 2004-07-14  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* testsuite/libjava.jacks/jacks.exp (gcj_jacks_write): Add deprecation
+ 	flag to the gcj_setup.
+ 	(gcj_jacks_run): Check tclsh version and launch jacks directly with
+ 	the tclsh.
+ 	* testsuite/libjava.jacks/jacks.xfail: Update fails to reflect the
+ 	deprecation flag change. 58 XFAILS removed.
+ 
+ 2004-07-14  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* configure.host (DIVIDESPEC) [s390*-*-*]: Set to
+ 	-fno-use-divide-subroutine.
+ 	* include/s390-signal.h: Include <ucontext.h> and <limits.h>.
+ 	(HANDLE_FPE): Define.
+ 	(SIGNAL_HANDLER): Change third argument to ucontext_t *.
+ 	(struct old_s390_kernel_sigaction): Likewise for k_sa_handler.
+ 	(HANDLE_DIVIDE_OVERFLOW): Define.
+ 
+ 2004-07-14  Michael Koch  <konqueror@gmx.de>
+ 	    Matthias Klose  <doko@debian.org>
+ 
+ 	* java/awt/im/InputContext.java: Initialize in, line.
+ 
+ 2004-07-13  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* interpret.cc (run): Correctly access libffi return values of
+ 	integral smaller-than-int type; these are implicitly promoted.
+ 
+ 2004-07-13  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/7587
+ 	* interpret.cc (compile_mutex): New.
+ 	(_Jv_InitInterpreter): New. Initialize compile_mutex.
+ 	(run): Lock compile_mutex before calling compile() if compilation is
+ 	required.
+ 	* prims.cc (_Jv_CreateJavaVM): Call _Jv_InitInterpreter().
+ 	* include/java-interp.h (_Jv_InitInterpreter): Declare.
+ 
+ 2004-07-12  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/15713
+ 	* include/jvm.h (_Jv_value): New union type.
+ 	* gcj/field.h (_Jv_Field): Add new _addr union field variants
+ 	* interperet.cc (run): Use _Jv_value union type and *_addr _Jv_Field
+ 	union members.
+ 
+ 2004-07-12  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/awt/xlib/XCanvasPeer.java (createImage): Implement.
+ 	* gnu/awt/xlib/XOffScreenImage.java
+ 	  (XOffScreenImage): Add ImageConsumer interface. Add ColorModel
+ 	  constructor argument. Add constructor using ImageProducer.
+ 	  (getSource): Implement.
+ 	  (imageComplete): New method.
+ 	  (setColorModel): New method.
+ 	  (setDimensions): New method.
+ 	  (setHints): New method.
+ 	  (setPixels): New method.
+ 	  (setProperties): New method.
+ 	* gnu/gcj/xlib/GC.java (drawPoint): New native method.
+ 	* gnu/gcj/xlib/natGC.cc (drawPoint): New native method.
+ 
+ 2004-07-11  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/16478
+ 	* prims.cc (_Jv_CreateJavaVM): Fix comment.
+ 	* gnu/gcj/runtime/FinalizerThread.java (init): New. Native.
+ 	(finalizerReady): Now native.
+ 	(run): Likewise.
+ 	(runFinalizers): Removed.
+ 	* gnu/gcj/runtime/natFinalizerThread.cc (run): Implement here. Use
+ 	a primitive lock, and don't hold it while running the finalizers.
+ 	(runFinalizers): Implement. Don't aquire any Java lock.
+ 	(finalizerReady): Use lock primitives to signal finalizer thread.
+ 
+ 2004-07-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Roman Kennke <roman@ontographics.com> (bug #9331)
+ 	* java/net/URLStreamHandler.java (parseURL): When url file part
+ 	doesn't contain a '/' just ignore context.
+ 
+ 2004-07-11  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* include/s390-signal.c (SIGNAL_HANDLER): Use SIGINFO-style prototype.
+ 	(struct old_s390_kernel_sigaction): Likewise for k_sa_handler.
+ 	(MAKE_THROW_FRAME): Do not modify PSW address.
+ 	(INIT_SEGV): Install SIGINFO-style signal handler.
+ 	(INIT_FPE): Likewise.
+ 
+ 2004-07-10  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* testsuite/libjava.jacks/jacks.xfail: Updates to reflect current
+ 	status. 21 xfail's removed, 1 added.
+ 
+ 2004-07-10  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gcj/javaprims.h: Regenerate CNI namespace definitions.
+ 
+ 2004-07-10  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/text/MessageFormat.java
+ 	(formatInternal): Append "{n}" if argument n is unavailable.
+ 	(format(Object, StringBuffer, FieldPosition)): This
+ 	should be equivalent to format(Object[],
+ 	StringBuffer, FieldPosition).
+ 
+ 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java.util.Calendar.java (cache): New private static field. Cached
+ 	mappings of locales->calendar classes.
+ 	(ctorArgTypes): New private static field. Singleton argument for
+ 	calendar class constructor lookup.
+ 	(getInstance): Cache Locale->Calendar class mappings using HashMap.
+ 	Optimize by bypassing reflection instantiation for the
+ 	GregorianCalendar case.
+ 
+ 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Calendar.java: Use getSystemClassLoader as argument for
+ 	ResourceBundle.getBundle() calls.
+ 	* java/util/GregorianCalendar.java: Likewise.
+ 	* java/util/Currency.java: Likewise.
+ 	* java/text/BreakIterator.java: Likewise.
+ 	* java/text/Collator.java: Likewise.
+ 	* java/text/DateFormat.java: Likewise.
+ 	* java/text/DateFormatSymbols.java: Likewise.
+ 	* java/text/DecimalFormatSymbols.java: Likewise.
+ 	* java/text/NumberFormat.java: Likewise.
+ 	* java/awt/Window.java: Likewise.
+ 
+ 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (bundleCache): Renamed from
+ 	resourceBundleCache. Update comments.
+ 	(getObject): Don't catch MissingResourceException.
+ 	(getBundle(String)): Remove 'final'. Use system classloader if
+ 	getCallingClassLoader returned null.
+ 	(getBundle(String, Locale)): Likewise.
+ 	(BundleKey): New private class. HashMap key for bundle cache lookup.
+ 	(lookupKey): New. Singleton instance of BundleKey.
+ 	(nullEntry): New. Cache entry to represent failed lookups.
+ 	(getBundle(String, Locale, ClassLoader)): Re-written to use new
+ 	caching strategy, no-allocation lookup, and new tryBundle methods.
+ 	(tryBundle(String, ClassLoader)): New. Load a locale-qualified bundle
+ 	name using given classloader.
+ 	(tryBundle(String, Locale, ClassLoader, boolean): New. Qualify
+ 	baseName for given Locale and attempt to load bundle.
+ 
+ 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuUI.java (mousePressed): Remove
+ 	illegal protected method calls.
+ 
+ 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	Fix or remove some bogus test cases.
+ 	* testsuite/libjava.compile/pr10459_2.java: Removed.
+ 	* testsuite/libjava.compile/pr10459.java: Test using its own method,
+ 	not Object.clone().
+ 	* testsuite/libjava.compile/inner_data.java: Test against its own
+ 	protected field.
+ 
+ 2004-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/unicode-muncher.pl: Updated to version 2.1
+ 	from GNU classpath. Added some clarifications on where to find the
+ 	needed files from www.unicode.org.
+ 	* gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html,
+ 	gnu/gcj/convert/UnicodeData-3.0.0.txt:
+ 	Removed, these can directly be downloaded from www.unicode.org if
+ 	needed.
+ 	* gnu/java/lang/CharData.java: Regenerated.
+ 	* include/java-chartables.h: Regenerated.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Removed gnu/java/lang/CharData.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AccessControlContext.java,
+ 	java/security/SecureClassLoader.java:
+ 	Fixed javadocs.
+ 
+ 2004-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java (readFields): Use long datatype
+ 	when shifting byte values more then 24 bits left.
+ 
+ 2004-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/DeflaterOutputStream.java,
+ 	java/util/zip/GZIPInputStream.java,
+ 	java/util/zip/GZIPOutputStream.java,
+ 	java/util/zip/InflaterInputStream.java:
+ 	Reformatted. Added javadocs. Reordered all stuff.
+ 	Renamed variables to be more clear.
+ 
+ 2004-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/IIOException.java,
+ 	javax/imageio/event/IIOReadProgressListener.java,
+ 	javax/imageio/event/IIOReadUpdateListener.java,
+ 	javax/imageio/event/IIOReadWarningListener.java,
+ 	javax/imageio/event/IIOWriteProgressListener.java,
+ 	javax/imageio/event/IIOWriteWarningListener.java:
+ 	New files.
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-09  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/RuleBasedCollator.java
+ 	(mergeRules): Use ArrayList instead of Vector.
+ 	(subParseString): likewise.
+ 	(parseString): likewise.
+ 	(buildCollationVector): likewise.
+ 	(getCollationKey): likewise.
+ 
+ 2004-07-09  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/text/DateFormat.java (parse):
+ 	Improved javadoc. Improved exception message.
+ 
+ 2004-07-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/SelectorImpl.java (select): Call static Thread
+ 	interrupted() method to clear interupt flag of our Thread.
+ 
+ 2004-07-09  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/nio/Buffer.java,
+ 	java/nio/ByteBuffer.java,
+ 	java/nio/ByteBufferHelper.java,
+ 	java/nio/ByteBufferImpl.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/CharBufferImpl.java,
+ 	java/nio/CharViewBufferImpl.java,
+ 	java/nio/DirectByteBufferImpl.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/DoubleBufferImpl.java,
+ 	java/nio/DoubleViewBufferImpl.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/FloatBufferImpl.java,
+ 	java/nio/FloatViewBufferImpl.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/IntBufferImpl.java,
+ 	java/nio/IntViewBufferImpl.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/LongBufferImpl.java,
+ 	java/nio/LongViewBufferImpl.java,
+ 	java/nio/MappedByteBufferImpl.java,
+ 	java/nio/ShortBuffer.java,
+ 	java/nio/ShortBufferImpl.java,
+ 	java/nio/ShortViewBufferImpl.java:
+ 	Fixed javadocs all over. Improved input error
+ 	checking.
+ 
+ 	* java/nio/Buffer.java
+ 	(checkForUnderflow, checkForOverflow, checkIndex,
+ 	checkIfReadOnly, checkArraySize): New helper methods
+ 	for error checking.
+ 
+ 	* java/nio/ByteBufferHelper.java
+ 	(checkRemainingForRead, checkRemainingForWrite,
+ 	checkAvailableForRead, checkAvailableForWrite): Removed
+ 	no longer needed methods.
+ 
+ 2004-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/regexp/CharIndexedInputStream.java:
+ 	Reordered imports to match classpath.
+ 
+ 2004-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java:
+ 	Load native library for setWindowPeer method.
+ 
+ 2004-07-08  Randolph Chung  <tausq@debian.org>
+ 
+ 	* configure.in (SIGNAL_HANDLER): Use pa-signal.h for hppa.
+ 	* configure: Regenerate.
+ 	* configure.host: Set can_unwind_signal for hppa*-linux.
+ 	* include/pa-signal.h: New file.
+ 
+ 2004-07-07  Per Bothner  <per@bothner.com>
+ 
+ 	* Makefile.am:  Add rules to build libgij from just gij.cc.
+ 
+ 	* include/jvm.h (namespace jcj):  Declare verbose_class_flag
+ 	* java/lang/natClass.cc (gcj::verbose_class_flag):  New variable.
+ 	(initializeClass):  If verbose_class_flag, print message.
+ 	* gij.cc (main):  Handle -verbose:class flag.
+ 
+ 2004-07-07  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* configure.host: Enable hash synchronization on Darwin.
+ 	* sysdep/powerpc/locks.h (compare_and_swap): Use '\n' instead of
+ 	';', since this is a comment on Darwin.
+ 	(compare_and_swap_release): Likewise.
+ 
+ 2004-07-06  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* java/net/URLStreamHandler.java (parseURL): Canonicalize
+ 	file portion of URL in addition to spec for file: protocol.
+ 
+ 2004-07-05  Anthony Green  <green@redhat.com>
+ 
+ 	* java/io/File.java (toURI): Merge from Classpath.
+ 
+ 2004-07-05  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/gcj/runtime/VMClassLoader.java (init): Check classpath entry
+ 	before passing to URL constructor. Rethrow any MalformedURLException
+ 	as a RuntimeException. Catch MalformedURLException specifically, not
+ 	all exceptions.
+ 
+ 2004-07-05  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Locale.java (readObject): Intern strings read from object
+ 	stream.
+ 
+ 2004-07-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/gcj/runtime/FirstThread.java,
+ 	gnu/gcj/runtime/natFirstThread.cc: Removed.
+ 	* gnu/java/lang/MainThread.java,
+ 	gnu/java/lang/natMainThread.cc: New files.
+ 	* prims.cc (_Jv_RunMain): Use MainThread instead of FirstThread.
+ 	* Makefile.am: Added new files and removed deleted ones.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-03  Mark Wielaard  <mark@klomp.org>
+ 	    Anthony Green  <green@redhat.com>
+ 
+ 	* java/net/URL.java (getFile): Clarify return value doc.
+ 	(getPath): Return null if file is empty - not empty String.
+ 	(set): Convert protocol to lower case before doing anything.
+ 	Only change the protocol handler if it's different.
+ 
+ 2004-07-03  Anthony Green  <green@redhat.com>
+ 
+ 	* java/net/URL.java (URL): Convert protocol to lower case before
+ 	doing anything, so we getURLStreamHandler() with the proper value.
+ 
+ 2004-07-02  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Locale.java (hashcode): Made transient.
+ 	(hashCode): No longer synchronized.
+ 	(equals): Remove comment.
+ 	(writeObject): No longer synchronized. Implement using writeObject
+ 	calls instead of tweaking hashCode field. Update doc.
+ 	(readObject): Implement using readObject calls.
+ 
+ 2004-06-26  Geoffrey Keating  <geoffk@apple.com>
+ 	    Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* configure.host (powerpc-*-darwin*): New case, define
+ 	can_unwind_signal.
+ 	* configure.in (*-*-darwin*): New case, point to darwin-signal.h.
+ 	* configure: Regenerate.
+ 	* include/darwin-signal.h: New.
+ 
+ 2004-06-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/beans/Statement.java (doExecute): Fix formatting.
+ 
+ 2004-06-29  Per Bothner  <per@bothner.com>
+ 
+ 	* jni.cc (_Jv_JNI_NewGlobalRef, JNICALL _Jv_JNI_DeleteGlobalRef,
+ 	etc etc):  Remove needless parenthesis, which causes __stdcall__
+ 	attribute on MinGW to get ignored.
+ 
+ 2004-06-29  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* testsuite/libjava.compile/PR16249.java: New test case. PR gcc/16249.
+ 
+ 2004-06-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* testsuite/libjava.jacks/jacks.xfail: Remove 8.1.3-superclass-6.
+ 
+ 2004-06-28  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/beans/Expression.java: New file.
+ 	* java/beans/Statement.java: New file.
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Re-generate.
+ 
+ 2004-06-27 Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/FilePermission.java (usingPerms): Removed.
+ 	(actionsString): Made final.
+ 	(cachePerms): Renamed to checkPerms.
+ 	(checkPerms): Renamed from cachePerms. Call trim() and toLowerCase()
+ 	on action String.
+ 	(FilePermission): Check arguments, call checkPerms().
+ 	(equals): Remove cachePerms() call.
+ 	(implies): Likewise.
+ 
+ 2004-06-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java (userAgent): New static
+ 	final field.
+ 	(sendRequest): Use new field in user-agent http agent.
+ 
+ 2004-06-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/EventQueue.java (postEvent): Throw NullPointerException
+ 	when argument is null.
+ 
+ 2004-06-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(ok_clicked): Use Ljava/lang/String; not Ljava.lang.String; in JNI
+ 	GetMethodID call.
+ 	(cancel_clicked): Likewise.
+ 
+ 2004-06-26  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(init_dpi_conversion_factor): Check for int_dpi < 0 in case gtk-xft-dpi
+ 	can not calculate the right value.
+ 	(dpi_changed_cb): Likewise. Mark *pspec as unused.
+ 
+ 2004-06-24  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* testsuite/libjava.jacks/jacks.xfail: Remove
+ 	15.9.1-qualified-concrete-20.
+ 
+ 2004-06-22  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/gcj/convert/BytesToUnicode.java (getDecoder): Pass original
+ 	encoding name to iconv.
+ 	* gnu/gcj/convert/UnicodeToBytes.java (getEncoder): Likewise.
+ 
+ 2004-06-22  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/16134:
+ 	* gnu/gcj/convert/BytesToUnicode.java (getDecoder): Canonicalize
+ 	encoding name before cache lookup. Thanks to Hannes Wallnoefer.
+ 	* gnu/gcj/convert/UnicodeToBytes.java (getEncoder): Likewise.
+ 
+ 2004-06-21  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java: Add DEBUG statements
+ 	everywhere.
+ 	(dumpElementln): New method.
+ 	(depth): New field.
+ 	* java/io/ObjectInputStream.java
+ 	(currentClassLoader): Make native.
+ 	(callersClassLoader): New field.
+ 	(depth): New field.
+ 	(readObject): ENDBLOCKDATA is generated if the class has a write
+ 	method, not if it has a read method.
+ 	(readObject): Save and restore this.currentObject and
+ 	this.currentObjectStreamClass around calls to callReadMethod().
+ 	* java/io/natObjectInputStream.cc (getCallersClassLoader): New
+ 	method.
+ 
+ 2004-06-18  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Add lgcc_s for
+ 	darwin.
+ 
+ 2004-06-18  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* prims.cc (_Jv_CreateJavaVM): Install SEGV and FPE handlers,
+ 	if desired, before the default class loader is initialised.
+ 	Call INIT_SEGV only if HANDLE_SEGV is defined.
+ 
+ 2004-06-18  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* gnu/gcj/runtime/VMClassLoader.java (init): Add extensions
+ 	directory only if it actually exists.
+ 
+ 2004-06-18  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Fix up non-ansi comments.
+ 
+ 2004-06-18  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java: Adding missing import
+ 	for javax.swing.event.EventListenerList.
+ 	* javax/swing/text/DefaultCaret.java: Likewise.
+ 
+ 2004-06-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JToolBar.java
+ 	(name): Removed.
+ 	(JToolBar): Use Component.setName(String) instead of doing it all
+ 	alone.
+ 	* javax/swing/Timer.java
+ 	(queueEvent): Added missing modifier.
+ 
+ 2004-06-17  Olga Rodimina  <rodimina@redhat.coom>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Re-generate.
+ 	* javax/swing/JMenu.java:
+ 	(insertSeparator): Implemented.
+ 	* javax/swing/JPopupMenu.java:
+ 	(JPopupMenu.Separator): Implemented.
+ 	* javax/swing/MenuSelectionManager.java:
+ 	(processMouseEvent): Use java.awt.Component
+ 	for event source instead of javax.swing.JComponent.
+ 	* javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java:
+ 	New File. Implemented.
+ 
+ 2004-06-16  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(GetLayoutInfo): Adjust cell sizes iff parent size is not zero.
+ 	Make sure pos_x and pos_y are never negative.
+ 
+ 2004-04-16  Andrew Overholt  <overholt@redhat.com>
+ 
+ 	* Makefile.am: Add new file.
+ 	* Makefile.in: Re-generate.
+ 	* javax/swing/JToolBar.java
+ 	Partially implemented.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	New file. Partially implemented.
+ 
+ 2004-06-16  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(setComposite): Accept AlphaComposite arguments.
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+ 	(createBufferedImage): Add new overloads.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(createImage): Use GdkPixbufDecoder.createBufferedImage
+ 	when useGraphics2D() is true.
+ 	(getImage): Delegate to createImage.
+ 	* javax/swing/JList.java
+ 	(isSelectionEmpty):
+ 	(getFirstVisibleIndex):
+ 	(getLastVisibleIndex):
+ 	(setSelectedValue):
+ 	(ensureIndexIsVisible): New methods.
+ 	* javax/swing/Timer.java: Reimplement.
+ 
+ 2004-06-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(AbstracElement): Made public, implements java.io.Serializable.
+ 	(AttributeContext): Made public.
+ 	(BranchElement): Likewise.
+ 	(Content): Likewise.
+ 	(DefaultDocumentEvent): Made public, extends
+ 	javax.swing.undo.CompoundEdit.
+ 	(ElementEdit): Made public, extends
+ 	javax.swing.undo.AbstractUndoableEdit.
+ 	(LeafElement): Made public.
+ 	(LeafElement.LeafElement): Made public.
+ 
+ 2004-06-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/JTextComponent.java: Totally reworked. Removed many
+ 	methods (that were obviously never be intended to get included hi this
+ 	class. Added some methods too.
+ 
+ 2004-06-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/PlainDocument.java
+ 	(serialVersionUID): New constant.
+ 	(lineLimitAttribute): Likewise.
+ 	(tabSizeAttribute): Likewise.
+ 	(tabSize): New field.
+ 	(PlainDocument): Made public.
+ 	(PlainDocument): New constructor.
+ 
+ 2004-06-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(insertString): Throws BadLocationException.
+ 	* javax/swing/text/Document.java
+ 	(insertString): Likewise.
+ 	* javax/swing/text/JTextComponent.java:
+ 	Javadocs and comments cleaned up.
+ 
+ 2004-06-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/event/UndoableEditListener.java: Reformatted.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(AbstractDocument): Implements java.io.Serializable.
+ 	(doc_list): Removed.
+ 	(undo_list): Removed.
+ 	(AbstractElement.serialVerionUID): New field.
+ 	(BranchElement.serialVerionUID): Likewise.
+ 	(DefaultDocumentEvent.serialVerionUID): Likewise.
+ 	(ElementEdit.serialVerionUID): Likewise.
+ 	(LeafElement.serialVerionUID): Likewise.
+ 	(serialVerionUID): Likewise.
+ 	(BAD_LOCATION): New constant.
+ 	(BidiElementName): Likewise.
+ 	(ContentElementName): Likewise.
+ 	(ParagraphElementName): Likewise.
+ 	(SectionElementName): Likewise.
+ 	(ElementNameAttribute): Likewise.
+ 	(AbstractDocument): Made protected.
+ 	(AbstractDocument): New construtor.
+ 	(listenerList): New field.
+ 	(fireChangedUpdate): Implemented.
+ 	(fireInsertUpdate): Likewise.
+ 	(fireRemoveUpdate): Likewise.
+ 	(fireUndoableEditUpdate): Likewise.
+ 	(getListeners): Likewise.
+ 	(addDocumentListener): Likewise.
+ 	(removeDocumentListener): Likewise.
+ 	(addUndoableEditListener): Likewise.
+ 	(removeUndoableEditListener): Likewise.
+ 	(getDocumentListeners): New method.
+ 	(getUndoableEditListeners): Likewise.
+ 	(getAsynchronousLoadPriority): Made public.
+ 	(getBidiRootElement): Likewise.
+ 	(setAsynchronousLoadPriority): Likewise.
+ 	(setDocumentProperties): Likewise.
+ 	* javax/swing/text/BadLocationException.java
+ 	(serialVerionUID): New field.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(changeEvent): New field.
+ 	(listenerList): Likewise.
+ 	(changes): Removed.
+ 	(addChangeListener): Reimplemented.
+ 	(removeChangeListener): Likewise.
+ 	(getListeners): New method.
+ 	(getChangeListeners): Likwise.
+ 	(getComponent): Likewise.
+ 	* javax/swing/text/GapContent.java
+ 	(GapContent): Implements java.io.Serializable.
+ 	(serialVerionUID): New field.
+ 
+ 2004-06-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTree.java
+ 	(treeModel): New field.
+ 	(JTree): New constructors, one existing one made public.
+ 	(createTreeModel): New method.
+ 	(addTreeExpansionListener): Likewise.
+ 	(removeTreeExpansionListener): Likewise.
+ 	(getTreeExpansionListeners): Likewise.
+ 	(fireTreeCollapsed): Likewise.
+ 	(fireTreeExpanded): Likewise.
+ 	(addTreeSelectionListener): Likewise.
+ 	(removeTreeSelectionListener): Likewise.
+ 	(getTreeSelectionListeners): Likewise.
+ 	(fireValueChanged): Likewise.
+ 	(addTreeWillExpandListener): Likewise.
+ 	(removeTreeWillExpandListener): Likewise.
+ 	(getTreeWillExpandListeners): Likewise.
+ 	(fireTreeWillCollapse): Likewise.
+ 	(fireTreeWillExpand): Likewise.
+ 
+ 2004-06-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTree.java: Reformatted.
+ 
+ 2004-06-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java: New file.
+ 	* javax/swing/JTextField.java
+ 	(actions): Removed.
+ 	(notifyAction): New constant.
+ 	(columns): New field.
+ 	(JTextField): New constructors.
+ 	(createDefaultModel): New method.
+ 	(addActionListener): Reimplmemented.
+ 	(removeActionListener): Reimplemented.
+ 	(getActionListeners): New method.
+ 	(fireActionPerformed): New method.
+ 	(getColumns): New method.
+ 	(setColumne): New method.
+ 	* javax/swing/text/JTextComponent.java
+ 	(AccessibleJTextComponent.serialVersionUID): New field.
+ 	(serialVersionUID): Likewise.
+ 	(DEFAULT_KEYMAP): Likewise.
+ 	(FOCUS_ACCELERATOR_KEY): Likewise.
+ 	(doc): Made private.
+ 	(icon_gap): Likewise.
+ 	(icon): Likewise.
+ 	(align): Likewise.
+ 	(JTextComponent): Some constructors removed.
+ 	(getScrollableTracksViewportHeight): New method.
+ 	(getScrollableTracksViewportWidth): Likewise.
+ 	* Makefile.am: Added javax/swing/JTextArea.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-06-15  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/ImageIcon.java (ImageIcon): New constructor.
+ 	* javax/swing/JFrame.java (defaultLookAndFeelDecorated): New property.
+ 	* javax/swing/JViewport.java
+ 	(getExtentSize): Return size rather than preferred size.
+ 	(toViewCoordinates): New methods.
+ 	(getViewSize): Return size rather than preferred size.
+ 	(setViewSize): Note view size as set.
+ 	* javax/swing/ViewportLayout.java (layoutContainer): Reimplement.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(getPreferredSize): Don't redo layout.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(paint): Translate image properly and eat exceptions.
+ 
+ 2004-06-15  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JTabbedPane.java
+ 	(setComponent): Remove old component and
+ 	add new component.
+ 	(setSelectedIndex): Don't operate on the
+ 	components if they're null. Don't set index
+ 	on the model if the index is the same.
+ 	(insertTab): Don't add or hide the component
+ 	if it's null. Repaint the container.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	Change colors for TabbedPane.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(mousePressed): Re-layout and paint the component.
+ 	(layoutContainer): Don't set location on the view.
+ 	(ScrollingViewport::paint): Remove.
+ 
+ 2004-06-14  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetDispatchKeyEvent): Change warning message to comment.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
+ 	Wrap baseline y value in PANGO_PIXELS macro, rather than simply
+ 	dividing by PANGO_SCALE.  Call gdk_flush before leaving GDK
+ 	critical region.
+ 	(drawLine): Call gdk_flush before leaving GDK critical region.
+ 	(fillRect): Likewise.
+ 	(drawRect): Likewise.
+ 	(copyArea): Likewise.
+ 	(copyPixmap): Likewise.
+ 	(clearRect): Likewise.
+ 	(drawArc): Likewise.
+ 	(drawPolyline): Likewise.
+ 	(drawPolygon): Likewise.
+ 	(fillPolygon): Likewise.
+ 	(fillArc): Likewise.
+ 	(drawOval): Likewise.
+ 	(fillOval): Likewise.
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java (initState): Add
+ 	style parameter.
+ 	(GdkFontMetrics): Add style argument to initState call.
+ 	(stringWidth(String,int,int,String)): Add style parameter.
+ 	(stringWidth(String)): Add style argument to stringWidth call.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
+ 	(initState): Set pango font style and weight based on AWT style
+ 	parameter.  Pass default GTK language to
+ 	pango_context_get_metrics.  Use PANGO_PIXELS macro rather than
+ 	simply dividing by PANGO_SCALE.
+ 	(stringWidth): Set pango font style and weight based on AWT style
+ 	parameter.
+ 
+ 	* java/awt/Button.java (next_button_number): New field.
+ 	(paramString): Change output.
+ 	(generateName): New method.
+ 	(getUniqueLong): New method.
+ 
+ 2004-06-14  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JTabbedPane.java:
+ 	(setComponentAt): Set the component, not
+ 	the enabled status.
+ 	* javax/swing/plaf/basic/BasicDesktopIconUI.java
+ 	(actionPerformed): Let deiconize catch exception.
+ 
+ 2004-06-14  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JPopupMenu.java:
+ 	(setVisible): Corrected location of a
+ 	heavyweight popup menu.
+ 
+ 2004-06-14  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/MenuSelectionManager.java:
+ 	Ran through jalopy to fix formatting style.
+ 
+ 2004-06-14  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JLayeredPane.java:
+ 	(remove): Revalidate and repaint layered pane after
+ 	the component was removed.
+ 	javax/swing/JMenu.java:
+ 	(setVisible): Display popup menu at the user location,
+ 	if one was set by the user.
+ 	(setMenuLocation): Reimplemented. Fixed javadoc.
+ 	* javax/swing/JMenuBar.java: Added javadoc.
+ 	(BORDER_PAINTED_CHANGED_PROPERTY): New Property.
+ 	(MODEL_CHANGED_PROPERTY): New Property.
+ 	(isSelected): Implemented.
+ 	(setBorderPainted): Fire PropertyChangeEvent
+ 	if paintBorder property changes.
+ 	(setSelected): Implemented.
+ 	(setSelectionModel): Implemented.
+ 	* javax/swing/JPopupMenu.java: Added Javadoc
+ 	(pack): Implemented.
+ 	(setVisible): Reimplemented.
+ 	(show): Fixed location.
+ 	(JPopupMenu.LigthWeightPopup): Reimplemented to use
+ 	Container instead of JPanel.
+ 	* javax/swing/MenuSelectionManager.java: Added Javadocs.
+ 	(clearSelectedPath): Reimplemented to clear selectedPath
+ 	in reverse order.
+ 	(processMouseEvent): Reimplemented.
+ 	(setSelectedPath): Fire stateChange event indicating that
+ 	selected menu path has changed.
+ 	(getPath): Change to use ArrayList instead of Vector.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	(installUI): call installKeyboardActions().
+ 	(uninstallUI): call uninstallKeyboardActions().
+ 
+ 2004-06-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/BadLocationException.java:
+ 	Reformatted.
+ 
+ 2004-06-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (DEFAULT_ROWS,
+ 	DEFAULT_COLS): New variables.
+ 	(create): Don't allow 0 rows or 0 columns.  Instead, set the
+ 	values to DEFAULT_ROWS or DEFAULT_COLS.
+ 	(getMinimumSize): Likewise.
+ 	(getPreferredSize): Likewise.
+ 	(minimumSize): Likewise.
+ 	(preferredSize): Likewise.
+ 	(create): Set peer's editable state.
+ 	* java/awt/TextArea.java (TextArea()): Set rows and columns to
+ 	zero.  Update javadocs.
+ 	(TextArea(String)): Likewise.
+ 	(TextArea(int,int)): Fix javadocs.
+ 	(TextArea(String,int,int,int)): Only throw exception if one of
+ 	rows or columns is zero.  Fix javadocs.
+ 
+ 2004-06-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/AWTEvent.java (toString): Handle MenuComponents in
+ 	addition to Components.
+ 
+ 	* java/awt/MenuItem.java (dispatchEventImpl): If the event
+ 	wasn't consumed by normal processing, send it to the parent
+ 	menu.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(setPixels(int,int,int,int,ColorModel,int[],int,int)): Remove
+ 	translation.
+ 
+ 2004-06-11  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/MediaTracker.java
+ 	(addImage(Image,int)): Call imageUpdate() to udpate image status.
+ 	(addImage(Image,int,int,int)): Likewise.
+ 
+ 2004-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/Document.java,
+ 	javax/swing/text/GapContent.java,
+ 	javax/swing/text/JTextComponent.java,
+ 	javax/swing/text/PlainDocument.java:
+ 	Reformatted.
+ 
+ 2004-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JRootPane.java
+ 	(AccessibleJRootPane.serialVersionUID): New field.
+ 	(AccessibleJRootPane.AccessibleJRootPane): New constructor.
+ 	(AccessibleJRootPane.getAccessibleRole): New method.
+ 	(RootLayout): Implements Serializable.
+ 	(RootLayout.serialVersionUID): New field.
+ 	(RootLayout.RootLayout): New constructor.
+ 	(setJMenuBar): Made public.
+ 	(getJMenuBar): Likewise.
+ 	(JRootPane): Likewise.
+ 	(createContentPane): Likewise.
+ 	(createGlassPane): Likewise.
+ 	(createLayeredPane): Likewise.
+ 
+ 2004-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(isLeftMouseButton): Fixed javadoc.
+ 	(isMiddleMouseButton): Likewise.
+ 	(isRightMouseButton): Likewise.
+ 
+ 2004-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JScrollPane.java
+ 	(serialVersionUID): New field.
+ 	(columnHeader): Made protected.
+ 	(rowHeader): Likewise.
+ 	(lowerLeft): Likewise.
+ 	(lowerRight): Likewise.
+ 	(upperLeft): Likewise.
+ 	(upperRight): Likewise.
+ 	(horizontalScrollBar): Likewise.
+ 	(horizontalScrollBarPolicy): Likewise.
+ 	(verticalScrollBar): Likewise.
+ 	(verticalScrollBarPolicy): Likewise.
+ 	(viewport): Likewise.
+ 
+ 2004-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/LookAndFeel.java: Fixed javadocs.
+ 
+ 2004-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JEditorPane.java: Fixed javadocs.
+ 	(JEditorPane): Removed redundant call to to this().
+ 	(fireHyperlinkUpdate): Implemented.
+ 
+ 2004-06-10  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenu.java: Fixed file name
+ 	in the file comment.
+ 
+ 2004-06-10  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenu.java: Added javadoc.
+ 	(JMenu): Added MenuChangeListener to listen to
+ 	ChangeEvents occuring in menu's model.
+ 	(insert): Throw IllegalArgumentException if
+ 	index is less than 0
+ 	(setSelected): Reimplement.
+ 	(setPopupMenuVisible): Call menu's model isEnabled()
+ 	(setDelay): Throw IllegalArgumentException if
+ 	given amount of delay is less than 0.
+ 	(createActionComponent): Implemented.
+ 	(createActionChangeListener): Implemented.
+ 	(addSeparator): Implemented.
+ 	(getItem): Throw IllegalArgumentException if index is
+ 	less than 0.
+ 	(getItemCount): Implemented.
+ 	(fireMenuSelected): Changed to use menuEvent.
+ 	(fireMenuDeselected): Likewise.
+ 	(fireMenuCanceled): Likewise.
+ 	(setAccelerator): Changed to throw an error if this
+ 	method is used.
+ 	(doClick): Implemented.
+ 	(JMenu.ActionChangedListener): New inner class to handle
+ 	PropertyChangeEvents occuring in the actions associated with menu.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java: Added javadoc.
+ 	(BasicMenuUI): Added PropertyChangeListener to the menu.
+ 	(createChangeListener): Implemented.
+ 	(createMenuDragMouseListener): Likewise.
+ 	(createMenuKeyListener): Likewise.
+ 	(createPropertyChangeListener): Likewise.
+ 	(uninstallListeners): Likewise.
+ 	(BasicMenuUI.MouseInputHandler): Reimplemented.
+ 	(BasicMenuUI.PropertyChangeHandler): New class. Not implemented yet.
+ 	(BasicMenuUI.ChangeHandler): Likewise.
+ 	(BasicMenuUI.MenuDragMouseHandler): Likewise.
+ 	(BasicMenuUI.MenuKeyHandler): Likewise.
+ 
+ 2004-06-10  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/MediaTracker.java
+ 	(imageUpdate): Only do notifyAll() if the image is complete.
+ 
+ 2004-06-10  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JApplet.java:
+ 	(getJMenuBar): Made public.
+ 	(setJMenuBar): Likewise.
+ 	* javax/swing/JFrame.java:
+ 	(getJMenuBar): Made public.
+ 	(setJMenuBar): Likewise.
+ 	* javax/swing/JWindow.java:
+ 	(getJMenuBar): Removed.
+ 	(setJMenuBar): Removed.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(createEditorKitForContentType): Fixed visibility.
+ 	(fireHyperlinkUpdate): Likewise.
+ 	(getContentType): Likewise.
+ 	(getEditorKit): Likewise.
+ 	(getEditorKitForContentType): Likewise.
+ 	(getPage): Likewise.
+ 	(read): Likewise.
+ 	(registerEditorKitForContentTyoe): Likewise.
+ 	(replaceSelection): Likewise.
+ 	(setContentType): Likewise.
+ 	(setEditorKit): Likewise.
+ 	(setPage): Likewise.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/Timer.java
+ 	(Timer): New constructor.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	(animationTimer): Don't initialize at construction.
+ 	(startAnimationTimer): Added since tag.
+ 	(stopAnimationTimer): Likewise.
+ 	(installUI): Use new Timer constructor.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(installUI): Likewise.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(installUI): Likewise.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ButtonGroup.java
+ 	(serialVersionUID): Made private.
+ 	(buttons): Renamed from v, added javadoc.
+ 	(sel): Added javadoc.
+ 	(ButtonGroup): Likewise.
+ 	(add): Likewise.
+ 	(remove): Likewise.
+ 	(getElements): Likewise.
+ 	(getSelection): Likewise.
+ 	(setSelected): Likewise.
+ 	(isSelected): Likewise.
+ 	(getButtonCount): Likewise.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ButtonGroup.java,
+ 	javax/swing/ImageIcon.java,
+ 	javax/swing/JEditorPane.java,
+ 	javax/swing/JRootPane.java,
+ 	javax/swing/JTextField.java,
+ 	javax/swing/LookAndFeel.java,
+ 	javax/swing/plaf/basic/BasicTextUI.java:
+ 	Reindented.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/Style.java: Added javadocs.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(fireVetoableChange): Removed redundant cast.
+ 	* javax/swing/JLabel.java
+ 	(getDisabledIcon): Save icon for next call.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/KeyStroke.java
+ 	(getKeyStroke(char,boolean)): Marked deprecated.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultCellEditor.java,
+ 	javax/swing/GrayFilter.java,
+ 	javax/swing/event/DocumentEvent.java,
+ 	javax/swing/text/JTextComponent.java,
+ 	javax/swing/text/MutableAttributeSet.java:
+ 	Reindented.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/BorderUIResource.java:
+ 	Added serialVersionUID all over.
+ 
+ 2004-06-10  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/UndoManager.java: Re-written from scratch.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(noFocusBorder): Initialize directly.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicArrowButton.java
+ 	(setDirection): Use method argument.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/ComponentUI.java,
+ 	javax/swing/undo/CompoundEdit.java,
+ 	javax/swing/undo/StateEdit.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultButtonModel.java
+ 	(ARMED): Made public final, fixed value.
+ 	(ENABLED): Likewise.
+ 	(PRESSED): Likewise.
+ 	(ROLLOVER): Likewise.
+ 	(SELECTED): Likewise.
+ 	(stateMask): Initialize directly.
+ 	(listenerList): Likewise.
+ 	(mnemonic): Likewise.
+ 	(fireStateChanged): Removed argument, use changeEvent as event.
+ 	All places where this method is called are fixed too.
+ 	(getActionCommant): Fixed javadoc.
+ 	(setGroup): Fixed javadoc.
+ 	(getGroup): New method.
+ 
+ 2004-06-09  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(AbstractButton): Use init() to initialize the button.
+ 	(init): New Method. Initializes AbstractButton.
+ 	* javax/swing/JMenuItem.java: Documented.
+ 	(JMenuItem): Reimplemented.
+ 	(init): Implemented.
+ 	(setEnabled): Changed to call super.setEnabled()
+ 	(processMouseEvent): Reimplemented.
+ 	(fireMenuKeyPressed): Implemented.
+ 	(fireMenuKeyReleased): Implemented.
+ 	(fireMenuKeyTyped): Implemented.
+ 	(menuSelectionChanged): disarm the model if the menu item was
+ 	deselected.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:Documented.
+ 	(getPath): Change to use ArrayList instead of Vector.
+ 	(getPreferredSize): Renamed variable.
+ 	(paintMenuItem): Paint margin area of menu item.
+ 	(MouseInputHandler.mouseEntered): Set selection in MenuSelectionManager.
+ 	(MouseInputHandler.mouseReleased): Check if mouse was pressed inside
+ 	menu item's bounds before clearing the selection.
+ 
+ 2004-06-09  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
+ 	(GtkTextComponentPeer): Set caret position to 0.
+ 	* java/awt/TextComponent.java
+ 	(setText): Set caret position to 0.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
+ 	Handle GtkScrolledWindow separately. Fix signal handler blocking.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
+ 	Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Make cursor
+ 	visible.
+ 
+ 2004-06-09  Kim Ho  <kho@redhat.com>
+ 
+ 	* Makefile.am: New files
+ 	* Makefile.in: Regenerated
+ 	* java/awt/Container.java
+ 	(getComponentAt): Removed.
+ 	* javax/swing/AbstractAction.java
+ 	(ENABLED_PROPERTY): New property.
+ 	(putValue): Fire PropertyChangeEvents.
+ 	(setEnabled): ditto.
+ 	(firePropertyChange): Javadoc and implement
+ 	convenience method.
+ 	* javax/swing/AbstractButton.java
+ 	(setAction): Don't create PropertyChangeListener
+ 	if new Action is null.
+ 	(setIcon): Don't set icon till after comparing
+ 	it.
+ 	(configurePropertiesFromAction): Check mnemonic
+ 	key before calling intValue().
+ 	(createActionPropertyChangeListener): Check
+ 	properties rather than bulk change.
+ 	* javax/swing/DefaultDesktopManager.java:
+ 	Implement.
+ 	* javax/swing/DesktopManager.java:
+ 	Jalopy and javadoc.
+ 	* javax/swing/JComponent.java
+ 	(fireVetoableChange): Implement.
+ 	(paintImmediately): Use root component.
+ 	* javax/swing/JDesktopPane.java: Implement
+ 	* javax/swing/JInternalFrame.java: Implement
+ 	* javax/swing/JLabel.java
+ 	(getDisabledIcon): Return grayscaled icon if
+ 	no disabled icon specified.
+ 	* javax/swing/JMenuBar.java
+ 	(getComponentAtIndex): Use getComponent
+ 	* javax/swing/JOptionPane.java
+ 	(getDesktopPaneForComponent): Use SwingUtilities'
+ 	getAncestorOfClass
+ 	(getFrameForComponent): ditto.
+ 	* javax/swing/JSplitPane.java
+ 	(remove): Use getComponent.
+ 	* javax/swing/SwingUtilities.java
+ 	(convertPoint): Implement.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paintButtonNormal): Check opaqueness before
+ 	filling background.
+ 	* javax/swing/plaf/basic/BasicDesktopIconUI.java:
+ 	Implement
+ 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Change InternalFrame and Desktop colors.
+ 
+ 2004-06-09  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(remove): Do not set component to invisible.
+ 
+ 2004-06-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/tree/DefaultMutableTreeNode.java
+ 	(getLeafCount): Renamed enum to e.
+ 
+ 2004-06-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java
+ 	(positionForMouseEvent): Removed redundant semicolon.
+ 	(continueDrag): Use method arguments.
+ 
+ 2004-06-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/border/TitledBorder.java,
+ 	javax/swing/filechooser/FileSystemView.java,
+ 	javax/swing/plaf/basic/BasicButtonListener.java,
+ 	javax/swing/plaf/basic/BasicGraphicsUtils.java,
+ 	javax/swing/plaf/basic/BasicLabelUI.java,
+ 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicScrollBarUI.java,
+ 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
+ 	javax/swing/plaf/basic/BasicSliderUI.java,
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
+ 	javax/swing/table/JTableHeader.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/StyledEditorKit.java,
+ 	javax/swing/tree/DefaultTreeCellEditor.java:
+ 	Reworked import statements.
+ 
+ 2004-06-08  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/Box.java: Temporarily comment out code
+ 	broken due to visibility bug.
+ 
+ 2004-06-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ImageIcon.java
+ 	(ImageIcon): Added missing constructor.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JToggleButton.java
+ 	(JToggleButton): New constructor.
+ 	(getAccessibleContext): Moved documentation into javadoc.
+ 	(getUIClassID): Likewise.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(getDisabledIcon): Create disabled icon if none exists yet.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initClassDefaults): Added FormattedTextFieldUI.
+ 	(loadResourceBundle): Renamed enum to e.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paintIcon): Simplified.
+ 	(paintText): Paint disabled button correctly.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(createToolTip): Use official JToolTip API.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JToolTip.java
+ 	(JToolTip): No arguments in API.
+ 	(setTipText): New method.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(isLeftMouseButton): New method.
+ 	(isMiddleMouseButton): New method.
+ 	(isRightMouseButton): New method.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java,
+ 	javax/swing/CellRendererPane.java,
+ 	javax/swing/JCheckBoxMenuItem.java,
+ 	javax/swing/JColorChooser.java,
+ 	javax/swing/JComboBox.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JDesktopPane.java,
+ 	javax/swing/JFileChooser.java,
+ 	javax/swing/JMenu.java,
+ 	javax/swing/JMenuItem.java,
+ 	javax/swing/JOptionPane.java,
+ 	javax/swing/JPasswordField.java,
+ 	javax/swing/JPopupMenu.java,
+ 	javax/swing/JProgressBar.java,
+ 	javax/swing/JRadioButtonMenuItem.java,
+ 	javax/swing/JScrollBar.java,
+ 	javax/swing/JSeparator.java,
+ 	javax/swing/JSlider.java,
+ 	javax/swing/JSplitPane.java,
+ 	javax/swing/JTabbedPane.java,
+ 	javax/swing/JTextField.java,
+ 	javax/swing/JToolBar.java,
+ 	javax/swing/text/JTextComponent.java:
+ 	Fixed all constructors of accessibility classes.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ScrollPaneLayout.java: Renamed all memeber variables all
+ 	over.
+ 
+ 2004-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/Box.java
+ 	(AccessibleBoxFiller): Extends AccessibleAWTComponent.
+ 	(AccessibleBoxFiller.serialVersionUID): New member variable.
+ 	* javax/swing/DefaultButtonModel.java
+ 	(stateMask): Made protected.
+ 	(listenerList): Likewise.
+ 	(changeEvent): Likewise.
+ 	(group): Likewise.
+ 	(mnemonic): Likewise.
+ 	(actionCommand): Likewise.
+ 	(getListeners): New method.
+ 	(getActionListeners): New method.
+ 	(getItemListeners): New method.
+ 	(getChangeListeners): New method.
+ 	(fireItemStateChanged): Simplified.
+ 	(fireActionPerformed): Simplified.
+ 	(fireStateChanged): Simplified.
+ 	* javax/swing/JFrame.java
+ 	(JFrame): Implements WindowContants.
+ 	(HIDE_ON_CLOSE): Removed.
+ 	(EXIT_ON_CLOSE): Removed.
+ 	(DISPOSE_ON_CLOSE): Removed.
+ 	(DO_NOTHING_ON_CLOSE): Removed.
+ 	(processWindowEvent): Exit with code 0.
+ 	(setDefaultCloseOperation): Do security check before setting value.
+ 	* javax/swing/JOptionPane.java
+ 	(message): Initialize only in constructor.
+ 	* javax/swing/JToolTip.java: Removed unused imports.
+ 	* javax/swing/JViewport.java
+ 	(serialVersionUID): New member variable.
+ 	(SIMPLE_SCROLL_MODE): Made final, fixed value.
+ 	(BLIT_SCROLL_MODE): Likewise.
+ 	(BACKINGSTORE_SCROLL_MODE): Likewise.
+ 	(scrollUnderway): Made protected.
+ 	(isViewSizeSet): Likewise.
+ 	* javax/swing/ListModel.java: Fixed javadoc.
+ 	* javax/swing/Popup.java: Likewise.
+ 	* javax/swing/RepaintManager.java
+ 	(paintDirtyRegions): Don't use internal classes of
+ 	java.util.AbstractMap.
+ 	* javax/swing/ScrollPaneConstants.java: Reindented.
+ 	* javax/swing/ScrollPaneLayout.java
+ 	(viewport): Made protected.
+ 	(verticalScrollBar): Made protected, renamed to vsb.
+ 	(horizontalScrollBar): Made protected, renamed to hsb.
+ 	(rowHeader): Made protected, renamed to rowHead.
+ 	(columnHeader): Made protected, renamed to colHead.
+ 	(lowerLeft): Made protected.
+ 	(lowerRight): Made protected.
+ 	(upperLeft): Made protected.
+ 	(upperRight): Made protected.
+ 	(verticalScrollBarPolicy): Made protected, renamed to vsbPolicy.
+ 	(horizontalScrollBarPolicy): Made protected, renamed to hsbPolicy.
+ 
+ 2004-06-07  Bernd Schmidt  <bernds@btinternet.com>
+ 
+ 	* java/awt/MediaTracker.java (imageUpdate): Only set status to
+ 	LOADING if flags has SOMEBITS set.
+ 
+ 2004-06-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java: Reorganized imports.
+ 	* javax/swing/ActionMap.java: Likewise.
+ 	* javax/swing/DefaultButtonModel.java: Likewise.
+ 	* javax/swing/DefaultListModel.java: Likewise.
+ 	* javax/swing/ImageIcon.java: Likewise.
+ 	(serialVersionUID): New member variable.
+ 	* javax/swing/JComboBox.java: Reorganized imports.
+ 	* javax/swing/JComponent.java: Likewise.
+ 	(ui): Made protected.
+ 	(listenerList): Made protected.
+ 	(TOOL_TIP_TEXT_KEY): New constant.
+ 	(scrollRectToVisible): Removed redundant null check.
+ 	* javax/swing/JFrame.java: Reorganized imports.
+ 	* javax/swing/JInternalFrame.java: Reorganized imports.
+ 	* javax/swing/JProgressBar.java: Likewise.
+ 	* javax/swing/JRootPane.java: Likewise.
+ 	* javax/swing/JScrollBar.java: Likewise.
+ 	* javax/swing/JSeparator.java: Likewise.
+ 	* javax/swing/JSlider.java: Likewise.
+ 	* javax/swing/JTabbedPane.java: Likewise.
+ 	* javax/swing/JTextField.java: Likewise.
+ 	* javax/swing/JToolBar.java: Likewise.
+ 	* javax/swing/JTree.java: Likewise.
+ 	* javax/swing/JViewport.java: Likewise.
+ 	* javax/swing/JWindow.java: Likewise.
+ 	* javax/swing/KeyStroke.java: Likewise.
+ 	* javax/swing/LookAndFeel.java: Likewise.
+ 	* javax/swing/MenuSelectionManager.java: Likewise.
+ 	* javax/swing/SwingUtilities.java: Likewise.
+ 	* javax/swing/Timer.java: Likewise.
+ 	* javax/swing/DefaultBoundedRangeModel.java: Fixed javadoc.
+ 	* javax/swing/JList.java
+ 	(HORIZONTAL_WRAP): Made final, fixed value.
+ 	(VERTICAL): Likewise.
+ 	(VERTICAL_WRAP): Likewise.
+ 
+ 2004-06-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(serialVersionUID): New member variable.
+ 	(AccessibleAbstractButton.serialVersionUID): Likewise.
+ 	(AbstractButton): Made public.
+ 	* javax/swing/Box.java
+ 	(AccessibleBox.serialVersionUID): New member variable.
+ 	(Filler.serialVersionUID): Likewise.
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JApplet.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JCheckBox.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JCheckBoxMenuItem.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJCheckBoxMenuItem.serialVersionUID): Likewise.
+ 	* javax/swing/JColorChooser.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJColorChooser.serialVersionUID): Likewise.
+ 	* javax/swing/JComponent.java
+ 	(serialVersionUID): Made private.
+ 	(AccessibleJComponent.serialVersionUID): New member variable.
+ 	* javax/swing/JDesktopPane.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JDialog.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JFormattedTextField.java
+ 	(serialVersionUID): Fixed value.
+ 	* javax/swing/JFrame.java
+ 	(serialVersionUID): New member variable.
+ 	(getDefaultCloseOpertation): Made public.
+ 	* javax/swing/JLayeredPane.java
+ 	(serialVersionUID): Likewise.
+ 	(LAYER_PROPERTY): Made final, fixed value.
+ 	(JLayeredPane): Made public.
+ 	* javax/swing/JMenu.java
+ 	(AccessibleJMenu.serialVersionUID): New member variable.
+ 	(WinListener.serialVersionUID): Likewise.
+ 	* javax/swing/JMenuBar.java
+ 	(serialVersionUID): Likewise.
+ 	(getComponentAtIndex): Added @deprecated tag.
+ 	* javax/swing/JMenuItem.java
+ 	(serialVersionUID): New member variable.
+ 	(AccessibleJMenuItem.serialVersionUID): Likewise.
+ 	* javax/swing/JOptionPane.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJOptionPane.serialVersionUID): Likewise.
+ 	* javax/swing/JPopupMenu.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJPopupMenu.serialVersionUID): Likewise.
+ 	(getPopupMenuListeners): New method.
+ 	(getComponentAtIndex): Added @deprecated tag.
+ 	* javax/swing/JProgressBar.java
+ 	(serialVersionUID): New member variable.
+ 	(AccessibleJProgressBar.serialVersionUID): Likewise.
+ 	* javax/swing/JRadioButton.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JRadioButtonMenuItem.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJRadioButtonMenuItem.serialVersionUID): Likewise.
+ 	* javax/swing/JScrollBar.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJScrollBar.serialVersionUID): Likewise.
+ 	* javax/swing/JSeparator.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJSeparator.serialVersionUID): Likewise.
+ 	* javax/swing/JSlider.java: Fixed javadocs.
+ 	(AccessibleJSlider.serialVersionUID): New member variable.
+ 	* javax/swing/JSplitPane.java: Added copyright statement.
+ 	(serialVersionUID): New member variable.
+ 	(AccessibleJSplitPane.serialVersionUID): Likewise.
+ 	* javax/swing/JTabbedPane.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJTabbedPane.serialVersionUID): Likewise.
+ 	(ModelListener.serialVersionUID): Likewise.
+ 	(ModelListener.ModelListener): New constructor.
+ 	(SCROLL_TAB_LAYOUT): Made public final, fixed value.
+ 	(WRAP_TAB_LAYOUT): Likewise.
+ 	* javax/swing/JTable.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/swing/JToggleButton.java
+ 	(serialVersionUID): Likewise.
+ 	(ToggleButtonModel): Made static.
+ 	(ToggleButtonModel.serialVersionUID): New member variable.
+ 	* javax/swing/JToolTip.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JTree.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JWindow.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/Timer.java
+ 	(serialVersionUID): Likewise.
+ 
+ 2004-06-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingConstants.java
+ 	(NEXT): New constant.
+ 	(PREVIOUS): Likewise.
+ 	* javax/swing/UIManager.java
+ 	(LookAndFeel): Made public.
+ 	(LookAndFeel.getClassName): Likewise.
+ 	(LookAndFeel.getName): Likewise.
+ 
+ 2004-06-02  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java:
+ 	Removed CVS tags.
+ 	* javax/swing/JMenu.java: Likewise.
+ 	* javax/swing/JMenuBar.java: Likewise.
+ 	* javax/swing/JMenuItem.java: Likewise.
+ 	* javax/swing/JPopupMenu.java: Likewise.
+ 	* javax/swing/JRadioButtonMenuItem.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java:Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Likewise.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(MouseEntered): Do not call getPath() from MenuSelectionManager.
+ 	Call getPath() from super class instead.
+ 
+ 2004-05-31  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(remove): Set component visibility to false after removing it.
+ 
+ 2004-05-27  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (getForeground): Return SystemColor if
+ 	parent is null.
+ 	(getBackground): Likewise.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(item_highlighted): New function.
+ 	(connectSignals): Set item_highlighted as list's select
+ 	function.
+ 
+ 	* java/applet/Applet.java: Revert changes from 2004-04-29,
+ 	2004-03-15 and 2004-03-14.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
+ 	Divide baseline y coordinate by PANGO_SCALE, not DPI conversion
+ 	factor.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (create): Set
+ 	"Dialog" as the default font.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (create):
+ 	Likewise.
+ 	* java/awt/Component.java (getFont): Return "Dialog" font by
+ 	default.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c:
+ 	Multiply size argument to pango_font_description_set_size by the
+ 	DPI conversion factor rather than by PANGO_SCALE.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
+ 	Divide baseline y coordinate by DPI conversion factor rather
+ 	than by PANGO_SCALE.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	(area_prepared): Fix typo.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
+ 	(gtkSetFont): Move gtk_bin_get_child inside GDK critical region.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(dpi_conversion_factor): New global variable.
+ 	(init_dpi_conversion_factor): New function to calculate and
+ 	track DPI conversion factor.
+ 	(dpi_changed_cb): New callback.
+ 	* jni/gtk-peer/gtkpeer.h (dpi_conversion_factor): Declare.
+ 
+ 2004-05-27  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(getGraphics): Return a new GdkGraphics instance.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(getGraphics): Call super.getGraphics().
+ 
+ 2004-05-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(setNativeBounds): Clamp width and height values to >= 0.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(find_fg_color_widget): Handle GtkOptionMenu specially.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Only post configure events to visible
+ 	top-level windows.
+ 
+ 2004-05-26  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java
+ 	(layoutContainer): Fix size calculations.
+ 
+ 2004-05-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_wm_protocols_filter): Remove function.
+ 	(create): Remove filter that removes WM_TAKE_FOCUS client
+ 	messages.
+ 
+ 2004-06-17  Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/zip/ZipFile.java (getInputStream): Return null if
+ 	entry not found.
+ 
+ 	* gnu/gcj/runtime/VMClassLoader.java (init): Add extension
+ 	directory contents to the class path.
+ 
+ 2004-06-15  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natSystem.cc (getenv0): Don't assume environment
+ 	variable is Latin 1 coded.
+ 
+ 2004-06-14  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* configure.in: Support --enable-version-specific-runtime-libs.
+ 	* configure: Regenerated.
+ 
+ 2004-06-14  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Calendar.java: Change ResourceBundle.getBundle() calls
+ 	to pass ClassLoader argument.
+ 	* java/util/GregorianCalendar.java: Likewise.
+ 	* java/util/Currency.java: Likewise.
+ 	* java/text/BreakIterator.java: Likewise.
+ 	* java/text/Collator.java: Likewise.
+ 	* java/text/DateFormat.java: Likewise.
+ 	* java/text/DateFormatSymbols.java: Likewise.
+ 	* java/text/DecimalFormatSymbols.java: Likewise.
+ 	* java/text/NumberFormat.java: Likewise.
+ 	* java/awt/Window.java: Likewise.
+ 
+ 2004-06-14  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/System.java: (getenv0): New method.
+ 	(getenv): Add security check.  Do the right thing.
+ 	* java/lang/natSystem.cc (getenv0): New method.
+ 
+ 2004-06-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/RepaintManager.java
+ 	(paintDirtyRegions): Use entrySet(), not values().
+ 
+ 2004-06-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni.cc (_Jv_JNI_GetAnyMethodID): Add name and signature to
+ 	NoSuchMethodError.
+ 
+ 2004-06-11  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/util/GregorianCalendar.java (computeTime):  Skip buggy formulae
+ 	when we already know the answer.
+ 	* java/util/SimpleTimeZone.java (serialVersionOnStream): Bump to 2.
+ 	(setStartRule,setEndRule): Don't take abs of day number.
+ 	(getOffset): Clarify docs.  Add argument checks.
+ 	(isBefore): Take abs of day number in DOW_LE_DOM_MODE.
+ 	(equals,hasSameRules,toString,readObject): Use startTimeMode and
+ 	endTimeMode.
+ 
+ 2004-06-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* interpret.cc (run): Handle wide fload.
+ 
+ 2004-06-06  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/util/zip/ZipEntry.java (setTime): Remove scaling.
+ 
+ 2004-06-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingConstants.java
+ 	(NEXT): New constant.
+ 	(PREVIOUS): Likewise.
+ 
+ 2004-06-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/UIManager.java
+ 	(LookAndFeel): Made public.
+ 	(LookAndFeel.getName): Likewise.
+ 	(LookAndFeel.getClassName): Likewise.
+ 
+ 2004-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(requestFocus): Revert last changes.
+ 	(gtkRequestFocus): Removed.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkRequestFocus):
+ 	Renamed to ...
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRequestFocus):
+ 	Reverted last patch.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_setupAccelGroup):
+ 	Reverted comment change.
+ 
+ 2004-06-02  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java:
+ 	Removed CVS tags.
+ 	* javax/swing/JMenu.java: Likewise.
+ 	* javax/swing/JMenuBar.java: Likewise.
+ 	* javax/swing/JMenuItem.java: Likewise.
+ 	* javax/swing/JPopupMenu.java: Likewise.
+ 	* javax/swing/JRadioButtonMenuItem.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java:Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Likewise.
+ 
+ 2004-06-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectStreamField.java: Cleaned up imports.
+ 
+ 2004-06-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectStreamField.java: Style and javadoc cleanup.
+ 
+ 2004-06-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/Writer.java (Writer(Object)): Fixed API doc.
+ 
+ 2004-06-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Security.java
+ 	(insertProviderAt): Use equals() instead of ==.
+ 	(removeProvicer): Likewise.
+ 	(getProvider): Likewise.
+ 	* java/security/Signature.java
+ 	(sign): Don't set state to UNINITIALIZED.
+ 	(verify): Likewise.
+ 
+ 2004-06-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (requestFocus):
+ 	Implement by calling gtkRequestFocus.
+ 	(gtkRequestFocus): New native method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_requestFocus__):
+ 	Renamed to ...
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkRequestFocus):
+ 	New function name.
+ 	(filter_expose_event_handler):
+ 	Mark static.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ 	(menu_pos): Mark static.
+ 
+ 2004-06-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java,
+ 	java/text/CollationKey.java,
+ 	java/text/RuleBasedCollator.java: New versions from GNU classpath.
+ 	* testsuite/libjava.mauve/xfails: Removed all
+ 	java.text.CollationElementIterator tests.
+ 
+ 2004-06-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/InflaterInputStream.java: Merged more with Classpath
+ 	version.
+ 	* java/util/zip/ZipOutputStream.java (): Renamed enum to e to removed
+ 	Java 1.5 keyword usage.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(MouseEntered): Do not call getPath() from MenuSelectionManager.
+ 	Call getPath() from super class instead.
+ 
+ 2004-05-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/SequenceInputStream.java:
+ 	Rename enum to e because enum is a keyword in Java 1.5.
+ 
+ 2004-05-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/rmic/CompilerProcess.java:
+ 	Fixed javadoc to by XHTML compliant.
+ 
+ 2004-05-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/Toolkit.java (loadSystemColors): Implement.
+ 
+ 2004-05-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/System.java: Reordered imports.
+ 
+ 2004-05-30  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(parse): Fixed parsing of decimal strings. Number of maximum
+ 	digits to be read should now work.
+ 	* java/text/SimpleDateFormat.java
+ 	(SimpleDateFormat): Set maximumFractionDigit to 0 for the number
+ 	formatter. This fixes DateFormatTest.
+ 
+ 2004-05-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java
+ 	(limit): Fixed off by one error.
+ 	* java/nio/CharBuffer.java
+ 	(wrap): Fixed arguments, added javadocs.
+ 
+ 2004-05-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/beans/BeanInfoEmbryo.java,
+ 	java/awt/im/InputContext.java,
+ 	javax/swing/tree/DefaultMutableTreeNode.java:
+ 	Rename enum to e because enum is a keyword in Java 1.5.
+ 
+ 2004-05-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/math/MPN.java,
+ 	java/awt/geom/Arc2D.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-05-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java
+ 	(dispatchEvent): Call method to get key event dispatchers.
+ 	(dispatchKeyEvent): Call method to get key event post processors.
+ 	* javax/swing/JComponent.java
+ 	(listenerList): Made protected.
+ 	* javax/swing/JOptionPane.java
+ 	(message): Don't initialize.
+ 	(JOptionPane): Set message text.
+ 	* javax/swing/JPopupMenu.java
+ 	(show): Fixed typo in argument name.
+ 	* javax/swing/RepaintManager.java
+ 	(paintDirtyRegions): Use public API of java.util.Map.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java
+ 	(positionForMouseEvent): Removed redundant ';'.
+ 	(continueDrag): Use method arguments.
+ 
+ 2004-05-29  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* testsuite/libjava.jacks/jacks.xfail: Update for post tree-ssa merge
+ 	results.
+ 
+ 2004-05-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gcj/cni.h (JvAllocBytes): New public CNI function. Calls
+ 	_Jv_AllocBytes.
+ 	* gnu/gcj/RawDataManaged.java: New file.
+ 	* java/lang/Thread.java (data): Declare as RawDataManaged.
+ 	* java/lang/natThread.cc (init_native): Cast natThread data to
+ 	RawDataManaged, not jobject.
+ 	* Makefile.am (ordinary_java_source_files): Add RawDataManaged.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2004-05-27  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/util/SimpleTimeZone.java: Reverting my last change until I
+ 	can fix it properly.
+ 
+ 2004-05-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JPopupMenu.java
+ 	(isVisible): Do not use visible directly.
+ 	(setVisible): Likewise.
+ 	* javax/swing/JWindow.java
+ 	(JWindow): call accessible constructor.
+ 	* javax/swing/RepaintManager.java
+ 	(paintDirtyRegions): Use public methods to obtain iterator.
+ 
+ 2004-05-25  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(remove): Set component's parent to null only after we removed the
+ 	component from its parent's layout manager.
+ 
+ 2004-05-25  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(GtkComponentPeer): Set bounds regardless of whether awtComponent
+ 	is valid.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java
+ 	(getSize): Change native method declaration.
+ 	(minimumSize): Pass visible row count into getSize().
+ 	(preferredSize): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize): Use scroll window's
+ 	natural size. Use visible row count to determine the final height
+ 	value to return.
+ 
+ 2004-05-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(setClip): Minor correction to order of operations.
+ 
+ 	* javax/swing/JScrollPane.java: Extend sketchy implementation.
+ 	* javax/swing/ScrollPaneLayout.java: Likewise.
+ 	* javax/swing/JViewPort.java: Likewise.
+ 	* javax/swing/ViewportLayout.java: Likewise.
+ 
+ 	* javax/swing/JComponent.java: Rewrite.
+ 	* javax/swing/RepaintManager.java: Likewise.
+ 
+ 	* javax/swing/JLayeredPane.java: Change validate() to revalidate().
+ 	* javax/swing/JList.java
+ 	(setSelectedIndices):
+ 	(getSelectedIndices):
+ 	(getSelectedValues): New functions.
+ 	(getPreferredScrollableViewportSize): Return preferred size.
+ 	(getScrollableUnitIncrement):
+ 	(getScrollableBlockIncrement): Initial implementations.
+ 	* javax/swing/JRootPane.java: Clean up slightly.
+ 	(getUI):
+ 	(setUI):
+ 	(updateUI):
+ 	(getUIClassID):
+ 	(isValidateRoot): Add overrides from JComponent.
+ 	* javax/swing/JScrollBar.java: Set default orientation to VERTICAL.
+ 	* javax/swing/UIManager.java (getDimension): Return the dimension.
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java: Set component opaque.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java:
+ 	Likewise, and set background.
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	Likewise, and improve a bit.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	Likewise, and adjust calculations.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java:
+ 	Likewise, and improve a bit.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(Button.margin): Shrink.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
+ 	Hack to set horizontal always, workaround pango.
+ 
+ 	* jni/gtk-peer/gtkcairopeer.h: Change to match pattern API.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
+ 	Synchronize more often, check cairo status after ops,
+ 	handle changes to cairo pattern API, check for disposal.
+ 
+ 2004-05-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(BasicMenuItemUI): Create propertyChangeListener.
+ 	(getPath):Implemented.
+ 	(installListeners): Add propertyChangeListener to menuItem.
+ 	(uninstallListeners): Remove propertyChangeListener from menuItem.
+ 	(update): Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuUI.MouseInputHandler:
+ 	(mouseEntered): Take insets of popup menu into account when
+ 	calculating position of popup menu.
+ 
+ 2004-05-18  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JMenuBar.java:
+ 	Started implementation.
+ 	* javax/swing/JPopupMenu.java:
+ 	(setVisible): Fixed location of lightweight/mediumweight
+ 	popup menu.
+ 	(show): Fixed location of PopupMenu.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	New file. UI Delegate for JMenuBar.
+ 	* javax/swing/plaf/basic/BasicMenuUI.MouseInputHandler:
+ 	(mouseEntered): Corrected position of the submenu.
+ 
+ 2004-05-18  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Remove calls
+ 	to _gtk_accel_group_attach.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
+ 	Likewise.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Give gtkSetFont
+ 	package access.  Don't override setFont.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Give
+ 	gtkWidgetRequestFocus package access.
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java: Don't override
+ 	setFont.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java: Override gtkSetFont.
+ 	Give gtkWidgetRequestFocus package access.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Give
+ 	gtkWidgetRequestFocus package access.  Don't override setFont.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Don't override
+ 	setFont.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(gtkSetLabel): Move call to gtk_bin_get_child into GDK critical
+ 	region.
+ 	(gtkSetFont): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
+ 	Implement.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(gtkSetFont): Whitespace fix.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetSetUsize): Remove method.
+ 
+ 2004-05-18  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/image/MemoryImageSource.java
+ 	(newPixels(int,int,int,int,boolean)): Set only the specified
+ 	rectangle of pixels.
+ 	(newPixels(byte[],ColorModel,int,int)): Implement.
+ 	(newPixels(int[],ColorModel,int,int)): Implement.
+ 
+ 2004-05-18  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JMenu.java: Started
+ 	implementation.
+ 	* javax/swing/JPopupMenu.java:
+ 	(insert): If specified index is -1, then
+ 	add component at the end.
+ 	(isPopupTrigger): Reimplemented.
+ 	(JPopupMenu.LightWeightPopup): setBounds
+ 	of the lightWeightPopup before adding it
+ 	to the layeredPane.
+ 	(javax/swing/plaf/basic/BasicIconFactory.java):
+ 	(getMenuArrowIcon): Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(getPreferredSize): Add size of the arrow icon
+ 	if this menu item is instance of JMenu.
+ 	(paintMenuItem): Paint arrow icon if this
+ 	menu item is a submenu.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	New File. UI Delegate for JMenu.
+ 
+ 2004-05-17  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (postKeyEvent):
+ 	Post KEY_TYPED events.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(generates_key_typed_event): Remove function.
+ 
+ 2004-05-17  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JRootPane.java
+ 	(JRootPane.RootLayout): Reimplemented to
+ 	set bounds of contentPane and menuBar.
+ 	(setJMenuBar): Add menu bar to the layered pane.
+ 	(createLayeredPane): Set layout of layeredPane
+ 	to null.
+ 	* javax/swing/JLayeredPane.java:
+ 	(addImpl): Calculate index of the component in the
+ 	layeredPane according to the specified position within
+ 	the layer.
+ 
+ 2004-05-17  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(setPixels): Change color model to the default model after
+ 	converting pixels.
+ 	* java/awt/image/MemoryImageSource.java
+ 	(newPixels): Set only the specified rectangle of pixels.
+ 
+ 2004-05-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* libgcj.spec.in (lib): Add -l-java-awt -l-java-applet
+ 	-l-java-beans -l-javax-accessibility -l-javax-swing.
+ 
+ 	* java/awt/AWTEvent.java (toString): Print source's name rather
+ 	than the source itself.
+ 
+ 2004-05-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (loadSystemColors): Make
+ 	native.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(gdk_color_to_java_color): New function.
+ 	* jni/gtk-peer/gtkpeer.h: Add SystemColor defines.
+ 
+ 2004-05-12  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/image/RGBImageFilter.java:
+ 	Initialize origmodel as null.
+ 	(makeColor): Fix pixel component order.
+ 	(filterRGBPixels): Fix pixel iteration.
+ 	(setPixels): Add extra checks for index color model. Convert pixels
+ 	to default color model if necessary.
+ 	(convertColorModelToDefault): New override method for byte pixels.
+ 	(convertColorModelToDefault): For int pixels, fix pixel iteration.
+ 	(makeColorbyDefaultCM): New override method for byte pixels.
+ 	(makeColorbyDefaultCM): For int pixel, add color model as argument.
+ 	(makeColor): Fix pixel component order.
+ 
+ 2004-05-11  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/Box.java:
+ 	Comment out more parts of Box.Filler.
+ 
+ 2004-05-11  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/Box.java:
+ 	Remove reference to AccessibleAWTComponent so
+ 	it compiles again.
+ 
+ 2004-05-10  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Update
+ 	implementation of list peer to use GtkTreeView instead of
+ 	deprecated GtkCList.
+ 
+ 2004-05-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(gtkWidgetDispatchKeyEvent): Remove keyChar parameter.
+ 	(handleEvent): Remove keyChar argument to
+ 	gtkWidgetDispatchKeyEvent calls.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Fix
+ 	compiler warnings.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
+ 	Likewise.
+ 
+ 2004-05-06  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(gtkWidgetRequestFocus): Mark protected.
+ 	(GtkComponentPeer): Only set the peer's bounds if its component
+ 	is valid.
+ 	* java/awt/Component.java (static): Set the default keyboard
+ 	focus manager.
+ 	(requestFocus(), requestFocus(boolean), requestFocusInWindow(),
+ 	requestFocusInWindow(temporary)): Don't request focus if the
+ 	component is not showing.  Get tree lock before traversing
+ 	component hierarchy.
+ 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
+ 	Only set the global focus owner if it is not a Window.
+ 	(processKeyEvent): Consume keystrokes associated with the focus
+ 	traversal keystroke.
+ 	(focusPreviousComponent, focusNextComponent, upFocusCycle,
+ 	downFocusCycle): Call requestFocusInWindow instead of
+ 	requestFocus.
+ 	* java/awt/EventDispatchThread.java (run): Move setting of
+ 	default keyboard focus manager to Component.java.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(awt_keycode_to_keysym): New function.
+ 	(gtkWidgetDispatchKeyEvent): Finish implementation.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Add FIXME comment.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(gtkWidgetRequestFocus): New method.
+ 	* java/awt/TextArea.java (TextArea): Set focus traversal keys to
+ 	disable Tab and Shift-Tab keystrokes.
+ 	(addNotify, appendText, insertText, replaceText): Simplify peer
+ 	retrieval code.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(connectSignals): Remove connections to "commit" signals.
+ 	Remove C++-style comments.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(handleEvent): Activate GTK button when the space bar key is
+ 	pressed.
+ 	(gtkActivate): New method.
+ 
+ 2004-05-06  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/image/CropImageFilter.java
+ 	(setPixels): Implement for byte array pixels.
+ 	* java/awt/image/ReplicateScaleFilter.java
+ 	(setPixels): Implement for byte array pixels.
+ 	(replicatePixels): Overload for byte array pixels.
+ 
+ 2004-05-06  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/Box.java:
+ 	(getAccessibleContext): Return an instance of the
+ 	correct class.
+ 
+ 2004-05-05  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(drawImage): When component is null, use SystemColor.window as
+ 	the default bgcolor.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java
+ 	(setPixels): We can avoid iterating through the pixel rows only
+ 	when height is 1.
+ 	* java/awt/Image.java
+ 	(getScaledInstance): Partially implement.
+ 	* java/awt/image/CropImageFilter.java
+ 	(setProperties): Fix "filter" property.
+ 	(setPixels): Implement.
+ 	* java/awt/image/ReplicateScaleFilter.java
+ 	(setDimensions): Use scaled dimensions.
+ 	(setPixels): Implement.
+ 	(replicatePixels): New method.
+ 
+ 2004-05-05  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(convertPixels): If either pixels or model is null, return null.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkImagePainter_drawPixels): If jpixels
+ 	is null, do nothing and return.
+ 
+ 2004-05-03  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java:
+ 	(getGraphics): Like GtkFramePeer, the Graphics
+ 	object needs to be translate to account for
+ 	window decorations.
+ 	(postMouseEvent): New method. Account for
+ 	translation.
+ 	(postExposeEvent): ditto.
+ 	* javax/swing/Box.java: Stubbed.
+ 	* javax/swing/JDialog.java: Ran through jalopy
+ 	to fix indentation.
+ 	(JDialog): Call SwingUtilities' getOwnerFrame
+ 	for null owners.
+ 	(setLayout): Check isRootPaneCheckingEnabled
+ 	* javax/swing/JOptionPane.java: Re-implemented.
+ 	* javax/swing/SwingUtilities.java:
+ 	(getOwnerFrame): Static method to grab a default
+ 	owner frame for Dialogs that don't specify owners.
+ 	* javax/swing/event/SwingPropertyChangeSupport.java:
+ 	(firePropertyChange): Fix early exit condition.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java:
+ 	(paint): Avoid painting text if it is null
+ 	or empty.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	Implement.
+ 
+ 2004-05-03  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JPopupMenu.java:
+ 	Started implementation.
+ 	* javax/swing/JWindow.java
+ 	(JWindow): call super() if parent for window
+ 	is not specified.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	New File. UI Delegate for JPopupMenu.
+ 
+ 2004-04-30  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JApplet.java: Indicated that JApplet
+ 	implements RootPaneContainer and made method of this
+ 	interface public.
+ 	* javax/swing/JFrame.java: Ditto.
+ 	* javax/swing/JWindow.java: Ditto.
+ 
+ 2004-04-29  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(nativeSetBounds): Call gdk_window_move in addition to
+ 	gtk_window_move.
+ 
+ 	* java/applet/Applet.java (preferredSize): Call parent's
+ 	preferredSize if the applet stub is null.
+ 	(minimumSize): Likewise for parent's minimumSize.
+ 
+ 2004-04-27  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenuItem.java
+ 	(createActionPropertyChangeListener): Implemented.
+ 	(processMouseEvent): Ditto.
+ 	(fireMenuDragMouseEntered): Ditto.
+ 	(fireMenuDragMouseExited): Ditto.
+ 	(fireMenuDragMouseDragged): Ditto.
+ 	(fireMenuDragMouseReleased): Ditto.
+ 	(menuSelectionChanged): Ditto.
+ 	(getSubElements): Ditto.
+ 	(getComponent): Ditto.
+ 	(addMenuDragMouseListener): Ditto.
+ 	(removeMenuDragMouseListener):Ditto.
+ 	(addMenuKeyListener): Ditto.
+ 	(removeMenuKeyListener): Ditto.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(doClick): Imlemented.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.MouseInputHandler:
+ 	Don't handle mouse events here. Pass them to
+ 	MenuSelectionManager.
+ 
+ 2004-04-26  Olga Rodimina  <rodimina@redhat.com>
+ 	Used correct version of jalopy configuration
+ 	file to fix style in the files below.
+ 
+ 2004-04-26  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java:
+ 	Fixed style and removed unnecessary comments.
+ 	* javax/swing/JMenuItem.java: Ditto.
+ 	* javax/swing/JRadioButtonMenuItem.java: Ditto.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java: Ditto.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Ditto.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Ditto.
+ 
+ 2004-04-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu_java_awt_peer_gtk_GtkWindowPeer.c: Change FIXME comment to
+ 	C-style.
+ 
+ 	* gnu_java_awt_peer_gtk_GtkWindowPeer.c: Add FIXME comment.
+ 
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java
+ 	(getComponentAfter): Start from current component and work up
+ 	the component hierarchy until an acceptable component is found.
+ 	Synchronize on tree lock.
+ 	(getComponentBefore): Likewise.
+ 
+ 2004-04-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Remove
+ 	focus-related debugging messages.
+ 	* java/awt/DefaultKeyboardFocusManager.java: Likewise.
+ 	* java/awt/EventDispatchThread.java: Likewise.
+ 	* java/awt/KeyboardFocusManager.java: Likewise.
+ 	* java/awt/Window.java: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Change
+ 	new C++-style comments to C-style comments.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(handleEvent): Dispatch key press and key release events to
+ 	backing widget.
+ 	(requestFocus): Post a FOCUS_GAINED event to the event queue.
+ 	(gtkWidgetRequestFocus): New method.
+ 	(gtkWidgetDispatchKeyEvent): Likewise.
+ 	* java/awt/Component.java (requestFocus, requestFocus(boolean),
+ 	requestFocusInWindow, requestFocusInWindow(boolean),
+ 	getFocusCycleRootAncestor, nextFocus, transferFocus,
+ 	transferFocusBackward, transferFocusUpCycle, hasFocus,
+ 	isFocusOwner): Implement and document focus-handling methods.
+ 	(setFocusTraversalKeys): Inherit focus traversal keys when
+ 	keystrokes argument is null.  Fix focus-handling documentation
+ 	throughout class.
+ 	* java/awt/Container.java (setFocusTraversalKeys,
+ 	getFocusTraversalKeys, areFocusTraversalKeysSet,
+ 	isFocusCycleRoot, setFocusTraversalPolicy,
+ 	getFocusTraversalPolicy, isFocusTraversalPolicySet,
+ 	setFocusCycleRoot, isFocusCycleRoot, transferFocusDownCycle):
+ 	Implement and document focus-handling methods.
+ 	(transferFocusBackward): Remove method.
+ 	(readObject, writeObject): Implement and document serialization
+ 	methods.
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java: Implement
+ 	and document.
+ 	* java/awt/DefaultFocusTraversalPolicy.java: Implement and
+ 	document.
+ 	* java/awt/DefaultKeyboardFocusManager.java: Implement and
+ 	partially document.
+ 	* java/awt/EventDispatchThread.java (run): Set default keyboard
+ 	focus manager.  Attempt to dispatch each event to the keyboard
+ 	focus manager before normal dispatch.
+ 	* java/awt/KeyboardFocusManager.java: Implement and partially
+ 	document.
+ 	* java/awt/Window.java (Window): Set focusCycleRoot to true.
+ 	(show): Focus initial component when window is shown for the
+ 	first time.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Replace complex key press and key release
+ 	logic with simple callbacks into GtkComponentPeer.
+ 	* jni/gtk-peer/gtkpeer.h: Fix FOCUS_GAINED/FOCUS_LOST reversal.
+ 
+ 2004-04-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/MenuSelectionManager.java
+ 	(componentForPoint): Added new method.
+ 	(defaultManager): New Method. Implemented.
+ 	(getSelectedPath): Ditto.
+ 	(isComponentPartOfCurrentMenu): Ditto.
+ 	(processKeyEvent): Added new method.
+ 	(processMouseEvent): New Method. Implemented.
+ 	(setSelectedPath): Ditto.
+ 	(getPath): Ditto.
+ 
+ 2004-04-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java:
+ 	(remove): Set the component's parent to null.
+ 	(getComponentAt): Implement.
+ 	* javax/swing/JComponent.java:
+ 	(JComponent): Initialize defaultLocale
+ 	(getDefaultLocale): Implement.
+ 	(setDefaultLocale): ditto.
+ 	* javax/swing/JSlider.java:
+ 	(JSlider): Fix calculation of value.
+ 	* javax/swing/JSplitPane.java: Implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Change SplitPane's default divider size.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	(paint): Remove unused code.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
+ 	Added comments and ran through jalopy.
+ 	(setBasicSplitPaneUI): Get reference to hidden divider
+ 	and set up one touch buttons if necessary.
+ 	(setBorder): Fire propertyChangeEvent only if
+ 	borders are different.
+ 	(getPreferredSize): Defer to layout manager.
+ 	(propertyChange): Implement.
+ 	(oneTouchExpandableChanged): ditto.
+ 	(createLeftOneTouchButton): Use BasicArrowButton.
+ 	(createRightOneTouchButton): ditto.
+ 	(moveDividerTo): New method. Moves the divider
+ 	to a set location based on the last divider location.
+ 	(BasicSplitPaneDivider::MouseHandler): Implement.
+ 	(BasicSplitPaneDivider::OneTouchButton): Removed.
+ 	(BasicSplitPaneDivider::DragController): Implement.
+ 	(BasicSplitPaneDivider::VerticalDragController):
+ 	ditto.
+ 	(BasicSplitPaneDivider::DividerLayout): ditto.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	(calculateLayoutInfo): Don't show component if it's
+ 	null.
+ 	(paintTab): Fix title paint logic.
+ 
+ 2004-05-26  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	PR libgcj/8321
+ 	* java/util/SimpleTimeZone.java (serialVersionOnStream): Bump to 2.
+ 	(setStartRule,setEndRule): Don't take abs of day number.
+ 	(getOffset): Clarify docs.  Add argument checks.
+ 	(isBefore): Take abs of day number in DOW_LE_DOM_MODE.
+ 	(equals,hasSameRules,toString,readObject): Use startTimeMode and
+ 	endTimeMode.
+ 	* testsuite/libjava.mauve/xfails
+ 	(gnu.testlet.java.util.SimpleTimeZone.check12): XFAIL test 22.
+ 
+ 2004-05-21  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	Layout interfaces during preparation, not initialization.
+ 	* java/lang/natClass.cc (initializeClass): Move
+ 	_Jv_LayoutInterfaceMethods call...
+ 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): to here.
+ 
+ 2004-05-19  Anthony Green  <green@localhost.localdomain>
+ 
+ 	* Makefile.am (awt_java_source_files): Remove javax.rmi and
+ 	gnu.javax.rmi code.
+ 	* Makefile.in: Rebuilt.
+ 	* javax/rmi/ClassDesc.java, javax/rmi/StubDelegate.java,
+ 	javax/rmi/UtilDelegate.java, javax/rmi/Stub.java,
+ 	javax/rmi/Util.java, javax/rmi/ObjectImpl.java,
+ 	javax/rmi/SystemException.java, javax/rmi/ValueHandler.java,
+ 	javax/rmi/PortableRemoteObjectDelegate.java, javax/rmi/Tie.java,
+ 	gnu/javax/rmi/CORBA/DelegateFactory.java,
+ 	gnu/javax/rmi/CORBA/GetDelegateInstanceException.java,
+ 	gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/StubDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/UtilDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/ValueHandlerImpl.java,
+ 	gnu/javax/rmi/PortableServer.java: Remove files.
+ 
+ 2004-05-19  Anthony Green  <green@redhat.com>
+ 
+ 	* Makefile.am: Define JAVA_EXT_DIRS.
+ 	* Makefile.in: Rebuilt.
+ 	* java/lang/natRuntime.cc (insertSystemProperties): Set
+ 	java.ext.dirs property.
+ 
+ 2004-05-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/Writer.java (Writer(Object)): Check for null lock object.
+ 
+ 2004-05-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/cni.sgml: Removed, merged into gcj.texi.
+ 
+ 2004-05-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (ordinary_java_source_files): Add new javax.print
+ 	classes.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/DateTimeAtCompleted.java,
+ 	javax/print/attribute/standard/DateTimeAtCreation.java,
+ 	javax/print/attribute/standard/DateTimeAtProcessing.java,
+ 	javax/print/attribute/standard/DocumentName.java,
+ 	javax/print/attribute/standard/JobHoldUntil.java,
+ 	javax/print/attribute/standard/JobImpressionsCompleted.java,
+ 	javax/print/attribute/standard/JobMessageFromOperator.java,
+ 	javax/print/attribute/standard/JobName.java,
+ 	javax/print/attribute/standard/JobOriginatingUserName.java,
+ 	javax/print/attribute/standard/JobPriority.java,
+ 	javax/print/attribute/standard/JobPrioritySupported.java,
+ 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
+ 	javax/print/attribute/standard/OutputDeviceAssigned.java,
+ 	javax/print/attribute/standard/PrinterInfo.java,
+ 	javax/print/attribute/standard/PrinterLocation.java,
+ 	javax/print/attribute/standard/PrinterMakeAndModel.java,
+ 	javax/print/attribute/standard/PrinterMessageFromOperator.java,
+ 	javax/print/attribute/standard/PrinterName.java,
+ 	javax/print/attribute/standard/QueuedJobCount.java,
+ 	javax/print/attribute/standard/RequestingUserName.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/DocFlavor.java,
+ 	javax/print/attribute/standard/ColorSupported.java,
+ 	javax/print/attribute/standard/Compression.java,
+ 	javax/print/attribute/standard/CopiesSupported.java,
+ 	javax/print/attribute/standard/Fidelity.java,
+ 	javax/print/attribute/standard/Finishings.java,
+ 	javax/print/attribute/standard/JobImpressionsSupported.java,
+ 	javax/print/attribute/standard/JobKOctetsSupported.java,
+ 	javax/print/attribute/standard/JobMediaSheetsSupported.java,
+ 	javax/print/attribute/standard/JobSheets.java,
+ 	javax/print/attribute/standard/JobState.java,
+ 	javax/print/attribute/standard/JobStateReason.java,
+ 	javax/print/attribute/standard/JobStateReasons.java,
+ 	javax/print/attribute/standard/Media.java,
+ 	javax/print/attribute/standard/MediaSizeName.java,
+ 	javax/print/attribute/standard/MultipleDocumentHandling.java,
+ 	javax/print/attribute/standard/NumberUpSupported.java,
+ 	javax/print/attribute/standard/OrientationRequested.java,
+ 	javax/print/attribute/standard/PDLOverrideSupported.java,
+ 	javax/print/attribute/standard/PageRanges.java,
+ 	javax/print/attribute/standard/PresentationDirection.java,
+ 	javax/print/attribute/standard/PrintQuality.java,
+ 	javax/print/attribute/standard/PrinterIsAcceptingJobs.java,
+ 	javax/print/attribute/standard/PrinterMoreInfo.java,
+ 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.java,
+ 	javax/print/attribute/standard/PrinterResolution.java,
+ 	javax/print/attribute/standard/PrinterState.java,
+ 	javax/print/attribute/standard/PrinterStateReason.java,
+ 	javax/print/attribute/standard/PrinterStateReasons.java,
+ 	javax/print/attribute/standard/PrinterURI.java,
+ 	javax/print/attribute/standard/ReferenceUriSchemesSupported.java,
+ 	javax/print/attribute/standard/Severity.java,
+ 	javax/print/attribute/standard/SheetCollate.java,
+ 	javax/print/attribute/standard/Sides.java:
+ 	Added serialVersionUID and removed final keyword where it doenst
+ 	belong.
+ 
+ 2004-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/PrintServiceLookup.java: New file.
+ 
+ 2004-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/DocFlavor.java:
+ 	Implemented all flavor classes.
+ 
+ 2004-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/ColorSupported.java,
+ 	javax/print/attribute/standard/Compression.java,
+ 	javax/print/attribute/standard/CopiesSupported.java,
+ 	javax/print/attribute/standard/Fidelity.java,
+ 	javax/print/attribute/standard/Finishings.java,
+ 	javax/print/attribute/standard/JobImpressionsSupported.java,
+ 	javax/print/attribute/standard/JobKOctetsSupported.java,
+ 	javax/print/attribute/standard/JobMediaSheetsSupported.java,
+ 	javax/print/attribute/standard/JobSheets.java,
+ 	javax/print/attribute/standard/JobState.java,
+ 	javax/print/attribute/standard/JobStateReason.java,
+ 	javax/print/attribute/standard/JobStateReasons.java,
+ 	javax/print/attribute/standard/Media.java,
+ 	javax/print/attribute/standard/MediaSizeName.java,
+ 	javax/print/attribute/standard/MultipleDocumentHandling.java,
+ 	javax/print/attribute/standard/NumberUpSupported.java,
+ 	javax/print/attribute/standard/OrientationRequested.java,
+ 	javax/print/attribute/standard/PDLOverrideSupported.java,
+ 	javax/print/attribute/standard/PageRanges.java,
+ 	javax/print/attribute/standard/PresentationDirection.java,
+ 	javax/print/attribute/standard/PrintQuality.java,
+ 	javax/print/attribute/standard/PrinterIsAcceptingJobs.java,
+ 	javax/print/attribute/standard/PrinterMoreInfo.java,
+ 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.java,
+ 	javax/print/attribute/standard/PrinterResolution.java,
+ 	javax/print/attribute/standard/PrinterState.java,
+ 	javax/print/attribute/standard/PrinterStateReason.java,
+ 	javax/print/attribute/standard/PrinterStateReasons.java,
+ 	javax/print/attribute/standard/PrinterURI.java,
+ 	javax/print/attribute/standard/ReferenceUriSchemesSupported.java,
+ 	javax/print/attribute/standard/Severity.java,
+ 	javax/print/attribute/standard/SheetCollate.java,
+ 	javax/print/attribute/standard/Sides.java: New files.
+ 
+ 2004-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/Doc.java
+ 	(getPrintData): Throws IOException.
+ 	(getReaderForText): Likewise.
+ 	(getStreamForBytes): Likewise.
+ 	* javax/print/DocFlavor.java:
+ 	Fixed filename in copyright.
+ 	(serialVersionUID): New field.
+ 	* javax/print/ServiceUIFactory.java:
+ 	Made all constants final.
+ 	* javax/print/AttributeException.java
+ 	javax/print/MultiDoc.java
+ 	javax/print/MultiDocPrintJob.java
+ 	javax/print/MultiDocPrintService.java
+ 	javax/print/StreamPrintService.java
+ 	javax/print/URIException.java: New files.
+ 	* javax/print/Makefile.am
+ 	(EXTRA_DIST): Added all new files.
+ 
+ 2004-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/Copies.java,
+ 	javax/print/attribute/standard/DateTimeAtCompleted.java,
+ 	javax/print/attribute/standard/DateTimeAtCreation.java,
+ 	javax/print/attribute/standard/DateTimeAtProcessing.java,
+ 	javax/print/attribute/standard/DocumentName.java,
+ 	javax/print/attribute/standard/JobHoldUntil.java,
+ 	javax/print/attribute/standard/JobImpressions.java,
+ 	javax/print/attribute/standard/JobImpressionsCompleted.java,
+ 	javax/print/attribute/standard/JobKOctets.java,
+ 	javax/print/attribute/standard/JobKOctetsProcessed.java,
+ 	javax/print/attribute/standard/JobMediaSheets.java,
+ 	javax/print/attribute/standard/JobMediaSheetsCompleted.java,
+ 	javax/print/attribute/standard/JobMessageFromOperator.java,
+ 	javax/print/attribute/standard/JobName.java,
+ 	javax/print/attribute/standard/JobOriginatingUserName.java,
+ 	javax/print/attribute/standard/JobPriority.java,
+ 	javax/print/attribute/standard/JobPrioritySupported.java,
+ 	javax/print/attribute/standard/NumberOfDocuments.java,
+ 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
+ 	javax/print/attribute/standard/NumberUp.java,
+ 	javax/print/attribute/standard/OutputDeviceAssigned.java,
+ 	javax/print/attribute/standard/PagesPerMinute.java,
+ 	javax/print/attribute/standard/PagesPerMinuteColor.java:
+ 	Fixed @return tag all over.
+ 
+ 2004-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/AttributeSetUtilities.java
+ 	(verifyCategoryForValue): Fixed typo in javadoc.
+ 	* javax/print/attribute/HashAttributeSet.java
+ 	(containsKey): Fixed @return tag.
+ 	(comtainsValue): Likewise.
+ 	(equals): Likewise.
+ 	* javax/print/attribute/IntegerSyntax.java
+ 	(equals): Likewise.
+ 	* javax/print/attribute/ResolutionSyntax.java
+ 	(equals): Likewise.
+ 	(getCrossFeedResolution): Removed unused code.
+ 	(getFeedResolution): Likewise.
+ 	* javax/print/attribute/SetOfIntegerSyntax.java
+ 	(SetOfIntegerSyntax): Fixed HTML entities in javadoc.
+ 	(equals): Fixed @return tag.
+ 	* javax/print/attribute/TextSyntax.java
+ 	(TextSyntax): Take locale into account.
+ 	(hashCode): Better implementation.
+ 
+ 2004-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/CancelablePrintJob.java,
+ 	javax/print/Doc.java,
+ 	javax/print/DocFlavor.java,
+ 	javax/print/DocPrintJob.java,
+ 	javax/print/FlavorException.java,
+ 	javax/print/PrintException.java,
+ 	javax/print/PrintService.java,
+ 	javax/print/ServiceUIFactory.java: New files.
+ 
+ 2004-05-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/regexp/CharIndexedReader.java: Removed.
+ 	* gnu/regexp/REFilterReader.java: Likewise.
+ 	* gnu/regexp/RETokenLookAhead.java: Likewise.
+ 	* Makefile.am (ordinary_java_source_files): Remove above classes.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-05-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/awt/xlib/XGraphics.java (drawImage): Use `XOffScreenImage',
+ 	not `XGraphicsConfiguration.XOffScreenImage'.
+ 
+ 2004-05-14  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/awt/xlib/XCanvasPeer.java (setVisible): Implement unmap.
+ 
+ 2004-05-14  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* include/jni.h (_Jv_func): Removed.
+ 	(struct JNINativeInterface): Use `void *' for reserved slots.
+ 	(struct JNIInvokeInterface): Likewise.
+ 
+ 2004-05-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/natPlainSocketImplPosix.cc
+ 	(read): Fixed typo in expression.
+ 
+ 2004-05-10  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* testsuite/lib/libjava.exp (libjava_invoke): Add new argument
+ 	ld_library_additions. Adjust all calls to libjava_invoke to match
+ 	the new argument.
+ 
+ 	* testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Pass stdc++
+ 	path to cxxflagslist.
+ 	Pass path of libstdc++ to libjava_invoke.
+ 
+ 	* testsuite/libjava.jar/jar.exp (gcj_jar_inerpret): Adjust
+ 	libjava_invoke arguments.
+ 
+ 2004-05-10  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* testsuite/libjava.jacks/jacks.xfail: Update to reflect the current
+ 	reality.
+ 
+ 2004-05-07  Ranjit Mathew  <rmathew@gmail.com>
+ 
+ 	* testsuite/libjava.jni/jni.exp (gcj_jni_test_one): Don't link the
+ 	main binary against the JNI shared library.
+ 
+ 2004-05-07  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/util/SimpleTimeZone.java (startTimeMode, endTimeMode,
+ 	WALL_TIME, STANDARD_TIME, UTC_TIME): New members.
+ 	(SimpleTimeZone): Tweak docs.  Add new variation.
+ 	(setStartRule,setEndRule): Add new variations.  Use
+ 	startTimeMode and endTimeMode.
+ 
+ 2004-05-07  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/util/Calendar.java (getActualMinimum,
+ 	getActualMaximum):  Remove abstract.  Implement.
+ 
+ 2004-05-06  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	Run the jni tests using the interpreter.
+ 	* testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Append
+ 	options_cxx to shared lib compile command.
+ 	(gcj_jni_test_one): Pass cxxflags to gcj_jni_compile_c_to_so, so
+ 	they are used to link the shared lib, not the main binary.
+ 	Use libjava_invoke to run gij.
+ 
+ 2004-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/logging/Level.java
+ 	(parse): Use == instead of String.equals().
+ 
+ 2004-05-06  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* defineclass.cc (_Jv_ClassReader::prepare_pool_entry): Use
+ 	verify_field_signature and verify_method_signature, not
+ 	_Jv_VerifyFieldSignature and _Jv_VerifyMethodSigntature.
+ 	(_Jv_ClassReader::handleField): Likewise.
+ 	(_Jv_ClassReader::handleMethod): Likewise.
+ 
+ 2004-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/TableColumn.java:
+ 	Reformated.
+ 
+ 2004-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/ImageReaderWriterSpi.java
+ 	(ImageReaderWriterSpi): Made it public.
+ 	* javax/imageio/stream/ImageInputStream.java:
+ 	Clean up imports.
+ 
+ 2004-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Removed empty line.
+ 
+ 2004-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c:
+ 	New files.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c:
+ 	Include gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c:
+ 	Moved GtkCheckboxGroupPeer_dispose and GtkCheckboxGroupPeer_remove to
+ 	their own source file.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Moved GtkGenericPeer_dispose and GtkComponentPeer_requestFocus to
+ 	their own source file. Removed GtkComponentPeer_gtkWidgetSetUsize.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(create): Define variable on top of function.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ 	(menu_pos): Prototyped.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(setTitle): Removed.
+ 	* jni/gtk-peer/gthread-jni.c
+ 	(gdk_threads_wake): Removed.
+ 	* Makefile.am (gtk_c_source_files): Added new files
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c and
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-05-05  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* testsuite/libjava.jni/pr11951.java: Add missing System.loadLibrary()
+ 	call.
+ 
+ 2004-05-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/AbstractButton.java: Replace special HTML entities with
+ 	ASCII equivalent.
+ 	* javax/swing/DefaultBoundedRangeModel.java: Likewise.
+ 	* javax/swing/DefaultButtonModel.java: Likewise.
+ 	* javax/swing/DefaultListModel.java: Likewise.
+ 	* javax/swing/JList.java: Likewise.
+ 	* javax/swing/JSlider.java: Likewise.
+ 	* javax/swing/ListModel.java: Likewise.
+ 	* javax/swing/Popup.java: Likewise.
+ 	* javax/swing/SwingUtilities.java: Likewise.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java,
+ 	javax/swing/ActionMap.java,
+ 	javax/swing/DefaultButtonModel.java,
+ 	javax/swing/DefaultListModel.java,
+ 	javax/swing/ImageIcon.java,
+ 	javax/swing/JComboBox.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JFrame.java,
+ 	javax/swing/JInternalFrame.java,
+ 	javax/swing/JMenuBar.java,
+ 	javax/swing/JMenuItem.java,
+ 	javax/swing/JOptionPane.java,
+ 	javax/swing/JProgressBar.java,
+ 	javax/swing/JRootPane.java,
+ 	javax/swing/JScrollBar.java,
+ 	javax/swing/JScrollPane.java,
+ 	javax/swing/JSeparator.java,
+ 	javax/swing/JSlider.java,
+ 	javax/swing/JTabbedPane.java,
+ 	javax/swing/JTable.java,
+ 	javax/swing/JTextField.java,
+ 	javax/swing/JToolBar.java,
+ 	javax/swing/JToolTip.java,
+ 	javax/swing/JTree.java,
+ 	javax/swing/JViewport.java,
+ 	javax/swing/JWindow.java,
+ 	javax/swing/KeyStroke.java,
+ 	javax/swing/LookAndFeel.java,
+ 	javax/swing/SwingUtilities.java,
+ 	javax/swing/Timer.java,
+ 	javax/swing/ToolTipManager.java,
+ 	javax/swing/UIDefaults.java,
+ 	javax/swing/border/TitledBorder.java,
+ 	javax/swing/filechooser/FileSystemView.java,
+ 	javax/swing/plaf/basic/BasicButtonListener.java,
+ 	javax/swing/plaf/basic/BasicButtonUI.java,
+ 	javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicGraphicsUtils.java,
+ 	javax/swing/plaf/basic/BasicLabelUI.java,
+ 	javax/swing/plaf/basic/BasicMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicRootPaneUI.java,
+ 	javax/swing/plaf/basic/BasicScrollBarUI.java,
+ 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
+ 	javax/swing/plaf/basic/BasicSliderUI.java,
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
+ 	javax/swing/table/JTableHeader.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/StyledEditorKit.java,
+ 	javax/swing/tree/DefaultTreeCellEditor.java:
+ 	Cleaned up imports.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/prefs/AbstractPreferences.java
+ 	(AbstractPreferences): Added parenthesis for clarity.
+ 	Closes classpath bug #7940.
+ 
+ 2004-05-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/CompoundName.java (endsWith): Look at correct
+ 	element of source name.
+ 
+ 2004-05-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by f.haeglsperger@gmx.de [classpath patch #2485]
+ 	* java/util/HashMap.java (rehash): Add entry at start of bucket.
+ 
+ 2004-05-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/BufferedReader.java (skip): Removed unused
+ 	variable.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/FileDialog.java: Import java.io.Serializable explicitly.
+ 
+ 2004-05-05  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/text/AttributedString.java,
+ 	java/text/AttributedStringIterator.java,
+ 	java/text/Collator.java,
+ 	java/text/DecimalFormatSymbols.java,
+ 	java/text/NumberFormat.java,
+ 	java/text/RuleBasedCollator.java:
+ 	Cleaned up imports.
+ 
+ 2004-05-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/Format.java: Cleaned up imports.
+ 	* java/text/DecimalFormat.java: Cleaned up imports.
+ 	* java/security/SecureRandom.java: Cleaned up imports.
+ 	(SecureRandom): Removed unused variable.
+ 	* java/security/UnresolvedPermission.java: Cleaned up imports.
+ 	* java/util/Date.java (parse): Removed unused variable.
+ 	* java/util/ResourceBundle.java: Cleaned up imports.
+ 	(getBundle): Removed unused variable.
+ 	(tryBundle): Likewise.
+ 	* java/util/regex/Pattern.java (Pattern): Removed unused constructor.
+ 
+ 2004-05-05  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/SimpleDateFormat.java:
+ 	(formatWithAttribute): New method. It implements
+ 	the formatting process with attributes.
+ 	(format): Use formatWithAttribute.
+ 	(formatToCharacterIterator): New method. Use
+ 	formatWithAttribute.
+ 
+ 2004-05-05  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/MessageFormat.java:
+ 	(class Field): New class.
+ 	(formatToCharacterIterator): New method.
+ 	(format): Use formatInternal now.
+ 	(formatInternal): New method. String formatter should
+ 	be done here (with attributes). Attributes merging supported.
+ 	(parse): More documentation.
+ 	(getFormatsByArgumentIndex): New method.
+ 	(setFormatByArgumentIndex): New method.
+ 	(setFormatsByArgumentIndex): New method.
+ 
+ 2004-05-05  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(MAXIMUM_INTEGER_DIGITS): New constant to keep the numeric value 309.
+ 	(applyPatternWithSymbols): Use MAXIMUM_INTEGER_DIGITS.
+ 	(parse): Fixed handling of exponentiation notation and grouping.
+ 
+ 2004-05-05  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(scanFix): Build attribute array. Fixed error reporting.
+ 	(applyPatternWithSymbols): Store attributes for the prefix and
+ 	suffix.
+ 	(formatInternal): New method. Changed the way the string is
+ 	computed. Implemented attributes. Cleant up rounding in
+ 	exponential notation.
+ 	(format): Use formatInternal.
+ 	(formatToCharacterIterator): New method.
+ 	(exponentRound, negativePrefixRanges, positivePrefixRanges,
+ 	negativePrefixAttrs, positivePrefixAttrs, negativeSuffixRanges,
+ 	positiveSuffixRanges, negativeSuffixAttrs, positiveSuffixAttrs):
+ 	New fields.
+ 
+ 2004-05-04  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/security/interfaces/DSAKeyPairGenerator.java,
+ 	java/security/interfaces/DSAPrivateKey.java,
+ 	java/security/interfaces/DSAPublicKey.java,
+ 	java/security/interfaces/RSAPrivateKey.java,
+ 	java/security/interfaces/RSAPublicKey.java:
+ 	Cleaned up imports.
+ 
+ 2004-05-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/ShortBuffer.java:
+ 	(compareTo): Fixed bogus implementation in all buffer classes.
+ 
+ 2004-05-04  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/image/ColorModel.java (getRGBdefault): Default ColorModel has
+ 	32 bit pixels not 8 bit pixels.
+ 	(isCompatibleRaster): Added javadoc comment.
+ 
+ 2004-05-04  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/image/ComponentSampleModel.java (setDataSamples):Do not reset
+ 	scanline stride.
+ 
+ 2004-05-04  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/ColorPaintContext.java (<init>): Added ColorModel to signature.
+ 	(getColorModel): Return the actual color model.
+ 	(getRaster): Implemented.
+ 	(ColorRaster): New inner class.
+ 	* java/awt/SystemColor.java (createContext): Use ColorModel when creating
+ 	a PaintContext.
+ 	* java/awt/Color.java (<init>): Make exception more verbose.
+ 	(createContext): Use ColorModel when creating a PaintContext.
+ 
+ 2004-05-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/text/CharacterBreakIterator.java
+ 	(previous): Removed unused variable.
+ 
+ 2004-05-04  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* gnu/java/text/FormatBuffer.java,
+ 	gnu/java/text/AttributedFormatBuffer.java,
+ 	gnu/java/text/StringFormatBuffer.java: New classes to implement
+ 	attributed iterators in java.text.
+ 	* gnu/java/text/FormatCharacterIterator.java: Moved
+ 	from java/text as it is an internal class.
+ 	* java/text/FormatCharacterIterator.java: Removed.
+ 	* java/text/Format.java:
+ 	Import gnu.java.text.FormatCharacterIterator.
+ 	* Makefile.am (java_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 
+ 2004-05-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (finalize): New method.
+ 
+ 2004-05-03  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* Makefile.am (WARNINGS): Replace -W with the more speaking -Wextra.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2004-05-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/security/der/DERReader.java: Call static methods staticly.
+ 	* java/awt/TextComponent.java (select): Use selectionEnd parameter.
+ 	* java/net/URL.java
+ 	(set(String, String, int, String, String, String, String, String)):
+ 	Assign this.file to path or path + "?" + query.
+ 	* java/util/Arrays.java: Call static methods staticly.
+ 	* java/util/zip/ZipEntry.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java (setDirection): Assign
+ 	dir to this.direction.
+ 	* javax/swing/table/DefaultTableCellRenderer.java (noFocusBorder):
+ 	Assign static field only once.
+ 	(DefaultTableCellRenderer): Don't reassign noFocusBorder each time.
+ 
+ 2004-05-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (minimumSize): Removed
+ 	unused variables hScrollbarHeight and vScrollbarWidth.
+ 	(preferredSize): Likewise.
+ 	* gnu/java/security/provider/DSAParameters.java (engineToString):
+ 	Removed unused call to System.getProperty("line.seperator");
+ 	* java/security/Security.java (loadProviders): Return result.
+ 
+ 2004-05-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLStreamHandler.java (toExternalForm): Removed
+ 	unused variables.
+ 	unused constructor.
+ 	* java/math/BigDecimal.java (divide): Removed unused variable.
+ 	* java/lang/Throwable.java: Cleaned up imports.
+ 	* java/lang/ClassLoader.java: Cleaned up imports.
+ 	* java/io/FilePermission.java (implies): Removed unused
+ 	variable.
+ 	* java/awt/TextComponent.java: Removed unused import.
+ 	* gnu/java/util/prefs/NodeReader.java: Cleaned up imports.
+ 	* gnu/java/util/DoubleEnumeration.java: Removed unused import.
+ 	* gnu/java/text/WordBreakIterator.java: Removed unused import.
+ 	* gnu/java/text/SentenceBreakIterator.java: Removed unused
+ 	import.
+ 	* gnu/java/text/LineBreakIterator.java: Removed unused import.
+ 	* gnu/java/text/CharacterBreakIterator.java: Removed
+ 	unused import.
+ 	* gnu/java/security/provider/DSAKeyPairGenerator.java:
+ 	Cleaned up imports.
+ 	* gnu/java/security/der/DERWriter.java: Cleaned up imports.
+ 	* gnu/java/nio/charset/UTF_16Decoder.java (put): Removed
+ 	unused method.
+ 	* gnu/java/nio/SocketChannelImpl.java: Cleaned up imports.
+ 	* gnu/java/nio/FileLockImpl.java: Cleaned up imports.
+ 	* gnu/java/io/Base64InputStream.java: Cleaned up imports.
+ 	* gnu/java/beans/info/ComponentBeanInfo.java: Cleaned up imports.
+ 	* gnu/classpath/ServiceFactory.java: Cleaned up imports.
+ 	(lookupProviders): Removed unused variable.
+ 	(loadNextServiceProvider): Likewise.
+ 	* gnu/java/beans/BeanInfoEmbryo.java: Cleaned up imports.
+ 
+ 2004-05-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	Fixes PR libgcj/14695:
+ 	* java/net/NetworkInterface.java
+ 	(getByName): Return null when no interface was found.
+ 
+ 2004-04-30  Ranjit Mathew  <rmathew@hotmail.com>
+ 	    Tom Tromey  <tromey@redhat.com>
+ 
+ 	* testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Use
+ 	additional option "-Wmissing-prototypes" for compiling C sources.
+ 	Print actual filename for pass/fail rather than $name.c.
+ 	* testsuite/libjava.jni/PR15133.java: New testcase file.
+ 	* testsuite/libjava.jni/PR15133.c: Likewise.
+ 	* testsuite/libjava.jni/PR15133.out: Likewise.
+ 
+ 2004-04-30  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* testsuite/libjava.lang/MathBuiltin.java: Add tests for acos, asin,
+ 	ceil and floor.
+ 
+ 2004-04-25  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* testsuite/libjava.jacks/jacks.exp (gcj_jacks_write): Explicitly
+ 	limit the maximum heap size to avoid unnecessary thrashing.
+ 
+ 2004-04-24  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/text/CollationElementIterator.java (reset): Reset
+ 	lookahead variables.
+ 
+ 2004-04-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni/classpath/jcl.c: Changed C++ comments into C comments.
+ 
+ 2004-04-23 Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/sql/DriverManager.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java
+ 	(hashcode): Don't initialize with default value explicitely.
+ 	(getContent): Removed redundant "final" keyword.
+ 	(openStream): Likewise.
+ 	(getURLStreamHandler): Fixed coding style.
+ 	* java/net/URLConnection.java
+ 	(defaultAllowUserInteraction): Don't initialize with default value
+ 	explicitely.
+ 	(connected): Likewise.
+ 	(doOutput): Likewise.
+ 	(ifModifiedSince): Likewise.
+ 	(dateformats_initialized): Likewise.
+ 	(setURLStreamHander): Use StreamTokenizer where it belongs to.
+ 
+ 2004-04-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java
+ 	(SET, CUR): Unused, removed.
+ 	(read): Implement here directly.
+ 	(implRead): Removed.
+ 	(write): Implement here directly.
+ 	(implWrite): Removed.
+ 
+ 2004-04-23  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/rmi/CORBA/PortableRemoteObjectDelegate.java,
+ 	javax/rmi/CORBA/Stub.java,
+ 	javax/rmi/CORBA/Util.java,
+ 	javax/rmi/CORBA/ValueHandler.java,
+ 	javax/rmi/CORBA/ValueHandler.java,
+ 	javax/rmi/PortableRemoteObject.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-23 Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/util/jar/JarFile.java,
+ 	java/util/jar/JarInputStream.java,
+ 	java/util/jar/JarOutputStream.java,
+ 	java/util/jar/Manifest.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-23 Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/util/ArrayList.java,
+ 	java/util/Calendar.java,
+ 	java/util/Currency.java,
+ 	java/util/HashMap.java,
+ 	java/util/HashSet.java,
+ 	java/util/Hashtable.java,
+ 	java/util/LinkedList.java,
+ 	java/util/Properties.java,
+ 	java/util/PropertyPermission.java,
+ 	java/util/TimeZone.java,
+ 	java/util/TreeMap.java,
+ 	java/util/TreeSet.java,
+ 	java/util/Vector.java,
+ 	java/util/WeakHashMap.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-23  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/util/logging/FileHandler.java,
+ 	java/util/logging/Formatter.java,
+ 	java/util/logging/Handler.java,
+ 	java/util/logging/Logger.java,
+ 	java/util/logging/SimpleFormatter.java,
+ 	java/util/logging/XMLFormatter.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (PEDANTIC_CFLAGS): New -ansi -pedantic -Wall
+ 	-Wno-long-long flags variable.
+ 	(gtk_c_files): Use PEDANTIC_CFLAGS.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-04-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Changed C++ comments into C comments.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c:
+ 	Likewise.
+ 
+ 2004-04-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
+ 	Merged copyright year with GNU classpath.
+ 
+ 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/security/auth/x500/X500Principal.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/swing/JSlider.java:
+ 	Fixed HTML tags in comments.
+ 
+ 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/accessibility/AccessibleText.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-22  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(parseURL): Convert the file path to using '/' instead of native
+ 	file separator.
+ 
+ 2004-04-22  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/net/URL.java
+ 	(userInfo): New field.
+ 	(URL): Set authority to the right value.
+ 	(setURL): Fixed authority and file initialization.
+ 	* java/net/URLStreamHandler.java
+ 	(parseURL): Take care of the query tag. Build authority.
+ 	(toExternalForm): Fixed URL building using authority.
+ 
+ 2004-04-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(impl): Made package-private.
+ 	* java/net/ServerSocket.java
+ 	(implAccept): Access Socket.impl field directly.
+ 
+ 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/util/prefs/Preferences.java,
+ 	java/util/prefs/InvalidPreferencesFormatException.java,
+ 	java/util/prefs/BackingStoreException.java,
+ 	java/util/prefs/AbstractPreferences.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/util/regex/Matcher.java,
+ 	java/util/regex/Pattern.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/charset/IllegalCharsetNameException.java
+ 	(charsetName): Made private.
+ 	(IllegalCharsetNameException): Added @param tag to javadoc.
+ 	(getCharsetName): Added @return tag to javadoc.
+ 	* java/nio/charset/MalformedInputException.java
+ 	(MalformedInputException): Added @param tag to javadoc.
+ 	(getInputLength): Revised method description, added @return tag.
+ 	(getMessage): Added @return tag.
+ 
+ 2004-04-22  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Font.java (deriveFont): Implement missing variants.
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java (deriveFont): Implement
+ 	missing variants.
+ 
+ 2004-04-21  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/lang/natClass.cc (_Jv_LayoutInterfaceMethods): New method.
+ 	Set method->index values for interface methods to their itable index.
+ 	(initializeClass): Call _Jv_LayoutInterfaceMethods.
+ 
+ 2004-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(shiftDown): Made static, give address as argument and
+ 	provide a convenience method that overwrites shiftDown in
+ 	ByteBufferImpl and calls the native shiftDown.
+ 	* java/nio/MappedByteBufferImpl.java
+ 	(): Use optimized method in DirectByteBufferImpl.
+ 	* java/nio/natDirectByteBufferImpl.cc
+ 	(shiftDown): Changed method signature. Removed usage of array_offset.
+ 
+ 2004-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/natPlainSocketImplPosix.cc
+ 	(SocketInputStream::read): Make sure returned data is a byte value.
+ 
+ 2004-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/classpath/ServiceFactory.java,
+ 	gnu/classpath/ServiceProviderLoadingAction.java,
+ 	javax/imageio/ImageReader.java,
+ 	javax/imageio/ImageTranscoder.java,
+ 	javax/imageio/ImageWriter.java,
+ 	javax/imageio/package.html,
+ 	javax/imageio/spi/IIOServiceProvider.java,
+ 	javax/imageio/spi/ImageInputStreamSpi.java,
+ 	javax/imageio/spi/ImageOutputStreamSpi.java,
+ 	javax/imageio/spi/ImageReaderWriterSpi.java,
+ 	javax/imageio/spi/ImageTranscoderSpi.java,
+ 	javax/imageio/spi/RegisterableService.java,
+ 	javax/imageio/spi/ServiceRegistry.java,
+ 	javax/imageio/spi/package.html,
+ 	javax/imageio/stream/IIOByteBuffer.java,
+ 	javax/imageio/stream/ImageInputStream.java,
+ 	javax/imageio/stream/ImageOutputStream.java,
+ 	javax/imageio/stream/package.html:
+ 	New files.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Added
+ 	gnu/classpath/ServiceFactory.java and
+ 	gnu/classpath/ServiceProviderLoadingAction.java.
+ 	(javax_source_files): Added
+ 	javax/imageio/ImageReader.java,
+ 	javax/imageio/ImageTranscoder.java,
+ 	javax/imageio/ImageWriter.java,
+ 	javax/imageio/spi/IIOServiceProvider.java,
+ 	javax/imageio/spi/ImageInputStreamSpi.java,
+ 	javax/imageio/spi/ImageOutputStreamSpi.java,
+ 	javax/imageio/spi/ImageReaderWriterSpi.java,
+ 	javax/imageio/spi/ImageTranscoderSpi.java,
+ 	javax/imageio/spi/RegisterableService.java,
+ 	javax/imageio/spi/ServiceRegistry.java,
+ 	javax/imageio/stream/IIOByteBuffer.java,
+ 	javax/imageio/stream/ImageInputStream.java and
+ 	javax/imageio/stream/ImageOutputStream.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Properties.java
+ 	(load): Fix wrongly merged fix.
+ 
+ 2004-04-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gthread-jni.c (maybe_rethrow): Explicitly
+ 	malloc and free buf.
+ 
+ 2004-04-21  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/naming/AuthenticationException.java,
+ 	javax/naming/AuthenticationNotSupportedException.java,
+ 	javax/naming/CannotProceedException.java,
+ 	javax/naming/CommunicationException.java,
+ 	javax/naming/CompoundName.java,
+ 	javax/naming/ConfigurationException.java,
+ 	javax/naming/ContextNotEmptyException.java,
+ 	javax/naming/InitialContext.java,
+ 	javax/naming/InsufficientResourcesException.java,
+ 	javax/naming/InterruptedNamingException.java,
+ 	javax/naming/LimitExceededException.java,
+ 	javax/naming/LinkException.java,
+ 	javax/naming/LinkLoopException.java,
+ 	javax/naming/LinkRef.java,
+ 	javax/naming/MalformedLinkException.java,
+ 	javax/naming/Name.java,
+ 	javax/naming/NameAlreadyBoundException.java,
+ 	javax/naming/NameNotFoundException.java,
+ 	javax/naming/NamingSecurityException.java,
+ 	javax/naming/NoInitialContextException.java,
+ 	javax/naming/NoPermissionException.java,
+ 	javax/naming/NotContextException.java,
+ 	javax/naming/PartialResultException.java,
+ 	javax/naming/ReferralException.java,
+ 	javax/naming/ServiceUnavailableException.java,
+ 	javax/naming/SizeLimitExceededException.java,
+ 	javax/naming/TimeLimitExceededException.java,
+ 	javax/naming/directory/Attribute.java,
+ 	javax/naming/directory/Attributes.java,
+ 	javax/naming/directory/SearchResult.java,
+ 	javax/naming/event/NamingExceptionEvent.java,
+ 	javax/naming/spi/ResolveResult.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c:
+ 	Changed C++ comments into C comments. Removed commented out code.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gthread-jni.c:
+ 	Likewise.
+ 
+ 2004-04-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/awt/JFrame.java: Implement WindowConstants. Remove final
+ 	static fields defined in interface.
+ 	* javax/awt/JDialog.java: Likewise.
+ 	(JDialog): Make constructors public.
+ 	(getDefaultCloseOperation): Make public.
+ 	(processWindowEvent): Call System.exit(0) when EXIT_ON_CLOSE set.
+ 	(setDefaultCloseOperation): Make public. Check argument. Add API doc.
+ 	* javax/swing/JViewport.java (JViewport): Make constructor public.
+ 
+ 2004-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Map.java
+ 	(Entry): Removed redundant "static" modifier.
+ 	* java/text/AttributedCharacterIterator.java:
+ 	Updated copyright year.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/directory/SearchControls.java:
+ 	Don't explicitely extend java.lang.Object.
+ 	* javax/naming/spi/DirStateFactory.java:
+ 	Merged copyright year with GNU classpath.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/Channels.java:
+ 	Merged coding style with GNU classpath.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java
+ 	Merged coding style from GNU classpath.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedWriter.java:
+ 	Reordered variables to be at top of the class.
+ 	(localFlush): Removed redundant final keyword.
+ 
+ 2004-04-20  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/event/MouseEvent.java (<init>): fixed field assignment
+ 
+ 2004-04-20  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/text/DecimalFormat.java (scanFix): Removed suffix check
+ 	for percent and permill check.
+ 
+ 2004-04-20  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/FieldPosition.java
+ 	(FieldPosition) Constructor now behaves as it should according
+ 	to the java documentation.
+ 
+ 2004-04-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Properties.java: Use the word umlaut, not &auml; in api
+ 	documentation.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java,
+ 	java/nio/channels/AlreadyConnectedException.java,
+ 	java/nio/channels/AsynchronousCloseException.java,
+ 	java/nio/channels/ByteChannel.java,
+ 	java/nio/channels/CancelledKeyException.java,
+ 	java/nio/channels/Channel.java,
+ 	java/nio/channels/Channels.java,
+ 	java/nio/channels/ClosedByInterruptException.java,
+ 	java/nio/channels/ClosedChannelException.java,
+ 	java/nio/channels/ClosedSelectorException.java,
+ 	java/nio/channels/ConnectionPendingException.java,
+ 	java/nio/channels/DatagramChannel.java,
+ 	java/nio/channels/FileChannel.java,
+ 	java/nio/channels/FileLock.java,
+ 	java/nio/channels/FileLockInterruptionException.java,
+ 	java/nio/channels/GatheringByteChannel.java,
+ 	java/nio/channels/IllegalBlockingModeException.java,
+ 	java/nio/channels/IllegalSelectorException.java,
+ 	java/nio/channels/InterruptibleChannel.java,
+ 	java/nio/channels/NoConnectionPendingException.java,
+ 	java/nio/channels/NonReadableChannelException.java,
+ 	java/nio/channels/NonWritableChannelException.java,
+ 	java/nio/channels/NotYetBoundException.java,
+ 	java/nio/channels/NotYetConnectedException.java,
+ 	java/nio/channels/OverlappingFileLockException.java,
+ 	java/nio/channels/Pipe.java,
+ 	java/nio/channels/ReadableByteChannel.java,
+ 	java/nio/channels/ScatteringByteChannel.java,
+ 	java/nio/channels/SelectableChannel.java,
+ 	java/nio/channels/SelectionKey.java,
+ 	java/nio/channels/Selector.java,
+ 	java/nio/channels/ServerSocketChannel.java,
+ 	java/nio/channels/SocketChannel.java,
+ 	java/nio/channels/UnresolvedAddressException.java,
+ 	java/nio/channels/UnsupportedAddressTypeException.java,
+ 	java/nio/channels/WritableByteChannel.java,
+ 	java/nio/channels/spi/AbstractInterruptibleChannel.java,
+ 	java/nio/channels/spi/AbstractSelectableChannel.java,
+ 	java/nio/channels/spi/AbstractSelectionKey.java,
+ 	java/nio/channels/spi/AbstractSelector.java,
+ 	java/nio/channels/spi/SelectorProvider.java,
+ 	java/nio/charset/spi/CharsetProvider.java:
+ 	Fixed javadocs and jalopied all over java.nio.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBufferImpl.java,
+ 	java/nio/CharBufferImpl.java,
+ 	java/nio/DirectByteBufferImpl.java,
+ 	java/nio/DoubleBufferImpl.java,
+ 	java/nio/DoubleViewBufferImpl.java,
+ 	java/nio/FloatBufferImpl.java,
+ 	java/nio/FloatViewBufferImpl.java,
+ 	java/nio/IntBufferImpl.java,
+ 	java/nio/IntViewBufferImpl.java,
+ 	java/nio/LongBufferImpl.java,
+ 	java/nio/LongViewBufferImpl.java,
+ 	java/nio/MappedByteBufferImpl.java,
+ 	java/nio/ShortBufferImpl.java,
+ 	java/nio/ShortViewBufferImpl.java:
+ 	Made sure all classes are final and removed final keyword from all
+ 	methods.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/MarshalledObject.java,
+ 	java/rmi/Naming.java,
+ 	java/rmi/RemoteException.java,
+ 	java/rmi/activation/ActivationException.java,
+ 	java/rmi/server/ServerCloneException.java,
+ 	java/security/AccessController.java,
+ 	java/security/AlgorithmParameterGenerator.java,
+ 	java/security/AlgorithmParameters.java,
+ 	java/security/CodeSource.java,
+ 	java/security/Identity.java,
+ 	java/security/IdentityScope.java,
+ 	java/security/KeyPairGenerator.java,
+ 	java/security/KeyStore.java,
+ 	java/security/Security.java,
+ 	java/security/Signature.java,
+ 	java/security/SignatureSpi.java,
+ 	java/security/SignedObject.java,
+ 	java/security/spec/DSAParameterSpec.java,
+ 	java/security/spec/DSAPrivateKeySpec.java,
+ 	java/security/spec/DSAPublicKeySpec.java,
+ 	java/sql/Array.java,
+ 	java/sql/DatabaseMetaData.java,
+ 	java/sql/ResultSet.java,
+ 	java/text/ChoiceFormat.java,
+ 	java/text/CollationElementIterator.java,
+ 	java/text/CollationKey.java,
+ 	java/text/Collator.java,
+ 	java/text/DateFormat.java,
+ 	java/text/DateFormatSymbols.java,
+ 	java/text/DecimalFormatSymbols.java,
+ 	java/text/Format.java,
+ 	java/text/ParsePosition.java,
+ 	java/text/RuleBasedCollator.java,
+ 	java/text/SimpleDateFormat.java,
+ 	java/text/StringCharacterIterator.java,
+ 	java/util/Collections.java,
+ 	java/util/PropertyResourceBundle.java,
+ 	java/util/ResourceBundle.java,
+ 	java/util/StringTokenizer.java,
+ 	java/util/jar/Attributes.java,
+ 	java/util/logging/ConsoleHandler.java,
+ 	java/util/logging/LogManager.java,
+ 	java/util/logging/MemoryHandler.java,
+ 	java/util/logging/SocketHandler.java,
+ 	javax/naming/NamingException.java:
+ 	Fixed javadoc, coding style and argument names all over.
+ 
+ 2004-04-20  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/FileDescriptor.java: (FileDescriptor) Added public
+ 	constructor. (valid) Added null check.
+ 
+ 2004-04-20  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	Reported by Nektarios Papadopoulos <npapadop@inaccessnetworks.com>
+ 	* java/io/FileOutputStream.java
+ 	(FileOutputStream) Reorganized constructors. Constructors now
+ 	check whether the given path is directory.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Authenticator.java,
+ 	java/net/BindException.java,
+ 	java/net/ConnectException.java,
+ 	java/net/ContentHandler.java,
+ 	java/net/ContentHandlerFactory.java,
+ 	java/net/DatagramPacket.java,
+ 	java/net/DatagramSocket.java,
+ 	java/net/DatagramSocketImpl.java,
+ 	java/net/DatagramSocketImplFactory.java,
+ 	java/net/FileNameMap.java,
+ 	java/net/HttpURLConnection.java,
+ 	java/net/Inet4Address.java,
+ 	java/net/Inet6Address.java,
+ 	java/net/InetAddress.java,
+ 	java/net/InetSocketAddress.java,
+ 	java/net/JarURLConnection.java,
+ 	java/net/MalformedURLException.java,
+ 	java/net/MulticastSocket.java,
+ 	java/net/NetPermission.java,
+ 	java/net/NetworkInterface.java,
+ 	java/net/NoRouteToHostException.java,
+ 	java/net/PasswordAuthentication.java,
+ 	java/net/PortUnreachableException.java,
+ 	java/net/ProtocolException.java,
+ 	java/net/ServerSocket.java,
+ 	java/net/Socket.java,
+ 	java/net/SocketAddress.java,
+ 	java/net/SocketException.java,
+ 	java/net/SocketImpl.java,
+ 	java/net/SocketImplFactory.java,
+ 	java/net/SocketOptions.java,
+ 	java/net/SocketPermission.java,
+ 	java/net/SocketTimeoutException.java,
+ 	java/net/URI.java,
+ 	java/net/URISyntaxException.java,
+ 	java/net/URL.java,
+ 	java/net/URLClassLoader.java,
+ 	java/net/URLConnection.java,
+ 	java/net/URLDecoder.java,
+ 	java/net/URLEncoder.java,
+ 	java/net/URLStreamHandler.java,
+ 	java/net/URLStreamHandlerFactory.java,
+ 	java/net/UnknownHostException.java,
+ 	java/net/UnknownServiceException.java:
+ 	Fixed javadocs, coding style and argument names all over.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Byte.java,
+ 	java/lang/CharSequence.java,
+ 	java/lang/ClassLoader.java,
+ 	java/lang/Compiler.java,
+ 	java/lang/Double.java,
+ 	java/lang/Float.java,
+ 	java/lang/Integer.java,
+ 	java/lang/Long.java,
+ 	java/lang/Math.java,
+ 	java/lang/Number.java,
+ 	java/lang/Package.java,
+ 	java/lang/Runtime.java,
+ 	java/lang/RuntimePermission.java,
+ 	java/lang/SecurityManager.java,
+ 	java/lang/Short.java,
+ 	java/lang/StringBuffer.java,
+ 	java/lang/System.java,
+ 	java/lang/ThreadGroup.java,
+ 	java/lang/Throwable.java,
+ 	java/lang/reflect/InvocationHandler.java,
+ 	java/lang/reflect/Proxy.java:
+ 	Fixed javadocs, coding style and argument names all over.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedWriter.java,
+ 	java/io/ByteArrayInputStream.java,
+ 	java/io/CharArrayWriter.java,
+ 	java/io/DataInput.java,
+ 	java/io/DataInputStream.java,
+ 	java/io/File.java,
+ 	java/io/FilterInputStream.java,
+ 	java/io/InputStream.java,
+ 	java/io/InputStreamReader.java,
+ 	java/io/ObjectInputStream.java,
+ 	java/io/ObjectStreamClass.java,
+ 	java/io/PipedInputStream.java,
+ 	java/io/PipedReader.java,
+ 	java/io/PushbackInputStream.java,
+ 	java/io/PushbackReader.java,
+ 	java/io/RandomAccessFile.java,
+ 	java/io/SerializablePermission.java,
+ 	java/io/StreamTokenizer.java,
+ 	java/io/StringWriter.java,
+ 	java/io/WriteAbortedException.java,
+ 	java/io/Writer.java:
+ 	Fixed javadocs all over, rename arguments to match javadocs,
+ 	fixed coding style.
+ 
+ 2004-04-20  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/FontMetrics.java:
+ 	(charsWidth): fixed accumulation of total_width
+ 	(getWidth): simple default implementation
+ 	* java/awt/Polygon.java (getBoundingBox): Use correct y-coordinate
+ 	in Rectangle constructor.
+ 	* java/awt/image/Raster.java (toString): Added method.
+ 	* java/awt/image/SampleModel.java (<init>): Added error cause
+ 	information to thrown exception.
+ 	* java/awt/image/SinglePixelPackedSampleModel.java (getDataElements):
+ 	New method.
+ 	(setDataElements): New method.
+ 	(setPixels): New method.
+ 	(toString): New method.
+ 
+ 2004-04-20  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/image/ComponentColorModel.java
+ 	(createCompatibleSampleModel): Return PixelInterleavedSampleModel
+ 	for TYPE_BYTE and TYPE_USHORT transferTypes, in order to pass the
+ 	Mauve tests on this method. Improved documentation.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JLayeredPane.java,
+ 	javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/ComponentUI.java,
+ 	javax/swing/undo/CompoundEdit.java,
+ 	javax/swing/undo/StateEdit.java:
+ 	Fixed HTML tags in javadocs all over.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/EnumSyntax.java
+ 	(getOffset): Made protected.
+ 	* javax/print/attribute/HashAttributeSet.java
+ 	(HashAttributeSet): Likewise.
+ 	* javax/print/attribute/ResolutionSyntax.java
+ 	(getFeedResolution): Fixed typo in exception name.
+ 	(getCrossFeedResolution): Likewise.
+ 	* javax/print/attribute/SetOfIntegerSyntax.java
+ 	(SetOfIntegerSyntax): Fixed HTML entities in javadoc.
+ 	* javax/print/attribute/TextSyntax.java
+ 	(TextSyntax): Handle locale correctly.
+ 	(hashCode): Calc better hashcode value.
+ 	(equals): Fixed @return tag.
+ 	(toString): New method.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java
+ 	(static): Removed, not needed anymore.
+ 	* gnu/java/nio/channels/FileChannelImpl.java
+ 	(FileChannelImpl): Made final.
+ 	(mode): Made private.
+ 	(READ, WRITE, APPEND): Made public.
+ 	(EXCL, SYNC, DSYNC): Likewise.
+ 	(static): Load native JNI library, when needed.
+ 	(length): Unused, removed.
+ 	(available): Made public.
+ 	(implPosition): Throws IOException.
+ 	(seek): Likewise.
+ 	(implTruncate): Likewise.
+ 	(unlock): Likewise.
+ 	(lock): Likewise.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/AWTPermission.java,
+ 	java/awt/Component.java,
+ 	java/awt/ComponentOrientation.java,,
+ 	java/awt/Dialog.java,
+ 	java/awt/FontMetrics.java,
+ 	java/awt/Graphics.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/beans/Introspector.java,
+ 	java/beans/PropertyEditor.java,
+ 	java/beans/PropertyEditorManager.java,
+ 	java/beans/beancontext/BeanContextServiceProvider.java:
+ 	Fixed HTML tags in javadocs all over.
+ 
+ 2004-04-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java: Use fallback when
+ 	MissingResourceException is thrown.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (getFontPeer): Don't return
+ 	null when a MissingResourceException is thrown. Should never happen.
+ 
+ 2004-04-20  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/image/DataBufferShort.java,
+ 	java/awt/image/DataBufferFloat.java,
+ 	java/awt/image/DataBufferDouble.java,
+ 	java/awt/image/PixelInterleavedSampleModel.java: New files.
+ 	* gnu/java/awt/Buffers.java (createBuffer, createBufferFromData,
+ 	getData): Added support	for TYPE_SHORT, TYPE_FLOAT and TYPE_DOUBLE.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am (java_source_files): Added
+ 	java/awt/image/DataBufferDouble.java,
+ 	java/awt/image/DataBufferFloat.java,
+ 	java/awt/image/DataBufferShort.java and
+ 	java/awt/image/PixelInterleavedSampleModel.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-04-19  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gcj/cni.h (JvAllocObject): Remove these obsolete,
+ 	undocumented CNI calls.
+ 	* include/java-interp.h (_Jv_InterpClass): No longer
+ 	extends java.lang.Class.
+ 	* java/lang/Class.h (Class): Add new field `aux_info'.
+ 	* boehm.cc (_Jv_MarkObj): Update java.lang.Class marking.
+ 	* defineclass.cc: Remove Class<->_Jv_InterpClass casts.
+ 	Use Class->aux_info instead.
+ 	* jni.cc (_Jv_JNI_AllocObject): Use _Jv_AllocObject.
+ 	* resolve.cc: Remove Class<->_Jv_InterpClass casts.
+ 	Use Class->aux_info instead.
+ 	* java/io/natObjectInputStream.cc (allocateObject): Use
+ 	_Jv_AllocObject.
+ 	* java/lang/natClass.cc (newInstance): Likewise.
+ 	* java/lang/natClassLoader.cc (_Jv_NewClass): Likewise.
+ 	* java/lang/natObject.cc (clone): Likewise.
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Likewise.
+ 	* java/lang/natVMClassLoader.cc (defineClass): Don't use
+ 	JvAllocObject. Allocate klass->aux_info here for interpreted
+ 	class.
+ 
+ 2004-04-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/JToggleButton.java (ToggleButtonModel):
+ 	Make public static inner class.
+ 	* javax/swing/JTabbedPane.java (setComponentAt):
+ 	Call Page.setComponent().
+ 	(SCROLL_TAB_LAYOUT): Make public, value is 1.
+ 	(WRAP_TAB_LAYOUT): Make public, value is 0.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java (ScrollingButton):
+ 	Make private static inner class.
+ 
+ 2004-04-16  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* interpret.cc (_Jv_InterpMethod::run): Update _Jv_AllocObject
+ 	arguments to match new signature. Remove FIXME comments.
+ 
+ 2004-04-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java (connectSignals):
+ 	Remove method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c: Remove
+ 	unused code.
+ 
+ 2004-04-02  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/ImageIcon.java:
+ 	(ImageIcon(file)): set description of the icon
+ 	to the file name
+ 	* javax/swing/JCheckBoxMenuItem.java:
+ 	Mostly Implemented. Work in progress.
+ 	* javax/swing/JRadioButtonMenuItem.java:
+ 	Reimplement constructors to use JToggleButtonModel.
+ 	* javax/swing/plaf/basic/BasicIconFactory.java:
+ 	(getCheckBoxMenuItemIcon): return check box
+ 	icon.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	paint menu item selected only when it is armed and
+ 	pressed.
+ 
+ 2004-04-02  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
+ 	(GtkMenuItemPeer): Only connect signals if this isn't a Menu peer.
+ 	* java/awt/Component.java
+ 	(add): Set the parent of the popup as this component.
+ 	* java/awt/PopupMenu.java
+ 	(addNotify): Create popup menu when peer is null.
+ 	(show): Call addNotify() if peer is null.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_show): Set the button
+ 	argument for gtk_menu_popup() as zero. This causes the popup menu to
+ 	respond to any mouse button.
+ 
+ 2004-03-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JRadioButtonMenuItem.java:
+ 	Implemented.
+ 	* javax/swing/plaf/basic/BasicIconFactory.java:
+ 	(getRadioButtonMenuItemIcon): Return
+ 	radio button icon.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(getPreferredSize): Add size of checkIcon if it
+ 	exists.
+ 	(installDefaults): Don't initialize checkIcon.
+ 	It's value will be set in subclasses.
+ 	(uninstallDefaults): remove uninstallation of
+ 	checkIcon.
+ 	(paint): Moved code to paintMenuItem().
+ 	(paintMenuItem): Implemented.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java:
+ 	UI delegate for JRadioButtonMenuItem.
+ 
+ 2004-03-29  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	Corrected position of the accelerator.
+ 
+ 2004-03-29  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JMenuItem.java: Partly
+ 	implemented. Work in progress
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Changed default value of acceleratorDelimiter.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	New class. Partly implemented.
+ 
+ 2004-03-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(item_activate): Declare label before use.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkSetFont): Removed unused variable label.
+ 	(addExposeFilter): Declare variables before use.
+ 	(removeExposeFilter): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(ok_clicked): Declare str_fileName before use.
+ 
+ 2004-03-26  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuPeer.java
+ 	(addSeparator): Remove.
+ 	* java/awt/Menu.java
+ 	(separator): Remove static final MenuItem field.
+ 	(separatorLabel): New static final String field.
+ 	(addSeparator): Do not use peer method; use add(MenuItem) instead.
+ 	Use separatorLabel to denote that it is a separator.
+ 	(insertSeparator): Create a new MenuItem with separatorLabel, instead
+ 	of reusing the static separator instance, because a MenuItem instance
+ 	can't be added more than once without being cloned.
+ 	* java/awt/peer/MenuPeer.java
+ 	(addSeparator): Remove from interface.
+ 
+ 2004-03-26  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
+ 	(connectSignals): New native method declaration.
+ 	(GtkMenuItemPeer): Connect signals if the parent is a Menu.
+ 	* java/awt/MenuItem.java
+ 	(getActionCommand): Return the label if the action command is not set.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu): Use
+ 	gtk_menu_shell_append().
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(item_activate): Fix argument type.
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create): Do not connect
+ 	signal here.
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_connectSignals): New
+ 	method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create): Check if a label is
+ 	given. Add the menu widget's top-level GtkWindow to the global window
+ 	group, so it can grab the pointer.
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem): Use
+ 	gtk_menu_shell_append().
+ 
+ 2004-03-23  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/text/AttributedString.java
+ 	(addAttribute): Fix off-by-one.
+ 	(getIterator): Likewise.
+ 	* java/text/AttributedStringIterator.java
+ 	(getRunLimit): Correct logic.
+ 	(getRunStart): Likewise.
+ 	(getAttribute): Fix inequality.
+ 	(getAttributes): Likewise.
+ 	* testsuite/libjava.mauve/xfails: Remove AttributedString xfail.
+ 
+ 2004-03-23  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	(calculateSizes): Return real width and height.
+ 
+ 2004-03-23  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(calculateTabRects): Set the selectedRun before
+ 	trying to rotate tabs.
+ 
+ 2004-03-23  Kim Ho  <kho@redhat.com>
+ 
+ 	* Makefile.am: New file
+ 	* Makefile.in: Regenerate
+ 	* java/awt/Graphics.java: (drawRect):
+ 	Draw to the correct point.
+ 	* javax/swing/DefaultSingleSelectionModel.java
+ 	(isSelected): Return true if the selected index
+ 	is not -1.
+ 	* javax/swing/JLabel.java: Do not change mnemonic
+ 	index if text is null.
+ 	* javax/swing/JProgressBar.java: Use JComponent's
+ 	EventListenerList.
+ 	* javax/swing/JScrollBar.java: Ditto.
+ 	* javax/swing/JSlider.java: Ditto.
+ 	* javax/swing/JTabbedPane.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Add defaults for TabbedPane.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	Implement
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java:
+ 	(paintDeterminate): Don't paint String if it's
+ 	empty.
+ 	(paintIndeterminate): ditto.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	Reimplement.
+ 
+ 2004-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/AffineTransformOp.java
+ 	(AffineTransformOp): Made public.
+ 	* javax/swing/JComponent.java
+ 	(listenerList): Made protected.
+ 	(accessibleContext): Likewise.
+ 	* javax/swing/JList.java
+ 	(valueChanged): Dont use internal fields of ListSelectionEvent.
+ 	* javax/swing/JViewport.java
+ 	(getView): Dont use internal fields of Component.
+ 	(addImpl): Likewise.
+ 	* javax/swing/Timer.java
+ 	(isRunning): Made public.
+ 	(start): Likewise.
+ 	(stop): Likewise.
+ 	* javax/swing/UIDefaults.java
+ 	(getInt): Made public.
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(mousePressed): Dont use internal fields of MouseEvent.
+ 	(propertyChanged): Dont use internal fields of PropertyChangeEvent.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(arrowIcon): Made static.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(stateChanged): Dont use internal field on ChangeEvent.
+ 	* javax/swing/text/JTextComponent.java
+ 	(getUI): Call UIManager.getUI().
+ 	(updateUI): Use getUI().
+ 
+ 2004-03-19  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JComponent.java: Turn off double buffer by default.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java: Clear rects before painting.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable):
+ 	Use cairo to copy areas.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClip):
+ 	Initialize and set clip region.
+ 
+ 2004-03-15  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/applet/Applet.java (preferredSize): Override deprecated
+ 	variant of getPreferredSize.
+ 	(minimumSize): Override deprecated variant of getMinimumSize.
+ 
+ 2004-03-15  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(drawImage(img,xform,bgcolor,obs)): New Method.
+ 	Helper function that every drawImage method will
+ 	use.
+ 	(drawRaster): Added new parameter, bgcolor. All
+ 	transparent pixels are changed to bgcolor before
+ 	image is drawn.
+ 	(drawRenderedImage): Fixed to use changed drawRaster().
+ 	(drawImage(image,xform,obs): Fixed to use new helper function
+ 	(drawImage(image,op,x,y)): Ditto.
+ 	(drawImage (img,x,y,observer)): Ditto.
+ 	((PainterThread) bgcolor): New Field.
+ 	((PainterThread) (setPixels)): Changed all transparent pixels
+ 	to bgcolor.
+ 	(drawImage(img,x,y,width,height,bgcolor,observer)):
+ 	Fixed FIXME - all the transparent pixels are
+ 	changed to the specified bgcolor.
+ 	(drawImage(img, x, y, width, height, observer): Changed to
+ 	use function above.
+ 	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,bgcolor,observer)):
+ 	Fixed FIXME- changed all transparent pixels to bgcolor.
+ 	(drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer)):
+ 	Changed to use function above.
+ 
+ 2004-03-14  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/applet/Applet.java (dimensions): New field.
+ 	(getDimensions): New method.
+ 	(getPreferredSize): Call getDimensions.
+ 	(getMinimumSize): Likewise.
+ 
+ 2004-03-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/classpath/jcl.c: Include stdlib.h, not malloc.h.
+ 	* jni/classpath/jnilink.c: Likewise.
+ 
+ 	* java/applet/Applet.java (getPreferredSize): New method.
+ 	(getMinimumSize): New method.
+ 
+ 2004-04-15  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* prims.cc (_Jv_AllocObject): Remove `size' argument.
+ 	(_Jv_AllocObjectNoFinalizer): Likewise.
+ 	(_Jv_AllocObjectNoInitNoFinalizer): Likewise.
+ 	(_Jv_AllocPtrFreeObject): Likewise.
+ 	(_Jv_AllocString): Moved from natString.cc. Call collector interface
+ 	directly even in the JVMPI case.
+ 	* gcj/cni.h (JvAllocObject): Remove `size' argument from
+ 	_Jv_AllocObject calls.
+ 	* gcj/javaprims.h: Update prototypes.
+ 	* gnu/gcj/natCore.cc (_Jv_create_core): Use `new', not _Jv_AllocObject.
+ 	* java/lang/Class.h: Update _Jv_AllocObject friend prototype.
+ 	* java/lang/natString.cc (_Jv_AllocString): Move to prims.cc.
+ 
+ 2004-04-14  Andrew Haley  <aph@redhat.com>
+ 	    Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Use
+ 	_Jv_LookupInterfaceMethodIdx for calls to interfaces.
+ 	* include/jvm.h (_Jv_CallAnyMethodA): Add new `iface' arg.
+ 
+ 	* testsuite/libjava.lang/InvokeInterface.java: New file.
+ 	* testsuite/libjava.lang/InvokeInterface.out: New file.
+ 
+ 2004-04-09  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/lang/VMThrowable.java (getStackTrace): Pass trace as-is to
+ 	modified lookup().
+ 	* gnu/gcj/runtime/NameFinder.java (lookup): Change to take in a
+ 	StackTraceElement directly.
+ 	(newElement): New native helper method to create StackTraceElement
+ 	bypassing Java access control.
+ 	(createStackTraceElement): Use newElement() instead of directly
+ 	calling StackTraceElement's constructor.
+ 	* gnu/gcj/runtime/natNameFinder.cc (newElement): New method.
+ 
+ 2004-04-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/SecurityManager.java
+ 	(checkAwtEventQueueAccess): Implemented.
+ 
+ 2004-04-01  Gary Benson  <gbenson@redhat.com>
+ 
+ 	* resolve.cc (_Jv_ResolvePoolEntry): Put field name in exception.
+ 	(_Jv_SearchMethodInClass): Likewise.
+ 
+ 2004-03-26  Peter Moon  <peterm@miraculum.com>
+ 
+ 	* java/text/NumberFormat.java: Fix spelling of setCurrency
+ 	method.
+ 
+ 2004-03-21  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/natClass.cc (getClassLoader): Circumvent infinite
+ 	recursion when searching for the system ClassLoader.
+ 
+ 2004-03-21  Ito Kazumitsu <kaz@maczuka.gcd.org>
+ 
+ 	* java/net/ServerSocket.java
+ 	(accept): Close the socket when error occured.
+ 
+ 2004-03-21  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URI.java (parseURI): Added unquoting.
+ 	(unquote): New method.
+ 	(quoteAuthority): Implemented.
+ 	(quote(String,String)): New method.
+ 	(quotePath): Implemented.
+ 	(getRawSchemeSpecificPart): Return new rawSchemeSpecificPart field.
+ 	(getSchemeSpecificPart): Removed FIXME comment.
+ 	(getRawAuthority): Return new rawAuthority field.
+ 	(getAuthority): Removed FIXME comment.
+ 	(getRawUserInfo): Return new rawUserInfo field.
+ 	(getUserInfo): Removed FIXME comment.
+ 	(getRawPath): Return new rawPath field.
+ 	(getPath): Removed FIXME comment.
+ 	(getRawQuery): Return new rawQuery field.
+ 	(getQuery): Removed FIXME comment.
+ 	(getRawFragment): Return new rawFragment field.
+ 	(getFragment): Removed FIXME comment.
+ 
+ 2004-03-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java: Merged copyright year with classpath.
+ 
+ 2004-03-20  Norbert Frese  <postfach@nfrese.net>
+ 
+ 	* gnu/java/rmi/server/RMIIncomingThread.java: New file.
+ 	* gcc/libjava/gnu/java/rmi/server/UnicastConnection.java:
+ 	Create a new RMIObjectOuputStream/RMIObjectInputStream for every
+ 	rmi-message.
+ 	(getObjectInputStream): Return object reference, throw IOException if null.
+ 	(startObjectInputStream): Create new RMIObjectInputStream on top of 'din'.
+ 	(getObjectOutputStream): Return object reference, throw IOException if null.
+ 	(startObjectOutputStream): Create new RMIObjectOutputStream on top of 'dout'.
+ 	* gcc/libjava/gnu/java/rmi/server/UnicastConnectionManager.java:
+ 	(UnicastConnectionManager): Throw RemoteException if port is not available.
+ 	(getInstance): Throw RemoteException.
+ 	(run): Lookup client host and attach it to new RMIIncomingThread for later retrieval.
+ 	* gcc/libjava/gnu/java/rmi/server/UnicastRef.java:
+ 	Start a new RMIObjectInputStream/RMIObjectOutputStream for every rmi-message.
+ 	Collect Exceptions which are returned by a rmi-call and fix void returns.
+ 	* gcc/libjava/gnu/java/rmi/server/UnicastRemoteCall.java:
+ 	Start a new RMIObjectInputStream/RMIObjectOutputStream for every rmi-message.
+ 	* gcc/libjava/gnu/java/rmi/server/UnicastServer.java:
+ 	(dispatch): Answer ping messages which are sent by other java implementions.
+ 	(incomingMessageCall): Start a new RMIObjectInputStream/RMIObjectOutputStream
+ 	for every rmi-message and fix void return problems.
+ 	* gcc/libjava/gnu/java/rmi/server/UnicastServerRef.java
+ 	(UnicastServerRef): Throw RemoteException.
+ 	(exportObject): Find the class up the class hierarchy which has a _Stub generated by rmic.
+ 	In some situations it is necessary to export a subclass of the class which has the _Stub.
+ 	For instance when the class with has the _Stub is abstract.
+ 	(findStubSkelClass): New method which looks for the class which has the _Stub.
+ 	(getClientHost): Implementated.
+ 	* gcc/libjava/java/rmi/server/RemoteServer.java
+ 	(getClientHost): Implementated.
+ 	* gcc/libjava/Makefile.am (rmi_java_source_files):
+ 	Added gnu/java/rmi/server/RMIIncomingThread.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-03-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(getLocalHostname): Added javadoc.
+ 
+ 2004-03-19  Per Bothner  <per@bothner.com>
+ 
+ 	* configure.in: FILE variable  overrides FLATFORM when linking
+ 	natFileChannelXXX.cc.
+ 
+ 	* gnu/java/nio/channels/natFileChannelEcos.cc (diag_write):  Restored.
+ 	(write):  Call diag_write, as in old natFileDescriptorEcos.cc.
+ 
+ 2004-03-19  Per Bothner  <per@bothner.com>
+ 
+ 	* gnu/gcj/convert/Input_UnicodeBig.java:  New class..
+ 	* gnu/gcj/convert/Input_UnicodeLittle.java:  New class.
+ 	* Makefile.am:  Update accordingly.
+ 	* gnu/gcj/convert/IOConverter.java:  Define "utf-16le" and "utf16be"
+ 	as aliases for UnicodeLittle and UnicodeBig.
+ 
+ 2004-03-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getVScrollbarWidth):
+ 	Don't access ws when it is null.
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight):
+ 	Likewise.
+ 
+ 2004-03-19  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ThreadGroup.java (list): Changed print to println.
+ 
+ 2004-03-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/BufferedReader.java: Use &lt;=, not &lt;&eq; to make gjdoc
+ 	happy.
+ 
+ 2004-02-10  Randolph Chung  <tausq@debian.org>
+ 
+ 	* configure.in: Build java for hppa target.
+ 	* configure: Regenerate.
+ 	* libjava/configure.host (hppa-*): Add target.
+ 	* libjava/sysdeps/pa/lock.h: New file.
+ 
+ 2004-03-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Stephen Crawley
+ 	* java/io/FilePermission.java (implies): Use String.length() -1 to
+ 	access last char of String.
+ 
+ 2004-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/AffineTransformOp.java
+ 	(AffineTransformOp): Made public.
+ 	* javax/swing/JComponent.java
+ 	(listenerList): Made protected.
+ 	(accessibleContext): Likewise.
+ 	* javax/swing/JList.java
+ 	(valueChanged): Dont use internal fields of ListSelectionEvent.
+ 	* javax/swing/JViewport.java
+ 	(getView): Dont use internal fields of Component.
+ 	(addImpl): Likewise.
+ 	* javax/swing/Timer.java
+ 	(isRunning): Made public.
+ 	(start): Likewise.
+ 	(stop): Likewise.
+ 	* javax/swing/UIDefaults.java
+ 	(getInt): Made public.
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(mousePressed): Dont use internal fields of MouseEvent.
+ 	(propertyChanged): Dont use internal fields of PropertyChangeEvent.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(arrowIcon): Made static.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(stateChanged): Dont use internal field on ChangeEvent.
+ 	* javax/swing/text/JTextComponent.java
+ 	(getUI): Call UIManager.getUI().
+ 	(updateUI): Use getUI().
+ 
+ 2004-03-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* verify.cc: Undef PC.
+ 
+ 2004-03-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(keys): Initialize at declaration.
+ 	(locate): keys cant be null.
+ 	(add): Removed.
+ 	(addSelectionKey): New method.
+ 	(removeSelectionKey): New method.
+ 	* java/nio/channels/spi/AbstractSelectionKey.java
+ 	(cancel): Call AbstractSelector.cancelKey(SelectionKey key).
+ 	* java/nio/channels/spi/AbstractSelector.java
+ 	(provider): Javadoc added.
+ 	(cancelledKeys): Javadoc added.
+ 	(cancelKey): Javadoc added, add key to cancelledKeys.
+ 	(deregister): Implemented.
+ 
+ 2004-03-18  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* gnu/java/nio/channels/natFileChannelPosix.cc (mapImpl): Cast
+ 	MAP_FAILED to void *.
+ 
+ 2004-03-12  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Clipping fixes.
+ 	* javax/swing/JComponent.java (paint): Use persistent double buffer.
+ 	* javax/swing/JList.java (ListListener): Revalidate on changes.
+ 	* javax/swing/JScrollPane.java: Reimplement.
+ 	* javax/swing/JViewport.java: Reimplement.
+ 	* javax/swing/ScrollPaneLayout.java: Reimplement.
+ 	* javax/swing/ViewportLayout.java: Tidy up.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java: Remove printlns.
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java: Handle missing labels.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java: Implement in terms of
+ 	backing store only.
+ 
+ 2004-03-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_wm_protocols_filter): New function.
+ 	(window_focus_in_cb): Remove function.
+ 	(window_focus_out_cb): Likewise.
+ 	(window_focus_or_active_state_change_cb): New function.
+ 	(create): Add filter that removes WM_TAKE_FOCUS client messages.
+ 	(connectSignals): Don't attach handlers to focus-in-event or
+ 	focus-out-event signals.  Handle notify signal.
+ 
+ 2004-03-11  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
+ 	(gtkSetLabel): New native method declaration.
+ 	(setLabel): Use gtkSetLabel.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetLabel): New method.
+ 
+ 2004-03-10  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Default to
+ 	black when color argument is null.
+ 
+ 2004-03-10  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java: Remove check
+ 	for drag events.
+ 
+ 2004-03-10  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java: (visitChild):
+ 	Remove candidate clip. Use the component
+ 	clip to intersect.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
+ 	(handleEvent): Use the PaintEvent's clip.
+ 
+ 2004-03-10  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
+ 	(handleEvent): Don't set the clip for the
+ 	Graphics object.
+ 
+ 2004-03-09  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
+ 	Fix double <-> fixed macros, reset font transform.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
+ 	Likewise.
+ 
+ 2004-03-09Â  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java: (visitChild): Move
+ 	the x and y coordinate of the component rectangle
+ 	to correct position.
+ 	(handleEvent): Forward drag events to the pressed
+ 	component.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	Fix comments.
+ 	(ArrowButtonListener::mousePressed): Stop the
+ 	existing timer.
+ 	(mouseDragged): Implement.
+ 	(TrackListener::mousePressed): Only react if
+ 	the press doesn't occur on the thumb, otherwise
+ 	just set the offset.
+ 	(TrackListener::mouseReleased): Unset the isAdjusting
+ 	value.
+ 	(createIncreaseIcon): Switch icon.
+ 	(createDecreaseIcon): Switch icon.
+ 	(calculatePreferredSize): Use width.
+ 	(getThumbBounds): Use the top as the lower value.
+ 	(layoutVScrollBar): Switch the button locations.
+ 	(paintIncreaseHighlight): Paint correct side of thumb.
+ 	(paintDecreaseHighlight): ditto.
+ 	(valueForYPosition): Use top as the lower value.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	Fix comments.
+ 	(mouseDragged): Implement.
+ 	(mousePressed): Only react when the thumb isn't
+ 	pressed, otherwise just set offset.
+ 	(mouseReleased): Handle a release of the thumb.
+ 	(scrollDueToClickInTrack): Stop the timer first.
+ 	* javax/swing/JProgressBar.java:
+ 	(setString): Fix change condition.
+ 	* javax/swing/JSeparator.java:
+ 	Remove println's.
+ 
+ 2004-03-08  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/image/AffineTransformOp.java:
+ 	(filter): Use Graphics2D interface instead of directly using the
+ 	GdkGraphics2D peer.
+ 
+ 2004-03-05  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java
+ 	(handleEvent): Action events are generated upon MOUSE_RELEASED.
+ 	* java/awt/Container.java
+ 	(acquireComponentForMouseEvent): Fixed.
+ 	(handleEvent): Fixed.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(state_to_awt_mods_with_button_states): New method.
+ 	(pre_event_handler): Fixed mouse event generation.
+ 
+ 2004-03-05  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(GdkGraphics2D (BufferedImage)): Initialize
+ 	pixmap associated with specified BufferedImage.
+ 	(setPaint): Changed implementation of Texture
+ 	Paint to use AffineTransformOp.
+ 	* java/awt/image/AffineTransformOp.java
+ 	(createCompatibleDestRaster): Throw RasterFormatException
+ 	if resulting width or height of raster is 0.
+ 
+ 2004-03-04  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* java/awt/image/AffineTransformOp.java:
+ 	Removed unnecessary field interpolationType.
+ 	Formatted some of the lines to be consistent with
+ 	the GNU style.
+ 	(AffineTransformOp): Create new RenderingHints
+ 	containing specified interpolation type.
+ 	(createCompatibleDestImage): Implemented.
+ 	(createCompatibleDestRaster): Implemented.
+ 	(filter): Implemented.
+ 	(getBounds2D(BufferedImage)): Implemented.
+ 	(getBounds2D(Raster)): Implemented.
+ 	(getInterpolationType): Get interpolation value from
+ 	rendering hints.
+ 
+ 2004-03-04  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(setFont): Check if child peers are null.
+ 
+ 2004-03-04  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* testsuite/lib/libjava.exp (libjava_find_lib): Don't include
+ 	.libs in -L option.
+ 	(libjava_arguments): Add new libraries to argument list.
+ 
+ 2004-03-02  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added java/awt/image/AffineTransformOp.java
+ 	* Makefile.in: Re-generated.
+ 	* java/awt/image/AffineTransformOp.java: New Class.
+ 
+ 2004-03-01  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(setPaint): Interpret correctly TexturePaint's
+ 	anchor rectangle.
+ 	(drawImage): Fixed scale factors of the affine
+ 	transform.
+ 
+ 2004-02-27  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(GdkGraphics(Component)): Inherit font from component.
+ 	(drawString): Use font style.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
+ 	(gtkSetFont): New native method declaration.
+ 	(setFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(gtkSetFont): New native method declaration.
+ 	(setFont): Call new native method gtkSetFont.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(setFont): For all child components who do not their fonts set,
+ 	set their peers' fonts with this container's font.
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java:
+ 	Move all native method declarations to the top for readability.
+ 	(gtkSetFont): New native method declaration.
+ 	(setFont): New method.
+ 	* java/awt/Component.java
+ 	(setFont): Invalidate after setting the font.
+ 	* java/awt/Container.java
+ 	(invalidateTree): New method.
+ 	(setFont): Invalidate the container tree after setting the font.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString): Use font style.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetFont): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkSetFont): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkSetFont): New method.
+ 
+ 2004-02-27  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(updateBufferedImage): New helper function.
+ 	Updates BufferedImage in memory if it was changed.
+ 	(draw): changed to update BufferedImage in memory after
+ 	this drawing operation
+ 	(fill): Ditto.
+ 	(draw3DRect): Ditto.
+ 	(fill3DRect): Ditto.
+ 	(clearRect): Ditto.
+ 	(drawRaster): Ditto.
+ 	(drawImage) : Ditto. Update only in case of GtkOffScreenImage with
+ 	no affine transformation.
+ 	(drawGlyphVector): Ditto.
+ 
+ 2004-02-26  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(isBufferedImageGraphics): New Helper function.
+ 	Returns true if this graphics2d can be used to draw
+ 	into buffered image and false otherwise.
+ 	(updateImagePixels): New Helper function.
+ 	Updates pixels in the BufferedImage.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(getImagePixels): New function. Returns pixels
+ 	of the buffered image associated with
+ 	this Graphics2D.
+ 
+ 2004-02-26  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java
+ 	(layoutContainer): Fix width and height calculations to ensure
+ 	that they're non-negative.
+ 	* java/awt/Component.java
+ 	(setBackground): If c is null, inherit from closest ancestor whose
+ 	background color is set.
+ 
+ 2004-02-26Â  Kim HoÂ  <kho@redhat.com>
+ 
+ 	* Makefile.am: Add new files.
+ 	* Makefile.in: Re-generate.
+ 	* javax/swing/JProgressBar.java:
+ 	(JProgressBar(int, int int)): Throw
+ 	IllegalArgumentException if orientation is
+ 	invalid.
+ 	(JProgressBar(BoundedRangeModel)): Create
+ 	ChangeListener and register it. UpdateUI.
+ 	(getChangeListeners): Implement.
+ 	(setModel): Reset ChangeListener.
+ 	* javax/swing/JScrollBar.java: Implement.
+ 	* javax/swing/JSeparator.java: Implement.
+ 	* javax/swing/JSlider.java:
+ 	(JSlider(int, int, int, int)): Throw
+ 	IllegalArgumentException if orientation
+ 	is invalid.
+ 	(getChangeListeners): Fix method name.
+ 	* javax/swing/SwingUtilities.java:
+ 	(layoutCompoundLabel): If there is no text,
+ 	set the text rectangle dimensions to 0.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java:
+ 	(paint): If there is no text, don't paint it.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	(propertyChange): If the model changes, change
+ 	the listeners accordingly.
+ 
+ 2004-02-25  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java: Add "final" qualifiers.
+ 	* javax/swing/JList.java: Reimplement.
+ 	* javax/swing/DefaultListSelectionModel.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicListUI.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Add "purple" values.
+ 	* javax/swing/ListModel.java: Javadoc.
+ 	* javax/swing/ListSelectionModel.java: Add missing methods.
+ 	* javax/swing/AbstractListModel.java: Javadoc and corrections.
+ 	* javax/swing/DefaultListModel.java: Javadoc and corrections.
+ 	* javax/swing/ListModel.java: Javadoc and corrections.
+ 	* javax/swing/DefaultListCellRenderer.java: Minor tidying.
+ 
+ 2004-02-25  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java
+ 	(GtkFontPeer): Change default size to 12.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(getFontPeer): Change default size to 12.
+ 	(getClasspathFontPeer): Likewise. Set default name to "Default".
+ 	* java/awt/Font.java
+ 	(Font(Map)): Call Font(String,Map).
+ 	(Font(String,Map)): If attrs is null, initialize it as an empty
+ 	HashMap, which will ensure that the Font will get default attributes.
+ 
+ 2004-02-25  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java
+ 	(GtkFontPeer(String,int)): Call the new constructor with size 1.
+ 	(GtkFontPeer(String,int,int)): New constructor with size attribute.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(getFontPeer(String,int)): Call the new overload method with size 1.
+ 	(getFontPeer(String,int,int)): New method. Overloaded with size
+ 	attribute.
+ 	(getClasspathFontPeer): Set the size of the font.
+ 
+ 2004-02-24  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(bimage): New field.
+ 	(GdkGraphics2D): New Constructor. Constructs Graphics
+ 	object that can be used to draw into the Buffered Image.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
+ 	(GdkGraphicsEnvironment): Fixed to include public
+ 	keyword.
+ 	(createGraphics): Implemented.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(getLocalGraphicsEnvironment): Implemented.
+ 	* java/awt/GraphicsEnvironment.java:
+ 	(getLocalGraphicsEnvironment): Implemented.
+ 	* java/awt/image/BufferedImage.java:
+ 	(createGraphics): Implemented.
+ 
+ 2004-02-24  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(eventTypeEnabled): Add MOUSE_MOVED and MOUSE_DRAGGED event types.
+ 	* java/awt/Container.java
+ 	(addNotifyContainerChildren): Fix event enabling.
+ 
+ 2004-02-23  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added
+ 	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
+ 	* Makefile.in: Re-generated.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
+ 	New Class.
+ 
+ 2004-02-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* Makefile.am: Add BasicProgressBarUI
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JProgressBar.java:
+ 	Re-implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	Add constants for JProgressBar.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	Change comments.
+ 	(calculateGeometry): New method
+ 	(paint): Remove unnecessary size calculations.
+ 
+ 2004-02-18  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(drawRaster): Fixed small error that caused
+ 	imageToUser transformation to be set incorrectly.
+ 	(toString): Implemented.
+ 
+ 2004-02-18  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/CardLayout.java
+ 	(addLayoutComponent): Show the first component added as the default.
+ 	(removeLayoutComponent): After removing, show the next component.
+ 	(gotoComponent): If there is only one component, show it and return.
+ 
+ 2004-02-18  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JSlider.java: Re-order
+ 	modifiers.
+ 	* javax/swing/JLabel.java: Re-order
+ 	modifiers.
+ 	* javax/swing/JComponent.java:
+ 	(addPropertyChangeListener):
+ 	Implement.
+ 	(removePropertyChangeListener):
+ 	ditto.
+ 	(firePropertyChangeEvent):
+ 	ditto.
+ 
+ 2004-02-17  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(show): Dispatch ComponentEvent via system event queue.
+ 	(hide): Likewise.
+ 	(move): Likewise.
+ 	(resize): Likewise.
+ 	(reshape): Likewise.
+ 	* java/awt/Window.java
+ 	(setBoundsCallback): Likewise.
+ 
+ 2004-02-17  David Jee  <djee@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds):
+ 	Use gtk_widget_set_size_request() instead of the deprecated
+ 	gtk_widget_set_usize().
+ 
+ 2004-02-17  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JSlider.java: Fix comments and
+ 	make property strings constants.
+ 	(createStandardLabels): Use the labels
+ 	preferred size as bounds.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	Fix comments.
+ 	(ScrollHandler::actionPerformed): Don't
+ 	calculate the timer stop value. Let the
+ 	MouseListeners find the stop location.
+ 	(getPreferredHorizontalSize): Re-implement.
+ 	(getPreferredVerticalSize): ditto.
+ 	(getMinimumHorizontalSize): ditto.
+ 	(getMinimumVerticalSize): ditto.
+ 	(getPreferredSize): ditto.
+ 	(getMinimumSize): ditto.
+ 	(getMaximumSize): ditto.
+ 	(paintTicks): Use doubles to find the
+ 	tick location.
+ 	(paintHorizontalLabel):Â  Use preferredSize
+ 	as initial width and height.
+ 	(paintVerticalLabel): ditto.
+ 
+ 2004-02-17  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JLabel.java: Changed
+ 	property strings to constants.
+ 	(DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY):
+ 	New property.
+ 	(setText): Change mnemonic index if
+ 	text is too short.
+ 	(setDisplayedMnemonicIndex): Fire property
+ 	change event.
+ 	(getDisplayedMnemonicIndex): Remove check
+ 	against short text.
+ 
+ 2004-02-17 Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	(drawImage(img,xform,obs)): Invert xform before
+ 	passing the xform to cairo.
+ 	(drawImage(img,x,y,bgcolor,obs)): Implemented.
+ 	(drawImage (img,x,y,w,h,bgcolor,obs)): Partly
+ 	implemented.
+ 	(drawImage (img,x,y,w,h,obs)): Implemented.
+ 	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,
+ 	bgcolor,obs)): Partly implemented.
+ 	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,obs)):
+ 	Implemented.
+ 	* java/awt/image/BufferedImage.java:
+ 	(copyData): if dest is null, create raster with same
+ 	dimensions as the current image.
+ 
+ 2004-02-16  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(getPreferredSize): Use layoutCL.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java
+ 	(getPreferredButtonSize): Start with empty view rect, layout using
+ 	component's preferred alignment.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Add some Label and
+ 	List defaults.
+ 
+ 2004-02-16  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(show): Dispatch COMPONENT_SHOWN ComponentEvent.
+ 	(hide): Dispatch COMPONENT_HIDDEN ComponentEvent.
+ 	(move): Erase old bounds and repaint new bounds. Dispatch
+ 	COMPONENT_MOVED ComponentEvent.
+ 	(resize): Erase old bounds and repaint new bounds. Dispatch
+ 	COMPONENT_RESIZED ComponentEvent.
+ 	(reshape): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
+ 	ComponentEvents.
+ 	* java/awt/Window.java
+ 	(setBoundsCallback): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
+ 	ComponentEvents.
+ 
+ 2004-02-16  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	(setRenderingHint): Added implementation of
+ 	Interpolation rendering hints.
+ 	(setRenderingHints): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
+ 	(drawPixels): fixed to allow user to choose type
+ 	of filtering that should be used when displaying images.
+ 	(cairoSurfaceSetFilter): New method. Sets filter type for
+ 	interpolation of pixel values.
+ 
+ 2004-02-16  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(calcCellSizes): Rows or columns with zero sizes should still be
+ 	considered for extra space distribution.
+ 
+ 2004-02-16  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JLabel.java: Re-implement.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	Re-implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Added constant.
+ 
+ 2004-02-16Â  Kim HoÂ  <kho@redhat.com>
+ 
+ 	* javax/swing/JSlider.java: Fix indentation and comments.
+ 	(setModel): Remove null check to conform with Sun's.
+ 	(setOrientation): Throw exception if not
+ 	HORIZONTAL or VERTICAL.
+ 	(getInverted): Use private variable instead of
+ 	ComponentOrientation.
+ 	(setInverted): ditto.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	Fix indentation and comments.
+ 	(propertyChange): Remove check for inverted slider, handle
+ 	in main paint.
+ 	(getMinimumSize): Return preferred size.
+ 	(getMaximumSize): ditto.
+ 	(calculateFocusRect): Don't relocate rectangle.
+ 	(drawInverted): Return XOR of the slider's inversion and
+ 	the component's orientation.
+ 	(paint): Update leftToRightCache
+ 
+ 2004-02-13  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(GetLayoutInfo): Fix weight and size distribution. Relocate repeated
+ 	code to helper methods.
+ 	(sortBySpan): New helper method.
+ 	(distributeSizeAndWeight): Likewise.
+ 	(calcCellWeights): Likewise.
+ 	(calcCellSizes): Add comments.
+ 
+ 2004-02-13  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(show): Only do something if component is invisible at the moment.
+ 	(hide): Only do something if component is visible at the moment.
+ 	(reshape): If lightweight, erase old bounds and repaint new bounds.
+ 
+ 2004-02-13Â  Kim HoÂ  <kho@redhat.com>
+ 
+ 	* Makefile.am: Updated for new file.
+ 	* Makefile.in: Regenerated.
+ 	* javax/swing/JSlider.java: Reimplement.
+ 	* javax/swing/SwingUtilities.java
+ 	(layoutCompoundLabel): Use icon height
+ 	instead of width.
+ 	(paintComponent): Implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Add JSlider defaults.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	Implement. New file.
+ 
+ 2004-03-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java
+ 	(RECEIVE_LOCK): New member field.
+ 	(SEND_LOCK): New member field.
+ 	(send0): New method.
+ 	(send): Synchronize on SEND_LOCK.
+ 	(receive0): New method.
+ 	(receive): Synchronize on RECEIVE_LOCK.
+ 	* gnu/java/net/natPlainDatagramSocketImplNoNet.cc,
+ 	gnu/java/net/natPlainDatagramSocketImplPosix.cc,
+ 	gnu/java/net/natPlainDatagramSocketImplWin32.cc
+ 	(send0): Renamed from send.
+ 	(receive0): Renamed from receive.
+ 2004-03-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/natPlainSocketImplPosix.cc
+ 	(write): Just call write(jbyteArray, offset, len).
+ 	(read): Just call read(jbyteArray, offset, len).
+ 
+ 2004-03-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTabbedPane.java
+ 	(serialVersionUID): New field.
+ 
+ 2004-03-16  Norbert Frese  <postfach@nfrese.net>
+ 
+ 	* java/net/InetAddress.java
+ 	(getByName): Handle hostname == "" case.
+ 
+ 2004-03-16  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	Reported by: Adam Heath <doogie@debian.org>
+ 	* gnu/javax/rmi/CORBA/DelegateFactory.java (getInstance): Use context
+ 	class loader.
+ 
+ 2004-03-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Locale.java: Reverting my last patch
+ 	and add a comment why the original version was okay.
+ 
+ 2004-03-14  Andreas Tobler <a.tobler@schweiz.ch>
+ 
+ 	* gnu/java/nio/channels/natFileChannelPosix.cc: Implement
+ 	munmap_adaptor and msync_adaptor for older POSIX_C_SOURCES specs.
+ 	(MappedByteBufferImpl::unmapImpl): Use munmap_adaptor.
+ 	(MappedByteBufferImpl::forceImpl): Use msync_adptor.
+ 
+ 2004-03-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/DateFormatSymbols.java: Fixed file name in copyright.
+ 
+ 2004-03-12  Ito Kazumitsu  <ito.kazumitsu@hitachi-cable.co.jp>
+ 
+ 	* java/net/URI.java (toURL): Implemented.
+ 
+ 2004-03-12  Ito Kazumitsu  <ito.kazumitsu@hitachi-cable.co.jp>
+ 
+ 	* java/net/URI.java
+ 	(URI_REGEXP) updated to contain scheme specific part.
+ 	(SCHEME_SPEC_PART_GROUP) new constant.
+ 	(AUTHORITY_GROUP, PATH_GROUP, QUERY_GROUP, FRAGMENT_GROUP)
+ 	updated to make room for SCHEME_SPEC_PART_GROUP.
+ 	(parseURI) parse scheme specific part.
+ 	(resolve, isAbsolute, isOpaque, getRawSchemeSpecificPart,
+ 	getSchemeSpecificPart, getAuthority, getUserInfo, getPath,
+ 	getQuery, getFragment) implemented.
+ 
+ 2004-03-12  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* libraries/javalib/java/net/URI.java
+ 	partially implemented using java.util.regex.
+ 	(URI_REGEXP) new constant. Used to parse URIs.
+ 	(SCHEME_GROUP) new constant representing index of scheme group
+ 	in parsed URI.
+ 	(AUTHORITY_GROUP) new constant representing index of authority
+ 	group in parsed URI.
+ 	(PATH_GROUP) new constant representing index of path group in
+ 	parsed URI.
+ 	(QUERY_GROUP) new constant representing index of query group in
+ 	parsed URI.
+ 	(FRAGMENT_GROUP) new constant representing index of fragment
+ 	group in parsed URI.
+ 	(getURIGroup) new static utility method.
+ 	(parseURI) implemented.
+ 	(quote) stub for new static utility method.
+ 	(quoteAuthority) stub for new static utility method.
+ 	(quoteHost) stub for new static utility method.
+ 	(quotePath) stub for new static utility method.
+ 	(quoteUserInfo) stub for new static utility method.
+ 	(URI) implemented.
+ 	(create) don't throw URISyntaxException. Implemented.
+ 	(toString) implemented.
+ 
+ 2004-03-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/HttpURLConnection.java
+ 	(getResponseCode): Fix another typo in javadoc.
+ 
+ 2004-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/logging/Level.java
+ 	(parse): Use String.equals() instead of ==.
+ 
+ 2004-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Connection.java
+ 	(getContentLength): New method.
+ 
+ 2004-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainSocketImpl.java:
+ 	Reformated to merge better with classpath's version.
+ 
+ 2004-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Locale.java
+ 	(getISO3Language): Use String.equals() instead of ==.
+ 	(getISO3Country): Likewise.
+ 
+ 2004-03-11  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/text/AttributedString.java
+ 	(addAttribute(AttributedCharacterIterator.Attribute,Object,int,int)):
+ 	Use HashMap instead of Hashtable since value can be null, and
+ 	you can not store a null value in a Hashtable.
+ 
+ 2004-03-11  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/AttributedStringIterator.java
+ 	(getAllAttributesKey): Return only keys concerned
+ 	by the current iterator.
+ 	(getAttributes): Use strict inequality for
+ 	end_index.
+ 
+ 2004-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/HttpURLConnection.java:
+ 	Fixed typo in javadoc.
+ 
+ 2004-03-11  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/io/BufferedInputStream.java (marktarget): New field for max
+ 	mark limit.
+ 	(CHUNKSIZE): New constant for incremental mark buffer allocation.
+ 	(mark): Use new fields.
+ 	(read): Likewise.
+ 	(read(byte[],int,int)): Likewise.
+ 	(skip): Likewise.
+ 	(refill): Likewise.
+ 
+ 2004-03-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/beans/BeanDescriptor.java (BeanDescriptor):
+ 	Set the FeatureDescriptor programmatic name.
+ 
+ 2004-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/channels/natFileChannelEcos.cc: Totally reworked.
+ 	This file was was just copied form java/io/natFileDescriptorEcos.cc
+ 	and never changed to compile correctly.
+ 
+ 2004-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/PipeImpl.java
+ 	(SourceChannelImpl): Made final.
+ 	(read): Implemented.
+ 	(SinkChannelImpl): Made final.
+ 	(write): Implemented.
+ 
+ 2004-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java:
+ 	Reformated to match classpath's version more.
+ 
+ 2004-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java:
+ 	Fixed javadoc to be correct xhtml.
+ 	* gnu/java/awt/peer/gtk/GtkArgList.java
+ 	(add): Use Boolean.valueOf() instead of new Boolean().
+ 
+ 2004-03-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Thread.java
+ 	(runnable): Moved around.
+ 	(daemon): Renamed from daemon_flag.
+ 	(contextClassLoader): Renamed from context_class_loader.
+ 	(Thread): Reordered constructors.
+ 	(activeCount): Use group directly.
+ 	(destroy): Make it a java method. Throw NoSuchMethodError like Sun does.
+ 	(holdsLock): Reworked javadoc.
+ 	(setDaemon): Reworked.
+ 	* java/lang/natThread.cc
+ 	(destroy): Removed.
+ 
+ 2004-03-08  Anthony Green  <green@redhat.com>
+ 
+ 	* Makefile.am: Build property resource files into libgcj.
+ 	* Makefile.in: Rebuilt.
+ 	* java/util/regex/Matcher.java, java/util/regex/Pattern.java,
+ 	java/util/regex/PatternSyntaxException.java,
+ 	gnu/regexp/CharIndexed.java,
+ 	gnu/regexp/CharIndexedCharArray.java,
+ 	gnu/regexp/CharIndexedInputStream.java,
+ 	gnu/regexp/CharIndexedReader.java,
+ 	gnu/regexp/CharIndexedString.java,
+ 	gnu/regexp/CharIndexedStringBuffer.java, gnu/regexp/RE.java,
+ 	gnu/regexp/REException.java,
+ 	gnu/regexp/REFilterInputStream.java,
+ 	gnu/regexp/REFilterReader.java, gnu/regexp/REMatch.java,
+ 	gnu/regexp/REMatchEnumeration.java, gnu/regexp/RESyntax.java,
+ 	gnu/regexp/REToken.java, gnu/regexp/RETokenAny.java,
+ 	gnu/regexp/RETokenBackRef.java, gnu/regexp/RETokenChar.java,
+ 	gnu/regexp/RETokenEnd.java, gnu/regexp/RETokenEndSub.java,
+ 	gnu/regexp/RETokenLookAhead.java,
+ 	gnu/regexp/RETokenOneOf.java, gnu/regexp/RETokenPOSIX.java,
+ 	gnu/regexp/RETokenRange.java, gnu/regexp/RETokenRepeated.java,
+ 	gnu/regexp/RETokenStart.java,
+ 	gnu/regexp/RETokenWordBoundary.java,
+ 	gnu/regexp/UncheckedRE.java: Files merged from GNU Classpath.
+ 
+ 2004-03-03  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/channels/Channels.java (newInputStream, newOutputStream):
+ 	Optimize when argument is a FileChannelImpl.
+ 	(newInputStream(FileChannelImpl), newOutputStream(FileChannelImpl)):
+ 	New native methods.
+ 	* java/nio/channels/natChannels.cc:  New file for new native methods.
+ 	* Makefile.am:  Update accordingly.
+ 
+ 2004-03-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* configure.host: Pass -fno-omit-frame-pointer for i386.
+ 	* configure.in: Likewise.
+ 	* configure: Regenerate.
+ 
+ 2004-03-01  Per Bothner  <per@bothner.com>
+ 
+ 	* java/lang/natPosixProcess.cc (startProcess):  Fix thinko.
+ 
+ 2004-02-29  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/channels/FileChannelImpl.java:  Moved to package
+ 	gnu/java/nio/channels, since we need to refer to it from java.io.
+ 	* java/nio/channels/natFileChannelImpl.cc:  Removed file.
+ 	* gnu/java/nio/channels/FileChannelImpl.java:  New class, renamed
+ 	from java/nio/channels.  Don't depend on FileDescriptor.
+ 	(in, out, err):  New static fields.
+ 	(mode):  New field.
+ 	(SET, CUR, READ, WRITE, APPEND, EXCL, SYNC, DSYNC):  Moved constants
+ 	from FileDescriptor.
+ 	(by):  Removed MappedByteBuffer field.
+ 	(map):  New working implementation.
+ 	* gnu/java/nio/channels/natFileChannelPosix.cc:  New file, though
+ 	some code "ported" from natFileDescriptoPosix.cc.
+ 	* gnu/java/nio/channels/natFileChannelEcos.cc:  Likewise.
+ 	* gnu/java/nio/channels/natFileChannelWin32.cc  Likewise.
+ 	* java/io/FileDescriptor.java:  Implement on top of FileChannel.
+ 	Remove native methods.
+ 	* Makefile.am, configure.in:  Updated accordingly.
+ 
+ 	* gnu/java/nio/FileLockImpl.java (fd):  Remove field, replacing it by:
+ 	(ch):  New FileChannelImpl field.  Update constructor to match.
+ 	(releaseImpl):  Remove native method.  Instead ...
+ 	(release):  Call unlock on channel.
+ 	* gnu/java/nio/natFileLockImpl.cc:  Removed file.
+ 
+ 	* java/io/natFileDescriptorEcos.cc:  Remove file.
+ 	* java/io/natFileDescriptorPosix.cc:  Remove file.
+ 	* java/io/natFileDescriptorWin32.cc:  Remove file.
+ 	* java/io/FileInputStream.java (ch):  Change type to FileChannelImpl.
+ 	(<init>(File)):  Allocate a FileChannelImpl, not a FileDescriptor.
+ 	(<init>(FileChannelImpl)):  New package-private constructor.
+ 	(<init>(FileDescriptor)):  Extract FileChannelImpl from arg.
+ 	(available, close, read, skip):  Implement using FileChannelImpl.
+ 	(getFD):  Allocate FileDescriptor if needed.
+ 	(getChannel):  Is now trivial.
+ 	* java/io/FileOutputStream.java:  Corresponding changes.
+ 	* java/io/RandomAccessFile.java:  Corresponding changes.
+ 
+ 	* java/nio/MappedByteBuffer.java: (forceImpl, isLoadedImpl, loadImpl,
+ 	unmapImpl):  New dummy methods, to be overridden by subclass.
+ 	(finalize, isLoaded, load, force):  New methods.
+ 	* java/nio/MappedByteBufferImpl.java:  More-or-less rewrite.
+ 	Now works, at least for read mapping.
+ 
+ 	* java/lang/natPosixProcess.cc (startProcess):  Implement standard
+ 	streams using FileChannelImpl, not FileDescriptor.
+ 	* java/lang/natWin32Process.cc (startProcess):  Likewise.
+ 
+ 2004-02-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java: Compile fix, damn I commited the
+ 	wrong code.
+ 
+ 2004-02-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readClassDescriptor): Keep elements of the mapping non null.
+ 	(checkTypeConsistency): New method.
+ 	(readFields): Fixed main loop and base logic. Small reindentation.
+ 	* java/io/ObjectStreamField.java
+ 	(lookupField): New method to update the field reference.
+ 	(checkFieldType): New method.
+ 	* java/io/ObjectStreamClass.java
+ 	(setClass, setFields): Call lookupField when building the field
+ 	database. Check the real field type.
+ 
+ 2004-02-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteOrder.java
+ 	(nativeOrder): Use equals() to compare strings.
+ 
+ 2004-02-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java
+ 	(finalize): Made protected.
+ 	* java/nio/channels/FileChannel.java
+ 	(MapMode.READ_ONLY): Made final.
+ 	(MapMode.READ_WRITE): Made final.
+ 	(MapMode.PRIVATE): Made final.
+ 	* java/nio/channels/SocketChannel.java
+ 	(open): Simplified code.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(registered): Unused, removed.
+ 	(keyFor): Check channel is open, only locate key
+ 	and not add a new one.
+ 	(register): Don't delete attachments.
+ 
+ 2004-02-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/ComponentDataBlitOp.java
+ 	(INSTANCE): Made final.
+ 	* gnu/java/awt/image/ImageDecoder.java:
+ 	Reworked imports.
+ 	(cm): Unused, removed.
+ 
+ 2004-02-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(send): Check if target address is resolved.
+ 
+ 2004-02-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am: Generate and install headers for inner classes in
+ 	java.nio.channels.Pipe and gnu.java.nio.PipeImpl.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-02-24  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/StringBuffer.java: No need to NULL out remainder of
+ 	buffer since ensureCapacity_unsynchronized will have done this for
+ 	us.
+ 
+ 2004-02-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Handler.java
+ 	(): Removed unneeded check for file != null. java.net.URL.getFile()
+ 	returns an empty string but never null.
+ 
+ 2004-02-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/gcj/convert/Convert.java
+ 	(main): Use equals() to compare strings.
+ 
+ 2004-02-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java: Made several constants final.
+ 	(getRolloverSelectedIcon): Made public.
+ 	(getSelectedIcon): Made public.
+ 
+ 2004-02-16  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/CharBufferImpl.java:  Inline super constructor.
+ 	* java/nio/DoubleBufferImpl.java:  Likewise.
+ 	* java/nio/FloatBufferImpl.java:  Likewise.
+ 	* java/nio/IntBufferImpl.java:  Likewise.
+ 	* java/nio/LongBufferImpl.java:  Likewise.
+ 	* java/nio/ShortBufferImpl.java:  Likewise.
+ 	* java/nio/CharBuffer.java:  Remove unused constructor.
+ 	* java/nio/DoubleBuffer.java:  Likewise.
+ 	* java/nio/FloatBuffer.java:  Likewise.
+ 	* java/nio/IntBuffer.java:  Likewise.
+ 	* java/nio/LongBuffer.java:  Likewise.
+ 	* java/nio/ShortBuffer.java:  Likewise.
+ 	* java/nio/CharViewBufferImpl.java:  New convenience constructor.
+ 	Fix buggy call to super constructor.
+ 	* java/nio/DoubleViewBufferImpl.java:  Likewise.
+ 	* java/nio/FloatViewBufferImpl.java:  Likewise.
+ 	* java/nio/IntViewBufferImpl.java:  Likewise.
+ 	* java/nio/LongViewBufferImpl.java:  Likewise.
+ 	* java/nio/ShortViewBufferImpl.java:  Likewise.
+ 
+ 	* java/nio/ByteBuffer.java (endian):  Make non-private so other
+ 	java.nio classes can inherit it.
+ 	(<init>):  Don't bother clearing array_offset.
+ 	* java/nio/ByteBuffer.java (allocate):  Re-implement using wrap.
+ 	* java/nio/ByteBuffer.java (get(byte[],int,int)):  Check underflow.
+ 	Remove redundant test.
+ 
+ 	* java/nio/ByteBufferImpl.java (asCharBuffer, asShortBuffer,
+ 	asIntBuffer, asLongBuffer, asFloatBuffer, asDoubleBuffer):
+ 	Use new XxxViewBufferImpl constructors.
+ 	* java/nio/MappedByteBufferImpl.java:  Likewise.
+ 	* java/nio/DirectByteBufferImpl.java:  Likewise.
+ 
+ 	* java/nio/ByteBufferImpl.java:  Remove one constructor.
+ 	Inline super in remaining constructor.
+ 	* java/nio/ByteBuffer.java:  Remove unused constructor.
+ 
+ 	* java/nio/ByteBufferImpl.java (shiftDown):  New optimized method.
+ 
+ 	* java/nio/ByteBufferImpl.java (get, put):  Add array_offset.
+ 	* java/nio/DirectByteBufferImpl.java (owner):  New field.
+ 	(offset):  Remove unused field.
+ 	(<init>):  Modify one and add another constructor.  Change callers.
+ 	(allocateDirect):  Removed - not used.
+ 	(getImpl, putImpl):  Make static and pass address explicitly,
+ 	to make them useful for MappedByteBufferImpl.
+ 	(get, put):  Check for underflow.  Modify for new getImpl.
+ 	(getImpl):  New native method where target is array.
+ 	(get(byte[],int,int)):  Use the above.
+ 	(adjustAddress):  New static native method.
+ 	(slice, duplicate, asReadOnly):  New implementations.
+ 	* java/nio/natDirectByteBufferImpl.cc (getImpl, putImpl, shiftDown,
+ 	adjustAddress):  New or updated native methods.
+ 
+ 2004-02-15  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/io/ObjectInputStream.java (readClassDescriptor): Avoid the
+ 	overflow of fieldmapping.
+ 
+ 2004-02-14  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/UndoManager.java: Re-written from scratch.
+ 
+ 2004-02-14  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/channels/spi/AbstractInterruptibleChannel.java (close):
+ 	Set closed before calling implCloseChannel, as in the spec.
+ 
+ 2004-02-09  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/ToggleButtonModel.java: Remove dead class.
+ 	* javax/swing/plaf/basic/BasicDefaults.java: Remove dead class.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java: New class.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java: New class.
+ 	* Makefile.am: Update for new and removed files.
+ 	* Makefile.in: Regenerate.
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Initialize default hints.
+ 	* javax/swing/AbstractButton.java
+ 	(AbstractButton): Initialize fields correctly in ctor.
+ 	* javax/swing/JCheckbox.java
+ 	(JCheckBox): Override painting flags.
+ 	* javax/swing/DefaultButtonModel.java: Conform to sun.
+ 	* javax/swing/JComponent.java (paint): Fill with background color
+ 	if available.
+ 	(processComponentKeyEvent)
+ 	(processFocusEvent)
+ 	(processKeyEvent)
+ 	(processMouseMotionEvent): Remove event-consuming empty methods.
+ 	(getUIClassID): Return "ComponentUI" not "JComponent"
+ 	* javax/swing/JFrame.java: Remove some debugging chatter.
+ 	(JFrame): Subscribe to window events.
+ 	* javax/swing/JRadioButton.java
+ 	(JRadioButton): Override painting flags.
+ 	* javax/swing/JRootPane.java
+ 	(JRootPane): Set background from UIDefaults.
+ 	* javax/swing/JToggleButton.java
+ 	(ToggleButtonModel): New inner class.
+ 	(JToggleButton): Override layout alighment.
+ 	* javax/swing/SwingUtilities.java:
+ 	(getLocalBounds): Return width and height, not x and y.
+ 	(calculateInnerArea): Use local bounds, not bounds.
+ 	(layoutCompoundLabel): Provide overridden form.
+ 	(layoutCompoundLabel): Correct bugs.
+ 	* javax/swing/UIDefaults.java: Correct comment.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java:
+ 	Move most logic into defaults, external listener.
+ 	(paintIcon): Implement icon painting.
+ 	(paint): Fix state painting to conform to changes in model.
+ 	* javax/swing/plaf/basic/BasicCheckBoxUI.java:
+ 	Remove most dead/wrong methods.
+ 	(getDefaultIcon): Return defaults.getIcon("CheckBox.icon").
+ 	* javax/swing/plaf/basic/BasicIconFactory.java:
+ 	(DummyIcon): New class.
+ 	(getMenuItemCheckIcon)
+ 	(getMenuItemArrowIcon)
+ 	(getMenuArrowIcon)
+ 	(getCheckBoxMenuItemIcon)
+ 	(getRadioButtonMenuItemIcon)
+ 	(createEmptyFrameIcon): Return DummyIcons, not null.
+ 	(getCheckBoxIcon): Implement an icon that looks like sun's.
+ 	(getRadioButtonIcon): Implement an icon that looks like sun's.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Fix impossible values, add some missing.
+ 	* javax/swing/plaf/basic/BasicPanelUI.java (gap): Remove field.
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java:
+ 	Remove most dead/wrong methods.
+ 	(icon): New field.
+ 	(getDefaultIcon): New method.
+ 	* javax/swing/plaf/basic/BasicToggleButtonUI.java:
+ 	Remove most dead/wrong methods.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(getDefaults): Return super.getDefaults(), not BasicDefaults.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect):
+ 	Implement "clearing" as drawing, when on pixmap drawables.
+ 
+ 	* javax/swing/JButton.java (getUIClassID):
+ 	* javax/swing/JCheckBox.java (getUIClassID):
+ 	* javax/swing/JEditorPane.java (getUIClassID):
+ 	* javax/swing/JLabel.java (getUIClassID):
+ 	* javax/swing/JList.java (getUIClassID):
+ 	* javax/swing/JOptionPane.java (getUIClassID):
+ 	* javax/swing/JPanel.java (getUIClassID):
+ 	* javax/swing/JPasswordField.java (uiClassID):
+ 	* javax/swing/JRadioButton.java (getUIClassID):
+ 	* javax/swing/JRootPane.java (getUIClassID):
+ 	* javax/swing/JScrollPane.java (getUIClassID):
+ 	* javax/swing/JTabbedPane.java (getUIClassID):
+ 	* javax/swing/JToggleButton.java (getUIClassID):
+ 	* javax/swing/JTree.java (getUIClassID):
+ 	* javax/swing/JViewport.java (getUIClassID):
+ 	* javax/swing/text/JTextComponent.java (getUIClassID):
+ 	Return "fooUI" not "Jfoo"
+ 
+ 2004-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(setReuseAddress): Use Boolean.valueOf() instead of creating a new
+ 	Boolean object.
+ 	(setBroadcast): Likewise.
+ 	* java/net/MulticastSocket.java
+ 	(setLoopbackMode): Likewise.
+ 	* java/net/ServerSocket.java
+ 	(setReuseAddress): Likewise.
+ 	* java/net/Socket.java
+ 	(setTcpNoDelay): Likewise.
+ 	(setSoLinger): Likewise.
+ 	(setOOBInline): Likewise.
+ 	(setKeepAlive): Likewise.
+ 	(setReuseAddress): Likewise.
+ 	* java/net/URLConnection.java
+ 	(setContentHandler): Replace == with equals().
+ 	* java/net/URLStreamHandler.java
+ 	(hostSEquals): Fix checking host addresses.
+ 	(toExternalForm): Dont check protocol for null. We know already its
+ 	not null.
+ 
+ 2004-02-10  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java
+ 	(calcCompSize): Invisible components get zero dimensions.
+ 	* java/awt/Button.java
+ 	(setLabel): Set actionCommand.
+ 	* java/awt/Component.java
+ 	(show): Invalidate component and parent container.
+ 	(hide): Likewise.
+ 
+ 2004-02-10  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(GridBagLayout): New private field, internalcomptable.
+ 	(lookupInternalConstraints): New method.
+ 	(ArrangeGrid): Use components' MINSIZE. Use internalcomptable.
+ 	(GetLayoutInfo): Reimplement.
+ 	(calcCellSizes): Ignore rows/columns with size 0.
+ 
+ 2004-02-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java
+ 	(setHandle): Use java.awt.Component.getPeer() instead of
+ 	java.awt.Component.peer directly.
+ 
+ 2004-02-10  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java
+ 	(gtkSetLabel): New native method definition.
+ 	(setLabel): Use gtkSetLabel.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetLabel): New method.
+ 
+ 2004-02-10  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* include/powerpc-signal.h: Revert 2004-01-21 change.
+ 	(INIT_SEGV, INIT_FPE): Provide powerpc64 versions.  Check return
+ 	from syscall for ppc32 versions.
+ 
+ 2004-02-08  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/ByteBuffer.java (shiftDown):  New helper method.
+ 	* java/nio/natDirectByteBufferImpl.cc (shiftDown):  New implementation.
+ 	* java/nio/ByteBufferImpl.java (compact):  Use new shiftDown method.
+ 	* sava/nio/ByteBufferHelper.java:  Remove redundant 'final' specifiers.
+ 	Pass ByteOrder parameter to most methods, since the underlying
+ 	ByteBuffer's order isn't always what we should use.
+ 	* java/nio/ByteBufferImpl.java:  Pass byte-order various places.
+ 	* java/nio/DirectByteBufferImpl.java:  Likewise.
+ 	Use ByteBufferHelper methods.
+ 	* java/nio/MappedByteBufferImpl.java:  Likewise.
+ 	(compact):  Use shiftDown.
+ 	* java/nio/CharViewBufferImpl.java (<init>):  Pass byte-order.
+ 	(get, put):  Use ByteBufferHelper.
+ 	(compact):  Use new shiftDown method.
+ 	(duplicate(boolean)):  New helper method.
+ 	(duplicate, asReadOnlyBuffer):  Use it.
+ 	(order):  Return endian field.
+ 	* java/nio/DoubleViewBufferImpl.java:  Likewise.
+ 	* java/nio/FloatViewBufferImpl.java:  Likewise.
+ 	* java/nio/IntViewBufferImpl.java:  Likewise.
+ 	* java/nio/LongViewBufferImpl.java:  Likewise.
+ 	* java/nio/ShortViewBufferImpl.java:  Likewise.
+ 	* java/nio/CharViewBufferImpl.java (subsequence):  Redundant test.
+ 	* java/nio/DirectByteBufferImpl.java (shiftDown):  New native method.
+ 	(compact):  Re-implement using shiftDown.
+ 
+ 2004-02-08  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* include/x86_64-signal.h: Fix typo.
+ 
+ 2004-02-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* include/i386-signal.h (MAKE_THROW_FRAME): Add volatile
+ 	qualifier to _regs.
+ 	(HANDLE_DIVIDE_OVERFLOW): Likewise.
+ 
+ 2004-02-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(currentClassLoader): Reverted to old version of this method.
+ 
+ 2004-02-06  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java: Made all calls
+ 	to dumpElement[ln] conditional on dump flag. (readObject): Changed to
+ 	use cached info from ObjectStreamClass. (readClassDescriptor):
+ 	Cache more information in ObjectStreamClass. (processResolution,
+ 	readFields): Use cached info from ObjectStreamClass.
+ 	(newObject): Throw exception instead of returning null for failure.
+ 	(getField, getMethod, callReadMethod, setBooleanField, setByteField,
+ 	setCharField, setDoubleField, setFloatField, setIntField,
+ 	setLongField, setShortField, setObjectField, readObjectParams):
+ 	Removed. (dumpElement, dumpElementln): Removed dump flag condition
+ 	check.
+ 	* java/io/ObjectStreamField.java (hasReadMethod): Removed.
+ 	(setClass): Added call to cacheMethods() (findMethod): New method.
+ 	(cacheMethods): New method. (ObjectStreamClass): Added call to
+ 	cacheMethods(). (setFields): Cache fields. (getClassUID): Use
+ 	AccessController.doPrivileged to invoke setAccessible.
+ 	(readObjectMethod, readResolveMethod, realClassIsSerializable,
+ 	realClassIsExternalizable, fieldMapping, firstNonSerializableParent):
+ 	New fields.
+ 	* java/io/ObjectStreamField.java (ObjectStreamField): New constructor.
+ 	(ObjectStreamField): Removed FIXME workaround. (getTypeString,
+ 	isPrimitive): Made safe for cases where type == null.
+ 	(setBooleanField, setByteField, setCharField, setShortField,
+ 	setIntField, setLongField, setFloatField, setDoubleField,
+ 	setObjectField): New methods.
+ 
+ 2004-02-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (getFont): Return a default font
+ 	instead of null.
+ 
+ 	* java/awt/Scrollbar.java (next_scrollbar_number): New field.
+ 	(Scrollbar (int, int, int, int, int)): Make default page
+ 	increment 10.
+ 	(setValues): Only call peer.setValues if one of the values has
+ 	changed.
+ 	(generateName): New method.
+ 	(getUniqueLong): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(range_scrollbar): Remove structure.
+ 	(post_adjustment_event): Remove function.
+ 	(post_change_event): Accept jobject argument.
+ 	(create): Cast jints to gdoubles.  Round scrollbar values to the
+ 	nearest integer.  Clamp min, max and value settings.
+ 	(connectJObject): Connect hook to widget->window.
+ 	(connectSignals): Remove range_scrollbar structure variables.
+ 	Remove "move-slider" connection.  Pass global peer reference to
+ 	"value-changed" callback.
+ 	(setLineIncrement): Cast jint value to gdouble.
+ 	(setPageIncrement): Likewise.
+ 	(setValues): Likewise.  Clamp min, max and value settings.
+ 
+ 2004-02-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractCellEditor.java
+ 	(getCellEditorValue): Removed.
+ 	* javax/swing/Box.java: Reformated.
+ 	(serialVersionUID): New field.
+ 	* javax/swing/ButtonGroup.java:
+ 	Removed some weird whitespace.
+ 	* javax/swing/CellEditor.java: Reformated.
+ 	* javax/swing/CellRendererPane.java
+ 	(serialVersionUID): New field.
+ 	(AccessibleCellRendererPaneserialVersionUID): New field.
+ 	* javax/swing/DefaultListModel.java
+ 	(serialVersionUID): New field.
+ 	* javax/swing/JEditorPane.java
+ 	(serialVersionUID): New field.
+ 	(setPage): Throws IOException.
+ 	(addHyperlinkListener): Implemented.
+ 	(removeHyperlinkListener): Implemented.
+ 	(getHyperlinkListener): New method.
+ 	* javax/swing/JFileChooser.java
+ 	(serialVersionUID): New field.
+ 	(AccessibleJFileChooser.serialVersionUID): New field.
+ 	(addActionListener): Implemented.
+ 	(removeActionListener): Implemented.
+ 	(getActionListeners): New method.
+ 	* javax/swing/JFormattedTextField.java
+ 	(serialVersionUID): New field.
+ 	(AbstractFormatter.serialVersionUID): New field.
+ 	(clone): Throws CloneNotSupportedException
+ 	(setEditValid): Add missing argument.
+ 	(stringToValue): Throws ParseExcpetion.
+ 	(valueToString): Throws ParseException.
+ 	(commitEdit): Throws ParseException.
+ 	* javax/swing/JLabel.java
+ 	(serialVersionUID): New field.
+ 	* javax/swing/JList.java
+ 	(serialVersionUID): New field.
+ 	(addListSelectionListener): Reformated.
+ 	(removeListSelectionListener): Reformated.
+ 	(getListSelectionListeners): New method.
+ 	* javax/swing/colorchooser/AbstractColorChooserPanel.java:
+ 	Reformated.
+ 	(serialVersionUID): New field.
+ 	* javax/swing/table/AbstractTableModel.java
+ 	(getValueAt): Removed.
+ 	(getColumnCount): Removed.
+ 	(getRowCount): Removed.
+ 
+ 2004-02-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(imageFlavor): Javadoc added.
+ 	(javaJVMLocalObjectType): Fixed.
+ 
+ 2004-02-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Thread.java
+ 	(Thread): Reordered.
+ 	(setContextClassLoader): Fixed javadoc comment.
+ 	(setPriority): Reordered.
+ 	(yield): Reordered.
+ 	(initialize_native): Reordered.
+ 	(gen_name): Reordered.
+ 
+ 2004-02-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Thread.java: Reordered fields, reformated much code,
+ 	no functional changes, some variables renamed, javadoc comments
+ 	merged.
+ 
+ 2004-02-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/Deflater.java,
+ 	java/util/zip/DeflaterOutputStream.java,
+ 	java/util/zip/GZIPInputStream.java:
+ 	Reformated and javadoc comments merged from classpath.
+ 
+ 2004-02-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIOServerSocket.java
+ 	(impl): Unused, removed.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(finnishConnect): Don't throw NoConnectionPendingException if not
+ 	connected or no connection pending.
+ 
+ 2004-02-02  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/SwingUtilities.java: Many new functions.
+ 	* java/awt/Container.java (LightweightDispatcher): Reimplement.
+ 	* javax/swing/basic/BasicGraphicsUtils.java
+ 	(getPreferredButtonSize): Start layout from top-left corner.
+ 
+ 2004-02-04  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* java/awt/geom/AffineTransform.java:
+ 	Corrected comments on the field definitions for
+ 	m11 and m10.
+ 	(shear): Fixed few errors that caused shear
+ 	transformation to be performed incorrectly.
+ 	(createInverse): Fixed to return correct
+ 	inverse of the given matrix.
+ 
+ 2004-02-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natPosixProcess.cc (startProcess): Handle case where
+ 	PATH or LD_LIBRARY_PATH is not set in parent environment.
+ 
+ 2004-02-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	java/awt/BorderLayout.java, java/awt/CardLayout.java,
+ 	java/awt/CheckboxGroup.java, java/awt/Choice.java,
+ 	java/awt/Component.java, java/awt/Container.java,
+ 	java/awt/FontMetrics.java, java/awt/GridBagLayout.java,
+ 	java/awt/LayoutManager2.java, java/awt/List.java,
+ 	java/awt/Menu.java, java/awt/MenuBar.java,
+ 	java/awt/MenuItem.java, java/awt/Polygon.java,
+ 	java/awt/Rectangle.java, java/awt/ScrollPane.java,
+ 	java/awt/Scrollbar.java, java/awt/TextArea.java,
+ 	java/awt/TextField.java,
+ 	java/awt/image/renderable/RenderContext.java,
+ 	javax/swing/JApplet.java: Fix handling of alias methods, where a
+ 	method has been deprecated in favour of a new one with the same
+ 	funtion but a different name.  Put the method implementation in
+ 	the deprecated method and have the new method call the
+ 	deprecated one.  Make all other code call the new method.
+ 
+ 2004-02-03  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(inChannelOperation): New field.
+ 	(isInChannelOperation): New accessor.
+ 	(setInChannelOperation): New modifier.
+ 	(receive): Use capacity() - position() of destination
+ 	buffer instead of remaining(). Set and reset our "in
+ 	channel operation indicator" before and after delegating
+ 	the receive to our datagram socket. Removed testing code.
+ 	Update destination buffer's current position if it is
+ 	backed by a byte array (hasArray() is true).
+ 	(send): Set and reset our "in channel operation indicator"
+ 	before and after delegating the send to our datagram socket.
+ 	Removed testing code. Update source buffer's current position
+ 	if it is backed by a byte array (hasArray() is true).
+ 	* gnu/java/nio/SocketChannelImpl.java (read(ByteBuffer)):
+ 	Use capacity() - position() of destination buffer instead
+ 	of remaining().
+ 	* java/net/DatagramSocket.java (receive): Don't throw an
+ 	IllegalBlockingModeException if we have a non-blocking
+ 	channel which initiated this operation.
+ 	(send): Likewise.
+ 
+ 2004-02-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* configure.in: Add pkgconfig check for glib and gthread.
+ 	* configure: Regenerate.
+ 
+ 2004-02-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/jvm.h (MAYBE_UNUSED): New macro tp mark probably unused
+ 	arguments.
+ 	* jni.cc (_Jv_LookupJNIMethod): Mark 'args_size' unused.
+ 	* verify.cc (debug_print): Mark 'fmt' unused.
+ 
+ 2004-01-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in: Use pkg-config to check for GTK 2.2 and libart 2.1.
+ 	* configure: Regenerated.
+ 	* glib-2.0.m4: Removed.
+ 	* gtk-2.0.m4: Removed.
+ 	* libart.m4: Removed.
+ 	* pkg.m4: New file.
+ 
+ 2004-01-30  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/net/PlainSocketImpl.java
+ 	(inChannelOperation): New field.
+ 	(isInChannelOperation): New accessor.
+ 	(setInChannelOperation): New modifier.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(accept): Set and reset our server socket's PlainSocketImpl's
+ 	"in channel operation" indicator before and after delegating
+ 	the accept to our server socket.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(connect): Set and reset our socket's PlainSocketImpl's "in channel
+ 	operation" indicator before and after delegating the operation to
+ 	our socket.
+ 	(read): Likewise.
+ 	(write): Likewise.
+ 	* java/net/ServerSocket.java (implAccept): Don't throw an
+ 	IllegalBlockingModeException if we have a non-blocking
+ 	channel which initiated this accept operation.
+ 	* java/net/Socket.java (connect): Don't throw an
+ 	IllegalBlockingModeException if we have a non-blocking
+ 	channel which initiated this connect operation.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(configureBlocking): Only call implConfigureBlocking() if
+ 	the desired blocking mode is different from our current one.
+ 
+ 2004-01-29  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* java/io/BufferedReader.java (sbuf): New field.
+ 	(readLine): Use String.valueOf instead of new String() as per
+ 	Per Bothner's suggestion. Use instance sbuf field instead of a
+ 	local StringBuffer instance.
+ 	* java/io/InputStreamReader.java (read(char[],int,int)): Pass the
+ 	caller's buffer to refill().
+ 	(read(void)): Pass our internal work buffer to refill if our
+ 	input queue is empty.
+ 	(refill): Changed return type to int. Use the specified buffer
+ 	instead of our work buffer as per Bryce McKinlay's suggestion.
+ 	Return the number of characters read or -1 for EOF.
+ 
+ 2004-01-29  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/awt/xlib/XCanvasPeer.java (handleEvent): Implemented.
+ 
+ 2004-01-29  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* Makefile.am: Added gnu/awt/xlib/XFontPeer.java.
+ 	* Makefile.in: Re-generated.
+ 	* gnu/awt/xlib/XFontPeer.java: New file.
+ 	* gnu/awt/xlib/XGraphics.java (setFont): Test for null font.
+ 	(setClip): Commented out debug printout.
+ 	* gnu/awt/xlib/XToolkit.java: Change superclass to ClasspathToolkit.
+ 	(getFontPeer): Return XFontPeer.
+ 	(getLocalGraphicsEnvironment): New method.
+ 	(getClasspathFontPeer): New method.
+ 	(createFont): New method.
+ 
+ 2004-01-29  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java (getTransform): Never
+ 	return null.
+ 
+ 2004-01-29  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(gtkLayoutSetVisible): New method
+ 	(setMenuBar): Hide layout before setting MenuBar
+ 	and reshow it after.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(gtkLayoutSetVisible): Hide or show the Gtk Layout.
+ 
+ 2004-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/ClassHelper.java
+ 	(getPackagePortion): Removed.
+ 
+ 2004-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(listenerList): Initalize globally.
+ 	(ancestor_list): Removed.
+ 	(veto_list): Removed.
+ 	(change_list): Removed.
+ 	(get_veto_list): Removed.
+ 	(get_change_list): Removed.
+ 	(get_ancestor_list): Removed.
+ 	(removeAncestorListener): Reimplemented.
+ 	(removePropertyChangeListener): Likewise.
+ 	(removeVetoableChangeListener): Likewise.
+ 	(addAncestorListener): Likewise.
+ 	(addPropertyChangeListener): Likewise.
+ 	(addVetoableChangeListener): Likewise.
+ 	(getListeners): New method.
+ 	(getAncestorListeners): Likewise.
+ 	(getVetoableChangeListeners): Likewise.
+ 	(fireVetoableChange): Throws PropertyVetoException.
+ 	* javax/swing/JEditorPane.java
+ 	(JEditorPane): Throws IOException.
+ 
+ 2004-01-28  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(create): Set the default foreground color to
+ 	java.awt.SystemColor.windowText.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java,
+ 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java:
+ 	Reindented to merge with classpath.
+ 
+ 2004-01-27  David Jee  <djee@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(addExposeFilter): Handle GtkFramePeer separately.
+ 	(removeExposeFilter): Likewise.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(getOutputStream): Fixed typo.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Class.java
+ 	(getConstructor): Removed SecurityException from throws clause.
+ 	(_getConstructors): Likewise.
+ 	(getConstructors): Likewise.
+ 	(getDeclaredConstructor): Likewise.
+ 	(getDeclaredClasses): Likewise.
+ 	(getDeclaredConstructors): Likewise.
+ 	(getDeclaredField): Likewise.
+ 	(getDeclaredMethod): Likewise.
+ 	(getDeclaredMethods): Likewise.
+ 	(getField): Likewise.
+ 	(getMethod): Likewise.
+ 	(getMethods): Likewise.
+ 
+ 2004-01-27  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(removeMenuBarPeer): Remove MenuBarPeer argument.
+ 	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
+ 	(dispose): Call native method.
+ 	* java/awt/Frame.java (setMenuBar): Create and remove
+ 	MenuBar peers only if the Frame has a peer.
+ 	(addNotify): Create the MenuBar peer if one exists.
+ 	(removeNotify): Remove MenuBar peer if one exists.
+ 	* java/awt/Menu.java: Fix imports.
+ 	(addNotify): Don't use full class name.
+ 	(removeNotify): Call removeNotify on all children.
+ 	* java/awt/MenuBar.java (removeNotify): Call
+ 	removeNotify on all children.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(removeMenuBarPeer): Remove MenuBarPeer argument.
+ 	Iterate through children to find the Frame's MenuBar.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c
+ 	New file.
+ 	(dispose): Remove references to the MenuComponent.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractCellEditor.java: Reformated.
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(listenerList): Made protected.
+ 	(addListSelectionListener): Javadoc added.
+ 	(removeListSelectionListener): Likewise.
+ 	(getListeners): Likewise.
+ 	(getListSelectionListeners): Likewise.
+ 	* javax/swing/JComboBox.java: Merged copyright year.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java: Merged empty line.
+ 
+ 2004-01-26  Andrew Haley  <aph@redhat.com>
+ 
+ 	* javax/swing/table/JTableHeader.java: Extend JComponent
+ 
+ 2004-01-26  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar):
+ 	Fix spacing.
+ 
+ 2004-01-26  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (moveLayout): New
+ 	method.
+ 	(setMenuBar): Shift the Gtk layout up/down by the MenuBar
+ 	height and let the Layout Managers readjust anything that
+ 	needs to move.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(moveLayout): New method. Shift everything in the Gtk
+ 	layout in the Y direction by an offset.
+ 
+ 2004-01-26  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(handleEvent): Implemented. Handles PaintEvents.
+ 	(paint): Implemented. Use GTK native methods to queue updates
+ 	for this heavyweight peer.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(handleEvent): Removed.
+ 	* java/awt/Component.java
+ 	(paint): Implemented. Explictly paint the heavyweight peer.
+ 	(update): Clear the background for heavyweight components.
+ 	(paintAll): No need to call peer.paint() anymore.
+ 	(processEvent): Don't process PaintEvents here. It's now done in
+ 	the peer's handleEvent().
+ 	(processPaintEvent): Removed.
+ 	* java/awt/Container.java
+ 	(paint): No need to call super.paint(). Visit heavyweight
+ 	children as well.
+ 	(update): Don't clear the background here.  It's done in
+ 	Component.update().
+ 	(visitChildren): Added check to not recurse into Containers.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(filter_expose_event_handler): New method.  Filter unwanted
+ 	expose events while painting heavyweight peers.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
+ 	New method. Connect filter and block pre_event_handler.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
+ 	New method. Disconnect filter and unblock pre_event_handler.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetQueueDrawArea):
+ 	New method. Invalidate and update given area.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Add checks for unwanted expose events.
+ 
+ 2004-01-26  David Jee  <djee@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(find_bg_color_widget): For GtkButton, return its child.
+ 
+ 2004-01-26  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (menuBarHeight): Mark
+ 	private.
+ 	(setMenuBar): Grab MenuBar height and change insets.
+ 	(setBounds): Account for MenuBar height.
+ 	(postInsetsChangedEvent): Ditto.
+ 	(postSizeAllocateEvent): Remove.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(menubar_resize_cb): Remove
+ 	(setMenuBarPeer): Remove callback.
+ 	(getMenuBarHeight): Use size requisition instead of
+ 	allocation.
+ 
+ 2004-01-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/TextArea.java: Fix indentation.  Flesh out javadocs.
+ 	(getMinimumSize (int, int)): Fix FIXME -- return Dimension (0,0)
+ 	when peer is null.
+ 	(setColumns): Remove FIXME -- peer will retrieve number of
+ 	columns by calling getColumns.
+ 	(setRows): Likewise for number of rows.
+ 	(next_text_number): New field.
+ 	(paramString): Fix param string.
+ 	(generateName): New method.
+ 	(getUniqueLong): New method.
+ 
+ 2004-01-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (checkImage): Inform
+ 	image observer of image loading status.
+ 	(getImage (String)): Start image production.
+ 	(getImage (URL)): Likewise.
+ 
+ 2004-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Class.java: Imports reworked, reformated.
+ 	(Class): Javadoc added.
+ 	(forName): Likewise.
+ 	(getClasses): Likewise.
+ 	(getClassLoader): Likewise.
+ 	(getComponentType): Likewise.
+ 	(getConstructor): Likewise.
+ 	(getConstructors): Likewise.
+ 	(getDeclaredConstructor): Likewise.
+ 	(getDeclaredClasses): Likewise.
+ 	(getDeclaredConstructors): Likewise.
+ 	(getDeclaredField): Likewise.
+ 	(getDeclaredMethod): Likewise.
+ 	(getDeclaredMethods): Likewise.
+ 	(getDeclaringClass): Likewise.
+ 	(getField): Likewise.
+ 	(getInterfaces): Likewise.
+ 	(getMethod): Likewise.
+ 	(getMethods): Likewise.
+ 	(getModifiers): Likewise.
+ 	(getName): Likewise.
+ 	(getResource): Likewise.
+ 	(getResourceAsStream): Likewise.
+ 	(getSigners): Likewise.
+ 	(setSigners): Likewise.
+ 	(getSuperclass): Likewise.
+ 	(isArray): Likewise.
+ 	(isAssignableFrom): Likewise.
+ 	(isInstance): Likewise.
+ 	(isInterface): Likewise.
+ 	(isPrimitive): Likewise.
+ 	(newInstance): Likewise.
+ 	(getProtectionDomain): Likewise.
+ 	(toString): Likewise.
+ 	(Class): Moved.
+ 	(initializeClass): Likewise.
+ 	(finalize): Likewise.
+ 
+ 2004-01-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Connection.java
+ 	(hdrHash): Removed.
+ 	(hdrVec): Removed.
+ 	(gotHeaders): Removed.
+ 	(getHeaderField): Removed.
+ 	(getHeaderFields): Removed.
+ 	(getHeaderFieldKey): Removed.
+ 	(getKey): Removed.
+ 	(getField): Removed.
+ 	(getHeaders): Removed.
+ 
+ 2004-01-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am: Added library version to gtk peer lib.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-01-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/InflaterInputStream.java: Merged class documentation
+ 	with classpath.
+ 
+ 2004-01-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* include/powerpc-signal.h: Add #ifndef __powerpc64__ around the
+ 	header.  For __powerpc64__ provide the default-signal.h definitions
+ 	for now.
+ 	* include/x86_64-signal.h [!__x86_64__]: Include java-signal-aux.h
+ 	instead of the dummy definitions.
+ 	* configure.host (x86_64-*): Remove CHECKREFSPEC, add DIVIDESPEC.
+ 	(powerpc64*-*): Remove with_libffi_default.
+ 	Only add -mminimal-toc for 64-bit compilations.
+ 	* configure.in: Use powerpc-signal.h on powerpc64 as well.
+ 	(x86_64-*-linux*): Set SIGNAL_HANDLER_AUX.
+ 	Link SIGNAL_HANDLER_AUX to include/java-signal-aux.h.
+ 	* configure: Rebuilt.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java: Compile fixes.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/VMClassLoader.java: Reworked imports.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java: Reformated.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java:
+ 	(setText): New method.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java:
+ 	Fixed filename in copyright.
+ 	(released): Removed.
+ 	(finalize): New method.
+ 	* gnu/java/nio/natFileLockImpl.cc
+ 	(releaseImpl): Implemented.
+ 	* java/nio/channels/FileChannelImpl.java:
+ 	Reworked imports.
+ 	(lock): Implemented.
+ 	(lockImpl): New method.
+ 	(tryLock): Implemented.
+ 	(tryLockImpl): New method.
+ 	* java/nio/channels/natFileChannelImpl.cc
+ 	(lockImpl): New method.
+ 	(tryLockImpl): New method.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileDescriptor.java
+ 	(lock): New method.
+ 	(tryLock): New method.
+ 	(unlock): New method.
+ 	* java/io/natFileDescriptorEcos.cc
+ 	(lock): New method.
+ 	(tryLock): New method.
+ 	(unlock): New method.
+ 	* java/io/natFileDescriptorPosix.cc
+ 	(lock): New method.
+ 	(tryLock): New method.
+ 	(unlock): New method.
+ 	* java/io/natFileDescriptorWin32.cc
+ 	(lock): New method.
+ 	(tryLock): New method.
+ 	(unlock): New method.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileDescriptor.java
+ 	(sync): Moved around, added javadoc.
+ 	(valid): Likewise.
+ 	(open): Likewise.
+ 	(write): Likewise.
+ 	(close): Likewise.
+ 	(setLength): Likewise.
+ 	(seek): Likewise.
+ 	(getLength): Likewise.
+ 	(getFilePointer): Likewise.
+ 	(read): Likewise.
+ 	(available): Likewise.
+ 	(finalize): Likewise.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java: Reformated.
+ 	(getPropertyChangeListeners): New method.
+ 	* javax/swing/AbstractCellEditor.java: Reformated.
+ 	(getCellEditorListeners): New method.
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(listenerList): New field.
+ 	(listeners): Removed.
+ 	(get_listeners): Removed.
+ 	(addListSelectionListener): Rewritten.
+ 	(removeListSelectionListener): Rewritten.
+ 	(getListSelectionListeners): New method.
+ 	(getListeners): New method.
+ 	* javax/swing/JComboBox.java: Imports reworked.
+ 	(addActionListener): Implemented.
+ 	(removeActionListener): Implemented.
+ 	(addItemListener): Implemented.
+ 	(removeItemListener): Implemented.
+ 	(addPopupMenuListener): Implemented.
+ 	(removePopupMenuListener): Implemented.
+ 	(getActionListeners): New method.
+ 	(getItemListeners): New method.
+ 	(getPopupMenuListeners): New method.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(connect): Don't initialize bufferedOutputStream if not needed.
+ 	(sendRequest): Set property for content length if content is present.
+ 	Write content only if present.
+ 	(getOutputStream): Check if already connected, dont connect,
+ 	initalize bufferedOutputStream if needed.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileDescriptor.java
+ 	(in, out, err): Added javadoc.
+ 	(static): Merged loading code.
+ 	(fd, position): Moved around.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/doc-files/BitwiseXORComposite-1.png:
+ 	New file.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Class.java,
+ 	java/lang/Object.java,
+ 	java/lang/Thread.java: Merged copyright with classpath.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileDescriptor.java: Merged copyright with classpath to
+ 	start merging this class.
+ 
+ 2004-01-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/13107:
+ 	* testsuite/libjava.lang/pr13107_2.xfail: New file.
+ 	* testsuite/libjava.lang/pr13107_3.xfail: New file.
+ 	* testsuite/libjava.lang/pr13107_3.java: New file.
+ 	* testsuite/libjava.lang/pr13107_3.out: New file.
+ 	* testsuite/libjava.lang/pr13107_2.java: New file.
+ 	* testsuite/libjava.lang/pr13107_2.out: New file.
+ 	* testsuite/libjava.lang/pr13107.java: New file.
+ 	* testsuite/libjava.lang/pr13107.out: New file.
+ 	* verify.cc (jsr_ptrs): Removed.
+ 	(entry_points): Likewise.
+ 	(struct subr_info): Likewise.
+ 	(struct subr_entry_info): Likewise.
+ 	(type_val::unused_by_subroutine_type): Likewise.
+ 	(type::merge): Don't handle unused_by_subroutine_type.
+ 	(type::print): Likewise.
+ 	(state::flags): Removed.
+ 	(state::subroutine): Likewise.
+ 	(state::seen_subrs): Likewise.
+ 	(state::NO_STACK): Likewise.
+ 	(state::FLAG_CHANGED, state::FLAG_UNUSED): Likewise.
+ 	(state): Updated all methods.
+ 	(state::clean_subrs): Removed.
+ 	(state::state): Removed `ret_semantics' flag.
+ 	(state::copy): Likewise.
+ 	(state::add_subr): Removed.
+ 	(state::enter_subroutine): Likewise.
+ 	(type::set_return_address): New method.
+ 	(handle_jsr_insn): Set return address on the type.  Always
+ 	invalidate PC after call.
+ 	(check_nonrecursive_call): Removed.
+ 	(~_Jv_BytecodeVerifier): Updated.
+ 	(branch_prepass): Removed special handling of jsr.
+ 	(note_branch_target): Likewise.
+ 	(get_subroutine): Removed.
+ 	(state::merge): Don't merge subroutines and don't handle
+ 	NO_STACK.  Removed ret_semantics and jsr_semantics arguments.
+ 	(state::note_variable): Removed.
+ 	(state::is_unmerged_ret_state): Likewise.
+ 	(state::print): Updated.
+ 	(set_variable): Likewise.
+ 	(merge_into): Renamed from push_jump_merge.  Removed ret_semantics
+ 	and jsr_semantics arguments.  Updated for new reverification
+ 	list.
+ 	(pop_jump): Rewrote.
+ 	(construct_primitive_array_type): Updated.
+ 	(state::next): Removed.
+ 	(INVALID_STATE): New define.
+ 	(state::INVALID): Removed.
+ 	(state::NO_NEXT): New value.
+ 	(state::pc, state::next): New fields.
+ 	(state::get_pc): New method.
+ 	(next_verify_pc): Removed.
+ 	(next_verify_state): New field.
+ 	(verify_instructions_0): Always check for falling off end.
+ 	(linked): New type.
+ 	(linked_utf8): Removed.
+ 	(states): Changed type.
+ 	(type::state_mergeable_p): New method.
+ 	(state::state_mergeable_p): Likewise.
+ 	(handle_ret_insn): Removed most code.
+ 	(state::reverify): New method.
+ 	(add_new_state): Likewise.
+ 	(state::set_pc): Likewise.
+ 
+ 2004-01-22  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	PR java/13733
+ 	* testsuite/libjava.compile/PR13733.java: New file.
+ 	* testsuite/libjava.compile/PR13733.xfail: New file.
+ 
+ 2004-01-22  Arnaud Vandyck  <arnaud.vandyck@ulg.ac.be>
+ 	    Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(DefaultTableCellRenderer): Added javadoc for the class and for
+ 	the constructor, Border instance, create an EmptyBorder.
+ 	(UIResource): Removed the comment at the end of the class
+ 	(setForeground): New method.
+ 	(setBackground): New method.
+ 	(updateUI): New method.
+ 	(getTableCellRendererComponent): Rewritten with the help of
+ 	dvholten and Stephane Meslin-Weber.
+ 	(validate): New method.
+ 	(repaint): New method.
+ 	(firePropertyChange): New method.
+ 	(setValue): New method.
+ 
+ 2004-01-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(connectJObject): Replace printf calls with g_assert statements.
+ 	Move property-notify-event signal connection to ...
+ 	(connectSignals): Connect property-notify-event signal.  Iterate
+ 	through the vbox's children to find layout.
+ 
+ 2004-01-22  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java:
+ 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java:
+ 	Predicate static initialization on GtkToolkit.useGraphics2D().
+ 	* java/awt/Component.java (processPaintEvent): Consume event.
+ 	* javax/swing/AbstractButton.java: Reimplement, document.
+ 	* javax/swing/DefaultButtonModel.java: Reimplement, document.
+ 	* javax/swing/JComponent.java (paint): Use double buffer.
+ 	(listenerList): Enable member.
+ 	* javax/swing/ToggleButtonModel.java: Remove incorrect constructor.
+ 	* javax/swing/JToggleButton.java
+ 	(JToggleButton): Modify model constructor.
+ 	* javax/swing/SwingUtilities.java
+ 	(layoutCompoundLabel): Adjust arithmetic.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java: Reimplement, document.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java
+ 	(getPreferredButtonSize): Include margins in calculation.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals):
+ 	Receive up events from subordinate layout component.
+ 
+ 2004-01-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (show): Set visible to true before
+ 	showing the peer.
+ 
+ 2004-01-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (postConfigureEvent):
+ 	Fix comments.
+ 	(removeMenuBarPeer): Make package private.
+ 	(setMenuBarPeer): Make package private.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(menubar_resize_cb): Mark attributes unused.
+ 	(getMenuBarHeight): ditto.
+ 
+ 2004-01-21  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(LightweightDispatcher.handleEvent): Add an extra check to avoid
+ 	dispatching MOUSE_ENTERED event twice. Translate the point for
+ 	the mouse event target before dispatching the event.
+ 
+ 2004-01-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* Makefile.am (lib_org_w3c_dom_la_LIBADD,
+ 	lib_org_w3c_dom_la_LDFLAGS): New.
+ 	(lib_org_xml_sax_la_LIBADD, lib_org_xml_sax_la_LDFLAGS): New.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2004-01-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (setBounds):
+ 	Calculate proper offsets for heavyweight components packed in
+ 	lightweight containers.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(native create): Add width parameter.
+ 	(create): Calculate text entry width based on current font's
+ 	metrics and number of columns.  Set TextField's font if not
+ 	already set.  Call native create.
+ 	(gtkEntryGetBorderWidth): New native method.
+ 	(gtkEntryGetSize): Remove method.
+ 	(getMinimumSize): Call minimumSize.
+ 	(getPreferredSize): Call preferredSize.
+ 	(minimumSize): Calculate minimum size based on backing
+ 	GtkEntry's borders, font metrics and number of columns.
+ 	(preferredSize): Likewise for preferred size.
+ 	(get_border_width): New static function.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setResizable):
+ 	Override GtkWindowPeer's setResizable method to account for menu
+ 	bar height when setting the frame's size.
+ 
+ 2004-01-19  Matthias Klose  <doko@debian.org>
+ 
+ 	* libtool-version: Increased `current' to 6.
+ 
+ 2004-01-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(connectJObject): Iterate through the vbox's children to find layout.
+ 
+ 2004-01-19  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (invokeAndWait): Use list-aware
+ 	isDispatchThread method to replace wrong test condition.
+ 
+ 2004-01-19  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (pop): Prevent racing condition to add
+ 	events to the queue out of order by acquiring locks in the proper
+ 	order and not by releasing one before acquiring the other.
+ 
+ 2004-01-19  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java (DialogWindow): Make text not
+ 	visible so that dialog can be reused.
+ 
+ 2004-01-19  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (getCurrentEvent): Consider that system
+ 	events may be handled by any queue in the stack.
+ 
+ 2004-01-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight): Added
+ 	MenuBarPeer parameter.
+ 	(removeMenuBarPeer): New native method.
+ 	(setMenuBar): Call remove if menu bar is null. Adjust insets
+ 	appropriately.
+ 	(postSizeAllocateEvent): New method. Called when menu bar size is
+ 	allocated. Adjust insets and redo layout.
+ 	(GtkFramePeer): Set menu bar during frame creation.
+ 	(postConfigureEvent): Adjust position and size to accomodate
+ 	menu bar.
+ 	* java/awt/Frame.java (setMenuBar): addNotify to create menu bar.
+ 	* java/awt/Menu.java (addSeparator): Use peer's addSeparator.
+ 	(addNotify): Create the peer if it doesn't exist and call addNotify
+ 	for the menu's items.
+ 	* java/awt/MenuBar.java (addNotify): Create this menu bar's menus.
+ 	* java/awt/MenuItem.java (addNotify): Create the peer if it
+ 	doesn't exist.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(removeMenuBarPeer): New method. Remove menu bar on the current
+ 	frame.
+ 	(setMenuBarPeer): Add the menu bar to the current frame and the
+ 	callback for size-allocate events on the menu bar.
+ 	(getMenuBarHeight): Add menu bar parameter.
+ 	(menubar_resize_cb): New callback method for postSizeAllocate events.
+ 
+ 	Also: Fix indentation on last ChangeLog entry.
+ 
+ 2004-01-16  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(gtkWidgetGetDimensions): Remove.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(gtkWidgetGetDimensions): Remove.
+ 
+ 2004-01-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Container.java: Typo and indentation fixes.
+ 
+ 	* java/lang/natClassLoader.cc: Moved VMClassLoader methods...
+ 	* java/lang/natVMClassLoader.cc: ...here.  New file.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_source_files): Added natVMClassLoader.cc.
+ 
+ 2004-01-16  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (pre_event_handler):
+ 	Discard GDK_ENTER_NOTIFY related to ungrabs.
+ 
+ 2004-01-16  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (pop): Prevent breaking the chain if pop
+ 	is called for an intermediate queue.
+ 
+ 2004-01-16  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_property_changed_cb): Set id_set.
+ 
+ 2004-01-16  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (GtkComponentPeer): If
+ 	it is a FileDialog and has dimensions of 0 by 0, then the initial
+ 	size is set to size request plus insets.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(gtkWidgetGetDimensions): Override method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(gtkWidgetGetDimensions): Override method. Returns size request plus
+ 	insets.
+ 
+ 2004-01-16  Andrew Haley  <aph@redhat.com>
+ 
+ 	* sysdep/x86-64/locks.h: Don't use in/out memory constraints.
+ 	* sysdep/i386/locks.h: Likewise.
+ 
+ 2004-01-16  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventDispatchThread.java (run): Stop running when
+ 	interrupted.
+ 	* java/awt/EventQueue.java (pop): Stop dispatch thread when done.
+ 	Reset the queue after transferring its contents.
+ 	(push): Start a new dispatch thread if none is running.
+ 
+ 2004-01-16  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	(doPolygon): set fill rule of polygon to
+ 	WIND_EVEN_ODD by default.
+ 
+ 2004-01-15  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	Implemented rendering hints related methods.
+ 	(getDefaultHints): New helper method. Returns
+ 	default rendering hints.
+ 	(walkPath): changed to normalize path if
+ 	the KEY_STROKE_CONTROL key is in "normalize" mode.
+ 	(draw3DRect): changed coordinates of rectangle by +0.5
+ 	if in "normalize" mode.
+ 
+ 2004-01-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (gnu/gcj/runtime/StackTrace.lo): New rule.
+ 	(%.lo: %.java) Filter out StackTrace.lo.
+ 
+ 2004-01-14  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.in: Add in AC_PREREQ(2.13)
+ 	* libltdl/configure.ac: Update to AC_PREREQ(2.57).  Delete
+ 	FIXME comment.
+ 
+ 2004-01-14  Nathan Bryant  <nbryant@optonline.net>
+ 	    Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/12001:
+ 	* gnu/gcj/runtime/VMClassLoader.java (VMClassLoader): Pass empty
+ 	array to superclass.
+ 	(init): Changed interface; add URLs here.
+ 	(initialize): New static method.
+ 	* prims.cc (_Jv_CreateJavaVM): Initialize ClassLoader here...
+ 	(_Jv_RunMain): ... not here.
+ 
+ 2004-01-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/MessageFormat.java:
+ 	Added descriptions to exceptions.
+ 	This fixes PR libgcj/2429.
+ 
+ 2004-01-13  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (isDispatchThread): Do check on top of stack.
+ 	(push): Make sure push is performed at the top of the thread stack.
+ 
+ 2004-01-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(native	create): Add width and height parameters.  Set text
+ 	view's size request according to new parameters.
+ 	(create): Calculate text view size based on current font's
+ 	metrics and number of rows and columns.  Set TextArea's font if
+ 	not already set.  Call native create.
+ 	(getMinimumSize): Call minimumSize.
+ 	(getPreferredSize): Call preferredSize.
+ 	(getHScrollbarHeight): New method.
+ 	(getVScrollbarWidth): New method.
+ 	(minimumSize): Calculate minimum size based on scrollbar
+ 	visibility, scrollbar sizes, font metrics and number of rows and
+ 	columns.
+ 	(preferredSize): Likewise for preferred size.
+ 	(gtkTextGetSize): Remove method.
+ 
+ 2004-01-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(initializeInsets): Remove method.
+ 	(GtkComponentPeer): Initialize insets field.  Remove call to
+ 	initializeInsets.
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (initializeInsets):
+ 	Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (initializeInsets):
+ 	Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
+ 	(latestInsets): Remove field.
+ 	(native create): Add insets parameter.  Call
+ 	window_get_frame_extents.  Set the window's default size and
+ 	size request based on its frame extents.
+ 	(create): Initialize insets.
+ 	(postInsetsChangedEvent): New method.
+ 	(postConfigureEvent): Remove parameters top, left, bottom,
+ 	right.  Remove insets-related logic.
+ 	(connectJObject): Handle property-notify-event.
+ 	(window_get_frame_extents, request_frame_extents,
+ 	property_notify_predicate, window_property_changed_cb): New
+ 	static functions.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Remove insets-related logic for configure
+ 	events.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (gtkInit):
+ 	Update postConfigureEvent signature.
+ 
+ 2004-01-13  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java (DialogWindow): Add WindowAdapter
+ 	to handle Window "Closing" events.
+ 
+ 2004-01-13  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(setBackground): New method. Children with no explicitly-set
+ 	background will be repainted with the parent container's new
+ 	background color.
+ 
+ 2004-01-13  David Jee  <djee@redhat.com>
+ 
+ 	* Makefile.am: Add BitwiseXORComposite.java.
+ 	* Makefile.in: Regenerated.
+ 	* gcj/Makefile.in: Regenerated.
+ 	* include/Makefile.in: Regenerated.
+ 	* testsuite/Makefile.in: Regenerated.
+ 
+ 2004-01-12  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: Fix test program so that it does
+ 	not show modal dialogs twice and so that it allows showing a modal
+ 	dialog from another modal dialog.
+ 
+ 2004-01-12  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/Dialog.java (show): Enable blocking for all modal dialogs
+ 	and run secondary dispatch thread to process event queue while this
+ 	thread is blocked.
+ 
+ 2004-01-12  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/gtk/GdkGraphics2D.java
+ 	(static): Check GtkToolkit before initializing static state.
+ 	(Graphics2D): Don't construct transform with 0.5 unit offset.
+ 
+ 2004-01-12  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* gnu/java/awt/BitwiseXORComposite.java: Add.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(setXORMode): Switch to gnu.java.awt.BitwiseXORComposite.
+ 	(BitwiseXORComposite): Remove inner class.
+ 
+ 2004-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/reflect/TypeSignature.java
+ 	(getEncodingOfClass): Documentation fixed.
+ 	(getClassForEncoding): Give class loader to Class.forName().
+ 	Documentation fixed.
+ 
+ 2004-01-11  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/CompoundEdit.java (serialVersionUID): Added.
+ 
+ 2004-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/undo/StateEditable.java
+ 	(RCSID): Removed redundant modifiers.
+ 
+ 2004-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/EnumSyntax.java
+ 	(getStringTable): Made protected.
+ 	(getEnumValueTable): Likewise.
+ 	* javax/print/attribute/standard/JobKOctetsProcessed.java
+ 	(JobKOctetsProcessed): Don't implement PrintRequestAttribute.
+ 	* javax/print/attribute/standard/JobMediaSheetsCompleted.java
+ 	(JobMediaSheetsCompleted): Made class final.
+ 	* javax/print/attribute/standard/OutputDeviceAssigned.java
+ 	(getName): Fixed typo.
+ 	* javax/print/attribute/standard/RequestingUserName.java
+ 	(serialVersionUID): Fixed value.
+ 
+ 2004-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java,
+ 	javax/swing/plaf/basic/BasicCheckBoxUI.java,
+ 	javax/swing/plaf/basic/BasicListUI.java,
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.java,
+ 	javax/swing/plaf/basic/BasicPanelUI.java,
+ 	javax/swing/plaf/basic/BasicRadioButtonUI.java,
+ 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
+ 	javax/swing/plaf/basic/BasicViewportUI.java:
+ 	Fixed import statements.
+ 
+ 2004-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/image/ImageDecoder.java
+ 	(produce): Made public.
+ 	* gnu/java/awt/peer/GLightweightPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java:
+ 	Reformated.
+ 
+ 2004-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JRadioButtonMenuItem.java,
+ 	javax/swing/JSeparator.java,
+ 	javax/swing/JSplitPane.java,
+ 	javax/swing/JTextPane.java,
+ 	javax/swing/JToolBar.java,
+ 	javax/swing/ListCellRenderer.java,
+ 	javax/swing/ListModel.java,
+ 	javax/swing/MenuElement.java,
+ 	javax/swing/OverlayLayout.java,
+ 	javax/swing/ProgressMonitor.java,
+ 	javax/swing/ProgressMonitorInputStream.java,
+ 	javax/swing/Renderer.java,
+ 	javax/swing/RootPaneContainer.java,
+ 	javax/swing/Scrollable.java,
+ 	javax/swing/SingleSelectionModel.java,
+ 	javax/swing/ToolTipManager.java,
+ 	javax/swing/ViewportLayout.java,
+ 	javax/swing/event/DocumentEvent.java,
+ 	javax/swing/event/SwingPropertyChangeSupport.java,
+ 	javax/swing/event/TreeSelectionEvent.java,
+ 	javax/swing/event/UndoableEditEvent.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/AttributeSet.java,
+ 	javax/swing/text/Caret.java,
+ 	javax/swing/text/ComponentView.java,
+ 	javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/DefaultEditorKit.java,
+ 	javax/swing/text/Document.java,
+ 	javax/swing/text/EditorKit.java,
+ 	javax/swing/text/GapContent.java,
+ 	javax/swing/text/Keymap.java,
+ 	javax/swing/text/MutableAttributeSet.java,
+ 	javax/swing/text/PlainEditorKit.java,
+ 	javax/swing/text/Segment.java,
+ 	javax/swing/text/Style.java,
+ 	javax/swing/text/StyledDocument.java,
+ 	javax/swing/text/StyledEditorKit.java,
+ 	javax/swing/text/TextAction.java,
+ 	javax/swing/text/View.java: Fixed import statements.
+ 
+ 2004-01-08  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JLayeredPane.java: Rewrite to accomodate
+ 	djee@redhat.com's recent inverse ordering of Container elements.
+ 
+ 2004-01-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/ArrayHelper.java
+ 	(equalsArray): Removed.
+ 
+ 2004-01-09  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Resolve
+ 	a Utf8Const field before looking at its class.
+ 
+ 2004-01-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/DocumentName.java,
+ 	javax/print/attribute/standard/JobHoldUntil.java,
+ 	javax/print/attribute/standard/JobMessageFromOperator.java,
+ 	javax/print/attribute/standard/JobName.java,
+ 	javax/print/attribute/standard/JobOriginatingUserName.java,
+ 	javax/print/attribute/standard/OutputDeviceAssigned.java,
+ 	javax/print/attribute/standard/PrinterInfo.java,
+ 	javax/print/attribute/standard/PrinterLocation.java,
+ 	javax/print/attribute/standard/PrinterMakeAndModel.java,
+ 	javax/print/attribute/standard/PrinterMessageFromOperator.java,
+ 	javax/print/attribute/standard/PrinterName.java,
+ 	javax/print/attribute/standard/RequestingUserName.java: New files.
+ 	* Makefile.am (javax_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-01-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java,
+ 	javax/swing/AbstractSet.java,
+ 	javax/swing/Action.java,
+ 	javax/swing/ActionMap.java,
+ 	javax/swing/BoundedRangeModel.java,
+ 	javax/swing/ButtonModel.java,
+ 	javax/swing/CellEditor.java,
+ 	javax/swing/CellRendererPane.java,
+ 	javax/swing/ComboBoxEditor.java,
+ 	javax/swing/DebugGraphics.java,
+ 	javax/swing/DefaultCellEditor.java,
+ 	javax/swing/DefaultCellRenderer.java,
+ 	javax/swing/DefaultComboBoxModel.java,
+ 	javax/swing/DefaultDesktopManager.java,
+ 	javax/swing/DefaultFocusManager.java,
+ 	javax/swing/DefaultListCellRenderer.java,
+ 	javax/swing/Icon.java,
+ 	javax/swing/JButton.java,
+ 	javax/swing/JCheckBoxMenuItem.java,
+ 	javax/swing/JDesktopPane.java,
+ 	javax/swing/JEditorPane.java,
+ 	javax/swing/JMenu.java,
+ 	javax/swing/JPanel.java,
+ 	javax/swing/JPasswordField.java,
+ 	javax/swing/JPopupMenu.java,
+ 	javax/swing/JProgressBar.java: Reworked imports.
+ 
+ 2004-01-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/geom/PathIterator.java
+ 	(WIND_EVEN_ODD): Removed redundant modifiers.
+ 	(WIND_NON_ZERO): Likewise.
+ 	(SEG_MOVETO): Likewise.
+ 	(SEG_LINETO): Likewise.
+ 	(SEG_QUADTO): Likewise.
+ 	(SEG_CUBICTO): Likewise.
+ 	(SEG_CLOSE): Likewise.
+ 	* java/awt/image/SinglePixelPackedSampleModel.java:
+ 	Removed redundant semicolon.
+ 	* java/io/ObjectInputStream.java
+ 	(inputGetObjectStreamClasses): Removed unused variable "ret_val".
+ 	* java/util/logging/Filter.java
+ 	(isLoggable): Removed redundant modifier.
+ 	* java/util/logging/LogManager.java:
+ 	Removed redundant semicolon.
+ 	* java/util/logging/XMLFormatter.java
+ 	(format): Removed unused variable "key".
+ 
+ 2004-01-08  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java (nativeSetFile):
+ 	New name for the former setFile native method.
+ 	(setFile): New method.
+ 	(setDirectory): Implemented.
+ 	(connectSignals): New native method.
+ 	(setFilenameFilter): Improve comment.
+ 	(getGraphics): Comment.
+ 	(gtkHideFileDialog): New method.
+ 	(gtkDisposeFileDialog): New method.
+ 	(gtkSetFilename): New method.
+ 	* java/awt/Dialog.java (show): Block on modal dialogs, but only
+ 	for FileDialog for now.
+ 	(hide): New method.
+ 	(dispose): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialog_create): Replace
+ 	deprecated creation functions.  Make dialog modal.  Add it to the
+ 	window group.
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialog_connectSignals): New
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_gtkFileSelectionSetFilename):
+ 	Rename to...
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile): New
+ 	name.
+ 	(window_closed): New function.
+ 	(ok_clicked): New function.
+ 	(cancel_clicked): New function.
+ 
+ 2004-01-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JLayeredPane.java: Revert changes to standard
+ 	boilerplate, reworked imports.
+ 
+ 2004-01-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/13439:
+ 	* verify.cc (state::merge): Copy changed locals out of subroutine
+ 	in NO_STACK case.
+ 	(state::FLAG_CHANGED): New const.
+ 	(state::FLAG_UNUSED): Likewise.
+ 	(state::local_changed): Removed.  Updated all users.
+ 	(state::flags): New field.
+ 	(state::merge): Added jsr_semantics argument, more logic.
+ 	(push_jump_merge): Added jsr_semantics argument.
+ 	(handle_jsr_insn): Set jsr_semantics on push_jump_merge when
+ 	merging through the jsr instruction.
+ 
+ 2004-01-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* scripts/MakeDefaultMimeTypes.java: Use \n, not
+ 	backslash-newline.
+ 
+ 2004-01-07  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/Container.java (LightweightDispatcher): Implement.
+ 	(visitChild): Reuse graphics object.
+ 	(dispatchEventImpl): Optionally dispatch to lightweight.
+ 	(addNotifyContainerChildren): Build LightweightDispatcher.
+ 
+ 2004-01-07  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(update): Clear only the clipped region, instead of clearing the
+ 	entire Container.
+ 	(visitChildren): Visit children in descending order.
+ 
+ 2004-01-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/reflect/Array.java: Merged documentation with classpath.
+ 
+ 2004-01-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(textIndex): Renamed from index.
+ 	* java/text/CollationKey.java
+ 	(collator): New member.
+ 	(CollationKey): New argument for parent collator.
+ 	(equals): Check for same collator, source string and key array.
+ 	* java/text/RuleBasedCollator.java:
+ 	Reformated.
+ 	(RuleBasedCollator): Don't re-initialize frenchAccents with default
+ 	value.
+ 	(getCollationElementIterator): Rewritten.
+ 	(getCollationKey): Added new argument to CollationKey constructor.
+ 
+ 2004-01-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(blocking): Removed.
+ 	(DatagramChannelImpl): Call configureBlocking().
+ 	(implConfigureBlocking): Dont initialize blocking.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(blocking): Removed.
+ 	(ServerSocketChannelImpl): Call configureBlocking().
+ 	(implConfigureBlocking): Dont initialize blocking.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(blocking): Removed.
+ 	(SocketChannelImpl): Call configureBlocking().
+ 	(implConfigureBlocking): Dont initialize blocking.
+ 	(connect): Use isBlocking().
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(configureBlocking): Use blockingLock() instead of LOCK.
+ 	Set blocking after successfully called implConfigureBlocking().
+ 	(register): Use blockingLock() instead of LOCK.
+ 
+ 2004-01-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java (isBound): Fixed documentation.
+ 
+ 2004-01-07  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/DefaultBoundedRangeModel.java: Documented API.
+ 	(changeEvent): Create event object on demand.
+ 	(DefaultBoundedRangeModel, toString, setValue, setExtent,
+ 	setMinimum, setMaximum, setValueIsAdjusting, setRangeProperties,
+ 	fireStateChanged): Re-written.
+ 	* javax/swing/event/EventListenerList.java: Reformatted, document
+ 	typical usage.
+ 	(toString): Implemented.
+ 	(getListeners): Re-written.
+ 	(remove): Re-written.
+ 	(add): Re-written.
+ 	(NO_LISTENERS): New singleton field.
+ 	(listenerList): Declare as transient; document.
+ 	(serialVersionUID): Document.
+ 	(getListenerCount(Class)): More efficient implementation,
+ 	also accepts null argument.  Improve Javadoc.
+ 	(getListenerCount()): Remove unnecessary cast; docfix.
+ 	* javax/swing/undo/UndoableEditSupport.java:
+ 	Re-format, document.
+ 	(UndoableEditSupport): Set realSource field. Improve documentation.
+ 	(_postEdit): Iterate over cloned listener vector.
+ 	(toString): Don't emit realSource.
+ 	(beginUpdate, endUpdate): Support nested updates.
+ 	(postEdit): Use compound edit if present.
+ 
+ 2004-01-06  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/Container.java (swapComponents): Add forgotten
+ 	function, required for JLayeredPane change.
+ 
+ 2004-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java: Reformated.
+ 	(CollationElementIterator): Changed order of arguments.
+ 	* java/text/RuleBasedCollator.java
+ 	(RuleBasedCollator): Merged class documentation.
+ 	(CollationElement): Added documentation.
+ 	(compare): Reformated, renamed arguments.
+ 	(equals): Likewise.
+ 	(getCollationElementIterator): Likewise.
+ 	(getCollationKey): Likewise.
+ 
+ 2004-01-06  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JLayeredPane.java: Fix semantics, add javadocs.
+ 
+ 2004-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java:
+ 	Reformated copyright.
+ 	(hdrHash): Removed.
+ 	(hdrVec): Removed.
+ 	(gotHeaders): Removed.
+ 	(getHeaderField): Removed.
+ 	(getHeaderField): Removed.
+ 	(getHeaderFieldKey): Removed.
+ 	(getKey): Removed.
+ 	(getField): Removed.
+ 	(getHeaders): Removed.
+ 
+ 2004-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/DateTimeAtCompleted.java,
+ 	javax/print/attribute/standard/DateTimeAtCreation.java,
+ 	javax/print/attribute/standard/DateTimeAtProcessing.java,
+ 	javax/print/attribute/standard/JobImpressionsCompleted.java,
+ 	javax/print/attribute/standard/JobKOctets.java,
+ 	javax/print/attribute/standard/JobKOctetsProcessed.java,
+ 	javax/print/attribute/standard/JobMediaSheetsCompleted.java,
+ 	javax/print/attribute/standard/JobPrioritySupported.java: New files.
+ 	* Makefile.am (javax_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java
+ 	(contentHandler): Removed.
+ 	(locale): Removed.
+ 	(getHeaderFields): Return an empty map instead of null.
+ 	(getContent): Connect if needed, renamed "cType" to "type" and
+ 	"contentHandler" to "ch" and made it a local variable.
+ 	(getPermission): Don't use package in class name.
+ 	(setDefaultRequestProperty): Fixed typo in documentation.
+ 	(initializeDateFormats): Made locale a local variable.
+ 
+ 2004-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Package.java
+ 	(getPackage): Get the current class loader directly.
+ 	* java/lang/SecurityManager.java
+ 	(currentLoadedClass): Dont iterate over class contexts.
+ 	(classLoaderDepth): Don't check class loaders if everything is allowed.
+ 
+ 2004-01-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Set all insets to 0 when a Configure event
+ 	is received for a GtkPlug.
+ 	* gnu/java/awt/EmbeddedWindow.java (window_id): Rename handle.
+ 	Make handle long, not int.
+ 	(EmbeddedWindow()): New constructor.
+ 	(EmbeddedWindow(int)): Rename window_id to handle.  Make handle
+ 	long, not int.
+ 	(setHandle): New method.
+ 	(getHandle): Return long, not int.
+ 	* gnu/java/awt/peer/EmbeddedWindowPeer.java (embed): New method
+ 	declaration.
+ 	* gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
+ 	(create(long)): Take long parameter, not int.  Cast gtk_plug_new
+ 	argument to GdkNativeWindow.
+ 	(construct): New method.
+ 	(embed): New method.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
+ 	(create(int, int)): New method.
+ 	(create): Call new create method.
+ 	(gtkScrolledWindowNew, gtkScrolledWindowSetSize): Remove
+ 	methods.
+ 	(childResized): Remove native implementation.  Implement in
+ 	Java.
+ 	(getHScrollbarHeight, getVScrollbarWidth): Call
+ 	gtk_widget_size_request to get scrollbar dimensions.
+ 	* java/awt/ScrollPane.java (getViewportSize): Reimplement.  Only
+ 	call getVScrollbarWidth and getHScrollbarHeight when vertical
+ 	and horizontal scrollbars respectively are needed.
+ 	(doLayout): Enlarge child if it is smaller than the viewport.
+ 
+ 2004-01-05  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/Dialog.java (constructor): Accept null title as per spec.
+ 	* java/awt/FileDialog.java (constructor): Throw exception on invalid
+ 	argument as per spec.
+ 
+ 2004-01-05  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/Choice.java (add): Leave posting of ItemEvents to peer.
+ 	(insert): Ditto.
+ 	(remove): Ditto.  Also, Check for valid argument.
+ 	(removeAll): Use peer interface method.
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (nativeAdd): New name for
+ 	native add function.
+ 	(nativeRemove): New name for native remove function.
+ 	(getHistory): New native function.
+ 	(constructor): Generate ItemEvent.
+ 	(add): Ditto, if selection is changed.
+ 	(remove): Ditto, ditto.
+ 	(removeAll): Add implementation.
+ 	(handleEvent): Remove.  Dead code.
+ 	(choicePostItemEvent): Add comment.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append): Add comments.
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_add): Rename to...
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeAdd): New name.  Add
+ 	comments and fix condition to change selection.
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_remove): Rename to...
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemove): New name.  Add
+ 	remove all capability.
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_getHistory): New function.
+ 	(item_activate): Add cast to remove compiler warning.
+ 
+ 2004-01-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(getPreferredSize): Call preferredSize.
+ 	(preferredSize): Call gtkWidgetGetPreferredDimensions.
+ 	(getMinimumSize): Call minimumSize.
+ 	(minimumSize): Call gtkWidgetGetPreferredDimensions.
+ 	(gtkWidgetGetDimensions): Return the peer widget's current size
+ 	request.
+ 	(gtkWidgetGetPreferredDimensions): Return the peer widget's
+ 	natural size request.
+ 
+ 2004-01-05  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Thanks to Brian Gough <bjg@network-theory.com>
+ 	* java/awt/geom/CubicCurve2D.java (solveCubic): Implemented.
+ 	* java/awt/geom/QuadCurve2D.java (solveQuadratic): Re-written.
+ 
+ 2004-01-04  Matthias Klose  <doko@debian.org>
+ 
+ 	* aclocal.m4: Rebuilt using "aclocal -I .".
+ 	* configure: Rebuilt.
+ 
+ 2004-01-03  Per Bothner  <per@bothner.com>
+ 
+ 	* java/util/Date.java (parse):  Fix a number of problems.
+ 	(skipParens):  Remove no-longer-needed method.
+ 
diff -Nrcpad gcc-4.0.2/libjava/HACKING gcc-4.1.0/libjava/HACKING
*** gcc-4.0.2/libjava/HACKING	Mon Aug 30 18:45:10 2004
--- gcc-4.1.0/libjava/HACKING	Wed Sep 28 21:43:23 2005
*************** explained in this HACKING file. Please a
*** 7,42 ****
  
  --
  
! A lot of the standard library files come from the GNU Classpath project.
! <http://www.gnu.org/software/classpath/>
! The libgcj and Classpath project have officially merged, but the merge
! is not yet complete. Our eventual goal is for Classpath to be an upstream
! source provider for libgcj, however it will be some time before this becomes
! reality: libgcj and Classpath have different implementations of many core
! java classes. In order to merge them, we need to select the best (most
! efficient, cleanest) implementation of each method/class/package, resolve
! any conflicts created by the merge, and test the final result.
  
! The merged files can be recognized by the standard Classpath copyright
! comments at the top of the file. If you make changes to these files
! then you should also check in the fix to Classpath.  For small changes
! it may be easier to send a patch to the classpath mailinglist.  For
! large changes, if you have direct write access to the libgcj tree,
! then you will also need to get a Classpath account and do the work
! yourself.
! <http://mail.gnu.org/mailman/listinfo/classpath/>
! <mailto:classpath@gnu.org>
  
! If you merge a libgcj class with a classpath class then you must update the
! copyright notice at the top of the file so others can see that this is a
! shared libgcj/classpath file.
  
  --
  
! If you need to add new java files to libgcj then you have to edit the
! Makefile.am file in the top (libjava) directory. And run automake.
  
- Tom Tromey adds:
  If you add a class to java.lang, java.io, or java.util
  (including sub-packages, like java.lang.ref).
  
--- 7,90 ----
  
  --
  
! libgcj uses GNU Classpath as an upstream provider.  Snapshots of
! Classpath are imported into the libgcj source tree.  Some classes are
! overridden by local versions; these files still appear in the libgcj
! tree.
  
! To import a new release:
  
! - Check out a classpath snapshot
!   I use 'cvs export' for this.  Make a tag to ensure future hackers
!   know exactly what revision was checked out; tags are of the form
!   'libgcj-import-DATE'.
! - Use auto* to create configure, Makefile.in, etc
!   You have to make sure to use the gcc libtool.m4 and gcc lt* scripts
!   cd .../classpath
!   cp ../../lt* .
!   cp ../../config.sub ../../config.guess .
!   aclocal -I m4 -I ../..
!   autoconf
!   autoheader
!   automake
!   rm -rf autom4te.cache
! - Test everything first.  The simplest way to do this is by overlaying
!   the checked out classpath on your gcc tree and then doing a build.
! - Use 'cvs import' to import.  The vendor tag is 'CLASSPATH'.  For the
!   release tag, if this is a released classpath version, use something
!   like 'classpath-import-VERSION'; otherwise something like
!   'classpath-import-DATE'.
!   Be sure to use -ko and -I\!
! - Remove any files that were deleted in Classpath
! - Run 'scripts/makemake.tcl > sources.am' in the source tree
! - Run automake for libgcj
! 
! Over time we plan to remove as many of the remaining divergences as
! possible.
! 
! File additions and deletions require running scripts/makemake.tcl
! before running automake.
  
  --
  
! In general you should not make any changes in the classpath/
! directory.  Changes here should come via imports from upstream.
! However, there are two (known) exceptions to this rule:
! 
! * In an emergency, such as a bootstrap breakage, it is ok to commit a
!   patch provided that the problem is resolved (by fixing a compiler
!   bug or fixing the Classpath bug upstream) somehow and the resolution
!   is later checked in (erasing the local diff).
! 
! * On a release branch to fix a bug, where a full-scale import of
!   Classpath is not advisable.
! 
! --
! 
! You can develop in a GCC tree using a CVS checkout of Classpath, most
! of the time.  (The exceptions are when an incompatible change has been
! made in Classpath and some core part of libgcj has not yet been
! updated.)
! 
! The way to set this up is very similar to importing a new version of
! Classpath into the libgcj tree.  In your working tree:
! 
! * cd gcc/libjava; rm -rf classpath
! * cvs co classpath
! * cd classpath
!   Now run the auto tools as specified in the import process; then
!   cd ..
! * Run 'scripts/makemake.tcl > sources.am' in the source tree
! * Run automake for libgcj
! 
! Now you should be ready to go.
! 
! If you are working in a tree like this, you must remember to run
! makemake.tcl and automake whenever you update your embedded classpath
! tree.
! 
! --
  
  If you add a class to java.lang, java.io, or java.util
  (including sub-packages, like java.lang.ref).
  
*************** If you add a class to java.lang, java.io
*** 45,55 ****
  * Go to the `namespace java' line, and delete that entire block (the   
    entire contents of the namespace)
  
! * Then insert the output of `perl ../scripts/classes.pl' into the file
!   at that point.
  
  If you're generating a patch there is a program you can get to do an
  offline `cvs add' (it will fake an `add' if you don't have write
  permission yet).  Then you can use `cvs diff -N' to generate the
  patch.  See http://www.red-bean.com/cvsutils/
- 
--- 93,104 ----
  * Go to the `namespace java' line, and delete that entire block (the   
    entire contents of the namespace)
  
! * Then insert the output of `perl scripts/classes.pl' into the file
!   at that point.  This must be run from the build tree, in
!   <build>/classpath/lib; it uses the .class file name to determine
!   what to print.
  
  If you're generating a patch there is a program you can get to do an
  offline `cvs add' (it will fake an `add' if you don't have write
  permission yet).  Then you can use `cvs diff -N' to generate the
  patch.  See http://www.red-bean.com/cvsutils/
diff -Nrcpad gcc-4.0.2/libjava/LIBGCJ_LICENSE gcc-4.1.0/libjava/LIBGCJ_LICENSE
*** gcc-4.0.2/libjava/LIBGCJ_LICENSE	Tue Jan 22 22:39:46 2002
--- gcc-4.1.0/libjava/LIBGCJ_LICENSE	Thu Jun 30 03:22:09 2005
*************** exception statement from your version.
*** 22,26 ****
  
  You should have received a copy of the GNU General Public License
  along with libjava; see the file COPYING.  If not, write to the
! Free Software Foundation, 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA.
--- 22,26 ----
  
  You should have received a copy of the GNU General Public License
  along with libjava; see the file COPYING.  If not, write to the
! Free Software Foundation, 51 Franklin Street, Fifth Floor,
! Boston, MA 02110-1301, USA.
diff -Nrcpad gcc-4.0.2/libjava/Makefile.am gcc-4.1.0/libjava/Makefile.am
*** gcc-4.0.2/libjava/Makefile.am	Wed Aug 17 12:56:34 2005
--- gcc-4.1.0/libjava/Makefile.am	Sat Feb  4 01:09:11 2006
***************
*** 2,79 ****
  
  AUTOMAKE_OPTIONS = foreign subdir-objects
  
! ACLOCAL_AMFLAGS = -I . -I ../config
! 
! ## Garbage collector conditionals.
! if USING_BOEHMGC
! BOEHMGC_SRC = boehm.cc
! else
! BOEHMGC_SRC =
! endif
! 
! if USING_NOGC
! NOGC_SRC = nogc.cc
! else
! NOGC_SRC =
! endif
! 
! ## Broken backtrace conditional.
! if SUPPLY_BACKTRACE
! BACKTRACE_SRC = sysdep/dwarf2-backtrace.cc
! else
! BACKTRACE_SRC =
! endif
! 
! ## Conditionals for platform-specific helper functions.
! if USING_POSIX_PLATFORM
! POSIX_PLATFORM_SRC = posix.cc
! else
! POSIX_PLATFORM_SRC =
! endif
! 
! if USING_WIN32_PLATFORM
! WIN32_PLATFORM_SRC = win32.cc
! else
! WIN32_PLATFORM_SRC =
! endif
! 
! if USING_ECOS_PLATFORM
! ECOS_PLATFORM_SRC = posix.cc
! else
! ECOS_PLATFORM_SRC =
! endif
! 
! ## Conditionals for platform-specific thread support.
! if USING_POSIX_THREADS
! POSIX_THREAD_SRC = posix-threads.cc
! else
! POSIX_THREAD_SRC =
! endif
! 
! if USING_WIN32_THREADS
! WIN32_THREAD_SRC = win32-threads.cc
! else
! WIN32_THREAD_SRC =
! endif
  
! if USING_NO_THREADS
! NO_THREAD_SRC = no-threads.cc
! else
! NO_THREAD_SRC =
! endif
  
! ## Testsuite conditional.
  if TESTSUBDIR
! SUBDIRS = $(DIRLTDL) testsuite gcj include external
! else
! SUBDIRS = $(DIRLTDL) gcj include external
! endif
! 
! ## Darwin uses the jcr section, but doesn't use crtstuff.
! if USING_DARWIN_CRT
! DARWIN_CRT_SRC = darwin.cc
! else
! DARWIN_CRT_SRC = 
  endif
  
  # write_entries_to_file - writes each entry in a list
--- 2,15 ----
  
  AUTOMAKE_OPTIONS = foreign subdir-objects
  
! ACLOCAL_AMFLAGS = -I . -I .. -I ../config
  
! # May be used by various substitution variables.
! gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
  
! SUBDIRS = $(DIRLTDL) gcj include classpath
  if TESTSUBDIR
! SUBDIRS += testsuite
  endif
  
  # write_entries_to_file - writes each entry in a list
*************** target_noncanonical = @target_noncanonic
*** 94,122 ****
  ## What gets installed, and where.
  ##
  
  if XLIB_AWT
! cond_xlib_ltlibrary = lib-gnu-awt-xlib.la
! else
! cond_xlib_ltlibrary =
  endif
  
  if GTK_AWT
! cond_gtk_ltlibrary = lib-gnu-java-awt-peer-gtk.la
! cond_gtk_jawt_ltlibrary = libjawt.la
! else
! cond_gtk_ltlibrary =
! cond_gtk_jawt_ltlibrary =
  endif
  
! toolexeclib_LTLIBRARIES = libgcj.la libgij.la \
!     $(cond_gtk_ltlibrary) $(cond_gtk_jawt_ltlibrary) $(cond_xlib_ltlibrary)
! toolexecmainlib_DATA = libgcj.spec
  
  pkgconfigdir = $(libdir)/pkgconfig
  pkgconfig_DATA = libgcj.pc
  
  jardir = $(datadir)/java
! jar_DATA = libgcj-@gcc_version@.jar
  
  if JAVA_HOME_SET
  JAVA_HOME_DIR = $(JAVA_HOME)
--- 30,55 ----
  ## What gets installed, and where.
  ##
  
+ toolexeclib_LTLIBRARIES = libgcj.la libgij.la
+ toolexecmainlib_DATA = libgcj.spec
+ 
  if XLIB_AWT
! toolexeclib_LTLIBRARIES += lib-gnu-awt-xlib.la
  endif
  
  if GTK_AWT
! toolexeclib_LTLIBRARIES += lib-gnu-java-awt-peer-gtk.la libgcjawt.la
  endif
  
! if QT_AWT
! toolexeclib_LTLIBRARIES += lib-gnu-java-awt-peer-qt.la
! endif
  
  pkgconfigdir = $(libdir)/pkgconfig
  pkgconfig_DATA = libgcj.pc
  
  jardir = $(datadir)/java
! jar_DATA = libgcj-$(gcc_version).jar
  
  if JAVA_HOME_SET
  JAVA_HOME_DIR = $(JAVA_HOME)
*************** secdir = $(libdir)/security
*** 131,142 ****
  ## Where to install default logging property file.
  propdir = $(libdir)
  
- ## Where the standard .db file is found.
- dbexecdir = $(libdir)/gcj-@gcc_version@
  ## Name of the default .db.
  db_name = classmap.db
  ## Compiler specific component of the .db file
! db_pathtail = gcj-@gcc_version@/$(db_name)
  
  ## For now, only on native systems.  FIXME.
  if NATIVE
--- 64,73 ----
  ## Where to install default logging property file.
  propdir = $(libdir)
  
  ## Name of the default .db.
  db_name = classmap.db
  ## Compiler specific component of the .db file
! db_pathtail = gcj-$(gcc_version)/$(db_name)
  
  ## For now, only on native systems.  FIXME.
  if NATIVE
*************** ZIP = @ZIP@
*** 162,171 ****
  ## compiles.
  GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated
  
! GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
! LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
  
! JAVAC = $(GCJ_WITH_FLAGS) -C
  
  GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  
--- 93,104 ----
  ## compiles.
  GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated
  
! extra_ldflags_libjava = @extra_ldflags_libjava@
  
! GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) \
!           $(LDFLAGS) -o $@
! LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) \
!           $(LDFLAGS) $(extra_ldflags_libjava) -o $@
  
  GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  
*************** AM_GCJFLAGS = \
*** 201,212 ****
  	@LIBGCJ_JAVAFLAGS@ \
  	-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
  	--encoding=UTF-8 \
! 	-Wno-deprecated
  
- if USING_GCC
- AM_CFLAGS = @LIBGCJ_CFLAGS@ $(WARNINGS)
- else
  AM_CFLAGS = @LIBGCJ_CFLAGS@
  endif
  
  ## Extra CFLAGS used for JNI C sources shared with GNU Classpath.
--- 134,144 ----
  	@LIBGCJ_JAVAFLAGS@ \
  	-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
  	--encoding=UTF-8 \
! 	-Wno-deprecated -fbootstrap-classes
  
  AM_CFLAGS = @LIBGCJ_CFLAGS@
+ if USING_GCC
+ AM_CFLAGS += $(WARNINGS)
  endif
  
  ## Extra CFLAGS used for JNI C sources shared with GNU Classpath.
*************** JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS
*** 217,293 ****
  
  LIBFFIINCS = @LIBFFIINCS@
  
! AM_CPPFLAGS = -I$(top_srcdir) -Iinclude -I$(top_srcdir)/include \
  	$(GCINCS) $(THREADINCS) $(INCLTDL) \
  	$(GCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS)
  
! BOOTCLASSPATH = $(here)'$(CLASSPATH_SEPARATOR)'$(srcdir)'$(CLASSPATH_SEPARATOR)'$(srcdir)/external/w3c_dom'$(CLASSPATH_SEPARATOR)'$(srcdir)/external/sax
  
  ## ################################################################
  
- # Files for which we build .lo files
- all_native_compiled_source_files = \
-     $(java_source_files) \
-     $(built_java_source_files) \
-     $(xlib_java_source_files)
- 
- # Files for which we build .class files
- # It *must* begin with $(all_native_compiled_source_files)
- all_java_source_files = \
-     $(all_native_compiled_source_files) \
-     $(gtk_awt_peer_source_files) \
-     $(gnu_xml_source_files) \
-     $(javax_imageio_source_files) \
-     $(javax_xml_source_files) \
-     $(gnu_java_beans_source_files) \
-     gnu/gcj/tools/gcj_dbtool/Main.java
- 
- EXTRA_DIST = $(all_java_source_files)
- 
- # Build dependencies between java, class and lo files.  They are included
- # below, together with automatically-generated dependencies between Java
- # files.
- #
- # Dependencies from Java to .class files
- # --------------------------------------
- # Each directory's filelist file depends on the corresponding Java source files.
- # The stamp file depends on the filelist (using a `Static Pattern Rule').
- # Each class file depends on the its directory's .stamp file.  This reflects
- # the fact that 1) all classfiles are compiled in one go when the .stamp file
- # is built and 2) anything which depends on a particular .class file must wait
- # until its directory is processed and the .stamp file is created.
- #
- # Dependencies from Java to .lo files
- # -----------------------------------
- # As above, each directory's filelist file depends on the corresponding Java
- # source files, and the stamp file depends on the filelist.  For native
- # compilation, the lo file depends on the stamp file (also using a `Static
- # Pattern Rule').  So, when one Java file changes, the filelist file is
- # updated, the stamp file rule builds the .class files, and the .lo file rule
- # recompiles to native code.
- Makefile.deps: $(srcdir)/Makefile.in
- 	@: $(call write_entries_to_file,$(all_java_source_files),files.tmplist)
- 	echo 's,^\(.*\)/\([^/]*\)\.java$$,\1.list: &\' > tmpsed
- 	echo '\1/\2.class: \1.stamp,' >> tmpsed
- 	sed -ftmpsed files.tmplist > Makefile.deps
- 	rm files.tmplist tmpsed
- 
- all_native_compiled_dirs = $(sort $(patsubst %/, %, $(dir $(all_native_compiled_source_files))))
- all_java_dirs = $(sort $(patsubst %/, %, $(dir $(all_java_source_files))))
- all_java_lo_files = $(all_native_compiled_dirs:=.lo)
- all_java_deps_files = $(all_java_dirs:=.deps)
- all_java_stamp_files = $(all_java_dirs:=.stamp)
- all_java_filelist_files = $(all_java_dirs:=.list)
- 
- # In the future these may be defined manually, if we decide to split libgcj.so
- # into multiple shared libraries.  For now, everything but xlib goes into
- # all_libgcj_lo_files
- all_xlib_lo_files = gnu/gcj/xlib.lo gnu/awt/xlib.lo
- all_libgcj_lo_files = $(filter-out $(all_xlib_lo_files), $(all_java_lo_files))
- 
- # Include automatically generated dependencies between Java source files.
- -include Makefile.deps $(all_java_deps_files)
- 
  all_property_files = $(property_files) \
      java/util/logging/logging.properties
  
--- 149,165 ----
  
  LIBFFIINCS = @LIBFFIINCS@
  
! AM_CPPFLAGS = -I$(top_srcdir) \
! 	-Iinclude -I$(top_srcdir)/include \
! 	-I$(top_srcdir)/classpath/include \
! 	-I$(top_srcdir)/classpath/native/fdlibm \
  	$(GCINCS) $(THREADINCS) $(INCLTDL) \
  	$(GCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS)
  
! BOOTCLASSPATH = $(here)/classpath/lib
  
  ## ################################################################
  
  all_property_files = $(property_files) \
      java/util/logging/logging.properties
  
*************** libgij_la_LIBADD = -L$(here)/.libs libgc
*** 303,330 ****
  libgij_la_LDFLAGS = -rpath $(toolexeclibdir) \
          -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC)
  
! # Work around libtool wanting to do piece-wise linking with -r.  Using a
! # convenience library suddenly invokes the --whole-archive path instead.
! # This allows the build to succeed for targets that allocate multiple got
! # subsections in the linker, such as Alpha and MIPS.
! libgcj0_convenience_la_SOURCES = prims.cc jni.cc exception.cc \
  	link.cc defineclass.cc interpret.cc verify.cc \
! 	$(nat_source_files) $(math_c_source_files) \
! 	$(BOEHMGC_SRC) $(NOGC_SRC) \
! 	$(BACKTRACE_SRC) \
! 	$(POSIX_PLATFORM_SRC) $(WIN32_PLATFORM_SRC) $(ECOS_PLATFORM_SRC) \
! 	$(DARWIN_CRT_SRC) \
! 	$(POSIX_THREAD_SRC) $(WIN32_THREAD_SRC) $(NO_THREAD_SRC)
! libgcj0_convenience_la_LIBADD = \
! 	$(all_libgcj_lo_files) \
! 	gnu/gcj/runtime/StackTrace.lo \
! 	gnu-xml.lo javax-imageio.lo \
! 	javax-xml.lo gnu-java-beans.lo \
! 	external/sax/libsax-gcj.la \
! 	external/w3c_dom/libw3c-gcj.la
! libgcj0_convenience_la_DEPENDENCIES = $(libgcj0_convenience_la_LIBADD)
  
! noinst_LTLIBRARIES = libgcj0_convenience.la
  
  ## Objects from C++ sources in subdirs.
  nat_files = $(nat_source_files:.cc=.lo)
--- 175,220 ----
  libgij_la_LDFLAGS = -rpath $(toolexeclibdir) \
          -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC)
  
! libgcj_la_SOURCES = prims.cc jni.cc exception.cc stacktrace.cc \
  	link.cc defineclass.cc interpret.cc verify.cc \
! 	java/lang/Class.java java/lang/Object.java \
! 	$(nat_source_files)
  
! if USING_BOEHMGC
! libgcj_la_SOURCES += boehm.cc
! endif
! 
! if USING_NOGC
! libgcj_la_SOURCES += nogc.cc
! endif
! 
! if SUPPLY_BACKTRACE
! libgcj_la_SOURCES += sysdep/dwarf2-backtrace.cc
! endif
! 
! if USING_POSIX_PLATFORM
! libgcj_la_SOURCES += posix.cc
! endif
! 
! if USING_WIN32_PLATFORM
! libgcj_la_SOURCES += win32.cc
! endif
! 
! if USING_DARWIN_CRT
! libgcj_la_SOURCES += darwin.cc
! endif
! 
! if USING_POSIX_THREADS
! libgcj_la_SOURCES += posix-threads.cc
! endif
! 
! if USING_WIN32_THREADS
! libgcj_la_SOURCES += win32-threads.cc
! endif
! 
! if USING_NO_THREADS
! libgcj_la_SOURCES += no-threads.cc
! endif
  
  ## Objects from C++ sources in subdirs.
  nat_files = $(nat_source_files:.cc=.lo)
*************** libgcj_la_LDFLAGS = -rpath $(toolexeclib
*** 337,347 ****
  	$(LIBLTDL) $(SYS_ZLIBS) \
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
  libgcj_la_LIBADD = \
! 	libgcj0_convenience.la \
! 	$(LIBFFI) $(ZLIBS) $(GCLIBS) $(propertyo_files)
! libgcj_la_SOURCES = 
! libgcj_la_DEPENDENCIES = libgcj-@gcc_version@.jar \
! 	java/lang/fdlibm.h java/lang/ieeefp.h java/lang/mprec.h \
  	$(LIBLTDL) $(libgcj_la_LIBADD)
  libgcj_la_LINK = $(LIBLINK)
  
--- 227,239 ----
  	$(LIBLTDL) $(SYS_ZLIBS) \
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
  libgcj_la_LIBADD = \
! 	classpath/native/fdlibm/libfdlibm.la \
! 	$(all_packages_source_files:.list=.lo) \
! 	$(bc_objects) \
! 	$(propertyo_files) \
! 	$(LIBFFI) $(ZLIBS) $(GCLIBS)
! libgcj_la_DEPENDENCIES = libgcj-$(gcc_version).jar \
! 	$(all_packages_source_files:.list=.lo) \
  	$(LIBLTDL) $(libgcj_la_LIBADD)
  libgcj_la_LINK = $(LIBLINK)
  
*************** $(db_name): gcj-dbtool$(EXEEXT)
*** 356,581 ****
  ## not available.
  	./gcj-dbtool -n $(db_name) || touch $(db_name)
  
- # Gtk/Cairo JNI sources.
- if GTK_CAIRO
- gtk_cairo_c_source_files = \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
- else
- gtk_cairo_c_source_files = 
- endif
- 
- ## Gtk JNI sources.
- gtk_c_source_files = \
- $(gtk_cairo_c_source_files) \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c	\
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c \
- jni/gtk-peer/gthread-jni.c \
- jni/gtk-peer/gtk_jawt.c \
- jni/classpath/native_state.c
- 
- ## Java sources for Gtk peers.
- gtk_awt_peer_source_files = \
- gnu/java/awt/peer/gtk/GdkTextLayout.java \
- gnu/java/awt/peer/gtk/GdkFontMetrics.java \
- gnu/java/awt/peer/gtk/GdkFontPeer.java \
- gnu/java/awt/peer/gtk/GdkGlyphVector.java \
- gnu/java/awt/peer/gtk/GdkGraphics.java \
- gnu/java/awt/peer/gtk/GdkGraphics2D.java \
- gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java \
- gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java \
- gnu/java/awt/peer/gtk/GdkPixbufDecoder.java \
- gnu/java/awt/peer/gtk/GdkRobotPeer.java \
- gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java \
- gnu/java/awt/peer/gtk/GtkButtonPeer.java \
- gnu/java/awt/peer/gtk/GtkCanvasPeer.java \
- gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java	\
- gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java \
- gnu/java/awt/peer/gtk/GtkCheckboxPeer.java \
- gnu/java/awt/peer/gtk/GtkChoicePeer.java \
- gnu/java/awt/peer/gtk/GtkClipboard.java	\
- gnu/java/awt/peer/gtk/GtkComponentPeer.java \
- gnu/java/awt/peer/gtk/GtkContainerPeer.java \
- gnu/java/awt/peer/gtk/GtkDialogPeer.java \
- gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java \
- gnu/java/awt/peer/gtk/GtkFileDialogPeer.java \
- gnu/java/awt/peer/gtk/GtkFramePeer.java	\
- gnu/java/awt/peer/gtk/GtkGenericPeer.java \
- gnu/java/awt/peer/gtk/GtkImage.java \
- gnu/java/awt/peer/gtk/GtkImagePainter.java \
- gnu/java/awt/peer/gtk/GtkLabelPeer.java	\
- gnu/java/awt/peer/gtk/GtkListPeer.java \
- gnu/java/awt/peer/gtk/GtkMenuBarPeer.java \
- gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java	\
- gnu/java/awt/peer/gtk/GtkMenuItemPeer.java \
- gnu/java/awt/peer/gtk/GtkMenuPeer.java \
- gnu/java/awt/peer/gtk/GtkOffScreenImage.java \
- gnu/java/awt/peer/gtk/GtkPanelPeer.java	\
- gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java \
- gnu/java/awt/peer/gtk/GtkScrollPanePeer.java \
- gnu/java/awt/peer/gtk/GtkScrollbarPeer.java \
- gnu/java/awt/peer/gtk/GtkTextAreaPeer.java \
- gnu/java/awt/peer/gtk/GtkTextComponentPeer.java	\
- gnu/java/awt/peer/gtk/GtkTextFieldPeer.java \
- gnu/java/awt/peer/gtk/GtkToolkit.java \
- gnu/java/awt/peer/gtk/GtkWindowPeer.java \
- gnu/java/awt/peer/gtk/GThreadMutex.java \
- gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
- 
- 
- gtk_jni_headers = $(patsubst %.java,jniinclude/%.h,$(subst /,_,$(gtk_awt_peer_source_files)))
- 
- jniinclude/gnu_java_awt_peer_gtk_GdkGraphics.h: gnu/java/awt/peer/gtk/GdkGraphics.java
- jniinclude/gnu_java_awt_peer_gtk_GdkGraphics2D.h: gnu/java/awt/peer/gtk/GdkGraphics2D.java
- jniinclude/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h: gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
- jniinclude/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
- jniinclude/gnu_java_awt_peer_gtk_GtkButtonPeer.h: gnu/java/awt/peer/gtk/GtkButtonPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkCanvasPeer.h: gnu/java/awt/peer/gtk/GtkCanvasPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h: gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h: gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h: gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkChoicePeer.h: gnu/java/awt/peer/gtk/GtkChoicePeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkClipboard.h: gnu/java/awt/peer/gtk/GtkClipboard.java
- jniinclude/gnu_java_awt_peer_gtk_GtkComponentPeer.h: gnu/java/awt/peer/gtk/GtkComponentPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkContainerPeer.h: gnu/java/awt/peer/gtk/GtkContainerPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkDialogPeer.h: gnu/java/awt/peer/gtk/GtkDialogPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h: gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h: gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkFontPeer.h: gnu/java/awt/peer/gtk/GtkFontPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkFramePeer.h: gnu/java/awt/peer/gtk/GtkFramePeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkGenericPeer.h: gnu/java/awt/peer/gtk/GtkGenericPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkImage.h: gnu/java/awt/peer/gtk/GtkImage.java
- jniinclude/gnu_java_awt_peer_gtk_GtkImagePainter.h: gnu/java/awt/peer/gtk/GtkImagePainter.java
- jniinclude/gnu_java_awt_peer_gtk_GtkLabelPeer.h: gnu/java/awt/peer/gtk/GtkLabelPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkListPeer.h: gnu/java/awt/peer/gtk/GtkListPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h: gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h: gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h: gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkMenuPeer.h: gnu/java/awt/peer/gtk/GtkMenuPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkOffScreenImage.h: gnu/java/awt/peer/gtk/GtkOffScreenImage.java
- jniinclude/gnu_java_awt_peer_gtk_GtkPanelPeer.h: gnu/java/awt/peer/gtk/GtkPanelPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h: gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h: gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h: gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkTextComponentPeer.h: gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkToolkit.h: gnu/java/awt/peer/gtk/GtkToolkit.java
- jniinclude/gnu_java_awt_peer_gtk_GtkWindowPeer.h: gnu/java/awt/peer/gtk/GtkWindowPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GThreadMutex.h: gnu/java/awt/peer/gtk/GThreadMutex.java
- jniinclude/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h: gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
- jniinclude/gnu_java_awt_peer_gtk_GdkTextLayout.h: gnu/java/awt/peer/gtk/GdkTextLayout.java
- jniinclude/gnu_java_awt_peer_gtk_GdkFontPeer.h: gnu/java/awt/peer/gtk/GdkFontPeer.java
- 
- $(gtk_jni_headers): %.h:
- 	@input=`echo $@ | sed -e 's,jniinclude/,,' -e 's,_,.,g' -e 's,.h$$,,'`; \
- 	echo "$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input"; \
- 	$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input
- 
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkFontPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGraphics2D.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGraphics.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkTextLayout.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkButtonPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCanvasPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkComponentPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkChoicePeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkClipboard.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkComponentPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkFramePeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkGenericPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkImagePainter.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkLabelPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkListPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkPanelPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkTextComponentPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkToolkit.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkWindowPeer.h
- 
- 
  ## For the peer library, DEPENDENCIES need to come before OBJECTS so
  ## that JNI headers are built before JNI C files.
  $(lib_gnu_java_awt_peer_gtk_la_OBJECTS): $(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES)
  
! lib_gnu_java_awt_peer_gtk_la_SOURCES = \
! $(gtk_c_source_files) \
! jni/gtk-peer/gthread-jni.h \
! jni/gtk-peer/gtkpeer.h \
! jni/classpath/native_state.h
! 
! lib_gnu_java_awt_peer_gtk_la_CFLAGS = \
! 	-Ijniinclude -I$(srcdir)/jni/classpath \
! 	-I$(srcdir)/jni/gtk-peer $(PEDANTIC_CFLAGS) $(GTK_CFLAGS) $(LIBART_CFLAGS) \
! 	$(X_CFLAGS) $(CAIRO_CFLAGS) $(PANGOFT2_CFLAGS)
! lib_gnu_java_awt_peer_gtk_la_GCJFLAGS = $(AM_GCJFLAGS) -fjni
! lib_gnu_java_awt_peer_gtk_la_LIBADD = gtk-awt-peer.lo $(GTK_LIBS) $(GLIB_LIBS) $(LIBART_LIBS) $(CAIRO_LIBS) $(PANGOFT2_LIBS)
! lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES = gtk-awt-peer.lo $(gtk_jni_headers) libgcj-@gcc_version@.jar libgcj.la libgcj.spec
  ## The mysterious backslash in the grep pattern is consumed by make.
  lib_gnu_java_awt_peer_gtk_la_LDFLAGS = \
          -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC) $(X_LIBS) -lXtst
  lib_gnu_java_awt_peer_gtk_la_LINK = $(LIBLINK)
  
! libjawt_la_SOURCES = jawt.c
! libjawt_la_CFLAGS = -I$(srcdir)/jni/classpath $(PEDANTIC_CFLAGS) $(X_CFLAGS)
  ## See jv_convert_LDADD.
! libjawt_la_LIBADD = -L$(here)/.libs lib-gnu-java-awt-peer-gtk.la
! libjawt_la_LDFLAGS = \
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version` \
  	$(LIBGCJ_LD_SYMBOLIC)
! libjawt_la_LINK = $(LIBLINK)
  
  lib_gnu_awt_xlib_la_SOURCES = $(xlib_nat_source_files)
! lib_gnu_awt_xlib_la_LIBADD = $(all_xlib_lo_files)
! lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-@gcc_version@.jar libgcj.la libgcj.spec \
  	$(lib_gnu_awt_xlib_la_LIBADD)
  ## We require libstdc++-v3 to be in the same build tree.
  lib_gnu_awt_xlib_la_CPPFLAGS = \
--- 248,296 ----
  ## not available.
  	./gcj-dbtool -n $(db_name) || touch $(db_name)
  
  ## For the peer library, DEPENDENCIES need to come before OBJECTS so
  ## that JNI headers are built before JNI C files.
  $(lib_gnu_java_awt_peer_gtk_la_OBJECTS): $(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES)
  
! lib_gnu_java_awt_peer_gtk_la_SOURCES =
! lib_gnu_java_awt_peer_gtk_la_LIBADD = \
! 	gnu-java-awt-peer-gtk.lo \
! 	classpath/native/jni/gtk-peer/libgtkpeer.la \
! 	$(GTK_LIBS) $(GLIB_LIBS) $(LIBART_LIBS) $(CAIRO_LIBS) $(PANGOFT2_LIBS)
! lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES = gnu-java-awt-peer-gtk.lo \
! 	classpath/native/jni/gtk-peer/libgtkpeer.la \
! 	libgcj-$(gcc_version).jar libgcj.la libgcj.spec
  ## The mysterious backslash in the grep pattern is consumed by make.
  lib_gnu_java_awt_peer_gtk_la_LDFLAGS = \
          -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC) $(X_LIBS) -lXtst
  lib_gnu_java_awt_peer_gtk_la_LINK = $(LIBLINK)
  
! libgcjawt_la_SOURCES = classpath/native/jawt/jawt.c
! libgcjawt_la_CFLAGS = -I$(srcdir)/classpath/native/jni/classpath \
! 	$(PEDANTIC_CFLAGS) $(X_CFLAGS)
  ## See jv_convert_LDADD.
! libgcjawt_la_LIBADD = -L$(here)/.libs lib-gnu-java-awt-peer-gtk.la
! libgcjawt_la_LDFLAGS = \
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version` \
  	$(LIBGCJ_LD_SYMBOLIC)
! libgcjawt_la_LINK = $(LIBLINK)
! 
! lib_gnu_java_awt_peer_qt_la_SOURCES =
! lib_gnu_java_awt_peer_qt_la_LIBADD = \
! 	gnu-java-awt-peer-qt.lo \
! 	classpath/native/jni/qt-peer/libqtpeer.la
! lib_gnu_java_awt_peer_qt_la_DEPENDENCIES = gnu-java-awt-peer-qt.lo \
! 	classpath/native/jni/qt-peer/libqtpeer.la \
! 	libgcj-$(gcc_version).jar libgcj.la libgcj.spec
! ## The mysterious backslash in the grep pattern is consumed by make.
! lib_gnu_java_awt_peer_qt_la_LDFLAGS = \
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC) $(X_LIBS) -lXtst
! lib_gnu_java_awt_peer_qt_la_LINK = $(LIBLINK)
  
  lib_gnu_awt_xlib_la_SOURCES = $(xlib_nat_source_files)
! lib_gnu_awt_xlib_la_LIBADD = gnu/awt/xlib.lo gnu/gcj/xlib.lo
! lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-$(gcc_version).jar \
! 	libgcj.la libgcj.spec \
  	$(lib_gnu_awt_xlib_la_LIBADD)
  ## We require libstdc++-v3 to be in the same build tree.
  lib_gnu_awt_xlib_la_CPPFLAGS = \
*************** lib_gnu_awt_xlib_la_LINK = $(LIBLINK)
*** 592,668 ****
  
  ## Build property files into the library.
  property_files = \
! gnu/regexp/MessagesBundle.properties \
! gnu/regexp/MessagesBundle_fr.properties \
! org/ietf/jgss/MessagesBundle.properties
! 
! propertyo_files = $(property_files:.properties=.properties.lo)
! 
! %.properties.lo: %.properties
! 	$(LTGCJCOMPILE) -o $@ -c $< -Wc,--resource,`echo $@ | sed "s/\.lo$$//"`
! 
! # Compile one directory in one go.  If the files have to be compiled with the
! # binary compatibility ABI, only make the .class here -- the .lo is made
! # elsewhere in this Makefile.
! 
! # For 4.0, we have an exception: gnu/gcj/runtime/StackTrace.java is compiled
! # without optimizing sibcalls, so it is compiled separately from its directory;
! # thus for each dir we build a .lolist file, equal to the .list file except in
! # the gnu.gcj.runtime package.  We have a separate rule below for StackTrace.lo.
! %.list:
! 	@: $(shell $(mkinstalldirs) $(basename $@))
! 	@: $(call write_entries_to_file,$^,$@)
! 	@: $(call write_entries_to_file,$(filter-out $(srcdir)/gnu/gcj/runtime/StackTrace.java, $^),${@:.list=.lolist})
! 
! $(all_java_lo_files): %.lo: %.stamp
! 	$(LTGCJCOMPILE) -o $@ -c @${<:.stamp=.lolist}
  
! $(all_java_stamp_files): %.stamp: %.list
! 	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(BOOTCLASSPATH) -d $(here) \
! 		-MD -MF ${@:.stamp=.deps} @$<
! 	echo timestamp > $@
  
! classes.stamp: $(all_property_files) $(all_java_stamp_files)
! 	echo timestamp > classes.stamp
  
! libgcj-@gcc_version@.jar: classes.stamp
! 	-@rm -f libgcj-@gcc_version@.jar
! ## Note that we explicitly want to include directory information.
! 	(find java gnu javax org -type d -o -type f -name '*.class'; \
! ## Ugly code to avoid "echo -C".  Must separate each entry by a newline
! ## Gross but easy.
! 	for file in $(all_property_files); do \
! 	  echo "x-C" | sed -e 's/^.//'; \
! 	  echo $(srcdir); \
! 	  echo $$file; \
! 	done) | \
! 	  sed -e '/\/xlib/d' -e '/\/\.libs/d' -e '/\/\.deps/d' | \
! 	  $(ZIP) -cfM0E@ $@
! ## Now include the classes from external/.
! 	for dir in sax w3c_dom; do \
! 	  (cd external/$$dir; \
! 	  find org -type f -name '*.class' -print | while read file; do \
! 	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo external/$$dir; \
! 	    echo $$file; \
!           done) | \
! 	  $(ZIP) -ufM0E@ $@; \
! 	done
  
! CLEANFILES = libgcj-@gcc_version@.jar classes.stamp $(all_java_stamp_files) \
  	$(all_java_deps_files) $(all_java_filelist_files)
! DISTCLEANFILES = Makefile.deps native.dirs bytecompile.dirs
  
  mostlyclean-local:
  ## Use libtool rm to remove each libtool object
  	find . -name '*.lo' -print | xargs $(LIBTOOL) rm -f
- ## Remove headers.  We use GNU make trickery because otherwise
- ## the command line is too long.
- 	@: $(foreach header,$(nat_headers) $(xlib_nat_headers) $(gtk_jni_headers),$(shell rm -f '$(header)'))
- 
- clean-local:
- ## Remove every .class file that was created.
- 	find . -name '*.class' -print | xargs rm -f
  
  distclean-local:
  ## Remove every .d file that was created.
--- 307,343 ----
  
  ## Build property files into the library.
  property_files = \
! classpath/resource/org/ietf/jgss/MessagesBundle.properties \
! classpath/resource/java/util/iso4217.properties	\
! classpath/resource/gnu/java/awt/peer/gtk/font.properties \
! classpath/resource/gnu/regexp/MessagesBundle_it.properties \
! classpath/resource/gnu/regexp/MessagesBundle_fr.properties \
! classpath/resource/gnu/regexp/MessagesBundle.properties	\
! classpath/resource/META-INF/services/org.xml.sax.driver	\
! classpath/resource/META-INF/services/javax.xml.parsers.SAXParserFactory	\
! classpath/resource/META-INF/services/javax.xml.parsers.DocumentBuilderFactory \
! classpath/resource/META-INF/services/javax.xml.parsers.TransformerFactory
  
! propertyo_files = $(patsubst classpath/resource/%,%,$(addsuffix .lo,$(property_files)))
  
! $(propertyo_files): %.lo: classpath/resource/%
! 	$(mkinstalldirs) `dirname $@`; \
! 	$(LTGCJCOMPILE) -o $@ -c $< -Wc,--resource,$(@:.lo=)
  
! libgcj-$(gcc_version).jar:
! 	jardir=`dirname $(ZIP)`; \
! 	jardir=`cd $$jardir && pwd`; \
! 	jarname=`basename $(ZIP)`; \
! 	cd classpath/lib; $$jardir/$$jarname -cfM \
! 	    ../../libgcj-$(gcc_version).jar gnu java javax org
  
! CLEANFILES = libgcj-$(gcc_version).jar \
  	$(all_java_deps_files) $(all_java_filelist_files)
! DISTCLEANFILES = native.dirs
  
  mostlyclean-local:
  ## Use libtool rm to remove each libtool object
  	find . -name '*.lo' -print | xargs $(LIBTOOL) rm -f
  
  distclean-local:
  ## Remove every .d file that was created.
*************** distclean-local:
*** 672,694 ****
  clean-nat:
  	rm -f $(nat_files) $(xlib_nat_files)
  
! SUFFIXES = .class .java .h .properties
! 
! ## A special case.  The sibcall optimization can change the number of
! ## frames on the stack, and StackTrace makes assumptions about this
! ## number.
! gnu/gcj/runtime/StackTrace.lo: gnu/gcj/runtime/StackTrace.java
! 	$(LTGCJCOMPILE) -fno-optimize-sibling-calls -o $@ -c $<
  
  ## Pass the list of object files to libtool in a temporary file to
  ## avoid tripping platform command line length limits.
- libgcj.la: $(libgcj_la_OBJECTS) $(libgcj_la_DEPENDENCIES)
- 	@echo Creating list of files to link...
- 	@: $(call write_entries_to_file,$(libgcj_la_OBJECTS),libgcj.objectlist)
- 	$(libgcj_la_LINK) -objectlist libgcj.objectlist \
- 	$(libgcj_la_LIBADD) \
- 	-rpath $(toolexeclibdir) $(libgcj_la_LDFLAGS) $(LIBS)
- 
  lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPENDENCIES)
  	@echo Creating list of files to link...
  	@: $(call write_entries_to_file,$(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_LIBADD),lib_gnu_awt_xlib.objectlist)
--- 347,356 ----
  clean-nat:
  	rm -f $(nat_files) $(xlib_nat_files)
  
! SUFFIXES = .class .java .h .properties .list
  
  ## Pass the list of object files to libtool in a temporary file to
  ## avoid tripping platform command line length limits.
  lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPENDENCIES)
  	@echo Creating list of files to link...
  	@: $(call write_entries_to_file,$(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_LIBADD),lib_gnu_awt_xlib.objectlist)
*************** lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_
*** 697,762 ****
  
  ## ################################################################
  
! ##
! ## Some packages must be built with the binary compatibility ABI.  We
! ## compile each such package into a .so, broken down more or less by
! ## conceptual unit.
! ##
! 
! ## Depend on the sources, even though we are going to compile the
! ## classes.
! gnu-xml.lo: $(gnu_xml_source_files)
! ## FIXME: this is ugly.  We want to make sure the .class files have
! ## been built, but we don't want a real dependency on them as this
! ## would cause our target to be rebuilt whenever any .java file is
! ## touched.
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-xml.lo \
! 		`find gnu/xml -name '*.class' -print | sort -r`
! 
! ## Depend on the sources, even though we are going to compile the
! ## classes.
! javax-imageio.lo: $(javax_imageio_source_files)
! ## FIXME: this is ugly.  We want to make sure the .class files have
! ## been built, but we don't want a real dependency on them as this
! ## would cause our target to be rebuilt whenever any .java file is
! ## touched.
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -findirect-dispatch -c -o javax-imageio.lo \
! 		`find javax/imageio -name '*.class' -print | sort -r`
  
! ## Depend on the sources, even though we are going to compile the
! ## classes.
! javax-xml.lo: $(javax_xml_source_files)
! ## FIXME: this is ugly.  We want to make sure the .class files have
! ## been built, but we don't want a real dependency on them as this
! ## would cause our target to be rebuilt whenever any .java file is
! ## touched.
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -findirect-dispatch -c -o javax-xml.lo \
! 		`find javax/xml -name '*.class' -print | sort -r`
  
! ## Depend on the sources, even though we are going to compile the
! ## classes.
! gnu-java-beans.lo: $(gnu_java_beans_source_files)
! ## FIXME: this is ugly.  We want to make sure the .class files have
! ## been built, but we don't want a real dependency on them as this
! ## would cause our target to be rebuilt whenever any .java file is
! ## touched.
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -findirect-dispatch -c -o gnu-java-beans.lo \
! 		`find gnu/java/beans -name '*.class' -print | sort -r`
  
! ## Depend on the sources, even though we are going to compile the
! ## classes.
! gtk-awt-peer.lo: $(gtk_awt_peer_source_files)
! ## FIXME: this is ugly.  We want to make sure the .class files have
! ## been built, but we don't want a real dependency on them as this
! ## would cause our target to be rebuilt whenever any .java file is
! ## touched.
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -findirect-dispatch -fjni -c -o gtk-awt-peer.lo \
! 		`find gnu/java/awt/peer/gtk -name '*.class' -print | sort -r`
  
  ## ################################################################
  
--- 359,373 ----
  
  ## ################################################################
  
! ## Compiling a list of java sources to a single .o.
  
! %.lo: %.list
! 	$(LTGCJCOMPILE) -c -o $@ -MT $@ -MD -MP -MF $(basename $@).deps @$<
  
! ## ################################################################
  
! ## This pulls in a number of variable and target definitions.
! include sources.am
  
  ## ################################################################
  
*************** gtk-awt-peer.lo: $(gtk_awt_peer_source_f
*** 764,776 ****
  ## How to build header files.
  ##
  
! %.h: %.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) $(basename $<)
  
! ## Header files used when compiling some of the nat* files.
! ordinary_nat_headers = \
!     $(ordinary_java_source_files:.java=.h) \
!     $(built_java_source_files:.java=.h)
  
  inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \
  	java/io/ObjectInputStream$$GetField.h \
--- 375,393 ----
  ## How to build header files.
  ##
  
! ## We have special rules for certain headers.
! omitted_headers = java/lang/ClassLoader.h java/lang/Thread.h \
! 	java/lang/String.h java/lang/reflect/Constructor.h \
! 	java/lang/reflect/Field.h java/lang/reflect/Method.h \
! 	java/lang/reflect/Proxy.h gnu/gcj/runtime/ExtensionClassLoader.h
  
! generic_header_files = $(filter-out $(omitted_headers),$(ordinary_header_files) $(xlib_nat_headers)) \
! 	gnu/gcj/tools/gcj_dbtool/Main.h
! 
! $(generic_header_files): %.h: classpath/lib/%.class
! 	name=`echo $< | sed -e 's/\.class$$//' -e 's,classpath/lib/,,'`; \
! 	$(mkinstalldirs) `dirname $$name`; \
! 	$(GCJH) -d . -classpath '' -bootclasspath classpath/lib $$name
  
  inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \
  	java/io/ObjectInputStream$$GetField.h \
*************** inner_nat_headers = java/io/ObjectOutput
*** 785,807 ****
  	gnu/java/nio/PipeImpl$$SourceChannelImpl.h \
  	$(PLATFORM_INNER_NAT_HDRS)
  
! nat_headers = $(ordinary_nat_headers) $(inner_nat_headers) gnu/gcj/tools/gcj_dbtool/Main.h
! nat_headers_install = $(ordinary_nat_headers)
! 
! xlib_nat_headers = $(xlib_java_source_files:.java=.h)
  
! $(ordinary_nat_headers) $(xlib_nat_headers): %.h: %.class
  
! java/lang/ClassLoader.h: java/lang/ClassLoader.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  		-prepend 'jclass _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
  		-prepend 'void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar);' \
  		-friend 'jclass (::_Jv_FindClass) (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
  		-friend 'void ::_Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar);' \
! 		$(basename $<)
  
! java/lang/Thread.h: java/lang/Thread.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  		-prepend 'class _Jv_JNIEnv;' \
  		-prepend '#define _JV_NOT_OWNER 1' \
  		-prepend '#define _JV_INTERRUPTED 2' \
--- 402,423 ----
  	gnu/java/nio/PipeImpl$$SourceChannelImpl.h \
  	$(PLATFORM_INNER_NAT_HDRS)
  
! nat_headers = $(ordinary_header_files) $(inner_nat_headers) \
! 	gnu/gcj/tools/gcj_dbtool/Main.h
! nat_headers_install = $(ordinary_header_files)
  
! xlib_nat_headers = $(gnu_awt_xlib_header_files) $(gnu_gcj_xlib_header_files)
  
! java/lang/ClassLoader.h: classpath/lib/java/lang/ClassLoader.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  		-prepend 'jclass _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
  		-prepend 'void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar);' \
  		-friend 'jclass (::_Jv_FindClass) (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
  		-friend 'void ::_Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar);' \
! 		java/lang/ClassLoader
  
! java/lang/Thread.h: classpath/lib/java/lang/Thread.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  		-prepend 'class _Jv_JNIEnv;' \
  		-prepend '#define _JV_NOT_OWNER 1' \
  		-prepend '#define _JV_INTERRUPTED 2' \
*************** java/lang/Thread.h: java/lang/Thread.cla
*** 819,828 ****
  		-friend 'java::lang::Thread* ::_Jv_AttachCurrentThread (jstring name, java::lang::ThreadGroup* group);' \
  		-friend 'java::lang::Thread* ::_Jv_AttachCurrentThreadAsDaemon (jstring name, java::lang::ThreadGroup* group);' \
  		-friend 'jint (::_Jv_DetachCurrentThread) ();' \
! 		$(basename $<)
  
! java/lang/String.h: java/lang/String.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -prepend 'jchar* _Jv_GetStringChars (jstring str);' \
  	    -prepend 'jstring* _Jv_StringFindSlot (jchar*, jint, jint);' \
  	    -prepend 'jstring* _Jv_StringGetSlot (jstring);' \
--- 435,444 ----
  		-friend 'java::lang::Thread* ::_Jv_AttachCurrentThread (jstring name, java::lang::ThreadGroup* group);' \
  		-friend 'java::lang::Thread* ::_Jv_AttachCurrentThreadAsDaemon (jstring name, java::lang::ThreadGroup* group);' \
  		-friend 'jint (::_Jv_DetachCurrentThread) ();' \
! 		java/lang/Thread
  
! java/lang/String.h: classpath/lib/java/lang/String.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -prepend 'jchar* _Jv_GetStringChars (jstring str);' \
  	    -prepend 'jstring* _Jv_StringFindSlot (jchar*, jint, jint);' \
  	    -prepend 'jstring* _Jv_StringGetSlot (jstring);' \
*************** java/lang/String.h: java/lang/String.cla
*** 835,926 ****
  	    -friend 'jstring (::_Jv_NewStringUtf8Const) (_Jv_Utf8Const* str);' \
  	    -friend 'jstring (::_Jv_NewStringLatin1) (const char*, jsize);' \
  	    -friend 'jstring (::_Jv_AllocString) (jsize);' \
! 	    $(basename $<)
  
! java/lang/reflect/Constructor.h: java/lang/reflect/Constructor.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -prepend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'jmethodID (::_Jv_FromReflectedConstructor) (java::lang::reflect::Constructor *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
! 	    $(basename $<)
  
! java/lang/reflect/Field.h: java/lang/reflect/Field.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -prepend 'jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
  	    -friend 'jfieldID (::_Jv_FromReflectedField) (java::lang::reflect::Field *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedField) (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
! 	    $(basename $<)
  
! java/lang/reflect/Method.h: java/lang/reflect/Method.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -prepend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'jmethodID (::_Jv_FromReflectedMethod) (java::lang::reflect::Method *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
  	    -friend 'class java::io::ObjectInputStream;' \
! 	    $(basename $<)
  
! java/lang/reflect/Proxy.h: java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
! 	    $(basename $<)
  
! java/lang/reflect/Proxy$$ProxyData.h: java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/lang/reflect/Proxy$$ProxyData'
  
! java/lang/reflect/Proxy$$ProxyType.h: java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/lang/reflect/Proxy$$ProxyType'
  
! gnu/gcj/runtime/ExtensionClassLoader.h: gnu/gcj/runtime/ExtensionClassLoader.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -friend 'class ::java::lang::ClassLoader;' \
! 	    $(basename $<)
  
! java/io/ObjectInputStream$$GetField.h: java/io/ObjectInputStream.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/io/ObjectInputStream$$GetField'
  
! java/io/ObjectOutputStream$$PutField.h: java/io/ObjectOutputStream.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/io/ObjectOutputStream$$PutField'
  
! java/nio/DirectByteBufferImpl$$ReadWrite.h: java/nio/DirectByteBufferImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/nio/DirectByteBufferImpl$$ReadWrite'
  
! java/nio/channels/Pipe$$SinkChannel.h: java/nio/channels/Pipe.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/nio/channels/Pipe$$SinkChannel'
  
! java/nio/channels/Pipe$$SourceChannel.h: java/nio/channels/Pipe.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/nio/channels/Pipe$$SourceChannel'
  
! gnu/java/net/PlainSocketImpl$$SocketInputStream.h: gnu/java/net/PlainSocketImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'gnu/java/net/PlainSocketImpl$$SocketInputStream'
  
! gnu/java/net/PlainSocketImpl$$SocketOutputStream.h: gnu/java/net/PlainSocketImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'gnu/java/net/PlainSocketImpl$$SocketOutputStream'
  
! gnu/java/nio/PipeImpl$$SinkChannelImpl.h: gnu/java/nio/PipeImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'gnu/java/nio/PipeImpl$$SinkChannelImpl'
  
! gnu/java/nio/PipeImpl$$SourceChannelImpl.h: gnu/java/nio/PipeImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'gnu/java/nio/PipeImpl$$SourceChannelImpl'
  
  ## Only used by PosixProcess.java
! java/lang/ConcreteProcess$$ProcessManager.h: java/lang/ConcreteProcess.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/lang/ConcreteProcess$$ProcessManager'
  
  ## Headers we maintain by hand and which we want to install.
--- 451,542 ----
  	    -friend 'jstring (::_Jv_NewStringUtf8Const) (_Jv_Utf8Const* str);' \
  	    -friend 'jstring (::_Jv_NewStringLatin1) (const char*, jsize);' \
  	    -friend 'jstring (::_Jv_AllocString) (jsize);' \
! 	    java/lang/String
  
! java/lang/reflect/Constructor.h: classpath/lib/java/lang/reflect/Constructor.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -prepend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'jmethodID (::_Jv_FromReflectedConstructor) (java::lang::reflect::Constructor *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
! 	    java/lang/reflect/Constructor
  
! java/lang/reflect/Field.h: classpath/lib/java/lang/reflect/Field.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -prepend 'jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
  	    -friend 'jfieldID (::_Jv_FromReflectedField) (java::lang::reflect::Field *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedField) (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
! 	    java/lang/reflect/Field
  
! java/lang/reflect/Method.h: classpath/lib/java/lang/reflect/Method.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -prepend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'jmethodID (::_Jv_FromReflectedMethod) (java::lang::reflect::Method *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
  	    -friend 'class java::io::ObjectInputStream;' \
! 	    java/lang/reflect/Method
  
! java/lang/reflect/Proxy.h: classpath/lib/java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
! 	    java/lang/reflect/Proxy
  
! java/lang/reflect/Proxy$$ProxyData.h: classpath/lib/java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/lang/reflect/Proxy$$ProxyData'
  
! java/lang/reflect/Proxy$$ProxyType.h: classpath/lib/java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/lang/reflect/Proxy$$ProxyType'
  
! gnu/gcj/runtime/ExtensionClassLoader.h: classpath/lib/gnu/gcj/runtime/ExtensionClassLoader.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -friend 'class ::java::lang::ClassLoader;' \
! 	    gnu/gcj/runtime/ExtensionClassLoader
  
! java/io/ObjectInputStream$$GetField.h: classpath/lib/java/io/ObjectInputStream.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/io/ObjectInputStream$$GetField'
  
! java/io/ObjectOutputStream$$PutField.h: classpath/lib/java/io/ObjectOutputStream.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/io/ObjectOutputStream$$PutField'
  
! java/nio/DirectByteBufferImpl$$ReadWrite.h: classpath/lib/java/nio/DirectByteBufferImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/nio/DirectByteBufferImpl$$ReadWrite'
  
! java/nio/channels/Pipe$$SinkChannel.h: classpath/lib/java/nio/channels/Pipe.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/nio/channels/Pipe$$SinkChannel'
  
! java/nio/channels/Pipe$$SourceChannel.h: classpath/lib/java/nio/channels/Pipe.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/nio/channels/Pipe$$SourceChannel'
  
! gnu/java/net/PlainSocketImpl$$SocketInputStream.h: classpath/lib/gnu/java/net/PlainSocketImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'gnu/java/net/PlainSocketImpl$$SocketInputStream'
  
! gnu/java/net/PlainSocketImpl$$SocketOutputStream.h: classpath/lib/gnu/java/net/PlainSocketImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'gnu/java/net/PlainSocketImpl$$SocketOutputStream'
  
! gnu/java/nio/PipeImpl$$SinkChannelImpl.h: classpath/lib/gnu/java/nio/PipeImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'gnu/java/nio/PipeImpl$$SinkChannelImpl'
  
! gnu/java/nio/PipeImpl$$SourceChannelImpl.h: classpath/lib/gnu/java/nio/PipeImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'gnu/java/nio/PipeImpl$$SourceChannelImpl'
  
  ## Only used by PosixProcess.java
! java/lang/ConcreteProcess$$ProcessManager.h: classpath/lib/java/lang/ConcreteProcess.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/lang/ConcreteProcess$$ProcessManager'
  
  ## Headers we maintain by hand and which we want to install.
*************** maintainer-check: libgcj.la
*** 989,995 ****
  
  ## This rule can be used to see if the headers are more or less
  ## correct.
! header-check: libgcj-@gcc_version@.jar $(nat_headers)
  	rm -f htest.cc; \
  	for h in $(nat_headers); do \
  	  echo "#include \"$$h\"" >> htest.cc; \
--- 605,611 ----
  
  ## This rule can be used to see if the headers are more or less
  ## correct.
! header-check: libgcj-$(gcc_version).jar $(nat_headers)
  	rm -f htest.cc; \
  	for h in $(nat_headers); do \
  	  echo "#include \"$$h\"" >> htest.cc; \
*************** header-check: libgcj-@gcc_version@.jar $
*** 998,1004 ****
  
  ## This rule can be used to see if all the .class files verify
  ## correctly.
! class-check: libgcj-@gcc_version@.jar
  	@ok=0; find . -name '*.class' -print | fgrep -v testsuite | \
  	while read f; do \
  	  echo "$(GCJ_WITH_FLAGS) --syntax-only $$f"; \
--- 614,620 ----
  
  ## This rule can be used to see if all the .class files verify
  ## correctly.
! class-check: libgcj-$(gcc_version).jar
  	@ok=0; find . -name '*.class' -print | fgrep -v testsuite | \
  	while read f; do \
  	  echo "$(GCJ_WITH_FLAGS) --syntax-only $$f"; \
*************** jv_convert_LDADD = -L$(here)/.libs libgc
*** 1098,1105 ****
  ## linking this program.
  jv_convert_DEPENDENCIES = libgcj.la libgcj.spec
  
! gcj_dbtool_SOURCES = gnu/gcj/tools/gcj_dbtool/Main.java \
! 	gnu/gcj/tools/gcj_dbtool/natMain.cc
  ## We need -nodefaultlibs because we want to avoid gcj's `-lgcj'.  We
  ## need this because we are explicitly using libtool to link using the
  ## `.la' file.
--- 714,723 ----
  ## linking this program.
  jv_convert_DEPENDENCIES = libgcj.la libgcj.spec
  
! gcj_dbtool_SOURCES = \
! gnu/gcj/tools/gcj_dbtool/Main.java \
! gnu/gcj/tools/gcj_dbtool/natMain.cc
! 
  ## We need -nodefaultlibs because we want to avoid gcj's `-lgcj'.  We
  ## need this because we are explicitly using libtool to link using the
  ## `.la' file.
*************** grmiregistry_DEPENDENCIES = libgcj.la li
*** 1154,3820 ****
  
  ## ################################################################
  
- ##
- ## This section lists all the source files we care about.
- ##
- 
- convert_source_files = \
- gnu/gcj/convert/BytesToUnicode.java \
- gnu/gcj/convert/Convert.java \
- gnu/gcj/convert/Input_8859_1.java \
- gnu/gcj/convert/Input_ASCII.java \
- gnu/gcj/convert/Input_EUCJIS.java \
- gnu/gcj/convert/Input_JavaSrc.java \
- gnu/gcj/convert/Input_SJIS.java \
- gnu/gcj/convert/Input_UnicodeBig.java \
- gnu/gcj/convert/Input_UnicodeLittle.java \
- gnu/gcj/convert/Input_UTF8.java	\
- gnu/gcj/convert/Input_iconv.java \
- gnu/gcj/convert/IOConverter.java \
- gnu/gcj/convert/Output_8859_1.java \
- gnu/gcj/convert/Output_ASCII.java \
- gnu/gcj/convert/Output_EUCJIS.java \
- gnu/gcj/convert/Output_JavaSrc.java \
- gnu/gcj/convert/Output_SJIS.java \
- gnu/gcj/convert/Output_UnicodeLittleUnmarked.java \
- gnu/gcj/convert/Output_UTF8.java \
- gnu/gcj/convert/Output_iconv.java \
- gnu/gcj/convert/UnicodeToBytes.java
- 
- ## List of all .java files for which the .h file is maintained by
- ## hand.
- special_java_source_files = java/lang/Class.java java/lang/Object.java
- 
- gnu_java_beans_source_files = \
- gnu/java/beans/decoder/AbstractContext.java \
- gnu/java/beans/decoder/AbstractCreatableObjectContext.java \
- gnu/java/beans/decoder/AbstractElementHandler.java \
- gnu/java/beans/decoder/AbstractObjectContext.java \
- gnu/java/beans/decoder/ArrayContext.java \
- gnu/java/beans/decoder/ArrayHandler.java \
- gnu/java/beans/decoder/AssemblyException.java \
- gnu/java/beans/decoder/BooleanHandler.java \
- gnu/java/beans/decoder/ByteHandler.java \
- gnu/java/beans/decoder/CharHandler.java \
- gnu/java/beans/decoder/ClassHandler.java \
- gnu/java/beans/decoder/ConstructorContext.java \
- gnu/java/beans/decoder/Context.java \
- gnu/java/beans/decoder/DecoderContext.java \
- gnu/java/beans/decoder/DefaultExceptionListener.java \
- gnu/java/beans/decoder/DoubleHandler.java \
- gnu/java/beans/decoder/DummyContext.java \
- gnu/java/beans/decoder/DummyHandler.java \
- gnu/java/beans/decoder/ElementHandler.java \
- gnu/java/beans/decoder/FloatHandler.java \
- gnu/java/beans/decoder/GrowableArrayContext.java \
- gnu/java/beans/decoder/IndexContext.java \
- gnu/java/beans/decoder/IntHandler.java \
- gnu/java/beans/decoder/JavaHandler.java \
- gnu/java/beans/decoder/LongHandler.java \
- gnu/java/beans/decoder/MethodContext.java \
- gnu/java/beans/decoder/MethodFinder.java \
- gnu/java/beans/decoder/NullHandler.java \
- gnu/java/beans/decoder/ObjectContext.java \
- gnu/java/beans/decoder/ObjectHandler.java \
- gnu/java/beans/decoder/PersistenceParser.java \
- gnu/java/beans/decoder/PropertyContext.java \
- gnu/java/beans/decoder/ShortHandler.java \
- gnu/java/beans/decoder/SimpleHandler.java \
- gnu/java/beans/decoder/StaticMethodContext.java \
- gnu/java/beans/decoder/StringHandler.java \
- gnu/java/beans/decoder/VoidHandler.java \
- gnu/java/beans/editors/ColorEditor.java	\
- gnu/java/beans/editors/FontEditor.java \
- gnu/java/beans/editors/NativeBooleanEditor.java	\
- gnu/java/beans/editors/NativeByteEditor.java \
- gnu/java/beans/editors/NativeDoubleEditor.java \
- gnu/java/beans/editors/NativeFloatEditor.java \
- gnu/java/beans/editors/NativeIntEditor.java \
- gnu/java/beans/editors/NativeLongEditor.java \
- gnu/java/beans/editors/NativeShortEditor.java \
- gnu/java/beans/editors/StringEditor.java \
- gnu/java/beans/BeanInfoEmbryo.java \
- gnu/java/beans/DummyAppletContext.java \
- gnu/java/beans/DummyAppletStub.java \
- gnu/java/beans/ExplicitBeanInfo.java \
- gnu/java/beans/IntrospectionIncubator.java
- 
- awt_java_source_files =	\
- gnu/awt/LightweightRedirector.java \
- gnu/awt/j2d/AbstractGraphicsState.java \
- gnu/awt/j2d/DirectRasterGraphics.java \
- gnu/awt/j2d/Graphics2DImpl.java \
- gnu/awt/j2d/IntegerGraphicsState.java \
- gnu/awt/j2d/MappedRaster.java \
- gnu/java/awt/BitMaskExtent.java \
- gnu/java/awt/Buffers.java \
- gnu/java/awt/BitwiseXORComposite.java \
- gnu/java/awt/ComponentDataBlitOp.java \
- gnu/java/awt/ClasspathToolkit.java \
- gnu/java/awt/EmbeddedWindow.java \
- gnu/java/awt/EmbeddedWindowSupport.java \
- gnu/java/awt/EventModifier.java \
- gnu/java/awt/color/CieXyzConverter.java \
- gnu/java/awt/color/ClutProfileConverter.java \
- gnu/java/awt/color/ColorLookUpTable.java \
- gnu/java/awt/color/ColorSpaceConverter.java \
- gnu/java/awt/color/GrayProfileConverter.java \
- gnu/java/awt/color/GrayScaleConverter.java \
- gnu/java/awt/color/LinearRGBConverter.java \
- gnu/java/awt/color/ProfileHeader.java \
- gnu/java/awt/color/PyccConverter.java \
- gnu/java/awt/color/RgbProfileConverter.java \
- gnu/java/awt/color/SrgbConverter.java \
- gnu/java/awt/color/TagEntry.java \
- gnu/java/awt/color/ToneReproductionCurve.java \
- gnu/java/awt/image/ImageDecoder.java \
- gnu/java/awt/image/XBMDecoder.java \
- gnu/java/awt/peer/EmbeddedWindowPeer.java \
- gnu/java/awt/peer/GLightweightPeer.java \
- gnu/java/awt/peer/ClasspathFontPeer.java \
- gnu/java/awt/peer/ClasspathTextLayoutPeer.java \
- java/applet/Applet.java \
- java/applet/AppletStub.java \
- java/applet/AppletContext.java \
- java/applet/AudioClip.java \
- java/awt/AWTError.java \
- java/awt/AWTEvent.java \
- java/awt/AWTEventMulticaster.java \
- java/awt/AWTException.java \
- java/awt/AWTPermission.java \
- java/awt/ActiveEvent.java \
- java/awt/Adjustable.java \
- java/awt/BorderLayout.java \
- java/awt/Button.java \
- java/awt/Canvas.java \
- java/awt/CardLayout.java \
- java/awt/Checkbox.java \
- java/awt/CheckboxGroup.java \
- java/awt/CheckboxMenuItem.java \
- java/awt/Choice.java \
- java/awt/Color.java \
- java/awt/Component.java \
- java/awt/ComponentOrientation.java \
- java/awt/Container.java \
- java/awt/Cursor.java \
- java/awt/Dialog.java \
- java/awt/Dimension.java \
- java/awt/Event.java \
- java/awt/EventDispatchThread.java \
- java/awt/EventQueue.java \
- java/awt/FileDialog.java \
- java/awt/FlowLayout.java \
- java/awt/Font.java \
- java/awt/FontMetrics.java \
- java/awt/Frame.java \
- java/awt/Graphics.java \
- java/awt/Graphics2D.java \
- java/awt/GraphicsConfiguration.java \
- java/awt/GridBagConstraints.java \
- java/awt/GridBagLayout.java \
- java/awt/GridBagLayoutInfo.java \
- java/awt/GridLayout.java \
- java/awt/IllegalComponentStateException.java \
- java/awt/Image.java \
- java/awt/Insets.java \
- java/awt/ItemSelectable.java \
- java/awt/Label.java \
- java/awt/LayoutManager.java \
- java/awt/LayoutManager2.java \
- java/awt/List.java \
- java/awt/Menu.java \
- java/awt/MenuBar.java \
- java/awt/MenuComponent.java \
- java/awt/MenuContainer.java \
- java/awt/MenuItem.java \
- java/awt/MenuShortcut.java \
- java/awt/Paint.java \
- java/awt/PaintContext.java \
- java/awt/Panel.java \
- java/awt/Point.java \
- java/awt/PopupMenu.java \
- java/awt/Rectangle.java \
- java/awt/RenderingHints.java \
- java/awt/ScrollPane.java \
- java/awt/Scrollbar.java \
- java/awt/Shape.java \
- java/awt/TextArea.java \
- java/awt/TextComponent.java \
- java/awt/TextField.java \
- java/awt/Toolkit.java \
- java/awt/Transparency.java \
- java/awt/Window.java \
- java/awt/color/ColorSpace.java \
- java/awt/color/ICC_ColorSpace.java \
- java/awt/color/ICC_Profile.java \
- java/awt/color/ICC_ProfileGray.java \
- java/awt/color/ICC_ProfileRGB.java \
- java/awt/color/CMMException.java \
- java/awt/color/ProfileDataException.java \
- java/awt/datatransfer/Clipboard.java \
- java/awt/datatransfer/ClipboardOwner.java \
- java/awt/datatransfer/DataFlavor.java \
- java/awt/datatransfer/FlavorMap.java \
- java/awt/datatransfer/MimeTypeParseException.java \
- java/awt/datatransfer/StringSelection.java \
- java/awt/datatransfer/SystemFlavorMap.java \
- java/awt/datatransfer/Transferable.java \
- java/awt/datatransfer/UnsupportedFlavorException.java \
- java/awt/datatransfer/FlavorTable.java \
- java/awt/event/AWTEventListener.java \
- java/awt/event/ActionEvent.java \
- java/awt/event/ActionListener.java \
- java/awt/event/AdjustmentEvent.java \
- java/awt/event/AdjustmentListener.java \
- java/awt/event/ComponentAdapter.java \
- java/awt/event/ComponentEvent.java \
- java/awt/event/ComponentListener.java \
- java/awt/event/ContainerAdapter.java \
- java/awt/event/ContainerEvent.java \
- java/awt/event/ContainerListener.java \
- java/awt/event/FocusAdapter.java \
- java/awt/event/FocusEvent.java \
- java/awt/event/FocusListener.java \
- java/awt/event/HierarchyBoundsAdapter.java \
- java/awt/event/HierarchyBoundsListener.java \
- java/awt/event/HierarchyEvent.java \
- java/awt/event/HierarchyListener.java \
- java/awt/event/InputEvent.java \
- java/awt/event/InputMethodEvent.java \
- java/awt/event/InputMethodListener.java \
- java/awt/event/InvocationEvent.java \
- java/awt/event/ItemEvent.java \
- java/awt/event/ItemListener.java \
- java/awt/event/KeyAdapter.java \
- java/awt/event/KeyEvent.java \
- java/awt/event/KeyListener.java \
- java/awt/event/MouseAdapter.java \
- java/awt/event/MouseEvent.java \
- java/awt/event/MouseListener.java \
- java/awt/event/MouseMotionAdapter.java \
- java/awt/event/MouseMotionListener.java \
- java/awt/event/PaintEvent.java \
- java/awt/event/TextEvent.java \
- java/awt/event/TextListener.java \
- java/awt/event/WindowAdapter.java \
- java/awt/event/WindowEvent.java \
- java/awt/event/WindowListener.java \
- java/awt/event/AWTEventListenerProxy.java \
- java/awt/event/MouseWheelEvent.java \
- java/awt/event/MouseWheelListener.java \
- java/awt/event/WindowFocusListener.java \
- java/awt/event/WindowStateListener.java \
- java/awt/font/FontRenderContext.java \
- java/awt/font/ShapeGraphicAttribute.java \
- java/awt/font/MultipleMaster.java \
- java/awt/font/TransformAttribute.java \
- java/awt/font/GlyphJustificationInfo.java \
- java/awt/font/LineBreakMeasurer.java \
- java/awt/font/TextMeasurer.java \
- java/awt/font/TextLayout.java \
- java/awt/font/LineMetrics.java \
- java/awt/font/TextAttribute.java \
- java/awt/font/GlyphMetrics.java \
- java/awt/font/OpenType.java \
- java/awt/font/GlyphVector.java \
- java/awt/font/GraphicAttribute.java \
- java/awt/font/ImageGraphicAttribute.java \
- java/awt/font/NumericShaper.java \
- java/awt/geom/AffineTransform.java \
- java/awt/geom/Dimension2D.java \
- java/awt/geom/Ellipse2D.java \
- java/awt/geom/IllegalPathStateException.java \
- java/awt/geom/NoninvertibleTransformException.java \
- java/awt/geom/PathIterator.java \
- java/awt/geom/Point2D.java \
- java/awt/geom/Rectangle2D.java \
- java/awt/geom/RectangularShape.java \
- java/awt/geom/RoundRectangle2D.java \
- java/awt/geom/Line2D.java \
- java/awt/geom/Arc2D.java \
- java/awt/geom/Area.java \
- java/awt/geom/CubicCurve2D.java \
- java/awt/geom/FlatteningPathIterator.java \
- java/awt/geom/GeneralPath.java \
- java/awt/geom/QuadCurve2D.java \
- java/awt/image/BandCombineOp.java \
- java/awt/image/BandedSampleModel.java \
- java/awt/image/AffineTransformOp.java \
- java/awt/image/BufferedImage.java \
- java/awt/image/BufferedImageFilter.java \
- java/awt/image/ByteLookupTable.java \
- java/awt/image/ColorConvertOp.java \
- java/awt/image/ColorModel.java \
- java/awt/image/ComponentColorModel.java \
- java/awt/image/ComponentSampleModel.java \
- java/awt/image/ConvolveOp.java \
- java/awt/image/DataBuffer.java \
- java/awt/image/DataBufferByte.java \
- java/awt/image/DataBufferDouble.java \
- java/awt/image/DataBufferFloat.java \
- java/awt/image/DataBufferInt.java \
- java/awt/image/DataBufferShort.java \
- java/awt/image/DataBufferUShort.java \
- java/awt/image/DirectColorModel.java \
- java/awt/image/ImageConsumer.java \
- java/awt/image/ImageObserver.java \
- java/awt/image/ImageProducer.java \
- java/awt/image/IndexColorModel.java \
- java/awt/image/Kernel.java \
- java/awt/image/LookupOp.java \
- java/awt/image/LookupTable.java \
- java/awt/image/MultiPixelPackedSampleModel.java \
- java/awt/image/PackedColorModel.java \
- java/awt/image/PixelInterleavedSampleModel.java \
- java/awt/image/Raster.java \
- java/awt/image/RasterOp.java \
- java/awt/image/RescaleOp.java \
- java/awt/image/SampleModel.java \
- java/awt/image/ShortLookupTable.java \
- java/awt/image/SinglePixelPackedSampleModel.java \
- java/awt/image/WritableRaster.java \
- java/awt/image/AreaAveragingScaleFilter.java \
- java/awt/image/CropImageFilter.java \
- java/awt/image/FilteredImageSource.java \
- java/awt/image/ImageFilter.java \
- java/awt/image/MemoryImageSource.java \
- java/awt/image/PixelGrabber.java \
- java/awt/image/RGBImageFilter.java \
- java/awt/image/ReplicateScaleFilter.java \
- java/awt/image/BufferStrategy.java \
- java/awt/image/BufferedImageOp.java \
- java/awt/image/ImagingOpException.java \
- java/awt/image/RasterFormatException.java \
- java/awt/image/RenderedImage.java \
- java/awt/image/TileObserver.java \
- java/awt/image/VolatileImage.java \
- java/awt/image/WritableRenderedImage.java \
- java/awt/image/renderable/ContextualRenderedImageFactory.java \
- java/awt/image/renderable/ParameterBlock.java \
- java/awt/image/renderable/RenderContext.java \
- java/awt/image/renderable/RenderableImage.java \
- java/awt/image/renderable/RenderableImageOp.java \
- java/awt/image/renderable/RenderableImageProducer.java \
- java/awt/image/renderable/RenderedImageFactory.java \
- java/awt/peer/ButtonPeer.java \
- java/awt/peer/CanvasPeer.java \
- java/awt/peer/CheckboxMenuItemPeer.java \
- java/awt/peer/CheckboxPeer.java \
- java/awt/peer/ChoicePeer.java \
- java/awt/peer/ComponentPeer.java \
- java/awt/peer/ContainerPeer.java \
- java/awt/peer/DialogPeer.java \
- java/awt/peer/FileDialogPeer.java \
- java/awt/peer/FontPeer.java \
- java/awt/peer/FramePeer.java \
- java/awt/peer/LabelPeer.java \
- java/awt/peer/LightweightPeer.java \
- java/awt/peer/ListPeer.java \
- java/awt/peer/MenuBarPeer.java \
- java/awt/peer/MenuComponentPeer.java \
- java/awt/peer/MenuItemPeer.java \
- java/awt/peer/MenuPeer.java \
- java/awt/peer/PanelPeer.java \
- java/awt/peer/PopupMenuPeer.java \
- java/awt/peer/RobotPeer.java \
- java/awt/peer/ScrollPanePeer.java \
- java/awt/peer/ScrollbarPeer.java \
- java/awt/peer/TextAreaPeer.java \
- java/awt/peer/TextComponentPeer.java \
- java/awt/peer/TextFieldPeer.java \
- java/awt/peer/WindowPeer.java \
- java/awt/SystemColor.java \
- java/awt/Polygon.java \
- java/awt/MediaTracker.java \
- java/awt/PrintGraphics.java \
- java/awt/PrintJob.java \
- java/awt/AWTKeyStroke.java \
- java/awt/AlphaComposite.java \
- java/awt/AttributeValue.java \
- java/awt/BasicStroke.java \
- java/awt/BufferCapabilities.java \
- java/awt/ColorPaintContext.java \
- java/awt/Composite.java \
- java/awt/CompositeContext.java \
- java/awt/ContainerOrderFocusTraversalPolicy.java \
- java/awt/DefaultFocusTraversalPolicy.java \
- java/awt/DefaultKeyboardFocusManager.java \
- java/awt/DisplayMode.java \
- java/awt/FocusTraversalPolicy.java \
- java/awt/FontFormatException.java \
- java/awt/GradientPaint.java \
- java/awt/GraphicsConfigTemplate.java \
- java/awt/GraphicsDevice.java \
- java/awt/GraphicsEnvironment.java \
- java/awt/HeadlessException.java \
- java/awt/ImageCapabilities.java \
- java/awt/JobAttributes.java \
- java/awt/KeyEventDispatcher.java \
- java/awt/KeyEventPostProcessor.java \
- java/awt/KeyboardFocusManager.java \
- java/awt/PageAttributes.java \
- java/awt/Robot.java \
- java/awt/ScrollPaneAdjustable.java \
- java/awt/Stroke.java \
- java/awt/TexturePaint.java \
- java/awt/dnd/peer/DragSourceContextPeer.java \
- java/awt/dnd/peer/DropTargetContextPeer.java \
- java/awt/dnd/peer/DropTargetPeer.java \
- java/awt/dnd/DnDConstants.java \
- java/awt/dnd/DnDEventMulticaster.java \
- java/awt/dnd/DragGestureEvent.java \
- java/awt/dnd/DragGestureListener.java \
- java/awt/dnd/DragGestureRecognizer.java	\
- java/awt/dnd/DragSource.java \
- java/awt/dnd/DragSourceAdapter.java \
- java/awt/dnd/DragSourceContext.java \
- java/awt/dnd/DragSourceDragEvent.java \
- java/awt/dnd/DragSourceEvent.java \
- java/awt/dnd/DragSourceListener.java \
- java/awt/dnd/DragSourceMotionListener.java \
- java/awt/dnd/DropTarget.java \
- java/awt/dnd/InvalidDnDOperationException.java \
- java/awt/dnd/Autoscroll.java \
- java/awt/dnd/DragSourceDropEvent.java \
- java/awt/dnd/DropTargetAdapter.java \
- java/awt/dnd/DropTargetContext.java \
- java/awt/dnd/DropTargetDragEvent.java \
- java/awt/dnd/DropTargetDropEvent.java \
- java/awt/dnd/DropTargetEvent.java \
- java/awt/dnd/DropTargetListener.java \
- java/awt/dnd/MouseDragGestureRecognizer.java \
- java/awt/font/TextHitInfo.java \
- java/awt/im/spi/InputMethod.java \
- java/awt/im/spi/InputMethodContext.java \
- java/awt/im/spi/InputMethodDescriptor.java \
- java/awt/im/InputContext.java \
- java/awt/im/InputMethodHighlight.java \
- java/awt/im/InputMethodRequests.java \
- java/awt/im/InputSubset.java \
- java/awt/print/Book.java \
- java/awt/print/PageFormat.java \
- java/awt/print/Pageable.java \
- java/awt/print/Paper.java \
- java/awt/print/Printable.java \
- java/awt/print/PrinterAbortException.java \
- java/awt/print/PrinterException.java \
- java/awt/print/PrinterGraphics.java \
- java/awt/print/PrinterIOException.java \
- java/awt/print/PrinterJob.java \
- java/beans/beancontext/BeanContext.java \
- java/beans/beancontext/BeanContextChild.java \
- java/beans/beancontext/BeanContextChildComponentProxy.java \
- java/beans/beancontext/BeanContextChildSupport.java \
- java/beans/beancontext/BeanContextContainerProxy.java \
- java/beans/beancontext/BeanContextEvent.java \
- java/beans/beancontext/BeanContextMembershipEvent.java \
- java/beans/beancontext/BeanContextMembershipListener.java \
- java/beans/beancontext/BeanContextProxy.java \
- java/beans/beancontext/BeanContextServiceAvailableEvent.java \
- java/beans/beancontext/BeanContextServiceProvider.java \
- java/beans/beancontext/BeanContextServiceProviderBeanInfo.java \
- java/beans/beancontext/BeanContextServiceRevokedEvent.java \
- java/beans/beancontext/BeanContextServiceRevokedListener.java \
- java/beans/beancontext/BeanContextServices.java \
- java/beans/beancontext/BeanContextServicesListener.java \
- java/beans/beancontext/BeanContextServicesSupport.java \
- java/beans/beancontext/BeanContextSupport.java \
- java/beans/BeanDescriptor.java \
- java/beans/BeanInfo.java \
- java/beans/Beans.java \
- java/beans/Customizer.java \
- java/beans/DesignMode.java \
- java/beans/EventHandler.java \
- java/beans/EventSetDescriptor.java \
- java/beans/ExceptionListener.java \
- java/beans/Expression.java \
- java/beans/FeatureDescriptor.java \
- java/beans/IndexedPropertyDescriptor.java \
- java/beans/IntrospectionException.java \
- java/beans/Introspector.java \
- java/beans/MethodDescriptor.java \
- java/beans/ParameterDescriptor.java \
- java/beans/PropertyChangeEvent.java \
- java/beans/PropertyChangeListener.java \
- java/beans/PropertyChangeListenerProxy.java \
- java/beans/PropertyChangeSupport.java \
- java/beans/PropertyDescriptor.java \
- java/beans/PropertyEditor.java \
- java/beans/PropertyEditorManager.java \
- java/beans/PropertyEditorSupport.java \
- java/beans/PropertyVetoException.java \
- java/beans/Statement.java \
- java/beans/SimpleBeanInfo.java \
- java/beans/VetoableChangeListener.java \
- java/beans/VetoableChangeListenerProxy.java \
- java/beans/VetoableChangeSupport.java \
- java/beans/Visibility.java \
- java/beans/AppletInitializer.java \
- java/beans/XMLDecoder.java \
- javax/swing/border/AbstractBorder.java \
- javax/swing/border/BevelBorder.java \
- javax/swing/border/Border.java \
- javax/swing/border/CompoundBorder.java \
- javax/swing/border/EmptyBorder.java \
- javax/swing/border/EtchedBorder.java \
- javax/swing/border/LineBorder.java \
- javax/swing/border/MatteBorder.java \
- javax/swing/border/SoftBevelBorder.java \
- javax/swing/border/TitledBorder.java \
- javax/swing/GrayFilter.java \
- javax/swing/AbstractAction.java \
- javax/swing/AbstractButton.java \
- javax/swing/AbstractSpinnerModel.java \
- javax/swing/plaf/basic/BasicArrowButton.java \
- javax/swing/plaf/basic/BasicButtonListener.java \
- javax/swing/plaf/basic/BasicButtonUI.java \
- javax/swing/plaf/basic/BasicCheckBoxUI.java \
- javax/swing/plaf/basic/BasicColorChooserUI.java \
- javax/swing/plaf/basic/BasicComboBoxUI.java \
- javax/swing/plaf/basic/BasicComboBoxEditor.java \
- javax/swing/plaf/basic/BasicComboBoxRenderer.java \
- javax/swing/plaf/basic/BasicComboPopup.java \
- javax/swing/plaf/basic/BasicDesktopIconUI.java \
- javax/swing/plaf/basic/BasicDesktopPaneUI.java \
- javax/swing/plaf/basic/BasicEditorPaneUI.java \
- javax/swing/plaf/basic/BasicFormattedTextFieldUI.java \
- javax/swing/plaf/basic/BasicGraphicsUtils.java \
- javax/swing/plaf/basic/BasicInternalFrameTitlePane.java \
- javax/swing/plaf/basic/BasicInternalFrameUI.java \
- javax/swing/plaf/basic/BasicLabelUI.java \
- javax/swing/plaf/basic/BasicListUI.java \
- javax/swing/plaf/basic/BasicMenuUI.java \
- javax/swing/plaf/basic/BasicMenuBarUI.java \
- javax/swing/plaf/basic/BasicMenuItemUI.java \
- javax/swing/plaf/basic/BasicOptionPaneUI.java \
- javax/swing/plaf/basic/BasicPanelUI.java \
- javax/swing/plaf/basic/BasicPasswordFieldUI.java \
- javax/swing/plaf/basic/BasicPopupMenuUI.java \
- javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java \
- javax/swing/plaf/basic/BasicProgressBarUI.java \
- javax/swing/plaf/basic/BasicRootPaneUI.java \
- javax/swing/plaf/basic/BasicRadioButtonUI.java \
- javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java \
- javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java \
- javax/swing/plaf/basic/BasicScrollBarUI.java \
- javax/swing/plaf/basic/BasicScrollPaneUI.java \
- javax/swing/plaf/basic/BasicSeparatorUI.java \
- javax/swing/plaf/basic/BasicSliderUI.java \
- javax/swing/plaf/basic/BasicSpinnerUI.java \
- javax/swing/plaf/basic/BasicSplitPaneDivider.java \
- javax/swing/plaf/basic/BasicSplitPaneUI.java \
- javax/swing/plaf/basic/BasicTabbedPaneUI.java \
- javax/swing/plaf/basic/BasicTableUI.java \
- javax/swing/plaf/basic/BasicTableHeaderUI.java \
- javax/swing/plaf/basic/BasicTextAreaUI.java \
- javax/swing/plaf/basic/BasicTextFieldUI.java \
- javax/swing/plaf/basic/BasicTextPaneUI.java \
- javax/swing/plaf/basic/BasicTextUI.java \
- javax/swing/plaf/basic/BasicToggleButtonUI.java \
- javax/swing/plaf/basic/BasicToolBarSeparatorUI.java \
- javax/swing/plaf/basic/BasicToolBarUI.java \
- javax/swing/plaf/basic/BasicToolTipUI.java \
- javax/swing/plaf/basic/BasicTreeUI.java \
- javax/swing/plaf/basic/BasicViewportUI.java \
- javax/swing/plaf/basic/BasicLookAndFeel.java \
- javax/swing/plaf/basic/BasicBorders.java \
- javax/swing/plaf/basic/BasicIconFactory.java \
- javax/swing/plaf/basic/ComboPopup.java \
- javax/swing/plaf/BorderUIResource.java \
- javax/swing/plaf/UIResource.java \
- javax/swing/plaf/ButtonUI.java \
- javax/swing/plaf/ComponentUI.java \
- javax/swing/plaf/LabelUI.java \
- javax/swing/plaf/ListUI.java \
- javax/swing/plaf/OptionPaneUI.java \
- javax/swing/plaf/PanelUI.java \
- javax/swing/plaf/ScrollPaneUI.java \
- javax/swing/plaf/TabbedPaneUI.java \
- javax/swing/plaf/TextUI.java \
- javax/swing/plaf/TreeUI.java \
- javax/swing/plaf/ViewportUI.java \
- javax/swing/plaf/metal/DefaultMetalTheme.java \
- javax/swing/plaf/metal/MetalLookAndFeel.java \
- javax/swing/plaf/metal/MetalTheme.java \
- javax/swing/plaf/ColorUIResource.java \
- javax/swing/plaf/DimensionUIResource.java \
- javax/swing/plaf/FontUIResource.java \
- javax/swing/plaf/IconUIResource.java \
- javax/swing/plaf/InsetsUIResource.java \
- javax/swing/plaf/ActionMapUIResource.java \
- javax/swing/plaf/ColorChooserUI.java \
- javax/swing/plaf/ComboBoxUI.java \
- javax/swing/plaf/ComponentInputMapUIResource.java \
- javax/swing/plaf/DesktopIconUI.java \
- javax/swing/plaf/DesktopPaneUI.java \
- javax/swing/plaf/FileChooserUI.java \
- javax/swing/plaf/InputMapUIResource.java \
- javax/swing/plaf/InternalFrameUI.java \
- javax/swing/plaf/MenuBarUI.java \
- javax/swing/plaf/MenuItemUI.java \
- javax/swing/plaf/PopupMenuUI.java \
- javax/swing/plaf/ProgressBarUI.java \
- javax/swing/plaf/RootPaneUI.java \
- javax/swing/plaf/ScrollBarUI.java \
- javax/swing/plaf/SeparatorUI.java \
- javax/swing/plaf/SliderUI.java \
- javax/swing/plaf/SpinnerUI.java \
- javax/swing/plaf/SplitPaneUI.java \
- javax/swing/plaf/TableHeaderUI.java \
- javax/swing/plaf/TableUI.java \
- javax/swing/plaf/ToolBarUI.java \
- javax/swing/plaf/ToolTipUI.java \
- javax/swing/AbstractListModel.java \
- javax/swing/colorchooser/AbstractColorChooserPanel.java \
- javax/swing/colorchooser/ColorChooserComponentFactory.java \
- javax/swing/colorchooser/ColorSelectionModel.java \
- javax/swing/colorchooser/DefaultColorSelectionModel.java \
- javax/swing/colorchooser/DefaultPreviewPanel.java \
- javax/swing/colorchooser/DefaultSwatchChooserPanel.java \
- javax/swing/colorchooser/DefaultHSBChooserPanel.java \
- javax/swing/colorchooser/DefaultRGBChooserPanel.java \
- javax/swing/filechooser/FileFilter.java \
- javax/swing/filechooser/FileSystemView.java \
- javax/swing/filechooser/FileView.java \
- javax/swing/table/AbstractTableModel.java \
- javax/swing/table/DefaultTableColumnModel.java \
- javax/swing/table/DefaultTableModel.java \
- javax/swing/table/JTableHeader.java \
- javax/swing/table/TableCellEditor.java \
- javax/swing/table/TableCellRenderer.java \
- javax/swing/table/TableColumn.java \
- javax/swing/table/TableColumnModel.java \
- javax/swing/table/TableModel.java \
- javax/swing/table/DefaultTableCellRenderer.java \
- javax/swing/Action.java \
- javax/swing/BorderFactory.java \
- javax/swing/Box.java \
- javax/swing/BoxLayout.java \
- javax/swing/ButtonGroup.java \
- javax/swing/ButtonModel.java \
- javax/swing/ComponentInputMap.java \
- javax/swing/DefaultButtonModel.java \
- javax/swing/DefaultListModel.java \
- javax/swing/DefaultListSelectionModel.java \
- javax/swing/Icon.java \
- javax/swing/ImageIcon.java \
- javax/swing/InputMap.java \
- javax/swing/InternalFrameFocusTraversalPolicy.java \
- javax/swing/JApplet.java \
- javax/swing/JButton.java \
- javax/swing/JCheckBox.java \
- javax/swing/JComponent.java \
- javax/swing/JDialog.java \
- javax/swing/JEditorPane.java \
- javax/swing/JFormattedTextField.java \
- javax/swing/JFrame.java \
- javax/swing/JLabel.java \
- javax/swing/JLayeredPane.java \
- javax/swing/JList.java \
- javax/swing/JMenuBar.java \
- javax/swing/JOptionPane.java \
- javax/swing/JPanel.java \
- javax/swing/JRadioButton.java \
- javax/swing/JRootPane.java \
- javax/swing/JScrollBar.java \
- javax/swing/JScrollPane.java \
- javax/swing/JSpinner.java \
- javax/swing/JTabbedPane.java \
- javax/swing/JTextArea.java \
- javax/swing/JTextField.java \
- javax/swing/JToggleButton.java \
- javax/swing/JToolTip.java \
- javax/swing/JTree.java \
- javax/swing/JViewport.java \
- javax/swing/JWindow.java \
- javax/swing/KeyStroke.java \
- javax/swing/LayoutFocusTraversalPolicy.java \
- javax/swing/ListCellRenderer.java \
- javax/swing/ListModel.java \
- javax/swing/ListSelectionModel.java \
- javax/swing/LookAndFeel.java \
- javax/swing/Scrollable.java \
- javax/swing/SortingFocusTraversalPolicy.java \
- javax/swing/SpinnerDateModel.java \
- javax/swing/SpinnerListModel.java \
- javax/swing/SpinnerModel.java \
- javax/swing/SpinnerNumberModel.java \
- javax/swing/Spring.java \
- javax/swing/SpringLayout.java \
- javax/swing/SwingConstants.java \
- javax/swing/SwingUtilities.java \
- javax/swing/Timer.java \
- javax/swing/ToolTipManager.java \
- javax/swing/TransferHandler.java \
- javax/swing/UIDefaults.java \
- javax/swing/UIManager.java \
- javax/swing/UnsupportedLookAndFeelException.java \
- javax/swing/event/AncestorEvent.java \
- javax/swing/event/AncestorListener.java \
- javax/swing/event/ChangeEvent.java \
- javax/swing/event/ChangeListener.java \
- javax/swing/event/DocumentEvent.java \
- javax/swing/event/DocumentListener.java \
- javax/swing/event/HyperlinkEvent.java \
- javax/swing/event/HyperlinkListener.java \
- javax/swing/event/ListDataEvent.java \
- javax/swing/event/ListDataListener.java \
- javax/swing/event/ListSelectionEvent.java \
- javax/swing/event/ListSelectionListener.java \
- javax/swing/event/MenuEvent.java \
- javax/swing/event/UndoableEditEvent.java \
- javax/swing/event/UndoableEditListener.java \
- javax/swing/event/CaretEvent.java \
- javax/swing/event/CaretListener.java \
- javax/swing/event/CellEditorListener.java \
- javax/swing/event/EventListenerList.java \
- javax/swing/event/InternalFrameAdapter.java \
- javax/swing/event/InternalFrameEvent.java \
- javax/swing/event/InternalFrameListener.java \
- javax/swing/event/MenuDragMouseEvent.java \
- javax/swing/event/MenuDragMouseListener.java \
- javax/swing/event/MenuKeyEvent.java \
- javax/swing/event/MenuKeyListener.java \
- javax/swing/event/MenuListener.java \
- javax/swing/event/MouseInputAdapter.java \
- javax/swing/event/MouseInputListener.java \
- javax/swing/event/PopupMenuEvent.java \
- javax/swing/event/PopupMenuListener.java \
- javax/swing/event/SwingPropertyChangeSupport.java \
- javax/swing/event/TableColumnModelEvent.java \
- javax/swing/event/TableColumnModelListener.java \
- javax/swing/event/TableModelEvent.java \
- javax/swing/event/TableModelListener.java \
- javax/swing/event/TreeExpansionEvent.java \
- javax/swing/event/TreeExpansionListener.java \
- javax/swing/event/TreeModelEvent.java \
- javax/swing/event/TreeModelListener.java \
- javax/swing/event/TreeSelectionEvent.java \
- javax/swing/event/TreeSelectionListener.java \
- javax/swing/event/TreeWillExpandListener.java \
- javax/swing/ActionMap.java \
- javax/swing/text/AbstractDocument.java \
- javax/swing/text/AttributeSet.java \
- javax/swing/text/BadLocationException.java \
- javax/swing/text/Caret.java \
- javax/swing/text/ComponentView.java \
- javax/swing/text/DefaultCaret.java \
- javax/swing/text/DefaultEditorKit.java \
- javax/swing/text/DefaultHighlighter.java \
- javax/swing/text/DefaultStyledDocument.java \
- javax/swing/text/Document.java \
- javax/swing/text/DocumentFilter.java \
- javax/swing/text/EditorKit.java \
- javax/swing/text/Element.java \
- javax/swing/text/FieldView.java \
- javax/swing/text/GapContent.java \
- javax/swing/text/Highlighter.java \
- javax/swing/text/JTextComponent.java \
- javax/swing/text/Keymap.java \
- javax/swing/text/LayeredHighlighter.java \
- javax/swing/text/MutableAttributeSet.java \
- javax/swing/text/NavigationFilter.java \
- javax/swing/text/PasswordView.java \
- javax/swing/text/PlainDocument.java \
- javax/swing/text/PlainView.java \
- javax/swing/text/Position.java \
- javax/swing/text/Segment.java \
- javax/swing/text/SimpleAttributeSet.java \
- javax/swing/text/StringContent.java \
- javax/swing/text/Style.java \
- javax/swing/text/StyleConstants.java \
- javax/swing/text/StyleContext.java \
- javax/swing/text/StyledDocument.java \
- javax/swing/text/StyledEditorKit.java \
- javax/swing/text/TabableView.java \
- javax/swing/text/TabExpander.java \
- javax/swing/text/TabSet.java \
- javax/swing/text/TabStop.java \
- javax/swing/text/TextAction.java \
- javax/swing/text/Utilities.java \
- javax/swing/text/View.java \
- javax/swing/text/ViewFactory.java \
- javax/swing/text/html/HTML.java \
- javax/swing/text/html/parser/ParserDelegator.java \
- javax/swing/tree/TreeNode.java \
- javax/swing/tree/AbstractLayoutCache.java \
- javax/swing/tree/DefaultMutableTreeNode.java \
- javax/swing/tree/DefaultTreeCellEditor.java \
- javax/swing/tree/DefaultTreeCellRenderer.java \
- javax/swing/tree/DefaultTreeModel.java \
- javax/swing/tree/DefaultTreeSelectionModel.java \
- javax/swing/tree/ExpandVetoException.java \
- javax/swing/tree/FixedHeightLayoutCache.java \
- javax/swing/tree/MutableTreeNode.java \
- javax/swing/tree/RowMapper.java \
- javax/swing/tree/TreeCellEditor.java \
- javax/swing/tree/TreeCellRenderer.java \
- javax/swing/tree/TreeModel.java \
- javax/swing/tree/TreePath.java \
- javax/swing/tree/TreeSelectionModel.java \
- javax/swing/tree/VariableHeightLayoutCache.java \
- javax/swing/undo/UndoableEdit.java \
- javax/swing/undo/AbstractUndoableEdit.java \
- javax/swing/undo/CannotRedoException.java \
- javax/swing/undo/CannotUndoException.java \
- javax/swing/undo/CompoundEdit.java \
- javax/swing/undo/StateEdit.java \
- javax/swing/undo/StateEditable.java \
- javax/swing/undo/UndoManager.java \
- javax/swing/undo/UndoableEditSupport.java \
- javax/swing/BoundedRangeModel.java \
- javax/swing/CellEditor.java \
- javax/swing/ComboBoxEditor.java \
- javax/swing/ComboBoxModel.java \
- javax/swing/DefaultBoundedRangeModel.java \
- javax/swing/DesktopManager.java \
- javax/swing/InputVerifier.java \
- javax/swing/JInternalFrame.java \
- javax/swing/JTable.java \
- javax/swing/MenuElement.java \
- javax/swing/MenuSelectionManager.java \
- javax/swing/MutableComboBoxModel.java \
- javax/swing/Renderer.java \
- javax/swing/RootPaneContainer.java \
- javax/swing/ScrollPaneConstants.java \
- javax/swing/SingleSelectionModel.java \
- javax/swing/SizeRequirements.java \
- javax/swing/SizeSequence.java \
- javax/swing/WindowConstants.java \
- javax/swing/AbstractCellEditor.java \
- javax/swing/CellRendererPane.java \
- javax/swing/DebugGraphics.java \
- javax/swing/DefaultCellEditor.java \
- javax/swing/DefaultComboBoxModel.java \
- javax/swing/DefaultDesktopManager.java \
- javax/swing/DefaultFocusManager.java \
- javax/swing/DefaultListCellRenderer.java \
- javax/swing/DefaultSingleSelectionModel.java \
- javax/swing/FocusManager.java \
- javax/swing/JCheckBoxMenuItem.java \
- javax/swing/JColorChooser.java \
- javax/swing/JComboBox.java \
- javax/swing/JDesktopPane.java \
- javax/swing/JFileChooser.java \
- javax/swing/JMenu.java \
- javax/swing/JMenuItem.java \
- javax/swing/JPasswordField.java \
- javax/swing/JPopupMenu.java \
- javax/swing/JProgressBar.java \
- javax/swing/JRadioButtonMenuItem.java \
- javax/swing/JSeparator.java \
- javax/swing/JSlider.java \
- javax/swing/JSplitPane.java \
- javax/swing/JTextPane.java \
- javax/swing/JToolBar.java \
- javax/swing/OverlayLayout.java \
- javax/swing/Popup.java \
- javax/swing/PopupFactory.java \
- javax/swing/ProgressMonitor.java \
- javax/swing/ProgressMonitorInputStream.java \
- javax/swing/RepaintManager.java \
- javax/swing/ScrollPaneLayout.java \
- javax/swing/ViewportLayout.java
- 
- rmi_java_source_files =	\
- java/rmi/activation/Activatable.java \
- java/rmi/activation/ActivateFailedException.java \
- java/rmi/activation/ActivationDesc.java	\
- java/rmi/activation/ActivationException.java \
- java/rmi/activation/ActivationGroup.java \
- java/rmi/activation/ActivationGroupDesc.java \
- java/rmi/activation/ActivationGroupID.java \
- java/rmi/activation/ActivationID.java \
- java/rmi/activation/ActivationInstantiator.java	\
- java/rmi/activation/ActivationMonitor.java \
- java/rmi/activation/ActivationSystem.java \
- java/rmi/activation/Activator.java \
- java/rmi/activation/UnknownGroupException.java \
- java/rmi/activation/UnknownObjectException.java	\
- java/rmi/AccessException.java \
- java/rmi/AlreadyBoundException.java \
- java/rmi/ConnectException.java \
- java/rmi/ConnectIOException.java \
- java/rmi/MarshalException.java \
- java/rmi/MarshalledObject.java \
- java/rmi/Naming.java \
- java/rmi/NoSuchObjectException.java \
- java/rmi/NotBoundException.java	\
- java/rmi/RMISecurityException.java \
- java/rmi/RMISecurityManager.java \
- java/rmi/Remote.java \
- java/rmi/RemoteException.java \
- java/rmi/ServerError.java \
- java/rmi/ServerException.java \
- java/rmi/ServerRuntimeException.java \
- java/rmi/StubNotFoundException.java \
- java/rmi/UnexpectedException.java \
- java/rmi/UnknownHostException.java \
- java/rmi/UnmarshalException.java \
- java/rmi/dgc/DGC.java \
- java/rmi/dgc/Lease.java	\
- java/rmi/dgc/VMID.java \
- java/rmi/registry/LocateRegistry.java \
- java/rmi/registry/Registry.java	\
- java/rmi/registry/RegistryHandler.java \
- java/rmi/server/ExportException.java \
- java/rmi/server/LoaderHandler.java \
- java/rmi/server/LogStream.java \
- java/rmi/server/ObjID.java \
- java/rmi/server/Operation.java \
- java/rmi/server/RMIClassLoader.java \
- java/rmi/server/RMIClassLoaderSpi.java \
- java/rmi/server/RMIClientSocketFactory.java \
- java/rmi/server/RMIFailureHandler.java \
- java/rmi/server/RMIServerSocketFactory.java \
- java/rmi/server/RMISocketFactory.java \
- java/rmi/server/RemoteCall.java	\
- java/rmi/server/RemoteObject.java \
- java/rmi/server/RemoteRef.java \
- java/rmi/server/RemoteServer.java \
- java/rmi/server/RemoteStub.java	\
- java/rmi/server/ServerCloneException.java \
- java/rmi/server/ServerNotActiveException.java \
- java/rmi/server/ServerRef.java \
- java/rmi/server/Skeleton.java \
- java/rmi/server/SkeletonMismatchException.java \
- java/rmi/server/SkeletonNotFoundException.java \
- java/rmi/server/SocketSecurityException.java \
- java/rmi/server/UID.java \
- java/rmi/server/UnicastRemoteObject.java \
- java/rmi/server/Unreferenced.java \
- gnu/java/rmi/RMIMarshalledObjectInputStream.java \
- gnu/java/rmi/RMIMarshalledObjectOutputStream.java \
- gnu/java/rmi/dgc/DGCImpl.java \
- gnu/java/rmi/dgc/DGCImpl_Skel.java \
- gnu/java/rmi/dgc/DGCImpl_Stub.java \
- gnu/java/rmi/registry/RegistryImpl.java	\
- gnu/java/rmi/registry/RegistryImpl_Skel.java \
- gnu/java/rmi/registry/RegistryImpl_Stub.java \
- gnu/java/rmi/rmic/Compile_gcj.java \
- gnu/java/rmi/rmic/Compile_jikes.java \
- gnu/java/rmi/rmic/Compile_kjc.java \
- gnu/java/rmi/rmic/Compiler.java	\
- gnu/java/rmi/rmic/CompilerProcess.java \
- gnu/java/rmi/rmic/RMIC.java \
- gnu/java/rmi/rmic/RMICException.java \
- gnu/java/rmi/rmic/TabbedWriter.java \
- gnu/java/rmi/server/ConnectionRunnerPool.java \
- gnu/java/rmi/server/ProtocolConstants.java \
- gnu/java/rmi/server/RMIDefaultSocketFactory.java \
- gnu/java/rmi/server/RMIHashes.java \
- gnu/java/rmi/server/RMIIncomingThread.java \
- gnu/java/rmi/server/RMIObjectInputStream.java \
- gnu/java/rmi/server/RMIObjectOutputStream.java \
- gnu/java/rmi/server/RMIVoidValue.java \
- gnu/java/rmi/server/UnicastConnection.java \
- gnu/java/rmi/server/UnicastConnectionManager.java \
- gnu/java/rmi/server/UnicastRef.java \
- gnu/java/rmi/server/UnicastRemoteCall.java \
- gnu/java/rmi/server/UnicastRemoteStub.java \
- gnu/java/rmi/server/UnicastServer.java \
- gnu/java/rmi/server/UnicastServerRef.java
- 
- javax_imageio_source_files = \
- javax/imageio/ImageWriteParam.java \
- javax/imageio/ImageReader.java \
- javax/imageio/ImageWriter.java \
- javax/imageio/IIOException.java	\
- javax/imageio/IIOParamController.java \
- javax/imageio/ImageReadParam.java \
- javax/imageio/IIOParam.java \
- javax/imageio/spi/IIORegistry.java \
- javax/imageio/spi/ImageWriterSpi.java \
- javax/imageio/spi/ImageOutputStreamSpi.java \
- javax/imageio/spi/ServiceRegistry.java \
- javax/imageio/spi/ImageTranscoderSpi.java \
- javax/imageio/spi/ImageReaderSpi.java \
- javax/imageio/spi/IIOServiceProvider.java \
- javax/imageio/spi/ImageReaderWriterSpi.java \
- javax/imageio/spi/ImageInputStreamSpi.java \
- javax/imageio/spi/RegisterableService.java \
- javax/imageio/metadata/IIOAttr.java \
- javax/imageio/metadata/IIONamedNodeMap.java \
- javax/imageio/metadata/IIONodeList.java \
- javax/imageio/metadata/IIOMetadataFormatImpl.java \
- javax/imageio/metadata/IIOInvalidTreeException.java \
- javax/imageio/metadata/IIOMetadataFormat.java \
- javax/imageio/metadata/IIOMetadataController.java \
- javax/imageio/metadata/IIOMetadataNode.java \
- javax/imageio/metadata/IIOMetadata.java	\
- javax/imageio/stream/FileImageOutputStream.java	\
- javax/imageio/stream/ImageInputStream.java \
- javax/imageio/stream/IIOByteBuffer.java	\
- javax/imageio/stream/FileCacheImageInputStream.java \
- javax/imageio/stream/ImageInputStreamImpl.java \
- javax/imageio/stream/ImageOutputStreamImpl.java	\
- javax/imageio/stream/MemoryCacheImageInputStream.java \
- javax/imageio/stream/FileCacheImageOutputStream.java \
- javax/imageio/stream/ImageOutputStream.java \
- javax/imageio/stream/MemoryCacheImageOutputStream.java \
- javax/imageio/stream/FileImageInputStream.java \
- javax/imageio/event/IIOReadProgressListener.java \
- javax/imageio/event/IIOWriteWarningListener.java \
- javax/imageio/event/IIOReadWarningListener.java	\
- javax/imageio/event/IIOReadUpdateListener.java \
- javax/imageio/event/IIOWriteProgressListener.java \
- javax/imageio/ImageTranscoder.java \
- javax/imageio/ImageTypeSpecifier.java \
- javax/imageio/ImageIO.java \
- javax/imageio/IIOImage.java
- 
- javax_xml_source_files = \
- javax/xml/xpath/XPathConstants.java \
- javax/xml/xpath/XPathFunction.java \
- javax/xml/xpath/XPathVariableResolver.java \
- javax/xml/xpath/XPathExpressionException.java \
- javax/xml/xpath/XPathFunctionResolver.java \
- javax/xml/xpath/XPath.java \
- javax/xml/xpath/XPathFactoryConfigurationException.java	\
- javax/xml/xpath/XPathFactory.java \
- javax/xml/xpath/XPathException.java \
- javax/xml/xpath/XPathExpression.java \
- javax/xml/xpath/XPathFunctionException.java \
- javax/xml/validation/ValidatorHandler.java \
- javax/xml/validation/Validator.java \
- javax/xml/validation/TypeInfoProvider.java \
- javax/xml/validation/SchemaFactory.java	\
- javax/xml/validation/Schema.java \
- javax/xml/parsers/SAXParserFactory.java	\
- javax/xml/parsers/FactoryConfigurationError.java \
- javax/xml/parsers/SAXParser.java \
- javax/xml/parsers/DocumentBuilderFactory.java \
- javax/xml/parsers/ParserConfigurationException.java \
- javax/xml/parsers/DocumentBuilder.java \
- javax/xml/datatype/DatatypeFactory.java	\
- javax/xml/datatype/XMLGregorianCalendar.java \
- javax/xml/datatype/Duration.java \
- javax/xml/datatype/DatatypeConfigurationException.java \
- javax/xml/datatype/DatatypeConstants.java \
- javax/xml/XMLConstants.java \
- javax/xml/namespace/NamespaceContext.java \
- javax/xml/namespace/QName.java \
- javax/xml/transform/TransformerException.java \
- javax/xml/transform/TransformerFactoryConfigurationError.java \
- javax/xml/transform/sax/SAXResult.java \
- javax/xml/transform/sax/TransformerHandler.java	\
- javax/xml/transform/sax/SAXTransformerFactory.java \
- javax/xml/transform/sax/SAXSource.java \
- javax/xml/transform/sax/TemplatesHandler.java \
- javax/xml/transform/OutputKeys.java \
- javax/xml/transform/stream/StreamResult.java \
- javax/xml/transform/stream/StreamSource.java \
- javax/xml/transform/Source.java	\
- javax/xml/transform/SourceLocator.java \
- javax/xml/transform/ErrorListener.java \
- javax/xml/transform/TransformerConfigurationException.java \
- javax/xml/transform/Templates.java \
- javax/xml/transform/Result.java	\
- javax/xml/transform/URIResolver.java \
- javax/xml/transform/dom/DOMSource.java \
- javax/xml/transform/dom/DOMLocator.java	\
- javax/xml/transform/dom/DOMResult.java \
- javax/xml/transform/Transformer.java \
- javax/xml/transform/TransformerFactory.java
- 
- javax_source_files = \
- javax/net/VanillaSocketFactory.java \
- javax/net/ssl/TrustManagerFactorySpi.java \
- javax/net/ssl/SSLKeyException.java \
- javax/net/ssl/TrustManager.java	\
- javax/net/ssl/SSLServerSocket.java \
- javax/net/ssl/TrustManagerFactory.java \
- javax/net/ssl/KeyManager.java \
- javax/net/ssl/SSLSocketFactory.java \
- javax/net/ssl/SSLPermission.java \
- javax/net/ssl/SSLContext.java \
- javax/net/ssl/TrivialHostnameVerifier.java \
- javax/net/ssl/X509KeyManager.java \
- javax/net/ssl/SSLServerSocketFactory.java \
- javax/net/ssl/SSLSessionBindingListener.java \
- javax/net/ssl/SSLSessionContext.java \
- javax/net/ssl/KeyManagerFactory.java \
- javax/net/ssl/SSLProtocolException.java	\
- javax/net/ssl/SSLSocket.java \
- javax/net/ssl/HostnameVerifier.java \
- javax/net/ssl/HandshakeCompletedListener.java \
- javax/net/ssl/HttpsURLConnection.java \
- javax/net/ssl/KeyManagerFactorySpi.java	\
- javax/net/ssl/SSLHandshakeException.java \
- javax/net/ssl/SSLPeerUnverifiedException.java \
- javax/net/ssl/X509TrustManager.java \
- javax/net/ssl/SSLSession.java \
- javax/net/ssl/SSLContextSpi.java \
- javax/net/ssl/HandshakeCompletedEvent.java \
- javax/net/ssl/SSLSessionBindingEvent.java \
- javax/net/ssl/SSLException.java	\
- javax/net/ssl/ManagerFactoryParameters.java \
- javax/net/SocketFactory.java \
- javax/net/VanillaServerSocketFactory.java \
- javax/net/ServerSocketFactory.java \
- javax/print/attribute/HashPrintServiceAttributeSet.java	\
- javax/print/attribute/Attribute.java \
- javax/print/attribute/DocAttributeSet.java \
- javax/print/attribute/PrintRequestAttributeSet.java \
- javax/print/attribute/standard/Chromaticity.java \
- javax/print/attribute/standard/Destination.java \
- javax/print/attribute/standard/MediaPrintableArea.java \
- javax/print/attribute/standard/MediaSize.java \
- javax/print/attribute/standard/NumberOfInterveningJobs.java \
- javax/print/attribute/standard/PrinterMakeAndModel.java	\
- javax/print/attribute/standard/PrinterStateReason.java \
- javax/print/attribute/standard/JobImpressions.java \
- javax/print/attribute/standard/JobHoldUntil.java \
- javax/print/attribute/standard/JobKOctetsSupported.java	\
- javax/print/attribute/standard/JobPriority.java	\
- javax/print/attribute/standard/QueuedJobCount.java \
- javax/print/attribute/standard/JobOriginatingUserName.java \
- javax/print/attribute/standard/PrinterName.java	\
- javax/print/attribute/standard/PDLOverrideSupported.java \
- javax/print/attribute/standard/PrinterStateReasons.java	\
- javax/print/attribute/standard/JobMediaSheets.java \
- javax/print/attribute/standard/JobKOctets.java \
- javax/print/attribute/standard/MultipleDocumentHandling.java \
- javax/print/attribute/standard/PrinterMessageFromOperator.java \
- javax/print/attribute/standard/Severity.java \
- javax/print/attribute/standard/ReferenceUriSchemesSupported.java \
- javax/print/attribute/standard/DocumentName.java \
- javax/print/attribute/standard/PrinterMoreInfo.java \
- javax/print/attribute/standard/JobMessageFromOperator.java \
- javax/print/attribute/standard/JobStateReasons.java \
- javax/print/attribute/standard/PrinterIsAcceptingJobs.java \
- javax/print/attribute/standard/DateTimeAtProcessing.java \
- javax/print/attribute/standard/PagesPerMinute.java \
- javax/print/attribute/standard/PrinterResolution.java \
- javax/print/attribute/standard/JobMediaSheetsSupported.java \
- javax/print/attribute/standard/NumberUpSupported.java \
- javax/print/attribute/standard/Finishings.java \
- javax/print/attribute/standard/DateTimeAtCompleted.java	\
- javax/print/attribute/standard/NumberOfDocuments.java \
- javax/print/attribute/standard/PrinterInfo.java	\
- javax/print/attribute/standard/PrintQuality.java \
- javax/print/attribute/standard/JobSheets.java \
- javax/print/attribute/standard/Media.java \
- javax/print/attribute/standard/Fidelity.java \
- javax/print/attribute/standard/PrinterLocation.java \
- javax/print/attribute/standard/PrinterMoreInfoManufacturer.java	\
- javax/print/attribute/standard/OrientationRequested.java \
- javax/print/attribute/standard/JobState.java \
- javax/print/attribute/standard/DateTimeAtCreation.java \
- javax/print/attribute/standard/PresentationDirection.java \
- javax/print/attribute/standard/JobName.java \
- javax/print/attribute/standard/PagesPerMinuteColor.java	\
- javax/print/attribute/standard/CopiesSupported.java \
- javax/print/attribute/standard/PrinterURI.java \
- javax/print/attribute/standard/PageRanges.java \
- javax/print/attribute/standard/RequestingUserName.java \
- javax/print/attribute/standard/JobPrioritySupported.java \
- javax/print/attribute/standard/JobMediaSheetsCompleted.java \
- javax/print/attribute/standard/JobKOctetsProcessed.java	\
- javax/print/attribute/standard/JobImpressionsCompleted.java \
- javax/print/attribute/standard/Compression.java	\
- javax/print/attribute/standard/JobImpressionsSupported.java \
- javax/print/attribute/standard/Sides.java \
- javax/print/attribute/standard/JobStateReason.java \
- javax/print/attribute/standard/SheetCollate.java \
- javax/print/attribute/standard/Copies.java \
- javax/print/attribute/standard/MediaSizeName.java \
- javax/print/attribute/standard/OutputDeviceAssigned.java \
- javax/print/attribute/standard/PrinterState.java \
- javax/print/attribute/standard/NumberUp.java \
- javax/print/attribute/standard/ColorSupported.java \
- javax/print/attribute/HashAttributeSet.java \
- javax/print/attribute/SetOfIntegerSyntax.java \
- javax/print/attribute/HashDocAttributeSet.java \
- javax/print/attribute/PrintRequestAttribute.java \
- javax/print/attribute/DateTimeSyntax.java \
- javax/print/attribute/PrintServiceAttribute.java \
- javax/print/attribute/UnmodifiableSetException.java \
- javax/print/attribute/HashPrintJobAttributeSet.java \
- javax/print/attribute/PrintJobAttribute.java \
- javax/print/attribute/AttributeSet.java	\
- javax/print/attribute/ResolutionSyntax.java \
- javax/print/attribute/URISyntax.java \
- javax/print/attribute/AttributeSetUtilities.java \
- javax/print/attribute/HashPrintRequestAttributeSet.java	\
- javax/print/attribute/TextSyntax.java \
- javax/print/attribute/PrintJobAttributeSet.java	\
- javax/print/attribute/SupportedValuesAttribute.java \
- javax/print/attribute/EnumSyntax.java \
- javax/print/attribute/DocAttribute.java	\
- javax/print/attribute/Size2DSyntax.java	\
- javax/print/attribute/IntegerSyntax.java \
- javax/print/attribute/PrintServiceAttributeSet.java \
- javax/print/PrintService.java \
- javax/print/DocFlavor.java \
- javax/print/DocPrintJob.java \
- javax/print/event/PrintEvent.java \
- javax/print/event/PrintJobAdapter.java \
- javax/print/event/PrintServiceAttributeEvent.java \
- javax/print/event/PrintJobAttributeEvent.java \
- javax/print/event/PrintServiceAttributeListener.java \
- javax/print/event/PrintJobEvent.java \
- javax/print/event/PrintJobListener.java	\
- javax/print/event/PrintJobAttributeListener.java \
- javax/print/PrintServiceLookup.java \
- javax/print/URIException.java \
- javax/print/StreamPrintService.java \
- javax/print/MultiDoc.java \
- javax/print/FlavorException.java \
- javax/print/Doc.java \
- javax/print/MultiDocPrintJob.java \
- javax/print/CancelablePrintJob.java \
- javax/print/MultiDocPrintService.java \
- javax/print/ServiceUIFactory.java \
- javax/print/AttributeException.java \
- javax/print/PrintException.java	\
- javax/naming/ServiceUnavailableException.java \
- javax/naming/directory/Attribute.java \
- javax/naming/directory/SchemaViolationException.java \
- javax/naming/directory/InitialDirContext.java \
- javax/naming/directory/BasicAttribute.java \
- javax/naming/directory/NoSuchAttributeException.java \
- javax/naming/directory/InvalidAttributesException.java \
- javax/naming/directory/InvalidAttributeValueException.java \
- javax/naming/directory/BasicAttributes.java \
- javax/naming/directory/AttributeModificationException.java \
- javax/naming/directory/InvalidAttributeIdentifierException.java	\
- javax/naming/directory/DirContext.java \
- javax/naming/directory/Attributes.java \
- javax/naming/directory/InvalidSearchControlsException.java \
- javax/naming/directory/SearchControls.java \
- javax/naming/directory/AttributeInUseException.java \
- javax/naming/directory/InvalidSearchFilterException.java \
- javax/naming/directory/ModificationItem.java \
- javax/naming/directory/SearchResult.java \
- javax/naming/Binding.java \
- javax/naming/ContextNotEmptyException.java \
- javax/naming/Referenceable.java	\
- javax/naming/InterruptedNamingException.java \
- javax/naming/CommunicationException.java \
- javax/naming/LinkException.java	\
- javax/naming/BinaryRefAddr.java	\
- javax/naming/LinkLoopException.java \
- javax/naming/AuthenticationException.java \
- javax/naming/NameAlreadyBoundException.java \
- javax/naming/MalformedLinkException.java \
- javax/naming/NotContextException.java \
- javax/naming/spi/DirStateFactory.java \
- javax/naming/spi/ResolveResult.java \
- javax/naming/spi/ObjectFactoryBuilder.java \
- javax/naming/spi/DirObjectFactory.java \
- javax/naming/spi/DirectoryManager.java \
- javax/naming/spi/InitialContextFactoryBuilder.java \
- javax/naming/spi/ObjectFactory.java \
- javax/naming/spi/Resolver.java \
- javax/naming/spi/StateFactory.java \
- javax/naming/spi/InitialContextFactory.java \
- javax/naming/spi/NamingManager.java \
- javax/naming/InvalidNameException.java \
- javax/naming/NamingEnumeration.java \
- javax/naming/LinkRef.java \
- javax/naming/event/NamingListener.java \
- javax/naming/event/NamingEvent.java \
- javax/naming/event/NamespaceChangeListener.java	\
- javax/naming/event/ObjectChangeListener.java \
- javax/naming/event/EventContext.java \
- javax/naming/event/NamingExceptionEvent.java \
- javax/naming/event/EventDirContext.java	\
- javax/naming/NamingException.java \
- javax/naming/CannotProceedException.java \
- javax/naming/PartialResultException.java \
- javax/naming/TimeLimitExceededException.java \
- javax/naming/NoPermissionException.java	\
- javax/naming/CompoundName.java \
- javax/naming/SizeLimitExceededException.java \
- javax/naming/NoInitialContextException.java \
- javax/naming/NameNotFoundException.java	\
- javax/naming/InitialContext.java \
- javax/naming/NamingSecurityException.java \
- javax/naming/Context.java \
- javax/naming/ConfigurationException.java \
- javax/naming/InsufficientResourcesException.java \
- javax/naming/AuthenticationNotSupportedException.java \
- javax/naming/StringRefAddr.java	\
- javax/naming/ldap/InitialLdapContext.java \
- javax/naming/ldap/ExtendedRequest.java \
- javax/naming/ldap/Control.java \
- javax/naming/ldap/UnsolicitedNotificationListener.java \
- javax/naming/ldap/LdapReferralException.java \
- javax/naming/ldap/UnsolicitedNotificationEvent.java \
- javax/naming/ldap/HasControls.java \
- javax/naming/ldap/LdapContext.java \
- javax/naming/ldap/ExtendedResponse.java	\
- javax/naming/ldap/UnsolicitedNotification.java \
- javax/naming/ldap/ControlFactory.java \
- javax/naming/OperationNotSupportedException.java \
- javax/naming/ReferralException.java \
- javax/naming/LimitExceededException.java \
- javax/naming/Reference.java \
- javax/naming/NameParser.java \
- javax/naming/NameClassPair.java	\
- javax/naming/RefAddr.java \
- javax/naming/CompositeName.java	\
- javax/naming/Name.java \
- javax/security/cert/CertificateNotYetValidException.java \
- javax/security/cert/Certificate.java \
- javax/security/cert/X509Certificate.java \
- javax/security/cert/X509CertBridge.java	\
- javax/security/cert/CertificateEncodingException.java \
- javax/security/cert/CertificateExpiredException.java \
- javax/security/cert/CertificateException.java \
- javax/security/cert/CertificateParsingException.java \
- javax/security/auth/Destroyable.java \
- javax/security/auth/x500/X500PrivateCredential.java \
- javax/security/auth/x500/X500Principal.java \
- javax/security/auth/spi/LoginModule.java \
- javax/security/auth/DestroyFailedException.java	\
- javax/security/auth/SubjectDomainCombiner.java \
- javax/security/auth/AuthPermission.java	\
- javax/security/auth/login/CredentialExpiredException.java \
- javax/security/auth/login/NullConfiguration.java \
- javax/security/auth/login/AccountExpiredException.java \
- javax/security/auth/login/LoginException.java \
- javax/security/auth/login/AppConfigurationEntry.java \
- javax/security/auth/login/Configuration.java \
- javax/security/auth/login/LoginContext.java \
- javax/security/auth/login/FailedLoginException.java \
- javax/security/auth/PrivateCredentialPermission.java \
- javax/security/auth/Subject.java \
- javax/security/auth/Policy.java	\
- javax/security/auth/Refreshable.java \
- javax/security/auth/callback/TextInputCallback.java \
- javax/security/auth/callback/LanguageCallback.java \
- javax/security/auth/callback/TextOutputCallback.java \
- javax/security/auth/callback/UnsupportedCallbackException.java \
- javax/security/auth/callback/Callback.java \
- javax/security/auth/callback/ConfirmationCallback.java \
- javax/security/auth/callback/ChoiceCallback.java \
- javax/security/auth/callback/NameCallback.java \
- javax/security/auth/callback/PasswordCallback.java \
- javax/security/auth/callback/CallbackHandler.java \
- javax/security/auth/RefreshFailedException.java	\
- javax/security/sasl/RealmCallback.java \
- javax/security/sasl/SaslClient.java \
- javax/security/sasl/RealmChoiceCallback.java \
- javax/security/sasl/AuthenticationException.java \
- javax/security/sasl/Sasl.java \
- javax/security/sasl/SaslClientFactory.java \
- javax/security/sasl/AuthorizeCallback.java \
- javax/security/sasl/SaslServerFactory.java \
- javax/security/sasl/SaslException.java \
- javax/security/sasl/SaslServer.java \
- javax/transaction/TransactionRolledbackException.java \
- javax/transaction/Synchronization.java \
- javax/transaction/TransactionRequiredException.java \
- javax/transaction/RollbackException.java \
- javax/transaction/Status.java \
- javax/transaction/HeuristicMixedException.java \
- javax/transaction/HeuristicRollbackException.java \
- javax/transaction/SystemException.java \
- javax/transaction/UserTransaction.java \
- javax/transaction/NotSupportedException.java \
- javax/transaction/HeuristicCommitException.java	\
- javax/transaction/Transaction.java \
- javax/transaction/TransactionManager.java \
- javax/transaction/InvalidTransactionException.java \
- javax/transaction/xa/XAException.java \
- javax/transaction/xa/XAResource.java \
- javax/transaction/xa/Xid.java \
- javax/accessibility/AccessibleValue.java \
- javax/accessibility/AccessibleBundle.java \
- javax/accessibility/AccessibleContext.java \
- javax/accessibility/AccessibleRelationSet.java \
- javax/accessibility/Accessible.java \
- javax/accessibility/AccessibleTableModelChange.java \
- javax/accessibility/AccessibleState.java \
- javax/accessibility/AccessibleIcon.java	\
- javax/accessibility/AccessibleHypertext.java \
- javax/accessibility/AccessibleComponent.java \
- javax/accessibility/AccessibleText.java	\
- javax/accessibility/AccessibleRole.java	\
- javax/accessibility/AccessibleEditableText.java	\
- javax/accessibility/AccessibleRelation.java \
- javax/accessibility/AccessibleTable.java \
- javax/accessibility/AccessibleStateSet.java \
- javax/accessibility/AccessibleSelection.java \
- javax/accessibility/AccessibleExtendedTable.java \
- javax/accessibility/AccessibleResourceBundle.java \
- javax/accessibility/AccessibleExtendedComponent.java \
- javax/accessibility/AccessibleHyperlink.java \
- javax/accessibility/AccessibleKeyBinding.java \
- javax/accessibility/AccessibleAction.java \
- javax/sql/ConnectionEventListener.java \
- javax/sql/RowSetEvent.java \
- javax/sql/ConnectionPoolDataSource.java	\
- javax/sql/RowSetWriter.java \
- javax/sql/XAConnection.java \
- javax/sql/RowSet.java \
- javax/sql/DataSource.java \
- javax/sql/RowSetInternal.java \
- javax/sql/RowSetReader.java \
- javax/sql/RowSetMetaData.java \
- javax/sql/PooledConnection.java	\
- javax/sql/XADataSource.java \
- javax/sql/RowSetListener.java \
- javax/sql/ConnectionEvent.java \
- javax/crypto/Cipher.java \
- javax/crypto/IllegalBlockSizeException.java \
- javax/crypto/MacSpi.java \
- javax/crypto/SecretKeyFactorySpi.java \
- javax/crypto/ShortBufferException.java \
- javax/crypto/KeyAgreement.java \
- javax/crypto/ExemptionMechanism.java \
- javax/crypto/CipherOutputStream.java \
- javax/crypto/SealedObject.java \
- javax/crypto/NullCipher.java \
- javax/crypto/KeyAgreementSpi.java \
- javax/crypto/SecretKeyFactory.java \
- javax/crypto/SecretKey.java \
- javax/crypto/NullCipherImpl.java \
- javax/crypto/spec/DESKeySpec.java \
- javax/crypto/spec/DHPrivateKeySpec.java	\
- javax/crypto/spec/DHParameterSpec.java \
- javax/crypto/spec/PBEParameterSpec.java	\
- javax/crypto/spec/DESedeKeySpec.java \
- javax/crypto/spec/DHGenParameterSpec.java \
- javax/crypto/spec/DHPublicKeySpec.java \
- javax/crypto/spec/PBEKeySpec.java \
- javax/crypto/spec/RC5ParameterSpec.java	\
- javax/crypto/spec/RC2ParameterSpec.java	\
- javax/crypto/spec/IvParameterSpec.java \
- javax/crypto/spec/SecretKeySpec.java \
- javax/crypto/interfaces/DHPublicKey.java \
- javax/crypto/interfaces/DHKey.java \
- javax/crypto/interfaces/DHPrivateKey.java \
- javax/crypto/interfaces/PBEKey.java \
- javax/crypto/NoSuchPaddingException.java \
- javax/crypto/KeyGeneratorSpi.java \
- javax/crypto/BadPaddingException.java \
- javax/crypto/CipherSpi.java \
- javax/crypto/KeyGenerator.java \
- javax/crypto/CipherInputStream.java \
- javax/crypto/ExemptionMechanismException.java \
- javax/crypto/ExemptionMechanismSpi.java	\
- javax/crypto/EncryptedPrivateKeyInfo.java \
- javax/crypto/Mac.java
- 
- org_source_files = \
- org/ietf/jgss/GSSManager.java \
- org/ietf/jgss/GSSException.java	\
- org/ietf/jgss/MessageProp.java \
- org/ietf/jgss/GSSName.java \
- org/ietf/jgss/GSSContext.java \
- org/ietf/jgss/Oid.java \
- org/ietf/jgss/GSSCredential.java \
- org/ietf/jgss/ChannelBinding.java
- 
- gnu_xml_source_files = \
- gnu/xml/xpath/EqualityExpr.java	\
- gnu/xml/xpath/NumberFunction.java \
- gnu/xml/xpath/StringLengthFunction.java	\
- gnu/xml/xpath/NameFunction.java	\
- gnu/xml/xpath/SumFunction.java \
- gnu/xml/xpath/Pattern.java \
- gnu/xml/xpath/StringFunction.java \
- gnu/xml/xpath/NegativeExpr.java	\
- gnu/xml/xpath/UnionExpr.java \
- gnu/xml/xpath/SubstringFunction.java \
- gnu/xml/xpath/Expr.java	\
- gnu/xml/xpath/XPathFactoryImpl.java \
- gnu/xml/xpath/NormalizeSpaceFunction.java \
- gnu/xml/xpath/Constant.java \
- gnu/xml/xpath/Predicate.java \
- gnu/xml/xpath/Path.java	\
- gnu/xml/xpath/OrExpr.java \
- gnu/xml/xpath/LangFunction.java	\
- gnu/xml/xpath/StartsWithFunction.java \
- gnu/xml/xpath/SubstringAfterFunction.java \
- gnu/xml/xpath/FloorFunction.java \
- gnu/xml/xpath/NotFunction.java \
- gnu/xml/xpath/Root.java	\
- gnu/xml/xpath/PositionFunction.java \
- gnu/xml/xpath/VariableReference.java \
- gnu/xml/xpath/DocumentOrderComparator.java \
- gnu/xml/xpath/LocalNameFunction.java \
- gnu/xml/xpath/NamespaceUriFunction.java	\
- gnu/xml/xpath/TranslateFunction.java \
- gnu/xml/xpath/FalseFunction.java \
- gnu/xml/xpath/AndExpr.java \
- gnu/xml/xpath/XPathParser.java \
- gnu/xml/xpath/NamespaceTest.java \
- gnu/xml/xpath/ConcatFunction.java \
- gnu/xml/xpath/NameTest.java \
- gnu/xml/xpath/CountFunction.java \
- gnu/xml/xpath/IdFunction.java \
- gnu/xml/xpath/LastFunction.java	\
- gnu/xml/xpath/XPathTokenizer.java \
- gnu/xml/xpath/Steps.java \
- gnu/xml/xpath/TrueFunction.java	\
- gnu/xml/xpath/BooleanFunction.java \
- gnu/xml/xpath/ParenthesizedExpr.java \
- gnu/xml/xpath/XPathImpl.java \
- gnu/xml/xpath/Selector.java \
- gnu/xml/xpath/RoundFunction.java \
- gnu/xml/xpath/SubstringBeforeFunction.java \
- gnu/xml/xpath/Function.java \
- gnu/xml/xpath/CeilingFunction.java \
- gnu/xml/xpath/RelationalExpr.java \
- gnu/xml/xpath/FunctionCall.java	\
- gnu/xml/xpath/NodeTypeTest.java	\
- gnu/xml/xpath/ArithmeticExpr.java \
- gnu/xml/xpath/Test.java	\
- gnu/xml/xpath/ContainsFunction.java \
- gnu/xml/pipeline/EventFilter.java \
- gnu/xml/pipeline/NSFilter.java \
- gnu/xml/pipeline/XsltFilter.java \
- gnu/xml/pipeline/ValidationConsumer.java \
- gnu/xml/pipeline/PipelineFactory.java \
- gnu/xml/pipeline/TextConsumer.java \
- gnu/xml/pipeline/LinkFilter.java \
- gnu/xml/pipeline/TeeConsumer.java \
- gnu/xml/pipeline/DomConsumer.java \
- gnu/xml/pipeline/EventConsumer.java \
- gnu/xml/pipeline/WellFormednessFilter.java \
- gnu/xml/pipeline/XIncludeFilter.java \
- gnu/xml/pipeline/CallFilter.java \
- gnu/xml/aelfred2/XmlParser.java	\
- gnu/xml/aelfred2/XmlReader.java	\
- gnu/xml/aelfred2/JAXPFactory.java \
- gnu/xml/aelfred2/ContentHandler2.java \
- gnu/xml/aelfred2/SAXDriver.java	\
- gnu/xml/util/XCat.java \
- gnu/xml/util/DomParser.java \
- gnu/xml/util/XMLWriter.java \
- gnu/xml/util/Resolver.java \
- gnu/xml/util/DoParse.java \
- gnu/xml/util/XHTMLWriter.java \
- gnu/xml/util/SAXNullTransformerFactory.java \
- gnu/xml/dom/DomXPathNSResolver.java \
- gnu/xml/dom/ls/FilteredSAXEventSink.java \
- gnu/xml/dom/ls/DomLSException.java \
- gnu/xml/dom/ls/DomLSSerializer.java \
- gnu/xml/dom/ls/DomLSInput.java \
- gnu/xml/dom/ls/DomLSOutput.java	\
- gnu/xml/dom/ls/SAXEventSink.java \
- gnu/xml/dom/ls/DomLSParser.java	\
- gnu/xml/dom/ls/ReaderInputStream.java \
- gnu/xml/dom/ls/WriterOutputStream.java \
- gnu/xml/dom/DomElement.java \
- gnu/xml/dom/DomNsNode.java \
- gnu/xml/dom/DomAttr.java \
- gnu/xml/dom/DTDAttributeTypeInfo.java \
- gnu/xml/dom/DomDocumentBuilder.java \
- gnu/xml/dom/DTDElementTypeInfo.java \
- gnu/xml/dom/DomDocument.java \
- gnu/xml/dom/DomXPathExpression.java \
- gnu/xml/dom/DomDocumentConfiguration.java \
- gnu/xml/dom/DomDocumentFragment.java \
- gnu/xml/dom/DomProcessingInstruction.java \
- gnu/xml/dom/Consumer.java \
- gnu/xml/dom/DomComment.java \
- gnu/xml/dom/DomCharacterData.java \
- gnu/xml/dom/DomExtern.java \
- gnu/xml/dom/DomEntityReference.java \
- gnu/xml/dom/DomNamedNodeMap.java \
- gnu/xml/dom/ImplementationList.java \
- gnu/xml/dom/ImplementationSource.java \
- gnu/xml/dom/DomImpl.java \
- gnu/xml/dom/DomDoctype.java \
- gnu/xml/dom/DomNode.java \
- gnu/xml/dom/DomXPathResult.java	\
- gnu/xml/dom/DomDocumentBuilderFactory.java \
- gnu/xml/dom/DomText.java \
- gnu/xml/dom/DomNSResolverContext.java \
- gnu/xml/dom/DomNodeIterator.java \
- gnu/xml/dom/DomNotation.java \
- gnu/xml/dom/JAXPFactory.java \
- gnu/xml/dom/DomIterator.java \
- gnu/xml/dom/DomEvent.java \
- gnu/xml/dom/DomEntity.java \
- gnu/xml/dom/DomCDATASection.java \
- gnu/xml/dom/DomDOMException.java \
- gnu/xml/transform/GenerateIdFunction.java \
- gnu/xml/transform/FormatNumberFunction.java \
- gnu/xml/transform/ValueOfNode.java \
- gnu/xml/transform/ApplyImportsNode.java	\
- gnu/xml/transform/WithParam.java \
- gnu/xml/transform/DocumentFunction.java	\
- gnu/xml/transform/SAXSerializer.java \
- gnu/xml/transform/FunctionAvailableFunction.java \
- gnu/xml/transform/ElementAvailableFunction.java	\
- gnu/xml/transform/IfNode.java \
- gnu/xml/transform/ApplyTemplatesNode.java \
- gnu/xml/transform/SortKey.java \
- gnu/xml/transform/Key.java \
- gnu/xml/transform/ElementNode.java \
- gnu/xml/transform/CurrentFunction.java \
- gnu/xml/transform/XSLComparator.java \
- gnu/xml/transform/CallTemplateNode.java	\
- gnu/xml/transform/TemplatesImpl.java \
- gnu/xml/transform/ChooseNode.java \
- gnu/xml/transform/NumberNode.java \
- gnu/xml/transform/CopyOfNode.java \
- gnu/xml/transform/ParameterNode.java \
- gnu/xml/transform/TransformerFactoryImpl.java \
- gnu/xml/transform/TextNode.java	\
- gnu/xml/transform/CopyNode.java	\
- gnu/xml/transform/SystemPropertyFunction.java \
- gnu/xml/transform/Stylesheet.java \
- gnu/xml/transform/ProcessingInstructionNode.java \
- gnu/xml/transform/UnparsedEntityUriFunction.java \
- gnu/xml/transform/URIResolverEntityResolver.java \
- gnu/xml/transform/ErrorListenerErrorHandler.java \
- gnu/xml/transform/Bindings.java	\
- gnu/xml/transform/AttributeSet.java \
- gnu/xml/transform/Template.java	\
- gnu/xml/transform/MessageNode.java \
- gnu/xml/transform/LiteralNode.java \
- gnu/xml/transform/StreamSerializer.java	\
- gnu/xml/transform/XSLURIResolver.java \
- gnu/xml/transform/AttributeNode.java \
- gnu/xml/transform/CommentNode.java \
- gnu/xml/transform/ForEachNode.java \
- gnu/xml/transform/KeyFunction.java \
- gnu/xml/transform/TransformerImpl.java \
- gnu/xml/transform/WhenNode.java	\
- gnu/xml/transform/NodeNumberNode.java \
- gnu/xml/transform/OtherwiseNode.java \
- gnu/xml/transform/AbstractNumberNode.java \
- gnu/xml/transform/TemplateNode.java \
- gnu/xml/transform/TransformerOutputProperties.java \
- gnu/xml/transform/DOMSourceLocator.java
- 
- ## Java files which are created by configure and thus are in the build
- ## directory.
- built_java_source_files = java/lang/ConcreteProcess.java \
-                           gnu/classpath/Configuration.java
- 
- ## Java files in the core packages java.lang, java.io, and java.util.
- ## These are built before the other source files, in order to reduce 
- ## build time.
- core_java_source_files = \
- java/lang/AbstractMethodError.java \
- java/lang/ArithmeticException.java \
- java/lang/ArrayIndexOutOfBoundsException.java \
- java/lang/ArrayStoreException.java \
- java/lang/AssertionError.java \
- java/lang/Boolean.java \
- java/lang/Byte.java \
- java/lang/Character.java \
- java/lang/CharSequence.java \
- java/lang/ClassCastException.java \
- java/lang/ClassCircularityError.java \
- java/lang/ClassFormatError.java	\
- java/lang/ClassLoader.java \
- java/lang/ClassNotFoundException.java \
- java/lang/CloneNotSupportedException.java \
- java/lang/Cloneable.java \
- java/lang/Comparable.java \
- java/lang/Compiler.java	\
- java/lang/Double.java \
- java/lang/Error.java \
- java/lang/Exception.java \
- java/lang/ExceptionInInitializerError.java \
- java/lang/Float.java \
- java/lang/IllegalAccessError.java \
- java/lang/IllegalAccessException.java \
- java/lang/IllegalArgumentException.java	\
- java/lang/IllegalMonitorStateException.java \
- java/lang/IllegalStateException.java \
- java/lang/IllegalThreadStateException.java \
- java/lang/IncompatibleClassChangeError.java \
- java/lang/IndexOutOfBoundsException.java \
- java/lang/InheritableThreadLocal.java \
- java/lang/InstantiationError.java \
- java/lang/InstantiationException.java \
- java/lang/Integer.java \
- java/lang/InternalError.java \
- java/lang/InterruptedException.java \
- java/lang/LinkageError.java \
- java/lang/Long.java \
- java/lang/Math.java \
- java/lang/NegativeArraySizeException.java \
- java/lang/NoClassDefFoundError.java \
- java/lang/NoSuchFieldError.java	\
- java/lang/NoSuchFieldException.java \
- java/lang/NoSuchMethodError.java \
- java/lang/NoSuchMethodException.java \
- java/lang/NullPointerException.java \
- java/lang/Number.java \
- java/lang/NumberFormatException.java \
- java/lang/OutOfMemoryError.java	\
- java/lang/Package.java \
- java/lang/Process.java \
- java/lang/Runnable.java	\
- java/lang/Runtime.java \
- java/lang/RuntimeException.java	\
- java/lang/RuntimePermission.java \
- java/lang/SecurityException.java \
- java/lang/SecurityManager.java \
- java/lang/Short.java \
- java/lang/StackOverflowError.java \
- java/lang/StackTraceElement.java \
- java/lang/StrictMath.java \
- java/lang/String.java \
- java/lang/StringBuffer.java \
- java/lang/StringIndexOutOfBoundsException.java \
- java/lang/System.java \
- java/lang/Thread.java \
- java/lang/ThreadDeath.java \
- java/lang/ThreadGroup.java \
- java/lang/ThreadLocal.java \
- java/lang/Throwable.java \
- java/lang/UnknownError.java \
- java/lang/UnsatisfiedLinkError.java \
- java/lang/UnsupportedClassVersionError.java \
- java/lang/UnsupportedOperationException.java \
- java/lang/VerifyError.java \
- java/lang/VirtualMachineError.java \
- java/lang/VMClassLoader.java \
- java/lang/VMCompiler.java \
- java/lang/VMSecurityManager.java \
- java/lang/VMThrowable.java \
- java/lang/Void.java \
- java/io/BufferedInputStream.java \
- java/io/BufferedOutputStream.java \
- java/io/BufferedReader.java \
- java/io/BufferedWriter.java \
- java/io/ByteArrayInputStream.java \
- java/io/ByteArrayOutputStream.java \
- java/io/CharArrayReader.java \
- java/io/CharArrayWriter.java \
- java/io/CharConversionException.java \
- java/io/DataInput.java \
- java/io/DataInputStream.java \
- java/io/DataOutput.java	\
- java/io/DataOutputStream.java \
- java/io/EOFException.java \
- java/io/Externalizable.java \
- java/io/File.java \
- java/io/FileDescriptor.java \
- java/io/FileFilter.java \
- java/io/FileInputStream.java \
- java/io/FileNotFoundException.java \
- java/io/FileOutputStream.java \
- java/io/FilePermission.java \
- java/io/FileReader.java	\
- java/io/FileWriter.java	\
- java/io/FilenameFilter.java \
- java/io/FilterInputStream.java \
- java/io/FilterOutputStream.java	\
- java/io/FilterReader.java \
- java/io/FilterWriter.java \
- java/io/IOException.java \
- java/io/InputStream.java \
- java/io/InputStreamReader.java \
- java/io/InterruptedIOException.java \
- java/io/InvalidClassException.java \
- java/io/InvalidObjectException.java \
- java/io/LineNumberInputStream.java \
- java/io/LineNumberReader.java \
- java/io/NotActiveException.java	\
- java/io/NotSerializableException.java \
- java/io/ObjectInput.java \
- java/io/ObjectInputStream.java \
- java/io/ObjectInputValidation.java \
- java/io/ObjectOutput.java \
- java/io/ObjectOutputStream.java	\
- java/io/ObjectStreamClass.java \
- java/io/ObjectStreamConstants.java \
- java/io/ObjectStreamException.java \
- java/io/ObjectStreamField.java \
- java/io/OptionalDataException.java \
- java/io/OutputStream.java \
- java/io/OutputStreamWriter.java	\
- java/io/PipedInputStream.java \
- java/io/PipedOutputStream.java \
- java/io/PipedReader.java \
- java/io/PipedWriter.java \
- java/io/PrintStream.java \
- java/io/PrintWriter.java \
- java/io/PushbackInputStream.java \
- java/io/PushbackReader.java \
- java/io/RandomAccessFile.java \
- java/io/Reader.java \
- java/io/SequenceInputStream.java \
- java/io/Serializable.java \
- java/io/SerializablePermission.java \
- java/io/StreamCorruptedException.java \
- java/io/StreamTokenizer.java \
- java/io/StringBufferInputStream.java \
- java/io/StringReader.java \
- java/io/StringWriter.java \
- java/io/SyncFailedException.java \
- java/io/UTFDataFormatException.java \
- java/io/UnsupportedEncodingException.java \
- java/io/VMObjectStreamClass.java \
- java/io/WriteAbortedException.java \
- java/io/Writer.java \
- java/util/AbstractCollection.java \
- java/util/AbstractList.java \
- java/util/AbstractMap.java \
- java/util/AbstractSequentialList.java \
- java/util/AbstractSet.java \
- java/util/ArrayList.java \
- java/util/Arrays.java \
- java/util/BitSet.java \
- java/util/Calendar.java	\
- java/util/Collection.java \
- java/util/Collections.java \
- java/util/Comparator.java \
- java/util/ConcurrentModificationException.java \
- java/util/Currency.java \
- java/util/Date.java \
- java/util/Dictionary.java \
- java/util/EmptyStackException.java \
- java/util/Enumeration.java \
- java/util/EventListener.java \
- java/util/EventListenerProxy.java \
- java/util/EventObject.java \
- java/util/GregorianCalendar.java \
- java/util/HashMap.java \
- java/util/HashSet.java \
- java/util/Hashtable.java \
- java/util/IdentityHashMap.java \
- java/util/Iterator.java	\
- java/util/LinkedList.java \
- java/util/LinkedHashMap.java \
- java/util/LinkedHashSet.java \
- java/util/List.java \
- java/util/ListIterator.java \
- java/util/ListResourceBundle.java \
- java/util/Locale.java \
- java/util/Map.java \
- java/util/MissingResourceException.java	\
- java/util/NoSuchElementException.java \
- java/util/Observable.java \
- java/util/Observer.java	\
- java/util/Properties.java \
- java/util/PropertyPermission.java \
- java/util/PropertyPermissionCollection.java \
- java/util/PropertyResourceBundle.java \
- java/util/Random.java \
- java/util/RandomAccess.java \
- java/util/ResourceBundle.java \
- java/util/Set.java \
- java/util/SimpleTimeZone.java \
- java/util/SortedMap.java \
- java/util/SortedSet.java \
- java/util/Stack.java \
- java/util/StringTokenizer.java \
- java/util/TimeZone.java	\
- java/util/Timer.java \
- java/util/TimerTask.java \
- java/util/TreeMap.java \
- java/util/TreeSet.java \
- java/util/TooManyListenersException.java \
- java/util/Vector.java \
- java/util/VMTimeZone.java	\
- java/util/WeakHashMap.java \
- java/util/logging/ConsoleHandler.java \
- java/util/logging/ErrorManager.java \
- java/util/logging/FileHandler.java \
- java/util/logging/Filter.java \
- java/util/logging/Formatter.java \
- java/util/logging/Handler.java \
- java/util/logging/Level.java \
- java/util/logging/Logger.java \
- java/util/logging/LoggingPermission.java \
- java/util/logging/LogManager.java \
- java/util/logging/LogRecord.java \
- java/util/logging/MemoryHandler.java \
- java/util/logging/SimpleFormatter.java \
- java/util/logging/SocketHandler.java \
- java/util/logging/StreamHandler.java \
- java/util/logging/XMLFormatter.java \
- java/util/prefs/NodeChangeListener.java \
- java/util/prefs/Preferences.java \
- java/util/prefs/PreferenceChangeListener.java \
- java/util/prefs/NodeChangeEvent.java \
- java/util/prefs/InvalidPreferencesFormatException.java \
- java/util/prefs/AbstractPreferences.java \
- java/util/prefs/BackingStoreException.java \
- java/util/prefs/PreferenceChangeEvent.java \
- java/util/prefs/PreferencesFactory.java \
- java/util/regex/Matcher.java \
- java/util/regex/Pattern.java \
- java/util/regex/PatternSyntaxException.java
- 
- ## List of all .java files to be compiled.  Please keep this list
- ## alphabetical.  Please put files from java/lang, java/io, and java/util
- ## into core_java_source_files.  Please put files from gnu/gcj/convert 
- ## into convert_source_files and files from java/awt into
- ## awt_java_source_files.  If the .java file has a hand-maintained
- ## header, please list it in special_java_source_files.
- ordinary_java_source_files = $(core_java_source_files) \
- gnu/classpath/ServiceFactory.java \
- gnu/classpath/ServiceProviderLoadingAction.java \
- gnu/gcj/Core.java \
- gnu/gcj/RawData.java \
- gnu/gcj/RawDataManaged.java \
- gnu/gcj/io/DefaultMimeTypes.java \
- gnu/gcj/io/MimeTypes.java \
- gnu/gcj/io/SimpleSHSStream.java	\
- gnu/gcj/runtime/BootClassLoader.java \
- gnu/gcj/runtime/ExtensionClassLoader.java \
- gnu/gcj/runtime/FileDeleter.java \
- gnu/gcj/runtime/FinalizerThread.java \
- gnu/gcj/runtime/HelperClassLoader.java \
- gnu/gcj/runtime/JNIWeakRef.java \
- gnu/gcj/runtime/MethodRef.java \
- gnu/gcj/runtime/NameFinder.java \
- gnu/gcj/runtime/PersistentByteMap.java \
- gnu/gcj/runtime/SharedLibHelper.java \
- gnu/gcj/runtime/SharedLibLoader.java \
- gnu/gcj/runtime/StringBuffer.java \
- gnu/gcj/runtime/StackTrace.java \
- gnu/gcj/runtime/SystemClassLoader.java \
- gnu/gcj/util/Debug.java \
- gnu/java/io/ASN1ParsingException.java \
- gnu/java/io/Base64InputStream.java \
- gnu/java/io/ClassLoaderObjectInputStream.java \
- gnu/java/io/NullOutputStream.java \
- gnu/java/io/ObjectIdentityWrapper.java \
- gnu/java/lang/ArrayHelper.java \
- gnu/java/lang/ClassHelper.java \
- gnu/java/lang/MainThread.java \
- gnu/java/lang/reflect/TypeSignature.java \
- gnu/java/locale/Calendar.java \
- gnu/java/locale/Calendar_de.java \
- gnu/java/locale/Calendar_en.java \
- gnu/java/locale/Calendar_nl.java \
- gnu/java/locale/LocaleInformation.java \
- gnu/java/locale/LocaleInformation_af_ZA.java \
- gnu/java/locale/LocaleInformation_ar_AE.java \
- gnu/java/locale/LocaleInformation_ar_BH.java \
- gnu/java/locale/LocaleInformation_ar_DZ.java \
- gnu/java/locale/LocaleInformation_ar_EG.java \
- gnu/java/locale/LocaleInformation_ar_IN.java \
- gnu/java/locale/LocaleInformation_ar_IQ.java \
- gnu/java/locale/LocaleInformation_ar_JO.java \
- gnu/java/locale/LocaleInformation_ar_KW.java \
- gnu/java/locale/LocaleInformation_ar_LB.java \
- gnu/java/locale/LocaleInformation_ar_LY.java \
- gnu/java/locale/LocaleInformation_ar_MA.java \
- gnu/java/locale/LocaleInformation_ar_OM.java \
- gnu/java/locale/LocaleInformation_ar_QA.java \
- gnu/java/locale/LocaleInformation_ar_SD.java \
- gnu/java/locale/LocaleInformation_ar_SY.java \
- gnu/java/locale/LocaleInformation_ar_TN.java \
- gnu/java/locale/LocaleInformation_ar_YE.java \
- gnu/java/locale/LocaleInformation_be_BY.java \
- gnu/java/locale/LocaleInformation_bn_IN.java \
- gnu/java/locale/LocaleInformation_br_FR.java \
- gnu/java/locale/LocaleInformation_bs_BA.java \
- gnu/java/locale/LocaleInformation_ca_ES.java \
- gnu/java/locale/LocaleInformation_cs_CZ.java \
- gnu/java/locale/LocaleInformation_cy_GB.java \
- gnu/java/locale/LocaleInformation_da_DK.java \
- gnu/java/locale/LocaleInformation_de.java \
- gnu/java/locale/LocaleInformation_de_AT.java \
- gnu/java/locale/LocaleInformation_de_BE.java \
- gnu/java/locale/LocaleInformation_de_CH.java \
- gnu/java/locale/LocaleInformation_de_DE.java \
- gnu/java/locale/LocaleInformation_de_LU.java \
- gnu/java/locale/LocaleInformation_el_GR.java \
- gnu/java/locale/LocaleInformation_en.java \
- gnu/java/locale/LocaleInformation_en_AU.java \
- gnu/java/locale/LocaleInformation_en_BW.java \
- gnu/java/locale/LocaleInformation_en_CA.java \
- gnu/java/locale/LocaleInformation_en_DK.java \
- gnu/java/locale/LocaleInformation_en_GB.java \
- gnu/java/locale/LocaleInformation_en_HK.java \
- gnu/java/locale/LocaleInformation_en_IE.java \
- gnu/java/locale/LocaleInformation_en_IN.java \
- gnu/java/locale/LocaleInformation_en_NZ.java \
- gnu/java/locale/LocaleInformation_en_PH.java \
- gnu/java/locale/LocaleInformation_en_SG.java \
- gnu/java/locale/LocaleInformation_en_US.java \
- gnu/java/locale/LocaleInformation_en_ZA.java \
- gnu/java/locale/LocaleInformation_en_ZW.java \
- gnu/java/locale/LocaleInformation_es_AR.java \
- gnu/java/locale/LocaleInformation_es_BO.java \
- gnu/java/locale/LocaleInformation_es_CL.java \
- gnu/java/locale/LocaleInformation_es_CO.java \
- gnu/java/locale/LocaleInformation_es_CR.java \
- gnu/java/locale/LocaleInformation_es_DO.java \
- gnu/java/locale/LocaleInformation_es_EC.java \
- gnu/java/locale/LocaleInformation_es_ES.java \
- gnu/java/locale/LocaleInformation_es_GT.java \
- gnu/java/locale/LocaleInformation_es_HN.java \
- gnu/java/locale/LocaleInformation_es_MX.java \
- gnu/java/locale/LocaleInformation_es_NI.java \
- gnu/java/locale/LocaleInformation_es_PA.java \
- gnu/java/locale/LocaleInformation_es_PE.java \
- gnu/java/locale/LocaleInformation_es_PR.java \
- gnu/java/locale/LocaleInformation_es_PY.java \
- gnu/java/locale/LocaleInformation_es_SV.java \
- gnu/java/locale/LocaleInformation_es_US.java \
- gnu/java/locale/LocaleInformation_es_UY.java \
- gnu/java/locale/LocaleInformation_es_VE.java \
- gnu/java/locale/LocaleInformation_et_EE.java \
- gnu/java/locale/LocaleInformation_eu_ES.java \
- gnu/java/locale/LocaleInformation_fa_IR.java \
- gnu/java/locale/LocaleInformation_fi_FI.java \
- gnu/java/locale/LocaleInformation_fo_FO.java \
- gnu/java/locale/LocaleInformation_fr_BE.java \
- gnu/java/locale/LocaleInformation_fr_CA.java \
- gnu/java/locale/LocaleInformation_fr_CH.java \
- gnu/java/locale/LocaleInformation_fr_FR.java \
- gnu/java/locale/LocaleInformation_fr_LU.java \
- gnu/java/locale/LocaleInformation_ga_IE.java \
- gnu/java/locale/LocaleInformation_gd_GB.java \
- gnu/java/locale/LocaleInformation_gl_ES.java \
- gnu/java/locale/LocaleInformation_gv_GB.java \
- gnu/java/locale/LocaleInformation_he_IL.java \
- gnu/java/locale/LocaleInformation_hi_IN.java \
- gnu/java/locale/LocaleInformation_hr_HR.java \
- gnu/java/locale/LocaleInformation_hu_HU.java \
- gnu/java/locale/LocaleInformation_id_ID.java \
- gnu/java/locale/LocaleInformation_it_CH.java \
- gnu/java/locale/LocaleInformation_it_IT.java \
- gnu/java/locale/LocaleInformation_iw_IL.java \
- gnu/java/locale/LocaleInformation_ja_JP.java \
- gnu/java/locale/LocaleInformation_ka_GE.java \
- gnu/java/locale/LocaleInformation_kl_GL.java \
- gnu/java/locale/LocaleInformation_ko_KR.java \
- gnu/java/locale/LocaleInformation_kw_GB.java \
- gnu/java/locale/LocaleInformation_lt_LT.java \
- gnu/java/locale/LocaleInformation_lv_LV.java \
- gnu/java/locale/LocaleInformation_mi_NZ.java \
- gnu/java/locale/LocaleInformation_mk_MK.java \
- gnu/java/locale/LocaleInformation_mr_IN.java \
- gnu/java/locale/LocaleInformation_mt_MT.java \
- gnu/java/locale/LocaleInformation_nl.java \
- gnu/java/locale/LocaleInformation_nl_BE.java \
- gnu/java/locale/LocaleInformation_nl_NL.java \
- gnu/java/locale/LocaleInformation_nn_NO.java \
- gnu/java/locale/LocaleInformation_no_NO.java \
- gnu/java/locale/LocaleInformation_oc_FR.java \
- gnu/java/locale/LocaleInformation_pl_PL.java \
- gnu/java/locale/LocaleInformation_pt_BR.java \
- gnu/java/locale/LocaleInformation_pt_PT.java \
- gnu/java/locale/LocaleInformation_ro_RO.java \
- gnu/java/locale/LocaleInformation_ru_RU.java \
- gnu/java/locale/LocaleInformation_ru_UA.java \
- gnu/java/locale/LocaleInformation_se_NO.java \
- gnu/java/locale/LocaleInformation_sk_SK.java \
- gnu/java/locale/LocaleInformation_sl_SI.java \
- gnu/java/locale/LocaleInformation_sq_AL.java \
- gnu/java/locale/LocaleInformation_sr_YU.java \
- gnu/java/locale/LocaleInformation_sv_FI.java \
- gnu/java/locale/LocaleInformation_sv_SE.java \
- gnu/java/locale/LocaleInformation_ta_IN.java \
- gnu/java/locale/LocaleInformation_te_IN.java \
- gnu/java/locale/LocaleInformation_tg_TJ.java \
- gnu/java/locale/LocaleInformation_tl_PH.java \
- gnu/java/locale/LocaleInformation_tr_TR.java \
- gnu/java/locale/LocaleInformation_uk_UA.java \
- gnu/java/locale/LocaleInformation_ur_PK.java \
- gnu/java/locale/LocaleInformation_uz_UZ.java \
- gnu/java/locale/LocaleInformation_vi_VN.java \
- gnu/java/locale/LocaleInformation_yi_US.java \
- gnu/java/locale/LocaleInformation_zh_CN.java \
- gnu/java/locale/LocaleInformation_zh_HK.java \
- gnu/java/locale/LocaleInformation_zh_SG.java \
- gnu/java/locale/LocaleInformation_zh_TW.java \
- gnu/java/math/MPN.java \
- gnu/java/net/BASE64.java \
- gnu/java/net/CRLFInputStream.java \
- gnu/java/net/CRLFOutputStream.java \
- gnu/java/net/DefaultContentHandlerFactory.java \
- gnu/java/net/EmptyX509TrustManager.java \
- gnu/java/net/GetLocalHostAction.java \
- gnu/java/net/HeaderFieldHelper.java \
- gnu/java/net/LineInputStream.java \
- gnu/java/net/PlainDatagramSocketImpl.java \
- gnu/java/net/PlainSocketImpl.java \
- gnu/java/net/URLParseError.java \
- gnu/java/net/protocol/core/Connection.java \
- gnu/java/net/protocol/core/CoreInputStream.java \
- gnu/java/net/protocol/core/Handler.java \
- gnu/java/net/protocol/file/Connection.java \
- gnu/java/net/protocol/file/Handler.java \
- gnu/java/net/protocol/ftp/ActiveModeDTP.java \
- gnu/java/net/protocol/ftp/BlockInputStream.java \
- gnu/java/net/protocol/ftp/BlockOutputStream.java \
- gnu/java/net/protocol/ftp/CompressedInputStream.java \
- gnu/java/net/protocol/ftp/CompressedOutputStream.java \
- gnu/java/net/protocol/ftp/DTP.java \
- gnu/java/net/protocol/ftp/DTPInputStream.java \
- gnu/java/net/protocol/ftp/DTPOutputStream.java \
- gnu/java/net/protocol/ftp/FTPConnection.java \
- gnu/java/net/protocol/ftp/FTPException.java \
- gnu/java/net/protocol/ftp/FTPResponse.java \
- gnu/java/net/protocol/ftp/FTPURLConnection.java \
- gnu/java/net/protocol/ftp/Handler.java \
- gnu/java/net/protocol/ftp/PassiveModeDTP.java \
- gnu/java/net/protocol/ftp/StreamInputStream.java \
- gnu/java/net/protocol/ftp/StreamOutputStream.java \
- gnu/java/net/protocol/gcjlib/Connection.java \
- gnu/java/net/protocol/gcjlib/Handler.java \
- gnu/java/net/protocol/http/Authenticator.java \
- gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java \
- gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java \
- gnu/java/net/protocol/http/ChunkedInputStream.java \
- gnu/java/net/protocol/http/Cookie.java \
- gnu/java/net/protocol/http/CookieManager.java \
- gnu/java/net/protocol/http/Credentials.java \
- gnu/java/net/protocol/http/HTTPConnection.java \
- gnu/java/net/protocol/http/HTTPDateFormat.java \
- gnu/java/net/protocol/http/HTTPURLConnection.java \
- gnu/java/net/protocol/http/Handler.java \
- gnu/java/net/protocol/http/Headers.java \
- gnu/java/net/protocol/http/Request.java \
- gnu/java/net/protocol/http/RequestBodyWriter.java \
- gnu/java/net/protocol/http/Response.java \
- gnu/java/net/protocol/http/ResponseBodyReader.java \
- gnu/java/net/protocol/http/ResponseHeaderHandler.java \
- gnu/java/net/protocol/http/SimpleCookieManager.java \
- gnu/java/net/protocol/http/event/ConnectionEvent.java \
- gnu/java/net/protocol/http/event/ConnectionListener.java \
- gnu/java/net/protocol/http/event/RequestEvent.java \
- gnu/java/net/protocol/http/event/RequestListener.java \
- gnu/java/net/protocol/https/Handler.java \
- gnu/java/net/protocol/jar/Connection.java \
- gnu/java/net/protocol/jar/Handler.java \
- gnu/java/nio/ChannelInputStream.java \
- gnu/java/nio/ChannelOutputStream.java \
- gnu/java/nio/ChannelReader.java \
- gnu/java/nio/DatagramChannelImpl.java \
- gnu/java/nio/DatagramChannelSelectionKey.java \
- gnu/java/nio/FileLockImpl.java \
- gnu/java/nio/InputStreamChannel.java \
- gnu/java/nio/NIOConstants.java \
- gnu/java/nio/NIODatagramSocket.java \
- gnu/java/nio/NIOServerSocket.java \
- gnu/java/nio/NIOSocket.java \
- gnu/java/nio/OutputStreamChannel.java \
- gnu/java/nio/PipeImpl.java \
- gnu/java/nio/SelectionKeyImpl.java \
- gnu/java/nio/SelectorImpl.java \
- gnu/java/nio/SelectorProviderImpl.java \
- gnu/java/nio/ServerSocketChannelImpl.java \
- gnu/java/nio/ServerSocketChannelSelectionKey.java \
- gnu/java/nio/SocketChannelImpl.java \
- gnu/java/nio/SocketChannelSelectionKey.java \
- gnu/java/nio/VMPipe.java \
- gnu/java/nio/VMSelector.java \
- gnu/java/nio/channels/FileChannelImpl.java \
- gnu/java/nio/charset/ISO_8859_1.java \
- gnu/java/nio/charset/Provider.java \
- gnu/java/nio/charset/US_ASCII.java \
- gnu/java/nio/charset/UTF_16.java \
- gnu/java/nio/charset/UTF_16BE.java \
- gnu/java/nio/charset/UTF_16Decoder.java \
- gnu/java/nio/charset/UTF_16Encoder.java \
- gnu/java/nio/charset/UTF_16LE.java \
- gnu/java/nio/charset/UTF_8.java \
- gnu/java/security/Engine.java \
- gnu/java/security/OID.java \
- gnu/java/security/PolicyFile.java \
- gnu/java/security/action/GetPropertyAction.java \
- gnu/java/security/action/GetSecurityPropertyAction.java \
- gnu/java/security/action/SetAccessibleAction.java \
- gnu/java/security/ber/BER.java \
- gnu/java/security/ber/BEREncodingException.java \
- gnu/java/security/ber/BERReader.java \
- gnu/java/security/ber/BERValue.java \
- gnu/java/security/der/BitString.java \
- gnu/java/security/der/DER.java \
- gnu/java/security/der/DEREncodingException.java \
- gnu/java/security/der/DERReader.java \
- gnu/java/security/der/DERValue.java \
- gnu/java/security/der/DERWriter.java \
- gnu/java/security/pkcs/PKCS7SignedData.java \
- gnu/java/security/pkcs/SignerInfo.java \
- gnu/java/security/provider/CollectionCertStoreImpl.java \
- gnu/java/security/provider/DSAKeyFactory.java \
- gnu/java/security/provider/DSAKeyPairGenerator.java \
- gnu/java/security/provider/DSAParameterGenerator.java \
- gnu/java/security/provider/DSAParameters.java \
- gnu/java/security/provider/DSASignature.java \
- gnu/java/security/provider/DefaultPolicy.java \
- gnu/java/security/provider/EncodedKeyFactory.java \
- gnu/java/security/provider/Gnu.java \
- gnu/java/security/provider/GnuDHPublicKey.java \
- gnu/java/security/provider/GnuDSAPrivateKey.java \
- gnu/java/security/provider/GnuDSAPublicKey.java \
- gnu/java/security/provider/GnuRSAPrivateKey.java \
- gnu/java/security/provider/GnuRSAPublicKey.java \
- gnu/java/security/provider/MD2withRSA.java \
- gnu/java/security/provider/MD4withRSA.java \
- gnu/java/security/provider/MD5.java \
- gnu/java/security/provider/MD5withRSA.java \
- gnu/java/security/provider/PKIXCertPathValidatorImpl.java \
- gnu/java/security/provider/RSA.java \
- gnu/java/security/provider/RSAKeyFactory.java \
- gnu/java/security/provider/SHA.java \
- gnu/java/security/provider/SHA1PRNG.java \
- gnu/java/security/provider/SHA1withRSA.java \
- gnu/java/security/provider/X509CertificateFactory.java \
- gnu/java/security/util/Prime.java \
- gnu/java/security/x509/GnuPKIExtension.java \
- gnu/java/security/x509/PolicyNodeImpl.java \
- gnu/java/security/x509/Util.java \
- gnu/java/security/x509/X500DistinguishedName.java \
- gnu/java/security/x509/X509CRL.java \
- gnu/java/security/x509/X509CRLEntry.java \
- gnu/java/security/x509/X509CRLSelectorImpl.java \
- gnu/java/security/x509/X509Certificate.java \
- gnu/java/security/x509/X509CertPath.java \
- gnu/java/security/x509/X509CertSelectorImpl.java \
- gnu/java/security/x509/ext/AuthorityKeyIdentifier.java \
- gnu/java/security/x509/ext/BasicConstraints.java \
- gnu/java/security/x509/ext/CRLNumber.java \
- gnu/java/security/x509/ext/CertificatePolicies.java \
- gnu/java/security/x509/ext/ExtendedKeyUsage.java \
- gnu/java/security/x509/ext/Extension.java \
- gnu/java/security/x509/ext/GeneralNames.java \
- gnu/java/security/x509/ext/IssuerAlternativeNames.java \
- gnu/java/security/x509/ext/KeyUsage.java \
- gnu/java/security/x509/ext/PolicyConstraint.java \
- gnu/java/security/x509/ext/PolicyMappings.java \
- gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java \
- gnu/java/security/x509/ext/ReasonCode.java \
- gnu/java/security/x509/ext/SubjectAlternativeNames.java \
- gnu/java/security/x509/ext/SubjectKeyIdentifier.java \
- gnu/java/text/AttributedFormatBuffer.java \
- gnu/java/text/BaseBreakIterator.java \
- gnu/java/text/CharacterBreakIterator.java \
- gnu/java/text/FormatBuffer.java \
- gnu/java/text/FormatCharacterIterator.java \
- gnu/java/text/LineBreakIterator.java \
- gnu/java/text/SentenceBreakIterator.java \
- gnu/java/text/StringFormatBuffer.java \
- gnu/java/text/WordBreakIterator.java \
- gnu/java/util/DoubleEnumeration.java \
- gnu/java/util/EmptyEnumeration.java \
- gnu/java/util/prefs/FileBasedFactory.java \
- gnu/java/util/prefs/MemoryBasedFactory.java \
- gnu/java/util/prefs/MemoryBasedPreferences.java \
- gnu/java/util/prefs/NodeReader.java \
- gnu/java/util/prefs/NodeWriter.java \
- gnu/regexp/CharIndexed.java \
- gnu/regexp/CharIndexedCharArray.java \
- gnu/regexp/CharIndexedInputStream.java \
- gnu/regexp/CharIndexedString.java \
- gnu/regexp/CharIndexedStringBuffer.java \
- gnu/regexp/RE.java \
- gnu/regexp/REException.java \
- gnu/regexp/REFilterInputStream.java \
- gnu/regexp/REMatch.java \
- gnu/regexp/REMatchEnumeration.java \
- gnu/regexp/RESyntax.java \
- gnu/regexp/REToken.java \
- gnu/regexp/RETokenAny.java \
- gnu/regexp/RETokenBackRef.java \
- gnu/regexp/RETokenChar.java \
- gnu/regexp/RETokenEnd.java \
- gnu/regexp/RETokenEndSub.java \
- gnu/regexp/RETokenLookAhead.java \
- gnu/regexp/RETokenOneOf.java \
- gnu/regexp/RETokenPOSIX.java \
- gnu/regexp/RETokenRange.java \
- gnu/regexp/RETokenRepeated.java \
- gnu/regexp/RETokenStart.java \
- gnu/regexp/RETokenWordBoundary.java \
- gnu/regexp/UncheckedRE.java \
- java/lang/ref/PhantomReference.java \
- java/lang/ref/Reference.java \
- java/lang/ref/ReferenceQueue.java \
- java/lang/ref/SoftReference.java \
- java/lang/ref/WeakReference.java \
- java/lang/reflect/AccessibleObject.java	\
- java/lang/reflect/Array.java \
- java/lang/reflect/Constructor.java \
- java/lang/reflect/Field.java \
- java/lang/reflect/InvocationHandler.java \
- java/lang/reflect/InvocationTargetException.java \
- java/lang/reflect/Member.java \
- java/lang/reflect/Method.java \
- java/lang/reflect/Modifier.java	\
- java/lang/reflect/Proxy.java \
- java/lang/reflect/ReflectPermission.java \
- java/lang/reflect/UndeclaredThrowableException.java \
- java/math/BigDecimal.java \
- java/math/BigInteger.java \
- java/net/Authenticator.java \
- java/net/BindException.java \
- java/net/ConnectException.java \
- java/net/ContentHandler.java \
- java/net/ContentHandlerFactory.java \
- java/net/DatagramPacket.java \
- java/net/DatagramSocket.java \
- java/net/DatagramSocketImpl.java \
- java/net/DatagramSocketImplFactory.java \
- java/net/FileNameMap.java \
- java/net/HttpURLConnection.java	\
- java/net/Inet4Address.java \
- java/net/Inet6Address.java \
- java/net/InetAddress.java \
- java/net/InetSocketAddress.java \
- java/net/JarURLConnection.java \
- java/net/MalformedURLException.java \
- java/net/MulticastSocket.java \
- java/net/NetPermission.java \
- java/net/NetworkInterface.java \
- java/net/NoRouteToHostException.java \
- java/net/PasswordAuthentication.java \
- java/net/PortUnreachableException.java \
- java/net/ProtocolException.java	\
- java/net/ServerSocket.java \
- java/net/Socket.java \
- java/net/SocketAddress.java \
- java/net/SocketException.java \
- java/net/SocketImpl.java \
- java/net/SocketImplFactory.java	\
- java/net/SocketOptions.java \
- java/net/SocketPermission.java \
- java/net/SocketTimeoutException.java \
- java/net/URI.java \
- java/net/URISyntaxException.java \
- java/net/URL.java \
- java/net/URLClassLoader.java \
- java/net/URLConnection.java \
- java/net/URLDecoder.java \
- java/net/URLEncoder.java \
- java/net/URLStreamHandler.java \
- java/net/URLStreamHandlerFactory.java \
- java/net/UnknownHostException.java \
- java/net/UnknownServiceException.java \
- java/nio/Buffer.java \
- java/nio/BufferOverflowException.java \
- java/nio/BufferUnderflowException.java \
- java/nio/ByteBuffer.java \
- java/nio/ByteBufferHelper.java \
- java/nio/ByteBufferImpl.java \
- java/nio/ByteOrder.java \
- java/nio/CharBuffer.java \
- java/nio/CharBufferImpl.java \
- java/nio/CharViewBufferImpl.java \
- java/nio/DirectByteBufferImpl.java \
- java/nio/DoubleBuffer.java \
- java/nio/DoubleBufferImpl.java \
- java/nio/DoubleViewBufferImpl.java \
- java/nio/FloatBuffer.java \
- java/nio/FloatBufferImpl.java \
- java/nio/FloatViewBufferImpl.java \
- java/nio/IntBuffer.java \
- java/nio/IntBufferImpl.java \
- java/nio/IntViewBufferImpl.java \
- java/nio/InvalidMarkException.java \
- java/nio/LongBuffer.java \
- java/nio/LongBufferImpl.java \
- java/nio/LongViewBufferImpl.java \
- java/nio/MappedByteBuffer.java \
- java/nio/MappedByteBufferImpl.java \
- java/nio/ReadOnlyBufferException.java \
- java/nio/ShortBuffer.java \
- java/nio/ShortBufferImpl.java \
- java/nio/ShortViewBufferImpl.java \
- java/nio/VMDirectByteBuffer.java \
- java/nio/channels/AlreadyConnectedException.java \
- java/nio/channels/AsynchronousCloseException.java \
- java/nio/channels/ByteChannel.java \
- java/nio/channels/CancelledKeyException.java \
- java/nio/channels/Channel.java \
- java/nio/channels/Channels.java \
- java/nio/channels/ClosedByInterruptException.java \
- java/nio/channels/ClosedChannelException.java \
- java/nio/channels/ClosedSelectorException.java \
- java/nio/channels/ConnectionPendingException.java \
- java/nio/channels/DatagramChannel.java \
- java/nio/channels/FileChannel.java \
- java/nio/channels/FileLock.java \
- java/nio/channels/FileLockInterruptionException.java \
- java/nio/channels/GatheringByteChannel.java \
- java/nio/channels/IllegalBlockingModeException.java \
- java/nio/channels/IllegalSelectorException.java \
- java/nio/channels/InterruptibleChannel.java \
- java/nio/channels/NoConnectionPendingException.java \
- java/nio/channels/NonReadableChannelException.java \
- java/nio/channels/NonWritableChannelException.java \
- java/nio/channels/NotYetBoundException.java \
- java/nio/channels/NotYetConnectedException.java \
- java/nio/channels/OverlappingFileLockException.java \
- java/nio/channels/Pipe.java \
- java/nio/channels/ReadableByteChannel.java \
- java/nio/channels/ScatteringByteChannel.java \
- java/nio/channels/SelectableChannel.java \
- java/nio/channels/SelectionKey.java \
- java/nio/channels/Selector.java \
- java/nio/channels/ServerSocketChannel.java \
- java/nio/channels/SocketChannel.java \
- java/nio/channels/UnresolvedAddressException.java \
- java/nio/channels/UnsupportedAddressTypeException.java \
- java/nio/channels/WritableByteChannel.java \
- java/nio/channels/spi/AbstractInterruptibleChannel.java \
- java/nio/channels/spi/AbstractSelectableChannel.java \
- java/nio/channels/spi/AbstractSelectionKey.java \
- java/nio/channels/spi/AbstractSelector.java \
- java/nio/channels/spi/SelectorProvider.java \
- java/nio/charset/CharacterCodingException.java \
- java/nio/charset/Charset.java \
- java/nio/charset/CharsetDecoder.java \
- java/nio/charset/CharsetEncoder.java \
- java/nio/charset/CoderMalfunctionError.java \
- java/nio/charset/CoderResult.java \
- java/nio/charset/CodingErrorAction.java \
- java/nio/charset/IllegalCharsetNameException.java \
- java/nio/charset/MalformedInputException.java \
- java/nio/charset/UnmappableCharacterException.java \
- java/nio/charset/UnsupportedCharsetException.java \
- java/nio/charset/spi/CharsetProvider.java \
- java/security/AccessControlContext.java \
- java/security/AccessControlException.java \
- java/security/AccessController.java \
- java/security/AlgorithmParameterGenerator.java \
- java/security/AlgorithmParameterGeneratorSpi.java \
- java/security/AlgorithmParameters.java \
- java/security/AlgorithmParametersSpi.java \
- java/security/AllPermission.java \
- java/security/BasicPermission.java \
- java/security/Certificate.java \
- java/security/CodeSource.java \
- java/security/DigestException.java \
- java/security/DigestInputStream.java \
- java/security/DigestOutputStream.java \
- java/security/DomainCombiner.java \
- java/security/DummyKeyPairGenerator.java \
- java/security/DummyMessageDigest.java \
- java/security/DummySignature.java \
- java/security/GeneralSecurityException.java \
- java/security/Guard.java \
- java/security/GuardedObject.java \
- java/security/Identity.java \
- java/security/IdentityScope.java \
- java/security/InvalidAlgorithmParameterException.java \
- java/security/InvalidKeyException.java \
- java/security/InvalidParameterException.java \
- java/security/Key.java \
- java/security/KeyException.java \
- java/security/KeyFactory.java \
- java/security/KeyFactorySpi.java \
- java/security/KeyManagementException.java \
- java/security/KeyPair.java \
- java/security/KeyPairGenerator.java \
- java/security/KeyPairGeneratorSpi.java \
- java/security/KeyStore.java \
- java/security/KeyStoreException.java \
- java/security/KeyStoreSpi.java \
- java/security/MessageDigest.java \
- java/security/MessageDigestSpi.java \
- java/security/NoSuchAlgorithmException.java \
- java/security/NoSuchProviderException.java \
- java/security/Permission.java \
- java/security/PermissionCollection.java \
- java/security/Permissions.java \
- java/security/Policy.java \
- java/security/Principal.java \
- java/security/PrivateKey.java \
- java/security/PrivilegedAction.java \
- java/security/PrivilegedActionException.java \
- java/security/PrivilegedExceptionAction.java \
- java/security/ProtectionDomain.java \
- java/security/Provider.java \
- java/security/ProviderException.java \
- java/security/PublicKey.java \
- java/security/SecureClassLoader.java \
- java/security/SecureRandom.java \
- java/security/SecureRandomSpi.java \
- java/security/Security.java \
- java/security/SecurityPermission.java \
- java/security/Signature.java \
- java/security/SignatureException.java \
- java/security/SignatureSpi.java \
- java/security/SignedObject.java \
- java/security/Signer.java \
- java/security/UnrecoverableKeyException.java \
- java/security/UnresolvedPermission.java \
- java/security/acl/Acl.java \
- java/security/acl/AclEntry.java \
- java/security/acl/AclNotFoundException.java \
- java/security/acl/Group.java \
- java/security/acl/LastOwnerException.java \
- java/security/acl/NotOwnerException.java \
- java/security/acl/Owner.java \
- java/security/acl/Permission.java \
- java/security/cert/CRL.java \
- java/security/cert/CRLException.java \
- java/security/cert/CRLSelector.java \
- java/security/cert/CertPath.java \
- java/security/cert/CertPathBuilder.java \
- java/security/cert/CertPathBuilderException.java \
- java/security/cert/CertPathBuilderResult.java \
- java/security/cert/CertPathBuilderSpi.java \
- java/security/cert/CertPathParameters.java \
- java/security/cert/CertPathValidator.java \
- java/security/cert/CertPathValidatorException.java \
- java/security/cert/CertPathValidatorResult.java \
- java/security/cert/CertPathValidatorSpi.java \
- java/security/cert/CertSelector.java \
- java/security/cert/CertStore.java \
- java/security/cert/CertStoreException.java \
- java/security/cert/CertStoreParameters.java \
- java/security/cert/CertStoreSpi.java \
- java/security/cert/Certificate.java \
- java/security/cert/CertificateEncodingException.java \
- java/security/cert/CertificateException.java \
- java/security/cert/CertificateExpiredException.java \
- java/security/cert/CertificateFactory.java \
- java/security/cert/CertificateFactorySpi.java \
- java/security/cert/CertificateNotYetValidException.java \
- java/security/cert/CertificateParsingException.java \
- java/security/cert/CollectionCertStoreParameters.java \
- java/security/cert/LDAPCertStoreParameters.java \
- java/security/cert/PKIXBuilderParameters.java \
- java/security/cert/PKIXCertPathBuilderResult.java \
- java/security/cert/PKIXCertPathChecker.java \
- java/security/cert/PKIXCertPathValidatorResult.java \
- java/security/cert/PKIXParameters.java \
- java/security/cert/PolicyNode.java \
- java/security/cert/PolicyQualifierInfo.java \
- java/security/cert/TrustAnchor.java \
- java/security/cert/X509CRL.java \
- java/security/cert/X509CRLEntry.java \
- java/security/cert/X509CRLSelector.java \
- java/security/cert/X509CertSelector.java \
- java/security/cert/X509Certificate.java \
- java/security/cert/X509Extension.java \
- java/security/interfaces/DSAKey.java \
- java/security/interfaces/DSAKeyPairGenerator.java \
- java/security/interfaces/DSAParams.java \
- java/security/interfaces/DSAPrivateKey.java \
- java/security/interfaces/DSAPublicKey.java \
- java/security/interfaces/RSAKey.java \
- java/security/interfaces/RSAMultiPrimePrivateCrtKey.java \
- java/security/interfaces/RSAPrivateCrtKey.java \
- java/security/interfaces/RSAPrivateKey.java \
- java/security/interfaces/RSAPublicKey.java \
- java/security/spec/AlgorithmParameterSpec.java \
- java/security/spec/DSAParameterSpec.java \
- java/security/spec/DSAPrivateKeySpec.java \
- java/security/spec/DSAPublicKeySpec.java \
- java/security/spec/EncodedKeySpec.java \
- java/security/spec/InvalidKeySpecException.java \
- java/security/spec/InvalidParameterSpecException.java \
- java/security/spec/KeySpec.java \
- java/security/spec/PKCS8EncodedKeySpec.java \
- java/security/spec/PSSParameterSpec.java \
- java/security/spec/RSAKeyGenParameterSpec.java \
- java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java\
- java/security/spec/RSAOtherPrimeInfo.java \
- java/security/spec/RSAPrivateCrtKeySpec.java \
- java/security/spec/RSAPrivateKeySpec.java \
- java/security/spec/RSAPublicKeySpec.java \
- java/security/spec/X509EncodedKeySpec.java \
- java/sql/Array.java \
- java/sql/BatchUpdateException.java \
- java/sql/Blob.java \
- java/sql/CallableStatement.java	\
- java/sql/Clob.java \
- java/sql/Connection.java \
- java/sql/DataTruncation.java \
- java/sql/DatabaseMetaData.java \
- java/sql/Date.java \
- java/sql/Driver.java \
- java/sql/DriverManager.java \
- java/sql/DriverPropertyInfo.java \
- java/sql/ParameterMetaData.java \
- java/sql/PreparedStatement.java	\
- java/sql/Ref.java \
- java/sql/ResultSet.java	\
- java/sql/ResultSetMetaData.java	\
- java/sql/SQLData.java \
- java/sql/SQLException.java \
- java/sql/SQLInput.java \
- java/sql/SQLOutput.java \
- java/sql/SQLPermission.java \
- java/sql/SQLWarning.java \
- java/sql/Savepoint.java \
- java/sql/Statement.java	\
- java/sql/Struct.java	\
- java/sql/Time.java \
- java/sql/Timestamp.java	\
- java/sql/Types.java \
- java/text/Annotation.java \
- java/text/AttributedCharacterIterator.java \
- java/text/AttributedString.java	\
- java/text/AttributedStringIterator.java	\
- java/text/BreakIterator.java \
- java/text/CharacterIterator.java \
- java/text/ChoiceFormat.java \
- java/text/CollationElementIterator.java	\
- java/text/CollationKey.java \
- java/text/Collator.java	\
- java/text/DateFormat.java \
- java/text/DateFormatSymbols.java \
- java/text/DecimalFormat.java \
- java/text/DecimalFormatSymbols.java \
- java/text/FieldPosition.java \
- java/text/Format.java \
- java/text/MessageFormat.java \
- java/text/NumberFormat.java \
- java/text/ParseException.java \
- java/text/ParsePosition.java \
- java/text/RuleBasedCollator.java \
- java/text/SimpleDateFormat.java	\
- java/text/StringCharacterIterator.java \
- java/util/jar/Attributes.java \
- java/util/jar/JarEntry.java \
- java/util/jar/JarException.java \
- java/util/jar/JarFile.java \
- java/util/jar/JarInputStream.java \
- java/util/jar/JarOutputStream.java \
- java/util/jar/Manifest.java \
- java/util/zip/Adler32.java \
- java/util/zip/CRC32.java \
- java/util/zip/CheckedInputStream.java \
- java/util/zip/CheckedOutputStream.java \
- java/util/zip/Checksum.java \
- java/util/zip/DataFormatException.java \
- java/util/zip/Deflater.java \
- java/util/zip/DeflaterOutputStream.java	\
- java/util/zip/GZIPInputStream.java \
- java/util/zip/GZIPOutputStream.java \
- java/util/zip/Inflater.java \
- java/util/zip/InflaterInputStream.java \
- java/util/zip/ZipConstants.java	\
- java/util/zip/ZipEntry.java \
- java/util/zip/ZipException.java	\
- java/util/zip/ZipFile.java \
- java/util/zip/ZipInputStream.java \
- java/util/zip/ZipOutputStream.java \
- $(rmi_java_source_files) \
- $(awt_java_source_files) \
- $(convert_source_files) \
- $(javax_source_files) \
- $(org_source_files)
- 
- 
- java_source_files = $(special_java_source_files) $(ordinary_java_source_files)
- 
- ## Math library: C, not C++
- math_c_source_files = \
-   java/lang/dtoa.c        java/lang/k_rem_pio2.c  java/lang/s_tan.c       \
-   java/lang/e_acos.c      java/lang/k_sin.c       java/lang/strtod.c      \
-   java/lang/e_asin.c      java/lang/k_tan.c       java/lang/w_acos.c      \
-   java/lang/e_atan2.c     java/lang/mprec.c       java/lang/w_asin.c      \
-   java/lang/e_exp.c       java/lang/s_atan.c      java/lang/w_atan2.c     \
-   java/lang/e_fmod.c      java/lang/s_ceil.c      java/lang/w_exp.c       \
-   java/lang/e_log.c       java/lang/s_copysign.c  java/lang/w_fmod.c      \
-   java/lang/e_pow.c       java/lang/s_cos.c       java/lang/w_log.c       \
-   java/lang/e_rem_pio2.c  java/lang/s_fabs.c      java/lang/w_pow.c       \
-   java/lang/e_remainder.c java/lang/s_floor.c     java/lang/w_remainder.c \
-   java/lang/e_scalb.c     java/lang/s_rint.c      java/lang/w_sqrt.c      \
-   java/lang/e_sqrt.c      java/lang/s_scalbn.c    java/lang/sf_rint.c     \
-   java/lang/k_cos.c       java/lang/s_sin.c       java/lang/sf_fabs.c
- 
- 
  ## This lists all the C++ source files in subdirectories.
  nat_source_files = \
  gnu/gcj/natCore.cc \
  gnu/gcj/convert/JIS0208_to_Unicode.cc \
  gnu/gcj/convert/JIS0212_to_Unicode.cc \
--- 772,780 ----
  
  ## ################################################################
  
  ## This lists all the C++ source files in subdirectories.
  nat_source_files = \
+ gnu/classpath/natSystemProperties.cc \
  gnu/gcj/natCore.cc \
  gnu/gcj/convert/JIS0208_to_Unicode.cc \
  gnu/gcj/convert/JIS0212_to_Unicode.cc \
*************** gnu/gcj/convert/natOutput_SJIS.cc \
*** 3827,3835 ****
  gnu/gcj/io/natSimpleSHSStream.cc \
  gnu/gcj/io/shs.cc \
  gnu/gcj/runtime/natFinalizerThread.cc \
- gnu/gcj/runtime/natNameFinder.cc \
  gnu/gcj/runtime/natSharedLibLoader.cc \
- gnu/gcj/runtime/natStackTrace.cc \
  gnu/gcj/runtime/natStringBuffer.cc \
  gnu/gcj/util/natDebug.cc \
  gnu/java/lang/natMainThread.cc \
--- 787,793 ----
*************** java/lang/natObject.cc \
*** 3854,3870 ****
  java/lang/natRuntime.cc	\
  java/lang/natString.cc \
  java/lang/natStringBuffer.cc \
  java/lang/natSystem.cc \
  java/lang/natThread.cc \
  java/lang/natVMClassLoader.cc \
  java/lang/natVMSecurityManager.cc \
  java/lang/ref/natReference.cc \
  java/lang/reflect/natArray.cc \
  java/lang/reflect/natConstructor.cc \
  java/lang/reflect/natField.cc \
  java/lang/reflect/natMethod.cc \
! java/lang/reflect/natProxy.cc \
! java/net/natNetworkInterface.cc \
  java/net/natInetAddress.cc \
  java/nio/channels/natChannels.cc \
  java/nio/natDirectByteBufferImpl.cc \
--- 812,829 ----
  java/lang/natRuntime.cc	\
  java/lang/natString.cc \
  java/lang/natStringBuffer.cc \
+ java/lang/natStringBuilder.cc \
  java/lang/natSystem.cc \
  java/lang/natThread.cc \
  java/lang/natVMClassLoader.cc \
  java/lang/natVMSecurityManager.cc \
+ java/lang/natVMThrowable.cc \
  java/lang/ref/natReference.cc \
  java/lang/reflect/natArray.cc \
  java/lang/reflect/natConstructor.cc \
  java/lang/reflect/natField.cc \
  java/lang/reflect/natMethod.cc \
! java/net/natVMNetworkInterface.cc \
  java/net/natInetAddress.cc \
  java/nio/channels/natChannels.cc \
  java/nio/natDirectByteBufferImpl.cc \
*************** java/util/logging/natLogger.cc \
*** 3875,3916 ****
  java/util/zip/natDeflater.cc \
  java/util/zip/natInflater.cc
  
- xlib_java_source_files = \
- gnu/gcj/xlib/Clip.java \
- gnu/gcj/xlib/Colormap.java \
- gnu/gcj/xlib/Display.java \
- gnu/gcj/xlib/Drawable.java \
- gnu/gcj/xlib/Font.java \
- gnu/gcj/xlib/GC.java \
- gnu/gcj/xlib/Pixmap.java \
- gnu/gcj/xlib/Screen.java \
- gnu/gcj/xlib/Visual.java \
- gnu/gcj/xlib/WMSizeHints.java \
- gnu/gcj/xlib/Window.java \
- gnu/gcj/xlib/WindowAttributes.java \
- gnu/gcj/xlib/XAnyEvent.java \
- gnu/gcj/xlib/XButtonEvent.java \
- gnu/gcj/xlib/XColor.java \
- gnu/gcj/xlib/XConfigureEvent.java \
- gnu/gcj/xlib/XConnectException.java \
- gnu/gcj/xlib/XEvent.java \
- gnu/gcj/xlib/XException.java \
- gnu/gcj/xlib/XExposeEvent.java \
- gnu/gcj/xlib/XID.java \
- gnu/gcj/xlib/XImage.java \
- gnu/gcj/xlib/XUnmapEvent.java \
- gnu/awt/xlib/XCanvasPeer.java \
- gnu/awt/xlib/XEventLoop.java \
- gnu/awt/xlib/XEventQueue.java \
- gnu/awt/xlib/XFontMetrics.java \
- gnu/awt/xlib/XFramePeer.java \
- gnu/awt/xlib/XGraphics.java \
- gnu/awt/xlib/XGraphicsConfiguration.java \
- gnu/awt/xlib/XOffScreenImage.java \
- gnu/awt/xlib/XPanelPeer.java \
- gnu/awt/xlib/XFontPeer.java \
- gnu/awt/xlib/XToolkit.java
- 
  xlib_nat_source_files = \
  gnu/gcj/xlib/natClip.cc \
  gnu/gcj/xlib/natColormap.cc \
--- 834,839 ----
*************** gnu/gcj/xlib/natXUnmapEvent.cc
*** 3936,3979 ****
  ## ################################################################
  
  ##
- ## javadoc to texinfo conversion
- ##
- 
- TexinfoDoclet.class: $(srcdir)/scripts/TexinfoDoclet.java
- 	javac -d . $(srcdir)/scripts/TexinfoDoclet.java
- 
- texinfo: TexinfoDoclet.class
- 	langsource=`ls $(srcdir)/java/lang/*.java`; \
- 	lang=`echo $$langsource | sed -e 's/[^ ].*EcosProcess.java//g' | sed -e 's/[^ ].*PosixProcess.java//g'`; \
- 	javadoc -outfile $(srcdir)/doc/java-lang.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $$lang
- 	javadoc -outfile $(srcdir)/doc/java-lang-ref.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/lang/ref/*.java
- 	javadoc -outfile $(srcdir)/doc/java-lang-reflect.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/lang/reflect/*.java
- 	javadoc -outfile $(srcdir)/doc/java-applet.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/applet/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-color.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/color/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-datatransfer.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/datatransfer/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-event.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/event/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-geom.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/geom/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-image.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/image/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-peer.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/peer/*.java
- 	javadoc -outfile $(srcdir)/doc/java-beans.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/beans/*.java
- 	javadoc -outfile $(srcdir)/doc/java-beans-beancontext.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/beans/beancontext/*.java
- 	javadoc -outfile $(srcdir)/doc/java-io.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/io/*.java
- 	javadoc -outfile $(srcdir)/doc/java-math.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/math/*.java
- 	javadoc -outfile $(srcdir)/doc/java-net.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/net/*.java
- 	javadoc -outfile $(srcdir)/doc/java-security.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/security/*.java
- 	javadoc -outfile $(srcdir)/doc/java-security-cert.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/security-cert/*.java
- 	javadoc -outfile $(srcdir)/doc/java-security-spec.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/security/spec/*.java
- 	javadoc -outfile $(srcdir)/doc/java-security-interfaces.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/security/spec/interfaces/*.java
- 	javadoc -outfile $(srcdir)/doc/java-sql.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/sql/*.java
- 	javadoc -outfile $(srcdir)/doc/java-text.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/text/*.java
- 	javadoc -outfile $(srcdir)/doc/java-util.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/util/*.java
- 	javadoc -outfile $(srcdir)/doc/java-util-jar.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/util/jar/*.java
- 	javadoc -outfile $(srcdir)/doc/java-util-zip.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/util/zip/*.java
- 
- ## ################################################################
- 
- ##
  ## Creating and installing sources.zip
  ##
  
--- 859,864 ----
*************** texinfo: TexinfoDoclet.class
*** 3982,4017 ****
  src.zip:
  	-rm -f src.zip
  	here=`pwd`; \
! 	( ( cd $(srcdir); \
  	  find java gnu javax org -name '*.java' -print | \
  	  while read file; do \
  ## Ugly code to avoid "echo -C".  Must separate each entry by a newline
  ## Gross but easy.
  	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo $(srcdir); \
  	    echo $$file; \
  	  done ); \
  ## Now the build tree.
! 	  find gnu java -name '*.java' -print) | \
  ## Many of the above circumlocutions are because ZIP will most likely
  ## be a relative path to fastjar.
  	$(ZIP) -cfM@ $$here/src.zip
! ## Now include the files from external/.
! 	for dir in sax w3c_dom; do \
! 	  (cd $(srcdir)/external/$$dir; \
! 	  find org -type f -name '*.java' -print | while read file; do \
  	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo $(srcdir)/external/$$dir; \
  	    echo $$file; \
!           done) | \
! 	  $(ZIP) -ufM0E@ src.zip; \
! 	done
  
  ## We use a variable for this in case the user wants to override it.
  sourcesdir = $(jardir)
  
  install-src.zip: src.zip
! 	$(INSTALL_DATA) src.zip $(DESTDIR)$(sourcesdir)/src-@gcc_version@.zip
  
  
  ## ################################################################
--- 867,912 ----
  src.zip:
  	-rm -f src.zip
  	here=`pwd`; \
! 	( \
! 	  ( cd $(srcdir)/classpath; \
  	  find java gnu javax org -name '*.java' -print | \
  	  while read file; do \
  ## Ugly code to avoid "echo -C".  Must separate each entry by a newline
  ## Gross but easy.
  	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo $(srcdir)/classpath; \
  	    echo $$file; \
  	  done ); \
  ## Now the build tree.
! 	  ( cd classpath; \
! 	    find gnu java -name '*.java' -print | \
! 	    while read file; do \
! 	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo `pwd`; \
! 	    echo $$file; \
! 	  done ); \
! 	) | \
  ## Many of the above circumlocutions are because ZIP will most likely
  ## be a relative path to fastjar.
  	$(ZIP) -cfM@ $$here/src.zip
! ## Override GNU Classpath sources with libgcj replacements.
! 	here=`pwd`; \
! 	( \
! 	  ( cd $(srcdir); \
! 	  find gnu java -name '*.java' -print | \
! 	  while read file; do \
  	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo $(srcdir); \
  	    echo $$file; \
! 	  done ); \
! 	) | \
! 	$(ZIP) -ufM@ $$here/src.zip
  
  ## We use a variable for this in case the user wants to override it.
  sourcesdir = $(jardir)
  
  install-src.zip: src.zip
! 	$(INSTALL_DATA) src.zip $(DESTDIR)$(sourcesdir)/src-$(gcc_version).zip
  
  
  ## ################################################################
*************** install-src.zip: src.zip
*** 4021,4033 ****
  ##
  
  ## This is an evil hack to work around an automake limitation.  We
! ## need to ensure that all CNI headers are built, not just the ones used
! ## internally by libgcj. We can't make the .o files depend on nat_headers, 
! ## because in that case we'll force a complete rebuild of
! ## the C++ code whenever any .java file is touched.
! ## Also force all the class files to build first. This makes them build in
! ## the right order to improve performance.
! all-recursive: classes.stamp $(nat_headers) $(xlib_nat_headers)
  
  ## ################################################################
  
--- 916,949 ----
  ##
  
  ## This is an evil hack to work around an automake limitation.  We
! ## need to ensure that all CNI headers are built, not just the ones
! ## used internally by libgcj. We can't make the .o files depend on
! ## nat_headers, because in that case we'll force a complete rebuild of
! ## the C++ code whenever any .java file is touched.  So instead we
! ## have a dummy rule which is only used once, namely the first time a
! ## build is done.  On subsequent builds, the dependency tracking for
! ## the .cc compilations will have picked up the .h files, and these
! ## will be built directly as needed.
! 
! headers.stamp:
! ## Note that we don't use a real dependency here, since we don't want
! ## to rebuild all the headers here when the header list changes.  If
! ## we did rebuild here, then any addition of a .java file would cause
! ## a large number of recompilations.
! 	$(MAKE) create-headers
! 	@echo > headers.stamp
! 
! headers_to_make = $(nat_headers)
! if XLIB_AWT
! headers_to_make += $(xlib_nat_headers)
! endif
! 
! create-headers: $(headers_to_make)
! 
! .PHONY: create-headers
! 
! $(libgcj_la_OBJECTS) $(gcj_dbtool_OBJECTS) $(xlib_nat_files): headers.stamp
! $(libgij_la_OBJECTS): headers.stamp
  
  ## ################################################################
  
diff -Nrcpad gcc-4.0.2/libjava/Makefile.in gcc-4.1.0/libjava/Makefile.in
*** gcc-4.0.2/libjava/Makefile.in	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/libjava/Makefile.in	Tue Feb 28 08:39:11 2006
***************
*** 17,23 ****
  
  
  
! SOURCES = $(lib_gnu_awt_xlib_la_SOURCES) $(lib_gnu_java_awt_peer_gtk_la_SOURCES) $(libgcj_la_SOURCES) $(libgcj0_convenience_la_SOURCES) $(libgij_la_SOURCES) $(libjawt_la_SOURCES) $(gcj_dbtool_SOURCES) $(gen_from_JIS_SOURCES) $(gij_SOURCES) $(grmic_SOURCES) $(grmiregistry_SOURCES) $(jv_convert_SOURCES)
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
--- 17,23 ----
  
  
  
! SOURCES = $(lib_gnu_awt_xlib_la_SOURCES) $(lib_gnu_java_awt_peer_gtk_la_SOURCES) $(lib_gnu_java_awt_peer_qt_la_SOURCES) $(libgcj_la_SOURCES) $(libgcjawt_la_SOURCES) $(libgij_la_SOURCES) $(gcj_dbtool_SOURCES) $(gen_from_JIS_SOURCES) $(gij_SOURCES) $(grmic_SOURCES) $(grmiregistry_SOURCES) $(jv_convert_SOURCES)
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
*************** POST_UNINSTALL = :
*** 42,52 ****
  build_triplet = @build@
  host_triplet = @host@
  target_triplet = @target@
  @NATIVE_TRUE@bin_PROGRAMS = jv-convert$(EXEEXT) gij$(EXEEXT) \
  @NATIVE_TRUE@	grmic$(EXEEXT) grmiregistry$(EXEEXT) \
  @NATIVE_TRUE@	gcj-dbtool$(EXEEXT)
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@noinst_PROGRAMS =  \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gen-from-JIS$(EXEEXT)
  DIST_COMMON = README $(am__configure_deps) $(srcdir)/../compile \
  	$(srcdir)/../config.guess $(srcdir)/../config.sub \
  	$(srcdir)/../depcomp $(srcdir)/../install-sh \
--- 42,64 ----
  build_triplet = @build@
  host_triplet = @host@
  target_triplet = @target@
+ @TESTSUBDIR_TRUE@am__append_1 = testsuite
+ @XLIB_AWT_TRUE@am__append_2 = lib-gnu-awt-xlib.la
+ @GTK_AWT_TRUE@am__append_3 = lib-gnu-java-awt-peer-gtk.la libgcjawt.la
+ @QT_AWT_TRUE@am__append_4 = lib-gnu-java-awt-peer-qt.la
  @NATIVE_TRUE@bin_PROGRAMS = jv-convert$(EXEEXT) gij$(EXEEXT) \
  @NATIVE_TRUE@	grmic$(EXEEXT) grmiregistry$(EXEEXT) \
  @NATIVE_TRUE@	gcj-dbtool$(EXEEXT)
! @USING_GCC_TRUE@am__append_5 = $(WARNINGS)
! @USING_BOEHMGC_TRUE@am__append_6 = boehm.cc
! @USING_NOGC_TRUE@am__append_7 = nogc.cc
! @SUPPLY_BACKTRACE_TRUE@am__append_8 = sysdep/dwarf2-backtrace.cc
! @USING_POSIX_PLATFORM_TRUE@am__append_9 = posix.cc
! @USING_WIN32_PLATFORM_TRUE@am__append_10 = win32.cc
! @USING_DARWIN_CRT_TRUE@am__append_11 = darwin.cc
! @USING_POSIX_THREADS_TRUE@am__append_12 = posix-threads.cc
! @USING_WIN32_THREADS_TRUE@am__append_13 = win32-threads.cc
! @USING_NO_THREADS_TRUE@am__append_14 = no-threads.cc
  DIST_COMMON = README $(am__configure_deps) $(srcdir)/../compile \
  	$(srcdir)/../config.guess $(srcdir)/../config.sub \
  	$(srcdir)/../depcomp $(srcdir)/../install-sh \
*************** DIST_COMMON = README $(am__configure_dep
*** 54,76 ****
  	$(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
  	$(srcdir)/Makefile.in $(srcdir)/libgcj-test.spec.in \
  	$(srcdir)/libgcj.pc.in $(srcdir)/libgcj.spec.in \
! 	$(top_srcdir)/configure \
! 	$(top_srcdir)/gnu/classpath/Configuration.java.in COPYING \
! 	ChangeLog NEWS THANKS
  subdir = .
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/../config/accross.m4 \
! 	$(top_srcdir)/../config/acx.m4 \
! 	$(top_srcdir)/../config/gcc-version.m4 \
  	$(top_srcdir)/../config/gxx-include-dir.m4 \
  	$(top_srcdir)/../config/iconv.m4 \
  	$(top_srcdir)/../config/lcmessage.m4 \
  	$(top_srcdir)/../config/lib-ld.m4 \
  	$(top_srcdir)/../config/lib-link.m4 \
! 	$(top_srcdir)/../config/lib-prefix.m4 $(top_srcdir)/pkg.m4 \
! 	$(top_srcdir)/acinclude.m4 \
  	$(top_srcdir)/../config/no-executables.m4 \
! 	$(top_srcdir)/../libtool.m4 $(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
--- 66,92 ----
  	$(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
  	$(srcdir)/Makefile.in $(srcdir)/libgcj-test.spec.in \
  	$(srcdir)/libgcj.pc.in $(srcdir)/libgcj.spec.in \
! 	$(srcdir)/sources.am $(top_srcdir)/configure COPYING ChangeLog \
! 	NEWS THANKS
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@noinst_PROGRAMS =  \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gen-from-JIS$(EXEEXT)
! @XLIB_AWT_TRUE@am__append_15 = $(xlib_nat_headers)
  subdir = .
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
! 	$(top_srcdir)/../config/depstand.m4 \
! 	$(top_srcdir)/../config/enable.m4 \
  	$(top_srcdir)/../config/gxx-include-dir.m4 \
  	$(top_srcdir)/../config/iconv.m4 \
  	$(top_srcdir)/../config/lcmessage.m4 \
+ 	$(top_srcdir)/../config/lead-dot.m4 \
  	$(top_srcdir)/../config/lib-ld.m4 \
  	$(top_srcdir)/../config/lib-link.m4 \
! 	$(top_srcdir)/../config/lib-prefix.m4 \
  	$(top_srcdir)/../config/no-executables.m4 \
! 	$(top_srcdir)/../config/tls.m4 $(top_srcdir)/../libtool.m4 \
! 	$(top_srcdir)/mingwld.m4 $(top_srcdir)/pkg.m4 \
! 	$(top_srcdir)/shlibpath.m4 $(top_srcdir)/configure.ac
  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
  	$(ACLOCAL_M4)
  am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
*************** am__CONFIG_DISTCLEAN_FILES = config.stat
*** 78,90 ****
  CONFIG_HEADER = $(top_builddir)/include/config.h \
  	$(top_builddir)/gcj/libgcj-config.h
  CONFIG_CLEAN_FILES = libgcj.pc libgcj.spec libgcj-test.spec \
! 	gnu/classpath/Configuration.java java/io/natFile.cc \
! 	java/lang/ConcreteProcess.java java/lang/natConcreteProcess.cc \
! 	java/net/natInetAddress.cc java/net/natNetworkInterface.cc \
  	gnu/java/net/natPlainSocketImpl.cc \
  	gnu/java/net/natPlainDatagramSocketImpl.cc \
  	gnu/java/nio/natPipeImpl.cc gnu/java/nio/natSelectorImpl.cc \
! 	gnu/java/nio/channels/natFileChannelImpl.cc sysdep/locks.h
  am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
  am__vpath_adj = case $$p in \
      $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
--- 94,107 ----
  CONFIG_HEADER = $(top_builddir)/include/config.h \
  	$(top_builddir)/gcj/libgcj-config.h
  CONFIG_CLEAN_FILES = libgcj.pc libgcj.spec libgcj-test.spec \
! 	java/io/natFile.cc java/lang/ConcreteProcess.java \
! 	java/lang/natConcreteProcess.cc java/net/natInetAddress.cc \
! 	java/net/natVMNetworkInterface.cc \
  	gnu/java/net/natPlainSocketImpl.cc \
  	gnu/java/net/natPlainDatagramSocketImpl.cc \
  	gnu/java/nio/natPipeImpl.cc gnu/java/nio/natSelectorImpl.cc \
! 	gnu/java/nio/channels/natFileChannelImpl.cc sysdep/locks.h \
! 	sysdep/backtrace.h sysdep/descriptor.h
  am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
  am__vpath_adj = case $$p in \
      $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*************** am__installdirs = "$(DESTDIR)$(toolexecl
*** 96,103 ****
  	"$(DESTDIR)$(jardir)" "$(DESTDIR)$(pkgconfigdir)" \
  	"$(DESTDIR)$(toolexecmainlibdir)"
  toolexeclibLTLIBRARIES_INSTALL = $(INSTALL)
! LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
! am__DEPENDENCIES_1 = gnu/gcj/xlib.lo gnu/awt/xlib.lo
  am__dirstamp = $(am__leading_dot)dirstamp
  am__objects_1 = gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo \
  	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo \
--- 113,119 ----
  	"$(DESTDIR)$(jardir)" "$(DESTDIR)$(pkgconfigdir)" \
  	"$(DESTDIR)$(toolexecmainlibdir)"
  toolexeclibLTLIBRARIES_INSTALL = $(INSTALL)
! LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
  am__dirstamp = $(am__leading_dot)dirstamp
  am__objects_1 = gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo \
  	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo \
*************** am__objects_1 = gnu/gcj/xlib/lib_gnu_awt
*** 122,226 ****
  am_lib_gnu_awt_xlib_la_OBJECTS = $(am__objects_1)
  lib_gnu_awt_xlib_la_OBJECTS = $(am_lib_gnu_awt_xlib_la_OBJECTS)
  @XLIB_AWT_TRUE@am_lib_gnu_awt_xlib_la_rpath = -rpath $(toolexeclibdir)
! am__DEPENDENCIES_2 =
! am__lib_gnu_java_awt_peer_gtk_la_SOURCES_DIST =  \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c \
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c \
! 	jni/gtk-peer/gthread-jni.c jni/gtk-peer/gtk_jawt.c \
! 	jni/classpath/native_state.c jni/gtk-peer/gthread-jni.h \
! 	jni/gtk-peer/gtkpeer.h jni/classpath/native_state.h
! @GTK_CAIRO_TRUE@am__objects_2 = jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo
! am__objects_3 = $(am__objects_2) \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gthread-jni.lo \
! 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.lo \
! 	jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.lo
! am_lib_gnu_java_awt_peer_gtk_la_OBJECTS = $(am__objects_3)
  lib_gnu_java_awt_peer_gtk_la_OBJECTS =  \
  	$(am_lib_gnu_java_awt_peer_gtk_la_OBJECTS)
  @GTK_AWT_TRUE@am_lib_gnu_java_awt_peer_gtk_la_rpath = -rpath \
  @GTK_AWT_TRUE@	$(toolexeclibdir)
! am__DEPENDENCIES_3 = gnu/regexp/MessagesBundle.properties.lo \
! 	gnu/regexp/MessagesBundle_fr.properties.lo \
! 	org/ietf/jgss/MessagesBundle.properties.lo
! am__DEPENDENCIES_4 = $(am__DEPENDENCIES_3)
! am_libgcj_la_OBJECTS =
! libgcj_la_OBJECTS = $(am_libgcj_la_OBJECTS)
! am__DEPENDENCIES_5 = $(filter-out $(all_xlib_lo_files), \
! 	$(all_java_lo_files))
! am__libgcj0_convenience_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
! 	link.cc defineclass.cc interpret.cc verify.cc \
! 	gnu/gcj/natCore.cc gnu/gcj/convert/JIS0208_to_Unicode.cc \
  	gnu/gcj/convert/JIS0212_to_Unicode.cc \
  	gnu/gcj/convert/Unicode_to_JIS.cc gnu/gcj/convert/natIconv.cc \
  	gnu/gcj/convert/natInput_EUCJIS.cc \
--- 138,227 ----
  am_lib_gnu_awt_xlib_la_OBJECTS = $(am__objects_1)
  lib_gnu_awt_xlib_la_OBJECTS = $(am_lib_gnu_awt_xlib_la_OBJECTS)
  @XLIB_AWT_TRUE@am_lib_gnu_awt_xlib_la_rpath = -rpath $(toolexeclibdir)
! am__DEPENDENCIES_1 =
! am_lib_gnu_java_awt_peer_gtk_la_OBJECTS =
  lib_gnu_java_awt_peer_gtk_la_OBJECTS =  \
  	$(am_lib_gnu_java_awt_peer_gtk_la_OBJECTS)
  @GTK_AWT_TRUE@am_lib_gnu_java_awt_peer_gtk_la_rpath = -rpath \
  @GTK_AWT_TRUE@	$(toolexeclibdir)
! am_lib_gnu_java_awt_peer_qt_la_OBJECTS =
! lib_gnu_java_awt_peer_qt_la_OBJECTS =  \
! 	$(am_lib_gnu_java_awt_peer_qt_la_OBJECTS)
! @QT_AWT_TRUE@am_lib_gnu_java_awt_peer_qt_la_rpath = -rpath \
! @QT_AWT_TRUE@	$(toolexeclibdir)
! am__DEPENDENCIES_2 = gnu/awt.lo gnu/awt/j2d.lo gnu/classpath.lo \
! 	gnu/classpath/debug.lo gnu/classpath/jdwp.lo \
! 	gnu/classpath/jdwp/event.lo \
! 	gnu/classpath/jdwp/event/filters.lo \
! 	gnu/classpath/jdwp/exception.lo gnu/classpath/jdwp/id.lo \
! 	gnu/classpath/jdwp/processor.lo \
! 	gnu/classpath/jdwp/transport.lo gnu/classpath/jdwp/util.lo \
! 	gnu/gcj.lo gnu/gcj/convert.lo gnu/gcj/io.lo gnu/gcj/runtime.lo \
! 	gnu/gcj/util.lo gnu/java/awt.lo gnu/java/awt/color.lo \
! 	gnu/java/awt/image.lo gnu/java/awt/peer.lo gnu/java/io.lo \
! 	gnu/java/lang.lo gnu/java/lang/reflect.lo gnu/java/locale.lo \
! 	gnu/java/math.lo gnu/java/net.lo gnu/java/net/protocol/file.lo \
! 	gnu/java/net/protocol/ftp.lo gnu/java/net/protocol/http.lo \
! 	gnu/java/net/protocol/https.lo gnu/java/net/protocol/jar.lo \
! 	gnu/java/nio.lo gnu/java/nio/channels.lo \
! 	gnu/java/nio/charset.lo gnu/java/rmi.lo gnu/java/rmi/dgc.lo \
! 	gnu/java/rmi/registry.lo gnu/java/rmi/server.lo \
! 	gnu/java/security.lo gnu/java/security/action.lo \
! 	gnu/java/security/ber.lo gnu/java/security/der.lo \
! 	gnu/java/security/pkcs.lo gnu/java/security/provider.lo \
! 	gnu/java/security/util.lo gnu/java/security/x509.lo \
! 	gnu/java/security/x509/ext.lo gnu/java/text.lo \
! 	gnu/java/util.lo gnu/java/util/prefs.lo gnu/javax/crypto.lo \
! 	gnu/javax/imageio/bmp.lo gnu/javax/swing/text/html/parser.lo \
! 	gnu/javax/swing/text/html/parser/models.lo \
! 	gnu/javax/swing/text/html/parser/support.lo \
! 	gnu/javax/swing/text/html/parser/support/low.lo gnu/regexp.lo \
! 	java/applet.lo java/awt.lo java/awt/color.lo \
! 	java/awt/datatransfer.lo java/awt/dnd.lo java/awt/dnd/peer.lo \
! 	java/awt/event.lo java/awt/font.lo java/awt/geom.lo \
! 	java/awt/im.lo java/awt/im/spi.lo java/awt/image.lo \
! 	java/awt/image/renderable.lo java/awt/peer.lo \
! 	java/awt/print.lo java/beans.lo java/beans/beancontext.lo \
! 	java/io.lo java/lang.lo java/lang/annotation.lo \
! 	java/lang/ref.lo java/lang/reflect.lo java/math.lo java/net.lo \
! 	java/nio.lo java/nio/channels.lo java/nio/channels/spi.lo \
! 	java/nio/charset.lo java/nio/charset/spi.lo java/rmi.lo \
! 	java/rmi/activation.lo java/rmi/dgc.lo java/rmi/registry.lo \
! 	java/rmi/server.lo java/security.lo java/security/acl.lo \
! 	java/security/cert.lo java/security/interfaces.lo \
! 	java/security/spec.lo java/sql.lo java/text.lo java/util.lo \
! 	java/util/jar.lo java/util/logging.lo java/util/prefs.lo \
! 	java/util/regex.lo java/util/zip.lo javax/accessibility.lo \
! 	javax/crypto.lo javax/crypto/interfaces.lo \
! 	javax/crypto/spec.lo javax/naming.lo javax/naming/directory.lo \
! 	javax/naming/event.lo javax/naming/ldap.lo javax/naming/spi.lo \
! 	javax/net.lo javax/net/ssl.lo javax/print.lo \
! 	javax/print/attribute.lo javax/print/attribute/standard.lo \
! 	javax/print/event.lo javax/security/auth.lo \
! 	javax/security/auth/callback.lo javax/security/auth/login.lo \
! 	javax/security/auth/spi.lo javax/security/auth/x500.lo \
! 	javax/security/cert.lo javax/security/sasl.lo \
! 	javax/sound/midi.lo javax/sound/midi/spi.lo \
! 	javax/sound/sampled.lo javax/sound/sampled/spi.lo javax/sql.lo \
! 	javax/swing.lo javax/swing/border.lo \
! 	javax/swing/colorchooser.lo javax/swing/event.lo \
! 	javax/swing/filechooser.lo javax/swing/plaf.lo \
! 	javax/swing/plaf/basic.lo javax/swing/plaf/metal.lo \
! 	javax/swing/plaf/multi.lo javax/swing/table.lo \
! 	javax/swing/text.lo javax/swing/text/html.lo \
! 	javax/swing/text/html/parser.lo javax/swing/text/rtf.lo \
! 	javax/swing/tree.lo javax/swing/undo.lo javax/transaction.lo \
! 	javax/transaction/xa.lo org/ietf/jgss.lo
! am__DEPENDENCIES_3 = gnu-CORBA.lo gnu-java-beans.lo gnu-javax-rmi.lo \
! 	gnu-javax-sound-midi.lo gnu-xml.lo javax-imageio.lo \
! 	javax-rmi.lo javax-xml.lo org-omg.lo org-w3c.lo org-xml.lo
! am__DEPENDENCIES_4 = $(patsubst classpath/resource/%,%,$(addsuffix \
! 	.lo,$(property_files)))
! am__libgcj_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
! 	stacktrace.cc link.cc defineclass.cc interpret.cc verify.cc \
! 	java/lang/Class.java java/lang/Object.java \
! 	gnu/classpath/natSystemProperties.cc gnu/gcj/natCore.cc \
! 	gnu/gcj/convert/JIS0208_to_Unicode.cc \
  	gnu/gcj/convert/JIS0212_to_Unicode.cc \
  	gnu/gcj/convert/Unicode_to_JIS.cc gnu/gcj/convert/natIconv.cc \
  	gnu/gcj/convert/natInput_EUCJIS.cc \
*************** am__libgcj0_convenience_la_SOURCES_DIST 
*** 229,237 ****
  	gnu/gcj/convert/natOutput_SJIS.cc \
  	gnu/gcj/io/natSimpleSHSStream.cc gnu/gcj/io/shs.cc \
  	gnu/gcj/runtime/natFinalizerThread.cc \
- 	gnu/gcj/runtime/natNameFinder.cc \
  	gnu/gcj/runtime/natSharedLibLoader.cc \
- 	gnu/gcj/runtime/natStackTrace.cc \
  	gnu/gcj/runtime/natStringBuffer.cc gnu/gcj/util/natDebug.cc \
  	gnu/java/lang/natMainThread.cc \
  	gnu/java/net/natPlainDatagramSocketImpl.cc \
--- 230,236 ----
*************** am__libgcj0_convenience_la_SOURCES_DIST 
*** 247,281 ****
  	java/lang/natFloat.cc java/lang/natMath.cc \
  	java/lang/natObject.cc java/lang/natRuntime.cc \
  	java/lang/natString.cc java/lang/natStringBuffer.cc \
! 	java/lang/natSystem.cc java/lang/natThread.cc \
! 	java/lang/natVMClassLoader.cc \
! 	java/lang/natVMSecurityManager.cc \
  	java/lang/ref/natReference.cc java/lang/reflect/natArray.cc \
  	java/lang/reflect/natConstructor.cc \
  	java/lang/reflect/natField.cc java/lang/reflect/natMethod.cc \
! 	java/lang/reflect/natProxy.cc java/net/natNetworkInterface.cc \
! 	java/net/natInetAddress.cc java/nio/channels/natChannels.cc \
  	java/nio/natDirectByteBufferImpl.cc java/text/natCollator.cc \
  	java/util/natResourceBundle.cc java/util/natVMTimeZone.cc \
  	java/util/logging/natLogger.cc java/util/zip/natDeflater.cc \
! 	java/util/zip/natInflater.cc java/lang/dtoa.c \
! 	java/lang/k_rem_pio2.c java/lang/s_tan.c java/lang/e_acos.c \
! 	java/lang/k_sin.c java/lang/strtod.c java/lang/e_asin.c \
! 	java/lang/k_tan.c java/lang/w_acos.c java/lang/e_atan2.c \
! 	java/lang/mprec.c java/lang/w_asin.c java/lang/e_exp.c \
! 	java/lang/s_atan.c java/lang/w_atan2.c java/lang/e_fmod.c \
! 	java/lang/s_ceil.c java/lang/w_exp.c java/lang/e_log.c \
! 	java/lang/s_copysign.c java/lang/w_fmod.c java/lang/e_pow.c \
! 	java/lang/s_cos.c java/lang/w_log.c java/lang/e_rem_pio2.c \
! 	java/lang/s_fabs.c java/lang/w_pow.c java/lang/e_remainder.c \
! 	java/lang/s_floor.c java/lang/w_remainder.c \
! 	java/lang/e_scalb.c java/lang/s_rint.c java/lang/w_sqrt.c \
! 	java/lang/e_sqrt.c java/lang/s_scalbn.c java/lang/sf_rint.c \
! 	java/lang/k_cos.c java/lang/s_sin.c java/lang/sf_fabs.c \
! 	boehm.cc nogc.cc sysdep/dwarf2-backtrace.cc posix.cc win32.cc \
! 	darwin.cc posix-threads.cc win32-threads.cc no-threads.cc
! am__objects_4 = gnu/gcj/natCore.lo \
! 	gnu/gcj/convert/JIS0208_to_Unicode.lo \
  	gnu/gcj/convert/JIS0212_to_Unicode.lo \
  	gnu/gcj/convert/Unicode_to_JIS.lo gnu/gcj/convert/natIconv.lo \
  	gnu/gcj/convert/natInput_EUCJIS.lo \
--- 246,267 ----
  	java/lang/natFloat.cc java/lang/natMath.cc \
  	java/lang/natObject.cc java/lang/natRuntime.cc \
  	java/lang/natString.cc java/lang/natStringBuffer.cc \
! 	java/lang/natStringBuilder.cc java/lang/natSystem.cc \
! 	java/lang/natThread.cc java/lang/natVMClassLoader.cc \
! 	java/lang/natVMSecurityManager.cc java/lang/natVMThrowable.cc \
  	java/lang/ref/natReference.cc java/lang/reflect/natArray.cc \
  	java/lang/reflect/natConstructor.cc \
  	java/lang/reflect/natField.cc java/lang/reflect/natMethod.cc \
! 	java/net/natVMNetworkInterface.cc java/net/natInetAddress.cc \
! 	java/nio/channels/natChannels.cc \
  	java/nio/natDirectByteBufferImpl.cc java/text/natCollator.cc \
  	java/util/natResourceBundle.cc java/util/natVMTimeZone.cc \
  	java/util/logging/natLogger.cc java/util/zip/natDeflater.cc \
! 	java/util/zip/natInflater.cc boehm.cc nogc.cc \
! 	sysdep/dwarf2-backtrace.cc posix.cc win32.cc darwin.cc \
! 	posix-threads.cc win32-threads.cc no-threads.cc
! am__objects_2 = gnu/classpath/natSystemProperties.lo \
! 	gnu/gcj/natCore.lo gnu/gcj/convert/JIS0208_to_Unicode.lo \
  	gnu/gcj/convert/JIS0212_to_Unicode.lo \
  	gnu/gcj/convert/Unicode_to_JIS.lo gnu/gcj/convert/natIconv.lo \
  	gnu/gcj/convert/natInput_EUCJIS.lo \
*************** am__objects_4 = gnu/gcj/natCore.lo \
*** 284,292 ****
  	gnu/gcj/convert/natOutput_SJIS.lo \
  	gnu/gcj/io/natSimpleSHSStream.lo gnu/gcj/io/shs.lo \
  	gnu/gcj/runtime/natFinalizerThread.lo \
- 	gnu/gcj/runtime/natNameFinder.lo \
  	gnu/gcj/runtime/natSharedLibLoader.lo \
- 	gnu/gcj/runtime/natStackTrace.lo \
  	gnu/gcj/runtime/natStringBuffer.lo gnu/gcj/util/natDebug.lo \
  	gnu/java/lang/natMainThread.lo \
  	gnu/java/net/natPlainDatagramSocketImpl.lo \
--- 270,276 ----
*************** am__objects_4 = gnu/gcj/natCore.lo \
*** 302,356 ****
  	java/lang/natFloat.lo java/lang/natMath.lo \
  	java/lang/natObject.lo java/lang/natRuntime.lo \
  	java/lang/natString.lo java/lang/natStringBuffer.lo \
! 	java/lang/natSystem.lo java/lang/natThread.lo \
! 	java/lang/natVMClassLoader.lo \
! 	java/lang/natVMSecurityManager.lo \
  	java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \
  	java/lang/reflect/natConstructor.lo \
  	java/lang/reflect/natField.lo java/lang/reflect/natMethod.lo \
! 	java/lang/reflect/natProxy.lo java/net/natNetworkInterface.lo \
! 	java/net/natInetAddress.lo java/nio/channels/natChannels.lo \
  	java/nio/natDirectByteBufferImpl.lo java/text/natCollator.lo \
  	java/util/natResourceBundle.lo java/util/natVMTimeZone.lo \
  	java/util/logging/natLogger.lo java/util/zip/natDeflater.lo \
  	java/util/zip/natInflater.lo
! am__objects_5 = java/lang/dtoa.lo java/lang/k_rem_pio2.lo \
! 	java/lang/s_tan.lo java/lang/e_acos.lo java/lang/k_sin.lo \
! 	java/lang/strtod.lo java/lang/e_asin.lo java/lang/k_tan.lo \
! 	java/lang/w_acos.lo java/lang/e_atan2.lo java/lang/mprec.lo \
! 	java/lang/w_asin.lo java/lang/e_exp.lo java/lang/s_atan.lo \
! 	java/lang/w_atan2.lo java/lang/e_fmod.lo java/lang/s_ceil.lo \
! 	java/lang/w_exp.lo java/lang/e_log.lo java/lang/s_copysign.lo \
! 	java/lang/w_fmod.lo java/lang/e_pow.lo java/lang/s_cos.lo \
! 	java/lang/w_log.lo java/lang/e_rem_pio2.lo java/lang/s_fabs.lo \
! 	java/lang/w_pow.lo java/lang/e_remainder.lo \
! 	java/lang/s_floor.lo java/lang/w_remainder.lo \
! 	java/lang/e_scalb.lo java/lang/s_rint.lo java/lang/w_sqrt.lo \
! 	java/lang/e_sqrt.lo java/lang/s_scalbn.lo java/lang/sf_rint.lo \
! 	java/lang/k_cos.lo java/lang/s_sin.lo java/lang/sf_fabs.lo
! @USING_BOEHMGC_TRUE@am__objects_6 = boehm.lo
! @USING_NOGC_TRUE@am__objects_7 = nogc.lo
! @SUPPLY_BACKTRACE_TRUE@am__objects_8 = sysdep/dwarf2-backtrace.lo
! @USING_POSIX_PLATFORM_TRUE@am__objects_9 = posix.lo
! @USING_WIN32_PLATFORM_TRUE@am__objects_10 = win32.lo
! @USING_ECOS_PLATFORM_TRUE@am__objects_11 = posix.lo
! @USING_DARWIN_CRT_TRUE@am__objects_12 = darwin.lo
! @USING_POSIX_THREADS_TRUE@am__objects_13 = posix-threads.lo
! @USING_WIN32_THREADS_TRUE@am__objects_14 = win32-threads.lo
! @USING_NO_THREADS_TRUE@am__objects_15 = no-threads.lo
! am_libgcj0_convenience_la_OBJECTS = prims.lo jni.lo exception.lo \
! 	link.lo defineclass.lo interpret.lo verify.lo $(am__objects_4) \
! 	$(am__objects_5) $(am__objects_6) $(am__objects_7) \
! 	$(am__objects_8) $(am__objects_9) $(am__objects_10) \
! 	$(am__objects_11) $(am__objects_12) $(am__objects_13) \
! 	$(am__objects_14) $(am__objects_15)
! libgcj0_convenience_la_OBJECTS = $(am_libgcj0_convenience_la_OBJECTS)
  am_libgij_la_OBJECTS = gij.lo
  libgij_la_OBJECTS = $(am_libgij_la_OBJECTS)
- libjawt_la_DEPENDENCIES = lib-gnu-java-awt-peer-gtk.la
- am_libjawt_la_OBJECTS = libjawt_la-jawt.lo
- libjawt_la_OBJECTS = $(am_libjawt_la_OBJECTS)
- @GTK_AWT_TRUE@am_libjawt_la_rpath = -rpath $(toolexeclibdir)
  binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
  PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
  am_gcj_dbtool_OBJECTS = gnu/gcj/tools/gcj_dbtool/Main.$(OBJEXT) \
--- 286,325 ----
  	java/lang/natFloat.lo java/lang/natMath.lo \
  	java/lang/natObject.lo java/lang/natRuntime.lo \
  	java/lang/natString.lo java/lang/natStringBuffer.lo \
! 	java/lang/natStringBuilder.lo java/lang/natSystem.lo \
! 	java/lang/natThread.lo java/lang/natVMClassLoader.lo \
! 	java/lang/natVMSecurityManager.lo java/lang/natVMThrowable.lo \
  	java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \
  	java/lang/reflect/natConstructor.lo \
  	java/lang/reflect/natField.lo java/lang/reflect/natMethod.lo \
! 	java/net/natVMNetworkInterface.lo java/net/natInetAddress.lo \
! 	java/nio/channels/natChannels.lo \
  	java/nio/natDirectByteBufferImpl.lo java/text/natCollator.lo \
  	java/util/natResourceBundle.lo java/util/natVMTimeZone.lo \
  	java/util/logging/natLogger.lo java/util/zip/natDeflater.lo \
  	java/util/zip/natInflater.lo
! @USING_BOEHMGC_TRUE@am__objects_3 = boehm.lo
! @USING_NOGC_TRUE@am__objects_4 = nogc.lo
! @SUPPLY_BACKTRACE_TRUE@am__objects_5 = sysdep/dwarf2-backtrace.lo
! @USING_POSIX_PLATFORM_TRUE@am__objects_6 = posix.lo
! @USING_WIN32_PLATFORM_TRUE@am__objects_7 = win32.lo
! @USING_DARWIN_CRT_TRUE@am__objects_8 = darwin.lo
! @USING_POSIX_THREADS_TRUE@am__objects_9 = posix-threads.lo
! @USING_WIN32_THREADS_TRUE@am__objects_10 = win32-threads.lo
! @USING_NO_THREADS_TRUE@am__objects_11 = no-threads.lo
! am_libgcj_la_OBJECTS = prims.lo jni.lo exception.lo stacktrace.lo \
! 	link.lo defineclass.lo interpret.lo verify.lo \
! 	java/lang/Class.lo java/lang/Object.lo $(am__objects_2) \
! 	$(am__objects_3) $(am__objects_4) $(am__objects_5) \
! 	$(am__objects_6) $(am__objects_7) $(am__objects_8) \
! 	$(am__objects_9) $(am__objects_10) $(am__objects_11)
! libgcj_la_OBJECTS = $(am_libgcj_la_OBJECTS)
! libgcjawt_la_DEPENDENCIES = lib-gnu-java-awt-peer-gtk.la
! am_libgcjawt_la_OBJECTS = classpath/native/jawt/libgcjawt_la-jawt.lo
! libgcjawt_la_OBJECTS = $(am_libgcjawt_la_OBJECTS)
! @GTK_AWT_TRUE@am_libgcjawt_la_rpath = -rpath $(toolexeclibdir)
  am_libgij_la_OBJECTS = gij.lo
  libgij_la_OBJECTS = $(am_libgij_la_OBJECTS)
  binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
  PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
  am_gcj_dbtool_OBJECTS = gnu/gcj/tools/gcj_dbtool/Main.$(OBJEXT) \
*************** LTGCJCOMPILE = $(LIBTOOL) --mode=compile
*** 396,414 ****
  	$(GCJFLAGS)
  GCJLD = $(GCJ)
  SOURCES = $(lib_gnu_awt_xlib_la_SOURCES) \
! 	$(lib_gnu_java_awt_peer_gtk_la_SOURCES) $(libgcj_la_SOURCES) \
! 	$(libgcj0_convenience_la_SOURCES) $(libgij_la_SOURCES) \
! 	$(libjawt_la_SOURCES) $(gcj_dbtool_SOURCES) \
! 	$(gen_from_JIS_SOURCES) $(gij_SOURCES) $(grmic_SOURCES) \
! 	$(grmiregistry_SOURCES) $(jv_convert_SOURCES)
  DIST_SOURCES = $(lib_gnu_awt_xlib_la_SOURCES) \
! 	$(am__lib_gnu_java_awt_peer_gtk_la_SOURCES_DIST) \
! 	$(libgcj_la_SOURCES) \
! 	$(am__libgcj0_convenience_la_SOURCES_DIST) \
! 	$(libgij_la_SOURCES) $(libjawt_la_SOURCES) \
! 	$(gcj_dbtool_SOURCES) $(am__gen_from_JIS_SOURCES_DIST) \
! 	$(gij_SOURCES) $(grmic_SOURCES) $(grmiregistry_SOURCES) \
! 	$(jv_convert_SOURCES)
  RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
  	html-recursive info-recursive install-data-recursive \
  	install-exec-recursive install-info-recursive \
--- 365,382 ----
  	$(GCJFLAGS)
  GCJLD = $(GCJ)
  SOURCES = $(lib_gnu_awt_xlib_la_SOURCES) \
! 	$(lib_gnu_java_awt_peer_gtk_la_SOURCES) \
! 	$(lib_gnu_java_awt_peer_qt_la_SOURCES) $(libgcj_la_SOURCES) \
! 	$(libgcjawt_la_SOURCES) $(libgij_la_SOURCES) \
! 	$(gcj_dbtool_SOURCES) $(gen_from_JIS_SOURCES) $(gij_SOURCES) \
! 	$(grmic_SOURCES) $(grmiregistry_SOURCES) $(jv_convert_SOURCES)
  DIST_SOURCES = $(lib_gnu_awt_xlib_la_SOURCES) \
! 	$(lib_gnu_java_awt_peer_gtk_la_SOURCES) \
! 	$(lib_gnu_java_awt_peer_qt_la_SOURCES) \
! 	$(am__libgcj_la_SOURCES_DIST) $(libgcjawt_la_SOURCES) \
! 	$(libgij_la_SOURCES) $(gcj_dbtool_SOURCES) \
! 	$(am__gen_from_JIS_SOURCES_DIST) $(gij_SOURCES) \
! 	$(grmic_SOURCES) $(grmiregistry_SOURCES) $(jv_convert_SOURCES)
  RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
  	html-recursive info-recursive install-data-recursive \
  	install-exec-recursive install-info-recursive \
*************** DATA = $(dbexec_DATA) $(jar_DATA) $(pkgc
*** 423,429 ****
  	$(toolexecmainlib_DATA)
  ETAGS = etags
  CTAGS = ctags
! DIST_SUBDIRS = @DIRLTDL@ gcj include external testsuite
  DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
  distdir = $(PACKAGE)-$(VERSION)
  top_distdir = $(distdir)
--- 391,397 ----
  	$(toolexecmainlib_DATA)
  ETAGS = etags
  CTAGS = ctags
! DIST_SUBDIRS = @DIRLTDL@ gcj include classpath testsuite
  DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
  distdir = $(PACKAGE)-$(VERSION)
  top_distdir = $(distdir)
*************** PATH_SEPARATOR = @PATH_SEPARATOR@
*** 542,547 ****
--- 510,517 ----
  PERL = @PERL@
  PKG_CONFIG = @PKG_CONFIG@
  PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@
+ QT_AWT_FALSE = @QT_AWT_FALSE@
+ QT_AWT_TRUE = @QT_AWT_TRUE@
  RANLIB = @RANLIB@
  SET_MAKE = @SET_MAKE@
  SHELL = @SHELL@
*************** USING_BOEHMGC_FALSE = @USING_BOEHMGC_FAL
*** 564,571 ****
  USING_BOEHMGC_TRUE = @USING_BOEHMGC_TRUE@
  USING_DARWIN_CRT_FALSE = @USING_DARWIN_CRT_FALSE@
  USING_DARWIN_CRT_TRUE = @USING_DARWIN_CRT_TRUE@
- USING_ECOS_PLATFORM_FALSE = @USING_ECOS_PLATFORM_FALSE@
- USING_ECOS_PLATFORM_TRUE = @USING_ECOS_PLATFORM_TRUE@
  USING_GCC_FALSE = @USING_GCC_FALSE@
  USING_GCC_TRUE = @USING_GCC_TRUE@
  USING_NOGC_FALSE = @USING_NOGC_FALSE@
--- 534,539 ----
*************** build = @build@
*** 615,632 ****
  build_alias = @build_alias@
  build_cpu = @build_cpu@
  build_os = @build_os@
  build_vendor = @build_vendor@
  datadir = @datadir@
  exec_prefix = @exec_prefix@
! gcc_version = @gcc_version@
! gcc_version_full = @gcc_version_full@
! gcc_version_trigger = @gcc_version_trigger@
  gxx_include_dir = @gxx_include_dir@
  here = @here@
  host = @host@
  host_alias = @host_alias@
  host_cpu = @host_cpu@
  host_os = @host_os@
  host_vendor = @host_vendor@
  includedir = @includedir@
  infodir = @infodir@
--- 583,601 ----
  build_alias = @build_alias@
  build_cpu = @build_cpu@
  build_os = @build_os@
+ build_subdir = @build_subdir@
  build_vendor = @build_vendor@
  datadir = @datadir@
+ dbexecdir = @dbexecdir@
  exec_prefix = @exec_prefix@
! extra_ldflags_libjava = @extra_ldflags_libjava@
  gxx_include_dir = @gxx_include_dir@
  here = @here@
  host = @host@
  host_alias = @host_alias@
  host_cpu = @host_cpu@
  host_os = @host_os@
+ host_subdir = @host_subdir@
  host_vendor = @host_vendor@
  includedir = @includedir@
  infodir = @infodir@
*************** target_cpu = @target_cpu@
*** 653,687 ****
  # autoconf2.13's target_alias
  target_noncanonical = @target_noncanonical@
  target_os = @target_os@
  target_vendor = @target_vendor@
- tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  toolexecmainlibdir = @toolexecmainlibdir@
  AUTOMAKE_OPTIONS = foreign subdir-objects
! ACLOCAL_AMFLAGS = -I . -I ../config
! @USING_BOEHMGC_FALSE@BOEHMGC_SRC = 
! @USING_BOEHMGC_TRUE@BOEHMGC_SRC = boehm.cc
! @USING_NOGC_FALSE@NOGC_SRC = 
! @USING_NOGC_TRUE@NOGC_SRC = nogc.cc
! @SUPPLY_BACKTRACE_FALSE@BACKTRACE_SRC = 
! @SUPPLY_BACKTRACE_TRUE@BACKTRACE_SRC = sysdep/dwarf2-backtrace.cc
! @USING_POSIX_PLATFORM_FALSE@POSIX_PLATFORM_SRC = 
! @USING_POSIX_PLATFORM_TRUE@POSIX_PLATFORM_SRC = posix.cc
! @USING_WIN32_PLATFORM_FALSE@WIN32_PLATFORM_SRC = 
! @USING_WIN32_PLATFORM_TRUE@WIN32_PLATFORM_SRC = win32.cc
! @USING_ECOS_PLATFORM_FALSE@ECOS_PLATFORM_SRC = 
! @USING_ECOS_PLATFORM_TRUE@ECOS_PLATFORM_SRC = posix.cc
! @USING_POSIX_THREADS_FALSE@POSIX_THREAD_SRC = 
! @USING_POSIX_THREADS_TRUE@POSIX_THREAD_SRC = posix-threads.cc
! @USING_WIN32_THREADS_FALSE@WIN32_THREAD_SRC = 
! @USING_WIN32_THREADS_TRUE@WIN32_THREAD_SRC = win32-threads.cc
! @USING_NO_THREADS_FALSE@NO_THREAD_SRC = 
! @USING_NO_THREADS_TRUE@NO_THREAD_SRC = no-threads.cc
! @TESTSUBDIR_FALSE@SUBDIRS = $(DIRLTDL) gcj include external
! @TESTSUBDIR_TRUE@SUBDIRS = $(DIRLTDL) testsuite gcj include external
! @USING_DARWIN_CRT_FALSE@DARWIN_CRT_SRC = 
! @USING_DARWIN_CRT_TRUE@DARWIN_CRT_SRC = darwin.cc
  
  # write_entries_to_file - writes each entry in a list
  # to the specified file. Each entry is written individually
--- 622,638 ----
  # autoconf2.13's target_alias
  target_noncanonical = @target_noncanonical@
  target_os = @target_os@
+ target_subdir = @target_subdir@
  target_vendor = @target_vendor@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  toolexecmainlibdir = @toolexecmainlibdir@
  AUTOMAKE_OPTIONS = foreign subdir-objects
! ACLOCAL_AMFLAGS = -I . -I .. -I ../config
! 
! # May be used by various substitution variables.
! gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
! SUBDIRS = $(DIRLTDL) gcj include classpath $(am__append_1)
  
  # write_entries_to_file - writes each entry in a list
  # to the specified file. Each entry is written individually
*************** ACLOCAL_AMFLAGS = -I . -I ../config
*** 691,725 ****
  # $(1): variable containing entries to iterate over
  # $(2): output file
  write_entries_to_file = $(shell rm -f $(2) || :) $(shell touch $(2)) $(foreach object,$(1),$(shell echo $(object) >> $(2)))
! @XLIB_AWT_FALSE@cond_xlib_ltlibrary = 
! @XLIB_AWT_TRUE@cond_xlib_ltlibrary = lib-gnu-awt-xlib.la
! @GTK_AWT_FALSE@cond_gtk_ltlibrary = 
! @GTK_AWT_TRUE@cond_gtk_ltlibrary = lib-gnu-java-awt-peer-gtk.la
! @GTK_AWT_FALSE@cond_gtk_jawt_ltlibrary = 
! @GTK_AWT_TRUE@cond_gtk_jawt_ltlibrary = libjawt.la
! toolexeclib_LTLIBRARIES = libgcj.la libgij.la \
!     $(cond_gtk_ltlibrary) $(cond_gtk_jawt_ltlibrary) $(cond_xlib_ltlibrary)
! 
  toolexecmainlib_DATA = libgcj.spec
  pkgconfigdir = $(libdir)/pkgconfig
  pkgconfig_DATA = libgcj.pc
  jardir = $(datadir)/java
! jar_DATA = libgcj-@gcc_version@.jar
  @JAVA_HOME_SET_FALSE@JAVA_HOME_DIR = $(prefix)
  @JAVA_HOME_SET_TRUE@JAVA_HOME_DIR = $(JAVA_HOME)
  @JAVA_HOME_SET_FALSE@BOOT_CLASS_PATH_DIR = $(jardir)/$(jar_DATA)
  @JAVA_HOME_SET_TRUE@BOOT_CLASS_PATH_DIR = $(JAVA_HOME)/lib/rt.jar
  secdir = $(libdir)/security
  propdir = $(libdir)
- dbexecdir = $(libdir)/gcj-@gcc_version@
  db_name = classmap.db
! db_pathtail = gcj-@gcc_version@/$(db_name)
  @NATIVE_TRUE@dbexec_DATA = $(db_name)
  bin_SCRIPTS = addr2name.awk
  GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated
! GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
! LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
! JAVAC = $(GCJ_WITH_FLAGS) -C
  WARNINGS = -Wextra -Wall
  AM_CXXFLAGS = \
  	-fno-rtti \
--- 642,671 ----
  # $(1): variable containing entries to iterate over
  # $(2): output file
  write_entries_to_file = $(shell rm -f $(2) || :) $(shell touch $(2)) $(foreach object,$(1),$(shell echo $(object) >> $(2)))
! toolexeclib_LTLIBRARIES = libgcj.la libgij.la $(am__append_2) \
! 	$(am__append_3) $(am__append_4)
  toolexecmainlib_DATA = libgcj.spec
  pkgconfigdir = $(libdir)/pkgconfig
  pkgconfig_DATA = libgcj.pc
  jardir = $(datadir)/java
! jar_DATA = libgcj-$(gcc_version).jar
  @JAVA_HOME_SET_FALSE@JAVA_HOME_DIR = $(prefix)
  @JAVA_HOME_SET_TRUE@JAVA_HOME_DIR = $(JAVA_HOME)
  @JAVA_HOME_SET_FALSE@BOOT_CLASS_PATH_DIR = $(jardir)/$(jar_DATA)
  @JAVA_HOME_SET_TRUE@BOOT_CLASS_PATH_DIR = $(JAVA_HOME)/lib/rt.jar
  secdir = $(libdir)/security
  propdir = $(libdir)
  db_name = classmap.db
! db_pathtail = gcj-$(gcc_version)/$(db_name)
  @NATIVE_TRUE@dbexec_DATA = $(db_name)
  bin_SCRIPTS = addr2name.awk
  GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated
! GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) \
!           $(LDFLAGS) -o $@
! 
! LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) \
!           $(LDFLAGS) $(extra_ldflags_libjava) -o $@
! 
  WARNINGS = -Wextra -Wall
  AM_CXXFLAGS = \
  	-fno-rtti \
*************** AM_GCJFLAGS = \
*** 746,795 ****
  	@LIBGCJ_JAVAFLAGS@ \
  	-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
  	--encoding=UTF-8 \
! 	-Wno-deprecated
  
! @USING_GCC_FALSE@AM_CFLAGS = @LIBGCJ_CFLAGS@
! @USING_GCC_TRUE@AM_CFLAGS = @LIBGCJ_CFLAGS@ $(WARNINGS)
  PEDANTIC_CFLAGS = -ansi -pedantic -Wall -Wno-long-long
  JCFLAGS = -g
  JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
! AM_CPPFLAGS = -I$(top_srcdir) -Iinclude -I$(top_srcdir)/include \
  	$(GCINCS) $(THREADINCS) $(INCLTDL) \
  	$(GCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS)
  
! BOOTCLASSPATH = $(here)'$(CLASSPATH_SEPARATOR)'$(srcdir)'$(CLASSPATH_SEPARATOR)'$(srcdir)/external/w3c_dom'$(CLASSPATH_SEPARATOR)'$(srcdir)/external/sax
! 
! # Files for which we build .lo files
! all_native_compiled_source_files = \
!     $(java_source_files) \
!     $(built_java_source_files) \
!     $(xlib_java_source_files)
! 
! 
! # Files for which we build .class files
! # It *must* begin with $(all_native_compiled_source_files)
! all_java_source_files = \
!     $(all_native_compiled_source_files) \
!     $(gtk_awt_peer_source_files) \
!     $(gnu_xml_source_files) \
!     $(javax_imageio_source_files) \
!     $(javax_xml_source_files) \
!     $(gnu_java_beans_source_files) \
!     gnu/gcj/tools/gcj_dbtool/Main.java
! 
! EXTRA_DIST = $(all_java_source_files)
! all_native_compiled_dirs = $(sort $(patsubst %/, %, $(dir $(all_native_compiled_source_files))))
! all_java_dirs = $(sort $(patsubst %/, %, $(dir $(all_java_source_files))))
! all_java_lo_files = $(all_native_compiled_dirs:=.lo)
! all_java_deps_files = $(all_java_dirs:=.deps)
! all_java_stamp_files = $(all_java_dirs:=.stamp)
! all_java_filelist_files = $(all_java_dirs:=.list)
! 
! # In the future these may be defined manually, if we decide to split libgcj.so
! # into multiple shared libraries.  For now, everything but xlib goes into
! # all_libgcj_lo_files
! all_xlib_lo_files = gnu/gcj/xlib.lo gnu/awt/xlib.lo
! all_libgcj_lo_files = $(filter-out $(all_xlib_lo_files), $(all_java_lo_files))
  all_property_files = $(property_files) \
      java/util/logging/logging.properties
  
--- 692,711 ----
  	@LIBGCJ_JAVAFLAGS@ \
  	-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
  	--encoding=UTF-8 \
! 	-Wno-deprecated -fbootstrap-classes
  
! AM_CFLAGS = @LIBGCJ_CFLAGS@ $(am__append_5)
  PEDANTIC_CFLAGS = -ansi -pedantic -Wall -Wno-long-long
  JCFLAGS = -g
  JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
! AM_CPPFLAGS = -I$(top_srcdir) \
! 	-Iinclude -I$(top_srcdir)/include \
! 	-I$(top_srcdir)/classpath/include \
! 	-I$(top_srcdir)/classpath/native/fdlibm \
  	$(GCINCS) $(THREADINCS) $(INCLTDL) \
  	$(GCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS)
  
! BOOTCLASSPATH = $(here)/classpath/lib
  all_property_files = $(property_files) \
      java/util/logging/logging.properties
  
*************** libgij_la_LIBADD = -L$(here)/.libs libgc
*** 799,828 ****
  libgij_la_LDFLAGS = -rpath $(toolexeclibdir) \
          -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC)
  
! 
! # Work around libtool wanting to do piece-wise linking with -r.  Using a
! # convenience library suddenly invokes the --whole-archive path instead.
! # This allows the build to succeed for targets that allocate multiple got
! # subsections in the linker, such as Alpha and MIPS.
! libgcj0_convenience_la_SOURCES = prims.cc jni.cc exception.cc \
! 	link.cc defineclass.cc interpret.cc verify.cc \
! 	$(nat_source_files) $(math_c_source_files) \
! 	$(BOEHMGC_SRC) $(NOGC_SRC) \
! 	$(BACKTRACE_SRC) \
! 	$(POSIX_PLATFORM_SRC) $(WIN32_PLATFORM_SRC) $(ECOS_PLATFORM_SRC) \
! 	$(DARWIN_CRT_SRC) \
! 	$(POSIX_THREAD_SRC) $(WIN32_THREAD_SRC) $(NO_THREAD_SRC)
! 
! libgcj0_convenience_la_LIBADD = \
! 	$(all_libgcj_lo_files) \
! 	gnu/gcj/runtime/StackTrace.lo \
! 	gnu-xml.lo javax-imageio.lo \
! 	javax-xml.lo gnu-java-beans.lo \
! 	external/sax/libsax-gcj.la \
! 	external/w3c_dom/libw3c-gcj.la
! 
! libgcj0_convenience_la_DEPENDENCIES = $(libgcj0_convenience_la_LIBADD)
! noinst_LTLIBRARIES = libgcj0_convenience.la
  nat_files = $(nat_source_files:.cc=.lo)
  xlib_nat_files = $(xlib_nat_source_files:.cc=.lo)
  
--- 715,726 ----
  libgij_la_LDFLAGS = -rpath $(toolexeclibdir) \
          -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC)
  
! libgcj_la_SOURCES = prims.cc jni.cc exception.cc stacktrace.cc link.cc \
! 	defineclass.cc interpret.cc verify.cc java/lang/Class.java \
! 	java/lang/Object.java $(nat_source_files) $(am__append_6) \
! 	$(am__append_7) $(am__append_8) $(am__append_9) \
! 	$(am__append_10) $(am__append_11) $(am__append_12) \
! 	$(am__append_13) $(am__append_14)
  nat_files = $(nat_source_files:.cc=.lo)
  xlib_nat_files = $(xlib_nat_source_files:.cc=.lo)
  
*************** libgcj_la_LDFLAGS = -rpath $(toolexeclib
*** 833,972 ****
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
  
  libgcj_la_LIBADD = \
! 	libgcj0_convenience.la \
! 	$(LIBFFI) $(ZLIBS) $(GCLIBS) $(propertyo_files)
  
! libgcj_la_SOURCES = 
! libgcj_la_DEPENDENCIES = libgcj-@gcc_version@.jar \
! 	java/lang/fdlibm.h java/lang/ieeefp.h java/lang/mprec.h \
  	$(LIBLTDL) $(libgcj_la_LIBADD)
  
  libgcj_la_LINK = $(LIBLINK)
! @GTK_CAIRO_FALSE@gtk_cairo_c_source_files = 
! 
! # Gtk/Cairo JNI sources.
! @GTK_CAIRO_TRUE@gtk_cairo_c_source_files = \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
! 
! gtk_c_source_files = \
! $(gtk_cairo_c_source_files) \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c	\
! jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c \
! jni/gtk-peer/gthread-jni.c \
! jni/gtk-peer/gtk_jawt.c \
! jni/classpath/native_state.c
! 
! gtk_awt_peer_source_files = \
! gnu/java/awt/peer/gtk/GdkTextLayout.java \
! gnu/java/awt/peer/gtk/GdkFontMetrics.java \
! gnu/java/awt/peer/gtk/GdkFontPeer.java \
! gnu/java/awt/peer/gtk/GdkGlyphVector.java \
! gnu/java/awt/peer/gtk/GdkGraphics.java \
! gnu/java/awt/peer/gtk/GdkGraphics2D.java \
! gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java \
! gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java \
! gnu/java/awt/peer/gtk/GdkPixbufDecoder.java \
! gnu/java/awt/peer/gtk/GdkRobotPeer.java \
! gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java \
! gnu/java/awt/peer/gtk/GtkButtonPeer.java \
! gnu/java/awt/peer/gtk/GtkCanvasPeer.java \
! gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java	\
! gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java \
! gnu/java/awt/peer/gtk/GtkCheckboxPeer.java \
! gnu/java/awt/peer/gtk/GtkChoicePeer.java \
! gnu/java/awt/peer/gtk/GtkClipboard.java	\
! gnu/java/awt/peer/gtk/GtkComponentPeer.java \
! gnu/java/awt/peer/gtk/GtkContainerPeer.java \
! gnu/java/awt/peer/gtk/GtkDialogPeer.java \
! gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java \
! gnu/java/awt/peer/gtk/GtkFileDialogPeer.java \
! gnu/java/awt/peer/gtk/GtkFramePeer.java	\
! gnu/java/awt/peer/gtk/GtkGenericPeer.java \
! gnu/java/awt/peer/gtk/GtkImage.java \
! gnu/java/awt/peer/gtk/GtkImagePainter.java \
! gnu/java/awt/peer/gtk/GtkLabelPeer.java	\
! gnu/java/awt/peer/gtk/GtkListPeer.java \
! gnu/java/awt/peer/gtk/GtkMenuBarPeer.java \
! gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java	\
! gnu/java/awt/peer/gtk/GtkMenuItemPeer.java \
! gnu/java/awt/peer/gtk/GtkMenuPeer.java \
! gnu/java/awt/peer/gtk/GtkOffScreenImage.java \
! gnu/java/awt/peer/gtk/GtkPanelPeer.java	\
! gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java \
! gnu/java/awt/peer/gtk/GtkScrollPanePeer.java \
! gnu/java/awt/peer/gtk/GtkScrollbarPeer.java \
! gnu/java/awt/peer/gtk/GtkTextAreaPeer.java \
! gnu/java/awt/peer/gtk/GtkTextComponentPeer.java	\
! gnu/java/awt/peer/gtk/GtkTextFieldPeer.java \
! gnu/java/awt/peer/gtk/GtkToolkit.java \
! gnu/java/awt/peer/gtk/GtkWindowPeer.java \
! gnu/java/awt/peer/gtk/GThreadMutex.java \
! gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
! 
! gtk_jni_headers = $(patsubst %.java,jniinclude/%.h,$(subst /,_,$(gtk_awt_peer_source_files)))
! lib_gnu_java_awt_peer_gtk_la_SOURCES = \
! $(gtk_c_source_files) \
! jni/gtk-peer/gthread-jni.h \
! jni/gtk-peer/gtkpeer.h \
! jni/classpath/native_state.h
  
! lib_gnu_java_awt_peer_gtk_la_CFLAGS = \
! 	-Ijniinclude -I$(srcdir)/jni/classpath \
! 	-I$(srcdir)/jni/gtk-peer $(PEDANTIC_CFLAGS) $(GTK_CFLAGS) $(LIBART_CFLAGS) \
! 	$(X_CFLAGS) $(CAIRO_CFLAGS) $(PANGOFT2_CFLAGS)
  
- lib_gnu_java_awt_peer_gtk_la_GCJFLAGS = $(AM_GCJFLAGS) -fjni
- lib_gnu_java_awt_peer_gtk_la_LIBADD = gtk-awt-peer.lo $(GTK_LIBS) $(GLIB_LIBS) $(LIBART_LIBS) $(CAIRO_LIBS) $(PANGOFT2_LIBS)
- lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES = gtk-awt-peer.lo $(gtk_jni_headers) libgcj-@gcc_version@.jar libgcj.la libgcj.spec
  lib_gnu_java_awt_peer_gtk_la_LDFLAGS = \
          -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC) $(X_LIBS) -lXtst
  
  lib_gnu_java_awt_peer_gtk_la_LINK = $(LIBLINK)
! libjawt_la_SOURCES = jawt.c
! libjawt_la_CFLAGS = -I$(srcdir)/jni/classpath $(PEDANTIC_CFLAGS) $(X_CFLAGS)
! libjawt_la_LIBADD = -L$(here)/.libs lib-gnu-java-awt-peer-gtk.la
! libjawt_la_LDFLAGS = \
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version` \
  	$(LIBGCJ_LD_SYMBOLIC)
  
! libjawt_la_LINK = $(LIBLINK)
  lib_gnu_awt_xlib_la_SOURCES = $(xlib_nat_source_files)
! lib_gnu_awt_xlib_la_LIBADD = $(all_xlib_lo_files)
! lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-@gcc_version@.jar libgcj.la libgcj.spec \
  	$(lib_gnu_awt_xlib_la_LIBADD)
  
  lib_gnu_awt_xlib_la_CPPFLAGS = \
--- 731,788 ----
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
  
  libgcj_la_LIBADD = \
! 	classpath/native/fdlibm/libfdlibm.la \
! 	$(all_packages_source_files:.list=.lo) \
! 	$(bc_objects) \
! 	$(propertyo_files) \
! 	$(LIBFFI) $(ZLIBS) $(GCLIBS)
  
! libgcj_la_DEPENDENCIES = libgcj-$(gcc_version).jar \
! 	$(all_packages_source_files:.list=.lo) \
  	$(LIBLTDL) $(libgcj_la_LIBADD)
  
  libgcj_la_LINK = $(LIBLINK)
! lib_gnu_java_awt_peer_gtk_la_SOURCES = 
! lib_gnu_java_awt_peer_gtk_la_LIBADD = \
! 	gnu-java-awt-peer-gtk.lo \
! 	classpath/native/jni/gtk-peer/libgtkpeer.la \
! 	$(GTK_LIBS) $(GLIB_LIBS) $(LIBART_LIBS) $(CAIRO_LIBS) $(PANGOFT2_LIBS)
  
! lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES = gnu-java-awt-peer-gtk.lo \
! 	classpath/native/jni/gtk-peer/libgtkpeer.la \
! 	libgcj-$(gcc_version).jar libgcj.la libgcj.spec
  
  lib_gnu_java_awt_peer_gtk_la_LDFLAGS = \
          -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC) $(X_LIBS) -lXtst
  
  lib_gnu_java_awt_peer_gtk_la_LINK = $(LIBLINK)
! libgcjawt_la_SOURCES = classpath/native/jawt/jawt.c
! libgcjawt_la_CFLAGS = -I$(srcdir)/classpath/native/jni/classpath \
! 	$(PEDANTIC_CFLAGS) $(X_CFLAGS)
! 
! libgcjawt_la_LIBADD = -L$(here)/.libs lib-gnu-java-awt-peer-gtk.la
! libgcjawt_la_LDFLAGS = \
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version` \
  	$(LIBGCJ_LD_SYMBOLIC)
  
! libgcjawt_la_LINK = $(LIBLINK)
! lib_gnu_java_awt_peer_qt_la_SOURCES = 
! lib_gnu_java_awt_peer_qt_la_LIBADD = \
! 	gnu-java-awt-peer-qt.lo \
! 	classpath/native/jni/qt-peer/libqtpeer.la
! 
! lib_gnu_java_awt_peer_qt_la_DEPENDENCIES = gnu-java-awt-peer-qt.lo \
! 	classpath/native/jni/qt-peer/libqtpeer.la \
! 	libgcj-$(gcc_version).jar libgcj.la libgcj.spec
! 
! lib_gnu_java_awt_peer_qt_la_LDFLAGS = \
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC) $(X_LIBS) -lXtst
! 
! lib_gnu_java_awt_peer_qt_la_LINK = $(LIBLINK)
  lib_gnu_awt_xlib_la_SOURCES = $(xlib_nat_source_files)
! lib_gnu_awt_xlib_la_LIBADD = gnu/awt/xlib.lo gnu/gcj/xlib.lo
! lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-$(gcc_version).jar \
! 	libgcj.la libgcj.spec \
  	$(lib_gnu_awt_xlib_la_LIBADD)
  
  lib_gnu_awt_xlib_la_CPPFLAGS = \
*************** lib_gnu_awt_xlib_la_LDFLAGS = ../libstdc
*** 982,2975 ****
  
  lib_gnu_awt_xlib_la_LINK = $(LIBLINK)
  property_files = \
! gnu/regexp/MessagesBundle.properties \
! gnu/regexp/MessagesBundle_fr.properties \
! org/ietf/jgss/MessagesBundle.properties
  
! propertyo_files = $(property_files:.properties=.properties.lo)
! CLEANFILES = libgcj-@gcc_version@.jar classes.stamp $(all_java_stamp_files) \
  	$(all_java_deps_files) $(all_java_filelist_files)
  
! DISTCLEANFILES = Makefile.deps native.dirs bytecompile.dirs
! SUFFIXES = .class .java .h .properties
! ordinary_nat_headers = \
!     $(ordinary_java_source_files:.java=.h) \
!     $(built_java_source_files:.java=.h)
  
! inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \
! 	java/io/ObjectInputStream$$GetField.h \
! 	java/nio/DirectByteBufferImpl$$ReadWrite.h \
! 	java/nio/channels/Pipe$$SinkChannel.h \
! 	java/nio/channels/Pipe$$SourceChannel.h \
! 	java/lang/reflect/Proxy$$ProxyData.h \
! 	java/lang/reflect/Proxy$$ProxyType.h \
! 	gnu/java/net/PlainSocketImpl$$SocketInputStream.h \
! 	gnu/java/net/PlainSocketImpl$$SocketOutputStream.h \
! 	gnu/java/nio/PipeImpl$$SinkChannelImpl.h \
! 	gnu/java/nio/PipeImpl$$SourceChannelImpl.h \
! 	$(PLATFORM_INNER_NAT_HDRS)
  
! nat_headers = $(ordinary_nat_headers) $(inner_nat_headers) gnu/gcj/tools/gcj_dbtool/Main.h
! nat_headers_install = $(ordinary_nat_headers)
! xlib_nat_headers = $(xlib_java_source_files:.java=.h)
! extra_headers = java/lang/Object.h java/lang/Class.h
! NM = nm
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@gen_from_JIS_SOURCES = \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/gen-from-JIS.c \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/make-trie.c
  
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@gen_from_JIS_DEPENDENCIES = \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/JIS0201.h \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/JIS0208.h \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/JIS0212.h
  
! jv_convert_SOURCES = 
! jv_convert_LDFLAGS = --main=gnu.gcj.convert.Convert \
! 	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
  
! jv_convert_LINK = $(GCJLINK)
! jv_convert_LDADD = -L$(here)/.libs libgcj.la
! jv_convert_DEPENDENCIES = libgcj.la libgcj.spec
! gcj_dbtool_SOURCES = gnu/gcj/tools/gcj_dbtool/Main.java \
! 	gnu/gcj/tools/gcj_dbtool/natMain.cc
  
! gcj_dbtool_LDFLAGS = --main=gnu.gcj.tools.gcj_dbtool.Main \
! 	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
  
! gcj_dbtool_LINK = $(GCJLINK)
! gcj_dbtool_LDADD = -L$(here)/.libs libgcj.la
! gcj_dbtool_DEPENDENCIES = libgcj.la libgcj.spec
! gij_SOURCES = 
! gij_LDFLAGS = -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
! gij_LINK = $(GCJLINK)
! gij_LDADD = -L$(here)/.libs libgij.la
! gij_DEPENDENCIES = libgij.la
! grmic_SOURCES = 
! grmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \
! 	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
  
! grmic_LINK = $(GCJLINK)
! grmic_LDADD = -L$(here)/.libs libgcj.la
! grmic_DEPENDENCIES = libgcj.la libgcj.spec
! grmiregistry_SOURCES = 
! grmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \
! 	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
  
! grmiregistry_LINK = $(GCJLINK)
! grmiregistry_LDADD = -L$(here)/.libs libgcj.la
! grmiregistry_DEPENDENCIES = libgcj.la libgcj.spec
! convert_source_files = \
  gnu/gcj/convert/BytesToUnicode.java \
  gnu/gcj/convert/Convert.java \
  gnu/gcj/convert/Input_8859_1.java \
  gnu/gcj/convert/Input_ASCII.java \
  gnu/gcj/convert/Input_EUCJIS.java \
  gnu/gcj/convert/Input_JavaSrc.java \
  gnu/gcj/convert/Input_SJIS.java \
  gnu/gcj/convert/Input_UnicodeBig.java \
  gnu/gcj/convert/Input_UnicodeLittle.java \
- gnu/gcj/convert/Input_UTF8.java	\
  gnu/gcj/convert/Input_iconv.java \
- gnu/gcj/convert/IOConverter.java \
  gnu/gcj/convert/Output_8859_1.java \
  gnu/gcj/convert/Output_ASCII.java \
  gnu/gcj/convert/Output_EUCJIS.java \
  gnu/gcj/convert/Output_JavaSrc.java \
  gnu/gcj/convert/Output_SJIS.java \
- gnu/gcj/convert/Output_UnicodeLittleUnmarked.java \
  gnu/gcj/convert/Output_UTF8.java \
  gnu/gcj/convert/Output_iconv.java \
  gnu/gcj/convert/UnicodeToBytes.java
  
! special_java_source_files = java/lang/Class.java java/lang/Object.java
! gnu_java_beans_source_files = \
! gnu/java/beans/decoder/AbstractContext.java \
! gnu/java/beans/decoder/AbstractCreatableObjectContext.java \
! gnu/java/beans/decoder/AbstractElementHandler.java \
! gnu/java/beans/decoder/AbstractObjectContext.java \
! gnu/java/beans/decoder/ArrayContext.java \
! gnu/java/beans/decoder/ArrayHandler.java \
! gnu/java/beans/decoder/AssemblyException.java \
! gnu/java/beans/decoder/BooleanHandler.java \
! gnu/java/beans/decoder/ByteHandler.java \
! gnu/java/beans/decoder/CharHandler.java \
! gnu/java/beans/decoder/ClassHandler.java \
! gnu/java/beans/decoder/ConstructorContext.java \
! gnu/java/beans/decoder/Context.java \
! gnu/java/beans/decoder/DecoderContext.java \
! gnu/java/beans/decoder/DefaultExceptionListener.java \
! gnu/java/beans/decoder/DoubleHandler.java \
! gnu/java/beans/decoder/DummyContext.java \
! gnu/java/beans/decoder/DummyHandler.java \
! gnu/java/beans/decoder/ElementHandler.java \
! gnu/java/beans/decoder/FloatHandler.java \
! gnu/java/beans/decoder/GrowableArrayContext.java \
! gnu/java/beans/decoder/IndexContext.java \
! gnu/java/beans/decoder/IntHandler.java \
! gnu/java/beans/decoder/JavaHandler.java \
! gnu/java/beans/decoder/LongHandler.java \
! gnu/java/beans/decoder/MethodContext.java \
! gnu/java/beans/decoder/MethodFinder.java \
! gnu/java/beans/decoder/NullHandler.java \
! gnu/java/beans/decoder/ObjectContext.java \
! gnu/java/beans/decoder/ObjectHandler.java \
! gnu/java/beans/decoder/PersistenceParser.java \
! gnu/java/beans/decoder/PropertyContext.java \
! gnu/java/beans/decoder/ShortHandler.java \
! gnu/java/beans/decoder/SimpleHandler.java \
! gnu/java/beans/decoder/StaticMethodContext.java \
! gnu/java/beans/decoder/StringHandler.java \
! gnu/java/beans/decoder/VoidHandler.java \
! gnu/java/beans/editors/ColorEditor.java	\
! gnu/java/beans/editors/FontEditor.java \
! gnu/java/beans/editors/NativeBooleanEditor.java	\
! gnu/java/beans/editors/NativeByteEditor.java \
! gnu/java/beans/editors/NativeDoubleEditor.java \
! gnu/java/beans/editors/NativeFloatEditor.java \
! gnu/java/beans/editors/NativeIntEditor.java \
! gnu/java/beans/editors/NativeLongEditor.java \
! gnu/java/beans/editors/NativeShortEditor.java \
! gnu/java/beans/editors/StringEditor.java \
! gnu/java/beans/BeanInfoEmbryo.java \
! gnu/java/beans/DummyAppletContext.java \
! gnu/java/beans/DummyAppletStub.java \
! gnu/java/beans/ExplicitBeanInfo.java \
! gnu/java/beans/IntrospectionIncubator.java
! 
! awt_java_source_files = \
! gnu/awt/LightweightRedirector.java \
! gnu/awt/j2d/AbstractGraphicsState.java \
! gnu/awt/j2d/DirectRasterGraphics.java \
! gnu/awt/j2d/Graphics2DImpl.java \
! gnu/awt/j2d/IntegerGraphicsState.java \
! gnu/awt/j2d/MappedRaster.java \
! gnu/java/awt/BitMaskExtent.java \
! gnu/java/awt/Buffers.java \
! gnu/java/awt/BitwiseXORComposite.java \
! gnu/java/awt/ComponentDataBlitOp.java \
! gnu/java/awt/ClasspathToolkit.java \
! gnu/java/awt/EmbeddedWindow.java \
! gnu/java/awt/EmbeddedWindowSupport.java \
! gnu/java/awt/EventModifier.java \
! gnu/java/awt/color/CieXyzConverter.java \
! gnu/java/awt/color/ClutProfileConverter.java \
! gnu/java/awt/color/ColorLookUpTable.java \
! gnu/java/awt/color/ColorSpaceConverter.java \
! gnu/java/awt/color/GrayProfileConverter.java \
! gnu/java/awt/color/GrayScaleConverter.java \
! gnu/java/awt/color/LinearRGBConverter.java \
! gnu/java/awt/color/ProfileHeader.java \
! gnu/java/awt/color/PyccConverter.java \
! gnu/java/awt/color/RgbProfileConverter.java \
! gnu/java/awt/color/SrgbConverter.java \
! gnu/java/awt/color/TagEntry.java \
! gnu/java/awt/color/ToneReproductionCurve.java \
! gnu/java/awt/image/ImageDecoder.java \
! gnu/java/awt/image/XBMDecoder.java \
! gnu/java/awt/peer/EmbeddedWindowPeer.java \
! gnu/java/awt/peer/GLightweightPeer.java \
! gnu/java/awt/peer/ClasspathFontPeer.java \
! gnu/java/awt/peer/ClasspathTextLayoutPeer.java \
! java/applet/Applet.java \
! java/applet/AppletStub.java \
! java/applet/AppletContext.java \
! java/applet/AudioClip.java \
! java/awt/AWTError.java \
! java/awt/AWTEvent.java \
! java/awt/AWTEventMulticaster.java \
! java/awt/AWTException.java \
! java/awt/AWTPermission.java \
! java/awt/ActiveEvent.java \
! java/awt/Adjustable.java \
! java/awt/BorderLayout.java \
! java/awt/Button.java \
! java/awt/Canvas.java \
! java/awt/CardLayout.java \
! java/awt/Checkbox.java \
! java/awt/CheckboxGroup.java \
! java/awt/CheckboxMenuItem.java \
! java/awt/Choice.java \
! java/awt/Color.java \
! java/awt/Component.java \
! java/awt/ComponentOrientation.java \
! java/awt/Container.java \
! java/awt/Cursor.java \
! java/awt/Dialog.java \
! java/awt/Dimension.java \
! java/awt/Event.java \
! java/awt/EventDispatchThread.java \
! java/awt/EventQueue.java \
! java/awt/FileDialog.java \
! java/awt/FlowLayout.java \
! java/awt/Font.java \
! java/awt/FontMetrics.java \
! java/awt/Frame.java \
! java/awt/Graphics.java \
! java/awt/Graphics2D.java \
! java/awt/GraphicsConfiguration.java \
! java/awt/GridBagConstraints.java \
! java/awt/GridBagLayout.java \
! java/awt/GridBagLayoutInfo.java \
! java/awt/GridLayout.java \
! java/awt/IllegalComponentStateException.java \
! java/awt/Image.java \
! java/awt/Insets.java \
! java/awt/ItemSelectable.java \
! java/awt/Label.java \
! java/awt/LayoutManager.java \
! java/awt/LayoutManager2.java \
! java/awt/List.java \
! java/awt/Menu.java \
! java/awt/MenuBar.java \
! java/awt/MenuComponent.java \
! java/awt/MenuContainer.java \
! java/awt/MenuItem.java \
! java/awt/MenuShortcut.java \
! java/awt/Paint.java \
! java/awt/PaintContext.java \
! java/awt/Panel.java \
! java/awt/Point.java \
! java/awt/PopupMenu.java \
! java/awt/Rectangle.java \
! java/awt/RenderingHints.java \
! java/awt/ScrollPane.java \
! java/awt/Scrollbar.java \
! java/awt/Shape.java \
! java/awt/TextArea.java \
! java/awt/TextComponent.java \
! java/awt/TextField.java \
! java/awt/Toolkit.java \
! java/awt/Transparency.java \
! java/awt/Window.java \
! java/awt/color/ColorSpace.java \
! java/awt/color/ICC_ColorSpace.java \
! java/awt/color/ICC_Profile.java \
! java/awt/color/ICC_ProfileGray.java \
! java/awt/color/ICC_ProfileRGB.java \
! java/awt/color/CMMException.java \
! java/awt/color/ProfileDataException.java \
! java/awt/datatransfer/Clipboard.java \
! java/awt/datatransfer/ClipboardOwner.java \
! java/awt/datatransfer/DataFlavor.java \
! java/awt/datatransfer/FlavorMap.java \
! java/awt/datatransfer/MimeTypeParseException.java \
! java/awt/datatransfer/StringSelection.java \
! java/awt/datatransfer/SystemFlavorMap.java \
! java/awt/datatransfer/Transferable.java \
! java/awt/datatransfer/UnsupportedFlavorException.java \
! java/awt/datatransfer/FlavorTable.java \
! java/awt/event/AWTEventListener.java \
! java/awt/event/ActionEvent.java \
! java/awt/event/ActionListener.java \
! java/awt/event/AdjustmentEvent.java \
! java/awt/event/AdjustmentListener.java \
! java/awt/event/ComponentAdapter.java \
! java/awt/event/ComponentEvent.java \
! java/awt/event/ComponentListener.java \
! java/awt/event/ContainerAdapter.java \
! java/awt/event/ContainerEvent.java \
! java/awt/event/ContainerListener.java \
! java/awt/event/FocusAdapter.java \
! java/awt/event/FocusEvent.java \
! java/awt/event/FocusListener.java \
! java/awt/event/HierarchyBoundsAdapter.java \
! java/awt/event/HierarchyBoundsListener.java \
! java/awt/event/HierarchyEvent.java \
! java/awt/event/HierarchyListener.java \
! java/awt/event/InputEvent.java \
! java/awt/event/InputMethodEvent.java \
! java/awt/event/InputMethodListener.java \
! java/awt/event/InvocationEvent.java \
! java/awt/event/ItemEvent.java \
! java/awt/event/ItemListener.java \
! java/awt/event/KeyAdapter.java \
! java/awt/event/KeyEvent.java \
! java/awt/event/KeyListener.java \
! java/awt/event/MouseAdapter.java \
! java/awt/event/MouseEvent.java \
! java/awt/event/MouseListener.java \
! java/awt/event/MouseMotionAdapter.java \
! java/awt/event/MouseMotionListener.java \
! java/awt/event/PaintEvent.java \
! java/awt/event/TextEvent.java \
! java/awt/event/TextListener.java \
! java/awt/event/WindowAdapter.java \
! java/awt/event/WindowEvent.java \
! java/awt/event/WindowListener.java \
! java/awt/event/AWTEventListenerProxy.java \
! java/awt/event/MouseWheelEvent.java \
! java/awt/event/MouseWheelListener.java \
! java/awt/event/WindowFocusListener.java \
! java/awt/event/WindowStateListener.java \
! java/awt/font/FontRenderContext.java \
! java/awt/font/ShapeGraphicAttribute.java \
! java/awt/font/MultipleMaster.java \
! java/awt/font/TransformAttribute.java \
! java/awt/font/GlyphJustificationInfo.java \
! java/awt/font/LineBreakMeasurer.java \
! java/awt/font/TextMeasurer.java \
! java/awt/font/TextLayout.java \
! java/awt/font/LineMetrics.java \
! java/awt/font/TextAttribute.java \
! java/awt/font/GlyphMetrics.java \
! java/awt/font/OpenType.java \
! java/awt/font/GlyphVector.java \
! java/awt/font/GraphicAttribute.java \
! java/awt/font/ImageGraphicAttribute.java \
! java/awt/font/NumericShaper.java \
! java/awt/geom/AffineTransform.java \
! java/awt/geom/Dimension2D.java \
! java/awt/geom/Ellipse2D.java \
! java/awt/geom/IllegalPathStateException.java \
! java/awt/geom/NoninvertibleTransformException.java \
! java/awt/geom/PathIterator.java \
! java/awt/geom/Point2D.java \
! java/awt/geom/Rectangle2D.java \
! java/awt/geom/RectangularShape.java \
! java/awt/geom/RoundRectangle2D.java \
! java/awt/geom/Line2D.java \
! java/awt/geom/Arc2D.java \
! java/awt/geom/Area.java \
! java/awt/geom/CubicCurve2D.java \
! java/awt/geom/FlatteningPathIterator.java \
! java/awt/geom/GeneralPath.java \
! java/awt/geom/QuadCurve2D.java \
! java/awt/image/BandCombineOp.java \
! java/awt/image/BandedSampleModel.java \
! java/awt/image/AffineTransformOp.java \
! java/awt/image/BufferedImage.java \
! java/awt/image/BufferedImageFilter.java \
! java/awt/image/ByteLookupTable.java \
! java/awt/image/ColorConvertOp.java \
! java/awt/image/ColorModel.java \
! java/awt/image/ComponentColorModel.java \
! java/awt/image/ComponentSampleModel.java \
! java/awt/image/ConvolveOp.java \
! java/awt/image/DataBuffer.java \
! java/awt/image/DataBufferByte.java \
! java/awt/image/DataBufferDouble.java \
! java/awt/image/DataBufferFloat.java \
! java/awt/image/DataBufferInt.java \
! java/awt/image/DataBufferShort.java \
! java/awt/image/DataBufferUShort.java \
! java/awt/image/DirectColorModel.java \
! java/awt/image/ImageConsumer.java \
! java/awt/image/ImageObserver.java \
! java/awt/image/ImageProducer.java \
! java/awt/image/IndexColorModel.java \
! java/awt/image/Kernel.java \
! java/awt/image/LookupOp.java \
! java/awt/image/LookupTable.java \
! java/awt/image/MultiPixelPackedSampleModel.java \
! java/awt/image/PackedColorModel.java \
! java/awt/image/PixelInterleavedSampleModel.java \
! java/awt/image/Raster.java \
! java/awt/image/RasterOp.java \
! java/awt/image/RescaleOp.java \
! java/awt/image/SampleModel.java \
! java/awt/image/ShortLookupTable.java \
! java/awt/image/SinglePixelPackedSampleModel.java \
! java/awt/image/WritableRaster.java \
! java/awt/image/AreaAveragingScaleFilter.java \
! java/awt/image/CropImageFilter.java \
! java/awt/image/FilteredImageSource.java \
! java/awt/image/ImageFilter.java \
! java/awt/image/MemoryImageSource.java \
! java/awt/image/PixelGrabber.java \
! java/awt/image/RGBImageFilter.java \
! java/awt/image/ReplicateScaleFilter.java \
! java/awt/image/BufferStrategy.java \
! java/awt/image/BufferedImageOp.java \
! java/awt/image/ImagingOpException.java \
! java/awt/image/RasterFormatException.java \
! java/awt/image/RenderedImage.java \
! java/awt/image/TileObserver.java \
! java/awt/image/VolatileImage.java \
! java/awt/image/WritableRenderedImage.java \
! java/awt/image/renderable/ContextualRenderedImageFactory.java \
! java/awt/image/renderable/ParameterBlock.java \
! java/awt/image/renderable/RenderContext.java \
! java/awt/image/renderable/RenderableImage.java \
! java/awt/image/renderable/RenderableImageOp.java \
! java/awt/image/renderable/RenderableImageProducer.java \
! java/awt/image/renderable/RenderedImageFactory.java \
! java/awt/peer/ButtonPeer.java \
! java/awt/peer/CanvasPeer.java \
! java/awt/peer/CheckboxMenuItemPeer.java \
! java/awt/peer/CheckboxPeer.java \
! java/awt/peer/ChoicePeer.java \
! java/awt/peer/ComponentPeer.java \
! java/awt/peer/ContainerPeer.java \
! java/awt/peer/DialogPeer.java \
! java/awt/peer/FileDialogPeer.java \
! java/awt/peer/FontPeer.java \
! java/awt/peer/FramePeer.java \
! java/awt/peer/LabelPeer.java \
! java/awt/peer/LightweightPeer.java \
! java/awt/peer/ListPeer.java \
! java/awt/peer/MenuBarPeer.java \
! java/awt/peer/MenuComponentPeer.java \
! java/awt/peer/MenuItemPeer.java \
! java/awt/peer/MenuPeer.java \
! java/awt/peer/PanelPeer.java \
! java/awt/peer/PopupMenuPeer.java \
! java/awt/peer/RobotPeer.java \
! java/awt/peer/ScrollPanePeer.java \
! java/awt/peer/ScrollbarPeer.java \
! java/awt/peer/TextAreaPeer.java \
! java/awt/peer/TextComponentPeer.java \
! java/awt/peer/TextFieldPeer.java \
! java/awt/peer/WindowPeer.java \
! java/awt/SystemColor.java \
! java/awt/Polygon.java \
! java/awt/MediaTracker.java \
! java/awt/PrintGraphics.java \
! java/awt/PrintJob.java \
! java/awt/AWTKeyStroke.java \
! java/awt/AlphaComposite.java \
! java/awt/AttributeValue.java \
! java/awt/BasicStroke.java \
! java/awt/BufferCapabilities.java \
! java/awt/ColorPaintContext.java \
! java/awt/Composite.java \
! java/awt/CompositeContext.java \
! java/awt/ContainerOrderFocusTraversalPolicy.java \
! java/awt/DefaultFocusTraversalPolicy.java \
! java/awt/DefaultKeyboardFocusManager.java \
! java/awt/DisplayMode.java \
! java/awt/FocusTraversalPolicy.java \
! java/awt/FontFormatException.java \
! java/awt/GradientPaint.java \
! java/awt/GraphicsConfigTemplate.java \
! java/awt/GraphicsDevice.java \
! java/awt/GraphicsEnvironment.java \
! java/awt/HeadlessException.java \
! java/awt/ImageCapabilities.java \
! java/awt/JobAttributes.java \
! java/awt/KeyEventDispatcher.java \
! java/awt/KeyEventPostProcessor.java \
! java/awt/KeyboardFocusManager.java \
! java/awt/PageAttributes.java \
! java/awt/Robot.java \
! java/awt/ScrollPaneAdjustable.java \
! java/awt/Stroke.java \
! java/awt/TexturePaint.java \
! java/awt/dnd/peer/DragSourceContextPeer.java \
! java/awt/dnd/peer/DropTargetContextPeer.java \
! java/awt/dnd/peer/DropTargetPeer.java \
! java/awt/dnd/DnDConstants.java \
! java/awt/dnd/DnDEventMulticaster.java \
! java/awt/dnd/DragGestureEvent.java \
! java/awt/dnd/DragGestureListener.java \
! java/awt/dnd/DragGestureRecognizer.java	\
! java/awt/dnd/DragSource.java \
! java/awt/dnd/DragSourceAdapter.java \
! java/awt/dnd/DragSourceContext.java \
! java/awt/dnd/DragSourceDragEvent.java \
! java/awt/dnd/DragSourceEvent.java \
! java/awt/dnd/DragSourceListener.java \
! java/awt/dnd/DragSourceMotionListener.java \
! java/awt/dnd/DropTarget.java \
! java/awt/dnd/InvalidDnDOperationException.java \
! java/awt/dnd/Autoscroll.java \
! java/awt/dnd/DragSourceDropEvent.java \
! java/awt/dnd/DropTargetAdapter.java \
! java/awt/dnd/DropTargetContext.java \
! java/awt/dnd/DropTargetDragEvent.java \
! java/awt/dnd/DropTargetDropEvent.java \
! java/awt/dnd/DropTargetEvent.java \
! java/awt/dnd/DropTargetListener.java \
! java/awt/dnd/MouseDragGestureRecognizer.java \
! java/awt/font/TextHitInfo.java \
! java/awt/im/spi/InputMethod.java \
! java/awt/im/spi/InputMethodContext.java \
! java/awt/im/spi/InputMethodDescriptor.java \
! java/awt/im/InputContext.java \
! java/awt/im/InputMethodHighlight.java \
! java/awt/im/InputMethodRequests.java \
! java/awt/im/InputSubset.java \
! java/awt/print/Book.java \
! java/awt/print/PageFormat.java \
! java/awt/print/Pageable.java \
! java/awt/print/Paper.java \
! java/awt/print/Printable.java \
! java/awt/print/PrinterAbortException.java \
! java/awt/print/PrinterException.java \
! java/awt/print/PrinterGraphics.java \
! java/awt/print/PrinterIOException.java \
! java/awt/print/PrinterJob.java \
! java/beans/beancontext/BeanContext.java \
! java/beans/beancontext/BeanContextChild.java \
! java/beans/beancontext/BeanContextChildComponentProxy.java \
! java/beans/beancontext/BeanContextChildSupport.java \
! java/beans/beancontext/BeanContextContainerProxy.java \
! java/beans/beancontext/BeanContextEvent.java \
! java/beans/beancontext/BeanContextMembershipEvent.java \
! java/beans/beancontext/BeanContextMembershipListener.java \
! java/beans/beancontext/BeanContextProxy.java \
! java/beans/beancontext/BeanContextServiceAvailableEvent.java \
! java/beans/beancontext/BeanContextServiceProvider.java \
! java/beans/beancontext/BeanContextServiceProviderBeanInfo.java \
! java/beans/beancontext/BeanContextServiceRevokedEvent.java \
! java/beans/beancontext/BeanContextServiceRevokedListener.java \
! java/beans/beancontext/BeanContextServices.java \
! java/beans/beancontext/BeanContextServicesListener.java \
! java/beans/beancontext/BeanContextServicesSupport.java \
! java/beans/beancontext/BeanContextSupport.java \
! java/beans/BeanDescriptor.java \
! java/beans/BeanInfo.java \
! java/beans/Beans.java \
! java/beans/Customizer.java \
! java/beans/DesignMode.java \
! java/beans/EventHandler.java \
! java/beans/EventSetDescriptor.java \
! java/beans/ExceptionListener.java \
! java/beans/Expression.java \
! java/beans/FeatureDescriptor.java \
! java/beans/IndexedPropertyDescriptor.java \
! java/beans/IntrospectionException.java \
! java/beans/Introspector.java \
! java/beans/MethodDescriptor.java \
! java/beans/ParameterDescriptor.java \
! java/beans/PropertyChangeEvent.java \
! java/beans/PropertyChangeListener.java \
! java/beans/PropertyChangeListenerProxy.java \
! java/beans/PropertyChangeSupport.java \
! java/beans/PropertyDescriptor.java \
! java/beans/PropertyEditor.java \
! java/beans/PropertyEditorManager.java \
! java/beans/PropertyEditorSupport.java \
! java/beans/PropertyVetoException.java \
! java/beans/Statement.java \
! java/beans/SimpleBeanInfo.java \
! java/beans/VetoableChangeListener.java \
! java/beans/VetoableChangeListenerProxy.java \
! java/beans/VetoableChangeSupport.java \
! java/beans/Visibility.java \
! java/beans/AppletInitializer.java \
! java/beans/XMLDecoder.java \
! javax/swing/border/AbstractBorder.java \
! javax/swing/border/BevelBorder.java \
! javax/swing/border/Border.java \
! javax/swing/border/CompoundBorder.java \
! javax/swing/border/EmptyBorder.java \
! javax/swing/border/EtchedBorder.java \
! javax/swing/border/LineBorder.java \
! javax/swing/border/MatteBorder.java \
! javax/swing/border/SoftBevelBorder.java \
! javax/swing/border/TitledBorder.java \
! javax/swing/GrayFilter.java \
! javax/swing/AbstractAction.java \
! javax/swing/AbstractButton.java \
! javax/swing/AbstractSpinnerModel.java \
! javax/swing/plaf/basic/BasicArrowButton.java \
! javax/swing/plaf/basic/BasicButtonListener.java \
! javax/swing/plaf/basic/BasicButtonUI.java \
! javax/swing/plaf/basic/BasicCheckBoxUI.java \
! javax/swing/plaf/basic/BasicColorChooserUI.java \
! javax/swing/plaf/basic/BasicComboBoxUI.java \
! javax/swing/plaf/basic/BasicComboBoxEditor.java \
! javax/swing/plaf/basic/BasicComboBoxRenderer.java \
! javax/swing/plaf/basic/BasicComboPopup.java \
! javax/swing/plaf/basic/BasicDesktopIconUI.java \
! javax/swing/plaf/basic/BasicDesktopPaneUI.java \
! javax/swing/plaf/basic/BasicEditorPaneUI.java \
! javax/swing/plaf/basic/BasicFormattedTextFieldUI.java \
! javax/swing/plaf/basic/BasicGraphicsUtils.java \
! javax/swing/plaf/basic/BasicInternalFrameTitlePane.java \
! javax/swing/plaf/basic/BasicInternalFrameUI.java \
! javax/swing/plaf/basic/BasicLabelUI.java \
! javax/swing/plaf/basic/BasicListUI.java \
! javax/swing/plaf/basic/BasicMenuUI.java \
! javax/swing/plaf/basic/BasicMenuBarUI.java \
! javax/swing/plaf/basic/BasicMenuItemUI.java \
! javax/swing/plaf/basic/BasicOptionPaneUI.java \
! javax/swing/plaf/basic/BasicPanelUI.java \
! javax/swing/plaf/basic/BasicPasswordFieldUI.java \
! javax/swing/plaf/basic/BasicPopupMenuUI.java \
! javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java \
! javax/swing/plaf/basic/BasicProgressBarUI.java \
! javax/swing/plaf/basic/BasicRootPaneUI.java \
! javax/swing/plaf/basic/BasicRadioButtonUI.java \
! javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java \
! javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java \
! javax/swing/plaf/basic/BasicScrollBarUI.java \
! javax/swing/plaf/basic/BasicScrollPaneUI.java \
! javax/swing/plaf/basic/BasicSeparatorUI.java \
! javax/swing/plaf/basic/BasicSliderUI.java \
! javax/swing/plaf/basic/BasicSpinnerUI.java \
! javax/swing/plaf/basic/BasicSplitPaneDivider.java \
! javax/swing/plaf/basic/BasicSplitPaneUI.java \
! javax/swing/plaf/basic/BasicTabbedPaneUI.java \
! javax/swing/plaf/basic/BasicTableUI.java \
! javax/swing/plaf/basic/BasicTableHeaderUI.java \
! javax/swing/plaf/basic/BasicTextAreaUI.java \
! javax/swing/plaf/basic/BasicTextFieldUI.java \
! javax/swing/plaf/basic/BasicTextPaneUI.java \
! javax/swing/plaf/basic/BasicTextUI.java \
! javax/swing/plaf/basic/BasicToggleButtonUI.java \
! javax/swing/plaf/basic/BasicToolBarSeparatorUI.java \
! javax/swing/plaf/basic/BasicToolBarUI.java \
! javax/swing/plaf/basic/BasicToolTipUI.java \
! javax/swing/plaf/basic/BasicTreeUI.java \
! javax/swing/plaf/basic/BasicViewportUI.java \
! javax/swing/plaf/basic/BasicLookAndFeel.java \
! javax/swing/plaf/basic/BasicBorders.java \
! javax/swing/plaf/basic/BasicIconFactory.java \
! javax/swing/plaf/basic/ComboPopup.java \
! javax/swing/plaf/BorderUIResource.java \
! javax/swing/plaf/UIResource.java \
! javax/swing/plaf/ButtonUI.java \
! javax/swing/plaf/ComponentUI.java \
! javax/swing/plaf/LabelUI.java \
! javax/swing/plaf/ListUI.java \
! javax/swing/plaf/OptionPaneUI.java \
! javax/swing/plaf/PanelUI.java \
! javax/swing/plaf/ScrollPaneUI.java \
! javax/swing/plaf/TabbedPaneUI.java \
! javax/swing/plaf/TextUI.java \
! javax/swing/plaf/TreeUI.java \
! javax/swing/plaf/ViewportUI.java \
! javax/swing/plaf/metal/DefaultMetalTheme.java \
! javax/swing/plaf/metal/MetalLookAndFeel.java \
! javax/swing/plaf/metal/MetalTheme.java \
! javax/swing/plaf/ColorUIResource.java \
! javax/swing/plaf/DimensionUIResource.java \
! javax/swing/plaf/FontUIResource.java \
! javax/swing/plaf/IconUIResource.java \
! javax/swing/plaf/InsetsUIResource.java \
! javax/swing/plaf/ActionMapUIResource.java \
! javax/swing/plaf/ColorChooserUI.java \
! javax/swing/plaf/ComboBoxUI.java \
! javax/swing/plaf/ComponentInputMapUIResource.java \
! javax/swing/plaf/DesktopIconUI.java \
! javax/swing/plaf/DesktopPaneUI.java \
! javax/swing/plaf/FileChooserUI.java \
! javax/swing/plaf/InputMapUIResource.java \
! javax/swing/plaf/InternalFrameUI.java \
! javax/swing/plaf/MenuBarUI.java \
! javax/swing/plaf/MenuItemUI.java \
! javax/swing/plaf/PopupMenuUI.java \
! javax/swing/plaf/ProgressBarUI.java \
! javax/swing/plaf/RootPaneUI.java \
! javax/swing/plaf/ScrollBarUI.java \
! javax/swing/plaf/SeparatorUI.java \
! javax/swing/plaf/SliderUI.java \
! javax/swing/plaf/SpinnerUI.java \
! javax/swing/plaf/SplitPaneUI.java \
! javax/swing/plaf/TableHeaderUI.java \
! javax/swing/plaf/TableUI.java \
! javax/swing/plaf/ToolBarUI.java \
! javax/swing/plaf/ToolTipUI.java \
! javax/swing/AbstractListModel.java \
! javax/swing/colorchooser/AbstractColorChooserPanel.java \
! javax/swing/colorchooser/ColorChooserComponentFactory.java \
! javax/swing/colorchooser/ColorSelectionModel.java \
! javax/swing/colorchooser/DefaultColorSelectionModel.java \
! javax/swing/colorchooser/DefaultPreviewPanel.java \
! javax/swing/colorchooser/DefaultSwatchChooserPanel.java \
! javax/swing/colorchooser/DefaultHSBChooserPanel.java \
! javax/swing/colorchooser/DefaultRGBChooserPanel.java \
! javax/swing/filechooser/FileFilter.java \
! javax/swing/filechooser/FileSystemView.java \
! javax/swing/filechooser/FileView.java \
! javax/swing/table/AbstractTableModel.java \
! javax/swing/table/DefaultTableColumnModel.java \
! javax/swing/table/DefaultTableModel.java \
! javax/swing/table/JTableHeader.java \
! javax/swing/table/TableCellEditor.java \
! javax/swing/table/TableCellRenderer.java \
! javax/swing/table/TableColumn.java \
! javax/swing/table/TableColumnModel.java \
! javax/swing/table/TableModel.java \
! javax/swing/table/DefaultTableCellRenderer.java \
! javax/swing/Action.java \
! javax/swing/BorderFactory.java \
! javax/swing/Box.java \
! javax/swing/BoxLayout.java \
! javax/swing/ButtonGroup.java \
! javax/swing/ButtonModel.java \
! javax/swing/ComponentInputMap.java \
! javax/swing/DefaultButtonModel.java \
! javax/swing/DefaultListModel.java \
! javax/swing/DefaultListSelectionModel.java \
! javax/swing/Icon.java \
! javax/swing/ImageIcon.java \
! javax/swing/InputMap.java \
! javax/swing/InternalFrameFocusTraversalPolicy.java \
! javax/swing/JApplet.java \
! javax/swing/JButton.java \
! javax/swing/JCheckBox.java \
! javax/swing/JComponent.java \
! javax/swing/JDialog.java \
! javax/swing/JEditorPane.java \
! javax/swing/JFormattedTextField.java \
! javax/swing/JFrame.java \
! javax/swing/JLabel.java \
! javax/swing/JLayeredPane.java \
! javax/swing/JList.java \
! javax/swing/JMenuBar.java \
! javax/swing/JOptionPane.java \
! javax/swing/JPanel.java \
! javax/swing/JRadioButton.java \
! javax/swing/JRootPane.java \
! javax/swing/JScrollBar.java \
! javax/swing/JScrollPane.java \
! javax/swing/JSpinner.java \
! javax/swing/JTabbedPane.java \
! javax/swing/JTextArea.java \
! javax/swing/JTextField.java \
! javax/swing/JToggleButton.java \
! javax/swing/JToolTip.java \
! javax/swing/JTree.java \
! javax/swing/JViewport.java \
! javax/swing/JWindow.java \
! javax/swing/KeyStroke.java \
! javax/swing/LayoutFocusTraversalPolicy.java \
! javax/swing/ListCellRenderer.java \
! javax/swing/ListModel.java \
! javax/swing/ListSelectionModel.java \
! javax/swing/LookAndFeel.java \
! javax/swing/Scrollable.java \
! javax/swing/SortingFocusTraversalPolicy.java \
! javax/swing/SpinnerDateModel.java \
! javax/swing/SpinnerListModel.java \
! javax/swing/SpinnerModel.java \
! javax/swing/SpinnerNumberModel.java \
! javax/swing/Spring.java \
! javax/swing/SpringLayout.java \
! javax/swing/SwingConstants.java \
! javax/swing/SwingUtilities.java \
! javax/swing/Timer.java \
! javax/swing/ToolTipManager.java \
! javax/swing/TransferHandler.java \
! javax/swing/UIDefaults.java \
! javax/swing/UIManager.java \
! javax/swing/UnsupportedLookAndFeelException.java \
! javax/swing/event/AncestorEvent.java \
! javax/swing/event/AncestorListener.java \
! javax/swing/event/ChangeEvent.java \
! javax/swing/event/ChangeListener.java \
! javax/swing/event/DocumentEvent.java \
! javax/swing/event/DocumentListener.java \
! javax/swing/event/HyperlinkEvent.java \
! javax/swing/event/HyperlinkListener.java \
! javax/swing/event/ListDataEvent.java \
! javax/swing/event/ListDataListener.java \
! javax/swing/event/ListSelectionEvent.java \
! javax/swing/event/ListSelectionListener.java \
! javax/swing/event/MenuEvent.java \
! javax/swing/event/UndoableEditEvent.java \
! javax/swing/event/UndoableEditListener.java \
! javax/swing/event/CaretEvent.java \
! javax/swing/event/CaretListener.java \
! javax/swing/event/CellEditorListener.java \
! javax/swing/event/EventListenerList.java \
! javax/swing/event/InternalFrameAdapter.java \
! javax/swing/event/InternalFrameEvent.java \
! javax/swing/event/InternalFrameListener.java \
! javax/swing/event/MenuDragMouseEvent.java \
! javax/swing/event/MenuDragMouseListener.java \
! javax/swing/event/MenuKeyEvent.java \
! javax/swing/event/MenuKeyListener.java \
! javax/swing/event/MenuListener.java \
! javax/swing/event/MouseInputAdapter.java \
! javax/swing/event/MouseInputListener.java \
! javax/swing/event/PopupMenuEvent.java \
! javax/swing/event/PopupMenuListener.java \
! javax/swing/event/SwingPropertyChangeSupport.java \
! javax/swing/event/TableColumnModelEvent.java \
! javax/swing/event/TableColumnModelListener.java \
! javax/swing/event/TableModelEvent.java \
! javax/swing/event/TableModelListener.java \
! javax/swing/event/TreeExpansionEvent.java \
! javax/swing/event/TreeExpansionListener.java \
! javax/swing/event/TreeModelEvent.java \
! javax/swing/event/TreeModelListener.java \
! javax/swing/event/TreeSelectionEvent.java \
! javax/swing/event/TreeSelectionListener.java \
! javax/swing/event/TreeWillExpandListener.java \
! javax/swing/ActionMap.java \
! javax/swing/text/AbstractDocument.java \
! javax/swing/text/AttributeSet.java \
! javax/swing/text/BadLocationException.java \
! javax/swing/text/Caret.java \
! javax/swing/text/ComponentView.java \
! javax/swing/text/DefaultCaret.java \
! javax/swing/text/DefaultEditorKit.java \
! javax/swing/text/DefaultHighlighter.java \
! javax/swing/text/DefaultStyledDocument.java \
! javax/swing/text/Document.java \
! javax/swing/text/DocumentFilter.java \
! javax/swing/text/EditorKit.java \
! javax/swing/text/Element.java \
! javax/swing/text/FieldView.java \
! javax/swing/text/GapContent.java \
! javax/swing/text/Highlighter.java \
! javax/swing/text/JTextComponent.java \
! javax/swing/text/Keymap.java \
! javax/swing/text/LayeredHighlighter.java \
! javax/swing/text/MutableAttributeSet.java \
! javax/swing/text/NavigationFilter.java \
! javax/swing/text/PasswordView.java \
! javax/swing/text/PlainDocument.java \
! javax/swing/text/PlainView.java \
! javax/swing/text/Position.java \
! javax/swing/text/Segment.java \
! javax/swing/text/SimpleAttributeSet.java \
! javax/swing/text/StringContent.java \
! javax/swing/text/Style.java \
! javax/swing/text/StyleConstants.java \
! javax/swing/text/StyleContext.java \
! javax/swing/text/StyledDocument.java \
! javax/swing/text/StyledEditorKit.java \
! javax/swing/text/TabableView.java \
! javax/swing/text/TabExpander.java \
! javax/swing/text/TabSet.java \
! javax/swing/text/TabStop.java \
! javax/swing/text/TextAction.java \
! javax/swing/text/Utilities.java \
! javax/swing/text/View.java \
! javax/swing/text/ViewFactory.java \
! javax/swing/text/html/HTML.java \
! javax/swing/text/html/parser/ParserDelegator.java \
! javax/swing/tree/TreeNode.java \
! javax/swing/tree/AbstractLayoutCache.java \
! javax/swing/tree/DefaultMutableTreeNode.java \
! javax/swing/tree/DefaultTreeCellEditor.java \
! javax/swing/tree/DefaultTreeCellRenderer.java \
! javax/swing/tree/DefaultTreeModel.java \
! javax/swing/tree/DefaultTreeSelectionModel.java \
! javax/swing/tree/ExpandVetoException.java \
! javax/swing/tree/FixedHeightLayoutCache.java \
! javax/swing/tree/MutableTreeNode.java \
! javax/swing/tree/RowMapper.java \
! javax/swing/tree/TreeCellEditor.java \
! javax/swing/tree/TreeCellRenderer.java \
! javax/swing/tree/TreeModel.java \
! javax/swing/tree/TreePath.java \
! javax/swing/tree/TreeSelectionModel.java \
! javax/swing/tree/VariableHeightLayoutCache.java \
! javax/swing/undo/UndoableEdit.java \
! javax/swing/undo/AbstractUndoableEdit.java \
! javax/swing/undo/CannotRedoException.java \
! javax/swing/undo/CannotUndoException.java \
! javax/swing/undo/CompoundEdit.java \
! javax/swing/undo/StateEdit.java \
! javax/swing/undo/StateEditable.java \
! javax/swing/undo/UndoManager.java \
! javax/swing/undo/UndoableEditSupport.java \
! javax/swing/BoundedRangeModel.java \
! javax/swing/CellEditor.java \
! javax/swing/ComboBoxEditor.java \
! javax/swing/ComboBoxModel.java \
! javax/swing/DefaultBoundedRangeModel.java \
! javax/swing/DesktopManager.java \
! javax/swing/InputVerifier.java \
! javax/swing/JInternalFrame.java \
! javax/swing/JTable.java \
! javax/swing/MenuElement.java \
! javax/swing/MenuSelectionManager.java \
! javax/swing/MutableComboBoxModel.java \
! javax/swing/Renderer.java \
! javax/swing/RootPaneContainer.java \
! javax/swing/ScrollPaneConstants.java \
! javax/swing/SingleSelectionModel.java \
! javax/swing/SizeRequirements.java \
! javax/swing/SizeSequence.java \
! javax/swing/WindowConstants.java \
! javax/swing/AbstractCellEditor.java \
! javax/swing/CellRendererPane.java \
! javax/swing/DebugGraphics.java \
! javax/swing/DefaultCellEditor.java \
! javax/swing/DefaultComboBoxModel.java \
! javax/swing/DefaultDesktopManager.java \
! javax/swing/DefaultFocusManager.java \
! javax/swing/DefaultListCellRenderer.java \
! javax/swing/DefaultSingleSelectionModel.java \
! javax/swing/FocusManager.java \
! javax/swing/JCheckBoxMenuItem.java \
! javax/swing/JColorChooser.java \
! javax/swing/JComboBox.java \
! javax/swing/JDesktopPane.java \
! javax/swing/JFileChooser.java \
! javax/swing/JMenu.java \
! javax/swing/JMenuItem.java \
! javax/swing/JPasswordField.java \
! javax/swing/JPopupMenu.java \
! javax/swing/JProgressBar.java \
! javax/swing/JRadioButtonMenuItem.java \
! javax/swing/JSeparator.java \
! javax/swing/JSlider.java \
! javax/swing/JSplitPane.java \
! javax/swing/JTextPane.java \
! javax/swing/JToolBar.java \
! javax/swing/OverlayLayout.java \
! javax/swing/Popup.java \
! javax/swing/PopupFactory.java \
! javax/swing/ProgressMonitor.java \
! javax/swing/ProgressMonitorInputStream.java \
! javax/swing/RepaintManager.java \
! javax/swing/ScrollPaneLayout.java \
! javax/swing/ViewportLayout.java
! 
! rmi_java_source_files = \
! java/rmi/activation/Activatable.java \
! java/rmi/activation/ActivateFailedException.java \
! java/rmi/activation/ActivationDesc.java	\
! java/rmi/activation/ActivationException.java \
! java/rmi/activation/ActivationGroup.java \
! java/rmi/activation/ActivationGroupDesc.java \
! java/rmi/activation/ActivationGroupID.java \
! java/rmi/activation/ActivationID.java \
! java/rmi/activation/ActivationInstantiator.java	\
! java/rmi/activation/ActivationMonitor.java \
! java/rmi/activation/ActivationSystem.java \
! java/rmi/activation/Activator.java \
! java/rmi/activation/UnknownGroupException.java \
! java/rmi/activation/UnknownObjectException.java	\
! java/rmi/AccessException.java \
! java/rmi/AlreadyBoundException.java \
! java/rmi/ConnectException.java \
! java/rmi/ConnectIOException.java \
! java/rmi/MarshalException.java \
! java/rmi/MarshalledObject.java \
! java/rmi/Naming.java \
! java/rmi/NoSuchObjectException.java \
! java/rmi/NotBoundException.java	\
! java/rmi/RMISecurityException.java \
! java/rmi/RMISecurityManager.java \
! java/rmi/Remote.java \
! java/rmi/RemoteException.java \
! java/rmi/ServerError.java \
! java/rmi/ServerException.java \
! java/rmi/ServerRuntimeException.java \
! java/rmi/StubNotFoundException.java \
! java/rmi/UnexpectedException.java \
! java/rmi/UnknownHostException.java \
! java/rmi/UnmarshalException.java \
! java/rmi/dgc/DGC.java \
! java/rmi/dgc/Lease.java	\
! java/rmi/dgc/VMID.java \
! java/rmi/registry/LocateRegistry.java \
! java/rmi/registry/Registry.java	\
! java/rmi/registry/RegistryHandler.java \
! java/rmi/server/ExportException.java \
! java/rmi/server/LoaderHandler.java \
! java/rmi/server/LogStream.java \
! java/rmi/server/ObjID.java \
! java/rmi/server/Operation.java \
! java/rmi/server/RMIClassLoader.java \
! java/rmi/server/RMIClassLoaderSpi.java \
! java/rmi/server/RMIClientSocketFactory.java \
! java/rmi/server/RMIFailureHandler.java \
! java/rmi/server/RMIServerSocketFactory.java \
! java/rmi/server/RMISocketFactory.java \
! java/rmi/server/RemoteCall.java	\
! java/rmi/server/RemoteObject.java \
! java/rmi/server/RemoteRef.java \
! java/rmi/server/RemoteServer.java \
! java/rmi/server/RemoteStub.java	\
! java/rmi/server/ServerCloneException.java \
! java/rmi/server/ServerNotActiveException.java \
! java/rmi/server/ServerRef.java \
! java/rmi/server/Skeleton.java \
! java/rmi/server/SkeletonMismatchException.java \
! java/rmi/server/SkeletonNotFoundException.java \
! java/rmi/server/SocketSecurityException.java \
! java/rmi/server/UID.java \
! java/rmi/server/UnicastRemoteObject.java \
! java/rmi/server/Unreferenced.java \
! gnu/java/rmi/RMIMarshalledObjectInputStream.java \
! gnu/java/rmi/RMIMarshalledObjectOutputStream.java \
! gnu/java/rmi/dgc/DGCImpl.java \
! gnu/java/rmi/dgc/DGCImpl_Skel.java \
! gnu/java/rmi/dgc/DGCImpl_Stub.java \
! gnu/java/rmi/registry/RegistryImpl.java	\
! gnu/java/rmi/registry/RegistryImpl_Skel.java \
! gnu/java/rmi/registry/RegistryImpl_Stub.java \
! gnu/java/rmi/rmic/Compile_gcj.java \
! gnu/java/rmi/rmic/Compile_jikes.java \
! gnu/java/rmi/rmic/Compile_kjc.java \
! gnu/java/rmi/rmic/Compiler.java	\
! gnu/java/rmi/rmic/CompilerProcess.java \
! gnu/java/rmi/rmic/RMIC.java \
! gnu/java/rmi/rmic/RMICException.java \
! gnu/java/rmi/rmic/TabbedWriter.java \
! gnu/java/rmi/server/ConnectionRunnerPool.java \
! gnu/java/rmi/server/ProtocolConstants.java \
! gnu/java/rmi/server/RMIDefaultSocketFactory.java \
! gnu/java/rmi/server/RMIHashes.java \
! gnu/java/rmi/server/RMIIncomingThread.java \
! gnu/java/rmi/server/RMIObjectInputStream.java \
! gnu/java/rmi/server/RMIObjectOutputStream.java \
! gnu/java/rmi/server/RMIVoidValue.java \
! gnu/java/rmi/server/UnicastConnection.java \
! gnu/java/rmi/server/UnicastConnectionManager.java \
! gnu/java/rmi/server/UnicastRef.java \
! gnu/java/rmi/server/UnicastRemoteCall.java \
! gnu/java/rmi/server/UnicastRemoteStub.java \
! gnu/java/rmi/server/UnicastServer.java \
! gnu/java/rmi/server/UnicastServerRef.java
! 
! javax_imageio_source_files = \
! javax/imageio/ImageWriteParam.java \
! javax/imageio/ImageReader.java \
! javax/imageio/ImageWriter.java \
! javax/imageio/IIOException.java	\
! javax/imageio/IIOParamController.java \
! javax/imageio/ImageReadParam.java \
! javax/imageio/IIOParam.java \
! javax/imageio/spi/IIORegistry.java \
! javax/imageio/spi/ImageWriterSpi.java \
! javax/imageio/spi/ImageOutputStreamSpi.java \
! javax/imageio/spi/ServiceRegistry.java \
! javax/imageio/spi/ImageTranscoderSpi.java \
! javax/imageio/spi/ImageReaderSpi.java \
! javax/imageio/spi/IIOServiceProvider.java \
! javax/imageio/spi/ImageReaderWriterSpi.java \
! javax/imageio/spi/ImageInputStreamSpi.java \
! javax/imageio/spi/RegisterableService.java \
! javax/imageio/metadata/IIOAttr.java \
! javax/imageio/metadata/IIONamedNodeMap.java \
! javax/imageio/metadata/IIONodeList.java \
! javax/imageio/metadata/IIOMetadataFormatImpl.java \
! javax/imageio/metadata/IIOInvalidTreeException.java \
! javax/imageio/metadata/IIOMetadataFormat.java \
! javax/imageio/metadata/IIOMetadataController.java \
! javax/imageio/metadata/IIOMetadataNode.java \
! javax/imageio/metadata/IIOMetadata.java	\
! javax/imageio/stream/FileImageOutputStream.java	\
! javax/imageio/stream/ImageInputStream.java \
! javax/imageio/stream/IIOByteBuffer.java	\
! javax/imageio/stream/FileCacheImageInputStream.java \
! javax/imageio/stream/ImageInputStreamImpl.java \
! javax/imageio/stream/ImageOutputStreamImpl.java	\
! javax/imageio/stream/MemoryCacheImageInputStream.java \
! javax/imageio/stream/FileCacheImageOutputStream.java \
! javax/imageio/stream/ImageOutputStream.java \
! javax/imageio/stream/MemoryCacheImageOutputStream.java \
! javax/imageio/stream/FileImageInputStream.java \
! javax/imageio/event/IIOReadProgressListener.java \
! javax/imageio/event/IIOWriteWarningListener.java \
! javax/imageio/event/IIOReadWarningListener.java	\
! javax/imageio/event/IIOReadUpdateListener.java \
! javax/imageio/event/IIOWriteProgressListener.java \
! javax/imageio/ImageTranscoder.java \
! javax/imageio/ImageTypeSpecifier.java \
! javax/imageio/ImageIO.java \
! javax/imageio/IIOImage.java
! 
! javax_xml_source_files = \
! javax/xml/xpath/XPathConstants.java \
! javax/xml/xpath/XPathFunction.java \
! javax/xml/xpath/XPathVariableResolver.java \
! javax/xml/xpath/XPathExpressionException.java \
! javax/xml/xpath/XPathFunctionResolver.java \
! javax/xml/xpath/XPath.java \
! javax/xml/xpath/XPathFactoryConfigurationException.java	\
! javax/xml/xpath/XPathFactory.java \
! javax/xml/xpath/XPathException.java \
! javax/xml/xpath/XPathExpression.java \
! javax/xml/xpath/XPathFunctionException.java \
! javax/xml/validation/ValidatorHandler.java \
! javax/xml/validation/Validator.java \
! javax/xml/validation/TypeInfoProvider.java \
! javax/xml/validation/SchemaFactory.java	\
! javax/xml/validation/Schema.java \
! javax/xml/parsers/SAXParserFactory.java	\
! javax/xml/parsers/FactoryConfigurationError.java \
! javax/xml/parsers/SAXParser.java \
! javax/xml/parsers/DocumentBuilderFactory.java \
! javax/xml/parsers/ParserConfigurationException.java \
! javax/xml/parsers/DocumentBuilder.java \
! javax/xml/datatype/DatatypeFactory.java	\
! javax/xml/datatype/XMLGregorianCalendar.java \
! javax/xml/datatype/Duration.java \
! javax/xml/datatype/DatatypeConfigurationException.java \
! javax/xml/datatype/DatatypeConstants.java \
! javax/xml/XMLConstants.java \
! javax/xml/namespace/NamespaceContext.java \
! javax/xml/namespace/QName.java \
! javax/xml/transform/TransformerException.java \
! javax/xml/transform/TransformerFactoryConfigurationError.java \
! javax/xml/transform/sax/SAXResult.java \
! javax/xml/transform/sax/TransformerHandler.java	\
! javax/xml/transform/sax/SAXTransformerFactory.java \
! javax/xml/transform/sax/SAXSource.java \
! javax/xml/transform/sax/TemplatesHandler.java \
! javax/xml/transform/OutputKeys.java \
! javax/xml/transform/stream/StreamResult.java \
! javax/xml/transform/stream/StreamSource.java \
! javax/xml/transform/Source.java	\
! javax/xml/transform/SourceLocator.java \
! javax/xml/transform/ErrorListener.java \
! javax/xml/transform/TransformerConfigurationException.java \
! javax/xml/transform/Templates.java \
! javax/xml/transform/Result.java	\
! javax/xml/transform/URIResolver.java \
! javax/xml/transform/dom/DOMSource.java \
! javax/xml/transform/dom/DOMLocator.java	\
! javax/xml/transform/dom/DOMResult.java \
! javax/xml/transform/Transformer.java \
! javax/xml/transform/TransformerFactory.java
! 
! javax_source_files = \
! javax/net/VanillaSocketFactory.java \
! javax/net/ssl/TrustManagerFactorySpi.java \
! javax/net/ssl/SSLKeyException.java \
! javax/net/ssl/TrustManager.java	\
! javax/net/ssl/SSLServerSocket.java \
! javax/net/ssl/TrustManagerFactory.java \
! javax/net/ssl/KeyManager.java \
! javax/net/ssl/SSLSocketFactory.java \
! javax/net/ssl/SSLPermission.java \
! javax/net/ssl/SSLContext.java \
! javax/net/ssl/TrivialHostnameVerifier.java \
! javax/net/ssl/X509KeyManager.java \
! javax/net/ssl/SSLServerSocketFactory.java \
! javax/net/ssl/SSLSessionBindingListener.java \
! javax/net/ssl/SSLSessionContext.java \
! javax/net/ssl/KeyManagerFactory.java \
! javax/net/ssl/SSLProtocolException.java	\
! javax/net/ssl/SSLSocket.java \
! javax/net/ssl/HostnameVerifier.java \
! javax/net/ssl/HandshakeCompletedListener.java \
! javax/net/ssl/HttpsURLConnection.java \
! javax/net/ssl/KeyManagerFactorySpi.java	\
! javax/net/ssl/SSLHandshakeException.java \
! javax/net/ssl/SSLPeerUnverifiedException.java \
! javax/net/ssl/X509TrustManager.java \
! javax/net/ssl/SSLSession.java \
! javax/net/ssl/SSLContextSpi.java \
! javax/net/ssl/HandshakeCompletedEvent.java \
! javax/net/ssl/SSLSessionBindingEvent.java \
! javax/net/ssl/SSLException.java	\
! javax/net/ssl/ManagerFactoryParameters.java \
! javax/net/SocketFactory.java \
! javax/net/VanillaServerSocketFactory.java \
! javax/net/ServerSocketFactory.java \
! javax/print/attribute/HashPrintServiceAttributeSet.java	\
! javax/print/attribute/Attribute.java \
! javax/print/attribute/DocAttributeSet.java \
! javax/print/attribute/PrintRequestAttributeSet.java \
! javax/print/attribute/standard/Chromaticity.java \
! javax/print/attribute/standard/Destination.java \
! javax/print/attribute/standard/MediaPrintableArea.java \
! javax/print/attribute/standard/MediaSize.java \
! javax/print/attribute/standard/NumberOfInterveningJobs.java \
! javax/print/attribute/standard/PrinterMakeAndModel.java	\
! javax/print/attribute/standard/PrinterStateReason.java \
! javax/print/attribute/standard/JobImpressions.java \
! javax/print/attribute/standard/JobHoldUntil.java \
! javax/print/attribute/standard/JobKOctetsSupported.java	\
! javax/print/attribute/standard/JobPriority.java	\
! javax/print/attribute/standard/QueuedJobCount.java \
! javax/print/attribute/standard/JobOriginatingUserName.java \
! javax/print/attribute/standard/PrinterName.java	\
! javax/print/attribute/standard/PDLOverrideSupported.java \
! javax/print/attribute/standard/PrinterStateReasons.java	\
! javax/print/attribute/standard/JobMediaSheets.java \
! javax/print/attribute/standard/JobKOctets.java \
! javax/print/attribute/standard/MultipleDocumentHandling.java \
! javax/print/attribute/standard/PrinterMessageFromOperator.java \
! javax/print/attribute/standard/Severity.java \
! javax/print/attribute/standard/ReferenceUriSchemesSupported.java \
! javax/print/attribute/standard/DocumentName.java \
! javax/print/attribute/standard/PrinterMoreInfo.java \
! javax/print/attribute/standard/JobMessageFromOperator.java \
! javax/print/attribute/standard/JobStateReasons.java \
! javax/print/attribute/standard/PrinterIsAcceptingJobs.java \
! javax/print/attribute/standard/DateTimeAtProcessing.java \
! javax/print/attribute/standard/PagesPerMinute.java \
! javax/print/attribute/standard/PrinterResolution.java \
! javax/print/attribute/standard/JobMediaSheetsSupported.java \
! javax/print/attribute/standard/NumberUpSupported.java \
! javax/print/attribute/standard/Finishings.java \
! javax/print/attribute/standard/DateTimeAtCompleted.java	\
! javax/print/attribute/standard/NumberOfDocuments.java \
! javax/print/attribute/standard/PrinterInfo.java	\
! javax/print/attribute/standard/PrintQuality.java \
! javax/print/attribute/standard/JobSheets.java \
! javax/print/attribute/standard/Media.java \
! javax/print/attribute/standard/Fidelity.java \
! javax/print/attribute/standard/PrinterLocation.java \
! javax/print/attribute/standard/PrinterMoreInfoManufacturer.java	\
! javax/print/attribute/standard/OrientationRequested.java \
! javax/print/attribute/standard/JobState.java \
! javax/print/attribute/standard/DateTimeAtCreation.java \
! javax/print/attribute/standard/PresentationDirection.java \
! javax/print/attribute/standard/JobName.java \
! javax/print/attribute/standard/PagesPerMinuteColor.java	\
! javax/print/attribute/standard/CopiesSupported.java \
! javax/print/attribute/standard/PrinterURI.java \
! javax/print/attribute/standard/PageRanges.java \
! javax/print/attribute/standard/RequestingUserName.java \
! javax/print/attribute/standard/JobPrioritySupported.java \
! javax/print/attribute/standard/JobMediaSheetsCompleted.java \
! javax/print/attribute/standard/JobKOctetsProcessed.java	\
! javax/print/attribute/standard/JobImpressionsCompleted.java \
! javax/print/attribute/standard/Compression.java	\
! javax/print/attribute/standard/JobImpressionsSupported.java \
! javax/print/attribute/standard/Sides.java \
! javax/print/attribute/standard/JobStateReason.java \
! javax/print/attribute/standard/SheetCollate.java \
! javax/print/attribute/standard/Copies.java \
! javax/print/attribute/standard/MediaSizeName.java \
! javax/print/attribute/standard/OutputDeviceAssigned.java \
! javax/print/attribute/standard/PrinterState.java \
! javax/print/attribute/standard/NumberUp.java \
! javax/print/attribute/standard/ColorSupported.java \
! javax/print/attribute/HashAttributeSet.java \
! javax/print/attribute/SetOfIntegerSyntax.java \
! javax/print/attribute/HashDocAttributeSet.java \
! javax/print/attribute/PrintRequestAttribute.java \
! javax/print/attribute/DateTimeSyntax.java \
! javax/print/attribute/PrintServiceAttribute.java \
! javax/print/attribute/UnmodifiableSetException.java \
! javax/print/attribute/HashPrintJobAttributeSet.java \
! javax/print/attribute/PrintJobAttribute.java \
! javax/print/attribute/AttributeSet.java	\
! javax/print/attribute/ResolutionSyntax.java \
! javax/print/attribute/URISyntax.java \
! javax/print/attribute/AttributeSetUtilities.java \
! javax/print/attribute/HashPrintRequestAttributeSet.java	\
! javax/print/attribute/TextSyntax.java \
! javax/print/attribute/PrintJobAttributeSet.java	\
! javax/print/attribute/SupportedValuesAttribute.java \
! javax/print/attribute/EnumSyntax.java \
! javax/print/attribute/DocAttribute.java	\
! javax/print/attribute/Size2DSyntax.java	\
! javax/print/attribute/IntegerSyntax.java \
! javax/print/attribute/PrintServiceAttributeSet.java \
! javax/print/PrintService.java \
! javax/print/DocFlavor.java \
! javax/print/DocPrintJob.java \
! javax/print/event/PrintEvent.java \
! javax/print/event/PrintJobAdapter.java \
! javax/print/event/PrintServiceAttributeEvent.java \
! javax/print/event/PrintJobAttributeEvent.java \
! javax/print/event/PrintServiceAttributeListener.java \
! javax/print/event/PrintJobEvent.java \
! javax/print/event/PrintJobListener.java	\
! javax/print/event/PrintJobAttributeListener.java \
! javax/print/PrintServiceLookup.java \
! javax/print/URIException.java \
! javax/print/StreamPrintService.java \
! javax/print/MultiDoc.java \
! javax/print/FlavorException.java \
! javax/print/Doc.java \
! javax/print/MultiDocPrintJob.java \
! javax/print/CancelablePrintJob.java \
! javax/print/MultiDocPrintService.java \
! javax/print/ServiceUIFactory.java \
! javax/print/AttributeException.java \
! javax/print/PrintException.java	\
! javax/naming/ServiceUnavailableException.java \
! javax/naming/directory/Attribute.java \
! javax/naming/directory/SchemaViolationException.java \
! javax/naming/directory/InitialDirContext.java \
! javax/naming/directory/BasicAttribute.java \
! javax/naming/directory/NoSuchAttributeException.java \
! javax/naming/directory/InvalidAttributesException.java \
! javax/naming/directory/InvalidAttributeValueException.java \
! javax/naming/directory/BasicAttributes.java \
! javax/naming/directory/AttributeModificationException.java \
! javax/naming/directory/InvalidAttributeIdentifierException.java	\
! javax/naming/directory/DirContext.java \
! javax/naming/directory/Attributes.java \
! javax/naming/directory/InvalidSearchControlsException.java \
! javax/naming/directory/SearchControls.java \
! javax/naming/directory/AttributeInUseException.java \
! javax/naming/directory/InvalidSearchFilterException.java \
! javax/naming/directory/ModificationItem.java \
! javax/naming/directory/SearchResult.java \
! javax/naming/Binding.java \
! javax/naming/ContextNotEmptyException.java \
! javax/naming/Referenceable.java	\
! javax/naming/InterruptedNamingException.java \
! javax/naming/CommunicationException.java \
! javax/naming/LinkException.java	\
! javax/naming/BinaryRefAddr.java	\
! javax/naming/LinkLoopException.java \
! javax/naming/AuthenticationException.java \
! javax/naming/NameAlreadyBoundException.java \
! javax/naming/MalformedLinkException.java \
! javax/naming/NotContextException.java \
! javax/naming/spi/DirStateFactory.java \
! javax/naming/spi/ResolveResult.java \
! javax/naming/spi/ObjectFactoryBuilder.java \
! javax/naming/spi/DirObjectFactory.java \
! javax/naming/spi/DirectoryManager.java \
! javax/naming/spi/InitialContextFactoryBuilder.java \
! javax/naming/spi/ObjectFactory.java \
! javax/naming/spi/Resolver.java \
! javax/naming/spi/StateFactory.java \
! javax/naming/spi/InitialContextFactory.java \
! javax/naming/spi/NamingManager.java \
! javax/naming/InvalidNameException.java \
! javax/naming/NamingEnumeration.java \
! javax/naming/LinkRef.java \
! javax/naming/event/NamingListener.java \
! javax/naming/event/NamingEvent.java \
! javax/naming/event/NamespaceChangeListener.java	\
! javax/naming/event/ObjectChangeListener.java \
! javax/naming/event/EventContext.java \
! javax/naming/event/NamingExceptionEvent.java \
! javax/naming/event/EventDirContext.java	\
! javax/naming/NamingException.java \
! javax/naming/CannotProceedException.java \
! javax/naming/PartialResultException.java \
! javax/naming/TimeLimitExceededException.java \
! javax/naming/NoPermissionException.java	\
! javax/naming/CompoundName.java \
! javax/naming/SizeLimitExceededException.java \
! javax/naming/NoInitialContextException.java \
! javax/naming/NameNotFoundException.java	\
! javax/naming/InitialContext.java \
! javax/naming/NamingSecurityException.java \
! javax/naming/Context.java \
! javax/naming/ConfigurationException.java \
! javax/naming/InsufficientResourcesException.java \
! javax/naming/AuthenticationNotSupportedException.java \
! javax/naming/StringRefAddr.java	\
! javax/naming/ldap/InitialLdapContext.java \
! javax/naming/ldap/ExtendedRequest.java \
! javax/naming/ldap/Control.java \
! javax/naming/ldap/UnsolicitedNotificationListener.java \
! javax/naming/ldap/LdapReferralException.java \
! javax/naming/ldap/UnsolicitedNotificationEvent.java \
! javax/naming/ldap/HasControls.java \
! javax/naming/ldap/LdapContext.java \
! javax/naming/ldap/ExtendedResponse.java	\
! javax/naming/ldap/UnsolicitedNotification.java \
! javax/naming/ldap/ControlFactory.java \
! javax/naming/OperationNotSupportedException.java \
! javax/naming/ReferralException.java \
! javax/naming/LimitExceededException.java \
! javax/naming/Reference.java \
! javax/naming/NameParser.java \
! javax/naming/NameClassPair.java	\
! javax/naming/RefAddr.java \
! javax/naming/CompositeName.java	\
! javax/naming/Name.java \
! javax/security/cert/CertificateNotYetValidException.java \
! javax/security/cert/Certificate.java \
! javax/security/cert/X509Certificate.java \
! javax/security/cert/X509CertBridge.java	\
! javax/security/cert/CertificateEncodingException.java \
! javax/security/cert/CertificateExpiredException.java \
! javax/security/cert/CertificateException.java \
! javax/security/cert/CertificateParsingException.java \
! javax/security/auth/Destroyable.java \
! javax/security/auth/x500/X500PrivateCredential.java \
! javax/security/auth/x500/X500Principal.java \
! javax/security/auth/spi/LoginModule.java \
! javax/security/auth/DestroyFailedException.java	\
! javax/security/auth/SubjectDomainCombiner.java \
! javax/security/auth/AuthPermission.java	\
! javax/security/auth/login/CredentialExpiredException.java \
! javax/security/auth/login/NullConfiguration.java \
! javax/security/auth/login/AccountExpiredException.java \
! javax/security/auth/login/LoginException.java \
! javax/security/auth/login/AppConfigurationEntry.java \
! javax/security/auth/login/Configuration.java \
! javax/security/auth/login/LoginContext.java \
! javax/security/auth/login/FailedLoginException.java \
! javax/security/auth/PrivateCredentialPermission.java \
! javax/security/auth/Subject.java \
! javax/security/auth/Policy.java	\
! javax/security/auth/Refreshable.java \
! javax/security/auth/callback/TextInputCallback.java \
! javax/security/auth/callback/LanguageCallback.java \
! javax/security/auth/callback/TextOutputCallback.java \
! javax/security/auth/callback/UnsupportedCallbackException.java \
! javax/security/auth/callback/Callback.java \
! javax/security/auth/callback/ConfirmationCallback.java \
! javax/security/auth/callback/ChoiceCallback.java \
! javax/security/auth/callback/NameCallback.java \
! javax/security/auth/callback/PasswordCallback.java \
! javax/security/auth/callback/CallbackHandler.java \
! javax/security/auth/RefreshFailedException.java	\
! javax/security/sasl/RealmCallback.java \
! javax/security/sasl/SaslClient.java \
! javax/security/sasl/RealmChoiceCallback.java \
! javax/security/sasl/AuthenticationException.java \
! javax/security/sasl/Sasl.java \
! javax/security/sasl/SaslClientFactory.java \
! javax/security/sasl/AuthorizeCallback.java \
! javax/security/sasl/SaslServerFactory.java \
! javax/security/sasl/SaslException.java \
! javax/security/sasl/SaslServer.java \
! javax/transaction/TransactionRolledbackException.java \
! javax/transaction/Synchronization.java \
! javax/transaction/TransactionRequiredException.java \
! javax/transaction/RollbackException.java \
! javax/transaction/Status.java \
! javax/transaction/HeuristicMixedException.java \
! javax/transaction/HeuristicRollbackException.java \
! javax/transaction/SystemException.java \
! javax/transaction/UserTransaction.java \
! javax/transaction/NotSupportedException.java \
! javax/transaction/HeuristicCommitException.java	\
! javax/transaction/Transaction.java \
! javax/transaction/TransactionManager.java \
! javax/transaction/InvalidTransactionException.java \
! javax/transaction/xa/XAException.java \
! javax/transaction/xa/XAResource.java \
! javax/transaction/xa/Xid.java \
! javax/accessibility/AccessibleValue.java \
! javax/accessibility/AccessibleBundle.java \
! javax/accessibility/AccessibleContext.java \
! javax/accessibility/AccessibleRelationSet.java \
! javax/accessibility/Accessible.java \
! javax/accessibility/AccessibleTableModelChange.java \
! javax/accessibility/AccessibleState.java \
! javax/accessibility/AccessibleIcon.java	\
! javax/accessibility/AccessibleHypertext.java \
! javax/accessibility/AccessibleComponent.java \
! javax/accessibility/AccessibleText.java	\
! javax/accessibility/AccessibleRole.java	\
! javax/accessibility/AccessibleEditableText.java	\
! javax/accessibility/AccessibleRelation.java \
! javax/accessibility/AccessibleTable.java \
! javax/accessibility/AccessibleStateSet.java \
! javax/accessibility/AccessibleSelection.java \
! javax/accessibility/AccessibleExtendedTable.java \
! javax/accessibility/AccessibleResourceBundle.java \
! javax/accessibility/AccessibleExtendedComponent.java \
! javax/accessibility/AccessibleHyperlink.java \
! javax/accessibility/AccessibleKeyBinding.java \
! javax/accessibility/AccessibleAction.java \
! javax/sql/ConnectionEventListener.java \
! javax/sql/RowSetEvent.java \
! javax/sql/ConnectionPoolDataSource.java	\
! javax/sql/RowSetWriter.java \
! javax/sql/XAConnection.java \
! javax/sql/RowSet.java \
! javax/sql/DataSource.java \
! javax/sql/RowSetInternal.java \
! javax/sql/RowSetReader.java \
! javax/sql/RowSetMetaData.java \
! javax/sql/PooledConnection.java	\
! javax/sql/XADataSource.java \
! javax/sql/RowSetListener.java \
! javax/sql/ConnectionEvent.java \
! javax/crypto/Cipher.java \
! javax/crypto/IllegalBlockSizeException.java \
! javax/crypto/MacSpi.java \
! javax/crypto/SecretKeyFactorySpi.java \
! javax/crypto/ShortBufferException.java \
! javax/crypto/KeyAgreement.java \
! javax/crypto/ExemptionMechanism.java \
! javax/crypto/CipherOutputStream.java \
! javax/crypto/SealedObject.java \
! javax/crypto/NullCipher.java \
! javax/crypto/KeyAgreementSpi.java \
! javax/crypto/SecretKeyFactory.java \
! javax/crypto/SecretKey.java \
! javax/crypto/NullCipherImpl.java \
! javax/crypto/spec/DESKeySpec.java \
! javax/crypto/spec/DHPrivateKeySpec.java	\
! javax/crypto/spec/DHParameterSpec.java \
! javax/crypto/spec/PBEParameterSpec.java	\
! javax/crypto/spec/DESedeKeySpec.java \
! javax/crypto/spec/DHGenParameterSpec.java \
! javax/crypto/spec/DHPublicKeySpec.java \
! javax/crypto/spec/PBEKeySpec.java \
! javax/crypto/spec/RC5ParameterSpec.java	\
! javax/crypto/spec/RC2ParameterSpec.java	\
! javax/crypto/spec/IvParameterSpec.java \
! javax/crypto/spec/SecretKeySpec.java \
! javax/crypto/interfaces/DHPublicKey.java \
! javax/crypto/interfaces/DHKey.java \
! javax/crypto/interfaces/DHPrivateKey.java \
! javax/crypto/interfaces/PBEKey.java \
! javax/crypto/NoSuchPaddingException.java \
! javax/crypto/KeyGeneratorSpi.java \
! javax/crypto/BadPaddingException.java \
! javax/crypto/CipherSpi.java \
! javax/crypto/KeyGenerator.java \
! javax/crypto/CipherInputStream.java \
! javax/crypto/ExemptionMechanismException.java \
! javax/crypto/ExemptionMechanismSpi.java	\
! javax/crypto/EncryptedPrivateKeyInfo.java \
! javax/crypto/Mac.java
! 
! org_source_files = \
! org/ietf/jgss/GSSManager.java \
! org/ietf/jgss/GSSException.java	\
! org/ietf/jgss/MessageProp.java \
! org/ietf/jgss/GSSName.java \
! org/ietf/jgss/GSSContext.java \
! org/ietf/jgss/Oid.java \
! org/ietf/jgss/GSSCredential.java \
! org/ietf/jgss/ChannelBinding.java
! 
! gnu_xml_source_files = \
! gnu/xml/xpath/EqualityExpr.java	\
! gnu/xml/xpath/NumberFunction.java \
! gnu/xml/xpath/StringLengthFunction.java	\
! gnu/xml/xpath/NameFunction.java	\
! gnu/xml/xpath/SumFunction.java \
! gnu/xml/xpath/Pattern.java \
! gnu/xml/xpath/StringFunction.java \
! gnu/xml/xpath/NegativeExpr.java	\
! gnu/xml/xpath/UnionExpr.java \
! gnu/xml/xpath/SubstringFunction.java \
! gnu/xml/xpath/Expr.java	\
! gnu/xml/xpath/XPathFactoryImpl.java \
! gnu/xml/xpath/NormalizeSpaceFunction.java \
! gnu/xml/xpath/Constant.java \
! gnu/xml/xpath/Predicate.java \
! gnu/xml/xpath/Path.java	\
! gnu/xml/xpath/OrExpr.java \
! gnu/xml/xpath/LangFunction.java	\
! gnu/xml/xpath/StartsWithFunction.java \
! gnu/xml/xpath/SubstringAfterFunction.java \
! gnu/xml/xpath/FloorFunction.java \
! gnu/xml/xpath/NotFunction.java \
! gnu/xml/xpath/Root.java	\
! gnu/xml/xpath/PositionFunction.java \
! gnu/xml/xpath/VariableReference.java \
! gnu/xml/xpath/DocumentOrderComparator.java \
! gnu/xml/xpath/LocalNameFunction.java \
! gnu/xml/xpath/NamespaceUriFunction.java	\
! gnu/xml/xpath/TranslateFunction.java \
! gnu/xml/xpath/FalseFunction.java \
! gnu/xml/xpath/AndExpr.java \
! gnu/xml/xpath/XPathParser.java \
! gnu/xml/xpath/NamespaceTest.java \
! gnu/xml/xpath/ConcatFunction.java \
! gnu/xml/xpath/NameTest.java \
! gnu/xml/xpath/CountFunction.java \
! gnu/xml/xpath/IdFunction.java \
! gnu/xml/xpath/LastFunction.java	\
! gnu/xml/xpath/XPathTokenizer.java \
! gnu/xml/xpath/Steps.java \
! gnu/xml/xpath/TrueFunction.java	\
! gnu/xml/xpath/BooleanFunction.java \
! gnu/xml/xpath/ParenthesizedExpr.java \
! gnu/xml/xpath/XPathImpl.java \
! gnu/xml/xpath/Selector.java \
! gnu/xml/xpath/RoundFunction.java \
! gnu/xml/xpath/SubstringBeforeFunction.java \
! gnu/xml/xpath/Function.java \
! gnu/xml/xpath/CeilingFunction.java \
! gnu/xml/xpath/RelationalExpr.java \
! gnu/xml/xpath/FunctionCall.java	\
! gnu/xml/xpath/NodeTypeTest.java	\
! gnu/xml/xpath/ArithmeticExpr.java \
! gnu/xml/xpath/Test.java	\
! gnu/xml/xpath/ContainsFunction.java \
! gnu/xml/pipeline/EventFilter.java \
! gnu/xml/pipeline/NSFilter.java \
! gnu/xml/pipeline/XsltFilter.java \
! gnu/xml/pipeline/ValidationConsumer.java \
! gnu/xml/pipeline/PipelineFactory.java \
! gnu/xml/pipeline/TextConsumer.java \
! gnu/xml/pipeline/LinkFilter.java \
! gnu/xml/pipeline/TeeConsumer.java \
! gnu/xml/pipeline/DomConsumer.java \
! gnu/xml/pipeline/EventConsumer.java \
! gnu/xml/pipeline/WellFormednessFilter.java \
! gnu/xml/pipeline/XIncludeFilter.java \
! gnu/xml/pipeline/CallFilter.java \
! gnu/xml/aelfred2/XmlParser.java	\
! gnu/xml/aelfred2/XmlReader.java	\
! gnu/xml/aelfred2/JAXPFactory.java \
! gnu/xml/aelfred2/ContentHandler2.java \
! gnu/xml/aelfred2/SAXDriver.java	\
! gnu/xml/util/XCat.java \
! gnu/xml/util/DomParser.java \
! gnu/xml/util/XMLWriter.java \
! gnu/xml/util/Resolver.java \
! gnu/xml/util/DoParse.java \
! gnu/xml/util/XHTMLWriter.java \
! gnu/xml/util/SAXNullTransformerFactory.java \
! gnu/xml/dom/DomXPathNSResolver.java \
! gnu/xml/dom/ls/FilteredSAXEventSink.java \
! gnu/xml/dom/ls/DomLSException.java \
! gnu/xml/dom/ls/DomLSSerializer.java \
! gnu/xml/dom/ls/DomLSInput.java \
! gnu/xml/dom/ls/DomLSOutput.java	\
! gnu/xml/dom/ls/SAXEventSink.java \
! gnu/xml/dom/ls/DomLSParser.java	\
! gnu/xml/dom/ls/ReaderInputStream.java \
! gnu/xml/dom/ls/WriterOutputStream.java \
! gnu/xml/dom/DomElement.java \
! gnu/xml/dom/DomNsNode.java \
! gnu/xml/dom/DomAttr.java \
! gnu/xml/dom/DTDAttributeTypeInfo.java \
! gnu/xml/dom/DomDocumentBuilder.java \
! gnu/xml/dom/DTDElementTypeInfo.java \
! gnu/xml/dom/DomDocument.java \
! gnu/xml/dom/DomXPathExpression.java \
! gnu/xml/dom/DomDocumentConfiguration.java \
! gnu/xml/dom/DomDocumentFragment.java \
! gnu/xml/dom/DomProcessingInstruction.java \
! gnu/xml/dom/Consumer.java \
! gnu/xml/dom/DomComment.java \
! gnu/xml/dom/DomCharacterData.java \
! gnu/xml/dom/DomExtern.java \
! gnu/xml/dom/DomEntityReference.java \
! gnu/xml/dom/DomNamedNodeMap.java \
! gnu/xml/dom/ImplementationList.java \
! gnu/xml/dom/ImplementationSource.java \
! gnu/xml/dom/DomImpl.java \
! gnu/xml/dom/DomDoctype.java \
! gnu/xml/dom/DomNode.java \
! gnu/xml/dom/DomXPathResult.java	\
! gnu/xml/dom/DomDocumentBuilderFactory.java \
! gnu/xml/dom/DomText.java \
! gnu/xml/dom/DomNSResolverContext.java \
! gnu/xml/dom/DomNodeIterator.java \
! gnu/xml/dom/DomNotation.java \
! gnu/xml/dom/JAXPFactory.java \
! gnu/xml/dom/DomIterator.java \
! gnu/xml/dom/DomEvent.java \
! gnu/xml/dom/DomEntity.java \
! gnu/xml/dom/DomCDATASection.java \
! gnu/xml/dom/DomDOMException.java \
! gnu/xml/transform/GenerateIdFunction.java \
! gnu/xml/transform/FormatNumberFunction.java \
! gnu/xml/transform/ValueOfNode.java \
! gnu/xml/transform/ApplyImportsNode.java	\
! gnu/xml/transform/WithParam.java \
! gnu/xml/transform/DocumentFunction.java	\
! gnu/xml/transform/SAXSerializer.java \
! gnu/xml/transform/FunctionAvailableFunction.java \
! gnu/xml/transform/ElementAvailableFunction.java	\
! gnu/xml/transform/IfNode.java \
! gnu/xml/transform/ApplyTemplatesNode.java \
! gnu/xml/transform/SortKey.java \
! gnu/xml/transform/Key.java \
! gnu/xml/transform/ElementNode.java \
! gnu/xml/transform/CurrentFunction.java \
! gnu/xml/transform/XSLComparator.java \
! gnu/xml/transform/CallTemplateNode.java	\
! gnu/xml/transform/TemplatesImpl.java \
! gnu/xml/transform/ChooseNode.java \
! gnu/xml/transform/NumberNode.java \
! gnu/xml/transform/CopyOfNode.java \
! gnu/xml/transform/ParameterNode.java \
! gnu/xml/transform/TransformerFactoryImpl.java \
! gnu/xml/transform/TextNode.java	\
! gnu/xml/transform/CopyNode.java	\
! gnu/xml/transform/SystemPropertyFunction.java \
! gnu/xml/transform/Stylesheet.java \
! gnu/xml/transform/ProcessingInstructionNode.java \
! gnu/xml/transform/UnparsedEntityUriFunction.java \
! gnu/xml/transform/URIResolverEntityResolver.java \
! gnu/xml/transform/ErrorListenerErrorHandler.java \
! gnu/xml/transform/Bindings.java	\
! gnu/xml/transform/AttributeSet.java \
! gnu/xml/transform/Template.java	\
! gnu/xml/transform/MessageNode.java \
! gnu/xml/transform/LiteralNode.java \
! gnu/xml/transform/StreamSerializer.java	\
! gnu/xml/transform/XSLURIResolver.java \
! gnu/xml/transform/AttributeNode.java \
! gnu/xml/transform/CommentNode.java \
! gnu/xml/transform/ForEachNode.java \
! gnu/xml/transform/KeyFunction.java \
! gnu/xml/transform/TransformerImpl.java \
! gnu/xml/transform/WhenNode.java	\
! gnu/xml/transform/NodeNumberNode.java \
! gnu/xml/transform/OtherwiseNode.java \
! gnu/xml/transform/AbstractNumberNode.java \
! gnu/xml/transform/TemplateNode.java \
! gnu/xml/transform/TransformerOutputProperties.java \
! gnu/xml/transform/DOMSourceLocator.java
! 
! built_java_source_files = java/lang/ConcreteProcess.java \
!                           gnu/classpath/Configuration.java
! 
! core_java_source_files = \
! java/lang/AbstractMethodError.java \
! java/lang/ArithmeticException.java \
! java/lang/ArrayIndexOutOfBoundsException.java \
! java/lang/ArrayStoreException.java \
! java/lang/AssertionError.java \
! java/lang/Boolean.java \
! java/lang/Byte.java \
! java/lang/Character.java \
! java/lang/CharSequence.java \
! java/lang/ClassCastException.java \
! java/lang/ClassCircularityError.java \
! java/lang/ClassFormatError.java	\
! java/lang/ClassLoader.java \
! java/lang/ClassNotFoundException.java \
! java/lang/CloneNotSupportedException.java \
! java/lang/Cloneable.java \
! java/lang/Comparable.java \
! java/lang/Compiler.java	\
! java/lang/Double.java \
! java/lang/Error.java \
! java/lang/Exception.java \
! java/lang/ExceptionInInitializerError.java \
! java/lang/Float.java \
! java/lang/IllegalAccessError.java \
! java/lang/IllegalAccessException.java \
! java/lang/IllegalArgumentException.java	\
! java/lang/IllegalMonitorStateException.java \
! java/lang/IllegalStateException.java \
! java/lang/IllegalThreadStateException.java \
! java/lang/IncompatibleClassChangeError.java \
! java/lang/IndexOutOfBoundsException.java \
! java/lang/InheritableThreadLocal.java \
! java/lang/InstantiationError.java \
! java/lang/InstantiationException.java \
! java/lang/Integer.java \
! java/lang/InternalError.java \
! java/lang/InterruptedException.java \
! java/lang/LinkageError.java \
! java/lang/Long.java \
! java/lang/Math.java \
! java/lang/NegativeArraySizeException.java \
! java/lang/NoClassDefFoundError.java \
! java/lang/NoSuchFieldError.java	\
! java/lang/NoSuchFieldException.java \
! java/lang/NoSuchMethodError.java \
! java/lang/NoSuchMethodException.java \
! java/lang/NullPointerException.java \
! java/lang/Number.java \
! java/lang/NumberFormatException.java \
! java/lang/OutOfMemoryError.java	\
! java/lang/Package.java \
! java/lang/Process.java \
! java/lang/Runnable.java	\
! java/lang/Runtime.java \
! java/lang/RuntimeException.java	\
! java/lang/RuntimePermission.java \
! java/lang/SecurityException.java \
! java/lang/SecurityManager.java \
! java/lang/Short.java \
! java/lang/StackOverflowError.java \
! java/lang/StackTraceElement.java \
! java/lang/StrictMath.java \
! java/lang/String.java \
! java/lang/StringBuffer.java \
! java/lang/StringIndexOutOfBoundsException.java \
! java/lang/System.java \
! java/lang/Thread.java \
! java/lang/ThreadDeath.java \
! java/lang/ThreadGroup.java \
! java/lang/ThreadLocal.java \
! java/lang/Throwable.java \
! java/lang/UnknownError.java \
! java/lang/UnsatisfiedLinkError.java \
! java/lang/UnsupportedClassVersionError.java \
! java/lang/UnsupportedOperationException.java \
! java/lang/VerifyError.java \
! java/lang/VirtualMachineError.java \
! java/lang/VMClassLoader.java \
! java/lang/VMCompiler.java \
! java/lang/VMSecurityManager.java \
! java/lang/VMThrowable.java \
! java/lang/Void.java \
! java/io/BufferedInputStream.java \
! java/io/BufferedOutputStream.java \
! java/io/BufferedReader.java \
! java/io/BufferedWriter.java \
! java/io/ByteArrayInputStream.java \
! java/io/ByteArrayOutputStream.java \
! java/io/CharArrayReader.java \
! java/io/CharArrayWriter.java \
! java/io/CharConversionException.java \
! java/io/DataInput.java \
! java/io/DataInputStream.java \
! java/io/DataOutput.java	\
! java/io/DataOutputStream.java \
! java/io/EOFException.java \
! java/io/Externalizable.java \
! java/io/File.java \
! java/io/FileDescriptor.java \
! java/io/FileFilter.java \
! java/io/FileInputStream.java \
! java/io/FileNotFoundException.java \
! java/io/FileOutputStream.java \
! java/io/FilePermission.java \
! java/io/FileReader.java	\
! java/io/FileWriter.java	\
! java/io/FilenameFilter.java \
! java/io/FilterInputStream.java \
! java/io/FilterOutputStream.java	\
! java/io/FilterReader.java \
! java/io/FilterWriter.java \
! java/io/IOException.java \
! java/io/InputStream.java \
! java/io/InputStreamReader.java \
! java/io/InterruptedIOException.java \
! java/io/InvalidClassException.java \
! java/io/InvalidObjectException.java \
! java/io/LineNumberInputStream.java \
! java/io/LineNumberReader.java \
! java/io/NotActiveException.java	\
! java/io/NotSerializableException.java \
! java/io/ObjectInput.java \
! java/io/ObjectInputStream.java \
! java/io/ObjectInputValidation.java \
! java/io/ObjectOutput.java \
! java/io/ObjectOutputStream.java	\
! java/io/ObjectStreamClass.java \
! java/io/ObjectStreamConstants.java \
! java/io/ObjectStreamException.java \
! java/io/ObjectStreamField.java \
! java/io/OptionalDataException.java \
! java/io/OutputStream.java \
! java/io/OutputStreamWriter.java	\
! java/io/PipedInputStream.java \
! java/io/PipedOutputStream.java \
! java/io/PipedReader.java \
! java/io/PipedWriter.java \
! java/io/PrintStream.java \
! java/io/PrintWriter.java \
! java/io/PushbackInputStream.java \
! java/io/PushbackReader.java \
! java/io/RandomAccessFile.java \
! java/io/Reader.java \
! java/io/SequenceInputStream.java \
! java/io/Serializable.java \
! java/io/SerializablePermission.java \
! java/io/StreamCorruptedException.java \
! java/io/StreamTokenizer.java \
! java/io/StringBufferInputStream.java \
! java/io/StringReader.java \
! java/io/StringWriter.java \
! java/io/SyncFailedException.java \
! java/io/UTFDataFormatException.java \
! java/io/UnsupportedEncodingException.java \
! java/io/VMObjectStreamClass.java \
! java/io/WriteAbortedException.java \
! java/io/Writer.java \
! java/util/AbstractCollection.java \
! java/util/AbstractList.java \
! java/util/AbstractMap.java \
! java/util/AbstractSequentialList.java \
! java/util/AbstractSet.java \
! java/util/ArrayList.java \
! java/util/Arrays.java \
! java/util/BitSet.java \
! java/util/Calendar.java	\
! java/util/Collection.java \
! java/util/Collections.java \
! java/util/Comparator.java \
! java/util/ConcurrentModificationException.java \
! java/util/Currency.java \
! java/util/Date.java \
! java/util/Dictionary.java \
! java/util/EmptyStackException.java \
! java/util/Enumeration.java \
! java/util/EventListener.java \
! java/util/EventListenerProxy.java \
! java/util/EventObject.java \
! java/util/GregorianCalendar.java \
! java/util/HashMap.java \
! java/util/HashSet.java \
! java/util/Hashtable.java \
! java/util/IdentityHashMap.java \
! java/util/Iterator.java	\
! java/util/LinkedList.java \
! java/util/LinkedHashMap.java \
! java/util/LinkedHashSet.java \
! java/util/List.java \
! java/util/ListIterator.java \
! java/util/ListResourceBundle.java \
! java/util/Locale.java \
! java/util/Map.java \
! java/util/MissingResourceException.java	\
! java/util/NoSuchElementException.java \
! java/util/Observable.java \
! java/util/Observer.java	\
! java/util/Properties.java \
! java/util/PropertyPermission.java \
! java/util/PropertyPermissionCollection.java \
! java/util/PropertyResourceBundle.java \
! java/util/Random.java \
! java/util/RandomAccess.java \
! java/util/ResourceBundle.java \
! java/util/Set.java \
! java/util/SimpleTimeZone.java \
! java/util/SortedMap.java \
! java/util/SortedSet.java \
! java/util/Stack.java \
! java/util/StringTokenizer.java \
! java/util/TimeZone.java	\
! java/util/Timer.java \
! java/util/TimerTask.java \
! java/util/TreeMap.java \
! java/util/TreeSet.java \
! java/util/TooManyListenersException.java \
! java/util/Vector.java \
! java/util/VMTimeZone.java	\
! java/util/WeakHashMap.java \
! java/util/logging/ConsoleHandler.java \
! java/util/logging/ErrorManager.java \
! java/util/logging/FileHandler.java \
! java/util/logging/Filter.java \
! java/util/logging/Formatter.java \
! java/util/logging/Handler.java \
! java/util/logging/Level.java \
! java/util/logging/Logger.java \
! java/util/logging/LoggingPermission.java \
! java/util/logging/LogManager.java \
! java/util/logging/LogRecord.java \
! java/util/logging/MemoryHandler.java \
! java/util/logging/SimpleFormatter.java \
! java/util/logging/SocketHandler.java \
! java/util/logging/StreamHandler.java \
! java/util/logging/XMLFormatter.java \
! java/util/prefs/NodeChangeListener.java \
! java/util/prefs/Preferences.java \
! java/util/prefs/PreferenceChangeListener.java \
! java/util/prefs/NodeChangeEvent.java \
! java/util/prefs/InvalidPreferencesFormatException.java \
! java/util/prefs/AbstractPreferences.java \
! java/util/prefs/BackingStoreException.java \
! java/util/prefs/PreferenceChangeEvent.java \
! java/util/prefs/PreferencesFactory.java \
! java/util/regex/Matcher.java \
! java/util/regex/Pattern.java \
! java/util/regex/PatternSyntaxException.java
! 
! ordinary_java_source_files = $(core_java_source_files) \
! gnu/classpath/ServiceFactory.java \
! gnu/classpath/ServiceProviderLoadingAction.java \
! gnu/gcj/Core.java \
! gnu/gcj/RawData.java \
! gnu/gcj/RawDataManaged.java \
  gnu/gcj/io/DefaultMimeTypes.java \
  gnu/gcj/io/MimeTypes.java \
! gnu/gcj/io/SimpleSHSStream.java	\
  gnu/gcj/runtime/BootClassLoader.java \
  gnu/gcj/runtime/ExtensionClassLoader.java \
- gnu/gcj/runtime/FileDeleter.java \
  gnu/gcj/runtime/FinalizerThread.java \
  gnu/gcj/runtime/HelperClassLoader.java \
  gnu/gcj/runtime/JNIWeakRef.java \
- gnu/gcj/runtime/MethodRef.java \
  gnu/gcj/runtime/NameFinder.java \
  gnu/gcj/runtime/PersistentByteMap.java \
  gnu/gcj/runtime/SharedLibHelper.java \
  gnu/gcj/runtime/SharedLibLoader.java \
  gnu/gcj/runtime/StringBuffer.java \
! gnu/gcj/runtime/StackTrace.java \
! gnu/gcj/runtime/SystemClassLoader.java \
! gnu/gcj/util/Debug.java \
! gnu/java/io/ASN1ParsingException.java \
! gnu/java/io/Base64InputStream.java \
! gnu/java/io/ClassLoaderObjectInputStream.java \
! gnu/java/io/NullOutputStream.java \
! gnu/java/io/ObjectIdentityWrapper.java \
! gnu/java/lang/ArrayHelper.java \
! gnu/java/lang/ClassHelper.java \
! gnu/java/lang/MainThread.java \
! gnu/java/lang/reflect/TypeSignature.java \
  gnu/java/locale/Calendar.java \
  gnu/java/locale/Calendar_de.java \
  gnu/java/locale/Calendar_en.java \
  gnu/java/locale/Calendar_nl.java \
  gnu/java/locale/LocaleInformation.java \
  gnu/java/locale/LocaleInformation_af_ZA.java \
  gnu/java/locale/LocaleInformation_ar_AE.java \
--- 798,1432 ----
  
  lib_gnu_awt_xlib_la_LINK = $(LIBLINK)
  property_files = \
! classpath/resource/org/ietf/jgss/MessagesBundle.properties \
! classpath/resource/java/util/iso4217.properties	\
! classpath/resource/gnu/java/awt/peer/gtk/font.properties \
! classpath/resource/gnu/regexp/MessagesBundle_it.properties \
! classpath/resource/gnu/regexp/MessagesBundle_fr.properties \
! classpath/resource/gnu/regexp/MessagesBundle.properties	\
! classpath/resource/META-INF/services/org.xml.sax.driver	\
! classpath/resource/META-INF/services/javax.xml.parsers.SAXParserFactory	\
! classpath/resource/META-INF/services/javax.xml.parsers.DocumentBuilderFactory \
! classpath/resource/META-INF/services/javax.xml.parsers.TransformerFactory
  
! propertyo_files = $(patsubst classpath/resource/%,%,$(addsuffix .lo,$(property_files)))
! CLEANFILES = libgcj-$(gcc_version).jar \
  	$(all_java_deps_files) $(all_java_filelist_files)
  
! DISTCLEANFILES = native.dirs
! SUFFIXES = .class .java .h .properties .list
! gnu_CORBA_source_files = \
! classpath/gnu/CORBA/Asynchron.java \
! classpath/gnu/CORBA/BigDecimalHelper.java \
! classpath/gnu/CORBA/ByteArrayComparator.java \
! classpath/gnu/CORBA/CDR/AbstractCdrInput.java \
! classpath/gnu/CORBA/CDR/AbstractCdrOutput.java \
! classpath/gnu/CORBA/CDR/AbstractDataInput.java \
! classpath/gnu/CORBA/CDR/AbstractDataOutput.java \
! classpath/gnu/CORBA/CDR/AligningInput.java \
! classpath/gnu/CORBA/CDR/AligningOutput.java \
! classpath/gnu/CORBA/CDR/ArrayValueHelper.java \
! classpath/gnu/CORBA/CDR/BigEndianInputStream.java \
! classpath/gnu/CORBA/CDR/BigEndianOutputStream.java \
! classpath/gnu/CORBA/CDR/BufferedCdrOutput.java \
! classpath/gnu/CORBA/CDR/BufferredCdrInput.java \
! classpath/gnu/CORBA/CDR/EncapsulationStream.java \
! classpath/gnu/CORBA/CDR/HeadlessInput.java \
! classpath/gnu/CORBA/CDR/IDLTypeHelper.java \
! classpath/gnu/CORBA/CDR/LittleEndianInputStream.java \
! classpath/gnu/CORBA/CDR/LittleEndianOutputStream.java \
! classpath/gnu/CORBA/CDR/UnknownExceptionCtxHandler.java \
! classpath/gnu/CORBA/CDR/VMVio.java \
! classpath/gnu/CORBA/CDR/Vio.java \
! classpath/gnu/CORBA/CDR/gnuRuntime.java \
! classpath/gnu/CORBA/CDR/gnuValueStream.java \
! classpath/gnu/CORBA/CdrEncapsCodecImpl.java \
! classpath/gnu/CORBA/Connected_objects.java \
! classpath/gnu/CORBA/CorbaList.java \
! classpath/gnu/CORBA/DefaultSocketFactory.java \
! classpath/gnu/CORBA/DefinitionKindHolder.java \
! classpath/gnu/CORBA/DuplicateNameHolder.java \
! classpath/gnu/CORBA/DynAn/AbstractAny.java \
! classpath/gnu/CORBA/DynAn/DivideableAny.java \
! classpath/gnu/CORBA/DynAn/NameValuePairHolder.java \
! gnu/CORBA/DynAn/RecordAny.java \
! classpath/gnu/CORBA/DynAn/UndivideableAny.java \
! classpath/gnu/CORBA/DynAn/ValueChangeListener.java \
! classpath/gnu/CORBA/DynAn/gnuDynAny.java \
! classpath/gnu/CORBA/DynAn/gnuDynAnyFactory.java \
! classpath/gnu/CORBA/DynAn/gnuDynArray.java \
! classpath/gnu/CORBA/DynAn/gnuDynEnum.java \
! classpath/gnu/CORBA/DynAn/gnuDynFixed.java \
! classpath/gnu/CORBA/DynAn/gnuDynSequence.java \
! classpath/gnu/CORBA/DynAn/gnuDynStruct.java \
! classpath/gnu/CORBA/DynAn/gnuDynUnion.java \
! gnu/CORBA/DynAn/gnuDynValue.java \
! classpath/gnu/CORBA/DynAn/gnuDynValueBox.java \
! classpath/gnu/CORBA/DynAnySeqHolder.java \
! classpath/gnu/CORBA/EmptyExceptionHolder.java \
! classpath/gnu/CORBA/ForwardRequestHelper.java \
! classpath/gnu/CORBA/GIOP/CancelHeader.java \
! classpath/gnu/CORBA/GIOP/CharSets_OSF.java \
! classpath/gnu/CORBA/GIOP/CloseMessage.java \
! classpath/gnu/CORBA/GIOP/CodeSetServiceContext.java \
! classpath/gnu/CORBA/GIOP/ContextHandler.java \
! classpath/gnu/CORBA/GIOP/ErrorMessage.java \
! classpath/gnu/CORBA/GIOP/MessageHeader.java \
! classpath/gnu/CORBA/GIOP/ReplyHeader.java \
! classpath/gnu/CORBA/GIOP/RequestHeader.java \
! classpath/gnu/CORBA/GIOP/ServiceContext.java \
! classpath/gnu/CORBA/GIOP/v1_0/CancelHeader.java \
! classpath/gnu/CORBA/GIOP/v1_0/ReplyHeader.java \
! classpath/gnu/CORBA/GIOP/v1_0/RequestHeader.java \
! classpath/gnu/CORBA/GIOP/v1_2/ReplyHeader.java \
! classpath/gnu/CORBA/GIOP/v1_2/RequestHeader.java \
! classpath/gnu/CORBA/GeneralHolder.java \
! classpath/gnu/CORBA/HolderLocator.java \
! classpath/gnu/CORBA/IOR.java \
! classpath/gnu/CORBA/Interceptor/ClientRequestInterceptors.java \
! classpath/gnu/CORBA/Interceptor/ForwardRequestHolder.java \
! classpath/gnu/CORBA/Interceptor/IORInterceptors.java \
! classpath/gnu/CORBA/Interceptor/Registrator.java \
! classpath/gnu/CORBA/Interceptor/ServerRequestInterceptors.java \
! classpath/gnu/CORBA/Interceptor/gnuClientRequestInfo.java \
! classpath/gnu/CORBA/Interceptor/gnuIcCurrent.java \
! classpath/gnu/CORBA/Interceptor/gnuIorInfo.java \
! classpath/gnu/CORBA/Interceptor/gnuServerRequestInfo.java \
! classpath/gnu/CORBA/IorDelegate.java \
! classpath/gnu/CORBA/IorObject.java \
! classpath/gnu/CORBA/IorProvider.java \
! classpath/gnu/CORBA/Minor.java \
! classpath/gnu/CORBA/NameDynAnyPairHolder.java \
! classpath/gnu/CORBA/NameDynAnyPairSeqHolder.java \
! classpath/gnu/CORBA/NameValuePairHolder.java \
! classpath/gnu/CORBA/NameValuePairSeqHolder.java \
! classpath/gnu/CORBA/NamingService/Binding_iterator_impl.java \
! classpath/gnu/CORBA/NamingService/Ext.java \
! classpath/gnu/CORBA/NamingService/NameComponentComparator.java \
! classpath/gnu/CORBA/NamingService/NameParser.java \
! classpath/gnu/CORBA/NamingService/NameTransformer.java \
! classpath/gnu/CORBA/NamingService/NameValidator.java \
! classpath/gnu/CORBA/NamingService/NamingMap.java \
! classpath/gnu/CORBA/NamingService/NamingServiceTransient.java \
! classpath/gnu/CORBA/NamingService/TransientContext.java \
! gnu/CORBA/ObjectCreator.java \
! classpath/gnu/CORBA/OctetHolder.java \
! classpath/gnu/CORBA/OrbFocused.java \
! classpath/gnu/CORBA/OrbFunctional.java \
! classpath/gnu/CORBA/OrbRestricted.java \
! classpath/gnu/CORBA/Poa/AOM.java \
! classpath/gnu/CORBA/Poa/AccessiblePolicy.java \
! classpath/gnu/CORBA/Poa/DynamicImpHandler.java \
! classpath/gnu/CORBA/Poa/ForwardRequestHolder.java \
! classpath/gnu/CORBA/Poa/ForwardedServant.java \
! classpath/gnu/CORBA/Poa/InvalidPolicyHolder.java \
! classpath/gnu/CORBA/Poa/LocalDelegate.java \
! classpath/gnu/CORBA/Poa/LocalRequest.java \
! classpath/gnu/CORBA/Poa/LocalServerRequest.java \
! classpath/gnu/CORBA/Poa/ORB_1_4.java \
! classpath/gnu/CORBA/Poa/ServantDelegateImpl.java \
! classpath/gnu/CORBA/Poa/StandardPolicies.java \
! classpath/gnu/CORBA/Poa/gnuAdapterActivator.java \
! classpath/gnu/CORBA/Poa/gnuForwardRequest.java \
! classpath/gnu/CORBA/Poa/gnuIdAssignmentPolicy.java \
! classpath/gnu/CORBA/Poa/gnuIdUniquenessPolicy.java \
! classpath/gnu/CORBA/Poa/gnuImplicitActivationPolicy.java \
! classpath/gnu/CORBA/Poa/gnuLifespanPolicy.java \
! classpath/gnu/CORBA/Poa/gnuPOA.java \
! classpath/gnu/CORBA/Poa/gnuPOAManager.java \
! classpath/gnu/CORBA/Poa/gnuPoaCurrent.java \
! classpath/gnu/CORBA/Poa/gnuRequestProcessingPolicy.java \
! classpath/gnu/CORBA/Poa/gnuServantObject.java \
! classpath/gnu/CORBA/Poa/gnuServantRetentionPolicy.java \
! classpath/gnu/CORBA/Poa/gnuThreadPolicy.java \
! classpath/gnu/CORBA/RawReply.java \
! classpath/gnu/CORBA/ResponseHandlerImpl.java \
! classpath/gnu/CORBA/ServiceDetailHolder.java \
! classpath/gnu/CORBA/ServiceRequestAdapter.java \
! classpath/gnu/CORBA/SetOverrideTypeHolder.java \
! classpath/gnu/CORBA/SimpleDelegate.java \
! classpath/gnu/CORBA/SocketRepository.java \
! classpath/gnu/CORBA/StreamBasedRequest.java \
! classpath/gnu/CORBA/StreamHolder.java \
! classpath/gnu/CORBA/StubLocator.java \
! classpath/gnu/CORBA/TypeCodeHelper.java \
! classpath/gnu/CORBA/TypeKindNamer.java \
! classpath/gnu/CORBA/Unexpected.java \
! classpath/gnu/CORBA/Version.java \
! classpath/gnu/CORBA/WCharHolder.java \
! classpath/gnu/CORBA/WStringHolder.java \
! classpath/gnu/CORBA/_PolicyImplBase.java \
! classpath/gnu/CORBA/gnuAny.java \
! classpath/gnu/CORBA/gnuCodecFactory.java \
! classpath/gnu/CORBA/gnuContext.java \
! classpath/gnu/CORBA/gnuContextList.java \
! classpath/gnu/CORBA/gnuEnvironment.java \
! classpath/gnu/CORBA/gnuExceptionList.java \
! classpath/gnu/CORBA/gnuNVList.java \
! classpath/gnu/CORBA/gnuNamedValue.java \
! classpath/gnu/CORBA/gnuRequest.java \
! classpath/gnu/CORBA/gnuValueHolder.java \
! classpath/gnu/CORBA/interfaces/SocketFactory.java \
! classpath/gnu/CORBA/typecodes/AliasTypeCode.java \
! classpath/gnu/CORBA/typecodes/ArrayTypeCode.java \
! classpath/gnu/CORBA/typecodes/FixedTypeCode.java \
! classpath/gnu/CORBA/typecodes/GeneralTypeCode.java \
! classpath/gnu/CORBA/typecodes/PrimitiveTypeCode.java \
! classpath/gnu/CORBA/typecodes/RecordTypeCode.java \
! classpath/gnu/CORBA/typecodes/RecursiveTypeCode.java \
! classpath/gnu/CORBA/typecodes/StringTypeCode.java
  
! gnu_awt_source_files = \
! gnu/awt/LightweightRedirector.java
  
! gnu_awt_header_files = $(patsubst %.java,%.h,$(gnu_awt_source_files))
! gnu_awt_j2d_source_files = \
! gnu/awt/j2d/AbstractGraphicsState.java \
! gnu/awt/j2d/DirectRasterGraphics.java \
! gnu/awt/j2d/Graphics2DImpl.java \
! gnu/awt/j2d/IntegerGraphicsState.java \
! gnu/awt/j2d/MappedRaster.java
  
! gnu_awt_j2d_header_files = $(patsubst %.java,%.h,$(gnu_awt_j2d_source_files))
! gnu_awt_xlib_source_files = \
! gnu/awt/xlib/XCanvasPeer.java \
! gnu/awt/xlib/XEventLoop.java \
! gnu/awt/xlib/XEventQueue.java \
! gnu/awt/xlib/XFontMetrics.java \
! gnu/awt/xlib/XFontPeer.java \
! gnu/awt/xlib/XFramePeer.java \
! gnu/awt/xlib/XGraphics.java \
! gnu/awt/xlib/XGraphicsConfiguration.java \
! gnu/awt/xlib/XGraphicsDevice.java \
! gnu/awt/xlib/XGraphicsEnvironment.java \
! gnu/awt/xlib/XOffScreenImage.java \
! gnu/awt/xlib/XPanelPeer.java \
! gnu/awt/xlib/XToolkit.java
  
! gnu_awt_xlib_header_files = $(patsubst %.java,%.h,$(gnu_awt_xlib_source_files))
! gnu_classpath_source_files = \
! classpath/gnu/classpath/ByteArray.java \
! classpath/gnu/classpath/Configuration.java \
! classpath/gnu/classpath/Pointer.java \
! classpath/gnu/classpath/Pointer32.java \
! classpath/gnu/classpath/Pointer64.java \
! classpath/gnu/classpath/ServiceFactory.java \
! classpath/gnu/classpath/ServiceProviderLoadingAction.java \
! gnu/classpath/SystemProperties.java
  
! gnu_classpath_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_source_files)))
! gnu_classpath_debug_source_files = \
! classpath/gnu/classpath/debug/Component.java \
! classpath/gnu/classpath/debug/PreciseFilter.java \
! classpath/gnu/classpath/debug/SystemLogger.java
  
! gnu_classpath_debug_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_debug_source_files)))
! gnu_classpath_jdwp_source_files = \
! classpath/gnu/classpath/jdwp/Jdwp.java \
! classpath/gnu/classpath/jdwp/JdwpConstants.java \
! gnu/classpath/jdwp/VMFrame.java \
! gnu/classpath/jdwp/VMIdManager.java \
! gnu/classpath/jdwp/VMVirtualMachine.java
  
! gnu_classpath_jdwp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_source_files)))
! gnu_classpath_jdwp_event_source_files = \
! classpath/gnu/classpath/jdwp/event/ClassPrepareEvent.java \
! classpath/gnu/classpath/jdwp/event/Event.java \
! classpath/gnu/classpath/jdwp/event/EventManager.java \
! classpath/gnu/classpath/jdwp/event/EventRequest.java \
! classpath/gnu/classpath/jdwp/event/ThreadEndEvent.java \
! classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java \
! classpath/gnu/classpath/jdwp/event/VmDeathEvent.java \
! classpath/gnu/classpath/jdwp/event/VmInitEvent.java
  
! gnu_classpath_jdwp_event_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_event_source_files)))
! gnu_classpath_jdwp_event_filters_source_files = \
! classpath/gnu/classpath/jdwp/event/filters/ClassExcludeFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/ClassOnlyFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/CountFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/IEventFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/InstanceOnlyFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/StepFilter.java \
! classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java
  
! gnu_classpath_jdwp_event_filters_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_event_filters_source_files)))
! gnu_classpath_jdwp_exception_source_files = \
! classpath/gnu/classpath/jdwp/exception/InvalidClassException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidClassLoaderException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidCountException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidEventTypeException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidFieldException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidLocationException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidMethodException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidObjectException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidStringException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidThreadException.java \
! classpath/gnu/classpath/jdwp/exception/InvalidThreadGroupException.java \
! classpath/gnu/classpath/jdwp/exception/JdwpException.java \
! classpath/gnu/classpath/jdwp/exception/JdwpIllegalArgumentException.java \
! classpath/gnu/classpath/jdwp/exception/JdwpInternalErrorException.java \
! classpath/gnu/classpath/jdwp/exception/NotImplementedException.java \
! classpath/gnu/classpath/jdwp/exception/VmDeadException.java
! 
! gnu_classpath_jdwp_exception_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_exception_source_files)))
! gnu_classpath_jdwp_id_source_files = \
! classpath/gnu/classpath/jdwp/id/ArrayId.java \
! classpath/gnu/classpath/jdwp/id/ArrayReferenceTypeId.java \
! classpath/gnu/classpath/jdwp/id/ClassLoaderId.java \
! classpath/gnu/classpath/jdwp/id/ClassObjectId.java \
! classpath/gnu/classpath/jdwp/id/ClassReferenceTypeId.java \
! classpath/gnu/classpath/jdwp/id/InterfaceReferenceTypeId.java \
! classpath/gnu/classpath/jdwp/id/JdwpId.java \
! classpath/gnu/classpath/jdwp/id/ObjectId.java \
! classpath/gnu/classpath/jdwp/id/ReferenceTypeId.java \
! classpath/gnu/classpath/jdwp/id/StringId.java \
! classpath/gnu/classpath/jdwp/id/ThreadGroupId.java \
! classpath/gnu/classpath/jdwp/id/ThreadId.java
! 
! gnu_classpath_jdwp_id_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_id_source_files)))
! gnu_classpath_jdwp_processor_source_files = \
! classpath/gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/ArrayTypeCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/ClassObjectReferenceCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/ClassTypeCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/CommandSet.java \
! classpath/gnu/classpath/jdwp/processor/EventRequestCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/FieldCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/InterfaceTypeCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/PacketProcessor.java \
! classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/StackFrameCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/StringReferenceCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/ThreadGroupReferenceCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java \
! classpath/gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
! 
! gnu_classpath_jdwp_processor_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_processor_source_files)))
! gnu_classpath_jdwp_transport_source_files = \
! classpath/gnu/classpath/jdwp/transport/ITransport.java \
! classpath/gnu/classpath/jdwp/transport/JdwpCommandPacket.java \
! classpath/gnu/classpath/jdwp/transport/JdwpConnection.java \
! classpath/gnu/classpath/jdwp/transport/JdwpPacket.java \
! classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java \
! classpath/gnu/classpath/jdwp/transport/SocketTransport.java \
! classpath/gnu/classpath/jdwp/transport/TransportException.java \
! classpath/gnu/classpath/jdwp/transport/TransportFactory.java
! 
! gnu_classpath_jdwp_transport_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_transport_source_files)))
! gnu_classpath_jdwp_util_source_files = \
! classpath/gnu/classpath/jdwp/util/JdwpString.java \
! classpath/gnu/classpath/jdwp/util/LineTable.java \
! classpath/gnu/classpath/jdwp/util/Location.java \
! classpath/gnu/classpath/jdwp/util/MethodResult.java \
! classpath/gnu/classpath/jdwp/util/Signature.java \
! classpath/gnu/classpath/jdwp/util/Value.java \
! classpath/gnu/classpath/jdwp/util/VariableTable.java
! 
! gnu_classpath_jdwp_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_util_source_files)))
! gnu_gcj_source_files = \
! gnu/gcj/Core.java \
! gnu/gcj/RawData.java \
! gnu/gcj/RawDataManaged.java
! 
! gnu_gcj_header_files = $(patsubst %.java,%.h,$(gnu_gcj_source_files))
! gnu_gcj_convert_source_files = \
! gnu/gcj/convert/BytesToCharsetAdaptor.java \
  gnu/gcj/convert/BytesToUnicode.java \
+ gnu/gcj/convert/CharsetToBytesAdaptor.java \
  gnu/gcj/convert/Convert.java \
+ gnu/gcj/convert/IOConverter.java \
  gnu/gcj/convert/Input_8859_1.java \
  gnu/gcj/convert/Input_ASCII.java \
  gnu/gcj/convert/Input_EUCJIS.java \
  gnu/gcj/convert/Input_JavaSrc.java \
  gnu/gcj/convert/Input_SJIS.java \
+ gnu/gcj/convert/Input_UTF8.java \
  gnu/gcj/convert/Input_UnicodeBig.java \
  gnu/gcj/convert/Input_UnicodeLittle.java \
  gnu/gcj/convert/Input_iconv.java \
  gnu/gcj/convert/Output_8859_1.java \
  gnu/gcj/convert/Output_ASCII.java \
  gnu/gcj/convert/Output_EUCJIS.java \
  gnu/gcj/convert/Output_JavaSrc.java \
  gnu/gcj/convert/Output_SJIS.java \
  gnu/gcj/convert/Output_UTF8.java \
+ gnu/gcj/convert/Output_UnicodeLittleUnmarked.java \
  gnu/gcj/convert/Output_iconv.java \
  gnu/gcj/convert/UnicodeToBytes.java
  
! gnu_gcj_convert_header_files = $(patsubst %.java,%.h,$(gnu_gcj_convert_source_files))
! gnu_gcj_io_source_files = \
  gnu/gcj/io/DefaultMimeTypes.java \
  gnu/gcj/io/MimeTypes.java \
! gnu/gcj/io/SimpleSHSStream.java
! 
! gnu_gcj_io_header_files = $(patsubst %.java,%.h,$(gnu_gcj_io_source_files))
! gnu_gcj_runtime_source_files = \
  gnu/gcj/runtime/BootClassLoader.java \
  gnu/gcj/runtime/ExtensionClassLoader.java \
  gnu/gcj/runtime/FinalizerThread.java \
  gnu/gcj/runtime/HelperClassLoader.java \
  gnu/gcj/runtime/JNIWeakRef.java \
  gnu/gcj/runtime/NameFinder.java \
  gnu/gcj/runtime/PersistentByteMap.java \
  gnu/gcj/runtime/SharedLibHelper.java \
  gnu/gcj/runtime/SharedLibLoader.java \
  gnu/gcj/runtime/StringBuffer.java \
! gnu/gcj/runtime/SystemClassLoader.java
! 
! gnu_gcj_runtime_header_files = $(patsubst %.java,%.h,$(gnu_gcj_runtime_source_files))
! gnu_gcj_util_source_files = \
! gnu/gcj/util/Debug.java
! 
! gnu_gcj_util_header_files = $(patsubst %.java,%.h,$(gnu_gcj_util_source_files))
! gnu_gcj_xlib_source_files = \
! gnu/gcj/xlib/Clip.java \
! gnu/gcj/xlib/Colormap.java \
! gnu/gcj/xlib/Display.java \
! gnu/gcj/xlib/Drawable.java \
! gnu/gcj/xlib/Font.java \
! gnu/gcj/xlib/GC.java \
! gnu/gcj/xlib/Pixmap.java \
! gnu/gcj/xlib/Screen.java \
! gnu/gcj/xlib/Visual.java \
! gnu/gcj/xlib/WMSizeHints.java \
! gnu/gcj/xlib/Window.java \
! gnu/gcj/xlib/WindowAttributes.java \
! gnu/gcj/xlib/XAnyEvent.java \
! gnu/gcj/xlib/XButtonEvent.java \
! gnu/gcj/xlib/XColor.java \
! gnu/gcj/xlib/XConfigureEvent.java \
! gnu/gcj/xlib/XConnectException.java \
! gnu/gcj/xlib/XEvent.java \
! gnu/gcj/xlib/XException.java \
! gnu/gcj/xlib/XExposeEvent.java \
! gnu/gcj/xlib/XID.java \
! gnu/gcj/xlib/XImage.java \
! gnu/gcj/xlib/XUnmapEvent.java
! 
! gnu_gcj_xlib_header_files = $(patsubst %.java,%.h,$(gnu_gcj_xlib_source_files))
! gnu_java_awt_source_files = \
! classpath/gnu/java/awt/AWTUtilities.java \
! classpath/gnu/java/awt/BitMaskExtent.java \
! classpath/gnu/java/awt/BitwiseXORComposite.java \
! classpath/gnu/java/awt/Buffers.java \
! classpath/gnu/java/awt/ClasspathToolkit.java \
! classpath/gnu/java/awt/ComponentDataBlitOp.java \
! classpath/gnu/java/awt/EmbeddedWindow.java \
! classpath/gnu/java/awt/EventModifier.java \
! classpath/gnu/java/awt/GradientPaintContext.java
! 
! gnu_java_awt_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_source_files)))
! gnu_java_awt_color_source_files = \
! classpath/gnu/java/awt/color/CieXyzConverter.java \
! classpath/gnu/java/awt/color/ClutProfileConverter.java \
! classpath/gnu/java/awt/color/ColorLookUpTable.java \
! classpath/gnu/java/awt/color/ColorSpaceConverter.java \
! classpath/gnu/java/awt/color/GrayProfileConverter.java \
! classpath/gnu/java/awt/color/GrayScaleConverter.java \
! classpath/gnu/java/awt/color/LinearRGBConverter.java \
! classpath/gnu/java/awt/color/ProfileHeader.java \
! classpath/gnu/java/awt/color/PyccConverter.java \
! classpath/gnu/java/awt/color/RgbProfileConverter.java \
! classpath/gnu/java/awt/color/SrgbConverter.java \
! classpath/gnu/java/awt/color/TagEntry.java \
! classpath/gnu/java/awt/color/ToneReproductionCurve.java
! 
! gnu_java_awt_color_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_color_source_files)))
! gnu_java_awt_image_source_files = \
! classpath/gnu/java/awt/image/ImageDecoder.java \
! classpath/gnu/java/awt/image/XBMDecoder.java
! 
! gnu_java_awt_image_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_image_source_files)))
! gnu_java_awt_peer_source_files = \
! classpath/gnu/java/awt/peer/ClasspathFontPeer.java \
! classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java \
! classpath/gnu/java/awt/peer/EmbeddedWindowPeer.java \
! classpath/gnu/java/awt/peer/GLightweightPeer.java
! 
! gnu_java_awt_peer_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_peer_source_files)))
! gnu_java_awt_peer_gtk_source_files = \
! classpath/gnu/java/awt/peer/gtk/GThreadMutex.java \
! classpath/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java \
! classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java \
! classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java \
! classpath/gnu/java/awt/peer/gtk/GdkGlyphVector.java \
! classpath/gnu/java/awt/peer/gtk/GdkGraphics.java \
! classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java \
! classpath/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java \
! classpath/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java \
! classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java \
! classpath/gnu/java/awt/peer/gtk/GdkRobotPeer.java \
! classpath/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java \
! classpath/gnu/java/awt/peer/gtk/GdkTextLayout.java \
! classpath/gnu/java/awt/peer/gtk/GtkButtonPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkChoicePeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkClipboard.java \
! classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java \
! classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkGenericPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkImage.java \
! classpath/gnu/java/awt/peer/gtk/GtkImageConsumer.java \
! classpath/gnu/java/awt/peer/gtk/GtkLabelPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkListPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkMenuPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkSelection.java \
! classpath/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java \
! classpath/gnu/java/awt/peer/gtk/GtkToolkit.java \
! classpath/gnu/java/awt/peer/gtk/GtkVolatileImage.java \
! classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java
! 
! gnu_java_awt_peer_qt_source_files = \
! classpath/gnu/java/awt/peer/qt/MainQtThread.java \
! classpath/gnu/java/awt/peer/qt/NativeWrapper.java \
! classpath/gnu/java/awt/peer/qt/QMatrix.java \
! classpath/gnu/java/awt/peer/qt/QPainterPath.java \
! classpath/gnu/java/awt/peer/qt/QPen.java \
! classpath/gnu/java/awt/peer/qt/QtAudioClip.java \
! classpath/gnu/java/awt/peer/qt/QtButtonPeer.java \
! classpath/gnu/java/awt/peer/qt/QtCanvasPeer.java \
! classpath/gnu/java/awt/peer/qt/QtCheckboxPeer.java \
! classpath/gnu/java/awt/peer/qt/QtChoicePeer.java \
! classpath/gnu/java/awt/peer/qt/QtComponentGraphics.java \
! classpath/gnu/java/awt/peer/qt/QtComponentPeer.java \
! classpath/gnu/java/awt/peer/qt/QtContainerPeer.java \
! classpath/gnu/java/awt/peer/qt/QtDialogPeer.java \
! classpath/gnu/java/awt/peer/qt/QtEmbeddedWindowPeer.java \
! classpath/gnu/java/awt/peer/qt/QtFileDialogPeer.java \
! classpath/gnu/java/awt/peer/qt/QtFontMetrics.java \
! classpath/gnu/java/awt/peer/qt/QtFontPeer.java \
! classpath/gnu/java/awt/peer/qt/QtFramePeer.java \
! classpath/gnu/java/awt/peer/qt/QtGraphics.java \
! classpath/gnu/java/awt/peer/qt/QtGraphicsEnvironment.java \
! classpath/gnu/java/awt/peer/qt/QtImage.java \
! classpath/gnu/java/awt/peer/qt/QtImageConsumer.java \
! classpath/gnu/java/awt/peer/qt/QtImageDirectGraphics.java \
! classpath/gnu/java/awt/peer/qt/QtImageGraphics.java \
! classpath/gnu/java/awt/peer/qt/QtLabelPeer.java \
! classpath/gnu/java/awt/peer/qt/QtListPeer.java \
! classpath/gnu/java/awt/peer/qt/QtMenuBarPeer.java \
! classpath/gnu/java/awt/peer/qt/QtMenuComponentPeer.java \
! classpath/gnu/java/awt/peer/qt/QtMenuItemPeer.java \
! classpath/gnu/java/awt/peer/qt/QtMenuPeer.java \
! classpath/gnu/java/awt/peer/qt/QtPanelPeer.java \
! classpath/gnu/java/awt/peer/qt/QtPopupMenuPeer.java \
! classpath/gnu/java/awt/peer/qt/QtRepaintThread.java \
! classpath/gnu/java/awt/peer/qt/QtScreenDevice.java \
! classpath/gnu/java/awt/peer/qt/QtScreenDeviceConfiguration.java \
! classpath/gnu/java/awt/peer/qt/QtScrollPanePeer.java \
! classpath/gnu/java/awt/peer/qt/QtScrollbarPeer.java \
! classpath/gnu/java/awt/peer/qt/QtTextAreaPeer.java \
! classpath/gnu/java/awt/peer/qt/QtTextFieldPeer.java \
! classpath/gnu/java/awt/peer/qt/QtToolkit.java \
! classpath/gnu/java/awt/peer/qt/QtVolatileImage.java \
! classpath/gnu/java/awt/peer/qt/QtWindowPeer.java
! 
! gnu_java_beans_source_files = \
! classpath/gnu/java/beans/BeanInfoEmbryo.java \
! classpath/gnu/java/beans/DummyAppletContext.java \
! classpath/gnu/java/beans/DummyAppletStub.java \
! classpath/gnu/java/beans/ExplicitBeanInfo.java \
! classpath/gnu/java/beans/IntrospectionIncubator.java \
! classpath/gnu/java/beans/decoder/AbstractContext.java \
! classpath/gnu/java/beans/decoder/AbstractCreatableObjectContext.java \
! classpath/gnu/java/beans/decoder/AbstractElementHandler.java \
! classpath/gnu/java/beans/decoder/AbstractObjectContext.java \
! classpath/gnu/java/beans/decoder/ArrayContext.java \
! classpath/gnu/java/beans/decoder/ArrayHandler.java \
! classpath/gnu/java/beans/decoder/AssemblyException.java \
! classpath/gnu/java/beans/decoder/BooleanHandler.java \
! classpath/gnu/java/beans/decoder/ByteHandler.java \
! classpath/gnu/java/beans/decoder/CharHandler.java \
! classpath/gnu/java/beans/decoder/ClassHandler.java \
! classpath/gnu/java/beans/decoder/ConstructorContext.java \
! classpath/gnu/java/beans/decoder/Context.java \
! classpath/gnu/java/beans/decoder/DecoderContext.java \
! classpath/gnu/java/beans/decoder/DefaultExceptionListener.java \
! classpath/gnu/java/beans/decoder/DoubleHandler.java \
! classpath/gnu/java/beans/decoder/DummyContext.java \
! classpath/gnu/java/beans/decoder/DummyHandler.java \
! classpath/gnu/java/beans/decoder/ElementHandler.java \
! classpath/gnu/java/beans/decoder/FloatHandler.java \
! classpath/gnu/java/beans/decoder/GrowableArrayContext.java \
! classpath/gnu/java/beans/decoder/IndexContext.java \
! classpath/gnu/java/beans/decoder/IntHandler.java \
! classpath/gnu/java/beans/decoder/JavaHandler.java \
! classpath/gnu/java/beans/decoder/LongHandler.java \
! classpath/gnu/java/beans/decoder/MethodContext.java \
! classpath/gnu/java/beans/decoder/MethodFinder.java \
! classpath/gnu/java/beans/decoder/NullHandler.java \
! classpath/gnu/java/beans/decoder/ObjectContext.java \
! classpath/gnu/java/beans/decoder/ObjectHandler.java \
! classpath/gnu/java/beans/decoder/PersistenceParser.java \
! classpath/gnu/java/beans/decoder/PropertyContext.java \
! classpath/gnu/java/beans/decoder/ShortHandler.java \
! classpath/gnu/java/beans/decoder/SimpleHandler.java \
! classpath/gnu/java/beans/decoder/StaticMethodContext.java \
! classpath/gnu/java/beans/decoder/StringHandler.java \
! classpath/gnu/java/beans/decoder/VoidHandler.java \
! classpath/gnu/java/beans/editors/ColorEditor.java \
! classpath/gnu/java/beans/editors/FontEditor.java \
! classpath/gnu/java/beans/editors/NativeBooleanEditor.java \
! classpath/gnu/java/beans/editors/NativeByteEditor.java \
! classpath/gnu/java/beans/editors/NativeDoubleEditor.java \
! classpath/gnu/java/beans/editors/NativeFloatEditor.java \
! classpath/gnu/java/beans/editors/NativeIntEditor.java \
! classpath/gnu/java/beans/editors/NativeLongEditor.java \
! classpath/gnu/java/beans/editors/NativeShortEditor.java \
! classpath/gnu/java/beans/editors/StringEditor.java
! 
! gnu_java_io_source_files = \
! classpath/gnu/java/io/ASN1ParsingException.java \
! classpath/gnu/java/io/Base64InputStream.java \
! classpath/gnu/java/io/ClassLoaderObjectInputStream.java \
! classpath/gnu/java/io/NullOutputStream.java \
! classpath/gnu/java/io/ObjectIdentityWrapper.java \
! classpath/gnu/java/io/PlatformHelper.java
! 
! gnu_java_io_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_io_source_files)))
! gnu_java_lang_source_files = \
! classpath/gnu/java/lang/ArrayHelper.java \
! classpath/gnu/java/lang/CharData.java \
! classpath/gnu/java/lang/ClassHelper.java \
! gnu/java/lang/MainThread.java
! 
! gnu_java_lang_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_lang_source_files)))
! gnu_java_lang_reflect_source_files = \
! classpath/gnu/java/lang/reflect/TypeSignature.java
! 
! gnu_java_lang_reflect_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_lang_reflect_source_files)))
! gnu_java_locale_source_files = \
  gnu/java/locale/Calendar.java \
  gnu/java/locale/Calendar_de.java \
  gnu/java/locale/Calendar_en.java \
  gnu/java/locale/Calendar_nl.java \
+ classpath/gnu/java/locale/LocaleHelper.java \
  gnu/java/locale/LocaleInformation.java \
  gnu/java/locale/LocaleInformation_af_ZA.java \
  gnu/java/locale/LocaleInformation_ar_AE.java \
*************** gnu/java/locale/LocaleInformation_yi_US.
*** 3104,3701 ****
  gnu/java/locale/LocaleInformation_zh_CN.java \
  gnu/java/locale/LocaleInformation_zh_HK.java \
  gnu/java/locale/LocaleInformation_zh_SG.java \
! gnu/java/locale/LocaleInformation_zh_TW.java \
! gnu/java/math/MPN.java \
! gnu/java/net/BASE64.java \
! gnu/java/net/CRLFInputStream.java \
! gnu/java/net/CRLFOutputStream.java \
  gnu/java/net/DefaultContentHandlerFactory.java \
! gnu/java/net/EmptyX509TrustManager.java \
! gnu/java/net/GetLocalHostAction.java \
! gnu/java/net/HeaderFieldHelper.java \
! gnu/java/net/LineInputStream.java \
  gnu/java/net/PlainDatagramSocketImpl.java \
  gnu/java/net/PlainSocketImpl.java \
! gnu/java/net/URLParseError.java \
  gnu/java/net/protocol/core/Connection.java \
  gnu/java/net/protocol/core/CoreInputStream.java \
  gnu/java/net/protocol/core/Handler.java \
- gnu/java/net/protocol/file/Connection.java \
- gnu/java/net/protocol/file/Handler.java \
- gnu/java/net/protocol/ftp/ActiveModeDTP.java \
- gnu/java/net/protocol/ftp/BlockInputStream.java \
- gnu/java/net/protocol/ftp/BlockOutputStream.java \
- gnu/java/net/protocol/ftp/CompressedInputStream.java \
- gnu/java/net/protocol/ftp/CompressedOutputStream.java \
- gnu/java/net/protocol/ftp/DTP.java \
- gnu/java/net/protocol/ftp/DTPInputStream.java \
- gnu/java/net/protocol/ftp/DTPOutputStream.java \
- gnu/java/net/protocol/ftp/FTPConnection.java \
- gnu/java/net/protocol/ftp/FTPException.java \
- gnu/java/net/protocol/ftp/FTPResponse.java \
- gnu/java/net/protocol/ftp/FTPURLConnection.java \
- gnu/java/net/protocol/ftp/Handler.java \
- gnu/java/net/protocol/ftp/PassiveModeDTP.java \
- gnu/java/net/protocol/ftp/StreamInputStream.java \
- gnu/java/net/protocol/ftp/StreamOutputStream.java \
  gnu/java/net/protocol/gcjlib/Connection.java \
! gnu/java/net/protocol/gcjlib/Handler.java \
! gnu/java/net/protocol/http/Authenticator.java \
! gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java \
! gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java \
! gnu/java/net/protocol/http/ChunkedInputStream.java \
! gnu/java/net/protocol/http/Cookie.java \
! gnu/java/net/protocol/http/CookieManager.java \
! gnu/java/net/protocol/http/Credentials.java \
! gnu/java/net/protocol/http/HTTPConnection.java \
! gnu/java/net/protocol/http/HTTPDateFormat.java \
! gnu/java/net/protocol/http/HTTPURLConnection.java \
! gnu/java/net/protocol/http/Handler.java \
! gnu/java/net/protocol/http/Headers.java \
! gnu/java/net/protocol/http/Request.java \
! gnu/java/net/protocol/http/RequestBodyWriter.java \
! gnu/java/net/protocol/http/Response.java \
! gnu/java/net/protocol/http/ResponseBodyReader.java \
! gnu/java/net/protocol/http/ResponseHeaderHandler.java \
! gnu/java/net/protocol/http/SimpleCookieManager.java \
! gnu/java/net/protocol/http/event/ConnectionEvent.java \
! gnu/java/net/protocol/http/event/ConnectionListener.java \
! gnu/java/net/protocol/http/event/RequestEvent.java \
! gnu/java/net/protocol/http/event/RequestListener.java \
! gnu/java/net/protocol/https/Handler.java \
  gnu/java/net/protocol/jar/Connection.java \
! gnu/java/net/protocol/jar/Handler.java \
! gnu/java/nio/ChannelInputStream.java \
! gnu/java/nio/ChannelOutputStream.java \
! gnu/java/nio/ChannelReader.java \
  gnu/java/nio/DatagramChannelImpl.java \
  gnu/java/nio/DatagramChannelSelectionKey.java \
! gnu/java/nio/FileLockImpl.java \
! gnu/java/nio/InputStreamChannel.java \
! gnu/java/nio/NIOConstants.java \
! gnu/java/nio/NIODatagramSocket.java \
  gnu/java/nio/NIOServerSocket.java \
! gnu/java/nio/NIOSocket.java \
! gnu/java/nio/OutputStreamChannel.java \
! gnu/java/nio/PipeImpl.java \
! gnu/java/nio/SelectionKeyImpl.java \
! gnu/java/nio/SelectorImpl.java \
! gnu/java/nio/SelectorProviderImpl.java \
  gnu/java/nio/ServerSocketChannelImpl.java \
  gnu/java/nio/ServerSocketChannelSelectionKey.java \
  gnu/java/nio/SocketChannelImpl.java \
  gnu/java/nio/SocketChannelSelectionKey.java \
  gnu/java/nio/VMPipe.java \
! gnu/java/nio/VMSelector.java \
! gnu/java/nio/channels/FileChannelImpl.java \
! gnu/java/nio/charset/ISO_8859_1.java \
! gnu/java/nio/charset/Provider.java \
! gnu/java/nio/charset/US_ASCII.java \
! gnu/java/nio/charset/UTF_16.java \
! gnu/java/nio/charset/UTF_16BE.java \
! gnu/java/nio/charset/UTF_16Decoder.java \
! gnu/java/nio/charset/UTF_16Encoder.java \
! gnu/java/nio/charset/UTF_16LE.java \
! gnu/java/nio/charset/UTF_8.java \
! gnu/java/security/Engine.java \
! gnu/java/security/OID.java \
! gnu/java/security/PolicyFile.java \
! gnu/java/security/action/GetPropertyAction.java \
! gnu/java/security/action/GetSecurityPropertyAction.java \
! gnu/java/security/action/SetAccessibleAction.java \
! gnu/java/security/ber/BER.java \
! gnu/java/security/ber/BEREncodingException.java \
! gnu/java/security/ber/BERReader.java \
! gnu/java/security/ber/BERValue.java \
! gnu/java/security/der/BitString.java \
! gnu/java/security/der/DER.java \
! gnu/java/security/der/DEREncodingException.java \
! gnu/java/security/der/DERReader.java \
! gnu/java/security/der/DERValue.java \
! gnu/java/security/der/DERWriter.java \
! gnu/java/security/pkcs/PKCS7SignedData.java \
! gnu/java/security/pkcs/SignerInfo.java \
! gnu/java/security/provider/CollectionCertStoreImpl.java \
! gnu/java/security/provider/DSAKeyFactory.java \
! gnu/java/security/provider/DSAKeyPairGenerator.java \
! gnu/java/security/provider/DSAParameterGenerator.java \
! gnu/java/security/provider/DSAParameters.java \
! gnu/java/security/provider/DSASignature.java \
! gnu/java/security/provider/DefaultPolicy.java \
! gnu/java/security/provider/EncodedKeyFactory.java \
! gnu/java/security/provider/Gnu.java \
! gnu/java/security/provider/GnuDHPublicKey.java \
! gnu/java/security/provider/GnuDSAPrivateKey.java \
! gnu/java/security/provider/GnuDSAPublicKey.java \
! gnu/java/security/provider/GnuRSAPrivateKey.java \
! gnu/java/security/provider/GnuRSAPublicKey.java \
! gnu/java/security/provider/MD2withRSA.java \
! gnu/java/security/provider/MD4withRSA.java \
! gnu/java/security/provider/MD5.java \
! gnu/java/security/provider/MD5withRSA.java \
! gnu/java/security/provider/PKIXCertPathValidatorImpl.java \
! gnu/java/security/provider/RSA.java \
! gnu/java/security/provider/RSAKeyFactory.java \
! gnu/java/security/provider/SHA.java \
! gnu/java/security/provider/SHA1PRNG.java \
! gnu/java/security/provider/SHA1withRSA.java \
! gnu/java/security/provider/X509CertificateFactory.java \
! gnu/java/security/util/Prime.java \
! gnu/java/security/x509/GnuPKIExtension.java \
! gnu/java/security/x509/PolicyNodeImpl.java \
! gnu/java/security/x509/Util.java \
! gnu/java/security/x509/X500DistinguishedName.java \
! gnu/java/security/x509/X509CRL.java \
! gnu/java/security/x509/X509CRLEntry.java \
! gnu/java/security/x509/X509CRLSelectorImpl.java \
! gnu/java/security/x509/X509Certificate.java \
! gnu/java/security/x509/X509CertPath.java \
! gnu/java/security/x509/X509CertSelectorImpl.java \
! gnu/java/security/x509/ext/AuthorityKeyIdentifier.java \
! gnu/java/security/x509/ext/BasicConstraints.java \
! gnu/java/security/x509/ext/CRLNumber.java \
! gnu/java/security/x509/ext/CertificatePolicies.java \
! gnu/java/security/x509/ext/ExtendedKeyUsage.java \
! gnu/java/security/x509/ext/Extension.java \
! gnu/java/security/x509/ext/GeneralNames.java \
! gnu/java/security/x509/ext/IssuerAlternativeNames.java \
! gnu/java/security/x509/ext/KeyUsage.java \
! gnu/java/security/x509/ext/PolicyConstraint.java \
! gnu/java/security/x509/ext/PolicyMappings.java \
! gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java \
! gnu/java/security/x509/ext/ReasonCode.java \
! gnu/java/security/x509/ext/SubjectAlternativeNames.java \
! gnu/java/security/x509/ext/SubjectKeyIdentifier.java \
! gnu/java/text/AttributedFormatBuffer.java \
! gnu/java/text/BaseBreakIterator.java \
! gnu/java/text/CharacterBreakIterator.java \
! gnu/java/text/FormatBuffer.java \
! gnu/java/text/FormatCharacterIterator.java \
! gnu/java/text/LineBreakIterator.java \
! gnu/java/text/SentenceBreakIterator.java \
! gnu/java/text/StringFormatBuffer.java \
! gnu/java/text/WordBreakIterator.java \
! gnu/java/util/DoubleEnumeration.java \
! gnu/java/util/EmptyEnumeration.java \
! gnu/java/util/prefs/FileBasedFactory.java \
! gnu/java/util/prefs/MemoryBasedFactory.java \
! gnu/java/util/prefs/MemoryBasedPreferences.java \
! gnu/java/util/prefs/NodeReader.java \
! gnu/java/util/prefs/NodeWriter.java \
! gnu/regexp/CharIndexed.java \
! gnu/regexp/CharIndexedCharArray.java \
! gnu/regexp/CharIndexedInputStream.java \
! gnu/regexp/CharIndexedString.java \
! gnu/regexp/CharIndexedStringBuffer.java \
! gnu/regexp/RE.java \
! gnu/regexp/REException.java \
! gnu/regexp/REFilterInputStream.java \
! gnu/regexp/REMatch.java \
! gnu/regexp/REMatchEnumeration.java \
! gnu/regexp/RESyntax.java \
! gnu/regexp/REToken.java \
! gnu/regexp/RETokenAny.java \
! gnu/regexp/RETokenBackRef.java \
! gnu/regexp/RETokenChar.java \
! gnu/regexp/RETokenEnd.java \
! gnu/regexp/RETokenEndSub.java \
! gnu/regexp/RETokenLookAhead.java \
! gnu/regexp/RETokenOneOf.java \
! gnu/regexp/RETokenPOSIX.java \
! gnu/regexp/RETokenRange.java \
! gnu/regexp/RETokenRepeated.java \
! gnu/regexp/RETokenStart.java \
! gnu/regexp/RETokenWordBoundary.java \
! gnu/regexp/UncheckedRE.java \
! java/lang/ref/PhantomReference.java \
  java/lang/ref/Reference.java \
! java/lang/ref/ReferenceQueue.java \
! java/lang/ref/SoftReference.java \
! java/lang/ref/WeakReference.java \
! java/lang/reflect/AccessibleObject.java	\
  java/lang/reflect/Array.java \
  java/lang/reflect/Constructor.java \
  java/lang/reflect/Field.java \
! java/lang/reflect/InvocationHandler.java \
! java/lang/reflect/InvocationTargetException.java \
! java/lang/reflect/Member.java \
  java/lang/reflect/Method.java \
! java/lang/reflect/Modifier.java	\
! java/lang/reflect/Proxy.java \
! java/lang/reflect/ReflectPermission.java \
! java/lang/reflect/UndeclaredThrowableException.java \
! java/math/BigDecimal.java \
! java/math/BigInteger.java \
! java/net/Authenticator.java \
! java/net/BindException.java \
! java/net/ConnectException.java \
! java/net/ContentHandler.java \
! java/net/ContentHandlerFactory.java \
! java/net/DatagramPacket.java \
! java/net/DatagramSocket.java \
! java/net/DatagramSocketImpl.java \
! java/net/DatagramSocketImplFactory.java \
! java/net/FileNameMap.java \
! java/net/HttpURLConnection.java	\
! java/net/Inet4Address.java \
! java/net/Inet6Address.java \
  java/net/InetAddress.java \
! java/net/InetSocketAddress.java \
  java/net/JarURLConnection.java \
! java/net/MalformedURLException.java \
! java/net/MulticastSocket.java \
! java/net/NetPermission.java \
! java/net/NetworkInterface.java \
! java/net/NoRouteToHostException.java \
! java/net/PasswordAuthentication.java \
! java/net/PortUnreachableException.java \
! java/net/ProtocolException.java	\
! java/net/ServerSocket.java \
! java/net/Socket.java \
! java/net/SocketAddress.java \
! java/net/SocketException.java \
! java/net/SocketImpl.java \
! java/net/SocketImplFactory.java	\
! java/net/SocketOptions.java \
! java/net/SocketPermission.java \
! java/net/SocketTimeoutException.java \
! java/net/URI.java \
! java/net/URISyntaxException.java \
  java/net/URL.java \
  java/net/URLClassLoader.java \
  java/net/URLConnection.java \
! java/net/URLDecoder.java \
! java/net/URLEncoder.java \
! java/net/URLStreamHandler.java \
! java/net/URLStreamHandlerFactory.java \
! java/net/UnknownHostException.java \
! java/net/UnknownServiceException.java \
  java/nio/Buffer.java \
! java/nio/BufferOverflowException.java \
! java/nio/BufferUnderflowException.java \
! java/nio/ByteBuffer.java \
! java/nio/ByteBufferHelper.java \
! java/nio/ByteBufferImpl.java \
! java/nio/ByteOrder.java \
! java/nio/CharBuffer.java \
! java/nio/CharBufferImpl.java \
! java/nio/CharViewBufferImpl.java \
  java/nio/DirectByteBufferImpl.java \
! java/nio/DoubleBuffer.java \
! java/nio/DoubleBufferImpl.java \
! java/nio/DoubleViewBufferImpl.java \
! java/nio/FloatBuffer.java \
! java/nio/FloatBufferImpl.java \
! java/nio/FloatViewBufferImpl.java \
! java/nio/IntBuffer.java \
! java/nio/IntBufferImpl.java \
! java/nio/IntViewBufferImpl.java \
! java/nio/InvalidMarkException.java \
! java/nio/LongBuffer.java \
! java/nio/LongBufferImpl.java \
! java/nio/LongViewBufferImpl.java \
  java/nio/MappedByteBuffer.java \
  java/nio/MappedByteBufferImpl.java \
! java/nio/ReadOnlyBufferException.java \
! java/nio/ShortBuffer.java \
! java/nio/ShortBufferImpl.java \
! java/nio/ShortViewBufferImpl.java \
! java/nio/VMDirectByteBuffer.java \
! java/nio/channels/AlreadyConnectedException.java \
! java/nio/channels/AsynchronousCloseException.java \
! java/nio/channels/ByteChannel.java \
! java/nio/channels/CancelledKeyException.java \
! java/nio/channels/Channel.java \
  java/nio/channels/Channels.java \
! java/nio/channels/ClosedByInterruptException.java \
! java/nio/channels/ClosedChannelException.java \
! java/nio/channels/ClosedSelectorException.java \
! java/nio/channels/ConnectionPendingException.java \
! java/nio/channels/DatagramChannel.java \
! java/nio/channels/FileChannel.java \
! java/nio/channels/FileLock.java \
! java/nio/channels/FileLockInterruptionException.java \
! java/nio/channels/GatheringByteChannel.java \
! java/nio/channels/IllegalBlockingModeException.java \
! java/nio/channels/IllegalSelectorException.java \
! java/nio/channels/InterruptibleChannel.java \
! java/nio/channels/NoConnectionPendingException.java \
! java/nio/channels/NonReadableChannelException.java \
! java/nio/channels/NonWritableChannelException.java \
! java/nio/channels/NotYetBoundException.java \
! java/nio/channels/NotYetConnectedException.java \
! java/nio/channels/OverlappingFileLockException.java \
! java/nio/channels/Pipe.java \
! java/nio/channels/ReadableByteChannel.java \
! java/nio/channels/ScatteringByteChannel.java \
! java/nio/channels/SelectableChannel.java \
! java/nio/channels/SelectionKey.java \
! java/nio/channels/Selector.java \
! java/nio/channels/ServerSocketChannel.java \
! java/nio/channels/SocketChannel.java \
! java/nio/channels/UnresolvedAddressException.java \
! java/nio/channels/UnsupportedAddressTypeException.java \
! java/nio/channels/WritableByteChannel.java \
! java/nio/channels/spi/AbstractInterruptibleChannel.java \
! java/nio/channels/spi/AbstractSelectableChannel.java \
! java/nio/channels/spi/AbstractSelectionKey.java \
! java/nio/channels/spi/AbstractSelector.java \
! java/nio/channels/spi/SelectorProvider.java \
! java/nio/charset/CharacterCodingException.java \
  java/nio/charset/Charset.java \
! java/nio/charset/CharsetDecoder.java \
! java/nio/charset/CharsetEncoder.java \
! java/nio/charset/CoderMalfunctionError.java \
! java/nio/charset/CoderResult.java \
! java/nio/charset/CodingErrorAction.java \
! java/nio/charset/IllegalCharsetNameException.java \
! java/nio/charset/MalformedInputException.java \
! java/nio/charset/UnmappableCharacterException.java \
! java/nio/charset/UnsupportedCharsetException.java \
! java/nio/charset/spi/CharsetProvider.java \
  java/security/AccessControlContext.java \
! java/security/AccessControlException.java \
  java/security/AccessController.java \
! java/security/AlgorithmParameterGenerator.java \
! java/security/AlgorithmParameterGeneratorSpi.java \
! java/security/AlgorithmParameters.java \
! java/security/AlgorithmParametersSpi.java \
! java/security/AllPermission.java \
! java/security/BasicPermission.java \
! java/security/Certificate.java \
! java/security/CodeSource.java \
! java/security/DigestException.java \
! java/security/DigestInputStream.java \
! java/security/DigestOutputStream.java \
! java/security/DomainCombiner.java \
! java/security/DummyKeyPairGenerator.java \
! java/security/DummyMessageDigest.java \
! java/security/DummySignature.java \
! java/security/GeneralSecurityException.java \
! java/security/Guard.java \
! java/security/GuardedObject.java \
! java/security/Identity.java \
! java/security/IdentityScope.java \
! java/security/InvalidAlgorithmParameterException.java \
! java/security/InvalidKeyException.java \
! java/security/InvalidParameterException.java \
! java/security/Key.java \
! java/security/KeyException.java \
! java/security/KeyFactory.java \
! java/security/KeyFactorySpi.java \
! java/security/KeyManagementException.java \
! java/security/KeyPair.java \
! java/security/KeyPairGenerator.java \
! java/security/KeyPairGeneratorSpi.java \
! java/security/KeyStore.java \
! java/security/KeyStoreException.java \
! java/security/KeyStoreSpi.java \
! java/security/MessageDigest.java \
! java/security/MessageDigestSpi.java \
! java/security/NoSuchAlgorithmException.java \
! java/security/NoSuchProviderException.java \
! java/security/Permission.java \
! java/security/PermissionCollection.java \
! java/security/Permissions.java \
! java/security/Policy.java \
! java/security/Principal.java \
! java/security/PrivateKey.java \
! java/security/PrivilegedAction.java \
! java/security/PrivilegedActionException.java \
! java/security/PrivilegedExceptionAction.java \
! java/security/ProtectionDomain.java \
! java/security/Provider.java \
! java/security/ProviderException.java \
! java/security/PublicKey.java \
! java/security/SecureClassLoader.java \
! java/security/SecureRandom.java \
! java/security/SecureRandomSpi.java \
! java/security/Security.java \
! java/security/SecurityPermission.java \
! java/security/Signature.java \
! java/security/SignatureException.java \
! java/security/SignatureSpi.java \
! java/security/SignedObject.java \
! java/security/Signer.java \
! java/security/UnrecoverableKeyException.java \
! java/security/UnresolvedPermission.java \
! java/security/acl/Acl.java \
! java/security/acl/AclEntry.java \
! java/security/acl/AclNotFoundException.java \
! java/security/acl/Group.java \
! java/security/acl/LastOwnerException.java \
! java/security/acl/NotOwnerException.java \
! java/security/acl/Owner.java \
! java/security/acl/Permission.java \
! java/security/cert/CRL.java \
! java/security/cert/CRLException.java \
! java/security/cert/CRLSelector.java \
! java/security/cert/CertPath.java \
! java/security/cert/CertPathBuilder.java \
! java/security/cert/CertPathBuilderException.java \
! java/security/cert/CertPathBuilderResult.java \
! java/security/cert/CertPathBuilderSpi.java \
! java/security/cert/CertPathParameters.java \
! java/security/cert/CertPathValidator.java \
! java/security/cert/CertPathValidatorException.java \
! java/security/cert/CertPathValidatorResult.java \
! java/security/cert/CertPathValidatorSpi.java \
! java/security/cert/CertSelector.java \
! java/security/cert/CertStore.java \
! java/security/cert/CertStoreException.java \
! java/security/cert/CertStoreParameters.java \
! java/security/cert/CertStoreSpi.java \
! java/security/cert/Certificate.java \
! java/security/cert/CertificateEncodingException.java \
! java/security/cert/CertificateException.java \
! java/security/cert/CertificateExpiredException.java \
! java/security/cert/CertificateFactory.java \
! java/security/cert/CertificateFactorySpi.java \
! java/security/cert/CertificateNotYetValidException.java \
! java/security/cert/CertificateParsingException.java \
! java/security/cert/CollectionCertStoreParameters.java \
! java/security/cert/LDAPCertStoreParameters.java \
! java/security/cert/PKIXBuilderParameters.java \
! java/security/cert/PKIXCertPathBuilderResult.java \
! java/security/cert/PKIXCertPathChecker.java \
! java/security/cert/PKIXCertPathValidatorResult.java \
! java/security/cert/PKIXParameters.java \
! java/security/cert/PolicyNode.java \
! java/security/cert/PolicyQualifierInfo.java \
! java/security/cert/TrustAnchor.java \
! java/security/cert/X509CRL.java \
! java/security/cert/X509CRLEntry.java \
! java/security/cert/X509CRLSelector.java \
! java/security/cert/X509CertSelector.java \
! java/security/cert/X509Certificate.java \
! java/security/cert/X509Extension.java \
! java/security/interfaces/DSAKey.java \
! java/security/interfaces/DSAKeyPairGenerator.java \
! java/security/interfaces/DSAParams.java \
! java/security/interfaces/DSAPrivateKey.java \
! java/security/interfaces/DSAPublicKey.java \
! java/security/interfaces/RSAKey.java \
! java/security/interfaces/RSAMultiPrimePrivateCrtKey.java \
! java/security/interfaces/RSAPrivateCrtKey.java \
! java/security/interfaces/RSAPrivateKey.java \
! java/security/interfaces/RSAPublicKey.java \
! java/security/spec/AlgorithmParameterSpec.java \
! java/security/spec/DSAParameterSpec.java \
! java/security/spec/DSAPrivateKeySpec.java \
! java/security/spec/DSAPublicKeySpec.java \
! java/security/spec/EncodedKeySpec.java \
! java/security/spec/InvalidKeySpecException.java \
! java/security/spec/InvalidParameterSpecException.java \
! java/security/spec/KeySpec.java \
! java/security/spec/PKCS8EncodedKeySpec.java \
! java/security/spec/PSSParameterSpec.java \
! java/security/spec/RSAKeyGenParameterSpec.java \
! java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java\
! java/security/spec/RSAOtherPrimeInfo.java \
! java/security/spec/RSAPrivateCrtKeySpec.java \
! java/security/spec/RSAPrivateKeySpec.java \
! java/security/spec/RSAPublicKeySpec.java \
! java/security/spec/X509EncodedKeySpec.java \
! java/sql/Array.java \
! java/sql/BatchUpdateException.java \
! java/sql/Blob.java \
! java/sql/CallableStatement.java	\
! java/sql/Clob.java \
! java/sql/Connection.java \
! java/sql/DataTruncation.java \
! java/sql/DatabaseMetaData.java \
! java/sql/Date.java \
! java/sql/Driver.java \
! java/sql/DriverManager.java \
! java/sql/DriverPropertyInfo.java \
! java/sql/ParameterMetaData.java \
! java/sql/PreparedStatement.java	\
! java/sql/Ref.java \
! java/sql/ResultSet.java	\
! java/sql/ResultSetMetaData.java	\
! java/sql/SQLData.java \
! java/sql/SQLException.java \
! java/sql/SQLInput.java \
! java/sql/SQLOutput.java \
! java/sql/SQLPermission.java \
! java/sql/SQLWarning.java \
! java/sql/Savepoint.java \
! java/sql/Statement.java	\
! java/sql/Struct.java	\
! java/sql/Time.java \
! java/sql/Timestamp.java	\
! java/sql/Types.java \
! java/text/Annotation.java \
! java/text/AttributedCharacterIterator.java \
! java/text/AttributedString.java	\
! java/text/AttributedStringIterator.java	\
! java/text/BreakIterator.java \
! java/text/CharacterIterator.java \
! java/text/ChoiceFormat.java \
! java/text/CollationElementIterator.java	\
! java/text/CollationKey.java \
! java/text/Collator.java	\
  java/text/DateFormat.java \
  java/text/DateFormatSymbols.java \
! java/text/DecimalFormat.java \
  java/text/DecimalFormatSymbols.java \
! java/text/FieldPosition.java \
! java/text/Format.java \
! java/text/MessageFormat.java \
! java/text/NumberFormat.java \
! java/text/ParseException.java \
! java/text/ParsePosition.java \
! java/text/RuleBasedCollator.java \
! java/text/SimpleDateFormat.java	\
! java/text/StringCharacterIterator.java \
! java/util/jar/Attributes.java \
! java/util/jar/JarEntry.java \
! java/util/jar/JarException.java \
! java/util/jar/JarFile.java \
! java/util/jar/JarInputStream.java \
! java/util/jar/JarOutputStream.java \
! java/util/jar/Manifest.java \
! java/util/zip/Adler32.java \
! java/util/zip/CRC32.java \
! java/util/zip/CheckedInputStream.java \
! java/util/zip/CheckedOutputStream.java \
! java/util/zip/Checksum.java \
! java/util/zip/DataFormatException.java \
  java/util/zip/Deflater.java \
! java/util/zip/DeflaterOutputStream.java	\
  java/util/zip/GZIPInputStream.java \
  java/util/zip/GZIPOutputStream.java \
  java/util/zip/Inflater.java \
  java/util/zip/InflaterInputStream.java \
! java/util/zip/ZipConstants.java	\
! java/util/zip/ZipEntry.java \
! java/util/zip/ZipException.java	\
! java/util/zip/ZipFile.java \
! java/util/zip/ZipInputStream.java \
! java/util/zip/ZipOutputStream.java \
! $(rmi_java_source_files) \
! $(awt_java_source_files) \
! $(convert_source_files) \
! $(javax_source_files) \
! $(org_source_files)
  
! java_source_files = $(special_java_source_files) $(ordinary_java_source_files)
! math_c_source_files = \
!   java/lang/dtoa.c        java/lang/k_rem_pio2.c  java/lang/s_tan.c       \
!   java/lang/e_acos.c      java/lang/k_sin.c       java/lang/strtod.c      \
!   java/lang/e_asin.c      java/lang/k_tan.c       java/lang/w_acos.c      \
!   java/lang/e_atan2.c     java/lang/mprec.c       java/lang/w_asin.c      \
!   java/lang/e_exp.c       java/lang/s_atan.c      java/lang/w_atan2.c     \
!   java/lang/e_fmod.c      java/lang/s_ceil.c      java/lang/w_exp.c       \
!   java/lang/e_log.c       java/lang/s_copysign.c  java/lang/w_fmod.c      \
!   java/lang/e_pow.c       java/lang/s_cos.c       java/lang/w_log.c       \
!   java/lang/e_rem_pio2.c  java/lang/s_fabs.c      java/lang/w_pow.c       \
!   java/lang/e_remainder.c java/lang/s_floor.c     java/lang/w_remainder.c \
!   java/lang/e_scalb.c     java/lang/s_rint.c      java/lang/w_sqrt.c      \
!   java/lang/e_sqrt.c      java/lang/s_scalbn.c    java/lang/sf_rint.c     \
!   java/lang/k_cos.c       java/lang/s_sin.c       java/lang/sf_fabs.c
  
  nat_source_files = \
  gnu/gcj/natCore.cc \
  gnu/gcj/convert/JIS0208_to_Unicode.cc \
  gnu/gcj/convert/JIS0212_to_Unicode.cc \
--- 1561,5855 ----
  gnu/java/locale/LocaleInformation_zh_CN.java \
  gnu/java/locale/LocaleInformation_zh_HK.java \
  gnu/java/locale/LocaleInformation_zh_SG.java \
! gnu/java/locale/LocaleInformation_zh_TW.java
! 
! gnu_java_locale_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_locale_source_files)))
! gnu_java_math_source_files = \
! classpath/gnu/java/math/MPN.java
! 
! gnu_java_math_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_math_source_files)))
! gnu_java_net_source_files = \
! classpath/gnu/java/net/BASE64.java \
! classpath/gnu/java/net/CRLFInputStream.java \
! classpath/gnu/java/net/CRLFOutputStream.java \
  gnu/java/net/DefaultContentHandlerFactory.java \
! classpath/gnu/java/net/EmptyX509TrustManager.java \
! classpath/gnu/java/net/GetLocalHostAction.java \
! classpath/gnu/java/net/HeaderFieldHelper.java \
! classpath/gnu/java/net/LineInputStream.java \
  gnu/java/net/PlainDatagramSocketImpl.java \
  gnu/java/net/PlainSocketImpl.java \
! classpath/gnu/java/net/URLParseError.java \
  gnu/java/net/protocol/core/Connection.java \
  gnu/java/net/protocol/core/CoreInputStream.java \
  gnu/java/net/protocol/core/Handler.java \
  gnu/java/net/protocol/gcjlib/Connection.java \
! gnu/java/net/protocol/gcjlib/Handler.java
! 
! gnu_java_net_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_net_source_files)))
! gnu_java_net_protocol_file_source_files = \
! classpath/gnu/java/net/protocol/file/Connection.java \
! classpath/gnu/java/net/protocol/file/Handler.java
! 
! gnu_java_net_protocol_file_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_net_protocol_file_source_files)))
! gnu_java_net_protocol_ftp_source_files = \
! classpath/gnu/java/net/protocol/ftp/ActiveModeDTP.java \
! classpath/gnu/java/net/protocol/ftp/BlockInputStream.java \
! classpath/gnu/java/net/protocol/ftp/BlockOutputStream.java \
! classpath/gnu/java/net/protocol/ftp/CompressedInputStream.java \
! classpath/gnu/java/net/protocol/ftp/CompressedOutputStream.java \
! classpath/gnu/java/net/protocol/ftp/DTP.java \
! classpath/gnu/java/net/protocol/ftp/DTPInputStream.java \
! classpath/gnu/java/net/protocol/ftp/DTPOutputStream.java \
! classpath/gnu/java/net/protocol/ftp/FTPConnection.java \
! classpath/gnu/java/net/protocol/ftp/FTPException.java \
! classpath/gnu/java/net/protocol/ftp/FTPResponse.java \
! classpath/gnu/java/net/protocol/ftp/FTPURLConnection.java \
! classpath/gnu/java/net/protocol/ftp/Handler.java \
! classpath/gnu/java/net/protocol/ftp/PassiveModeDTP.java \
! classpath/gnu/java/net/protocol/ftp/StreamInputStream.java \
! classpath/gnu/java/net/protocol/ftp/StreamOutputStream.java
! 
! gnu_java_net_protocol_ftp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_net_protocol_ftp_source_files)))
! gnu_java_net_protocol_http_source_files = \
! classpath/gnu/java/net/protocol/http/Authenticator.java \
! classpath/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java \
! classpath/gnu/java/net/protocol/http/ChunkedInputStream.java \
! classpath/gnu/java/net/protocol/http/Cookie.java \
! classpath/gnu/java/net/protocol/http/CookieManager.java \
! classpath/gnu/java/net/protocol/http/Credentials.java \
! classpath/gnu/java/net/protocol/http/HTTPConnection.java \
! classpath/gnu/java/net/protocol/http/HTTPDateFormat.java \
! classpath/gnu/java/net/protocol/http/HTTPURLConnection.java \
! classpath/gnu/java/net/protocol/http/Handler.java \
! classpath/gnu/java/net/protocol/http/Headers.java \
! classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java \
! classpath/gnu/java/net/protocol/http/Request.java \
! classpath/gnu/java/net/protocol/http/RequestBodyWriter.java \
! classpath/gnu/java/net/protocol/http/Response.java \
! classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java \
! classpath/gnu/java/net/protocol/http/SimpleCookieManager.java
! 
! gnu_java_net_protocol_http_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_net_protocol_http_source_files)))
! gnu_java_net_protocol_https_source_files = \
! classpath/gnu/java/net/protocol/https/Handler.java
! 
! gnu_java_net_protocol_https_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_net_protocol_https_source_files)))
! gnu_java_net_protocol_jar_source_files = \
  gnu/java/net/protocol/jar/Connection.java \
! classpath/gnu/java/net/protocol/jar/Handler.java
! 
! gnu_java_net_protocol_jar_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_net_protocol_jar_source_files)))
! gnu_java_nio_source_files = \
! classpath/gnu/java/nio/ChannelInputStream.java \
! classpath/gnu/java/nio/ChannelOutputStream.java \
! classpath/gnu/java/nio/ChannelReader.java \
  gnu/java/nio/DatagramChannelImpl.java \
  gnu/java/nio/DatagramChannelSelectionKey.java \
! classpath/gnu/java/nio/FileLockImpl.java \
! classpath/gnu/java/nio/InputStreamChannel.java \
! classpath/gnu/java/nio/NIOConstants.java \
! classpath/gnu/java/nio/NIODatagramSocket.java \
  gnu/java/nio/NIOServerSocket.java \
! classpath/gnu/java/nio/NIOSocket.java \
! classpath/gnu/java/nio/OutputStreamChannel.java \
! classpath/gnu/java/nio/PipeImpl.java \
! classpath/gnu/java/nio/SelectionKeyImpl.java \
! classpath/gnu/java/nio/SelectorImpl.java \
! classpath/gnu/java/nio/SelectorProviderImpl.java \
  gnu/java/nio/ServerSocketChannelImpl.java \
  gnu/java/nio/ServerSocketChannelSelectionKey.java \
  gnu/java/nio/SocketChannelImpl.java \
  gnu/java/nio/SocketChannelSelectionKey.java \
  gnu/java/nio/VMPipe.java \
! gnu/java/nio/VMSelector.java
! 
! gnu_java_nio_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_nio_source_files)))
! gnu_java_nio_channels_source_files = \
! gnu/java/nio/channels/FileChannelImpl.java
! 
! gnu_java_nio_channels_header_files = $(patsubst %.java,%.h,$(gnu_java_nio_channels_source_files))
! gnu_java_nio_charset_source_files = \
! classpath/gnu/java/nio/charset/ByteCharset.java \
! classpath/gnu/java/nio/charset/Cp424.java \
! classpath/gnu/java/nio/charset/Cp437.java \
! classpath/gnu/java/nio/charset/Cp737.java \
! classpath/gnu/java/nio/charset/Cp775.java \
! classpath/gnu/java/nio/charset/Cp850.java \
! classpath/gnu/java/nio/charset/Cp852.java \
! classpath/gnu/java/nio/charset/Cp855.java \
! classpath/gnu/java/nio/charset/Cp857.java \
! classpath/gnu/java/nio/charset/Cp860.java \
! classpath/gnu/java/nio/charset/Cp861.java \
! classpath/gnu/java/nio/charset/Cp862.java \
! classpath/gnu/java/nio/charset/Cp863.java \
! classpath/gnu/java/nio/charset/Cp864.java \
! classpath/gnu/java/nio/charset/Cp865.java \
! classpath/gnu/java/nio/charset/Cp866.java \
! classpath/gnu/java/nio/charset/Cp869.java \
! classpath/gnu/java/nio/charset/Cp874.java \
! classpath/gnu/java/nio/charset/EncodingHelper.java \
! classpath/gnu/java/nio/charset/ISO_8859_1.java \
! classpath/gnu/java/nio/charset/ISO_8859_13.java \
! classpath/gnu/java/nio/charset/ISO_8859_15.java \
! classpath/gnu/java/nio/charset/ISO_8859_2.java \
! classpath/gnu/java/nio/charset/ISO_8859_3.java \
! classpath/gnu/java/nio/charset/ISO_8859_4.java \
! classpath/gnu/java/nio/charset/ISO_8859_5.java \
! classpath/gnu/java/nio/charset/ISO_8859_6.java \
! classpath/gnu/java/nio/charset/ISO_8859_7.java \
! classpath/gnu/java/nio/charset/ISO_8859_8.java \
! classpath/gnu/java/nio/charset/ISO_8859_9.java \
! classpath/gnu/java/nio/charset/KOI_8.java \
! classpath/gnu/java/nio/charset/MS874.java \
! classpath/gnu/java/nio/charset/MacCentralEurope.java \
! classpath/gnu/java/nio/charset/MacCroatian.java \
! classpath/gnu/java/nio/charset/MacCyrillic.java \
! classpath/gnu/java/nio/charset/MacDingbat.java \
! classpath/gnu/java/nio/charset/MacGreek.java \
! classpath/gnu/java/nio/charset/MacIceland.java \
! classpath/gnu/java/nio/charset/MacRoman.java \
! classpath/gnu/java/nio/charset/MacRomania.java \
! classpath/gnu/java/nio/charset/MacSymbol.java \
! classpath/gnu/java/nio/charset/MacThai.java \
! classpath/gnu/java/nio/charset/MacTurkish.java \
! classpath/gnu/java/nio/charset/Provider.java \
! classpath/gnu/java/nio/charset/US_ASCII.java \
! classpath/gnu/java/nio/charset/UTF_16.java \
! classpath/gnu/java/nio/charset/UTF_16BE.java \
! classpath/gnu/java/nio/charset/UTF_16Decoder.java \
! classpath/gnu/java/nio/charset/UTF_16Encoder.java \
! classpath/gnu/java/nio/charset/UTF_16LE.java \
! classpath/gnu/java/nio/charset/UTF_8.java \
! classpath/gnu/java/nio/charset/UnicodeLittle.java \
! classpath/gnu/java/nio/charset/Windows1250.java \
! classpath/gnu/java/nio/charset/Windows1251.java \
! classpath/gnu/java/nio/charset/Windows1252.java \
! classpath/gnu/java/nio/charset/Windows1253.java \
! classpath/gnu/java/nio/charset/Windows1254.java \
! classpath/gnu/java/nio/charset/Windows1255.java \
! classpath/gnu/java/nio/charset/Windows1256.java \
! classpath/gnu/java/nio/charset/Windows1257.java \
! classpath/gnu/java/nio/charset/Windows1258.java
! 
! gnu_java_nio_charset_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_nio_charset_source_files)))
! gnu_java_rmi_source_files = \
! classpath/gnu/java/rmi/RMIMarshalledObjectInputStream.java \
! classpath/gnu/java/rmi/RMIMarshalledObjectOutputStream.java \
! gnu/java/rmi/rmic/Compile_gcj.java \
! gnu/java/rmi/rmic/Compile_jikes.java \
! gnu/java/rmi/rmic/Compile_kjc.java \
! gnu/java/rmi/rmic/Compiler.java \
! gnu/java/rmi/rmic/CompilerProcess.java \
! gnu/java/rmi/rmic/RMIC.java \
! gnu/java/rmi/rmic/RMICException.java \
! gnu/java/rmi/rmic/TabbedWriter.java
! 
! gnu_java_rmi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_source_files)))
! gnu_java_rmi_dgc_source_files = \
! classpath/gnu/java/rmi/dgc/DGCImpl.java \
! classpath/gnu/java/rmi/dgc/DGCImpl_Skel.java \
! classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java
! 
! gnu_java_rmi_dgc_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_dgc_source_files)))
! gnu_java_rmi_registry_source_files = \
! classpath/gnu/java/rmi/registry/RegistryImpl.java \
! classpath/gnu/java/rmi/registry/RegistryImpl_Skel.java \
! classpath/gnu/java/rmi/registry/RegistryImpl_Stub.java
! 
! gnu_java_rmi_registry_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_registry_source_files)))
! gnu_java_rmi_server_source_files = \
! classpath/gnu/java/rmi/server/ConnectionRunnerPool.java \
! classpath/gnu/java/rmi/server/ProtocolConstants.java \
! classpath/gnu/java/rmi/server/RMIClassLoaderImpl.java \
! classpath/gnu/java/rmi/server/RMIDefaultSocketFactory.java \
! classpath/gnu/java/rmi/server/RMIHashes.java \
! classpath/gnu/java/rmi/server/RMIIncomingThread.java \
! classpath/gnu/java/rmi/server/RMIObjectInputStream.java \
! classpath/gnu/java/rmi/server/RMIObjectOutputStream.java \
! classpath/gnu/java/rmi/server/RMIVoidValue.java \
! classpath/gnu/java/rmi/server/UnicastConnection.java \
! classpath/gnu/java/rmi/server/UnicastConnectionManager.java \
! classpath/gnu/java/rmi/server/UnicastRef.java \
! classpath/gnu/java/rmi/server/UnicastRemoteCall.java \
! classpath/gnu/java/rmi/server/UnicastRemoteStub.java \
! classpath/gnu/java/rmi/server/UnicastServer.java \
! classpath/gnu/java/rmi/server/UnicastServerRef.java
! 
! gnu_java_rmi_server_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_server_source_files)))
! gnu_java_security_source_files = \
! classpath/gnu/java/security/Engine.java \
! classpath/gnu/java/security/OID.java \
! classpath/gnu/java/security/PolicyFile.java
! 
! gnu_java_security_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_source_files)))
! gnu_java_security_action_source_files = \
! classpath/gnu/java/security/action/GetPropertyAction.java \
! classpath/gnu/java/security/action/GetSecurityPropertyAction.java \
! classpath/gnu/java/security/action/SetAccessibleAction.java
! 
! gnu_java_security_action_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_action_source_files)))
! gnu_java_security_ber_source_files = \
! classpath/gnu/java/security/ber/BER.java \
! classpath/gnu/java/security/ber/BEREncodingException.java \
! classpath/gnu/java/security/ber/BERReader.java \
! classpath/gnu/java/security/ber/BERValue.java
! 
! gnu_java_security_ber_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_ber_source_files)))
! gnu_java_security_der_source_files = \
! classpath/gnu/java/security/der/BitString.java \
! classpath/gnu/java/security/der/DER.java \
! classpath/gnu/java/security/der/DEREncodingException.java \
! classpath/gnu/java/security/der/DERReader.java \
! classpath/gnu/java/security/der/DERValue.java \
! classpath/gnu/java/security/der/DERWriter.java
! 
! gnu_java_security_der_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_der_source_files)))
! gnu_java_security_pkcs_source_files = \
! classpath/gnu/java/security/pkcs/PKCS7SignedData.java \
! classpath/gnu/java/security/pkcs/SignerInfo.java
! 
! gnu_java_security_pkcs_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_pkcs_source_files)))
! gnu_java_security_provider_source_files = \
! classpath/gnu/java/security/provider/CollectionCertStoreImpl.java \
! classpath/gnu/java/security/provider/DSAKeyFactory.java \
! classpath/gnu/java/security/provider/DSAKeyPairGenerator.java \
! classpath/gnu/java/security/provider/DSAParameterGenerator.java \
! classpath/gnu/java/security/provider/DSAParameters.java \
! classpath/gnu/java/security/provider/DSASignature.java \
! classpath/gnu/java/security/provider/DefaultPolicy.java \
! classpath/gnu/java/security/provider/DiffieHellmanKeyFactoryImpl.java \
! classpath/gnu/java/security/provider/DiffieHellmanKeyPairGeneratorImpl.java \
! classpath/gnu/java/security/provider/EncodedKeyFactory.java \
! classpath/gnu/java/security/provider/Gnu.java \
! classpath/gnu/java/security/provider/GnuDHPublicKey.java \
! classpath/gnu/java/security/provider/GnuDSAPrivateKey.java \
! classpath/gnu/java/security/provider/GnuDSAPublicKey.java \
! classpath/gnu/java/security/provider/GnuRSAPrivateKey.java \
! classpath/gnu/java/security/provider/GnuRSAPublicKey.java \
! classpath/gnu/java/security/provider/MD2withRSA.java \
! classpath/gnu/java/security/provider/MD4withRSA.java \
! classpath/gnu/java/security/provider/MD5.java \
! classpath/gnu/java/security/provider/MD5withRSA.java \
! classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java \
! classpath/gnu/java/security/provider/RSA.java \
! classpath/gnu/java/security/provider/RSAKeyFactory.java \
! classpath/gnu/java/security/provider/SHA.java \
! classpath/gnu/java/security/provider/SHA1PRNG.java \
! classpath/gnu/java/security/provider/SHA1withRSA.java \
! classpath/gnu/java/security/provider/X509CertificateFactory.java
! 
! gnu_java_security_provider_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_provider_source_files)))
! gnu_java_security_util_source_files = \
! classpath/gnu/java/security/util/Prime.java
! 
! gnu_java_security_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_util_source_files)))
! gnu_java_security_x509_source_files = \
! classpath/gnu/java/security/x509/GnuPKIExtension.java \
! classpath/gnu/java/security/x509/PolicyNodeImpl.java \
! classpath/gnu/java/security/x509/Util.java \
! classpath/gnu/java/security/x509/X500DistinguishedName.java \
! classpath/gnu/java/security/x509/X509CRL.java \
! classpath/gnu/java/security/x509/X509CRLEntry.java \
! classpath/gnu/java/security/x509/X509CRLSelectorImpl.java \
! classpath/gnu/java/security/x509/X509CertPath.java \
! classpath/gnu/java/security/x509/X509CertSelectorImpl.java \
! classpath/gnu/java/security/x509/X509Certificate.java
! 
! gnu_java_security_x509_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_x509_source_files)))
! gnu_java_security_x509_ext_source_files = \
! classpath/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java \
! classpath/gnu/java/security/x509/ext/BasicConstraints.java \
! classpath/gnu/java/security/x509/ext/CRLNumber.java \
! classpath/gnu/java/security/x509/ext/CertificatePolicies.java \
! classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java \
! classpath/gnu/java/security/x509/ext/Extension.java \
! classpath/gnu/java/security/x509/ext/GeneralNames.java \
! classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java \
! classpath/gnu/java/security/x509/ext/KeyUsage.java \
! classpath/gnu/java/security/x509/ext/PolicyConstraint.java \
! classpath/gnu/java/security/x509/ext/PolicyMappings.java \
! classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java \
! classpath/gnu/java/security/x509/ext/ReasonCode.java \
! classpath/gnu/java/security/x509/ext/SubjectAlternativeNames.java \
! classpath/gnu/java/security/x509/ext/SubjectKeyIdentifier.java
! 
! gnu_java_security_x509_ext_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_x509_ext_source_files)))
! gnu_java_text_source_files = \
! classpath/gnu/java/text/AttributedFormatBuffer.java \
! classpath/gnu/java/text/BaseBreakIterator.java \
! classpath/gnu/java/text/CharacterBreakIterator.java \
! classpath/gnu/java/text/FormatBuffer.java \
! classpath/gnu/java/text/FormatCharacterIterator.java \
! classpath/gnu/java/text/LineBreakIterator.java \
! classpath/gnu/java/text/SentenceBreakIterator.java \
! classpath/gnu/java/text/StringFormatBuffer.java \
! classpath/gnu/java/text/WordBreakIterator.java
! 
! gnu_java_text_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_text_source_files)))
! gnu_java_util_source_files = \
! classpath/gnu/java/util/DoubleEnumeration.java \
! classpath/gnu/java/util/EmptyEnumeration.java
! 
! gnu_java_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_util_source_files)))
! gnu_java_util_prefs_source_files = \
! classpath/gnu/java/util/prefs/FileBasedFactory.java \
! classpath/gnu/java/util/prefs/MemoryBasedFactory.java \
! classpath/gnu/java/util/prefs/MemoryBasedPreferences.java \
! classpath/gnu/java/util/prefs/NodeReader.java \
! classpath/gnu/java/util/prefs/NodeWriter.java
! 
! gnu_java_util_prefs_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_util_prefs_source_files)))
! gnu_javax_crypto_source_files = \
! classpath/gnu/javax/crypto/DiffieHellmanImpl.java \
! classpath/gnu/javax/crypto/GnuDHPrivateKey.java \
! classpath/gnu/javax/crypto/RSACipherImpl.java
! 
! gnu_javax_crypto_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_crypto_source_files)))
! gnu_javax_imageio_bmp_source_files = \
! classpath/gnu/javax/imageio/bmp/BMPDecoder.java \
! classpath/gnu/javax/imageio/bmp/BMPException.java \
! classpath/gnu/javax/imageio/bmp/BMPFileHeader.java \
! classpath/gnu/javax/imageio/bmp/BMPImageReader.java \
! classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java \
! classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java \
! classpath/gnu/javax/imageio/bmp/DecodeBF16.java \
! classpath/gnu/javax/imageio/bmp/DecodeBF32.java \
! classpath/gnu/javax/imageio/bmp/DecodeRGB1.java \
! classpath/gnu/javax/imageio/bmp/DecodeRGB24.java \
! classpath/gnu/javax/imageio/bmp/DecodeRGB4.java \
! classpath/gnu/javax/imageio/bmp/DecodeRGB8.java \
! classpath/gnu/javax/imageio/bmp/DecodeRLE4.java \
! classpath/gnu/javax/imageio/bmp/DecodeRLE8.java
! 
! gnu_javax_imageio_bmp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_imageio_bmp_source_files)))
! gnu_javax_rmi_source_files = \
! classpath/gnu/javax/rmi/CORBA/CorbaInput.java \
! classpath/gnu/javax/rmi/CORBA/CorbaOutput.java \
! classpath/gnu/javax/rmi/CORBA/DefaultWriteObjectTester.java \
! classpath/gnu/javax/rmi/CORBA/DelegateFactory.java \
! classpath/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java \
! classpath/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java \
! classpath/gnu/javax/rmi/CORBA/RmiUtilities.java \
! classpath/gnu/javax/rmi/CORBA/StubDelegateImpl.java \
! classpath/gnu/javax/rmi/CORBA/TieTargetRecord.java \
! classpath/gnu/javax/rmi/CORBA/UtilDelegateImpl.java \
! classpath/gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java
! 
! gnu_javax_sound_midi_source_files = \
! classpath/gnu/javax/sound/midi/alsa/AlsaInputPortDevice.java \
! classpath/gnu/javax/sound/midi/alsa/AlsaMidiDeviceProvider.java \
! classpath/gnu/javax/sound/midi/alsa/AlsaMidiSequencerDevice.java \
! classpath/gnu/javax/sound/midi/alsa/AlsaOutputPortDevice.java \
! classpath/gnu/javax/sound/midi/alsa/AlsaPortDevice.java \
! classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java \
! classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java
! 
! gnu_javax_swing_text_html_parser_source_files = \
! classpath/gnu/javax/swing/text/html/parser/HTML_401F.java \
! classpath/gnu/javax/swing/text/html/parser/gnuDTD.java \
! classpath/gnu/javax/swing/text/html/parser/htmlAttributeSet.java \
! classpath/gnu/javax/swing/text/html/parser/htmlValidator.java
! 
! gnu_javax_swing_text_html_parser_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_text_html_parser_source_files)))
! gnu_javax_swing_text_html_parser_models_source_files = \
! classpath/gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java \
! classpath/gnu/javax/swing/text/html/parser/models/TableRowContentModel.java \
! classpath/gnu/javax/swing/text/html/parser/models/list.java \
! classpath/gnu/javax/swing/text/html/parser/models/noTagModel.java \
! classpath/gnu/javax/swing/text/html/parser/models/node.java \
! classpath/gnu/javax/swing/text/html/parser/models/transformer.java
! 
! gnu_javax_swing_text_html_parser_models_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_text_html_parser_models_source_files)))
! gnu_javax_swing_text_html_parser_support_source_files = \
! classpath/gnu/javax/swing/text/html/parser/support/Parser.java \
! classpath/gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java \
! classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java \
! classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java
! 
! gnu_javax_swing_text_html_parser_support_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_text_html_parser_support_source_files)))
! gnu_javax_swing_text_html_parser_support_low_source_files = \
! classpath/gnu/javax/swing/text/html/parser/support/low/Buffer.java \
! classpath/gnu/javax/swing/text/html/parser/support/low/Constants.java \
! classpath/gnu/javax/swing/text/html/parser/support/low/Location.java \
! classpath/gnu/javax/swing/text/html/parser/support/low/ParseException.java \
! classpath/gnu/javax/swing/text/html/parser/support/low/Queue.java \
! classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java \
! classpath/gnu/javax/swing/text/html/parser/support/low/Token.java \
! classpath/gnu/javax/swing/text/html/parser/support/low/node.java \
! classpath/gnu/javax/swing/text/html/parser/support/low/pattern.java
! 
! gnu_javax_swing_text_html_parser_support_low_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_text_html_parser_support_low_source_files)))
! gnu_regexp_source_files = \
! classpath/gnu/regexp/CharIndexed.java \
! classpath/gnu/regexp/CharIndexedCharArray.java \
! classpath/gnu/regexp/CharIndexedInputStream.java \
! classpath/gnu/regexp/CharIndexedString.java \
! classpath/gnu/regexp/CharIndexedStringBuffer.java \
! classpath/gnu/regexp/RE.java \
! classpath/gnu/regexp/REException.java \
! classpath/gnu/regexp/REFilterInputStream.java \
! classpath/gnu/regexp/REMatch.java \
! classpath/gnu/regexp/REMatchEnumeration.java \
! classpath/gnu/regexp/RESyntax.java \
! classpath/gnu/regexp/REToken.java \
! classpath/gnu/regexp/RETokenAny.java \
! classpath/gnu/regexp/RETokenBackRef.java \
! classpath/gnu/regexp/RETokenChar.java \
! classpath/gnu/regexp/RETokenEnd.java \
! classpath/gnu/regexp/RETokenEndSub.java \
! classpath/gnu/regexp/RETokenIndependent.java \
! classpath/gnu/regexp/RETokenLookAhead.java \
! classpath/gnu/regexp/RETokenLookBehind.java \
! classpath/gnu/regexp/RETokenNamedProperty.java \
! classpath/gnu/regexp/RETokenOneOf.java \
! classpath/gnu/regexp/RETokenPOSIX.java \
! classpath/gnu/regexp/RETokenRange.java \
! classpath/gnu/regexp/RETokenRepeated.java \
! classpath/gnu/regexp/RETokenStart.java \
! classpath/gnu/regexp/RETokenWordBoundary.java \
! classpath/gnu/regexp/UncheckedRE.java
! 
! gnu_regexp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_regexp_source_files)))
! gnu_xml_source_files = \
! classpath/gnu/xml/aelfred2/ContentHandler2.java \
! classpath/gnu/xml/aelfred2/JAXPFactory.java \
! classpath/gnu/xml/aelfred2/SAXDriver.java \
! classpath/gnu/xml/aelfred2/XmlParser.java \
! classpath/gnu/xml/aelfred2/XmlReader.java \
! classpath/gnu/xml/dom/Consumer.java \
! classpath/gnu/xml/dom/DTDAttributeTypeInfo.java \
! classpath/gnu/xml/dom/DTDElementTypeInfo.java \
! classpath/gnu/xml/dom/DomAttr.java \
! classpath/gnu/xml/dom/DomCDATASection.java \
! classpath/gnu/xml/dom/DomCharacterData.java \
! classpath/gnu/xml/dom/DomComment.java \
! classpath/gnu/xml/dom/DomDOMException.java \
! classpath/gnu/xml/dom/DomDoctype.java \
! classpath/gnu/xml/dom/DomDocument.java \
! classpath/gnu/xml/dom/DomDocumentBuilder.java \
! classpath/gnu/xml/dom/DomDocumentBuilderFactory.java \
! classpath/gnu/xml/dom/DomDocumentConfiguration.java \
! classpath/gnu/xml/dom/DomDocumentFragment.java \
! classpath/gnu/xml/dom/DomElement.java \
! classpath/gnu/xml/dom/DomEntity.java \
! classpath/gnu/xml/dom/DomEntityReference.java \
! classpath/gnu/xml/dom/DomEvent.java \
! classpath/gnu/xml/dom/DomExtern.java \
! classpath/gnu/xml/dom/DomImpl.java \
! classpath/gnu/xml/dom/DomIterator.java \
! classpath/gnu/xml/dom/DomNSResolverContext.java \
! classpath/gnu/xml/dom/DomNamedNodeMap.java \
! classpath/gnu/xml/dom/DomNode.java \
! classpath/gnu/xml/dom/DomNodeIterator.java \
! classpath/gnu/xml/dom/DomNotation.java \
! classpath/gnu/xml/dom/DomNsNode.java \
! classpath/gnu/xml/dom/DomProcessingInstruction.java \
! classpath/gnu/xml/dom/DomText.java \
! classpath/gnu/xml/dom/DomXPathExpression.java \
! classpath/gnu/xml/dom/DomXPathNSResolver.java \
! classpath/gnu/xml/dom/DomXPathResult.java \
! classpath/gnu/xml/dom/ImplementationList.java \
! classpath/gnu/xml/dom/ImplementationSource.java \
! classpath/gnu/xml/dom/JAXPFactory.java \
! classpath/gnu/xml/dom/html2/DomHTMLAnchorElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLBRElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLCollection.java \
! classpath/gnu/xml/dom/html2/DomHTMLDListElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLDivElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLDocument.java \
! classpath/gnu/xml/dom/html2/DomHTMLElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLFontElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLFormElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLFrameElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLFrameSetElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLHRElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLHeadElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLHeadingElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLHtmlElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLIFrameElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLImageElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLImpl.java \
! classpath/gnu/xml/dom/html2/DomHTMLInputElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLIsIndexElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLLIElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLLabelElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLLegendElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLLinkElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLMapElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLMenuElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLMetaElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLModElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLOListElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLOptGroupElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLOptionElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLParagraphElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLParamElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLParser.java \
! classpath/gnu/xml/dom/html2/DomHTMLPreElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLQuoteElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLScriptElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLSelectElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLStyleElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLTableCellElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLTableColElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLTableElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLTableRowElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLTableSectionElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLTextAreaElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLTitleElement.java \
! classpath/gnu/xml/dom/html2/DomHTMLUListElement.java \
! classpath/gnu/xml/dom/ls/DomLSException.java \
! classpath/gnu/xml/dom/ls/DomLSInput.java \
! classpath/gnu/xml/dom/ls/DomLSOutput.java \
! classpath/gnu/xml/dom/ls/DomLSParser.java \
! classpath/gnu/xml/dom/ls/DomLSSerializer.java \
! classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java \
! classpath/gnu/xml/dom/ls/ReaderInputStream.java \
! classpath/gnu/xml/dom/ls/SAXEventSink.java \
! classpath/gnu/xml/dom/ls/WriterOutputStream.java \
! classpath/gnu/xml/libxmlj/dom/GnomeAttr.java \
! classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java \
! classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java \
! classpath/gnu/xml/libxmlj/dom/GnomeComment.java \
! classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java \
! classpath/gnu/xml/libxmlj/dom/GnomeDOMStringList.java \
! classpath/gnu/xml/libxmlj/dom/GnomeDocument.java \
! classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java \
! classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilderFactory.java \
! classpath/gnu/xml/libxmlj/dom/GnomeDocumentFragment.java \
! classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java \
! classpath/gnu/xml/libxmlj/dom/GnomeElement.java \
! classpath/gnu/xml/libxmlj/dom/GnomeEntity.java \
! classpath/gnu/xml/libxmlj/dom/GnomeEntityReference.java \
! classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java \
! classpath/gnu/xml/libxmlj/dom/GnomeNode.java \
! classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java \
! classpath/gnu/xml/libxmlj/dom/GnomeNotation.java \
! classpath/gnu/xml/libxmlj/dom/GnomeProcessingInstruction.java \
! classpath/gnu/xml/libxmlj/dom/GnomeText.java \
! classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java \
! classpath/gnu/xml/libxmlj/dom/GnomeXPathExpression.java \
! classpath/gnu/xml/libxmlj/dom/GnomeXPathNSResolver.java \
! classpath/gnu/xml/libxmlj/dom/GnomeXPathNodeList.java \
! classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java \
! classpath/gnu/xml/libxmlj/sax/GnomeLocator.java \
! classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java \
! classpath/gnu/xml/libxmlj/sax/GnomeSAXParserFactory.java \
! classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java \
! classpath/gnu/xml/libxmlj/sax/Namespaces.java \
! classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java \
! classpath/gnu/xml/libxmlj/sax/XMLName.java \
! classpath/gnu/xml/libxmlj/transform/ErrorListenerErrorHandler.java \
! classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java \
! classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java \
! classpath/gnu/xml/libxmlj/transform/URIResolverEntityResolver.java \
! classpath/gnu/xml/libxmlj/util/EmptyNodeList.java \
! classpath/gnu/xml/libxmlj/util/NamedInputStream.java \
! classpath/gnu/xml/libxmlj/util/StandaloneDocumentType.java \
! classpath/gnu/xml/libxmlj/util/StandaloneLocator.java \
! classpath/gnu/xml/libxmlj/util/XMLJ.java \
! classpath/gnu/xml/pipeline/CallFilter.java \
! classpath/gnu/xml/pipeline/DomConsumer.java \
! classpath/gnu/xml/pipeline/EventConsumer.java \
! classpath/gnu/xml/pipeline/EventFilter.java \
! classpath/gnu/xml/pipeline/LinkFilter.java \
! classpath/gnu/xml/pipeline/NSFilter.java \
! classpath/gnu/xml/pipeline/PipelineFactory.java \
! classpath/gnu/xml/pipeline/TeeConsumer.java \
! classpath/gnu/xml/pipeline/TextConsumer.java \
! classpath/gnu/xml/pipeline/ValidationConsumer.java \
! classpath/gnu/xml/pipeline/WellFormednessFilter.java \
! classpath/gnu/xml/pipeline/XIncludeFilter.java \
! classpath/gnu/xml/pipeline/XsltFilter.java \
! classpath/gnu/xml/stream/AttributeImpl.java \
! classpath/gnu/xml/stream/CharactersImpl.java \
! classpath/gnu/xml/stream/CommentImpl.java \
! classpath/gnu/xml/stream/DTDImpl.java \
! classpath/gnu/xml/stream/EndDocumentImpl.java \
! classpath/gnu/xml/stream/EndElementImpl.java \
! classpath/gnu/xml/stream/EndEntityImpl.java \
! classpath/gnu/xml/stream/EntityDeclarationImpl.java \
! classpath/gnu/xml/stream/EntityReferenceImpl.java \
! classpath/gnu/xml/stream/FilteredEventReader.java \
! classpath/gnu/xml/stream/FilteredStreamReader.java \
! classpath/gnu/xml/stream/LocationImpl.java \
! classpath/gnu/xml/stream/NamespaceImpl.java \
! classpath/gnu/xml/stream/NotationDeclarationImpl.java \
! classpath/gnu/xml/stream/ProcessingInstructionImpl.java \
! classpath/gnu/xml/stream/StartDocumentImpl.java \
! classpath/gnu/xml/stream/StartElementImpl.java \
! classpath/gnu/xml/stream/StartEntityImpl.java \
! classpath/gnu/xml/stream/XMLEventAllocatorImpl.java \
! classpath/gnu/xml/stream/XMLEventFactoryImpl.java \
! classpath/gnu/xml/stream/XMLEventImpl.java \
! classpath/gnu/xml/stream/XMLEventReaderImpl.java \
! classpath/gnu/xml/stream/XMLEventWriterImpl.java \
! classpath/gnu/xml/stream/XMLInputFactoryImpl.java \
! classpath/gnu/xml/stream/XMLOutputFactoryImpl.java \
! classpath/gnu/xml/stream/XMLStreamReaderImpl.java \
! classpath/gnu/xml/stream/XMLStreamWriterImpl.java \
! classpath/gnu/xml/transform/AbstractNumberNode.java \
! classpath/gnu/xml/transform/ApplyImportsNode.java \
! classpath/gnu/xml/transform/ApplyTemplatesNode.java \
! classpath/gnu/xml/transform/AttributeNode.java \
! classpath/gnu/xml/transform/AttributeSet.java \
! classpath/gnu/xml/transform/Bindings.java \
! classpath/gnu/xml/transform/CallTemplateNode.java \
! classpath/gnu/xml/transform/ChooseNode.java \
! classpath/gnu/xml/transform/CommentNode.java \
! classpath/gnu/xml/transform/CopyNode.java \
! classpath/gnu/xml/transform/CopyOfNode.java \
! classpath/gnu/xml/transform/CurrentFunction.java \
! classpath/gnu/xml/transform/DOMSourceLocator.java \
! classpath/gnu/xml/transform/DocumentFunction.java \
! classpath/gnu/xml/transform/ElementAvailableFunction.java \
! classpath/gnu/xml/transform/ElementNode.java \
! classpath/gnu/xml/transform/ErrorListenerErrorHandler.java \
! classpath/gnu/xml/transform/ForEachNode.java \
! classpath/gnu/xml/transform/FormatNumberFunction.java \
! classpath/gnu/xml/transform/FunctionAvailableFunction.java \
! classpath/gnu/xml/transform/GenerateIdFunction.java \
! classpath/gnu/xml/transform/IfNode.java \
! classpath/gnu/xml/transform/Key.java \
! classpath/gnu/xml/transform/KeyFunction.java \
! classpath/gnu/xml/transform/LiteralNode.java \
! classpath/gnu/xml/transform/MessageNode.java \
! classpath/gnu/xml/transform/NodeNumberNode.java \
! classpath/gnu/xml/transform/NumberNode.java \
! classpath/gnu/xml/transform/OtherwiseNode.java \
! classpath/gnu/xml/transform/ParameterNode.java \
! classpath/gnu/xml/transform/ProcessingInstructionNode.java \
! classpath/gnu/xml/transform/SAXSerializer.java \
! classpath/gnu/xml/transform/SortKey.java \
! classpath/gnu/xml/transform/StreamSerializer.java \
! classpath/gnu/xml/transform/Stylesheet.java \
! classpath/gnu/xml/transform/SystemPropertyFunction.java \
! classpath/gnu/xml/transform/Template.java \
! classpath/gnu/xml/transform/TemplateNode.java \
! classpath/gnu/xml/transform/TemplatesImpl.java \
! classpath/gnu/xml/transform/TextNode.java \
! classpath/gnu/xml/transform/TransformerFactoryImpl.java \
! classpath/gnu/xml/transform/TransformerImpl.java \
! classpath/gnu/xml/transform/TransformerOutputProperties.java \
! classpath/gnu/xml/transform/URIResolverEntityResolver.java \
! classpath/gnu/xml/transform/UnparsedEntityUriFunction.java \
! classpath/gnu/xml/transform/ValueOfNode.java \
! classpath/gnu/xml/transform/WhenNode.java \
! classpath/gnu/xml/transform/WithParam.java \
! classpath/gnu/xml/transform/XSLComparator.java \
! classpath/gnu/xml/transform/XSLURIResolver.java \
! classpath/gnu/xml/util/DoParse.java \
! classpath/gnu/xml/util/DomParser.java \
! classpath/gnu/xml/util/Resolver.java \
! classpath/gnu/xml/util/SAXNullTransformerFactory.java \
! classpath/gnu/xml/util/XCat.java \
! classpath/gnu/xml/util/XHTMLWriter.java \
! classpath/gnu/xml/util/XMLWriter.java \
! classpath/gnu/xml/xpath/AndExpr.java \
! classpath/gnu/xml/xpath/ArithmeticExpr.java \
! classpath/gnu/xml/xpath/BooleanFunction.java \
! classpath/gnu/xml/xpath/CeilingFunction.java \
! classpath/gnu/xml/xpath/ConcatFunction.java \
! classpath/gnu/xml/xpath/Constant.java \
! classpath/gnu/xml/xpath/ContainsFunction.java \
! classpath/gnu/xml/xpath/CountFunction.java \
! classpath/gnu/xml/xpath/DocumentOrderComparator.java \
! classpath/gnu/xml/xpath/EqualityExpr.java \
! classpath/gnu/xml/xpath/Expr.java \
! classpath/gnu/xml/xpath/FalseFunction.java \
! classpath/gnu/xml/xpath/FloorFunction.java \
! classpath/gnu/xml/xpath/Function.java \
! classpath/gnu/xml/xpath/FunctionCall.java \
! classpath/gnu/xml/xpath/IdFunction.java \
! classpath/gnu/xml/xpath/LangFunction.java \
! classpath/gnu/xml/xpath/LastFunction.java \
! classpath/gnu/xml/xpath/LocalNameFunction.java \
! classpath/gnu/xml/xpath/NameFunction.java \
! classpath/gnu/xml/xpath/NameTest.java \
! classpath/gnu/xml/xpath/NamespaceTest.java \
! classpath/gnu/xml/xpath/NamespaceUriFunction.java \
! classpath/gnu/xml/xpath/NegativeExpr.java \
! classpath/gnu/xml/xpath/NodeTypeTest.java \
! classpath/gnu/xml/xpath/NormalizeSpaceFunction.java \
! classpath/gnu/xml/xpath/NotFunction.java \
! classpath/gnu/xml/xpath/NumberFunction.java \
! classpath/gnu/xml/xpath/OrExpr.java \
! classpath/gnu/xml/xpath/ParenthesizedExpr.java \
! classpath/gnu/xml/xpath/Path.java \
! classpath/gnu/xml/xpath/Pattern.java \
! classpath/gnu/xml/xpath/PositionFunction.java \
! classpath/gnu/xml/xpath/Predicate.java \
! classpath/gnu/xml/xpath/RelationalExpr.java \
! classpath/gnu/xml/xpath/Root.java \
! classpath/gnu/xml/xpath/RoundFunction.java \
! classpath/gnu/xml/xpath/Selector.java \
! classpath/gnu/xml/xpath/StartsWithFunction.java \
! classpath/gnu/xml/xpath/Steps.java \
! classpath/gnu/xml/xpath/StringFunction.java \
! classpath/gnu/xml/xpath/StringLengthFunction.java \
! classpath/gnu/xml/xpath/SubstringAfterFunction.java \
! classpath/gnu/xml/xpath/SubstringBeforeFunction.java \
! classpath/gnu/xml/xpath/SubstringFunction.java \
! classpath/gnu/xml/xpath/SumFunction.java \
! classpath/gnu/xml/xpath/Test.java \
! classpath/gnu/xml/xpath/TranslateFunction.java \
! classpath/gnu/xml/xpath/TrueFunction.java \
! classpath/gnu/xml/xpath/UnionExpr.java \
! classpath/gnu/xml/xpath/VariableReference.java \
! classpath/gnu/xml/xpath/XPathFactoryImpl.java \
! classpath/gnu/xml/xpath/XPathImpl.java \
! classpath/gnu/xml/xpath/XPathParser.java \
! classpath/gnu/xml/xpath/XPathTokenizer.java
! 
! java_applet_source_files = \
! classpath/java/applet/Applet.java \
! classpath/java/applet/AppletContext.java \
! classpath/java/applet/AppletStub.java \
! classpath/java/applet/AudioClip.java
! 
! java_applet_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_applet_source_files)))
! java_awt_source_files = \
! classpath/java/awt/AWTError.java \
! classpath/java/awt/AWTEvent.java \
! classpath/java/awt/AWTEventMulticaster.java \
! classpath/java/awt/AWTException.java \
! classpath/java/awt/AWTKeyStroke.java \
! classpath/java/awt/AWTPermission.java \
! classpath/java/awt/ActiveEvent.java \
! classpath/java/awt/Adjustable.java \
! classpath/java/awt/AlphaComposite.java \
! classpath/java/awt/AttributeValue.java \
! classpath/java/awt/BasicStroke.java \
! classpath/java/awt/BorderLayout.java \
! classpath/java/awt/BufferCapabilities.java \
! classpath/java/awt/Button.java \
! classpath/java/awt/Canvas.java \
! classpath/java/awt/CardLayout.java \
! classpath/java/awt/Checkbox.java \
! classpath/java/awt/CheckboxGroup.java \
! classpath/java/awt/CheckboxMenuItem.java \
! classpath/java/awt/Choice.java \
! classpath/java/awt/Color.java \
! classpath/java/awt/ColorPaintContext.java \
! classpath/java/awt/Component.java \
! classpath/java/awt/ComponentOrientation.java \
! classpath/java/awt/Composite.java \
! classpath/java/awt/CompositeContext.java \
! classpath/java/awt/Container.java \
! classpath/java/awt/ContainerOrderFocusTraversalPolicy.java \
! classpath/java/awt/Cursor.java \
! classpath/java/awt/DefaultFocusTraversalPolicy.java \
! classpath/java/awt/DefaultKeyboardFocusManager.java \
! classpath/java/awt/Dialog.java \
! classpath/java/awt/Dimension.java \
! classpath/java/awt/DisplayMode.java \
! classpath/java/awt/Event.java \
! classpath/java/awt/EventDispatchThread.java \
! classpath/java/awt/EventQueue.java \
! classpath/java/awt/FileDialog.java \
! classpath/java/awt/FlowLayout.java \
! classpath/java/awt/FocusTraversalPolicy.java \
! classpath/java/awt/Font.java \
! classpath/java/awt/FontFormatException.java \
! classpath/java/awt/FontMetrics.java \
! classpath/java/awt/Frame.java \
! classpath/java/awt/GradientPaint.java \
! classpath/java/awt/Graphics.java \
! classpath/java/awt/Graphics2D.java \
! classpath/java/awt/GraphicsConfigTemplate.java \
! classpath/java/awt/GraphicsConfiguration.java \
! classpath/java/awt/GraphicsDevice.java \
! classpath/java/awt/GraphicsEnvironment.java \
! classpath/java/awt/GridBagConstraints.java \
! classpath/java/awt/GridBagLayout.java \
! classpath/java/awt/GridBagLayoutInfo.java \
! classpath/java/awt/GridLayout.java \
! classpath/java/awt/HeadlessException.java \
! classpath/java/awt/IllegalComponentStateException.java \
! classpath/java/awt/Image.java \
! classpath/java/awt/ImageCapabilities.java \
! classpath/java/awt/Insets.java \
! classpath/java/awt/ItemSelectable.java \
! classpath/java/awt/JobAttributes.java \
! classpath/java/awt/KeyEventDispatcher.java \
! classpath/java/awt/KeyEventPostProcessor.java \
! classpath/java/awt/KeyboardFocusManager.java \
! classpath/java/awt/Label.java \
! classpath/java/awt/LayoutManager.java \
! classpath/java/awt/LayoutManager2.java \
! classpath/java/awt/List.java \
! classpath/java/awt/MediaTracker.java \
! classpath/java/awt/Menu.java \
! classpath/java/awt/MenuBar.java \
! classpath/java/awt/MenuComponent.java \
! classpath/java/awt/MenuContainer.java \
! classpath/java/awt/MenuItem.java \
! classpath/java/awt/MenuShortcut.java \
! classpath/java/awt/PageAttributes.java \
! classpath/java/awt/Paint.java \
! classpath/java/awt/PaintContext.java \
! classpath/java/awt/Panel.java \
! classpath/java/awt/Point.java \
! classpath/java/awt/Polygon.java \
! classpath/java/awt/PopupMenu.java \
! classpath/java/awt/PrintGraphics.java \
! classpath/java/awt/PrintJob.java \
! classpath/java/awt/Rectangle.java \
! classpath/java/awt/RenderingHints.java \
! classpath/java/awt/Robot.java \
! classpath/java/awt/ScrollPane.java \
! classpath/java/awt/ScrollPaneAdjustable.java \
! classpath/java/awt/Scrollbar.java \
! classpath/java/awt/Shape.java \
! classpath/java/awt/Stroke.java \
! classpath/java/awt/SystemColor.java \
! classpath/java/awt/TextArea.java \
! classpath/java/awt/TextComponent.java \
! classpath/java/awt/TextField.java \
! classpath/java/awt/TexturePaint.java \
! classpath/java/awt/Toolkit.java \
! classpath/java/awt/Transparency.java \
! classpath/java/awt/Window.java
! 
! java_awt_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_source_files)))
! java_awt_color_source_files = \
! classpath/java/awt/color/CMMException.java \
! classpath/java/awt/color/ColorSpace.java \
! classpath/java/awt/color/ICC_ColorSpace.java \
! classpath/java/awt/color/ICC_Profile.java \
! classpath/java/awt/color/ICC_ProfileGray.java \
! classpath/java/awt/color/ICC_ProfileRGB.java \
! classpath/java/awt/color/ProfileDataException.java
! 
! java_awt_color_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_color_source_files)))
! java_awt_datatransfer_source_files = \
! classpath/java/awt/datatransfer/Clipboard.java \
! classpath/java/awt/datatransfer/ClipboardOwner.java \
! classpath/java/awt/datatransfer/DataFlavor.java \
! classpath/java/awt/datatransfer/FlavorEvent.java \
! classpath/java/awt/datatransfer/FlavorListener.java \
! classpath/java/awt/datatransfer/FlavorMap.java \
! classpath/java/awt/datatransfer/FlavorTable.java \
! classpath/java/awt/datatransfer/MimeTypeParseException.java \
! classpath/java/awt/datatransfer/StringSelection.java \
! classpath/java/awt/datatransfer/SystemFlavorMap.java \
! classpath/java/awt/datatransfer/Transferable.java \
! classpath/java/awt/datatransfer/UnsupportedFlavorException.java
! 
! java_awt_datatransfer_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_datatransfer_source_files)))
! java_awt_dnd_source_files = \
! classpath/java/awt/dnd/Autoscroll.java \
! classpath/java/awt/dnd/DnDConstants.java \
! classpath/java/awt/dnd/DnDEventMulticaster.java \
! classpath/java/awt/dnd/DragGestureEvent.java \
! classpath/java/awt/dnd/DragGestureListener.java \
! classpath/java/awt/dnd/DragGestureRecognizer.java \
! classpath/java/awt/dnd/DragSource.java \
! classpath/java/awt/dnd/DragSourceAdapter.java \
! classpath/java/awt/dnd/DragSourceContext.java \
! classpath/java/awt/dnd/DragSourceDragEvent.java \
! classpath/java/awt/dnd/DragSourceDropEvent.java \
! classpath/java/awt/dnd/DragSourceEvent.java \
! classpath/java/awt/dnd/DragSourceListener.java \
! classpath/java/awt/dnd/DragSourceMotionListener.java \
! classpath/java/awt/dnd/DropTarget.java \
! classpath/java/awt/dnd/DropTargetAdapter.java \
! classpath/java/awt/dnd/DropTargetContext.java \
! classpath/java/awt/dnd/DropTargetDragEvent.java \
! classpath/java/awt/dnd/DropTargetDropEvent.java \
! classpath/java/awt/dnd/DropTargetEvent.java \
! classpath/java/awt/dnd/DropTargetListener.java \
! classpath/java/awt/dnd/InvalidDnDOperationException.java \
! classpath/java/awt/dnd/MouseDragGestureRecognizer.java
! 
! java_awt_dnd_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_dnd_source_files)))
! java_awt_dnd_peer_source_files = \
! classpath/java/awt/dnd/peer/DragSourceContextPeer.java \
! classpath/java/awt/dnd/peer/DropTargetContextPeer.java \
! classpath/java/awt/dnd/peer/DropTargetPeer.java
! 
! java_awt_dnd_peer_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_dnd_peer_source_files)))
! java_awt_event_source_files = \
! classpath/java/awt/event/AWTEventListener.java \
! classpath/java/awt/event/AWTEventListenerProxy.java \
! classpath/java/awt/event/ActionEvent.java \
! classpath/java/awt/event/ActionListener.java \
! classpath/java/awt/event/AdjustmentEvent.java \
! classpath/java/awt/event/AdjustmentListener.java \
! classpath/java/awt/event/ComponentAdapter.java \
! classpath/java/awt/event/ComponentEvent.java \
! classpath/java/awt/event/ComponentListener.java \
! classpath/java/awt/event/ContainerAdapter.java \
! classpath/java/awt/event/ContainerEvent.java \
! classpath/java/awt/event/ContainerListener.java \
! classpath/java/awt/event/FocusAdapter.java \
! classpath/java/awt/event/FocusEvent.java \
! classpath/java/awt/event/FocusListener.java \
! classpath/java/awt/event/HierarchyBoundsAdapter.java \
! classpath/java/awt/event/HierarchyBoundsListener.java \
! classpath/java/awt/event/HierarchyEvent.java \
! classpath/java/awt/event/HierarchyListener.java \
! classpath/java/awt/event/InputEvent.java \
! classpath/java/awt/event/InputMethodEvent.java \
! classpath/java/awt/event/InputMethodListener.java \
! classpath/java/awt/event/InvocationEvent.java \
! classpath/java/awt/event/ItemEvent.java \
! classpath/java/awt/event/ItemListener.java \
! classpath/java/awt/event/KeyAdapter.java \
! classpath/java/awt/event/KeyEvent.java \
! classpath/java/awt/event/KeyListener.java \
! classpath/java/awt/event/MouseAdapter.java \
! classpath/java/awt/event/MouseEvent.java \
! classpath/java/awt/event/MouseListener.java \
! classpath/java/awt/event/MouseMotionAdapter.java \
! classpath/java/awt/event/MouseMotionListener.java \
! classpath/java/awt/event/MouseWheelEvent.java \
! classpath/java/awt/event/MouseWheelListener.java \
! classpath/java/awt/event/PaintEvent.java \
! classpath/java/awt/event/TextEvent.java \
! classpath/java/awt/event/TextListener.java \
! classpath/java/awt/event/WindowAdapter.java \
! classpath/java/awt/event/WindowEvent.java \
! classpath/java/awt/event/WindowFocusListener.java \
! classpath/java/awt/event/WindowListener.java \
! classpath/java/awt/event/WindowStateListener.java
! 
! java_awt_event_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_event_source_files)))
! java_awt_font_source_files = \
! classpath/java/awt/font/FontRenderContext.java \
! classpath/java/awt/font/GlyphJustificationInfo.java \
! classpath/java/awt/font/GlyphMetrics.java \
! classpath/java/awt/font/GlyphVector.java \
! classpath/java/awt/font/GraphicAttribute.java \
! classpath/java/awt/font/ImageGraphicAttribute.java \
! classpath/java/awt/font/LineBreakMeasurer.java \
! classpath/java/awt/font/LineMetrics.java \
! classpath/java/awt/font/MultipleMaster.java \
! classpath/java/awt/font/NumericShaper.java \
! classpath/java/awt/font/OpenType.java \
! classpath/java/awt/font/ShapeGraphicAttribute.java \
! classpath/java/awt/font/TextAttribute.java \
! classpath/java/awt/font/TextHitInfo.java \
! classpath/java/awt/font/TextLayout.java \
! classpath/java/awt/font/TextMeasurer.java \
! classpath/java/awt/font/TransformAttribute.java
! 
! java_awt_font_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_font_source_files)))
! java_awt_geom_source_files = \
! classpath/java/awt/geom/AffineTransform.java \
! classpath/java/awt/geom/Arc2D.java \
! classpath/java/awt/geom/Area.java \
! classpath/java/awt/geom/CubicCurve2D.java \
! classpath/java/awt/geom/Dimension2D.java \
! classpath/java/awt/geom/Ellipse2D.java \
! classpath/java/awt/geom/FlatteningPathIterator.java \
! classpath/java/awt/geom/GeneralPath.java \
! classpath/java/awt/geom/IllegalPathStateException.java \
! classpath/java/awt/geom/Line2D.java \
! classpath/java/awt/geom/NoninvertibleTransformException.java \
! classpath/java/awt/geom/PathIterator.java \
! classpath/java/awt/geom/Point2D.java \
! classpath/java/awt/geom/QuadCurve2D.java \
! classpath/java/awt/geom/Rectangle2D.java \
! classpath/java/awt/geom/RectangularShape.java \
! classpath/java/awt/geom/RoundRectangle2D.java
! 
! java_awt_geom_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_geom_source_files)))
! java_awt_im_source_files = \
! classpath/java/awt/im/InputContext.java \
! classpath/java/awt/im/InputMethodHighlight.java \
! classpath/java/awt/im/InputMethodRequests.java \
! classpath/java/awt/im/InputSubset.java
! 
! java_awt_im_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_im_source_files)))
! java_awt_im_spi_source_files = \
! classpath/java/awt/im/spi/InputMethod.java \
! classpath/java/awt/im/spi/InputMethodContext.java \
! classpath/java/awt/im/spi/InputMethodDescriptor.java
! 
! java_awt_im_spi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_im_spi_source_files)))
! java_awt_image_source_files = \
! classpath/java/awt/image/AffineTransformOp.java \
! classpath/java/awt/image/AreaAveragingScaleFilter.java \
! classpath/java/awt/image/BandCombineOp.java \
! classpath/java/awt/image/BandedSampleModel.java \
! classpath/java/awt/image/BufferStrategy.java \
! classpath/java/awt/image/BufferedImage.java \
! classpath/java/awt/image/BufferedImageFilter.java \
! classpath/java/awt/image/BufferedImageOp.java \
! classpath/java/awt/image/ByteLookupTable.java \
! classpath/java/awt/image/ColorConvertOp.java \
! classpath/java/awt/image/ColorModel.java \
! classpath/java/awt/image/ComponentColorModel.java \
! classpath/java/awt/image/ComponentSampleModel.java \
! classpath/java/awt/image/ConvolveOp.java \
! classpath/java/awt/image/CropImageFilter.java \
! classpath/java/awt/image/DataBuffer.java \
! classpath/java/awt/image/DataBufferByte.java \
! classpath/java/awt/image/DataBufferDouble.java \
! classpath/java/awt/image/DataBufferFloat.java \
! classpath/java/awt/image/DataBufferInt.java \
! classpath/java/awt/image/DataBufferShort.java \
! classpath/java/awt/image/DataBufferUShort.java \
! classpath/java/awt/image/DirectColorModel.java \
! classpath/java/awt/image/FilteredImageSource.java \
! classpath/java/awt/image/ImageConsumer.java \
! classpath/java/awt/image/ImageFilter.java \
! classpath/java/awt/image/ImageObserver.java \
! classpath/java/awt/image/ImageProducer.java \
! classpath/java/awt/image/ImagingOpException.java \
! classpath/java/awt/image/IndexColorModel.java \
! classpath/java/awt/image/Kernel.java \
! classpath/java/awt/image/LookupOp.java \
! classpath/java/awt/image/LookupTable.java \
! classpath/java/awt/image/MemoryImageSource.java \
! classpath/java/awt/image/MultiPixelPackedSampleModel.java \
! classpath/java/awt/image/PackedColorModel.java \
! classpath/java/awt/image/PixelGrabber.java \
! classpath/java/awt/image/PixelInterleavedSampleModel.java \
! classpath/java/awt/image/RGBImageFilter.java \
! classpath/java/awt/image/Raster.java \
! classpath/java/awt/image/RasterFormatException.java \
! classpath/java/awt/image/RasterOp.java \
! classpath/java/awt/image/RenderedImage.java \
! classpath/java/awt/image/ReplicateScaleFilter.java \
! classpath/java/awt/image/RescaleOp.java \
! classpath/java/awt/image/SampleModel.java \
! classpath/java/awt/image/ShortLookupTable.java \
! classpath/java/awt/image/SinglePixelPackedSampleModel.java \
! classpath/java/awt/image/TileObserver.java \
! classpath/java/awt/image/VolatileImage.java \
! classpath/java/awt/image/WritableRaster.java \
! classpath/java/awt/image/WritableRenderedImage.java
! 
! java_awt_image_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_image_source_files)))
! java_awt_image_renderable_source_files = \
! classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java \
! classpath/java/awt/image/renderable/ParameterBlock.java \
! classpath/java/awt/image/renderable/RenderContext.java \
! classpath/java/awt/image/renderable/RenderableImage.java \
! classpath/java/awt/image/renderable/RenderableImageOp.java \
! classpath/java/awt/image/renderable/RenderableImageProducer.java \
! classpath/java/awt/image/renderable/RenderedImageFactory.java
! 
! java_awt_image_renderable_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_image_renderable_source_files)))
! java_awt_peer_source_files = \
! classpath/java/awt/peer/ButtonPeer.java \
! classpath/java/awt/peer/CanvasPeer.java \
! classpath/java/awt/peer/CheckboxMenuItemPeer.java \
! classpath/java/awt/peer/CheckboxPeer.java \
! classpath/java/awt/peer/ChoicePeer.java \
! classpath/java/awt/peer/ComponentPeer.java \
! classpath/java/awt/peer/ContainerPeer.java \
! classpath/java/awt/peer/DialogPeer.java \
! classpath/java/awt/peer/FileDialogPeer.java \
! classpath/java/awt/peer/FontPeer.java \
! classpath/java/awt/peer/FramePeer.java \
! classpath/java/awt/peer/LabelPeer.java \
! classpath/java/awt/peer/LightweightPeer.java \
! classpath/java/awt/peer/ListPeer.java \
! classpath/java/awt/peer/MenuBarPeer.java \
! classpath/java/awt/peer/MenuComponentPeer.java \
! classpath/java/awt/peer/MenuItemPeer.java \
! classpath/java/awt/peer/MenuPeer.java \
! classpath/java/awt/peer/PanelPeer.java \
! classpath/java/awt/peer/PopupMenuPeer.java \
! classpath/java/awt/peer/RobotPeer.java \
! classpath/java/awt/peer/ScrollPanePeer.java \
! classpath/java/awt/peer/ScrollbarPeer.java \
! classpath/java/awt/peer/TextAreaPeer.java \
! classpath/java/awt/peer/TextComponentPeer.java \
! classpath/java/awt/peer/TextFieldPeer.java \
! classpath/java/awt/peer/WindowPeer.java
! 
! java_awt_peer_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_peer_source_files)))
! java_awt_print_source_files = \
! classpath/java/awt/print/Book.java \
! classpath/java/awt/print/PageFormat.java \
! classpath/java/awt/print/Pageable.java \
! classpath/java/awt/print/Paper.java \
! classpath/java/awt/print/Printable.java \
! classpath/java/awt/print/PrinterAbortException.java \
! classpath/java/awt/print/PrinterException.java \
! classpath/java/awt/print/PrinterGraphics.java \
! classpath/java/awt/print/PrinterIOException.java \
! classpath/java/awt/print/PrinterJob.java
! 
! java_awt_print_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_awt_print_source_files)))
! java_beans_source_files = \
! classpath/java/beans/AppletInitializer.java \
! classpath/java/beans/BeanDescriptor.java \
! classpath/java/beans/BeanInfo.java \
! classpath/java/beans/Beans.java \
! classpath/java/beans/Customizer.java \
! classpath/java/beans/DesignMode.java \
! classpath/java/beans/EventHandler.java \
! classpath/java/beans/EventSetDescriptor.java \
! classpath/java/beans/ExceptionListener.java \
! classpath/java/beans/Expression.java \
! classpath/java/beans/FeatureDescriptor.java \
! classpath/java/beans/IndexedPropertyDescriptor.java \
! classpath/java/beans/IntrospectionException.java \
! classpath/java/beans/Introspector.java \
! classpath/java/beans/MethodDescriptor.java \
! classpath/java/beans/ParameterDescriptor.java \
! classpath/java/beans/PropertyChangeEvent.java \
! classpath/java/beans/PropertyChangeListener.java \
! classpath/java/beans/PropertyChangeListenerProxy.java \
! classpath/java/beans/PropertyChangeSupport.java \
! classpath/java/beans/PropertyDescriptor.java \
! classpath/java/beans/PropertyEditor.java \
! classpath/java/beans/PropertyEditorManager.java \
! classpath/java/beans/PropertyEditorSupport.java \
! classpath/java/beans/PropertyVetoException.java \
! classpath/java/beans/SimpleBeanInfo.java \
! classpath/java/beans/Statement.java \
! classpath/java/beans/VetoableChangeListener.java \
! classpath/java/beans/VetoableChangeListenerProxy.java \
! classpath/java/beans/VetoableChangeSupport.java \
! classpath/java/beans/Visibility.java \
! classpath/java/beans/XMLDecoder.java
! 
! java_beans_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_beans_source_files)))
! java_beans_beancontext_source_files = \
! classpath/java/beans/beancontext/BeanContext.java \
! classpath/java/beans/beancontext/BeanContextChild.java \
! classpath/java/beans/beancontext/BeanContextChildComponentProxy.java \
! classpath/java/beans/beancontext/BeanContextChildSupport.java \
! classpath/java/beans/beancontext/BeanContextContainerProxy.java \
! classpath/java/beans/beancontext/BeanContextEvent.java \
! classpath/java/beans/beancontext/BeanContextMembershipEvent.java \
! classpath/java/beans/beancontext/BeanContextMembershipListener.java \
! classpath/java/beans/beancontext/BeanContextProxy.java \
! classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java \
! classpath/java/beans/beancontext/BeanContextServiceProvider.java \
! classpath/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java \
! classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java \
! classpath/java/beans/beancontext/BeanContextServiceRevokedListener.java \
! classpath/java/beans/beancontext/BeanContextServices.java \
! classpath/java/beans/beancontext/BeanContextServicesListener.java \
! classpath/java/beans/beancontext/BeanContextServicesSupport.java \
! classpath/java/beans/beancontext/BeanContextSupport.java
! 
! java_beans_beancontext_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_beans_beancontext_source_files)))
! java_io_source_files = \
! java/io/BufferedInputStream.java \
! classpath/java/io/BufferedOutputStream.java \
! classpath/java/io/BufferedReader.java \
! classpath/java/io/BufferedWriter.java \
! classpath/java/io/ByteArrayInputStream.java \
! classpath/java/io/ByteArrayOutputStream.java \
! classpath/java/io/CharArrayReader.java \
! classpath/java/io/CharArrayWriter.java \
! classpath/java/io/CharConversionException.java \
! classpath/java/io/Closeable.java \
! classpath/java/io/DataInput.java \
! classpath/java/io/DataInputStream.java \
! classpath/java/io/DataOutput.java \
! classpath/java/io/DataOutputStream.java \
! classpath/java/io/DeleteFileHelper.java \
! classpath/java/io/EOFException.java \
! classpath/java/io/Externalizable.java \
! java/io/File.java \
! classpath/java/io/FileDescriptor.java \
! classpath/java/io/FileFilter.java \
! java/io/FileInputStream.java \
! classpath/java/io/FileNotFoundException.java \
! java/io/FileOutputStream.java \
! classpath/java/io/FilePermission.java \
! classpath/java/io/FileReader.java \
! classpath/java/io/FileWriter.java \
! classpath/java/io/FilenameFilter.java \
! classpath/java/io/FilterInputStream.java \
! classpath/java/io/FilterOutputStream.java \
! classpath/java/io/FilterReader.java \
! classpath/java/io/FilterWriter.java \
! classpath/java/io/Flushable.java \
! classpath/java/io/IOException.java \
! classpath/java/io/InputStream.java \
! java/io/InputStreamReader.java \
! classpath/java/io/InterruptedIOException.java \
! classpath/java/io/InvalidClassException.java \
! classpath/java/io/InvalidObjectException.java \
! classpath/java/io/LineNumberInputStream.java \
! classpath/java/io/LineNumberReader.java \
! classpath/java/io/NotActiveException.java \
! classpath/java/io/NotSerializableException.java \
! classpath/java/io/ObjectInput.java \
! java/io/ObjectInputStream.java \
! classpath/java/io/ObjectInputValidation.java \
! classpath/java/io/ObjectOutput.java \
! classpath/java/io/ObjectOutputStream.java \
! classpath/java/io/ObjectStreamClass.java \
! classpath/java/io/ObjectStreamConstants.java \
! classpath/java/io/ObjectStreamException.java \
! classpath/java/io/ObjectStreamField.java \
! classpath/java/io/OptionalDataException.java \
! classpath/java/io/OutputStream.java \
! java/io/OutputStreamWriter.java \
! classpath/java/io/PipedInputStream.java \
! classpath/java/io/PipedOutputStream.java \
! classpath/java/io/PipedReader.java \
! classpath/java/io/PipedWriter.java \
! java/io/PrintStream.java \
! classpath/java/io/PrintWriter.java \
! classpath/java/io/PushbackInputStream.java \
! classpath/java/io/PushbackReader.java \
! java/io/RandomAccessFile.java \
! classpath/java/io/Reader.java \
! classpath/java/io/SequenceInputStream.java \
! classpath/java/io/Serializable.java \
! classpath/java/io/SerializablePermission.java \
! classpath/java/io/StreamCorruptedException.java \
! classpath/java/io/StreamTokenizer.java \
! classpath/java/io/StringBufferInputStream.java \
! classpath/java/io/StringReader.java \
! classpath/java/io/StringWriter.java \
! classpath/java/io/SyncFailedException.java \
! classpath/java/io/UTFDataFormatException.java \
! classpath/java/io/UnsupportedEncodingException.java \
! java/io/VMObjectStreamClass.java \
! classpath/java/io/WriteAbortedException.java \
! classpath/java/io/Writer.java
! 
! java_io_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_io_source_files)))
! java_lang_source_files = \
! classpath/java/lang/AbstractMethodError.java \
! classpath/java/lang/Appendable.java \
! classpath/java/lang/ArithmeticException.java \
! classpath/java/lang/ArrayIndexOutOfBoundsException.java \
! classpath/java/lang/ArrayStoreException.java \
! classpath/java/lang/AssertionError.java \
! classpath/java/lang/Boolean.java \
! classpath/java/lang/Byte.java \
! classpath/java/lang/CharSequence.java \
! java/lang/Character.java \
! classpath/java/lang/ClassCastException.java \
! classpath/java/lang/ClassCircularityError.java \
! classpath/java/lang/ClassFormatError.java \
! java/lang/ClassLoader.java \
! classpath/java/lang/ClassNotFoundException.java \
! classpath/java/lang/CloneNotSupportedException.java \
! classpath/java/lang/Cloneable.java \
! classpath/java/lang/Comparable.java \
! classpath/java/lang/Compiler.java \
! java/lang/ConcreteProcess.java \
! java/lang/Double.java \
! classpath/java/lang/EnumConstantNotPresentException.java \
! classpath/java/lang/Error.java \
! classpath/java/lang/Exception.java \
! classpath/java/lang/ExceptionInInitializerError.java \
! java/lang/Float.java \
! classpath/java/lang/IllegalAccessError.java \
! classpath/java/lang/IllegalAccessException.java \
! classpath/java/lang/IllegalArgumentException.java \
! classpath/java/lang/IllegalMonitorStateException.java \
! classpath/java/lang/IllegalStateException.java \
! classpath/java/lang/IllegalThreadStateException.java \
! classpath/java/lang/IncompatibleClassChangeError.java \
! classpath/java/lang/IndexOutOfBoundsException.java \
! java/lang/InheritableThreadLocal.java \
! classpath/java/lang/InstantiationError.java \
! classpath/java/lang/InstantiationException.java \
! classpath/java/lang/Integer.java \
! classpath/java/lang/InternalError.java \
! classpath/java/lang/InterruptedException.java \
! classpath/java/lang/LinkageError.java \
! classpath/java/lang/Long.java \
! classpath/java/lang/Math.java \
! classpath/java/lang/NegativeArraySizeException.java \
! classpath/java/lang/NoClassDefFoundError.java \
! classpath/java/lang/NoSuchFieldError.java \
! classpath/java/lang/NoSuchFieldException.java \
! classpath/java/lang/NoSuchMethodError.java \
! classpath/java/lang/NoSuchMethodException.java \
! classpath/java/lang/NullPointerException.java \
! classpath/java/lang/Number.java \
! classpath/java/lang/NumberFormatException.java \
! classpath/java/lang/OutOfMemoryError.java \
! java/lang/Package.java \
! classpath/java/lang/Process.java \
! classpath/java/lang/Readable.java \
! classpath/java/lang/Runnable.java \
! java/lang/Runtime.java \
! classpath/java/lang/RuntimeException.java \
! classpath/java/lang/RuntimePermission.java \
! classpath/java/lang/SecurityException.java \
! java/lang/SecurityManager.java \
! classpath/java/lang/Short.java \
! classpath/java/lang/StackOverflowError.java \
! classpath/java/lang/StackTraceElement.java \
! classpath/java/lang/StrictMath.java \
! java/lang/String.java \
! java/lang/StringBuffer.java \
! java/lang/StringBuilder.java \
! classpath/java/lang/StringIndexOutOfBoundsException.java \
! java/lang/System.java \
! java/lang/Thread.java \
! classpath/java/lang/ThreadDeath.java \
! classpath/java/lang/ThreadGroup.java \
! java/lang/ThreadLocal.java \
! classpath/java/lang/Throwable.java \
! classpath/java/lang/TypeNotPresentException.java \
! classpath/java/lang/UnknownError.java \
! classpath/java/lang/UnsatisfiedLinkError.java \
! classpath/java/lang/UnsupportedClassVersionError.java \
! classpath/java/lang/UnsupportedOperationException.java \
! java/lang/VMClassLoader.java \
! java/lang/VMCompiler.java \
! java/lang/VMSecurityManager.java \
! java/lang/VMThrowable.java \
! classpath/java/lang/VerifyError.java \
! classpath/java/lang/VirtualMachineError.java \
! classpath/java/lang/Void.java
! 
! java_lang_header_files = $(filter-out java/lang/Object.h java/lang/Class.h,$(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_lang_source_files))))
! java_lang_annotation_source_files = \
! classpath/java/lang/annotation/AnnotationFormatError.java \
! classpath/java/lang/annotation/AnnotationTypeMismatchException.java
! 
! java_lang_annotation_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_lang_annotation_source_files)))
! java_lang_ref_source_files = \
! classpath/java/lang/ref/PhantomReference.java \
  java/lang/ref/Reference.java \
! classpath/java/lang/ref/ReferenceQueue.java \
! classpath/java/lang/ref/SoftReference.java \
! classpath/java/lang/ref/WeakReference.java
! 
! java_lang_ref_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_lang_ref_source_files)))
! java_lang_reflect_source_files = \
! classpath/java/lang/reflect/AccessibleObject.java \
  java/lang/reflect/Array.java \
  java/lang/reflect/Constructor.java \
  java/lang/reflect/Field.java \
! classpath/java/lang/reflect/GenericArrayType.java \
! classpath/java/lang/reflect/GenericSignatureFormatError.java \
! classpath/java/lang/reflect/InvocationHandler.java \
! classpath/java/lang/reflect/InvocationTargetException.java \
! classpath/java/lang/reflect/Member.java \
  java/lang/reflect/Method.java \
! java/lang/reflect/Modifier.java \
! classpath/java/lang/reflect/ParameterizedType.java \
! classpath/java/lang/reflect/Proxy.java \
! classpath/java/lang/reflect/ReflectPermission.java \
! classpath/java/lang/reflect/Type.java \
! classpath/java/lang/reflect/UndeclaredThrowableException.java \
! java/lang/reflect/VMProxy.java \
! classpath/java/lang/reflect/WildcardType.java
! 
! java_lang_reflect_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_lang_reflect_source_files)))
! java_math_source_files = \
! classpath/java/math/BigDecimal.java \
! classpath/java/math/BigInteger.java
! 
! java_math_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_math_source_files)))
! java_net_source_files = \
! classpath/java/net/Authenticator.java \
! classpath/java/net/BindException.java \
! classpath/java/net/ConnectException.java \
! classpath/java/net/ContentHandler.java \
! classpath/java/net/ContentHandlerFactory.java \
! classpath/java/net/DatagramPacket.java \
! classpath/java/net/DatagramSocket.java \
! classpath/java/net/DatagramSocketImpl.java \
! classpath/java/net/DatagramSocketImplFactory.java \
! classpath/java/net/FileNameMap.java \
! classpath/java/net/HttpURLConnection.java \
! classpath/java/net/Inet4Address.java \
! classpath/java/net/Inet6Address.java \
  java/net/InetAddress.java \
! classpath/java/net/InetSocketAddress.java \
  java/net/JarURLConnection.java \
! classpath/java/net/MalformedURLException.java \
! classpath/java/net/MimeTypeMapper.java \
! classpath/java/net/MulticastSocket.java \
! classpath/java/net/NetPermission.java \
! classpath/java/net/NetworkInterface.java \
! classpath/java/net/NoRouteToHostException.java \
! classpath/java/net/PasswordAuthentication.java \
! classpath/java/net/PortUnreachableException.java \
! classpath/java/net/ProtocolException.java \
! classpath/java/net/ServerSocket.java \
! classpath/java/net/Socket.java \
! classpath/java/net/SocketAddress.java \
! classpath/java/net/SocketException.java \
! classpath/java/net/SocketImpl.java \
! classpath/java/net/SocketImplFactory.java \
! classpath/java/net/SocketOptions.java \
! classpath/java/net/SocketPermission.java \
! classpath/java/net/SocketTimeoutException.java \
! classpath/java/net/URI.java \
! classpath/java/net/URISyntaxException.java \
  java/net/URL.java \
  java/net/URLClassLoader.java \
  java/net/URLConnection.java \
! classpath/java/net/URLDecoder.java \
! classpath/java/net/URLEncoder.java \
! classpath/java/net/URLStreamHandler.java \
! classpath/java/net/URLStreamHandlerFactory.java \
! classpath/java/net/UnknownHostException.java \
! classpath/java/net/UnknownServiceException.java \
! java/net/VMNetworkInterface.java
! 
! java_net_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_net_source_files)))
! java_nio_source_files = \
  java/nio/Buffer.java \
! classpath/java/nio/BufferOverflowException.java \
! classpath/java/nio/BufferUnderflowException.java \
! classpath/java/nio/ByteBuffer.java \
! classpath/java/nio/ByteBufferHelper.java \
! classpath/java/nio/ByteBufferImpl.java \
! classpath/java/nio/ByteOrder.java \
! classpath/java/nio/CharBuffer.java \
! classpath/java/nio/CharBufferImpl.java \
! classpath/java/nio/CharViewBufferImpl.java \
  java/nio/DirectByteBufferImpl.java \
! classpath/java/nio/DoubleBuffer.java \
! classpath/java/nio/DoubleBufferImpl.java \
! classpath/java/nio/DoubleViewBufferImpl.java \
! classpath/java/nio/FloatBuffer.java \
! classpath/java/nio/FloatBufferImpl.java \
! classpath/java/nio/FloatViewBufferImpl.java \
! classpath/java/nio/IntBuffer.java \
! classpath/java/nio/IntBufferImpl.java \
! classpath/java/nio/IntViewBufferImpl.java \
! classpath/java/nio/InvalidMarkException.java \
! classpath/java/nio/LongBuffer.java \
! classpath/java/nio/LongBufferImpl.java \
! classpath/java/nio/LongViewBufferImpl.java \
  java/nio/MappedByteBuffer.java \
  java/nio/MappedByteBufferImpl.java \
! classpath/java/nio/ReadOnlyBufferException.java \
! classpath/java/nio/ShortBuffer.java \
! classpath/java/nio/ShortBufferImpl.java \
! classpath/java/nio/ShortViewBufferImpl.java \
! java/nio/VMDirectByteBuffer.java
! 
! java_nio_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_nio_source_files)))
! java_nio_channels_source_files = \
! classpath/java/nio/channels/AlreadyConnectedException.java \
! classpath/java/nio/channels/AsynchronousCloseException.java \
! classpath/java/nio/channels/ByteChannel.java \
! classpath/java/nio/channels/CancelledKeyException.java \
! classpath/java/nio/channels/Channel.java \
  java/nio/channels/Channels.java \
! classpath/java/nio/channels/ClosedByInterruptException.java \
! classpath/java/nio/channels/ClosedChannelException.java \
! classpath/java/nio/channels/ClosedSelectorException.java \
! classpath/java/nio/channels/ConnectionPendingException.java \
! classpath/java/nio/channels/DatagramChannel.java \
! classpath/java/nio/channels/FileChannel.java \
! classpath/java/nio/channels/FileLock.java \
! classpath/java/nio/channels/FileLockInterruptionException.java \
! classpath/java/nio/channels/GatheringByteChannel.java \
! classpath/java/nio/channels/IllegalBlockingModeException.java \
! classpath/java/nio/channels/IllegalSelectorException.java \
! classpath/java/nio/channels/InterruptibleChannel.java \
! classpath/java/nio/channels/NoConnectionPendingException.java \
! classpath/java/nio/channels/NonReadableChannelException.java \
! classpath/java/nio/channels/NonWritableChannelException.java \
! classpath/java/nio/channels/NotYetBoundException.java \
! classpath/java/nio/channels/NotYetConnectedException.java \
! classpath/java/nio/channels/OverlappingFileLockException.java \
! classpath/java/nio/channels/Pipe.java \
! classpath/java/nio/channels/ReadableByteChannel.java \
! classpath/java/nio/channels/ScatteringByteChannel.java \
! classpath/java/nio/channels/SelectableChannel.java \
! classpath/java/nio/channels/SelectionKey.java \
! classpath/java/nio/channels/Selector.java \
! classpath/java/nio/channels/ServerSocketChannel.java \
! classpath/java/nio/channels/SocketChannel.java \
! classpath/java/nio/channels/UnresolvedAddressException.java \
! classpath/java/nio/channels/UnsupportedAddressTypeException.java \
! classpath/java/nio/channels/WritableByteChannel.java
! 
! java_nio_channels_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_nio_channels_source_files)))
! java_nio_channels_spi_source_files = \
! classpath/java/nio/channels/spi/AbstractInterruptibleChannel.java \
! classpath/java/nio/channels/spi/AbstractSelectableChannel.java \
! classpath/java/nio/channels/spi/AbstractSelectionKey.java \
! classpath/java/nio/channels/spi/AbstractSelector.java \
! classpath/java/nio/channels/spi/SelectorProvider.java
! 
! java_nio_channels_spi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_nio_channels_spi_source_files)))
! java_nio_charset_source_files = \
! classpath/java/nio/charset/CharacterCodingException.java \
  java/nio/charset/Charset.java \
! classpath/java/nio/charset/CharsetDecoder.java \
! classpath/java/nio/charset/CharsetEncoder.java \
! classpath/java/nio/charset/CoderMalfunctionError.java \
! classpath/java/nio/charset/CoderResult.java \
! classpath/java/nio/charset/CodingErrorAction.java \
! classpath/java/nio/charset/IllegalCharsetNameException.java \
! classpath/java/nio/charset/MalformedInputException.java \
! classpath/java/nio/charset/UnmappableCharacterException.java \
! classpath/java/nio/charset/UnsupportedCharsetException.java
! 
! java_nio_charset_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_nio_charset_source_files)))
! java_nio_charset_spi_source_files = \
! classpath/java/nio/charset/spi/CharsetProvider.java
! 
! java_nio_charset_spi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_nio_charset_spi_source_files)))
! java_rmi_source_files = \
! classpath/java/rmi/AccessException.java \
! classpath/java/rmi/AlreadyBoundException.java \
! classpath/java/rmi/ConnectException.java \
! classpath/java/rmi/ConnectIOException.java \
! classpath/java/rmi/MarshalException.java \
! classpath/java/rmi/MarshalledObject.java \
! classpath/java/rmi/Naming.java \
! classpath/java/rmi/NoSuchObjectException.java \
! classpath/java/rmi/NotBoundException.java \
! classpath/java/rmi/RMISecurityException.java \
! classpath/java/rmi/RMISecurityManager.java \
! classpath/java/rmi/Remote.java \
! classpath/java/rmi/RemoteException.java \
! classpath/java/rmi/ServerError.java \
! classpath/java/rmi/ServerException.java \
! classpath/java/rmi/ServerRuntimeException.java \
! classpath/java/rmi/StubNotFoundException.java \
! classpath/java/rmi/UnexpectedException.java \
! classpath/java/rmi/UnknownHostException.java \
! classpath/java/rmi/UnmarshalException.java
! 
! java_rmi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_rmi_source_files)))
! java_rmi_activation_source_files = \
! classpath/java/rmi/activation/Activatable.java \
! classpath/java/rmi/activation/ActivateFailedException.java \
! classpath/java/rmi/activation/ActivationDesc.java \
! classpath/java/rmi/activation/ActivationException.java \
! classpath/java/rmi/activation/ActivationGroup.java \
! classpath/java/rmi/activation/ActivationGroupDesc.java \
! classpath/java/rmi/activation/ActivationGroupID.java \
! classpath/java/rmi/activation/ActivationGroup_Stub.java \
! classpath/java/rmi/activation/ActivationID.java \
! classpath/java/rmi/activation/ActivationInstantiator.java \
! classpath/java/rmi/activation/ActivationMonitor.java \
! classpath/java/rmi/activation/ActivationSystem.java \
! classpath/java/rmi/activation/Activator.java \
! classpath/java/rmi/activation/UnknownGroupException.java \
! classpath/java/rmi/activation/UnknownObjectException.java
! 
! java_rmi_activation_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_rmi_activation_source_files)))
! java_rmi_dgc_source_files = \
! classpath/java/rmi/dgc/DGC.java \
! classpath/java/rmi/dgc/Lease.java \
! classpath/java/rmi/dgc/VMID.java
! 
! java_rmi_dgc_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_rmi_dgc_source_files)))
! java_rmi_registry_source_files = \
! classpath/java/rmi/registry/LocateRegistry.java \
! classpath/java/rmi/registry/Registry.java \
! classpath/java/rmi/registry/RegistryHandler.java
! 
! java_rmi_registry_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_rmi_registry_source_files)))
! java_rmi_server_source_files = \
! classpath/java/rmi/server/ExportException.java \
! classpath/java/rmi/server/LoaderHandler.java \
! classpath/java/rmi/server/LogStream.java \
! classpath/java/rmi/server/ObjID.java \
! classpath/java/rmi/server/Operation.java \
! classpath/java/rmi/server/RMIClassLoader.java \
! classpath/java/rmi/server/RMIClassLoaderSpi.java \
! classpath/java/rmi/server/RMIClientSocketFactory.java \
! classpath/java/rmi/server/RMIFailureHandler.java \
! classpath/java/rmi/server/RMIServerSocketFactory.java \
! classpath/java/rmi/server/RMISocketFactory.java \
! classpath/java/rmi/server/RemoteCall.java \
! classpath/java/rmi/server/RemoteObject.java \
! classpath/java/rmi/server/RemoteRef.java \
! classpath/java/rmi/server/RemoteServer.java \
! classpath/java/rmi/server/RemoteStub.java \
! classpath/java/rmi/server/ServerCloneException.java \
! classpath/java/rmi/server/ServerNotActiveException.java \
! classpath/java/rmi/server/ServerRef.java \
! classpath/java/rmi/server/Skeleton.java \
! classpath/java/rmi/server/SkeletonMismatchException.java \
! classpath/java/rmi/server/SkeletonNotFoundException.java \
! classpath/java/rmi/server/SocketSecurityException.java \
! classpath/java/rmi/server/UID.java \
! classpath/java/rmi/server/UnicastRemoteObject.java \
! classpath/java/rmi/server/Unreferenced.java
! 
! java_rmi_server_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_rmi_server_source_files)))
! java_security_source_files = \
  java/security/AccessControlContext.java \
! classpath/java/security/AccessControlException.java \
  java/security/AccessController.java \
! classpath/java/security/AlgorithmParameterGenerator.java \
! classpath/java/security/AlgorithmParameterGeneratorSpi.java \
! classpath/java/security/AlgorithmParameters.java \
! classpath/java/security/AlgorithmParametersSpi.java \
! classpath/java/security/AllPermission.java \
! classpath/java/security/BasicPermission.java \
! classpath/java/security/Certificate.java \
! classpath/java/security/CodeSource.java \
! classpath/java/security/DigestException.java \
! classpath/java/security/DigestInputStream.java \
! classpath/java/security/DigestOutputStream.java \
! classpath/java/security/DomainCombiner.java \
! classpath/java/security/DummyKeyPairGenerator.java \
! classpath/java/security/DummyMessageDigest.java \
! classpath/java/security/DummySignature.java \
! classpath/java/security/GeneralSecurityException.java \
! classpath/java/security/Guard.java \
! classpath/java/security/GuardedObject.java \
! classpath/java/security/Identity.java \
! classpath/java/security/IdentityScope.java \
! classpath/java/security/IntersectingDomainCombiner.java \
! classpath/java/security/InvalidAlgorithmParameterException.java \
! classpath/java/security/InvalidKeyException.java \
! classpath/java/security/InvalidParameterException.java \
! classpath/java/security/Key.java \
! classpath/java/security/KeyException.java \
! classpath/java/security/KeyFactory.java \
! classpath/java/security/KeyFactorySpi.java \
! classpath/java/security/KeyManagementException.java \
! classpath/java/security/KeyPair.java \
! classpath/java/security/KeyPairGenerator.java \
! classpath/java/security/KeyPairGeneratorSpi.java \
! classpath/java/security/KeyStore.java \
! classpath/java/security/KeyStoreException.java \
! classpath/java/security/KeyStoreSpi.java \
! classpath/java/security/MessageDigest.java \
! classpath/java/security/MessageDigestSpi.java \
! classpath/java/security/NoSuchAlgorithmException.java \
! classpath/java/security/NoSuchProviderException.java \
! classpath/java/security/Permission.java \
! classpath/java/security/PermissionCollection.java \
! classpath/java/security/Permissions.java \
! classpath/java/security/Policy.java \
! classpath/java/security/Principal.java \
! classpath/java/security/PrivateKey.java \
! classpath/java/security/PrivilegedAction.java \
! classpath/java/security/PrivilegedActionException.java \
! classpath/java/security/PrivilegedExceptionAction.java \
! classpath/java/security/ProtectionDomain.java \
! classpath/java/security/Provider.java \
! classpath/java/security/ProviderException.java \
! classpath/java/security/PublicKey.java \
! classpath/java/security/SecureClassLoader.java \
! classpath/java/security/SecureRandom.java \
! classpath/java/security/SecureRandomSpi.java \
! classpath/java/security/Security.java \
! classpath/java/security/SecurityPermission.java \
! classpath/java/security/Signature.java \
! classpath/java/security/SignatureException.java \
! classpath/java/security/SignatureSpi.java \
! classpath/java/security/SignedObject.java \
! classpath/java/security/Signer.java \
! classpath/java/security/UnrecoverableKeyException.java \
! classpath/java/security/UnresolvedPermission.java
! 
! java_security_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_security_source_files)))
! java_security_acl_source_files = \
! classpath/java/security/acl/Acl.java \
! classpath/java/security/acl/AclEntry.java \
! classpath/java/security/acl/AclNotFoundException.java \
! classpath/java/security/acl/Group.java \
! classpath/java/security/acl/LastOwnerException.java \
! classpath/java/security/acl/NotOwnerException.java \
! classpath/java/security/acl/Owner.java \
! classpath/java/security/acl/Permission.java
! 
! java_security_acl_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_security_acl_source_files)))
! java_security_cert_source_files = \
! classpath/java/security/cert/CRL.java \
! classpath/java/security/cert/CRLException.java \
! classpath/java/security/cert/CRLSelector.java \
! classpath/java/security/cert/CertPath.java \
! classpath/java/security/cert/CertPathBuilder.java \
! classpath/java/security/cert/CertPathBuilderException.java \
! classpath/java/security/cert/CertPathBuilderResult.java \
! classpath/java/security/cert/CertPathBuilderSpi.java \
! classpath/java/security/cert/CertPathParameters.java \
! classpath/java/security/cert/CertPathValidator.java \
! classpath/java/security/cert/CertPathValidatorException.java \
! classpath/java/security/cert/CertPathValidatorResult.java \
! classpath/java/security/cert/CertPathValidatorSpi.java \
! classpath/java/security/cert/CertSelector.java \
! classpath/java/security/cert/CertStore.java \
! classpath/java/security/cert/CertStoreException.java \
! classpath/java/security/cert/CertStoreParameters.java \
! classpath/java/security/cert/CertStoreSpi.java \
! classpath/java/security/cert/Certificate.java \
! classpath/java/security/cert/CertificateEncodingException.java \
! classpath/java/security/cert/CertificateException.java \
! classpath/java/security/cert/CertificateExpiredException.java \
! classpath/java/security/cert/CertificateFactory.java \
! classpath/java/security/cert/CertificateFactorySpi.java \
! classpath/java/security/cert/CertificateNotYetValidException.java \
! classpath/java/security/cert/CertificateParsingException.java \
! classpath/java/security/cert/CollectionCertStoreParameters.java \
! classpath/java/security/cert/LDAPCertStoreParameters.java \
! classpath/java/security/cert/PKIXBuilderParameters.java \
! classpath/java/security/cert/PKIXCertPathBuilderResult.java \
! classpath/java/security/cert/PKIXCertPathChecker.java \
! classpath/java/security/cert/PKIXCertPathValidatorResult.java \
! classpath/java/security/cert/PKIXParameters.java \
! classpath/java/security/cert/PolicyNode.java \
! classpath/java/security/cert/PolicyQualifierInfo.java \
! classpath/java/security/cert/TrustAnchor.java \
! classpath/java/security/cert/X509CRL.java \
! classpath/java/security/cert/X509CRLEntry.java \
! classpath/java/security/cert/X509CRLSelector.java \
! classpath/java/security/cert/X509CertSelector.java \
! classpath/java/security/cert/X509Certificate.java \
! classpath/java/security/cert/X509Extension.java
! 
! java_security_cert_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_security_cert_source_files)))
! java_security_interfaces_source_files = \
! classpath/java/security/interfaces/DSAKey.java \
! classpath/java/security/interfaces/DSAKeyPairGenerator.java \
! classpath/java/security/interfaces/DSAParams.java \
! classpath/java/security/interfaces/DSAPrivateKey.java \
! classpath/java/security/interfaces/DSAPublicKey.java \
! classpath/java/security/interfaces/RSAKey.java \
! classpath/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java \
! classpath/java/security/interfaces/RSAPrivateCrtKey.java \
! classpath/java/security/interfaces/RSAPrivateKey.java \
! classpath/java/security/interfaces/RSAPublicKey.java
! 
! java_security_interfaces_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_security_interfaces_source_files)))
! java_security_spec_source_files = \
! classpath/java/security/spec/AlgorithmParameterSpec.java \
! classpath/java/security/spec/DSAParameterSpec.java \
! classpath/java/security/spec/DSAPrivateKeySpec.java \
! classpath/java/security/spec/DSAPublicKeySpec.java \
! classpath/java/security/spec/EncodedKeySpec.java \
! classpath/java/security/spec/InvalidKeySpecException.java \
! classpath/java/security/spec/InvalidParameterSpecException.java \
! classpath/java/security/spec/KeySpec.java \
! classpath/java/security/spec/PKCS8EncodedKeySpec.java \
! classpath/java/security/spec/PSSParameterSpec.java \
! classpath/java/security/spec/RSAKeyGenParameterSpec.java \
! classpath/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java \
! classpath/java/security/spec/RSAOtherPrimeInfo.java \
! classpath/java/security/spec/RSAPrivateCrtKeySpec.java \
! classpath/java/security/spec/RSAPrivateKeySpec.java \
! classpath/java/security/spec/RSAPublicKeySpec.java \
! classpath/java/security/spec/X509EncodedKeySpec.java
! 
! java_security_spec_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_security_spec_source_files)))
! java_sql_source_files = \
! classpath/java/sql/Array.java \
! classpath/java/sql/BatchUpdateException.java \
! classpath/java/sql/Blob.java \
! classpath/java/sql/CallableStatement.java \
! classpath/java/sql/Clob.java \
! classpath/java/sql/Connection.java \
! classpath/java/sql/DataTruncation.java \
! classpath/java/sql/DatabaseMetaData.java \
! classpath/java/sql/Date.java \
! classpath/java/sql/Driver.java \
! classpath/java/sql/DriverManager.java \
! classpath/java/sql/DriverPropertyInfo.java \
! classpath/java/sql/ParameterMetaData.java \
! classpath/java/sql/PreparedStatement.java \
! classpath/java/sql/Ref.java \
! classpath/java/sql/ResultSet.java \
! classpath/java/sql/ResultSetMetaData.java \
! classpath/java/sql/SQLData.java \
! classpath/java/sql/SQLException.java \
! classpath/java/sql/SQLInput.java \
! classpath/java/sql/SQLOutput.java \
! classpath/java/sql/SQLPermission.java \
! classpath/java/sql/SQLWarning.java \
! classpath/java/sql/Savepoint.java \
! classpath/java/sql/Statement.java \
! classpath/java/sql/Struct.java \
! classpath/java/sql/Time.java \
! classpath/java/sql/Timestamp.java \
! classpath/java/sql/Types.java
! 
! java_sql_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_sql_source_files)))
! java_text_source_files = \
! classpath/java/text/Annotation.java \
! classpath/java/text/AttributedCharacterIterator.java \
! classpath/java/text/AttributedString.java \
! classpath/java/text/AttributedStringIterator.java \
! classpath/java/text/BreakIterator.java \
! classpath/java/text/CharacterIterator.java \
! classpath/java/text/ChoiceFormat.java \
! classpath/java/text/CollationElementIterator.java \
! classpath/java/text/CollationKey.java \
! java/text/Collator.java \
  java/text/DateFormat.java \
  java/text/DateFormatSymbols.java \
! classpath/java/text/DecimalFormat.java \
  java/text/DecimalFormatSymbols.java \
! classpath/java/text/FieldPosition.java \
! classpath/java/text/Format.java \
! classpath/java/text/MessageFormat.java \
! classpath/java/text/NumberFormat.java \
! classpath/java/text/ParseException.java \
! classpath/java/text/ParsePosition.java \
! classpath/java/text/RuleBasedCollator.java \
! classpath/java/text/SimpleDateFormat.java \
! classpath/java/text/StringCharacterIterator.java
! 
! java_text_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_text_source_files)))
! java_util_source_files = \
! classpath/java/util/AbstractCollection.java \
! classpath/java/util/AbstractList.java \
! classpath/java/util/AbstractMap.java \
! classpath/java/util/AbstractSequentialList.java \
! classpath/java/util/AbstractSet.java \
! classpath/java/util/ArrayList.java \
! classpath/java/util/Arrays.java \
! classpath/java/util/BitSet.java \
! java/util/Calendar.java \
! classpath/java/util/Collection.java \
! classpath/java/util/Collections.java \
! classpath/java/util/Comparator.java \
! classpath/java/util/ConcurrentModificationException.java \
! java/util/Currency.java \
! classpath/java/util/Date.java \
! classpath/java/util/Dictionary.java \
! classpath/java/util/EmptyStackException.java \
! classpath/java/util/Enumeration.java \
! classpath/java/util/EventListener.java \
! classpath/java/util/EventListenerProxy.java \
! classpath/java/util/EventObject.java \
! java/util/GregorianCalendar.java \
! classpath/java/util/HashMap.java \
! classpath/java/util/HashSet.java \
! classpath/java/util/Hashtable.java \
! classpath/java/util/IdentityHashMap.java \
! classpath/java/util/InvalidPropertiesFormatException.java \
! classpath/java/util/Iterator.java \
! classpath/java/util/LinkedHashMap.java \
! classpath/java/util/LinkedHashSet.java \
! classpath/java/util/LinkedList.java \
! classpath/java/util/List.java \
! classpath/java/util/ListIterator.java \
! classpath/java/util/ListResourceBundle.java \
! java/util/Locale.java \
! classpath/java/util/LocaleData.java \
! classpath/java/util/Map.java \
! classpath/java/util/MissingResourceException.java \
! classpath/java/util/NoSuchElementException.java \
! classpath/java/util/Observable.java \
! classpath/java/util/Observer.java \
! classpath/java/util/Properties.java \
! classpath/java/util/PropertyPermission.java \
! classpath/java/util/PropertyPermissionCollection.java \
! classpath/java/util/PropertyResourceBundle.java \
! classpath/java/util/Random.java \
! classpath/java/util/RandomAccess.java \
! java/util/ResourceBundle.java \
! classpath/java/util/Set.java \
! classpath/java/util/SimpleTimeZone.java \
! classpath/java/util/SortedMap.java \
! classpath/java/util/SortedSet.java \
! classpath/java/util/Stack.java \
! classpath/java/util/StringTokenizer.java \
! classpath/java/util/TimeZone.java \
! classpath/java/util/Timer.java \
! classpath/java/util/TimerTask.java \
! classpath/java/util/TooManyListenersException.java \
! classpath/java/util/TreeMap.java \
! classpath/java/util/TreeSet.java \
! java/util/VMTimeZone.java \
! classpath/java/util/Vector.java \
! classpath/java/util/WeakHashMap.java
! 
! java_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_util_source_files)))
! java_util_jar_source_files = \
! classpath/java/util/jar/Attributes.java \
! classpath/java/util/jar/JarEntry.java \
! classpath/java/util/jar/JarException.java \
! classpath/java/util/jar/JarFile.java \
! classpath/java/util/jar/JarInputStream.java \
! classpath/java/util/jar/JarOutputStream.java \
! classpath/java/util/jar/Manifest.java
! 
! java_util_jar_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_util_jar_source_files)))
! java_util_logging_source_files = \
! classpath/java/util/logging/ConsoleHandler.java \
! classpath/java/util/logging/ErrorManager.java \
! classpath/java/util/logging/FileHandler.java \
! classpath/java/util/logging/Filter.java \
! classpath/java/util/logging/Formatter.java \
! classpath/java/util/logging/Handler.java \
! classpath/java/util/logging/Level.java \
! java/util/logging/LogManager.java \
! classpath/java/util/logging/LogRecord.java \
! java/util/logging/Logger.java \
! classpath/java/util/logging/LoggingPermission.java \
! classpath/java/util/logging/MemoryHandler.java \
! classpath/java/util/logging/SimpleFormatter.java \
! classpath/java/util/logging/SocketHandler.java \
! classpath/java/util/logging/StreamHandler.java \
! classpath/java/util/logging/XMLFormatter.java
! 
! java_util_logging_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_util_logging_source_files)))
! java_util_prefs_source_files = \
! classpath/java/util/prefs/AbstractPreferences.java \
! classpath/java/util/prefs/BackingStoreException.java \
! classpath/java/util/prefs/InvalidPreferencesFormatException.java \
! classpath/java/util/prefs/NodeChangeEvent.java \
! classpath/java/util/prefs/NodeChangeListener.java \
! classpath/java/util/prefs/PreferenceChangeEvent.java \
! classpath/java/util/prefs/PreferenceChangeListener.java \
! classpath/java/util/prefs/Preferences.java \
! classpath/java/util/prefs/PreferencesFactory.java
! 
! java_util_prefs_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_util_prefs_source_files)))
! java_util_regex_source_files = \
! classpath/java/util/regex/MatchResult.java \
! classpath/java/util/regex/Matcher.java \
! classpath/java/util/regex/Pattern.java \
! classpath/java/util/regex/PatternSyntaxException.java
! 
! java_util_regex_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_util_regex_source_files)))
! java_util_zip_source_files = \
! classpath/java/util/zip/Adler32.java \
! classpath/java/util/zip/CRC32.java \
! classpath/java/util/zip/CheckedInputStream.java \
! classpath/java/util/zip/CheckedOutputStream.java \
! classpath/java/util/zip/Checksum.java \
! classpath/java/util/zip/DataFormatException.java \
  java/util/zip/Deflater.java \
! java/util/zip/DeflaterOutputStream.java \
  java/util/zip/GZIPInputStream.java \
  java/util/zip/GZIPOutputStream.java \
  java/util/zip/Inflater.java \
  java/util/zip/InflaterInputStream.java \
! classpath/java/util/zip/ZipConstants.java \
! classpath/java/util/zip/ZipEntry.java \
! classpath/java/util/zip/ZipException.java \
! classpath/java/util/zip/ZipFile.java \
! classpath/java/util/zip/ZipInputStream.java \
! classpath/java/util/zip/ZipOutputStream.java
  
! java_util_zip_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_util_zip_source_files)))
! javax_accessibility_source_files = \
! classpath/javax/accessibility/Accessible.java \
! classpath/javax/accessibility/AccessibleAction.java \
! classpath/javax/accessibility/AccessibleBundle.java \
! classpath/javax/accessibility/AccessibleComponent.java \
! classpath/javax/accessibility/AccessibleContext.java \
! classpath/javax/accessibility/AccessibleEditableText.java \
! classpath/javax/accessibility/AccessibleExtendedComponent.java \
! classpath/javax/accessibility/AccessibleExtendedTable.java \
! classpath/javax/accessibility/AccessibleHyperlink.java \
! classpath/javax/accessibility/AccessibleHypertext.java \
! classpath/javax/accessibility/AccessibleIcon.java \
! classpath/javax/accessibility/AccessibleKeyBinding.java \
! classpath/javax/accessibility/AccessibleRelation.java \
! classpath/javax/accessibility/AccessibleRelationSet.java \
! classpath/javax/accessibility/AccessibleResourceBundle.java \
! classpath/javax/accessibility/AccessibleRole.java \
! classpath/javax/accessibility/AccessibleSelection.java \
! classpath/javax/accessibility/AccessibleState.java \
! classpath/javax/accessibility/AccessibleStateSet.java \
! classpath/javax/accessibility/AccessibleTable.java \
! classpath/javax/accessibility/AccessibleTableModelChange.java \
! classpath/javax/accessibility/AccessibleText.java \
! classpath/javax/accessibility/AccessibleValue.java
! 
! javax_accessibility_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_accessibility_source_files)))
! javax_crypto_source_files = \
! classpath/javax/crypto/BadPaddingException.java \
! classpath/javax/crypto/Cipher.java \
! classpath/javax/crypto/CipherInputStream.java \
! classpath/javax/crypto/CipherOutputStream.java \
! classpath/javax/crypto/CipherSpi.java \
! classpath/javax/crypto/EncryptedPrivateKeyInfo.java \
! classpath/javax/crypto/ExemptionMechanism.java \
! classpath/javax/crypto/ExemptionMechanismException.java \
! classpath/javax/crypto/ExemptionMechanismSpi.java \
! classpath/javax/crypto/IllegalBlockSizeException.java \
! classpath/javax/crypto/KeyAgreement.java \
! classpath/javax/crypto/KeyAgreementSpi.java \
! classpath/javax/crypto/KeyGenerator.java \
! classpath/javax/crypto/KeyGeneratorSpi.java \
! classpath/javax/crypto/Mac.java \
! classpath/javax/crypto/MacSpi.java \
! classpath/javax/crypto/NoSuchPaddingException.java \
! classpath/javax/crypto/NullCipher.java \
! classpath/javax/crypto/NullCipherImpl.java \
! classpath/javax/crypto/SealedObject.java \
! classpath/javax/crypto/SecretKey.java \
! classpath/javax/crypto/SecretKeyFactory.java \
! classpath/javax/crypto/SecretKeyFactorySpi.java \
! classpath/javax/crypto/ShortBufferException.java
! 
! javax_crypto_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_crypto_source_files)))
! javax_crypto_interfaces_source_files = \
! classpath/javax/crypto/interfaces/DHKey.java \
! classpath/javax/crypto/interfaces/DHPrivateKey.java \
! classpath/javax/crypto/interfaces/DHPublicKey.java \
! classpath/javax/crypto/interfaces/PBEKey.java
! 
! javax_crypto_interfaces_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_crypto_interfaces_source_files)))
! javax_crypto_spec_source_files = \
! classpath/javax/crypto/spec/DESKeySpec.java \
! classpath/javax/crypto/spec/DESedeKeySpec.java \
! classpath/javax/crypto/spec/DHGenParameterSpec.java \
! classpath/javax/crypto/spec/DHParameterSpec.java \
! classpath/javax/crypto/spec/DHPrivateKeySpec.java \
! classpath/javax/crypto/spec/DHPublicKeySpec.java \
! classpath/javax/crypto/spec/IvParameterSpec.java \
! classpath/javax/crypto/spec/PBEKeySpec.java \
! classpath/javax/crypto/spec/PBEParameterSpec.java \
! classpath/javax/crypto/spec/RC2ParameterSpec.java \
! classpath/javax/crypto/spec/RC5ParameterSpec.java \
! classpath/javax/crypto/spec/SecretKeySpec.java
! 
! javax_crypto_spec_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_crypto_spec_source_files)))
! javax_imageio_source_files = \
! classpath/javax/imageio/IIOException.java \
! classpath/javax/imageio/IIOImage.java \
! classpath/javax/imageio/IIOParam.java \
! classpath/javax/imageio/IIOParamController.java \
! classpath/javax/imageio/ImageIO.java \
! classpath/javax/imageio/ImageReadParam.java \
! classpath/javax/imageio/ImageReader.java \
! classpath/javax/imageio/ImageTranscoder.java \
! classpath/javax/imageio/ImageTypeSpecifier.java \
! classpath/javax/imageio/ImageWriteParam.java \
! classpath/javax/imageio/ImageWriter.java \
! classpath/javax/imageio/event/IIOReadProgressListener.java \
! classpath/javax/imageio/event/IIOReadUpdateListener.java \
! classpath/javax/imageio/event/IIOReadWarningListener.java \
! classpath/javax/imageio/event/IIOWriteProgressListener.java \
! classpath/javax/imageio/event/IIOWriteWarningListener.java \
! classpath/javax/imageio/metadata/IIOInvalidTreeException.java \
! classpath/javax/imageio/metadata/IIOMetadata.java \
! classpath/javax/imageio/metadata/IIOMetadataController.java \
! classpath/javax/imageio/metadata/IIOMetadataFormat.java \
! classpath/javax/imageio/metadata/IIOMetadataFormatImpl.java \
! classpath/javax/imageio/metadata/IIOMetadataNode.java \
! classpath/javax/imageio/spi/IIORegistry.java \
! classpath/javax/imageio/spi/IIOServiceProvider.java \
! classpath/javax/imageio/spi/ImageInputStreamSpi.java \
! classpath/javax/imageio/spi/ImageOutputStreamSpi.java \
! classpath/javax/imageio/spi/ImageReaderSpi.java \
! classpath/javax/imageio/spi/ImageReaderWriterSpi.java \
! classpath/javax/imageio/spi/ImageTranscoderSpi.java \
! classpath/javax/imageio/spi/ImageWriterSpi.java \
! classpath/javax/imageio/spi/RegisterableService.java \
! classpath/javax/imageio/spi/ServiceRegistry.java \
! classpath/javax/imageio/stream/FileCacheImageInputStream.java \
! classpath/javax/imageio/stream/FileCacheImageOutputStream.java \
! classpath/javax/imageio/stream/FileImageInputStream.java \
! classpath/javax/imageio/stream/FileImageOutputStream.java \
! classpath/javax/imageio/stream/IIOByteBuffer.java \
! classpath/javax/imageio/stream/ImageInputStream.java \
! classpath/javax/imageio/stream/ImageInputStreamImpl.java \
! classpath/javax/imageio/stream/ImageOutputStream.java \
! classpath/javax/imageio/stream/ImageOutputStreamImpl.java \
! classpath/javax/imageio/stream/MemoryCacheImageInputStream.java \
! classpath/javax/imageio/stream/MemoryCacheImageOutputStream.java
! 
! javax_naming_source_files = \
! classpath/javax/naming/AuthenticationException.java \
! classpath/javax/naming/AuthenticationNotSupportedException.java \
! classpath/javax/naming/BinaryRefAddr.java \
! classpath/javax/naming/Binding.java \
! classpath/javax/naming/CannotProceedException.java \
! classpath/javax/naming/CommunicationException.java \
! classpath/javax/naming/CompositeName.java \
! classpath/javax/naming/CompoundName.java \
! classpath/javax/naming/ConfigurationException.java \
! classpath/javax/naming/Context.java \
! classpath/javax/naming/ContextNotEmptyException.java \
! classpath/javax/naming/InitialContext.java \
! classpath/javax/naming/InsufficientResourcesException.java \
! classpath/javax/naming/InterruptedNamingException.java \
! classpath/javax/naming/InvalidNameException.java \
! classpath/javax/naming/LimitExceededException.java \
! classpath/javax/naming/LinkException.java \
! classpath/javax/naming/LinkLoopException.java \
! classpath/javax/naming/LinkRef.java \
! classpath/javax/naming/MalformedLinkException.java \
! classpath/javax/naming/Name.java \
! classpath/javax/naming/NameAlreadyBoundException.java \
! classpath/javax/naming/NameClassPair.java \
! classpath/javax/naming/NameNotFoundException.java \
! classpath/javax/naming/NameParser.java \
! classpath/javax/naming/NamingEnumeration.java \
! classpath/javax/naming/NamingException.java \
! classpath/javax/naming/NamingSecurityException.java \
! classpath/javax/naming/NoInitialContextException.java \
! classpath/javax/naming/NoPermissionException.java \
! classpath/javax/naming/NotContextException.java \
! classpath/javax/naming/OperationNotSupportedException.java \
! classpath/javax/naming/PartialResultException.java \
! classpath/javax/naming/RefAddr.java \
! classpath/javax/naming/Reference.java \
! classpath/javax/naming/Referenceable.java \
! classpath/javax/naming/ReferralException.java \
! classpath/javax/naming/ServiceUnavailableException.java \
! classpath/javax/naming/SizeLimitExceededException.java \
! classpath/javax/naming/StringRefAddr.java \
! classpath/javax/naming/TimeLimitExceededException.java
! 
! javax_naming_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_naming_source_files)))
! javax_naming_directory_source_files = \
! classpath/javax/naming/directory/Attribute.java \
! classpath/javax/naming/directory/AttributeInUseException.java \
! classpath/javax/naming/directory/AttributeModificationException.java \
! classpath/javax/naming/directory/Attributes.java \
! classpath/javax/naming/directory/BasicAttribute.java \
! classpath/javax/naming/directory/BasicAttributes.java \
! classpath/javax/naming/directory/DirContext.java \
! classpath/javax/naming/directory/InitialDirContext.java \
! classpath/javax/naming/directory/InvalidAttributeIdentifierException.java \
! classpath/javax/naming/directory/InvalidAttributeValueException.java \
! classpath/javax/naming/directory/InvalidAttributesException.java \
! classpath/javax/naming/directory/InvalidSearchControlsException.java \
! classpath/javax/naming/directory/InvalidSearchFilterException.java \
! classpath/javax/naming/directory/ModificationItem.java \
! classpath/javax/naming/directory/NoSuchAttributeException.java \
! classpath/javax/naming/directory/SchemaViolationException.java \
! classpath/javax/naming/directory/SearchControls.java \
! classpath/javax/naming/directory/SearchResult.java
! 
! javax_naming_directory_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_naming_directory_source_files)))
! javax_naming_event_source_files = \
! classpath/javax/naming/event/EventContext.java \
! classpath/javax/naming/event/EventDirContext.java \
! classpath/javax/naming/event/NamespaceChangeListener.java \
! classpath/javax/naming/event/NamingEvent.java \
! classpath/javax/naming/event/NamingExceptionEvent.java \
! classpath/javax/naming/event/NamingListener.java \
! classpath/javax/naming/event/ObjectChangeListener.java
! 
! javax_naming_event_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_naming_event_source_files)))
! javax_naming_ldap_source_files = \
! classpath/javax/naming/ldap/Control.java \
! classpath/javax/naming/ldap/ControlFactory.java \
! classpath/javax/naming/ldap/ExtendedRequest.java \
! classpath/javax/naming/ldap/ExtendedResponse.java \
! classpath/javax/naming/ldap/HasControls.java \
! classpath/javax/naming/ldap/InitialLdapContext.java \
! classpath/javax/naming/ldap/LdapContext.java \
! classpath/javax/naming/ldap/LdapReferralException.java \
! classpath/javax/naming/ldap/UnsolicitedNotification.java \
! classpath/javax/naming/ldap/UnsolicitedNotificationEvent.java \
! classpath/javax/naming/ldap/UnsolicitedNotificationListener.java
! 
! javax_naming_ldap_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_naming_ldap_source_files)))
! javax_naming_spi_source_files = \
! classpath/javax/naming/spi/DirObjectFactory.java \
! classpath/javax/naming/spi/DirStateFactory.java \
! classpath/javax/naming/spi/DirectoryManager.java \
! classpath/javax/naming/spi/InitialContextFactory.java \
! classpath/javax/naming/spi/InitialContextFactoryBuilder.java \
! classpath/javax/naming/spi/NamingManager.java \
! classpath/javax/naming/spi/ObjectFactory.java \
! classpath/javax/naming/spi/ObjectFactoryBuilder.java \
! classpath/javax/naming/spi/ResolveResult.java \
! classpath/javax/naming/spi/Resolver.java \
! classpath/javax/naming/spi/StateFactory.java
! 
! javax_naming_spi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_naming_spi_source_files)))
! javax_net_source_files = \
! classpath/javax/net/ServerSocketFactory.java \
! classpath/javax/net/SocketFactory.java \
! classpath/javax/net/VanillaServerSocketFactory.java \
! classpath/javax/net/VanillaSocketFactory.java
! 
! javax_net_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_net_source_files)))
! javax_net_ssl_source_files = \
! classpath/javax/net/ssl/HandshakeCompletedEvent.java \
! classpath/javax/net/ssl/HandshakeCompletedListener.java \
! classpath/javax/net/ssl/HostnameVerifier.java \
! classpath/javax/net/ssl/HttpsURLConnection.java \
! classpath/javax/net/ssl/KeyManager.java \
! classpath/javax/net/ssl/KeyManagerFactory.java \
! classpath/javax/net/ssl/KeyManagerFactorySpi.java \
! classpath/javax/net/ssl/ManagerFactoryParameters.java \
! classpath/javax/net/ssl/SSLContext.java \
! classpath/javax/net/ssl/SSLContextSpi.java \
! classpath/javax/net/ssl/SSLException.java \
! classpath/javax/net/ssl/SSLHandshakeException.java \
! classpath/javax/net/ssl/SSLKeyException.java \
! classpath/javax/net/ssl/SSLPeerUnverifiedException.java \
! classpath/javax/net/ssl/SSLPermission.java \
! classpath/javax/net/ssl/SSLProtocolException.java \
! classpath/javax/net/ssl/SSLServerSocket.java \
! classpath/javax/net/ssl/SSLServerSocketFactory.java \
! classpath/javax/net/ssl/SSLSession.java \
! classpath/javax/net/ssl/SSLSessionBindingEvent.java \
! classpath/javax/net/ssl/SSLSessionBindingListener.java \
! classpath/javax/net/ssl/SSLSessionContext.java \
! classpath/javax/net/ssl/SSLSocket.java \
! classpath/javax/net/ssl/SSLSocketFactory.java \
! classpath/javax/net/ssl/TrivialHostnameVerifier.java \
! classpath/javax/net/ssl/TrustManager.java \
! classpath/javax/net/ssl/TrustManagerFactory.java \
! classpath/javax/net/ssl/TrustManagerFactorySpi.java \
! classpath/javax/net/ssl/X509KeyManager.java \
! classpath/javax/net/ssl/X509TrustManager.java
! 
! javax_net_ssl_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_net_ssl_source_files)))
! javax_print_source_files = \
! classpath/javax/print/AttributeException.java \
! classpath/javax/print/CancelablePrintJob.java \
! classpath/javax/print/Doc.java \
! classpath/javax/print/DocFlavor.java \
! classpath/javax/print/DocPrintJob.java \
! classpath/javax/print/FlavorException.java \
! classpath/javax/print/MultiDoc.java \
! classpath/javax/print/MultiDocPrintJob.java \
! classpath/javax/print/MultiDocPrintService.java \
! classpath/javax/print/PrintException.java \
! classpath/javax/print/PrintService.java \
! classpath/javax/print/PrintServiceLookup.java \
! classpath/javax/print/ServiceUIFactory.java \
! classpath/javax/print/StreamPrintService.java \
! classpath/javax/print/URIException.java
! 
! javax_print_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_print_source_files)))
! javax_print_attribute_source_files = \
! classpath/javax/print/attribute/Attribute.java \
! classpath/javax/print/attribute/AttributeSet.java \
! classpath/javax/print/attribute/AttributeSetUtilities.java \
! classpath/javax/print/attribute/DateTimeSyntax.java \
! classpath/javax/print/attribute/DocAttribute.java \
! classpath/javax/print/attribute/DocAttributeSet.java \
! classpath/javax/print/attribute/EnumSyntax.java \
! classpath/javax/print/attribute/HashAttributeSet.java \
! classpath/javax/print/attribute/HashDocAttributeSet.java \
! classpath/javax/print/attribute/HashPrintJobAttributeSet.java \
! classpath/javax/print/attribute/HashPrintRequestAttributeSet.java \
! classpath/javax/print/attribute/HashPrintServiceAttributeSet.java \
! classpath/javax/print/attribute/IntegerSyntax.java \
! classpath/javax/print/attribute/PrintJobAttribute.java \
! classpath/javax/print/attribute/PrintJobAttributeSet.java \
! classpath/javax/print/attribute/PrintRequestAttribute.java \
! classpath/javax/print/attribute/PrintRequestAttributeSet.java \
! classpath/javax/print/attribute/PrintServiceAttribute.java \
! classpath/javax/print/attribute/PrintServiceAttributeSet.java \
! classpath/javax/print/attribute/ResolutionSyntax.java \
! classpath/javax/print/attribute/SetOfIntegerSyntax.java \
! classpath/javax/print/attribute/Size2DSyntax.java \
! classpath/javax/print/attribute/SupportedValuesAttribute.java \
! classpath/javax/print/attribute/TextSyntax.java \
! classpath/javax/print/attribute/URISyntax.java \
! classpath/javax/print/attribute/UnmodifiableSetException.java
! 
! javax_print_attribute_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_print_attribute_source_files)))
! javax_print_attribute_standard_source_files = \
! classpath/javax/print/attribute/standard/Chromaticity.java \
! classpath/javax/print/attribute/standard/ColorSupported.java \
! classpath/javax/print/attribute/standard/Compression.java \
! classpath/javax/print/attribute/standard/Copies.java \
! classpath/javax/print/attribute/standard/CopiesSupported.java \
! classpath/javax/print/attribute/standard/DateTimeAtCompleted.java \
! classpath/javax/print/attribute/standard/DateTimeAtCreation.java \
! classpath/javax/print/attribute/standard/DateTimeAtProcessing.java \
! classpath/javax/print/attribute/standard/Destination.java \
! classpath/javax/print/attribute/standard/DocumentName.java \
! classpath/javax/print/attribute/standard/Fidelity.java \
! classpath/javax/print/attribute/standard/Finishings.java \
! classpath/javax/print/attribute/standard/JobHoldUntil.java \
! classpath/javax/print/attribute/standard/JobImpressions.java \
! classpath/javax/print/attribute/standard/JobImpressionsCompleted.java \
! classpath/javax/print/attribute/standard/JobImpressionsSupported.java \
! classpath/javax/print/attribute/standard/JobKOctets.java \
! classpath/javax/print/attribute/standard/JobKOctetsProcessed.java \
! classpath/javax/print/attribute/standard/JobKOctetsSupported.java \
! classpath/javax/print/attribute/standard/JobMediaSheets.java \
! classpath/javax/print/attribute/standard/JobMediaSheetsCompleted.java \
! classpath/javax/print/attribute/standard/JobMediaSheetsSupported.java \
! classpath/javax/print/attribute/standard/JobMessageFromOperator.java \
! classpath/javax/print/attribute/standard/JobName.java \
! classpath/javax/print/attribute/standard/JobOriginatingUserName.java \
! classpath/javax/print/attribute/standard/JobPriority.java \
! classpath/javax/print/attribute/standard/JobPrioritySupported.java \
! classpath/javax/print/attribute/standard/JobSheets.java \
! classpath/javax/print/attribute/standard/JobState.java \
! classpath/javax/print/attribute/standard/JobStateReason.java \
! classpath/javax/print/attribute/standard/JobStateReasons.java \
! classpath/javax/print/attribute/standard/Media.java \
! classpath/javax/print/attribute/standard/MediaPrintableArea.java \
! classpath/javax/print/attribute/standard/MediaSize.java \
! classpath/javax/print/attribute/standard/MediaSizeName.java \
! classpath/javax/print/attribute/standard/MultipleDocumentHandling.java \
! classpath/javax/print/attribute/standard/NumberOfDocuments.java \
! classpath/javax/print/attribute/standard/NumberOfInterveningJobs.java \
! classpath/javax/print/attribute/standard/NumberUp.java \
! classpath/javax/print/attribute/standard/NumberUpSupported.java \
! classpath/javax/print/attribute/standard/OrientationRequested.java \
! classpath/javax/print/attribute/standard/OutputDeviceAssigned.java \
! classpath/javax/print/attribute/standard/PDLOverrideSupported.java \
! classpath/javax/print/attribute/standard/PageRanges.java \
! classpath/javax/print/attribute/standard/PagesPerMinute.java \
! classpath/javax/print/attribute/standard/PagesPerMinuteColor.java \
! classpath/javax/print/attribute/standard/PresentationDirection.java \
! classpath/javax/print/attribute/standard/PrintQuality.java \
! classpath/javax/print/attribute/standard/PrinterInfo.java \
! classpath/javax/print/attribute/standard/PrinterIsAcceptingJobs.java \
! classpath/javax/print/attribute/standard/PrinterLocation.java \
! classpath/javax/print/attribute/standard/PrinterMakeAndModel.java \
! classpath/javax/print/attribute/standard/PrinterMessageFromOperator.java \
! classpath/javax/print/attribute/standard/PrinterMoreInfo.java \
! classpath/javax/print/attribute/standard/PrinterMoreInfoManufacturer.java \
! classpath/javax/print/attribute/standard/PrinterName.java \
! classpath/javax/print/attribute/standard/PrinterResolution.java \
! classpath/javax/print/attribute/standard/PrinterState.java \
! classpath/javax/print/attribute/standard/PrinterStateReason.java \
! classpath/javax/print/attribute/standard/PrinterStateReasons.java \
! classpath/javax/print/attribute/standard/PrinterURI.java \
! classpath/javax/print/attribute/standard/QueuedJobCount.java \
! classpath/javax/print/attribute/standard/ReferenceUriSchemesSupported.java \
! classpath/javax/print/attribute/standard/RequestingUserName.java \
! classpath/javax/print/attribute/standard/Severity.java \
! classpath/javax/print/attribute/standard/SheetCollate.java \
! classpath/javax/print/attribute/standard/Sides.java
! 
! javax_print_attribute_standard_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_print_attribute_standard_source_files)))
! javax_print_event_source_files = \
! classpath/javax/print/event/PrintEvent.java \
! classpath/javax/print/event/PrintJobAdapter.java \
! classpath/javax/print/event/PrintJobAttributeEvent.java \
! classpath/javax/print/event/PrintJobAttributeListener.java \
! classpath/javax/print/event/PrintJobEvent.java \
! classpath/javax/print/event/PrintJobListener.java \
! classpath/javax/print/event/PrintServiceAttributeEvent.java \
! classpath/javax/print/event/PrintServiceAttributeListener.java
! 
! javax_print_event_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_print_event_source_files)))
! javax_rmi_source_files = \
! classpath/javax/rmi/CORBA/ClassDesc.java \
! classpath/javax/rmi/CORBA/PortableRemoteObjectDelegate.java \
! classpath/javax/rmi/CORBA/Stub.java \
! classpath/javax/rmi/CORBA/StubDelegate.java \
! classpath/javax/rmi/CORBA/Tie.java \
! classpath/javax/rmi/CORBA/Util.java \
! classpath/javax/rmi/CORBA/UtilDelegate.java \
! classpath/javax/rmi/CORBA/ValueHandler.java \
! classpath/javax/rmi/CORBA/ValueHandlerMultiFormat.java \
! classpath/javax/rmi/PortableRemoteObject.java
! 
! javax_security_auth_source_files = \
! classpath/javax/security/auth/AuthPermission.java \
! classpath/javax/security/auth/DestroyFailedException.java \
! classpath/javax/security/auth/Destroyable.java \
! classpath/javax/security/auth/Policy.java \
! classpath/javax/security/auth/PrivateCredentialPermission.java \
! classpath/javax/security/auth/RefreshFailedException.java \
! classpath/javax/security/auth/Refreshable.java \
! classpath/javax/security/auth/Subject.java \
! classpath/javax/security/auth/SubjectDomainCombiner.java
! 
! javax_security_auth_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_auth_source_files)))
! javax_security_auth_callback_source_files = \
! classpath/javax/security/auth/callback/Callback.java \
! classpath/javax/security/auth/callback/CallbackHandler.java \
! classpath/javax/security/auth/callback/ChoiceCallback.java \
! classpath/javax/security/auth/callback/ConfirmationCallback.java \
! classpath/javax/security/auth/callback/LanguageCallback.java \
! classpath/javax/security/auth/callback/NameCallback.java \
! classpath/javax/security/auth/callback/PasswordCallback.java \
! classpath/javax/security/auth/callback/TextInputCallback.java \
! classpath/javax/security/auth/callback/TextOutputCallback.java \
! classpath/javax/security/auth/callback/UnsupportedCallbackException.java
! 
! javax_security_auth_callback_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_auth_callback_source_files)))
! javax_security_auth_login_source_files = \
! classpath/javax/security/auth/login/AccountExpiredException.java \
! classpath/javax/security/auth/login/AppConfigurationEntry.java \
! classpath/javax/security/auth/login/Configuration.java \
! classpath/javax/security/auth/login/CredentialExpiredException.java \
! classpath/javax/security/auth/login/FailedLoginException.java \
! classpath/javax/security/auth/login/LoginContext.java \
! classpath/javax/security/auth/login/LoginException.java \
! classpath/javax/security/auth/login/NullConfiguration.java
! 
! javax_security_auth_login_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_auth_login_source_files)))
! javax_security_auth_spi_source_files = \
! classpath/javax/security/auth/spi/LoginModule.java
! 
! javax_security_auth_spi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_auth_spi_source_files)))
! javax_security_auth_x500_source_files = \
! classpath/javax/security/auth/x500/X500Principal.java \
! classpath/javax/security/auth/x500/X500PrivateCredential.java
! 
! javax_security_auth_x500_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_auth_x500_source_files)))
! javax_security_cert_source_files = \
! classpath/javax/security/cert/Certificate.java \
! classpath/javax/security/cert/CertificateEncodingException.java \
! classpath/javax/security/cert/CertificateException.java \
! classpath/javax/security/cert/CertificateExpiredException.java \
! classpath/javax/security/cert/CertificateNotYetValidException.java \
! classpath/javax/security/cert/CertificateParsingException.java \
! classpath/javax/security/cert/X509CertBridge.java \
! classpath/javax/security/cert/X509Certificate.java
! 
! javax_security_cert_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_cert_source_files)))
! javax_security_sasl_source_files = \
! classpath/javax/security/sasl/AuthenticationException.java \
! classpath/javax/security/sasl/AuthorizeCallback.java \
! classpath/javax/security/sasl/RealmCallback.java \
! classpath/javax/security/sasl/RealmChoiceCallback.java \
! classpath/javax/security/sasl/Sasl.java \
! classpath/javax/security/sasl/SaslClient.java \
! classpath/javax/security/sasl/SaslClientFactory.java \
! classpath/javax/security/sasl/SaslException.java \
! classpath/javax/security/sasl/SaslServer.java \
! classpath/javax/security/sasl/SaslServerFactory.java
! 
! javax_security_sasl_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_sasl_source_files)))
! javax_sound_midi_source_files = \
! classpath/javax/sound/midi/ControllerEventListener.java \
! classpath/javax/sound/midi/Instrument.java \
! classpath/javax/sound/midi/InvalidMidiDataException.java \
! classpath/javax/sound/midi/MetaEventListener.java \
! classpath/javax/sound/midi/MetaMessage.java \
! classpath/javax/sound/midi/MidiChannel.java \
! classpath/javax/sound/midi/MidiDevice.java \
! classpath/javax/sound/midi/MidiEvent.java \
! classpath/javax/sound/midi/MidiFileFormat.java \
! classpath/javax/sound/midi/MidiMessage.java \
! classpath/javax/sound/midi/MidiSystem.java \
! classpath/javax/sound/midi/MidiUnavailableException.java \
! classpath/javax/sound/midi/Patch.java \
! classpath/javax/sound/midi/Receiver.java \
! classpath/javax/sound/midi/Sequence.java \
! classpath/javax/sound/midi/Sequencer.java \
! classpath/javax/sound/midi/ShortMessage.java \
! classpath/javax/sound/midi/Soundbank.java \
! classpath/javax/sound/midi/SoundbankResource.java \
! classpath/javax/sound/midi/Synthesizer.java \
! classpath/javax/sound/midi/SysexMessage.java \
! classpath/javax/sound/midi/Track.java \
! classpath/javax/sound/midi/Transmitter.java \
! classpath/javax/sound/midi/VoiceStatus.java
! 
! javax_sound_midi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_sound_midi_source_files)))
! javax_sound_midi_spi_source_files = \
! classpath/javax/sound/midi/spi/MidiDeviceProvider.java \
! classpath/javax/sound/midi/spi/MidiFileReader.java \
! classpath/javax/sound/midi/spi/MidiFileWriter.java \
! classpath/javax/sound/midi/spi/SoundbankReader.java
! 
! javax_sound_midi_spi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_sound_midi_spi_source_files)))
! javax_sound_sampled_source_files = \
! classpath/javax/sound/sampled/AudioFileFormat.java \
! classpath/javax/sound/sampled/AudioFormat.java \
! classpath/javax/sound/sampled/AudioInputStream.java \
! classpath/javax/sound/sampled/AudioPermission.java \
! classpath/javax/sound/sampled/AudioSystem.java \
! classpath/javax/sound/sampled/BooleanControl.java \
! classpath/javax/sound/sampled/Clip.java \
! classpath/javax/sound/sampled/CompoundControl.java \
! classpath/javax/sound/sampled/Control.java \
! classpath/javax/sound/sampled/DataLine.java \
! classpath/javax/sound/sampled/EnumControl.java \
! classpath/javax/sound/sampled/FloatControl.java \
! classpath/javax/sound/sampled/Line.java \
! classpath/javax/sound/sampled/LineEvent.java \
! classpath/javax/sound/sampled/LineListener.java \
! classpath/javax/sound/sampled/LineUnavailableException.java \
! classpath/javax/sound/sampled/Mixer.java \
! classpath/javax/sound/sampled/Port.java \
! classpath/javax/sound/sampled/ReverbType.java \
! classpath/javax/sound/sampled/SourceDataLine.java \
! classpath/javax/sound/sampled/TargetDataLine.java \
! classpath/javax/sound/sampled/UnsupportedAudioFileException.java
  
+ javax_sound_sampled_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_sound_sampled_source_files)))
+ javax_sound_sampled_spi_source_files = \
+ classpath/javax/sound/sampled/spi/AudioFileReader.java \
+ classpath/javax/sound/sampled/spi/AudioFileWriter.java \
+ classpath/javax/sound/sampled/spi/FormatConversionProvider.java \
+ classpath/javax/sound/sampled/spi/MixerProvider.java
+ 
+ javax_sound_sampled_spi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_sound_sampled_spi_source_files)))
+ javax_sql_source_files = \
+ classpath/javax/sql/ConnectionEvent.java \
+ classpath/javax/sql/ConnectionEventListener.java \
+ classpath/javax/sql/ConnectionPoolDataSource.java \
+ classpath/javax/sql/DataSource.java \
+ classpath/javax/sql/PooledConnection.java \
+ classpath/javax/sql/RowSet.java \
+ classpath/javax/sql/RowSetEvent.java \
+ classpath/javax/sql/RowSetInternal.java \
+ classpath/javax/sql/RowSetListener.java \
+ classpath/javax/sql/RowSetMetaData.java \
+ classpath/javax/sql/RowSetReader.java \
+ classpath/javax/sql/RowSetWriter.java \
+ classpath/javax/sql/XAConnection.java \
+ classpath/javax/sql/XADataSource.java
+ 
+ javax_sql_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_sql_source_files)))
+ javax_swing_source_files = \
+ classpath/javax/swing/AbstractAction.java \
+ classpath/javax/swing/AbstractButton.java \
+ classpath/javax/swing/AbstractCellEditor.java \
+ classpath/javax/swing/AbstractListModel.java \
+ classpath/javax/swing/AbstractSpinnerModel.java \
+ classpath/javax/swing/Action.java \
+ classpath/javax/swing/ActionMap.java \
+ classpath/javax/swing/BorderFactory.java \
+ classpath/javax/swing/BoundedRangeModel.java \
+ classpath/javax/swing/Box.java \
+ classpath/javax/swing/BoxLayout.java \
+ classpath/javax/swing/ButtonGroup.java \
+ classpath/javax/swing/ButtonModel.java \
+ classpath/javax/swing/CellEditor.java \
+ classpath/javax/swing/CellRendererPane.java \
+ classpath/javax/swing/ComboBoxEditor.java \
+ classpath/javax/swing/ComboBoxModel.java \
+ classpath/javax/swing/ComponentInputMap.java \
+ classpath/javax/swing/DebugGraphics.java \
+ classpath/javax/swing/DefaultBoundedRangeModel.java \
+ classpath/javax/swing/DefaultButtonModel.java \
+ classpath/javax/swing/DefaultCellEditor.java \
+ classpath/javax/swing/DefaultComboBoxModel.java \
+ classpath/javax/swing/DefaultDesktopManager.java \
+ classpath/javax/swing/DefaultFocusManager.java \
+ classpath/javax/swing/DefaultListCellRenderer.java \
+ classpath/javax/swing/DefaultListModel.java \
+ classpath/javax/swing/DefaultListSelectionModel.java \
+ classpath/javax/swing/DefaultSingleSelectionModel.java \
+ classpath/javax/swing/DesktopManager.java \
+ classpath/javax/swing/FocusManager.java \
+ classpath/javax/swing/GrayFilter.java \
+ classpath/javax/swing/Icon.java \
+ classpath/javax/swing/ImageIcon.java \
+ classpath/javax/swing/InputMap.java \
+ classpath/javax/swing/InputVerifier.java \
+ classpath/javax/swing/InternalFrameFocusTraversalPolicy.java \
+ classpath/javax/swing/JApplet.java \
+ classpath/javax/swing/JButton.java \
+ classpath/javax/swing/JCheckBox.java \
+ classpath/javax/swing/JCheckBoxMenuItem.java \
+ classpath/javax/swing/JColorChooser.java \
+ classpath/javax/swing/JComboBox.java \
+ classpath/javax/swing/JComponent.java \
+ classpath/javax/swing/JDesktopPane.java \
+ classpath/javax/swing/JDialog.java \
+ classpath/javax/swing/JEditorPane.java \
+ classpath/javax/swing/JFileChooser.java \
+ classpath/javax/swing/JFormattedTextField.java \
+ classpath/javax/swing/JFrame.java \
+ classpath/javax/swing/JInternalFrame.java \
+ classpath/javax/swing/JLabel.java \
+ classpath/javax/swing/JLayeredPane.java \
+ classpath/javax/swing/JList.java \
+ classpath/javax/swing/JMenu.java \
+ classpath/javax/swing/JMenuBar.java \
+ classpath/javax/swing/JMenuItem.java \
+ classpath/javax/swing/JOptionPane.java \
+ classpath/javax/swing/JPanel.java \
+ classpath/javax/swing/JPasswordField.java \
+ classpath/javax/swing/JPopupMenu.java \
+ classpath/javax/swing/JProgressBar.java \
+ classpath/javax/swing/JRadioButton.java \
+ classpath/javax/swing/JRadioButtonMenuItem.java \
+ classpath/javax/swing/JRootPane.java \
+ classpath/javax/swing/JScrollBar.java \
+ classpath/javax/swing/JScrollPane.java \
+ classpath/javax/swing/JSeparator.java \
+ classpath/javax/swing/JSlider.java \
+ classpath/javax/swing/JSpinner.java \
+ classpath/javax/swing/JSplitPane.java \
+ classpath/javax/swing/JTabbedPane.java \
+ classpath/javax/swing/JTable.java \
+ classpath/javax/swing/JTextArea.java \
+ classpath/javax/swing/JTextField.java \
+ classpath/javax/swing/JTextPane.java \
+ classpath/javax/swing/JToggleButton.java \
+ classpath/javax/swing/JToolBar.java \
+ classpath/javax/swing/JToolTip.java \
+ classpath/javax/swing/JTree.java \
+ classpath/javax/swing/JViewport.java \
+ classpath/javax/swing/JWindow.java \
+ classpath/javax/swing/KeyStroke.java \
+ classpath/javax/swing/KeyboardManager.java \
+ classpath/javax/swing/LayoutFocusTraversalPolicy.java \
+ classpath/javax/swing/ListCellRenderer.java \
+ classpath/javax/swing/ListModel.java \
+ classpath/javax/swing/ListSelectionModel.java \
+ classpath/javax/swing/LookAndFeel.java \
+ classpath/javax/swing/MenuElement.java \
+ classpath/javax/swing/MenuSelectionManager.java \
+ classpath/javax/swing/MutableComboBoxModel.java \
+ classpath/javax/swing/OverlayLayout.java \
+ classpath/javax/swing/Popup.java \
+ classpath/javax/swing/PopupFactory.java \
+ classpath/javax/swing/ProgressMonitor.java \
+ classpath/javax/swing/ProgressMonitorInputStream.java \
+ classpath/javax/swing/Renderer.java \
+ classpath/javax/swing/RepaintManager.java \
+ classpath/javax/swing/RootPaneContainer.java \
+ classpath/javax/swing/ScrollPaneConstants.java \
+ classpath/javax/swing/ScrollPaneLayout.java \
+ classpath/javax/swing/Scrollable.java \
+ classpath/javax/swing/SingleSelectionModel.java \
+ classpath/javax/swing/SizeRequirements.java \
+ classpath/javax/swing/SizeSequence.java \
+ classpath/javax/swing/SortingFocusTraversalPolicy.java \
+ classpath/javax/swing/SpinnerDateModel.java \
+ classpath/javax/swing/SpinnerListModel.java \
+ classpath/javax/swing/SpinnerModel.java \
+ classpath/javax/swing/SpinnerNumberModel.java \
+ classpath/javax/swing/Spring.java \
+ classpath/javax/swing/SpringLayout.java \
+ classpath/javax/swing/SwingConstants.java \
+ classpath/javax/swing/SwingUtilities.java \
+ classpath/javax/swing/Timer.java \
+ classpath/javax/swing/ToolTipManager.java \
+ classpath/javax/swing/TransferHandler.java \
+ classpath/javax/swing/UIDefaults.java \
+ classpath/javax/swing/UIManager.java \
+ classpath/javax/swing/UnsupportedLookAndFeelException.java \
+ classpath/javax/swing/ViewportLayout.java \
+ classpath/javax/swing/WindowConstants.java
+ 
+ javax_swing_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_source_files)))
+ javax_swing_border_source_files = \
+ classpath/javax/swing/border/AbstractBorder.java \
+ classpath/javax/swing/border/BevelBorder.java \
+ classpath/javax/swing/border/Border.java \
+ classpath/javax/swing/border/CompoundBorder.java \
+ classpath/javax/swing/border/EmptyBorder.java \
+ classpath/javax/swing/border/EtchedBorder.java \
+ classpath/javax/swing/border/LineBorder.java \
+ classpath/javax/swing/border/MatteBorder.java \
+ classpath/javax/swing/border/SoftBevelBorder.java \
+ classpath/javax/swing/border/TitledBorder.java
+ 
+ javax_swing_border_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_border_source_files)))
+ javax_swing_colorchooser_source_files = \
+ classpath/javax/swing/colorchooser/AbstractColorChooserPanel.java \
+ classpath/javax/swing/colorchooser/ColorChooserComponentFactory.java \
+ classpath/javax/swing/colorchooser/ColorSelectionModel.java \
+ classpath/javax/swing/colorchooser/DefaultColorSelectionModel.java \
+ classpath/javax/swing/colorchooser/DefaultHSBChooserPanel.java \
+ classpath/javax/swing/colorchooser/DefaultPreviewPanel.java \
+ classpath/javax/swing/colorchooser/DefaultRGBChooserPanel.java \
+ classpath/javax/swing/colorchooser/DefaultSwatchChooserPanel.java
+ 
+ javax_swing_colorchooser_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_colorchooser_source_files)))
+ javax_swing_event_source_files = \
+ classpath/javax/swing/event/AncestorEvent.java \
+ classpath/javax/swing/event/AncestorListener.java \
+ classpath/javax/swing/event/CaretEvent.java \
+ classpath/javax/swing/event/CaretListener.java \
+ classpath/javax/swing/event/CellEditorListener.java \
+ classpath/javax/swing/event/ChangeEvent.java \
+ classpath/javax/swing/event/ChangeListener.java \
+ classpath/javax/swing/event/DocumentEvent.java \
+ classpath/javax/swing/event/DocumentListener.java \
+ classpath/javax/swing/event/EventListenerList.java \
+ classpath/javax/swing/event/HyperlinkEvent.java \
+ classpath/javax/swing/event/HyperlinkListener.java \
+ classpath/javax/swing/event/InternalFrameAdapter.java \
+ classpath/javax/swing/event/InternalFrameEvent.java \
+ classpath/javax/swing/event/InternalFrameListener.java \
+ classpath/javax/swing/event/ListDataEvent.java \
+ classpath/javax/swing/event/ListDataListener.java \
+ classpath/javax/swing/event/ListSelectionEvent.java \
+ classpath/javax/swing/event/ListSelectionListener.java \
+ classpath/javax/swing/event/MenuDragMouseEvent.java \
+ classpath/javax/swing/event/MenuDragMouseListener.java \
+ classpath/javax/swing/event/MenuEvent.java \
+ classpath/javax/swing/event/MenuKeyEvent.java \
+ classpath/javax/swing/event/MenuKeyListener.java \
+ classpath/javax/swing/event/MenuListener.java \
+ classpath/javax/swing/event/MouseInputAdapter.java \
+ classpath/javax/swing/event/MouseInputListener.java \
+ classpath/javax/swing/event/PopupMenuEvent.java \
+ classpath/javax/swing/event/PopupMenuListener.java \
+ classpath/javax/swing/event/SwingPropertyChangeSupport.java \
+ classpath/javax/swing/event/TableColumnModelEvent.java \
+ classpath/javax/swing/event/TableColumnModelListener.java \
+ classpath/javax/swing/event/TableModelEvent.java \
+ classpath/javax/swing/event/TableModelListener.java \
+ classpath/javax/swing/event/TreeExpansionEvent.java \
+ classpath/javax/swing/event/TreeExpansionListener.java \
+ classpath/javax/swing/event/TreeModelEvent.java \
+ classpath/javax/swing/event/TreeModelListener.java \
+ classpath/javax/swing/event/TreeSelectionEvent.java \
+ classpath/javax/swing/event/TreeSelectionListener.java \
+ classpath/javax/swing/event/TreeWillExpandListener.java \
+ classpath/javax/swing/event/UndoableEditEvent.java \
+ classpath/javax/swing/event/UndoableEditListener.java
+ 
+ javax_swing_event_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_event_source_files)))
+ javax_swing_filechooser_source_files = \
+ classpath/javax/swing/filechooser/FileFilter.java \
+ classpath/javax/swing/filechooser/FileSystemView.java \
+ classpath/javax/swing/filechooser/FileView.java \
+ classpath/javax/swing/filechooser/UnixFileSystemView.java
+ 
+ javax_swing_filechooser_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_filechooser_source_files)))
+ javax_swing_plaf_source_files = \
+ classpath/javax/swing/plaf/ActionMapUIResource.java \
+ classpath/javax/swing/plaf/BorderUIResource.java \
+ classpath/javax/swing/plaf/ButtonUI.java \
+ classpath/javax/swing/plaf/ColorChooserUI.java \
+ classpath/javax/swing/plaf/ColorUIResource.java \
+ classpath/javax/swing/plaf/ComboBoxUI.java \
+ classpath/javax/swing/plaf/ComponentInputMapUIResource.java \
+ classpath/javax/swing/plaf/ComponentUI.java \
+ classpath/javax/swing/plaf/DesktopIconUI.java \
+ classpath/javax/swing/plaf/DesktopPaneUI.java \
+ classpath/javax/swing/plaf/DimensionUIResource.java \
+ classpath/javax/swing/plaf/FileChooserUI.java \
+ classpath/javax/swing/plaf/FontUIResource.java \
+ classpath/javax/swing/plaf/IconUIResource.java \
+ classpath/javax/swing/plaf/InputMapUIResource.java \
+ classpath/javax/swing/plaf/InsetsUIResource.java \
+ classpath/javax/swing/plaf/InternalFrameUI.java \
+ classpath/javax/swing/plaf/LabelUI.java \
+ classpath/javax/swing/plaf/ListUI.java \
+ classpath/javax/swing/plaf/MenuBarUI.java \
+ classpath/javax/swing/plaf/MenuItemUI.java \
+ classpath/javax/swing/plaf/OptionPaneUI.java \
+ classpath/javax/swing/plaf/PanelUI.java \
+ classpath/javax/swing/plaf/PopupMenuUI.java \
+ classpath/javax/swing/plaf/ProgressBarUI.java \
+ classpath/javax/swing/plaf/RootPaneUI.java \
+ classpath/javax/swing/plaf/ScrollBarUI.java \
+ classpath/javax/swing/plaf/ScrollPaneUI.java \
+ classpath/javax/swing/plaf/SeparatorUI.java \
+ classpath/javax/swing/plaf/SliderUI.java \
+ classpath/javax/swing/plaf/SpinnerUI.java \
+ classpath/javax/swing/plaf/SplitPaneUI.java \
+ classpath/javax/swing/plaf/TabbedPaneUI.java \
+ classpath/javax/swing/plaf/TableHeaderUI.java \
+ classpath/javax/swing/plaf/TableUI.java \
+ classpath/javax/swing/plaf/TextUI.java \
+ classpath/javax/swing/plaf/ToolBarUI.java \
+ classpath/javax/swing/plaf/ToolTipUI.java \
+ classpath/javax/swing/plaf/TreeUI.java \
+ classpath/javax/swing/plaf/UIResource.java \
+ classpath/javax/swing/plaf/ViewportUI.java
+ 
+ javax_swing_plaf_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_plaf_source_files)))
+ javax_swing_plaf_basic_source_files = \
+ classpath/javax/swing/plaf/basic/BasicArrowButton.java \
+ classpath/javax/swing/plaf/basic/BasicBorders.java \
+ classpath/javax/swing/plaf/basic/BasicButtonListener.java \
+ classpath/javax/swing/plaf/basic/BasicButtonUI.java \
+ classpath/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java \
+ classpath/javax/swing/plaf/basic/BasicCheckBoxUI.java \
+ classpath/javax/swing/plaf/basic/BasicColorChooserUI.java \
+ classpath/javax/swing/plaf/basic/BasicComboBoxEditor.java \
+ classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java \
+ classpath/javax/swing/plaf/basic/BasicComboBoxUI.java \
+ classpath/javax/swing/plaf/basic/BasicComboPopup.java \
+ classpath/javax/swing/plaf/basic/BasicDesktopIconUI.java \
+ classpath/javax/swing/plaf/basic/BasicDesktopPaneUI.java \
+ classpath/javax/swing/plaf/basic/BasicDirectoryModel.java \
+ classpath/javax/swing/plaf/basic/BasicEditorPaneUI.java \
+ classpath/javax/swing/plaf/basic/BasicFileChooserUI.java \
+ classpath/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java \
+ classpath/javax/swing/plaf/basic/BasicGraphicsUtils.java \
+ classpath/javax/swing/plaf/basic/BasicIconFactory.java \
+ classpath/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java \
+ classpath/javax/swing/plaf/basic/BasicInternalFrameUI.java \
+ classpath/javax/swing/plaf/basic/BasicLabelUI.java \
+ classpath/javax/swing/plaf/basic/BasicListUI.java \
+ classpath/javax/swing/plaf/basic/BasicLookAndFeel.java \
+ classpath/javax/swing/plaf/basic/BasicMenuBarUI.java \
+ classpath/javax/swing/plaf/basic/BasicMenuItemUI.java \
+ classpath/javax/swing/plaf/basic/BasicMenuUI.java \
+ classpath/javax/swing/plaf/basic/BasicOptionPaneUI.java \
+ classpath/javax/swing/plaf/basic/BasicPanelUI.java \
+ classpath/javax/swing/plaf/basic/BasicPasswordFieldUI.java \
+ classpath/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java \
+ classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java \
+ classpath/javax/swing/plaf/basic/BasicProgressBarUI.java \
+ classpath/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java \
+ classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java \
+ classpath/javax/swing/plaf/basic/BasicRootPaneUI.java \
+ classpath/javax/swing/plaf/basic/BasicScrollBarUI.java \
+ classpath/javax/swing/plaf/basic/BasicScrollPaneUI.java \
+ classpath/javax/swing/plaf/basic/BasicSeparatorUI.java \
+ classpath/javax/swing/plaf/basic/BasicSliderUI.java \
+ classpath/javax/swing/plaf/basic/BasicSpinnerUI.java \
+ classpath/javax/swing/plaf/basic/BasicSplitPaneDivider.java \
+ classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java \
+ classpath/javax/swing/plaf/basic/BasicTabbedPaneUI.java \
+ classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java \
+ classpath/javax/swing/plaf/basic/BasicTableUI.java \
+ classpath/javax/swing/plaf/basic/BasicTextAreaUI.java \
+ classpath/javax/swing/plaf/basic/BasicTextFieldUI.java \
+ classpath/javax/swing/plaf/basic/BasicTextPaneUI.java \
+ classpath/javax/swing/plaf/basic/BasicTextUI.java \
+ classpath/javax/swing/plaf/basic/BasicToggleButtonUI.java \
+ classpath/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java \
+ classpath/javax/swing/plaf/basic/BasicToolBarUI.java \
+ classpath/javax/swing/plaf/basic/BasicToolTipUI.java \
+ classpath/javax/swing/plaf/basic/BasicTreeUI.java \
+ classpath/javax/swing/plaf/basic/BasicViewportUI.java \
+ classpath/javax/swing/plaf/basic/ComboPopup.java \
+ classpath/javax/swing/plaf/basic/DefaultMenuLayout.java
+ 
+ javax_swing_plaf_basic_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_plaf_basic_source_files)))
+ javax_swing_plaf_metal_source_files = \
+ classpath/javax/swing/plaf/metal/DefaultMetalTheme.java \
+ classpath/javax/swing/plaf/metal/MetalBorders.java \
+ classpath/javax/swing/plaf/metal/MetalButtonListener.java \
+ classpath/javax/swing/plaf/metal/MetalButtonUI.java \
+ classpath/javax/swing/plaf/metal/MetalCheckBoxIcon.java \
+ classpath/javax/swing/plaf/metal/MetalCheckBoxUI.java \
+ classpath/javax/swing/plaf/metal/MetalComboBoxButton.java \
+ classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java \
+ classpath/javax/swing/plaf/metal/MetalComboBoxIcon.java \
+ classpath/javax/swing/plaf/metal/MetalComboBoxUI.java \
+ classpath/javax/swing/plaf/metal/MetalDesktopIconUI.java \
+ classpath/javax/swing/plaf/metal/MetalFileChooserUI.java \
+ classpath/javax/swing/plaf/metal/MetalIconFactory.java \
+ classpath/javax/swing/plaf/metal/MetalInternalFrameTitlePane.java \
+ classpath/javax/swing/plaf/metal/MetalInternalFrameUI.java \
+ classpath/javax/swing/plaf/metal/MetalLabelUI.java \
+ classpath/javax/swing/plaf/metal/MetalLookAndFeel.java \
+ classpath/javax/swing/plaf/metal/MetalMenuBarUI.java \
+ classpath/javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java \
+ classpath/javax/swing/plaf/metal/MetalProgressBarUI.java \
+ classpath/javax/swing/plaf/metal/MetalRadioButtonUI.java \
+ classpath/javax/swing/plaf/metal/MetalRootPaneUI.java \
+ classpath/javax/swing/plaf/metal/MetalScrollBarUI.java \
+ classpath/javax/swing/plaf/metal/MetalScrollButton.java \
+ classpath/javax/swing/plaf/metal/MetalScrollPaneUI.java \
+ classpath/javax/swing/plaf/metal/MetalSeparatorUI.java \
+ classpath/javax/swing/plaf/metal/MetalSliderUI.java \
+ classpath/javax/swing/plaf/metal/MetalSplitPaneDivider.java \
+ classpath/javax/swing/plaf/metal/MetalSplitPaneUI.java \
+ classpath/javax/swing/plaf/metal/MetalTabbedPaneUI.java \
+ classpath/javax/swing/plaf/metal/MetalTextFieldUI.java \
+ classpath/javax/swing/plaf/metal/MetalTheme.java \
+ classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java \
+ classpath/javax/swing/plaf/metal/MetalToolBarUI.java \
+ classpath/javax/swing/plaf/metal/MetalToolTipUI.java \
+ classpath/javax/swing/plaf/metal/MetalTreeUI.java \
+ classpath/javax/swing/plaf/metal/MetalUtils.java \
+ classpath/javax/swing/plaf/metal/OceanTheme.java
+ 
+ javax_swing_plaf_metal_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_plaf_metal_source_files)))
+ javax_swing_plaf_multi_source_files = \
+ classpath/javax/swing/plaf/multi/MultiButtonUI.java \
+ classpath/javax/swing/plaf/multi/MultiColorChooserUI.java \
+ classpath/javax/swing/plaf/multi/MultiComboBoxUI.java \
+ classpath/javax/swing/plaf/multi/MultiDesktopIconUI.java \
+ classpath/javax/swing/plaf/multi/MultiDesktopPaneUI.java \
+ classpath/javax/swing/plaf/multi/MultiFileChooserUI.java \
+ classpath/javax/swing/plaf/multi/MultiInternalFrameUI.java \
+ classpath/javax/swing/plaf/multi/MultiLabelUI.java \
+ classpath/javax/swing/plaf/multi/MultiListUI.java \
+ classpath/javax/swing/plaf/multi/MultiLookAndFeel.java \
+ classpath/javax/swing/plaf/multi/MultiMenuBarUI.java \
+ classpath/javax/swing/plaf/multi/MultiMenuItemUI.java \
+ classpath/javax/swing/plaf/multi/MultiOptionPaneUI.java \
+ classpath/javax/swing/plaf/multi/MultiPanelUI.java \
+ classpath/javax/swing/plaf/multi/MultiPopupMenuUI.java \
+ classpath/javax/swing/plaf/multi/MultiProgressBarUI.java \
+ classpath/javax/swing/plaf/multi/MultiRootPaneUI.java \
+ classpath/javax/swing/plaf/multi/MultiScrollBarUI.java \
+ classpath/javax/swing/plaf/multi/MultiScrollPaneUI.java \
+ classpath/javax/swing/plaf/multi/MultiSeparatorUI.java \
+ classpath/javax/swing/plaf/multi/MultiSliderUI.java \
+ classpath/javax/swing/plaf/multi/MultiSpinnerUI.java \
+ classpath/javax/swing/plaf/multi/MultiSplitPaneUI.java \
+ classpath/javax/swing/plaf/multi/MultiTabbedPaneUI.java \
+ classpath/javax/swing/plaf/multi/MultiTableHeaderUI.java \
+ classpath/javax/swing/plaf/multi/MultiTableUI.java \
+ classpath/javax/swing/plaf/multi/MultiTextUI.java \
+ classpath/javax/swing/plaf/multi/MultiToolBarUI.java \
+ classpath/javax/swing/plaf/multi/MultiToolTipUI.java \
+ classpath/javax/swing/plaf/multi/MultiTreeUI.java \
+ classpath/javax/swing/plaf/multi/MultiViewportUI.java
+ 
+ javax_swing_plaf_multi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_plaf_multi_source_files)))
+ javax_swing_table_source_files = \
+ classpath/javax/swing/table/AbstractTableModel.java \
+ classpath/javax/swing/table/DefaultTableCellRenderer.java \
+ classpath/javax/swing/table/DefaultTableColumnModel.java \
+ classpath/javax/swing/table/DefaultTableModel.java \
+ classpath/javax/swing/table/JTableHeader.java \
+ classpath/javax/swing/table/TableCellEditor.java \
+ classpath/javax/swing/table/TableCellRenderer.java \
+ classpath/javax/swing/table/TableColumn.java \
+ classpath/javax/swing/table/TableColumnModel.java \
+ classpath/javax/swing/table/TableModel.java
+ 
+ javax_swing_table_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_table_source_files)))
+ javax_swing_text_source_files = \
+ classpath/javax/swing/text/AbstractDocument.java \
+ classpath/javax/swing/text/AbstractWriter.java \
+ classpath/javax/swing/text/AttributeSet.java \
+ classpath/javax/swing/text/BadLocationException.java \
+ classpath/javax/swing/text/BoxView.java \
+ classpath/javax/swing/text/Caret.java \
+ classpath/javax/swing/text/ChangedCharSetException.java \
+ classpath/javax/swing/text/ComponentView.java \
+ classpath/javax/swing/text/CompositeView.java \
+ classpath/javax/swing/text/DateFormatter.java \
+ classpath/javax/swing/text/DefaultCaret.java \
+ classpath/javax/swing/text/DefaultEditorKit.java \
+ classpath/javax/swing/text/DefaultFormatter.java \
+ classpath/javax/swing/text/DefaultHighlighter.java \
+ classpath/javax/swing/text/DefaultStyledDocument.java \
+ classpath/javax/swing/text/DefaultTextUI.java \
+ classpath/javax/swing/text/Document.java \
+ classpath/javax/swing/text/DocumentFilter.java \
+ classpath/javax/swing/text/EditorKit.java \
+ classpath/javax/swing/text/Element.java \
+ classpath/javax/swing/text/ElementIterator.java \
+ classpath/javax/swing/text/FieldView.java \
+ classpath/javax/swing/text/FlowView.java \
+ classpath/javax/swing/text/GapContent.java \
+ classpath/javax/swing/text/GlyphView.java \
+ classpath/javax/swing/text/Highlighter.java \
+ classpath/javax/swing/text/IconView.java \
+ classpath/javax/swing/text/InternationalFormatter.java \
+ classpath/javax/swing/text/JTextComponent.java \
+ classpath/javax/swing/text/Keymap.java \
+ classpath/javax/swing/text/LabelView.java \
+ classpath/javax/swing/text/LayeredHighlighter.java \
+ classpath/javax/swing/text/LayoutQueue.java \
+ classpath/javax/swing/text/MutableAttributeSet.java \
+ classpath/javax/swing/text/NavigationFilter.java \
+ classpath/javax/swing/text/ParagraphView.java \
+ classpath/javax/swing/text/PasswordView.java \
+ classpath/javax/swing/text/PlainDocument.java \
+ classpath/javax/swing/text/PlainView.java \
+ classpath/javax/swing/text/Position.java \
+ classpath/javax/swing/text/Segment.java \
+ classpath/javax/swing/text/SimpleAttributeSet.java \
+ classpath/javax/swing/text/StringContent.java \
+ classpath/javax/swing/text/Style.java \
+ classpath/javax/swing/text/StyleConstants.java \
+ classpath/javax/swing/text/StyleContext.java \
+ classpath/javax/swing/text/StyledDocument.java \
+ classpath/javax/swing/text/StyledEditorKit.java \
+ classpath/javax/swing/text/TabExpander.java \
+ classpath/javax/swing/text/TabSet.java \
+ classpath/javax/swing/text/TabStop.java \
+ classpath/javax/swing/text/TabableView.java \
+ classpath/javax/swing/text/TextAction.java \
+ classpath/javax/swing/text/Utilities.java \
+ classpath/javax/swing/text/View.java \
+ classpath/javax/swing/text/ViewFactory.java \
+ classpath/javax/swing/text/WrappedPlainView.java
+ 
+ javax_swing_text_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_text_source_files)))
+ javax_swing_text_html_source_files = \
+ classpath/javax/swing/text/html/CSS.java \
+ classpath/javax/swing/text/html/HTML.java \
+ classpath/javax/swing/text/html/HTMLDocument.java \
+ classpath/javax/swing/text/html/HTMLEditorKit.java \
+ classpath/javax/swing/text/html/HTMLFrameHyperlinkEvent.java
+ 
+ javax_swing_text_html_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_text_html_source_files)))
+ javax_swing_text_html_parser_source_files = \
+ classpath/javax/swing/text/html/parser/AttributeList.java \
+ classpath/javax/swing/text/html/parser/ContentModel.java \
+ classpath/javax/swing/text/html/parser/DTD.java \
+ classpath/javax/swing/text/html/parser/DTDConstants.java \
+ classpath/javax/swing/text/html/parser/DocumentParser.java \
+ classpath/javax/swing/text/html/parser/Element.java \
+ classpath/javax/swing/text/html/parser/Entity.java \
+ classpath/javax/swing/text/html/parser/Parser.java \
+ classpath/javax/swing/text/html/parser/ParserDelegator.java \
+ classpath/javax/swing/text/html/parser/TagElement.java
+ 
+ javax_swing_text_html_parser_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_text_html_parser_source_files)))
+ javax_swing_text_rtf_source_files = \
+ classpath/javax/swing/text/rtf/ControlWordToken.java \
+ classpath/javax/swing/text/rtf/RTFEditorKit.java \
+ classpath/javax/swing/text/rtf/RTFParseException.java \
+ classpath/javax/swing/text/rtf/RTFParser.java \
+ classpath/javax/swing/text/rtf/RTFScanner.java \
+ classpath/javax/swing/text/rtf/TextToken.java \
+ classpath/javax/swing/text/rtf/Token.java
+ 
+ javax_swing_text_rtf_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_text_rtf_source_files)))
+ javax_swing_tree_source_files = \
+ classpath/javax/swing/tree/AbstractLayoutCache.java \
+ classpath/javax/swing/tree/DefaultMutableTreeNode.java \
+ classpath/javax/swing/tree/DefaultTreeCellEditor.java \
+ classpath/javax/swing/tree/DefaultTreeCellRenderer.java \
+ classpath/javax/swing/tree/DefaultTreeModel.java \
+ classpath/javax/swing/tree/DefaultTreeSelectionModel.java \
+ classpath/javax/swing/tree/ExpandVetoException.java \
+ classpath/javax/swing/tree/FixedHeightLayoutCache.java \
+ classpath/javax/swing/tree/MutableTreeNode.java \
+ classpath/javax/swing/tree/RowMapper.java \
+ classpath/javax/swing/tree/TreeCellEditor.java \
+ classpath/javax/swing/tree/TreeCellRenderer.java \
+ classpath/javax/swing/tree/TreeModel.java \
+ classpath/javax/swing/tree/TreeNode.java \
+ classpath/javax/swing/tree/TreePath.java \
+ classpath/javax/swing/tree/TreeSelectionModel.java \
+ classpath/javax/swing/tree/VariableHeightLayoutCache.java
+ 
+ javax_swing_tree_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_tree_source_files)))
+ javax_swing_undo_source_files = \
+ classpath/javax/swing/undo/AbstractUndoableEdit.java \
+ classpath/javax/swing/undo/CannotRedoException.java \
+ classpath/javax/swing/undo/CannotUndoException.java \
+ classpath/javax/swing/undo/CompoundEdit.java \
+ classpath/javax/swing/undo/StateEdit.java \
+ classpath/javax/swing/undo/StateEditable.java \
+ classpath/javax/swing/undo/UndoManager.java \
+ classpath/javax/swing/undo/UndoableEdit.java \
+ classpath/javax/swing/undo/UndoableEditSupport.java
+ 
+ javax_swing_undo_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_swing_undo_source_files)))
+ javax_transaction_source_files = \
+ classpath/javax/transaction/HeuristicCommitException.java \
+ classpath/javax/transaction/HeuristicMixedException.java \
+ classpath/javax/transaction/HeuristicRollbackException.java \
+ classpath/javax/transaction/InvalidTransactionException.java \
+ classpath/javax/transaction/NotSupportedException.java \
+ classpath/javax/transaction/RollbackException.java \
+ classpath/javax/transaction/Status.java \
+ classpath/javax/transaction/Synchronization.java \
+ classpath/javax/transaction/SystemException.java \
+ classpath/javax/transaction/Transaction.java \
+ classpath/javax/transaction/TransactionManager.java \
+ classpath/javax/transaction/TransactionRequiredException.java \
+ classpath/javax/transaction/TransactionRolledbackException.java \
+ classpath/javax/transaction/UserTransaction.java
+ 
+ javax_transaction_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_transaction_source_files)))
+ javax_transaction_xa_source_files = \
+ classpath/javax/transaction/xa/XAException.java \
+ classpath/javax/transaction/xa/XAResource.java \
+ classpath/javax/transaction/xa/Xid.java
+ 
+ javax_transaction_xa_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_transaction_xa_source_files)))
+ javax_xml_source_files = \
+ classpath/javax/xml/XMLConstants.java \
+ classpath/javax/xml/datatype/DatatypeConfigurationException.java \
+ classpath/javax/xml/datatype/DatatypeConstants.java \
+ classpath/javax/xml/datatype/DatatypeFactory.java \
+ classpath/javax/xml/datatype/Duration.java \
+ classpath/javax/xml/datatype/XMLGregorianCalendar.java \
+ classpath/javax/xml/namespace/NamespaceContext.java \
+ classpath/javax/xml/namespace/QName.java \
+ classpath/javax/xml/parsers/DocumentBuilder.java \
+ classpath/javax/xml/parsers/DocumentBuilderFactory.java \
+ classpath/javax/xml/parsers/FactoryConfigurationError.java \
+ classpath/javax/xml/parsers/ParserConfigurationException.java \
+ classpath/javax/xml/parsers/SAXParser.java \
+ classpath/javax/xml/parsers/SAXParserFactory.java \
+ classpath/javax/xml/stream/EventFilter.java \
+ classpath/javax/xml/stream/FactoryConfigurationError.java \
+ classpath/javax/xml/stream/Location.java \
+ classpath/javax/xml/stream/StreamFilter.java \
+ classpath/javax/xml/stream/XMLEventFactory.java \
+ classpath/javax/xml/stream/XMLEventReader.java \
+ classpath/javax/xml/stream/XMLEventWriter.java \
+ classpath/javax/xml/stream/XMLFilter.java \
+ classpath/javax/xml/stream/XMLInputFactory.java \
+ classpath/javax/xml/stream/XMLIterator.java \
+ classpath/javax/xml/stream/XMLOutputFactory.java \
+ classpath/javax/xml/stream/XMLReporter.java \
+ classpath/javax/xml/stream/XMLResolver.java \
+ classpath/javax/xml/stream/XMLStreamConstants.java \
+ classpath/javax/xml/stream/XMLStreamException.java \
+ classpath/javax/xml/stream/XMLStreamReader.java \
+ classpath/javax/xml/stream/XMLStreamWriter.java \
+ classpath/javax/xml/stream/events/Attribute.java \
+ classpath/javax/xml/stream/events/Characters.java \
+ classpath/javax/xml/stream/events/Comment.java \
+ classpath/javax/xml/stream/events/DTD.java \
+ classpath/javax/xml/stream/events/EndDocument.java \
+ classpath/javax/xml/stream/events/EndElement.java \
+ classpath/javax/xml/stream/events/EndEntity.java \
+ classpath/javax/xml/stream/events/EntityDeclaration.java \
+ classpath/javax/xml/stream/events/EntityReference.java \
+ classpath/javax/xml/stream/events/Namespace.java \
+ classpath/javax/xml/stream/events/NotationDeclaration.java \
+ classpath/javax/xml/stream/events/ProcessingInstruction.java \
+ classpath/javax/xml/stream/events/StartDocument.java \
+ classpath/javax/xml/stream/events/StartElement.java \
+ classpath/javax/xml/stream/events/StartEntity.java \
+ classpath/javax/xml/stream/events/XMLEvent.java \
+ classpath/javax/xml/stream/util/EventReaderDelegate.java \
+ classpath/javax/xml/stream/util/ReaderDelegate.java \
+ classpath/javax/xml/stream/util/XMLEventAllocator.java \
+ classpath/javax/xml/stream/util/XMLEventConsumer.java \
+ classpath/javax/xml/transform/ErrorListener.java \
+ classpath/javax/xml/transform/OutputKeys.java \
+ classpath/javax/xml/transform/Result.java \
+ classpath/javax/xml/transform/Source.java \
+ classpath/javax/xml/transform/SourceLocator.java \
+ classpath/javax/xml/transform/Templates.java \
+ classpath/javax/xml/transform/Transformer.java \
+ classpath/javax/xml/transform/TransformerConfigurationException.java \
+ classpath/javax/xml/transform/TransformerException.java \
+ classpath/javax/xml/transform/TransformerFactory.java \
+ classpath/javax/xml/transform/TransformerFactoryConfigurationError.java \
+ classpath/javax/xml/transform/URIResolver.java \
+ classpath/javax/xml/transform/dom/DOMLocator.java \
+ classpath/javax/xml/transform/dom/DOMResult.java \
+ classpath/javax/xml/transform/dom/DOMSource.java \
+ classpath/javax/xml/transform/sax/SAXResult.java \
+ classpath/javax/xml/transform/sax/SAXSource.java \
+ classpath/javax/xml/transform/sax/SAXTransformerFactory.java \
+ classpath/javax/xml/transform/sax/TemplatesHandler.java \
+ classpath/javax/xml/transform/sax/TransformerHandler.java \
+ classpath/javax/xml/transform/stream/StreamResult.java \
+ classpath/javax/xml/transform/stream/StreamSource.java \
+ classpath/javax/xml/validation/Schema.java \
+ classpath/javax/xml/validation/SchemaFactory.java \
+ classpath/javax/xml/validation/TypeInfoProvider.java \
+ classpath/javax/xml/validation/Validator.java \
+ classpath/javax/xml/validation/ValidatorHandler.java \
+ classpath/javax/xml/xpath/XPath.java \
+ classpath/javax/xml/xpath/XPathConstants.java \
+ classpath/javax/xml/xpath/XPathException.java \
+ classpath/javax/xml/xpath/XPathExpression.java \
+ classpath/javax/xml/xpath/XPathExpressionException.java \
+ classpath/javax/xml/xpath/XPathFactory.java \
+ classpath/javax/xml/xpath/XPathFactoryConfigurationException.java \
+ classpath/javax/xml/xpath/XPathFunction.java \
+ classpath/javax/xml/xpath/XPathFunctionException.java \
+ classpath/javax/xml/xpath/XPathFunctionResolver.java \
+ classpath/javax/xml/xpath/XPathVariableResolver.java
+ 
+ org_ietf_jgss_source_files = \
+ classpath/org/ietf/jgss/ChannelBinding.java \
+ classpath/org/ietf/jgss/GSSContext.java \
+ classpath/org/ietf/jgss/GSSCredential.java \
+ classpath/org/ietf/jgss/GSSException.java \
+ classpath/org/ietf/jgss/GSSManager.java \
+ classpath/org/ietf/jgss/GSSName.java \
+ classpath/org/ietf/jgss/MessageProp.java \
+ classpath/org/ietf/jgss/Oid.java
+ 
+ org_ietf_jgss_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(org_ietf_jgss_source_files)))
+ org_omg_source_files = \
+ classpath/org/omg/CORBA/ACTIVITY_COMPLETED.java \
+ classpath/org/omg/CORBA/ACTIVITY_REQUIRED.java \
+ classpath/org/omg/CORBA/ARG_IN.java \
+ classpath/org/omg/CORBA/ARG_INOUT.java \
+ classpath/org/omg/CORBA/ARG_OUT.java \
+ classpath/org/omg/CORBA/Any.java \
+ classpath/org/omg/CORBA/AnyHolder.java \
+ classpath/org/omg/CORBA/AnySeqHelper.java \
+ classpath/org/omg/CORBA/AnySeqHolder.java \
+ classpath/org/omg/CORBA/BAD_CONTEXT.java \
+ classpath/org/omg/CORBA/BAD_INV_ORDER.java \
+ classpath/org/omg/CORBA/BAD_OPERATION.java \
+ classpath/org/omg/CORBA/BAD_PARAM.java \
+ classpath/org/omg/CORBA/BAD_POLICY.java \
+ classpath/org/omg/CORBA/BAD_POLICY_TYPE.java \
+ classpath/org/omg/CORBA/BAD_POLICY_VALUE.java \
+ classpath/org/omg/CORBA/BAD_QOS.java \
+ classpath/org/omg/CORBA/BAD_TYPECODE.java \
+ classpath/org/omg/CORBA/BooleanHolder.java \
+ classpath/org/omg/CORBA/BooleanSeqHelper.java \
+ classpath/org/omg/CORBA/BooleanSeqHolder.java \
+ classpath/org/omg/CORBA/Bounds.java \
+ classpath/org/omg/CORBA/ByteHolder.java \
+ classpath/org/omg/CORBA/CODESET_INCOMPATIBLE.java \
+ classpath/org/omg/CORBA/COMM_FAILURE.java \
+ classpath/org/omg/CORBA/CTX_RESTRICT_SCOPE.java \
+ classpath/org/omg/CORBA/CharHolder.java \
+ classpath/org/omg/CORBA/CharSeqHelper.java \
+ classpath/org/omg/CORBA/CharSeqHolder.java \
+ classpath/org/omg/CORBA/CompletionStatus.java \
+ classpath/org/omg/CORBA/CompletionStatusHelper.java \
+ classpath/org/omg/CORBA/Context.java \
+ classpath/org/omg/CORBA/ContextList.java \
+ classpath/org/omg/CORBA/Current.java \
+ classpath/org/omg/CORBA/CurrentHelper.java \
+ classpath/org/omg/CORBA/CurrentHolder.java \
+ classpath/org/omg/CORBA/CurrentOperations.java \
+ classpath/org/omg/CORBA/CustomMarshal.java \
+ classpath/org/omg/CORBA/CustomValue.java \
+ classpath/org/omg/CORBA/DATA_CONVERSION.java \
+ classpath/org/omg/CORBA/DataInputStream.java \
+ classpath/org/omg/CORBA/DataOutputStream.java \
+ classpath/org/omg/CORBA/DefinitionKind.java \
+ classpath/org/omg/CORBA/DefinitionKindHelper.java \
+ classpath/org/omg/CORBA/DomainManager.java \
+ classpath/org/omg/CORBA/DomainManagerOperations.java \
+ classpath/org/omg/CORBA/DoubleHolder.java \
+ classpath/org/omg/CORBA/DoubleSeqHelper.java \
+ classpath/org/omg/CORBA/DoubleSeqHolder.java \
+ classpath/org/omg/CORBA/DynAny.java \
+ classpath/org/omg/CORBA/DynAnyPackage/Invalid.java \
+ classpath/org/omg/CORBA/DynAnyPackage/InvalidSeq.java \
+ classpath/org/omg/CORBA/DynAnyPackage/InvalidValue.java \
+ classpath/org/omg/CORBA/DynAnyPackage/TypeMismatch.java \
+ classpath/org/omg/CORBA/DynArray.java \
+ classpath/org/omg/CORBA/DynEnum.java \
+ classpath/org/omg/CORBA/DynFixed.java \
+ classpath/org/omg/CORBA/DynSequence.java \
+ classpath/org/omg/CORBA/DynStruct.java \
+ classpath/org/omg/CORBA/DynUnion.java \
+ classpath/org/omg/CORBA/DynValue.java \
+ classpath/org/omg/CORBA/DynamicImplementation.java \
+ classpath/org/omg/CORBA/Environment.java \
+ classpath/org/omg/CORBA/ExceptionList.java \
+ classpath/org/omg/CORBA/FREE_MEM.java \
+ classpath/org/omg/CORBA/FieldNameHelper.java \
+ classpath/org/omg/CORBA/FixedHolder.java \
+ classpath/org/omg/CORBA/FloatHolder.java \
+ classpath/org/omg/CORBA/FloatSeqHelper.java \
+ classpath/org/omg/CORBA/FloatSeqHolder.java \
+ classpath/org/omg/CORBA/IDLType.java \
+ classpath/org/omg/CORBA/IDLTypeHelper.java \
+ classpath/org/omg/CORBA/IDLTypeOperations.java \
+ classpath/org/omg/CORBA/IMP_LIMIT.java \
+ classpath/org/omg/CORBA/INITIALIZE.java \
+ classpath/org/omg/CORBA/INTERNAL.java \
+ classpath/org/omg/CORBA/INTF_REPOS.java \
+ classpath/org/omg/CORBA/INVALID_ACTIVITY.java \
+ classpath/org/omg/CORBA/INVALID_TRANSACTION.java \
+ classpath/org/omg/CORBA/INV_FLAG.java \
+ classpath/org/omg/CORBA/INV_IDENT.java \
+ classpath/org/omg/CORBA/INV_OBJREF.java \
+ classpath/org/omg/CORBA/INV_POLICY.java \
+ classpath/org/omg/CORBA/IRObject.java \
+ classpath/org/omg/CORBA/IRObjectOperations.java \
+ classpath/org/omg/CORBA/IdentifierHelper.java \
+ classpath/org/omg/CORBA/IntHolder.java \
+ classpath/org/omg/CORBA/LocalObject.java \
+ classpath/org/omg/CORBA/LongHolder.java \
+ classpath/org/omg/CORBA/LongLongSeqHelper.java \
+ classpath/org/omg/CORBA/LongLongSeqHolder.java \
+ classpath/org/omg/CORBA/LongSeqHelper.java \
+ classpath/org/omg/CORBA/LongSeqHolder.java \
+ classpath/org/omg/CORBA/MARSHAL.java \
+ classpath/org/omg/CORBA/NO_IMPLEMENT.java \
+ classpath/org/omg/CORBA/NO_MEMORY.java \
+ classpath/org/omg/CORBA/NO_PERMISSION.java \
+ classpath/org/omg/CORBA/NO_RESOURCES.java \
+ classpath/org/omg/CORBA/NO_RESPONSE.java \
+ classpath/org/omg/CORBA/NVList.java \
+ classpath/org/omg/CORBA/NameValuePair.java \
+ classpath/org/omg/CORBA/NameValuePairHelper.java \
+ classpath/org/omg/CORBA/NamedValue.java \
+ classpath/org/omg/CORBA/OBJECT_NOT_EXIST.java \
+ classpath/org/omg/CORBA/OBJ_ADAPTER.java \
+ classpath/org/omg/CORBA/OMGVMCID.java \
+ classpath/org/omg/CORBA/ORB.java \
+ classpath/org/omg/CORBA/ORBPackage/InconsistentTypeCode.java \
+ classpath/org/omg/CORBA/ORBPackage/InvalidName.java \
+ classpath/org/omg/CORBA/Object.java \
+ classpath/org/omg/CORBA/ObjectHelper.java \
+ classpath/org/omg/CORBA/ObjectHolder.java \
+ classpath/org/omg/CORBA/OctetSeqHelper.java \
+ classpath/org/omg/CORBA/OctetSeqHolder.java \
+ classpath/org/omg/CORBA/PERSIST_STORE.java \
+ classpath/org/omg/CORBA/PRIVATE_MEMBER.java \
+ classpath/org/omg/CORBA/PUBLIC_MEMBER.java \
+ classpath/org/omg/CORBA/ParameterMode.java \
+ classpath/org/omg/CORBA/ParameterModeHelper.java \
+ classpath/org/omg/CORBA/ParameterModeHolder.java \
+ classpath/org/omg/CORBA/Policy.java \
+ classpath/org/omg/CORBA/PolicyError.java \
+ classpath/org/omg/CORBA/PolicyErrorCodeHelper.java \
+ classpath/org/omg/CORBA/PolicyErrorHelper.java \
+ classpath/org/omg/CORBA/PolicyErrorHolder.java \
+ classpath/org/omg/CORBA/PolicyHelper.java \
+ classpath/org/omg/CORBA/PolicyHolder.java \
+ classpath/org/omg/CORBA/PolicyListHelper.java \
+ classpath/org/omg/CORBA/PolicyListHolder.java \
+ classpath/org/omg/CORBA/PolicyOperations.java \
+ classpath/org/omg/CORBA/PolicyTypeHelper.java \
+ classpath/org/omg/CORBA/Principal.java \
+ classpath/org/omg/CORBA/PrincipalHolder.java \
+ classpath/org/omg/CORBA/REBIND.java \
+ classpath/org/omg/CORBA/RepositoryIdHelper.java \
+ classpath/org/omg/CORBA/Request.java \
+ classpath/org/omg/CORBA/ServerRequest.java \
+ classpath/org/omg/CORBA/ServiceDetail.java \
+ classpath/org/omg/CORBA/ServiceDetailHelper.java \
+ classpath/org/omg/CORBA/ServiceInformation.java \
+ classpath/org/omg/CORBA/ServiceInformationHelper.java \
+ classpath/org/omg/CORBA/ServiceInformationHolder.java \
+ classpath/org/omg/CORBA/SetOverrideType.java \
+ classpath/org/omg/CORBA/SetOverrideTypeHelper.java \
+ classpath/org/omg/CORBA/ShortHolder.java \
+ classpath/org/omg/CORBA/ShortSeqHelper.java \
+ classpath/org/omg/CORBA/ShortSeqHolder.java \
+ classpath/org/omg/CORBA/StringHolder.java \
+ classpath/org/omg/CORBA/StringSeqHelper.java \
+ classpath/org/omg/CORBA/StringSeqHolder.java \
+ classpath/org/omg/CORBA/StringValueHelper.java \
+ classpath/org/omg/CORBA/StructMember.java \
+ classpath/org/omg/CORBA/StructMemberHelper.java \
+ classpath/org/omg/CORBA/SystemException.java \
+ classpath/org/omg/CORBA/TCKind.java \
+ classpath/org/omg/CORBA/TIMEOUT.java \
+ classpath/org/omg/CORBA/TRANSACTION_MODE.java \
+ classpath/org/omg/CORBA/TRANSACTION_REQUIRED.java \
+ classpath/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java \
+ classpath/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java \
+ classpath/org/omg/CORBA/TRANSIENT.java \
+ classpath/org/omg/CORBA/TypeCode.java \
+ classpath/org/omg/CORBA/TypeCodeHolder.java \
+ classpath/org/omg/CORBA/TypeCodePackage/BadKind.java \
+ classpath/org/omg/CORBA/TypeCodePackage/Bounds.java \
+ classpath/org/omg/CORBA/ULongLongSeqHelper.java \
+ classpath/org/omg/CORBA/ULongLongSeqHolder.java \
+ classpath/org/omg/CORBA/ULongSeqHelper.java \
+ classpath/org/omg/CORBA/ULongSeqHolder.java \
+ classpath/org/omg/CORBA/UNKNOWN.java \
+ classpath/org/omg/CORBA/UNSUPPORTED_POLICY.java \
+ classpath/org/omg/CORBA/UNSUPPORTED_POLICY_VALUE.java \
+ classpath/org/omg/CORBA/UShortSeqHelper.java \
+ classpath/org/omg/CORBA/UShortSeqHolder.java \
+ classpath/org/omg/CORBA/UnionMember.java \
+ classpath/org/omg/CORBA/UnionMemberHelper.java \
+ classpath/org/omg/CORBA/UnknownUserException.java \
+ classpath/org/omg/CORBA/UnknownUserExceptionHelper.java \
+ classpath/org/omg/CORBA/UnknownUserExceptionHolder.java \
+ classpath/org/omg/CORBA/UserException.java \
+ classpath/org/omg/CORBA/VM_ABSTRACT.java \
+ classpath/org/omg/CORBA/VM_CUSTOM.java \
+ classpath/org/omg/CORBA/VM_NONE.java \
+ classpath/org/omg/CORBA/VM_TRUNCATABLE.java \
+ classpath/org/omg/CORBA/ValueBaseHelper.java \
+ classpath/org/omg/CORBA/ValueBaseHolder.java \
+ classpath/org/omg/CORBA/ValueMember.java \
+ classpath/org/omg/CORBA/ValueMemberHelper.java \
+ classpath/org/omg/CORBA/VersionSpecHelper.java \
+ classpath/org/omg/CORBA/VisibilityHelper.java \
+ classpath/org/omg/CORBA/WCharSeqHelper.java \
+ classpath/org/omg/CORBA/WCharSeqHolder.java \
+ classpath/org/omg/CORBA/WStringSeqHelper.java \
+ classpath/org/omg/CORBA/WStringSeqHolder.java \
+ classpath/org/omg/CORBA/WStringValueHelper.java \
+ classpath/org/omg/CORBA/WrongTransaction.java \
+ classpath/org/omg/CORBA/WrongTransactionHelper.java \
+ classpath/org/omg/CORBA/WrongTransactionHolder.java \
+ classpath/org/omg/CORBA/_IDLTypeStub.java \
+ classpath/org/omg/CORBA/_PolicyStub.java \
+ classpath/org/omg/CORBA/portable/ApplicationException.java \
+ classpath/org/omg/CORBA/portable/BoxedValueHelper.java \
+ classpath/org/omg/CORBA/portable/CustomValue.java \
+ classpath/org/omg/CORBA/portable/Delegate.java \
+ classpath/org/omg/CORBA/portable/IDLEntity.java \
+ classpath/org/omg/CORBA/portable/IndirectionException.java \
+ classpath/org/omg/CORBA/portable/InputStream.java \
+ classpath/org/omg/CORBA/portable/InvokeHandler.java \
+ classpath/org/omg/CORBA/portable/ObjectImpl.java \
+ classpath/org/omg/CORBA/portable/OutputStream.java \
+ classpath/org/omg/CORBA/portable/RemarshalException.java \
+ classpath/org/omg/CORBA/portable/ResponseHandler.java \
+ classpath/org/omg/CORBA/portable/ServantObject.java \
+ classpath/org/omg/CORBA/portable/Streamable.java \
+ classpath/org/omg/CORBA/portable/StreamableValue.java \
+ classpath/org/omg/CORBA/portable/UnknownException.java \
+ classpath/org/omg/CORBA/portable/ValueBase.java \
+ classpath/org/omg/CORBA/portable/ValueFactory.java \
+ classpath/org/omg/CORBA_2_3/ORB.java \
+ classpath/org/omg/CORBA_2_3/portable/Delegate.java \
+ classpath/org/omg/CORBA_2_3/portable/InputStream.java \
+ classpath/org/omg/CORBA_2_3/portable/ObjectImpl.java \
+ classpath/org/omg/CORBA_2_3/portable/OutputStream.java \
+ classpath/org/omg/CosNaming/Binding.java \
+ classpath/org/omg/CosNaming/BindingHelper.java \
+ classpath/org/omg/CosNaming/BindingHolder.java \
+ classpath/org/omg/CosNaming/BindingIterator.java \
+ classpath/org/omg/CosNaming/BindingIteratorHelper.java \
+ classpath/org/omg/CosNaming/BindingIteratorHolder.java \
+ classpath/org/omg/CosNaming/BindingIteratorOperations.java \
+ classpath/org/omg/CosNaming/BindingIteratorPOA.java \
+ classpath/org/omg/CosNaming/BindingListHelper.java \
+ classpath/org/omg/CosNaming/BindingListHolder.java \
+ classpath/org/omg/CosNaming/BindingType.java \
+ classpath/org/omg/CosNaming/BindingTypeHelper.java \
+ classpath/org/omg/CosNaming/BindingTypeHolder.java \
+ classpath/org/omg/CosNaming/IstringHelper.java \
+ classpath/org/omg/CosNaming/NameComponent.java \
+ classpath/org/omg/CosNaming/NameComponentHelper.java \
+ classpath/org/omg/CosNaming/NameComponentHolder.java \
+ classpath/org/omg/CosNaming/NameHelper.java \
+ classpath/org/omg/CosNaming/NameHolder.java \
+ classpath/org/omg/CosNaming/NamingContext.java \
+ classpath/org/omg/CosNaming/NamingContextExt.java \
+ classpath/org/omg/CosNaming/NamingContextExtHelper.java \
+ classpath/org/omg/CosNaming/NamingContextExtHolder.java \
+ classpath/org/omg/CosNaming/NamingContextExtOperations.java \
+ classpath/org/omg/CosNaming/NamingContextExtPOA.java \
+ classpath/org/omg/CosNaming/NamingContextExtPackage/AddressHelper.java \
+ classpath/org/omg/CosNaming/NamingContextExtPackage/InvalidAddress.java \
+ classpath/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHelper.java \
+ classpath/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHolder.java \
+ classpath/org/omg/CosNaming/NamingContextExtPackage/StringNameHelper.java \
+ classpath/org/omg/CosNaming/NamingContextExtPackage/URLStringHelper.java \
+ classpath/org/omg/CosNaming/NamingContextHelper.java \
+ classpath/org/omg/CosNaming/NamingContextHolder.java \
+ classpath/org/omg/CosNaming/NamingContextOperations.java \
+ classpath/org/omg/CosNaming/NamingContextPOA.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/AlreadyBound.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/AlreadyBoundHolder.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/CannotProceed.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/CannotProceedHelper.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/CannotProceedHolder.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/InvalidName.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/InvalidNameHelper.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/InvalidNameHolder.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/NotEmpty.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/NotEmptyHelper.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/NotEmptyHolder.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/NotFound.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/NotFoundHelper.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/NotFoundHolder.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/NotFoundReason.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/NotFoundReasonHelper.java \
+ classpath/org/omg/CosNaming/NamingContextPackage/NotFoundReasonHolder.java \
+ classpath/org/omg/CosNaming/_BindingIteratorImplBase.java \
+ classpath/org/omg/CosNaming/_BindingIteratorStub.java \
+ classpath/org/omg/CosNaming/_NamingContextExtImplBase.java \
+ classpath/org/omg/CosNaming/_NamingContextExtStub.java \
+ classpath/org/omg/CosNaming/_NamingContextImplBase.java \
+ classpath/org/omg/CosNaming/_NamingContextStub.java \
+ classpath/org/omg/Dynamic/Parameter.java \
+ classpath/org/omg/DynamicAny/AnySeqHelper.java \
+ classpath/org/omg/DynamicAny/DynAny.java \
+ classpath/org/omg/DynamicAny/DynAnyFactory.java \
+ classpath/org/omg/DynamicAny/DynAnyFactoryHelper.java \
+ classpath/org/omg/DynamicAny/DynAnyFactoryOperations.java \
+ classpath/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.java \
+ classpath/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHelper.java \
+ classpath/org/omg/DynamicAny/DynAnyHelper.java \
+ classpath/org/omg/DynamicAny/DynAnyOperations.java \
+ classpath/org/omg/DynamicAny/DynAnyPackage/InvalidValue.java \
+ classpath/org/omg/DynamicAny/DynAnyPackage/InvalidValueHelper.java \
+ classpath/org/omg/DynamicAny/DynAnyPackage/TypeMismatch.java \
+ classpath/org/omg/DynamicAny/DynAnyPackage/TypeMismatchHelper.java \
+ classpath/org/omg/DynamicAny/DynAnySeqHelper.java \
+ classpath/org/omg/DynamicAny/DynArray.java \
+ classpath/org/omg/DynamicAny/DynArrayHelper.java \
+ classpath/org/omg/DynamicAny/DynArrayOperations.java \
+ classpath/org/omg/DynamicAny/DynEnum.java \
+ classpath/org/omg/DynamicAny/DynEnumHelper.java \
+ classpath/org/omg/DynamicAny/DynEnumOperations.java \
+ classpath/org/omg/DynamicAny/DynFixed.java \
+ classpath/org/omg/DynamicAny/DynFixedHelper.java \
+ classpath/org/omg/DynamicAny/DynFixedOperations.java \
+ classpath/org/omg/DynamicAny/DynSequence.java \
+ classpath/org/omg/DynamicAny/DynSequenceHelper.java \
+ classpath/org/omg/DynamicAny/DynSequenceOperations.java \
+ classpath/org/omg/DynamicAny/DynStruct.java \
+ classpath/org/omg/DynamicAny/DynStructHelper.java \
+ classpath/org/omg/DynamicAny/DynStructOperations.java \
+ classpath/org/omg/DynamicAny/DynUnion.java \
+ classpath/org/omg/DynamicAny/DynUnionHelper.java \
+ classpath/org/omg/DynamicAny/DynUnionOperations.java \
+ classpath/org/omg/DynamicAny/DynValue.java \
+ classpath/org/omg/DynamicAny/DynValueBox.java \
+ classpath/org/omg/DynamicAny/DynValueBoxOperations.java \
+ classpath/org/omg/DynamicAny/DynValueCommon.java \
+ classpath/org/omg/DynamicAny/DynValueCommonOperations.java \
+ classpath/org/omg/DynamicAny/DynValueHelper.java \
+ classpath/org/omg/DynamicAny/DynValueOperations.java \
+ classpath/org/omg/DynamicAny/FieldNameHelper.java \
+ classpath/org/omg/DynamicAny/NameDynAnyPair.java \
+ classpath/org/omg/DynamicAny/NameDynAnyPairHelper.java \
+ classpath/org/omg/DynamicAny/NameDynAnyPairSeqHelper.java \
+ classpath/org/omg/DynamicAny/NameValuePair.java \
+ classpath/org/omg/DynamicAny/NameValuePairHelper.java \
+ classpath/org/omg/DynamicAny/NameValuePairSeqHelper.java \
+ classpath/org/omg/DynamicAny/_DynAnyFactoryStub.java \
+ classpath/org/omg/DynamicAny/_DynAnyStub.java \
+ classpath/org/omg/DynamicAny/_DynArrayStub.java \
+ classpath/org/omg/DynamicAny/_DynEnumStub.java \
+ classpath/org/omg/DynamicAny/_DynFixedStub.java \
+ classpath/org/omg/DynamicAny/_DynSequenceStub.java \
+ classpath/org/omg/DynamicAny/_DynStructStub.java \
+ classpath/org/omg/DynamicAny/_DynUnionStub.java \
+ classpath/org/omg/DynamicAny/_DynValueStub.java \
+ classpath/org/omg/IOP/CodeSets.java \
+ classpath/org/omg/IOP/Codec.java \
+ classpath/org/omg/IOP/CodecFactory.java \
+ classpath/org/omg/IOP/CodecFactoryHelper.java \
+ classpath/org/omg/IOP/CodecFactoryOperations.java \
+ classpath/org/omg/IOP/CodecFactoryPackage/UnknownEncoding.java \
+ classpath/org/omg/IOP/CodecFactoryPackage/UnknownEncodingHelper.java \
+ classpath/org/omg/IOP/CodecOperations.java \
+ classpath/org/omg/IOP/CodecPackage/FormatMismatch.java \
+ classpath/org/omg/IOP/CodecPackage/FormatMismatchHelper.java \
+ classpath/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.java \
+ classpath/org/omg/IOP/CodecPackage/InvalidTypeForEncodingHelper.java \
+ classpath/org/omg/IOP/CodecPackage/TypeMismatch.java \
+ classpath/org/omg/IOP/CodecPackage/TypeMismatchHelper.java \
+ classpath/org/omg/IOP/ComponentIdHelper.java \
+ classpath/org/omg/IOP/ENCODING_CDR_ENCAPS.java \
+ classpath/org/omg/IOP/Encoding.java \
+ classpath/org/omg/IOP/ExceptionDetailMessage.java \
+ classpath/org/omg/IOP/IOR.java \
+ classpath/org/omg/IOP/IORHelper.java \
+ classpath/org/omg/IOP/IORHolder.java \
+ classpath/org/omg/IOP/MultipleComponentProfileHelper.java \
+ classpath/org/omg/IOP/MultipleComponentProfileHolder.java \
+ classpath/org/omg/IOP/ProfileIdHelper.java \
+ classpath/org/omg/IOP/RMICustomMaxStreamFormat.java \
+ classpath/org/omg/IOP/ServiceContext.java \
+ classpath/org/omg/IOP/ServiceContextHelper.java \
+ classpath/org/omg/IOP/ServiceContextHolder.java \
+ classpath/org/omg/IOP/ServiceContextListHelper.java \
+ classpath/org/omg/IOP/ServiceContextListHolder.java \
+ classpath/org/omg/IOP/ServiceIdHelper.java \
+ classpath/org/omg/IOP/TAG_ALTERNATE_IIOP_ADDRESS.java \
+ classpath/org/omg/IOP/TAG_CODE_SETS.java \
+ classpath/org/omg/IOP/TAG_INTERNET_IOP.java \
+ classpath/org/omg/IOP/TAG_JAVA_CODEBASE.java \
+ classpath/org/omg/IOP/TAG_MULTIPLE_COMPONENTS.java \
+ classpath/org/omg/IOP/TAG_ORB_TYPE.java \
+ classpath/org/omg/IOP/TAG_POLICIES.java \
+ classpath/org/omg/IOP/TAG_RMI_CUSTOM_MAX_STREAM_FORMAT.java \
+ classpath/org/omg/IOP/TaggedComponent.java \
+ classpath/org/omg/IOP/TaggedComponentHelper.java \
+ classpath/org/omg/IOP/TaggedComponentHolder.java \
+ classpath/org/omg/IOP/TaggedProfile.java \
+ classpath/org/omg/IOP/TaggedProfileHelper.java \
+ classpath/org/omg/IOP/TaggedProfileHolder.java \
+ classpath/org/omg/IOP/TransactionService.java \
+ classpath/org/omg/Messaging/SYNC_WITH_TRANSPORT.java \
+ classpath/org/omg/Messaging/SyncScopeHelper.java \
+ classpath/org/omg/PortableInterceptor/ACTIVE.java \
+ classpath/org/omg/PortableInterceptor/AdapterManagerIdHelper.java \
+ classpath/org/omg/PortableInterceptor/AdapterNameHelper.java \
+ classpath/org/omg/PortableInterceptor/AdapterStateHelper.java \
+ classpath/org/omg/PortableInterceptor/ClientRequestInfo.java \
+ classpath/org/omg/PortableInterceptor/ClientRequestInfoOperations.java \
+ classpath/org/omg/PortableInterceptor/ClientRequestInterceptor.java \
+ classpath/org/omg/PortableInterceptor/ClientRequestInterceptorOperations.java \
+ classpath/org/omg/PortableInterceptor/Current.java \
+ classpath/org/omg/PortableInterceptor/CurrentHelper.java \
+ classpath/org/omg/PortableInterceptor/CurrentOperations.java \
+ classpath/org/omg/PortableInterceptor/DISCARDING.java \
+ classpath/org/omg/PortableInterceptor/ForwardRequest.java \
+ classpath/org/omg/PortableInterceptor/ForwardRequestHelper.java \
+ classpath/org/omg/PortableInterceptor/HOLDING.java \
+ classpath/org/omg/PortableInterceptor/INACTIVE.java \
+ classpath/org/omg/PortableInterceptor/IORInfo.java \
+ classpath/org/omg/PortableInterceptor/IORInfoOperations.java \
+ classpath/org/omg/PortableInterceptor/IORInterceptor.java \
+ classpath/org/omg/PortableInterceptor/IORInterceptorOperations.java \
+ classpath/org/omg/PortableInterceptor/IORInterceptor_3_0.java \
+ classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Helper.java \
+ classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Holder.java \
+ classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Operations.java \
+ classpath/org/omg/PortableInterceptor/Interceptor.java \
+ classpath/org/omg/PortableInterceptor/InterceptorOperations.java \
+ classpath/org/omg/PortableInterceptor/InvalidSlot.java \
+ classpath/org/omg/PortableInterceptor/InvalidSlotHelper.java \
+ classpath/org/omg/PortableInterceptor/LOCATION_FORWARD.java \
+ classpath/org/omg/PortableInterceptor/NON_EXISTENT.java \
+ classpath/org/omg/PortableInterceptor/ORBIdHelper.java \
+ classpath/org/omg/PortableInterceptor/ORBInitInfo.java \
+ classpath/org/omg/PortableInterceptor/ORBInitInfoOperations.java \
+ classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.java \
+ classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHelper.java \
+ classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.java \
+ classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHelper.java \
+ classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java \
+ classpath/org/omg/PortableInterceptor/ORBInitializer.java \
+ classpath/org/omg/PortableInterceptor/ORBInitializerOperations.java \
+ classpath/org/omg/PortableInterceptor/ObjectIdHelper.java \
+ classpath/org/omg/PortableInterceptor/ObjectReferenceFactory.java \
+ classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHelper.java \
+ classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java \
+ classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java \
+ classpath/org/omg/PortableInterceptor/ObjectReferenceTemplate.java \
+ classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHelper.java \
+ classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java \
+ classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHelper.java \
+ classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.java \
+ classpath/org/omg/PortableInterceptor/PolicyFactory.java \
+ classpath/org/omg/PortableInterceptor/PolicyFactoryOperations.java \
+ classpath/org/omg/PortableInterceptor/RequestInfo.java \
+ classpath/org/omg/PortableInterceptor/RequestInfoOperations.java \
+ classpath/org/omg/PortableInterceptor/SUCCESSFUL.java \
+ classpath/org/omg/PortableInterceptor/SYSTEM_EXCEPTION.java \
+ classpath/org/omg/PortableInterceptor/ServerIdHelper.java \
+ classpath/org/omg/PortableInterceptor/ServerRequestInfo.java \
+ classpath/org/omg/PortableInterceptor/ServerRequestInfoOperations.java \
+ classpath/org/omg/PortableInterceptor/ServerRequestInterceptor.java \
+ classpath/org/omg/PortableInterceptor/ServerRequestInterceptorOperations.java \
+ classpath/org/omg/PortableInterceptor/TRANSPORT_RETRY.java \
+ classpath/org/omg/PortableInterceptor/USER_EXCEPTION.java \
+ classpath/org/omg/PortableInterceptor/_IORInterceptor_3_0Stub.java \
+ classpath/org/omg/PortableServer/AdapterActivator.java \
+ classpath/org/omg/PortableServer/AdapterActivatorOperations.java \
+ classpath/org/omg/PortableServer/Current.java \
+ classpath/org/omg/PortableServer/CurrentHelper.java \
+ classpath/org/omg/PortableServer/CurrentOperations.java \
+ classpath/org/omg/PortableServer/CurrentPackage/NoContext.java \
+ classpath/org/omg/PortableServer/CurrentPackage/NoContextHelper.java \
+ classpath/org/omg/PortableServer/DynamicImplementation.java \
+ classpath/org/omg/PortableServer/ForwardRequest.java \
+ classpath/org/omg/PortableServer/ForwardRequestHelper.java \
+ classpath/org/omg/PortableServer/ID_ASSIGNMENT_POLICY_ID.java \
+ classpath/org/omg/PortableServer/ID_UNIQUENESS_POLICY_ID.java \
+ classpath/org/omg/PortableServer/IMPLICIT_ACTIVATION_POLICY_ID.java \
+ classpath/org/omg/PortableServer/IdAssignmentPolicy.java \
+ classpath/org/omg/PortableServer/IdAssignmentPolicyOperations.java \
+ classpath/org/omg/PortableServer/IdAssignmentPolicyValue.java \
+ classpath/org/omg/PortableServer/IdUniquenessPolicy.java \
+ classpath/org/omg/PortableServer/IdUniquenessPolicyOperations.java \
+ classpath/org/omg/PortableServer/IdUniquenessPolicyValue.java \
+ classpath/org/omg/PortableServer/ImplicitActivationPolicy.java \
+ classpath/org/omg/PortableServer/ImplicitActivationPolicyOperations.java \
+ classpath/org/omg/PortableServer/ImplicitActivationPolicyValue.java \
+ classpath/org/omg/PortableServer/LIFESPAN_POLICY_ID.java \
+ classpath/org/omg/PortableServer/LifespanPolicy.java \
+ classpath/org/omg/PortableServer/LifespanPolicyOperations.java \
+ classpath/org/omg/PortableServer/LifespanPolicyValue.java \
+ classpath/org/omg/PortableServer/POA.java \
+ classpath/org/omg/PortableServer/POAHelper.java \
+ classpath/org/omg/PortableServer/POAManager.java \
+ classpath/org/omg/PortableServer/POAManagerOperations.java \
+ classpath/org/omg/PortableServer/POAManagerPackage/AdapterInactive.java \
+ classpath/org/omg/PortableServer/POAManagerPackage/AdapterInactiveHelper.java \
+ classpath/org/omg/PortableServer/POAManagerPackage/State.java \
+ classpath/org/omg/PortableServer/POAOperations.java \
+ classpath/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.java \
+ classpath/org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHelper.java \
+ classpath/org/omg/PortableServer/POAPackage/AdapterNonExistent.java \
+ classpath/org/omg/PortableServer/POAPackage/AdapterNonExistentHelper.java \
+ classpath/org/omg/PortableServer/POAPackage/InvalidPolicy.java \
+ classpath/org/omg/PortableServer/POAPackage/InvalidPolicyHelper.java \
+ classpath/org/omg/PortableServer/POAPackage/NoServant.java \
+ classpath/org/omg/PortableServer/POAPackage/NoServantHelper.java \
+ classpath/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.java \
+ classpath/org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHelper.java \
+ classpath/org/omg/PortableServer/POAPackage/ObjectNotActive.java \
+ classpath/org/omg/PortableServer/POAPackage/ObjectNotActiveHelper.java \
+ classpath/org/omg/PortableServer/POAPackage/ServantAlreadyActive.java \
+ classpath/org/omg/PortableServer/POAPackage/ServantAlreadyActiveHelper.java \
+ classpath/org/omg/PortableServer/POAPackage/ServantNotActive.java \
+ classpath/org/omg/PortableServer/POAPackage/ServantNotActiveHelper.java \
+ classpath/org/omg/PortableServer/POAPackage/WrongAdapter.java \
+ classpath/org/omg/PortableServer/POAPackage/WrongAdapterHelper.java \
+ classpath/org/omg/PortableServer/POAPackage/WrongPolicy.java \
+ classpath/org/omg/PortableServer/POAPackage/WrongPolicyHelper.java \
+ classpath/org/omg/PortableServer/REQUEST_PROCESSING_POLICY_ID.java \
+ classpath/org/omg/PortableServer/RequestProcessingPolicy.java \
+ classpath/org/omg/PortableServer/RequestProcessingPolicyOperations.java \
+ classpath/org/omg/PortableServer/RequestProcessingPolicyValue.java \
+ classpath/org/omg/PortableServer/SERVANT_RETENTION_POLICY_ID.java \
+ classpath/org/omg/PortableServer/Servant.java \
+ classpath/org/omg/PortableServer/ServantActivator.java \
+ classpath/org/omg/PortableServer/ServantActivatorHelper.java \
+ classpath/org/omg/PortableServer/ServantActivatorOperations.java \
+ classpath/org/omg/PortableServer/ServantActivatorPOA.java \
+ classpath/org/omg/PortableServer/ServantLocator.java \
+ classpath/org/omg/PortableServer/ServantLocatorHelper.java \
+ classpath/org/omg/PortableServer/ServantLocatorOperations.java \
+ classpath/org/omg/PortableServer/ServantLocatorPOA.java \
+ classpath/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java \
+ classpath/org/omg/PortableServer/ServantManager.java \
+ classpath/org/omg/PortableServer/ServantManagerOperations.java \
+ classpath/org/omg/PortableServer/ServantRetentionPolicy.java \
+ classpath/org/omg/PortableServer/ServantRetentionPolicyOperations.java \
+ classpath/org/omg/PortableServer/ServantRetentionPolicyValue.java \
+ classpath/org/omg/PortableServer/THREAD_POLICY_ID.java \
+ classpath/org/omg/PortableServer/ThreadPolicy.java \
+ classpath/org/omg/PortableServer/ThreadPolicyOperations.java \
+ classpath/org/omg/PortableServer/ThreadPolicyValue.java \
+ classpath/org/omg/PortableServer/_ServantActivatorStub.java \
+ classpath/org/omg/PortableServer/_ServantLocatorStub.java \
+ classpath/org/omg/PortableServer/portable/Delegate.java \
+ classpath/org/omg/SendingContext/RunTime.java \
+ classpath/org/omg/SendingContext/RunTimeOperations.java \
+ classpath/org/omg/stub/java/rmi/_Remote_Stub.java
+ 
+ org_w3c_source_files = \
+ classpath/external/w3c_dom/org/w3c/dom/Attr.java \
+ classpath/external/w3c_dom/org/w3c/dom/CDATASection.java \
+ classpath/external/w3c_dom/org/w3c/dom/CharacterData.java \
+ classpath/external/w3c_dom/org/w3c/dom/Comment.java \
+ classpath/external/w3c_dom/org/w3c/dom/DOMConfiguration.java \
+ classpath/external/w3c_dom/org/w3c/dom/DOMError.java \
+ classpath/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java \
+ classpath/external/w3c_dom/org/w3c/dom/DOMException.java \
+ classpath/external/w3c_dom/org/w3c/dom/DOMImplementation.java \
+ classpath/external/w3c_dom/org/w3c/dom/DOMImplementationList.java \
+ classpath/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java \
+ classpath/external/w3c_dom/org/w3c/dom/DOMLocator.java \
+ classpath/external/w3c_dom/org/w3c/dom/DOMStringList.java \
+ classpath/external/w3c_dom/org/w3c/dom/Document.java \
+ classpath/external/w3c_dom/org/w3c/dom/DocumentFragment.java \
+ classpath/external/w3c_dom/org/w3c/dom/DocumentType.java \
+ classpath/external/w3c_dom/org/w3c/dom/Element.java \
+ classpath/external/w3c_dom/org/w3c/dom/Entity.java \
+ classpath/external/w3c_dom/org/w3c/dom/EntityReference.java \
+ classpath/external/w3c_dom/org/w3c/dom/NameList.java \
+ classpath/external/w3c_dom/org/w3c/dom/NamedNodeMap.java \
+ classpath/external/w3c_dom/org/w3c/dom/Node.java \
+ classpath/external/w3c_dom/org/w3c/dom/NodeList.java \
+ classpath/external/w3c_dom/org/w3c/dom/Notation.java \
+ classpath/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java \
+ classpath/external/w3c_dom/org/w3c/dom/Text.java \
+ classpath/external/w3c_dom/org/w3c/dom/TypeInfo.java \
+ classpath/external/w3c_dom/org/w3c/dom/UserDataHandler.java \
+ classpath/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSRule.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSValue.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/CSSValueList.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/Counter.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/RGBColor.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/Rect.java \
+ classpath/external/w3c_dom/org/w3c/dom/css/ViewCSS.java \
+ classpath/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java \
+ classpath/external/w3c_dom/org/w3c/dom/events/Event.java \
+ classpath/external/w3c_dom/org/w3c/dom/events/EventException.java \
+ classpath/external/w3c_dom/org/w3c/dom/events/EventListener.java \
+ classpath/external/w3c_dom/org/w3c/dom/events/EventTarget.java \
+ classpath/external/w3c_dom/org/w3c/dom/events/MouseEvent.java \
+ classpath/external/w3c_dom/org/w3c/dom/events/MutationEvent.java \
+ classpath/external/w3c_dom/org/w3c/dom/events/UIEvent.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSException.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSInput.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSOutput.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSParser.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java \
+ classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java \
+ classpath/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java \
+ classpath/external/w3c_dom/org/w3c/dom/ranges/Range.java \
+ classpath/external/w3c_dom/org/w3c/dom/ranges/RangeException.java \
+ classpath/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java \
+ classpath/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java \
+ classpath/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java \
+ classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java \
+ classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java \
+ classpath/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java \
+ classpath/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java \
+ classpath/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java \
+ classpath/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java \
+ classpath/external/w3c_dom/org/w3c/dom/views/AbstractView.java \
+ classpath/external/w3c_dom/org/w3c/dom/views/DocumentView.java \
+ classpath/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java \
+ classpath/external/w3c_dom/org/w3c/dom/xpath/XPathException.java \
+ classpath/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java \
+ classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java \
+ classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java \
+ classpath/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java
+ 
+ org_xml_source_files = \
+ classpath/external/sax/org/xml/sax/AttributeList.java \
+ classpath/external/sax/org/xml/sax/Attributes.java \
+ classpath/external/sax/org/xml/sax/ContentHandler.java \
+ classpath/external/sax/org/xml/sax/DTDHandler.java \
+ classpath/external/sax/org/xml/sax/DocumentHandler.java \
+ classpath/external/sax/org/xml/sax/EntityResolver.java \
+ classpath/external/sax/org/xml/sax/ErrorHandler.java \
+ classpath/external/sax/org/xml/sax/HandlerBase.java \
+ classpath/external/sax/org/xml/sax/InputSource.java \
+ classpath/external/sax/org/xml/sax/Locator.java \
+ classpath/external/sax/org/xml/sax/Parser.java \
+ classpath/external/sax/org/xml/sax/SAXException.java \
+ classpath/external/sax/org/xml/sax/SAXNotRecognizedException.java \
+ classpath/external/sax/org/xml/sax/SAXNotSupportedException.java \
+ classpath/external/sax/org/xml/sax/SAXParseException.java \
+ classpath/external/sax/org/xml/sax/XMLFilter.java \
+ classpath/external/sax/org/xml/sax/XMLReader.java \
+ classpath/external/sax/org/xml/sax/ext/Attributes2.java \
+ classpath/external/sax/org/xml/sax/ext/Attributes2Impl.java \
+ classpath/external/sax/org/xml/sax/ext/DeclHandler.java \
+ classpath/external/sax/org/xml/sax/ext/DefaultHandler2.java \
+ classpath/external/sax/org/xml/sax/ext/EntityResolver2.java \
+ classpath/external/sax/org/xml/sax/ext/LexicalHandler.java \
+ classpath/external/sax/org/xml/sax/ext/Locator2.java \
+ classpath/external/sax/org/xml/sax/ext/Locator2Impl.java \
+ classpath/external/sax/org/xml/sax/helpers/AttributeListImpl.java \
+ classpath/external/sax/org/xml/sax/helpers/AttributesImpl.java \
+ classpath/external/sax/org/xml/sax/helpers/DefaultHandler.java \
+ classpath/external/sax/org/xml/sax/helpers/LocatorImpl.java \
+ classpath/external/sax/org/xml/sax/helpers/NamespaceSupport.java \
+ classpath/external/sax/org/xml/sax/helpers/NewInstance.java \
+ classpath/external/sax/org/xml/sax/helpers/ParserAdapter.java \
+ classpath/external/sax/org/xml/sax/helpers/ParserFactory.java \
+ classpath/external/sax/org/xml/sax/helpers/XMLFilterImpl.java \
+ classpath/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java \
+ classpath/external/sax/org/xml/sax/helpers/XMLReaderFactory.java
+ 
+ all_packages_source_files = \
+   gnu/awt.list \
+   gnu/awt/j2d.list \
+   gnu/classpath.list \
+   gnu/classpath/debug.list \
+   gnu/classpath/jdwp.list \
+   gnu/classpath/jdwp/event.list \
+   gnu/classpath/jdwp/event/filters.list \
+   gnu/classpath/jdwp/exception.list \
+   gnu/classpath/jdwp/id.list \
+   gnu/classpath/jdwp/processor.list \
+   gnu/classpath/jdwp/transport.list \
+   gnu/classpath/jdwp/util.list \
+   gnu/gcj.list \
+   gnu/gcj/convert.list \
+   gnu/gcj/io.list \
+   gnu/gcj/runtime.list \
+   gnu/gcj/util.list \
+   gnu/java/awt.list \
+   gnu/java/awt/color.list \
+   gnu/java/awt/image.list \
+   gnu/java/awt/peer.list \
+   gnu/java/io.list \
+   gnu/java/lang.list \
+   gnu/java/lang/reflect.list \
+   gnu/java/locale.list \
+   gnu/java/math.list \
+   gnu/java/net.list \
+   gnu/java/net/protocol/file.list \
+   gnu/java/net/protocol/ftp.list \
+   gnu/java/net/protocol/http.list \
+   gnu/java/net/protocol/https.list \
+   gnu/java/net/protocol/jar.list \
+   gnu/java/nio.list \
+   gnu/java/nio/channels.list \
+   gnu/java/nio/charset.list \
+   gnu/java/rmi.list \
+   gnu/java/rmi/dgc.list \
+   gnu/java/rmi/registry.list \
+   gnu/java/rmi/server.list \
+   gnu/java/security.list \
+   gnu/java/security/action.list \
+   gnu/java/security/ber.list \
+   gnu/java/security/der.list \
+   gnu/java/security/pkcs.list \
+   gnu/java/security/provider.list \
+   gnu/java/security/util.list \
+   gnu/java/security/x509.list \
+   gnu/java/security/x509/ext.list \
+   gnu/java/text.list \
+   gnu/java/util.list \
+   gnu/java/util/prefs.list \
+   gnu/javax/crypto.list \
+   gnu/javax/imageio/bmp.list \
+   gnu/javax/swing/text/html/parser.list \
+   gnu/javax/swing/text/html/parser/models.list \
+   gnu/javax/swing/text/html/parser/support.list \
+   gnu/javax/swing/text/html/parser/support/low.list \
+   gnu/regexp.list \
+   java/applet.list \
+   java/awt.list \
+   java/awt/color.list \
+   java/awt/datatransfer.list \
+   java/awt/dnd.list \
+   java/awt/dnd/peer.list \
+   java/awt/event.list \
+   java/awt/font.list \
+   java/awt/geom.list \
+   java/awt/im.list \
+   java/awt/im/spi.list \
+   java/awt/image.list \
+   java/awt/image/renderable.list \
+   java/awt/peer.list \
+   java/awt/print.list \
+   java/beans.list \
+   java/beans/beancontext.list \
+   java/io.list \
+   java/lang.list \
+   java/lang/annotation.list \
+   java/lang/ref.list \
+   java/lang/reflect.list \
+   java/math.list \
+   java/net.list \
+   java/nio.list \
+   java/nio/channels.list \
+   java/nio/channels/spi.list \
+   java/nio/charset.list \
+   java/nio/charset/spi.list \
+   java/rmi.list \
+   java/rmi/activation.list \
+   java/rmi/dgc.list \
+   java/rmi/registry.list \
+   java/rmi/server.list \
+   java/security.list \
+   java/security/acl.list \
+   java/security/cert.list \
+   java/security/interfaces.list \
+   java/security/spec.list \
+   java/sql.list \
+   java/text.list \
+   java/util.list \
+   java/util/jar.list \
+   java/util/logging.list \
+   java/util/prefs.list \
+   java/util/regex.list \
+   java/util/zip.list \
+   javax/accessibility.list \
+   javax/crypto.list \
+   javax/crypto/interfaces.list \
+   javax/crypto/spec.list \
+   javax/naming.list \
+   javax/naming/directory.list \
+   javax/naming/event.list \
+   javax/naming/ldap.list \
+   javax/naming/spi.list \
+   javax/net.list \
+   javax/net/ssl.list \
+   javax/print.list \
+   javax/print/attribute.list \
+   javax/print/attribute/standard.list \
+   javax/print/event.list \
+   javax/security/auth.list \
+   javax/security/auth/callback.list \
+   javax/security/auth/login.list \
+   javax/security/auth/spi.list \
+   javax/security/auth/x500.list \
+   javax/security/cert.list \
+   javax/security/sasl.list \
+   javax/sound/midi.list \
+   javax/sound/midi/spi.list \
+   javax/sound/sampled.list \
+   javax/sound/sampled/spi.list \
+   javax/sql.list \
+   javax/swing.list \
+   javax/swing/border.list \
+   javax/swing/colorchooser.list \
+   javax/swing/event.list \
+   javax/swing/filechooser.list \
+   javax/swing/plaf.list \
+   javax/swing/plaf/basic.list \
+   javax/swing/plaf/metal.list \
+   javax/swing/plaf/multi.list \
+   javax/swing/table.list \
+   javax/swing/text.list \
+   javax/swing/text/html.list \
+   javax/swing/text/html/parser.list \
+   javax/swing/text/rtf.list \
+   javax/swing/tree.list \
+   javax/swing/undo.list \
+   javax/transaction.list \
+   javax/transaction/xa.list \
+   org/ietf/jgss.list
+ 
+ ordinary_header_files = \
+   $(gnu_awt_header_files) \
+   $(gnu_awt_j2d_header_files) \
+   $(gnu_classpath_header_files) \
+   $(gnu_classpath_debug_header_files) \
+   $(gnu_classpath_jdwp_header_files) \
+   $(gnu_classpath_jdwp_event_header_files) \
+   $(gnu_classpath_jdwp_event_filters_header_files) \
+   $(gnu_classpath_jdwp_exception_header_files) \
+   $(gnu_classpath_jdwp_id_header_files) \
+   $(gnu_classpath_jdwp_processor_header_files) \
+   $(gnu_classpath_jdwp_transport_header_files) \
+   $(gnu_classpath_jdwp_util_header_files) \
+   $(gnu_gcj_header_files) \
+   $(gnu_gcj_convert_header_files) \
+   $(gnu_gcj_io_header_files) \
+   $(gnu_gcj_runtime_header_files) \
+   $(gnu_gcj_util_header_files) \
+   $(gnu_java_awt_header_files) \
+   $(gnu_java_awt_color_header_files) \
+   $(gnu_java_awt_image_header_files) \
+   $(gnu_java_awt_peer_header_files) \
+   $(gnu_java_io_header_files) \
+   $(gnu_java_lang_header_files) \
+   $(gnu_java_lang_reflect_header_files) \
+   $(gnu_java_locale_header_files) \
+   $(gnu_java_math_header_files) \
+   $(gnu_java_net_header_files) \
+   $(gnu_java_net_protocol_file_header_files) \
+   $(gnu_java_net_protocol_ftp_header_files) \
+   $(gnu_java_net_protocol_http_header_files) \
+   $(gnu_java_net_protocol_https_header_files) \
+   $(gnu_java_net_protocol_jar_header_files) \
+   $(gnu_java_nio_header_files) \
+   $(gnu_java_nio_channels_header_files) \
+   $(gnu_java_nio_charset_header_files) \
+   $(gnu_java_rmi_header_files) \
+   $(gnu_java_rmi_dgc_header_files) \
+   $(gnu_java_rmi_registry_header_files) \
+   $(gnu_java_rmi_server_header_files) \
+   $(gnu_java_security_header_files) \
+   $(gnu_java_security_action_header_files) \
+   $(gnu_java_security_ber_header_files) \
+   $(gnu_java_security_der_header_files) \
+   $(gnu_java_security_pkcs_header_files) \
+   $(gnu_java_security_provider_header_files) \
+   $(gnu_java_security_util_header_files) \
+   $(gnu_java_security_x509_header_files) \
+   $(gnu_java_security_x509_ext_header_files) \
+   $(gnu_java_text_header_files) \
+   $(gnu_java_util_header_files) \
+   $(gnu_java_util_prefs_header_files) \
+   $(gnu_javax_crypto_header_files) \
+   $(gnu_javax_imageio_bmp_header_files) \
+   $(gnu_javax_swing_text_html_parser_header_files) \
+   $(gnu_javax_swing_text_html_parser_models_header_files) \
+   $(gnu_javax_swing_text_html_parser_support_header_files) \
+   $(gnu_javax_swing_text_html_parser_support_low_header_files) \
+   $(gnu_regexp_header_files) \
+   $(java_applet_header_files) \
+   $(java_awt_header_files) \
+   $(java_awt_color_header_files) \
+   $(java_awt_datatransfer_header_files) \
+   $(java_awt_dnd_header_files) \
+   $(java_awt_dnd_peer_header_files) \
+   $(java_awt_event_header_files) \
+   $(java_awt_font_header_files) \
+   $(java_awt_geom_header_files) \
+   $(java_awt_im_header_files) \
+   $(java_awt_im_spi_header_files) \
+   $(java_awt_image_header_files) \
+   $(java_awt_image_renderable_header_files) \
+   $(java_awt_peer_header_files) \
+   $(java_awt_print_header_files) \
+   $(java_beans_header_files) \
+   $(java_beans_beancontext_header_files) \
+   $(java_io_header_files) \
+   $(java_lang_header_files) \
+   $(java_lang_annotation_header_files) \
+   $(java_lang_ref_header_files) \
+   $(java_lang_reflect_header_files) \
+   $(java_math_header_files) \
+   $(java_net_header_files) \
+   $(java_nio_header_files) \
+   $(java_nio_channels_header_files) \
+   $(java_nio_channels_spi_header_files) \
+   $(java_nio_charset_header_files) \
+   $(java_nio_charset_spi_header_files) \
+   $(java_rmi_header_files) \
+   $(java_rmi_activation_header_files) \
+   $(java_rmi_dgc_header_files) \
+   $(java_rmi_registry_header_files) \
+   $(java_rmi_server_header_files) \
+   $(java_security_header_files) \
+   $(java_security_acl_header_files) \
+   $(java_security_cert_header_files) \
+   $(java_security_interfaces_header_files) \
+   $(java_security_spec_header_files) \
+   $(java_sql_header_files) \
+   $(java_text_header_files) \
+   $(java_util_header_files) \
+   $(java_util_jar_header_files) \
+   $(java_util_logging_header_files) \
+   $(java_util_prefs_header_files) \
+   $(java_util_regex_header_files) \
+   $(java_util_zip_header_files) \
+   $(javax_accessibility_header_files) \
+   $(javax_crypto_header_files) \
+   $(javax_crypto_interfaces_header_files) \
+   $(javax_crypto_spec_header_files) \
+   $(javax_naming_header_files) \
+   $(javax_naming_directory_header_files) \
+   $(javax_naming_event_header_files) \
+   $(javax_naming_ldap_header_files) \
+   $(javax_naming_spi_header_files) \
+   $(javax_net_header_files) \
+   $(javax_net_ssl_header_files) \
+   $(javax_print_header_files) \
+   $(javax_print_attribute_header_files) \
+   $(javax_print_attribute_standard_header_files) \
+   $(javax_print_event_header_files) \
+   $(javax_security_auth_header_files) \
+   $(javax_security_auth_callback_header_files) \
+   $(javax_security_auth_login_header_files) \
+   $(javax_security_auth_spi_header_files) \
+   $(javax_security_auth_x500_header_files) \
+   $(javax_security_cert_header_files) \
+   $(javax_security_sasl_header_files) \
+   $(javax_sound_midi_header_files) \
+   $(javax_sound_midi_spi_header_files) \
+   $(javax_sound_sampled_header_files) \
+   $(javax_sound_sampled_spi_header_files) \
+   $(javax_sql_header_files) \
+   $(javax_swing_header_files) \
+   $(javax_swing_border_header_files) \
+   $(javax_swing_colorchooser_header_files) \
+   $(javax_swing_event_header_files) \
+   $(javax_swing_filechooser_header_files) \
+   $(javax_swing_plaf_header_files) \
+   $(javax_swing_plaf_basic_header_files) \
+   $(javax_swing_plaf_metal_header_files) \
+   $(javax_swing_plaf_multi_header_files) \
+   $(javax_swing_table_header_files) \
+   $(javax_swing_text_header_files) \
+   $(javax_swing_text_html_header_files) \
+   $(javax_swing_text_html_parser_header_files) \
+   $(javax_swing_text_rtf_header_files) \
+   $(javax_swing_tree_header_files) \
+   $(javax_swing_undo_header_files) \
+   $(javax_transaction_header_files) \
+   $(javax_transaction_xa_header_files) \
+   $(org_ietf_jgss_header_files)
+ 
+ bc_objects = \
+   gnu-CORBA.lo \
+   gnu-java-beans.lo \
+   gnu-javax-rmi.lo \
+   gnu-javax-sound-midi.lo \
+   gnu-xml.lo \
+   javax-imageio.lo \
+   javax-rmi.lo \
+   javax-xml.lo \
+   org-omg.lo \
+   org-w3c.lo \
+   org-xml.lo
+ 
+ omitted_headers = java/lang/ClassLoader.h java/lang/Thread.h \
+ 	java/lang/String.h java/lang/reflect/Constructor.h \
+ 	java/lang/reflect/Field.h java/lang/reflect/Method.h \
+ 	java/lang/reflect/Proxy.h gnu/gcj/runtime/ExtensionClassLoader.h
+ 
+ generic_header_files = $(filter-out $(omitted_headers),$(ordinary_header_files) $(xlib_nat_headers)) \
+ 	gnu/gcj/tools/gcj_dbtool/Main.h
+ 
+ inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \
+ 	java/io/ObjectInputStream$$GetField.h \
+ 	java/nio/DirectByteBufferImpl$$ReadWrite.h \
+ 	java/nio/channels/Pipe$$SinkChannel.h \
+ 	java/nio/channels/Pipe$$SourceChannel.h \
+ 	java/lang/reflect/Proxy$$ProxyData.h \
+ 	java/lang/reflect/Proxy$$ProxyType.h \
+ 	gnu/java/net/PlainSocketImpl$$SocketInputStream.h \
+ 	gnu/java/net/PlainSocketImpl$$SocketOutputStream.h \
+ 	gnu/java/nio/PipeImpl$$SinkChannelImpl.h \
+ 	gnu/java/nio/PipeImpl$$SourceChannelImpl.h \
+ 	$(PLATFORM_INNER_NAT_HDRS)
+ 
+ nat_headers = $(ordinary_header_files) $(inner_nat_headers) \
+ 	gnu/gcj/tools/gcj_dbtool/Main.h
+ 
+ nat_headers_install = $(ordinary_header_files)
+ xlib_nat_headers = $(gnu_awt_xlib_header_files) $(gnu_gcj_xlib_header_files)
+ extra_headers = java/lang/Object.h java/lang/Class.h
+ NM = nm
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@gen_from_JIS_SOURCES = \
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/gen-from-JIS.c \
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/make-trie.c
+ 
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@gen_from_JIS_DEPENDENCIES = \
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/JIS0201.h \
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/JIS0208.h \
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/JIS0212.h
+ 
+ jv_convert_SOURCES = 
+ jv_convert_LDFLAGS = --main=gnu.gcj.convert.Convert \
+ 	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
+ 
+ jv_convert_LINK = $(GCJLINK)
+ jv_convert_LDADD = -L$(here)/.libs libgcj.la
+ jv_convert_DEPENDENCIES = libgcj.la libgcj.spec
+ gcj_dbtool_SOURCES = \
+ gnu/gcj/tools/gcj_dbtool/Main.java \
+ gnu/gcj/tools/gcj_dbtool/natMain.cc
+ 
+ gcj_dbtool_LDFLAGS = --main=gnu.gcj.tools.gcj_dbtool.Main \
+ 	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
+ 
+ gcj_dbtool_LINK = $(GCJLINK)
+ gcj_dbtool_LDADD = -L$(here)/.libs libgcj.la
+ gcj_dbtool_DEPENDENCIES = libgcj.la libgcj.spec
+ gij_SOURCES = 
+ gij_LDFLAGS = -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
+ gij_LINK = $(GCJLINK)
+ gij_LDADD = -L$(here)/.libs libgij.la
+ gij_DEPENDENCIES = libgij.la
+ grmic_SOURCES = 
+ grmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \
+ 	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
+ 
+ grmic_LINK = $(GCJLINK)
+ grmic_LDADD = -L$(here)/.libs libgcj.la
+ grmic_DEPENDENCIES = libgcj.la libgcj.spec
+ grmiregistry_SOURCES = 
+ grmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \
+ 	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
+ 
+ grmiregistry_LINK = $(GCJLINK)
+ grmiregistry_LDADD = -L$(here)/.libs libgcj.la
+ grmiregistry_DEPENDENCIES = libgcj.la libgcj.spec
  nat_source_files = \
+ gnu/classpath/natSystemProperties.cc \
  gnu/gcj/natCore.cc \
  gnu/gcj/convert/JIS0208_to_Unicode.cc \
  gnu/gcj/convert/JIS0212_to_Unicode.cc \
*************** gnu/gcj/convert/natOutput_SJIS.cc \
*** 3708,3716 ****
  gnu/gcj/io/natSimpleSHSStream.cc \
  gnu/gcj/io/shs.cc \
  gnu/gcj/runtime/natFinalizerThread.cc \
- gnu/gcj/runtime/natNameFinder.cc \
  gnu/gcj/runtime/natSharedLibLoader.cc \
- gnu/gcj/runtime/natStackTrace.cc \
  gnu/gcj/runtime/natStringBuffer.cc \
  gnu/gcj/util/natDebug.cc \
  gnu/java/lang/natMainThread.cc \
--- 5862,5868 ----
*************** java/lang/natObject.cc \
*** 3735,3751 ****
  java/lang/natRuntime.cc	\
  java/lang/natString.cc \
  java/lang/natStringBuffer.cc \
  java/lang/natSystem.cc \
  java/lang/natThread.cc \
  java/lang/natVMClassLoader.cc \
  java/lang/natVMSecurityManager.cc \
  java/lang/ref/natReference.cc \
  java/lang/reflect/natArray.cc \
  java/lang/reflect/natConstructor.cc \
  java/lang/reflect/natField.cc \
  java/lang/reflect/natMethod.cc \
! java/lang/reflect/natProxy.cc \
! java/net/natNetworkInterface.cc \
  java/net/natInetAddress.cc \
  java/nio/channels/natChannels.cc \
  java/nio/natDirectByteBufferImpl.cc \
--- 5887,5904 ----
  java/lang/natRuntime.cc	\
  java/lang/natString.cc \
  java/lang/natStringBuffer.cc \
+ java/lang/natStringBuilder.cc \
  java/lang/natSystem.cc \
  java/lang/natThread.cc \
  java/lang/natVMClassLoader.cc \
  java/lang/natVMSecurityManager.cc \
+ java/lang/natVMThrowable.cc \
  java/lang/ref/natReference.cc \
  java/lang/reflect/natArray.cc \
  java/lang/reflect/natConstructor.cc \
  java/lang/reflect/natField.cc \
  java/lang/reflect/natMethod.cc \
! java/net/natVMNetworkInterface.cc \
  java/net/natInetAddress.cc \
  java/nio/channels/natChannels.cc \
  java/nio/natDirectByteBufferImpl.cc \
*************** java/util/logging/natLogger.cc \
*** 3756,3797 ****
  java/util/zip/natDeflater.cc \
  java/util/zip/natInflater.cc
  
- xlib_java_source_files = \
- gnu/gcj/xlib/Clip.java \
- gnu/gcj/xlib/Colormap.java \
- gnu/gcj/xlib/Display.java \
- gnu/gcj/xlib/Drawable.java \
- gnu/gcj/xlib/Font.java \
- gnu/gcj/xlib/GC.java \
- gnu/gcj/xlib/Pixmap.java \
- gnu/gcj/xlib/Screen.java \
- gnu/gcj/xlib/Visual.java \
- gnu/gcj/xlib/WMSizeHints.java \
- gnu/gcj/xlib/Window.java \
- gnu/gcj/xlib/WindowAttributes.java \
- gnu/gcj/xlib/XAnyEvent.java \
- gnu/gcj/xlib/XButtonEvent.java \
- gnu/gcj/xlib/XColor.java \
- gnu/gcj/xlib/XConfigureEvent.java \
- gnu/gcj/xlib/XConnectException.java \
- gnu/gcj/xlib/XEvent.java \
- gnu/gcj/xlib/XException.java \
- gnu/gcj/xlib/XExposeEvent.java \
- gnu/gcj/xlib/XID.java \
- gnu/gcj/xlib/XImage.java \
- gnu/gcj/xlib/XUnmapEvent.java \
- gnu/awt/xlib/XCanvasPeer.java \
- gnu/awt/xlib/XEventLoop.java \
- gnu/awt/xlib/XEventQueue.java \
- gnu/awt/xlib/XFontMetrics.java \
- gnu/awt/xlib/XFramePeer.java \
- gnu/awt/xlib/XGraphics.java \
- gnu/awt/xlib/XGraphicsConfiguration.java \
- gnu/awt/xlib/XOffScreenImage.java \
- gnu/awt/xlib/XPanelPeer.java \
- gnu/awt/xlib/XFontPeer.java \
- gnu/awt/xlib/XToolkit.java
- 
  xlib_nat_source_files = \
  gnu/gcj/xlib/natClip.cc \
  gnu/gcj/xlib/natColormap.cc \
--- 5909,5914 ----
*************** gnu/gcj/xlib/natXImage.cc \
*** 3815,3820 ****
--- 5932,5938 ----
  gnu/gcj/xlib/natXUnmapEvent.cc
  
  sourcesdir = $(jardir)
+ headers_to_make = $(nat_headers) $(am__append_15)
  
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
  # values defined in terms of make variables, as is the case for CC and
*************** MULTICLEAN = true
*** 3871,3880 ****
  all: all-recursive
  
  .SUFFIXES:
! .SUFFIXES: .class .java .h .properties .c .cc .lo .o .obj
  am--refresh:
  	@:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
  	@for dep in $?; do \
  	  case '$(am__configure_deps)' in \
  	    *$$dep*) \
--- 5989,5998 ----
  all: all-recursive
  
  .SUFFIXES:
! .SUFFIXES: .class .java .h .properties .list .c .cc .lo .o .obj
  am--refresh:
  	@:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/sources.am $(am__configure_deps)
  	@for dep in $?; do \
  	  case '$(am__configure_deps)' in \
  	    *$$dep*) \
*************** libgcj.spec: $(top_builddir)/config.stat
*** 3911,3927 ****
  	cd $(top_builddir) && $(SHELL) ./config.status $@
  libgcj-test.spec: $(top_builddir)/config.status $(srcdir)/libgcj-test.spec.in
  	cd $(top_builddir) && $(SHELL) ./config.status $@
- gnu/classpath/Configuration.java: $(top_builddir)/config.status $(top_srcdir)/gnu/classpath/Configuration.java.in
- 	cd $(top_builddir) && $(SHELL) ./config.status $@
- 
- clean-noinstLTLIBRARIES:
- 	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- 	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
- 	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
- 	  test "$$dir" != "$$p" || dir=.; \
- 	  echo "rm -f \"$${dir}/so_locations\""; \
- 	  rm -f "$${dir}/so_locations"; \
- 	done
  install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
  	@$(NORMAL_INSTALL)
  	test -z "$(toolexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(toolexeclibdir)"
--- 6029,6034 ----
*************** gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXIma
*** 4015,4154 ****
  gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo:  \
  	gnu/gcj/xlib/$(am__dirstamp) \
  	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/$(am__dirstamp):
- 	@$(mkdir_p) jni/gtk-peer
- 	@: > jni/gtk-peer/$(am__dirstamp)
- jni/gtk-peer/$(DEPDIR)/$(am__dirstamp):
- 	@$(mkdir_p) jni/gtk-peer/$(DEPDIR)
- 	@: > jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gthread-jni.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.lo:  \
- 	jni/gtk-peer/$(am__dirstamp) \
- 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- jni/classpath/$(am__dirstamp):
- 	@$(mkdir_p) jni/classpath
- 	@: > jni/classpath/$(am__dirstamp)
- jni/classpath/$(DEPDIR)/$(am__dirstamp):
- 	@$(mkdir_p) jni/classpath/$(DEPDIR)
- 	@: > jni/classpath/$(DEPDIR)/$(am__dirstamp)
- jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.lo:  \
- 	jni/classpath/$(am__dirstamp) \
- 	jni/classpath/$(DEPDIR)/$(am__dirstamp)
  lib-gnu-java-awt-peer-gtk.la: $(lib_gnu_java_awt_peer_gtk_la_OBJECTS) $(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES) 
  	$(lib_gnu_java_awt_peer_gtk_la_LINK) $(am_lib_gnu_java_awt_peer_gtk_la_rpath) $(lib_gnu_java_awt_peer_gtk_la_LDFLAGS) $(lib_gnu_java_awt_peer_gtk_la_OBJECTS) $(lib_gnu_java_awt_peer_gtk_la_LIBADD) $(LIBS)
  gnu/gcj/$(am__dirstamp):
  	@$(mkdir_p) gnu/gcj
  	@: > gnu/gcj/$(am__dirstamp)
--- 6122,6149 ----
  gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo:  \
  	gnu/gcj/xlib/$(am__dirstamp) \
  	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
  lib-gnu-java-awt-peer-gtk.la: $(lib_gnu_java_awt_peer_gtk_la_OBJECTS) $(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES) 
  	$(lib_gnu_java_awt_peer_gtk_la_LINK) $(am_lib_gnu_java_awt_peer_gtk_la_rpath) $(lib_gnu_java_awt_peer_gtk_la_LDFLAGS) $(lib_gnu_java_awt_peer_gtk_la_OBJECTS) $(lib_gnu_java_awt_peer_gtk_la_LIBADD) $(LIBS)
+ lib-gnu-java-awt-peer-qt.la: $(lib_gnu_java_awt_peer_qt_la_OBJECTS) $(lib_gnu_java_awt_peer_qt_la_DEPENDENCIES) 
+ 	$(lib_gnu_java_awt_peer_qt_la_LINK) $(am_lib_gnu_java_awt_peer_qt_la_rpath) $(lib_gnu_java_awt_peer_qt_la_LDFLAGS) $(lib_gnu_java_awt_peer_qt_la_OBJECTS) $(lib_gnu_java_awt_peer_qt_la_LIBADD) $(LIBS)
+ java/lang/$(am__dirstamp):
+ 	@$(mkdir_p) java/lang
+ 	@: > java/lang/$(am__dirstamp)
+ java/lang/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/lang/$(DEPDIR)
+ 	@: > java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Class.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Object.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ gnu/classpath/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/classpath
+ 	@: > gnu/classpath/$(am__dirstamp)
+ gnu/classpath/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/classpath/$(DEPDIR)
+ 	@: > gnu/classpath/$(DEPDIR)/$(am__dirstamp)
+ gnu/classpath/natSystemProperties.lo: gnu/classpath/$(am__dirstamp) \
+ 	gnu/classpath/$(DEPDIR)/$(am__dirstamp)
  gnu/gcj/$(am__dirstamp):
  	@$(mkdir_p) gnu/gcj
  	@: > gnu/gcj/$(am__dirstamp)
*************** gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp
*** 4200,4212 ****
  gnu/gcj/runtime/natFinalizerThread.lo:  \
  	gnu/gcj/runtime/$(am__dirstamp) \
  	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
- gnu/gcj/runtime/natNameFinder.lo: gnu/gcj/runtime/$(am__dirstamp) \
- 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
  gnu/gcj/runtime/natSharedLibLoader.lo:  \
  	gnu/gcj/runtime/$(am__dirstamp) \
  	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
- gnu/gcj/runtime/natStackTrace.lo: gnu/gcj/runtime/$(am__dirstamp) \
- 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
  gnu/gcj/runtime/natStringBuffer.lo: gnu/gcj/runtime/$(am__dirstamp) \
  	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
  gnu/gcj/util/$(am__dirstamp):
--- 6195,6203 ----
*************** java/io/natObjectInputStream.lo: java/io
*** 4278,4289 ****
  	java/io/$(DEPDIR)/$(am__dirstamp)
  java/io/natVMObjectStreamClass.lo: java/io/$(am__dirstamp) \
  	java/io/$(DEPDIR)/$(am__dirstamp)
- java/lang/$(am__dirstamp):
- 	@$(mkdir_p) java/lang
- 	@: > java/lang/$(am__dirstamp)
- java/lang/$(DEPDIR)/$(am__dirstamp):
- 	@$(mkdir_p) java/lang/$(DEPDIR)
- 	@: > java/lang/$(DEPDIR)/$(am__dirstamp)
  java/lang/natCharacter.lo: java/lang/$(am__dirstamp) \
  	java/lang/$(DEPDIR)/$(am__dirstamp)
  java/lang/natClass.lo: java/lang/$(am__dirstamp) \
--- 6269,6274 ----
*************** java/lang/natString.lo: java/lang/$(am__
*** 4306,4311 ****
--- 6291,6298 ----
  	java/lang/$(DEPDIR)/$(am__dirstamp)
  java/lang/natStringBuffer.lo: java/lang/$(am__dirstamp) \
  	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natStringBuilder.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
  java/lang/natSystem.lo: java/lang/$(am__dirstamp) \
  	java/lang/$(DEPDIR)/$(am__dirstamp)
  java/lang/natThread.lo: java/lang/$(am__dirstamp) \
*************** java/lang/natVMClassLoader.lo: java/lang
*** 4314,4319 ****
--- 6301,6308 ----
  	java/lang/$(DEPDIR)/$(am__dirstamp)
  java/lang/natVMSecurityManager.lo: java/lang/$(am__dirstamp) \
  	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natVMThrowable.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
  java/lang/ref/$(am__dirstamp):
  	@$(mkdir_p) java/lang/ref
  	@: > java/lang/ref/$(am__dirstamp)
*************** java/lang/reflect/natField.lo: java/lang
*** 4337,4351 ****
  	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
  java/lang/reflect/natMethod.lo: java/lang/reflect/$(am__dirstamp) \
  	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
- java/lang/reflect/natProxy.lo: java/lang/reflect/$(am__dirstamp) \
- 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
  java/net/$(am__dirstamp):
  	@$(mkdir_p) java/net
  	@: > java/net/$(am__dirstamp)
  java/net/$(DEPDIR)/$(am__dirstamp):
  	@$(mkdir_p) java/net/$(DEPDIR)
  	@: > java/net/$(DEPDIR)/$(am__dirstamp)
! java/net/natNetworkInterface.lo: java/net/$(am__dirstamp) \
  	java/net/$(DEPDIR)/$(am__dirstamp)
  java/net/natInetAddress.lo: java/net/$(am__dirstamp) \
  	java/net/$(DEPDIR)/$(am__dirstamp)
--- 6326,6338 ----
  	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
  java/lang/reflect/natMethod.lo: java/lang/reflect/$(am__dirstamp) \
  	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
  java/net/$(am__dirstamp):
  	@$(mkdir_p) java/net
  	@: > java/net/$(am__dirstamp)
  java/net/$(DEPDIR)/$(am__dirstamp):
  	@$(mkdir_p) java/net/$(DEPDIR)
  	@: > java/net/$(DEPDIR)/$(am__dirstamp)
! java/net/natVMNetworkInterface.lo: java/net/$(am__dirstamp) \
  	java/net/$(DEPDIR)/$(am__dirstamp)
  java/net/natInetAddress.lo: java/net/$(am__dirstamp) \
  	java/net/$(DEPDIR)/$(am__dirstamp)
*************** java/util/zip/natDeflater.lo: java/util/
*** 4401,4484 ****
  	java/util/zip/$(DEPDIR)/$(am__dirstamp)
  java/util/zip/natInflater.lo: java/util/zip/$(am__dirstamp) \
  	java/util/zip/$(DEPDIR)/$(am__dirstamp)
- java/lang/dtoa.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/k_rem_pio2.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_tan.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_acos.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/k_sin.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/strtod.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_asin.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/k_tan.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/w_acos.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_atan2.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/mprec.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/w_asin.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_exp.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_atan.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/w_atan2.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_fmod.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_ceil.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/w_exp.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_log.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_copysign.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/w_fmod.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_pow.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_cos.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/w_log.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_rem_pio2.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_fabs.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/w_pow.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_remainder.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_floor.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/w_remainder.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_scalb.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_rint.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/w_sqrt.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/e_sqrt.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_scalbn.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/sf_rint.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/k_cos.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/s_sin.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
- java/lang/sf_fabs.lo: java/lang/$(am__dirstamp) \
- 	java/lang/$(DEPDIR)/$(am__dirstamp)
  sysdep/$(am__dirstamp):
  	@$(mkdir_p) sysdep
  	@: > sysdep/$(am__dirstamp)
--- 6388,6393 ----
*************** sysdep/$(DEPDIR)/$(am__dirstamp):
*** 4487,4498 ****
  	@: > sysdep/$(DEPDIR)/$(am__dirstamp)
  sysdep/dwarf2-backtrace.lo: sysdep/$(am__dirstamp) \
  	sysdep/$(DEPDIR)/$(am__dirstamp)
! libgcj0_convenience.la: $(libgcj0_convenience_la_OBJECTS) $(libgcj0_convenience_la_DEPENDENCIES) 
! 	$(CXXLINK)  $(libgcj0_convenience_la_LDFLAGS) $(libgcj0_convenience_la_OBJECTS) $(libgcj0_convenience_la_LIBADD) $(LIBS)
  libgij.la: $(libgij_la_OBJECTS) $(libgij_la_DEPENDENCIES) 
  	$(CXXLINK) -rpath $(toolexeclibdir) $(libgij_la_LDFLAGS) $(libgij_la_OBJECTS) $(libgij_la_LIBADD) $(LIBS)
- libjawt.la: $(libjawt_la_OBJECTS) $(libjawt_la_DEPENDENCIES) 
- 	$(libjawt_la_LINK) $(am_libjawt_la_rpath) $(libjawt_la_LDFLAGS) $(libjawt_la_OBJECTS) $(libjawt_la_LIBADD) $(LIBS)
  install-binPROGRAMS: $(bin_PROGRAMS)
  	@$(NORMAL_INSTALL)
  	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
--- 6396,6416 ----
  	@: > sysdep/$(DEPDIR)/$(am__dirstamp)
  sysdep/dwarf2-backtrace.lo: sysdep/$(am__dirstamp) \
  	sysdep/$(DEPDIR)/$(am__dirstamp)
! libgcj.la: $(libgcj_la_OBJECTS) $(libgcj_la_DEPENDENCIES) 
! 	$(libgcj_la_LINK) -rpath $(toolexeclibdir) $(libgcj_la_LDFLAGS) $(libgcj_la_OBJECTS) $(libgcj_la_LIBADD) $(LIBS)
! classpath/native/jawt/$(am__dirstamp):
! 	@$(mkdir_p) classpath/native/jawt
! 	@: > classpath/native/jawt/$(am__dirstamp)
! classpath/native/jawt/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) classpath/native/jawt/$(DEPDIR)
! 	@: > classpath/native/jawt/$(DEPDIR)/$(am__dirstamp)
! classpath/native/jawt/libgcjawt_la-jawt.lo:  \
! 	classpath/native/jawt/$(am__dirstamp) \
! 	classpath/native/jawt/$(DEPDIR)/$(am__dirstamp)
! libgcjawt.la: $(libgcjawt_la_OBJECTS) $(libgcjawt_la_DEPENDENCIES) 
! 	$(libgcjawt_la_LINK) $(am_libgcjawt_la_rpath) $(libgcjawt_la_LDFLAGS) $(libgcjawt_la_OBJECTS) $(libgcjawt_la_LIBADD) $(LIBS)
  libgij.la: $(libgij_la_OBJECTS) $(libgij_la_DEPENDENCIES) 
  	$(CXXLINK) -rpath $(toolexeclibdir) $(libgij_la_LDFLAGS) $(libgij_la_OBJECTS) $(libgij_la_LIBADD) $(LIBS)
  install-binPROGRAMS: $(bin_PROGRAMS)
  	@$(NORMAL_INSTALL)
  	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
*************** uninstall-binSCRIPTS:
*** 4585,4590 ****
--- 6503,6512 ----
  
  mostlyclean-compile:
  	-rm -f *.$(OBJEXT)
+ 	-rm -f classpath/native/jawt/libgcjawt_la-jawt.$(OBJEXT)
+ 	-rm -f classpath/native/jawt/libgcjawt_la-jawt.lo
+ 	-rm -f gnu/classpath/natSystemProperties.$(OBJEXT)
+ 	-rm -f gnu/classpath/natSystemProperties.lo
  	-rm -f gnu/gcj/convert/JIS0208_to_Unicode.$(OBJEXT)
  	-rm -f gnu/gcj/convert/JIS0208_to_Unicode.lo
  	-rm -f gnu/gcj/convert/JIS0212_to_Unicode.$(OBJEXT)
*************** mostlyclean-compile:
*** 4611,4622 ****
  	-rm -f gnu/gcj/natCore.lo
  	-rm -f gnu/gcj/runtime/natFinalizerThread.$(OBJEXT)
  	-rm -f gnu/gcj/runtime/natFinalizerThread.lo
- 	-rm -f gnu/gcj/runtime/natNameFinder.$(OBJEXT)
- 	-rm -f gnu/gcj/runtime/natNameFinder.lo
  	-rm -f gnu/gcj/runtime/natSharedLibLoader.$(OBJEXT)
  	-rm -f gnu/gcj/runtime/natSharedLibLoader.lo
- 	-rm -f gnu/gcj/runtime/natStackTrace.$(OBJEXT)
- 	-rm -f gnu/gcj/runtime/natStackTrace.lo
  	-rm -f gnu/gcj/runtime/natStringBuffer.$(OBJEXT)
  	-rm -f gnu/gcj/runtime/natStringBuffer.lo
  	-rm -f gnu/gcj/tools/gcj_dbtool/Main.$(OBJEXT)
--- 6533,6540 ----
*************** mostlyclean-compile:
*** 4685,4724 ****
  	-rm -f java/io/natObjectInputStream.lo
  	-rm -f java/io/natVMObjectStreamClass.$(OBJEXT)
  	-rm -f java/io/natVMObjectStreamClass.lo
! 	-rm -f java/lang/dtoa.$(OBJEXT)
! 	-rm -f java/lang/dtoa.lo
! 	-rm -f java/lang/e_acos.$(OBJEXT)
! 	-rm -f java/lang/e_acos.lo
! 	-rm -f java/lang/e_asin.$(OBJEXT)
! 	-rm -f java/lang/e_asin.lo
! 	-rm -f java/lang/e_atan2.$(OBJEXT)
! 	-rm -f java/lang/e_atan2.lo
! 	-rm -f java/lang/e_exp.$(OBJEXT)
! 	-rm -f java/lang/e_exp.lo
! 	-rm -f java/lang/e_fmod.$(OBJEXT)
! 	-rm -f java/lang/e_fmod.lo
! 	-rm -f java/lang/e_log.$(OBJEXT)
! 	-rm -f java/lang/e_log.lo
! 	-rm -f java/lang/e_pow.$(OBJEXT)
! 	-rm -f java/lang/e_pow.lo
! 	-rm -f java/lang/e_rem_pio2.$(OBJEXT)
! 	-rm -f java/lang/e_rem_pio2.lo
! 	-rm -f java/lang/e_remainder.$(OBJEXT)
! 	-rm -f java/lang/e_remainder.lo
! 	-rm -f java/lang/e_scalb.$(OBJEXT)
! 	-rm -f java/lang/e_scalb.lo
! 	-rm -f java/lang/e_sqrt.$(OBJEXT)
! 	-rm -f java/lang/e_sqrt.lo
! 	-rm -f java/lang/k_cos.$(OBJEXT)
! 	-rm -f java/lang/k_cos.lo
! 	-rm -f java/lang/k_rem_pio2.$(OBJEXT)
! 	-rm -f java/lang/k_rem_pio2.lo
! 	-rm -f java/lang/k_sin.$(OBJEXT)
! 	-rm -f java/lang/k_sin.lo
! 	-rm -f java/lang/k_tan.$(OBJEXT)
! 	-rm -f java/lang/k_tan.lo
! 	-rm -f java/lang/mprec.$(OBJEXT)
! 	-rm -f java/lang/mprec.lo
  	-rm -f java/lang/natCharacter.$(OBJEXT)
  	-rm -f java/lang/natCharacter.lo
  	-rm -f java/lang/natClass.$(OBJEXT)
--- 6603,6612 ----
  	-rm -f java/io/natObjectInputStream.lo
  	-rm -f java/io/natVMObjectStreamClass.$(OBJEXT)
  	-rm -f java/io/natVMObjectStreamClass.lo
! 	-rm -f java/lang/Class.$(OBJEXT)
! 	-rm -f java/lang/Class.lo
! 	-rm -f java/lang/Object.$(OBJEXT)
! 	-rm -f java/lang/Object.lo
  	-rm -f java/lang/natCharacter.$(OBJEXT)
  	-rm -f java/lang/natCharacter.lo
  	-rm -f java/lang/natClass.$(OBJEXT)
*************** mostlyclean-compile:
*** 4741,4746 ****
--- 6629,6636 ----
  	-rm -f java/lang/natString.lo
  	-rm -f java/lang/natStringBuffer.$(OBJEXT)
  	-rm -f java/lang/natStringBuffer.lo
+ 	-rm -f java/lang/natStringBuilder.$(OBJEXT)
+ 	-rm -f java/lang/natStringBuilder.lo
  	-rm -f java/lang/natSystem.$(OBJEXT)
  	-rm -f java/lang/natSystem.lo
  	-rm -f java/lang/natThread.$(OBJEXT)
*************** mostlyclean-compile:
*** 4749,4754 ****
--- 6639,6646 ----
  	-rm -f java/lang/natVMClassLoader.lo
  	-rm -f java/lang/natVMSecurityManager.$(OBJEXT)
  	-rm -f java/lang/natVMSecurityManager.lo
+ 	-rm -f java/lang/natVMThrowable.$(OBJEXT)
+ 	-rm -f java/lang/natVMThrowable.lo
  	-rm -f java/lang/ref/natReference.$(OBJEXT)
  	-rm -f java/lang/ref/natReference.lo
  	-rm -f java/lang/reflect/natArray.$(OBJEXT)
*************** mostlyclean-compile:
*** 4759,4814 ****
  	-rm -f java/lang/reflect/natField.lo
  	-rm -f java/lang/reflect/natMethod.$(OBJEXT)
  	-rm -f java/lang/reflect/natMethod.lo
- 	-rm -f java/lang/reflect/natProxy.$(OBJEXT)
- 	-rm -f java/lang/reflect/natProxy.lo
- 	-rm -f java/lang/s_atan.$(OBJEXT)
- 	-rm -f java/lang/s_atan.lo
- 	-rm -f java/lang/s_ceil.$(OBJEXT)
- 	-rm -f java/lang/s_ceil.lo
- 	-rm -f java/lang/s_copysign.$(OBJEXT)
- 	-rm -f java/lang/s_copysign.lo
- 	-rm -f java/lang/s_cos.$(OBJEXT)
- 	-rm -f java/lang/s_cos.lo
- 	-rm -f java/lang/s_fabs.$(OBJEXT)
- 	-rm -f java/lang/s_fabs.lo
- 	-rm -f java/lang/s_floor.$(OBJEXT)
- 	-rm -f java/lang/s_floor.lo
- 	-rm -f java/lang/s_rint.$(OBJEXT)
- 	-rm -f java/lang/s_rint.lo
- 	-rm -f java/lang/s_scalbn.$(OBJEXT)
- 	-rm -f java/lang/s_scalbn.lo
- 	-rm -f java/lang/s_sin.$(OBJEXT)
- 	-rm -f java/lang/s_sin.lo
- 	-rm -f java/lang/s_tan.$(OBJEXT)
- 	-rm -f java/lang/s_tan.lo
- 	-rm -f java/lang/sf_fabs.$(OBJEXT)
- 	-rm -f java/lang/sf_fabs.lo
- 	-rm -f java/lang/sf_rint.$(OBJEXT)
- 	-rm -f java/lang/sf_rint.lo
- 	-rm -f java/lang/strtod.$(OBJEXT)
- 	-rm -f java/lang/strtod.lo
- 	-rm -f java/lang/w_acos.$(OBJEXT)
- 	-rm -f java/lang/w_acos.lo
- 	-rm -f java/lang/w_asin.$(OBJEXT)
- 	-rm -f java/lang/w_asin.lo
- 	-rm -f java/lang/w_atan2.$(OBJEXT)
- 	-rm -f java/lang/w_atan2.lo
- 	-rm -f java/lang/w_exp.$(OBJEXT)
- 	-rm -f java/lang/w_exp.lo
- 	-rm -f java/lang/w_fmod.$(OBJEXT)
- 	-rm -f java/lang/w_fmod.lo
- 	-rm -f java/lang/w_log.$(OBJEXT)
- 	-rm -f java/lang/w_log.lo
- 	-rm -f java/lang/w_pow.$(OBJEXT)
- 	-rm -f java/lang/w_pow.lo
- 	-rm -f java/lang/w_remainder.$(OBJEXT)
- 	-rm -f java/lang/w_remainder.lo
- 	-rm -f java/lang/w_sqrt.$(OBJEXT)
- 	-rm -f java/lang/w_sqrt.lo
  	-rm -f java/net/natInetAddress.$(OBJEXT)
  	-rm -f java/net/natInetAddress.lo
! 	-rm -f java/net/natNetworkInterface.$(OBJEXT)
! 	-rm -f java/net/natNetworkInterface.lo
  	-rm -f java/nio/channels/natChannels.$(OBJEXT)
  	-rm -f java/nio/channels/natChannels.lo
  	-rm -f java/nio/natDirectByteBufferImpl.$(OBJEXT)
--- 6651,6660 ----
  	-rm -f java/lang/reflect/natField.lo
  	-rm -f java/lang/reflect/natMethod.$(OBJEXT)
  	-rm -f java/lang/reflect/natMethod.lo
  	-rm -f java/net/natInetAddress.$(OBJEXT)
  	-rm -f java/net/natInetAddress.lo
! 	-rm -f java/net/natVMNetworkInterface.$(OBJEXT)
! 	-rm -f java/net/natVMNetworkInterface.lo
  	-rm -f java/nio/channels/natChannels.$(OBJEXT)
  	-rm -f java/nio/channels/natChannels.lo
  	-rm -f java/nio/natDirectByteBufferImpl.$(OBJEXT)
*************** mostlyclean-compile:
*** 4825,4910 ****
  	-rm -f java/util/zip/natDeflater.lo
  	-rm -f java/util/zip/natInflater.$(OBJEXT)
  	-rm -f java/util/zip/natInflater.lo
- 	-rm -f jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.$(OBJEXT)
- 	-rm -f jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gthread-jni.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gthread-jni.lo
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.$(OBJEXT)
- 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.lo
  	-rm -f sysdep/dwarf2-backtrace.$(OBJEXT)
  	-rm -f sysdep/dwarf2-backtrace.lo
  
--- 6671,6676 ----
*************** distclean-compile:
*** 4918,4933 ****
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gij.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interpret.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jni.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjawt_la-jawt.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/no-threads.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nogc.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix-threads.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prims.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verify.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32-threads.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/$(DEPDIR)/natCore.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/JIS0208_to_Unicode.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/JIS0212_to_Unicode.Plo@am__quote@
--- 6684,6701 ----
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gij.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interpret.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jni.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/no-threads.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nogc.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix-threads.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prims.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stacktrace.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verify.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32-threads.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@classpath/native/jawt/$(DEPDIR)/libgcjawt_la-jawt.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@gnu/classpath/$(DEPDIR)/natSystemProperties.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/$(DEPDIR)/natCore.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/JIS0208_to_Unicode.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/JIS0212_to_Unicode.Plo@am__quote@
*************** distclean-compile:
*** 4942,4950 ****
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/io/$(DEPDIR)/natSimpleSHSStream.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/io/$(DEPDIR)/shs.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/natFinalizerThread.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/natNameFinder.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/natSharedLibLoader.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/natStackTrace.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/natStringBuffer.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/tools/gcj_dbtool/$(DEPDIR)/Main.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/tools/gcj_dbtool/$(DEPDIR)/natMain.Po@am__quote@
--- 6710,6716 ----
*************** distclean-compile:
*** 4980,5002 ****
  @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/natFile.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/natObjectInputStream.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/natVMObjectStreamClass.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/dtoa.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_acos.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_asin.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_atan2.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_exp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_fmod.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_log.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_pow.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_rem_pio2.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_remainder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_scalb.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/e_sqrt.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/k_cos.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/k_rem_pio2.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/k_sin.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/k_tan.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/mprec.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natCharacter.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natClass.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natClassLoader.Plo@am__quote@
--- 6746,6753 ----
  @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/natFile.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/natObjectInputStream.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/natVMObjectStreamClass.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Class.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Object.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natCharacter.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natClass.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natClassLoader.Plo@am__quote@
*************** distclean-compile:
*** 5008,5047 ****
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natRuntime.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natString.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natStringBuffer.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natSystem.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natThread.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMClassLoader.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMSecurityManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_atan.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_ceil.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_copysign.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_cos.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_fabs.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_floor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_rint.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_scalbn.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_sin.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/s_tan.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/sf_fabs.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/sf_rint.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/strtod.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/w_acos.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/w_asin.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/w_atan2.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/w_exp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/w_fmod.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/w_log.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/w_pow.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/w_remainder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/w_sqrt.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/ref/$(DEPDIR)/natReference.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natArray.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natConstructor.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natField.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natMethod.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natProxy.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/natInetAddress.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/natNetworkInterface.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/natDirectByteBufferImpl.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/natChannels.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/natCollator.Plo@am__quote@
--- 6759,6777 ----
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natRuntime.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natString.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natStringBuffer.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natStringBuilder.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natSystem.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natThread.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMClassLoader.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMSecurityManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMThrowable.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/ref/$(DEPDIR)/natReference.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natArray.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natConstructor.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natField.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natMethod.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/natInetAddress.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/natVMNetworkInterface.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/natDirectByteBufferImpl.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/natChannels.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/natCollator.Plo@am__quote@
*************** distclean-compile:
*** 5050,5095 ****
  @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/natLogger.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/natDeflater.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/natInflater.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/classpath/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-native_state.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gthread-jni.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@sysdep/$(DEPDIR)/dwarf2-backtrace.Plo@am__quote@
  
  .c.o:
--- 6780,6785 ----
*************** distclean-compile:
*** 5116,5407 ****
  @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
  @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
  
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkRobotPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkButtonPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCanvasPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkChoicePeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkClipboard.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkComponentPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkEvents.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkFramePeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkGenericPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkImagePainter.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkLabelPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkListPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkMenuPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPanelPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkToolkit.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GtkWindowPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gthread-jni.lo: jni/gtk-peer/gthread-jni.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gthread-jni.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gthread-jni.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gthread-jni.lo `test -f 'jni/gtk-peer/gthread-jni.c' || echo '$(srcdir)/'`jni/gtk-peer/gthread-jni.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gthread-jni.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gthread-jni.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gthread-jni.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gthread-jni.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gthread-jni.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gthread-jni.lo `test -f 'jni/gtk-peer/gthread-jni.c' || echo '$(srcdir)/'`jni/gtk-peer/gthread-jni.c
! 
! jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.lo: jni/gtk-peer/gtk_jawt.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.lo `test -f 'jni/gtk-peer/gtk_jawt.c' || echo '$(srcdir)/'`jni/gtk-peer/gtk_jawt.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gtk_jawt.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gtk_jawt.lo `test -f 'jni/gtk-peer/gtk_jawt.c' || echo '$(srcdir)/'`jni/gtk-peer/gtk_jawt.c
! 
! jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.lo: jni/classpath/native_state.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.lo -MD -MP -MF "jni/classpath/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-native_state.Tpo" -c -o jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.lo `test -f 'jni/classpath/native_state.c' || echo '$(srcdir)/'`jni/classpath/native_state.c; \
! @am__fastdepCC_TRUE@	then mv -f "jni/classpath/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-native_state.Tpo" "jni/classpath/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-native_state.Plo"; else rm -f "jni/classpath/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-native_state.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/classpath/native_state.c' object='jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.lo `test -f 'jni/classpath/native_state.c' || echo '$(srcdir)/'`jni/classpath/native_state.c
! 
! libjawt_la-jawt.lo: jawt.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjawt_la_CFLAGS) $(CFLAGS) -MT libjawt_la-jawt.lo -MD -MP -MF "$(DEPDIR)/libjawt_la-jawt.Tpo" -c -o libjawt_la-jawt.lo `test -f 'jawt.c' || echo '$(srcdir)/'`jawt.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libjawt_la-jawt.Tpo" "$(DEPDIR)/libjawt_la-jawt.Plo"; else rm -f "$(DEPDIR)/libjawt_la-jawt.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jawt.c' object='libjawt_la-jawt.lo' libtool=yes @AMDEPBACKSLASH@
  @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjawt_la_CFLAGS) $(CFLAGS) -c -o libjawt_la-jawt.lo `test -f 'jawt.c' || echo '$(srcdir)/'`jawt.c
  
  .cc.o:
  @am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \
--- 6806,6817 ----
  @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
  @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
  
! classpath/native/jawt/libgcjawt_la-jawt.lo: classpath/native/jawt/jawt.c
! @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcjawt_la_CFLAGS) $(CFLAGS) -MT classpath/native/jawt/libgcjawt_la-jawt.lo -MD -MP -MF "classpath/native/jawt/$(DEPDIR)/libgcjawt_la-jawt.Tpo" -c -o classpath/native/jawt/libgcjawt_la-jawt.lo `test -f 'classpath/native/jawt/jawt.c' || echo '$(srcdir)/'`classpath/native/jawt/jawt.c; \
! @am__fastdepCC_TRUE@	then mv -f "classpath/native/jawt/$(DEPDIR)/libgcjawt_la-jawt.Tpo" "classpath/native/jawt/$(DEPDIR)/libgcjawt_la-jawt.Plo"; else rm -f "classpath/native/jawt/$(DEPDIR)/libgcjawt_la-jawt.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='classpath/native/jawt/jawt.c' object='classpath/native/jawt/libgcjawt_la-jawt.lo' libtool=yes @AMDEPBACKSLASH@
  @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcjawt_la_CFLAGS) $(CFLAGS) -c -o classpath/native/jawt/libgcjawt_la-jawt.lo `test -f 'classpath/native/jawt/jawt.c' || echo '$(srcdir)/'`classpath/native/jawt/jawt.c
  
  .cc.o:
  @am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \
*************** mostlyclean-libtool:
*** 5596,5601 ****
--- 7006,7013 ----
  
  clean-libtool:
  	-rm -rf .libs _libs
+ 	-rm -rf classpath/native/jawt/.libs classpath/native/jawt/_libs
+ 	-rm -rf gnu/classpath/.libs gnu/classpath/_libs
  	-rm -rf gnu/gcj/.libs gnu/gcj/_libs
  	-rm -rf gnu/gcj/convert/.libs gnu/gcj/convert/_libs
  	-rm -rf gnu/gcj/io/.libs gnu/gcj/io/_libs
*************** clean-libtool:
*** 5618,5625 ****
  	-rm -rf java/util/.libs java/util/_libs
  	-rm -rf java/util/logging/.libs java/util/logging/_libs
  	-rm -rf java/util/zip/.libs java/util/zip/_libs
- 	-rm -rf jni/classpath/.libs jni/classpath/_libs
- 	-rm -rf jni/gtk-peer/.libs jni/gtk-peer/_libs
  	-rm -rf sysdep/.libs sysdep/_libs
  
  distclean-libtool:
--- 7030,7035 ----
*************** distclean-tags:
*** 5817,5823 ****
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
! 	$(mkdir_p) $(distdir)/. $(distdir)/.. $(distdir)/../config $(distdir)/gnu/awt $(distdir)/gnu/awt/j2d $(distdir)/gnu/awt/xlib $(distdir)/gnu/classpath $(distdir)/gnu/gcj $(distdir)/gnu/gcj/convert $(distdir)/gnu/gcj/io $(distdir)/gnu/gcj/runtime $(distdir)/gnu/gcj/tools/gcj_dbtool $(distdir)/gnu/gcj/util $(distdir)/gnu/gcj/xlib $(distdir)/gnu/java/awt $(distdir)/gnu/java/awt/color $(distdir)/gnu/java/awt/image $(distdir)/gnu/java/awt/peer $(distdir)/gnu/java/awt/peer/gtk $(distdir)/gnu/java/beans $(distdir)/gnu/java/beans/decoder $(distdir)/gnu/java/beans/editors $(distdir)/gnu/java/io $(distdir)/gnu/java/lang $(distdir)/gnu/java/lang/reflect $(distdir)/gnu/java/locale $(distdir)/gnu/java/math $(distdir)/gnu/java/net $(distdir)/gnu/java/net/protocol/core $(distdir)/gnu/java/net/protocol/file $(distdir)/gnu/java/net/protocol/ftp $(distdir)/gnu/java/net/protocol/gcjlib $(distdir)/gnu/java/net/protocol/http $(distdir)/gnu/java/net/protocol/http/event $(distdir)/gnu/java/net/protocol/https $(distdir)/gnu/java/net/protocol/jar $(distdir)/gnu/java/nio $(distdir)/gnu/java/nio/channels $(distdir)/gnu/java/nio/charset $(distdir)/gnu/java/rmi $(distdir)/gnu/java/rmi/dgc $(distdir)/gnu/java/rmi/registry $(distdir)/gnu/java/rmi/rmic $(distdir)/gnu/java/rmi/server $(distdir)/gnu/java/security $(distdir)/gnu/java/security/action $(distdir)/gnu/java/security/ber $(distdir)/gnu/java/security/der $(distdir)/gnu/java/security/pkcs $(distdir)/gnu/java/security/provider $(distdir)/gnu/java/security/util $(distdir)/gnu/java/security/x509 $(distdir)/gnu/java/security/x509/ext $(distdir)/gnu/java/text $(distdir)/gnu/java/util $(distdir)/gnu/java/util/prefs $(distdir)/gnu/regexp $(distdir)/gnu/xml/aelfred2 $(distdir)/gnu/xml/dom $(distdir)/gnu/xml/dom/ls $(distdir)/gnu/xml/pipeline $(distdir)/gnu/xml/transform $(distdir)/gnu/xml/util $(distdir)/gnu/xml/xpath $(distdir)/java/applet $(distdir)/java/awt $(distdir)/java/awt/color $(distdir)/java/awt/datatransfer $(distdir)/java/awt/dnd $(distdir)/java/awt/dnd/peer $(distdir)/java/awt/event $(distdir)/java/awt/font $(distdir)/java/awt/geom $(distdir)/java/awt/im $(distdir)/java/awt/im/spi $(distdir)/java/awt/image $(distdir)/java/awt/image/renderable $(distdir)/java/awt/peer $(distdir)/java/awt/print $(distdir)/java/beans $(distdir)/java/beans/beancontext $(distdir)/java/io $(distdir)/java/lang $(distdir)/java/lang/ref $(distdir)/java/lang/reflect $(distdir)/java/math $(distdir)/java/net $(distdir)/java/nio $(distdir)/java/nio/channels $(distdir)/java/nio/channels/spi $(distdir)/java/nio/charset $(distdir)/java/nio/charset/spi $(distdir)/java/rmi $(distdir)/java/rmi/activation $(distdir)/java/rmi/dgc $(distdir)/java/rmi/registry $(distdir)/java/rmi/server $(distdir)/java/security $(distdir)/java/security/acl $(distdir)/java/security/cert $(distdir)/java/security/interfaces $(distdir)/java/security/spec $(distdir)/java/sql $(distdir)/java/text $(distdir)/java/util $(distdir)/java/util/jar $(distdir)/java/util/logging $(distdir)/java/util/prefs $(distdir)/java/util/regex $(distdir)/java/util/zip $(distdir)/javax/accessibility $(distdir)/javax/crypto $(distdir)/javax/crypto/interfaces $(distdir)/javax/crypto/spec $(distdir)/javax/imageio $(distdir)/javax/imageio/event $(distdir)/javax/imageio/metadata $(distdir)/javax/imageio/spi $(distdir)/javax/imageio/stream $(distdir)/javax/naming $(distdir)/javax/naming/directory $(distdir)/javax/naming/event $(distdir)/javax/naming/ldap $(distdir)/javax/naming/spi $(distdir)/javax/net $(distdir)/javax/net/ssl $(distdir)/javax/print $(distdir)/javax/print/attribute $(distdir)/javax/print/attribute/standard $(distdir)/javax/print/event $(distdir)/javax/security/auth $(distdir)/javax/security/auth/callback $(distdir)/javax/security/auth/login $(distdir)/javax/security/auth/spi $(distdir)/javax/security/auth/x500 $(distdir)/javax/security/cert $(distdir)/javax/security/sasl $(distdir)/javax/sql $(distdir)/javax/swing $(distdir)/javax/swing/border $(distdir)/javax/swing/colorchooser $(distdir)/javax/swing/event $(distdir)/javax/swing/filechooser $(distdir)/javax/swing/plaf $(distdir)/javax/swing/plaf/basic $(distdir)/javax/swing/plaf/metal $(distdir)/javax/swing/table $(distdir)/javax/swing/text $(distdir)/javax/swing/text/html $(distdir)/javax/swing/text/html/parser $(distdir)/javax/swing/tree $(distdir)/javax/swing/undo $(distdir)/javax/transaction $(distdir)/javax/transaction/xa $(distdir)/javax/xml $(distdir)/javax/xml/datatype $(distdir)/javax/xml/namespace $(distdir)/javax/xml/parsers $(distdir)/javax/xml/transform $(distdir)/javax/xml/transform/dom $(distdir)/javax/xml/transform/sax $(distdir)/javax/xml/transform/stream $(distdir)/javax/xml/validation $(distdir)/javax/xml/xpath $(distdir)/org/ietf/jgss
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
--- 7227,7233 ----
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
! 	$(mkdir_p) $(distdir)/. $(distdir)/.. $(distdir)/../config
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
*************** clean-generic:
*** 5985,5990 ****
--- 7395,7404 ----
  
  distclean-generic:
  	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 	-rm -f classpath/native/jawt/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f classpath/native/jawt/$(am__dirstamp)
+ 	-rm -f gnu/classpath/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f gnu/classpath/$(am__dirstamp)
  	-rm -f gnu/gcj/$(DEPDIR)/$(am__dirstamp)
  	-rm -f gnu/gcj/$(am__dirstamp)
  	-rm -f gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
*************** distclean-generic:
*** 6031,6040 ****
  	-rm -f java/util/logging/$(am__dirstamp)
  	-rm -f java/util/zip/$(DEPDIR)/$(am__dirstamp)
  	-rm -f java/util/zip/$(am__dirstamp)
- 	-rm -f jni/classpath/$(DEPDIR)/$(am__dirstamp)
- 	-rm -f jni/classpath/$(am__dirstamp)
- 	-rm -f jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
- 	-rm -f jni/gtk-peer/$(am__dirstamp)
  	-rm -f sysdep/$(DEPDIR)/$(am__dirstamp)
  	-rm -f sysdep/$(am__dirstamp)
  	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
--- 7445,7450 ----
*************** maintainer-clean-generic:
*** 6044,6056 ****
  	@echo "it deletes files that may require special tools to rebuild."
  clean: clean-recursive
  
! clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \
! 	clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
! 	clean-toolexeclibLTLIBRARIES mostlyclean-am
  
  distclean: distclean-recursive
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
! 	-rm -rf ./$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/zip/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) sysdep/$(DEPDIR)
  	-rm -f Makefile
  distclean-am: clean-am distclean-compile distclean-generic \
  	distclean-libtool distclean-local distclean-tags
--- 7454,7466 ----
  	@echo "it deletes files that may require special tools to rebuild."
  clean: clean-recursive
  
! clean-am: clean-binPROGRAMS clean-generic clean-libtool \
! 	clean-noinstPROGRAMS clean-toolexeclibLTLIBRARIES \
! 	mostlyclean-am
  
  distclean: distclean-recursive
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
! 	-rm -rf ./$(DEPDIR) classpath/native/jawt/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/zip/$(DEPDIR) sysdep/$(DEPDIR)
  	-rm -f Makefile
  distclean-am: clean-am distclean-compile distclean-generic \
  	distclean-libtool distclean-local distclean-tags
*************** installcheck-am:
*** 6081,6087 ****
  maintainer-clean: maintainer-clean-recursive
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -rf $(top_srcdir)/autom4te.cache
! 	-rm -rf ./$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/zip/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) sysdep/$(DEPDIR)
  	-rm -f Makefile
  maintainer-clean-am: distclean-am maintainer-clean-generic
  
--- 7491,7497 ----
  maintainer-clean: maintainer-clean-recursive
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -rf $(top_srcdir)/autom4te.cache
! 	-rm -rf ./$(DEPDIR) classpath/native/jawt/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/zip/$(DEPDIR) sysdep/$(DEPDIR)
  	-rm -f Makefile
  maintainer-clean-am: distclean-am maintainer-clean-generic
  
*************** uninstall-info: uninstall-info-recursive
*** 6107,6309 ****
  
  .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
  	check-am clean clean-binPROGRAMS clean-generic clean-libtool \
! 	clean-local clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
! 	clean-recursive clean-toolexeclibLTLIBRARIES ctags \
! 	ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
! 	dist-tarZ dist-zip distcheck distclean distclean-compile \
! 	distclean-generic distclean-libtool distclean-local \
! 	distclean-recursive distclean-tags distcleancheck distdir \
! 	distuninstallcheck dvi dvi-am html html-am info info-am \
! 	install install-am install-binPROGRAMS install-binSCRIPTS \
! 	install-data install-data-am install-data-local \
! 	install-dbexecDATA install-exec install-exec-am install-info \
! 	install-info-am install-jarDATA install-man \
! 	install-pkgconfigDATA install-strip \
! 	install-toolexeclibLTLIBRARIES install-toolexecmainlibDATA \
! 	installcheck installcheck-am installdirs installdirs-am \
! 	maintainer-clean maintainer-clean-generic \
! 	maintainer-clean-recursive mostlyclean mostlyclean-compile \
! 	mostlyclean-generic mostlyclean-libtool mostlyclean-local \
! 	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
! 	uninstall uninstall-am uninstall-binPROGRAMS \
! 	uninstall-binSCRIPTS uninstall-dbexecDATA uninstall-info-am \
! 	uninstall-jarDATA uninstall-pkgconfigDATA \
! 	uninstall-toolexeclibLTLIBRARIES uninstall-toolexecmainlibDATA
! 
! 
! # Build dependencies between java, class and lo files.  They are included
! # below, together with automatically-generated dependencies between Java
! # files.
! #
! # Dependencies from Java to .class files
! # --------------------------------------
! # Each directory's filelist file depends on the corresponding Java source files.
! # The stamp file depends on the filelist (using a `Static Pattern Rule').
! # Each class file depends on the its directory's .stamp file.  This reflects
! # the fact that 1) all classfiles are compiled in one go when the .stamp file
! # is built and 2) anything which depends on a particular .class file must wait
! # until its directory is processed and the .stamp file is created.
! #
! # Dependencies from Java to .lo files
! # -----------------------------------
! # As above, each directory's filelist file depends on the corresponding Java
! # source files, and the stamp file depends on the filelist.  For native
! # compilation, the lo file depends on the stamp file (also using a `Static
! # Pattern Rule').  So, when one Java file changes, the filelist file is
! # updated, the stamp file rule builds the .class files, and the .lo file rule
! # recompiles to native code.
! Makefile.deps: $(srcdir)/Makefile.in
! 	@: $(call write_entries_to_file,$(all_java_source_files),files.tmplist)
! 	echo 's,^\(.*\)/\([^/]*\)\.java$$,\1.list: &\' > tmpsed
! 	echo '\1/\2.class: \1.stamp,' >> tmpsed
! 	sed -ftmpsed files.tmplist > Makefile.deps
! 	rm files.tmplist tmpsed
  
- # Include automatically generated dependencies between Java source files.
- -include Makefile.deps $(all_java_deps_files)
  
  $(db_name): gcj-dbtool$(EXEEXT)
  	@rm -f $(db_name)
  	./gcj-dbtool -n $(db_name) || touch $(db_name)
  
- jniinclude/gnu_java_awt_peer_gtk_GdkGraphics.h: gnu/java/awt/peer/gtk/GdkGraphics.java
- jniinclude/gnu_java_awt_peer_gtk_GdkGraphics2D.h: gnu/java/awt/peer/gtk/GdkGraphics2D.java
- jniinclude/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h: gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
- jniinclude/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
- jniinclude/gnu_java_awt_peer_gtk_GtkButtonPeer.h: gnu/java/awt/peer/gtk/GtkButtonPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkCanvasPeer.h: gnu/java/awt/peer/gtk/GtkCanvasPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h: gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h: gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h: gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkChoicePeer.h: gnu/java/awt/peer/gtk/GtkChoicePeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkClipboard.h: gnu/java/awt/peer/gtk/GtkClipboard.java
- jniinclude/gnu_java_awt_peer_gtk_GtkComponentPeer.h: gnu/java/awt/peer/gtk/GtkComponentPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkContainerPeer.h: gnu/java/awt/peer/gtk/GtkContainerPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkDialogPeer.h: gnu/java/awt/peer/gtk/GtkDialogPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h: gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h: gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkFontPeer.h: gnu/java/awt/peer/gtk/GtkFontPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkFramePeer.h: gnu/java/awt/peer/gtk/GtkFramePeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkGenericPeer.h: gnu/java/awt/peer/gtk/GtkGenericPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkImage.h: gnu/java/awt/peer/gtk/GtkImage.java
- jniinclude/gnu_java_awt_peer_gtk_GtkImagePainter.h: gnu/java/awt/peer/gtk/GtkImagePainter.java
- jniinclude/gnu_java_awt_peer_gtk_GtkLabelPeer.h: gnu/java/awt/peer/gtk/GtkLabelPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkListPeer.h: gnu/java/awt/peer/gtk/GtkListPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h: gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h: gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h: gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkMenuPeer.h: gnu/java/awt/peer/gtk/GtkMenuPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkOffScreenImage.h: gnu/java/awt/peer/gtk/GtkOffScreenImage.java
- jniinclude/gnu_java_awt_peer_gtk_GtkPanelPeer.h: gnu/java/awt/peer/gtk/GtkPanelPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h: gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h: gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h: gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkTextComponentPeer.h: gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GtkToolkit.h: gnu/java/awt/peer/gtk/GtkToolkit.java
- jniinclude/gnu_java_awt_peer_gtk_GtkWindowPeer.h: gnu/java/awt/peer/gtk/GtkWindowPeer.java
- jniinclude/gnu_java_awt_peer_gtk_GThreadMutex.h: gnu/java/awt/peer/gtk/GThreadMutex.java
- jniinclude/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h: gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
- jniinclude/gnu_java_awt_peer_gtk_GdkTextLayout.h: gnu/java/awt/peer/gtk/GdkTextLayout.java
- jniinclude/gnu_java_awt_peer_gtk_GdkFontPeer.h: gnu/java/awt/peer/gtk/GdkFontPeer.java
- 
- $(gtk_jni_headers): %.h:
- 	@input=`echo $@ | sed -e 's,jniinclude/,,' -e 's,_,.,g' -e 's,.h$$,,'`; \
- 	echo "$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input"; \
- 	$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input
- 
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkFontPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGraphics2D.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkGraphics.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GdkTextLayout.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkButtonPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCanvasPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkComponentPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkChoicePeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkClipboard.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkComponentPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkFramePeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkGenericPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkImagePainter.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkLabelPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkListPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkMenuPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkPanelPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkTextComponentPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkToolkit.h
- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.lo: $(top_builddir)/jniinclude/gnu_java_awt_peer_gtk_GtkWindowPeer.h
- 
  $(lib_gnu_java_awt_peer_gtk_la_OBJECTS): $(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES)
  
! %.properties.lo: %.properties
! 	$(LTGCJCOMPILE) -o $@ -c $< -Wc,--resource,`echo $@ | sed "s/\.lo$$//"`
! 
! # Compile one directory in one go.  If the files have to be compiled with the
! # binary compatibility ABI, only make the .class here -- the .lo is made
! # elsewhere in this Makefile.
! 
! # For 4.0, we have an exception: gnu/gcj/runtime/StackTrace.java is compiled
! # without optimizing sibcalls, so it is compiled separately from its directory;
! # thus for each dir we build a .lolist file, equal to the .list file except in
! # the gnu.gcj.runtime package.  We have a separate rule below for StackTrace.lo.
! %.list:
! 	@: $(shell $(mkinstalldirs) $(basename $@))
! 	@: $(call write_entries_to_file,$^,$@)
! 	@: $(call write_entries_to_file,$(filter-out $(srcdir)/gnu/gcj/runtime/StackTrace.java, $^),${@:.list=.lolist})
! 
! $(all_java_lo_files): %.lo: %.stamp
! 	$(LTGCJCOMPILE) -o $@ -c @${<:.stamp=.lolist}
! 
! $(all_java_stamp_files): %.stamp: %.list
! 	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(BOOTCLASSPATH) -d $(here) \
! 		-MD -MF ${@:.stamp=.deps} @$<
! 	echo timestamp > $@
! 
! classes.stamp: $(all_property_files) $(all_java_stamp_files)
! 	echo timestamp > classes.stamp
  
! libgcj-@gcc_version@.jar: classes.stamp
! 	-@rm -f libgcj-@gcc_version@.jar
! 	(find java gnu javax org -type d -o -type f -name '*.class'; \
! 	for file in $(all_property_files); do \
! 	  echo "x-C" | sed -e 's/^.//'; \
! 	  echo $(srcdir); \
! 	  echo $$file; \
! 	done) | \
! 	  sed -e '/\/xlib/d' -e '/\/\.libs/d' -e '/\/\.deps/d' | \
! 	  $(ZIP) -cfM0E@ $@
! 	for dir in sax w3c_dom; do \
! 	  (cd external/$$dir; \
! 	  find org -type f -name '*.class' -print | while read file; do \
! 	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo external/$$dir; \
! 	    echo $$file; \
!           done) | \
! 	  $(ZIP) -ufM0E@ $@; \
! 	done
  
  mostlyclean-local:
  	find . -name '*.lo' -print | xargs $(LIBTOOL) rm -f
- 	@: $(foreach header,$(nat_headers) $(xlib_nat_headers) $(gtk_jni_headers),$(shell rm -f '$(header)'))
- 
- clean-local:
- 	find . -name '*.class' -print | xargs rm -f
  
  distclean-local:
  	find . -name '*.d' -print | xargs rm -f
--- 7517,7565 ----
  
  .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
  	check-am clean clean-binPROGRAMS clean-generic clean-libtool \
! 	clean-noinstPROGRAMS clean-recursive \
! 	clean-toolexeclibLTLIBRARIES ctags ctags-recursive dist \
! 	dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ dist-zip \
! 	distcheck distclean distclean-compile distclean-generic \
! 	distclean-libtool distclean-local distclean-recursive \
! 	distclean-tags distcleancheck distdir distuninstallcheck dvi \
! 	dvi-am html html-am info info-am install install-am \
! 	install-binPROGRAMS install-binSCRIPTS install-data \
! 	install-data-am install-data-local install-dbexecDATA \
! 	install-exec install-exec-am install-info install-info-am \
! 	install-jarDATA install-man install-pkgconfigDATA \
! 	install-strip install-toolexeclibLTLIBRARIES \
! 	install-toolexecmainlibDATA installcheck installcheck-am \
! 	installdirs installdirs-am maintainer-clean \
! 	maintainer-clean-generic maintainer-clean-recursive \
! 	mostlyclean mostlyclean-compile mostlyclean-generic \
! 	mostlyclean-libtool mostlyclean-local mostlyclean-recursive \
! 	pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
! 	uninstall-binPROGRAMS uninstall-binSCRIPTS \
! 	uninstall-dbexecDATA uninstall-info-am uninstall-jarDATA \
! 	uninstall-pkgconfigDATA uninstall-toolexeclibLTLIBRARIES \
! 	uninstall-toolexecmainlibDATA
  
  
  $(db_name): gcj-dbtool$(EXEEXT)
  	@rm -f $(db_name)
  	./gcj-dbtool -n $(db_name) || touch $(db_name)
  
  $(lib_gnu_java_awt_peer_gtk_la_OBJECTS): $(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES)
  
! $(propertyo_files): %.lo: classpath/resource/%
! 	$(mkinstalldirs) `dirname $@`; \
! 	$(LTGCJCOMPILE) -o $@ -c $< -Wc,--resource,$(@:.lo=)
  
! libgcj-$(gcc_version).jar:
! 	jardir=`dirname $(ZIP)`; \
! 	jardir=`cd $$jardir && pwd`; \
! 	jarname=`basename $(ZIP)`; \
! 	cd classpath/lib; $$jardir/$$jarname -cfM \
! 	    ../../libgcj-$(gcc_version).jar gnu java javax org
  
  mostlyclean-local:
  	find . -name '*.lo' -print | xargs $(LIBTOOL) rm -f
  
  distclean-local:
  	find . -name '*.d' -print | xargs rm -f
*************** distclean-local:
*** 6312,6373 ****
  clean-nat:
  	rm -f $(nat_files) $(xlib_nat_files)
  
- gnu/gcj/runtime/StackTrace.lo: gnu/gcj/runtime/StackTrace.java
- 	$(LTGCJCOMPILE) -fno-optimize-sibling-calls -o $@ -c $<
- 
- libgcj.la: $(libgcj_la_OBJECTS) $(libgcj_la_DEPENDENCIES)
- 	@echo Creating list of files to link...
- 	@: $(call write_entries_to_file,$(libgcj_la_OBJECTS),libgcj.objectlist)
- 	$(libgcj_la_LINK) -objectlist libgcj.objectlist \
- 	$(libgcj_la_LIBADD) \
- 	-rpath $(toolexeclibdir) $(libgcj_la_LDFLAGS) $(LIBS)
- 
  lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPENDENCIES)
  	@echo Creating list of files to link...
  	@: $(call write_entries_to_file,$(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_LIBADD),lib_gnu_awt_xlib.objectlist)
  	$(lib_gnu_awt_xlib_la_LINK) -objectlist lib_gnu_awt_xlib.objectlist \
  	-rpath $(toolexeclibdir) $(lib_gnu_awt_xlib_la_LDFLAGS) $(LIBS)
  
  gnu-xml.lo: $(gnu_xml_source_files)
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-xml.lo \
! 		`find gnu/xml -name '*.class' -print | sort -r`
  
  javax-imageio.lo: $(javax_imageio_source_files)
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -findirect-dispatch -c -o javax-imageio.lo \
! 		`find javax/imageio -name '*.class' -print | sort -r`
  
  javax-xml.lo: $(javax_xml_source_files)
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -findirect-dispatch -c -o javax-xml.lo \
! 		`find javax/xml -name '*.class' -print | sort -r`
  
! gnu-java-beans.lo: $(gnu_java_beans_source_files)
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -findirect-dispatch -c -o gnu-java-beans.lo \
! 		`find gnu/java/beans -name '*.class' -print | sort -r`
  
! gtk-awt-peer.lo: $(gtk_awt_peer_source_files)
! 	$(MAKE) classes.stamp
! 	$(LTGCJCOMPILE) -findirect-dispatch -fjni -c -o gtk-awt-peer.lo \
! 		`find gnu/java/awt/peer/gtk -name '*.class' -print | sort -r`
  
! %.h: %.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) $(basename $<)
  
! $(ordinary_nat_headers) $(xlib_nat_headers): %.h: %.class
  
! java/lang/ClassLoader.h: java/lang/ClassLoader.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  		-prepend 'jclass _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
  		-prepend 'void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar);' \
  		-friend 'jclass (::_Jv_FindClass) (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
  		-friend 'void ::_Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar);' \
! 		$(basename $<)
  
! java/lang/Thread.h: java/lang/Thread.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  		-prepend 'class _Jv_JNIEnv;' \
  		-prepend '#define _JV_NOT_OWNER 1' \
  		-prepend '#define _JV_INTERRUPTED 2' \
--- 7568,9192 ----
  clean-nat:
  	rm -f $(nat_files) $(xlib_nat_files)
  
  lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPENDENCIES)
  	@echo Creating list of files to link...
  	@: $(call write_entries_to_file,$(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_LIBADD),lib_gnu_awt_xlib.objectlist)
  	$(lib_gnu_awt_xlib_la_LINK) -objectlist lib_gnu_awt_xlib.objectlist \
  	-rpath $(toolexeclibdir) $(lib_gnu_awt_xlib_la_LDFLAGS) $(LIBS)
  
+ %.lo: %.list
+ 	$(LTGCJCOMPILE) -c -o $@ -MT $@ -MD -MP -MF $(basename $@).deps @$<
+ 
+ gnu-CORBA.lo: $(gnu_CORBA_source_files)
+ 	@find classpath/lib/gnu/CORBA -name '*.class' > gnu-CORBA.list
+ 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-CORBA.lo @gnu-CORBA.list
+ 	@rm -f gnu-CORBA.list
+ 
+ gnu/awt.list: $(gnu_awt_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_awt_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/awt.list
+ 
+ -include gnu/awt.deps
+ 
+ gnu/awt/j2d.list: $(gnu_awt_j2d_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_awt_j2d_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/awt/j2d.list
+ 
+ -include gnu/awt/j2d.deps
+ 
+ gnu/awt/xlib.list: $(gnu_awt_xlib_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_awt_xlib_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/awt/xlib.list
+ 
+ -include gnu/awt/xlib.deps
+ 
+ gnu/classpath.list: $(gnu_classpath_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath.list
+ 
+ -include gnu/classpath.deps
+ 
+ gnu/classpath/debug.list: $(gnu_classpath_debug_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_debug_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath/debug.list
+ 
+ -include gnu/classpath/debug.deps
+ 
+ gnu/classpath/jdwp.list: $(gnu_classpath_jdwp_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_jdwp_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath/jdwp.list
+ 
+ -include gnu/classpath/jdwp.deps
+ 
+ gnu/classpath/jdwp/event.list: $(gnu_classpath_jdwp_event_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_jdwp_event_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath/jdwp/event.list
+ 
+ -include gnu/classpath/jdwp/event.deps
+ 
+ gnu/classpath/jdwp/event/filters.list: $(gnu_classpath_jdwp_event_filters_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_jdwp_event_filters_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath/jdwp/event/filters.list
+ 
+ -include gnu/classpath/jdwp/event/filters.deps
+ 
+ gnu/classpath/jdwp/exception.list: $(gnu_classpath_jdwp_exception_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_jdwp_exception_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath/jdwp/exception.list
+ 
+ -include gnu/classpath/jdwp/exception.deps
+ 
+ gnu/classpath/jdwp/id.list: $(gnu_classpath_jdwp_id_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_jdwp_id_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath/jdwp/id.list
+ 
+ -include gnu/classpath/jdwp/id.deps
+ 
+ gnu/classpath/jdwp/processor.list: $(gnu_classpath_jdwp_processor_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_jdwp_processor_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath/jdwp/processor.list
+ 
+ -include gnu/classpath/jdwp/processor.deps
+ 
+ gnu/classpath/jdwp/transport.list: $(gnu_classpath_jdwp_transport_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_jdwp_transport_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath/jdwp/transport.list
+ 
+ -include gnu/classpath/jdwp/transport.deps
+ 
+ gnu/classpath/jdwp/util.list: $(gnu_classpath_jdwp_util_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_classpath_jdwp_util_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/classpath/jdwp/util.list
+ 
+ -include gnu/classpath/jdwp/util.deps
+ 
+ gnu/gcj.list: $(gnu_gcj_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_gcj_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/gcj.list
+ 
+ -include gnu/gcj.deps
+ 
+ gnu/gcj/convert.list: $(gnu_gcj_convert_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_gcj_convert_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/gcj/convert.list
+ 
+ -include gnu/gcj/convert.deps
+ 
+ gnu/gcj/io.list: $(gnu_gcj_io_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_gcj_io_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/gcj/io.list
+ 
+ -include gnu/gcj/io.deps
+ 
+ gnu/gcj/runtime.list: $(gnu_gcj_runtime_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_gcj_runtime_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/gcj/runtime.list
+ 
+ -include gnu/gcj/runtime.deps
+ 
+ gnu/gcj/util.list: $(gnu_gcj_util_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_gcj_util_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/gcj/util.list
+ 
+ -include gnu/gcj/util.deps
+ 
+ gnu/gcj/xlib.list: $(gnu_gcj_xlib_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_gcj_xlib_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/gcj/xlib.list
+ 
+ -include gnu/gcj/xlib.deps
+ 
+ gnu/java/awt.list: $(gnu_java_awt_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_awt_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/awt.list
+ 
+ -include gnu/java/awt.deps
+ 
+ gnu/java/awt/color.list: $(gnu_java_awt_color_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_awt_color_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/awt/color.list
+ 
+ -include gnu/java/awt/color.deps
+ 
+ gnu/java/awt/image.list: $(gnu_java_awt_image_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_awt_image_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/awt/image.list
+ 
+ -include gnu/java/awt/image.deps
+ 
+ gnu/java/awt/peer.list: $(gnu_java_awt_peer_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_awt_peer_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/awt/peer.list
+ 
+ -include gnu/java/awt/peer.deps
+ 
+ gnu-java-awt-peer-gtk.lo: $(gnu_java_awt_peer_gtk_source_files)
+ 	@find classpath/lib/gnu/java/awt/peer/gtk -name '*.class' > gnu-java-awt-peer-gtk.list
+ 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-awt-peer-gtk.lo @gnu-java-awt-peer-gtk.list
+ 	@rm -f gnu-java-awt-peer-gtk.list
+ 
+ gnu-java-awt-peer-qt.lo: $(gnu_java_awt_peer_qt_source_files)
+ 	@find classpath/lib/gnu/java/awt/peer/qt -name '*.class' > gnu-java-awt-peer-qt.list
+ 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-awt-peer-qt.lo @gnu-java-awt-peer-qt.list
+ 	@rm -f gnu-java-awt-peer-qt.list
+ 
+ gnu-java-beans.lo: $(gnu_java_beans_source_files)
+ 	@find classpath/lib/gnu/java/beans -name '*.class' > gnu-java-beans.list
+ 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-java-beans.lo @gnu-java-beans.list
+ 	@rm -f gnu-java-beans.list
+ 
+ gnu/java/io.list: $(gnu_java_io_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_io_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/io.list
+ 
+ -include gnu/java/io.deps
+ 
+ gnu/java/lang.list: $(gnu_java_lang_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_lang_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/lang.list
+ 
+ -include gnu/java/lang.deps
+ 
+ gnu/java/lang/reflect.list: $(gnu_java_lang_reflect_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_lang_reflect_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/lang/reflect.list
+ 
+ -include gnu/java/lang/reflect.deps
+ 
+ gnu/java/locale.list: $(gnu_java_locale_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_locale_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/locale.list
+ 
+ -include gnu/java/locale.deps
+ 
+ gnu/java/math.list: $(gnu_java_math_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_math_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/math.list
+ 
+ -include gnu/java/math.deps
+ 
+ gnu/java/net.list: $(gnu_java_net_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_net_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/net.list
+ 
+ -include gnu/java/net.deps
+ 
+ gnu/java/net/protocol/file.list: $(gnu_java_net_protocol_file_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_net_protocol_file_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/net/protocol/file.list
+ 
+ -include gnu/java/net/protocol/file.deps
+ 
+ gnu/java/net/protocol/ftp.list: $(gnu_java_net_protocol_ftp_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_net_protocol_ftp_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/net/protocol/ftp.list
+ 
+ -include gnu/java/net/protocol/ftp.deps
+ 
+ gnu/java/net/protocol/http.list: $(gnu_java_net_protocol_http_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_net_protocol_http_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/net/protocol/http.list
+ 
+ -include gnu/java/net/protocol/http.deps
+ 
+ gnu/java/net/protocol/https.list: $(gnu_java_net_protocol_https_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_net_protocol_https_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/net/protocol/https.list
+ 
+ -include gnu/java/net/protocol/https.deps
+ 
+ gnu/java/net/protocol/jar.list: $(gnu_java_net_protocol_jar_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_net_protocol_jar_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/net/protocol/jar.list
+ 
+ -include gnu/java/net/protocol/jar.deps
+ 
+ gnu/java/nio.list: $(gnu_java_nio_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_nio_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/nio.list
+ 
+ -include gnu/java/nio.deps
+ 
+ gnu/java/nio/channels.list: $(gnu_java_nio_channels_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_nio_channels_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/nio/channels.list
+ 
+ -include gnu/java/nio/channels.deps
+ 
+ gnu/java/nio/charset.list: $(gnu_java_nio_charset_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_nio_charset_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/nio/charset.list
+ 
+ -include gnu/java/nio/charset.deps
+ 
+ gnu/java/rmi.list: $(gnu_java_rmi_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_rmi_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/rmi.list
+ 
+ -include gnu/java/rmi.deps
+ 
+ gnu/java/rmi/dgc.list: $(gnu_java_rmi_dgc_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_rmi_dgc_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/rmi/dgc.list
+ 
+ -include gnu/java/rmi/dgc.deps
+ 
+ gnu/java/rmi/registry.list: $(gnu_java_rmi_registry_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_rmi_registry_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/rmi/registry.list
+ 
+ -include gnu/java/rmi/registry.deps
+ 
+ gnu/java/rmi/server.list: $(gnu_java_rmi_server_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_rmi_server_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/rmi/server.list
+ 
+ -include gnu/java/rmi/server.deps
+ 
+ gnu/java/security.list: $(gnu_java_security_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_security_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/security.list
+ 
+ -include gnu/java/security.deps
+ 
+ gnu/java/security/action.list: $(gnu_java_security_action_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_security_action_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/security/action.list
+ 
+ -include gnu/java/security/action.deps
+ 
+ gnu/java/security/ber.list: $(gnu_java_security_ber_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_security_ber_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/security/ber.list
+ 
+ -include gnu/java/security/ber.deps
+ 
+ gnu/java/security/der.list: $(gnu_java_security_der_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_security_der_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/security/der.list
+ 
+ -include gnu/java/security/der.deps
+ 
+ gnu/java/security/pkcs.list: $(gnu_java_security_pkcs_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_security_pkcs_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/security/pkcs.list
+ 
+ -include gnu/java/security/pkcs.deps
+ 
+ gnu/java/security/provider.list: $(gnu_java_security_provider_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_security_provider_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/security/provider.list
+ 
+ -include gnu/java/security/provider.deps
+ 
+ gnu/java/security/util.list: $(gnu_java_security_util_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_security_util_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/security/util.list
+ 
+ -include gnu/java/security/util.deps
+ 
+ gnu/java/security/x509.list: $(gnu_java_security_x509_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_security_x509_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/security/x509.list
+ 
+ -include gnu/java/security/x509.deps
+ 
+ gnu/java/security/x509/ext.list: $(gnu_java_security_x509_ext_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_security_x509_ext_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/security/x509/ext.list
+ 
+ -include gnu/java/security/x509/ext.deps
+ 
+ gnu/java/text.list: $(gnu_java_text_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_text_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/text.list
+ 
+ -include gnu/java/text.deps
+ 
+ gnu/java/util.list: $(gnu_java_util_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_util_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/util.list
+ 
+ -include gnu/java/util.deps
+ 
+ gnu/java/util/prefs.list: $(gnu_java_util_prefs_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_java_util_prefs_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/java/util/prefs.list
+ 
+ -include gnu/java/util/prefs.deps
+ 
+ gnu/javax/crypto.list: $(gnu_javax_crypto_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_javax_crypto_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/javax/crypto.list
+ 
+ -include gnu/javax/crypto.deps
+ 
+ gnu/javax/imageio/bmp.list: $(gnu_javax_imageio_bmp_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_javax_imageio_bmp_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/javax/imageio/bmp.list
+ 
+ -include gnu/javax/imageio/bmp.deps
+ 
+ gnu-javax-rmi.lo: $(gnu_javax_rmi_source_files)
+ 	@find classpath/lib/gnu/javax/rmi -name '*.class' > gnu-javax-rmi.list
+ 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-javax-rmi.lo @gnu-javax-rmi.list
+ 	@rm -f gnu-javax-rmi.list
+ 
+ gnu-javax-sound-midi.lo: $(gnu_javax_sound_midi_source_files)
+ 	@find classpath/lib/gnu/javax/sound/midi -name '*.class' > gnu-javax-sound-midi.list
+ 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-javax-sound-midi.lo @gnu-javax-sound-midi.list
+ 	@rm -f gnu-javax-sound-midi.list
+ 
+ gnu/javax/swing/text/html/parser.list: $(gnu_javax_swing_text_html_parser_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_javax_swing_text_html_parser_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/javax/swing/text/html/parser.list
+ 
+ -include gnu/javax/swing/text/html/parser.deps
+ 
+ gnu/javax/swing/text/html/parser/models.list: $(gnu_javax_swing_text_html_parser_models_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_javax_swing_text_html_parser_models_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/javax/swing/text/html/parser/models.list
+ 
+ -include gnu/javax/swing/text/html/parser/models.deps
+ 
+ gnu/javax/swing/text/html/parser/support.list: $(gnu_javax_swing_text_html_parser_support_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_javax_swing_text_html_parser_support_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/javax/swing/text/html/parser/support.list
+ 
+ -include gnu/javax/swing/text/html/parser/support.deps
+ 
+ gnu/javax/swing/text/html/parser/support/low.list: $(gnu_javax_swing_text_html_parser_support_low_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_javax_swing_text_html_parser_support_low_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/javax/swing/text/html/parser/support/low.list
+ 
+ -include gnu/javax/swing/text/html/parser/support/low.deps
+ 
+ gnu/regexp.list: $(gnu_regexp_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	@for file in $(gnu_regexp_source_files); do \
+ 	  if test -f $(srcdir)/$$file; then \
+ 	    echo $(srcdir)/$$file; \
+ 	  else echo $$file; fi; \
+ 	done > gnu/regexp.list
+ 
+ -include gnu/regexp.deps
+ 
  gnu-xml.lo: $(gnu_xml_source_files)
! 	@find classpath/lib/gnu/xml -name '*.class' > gnu-xml.list
! 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o gnu-xml.lo @gnu-xml.list
! 	@rm -f gnu-xml.list
! 
! java/applet.list: $(java_applet_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_applet_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/applet.list
! 
! -include java/applet.deps
! 
! java/awt.list: $(java_awt_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt.list
! 
! -include java/awt.deps
! 
! java/awt/color.list: $(java_awt_color_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_color_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/color.list
! 
! -include java/awt/color.deps
! 
! java/awt/datatransfer.list: $(java_awt_datatransfer_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_datatransfer_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/datatransfer.list
! 
! -include java/awt/datatransfer.deps
! 
! java/awt/dnd.list: $(java_awt_dnd_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_dnd_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/dnd.list
! 
! -include java/awt/dnd.deps
! 
! java/awt/dnd/peer.list: $(java_awt_dnd_peer_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_dnd_peer_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/dnd/peer.list
! 
! -include java/awt/dnd/peer.deps
! 
! java/awt/event.list: $(java_awt_event_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_event_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/event.list
! 
! -include java/awt/event.deps
! 
! java/awt/font.list: $(java_awt_font_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_font_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/font.list
! 
! -include java/awt/font.deps
! 
! java/awt/geom.list: $(java_awt_geom_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_geom_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/geom.list
! 
! -include java/awt/geom.deps
! 
! java/awt/im.list: $(java_awt_im_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_im_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/im.list
! 
! -include java/awt/im.deps
! 
! java/awt/im/spi.list: $(java_awt_im_spi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_im_spi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/im/spi.list
! 
! -include java/awt/im/spi.deps
! 
! java/awt/image.list: $(java_awt_image_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_image_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/image.list
! 
! -include java/awt/image.deps
! 
! java/awt/image/renderable.list: $(java_awt_image_renderable_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_image_renderable_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/image/renderable.list
! 
! -include java/awt/image/renderable.deps
! 
! java/awt/peer.list: $(java_awt_peer_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_peer_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/peer.list
! 
! -include java/awt/peer.deps
! 
! java/awt/print.list: $(java_awt_print_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_awt_print_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/awt/print.list
! 
! -include java/awt/print.deps
! 
! java/beans.list: $(java_beans_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_beans_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/beans.list
! 
! -include java/beans.deps
! 
! java/beans/beancontext.list: $(java_beans_beancontext_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_beans_beancontext_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/beans/beancontext.list
! 
! -include java/beans/beancontext.deps
! 
! java/io.list: $(java_io_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_io_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/io.list
! 
! -include java/io.deps
! 
! java/lang.list: $(java_lang_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_lang_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/lang.list
! 
! -include java/lang.deps
! 
! java/lang/annotation.list: $(java_lang_annotation_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_lang_annotation_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/lang/annotation.list
! 
! -include java/lang/annotation.deps
! 
! java/lang/ref.list: $(java_lang_ref_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_lang_ref_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/lang/ref.list
! 
! -include java/lang/ref.deps
! 
! java/lang/reflect.list: $(java_lang_reflect_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_lang_reflect_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/lang/reflect.list
! 
! -include java/lang/reflect.deps
! 
! java/math.list: $(java_math_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_math_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/math.list
! 
! -include java/math.deps
! 
! java/net.list: $(java_net_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_net_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/net.list
! 
! -include java/net.deps
! 
! java/nio.list: $(java_nio_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_nio_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/nio.list
! 
! -include java/nio.deps
! 
! java/nio/channels.list: $(java_nio_channels_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_nio_channels_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/nio/channels.list
! 
! -include java/nio/channels.deps
! 
! java/nio/channels/spi.list: $(java_nio_channels_spi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_nio_channels_spi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/nio/channels/spi.list
! 
! -include java/nio/channels/spi.deps
! 
! java/nio/charset.list: $(java_nio_charset_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_nio_charset_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/nio/charset.list
! 
! -include java/nio/charset.deps
! 
! java/nio/charset/spi.list: $(java_nio_charset_spi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_nio_charset_spi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/nio/charset/spi.list
! 
! -include java/nio/charset/spi.deps
! 
! java/rmi.list: $(java_rmi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_rmi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/rmi.list
! 
! -include java/rmi.deps
! 
! java/rmi/activation.list: $(java_rmi_activation_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_rmi_activation_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/rmi/activation.list
! 
! -include java/rmi/activation.deps
! 
! java/rmi/dgc.list: $(java_rmi_dgc_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_rmi_dgc_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/rmi/dgc.list
! 
! -include java/rmi/dgc.deps
! 
! java/rmi/registry.list: $(java_rmi_registry_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_rmi_registry_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/rmi/registry.list
! 
! -include java/rmi/registry.deps
! 
! java/rmi/server.list: $(java_rmi_server_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_rmi_server_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/rmi/server.list
! 
! -include java/rmi/server.deps
! 
! java/security.list: $(java_security_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_security_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/security.list
! 
! -include java/security.deps
! 
! java/security/acl.list: $(java_security_acl_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_security_acl_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/security/acl.list
! 
! -include java/security/acl.deps
! 
! java/security/cert.list: $(java_security_cert_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_security_cert_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/security/cert.list
! 
! -include java/security/cert.deps
! 
! java/security/interfaces.list: $(java_security_interfaces_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_security_interfaces_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/security/interfaces.list
! 
! -include java/security/interfaces.deps
! 
! java/security/spec.list: $(java_security_spec_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_security_spec_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/security/spec.list
! 
! -include java/security/spec.deps
! 
! java/sql.list: $(java_sql_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_sql_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/sql.list
! 
! -include java/sql.deps
! 
! java/text.list: $(java_text_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_text_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/text.list
! 
! -include java/text.deps
! 
! java/util.list: $(java_util_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_util_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/util.list
! 
! -include java/util.deps
! 
! java/util/jar.list: $(java_util_jar_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_util_jar_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/util/jar.list
! 
! -include java/util/jar.deps
! 
! java/util/logging.list: $(java_util_logging_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_util_logging_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/util/logging.list
! 
! -include java/util/logging.deps
! 
! java/util/prefs.list: $(java_util_prefs_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_util_prefs_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/util/prefs.list
! 
! -include java/util/prefs.deps
! 
! java/util/regex.list: $(java_util_regex_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_util_regex_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/util/regex.list
! 
! -include java/util/regex.deps
! 
! java/util/zip.list: $(java_util_zip_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(java_util_zip_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > java/util/zip.list
! 
! -include java/util/zip.deps
! 
! javax/accessibility.list: $(javax_accessibility_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_accessibility_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/accessibility.list
! 
! -include javax/accessibility.deps
! 
! javax/crypto.list: $(javax_crypto_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_crypto_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/crypto.list
! 
! -include javax/crypto.deps
! 
! javax/crypto/interfaces.list: $(javax_crypto_interfaces_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_crypto_interfaces_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/crypto/interfaces.list
! 
! -include javax/crypto/interfaces.deps
! 
! javax/crypto/spec.list: $(javax_crypto_spec_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_crypto_spec_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/crypto/spec.list
! 
! -include javax/crypto/spec.deps
  
  javax-imageio.lo: $(javax_imageio_source_files)
! 	@find classpath/lib/javax/imageio -name '*.class' > javax-imageio.list
! 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o javax-imageio.lo @javax-imageio.list
! 	@rm -f javax-imageio.list
! 
! javax/naming.list: $(javax_naming_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_naming_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/naming.list
! 
! -include javax/naming.deps
! 
! javax/naming/directory.list: $(javax_naming_directory_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_naming_directory_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/naming/directory.list
! 
! -include javax/naming/directory.deps
! 
! javax/naming/event.list: $(javax_naming_event_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_naming_event_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/naming/event.list
! 
! -include javax/naming/event.deps
! 
! javax/naming/ldap.list: $(javax_naming_ldap_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_naming_ldap_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/naming/ldap.list
! 
! -include javax/naming/ldap.deps
! 
! javax/naming/spi.list: $(javax_naming_spi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_naming_spi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/naming/spi.list
! 
! -include javax/naming/spi.deps
! 
! javax/net.list: $(javax_net_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_net_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/net.list
! 
! -include javax/net.deps
! 
! javax/net/ssl.list: $(javax_net_ssl_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_net_ssl_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/net/ssl.list
! 
! -include javax/net/ssl.deps
! 
! javax/print.list: $(javax_print_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_print_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/print.list
! 
! -include javax/print.deps
! 
! javax/print/attribute.list: $(javax_print_attribute_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_print_attribute_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/print/attribute.list
! 
! -include javax/print/attribute.deps
! 
! javax/print/attribute/standard.list: $(javax_print_attribute_standard_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_print_attribute_standard_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/print/attribute/standard.list
! 
! -include javax/print/attribute/standard.deps
! 
! javax/print/event.list: $(javax_print_event_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_print_event_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/print/event.list
! 
! -include javax/print/event.deps
! 
! javax-rmi.lo: $(javax_rmi_source_files)
! 	@find classpath/lib/javax/rmi -name '*.class' > javax-rmi.list
! 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o javax-rmi.lo @javax-rmi.list
! 	@rm -f javax-rmi.list
! 
! javax/security/auth.list: $(javax_security_auth_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_security_auth_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/security/auth.list
! 
! -include javax/security/auth.deps
! 
! javax/security/auth/callback.list: $(javax_security_auth_callback_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_security_auth_callback_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/security/auth/callback.list
! 
! -include javax/security/auth/callback.deps
! 
! javax/security/auth/login.list: $(javax_security_auth_login_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_security_auth_login_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/security/auth/login.list
! 
! -include javax/security/auth/login.deps
! 
! javax/security/auth/spi.list: $(javax_security_auth_spi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_security_auth_spi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/security/auth/spi.list
! 
! -include javax/security/auth/spi.deps
! 
! javax/security/auth/x500.list: $(javax_security_auth_x500_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_security_auth_x500_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/security/auth/x500.list
! 
! -include javax/security/auth/x500.deps
! 
! javax/security/cert.list: $(javax_security_cert_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_security_cert_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/security/cert.list
! 
! -include javax/security/cert.deps
! 
! javax/security/sasl.list: $(javax_security_sasl_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_security_sasl_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/security/sasl.list
! 
! -include javax/security/sasl.deps
! 
! javax/sound/midi.list: $(javax_sound_midi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_sound_midi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/sound/midi.list
! 
! -include javax/sound/midi.deps
! 
! javax/sound/midi/spi.list: $(javax_sound_midi_spi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_sound_midi_spi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/sound/midi/spi.list
! 
! -include javax/sound/midi/spi.deps
! 
! javax/sound/sampled.list: $(javax_sound_sampled_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_sound_sampled_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/sound/sampled.list
! 
! -include javax/sound/sampled.deps
! 
! javax/sound/sampled/spi.list: $(javax_sound_sampled_spi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_sound_sampled_spi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/sound/sampled/spi.list
! 
! -include javax/sound/sampled/spi.deps
! 
! javax/sql.list: $(javax_sql_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_sql_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/sql.list
! 
! -include javax/sql.deps
! 
! javax/swing.list: $(javax_swing_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing.list
! 
! -include javax/swing.deps
! 
! javax/swing/border.list: $(javax_swing_border_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_border_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/border.list
! 
! -include javax/swing/border.deps
! 
! javax/swing/colorchooser.list: $(javax_swing_colorchooser_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_colorchooser_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/colorchooser.list
! 
! -include javax/swing/colorchooser.deps
! 
! javax/swing/event.list: $(javax_swing_event_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_event_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/event.list
! 
! -include javax/swing/event.deps
! 
! javax/swing/filechooser.list: $(javax_swing_filechooser_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_filechooser_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/filechooser.list
! 
! -include javax/swing/filechooser.deps
! 
! javax/swing/plaf.list: $(javax_swing_plaf_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_plaf_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/plaf.list
! 
! -include javax/swing/plaf.deps
! 
! javax/swing/plaf/basic.list: $(javax_swing_plaf_basic_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_plaf_basic_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/plaf/basic.list
! 
! -include javax/swing/plaf/basic.deps
! 
! javax/swing/plaf/metal.list: $(javax_swing_plaf_metal_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_plaf_metal_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/plaf/metal.list
! 
! -include javax/swing/plaf/metal.deps
! 
! javax/swing/plaf/multi.list: $(javax_swing_plaf_multi_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_plaf_multi_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/plaf/multi.list
! 
! -include javax/swing/plaf/multi.deps
! 
! javax/swing/table.list: $(javax_swing_table_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_table_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/table.list
! 
! -include javax/swing/table.deps
! 
! javax/swing/text.list: $(javax_swing_text_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_text_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/text.list
! 
! -include javax/swing/text.deps
! 
! javax/swing/text/html.list: $(javax_swing_text_html_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_text_html_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/text/html.list
! 
! -include javax/swing/text/html.deps
! 
! javax/swing/text/html/parser.list: $(javax_swing_text_html_parser_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_text_html_parser_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/text/html/parser.list
! 
! -include javax/swing/text/html/parser.deps
! 
! javax/swing/text/rtf.list: $(javax_swing_text_rtf_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_text_rtf_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/text/rtf.list
! 
! -include javax/swing/text/rtf.deps
! 
! javax/swing/tree.list: $(javax_swing_tree_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_tree_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/tree.list
! 
! -include javax/swing/tree.deps
! 
! javax/swing/undo.list: $(javax_swing_undo_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_swing_undo_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/swing/undo.list
! 
! -include javax/swing/undo.deps
! 
! javax/transaction.list: $(javax_transaction_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_transaction_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/transaction.list
! 
! -include javax/transaction.deps
! 
! javax/transaction/xa.list: $(javax_transaction_xa_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(javax_transaction_xa_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > javax/transaction/xa.list
! 
! -include javax/transaction/xa.deps
  
  javax-xml.lo: $(javax_xml_source_files)
! 	@find classpath/lib/javax/xml -name '*.class' > javax-xml.list
! 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o javax-xml.lo @javax-xml.list
! 	@rm -f javax-xml.list
  
! org/ietf/jgss.list: $(org_ietf_jgss_source_files)
! 	@$(mkinstalldirs) $(dir $@)
! 	@for file in $(org_ietf_jgss_source_files); do \
! 	  if test -f $(srcdir)/$$file; then \
! 	    echo $(srcdir)/$$file; \
! 	  else echo $$file; fi; \
! 	done > org/ietf/jgss.list
  
! -include org/ietf/jgss.deps
  
! org-omg.lo: $(org_omg_source_files)
! 	@find classpath/lib/org/omg -name '*.class' > org-omg.list
! 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-omg.lo @org-omg.list
! 	@rm -f org-omg.list
  
! org-w3c.lo: $(org_w3c_source_files)
! 	@find classpath/lib/org/w3c -name '*.class' > org-w3c.list
! 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-w3c.lo @org-w3c.list
! 	@rm -f org-w3c.list
  
! org-xml.lo: $(org_xml_source_files)
! 	@find classpath/lib/org/xml -name '*.class' > org-xml.list
! 	$(LTGCJCOMPILE) -fjni -findirect-dispatch -c -o org-xml.lo @org-xml.list
! 	@rm -f org-xml.list
! 
! $(generic_header_files): %.h: classpath/lib/%.class
! 	name=`echo $< | sed -e 's/\.class$$//' -e 's,classpath/lib/,,'`; \
! 	$(mkinstalldirs) `dirname $$name`; \
! 	$(GCJH) -d . -classpath '' -bootclasspath classpath/lib $$name
! 
! java/lang/ClassLoader.h: classpath/lib/java/lang/ClassLoader.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  		-prepend 'jclass _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
  		-prepend 'void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar);' \
  		-friend 'jclass (::_Jv_FindClass) (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
  		-friend 'void ::_Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar);' \
! 		java/lang/ClassLoader
  
! java/lang/Thread.h: classpath/lib/java/lang/Thread.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  		-prepend 'class _Jv_JNIEnv;' \
  		-prepend '#define _JV_NOT_OWNER 1' \
  		-prepend '#define _JV_INTERRUPTED 2' \
*************** java/lang/Thread.h: java/lang/Thread.cla
*** 6385,6394 ****
  		-friend 'java::lang::Thread* ::_Jv_AttachCurrentThread (jstring name, java::lang::ThreadGroup* group);' \
  		-friend 'java::lang::Thread* ::_Jv_AttachCurrentThreadAsDaemon (jstring name, java::lang::ThreadGroup* group);' \
  		-friend 'jint (::_Jv_DetachCurrentThread) ();' \
! 		$(basename $<)
  
! java/lang/String.h: java/lang/String.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -prepend 'jchar* _Jv_GetStringChars (jstring str);' \
  	    -prepend 'jstring* _Jv_StringFindSlot (jchar*, jint, jint);' \
  	    -prepend 'jstring* _Jv_StringGetSlot (jstring);' \
--- 9204,9213 ----
  		-friend 'java::lang::Thread* ::_Jv_AttachCurrentThread (jstring name, java::lang::ThreadGroup* group);' \
  		-friend 'java::lang::Thread* ::_Jv_AttachCurrentThreadAsDaemon (jstring name, java::lang::ThreadGroup* group);' \
  		-friend 'jint (::_Jv_DetachCurrentThread) ();' \
! 		java/lang/Thread
  
! java/lang/String.h: classpath/lib/java/lang/String.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -prepend 'jchar* _Jv_GetStringChars (jstring str);' \
  	    -prepend 'jstring* _Jv_StringFindSlot (jchar*, jint, jint);' \
  	    -prepend 'jstring* _Jv_StringGetSlot (jstring);' \
*************** java/lang/String.h: java/lang/String.cla
*** 6401,6491 ****
  	    -friend 'jstring (::_Jv_NewStringUtf8Const) (_Jv_Utf8Const* str);' \
  	    -friend 'jstring (::_Jv_NewStringLatin1) (const char*, jsize);' \
  	    -friend 'jstring (::_Jv_AllocString) (jsize);' \
! 	    $(basename $<)
  
! java/lang/reflect/Constructor.h: java/lang/reflect/Constructor.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -prepend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'jmethodID (::_Jv_FromReflectedConstructor) (java::lang::reflect::Constructor *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
! 	    $(basename $<)
  
! java/lang/reflect/Field.h: java/lang/reflect/Field.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -prepend 'jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
  	    -friend 'jfieldID (::_Jv_FromReflectedField) (java::lang::reflect::Field *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedField) (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
! 	    $(basename $<)
  
! java/lang/reflect/Method.h: java/lang/reflect/Method.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -prepend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'jmethodID (::_Jv_FromReflectedMethod) (java::lang::reflect::Method *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
  	    -friend 'class java::io::ObjectInputStream;' \
! 	    $(basename $<)
  
! java/lang/reflect/Proxy.h: java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
! 	    $(basename $<)
  
! java/lang/reflect/Proxy$$ProxyData.h: java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/lang/reflect/Proxy$$ProxyData'
  
! java/lang/reflect/Proxy$$ProxyType.h: java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/lang/reflect/Proxy$$ProxyType'
  
! gnu/gcj/runtime/ExtensionClassLoader.h: gnu/gcj/runtime/ExtensionClassLoader.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -friend 'class ::java::lang::ClassLoader;' \
! 	    $(basename $<)
  
! java/io/ObjectInputStream$$GetField.h: java/io/ObjectInputStream.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/io/ObjectInputStream$$GetField'
  
! java/io/ObjectOutputStream$$PutField.h: java/io/ObjectOutputStream.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/io/ObjectOutputStream$$PutField'
  
! java/nio/DirectByteBufferImpl$$ReadWrite.h: java/nio/DirectByteBufferImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/nio/DirectByteBufferImpl$$ReadWrite'
  
! java/nio/channels/Pipe$$SinkChannel.h: java/nio/channels/Pipe.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/nio/channels/Pipe$$SinkChannel'
  
! java/nio/channels/Pipe$$SourceChannel.h: java/nio/channels/Pipe.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/nio/channels/Pipe$$SourceChannel'
  
! gnu/java/net/PlainSocketImpl$$SocketInputStream.h: gnu/java/net/PlainSocketImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'gnu/java/net/PlainSocketImpl$$SocketInputStream'
  
! gnu/java/net/PlainSocketImpl$$SocketOutputStream.h: gnu/java/net/PlainSocketImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'gnu/java/net/PlainSocketImpl$$SocketOutputStream'
  
! gnu/java/nio/PipeImpl$$SinkChannelImpl.h: gnu/java/nio/PipeImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'gnu/java/nio/PipeImpl$$SinkChannelImpl'
  
! gnu/java/nio/PipeImpl$$SourceChannelImpl.h: gnu/java/nio/PipeImpl.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'gnu/java/nio/PipeImpl$$SourceChannelImpl'
  
! java/lang/ConcreteProcess$$ProcessManager.h: java/lang/ConcreteProcess.class
! 	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/lang/ConcreteProcess$$ProcessManager'
  
  $(extra_headers) $(srcdir)/java/lang/Object.h $(srcdir)/java/lang/Class.h:
--- 9220,9310 ----
  	    -friend 'jstring (::_Jv_NewStringUtf8Const) (_Jv_Utf8Const* str);' \
  	    -friend 'jstring (::_Jv_NewStringLatin1) (const char*, jsize);' \
  	    -friend 'jstring (::_Jv_AllocString) (jsize);' \
! 	    java/lang/String
  
! java/lang/reflect/Constructor.h: classpath/lib/java/lang/reflect/Constructor.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -prepend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'jmethodID (::_Jv_FromReflectedConstructor) (java::lang::reflect::Constructor *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
! 	    java/lang/reflect/Constructor
  
! java/lang/reflect/Field.h: classpath/lib/java/lang/reflect/Field.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -prepend 'jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
  	    -friend 'jfieldID (::_Jv_FromReflectedField) (java::lang::reflect::Field *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedField) (_Jv_JNIEnv*, jclass, jfieldID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
! 	    java/lang/reflect/Field
  
! java/lang/reflect/Method.h: classpath/lib/java/lang/reflect/Method.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -prepend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \
  	    -prepend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'jmethodID (::_Jv_FromReflectedMethod) (java::lang::reflect::Method *);' \
  	    -friend 'jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    -friend 'class java::lang::Class;' \
  	    -friend 'class java::io::ObjectInputStream;' \
! 	    java/lang/reflect/Method
  
! java/lang/reflect/Proxy.h: classpath/lib/java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
! 	    java/lang/reflect/Proxy
  
! java/lang/reflect/Proxy$$ProxyData.h: classpath/lib/java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/lang/reflect/Proxy$$ProxyData'
  
! java/lang/reflect/Proxy$$ProxyType.h: classpath/lib/java/lang/reflect/Proxy.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/lang/reflect/Proxy$$ProxyType'
  
! gnu/gcj/runtime/ExtensionClassLoader.h: classpath/lib/gnu/gcj/runtime/ExtensionClassLoader.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	    -friend 'class ::java::lang::ClassLoader;' \
! 	    gnu/gcj/runtime/ExtensionClassLoader
  
! java/io/ObjectInputStream$$GetField.h: classpath/lib/java/io/ObjectInputStream.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/io/ObjectInputStream$$GetField'
  
! java/io/ObjectOutputStream$$PutField.h: classpath/lib/java/io/ObjectOutputStream.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/io/ObjectOutputStream$$PutField'
  
! java/nio/DirectByteBufferImpl$$ReadWrite.h: classpath/lib/java/nio/DirectByteBufferImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/nio/DirectByteBufferImpl$$ReadWrite'
  
! java/nio/channels/Pipe$$SinkChannel.h: classpath/lib/java/nio/channels/Pipe.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/nio/channels/Pipe$$SinkChannel'
  
! java/nio/channels/Pipe$$SourceChannel.h: classpath/lib/java/nio/channels/Pipe.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/nio/channels/Pipe$$SourceChannel'
  
! gnu/java/net/PlainSocketImpl$$SocketInputStream.h: classpath/lib/gnu/java/net/PlainSocketImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'gnu/java/net/PlainSocketImpl$$SocketInputStream'
  
! gnu/java/net/PlainSocketImpl$$SocketOutputStream.h: classpath/lib/gnu/java/net/PlainSocketImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'gnu/java/net/PlainSocketImpl$$SocketOutputStream'
  
! gnu/java/nio/PipeImpl$$SinkChannelImpl.h: classpath/lib/gnu/java/nio/PipeImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'gnu/java/nio/PipeImpl$$SinkChannelImpl'
  
! gnu/java/nio/PipeImpl$$SourceChannelImpl.h: classpath/lib/gnu/java/nio/PipeImpl.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'gnu/java/nio/PipeImpl$$SourceChannelImpl'
  
! java/lang/ConcreteProcess$$ProcessManager.h: classpath/lib/java/lang/ConcreteProcess.class
! 	$(GCJH) -classpath '' -bootclasspath classpath/lib \
  	'java/lang/ConcreteProcess$$ProcessManager'
  
  $(extra_headers) $(srcdir)/java/lang/Object.h $(srcdir)/java/lang/Class.h:
*************** maintainer-check: libgcj.la
*** 6526,6539 ****
  	  | grep -v 'Jv' \
  	  | grep -v 'terminate__Fv' | grep -v 'unexpected__Fv'
  
! header-check: libgcj-@gcc_version@.jar $(nat_headers)
  	rm -f htest.cc; \
  	for h in $(nat_headers); do \
  	  echo "#include \"$$h\"" >> htest.cc; \
  	done; \
  	$(CXXCOMPILE) -fsyntax-only htest.cc
  
! class-check: libgcj-@gcc_version@.jar
  	@ok=0; find . -name '*.class' -print | fgrep -v testsuite | \
  	while read f; do \
  	  echo "$(GCJ_WITH_FLAGS) --syntax-only $$f"; \
--- 9345,9358 ----
  	  | grep -v 'Jv' \
  	  | grep -v 'terminate__Fv' | grep -v 'unexpected__Fv'
  
! header-check: libgcj-$(gcc_version).jar $(nat_headers)
  	rm -f htest.cc; \
  	for h in $(nat_headers); do \
  	  echo "#include \"$$h\"" >> htest.cc; \
  	done; \
  	$(CXXCOMPILE) -fsyntax-only htest.cc
  
! class-check: libgcj-$(gcc_version).jar
  	@ok=0; find . -name '*.class' -print | fgrep -v testsuite | \
  	while read f; do \
  	  echo "$(GCJ_WITH_FLAGS) --syntax-only $$f"; \
*************** write-entries-to-file-check:
*** 6587,6650 ****
  @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	>> tmp-0212; \
  @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	mv tmp-0212 $(srcdir)/gnu/gcj/convert/JIS0212.h
  
- TexinfoDoclet.class: $(srcdir)/scripts/TexinfoDoclet.java
- 	javac -d . $(srcdir)/scripts/TexinfoDoclet.java
- 
- texinfo: TexinfoDoclet.class
- 	langsource=`ls $(srcdir)/java/lang/*.java`; \
- 	lang=`echo $$langsource | sed -e 's/[^ ].*EcosProcess.java//g' | sed -e 's/[^ ].*PosixProcess.java//g'`; \
- 	javadoc -outfile $(srcdir)/doc/java-lang.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $$lang
- 	javadoc -outfile $(srcdir)/doc/java-lang-ref.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/lang/ref/*.java
- 	javadoc -outfile $(srcdir)/doc/java-lang-reflect.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/lang/reflect/*.java
- 	javadoc -outfile $(srcdir)/doc/java-applet.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/applet/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-color.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/color/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-datatransfer.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/datatransfer/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-event.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/event/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-geom.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/geom/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-image.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/image/*.java
- 	javadoc -outfile $(srcdir)/doc/java-awt-peer.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/awt/peer/*.java
- 	javadoc -outfile $(srcdir)/doc/java-beans.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/beans/*.java
- 	javadoc -outfile $(srcdir)/doc/java-beans-beancontext.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/beans/beancontext/*.java
- 	javadoc -outfile $(srcdir)/doc/java-io.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/io/*.java
- 	javadoc -outfile $(srcdir)/doc/java-math.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/math/*.java
- 	javadoc -outfile $(srcdir)/doc/java-net.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/net/*.java
- 	javadoc -outfile $(srcdir)/doc/java-security.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/security/*.java
- 	javadoc -outfile $(srcdir)/doc/java-security-cert.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/security-cert/*.java
- 	javadoc -outfile $(srcdir)/doc/java-security-spec.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/security/spec/*.java
- 	javadoc -outfile $(srcdir)/doc/java-security-interfaces.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/security/spec/interfaces/*.java
- 	javadoc -outfile $(srcdir)/doc/java-sql.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/sql/*.java
- 	javadoc -outfile $(srcdir)/doc/java-text.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/text/*.java
- 	javadoc -outfile $(srcdir)/doc/java-util.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/util/*.java
- 	javadoc -outfile $(srcdir)/doc/java-util-jar.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/util/jar/*.java
- 	javadoc -outfile $(srcdir)/doc/java-util-zip.texi -doclet TexinfoDoclet -sourcepath .'$(CLASSPATH_SEPARATOR)'$(srcdir) $(srcdir)/java/util/zip/*.java
- 
  src.zip:
  	-rm -f src.zip
  	here=`pwd`; \
! 	( ( cd $(srcdir); \
  	  find java gnu javax org -name '*.java' -print | \
  	  while read file; do \
  	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo $(srcdir); \
  	    echo $$file; \
  	  done ); \
! 	  find gnu java -name '*.java' -print) | \
  	$(ZIP) -cfM@ $$here/src.zip
! 	for dir in sax w3c_dom; do \
! 	  (cd $(srcdir)/external/$$dir; \
! 	  find org -type f -name '*.java' -print | while read file; do \
  	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo $(srcdir)/external/$$dir; \
  	    echo $$file; \
!           done) | \
! 	  $(ZIP) -ufM0E@ src.zip; \
! 	done
  
  install-src.zip: src.zip
! 	$(INSTALL_DATA) src.zip $(DESTDIR)$(sourcesdir)/src-@gcc_version@.zip
  
! all-recursive: classes.stamp $(nat_headers) $(xlib_nat_headers)
  
  # Multilib support.
  .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
--- 9406,9456 ----
  @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	>> tmp-0212; \
  @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	mv tmp-0212 $(srcdir)/gnu/gcj/convert/JIS0212.h
  
  src.zip:
  	-rm -f src.zip
  	here=`pwd`; \
! 	( \
! 	  ( cd $(srcdir)/classpath; \
  	  find java gnu javax org -name '*.java' -print | \
  	  while read file; do \
  	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo $(srcdir)/classpath; \
  	    echo $$file; \
  	  done ); \
! 	  ( cd classpath; \
! 	    find gnu java -name '*.java' -print | \
! 	    while read file; do \
! 	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo `pwd`; \
! 	    echo $$file; \
! 	  done ); \
! 	) | \
  	$(ZIP) -cfM@ $$here/src.zip
! 	here=`pwd`; \
! 	( \
! 	  ( cd $(srcdir); \
! 	  find gnu java -name '*.java' -print | \
! 	  while read file; do \
  	    echo "x-C" | sed -e 's/^.//'; \
! 	    echo $(srcdir); \
  	    echo $$file; \
! 	  done ); \
! 	) | \
! 	$(ZIP) -ufM@ $$here/src.zip
  
  install-src.zip: src.zip
! 	$(INSTALL_DATA) src.zip $(DESTDIR)$(sourcesdir)/src-$(gcc_version).zip
  
! headers.stamp:
! 	$(MAKE) create-headers
! 	@echo > headers.stamp
! 
! create-headers: $(headers_to_make)
! 
! .PHONY: create-headers
! 
! $(libgcj_la_OBJECTS) $(gcj_dbtool_OBJECTS) $(xlib_nat_files): headers.stamp
! $(libgij_la_OBJECTS): headers.stamp
  
  # Multilib support.
  .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
diff -Nrcpad gcc-4.0.2/libjava/NEWS gcc-4.1.0/libjava/NEWS
*** gcc-4.0.2/libjava/NEWS	Sat Feb 19 00:47:33 2005
--- gcc-4.1.0/libjava/NEWS	Tue Jan 31 13:33:03 2006
***************
*** 1,3 ****
--- 1,294 ----
+ *** Changes in GCC 4.1:
+ 
+ Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19+
+ 
+ - Networking
+ 
+ * The java.net.HttpURLConnection implementation no longer buffers the
+   entire response body in memory.  This means that response bodies
+   larger than available memory can now be handled.
+ 
+ - (N)IO
+ 
+ * NIO FileChannel.map implementation, fast bulk put implementation for
+   DirectByteBuffer (speeds up this method 10x).
+ 
+ * FileChannel.lock() and FileChannel.force() implemented.
+ 
+ - XML
+ 
+ * gnu.xml fix for nodes created outside a namespace context.
+ 
+ * Add support for output indenting and cdata-section-elements output
+   instruction in xml.transform.
+ 
+ * xml.xpath corrections for cases where elements/attributes might have
+   been created in non-namespace-aware mode. Corrections to handling of
+   XSL variables and minor conformance updates.
+ 
+ - AWT
+ 
+ * Qt4 configury switches for OS-X. Additional to the --enable-qt-peer, OS-X
+   users with a Qt4 installation can build the qt-peers with the argument
+   --with-qt4dir=<Qt4-installation-dir>.
+ 
+ * GNU JAWT implementation, the AWT Native Interface, which allows direct
+   access to native screen resources from within a Canvas's paint method.
+   GNU Classpath Examples comes with a Demo,
+   see libjava/classpath/examples/README.
+ 
+ * awt.datatransfer updated to 1.5 with supports for FlavorEvents.
+   The gtk+ awt peers now allow copy/paste of text, images, uris/files
+   and serialized objects with other applications and tracking
+   clipboard change events with gtk+ 2.6 (for gtk+ 2.4 only text and
+   serialized objects are supported). A GNU Classpath Examples
+   datatransfer Demo was added to show the new functionality.
+ 
+ * Split gtk+ awt peers event handling in two threads and improve gdk lock
+   handling (solves several AWT lock ups).
+ 
+ * Speed up awt Image loading.
+ 
+ * Better GTK scrollbar peer implementation when using GTK >= 2.6.
+ 
+ * Handle image loading errors correctly for gdkpixbuf and MediaTracker.
+ 
+ * Better handle GDK lock. Properly prefix gtkpeer native functions (cp_gtk).
+ 
+ * GdkGraphics2D has been updated to use Cairo 0.5.x APIs.
+ 
+ * BufferedImage and GtkImage rewrites. All image drawing operations
+   should now work correctly (flipping requires gtk+ >= 2.6)
+ 
+ * Future Graphics2D, Image and Text work is documented at:
+   http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
+ 
+ * When gtk+ 2.6 or higher is installed the default log handler will produce
+   stack traces whenever a WARNING, CRITICAL or ERROR message is produced.
+ 
+ - Free Swing
+ 
+ * The Swing RepaintManager has been reworked for more efficient painting,
+   especially for large GUIs.
+ 
+ * The Swing layout manager OverlayLayout has been implemented, the BoxLayout
+   has been rewritten to make use of the SizeRequirements utility class and
+   caching for more efficient layout.
+ 
+ * Improved accessibility support for Swing.
+ 
+ * Significant progress has been made in the implementation of the
+   javax.swing.plaf.metal.* package, with most UI delegates in a working state
+   now.  Please test this with your own applications and provide feedback that
+   will help us to improve this package.
+ 
+ * The GUI demo (gnu.classpath.examples.swing.Demo) has been extended to
+   highlight various features in our free-swing implementation. And includes
+   a look and feel switcher (Metal default, Ocean or GNU).
+ 
+ * The javax.swing.plaf.multi.* package is now implemented.
+ 
+ * Editing and several key actions for JTree and JTable were implemented.
+ 
+ * Lots of icons and look and feel improvements for Free Swing basic and
+   metal themes were added.  Try running the GNU Classpath Swing Demo in
+   examples (gnu.classpath.examples.swing.Demo) with:
+   -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFeel
+   -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel
+ 
+ * Start of styled text capabilites for java.swing.text.
+ 
+ * DefaultMutableTreeNode preorder, postorder, depthFirst and breadthFirst
+   traversal enumerations implemented.
+ 
+ * JInternalFrame colors and titlebar draw properly.
+ 
+ * JTree is working up to par (icons, selection and keyboard traversal).
+ 
+ * JMenus were made more compatible in visual and programmatic behavior.
+ 
+ * JTable changeSelection and multiple selections implemented.
+ 
+ * JButton and JToggleButton change states work properly now.
+ 
+ * JFileChooser fixes.
+ 
+ * revalidate and repaint fixes which make Free Swing much more responsive.
+ 
+ * MetalIconFactory implemented.
+ 
+ * Free Swing Top-Level Compatibility. JFrame, JDialog, JApplet,
+   JInternalFrame, and JWindow are now 1.5 compatible in the sense that you
+   can call add() and setLayout() directly on them, which will have the same
+   effect as calling getContentPane().add() and getContentPane().setLayout().
+ 
+ * The JTree interface has been completed. JTrees now recognizes mouse clicks
+   and selections work, but the visual implementation is not yet complete.
+   Work on expansion and collapsing of the tree nodes is being implemented.
+ 
+ * BoxLayout works properly now.
+ 
+ * Fixed GrayFilter to actually work.
+ 
+ * Metal SplitPane implemented.
+ 
+ * Lots of free swing text and editor stuff work now.
+ 
+ - Free RMI and Corba
+ 
+ * The Andrew Watson, Vice President and Technical Director of the Object
+   Management Group, has officially assigned us 20 bit Vendor Minor Code Id:
+   0x47430 ("GC") that will mark remote Classpath - specific system exceptions.
+   Obtaining the VMCID means that GNU Classpath now is a recogniseable type of
+   node in a highly interoperable CORBA world.
+ 
+ * Classpath now includes the first working draft to support the RMI over
+   IIOP protocol. The current implementation is capable for remote invocations,
+   transferring various Serializables and Externalizables via RMI-IIOP protocol.
+   It can flatten graphs and, at least for the simple cases, is interoperable
+   with Sun's jdk 1.5.
+ 
+ * org.omg.PortableInterceptor and related functionality in other packages
+   is now implemented:
+     - The sever and client interceptors work as required since 1.4.
+     - The IOR interceptor works as needed for 1.5.
+ 
+ * The org.omg.DynamicAny package is completed and passes the prepared tests.
+ 
+ * The Portable Object Adapter should now support the output of the
+   recent IDL to java compilers. These compilers now generate servants and
+   not CORBA objects as before, making the output depended on the existing
+   POA implementation. Completing POA means that such code can already be
+   tried to run on Classpath. Our POA is tested for the following usager
+   scenarios:
+     - POA converts servant to the CORBA object.
+     - Servant provides to the CORBA object.
+     - POA activates new CORBA object with the given Object Id (byte array)
+       that is later accessible for the servant.
+     - During the first call, the ServantActivator provides servant for this
+       and all subsequent calls on the current object.
+     - During each call, the ServantLocator provides servant for this call
+       only.
+     - ServantLocator or ServantActivator forwards call to another server.
+     - POA has a single servant, responsible for all objects.
+     - POA has a default servant, but some objects are explicitly connected
+       to they specific servants.
+   The POA is verified using tests from the former cost.omg.org.
+ 
+ * The CORBA implementation is now a working prototype that should support
+   features up till 1.3 inclusive.
+   We would invite groups writing CORBA dependent applications to
+   try Classpath implementation, reporting any possible bugs.
+ 
+   The CORBA prototype is interoperable with Sun's implementation v 1.4,
+   transferring object references, primitive types, narrow and wide
+   strings, arrays, structures, trees, abstract interfaces and
+   value types (feature of CORBA 2.3) between these two platforms.
+   The remote exceptions are transferred and handled correctly.
+   The stringified object references (IORs) from various sources are
+   parsed as required.
+   The transient (for current session) and permanent (till jre restart)
+   redirections work.
+   Both Little and Big Endian encoded messages are accepted.
+   The implementation is verified using tests from the former cost.omg.org.
+   The current release includes working examples (see the examples directory),
+   demonstrating the client-server communication, using either CORBA Request
+   or IDL-based  stub (usually generated by a IDL to java compiler).
+   These examples also show how to use the Classpath CORBA naming service.
+   The IDL to java compiler is not yet written, but as our library must be
+   compatible, it naturally accepts the output of other idlj implementations.
+ 
+ - Misc
+ 
+ * Updated TimeZone data against Olson tzdata2005l.
+ 
+ * Make zip and jar UTF-8 "clean".
+ 
+ * "native" code builds and compiles (warning free) on Darwin and Solaris.
+ 
+ * java.util.logging.FileHandler now rotates files.
+ 
+ * Start of a generic JDWP framework in gnu/classpath/jdwp.
+   This is unfinished, but feedback (at classpath@gnu.org) from runtime
+   hackers is greatly appreciated. Although most of the work is currently
+   being done around gcj/gij we want this framework to be as VM neutral as
+   possible. Early design is described in:
+   http://gcc.gnu.org/ml/java/2005-05/msg00260.html
+ 
+ * QT4 AWT peers, enable by giving configure --enable-qt-peer.
+   Included, but not ready for production yet. They are explicitly
+   disabled and not supported. But if you want to help with the
+   development of these new features we are interested in feedback. You
+   will have to explicitly enable them to try them out
+   (and they will most likely contain bugs).
+ 
+ * Documentation fixes all over the place.
+   See http://developer.classpath.org/doc/
+ 
+ Thanks! The following people helped with the above new features, bug
+ reports, testing and integration:
+ 
+ Aaron Luchko (JDWP updates and documentation fixes) Andreas Jaeger
+ (mprec updates) Andreas Tobler (Darwin and Solaris testing and fixing,
+ Qt4 support for Darwin/OSX, Graphics2D support, gtk+ updates.)  Andrew
+ Haley (Serialization and URLClassLoader fixes, gcj build speedups)
+ Andrew John Hughes (Locale and net fixes, URI RFC2986 updates,
+ Serialization fixes, Properties XML support and generic branch work,
+ VMIntegration guide update) Andrew Overholt (File locking) Anthony
+ Balkissoon (JList, Free Swing 1.5 updates and mouse event fixes, Lots
+ of Free Swing work including JTable editing) Anthony Green (MIDI
+ framework, ALSA and DSSI providers) Archie Cobbs (Build fixes, VM
+ interface updates, URLClassLoader updates) Audrius Meskauskas (Lots of
+ Free Corba, RMI and HTML work plus testing and documenting) Bastiaan
+ Huisman (TimeZone bug fixing) Bryce McKinlay (RMI work) Casey Marshall
+ (Crypto algorithm fixes, FileChannel lock, SystemLogger and
+ FileHandler rotate impl, NIO FileChannel.map support, security and
+ policy updates) Chris Burdess (Lots of gnu.xml and http protocol
+ fixes, StAX and dom xml:id support) Christian Schlichtherle (Zip fixes
+ and cleanups) Christian Thalinger (64-bit cleanups, Configuration and
+ VM interface fixes and CACAO integration, fdlibm updates) Dalibor
+ Topic (Better DEBUG support, Build cleanups and Kaffe integration. Qt4
+ build infrastructure, SHA1PRNG and GdkPixbugDecoder updates) Daniel
+ Bonniot (Serialization fixes) David Daney (BitSet bugfixes,
+ HttpURLConnection rewrite and improvements) David Gilbert (Basic and
+ Metal icon and plaf and lots of documenting, Lots of Free Swing and
+ metal theme additions. MetalIconFactory implementation) David
+ Lichteblau (JCL support library global/local reference cleanups) Gael
+ Thomas (VMClassLoader boot packages support sugestions) Gary Benson
+ (MessageFormat fixes) Goffredo Baroncelli (HTTPURLConnection fixes)
+ Guilhem Lavaux (Configuration, thread and channel fixes and Kaffe
+ integration. JCL native Pointer updates. Logger bug fixes) Ingo
+ Proetel (Image, Logger and URLClassLoader updates) Ito Kazumitsu
+ (NetworkInterfaces implementation and updates) Jan Roehrich
+ (BasicTreeUI and JTree fixes) Jeroen Frijters (ClassLoader and nio
+ cleanups, Serialization fixes, better Proxy support, bug fixes and
+ IKVM integration) Julian Scheid (Documentation updates and gjdoc
+ support) Ka-Hing Cheung (TreePath and TreeSelection fixes) Kalle Olavi
+ Niemitalo (Build fixes) Keith Seitz (Lots of JDWP work) Kelley Cook
+ (Build fixes) Kim Ho (JFileChooser implementation) Lillian Angel
+ (JTree implementation and lots Free Swing additions and bug fixes)
+ Mark Wielaard (Bug fixes, packaging and release management, Clipboard
+ implementation, System call interrupts and network timeouts and
+ GdkPixpufDecoder fixes) Martin Cordova (Suggestions for better
+ SocketTimeoutException) Michael Koch (Configuration fixes. Locale
+ updates, bug and build fixes) Nicolas Geoffray (VMClassLoader and
+ AccessController improvements) Olga Rodimina (MenuSelectionManager)
+ Paul Jenner (Better -Werror support) Rainer Orth (Build fixes) Robert
+ Schuster (Documentation updates and beans fixes, TreeNode enumerations
+ and ActionCommand and various fixes, XML and URL, AWT and Free Swing
+ bug fixes) Roman Kennke (BoxLayout, GrayFilter and SplitPane, plus
+ bugfixes all over. Lots of Free Swing work including styled text)
+ Santiago Gala (AccessControlContext fixes) Simon Kitching (String
+ cleanups and optimization suggestions) Stuart Ballard (RMI constant
+ fixes) Sven de Marothy (BMP imageio support, CSS and TextLayout
+ fixes. GtkImage rewrite, 2D, awt, free swing and date/time fixes, Qt4
+ peers) Thomas Fitzsimmons (Lot of upgrades to the gtk+ AWT and cairo
+ 2D support. Lots of imageio framework additions, lots of AWT and Free
+ Swing bug fixes) Tom Tromey (Eclipse integration, generics work, lots
+ of bug fixes and gcj integration including coordinating The Big Merge)
+ Wolfgang Baer (GapContent bug fixes) Ziga Mahkovec (Graphics2D
+ upgraded to cairo 0.5 and new regex features)
+ 
  *** Changes in GCC 4.0:
  
  * Character encoders and decoders have been added for: iso-8859-6
diff -Nrcpad gcc-4.0.2/libjava/acinclude.m4 gcc-4.1.0/libjava/acinclude.m4
*** gcc-4.0.2/libjava/acinclude.m4	Thu Sep 23 01:14:00 2004
--- gcc-4.1.0/libjava/acinclude.m4	Thu Jan  1 00:00:00 1970
***************
*** 1,37 ****
- m4_include(../config/no-executables.m4)
- 
- dnl The lines below arrange for aclocal not to bring libtool.m4
- dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
- dnl to add a definition of LIBTOOL to Makefile.in.
- m4_include(../libtool.m4)
- ifelse(yes,no,[
- AC_DEFUN([AM_PROG_LIBTOOL],)
- AC_DEFUN([AC_LIBTOOL_DLOPEN],)
- AC_DEFUN([AC_LIBLTDL_CONVENIENCE],)
- AC_DEFUN([LT_AC_PROG_GCJ],)
- AC_SUBST(GCJ)
- AC_SUBST(LIBTOOL)
- ])
- AC_DEFUN([CHECK_FOR_BROKEN_MINGW_LD],
- [
- AC_MSG_CHECKING(whether 'ld' is at least 2.13)
- LD_PROG=`$CC --print-prog-name=ld`
- LD_VERSION=`$LD_PROG --version`
- LD_VERSION_MAJOR=`echo "$LD_VERSION" | head -1 | cut -d '.' -f 1 | cut -d ' ' -f 4`
- LD_VERSION_MINOR=`echo "$LD_VERSION" | head -1 | cut -d '.' -f 2`
- if expr "$LD_VERSION_MAJOR" \> 2 > /dev/null; then
-   LD_OK="ok"
- else
-   if expr "$LD_VERSION_MAJOR" = 2 && expr "$LD_VERSION_MINOR" \>= 13 > /dev/null; then
-     LD_OK="ok"
-   fi
- fi
- if test "x$LD_OK" != x; then
-   AC_MSG_RESULT([yes; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR])
- else
-   AC_MSG_RESULT([no; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR])
-   AC_MSG_WARN([ld <2.13 detected; enabling JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS hack...])
-   AC_DEFINE(JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS, 1,
-             [Indicate that linker is not able to 8-byte align static data])
- fi[]dnl
- ])# CHECK_FOR_BROKEN_MINGW_LD
--- 0 ----
diff -Nrcpad gcc-4.0.2/libjava/aclocal.m4 gcc-4.1.0/libjava/aclocal.m4
*** gcc-4.0.2/libjava/aclocal.m4	Wed Sep 28 06:16:38 2005
--- gcc-4.1.0/libjava/aclocal.m4	Tue Feb 28 08:39:11 2006
*************** AC_DEFUN([AM_PROG_INSTALL_SH],
*** 577,615 ****
  install_sh=${install_sh-"$am_aux_dir/install-sh"}
  AC_SUBST(install_sh)])
  
- #                                                          -*- Autoconf -*-
- # Copyright (C) 2003  Free Software Foundation, Inc.
- 
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2, or (at your option)
- # any later version.
- 
- # This program 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 General Public License for more details.
- 
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- # 02111-1307, USA.
- 
- # serial 1
- 
- # Check whether the underlying file-system supports filenames
- # with a leading dot.  For instance MS-DOS doesn't.
- AC_DEFUN([AM_SET_LEADING_DOT],
- [rm -rf .tst 2>/dev/null
- mkdir .tst 2>/dev/null
- if test -d .tst; then
-   am__leading_dot=.
- else
-   am__leading_dot=_
- fi
- rmdir .tst 2>/dev/null
- AC_SUBST([am__leading_dot])])
- 
  # Add --enable-maintainer-mode option to configure.
  # From Jim Meyering
  
--- 577,582 ----
*************** AC_SUBST([am__tar])
*** 1128,1141 ****
  AC_SUBST([am__untar])
  ]) # _AM_PROG_TAR
  
- m4_include([../config/accross.m4])
  m4_include([../config/acx.m4])
! m4_include([../config/gcc-version.m4])
  m4_include([../config/gxx-include-dir.m4])
  m4_include([../config/iconv.m4])
  m4_include([../config/lcmessage.m4])
  m4_include([../config/lib-ld.m4])
  m4_include([../config/lib-link.m4])
  m4_include([../config/lib-prefix.m4])
  m4_include([pkg.m4])
! m4_include([acinclude.m4])
--- 1095,1113 ----
  AC_SUBST([am__untar])
  ]) # _AM_PROG_TAR
  
  m4_include([../config/acx.m4])
! m4_include([../config/depstand.m4])
! m4_include([../config/enable.m4])
  m4_include([../config/gxx-include-dir.m4])
  m4_include([../config/iconv.m4])
  m4_include([../config/lcmessage.m4])
+ m4_include([../config/lead-dot.m4])
  m4_include([../config/lib-ld.m4])
  m4_include([../config/lib-link.m4])
  m4_include([../config/lib-prefix.m4])
+ m4_include([../config/no-executables.m4])
+ m4_include([../config/tls.m4])
+ m4_include([../libtool.m4])
+ m4_include([mingwld.m4])
  m4_include([pkg.m4])
! m4_include([shlibpath.m4])
diff -Nrcpad gcc-4.0.2/libjava/boehm.cc gcc-4.1.0/libjava/boehm.cc
*** gcc-4.0.2/libjava/boehm.cc	Mon Mar 28 18:21:04 2005
--- gcc-4.1.0/libjava/boehm.cc	Fri Jun 24 22:14:03 2005
***************
*** 1,6 ****
  // boehm.cc - interface between libjava and Boehm GC.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation
  
     This file is part of libgcj.
--- 1,6 ----
  // boehm.cc - interface between libjava and Boehm GC.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation
  
     This file is part of libgcj.
*************** _Jv_MarkObj (void *addr, void *msp, void
*** 191,197 ****
  	      // static members.
  	      // Note that field->u.addr may be null if the class c is
  	      // JV_STATE_LOADED but not JV_STATE_PREPARED (initialized).
! 	      if (JvFieldIsRef (field) && p && field->isResolved()) 
  		{
  		  jobject val = *(jobject*) p;
  		  p = (GC_PTR) val;
--- 191,201 ----
  	      // static members.
  	      // Note that field->u.addr may be null if the class c is
  	      // JV_STATE_LOADED but not JV_STATE_PREPARED (initialized).
! 	      // Note also that field->type could be NULL in some
! 	      // situations, for instance if the class has state
! 	      // JV_STATE_ERROR.
! 	      if (field->type && JvFieldIsRef (field)
! 		  && p && field->isResolved()) 
  		{
  		  jobject val = *(jobject*) p;
  		  p = (GC_PTR) val;
*************** _Jv_MarkObj (void *addr, void *msp, void
*** 250,255 ****
--- 254,262 ----
  	  p = (GC_PTR) ic->interpreted_methods;
  	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic);
  
+ 	  p = (GC_PTR) ic->source_file_name;
+ 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic);
+ 
  	  for (int i = 0; i < c->method_count; i++)
  	    {
  	      // The interpreter installs a heap-allocated trampoline
*************** _Jv_MarkObj (void *addr, void *msp, void
*** 291,296 ****
--- 298,305 ----
  		    = (_Jv_InterpMethod *) ic->interpreted_methods[i];
  		  if (im)
  		    {
+                       p = (GC_PTR) im->line_table;
+                       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic);
  		      p = (GC_PTR) im->prepared;
  		      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic);
  		    }
diff -Nrcpad gcc-4.0.2/libjava/classpath/.cdtproject gcc-4.1.0/libjava/classpath/.cdtproject
*** gcc-4.0.2/libjava/classpath/.cdtproject	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.cdtproject	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,3 ----
+ <?xml version='1.0'?>
+ <?eclipse-cdt version="2.0"?>
+ <cdtproject/>
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/.classpath gcc-4.1.0/libjava/classpath/.classpath
*** gcc-4.0.2/libjava/classpath/.classpath	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.classpath	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,10 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <classpath>
+ 	<classpathentry excluding=".externalToolBuilders/|.settings/|ChangeLog*|Makefile*|autom4te.cache/|compat/|config*|doc/|examples/|external/|gnu/javax/swing/plaf/|include/|install/|lib/|m4/|native/|resource/|scripts/|test/|testsuite/|vm/reference/" kind="src" path=""/>
+ 	<classpathentry kind="src" path="resource"/>
+ 	<classpathentry kind="src" path="vm/reference"/>
+ 	<classpathentry kind="src" path="external/sax"/>
+ 	<classpathentry kind="src" path="external/w3c_dom"/>
+ 	<classpathentry kind="src" path="examples"/>
+ 	<classpathentry kind="output" path="install/share/classpath"/>
+ </classpath>
diff -Nrcpad gcc-4.0.2/libjava/classpath/.externalToolBuilders/Autogen.launch gcc-4.1.0/libjava/classpath/.externalToolBuilders/Autogen.launch
*** gcc-4.0.2/libjava/classpath/.externalToolBuilders/Autogen.launch	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.externalToolBuilders/Autogen.launch	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,11 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType">
+ <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="./autogen.sh"/>
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
+ <stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/>
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${build_project}"/>
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/bin/sh"/>
+ <booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
+ <booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+ </launchConfiguration>
diff -Nrcpad gcc-4.0.2/libjava/classpath/.externalToolBuilders/CompileNative.launch gcc-4.1.0/libjava/classpath/.externalToolBuilders/CompileNative.launch
*** gcc-4.0.2/libjava/classpath/.externalToolBuilders/CompileNative.launch	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.externalToolBuilders/CompileNative.launch	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,2 ----
+ <?xml version='1.0'?>
+ <launchConfiguration type='org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType'><stringAttribute key='org.eclipse.debug.core.ATTR_REFRESH_SCOPE' value='${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;working set&quot; editPageId=&quot;org.eclipse.ui.resourceWorkingSetPage&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native&quot; type=&quot;2&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS' value='full,incremental,'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE' value='${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;workingSet&quot; editPageId=&quot;org.eclipse.ui.resourceWorkingSetPage&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native&quot; type=&quot;2&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_LOCATION' value='${system_path:make}'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY' value='${build_project}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS' value='-C ${build_project}/native all install'/><booleanAttribute key='org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND' value='false'/><booleanAttribute key='org.eclipse.debug.core.appendEnvironmentVariables' value='true'/></launchConfiguration>
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/.externalToolBuilders/Configure.launch gcc-4.1.0/libjava/classpath/.externalToolBuilders/Configure.launch
*** gcc-4.0.2/libjava/classpath/.externalToolBuilders/Configure.launch	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.externalToolBuilders/Configure.launch	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,2 ----
+ <?xml version='1.0'?>
+ <launchConfiguration type='org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType'><stringAttribute key='org.eclipse.debug.core.ATTR_REFRESH_SCOPE' value='${project}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS' value='full,incremental,'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_LOCATION' value='${build_project}/configure'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY' value='${build_project}'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS' value='--prefix=${build_project}/install'/><booleanAttribute key='org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND' value='false'/><booleanAttribute key='org.eclipse.debug.core.appendEnvironmentVariables' value='true'/></launchConfiguration>
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/.externalToolBuilders/CreateLocaleData.launch gcc-4.1.0/libjava/classpath/.externalToolBuilders/CreateLocaleData.launch
*** gcc-4.0.2/libjava/classpath/.externalToolBuilders/CreateLocaleData.launch	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.externalToolBuilders/CreateLocaleData.launch	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,2 ----
+ <?xml version='1.0'?>
+ <launchConfiguration type='org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType'><stringAttribute key='org.eclipse.debug.core.ATTR_REFRESH_SCOPE' value='${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;working set&quot; editPageId=&quot;org.eclipse.ui.resourceWorkingSetPage&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/java/util&quot; type=&quot;2&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS' value='full,incremental,'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_LOCATION' value='${system_path:make}'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY' value='${build_project}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS' value='-C ${build_project}/lib ../java/util/LocaleData.java'/><booleanAttribute key='org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND' value='false'/><booleanAttribute key='org.eclipse.debug.core.appendEnvironmentVariables' value='true'/></launchConfiguration>
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/.project gcc-4.1.0/libjava/classpath/.project
*** gcc-4.0.2/libjava/classpath/.project	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.project	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,57 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <projectDescription>
+ 	<name>classpath</name>
+ 	<comment></comment>
+ 	<projects>
+ 	</projects>
+ 	<buildSpec>
+ 		<buildCommand>
+ 			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+ 			<triggers>full,incremental,</triggers>
+ 			<arguments>
+ 				<dictionary>
+ 					<key>LaunchConfigHandle</key>
+ 					<value>&lt;project&gt;/.externalToolBuilders/Autogen.launch</value>
+ 				</dictionary>
+ 			</arguments>
+ 		</buildCommand>
+ 		<buildCommand>
+ 			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+ 			<triggers>full,incremental,</triggers>
+ 			<arguments>
+ 				<dictionary>
+ 					<key>LaunchConfigHandle</key>
+ 					<value>&lt;project&gt;/.externalToolBuilders/Configure.launch</value>
+ 				</dictionary>
+ 			</arguments>
+ 		</buildCommand>
+ 		<buildCommand>
+ 			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+ 			<triggers>full,incremental,</triggers>
+ 			<arguments>
+ 				<dictionary>
+ 					<key>LaunchConfigHandle</key>
+ 					<value>&lt;project&gt;/.externalToolBuilders/CreateLocaleData.launch</value>
+ 				</dictionary>
+ 			</arguments>
+ 		</buildCommand>
+ 		<buildCommand>
+ 			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+ 			<triggers>full,incremental,</triggers>
+ 			<arguments>
+ 				<dictionary>
+ 					<key>LaunchConfigHandle</key>
+ 					<value>&lt;project&gt;/.externalToolBuilders/CompileNative.launch</value>
+ 				</dictionary>
+ 			</arguments>
+ 		</buildCommand>
+ 		<buildCommand>
+ 			<name>org.eclipse.jdt.core.javabuilder</name>
+ 			<arguments>
+ 			</arguments>
+ 		</buildCommand>
+ 	</buildSpec>
+ 	<natures>
+ 		<nature>org.eclipse.jdt.core.javanature</nature>
+ 	</natures>
+ </projectDescription>
diff -Nrcpad gcc-4.0.2/libjava/classpath/.settings/org.eclipse.core.resources.prefs gcc-4.1.0/libjava/classpath/.settings/org.eclipse.core.resources.prefs
*** gcc-4.0.2/libjava/classpath/.settings/org.eclipse.core.resources.prefs	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.settings/org.eclipse.core.resources.prefs	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3 ----
+ #Mon Sep 20 12:53:19 MDT 2004
+ eclipse.preferences.version=1
+ encoding/ChangeLog=ISO-8859-1
diff -Nrcpad gcc-4.0.2/libjava/classpath/.settings/org.eclipse.jdt.core.prefs gcc-4.1.0/libjava/classpath/.settings/org.eclipse.jdt.core.prefs
*** gcc-4.0.2/libjava/classpath/.settings/org.eclipse.jdt.core.prefs	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.settings/org.eclipse.jdt.core.prefs	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,304 ----
+ #Tue Sep 13 16:15:04 MDT 2005
+ eclipse.preferences.version=1
+ org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+ org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+ org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+ org.eclipse.jdt.core.compiler.compliance=1.5
+ org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+ org.eclipse.jdt.core.compiler.debug.localVariable=generate
+ org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+ org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+ org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+ org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+ org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+ org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+ org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+ org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+ org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+ org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+ org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+ org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+ org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+ org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+ org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+ org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+ org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+ org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+ org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+ org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+ org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+ org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+ org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+ org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+ org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+ org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+ org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+ org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+ org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+ org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+ org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+ org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+ org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+ org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+ org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+ org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+ org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+ org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+ org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+ org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+ org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+ org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+ org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+ org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+ org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+ org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+ org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+ org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+ org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+ org.eclipse.jdt.core.compiler.source=1.4
+ org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+ org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=18
+ org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+ org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=18
+ org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=18
+ org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=18
+ org.eclipse.jdt.core.formatter.alignment_for_binary_expression=18
+ org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+ org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=82
+ org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=18
+ org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+ org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=18
+ org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=18
+ org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
+ org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+ org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+ org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+ org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+ org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+ org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+ org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+ org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+ org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+ org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+ org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+ org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+ org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+ org.eclipse.jdt.core.formatter.blank_lines_before_package=2
+ org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+ org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+ org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+ org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+ org.eclipse.jdt.core.formatter.brace_position_for_block=next_line_shifted
+ org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+ org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+ org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+ org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+ org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+ org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line_shifted
+ org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+ org.eclipse.jdt.core.formatter.comment.clear_blank_lines=true
+ org.eclipse.jdt.core.formatter.comment.format_comments=true
+ org.eclipse.jdt.core.formatter.comment.format_header=false
+ org.eclipse.jdt.core.formatter.comment.format_html=true
+ org.eclipse.jdt.core.formatter.comment.format_source_code=true
+ org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+ org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+ org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+ org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+ org.eclipse.jdt.core.formatter.comment.line_length=80
+ org.eclipse.jdt.core.formatter.compact_else_if=true
+ org.eclipse.jdt.core.formatter.continuation_indentation=2
+ org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+ org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+ org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+ org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+ org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+ org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+ org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+ org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+ org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+ org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+ org.eclipse.jdt.core.formatter.indentation.size=4
+ org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+ org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+ org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+ org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+ org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+ org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=insert
+ org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+ org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+ org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true
+ org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+ org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+ org.eclipse.jdt.core.formatter.lineSplit=80
+ org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+ org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+ org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+ org.eclipse.jdt.core.formatter.tabulation.char=space
+ org.eclipse.jdt.core.formatter.tabulation.size=2
diff -Nrcpad gcc-4.0.2/libjava/classpath/.settings/org.eclipse.jdt.ui.prefs gcc-4.1.0/libjava/classpath/.settings/org.eclipse.jdt.ui.prefs
*** gcc-4.0.2/libjava/classpath/.settings/org.eclipse.jdt.ui.prefs	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/.settings/org.eclipse.jdt.ui.prefs	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,5 ----
+ #Sat Sep 17 22:04:29 MDT 2005
+ eclipse.preferences.version=1
+ formatter_settings_version=8
+ internal.default.compliance=user
+ org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates><template id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment" description\="Comment for getter method" context\="gettercomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * @return Returns the ${bare_field_name}.\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment" description\="Comment for setter method" context\="settercomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * @param ${param} The ${bare_field_name} to set.\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment" description\="Comment for created constructors" context\="constructorcomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * ${tags}\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment" description\="Comment for created Java files" context\="filecomment_context" enabled\="true" deleted\="false" autoinsert\="false">/* ${file_name} -- FIXME describe the file briefly\n   Copyright (C) ${year} Free Software Foundation, Inc.\n\nThis file is part of GNU Classpath.\n\nGNU Classpath is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2, or (at your option)\nany later version.\n\nGNU Classpath is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with GNU Classpath; see the file COPYING.  If not, write to the\nFree Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA\n02110-1301 USA.\n\nLinking this library statically or dynamically with other modules is\nmaking a combined work based on this library.  Thus, the terms and\nconditions of the GNU General Public License cover the whole\ncombination.\n\nAs a special exception, the copyright holders of this library give you\npermission to link this library with independent modules to produce an\nexecutable, regardless of the license terms of these independent\nmodules, and to copy and distribute the resulting executable under\nterms of your choice, provided that you also meet, for each linked\nindependent module, the terms and conditions of the license of that\nmodule.  An independent module is a module which is not derived from\nor based on this library.  If you modify this library, you may extend\nthis exception to your version of the library, but you are not\nobligated to do so.  If you do not wish to do so, delete this\nexception statement from your version. */\n\n\n</template><template id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment" description\="Comment for created types" context\="typecomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment" description\="Comment for fields" context\="fieldcomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * \n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment" description\="Comment for non-overriding methods" context\="methodcomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * ${tags}\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment" description\="Comment for overriding methods" context\="overridecomment_context" enabled\="true" deleted\="false" autoinsert\="true">/* (non-Javadoc)\n * ${see_to_overridden}\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype" description\="Newly created files" context\="newtype_context" enabled\="true" deleted\="false" autoinsert\="false">/* ${file_name} -- FIXME\: briefly describe file purpose\n   Copyright (C) ${year} Free Software Foundation, Inc.\n\nThis file is part of GNU Classpath.\n\nGNU Classpath is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2, or (at your option)\nany later version.\n\nGNU Classpath is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with GNU Classpath; see the file COPYING.  If not, write to the\nFree Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA\n02110-1301 USA.\n\nLinking this library statically or dynamically with other modules is\nmaking a combined work based on this library.  Thus, the terms and\nconditions of the GNU General Public License cover the whole\ncombination.\n\nAs a special exception, the copyright holders of this library give you\npermission to link this library with independent modules to produce an\nexecutable, regardless of the license terms of these independent\nmodules, and to copy and distribute the resulting executable under\nterms of your choice, provided that you also meet, for each linked\nindependent module, the terms and conditions of the license of that\nmodule.  An independent module is a module which is not derived from\nor based on this library.  If you modify this library, you may extend\nthis exception to your version of the library, but you are not\nobligated to do so.  If you do not wish to do so, delete this\nexception statement from your version. */\n\n\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock" description\="Code in new catch blocks" context\="catchblock_context" enabled\="true" deleted\="false" autoinsert\="true">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody" description\="Code in created method stubs" context\="methodbody_context" enabled\="true" deleted\="false" autoinsert\="true">// ${todo} Auto-generated method stub\n${body_statement}</template><template id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody" description\="Code in created constructor stubs" context\="constructorbody_context" enabled\="true" deleted\="false" autoinsert\="true">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody" description\="Code in created getters" context\="getterbody_context" enabled\="true" deleted\="false" autoinsert\="true">return ${field};</template><template id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody" description\="Code in created setters" context\="setterbody_context" enabled\="true" deleted\="false" autoinsert\="true">${field} \= ${param};</template></templates>
diff -Nrcpad gcc-4.0.2/libjava/classpath/AUTHORS gcc-4.1.0/libjava/classpath/AUTHORS
*** gcc-4.0.2/libjava/classpath/AUTHORS	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/AUTHORS	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,36 ----
+ The following have made major contributions to the Classpath
+ project. See also the THANKYOU file, which lists people who have
+ caught bugs or submitted minor patches. If your name does not appear
+ on either list, but should, let us know. Please keep this list in
+ alphabetic order.
+ 
+ Lillian Angel (langel@redhat.com)
+ Anthony Balkissoon (abalkiss@redhat.com)
+ Stuart Ballard (stuart.a.ballard@gmail.com)
+ Mark Benvenuto (mcb54@columbia.edu)
+ Geoff Berry (gcb@gnu.org)
+ James E. Blair (corvus@gnu.org)
+ Eric Blake (ebb9@email.byu.edu)
+ Sascha Brawer (brawer@acm.org)
+ Nic Ferrier (nferrier@tapsellferrier.co.uk)
+ Paul Fisher (rao@gnu.org)
+ David Gilbert (david.gilbert@object-refinery.com)
+ Anthony Green (green@redhat.com)
+ Jochen Hoenicke (Jochen.Hoenicke@Informatik.Uni-Oldenburg.de)
+ Andrew John Hughes (gnu_andrew@member.fsf.org)
+ Brian Jones (cbj@gnu.org)
+ Roman Kennke (roman@kennke.org) 
+ Michael Koch (konqueror@gmx.de)
+ John Keiser (jkeiser@iname.com)
+ John Leuner (jewel@debian.org)
+ Warren Levy (warrenl@cygnus.com)
+ Sven de Marothy (sven@physto.se)
+ Bryce McKinlay (bryce@waitaki.otago.ac.nz)
+ Audrius Meskauskas (audriusa@Bioinformatics.org)
+ Aaron M. Renn (arenn@urbanophile.com)
+ Andrew Selkirk (aselkirk@sympatico.ca)
+ Christian Thalinger (twisti@complang.tuwien.ac.at)
+ Tom Tromey (tromey@cygnus.com)
+ Ronald Veldema (rveldema@cs.vu.nl)
+ Mark Wielaard (mark@klomp.org)
+ Jon A. Zeppieri (jon@eease.com)
diff -Nrcpad gcc-4.0.2/libjava/classpath/BUGS gcc-4.1.0/libjava/classpath/BUGS
*** gcc-4.0.2/libjava/classpath/BUGS	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/BUGS	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,5 ----
+ This package is still in the early development phase.  That means too
+ early to start listing bugs in a file like this one!
+ 
+ Report bugs to classpath@gnu.org or much better via Savannah at this
+ URL: http://www.gnu.org/software/classpath/bugs.html
diff -Nrcpad gcc-4.0.2/libjava/classpath/COPYING gcc-4.1.0/libjava/classpath/COPYING
*** gcc-4.0.2/libjava/classpath/COPYING	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/COPYING	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,340 ----
+ 		    GNU GENERAL PUBLIC LICENSE
+ 		       Version 2, June 1991
+ 
+  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+      51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+  Everyone is permitted to copy and distribute verbatim copies
+  of this license document, but changing it is not allowed.
+ 
+ 			    Preamble
+ 
+   The licenses for most software are designed to take away your
+ freedom to share and change it.  By contrast, the GNU General Public
+ License is intended to guarantee your freedom to share and change free
+ software--to make sure the software is free for all its users.  This
+ General Public License applies to most of the Free Software
+ Foundation's software and to any other program whose authors commit to
+ using it.  (Some other Free Software Foundation software is covered by
+ the GNU Library General Public License instead.)  You can apply it to
+ your programs, too.
+ 
+   When we speak of free software, we are referring to freedom, not
+ price.  Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ this service if you wish), that you receive source code or can get it
+ if you want it, that you can change the software or use pieces of it
+ in new free programs; and that you know you can do these things.
+ 
+   To protect your rights, we need to make restrictions that forbid
+ anyone to deny you these rights or to ask you to surrender the rights.
+ These restrictions translate to certain responsibilities for you if you
+ distribute copies of the software, or if you modify it.
+ 
+   For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must give the recipients all the rights that
+ you have.  You must make sure that they, too, receive or can get the
+ source code.  And you must show them these terms so they know their
+ rights.
+ 
+   We protect your rights with two steps: (1) copyright the software, and
+ (2) offer you this license which gives you legal permission to copy,
+ distribute and/or modify the software.
+ 
+   Also, for each author's protection and ours, we want to make certain
+ that everyone understands that there is no warranty for this free
+ software.  If the software is modified by someone else and passed on, we
+ want its recipients to know that what they have is not the original, so
+ that any problems introduced by others will not reflect on the original
+ authors' reputations.
+ 
+   Finally, any free program is threatened constantly by software
+ patents.  We wish to avoid the danger that redistributors of a free
+ program will individually obtain patent licenses, in effect making the
+ program proprietary.  To prevent this, we have made it clear that any
+ patent must be licensed for everyone's free use or not licensed at all.
+ 
+   The precise terms and conditions for copying, distribution and
+ modification follow.
+ 
+ 		    GNU GENERAL PUBLIC LICENSE
+    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ 
+   0. This License applies to any program or other work which contains
+ a notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License.  The "Program", below,
+ refers to any such program or work, and a "work based on the Program"
+ means either the Program or any derivative work under copyright law:
+ that is to say, a work containing the Program or a portion of it,
+ either verbatim or with modifications and/or translated into another
+ language.  (Hereinafter, translation is included without limitation in
+ the term "modification".)  Each licensee is addressed as "you".
+ 
+ Activities other than copying, distribution and modification are not
+ covered by this License; they are outside its scope.  The act of
+ running the Program is not restricted, and the output from the Program
+ is covered only if its contents constitute a work based on the
+ Program (independent of having been made by running the Program).
+ Whether that is true depends on what the Program does.
+ 
+   1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any warranty;
+ and give any other recipients of the Program a copy of this License
+ along with the Program.
+ 
+ You may charge a fee for the physical act of transferring a copy, and
+ you may at your option offer warranty protection in exchange for a fee.
+ 
+   2. You may modify your copy or copies of the Program or any portion
+ of it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+ 
+     a) You must cause the modified files to carry prominent notices
+     stating that you changed the files and the date of any change.
+ 
+     b) You must cause any work that you distribute or publish, that in
+     whole or in part contains or is derived from the Program or any
+     part thereof, to be licensed as a whole at no charge to all third
+     parties under the terms of this License.
+ 
+     c) If the modified program normally reads commands interactively
+     when run, you must cause it, when started running for such
+     interactive use in the most ordinary way, to print or display an
+     announcement including an appropriate copyright notice and a
+     notice that there is no warranty (or else, saying that you provide
+     a warranty) and that users may redistribute the program under
+     these conditions, and telling the user how to view a copy of this
+     License.  (Exception: if the Program itself is interactive but
+     does not normally print such an announcement, your work based on
+     the Program is not required to print an announcement.)
+ 
+ These requirements apply to the modified work as a whole.  If
+ identifiable sections of that work are not derived from the Program,
+ and can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works.  But when you
+ distribute the same sections as part of a whole which is a work based
+ on the Program, the distribution of the whole must be on the terms of
+ this License, whose permissions for other licensees extend to the
+ entire whole, and thus to each and every part regardless of who wrote it.
+ 
+ Thus, it is not the intent of this section to claim rights or contest
+ your rights to work written entirely by you; rather, the intent is to
+ exercise the right to control the distribution of derivative or
+ collective works based on the Program.
+ 
+ In addition, mere aggregation of another work not based on the Program
+ with the Program (or with a work based on the Program) on a volume of
+ a storage or distribution medium does not bring the other work under
+ the scope of this License.
+ 
+   3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms of
+ Sections 1 and 2 above provided that you also do one of the following:
+ 
+     a) Accompany it with the complete corresponding machine-readable
+     source code, which must be distributed under the terms of Sections
+     1 and 2 above on a medium customarily used for software interchange; or,
+ 
+     b) Accompany it with a written offer, valid for at least three
+     years, to give any third party, for a charge no more than your
+     cost of physically performing source distribution, a complete
+     machine-readable copy of the corresponding source code, to be
+     distributed under the terms of Sections 1 and 2 above on a medium
+     customarily used for software interchange; or,
+ 
+     c) Accompany it with the information you received as to the offer
+     to distribute corresponding source code.  (This alternative is
+     allowed only for noncommercial distribution and only if you
+     received the program in object code or executable form with such
+     an offer, in accord with Subsection b above.)
+ 
+ The source code for a work means the preferred form of the work for
+ making modifications to it.  For an executable work, complete source
+ code means all the source code for all modules it contains, plus any
+ associated interface definition files, plus the scripts used to
+ control compilation and installation of the executable.  However, as a
+ special exception, the source code distributed need not include
+ anything that is normally distributed (in either source or binary
+ form) with the major components (compiler, kernel, and so on) of the
+ operating system on which the executable runs, unless that component
+ itself accompanies the executable.
+ 
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+ 
+   4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License.  Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this License.
+ However, parties who have received copies, or rights, from you under
+ this License will not have their licenses terminated so long as such
+ parties remain in full compliance.
+ 
+   5. You are not required to accept this License, since you have not
+ signed it.  However, nothing else grants you permission to modify or
+ distribute the Program or its derivative works.  These actions are
+ prohibited by law if you do not accept this License.  Therefore, by
+ modifying or distributing the Program (or any work based on the
+ Program), you indicate your acceptance of this License to do so, and
+ all its terms and conditions for copying, distributing or modifying
+ the Program or works based on it.
+ 
+   6. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject to
+ these terms and conditions.  You may not impose any further
+ restrictions on the recipients' exercise of the rights granted herein.
+ You are not responsible for enforcing compliance by third parties to
+ this License.
+ 
+   7. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent issues),
+ conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License.  If you cannot
+ distribute so as to satisfy simultaneously your obligations under this
+ License and any other pertinent obligations, then as a consequence you
+ may not distribute the Program at all.  For example, if a patent
+ license would not permit royalty-free redistribution of the Program by
+ all those who receive copies directly or indirectly through you, then
+ the only way you could satisfy both it and this License would be to
+ refrain entirely from distribution of the Program.
+ 
+ If any portion of this section is held invalid or unenforceable under
+ any particular circumstance, the balance of the section is intended to
+ apply and the section as a whole is intended to apply in other
+ circumstances.
+ 
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system, which is
+ implemented by public license practices.  Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is willing
+ to distribute software through any other system and a licensee cannot
+ impose that choice.
+ 
+ This section is intended to make thoroughly clear what is believed to
+ be a consequence of the rest of this License.
+ 
+   8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Program under this License
+ may add an explicit geographical distribution limitation excluding
+ those countries, so that distribution is permitted only in or among
+ countries not thus excluded.  In such case, this License incorporates
+ the limitation as if written in the body of this License.
+ 
+   9. The Free Software Foundation may publish revised and/or new versions
+ of the General Public License from time to time.  Such new versions will
+ be similar in spirit to the present version, but may differ in detail to
+ address new problems or concerns.
+ 
+ Each version is given a distinguishing version number.  If the Program
+ specifies a version number of this License which applies to it and "any
+ later version", you have the option of following the terms and conditions
+ either of that version or of any later version published by the Free
+ Software Foundation.  If the Program does not specify a version number of
+ this License, you may choose any version ever published by the Free Software
+ Foundation.
+ 
+   10. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the author
+ to ask for permission.  For software which is copyrighted by the Free
+ Software Foundation, write to the Free Software Foundation; we sometimes
+ make exceptions for this.  Our decision will be guided by the two goals
+ of preserving the free status of all derivatives of our free software and
+ of promoting the sharing and reuse of software generally.
+ 
+ 			    NO WARRANTY
+ 
+   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+ REPAIR OR CORRECTION.
+ 
+   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGES.
+ 
+ 		     END OF TERMS AND CONDITIONS
+ 
+ 	    How to Apply These Terms to Your New Programs
+ 
+   If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these terms.
+ 
+   To do so, attach the following notices to the program.  It is safest
+ to attach them to the start of each source file to most effectively
+ convey the exclusion of warranty; and each file should have at least
+ the "copyright" line and a pointer to where the full notice is found.
+ 
+     <one line to give the program's name and a brief idea of what it does.>
+     Copyright (C) 19yy  <name of author>
+ 
+     This program is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published by
+     the Free Software Foundation; either version 2 of the License, or
+     (at your option) any later version.
+ 
+     This program 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 General Public License for more details.
+ 
+     You should have received a copy of the GNU General Public License
+     along with this program; if not, write to the Free Software
+     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
+ 
+ Also add information on how to contact you by electronic and paper mail.
+ 
+ If the program is interactive, make it output a short notice like this
+ when it starts in an interactive mode:
+ 
+     Gnomovision version 69, Copyright (C) 19yy name of author
+     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+     This is free software, and you are welcome to redistribute it
+     under certain conditions; type `show c' for details.
+ 
+ The hypothetical commands `show w' and `show c' should show the appropriate
+ parts of the General Public License.  Of course, the commands you use may
+ be called something other than `show w' and `show c'; they could even be
+ mouse-clicks or menu items--whatever suits your program.
+ 
+ You should also get your employer (if you work as a programmer) or your
+ school, if any, to sign a "copyright disclaimer" for the program, if
+ necessary.  Here is a sample; alter the names:
+ 
+   Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+   `Gnomovision' (which makes passes at compilers) written by James Hacker.
+ 
+   <signature of Ty Coon>, 1 April 1989
+   Ty Coon, President of Vice
+ 
+ This General Public License does not permit incorporating your program into
+ proprietary programs.  If your program is a subroutine library, you may
+ consider it more useful to permit linking proprietary applications with the
+ library.  If this is what you want to do, use the GNU Library General
+ Public License instead of this License.
diff -Nrcpad gcc-4.0.2/libjava/classpath/ChangeLog gcc-4.1.0/libjava/classpath/ChangeLog
*** gcc-4.0.2/libjava/classpath/ChangeLog	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/ChangeLog	Tue Feb 28 08:29:51 2006
***************
*** 0 ****
--- 1,28355 ----
+ 2006-02-28  Release Manager
+ 
+ 	* GCC 4.1.0 released.
+ 
+ 2006-02-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/security/Security.java (loadProviders): Use system class
+ 	loader.
+ 
+ 2006-01-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/net/protocol/http/ChunkedInputStream.java (read):
+ 	Fixed calculation of number of bytes to read.
+ 	(size, count, meta, eof): Document.
+ 
+ 2006-01-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/security/x509/X509Certificate.java (parse):
+ 	Unconditionally read value; for version==1 case when reading
+ 	algorithm ID.
+ 
+ 2006-01-20  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java: Don't follow
+ 	  redirects on 304.
+ 
+ 2006-01-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java (connect):
+ 	Read response body for redirect.
+ 
+ 2006-01-16  Anthony Green  <green@redhat.com>
+ 
+ 	PR classpath/25803
+ 	* gnu/java/net/protocol/http/Request.java
+ 	  (createResponseBodyStream): Remove Content-Encoding for
+ 	  compressed streams.
+ 
+ 2006-01-14  Anthony Green  <green@redhat.com>
+ 
+         * java/net/ServerSocket.java (accept): Remove bogus
+         security check.
+ 	(implAccept): Add FIXME comment.
+ 
+ 2005-12-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/nio/SelectorImpl.java: Added import.
+ 
+ 2005-12-26  Anthony Green  <green@redhat.com>
+ 
+         * java/net/Socket.java (connect): Don't close the socket on
+         exceptions.
+ 
+         * gnu/java/nio/SocketChannelImpl.java (read): Compute the right amount
+         of data to read (dst.remaining()).
+         * gnu/java/nio/DatagramChannelImpl.java (receive): Ditto.
+ 
+         * gnu/java/nio/SelectorImpl.java (select): Handle OP_CONNECT
+         properly.
+ 
+ 2005-11-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(PlainEditorKit): New inner class.
+ 	(createDefaultEditorKit): Return an instance of PlainEditorKit.
+ 	* javax/swing/JTextPane.java
+ 	(insertComponent): Implemented previously stubbed method.
+ 	(insertIcon): Implemented previously stubbed method.
+ 
+ 2005-11-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicEditorPaneUI.java
+ 	(create): Removed unneeded method.
+ 	* javax/swing/plaf/basic/BasicTextPaneUI.java
+ 	(create): Removed unneeded method.
+ 
+ 2005-11-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Container.java
+ 	(Container): Added comment.
+ 	(remove): Only call removeNotify if removed component is still
+ 	showing.
+ 	(paintComponents): Call paint() instead of super.paint().
+ 	(AccessibleContainerHandler.AccessibleContainerHandler): Added
+ 	comment.
+ 	(LightweightDispatcher.acquireComponentForMouseEvent):
+ 	Don't special case MOUSE_RELEASED events. They should be
+ 	dispatched unmodified just as MOUSE_PRESSED.
+ 	(LightweightDispatcher.handleEvent): Also clean up the pressCount
+ 	after a MOUSE_RELEASE.
+ 
+ 2005-11-17  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/BoxView.java:
+ 	(modelToView): New API method.
+ 
+ 2005-11-17  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes PR classpath/PR24721
+ 	* javax/swing/text/BoxView.java
+ 	(getViewAtPoint): Added check in to return the last view, if one exists and
+ 	the point was not contained in the rectangle. This is what the JDK does.
+ 	* javax/swing/text/CompositeView.java
+ 	(viewToModel): Fixed API documentation. Added check to make sure
+ 	x and y are greater than 0. Otherwise, 0 is returned.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(moveDot): Added check to match API specs.
+ 	(setDot): Likewise.
+ 	* javax/swing/text/GlyphView.java
+ 	(viewToModel): Removed assert. This is not needed here. The point does not
+ 	need to be in the rectangle.
+ 
+ 2005-11-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Reported by Roman Schnider <schnider@aicas.com>:
+ 	* java/awt/Component.java
+ 	(reshape): Removed unused statement.
+ 	(repaint()): Don't forward to parent when not showing.
+ 	(repaint(int)): Don't forward to parent when not showing.
+ 	(repaint(int,int,int,int)): Don't forward to parent when not showing.
+ 	(repaint(float,int,int,int,int)): Don't forward to parent when not
+ 	showing.
+ 
+ 2005-11-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(LeafElement.getName): If super.getName() returns something
+ 	non-null, then return that instead of ContentElementName.
+ 	* javax/swing/text/ComponentView.java
+ 	(comp): New field.
+ 	(getAlignment): Implemented previously stubbed method.
+ 	(getComponent): Implemented previously stubbed method.
+ 	(getMaximumSpan): Implemented previously stubbed method.
+ 	(getMinimumSpan): Implemented previously stubbed method.
+ 	(getPreferredSpan): Implemented previously stubbed method.
+ 	(modelToView): Implemented previously stubbed method.
+ 	(paint): Implemented previously stubbed method.
+ 	(setParent): Implemented previously stubbed method.
+ 	(setSize): Removed unneeded method.
+ 	(viewToModel): Implemented previously stubbed method.
+ 	* javax/swing/text/FlowView.java
+ 	(insertUpdate): Forward this event to the logical view.
+ 	* javax/swing/text/IconView.java
+ 	(paint): Implemented previously stubbed method.
+ 	(getPreferredSpan): Implemented previously stubbed method.
+ 	(modelToView): Implemented previously stubbed method.
+ 	(viewToModel): Implemented previously stubbed method.
+ 	* javax/swing/text/ParagraphView.java
+ 	(firstLineIndent): New field.
+ 	(justification): New field.
+ 	(lineSpacing): New field.
+ 	(tabSet): New field.
+ 	(changedUpdate): New method.
+ 	(setPropertiesFromAttributes): New method.
+ 	(setFirstLineIndent): New method.
+ 	(setJustification): New method.
+ 	(setLineSpacing): New method.
+ 	(getLayoutView): New method.
+ 	(getLayoutViewCount): New method.
+ 	(getTabSet): New method.
+ 
+ 2005-11-17  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicEditorPaneUI.java:
+ 	(create): Create new WrappedPlainView instance instead of PlainView.
+ 
+ 2005-11-17  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+         
+ 	PR 24911
+ 	* classpath/examples/Makefile.am
+ 	(EXAMPLE_JAVA_FILES): Extended by /*/*/*.java and /*/*/*/*.java.
+ 	(READMES): New category.
+ 	(ALL_EXAMPLE_FILES): Extended by READMES category. 
+ 
+ 2004-11-17  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/net/protocol/jar/Connection.java (getHeaderField):
+ 	Implemented.
+ 	(getLastModified): Implemented.
+ 
+ 2005-11-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLClassLoader.java: Reindented.
+ 
+ 2005-11-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JApplet.java
+ 	(paramString): Returns super.paramString() instead of a meaningless
+ 	'JFrame'.
+ 	* javax/swing/JPanel.java
+ 	(paramString): Returns super.paramString() instead of a meaningless
+ 	'JPanel'.
+ 
+ 2005-11-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(installDefaults): Don't handle the Button.rollover property here,
+ 	this is Metal specific and is handled in MetalButtonUI.
+ 
+ 2005-11-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JList.java
+ 	(locationToIndex): Clarified API comment.
+ 
+ 2005-11-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(DefaultTreeCellEditor): Replaced
+ 	UIManager.getLookAndFeelDefaults().getXXX() with UIManager.getXXX().
+ 	(createTreeCellEditor): Replaced
+ 	UIManager.getLookAndFeelDefaults().getXXX() with UIManager.getXXX().
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(DefaultTreeCellRenderer): Replaced
+ 	UIManager.getLookAndFeelDefaults().getXXX() with UIManager.getXXX().
+ 	(getDefaultOpenIcon): Replaced
+ 	UIManager.getLookAndFeelDefaults().getXXX() with UIManager.getXXX().
+ 	(getDefaultClosedIcon): Replaced
+ 	UIManager.getLookAndFeelDefaults().getXXX() with UIManager.getXXX().
+ 	(getDefaultLeafIcon): Replaced
+ 	UIManager.getLookAndFeelDefaults().getXXX() with UIManager.getXXX().
+ 	(getTreeCellRendererComponent): Replaced
+ 	UIManager.getLookAndFeelDefaults().getXXX() with UIManager.getXXX().w
+ 	(paint): Replaced UIManager.getLookAndFeelDefaults().getXXX()
+ 	with UIManager.getXXX().
+ 
+ 2005-11-17  Andrew Haley  <aph@redhat.com>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java (unquote): New
+ 	method.
+ 	(connect): Unquote filename.
+ 	* gnu/java/net/protocol/jar/Connection.java (get): Likewise.
+ 
+ 	* java/net/URL.java (URL): If the file part of a spec is absolute,
+ 	ignore the file part of its context.
+ 
+ 2005-11-17  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* examples/gnu/classpath/examples/CORBA/swing/README.html:
+ 	Added note about the build.
+ 	
+ 2005-11-16  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JSplitPane.java: Reformatted file.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java: Reformatted file.
+ 
+ 2005-11-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(mouseEntered): No need to start the insideTimer here,
+ 	already called showTip.
+ 
+ 2005-11-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes PR classpath/PR24763
+ 	* javax/swing/ToolTipManager.java
+ 	(mouseEntered): showTip should be called if exitTimer is running.
+ 	This means that the mouse has exited and re-entered a component
+ 	in less than 500ms.
+ 	(mouseExited): If enterTimer is not running, the exitTimer should
+ 	be started no matter what.
+ 	(showTip): Should not show tool tip if the currentComponent is
+ 	not showing.
+ 
+ 2005-11-16  Lillian Angel  <langel@redhat.com>
+ 	
+ 	Fixes PR classpath/PR23557 and PR classpath/PR24099
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable):
+ 	Added check to determine if dst->drawable or src->drawable
+ 	are actually drawable. If not, return.
+ 
+ 2005-11-16  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(ButtonBorder.paintBorder): Special case the OceanTheme.
+ 	(ButtonBorder.paintOceanThemeBorder): New method.
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(installDefaults): Set the rollover flag here. Don't set a special
+ 	border for rollover buttons.
+ 	(uninstallDefaults): Reset the rollover flag.
+ 	(update): Only paint gradient when button is enabled and not pressed.
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(getCurrentTheme): New method.
+ 
+ 2005-11-16  Gary Benson  <gbenson@redhat.com>
+ 
+ 	* java/io/FilePermission.java (implies): Correct the sense
+ 	in which action checks are applied.
+ 
+ 2005-11-16  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* AUTHORS: Added myself.
+ 	* javax/swing/KeyboardManager.java: Changed @author tag to match the 
+ 	other ones I have.
+ 	* javax/swing/text/WrappedPlainView.java: Likewise.
+ 
+ 2005-11-16  Gary Benson  <gbenson@redhat.com>
+  
+ 	* java/security/ProtectionDomain.java (toString): Use
+ 	gnu.classpath.SystemProperties to read line.separator
+ 	without security manager check.
+ 
+ 2005-11-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/image/MemoryImageSource.java
+ 	(startProduction): If animated, imageComplete should
+ 	be called with the SINGLEFRAMEDONE flag, meaning the
+ 	single frame is complete, but there are more frames 
+ 	to follow.
+ 
+ 2005-11-16  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainDocument.java:
+ 	(insertString): Null check fixes PR 24890.
+ 
+ 2005-11-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paintVerticalPartOfLeg): Added a check to prevent
+ 	ArrayOutOfBoundsException.
+ 
+ 2005-11-16  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(paintTitleBackground): Only paint background if component is
+ 	opaque.
+ 	* javax/swing/plaf/metal/MetalInternalFrameTitlePane.java
+ 	(paintPalette): Added gradient painting.
+ 	(paintComponent): Added gradient painting.
+ 	* javax/swing/plaf/metal/OceanTheme.java
+ 	(addCustomEntriesToTable): Added gradient for
+ 	InternalFrama.activeTitleGradient.
+ 
+ 2005-11-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java:
+ 	Removed unneeded fields.
+ 	(showTip): Re-implemented to use PopupFactory.
+ 	(hideTip): Likewise.
+ 	(adjustLocation): Fixed location.
+ 
+ 2005-11-16  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainDocument.java:
+ 	(insertUpdate): The very first new element added doesn't start at the 
+ 	start of the event, it starts at the start offset of the Element that
+ 	contains the start of the event.
+ 
+ 2005-11-16  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(paintMenuItem): Always call paintBackground().
+ 
+ 2005-11-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java
+ 	(create): Since popups were changed to be JWindowPopups,
+ 	this code should be done in GtkWindowPeer. Code is not
+ 	needed.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java
+ 	(create): If window is not focusable, it should not take
+ 	the focus away from any other window. Therefore, its
+ 	type should be set to GDK_WINDOW_TYPE_HINT_MENU.
+ 
+ 2005-11-16  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(update): New method. Paints the gradient.
+ 	* javax/swing/plaf/metal/MetalCheckBoxIcon.java
+ 	(paintIcon): Paint gradient.
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(RadioButtonIcon.paintIcon): Paint gradient.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initClassDefaults): Added MetalMenuBarUI.
+ 	* javax/swing/plaf/metal/MetalMenuBarUI.java: New file.
+ 	* javax/swing/plaf/metal/MetalToggleButtonUI.java
+ 	(update): New method. Paints the gradient.
+ 	* javax/swing/plaf/metal/OceanTheme.java
+ 	(addCustomEntriesToTable): Added all the gradients.
+ 
+ 2005-11-16  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JMenu.java
+ 	(JMenu()): Set opaque flag to false.
+ 	(JMenu(String)): Likewise.
+ 	(JMenu(Action)): Likewise.
+ 
+ 2005-11-16  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(getRowHeight): Adjusted to deal correctly with fixed cell heights.
+ 	(convertYRoRow): Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(installDefaults): Don't make the menu item opaque here.
+ 	(paintBackground): Moved background painting code from
+ 	paintMenuItem() to this method.
+ 	(paintMenuItem): Moved background painting to paintBackground().
+ 	(installDefaults): Don't set opaque flag here.
+ 
+ 2005-11-16  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalUtils.java
+ 	(paintGradient): New utility method(s).
+ 	(paintHorizontalGradient): New utility method.
+ 	(paintVerticalGradient): New utility method.
+ 
+ 2005-11-15  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paintDoubleBuffered): Put paint() call inside a try-finally
+ 	block to correctly recover the double-buffering flag when
+ 	an exception is thrown inside the paint() call.
+ 
+ 2005-11-15  Lillian Angel  <langel@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetResizable):
+ 	Needed to set allow_shrink to the same value as resizable. Other-
+ 	wise, it is always set to false.
+ 
+ 2005-11-15  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paint): Added check to prevent NPE.
+ 
+ 2005-11-15  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JComponent.java:
+ 	(removeNotify): Unregister WHEN_IN_FOCUSED_WINDOW bindings from the 
+ 	KeyboardManager.
+ 
+ 2005-11-15  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Default rowHeight for tree's should
+ 	be 0. This is Sun and IBM's default.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Default rowHeight for tree's should
+ 	e 0. This is Sun and IBM's default.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Added a default rowHeight field.
+ 	(setRowHeight): Set the rowHeight to the class default if parameter
+ 	is 0. Tree row height should never be set to 0. 20 is the minimum.
+ 	(installDefaults): fixed call to tree.setRowHeight
+ 	(shouldPaintExpandControl): Added to check to prevent NPE.
+ 
+ 2005-11-15  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* examples/gnu/classpath/examples/CORBA/swing/README.html,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/CanvasWorld.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/ChatConstants.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/ClientFrame.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/Demo.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/GameManager.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/GameManagerImpl.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/IorReader.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/OrbStarter.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/Player.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/PlayerImpl.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/PlayingDesk.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/State.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/X5Server.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/_GameManagerImpl_Tie.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/_GameManager_Stub.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/_PlayerImpl_Tie.java,
+ 	examples/gnu/classpath/examples/CORBA/swing/x5/_Player_Stub.java: 
+ 	New files.
+ 
+ 2005-11-15  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/UIManager.java
+ 	(userUIDefaults): New field.
+ 	(get(Object)): Respect the user UI settings.
+ 	(get(Object,Locale)): Respect the user UI settings.
+ 	(getBoolean(Object)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getBoolean(Object,Locale)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getBorder(Object)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getBorder(Object,Locale)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getColor(Object)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getColor(Object,Locale)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getDimension(Object)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getDimension(Object,Locale)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getFont(Object)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getFont(Object,Locale)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getIcon(Object)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getIcon(Object,Locale)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getInsets(Object)): Call get() instead of
+ 	getLookAndFeelDefaults().getInsets() in order to respect the user UI
+ 	settings.
+ 	(getInsets(Object,Locale)): Call get() instead of
+ 	getLookAndFeelDefaults().getInsets() in order to respect the user UI
+ 	settings.
+ 	(getInt(Object)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getInt(Object,Locale)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getString(Object)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getString(Object,Locale)): Call get() instead of
+ 	getLookAndFeelDefaults().get() in order to respect the user UI
+ 	settings.
+ 	(getUI(JComponent)): Respect the user UI settings.
+ 	(put): Put key/value into user UI settings.
+ 
+ 2005-11-15  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(OptionDialogBorder.paintBorder): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(MetalButtonUI): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/metal/MetalInternalFrameTitlePane.java
+ 	(installDefaults): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/metal/MetalLabelUI.java
+ 	(paintDisabledText): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/metal/MetalRadioButtonUI.java
+ 	(installDefaults): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java
+ 	(createDecreaseButton): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(createIncreaseButton): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(paintThumbHorizontal): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(paintThumbVertical): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	* javax/swing/plaf/metal/MetalSplitPaneUI.java
+ 	(createDefaultDivider): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	* javax/swing/plaf/metal/MetalToggleButtonUI.java
+ 	(installDefaults): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/metal/MetalToolTipUI.java
+ 	(MetalToolTipUI): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	Removed all listener fields.
+ 	(installUI): Removed initialization and call super.installUI()
+ 	instead.
+ 	(uninstallUI): Removed initialization and call super.uninstallUI()
+ 	instead.
+ 
+ 2005-11-15  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/OrbFunctional.java (serveStep):
+ 	Returning ensure that the socket is closed.
+ 
+ 2005-11-15  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicBorders.java
+ 	(getButtonBorder): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	(getRadioButtonBorder): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(getToggleButtonBorder): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(getMenuBarBorder): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(getSplitPaneBorder): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(getSplitPaneDividerBorder): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(getTextFieldBorder): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(getInternalFrameBorder): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paintText): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicCheckBoxUI.java
+ 	(getDefaultIcon): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(paintCurrentValue): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java
+ 	(installStrings): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(installDefaults): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(installKeyboardActions): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	(boxRect): Added @since tag to the API comment.
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java
+ 	(getDefaultIcon): Replaced UIManager.getLookAndFeelDefaults().get()
+ 	with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(configureScrollBarColors): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(calculatePreferredSize): Fetch preferred width or height from
+ 	UI defaults.
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	(installKeyboardActions): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(createKeymap): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(getInputMap): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(getActionMap): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(dragTo): Don't use cached* fields.
+ 	(installComponents): Don't use cached* fields.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getHashColor): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	(setHashColor): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 	Added FIXME comment.
+ 	(installKeyboardActions): Replaced
+ 	UIManager.getLookAndFeelDefaults().get() with UIManager.get().
+ 
+ 2005-11-15  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* native/jni/java-lang/java_lang_VMDouble.c (initIDs): Register 
+ 	clsDouble as global ref.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c 
+ 	(gtkInit): Register gtkgenericpeer as global ref.
+ 
+ 2005-11-15  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Removed unneeded field.
+ 	(getPathBounds): Reimplemented to use getNodeDimensions.
+ 	(getRowCount): Removed call to updateCurrentVisiblePath.
+ 	(uninstallKeyboardActions): Implemented.
+ 	(paint): Reimplemented to only paint rows contained in clip.
+ 	No longer uses recursion.
+ 	(mousePressed): If control icon is clicked, should scroll to that
+ 	path.
+ 	(getNodeDimensions): Implemented.
+ 	(getRowX): Implemented.
+ 	(getCellBounds): Removed.
+ 	(getCellLocation): Removed.
+ 	(paintRecursive): Removed.
+ 	(paintControlIcons): Removed.
+ 	(getPreviousVisibleNode): Removed call to updateCurrentVisiblePath.
+ 	(getLevel): Added check for invisible root.
+ 	(paintVerticalLine): Set graphics color.
+ 	(paintHorizontalLine): Likewise.
+ 	(drawCentered): Added negative check.
+ 	(drawDashedHorizontalLine): Set graphics color.
+ 	(drawDashedVerticalLine): Likewise.
+ 	(paintExpandControl): Implemented.
+ 	(paintHorizontalPartOfLeg): Likewise.
+ 	(paintVerticalPartOfLeg): Likewise.
+ 	(paintRow): Added call to paint the control icons.
+ 	(updateCurrentVisiblePath): Cleaned up function.	
+ 
+ 2005-11-15  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	(remove): Do not set up an ElementEdit here, this is done in the 
+ 	Document implementation's removeUpdate method.
+ 	* javax/swing/text/PlainDocument.java:
+ 	(insertUpdate): Do not call reindex, instead, reindex the lines here
+ 	directly but only starting from the offset of the newly inserted text.
+ 	Also, if entire lines have been added or removed, set up an ElementEdit
+ 	and add it to the DocumentEvent.  Chain BadLocationException to an 
+ 	AssertionError and throw it in the unexpected case.
+ 	(removeUpdate): If entire lines have been added or removed, set up an 
+ 	ElementEdit and add it to the DocumentEvent.  Chain 
+ 	BadLocationException to an AssertionError and throw it in the 
+ 	unexpected case.
+ 	(reindex): Removed unnecessary method.
+ 
+ 2005-11-15  Wolfgang Baer  <WBaer@gmx.de>
+ 
+ 	* javax/print/attribute/DateTimeSyntax.java,
+ 	* javax/print/attribute/EnumSyntax.java,
+ 	* javax/print/attribute/IntegerSyntax.java,
+ 	* javax/print/attribute/URISyntax.java:
+ 	Added and enhances some api docs.
+ 
+ 2005-11-15  Lillian Angel  <langel@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
+ 	Code written by Sven de Marothy.
+ 	(gtkWindowGetLocationOnScreen): Added declaration
+ 	for native function.
+ 	(getLocationOnScreen): Changed to handle 2 different cases.
+ 	If the component is a window, gtkWindowGetLocationOnScreen is
+ 	called; otherwise, gtkWidetGetLocationOnScreen.
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h:
+ 	Added signature for new function Java_gnu_java_awt_peer_
+ 	gtk_GtkComponentPeer_gtkWindowGetLocationOnScreen.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen):
+ 	Implemented.
+ 
+ 2005-11-15  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JViewport.java
+ 	(JViewport): Recognize setting of a system property
+ 	gnu.javax.swing.JViewport for the scrollMode.
+ 
+ 2005-11-15  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalUtils.java
+ 	(fillMetalPattern2D): Fixed the texture width.
+ 	(initializePattern): Made texture transparent.
+ 
+ 2005-11-15  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTextField.java
+ 	(createDefaultModel): Set the filterNewlines property on the created
+ 	model.
+ 
+ 2005-11-15  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	Fixed API docs all over to better explain the changed (but correct)
+ 	behaviour.
+ 	(convertYToRow): Added some short-circuits for special cases. Update
+ 	the layout state if necessary. Fixed to match the JDK behaviour.
+ 	Added API docs to better explain the behaviour.
+ 	(updateLayoutState): When a fixedCellHeight is set, then use the
+ 	cellHeight field, otherwise use the cellHeights array.
+ 	(uninstallDefaults): Removed unnecessary statement.
+ 	(paintBackground): Removed unnecessary method.
+ 	(paintCell): Removed some commented-out code.
+ 	(paint): Removed call to paintBackground().
+ 	(locationToIndex): Removed unused statement.
+ 
+ 2005-11-14  Wolfgang Baer  <WBaer@gmx.de>
+ 
+ 	* javax/print/attribute/AttributeSetUtilities.java:
+ 	Added api docs and enhanced api docs all over the place.
+ 	(verifyCategoryForValue): Throw exception when arguments
+ 	are _not_ equal and throw NPE also if attribute is null.
+ 
+ 2005-11-14  Lillian Angel  <langel@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(getLocationOnScreen): The insets should be taken into account
+ 	when returning the location of an object on the screen.
+ 
+ 2005-11-14  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JMenuBar.java:
+ 	(removeNotify): Unregister this JMenuBar from the KeyboardManager.
+ 	* javax/swing/KeyboardManager.java:
+ 	(unregisterJMenuBar): New implementation method.
+ 
+ 2005-11-14  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JComponent.java:
+ 	(removeNotify): Removed unncessary InputMap and ActionMap inheritance
+ 	code. Added FIXME to remove the WHEN_IN_FOCUSED_WINDOW bindings from 
+ 	the KeyboardManager.
+ 	* javax/swing/JMenuBar.java:
+ 	(removeNotify): Added FIXME to unregister this JMenuBar from the 
+ 	KeyboardManager.
+ 
+ 2005-11-14  Wolfgang Baer  <WBaer@gmx.de>
+ 
+ 	* javax/print/attribute/HashAttributeSet.java:
+ 	Added api docs to class and clarified method documentation.
+ 	(toArray): Get iterator from values instead of entries.
+ 	(hashCode): Compute hashcode according to specification.
+ 	(get): Throw NullPointerException if category is null.
+ 	(HashAttributeSet(Attribute[],Class)): Changed to allow
+ 	Attribute[] to be null.
+ 							
+ 2005-11-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	As suggested by Joao Victor <jvital@gmail.com>:
+ 	* javax/swing/Timer.java (Waker): Removed class.
+ 	(Task): New class.
+ 	(timer): New field.
+ 	(running): Removed field.
+ 	(waker): Likewise.
+ 	(task): New field.
+ 	(isRunning): Check whether task is null.
+ 	(start): Create task and schedule it with timer.
+ 	(stop): Cancel task and clear field.
+ 	(queueEvent): Synchronized on queueLock.
+ 
+ 2005-11-14  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(expandPath): No need to get the parent path.
+ 	* javax/swing/event/TreeModelEvent.java:
+ 	Variables should be initialized to null.
+ 	(toString): Implemented.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(treeStructureChanged): Implemented.
+ 	(getParent): Added check to avoid infinite loop.
+ 	(findNode): Fixed check to use getChild, instead of
+ 	getIndexOfChild.
+ 	(updateCurrentVisiblePath): Added a loop to check
+ 	the parent's sibling, if the current node has no
+ 	other siblings.
+ 
+ 2005-11-14  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/ActionMap.java: 
+ 	(keys): Return null if the map is empty.
+ 	(allKeys): Likewise.
+ 	* javax/swing/InputMap.java:
+ 	(keys): Return null if the map is empty.
+ 	(allKeys): Likewise.
+ 	* javax/swing/JMenuBar:
+ 	(addNotify): Register the menu with the KeyboardManager.
+ 	(processKeyBinding): New API method.
+ 	(processKeyBindingHelper): New implementation method.
+ 	* javax/swing/JMenuItem.java:
+ 	(setAccelerator): Fire a PropertyChangeEvent after changing the 
+ 	accelerator.
+ 	* javax/swing/KeyboardManager.java:
+ 	(menuBarLookup): New field, Hashtable mapping between top-level 
+ 	containers and a Vector of the JMenuBars contained in them.
+ 	(getHashtableForTopLevel): Changed this public method to package
+ 	private.
+ 	(registerEntireMap): Avoid NPE by returning early if the parameter
+ 	is null or contains no mappings.
+ 	(processKeyStroke): If the mapped component doesn't consume the event,
+ 	let all JMenuBars in the top-level container have a chance at it.
+ 	(getVectorForTopLevel): New implementation method.
+ 	(registerJMenuBar): Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(propertyChangeListener): New field.
+ 	(PropertyChangeHandler): New class to handle PropertyChangeEvents on 
+ 	the JMenuItem.
+ 	(ClickAction): New class to implement accelerator key handling.
+ 	(BasicMenuItemUI<init>): Instantiate the propertyChangeListener field.
+ 	(installKeyboardActions): Implemented.
+ 	(installListeners): Install the propertyChangeListener.
+ 	(installUI): Call installKeyboardAcions after installing the listeners.
+ 	(uninstallKeyboardActions): Implemented.
+ 	(uninstallListeners): Remove the propertyChangeListener.
+ 
+ 2005-11-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/applet/Applet.java (URLAudioClip): New class.
+ 	(newAudioClip): Implemented.
+ 	* gnu/java/beans/DummyAppletContext.java (getAudioClip): Use
+ 	Applet.newAudioClip.
+ 	(DUMMY_CLIP): Removed.
+ 	(DummyAudioClip): Removed.
+ 
+ 2005-11-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/sound/sampled/Line.java (open): Throws
+ 	LineUnavailableException.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Reported by Ingo Proetel  <proetel@aicas.com>
+ 	* gnu/java/io/PlatformHelper.java
+ 	(toCanonicalForm): Remove lowercasing of paths in Windows. This
+ 	breaks working with URLs, like when accessing files withing JAR
+ 	files.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	(paint): Only clear the background if the layeredPane is opaque.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/RepaintManager.java
+ 	(globalManager): Removed obsolete field.
+ 	(currentRepaintManagers): New field.
+ 	(RepaintWorker.run): Fetch current RepaintManager for the current
+ 	thread group.
+ 	(currentManager): Return the current manager for the current thread
+ 	group.
+ 	(setCurrentManager): Set the repaint manager for the current thread
+ 	group.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboPopup.java
+ 	(show): Instead of fiddling with the list size, set the preferredSize
+ 	of the scroller.
+ 	(configureScroller): Set border to null.
+ 	(configurePopup): Set border correctly.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(setButtonIcons): Only set icons if buttons are != null.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Fixed some UI defaults used by ProgressBar.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextFieldUI.java
+ 	(propertyChange): Get new value from the PropertyChangeEvent and
+ 	not from the component itself (since when it receives the event,
+ 	the component still has the old state).
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(uninstallListeners): Uninstall the document listener here.
+ 	(getVisibleEditorRect): Fetch the textComponent via getComponent().
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/BoxView.java
+ 	(paint): Only paint child if it is inside the current clip.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(setEnabled): Also set focusable flag on the button when the enabled
+ 	property changes.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	(boxRect): New protected field.
+ 	(PropertyChangeHandler.propertyChange): Fixed typo in 'indeterminate'.
+ 	Only start animation when progressBar is actually showing. Removed
+ 	repaint call.
+ 	(AncestorHandler): New inner class. Helps starting/stopping the
+ 	animation when progressBar becomes showing/hidden.
+ 	(ComponentHandler): New inner class. Recalculates box sizes for
+ 	indeterminate progress bars when the size of the progress bar
+ 	changes.
+ 	(boxRect): New protected field.
+ 	(boxDependent): New transient field.
+ 	(boxIndependent): New transient field.
+ 	(incr): New transient field.
+ 	(ancestorListener): New private field.
+ 	(componentListener): New private field.
+ 	(getBox): Fixed calculation of the indeterminate progress bar box
+ 	to match the JDK behaviour.
+ 	(getMaximumSize): Implemented the maximumSize for progressBars.
+ 	(getMinimumSize): Implemented the minimumSize for progressBars.
+ 	(getPreferredInnerHorizontal): Implemented correctly.
+ 	(getPreferredInnerVertical): Implemented correctly.
+ 	(getPreferredSize): Implemented correctly using the getPreferredXXX()
+ 	helper methods.
+ 	(paintDeterminate): Fixed painting to better match the JDK behaviour.
+ 	(paintIndeterminate): Fixed painting to better match the JDK behaviour.
+ 	(paintString): Implemented 'half-dark-half-light' painted text.
+ 	(installListeners): Install new listeners.
+ 	(uninstallListeners): Uninstall new listeners.
+ 	* javax/swing/plaf/basic/MetalProgressBarUI.java
+ 	(paintDeterminate): New method.
+ 	(paintIndeterminate): New method.
+ 
+ 2005-11-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(static_initializer): Set the L&F and theme explicitly for the
+ 	default option, because JDK1.4 and JDK1.5 have different defaults.
+ 	(mkMenuBar): For the slider demo, trigger the new SliderDemo
+ 	class. Added ProgressBarDemo to menu.
+ 	(mkSliders): Removed obsolete slider demo.
+ 	(mkButtonBar): Added ProgressBar demo.
+ 	* examples/gnu/classpath/examples/swing/ProgressBarDemo.java:
+ 	New file. Demonstrates the JProgressBar.
+ 
+ 2005-11-13  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* vm/reference/gnu/classpath/VMStackWalker.java (getClassLoader()):
+ 	added to fix an infinite loop bug.
+ 	* NEWS: note VM interface change.
+ 
+ 2005-11-13  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #23008
+ 	* gnu/java/nio/charset/UTF_16Decoder.java
+ 	MAYBE_BIG_ENDIAN, MAYBE_LITTLE_ENDIAN: New constants representing
+ 	such endianness which is similar to UNKNOWN_ENDIAN but defaults
+ 	to big/little endian without a byte order mark.
+ 	(decodeLoop): Handle MAYBE_BIG_ENDIAN and MAYBE_LITTLE_ENDIAN.
+ 	* gnu/java/nio/charset/UnicodeLittle.java
+ 	(newDecoder): Set the endianness to MAYBE_LITTLE_ENDIAN.
+ 
+ 2005-11-13  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	PR 24733
+ 	* javax/swing/TransferHandler.java (getClipboard): Rewritten. 
+ 
+ 2005-11-13  Wolfgang Baer  <WBaer@gmx.de>
+ 
+ 	* javax/print/attribute/HashDocAttributeSet.java,
+ 	* javax/print/attribute/HashPrintJobAttributeSet.java,
+ 	* javax/print/attribute/HashPrintRequestAttributeSet.java,
+ 	* javax/print/attribute/HashPrintServiceAttributeSet.java,
+ 	Added class api docs and enhanced method api docs.
+ 
+ 2005-11-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/midi-dssi/.cvsignore: Updated.
+ 	* native/jni/midi-alsa/.cvsignore: New file.
+ 	* lib/.cvsignore: Updated.
+ 
+ 2005-11-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/sound/sampled/AudioFileFormat.java: New file.
+ 	* javax/sound/sampled/AudioFormat.java: New file.
+ 	* javax/sound/sampled/AudioInputStream.java: New file.
+ 	* javax/sound/sampled/AudioPermission.java: New file.
+ 	* javax/sound/sampled/AudioSystem.java: New file.
+ 	* javax/sound/sampled/BooleanControl.java: New file.
+ 	* javax/sound/sampled/Clip.java: New file.
+ 	* javax/sound/sampled/CompoundControl.java: New file.
+ 	* javax/sound/sampled/Control.java: New file.
+ 	* javax/sound/sampled/DataLine.java: New file.
+ 	* javax/sound/sampled/EnumControl.java: New file.
+ 	* javax/sound/sampled/FloatControl.java: New file.
+ 	* javax/sound/sampled/LineEvent.java: New file.
+ 	* javax/sound/sampled/Line.java: New file.
+ 	* javax/sound/sampled/LineListener.java: New file.
+ 	* javax/sound/sampled/LineUnavailableException.java: New file.
+ 	* javax/sound/sampled/Mixer.java: New file.
+ 	* javax/sound/sampled/Port.java: New file.
+ 	* javax/sound/sampled/ReverbType.java: New file.
+ 	* javax/sound/sampled/SourceDataLine.java: New file.
+ 	* javax/sound/sampled/spi/AudioFileReader.java: New file.
+ 	* javax/sound/sampled/spi/AudioFileWriter.java: New file.
+ 	* javax/sound/sampled/spi/FormatConversionProvider.java: New file.
+ 	* javax/sound/sampled/spi/MixerProvider.java: New file.
+ 	* javax/sound/sampled/TargetDataLine.java: New file.
+ 	* javax/sound/sampled/UnsupportedAudioFileException.java: New file.
+ 
+ 2005-11-13  Wolfgang Baer  <WBaer@gmx.de>
+ 
+ 	* javax/print/attribute/EnumSyntax.java:
+ 	API docs added and enhanced for class and methods.
+ 	(readResolve): New method.
+ 		
+ 2005-11-13  Wolfgang Baer  <WBaer@gmx.de>
+ 
+ 	* javax/print/attribute/Attribute.java,
+ 	javax/print/attribute/AttributeSet.java,
+ 	javax/print/attribute/DocAttribute.java,
+ 	javax/print/attribute/DocAttributeSet.java,
+ 	javax/print/attribute/PrintJobAttribute.java,
+ 	javax/print/attribute/PrintJobAttributeSet.java,
+ 	javax/print/attribute/PrintRequestAttribute.java,
+ 	javax/print/attribute/PrintRequestAttributeSet.java,
+ 	javax/print/attribute/PrintServiceAttribute.java,
+ 	javax/print/attribute/PrintServiceAttributeSet.java,
+ 	javax/print/attribute/SupportedValuesAttribute.java,
+ 	javax/print/attribute/UnmodifiableSetException.java:
+ 	Added api documentation to class and method definitions.
+ 	* javax/print/attribute/package.html: Included a package description.
+ 
+ 2005-11-13  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Interceptor/gnuIorInfo.java (state): Made public.
+ 	* gnu/CORBA/Interceptor/gnuServerRequestInfo.java 
+ 	(adapter_name, orb_id, server_id): New methods.
+ 	* org/omg/PortableInterceptor/IORInfoOperations.java
+ 	(state): New method.
+ 	* org/omg/PortableInterceptor/ServerRequestInfoOperations.java
+ 	(adapter_name, orb_id, server_id): New methods.	
+ 
+ 2005-11-13  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	PR 24749
+ 	* javax/swing/plaf/basic/BasicTextUI.java (installDefaults):  
+ 	Call setSelectionColor. 
+ 
+ 2005-11-12  Wolfgang Baer  <WBaer@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(processResolution): Pass Error, RuntimeException and
+ 	ObjectStreamException through to the caller.
+ 	(readObject): Documentation update.
+ 
+ 2005-11-11  Mark Wielaard  <mark@klomp.org>
+ 	    Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/Properties.java (load): Short-circuit parsing when key or
+ 	value doesn't contain escape character. Use StringBuilder instead of
+ 	StringBuffer.
+ 	(store): Use StringBuilder instead of StringBuffer.
+ 	(formatForOutput): Likewise.
+ 
+ 2005-11-11  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(getMinimumDividerLocation): Fixed to use the  minimum size
+ 	of the correct component. Also, removed call to getAvailableSize,
+ 	this is not needed for the minimum location.
+ 
+ 2005-11-11  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* autogen.sh: Fix broken libtool version detection on FreeBSD.
+ 
+ 2005-11-11  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(LightweightDispatcher.acquireComponentForMouseEvent): If the 
+ 	event is not being dispatched, the pressCount should be reset.
+ 
+ 2005-11-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/text/FieldView.java (getPreferredSpan): Chain
+ 	BadLocationException when throwing assertion.
+ 
+ 2005-11-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by john.zigman@anu.edu.au as bug #24608.
+ 	* gnu/java/nio/SocketChannelImpl.java (read): Put readBytes in
+ 	destination ByteBuffer when it doesn't have an array instead of len
+ 	bytes.
+ 
+ 2005-11-11  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableInterceptor/IORInterceptor_3_0.java,
+ 	org/omg/PortableInterceptor/IORInterceptor_3_0Helper.java,
+ 	org/omg/PortableInterceptor/IORInterceptor_3_0Holder.java,
+ 	org/omg/PortableInterceptor/IORInterceptor_3_0Operations.java,
+ 	org/omg/PortableInterceptor/_IORInterceptor_3_0Stub.java: New files.
+ 	* gnu/CORBA/Interceptor/IORInterceptors.java,
+ 	gnu/CORBA/Interceptor/gnuIorInfo.java,
+ 	gnu/CORBA/OrbRestricted.java,
+ 	gnu/CORBA/Poa/AOM.java,
+ 	gnu/CORBA/Poa/ORB_1_4.java,
+ 	gnu/CORBA/Poa/gnuPOA.java,
+ 	gnu/CORBA/Poa/gnuPOAManager.java,
+ 	org/omg/PortableInterceptor/IORInfoOperations.java,
+ 	org/omg/PortableInterceptor/IORInterceptorOperations.java,
+ 	org/omg/PortableInterceptor/ORBInitInfoOperations.java,
+ 	org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java:
+ 	Rewritten to support the IORInterceptor_3_0.
+ 
+ 2005-11-10  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/metal/MetalRadioButtonUI.java
+ 	(paintFocus): Centered border around rectangle. It seemed
+ 	a bit offset and too small at times.
+ 
+ 2005-11-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(valueChanged): Repaint list when selection changed.
+ 	(updateLayoutState): Reworked to correctly respect fixed cell sizes.
+ 	(installListeners): Create component listener before adding it.
+ 	(paint): Optimized to only draw the cells in the clip.
+ 
+ 2005-11-10  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JComponent.java:
+ 	(processKeyEvent): Reworked this method to improve performance.  Return
+ 	early if the event has already been handled. Don't stop climbing when
+ 	we hit a JInternalFrame, only stop at Applets or Windows (this fixes
+ 	PR 24781). Don't check WHEN_IN_FOCUSED_WINDOW bindings if there is no
+ 	top-level container present.  If there is a top-level container,  pass 
+ 	it to KeyboardManager.processKeyStroke rather than the JComponent that
+ 	actually received the event, to save time in finding the top-level 
+ 	container within KeyboardManager.
+ 	* javax/swing/KeyboardManager.java:
+ 	(findTopLevel): Changed parameter from JComponent to Component to allow
+ 	generality and to allow passing in of already-determined top-level 
+ 	containers to save time.
+ 	(processKeyStroke): Likewise.
+ 
+ 2005-11-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #24731 reported by freebeans@xqb.biglobe.ne.jp.
+ 	* java/awt/ScrollPane.java (addNotify): Return immediately when peer
+ 	already set.
+ 
+ 2005-11-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(installListeners): Also install focusListener on the listBox.
+ 	(uninstallListeners): Also uninstall focusListener from the listBox.
+ 	(setPopupVisible): Request focus on the listbox when making the
+ 	popup visible.
+ 
+ 2005-11-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paintingTile): New field.
+ 	(isPaintingTile): Implemented.
+ 	(paintChildren): Optimized painting of overlapping children.
+ 
+ 2005-11-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Petteri <betelgeuse@gentoo.org> bug #24768 and bug #24769.
+ 	* configure.ac (dssi): Change accidental alsa reference to dssi.
+ 	* native/jni/midi-dssi/Makefile.am (libgjsmdssi_la_SOURCES): Add
+ 	dssi_data.h.
+ 
+ 2005-11-10  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/OrbFunctional.java (use_properties, set_parameters):
+ 	Rewritten to support orb and server ids.
+ 	* org/omg/CORBA/ORB.java,
+ 	org/omg/PortableInterceptor/ObjectReferenceTemplate.java: 
+ 	Documentation update.
+ 
+ 2005-11-09  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JComponent.java:
+ 	(addNotify): Unregister all WHEN_IN_FOCUSED_WINDOW bindings for this 
+ 	JComponent and then register them with its (potentially) new top level
+ 	ancestor.  Removed unncessary code that copied regular (WHEN_FOCUSED)
+ 	key bindings up the parent hierarchy.  
+ 
+ 2005-11-09  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Reported by Friedjof Siebert  <siebert@aicas.com>
+ 	* java/util/WeakHashMap.java
+ 	(WeakEntrySet.Iterator.checkMod): Improved exception message.
+ 	(internalRemove): Removed redundant reads of buckets[slot] and
+ 	prev.next and added checks to ensure that no null pointer
+ 	exception may occur and that this can be proved automatically.
+ 
+ 2005-11-09  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Reported by Friedjof Siebert  <siebert@aicas.com>
+ 	* java/io/PrintWriter.java
+ 	(line_separator):  Added default value for property to ensure
+ 	absence of null pointer exception even if property is not set.
+ 
+ 2005-11-09  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/io/InputStreamReader.java
+ 	(InputStreamReader(InputStream, CharsetDecoder)): Catch the case
+ 	when the CharsetDecoder returns a null charset and handle it like
+ 	US-ASCII.
+ 
+ 2005-11-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Petteri Räty <betelgeuse@gentoo.org>
+ 	* INSTALL: Remove double --enable-xmlj entry.
+ 
+ 2005-11-09  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JComponent.java:
+ 	(processKeyEvent): Use local variables for boolean pressed and for 
+ 	the KeyStroke.  Implemented the code for WHEN_IN_FOCUSED_WINDOW
+ 	bindings.
+ 	(updateComponentInputMap): Implemented and fixed typo in docs.
+ 	* javax/swing/KeyboardManager.java: New class.
+ 
+ 2005-11-09  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTabbedPane.java
+ 	(setComponent): Tab should be inserted with a title, and removed from
+ 	the vector once set.
+ 	(removeTabAt): Tab should only be removed from vector.
+ 	remove(Component) is called to remove the tab from the JTabbedPane.
+ 	(remove): Added call to the component. This function should remove
+ 	the component as well as the tab.
+ 
+ 2005-11-09  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTabbedPane.java
+ 	(setComponent): No need to remove and add tab.
+ 	(remove): Fixed API documentation.
+ 	(remove): Fixed API documentation. Re-implemented according to API.
+ 
+ 2005-11-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/cp-tools/cp-tools.wml: Add gjdoc download link.
+ 
+ 2005-11-09  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/aelfred2/SAXDriver.java: Ensure that absolutize does not
+ 	throw exception when custom entity resolver is set.
+ 
+ 2005-11-09  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/event/InvocationEvent.java:
+ 	(exception): Replaced this field (removed yesterday) because it is 
+ 	needed for serialization.
+ 	(dispatch): Save thrown exception.
+ 	(getException): Directly return exception, no need to cast throwable.
+ 
+ 2005-11-09  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/ComponentInputMap.java:
+ 	(put): Notify the component.
+ 	(clear): Likewise.
+ 	(remove): Likewise.
+ 	(setParent): Notify the parent.  Improved the exception messages.
+ 	* javax/swing/JComponent.java:
+ 	(inputMap_whenInFocusedWindow): Changed type from InputMap to 
+ 	ComponentInputMap.
+ 	(setInputMap): If we're setting the WHEN_IN_FOCUSED_WINDOW map and 
+ 	the parameter is not a ComponentInputMap or is not associated with 
+ 	the same Component, throw an IllegalArgumentException.
+ 	(getInputMap): Create a new ComponentInputMap instead of a new 
+ 	InputMap when the WHEN_IN_FOCUSED_WINDOW map doesn't yet exist.
+ 	(udpateComponentInputMap): New method.  This is the method that 
+ 	ComponentInputMap calls when it is updated.  Not yet completely 
+ 	implemented.
+ 
+ 2005-11-09  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHelper.java,
+ 	org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.java:
+ 	New files.
+ 
+ 2005-11-09  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableInterceptor/ObjectReferenceTemplate.java,
+ 	org/omg/PortableInterceptor/ObjectReferenceTemplateHelper.java,
+ 	org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java:
+ 	New files.
+ 
+ 2005-11-09  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTabbedPane.java
+ 	(setComponent): Added check to prevent infinite loops.
+ 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java
+ 	(createLayoutManager): Should call super here, so the layout
+ 	is set properly depending on the layout mode.
+ 
+ 2005-11-09  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkMenuBar): added file chooser item,
+ 	(mkButtonBar): split buttons into two rows, added 'FileChooser' button,
+ 	* examples/gnu/classpath/examples/swing/FileChooserDemo.java: New file.
+ 
+ 2005-11-09  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableInterceptor/ObjectReferenceFactory.java: Do not
+ 	inherit	from org.omg.CORBA.Object.
+ 
+ 2005-11-09  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/ComponentUI.java
+ 	(update): Restore the foreground color after filling the background.
+ 
+ 2005-11-09  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paint): Fetch a new componentGraphics here instead of
+ 	paintComponent.
+ 	(paintComponent): Don't fetch the componentGraphics here. This
+ 	must be done in paint.
+ 
+ 2005-11-09  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JList.java
+ 	(setModel): throw IllegalArgumentException for null model.
+ 
+ 2005-11-09  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(getVisibleEditorRect): Correctly calculate the inner rectangle.
+ 
+ 2005-11-09  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c 
+ 	(initStaticState): Register global variable glyphVector_class 
+ 	as global reference.
+ 
+ 2005-11-08  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/DefaultCaret.java (BlinkTimerListener):  
+ 	Added ignoreNextEvent flag and its handling.
+ 	(blinkListener): New field. (initBlinkTimer): 
+ 	Initialise blinkListener field.
+ 	(setDot, moveDot): Call appear() instead of repaint(). 
+ 	(appear): new method.
+ 
+ 2005-11-08  Lillian Angel  <langel@redhat.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/GNULookAndFeel.java
+ 	(getDefaults): Added icons for checkboxes and radiobutton.
+ 	(CheckBoxIcon): New class, implemented.
+ 	(RadioButtonIcon): New class, implemented.
+ 
+ 2005-11-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/classpath/SystemProperties.java: Don't mention
+ 	gnu.java.awt.FocusManager.
+ 
+ 2005-11-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/CompositeView.java
+ 	(modelToView): Adjust the allocation to the child allocation before
+ 	forwarding to the child's modelToView. Replaced AssertionError by
+ 	BadLocationException, because that is the right thing to do here.
+ 
+ 2005-11-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(GlassPaneDispatcher.acquireComponentForMouseEvent): Use the
+ 	frame's layeredPane as parent instead of the content pane
+ 	when searching for the event target. This way a possibly set menubar
+ 	is also included in the search.
+ 
+ 2005-11-08  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/Window.java
+ 	(setLocationRelativeTo): Changed x and y to use getLocationOnScreen
+ 	and moved setLocation call outside of check.
+ 	* javax/swing/JOptionPane.java
+ 	(createDialog): Moved pack call and setLocationRelativeTo call here
+ 	and removed these calls from all other functions that call
+ 	createDialog. Also, removed FIXME, since call to setLocationRelativeTo
+ 	fixes this.
+ 	(showConfirmDialog): Removed pack and setLocationRelativeTo calls.
+ 	(showConfirmDialog): Likewise.
+ 	(showConfirmDialog): Likewise.
+ 	(showConfirmDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showMessageDialog): Likewise.
+ 	(showMessageDialog): Likewise.
+ 	(showOptionDialog): Likewise.
+ 	* javax/swing/JTree.java
+ 	(JTree): Should not use a shared instance of the selection model. It
+ 	is a problem when one application has two different trees.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paintRow): Changed parameter to be the focus of the tree.
+ 	(updateCurrentVisiblePath): Adjusted root path incase the root is hidden.
+ 
+ 2005-11-08  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/event/InvocationEvent.java:
+ 	(exception): Removed unnecessary field.
+ 	(dispatch): Removed reference to field exception.
+ 	(getException): If throwable is an Exception, return a casted version, 
+ 	otherwise return null.
+ 	(getThrowable): Improved docs.
+ 
+ 2005-11-08  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/SwingUtilities.java:
+ 	(replaceUIActionMap): Stop climbing hierarchy once we've found an 
+ 	ActionMapUIResource, don't keep looking until parent is null.  No need
+ 	to check if child is null.
+ 	(replaceUIInputMap): Use a local variable for the parent rather than 
+ 	3 calls to get parent.  No need to check if child is null.
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	(installKeyboardActions): UI ActionMap should be of type 
+ 	ActionMapUIResource, not just ActionMap.
+ 
+ 2005-11-08  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java:
+ 	(ElementBuffer.clone): New API method.
+ 
+ 2005-11-08  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/lang/String.java:
+ 	(replace): Use a StringBuilder instead of a StringBuffer because this 
+ 	is faster and we don't need thread-safety.
+ 
+ 2005-11-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installDefaults): Initialize background field correctly.
+ 
+ 2005-11-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/BorderLayout.java
+ 	(getAlignmentX): Return 0.5F here.
+ 	(getAlignmentY): Return 0.5F here.
+ 
+ 2005-11-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JRootPane.java
+ 	(RootLayout.glassPaneBounds): New field.
+ 	(RootLayout.layeredPaneBounds): New field.
+ 	(RootLayout.contentPaneBounds): New field.
+ 	(RootLayout.menuBarBounds): New field.
+ 	(RootLayout.prefSize): New field.
+ 	(getLayoutAlignmentX): Return 0.0F here.
+ 	(getLayoutAlignmentY): Return 0.0F here.
+ 	(invalidateLayout): Throw away cached layout information.
+ 	(layoutContainer): Simplified and fixed the layout. Use cache if
+ 	possible.
+ 	(preferredLayoutSize): Simplified and fixed the layout. Use cache if
+ 	possible.
+ 
+ 2005-11-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(alignmentX): Changed default value to -1.0.
+ 	(alignmentY): Changed default value to -1.0.
+ 	(getAlignmentX): If no value has been set, refer to the superclass
+ 	behaviour.
+ 	(getAlignmentY): If no value has been set, refer to the superclass
+ 	behaviour.
+ 	(setAlignmentX): Catch invalid values and adjust them to the nearest
+ 	valid value.
+ 	(setAlignmentY): Catch invalid values and adjust them to the nearest
+ 	valid value.
+ 
+ 2005-11-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Container.java
+ 	(getAlignmentX): Refer to the layout managers layoutAlignmentX
+ 	property if layout manager is a LayoutManager2.
+ 	(getAlignmentY): Refer to the layout managers layoutAlignmentY
+ 	property if layout manager is a LayoutManager2.
+ 
+ 2005-11-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	(layerToRange): Return empty array for unknown layer instead of
+ 	throwing an exception.
+ 
+ 2005-11-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Component.java
+ 	(invalidate): Don't invalidate invalid parents.
+ 
+ 2005-11-08  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/JComponent.java (setMaximumSize, 
+ 	setMinimumSize, setPreferredSize): Clone the passed parameter.
+ 
+ 2005-11-07  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Component.java
+ 	(invalidate): Invalidate up the whole tree, regardless if some
+ 	parent is already marked invalid. This is needed in some situations
+ 	for layout managers to throw away their cache.
+ 
+ 2005-11-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(tableChanged): Cleared selection if there are no more rows. Prevents a
+ 	NPE.
+ 	* javax/swing/JTree.java
+ 	(scrollRectToVisible): No need to set the selection path here.
+ 	(expandPath): Sometimes it is required to set the state of a leaf, 
+ 	especially if the leaf is the root node.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getRowCount): Added call to updateCurrentVisiblePath, so the
+ 	correct value is always returned.
+ 	(paint): No need to paint if the visible path is null.
+ 	(propertyChange): Implemented.
+ 	(paintRecursive): Added check for visibility of child. If it is
+ 	not visible because it was explicitly set to be hidden, no lines
+ 	should be drawn.
+ 	(paintControlIcons): Likewise.
+ 	(getPreviousNode): Fixed check to include root.
+ 	(paintRow): Set focus to be true (this will change in the future).
+ 	(updateCurrentVisiblePath): Fixed check to call getNextNode if
+ 	the current node is a leaf (more efficent than calling getNextSibling).
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(getTreeCellRendererComponent): Changed to draw border if node has focus.
+ 
+ 2005-11-07  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #24467
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c
+ 	(Java_gnu_java_nio_charset_iconv_IconvDecoder_decode):
+ 	Do not check errno == EINVAL, which is a normal case.
+ 
+ 2005-11-07  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #22968
+ 	* gnu/java/nio/charset/iconv/IconvProvider.java
+ 	(IconvProvider): Declare the constructor public.
+ 
+ 2005-11-07  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JApplet.java
+ 	(initStageDone): Removed unnecessary field.
+ 	(JApplet): Use rootPaneCheckingEnabled property instead of
+ 	initStageDone field.
+ 	(setLayout): Likewise.
+ 	(addImpl): Likewise.
+ 	* javax/swing/JDialog.java
+ 	(initStageDone): Removed unnecessary field.
+ 	(dialogInit): Use rootPaneCheckingEnabled property instead of
+ 	initStageDone field.
+ 	(setLayout): Likewise.
+ 	(addImpl): Likewise.
+ 	* javax/swing/JFrame.java
+ 	(initStageDone): Removed unnecessary field.
+ 	(frameInit): Use rootPaneCheckingEnabled property instead of
+ 	initStageDone field.
+ 	(setLayout): Likewise.
+ 	(addImpl): Likewise.
+ 	* javax/swing/JWindow.java
+ 	(initStageDone): Removed unnecessary field.
+ 	(windowInit): Use rootPaneCheckingEnabled property instead of
+ 	initStageDone field.
+ 	(setLayout): Likewise.
+ 	(addImpl): Likewise.
+ 	* javax/swing/JInternalFrame.java
+ 	(initStageDone): Removed unnecessary field.
+ 	(JInternalFrame): Use rootPaneCheckingEnabled property instead of
+ 	initStageDone field.
+ 	(setLayout): Likewise.
+ 	(addImpl): Likewise.
+ 	(paramString): Return superclass paramstring.
+ 	(reshape): Call revalidate() instead of invalidate() and doLayout().
+ 	(setUI): Temporarily go into init mode, so that the UI can
+ 	manipulate the frame directly.
+ 	(updateUI): Likewise.
+ 
+ 2005-11-07  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/lang/String.java:
+ 	(replace): Use a StringBuffer instead of String.  Only search for new 
+ 	occurrences of the target that occur AFTER the text just inserted, so 
+ 	if the replacement string contains the target string we won't go into 
+ 	an infinite loop.  Use local variables instead of repeated calls to 
+ 	length() and toString().
+ 
+ 2005-11-07  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c: 
+ 	Use long for 64-bit architectures.
+ 
+ 2005-11-07  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/util/Arrays.java:
+ 	(toString(long[])): New API method.
+ 	(toString(int[])): Likewise.
+ 	(toString(short[])): Likewise.
+ 	(toString(char[])): Likewise.
+ 	(toString(byte[])): Likewise.
+ 	(toString(boolean[])): Likewise.
+ 	(toString(float[])): Likewise.
+ 	(toString(double[])): Likewise.
+ 	(toString(Object[])): Likewise.
+ 
+ 2005-11-07  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/event/InvocationEvent.java:
+ 	(throwable): New field.
+ 	(getThrowable): New API method.
+ 	(dispatch()): Catch Throwable, not Exception.  Save the Throwable.  If
+ 	it is an Exception, save the Exception.
+ 
+ 2005-11-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/Popup.java
+ 	(show): Set layout for panel. Otherwise, contents are
+ 	displayed at an arbitrary location.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(getPreferredMenuItemSize): Took into account insets.
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(paintFocus): Don't paint focus if not enabled.
+ 
+ 2005-11-07  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/lang/String.java:
+ 	(contains): New API method.
+ 	(replace): New API method.
+ 
+ 2005-11-07  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/lang/Boolean.java:
+ 	(compareTo(Boolean)): New API method.
+ 
+ 2005-11-07  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(installComponents): update local reference to editor component always,
+ 	(getDisplaySize): implement new calculation for editable combo boxes,
+ 	* javax/swing/plaf/metal/MetalComboBoxEditor.java
+ 	(editorBorderInsets): initialise with correct value,
+ 	* javax/swing/plaf/metal/MetalComboBoxUI.java
+ 	(getMinimumSize): implemented different calculation for editable combo 
+ 	boxes.
+ 
+ 2005-11-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JOptionPane.java
+ 	(showConfirmDialog): Added call to set the location of the
+ 	dialog relative to its parent.
+ 	(showConfirmDialog): Likewise.
+ 	(showConfirmDialog): Likewise.
+ 	(showConfirmDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showInputDialog): Likewise.
+ 	(showMessageDialog): Likewise.
+ 	(showMessageDialog): Likewise.
+ 	(showMessageDialog): Likewise.
+ 	(showOptionDialog): Likewise.
+ 
+ 2005-11-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(getPreferredMenuItemSize): Adjusted width of menu item with
+ 	arrow icon. If the menu item can fit in the current width of
+ 	the top level menu, then the width of the menu item is set to
+ 	the width of the popup menu. Otherwise, the width of the
+ 	menu item is adjusted so that the width of the popup menu
+ 	is increased.
+ 
+ 2005-11-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Don't check or replace FREETYPE2.
+ 	* native/jni/gtk-peer/Makefile.am: Remove FREETYPE2_LIBS and
+ 	FREETYPE2_CFLAGS.
+ 
+ 2005-11-07  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalComboBoxEditor.java
+ 	(MetalComboBoxEditor): don't create new editor.
+ 
+ 2005-11-07  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxEditor.java: API docs plus
+ 	(BasicComboBoxEditor): set border to null and columns to 9,
+ 	(addActionListener): implemented,
+ 	(removeActionListener): implemented.
+ 
+ 2005-11-07  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/IOR.java (equals, hasCode): Compare port number as well
+ 	and do not crash on IOR.Internet==null.
+ 
+ 2005-11-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/Timer.java (Waker.run): Test and set running while
+ 	holding queueLock.
+ 	(start): Set running to true.
+ 	(stop): Unconditionally notify queueLock.
+ 	(queueEvent): Only called when queueLock already held.
+ 
+ 2005-11-06  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradientUnlocked): Update
+ 	debug output to reflect actual situation.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixelsUnlocked):
+ 	Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels): Adjust
+ 	formatting.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrixUnlocked):
+ 	Update debug output to reflect actual situation.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBAColorUnlocked):
+ 	Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoCurveTo): Adjust
+ 	formatting.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelCurveTo): Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRectangle): Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilterUnlocked):
+ 	Update debug output to reflect actual situation.
+ 
+ 2005-11-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/image/AreaAveragingScaleFilter.java: Add FIXME
+ 	* java/awt/Image.java (getScaledInstance): In case of
+ 	SCALE_AREA_AVERAGING use AreaAveragingScaleFilter.
+ 
+ 2005-11-06  Wolfgang Baer  <WBaer@gmx.de>
+ 
+ 	* javax/print/event/PrintEvent.java,
+ 	* javax/print/event/PrintJobAdapter.java,
+ 	* javax/print/event/PrintJobAttributeEvent.java,
+ 	* javax/print/event/PrintJobAttributeListener.java,
+ 	* javax/print/event/PrintJobEvent.java,
+ 	* javax/print/event/PrintJobListener.java,
+ 	* javax/print/event/PrintServiceAttributeEvent.java,
+ 	* javax/print/event/PrintServiceAttributeListener.java,
+ 	* javax/print/event/package.html: Added API docs all over.
+ 
+ 2005-11-06  Wolfgang Baer  <WBaer@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(getParent): If pathname is "" return null.
+ 	(toURI): Also append separatorChar if path equals "".
+ 	(getAbsolutePath): If path equals "" only return the value
+ 	of the user.dir system property.
+ 
+ 2005-11-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/stream/XMLStreamWriterImpl.java: Ensure that generated
+ 	prefixes do not accidentally clash, and provide documentation for
+ 	new virtual methods. createPrefix (new method) signature changed to
+ 	provide namespace URI for the benefit of subclasses.
+ 
+ 2005-11-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/transform/StreamSerializer.java: Avoid undeclared apos
+ 	entity when output mode is HTML.
+ 
+ 2005-11-06  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/IOR.java (equals, hashCode): New metods.
+ 	* gnu/CORBA/SimpleDelegate.java (is_equivalent): Compare IORs when applicable.
+ 
+ 2005-11-06  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Minor.java (IOR_missing): New minor code.
+ 	* gnu/CORBA/NamingService/NameParser.java (corbaloc): Implemented
+ 	file//, ftp:// and http:// support.
+ 	* gnu/javax/rmi/CORBA/UtilDelegateImpl.java (mapSystemException): 
+ 	Set the cause directly.
+ 	* org/omg/CORBA/DATA_CONVERSION.java,
+ 	org/omg/CORBA/ORB.java (string_to_object): Documentation update.
+ 
+ 2005-11-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/stream/XMLStreamWriterImpl.java: Fixed handling of
+ 	namespaces when isPrefixDefaulting is set.
+ 
+ 2005-11-04  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java: Reformatted.
+ 
+ 2005-11-04  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/Window.java
+ 	(setLocationRelativeTo): Implemented case when
+ 	component is not null.
+ 
+ 2005-11-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/image/BufferedImage.java (BufferedImage): Implement
+ 	Transparency.
+ 	(getTransparency): New method.
+ 
+ 2005-11-04  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * gnu/CORBA/SocketRepository.java (sockets): Changed type to
+ 	HashMap. (put_socket, get_socket, gc):
+ 	Always synchronize on 'sockets'.
+ 
+ 2005-11-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.20-pre.
+ 
+ 2005-11-04  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/StyleConstants.java:
+ 	(Family): New API field.
+ 	(Size): New API field.
+ 
+ 2005-11-04  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(paintMenuItem): Changed to use isTopLevelMenu rather than checking
+ 	instance of parent.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java
+ 	(popupMenuWillBecomeInvisible): Added check to prevent NPE.
+ 	* javax/swing/Popup.java:
+ 	Added new private field.
+ 	(LightweightPopup): Initialized layeredPane.
+ 	(show): Removed unneeded code.
+ 	(hide): Likewise.
+ 
+ 2005-11-04  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(updateUI): Set the background and foreground color fields to null
+ 	here so that installing the LabelUI does not interfere with our
+ 	custom set colors.
+ 	(getTableCellRendererComponent): Only set UI focus colors when
+ 	cell is actually editable. Added optimization for the case
+ 	when background is equal to table background.
+ 
+ 2005-11-04  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(getTableCellRendererComponent): Call super.setBackground() or
+ 	super.setForeground() to avoid overriding custom set background or
+ 	foreground colors. Set the UI focus colors when focused.
+ 
+ 2005-11-04  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/TextFieldDemo.java: New file.
+ 	Demonstrates the JTextFields in various states.
+ 	* examples/gnu/classpath/examples/swing/Demo.java: Replaced the
+ 	old textfield demo with the new one.
+ 
+ 2005-11-04  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(getMinimumSize): New method.
+ 	* javax/swing/text/FieldView.java
+ 	(getPreferredSpan): Added assert that replaces a 'should never happen'
+ 	comment.
+ 
+ 2005-11-04  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(getTiledSizeRequirements): Added check for overflows.
+ 	(adjustGreater): Fixed overflow handling through usage of long
+ 	instead of int.
+ 
+ 2005-11-03  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultCaret.java
+ 	(positionCaret): Call setDot instead of moveDot.
+ 	* javax/swing/text/PlainView.java
+ 	(viewToModel): Exclude the final newline character from calculation.
+ 
+ 2005-11-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/announce/20051102.wml: New file.
+ 	* doc/www.gnu.org/newsitems.txt: Add 0.19 release announcement.
+ 	* doc/www.gnu.org/downloads/downloads.wml: Add 0.19.
+ 
+ 2005-11-03  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(background): New field.
+ 	(foreground): New field.
+ 	(setBackground): Store the color that is set here.
+ 	(setForeground): Store the color that is set here.
+ 	(getTableCellRendererComponent): For the unselected color, set the
+ 	value of the foreground or background fields if not null, otherwise
+ 	the value of the according table properties. Don't change
+ 	the color in the focused clause.
+ 
+ 2005-11-03  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(mousePressed): If the control icon is clicked, the
+ 	path selected should not be changed.
+ 	(paintRecursively): Moved call to getChildCount before
+ 	loop.
+ 	(paintRow): Added a check to prevent NPE.
+ 	(updateCurrentVisiblePath): Made this slightly more efficent. 
+ 	Instead of checking each path, we can check the siblings if the
+ 	current node is not expanded.
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(getTableCellRendererComponent): Fixed indentation, and changed
+ 	to set the background color if it is not an instance of
+ 	ColorUIResource. Prevents overriding a user-set color.
+ 
+ 2005-11-03  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/WrappedPlainView.java: Fixed some > 80 chars lines.
+ 	(drawSelectedText): Fixed startOffset for call to 
+ 	Utilities.drawTabbedText to make sure tabs are properly expanded.
+ 	(drawUnselectedText): Likewise.
+ 	(getMinimumSpan): New API method.
+ 	(getMaximumSpan): New API method.
+ 	(setSize): Call preferenceChanged if the width has changed.
+ 	(WrappedLine.determineNumLines): Move numLines=0 to the top in case 
+ 	the early return happens, numLines will still be correct.
+ 	(WrappedLine.updateDamage): New implementation method called by 
+ 	insertUpdate and removeUpdate to repaint the appropriate part of the 
+ 	JTextArea.
+ 	(WrappedLine.insertUpdate): New method.
+ 	(WrappedLine.removeUpdate): New method.
+ 
+ 2005-11-03  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(getTableCellRendererComponent): Fixed so that the label is 
+ 	painted with the correct background color. Does not depend on 
+ 	type of border. Removed this code.
+ 
+ 2005-11-03  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/JTextComponent.java:
+ 	(select): The end index cannot be smaller than the start index, changed
+ 	Math.max(end, 0) to Math.max(end, start).
+ 	* javax/swing/text/WrappedPlainView.java:
+ 	(selectionStart): New package private field.
+ 	(selectionEnd): Likewise.
+ 	(drawLine): Implemented to call drawUnselectedText and drawSelectedText
+ 	on the appropriate parts of the line.  Before it just drew the whole
+ 	line with drawUnselectedText.
+ 	(paint): Store the start and end of the selection.
+ 	(WrappedLine.paint): Set the selected color to Color.WHITE.
+ 
+ 2005-11-03  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(getTableCellRendererComponent): Should only draw focus if the border
+ 	is not an empty border.
+ 
+ 2005-11-03  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	PR swing/24650
+ 	* javax/swing/text/PlainView.java (viewToModel)):
+ 	The end of line symbol (0xA), if being the last member in the 
+ 	obtained text, should not be counted. 
+ 
+ 2005-11-03  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	Changed field to be the gap between the different
+ 	menu's instead. defaultTextArrowGap is not needed.
+ 	(getPreferredMenuItemSize): Adjusted preferred size of
+ 	Menu Item with an arrowIcon to be the size of the
+ 	popupMenu. If its parent is not a popupMenu, then
+ 	it is a new Menu on a MenuBar.
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(paintFocus): Height of focus border should not be 
+ 	adjusted. It was being cutoff.
+ 
+ 2005-11-03  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.getNextVisualPositionFrom): New method.
+ 
+ 2005-11-03  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java
+ 	(AttributeUndoableEdit): New inner class.
+ 	(StyleChangeListener): New inner class.
+ 	(styleChangeListener): New field.
+ 	(addStyle): Add styleChangeListener to new style.
+ 	(getStyleNames): New method.
+ 	(styleChanged): New method.
+ 	(insert): New method.
+ 	(create): New method.
+ 
+ 2005-11-03  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultTextUI.java: New file.
+ 
+ 2005-11-03  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultCaret.java
+ 	(mouseDragged): Call moveCaret.
+ 	(mouseClicked): Made TODO comment more precise.
+ 	(mouseExited): Replaced TODO comment with Nothing to do comment.
+ 	(mousePressed): Call positionCaret.
+ 	(moveCaret): Implemented.
+ 	(positionCaret): Implemented.
+ 	(moveDot): Call adjustVisibility.
+ 	(setDot): Call adjustVisibility.
+ 	(adjustVisibility): New method.
+ 
+ 2005-11-03  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/Utilities.java
+ 	(getPositionAbove): New utility method.
+ 	(getPositionBelow): New utility method.
+ 	(getParagraphElement): Special case for StyledDocuments.
+ 	* javax/swing/text/View.java
+ 	(getNextVisualPositionFrom): New abstract method.
+ 	* javax/swing/text/ComponentView.java
+ 	(getNextVisualPositionFrom): New method.
+ 	* javax/swing/text/CompositeView.java
+ 	(getNextVisualPositionFrom): New method.
+ 	* javax/swing/text/FlowView.java
+ 	(LogicalView.getNextVisualPositionFrom): New method.
+ 	* javax/swing/text/GlyphView.java
+ 	(getNextVisualPositionFrom): New method.
+ 	* javax/swing/text/IconView.java
+ 	(getNextVisualPositionFrom): New method.
+ 	* javax/swing/text/PlainView.java
+ 	(getNextVisualPositionFrom): New method.
+ 	* javax/swing/text/WrappedPlainView.java
+ 	(WrappedLine.getNextVisualPositionFrom): New method.
+ 
+ 2005-11-03  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultCaret.java
+ 	(BlinkTimerListener): New inner class. Listens for when the
+ 	blink timer fires and updates the visible flag accordingly.
+ 	(visible): Default value for visible should be false.
+ 	(blinkTimer): New field.
+ 	(Caret): New constructor.
+ 	(focusGained): Make the caret visible.
+ 	(focusLost): Make caret invisible if the focus lost is permanent.
+ 	(deinstall): Deinstall the blink timer.
+ 	(repaint): Call getComponent() instead of directly accessing the
+ 	textComponent field.
+ 	(paint): Call getComponent() instead of directly accessing the
+ 	textComponent field. Added an assert for the 'this should never
+ 	happen' comment. Update the caret rectangle if damage hasn't been
+ 	called before.
+ 	(setBlinkRate): Set the blink rate in the timer if there is already
+ 	a timer present.
+ 	(setVisible): Call damage on the caret's location. Start/Stop blink
+ 	timer.
+ 	(damage): New method. Updates the caret's bounds.
+ 	* javax/swing/text/JTextComponent.java
+ 	(CaretBlinkTimer): Removed unneeded inner class.
+ 	(caretBlinkTimer): Removed unneeded field.
+ 	(JTextComponent): Removed initialization of blink timer.
+ 	(setEditable): Removed starting of blink timer.
+ 	(setCaret): Likewise.
+ 	* javax/swing/text/Utilities.java
+ 	(getParagraphElement): New utility method.
+ 
+ 2005-11-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (initComponentGraphics): Set
+ 	color to BLACK when getForeground() returns null.
+ 	(initComponentGraphicsUnlocked): Likewise.
+ 
+ 2005-11-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/Timer.java (Waker.run): Synchronize on queueLock and use
+ 	queueLock.wait(), not Thread.sleep().
+ 	(start): Synchronize on queueLock and check whether waker is null.
+ 	(stop): Synchronize on queueLock and notifyAll().
+ 
+ 2005-11-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.19.
+ 	* NEWS: Add date of release.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Dialog.java
+ 	(show): Do not call pack() here.
+ 
+ 2005-11-02  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* AUTHORS: Added myself.
+ 	
+ 2005-11-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/Timer.java (Waker.run): Only break out when !running.
+ 
+ 2005-11-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/UIManager.java (static): Print complete exception.
+ 
+ 2005-11-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/Makefile.am: Add typeHiding, unchecked, unused and varargsCast
+ 	to ECJ compile warning rule.
+ 
+ 2005-11-02  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* lib/copy-vmresources.sh.in: Added definition for top_srcdir.
+ 
+ 2005-11-02  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* NEWS: Mention Qt4 configury for OS-X.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* NEWS: Added some news items regarding my Swing work.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(findOverlapFreeParent): Don't search beyond the components
+ 	containing window (important when in a Dialog).
+ 
+ 2005-11-02  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* AUTHORS: Added myself to the cool gang.
+ 
+ 2005-11-02  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/WrappedPlainView.java:
+ 	(calculateBreakPosition): If the component is not valid use it's 
+ 	preferredSize instead of getBounds().
+ 
+ 2005-11-02  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/Dialog.java
+ 	(show): pack should always be called before show, so Dialog is
+ 	set to the correct size and validated.
+ 
+ 2005-11-02  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* configure.ac: Check for cairo, pangoft2 and freetype2 only 
+ 	when gtk peers are enabled.
+ 
+ 2005-11-02    Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* AUTHORS (Stuart Ballard): Address update.
+ 
+ 2005-11-02    Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* AUTHORS: Added Lillian Angel.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JToolBar.java
+ 	(addImpl): Don't call updateUI here. This is really not necessary.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(installDefaults): Call setRolloverBorders() here in order to
+ 	initialize the button borders.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(PropertyChangeHandler.propertyChange): Re-setup listeners on
+ 	the scrollbars if the scrollbars change.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Container.java
+ 	(addImpl): Notify registered ContainerListeners even when the
+ 	Container is not showing. Notify the listeners directly, not
+ 	via the event queue.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Fixed the defaults for EditorPane.border,
+ 	TextArea.font and TextPane.border.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Component.java
+ 	(getForeground): Return null as default color, instead of some
+ 	system color.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/BoxLayout.java
+ 	(BoxLayout): Throw AWTError when the axis is invalid.
+ 	(minimumLayoutSize): Respect the insets of the container.
+ 	(maximumLayoutSize): Likewise.
+ 	(invalidateLayout): Throw AWTError if the managed container is
+ 	not the same as the parent parameter.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Component.java
+ 	(getMaximumSize): Return (Short.MAX_VALUE, Short.MAX_VALUE) instead
+ 	of (Integer.MAX_VALUE, Integer.MAX_VALUE) as shown by the
+ 	Mauve test.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(AccessibleJTable.AccessibleJTableCell): New inner class.
+ 
+ 2005-11-02  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/filechooser/FileSystemView.java: Added API docs all over,
+ 	* javax/swing/filechooser/UnixFileSystemView.java: Likewise.
+ 
+ 2005-11-02  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* java/lang/String.java (String): Added 
+ 	StringIndexOutOfBoundsException check (overflow) and a message 
+ 	to the exceptions.
+ 			
+ 2005-11-02  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* NEWS: added entries for javax.swing.plaf.metal.* package and updates
+ 	to the gnu.classpath.examples.swing.Demo application,
+ 	* AUTHORS:  Added my name to bring honour and glory to myself and all 
+ 	my descendants.
+ 
+ 2005-11-02  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(AccessibleJComponent.changeSupport): New field.
+ 	(AccessibleJComponent.AccessibleJComponent): Initialize changeSupport.
+ 	(AccessibleJComponent.addPropertyChangeListener): Implemented this
+ 	method.
+ 	(AccessibleJComponent.removePropertyChangeListener): Implemented this
+ 	method.
+ 	(AccessibleJComponent.getAccessibleChildrenCount): Implemented this
+ 	method.
+ 	(AccessibleJComponent.getAccessibleChild): Implemented this
+ 	method.
+ 	(AccessibleJComponent.getAccessibleName): Added API comment and
+ 	TODO tag.
+ 	(AccessibleJComponent.getAccessibleDescription): Added API comment
+ 	and TODO tag.
+ 	(AccessibleJComponent.getAccessibleRole): Implemented this method.
+ 	(AccessibleJComponent.getBorderTitle): Implemented this method.
+ 	(AccessibleJComponent.getToolTipText): Implemented this method.
+ 	(AccessibleJComponent.getTitledBorderText): Implemented this method.
+ 	(AccessibleJComponent.getAccessibleKeyBinding): Added API comment
+ 	and TODO tag.
+ 
+ 2005-11-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java (init): Use
+ 	JOptionPane to select the laf if not explicitly set.
+ 
+ 2005-11-01  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/io/ObjectInputStream.java:
+ 	(parseContent(byte)): Remove weird exception
+ 	throwing.
+ 	
+ 2005-11-01  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Window.java
+ 	(show): Don't set size of the window here.
+ 
+ 2005-11-01  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalScrollPaneUI.java
+ 	(instance): Removed unnecessary field.
+ 	(createUI): Always return a new instance instead of returning a
+ 	shared instance.
+ 
+ 2005-11-01  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/Window.java
+ 	(show): If pack is not called before show, the size of the
+ 	window is often set to 0. This is now fixed.
+ 
+ 2005-11-01  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JPopupMenu.java
+ 	(setVisible): Pack the JPopupMenu before fetching the Popup
+ 	instance. Otherwise the PopupFactory has the wrong size for
+ 	its size check.
+ 
+ 2005-11-01  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(JTable(TableModel, TableColumnModel, ListSelectionModel)): Call 
+ 	updateUI after initializeLocalVars.  Manually set the lead selection
+ 	indices.
+ 
+ 2005-11-01  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java:
+ 	(getApproveButtonText): First use the JFileChooser's approve button 
+ 	text, but if it is null, then try otherwise.
+ 
+ 2005-11-01  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* vm/reference/java/lang/VMThread.java (sleep): Don't round     
+ 	ms and pass ns to Object.wait, fixes mauve test.
+ 		
+ 2005-11-01  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JFileChooser.java:
+ 	(getDialogTitle): Allow return of null.
+ 	(getApproveButtonText): Likewise.
+ 	(getFileView): Likewise.
+ 	(getName): First try using the JFileChooser's FileView, if null, then
+ 	pass call to UI.
+ 	(getDescription): Likewise.
+ 	(getTypeDescription): Likewise.
+ 	(getIcon): Likewise.
+ 
+ 2005-11-01  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(JTable(TableModel, TableColumnModel, ListSelectionModel)): Set the 
+ 	model before calling initializeLocalVars.
+ 
+ 2005-11-01  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
+ 	(BasicCheckBoxMenuItem): Moved code to BasicMenuItemUI.installDefaults
+ 	(processMouseEvent): Added TODO comment. Not sure about the 
+ 	correct implementation yet.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Removed MenuItem.checkIcon default. Only
+ 	RadioButtonMenuItem's and CheckBoxMenuItem's have checkIcons.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(installDefaults): Fixed to initialized checkIcon. If the menuItem is
+ 	not a RadioButtonMenuItem or CheckBoxMenuItem, then checkIcon is null.
+ 	Also, fixed defaults to use prefix.
+ 
+ 2005-11-01  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectOutputStream.java
+ 	(writeObject): Fixed NPE.
+ 
+ 2005-10-31  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextAreaUI.java:
+ 	(create): Added docs.  Create WrappedPlainView instead of PlainView if
+ 	the text area has line wrapping turned on.
+ 	(propertyChange): New API method.  If line wrapping is turned on or off
+ 	or if the style of wrapping (character or word) is changed, call 
+ 	modelChanged().
+ 	* javax/swing/plaf/basic/BasicTextUI.java:
+ 	(setView): Call revalidate and repaint after setting the View.
+ 	* javax/swing/text/WrappedPlainView.java:
+ 	(insertUpdate): Repaint the container.
+ 	(removeUpdate): Likewise.
+ 	(changedUpdate): Likewise.
+ 
+ 2005-10-31  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/WrappedPlainView.java:
+ 	(viewFactory): New field.
+ 	(drawLine): New API method.
+ 	(calculateBreakPosition): Update the metrics before calling Utilities
+ 	methods. Fixed error in offset argument passed to the Utilities 
+ 	methods.
+ 	(updateMetrics): New implementation method.
+ 	(getPreferredSpan): New API method.
+ 	(insertUpdate): Likewise.
+ 	(removeUpdate): Likewise.
+ 	(changedUpdate): Likewise.
+ 	(WrappedLineCreator): New class.
+ 	(paint): New API method.
+ 	(setSize): New API method.
+ 	(WrappedLine.paint): Implemented.
+ 	(WrappedLine.getPreferredSpan): Don't update the metrics, this is now
+ 	done in WrappedPlainView.paint.
+ 	(WrappedLine.modelToView): Likewise.
+ 	(WrappedLine.viewToModel): Likewise.
+ 	
+ 2005-10-31  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/Utilities.java:
+ 	(getTabbedTextOffset): Adjusted for loop bound down by s.offset and
+ 	adjusted array index up by s.offset.  This fixes the second part of 
+ 	PR 24316.  Expand tabs, not newlines.  Allow the x-position to reach
+ 	the end specified position (use < instead of <=).
+ 
+ 2005-10-31  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTextField.java
+ 	(horizontalVisibility): New field.
+ 	(JTextField): Initialize horizontalVisibility field.
+ 	(getHorizontalVisibility): New method.
+ 
+ 2005-10-31  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/SocketRepository.java (not_reusable, gc): New methods.
+ 	(sockets): Use hashtable. (get_socket): Rewritten.
+ 
+ 2005-10-31  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(AccessibleJTable.tableChanged): Implemented.
+ 	(AccessibleJTable.tableRowsInserted): Implemented.
+ 	(AccessibleJTable.tableRowsDeleted): Implemented.
+ 
+ 2005-10-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(updateCurrentVisiblePath): Check whether treeModel is null.
+ 
+ 2005-10-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java (static): Set look
+ 	and feel before showing dialog. Clean up message text.
+ 
+ 2005-10-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/text/PlainView.java (determineMaxLineLength): Get
+ 	correct lenght of text.
+ 	(drawLine): Throw AssertionError on unexpected bad location.
+ 	(viewToModel): Likewise.
+ 
+ 2005-10-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java (dump): Actually throw
+ 	AssertionError when constructed.
+ 	* javax/swing/text/DefaultFormatter.java (checkValidInput): Add cause
+ 	to AssertionError.
+ 	* javax/swing/text/DefaultStyledDocument.java (insertUpdate):
+ 	Likewise.
+ 	* javax/swing/text/GlyphView.java (getPartialSpan): Likewise.
+ 	(getText): Likewise.
+ 	* javax/swing/text/PlainView.java (determineMaxLineLength): Likewise.
+ 	(updateDamage): Likewise.
+ 
+ 2005-10-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/rmi/server/UnicastServer.java (refcache): Make it a
+ 	synchronized IdentityHashMap.
+ 
+ 2005-10-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(GdkGraphics2D(GdkGraphics2D,int, int, int,int)): New constructor.
+ 	(create(int,int,int,int)): Use new constructor.
+ 	(copyArea): Implement through create() and gdkDrawDrawable().
+ 
+ 2005-10-29  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(register): Throw IllegalBlockingModeException if the channel is
+ 	not in blocking mode. 
+ 	
+ 2005-10-29  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/ButtonDemo.java
+ 	(ButtonDemo): add closePanel after content is created,
+ 	(createContent): don't add closePanel here,
+ 	* examples/gnu/classpath/examples/swing/ComboBoxDemo.java
+ 	(ButtonDemo): add closePanel after content is created,
+ 	(createContent): don't add closePanel here,
+ 	* examples/gnu/classpath/examples/swing/ScrollBarDemo.java
+ 	(ButtonDemo): add closePanel after content is created,
+ 	(createContent): don't add closePanel here,
+ 	* examples/gnu/classpath/examples/swing/SliderDemo.java
+ 	(ButtonDemo): add closePanel after content is created,
+ 	(createContent): add separate checkBoxPanel but don't add closePanel 
+ 	here.
+ 
+ 2005-10-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/KeyboardFocusManager.java
+ 	(setCurrentKeyboardFocusManager): Create a DefaultKeyboardFocusManager
+ 	directly.
+ 	(createFocusManager): Removed.
+ 	* gnu/java/awt/FocusManager.java: Removed.
+ 	* javax/swing/FocusManager.java
+ 	(DisabledFocusManager): Removed inner class.
+ 	(WrappingFocusManager): New inner class.
+ 	(getCurrentManager): Return WrappingKeyboardFocusManager instance.
+ 
+ 2005-10-28  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/Component.java:
+ 	(requestFocus): If this component is a Container, start here, not at
+ 	its parent when	looking for the top-level ancestor.  If no top-level
+ 	ancestor is found (parent == null), return.
+ 
+ 2005-10-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/table/DefaulTableCellRenderer.java
+ 	(getTableCellRenderer): Correctly configure the cell renderer for
+ 	selected and / or focused cells.
+ 	* javax/swing/table/JTableHeader.java
+ 	(getHeaderRect): Don't include the intercellSpacing in the
+ 	header rectangle.
+ 
+ 2005-10-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	(MouseInputHandler.mouseDragged): Only react if table is enabled.
+ 	(MouseInputHandler.mousePressed): Only react if table is enabled.
+ 	(MouseInputHandler.mouseReleased): Only react if table is enabled.
+ 	(PropertyChangeHandler): New inner class. Updates the state of
+ 	the table if the model property changes.
+ 	(installDefaults): Don't load the highlightCellBorder here. This
+ 	is done in the cell renderer now.
+ 	(installListeners): Install the new PropertyChangeListener.
+ 	(uninstallListeners): Uninstall the new PropertyChangeListener.
+ 	(paintCell): Fixed determination of the selected and focused state
+ 	of the cell. Removed handling of the border (this is moved into
+ 	the cell renderer).
+ 	(paint): Fixed the rectangle calculation of the cell. Fixed painting
+ 	of the grid.
+ 
+ 2005-10-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(setLeadSelectionIndex): Forbit some changes to leadSelectionIndex
+ 	when the anchorSelectionIndex is not set properly.
+ 
+ 2005-10-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Poa/AOM.java,
+ 	gnu/CORBA/Poa/AccessiblePolicy.java,
+ 	gnu/CORBA/Poa/DynamicImpHandler.java,
+ 	gnu/CORBA/Poa/StandardPolicies.java,
+ 	gnu/CORBA/Poa/ServantDelegateImpl.java,
+ 	gnu/CORBA/Poa/NamingService/NameComponentComparator.java
+ 	gnu/CORBA/Poa/NamingService/NameTransformer.java
+ 	gnu/CORBA/GIOP/ContextHandler.java,
+ 	gnu/CORBA/GIOP/CodeSetServiceContext.java: New files.
+ 	* gnu/CORBA/GIOP/contextSupportingHeader.java,
+ 	gnu/CORBA/GIOP/cxCodeSet.java,
+ 	gnu/CORBA/NamingService/cmpNameComponent.java,
+ 	gnu/CORBA/NamingService/snConverter.java,
+ 	gnu/CORBA/Poa/activeObjectMap.java,
+ 	gnu/CORBA/Poa/dynImpHandler.java,
+ 	gnu/CORBA/Poa/policySets.java,
+ 	gnu/CORBA/Poa/servantDelegate.java,
+ 	gnu/CORBA/Poa/vPolicy.java: Removed.
+ 	* gnu/CORBA/GIOP/CharSets_OSF:
+ 	Explaining the reason of setting "_OSF" apart.
+ 	* gnu/CORBA/CDR/AbstractCdrInput.java,
+ 	gnu/CORBA/CDR/AbstractCdrOutput.java,
+ 	gnu/CORBA/GIOP/CharSets_OSF.java,
+ 	gnu/CORBA/GIOP/ReplyHeader.java,
+ 	gnu/CORBA/GIOP/RequestHeader.java,
+ 	gnu/CORBA/GIOP/ServiceContext.java,
+ 	gnu/CORBA/GIOP/v1_0/ReplyHeader.java,
+ 	gnu/CORBA/GIOP/v1_0/RequestHeader.java,
+ 	gnu/CORBA/GIOP/v1_2/ReplyHeader.java,
+ 	gnu/CORBA/GIOP/v1_2/RequestHeader.java,
+ 	gnu/CORBA/IOR.java,
+ 	gnu/CORBA/NamingService/Ext.java,
+ 	gnu/CORBA/NamingService/NameParser.java,
+ 	gnu/CORBA/NamingService/NamingMap.java,
+ 	gnu/CORBA/Poa/ForwardedServant.java,
+ 	gnu/CORBA/Poa/LocalDelegate.java,
+ 	gnu/CORBA/Poa/LocalRequest.java,
+ 	gnu/CORBA/Poa/ORB_1_4.java,
+ 	gnu/CORBA/Poa/gnuAdapterActivator.java,
+ 	gnu/CORBA/Poa/gnuIdAssignmentPolicy.java,
+ 	gnu/CORBA/Poa/gnuIdUniquenessPolicy.java,
+ 	gnu/CORBA/Poa/gnuImplicitActivationPolicy.java,
+ 	gnu/CORBA/Poa/gnuLifespanPolicy.java,
+ 	gnu/CORBA/Poa/gnuPOA.java,
+ 	gnu/CORBA/Poa/gnuRequestProcessingPolicy.java,
+ 	gnu/CORBA/Poa/gnuServantObject.java,
+ 	gnu/CORBA/Poa/gnuServantRetentionPolicy.java,
+ 	gnu/CORBA/Poa/gnuThreadPolicy.java,
+ 	gnu/CORBA/ResponseHandlerImpl.java,
+ 	gnu/CORBA/gnuRequest.java,
+ 	gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/UtilDelegateImpl.java,
+ 	org/omg/CosNaming/_NamingContextExtStub.java:
+ 	References updated.
+ 
+ 2005-10-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(JTable): Changed order of initialization (UI first, then the model
+ 	etc), so that the UI gets notified of the initial model change.
+ 	(rowAtPoint): Don't add the intercellSpacing in the calculation
+ 	of the row-at-Point.
+ 	(setModel): Throw a PropertyChangeEvent here if the model changes.
+ 
+ 2005-10-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/DynAn/ValueChangeListener.java
+ 	gnu/CORBA/DynAn/AbstractAny.java
+ 	gnu/CORBA/DynAn/RecordAny.java
+ 	gnu/CORBA/DynAn/DivideableAny.java
+ 	gnu/CORBA/DynAn/UndivideableAny.java: New files.
+ 	* gnu/CORBA/DynAn/abstractDynAny.java,
+ 	gnu/CORBA/DynAn/recordAny.java,
+ 	gnu/CORBA/DynAn/anyDivideable.java,
+ 	gnu/CORBA/DynAn/anyUndivideable.java,
+ 	gnu/CORBA/DynAn/valueChangedListener.java: Removed.
+ 	* gnu/CORBA/DynAn/gnuDynAny.java,
+ 	gnu/CORBA/DynAn/gnuDynArray.java,
+ 	gnu/CORBA/DynAn/gnuDynEnum.java,
+ 	gnu/CORBA/DynAn/gnuDynFixed.java,
+ 	gnu/CORBA/DynAn/gnuDynStruct.java,
+ 	gnu/CORBA/DynAn/gnuDynUnion.java,
+ 	gnu/CORBA/DynAn/gnuDynValue.java,
+ 	gnu/CORBA/DynAn/gnuDynValueBox.java:
+ 	References updated.
+ 
+ 2005-10-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/CDR/abstractDataInputStream.java,
+ 	gnu/CORBA/CDR/abstractDataOutputStream.java,
+ 	gnu/CORBA/CDR/aligningInputStream.java,
+ 	gnu/CORBA/CDR/aligningOutputStream.java,
+ 	gnu/CORBA/CDR/cdrBufInput.java.java,
+ 	gnu/CORBA/CDR/cdrBufOutput.java
+ 	gnu/CORBA/CDR/cdrInput.java,
+ 	gnu/CORBA/CDR/cdrOutput.java,
+ 	gnu/CORBA/CDR/encapsulatedOutput.java,
+ 	gnu/CORBA/CDR/noHeaderInput.java: Removed.
+ 	* gnu/CORBA/CDR/HeadlessInput.java
+ 	gnu/CORBA/CDR/AbstractCdrInput.java
+ 	gnu/CORBA/CDR/AbstractCdrOutput.java
+ 	gnu/CORBA/CDR/AbstractDataInput.java
+ 	gnu/CORBA/CDR/AbstractDataOutput.java
+ 	gnu/CORBA/CDR/AligningInput.java
+ 	gnu/CORBA/CDR/AligningOutput.java
+ 	gnu/CORBA/CDR/BufferedCdrOutput.java
+ 	gnu/CORBA/CDR/BufferredCdrInput.java
+ 	gnu/CORBA/CDR/EncapsulationStream.java: New files.
+ 	* gnu/CORBA/CDR/ArrayValueHelper.java,
+ 	gnu/CORBA/CDR/BigEndianInputStream.java,
+ 	gnu/CORBA/CDR/BigEndianOutputStream.java,
+ 	gnu/CORBA/CDR/LittleEndianInputStream.java,
+ 	gnu/CORBA/CDR/LittleEndianOutputStream.java,
+ 	gnu/CORBA/CDR/UnknownExceptionCtxHandler.java,
+ 	gnu/CORBA/CDR/Vio.java,
+ 	gnu/CORBA/CdrEncapsCodecImpl.java,
+ 	gnu/CORBA/DynAn/gnuDynAny.java,
+ 	gnu/CORBA/GIOP/MessageHeader.java,
+ 	gnu/CORBA/GIOP/ReplyHeader.java,
+ 	gnu/CORBA/GIOP/RequestHeader.java,
+ 	gnu/CORBA/GIOP/ServiceContext.java,
+ 	gnu/CORBA/GIOP/cxCodeSet.java,
+ 	gnu/CORBA/GIOP/v1_0/ReplyHeader.java,
+ 	gnu/CORBA/GIOP/v1_0/RequestHeader.java,
+ 	gnu/CORBA/GIOP/v1_2/ReplyHeader.java,
+ 	gnu/CORBA/GIOP/v1_2/RequestHeader.java,
+ 	gnu/CORBA/GeneralHolder.java,
+ 	gnu/CORBA/IOR.java,
+ 	gnu/CORBA/Interceptor/gnuIcCurrent.java,
+ 	gnu/CORBA/IorDelegate.java,
+ 	gnu/CORBA/ObjectCreator.java,
+ 	gnu/CORBA/OrbFunctional.java,
+ 	gnu/CORBA/OrbRestricted.java,
+ 	gnu/CORBA/Poa/LocalDelegate.java,
+ 	gnu/CORBA/Poa/LocalRequest.java,
+ 	gnu/CORBA/Poa/gnuPOA.java,
+ 	gnu/CORBA/RawReply.java,
+ 	gnu/CORBA/ResponseHandlerImpl.java,
+ 	gnu/CORBA/ServiceRequestAdapter.java,
+ 	gnu/CORBA/StreamBasedRequest.java,
+ 	gnu/CORBA/gnuAny.java,
+ 	gnu/CORBA/gnuRequest.java,
+ 	gnu/CORBA/typecodes/GeneralTypeCode.java,
+ 	gnu/javax/rmi/CORBA/DefaultWriteObjectTester.java,
+ 	gnu/javax/rmi/CORBA/RmiUtilities.java,
+ 	gnu/javax/rmi/CORBA/StubDelegateImpl.java,
+ 	org/omg/IOP/TaggedProfileHelper.java:
+ 	References updated.
+ 
+ 2005-10-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/javax/rmi/CORBA/corbaObjectInput.java,
+ 	gnu/javax/rmi/CORBA/corbaObjectOutput.java,
+ 	gnu/javax/rmi/CORBA/dwoTester.java,
+ 	gnu/javax/rmi/CORBA/gnuRmiUtil: Deleted.
+ 	* gnu/javax/rmi/CORBA/CorbaInput.java,
+ 	gnu/javax/rmi/CORBA/CorbaOutput.java,
+ 	gnu/javax/rmi/CORBA/DefaultWriteObjectTester.java,
+ 	gnu/javax/rmi/CORBA/RmiUtilities.java: New files.
+ 	* gnu/javax/rmi/CORBA/UtilDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java:
+ 	References updated.
+ 
+ 2005-10-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/holderFactory.java,
+ 	gnu/CORBA/IOR_contructed_object.java,
+ 	gnu/CORBA/IOR_Delegate.java,
+ 	gnu/CORBA/Simple_delegate.java,
+ 	gnu/CORBA/Restricted_ORB.java,
+ 	gnu/CORBA/Functional_ORB.java,
+ 	gnu/CORBA/Focused_ORB.java: Removed.
+ 	* gnu/CORBA/HolderLocator.java
+ 	gnu/CORBA/IorDelegate.java
+ 	gnu/CORBA/IorObject.java
+ 	gnu/CORBA/OrbFocused.java
+ 	gnu/CORBA/OrbFunctional.java
+ 	gnu/CORBA/OrbRestricted.java
+ 	gnu/CORBA/SimpleDelegate.java: New files.
+ 	* gnu/CORBA/CDR/cdrInput.java,
+ 	gnu/CORBA/DynAn/abstractRecord.java,
+ 	gnu/CORBA/DynAn/gnuDynAny.java,
+ 	gnu/CORBA/DynAn/gnuDynAnyFactory.java,
+ 	gnu/CORBA/DynAn/gnuDynArray.java,
+ 	gnu/CORBA/DynAn/gnuDynValueBox.java,
+ 	gnu/CORBA/GIOP/ErrorMessage.java,
+ 	gnu/CORBA/NamingService/NameParser.java,
+ 	gnu/CORBA/NamingService/NamingServiceTransient.java,
+ 	gnu/CORBA/Poa/ForwardedServant.java,
+ 	gnu/CORBA/Poa/ORB_1_4.java,
+ 	gnu/CORBA/Poa/gnuServantObject.java,
+ 	gnu/CORBA/StubLocator.java,
+ 	gnu/CORBA/gnuAny.java,
+ 	gnu/CORBA/gnuRequest.java,
+ 	gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/gnuRmiUtil.java,
+ 	org/omg/CORBA/CompletionStatusHelper.java,
+ 	org/omg/CORBA/DefinitionKindHelper.java,
+ 	org/omg/CORBA/FieldNameHelper.java,
+ 	org/omg/CORBA/IDLTypeHelper.java,
+ 	org/omg/CORBA/IdentifierHelper.java,
+ 	org/omg/CORBA/ORB.java,
+ 	org/omg/CORBA/ParameterModeHelper.java,
+ 	org/omg/CORBA/RepositoryIdHelper.java,
+ 	org/omg/CORBA/SetOverrideTypeHelper.java,
+ 	org/omg/CORBA/StringValueHelper.java,
+ 	org/omg/CORBA/StructMemberHelper.java,
+ 	org/omg/CORBA/UnionMemberHelper.java,
+ 	org/omg/CORBA/ValueMemberHelper.java,
+ 	org/omg/CORBA/VersionSpecHelper.java,
+ 	org/omg/CORBA/VisibilityHelper.java,
+ 	org/omg/CORBA/WStringValueHelper.java,
+ 	org/omg/CORBA/_IDLTypeStub.java,
+ 	org/omg/CosNaming/IstringHelper.java,
+ 	org/omg/DynamicAny/FieldNameHelper.java,
+ 	org/omg/PortableInterceptor/AdapterNameHelper.java,
+ 	org/omg/PortableInterceptor/ORBIdHelper.java,
+ 	org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java,
+ 	org/omg/PortableInterceptor/ObjectIdHelper.java,
+ 	org/omg/PortableInterceptor/ServerIdHelper.java:
+ 	References updated. 
+ 
+ 2005-10-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/universalHolder.java
+ 	gnu/CORBA/stubFinder.java
+ 	gnu/CORBA/typeNamer.java
+ 	gnu/CORBA/streamRequest.java
+ 	gnu/CORBA/streamReadyHolder.java
+ 	gnu/CORBA/binaryReply.java
+ 	gnu/CORBA/bufferedResponseHandler.java
+ 	gnu/CORBA/cdrEncapsCodec.java
+ 	gnu/CORBA/corbaArrayList.java: Removed.
+ 	* gnu/CORBA/CdrEncapsCodecImpl.java,
+ 	gnu/CORBA/CorbaList.java,
+ 	gnu/CORBA/GeneralHolder.java,
+ 	gnu/CORBA/RawReply.java,
+ 	gnu/CORBA/ResponseHandlerImpl.java,
+ 	gnu/CORBA/StreamBasedRequest.java,
+ 	gnu/CORBA/StreamHolder.java,
+ 	gnu/CORBA/StubLocator.java,
+ 	gnu/CORBA/TypeKindNamer.java: New files.
+ 	* gnu/CORBA/CDR/cdrInput.java,
+ 	gnu/CORBA/DynAn/abstractDynAny.java,
+ 	gnu/CORBA/DynAn/anyDivideable.java,
+ 	gnu/CORBA/DynAn/gnuDynAny.java,
+ 	gnu/CORBA/DynAn/gnuDynAnyFactory.java,
+ 	gnu/CORBA/Functional_ORB.java,
+ 	gnu/CORBA/IOR_Delegate.java,
+ 	gnu/CORBA/ObjectCreator.java,
+ 	gnu/CORBA/Poa/LocalDelegate.java,
+ 	gnu/CORBA/Poa/LocalRequest.java,
+ 	gnu/CORBA/Poa/gnuServantObject.java,
+ 	gnu/CORBA/Restricted_ORB.java,
+ 	gnu/CORBA/ServiceRequestAdapter.java,
+ 	gnu/CORBA/gnuAny.java,
+ 	gnu/CORBA/gnuCodecFactory.java,
+ 	gnu/CORBA/gnuContextList.java,
+ 	gnu/CORBA/gnuExceptionList.java,
+ 	gnu/CORBA/gnuNVList.java,
+ 	gnu/CORBA/gnuRequest.java,
+ 	gnu/CORBA/typecodes/RecordTypeCode.java: 
+ 	References updated.
+ 
+ 2005-10-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/typecodes/AliasTypeCode.java,
+ 	gnu/CORBA/typecodes/ArrayTypeCode.java,
+ 	gnu/CORBA/typecodes/FixedTypeCode.java,
+ 	gnu/CORBA/typecodes/GeneralTypeCode.java,
+ 	gnu/CORBA/typecodes/PrimitiveTypeCode.java,
+ 	gnu/CORBA/typecodes/RecordTypeCode.java,
+ 	gnu/CORBA/typecodes/RecursiveTypeCode.java,
+ 	gnu/CORBA/typecodes/StringTypeCode.java,
+ 	gnu/CORBA/typecodes/package.html: New files.
+ 	* gnu/CORBA/aliasTypeCode.java,
+ 	gnu/CORBA/primitiveArrayTypeCode.java,
+ 	gnu/CORBA/fixedTypeCode.java,
+ 	gnu/CORBA/generalTypeCode.java,
+ 	gnu/CORBA/primitiveTypeCode.java,
+ 	gnu/CORBA/recordTypeCode.java,
+ 	gnu/CORBA/recursiveTypeCode.java,
+ 	gnu/CORBA/stringTypeCode.java: Deleted.
+ 	* gnu/CORBA/CDR/cdrOutput.java,
+ 	gnu/CORBA/ObjectCreator.java,
+ 	gnu/CORBA/OctetHolder.java,
+ 	gnu/CORBA/Poa/LocalRequest.java,
+ 	gnu/CORBA/Poa/gnuServantObject.java,
+ 	gnu/CORBA/Restricted_ORB.java,
+ 	gnu/CORBA/TypeCodeHelper.java,
+ 	gnu/CORBA/WCharHolder.java,
+ 	gnu/CORBA/WStringHolder.java,
+ 	gnu/CORBA/gnuAny.java,
+ 	gnu/CORBA/typeNamer.java,
+ 	gnu/javax/rmi/CORBA/UtilDelegateImpl.java,
+ 	org/omg/CORBA/AnyHolder.java,
+ 	org/omg/CORBA/AnySeqHelper.java,
+ 	org/omg/CORBA/AnySeqHolder.java,
+ 	org/omg/CORBA/BooleanHolder.java,
+ 	org/omg/CORBA/BooleanSeqHelper.java,
+ 	org/omg/CORBA/BooleanSeqHolder.java,
+ 	org/omg/CORBA/ByteHolder.java,
+ 	org/omg/CORBA/CharHolder.java,
+ 	org/omg/CORBA/CharSeqHelper.java,
+ 	org/omg/CORBA/CharSeqHolder.java,
+ 	org/omg/CORBA/DefinitionKindHelper.java,
+ 	org/omg/CORBA/DoubleHolder.java,
+ 	org/omg/CORBA/DoubleSeqHelper.java,
+ 	org/omg/CORBA/DoubleSeqHolder.java,
+ 	org/omg/CORBA/FixedHolder.java,
+ 	org/omg/CORBA/FloatHolder.java,
+ 	org/omg/CORBA/FloatSeqHelper.java,
+ 	org/omg/CORBA/FloatSeqHolder.java,
+ 	org/omg/CORBA/IntHolder.java,
+ 	org/omg/CORBA/LongHolder.java,
+ 	org/omg/CORBA/LongLongSeqHelper.java,
+ 	org/omg/CORBA/LongLongSeqHolder.java,
+ 	org/omg/CORBA/LongSeqHelper.java,
+ 	org/omg/CORBA/LongSeqHolder.java,
+ 	org/omg/CORBA/NameValuePairHelper.java,
+ 	org/omg/CORBA/ORB.java,
+ 	org/omg/CORBA/ObjectHelper.java,
+ 	org/omg/CORBA/ObjectHolder.java,
+ 	org/omg/CORBA/OctetSeqHelper.java,
+ 	org/omg/CORBA/OctetSeqHolder.java,
+ 	org/omg/CORBA/PolicyErrorCodeHelper.java,
+ 	org/omg/CORBA/PrincipalHolder.java,
+ 	org/omg/CORBA/ShortHolder.java,
+ 	org/omg/CORBA/ShortSeqHelper.java,
+ 	org/omg/CORBA/ShortSeqHolder.java,
+ 	org/omg/CORBA/StringHolder.java,
+ 	org/omg/CORBA/StringSeqHelper.java,
+ 	org/omg/CORBA/StringSeqHolder.java,
+ 	org/omg/CORBA/TypeCodeHolder.java,
+ 	org/omg/CORBA/ULongLongSeqHelper.java,
+ 	org/omg/CORBA/ULongLongSeqHolder.java,
+ 	org/omg/CORBA/ULongSeqHelper.java,
+ 	org/omg/CORBA/ULongSeqHolder.java,
+ 	org/omg/CORBA/UShortSeqHelper.java,
+ 	org/omg/CORBA/UShortSeqHolder.java,
+ 	org/omg/CORBA/ValueBaseHelper.java,
+ 	org/omg/CORBA/WCharSeqHelper.java,
+ 	org/omg/CORBA/WCharSeqHolder.java,
+ 	org/omg/CORBA/WStringSeqHelper.java,
+ 	org/omg/CORBA/WStringSeqHolder.java,
+ 	org/omg/Messaging/SyncScopeHelper.java: References modified.
+ 
+ 2005-10-28  Nicolas Geoffray  <nicolas.geoffray@menlina.com>
+ 
+ 	Reported by: Gael Thomas <gael.thomas@imag.fr>
+ 	* NEWS : added entry about new implementation of
+ 	VMClassLoader.getPackage(s), and new method
+ 	VMClassLoader.getBootPackages
+ 	* vm/reference/java/lang/VMClassLoader.java:
+ 	Added new definedPackages field to store packages
+ 	loaded by the bootstrap classloader.
+ 	Added new static initializer to create all packages
+ 	which names are returned by getBootPackages
+ 	(getBootPackages): new private method. Helper
+ 	to get as a String[] the native package names
+ 	(getPackage): uses the new definedPackages field
+ 	(getPackages): uses the new definedPackages field
+ 	* java/lang/Class.java:
+ 	(getPackage): if the classloader of the class is null
+ 	then call VMClassLoader.getPackage
+ 
+ 2005-10-27  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JEditorPane.java:
+ 	(getScrollableTracksViewportWidth): Return true if the component is 
+ 	valid.
+ 	(getScrollableTracksViewportHeight): Likewise.
+ 
+ 2005-10-27  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/ScrollPaneLayout.java:
+ 	(preferredLayoutSize): Fixed the conditions for allocating space for 
+ 	the scrollbars.  Should allocate space if the View's dimension is 
+ 	larger than the Viewport's dimension. This fixes the problem in 
+ 	comment 1) for PR 23530.
+ 
+ 2005-10-27  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JViewport.java:
+ 	(scrollRectToVisible): Use the viewport bounds instead of the view 
+ 	bounds when scrolling up and scrolling left.
+ 
+ 2005-10-27  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/FieldView.java
+ 	(getPreferredSpan): For the Y_AXIS call the superclass behaviour as
+ 	described in the Swing book by OReilly.
+ 
+ 2005-10-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableInterceptor/ObjectIdHelper.java:
+ 	Assuming ObjectId as alias of byte[], not alias  of String.
+ 
+ 2005-10-27  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTextField.java
+ 	(createDefaultModel): Return a normal PlainDocument here.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(insertString): Correctly placed locking so that insertUpdate() is
+ 	called within a lock as specified. Do not setup any ElementChanges
+ 	here, this must be done in subclasses in insertUpdate() method.
+ 	Fire an UndoableEditEvent.
+ 	* javax/swing/text/PlainDocument.java
+ 	(insertString): New method. Replaces newlines with whitespace
+ 	when document property 'filterNewlines' is set.
+ 
+ 2005-10-27  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(PropertyChangeHandler.propertyChange): If orientation property
+ 	changes, re-setup the UI.
+ 	(TrackListener.mouseReleased): Removed unused code.
+ 	(createIncreaseButton): Simply return a new instance without any
+ 	hacks.
+ 	(createDecreaseButton): Likewise.
+ 	(installComponents): Do not create the incrButton and decrButton
+ 	here, only install them on the ScrollBar.
+ 	(installDefaults): Also initialize the incrButton and decrButton
+ 	fields here.
+ 	(uninstallComponents): Added some null checks.
+ 	(uninstallDefaults): Uninstall border using the LookAndFeel utility
+ 	method. Set incrButton and decrButton to null here.
+ 	(uninstallListeners): Added null checks.
+ 	(uninstallUI): Changed order of method calls. First uninstall
+ 	listeners then uninstallDefaults, because uninstallDefaults sets
+ 	the incrButton and decrButton fields to null, and uninstallListeners
+ 	removes a listener from them. Avoids NPE.
+ 
+ 2005-10-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java: API doc updates,
+ 	* javax/swing/plaf/metal/MetalButtonUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalCheckBoxIcon.java: likewise,
+ 	* javax/swing/plaf/metal/MetalCheckBoxUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalDesktopIconUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalIconFactory.java: likewise,
+ 	* javax/swing/plaf/metal/MetalInternalFrameTitlePane.java: likewise,
+ 	* javax/swing/plaf/metal/MetalInternalFrameUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalLabelUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalProgressBarUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalRadioButtonUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalRootPaneUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalScrollPaneUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalSeparatorUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalSliderUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalSplitPaneUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalTextFieldUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalToolBarUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalToolTipUI.java: likewise,
+ 	* javax/swing/plaf/metal/MetalTreeUI.java: likewise,
+ 	* javax/swing/plaf/metal/package.html: likewise.
+ 
+ 2005-10-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalToggleButtonUI.java:
+ 	(MetalToggleButtonUI): removed color field initialisation,
+ 	(installDefaults): added color field initialisation formerly in 
+ 	the constructor.
+ 
+ 2005-10-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/RepaintManager.java
+ 	(paintDirtyRegions): replaced characters in comment that caused 
+ 	warnings in gjdoc and Eclipse.
+ 
+ 2005-10-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * BUGS: URL refreshed.
+ 
+ 2005-10-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/ExceptionCreator.java: Deleted.
+ 
+ 2005-10-26  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableInterceptor/ObjectReferenceFactory.java, 
+ 	org/omg/PortableInterceptor/ObjectReferenceFactoryHelper.java, 
+ 	org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java, 
+ 	org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java:
+ 	New files.
+ 	
+ 2005-10-26  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/ViewportLayout.java:
+ 	(layoutContainer): Fixed incorrect boundary checks, should have been 
+ 	checking for viewport being  smaller than minimum size, not smaller 
+ 	than preferred size.
+ 
+ 2005-10-26  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* configure.ac: Rename --with-qtdir to --with-qt4dir to make clear
+ 	which Qt version is meant.
+ 
+ 2005-10-26  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JList.java:
+ 	(getPreferredScrollableViewportSize): Use the preferred width instead 
+ 	of the width of the widest element.  This allows us to use the 
+ 	user-specified preferred width if setPreferredSize was called.  Use 
+ 	the height of the first row, not the first visible row, when 
+ 	calculating the preferred height.  Added comments and made code cleaner
+ 	and more readable.
+ 
+ 2005-10-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/imageio/spi/ImageReaderWriterSpi.java
+ 	(getStreamMetadataFormat): Implement.
+ 	(getImageMetadataFormat): Likewise.
+ 
+ 2005-10-26  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/colorchooser/AbstractColorChooserPanel.java
+ 	(getMnemonic): implemented,
+ 	(getDisplayedMnemonicIndex): implemented.
+ 
+ 2005-10-26  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableInterceptor/AdapterManagerIdHelper.java,
+ 	org/omg/PortableInterceptor/AdapterNameHelper.java,
+ 	org/omg/PortableInterceptor/AdapterStateHelper.java,
+ 	org/omg/PortableInterceptor/ORBIdHelper.java,
+ 	org/omg/PortableInterceptor/ObjectIdHelper.java,
+ 	org/omg/PortableInterceptor/ServerIdHelper.java: New files.
+ 	* org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java
+ 	(type): Fixed typo in typecode name.
+ 
+ 2005-10-25  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/WrappedPlainView: New class.
+ 
+ 2005-10-25  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(installDefaults): Removed initialization of unnecessary focusColor
+ 	field.
+ 	(paintButtonPressed): Only paint if button is opaque.
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(paintButtonPressed): Only paint if button is opaque and
+ 	contentAreaFilled.
+ 
+ 2005-10-25  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/CompositeView.java:
+ 	(getViewIndexAtPosition): Fixed boundary conditions (less than and 
+ 	greater than signs were backward).
+ 
+ 2005-10-25  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/Utilities.java:
+ 	(getBreakLocation): New API method.
+ 
+ 2005-10-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java (useProtocolVersion): Typo fix.
+ 
+ 2005-10-25  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java
+ 	(create): Changed classname for the heavyweight testclass to match
+ 	the new classes introduced by my popup patch earlier this day.
+ 
+ 2005-10-25  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkMenuBar): Replaced some demos with new external demo programs,
+ 	namely the button demo, the scrollbar demo, the combobox demo and
+ 	the slider demo.
+ 	(mkButtonBar): Likewise.
+ 	* examples/gnu/classpath/examples/swing/ButtonDemo.java
+ 	(createContent): Made package private so that the Demo.java can
+ 	access it.
+ 	* examples/gnu/classpath/examples/swing/ComboBoxDemo.java
+ 	(createContent): Made package private so that the Demo.java can
+ 	access it.
+ 	* examples/gnu/classpath/examples/swing/ScrollBarDemo.java
+ 	(createContent): Made package private so that the Demo.java can
+ 	access it.
+ 	* examples/gnu/classpath/examples/swing/SliderDemo.java
+ 	(createContent): Made package private so that the Demo.java can
+ 	access it.
+ 
+ 2005-10-25  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	(addImpl): Removed unnecessary repaint() and revalidate() calls.
+ 	* javax/swing/JPopupMenu.java
+ 	(remove): Removed unnecessary revalidate() call.
+ 	(insert): Removed code that installs GridBagConstraints. JPopupMenu
+ 	uses a BoxLayout and this is not needed anymore.
+ 	(pack): Send this method call to the event queue to avoid
+ 	synchronization problems. Set size to preferredSize of this menu.
+ 	(setVisible): Send this method call to the event queue to avoid
+ 	synchronization problems. Use PopupFactory for creating a popup.
+ 	(setLocation): Use int fields instead of a Point field.
+ 	(Popup): Removed inner interface. We use javax.swing.Popup now.
+ 	(LightweightPopup): Likewise.
+ 	(MediumWeightPopup): Likewise.
+ 	(HeavyWeightPopup): Likewise.
+ 	* javax/swing/Popup.java
+ 	(JWindowPopup.JWindowPopup): Add contents to contentPane of window.
+ 	Set focusableWindowState to false.
+ 	(JWindowPopup.show): Set size of window here.
+ 	(LightweightPopup): New inner class.
+ 	* javax/swing/PopupFactory.java
+ 	(getPopup): Return heavyweight or lightweight popup depending on
+ 	the parameters.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(PropertyChangeHandler): Removed unneeded inner class.
+ 	(BasicMenuItemUI): Removed instantiation of PropertyChangeHandler.
+ 	(installListeners): Removed handling of the PropertyChangeHandler.
+ 	(uninstallListeners): Removed handling of the PropertyChangeHandler.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java
+ 	(getMaximumSize): Don't treat popup menus different.
+ 
+ 2005-10-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/classpath/examples/CORBA/NamingService/Demo.java (main):
+ 	Make arguments not final.
+ 
+ 2005-10-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+            
+ 	* org/omg/CORBA/IDLEntity.java: Deleted.   
+ 	* gnu/CORBA/primitiveTypeCode.java,
+ 	org/omg/CORBA/PolicyError.java,
+ 	org/omg/CORBA/TypeCodePackage/BadKind.java,
+ 	org/omg/CORBA/TypeCodePackage/Bounds.java: 
+ 	Use org.omg.CORBA.portable.IDLEntity.
+ 
+ 2005-10-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/interfaces/SocketFactory.java: New file.
+ 	* gnu/CORBA/interfaces/gnuSocketFactory.java: Deleted.
+ 	* gnu/CORBA/DefaultSocketFactory.java,
+ 	gnu/CORBA/Functional_ORB.java,
+ 	org/omg/CORBA/ORB.java: Replacing gnuSocketFactory into SocketFactory.
+ 
+ 2005-10-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CosNaming/BindingIteratorHelper.java,
+ 	org/omg/CosNaming/NamingContextExtHelper.java,
+ 	org/omg/CosNaming/NamingContextHelper.java,
+ 	org/omg/DynamicAny/DynAnyFactoryHelper.java,
+ 	org/omg/DynamicAny/DynAnyHelper.java,
+ 	org/omg/DynamicAny/DynArrayHelper.java,
+ 	org/omg/DynamicAny/DynEnumHelper.java,
+ 	org/omg/DynamicAny/DynFixedHelper.java,
+ 	org/omg/DynamicAny/DynSequenceHelper.java,
+ 	org/omg/DynamicAny/DynStructHelper.java,
+ 	org/omg/DynamicAny/DynUnionHelper.java,
+ 	org/omg/DynamicAny/DynValueHelper.java,
+ 	org/omg/IOP/CodecFactoryHelper.java,
+ 	org/omg/PortableInterceptor/CurrentHelper.java,
+ 	org/omg/PortableServer/ServantActivatorHelper.java,
+ 	org/omg/PortableServer/ServantLocatorHelper.java: Added
+ 	unchecked_narrow method.
+ 
+ 2005-10-25  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen):
+ 	Call gdk_window_get_root_origin instead of gdk_window_get_origin
+ 	so that the window decorations are correctly respected.
+ 
+ 2005-10-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java (useProtocolVersion): Fixed typo
+ 	in javadoc.
+ 
+ 2005-10-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/StringBuffer.java (appendCodePoint): Added @since.
+ 	* java/lang/StringBuilder.java (insert): New overloads.
+ 	(appendCodePoint): New method.
+ 
+ 2005-10-24  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* test/native/lib/PrimlibInterface.c,
+ 	* test/native/lib/PrimlibInterface.h,
+ 	* test/native/lib/PrimlibTest.java:
+ 	Removed unused test.
+ 
+ 2005-10-24  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* native/jni/classpath/primlib.c,
+ 	native/jni/classpath/primlib.h: Removed since unused.
+ 
+ 	* native/jni/classpath/Makefile.am: (libclasspath_la_SOURCES)
+ 	Removed primlib.c and primlib.h.
+ 
+ 2005-10-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/ScrollBarDemo.java: New file.
+ 
+ 2005-10-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(ModelListener.stateChanged): changed call to getThumbBounds() to
+ 	updateThumbRect(),
+ 	(PropertyChangeHandler.propertyChange): likewise, plus added handling
+ 	for 'enabled' property,
+ 	(getMaximumSize): return maximum dimension,
+ 	(getThumbBounds): just return field value,
+ 	(getTrackBounds): just return field value,
+ 	(installUI): switch order of calls to installDefaults() and 
+ 	installComponents(),
+ 	(layoutHScrollBar): reimplemented using new updateThumbRect() method,
+ 	(layoutVScrollBar): likewise,
+ 	(updateThumbRect): new method,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added 'ScrollBar.width' default,
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java
+ 	(MIN_THUMB_SIZE): changed value,
+ 	(MIN_THUMB_SIZE_FREE_STANDING): new field,
+ 	(isFreeStanding): set default to true,
+ 	(scrollBarShadowColor): new field,
+ 	(installDefaults): initialise scrollBarShadowColor,
+ 	(createDecreaseButton): retain reference in decreaseButton field,
+ 	(createIncreaseButton): retain reference in increaseButton field,
+ 	(paintTrackHorizontal): use scrollBarShadowColor, add special handling
+ 	for free standing scroll bar in disabled state,
+ 	(paintTrackVertical): likewise,
+ 	(paintThumb): separate horizontal and vertical cases,
+ 	(paintThumbHorizontal): new method,
+ 	(paintThumbVertical): new method,
+ 	(getMinimumThumbSize): return different size depending on whether or 
+ 	not the scroll bar is free standing,
+ 	* javax/swing/plaf/metal/MetalScrollButton.java
+ 	(paintNorthBorderFreeStanding): modified drawing.
+ 
+ 2005-10-24  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/imageio/metadata/IIOMetadataFormatImpl.java: Complete.
+ 	* javax/imageio/metadata/IIOMetadataNode.java: Complete stubs.
+ 	* javax/imageio/metadata/IIOAttr.java: Replace with
+ 	IIOMetadataFormatImpl.IIOMetadataNodeAttr.  Remove file.
+ 	* javax/imageio/metadata/IIONamedNodeMap.java: Replace with
+ 	IIOMetadataNode.IIONamedNodeMap.  Remove file.
+ 	* javax/imageio/metadata/IIONodeList.java: Replace with
+ 	IIOMetadataNode.IIONodeList.  Remove file.
+ 
+ 2005-10-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/AttributedStringIterator.java (getRunLimit): Add
+ 	explicit qualification.
+ 	(getRunStart): Likewise.
+ 
+ 2005-10-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/AttributedString.java
+ 	(AttributedString(AttributedCharacterIterator, int, int, 
+ 	AttributedCharacterIterator.Attribute[])): renamed arguments, and 
+ 	updated IllegalArgumentException check,
+ 	(addAttribute(AttributedCharacterIterator.Attribute, Object, int, 
+ 	int)): likewise,
+ 	(addAttributes(Map, int, int)): changed IllegalArgumentException to
+ 	NullPointerException, and modified check for illegal range,
+ 	* java/text/AttributedStringIterator.java
+ 	(getRunLimit(Set)): reimplemented,
+ 	(getRunStart): added API docs,
+ 	(getRunStart(AttributedCharacterIterator.Attribute)): handle null
+ 	argument as a special case,
+ 	(getRunStart(Set)): reimplemented,
+ 	(getAttribute(AttributedCharacterIterator.Attribute, int)): new 
+ 	private method,
+ 	(getAttribute(AttributedCharacterIterator.Attribute)): reimplemented
+ 	using new private method.
+ 	* java/text/CharacterIterator.java: minor API doc fix.
+ 
+ 2005-10-24  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Fixes Bug #24359
+ 	* javax/swing/BoxLayout.java:
+ 	Made class thread safe.
+ 
+ 2005-10-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/InvalidPropertiesFormatException.java: New file.
+ 
+ 2005-10-23  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Properties.java
+ 	(storeToXML(OutputStream,String,String)): Added null pointer checks.
+ 	(loadFromXML(InputStream)): Implemented.
+ 	(PropertiesHandler): New class to handle parsing events.
+ 	(PropertiesHandler()): New constructor.
+ 	(startDTD(String,String,String)): Implemented.
+ 	(startElement(String,String,String,Attributes)): Implemented.
+ 	(characters(char[],int,int)): Implemented.
+ 	(endElement(String,String,String)): Implemented.
+ 	(endDocument()): Implemented.
+ 
+ 2005-10-23  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/lang/Thread.java
+ 	(sleep): Better exception message.
+ 
+ 	* java/security/AccessControlContext.java
+ 	(checkPermission): Likewise.
+ 
+ 	* java/util/ResourceBundle.java
+ 	(getBundle): Likewise.
+ 
+ 	* java/util/SimpleTimeZone.java
+ 	(setStartRule): Added some documentation.
+ 
+ 2005-10-23  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* configure.ac: Added support for "--with-native-libdir" and
+ 	"--with-glibj-dir". Generate copy-vmresources.sh
+ 
+ 	* lib/Makefile.am: Call copy-vmresources.sh to fetch possible vm
+ 	resources from the vmdirs.
+ 
+ 	* lib/copy-vmresources.sh.in: New script file.
+ 
+ 	* lib/gen-classlist.sh.in: Include com/ as base package for the
+ 	vm directories.
+ 
+ 	* native/jawt/Makefile.am,
+ 	native/jni/gtk-peer/Makefile.am,
+ 	native/jni/java-io/Makefile.am,
+ 	native/jni/java-lang/Makefile.am,
+ 	native/jni/java-net/Makefile.am,
+ 	native/jni/java-nio/Makefile.am,
+ 	native/jni/java-util/Makefile.am,
+ 	native/jni/midi-alsa/Makefile.am,
+ 	native/jni/midi-dssi/Makefile.am,
+ 	native/jni/qt-peer/Makefile.am,
+ 	native/jni/xmlj/Makefile.am: Install libraries in nativelibdir
+ 	and not pkglib.
+ 
+ 2005-10-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	PR classpath/22972 
+ 	* java/io/File (createTempFile): Rewritten.
+ 
+ 2005-10-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/IOP/RMICustomMaxStreamFormat.java,
+ 	* org/omg/IOP/ExceptionDetailMessage.java: New files. 
+ 
+ 2005-10-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Interceptor/Registrator.java (m_prefix): Made static.
+ 
+ 2005-10-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/javax/rmi/CORBA/gnuRmiUtil.java (readValue):
+ 	Do not read fields of the ObjectImpl.
+ 
+ 2005-10-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/IOP/TAG_RMI_CUSTOM_MAX_STREAM_FORMAT,
+ 	* org/omg/PortableInterceptor/ACTIVE.java,
+ 	* org/omg/PortableInterceptor/DISCARDING.java,
+ 	* org/omg/PortableInterceptor/HOLDING.java,
+ 	* org/omg/PortableInterceptor/INACTIVE.java,
+ 	* org/omg/PortableInterceptor/NON_EXISTENT.java: New files.
+ 
+ 2005-10-22  Julian Scheid  <julian@sektor37.de>
+ 
+ 	* java/util/Map.java (Entry.equals): Fixed invalid example code
+ 	in documentation.
+ 
+ 2005-10-22  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ACTIVITY_COMPLETED.java,
+ 	* org/omg/CORBA/ACTIVITY_REQUIRED.java,
+ 	* org/omg/CORBA/BAD_QOS.java,
+ 	* org/omg/CORBA/CODESET_INCOMPATIBLE.java,
+ 	* org/omg/CORBA/INVALID_ACTIVITY.java,
+ 	* org/omg/CORBA/REBIND.java,
+ 	* org/omg/CORBA/TIMEOUT.java,
+ 	* org/omg/CORBA/TRANSACTION_MODE.java,
+ 	* org/omg/CORBA/TRANSACTION_UNAVAILABLE.java: New exceptions.
+ 
+ 2005-10-22  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/rmi/CORBA/ValueHandlerMultiFormat.java: New interface.
+ 	* gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java
+ 	(getMaximumStreamFormatVersion, writeValue): New methods.
+ 
+ 2005-10-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLClassloader.java (addURLs): Add comment about jboss.
+ 
+ 2005-10-21  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
+ 	(BasicCheckBoxMenuItem): Implemented.
+ 	(installDefaults): Removed method, not in API.
+ 	(processMouseEvent): Implemented.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
+ 	(processMouseEvent): Implemented.
+ 
+ 2005-10-21  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* configure.ac: Also check for pangoft2 without cairo and
+ 	additionally check for freetype2.
+ 	* native/jni/gtk-peer/Makefile.am: Added X, pangoft2 and
+ 	freetype2 CFLAGS and LDFLAGS.
+ 
+ 2005-10-21  Nicolas Geoffray  <nicolas.geoffray@menlina.com>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java
+ 	(getResources): uses a new static field HashMap to
+ 	store opened zip files from property java.boot.class.path.
+ 
+ 2005-10-21  Nicolas Geoffray  <nicolas.geoffray@menlina.com>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java
+ 	(getRessources): In case the property java.boot.class.path
+ 	contains directories, tests if the ressource exists before adding
+ 	it to the vector result.
+ 
+ 2005-10-21  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java
+ 	(paint): Only paint focus if enabled.
+ 
+ 2005-10-21  David Daney  <ddaney@avtrex.com>
+ 
+ 	* NEWS: Added entry about HttpURLConnection improvements.
+ 
+ 2005-10-21  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/DefaultSocketFactory.java,
+ 	* gnu/CORBA/interfaces/gnuSocketFactory.java,
+ 	* gnu/CORBA/interfaces/package.html: New files.
+ 	* gnu/CORBA/Functional_ORB.java,
+ 	* gnu/CORBA/Focused_ORB.java (getPortServer),
+ 	* gnu/CORBA/GIOP/ErrorMessage.java (send),
+ 	* gnu/CORBA/gnuRequest.java (submit): Rewritten to support
+ 	gnu.Corba.SocketFactory property.
+ 	* org/omg/CORBA/ORB.java: Documentation update. 
+ 
+ 2005-10-21  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JPopupMenu.java
+ 	(show): Fixed to set the size if it was never set.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java
+ 	(menuDeselected): Added check to prevent NPE.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java:
+ 	Removed minSize, horizontalPrefSize, verticalPrefSize and
+ 	maxSize fields. They were causing problems when other classes
+ 	were setting this variables to something else. More reliable if
+ 	actual value is returned.
+ 	(getPreferredSize): Returned appropriate values.
+ 	(getMinimumSize): Likewise.
+ 	(getMaximumSize): Likewise.	
+ 
+ 2005-10-21  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/reflect/Proxy.java
+ 	(ProxyType.ProxyType): Don't replace null with system class loader.
+ 	(ProxyType.hashCode): Handle null loader.
+ 
+ 2005-10-20  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java:
+ 	(setLeadSelectionIndex): If the selection mode is SINGLE_SELECTION then
+ 	pass this call to setSelectionInterval.
+ 	(addSelectionInterval): If the selection mode is SINGLE_SELECTION then 
+ 	pass the call to setSelectionInterval and avoid the lengthy checks
+ 	that don't apply to this mode.
+ 	* javax/swing/JList.java:
+ 	(getSelectedIndices): Changed bounds of for loop to include the 
+ 	maxSelectionIndex.
+ 
+ 2005-10-20  Lillian Angel  <langel@redhat.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkRadio): Changed to create a panel that contains
+ 	2 buttons in a ButtonGroup.
+ 	* javax/swing/ButtonGroup.java
+ 	(add): Fixed to initialize sel if the newly added
+ 	button is already selected.
+ 	* javax/swing/JToggleButton.java
+ 	(isSelected): Implemented.
+ 	(setSelected): Implemented.
+ 	* javax/swing/plaf/metal/MetalRadioButtonUI.java
+ 	(paintFocus): Fixed size of border drawn around the
+ 	radio button.
+ 
+ 2005-10-20  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/ScrollPaneAdjustable.java:
+ 	(addAdjustmentListener): If parameter is null take no action and throw
+ 	no exception.  Store the resulting listener chain from call to 
+ 	AWTEventMulticaster.add.
+ 	(removeAdjustmentListener): If parameter is null take no action and
+ 	throw no exception.  Store the resulting listener chain from call to
+ 	AWTEventMulticaster.remove.
+ 
+ 2005-10-20  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/LookAndFeel.java:
+ 	(loadKeyBindings): Implemented and added docs.
+ 	(makeComponentInputMap): Likewise.
+ 	(makeInputMap): Likewise.
+ 	(makeKeyBindings): Likewise.
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(convertModifiers): Removed this no longer needed private method.
+ 	(installKeyboardActions): Removed the code relating to modifier
+ 	conversion and made code more readable by using local variables.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(convertModifiers): Removed this no longer needed private method.
+ 	(installKeyboardActions): Removed the code relating to modifier
+ 	conversion and made code more readbale by using local variables.
+ 
+ 2005-10-20  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	Added new ItemListener field.
+ 	(BasicMenuItemUI): Initialized new field.
+ 	(installListeners): Installed new listener.
+ 	(removeListeners): Removed new listener.
+ 	(MenuDragMouseHandler): Class should be private, not
+ 	in API.
+ 	(MenuKeyHandler): Likewise.
+ 	(PropertyChangeHandler): Likewise.
+ 	(ItemHandler): New class implemented to change the
+ 	state of the menu item if it is a checkbox menu item.	
+ 
+ 2005-10-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/BoxView.java
+ 	(layoutMinorAxis): Calculate total requirements before calling
+ 	the SizeRequirements utility method. Avoids an NPE.
+ 
+ 2005-10-20  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicArrowButton.java: Updated API docs all 
+ 	over, plus:
+ 	(defaultSize): removed field,
+ 	(upIcon): removed field,
+ 	(downIcon): removed field,
+ 	(leftIcon): removed field,
+ 	(rightIcon): removed field,
+ 	(darkShadow): changed color value,
+ 	(paint): ignore insets for triangle positioning, but check 'armed'
+ 	state,
+ 	(paintTriangle): delegate to new private methods depending on 
+ 	direction,
+ 	(paintTriangleNorth): new private method,
+ 	(paintTriangleSouth): new private method,
+ 	(paintTriangleEast): new private method,
+ 	(paintTriangleWest): new private method.
+ 
+ 2005-10-20  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/ietf/jgss/GSSCredential.java (hashCode),
+ 	* org/ietf/jgss/GSSName.java (hashCode): New declarations.
+ 
+ 2005-10-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLClassLoader.java (addURLs): Don't call addURL(), but
+ 	call urls.add() and addURLImpl() directly on each URL.
+ 
+ 2005-10-19  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* javax/swing/text/html/HTMLEditorKit.java: Add missing import.
+ 
+ 2005-10-19  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/html/HTMLEditorKit.java (getParser): New method.
+ 
+ 2005-10-19  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/html/parser/ContentModel.java: Fixed comments for
+ 	parameterless constructor.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(getDebugGraphicsOptions): Removed debug output.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Component.java
+ 	(isShowing): Fixed condition.
+ 	(show): Only repaint if component is showing.
+ 	(hide): Only repaint if component was showing.
+ 
+ 2005-10-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/security/auth/login/LoginContext.java (lookupModule):
+ 	Load LoginModule through Thread context class loader.
+ 
+ 2005-10-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/Socket.java (getImpl): Chain exception before throwing.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/AbstractSpinnerModel.java
+ 	* javax/swing/ActionMap.java
+ 	* javax/swing/BoundedRangeModel.java
+ 	* javax/swing/Box.java
+ 	* javax/swing/BoxLayout.java
+ 	* javax/swing/ButtonGroup.java
+ 	* javax/swing/CellEditor.java
+ 	* javax/swing/CellRendererPane.java
+ 	* javax/swing/ComboBoxEditor.java
+ 	* javax/swing/DefaultButtonModel.java
+ 	* javax/swing/DefaultCellEditor.java
+ 	* javax/swing/DefaultDesktopManager.java
+ 	* javax/swing/DefaultListCellRenderer.java
+ 	* javax/swing/DesktopManager.java
+ 	* javax/swing/ImageIcon.java
+ 	* javax/swing/InputVerifier.java
+ 	* javax/swing/JCheckBoxMenuItem.java
+ 	* javax/swing/JColorChooser.java
+ 	* javax/swing/JDesktopPane.java
+ 	* javax/swing/JFileChooser.java
+ 	* javax/swing/JLayeredPane.java
+ 	* javax/swing/JList.java
+ 	* javax/swing/JMenu.java
+ 	* javax/swing/JMenuBar.java
+ 	* javax/swing/JMenuItem.java
+ 	* javax/swing/JOptionPane.java
+ 	* javax/swing/JPasswordField.java
+ 	* javax/swing/JPopupMenu.java
+ 	* javax/swing/JProgressBar.java
+ 	* javax/swing/JRadioButtonMenuItem.java
+ 	* javax/swing/JRootPane.java
+ 	* javax/swing/JSeparator.java
+ 	* javax/swing/JSlider.java
+ 	* javax/swing/JSpinner.java
+ 	* javax/swing/JSplitPane.java
+ 	* javax/swing/JTabbedPane.java
+ 	* javax/swing/JTable.java
+ 	* javax/swing/JTextPane.java
+ 	* javax/swing/JToolBar.java
+ 	* javax/swing/JToolTip.java
+ 	* javax/swing/JTree.java
+ 	* javax/swing/KeyStroke.java
+ 	* javax/swing/LookAndFeel.java
+ 	* javax/swing/MutableComboBoxModel.java
+ 	* javax/swing/Popup.java
+ 	* javax/swing/PopupFactory.java
+ 	* javax/swing/RepaintManager.java
+ 	* javax/swing/SortingFocusTraversalPolicy.java
+ 	* javax/swing/Spring.java
+ 	* javax/swing/SwingUtilities.java
+ 	* javax/swing/ToolTipManager.java
+ 	* javax/swing/TransferHandler.java
+ 	* javax/swing/ViewportLayout.java
+ 	Reformatted slightly. Filled emtpy blocks with comments. Fixed some
+ 	slight API doc errors. Removed some unneeded imports. Removed
+ 	unneeded serialization methods.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/OverlayLayout.java
+ 	(checkLayout): Respect the container's insets correctly.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JLabel.java
+ 	(setText): Call revalidate() and repaint().
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	Added comments to empty blocks.
+ 	(read): Implemented this previously stubbed method.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComboBox.java
+ 	Added comments to empty blocks.
+ 	(writeObject): Removed unnecessary serialization method.
+ 	(processKeyEvent): Implemented this previously stubbed method.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JButton.java
+ 	(removeNotify): Implemented this previously stubbed method.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/undo/CannotRedoException.java
+ 	* javax/swing/undo/CannotUndoException.java
+ 	Put super() call in empty constructors.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/tree/DefaultMutableTreeNode.java
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	* javax/swing/tree/TreeCellRenderer.java
+ 	* javax/swing/tree/TreeModel.java
+ 	Reformatted slightly. Filled emtpy blocks with comments. Fixed some
+ 	slight API doc errors. Removed some unneeded imports.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	* javax/swing/text/AttributeSet.java
+ 	* javax/swing/text/ComponentView.java
+ 	* javax/swing/text/DefaultCaret.java
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	* javax/swing/text/DefaultHighlighter.java
+ 	* javax/swing/text/EditorKit.java
+ 	* javax/swing/text/FieldView.java
+ 	* javax/swing/text/FlowView.java
+ 	* javax/swing/text/GlyphView.java
+ 	* javax/swing/text/JTextComponent.java
+ 	* javax/swing/text/LayoutQueue.java
+ 	* javax/swing/text/PlainView.java
+ 	* javax/swing/text/Segment.java
+ 	* javax/swing/text/StyledDocument.java
+ 	* javax/swing/text/html/HTMLEditorKit.java
+ 	* javax/swing/text/html/HTMLFrameHyperlinkEvent.java
+ 	* javax/swing/text/html/parser/DocumentParser.java
+ 	Reformatted slightly. Filled emtpy blocks with comments. Fixed some
+ 	slight API doc errors. Removed some unneeded imports.
+ 
+ 2005-10-19  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicArrowButton.java
+ 	(buttonBorder): removed,
+ 	(BasicArrowButton): don't set border, use default border,
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(configureArrowButton): don't set margin here,
+ 	(getPreferredSize): added comment,
+ 	(getMinimumSize): icon width is the same as the display area height,
+ 	(getDefaultSize): return size of space char plus 1 pixel margin,
+ 	(getDisplaySize): take into account the prototype display value, if 
+ 	there is one,
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): updated 'Button.margin' default,
+ 	* javax/swing/plaf/metal/MetalComboBoxButton.java
+ 	(MetalComboBoxButton(JComboBox, Icon, boolean, CellRendererPane, 
+ 	JList)): check for null JComboBox, don't set margin here,
+ 	* javax/swing/plaf/metal/MetalComboBoxUI.java
+ 	(createArrowButton): set margin,
+ 	(getMinimumSize): reimplemented,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): changed 'Button.margin' default to from Insets
+ 	to InsetsUIResource.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/html/HTML.java
+ 	* javax/swing/text/html/HTMLDocument.java
+ 	Filled emtpy blocks with comments.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/html/parser/ContentModel.java
+ 	* javax/swing/text/html/parser/DTD.java
+ 	* javax/swing/text/html/parser/DocumentParser.java
+ 	* javax/swing/text/html/parser/Element.java
+ 	* javax/swing/text/html/parser/Parser.java
+ 	Filled emtpy blocks with comments.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/table/TableColumnModel.java:
+ 	Fixed some minor API doc errors.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/ActionMapUIResource.java
+ 	* javax/swing/plaf/BorderUIResource.java
+ 	* javax/swing/plaf/ButtonUI.java
+ 	* javax/swing/plaf/ColorChooserUI.java
+ 	* javax/swing/plaf/ColorUIResource.java
+ 	* javax/swing/plaf/ComboBoxUI.java
+ 	* javax/swing/plaf/ComponentInputMapUIResource.java
+ 	* javax/swing/plaf/DesktopIconUI.java
+ 	* javax/swing/plaf/DesktopPaneUI.java
+ 	* javax/swing/plaf/DimensionUIResource.java
+ 	* javax/swing/plaf/FileChooserUI.java
+ 	* javax/swing/plaf/FontUIResource.java
+ 	* javax/swing/plaf/IconUIResource.java
+ 	* javax/swing/plaf/InputMapUIResource.java
+ 	* javax/swing/plaf/InsetsUIResource.java
+ 	* javax/swing/plaf/InternalFrameUI.java
+ 	* javax/swing/plaf/LabelUI.java
+ 	* javax/swing/plaf/ListUI.java
+ 	* javax/swing/plaf/MenuBarUI.java
+ 	* javax/swing/plaf/MenuItemUI.java
+ 	* javax/swing/plaf/PanelUI.java
+ 	* javax/swing/plaf/PopupMenuUI.java
+ 	* javax/swing/plaf/ProgressBarUI.java
+ 	* javax/swing/plaf/RootPaneUI.java
+ 	* javax/swing/plaf/ScrollBarUI.java
+ 	* javax/swing/plaf/ScrollPaneUI.java
+ 	* javax/swing/plaf/SeparatorUI.java
+ 	* javax/swing/plaf/SliderUI.java
+ 	* javax/swing/plaf/SpinnerUI.java
+ 	* javax/swing/plaf/SplitPaneUI.java
+ 	* javax/swing/plaf/TabbedPaneUI.java
+ 	* javax/swing/plaf/TableHeaderUI.java
+ 	* javax/swing/plaf/TableUI.java
+ 	* javax/swing/plaf/TextUI.java
+ 	* javax/swing/plaf/ToolBarUI.java
+ 	* javax/swing/plaf/ToolTipUI.java
+ 	* javax/swing/plaf/TreeUI.java
+ 	* javax/swing/plaf/UIResource.java
+ 	* javax/swing/plaf/ViewportUI.java
+ 	Reformatted slightly. Filled emtpy blocks with comments.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/ComponentUI.java
+ 	Filled empty blocks with comments.
+ 	(update): Reverted my patch from 2005-10-12. This is wrong. If there
+ 	are still clipping problems, then certainly in another area.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/multi/MultiLookAndFeel.java
+ 	Filled empty block with comment.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	* javax/swing/plaf/metal/MetalButtonListener.java
+ 	* javax/swing/plaf/metal/MetalComboBoxEditor.java
+ 	* javax/swing/plaf/metal/MetalComboBoxUI.java
+ 	* javax/swing/plaf/metal/MetalFileChooserUI.java
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	* javax/swing/plaf/metal/MetalInternalFrameTitlePane.java
+ 	* javax/swing/plaf/metal/MetalProgressBarUI.java
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java
+ 	* javax/swing/plaf/metal/MetalSliderUI.java
+ 	* javax/swing/plaf/metal/MetalSplitPaneUI.java
+ 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java
+ 	* javax/swing/plaf/metal/MetalTextFieldUI.java
+ 	* javax/swing/plaf/metal/MetalToolBarUI.java
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	* javax/swing/plaf/metal/MetalUtils.java:
+ 	Reformatted slightly. Filled emtpy blocks with comments. Fixed some
+ 	slight API doc errors. Removed some unneeded imports.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(getDebugGraphicsOptions): Fixed to load system property if present.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/DebugGraphics.java
+ 	(counter): New field.
+ 	(color): Removed unneeded field.
+ 	(DebugGraphics()): Count up.
+ 	(DebugGraphics(Graphics,JComponent)): Call this(Graphics).
+ 	(DebugGraphics(Graphics)): Call this().
+ 	(setColor): Implemented logging facility.
+ 	(create): Copy debugOptions over to new DebugGraphics instance.
+ 	(create(int,int,int,int)): Likewise.
+ 	(setFont): Implemented logging facility.
+ 	(getColor): Return graphics.getColor().
+ 	(translate): Implemented logging facility.
+ 	(setPaintMode): Likewise.
+ 	(setXORMode): Likewise.
+ 	(clipRect): Likewise.
+ 	(setClip(int,int,int,int)): Likewise.
+ 	(setClip(Shape)): Likewise.
+ 	(drawRect): Likewise. Only flash when FLASH_OPTION is set.
+ 	(fillRect): Likewise.
+ 	(clearRect): Implemented logging facility.
+ 	(drawRoundRect): Likewise.
+ 	(fillRoundRect): Likewise.
+ 	(drawLine): Likewise.
+ 	(draw3DRect): Likewise.
+ 	(fill3DRect): Likewise.
+ 	(drawOval): Likewise.
+ 	(fillOval): Likewise.
+ 	(drawArc): Likewise.
+ 	(fillArc): Likewise.
+ 	(drawPolyline): Likewise.
+ 	(drawPolygon): Likewise.
+ 	(fillPolygon): Likewise.
+ 	(drawString(String,int,int)): Likewise.
+ 	(drawString(AttributedCharacterIterator,int,int)): Likewise.
+ 	(drawByted): Likewise.
+ 	(drawChars): Likewise. Only flash if FLASH_OPTION is set.
+ 	(drawImage): Implemented logging facility. (Also applies to all
+ 	overloaded versions of this method).
+ 	(copyArea): Likewise.
+ 	(setDebugOptions): Likewise.
+ 	(prefix): New helper method.
+ 	* javax/swing/JComponent.java
+ 	(getComponentGraphics): Implemented to return DebugGraphics when
+ 	needed.
+ 	(getDebugGraphicsOptions): Implemented to return the correct options.
+ 	Also, this loads a system property gnu.javax.swing.DebugGraphics
+ 	if present and evaluates it.
+ 
+ 2005-10-19  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JList.java
+ 	(getAccessibleContext): Returned an instance of 
+ 	AccessibleJList. Should never return null.
+ 
+ 2005-10-19  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Added MouseListener and removed MouseInputListener.
+ 	(BasicTreeUI): Initialized mouseListener and removed
+ 	mouseInputListener.
+ 	(removeListeners): Removed mouseListener and removed
+ 	mouseInputListener code.
+ 	(installListeners): Likewise.
+ 	(MouseInputHandler.mousePressed): Moved code to MouseHandler.
+ 	(MouseHandler.mousePressed): Likewise.
+ 	* javax/swing/plaf/metal/MetalTreeUI.java:
+ 	Added MouseListener and removed MouseInputListener.
+ 	(installUI): Initialized mouseListener and removed
+ 	mouseInputListener.	
+ 	(uninstallUI): Removed mouseListener and removed
+ 	mouseInputListener code.
+ 
+ 2005-10-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicBorders.java
+ 	* javax/swing/plaf/basic/BasicButtonListener.java
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
+ 	* javax/swing/plaf/basic/BasicComboBoxEditor.java
+ 	* javax/swing/plaf/basic/BasicComboBoxRenderer.java
+ 	* javax/swing/plaf/basic/BasicDesktopIconUI.java
+ 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java
+ 	* javax/swing/plaf/basic/BasicFormattedTextFieldUI.java
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	* javax/swing/plaf/basic/BasicMenuUI.java
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	* javax/swing/plaf/basic/BasicPasswordFieldUI.java
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	* javax/swing/plaf/basic/BasicTextAreaUI.java
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	* javax/swing/plaf/basic/BasicViewportUI.java:
+ 	Reformatted slightly. Filled emtpy blocks with comments. Fixed some
+ 	slight API doc errors.
+ 
+ 2005-10-18  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/filechooser/FileFilter.java:
+ 	* javax/swing/filechooser/FileView.java:
+ 	Filled empty blocks with comments.
+ 
+ 2005-10-18  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/event/EventListenerList.java:
+ 	* javax/swing/event/InternalFrameAdapter.java:
+ 	* javax/swing/event/MouseInputListener.java:
+ 	Reformatted slightly. Filled emtpy blocks with comments. Fixed some
+ 	slight API doc errors
+ 
+ 2005-10-18  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/colorchooser/AbstractColorChooserPanel.java:
+ 	* javax/swing/colorchooser/ColorChooserComponentFactory.java:
+ 	* javax/swing/colorchooser/DefaultSwatchChooserPanel.java:
+ 	Filled empty blocks with comments.
+ 
+ 2005-10-18  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/border/AbstractBorder.java:
+ 	* javax/swing/border/BevelBorder.java:
+ 	* javax/swing/border/Border.java:
+ 	* javax/swing/border/CompoundBorder.java:
+ 	* javax/swing/border/EmptyBorder.java:
+ 	* javax/swing/border/EtchedBorder.java:
+ 	* javax/swing/border/LineBorder.java:
+ 	* javax/swing/border/MatteBorder.java:
+ 	* javax/swing/border/SoftBevelBorder.java:
+ 	* javax/swing/border/TitledBorder.java:
+ 	Reformatted slightly. Filled emtpy blocks with comments. Fixed some
+ 	slight API doc errors
+ 
+ 2005-10-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(GetLayoutInfo): Added a null check for lastComponent. Prevents
+ 	NPE.
+ 
+ 2005-10-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(JTable): Moved code around so all models are set before
+ 	any other function is called. Prevents all NPEs with
+ 	models.
+ 
+ 2005-10-18  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java:
+ 	(setLeadSelectionIndex): Avoid index out of bounds error on initial
+ 	call of this method by checking explicitly for oldLeadIndex being -1.
+ 	Also remove unused BitSet newRange and oldRange.
+ 	(moveLeadSelectionIndex): New API method implemented (@since 1.5).
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(ListAction.actionPerformed): Make code more readable by declaring
+ 	local variables for the actionCommand and for the list's
+ 	selectionModel.  Implemented the following bindings: 
+ 	selectLastRowChangeLead, scrollDownChangeLead, scrollUpChangeLead, 
+ 	selectFirstRowChangeLead, selectNextRowChangeLead, 
+ 	selectPreviousRowChangeLead, addToSelection, toggleAndAnchor, 
+ 	extendTo.
+ 	(MouseInputHandler.mousePressed): Made code more readable by removing
+ 	unnecessary full qualification from variable 'list'.  Change 
+ 	behaviour of shift-click based on whether or not the anchor index is 
+ 	selected.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	(initComponentDefaults): Added remaining bindings for
+ 	Table.ancestorMap.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(TableAction.actionPerformed): Made type of variables rowModel and 
+ 	colModel more specific to avoid many casts later on (makes code more
+ 	readable).  Also declare local variable to store the action command to 
+ 	make the code more readable. Implemented the following bindings: 
+ 	selectNextRowChangeLead, selectPreviousRowChangeLead, 
+ 	selectNextColumnChangeLead, selectPreviousColumnChangeLead,
+ 	addToSelection, extendTo, toggleAndAnchor.  Added commented-out debug 
+ 	statement to print unimplemented bindings when used.  Added check for 
+ 	the SPACE character to make sure it doesn't stop editing.
+ 
+ 2005-10-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Removed leafIcon field.
+ 	(BasicTreeUI): Removed leafIcon initialization.
+ 	(installDefaults): Icon defaults were wrong, fixed.
+ 	(isLocationInExpandControl): Fixed to incorporated gap.
+ 	(mousePressed): Fixed to include correct icon widths. Sometimes
+ 	the labels icon is different from what the tree's default icon is
+ 	set to. Added a check for this.
+ 	(getCellBounds): No need to include gap here.
+ 	(getCurrentControlIcon): Fixed to use expandedIcon and collapsedIcon.
+ 	(paintRow): No need paint beyond preferred width of tree here.
+ 	(updateCurrentVisiblePath): If nothing is selected, the root should
+ 	be selected without focus.
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	(installDefaults): Fixed defaults for the expanded/collapsed icons.
+ 
+ 2005-10-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JComboBox.java
+ 	(setModel): update the selectedItemReminder field,
+ 	(selectedItemChanged): only send ItemEvent.SELECTED event if the new
+ 	selection is non-null.
+ 
+ 2005-10-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(installComponents): only set default editor if the current editor is
+ 	null or implements UIResource,
+ 	(uninstallComponents): only clear editor if it implements UIResource.
+ 
+ 2005-10-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installDefaults): Set the selected text color for the
+ 	text component.
+ 
+ 2005-10-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(scrollPathToVisible): Reimplemented to make the path visible if its
+ 	parent is not expanded.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(installDefaults): Initialized row height for the tree.
+ 	(updateCurrentVisiblePath): Updated the visible row count.
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	(installUI): Initialized row height for the tree.
+ 
+ 2005-10-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalComboBoxUI.java
+ 	(editablePropertyChanged): handle null selected item.
+ 
+ 2005-10-18  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(PropertyChangeHandler.propertyChange): Removed repaint call.
+ 
+ 2005-10-18  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	Filled empty blocks with comments.
+ 	(ButtonChangeListener.stateChanged): Moved implementation from
+ 	inner class in createChangeListener to this protected class.
+ 	(setEnabled): Do nothing if actual state does not change.
+ 	(createChangeListener): Return instance of ButtonChangeListener
+ 	here.
+ 
+ 2005-10-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(buttonBackground): new field,
+ 	(shadow): renamed buttonShadow,
+ 	(darkShadow): renamed buttonDarkShadow,
+ 	(highlight): renamed buttonHighlight,
+ 	(installDefaults): initialise buttonBackground, plus updates for 
+ 	renamed fields,
+ 	(uninstallDefaults): clear buttonBackground, plus updates for renamed
+ 	fields,
+ 	(createEditor): return subclass that implements UIResource,
+ 	(createArrowButton): use constructor that accepts colors,
+ 	(getMaximumSize): fix API doc error,
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): correct 'ComboBox.buttonDarkShadow' default.
+ 
+ 2005-10-18  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JViewport.java
+ 	(setView): Added repaint() call.
+ 	(revalidate): Removed unnecessary and unspecified method.
+ 	(reshape): Fire stateChanged if only the size changes. Do not fire
+ 	stateChanged if only the location changes.
+ 	(scrollRectToVisible): Reworked most of this method to correctly
+ 	determine the scroll offsets. Added validation of view as specified.
+ 
+ 2005-10-18  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/ScrollPaneLayout.java
+ 	(preferredLayoutSize): Removed check for JScrollPane argument.
+ 	Added code to respect the insets of the JScrollPane.
+ 	(minimumLayoutSize): Likewise.
+ 	(layoutContainer): Removed check for JScrollPane argument.
+ 
+ 2005-10-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(parseContent): Removed bogus println and fixed bug #24422.
+ 
+ 2005-10-17  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(setDividerLocation): Added a check for the size
+ 	of the splitpane, in some cases the divider's
+ 	initial location was being set to 0.
+ 
+ 2005-10-17  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JViewport.java:
+ 	(scrollRectToVisible): Return immediately if the View is null.  Check 
+ 	for contentRect being bigger than the port bounds separately in each 
+ 	direction, rather than together.
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(KeyHandler): Removed this private class that listened directly for 
+ 	key presses.  This is now handled through InputMap-ActionMap pairs.
+ 	(ActionListenerProxy): New class to wrap the Actions for this lists
+ 	ActionMap.
+ 	(ListAction): New class, the actions for keypresses on this list.
+ 	(convertModifiers): New private method converts key press modifiers to 
+ 	the old style (CTRL_MASK instead of CTRL_DOWN_MASK, etc.).
+ 	(installKeyboardActions): Get the InputMap from the UIManager and 
+ 	register new InputMap-ActionMap pairs, then set these as the parents
+ 	of the list's InputMap and ActionMap.
+ 	(selectNextIndex): Avoid NPE by checking if we're already at the last
+ 	index.
+ 	(selectPreviousIndex): Check if we're already at the first index.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	(initComponentDefaults): Added bindings for List.focusInputMap.
+ 
+ 2005-10-17  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(installUI): Moved call to installKeyboardActions and Listeners
+ 	to before expansion of root.
+ 	(paint): Added check to make sure the cached visible path is updated.
+ 	(treeExpanded): Added call to update visible path.
+ 	(treeCollapsed): Likewise.
+ 	(treeNodesChanged): Likewise.
+ 	(treeNodesInserted): Likewise.
+ 	(treeNodesRemoved): Likewise.
+ 	(treeStructureChanged): Likewise.
+ 	(paintRecursive): Moved code to paintRow.
+ 	(paintControlIcons): Fixed to paint custom control icons properly.
+ 	(paintExpandControl): Removed unneeded parameter.
+ 	(paintRow): Added code to paint the row with the correct width.
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	(installUI): Moved code to expand the root after all the listeners
+ 	have been initialized.
+ 
+ 2005-10-17  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(ItemHandler.itemStateChanged): if combo box is editable, update edit 
+ 	text field with new selection.
+ 	
+ 2005-10-17  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/event/ListDataListener: 
+ 	reformatted and added API docs.
+ 
+ 2005-10-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JPopupMenu.java
+ 	(setVisible): Set size according to the size property instead of
+ 	the preferredSize property.
+ 	* javax/swing/plaf/basic/BasicComboPopup.java
+ 	(ListMouseHandler.mouseReleased): Set comboBox selected index before
+ 	closing the popup.
+ 
+ 2005-10-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(getTableCellRendererComponent): Setup colors (more) correctly.
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(isSelectedIndex): Check for an illegal index argument.
+ 
+ 2005-10-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	Filled empty blocks with comments.
+ 	(setVisible): Notify AncestorListeners when visibility state is
+ 	changed.
+ 	(removeNotifiy): Notify AncestorListeners via fireAncestorEvent
+ 	method.
+ 	(addNotifiy): Notify AncestorListeners via fireAncestorEvent
+ 	method.
+ 
+ 2005-10-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JViewport.java
+ 	(setView): Removed unnecessary loop. We only have on component.
+ 	(isOptimizedDrawingEnabled): Added comment explaining why this
+ 	method is necessary.
+ 
+ 2005-10-17  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	Filled empty blocks with comments.
+ 	(FocusHandler.focusLost): Close popup when the combobox loses focus.
+ 	* javax/swing/plaf/basic/BasicComboPopup.java
+ 	Filled empty blocks with comments.
+ 	(updateListBoxSelectionForEvent): Implemented partly.
+ 	(ListMouseHandler.mouseReleased): Call updateListBoxSelectionForEvent.
+ 	(ListMouseMotionHandler.mouseReleased): Likewise.
+ 
+ 2005-10-17  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/ComboBoxDemo.java:
+ 	(CustomCellRenderer): new inner class,
+ 	(comboState6): new field,
+ 	(combo11): new field,
+ 	(combo12): new field,
+ 	(createContent): add panel from createPanel6(),
+ 	(createPanel6): new method,
+ 	(actionPerformed): update state for new JComboBoxes,
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(installComponents): don't create arrowButton until after listBox is 
+ 	created, set listBox to the JList created by the popup,
+ 	* javax/swing/plaf/metal/MetalComboBoxButton.java:
+ 	(MetalComboBoxButton(JComboBox, Icon, boolean, CellRendererPane, 
+ 	JList)): set margins to zero,
+ 	(paintComponent): use list cell renderer to paint button content,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): add 'List.font' default.
+ 
+ 2005-10-17  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Properties.java:
+ 	(storeToXML(OutputStream,String)): Implemented.
+ 	(storeToXml(OutputStream,String,String)): Likewise.
+ 
+ 2005-10-17  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Focused_ORB.java: New file.
+ 	* gnu/CORBA/Functional_ORB.java,
+ 	org/omg/CORBA/ORB.java: Adapted to support the 
+ 	gnu.CORBA.ListenerPort property.
+ 
+ 2005-10-15  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/DynamicImplementation.java: Made concrete.
+ 	(invoke): Implemented.
+ 	gnu/CORBA/Simple_delegate.java (request): Implemented. 
+ 
+ 2005-10-14  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(treeNodesChanged): Added call to revalidate and resize tree.
+ 	* javax/swing/tree/DefaultTreeModel.java
+ 	(insertNodeInto): Needed to set parent for new node.
+ 
+ 2005-10-14  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* java/net/URLStreamHandler.java:
+ 	(toExternalForm): Use "//" + authority format when file part starts
+ 	with two slashes.
+ 
+ 2005-10-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paintLock): Removed unneeded field.
+ 	(isCompletelyDirty): New field.
+ 	(setBorder): Don't get active if actual value didn't change.
+ 	Otherwise trigger a repaint.
+ 	(paint): Mark this component as clean after painting when the clip
+ 	covered the whole component.
+ 	(paintImmediately): Find more sensible paint root via new helper
+ 	methods.
+ 	(paintDoubleBuffered): Don't synchronize here.
+ 	(setFont): Don't get active if actual value didn't change.
+ 	Otherwise trigger a repaint and revalidate.
+ 	(setBackground): Don't get active if actual value didn't change.
+ 	Otherwise trigger a repaint.
+ 	(setForeground): Don't get active if actual value didn't change.
+ 	Otherwise trigger a repaint.
+ 	(setUI): Trigger a repaint.
+ 	(findPaintRoot): New helper method.
+ 	(findOverlapFreeParent): New helper method.
+ 	(findOpaqueParent): New helper method.
+ 	* javax/swing/RepaintManager.java
+ 	(ComponentComparator): New inner class. Used to sort components
+ 	according to their depth in the containment hierarchy.
+ 	(dirtyComponents): Use HashMap instead of Hashtable.
+ 	(workDirtyComponents): New field.
+ 	(repaintOrder): New field.
+ 	(workRepaintOrder): New field.
+ 	(comparator): New field.
+ 	(invalidComponents): Use ArrayList instead of Vector.
+ 	(workInvalidComponents): New field.
+ 	(RepaintManager): Initialize new fields.
+ 	(removeInvalidComponent): Adjusted for ArrayList.
+ 	(addDirtyRegion): Return if component in question is not showing.
+ 	Insert the new component in the repaintOrder list.
+ 	(insertRepaintOrder): New method. Maintains a sorted list of
+ 	components.
+ 	(getDirtyRegion): Return empty Rectangle instead of null when
+ 	component is not dirty, as specified.
+ 	(markCompletelyDirty): Set flag in JComponent.
+ 	(markCompletelyClean): Synchronize access to fields.
+ 	(isCompletelyDirty): Use flag in JComponent to determine this
+ 	property.
+ 	(validateInvalidComponents): Use workInvalidComponents when
+ 	revalidating. This avoids blocking of application threads
+ 	in revalidate() calls.
+ 	(paintDirtyRegion): Use work* fields when
+ 	repainting. This avoids blocking of application threads
+ 	in repaint() calls. Simplify actual work, now we simply call
+ 	paintImmediatly() on the dirty components.
+ 
+ 2005-10-14  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/LookAndFeel.java
+ 	(makeIcon): Implemented.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(updateCachedPreferredSize): Should only add with of control icon if
+ 	not a leaf.
+ 	(mousePressed): Fixed to use new gap field.
+ 	(paintRecursive): Likewise.
+ 	(paintRow): Likewise.
+ 	(updateCurrentVisiblePath): Shouldn't include root if it is
+ 	not of a valid size to be painted.
+ 
+ 2005-10-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	(isOptimizedDrawingEnabled): New method.
+ 
+ 2005-10-14  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/PolicyErrorHelper.java,
+ 	org/omg/CORBA/PolicyErrorHolder.java,
+ 	org/omg/CORBA/UnknownUserExceptionHelper.java,
+ 	org/omg/CORBA/UnknownUserExceptionHolder.java,
+ 	org/omg/CORBA/WrongTransactionHelper.java,
+ 	org/omg/CORBA/WrongTransactionHolder.java: New files.
+ 
+ 2005-10-14  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(nextTabStop): Tab size should be multiplied by the width of 'm', not
+ 	added to it.
+ 
+ 2005-10-14  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(getTabSize): Check the Document's properties for
+ 	PlainDocument.tabSizeAttribute before defaulting to 8.
+ 
+ 2005-10-14  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/BoxView.java:
+ 	(preferenceChanged): New method (overrides method in View).  Set flag 
+ 	indicating that cached layout information is invalid, then call super
+ 	implementation.
+ 
+ 2005-10-14  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/CompositeView.java: Minor doc fixes.
+ 	* javax/swing/text/BoxView.java: Minor doc fixes.
+ 
+ 2005-10-14  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(getAccessibleContext): Fixed API docs, and returned the correct value.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(updateCachedPreferredSize): Fixed parameter passed to isLeaf, node
+ 	should be passed in and not a path.
+ 
+ 2005-10-14  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/DefaultCaret.java:
+ 	(ALWAYS_UPDATE): New field.
+ 	(NEVER_UPDATE): New field.
+ 	(UPDATE_WHEN_ON_EDIT): New field.
+ 	(insertUpdate): Fixed docs.  Only update the dot if the policy is
+ 	ALWAYS_UPDATE or if the policy is UPDATE_WHEN_ON_EDT and the event
+ 	was generated on the Event Dispatch thread.
+ 	(removeUpdate): Fixed docs.  Only update the dot if the policy is
+ 	ALWAYS_UPDATE, if the policy is UPDATE_WHEN_ON_EDT and the event was 
+ 	generated on the Event Dispatch thread, or if the document length 
+ 	has become less than the current dot position.
+ 	(setUpdatePolicy): New method.
+ 	(getUpdatePolicy): New method.
+ 	
+ 2005-10-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/BoxLayout.java
+ 	(layoutContainer): Perform layout inside the container's treeLock.
+ 	Respect the insets of the container.
+ 
+ 2005-10-14  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(getAccessibleSelectionCount): Fixed API documentation.
+ 	(getScrollableTracksViewportWidth): Was using height instead of
+ 	width, fixed this.
+ 	(getScrollableTracksViewportHeight): Likewise.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(BasicTreeUI): Initialized validCachedPreferredSize.
+ 	(updateCachedPreferredSize): Implemented.
+ 	(pathWasExpanded): Implemented.
+ 	(pathWasCollapsed): Implemented.
+ 	(installDefaults): Fixed API documentation.
+ 	(uninstallDefaults): Likewise.
+ 	(setPreferredMinSize): Likewise.
+ 	(getPreferredMinSize): Likewise.
+ 	(getPreferredSize): Reimplemented to use updateCachedPreferredSize.
+ 	(startEditing): set validCachedPreferredSize.
+ 	(editingStopped): Likewise.
+ 	(editingCanceled): Likewise.
+ 	(treeExpanded): Likewise.
+ 	(treeCollaped): Likewise.
+ 	(treeNodesInserted): Likewise.
+ 	(treeNodesRemoved): Likewise.
+ 	(treeStructureChanged): Likewise.
+ 	(getNextVisibleNode): Fixed API documentation.
+ 	(getNextNode): Likewise.
+ 	(getNextSibling): Likewise.
+ 	(getPreviousSibling): Likewise.
+ 	(getLevel): Likewise.
+ 	(paintVerticalPartOfLeg): Likewise.
+ 
+ 2005-10-14  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/PolicyErrorCodeHelper.java: New class. 
+ 
+ 2005-10-14  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/LocalObject.java (_get_interface, _invoke, _is_local,
+ 	_orb, _releaseReply, _request, _servant_postinvoke, _servant_preinvoke,
+ 	validate_connection): New methods.
+ 
+ 2005-10-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/midi-alsa/.cvsignore,
+ 	native/jni/midi-dssi/.cvsignore: New files
+ 
+ 2005-10-13  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/ObjectCreator.java (forName):
+ 	Use gnu.classpath.VMStackWalker.
+ 	* gnu/CORBA/Interceptor/Registrator.java,
+ 	gnu/CORBA/gnuValueHolder.java,
+ 	gnu/CORBA/stubFinder.java,
+ 	gnu/javax/rmi/CORBA/DelegateFactory.java,
+ 	gnu/javax/rmi/CORBA/StubDelegateImpl.java,
+ 	org/omg/CORBA/ORB.java: Load class via ObjectCreator. 
+ 
+ 2005-10-13  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(updateDamage): Made this method protected, not package-private.
+ 
+ 2005-10-13  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/BoxLayout.java
+ 	(xChildren): New field.
+ 	(yChildren): New field.
+ 	(xTotal): New field.
+ 	(yTotal): New field.
+ 	(offsetsX): New field.
+ 	(offsetsY): New field.
+ 	(spansX): New field.
+ 	(spansY): New field.
+ 	(preferredLayoutSize): Rewritted to use cached values if available.
+ 	(minimumLayoutSize): Rewritted to use cached values if available.
+ 	(maximumLayoutSize): Rewritted to use cached values if available.
+ 	(layoutContainer): Rewritted to use cached values if available.
+ 	(getAlignmentX): Implemented.
+ 	(getAlignmentY): Implemented.
+ 	(invalidateLayout): Clear the cache.
+ 	(getSizeRequirements): Removed unneeded method. Replaced by
+ 	checkRequirements().
+ 	(checkTotalRequirements): New helper method.
+ 	(checkRequirements): New helper method.
+ 	(checkLayout): New helper method.
+ 
+ 2005-10-13  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(calculateAlignedPositions): Determine baseline using the total
+ 	requirements argument.
+ 	(adjustFromRight): Use float instead of int for baseline argument.
+ 	Don't handle the <minimum case.
+ 	(adjustFromLeft): Likewise.
+ 
+ 2005-10-13  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Added leafIcon field.
+ 	(BasicTreeUI): Initialized leafIcon field.
+ 	(installDefaults): Fixed icon defaults.
+ 	(getPreferredSize): Fixed up code slightly.
+ 	(startEditing): Called revalidate because size of
+ 	view may change.
+ 	(EditingStopped): Likewise.
+ 	(EditingCanceled): Likewise.
+ 	(mousePressed): Fixed up icon sizes.
+ 	(paintRecursive): Fixed up width painted.
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	(installDefaults): Fixed icon defaults.
+ 
+ 2005-10-13  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java:
+ 	(paint): Reset the clip of the Graphics object after each iteration.
+ 
+ 2005-10-13  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(installDefaults): Initialize rendererPane.
+ 	(paintCell): New method to paint an individual cell using a 
+ 	CellRendererPane, taking borders and highlighting into account.
+ 	(paint): Removed direct painting code, let paintCell handle this.
+ 
+ 2005-10-13  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/ScrollPaneLayout.java
+ 	(preferredLayoutSize): Added some more null checks to avoid NPEs.
+ 	(minimumLayoutSize): Added some more null checks to avoid NPEs.
+ 
+ 2005-10-13  Jan Roehrich  <jan@roehrich.info>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(installUI): Fixed setting of local JTree reference
+ 
+ 2005-10-13  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getPreferredSize): Added check to prevent NPE.
+ 	(mousePressed): Likewise.
+ 	(paintRecursive): Likewise.
+ 	(paintExpandedControlIcons): Likewise.
+ 	(paintRow): Fixed painting location of textarea.
+ 
+ 2005-10-13  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(updateDamage): Repaint the container if a new line is added.
+ 
+ 2005-10-13  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getPathForRow): Added check to prevent NPE.
+ 	(getRowCount): Likewise.
+ 	(getRowForPath): Likewise.
+ 	(getPreferredSize): Adjusted width depending on x location and
+ 	icon.
+ 	(paintRecursive): Likewise.
+ 	(getPreviousNode): Added check to prevent NPE.
+ 	(getNextVisibleNode): Likewise.
+ 
+ 2005-10-13  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/PlainView.java
+ 	(lineBuffer): New field used as buffer to fetch text from a
+ 	document.
+ 	(getLineBuffer): New method, provides access to the new field
+ 	above.
+ 	(modelToView): Use new lineBuffer.
+ 	(drawSelectedText): Likewise.
+ 	(drawUnselectedText): Likewise.
+ 	(determineMaxLineLength): Likewise.
+ 	(viewToModel): Likewise.
+ 	(updateDamage): Likewise.
+ 
+ 2005-10-13  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(replaceSelection): Removed debug statement.
+ 	* javax/swing/text/PlainView.java
+ 	(updateDamage): Removed unnecessary repaint call.
+ 	(damageLineRange): Trigger repaint over the whole width of the
+ 	text component at the requested line range. Otherwise we might
+ 	not clear deleted text.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(DocumentHandler.changedUpdate): Use visibleEditorRect as
+ 	initial allocation.
+ 	(DocumentHandler.removeUpdate): Use visibleEditorRect as
+ 	initial allocation.
+ 	(DocumentHandler.insertUpdate): Use visibleEditorRect as
+ 	initial allocation.
+ 	(getVisibleEditorRect): If component width and height values are
+ 	invalid (==uninitialized), return a Rectangle of (0,0,0,0) instead
+ 	of null.
+ 
+ 2005-10-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalFileChooserUI.java
+ 	(DirectoryComboBoxAction): new inner class,
+ 	(FileRenderer): new inner class,
+ 	(directoryModel): new private field.
+ 
+ 2005-10-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added default value for 
+ 	'List.focusCellHighlightBorder'.
+ 
+ 2005-10-12  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/UIDefaults.java
+ 	(getUIClass): Fixed to use the system class loader if
+ 	the loader is null.
+ 
+ 2005-10-12  David Daney  <ddaney@avtrex.com>
+ 
+ 	PR classpath/24259
+ 	* gnu/java/net/LineInputStream.java: Import BufferedInputStream.
+ 	(Constructor): Don't do blockReads on BufferedInputStreams.
+ 	(readLine): Rename MIN_LENGTH to MAX_LENGTH.  Limit buffer size to
+ 	MAX_LENGTH.
+ 
+ 2005-10-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java: Fixed some API docs and unused imports.
+ 	
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paintImmediately): Find the paint root more cleverly, instead of
+ 	going up to the root.
+ 	(findPaintRoot): New helper method.
+ 	(findOverlapFreeParent): New helper method.
+ 	(findOpaqueParent): New helper method.
+ 	* javax/swing/RepaintManager.java
+ 	(addDirtyRegion): Collapse overlapping dirty regions into single
+ 	regions.
+ 	(paintDirtyRegions): Simple iterator over dirty regions and
+ 	paint them. The optimizations are done in JComponent and
+ 	addDirtyRegion.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/ScrollPaneLayout.java
+ 	(minimumLayoutSize): Added checks to avoid NPEs.
+ 
+ 2005-10-12  David Daney  <ddaney@avtrex.com>
+ 
+ 	PR classpath/24086, PR classpath/24091, PR classpath/24104
+ 	* gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java: Removed.
+ 	* gnu/java/net/protocol/http/ResponseBodyReader.java: Removed.
+ 	* gnu/java/net/protocol/http/event/ConnectionEvent.java: Removed.
+ 	* gnu/java/net/protocol/http/event/ConnectionListener.java: Removed.
+ 	* gnu/java/net/protocol/http/event/RequestEvent.java: Removed.
+ 	* gnu/java/net/protocol/http/event/RequestListener.java: Removed.
+ 	* gnu/java/net/protocol/http/event/package.html: Removed.
+ 	* gnu/java/net/protocol/http/HTTPConnection.java: Cleaned up imports.
+ 	(connectionListeners): Removed.
+ 	(requestListeners): Removed.
+ 	(pool): New field.
+ 	(Constructor): Don't initialize connectionListeners or
+ 	requestListeners.
+ 	(useCount): New field.
+ 	(getPoolKey): New method.
+ 	(setPool): New method.
+ 	(release): New method.
+ 	(newRequest): Don't call fireRequestEvent. Use StringBuilder instead
+ 	of StringBuffer.
+ 	(close): Don't call fireConnectionEvent.
+ 	(getURI):Use StringBuilder instead of StringBuffer.
+ 	(addConnectionListener): Removed.
+ 	(removeConnectionListener): Removed.
+ 	(fireConnectionEvent): Removed.
+ 	(addRequestListener): Removed.
+ 	(removeRequestListener): Removed.
+ 	(fireRequestEvent): Removed.
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java:Cleaned up imports.
+ 	(connectionPool): Changed type to LinkedHashMap.
+ 	(maxConnections): Made static.
+ 	(responseSink): Changed type to InputStream.
+ 	(errorSink): Likewise.
+ 	(connect): Eliminate reader.  Get responseSink from response.
+ 	(getConnection): Rewrote.
+ 	(getHeaderFields): Use null as key for status line.  Return
+ 	unmodifiable Map.
+ 	* gnu/java/net/protocol/http/Headers.java: Extend LinkedHashMap,
+ 	instead of implement Map.
+ 	(headers): Removed.
+ 	(Constructor): Do not initialize headers.
+ 	(size): Removed.
+ 	(isEmpth): Removed.
+ 	(containsKey): Rewrote.
+ 	(containsValue): Removed.
+ 	(get): Call super.get().
+ 	(getValue): Likewise.
+ 	(getLongValue): New method.
+ 	(put): Call super.put().
+ 	(remove): Call super.remove().
+ 	(putAll): Rewrote.
+ 	(clear): Removed.
+ 	(keySet): Call super.keySet().
+ 	(values): Removed.
+ 	(entrySet): Call super.entrySet().
+ 	(equals): Removed.
+ 	(hashCode): Removed.
+ 	(parse): Use StringBuilder instead of StringBuffer.
+ 	(addValue): Call super.* instead of headers.*.
+ 	* gnu/java/net/protocol/http/LimitedLengthInputStream.java: New class.
+ 	* gnu/java/net/protocol/http/Request.java: Cleaned up imports.
+ 	(responseBodyReader): Removed.
+ 	(setResponseBodyReader): Removed.
+ 	(dispatch): Don't create LineInputStream.  Don't call fireRequestEvent.
+ 	Don't append CRLF to Request body.  Handle unsolicited 100 Continue
+ 	response.
+ 	(readResponse): Rewrote.
+ 	(readResponseBody): Renamed to ...
+ 	(createResponseBodyStream): ... And rewritten.
+ 	(parseAuthParams): Use StringBuilder instead of StringBuffer.
+ 	(getNonceCount): Likewise.
+ 	(handleSetCookie): Likewise.
+ 	* gnu/java/net/protocol/http/Response.java: Cleaned up imports.
+ 	(codeClass): Removed.
+ 	(body): New field.
+ 	(Constructor): Don't initialize codeClass.  Initialize body.
+ 	(getCodeClass): Rewrote.
+ 	(getLongHeader): New method.
+ 	(getBody): New method.
+ 	* gnu/java/net/protocol/http/ChunkedInputStream.java (read): Use
+ 	StringBuilder instead of StringBuffer.
+ 	* gnu/java/net/protocol/http/Cookie.java (toString): Use StringBuilder
+ 	instead of StringBuffer.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java
+ 	(getFileView): Don't call back into the JFileChooser, avoids
+ 	a StackOverflow.
+ 	(getApproveButtonText): Likewise.
+ 
+ 2005-10-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #22841
+ 	* java/io/ObjectInputStream (validators): Removed field.
+ 	(isDeserializing): Removed field.
+ 	(currentObjectValidators): New field.
+ 	(ObjectInputStream): Remove validators and isDeserializing
+ 	initialization.
+ 	(readObject): Remove isDeserializing logic. Don't call
+ 	invokeValidators() here.
+ 	(parseContent): Call invokeValidators() after TC_OBJECT done.
+ 	(registerValidation): Create currentObjectValidators if needed.
+ 	(invokeValidators): Rewritten.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/CellRendererPane.java
+ 	(paintComponent): Fix clipping of cells.
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	(paint): Fix clipping of cells.
+ 
+ 2005-10-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	(insertString): Don't include an ElementChange if no children were
+ 	added.
+ 	(remove): Don't include an ElementChange if no children were removed.
+ 
+ 2005-10-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(insertOrRemoveUpdate): Renamed this method to udpateDamage because
+ 	changedUpdate calls it as well.
+ 	(updateDamage): This method used to be named insertOrRemoveDamage.
+ 	Changes are: If no children were added or removed, repaint only the 
+ 	area containing the line that was changed.  Also, if children were
+ 	added or removed, call repaint on the entire container. Also fixed a 
+ 	serious logic error in the bounds for Document.getText().
+ 	(insertUpdate): Changed call from insertOrRemoveUpdate to updateDamage
+ 	and removed repaint call (this is done in updateDamage).
+ 	(removeUpdate): Likewise.
+ 	(changedUpdate): Implemented.
+ 	(damageLineRange): Implemented.
+ 
+ 2005-10-12  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(treeExpanded): Added revalidate call.
+ 	(treeCollapsed): Likewise.
+ 	(treeNodesInserted): Likewise.
+ 	(treeNodesRemoved): Likewise.
+ 	(treeStructureChanged): Likewise.
+ 
+ 2005-10-12  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added defaults for FileView.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JViewport.java
+ 	(sizeChanged): A new flag, indicating when the size of the
+ 	viewport has changed relative to the last painting operation.
+ 	(reshape): Set sizeChanged flag if size has changed.
+ 	(paintBackingStore): Only create new backingstore image when
+ 	the size has changed.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Component.java
+ 	(reshape): Fixed calculation of newBounds and oldBounds to create
+ 	rectangles relative to the parent, and not to the parent's parent.
+ 	Solves a painting problem in an app here.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/ComponentUI.java
+ 	(update): Only fill the current clip. This solves a problem with
+ 	components in JViewport and should also optimize drawing a little.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/ScrollPaneLayout.java
+ 	(preferredLayoutSize): Reworked. The old impl used to actually
+ 	modify the layout, which is not allowed.
+ 	(minimumLayoutSize): Reworked. The old impl used to actually
+ 	modify the layout, which is not allowed.
+ 	(layoutContainer): Reworked. The old impl did not properly determine
+ 	when the scrollbars should be visible and when not.
+ 
+ 2005-10-12  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(FileIcon16.getIconHeight): add result of getAdditionalHeight(),
+ 	(FolderIcon16.getIconHeight): add result of getAdditionalHeight(),
+ 	(checkBoxIcon): new private field,
+ 	(checkBoxMenuItemIcon): likewise,
+ 	(fileChooserDetailViewIcon): likewise,
+ 	(fileChooserHomeFolderIcon): likewise,
+ 	(fileChooserListViewIcon): likewise,
+ 	(fileChooserNewFolderIcon): likewise,
+ 	(fileChooserUpFolderIcon): likewise,
+ 	(radioButtonMenuItemIcon): likewise,
+ 	(internalFrameDefaultMenuIcon): likewise,
+ 	(treeComputerIcon): likewise,
+ 	(treeFloppyDriveIcon): likewise,
+ 	(treeHardDriveIcon): likewise,
+ 	(getCheckBoxIcon): return single instance,
+ 	(getCheckBoxMenuItemIcon): likewise,
+ 	(getFileChooserDetailViewIcon): likewise,
+ 	(getFileChooserHomeFolderIcon): likewise,
+ 	(getFileChooserListViewIcon): likewise,
+ 	(getFileChooserNewFolderIcon): likewise,
+ 	(getFileChooserUpFolderIcon): likewise,
+ 	(getRadioButtonMenuItemIcon): likewise,
+ 	(getInternalFrameDefaultMenuIcon): likewise,
+ 	(getTreeComputerIcon): likewise,
+ 	(getTreeFloppyDriveIcon): likewise,
+ 	(getTreeHardDriveIcon): likewise.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(AbstractButton): Set button to be opaque.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JList.java
+ 	(locationToIndex): Put opening brace on next line.
+ 	(indexToLocation): Call UI's indexToLocation.
+ 	(getCellBounds): Replaced cast with getUI() call.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JFileChooser.java
+ 	(getDialogTitle): If no dialog title has been set, forward this
+ 	call to the UI.
+ 	(getApproveButtonText): If no text has been set, forward this
+ 	call to the UI.
+ 	(getFileView): If no file view has been set, forward this call
+ 	to the UI.
+ 	(getInternalFileView): Removed unneeded method.
+ 	(getName): Call getFileView instead of getInternalFileView.
+ 	(getDescription): Call getFileView instead of getInternalFileView.
+ 	(getTypeDescription): Call getFileView instead of
+ 	getInternalFileView.
+ 	(getIcon): Call getFileView instead of getInternalFileView.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(setFont): Only get active if the new font differs from the old one.
+ 	Call revalidate when font changes.
+ 	(setUI): Call revalidate when UI changes.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComboBox.java
+ 	(isFocusTraversable): Removed unneeded and unspecified method.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JViewport.java
+ 	(ViewListener.componentResized): Only call revalidate instead of
+ 	going through weird reverting code.
+ 	(JViewport): First call updateUI, then set layout.
+ 	(setViewPosition): Don't do anything if there is no real
+ 	change.
+ 	(setView): Don't remove the old component. This is handled by
+ 	addImpl. Call revalidate().
+ 	* javax/swing/ViewportLayout.java
+ 	(layoutContainer): Preferably set view size to it's preferredSize
+ 	instead of its minimumSize.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(getToolTipText): New method.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Fixed value for
+ 	Table.focusCellHighlightBorder.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
+ 	(installDefaults): Use UIManager.get* methods instead of
+ 	UIManager.getDefaults().get* methods.
+ 	* javax/swing/plaf/basic/BasicColorChooserUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java
+ 	(installDefaults): Only install background color, if installed
+ 	color is null or an UIResource instance.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Added default for List.font.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicPanelUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java
+ 	(installDefaults): Use UIManager.get* methods instead of
+ 	UIManager.getDefaults().get* methods.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicSpinnerUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicToolBarSeparatorUI.java
+ 	(installDefaults): Use UIManager.get* methods instead of
+ 	UIManager.getDefaults().get* methods.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods. Use
+ 	UIManager.get* methods instead of UIManager.getDefaults().get*
+ 	methods.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(installDefaults): Use new LookAndFeel install* methods.
+ 
+ 2005-10-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/LookAndFeel.java
+ 	(installBorder): Implemented.
+ 	(installColors): Implemented.
+ 	(installColorsAndFont): Implemented.
+ 
+ 2005-10-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 	* native/jni/java-lang/java_lang_VMProcess.c
+ 	(Java_java_lang_VMProcess_nativeSpawn): Don't delete clazz local
+ 	reference twice.
+ 	
+ 2005-10-12  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/event/SwingPropertyChangeSupport.java
+ 	(firePropertyChange(PropertyChangeEvent)): if old and new values are 
+ 	both null, listeners should be notified.
+ 
+ 2005-10-11  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/DefaultComboBoxModel.java
+ 	(setSelectedItem): allow values not in list, and don't fire an event 
+ 	if the value is unchanged.
+ 
+ 2005-10-11  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/GapContent.java:
+ 	(getPositionsInRange): Corrected interval check.  This mirrors Roman's
+ 	change in GapContent from 2005-10-05 for adjustPositionsInRange and
+ 	setPositionsInRange.
+ 
+ 2005-10-11  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java:
+ 	(viewToModel): Implemented.
+ 	* javax/swing/text/DefaultCaret.java:
+ 	(mousePressed): Implemented.
+ 	* javax/swing/text/PlainView.java:
+ 	(viewToModel): Implemented.
+ 
+ 2005-10-11  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(insertUpdate): Repaint the JTextComponent after the update.
+ 	(removeUpdate): Likewise.
+ 
+ 2005-10-11  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JFileChooser.java: Added API docs all over.
+ 
+ 2005-10-11  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(AccessibleJEditorPaneHTML): New inner class.
+ 	(JEditorPaneAccessibleHypertextSupport): New inner class.
+ 	(getAccessibleContext): Handle special case when we have
+ 	a HTMLEditorKit.
+ 	(setEditorKit): Reset the accessibleContext.
+ 
+ 2005-10-11  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/filechooser/FileSystemView.java
+ 	(defaultFileSystemView): new private field,
+ 	(getFileSystemView): initialise (if necessary) and return 
+ 	defaultFileSystemView.
+ 
+ 2005-10-11  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* examples/gnu/classpath/examples/CORBA/SimpleCommunication/Demo.java
+ 	(main): Message removed from the loop.
+ 
+ 2005-10-10  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* examples/gnu/classpath/examples/CORBA/SimpleCommunication/Demo.java
+ 	(main): 3 sec pause replaced by while(..) loop. 
+ 
+ 2005-10-10  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Interceptor/Registrator.java,
+ 	gnu/CORBA/ObjectCreator.java,
+ 	gnu/CORBA/gnuValueHolder.java,
+ 	gnu/CORBA/stubFinder.java,
+ 	gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/StubDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/UtilDelegateImpl.java,
+ 	org/omg/CORBA/ORB.java: Use context class loader. 
+ 
+ 2005-10-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/View.java
+ 	(modelToView(pos, Shape)): New method.
+ 	(viewToModel(float, float, Shape)): New method.
+ 
+ 2005-10-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(AccessibleJEditorPane): New inner class.
+ 	(getAccessibleContext): Implemented to return an instance of
+ 	AccessibleJEditorPane.
+ 	* javax/swing/JScrollPane.java
+ 	(AccessibleJScrollPane): New inner class.
+ 	(getAccessibleContext): Implemented to return an instance of
+ 	AccessibleJScrollPane.
+ 	(setViewport): Call accessibleContext's resetViewPort() method.
+ 	* javax/swing/JTextArea.java
+ 	(AccessibleJTextArea): New inner class.
+ 	(getAccessibleContext): Implemented to return an instance of
+ 	AccessibleJTextArea.
+ 	* javax/swing/JTextField.java
+ 	(AccessibleJTextField): New inner class.
+ 	(getAccessibleContext): Implemented to return an instance of
+ 	AccessibleJTextField.
+ 	* javax/swing/JRootPane.java
+ 	(defaultPressAction): New field.
+ 	(defaultReleaseAction): New field.
+ 
+ 2005-10-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JMenuBar.java
+ 	(AccessibleJMenuBar): New inner class.
+ 	(getAccessibleContext): Implemented to return an instance of
+ 	AccessibleJMenuBar.
+ 
+ 2005-10-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paintChildren): Skip children if their clip _doesn't_ hit the
+ 	current	clip.
+ 	(setVisible): Do nothing if the actual value didn't change.
+ 
+ 2005-10-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Graphics.java
+ 	(hitClip): Implemented this method.
+ 
+ 2005-10-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Graphics.java: Reformatted file.
+ 
+ 2005-10-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/beans/IndexedPropertyDescriptor.java
+ 	(setIndexedReadMethod): Changed signature to throw
+ 	IntrospectionException as specified.
+ 	(setIndexedWriteMethod): Changed signature to throw
+ 	IntrospectionException as specified.
+ 
+ 2005-10-10  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(rectCache): New field. Caches Rectangle objects for reuse.
+ 	(paintChildren): Changed to reuse cached Rectangle object.
+ 
+ 2005-10-10  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/border/TitledBorder.java
+ 	(TitledBorder(String)): Changed default justification and position,
+ 	(TitledBorder(Border)): Likewise,
+ 	(TitledBorder(Border, String)): Likewise,
+ 	(BorderPainter.paint(Graphics)): Use full width and height,
+ 	(BorderPainter.paintExcept): Fixed bounds for region 3,
+ 	(paintBorder): indented left justified title further, adjusted 
+ 	ABOVE_TOP text position, adjusted bounds for call to paintExcept(),
+ 	updated for renamed fields in Measurements class,
+ 	(getMeasurements): added special handling for null text, increased 
+ 	outer spacing, adjusted spacing for TOP, BOTTOM and BELOW_BOTTOM title
+ 	positions,
+ 	(Measurements.borderSpacing): renamed outerSpacing,
+ 	(Measurements.edgeSpacing): renamed innerSpacing,
+ 	(Measurements.getContentInsets): updated for renamed fields,
+ 	(Measurements.getMinimumSize): wrap at 80 columns.
+ 
+ 2005-10-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #24006
+ 	* java/net/Socket.java (bound): Make package private.
+ 	* java/net/ServerSocket.java (implAccept): Set Socket.bound to true.
+ 
+ 2005-10-07  Anthony Green  <green@redhat.com>
+ 
+ 	* native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c
+ 	(process): call run_multiple_synths if required.
+ 
+ 2005-10-07  Anthony Green  <green@redhat.com>
+ 
+ 	* native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c
+ 	(Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_open_1): Attempt
+ 	to connect to the jack server automatically.  Fail gracefully.
+ 
+ 2005-10-07  Anthony Green  <green@redhat.com>
+ 
+ 	* gnu/javax/sound/midi/dssi/DSSISynthesizer.java (loadInstrument):
+ 	Implement.
+ 	(selectProgram_): New native method.
+ 	* include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h: Rebuilt.
+ 	* native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c
+ 	(selectProgram_): New function.
+ 
+ 2005-10-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (postChoiceItemEvent):
+ 	Don't call select on the AWT Choice component.
+ 	* java/awt/Choice.java (processItemEvent): Set the selected index
+ 	without calling into the peers.
+ 
+ 2005-10-07  Anthony Green  <green@redhat.com>
+ 
+ 	* gnu/javax/sound/midi/dssi/DSSISynthesizer.java
+ 	Doc cleanups.
+ 	(DSSISynthesizer.DSSISoundbank): New class.
+ 	(DSSISynthesizer.DSSIInstrument): New class.
+ 	(soundbanks, defaultSoundbank): New fields.
+ 	(getDefaultSoundbank): Implemented.
+ 	(getAvailableInstruments): Implemented.
+ 	(getProgramName_, getProgramBank_, getProgramProgram_): New native
+ 	methods.
+ 	(DSSISynthesizer): Create default soundbank.
+ 	* native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c
+ 	(Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_getProgramName_1,
+ 	Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_getProgramBank_1,
+ 	Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_getProgramProgram_1):
+ 	New functions.
+ 	* include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h: Rebuilt.
+ 
+ 2005-10-07  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(tableChanged): Revalidate table if its structure changes.
+ 
+ 2005-10-07  Jan Roehrich  <jan@roehrich.info>
+ 
+ 	* javax/swing/JTree.java: (JTree):
+ 	* javax/swing/plaf/basic/BasicTreeUI.java: (updateRenderer):
+ 	moved setting of TreeCellRenderer from JTree to BasicTreeUI.
+ 
+ 2005-10-07  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/beans/IndexedPropertyDescriptor.java
+ 	(setIndexedReadMethod): New method.
+ 	(setIndexedWriteMethod): New method.
+ 
+ 2005-10-07  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/beans/IndexedPropertyDescriptor.java: Reformatted.
+ 
+ 2005-10-07  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(currentIcon): Fix icon for disabled selected buttons.
+ 	(paint): Only paint focus indicator if button is actually
+ 	focusPainted.
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java
+ 	(installDefaults): Install icons for disabledIcon and
+ 	disabledSelectedIcon.
+ 	(paint): Paint the correct icon. Only paint focus indicator
+ 	if button is actually focusPainted.
+ 	* javax/swing/plaf/basic/BasicToggleButtonUI.java
+ 	(paint): Only paint focus indicator if button is actually
+ 	focusPainted.
+ 
+ 2005-10-07  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paint): Call paintBorder before paintChildren.
+ 	(reshape): Fire AncestorEvent if position has changed.
+ 	(fireAncestorMoved): New method. Fires AncestorEvents to this
+ 	component and all of it's children.
+ 
+ 2005-10-07  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/BorderFactory.java
+ 	(createLineBorder(Color)): Forward call to
+ 	createLineBorder(Color, int) with thickness of 1.
+ 
+ 2005-10-06  Anthony Green  <green@redhat.com>
+ 
+ 	* native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c
+ 	(Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_open_1): Ignore
+ 	controllers that aren't mapped to MIDI controls.
+ 
+ 2005-10-06  Anthony Green  <green@redhat.com>
+ 
+ 	* INSTALL: Describe midi provider dependencies.
+ 
+ 	* native/jni/midi-dssi/README: New file.
+ 	* LICENSE (terms): Add notice about code copied from the DSSI
+ 	distribution.
+ 
+ 	* examples/gnu/classpath/examples/midi/Demo.java: New file.
+ 
+ 	* native/jni/midi-dssi/dssi_data.h (dssi_data): Add control_count,
+ 	control_port_map, control_value_map, sample_rate, and
+ 	control_values fields.
+ 	* native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c
+ 	(DEBUG_DSSI_PROVIDER): New macro.
+ 	(get_port_default): New function.
+ 	(set_control): New function.
+ 	(Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_open_1): Remove
+ 	debug output.  Reformat.  Allocate the control ports and assign
+ 	proper default values.
+ 	(Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_noteOn_1): Use
+ 	JLONG_TO_PTR.
+ 	(Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_noteOff_1): Ditto.
+ 	* gnu/javax/sound/midi/dssi/DSSISynthesizer.java
+ 	(Channel.controlChange): Implement.
+ 	(controlChange_): New native method.
+ 	* include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h: Rebuilt.
+ 	
+ 	* gnu/javax/sound/midi/alsa/AlsaMidiSequencerDevice.java: Make
+ 	instance final.
+ 
+ 2005-10-06  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(determineMaxLength): Avoid NPE by checking the Segment that getText
+ 	returns.  No need to return Math.max (0, maxLineLength) because
+ 	maxLineLength is guaranteed to be 0 or greater.
+ 
+ 2005-10-06  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(determineMaxLength): If maxLineLength is -1 we should return 0.
+ 	(insertOrRemoveUpdate): Avoid NPE by checking the Segment that 
+ 	getText returns.
+ 
+ 2005-10-06  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/imageio/metadata/IIOMetadata.java: Complete.
+ 
+ 2005-10-06  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/BoxView.java
+ 	(paint): Only call paintChild if child allocation is not empty.
+ 	(layout): Don't store the width and height fields here.
+ 	(setSize): Store the width and height fields here.
+ 	* javax/swing/text/CompositeView.java
+ 	(getViewIndexAtPosition): Reworked child view searching.
+ 	(getInsideAllocation): Fixed insets calculation.
+ 	* javax/swing/text/FlowView.java
+ 	(FlowStrategy.layoutRow): Return an offset of -1 if no more child
+ 	views are in the logical view.
+ 	(FlowStrategy.createView): If there are no more child views,
+ 	then return null.
+ 	(LogicalView.getViewIndex): New method. Implements child view
+ 	searching for the LogicalView.
+ 	* javax/swing/text/GlyphView.java
+ 	(DefaultGlyphPainter.getHeight): Use Toolkit FontMetrics instead
+ 	of parent containers FontMetrics.
+ 	(DefaultGlyphPainter.getSpan): Use Toolkit FontMetrics instead
+ 	of parent containers FontMetrics.
+ 	* javax/swing/text/Utilities.java
+ 	(getTabbedTextOffset): Check for 0 in the char array and stop
+ 	there.
+ 	* javax/swing/text/View.java
+ 	(getContainer): If there's no parent, don't throw an Error, instead
+ 	return null as specified.
+ 
+ 2005-10-06  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java: Implemeted locking.
+ 	(insertString): Obtain write lock before altering document.
+ 	(readLock): Implemented.
+ 	(readUnlock): Implemented.
+ 	(remove): Obtain write lock before altering document.
+ 	(render): Implemented.
+ 	(writeLock): Implemented.
+ 	(writeUnlock): Implemented.
+ 	(getCurrentWriter): Implemented.
+ 
+ 2005-10-06  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JLabel.java
+ 	(JLabel): Set alignmentX value to 0.0F.
+ 
+ 2005-10-06  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(startEditing): Should always change the bounds, whenever
+ 	we start editing.
+ 	(paintRow): Fixed location where editing component should
+ 	be drawn. The constant takes care of the space around the 
+ 	icon.
+ 	* javax/swing/JTree.java
+ 	(JTree): Called updateUI first so currentVisiblePath is 
+ 	cached right away. Prevents NPEs. 
+ 
+ 2005-10-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/print/attribute/SetOfIntegerSyntax.java (toString): Wrote.
+ 	(hashCode): Likewise.
+ 	(equals): Likewise.
+ 	(getMembers): Likewise.
+ 	(contains): Fixed boundary condition check.
+ 	(next): Wrote.
+ 	(normalize): Rewrote.
+ 	(SetOfIntegerSyntax): Updated.
+ 	(SetOfIntegerSyntax(String)): New constructor.
+ 	(skipNumber): New method.
+ 	(skipWhitespace): Likewise.
+ 
+ 2005-10-06  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java
+ 	(installUI): Call new hook methods.
+ 	(installDefaults): New hook method.
+ 	(installComponents): New hook method.
+ 	(installListeners): New hook method.
+ 	(installKeyboardActions): New hook method.
+ 	(uninstallUI): New method.
+ 	(uninstallDefaults): New hook method.
+ 	(uninstallComponents): New hook method.
+ 	(uninstallListeners): New hook method.
+ 	(uninstallKeyboardActions): New hook method.
+ 
+ 2005-10-06  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(mousePressed): Shouldn't change x location for leaf.
+ 
+ 2005-10-06  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* configure.ac: Add Qt4 configury bits for OS-X.
+ 
+ 2005-10-05  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paintRow): Fixed indentation.
+ 	(updateCurrentVisiblePath): Added FIXME
+ 	comment.
+ 
+ 2005-10-05  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/BoxView.java
+ 	(baselineLayout): New method.
+ 	(calculateMajorAxisRequirements): Reimplemented to use the
+ 	SizeRequirements utility methods.
+ 	(calculateMinorAxisRequirements): Reimplemented to use the
+ 	SizeRequirements utility methods.
+ 	(layout): Use the new baselineLayout method.
+ 	(layoutMajorAxis): Reimplemented to use the new
+ 	getChildRequirements method.
+ 	(layoutMinorAxis): Reimplemented to use the new
+ 	getChildRequirements method.
+ 	(getChildRequirements): New method.
+ 	(getSpan): New method.
+ 	(getOffset): New method.
+ 	(getAlignment): New method.
+ 	* javax/swing/text/ParagraphView.java
+ 	(Row.getAlignment): New method.	
+ 	(getAlignment): New method.	
+ 	* javax/swing/text/View.java
+ 	(getContainer): Improved error message in assertion a little.
+ 
+ 2005-10-05  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	(installUI): Fixed to call toggleExpandState instead.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getPathForRow): Used currentVisiblePath to get Path.
+ 	(getRowForPath): Used currentVisiblePath to get row.
+ 	(getRowCount): Returned currentVisiblePath length.
+ 	(updateLayoutCacheExpandedNodes): Took out unneeded code.
+ 	(installUI): Fixed to call toggleExpandState instead.
+ 	(getPreferredSize): Made more efficent by using currentVisiblePath.
+ 	(toggleExpandState): Called updateCurrentVisiblePath.
+ 	(getCellLocation): Made more efficent.
+ 	(paintNode): Removed.
+ 	(paintRecursive): Made more efficent, changed paintNode calls to 
+ 	paintRow.
+ 	(getNextVisibleNode): Reimplemented to use currentVisiblePath.
+ 	(getPreviousVisibleNode): Likewise.
+ 	(paintRow): Implemented.
+ 	(updateCurrentVisiblePath): New helper used to cache the current
+ 	visible path.
+ 
+ 2005-10-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Nicolas Geoffray  <nicolas.geoffray@lip6.fr>
+ 	* java/security/AccessController.java
+ 	(doPrivileged(PrivilegedExceptionAction)): If the Exception is a
+ 	Runtime exception, then throw the exception directly, otherwise
+ 	wrap it.
+ 	(doPrivileged(PrivilegedExceptionAction,AccessControlContext)):
+ 	Likewise.
+ 
+ 2005-10-05  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/GapContent.java
+ 	(setPositionsInRange): Changed check for interval end to actually
+ 	check for the position offsets.
+ 	(adjustPositionsInRange): Changed check for interval end to actually
+ 	check for the position offsets.
+ 	(dump): New method for debugging.
+ 	(dumpPositions): New method for debugging.
+ 
+ 2005-10-05  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* m4/acattribute.m4: Added.
+ 	* configure.ac: Added AC_C_ATTRIBUTE.
+ 	* native/fdlibm/java-assert.h: Added missing config.h include, 
+ 	changed comments to C comments.
+ 	* native/jni/java-lang/java_lang_reflect_Array.c: Added missing 
+ 	config.h include.
+ 
+ 2005-10-05  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(insertOrRemoveUpdate): New method.
+ 	(insertUpdate): New method.
+ 	(removeUpdate): New method.
+ 
+ 2005-10-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/JOptionPane.java
+ 	(showInputDialog(Component,Object,String,int,Icon,Object[],Object)):
+ 	Don't cast return value.
+ 	(internalShowInputDialog(Component,Object,String,int,Icon,Object[],
+ 	Object)): Likewise.
+ 
+ 2005-10-05  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * gnu/CORBA/CDR/cdrInput.java,
+         gnu/CORBA/EmptyExceptionHolder.java,
+         gnu/CORBA/ForwardRequestHelper.java,
+         gnu/CORBA/Functional_ORB.java,
+         gnu/CORBA/Poa/gnuServantObject.java,
+         gnu/CORBA/_PolicyImplBase.java,
+         gnu/CORBA/gnuAny.java,
+         gnu/CORBA/universalHolder.java,
+         org/omg/CORBA/CompletionStatus.java,
+         org/omg/CORBA/NameValuePairHelper.java,
+         org/omg/CORBA/ObjectHelper.java,
+         org/omg/CORBA/PolicyHelper.java,
+         org/omg/CORBA/PolicyListHelper.java,
+         org/omg/CORBA/ServiceDetailHelper.java,
+         org/omg/CORBA/StringValueHelper.java,
+         org/omg/CORBA/WStringValueHelper.java,
+         org/omg/CosNaming/BindingHelper.java,
+         org/omg/CosNaming/BindingIteratorHelper.java,
+         org/omg/CosNaming/BindingIteratorPOA.java,
+         org/omg/CosNaming/BindingTypeHelper.java,
+         org/omg/CosNaming/NameComponentHelper.java,
+         org/omg/CosNaming/NameHelper.java,
+         org/omg/CosNaming/NamingContextExtHelper.java,
+         org/omg/CosNaming/NamingContextExtPOA.java,
+         org/omg/CosNaming/NamingContextHelper.java,
+         org/omg/CosNaming/NamingContextPOA.java,
+         org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.java,
+         org/omg/CosNaming/NamingContextPackage/CannotProceedHelper.java,
+         org/omg/CosNaming/NamingContextPackage/InvalidNameHelper.java,
+         org/omg/CosNaming/NamingContextPackage/NotEmptyHelper.java,
+         org/omg/CosNaming/NamingContextPackage/NotFoundHelper.java,
+         org/omg/CosNaming/NamingContextPackage/NotFoundReasonHelper.java,
+         org/omg/CosNaming/_BindingIteratorImplBase.java,
+         org/omg/CosNaming/_NamingContextImplBase.java,
+         org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHelper.java,
+         org/omg/DynamicAny/DynAnyPackage/InvalidValueHelper.java,
+         org/omg/DynamicAny/DynAnyPackage/TypeMismatchHelper.java,
+         org/omg/DynamicAny/DynAnySeqHelper.java,
+         org/omg/DynamicAny/NameDynAnyPairHelper.java,
+         org/omg/DynamicAny/NameDynAnyPairSeqHelper.java,
+         org/omg/DynamicAny/NameValuePairHelper.java,
+         org/omg/DynamicAny/NameValuePairSeqHelper.java,
+         org/omg/IOP/CodecFactoryPackage/UnknownEncodingHelper.java,
+         org/omg/IOP/CodecPackage/FormatMismatchHelper.java,
+         org/omg/IOP/CodecPackage/InvalidTypeForEncodingHelper.java,
+         org/omg/IOP/CodecPackage/TypeMismatchHelper.java,
+         org/omg/IOP/IORHelper.java,
+         org/omg/IOP/MultipleComponentProfileHelper.java,
+         org/omg/IOP/ServiceContextHelper.java,
+         org/omg/IOP/ServiceContextListHelper.java,
+         org/omg/IOP/TaggedComponentHelper.java,
+         org/omg/IOP/TaggedProfileHelper.java,
+         org/omg/PortableInterceptor/ForwardRequestHelper.java,
+         org/omg/PortableInterceptor/InvalidSlotHelper.java,
+         org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHelper.java,
+         org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHelper.java,
+         org/omg/PortableServer/CurrentPackage/NoContextHelper.java,
+         org/omg/PortableServer/ForwardRequestHelper.java,
+         org/omg/PortableServer/IdAssignmentPolicyValue.java,
+         org/omg/PortableServer/IdUniquenessPolicyValue.java,
+         org/omg/PortableServer/ImplicitActivationPolicyValue.java,
+         org/omg/PortableServer/LifespanPolicyValue.java,
+         org/omg/PortableServer/POAManagerPackage/AdapterInactiveHelper.java,
+         org/omg/PortableServer/POAManagerPackage/State.java,
+         org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHelper.java,
+         org/omg/PortableServer/POAPackage/AdapterNonExistentHelper.java,
+         org/omg/PortableServer/POAPackage/InvalidPolicyHelper.java,
+         org/omg/PortableServer/POAPackage/NoServantHelper.java,
+         org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHelper.java,
+         org/omg/PortableServer/POAPackage/ObjectNotActiveHelper.java,
+         org/omg/PortableServer/POAPackage/ServantAlreadyActiveHelper.java,
+         org/omg/PortableServer/POAPackage/ServantNotActiveHelper.java,
+         org/omg/PortableServer/POAPackage/WrongAdapterHelper.java,
+         org/omg/PortableServer/POAPackage/WrongPolicyHelper.java,
+         org/omg/PortableServer/RequestProcessingPolicyValue.java,
+         org/omg/PortableServer/Servant.java,
+         org/omg/PortableServer/ServantLocatorHelper.java,
+         org/omg/PortableServer/ServantRetentionPolicyValue.java,
+         org/omg/PortableServer/ThreadPolicyValue.java: Added minor codes for BAD_PARAM and NO_RESOURCES.
+         * gnu/CORBA/Minor.java: Introduces new minor codes.
+         * org/omg/CORBA/BAD_OPERATION.java,
+         org/omg/CORBA/MARSHAL.java,
+         org/omg/CORBA/NO_RESOURCES.java: Documentation update.
+ 
+ 2005-10-05  Stuart Ballard  <stuart.a.ballard@gmail.com>
+ 
+ 	* java/rmi/LoaderHandler.java (packagePrefix): Match Sun's value.
+ 	* java/rmi/RemoteRef.java (packagePrefix): Likewise.
+ 	* java/rmi/RemoteObject.java (readObject): Hardcode the GNU package
+ 	prefix.
+ 
+ 2005-10-05  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	(remove): If removing content returns an UndoableEdit, then add an 
+ 	ElementEdit to the DocumentEvent before firing.
+ 	* javax/swing/text/GapContent.java:
+ 	(UndoRemove): New class to implement UndoableEdit for remove operation.
+ 	(remove): Return an UndoableEdit instead of null.
+ 
+ 2005-10-05  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/LabelView.java
+ 	(LabelView): Implemented the constructor.
+ 	(setPropertiesFromAttributes): New method.
+ 	(changedUpdate): New method.
+ 	(getBackground): New method.
+ 	(setBackground): New method.
+ 	(getForeground): New method.
+ 	(getFont): New method.
+ 	(getFontMetrics): New method.
+ 	(isUnderline): New method.
+ 	(setUnderline): New method.
+ 	(isSubscript): New method.
+ 	(setSubscript): New method.
+ 	(isSuperscript): New method.
+ 	(setSuperscript): New method.
+ 	(isStrikeThrough): New method.
+ 	(setStrikeThrough): New method.
+ 
+ 2005-10-05  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/table/JTableHeader.java
+ 	(accessibleContext): Removed unneeded field. The protected
+ 	field with the same name should be used instead.
+ 	(JTableHeader): Moved field initialization to new method
+ 	initializeLocalVars().
+ 	(setColumnModel): Add and remove this to the old and new model.
+ 	(columnAdded): New listener method.
+ 	(columnMarginChanged): New listener method.
+ 	(columnMoved): New listener method.
+ 	(columnRemoved): New listener method.
+ 	(columnSelectionChanged): New listener method.
+ 	(resizeAndRepaint): New method.
+ 	(initializeLocalVars): New method.
+ 
+ 2005-10-04  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java: Added API docs all
+ 	over.
+ 
+ 2005-10-04  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	(insertString): If inserting a string into the Content returns an 
+ 	UndoableEdit, then add an ElementEdit to the DocumentEvent before 
+ 	firing.
+ 	(remove): Don't fire a removeUpdate unless some content was actually
+ 	removed.
+ 	* javax/swing/text/GapContent.java:
+ 	(UndoInsertString): New class to implement UndoableEdit functions.
+ 	(insertString): Return an UndoableEdit instead of null.  Also use 
+ 	locally calculated length of String rather than calculating again.
+ 	* javax/swing/text/JTextComponent.java:
+ 	(setText): If the Document is an AbstractDocument this should pass 
+ 	through AbstractDocument.replace rather than calling remove and insert.
+ 	* javax/swing/text/PlainView.java:
+ 	(determineMaxLength): Keep track of which line was the longest as well
+ 	as the length of it.  We'll need this to know when the longest line is
+ 	removed and we need to redetermine the longest line.
+ 
+ 2005-10-04  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/imageio/ImageWriter.java
+ 	(processWarningOccurred(int,String,String)): New method.
+ 	* javax/imageio/ImageReader.java
+ 	(processWarningOccurred(String,String)): New method.
+ 
+ 2005-10-04  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/imageio/ImageReader.java (getDestination): Throw
+ 	IIOException, not IOException.
+ 	* javax/imageio/ImageTypeSpecifier.java
+ 	(createGrayscale(int,int,boolean)): Rename from createGrayScale.
+ 	(createGrayscale(int,int,boolean,boolean)): Likewise.
+ 	(createIndexed): Rename from createIndex.
+ 
+ 2005-10-04  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         *  doc/www.gnu.org/corba.wml: 
+         Link to  http://doc.omg.org/vendor-tags. 
+ 
+ 2005-10-04  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * gnu/CORBA/Minor.java: New file.
+         * gnu/CORBA/CDR/IDLTypeHelper.java,
+         gnu/CORBA/CDR/UnknownExceptionCtxHandler.java,
+         gnu/CORBA/CDR/Vio.java,
+         gnu/CORBA/CDR/cdrInput.java,
+         gnu/CORBA/CDR/cdrOutput.java,
+         gnu/CORBA/CDR/gnuRuntime.java,
+         gnu/CORBA/CDR/noHeaderInput.java,
+         gnu/CORBA/DynAn/gnuDynValue.java,
+         gnu/CORBA/GIOP/CloseMessage.java,
+         gnu/CORBA/GIOP/ErrorMessage.java,
+         gnu/CORBA/GIOP/MessageHeader.java,
+         gnu/CORBA/GIOP/v1_2/RequestHeader.java,
+         gnu/CORBA/IOR.java,
+         gnu/CORBA/Poa/ForwardedServant.java,
+         gnu/CORBA/Version.java,
+         gnu/CORBA/cdrEncapsCodec.java,
+         gnu/CORBA/gnuAny.java,
+         gnu/CORBA/gnuRequest.java,
+         gnu/CORBA/streamReadyHolder.java,
+         gnu/CORBA/universalHolder.java,
+         gnu/javax/rmi/CORBA/UtilDelegateImpl.java,
+         gnu/javax/rmi/CORBA/corbaObjectOutput.java,
+         gnu/javax/rmi/CORBA/gnuRmiUtil.java,
+         org/omg/CORBA/StringValueHelper.java,
+         org/omg/CORBA/StructMemberHelper.java,
+         org/omg/CORBA/UnionMemberHelper.java,
+         org/omg/CORBA/ValueMemberHelper.java,
+         org/omg/CORBA/WStringValueHelper.java,
+         org/omg/CORBA/_IDLTypeStub.java,
+         org/omg/DynamicAny/DynAnyFactoryHelper.java,
+         org/omg/DynamicAny/_DynAnyFactoryStub.java,
+         org/omg/IOP/TaggedComponentHelper.java,
+         org/omg/IOP/TaggedProfileHelper.java,
+         org/omg/PortableInterceptor/CurrentHelper.java,
+         org/omg/PortableServer/POAHelper.java,
+         org/omg/PortableServer/ServantActivatorHelper.java,
+         org/omg/PortableServer/ServantLocatorHelper.java:
+         Initialising minor codes for MARSHAL.
+         * org/omg/CORBA/SystemException.java: Documentation update and
+         add minor code to the exception message.
+         * org/omg/CORBA/MARSHAL.java: Documentation update.
+ 
+ 2005-10-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java (paintBorder): Check
+ 	whether Component is JTextComponent.
+ 
+ 2005-10-04  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* javax/imageio/ImageWriter.java (availableLocales, locale,
+ 	originatingProvider, output, progressListeners, warningListeners,
+ 	warningLocales): Initialize.
+ 	(addIIOWriteProgressListener): Check progressListeners against null
+ 	to avoid NPE. Create new ArrayList if progressListeners is null.
+ 	(addIIOWriteWarningListener): Likewise for warningListeners.
+ 	(processImageComplete): Check progressListeners against null to
+ 	avoid NPE. 
+ 	(processImageProgress): Likewise.
+ 	(processImageStarted): Likewise.
+ 	(processThumbnailComplete): Likewise.
+ 	(processThumbnailProgress): Likewise.
+ 	(processThumbnailStarted): Likewise.
+ 	(processWarningOccurred): Likewise for warningListeners.
+ 	(processWriteAborted): Likewise for progressListeners.
+ 	(removeAllIIOWriteProgressListeners): Likewise.
+ 	(removeAllIIOWriteWarningListeners): Likewise.
+ 	(removeIIOWriteProgressListener): Likewise.
+ 	(removeIIOWriteWarningListener): Likewise for warningListeners.
+ 
+ 	* javax/imageio/ImageReader.java (addIIOReadProgressListener): Check
+ 	progressListeners against null to avoid NPE. Create new ArrayList
+ 	if progressListeners is null.
+ 	(addIIOReadUpdateListener): Likewise for updateListeners.
+ 	(addIIOReadWarningListener): Likewise for warningListeners.
+ 	(processImageComplete):  Check progressListeners against null to
+ 	avoid NPE.
+ 	(processImageProgress): Likewise.
+ 	(processImageStarted): Likewise.
+ 	(processImageUpdate): Likewise for updateListeners.
+ 	(processPassComplete): Likewise.
+ 	(processPassStarted): Likewise.
+ 	(processReadAborted): Likewise for progressListeners.
+ 	(processSequenceComplete): Likewise.
+ 	(processSequenceStarted): Likewise.
+ 	(processThumbnailComplete): Likewise.
+ 	(processThumbnailPassComplete): Likewise for updateListeners.
+ 	(processThumbnailPassStarted): Likewise.
+ 	(processThumbnailProgress): Likewise for progressListeners.
+ 	(processThumbnailStarted): Likewise.
+ 	(processThumbnailUpdate): Likewise for updateListeners.
+ 	(processWarningOccurred): Likewise for warningListeners.
+ 	(removeIIOReadProgressListener): Likewise for progressListeners.
+ 	(removeIIOReadUpdateListener): Likewise for updateListeners.
+ 	(removeIIOReadWarningListener): Likewise for warningListeners.
+ 
+ 2005-10-04  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/metal/MetalToolTipUI.java
+ 	(paint): Added space around the toolTip's accelerator.
+ 	(fetchAcceleratorString): Added code to get mnemonic for
+ 	JMenuItem if it does not have an accelerator.
+ 
+ 2005-10-04  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultCaret.java
+ 	(repaint): Adjust repaint rectangle.
+ 	(setVisible): Only repaint if the visible property actually changed.
+ 
+ 2005-10-04  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/JTextComponent.java: Reformatted file.
+ 
+ 2005-10-04  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Fixes Bug #24080
+ 	* javax/swing/SizeRequirements.java
+ 	(adjustGreater): Added check to prevent overflow.
+ 
+ 2005-10-04  David Gilbert  <david.gilbert@object-refinery.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java
+ 	(accText): removed,
+ 	(accDeliminator): removed,
+ 	(accFont): removed,
+ 	(accFore): removed,
+ 	(getPreferredSize): removed accelerator code (now in MetalToolTipUI),
+ 	(getAcceleratorText): removed (equivalent is now in MetalToolTipUI),
+ 	(paint): removed accelerator painting,
+ 	* javax/swing/plaf/metal/MetalToolTipUI.java
+ 	(padSpaceBetweenStrings): new field,
+ 	(MetalToolTipUI): initialise defaults,
+ 	(getAcceleratorString): new method,
+ 	(installUI): new method,
+ 	(uninstallUI): new method,
+ 	(isAcceleratorHidden): new method,
+ 	(getPreferredSize): new method,
+ 	(paint): new method,
+ 	(fetchAcceleratorString): new private method,
+ 	(acceleratorToString): new private method,
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkButton): set tool tip.
+ 
+ 2005-10-04  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Component.java
+ 	(getFont): Fall back to peer.getGraphics().getFont() if no font
+ 	is found.
+ 	(getGraphics): Set font here. This avoids a loop in the above
+ 	fallback.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(GdkGraphics): Don't initialize font here. This would cause a
+ 	loop in the above fallback.
+ 
+ 2005-10-04  Anthony Green  <green@redhat.com>
+ 
+ 	* native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c 
+ 	(process): Add comments.  Remove unused gettimeofday call.
+ 	(Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_open_1): Remove
+ 	debug output.  Add comments.
+ 	(Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_noteOn_1,
+ 	Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_noteOff_1): Add
+ 	comments.  Remove bogus __attribute__((unused)).
+ 	* native/jni/midi-dssi/dssi_data.h (JLONG_TO_PTR, PTR_TO_JLONG): 
+ 	Document helper macros.
+ 	(dssi_data): Document.
+ 	* native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.c:
+ 	Formatting fixes.
+ 	* native/jni/midi-alsa/gnu_javax_sound_midi_alsa_AlsaPortDevice.c
+ 	(Java_gnu_javax_sound_midi_alsa_AlsaPortDevice_run_1receiver_1thread_1):
+ 	Remove debugging output.
+ 
+ 2005-10-04  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(AbstractButton): Set text to "" here.
+ 
+ 2005-10-04  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (clearRect): Check bg
+ 	against null to avoid NPE.
+ 
+ 2005-10-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/awt/peer/qt/QtToolkit.java (initToolkit): Use Configuration
+ 	to see if library should be loaded.
+ 
+ 2005-10-03  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainView.java:
+ 	(maxLineLength): New variable to cache the length of the longest line.
+ 	(determineMaxLength): New implementation method.
+ 	(getPreferredSpan): Call determine max length instead of calculating
+ 	it here.
+ 
+ 2005-10-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/image/ComponentSampleModel.java (numBands): Updated
+ 	javadoc.
+ 	(ComponentSampleModel): Set numBands.
+ 	* java/awt/image/SampleModel.java (numBands): Now protected.
+ 
+ 2005-10-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Polygon.java (evaluateCrossings): Removed @see.
+ 	* java/awt/image/ImageConsumer.java (SINGLEPASS): Javadoc fix.
+ 	* java/awt/Image.java (getGraphics): Removed @see.
+ 	* java/awt/MenuComponent.java (setEnabled): Javadoc fix.
+ 	(setBackground): Likewise.
+ 	* java/awt/event/MouseEvent.java: Added import for javadoc.
+ 	* java/awt/im/spi/InputMethodDescriptor.java: Added import for javadoc.
+ 	(getAvailableLocales): Javadoc fix.
+ 	* java/awt/KeyboardFocusManager.java: Added import for javadoc.
+ 	(defaultPolicy): Javadoc fix.
+ 	(setGlobalObject): Javadoc fixes.
+ 	(getObject): Likewise.
+ 	(getGlobalObject): Likewise.
+ 	* java/awt/im/InputMethodRequests.java: Added imports for javadoc.
+ 	* java/awt/im/spi/InputMethodContext.java: Added imports for javadoc.
+ 	(enableClientWindowNotification): Javadoc fix.
+ 	* java/awt/im/spi/InputMethod.java: Added imports for javadoc.
+ 	(removeNotify): Javadoc fix.
+ 	(notifyClientWindowChange): Likewise.
+ 	* java/awt/im/InputContext.java: Added import for javadoc.
+ 	* java/awt/image/ColorModel.java (getDataElements): Javadoc fix.
+ 	* java/awt/geom/Area.java (recursiveSubdivide): Javadoc fix.
+ 	* java/awt/geom/GeneralPath.java (GeneralPathIterator): Javadoc fix.
+ 	* java/awt/im/InputMethodHighlight.java: Javadoc fixes.  Added
+ 	imports.
+ 	* java/awt/color/ICC_Profile.java (getInstance): Javadoc fix.
+ 	(getInstance): Likewise.
+ 	* java/awt/EventQueue.java: Organized imports.
+ 	* java/awt/image/BufferedImage.java: Organized imports.
+ 	* java/awt/image/PackedColorModel.java (initMasks): Javadoc fix.
+ 	* java/awt/GraphicsConfiguration.java (createCompatibleVolatileImage):
+ 	Javadoc fixes.
+ 	* java/awt/DefaultKeyboardFocusManager.java (delayRequests): Javadoc
+ 	fix.
+ 	* java/awt/ColorPaintContext.java (ColorPaintContext): Javadoc fix.
+ 
+ 2005-10-03  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JOptionPane.java
+ 	(getInputValue): If the option selected is 'Cancel', then
+ 	the input value is set to null.
+ 	(showInternalConfirmDialog): Added check to prevent NPE.
+ 	(showInternalConfirmDialog): Likewise.
+ 	(showInternalConfirmDialog): Likewise.
+ 	(showInternalConfirmDialog): Likewise.
+ 	(showInternalOptionDialog): Likewise.
+ 	(showOptionDialog): Likewise.
+ 
+ 2005-10-03  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * javax/rmi/CORBA/ValueHandler.java (getRunTimeCodeBase): 
+         Fixed return type.
+         * gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java 
+         (getRunTimeCodeBase): Implemented.
+ 
+ 2005-10-03  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JMenuItem.java
+ 	(init): Set horizontalTextPosition to TRAILING, instead of 
+ 	LEFT. Icons are drawn in the correct spot now.
+ 
+ 2005-10-03  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * doc/www.gnu.org/corba.wml: New file. 
+ 
+ 2005-10-03  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(layoutLabel): place text to the right of the icon, if there is one.
+ 
+ 2005-10-03  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalComboBoxButton.java
+ 	(paintComponent): reposition text and truncate if necessary,
+ 	(truncateText): private utility method.
+ 
+ 2005-10-03  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+          
+         * NEWS: Added entry about Classpath VMCID and IIOP. 
+          
+ 2005-10-02  Anthony Green  <green@redhat.com>
+ 
+ 	* native/jni/Makefile.am: Maybe build ALSA code.
+ 	Maybe build DSSI code.
+ 
+ 	* gnu/javax/sound/midi/alsa/AlsaPortDevice.java,
+ 	gnu/javax/sound/midi/alsa/AlsaOutputPortDevice.java
+ 	gnu/javax/sound/midi/alsa/AlsaInputPortDevice.java
+ 	gnu/javax/sound/midi/alsa/AlsaMidiDeviceProvider.java
+ 	gnu/javax/sound/midi/alsa/AlsaMidiSequencerDevice.java: Rebuilt.
+ 	native/jni/midi-alsa/gnu_javax_sound_midi_alsa_AlsaPortDevice.c,
+ 	native/jni/midi-alsa/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.c,
+ 	native/jni/midi-alsa/gnu_javax_sound_midi_alsa_AlsaSequencerDevice.c,
+ 	native/jni/midi-dssi/dssi_data.h, native/jni/midi-dssi/Makefile.am, 
+ 	native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.c
+ 	native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c,
+ 	native/jni/midi-alsa/Makefile.am: New files.
+ 
+ 	* include/Makefile.am: Add sound header files.
+ 	* include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h,
+ 	include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h
+ 	include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h
+ 	include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h,
+ 	include/gnu_javax_sound_midi_alsa_AlsaSequencerDevice.h: New
+ 	files.
+ 	
+ 	* configure.ac (AC_CONFIG_FILES): Add
+ 	native/jni/midi-alsa/Makefile, native/jni/midi-dssi/Makefile.
+ 
+ 2005-10-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/Font.java (peer): Make field transient.
+ 	(Font(String,int,int)): Explicitly set name field.
+ 	(Font(String,Map)): Likewise.
+ 	(readObject): New private method.
+ 
+ 2005-10-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectOutputStream.java (writeObject): Add defining class
+ 	to NotSerializableException.
+ 
+ 2005-10-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLStreamHandler.java (hostsEqual): Javadoc fix.
+ 	* java/net/URLClassLoader.java (definePackage): Javadoc fixes.
+ 	* java/net/Inet4Address.java (Inet4Address): Javadoc fix.
+ 	* java/net/Socket.java (getLocalAddress): Javadoc fix.
+ 	* java/net/DatagramSocket.java (connect): Javadoc fix.
+ 
+ 2005-10-02  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * gnu/javax/rmi/PortableServer.java,
+         gnu/javax/rmi/CORBA/ValueHandlerImpl.java,
+         javax/rmi/BAD_OPERATION.java,
+         javax/rmi/ORB.java,
+         javax/rmi/CORBA/ObjectImpl.java,
+         javax/rmi/CORBA/SystemException.java: Deleted. 
+ 
+ 2005-10-02  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/javax/rmi/CORBA/corbaObjectOutput.java (main):
+ 	Removed method.
+ 
+ 2005-10-02  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/javax/crypto/DiffieHellmanImpl.java (random): removed.
+ 	(<init>): removed 'random' initialization.
+ 	(engineDoPhase): use params from the incoming key; generate the
+ 	intermediate result from the incoming key, not a random one; only
+ 	support one-phase DH, for now.
+ 	(engineInit): removed 'random' initialization.
+ 
+ 2005-10-02  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* gnu/xml/stream/XMLOutputFactoryImpl.java:
+ 	(setProperty): Added 'else'.
+ 
+ 2005-10-02  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * gnu/CORBA/CDR/Vio.java,
+         gnu/CORBA/CDR/cdrBufOutput.java,
+         gnu/CORBA/CDR/gnuRuntime.java,
+         gnu/javax/rmi/CORBA/corbaObjectInput.java,
+         gnu/javax/rmi/CORBA/dwoTester.java,
+         gnu/javax/rmi/CORBA/gnuRmiUtil.java: Corrected copyright 
+         header identation.
+ 
+ 2005-10-02  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/CDR/ArrayValueHelper.java,
+ 	gnu/CORBA/CDR/IDLTypeHelper.java,
+ 	gnu/CORBA/CDR/UnknownExceptionCtxHandler.java,
+ 	gnu/CORBA/CDR/gnuRuntime.java,
+ 	gnu/CORBA/CDR/gnuValueStream.java,
+ 	gnu/CORBA/CDR/VMVio.java,
+ 	gnu/CORBA/IorProvider.java,
+ 	gnu/javax/rmi/CORBA/TieTargetRecord.java,
+ 	gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/corbaObjectInput.java,
+ 	gnu/javax/rmi/CORBA/corbaObjectOutput.java,
+ 	gnu/javax/rmi/CORBA/dwoTester.java,
+ 	gnu/javax/rmi/CORBA/gnuRmiUtil.java: New files.
+ 	* gnu/CORBA/CDR/aligningInputStream.java,
+ 	gnu/CORBA/CDR/aligningOutputStream.java:
+ 	gnu/CORBA/CDR/Vio.java,
+ 	gnu/CORBA/CDR/cdrBufInput.java,
+ 	gnu/CORBA/CDR/cdrBufOutput.java,
+ 	gnu/CORBA/CDR/cdrInput.java,
+ 	gnu/CORBA/CDR/cdrOutput.java,
+ 	gnu/CORBA/CDR/noHeaderInput.java,
+ 	gnu/CORBA/Functional_ORB.java,
+ 	gnu/CORBA/GIOP/MessageHeader.java,
+ 	gnu/CORBA/GIOP/ServiceContext.java,
+ 	gnu/CORBA/IOR_Delegate.java,
+ 	gnu/CORBA/IOR_contructed_object.java,
+ 	gnu/CORBA/Interceptor/Registrator.java,
+ 	gnu/CORBA/NamingService/NameParser.java,
+ 	gnu/CORBA/NamingService/NamingServiceTransient.java,
+ 	gnu/CORBA/ObjectCreator.java,
+ 	gnu/CORBA/Poa/LocalDelegate.java,
+ 	gnu/CORBA/Poa/ORB_1_4.java,
+ 	gnu/CORBA/Poa/gnuPOA.java,
+ 	gnu/CORBA/Poa/gnuServantObject.java,
+ 	gnu/CORBA/Simple_delegate.java,
+ 	gnu/CORBA/gnuAny.java,
+ 	gnu/CORBA/gnuRequest.java,
+ 	org/omg/CORBA/OMGVMCID.java,
+ 	org/omg/CORBA/StringValueHelper.java,
+ 	org/omg/CORBA/SystemException.java,
+ 	org/omg/CORBA/WStringValueHelper.java,
+ 	org/omg/CORBA/portable/ObjectImpl.java,
+ 	org/omg/CORBA_2_3/ORB.java,
+ 	org/omg/CORBA_2_3/portable/InputStream.java,
+ 	org/omg/CORBA_2_3/portable/OutputStream.java: Modified to support
+ 	RMI over CORBA mechanism.
+ 	* gnu/javax/rmi/CORBA/DelegateFactory.java,
+ 	gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/StubDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/UtilDelegateImpl.java,
+ 	javax/rmi/CORBA/ClassDesc.java,
+ 	javax/rmi/CORBA/PortableRemoteObjectDelegate.java,
+ 	javax/rmi/CORBA/Stub.java,
+ 	javax/rmi/CORBA/StubDelegate.java,
+ 	javax/rmi/CORBA/Tie.java,
+ 	javax/rmi/CORBA/Util.java,
+ 	javax/rmi/CORBA/UtilDelegate.java,
+ 	javax/rmi/CORBA/ValueHandler.java,
+ 	javax/rmi/CORBA/package.html,
+ 	javax/rmi/PortableRemoteObject.java,
+ 	javax/rmi/package.html: New files (replacing).
+ 	* gnu/javax/rmi/CORBA/ValueHandlerImpl.java,
+ 	gnu/javax/rmi/PortableServer.java: Modified to keep the code
+ 	compileable between subsequent patches. 
+ 
+ 2005-10-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/imageio/ImageIO.java: Fix compilation problems.
+ 
+ 2005-10-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java
+ 	(MetalScrollBarPropertyChangeHandler.propertyChange):
+ 	Only set free standing when increase or decrease button isn't null.
+ 	If not FREE_STANDING_PROP pass up event to super class.
+ 
+ 2005-10-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Workarounds for bug #24166
+ 	* javax/imageio/ImageIO.java (filter): Catch IOException in
+ 	canDecodeInput().
+ 	(TranscoderFilter.WriterObjectFilter): Renamed to TranscoderFilter.
+ 	(getImageReadersBySuffix): Use ReaderObjectFilter, not the nonexisting
+ 	ReaderSuffixFilter.
+ 	(createImageInputStream): Test with Class.isAssignableFrom() and for
+ 	foundSpi == null.
+ 	(createImageOutputStream): Likewise and use output, not input.
+ 	(getImageReader): Always return null for now.
+ 	(getImageReaders): Use input, not object.
+ 	(getImageWriters): Rename formatName to format and create a
+ 	WriterObjectFilter with type and format not just object.
+ 	(getImageWriter): Always return null for now.
+ 	(getImageTranscoders): Create TranscoderFilter not ImageTranscoderSpi
+ 	instance.
+ 
+ 2005-10-02  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java: API doc updates.
+ 
+ 2005-10-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/imageio/IIOException.java: Document.
+ 	* javax/imageio/IIOImage.java: Document.
+ 	* javax/imageio/IIOParam.java: Complete and document.
+ 	* javax/imageio/IIOParamController.java: Document.
+ 	* javax/imageio/ImageIO.java: Complete and document.
+ 	* javax/imageio/ImageReader.java: Complete and document.
+ 	* javax/imageio/ImageTranscoder.java: Document.
+ 	* javax/imageio/ImageTypeSpecifier.java: Complete and document.
+ 	* javax/imageio/ImageWriter.java: Complete and document.
+ 	* javax/imageio/package.html: Write.
+ 
+ 2005-10-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/23890:
+ 	* java/util/Calendar.java (equals): Include other calendar 
+ 	attributes.
+ 	(hashCode): Updated.
+ 	* java/util/GregorianCalendar.java (hashCode): New method.
+ 	(equals): Use super.equals().
+ 
+ 2005-10-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/image/ComponentSampleModel.java (numBands): Shadow
+ 	package-private field in parent class with this protected field.
+ 	* java/awt/image/SampleModel.java (numBands): Make field
+ 	package-private.
+ 
+ 2005-10-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/23880:
+ 	* gnu/java/security/x509/ext/Extension.java (Value.hashCode): New
+ 	method.
+ 	* gnu/java/security/der/BitString.java (hashCode): New method.
+ 	* javax/security/auth/x500/X500Principal.java (hashCode): New method.
+ 
+ 2005-10-01  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URLClassLoader.java
+ 	(Resource.name): Removed field.
+ 	(JarURLResource.name): Added field.
+ 	(FileResource.getURL): Use File.toURL() instead of doing it in
+ 	a way that breaks on Windows.
+ 
+ 2005-10-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/include/layout.wml: Point Tasks menu item to
+ 	mediation wiki.
+ 	* doc/www.gnu.org/tasks.wml: Redirect to mediation wiki.
+ 
+ 2005-10-01  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixelsUnlocked):
+ 	Call cairo_pattern_set_extend after gr->pattern has been set and checked
+ 	versus NULL.
+ 
+ 2005-09-30  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTextPane.java
+ 	(replaceSelection): Don't update the caret position here.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(DocumentHandler.insertUpdate): Likewise.
+ 	(DocumentHandler.removeUpdate): Likewise.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(DocumentHandler): New inner class. Handles caret position updates.
+ 	(PropertyChangeHandler): New inner class. (Un)installs document
+ 	listener when the text component's document changes.
+ 	(install): Install the new listeners on the text component.
+ 	(deinstall): Deinstall the new listeners on the text component.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(DefaultKeyTypedAction.actionPerformed): Don't update the caret
+ 	position here.
+ 
+ 2005-09-30  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(AbstractButton): updateUI should be called after
+ 	everything is initialized, so everything is revalidated.
+ 	* javax/swing/JMenuItem.java
+ 	(JMenuItem): Added call to init so model is set.
+ 	(JMenuItem): Likewise.
+ 	* javax/swing/JOptionPane.java
+ 	(createDialog): Removed invalidate and repaint calls.
+ 	(JOptionPane): Likewise.
+ 	* javax/swing/JPopupMenu.java
+ 	(setVisible): Changed size to be the preferred size.
+ 
+ 2005-09-30  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(paintTabArea): Added check to adjust runCount if
+ 	it is less that tabCount.
+ 
+ 2005-09-30  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/PlainDocument.java:
+ 	(removeUpdate): Fixed length of new LeafElement and off-by-one error
+ 	in call to rootElement.replace().
+ 
+ 2005-09-30  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(propertyChange): No reason to reset the layout manager here.
+ 	(setDividerLocation): Changed to check right component, not left.
+ 	Also, updated the location to a valid spot.
+ 
+ 2005-09-30  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/SliderDemo.java:
+ 	New file.
+ 
+ 2005-09-30  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(setActionCommand): Added check to prevent NPE.
+ 	(getMnemonic): Likewise.
+ 	(setMnemonic): Likewise.
+ 	(setSelected): Likewise.
+ 	(isSelected): Likewise.
+ 	(setEnabled): Likewise.
+ 	(doClick): Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(paintMenuItem): Added check to prevent NPE.
+ 	(paintText): Likewise.
+ 
+ 2005-09-30  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(propertyChange): Added call to reset the layout manager
+ 	whenever the size of the divider is changed.
+ 	(setDividerLocation): Added adjustment to container
+ 	sizes if the divider goes over the bottom/right side.
+ 	Also, fixed the size of the right/top component.
+ 	(validLocation): Added check for min/max location returned.
+ 
+ 2005-09-30  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/StyleContext.java:
+ 	(SmallAttributeSet.getAttribute): If the attribute we're looking for is
+ 	ResolveAttribute, don't try to check the resolve parent, because this 
+ 	will cause an infinite loop.
+ 
+ 2005-09-30  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(accessibleContext): Removed unneeded field. This is already
+ 	declared in JComponent.
+ 	* javax/swing/Box.java
+ 	(accessibleContext): Removed unneeded field. This is already
+ 	declared in JComponent.
+ 	* javax/swing/JFrame.java
+ 	(EXIT_ON_CLOSE): New constant field.
+ 
+ 2005-09-30  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/GapContent.java:
+ 	(shiftEnd): Call adjustPositionsInRange rather than getPositionsInRange
+ 	and then iterating over the set and adjusting them.
+ 	(shiftGap): Likewise.
+ 	(shiftGapStartDown): Call setPositionsInRange rather than
+ 	getPositionsInRange and then iterating over the set to set each
+ 	Position.
+ 	(shiftGapEndUp): Likewise.
+ 	(setPositionsInRange): New implementation method.
+ 	(adjustPositionsInRange): New implementation method.
+ 	(resetMarksAtZero): Call setPositionsInRange rather than 
+ 	getPositionsInRange and then iterating over the set to set each
+ 	Position.
+ 
+ 2005-09-30  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(getScrollableUnitIncrement): Respect the direction argument.
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(VSBChangeListener.stateChanged): Compare ypos with viewPosition.y
+ 	instead of viewPosition.x.
+ 	(ViewportChangeHandler.stateChanged): Call
+ 	syncScrollPaneWithViewport in all cases, not only when the
+ 	extents have changed.
+ 	(syncScrollPaneWithViewport): Also sync the maximum and value
+ 	properties of the scrollbar models with the viewport.
+ 
+ 2005-09-30  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java
+ 	(paint): Only call paintFocus if button is actually focused.
+ 
+ 2005-09-30  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Fixes Bug #24115
+ 	* javax/swing/AbstractButton.java
+ 	(AbstractButton): Don't call init() from here. Moved some
+ 	initialization code from init() to the constructor.
+ 	(init): Moved most of the initialization code to the constructor.
+ 	* javax/swing/JCheckBox.java
+ 	(JCheckBox()): call this(..) instead of super(..). Don't call init()
+ 	here, this is already performed by the JToggleButton constructor.
+ 	(JCheckBox(Action)): Don't call init() here, this is already
+ 	performed by the JToggleButton constructor.
+ 	(JCheckBox(Icon)): call this(..) instead of super(..). Don't call
+ 	init() here, this is already performed by the JToggleButton
+ 	constructor.
+ 	(JCheckBox(Icon, boolean)): Likewise.
+ 	(JCheckBox(String)): Likewise.
+ 	(JCheckBox(String, boolean)): Likewise.
+ 	(JCheckBox(String, Icon)): Likewise.
+ 	(JCheckBox(String, Icon, boolean)): Don' call init here. This is
+ 	already performed by the JToggleButton constructor. Set the
+ 	correct defaults for horizontalAlignment and borderPainted
+ 	properties here.
+ 	* javax/swing/JRadioButton.java
+ 	(JRadioButton(String, Icon, boolean)): Use acccessor methods
+ 	instead of directly manipulating package private fields of
+ 	AbstractButton.
+ 	* javax/swing/JToggleButton.java
+ 	(JToggleButton(String, Icon, boolean)): Set correct value for the
+ 	alignmentX property.
+ 
+ 2005-09-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/JFileChooser.java: Import AccessibleRole.
+ 
+ 2005-09-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(cp_gtk_graphics2d_init_jni): Check ExceptionOccured after running
+ 	class initializer.
+ 
+ 2005-09-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java (initFont): New static
+ 	method.
+ 	(GdkFontMetrics): Use initFont() in super() call.
+ 
+ 2005-09-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkTextLayout_getOutline): Initialize all
+ 	fields of the FT_Outline_Funcs ftCallbacks struct.
+ 	(_moveTo): Takes an void * as argument.
+ 	(_lineTo): Likewise.
+ 	(_quadTo): Likewise.
+ 	(_curveTo): Likewise.
+ 
+ 2005-09-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* javax/swing/JFileChooser.java:
+ 	(getAccessibleContext): Implement.
+ 	(AccessibleJFileChooser): Inner class implemented.
+ 	
+ 2005-09-30  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	Fixes Bug 24122
+ 	* gnu/xml/transform/TransformerImpl.java
+ 	(writeStreamResult): Added call to connection.setDoInput(false).
+ 
+ 2005-09-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLConnection.java (setDoInput): Javadoc fix.
+ 	(setDoOutput): Likewise.
+ 	(setContentHandlerFactory): Likewise.
+ 	(setFileNameMap): Likewise.
+ 
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(installUI): Call the new installKeyboardActions hook.
+ 	(uninstallUI): Call the new uninstallKeyboardActions hook.
+ 	(installKeyboardActions): New hook method.
+ 	(uninstallKeyboardActions): New hook method.
+ 
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(ActionScroller.ActionScroller): Added constructor.
+ 
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	(KeyHandler): New inner class.
+ 	(createKeyListener): New method.
+ 
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getLeftChildIndent): Fixed method signature.
+ 	(drawCentered): Fixed method signature.
+ 
+ 2005-09-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/23381:
+ 	* java/beans/PropertyDescriptor.java (hashCode): New method.
+ 
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/OverlayLayout.java: Added API docs all over.
+ 
+ 2005-09-29  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/ButtonDemo.java
+ 	(createContent): add a close button,
+ 	(actionPerformed): perform close action,
+ 	* examples/gnu/classpath/examples/swing/ComboBoxDemo.java
+ 	(createContent): add a close button,
+ 	(actionPerformed): perform close action.
+ 
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(getAlignedSizeRequirements): Fixed calculation of preferred and
+ 	maximum size as well as the alignment.
+ 
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Fixes Bug #23851
+ 	* javax/swing/OverlayLayout.java
+ 	(OverlayLayout): Implemented.
+ 	(invalidateLayout): Implemented.
+ 	(addLayoutComponent(Component, Object)): Implemented.
+ 	(addLayoutComponent(String, Component)): Implemented.
+ 	(removeLayoutComponent): Implemented.
+ 	(preferredLayoutSize): Implemented.
+ 	(minimumLayoutSize): Implemented.
+ 	(maximumLayoutSize): Implemented.
+ 	(getLayoutAlignmentX): Implemented.
+ 	(getLayoutAlignmentY): Implemented.
+ 	(layoutContainer): Implemented.
+ 	(checkRequirements): New private helper method.
+ 	(checkTotalRequirements): New private helper method.
+ 	(checkLayout): New private helper method.
+ 
+ 2005-09-29  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/ComboBoxDemo.java: new demo.
+ 
+ 2005-09-29  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/print/PrinterJob.java
+ 	(print(PrintRequestAttributeSet)): Remove abstract modifier and
+ 	implement.
+ 
+ 2005-09-29  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JPopupMenu.java
+ 	(setVisible): use current size, not preferred size, when checking for
+ 	screen edge,
+ 	* javax/swing/plaf/basic/BasicComboPopup.java
+ 	(show): include top and bottom insets in preferred size,
+ 	* javax/swing/plaf/metal/MetalComboBoxButton.java
+ 	(MetalComboBoxButton): don't pass icon to super class,
+ 	(paintComponent): call super.paintComponent() and reworked label 
+ 	drawing.
+ 
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Fixes Bug #24105
+ 	* javax/swing/text/GapContent.java
+ 	(GapContentPosition.getOffset): Adjusted assert statement.
+ 	(shiftGap): Adjusted index in getPositionsInRange call. Call
+ 	resetMarksAtZero if gapStart has moved to 0.
+ 	(replace): Call shiftGap and shiftGapEndUp only if necessary.
+ 	(resetMarksAtZero): New method.
+ 
+ 2005-09-29  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	Added a new field for the gap between the icon and text.
+ 	(setPreferredMenuItemSize): Changed gap from defaultTextIconGap
+ 	to defaultTextArrowIconGap
+ 
+ 2005-09-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/rmi/activation/ActivationGroup_Stub.java (serialVersionUID):
+ 	New field.
+ 
+ 2005-09-28  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #24080
+ 	* java/awt/Window.java
+ 	(show): Fixed the synchronized block to fix deadlock
+ 	problem.
+ 
+ 2005-09-29  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkTextLayout.java
+ 	(getOutline): Implement as native
+ 	* include/gnu_java_awt_peer_gtk_GdkTextLayout.h
+ 	Add declaration
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
+ 	(getOutline): Implement.
+ 	
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/rmi/server/RMIClassLoader.java
+ 	(loadClass(URL, String)): New method.
+ 
+ 2005-09-29  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Fixes Bug #24114
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installDefaults): Set the background color correctly.
+ 
+ 2005-09-29  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicIconFactory.java
+ 	(getMenuArrowIcon): adjusted the size and painting of the returned
+ 	icon,
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(paintMenuItem): adjusted arrow icon position.
+ 
+ 2005-09-28  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	(BranchElement.getElementIndex): If there are no children, don't return
+ 	-1, instead getStartOffset() will throw NPE.  Also, if no child Element
+ 	contains the specified offset, return the closest one.
+ 
+ 2005-09-28  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Added check to prevent NPE.
+ 	(adjustLocation): Changed else if to if, to
+ 	check final y position of tooltip incase
+ 	it is still cut off.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/rmi/server/RMIClassLoader.java:
+ 	Moved all implementation code to
+ 	gnu.java.rmi.server.RMIClassLoaderImpl.
+ 	(getProviderInstance): New helper method to find a provider.
+ 	(getDefaultProviderInstance): New helper method to find a provider.
+ 	(loadClass(String, String, Class)): New method.
+ 	* gnu/java/rmi/server/RMIClassLoaderImpl.java:
+ 	New class. The implementation is moved from
+ 	java.rmi.server.RMIClassLoader.
+ 
+ 2005-09-28  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	(AbstractElement.getResolveParent): If the AttributeSet's 
+ 	getResolveParent returns null, use the Element's parent's AttributeSet.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/rmi/activation/ActivationGroup_Stub.java:
+ 	New class.
+ 
+ 2005-09-28  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(paint): No need to call calculateThumbLocation, called
+ 	by calculateGeometry.
+ 
+ 2005-09-28  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #23934
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(paint): Called calculateGeometry, so the slider is 
+ 	initially set up.
+ 
+ 2005-09-28  Lillian Angel  <langel@redhat.com>
+ 	
+ 	Fixes Bug #24080
+ 	* java/awt/Window.java
+ 	(show): Added a synchronized block to fix deadlock
+ 	problem.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(ActionScroller): Added unused class for binary compatibility.
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java
+ 	(MouseInputHandler): Made inner class public as specified.
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	(FocusHandler):  Made inner class public as specified.
+ 	(MouseInputHandler):  Made inner class public as specified.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(currentIcon): Made method package private, so that other button
+ 	UIs can access it.
+ 	(paint): Removed unnecessary call to paintButtonNormal().
+ 	(paintButtonNormal): Removed unnecessary method. The background
+ 	is already filled correctly when paint() is entered.
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java
+ 	(paint): Call the new paintFocus() method instead of the inherited
+ 	from BasicButtonUI.
+ 	(paintFocus): New method. Paints the focus indicator for
+ 	JRadioButtons and subclasses.
+ 	* javax/swing/plaf/basic/BasicToggleButtonUI.java
+ 	(paint): New method. Implements custom painting. Mostly, this
+ 	is needed in order to call the new paintIcon() method.
+ 	(paintIcon): New method. Narrows the types from the super-class
+ 	method.
+ 
+ 2005-09-28  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/Utilities.java:
+ 	(getRowEnd): Call getText() rather than trying to get the Element-
+ 	specific portion to avoid GapContent errors.
+ 	(getRowStart): Likewise.
+ 
+ 2005-09-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/sound/midi/MidiUnavailableException.java (serialVersionUID):
+ 	New field.
+ 	* javax/sound/midi/InvalidMidiDataException.java (serialVersionUID):
+ 	New field.
+ 
+ 2005-09-28  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/UIDefaults.java
+ 	(getBoolean(Object)): API doc correction.
+ 
+ 2005-09-28  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalButtonListener.java
+ 	(propertyChange): check new value of property to determine which
+ 	border to set.
+ 
+ 2005-09-28  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(installDefaults): Fixed checks for setting defaults.
+ 	Should check if default is null also.
+ 
+ 2005-09-28  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #24077
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java
+ 	(GdkFontMetrics): Added a check for the font
+ 	being null. Fixed a NPE. 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(GdkGraphics): Added check if the font is null.
+ 	If it is, the font should be set to the default.
+ 	(setFont): If font parameter is null, this.font should not
+ 	be changed.
+ 	* javax/swing/JPopupMenu.java:
+ 	Fixed API documentation to say 'JDialog' rather than
+ 	'JWindow'.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(currentIcon): Made method package private, so that other button
+ 	UIs can access it.
+ 	(paint): Removed unnecessary call to paintButtonNormal().
+ 	(paintButtonNormal): Removed unnecessary method. The background
+ 	is already filled correctly when paint() is entered.
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java
+ 	(paint): Call the new paintFocus() method instead of the inherited
+ 	from BasicButtonUI.
+ 	(paintFocus): New method. Paints the focus indicator for
+ 	JRadioButtons and subclasses.
+ 	* javax/swing/plaf/basic/BasicToggleButtonUI.java
+ 	(paint): New method. Implements custom painting. Mostly, this
+ 	is needed in order to call the new paintIcon() method.
+ 	(paintIcon): New method. Narrows the types from the super-class
+ 	method.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(createDefaultTheme): Change default back to DefaultMetalTheme.
+ 	The Ocean theme is too inconsistent.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Font.java
+ 	(tk): Made method package private. Must not be protected.
+ 	(getFontFromToolkit): Made method package private. Must not
+ 	be protected.
+ 	(getPeerFromToolkit): Made method package private. Must not
+ 	be protected.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(createMouseWheelListener): New hook method for creating
+ 	mouse wheel listeners.
+ 	(installListeners): Use new hook method to create mouse wheel
+ 	listeners.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalProgressBarUI.java
+ 	(createUI): Removed Hashtable lookup.
+ 	* javax/swing/plaf/metal/MetalSeparatorUI.java
+ 	(paint): New method. Uses the metal colors for drawing separators.
+ 	* javax/swing/plaf/metal/MetalSplitPaneUI.java
+ 	(createUI): Removed Hashtable lookup.
+ 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java
+ 	(createUI): Removed Hashtable lookup.
+ 	* javax/swing/plaf/metal/MetalTextFieldUI.java
+ 	(createUI): Removed Hashtable lookup.
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	(createUI): Removed Hashtable lookup.
+ 	* javax/swing/plaf/metal/Ocean.java
+ 	(addCustomEntriesToTable): New method. Adds some custom UI defaults
+ 	for the Ocean theme.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java
+ 	(paintThumb): Use new MetalUtils.fillMetalPattern signature.
+ 	* javax/swing/plaf/metal/MetalSplitPaneDivider.java
+ 	(paint): Use new MetalUtils.fillMetalPattern signature.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalInternalFrameTitlePane.java
+ 	(paintPalette): Use new MetalUtils.fillMetalPattern signature.
+ 	(paintComponent): Use new MetalUtils.fillMetalPattern signature.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(MenuItemBorder.paintBorder): Fixed painting so that a thin white
+ 	line is drawn on the left of unarmed items. Fixed color handling.
+ 	(PopupMenuBorder.borderInsets): Fixed insets. 
+ 	(PopupMenuBorder.paintBorder): Removed left white line. This is
+ 	drawn now in the MenuItemBorder.
+ 	(ToolBarBorder.paintBorder): Use correct call to new MetalUtils
+ 	fillMetalPattern method signature.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalUtils.java
+ 	(fillMetalPattern): If we have a Graphics2D, then go into
+ 	optimized drawing mode.
+ 	(fillMetalPattern2D): New method. Implements pattern drawing using
+ 	textures.
+ 	(initializePattern): New method. Initializes the texture.
+ 
+ 2005-09-28  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Font.java: Reformatted file.
+ 
+ 2005-09-28  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(TreeHardDriveIcon): new private class,
+ 	(TreeFloppyDriveIcon): new private class,
+ 	(TreeComputerIcon): new private class,
+ 	(getTreeControlIcon): implemented,
+ 	(getTreeComputerIcon): implemented,
+ 	(getTreeHardDriveIcon): implemented.
+ 
+ 2005-09-28  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(ToolBarBorder): now implements SwingConstants.
+ 	
+ 2005-09-27  Anthony Green  <green@redhat.com>
+ 
+ 	* javax/sound/midi/MidiSystem.java (getSequence): Add
+ 	missing methods.
+ 	* javax/sound/midi/Sequencer.java (stopRecording): Ditto.
+ 	* javax/sound/midi/ShortMessage.java (ShortMessage): Ditto.
+ 	(setMessage): Fix visibility.  Add missing implementations.
+ 	* javax/sound/midi/ShoundbankResouce.java: Rename "soundBank" to
+ 	"soundbank", and "getSoundBank" to "getSoundbank".
+ 	
+ 2005-09-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(rolloverBorder): new field,
+ 	(getRolloverBorder): new method,
+ 	* javax/swing/plaf/metal/MetalButtonListener.java: new class,
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(instance): removed field,
+ 	(constructor): initialise fields from UI defaults,
+ 	(getFocusColor): just return field value,
+ 	(getSelectColor): just return field value,
+ 	(getDisabledTextColor): just return field value,
+ 	(createUI): return a new instance every time,
+ 	(installDefaults): check for isRolloverEnabled and install rollover
+ 	border if necessary,
+ 	(uninstallDefaults): implemented,
+ 	(createButtonListener): implemented,
+ 	(paintButtonPressed): implemented,
+ 	(paintFocus): implemented,
+ 	(paintText): implemented.
+ 
+ 2005-09-27  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/SimpleAttributeSet.java:
+ 	(containsAttribute): Check the resolve parent if the attribute is not
+ 	found locally.
+ 	(containsAttributeLocally): New package-private method.
+ 	(isEqual): Re-implemented.  Return true if the two sets have the same
+ 	size and this set contains the given set.
+ 
+ 2005-09-27  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JSeparator.java
+ 	(updateUI): Removed invalidate call. This is unnecessary.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java
+ 	(paint): Reworked painting so that it paints the separator
+ 	correctly.
+ 	(getPreferredSize): Fixed to return the correct values according
+ 	to the JDK.
+ 	(getMinimumSize): Likewise.
+ 	(getMaximumSize): Likewise.
+ 
+ 2005-09-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(RolloverButtonBorder): new class.
+ 
+ 2005-09-27  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/BoxLayout.java
+ 	(preferredLayoutSize): Fixed to respect the containers insets.
+ 	(layoutComponent): Likewise.
+ 
+ 2005-09-27  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(calculateTiledPositions): Only adjust sizes if the allocated
+ 	span is actually different from the used span.
+ 	(calculateAlignedPositions): Call adjustFromRight also if
+ 	baseline == 0, otherwise we get strange results because 0 * x = 0.
+ 
+ 2005-09-27  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/SimpleAttributeSet.java:
+ 	(removeAttributes(AttributeSet)): Only remove attributes from the 
+ 	current set if their keys AND values are found in the given set
+ 
+ 2005-09-27  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #24067
+ 	* java/awt/Component.java
+ 	(removeNotify): Should call hide on the peer before
+ 	disposing of it. This stops the flashing when the 
+ 	tooltips are removed from the component.
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java
+ 	(getPreferredSize): If the accelerator is null, we should
+ 	paint the mnenomic if it is available.
+ 
+ 2005-09-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Window.java (createBufferStrategy): Can throw AWTException.
+ 	* java/awt/Canvas.java (createBufferStrategy): Can throw AWTException.
+ 
+ 2005-09-27  Lillian Angel  <langel@redhat.com>
+ 	
+ 	Fixes Bug #24044
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): currentTip needs to be revalidated on HeavyWeightPopups
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java
+ 	(getPreferredSize): Fixed to get the preferred size of the 
+ 	tooltip including the accelerator, if it has one.
+ 	(paint): Fixed to paint the accelerator in its font
+ 	and color, if it has one.
+ 
+ 2005-09-27  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/Utilities.java:
+ 	(getRowEnd): New method.
+ 	(getRowStart): New method.
+ 
+ 2005-09-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/beans/beancontext/BeanContextServicesSupport.java
+ 	(BCSSChild.serialVersionUID): Fixed.
+ 	* java/beans/beancontext/BeanContextSupport.java
+ 	(BCSChild.serialVersionUID): Fixed.
+ 
+ 2005-09-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(installDefaults): get border from UI defaults,
+ 	* javax/swing/plaf/metal/MetalBorders.java:
+ 	(ToolBarBorder): new class,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added tool bar border default,
+ 	* javax/swing/plaf/metal/MetalToolBarUI.java
+ 	(MetalContainerListener): new class,
+ 	(instance): removed field,
+ 	(MetalRolloverListener): new class,
+ 	(contListener): new field,
+ 	(rolloverListener): new field,
+ 	(createUI): return a new instance every time,
+ 	(createRolloverListener): implemented,
+ 	(createContainerListener): implemented,
+ 	(createNonRolloverBorder): implemented.
+ 
+ 2005-09-27  Anthony Green  <green@redhat.com>
+ 
+ 	* javax/sound/midi/MidiFileFormat.java (bytes, microseconds):
+ 	Rename to byteLength and microsecondLength respectively.
+ 
+ 2005-09-26  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): validating of toolTipWindow should not have been 
+ 	removed.
+ 
+ 2005-09-26  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Removed validating of currentTip. setVisible(true) 
+ 	does this. Also, removed validating of toolTipWindow because 
+ 	show() does this.
+ 
+ 2005-09-27  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(adjustGreater): Special handle the case when the components have
+ 	no spare room for adjustment.
+ 	(adjustSmaller): Special handle the case when the components have
+ 	no spare room for adjustment.
+ 
+ 2005-09-27  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* java/awt/Component.java
+ 	(hide): Repaint component before invalidating the parent.
+ 	(show): Repaint component before invalidating the parent.
+ 	* javax/swing/JComponent.java
+ 	(revalidate): Check if we are in the event thread, and if not,
+ 	then queue a self-request in the event thread.
+ 	(setVisible): Repaint the parent and queue a revalidate.
+ 
+ 2005-09-27  Sven de Marothy  <sven@physto.se>
+ 
+ 	* javax/swing/JComboBox.java
+ 	(firePopupMenuCanceled): Implement
+ 	(firePopupMenuWillBecomeInvisible): Implement
+ 	(firePopupMenuWillBecomeVisible): Implement
+ 
+ 2005-09-27  Sven de Marothy  <sven@physto.se>
+ 
+ 	* javax/swing/text/html/CSS.java
+ 	(getAttribute,getAllAttributeKeys): Implement
+ 
+ 2005-09-26  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(JTree): Root should be visible by default.
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Added check for validity of currentTip. Prevents
+ 	over-validating.
+ 	(hideTip): currentTip should be reset.
+ 	* javax/swing/JMenuItem.java
+ 	(setAccelerator): Registered accelerator as a keyboard action.
+ 
+ 2005-09-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/reflect/Proxy.java: Javadoc fix.
+ 	* java/io/OutputStreamWriter.java (OutputStreamWriter): Javadoc fix.
+ 
+ 2005-09-26  Anthony Green  <green@redhat.com>
+ 
+ 	* javax/sound/midi/Synthesizer.java (loadInstrument,
+ 	unloadInstrument, remapInstrument, loadAllInstruments,
+ 	unloadAllInstruments, unloadInstrument, loadInstrument): Don't
+ 	declare the unchecked IllegalArgumentException.
+ 	* javax/sound/midi/MidiSystem.java (getMidiDevice, write): Ditto.
+ 	* javax/sound/midi/ShortMessage.java: Fix 80-column formatting
+ 	problem.
+ 	* javax/sound/midi/Sequence.java: Ditto.
+ 	* javax/sound/midi/MidiMessage.java: Ditto.
+ 	* javax/sound/midi/MidiSystem.java: Ditto.
+ 	* javax/sound/midi/MidiFileFormat.java: Ditto.
+ 
+ 2005-09-26  Anthony Green  <green@redhat.com>
+ 
+ 	* javax/sound/midi/InvalidMidiDataException.java
+ 	* javax/sound/midi/MidiFileFormat.java
+ 	* javax/sound/midi/ControllerEventListener.java
+ 	* javax/sound/midi/Patch.java javax/sound/midi/Sequence.java
+ 	* javax/sound/midi/SysexMessage.java javax/sound/midi/Sequencer.java
+ 	* javax/sound/midi/spi/MidiFileReader.java
+ 	* javax/sound/midi/spi/MidiFileWriter.java
+ 	* javax/sound/midi/spi/SoundbankReader.java
+ 	* javax/sound/midi/spi/MidiDeviceProvider.java
+ 	* javax/sound/midi/Track.java javax/sound/midi/MidiChannel.java
+ 	* javax/sound/midi/MetaMessage.java javax/sound/midi/Instrument.java
+ 	* javax/sound/midi/MidiMessage.java
+ 	* javax/sound/midi/MidiUnavailableException.java
+ 	* javax/sound/midi/Transmitter.java javax/sound/midi/MidiEvent.java
+ 	* javax/sound/midi/VoiceStatus.java javax/sound/midi/MidiDevice.java
+ 	* javax/sound/midi/SoundbankResource.java
+ 	* javax/sound/midi/Soundbank.java javax/sound/midi/Receiver.java
+ 	* javax/sound/midi/MetaEventListener.java
+ 	* javax/sound/midi/ShortMessage.java
+ 	* javax/sound/midi/Synthesizer.java
+ 	* javax/sound/midi/MidiSystem.java: New files.
+ 
+ 2005-09-26  Lillian Angel  <langel@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java
+ 	(create): If the dialog is a toolTip or a
+ 	PopupMenu, its type should be set to:
+ 	GDK_WINDOW_TYPE_HINT_MENU, so the parent
+ 	window does not lose focus.
+ 	* javax/swing/JTree.java
+ 	(setModel): Should update the UI everytime the
+ 	model is changed.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(installUI): Should not set the root to be visible.
+ 	(paintControlIcons): changed to use getVisibleRect.
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	(installUI): Should not set the root to be visible.
+ 
+ 2005-09-26  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* gnu/java/text/BaseBreakIterator.java:
+ 	(following): Removed unused local variable.
+ 
+ 2005-09-26  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(calculateTiledPositions): Improved to also take minimum and maximum
+ 	sizes into account and better use the allocated space.
+ 	(adjustGreater): New helper function.
+ 	(adjustSmaller): New helper function.
+ 
+ 2005-09-25  Casey Marshall  <csm@gnu.org>
+ 
+ 	Fixes PR classpath/23916. Fix suggested by Santiago Gala
+ 	<sgala@apache.org>.
+ 	* java/security/AccessControlContext.java
+ 	(<init>): update javadoc; check SecurityPermission
+ 	"createAccessControlContext" if a security manager is set.
+ 	(getProtectionDomains): new method.
+ 	* vm/reference/java/security/VMAccessController.java
+ 	(DEBUG): set to 'gnu.classpath.Configuration.DEBUG.'
+ 	(pushContext, popContext): add debug statement.
+ 	(getContext): debug output changes; include the DomainCombiner
+ 	specified in the AccessControlContext, if any.
+ 
+ 2005-09-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/security/sasl/SaslServerFactory.java: Updated javadoc.
+ 	* javax/security/sasl/Sasl.java: Updated javadoc.
+ 	* javax/security/sasl/SaslClientFactory.java: Updated javadoc.
+ 	* javax/security/sasl/RealmChoiceCallback.java: Updated javadoc.
+ 	* javax/security/sasl/RealmCallback.java: Updated javadoc.
+ 	* javax/security/sasl/AuthenticationException.java: Updated
+ 	javadoc.
+ 	* javax/security/sasl/SaslServer.java (getNegotiatedProperty):
+ 	Don't throw SaslException.
+ 	* javax/security/sasl/SaslClient.java (getNegotiatedProperty):
+ 	Don't throw SaslException.
+ 	* javax/security/sasl/SaslException.java (serialVersionUID): New
+ 	field.
+ 	* javax/security/sasl/AuthorizeCallback.java (AuthorizeCallback):
+ 	Implements Serializable.
+ 	(serialVersionUID): New field.
+ 
+ 2005-09-25  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/security/provider/Gnu.java
+ 	(<init>): add Diffie-Hellman key factory and key pair generator.
+ 	* gnu/java/security/provider/DiffieHellmanKeyFactoryImpl.java,
+ 	* gnu/java/security/provider/DiffieHellmanKeyPairGeneratorImpl.java:
+ 	new files.
+ 
+ 2005-09-24  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(calculateAlignedPositions): Improved algorithm to better respect
+ 	the minimum and maximum size and to better use the available space.
+ 	(adjustFromRight): New helper method.
+ 	(adjustFromLeft): New helper method.
+ 
+ 2005-09-24  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/BoxLayout.java
+ 	(layoutContainer): Respect the insets of the container.
+ 
+ 2005-09-24  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	Fixed some API comments.
+ 	(paintChildren): Set clip to exclude the border area.
+ 
+ 2005-09-24  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paint): Paint border after the children are painted. Otherwise the
+ 	children could draw over the border.
+ 
+ 2005-09-24  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(getAlignedRequirements): Implemented this method.
+ 	(calculateAlignedPositions): Implemented this method.
+ 	* javax/swing/BoxLayout.java
+ 	(Direction): Removed unneeded inner interface.
+ 	(Horizontal): Removed unneeded inner class.
+ 	(Vertical): Removed unneeded inner class.
+ 	(SizeReq): Removed unneeded inner class.
+ 	(preferredLayoutSize): Reimplemented to use SizeRequirements.
+ 	(minimumLayoutSize): Reimplemented to use SizeRequirements.
+ 	(maximumLayoutSize): Reimplemented to use SizeRequirements.
+ 	(layoutContainer): Reimplemented to use SizeRequirements.
+ 	(layoutAlgorithm): Removed unneeded package private method.
+ 	(distributeSpace): Removed unneeded package private method.
+ 	(getSizeRequirements): New private helper method.
+ 
+ 2005-09-24  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/javax/imageio/bmp/BMPDecoder.java
+ 	(BMPDecoder): Fix static field references.
+ 
+ 2005-09-24  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/Font.java
+ 	Fixed comments.
+ 	(pointSize): New field.
+ 	(Font): Set size fields.
+ 	(getSize, getSize2D): Return size fields.
+ 
+ 2005-09-24  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paint): Check if clip == null and if so set it to the component's
+ 	bounds.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(getClipBounds): Added null check so that null is returned when
+ 	clip == null, instead of throwing an NPE while accessing
+ 	null.getBounds2D().
+ 
+ 2005-09-24  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit): Replace deprecated
+ 	gtk colormap stuff.
+ 
+ 2005-09-24  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paint): Activate double buffering if it is not already activated.
+ 	(paintImmediately2): Prepare a component graphics object here and
+ 	call paintDoubleBuffered with this.
+ 	(paintDoubleBuffered): Changed to work nicely with the new paint()
+ 	and paintImmediately2() methods.
+ 
+ 2005-09-24  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Added font default for
+ 	FormattedTextField.font. Solves an NPE that was caused by a null
+ 	font on a JFormattedTextField.
+ 
+ 2005-09-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/DefaultComboBoxModel.java
+ 	(addElement): always fire event for interval added, and call 
+ 	setSelectedItem() if this is the first item.
+ 
+ 2005-09-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/DefaultComboBoxModel.java: updated API docs all over.
+ 
+ 2005-09-24  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/FontMetrics.java
+ 	(getMaxCharBounds, hasUniformLineMetrics): New methods.
+ 	
+ 2005-09-24  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/javax/imageio/bmp/BMPDecoder.java,
+ 	* gnu/javax/imageio/bmp/BMPImageReaderSpi.java,
+ 	* gnu/javax/imageio/bmp/DecodeBF32.java,
+ 	* gnu/javax/imageio/bmp/DecodeRGB8.java,
+ 	* gnu/javax/imageio/bmp/BMPException.java,
+ 	* gnu/javax/imageio/bmp/BMPInfoHeader.java,
+ 	* gnu/javax/imageio/bmp/DecodeRGB1.java,
+ 	* gnu/javax/imageio/bmp/DecodeRLE4.java,
+ 	* gnu/javax/imageio/bmp/BMPFileHeader.java,
+ 	* gnu/javax/imageio/bmp/DecodeRGB24.java,
+ 	* gnu/javax/imageio/bmp/DecodeRLE8.java,
+ 	* gnu/javax/imageio/bmp/BMPImageReader.java,
+ 	* gnu/javax/imageio/bmp/DecodeBF16.java,
+ 	* gnu/javax/imageio/bmp/DecodeRGB4.java:
+ 	New files.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(setFont): If font == null, simply return. Avoids a NPE.
+ 
+ 2005-09-23  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/io/OutputStreamWriter.java:
+ 	(OutputStreamWriter): Added missing constructors.
+ 
+ 2005-09-23  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(getFont): Should return null, not a default font.
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Called revalidate currentTip before painted, and
+ 	called validate on JDialog toolTip.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(layoutCompoundLabel): Removed debug code.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JScrollPane.java
+ 	(setHorizontalScrollBar): Removed handling of listeners on the model.
+ 	This is now done in the BasicScrollPaneUI.
+ 	(setHorizontalScrollBarPolicy): Added revalidate call.
+ 	(setVerticalScrollBar): Removed handling of listeners on the model.
+ 	This is now done in the BasicScrollPaneUI.
+ 	(setVerticalScrollBarPolicy): Added revalidate call.
+ 	(setViewport): Removed handling of listeners on the viewport.
+ 	This is now done in the BasicScrollPaneUI.
+ 	(createScrollListener): Removed unnecessary and undocumented method.
+ 	The functionality of this method is moved to BasicScrollPaneUI
+ 	as specified.
+ 	(JScrollPane): Removed initialization of removed listener.
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(HSBChangeListener): New inner class.
+ 	(VSBChangeListener): New inner class.
+ 	(ViewportChangeHandler): New inner class.
+ 	(PropertyChangeHandler): New inner class.
+ 	(MouseWheelHandler): New inner class.
+ 	(installUI): Also call installListeners.
+ 	(installListeners): New method. Initializes the listeners on the
+ 	scrollpane.
+ 	(createHSBChangeListener): New method.
+ 	(createVSBChangeListener): New method.
+ 	(createViewport): New method.
+ 	(createPropertyChangeListener): New method.
+ 	(uninstallUI): Also call uninstallListeners.
+ 	(uninstallListeners): New method.
+ 	(syncScrollPaneWithViewport): New method.
+ 	(updateColumnHeader): New method.
+ 	(updateRowHeader): New method.
+ 	(updateScrollBarDisplayPolicy): New method.
+ 	(updateViewport): New method.
+ 
+ 2005-09-23  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTextField.java: Reformatted and added API docs.
+ 
+ 2005-09-23  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Set lightWeightPopupEnabled to default.
+ 	Validated and repainted new containerPanel and
+ 	repainted toolTipWindow and repainted currentTip. The 
+ 	toolTips paint well now.
+ 
+ 2005-09-23  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paintRecursive): Changed clip to be the visible
+ 	rectangle of the view.
+ 
+ 2005-09-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/DefaultComboBoxModel.java
+ 	(DefaultComboBoxModel(Object[])): set selected item,
+ 	(DefaultComboBoxModel(Vector): likewise,
+ 	(addElement): reimplemented,
+ 	(removeElementAt): update selected item,
+ 	(removeAllElements): clear selected item and fire correct event,
+ 	(setSelectedItem): update item always,
+ 	(getElementAt): return null for index out of bounds,
+ 	* javax/swing/plaf/metal/MetalComboBoxButton.java
+ 	(paintComponent): check for null selection.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	Added some deprecated and unused fields for binary compatibility.
+ 	(installListeners): Fixed method parameters.
+ 	(installUI): Call installListeners with fixed method parameters.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicPanelUI.java
+ 	(uninstallUI): New method.
+ 	(uninstallDefaults): New method.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(MinimumHeight): New constant field.
+ 	(MinimumWidth): New constant field.
+ 	(minimumWidth): Removed unused field.
+ 	(minimumHeight): Removed unused field.
+ 	(installDefaults): Removed initializing of minimumSize and
+ 	minimumHeight.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Initialize OptionPane.minimumSize from
+ 	constant fields in BasicOptionPaneUI.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuUI.java
+ 	(ChangeHandler): Added some deprecated and unused fields for
+ 	binary compatibility.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(deactivateFrame): New method.
+ 	(InternalFramePropertyChangeListener.propertyChange): Call
+ 	new deactivate() method instead of getDesktopManager.deactivate()
+ 
+ 2005-09-23  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #24022
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paint): Took out unneeded code.
+ 
+ 2005-09-23  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #23529
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(mousepressed): Made delay shorted while pressing the arrow
+ 	button. This makes the scrollbar move more smoothly.
+ 	(mouseReleased): Reset the delay to the default, so single
+ 	clicks only move the scrollbar 1 unit. Also, when the
+ 	mouse is released, the scrollbar should move 1 unit.
+ 	(shouldScroll): Should not be able to scroll by block
+ 	when the mouse is in the thumbRect.
+ 	(mousePressed): Made delay shorted while pressing in the
+ 	scroll area. This makes the scrollbar move more smoothly.
+ 	(mouseReleased): Should move the scrollbar 1 block when the
+ 	mouse is released. Also, reset the timer to default delay.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java
+ 	(installKeyboardActions): Call renamed method registerKeyboardActions.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java
+ 	(registerKeyboardAction): Renamed this method to
+ 	registerKeyboardActions as specifie.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(FocusHandler.repaintCellFocus): Marked protected instead of
+ 	package private as specified.
+ 	(KeyHandler.keyPressed): Call new methods selectNextIndex and
+ 	selectPreviousIndex instead of doing the work here.
+ 	(PropertyChangeHandler.propertyChange): Update the
+ 	updateLayoutStateNeeded field correctly.
+ 	(BasicListUI): Removed listener initialization. Moved this
+ 	to installListeners.
+ 	(installListeners): Initialize listeners here instead in the
+ 	constructor. Use the createXXXListener hooks instead of creating
+ 	the listeners directly.
+ 	(createFocusListener): New hook method for creating a focus listener.
+ 	(createListDataListener): New hook method for creating a list
+ 	data listener.
+ 	(createListSelectionListener): New hook method for creating a list
+ 	selection listener.
+ 	(createMouseInputListener): New hook method for creating a mouse
+ 	input listener.
+ 	(createPropertyChangeListener): New hook method for creating a
+ 	property change listener.
+ 
+ 2005-09-23  David Gilbert <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(OptionDialogBorder): new class.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicColorChooserUI.java
+ 	(uninstallDefaultChoosers): New method.
+ 	(uninstallUI): Call uninstallDefaultChoosers.
+ 
+ 2005-09-23  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(layoutCompoundLabel): Fix the case when verticalTextPosition=BOTTOM
+ 	and without icon. The label text slipped out of the view rectangle
+ 	in this case.
+ 
+ 2005-09-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(setCurrentTheme): throw exception if argument is null, improved API
+ 	docs.
+ 	
+ 2005-09-22  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JPanel.java
+ 	(accessibleContext): Removed this unnecessary field. Use the
+ 	inherited field of the same name from JComponent instead.
+ 
+ 2005-09-22  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/UIManager.java
+ 	(static_initializer): Load MetalLookAndFeel only as fallback, if
+ 	the system property 'swing.defaultlaf' is not defined. Before
+ 	it has accidentally loaded the MetalLookAndFeel in all cases,
+ 	regardless of the property setting.
+ 
+ 2005-09-22  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(paintChildren): If a child component is invisible, skip it.
+ 	Handle the (rare) case when no clip is set as if it's set to the
+ 	child component's bounds. These fixes should make Swing working
+ 	again as before.
+ 
+ 2005-09-22  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetResizable):
+ 	Replace deprecated gtk_window_set_policy with gtk_window_set_resizable.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_delItem): Replace deprecated
+ 	gtk_container_children with gtk_container_get_children.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_nativeSetHelpMenu): Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_delMenu): Likewise.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkImage_freePixmap): Replace deprecated
+ 	gdk_pixmap_unref with g_object_unref.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked):
+ 	Replace deprecated gdk_cursor_destroy with gdk_cursor_unref.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetParent):
+ 	Replace deprecated gtk_container_children with
+ 	gtk_container_get_children.
+ 	(find_fg_color_widget): Replace deprecated macro GTK_IS_OPTION_MENU with
+ 	GTK_IS_COMBO_BOX.
+ 	(component_button_release_cb): Replace deprecated gdk_window_get_size
+ 	with gdk_drawable_get_size.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeSetCheckboxGroup):
+ 	Replace deprecated gtk_radio_button_group with
+ 	gtk_radio_button_get_group.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove): Likewise.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create): Replace deprecated
+ 	gtk_type_new with gtk_drawing_area_new.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_copyState): Replace deprecated
+ 	gdk_*_ref with g_object_ref.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__II): Likewise.
+ 	Replace deprecated gdk_rgb_get_cmap with gdk_rgb_get_colormap.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_initFromImage): Replace
+ 	deprecated gdk_*_ref with g_object_ref.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_initStateUnlocked): Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_dispose): Replace deprecated
+ 	gdk_*_unref with g_object_unref.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_copyArea): Replace deprecated
+ 	gdk_window_copy_area with gdk_draw_drawable.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor): Replace deprecated
+ 	gdk_color_alloc with gdk_colormap_alloc_color.
+ 
+ 2005-09-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/Utilities.java:
+ 	(getWordEnd): Implemented.
+ 	(getWordStart): Implemented.
+ 
+ 2005-09-22  Keith SEitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/event/filters/StepFilter.java (StepFilter): Do not test
+ 	for null thread ID -- just test if it has not been garbage collected.
+ 	* gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java (ThreadOnlyFilter):
+ 	Likewise.
+ 
+ 2005-09-22  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JPopupMenu.java
+ 	(setVisible): Size of menu should always be the preferred
+ 	size. It was sometimes cutting of the accelerator.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	Increased defaultAcceleratorLabelGap field to 10, to
+ 	make menuItem more readable.
+ 
+ 2005-09-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/Utilities.java:
+ 	(getPreviousWord): Fixed incorrect logic.  Use preceding() instead of 
+ 	following(), previous() instead of next().
+ 
+ 2005-09-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* gnu/java/text/BaseBreakIterator.java:
+ 	(following): Don't restore old CharacterIterator index.
+ 
+ 2005-09-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/JList.java (AccessibleJList): New constructor.
+ 
+ 2005-09-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/ServerSocket.java (accept): Use correct security manager
+ 	call.
+ 
+ 2005-09-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/Utilities.java:
+ 	(getNextWord): Implemented.
+ 	(getPreviousWord): Implemented.
+ 
+ 2005-09-22  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/MetalLookAndFeel.java
+ 	(initComponentDefaults): Changed back to original 
+ 	values.
+ 
+ 2005-09-22  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Moved tooltip location adjustments to a
+ 	helper method.
+ 	(adjustLocation): New helper method.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Fixed defaults for Table, 
+ 	TableHeader, Tree to match JDK.
+ 	* javax/swing/plaf/MetalLookAndFeel.java
+ 	(initComponentDefaults): Fixed defaults for Table and
+ 	TableHeader to match JDK.	
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java
+ 	(defaultBorder): Removed, along with inner class. Not needed.
+ 	(installDefaults): Changed border to be the default border in
+ 	L&F.
+ 
+ 2005-09-22  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JSpinner.java
+ 	(ListEditor): New inner class. Provides an editor for the
+ 	SpinnerListModel.
+ 
+ 2005-09-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/FileWriter.java (FileWriter): Typo fix.
+ 
+ 2005-09-22  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JApplet.java
+ 	(accessibleContext): Made field protected as specified.
+ 	* javax/swing/JButton.java
+ 	(accessibleContext): Removed field. The inherited JComponents
+ 	accessibleContext field should be used instead.
+ 	* javax/swing/JLabel.java
+ 	(accessibleContext): Removed field. The inherited JComponents
+ 	accessibleContext field should be used instead.
+ 	* javax/swing/JRootPane.java
+ 	(JRootPane): Removed unnecessary setDoubleBuffered() call.
+ 
+ 2005-09-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/html/HTML.java:
+ 	(SYNTHETIC): Renamed variable SYNTETIC to SYNTHETIC.
+ 	(Tag): Changed comment for static Tag IMPLIED.
+ 
+ 2005-09-22  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JViewport.java
+ 	(JViewport): Initialize cached fields for blitting.
+ 	(setViewPosition): Repaint viewport.
+ 	(revalidate): Set damaged flag. Used for blitting.
+ 	(reshape): Likewise.
+ 	(paint): New method. Decide which paint method to use.
+ 	(computeBlit): New method. Computes the parameters for blitting.
+ 	(paintSimple): New method. Performs painting in simple mode.
+ 	(paintBackingStore): New method. Performs painting in backingstore
+ 	mode.
+ 	(paintBlit): New method. Performs painting in blit mode. For
+ 	now this falls back to backing store mode.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(ChangeListener): Removed inner class.
+ 	(installDefaults): Load default for background color. Changed
+ 	signature to protected.
+ 	(installListeners): Removed method.
+ 	(uninstallDefaults): Changed signature to protected.
+ 	(installUI): Call installDefaults().
+ 	(uninstallUI): Call uninstallDefaults().
+ 	(getPreferredSize): Removed.
+ 	(paint): Removed.
+ 	(paintSimple): Removed.
+ 	(paintBackingStore): Removed.
+ 
+ 2005-09-22  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(AccessibleJComponent.addPropertyChangeListener): Partly omplemented.
+ 	(AccessibleJComponent.getAccessibleStateSet): Partly implemented.
+ 	(doubleBuffered): Default value of this field is true.
+ 	(paint): Moved double buffer painting stuff to separate method.
+ 	(paintChildren): Don't call into AWT painting code here. This allows
+ 	for a small optimization.
+ 	(paintImmediately): Don't go up to the parent window, try to start
+ 	painting on the nearest JRootPane if possible.
+ 	(paintImmediately2): New method. Actually performs repainting
+ 	on the repaint root.
+ 	(paintDoubleBuffered): New method. Performs painting using
+ 	a double buffer.
+ 	(paintSimple): New method. Performs painting without buffer.
+ 
+ 2005-09-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/filechooser/FileFilter.java: reformatted and added API
+ 	docs.
+ 
+ 2004-10-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java 
+ 	(defineClass(String,ByteBuffer,ProtectionDomain)): New method.
+ 
+ 2005-09-21  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Fixed location of tooltip. Sometimes
+ 	the ToolTip was being cut off.
+ 
+ 2005-09-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/classpath/ByteArray.java: Reindent boilerplate.
+ 
+ 2005-09-21  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/classpath/ByteArray.java,
+ 	* gnu/javax/crypto/DiffieHellmanImpl.java,
+ 	* gnu/javax/crypto/GnuDHPrivateKey.java,
+ 	* gnu/javax/crypto/RSACipherImpl.java:
+ 	Fixed address within GPL license.
+ 
+ 2005-09-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/split-for-gcj.sh: Cut list to 3 package levels deep.
+ 
+ 2005-09-21  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/html/HTML.java:
+ 	(Tag): Changed name of IMPLIED Tag from "implied" to "p-implied" to 
+ 	match the JDK.
+ 	* javax/swing/text/html/HTMLDocument.java:
+ 	(AdditionalComments): New field.
+ 
+ 2005-09-21  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/html/HTMLDocument.java:
+ 	(getBase): Implemented.
+ 	(setBase): Implemented.
+ 	(getPreservesUnknownTags): Implemented.
+ 	(setPreservesUnknownTags): Implemented.
+ 	(BlockElement): New class partially implemented.
+ 
+ 2005-09-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java: Reverted field reordering.
+ 
+ 2005-09-21  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(distributeSpill): Fixed a NPE.
+ 	* javax/swing/ToolTipManager.java
+ 	(mouseExited): No need to do this stuff, removed code.
+ 	(showTip): Revalidating and repainting too much, removed.
+ 	(hideTip): Likewise.
+ 
+ 2005-09-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java (invalidateLayout): Updated comment.
+ 	(setBounds): Likewise.
+ 	(MIN, MAX, PREF): Moved nearer top of file.
+ 	(getLayoutComponent): New methods.
+ 	(getConstraints): New method.
+ 	(vgap, hgap, north, south, east, west): Reordered fields to conform
+ 	to serialization spec.
+ 
+ 2005-09-21  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/html/HTMLDocument.java:
+ 	(LeafIterator): New class.
+ 	(getIterator): Implemented.
+ 	(Iterator): New abstract class.
+ 
+ 2005-09-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/math/BigDecimal.java (ZERO, ONE): Now public.  Updated
+ 	javadoc.
+ 	(TEN): New constant.
+ 	* java/math/BigInteger.java (ZERO): Updated javadoc.
+ 	(ONE): Likewise.
+ 	(TEN): New constant.
+ 
+ 2005-09-21  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #23937
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(propertyChange): When WANTS_INPUT_PROPERTY is changed,
+ 	the buttons should be updated.
+ 	(getButtons): Applied patch in bug report. Sets default
+ 	buttons.
+ 
+ 2005-09-21  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Added code to move currentPoint to a new place.
+ 	(getGoodPoint): Removed, not needed.
+ 
+ 2005-09-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalFileChooserUI.java: new file (partial 
+ 	implementation).
+ 
+ 2005-09-20  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JPopupMenu.java
+ 	(setVisible): If HeavyWeightPopup, setLightWeightPopupEnabled
+ 	is false.
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Change so toolTips on lightWeightPopups are 
+ 	added different than those on heavyWeightPopups.
+ 	(canToolTipFit): Removed. This is not needed/used.
+ 
+ 2005-09-20  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(mouseMoved): Removed unneeded code. If the mouse
+ 	moves into another component, then mouseEntered would
+ 	do the same thing. Otherwise, it is not needed.
+ 	(showTip): Fixed so that the containerPanel is an 
+ 	instance of Panel. Made code more efficent.
+ 	Tooltips were causing weird problems with the
+ 	JMenus.
+ 	(getGoodPoint): Fixed to return a better location.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java
+ 	(mouseClicked): Fixed to prevent a NPE.
+ 
+ 2005-09-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/22906:
+ 	* gnu/java/net/protocol/jar/Connection.java (get): Added useCaches
+ 	argument.
+ 	(connect): Updated.
+ 
+ 2005-09-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/print/DocFlavor.java (serialVersionUID): Fixed typo.
+ 
+ 2005-09-19  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/DefaultEditorKit.java:
+ 	(write): Partially Implemented and made slight correction to API docs.
+ 	* javax/swing/text/html/HTMLEditorKit.java:
+ 	(createDefaultDocument): Override parent method because we need to 
+ 	return an HTMLDocument not a DefaultStyledDocument.
+ 	
+ 2005-09-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Fixes PR #23900.
+ 	* javax/swing/JLayeredPane.java
+ 	(remove(int)): Removed repaint() call. This is unnecessary because
+ 	already triggered by Container.remove().
+ 	(remove(Component)): Removed this superfluous method. It's not
+ 	in the specs and the functionality is already in Container.
+ 	(paint): New method. Overridden in order to provide reasonable
+ 	painting for JLayeredPanes.
+ 
+ 2005-09-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(UpdateHandler): Renamed to PropertyChangeHandler. This name is
+ 	closer to the purpose of this class.
+ 	(PropertyChangeHandler.propertyChange): Delegate property change
+ 	to propertyChange hook method in the enclosing BasicTextUI.
+ 	(propertyChange): New protected method. This serves as a hook
+ 	for subclasses to handle property changes in the text component.
+ 	* javax/swing/plaf/basic/BasicTextFieldUI.java
+ 	(properyChange): Handle editable property here and adjust background
+ 	accordingly.
+ 
+ 2005-09-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java
+ 	(getParagraphElement): If the position argument is out of the
+ 	document's bounds, then the closest paragraph element must be
+ 	returned. This is fixed.
+ 
+ 2005-09-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(resizeAndRepaint): New protected method.
+ 
+ 2005-09-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/xml/namespace/QName.java: Now Serializable.
+ 	(serialVersionUID): New field.
+ 	(qName, hashCode): Now transient.
+ 	(QName): Don't compute qName here.
+ 	(equals): Now final.
+ 	(hashCode): Simplified.
+ 	(toString): Compute qName here.
+ 
+ 2005-09-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(getTextFieldBorder): This method must return an BorderUIResource
+ 	instance. Fixed.
+ 
+ 2005-09-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Martin Cordova <martin.cordova@gmail.com>
+ 	* native/jni/java-net/javanet.c (_javanet_accept): Throw
+ 	SocketTimeoutException on EAGAIN timeout.
+ 
+ 2005-09-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(installDefaults): Handle the rollover UIDefaults property.
+ 	(paintText): Correctly paint disabled button label text.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Fix some text component border defaults.
+ 	* javax/swing/plaf/basic/BasicTextPaneUI.java
+ 	(installUI): New method. This sets up some style attributes
+ 	for the JTextPane.
+ 
+ 2005-09-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefault): Added and fixed some UI defaults.
+ 
+ 2005-09-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(ButtonBorder.paintBorder): Fetch correct color for disabled
+ 	button border.
+ 	(getTextFieldBorder): Correctly initialize text field border. This
+ 	should be a compound border with a MarginBorder and TextFieldBorder
+ 	instead of a plain TextFieldBorder.
+ 	(getTextBorder): New method.
+ 
+ 2005-09-20  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java
+ 	(setParagraphAttributes): Implemented this method.
+ 	(insertUpdate): Fixed attribute comparison to avoid NPE.
+ 
+ 2005-09-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR awt/23951
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(isRealized): Leave GDK critical region when exiting early.
+ 
+ 2005-09-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/PopupMenu.java (AccessibleAWTPopupMenu.serialVersionUID):
+ 	New field.
+ 	* java/awt/TextField.java (AccessibleAWTTextField.serialVersionUID):
+ 	New field.
+ 	* java/awt/TextArea.java (AccessibleAWTTextArea.serialVersionUID): 
+ 	New field.
+ 	* java/awt/Menu.java (AccessibleAWTMenu.serialVersionUID): New field.
+ 	* java/awt/CheckboxMenuItem.java (AccessibleAWTCheckboxMenuItem.serialVersionUID):
+ 	New field.
+ 	* java/awt/TextComponent.java (AccessibleAWTTextComponent.serialVersionUID):
+ 	New field.
+ 	* java/awt/MenuItem.java (AccessibleAWTMenuItem.serialVersionUID):
+ 	New field.
+ 	* java/awt/Frame.java (AccessibleAWTFrame.serialVersionUID): New 
+ 	field.
+ 	* java/awt/Dialog.java (AccessibleAWTDialog.serialVersionUID): New
+ 	field.
+ 	* java/awt/Button.java (AccessibleAWTButton.serialVersionUID): New
+ 	field.
+ 	* java/awt/Window.java (AccessibleAWTWindow.serialVersionUID): New
+ 	field.
+ 	* java/awt/ScrollPane.java (AccessibleAWTScrollPane.serialVersionUID):
+ 	New field.
+ 	* java/awt/List.java (AccessibleAWTList.serialVersionUID): New field.
+ 	(AccessibleAWTListChild.serialVersionUID): Likewise.
+ 	(AccessibleAWTListChild.parent): Moved earlier.
+ 	(AccessibleAWTListChild.indexInParent): Renamed.
+ 
+ 2005-09-19  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/filechooser/FileView.java:
+ 	Reformatted and added API doc comments.
+ 
+ 2005-09-19  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JRootPane.java:
+ 	(createGlassPane): Don't set the layout manager to BorderLayout.  Leave
+ 	it as JPanel's default FlowLayout.
+ 
+ 2005-09-19  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java:
+ 	Changed tooltip to be JDialog (no entry in taskbar),
+ 	instead of JWindow.
+ 	(actionPerformed): No need to start timer here.
+ 	(mouseEntered): No need to call showTip here, it is called
+ 	when the timer fires.
+ 	(showTip): Shouldn't show tip if it is already visible or
+ 	the current component is not showing.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getRowForPath): Re-implemented.
+ 	(mousePressed): Call getRowForPath instead, also
+ 	added a check in for leaf icons.
+ 
+ 2005-09-19  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JLayeredPane.java:
+ 	(<init>): Set layout manager to null.
+ 
+ 2005-09-19  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	(GlassPaneDispatcher.handleEvent): Added check for mouseEventTarget
+ 	being null to avoid NPE.
+ 
+ 2005-09-19  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JRootPane.java:
+ 	(RootLayout.layoutContainer): Added comment about how the 
+ 	components should be sized.  Fixed size of glassPane which fills the 
+ 	entire viewable region, including overtop the menuBar.  Used bounds 
+ 	minus insets for containerSize, as indicated in comment, rather than 
+ 	getSize().  Used setBounds instead of setSize for layeredPane because 
+ 	its relation to the other components' sizes is more obvious that way.
+ 
+ 2005-09-19  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	(GlassPaneDispatcher.handleEvent): Replaced call to SwingUtilities' 
+ 	convertMouseEvent (with identical source and desination) with a simple 
+ 	cast.  If acquireComponentForMouseEvent reveals we're going to 
+ 	re-dispatch this event to ourselves (and loop infinitely), return. Also
+ 	replaced contentPane by glassPane as the source argument to 
+ 	SwingUtilities.convertMouseEvent since the glassPane is the real
+ 	source.
+ 
+ 2005-09-19  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicArrowButton.java
+ 	(paintTriangle): minor correction to highlight on triangle for disabled
+ 	buttons.
+ 	
+ 2005-09-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/print/DocFlavor.java (BYTE_ARRAY.serialVersionUID): New field.
+ 	(INPUT_STREAM.serialVersionUID): Likewise.
+ 
+ 2005-09-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/DateFormat.java (serialVersionUID): New field.
+ 
+ 2005-19-19  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(selectPath): Changed so DISCONTIGUOUS_TREE_SELECTION is the
+ 	default.
+ 	* javax/swing/JTree.java
+ 	(AccessibleJTreeNode): Initialized all fields.
+ 	(addAccessibleSelection): Implemented.
+ 	(clearAccessibleSelection): Implemented.
+ 	(doAccessibleAction): Implemented.
+ 	(getAccessibleAction): Implemented.
+ 	(getAccessibleActionCount): Implemented.
+ 	(getAccessibleActionDescription): Implemented.
+ 	(getAccesssibleChild): Remove mod variable, made global.
+ 	(getAccessibleComponent): Changed to return this, since this
+ 	class implements AccessibleComponent.
+ 	(getAccessibleSelection): Likewise.
+ 	(getAccessibleSelection): Implemented.
+ 	(getAccessibleSelectionCount): Implemented.
+ 	(getAccessibleStateSet): Remove mod variable, made global.
+ 	(getCursor): Implemented.
+ 	(isAccessibleChildSelected): Remove mod variable, made global.
+ 	(removeAccessibleSelection): Implemented.
+ 	(selectAllAccessibleSelection): Implemented.
+ 	(setCursor): Implemented.
+ 	(AccessibleJTree): Nothing to do.
+ 	(getAccessibleAt): Implemented.
+ 	(getAccessibleSelection): Implemented.
+ 	(getAccessibleSelection): Implemented.	
+ 
+ 2005-09-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/xml/xpath/XPathFunctionException.java (serialVersionUID): New
+ 	field.
+ 	* javax/xml/xpath/XPathFactoryConfigurationException.java
+ 	(serialVersionUID): New field.
+ 	* javax/xml/xpath/XPathExpressionException.java (serialVersionUID): New
+ 	field.
+ 	* javax/xml/xpath/XPathException.java (serialVersionUID): New field.
+ 	* javax/xml/transform/TransformerConfigurationException.java (locator):
+ 	Removed.
+ 	(TransformerConfigurationException): Pass locator to super constructor.
+ 	(serialVersionUID): New field.
+ 	* javax/xml/transform/TransformerFactoryConfigurationError.java
+ 	(serialVersionUID): New field.
+ 	* javax/xml/transform/TransformerException.java (containedException):
+ 	Renamed field.
+ 	(serialVersionUID): New field.
+ 
+ 2005-09-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(UpdateHandler.propertyChange): Handle changes of the editable
+ 	property.
+ 	(paintBackground): Moved implementation to
+ 	UpdateHandler.propertyChange. This method itself should not fill
+ 	the background.
+ 
+ 2005-09-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-net/java_net_VMInetAddress.c
+ 	(Java_java_net_VMInetAddress_getHostByAddr): Add error string as
+ 	exception message.
+ 	* native/jni/java-net/javanet.c (_javanet_accept): Likewise.
+ 	(_javanet_shutdownInput): Likewise.
+ 	(_javanet_shutdownOutput): Likewise.
+ 
+ 2005-09-19  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/border/TitledBorder.java
+ 	(paintBorder): Correctly set the Y offset for the border title.
+ 	(getMeasurements): Determine the correct Y offset for the border
+ 	title.
+ 
+ 2005-09-19  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* java/awt/Checkbox.java:
+ 	(Checkbox): Properly set as selected checkbox in corresponding
+ 	checkbox group.
+ 	(paramString): Removed checkbox group information.
+ 	* java/awt/Component.java:
+ 	(paramString): Removed redundant "=".
+ 
+ 2005-09-19  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(installComponents): call configureArrowButton after creating button,
+ 	(configureEditor): set the selected item,
+ 	(configureArrowButton): set a zero margin,
+ 	(getPreferredSize): delegate to getMinimumSize(),
+ 	(getMinimumSize): now uses code that was in getPreferredSize(),
+ 	(getDefaultSize): reduce default height,
+ 	(ComboBoxLayoutManager.layoutComponent): use comboBox height as button
+ 	width,
+ 	(PropertyChangeHandler.propertyChange): set font on arrow button,
+ 	* javax/swing/plaf/metal/MetalComboBoxUI.java
+ 	(instances): deleted field,
+ 	(MetalComboBoxLayoutManager): new class,
+ 	(MetalPropertyChangeListener): new class,
+ 	(MetalComboPopup): new class,
+ 	(createUI): just return new instance,
+ 	(createEditor): implemented,
+ 	(createPopup): implemented,
+ 	(createArrowButton): implemented,
+ 	(createPropertyChangeListener): implemented,
+ 	(paint): implemented,
+ 	(editablePropertyChanged): implemented,
+ 	(createLayoutManager): implemented,
+ 	(removeListeners): implemented,
+ 	(getMinimumSize): implemented.
+ 
+ 2005-09-19  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_dispose): Fix double
+ 	unreferencing pfont->font. Unref pfont->layout instead.
+ 
+ 2005-09-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/Timer.java (TaskQueue.purge): New method.
+ 	(Timer(String)): New constructor.
+ 	(Timer(String,boolean)): Likewise.
+ 	(purge): New method.
+ 
+ 2005-09-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Short.java (valueOf): New method.
+ 	* java/lang/Double.java (valueOf): New method.
+ 	* java/lang/Float.java (valueOf): New method.
+ 
+ 2005-09-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Long.java (reverse): Correctly handle sign extension.
+ 
+ 2005-09-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(installComponents): remove listBox color settings,
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): corrected ComboBox and ListBox defaults.
+ 
+ 2005-09-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxRenderer.java
+ 	(BasicComboBoxRenderer): set no focus border,
+ 	(getListCellRendererComponent): set background color if cell has focus,
+ 	removed border switching code.
+ 
+ 2005-09-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(borderInsets): deleted,
+ 	(arrowButtonWidth): deleted,
+ 	(configureEditor): set font,
+ 	(isFocusTraversable): set to true for non-editable combobox,
+ 	(paint): deleted border painting code,
+ 	(paintBorder): deleted,
+ 	(getPreferredSize): returns a value, not null,
+ 	(getMinimumSize): likewise,
+ 	(getMaximumSize): likewise,
+ 	(rectangleForCurrentValue): reimplemented,
+ 	(paintCurrentValue): no longer adjusts for border insets,
+ 	(getDisplaySize): update maximum width and height independently,
+ 	(ComboBoxLayoutManager): removed redundant 'extends Object',
+ 	(ComboBoxLayoutManager.preferredLayoutSize): call getPreferredSize(),
+ 	(ComboBoxLayoutManager.minimumLayoutSize): delegate to 
+ 	preferredLayoutSize(),
+ 	(ComboBoxLayoutManager.layoutContainer): use arrow button preferred 
+ 	size in layout,
+ 	(PropertyChangeHandler.propertyChange): added 'font' handling.
+ 
+ 2005-09-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(installListeners): add listener to arrowButton instead of comboBox,
+ 	deleted call to configureArrowButton(),
+ 	(uninstallListeners): remove listener from arrowButton instead of 
+ 	comboBox, and deleted call to unconfigureArrowButton(),
+ 	(configureArrowButton): set font and enabled state, deleted 
+ 	addMouseListener() call,
+ 	(unconfigureArrowButton): deleted removeMouseListener() call,
+ 	(MouseHandler.mousePressed): just toggle display status of popup,
+ 	(MouseHandler.mouseReleased): deleted.
+ 
+ 2005-09-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(largestItemSize): renamed displaySize,
+ 	(getLargestItemSize): renamed getDisplaySize and changed to protected,
+ 	(ComboBoxLayoutManager.preferredLayoutSize): updated for renamed field 
+ 	and method,
+ 	(ListDataHandler.intervalAdded): likewise,
+ 	(ListDataHandler.intervalRemoved): likewise.
+ 
+ 2005-09-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java:
+ 	Updated API docs all over.
+ 
+ 2005-09-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/RuleBasedCollator.java:
+ 	Fixed spelling error in comment.
+ 
+ 2005-09-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .settings/org.eclipse.jdt.ui.prefs: Add file template.
+ 
+ 2005-09-17  Anthony Green  <green@redhat.com>
+ 
+ 	* java/security/Security.java (getProviders): Pre-allocate the
+ 	target array for Collection.toArray call.
+ 	* gnu/java/security/PolicyFile.java (parse): Ditto.
+ 	* javax/swing/filechooser/FileSystemView.java: Ditto.
+ 	* javax/swing/JFileChooser.java (getChoosableFileFilters): Ditto.
+ 
+ 2005-09-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/22963:
+ 	* java/nio/charset/Charset.java (forName): Javadoc fix.
+ 	(providers2): Use ServiceFactory.
+ 
+ 2005-09-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* org/ietf/jgss/GSSException.java (BAD_BINDINGS, BAD_MECH,
+ 	BAD_NAME, BAD_NAMETYPE, CONTEXT_EXPIRED, CREDENTIALS_EXPIRED,
+ 	DEFECTIVE_CREDENTIAL, DEFECTIVE_TOKEN, DUPLICATE_TOKEN, FAILURE,
+ 	NO_CONTEXT, NO_CRED, OLD_TOKEN): Document official RFC values.
+ 
+ 2005-09-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Short.java (SIZE): New constant.
+ 	(MIN_CACHE, MAX_CACHE): Likewise.
+ 	(shortCache): New field.
+ 	(reverseBytes): New method.
+ 	* java/lang/Long.java (SIZE): New constant.
+ 	(valueOf): New method.
+ 	(bitCount): New method.
+ 	(rotateLeft): New method.
+ 	(rotateRight): New method.
+ 	(highestOneBit): New method.
+ 	(numberOfLeadingZeros): New method.
+ 	(lowestOneBit): New method.
+ 	(numberOfTrailingZeros): New method.
+ 	(signum): New method.
+ 	(reverseBytes): New method.
+ 	(reverse): New method.
+ 	* java/lang/Float.java (SIZE): New constant.
+ 	* java/lang/Double.java (SIZE): New constant.
+ 	* java/lang/Character.java (SIZE): New constant.
+ 	(MAX_CACHE): Likewise.
+ 	(charCache): New field.
+ 	(valueOf): New method.
+ 	(reverseBytes): Likewise.
+ 	* java/lang/Byte.java (SIZE): New constant.
+ 	(byteCache): New field.
+ 	(valueOf): New method.
+ 	* java/lang/Boolean.java (parseBoolean): New method.
+ 
+ 2005-09-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by David Lichteblau <david@lichteblau.com>
+ 	* native/jni/classpath/jcl.c (JCL_NewRawDataObject): Create
+ 	NewGlobalRef before calling DeleteLocalRef.
+ 
+ 2005-09-17  Paul Jenner  <psj@harker.dyndns.org>
+ 
+ 	* configure.ac: Clarify that Werror configure option is
+ 	disabled by default.
+ 
+ 2005-09-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Reindent boilerplate.
+ 
+ 2005-09-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/prefs/Preferences.java (systemNodeForPackage):
+ 	Javadoc fix.
+ 	(userNodeForPackage): Likewise.
+ 	* java/util/logging/LoggingPermission.java (serialVersionUID):
+ 	New field.
+ 	* java/io/ObjectInputStream.java (parseContent): Javadoc fix.
+ 
+ 2005-09-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/home.wml: Update mauve link.
+ 
+ 2005-09-16  Anthony Green  <green@redhat.com>
+ 
+ 	PR libgcj/20198
+ 	* java/net/URLClassLoader.java (FileURLLoader.getResource): File
+ 	resources should all have canonicalized names.
+ 
+ 2005-09-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(AccessibleJTreeNode): Fixed documentation.
+ 	(addAccessibleSelection): Likewise, still needs to 
+ 	be implemented.
+ 	(addFocusListener): Implemented.
+ 	(addPropertyChangeListener): Implemented.
+ 	(clearAccessibleSelection): Implemented.
+ 	(contains): Implemented.
+ 	(doAccessibleAction): Fixed documentation, still
+ 	needs to be implemented.
+ 	(getAccessibleAction): Likewise.
+ 	(getAccessibleActionCount): Likewise.
+ 	(getAccessibleActionDescription): Implemented.
+ 	(getAccessibleAt): Implemented.
+ 	(getAccessibleChild): Implemented.
+ 	(getAccessibleChildrenCount): Implemented.
+ 	(getAccessibleComponent): Fixed documentation.
+ 	(getAccessibleContext): Implemented.
+ 	(getAccessibleDescription): Implemented.
+ 	(getAccessibleIndexInParent): Implemented.
+ 	(getAccessibleName): Implemented.
+ 	(getAccessibleParent): Fixed documentation.
+ 	(getAccessibleRole): Likewise.
+ 	(getAccessibleSelection): Likewise, still needs to 
+ 	be implemented.
+ 	(getAccessibleSelection): Likewise.
+ 	(getAccessibleSelectionCount): Implemented.
+ 	(getAccessibleStateSet): Implemented.
+ 	(getAccessibleText): Fixed documentation.
+ 	(getAccessibleValue): Likewise.
+ 	(getBackground): Implemented.
+ 	(getBounds): Implemented.
+ 	(getCursor): Fixed documentation, still needs to be 
+ 	implemented.
+ 	(getFont): Implemented.
+ 	(getFontMetrics): Implemented.
+ 	(getForeground): Implemented.
+ 	(getLocale): Implemented.
+ 	(getLocation): Implemented.
+ 	(getLocationInJTree): Implemented.
+ 	(getLocationOnScreen): Implemented.
+ 	(getSize): Implemented.
+ 	(isAccessibleChildSelected): Implemented.
+ 	(isEnabled): Implemented.
+ 	(isFocusTraversable): Implemented.
+ 	(isShowing): Implemented.
+ 	(isVisible): Implemented.
+ 	(removeAccessibleSelection): Fixed documentation, need to 
+ 	fix current implementation.
+ 	(removeFocusListener): Implemented.
+ 	(removePropertyChangeListener): Implemented.
+ 	(requestFocus): Implemented.
+ 	(selectAllAccessibleSelection): Need to implement. Added FIXME.
+ 	(setAccessibleDescription): Implemented.
+ 	(setAccessibleName): Implemented.
+ 	(setBackground): Implemented.
+ 	(setBounds): Implemented.
+ 	(setCursor): Fixed documentation, still need to implement.
+ 	(setEnabled): Implemented.
+ 	(setFont): Implemented.
+ 	(setForeground): Implemented.
+ 	(setLocation): Implemented.
+ 	(setSize): Implemented.
+ 	(setVisible): Implemented.
+ 	(AccessibleJTree): Fixed documentation, still need
+ 	to implement.
+ 	(addAccessibleSelection): Implemented.
+ 	(clearAccessibleSelection): Implemented.
+ 	(fireVisibleDataPropertyChange): Implemented.
+ 	(getAccessibleAt): Fixed documentation, need to implement.
+ 	(getAccessibleChild): Implemented.
+ 	(getAccessibleChildrenCount): Implemented.
+ 	(getAccessibleIndexInParent): Fixed documentation.
+ 	(getAccessibleRole): Likewise.
+ 	(getAccessibleSelection): Likewise, still need to implement.
+ 	(getAccessibleSelection): Likewise.
+ 	(getAccessibleSelectionCount): Implemented.
+ 	(isAccessibleChildSelected): Implemented.
+ 	(removeAccessibleSelection): Implemented.
+ 	(selectAllAccessibleSelection): Implemented.
+ 	(treeCollapsed): Implemented.
+ 	(treeExpanded): Implemented.
+ 	(treeNodesChanged): Implemented.
+ 	(treeNodesInserted): Implemented.
+ 	(treeNodesRemoved): Implemented.
+ 	(treeStructureChanged): Implemented.
+ 	(valueChanged): Implemented.
+ 	(TreeModelListener): Fixed documentation.
+ 
+ 2005-09-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/PrintWriter.java (PrintWriter): New constructors.
+ 
+ 2005-09-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/22689:
+ 	* java/io/PrintWriter.java (closed): New field.
+ 	(checkError): Only flush if stream not closed.
+ 	(close): Set 'closed'.
+ 
+ 2005-09-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Character.java (MIN_SURROGATE, MAX_SURROGATE): New
+ 	constants.
+ 	(isHighSurrogate): New method.
+ 	(isLowSurrogate): Likewise.
+ 	(isSurrogatePair): Likewise.
+ 	(toCodePoint): Likewise.
+ 	(codePointAt): Likewise.
+ 	(codePointBefore): Likewise.
+ 	* java/lang/StringBuffer.java (codePointCount): Check bounds.
+ 	(codePointAt): Rewrote.
+ 	(codePointBefore): Likewise.
+ 	* java/lang/String.java (codePointAt): New method.
+ 	(codePointBefore): Likewise.
+ 	(codePointCount): Likewise.
+ 	(contentEquals): New overload.
+ 
+ 2005-09-16  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* javax/swing/ProgressMonitor: Implemented the former stubbed
+ 	class and added documentation.
+ 	(close): Implemented and added documentation.
+ 	(setProgress): Dito.
+ 	(isCanceled): Dito.
+ 	(setMinimum): Added documentation.
+ 	(getMinimum): Dito.
+ 	(setMaximum): Dito.
+ 	(getMaximum): Dito.
+ 	(setNote): Dito.
+ 	(getMillisToDecideToPopup): Dito.
+ 	(setMillisToDecideToPopup): Dito.
+ 	(getMillisToPopup): Dito.
+ 	(setMillisToPopup): Dito.
+ 	(getNote): Dito.
+ 	* javax/swing/ProgressMonitorInputStream: Implemented stub
+ 	methods.
+ 	(close): Implemented.
+ 	(read): Dito.
+ 	(reset): Dito.
+ 	(skip): Dito.
+ 	(getProgressMonitor): Dito.
+ 	
+ 2005-09-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/23882:
+ 	* java/text/StringCharacterIterator.java (StringCharacterIterator): 
+ 	Javadoc fix.
+ 	(hashCode): New method.
+ 	* java/text/ParsePosition.java (hashCode): New method
+ 
+ 2005-09-16    Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/Timer.java (Waker.run): Do not enter loop on 
+ 	repeats = false (fixes #23918).
+ 
+ 2005-09-16  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/io/ObjectStreamClass.java (findAccessibleMethod): Allow
+ 	protected readResolve().  Rewrite accessibility check.
+ 
+ 2005-09-16  Andrew Haley  <aph@redhat.com>
+ 
+ 	* scripts/loc: New file.
+ 
+ 2005-09-16  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/String.java (getBytes): Throw an InternalError instead
+ 	of silently returning null.
+ 
+ 2005-09-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #22610
+ 	* java/awt/Container.java
+ 	(remove): Removed component listeners from the component
+ 	being removed. This was a problem if that same component
+ 	that was removed was added to a new component.
+ 
+ 2005-09-16  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalComboBoxEditor.java
+ 	(MetalComboBoxEditorBorder.paintBorder): modified border appearance.
+ 
+ 2005-09-16  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxRenderer.java: updated API docs
+ 	and minor reformatting.
+ 
+ 2005-09-16  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JList.java
+ 	(AccessibleJList): New inner class.
+ 
+ 2005-09-16  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/ButtonDemo.java: new file.
+ 
+ 2005-09-16  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(RadioButtonIcon.paintIcon): change color of selection indicator 
+ 	according to component state.
+ 
+ 2005-09-16  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalCheckBoxIcon.java
+ 	(drawCheck): change color according to component state.
+ 
+ 2005-09-16  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(ButtonBorder.paintBorder): draw a different border for a disabled 
+ 	button.
+ 
+ 2005-09-15  Anthony Green  <green@redhat.com>
+ 
+ 	* java/awt/Color.java (RGBtoHSB): Don't use integer division when
+ 	calculating saturation.
+ 	* java/awt/Rectangle.java (equals): Explain why hashCode() isn't
+ 	required.
+ 	* java/awt/Point.java (equals): Ditto.
+ 
+ 	* java/util/zip/ZipFile.java (checkZipFile): Make sure we read the
+ 	4 byte magic number.
+ 
+ 2005-09-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/text/html/parser/DTD.java (FILE_VERSION): Now
+ 	final.
+ 
+ 2005-09-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/Name.java: Extends Comparable.
+ 
+ 2005-09-15  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/Component.java:
+ 	(isDisplayable): Don't check the parent's displayability, only return
+ 	true if peer is non-null and false if peer is null.
+ 
+ 2005-09-15  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(layoutCompoundLabel): check for empty text string,
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paint): check isBorderPainted() when calculating view rect,
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(CloseAction): new constructor,
+ 	(IconifyAction): new constructor,
+ 	(MaximizeAction): new constructor,
+ 	(MoveAction): new constructor,
+ 	(RestoreAction): new constructor,
+ 	(SizeAction): new constructor,
+ 	(TitlePaneLayout.layoutContainer): calculate button widths from icon 
+ 	widths,
+ 	(installDefaults): initialise icon fields,
+ 	(uninstallDefaults): clear icon fields,
+ 	(createButtons): set button text to null,
+ 	(setButtonIcons): use icon fields.
+ 
+ 2005-09-15  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxRenderer.java
+ 	(getListCellRendererComponent): Added code in to check if string
+ 	is larger than comboBox. If it is, the string is truncated and 
+ 	'...' is drawn at the end of it.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(getDefaultSize): Initially too small, still not fully implemented.
+ 	(getLargestItemSize): Made private, not in API.
+ 	(minimumLayoutSize): Implemented properly.
+ 	(intervalAdded): ComboBox should not be resized with every new
+ 	component. This is fixed.
+ 
+ 2005-09-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/EnumConstantNotPresentException.java: New file.
+ 
+ 2005-09-15  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	Reformatted file.
+ 
+ 2005-09-15  Lillian Angel  <langel@redhat.com>
+ 	
+ 	Fixes Bug #23678
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java
+ 	(CBLabelRenderer): Removed. Not in API, and it is really
+ 	redundant to have.
+ 	(installComponents): Changed the renderer set for the combo box.
+ 	Also, added the buttonPanel to the parentsPanel, so they are 
+ 	always painted correctly. Set the FlowLayout to LEFT
+ 	instead of default being CENTER.
+ 
+ 2005-09-15  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JRootPane.java:
+ 	(setContentPane): Remove the old content pane first.  Throw 
+ 	IllegalComponentStateException if the parameter is null.  Added docs.
+ 
+ 2005-09-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Workaround for PR classpath/23863:
+ 	* native/fdlibm/mprec.h (MAX_BIGNUM_WDS): Define as 128 on
+ 	non-Pack_32 platforms.
+ 
+ 2005-09-15  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/Component.java:
+ 	(isDisplayable): Return true if peer != null.
+ 	* java/awt/Window.java:
+ 	(isDisplayable): Removed this method. Now inherits from Component.
+ 
+ 2005-09-15  Anthony Green  <green@redhat.com>
+ 
+ 	* java/io/PushbackInputStream.java (available, read, skip): Handle
+ 	closed stream operations gracefully.
+ 
+ 2005-09-15  Anthony Green  <green@redhat.com>
+  
+ 	* java/nio/charset/Charset.java: close() each stream we open.
+ 	* java/net/URLStreamHandler.java: Remove redundant null pointer
+ 	check.
+ 	* java/security/Identity.java (equals, identityEquals): Don't use
+  	`==' to compare uninterned Strings.  Use String.equals().
+ 	* java/lang/Class.java (pd): Mark this field as transient for
+ 	FindBugs won't complain (although not strictly necessary).
+ 
+ 2005-09-15  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTextArea.java:
+ 	(append): Changed invalidate call to revalidate call.
+ 	(setRows): Likewise.
+ 	(setColumns): Likewise.
+ 
+ 2005-09-15  Lillian Angel  <langel@redhat.com>
+ 	
+ 	Fixes #23873
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(createMessageArea): Changed orientation of message from EAST to
+ 	CENTER. Also, fixed empty border values to make message more centered.
+ 	* javax/swing/JOptionPane.java
+ 	(showConfirmDialog): Added check for pane.getValue, since clicking on 
+ 	'x' of window does not have an initialized value. Was causing a 
+ 	ClassCastException.
+ 	(showConfirmDialog): Likewise.
+ 	(showConfirmDialog): Likewise.
+ 	(showConfirmDialog): Likewise.
+ 
+ 2005-09-15  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(installDefaults): set font,
+ 	(uninstallDefaults): clear font,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): update ToggleButton defaults,
+ 	* javax/swing/plaf/metal/MetalToggleButtonUI.java
+ 	(instance): removed field,
+ 	(createUI): just return new instance every time,
+ 	(MetalToggleButtonUI): look up defaults directly,
+ 	(getFocusColor): return value from field initialised in constructor,
+ 	(getSelectColor): likewise,
+ 	(getDisabledTextColor): likewise,
+ 	(installDefaults): override to make public,
+ 	(paintButtonPressed): implemented,
+ 	(paintText): implemented,
+ 	(paintFocus): implemented.
+ 
+ 2005-09-15  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(toggleButtonBorder): new private field,
+ 	(ToggleButtonBorder): new class,
+ 	(getToggleButtonBorder): new method.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java
+ 	(insertUpdate): Tweaked attribute comparison to avoid NPE.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java
+ 	(insertUpdate): Tweaked attribute comparison to avoid NPE.
+ 	* javax/swing/text/GlyphView.java
+ 	(DefaultGlyphPainter.getBoundedPosition): Implemented.
+ 	(DefaultGlyphPainter.viewToModel): Implemented.
+ 	(getTabExpander): Don't be specific to ParagraphView here. All
+ 	parents that implement TabExpander can be accepted.
+ 	(getBeginIndex): Removed. This method is not documented in the
+ 	specs.
+ 	(getBreakWeight): Implemented.
+ 	(changedUpdate): Implemented.
+ 	(insertUpdate): Implemented.
+ 	(removeUpdate): Implemented.
+ 	(createFragment): Implemented.
+ 	(breakView): Use createFragment.
+ 	* javax/swing/text/Utilities.java
+ 	(getTabbedTextOffset): Implemented both variants of this method.
+ 
+ 2005-09-14    Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * gnu/CORBA/Connected_objects.java (equals),
+         * gnu/CORBA/Poa/activeObjectMap.java (equals): Removed, fixes
+         #23879.
+         * gnu/CORBA/Version.java (hashCode),
+         * gnu/CORBA/gnuAny.java (hashCode): New method, fixes #23879.
+ 
+ 2005-09-14  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JProgressBar.java
+ 	(JProgressBar): Fixed to use setOrientation function.
+ 	* javax/swing/plaf/metal/MetalProgressBarUI.java
+ 	(createUI): Was using the same instance of the UI for 
+ 	each new JProgressBar. Fixed this.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(installUI): Added call to prepareForUIInstall.
+ 	(uninstallUI): Added call to prepareForUIUninstall.
+ 
+ 2005-09-14  Anthony Balkisoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/text/ComponentView.java:
+ 	(createComponent): Implemented.
+ 
+ 2005-09-14    Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/CosNaming/NameComponent (hashCode): New method,
+         fixes #23883). 
+ 
+ 2005-09-14  Lillian Angel  <langel@redhat.com>
+ 	
+ 	Fixes Bug #23795
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Made private fields package private.
+ 	(setCellRenderer): Took out code that updateRenderer takes
+ 	care of.
+ 	(getPathBounds): Fixed to use treeModel field.
+ 	(getPathForRow): Likewise.
+ 	(getRowCount): Likewise.
+ 	(installComponents): Implemented.
+ 	(createNodeDimensions): Implemented.
+ 	(uninstallComponents): Implemented.
+ 	(getVerticalLegBuffer): Implemented.
+ 	(getHorizontalLegBuffer): Implemented.
+ 	(updateLayoutCacheExpandedNodes): Implemented.
+ 	(updateExpandedDescendants): Implemented.
+ 	(updateDepthOffset): Implemented.
+ 	(updateRenderer): Implemented.
+ 	(updateSize): Implemented.
+ 	(installDefaults): Added some more defaults.
+ 	(installUI): Moved code to installComponents.
+ 	(paint): Fixed to use treeModel field.
+ 	(ensureRowsAreVisible): Implemented.
+ 	(getMinimumSize): Implemented.
+ 	(getMaximumSize): Implemented.
+ 	(checkForClickInExpandControl): Implemented.
+ 	(isLocationInExpandControl): Implemented.
+ 	(handleExpandControlClick): Implemented.
+ 	(toggleExpandState): Implemented.
+ 	(isToggleSelectionEvent): Implemented.
+ 	(isMultiSelectEvent): Implemented.
+ 	(isToggleEvent): Implemented.
+ 	(selectPathForEvent): Implemented.
+ 	(actionPerformed): Changed to use toggleExpandState.
+ 	(mousePressed): Fixed code to use helper methods. Made
+ 	more efficent.
+ 	(TreeCancelEditingAction): Fixed Constructor signature.
+ 	(actionPerformed): Fixed to use treeModel field.
+ 	(paintRecursive): Fixed to use line drawing helper methods.
+ 	(paintControlIcons): Fixed to use control icons helper methods.
+ 	(getCurrentControlIcon): New method.
+ 	(findNode): Changed to use treeModel field.
+ 	(getNextNode): Likewise.
+ 	(getPreviousNode): Likewise.
+ 	(getNextSibling): Likewise.
+ 	(getPreviousSibling): Likewise.
+ 	(getPathToRoot): Likewise.
+ 	(drawDashedHorizontalLine): Implemented.
+ 	(drawDashedVerticalLine): Implemented.
+ 	(paintExpandControl): Implemented.
+ 	(paintHorizontalPartOfLeg): New method.
+ 	(paintVerticalPartOfLeg): New method.
+ 	(paintRow): New method.
+ 	(shouldPaintExpandControl): New Method.
+ 	* javax/swing/plaf/metal/MetalTreeUI.java:
+ 	Added private fields for listeners.
+ 	(getHorizontalLegBuffer): Implemented.
+ 	(installUI): Implemented.
+ 	(uninstallUI): Implemented.
+ 	(decodeLineStyle): New method.
+ 	(isLocationInExpandControl): Implemented.
+ 	(paint): Implemented.
+ 	(paintHorizontalSeparators): New method.
+ 	(paintVerticalPartOfLeg): Implemented.
+ 	(paintHorizontalPartOfLeg): Implemented.
+ 
+ 2005-09-14  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTextArea.java:
+ 	(append): After non-empty append, invalidate.
+ 	(setRows): If number of rows changes, invalidate.
+ 	(setColumns): If number of columns changes, invalidate.
+ 
+ 2005-09-14  Anthony Green  <green@redhat.com>
+ 
+ 	* java/net/InetSocketAddress.java (toString): Adjust to match Sun
+ 	JRE output, which is [HOSTNAME]/[IPADDRESS]:[PORT].
+ 	* gnu/java/security/der/DERReader.java: Remove stray semicolon.
+ 	* gnu/xml/pipeline/ValidationConsumer.java: Fix flags test (was
+ 	constant expression).
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java,
+ 	* javax/swing/filechooser/FileSystemView.java,
+ 	* java/util/logging/LogManager.java,
+ 	* gnu/xml/libxmlj/dom/GnomeDocument.java,
+ 	* gnu/xml/aelfred2/JAXPFactory.java,
+ 	* gnu/java/security/x509/ext/Extension.java,
+ 	* gnu/java/security/x509/ext/BasicConstraints.java,
+ 	* gnu/java/rmi/server/RMIObjectInputStream.java,
+ 	* gnu/java/rmi/dgc/DGCImpl_Stub.java,
+ 	* gnu/java/beans/decoder/BooleanHandler.java: Use
+ 	Boolean.valueOf() instead of new Boolean.
+ 
+ 2005-09-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/StringBuffer.java (StringBuffer): New constructor.
+ 	(trimToSize): New method.
+ 	(codePointAt): Likewise.
+ 	(codePointBefore): Likewise.
+ 	(codePointCount): Likewise.
+ 	(appendCodePoint): Likewise.
+ 	(append): New overloads.
+ 	(insert): Likewise.
+ 
+ 2005-09-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Character.java: Typo fixes in javadoc.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(calculateTabWidth): Don't use the calcRect here. This lead to an
+ 	inconsistent state when this method is called from another method
+ 	that also uses calcRect.
+ 	(calculateTabHeight): Don't use the calcRect here. This lead to an
+ 	inconsistent state when this method is called from another method
+ 	that also uses calcRect.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	Reformatted file.
+ 
+ 2005-09-14  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/io/ObjectInputStream.java:
+ 	(readObject()): Moved marker parsing to its own method.
+ 	(parseContent(byte)): Fixed TC_OBJECT handling to loop on
+ 	blockdata written manually by the class.
+ 	
+ 2005-09-14  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* native/jni/classpath/jcl.c: Replaced undefined 	
+ 	POINTERS_ARE_64BIT with SIZEOF_VOID_P == 8.
+ 
+ 2005-09-14  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(PaletteCloseIcon): now implements UIResource.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/ButtonModel.java: Added API docs all over.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTabbedPane.java: Added API comments to make clear
+ 	that null values for tab titles are allowed.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	Fixes Bug#23859.
+ 	* javax/swing/JTabbedPane.java
+ 	(insertTab): Check if title == null and if so, then set it
+ 	to "". Otherwise the null string would cause a segfault or
+ 	an assertion failure in font metrics calculation as reported
+ 	in bug#23859.
+ 
+ 2005-09-14  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* gnu/CORBA/ExceptionCreator.java: minor API doc fixes,
+ 	* gnu/CORBA/Version.java: likewise.
+ 
+ 2005-09-14  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicFormattedTextFieldUI.java:
+ 	(getPropertyPrefix): added API docs,
+ 	* javax/swing/plaf/basic/BasicPasswordFieldUI.java:
+ 	(getPropertyPrefix): added API docs,
+ 	* javax/swing/plaf/basic/BasicTextAreaUI.java:
+ 	(getPropertyPrefix): added API docs,
+ 	* javax/swing/plaf/basic/BasicTextFieldUI.java:
+ 	(getPropertyPrefix): added API docs,
+ 	* javax/swing/plaf/basic/BasicTextPaneUI.java:
+ 	(getPropertyPrefix): added API docs.
+ 
+ 2005-09-14  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* org/omg/CORBA/ORB.java: minor API doc fixes,
+ 	* org/omg/CORBA/PERSIST_STORE.java: likewise,
+ 	* org/omg/CORBA/PolicyError.java: likewise,
+ 	* org/omg/CORBA/ValueBaseHolder.java: likewise,
+ 	* org/omg/CORBA/VisibilityHelper.java: likewise.
+ 
+ 2005-09-14  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalComboBoxIcon.java: fixed header,
+ 	(paintIcon): change color to reflect component state.
+ 
+ 2005-09-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .settings/org.eclipse.jdt.core.prefs: Ignore javadoc warnings
+ 	for hidden or deprecated members.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	Bumped up serialVersionUIDs to JDK 1.5 compatibility.
+ 	(getContent): Made method final.
+ 	(AbstractElement.dumpElement): Removed superfluous private method.
+ 	(AbstractElement.dump): Made diagnostic output more speaking.
+ 	* javax/swing/text/BoxView.java
+ 	(paintChild): Don't allocate the child region here.
+ 	(paint): Allocate the child region here instead.
+ 	* javax/swing/text/ComponentView.java:
+ 	Added API doc comments.
+ 	* javax/swing/text/CompositeView.java
+ 	(getNextVisualPositionFrom): Declared to throw BadLocationException.
+ 	(getNextNorthSouthVisualPositionFrom): Likewise.
+ 	(getNextEastWestVisualPositionFrom): Likewise.
+ 	* javax/swing/text/DefaultCaret.java
+ 	Bumped up serialVersionUIDs to JDK 1.5 compatibility.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	Slight reformatting.
+ 	* javax/swing/text/DefaultFormatter.java
+ 	Bumped up serialVersionUIDs to JDK 1.5 compatibility.
+ 	* javax/swing/text/DefaultStyledEditorKit.java
+ 	(ElementBuffer.insertUpdate): Removed unneeded statement.
+ 	(ElementBuffer.insertStartTag): Attach a resolve parent to new
+ 	paragraph elements.
+ 	(createDefaultRoot): Attach a resolve parent to new paragraph
+ 	elements.
+ 	* javax/swing/text/InternationalFormatter.java
+ 	Bumped up serialVersionUIDs to JDK 1.5 compatibility.
+ 	* javax/swing/text/JTextComponent.java
+ 	Slight reformatting.
+ 	(paramString): Added TODO comment.
+ 	* javax/swing/text/SimpleAttributeSet.java
+ 	Bumped up serialVersionUIDs to JDK 1.5 compatibility.
+ 	(equals): Don't require object to be SimpleAttributeSet. Allows
+ 	comparing to all kinds of AttributeSets.
+ 	(isEqual): Likewise.
+ 	* javax/swing/text/StringContent.java
+ 	Bumped up serialVersionUIDs to JDK 1.5 compatibility.
+ 	* javax/swing/text/StyleConstants.java
+ 	(getBackground): Return white as default background instead of black.
+ 	* javax/swing/text/StyleConstext.java
+ 	Bumped up serialVersionUIDs to JDK 1.5 compatibility.
+ 	(SmallAttributeSet.equals):  Don't require object to be
+ 	SmallAttributeSet. Allows comparing to all kinds of AttributeSets.
+ 	* javax/swing/text/StyledEditorKit.java
+ 	Fixed some comments.
+ 	* javax/swing/text/TabSet.java
+ 	Bumped up serialVersionUIDs to JDK 1.5 compatibility.
+ 	* javax/swing/text/TabStop.java
+ 	Bumped up serialVersionUIDs to JDK 1.5 compatibility.
+ 	* javax/swing/text/View.java
+ 	Removed unneeded import.
+ 	
+ 2005-09-14  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* javax/swing/JOptionPane.java:
+ 	(showConfirmDialog): Changed QUESTION_MESSAGE like the JDK
+ 	does.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	(getButtons): Treat DEFAULT_OPTION like
+ 	YES_NO_CANCEL_OPTION like the JDK.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/GapContent.java
+ 	(GapContentPosition.getOffset): Made assertion more speaking.
+ 	(GapContent): Modified initialization for compatibility with JDK.
+ 	(shiftEnd): Update marks prior to modification of the content.
+ 	Use new getPositionsInRange method.
+ 	(shiftGap): Use new getPositionsInRange method. Tweaked to corectly
+ 	update the marks.
+ 	(shiftGapStartDown): New method.
+ 	(shiftGapEndUp): New method.
+ 	(replace): Use shiftGapEndUp. Modified resizing offset.
+ 	(getGapStart): New method.
+ 	(getGapEnd): New method.
+ 	(getPositionsInRange): New method.
+ 
+ 2005-09-14  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/GlyphView.java
+ 	(AbstractGlyphPainter.getAscent): New abstract method.
+ 	(AbstractGlyphPainter.getDescent): New abstract method.
+ 	(AbstractGlyphPainter.getBoundedPosition): New abstract method.
+ 	(AbstractGlyphPainter.viewToModel): New abstract method.
+ 	(AbstractGlyphPainter.getNextVisualPositionFrom): New method.
+ 	(AbstractGlyphPainter.getPainter): New method.
+ 	(DefaultGlyphPainter.paint): Add support for more text attributes.
+ 	(DefaultGlyphPainter.getAscent): New method.
+ 	(DefaultGlyphPainter.getDescent): New method.
+ 	(DefaultGlyphPainter.getBoundedPosition): New method.
+ 	(DefaultGlyphPainter.viewToModel): New method.
+ 	(GlyphView): Store start and end offset in the GlyphView.
+ 	(getPreferredSpan): Differentiate the axis parameter.
+ 	(viewToModel): Implemented this method.
+ 	(getStartOffset): Return value of private field instead of the
+ 	element value.
+ 	(getEndOffset): Return value of private field instead of the
+ 	element value.
+ 	(getBackground): New method.
+ 	(isStrikeThrough): New method.
+ 	(isSubscript): New method.
+ 	(isSuperscript): New method.
+ 	(isUnderline): New method.
+ 	(clone): New method.
+ 	(breakView): New method.
+ 	(getBreakWeight): New method.
+ 	(changedUpdate): New method.
+ 	(insertUpdate): New method.
+ 	(removeUpdate): New method.
+ 	(createFragment): New method.
+ 	(getAlignment): New method.
+ 	(getNextVisualPositionFrom): New method.
+ 
+ 2005-09-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/regex/Matcher.java (matches): Javadoc fix.
+ 	(start): Likewise.
+ 	* java/lang/reflect/Proxy.java (equals): Javadoc fix.
+ 	* java/io/ObjectInputStream.java (inputGetObjectStreamClasses): Javadoc
+ 	fix.
+ 	* java/util/zip/ZipFile.java (getEntry): Javadoc fix.
+ 	* java/util/logging/XMLFormatter.java (getHead): Javadoc fix.
+ 	* java/util/logging/LogManager.java (getLevelProperty): Javadoc fix.
+ 	* java/util/logging/Handler.java (getEncoding): Javadoc fix.
+ 	(setFilter): Likewise.
+ 	* java/util/logging/FileHandler.java: Organized imports.
+ 	* java/util/jar/Manifest.java (Manifest): Javadoc fix.
+ 	* java/util/TreeMap.java (putFromObjStream): Javadoc fix.
+ 	* java/util/SimpleTimeZone.java (isBefore): Javadoc fix.
+ 	* java/util/ResourceBundle.java (tryBundle): Javadoc fix.
+ 	* java/util/Random.java (seed): Javadoc fix.
+ 	* java/util/Collections.java (SynchronizedSortedSet): Javadoc fix.
+ 	(SingletonMap): Likewise.
+ 	(addAll): Javadoc fix.
+ 	* java/lang/reflect/UndeclaredThrowableException.java: Javadoc fix.
+ 	* java/lang/reflect/Member.java (DECLARED, PUBLIC): Javadoc fix.
+ 	* java/lang/ref/WeakReference.java: Javadoc fix.
+ 	* java/lang/ref/Reference.java: Javadoc fix.
+ 	(Reference): Likewise.
+ 	* java/lang/Thread.java (setContextClassLoader): Javadoc fix.
+ 	(getContextClassLoader): Likewise.
+ 	(stop): Likewise.
+ 	* java/lang/System.java (runFinalizersOnExit): Javadoc fix.
+ 	* java/lang/String.java (upperExpand): Javadoc fix.
+ 	* java/lang/StrictMath.java: Javadoc fixes.
+ 	* java/lang/SecurityManager.java: Added imports for javadoc.
+ 	(currentClassLoader): Javadoc fix.
+ 	(classLoaderDepth): Likewise.
+ 	(currentLoadedClass): Likewise.
+ 	(checkRead): Likewise.
+ 	(checkWrite): Likewise.
+ 	(checkAccess): Likewise.
+ 	* java/lang/RuntimePermission.java: Added import for javadoc.
+ 	* java/lang/Readable.java (read): Added import for javadoc.
+ 
+ 2005-09-13  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/classpath/ByteArray.java: new file.
+ 	* gnu/java/security/provider/Gnu.java
+ 	(<init>): add Diffie Hellman and RSA algorithms.
+ 	* gnu/javax/crypto/DiffieHellmanImpl.java: new file.
+ 	* gnu/javax/crypto/GnuDHPrivateKey.java: new file.
+ 	* gnu/javax/crypto/RSACipherImpl.java: new file.
+ 
+ 2005-09-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalComboBoxButton.java: new file,
+ 	* javax/swing/plaf/metal/MetalComboBoxEditor.java: likewise.
+ 
+ 2005-09-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Process.java: Added import for javadoc.
+ 	* java/lang/Object.java (notify): Javadoc fix.
+ 	(notifyAll): Likewise.
+ 	* java/io/PipedInputStream.java (connect): Javadoc fix.
+ 	* java/io/OutputStreamWriter.java: Organized imports.
+ 	* java/io/ObjectStreamField.java (setOffset): Javadoc fix.
+ 	* java/io/ObjectInputStream.java (readFields): Javadoc fix.
+ 	* java/io/DataOutputStream.java (writeChars): Javadoc fix.
+ 	(writeFloat): Likewise.
+ 	(writeDouble): Likewise.
+ 	* java/util/Locale.java (readObject): Javadoc fix.
+ 	(writeObject): Likewise.
+ 	* java/io/LineNumberReader.java (read): Javadoc fix.
+ 	(setLineNumber): Likewise.
+ 	(mark): Likewise.
+ 	* java/io/InputStreamReader.java: Updated imports.
+ 	* java/lang/Integer.java (parseInt): Javadoc fix.
+ 	* java/io/FilterReader.java (skip): Javadoc fix.
+ 	* java/util/HashMap.java (containsValue): Javadoc fix.
+ 	* java/lang/ClassLoader.java (findLibrary): Javadoc fix.
+ 	(setPackageAssertionStatus): Likewise.
+ 	(setClassAssertionStatus): Likewise.
+ 	* java/lang/Class.java: Added imports for javadoc.
+ 	(matchMethod): Javadoc fix.
+ 	* java/util/ArrayList.java (readObject): Javadoc fix.
+ 	(writeObject): Likewise.
+ 	* java/lang/String.java (CaseInsensitiveComparator): Javadoc fix.
+ 	* java/util/zip/PendingBuffer.java (toByteArray): Javadoc fix.
+ 	* javax/swing/plaf/metal/OceanTheme.java: Mark as 1.5.
+ 	* java/util/logging/SimpleFormatter.java (format): Javadoc fix.
+ 	* java/util/zip/ZipFile.java (getEntries): Javadoc fix.
+ 
+ 2005-09-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(lightHighlight): removed,
+ 	(installDefaults): only update component attributes if they are tagged
+ 	with UIResource, initialise button colors from correct defaults,
+ 	(uninstallDefaults): only clear attributes that are tagged with
+ 	UIResource.
+ 
+ 2005-09-13  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(AccessibleJTree): Added new Inner class.
+ 	(AccessibleJTree.addAccessibleSelection): New method.
+ 	(AccessibleJTree.clearAccessibleSelection): New method.
+ 	(AccessibleJTree.fireVisibleDataPropertyChange): New method.
+ 	(AccessibleJTree.getAccessibleAt): New method.
+ 	(AccessibleJTree.getAccessibleChild): New method.
+ 	(AccessibleJTree.getAccessibleChildrenCount): New method.
+ 	(AccessibleJTree.getAccessibleIndexInParent): New method.
+ 	(AccessibleJTree.getAccessibleRole): New method.
+ 	(AccessibleJTree.getAccessibleSelection): New method.
+ 	(AccessibleJTree.getAccessibleSelection): New method.
+ 	(AccessibleJTree.getAccessibleSelectionCount): New method.
+ 	(AccessibleJTree.isAccessibleChildSelected): New method.
+ 	(AccessibleJTree.removeAccessibleSelection): New method.
+ 	(AccessibleJTree.selectAllAccessibleSelection): New method.
+ 	(AccessibleJTree.treeCollapsed): New method.
+ 	(AccessibleJTree.treeExpanded): New method.
+ 	(AccessibleJTree.treeNodesChanged): New method.
+ 	(AccessibleJTree.treeNodesInserted): New method.
+ 	(AccessibleJTree.treeNodesRemoved): New method.
+ 	(AccessibleJTree.treeStructureChanged): New method.
+ 	(AccessibleJTree.valueChanged): New method.
+ 	(AccessibleJTreeNode): Likewise.
+ 	(AccessibleJTreeNode.addAccessibleSelection): New method.
+ 	(AccessibleJTreeNode.addFocusListener): New method.
+ 	(AccessibleJTreeNode.addPropertyChangeListener): New method.
+ 	(AccessibleJTreeNode.clearAccessibleSelection): New method.
+ 	(AccessibleJTreeNode.contains): New method.
+ 	(AccessibleJTreeNode.doAccessibleAction): New method.
+ 	(AccessibleJTreeNode.getAccessibleAction): New method.
+ 	(AccessibleJTreeNode.getAccessibleActionCount): New method.
+ 	(AccessibleJTreeNode.getAccessibleActionDescription): New method.
+ 	(AccessibleJTreeNode.getAccessibleAt): New method.
+ 	(AccessibleJTreeNode.getAccessibleChild): New method.
+ 	(AccessibleJTreeNode.getAccessibleChildrenCount): New method.
+ 	(AccessibleJTreeNode.getAccessibleComponent): New method.
+ 	(AccessibleJTreeNode.getAccessibleContext): New method.
+ 	(AccessibleJTreeNode.getAccessibleDescription): New method.
+ 	(AccessibleJTreeNode.getAccessibleIndexInParent): New method.
+ 	(AccessibleJTreeNode.getAccessibleName): New method.
+ 	(AccessibleJTreeNode.getAccessibleParent): New method.
+ 	(AccessibleJTreeNode.getAccessibleRole): New method.
+ 	(AccessibleJTreeNode.getAccessibleSelection): New method.
+ 	(AccessibleJTreeNode.getAccessibleSelectionCount): New method.
+ 	(AccessibleJTreeNode.getAccessibleStateSet): New method.
+ 	(AccessibleJTreeNode.getAccessibleText): New method.
+ 	(AccessibleJTreeNode.getAccessibleValue): New method.
+ 	(AccessibleJTreeNode.getBackground): New method.
+ 	(AccessibleJTreeNode.getBounds): New method.
+ 	(AccessibleJTreeNode.getCursor): New method.
+ 	(AccessibleJTreeNode.getFont): New method.
+ 	(AccessibleJTreeNode.getFontMetrics): New method.
+ 	(AccessibleJTreeNode.getForeground): New method.
+ 	(AccessibleJTreeNode.getLocale): New method.
+ 	(AccessibleJTreeNode.getLocation): New method.
+ 	(AccessibleJTreeNode.getLocationInJTree): New method.
+ 	(AccessibleJTreeNode.getLocationOnScreen): New method.
+ 	(AccessibleJTreeNode.getSize): New method.
+ 	(AccessibleJTreeNode.isAccessibleChildSelected): New method.
+ 	(AccessibleJTreeNode.isEnabled): New method.
+ 	(AccessibleJTreeNode.isVisible): New method.
+ 	(AccessibleJTreeNode.removeAccessibleSelection): New method.
+ 	(AccessibleJTreeNode.removeFocusListener): New method.
+ 	(AccessibleJTreeNode.removePropertyChangeListener): New method.
+ 	(AccessibleJTreeNode.requestFocus): New method.
+ 	(AccessibleJTreeNode.selectAllAccessibleSelection): New method.
+ 	(AccessibleJTreeNode.setAccessibleDescription): New method.
+ 	(AccessibleJTreeNode.setAccessibleName): New method.
+ 	(AccessibleJTreeNode.setBackground): New method.
+ 	(AccessibleJTreeNode.setBounds): New method.
+ 	(AccessibleJTreeNode.setCursor): New method.
+ 	(AccessibleJTreeNode.setEnabled): New method.
+ 	(AccessibleJTreeNode.setFont): New method.
+ 	(AccessibleJTreeNode.setForeground): New method.
+ 	(AccessibleJTreeNode.setLocation): New method.
+ 	(AccessibleJTreeNode.setVisible): New method.
+ 	(removeDescendantToggledPaths): Implemented.
+ 	(treeDidChange): Implemented.
+ 
+ 2005-09-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jawt/jawt.c (_Jv_AWTLock): Do nothing.
+ 	(_Jv_AWTUnlock): Likewise.
+ 
+ 2005-09-13  David Daney  <ddaney@avtrex.com>
+ 
+ 	* java/io/ByteArrayOutputStream.java: Reformated copyright notice.
+ 	(toString(int)): Pass correct parameters to String constructor.
+ 
+ 2005-09-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JComboBox.java
+ 	(getPrototypeDisplayValue): added API docs,
+ 	(setPrototypeDisplayValue): fire property change event.
+ 	
+ 2005-09-13  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java
+ 	(ElementSpec): New inner class.
+ 	(ElementBuffer.change): Also store the DefaultDocumentEvent.
+ 	(ElementBuffer.split): Also update the document event.
+ 	(ElementBuffer.insert): New method.
+ 	(ElementBuffer.insertUpdate): New method.
+ 	(ElementBuffer.insertStartTag): New method.
+ 	(ElementBuffer.insertEndTag): New method.
+ 	(ElementBuffer.insertContentTag): New method.
+ 	(SectionElement): New inner class.
+ 	(createDefaultRoot): Return SectionElement instead of BranchElement.
+ 	(getParagraphElement): Optimized access to paragraph element.
+ 	(setCharacterAttributes): Fire changedUpdate after modification.
+ 	(insertUpdate): New method.
+ 
+ 2005-09-13  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(toString): Implemented this method.
+ 	(calculateAlignedPositions): Partly implemented this method.
+ 
+ 2005-09-13  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTabbedPane.java: Added API comments all over.
+ 
+ 2005-09-13  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTree.java: Reformatted file.
+ 	* javax/swing/ListCellRenderer.java: Likewise.
+ 	* javax/swing/ListSelectionModel.java: Likewise.
+ 	* javax/swing/MenuElement.java: Likewise.
+ 	* javax/swing/OverlayLayout.java: Likewise.
+ 	* javax/swing/ProgressMonitor.java: Likewise.
+ 	* javax/swing/ProgressMonitorInputStream.java: Likewise.
+ 	* javax/swing/Renderer.java: Likewise.
+ 	* javax/swing/RepaintManager.java: Likewise.
+ 	* javax/swing/RootPaneContainer.java: Likewise.
+ 	* javax/swing/Scrollable.java: Likewise.
+ 	* javax/swing/SingleSelectionModel.java: Likewise.
+ 	* javax/swing/SizeSequence.java: Likewise.
+ 	* javax/swing/SpinnerListModel.java: Likewise.
+ 	* javax/swing/UnsupportedLookAndFeelException.java: Likewise.
+ 	* javax/swing/ViewportLayout.java: Likewise.
+ 	* javax/swing/WindowConstants.java: Likewise.
+ 
+ 2005-09-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .settings/org.eclipse.jdt.core.prefs: Enable javadoc warnings.
+ 
+ 2005-09-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ThreadLocal.java: Organized imports.
+ 	* java/lang/Double.java: Organized imports.
+ 
+ 2005-09-12  Casey Marshall  <csm@gnu.org>
+ 
+ 	PR 23819
+ 	* javax/security/auth/Subject.java (SecureSet.<init>): rename
+ 	input paremeter to 'inElements.'
+ 	(SecureSet.contains): return 'elements.contains,' not
+ 	'elements.remove.'
+ 
+ 	PR 23822
+ 	* javax/security/auth/SubjectDomainCombiner.java
+ 	(combine): don't access 'subject' if null.
+ 
+ 2005-09-12  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkDesktopWorld): add palette style frame,
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(closeIcon): new field,
+ 	(installListeners): call createPropertyChangeListener() to create the 
+ 	new listener to allow for overriding,
+ 	(installDefaults): set the font in the title, read closeIcon from 
+ 	defaults,
+ 	(uninstallDefaults): clear closeIcon,
+ 	(setButtonIcons): set icon for closeButton,
+ 	(paintComponent): set font for title,
+ 	* javax/swing/plaf/metal/MetalInternalFrameTitlePane.java
+ 	(MetalInternalFrameTitlePanePropertyChangeHandler): new support class,
+ 	(MetalTitlePaneLayout): likewise,
+ 	(paletteTitleHeight): initialise from defaults elsewhere,
+ 	(title): new private field,
+ 	(installDefaults): initialise various defaults,
+ 	(uninstallDefaults): clear defaults,
+ 	(addSubComponents): add sub-components used in this look and feel,
+ 	(createLayout): return new instance of MetalTitlePaneLayout,
+ 	(paintPalette): renders the title pane using the palette style,
+ 	(paintComponent): call paintPalette() if the internal frame uses the
+ 	palette style, otherwise handle painting without calling superclass 
+ 	anymore,
+ 	(setPalette): update the icon visibility,
+ 	(createPropertyChangeListener): return a new change handler,
+ 	* javax/swing/plaf/metal/MetalInternalFrameUI.java
+ 	(IS_PALETTE): new static field,
+ 	(installUI): check IS_PALETTE property,
+ 	(createNorthPane): removed empty border,
+ 	(setPalette): update border as appropriate,
+ 	(paletteListener): new private field,
+ 	(installListeners): install a listener to handle changes in the 
+ 	IS_PALETTE property,
+ 	(uninstallListeners): clear the listener from installListeners(),
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added defaults for 'DesktopIcon.border',
+ 	'InternalFrame.paletteBorder', 'InternalFrame.paletteCloseIcon', and
+ 	'InternalFrame.paletteTitleHeight'.
+ 	
+ 2005-09-12  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(putClientProperty): fire property change event.
+ 
+ 2005-09-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JScrollPane.java:
+ 	(addNonNull): Changed from adding to container with no constraints to
+ 	adding to container with the appropriate ScrollPaneConstant as a 
+ 	constraint.  This avoids IllegalArgumentExceptions in ScrollPaneLayout.
+ 	(setColumnHeader): Added constraint to addNonNull call.
+ 	(setCorner): Likewise.
+ 	(setHorizontalScrollBar): Likewise.
+ 	(setRowHeader): Likewise.
+ 	(setVerticalScrollBar): Likewise.
+ 	(setViewport): Likewise.
+ 	* javax/swing/JViewport.java:
+ 	(setViewSize): Don't set the size or fireStateChanged unless the new 
+ 	size is different from the old size.
+ 	(setView): Reset isViewSizeSet to false.
+ 	* javax/swing/ScrollPaneLayout:
+ 	(addSingletonComponent): Implemented and documented.
+ 	(addLayoutComponent): Throw an IllegalArgumentException if key is 
+ 	not one of the appropriate ScrollPaneConstants constants.  Added docs.
+ 	(setVerticalScrollBarPolicy): Likewise.
+ 	(setHorizontalScrollBarPolicy): Likewise.
+ 	(getCorner): Added docs.
+ 
+ 2005-09-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JCheckBox.java
+ 	(AccessibleJCheckBox): New inner class.
+ 	(getAccessibleContext): Implemented this method.
+ 	* javax/swing/JLayeredPane.java
+ 	(AccessibleJLayeredPane): New inner class.
+ 	(getAccessibleContext): Implemented this method.
+ 
+ 2005-09-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(getCellRect): Don't include cell gap in cell rectangle
+ 	calculation. It's already included in TableColumnModel.getWidth().
+ 	(createDefaultColumnsFromModel): Initialize table header values.
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	(paint): Don't include cell gap in cell rectangle
+ 	calculation. It's already included in TableColumnModel.getWidth().
+ 
+ 2005-09-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* org/ietf/jgss/GSSException.java (BAD_BINDINGS, BAD_MECH,
+ 	BAD_NAME, BAD_NAMETYPE, CONTEXT_EXPIRED, CREDENTIALS_EXPIRED,
+ 	DEFECTIVE_CREDENTIAL, DEFECTIVE_TOKEN, DUPLICATE_TOKEN, FAILURE,
+ 	NO_CONTEXT, NO_CRED, OLD_TOKEN): Use values from JDK, not RFC.
+ 
+ 2005-09-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* lib/Makefile.am (JAVAC): Specify -source 1.4 to ecj.
+ 
+ 2005-09-12  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(isCellEditable): Stopped the timer if it is started and
+ 	should not be restarted. This is a fix for the 'click-pause-
+ 	click' method to start editing.
+ 
+ 2005-09-12  Lillian Angel  <langel@redhat.com>
+ 
+ 	* gnu/java/awt/AWTUtilities.java
+ 	(convertPoint): Added a check to determine if source and
+ 	destination components are showing.
+ 	* javax/swing/JPopupMenu.java
+ 	(setVisible): Added check to determine if component is showing.
+ 	(show): Likewise.
+ 	* javax/swing/MenuSelectionManager.java
+ 	(componentForPoint): Added check to determine if component is showing.
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Added check to determine if component is showing.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(mousePressed): Added check to determine if component is showing.
+ 
+ 2005-09-12  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(InternalFrameCloseIcon.paintIcon): change colors according to button
+ 	state,
+ 	(InternalFrameAltMaximizeIcon.paintIcon): likewise,
+ 	(InternalFrameMaximizeIcon.paintIcon): likewise,
+ 	(InternalFrameMinimizeIcon.paintIcon): likewise.
+ 
+ 2005-09-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(TableHeaderBorder): New inner class.
+ 	(TextFieldBorder.paintBorder): Only paint the active border
+ 	if the text field is enabled _and_ editable.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added default to use the new
+ 	TableHeaderBorder for table headers.
+ 
+ 2005-09-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/Container.java:
+ 	(findComponentForMouseEventAt): Reduced visibility to package-private.
+ 	(getDeepestComponentForMouseEventAt): Reduced visibility to 
+ 	package-private and removed static modifier.
+ 
+ 2005-09-12  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(desktopIconBorder): new private field,
+ 	(DesktopIconBorder): new support class,
+ 	(getDesktopIconBorder): implemented,
+ 	(InternalFrameBorder.paintBorder): change color of line highlights if
+ 	the internal frame is selected.
+ 	
+ 2005-09-12  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/DomDocument.java: Implementation of xml:id W3C
+ 	Recommendation.
+ 
+ 2005-09-12  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(TableColumnPropertyChangeHandler): New inner class. Handles
+ 	changes of column widths.
+ 	(JTable(TableModel, TableColumnModel, ListSelectionModel)):
+ 	Check if column model == null and if so, create a default model.
+ 	(initializeLocalVars): Changed to use createDefaultColumnsFromModel
+ 	instead of createColumnsFromModel.
+ 	(addColumn): Add property change handler to new column.
+ 	(createColumnsFromModel): Removed redundant private method.
+ 	Use the public createDefaultColumnsFromModel instead.
+ 	(tableChanged): Use createDefaultColumnsFromModel instead of
+ 	createColumnsFromModel.
+ 	(setModel): Use createDefaultColumnsFromModel instead of
+ 	createColumnsFromModel.
+ 	(doLayout): When handling AUTO_RESIZE_OFF, then adjust the
+ 	size of the resizing column to it's (new) preferred size.
+ 	(createDefaultColumnsFromModel): Added assertion to make sure
+ 	that the column model is not null. Add property change handler
+ 	to new columns.
+ 	* javax/swing/table/TableColumn.java
+ 	(setWidth): Fire property change with name 'width' instead
+ 	of using the (obsolete) constant field COLUMN_WIDTH_PROPERTY.
+ 	(setPreferredWidth): Make this property a bound property.
+ 
+ 2005-09-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR swing/22922
+ 	* java/awt/event/InputEvent.java (modifiersEx): New field.
+ 	(InputEvent): Assume modifiers parameter contains both new- and
+ 	old-style masks.
+ 	(isShiftDown): Check modifiers for old-style shift mask and
+ 	modifiersEx for new-style shift mask.
+ 	(isControlDown): Likewise for control mask.
+ 	(isMetaDown): Likewise for meta mask.
+ 	(isAltDown): Likewise for alt mask.
+ 	(isAltGraphDown): Likewise for alt-graph mask.
+ 	(getModifiers): Return value of modifiers field.
+ 	(getModifiersEx): Return value of modifiersEx field.
+ 	* java/awt/event/MouseEvent.java
+ 	(MouseEvent(Component,int,long,int,int,int,int,boolean,int)):
+ 	Clear button new-style mask for mouse released events.
+ 	(paramString): Remove old-style modifier handling.
+ 	(readObject): Extend modifiers and assign to modifiersEx.
+ 	* java/awt/event/KeyEvent.java (readObject): Extend modifiers and
+ 	assign to modifiersEx.
+ 	* native/jni/gtk-peer/gtkpeer.h: Define macros for new-style mouse
+ 	masks.  Define macros for old-style key masks.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Remove macros for old-style key masks.
+ 	(button_to_awt_mods): Always return bitwise OR of new- and
+ 	old-style modifiers.
+ 	(cp_gtk_state_to_awt_mods): Likewise.
+ 	(state_to_awt_mods_with_button_states): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(keyevent_state_to_awt_mods): Likewise.
+ 
+ 2005-09-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* m4/acinclude.m4 (CLASSPATH_CHECK_GCJ): Check for gcj 4 with
+ 	#if __GNUC__ <= 3.
+ 
+ 2005-09-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/gen-classlist.sh.in: Use sort -r to work around bug #21418.
+ 
+ 2005-09-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (finalize): Check whether
+ 	fd != -1 before calling close().
+ 
+ 2005-09-10  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(PaletteBorder): new class.
+ 	
+ 2005-09-10  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(PaletteCloseIcon): new class.
+ 
+ 2005-09-10  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalInternalFrameUI.java:
+ 	(instances): removed,
+ 	(createUI): just return new instance,
+ 	API docs all over.
+ 	
+ 2005-09-10  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (fail_g2d): New method.
+ 	(GdkGraphics2D(GdkGraphics2D)): Call fail_g2d if Graphics2D not
+ 	specified.
+ 	(GdkGraphics2D(int,int)): Likewise.
+ 	(GdkGraphics2D(GtkComponentPeer)): Likewise.
+ 
+ 2005-09-10  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java (addNotify): Throw
+ 	AssertionError if field access fails.
+ 
+ 2005-09-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (static): Reindent
+ 	second error message.
+ 
+ 2005-09-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR awt/23692
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (static): Only call
+ 	initStaticState if using Graphics2D.  Otherwise print error and
+ 	exit.
+ 	(setClip(Shape)): If clip == null and component == null, do
+ 	nothing.
+ 
+ 2005-09-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(GdkGraphics(GtkComponentPeer)): Set font field to a sensible
+ 	default if component font is null.
+ 
+ 2005-09-09  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* vm/reference/gnu/classpath/jdwp/VMIdManager.java (newObjectId): 
+ 	Set the reference for the ID.
+ 
+ 2005-09-09  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/event/VmDeathEvent.java: New file.
+ 
+ 2005-09-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR libgcj/23288:
+ 	* java/net/URLClassLoader.java (definePackage): Correctly order
+ 	arguments to definePackage.  Look up per-entry Attributes.
+ 	(getAttributeValue): New method.
+ 
+ 2005-09-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java (installUI): Install
+ 	defaults after initializing tree.
+ 
+ 2005-09-09  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/html/CSS.java
+ 	New file. Defines standard CSS attributes.
+ 
+ 2005-09-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Window.java (isDisplayable): Do not call super's
+ 	isDisplayable.
+ 
+ 2005-09-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR swing/23796
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java
+ 	(create): Respect dialog's decorated flag.
+ 
+ 2005-09-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR swing/23558
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_get_new_state): Remove function.
+ 	(window_get_new_state): Mark widget parameter as unused.  Remove
+ 	call to window_get_new_state.
+ 	(window_active_state_change_cb): Remove function.
+ 	(connectSignals): Do not connect window_active_state_change_cb
+ 	callback.
+ 
+ 2005-09-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR swing/23796
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (create): Respect
+ 	frame's decorated flag.
+ 
+ 2005-09-09  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(installDefaults): Fixed method signature.
+ 	(uninstallDefaults): Likewise.
+ 	(uninstallUI): Fixed call to uninstallDefaults.
+ 	(installUI): Fixed call to installDefaults.
+ 	* javax/swing/JPopupMenu.java
+ 	(HeavyWeightPopup): Fixed to extend JDialog, since
+ 	nothing is added to the taskbar with JDialog. Also, 
+ 	fixed so the popup menu is undecorated. Frames and
+ 	title bars should not be drawn, when popup is a 
+ 	HeavyWeightPopup. A new bug was filed since the
+ 	decorated and undecorated frames are all drawn 
+ 	alike.
+ 	* javax/swing/JRootPane.java
+ 	(setWindowDecorationStyle): Added check for
+ 	PLAIN_DIALOG.
+ 
+ 2005-09-09  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added the remaining color defaults.
+ 
+ 2005-09-09  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java (addURLImpl): Synchronize on the
+ 	loader.
+ 	(toString): Likewise.
+ 
+ 2005-09-09  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* javax/security/auth/login/Configuration.java
+ 	(getConfiguration): Call getConfig() instead of doing the work.
+ 	(getConfig): Instantiate the configuration provider.
+ 
+ 2005-09-09  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/reflect/Proxy.java
+ 	(pack): Initialize field.
+ 
+ 2005-09-09  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java: Removed static initializer.
+ 	* java/io/ObjectOutputStream.java: Removed static initializer.
+ 	* vm/reference/java/io/VMObjectInputStream.java: Added static
+ 	initializer.
+ 	(oisClass, vmoisClass): Removed unused fields.
+ 	* vm/reference/java/io/VMObjectStreamClass.java: Added static
+ 	initializer.
+ 
+ 2005-09-09  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): re-added 'ScrollBar.width' default.
+ 	
+ 2005-09-09  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicArrowButton.java
+ 	(buttonBorder.paintBorder): fixed drawing issues,
+ 	(getMaximumSize): return constant value,
+ 	(getMinimumSize): likewise,
+ 	(getPreferredSize): likewise.
+ 	
+ 2005-09-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR swing/23558
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(FocusHandler.focusLost): Do not call popup.hide.
+ 
+ 2005-09-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (static): Fix typo
+ 	(Grahics -> Graphics).
+ 
+ 2005-09-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch:
+ 	New file.
+ 
+ 2005-09-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(MetalLookAndFeel): Only load default theme if no theme has been
+ 	set before.
+ 	(initComponentDefaults): Fixed and added color default values
+ 	for various components.
+ 
+ 2005-09-08  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/Container.java:
+ 	(findComponentForMouseEventAt): Removed check for opacity.
+ 
+ 2005-09-08  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
+ 	(executeVersion): Major and minor version are integers, not bytes.
+ 
+ 2005-09-08  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/Container.java:
+ 	(findComponentForMouseEventAt): New implementation method.
+ 	(getDeepestComponentForMouseEventAt): New implementation method.
+ 	(acquireComponentForMouseEvent): Replaced call to
+ 	AWTUtilities.getDeepestComponentAt with call to new implementation
+ 	method getDeepestComponentAt to appropriately handle transparent
+ 	components with no MouseListeners attached.
+ 	
+ 2005-09-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .classpath: Enable compilation of jdwp.
+ 
+ 2005-09-08  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java
+ 	(runCommand): Return value is true to indicate that the back-end
+ 	should shutdown; not whether it should stay alive.
+ 	* gnu/classpath/jdwp/processor/ArrayTypeCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/ClassTypeCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/EventRequestCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/MethodCommandSet.java (runCommand):
+ 	Likewise
+ 	* gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/StackFrameCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/StringReferenceCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/ThreadGroupReferenceCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java
+ 	(runCommand): Likewise.
+ 	* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
+ 	(runCommand): Likewise.
+ 
+ 2005-09-08  Lillian Angel  <langel@gmail.com>
+ 	
+ 	* javax/swing/JPopupMenu.java:
+ 	Fixes Bug #PR23533
+ 	(setVisible): Adjusted popup menu's location
+ 	depending on the size of the screen.
+ 
+ 2005-09-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (EXTRA_DIST): Add autogen.sh
+ 	* lib/standard.omit: Remove gnu/classpath/jdwp, gnu/xml/stream and
+ 	javax/xml/stream.
+ 	* vm/reference/standard.omit: Removed.
+ 
+ 2005-09-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .classpath: Omit more directories and files.
+ 	* .settings/org.eclipse.jdt.core.prefs: Compile to 1.4 platform.
+ 	* .settings/org.eclipse.jdt.ui.prefs: Likewise.
+ 
+ 2005-09-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/metal/OceanTheme.java
+ 	New class. Implements the ocean theme for Metal.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(createDefaultTheme): Made Ocean the default theme as in JDK1.5.
+ 
+ 2005-09-08  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(FileChooserDetailViewIcon): new private class,
+ 	(FileChooserHomeFolderIcon): likewise,
+ 	(FileChooserListViewIcon): likewise,
+ 	(FileChooserNewFolderIcon): likewise,
+ 	(FileChooserUpFolderIcon): likewise,
+ 	(getFileChooserDetailViewIcon): implemented,
+ 	(getFileChooserHomeFolderIcon): implemented,
+ 	(getFileChooserListViewIcon): implemented,
+ 	(getFileChooserNewFolderIcon): implemented,
+ 	(getFileChooserUpFolderIcon): implemented.
+ 
+ 2005-09-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(foreground): Removed this field. This is better stored
+ 	in the text component itself.
+ 	(inactiveForeground): Removed this field. This is stored
+ 	in the disabledTextColor property of the text component.
+ 	(installDefaults): Load foreground and disabledTextColor
+ 	properties from UIDefaults. Remove call to updateComponentColors.
+ 	(paintBackground): Set the correct background color here.
+ 	(updateComponentColor): Removed this method.
+ 	* javax/swing/text/PlainView.java
+ 	(disabledColor): New field. Stores the text color for disabled
+ 	text fields.
+ 	(drawUnselectedText): Respect the 'enabled' property of
+ 	the text component.
+ 	(paint): Fetch the disabled color of the text component.
+ 
+ 2005-09-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(UpdateHandler.propertyChanged): Also update colors if the
+ 	'editable' property is changed.
+ 	(updateComponentColors): Correctly handle editable vs. enabled
+ 	changes.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Fixed color defaults for TextFields
+ 	to use the current theme.
+ 
+ 2005-09-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(UpdateHandler.propertyChanged): Update the components colors
+ 	when the state of the 'enabled' property changes.
+ 	(foreground): New field that stores the foreground color.
+ 	(background): New field that stores the background color.
+ 	(inactiveForeground): New field that stores the inactive
+ 	foreground color.
+ 	(inactiveBackground): New field that stores the inactive
+ 	background color.
+ 	(updateComponentColors): New method. Updates the text
+ 	components' colors according to the state of the 'enabled'
+ 	property.
+ 	(installDefaults): Load the defaults for the component colors.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added defaults for TextField colors
+ 	and border.
+ 
+ 2005-09-08  Roman Kennke  <kennke@aicas.com>
+ 
+ 	* javax/swing/text/GapContent.java
+ 	Fixes Bug #22966.
+ 	(GapContentPosition.getOffset): Added assertion to check for
+ 	consistent state of the Position. Fixed condition in if-statement.
+ 	(serialVersionUID): Updated serialVersionUID to match JDK1.5.
+ 	(shiftGap): If gapStart == newGapStart, then return immediatly.
+ 
+ 2005-09-08  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): added 'ScrollBar.width' default,
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java
+ 	(MetalScrollBarPropertyChangeHandler): new class,
+ 	(FREE_STANDING_PROP): added,
+ 	(MIN_THUMB_SIZE): modified dimensions,
+ 	(increaseButton): new field,
+ 	(decreaseButton): new field,
+ 	(scrollBarWidth): new field,
+ 	(isFreeStanding): new field,
+ 	(createUI): just return a new instance,
+ 	(installDefaults): implemented,
+ 	(createPropertyChangeListener): implemented,
+ 	(createDecreaseButton): implemented,
+ 	(createIncreaseButton): implemented,
+ 	(paintTrack): implemented,
+ 	(paintTrackHorizontal): new private method,
+ 	(paintTrackVertical): new private method,
+ 	(paintThumb): updated,
+ 	* javax/swing/plaf/metal/MetalScrollButton.java: implemented,
+ 	* javax/swing/plaf/metal/MetalUtils.java
+         (fillMetalPattern): modified alternating color calculation.
+ 
+ 2005-09-08  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readObject): Removed println and fixed Proxy class descriptor
+ 	deserialization.
+ 	(resolveProxyClass): Use Class.forName() instead of calling
+ 	ClassLoader.loadClass() directly.
+ 	* java/io/ObjectOutputStream.java
+ 	(writeClassDescriptor): Added support for serializing Proxy
+ 	class descriptor.
+ 
+ 2005-09-08  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* javax/naming/CompoundName.java
+ 	(readObject, writeObject): New methods.
+ 
+ 2005-09-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/SpringLayout.java:
+ 	Fixes Bug #PR23003
+ 	(getConstraints): Width and height should always
+ 	be reset, even if constraints is not null. Constraints
+ 	deal with the location of the component.
+ 
+ 2005-09-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/text/GapContent.java:
+ 	Fixes Bug #PR22966
+ 	(getOffset): Fixed check, was redundant.
+ 
+ 2005-09-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/text/GapContent.java:
+ 	Fixes Bug #PR22966
+ 	(getOffset): Added check for mark <= gapEnd
+ 
+ 2005-09-07  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JApplet.java
+ 	(AccessibleJApplet): New inner class.
+ 	(getAccesibleContext): Implemented accessibility support.
+ 	* javax/swing/JDialog.java
+ 	(AccessibleJDialog): New inner class.
+ 	(getAccesibleContext): Implemented accessibility support.
+ 	* javax/swing/JFrame.java
+ 	(AccessibleJFrame): New inner class.
+ 	(getAccesibleContext): Implemented accessibility support.
+ 	* javax/swing/JWindow.java
+ 	(AccessibleJWindow): New inner class.
+ 	(getAccesibleContext): Implemented accessibility support.
+ 
+ 2005-09-07  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JPanel.java
+ 	(AccessibleJPanel): New inner class.
+ 	(getAccessibleContext): Implemented this method.
+ 
+ 2005-09-07  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JPanel.java: Reformatted to match our coding
+ 	standards.
+ 
+ 2005-09-07  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JViewport.java
+ 	(AccessibleJViewport): New inner class.
+ 	(getAccessibleContext): New method. Implements the Accessible
+ 	interface for JViewport.
+ 
+ 2005-09-07  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(HorizontalSliderThumbIcon.paintIcon): handle disabled component state,
+ 	and fetch colors from the look and feel,
+ 	(VerticalSliderThumbIcon.paintIcon): likewise,
+ 	* javax/swing/plaf/metal/MetalSliderUI.java
+ 	(MetalPropertyListener): implemented,
+ 	(constructor): added color initialisation,
+ 	(createUI): reimplemented to return a new instance every time,
+ 	(createPropertyChangeListener): return a new instance of 
+ 	MetalPropertyListener,
+ 	(paintTrack): reimplemented to handle track fill option, and the 
+ 	disabled component state,
+ 	(paintMinorTickForHorizSlider): fetch colors from look and feel,
+ 	(paintMajorTickForHorizSlider): likewise,
+ 	(paintMinorTickForVertSlider): likewise,
+ 	(paintMajorTickForVertSlider): likewise.
+ 	
+ 2005-09-07  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* native/jni/qt-peer/componentevent.cpp: Added inclusion
+ 	of assert.h
+ 
+ 2005-09-07  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* INSTALL: Mention that GCJ4 is now mandatory.
+ 
+ 2005-09-07  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* javax/swing/Box.java: Added java.awt.Container import statement.
+ 
+ 2005-09-06  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added some RadioButton defaults,
+ 	* javax/swing/plaf/metal/MetalRadioButtonUI.java
+ 	(instance): removed,
+ 	(focusColor): added,
+ 	(selectColor): added,
+ 	(disabledTextColor): added,
+ 	(createUI): return a new instance for every component,
+ 	(installDefaults): implemented,
+ 	(uninstallDefaults): implemented,
+ 	(getSelectColor): implemented,
+ 	(getDisabledTextColor): implemented,
+ 	(getFocusColor): implemented,
+ 	(paint): added FIXME note,
+ 	(paintFocus): implemented.
+ 
+ 2005-09-06  Lillian Angel  <langel@redhat.com>
+ 	
+ 	Fixes Bug #PR23023 
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java:
+ 	Added 2 fields and reformatted copyright.
+ 	(actionPerformed): Should be able to open directories.
+ 	(mouseClicked): Set text in text field.
+ 	(installUI): Initialized the current parent path.
+ 	(installComponents): Fixed initialization for text field.	
+ 
+ 2005-09-06  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java:
+ 	Formatted entire class.
+ 
+ 2005-09-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.19-pre.
+ 
+ 	* doc/www.gnu.org/announce/20050906.wml: New file.
+ 	* doc/www.gnu.org/newsitems.txt: Add 0.18 release announcement.
+ 	* doc/www.gnu.org/downloads/downloads.wml: Add 0.18.
+ 
+ 2005-09-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/Box.java
+ 	(AccessibleBox): Extend Container.AccessibleAWTContainer.
+ 	(Filler.AccessibleBoxFiller): Extend Component.AccessibleAWTComponent.
+ 	(Filler.getAccessibleContext): Uncomment disabled code.
+ 	(getAccessibleContext): Uncomment disabled code.
+ 	* javax/swing/JRootPane.java:
+ 	JRootPane implements Accessible.
+ 	(AccessibleJRootPane): Extend AccessibleJComponent.
+ 
+ 2005-09-06  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(RadioButtonIcon.drawCheck): removed,
+ 	(RadioButtonIcon.paintIcon): reimplemented,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added defaults for JRadioButton.
+ 	
+ 2005-09-06  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #PR20015
+ 	* javax/swing/JMenuBar.java
+ 	(getUIClassID): Fixed API documentation.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	Added a private field for the mouse listener.
+ 	(BasicMenuBarUI): Initialized mouseListener.
+ 	(installListeners): Added mouseListener.
+ 	(uninstallListeners): Removed mouseListener.
+ 	(MouseInputHandler): New class added.
+ 	(mouseClicked): Added code to deselect menu items
+ 	when menu bar is clicked.	
+ 
+ 2005-09-06  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	Fixes Bug #PR23527 
+ 	(paintMenuItem): Moved view rectangle over to the 
+ 	left the same amount as defaultTextIconGap so the
+ 	accelerator is painted with some space on the right.
+ 
+ 2005-09-06  Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	Formatted class.
+ 
+ 2005-09-06  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI:
+ 	Fixes Bug PR23529.
+ 	(installUI): Changed delay for Timer. Was set too
+ 	long and actionPerformed was not being called fast
+ 	enough when the user clicks on the scroll bar. This
+ 	is because the timer is stopped after the mouse is
+ 	released.
+ 
+ 2005-09-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Add new features for 0.18.
+ 	* configure.ac: Set version to 0.18.
+ 
+ 2005-09-06  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gtkpeer.h (SYNCHRONIZE_GDK): Define.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (gtkInit)
+ 	[SYNCHRONIZE_GDK]: Make GDK synchronous.
+ 
+ 2005-09-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR awt/20720
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(get_first_keyval_from_keymap): Return -1 if no keyval was found
+ 	for given hardware keycode.
+ 	(keysym_to_awt_keycode): Likewise.
+ 	(keysym_to_awt_keylocation): Likewise.
+ 	(key_press_cb): Return immediately if no keyval was found for
+ 	given hardware keycode.
+ 	(key_release_cb): Likewise.
+ 
+ 2005-09-05  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/Makefile.am (all-local): Invoke $(SHELL) to execute
+ 	the script.
+ 
+ 	* scripts/check_jni_methods.sh: Make script working with non GNU
+ 	grep versions.
+ 
+ 2005-09-05  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/event/DocumentEvent.java:
+ 	(ElementChange) Made inner interface static to conform to the specs.
+ 
+ 2005-09-05  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JDesktopPane.java: Fixed typo in class description.
+ 	* javax/swing/JEditorPane.java: Removed unneeded import.
+ 	Added class description.
+ 	* javax/swing/JDialog.java: Made class description more useful.
+ 	* javax/swing/JFileChooser.java: Added class description.
+ 	* javax/swing/JFormattedTextField.java: Added class description.
+ 	(AbstractFormatter): Likewise.
+ 	(AbstractFormatterFactory): Likewise.
+ 	* javax/swing/JFrame.java: Made class description more useful.
+ 
+ 2005-09-05  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/event/DocumentEvent.java:
+ 	Reindented file to conform to our coding standards.
+ 
+ 2005-09-05  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/stream/XMLEventAllocatorImpl.java,
+ 	gnu/xml/stream/XMLInputFactoryImpl.java,
+ 	gnu/xml/stream/XMLStreamReaderImpl.java: Various fixes from system
+ 	testing.
+ 	* javax/xml/namespace/QName.java: Avoid unnecessary test.
+ 
+ 2005-09-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/standard.omit: Add gnu/xml/stream and javax/xml/stream.
+ 	* NEWS: Describe Untested/Disabled new features.
+ 
+ 2005-09-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac (AC_CONFIG_FILES): Add examples/Makefile.jawt.
+ 	* examples/.cvsignore: Add Makefile.jawt.
+ 	* examples/Makefile.am (EXAMPLE_C_FILES): New variable.
+ 	(ALL_EXAMPLE_FILES): Likewise.
+ 	(install-data-local): Use ALL_EXAMPLE_FILES and add Makefile.jawt.
+ 	(uninstall-local): Likewise.
+ 	(EXTRA_DIST): Add Makefile.awt.in.
+ 	* examples/Makefile.jawt.in: New file.
+ 	* examples/README: Add jawt instructions.
+ 	* examples/gnu/classpath/examples/jawt/DemoJAWT.c
+ 	(Java_DemoJAWT_paint): Rename to
+ 	Java_gnu_classpath_examples_jawt_DemoJAWT_paintIt.
+ 	(Java_gnu_classpath_examples_jawt_DemoJAWT_paintIt): Flip foreground
+ 	color based on on parameter.
+ 	* examples/gnu/classpath/examples/jawt/DemoJAWT.java (paint): Renamed
+ 	paintIt.
+ 	(paint): Call paintIt.
+ 	(on): New boolean field.
+ 	(main): Add Frame name, switch on variable every 0.5 seconds and call
+ 	Frame.repaint().
+ 	* examples/gnu/classpath/examples/jawt/Makefile: Removed.
+ 	* include/Makefile.am (include_HEADERS): New for jni.h, jni_md.h,
+ 	jawt.h and jawt_md.h.
+ 
+ 2005-09-05  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/reflect/Proxy.java
+ 	(sameTypes): Removed.
+ 	(equals): Fixed bug #23727.
+ 
+ 2005-09-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/classpath/jdwp/event/filters/ClassMatchFilter.java
+ 	(matches): Remove InvalidClassException since it is never thrown.
+ 	* vm/reference/gnu/classpath/jdwp/VMIdManager.java
+ 	(newReferenceTypeId): Only return null when SoftReference is cleared,
+ 	don't catch InstantiationException or IllegalAccessException since
+ 	they are never thrown.
+ 
+ 2005-09-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/CORBA/NamingService/NamingServiceTransient.java: Re-un-indent
+ 	boilerplate.
+ 
+ 2005-09-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/CORBA/Interceptor/Registrator.java (m_prefix): Mark static.
+ 	* gnu/java/awt/peer/qt/QtButtonPeer.java: Replace uses of
+ 	toolkit.eventQueue.postEvent() with QtToolkit.eventQueue.postEvent().
+ 	* gnu/java/awt/peer/qt/QtCheckboxPeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtChoicePeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtComponentPeer.java: Likewise and similar
+ 	for guiThread and graphicsEnv.
+ 	* gnu/java/awt/peer/qt/QtListPeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtMenuItemPeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtMenuPeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtScrollbarPeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtTextAreaPeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtTextFieldPeer.java: Likewise.
+ 
+ 2005-09-04  Chris Burdess  <dog@gnu.org>
+ 
+ 	* doc/README.jaxp: Updated JAXP documentation for StAX.
+ 	* javax/xml/stream/XMLEventFactory.java,
+ 	* javax/xml/stream/XMLInputFactory.java,
+ 	* javax/xml/stream/XMLOutputFactory.java: Use GNU implementation by
+ 	default.
+ 
+ 2005-09-04  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	Fix for bug #23653
+ 	* lib/Makefile.am (metafiles): Use find -name -prune not -path.
+ 
+ 2005-09-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Add description of new awt.datatransfer functionality.
+ 
+ 2005-09-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(LeafElement.LeafElement): Set startPos and endPos through
+ 	createPosition() if parent is null.
+ 
+ 2005-09-04  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/stream: StAX implementation.
+ 
+ 2005-09-04  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/lang/Integer.java
+ 	(parseInt): Added some messages to the exception thrown by this
+ 	method.
+ 
+ 2005-09-04  Chris Burdess  <dog@gnu.org>
+ 
+ 	* javax/xml/stream/XMLEventFactory.java,
+ 	* javax/xml/stream/XMLEventWriter.java,
+ 	* javax/xml/stream/XMLInputFactory.java,
+ 	* javax/xml/stream/XMLOutputFactory.java,
+ 	* javax/xml/stream/XMLResolver.java,
+ 	* javax/xml/stream/XMLStreamConstants.java,
+ 	* javax/xml/stream/events/Attribute.java,
+ 	* javax/xml/stream/events/EndEntity.java,
+ 	* javax/xml/stream/events/EntityDeclaration.java,
+ 	* javax/xml/stream/events/EntityReference.java,
+ 	* javax/xml/stream/events/StartEntity.java,
+ 	* javax/xml/stream/events/XMLEvent.java,
+ 	* javax/xml/stream/util/EventReaderDelegate.java:
+ 	StAX API changes to conform to JWSDP 1.5.
+ 
+ 2005-09-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #23701
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
+ 	(clipboard_owner_change_cb): Only used when GTK_MINOR_VERSION > 4.
+ 	(Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState):
+ 	Only request owner-change events for GTK_MINOR_VERSION > 4.
+ 	(clipboard_get_func): Only handle pixbuf and uri when
+ 	GTK_MINOR_VERSION > 4.
+ 	(Java_gnu_java_awt_peer_gtk_GtkClipboard_advertiseContent): Only call
+ 	gtk_target_list_add_* functions when GTK_MINOR_VERSION > 4. Similar
+ 	for gtk_clipboard_set_can_store.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped): Mark
+ 	flipx and flipy unused for GTK_MINOR_VERSION <= 4.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c
+ 	(clipboard_targets_received): Don't handle images for
+ 	GTK_MINOR_VERSION <= 4.
+ 	(Java_gnu_java_awt_peer_gtk_GtkSelection_requestImage): Likewise.
+ 	(clipboard_uris_received): Likewise for text/uri-list.
+ 	(Java_gnu_java_awt_peer_gtk_GtkSelection_requestURIs): Likewise.
+ 
+ 2005-09-03  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* autogen.sh: Document libtool version needed for Darwin.
+ 	(LIBTOOLIZE): Don't special case Darwin, always use libtoolize.
+ 
+ 2005-09-03  Chris Burdess  <dog@gnu.org>
+ 
+ 	* javax/xml/stream,
+ 	* javax/xml/stream/events,
+ 	* javax/xml/stream/util:
+ 	New StAX API classes.
+ 
+ 2005-09-02  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/transport/ITransport.java (shutdown): New method.
+ 	* gnu/classpath/jdwp/transport/JdwpConnection.java (JdwpConnection):
+ 	Add ThreadGroup argument.
+ 	* gnu/classpath/jdwp/transport/SocketTransport.java (shutdown):
+ 	New method.
+ 
+ 2005-09-02  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/Jdwp.java: New file.
+ 	* gnu/classpath/jdwp/JdwpConstants.java: New file.
+ 	* vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java: New file.
+ 
+ 2005-09-02  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/CommandSet.java [vm]: Remove.
+ 	VMVirtualMachine is entirely static.
+ 	* gnu/classpath/jdwp/event/EventManager.java (requestEvent)
+ 	(deleteRequest, clearRequests): Change all VMVirtualMachine calls
+ 	to reflect new API.
+ 	* gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java
+ 	(executeVisibleClasses): Likewise.
+ 	* gnu/classpath/jdwp/processor/ClassTypeCommandSet.java
+ 	(invokeMethod): Likewise.
+ 	* gnu/classpath/jdwp/processor/MethodCommandSet.java
+ 	(executeLineTable, executeVariableTable): Likewise.
+ 	* gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java
+ 	(executeInvokeMethod): Likewise.
+ 	* gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
+ 	(executeSourceFile, executeStatus): Likewise.
+ 	* gnu/classpath/jdwp/processor/StackFrameCommandSet.java
+ 	(executeGetValues, ,executeSetValues, executeThisObject): Likewise.
+ 	* gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java
+ 	(executeSuspend, executeResume, executeStatus, executeFrames)
+ 	(executeFrameCount, executeSuspendCount): Likewise.	
+ 	* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
+ 	(executeClassesBySignature, executeClassesBySignature)
+ 	(executeAllClasses, executeDispose, executeSuspend)
+ 	(executeResume): Likewise.
+ 
+ 2005-09-02  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CosNaming/NamingContextOperations.java:
+ 	Do not inherit from CORBA object.
+ 	* org/omg/CosNaming/_NamingContextExtImplBase.java (_methods),
+ 	* omg/CosNaming/_NamingContextImplBase.java (methods):
+ 	Made package private.
+ 	* omg/CosNaming/NamingContextPOA.java,
+ 	* omg/CosNaming/NamingContextExtPOA.java,
+ 	* org/omg/CosNaming/BindingIteratorPOA.java: New files.
+ 
+ 2005-09-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/image/CropImageFilter.java
+ 	(setPixels(int,int,int,int,ColorModel,byte[],int,int)): Set
+ 	consumer pixels at 0, 0 location.
+ 	(setPixels(int,int,int,int,ColorModel,int[],int,int)): Likewise.
+ 
+ 2005-09-02  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(mousepressed): Fixed, so that clicking on control icon will not
+ 	start editing.
+ 
+ 2005-09-02  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTree.java:
+ 	(getScrollableTracksViewportHeight): Return true if parent is a 
+ 	JViewport and parent's height is smaller than ours.
+ 	(getScrollableTracksViewportWidth): Return true if parent is a
+ 	JViewport and parent's width is smaller than ours.
+ 
+ 2005-09-02  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(installUI): TreeSelectionListener removed because added too many
+ 	times.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Fixed names for some tree defaults.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Added new fields for editing and keyboard actions.
+ 	(setCellEditor): Took out unneeded if statement.
+ 	(isEditing): Returned boolean instead.
+ 	(updateCellEditor): Used set method.
+ 	(installDefaults): Set focus to tree.
+ 	(installKeyBoardActions): Implemented.
+ 	(convertModifiers): New function implemented.
+ 	(installUI): Used set method and initialized isEditing.
+ 	(startEditing): set isEditing.
+ 	(TreeAction): New class implemented to perform keyboard actions.
+ 	(ActionListenerProxy): New private class used to distribute the key
+ 	board actions to the true receiver.
+ 	(editingStopped): Added code to prevent NPEs. set isEditing and focus 
+ 	to tree. Also, removed TreeSelectionListeners for cellEditor.
+ 	(editingCanceled): Likewise.
+ 	(keyPressed): Removed code, not needed anymore.
+ 	(actionPerformed): Implemented for up/down keyboard actions.
+ 	(actionPerformed): Implemented for left/right keyboard actions.
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(DefaultTreeCellEditor): Set lastPath.
+ 	(isCellEditable): editingComponent should be configured if has not
+ 	been.
+ 	(stopCellEditing): No need to set cell editor to null here.
+ 	(cancelCellEditing): Likewise.
+ 	(valueChanged): Set tPath to the path that was last selected. Used for
+ 	the click-pause-click implementation.
+ 	(actionPerformed): Re-implemented in a simplier fashion.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(getTreeCellRendererComponent): Only set border color if val is lead
+ 	selection path.
+ 
+ 2005-09-02  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Interceptor/ClientRequestInterceptors.java (send_poll):
+ 	remove ForwardRequest from declaration.
+ 
+ 2005-09-02  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableInterceptor/CurrentOperations.java:
+ 	Inherit from org.omg.CORBA.CurrentOperations.
+ 	* org/omg/PortableInterceptor/ClientRequestInterceptorOperations.java
+ 	(send_poll): Remove ForwardRequest from declaration.
+ 
+ 2005-09-02  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JList.java:
+ 	(getPreferredScrollableViewportSize): Implemented.
+ 
+ 2005-09-02  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/IOR_Delegate.java (request),
+ 	* gnu/CORBA/SocketRepository.java (get_socket),
+ 	* gnu/CORBA/gnuRequest (getParameterStream),
+ 	* gnu/CORBA/NamingService/NameParser.java,
+ 	* gnu/CORBA/NamingService/NamingServiceTransient.java: Rewritten.
+ 	* gnu/CORBA/Functional_ORB.java (nameParser): New field.
+ 	(string_to_object): Rewritten.
+ 	(ior_to_object): Made public.
+ 	* org/omg/CORBA/ORB.java (string_to_object): 
+         Documentation update.
+ 
+ 2005-09-02  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTree.java:
+ 	(getPreferredScrollableViewportSize): Implemented.
+ 
+ 2005-09-02  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): set correct value for 
+ 	'InternalFrame.titleFont'.
+ 
+ 2005-09-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java (registerImageIOSpis):
+ 	Reintroduced (empty) method.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (static): Moved initialization
+ 	of imageIOSpis to new registerImageIOSpis() method.
+ 	(registerImageIOSpis): New (overloaded) method.
+ 	* javax/imageio/spi/IIORegistry.java (IIORegistry): Call to Toolkit
+ 	registration method if instanceof ClasspathToolkit.
+ 
+ 2005-09-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR awt/22979
+ 	* gnu/java/awt/peer/gtk/GtkImage.java,
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c (GtkImage()):
+ 	New constructor.
+ 	(drawPixelsScaled): Return immediately if width or height is <= 0.
+ 	(drawPixelsScaledFlipped): Likewise for srcwidth, srcheight,
+ 	dstwidth, dstheight.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createImage(String)):
+ 	Create a blank image when filename is "".
+ 	* javax/swing/ImageIcon.java (ImageIcon(String)): Mention blank
+ 	icons in documentation.
+ 	(ImageIcon(String,String)): Likewise.
+ 
+ 2005-09-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR awt/23557
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (drawString(String,
+ 	float, float)): Return immediately if string is null or
+ 	zero-length.
+ 
+ 2005-09-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR awt/20014
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (static): Always call
+ 	initStaticState.
+ 
+ 2005-09-02  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* README: Added MysaifuVM to list of VMs
+ 	* INSTALL: Added info about Qt4 and ecj.
+ 
+ 2005-09-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR awt/23536
+ 	* gnu/java/awt/peer/gtk/GtkImage.java,
+ 	gnu_java_awt_peer_gtk_GtkImage.c (GtkImage(URL)): New constructor.
+ 	(GtkImage(byte[])) New constructor.
+ 	(loadImageFromData): New method.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createImage(URL)): Call
+ 	GtkImage(URL) constructor.
+ 	(createImage(byte[],int,int)): Call GtkImage(byte[]) constructor.
+ 	* include/gnu_java_awt_peer_gtk_GtkImage.h: Regenerate.
+ 
+ 2005-09-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java (getFont): Get non-public
+ 	constructor from Font. Chain "cannot happen" exceptions in
+ 	AssertionError.
+ 
+ 2005-09-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/JarFile.java (JarEnumeration.nextElement): Only
+ 	readSignature when verifying jar.
+ 	(getEntry): Likewise.
+ 
+ 2005-09-01  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	Fixes bug #23204
+ 	* javax/swing/ViewportLayout.java:
+ 	(preferredLayoutSize): If the view is scrollable, call its
+ 	getPreferredScrollableViewportSize method.
+ 	(layoutContainer): If the view is scrollable, check its 
+ 	getScrollableTracksViewportWidth and getScrollableTracksViewportHeight
+ 	methods before resizing the view to match the viewport.
+ 
+ 2005-09-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gtk_jawt.c
+ 	(classpath_jawt_get_visualID): Cast returned NULL to VisualID.
+ 	(classpath_jawt_get_drawable): Cast returned NULL to Drawable.
+ 
+ 2005-09-01  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Added new field to keep track of contents in newly edited cell.
+ 	(isEditing): Made more intuitive.
+ 	(stopEditing): Changed because it was causing an infinite loop.
+ 	(installUI): Should be set to true when set.
+ 	(completeEditing): Passed newVal to valueForPathChanged instead.
+ 	(EditorTimerUpdate): Made timer faster because was not working well.
+ 	(actionPerformed): No need for 'BasicTreeUI.this.'
+ 	(update): Likewise.
+ 	(editingStopped): Likewise. Also, set newVal to appropriate value.
+ 	(editingCanceled): Likewise.
+ 	(keyPressed): Likewise.
+ 	(mousePressed): Likewise.
+ 	(treeExpanded): Likewise.
+ 	(treeCollapsed): Likewise.
+ 	(treeNodesChanged): Likewise.
+ 	(TreeNodesInserted): Likewise.
+ 	(treeNodesRemoved): Likewise.
+ 	(treeStructureChanged): Likewise.
+ 	(valueChanged): Editing is canceled when a new cell is clicked.
+ 	(getCellBounds): Initialized row for path.
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(startEditingTimer): No need to start timer if it is already set.
+ 	* javax/swing/tree/DefaultTreeModel.java
+ 	(valueForPathChanged): Fixed so value of node is changed only if it
+ 	is a MutableTreeNode. Otherwise, it cannot be changed. Also, 
+ 	implemented with check if root node is the node being changed.
+ 	(nodeChanged): Should get the path of the node, not the parent.
+ 
+ 2005-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR awt/20782
+ 	* native/jni/gtk-peer/gtk_jawt.c
+ 	(classpath_jawt_get_default_display): Check if widget is realized
+ 	and return NULL if it is not.
+ 	(classpath_jawt_get_visualID): Likewise.
+ 	(classpath_jawt_get_drawable): Likewise.
+ 
+ 2005-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (setBounds): Only
+ 	add parent's x and y co-ordinates to translation if parent's
+ 	parent is not a window.
+ 
+ 2005-08-31  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java:
+ 	(boxEntries): Made this method package private because I added a 
+ 	call to it from an implicitly defined listener class. Also fixed 
+ 	indentation.
+ 	(createPropertyChangeListener): If the returned property listener
+ 	hears DIRECTORY_CHANGED_PROPERTY, call boxEntries() to update the
+ 	look-in box entries.
+ 
+ 2005-08-31  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	PR swing/23037
+ 	* javax/swing/JFileChooser.java
+ 	(changeToParentDirectory): If parent directory is null, do nothing.
+ 
+ 2005-08-31  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(initializeLocalVars): Changed default autoResizeMode to 
+ 	AUTO_RESIZE_SUBSEQUENT_COLUMNS to match the JDK.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(getMaximumSize): Implemented.
+ 	(getMinimumSize): Implemented.
+ 
+ 2005-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/nio/charset/Charset.java (charsetForName): Try default provider
+ 	before trying to load extra providers.
+ 	(availableCharsets): Explicitly add default provider Charsets.
+ 	(providers2): Don't include default provider.
+ 
+ 2005-08-31  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(textFieldBorder): new field,
+ 	(Flush3DBorder): new class,
+ 	(TextFieldBorder): new class,
+ 	(getTextFieldBorder): implemented.
+ 
+ 2005-08-31  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(getPropertyPrefix): include dot in prefix,
+ 	(installDefaults): remove dot which is included in prefix now,
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
+ 	(getPropertyPrefix): return correct prefix,
+ 	* javax/swing/plaf/basic/BasicCheckBoxUI.java
+ 	(getPropertyPrefix): return correct prefix,
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(getPropertyPrefix): return correct prefix,
+ 	* javax/swing/plaf/basic/BasicMenuUI.java
+ 	(getPropertyPrefix): return correct prefix,
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
+ 	(getPropertyPrefix): return correct prefix,
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java
+ 	(getPropertyPrefix): include dot in prefix,
+ 	(getDefaultIcon): removed dot which is part of the prefix,
+ 	* javax/swing/plaf/basic/BasicToggleButtonUI.java
+ 	(getPropertyPrefix): include dot in prefix,
+ 	* javax/swing/plaf/metal/MetalCheckBoxUI.java: now extends 
+ 	MetalRadioButtonUI,
+ 	(getPropertyPrefix): implemented.
+ 
+ 2005-08-30  Mark Wielaard  <mark@klomp.org>
+ 	    Christian Schlichtherle  <christian@schlichtherle.de>
+ 
+ 	* java/util/zip/ZipEntry.java (setTime): Use
+ 	Calendar.setTimeInMillis().
+ 	(getTime): First parse extra bytes. Use Calendar.getTimeInMillis().
+ 	(parseExtra): Don't return early to make sure that KNOWN_EXTRA is
+ 	always set.
+ 	* java/util/zip/ZipFile.java (readEntries): Parse name and comment
+ 	as UTF-8 string.
+ 	(close): Check that raf is not null.
+ 	* java/util/zip/ZipInputStream.java (getNextEntry): Set name as
+ 	UTF-8 bytes.
+ 	* java/util/zip/ZipOutputStream.java (setComment): Set comment as
+ 	UTF-8 bytes.
+ 	(putNextEntry): Likewise for name.
+ 	(finish): Likewise for both.
+ 
+ 2005-08-30  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkMenuBar): added a JRadioButtonMenuItem,
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(RadioButtonMenuItemIcon): new inner class,
+ 	(getRadioButtonMenuItemIcon): implemented,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added RadioButtonMenuItem defaults.
+ 
+ 2005-08-30  Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Added a timer field for repainting the editing component.
+ 	(EditorUpdateTimer): Inner class added and implemented. Updates
+ 	the caret and text box. Still need to fix typing in text box.
+ 	(startEditing): Started the timer.
+ 	(editingCanceled): Stopped the timer.
+ 	(editingStopped): Likewise.
+ 
+ 2005-08-30  Lillian Angel  <langel@redhat.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkTreeWorld): Made tree editable.
+ 	* javax/swing/DefaultCellEditor.java
+ 	(isCellEditable): Added in check for number of mouse clicks.
+ 	(DefaultCellEditor): To start editing a textfield, number of clicks
+ 	is 3.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Took out unneeded fields
+ 	(isEditing): Fixed to check boolean.
+ 	(updateCellEditor): Made more efficent.
+ 	(installUI): Created cell editor for initialization.
+ 	(editingStopped): Added in check to prevent a NPE.
+ 	(editingCanceled): Likewise.
+ 	(keyPressed): Added in check for pressing Enter. Enter should stop
+ 	editing and complete it, when in the process of editing. 
+ 	(mousePressed): Optimized by using MouseEvent's getClickCount. The
+ 	clicking on nodes works better. Also, added in code to start the
+ 	editing.
+ 	(valueChanged): Implemented.
+ 	(selectPath): Took out code to remove an already selected path. A node
+ 	should remain selected if clicked on more than once. Works like JDK.
+ 	* javax/swing/tree/DefaultTreeCellEditor.java:
+ 	Added a helper field.
+ 	(paint): Took out redundant code.
+ 	(DefaultTreeCellEditor): Added class to listener list.
+ 	(configureEditingComponent): Updated since listener was added to list.
+ 	(isCellEditable): Finished implementation.
+ 	(stopCellEditing): Added a check for editingComponent to prevent a NPE.
+ 	(cancelCellEditing): Likewise.
+ 	(valueChanged): Took out redundant code.
+ 	(actionPerformed): Added code in to implement click-pause-click
+ 	editing.
+ 	(shouldStartTimer): Fixed check.
+ 	(canEditImmediately): Took out redunant code.
+ 	(inHitRegion): Changed region to be text area only (not icon).
+ 	(createTreeCellEditor): No need to use canEdit here, removed.
+ 
+ 2005-08-30  Christian Schlichtherle  <christian@schlichtherle.de>
+ 
+ 	* java/util/zip/DeflaterOutputStream.java
+ 	(DeflaterOutputStream(OutputStream)): Increase buffer size to 4096.
+ 	(DeflaterOutputStream(OutputStream,Deflater)): Likewise.
+ 
+ 2005-08-30  Christian Schlichtherle  <christian@schlichtherle.de>
+ 
+ 	* java/util/zip/DeflaterHuffman.java (bit4Reverse): Mark final.
+ 
+ 2005-08-30  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLabelUI.java
+ 	(instance): renamed 'metalLabelUI' and changed from private to 
+ 	protected,
+ 	(createUI): modified for renamed field,
+         (paintDisabledText): implemented,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): modified Label defaults.
+ 
+ 2005-08-30  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added some defaults for TabbedPane,
+ 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java
+ 	(TabbedPaneLayout): implemented new class,
+ 	(createLayoutManager): implemented,
+ 	(paintTabBorder): implemented,
+ 	(paintTopTabBorder): implemented,
+ 	(paintLeftTabBorder): implemented,
+ 	(paintBottomTabBorder): implemented,
+ 	(paintRightTabBorder): implemented,
+ 	(paintTabBackground): implemented,
+ 	(shouldPadTabRun): implemented,
+ 	* examples/gnu/classpath/examples/swing/Demo.java:
+ 	(mkTabWorld): new method,
+ 	(mkTabbedPane): added tab for 'Tab World'.
+ 	
+ 2005-08-30  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* java/beans/Statement.java:
+ 	(Statement): Use zero length array if argument array is null.
+ 	(toString): Use StringBuffer for efficiency reasons, make use of
+ 	internal name.    
+ 	(generateInternalName): New method, generates instance names like
+ 	the JDK has.
+ 	(doExecute): Removed debugging output that could lead to an exception
+ 	because wrong loop variable usage.
+ 	* java/beans/Expression.java: Static constant 'unset' renamed to 
+ 	'UNSET'.
+ 
+ 2005-08-29  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/event/Event.java: New file describing JDWP
+ 	events.
+ 	* gnu/classpath/jdwp/event/ClassPrepareEvent.java: New file.
+ 	* gnu/classpath/jdwp/event/ThreadEndEvent.java: New file.
+ 	* gnu/classpath/jdwp/event/ThreadStartEvent.java: New file.
+ 	* gnu/classpath/jdwp/event/VmInitEvent.java (VmInitEvent): New file.
+ 
+ 2005-08-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .externalToolBuilders/Configure.launch: Changed --prefix.
+ 	* .externalToolBuilders/CompileNative.launch: Invoke install target.
+ 	* .cdtproject: New file.
+ 	* .classpath: Changed output directory.
+ 	* .cvsignore: Added 'install'.
+ 
+ 2005-08-29  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JPasswordField.java
+ 	(getText): Changed to pass error to AssertionError.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(setCellEditor): Updated boolean when appropriate.
+ 	(stopEditing): Took out redundant code.
+ 	(updateCellEditor): Updated boolean when appropriate.
+ 	(installListeners): Took out CellEditorListener. It is added
+ 	when the cellEditor is set.
+ 	(installUI): Similar.
+ 	(ensureRowsAreVisible): Fixed API documentation 
+ 	(startEditing): Fixed to add editing container to the tree.
+ 	(checkForClickInExpandControl): Fixed API documentation.
+ 	(editingStopped): Added code to remove listeners and container.
+ 	(editingCanceled): Similar.
+ 	(mousePressed): Updated to stop editing when a different cell is
+ 	clicked.
+ 	(treeNodesChanged): Called repaint.
+ 	(treeNodesRemoved): Likewise.
+ 	(treeStructureChanged): Likewise.
+ 	(paintNode): Updated to paint a node that is being edited.
+ 	(paintRecursive): Fixed API documentation.
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(paint): Fixed to paint icon and text box in correct location with
+ 	correct spacing.
+ 	(doLayout): Fixed API documentation.
+ 	(DefaultTreeCellEditor): Took out call to configure editing component.
+ 	(configureEditingComponent): Initialized editing icon.
+ 	(getTreeCellEditorComponent): Took out code to stop editing.
+ 	Not needed.
+ 	(addCellEditorListener): Passed on to realEditor.
+ 	(removeCellEditorListener): Likewise.
+ 
+ 2005-08-29  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ORB.java (string_to_object): Documentation update.
+ 	* gnu/CORBA/Functional_ORB.java (string_to_object): Rewritten.
+ 	(ior_to_object): New method.
+ 	* gnu/CORBA/NamingService/NameParser.java: New file.
+ 
+ 2005-08-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java (addEdit): Document gcj bug
+ 	workaround.
+ 	(getChange): Likewise.
+ 
+ 2005-08-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* org/omg/PortableInterceptor/ORBInitInfoOperations.java: Removed
+ 	non-ascii character.
+ 
+ 2005-08-28  Chris Burdess  <dog@gnu.org>
+ 
+         * javax/swing/text/AbstractDocument.java: Fully qualify references to
+         ElementChange class.
+ 
+ 2005-08-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Interceptor/ForwardRequestHolder.java,
+ 	* gnu/CORBA/Interceptor/gnuClientRequestInfo.java,
+ 	* gnu/CORBA/Interceptor/gnuIcCurrent.java,
+ 	* gnu/CORBA/Interceptor/gnuIorInfo.java,
+ 	* gnu/CORBA/Interceptor/gnuServerRequestInfo.java,
+ 	* gnu/CORBA/Interceptor/IORInterceptors.java,
+ 	* gnu/CORBA/Interceptor/ClientRequestInterceptors.java,
+ 	* gnu/CORBA/Interceptor/Registrator.java,
+ 	* gnu/CORBA/Interceptor/ServerRequestInterceptors.java,
+ 	* gnu/CORBA/GIOP/contextSupportingHeader.java,
+ 	* org/omg/PortableInterceptor/ClientRequestInfo.java,
+ 	* org/omg/PortableInterceptor/ClientRequestInfoOperations.java,
+ 	* org/omg/PortableInterceptor/ClientRequestInterceptor.java,
+ 	* org/omg/PortableInterceptor/ClientRequestInterceptorOperations.java,
+ 	* org/omg/PortableInterceptor/Current.java,
+ 	* org/omg/PortableInterceptor/CurrentHelper.java,
+ 	* org/omg/PortableInterceptor/CurrentOperations.java,
+ 	* org/omg/PortableInterceptor/ForwardRequest.java,
+ 	* org/omg/PortableInterceptor/ForwardRequestHelper.java,
+ 	* org/omg/PortableInterceptor/InvalidSlot.java,
+ 	* org/omg/PortableInterceptor/InvalidSlotHelper.java,
+ 	* org/omg/PortableInterceptor/ORBInitInfo.java,
+ 	* org/omg/PortableInterceptor/ORBInitInfoOperations.java,
+ 	* org/omg/PortableInterceptor/ORBInitializer.java,
+ 	* org/omg/PortableInterceptor/ORBInitializerOperations.java,
+ 	* org/omg/PortableInterceptor/PolicyFactory.java,
+ 	* org/omg/PortableInterceptor/PolicyFactoryOperations.java,
+ 	* org/omg/PortableInterceptor/RequestInfo.java,
+ 	* org/omg/PortableInterceptor/RequestInfoOperations.java,
+ 	* org/omg/PortableInterceptor/ServerRequestInfo.java,
+ 	* org/omg/PortableInterceptor/ServerRequestInfoOperations.java,
+ 	* org/omg/PortableInterceptor/ServerRequestInterceptor.java,
+ 	* org/omg/PortableInterceptor/ServerRequestInterceptorOperations.java,
+ 	* org/omg/PortableInterceptor/package.html:
+ 	New files.
+ 	* gnu/CORBA/ExceptionCreator.java,
+ 	* gnu/CORBA/Functional_ORB.java,
+ 	* gnu/CORBA/IOR.java,
+ 	* gnu/CORBA/IOR_Delegate.java,
+ 	* gnu/CORBA/ObjectCreator.java,
+ 	* gnu/CORBA/Restricted_ORB.java,
+ 	* gnu/CORBA/bufferedResponseHandler.java,
+ 	* gnu/CORBA/gnuCodecFactory.java,
+ 	* gnu/CORBA/gnuRequest.java,
+ 	* gnu/CORBA/primitiveArrayTypeCode.java,
+ 	* gnu/CORBA/primitiveTypeCode.java,
+ 	* gnu/CORBA/CDR/Vio.java,
+ 	* gnu/CORBA/CDR/cdrOutput.java,
+ 	* gnu/CORBA/DynAn/gnuDynAny.java,
+ 	* gnu/CORBA/DynAn/gnuDynEnum.java,
+ 	* gnu/CORBA/DynAn/gnuDynFixed.java,
+ 	* gnu/CORBA/DynAn/gnuDynValue.java,
+ 	* gnu/CORBA/GIOP/ReplyHeader.java,
+ 	* gnu/CORBA/GIOP/RequestHeader.java,
+ 	* gnu/CORBA/GIOP/ServiceContext.java,
+ 	* gnu/CORBA/GIOP/v1_0/RequestHeader.java,
+ 	* gnu/CORBA/Poa/LocalDelegate.java,
+ 	* gnu/CORBA/Poa/LocalRequest.java,
+ 	* gnu/CORBA/Poa/ORB_1_4.java,
+ 	* gnu/CORBA/Poa/gnuServantObject.java,
+ 	* gnu/CORBA/Poa/servantDelegate.java,
+ 	* org/omg/CORBA/ServiceDetailHelper.java,
+ 	* org/omg/CORBA/DynAnyPackage/Invalid.java,
+ 	* org/omg/CORBA/DynAnyPackage/InvalidSeq.java,
+ 	* org/omg/CORBA/DynAnyPackage/InvalidValue.java,
+ 	* org/omg/CORBA/DynAnyPackage/TypeMismatch.java,
+ 	* org/omg/DynamicAny/NameDynAnyPairSeqHelper.java,
+ 	* org/omg/DynamicAny/_DynAnyFactoryStub.java,
+ 	* org/omg/DynamicAny/_DynAnyStub.java,
+ 	* org/omg/DynamicAny/_DynArrayStub.java,
+ 	* org/omg/DynamicAny/_DynEnumStub.java,
+ 	* org/omg/DynamicAny/_DynFixedStub.java,
+ 	* org/omg/DynamicAny/_DynSequenceStub.java,
+ 	* org/omg/DynamicAny/_DynStructStub.java,
+ 	* org/omg/DynamicAny/_DynUnionStub.java,
+ 	* org/omg/DynamicAny/_DynValueStub.java,
+ 	* org/omg/IOP/ServiceContext.java,
+ 	* org/omg/IOP/TaggedComponentHelper.java,
+ 	* org/omg/IOP/TaggedProfileHelper.java,
+ 	* org/omg/PortableInterceptor/IORInfo.java,
+ 	* org/omg/PortableInterceptor/IORInfoOperations.java,
+ 	* org/omg/PortableInterceptor/IORInterceptor.java,
+ 	* org/omg/PortableInterceptor/IORInterceptorOperations.java,
+ 	* org/omg/PortableInterceptor/Interceptor.java,
+ 	* org/omg/PortableInterceptor/LOCATION_FORWARD.java,
+ 	* org/omg/PortableInterceptor/SUCCESSFUL.java,
+ 	* org/omg/PortableInterceptor/SYSTEM_EXCEPTION.java,
+ 	* org/omg/PortableInterceptor/TRANSPORT_RETRY.java,
+ 	* org/omg/PortableInterceptor/USER_EXCEPTION.java,
+ 	* org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.java,
+ 	* org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHelper.java,
+ 	* org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.java,
+ 	* org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHelper.java,
+ 	* org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java:
+ 	Rewritten.
+ 	* org/omg/CORBA/ORB.java,
+ 	* org/omg/CORBA/package.html,
+ 	* NEWS:
+ 	Documentation update.
+ 
+ 2005-08-28  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/xpath/ArithmeticExpr.java: Fix div and mod by zero to
+ 	follow IEEE rules.
+ 
+ 2005-08-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* m4/acinclude.m4 (CLASSPATH_WITH_GLIBJ): Always check for 'zip'
+ 	program.  Changed zip install handling.
+ 
+ 2005-08-26  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/event/EventRequest.java: New file.
+ 	* gnu/classpath/jdwp/exception/JdwpIllegalArgumentException.java:
+ 	New file.
+ 
+ 2005-08-26  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/event/filters/IEventFilter.java: New file.
+ 	Describes the interface used for event filtering managed by
+ 	the event manager.
+ 	* gnu/classpath/jdwp/event/filters/ClassExcludeFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/ClassMatchFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/ClassOnlyFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/ConditionalFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/CountFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/InstanceOnlyFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/StepFilter.java: New file.
+ 	* gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java: New file.
+ 
+ 2005-08-26  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicCheckBoxUI.java
+ 	(installUI): removed,
+ 	* javax/swing/plaf/basic/BasicIconFactory.java
+ 	(CheckBoxMenuItemIcon): new support class,
+ 	(getCheckBoxMenuItemIcon): return instance of CheckBoxMenuItemIcon,
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): changed value for 'CheckBoxMenuItem.checkIcon'
+ 	and removed entry for 'CheckBoxMenuItem.icon',
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(paintMenuItem): let icon handle selection status,
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(CheckBoxMenuItemIcon): new support class,
+ 	(getCheckBoxIcon): implemented,
+ 	(getCheckBoxMenuItemIcon): implemented,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added entry for 'CheckBoxMenuItem.checkIcon'.
+ 
+ 2005-08-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(create): Only set overwrite confirmation if using GTK >= 2.8.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(setVisibleNative): Call gdk_flush before releasing GDK lock.
+ 	(setVisibleNativeUnlocked): Don't call gdk_flush.
+ 
+ 2005-08-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR classpath/21660:
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(AWT_FILEDIALOG_LOAD): New macro.
+ 	(AWT_FILEDIALOG_SAVE): Likewise.
+ 	(create(GtkContainerPeer,int)): Add mode parameter.  Create Save
+ 	dialog if mode is AWT_FILEDIALOG_SAVE.  Remove workaround for
+ 	http://bugzilla.gnome.org/show_bug.cgi?id=166852.
+ 	(create()): Add mode argument to create call.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(setVisibleNative): Override method.
+ 	(setVisibleNativeUnlocked): Override method.  Call gdk_flush after
+ 	showing or hiding window.
+ 	* include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h: Regenerate.
+ 	* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Regenerate.
+ 
+ 2005-08-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* timezones.pl (parseRule): Add dayoffset when $time represents
+ 	more then a day.
+ 	* java/util/TimeZone.java (timezones): Regenerate.
+ 
+ 2005-08-25  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/util/Value.java (Value): Update for
+ 	real VMIdManager API.
+ 	* gnu/classpath/jdwp/util/Location.java (Location): Likewise.
+ 
+ 2005-08-25  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/EventRequestCommandSet.java
+ 	(executeSet): Use constants for case values.
+ 	Fix "typo": It is really ThreadOnlyFilter.
+ 	Correct arguments to InstanceOnlyFilter.
+ 
+ 2005-08-25  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/CommandSet.java (CommandSet): Make
+ 	an abstract class.
+ 	Add protected variables for VMIdManager and VMVirtualMachine.
+ 	(runCommand): Make abstract.
+ 	* gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java
+ 	(ArrayReferenceCommandSet): Derive from CommandSet instead of
+ 	implementing it. Remove private hooks to ID manager and VM.
+ 	Update all VMIdManager and EventManager API calls.
+ 	* gnu/classpath/jdwp/processor/ArrayTypeCommandSet.java
+ 	(ArrayTypeCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java
+ 	(ClassLoaderReferenceCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/ClassObjectReferenceCommandSet.java
+ 	(ClassObjectReferenceCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/ClassTypeCommandSet.java
+ 	(ClassTypeCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/EventRequestCommandSet.java
+ 	(EventRequestCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/FieldCommandSet.java
+ 	(FieldCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/InterfaceTypeCommandSet.java
+ 	(InterfaceTypeCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/MethodCommandSet.java
+ 	(MethodCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java
+ 	(ObjectReferenceCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
+ 	(ReferenceTypeCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/StackFrameCommandSet.java
+ 	(StackFrameCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/StringReferenceCommandSet.java
+ 	(StringReferenceCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/ThreadGroupReferenceCommandSet.java
+ 	(ThreadGroupReferenceCommandSet.java): Likewise.
+ 	* gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java
+ 	(ThreadReferenceCommandSet): Likewise.
+ 	* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
+ 	(VirtualMachineCommandSet): Likewise.
+ 
+ 	* gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java
+ 	(executeStatus): Fix constant name.
+ 	* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
+ 	(executeDisposeObjects): Don't do anything yet -- this
+ 	is unimplemented.
+ 	
+ 2005-08-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Bastiaan Huisman <huisman@science.uva.nl>
+ 	* scripts/tzabbrevs: Change America/Buenos_Aires to
+ 	America/Argentina/Buenos_Aires for AGT link.
+ 	* scripts/timezones.pl (parseTime): Assume and return wall time.
+ 	Reindent output.
+ 	* java/util/TimeZone.java (timezones): Regenerate using tzdata2005l.
+ 
+ 2005-08-25  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/event/EventManager.java: New file concerning
+ 	JDWP event request management and notification infrastructure.
+ 
+ 2005-08-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * scripts/eclipse-gnu.xml: Reverted my patch 2005-07-31.
+         
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextPane.java
+ 	(JTextPane()): Don't set the document to null here.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.preferenceChanged): Revalidate the text component.
+ 	(RootView.setParent): Set parent of views to null. The parent
+ 	of the added child view is set to the root view in the
+ 	BasicTextUI class.
+ 	(RootView.getView): Implemented new method.
+ 	(RootView.getViewCount): Implemented new method.
+ 	(RootView.changedUpdate): Use the correct ViewFactory here.
+ 	(RootView.insertUpdate): Use the correct ViewFactory here.
+ 	(RootView.removeUpdate): Use the correct ViewFactory here.
+ 	(setView): Set the view's parent to the root view.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/View.java
+ 	(View): Don't manage child views here.
+ 	(getContainer): Throw AssertionError if we have no parent. This
+ 	should not happen.
+ 	(append): Call replace to do the real action. Child views
+ 	are not managed in the View class itself.
+ 	(removeAll): Give replace an empty array instead of null.
+ 	Avoids NPEs in subclasses that don't handle the null case.
+ 	(preferenceChanged): Don't revalidate here. This is too
+ 	expensive and not necessary.
+ 	(updateChildren): Let replace do the actual action. We don't
+ 	manage child views in the View class.
+ 	(forwardUpdate): Don't access children directly.
+ 	(dump): Added package private methods useful for debugging.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/StyledEditorKit.java
+ 	(StyledViewFactory.create): Use new BoxView constructor. Throw
+ 	AssertionError if an unknown element type is encountered,
+ 	since this should not happen.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/GlyphView.java
+ 	(GlyphPainter): Implemented abstract inner class.
+ 	(DefaultGlyphPainter): Implemented concrete impl of
+ 	GlyphPainter.
+ 	(getGlyphPainter): Implemented new method.
+ 	(setGlyphPainter): Likewise.
+ 	(checkPainter): Likewise.
+ 	(paint): Likewise.
+ 	(getPreferredSpan): Likewise.
+ 	(modelToView): Likewise.
+ 	(getTabExpander): Likewise.
+ 	(getTabbedSpan): Likewise.
+ 	(getPartialSpan): Likewise.
+ 	(getBeginIndex): Likewise.
+ 	(getEndIndex): Likewise.
+ 	(getText): Likewise.
+ 	(getFont): Likewise.
+ 	(getForeground): Likewise.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/GapContent.java
+ 	(getString): Throw BadLocationException instead of letting
+ 	a StringIndexOutOfBoundsException bubble up.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/ParagraphView.java
+ 	(Row): Implemented inner class.
+ 	(ParagraphView(Element)): Implemented constructor.
+ 	(nextTabStop): Added dummy implementation for TabExpander
+ 	interface.
+ 	(createRow): Implemented new method.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/FlowView.java
+ 	(FlowStrategy): Implemented inner class.
+ 	(LogicalView): Likewise.
+ 	(FlowView(Element, int)): Implemented constructor.
+ 	(getFlowAxis): Implemented new method.
+ 	(getFlowSpan): Likewise.
+ 	(getFlowStart): Likewise.
+ 	(createRow): Added new abstract method.
+ 	(loadChildren): Implemented new method.
+ 	(layout): Implemented new method.
+ 	(insertUpdate): Implemented new method.
+ 	(removeUpdate): Implemented new method.
+ 	(changedUpdate): Implemented new method.
+ 	(getViewIndexAtPosition): Implemented new method.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/CompositeView.java
+ 	(loadChildren): Call replace to actually change the child
+ 	elements. This way subclasses can modify the child
+ 	management behaviour by simply overriding replace.
+ 	(setParent): Only call loadChildren if the parent to be set
+ 	is actually not null.
+ 	(replace): Check for null children. Set the parent of removed
+ 	children to null. Set the parent of the added children to
+ 	this.
+ 	(modelToView): Added some sanity checks.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/BoxView.java
+ 	(BoxView(Element, int)): Implemented.
+ 	(getAxis): Likewise.
+ 	(setAxis): Likewise.
+ 	(layoutChanged): Likewise.
+ 	(isLayoutValid): Likewise.
+ 	(paintChild): Likewise.
+ 	(replace): Likewise.
+ 	(paint): Likewise.
+ 	(getPreferredSpan): Likewise.
+ 	(getMaximumSpan): Likewise.
+ 	(baselineRequirements): Likewise.
+ 	(calculateMajorAxisRequirements): Likewise.
+ 	(calculateMinorAxisRequirements): Likewise.
+ 	(isBefore): Likewise.
+ 	(isAfter): Likewise.
+ 	(getViewAtPoint): Likewise.
+ 	(childAllocation): Likewise.
+ 	(layout): Likewise.
+ 	(layoutMajorAxis): Likewise.
+ 	(layoutMinorAxis): Likewise.
+ 	(isAllocationValid): Likewise.
+ 	(getWidth): Likewise.
+ 	(getHeight): Likewise.
+ 	(setSize): Likewise.
+ 	(validateLayout): Likewise.
+ 
+ 2005-08-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(AbstractElement.dumpElement): Throw AssertionError when
+ 	a BadLocationException is encountered.
+ 	(BranchElement.getElementIndex): Return -1 if there is no child
+ 	element. Return elementCount - 1 if the requested offset is after
+ 	the child elements of that element.
+ 	(BranchElement.getEndOffset): Throw NPE if this element has no
+ 	children.
+ 	(BranchElement.getStartOffset): Throw NPE if this element has
+ 	no children.
+ 	(DefaultDocumentEvent.addEdit): Implemented.
+ 	(DefaultDocumentEvent.getChange): Implemented.
+ 
+ 2005-08-25  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JPasswordField.java
+ 	(setText): Changed to raise an AssertionError when a 
+ 	BadLocationException is caught.
+ 
+ 2005-08-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure.ac: Call AC_PROG_CXX.
+ 
+ 2005-08-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/xml/namespace/QName.java: Updated boilerplate address.
+ 	* gnu/xml/xpath/XPathParser.y: Likewise.
+ 	* gnu/xml/xpath/XPathParser.java: Regenerated.
+ 
+ 2005-08-25  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/xml/datatype/DatatypeFactory.java: minor API doc fixes,
+ 	* javax/xml/parsers/DocumentBuilder.java: likewise,
+ 	* javax/xml/parsers/SAXParser.java: likewise,
+ 	* javax/xml/transform/Source.java: likewise.
+ 
+ 2005-08-25  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/tree/DefaultTreeModel.java
+ 	(nodesWereRemoved): minor API doc fix.
+ 	
+ 2005-08-25  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(activeBGColor): removed,
+ 	(activeFGColor): removed,
+ 	(inactiveBGColor): removed,
+ 	(inactiveFGColor): removed,
+ 	(installDefaults): replaced removed fields above with correct ones,
+ 	(uninstallDefaults): likewise,
+ 	(setButtonIcons): implemented,
+ 	(paintComponent): replaced removed fields above with correct ones;
+ 	* javax/swing/plaf/metal/MetalInternalFrameTitlePane.java: implemented,
+ 	* javax/swing/plaf/metal/MetalInternalFrameUI.java
+ 	(createNorthPane): implemented,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added internal frame icons.
+ 
+ 2005-08-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java (getFont): Throw
+ 	RuntimeException in case of error.
+ 	* gnu/java/awt/EmbeddedWindow.java (addNotify): Likewise.
+ 
+ 2005-08-24  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(beginNativeRepaintID): Remove variable.
+ 	(endNativeRepaintID): Likewise.
+ 	(cp_gtk_button_init_jni): Don't look up beginNativeRepaint and
+ 	endNativeRepaint methods.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (resizing): Remove
+ 	field.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(resizing): Remove field.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java (hiding): Remove
+ 	field.
+ 	(setVisible): Don't override.
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(selectNative): New method.
+ 	(selectNativeUnlocked): Likewise.
+ 	(select): Call setNativeUnlocked if in the GTK main thread,
+ 	selectNative otherwise.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetSetCursorUnlocked): New method.
+ 	(setCursor(Cursor)): Call gtkWidgetSetCursorUnlocked if in the GTK
+ 	main thread, gtkWidgetSetCursor otherwise.
+ 	(setVisibleNative): New method.
+ 	(setVisibleNativeUnlocked): Likewise.
+ 	(setVisible): Call setVisibleNativeUnlocked if in the GTK main
+ 	thread, setVisibleNative otherwise.
+ 	(hide): Call setVisible(false).
+ 	(show): Call setVisible(true).
+ 
+ 2005-08-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/SimpleDateFormat.java (compileFormat): Correctly
+ 	handle quoted single quotes.  PR classpath/23183.
+ 
+ 2005-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/gnu/classpath/jdwp/VMFrame.java: Update copyright
+ 	boilerplate address.
+ 	* vm/reference/gnu/classpath/jdwp/VMIdManager.java: Likewise.
+ 
+ 2005-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: Fix announcement url.
+ 
+ 2005-08-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(InternalFrameCloseIcon): new private class,
+ 	(InternalFrameAltMaximizeIcon): likewise,
+ 	(InternalFrameMaximizeIcon): likewise,
+ 	(InternalFrameMinimizeIcon): likewise,
+ 	(getInternalFrameCloseIcon): implemented,
+ 	(getInternalFrameMaximizeIcon): implemented,
+ 	(getInternalFrameMinimizeIcon): implemented,
+ 	(getInternalFrameAltMaximizeIcon): implemented.
+ 
+ 2005-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/CORBA/ForwardRequestHelper.java: Update copyright boilerplate
+ 	address.
+ 	* gnu/classpath/jdwp/processor/CommandSet.java: Likewise.
+ 	* gnu/classpath/jdwp/processor/StringReferenceCommandSet.java:
+ 	Likewise.
+ 	* gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java:
+ 	Likewise.
+ 	* gnu/classpath/jdwp/processor/ClassTypeCommandSet.java: Likewise.
+ 	* gnu/classpath/jdwp/processor/StackFrameCommandSet.java: Likewise.
+ 	* gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java:
+ 	Likewise.
+ 	* gnu/classpath/jdwp/util/LineTable.java: Likewise.
+ 	* gnu/classpath/jdwp/util/MethodResult.java: Likewise.
+ 	* gnu/classpath/jdwp/util/VariableTable.java: Likewise.
+ 	* javax/xml/namespace/QName.java: Likewise.
+ 	* org/omg/DynamicAny/_DynAnyFactoryStub.java: Likewise.
+ 	* org/omg/DynamicAny/_DynAnyStub.java: Likewise.
+ 	* org/omg/DynamicAny/_DynArrayStub.java: Likewise.
+ 	* org/omg/DynamicAny/_DynEnumStub.java: Likewise.
+ 	* org/omg/DynamicAny/_DynFixedStub.java: Likewise.
+ 	* org/omg/DynamicAny/_DynSequenceStub.java: Likewise.
+ 	* org/omg/DynamicAny/_DynStructStub.java: Likewise.
+ 	* org/omg/DynamicAny/_DynUnionStub.java: Likewise.
+ 	* org/omg/DynamicAny/_DynValueStub.java: Likewise.
+ 	* org/omg/PortableServer/ForwardRequest.java: Likewise.
+ 	* org/omg/PortableServer/CurrentHelper.java: Likewise.
+ 	* org/omg/PortableServer/ForwardRequestHelper.java: Likewise.
+ 	* org/omg/PortableServer/ServantActivatorHelper.java: Likewise.
+ 	* org/omg/PortableServer/ServantLocatorHelper.java: Likewise.
+ 	* org/omg/PortableServer/_ServantActivatorStub.java: Likewise.
+ 	* org/omg/PortableServer/_ServantLocatorStub.java: Likewise.
+ 
+ 2005-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.18-pre.
+ 
+ 2005-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: Add Generics Branch Merge
+ 	Announcement.
+ 
+ 2005-08-24  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/DefaultCellEditor.java
+ 	(isCellEditable): Reversed last changes.
+ 
+ 2005-08-24  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/DefaultCellEditor.java
+ 	(isCellEditable): If the event is null, the cell is still 
+ 	editable.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(getVisibleEditorRect): Use getPreferredSize to get the width
+ 	and height.
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(paint): Fixed to paint the JTextField with the background
+ 	and border at the correct location.
+ 	(DefaultTreeCellEditor): Changed to initialize realEditor.
+ 	(configureEditingComponent): Helper function implemented.
+ 	(getTreeCellEditorComponent): Fixed to use realEditor to get component.
+ 	(isCellEditable): Fixed to configure editing component.
+ 	(shouldSelectCell): Always returns true.
+ 	(stopCellEditing): Fixed to configure editing component if needed.
+ 	(cancelCellEditing): Fixed to configure editing component if needed.
+ 	(createTreeCellEditor): Fixed to initialize fields.
+ 
+ 2005-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* resource/japhar-0.09.patch.1: Removed.
+ 	* resource/orp-1.0.8.patch: Removed.
+ 	* resource/orp-1.0.9.patch: Removed.
+ 	* resource/Makefile.am (EXTRA_DIST): Removed.
+ 
+ 2005-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Split in general changes and vm interface changes. Add RawData
+ 	to Pointer conversion.
+ 
+ 2005-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-lang/java_lang_VMDouble.c
+ 	(Java_java_lang_VMDouble_parseDouble): Remove KISSME_LINUX_USER hack.
+ 
+ 2005-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Check for QtGui >= 4.0.1. Check for and
+ 	add extra include dirs ($includedir/Qt) to QT_CFLAGS.
+ 	* native/jni/qt-peer/.cvsignore: Add slotcallbacks.moc.h.
+ 	* native/jni/qt-peer/Makefile.am (QT_CXXFLAGS): Removed.
+ 	(libqtpeer_la_CXXFLAGS): Removed.
+ 	(libqtpeer_la_LDFLAGS): Removed.
+ 	(AM_LDFLAGS): Set to @CLASSPATH_MODULE@ @QT_LIBS@.
+ 	(AM_CXXFLAGS): Set to @QT_CFLAGS@.
+ 
+ 2005-08-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(installDefaults): just fetch border from UIDefaults,
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(InternalFrameDefaultMenuIcon): implemented,
+ 	(getInternalFrameDefaultMenuIcon): implemented,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): add values for "InternalFrame.border" and
+ 	"InternalFrame.icon".
+ 
+ 2005-08-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(InternalFrameBorder): implemented.
+ 	
+ 2005-08-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java
+ 	(installDefaults): set background color using "desktop" color,
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initSystemColorDefaults): removed "Desktop.background" color,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initSystemColorDefaults): added "desktop" color.
+ 
+ 2005-08-23  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(stopEditing): Implemented.
+ 	(cancelEditing): Implemented.
+ 	(startEditingAtPath): Implemented.
+ 	(getEditingPath): Implemented.
+ 	(createDefaultCellEditor): Implemented.
+ 	(updateCellEditor): Implemented.
+ 	(completeEditing): Implemented.
+ 	(completeEditing): Implemented.
+ 	(startEditing): Implemented.
+ 	(editingStopped): Implemented.
+ 	(editingCanceled): Implemented.
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(stopCellEditing): Stopped the timer.
+ 	(cancelCellEditing): Likewise.
+ 	
+ 2005-08-23  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/DefaultCellEditor.java
+ 	(getTreeCellEditorComponent): Implemented cases for JCheckBox
+ 	and JComboBox.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(BasicTreeUI): Moved lines to installUI where the renderer
+ 	and editor are created.
+ 	(installUI): Likewise.
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(getPreferredSize): Implemented.
+ 	(DefaultTreeCellEditor): Implemented.
+ 	(DefaultTreeCellEditor): Implemented.
+ 	(getTreeCellEditorComponent): Implemented.
+ 	(getCellEditorValue): Implemented.
+ 	(isCellEditable): Implemented.
+ 	(shouldSelectCell): Implemented.
+ 	(stopCellEditing): Implemented.
+ 	(cancelCellEditing): Implemented.
+ 	(valueChanged): Implemented.
+ 	(actionPerformed): Implemented.
+ 	(shouldStartEditingTimer): Implemented.
+ 	(startEditingTimer): Implemented.
+ 	(canEditImmediately): Implemented.
+ 	(inHitRegion): Implemented.
+ 	(determineOffset): Implemented.
+ 	(prepareForEditing): Implemented.
+ 	(createContainer): Implemented.
+ 	(createTreeCellEditor): Implemented.
+ 
+ 2005-08-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/SimpleDateFormat.java (compileFormat): Reformatted.
+ 
+ 2005-08-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/23531
+ 	* java/sql/Date.java (toString): Not deprecated.
+ 	(valueOf): Likewise.
+ 	* java/sql/Time.java (toString): Not deprecated.
+ 	(valueOf): Likewise.
+ 
+ 2005-08-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/UIManager.java:  
+ 	(addAuxiliaryLookAndFeel): renamed field, added check for null 
+ 	argument,
+ 	(removeAuxiliaryLookAndFeel): reimplemented,
+ 	(getAuxiliaryLookAndFeels): renamed field,
+ 	(installLookAndFeel): implemented by delegation.
+ 
+ 2005-08-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/UIManager.java: added API docs all over.
+ 	
+ 2005-08-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/UIManager.java: 
+ 	(look_and_feel): renamed currentLookAndFeel,
+ 	(currentUIDefaults): new field,
+ 	(get(Object)): access cached UIDefaults,
+ 	(get(Object, Locale)): likewise,
+ 	(getBoolean(Object)): likewise,
+ 	(getBoolean(Object, Locale)): likewise,
+ 	(getBorder(Object)): likewise,
+ 	(getBorder(Object, Locale)): likewise,
+ 	(getColor(Object)): likewise,
+ 	(getColor(Object, Locale)): likewise,
+         (getDefaults): return reference to UIDefaults from current look and 
+ 	feel rather than recreating them every time,
+ 	(getDimension(Object)): access local defaults,
+ 	(getDimension(Object, Locale)): likewise,
+ 	(getFont(Object)): likewise,
+ 	(getFont(Object, Locale)): likewise,
+ 	(getIcon(Object)): likewise,
+ 	(getIcon(Object, Locale)): likewise,
+ 	(getInsets(Object)): likewise,
+ 	(getInsets(Object, Locale)): likewise,
+ 	(getInt(Object)): likewise,
+ 	(getInt(Object, Locale)): likewise,
+         (getLookAndFeel): renamed attribute,
+ 	(getLookAndFeelDefaults): return reference to UIDefaults from current
+ 	look and feel rather than recreating them every time,
+ 	(getString(Object)): access local defaults,
+ 	(getString(Object, Locale)): likewise,
+ 	(getUI(JComponent)): likewise,
+ 	(installLookAndFeel(String, String)): implemented by delegation,
+ 	(put(Object, Object)): update local defaults,
+ 	(setLookAndFeel): create and retain reference to UIDefaults.
+ 
+ 2005-08-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/UIManager.java:
+ 	(addPropertyChangeListener): implemented,
+ 	(removePropertyChangeListener): likewise,
+ 	(getPropertyChangeListeners): likewise,
+ 	(setLookAndFeel): fire a property change event.
+ 	
+ 2005-08-23  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(BasicTreeUI): Moved these lines to installUI 
+ 	because they were causing NullPointerExceptions.
+ 	(installUI): Added code from constructor.
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	(createUI): Formatted code.
+ 
+ 2005-08-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure.ac: Fixed typo.
+ 
+ 2005-08-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/event/SwingPropertyChangeSupport.java
+ 	(writeObject): removed empty method,
+ 	(readObject): likewise,
+ 	(getPropertyChangeListeners()): implemented,
+ 	(getPropertyChangeListeners(String)): likewise,
+ 	(hasListeners): return true if there are any general listeners,
+ 	added API docs all over.
+ 	
+ 2005-08-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/qt-peer/qttextfieldpeer.cpp
+ 	(Java_gnu_java_awt_peer_qt_QtTextFieldPeer_getCaretPosition): Renamed
+ 	from Java_gnu_java_awt_peer_qt_QtTextFieldPeer_getCaretPositionNative.
+ 
+ 	* gnu/java/awt/peer/qt/QtComponentPeer.java (getMinimumSizeNative):
+ 	Removed unused native method.
+ 	(getPreferredSizeNative): Likewise.
+ 
+ 	* include/gnu_java_awt_peer_qt_QMatrix.h: Regenerated.
+ 	* include/gnu_java_awt_peer_qt_QPainterPath.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QPen.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtAudioClip.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtButtonPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtCanvasPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtCheckboxPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtChoicePeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtComponentPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtContainerPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtDialogPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtFileDialogPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtFontMetrics.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtFontPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtFramePeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtGraphics.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtImage.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtLabelPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtListPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtMenuBarPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtMenuItemPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtMenuPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtPanelPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtScreenDevice.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtScrollPanePeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtScrollbarPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtTextAreaPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtTextFieldPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtToolkit.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtVolatileImage.h: Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtWindowPeer.h: Likewise.
+ 
+ 2005-08-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (getNextEvent): Don't check if this is
+ 	the dispatch thread.
+ 
+ 2005-08-23  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/qt/QtAudioClip.java
+ 	* gnu/java/awt/peer/qt/QtComponentGraphics.java
+ 	* gnu/java/awt/peer/qt/QtComponentPeer.java
+ 	* gnu/java/awt/peer/qt/QtDialogPeer.java
+ 	* gnu/java/awt/peer/qt/QtFontPeer.java
+ 	* gnu/java/awt/peer/qt/QtFramePeer.java
+ 	* gnu/java/awt/peer/qt/QtGraphics.java
+ 	* gnu/java/awt/peer/qt/QtImage.java
+ 	* gnu/java/awt/peer/qt/QtImageGraphics.java
+ 	* gnu/java/awt/peer/qt/QtLabelPeer.java
+ 	* gnu/java/awt/peer/qt/QtMenuBarPeer.java
+ 	* gnu/java/awt/peer/qt/QtMenuComponentPeer.java
+ 	* gnu/java/awt/peer/qt/QtMenuPeer.java
+ 	* gnu/java/awt/peer/qt/QtPanelPeer.java
+ 	* gnu/java/awt/peer/qt/QtRepaintThread.java
+ 	* gnu/java/awt/peer/qt/QtToolkit.java
+ 	* gnu/java/awt/peer/qt/QtVolatileImage.java
+ 	* include/gnu_java_awt_peer_qt_QtComponentPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtGraphics.h
+ 	* include/gnu_java_awt_peer_qt_QtMenuPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtVolatileImage.h
+ 	* native/jni/qt-peer/componentevent.cpp
+ 	* native/jni/qt-peer/componentevent.h
+ 	* native/jni/qt-peer/eventmethods.h
+ 	* native/jni/qt-peer/keybindings.cpp
+ 	* native/jni/qt-peer/keybindings.h
+ 	* native/jni/qt-peer/qtcomponentpeer.cpp
+ 	* native/jni/qt-peer/qtframepeer.cpp
+ 	* native/jni/qt-peer/qtgraphics.cpp
+ 	* native/jni/qt-peer/qtimage.h
+ 	* native/jni/qt-peer/qtlabelpeer.cpp
+ 	* native/jni/qt-peer/qtmenucomponentpeer.cpp
+ 	* native/jni/qt-peer/qtmenupeer.cpp
+ 	* native/jni/qt-peer/qtscrollpanepeer.cpp
+ 	* native/jni/qt-peer/qttextfieldpeer.cpp
+ 	* native/jni/qt-peer/qtvolatileimage.cpp
+ 	* native/jni/qt-peer/qtwindowpeer.cpp:
+ 	Reindented, minor fixes.
+ 	* gnu/java/awt/peer/qt/QtImageDirectGraphics.java
+ 	New file.
+ 	
+ 2005-08-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/JarURLConnection.java (getJarEntry): Return null if no
+ 	entry specified.
+ 
+ 2005-08-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/split-for-gcj.sh: Create Makefile.deps atomically.
+ 	* lib/gen-classlist.sh.in: Don't run split-for-gcj.sh.
+ 	* lib/Makefile.gcj (Makefile.deps): New target.
+ 	* lib/Makefile.am (compile-classes): Pass top_srcdir to
+ 	Makefile.gcj.
+ 
+ 2005-08-22  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Added in default border for Tree.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java:
+ 	Formatting entire class.
+ 	(getPreferredSize): Implemented.
+ 
+ 2005-08-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/event/SwingPropertyChangeSupport.java: reformatted.
+ 	
+ 2005-08-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/ImageIcon.java: Add documentation.
+ 
+ 2005-08-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/text/LayoutQueue.java: New file.
+ 
+ 2005-08-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/23499:
+ 	* doc/api/Makefile.am (install-data-local): Now conditional on
+ 	CREATE_API_DOCS.
+ 	(uninstall-local): Likewise.
+ 
+ 2005-08-22  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.am (ACLOCAL_AMFLAGS): New.
+ 
+ 2005-08-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/UIManager.java: fixed error message typo in static
+ 	initialization code.
+ 	
+ 2005-08-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java: fixed minor API doc problems,
+ 	* javax/swing/text/Caret.java: likewise,
+ 	* javax/swing/text/CompositeView.java: likewise,
+ 	* javax/swing/text/DefaultCaret.java: likewise,
+ 	* javax/swing/text/DefaultEditorKit.java: likewise,
+ 	* javax/swing/text/DefaultStyledDocument.java: likewise,
+ 	* javax/swing/text/ElementIterator.java: likewise,
+ 	* javax/swing/text/GlyphView.java: likewise,
+ 	* javax/swing/text/IconView.java: likewise,
+ 	* javax/swing/text/View.java: likewise.
+ 
+ 2005-08-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/SwingUtilities.java: fixed some minor API doc problems.
+ 	
+ 2005-08-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* NEWS: added item regarding javax.swing.plaf.multi.* package 
+ 	implementation.
+ 	
+ 2005-08-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gtkpeer.h (cp_gtk_clipboard,
+ 	cp_gtk_stringTarget, cp_gtk_imageTarget, cp_gtk_filesTarget): New
+ 	extern variables.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c: New file.
+ 	* native/jni/gtk-peer/Makefile.am (libgtkpeer_la_SOURCES): Add
+ 	gnu_java_awt_peer_gtk_GtkSelection.c.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c: Renames
+ 	clipboard to cp_gtk_clipboard, stringTarget to cp_gtk_stringTarget,
+ 	imageTarget to cp_gtk_imageTarget, filesTarget to cp_gtk_filesTarget,
+ 	cp_gtk_clipboard_owner_change_cb to clipboard_owner_change_cb,
+ 	cp_gtk_clipboard_get_func to clipboard_get_func,
+ 	cp_gtk_clipboard_clear_func to clipboard_clear_func, moved
+ 	GtkSelection native methods to new file.
+ 
+ 2005-08-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkSelection.java: Update for new FSF
+ 	address.
+ 
+ 2005-08-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(KEYBOARD_DIVIDER_MOVE_OFFSET): Initialize with 3.
+ 
+ 2005-08-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/swing/ImageIcon.java (getIconHeight): Return -1 if image
+ 	is null.
+ 	(getIconWidth): Likewise.
+ 
+ 2005-08-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_get_frame_extents): If window is not decorated, guess 0,
+ 	0, 0, 0 inset values.
+ 
+ 2005-08-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/text/AbstractWriter.java (NEWLINE): Now 'final'.
+ 
+ 2005-08-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Label.java (setText): Refine text inequality test.
+ 
+ 2005-08-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (setClip(Shape)): Clear
+ 	clip when clip == null.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (setClip(Shape)):
+ 	Likewise.
+ 
+ 2005-08-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Label.java (setText): Invalidate label.
+ 
+ 2005-08-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/image/AreaAveragingScaleFilter.java: Add checks for
+ 	consumer != null.
+ 	* java/awt/image/CropImageFilter.java: Likewise.
+ 	* java/awt/image/ImageFilter.java: Likewise.
+ 	* java/awt/image/RGBImageFilter.java: Likewise.
+ 	* java/awt/image/ReplicateScaleFilter.java: Likewise.
+ 
+ 2005-08-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java (findFormatName):
+ 	Just return null when ext == null.
+ 
+ 2005-08-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/AWTKeyStroke.java (getAWTKeyStroke): Include old-style
+ 	modifiers in returned AWTKeyStroke's modifier mask.
+ 
+ 2005-08-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (setStroke): Clear
+ 	dashes if dashes is null.
+ 	(setStrokeUnlocked): Likewise.
+ 
+ 2005-08-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Window.java (getMostRecentFocusOwner): New method.
+ 
+ 2005-08-20  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/qt/MainQtThread.java
+ 	* gnu/java/awt/peer/qt/QtComponentGraphics.java
+ 	* gnu/java/awt/peer/qt/QtComponentPeer.java
+ 	* gnu/java/awt/peer/qt/QtEmbeddedWindowPeer.java
+ 	* gnu/java/awt/peer/qt/QtFramePeer.java
+ 	* gnu/java/awt/peer/qt/QtImage.java
+ 	* gnu/java/awt/peer/qt/QtListPeer.java
+ 	* gnu/java/awt/peer/qt/QtScreenDeviceConfiguration.java
+ 	* gnu/java/awt/peer/qt/QtToolkit.java
+ 	* native/jni/qt-peer/componentevent.cpp
+ 	* native/jni/qt-peer/componentevent.h
+ 	* native/jni/qt-peer/eventmethods.h
+ 	* native/jni/qt-peer/mainqtthread.cpp
+ 	* native/jni/qt-peer/mainthreadinterface.cpp
+ 	* native/jni/qt-peer/mainthreadinterface.h
+ 	* native/jni/qt-peer/qtcomponentpeer.cpp
+ 	* native/jni/qt-peer/qtframepeer.cpp
+ 	* native/jni/qt-peer/qtgraphics.cpp
+ 	Refactored.
+ 	* include/gnu_java_awt_peer_qt_MainQtThread.h
+ 	* include/gnu_java_awt_peer_qt_QMatrix.h
+ 	* include/gnu_java_awt_peer_qt_QPainterPath.h
+ 	* include/gnu_java_awt_peer_qt_QPen.h
+ 	* include/gnu_java_awt_peer_qt_QtAudioClip.h
+ 	* include/gnu_java_awt_peer_qt_QtButtonPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtCanvasPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtCheckboxPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtChoicePeer.h
+ 	* include/gnu_java_awt_peer_qt_QtComponentPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtContainerPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtDialogPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtFileDialogPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtFontMetrics.h
+ 	* include/gnu_java_awt_peer_qt_QtFontPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtFramePeer.h
+ 	* include/gnu_java_awt_peer_qt_QtGraphics.h
+ 	* include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h
+ 	* include/gnu_java_awt_peer_qt_QtImage.h
+ 	* include/gnu_java_awt_peer_qt_QtLabelPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtListPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtMenuBarPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtMenuItemPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtMenuPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtPanelPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtScreenDevice.h
+ 	* include/gnu_java_awt_peer_qt_QtScrollPanePeer.h
+ 	* include/gnu_java_awt_peer_qt_QtScrollbarPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtTextAreaPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtTextFieldPeer.h
+ 	* include/gnu_java_awt_peer_qt_QtToolkit.h
+ 	* include/gnu_java_awt_peer_qt_QtVolatileImage.h
+ 	* include/gnu_java_awt_peer_qt_QtWindowPeer.h
+ 	Regenerated.
+ 	* gnu/java/awt/peer/qt/QtRepaintThread.java:
+ 	New file.
+ 
+ 2005-08-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gtk_jawt.c
+ 	(classpath_jawt_get_default_display): Remove locking.
+ 	(classpath_jawt_get_visualID): Likewise.
+ 	(classpath_jawt_get_drawable): Likewise.
+ 	(classpath_jawt_object_lock): Remove function.
+ 	(classpath_jawt_object_unlock): Likewise.
+ 	(classpath_jawt_create_lock): Likewise.
+ 	(classpath_jawt_destroy_lock): Likewise.
+ 	* native/jni/classpath/classpath_jawt.h
+ 	(classpath_jawt_object_lock): Remove function.
+ 	(classpath_jawt_object_unlock): Likewise.
+ 	(classpath_jawt_create_lock): Likewise.
+ 	(classpath_jawt_destroy_lock): Likewise.
+ 	* native/jawt/jawt.c [!__GNUC__] (__attribute__): Define to
+ 	nothing.
+ 	(_Jv_Lock): Call classpath_jawt_lock.
+ 	(_Jv_Unlock): Call classpath_jawt_unlock.
+ 	(_Jv_GetDrawingSurfaceInfo): Move surface_info_x11 initialization
+ 	from ...
+ 	(_Jv_GetDrawingSurface): Remove surface_info_x11 initialization.
+ 	(_Jv_FreeDrawingSurface): Don't destroy target object.
+ 	* native/jawt/Makefile.am: Add SONAME FIXME.
+ 	* include/jawt_md.h (struct _JAWT_X11DrawingSurfaceInfo): Re-order
+ 	display field.  Add colour map, depth and GetAWTColor function
+ 	pointer fields.
+ 	* include/jawt.h (struct _JAWT_Rectangle): New structure.
+ 	(struct _JAWT_DrawingSurfaceInfo): Add drawing surface, bounds,
+ 	clip size and clipping rectangle fields.
+ 	(struct _JAWT_DrawingSurface): Add env field.  Rename lock field
+ 	target.  Re-order function pointer and lock fields.  Remove
+ 	surface_info field.
+ 	(struct _JAWT): Add GetComponent function pointer field.
+ 
+ 2005-08-20  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/id/ClassLoaderId.java (getClassLoader): New method.
+ 	* gnu/classpath/jdwp/id/ClassObjectId.java (getClassObject): New method.
+ 	* gnu/classpath/jdwp/id/JdwpId.java 
+ 	(getReference): New method.
+ 	(setReference): New method.
+ 	* gnu/classpath/jdwp/id/ObjectId.java (getObject): New method.
+ 	* gnu/classpath/jdwp/id/ReferenceTypeId.java (getType): New method.
+ 	* gnu/classpath/jdwp/id/StringId.java (getString): New method.
+ 	* gnu/classpath/jdwp/id/ThreadGroupId.java (getThreadGroup): New method.
+ 	* gnu/classpath/jdwp/id/ThreadId.java (getThread): New method.
+ 
+ 	* gnu/classpath/jdwp/id/ObjectId.java (setId): New method.
+ 	(disableCollection): New method.
+ 	(enableCollection): New method.
+ 
+ 	* gnu/classpath/jdwp/id/JdwpId.java (equals): Remove test for class equality.
+ 	(setId): Make public.
+ 
+ 2005-08-20  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/exception/InvalidThreadGroupException.java
+ 	(InvalidThreadGroupException): Fix misleading string error message.
+ 	(InvalidThreadGroupException): Fix typo -- should be
+ 	JdwpConstants.Error.INVALID_THREAD_GROUP.
+ 
+ 	* gnu/classpath/jdwp/exception/InvalidClassLoaderException.java: New
+ 	exception.
+ 	* gnu/classpath/jdwp/exception/InvalidFieldException.java: New
+ 	exception.
+ 	* gnu/classpath/jdwp/exception/InvalidLocationException.java: New
+ 	exception.
+ 	* gnu/classpath/jdwp/exception/InvalidMethodException.java: New
+ 	exception.
+ 
+ 2005-08-19  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+         * NEWS: Added note about DynamicAny package.
+ 
+ 2005-08-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/qt-peer/Makefile.am (libqtpeer_la_SOURCES):
+ 	Added eventmethods.h.
+ 
+ 2005-08-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/tree/DefaultTreeCellEditor.java: Removed erroneous
+ 	import.
+ 
+ 2005-08-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/text/AbstractWriter.java: New file.
+ 	* javax/swing/text/ElementIterator.java: New file.
+ 
+ 2005-08-19  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getCellBounds): No need to call getFont twice. This 
+ 	is fixed.
+ 	* javax/swing/tree/DefaultTreeCellEditor.java:
+ 	Added API documentation for all fields.
+ 	(getPreferredSize): Implemented.
+ 	(paint): Implemented.
+ 	(doLayout): Implemented.
+ 	(getFont): Implemented.
+ 	(getPreferredSize): Implemented.
+ 	(DefaultTreeCellEditor): Partially implemented.
+ 	(DefaultTreeCellEditor): Partially implemented.
+ 	(setBorderSelectionColor): Implemented.
+ 	(getBorderSelectionColor): Implemented.
+ 	(setFont): Implemented.
+ 	(getFont): Implemented.
+ 	(getTreeCellEditorComponent): Added API documentation.	
+ 	(getCellEditorValue): Added API documentation.
+ 	(isCellEditable): Added API documentation.
+ 	(shouldSelectCell): Added API documentation.
+ 	(stopCellEditing): Added API documentation.
+ 	(cancelCellEditing): Added API documentation.
+ 	(valueChanged): Added API documentation.
+ 	(actionPerformed): Added API documentation.
+ 	(setTree): Implemented.
+ 	(shouldStartEditingTimer): Added API documentation.
+ 	(startEditingTimer): Added API documentation.
+ 	(canEditImmediately): Added API documentation.
+ 	(inHitRegion): Added API documentation.
+ 	(determineOffset): Added API documentation.
+ 	(prepareForEditing): Added API documentation.
+ 	(createContainer): Added API documentation.
+ 	(createTreeCellEditor): Added API documentation.
+ 
+ 2005-08-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* lib/.cvsignore: Add META-INF, Makefile.deps and lists.
+ 
+ 2005-08-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* configure.ac: Generate native/jawt/Makefile.
+ 	* include/jawt.h: Import from libgcj.
+ 	* include/jawt_md.h: Likewise.
+ 	* native/Makefile.am (JAWTDIR): New variable.
+ 	* native/jawt: New directory.
+ 	* native/jawt/.cvsignore: New file.
+ 	* native/jawt/Makefile.am: Likewise.
+ 	* native/jawt/jawt.c: Import from libgcj.
+ 
+ 2005-08-19  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/tree/DefaultTreeModel.java
+ 	(setAsksAllowsChildren): Removed comment, unneeded.
+ 	(setRoot): Formatting.
+ 	(getIndexOfChild): Formatting.
+ 	(reload): Added API documentation.
+ 	(reload): Likewise.
+ 	(valueForPathChanged): Implemented.
+ 	(insertNodeInto): Implemented.
+ 	(removeNodeFromParent): Implemented.
+ 	(nodeChanged): Implemented.
+ 	(nodesWereInserted): Implemented.
+ 	(nodesWereRemoved): Implemented.
+ 	(nodesChanged): Implemented.
+ 	(nodeStructureChanged): Added API documentation.
+ 	(getPathToRoot): Implemented.
+ 	(getPathToRoot): Implemented.
+ 	(fireTreeNodesChanged): Added API documentation.
+ 
+ 2005-08-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/image/DirectColorModel.java
+ 	(createCompatibleWritableRaster): Added API documentation.
+ 
+ 2005-08-18  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Font.java (Font(String,Map)): Make package private.
+ 	* gnu/java/awt/ClasspathToolkit.java (getFont): Access
+ 	package-private Font.Font(String,Map) constructor using
+ 	reflection.
+ 
+ 2005-08-18  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/GLightweightPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkContainerPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	gnu/java/awt/peer/qt/QtComponentPeer.java,
+ 	gnu/java/awt/peer/qt/QtContainerPeer.java,
+ 	gnu/java/awt/peer/qt/QtFramePeer.java,
+ 	gnu/java/awt/peer/qt/QtMenuComponentPeer.java,
+ 	gnu/java/awt/peer/qt/QtScreenDeviceConfiguration.java,
+ 	gnu/java/awt/peer/qt/QtTextAreaPeer.java,
+ 	gnu/java/awt/peer/qt/QtTextFieldPeer.java,
+ 	gnu/java/awt/peer/qt/QtWindowPeer.java,
+ 	java/awt/peer/ComponentPeer.java,
+ 	java/awt/peer/ContainerPeer.java, java/awt/peer/FramePeer.java,
+ 	java/awt/peer/MenuComponentPeer.java,
+ 	java/awt/peer/TextComponentPeer.java,
+ 	java/awt/peer/WindowPeer.java: Add new 1.5 methods.
+ 	* java/awt/Window.java (Window()): Initialize
+ 	graphicsConfiguration.
+ 	* java/awt/GraphicsConfiguration.java
+ 	(createCompatibleVolatileImage(int,int,int)): New method.
+ 	* java/awt/Font.java (Font(String,Map)): Add FIXME.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(getLocalGraphicsEnvironment): Call new constructor.
+ 	* gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java (getToolkit):
+ 	Remove method.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
+ 	(GdkGraphicsEnvironment(GtkToolkit)): Remove method.
+ 	(GdkGraphicsEnvironment()): New constructor.
+ 	(getToolkit): Remove method.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
+ 	(getToolkit): Remove method.
+ 	(createCompatibleVolatileImage): New method.
+ 	* gnu/java/awt/ClasspathToolkit.java (getFont): Add FIXME.
+ 
+ 2005-08-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/DefaultCellEditor.java
+ 	(getTreeCellEditorComponent): Implemented.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(isEditing): Implemented.
+ 	(mouseClicked): Moved code to mousePressed
+ 	(mousePressed): Code moved here from mouseClicked and
+ 	added in code to stop editing.
+ 	(selectPath): Default is changed to CONTIGUOUS_TREE_SELECTION
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java
+ 	(DefaultTreeSelectionModel): Default is changed to CONTIGUOUS_TREE_SELECTION.
+ 
+ 2005-08-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	Set default size to 12.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(calculatePreferredSize): Don't restrict width and height to
+ 	a minimum of 20.
+ 
+ 2005-08-18  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* vm/reference/gnu/classpath/jdwp/VMIdManager.java: New file
+ 	with example implementation of ID-management for JDWP back-end.
+ 	* gnu/classpath/jdwp/id/JdwpIdFactory.java: Removed. Now part of
+ 	VMIdManager.
+ 
+ 2005-08-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(setHashColor): Implemented.
+ 	(getRowForPath): Implemented.
+ 
+ 2005-08-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(paint): Added check for null border.
+ 
+ 2005-08-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/FlowLayout.java
+ 	(setAlignment): Added comment explaining why we don't check
+ 	for illegal values here.
+ 
+ 2005-08-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/image/PixelGrabber.java
+ 	(startGrabbing): Replaced ImageConsumer.ABORTED with
+ 	ImageConsumer.IMAGEABORTED.
+ 
+ 2005-08-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/image/PixelGrabber.java
+ 	(constructors): Check if the ImageProducer is null and throw
+ 	a NPE if that is the case.
+ 	(startGrabbing): When an exception is thrown in the grabber thread,
+ 	exit gracefully and notify the waiting threads.
+ 	(imageComplete): Only call ip.removeConsumer() if ip is not null.
+ 
+ 2005-08-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/StringCharacterIterator.java
+ 	(StringCharacterIterator(String)): documented NullPointerException.
+ 	
+ 2005-08-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/multi/MultiButtonUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiColorChooserUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiComboBoxUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiDesktopIconUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiDesktopPaneUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiFileChooserUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiInternalFrameUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiLabelUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiListUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiLookAndFeel.java: new file,
+ 	* javax/swing/plaf/multi/MultiMenuBarUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiMenuItemUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiOptionPaneUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiPanelUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiPopupMenuUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiProgressBarUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiRootPaneUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiScrollBarUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiScrollPaneUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiSeparatorUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiSliderUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiSpinnerUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiSplitPaneUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiTabbedPaneUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiTableHeaderUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiTableUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiTextUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiToolBarUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiToolTipUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiTreeUI.java: new file,
+ 	* javax/swing/plaf/multi/MultiViewportUI.java: new file,
+ 	* javax/swing/plaf/multi/package.html: new file.
+ 	
+ 2005-08-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/util/Vector.java
+ 	(copyInto) fixed incorrect API description.
+ 	
+ 2005-08-17  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Remove
+ 	JamVM deadlock workarounds.
+ 
+ 2005-08-17  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu_java_awt_peer_gtk_GtkFramePeer.c (postConfigureEvent): Prevent
+ 	callback calling back into peers.
+ 	(setBounds): Likewise.
+ 	(setMenuBarWidthUnlocked): New method.
+ 	* native/jni/gtk-peer/gtkpeer.h (cp_gtk_filedialog_init_jni):
+ 	Declare function.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(gtkInit): Call cp_gtk_filedialog_init_jni.
+ 	(loadSystemColors): Work around deadlock.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(textcomponent_changed_cb): Don't release GDK lock.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(item_activate_cb): Don't release GDK lock.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(item_highlighted_cb): Don't release GDK lock.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(component_button_press_cb): Don't release GDK lock.
+ 	(component_button_release_cb): Likewise.
+ 	(component_motion_notify_cb): Likewise.
+ 	(component_enter_notify_cb): Likewise.
+ 	(component_leave_notify_cb): Likewise.
+ 	(component_expose_cb): Likewise.
+ 	(component_focus_in_cb): Likewise.
+ 	(component_focus_out_cb): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(block_expose_event_cb): Remove callback.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	gnu_java_awt_peer_gtk_GtkWindowPeer.c (postConfigureEvent):
+ 	Prevent callback calling back into peers.
+ 	(setBounds): Likewise.
+ 	(nativeSetBoundsUnlocked): New method.
+ 	(setBoundsUnlocked): Likewise.
+ 	(nativeSetVisibleUnlocked): Likewise.
+ 	(setVisibleUnlocked): Likewise.
+ 	(window_delete_cb): Don't release GDK lock.
+ 	(window_destroy_cb): Likewise.
+ 	(window_show_cb): Likewise.
+ 	(window_active_state_change_cb): Likewise.
+ 	(window_focus_state_change_cb): Likewise.
+ 	(window_focus_in_cb): Likewise.
+ 	(window_focus_out_cb): Likewise.
+ 	(window_window_state_cb): Likewise.
+ 	(window_property_changed_cb): Likewise.
+ 	(realize_cb): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (mainThread): New
+ 	variable.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (setVisible): Prevent
+ 	callback calling back into peers.
+ 	(filename_filter_cb): Don't release GDK lock.
+ 	(handle_response_cb): Likewise.
+ 	(cp_gtk_filedialog_init_jni): New function.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java (setState): Prevent
+ 	callback from calling back into peers.
+ 	(item_toggled_cb): Don't release GDK lock.
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
+ 	gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_prepared_cb): Don't
+ 	release GDK lock.
+ 	(area_updated_cb): Likewise.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu_java_awt_peer_gtk_GdkGraphics2D.c (initStateUnlocked): New
+ 	method.
+ 	(cairoSurfaceSetFilterUnlocked): Likewise.
+ 	(initComponentGraphics2DUnlocked): Likewise.
+ 	(setTexturePixelsUnlocked): Likewise.
+ 	(setGradientUnlocked): Likewise.
+ 	(cairoSetMatrixUnlocked): Likewise.
+ 	(cairoSetRGBAColorUnlocked): Likewise.
+ 	(cairoSetLineWidthUnlocked): Likewise.
+ 	(cairoSetLineCapUnlocked): Likewise.
+ 	(cairoSetLineJoinUnlocked): Likewise.
+ 	(cairoSetDashUnlocked): Likewise.
+ 	(cairoSetMiterLimitUnlocked): Likewise.
+ 	(setPaintUnlocked): Likewise.
+ 	(setTransformUnlocked): Likewise.
+ 	(setStrokeUnlocked): Likewise.
+ 	(setColorUnlocked): Likewise.
+ 	(setBackgroundUnlocked): Likewise.
+ 	(setRenderingHintsUnlocked): Likewise.
+ 	(setFontUnlocked): Likewise.
+ 	(realize_cb): Don't release GDK lock.  Call
+ 	initComponentGraphics2DUnlocked.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu_java_awt_peer_gtk_GdkGraphics.c (initStateUnlocked): New
+ 	method.
+ 	(initComponentGraphicsUnlocked): New method.
+ 	(realize_cb): Don't release GDK lock.  Call
+ 	initComponentGraphicsUnlocked.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h: Regenerate.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics2D.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkFramePeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Likewise.
+ 
+ 2005-08-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .project: Correctly omit jdwp from vm/reference.
+ 
+ 2005-08-17  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(viewToModel): Changed to match API spec.
+ 	* javax/swing/text/CompositeView.java
+ 	(viewToModel): Changed to match API spec.
+ 	* javax/swing/text/FieldView.java
+ 	(viewToModel): Changed to match API spec.
+ 	* javax/swing/text/GlyphView.java
+ 	(viewToModel): Changed to match API spec.
+ 	* javax/swing/text/IconView.java
+ 	(viewToModel): Changed to match API spec.
+ 	* javax/swing/text/PasswordView.java
+ 	(viewToModel): Changed to match API spec.
+ 	* javax/swing/text/PlainView.java
+ 	(viewToModel): Changed to match API spec.
+ 	* javax/swing/text/View.java
+ 	(viewToModel): Changed to match API spec.
+ 
+ 2005-08-17  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JList.java:
+ 	(indexToLocation): Implemented.
+ 	(getLastVisibleIndex): If the last index in the list is showing and
+ 	there is extra room at the bottom, return the last index, not -1.
+ 
+ 2005-08-17  Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getCellLocation): Added in check if node is a leaf.
+ 	Shouldnt call getChildCount if a leaf. May cause NPE.
+ 	(paintRecursive): Likewise.
+ 	(paintControlIcons): Likewise.
+ 	(findNode): Likewise.
+ 	(getNextNode): Likewise.
+ 	(getPreviousNode): Likewise.
+ 	(getNextSibling): Likewise.
+ 	(getPreviousSibling): Likewise.
+ 
+ 2005-08-17  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(paint): paints the background and border of cell.
+ 
+ 2005-08-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	Reported by Ingo Proetel  <proetel@aicas.com>
+ 	* java/awt/image/DirectColorModel.java
+ 	(createCompatibleWritableRaster): Added argument check.
+ 
+ 2005-08-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/FontMetrics.java
+ 	(charWidth(int)): Correctly map Unicode indices to char[] here.
+ 
+ 2005-08-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/lang/Character.java
+ 	(toChars(int)): New JDK1.5 method.
+ 	(toChars(int, char[], int)): New JDK1.5 method.
+ 	(charCount): New JDK1.5 method.
+ 	(isSupplementaryCodePoint): New JDK1.5 method.
+ 	(isValidCodePoint): New JDK1.5 method.
+ 
+ 2005-08-17  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/FontMetrics.java
+ 	(charWidth): Reversed Roman's patch, was not compiling.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(getTreeCellRendererComponent): Set Opaque to true for 
+ 	painting reasons.
+ 
+ 2005-08-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/qt/QtFramePeer.java (setIcon): Mark non-native
+ 	and add FIXME.
+ 	(setMaximizedBounds): Likewise.
+ 	* include/gnu_java_awt_peer_qt_QtFramePeer.h: Regenerated.
+ 	* native/jni/qt-peer/.cvsignore: New file.
+ 	* native/jni/qt-peer/Makefile.am (libqtpeer_la_SOURCES):
+ 	Remove eventmethods.h.
+ 	
+ 2005-08-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* scripts/check_jni_methods.sh: Find JNI method declarations in
+ 	.cpp files. Check both GNU style functions (start of line) and
+ 	one-line like declarations. Use diff -U 0, not -0.
+ 
+ 2005-08-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(paint): Don't paint the border here. If there is a border to
+ 	be painted, this is usually performed in JComponent.paint().
+ 
+ 2005-08-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/FontMetrics.java
+ 	(charWidth(int)): Correctly map Unicode indices to char[] here.
+ 
+ 2005-08-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Component.java
+ 	This applies to various variants of the repaint() methods:
+ 	(repaint): If the component is not showing, forward repaint
+ 	request to the parent.
+ 
+ 2005-08-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(paint): Don't fill the background here. If the label is opaque
+ 	then the background is filled in ComponentUI.update(), otherwise
+ 	it must not be touched.
+ 
+ 2005-08-17  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(setComponentBounds): Don't post COMPONENT_RESIZED event.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(setBoundsCallbackID): Remove variable.
+ 	(cp_gtk_window_init_jni): Don't initialize setBoundsCallbackID.
+ 	(setBoundsCallback): Remove method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
+ 	(setMenuBarPeer): Check if menubar is NULL.
+ 	(setMenuBarWidth): Likewise.
+ 	* java/awt/Window.java (dispatchEventImpl): Validate upon
+ 	receiving a COMPONENT_RESIZED event.
+ 	(setBoundsCallback): Remove method.
+ 	* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Regenerate.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java (setBoundsCallback):
+ 	Remove method declaration.
+ 	(postConfigureEvent): Separate handling of resizes and moves.
+ 	Call setSize and post COMPONENT_RESIZED event.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (postConfigureEvent):
+ 	Separate handling of resizes and moves.  Call setSize.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(setComponentBounds): Call setSize and post COMPONENT_RESIZED
+ 	event.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (isValidating):
+ 	Remove field.
+ 
+ 2005-08-15  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* configure.ac: Added option to enable building qt peers.
+ 
+ 	* include/Makefile.am: Added qt peer headers.
+ 
+ 	* include/gnu_java_awt_peer_qt_MainQtThread.h,
+ 	include/gnu_java_awt_peer_qt_QMatrix.h,
+         include/gnu_java_awt_peer_qt_QPainterPath.h,
+         include/gnu_java_awt_peer_qt_QPen.h,
+         include/gnu_java_awt_peer_qt_QtAudioClip.h,
+         include/gnu_java_awt_peer_qt_QtButtonPeer.h,
+         include/gnu_java_awt_peer_qt_QtCanvasPeer.h,
+         include/gnu_java_awt_peer_qt_QtCheckboxPeer.h,
+         include/gnu_java_awt_peer_qt_QtChoicePeer.h,
+         include/gnu_java_awt_peer_qt_QtComponentPeer.h,
+         include/gnu_java_awt_peer_qt_QtContainerPeer.h,
+         include/gnu_java_awt_peer_qt_QtDialogPeer.h,
+         include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h,
+         include/gnu_java_awt_peer_qt_QtFileDialogPeer.h,
+         include/gnu_java_awt_peer_qt_QtFontMetrics.h,
+         include/gnu_java_awt_peer_qt_QtFontPeer.h,
+         include/gnu_java_awt_peer_qt_QtFramePeer.h,
+         include/gnu_java_awt_peer_qt_QtGraphics.h,
+         include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h,
+         include/gnu_java_awt_peer_qt_QtImage.h,
+         include/gnu_java_awt_peer_qt_QtLabelPeer.h,
+         include/gnu_java_awt_peer_qt_QtListPeer.h,
+         include/gnu_java_awt_peer_qt_QtMenuBarPeer.h,
+         include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h,
+         include/gnu_java_awt_peer_qt_QtMenuItemPeer.h,
+         include/gnu_java_awt_peer_qt_QtMenuPeer.h,
+         include/gnu_java_awt_peer_qt_QtPanelPeer.h,
+         include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h,
+         include/gnu_java_awt_peer_qt_QtScreenDevice.h,
+         include/gnu_java_awt_peer_qt_QtScrollPanePeer.h,
+         include/gnu_java_awt_peer_qt_QtScrollbarPeer.h,
+         include/gnu_java_awt_peer_qt_QtTextAreaPeer.h,
+         include/gnu_java_awt_peer_qt_QtTextFieldPeer.h,
+         include/gnu_java_awt_peer_qt_QtToolkit.h,
+         include/gnu_java_awt_peer_qt_QtVolatileImage.h,
+         include/gnu_java_awt_peer_qt_QtWindowPeer.h,
+         native/jni/qt-peer/Makefile.am:
+ 	New files.
+ 
+ 	* native/jni/Makefile.am: Handle qt peers.
+ 
+ 	* native/jni/qt-peer/slotcallbacks.moc.h: Removed. Now generated
+ 	on demand by moc.
+ 
+ 2005-08-16  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/qt/QtButtonPeer.java
+ 	* gnu/java/awt/peer/qt/QtCheckboxPeer.java
+ 	* gnu/java/awt/peer/qt/QtChoicePeer.java
+ 	* gnu/java/awt/peer/qt/QtComponentGraphics.java
+ 	* gnu/java/awt/peer/qt/QtComponentPeer.java
+ 	* gnu/java/awt/peer/qt/QtContainerPeer.java
+ 	* gnu/java/awt/peer/qt/QtDialogPeer.java
+ 	* gnu/java/awt/peer/qt/QtFontPeer.java
+ 	* gnu/java/awt/peer/qt/QtFramePeer.java
+ 	* gnu/java/awt/peer/qt/QtGraphics.java
+ 	* gnu/java/awt/peer/qt/QtImage.java
+ 	* gnu/java/awt/peer/qt/QtImageGraphics.java
+ 	* gnu/java/awt/peer/qt/QtListPeer.java
+ 	* gnu/java/awt/peer/qt/QtMenuBarPeer.java
+ 	* gnu/java/awt/peer/qt/QtMenuItemPeer.java
+ 	* gnu/java/awt/peer/qt/QtMenuPeer.java
+ 	* gnu/java/awt/peer/qt/QtScrollbarPeer.java
+ 	* gnu/java/awt/peer/qt/QtTextAreaPeer.java
+ 	* gnu/java/awt/peer/qt/QtTextFieldPeer.java
+ 	* gnu/java/awt/peer/qt/QtToolkit.java
+ 	* gnu/java/awt/peer/qt/QtWindowPeer.java
+ 	* native/jni/qt-peer/keybindings.cpp
+ 	* native/jni/qt-peer/keybindings.h 
+ 	* native/jni/qt-peer/qtbuttonpeer.cpp
+ 	* native/jni/qt-peer/qtcanvaspeer.cpp
+ 	* native/jni/qt-peer/qtcheckboxpeer.cpp
+ 	* native/jni/qt-peer/qtchoicepeer.cpp
+ 	* native/jni/qt-peer/qtcomponent.cpp
+ 	* native/jni/qt-peer/qtcomponentpeer.cpp
+ 	* native/jni/qt-peer/qtdialogpeer.cpp
+ 	* native/jni/qt-peer/qtframepeer.cpp
+ 	* native/jni/qt-peer/qtgraphics.cpp 
+ 	* native/jni/qt-peer/qtimage.cpp
+ 	* native/jni/qt-peer/qtlabelpeer.cpp
+ 	* native/jni/qt-peer/qtlistpeer.cpp
+ 	* native/jni/qt-peer/qtmenupeer.cpp
+ 	* native/jni/qt-peer/qtpanelpeer.cpp
+ 	* native/jni/qt-peer/qtscrollbarpeer.cpp
+ 	* native/jni/qt-peer/qtscrollpanepeer.cpp
+ 	* native/jni/qt-peer/qttextareapeer.cpp
+ 	* native/jni/qt-peer/qttextfieldpeer.cpp
+ 	* native/jni/qt-peer/qtwindowpeer.cpp
+ 	* native/jni/qt-peer/slotcallbacks.cpp
+ 	* native/jni/qt-peer/slotcallbacks.h
+ 	Reindented, Transmogrified and Wielaardituded.
+ 	* gnu/java/awt/peer/qt/QtEmbeddedWindowPeer.java
+ 	* native/jni/qt-peer/eventmethods.h
+ 	* native/jni/qt-peer/qtembeddedwindowpeer.cpp
+ 	* native/jni/qt-peer/slotcallbacks.moc.h
+ 	New files
+ 	* native/jni/qt-peer/eventmethods.cpp
+ 	* native/jni/qt-peer/slotcallbacks.moc
+ 	Removed.
+ 	
+ 2005-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .project: Fixed typo.  Added builder for native code.
+ 	* .externalToolBuilders/CompileNative.launch: New file.
+ 
+ 2005-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .classpath: Ignore jdwp.
+ 	* .project: Added builder to create LocaleData.java.
+ 	* .externalToolBuilders/CreateLocaleData.launch: New file.
+ 	* examples/gnu/classpath/examples/jawt/DemoJAWT.java: Added package.
+ 
+ 2005-08-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/text/PasswordView.java
+ 	(drawUnselectedText): Fixed so the password is drawn correctly 
+ 	in the text box and no * characters are drawn before anything
+ 	was typed.
+ 
+ 2005-08-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkClipboard.java: Reimplemented.
+ 	* gnu/java/awt/peer/gtk/GtkClipboardNotifier.java: New class.
+ 	* gnu/java/awt/peer/gtk/GtkSelection.java: New class.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java (GtkImage(Pointer)): New
+ 	constructor.
+ 	(createFromPixbuf): New private native method.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (systemClipboard): Removed.
+ 	(getSystemClipboard): Do security check and return
+ 	GtkClipboard.getInstance().
+ 	* include/Makefile.am: Add gnu_java_awt_peer_gtk_GtkSelection.h.
+ 	* include/gnu_java_awt_peer_gtk_GtkClipboard.h: Regenerated.
+ 	* include/gnu_java_awt_peer_gtk_GtkImage.h: Regenerated.
+ 	* include/gnu_java_awt_peer_gtk_GtkSelection.h: New header file.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c:
+ 	Reimplemented.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkImage_createFromPixbuf): New
+ 
+ 2005-08-16  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(ActionListenerProxy): Replaced type TableAction with parent type
+ 	ActionListener to avoid Semantic errors.
+ 
+ 2005-08-16  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	(initComponentDefaults): Fixed typo.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(installKeyboardActions): Replaced calls to registerKeyboardAction with
+ 	additions to an explicit InputMap-ActionMap pair and then set this
+ 	pair as the parent pair to the JTable's.  This matches the JDK where
+ 	the UI Input-Action pairs are the parents of the component's.
+ 	(ActionListenerProxy): New class.
+ 
+ 2005-08-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/datatransfer/Demo.java:
+ 	Document and implement ItemListener and FlavorListener.
+ 	(flavors): New field.
+ 	(details): New field.
+ 	(Demo): Add more space, add the flavors panel and flavor listener.
+ 	(createTextPanel): Smaller and wider.
+ 	(createFlavorsPanel): New private method.
+ 	(flavorsChanged): New public method.
+ 	(itemStateChanged): Likewise.
+ 	(ImageComponent.ImageComponent): Smaller default.
+ 	(ObjectComponent.ObjectComponent): Make wider.
+ 	(FlavorsComponent): New static class.
+ 	(FlavorDetailsComponent): Likewise.
+ 
+ 2005-08-16  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Changed font for PasswordField because textbox was 
+ 	being drawn at an awkward height.
+ 	* javax/swing/text/PasswordView.java
+ 	(getPreferredSpan): Implemented
+ 	(modelToView): likewise.
+ 	(viewToModel): partially implemented.
+ 
+ 2005-08-16  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/Component.java
+ 	(dispatchEventImpl): Always call peer.handleEvent().
+ 
+ 2005-08-16  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/Container.java
+ 	(addImpl, remove): Only repaint if the container is showing.
+ 
+ 2005-08-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkToolkit_nativeQueueEmpty): Removed.
+ 
+ 2005-08-15  Dalibor Topic  <robilad@kaffe.org>
+ 
+         * native/jni/qt-peer/mainqtthread.cpp,
+         native/jni/qt-peer/qmatrix.cpp,
+         native/jni/qt-peer/qpainterpath.cpp,
+         native/jni/qt-peer/qpen.cpp,
+         native/jni/qt-peer/qtbuttonpeer.cpp,
+         native/jni/qt-peer/qtcanvaspeer.cpp,
+         native/jni/qt-peer/qtcheckboxpeer.cpp,
+         native/jni/qt-peer/qtchoicepeer.cpp,
+         native/jni/qt-peer/qtcomponentpeer.cpp,
+         native/jni/qt-peer/qtdialogpeer.cpp,
+         native/jni/qt-peer/qtfiledialogpeer.cpp,
+         native/jni/qt-peer/qtfontmetrics.cpp,
+         native/jni/qt-peer/qtfontpeer.cpp,
+         native/jni/qt-peer/qtframepeer.cpp,
+         native/jni/qt-peer/qtgraphics.cpp,
+         native/jni/qt-peer/qtimage.cpp,
+         native/jni/qt-peer/qtlabelpeer.cpp,
+         native/jni/qt-peer/qtlistpeer.cpp,
+         native/jni/qt-peer/qtmenubarpeer.cpp,
+         native/jni/qt-peer/qtmenucomponentpeer.cpp,
+         native/jni/qt-peer/qtmenuitempeer.cpp,
+         native/jni/qt-peer/qtmenupeer.cpp,
+         native/jni/qt-peer/qtpanelpeer.cpp,
+         native/jni/qt-peer/qtpopupmenupeer.cpp,
+         native/jni/qt-peer/qtscreendevice.cpp,
+         native/jni/qt-peer/qtscrollbarpeer.cpp,
+         native/jni/qt-peer/qtscrollpanepeer.cpp,
+         native/jni/qt-peer/qttextareapeer.cpp,
+         native/jni/qt-peer/qttextfieldpeer.cpp,
+         native/jni/qt-peer/qtvolatileimage.cpp,
+         native/jni/qt-peer/qtwindowpeer.cpp:
+ 	Include <assert.h>.
+ 
+ 2005-08-15  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JPasswordField.java
+ 	(getText): Fixed the length of the string to retrieve.
+ 
+ 2005-08-15  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/TextComponent.java
+ 	(select): Fix typo.
+ 	
+ 2005-08-15  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JComponent.java:
+ 	(processKeyEvent): Added functionality for processing key events in
+ 	non-focused components using the WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
+ 	field.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(installKeyboardActions): Changed key bindings to be registered as
+ 	WHEN_ANCESTOR_OF_FOCUSED_COMPONENT rather than as WHEN_FOCUSED.
+ 	(TableAction.actionPerformed): If the key action is anything besides
+ 	"start editing" then we stop editing if we are doing so.  Repaint the
+ 	table at the end of this method.
+ 
+ 2005-08-15  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JPasswordField.java
+ 	(echoCharIsSet): Fixed this to work according to API.
+ 	(getText): Implemented
+ 	(getText): Implemented
+ 	(getPassword): Implemented
+ 	(paramString): Implemented
+ 
+ 2005-08-15  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java (nativeQueueEmpty): Remove
+ 	method.
+ 	(wakeNativeQueue): Likewise.
+ 	(iterateNativeQueue): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (static): Start GTK main
+ 	thread.
+ 	(nativeQueueEmpty): Remove method.
+ 	(wakeNativeQueue): Likewise.
+ 	(iterateNativeQueue): Likewise.
+ 	(gtkMain): New method.
+ 	* include/gnu_java_awt_peer_gtk_GtkToolkit.h: Regenerate.
+ 	* java/awt/EventQueue.java: Remove references to ClasspathToolkit.
+ 	* java/awt/Frame.java (fireDummyEvent): Remove method.
+ 	Remove calls to fireDummyEvent.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
+ 	(dispose): Don't wake up main thread.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c: Remove
+ 	single-thread code.
+ 
+ 2005-08-15  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(expandPath): called fireTreeWillExpand and fireTreeExpanded 
+ 	since it is not required that the calling class fires these
+ 	events.
+ 	(collapsePath): Likewise.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(mouseClicked): Took out code that called fireTreeWillExpand/
+ 	fireTreeWillCollapse and fireTreeExpanded/fireTreeCollapsed.
+ 	(keyPressed): Likewise.
+ 
+ 2005-08-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/FlowLayout.java
+ 	(setAlignment): Removed check for illegal values. These values
+ 	are treated as LEFT alignment instead.
+ 	(layoutContainer): Treat unknown align values as LEFT in default
+ 	clause of if-else statement.
+ 
+ 2005-08-15  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java (handleEvent): Remove
+ 	method.
+ 	(postActionEvent): New method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Rename state_to_awt_mods cp_gtk_state_to_awt_mods.
+ 	* native/jni/gtk-peer/gtkpeer.h: Declare cp_gtk_state_to_awt_mods.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(clicked_cb): New function.
+ 	(connectSignals): Connect clicked_cb callback to "clicked" signal.
+ 
+ 2005-08-14  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/security/provider/DSAKeyPairGenerator.java
+ 	(initialize): set 'keysize' to 'modlen.'
+ 	(getDefaults): return 'true' for keysizes '768' and '1024.'
+ 
+ 2005-08-14  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* lib/Makefile.am (JAVAC): Disable ecj warning output.
+ 
+ 2005-08-14  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java
+ 	(getScreenSize, getColorModel, getFontMetrics, getImage, createImage,
+ 	 createImageProducer, registerImageIOSpis):
+ 	Remove redundant (overloaded) methods.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(registerImageIOSpis): Move registration to static initializer.
+ 	* javax/imageio/spi/IIORegistry.java:
+ 	Remove call to Toolkit registration method.
+ 	
+ 2005-08-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (repaintTimer): Make
+ 	field final.
+ 
+ 2005-08-14  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/Container.java
+ 	(addImpl): Call addNotify() only if the container has a peer.
+ 
+ 2005-08-13  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readClassDescriptor): Don't cache caller's class loader.
+ 	(resolveClass): Don't cache caller's class loader and support
+ 	primitive types. Fixes bug #23377.
+ 
+ 2005-08-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* scripts/check_jni_methods.sh: Set and check for PROBLEM.
+ 
+ 2005-08-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* scripts/check_jni_methods.sh: Don't create temp files in source dir.
+ 	Don't override existing files. Fast fail on errors.
+ 
+ 2005-08-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* vm/reference/gnu/classpath/jdwp/VMFrame.java(getValue):
+ 	Fix typo in comment.
+ 
+ 2005-08-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
+ 	(executeAllThreads): Use enumerate(Thread[]) instead of 
+ 	enumerate(Thread[], true).
+ 	(runCommand): Throw NotImplementedException when command is not found.
+ 
+ 2005-08-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java
+ 	(executeInvokeMethod): Change MethodInvoker to MethodResult.
+ 
+ 2005-08-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/util/VariableTable.java: A class representing a
+ 	Variable Table for a method.
+ 	* gnu/classpath/jdwp/util/LineTable.java: A class representing a Line
+ 	Table for a method.
+ 
+ 2005-08-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (addMenu(Menu)): New
+ 	method.
+ 	* gnu/java/awt/peer/gtk/GtkMenuPeer.java (addSeparator): Likewise.
+ 	* java/awt/peer/MenuBarPeer.java (addMenu): New method
+ 	declaration.
+ 	* java/awt/peer/MenuPeer.java (addSeparator): New method
+ 	declaration.
+ 
+ 2005-08-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (setBounds): Get
+ 	frame insets directly from peer rather than from Window.getInsets.
+ 	(toString): New method.
+ 
+ 2005-08-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/util/Location.java: New file to handle JDWP
+ 	locations.
+ 
+ 2005-08-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(gtkWidgetGetPreferredDimensions): New method.
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
+ 	(gtkWidgetGetPreferredDimensions): New method.
+ 	* include/gnu_java_awt_peer_gtk_GtkLabelPeer.h: Regenerate.
+ 	* include/gnu_java_awt_peer_gtk_GtkButtonPeer.h: Likewise.
+ 
+ 2005-08-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/exception/JdwpInternalErrorException.java
+ 	(JdwpInternalErrorException): Added new constructor.
+ 	* gnu/classpath/jdwp/util/Value.java
+ 	(getUntaggedObj):
+ 	Changed InvalidFieldException to JdwpInternalErrorException.
+ 	(writeUntaggedValue): Likewise.
+ 	(writeTaggedValue): Likewise.
+ 	(writeValue): Likewise.
+ 
+ 2005-08-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/EventRequestCommandSet.java:
+ 	Implemented the EventRequest CommandSet.
+ 
+ 2005-08-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(setValueAt): Do nothing if isCellEditable returns false.
+ 	(editCelLAt): Removed the Key Listener for the JTextField.  Listening
+ 	for ESCAPE should be handled by the JTable itself.  Note, this is not
+ 	implemented yet.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	(initComponentDefaults): Added several keybindings to JTable's
+ 	ancestorInputMap.  These are all implemented.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler): Removed this class.  Note that most of the code from the
+ 	keyPressed method now resides in the actionPerformed method of the
+ 	BasicTableUI.TableAction class.
+ 	(convertModifiers): New private method to convert from new InputEvent
+ 	modifier masks to the old style.
+ 	(installKeyboardActions): Implemented.  Gets the key bindings from
+ 	the UIManager and registers them for the JTable.
+ 	(TableAction): New class.  This is where the actions corresponding to
+ 	key presses resides.
+ 	(installListeners): Removed installation of KeyListener.
+ 
+ 2005-08-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* vm/reference/standard.omit: New file to omit jdwp reference classes
+ 	from build.
+ 
+ 2005-08-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* vm/reference/gnu/classpath/jdwp/VMFrame.java: Implemented reference
+ 	implementation of interface to VM for JDWP frame management.
+ 	* gnu/classpath/jdwp/processor/StackFrameCommandSet.java: Updated
+ 	import.
+ 	(executeGetValues): Use VMFrame instead of Frame.
+ 	(executeSetValues): Use VMFrame instead of Frame.
+ 	(executeThisObject): Use VMFrame instead of Frame.
+ 	* gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java:
+ 	Updated import.
+ 	(executeFrames): Changed getLoc() to getLocation() and use
+ 	VMFrame instead of Frame.
+ 
+ 2005-08-12  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getCellLocation): Added in a check to make sure the node has children.
+ 	Fixed loop to use post-increment.
+ 	(paintRecursive): Fixed loop to use post-increment.
+ 	(paintControlIcons): Likewise.
+ 	(getNextNode): Fixed check to make sure that node has children.
+ 	(getPreviousSibling): Added in check to make sure index is in correct
+ 	range.
+ 
+ 2005-08-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/qt/QtButtonPeer.java: Replace uses of
+ 	toolkit.eventQueue.postEvent() with QtToolkit.eventQueue.postEvent().
+ 	* gnu/java/awt/peer/qt/QtCheckboxPeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtChoicePeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtComponentPeer.java: Likewise and for
+ 	guiThread.QApplicationPointer and graphicsEnv.getScreenDevices().
+ 	* gnu/java/awt/peer/qt/QtMenuItemPeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtMenuPeer.java: Likewise.
+ 	* gnu/java/awt/peer/qt/QtScrollbarPeer.java: Likewise.
+ 	* gnu/java/security/PolicyFile.javai (refresh): Assign only outside
+ 	if statement.
+ 
+ 2005-08-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/GapContent.java
+ 	(insertString): Use replace() to actually insert content.
+ 	(remove): Use replace() to actually remove content.
+ 	(shiftGap): Repaired misplaced curly brace in if block of
+ 	boudary check.
+ 	(replace): Check for null argument for addItems.
+ 
+ 2005-08-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	Reported by: Ingo Proetel  <proetel@aicas.com>
+ 	* java/net/URLClassLoader.java
+ 	(findClass): Added null check to avoid NullPointerException.
+ 
+ 2005-08-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	Reported by: Ingo Proetel  <proetel@aicas.com>
+ 	* java/util/logging/Logger.java
+ 	This applies to a couple of log() methods:
+ 	(log): Added check if the specified level is actually enabled,
+ 	otherwise ignore logging request.
+ 
+ 2005-08-12  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	* (getMinimumDividerLocation): Fixed to work similar to 
+ 	getMaximumDividerLocation. Was not able to move divider
+ 	in both directions before.
+ 
+ 2005-08-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Component.java
+ 	(reshape): Simplified repainting of parent.
+ 	(paint): Don't call peer.paint() here. The paint method is
+ 	exclusivly meant to be overridden by subclasses that wish to
+ 	perform custom painting and should do nothing by default.
+ 	(repaint): Use local variable in null pointer checks to avoid
+ 	NullPointerExceptions.
+ 	(imageUpdate): Slight formatting adjustments.
+ 	(dispatchEvent): Don't call peer.handleEvent() here, this must
+ 	be done in dispatchEventImpl().
+ 	(dispatchEventImpl): Dispatch PAINT and UPDATE events to the
+ 	peer.
+ 	* java/awt/Container.java
+ 	(paint): Don't call super.paint() here, this method does nothing
+ 	anyway. Visit only lightweight children.
+ 	(update): Instead of clearing the background only for top-level
+ 	containers, clear the background for all heavyweight containers.
+ 
+ 2005-08-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* examples/gnu/classpath/examples/jawt/DemoJAWT.c: New file.
+ 	* examples/gnu/classpath/examples/jawt/DemoJAWT.java: Likewise.
+ 	* examples/gnu/classpath/examples/jawt/Makefile: Likewise.
+ 
+ 2005-08-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/datatransfer/Demo.java:
+ 	New example.
+ 
+ 2005-08-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR classpath/23008:
+ 	* gnu/java/nio/charset/UTF_16Decoder.java (decodeLoop): Correctly
+ 	mask bytes when constructing characters.
+ 
+ 2005-08-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/classpath/Makefile.am (EXTRA_DIST): Add classpath_jawt.h.
+ 	* include/gnu_java_awt_peer_qt_*: Removed.
+ 
+ 2005-08-11  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/PortableInterceptor/IORInfoOperations.java,
+         org/omg/PortableInterceptor/IORInterceptor.java,
+         org/omg/PortableInterceptor/IORInterceptorOperations.java,
+         org/omg/PortableInterceptor/IORInfo.java: New files.
+ 
+ 2005-08-11  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTable
+ 	(rowAtPoint): Added in a check for null. Was getting NPE.
+ 	(columnAtPoint): Likewise.
+ 
+ 2005-08-11  Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(paintSimple): Changed to paint the portBounds from (0,0).
+ 
+ 2005-08-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/image/ConvolveOp.java (filter): Defer numBands check
+ 	until after null check.  PR classpath/22999.
+ 
+ 2005-08-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/Observable.java (addObserver): Throw
+ 	NullPointerException if necessary.  PR classpath/23279.
+ 
+ 2005-08-11  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/qt/QtMenuComponentPeer.java,
+ 	gnu/java/awt/peer/qt/QtGraphics.java,
+ 	gnu/java/awt/peer/qt/QtTextFieldPeer.java,
+ 	gnu/java/awt/peer/qt/QtFramePeer.java,
+ 	gnu/java/awt/peer/qt/QtPanelPeer.java,
+ 	gnu/java/awt/peer/qt/QtToolkit.java,
+ 	gnu/java/awt/peer/qt/QtWindowPeer.java,
+ 	gnu/java/awt/peer/qt/QtButtonPeer.java,
+ 	gnu/java/awt/peer/qt/QtImageGraphics.java,
+ 	gnu/java/awt/peer/qt/QtContainerPeer.java,
+ 	gnu/java/awt/peer/qt/QtComponentPeer.java,
+ 	gnu/java/awt/peer/qt/QtListPeer.java,
+ 	gnu/java/awt/peer/qt/QtChoicePeer.java,
+ 	gnu/java/awt/peer/qt/QtScrollPanePeer.java,
+ 	gnu/java/awt/peer/qt/MainQtThread.java,
+ 	gnu/java/awt/peer/qt/QtImage.java,
+ 	gnu/java/awt/peer/qt/NativeWrapper.java,
+ 	gnu/java/awt/peer/qt/QtCheckboxPeer.java,
+ 	gnu/java/awt/peer/qt/QtScreenDeviceConfiguration.java,
+ 	gnu/java/awt/peer/qt/QtTextAreaPeer.java,
+ 	gnu/java/awt/peer/qt/QtDialogPeer.java,
+ 	gnu/java/awt/peer/qt/QPen.java,
+ 	gnu/java/awt/peer/qt/QtCanvasPeer.java,
+ 	gnu/java/awt/peer/qt/QtLabelPeer.java,
+ 	gnu/java/awt/peer/qt/QtGraphicsEnvironment.java,
+ 	gnu/java/awt/peer/qt/QtImageConsumer.java,
+ 	gnu/java/awt/peer/qt/QtScrollbarPeer.java,
+ 	gnu/java/awt/peer/qt/QtFontMetrics.java,
+ 	gnu/java/awt/peer/qt/QtMenuBarPeer.java,
+ 	gnu/java/awt/peer/qt/QtFontPeer.java,
+ 	gnu/java/awt/peer/qt/QMatrix.java,
+ 	gnu/java/awt/peer/qt/QtVolatileImage.java,
+ 	gnu/java/awt/peer/qt/QPainterPath.java,
+ 	gnu/java/awt/peer/qt/QtComponentGraphics.java,
+ 	gnu/java/awt/peer/qt/QtScreenDevice.java,
+ 	gnu/java/awt/peer/qt/QtMenuPeer.java,
+ 	gnu/java/awt/peer/qt/QtAudioClip.java,
+ 	gnu/java/awt/peer/qt/QtPopupMenuPeer.java,
+ 	gnu/java/awt/peer/qt/QtFileDialogPeer.java,
+ 	gnu/java/awt/peer/qt/QtMenuItemPeer.java,
+ 	* native/jni/qt-peer/qpen.cpp,
+ 	native/jni/qt-peer/keybindings.cpp,
+ 	native/jni/qt-peer/qtcomponentpeer.cpp,
+ 	native/jni/qt-peer/buttonevent.h,
+ 	native/jni/qt-peer/qtdialogpeer.cpp,
+ 	native/jni/qt-peer/qtmenubarpeer.cpp,
+ 	native/jni/qt-peer/mainqtthread.cpp,
+ 	native/jni/qt-peer/qtpanelpeer.cpp,
+ 	native/jni/qt-peer/qmatrix.cpp,
+ 	native/jni/qt-peer/qtmenucomponentpeer.cpp,
+ 	native/jni/qt-peer/qtgraphics.cpp,
+ 	native/jni/qt-peer/qttoolkit.cpp,
+ 	native/jni/qt-peer/qtbuttonpeer.cpp,
+ 	native/jni/qt-peer/keybindings.h,
+ 	native/jni/qt-peer/qtvolatileimage.cpp,
+ 	native/jni/qt-peer/qtcomponent.h,
+ 	native/jni/qt-peer/slotcallbacks.cpp,
+ 	native/jni/qt-peer/qtpopupmenupeer.cpp,
+ 	native/jni/qt-peer/qtmenuitempeer.cpp,
+ 	native/jni/qt-peer/qtchoicepeer.cpp,
+ 	native/jni/qt-peer/nativewrapper.cpp,
+ 	native/jni/qt-peer/qtscreendevice.cpp,
+ 	native/jni/qt-peer/qtfontpeer.cpp,
+ 	native/jni/qt-peer/qpainterpath.cpp,
+ 	native/jni/qt-peer/qtstrings.h,
+ 	native/jni/qt-peer/qttextfieldpeer.cpp,
+ 	native/jni/qt-peer/qtimage.cpp,
+ 	native/jni/qt-peer/componentevent.h,
+ 	native/jni/qt-peer/qtwindowpeer.cpp,
+ 	native/jni/qt-peer/qtframepeer.cpp,
+ 	native/jni/qt-peer/qtscrollpanepeer.cpp,
+ 	native/jni/qt-peer/qtfontmetrics.cpp,
+ 	native/jni/qt-peer/qtlistpeer.cpp,
+ 	native/jni/qt-peer/mainthreadinterface.h
+ 	native/jni/qt-peer/slotcallbacks.h
+ 	native/jni/qt-peer/qtfiledialogpeer.cpp,
+ 	native/jni/qt-peer/eventmethods.cpp,
+ 	native/jni/qt-peer/qtimage.h,
+ 	native/jni/qt-peer/qtstrings.cpp,
+ 	native/jni/qt-peer/nativewrapper.h
+ 	native/jni/qt-peer/qtaudioclip.cpp,
+ 	native/jni/qt-peer/qtfont.h,
+ 	native/jni/qt-peer/qtscrollbarpeer.cpp,
+ 	native/jni/qt-peer/containers.h,
+ 	native/jni/qt-peer/qtcheckboxpeer.cpp,
+ 	native/jni/qt-peer/mainthreadinterface.cpp,
+ 	native/jni/qt-peer/componentevent.cpp,
+ 	native/jni/qt-peer/qttextareapeer.cpp,
+ 	native/jni/qt-peer/qtcomponent.cpp,
+ 	native/jni/qt-peer/qtmenupeer.cpp,
+ 	native/jni/qt-peer/qtlabelpeer.cpp,
+ 	native/jni/qt-peer/qtcanvaspeer.cpp,
+ 	native/jni/qt-peer/qtgraphics.h,
+ 	* include/gnu_java_awt_peer_qt_QtCheckboxPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtToolkit.h,
+ 	include/gnu_java_awt_peer_qt_QtAudioClip.h,
+ 	include/gnu_java_awt_peer_qt_QtScreenDevice.h,
+ 	include/gnu_java_awt_peer_qt_QtTextFieldPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtMenuItemPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtButtonPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtWindowPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtDialogPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtImage.h,
+ 	include/gnu_java_awt_peer_qt_QtMenuBarPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtVolatileImage.h,
+ 	include/gnu_java_awt_peer_qt_QtFontPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtChoicePeer.h,
+ 	include/gnu_java_awt_peer_qt_QtGraphics.h,
+ 	include/gnu_java_awt_peer_qt_QtComponentPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtMenuPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtTextAreaPeer.h,
+ 	include/gnu_java_awt_peer_qt_QPen.h,
+ 	include/gnu_java_awt_peer_qt_QtPanelPeer.h,
+ 	include/gnu_java_awt_peer_qt_QPainterPath.h,
+ 	include/gnu_java_awt_peer_qt_QtFontMetrics.h,
+ 	include/gnu_java_awt_peer_qt_QtScrollPanePeer.h,
+ 	include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h,
+ 	include/gnu_java_awt_peer_qt_QMatrix.h,
+ 	include/gnu_java_awt_peer_qt_QtLabelPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtFramePeer.h,
+ 	include/gnu_java_awt_peer_qt_QtListPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtScrollbarPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtCanvasPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h,
+ 	include/gnu_java_awt_peer_qt_MainQtThread.h,
+ 	include/gnu_java_awt_peer_qt_QtFileDialogPeer.h,
+ 	include/gnu_java_awt_peer_qt_QtContainerPeer.h:
+ 	New files.
+ 
+ 2005-08-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR classpath/23238:
+ 	* lib/gen-classlist.sh.in: Use @SHELL@; invoke split-for-gcj.sh
+ 	with it.
+ 	* configure.ac (SH): Removed subst.
+ 
+ 2005-08-11  Andrew Haley  <aph@redhat.com>
+ 
+ 	* lib/split-for-gcj.sh: Comment.
+ 
+ 2005-08-11  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(paintSimple): This line was causing problems with the JTable viewport.
+ 	However, the scrollpane still needs to be fixed. It is still not
+ 	painting beyond the view's bounds.
+ 
+ 2005-08-10  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* lib/split-for-gcj.sh: Don't use unportable %{parameter%word}.
+ 	Don't use unportable !.
+ 
+ 2005-08-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/gen-classlist.sh.in (GCJ): New subst.
+ 	Invoke split-for-gcj.sh if the results changed.
+ 	* lib/Makefile.am (CLEANFILES): Removed old entries.
+ 	(compile-classes): Don't run split-for-gcj.sh.
+ 
+ 2005-08-10  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java:      
+ 	Implemented the ThreadReference CommandSet.
+ 
+ 2005-08-10  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ClassTypeCommandSet.java:
+ 	Implemented the ClassType CommandSet.
+ 	* gnu/classpath/jdwp/util/MethodResult.java: Class to wrap
+ 	around results of method executions.
+ 
+ 2005-08-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR classpath/22580:
+ 	* lib/Makefile.am (compile-classes): Made conditional on
+ 	FOUND_GCJ.
+ 	(JAVAC): Redefined when FOUND_GCJ.
+ 
+ 2005-08-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/Makefile.am (JAVAC): Use $(SHELL) to invoke
+ 	split-for-gcj.sh.  For PR classpath/23238.
+ 
+ 2005-08-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/split-for-gcj.sh: Use 'while' loop to avoid length limits.
+ 
+ 2005-08-10  Andreas Tobler  <toa@pop.agri.ch>
+ 
+ 	* native/jni/java-net/gnu_java_net_PlainSocketImpl.c: Include
+ 	target_native_file.h.  PR classpath/22926.
+ 
+ 2005-08-10  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(doExpandParents): Took out call to checkExpandParents.
+ 	(checkExpandParents): Helper method not needed. Caused problems since
+ 	fireTreeWillExpand was being called too many times. fireTreeWillExpand
+ 	is called from BasicTreeUI whenever a node is expanded.
+ 
+ 2005-08-10  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/PortableInterceptor/Interceptor.java,
+         org/omg/PortableInterceptor/InterceptorOperations.java: New files.
+         * org/omg/DynamicAny/_DynAnyFactoryStub.java,
+         org/omg/DynamicAny/_DynAnyStub.java,
+         org/omg/DynamicAny/_DynArrayStub.java,
+         org/omg/DynamicAny/_DynEnumStub.java,
+         org/omg/DynamicAny/_DynFixedStub.java,
+         org/omg/DynamicAny/_DynStructStub.java,
+         org/omg/DynamicAny/_DynUnionStub.java,
+         org/omg/DynamicAny/_DynValueStub.java,
+         org/omg/DynamicAny/_DynSequenceStub.java: Added _opsClass field.
+ 
+ 2005-08-10  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Formatted entire class.
+ 
+ 2005-08-10  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(mouseClicked): Called fireTreeWillExpand and fireTreeWillCollapse when
+ 	appropriate.
+ 	(keyPressed): Likewise.
+ 
+ 2005-08-10  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Container.java
+ 	(paint): Call visitChildren with lightweightOnly == true.
+ 	(update): Only call paint if we are not in a toplevel container.
+ 
+ 2005-08-09  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/StackFrameCommandSet.java:
+ 	Implemented the StackFrame CommandSet.
+ 
+ 2005-08-09  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(editingCancelled): Implemented.
+ 	(editCellAt): Added a KeyListener to our editor to listen for
+ 	the ESCAPE key and cancel editing upon receiving it.
+ 
+ 2005-08-09  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(setRowHeight): Fixed condition on when to throw exception.
+ 	(setRowHeight): Parameters were mixed up.
+ 
+ 2005-08-09  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(paint): Added in painting code for label border.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paintControlIcons): Fixed location for control icons.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java:
+ 	Added defaults for selection and non-selection border for
+ 	tree cells.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(getTreeCellRendererComponent): Set borders for node. Also,
+ 	made node transparent (not opaque), So JLabel draws icon,
+ 	text and border appropriately.
+ 
+ 2005-08-09  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(paint): Added in code to paint background rect according to
+ 	API. Also, formatting changes.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(setCellRenderer): Fixed to changed renderer in JTree.
+ 	(uninstallDefaults): Line taken out because not needed.
+ 	(paintNode): Took out unneeded code because BasicLabelUI was fixed.
+ 	(paintRecursive): Fixed so lines are only drawn when parents have
+ 	children.	
+ 
+ 2005-08-09  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/DefaultCellEditor.java:
+ 	(EditorDelegate.setValue): Implemented.
+ 	(EditorDelegate.getCellEditorValue): Implemented.
+ 	(EditorDelegate.isCellEditable): Implemented.
+ 	(EditorDelegate.shouldSelectCell): Implemented.
+ 	(EditorDelegate.stopCellEditing): Implemented.
+ 	(EditorDelegate.cancelCellEditing): Implemented.
+ 	(EditorDelegate.startCellEditing): Implemented.
+ 	(EditorDelegate.actionPerformed): Implemented.
+ 	(EditorDelegate.itemStateChanged): Implemented.
+ 	(EditorDelegate.fireEditingStopped): New implementation method.
+ 	(EditorDelegate.fireEditingCancelled): New implementation method.
+ 	(DefaultCellEditor): Implemented 3 constructors.
+ 	(getComponent): Implemented.
+ 	(getClickCountToStart): Implemented.
+ 	(setClickCountToStart): Implemented.
+ 	(getCellEditorValue): Implemented.
+ 	(isCellEditable): Implemented.
+ 	(shouldSelectCell): Implemented.
+ 	(cancelCellEditing): Implemented.
+ 	(getTableCellEditorComponent): Implemented.
+ 	* javax/swing/JTable.java:
+ 	(EditorUpdateTimer): New private class.
+ 	(editingStopped): Implemented.
+ 	(setValueAt): If the Object value is a Component, add it to the JTable
+ 	so it can obtain focus.
+ 	(editCellAt): Implemented.
+ 	(removeEditor): Implemented.
+ 	(prepareEditor): Implemented.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler.keyPressed): Added F2 "start editing" key action.
+ 	(MouseHandler.mousePressed): Added check to see if a new cell was
+ 	selected and we need to stop editing.
+ 	(paint): If the cell is a JTextField, paint its Caret as well.
+ 	* javax/swing/table/DefaultTableCellRenderer.java:
+ 	(getTableCellRendererComponent): If a JTextField is passed in, return
+ 	one.  This is used for editing JTable cells.
+ 
+ 2005-08-09  Aaron Luchko <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java:	
+ 	Implemented the ClassLoaderReference CommandSet.
+ 
+ 2005-08-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/tree/DefaultTreeModel.java: Fix copyright
+ 	boilerplate formatting.
+ 
+ 2005-08-09  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/tree/DefaultTreeModel.java:
+ 	Fixed formatting of class.
+ 
+ 2005-08-09  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes Bug #23255
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Fixed entire class to use Objects as opposed to TreeNodes.
+ 	(getPathBounds): Changed root to Object
+ 	(getPathForRow): Likewise.
+ 	(getRowCount): Likewise.
+ 	(getPreferredSize): Changed root and nextNode to be of type
+ 	Object.
+ 	(isLeaf): Took out unnecessary code. 
+ 	(keyPressed): Changed all TreeNodes to be of type Object.
+ 	(getCellLocation): Likewise.
+ 	(paintNode): Likewise.
+ 	(paintRecursive): Likewise.
+ 	(getParent): Implemented.
+ 	(findNode): Helper Implemented.
+ 	(getNextVisibleNode): Changed return and parameter type to Object.
+ 	(getPreviousVisibleNode): Likewise.
+ 	(getNextNode): Likewise.
+ 	(getPreviousNode): Likewise.
+ 	(getNextSibling): Likewise.
+ 	(getPreviousSibling): Likewise.
+ 	(getPathToRoot): Likewise.
+ 	(getLevel): Likewise.
+ 	* javax/swing/tree/DefaultTreeModel.java
+ 	(getIndexOfChild): Implemented.
+ 
+ 2005-08-09  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/CORBA/package.html: Documentation update.
+         * org/omg/DynamicAny/package.html: New file.
+ 
+ 2005-08-08  Casey Marshall  <csm@gnu.org>
+ 
+ 	PR classpath/23120
+ 	* gnu/java/security/provider/DSAKeyPairGenerator.java
+ 	(<init>): made public; set default values.
+ 	(initialize): just call 'initialize(int,boolean,SecureRandom).'
+ 	(initialize): just call 'initialize(DSAParams,SecureRandom).'
+ 	(initialize): check all values for 'null' before overwriting.
+ 	(initialize): fill in defaults or generate new parameters here.
+ 	(generateKeyPair): don't create parameters; fill in 'random' if
+ 	'null;' use 'random,' not a new Random object, when generating
+ 	random numbers.
+ 	(getDefaults): fix keysize check.
+ 
+ 	PR classpath/22990
+ 	* java/security/KeyPairGenerator.java (initialize): do nothing.
+ 	
+ 2005-08-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/23285:
+ 	* native/jni/classpath/classpath_jawt.h
+ 	(classpath_jawt_get_awt_version, classpath_jawt_lock,
+ 	classpath_jawt_unlock, classpath_jawt_create_lock,
+ 	classpath_jawt_destroy_lock): Use '(void)' in prototype.
+ 	* native/jni/gtk-peer/Makefile.am (libgtkpeer_la_SOURCES): Added
+ 	gtk_jawt.c.
+ 	* native/jni/gtk-peer/gtk_jawt.c: New file from libgcj.
+ 	(classpath_jawt_create_lock, classpath_jawt_destroy_lock): Use
+ 	cp_gtk_gdk_env.
+ 
+ 2005-08-08  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/DynamicAny/FieldNameHelper.java: New file.
+ 
+ 2005-08-08  Audrius Meskauskas  <AudriusA@Bioinformatics.org> 
+ 
+         * org/omg/DynamicAny/_DynAnyFactoryStub.java,
+         org/omg/DynamicAny/_DynAnyStub.java,
+         org/omg/DynamicAny/_DynArrayStub.java,
+         org/omg/DynamicAny/_DynEnumStub.java,
+         org/omg/DynamicAny/_DynFixedStub.java,
+         org/omg/DynamicAny/_DynStructStub.java,
+         org/omg/DynamicAny/_DynUnionStub.java,
+         org/omg/DynamicAny/_DynValueStub.java,
+         org/omg/DynamicAny/_DynSequenceStub.java: New files.
+ 
+ 2005-08-08  Lillian Angel  <langel@redhat.com>
+ 
+ 	Fixes bug #23252
+ 	* javax/swing/JTree.java
+ 	(setModel): Changed to allow model to be null.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(setModel): Changed to depend on JTree functions
+ 	(getPathBounds): Fixed to work when model = null.
+ 	(getPathForRow): Likewise.
+ 	(getRowCount): Likewise.
+ 	(installListeners): Likewise.
+ 	(installUI): Likewise.
+ 	(paint): Likewise.
+ 	(getPreferredSize): Likewise.
+ 	
+ 2005-08-08  Casey Marshall  <csm@gnu.org>
+ 
+ 	Fixes bug #22914
+ 	* gnu/classpath/debug/Component.java (POLICY): new constant.
+ 	* gnu/java/security/PolicyFile.java (logger): new constant.
+ 	(DEBUG,debug,debug): removed.
+ 	(DEFAULT_POLICY): use 'SystemProperties' class to bypass security
+ 	check.
+ 	(DEFAULT_USER_POLICY): new constant.
+ 	(getPermissions): replace 'debug' calls with logger calls.
+ 	(refresh): add 'DEFAULT_USER_POLICY' to the initial list;
+ 	interpret 'java.security.policy' and 'policy.url' properties
+ 	properly; replace 'debug' calls with logger calls.
+ 	(parse): replace 'debug' calls with logger calls.
+ 
+ 2005-08-07  Casey Marshall  <csm@gnu.org>
+ 
+ 	* javax/security/auth/x500/X500Principal.java
+ 	(encodeDer): use the right iterator for the inner loop.
+ 	(parseString): test for end of input.
+ 	(readAttributeType): provide detail message for exception.
+ 	(readAttributeValue): return the result on end of input;
+ 	read the next character while looping.
+ 	(putComponent): accept 'o' and 'ou' short names.
+ 
+ 2005-08-07  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/DynamicAny/AnySeqHelper.java,
+         org/omg/DynamicAny/NameDynAnyPairSeqHelper.java,
+         org/omg/DynamicAny/NameValuePairHelper.java,
+         org/omg/DynamicAny/NameDynAnyPairHelper.java,
+         org/omg/DynamicAny/NameValuePairSeqHelper.java,
+         org/omg/DynamicAny/DynAnySeqHelper.java,
+         gnu/CORBA/DynAnySeqHolder.java,
+         gnu/CORBA/NameDynAnyPairSeqHolder.java,
+         gnu/CORBA/NameDynAnyPairHolder.java,
+         gnu/CORBA/NameValuePairSeqHolder.java,
+         gnu/CORBA/NameValuePairHolder.java: New files.
+ 
+ 2005-08-07  Ito Kazumitsu <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #22929
+ 	* java/net/NetworkInterface.java
+ 	(condense): New static private method.
+ 	(getNetworkInterfaces): Call condense().
+ 	(getByName, getByInetAddress): Call getNetworkInterfaces()
+ 	so that condensed result may be returned.
+ 	* vm/reference/java/net/VMNetworkInterface.java (getInterfaces):
+ 	Clarify return value in documentation.
+ 
+ 2005-08-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #22920
+ 	* java/net/DatagramSocket.java (DatagramSocket(SocketAddress)):
+ 	Use gnu.classpath.SystemProperties to get impl.prefix.
+ 
+ 2005-08-03  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * gnu/CORBA/CDR/noHeaderInput.java,
+         gnu/CORBA/gnuValueHolder.java,
+         gnu/CORBA/DynAn/gnuDynAny.java,
+         gnu/CORBA/DynAn/gnuDynArray.java,
+         gnu/CORBA/DynAn/gnuDynSequence.java,
+         gnu/CORBA/DynAn/gnuDynValueBox.java,
+         gnu/CORBA/DynAn/abstractRecord.java,
+         gnu/CORBA/DynAn/gnuDynAnyFactory.java,
+         gnu/CORBA/DynAn/gnuDynValue.java,
+         gnu/CORBA/DynAn/gnuDynStruct.java,
+         gnu/CORBA/DynAn/anyDivideable.java,
+         gnu/CORBA/DynAn/anyUndivideable.java,
+         gnu/CORBA/DynAn/gnuDynEnum.java,
+         gnu/CORBA/DynAn/abstractDynAny.java,
+         gnu/CORBA/DynAn/gnuDynFixed.java,
+         gnu/CORBA/DynAn/valueChangedListener.java,
+         gnu/CORBA/DynAn/gnuDynUnion.java: New files.
+         * org/omg/DynamicAny/DynUnionOperations.java,
+         org/omg/DynamicAny/DynAnyOperations.java,
+         org/omg/DynamicAny/DynAnyFactoryOperations.java,
+         org/omg/DynamicAny/DynValueBox.java,
+         org/omg/DynamicAny/DynValueCommon.java,
+         org/omg/DynamicAny/DynAnyFactoryHelper.java,
+         gnu/CORBA/typeNamer.java,
+         gnu/CORBA/fixedTypeCode.java,
+         gnu/CORBA/CDR/Vio.java,
+         gnu/CORBA/CDR/cdrInput.java,
+         gnu/CORBA/CDR/cdrOutput.java,
+         gnu/CORBA/holderFactory.java,
+         gnu/CORBA/universalHolder.java,
+         gnu/CORBA/Poa/ORB_1_4.java,
+         gnu/CORBA/Restricted_ORB.java,
+         gnu/CORBA/gnuAny.java,
+         org/omg/CORBA/TypeCode.java
+         org/omg/CORBA/Any.java,
+         org/omg/CORBA/ORB.java,
+         org/omg/CORBA/ObjectHelper.java,
+         org/omg/CORBA/ObjectHolder.java,
+         org/omg/CORBA_2_3/portable/InputStream.java,
+         org/omg/CORBA_2_3/portable/OutputStream.java,
+         gnu/CORBA/DynAn/NameValuePairHolder.java: Rewritten.
+ 
+ 2005-08-06  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readClassDescriptor): Removed bogus handling of primitive types.
+ 	(readFields.GetField.defaulted): Pass cause to exception.
+ 	(readFields.GetField.getField): Pass cause to exception.
+ 	(newObject, callReadMethod): Call initCause on exception.
+ 
+ 2005-08-06  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/IllegalArgumentException.java,
+ 	java/lang/IllegalStateException.java,
+ 	java/lang/SecurityException.java,
+ 	java/lang/UnsupportedOperationException.java: Merged from generics
+ 	branch.
+ 
+ 2005-08-05  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	(getPathBounds): Changed to use TreeNode and not 
+ 	DefaultMutableTreeNode.
+ 	(getPathForRow): Likewise.
+ 	(getRowCount): Likewise.
+ 	(getPreferredSize): Likewise.
+ 	(keyPressed): Likewise.
+ 	(paintNode): Likewise.
+ 	(getCellLocation): Likewise.
+ 	(paintRecursive): Likewise.
+ 	(paintControlIcons): Likewise.
+ 	(getNextVisibleNode): Likewise.
+ 	(getPreviousVisibleNode): Likewise.
+ 	(getNextNode): Implemented because not using DefaultMutableTreeNode.
+ 	(getPreviousNode): Implemented
+ 	(getNextSibling): Implemented
+ 	(getPreviousSibling): Implemented
+ 	(getPathToRoot): Implemented
+ 	(getLevel): Implemented
+ 
+ 2005-08-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/datatransfer/FlavorEvent.java: New class.
+ 	* java/awt/datatransfer/FlavorListener.java: Likewise.
+ 	* java/awt/datatransfer/Clipboard.java (name): Made final.
+ 	(listeners): New final ArrayList field.
+ 	(setContents): Reimplemented.
+ 	(getAvailableDataFlavors): New method.
+ 	(isDataFlavorAvailable): Likewise.
+ 	(getData): Likewise.
+ 	(addFlavorListener): Likewise.
+ 	(removeFlavorListener): Likewise.
+ 	(getFlavorListeners): Likewise.
+ 	* java/awt/datatransfer/DataFlavor.java (javaFileListFlavor):
+ 	Construct with mime media-type application/x-java-file-list.
+ 	(DataFlavor(String mimeType, String humanPresentableName)): Call
+ 	constructor that uses given mimeType.
+ 	(getSubType): Reimplemented.
+ 	(getParameter): Handle 'vitual' humanPresentableName parameter.
+ 	(isMimeTypeEqual): Reimplement.
+ 	(isRepresentationClassRemote): Implement.
+ 	(toString): Add formatting.
+ 
+ 2005-08-05  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(setConstraints): Removed checks in if statements because if the height
+ 	or width is less than 0, it should be updated to a positive number in
+ 	all cases.
+ 
+ 2005-08-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c: Include
+ 	jcl.h.
+ 	(createRawData): Removed unused variable method.
+ 	(getData): Removed unused variable field.
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c
+ 	(createRawData): Removed unused variable method.
+ 	(getData): Removed unused variable field.
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c
+ 	(createRawData): Removed unused variable method.
+ 	(getData): Removed unused variable field.
+ 	* native/jni/java-nio/java_nio_VMDirectByteBuffer.c
+ 	(Java_java_nio_VMDirectByteBuffer_init): Removed.
+ 	* vm/reference/java/nio/VMDirectByteBuffer.java (init): Removed.
+ 	* include/java_nio_VMDirectByteBuffer.h: Regenerated.
+ 
+ 2005-08-05  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Container.java:
+ 	(preferredSize): Call getLayout() instead of directly referencing
+ 	the private field. This makes components work that override
+ 	getLayout().
+ 	(minimumSize): Call getLayout() instead of directly referencing
+ 	the private field. This makes components work that override
+ 	getLayout(). Use cached size if component is still valid.
+ 	(maximumSize): Call getLayout() instead of directly referencing
+ 	the private field. This makes components work that override
+ 	getLayout(). Use cached size if component is still valid.
+ 	(update): If we are a top-level-container, call super.update(),
+ 	otherwise directly call paint().
+ 	(visitChildren): Also visit children that are itself Containers.
+ 	* java/awt/Component.java
+ 	(update): Clear the background only for lightweight and top-level
+ 	components.
+ 
+ 2005-08-05  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java
+ 	(getPreferredButtonSize): Added horizontalAdjustment to width
+ 	to create gap at end of label text.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(getPreferredSize): Removed "*2" since fix was moved to 
+ 	BasicGraphicsUtils
+ 
+ 2005-08-05  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/DefaultCaret.java: Added API comments all
+ 	over.
+ 	* javax/swing/text/DefaultEditorKit.java: Added API comments
+ 	all over.
+ 
+ 2005-08-05  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(read(byte[],int,int)): Simplified and fixed bug 23236.
+ 
+ 2005-08-04  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/MethodCommandSet.java: Implemented
+ 	the Method CommandSet.
+ 
+ 2005-08-04  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(getPreferredSize): Multiplied defaultTextIconGap by 2, 
+ 	so there is equal space around the MenuItem
+ 
+ 2005-08-04  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(paintIcon): Added in border painting code for MenuItem
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java:
+ 	Added in default for CheckBox border
+ 
+ 2005-08-04  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/BorderLayout.java: Reformatted this file to meet our
+ 	coding standards.
+ 
+ 2005-08-04  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/BorderLayout.java
+ 	(layoutContainer): Replaced getSize() call with getWidth() and
+ 	getHeight(). This avoids heap allocation and fixes a bug in
+ 	an application here.
+ 
+ 2005-08-04  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/JCheckBox.java
+ 	(init): Moved these to ui
+ 	* javax/swing/plaf/basic/BasicCheckBoxUI.java
+ 	(installUI): initalized icons
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java:
+ 	Took out CheckBoxMenuItem defaults because did not
+ 	work as expected. For now it uses the BasicL&F's defaults.
+ 
+ 2005-08-04  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JList.java:
+ 	(getFirstVisibleIndex): Translate visible rectangle by one less pixel.
+ 	(getLastVisibleIndex): Likewise.
+ 
+ 2005-08-04  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JCheckBox.java
+ 	(init): Initialized icons. Was not working otherwise.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Added in checkIcon for the CheckBox.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java:
+ 	Added in checkIcon for CheckBox and defaults for
+ 	CheckBoxMenuItem.	
+ 
+ 2005-08-03  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/JCheckBoxMenuItem.java
+ 	(installUI): set the items visible. Fixes exceptions that are
+ 	thrown because item is not explicitly set visible.
+ 
+ 2005-08-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(paintSimple): Corrected the clip that is used to draw the
+ 	viewport's content. This fixes scrolling in JScrollPane and
+ 	JViewport.
+ 
+ 2005-08-03  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Changed the fonts from Helvetica to Dialog.
+ 
+ 2005-08-03  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* include/java_nio_VMDirectByteBuffer.h:
+ 	Regenerated.
+ 
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c
+ 	(getData): Fixed function call.
+ 
+ 	Reported by: Andreas Tobler <toa@pop.agri.ch>
+ 	
+ 2005-08-03  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicIconFactory.java:
+ 	(getMenuItemCheckIcon): Implemented so a check mark is drawn when
+ 	the item is selected.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Modified the checkbox defaults
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Changed to only draw check when item is selected.
+ 
+ 2005-08-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/FontMetrics.java
+ 	(charsWidth): Iterate to len + offset instead to len.
+ 
+ 2005-08-03  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* native/jni/classpath/jcl.c
+ 	(JCL_NewRawDataObject): Fixed typo.
+ 
+ 2005-08-03  Guilhem Lavaux  <guilhem@kaffe.org>
+ 	
+         * gnu/classpath/Pointer.java,
+         gnu/classpath/Pointer32.java,
+         gnu/classpath/Pointer64.java,
+         gnu/classpath/RawData.java,
+         gnu/classpath/RawData32.java,
+         gnu/classpath/RawData64.java,
+         gnu/java/awt/peer/gtk/GtkImage.java,
+         gnu/java/nio/charset/iconv/IconvDecoder.java,
+         gnu/java/nio/charset/iconv/IconvEncoder.java,
+         java/nio/Buffer.java,
+         java/nio/DirectByteBufferImpl.java,
+         java/nio/MappedByteBufferImpl.java,
+         native/jni/classpath/jcl.c,
+         native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c,
+         native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c,
+         native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c,
+         native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c,
+         native/jni/java-nio/java_nio_MappedByteBufferImpl.c,
+         native/jni/java-nio/java_nio_VMDirectByteBuffer.c,
+         vm/reference/java/nio/VMDirectByteBuffer.java: Renamed 
+         references to gnu/classpath/RawData to gnu/classpath/Pointer.
+ 
+ 2005-08-03  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(mapImpl): Fixed typo.
+ 
+ 2005-08-03  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* classpath/jcl.c
+ 	(JCl_NewRawDataObject): Added error handling.
+ 
+ 	* classpath/jcl.h
+ 	(jpointer): New integer type to represent a pointer. 
+ 
+ 	* gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c,
+ 	java-nio/gnu_java_nio_channels_FileChannelImpl.c,
+ 	java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c,
+ 	java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c,
+ 	java-nio/java_nio_MappedByteBufferImpl.c,
+ 	java-nio/java_nio_VMDirectByteBuffer.c,
+ 	xmlj/xmlj_util.c: Use JCL functions instead of directly 
+ 	accessing gnu/classpath/RawData.
+ 
+ 2005-08-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/AttributeSet.java: Added some API comments
+ 	to class description.
+ 	* javax/swing/text/BadLocationException.java: Added / fixed
+ 	API comments all over.
+ 	* javax/swing/text/Caret.java: Added API comments all over.
+ 
+ 2005-08-02  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Component.java
+ 	(getBounds): Removed debug statements that accidentally slipped in.
+ 
+ 2005-08-02  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(getCellRect): Height should be the row height, not the entire table
+ 	height.
+ 	(getRowHeight): New public method, part of API.
+ 	* javax/swing/JViewport.java:
+ 	(scrollRectToVisible): Fixed buggy scrolling conditions.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler.keyPressed): Implemented PAGE-UP, PAGE-DOWN, CTRL-PAGE-UP,
+ 	and CTRL-PAGE-DOWN key actions.  Also added line to scroll the table
+ 	appropriately after changing the selection.
+ 	(KeyHandler.getFirstVisibleColumnIndex): New implementation method.
+ 	(KeyHandler.getLastVisibleColumnIndex): Likewise.
+ 	(KeyHandler.getFirstVisibleRowIndex): Likewise.
+ 	(KeyHandler.getLastVisibleRowIndex): Likewise.
+ 
+ 2005-08-02  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(AbstractElement.AbstractElement): Create an empty AttributeSet
+ 	if the argument s == null.
+ 	(AbstractElement.getAttribute): Return the element itself instead
+ 	of the wrapped attributes.
+ 
+ 2005-08-02  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Toolkit.java
+ 	(createCustomCursor): Added check for headless environment.
+ 	(getBestCursorSize): Added check for headless environment.
+ 
+ 2005-08-02  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/text/GapContent.java
+ 	(shiftGap): Changed to used '&&'. both indexes should be 
+ 	greater than 0.
+ 
+ 2005-08-02  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/text/GapContent.java:
+ 	Formatting code.
+ 
+ 2005-08-02  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/text/GapContent.java
+ 	(shiftGap): Added in if statement to check if indexes are negative.
+ 	Does not work properly if they are.
+ 
+ 2005-08-02  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.viewToModel): New method.
+ 	* javax/swing/text/BoxView.java
+ 	(isBefore): New method. This is a stub method to implement the
+ 	new abstract method from CompositeView.
+ 	(isAfter): New method. This is a stub method to implement the
+ 	new abstract method from CompositeView.
+ 	(getViewAtPoint): New method. This is a stub method to implement the
+ 	new abstract method from CompositeView.
+ 	(childAllocation): New method. This is a stub method to implement the
+ 	new abstract method from CompositeView.
+ 	* javax/swing/text/ComponentView.java
+ 	(viewToModel): New method. This is a stub method to implement the
+ 	new abstract method from View.
+ 	* javax/swing/text/CompositeView.java
+ 	(loadChildren): Implemented new method.
+ 	(setParent): Implemented new method.
+ 	(getViewCount): Implemented new method.
+ 	(getView): Implemented new method.
+ 	(replace): Implemented new method.
+ 	(getChildAllocation): Implemented new method.
+ 	(modelToView(int, Shape, Position.Bias)): Implemented this method.
+ 	(modelToView(int, Position.Bias, int, Position.Bias, Shape):
+ 	Implemented new method.
+ 	(viewToModel): Implemented new method.
+ 	(getNextVisualPositionFrom): Implemented new method.
+ 	(getViewIndex): Implemented new method.
+ 	(isBefore): New abstract method.
+ 	(isAfter): New abstract method.
+ 	(getViewAtPoint): New abstract method.
+ 	(childAllocation): New abstract method.
+ 	(getViewAtPosition): Implemented new method.
+ 	(getViewIndexAtPosition): Implemented new method.
+ 	(getInsideAllocation): Implemented new method.
+ 	(setParagraphInsets): Implemented new method.
+ 	(setInsets): Implemented new method.
+ 	(getLeftInset): Implemented new method.
+ 	(getRightInset): Implemented new method.
+ 	(getTopInset): Implemented new method.
+ 	(getBottomInset): Implemented new method.
+ 	(getNextNorthSouthVisualPositionFrom): New method.
+ 	(getNextEastWestVisualPositionFrom): New method.
+ 	(flipEastAndWestAtEnds): Implemented new method.
+ 	* javax/swing/text/GlyphView.java
+ 	(viewToModel): New method. This is a stub method to implement the
+ 	new abstract method from View.
+ 	* javax/swing/text/IconView.java
+ 	(viewToModel): New method. This is a stub method to implement the
+ 	new abstract method from View.
+ 	* javax/swing/text/PlainView.java
+ 	(viewToModel): New method. This is a stub method to implement the
+ 	new abstract method from View.
+ 	* javax/swing/text/View.java
+ 	(viewToModel): New abstract method.
+ 
+ 2005-08-02  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/DynamicAny/DynValueCommon.java: Inherit from
+         DynValueOperations, DynAny, IDLEntity, org.omg.CORBA.Object,
+         Serializable.
+         * org/omg/DynamicAny/DynValueCommonOperations.java: Inherit from
+         DynAnyOperations.
+         * org/omg/DynamicAny/DynAnyHelper.java,
+         org/omg/DynamicAny/DynStructHelper.java,
+         org/omg/DynamicAny/DynUnionHelper.java,
+         org/omg/DynamicAny/DynValueHelper.java,
+         org/omg/DynamicAny/DynAnyFactoryHelper.java,
+         org/omg/DynamicAny/DynArrayHelper.java,
+         org/omg/DynamicAny/DynEnumHelper.java,
+         org/omg/DynamicAny/DynFixedHelper.java,
+         org/omg/DynamicAny/DynSequenceHelper.java: New files.
+ 
+ 2005-08-01  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* examples/README: Add GNULookAndFeel.java to the compile command.
+ 
+ 2005-08-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java (mkTreeWorld):
+ 	Remove double declaration of int i.
+ 
+ 2005-08-01  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java: Exit when
+ 	pressing 'Close' on the panel.
+ 
+ 2005-08-01  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* configure.ac (LIBVERSION): Check against darwin to set module
+ 	'no' for it. Modules under darwin are not linkable.
+ 
+ 2005-08-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/AttributeSet.java: Added API comments all over.
+ 
+ 2005-08-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java: Added API comments all over.
+ 
+ 2005-08-01  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ClassLoader.java
+ 	(defineClass(String,byte[],int,int,ProtectionDomain),
+ 	resolveClass, findSystemClass, setSigners, findLoadedClass):
+ 	Added call to checkInitialized().
+ 	(checkInitialized): New method.
+ 
+ 2005-08-01  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* NEWS: Added info about VM interfaces changes.
+ 	* java/lang/Class.java
+ 	(forName(String), forName(String, boolean, ClassLoader)): Simplified
+ 	VM interface.
+ 	* java/lang/ClassLoader.java
+ 	(loadedClasses): Removed field.
+ 	(defineClass(String,byte[],int,int,ProtectionDomain)): Removed
+ 	code to add class to loadedClasses.
+ 	* vm/reference/java/lang/VMClass.java
+ 	(forName(String)): Removed method.
+ 	(forName(String,boolean,ClassLoader)): New method.
+ 	(initialize): Removed method.
+ 	(loadArrayClass): Removed method.
+ 	* vm/reference/java/lang/VMClassLoader.java
+ 	(USE_VM_CACHE): Removed field.
+ 	(findLoadedClass): Made native.
+ 
+ 2005-08-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Wolfgang Baer <WBaer@gmx.de>
+ 	* javax/swing/text/GapContent.java (shiftGap): Use new
+ 	CapContentPosition in binarySearch.
+ 	(shiftEnd): Likewise.
+ 
+ 2005-08-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/bugs.wml: New file.
+ 	* doc/www.gnu.org/newsitems.txt: Add bugzilla entry.
+ 	* doc/www.gnu.org/events/events.wml: Correct Fosdem 2005 date.
+ 	* doc/www.gnu.org/include/layout.wml: Direct bug reports to bugs.html.
+ 
+ 2005-08-01  Jan Roehrich <jan@roehrich.info>
+ 
+         * javax.swing.plaf.basic.BasicTreeUI: Method drawCentered
+         added / corrected javadoc issues in paintHorizonalLine 
+         and paintVerticalLine / fixed getRightChildIndent signature
+         (problem probably caused by copy/paste)
+ 
+ 2005-08-01  Jan Roehrich <jan@roehrich.info>
+ 
+         * javax.swing.plaf.basic.BasicTreeUI: paintVerticalLine and
+         paintHorizontalLine added.
+ 
+ 2005-07-31  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         org/omg/DynamicAny/DynValueOperations.java,
+         org/omg/DynamicAny/DynAnyFactory.java,
+         org/omg/DynamicAny/DynAnyFactoryOperations.java,
+         org/omg/DynamicAny/DynValue.java,
+         org/omg/DynamicAny/DynValueBox.java,
+         org/omg/DynamicAny/DynValueBoxOperations.java,
+         org/omg/DynamicAny/DynValueCommon.java,
+         org/omg/DynamicAny/DynValueCommonOperations.java: New files.
+ 
+ 2005-07-31  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/DynamicAny/DynFixedOperations.java,
+         org/omg/DynamicAny/DynEnum.java,
+         org/omg/DynamicAny/DynArrayOperations.java: Inherit from
+         DynAnyOperations.
+         * org/omg/DynamicAny/NameDynAnyPair.java: Inherit from
+         org.omg.CORBA.portable.IDLEntity.
+         * org/omg/DynamicAny/DynAnyOperations.java
+         (assign, current_component): Fixes in throws declaration.
+         * org/omg/DynamicAny/DynEnumOperations.java,
+         org/omg/DynamicAny/DynSequenceOperations.java,
+         org/omg/DynamicAny/DynStructOperations.java,
+         org/omg/DynamicAny/DynUnionOperations.java,
+         org/omg/DynamicAny/DynAny.java,
+         org/omg/DynamicAny/DynFixed.java,
+         org/omg/DynamicAny/DynSequence.java,
+         org/omg/DynamicAny/DynStruct.java,
+         org/omg/DynamicAny/DynUnion.java,
+         org/omg/DynamicAny/DynArray.java,
+         org/omg/DynamicAny/NameValuePair.java: Reformatted.
+ 
+ 2005-07-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/FileLockImpl.java: Mark class final.
+ 	(ch): Removed field.
+ 	(valid): New field.
+ 	(FileLockImpl): Set valid to true.
+ 	(isValid): Test and set valid field.
+ 	(release): Release lock if it is still valid.
+ 	* java/nio/channels/FileLock.java: Mark all fields private final.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_lock): Translate
+ 	Long.MAX_VALUE to zero for fcntl.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_unlock): Likewise.
+ 
+ 2005-07-31  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * scripts/eclipse-gnu.xml: Drop extends, implements, 
+         throws into new line. 
+ 
+ 2005-07-31  Jan Roehrich  <jan@roehrich.info>
+ 
+ 	* javax.swing.plaf.basic.BasicTreeUI: fixed indentation.
+ 
+ 2005-07-30  Casey Marshall  <csm@gnu.org>
+ 
+ 	* native/jni/java-nio/java_nio_MappedByteBuffer.c
+ 	(Java_java_nio_MappedByteBufferImpl_isLoadedImpl): cast argument 3
+ 	to 'mincore' to 'void *' to avoid warnings on GNU.
+ 
+ 2005-07-30  Casey Marshall  <csm@gnu.org>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_mapImpl):
+ 	eliminate various compiler warnings; mark 'buffer' as 'volatile;'
+ 	throw an exception if we can't get a constructor method ID.
+ 	* native/jni/java-nio/java_nio_MappedByteBufferImpl.c:
+ 	include 'stdlib.h.'
+ 	(get_raw_values): eliminate compiler warnings.
+ 	(Java_java_nio_MappedByteBufferImpl_isLoadedImpl): likewise.
+ 	* native/jni/java-nio/java_nio_VMDirectByteBuffer.c
+ 	(Java_java_nio_VMDirectByteBuffer_put__Lgnu_classpath_RawData_2I_3BII):
+ 	eliminate compiler warning.
+ 
+ 2005-07-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/StyledEditorKit.java: Added the remaining API
+ 	comments.
+ 
+ 2005-07-29  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/MenuSelectionManager.java
+ 	(isComponentPartOfCurrentMenu): Fixed to prevent NPE.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java
+ 	(popupVisible): Likewise.
+ 
+ 2005-07-29  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/event/MouseWheelEvent.java: fixed typo in API docs.
+ 	
+ 2005-07-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java: Added
+ 	comments all over.
+ 	* javax/swing/text/StyledEditorKit: Likewise.
+ 
+ 2005-07-29  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/JTextField.java
+ 	(insertString): Added in check for null to resolve a NPE.
+ 	* javax/swing/text/GapContent.java
+ 	(getOffset): Added in check for mark = gapStart because
+ 	if mark = gapStart = 0, then a negative is returned. This was
+ 	not right.
+ 
+ 2005-07-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicEditorPaneUI.java: Added API
+ 	comments all over.
+ 	* javax/swing/plaf/basic/BasicTextUI.java: Likewise.
+ 	
+ 2005-07-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java
+ 	(split): Moved throw statement into proper else clause.
+ 	* javax/swing/text/StyledEditorKit.java
+ 	(StyledViewFactory.create): Return the actual view instead of null.
+ 
+ 2005-07-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextPane.java: Added API comments all over.
+ 
+ 2005-07-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextPane.java
+ 	(constructor()): Implemented this constructor. Initialize the
+ 	EditorKit and set the Document to null.
+ 	(constructor(StyledDocument)): Implemented this constructor.
+ 	Initialize the EditorKit and Document.
+ 	(getUIClassID): Inlined the constant String.
+ 	(setDocument): Implemented this method.
+ 	(getStyledDocument): Likewise.
+ 	(setStyledDocument): Likewise.
+ 	(replaceSelection): Likewise.
+ 	(insertComponent): Clarified the TODO comment.
+ 	(insertIcon): Clarified the TODO comment.
+ 	(addStyle): Implemented this method.
+ 	(removeStyle): Likewise.
+ 	(getStyle): Likewise.
+ 	(getLogicalStyle): Likewise.
+ 	(setLogicalStyle): Likewise.
+ 	(getCharacterAttributes): Likewise.
+ 	(setCharacterAttributes): Likewise.
+ 	(getParagraphAttributes): Likewise.
+ 	(getInputAttributes): Likewise.
+ 	(getStyledEditorKit): Likewise.
+ 	(createDefaultEditorKit): Likewise.
+ 	(setEditorKit): Likewise.
+ 	* javax/swing/plaf/basic/BasicEditorPaneUI.java
+ 	(getEditorKit): Implemented this method.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.getViewFactory): Ask the installed EditorKit for its
+ 	ViewFactory.
+ 	(RootView.setView): Set this as the parent of the installed real
+ 	root view.
+ 	(RootView.modelToView): Don't cast to PlainView here. Use View
+ 	instead.
+ 	(setView): Don't set the parent here. This is handled inside the
+ 	root view.
+ 
+ 2005-07-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(createPosition): Delegate this call to the actual Content.
+ 	(LeafElement.constructor): Manage the start and end marks via
+ 	Position objects.
+ 	(LeafElement.getEndOffset): Use Position instead of static mark.
+ 	(LeafElement.getStartOffset): Use Position instead of static mark.
+ 	* javax/swing/text/DefaultStyledDocument.java
+ 	(ElementBuffer.change): New method. Performs structural changes
+ 	in the element tree that are necessary in order to change
+ 	text attributes.
+ 	(ElementBuffer.changeUpdate): New method. This is the method for
+ 	change().
+ 	(ElementBuffer.split): New package-private method. Splits an
+ 	element into two elements.
+ 	(setCharacterAttributes): Implemented this method. This sets
+ 	character attributes on a piece of content.
+ 	* javax/swing/text/GapContent.java
+ 	(GapContentPosition): New inner class. Implements the Position
+ 	interface for GapContent.
+ 	(constructor): Initialize the list that stores the Position objects.
+ 	(createPosition): Reimplemented. Now uses the GapContentPosition
+ 	class.
+ 	(shiftEnd): Update the stored positions.
+ 	(shiftGap): Update the stored positions.
+ 	* javax/swing/text/LabelView.java: New class.
+ 	* javax/swing/text/PlainDocument.java
+ 	(removeUpdate): Don't update the element positions, this should
+ 	now be handled by the Positions.
+ 
+ 2005-07-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/BoxView.java: New class.
+ 	* javax/swing/text/CompositeView.java: New class.
+ 	* javax/swing/text/FlowView.java: New class.
+ 	* javax/swing/text/GlyphView.java: New class.
+ 	* javax/swing/text/IconView.java: New class.
+ 	* javax/swing/text/ParagraphView.java: New class.
+ 	* javax/swing/text/StyledEditorKit.java
+ 	(UnderLineAction.constructor): Added TODO comment.
+ 	(UnderLineAction.actionPerformed): Implemented this method. This
+ 	toggles the underline attribute to a piece of content.
+ 	(ItalicAction.constructor): Added TODO comment.
+ 	(ItalicAction.actionPerformed): Implemented this method. This
+ 	toggles the italic attribute to a piece of content.
+ 	(BoldAction.constructor): Added TODO comment.
+ 	(BoldAction.actionPerformed): Implemented this method. This
+ 	toggles the bold attribute to a piece of content.
+ 	(AlignmentAction.constructor): Implemented this constructor.
+ 	(AlignmentAction.actionPerformed): Implemented this method. This
+ 	sets the alignment attribute for a piece of content.
+ 	(ForegroundAction.constructor): Implemented this constructor.
+ 	(ForegroundAction.actionPerformed): Implemented this method. This
+ 	sets the foreground attribute for a piece of content.
+ 	(FontSizeAction.constructor): Implemented this constructor.
+ 	(FontSizeAction.actionPerformed): Implemented this method. This
+ 	sets the font size attribute for a piece of content.
+ 	(FontFamilyAction.constructor): Implemented this constructor.
+ 	(FontFamilyAction.actionPerformed): Implemented this method. This
+ 	sets the font family attribute for a piece of content.
+ 	(StyledTextAction.constructor): Removed TODO comment.
+ 	(StyledTextAction.getEditor): Implemented this method.
+ 	(StyledTextAction.getStyledDocument): Implemented this method.
+ 	(StyledTextAction.getStyledEditorKit): Implemented this method.
+ 	(StyledTextAction.setCharacterAttributes): Implemented this method.
+ 	(StyledTextAction.setParagraphAttributes): Implemented this method.
+ 	(StyledViewFactory.constructor): Removed. This is not necessary here.
+ 	(StyledViewFactory.create): Implemented this method.
+ 	(AttributeTracker): Removed this inner class.
+ 	(CaretTracker): New inner class.
+ 	(CaretTracker.caretUpdate):  Implemented this method. This meeps
+ 	track of the caret in a text component and updates some fields
+ 	of the StyledEditorKit.
+ 	(constructor): Implemented this constructor.
+ 	The inputAttributes are initialized here.
+ 	(clone): Implemented this method.
+ 	(getActions): Implemented this method.
+ 	(getInputAttributes): Implemented this method.
+ 	(getCharacterAttributeRun): Implemented this method.
+ 	(createDefaultDocument): Implemented this method.
+ 	(install): Implemented this method.
+ 	(deinstall): Implemented this method.
+ 	(getViewFactory): Implemented this method.
+ 	(createInputAttributes): Implemented this method.
+ 	* javax/swing/text/View.java
+ 	(modelToView(int, Shape, Position.Bias)): Added new abstract method.
+ 	(modelToView(int, Position.Bias, int, Position.Bias, Shape):
+ 	New method.
+ 	
+ 2005-07-28  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JViewport.java:
+ 	(scrollRectToVisible): Consider the x and y position of the viewport
+ 	itself when scrolling down.  This fixes an off-by-1-pixel problem.
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(KeyHandler.keyPressed): Implemented PAGEUP, SHIFT-PAGEUP, PAGEDOWN, 
+ 	and SHIFT-PAGEDOWN key actions.
+ 
+ 2005-07-28  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* java/awt/GridBagLayout.java
+ 	(distributeSizeAndWeight): added in check, because OutOfBounds exception
+ 	was being raised.
+ 	* javax/swing/JTable.java
+ 	(setRowHeight): Added in, but not implemented. 
+ 	* javax/swing/plaf/basic/BasicComboBoxEditor.java
+ 	(setItem): added in check, because NullPointerException was being
+ 	raised.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getPathBounds): Took out unneeded call.
+ 	(uninstallListeners): added in check, because NPE was being raised.
+ 	(installUI): took out unneeded call.
+ 	(paint): Likewise.
+ 	(getPreferredSize): Should not assume root is an instance of Default
+ 	MutableTreeNode. Changed to use TreeNode instead.
+ 	(getCellBounds): Should never return null
+ 	(getCellLocation): Took out unneeded call.
+ 
+ 2005-07-28  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(KeyHandler.keyPressed): Replaced calls to KeyEvent.isShiftDown() and
+ 	isControlDown() with comparisons of KeyEvent.getModifiers() and 
+ 	InputEvent.SHIFT_MASK and CTRL_MASK.
+ 	(MouseInputHandler.mouseClicked): Reordered SHIFT and CTRL modifier
+ 	actions to correspond to JDK.  Note the JDK simply ignores other 
+ 	modifiers so isShiftDown() and isControlDown() are okay for mouse
+ 	input.
+ 
+ 2005-07-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/DynamicAny/DynUnion.java,
+         org/omg/DynamicAny/DynUnionOperations.java,
+         org/omg/DynamicAny/NameDynAnyPair.java,
+         org/omg/DynamicAny/NameValuePair.java,
+         org/omg/DynamicAny/DynAny.java,
+         org/omg/DynamicAny/DynAnyOperations.java,
+         org/omg/DynamicAny/DynArray.java,
+         org/omg/DynamicAny/DynArrayOperations.java,
+         org/omg/DynamicAny/DynEnum.java,
+         org/omg/DynamicAny/DynEnumOperations.java,
+         org/omg/DynamicAny/DynFixed.java,
+         org/omg/DynamicAny/DynFixedOperations.java,
+         org/omg/DynamicAny/DynSequence.java,
+         org/omg/DynamicAny/DynSequenceOperations.java,
+         org/omg/DynamicAny/DynStructOperations.java,
+         org/omg/DynamicAny/DynStruct.java: New files. 
+ 
+ 2005-07-28  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JViewport.java:
+ 	(scrollRectToVisible): New method, overrides JComponent method as 
+ 	intended.
+ 
+ 2005-07-28  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* native/jni/java-nio/java_nio_MappedByteBufferImpl.c 
+ 	(get_raw_values): Add env to getObjectClass call for 64-bit case.
+ 
+ 2005-07-28  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/AttributedStringIterator.java: reformatted.
+ 	
+ 2005-07-27  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(KeyHandler.keyPressed): Ensure the new lead selection index is visible
+ 	after making a change.
+ 	(MouseInputHandler.mouseClicked): Likewise.
+ 
+ 2005-07-27  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/util/PacketProcessor.java: Implement 
+ 	PrivilegedAction to allow privilaged operations.
+ 
+ 2005-07-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/events/events.wml: Add old and upcomming events.
+ 
+ 2005-07-27  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/util/Value.java: Class to read/write JDWP
+ 	untagged values and tagged values.
+ 	* gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java:
+ 	use new api for Values and IVirtualMachine and fix message in
+ 	exception.
+ 	* gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java:
+ 	use new api for Values and fix message in exception.
+ 
+ 2005-07-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/PortableServer/POAHelper.java (type, insert, extract, 
+         id, read, write): New methods.
+ 
+ 2005-07-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/AttributedString.java: added/edited API docs.
+ 	
+ 2005-07-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/AttributedString.java: reformatted.
+ 	
+ 2005-07-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextPane.java:
+ 	Reformatted file to match our coding style.
+ 
+ 2005-07-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextPane.java
+ 	(getCharacterAttributes): Return SimpleAttributeSet.EMPTY instead
+ 	of null.
+ 
+ 2005-07-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicPanelUI.java
+ 	(installDefaults): Install background color on JPanel.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added background color for Panel.
+ 
+ 2005-07-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/AttributedCharacterIterator.java: API doc fixes.
+ 	
+ 2005-07-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/text/html/parser/DocumentParser.java: reverted API fix.
+ 
+ 2005-07-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/DefaultBoundedRangeModel.java:
+ 	Fixed / added API comments for class description.
+ 	* javax/swing/DefaultButtonModel.java: Likewise.
+ 	* javax/swing/DefaultCellEditor.java: Likewise.
+ 	* javax/swing/DefaultComboBoxModel.java: Likewise.
+ 	* javax/swing/DefaultDesktopManager.java: Likewise.
+ 	* javax/swing/DefaultButtonModel.java: Likewise.
+ 	* javax/swing/DefaultFocusManager.java: Likewise.
+ 	* javax/swing/DefaultListCellRenderer.java: Likewise.
+ 	* javax/swing/DefaultListModel.java: Likewise.
+ 	* javax/swing/DefaultListSelectionModel.java: Likewise.
+ 	* javax/swing/DefaultSingleSelectionModel.java: Likewise.
+ 	* javax/swing/FocusManager.java: Likewise.
+ 	* javax/swing/GrayFilter.java: Likewise.
+ 	* javax/swing/ImageIcon.java: Likewise.
+ 	* javax/swing/InputMap.java: Likewise.
+ 	* javax/swing/InputVerifier.java: Likewise.
+ 	* javax/swing/InternalFrameFocusTraversalPolicy.java: Likewise.
+ 	* javax/swing/JApplet.java: Likewise.
+ 	* javax/swing/JCheckBox.java: Likewise.
+ 	* javax/swing/JCheckBoxMenuItem.java: Likewise.
+ 	* javax/swing/JColorChooser.java: Likewise.
+ 	* javax/swing/JComboBox.java: Likewise.
+ 	* javax/swing/JComponent.java: Likewise.
+ 
+ 2005-07-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/util/Properties.java
+ 	(getPropertyInternal): Removed.
+ 	(getProperty(String)): Search for property here instead of
+ 	getProperty(String, String).
+ 	(getProperty(String,String)): Call getProperty(String).
+ 
+ 2005-07-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/MenuItem.java
+ 	(AccessibleAWTMenuItem.setCurrentAccessibleValue): Removed
+ 	duplicate code. Added this to make setEnabled unambiguous for
+ 	javac 1.3 compiler.
+ 
+ 2005-07-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/text/html/parser/DocumentParser.java: API doc fixes,
+ 	* javax/swing/text/html/parser/DTD.java: likewise,
+ 	* javax/swing/text/html/parser/DTDConstants.java: likewise,
+ 	* javax/swing/text/html/parser/Element.java: likewise,
+ 	* javax/swing/text/html/parser/Parser.java: likewise,
+ 	* javax/swing/text/html/parser/ParserDelegator.java: likewise.
+ 	
+ 2005-07-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): added menu-related defaults.
+ 	
+ 2005-07-26  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java:
+ 	Implemented the ArrayReference CommandSet.
+ 
+ 2005-07-26  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ThreadGroupReferenceCommandSet.java:
+ 	Implemented the ThreadGroupReference CommandSet.
+ 
+ 2005-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/22989:
+ 	* java/net/Inet4Address.java (isMCNodeLocal): Use super call.
+ 	(isMCOrgLocal): Likewise.
+ 
+ 2005-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/security/provider/PKIXCertPathValidatorImpl.java
+ 	(engineValidate): Fix sense of test.  PR classpath/22991.
+ 
+ 2005-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/22992:
+ 	* javax/security/sasl/Sasl.java (getSaslClientFactories): Fix
+ 	sense of test.
+ 	(getSaslServerFactories): Likewise.
+ 
+ 2005-07-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (repaintTimer): Make
+ 	daemon thread.
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Add
+ 	static initializer.
+ 	(initStaticState): New method.
+ 	Add new global graphics reference state table and macros.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h: Regenerate.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c: Use new
+ 	NSA_GET_G_PTR macro to retreive graphics objects.
+ 	* native/jni/gtk-peer/gtkpeer.h: Add new graphics state table and
+ 	macros.
+ 
+ 2005-07-26  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler.keyPressed): Replaced calls to KeyEvent.isShiftDown() and
+ 	isControlDown() with mask comparisons of KeyEvent.getModifiers() and
+ 	InputEvent.SHIFT_MASK and CTRL_MASK.  This makes it easier to ignore
+ 	invalid modifiers.
+ 
+ 2005-07-26  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler.keyPressed): Implemented CTRL-SPACE key action.
+ 
+ 2005-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/security/cert/X509CertSelector.java (match): Convert sigId
+ 	to String before comparison.  PR classpath/22987.
+ 
+ 2005-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/security/OID.java: Typo fix.
+ 
+ 2005-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/security/auth/x500/X500Principal.java (getName): Don't
+ 	compare oid to String.  PR classpath/22988.
+ 
+ 2005-07-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (repaint): Reuse
+ 	repaint timer across repaint calls.
+ 
+ 2005-07-26  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractAction.java
+ 	Fixed / Added API doc comments for the class description.
+ 	* javax/swing/AbstractButton.java: Likewise.
+ 	* javax/swing/AbstractCellEditor.java: Likewise.
+ 	* javax/swing/AbstractListModel.java: Likewise.
+ 	* javax/swing/AbstractSpinnerModel.java: Likewise.
+ 	* javax/swing/ActionMap.java: Likewise.
+ 	* javax/swing/BorderFactory.java: Likewise.
+ 	* javax/swing/Box.java: Likewise.
+ 	* javax/swing/BoxLayout.java: Likewise.
+ 	* javax/swing/ButtonGroup.java: Likewise.
+ 	* javax/swing/CellRendererPane.java: Likewise.
+ 	* javax/swing/ComponentInputMap.java: Likewise.
+ 	* javax/swing/DebugGraphics.java: Likewise.
+ 
+ 2005-07-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/text/DateFormat.java (equals): Reimplement.
+ 
+ 2005-07-26  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paint): Only call paintFocus if the button is actually focused.
+ 	(paintFocus): The default implementation in the BasicLookAndFeel
+ 	does nothing. I removed the code here.
+ 
+ 2005-07-26  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added new borders for MenuBar and MenuItem.
+ 
+ 2005-07-26  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/util/Properties.java
+ 	(getPropertyInternal): New method. Avoids infinite recursion if
+ 	getProperty() methods are overridden in subclasses.
+ 	(getProperty(String)): Use getPropertyInternal to avoid recursion.
+ 	(getProperty(String,String)): Likewise.
+ 
+ 2005-07-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(getPreferredSize): Removed.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(getPreferredSize): Removed.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(getPreferredSize): Removed.
+ 
+ 2005-07-26  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/java/awt/AWTUtilities.java:
+ 	Fixed formatting of this file.
+ 
+ 2005-07-26  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java:
+ 	(MenuBarBorder): new inner class.
+ 
+ 2005-07-26  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java:
+ 	(MenuItemBorder): new inner class.
+ 	
+ 2005-07-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_init): Mark clazz as
+ 	unused. Remove unused variables constructor and obj.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_implCloseChannel): Retry
+ 	when interrupted.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_available): Likewise.
+ 
+ 2005-07-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (lockCheck): New method.
+ 	(tryLock): Use lockCheck().
+ 	(lock): Likewise.
+ 
+ 2005-07-26  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* native/target/generic/target_generic_network.h
+ 	(TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT): Added 
+ 	missing sys/time.h include.
+ 
+ 2005-07-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (description):
+ 	New final field.
+ 	(FileChannelImpl): Set description.
+ 	(init): Likewise.
+ 	(toString): New method.
+ 	All methods add parameters when throwing IllegalArgumentException.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(open): Add filename to FileNotFoundException.
+ 
+ 2005-07-26  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* NEWS: Added comment about new VMProxy class.
+ 	* gnu/classpath/Configuration.java.in
+ 	(HAVE_NATIVE_GET_PROXY_CLASS): Removed.
+ 	(HAVE_NATIVE_GET_PROXY_DATA): Removed.
+ 	(HAVE_NATIVE_GENERATE_PROXY_CLASS): Removed.
+ 	* java/lang/reflect/Proxy.java
+ 	(getProxyClass): Changed to call VMProxy.
+ 	(getProxyClass0): Removed.
+ 	(getProxyData0): Removed.
+ 	(generateProxyClass0): Removed.
+ 	(ProxyData): Removed private modifier.
+ 	(POOL): Removed (was unused).
+ 	(INVOKESTATIC): Removed (was unused).
+ 	* vm/reference/java/lang/reflect/VMProxy.java: New file.
+ 
+ 2005-07-26  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* NEWS: Added comment about new VM hook in VMClassLoader.
+ 
+ 2005-07-26  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/text/DateFormatter.java: API doc fixes,
+ 	* javax/swing/text/InternationalFormatter.java: likewise,
+ 	* javax/swing/text/JTextComponent.java: likewise.
+ 	
+ 2005-07-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/Makefile.am (clean-local): Use rm -rf.
+ 
+ 2005-07-26  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java
+ 	(USE_VM_CACHE): Removed final modifier.
+ 
+ 2005-07-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (repaint): Implement
+ 	timed repaint.
+ 	(updateCursorImmediately): Implement.
+ 	(RepaintTimerTask): New class.
+ 	* gnu/java/awt/peer/gtk/GtkImageConsumer.java (imageComplete):
+ 	Don't remove consumer if source is a MemoryImageSource.
+ 
+ 2005-07-25  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* native/jni/classpath/native_state.c: add assertion for object type
+ 
+ 2005-07-25  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler.advanceSingleSelection): New method.  Helper method for 
+ 	ENTER, SHIFT-ENTER, TAB, and SHIFT-TAB key events.
+ 	(KeyHandler.advanceMultipleSelection): Likewise, used when the table
+ 	has multiple selections at the time that ENTER or TAB was pressed.
+ 	(KeyHandler.keyPressed): Implemented TAB, SHIFT-TAB, and SHIFT-ENTER
+ 	and merged these with existing code for ENTER event, because of the
+ 	similarites.
+ 
+ 2005-07-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/CollationKey.java (equals): Use Arrays.equals.
+ 	PR classpath/22986.
+ 
+ 2005-07-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/Properties.java (load): Handle case where backslash
+ 	appears at EOF when reading the key.  PR classpath/22994.
+ 
+ 2005-07-25  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paint): moved code to paintNode
+ 	(getCellBounds): width increased, slightly short before
+ 	(paintNode): changed to paint node depending if icons exist
+ 
+ 2005-07-25  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+         * native/jni/classpath/jcl.c,
+         native/jni/classpath/jcl.h
+         (JCL_NewRawDataObject): New function.
+         (JCL_GetRawData): New function.
+ 
+ 2005-07-25  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/Container.java:
+ 	(setFocusTraversalKeys): Instantiate focusTraversalKeys to an array of
+ 	size 4, not 3.  This must have been a typo.
+ 
+ 2005-07-25  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/rmi/server/RMIClassLoader.java
+ 	(loadClass(String, String)): Use Class.forName() instead of
+ 	directly calling ClassLoader.loadClass(), to handle array
+ 	types correctly.
+ 
+ 2005-07-25  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(selectAll): Store the lead selection indices and restore them after
+ 	selecting all cells.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler.keyPressed): Changed the criteria for "only one selection"
+ 	when the ENTER key is pressed to match the behavior of the JDK.  Also
+ 	replaced direct code for CTRL-A with call to JTable.selectAll().
+ 
+ 2005-07-25  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ClassLoader.java
+ 	(loadedClasses): Set based on VMClassLoader.VM_USE_CACHE.
+ 	(defineClass): Modified to respect VMClassLoader.VM_USE_CACHE.
+ 	* vm/reference/java/lang/VMClassLoader.java
+ 	(VM_USE_CACHE): New field.
+ 
+ 2005-07-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/java/awt/AWTUtilities.java:
+ 	Added methods from SwingUtilities so that AWT does not have to
+ 	depend on Swing.
+ 	* java/awt/Component.java:
+ 	Reverted my DEFAULT_FONT patch from yesterday. This does not
+ 	seem to work with the Gtk peers.
+ 	* java/awt/Container.java
+ 	(addImpl): Call addNotify() on the added child. Invalidate not
+ 	only the container but also the added child. Repaint the container.
+ 	(remove): Repaint the container.
+ 	(invalidate): Also invalidate the LayoutManager.
+ 	(invalidateTree): Call super.invalidate to invalidate the container
+ 	itself. Also invalidate the LayoutManager.
+ 	(setFont): Only set the font if the specified argument actually
+ 	differs from the current font.
+ 	(preferredSize): Optimized this method so the LayoutManager is only
+ 	called if the layout is invalid. Otherwise we return the preferred
+ 	size that has been stored during last validation/layout.
+ 	(getAlignmentX): Despite common belief, this method does _not_
+ 	call the LayoutManagers getAlignmentX in the JDK. So we also don't.
+ 	(getAlignmentY): Despite common belief, this method does _not_
+ 	call the LayoutManagers getAlignmentX in the JDK. So we also don't.
+ 	(dispatchEventImpl): Let the dispatcher decide if it is enabled
+ 	for the incoming event type.
+ 	(eventTypeEnabled): Enables only container events for containers.
+ 	(addNotifyContainerChildren): Coalesced two if statements into one.
+ 	Enable events on the dispatcher for this container.
+ 	(LightweightDispatcher): Made this class reentrant. Handle
+ 	events enabling/disabling here.
+ 
+ 2005-07-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java
+ 	(static initializer): Init out, err and in here.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_init): Moved init code
+ 	for in, out and err to Java code.
+ 
+ 2005-07-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/faq.wml: Expand contribution assign answer.
+ 
+ 2005-07-25  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/image/ConvolveOp.java:
+ 	(getKernel): return a clone of the kernel.
+ 
+ 2005-07-25  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ClassLoader.java
+ 	(findLoadedClass): Call VMClassLoader.findLoadedClass.
+ 	* vm/reference/java/lang/VMClassLoader.java
+ 	(findLoadedClass): New method.
+ 
+ 2005-07-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/standard.omit: Don't omit gnu/javax/swing/plaf/gtk files.
+ 	* lib/Makefile.am (dist-hook): Don't remove standard.omit dirs.
+ 
+ 	* gnu/javax/swing/plaf/gtk/GtkBorders.java: Removed.
+ 	* gnu/javax/swing/plaf/gtk/GtkCheckBoxUI.java: Likewise.
+ 	* gnu/javax/swing/plaf/gtk/GtkIconFactory.java: Likewise.
+ 	* gnu/javax/swing/plaf/gtk/GtkLookAndFeel.java: Likewise.
+ 	* gnu/javax/swing/plaf/gtk/GtkRadioButtonUI.java: Likewise.
+ 	* gnu/javax/swing/plaf/gtk/GtkSliderUI.java: Likewise.
+ 	* gnu/javax/swing/plaf/gtk/README: Likewise.
+ 	* gnu/javax/swing/plaf/gtk/SliderTest.java: Likewise.
+ 
+ 2003-07-23  Casey Marshall  <csm@gnu.org>
+ 
+ 	* configure.ac (AC_CHECK_HEADERS): add 'sys/mman.h'.
+ 	(AC_CHECK_FUNCS): add mmap and related functions.
+ 	* include/java_nio_VMDirectByteBuffer.h: regenerated.
+ 	* java/nio/DirectByteBufferImpl.java (put): new method.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(ALIGN_DOWN): new macro.
+ 	(ALIGN_UP): new macro.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_mapImpl): implemented.
+ 	* native/jni/java-nio/java_nio_MappedByteBufferImpl.c: updated
+ 	copyright years.
+ 	(ALIGN_DOWN): new macro.
+ 	(ALIGN_UP): new macro.
+ 	(get_pagesize): new function.
+ 	(get_raw_values): new function.
+ 	(Java_java_nio_MappedByteBufferImpl_unmapImpl): implemented.
+ 	(Java_java_nio_MappedByteBufferImpl_isLoadedImpl): implemented.
+ 	(Java_java_nio_MappedByteBufferImpl_loadImpl): implemented.
+ 	(Java_java_nio_MappedByteBufferImpl_forceImpl): implemented.
+ 	* native/jni/java-nio/java_nio_VMDirectByteBuffer.c
+ 	(Java_java_nio_VMDirectByteBuffer_put): renamed to
+ 	'Java_java_nio_VMDirectByteBuffer_put__Lgnu_classpath_RawData_2IB.'
+ 	(Java_java_nio_VMDirectByteBuffer_get__Lgnu_classpath_RawData_2I_3BII):
+ 	call 'ReleaseByteArrayElements' on the source byte array elements.
+ 	(Java_java_nio_VMDirectByteBuffer_put__Lgnu_classpath_RawData_2I_3BII):
+ 	new method.
+ 	* vm/reference/java/nio/VMDirectByteBuffer.java (put): new method.
+ 
+ 2005-07-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/BoundedRangeModel.java: added/updated API doc comments.
+ 
+ 2005-07-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/Icon.java: added API doc comments.
+ 
+ 2005-07-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/AttributedString.java: API doc fixes,
+ 	* java/text/ChoiceFormat.java: likewise,
+ 	* java/text/CollationElementIterator.java: likewise,
+ 	* java/text/CollationKey.java: likewise,
+ 	* java/text/Collator.java: likewise,
+ 	* java/text/DateFormat.java: likewise,
+ 	* java/text/DateFormatSymbols.java: likewise,
+ 	* java/text/DecimalFormatSymbols.java: likewise,
+ 	* java/text/MessageFormat.java: likewise,
+ 	* java/text/NumberFormat.java: likewise,
+ 	* java/text/ParseException.java: likewise,
+ 	* java/text/SimpleDateFormat.java: likewise,
+ 	* java/text/StringCharacterIterator.java: likewise.
+ 
+ 2005-07-23  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/ImageIcon.java: API doc fixes,
+ 	* javax/swing/JLayeredPane.java: likewise,
+ 	* javax/swing/JSplitPane.java: likewise,
+ 	* javax/swing/JTree.java: likewise,
+ 	* javax/swing/JViewport.java: likewise,
+ 	* javax/swing/RepaintManager.java: likewise,
+ 	* javax/swing/SizeRequirements.java: likewise,
+ 	* javax/swing/SortingFocusTraversalPolicy.java.
+ 	
+ 2005-07-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/PortableServer/ServantLocatorOperations.java,
+         org/omg/PortableServer/ServantActivatorOperations.java:
+         Inherit from ServantManagerOperations.
+         * org/omg/PortableServer/CurrentOperations.java:
+         Inherit from org.omg.CORBA.CurrentOperations.
+         org/omg/PortableServer/ForwardRequestHelper.java: New file.
+ 
+ 2005-07-23  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/List.java (List): Initialize selected[] to an empty array.
+ 
+ 2005-07-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * NEWS: Added entry about POA.
+ 
+ 2005-07-22  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/PortableServer/RequestProcessingPolicyOperations.java,
+         org/omg/PortableServer/ServantRetentionPolicyOperations.java,
+         org/omg/PortableServer/ThreadPolicyOperations.java,
+         org/omg/PortableServer/IdAssignmentPolicyOperations.java,
+         org/omg/PortableServer/IdUniquenessPolicyOperations.java,
+         org/omg/PortableServer/ImplicitActivationPolicyOperations.java,
+         org/omg/PortableServer/LifespanPolicyOperations.java:
+         Inherit from PolicyOperations.
+ 
+ 2005-07-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler.keyPressed): If row selection is not allowed in the table,
+ 	then consider all rows of a particular column selected when you get an
+ 	ENTER key event.  This matches JDK behaviour and fixes an out of 
+ 	bounds error.  Also, wrapped lines at 80 chars.
+ 
+ 2005-07-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(paint): Only highlight the border of a table cell if it is the most
+ 	recently updated cell.
+ 
+ 2005-07-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(paintCell): Fixed misnamed variable.
+ 
+ 2005-07-22  Audrius Meskauskas  <AudriusA@Bioinformatics.org> 
+         
+         * gnu/CORBA/Poa/gnuPOA.java,
+         gnu/CORBA/Poa/gnuPOAManager.java,
+         gnu/CORBA/Poa/activeObjectMap.java,
+         gnu/CORBA/Poa/gnuAdapterActivator.java,
+         gnu/CORBA/Poa/gnuServantObject.java,
+         gnu/CORBA/Poa/servantDelegate.java,
+         gnu/CORBA/Poa/ORB_1_4.java,
+         gnu/CORBA/Poa/policySets.java,
+         gnu/CORBA/Poa/gnuPoaCurrent.java,
+         gnu/CORBA/Poa/LocalDelegate.java,
+         gnu/CORBA/Poa/dynImpHandler.java,
+         gnu/CORBA/Poa/LocalServerRequest.java,
+         gnu/CORBA/Poa/LocalRequest.java,
+         gnu/CORBA/Poa/ForwardedServant.java,
+         gnu/CORBA/Poa/gnuIdAssignmentPolicy.java,
+         gnu/CORBA/Poa/gnuRequestProcessingPolicy.java,
+         gnu/CORBA/Poa/gnuThreadPolicy.java,
+         gnu/CORBA/Poa/gnuLifespanPolicy.java,
+         gnu/CORBA/Poa/gnuIdUniquenessPolicy.java,
+         gnu/CORBA/Poa/gnuServantRetentionPolicy.java,
+         gnu/CORBA/Poa/gnuImplicitActivationPolicy.java,
+         gnu/CORBA/Poa/gnuForwardRequest.java,
+         gnu/CORBA/ForwardRequestHelper.java,
+         gnu/CORBA/Poa/vPolicy.java,
+         gnu/CORBA/Poa/ForwardRequestHolder.java,
+         org/omg/PortableServer/POA.java,
+         org/omg/PortableServer/POAManagerOperations.java,
+         org/omg/PortableServer/POAOperations.java,        
+         org/omg/PortableServer/Servant.java,
+         org/omg/PortableServer/DynamicImplementation.java,
+         org/omg/PortableServer/ServantActivator.java,        
+         org/omg/PortableServer/ServantActivatorOperations.java,
+         org/omg/PortableServer/ServantLocator.java,
+         org/omg/PortableServer/ServantLocatorOperations.java,        
+         org/omg/PortableServer/ServantManager.java,               
+         org/omg/PortableServer/Current.java,
+         org/omg/PortableServer/CurrentHelper.java,
+         org/omg/PortableServer/CurrentOperations.java,
+         org/omg/PortableServer/_ServantLocatorStub.java,
+         org/omg/PortableServer/portable/Delegate.java,
+         org/omg/PortableServer/ServantActivatorHelper.java,
+         org/omg/PortableServer/_ServantActivatorStub.java,
+         org/omg/PortableServer/ServantLocatorHelper.java,
+         org/omg/PortableServer/ServantActivatorPOA.java,
+         org/omg/PortableServer/ServantLocatorPOA.java,
+         org/omg/PortableServer/AdapterActivatorOperations.java,
+         org/omg/PortableServer/AdapterActivator.java,
+         org/omg/PortableServer/POAHelper.java,
+         org/omg/PortableServer/ServantManagerOperations.java,
+         org/omg/PortableServer/POAManager.java,        
+         org/omg/PortableServer/package.html: New files.
+         * org/omg/CORBA/ORB.java: Documented POA features.
+         gnu/CORBA/gnuRequest.java (_releaseReply, equals): Mind that
+         the delegate can be null.
+         * gnu/CORBA/IOR_Delegate.java,
+         gnu/CORBA/Functional_ORB.java,
+         org/omg/CORBA/portable/ObjectImpl.java,
+         gnu/CORBA/Connected_objects.java: Rewritten.
+         * gnu/CORBA/Simple_delegate.java (is_equivalent): This method 
+         is rewritten.
+         * gnu/CORBA/ServiceRequestAdapter.java: Added return value support.
+ 
+ 2005-07-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(paintCell): Set hasFocused to true if the cell is the lead selection
+ 	index and if the list has focus.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	(initComponentDefaults): Added List.focusCellHighlightBorder default.
+ 
+ 2005-07-22  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ArrayTypeCommandSet.java:
+ 	Implemented the ArrayType CommandSet.
+ 
+ 2005-07-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added defaults for ToggleButton.
+ 
+ 2005-07-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Component.java
+ 	(setForeground): Fire PropertyChangeEvent after the foreground
+ 	has actually changed, instead of before.
+ 	(setBackground): Fire PropertyChangeEvent after the foreground
+ 	has actually changed, instead of before. Avoid one comparison
+ 	at the beginning of method.
+ 	(getBackground): If background is null and parent is null, return
+ 	null, instead of SystemColor.window. This is what it's supposed
+ 	to do.
+ 	(getFont): Avoid NPE by creating a local reference. Return
+ 	static final DEFAULT_FONT instead of creating a new font every time
+ 	we and our parents have no font set.
+ 	(setFont): Made check for font equality more precise.
+ 	(paramString): Added parent in paramString.
+ 
+ 2005-07-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JToggleButton.java
+ 	(ToggleButtonModel.setPressed): Fixed order in which events
+ 	get fired.
+ 
+ 2005-07-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/DefaultButtonModel.java
+ 	(setPressed): Changed order in which the events get fired. The
+ 	ActionEvent must be fired before the ChangeEvent gets fired.
+ 
+ 2005-07-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Component.java
+ 	(show): Instead of invalidating the component, only invalidate
+ 	the parent, if there is one. Also repaint this parent.
+ 	Also, avoid NPEs by creating local references.
+ 	(hide): Instead of invalidating the component, only invalidate
+ 	the parent, if there is one. Also repaint this parent.
+ 	Also, avoid NPEs by creating local references.
+ 
+ 2005-07-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java: API doc fixes,
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java: likewise,
+ 	* javax/swing/plaf/basic/BasicTreeUI.java: likewise.
+ 
+ 2005-07-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalCheckBoxIcon.java: API doc fixes,
+ 	* javax/swing/plaf/metal/MetalIconFactory.java: likewise.
+ 	
+ 2005-07-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/text/html/HTMLEditorKit.java: API doc fixes.
+ 	
+ 2005-07-22  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/tree/AbstractLayoutCache.java: API doc fixes,
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java: likewise,
+ 	* javax/swing/tree/DefaultTreeModel.java: likewise,
+ 	* javax/swing/tree/FixedHeightLayoutCache: likewise.
+ 	
+ 2005-07-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalToggleButtonUI.java
+ 	(constructor): Initialize colors.
+ 	(getFocusColor): Fetches the focus property from the UIDefaults.
+ 	(getSelectColor): Fetches the select property from the UIDefaults.
+ 	(getDisabledTextColor): Fetches the disabledText property from the
+ 	UIDefaults.
+ 
+ 2005-07-21  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler.updateSelection): Update the ListSelectionModels even if
+ 	rowSelectionAllowed or columnSelectionAllowed is false.  This
+ 	complies with the JDK.
+ 	(KeyHandler.keyPressed): Implemented the ENTER key action.
+ 
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/BorderUIResource.java: API doc fixes,
+ 	* javax/swing/plaf/FileChooserUI.java: likewise,
+ 	* javax/swing/plaf/TextUI.java: likewise,
+ 	* javax/swing/plaf/UIResource.java: likewise.
+ 	
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/event/EventListenerList.java: API doc fixes,
+ 	* javax/swing/event/MenuKeyEvent.java: likewise,
+ 	* javax/swing/event/TreeSelectionEvent.java: likewise.
+ 	
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/border/AbstractBorder.java: API doc fixes,
+ 	* javax/swing/border/BevelBorder.java: likewise,
+ 	* javax/swing/border/EtchedBorder.java: likewise,
+ 	* javax/swing/border/LineBorder.java: likewise,
+ 	* javax/swing/border/SoftBevelBorder.java: likewise,
+ 	* javax/swing/border/TitledBorder.java: likewise.
+ 	
+ 2005-07-21  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(constructor): Initialize colors.
+ 	(getFocusColor): Fetches the focus property from the UIDefaults.
+ 	(getSelectColor): Fetches the select property from the UIDefaults.
+ 	(getDisabledTextColor): Fetches the disabledText property from the
+ 	UIDefaults.
+ 
+ 2005-07-21  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/GapContent.java
+ 	(replace): New method. Replaces a chunk of the buffer with
+ 	another chunk.
+ 
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/AbstractListModel.java: API doc fixes,
+ 	* javax/swing/BorderFactory.java: likewise,
+ 	* javax/swing/BoundedRangeModel.java: likewise,
+ 	* javax/swing/BoxLayout.java: likewise,
+ 	* javax/swing/CellRendererPane.java: likewise,
+ 	* javax/swing/ComponentInputMap.java: likewise,
+ 	* javax/swing/DefaultBoundedRangeModel.java: likewise,
+ 	* javax/swing/DefaultButtonModel.java: likewise,
+ 	* javax/swing/DefaultCellEditor.java: likewise,
+ 	* javax/swing/InputMap.java: likewise,
+ 	* javax/swing/JButton.java: likewise,
+ 	* javax/swing/JFrame.java: likewise,
+ 	* javax/swing/JLabel.java: likewise,
+ 	* javax/swing/JMenuBar.java: likewise,
+ 	* javax/swing/JPopupMenu.java: likewise,
+ 	* javax/swing/JScrollBar.java: likewise,
+ 	* javax/swing/JScrollPane.java: likewise,
+ 	* javax/swing/JSeparator.java: likewise,
+ 	* javax/swing/JSlider.java: likewise,
+ 	* javax/swing/JSpinner.java: likewise,
+ 	* javax/swing/JTextArea.java: likewise,
+ 	* javax/swing/JToggleButton.java: likewise,
+ 	* javax/swing/SpinnerListModel.java: likewise,
+ 	* javax/swing/Spring.java: likewise,
+ 	* javax/swing/SpringLayout.java: likewise.
+ 	
+ 2005-07-21  Lillian Angel  <langel@redhat.com>
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getPreferredSize): Changed to depend on visible nodes.
+ 	(mouseClicked): Fixed to keep track of last cell clicked, so expand/collapse
+ 	works properly by clicking 2 times on the same cell.
+ 
+ 2005-07-21  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java
+ 	(putClientProperty): If value == null, remove the key from the
+ 	Hashtable, otherwise we would get an NPE here.
+ 
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	(thumbHeight): removed,
+ 	(thumbWidth): removed,
+ 	(tickHeight): removed,
+ 	(installDefaults): deleted initialisation of thumbHeight, thumbWidth 
+ 	and thumbRect,
+ 	(getPreferredHorizontalSize): changed source of thumb height and width,
+ 	(getPreferredVerticalSize): likewise,
+ 	(getMinimumHorizontalSize): reimplemented,
+ 	(getMinimumVerticalSize): reimplemented,
+ 	(getMinimumSize): reimplemented, 
+ 	(getMaximumSize): reimplemented,
+ 	(calculateThumbSize): use getThumbSize(),
+         (calculateThumbLocation): use trackRect not contentRect,
+ 	(calculateTrackBuffer): use half the thumbRect,
+ 	(getThumbSize): use constant size,
+ 	(calculateTrackRect): move track down to middle of contentRect,
+ 	(getTickLength): return constant,
+ 	(paintTrack): removed unused local variables,
+ 	(paintTicks): apply a translation to g temporarily before calling 
+ 	methods to draw ticks, add 0.5 to solve rounding problem,
+ 	(paintMinorTickForHorizSlider): modified to account for translation 
+ 	already applied to g,
+ 	(paintMajorTickForHorizSlider): likewise,
+ 	(paintMinorTickForVertSlider): likewise,
+ 	(paintMajorTickForVertSlider): likewise,
+ 	(xPositionForValue): subtract 1 from width,
+ 	(yPositionForValue): likewise,
+ 	*javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): add slider defaults,
+ 	*javax/swing/plaf/metal/MetalSliderUI.java: implemented missing 
+ 	methods,
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkSliders): added minor ticks and labels.
+ 
+ 2005-07-21  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(init): Only set icon if the supplied icon is not null. Otherwise
+ 	we would override icons that are possibly set by the UI.
+ 	* javax/swing/plaf/basic/BasicIconFactory.java
+ 	(CheckBoxIcon): An new Icon implementation used for CheckBoxes
+ 	in the Basic L&F.
+ 	(RadioButtonIcon): An new Icon implementation used for
+ 	RadioButtons in the Basic L&F.
+ 	(getCheckBoxIcon): Now returns a (cached) instance of CheckBoxIcon
+ 	instead of the (wrong) inner icon implementation.
+ 	(getRadioButtonIcon): Now returns a (cached) instance of
+ 	RadioButtonIcon	instead of the (wrong) inner icon implementation.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Registered new icons for CheckBox and
+ 	RadioButton, using a LazyValue entry.
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java
+ 	Added API documentation all over.
+ 	(installUI): Removed this method.
+ 	(installDefaults): New method. Installs the default icons if there
+ 	is no other icon set.
+ 	(getPropertyPrefix): New method. Returns the prefix that is used
+ 	to look up UIDefault entries.
+ 	(getDefaultIcon): Use propertyPrefix instead of hardcoded property.
+ 	(paint): New method. Override paint for customized painting
+ 	of RadioButtons.
+ 	* javax/swing/plaf/metal/MetalCheckBoxIcon.java
+ 	(drawCheck): Respect the x and y parameter.
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(RadioButtonIcon): An Icon implementation for Metal RadioButtons.
+ 	(getRadioButtonIcon): New method. Returns a shared instance of
+ 	RadioButtonIcon.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Register new icons for CheckBox and
+ 	RadioButton using a LazyValue entry.
+ 
+ 2005-07-21  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JOptionPane.java
+ 	(createInternalFrame): Look for a JDesktopPane first, then
+ 	look for a JLayeredPane as fallback. Set this JOptionPane as
+ 	contentPane for the found JDesktopPane. Make the InternalFrame
+ 	visible and appropriatly sized here.
+ 	(showInternalConfirmDialog): ALL VARIANTS OF THIS METHOD:
+ 	Adjusted call to startModel to only take one parameter.
+ 	(showInternalInputDialog): ALL VARIANTS OF THIS METHOD:
+ 	Adjusted call to startModel to only take one parameter.
+ 	(showInternalMessageDialog): ALL VARIANTS OF THIS METHOD:
+ 	Adjusted call to startModel to only take one parameter.
+ 	(showInternalOptionDialog): ALL VARIANTS OF THIS METHOD:
+ 	Adjusted call to startModel to only take one parameter.
+ 	(startModal): Now only takes one parameter. This method does no
+ 	longer add the JOptionPane to the contentPane of the InternalFrame,
+ 	set the size and make the InternalFrame visible. This is done in
+ 	createInternalFrame.
+ 
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java: API doc fixes.
+ 
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/AbstractButton.java: API doc fixes all over.
+ 
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/UIDefaults.java
+ 	(getFont(Object, Locale)): matched argument name to API doc comment,
+ 	(getColor(Object, Locale)): likewise,
+ 	(getIcon(Object, Locale)): likewise,
+ 	(getBorder(Object, Locale)): likewise,
+ 	(getString(Object, Locale)): likewise,
+ 	(getInt(Object, Locale)): likewise,
+ 	(getBoolean(Object, Locale)): likewise,
+ 	(getInsets(Object, Locale)): likewise,
+ 	(getDimension(Object, Locale)): likewise.
+ 	
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JComponent.java: API doc fixes all over.
+ 
+ 2005-07-21  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/net/URLClassLoader.java: reordered some API doc comments to 
+ 	suppress Eclipse warnings, and fixed API doc link.
+ 	
+ 2005-07-20  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java:
+ 	(layoutContainer): Removed addition of horizontal and vertical gaps
+ 	when there is no corresponding adjacent component.
+ 
+ 2005-07-20  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable:
+ 	(JTable): Set the lead selection index for each of the two lists
+ 	associated with this table to 0 (instead of -1).  This complies with
+ 	JDK.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(KeyHandler.keyPressed):  Implemented the following key actions (with
+ 	CTRL/SHIFT handling when appropriate): UP/DOWN/LEFT/RIGHT, HOME/END,
+ 	CTRL-A, CTRL-\, CTRL-/.
+ 
+ 2005-07-20  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(KeyHandler.keyPressed): Restore the lead selection index after doing
+ 	a "select all" operation.
+ 
+ 2005-07-20  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(keyPressed): Implemented some more VK_XXX and VK_KP_XXX events.
+ 
+ 2005-07-20  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ClassObjectReferenceCommandSet.java:
+ 	Implemented the ClassObjectReference CommandSet.
+ 
+ 2005-07-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Added value for InternalFrame.icon.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(installDefaults): Install icon from UIDefaults.
+ 
+ 2005-07-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(createSeparator): Return null here.
+ 	(installComponents): Don't add a separator in the OptionPane.
+ 
+ 2005-07-20  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paint): Changed to paint children of root as roots if the 
+ 	root is not visible, but the root path is expanded.
+ 	(getPathForRow): If the root is not visible, but expanded, 
+ 	the first child should be considered row 0.
+ 	(getRowCount): Likewise.
+ 	(getPathBounds): Likewise.
+ 	(getCellLocation): If root is not visible, but expanded, the
+ 	level of each node is lowered by 1.
+ 	(paintRecursive): If root is not visible, but expanded, there should
+ 	be no indentation when the children are drawn. Also, there should be no
+ 	line drawn connecting the children. This makes it look like there are 2
+ 	independant trees (works same as JDK).
+ 
+ 2005-07-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(installUI): Moved titlePane.setOpaque() call into
+ 	BasicInternalFrameTitlePane's constructor.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(constructor): Moved titlePane.setOpaque() call from
+ 	BasicInternalFrameUI.installUI into this constructor.
+ 
+ 2005-07-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JOptionPane.java
+ 	(createInternalFrame): Look up the nearest JLayeredPane instead
+ 	of JDesktopPane. This is in contrast to the specs but what the JDK
+ 	does and what makes sense.
+ 
+ 2005-07-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SwingUtilities.java:
+ 	Made class description more concise.
+ 
+ 2005-07-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JButton.java:
+ 	Made class description more concise.
+ 
+ 2005-07-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JButton.java
+ 	(AccessibleJButton): Added accessibility support for JButton.
+ 	(getAccessibleContext): Implemented to return an AccessibleJButton.
+ 	* javax/swing/JLabel.java
+ 	(AccessibleJLabel): Added accessibility support for JLabel.
+ 	(getAccessibleContext): Implemented to return an AccessibleJLabel.
+ 
+ 2005-07-20  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JSlider.java
+ 	(setMinimum): fire PropertyChangeEvent for new value,
+ 	(setMaximum): likewise,
+ 	(setSnapToTicks): fire PropertyChangeEvent, not ChangeEvent,
+ 	(setPaintTrack): fire PropertyChangeEvent for new value,
+ 	(setPaintLabels): initialise label table.
+ 
+ 2005-07-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JLayeredPane.java:
+ 	Fixed and extended API documentation / class description.
+ 
+ 2005-07-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/Action.java:
+ 	Fixes the class description to be more concise.
+ 
+ 2005-07-20  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/AttributedCharacterIterator.java: fixed minor API doc
+ 	problems and 80 column wrapping;
+ 	* java/text/BreakIterator.java
+ 	(getCharacterInstance(Locale)): matched argument name to API docs,
+ 	(getLineInstance(Locale)): likewise,
+ 	(getSentenceInstance(Locale)): likewise,
+ 	(getWordInstance(Locale)): likewise,
+ 	and fixed minor API doc problems all over;
+ 	* java/text/CharacterIterator.java: fixed minor API doc problems.
+ 	
+ 2005-07-19  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/PortableServer/ForwardRequest.java: New file.
+ 
+ 2005-17-19  Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/BasicTreeUI
+ 	(setModel): changed to call JTree's setModel
+ 	(setRootVisible): Likewise
+ 	(isRootVisible): Likewise
+ 	(getClosestPathForLocation): Implemented
+ 	(paint): took out translate, no need to.
+ 	(mouseClicked): clicking made smoother.
+ 	
+ 2005-17-19  Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/BasicTreeUI:
+ 	Moved several functions around for readability.
+ 	Some formatting in various places.
+ 	(paint): extended size of border drawn
+ 	(mouseClicked): checked if path was null
+ 	(getCellLocation): Now package-private.
+ 	(paintNode): Implemented, there is no need to paint the leaf and non
+ 	leaf separately. Works with custom icons.
+ 	(paintRecursive): Now package-private. Changed to paint with paintNode.
+ 	(paintControlIcons): Now package-private.
+ 	(hasControlIcons): Now package-private.
+ 
+ 2005-17-19  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JSlider.java
+ 	(createStandardLabels(int)): updated API docs,
+ 	(createStandardLabels(int, int)): throw IllegalArgumentException for
+ 	bad arguments.
+ 
+ 2005-17-18  Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/BasicTreeUI
+ 	(getPathBounds): checked if path was null initially
+ 	(paint): no need to check for control icons
+ 	(paintLeaf): reseting of icon
+ 	(paintNonLeaf): resetting of icon
+ 	(paintControlIcons): cleaned up
+ 	(hasControlIcons): cleaned up
+ 	* javax/swing/tree/DefaultTreeCellRenderer
+ 	(getTreeCellRendererComponent): fixed to follow API	
+ 
+ 2005-07-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JSlider.java:
+ 	(JSlider(int)): updated API docs,
+ 	(JSlider(int, int, int)): likewise,
+ 	(JSlider(BoundedRangeModel)): removed code that handles a null 
+ 	argument, and updated API docs.
+ 
+ 2005-07-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JSlider.java: initialise snapToTicks to false.
+ 	
+ 2005-07-18  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Don't highlight background of a selected 
+ 	JCheckboxMenuItem.
+ 	(paintText): Don't highlight text of a selected JCheckBoxMenuItem.
+ 
+ 2005-07-18  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JPopupMenu.java:
+ 	(insert): Resize the container to its preferred size when an item is
+ 	inserted.
+ 	(remove): Resize the container to its preferred size when an item is
+ 	removed.
+ 
+ 2005-07-18  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(getMaximumSize): Added check for this menu not being a top level menu.
+ 	If that's the case, return the maximum size as if it were a regular
+ 	JMenuItem.
+ 
+ 2005-07-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/Makefile.gcj (%.stamp): Added -MP.
+ 
+ 2005-07-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/.cvsignore: Removed jni.h.
+ 
+ 2005-07-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/classpath/classpath_jawt.h: Updated copyright
+ 	header.
+ 
+ 2005-07-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/imageio/stream/ImageInputStream.java: added import to fix
+ 	minor API doc problems.
+ 
+ 2005-07-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paint): Only paint border if using MetalL&F
+ 	(mouseClicked): Check that control icons exist
+ 	(paintNonLeaf): Changed to paint icon depending on height
+ 	(hasControlIcons): Implemented to return true if control icons exist
+ 
+ 2005-07-18  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paint): Implemented painting of border around selected path
+ 	(mouseClicked): Fixed clicking of icon
+ 
+ 2005-07-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): changed Slider.thumbWidth.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(paintThumb): fixed thumb painting.
+ 
+ 2005-07-17  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/PortableServer/ThreadPolicyValue.java,
+         org/omg/PortableServer/IdAssignmentPolicy.java,
+         org/omg/PortableServer/IdUniquenessPolicyOperations.java,
+         org/omg/PortableServer/IdAssignmentPolicyOperations.java,
+         org/omg/PortableServer/IdUniquenessPolicy.java,
+         org/omg/PortableServer/ImplicitActivationPolicyOperations.java,
+         org/omg/PortableServer/LifespanPolicyOperations.java,
+         org/omg/PortableServer/LifespanPolicy.java,
+         org/omg/PortableServer/ImplicitActivationPolicy.java,
+         org/omg/PortableServer/ServantRetentionPolicy.java,
+         org/omg/PortableServer/RequestProcessingPolicy.java,
+         org/omg/PortableServer/ServantRetentionPolicyOperations.java,
+         org/omg/PortableServer/ThreadPolicyOperations.java,
+         org/omg/PortableServer/RequestProcessingPolicyOperations.java,
+         org/omg/PortableServer/ThreadPolicy.java: New files.
+ 
+ 2005-07-15  Lillian Angel  <langel@redhat.com>
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(mouseClicked): Implemented clicking on control icons.
+ 
+ 2005-07-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/classpath/classpath_jawt.h: New file.
+ 
+ 2005-07-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/libgcj.omit: Removed.
+ 
+ 2005-07-15  Lillian Angel  <langel@redhat.com>
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(mouseClicked): changed to use getPathBounds.
+ 	(getPathBounds): Implemented
+ 
+ 2005-07-15  Lillian Angel  <langel@redhat.com>
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(mouseClicked): check if user is clicking within the bounds of the cell.
+ 	(getCellLocation): Implemented to return the location of the cell.
+ 
+ 2005-07-15  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalComboBoxIcon.java: new file.
+ 
+ 2005-07-15  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/tree/TreePath.java: added API docs all over,
+ 	(TreePath(Object[])): throw IllegalArgumentException for null argument,
+ 	(TreePath(TreePath, Object)): throw NullPointerException for null Object,
+ 	(equals): test elements using equals(),
+ 	(writeObject): removed,
+ 	(readObject): removed,
+ 	(getPath): return a clone of the path,
+ 	(getPathComponent): throw IllegalArgumentException for invalid position,
+ 	(isDescendant): reimplemented.
+ 
+ 2005-07-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(ButtonAreaLayout): Made class static.
+ 	(ButtonAreaLayout.setSyncAllWidths): Removed revalidate(). Never
+ 	ever revalidate something within a LayoutManager!
+ 	(ButtonAreaLayout.setPadding): Likewise.
+ 	(ButtonAreaLayout.setCentersChildren): Likewise.
+ 	(ButtonAreaLayout.layoutContainer): Don't refer to enclosing
+ 	class's instance, this is not allowed in static inner classes.
+ 
+ 2005-07-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalCheckBoxIcon.java:
+ 	New class. An icon implementation for use in JCheckBoxes.
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	Renamed MetalButtonBorder to ButtonBorder.
+ 
+ 2005-07-15  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java:
+ 	(RootView.removeUpdate): Properly update the caret position after text
+ 	has been removed.
+ 
+ 2005-07-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Add 0.17 release date and new features.
+ 	* configure.ac: Set version to 0.17.
+ 
+ 2005-07-15  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	(init): Do not change field text if argument text is null.
+ 
+ 2005-07-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/logging/Logger.java (getCallerStackFrame): 
+ 	Make sure index < stackTrace.length and return null otherwise.
+ 	(log): Check for caller == null.
+ 
+ 2005-07-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(AbstractButton): Directly call init() and updateUI().
+ 	(AbstractButton(String, Icon)): Removed. This is not necessary
+ 	since we have init(String, Icon) for that purpose.
+ 	(getActionCommand): Reverted to previous behaviour: If
+ 	actionCommand is set, return this, otherwise return text, even
+ 	if text is null.
+ 	* javax/swing/JButton.java
+ 	(JButton(String, Icon)): Call super() and init(String, Icon)
+ 	instead of super(String, Icon).
+ 	* javax/swing/JMenuItem.java
+ 	(JMenuItem): Call super() instead of super(String, Icon).
+ 	(JMenuItem(Icon)): Call this(String, Icon) instead of
+ 	super(String, Icon).
+ 	(JMenuItem(String)): Call this(String, Icon) instead of
+ 	super(String, Icon).
+ 	(JMenuItem(Action)): Call super() instead of
+ 	super(String, Icon).
+ 	(JMenuItem(String, Icon)): Call super() and init(String, Icon)
+ 	instead of super(String, Icon).
+ 	(JMenuItem(String, int)): Call this(String, Icon) instead of
+ 	super(String, Icon).
+ 	* javax/swing/JToggleButton.java
+ 	(ToggleButtonModel.setPressed): Fire an ActionEvent if button
+ 	is released. According to my Mauve tests, it seems that this
+ 	is what the JDK does, so do we.
+ 	(ToggleButtonModel.setSelected): Removed.
+ 	(JToggleButton): Call super() and init(String, Icon) instead
+ 	of super(String, Icon).
+ 
+ 2005-07-15  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* javax/swing/tree/DefaultMutableTreeNode.java:
+ 	(removeFromParent): Remove child node from parent now.
+ 	(preorderEnumeration): Implemented.
+ 	(postorderEnumeration): Implemented.
+ 	(depthFirstEnumeration): Implemented.
+ 	(breadthFirstEnumeration): Implemented.
+ 	(nextLeaf): Added TODO doc.
+ 	(previousLeaf): Added TODO doc.
+ 
+ 2005-07-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/standard.omit: Only list gnu/javax/swing/plaf/gtk/.*java and
+ 	README explicitly, not the icons.
+ 	* examples/gnu/classpath/examples/swing/GNULookAndFeel.java
+ 	(getDefaults): Add Tree closed, leaf and open icons.
+ 
+ 2005-07-15  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* doc/vmintegration.texinfo:
+ 	Updated 'Classpath Hooks' section.
+ 
+ 2005-07-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* hacking.texinfo: @setchapternewpage off.
+ 	* vmintegration.texinfo: Likewise.
+ 	* www.gnu.org/docs/Makefile: texi2info --ifinfo --ifhtml.
+ 
+ 2005-07-14  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (choicePostItemEvent):
+ 	Rename to postChoiceItemEvent.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (realize): New method.
+ 	(setNativeEventMask): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkGenericPeer.java (printCurrentThread): New method.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java (realize): New method.
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Regenerate.
+ 	* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Likewise.
+ 	* native/jni/gtk-peer/gtkpeer.h: Move widget-specific macro,
+ 	variable and function declarations into the widget-specific file.
+ 	Add cp_gtk_ namespace prefix to external symbols.
+ 	(cp_gtk_graphics2d_init_jni): New function.
+ 	(cp_gtk_graphics_init_jni): Likewise.
+ 	(cp_gtk_button_init_jni): Likewise.
+ 	(cp_gtk_checkbox_init_jni): Likewise.
+ 	(cp_gtk_choice_init_jni): Likewise.
+ 	(cp_gtk_component_init_jni): Likewise.
+ 	(cp_gtk_list_init_jni): Likewise.
+ 	(cp_gtk_menuitem_init_jni): Likewise.
+ 	(cp_gtk_scrollbar_init_jni): Likewise.
+ 	(cp_gtk_textcomponent_init_jni): Likewise.
+ 	(cp_gtk_window_init_jni): Likewise.
+ 	(cp_gtk_component_connect_expose_signals): Likewise.
+ 	(cp_gtk_component_connect_focus_signals): Likewise.
+ 	(cp_gtk_component_connect_mouse_signals): Likewise.
+ 	(cp_gtk_component_connect_signals): Likewise.
+ 	(cp_gtk_textcomponent_connect_signals): Likewise.
+ 	(cp_gtk_print_current_thread): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Remove
+ 	file.  Move widget-specific functions into the widget-specific
+ 	files.  Break main event handler into multiple widget-specific
+ 	callbacks.
+ 	* native/jni/gtk-peer/Makefile.am (libgtkpeer_la_SOURCES): Remove
+ 	gnu_java_awt_peer_gtk_GtkEvents.c.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Add
+ 	cp_gtk_ namespace prefix to external symbols.  Add widget-specific
+ 	macros, variables and function declarations from
+ 	gnu_java_awt_peer_gtk_GtkEvents.c.  Add widget-specific callbacks
+ 	to replace main event handling loop.
+ 	* native/jni/classpath/native_state.c: Likewise.
+ 	* native/jni/classpath/native_state.h: Likewise.
+ 	* native/jni/gtk-peer/gdkfont.h: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gthread-jni.c: Likewise.
+ 	* native/jni/gtk-peer/gthread-jni.h: Likewise.
+ 
+ 2005-07-14 Lillian Angel <langel@redhat.com>
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paintControlIcons): Changed so root does not have control icon.
+ 
+ 2005-07-14 Lillian Angel <langel@redhat.com>
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(installUI): Expanded root initially
+ 	(paint): call function to paint controls
+ 	(paintRecursive): added to indentation when painting to increase space
+ 	(paintControlIcons): Implemented to recursively paint the control icons.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(getTreeCellRendererComponent): reset the font properly
+ 
+ 2005-07-14  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java:
+ 	Implemented VirtualMachine Command Set.
+ 
+ 2005-07-14  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(getActionCommand): If both the actionCommand and text fields
+ 	are null, then return "".
+ 
+ 2005-07-14  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/util/logging/Logger.java
+ 	(resetLogger): Remove all handlers from the handler list.
+ 
+ 	* java/util/logging/LogManager.java
+ 	(reset): Call resetLogger() too.
+ 	(readConfiguration): Call reset().
+ 
+ 2005-07-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/awt/Demo.java
+ 	(TestWindow.parent): Make package private.
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java
+ 	(proxyHostname, proxyPort, agent, keepAlive, maxConnections):
+ 	Likewise.
+ 	* java/text/SimpleDateFormat.java (field, size): Likewise.
+ 	* java/util/jar/JarFile.java (readSignatures): Likewise.
+ 	* java/util/logging/FileHandler.java (written): Likewise.
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java: Make shared
+ 	fields package private.
+ 	(closeDialog): Make package private.
+ 	(filterEntries): Likewise.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java
+ 	(mouseInputListener): Likewise.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getNextVisibleNode, getPreviousVisibleNode, selectPath): Likewise.
+ 	* javax/swing/text/JTextComponent.java (caret, editable): Likewise.
+ 	
+ 2005-07-14  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* javax/swing/AbstractButton.java: Minor doc fixes.
+ 	(getActionCommand): Access field directly.
+ 	(setActionCommand): Dito.
+ 	(fireActionPerformed): Copy ActionEvent instance instead
+ 	of reusing it.
+ 
+ 2005-07-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/BoundedRangeModel.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/ButtonModel.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/CellEditor.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/ComboBoxEditor.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/ComboBoxModel.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/Icon.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/JComboBox.java
+ 	(KeySelectionManager): Added/Fixed interface API documentation.
+ 	* javax/swing/ListCellRenderer.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/ListModel.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/ListSelectionModel.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/MenuElement.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/MutableComboBoxModel.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/Renderer.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/RootPaneContainer.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/ScrollPaneConstants.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/Scrollable.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/SingleSelectionModel.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/SpinnerModel.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/SwingConstants.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/UIDefaults.java
+ 	(ActiveValue): interface API documentation.
+ 	(LazyValue): interface API documentation.
+ 	* javax/swing/WindowConstants.java:
+ 	Added/Fixed interface API documentation.
+ 	* javax/swing/package.html: Fixed package description to be more
+ 	a little bit more concise.
+ 
+ 2005-07-13 Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Changed font to
+ 	match jdk.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java: took out unneeded
+ 	import statement
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java: Changed 
+ 	defaults to match jdk.
+ 
+ 2005-07-13 Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Changed rowHeight
+ 	to the right height. This should be fixed later to something more
+ 	reasonable, as opposed to a 'magic' number.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paintLeaf): added in code to paint icons properly
+ 	(paintNonLeaf): same as above
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java: Changed default
+ 	icons to MetalIconFactory icons
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(getTreeCellRendererComponent): Changed to paint icons separately from
+ 	Cell.
+ 
+ 2005-07-13  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(KeyHandler.keyPressed): Implemented actions for the following key
+ 	presses: "ctrl \\", "END", "shift END", "HOME, "shift HOME", "ctrl /", 
+ 	"ctrl A", "ctrl SPACE", "KP_UP", "KP_DOWN", "shift KP_UP",
+ 	"shift KP_DOWN".
+ 
+ 2005-07-13  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/DefaultButtonModel.java:
+ 	(changeState): Removed this helper method.
+ 	(setArmed): Replaced call to changeState by code specific to setArmed.
+ 	(setEnabled): Likewise, for setEnabled.
+ 	(setPressed): Likewise, for setPressed.
+ 	(setRollover): Likewise, for setRollover.
+ 	(setSelected): Likewise, for setSelected.
+ 	* javax/swing/JToggleButton.java:
+ 	(ToggleButtonModel.setPressed): Replaced call to super.setPressed with
+ 	Toggle-specific code.
+ 	(ToggleButtonModel.setSelected): New method.  Fire an ActionEvent in
+ 	addition to calling super.setSelected.
+ 
+ 2005-07-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/accessibility/AccessibleComponent.java: minor API doc fixes,
+ 	* javax/accessibility/AccessibleRelation.java: likewise,
+ 	* javax/accessibility/AccessibleRelationSet.java: likewise,
+ 	* javax/accessibility/AccessibleResourceBundle.java: likewise,
+ 	* javax/accessibility/AccessibleRole.java: likewise,
+ 	* javax/accessibility/AccessibleState.java: likewise,
+ 	* javax/accessibility/AccessibleStateSet.java: likewise,
+ 	* javax/accessibility/AccessibleText.java: likewise.
+ 
+ 2005-07-13  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* java/awt/AWTEvent.java:
+ 	(toString): Generalized string generation.
+ 
+ 2005-07-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/LookAndFeel.java: added API docs all over,
+ 	* javax/swing/plaf/metal/DefaultMetalTheme.java: likewise,
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java: likewise,
+ 	* javax/swing/plaf/metal/MetalTheme.java: likewise.
+ 
+ 2005-07-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/table/TableColumn.java: updated API docs,
+ 	* javax/swing/table/TableColumnModel.java: likewise.
+ 
+ 2005-07-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/util/zip/Inflater.java: minor API doc fixes.
+ 
+ 2005-07-13  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/tree/DefaultMutableTreeNode.java: minor API doc fixes,
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java
+ 	(addSelectionPath): modified parameter name to match doc comment,
+ 	(addSelectionPaths): likewise,
+ 	(removeSelectionPath): likewise,
+ 	(removeSelectionPaths): likewise,
+ 	(isPathSelected): likewise,
+ 	plus other minor API doc fixes all over.
+ 	* javax/swing/tree/MutableTreeNode.java: minor API doc fixes.
+ 
+ 2005-07-13  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* javax/swing/AbstractButton.java: Minimal documentation fixes.
+ 	(getActionCommand): Returns button's label when
+ 	actionCommand is null.
+ 	* javax/swing/JButton.java,
+ 	javax/swing/JToggleButton.java: Removed explicit call to
+ 	setActionCommand in constructors.
+ 
+ 2005-07-13  Robert Schuster  <robertschuster@fsfe.org>
+ 
+ 	* javax/swing/JToggleButton.java:
+ 	(paramString): Returns value of same method in superclass now.
+ 	* javax/swing/JRadioButton.java:
+ 	(paramString): Dito.
+ 	* javax/swing/JButton.java:
+ 	(paramString): Returns value of same method in superclass now,
+ 	more verbose information added.
+ 	* javax/swing/JCheckBox.java:
+ 	(paramString): Dito.
+ 
+ 2005-07-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/FieldCommandSet.java:
+ 	Implemented the Field CommandSet.
+ 	* gnu/classpath/jdwp/processor/InterFaceTypeCommandSet.java:
+ 	Implemented the InterfaceType CommandSet.
+ 
+ 2005-07-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Replaced incorrect hilighting criteria.
+ 	(paintText): Likewise.
+ 
+ 2005-07-12 Lillian Angel <langel@redhat.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkTree): no need to make root visible, it is by default
+ 	(mkTreeWorld): no need to make root visible, it is by default	 
+ 
+ 2005-07-12 Lillian Angel <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(paintLeaf): fixed size of selection background to depend on 
+ 	if icon exists
+ 	(paintNonLeaf): fixed size of selection background to depend on
+ 	if icon exists
+ 
+ 2005-07-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/DefaultButtonModel.java:
+ 	(changeState): If the button is a JToggleButton fire action events
+ 	when it changes between (selected/unselected) not when it changes
+ 	from pressed to unpressed.  Fire action events after firing
+ 	ItemStateChanged events.
+ 
+ 2005-07-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/PacketProcessor.java (run): Send
+ 	shutdown to Jdwp instead of JdwpConnection.
+ 
+ 2005-07-12 Lillian Angel <langel@redhat.com>
+ 	* javax/swing/JTree.java:
+ 	Formatting copyright
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java:
+ 	Formatting copyright
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java:
+ 	Formatting copyright
+ 
+ 2005-07-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalTreeUI.java
+ 	(createUI): Return a different instance of MetalTreeUI for each
+ 	JTree. The TreeUI is stateful, so a shared instance would not
+ 	work.
+ 
+ 2005-07-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	I accidentally introduced revalidate calls for repaint calls.
+ 	Reverted.
+ 
+ 2005-07-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	Fixed formatting of the copyright notice.
+ 
+ 2005-07-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(installDefaults): Create border based on defaults in current
+ 	LookAndFeel.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Included border for InternalFrame as
+ 	LazyValue.
+ 
+ 2005-07-12 Lillian Angel <langel@redhat.com>
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Took out icon defaults.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(installUI): set root to visible
+ 	(getCellBounds): took out addition to width since there may not be
+ 	an icon.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java:
+ 	Added in icon defaults
+ 	* lib/Makefile.am:
+ 	Fixed so icons are installed for the JTree
+ 
+ 2005-07-12  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java:
+ 	New file.
+ 
+ 2005-07-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	Removed ad-hoc icons. Replaced them by
+ 	BasicIconFactory.createEmptyFrameIcon just like in the JDK.
+ 	(PropertyChangeHandler.propertyChange): Handle change events
+ 	for closable, iconifiable and maximizable here.
+ 	(createButtons): Recognize if the JInternalFrame is closable,
+ 	iconifiable or maximizable.
+ 
+ 2005-07-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Corrected color values for BasicL&F buttons.
+ 
+ 2005-07-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JMenu.java:
+ 	(isSelected): Call super.isSelected() instead of super.isArmed().
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Replaced incorrect selection criteria with call to
+ 	isSelected().
+ 	(paintText): Likewise.
+ 
+ 2005-07-12  Lillian Angel  <langel@redhat.com>
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkTreeWorld): Implemented
+ 	(mkTabbedPane): added in tab for TreeWorld
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	Changed default color of text non selection background.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	Removed irrelevant comment
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(getTreeCellRendererComponent): changed to use background's non 
+ 	selection default color instead
+ 
+ 2005-07-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(TitlePaneLayout.layoutContainer): Do not change any state of
+ 	the components here (visible/enableActions). This is not the purpose of
+ 	a layout manager and can lead to loops. Also correct the layout
+ 	to be closer to the layout of the reference implementation.
+ 	(TitlePaneLayout.preferredLayoutSize): Return (22, 18)
+ 	here. That is what the JDK returns for the title bar.
+ 	(PaneButton): Don't set the border to null.
+ 	(createButtons): The buttons are opaque.
+ 	(createButtonIcons): Don't create icons in the Basic L&F.
+ 
+ 2005-07-12  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JApplet.java,
+ 	* javax/swing/JDialog.java,
+ 	* javax/swing/JFrame.java,
+ 	* javax/swing/JWindow.java:
+ 	(addImpl): Add to the frame itself if we are in the init
+ 	stage, otherwise add to the contentPane.
+ 
+ 2005-07-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/MediaTracker.java (checkAll): Set and check status of
+ 	MediaEntry with checkImage() if prepareImage() returns false.
+ 	(statusAll): Likewise.
+ 	(checkID): Likewise.
+ 	(statusID): Likewise.
+ 
+ 2005-07-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(CaretBlinkTimer.actionPerformed): Check that caret != null.
+ 	(CaretBlinkTimer.update): Likewise.
+ 
+ 2005-07-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Simon Kitching <skitching@apache.org>
+ 	* java/lang/String.java (toCharArray): Return value.clone() when
+ 	count == value.length.
+ 
+ 2005-07-12  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/html/parser/ParserDelegator.java (gnuParser.getDTD):
+ 	Added comment about 'super'.
+ 
+ 2005-07-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
+ 	Replace occurrences of malloc with g_malloc and free with g_free.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (connectSignals): New method.
+ 	* include/gnu_java_awt_peer_gtk_GtkChoicePeer.h: Regenerate.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Move
+ 	gdk_threads_enter calls to start of method bodies.  Move
+ 	gdk_threads_leave calls to end of method definitions bodies.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Likewise.
+ 
+ 2005-07-12  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/html/parser/ParserDelegator.java (gnuParser.getDTD):
+ 	Added explicit field reference.
+ 
+ 2005-07-11  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/lang/IllegalAccessException.java: fixed minor API doc errors,
+ 	* java/lang/String.java: likewise.
+ 	
+ 2005-07-11  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/io/DataOutput.java: fixed minor API doc errors,
+ 	* java/io/LineNumberInputStream.java: likewise.
+ 
+ 2005-07-11  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java
+ 	(HorizontalSliderThumbIcon): new inner class,
+ 	(VerticalSliderThumbIcon): new inner class,
+ 	(getHorizontalSliderThumbIcon): implemented,
+ 	(getVerticalSliderThumbIcon): implemented.
+ 
+ 2005-07-11  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImage.java:
+ 	(setImage): Set error flag on bad width, height or pixels.
+ 	(checkImage): Return error flag.
+ 
+ 2005-07-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JInternalFrame.java
+ 	(addImpl): Add to the frame itself if we are in the init
+ 	stage, otherwise add to the contentPane.
+ 
+ 2005-07-11  Lillian Angel  <langel@redhat.com>
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkTree): fixed so the JTree appears properly.
+ 
+ 2005-07-11  Lillian Angel  <langel@redhat.com>
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	Changed the default row height for the tree.
+ 
+ 2005-07-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkDesktopWorld): Made InternalFrames visible.
+ 
+ 2005-07-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/JFileChooser.java (getSelectedFiles): Return an one
+ 	element array containing selectedFile if selectedFiles is null.
+ 
+ 2005-07-11  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getPreviousVisibleNode): Implemented
+ 	(selectPath): helper method, implemented.
+ 	(keyPressed): handles up/down/left/right keys
+ 	(mouseClicked): made more efficent and implemented double 
+ 	clicking for folders.
+ 	* javax/swing/JTree.java
+ 	(clearSelection): Lead selection path is set to null when 
+ 	nothing is currently selected.
+ 
+ 2005-07-11  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(MouseHandler.popupVisible): new method.
+ 	(MouseHandler.mouseEntered): Removed check for menu being armed to
+ 	comply with reference implementation.  Calls popupVisible to check
+ 	for menus with their popup menu visible.
+ 
+ 2005-07-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/DatagramSocket.java (getImpl): Record cause of Exception.
+ 
+ 2005-07-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c:
+ 	Whenever an ExceptionOccurred just return to throw it, don't mask.
+ 	* native/jni/java-net/javanet.c (_javanet_get_netaddr): Check for
+ 	NULL addr.
+ 	(_javanet_create): Explicitly close socket on failure.
+ 	(_javanet_close): Save error message and retry closing when
+ 	interrupted before throwing exception.
+ 	(_javanet_connect): Keep retrying connect after system call
+ 	interrupted. First construct exception before cleanup.
+ 	(_javanet_bind): Save error string for exception.
+ 	(_javanet_accept): Explicitly close socket on failure.
+ 	(_javanet_recvfrom): Throw SocketTimeoutException when timed out.
+ 	(_javanet_sendto): Send all data even when interrupted.
+ 	(_javanet_set_option): Don't ignore error when setting SO_TIMEOUT.
+ 	* native/target/generic/target_generic_network.h
+ 	(TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT): Use timeval for
+ 	setsockopt.
+ 	(TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_TIMEOUT): Likewise for
+ 	getsockopt.
+ 
+ 2005-07-11  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(MouseInputHandler.mouseEntered): Added check: if a different menu in
+ 	the menubar was selected, we don't select this one unless the old one
+ 	had its popup menu showing.  This complies with the reference
+ 	implementation.
+ 
+ 2005-07-11  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JMenu.java:
+ 	(setSelectedHelper): new method.
+ 	(setSelected): Code moved to setSelectedHelper. Calls
+ 	setSelectedHelper(selected,true,false) which doesn't expand the popup
+ 	menu and works whether the menu is enabled or not.
+ 	(menuSelectionChanged): Changed call to setSelected(changed) to 
+ 	setSelectedHelper(changed,isEnabled(),true) which does expand the
+ 	popup menu, but only if the menu is enabled.
+ 
+ 2005-07-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (force): New native
+ 	method.
+ 	(force(boolean)): Call new native force method.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_read__):
+ 	Test for result != TARGET_NATIVE_OK as stop condition.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_read___3BII):
+ 	Check overflow and underflow. Only increase bytes_read when
+ 	we didn't get an error.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_write__I):
+ 	Return when we encounter an error.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_write___3BII):
+ 	Only increase bytes_written when we didn't get an error.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_force): New function.
+ 	* include/gnu_java_nio_channels_FileChannelImpl.h: Regenerated.
+ 
+ 2005-07-11  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getCellBounds): added width of icon, so selection fits over 
+ 	the cell properly.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	added in icons for the tree.
+ 	* lib/Makefile.am
+ 	added in handling for the icons being used.
+ 
+ 2005-07-10  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JInternalFrame.java
+ 	(pack): Set the JInternalFrame's own size here instead of
+ 	layouting its children (this is triggered by setSize anyway).
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(installDefaults): Set the correct border for InternalFrames.
+ 	Set InternalFrames to invisible by default.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Set correct color values for
+ 	InternalFrames.
+ 
+ 2005-07-10  Casey Marshall  <csm@gnu.org>
+ 
+ 	* configure.ac (AC_CHECK_HEADERS): add 'fcntl.h'.
+ 	(AC_CHECK_FUNCS): add 'fcntl'.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannel.c:
+ 	Include <fcntl.h> if HAVE_FCNTL_H.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_lock,
+ 	Java_gnu_java_nio_channels_FileChannelImpl_unlock): implemented
+ 	if HAVE_FCNTL.
+ 
+ 2005-07-10  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/classpath/debug/Component.java: new file.
+ 	* gnu/classpath/debug/PreciseFilter.java: new file.
+ 	* gnu/classpath/debug/SystemLogger.java: new file.
+ 	* gnu/java/security/x509/X509Certificate.java
+ 	(DEBUG, debug, debug): removed.
+ 	(logger): new constant; use 'logger' with 'Component.X509'
+ 	for debug messages throughout.
+ 	(parse): always read the next DER value after reading the
+ 	version-specific values.
+ 
+ 2005-07-10  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/io/ObjectOutputStream.java: Updated copyright 
+ 	information for 2005.
+ 
+ 2005-07-10  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/io/ObjectOutputStream.java
+ 	(getObjectField): Clarified error checking code, and
+ 	improved exception messages.
+ 
+ 2005-07-10  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/io/ObjectOutputStream.java (DEBUG): New constant.
+ 	(ObjectOutputStream, writeObject) Use internal debug switch.
+ 
+ 2005-07-10  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/io/ObjectInputStream.java (DEBUG): 
+ 	New private static field.
+ 	(ObjectInputStream, resolveClass) Use DEBUG.
+ 
+ 2005-07-10  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/awt/GridBagLayout.java:
+ 	(addLayoutComponent) Improved error message.
+ 
+ 2005-07-10  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* gnu/java/text/FormatCharacterIterator.java:
+ 	Removed unnecessary import of gnu.classpath.Configuration.
+ 	(DEBUG) New private static field.
+ 	(debug, dumpTable) Use DEBUG.
+ 
+ 2005-07-09  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/transform/AbstractNumberNode.java,
+ 	gnu/xml/transform/ApplyImportsNode.java,
+ 	gnu/xml/transform/ApplyTemplatesNode.java,
+ 	gnu/xml/transform/AttributeNode.java,
+ 	gnu/xml/transform/Bindings.java,
+ 	gnu/xml/transform/CallTemplateNode.java,
+ 	gnu/xml/transform/CopyOfNode.java,
+ 	gnu/xml/transform/CurrentFunction.java,
+ 	gnu/xml/transform/DocumentFunction.java,
+ 	gnu/xml/transform/ElementAvailableFunction.java,
+ 	gnu/xml/transform/ElementNode.java,
+ 	gnu/xml/transform/ForEachNode.java,
+ 	gnu/xml/transform/FormatNumberFunction.java,
+ 	gnu/xml/transform/FunctionAvailableFunction.java,
+ 	gnu/xml/transform/GenerateIdFunction.java,
+ 	gnu/xml/transform/IfNode.java,
+ 	gnu/xml/transform/KeyFunction.java,
+ 	gnu/xml/transform/ParameterNode.java,
+ 	gnu/xml/transform/SortKey.java,
+ 	gnu/xml/transform/StreamSerializer.java,
+ 	gnu/xml/transform/Stylesheet.java,
+ 	gnu/xml/transform/SystemPropertyFunction.java,
+ 	gnu/xml/transform/TemplateNode.java,
+ 	gnu/xml/transform/TransformerImpl.java,
+ 	gnu/xml/transform/UnparsedEntityUriFunction.java,
+ 	gnu/xml/transform/ValueOfNode.java,
+ 	gnu/xml/transform/WhenNode.java,
+ 	gnu/xml/transform/WithParam.java,
+ 	gnu/xml/xpath/AndExpr.java,
+ 	gnu/xml/xpath/ArithmeticExpr.java,
+ 	gnu/xml/xpath/BooleanFunction.java,
+ 	gnu/xml/xpath/CeilingFunction.java,
+ 	gnu/xml/xpath/ConcatFunction.java,
+ 	gnu/xml/xpath/Constant.java,
+ 	gnu/xml/xpath/ContainsFunction.java,
+ 	gnu/xml/xpath/CountFunction.java,
+ 	gnu/xml/xpath/EqualityExpr.java,
+ 	gnu/xml/xpath/Expr.java,
+ 	gnu/xml/xpath/FalseFunction.java,
+ 	gnu/xml/xpath/FloorFunction.java,
+ 	gnu/xml/xpath/FunctionCall.java,
+ 	gnu/xml/xpath/IdFunction.java,
+ 	gnu/xml/xpath/LangFunction.java,
+ 	gnu/xml/xpath/LastFunction.java,
+ 	gnu/xml/xpath/LocalNameFunction.java,
+ 	gnu/xml/xpath/NameFunction.java,
+ 	gnu/xml/xpath/NameTest.java,
+ 	gnu/xml/xpath/NamespaceTest.java,
+ 	gnu/xml/xpath/NamespaceUriFunction.java,
+ 	gnu/xml/xpath/NegativeExpr.java,
+ 	gnu/xml/xpath/NodeTypeTest.java,
+ 	gnu/xml/xpath/NormalizeSpaceFunction.java,
+ 	gnu/xml/xpath/NotFunction.java,
+ 	gnu/xml/xpath/NumberFunction.java,
+ 	gnu/xml/xpath/OrExpr.java,
+ 	gnu/xml/xpath/ParenthesizedExpr.java,
+ 	gnu/xml/xpath/Pattern.java,
+ 	gnu/xml/xpath/PositionFunction.java,
+ 	gnu/xml/xpath/Predicate.java,
+ 	gnu/xml/xpath/RelationalExpr.java,
+ 	gnu/xml/xpath/Root.java,
+ 	gnu/xml/xpath/RoundFunction.java,
+ 	gnu/xml/xpath/Selector.java,
+ 	gnu/xml/xpath/StartsWithFunction.java,
+ 	gnu/xml/xpath/Steps.java,
+ 	gnu/xml/xpath/StringFunction.java,
+ 	gnu/xml/xpath/StringLengthFunction.java,
+ 	gnu/xml/xpath/SubstringAfterFunction.java,
+ 	gnu/xml/xpath/SubstringBeforeFunction.java,
+ 	gnu/xml/xpath/SubstringFunction.java,
+ 	gnu/xml/xpath/SumFunction.java,
+ 	gnu/xml/xpath/Test.java,
+ 	gnu/xml/xpath/TranslateFunction.java,
+ 	gnu/xml/xpath/TrueFunction.java,
+ 	gnu/xml/xpath/UnionExpr.java,
+ 	gnu/xml/xpath/VariableReference.java,
+ 	gnu/xml/xpath/XPathParser.java,
+ 	gnu/xml/xpath/XPathParser.y,
+ 	javax/xml/namespace/QName.java: Corrections to handling of XSL
+ 	variables and minor conformance updates.
+ 
+ 2005-07-09  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* java/net/URLClassLoader.java: disallow directories as resources
+ 
+ 2005-07-09  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/util/logging/FileHandler.java
+ 	(written): new field.
+ 	(logFiles): new field.
+ 	(<init>): initialize the OutputStream last.
+ 	(createFileStream): made non-static; append '.%g' to 'pattern'
+ 	if not included; open existing files if 'append' is set; return
+ 	byte-counting stream; use 'has', not 'String.indexOf'.
+ 	(publish): rotate the file if we go beyond the byte limit; flush
+ 	the stream after publishing each record.
+ 	(rotate): new method.
+ 	(has): new method.
+ 	(ostr): new member class.
+ 
+ 2005-07-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/split-for-gcj.sh: Make list file depend on source file.
+ 	* lib/Makefile.gcj (%.stamp): Set target name to stamp file.
+ 
+ 2005-07-08  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* doc/hacking.texinfo: Fixed broken links to GNU Coding
+ 	Standards to point to http://www.gnu.org/prep/standards/
+ 
+ 2005-07-08  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java:
+ 	(ApproveSelectionAction.actionPerformed): Allow directories to be
+ 	selected unless selection mode is FILES_ONLY.
+ 
+ 2005-07-08  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java: minor API doc fixes,
+ 	* javax/swing/plaf/basic/BasicComboBoxEditor.java: likewise,
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java: likewise,
+ 	* javax/swing/plaf/basic/BasicLabelUI.java: likewise,
+ 	* javax/swing/plaf/basic/BasicListUI.java: likewise,
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: likewise,
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java: likewise,
+ 	* javax/swing/plaf/basic/BasicMenuUI.java: likewise,
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java: likewise,
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java: likewise,
+ 	* javax/swing/plaf/basic/BasicSpinnerUI.java: likewise,
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java: likewise,
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java: likewise.
+ 	
+ 2005-07-08  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/filechooser/FileSystemView.java:
+ 	(getFiles): Added check for non-existent directory, in which case
+ 	default to home directory.
+ 
+ 2005-07-08  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalIconFactory.java: new file, implements 
+ 	core tree icons.
+ 	
+ 2005-07-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(getDefaults): Call theme.addCustomEntriesToTable() only once
+ 	during initialization of the defaults table.
+ 
+ 2005-07-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/Makefile.am (FOUND_GCJ): Add top_builddir to compile_classpath.
+ 	(EXTRA_DIST): Add Makefile.gcj and split-for-gcj.sh
+ 	(clean-local): Remove lists and Makefile.deps.
+ 
+ 2005-07-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	(installDefaults): Initialize cell borders.
+ 	(paint): Set correct cell border before painting.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefault): Corrected color value for the
+ 	Table.focusCellHighlightBorder UIResource.
+ 
+ 2005-07-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectStreamClass.java
+ 	(findAccessibleMethod): Added code to make method accessible.
+ 
+ 2005-07-07  Robert Schuster <robertschuster@fsfe.org>
+ 
+ 	* javax/swing/JMenu.java
+ 	(setSelected): Added isEnabled() to expression.
+ 
+ 2005-07-07  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/util/Signature.java
+ 	(computeFieldSignature): New Method.
+ 
+ 2005-07-07  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(clearSelection): Added clearing of columns as well as rows.
+ 
+ 2005-07-07  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(MouseInputHandler.mousePressed): Added check for control being pressed
+ 	and mouse clicked on already selected cell.  In this case, deselect
+ 	the cell.
+ 
+ 2005-07-07  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java: New
+ 	file.
+ 
+ 2005-07-07  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java:
+ 	(addSelectionInterval): Added check for leadSelectionIndex being
+ 	unselected (ie - after a remove operation).
+ 	
+ 2005-07-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getRowCount): Implemented
+ 	(getPreferredSize): Implemented
+ 	(getMinimumSize): Implemented
+ 	(getMaximumSize): Implemented
+ 	(getCellBounds): checked if parameter is null
+ 	(paintRecursive): added in a variable to keep track of the 
+ 	length of vertical line to be drawn. Now paints tree nicely.
+ 
+ 2005-07-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	Formatted code so else's are on new lines
+ 
+ 2005-07-07  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	Formatted code to get rid of TABs        
+ 	(getPathForRow): took out redundant code.
+ 	(getNextVisibleNode): took out redundant code.
+ 
+ 2005-07-07  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(DocumentHandler.insertUpdate): Update caret position when document
+ 	changes.
+ 	(DocumentHandler.removeUpdate): Update caret position when document
+ 	changes.
+ 
+ 2005-07-07  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/java/awt/FocusManager.java: New class. Provides a concrete
+ 	implementation of javax.swing.FocusManager so that we can support
+ 	the old-style FocusManager in Swing and AWT.
+ 	* gnu/classpath/SystemProperties.java: Add new system property
+ 	gnu.java.awt.FocusManager that sets the class that should be used
+ 	as the default FocusManager in AWT and Swing.
+ 	* java/awt/KeyboardFocusManager.java
+ 	(setCurrentKeyboardFocusManager): Use createFocusManager instead
+ 	of creating the instance directly.
+ 	(createFocusManager): New method. Instantiate a KeyboardFocusManager
+ 	that is set by the system property gnu.java.awt.FocusManager.
+ 	* javax/swing.FocusManager.java
+ 	(constructor): Call super() here.
+ 	(getCurrentManager): Return the current AWT KeyboardFocusManager
+ 	here.
+ 	(setCurrentManager): Set the current AWT KeyboardFocusManager
+ 	here.
+ 	(processKeyEvent): Removed method. This is no longer in the
+ 	API.
+ 	(focusNextComponent): Removed method. This is no longer in the
+ 	API.
+ 	(focusPreviousComponent): Removed method. This is no longer in the
+ 	API.
+ 
+ 2005-07-07  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JProgressBar.java
+ 	(JProgressBar(int, int, int)): fix order of parameters,
+ 	(JProgressBar()): reorder arguments in call to other constructor,
+ 	(JProgressBar(int): likewise,
+ 	(JProgressBar(int, int): likewise.
+ 	
+ 2005-07-07  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(MouseInputHandler.mouseClicked): Access static TreeSelectionModel
+ 	fields via the class and not via an instance.
+ 
+ 2005-07-07  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Reformatted source file to better match our coding standards.
+ 
+ 2005-07-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/Makefile.gcj: New file.
+ 	* lib/Makefile.am (JAVAC): Changed for new gcj build approach.
+ 	* lib/gen-classlist.sh.in: Don't split list for gcj.
+ 	* lib/split-for-gcj.sh: New file.
+ 
+ 2005-07-06  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/basic/BasicBorders.java: fixed API docs all over.
+ 	
+ 2005-07-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPConnection.java,
+ 	gnu/java/net/protocol/http/HTTPURLConnection.java:
+ 	Fix bug with multiple threads and persistent connections.
+ 
+ 2005-07-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/transform/StreamSerializer.java,
+ 	gnu/xml/xpath/EqualityExpr.java: XSLT conformance fixes.
+ 
+ 2005-07-06  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getPathForRow): took out redundant code.
+ 
+ 2005-07-06  Lillian Angel  <langel@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getNextVisibleNode): Implemented
+ 	(getPathForRow): Fixed so the next node retrieved is visible.
+ 
+ 2005-07-06  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	Initialized the Hashtable.
+ 	(addSelectionPath): removed redundant code.
+ 	(doExpandParents): added in line so that state is 
+ 	changed for current path. Changed while loop to if 
+ 	statement, an infinite loop was occurring.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(getPathForRow): Implemented to work with visibility.
+ 	(isLeaf): Implemented
+ 	(mouseClicked): add in check for expand/collapse. 
+ 	Selection for DISCONTIGUOUS tree selection is 
+ 	implemented.
+ 	(treeExpanded): called repaint, so the tree updates 
+ 	visually when something is expanded.
+ 	(treeCollapse): Similar to treeExpanded.
+ 	(paintLeaf): changed to paint leaf only when visible.
+ 	(paintNonLeaf): paints only when visible.
+ 	(paintRecursive): lines for tree are only painted when 
+ 	needed. checked for visibility of current object and 
+ 	parent.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java
+ 	(getTreeCellRendererComponent): setting icons when 
+ 	expanded.
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java
+ 	(clearSelection): set leadPath to null because selection
+ 	should be completely reset.
+ 
+ 2005-07-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(setContentAreaFilled): Set the opaque property here.
+ 
+ 2005-07-06  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/AWTKeyStroke.java: fixed API doc links,
+ 	* java/awt/BufferCapabilities.java: likewise,
+ 	* java/awt/ColorPaintContext.java: likewise,
+ 	* java/awt/Component.java: likewise,
+ 	* java/awt/Container.java: likewise,
+ 	* java/awt/EventQueue.java: likewise,
+ 	* java/awt/GraphicsDevice.java: likewise,
+ 	* java/awt/Image.java: likewise,
+ 	* java/awt/KeyboardFocusManager.java: likewise,
+ 	* java/awt/MediaTracker.java: likewise,
+ 	* java/awt/PrintJob.java: likewise,
+ 	* java/awt/Robot.java: likewise.
+ 	
+ 2005-07-06  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(setAutoCreateColumnsFromModel): when the flag changes from false to
+ 	true, call createDefaultColumnsFromModel().
+ 	
+ 2005-07-05  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JTable.java 
+ 	(getColumnName): return name from column in data model. 
+ 	
+ 2005-07-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent): Check
+ 	parent and target before casting target to Window.
+ 
+ 2005-07-05  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/StringReferenceCommandSet.java:
+ 	New file.
+ 
+ 2005-07-05  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/AbstractAction.java: updated API docs,
+ 	* javax/swing/Action.java: likewise.
+ 	
+ 2005-07-05  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/applet/Applet.java: added import to fix API doc link.
+ 
+ 2005-07-05  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/StyleContext.java
+ 	(defaultStyle): New field.
+ 	(constructor): Add defaultStyle to the styleTable.
+ 	(DEFAULT_STYLE, getStyle, getStyleNames): Documented. 
+ 
+ 2005-07-05  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(addColumn): retrieve correct column name,
+ 	(convertColumnIndexToModel): remove check for > columnCount and let
+ 	exception happen,
+ 	(getColumnName): retrieve name from TableColumn,
+ 	(isCellEditable): implemented,
+ 	(createDefaultColumnsFromModel): implemented.
+ 	* javax/swing/table/DefaultTableColumnModel.java:
+ 	(addColumn): throw exception for null argument, set correct column 
+ 	index in TableColumnModelEvent,
+ 	(removeColumn): use correct column index,
+ 	(moveColumn): move the column, don't swap it. Also added argument
+ 	checks,
+ 	(getColumnIndex): reimplemented.
+ 	
+ 2005-07-05  Sven de Marothy  <sven@physto.se>
+ 
+ 	* javax/swing/JLabel.java:
+ 	(JLabel): Revert previous change for JLabel(Icon) constructor.
+ 
+ 2005-07-05  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JScrollPane.java:
+ 	Added API documentation for class and constructors.
+ 
+ 2005-07-05  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/util/BitSet.java: fixed minor problems in API docs,
+ 	* java/util/Calendar.java: likewise,
+ 	* java/util/Collections.java: likewise,
+ 	* java/util/Date.java: likewise,
+ 	* java/util/Hashtable.java: likewise,
+ 	* java/util/LinkedList.java: likewise,
+ 	* java/util/Properties.java: likewise,
+ 	* java/util/PropertyResourceBundle.java: likewise,
+ 	* java/util/ResourceBundle.java: likewise,
+ 	* java/util/SimpleTimeZone.java: likewise,
+ 	* java/util/TreeMap.java: likewise.
+ 	
+ 2005-07-05  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/JTextComponent.java (read, write): New methods. 
+ 
+ 2005-07-05  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/JTable.java: fixed API doc links all over.
+ 
+ 2005-07-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/Makefile.am (GTKPEER_H_FILES): Removed GtkTextComponentPeer.
+ 	* include/gnu_java_awt_peer_gtk_GtkTextComponentPeer.h: Removed.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(classpath_gtk_component_connect_nonfocus_signals): Mark argument
+ 	unused.
+ 	(classpath_gtk_component_connect_signals): Likewise.
+ 
+ 2005-07-04  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (postTextEvent): New
+ 	method.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Add
+ 	TextComponentPeer method declarations.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java: Remove file.
+ 	* include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h: Regenerate.
+ 	* include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: Likewise.
+ 	* native/jni/gtk-peer/Makefile.am (libgtkpeer_la_SOURCES): Remove
+ 	gnu_java_awt_peer_gtk_GtkTextComponentPeer.c.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(classpath_gtk_component_connect_nonfocus_signals): New function.
+ 	(classpath_gtk_component_connect_signals): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c: Add
+ 	method implementations from
+ 	gnu_java_awt_peer_gtk_GtkTextComponentPeer.c.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
+ 	Remove file.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(gtkInit): Get postTextEventID from GtkComponentPeer, not
+ 	GtkTextComponentPeer.
+ 	* native/jni/gtk-peer/gtkpeer.h (classpath_gtk_textcomponent_init_jni): Declare.
+ 	(classpath_gtk_component_connect_signals): Likewise.
+ 	(classpath_gtk_component_connect_nonfocus_signals): Likewise.
+ 	(classpath_gtk_textcomponent_connect_signals): Likewise.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c:
+ 	Rename gnu_java_awt_peer_gtk_GtkScrollbarPeer.c.
+ 	* native/jni/gtk-peer/Makefile.am (libgtkpeer_la_SOURCES): Rename
+ 	gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	gnu_java_awt_peer_gtk_GtkScrollbarPeer.c.
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java (createEmbeddedWindow): New method.
+ 	* gnu/java/awt/EmbeddedWindow.java (addNotify): Assume we're using
+ 	ClasspathToolkit.
+ 	* gnu/java/awt/EmbeddedWindowSupport.java: Remove file.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: Remove references to
+ 	EmbeddedWindowSupport.
+ 
+ 2005-07-04  Sven de Marothy  <sven@physto.se>
+ 
+ 	* javax/swing/JComponent.java:
+ 	(setEnabled): Fix typo in event string.
+ 	
+ 2005-07-04  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTabbedPane.java
+ 	(Page.setDisplayedMnemonicIndex): Added check for index being -1
+ 	before calling title.charAt(index).  Eliminates StringIndexOutOfBounds
+ 	error.
+ 
+ 2005-07-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java (initialized):
+ 	Remove unused field.
+ 	(needsClose): New private field.
+ 	(finish): Take needsClose boolean argument.
+ 	(finalize): Call finish with needsClose.
+ 	(produce): Set needsClose.
+ 	* include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: Regenerated.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_finish): Only close
+ 	when needed.
+ 	
+ 2005-07-04  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ParameterModeHolder.java: New constructor. 
+ 
+ 2005-07-04  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/processor/CommandSet.java: New file.
+ 	* gnu/classpath/jdwp/processor/PacketProcessor.java: Use
+ 	CommandSets to handle JdwpCommandPackets.
+ 	* gnu/classpath/jdwp/transport/JdwpReplyPacket.java: New 
+ 	Constructor.
+ 
+ 2005-07-04  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(addSelectionPath): if mouse click somewhere other than 
+ 	a row, all selections are removed
+ 	* javax/swing/plaf/basic/BasicTreeUI.java
+ 	(mouseClicked): if mouse clicked on a row, all other 
+ 	selections are cleared. DISCONTIGUOUS mode implemented.
+ 	(getCellBounds): Implemented
+ 	(paintLeaf): paints with cell bounds
+ 	(paintNonLeaf): paints with cell bounds
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java:
+ 	(DefaultTreeCellRendererComponent): changed color of 
+ 	selected row
+ 	(getFont): Implemented
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java:
+ 	(addSelectionPaths): check if parameter is null
+ 	(removeSelectionPaths): check if parameter is null
+ 
+ 2005-07-04  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	* configure.ac: Remove libart dependency.
+ 	* scripts/classpath.spec.in: Likewise.
+ 	* INSTALL: Remove references to libart.
+ 	* doc/hacking.texinfo: Likewise.
+ 	* doc/www.gnu.org/faq/faq.wml: Likewise.
+ 
+ 2005-07-03  Daniel Bonniot  <bonniot@users.sf.net>
+ 
+ 	* java/io/ObjectStreamClass.java (inSamePackage): New private method.
+ 	(findAccessibleMethod): Likewise.
+ 	(cacheMethods): Lookup readResolve and writeReplace using the new
+ 	findAccessibleMethod().
+ 
+ 2005-07-03  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* m4/acinclude.m4: fix broken expr(1) syntax
+ 
+ 2005-07-03  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableServer/ServantLocatorPackage/package.html,
+ 	org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java:
+ 	New files. 
+ 
+ 2005-07-02  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/_PolicyImplBase.java: Ihnerit from Policy.
+ 	(ids): Made final non static, new constructor.
+ 	(type, value, policyCode): New fields.
+ 	(_invoke): Handle "value" operation.
+ 	(getValue, getCode, destroy, toString, copy, equals, hashCode):
+ 	New methods.
+ 	* org/omg/CORBA/PolicyHelper.java (narrow): Removed check for
+ 	repository for repository id.
+ 
+ 2005-07-02  Audrius Meskauskas, <AudriusA@Bioinformatics.org> 
+ 
+ 	* org/omg/PortableServer/IdAssignmentPolicyValue.java,
+ 	org/omg/PortableServer/IdUniquenessPolicyValue.java,
+ 	org/omg/PortableServer/ImplicitActivationPolicyValue.java,
+ 	org/omg/PortableServer/LifespanPolicyValue.java,
+ 	org/omg/PortableServer/ServantRetentionPolicyValue.java,
+ 	org/omg/PortableServer/RequestProcessingPolicyValue.java: 
+ 	Documentation update.
+ 
+ 2005-07-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* all files: Update for new FSF address.
+ 
+ 2005-07-01  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/undo/UndoManager.java: fixed API doc links,
+ 	* javax/swing/undo/UndoableEditSupport.java: likewise.
+ 	
+ 2005-07-01  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/RenderingHints.java: API doc updates.
+ 
+ 2005-07-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/announce/20050630.wml: New file.
+ 	* doc/www.gnu.org/newsitems.txt: Add announcement.
+ 	* doc/www.gnu.org/downloads/downloads.wml: Add 0.16 download.
+ 
+ 2005-07-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/classpath/ObjectPool.java:
+ 	Removed this class. Some simple benchmarks show that it
+ 	brings not much gain and actually decreases performance
+ 	speed-wise.
+ 
+ 2005-07-01  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/DomNode.java,
+ 	gnu/xml/dom/html2/DomHTMLCollection.java,
+ 	gnu/xml/dom/html2/DomHTMLElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableRowElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableSectionElement.java,
+ 	gnu/xml/transform/NodeNumberNode.java,
+ 	gnu/xml/transform/Stylesheet.java,
+ 	gnu/xml/transform/TemplateNode.java,
+ 	gnu/xml/xpath/NameTest.java,
+ 	gnu/xml/xpath/NamespaceTest.java: Corrections for cases where
+ 	elements/attributes might have been created in non-namespace-aware
+ 	mode.
+ 	* gnu/xml/transform/StreamSerializer.java: Only apply HTML attribute
+ 	reduction when attribute is defined as a boolean in the HTML DTD.
+ 	* gnu/xml/transform/TransformerImpl.java: Add support for output
+ 	indenting and cdata-section-elements output instruction.
+ 
+ 2005-07-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/classpath/ObjectPool.java:
+ 	Introduced flag for turning on/off caching.
+ 	(getInstance): Synchronized access to this method.
+ 	(borrowObject): Synchronized access to the pool.
+ 	Added some benchmarking statements.
+ 	(returnObject): Synchronized access to the pool.
+ 	Added some benchmarking statements.
+ 	(createObject): Synchronized access to the pool.
+ 	Added some benchmarking statements.
+ 	(printStats): New method. Prints out some stats about the pool usage.
+ 
+ 2005-07-01  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/table/JTableHeader.java: added some API docs,
+ 	* javax/swing/table/TableModel.java: fixed link in API docs,
+ 	* javax/swing/table/package.html: added package description.
+ 	
+ 2005-07-01  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/ListUI.java 
+ 	(locationToIndex): match parameter name to API docs.
+ 	
+ 2005-07-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/classpath/ObjectPool.java:
+ 	Made singleton instance static. Otherwise this class would not
+ 	be of much use.
+ 	(getInstance): Made this method static.
+ 
+ 2005-07-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/classpath/ObjectPool.java:
+ 	New class. This can and should be used to cache throwaway objects
+ 	like Rectangles, Points and Dimensions. Of course the use of
+ 	this class is not limited to this cases.
+ 
+ 2005-07-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	(getLayer): Also search through the components parents to find
+ 	the one that is actually directly contained in the JLayeredPane.
+ 
+ 2005-07-01  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/image/DataBuffer.java: fixed API doc typos;
+ 	* java/awt/image/DataBufferByte.java: added description to API docs;
+ 	* java/awt/image/DataBufferDouble.java: added description to API docs,
+ 	(setElem(int, int)): removed unnecessary cast;
+ 	(setElem(int, int, int)): likewise.
+ 	* java/awt/image/DataBufferFloat.java: added description to API docs;
+ 	(setElem(int, int)): removed unnecessary cast;
+ 	(setElem(int, int, int)): likewise.
+ 	* java/awt/image/DataBufferInt.java: added description to API docs;
+ 	* java/awt/image/DataBufferShort.java: likewise;
+ 	* java/awt/image/DataBufferUShort.java: likewise.
+ 		
+ 2005-06-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java
+ 	(installDefaults): Made JMenuBar opaque.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(installDefaults): Made JOptionPane opaque.
+ 	* javax/swing/plaf/basic/BasicPanelUI.java
+ 	(installUI): Also call installDefaults().
+ 	(installDefaults): New method. Made JPanel opaque.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java
+ 	(installDefaults): Made JRootPane opaque.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java
+ 	(installDefaults): Made JSeparator opaque.
+ 	* javax/swing/plaf/basic/BasicSpinnerUI.java
+ 	(installDefaults): Made JSpinner opaque.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(installDefaults): Made JSplitPane opaque.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(installDefaults): Made JSplitPane opaque.
+ 
+ 2005-07-01  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(isNativeLookAndFeel): fixed return value,
+ 	* javax/swing/plaf/metal/MetalTheme.java
+ 	(getMenuDisabledForeground): fixed return value.
+ 	
+ 2005-07-01  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/event/TableModelEvent.java:
+ 	(TableModelEvent(TableModel): set lastRowIndex to Integer.MAX_VALUE.
+ 	
+ 2005-06-30  Aaron Luchko  <aluchko@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/util/JdwpString.java: New file.
+ 
+ 2005-06-30  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/DomDocument.java: Add support for adopting nodes from
+ 	other implementations.
+ 	* gnu/xml/dom/DomNamedNodeMap.java: Fix for nodes created outside a
+ 	namespace context.
+ 	* gnu/xml/transform/AbstractNumberNode.java,
+ 	gnu/xml/transform/ApplyImportsNode.java,
+ 	gnu/xml/transform/ApplyTemplatesNode.java,
+ 	gnu/xml/transform/AttributeNode.java,
+ 	gnu/xml/transform/CallTemplateNode.java,
+ 	gnu/xml/transform/ChooseNode.java,
+ 	gnu/xml/transform/CommentNode.java,
+ 	gnu/xml/transform/CopyNode.java,
+ 	gnu/xml/transform/CopyOfNode.java,
+ 	gnu/xml/transform/ElementNode.java,
+ 	gnu/xml/transform/ForEachNode.java,
+ 	gnu/xml/transform/IfNode.java,
+ 	gnu/xml/transform/LiteralNode.java,
+ 	gnu/xml/transform/MessageNode.java,
+ 	gnu/xml/transform/NodeNumberNode.java,
+ 	gnu/xml/transform/NumberNode.java,
+ 	gnu/xml/transform/OtherwiseNode.java,
+ 	gnu/xml/transform/ParameterNode.java,
+ 	gnu/xml/transform/ProcessingInstructionNode.java,
+ 	gnu/xml/transform/StreamSerializer.java,
+ 	gnu/xml/transform/Stylesheet.java,
+ 	gnu/xml/transform/Template.java,
+ 	gnu/xml/transform/TemplateNode.java,
+ 	gnu/xml/transform/TextNode.java,
+ 	gnu/xml/transform/ValueOfNode.java,
+ 	gnu/xml/transform/WhenNode.java: Parsing and serialisation design
+ 	changes to minimise the number of virtual machine stack frames used.
+ 
+ 2005-06-30  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JTable.java:
+ 	(initializeLocalVars): Set dragEnabled to true by default to comply
+ 	with reference implementations.
+ 	(getSelectionModel): Don't return null if row selection is disabled,
+ 	still return selectionModel.  This complies with reference
+ 	implemenations.
+ 	(changeSelection): New method.
+ 	* javax/swing/plaf/basic/BasicTableUI.java: Added a MouseMotionListener
+ 	so that MouseDragged events register properly.
+ 	(MouseInputHandler.updateSelection): Added boolean parameter for
+ 	Control being pressed and added functionality for this (multiple
+ 	selection).
+ 
+ 2005-06-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java:
+ 	Removed all calls to repaint() and revalidate(). These are likely
+ 	causing infinite loops with the RepaintManager.
+ 
+ 2005-06-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(damageLayout): Removed call to revalidate(). This caused an
+ 	infinite loop with the RepaintManager and is not necessary.
+ 
+ 2005-06-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	Removed all calls to layoutContainer() in this file.
+ 	(installDefaults): Set this as LayoutManager for the JScrollBar.
+ 	This way the layoutContainer() method is called when it should be.
+ 
+ 2005-06-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.16+cvs.
+ 
+ 2005-06-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Add 0.16 release date and new features.
+ 	* configure.ac: Set version to 0.16.
+ 
+ 2005-06-30  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java:
+ 	(addSelectionInterval): Don't clear the selection state if JList's
+ 	selection mode is SINGLE_SELECTION_INTERVAL and index0 and index1
+ 	correspond to an interval adjacent to an already selected interval.
+ 	(removeSelectionInterval): Added check for a middle interval being
+ 	removed when selection mode is SINGLE_SELECTION_INTERVAL.
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	(KeyHandler.keyPressed): Added check for scrolling past bottom of list.
+ 	(MouseHandler.mouseClicked): Added check for shift key being
+ 	pressed.
+ 
+ 2005-06-30  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/transport/JdwpPacket.java (write): New method.
+ 	(myWrite): New abstract method.
+ 	(toBytes): Remove.
+ 	(myToBytes): Remove.
+ 	* gnu/classpath/jdwp/transport/JdwpReplyPacket.java (myWrite): New
+ 	method.
+ 	* gnu/classpath/jdwp/transport/JdwpCommandPacket.java (myWrite): New
+ 	method.
+ 	* gnu/classpath/jdwp/transport/JdwpConnection.java (sendPacket): Use
+ 	JdwpPacket.write instead of JdwpPacket.toBytes.
+ 
+ 2005-06-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/java/locale/LocaleHelper.java:
+ 	Fixed to use new property files.
+ 
+ 2005-06-30  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/transport/JdwpConnection.java (sendEvent): New
+ 	method.
+ 	(_bytes): New member.
+ 	(_doStream): New member.
+ 	(JdwpConnection): Initialize new members.
+ 
+ 2005-06-30  Lillian Angel  <langel@redhat.com>
+ 	* javax/swing/JTree.java:
+         (valueChanged): repaint everytime something is selected in the 
+         tree.
+         (setSelectionModel): set TreeSelectionListeners
+         (isRowSelected): isRowSelected uses isPathSelected
+         * javax/swing/plaf/basic/BasicTreeUI.java
+         (setSelectionModel): works with JTree to set the selection model
+         (getPathForRow): took out unneeded lines
+         (mouseClicked): switched if statements, should check if already 
+         selected first.
+         (paintLeaf): checked selection of Leaf and paint selected 
+         differently than not selected cells
+         (paintNonLeaf): checked selection of nonLeaf and paint selected 
+         differently than not selected cells
+         (paintRecursive): updated to work with other paint functions
+         * javax/swing/tree/DefaultTreeSelectionModel.java:
+         (addSelectionPath): fire change, so selection is registered to 
+         listener
+         (addSelectionPaths): fire change, so selection is registered to 
+         listener
+         (removeSelectionPath): fire change, so selection is registered 
+         to listener
+         (removeSelectionPaths): fire change, so selection is registered 
+         to listener
+         (isPathSelected): took out unneeded lines
+         (getTreeSelectionListeners): made more logical to call 
+         getListeners
+         (fireValueChanged): fixed loop to be more logical
+ 
+ 2005-06-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/JEditorPane.java (getEditorKit): Call
+ 	createDefaultEditorKit() and setEditorKit() when editorKit == null.
+ 	* javax/swing/JTextPane.java: Call super for all methods where
+ 	possible.
+ 
+ 2005-06-29  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* INSTALL: Drop GTK requirement to 2.4.
+ 	* NEWS: Likewise.
+ 	* configure.ac: Likewise.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c:
+ 	Re-add GTK 2.4 support.
+ 
+ 2005-06-29  Christian Thalinger  <twisti@complang.tuwien.ac.at>
+ 
+ 	* native/fdlibm/Makefile.am: Added s_finite.c
+ 	* native/fdlibm/s_finite.c: Added
+ 
+ 2005-06-29  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java:
+ 	(addSelectionInterval):
+ 	(clearSelection):
+ 	(removeSelectionInterval):
+ 	(setLeadSelectionIndex):
+ 	(setSelectionInterval): Check that the selection model actually
+ 	changes before calling fireValueChanged.  
+ 
+ 2005-06-29  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+         
+         NEWS: Corrected note about CORBA status in 1.6 release.
+ 	
+ 2005-06-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(installDefaults): Do not set the border here.
+ 	(uninstallDefaults): Do not unset the border here.
+ 
+ 2005-06-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java
+ 	(getComponentGraphics): Do not replicate the Graphics at this
+ 	point. This is moved into paintComponent.
+ 	(paintComponent): Replicate the Graphics object before going into
+ 	the tree. This makes sure that the state is preserved and is
+ 	what is specified in the JDKs API docs.
+ 
+ 2005-06-29  Lillian Angel  <langel@redhat.com>
+ 
+         * javax/swing/plaf/basic/BasicTreeUI.java:
+         (BasicTreeUI): Initalization of listeners and instances.
+         (createUI): Implementation
+         (getHashColor): Implementation
+         (setLeftChildIndent): Implementation
+         (getLeftChildIndent): Implementation
+         (setRightChildIndent): Implementation
+         (getRightChildIndent): Implementation
+         (setExpandedIcon): Implementation
+         (getExpandedIcon): Implementation
+         (setCollapsedIcon): Implementation
+         (getCollapsedIcon): Implementation
+         (setLargeModel): Implementation
+         (isLargeModel): Implementation
+         (setRowHeight): Implementation
+         (getRowHeight): Implementation
+         (setCellRenderer): Implementation
+         (getCellRenderer): Implementation
+         (setModel): Implementation
+         (getModel): Implementation
+         (setRootVisible): Implementation
+         (isRootVisible): Implementation
+         (setShowsRootHandles): Implementation
+         (getShowsRootHandles): Implementation
+         (setCellEditor): Implementation
+         (getCellEditor): Implementation
+         (setEditable): Implementation
+         (isEditable): Implementation
+         (setSelectionModel): Implementation
+         (getSelectionModel): Implementation
+         (getPathForRow): Implementation
+         (getRowForPath): Implementation
+         (getRowCount): Implementation
+         (getClosestPathForLocation): Implementation
+         (createPropertyChangeListener): Implementation
+         (createMouseListener): Implementation
+         (createFocusListener): Implementation
+         (createKeyListener): Implementation
+         (createSelectionModelPropertyChangeListener): Implementation
+         (createTreeSelectionListener): Implementation
+         (createCellEditorListener): Implementation
+         (createComponentListener): Implementation
+         (createTreeExpansionListener): Implementation
+         (createLayoutCache): Implementation
+         (createCellRendererPane): Implementation
+         (createDefaultCellEditor): Implementation
+         (createDefaultCellRenderer): Implementation
+         (createTreeModelListener): Implementation
+         (uninstallListeners): Implementation
+         (getLastChildPath): Implementation
+         (configureLayoutCache): Implementation
+         (installDefaults): Implementation
+         (installListeners): Implementation
+         (installUI): Implementation
+         (uninstallDefaults): Implementation
+         (uninstallUI): Implementation
+         (paint): moderate changes, so painting works with new changes
+         (MouseInputHandler.mouseClicked): Implementation
+         (paintLeaf): made private
+         (paintNonLeaf): made private
+         (paintRecursive): made private
+         Several variables, instances and methods were adding according 
+         to the API. The methods that were added and not in the list 
+         above, have not been implemented yet. All JavaDoc is updated, 
+         as well as formatting.
+         * javax/swing/JTree.java: 
+ 	(createChildren): checked that children is not null.
+ 	* javax/swing/tree/AbstractLayoutCache.java:
+         (getNodeDimensions): slight modifications to return initialized 
+         Rectangle when the bounds are null. Implementation not complete.
+         * javax/swing/tree/DefaultTreeSelectionModel.java:
+         (addSelectionPath): Implementation
+         (addSelectionPaths): Implementation
+         (removeSelectionPath): Implementation
+         (removeSelectionPaths): Implementation
+         (getSelectionPaths): returned the selection array
+         (clearSelection): set the selection array to null
+         * javax/swing/tree/FixedHeightLayoutCache.java:
+         (setModel): removed this method because it is defined in the 
+         abstract parent.
+         (setRootVisible): removed this method because it is defined in 
+         the abstract parent.
+         (setRowHeight): removed this method because it is defined in 
+         the abstract parent.
+         Also, some formatting was updated.
+         * javax/swing/tree/VariableHeightLayoutCache.java:
+         (setRowHeight): removed this method because it is defined in 
+         the abstract parent.
+         * javax/swing/tree/DefaultTreeModel.java:
+         (DefaultTreeModel): Needed to initialize root if it was passed 
+         into the constructor as null.
+ 
+ 2005-06-29  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/event/TableModelEvent.java: updated API docs all over.
+ 	
+ 2005-06-29  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/java/awt/AWTUtilities.java
+ 	(VisibleComponentList): Added List implementation that iterates over
+ 	the child components of a Container and only returns Components
+ 	that are actually visible.
+ 	(getVisibleChildren): Now returns a List instead of an array. This
+ 	list is cached. This greatly decreases allocations in
+ 	LayoutManagers.
+ 	* javax/swing/BoxLayout.java:
+ 	Updated to use the new AWTUtilities.getVisibleChildren() method.
+ 
+ 2005-06-29  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/package.html: added package description,
+ 	* javax/swing/border/package.html: likewise,
+ 	* javax/swing/colorchooser/package.html: likewise,
+ 	* javax/swing/event/package.html: likewise,
+ 	* javax/swing/filechooser/package.html: likewise,
+ 	* javax/swing/plaf/package.html: likewise,
+ 	* javax/swing/plaf/basic/package.html: likewise,
+ 	* javax/swing/plaf/metal/package.html: likewise,
+ 	* javax/swing/tree/package.html: likewise,
+ 	* javax/swing/undo/package.html: likewise.
+ 
+ 2005-06-29  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/Font.java: fixed API doc links.
+ 	
+ 2005-06-28  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/event/AWTEventListener.java: added imports to fix links 
+ 	in API docs,
+ 	* java/awt/event/AWTEventListenerProxy.java: likewise,
+ 	* java/awt/event/InputMethodListener.java: likewise,
+ 	* java/awt/event/ItemListener.java: likewise,
+ 	* java/awt/event/MouseWheelEvent.java: likewise,
+ 	* java/awt/event/TextEvent.java: likewise,
+ 	* java/awt/event/WindowEvent.java: likewise,
+ 	* java/awt/event/WindowListener.java: likewise.
+ 	
+ 2005-06-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CosNaming/BindingIterator.java: Inherit from 
+ 	BindingIteratorOperations, added specnotes for 1.2 specific methods.
+ 	* org/omg/CosNaming/NamingContext.java: Inherit from
+ 	NamingContextOperations, added specnotes for 1.2 specific methods.
+ 	* org/omg/IOP/Encoding.java,
+ 	org/omg/IOP/TaggedComponent.java,
+ 	org/omg/IOP/TaggedProfile.java: Inherit from Serializable, added
+ 	SerialVersionUID.
+ 	org/omg/CosNaming/BindingIteratorOperations.java,
+ 	org/omg/Dynamic/Parameter.java: New files.
+ 
+ 2005-06-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/gnuRequest.java (submit): If IOException is 
+ 	thrown while opening a socket, rethrow MARSHAL.
+ 	* gnu/CORBA/NamingService/NamingServiceTransient.java (main): 
+ 	Fixed regression due that the service started on the wrong port. 
+ 
+ 2005-06-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	From Christian Thalinger
+ 	* doc/www.gnu.org/stories.wml: Add CACAO description.
+ 
+ 2005-06-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/CORBA/_IDLTypeStub.java: Added SerialVersionUID.
+         org/omg/CORBA/PolicyTypeHelper.java: New file.
+ 
+ 2005-06-28  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/table/AbstractTableModel.java: updated API docs,
+ 	* javax/swing/table/DefaultTableModel.java: fixed API docs.
+ 	
+ 2005-06-28  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(getNativeFD): Removed.
+ 	* gnu/java/nio/DatagramChannelSelectionKey.java
+ 	(getNativeFD): Modified to extract the native fd via the
+ 	PlainDatagramSocketImpl.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(getNativeFD): Removed.
+ 	* gnu/java/nio/ServerSocketChannelSelectionKey.java
+ 	(getNativeFD): Modified to extract the native fd via the
+ 	PlainSocketImpl.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(getNativeFD): Removed.
+ 	* gnu/java/nio/SocketChannelSelectionKey.java
+ 	(getNativeFD): Modified to extract the native fd via the
+ 	PlainSocketImpl.
+ 
+ 2005-06-28  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+         
+         NEWS: Added note about CORBA status in 1.6 release.
+ 
+ 2005-06-27  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (constructors): Default to
+ 	a transparent background instead of black.
+ 	(drawImage): When drawing a raster, pass live data to avoid copying.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage): Return
+ 	a BufferedImage when using Graphics2D.
+ 	* javax/swing/JComponent.java (getComponentGraphics): Avoid copying
+ 	Graphics2D instances.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState): Copy the pixel
+ 	buffer and initialize a new cairo context in MODE_JAVA_ARRAY.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels): Revert
+ 	previous transformation patch.
+ 
+ 2005-06-27  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState):
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState___3III):
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__II):
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2):
+ 	Remove gdk_cairo_create calls.
+ 	Obtain dimension for the cairo surface.
+ 	(init_graphics2d_as_renderable): Fix cairo_xlib_surface_create
+ 	invocation by passing dimension.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels): Fix translation
+ 	matrix sign.
+ 	Use cairo_set_source for applying patterns.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable): Fix
+ 	cairo_set_source_surface invocation by passing position instead of
+ 	dimension.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState___3III):
+ 	(begin_drawing_operation):
+ 	(end_drawing_operation): In MODE_JAVA_ARRAY mode, only initialize the
+ 	cairo context once.  Use GetPrimitiveArrayCritical for pinning down
+ 	pixel buffers and maintain a buffer copy if necessary.
+ 	* native/jni/gtk-peer/gtkcairopeer.h (javabuf_copy): New field.
+ 
+ 2005-06-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(glog_func): New static function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit): Install glog_func as
+ 	default log handler.
+ 	* native/jni/gtk-peer/Makefile.am (libgtkpeer_la_LIBADD): Add jcl.
+ 
+ 2005-06-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java
+ 	(getPreferredSize): Don't let the UI replace a manually set preferred
+ 	size.
+ 
+ 2005-06-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/Box.java
+ 	(createGlue): Return Short.MAX_VALUE instead of Integer.MAX_VALUE as
+ 	dimension in the Filler component.
+ 	(createHorizontalGlue): Return a new Filler object with the correct
+ 	value instead of relying on createGlue(). The object returned by
+ 	createHorizontalGlue must not have a vertical dimension.
+ 
+ 2005-06-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/BoxLayout.java
+ 	(Direction): New inner interface. This abstracts the layout algorithm
+ 	from the layout direction.
+ 	(Horizontal): Implementation for the above interface for the
+ 	horizontal direction.
+ 	(Vertical): Implementation for the above interface for the
+ 	vertical direction.
+ 	(SizeReq): An inner helper class that holds size requirements for
+ 	Components that are laid out. This is similar but not equal to
+ 	the SizeRequirements class in javax.swing.
+ 	(layoutContainer): Removed the actual algorithm into a new method,
+ 	using the Direction interface.
+ 	(layoutAlgorithm): This is the new layout algorithm. This uses
+ 	the Direction interface, so that the algorithm is not duplicated
+ 	and can be expressed more readable.
+ 	(distributeSpace): A new helper method that distributes excess
+ 	space over a set of components. This is the actual 'worker' in
+ 	BoxLayout.
+ 
+ 2005-06-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         org/omg/DynamicAny/DynAnyPackage/InvalidValue.java, 
+         org/omg/DynamicAny/DynAnyPackage/InvalidValueHelper.java, 
+         org/omg/DynamicAny/DynAnyPackage/TypeMismatch.java, 
+         org/omg/DynamicAny/DynAnyPackage/TypeMismatchHelper.java, 
+         org/omg/DynamicAny/DynAnyPackage/package.html, 
+         org/omg/IOP/ComponentIdHelper.java: New files.
+ 
+ 2005-06-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+         * org/omg/PortableServer/POAPackage/ServantAlreadyActive.java, 
+         org/omg/PortableServer/POAPackage/ServantAlreadyActiveHelper.java:
+         New files.
+ 
+ 2005-06-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Integer.java:
+ 	(valueOf(int)): Implemented.
+ 	(bitCount(int)): Implemented.
+ 	(rotateLeft(int,int)): Implemented.
+ 	(rotateRight(int,int)): Implemented.
+ 	(highestOneBit(int)): Implemented.
+ 	(numberOfLeadingZeros(int)): Implemented.
+ 	(lowestOneBit(int)): Implemented.
+ 	(numberOfTrailingZeros(int)): Implemented.
+ 	(signum(int)): Implmented.
+ 	(reverseBytes(int)): Implemented.
+ 	(reverse(int)): Implemented.
+ 	
+ 2005-06-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java:
+ 	New file.
+ 
+ 2005-06-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableServer/POAManagerPackage/AdapterInactive.java, 
+ 	org/omg/PortableServer/POAManagerPackage/AdapterInactiveHelper.java, 
+ 	org/omg/PortableServer/POAManagerPackage/State.java, 
+ 	org/omg/PortableServer/POAManagerPackage/index.html: New files.
+ 
+ 2005-06-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/plaf/ColorUIResource.java: documented 
+ 	IllegalArgumentExceptions in constructors;
+ 	
+ 2005-06-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/table/AbstractTableModel.java:
+ 	(getColumnName): eliminated temp index to fix very minor bug,
+ 	(findColumn): throw NullPointerException for null argument,
+ 	(fireTableDataChanged): set correct row indices.
+ 	* javax/swing/table/DefaultTableModel.java:
+ 	(setDataVector): replace null argument with empty vector then call
+ 	setColumnIdentifiers() to set up column names,
+ 	(setColumnCount): call fireTableStructureChanged() rather than 
+ 	fireTableDataChanged(),
+ 	(addColumn(Object, Object[])): call fireTableStructureChanged() rather 
+ 	than fireTableDataChanged(),
+ 	(addRow(Vector)): fixed row indices in TableModelEvent,
+ 	(moveRow): fixed row indices in TableModelEvent,
+ 	(getColumnName): for a column index beyond the number of columns in
+ 	the model, pass control to the superclass.
+ 
+ 2005-06-24  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* java/awt/Container.java:
+ 	(LightweightDispatcher.acquireComponentForMouseEvent):
+ 	Use temp variable to set lastComponentEntered to null _before_
+ 	dispatching MOUSE_EXITED events to avoid infinite loop.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	(MouseInputHandler.acquireComponentForMouseEvent):
+ 	Use temp variable to set lastComponentEntered to null _before_
+ 	dispatching MOUSE_EXITED events to avoid infinite loop.
+ 
+ 2005-06-24  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JScrollPane.java
+ 	(JScrollPane): Add Viewport at index 0 rather than after the
+ 	JScrollBars.  This complies with reference implementations.
+ 	
+ 2005-05-14  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/aelfred2/XmlParser.java: ensure that charset parameter of
+ 	external MIME entity is trimmed.
+ 	* gnu/xml/dom/DomDocument.java: DomNsNodes retrieved via
+ 	createElement/createAttribute should not have localNames.
+ 
+ 2005-06-24  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	org/omg/PortableServer/POAPackage/AdapterAlreadyExists.java,
+ 	org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHelper.java,
+ 	org/omg/PortableServer/POAPackage/WrongPolicyHelper.java,
+ 	org/omg/PortableServer/POAPackage/AdapterNonExistentHelper.java,
+ 	org/omg/PortableServer/POAPackage/InvalidPolicyHelper.java,
+ 	org/omg/PortableServer/POAPackage/ServantNotActiveHelper.java,
+ 	org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHelper.java,
+ 	org/omg/PortableServer/POAPackage/ObjectNotActiveHelper.java,
+ 	org/omg/PortableServer/POAPackage/NoServantHelper.java,
+ 	org/omg/PortableServer/POAPackage/WrongAdapterHelper.java,
+ 	org/omg/PortableServer/POAPackage/AdapterNonExistent.java,
+ 	org/omg/PortableServer/POAPackage/InvalidPolicy.java,
+ 	org/omg/PortableServer/POAPackage/NoServant.java,
+ 	org/omg/PortableServer/POAPackage/ObjectAlreadyActive.java,
+ 	org/omg/PortableServer/POAPackage/ObjectNotActive.java,
+ 	org/omg/PortableServer/POAPackage/ServantNotActive.java,
+ 	org/omg/PortableServer/POAPackage/WrongAdapter.java,
+ 	org/omg/PortableServer/POAPackage/WrongPolicy.java,
+ 	gnu/CORBA/Poa/InvalidPolicyHolder.java,
+ 	org/omg/PortableServer/POAPackage/package.html: New files.
+ 
+ 2005-06-24  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/IOP/CodecOperations.java,
+ 	org/omg/IOP/Codec.java,
+ 	org/omg/IOP/CodecFactory.java,
+ 	org/omg/IOP/CodecFactoryHelper.java,
+ 	org/omg/IOP/CodecFactoryOperations.java,
+ 	gnu/CORBA/cdrEncapsCodec.java,
+ 	gnu/CORBA/gnuCodecFactory.java: New files.
+ 	* gnu/CORBA/Functional_ORB.java (constructor):
+ 	Put "CodecFactory" into initial references.
+ 	* gnu/CORBA/holderFactory.java (createHolder): 
+ 	Removed debug statement.
+ 
+ 2005-06-24  Anthony Balkissoon  <abalkiss@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	(GlassPaneDispatcher.acquireComponentForMouseEvent): Use
+ 	temp variable to set lastComponentEntered to null _before_
+ 	dispatching MOUSE_EXITED events, otherwise we get infinite
+ 	loop.
+ 
+ 2005-06-24  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/java/awt/AWTUtilities.java:
+ 	Added new utility class. This provides a method for fetching
+ 	the visible children of a Container.
+ 	* javax/swing/BoxLayout.java:
+ 	Use AWTUtilities.getVisibleChildren() instead of
+ 	Container.getComponents(). LayoutManagers must not layout invisible
+ 	children.
+ 
+ 2005-06-24  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTable.java
+ 	(constructor): Call setModel() instead of setting the model directly.
+ 	This makes sure that listeners and the columnModel are set up
+ 	correctly.
+ 	(initializeLocalVars): Set up tableHeader before the columnModel.
+ 	This way we already have a tableHeader when setColumnModel is called
+ 	and it can be updated accordingly.
+ 	(tableChanged): Update the columnModel when the table structure
+ 	changes.
+ 	(setColumnModel): Also set the columnModel of the tableHeader here.
+ 	This is specified in Sun's API documentation.
+ 	* javax/swing/table/DefaultTableModel.java
+ 	(setDataVector): Fire a structureChanged event, so that the
+ 	columnModel and header columnModel are updated correctly.
+ 
+ 2005-06-23  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImage.java: Don't draw 0 size images.
+ 
+ 2005-06-23  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImage.java: Add case source size > size.
+ 
+ 2005-06-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/LocalObject.java: New file.
+ 
+ 2005-06-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+ 	(pumpBytes): Throws IOException.
+ 	(pumpDone): New native method.
+ 	(produce): Call pumpDone().
+ 	* include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: Regenerated.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone): New method.
+ 	(Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes): Check for
+ 	errors on gdk_pixbuf_loader_write.
+ 
+ 2005-06-22  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/IOP/ProfileIdHelper.java,
+ 	omg/IOP/MultipleComponentProfileHelper.java,
+ 	omg/IOP/MultipleComponentProfileHolder.java: New files.
+ 
+ 2005-06-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	(InternalFramePropertyChangeListener.vetoableChange):
+ 	Repaint the JDesktopPane when JInternalFrame is closed.
+ 	Also veto the close request, because hiding is not
+ 	closing.
+ 
+ 2005-06-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 	
+ 	* javax/swing/SwingUtilities.java:
+ 	(layoutCompoundLabel): Added check for multi-line text.
+ 
+ 2005-06-22  Anthony Balkissoon  <abalkiss@redhat.com>
+ 	
+ 	* javax/swing/JDialog.java:
+ 	(setDefaultCloseOperation): Removed validity check for 
+ 	operation code.  Validity is handled in processWindowEvent.
+ 	* javax/swing/JFrame.java:
+ 	(setDefaultCloseOperation): Changed error message to be more
+ 	descriptive and similar to reference implementation.
+ 	* javax/swing/JInternalFrame.java:
+ 	(setDefaultCloseOperation): Removed validity check for 
+ 	operation code.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	(InternalFramePropertyListener): Added implementation of
+ 	VetoableChangeListener.
+ 	(InternalFramePropertyListener.vetoableChange): New method.
+ 	(InternalFramePropertyListener.propertyChange): Removed
+ 	check for JInternalFrame.IS_CLOSED_PROPERTY.  This is now
+ 	handled in vetoableChange.
+ 	(getDesktopManager): Added a check for null pointer from 
+ 	JInternalFrame.getDesktopPane().
+ 
+ 2005-06-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(installDefaults): JLabels are not opaque by default.
+ 
+ 2005-06-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/GrayFilter.java
+ 	(constructor): Compute factor at initialization time.
+ 	(createDisabledImage): Initialize GrayFilter with correct arguments.
+ 	(filterRGB): Reworked filter method. This is now compliant with
+ 	the JDK behaviour.
+ 
+ 2005-06-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #13439
+ 	* javax/swing/JScrollPane.java (JScrollPane(Component,int,int)):
+ 	Set viewport, view and scrollLostener manually.
+ 
+ 2005-06-22  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/IOP/ServiceContextListHolder.java,
+ 	org/omg/IOP/ServiceContext.java
+ 	org/omg/IOP/ServiceContextHelper.java
+ 	org/omg/IOP/ServiceContextHolder.java
+ 	org/omg/IOP/ServiceContextListHelper.java
+ 	org/omg/IOP/ServiceIdHelper.java: New files.
+ 
+ 2005-06-21  Lillian Angel  <langel@redhat.com>
+ 
+ 	* java/util/logging/Logger.java
+ 	(setParent): No lines after throwing an exception are executed 
+ 	and there is no point to check if the parent is null, because a 
+ 	NullPointerException would have been thrown earlier. Fixes Bug 
+ 	#13460.
+ 
+ 2005-06-21  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/IOP/Encoding.java,
+ 	org/omg/IOP/IOR.java,
+ 	org/omg/IOP/IORHelper.java,
+ 	org/omg/IOP/IORHolder.java,
+ 	org/omg/IOP/TaggedProfileHolder.java,
+ 	org/omg/IOP/TaggedProfile.java,
+ 	org/omg/IOP/TaggedProfileHelper.java,
+ 	org/omg/IOP/TaggedComponentHolder.java,
+ 	org/omg/IOP/TaggedComponent.java,
+ 	org/omg/IOP/TaggedComponentHelper.java: New files.
+ 
+ 2005-06-21  Lillian Angel  <langel@redhat.com>
+ 
+ 	* gnu/xml/aelfred2/XmlParser
+         (parseAttribute): if (type.equals("CDATA") || type == null) 
+         this would always throw a NullPointerException if type is null.
+ 
+ 2005-06-21  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Functional_ORB.java (Port): Documentation
+ 	update. (setPort): Made static, documentation update.
+ 	(getPort): Removed.
+ 	* gnu/CORBA/generalTypeCode.java (UNSET): Changed value.
+ 	* gnu/CORBA/NamingService/NamingServiceTransient.java (main):
+ 	Removed call to init.
+ 
+ 2005-06-21  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/CurrentHelper.java, 
+ 	org/omg/CORBA/CurrentHolder.java: New files.
+ 
+ 2005-06-21  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/Current.java, 
+ 	org/omg/CORBA/CurrentOperations.java: Documentation update.
+ 	
+ 2005-06-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/DefaultDesktopManager.java (getBoundsForIconOf):
+ 	Initialize desktopPane before use.
+ 
+ 2005-06-20  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/html/HTML.java: Added public parameterless 
+ 	constructor for Tag.
+ 
+ 2005-06-20  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/PolicyListHolder.java,
+ 	org/omg/CORBA/PolicyListHelper.java: New files.
+ 
+ 2005-06-20  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/DefaultDesktopManager.java
+ 	(getBoundsForIconOf): No reason to check if desktopPane is null
+ 	after dereferencing desktopPane in code. Fixes bug #13461.
+ 
+ 2005-06-20  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/JScrollPane.java
+ 	(JScrollPane): Viewport was not being set when 
+ 	the view was null. Whenever a view would be added to container
+ 	it would not appear. This was changed to use setViewportView.
+ 
+ 2005-06-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	* javax/swing/AbstractCellEditor.java:
+ 	* javax/swing/Action.java:
+ 	* javax/swing/BorderFactory.java:
+ 	* javax/swing/ButtonGroup.java:
+ 	* javax/swing/CellRendererPane.java:
+ 	* javax/swing/DebugGraphics.java:
+ 	* javax/swing/DefaultBoundedRangeModel.java:
+ 	* javax/swing/DefaultButtonModel.java:
+ 	* javax/swing/DefaultCellEditor.java:
+ 	* javax/swing/DefaultComboBoxModel.java:
+ 	* javax/swing/DefaultDesktopManager.java:
+ 	* javax/swing/DefaultFocusManager.java:
+ 	* javax/swing/DefaultListCellRenderer.java:
+ 	* javax/swing/DefaultListModel.java:
+ 	* javax/swing/DefaultListSelectionModel.java:
+ 	* javax/swing/FocusManager.java:
+ 	* javax/swing/GrayFilter.java:
+ 	* javax/swing/ImageIcon.java:
+ 	* javax/swing/JButton.java:
+ 	* javax/swing/JCheckBoxMenuItem.java:
+ 	* javax/swing/JColorChooser.java:
+ 	* javax/swing/JComboBox.java:
+ 	* javax/swing/JComponent.java:
+ 	* javax/swing/JDesktopPane.java:
+ 	Reformatted these sourcefiles to better match our coding style.
+ 
+ 2005-06-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java
+ 	(getPreferredSize): Make sure that preferredSize is greater than
+ 	minimumSize.
+ 	(setMinimumSize): Removed hack to adjust preferredSize. This is moved
+ 	into the method getPreferredSize().
+ 
+ 2005-06-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java
+ 	(setOpaque): Don't revalidate and repaint when the opaque property
+ 	is changed (at least not here).
+ 
+ 2005-06-20  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/html/HTMLEditorKit.java:
+ 	Inherit from StyledEditorKit, Cloneable, Serializable and adding
+ 	string constants. 
+ 	(handleStartTag): Fixed typo in comment.
+ 
+ 2005-06-20  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/PolicyHelper.java,
+ 	org/omg/CORBA/PolicyHolder.java,
+ 	org/omg/CORBA/_PolicyStub.java,
+ 	gnu/CORBA/_PolicyImplBase.java: New files.
+ 
+ 2005-06-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
+ 	(gnu_java_awt_peer_gtk_GtkImage_getPixbuf,
+ 	gnu_java_awt_peer_gtk_GtkImage_getPixmap,
+ 	gnu_java_awt_peer_gtk_GtkImage_isOffScreen): Move declaration to ...
+ 	* native/jni/gtk-peer/gtkpeer.h: here.
+ 
+ 2005-06-18  Chris Burdess <dog@bluezoo.org>
+ 
+ 	* java/util/logging/LogManager.java: Set default level of root
+ 	logger to INFO.
+ 
+ 2005-06-18  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/IOP/TransactionService.java, 
+ 	org/omg/IOP/CodeSets.java: New files.
+ 
+ 2005-06-17  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/PortableServer/ID_ASSIGNMENT_POLICY_ID.java, 
+ 	org/omg/PortableServer/ID_UNIQUENESS_POLICY_ID.java, 
+ 	org/omg/PortableServer/IMPLICIT_ACTIVATION_POLICY_ID.java, 
+ 	org/omg/PortableServer/LIFESPAN_POLICY_ID.java, 
+ 	org/omg/PortableServer/REQUEST_PROCESSING_POLICY_ID.java, 
+ 	org/omg/PortableServer/SERVANT_RETENTION_POLICY_ID.java, 
+ 	org/omg/PortableServer/THREAD_POLICY_ID.java, 
+ 	org/omg/IOP/ENCODING_CDR_ENCAPS.java, 
+ 	org/omg/IOP/TAG_ALTERNATE_IIOP_ADDRESS.java, 
+ 	org/omg/IOP/TAG_CODE_SETS.java, 
+ 	org/omg/IOP/TAG_INTERNET_IOP.java, 
+ 	org/omg/IOP/TAG_JAVA_CODEBASE.java, 
+ 	org/omg/IOP/TAG_MULTIPLE_COMPONENTS.java, 
+ 	org/omg/IOP/TAG_ORB_TYPE.java, 
+ 	org/omg/IOP/TAG_POLICIES.java, 
+ 	org/omg/PortableInterceptor/LOCATION_FORWARD.java, 
+ 	org/omg/PortableInterceptor/SUCCESSFUL.java, 
+ 	org/omg/PortableInterceptor/SYSTEM_EXCEPTION.java, 
+ 	org/omg/PortableInterceptor/TRANSPORT_RETRY.java, 
+ 	org/omg/PortableInterceptor/USER_EXCEPTION.java: New files.
+ 
+ 2005-06-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/Makefile.am (JAVAC): Use JIKESENCODING.
+ 	* m4/acinclude.m4 (CLASSPATH_CHECK_JIKES): Check for -encoding
+ 	option to jikes.
+ 	(JIKESENCODING): New subst.
+ 
+ 2005-06-17  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/exception/VmDeadException.java: New file.
+ 	* gnu/classpath/jdwp/exception/NotImplementedException.java: New file.
+ 	* gnu/classpath/jdwp/exception/JdwpInternalErrorException.java: New
+ 	file.
+ 	* gnu/classpath/jdwp/exception/JdwpException.java: New file.
+ 	* gnu/classpath/jdwp/exception/InvalidThreadGroupException.java: New
+ 	file.
+ 	* gnu/classpath/jdwp/exception/InvalidThreadException.java: New file.
+ 	* gnu/classpath/jdwp/exception/InvalidStringException.java: New file
+ 	* gnu/classpath/jdwp/exception/InvalidObjectException.java: New file.
+ 	* gnu/classpath/jdwp/exception/InvalidEventTypeException.java: New
+ 	file.
+ 	* gnu/classpath/jdwp/exception/InvalidCountException.java: New file.
+ 	* gnu/classpath/jdwp/exception/InvalidClassException.java: New file.
+ 
+ 2005-06-17  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/JApplet.java,
+ 	javax/swing/JDialog.java,
+ 	javax/swing/JFrame.java,
+ 	javax/swing/JInternalFrame.java,
+ 	javax/swing/JWindow.java: Added support for adding and setting
+ 	layout managers directly for these top-level containers tocomply
+ 	with J2SE 5.0.  Added private boolean initStageDone.
+ 	Initialized rootPaneCheckingEnabled to false.
+ 	(JDialog.dialogInit): Set initStageDone to true.
+ 	(JApplet.JApplet): Set initStageDone to true.
+ 	(JFrame.frameInit) : Set initStageDone to true.
+ 	(JInternalFrame.JInternalFrame): Set initStageDone to true.
+ 	(JWindow.windowInit): Set initStageDone to true.
+ 	(addImpl): Added check for direct adds (J2SE 5.0) and directed
+ 	them to getContentPane().add.
+ 	(setLayout): Added check for direct calls to setLayout.
+ 	(remove): Added check for direct calls to remove.
+ 
+ 2005-06-17  Lillian Angel  <langel@redhat.com>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(mousePressed): Check if currentComponent is null.
+ 	If so, it should be equal to the current source.
+ 	Fixes Bug #11538.
+ 
+ 2005-06-17  Anthony Balkissoon  <abalkiss@redhat.com>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java:
+ 	(addSelectionInterval):	Added update to leadSelectionIndex
+ 	and anchorSelectionIndex variables.
+ 	(removeSelectionInterval): Same as above.
+ 	(setSelectionInterval): Same as above.
+ 	* javax/swing/JList.java:
+ 	(getSelectedIndices): Increased for loop upper bound by 1.
+ 	* javax/swing/plaf/basic/BasicListUI.java: 
+ 	(KeyHandler): New class.
+ 	(MouseInputHandler): Moved code from MousePressed to
+ 	MouseClicked.
+ 	(MouseInputHandler.MouseClicked): Added check for control
+ 	key being down.
+ 
+ 2005-06-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/io/DataInputStream.java:
+ 	Reverted my patch from 2005-06-15.
+ 
+ 2005-06-16  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	* gnu/java/nio/charset/Windows1250.java,
+ 	gnu/java/nio/charset/Windows1251.java,
+ 	gnu/java/nio/charset/Windows1252.java,
+ 	gnu/java/nio/charset/Windows1253.java,
+ 	gnu/java/nio/charset/Windows1254.java,
+ 	gnu/java/nio/charset/Windows1255.java,
+ 	gnu/java/nio/charset/Windows1256.java,
+ 	gnu/java/nio/charset/Windows1257.java,
+ 	gnu/java/nio/charset/Windows1258.java: Fixed canonical NIO
+ 	charset name.
+ 
+ 2005-06-16  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/CDR/uncObjectOutputStream.java,
+ 	gnu/CORBA/CDR/uncObjectInputStream.java: Deleted.
+ 
+ 2005-06-16  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CosNaming/NamingContextPackage/CannotProceed.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotEmpty.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotFound.java: 
+ 	Added 1.4 constructors.
+ 	* org/omg/CosNaming/NamingContextExtPackage/InvalidAddress.java:
+ 	Added 1.4 constructors and serialVersionUID.
+ 
+ 2005-06-16  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/ProtableServer/IdAssignmentPolicyValue.java,
+ 	org/omg/ProtableServer/IdUniquenessPolicyValue.java,
+ 	org/omg/ProtableServer/ImplicitActivationPolicyValue.java,
+ 	org/omg/ProtableServer/LifespanPolicyValue.java,
+ 	org/omg/ProtableServer/RequestProcessingPolicyValue.java,
+ 	org/omg/ProtableServer/ServantRetentionPolicyValue.java: 
+ 	New files.
+ 
+ 2005-06-16  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.java, 
+ 	org/omg/IOP/CodecFactoryPackage/UnknownEncoding.java, 
+ 	org/omg/IOP/CodecPackage/FormatMismatch.java, 
+ 	org/omg/IOP/CodecPackage/InvalidTypeForEncoding.java,
+ 	org/omg/IOP/CodecPackage/TypeMismatch.java, 
+ 	org/omg/IOP/CodecPackage/TypeMismatchHelper.java, 
+ 	org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.java, 
+ 	org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.java, 
+ 	org/omg/PortableServer/CurrentPackage/NoContext.java: New exceptions.
+ 	org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHelper.java, 
+ 	org/omg/IOP/CodecFactoryPackage/UnknownEncodingHelper.java, 
+ 	org/omg/IOP/CodecPackage/FormatMismatchHelper.java, 
+ 	org/omg/IOP/CodecPackage/InvalidTypeForEncodingHelper.java, 
+ 	org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHelper.java, 
+ 	org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHelper.java, 
+ 	org/omg/PortableServer/CurrentPackage/NoContextHelper.java: New helpers.
+ 	* gnu/CORBA/ObjectCreator.java (readUserException): 
+ 	Renamed misleading variable.
+ 	* gnu/CORBA/DuplicateNameHolder.java, 
+ 	gnu/CORBA/EmptyExceptionHolder.java: New holders. 
+ 
+ 2005-06-15  Goffredo Baroncelli  <kreijack@inwind.it>
+ 
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java
+ 	(getHeaderFieldKey): Check index.
+ 
+ 2005-06-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/io/DataInputStream.java
+ 	(readLine): Added checks for InputStream that support have a pos field
+ 	for repositioning the stream.
+ 
+ 2005-06-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/gen-classlist.sh.in: Remove vm.omit, vm.add and tmp.omit files
+ 	after use.
+ 
+ 2005-06-15  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/Messaging/SyncScopeHelper.java (write): Made public.
+ 
+ 2005-06-14  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/id/JdwpIdFactory.java: New file.
+ 	* gnu/classpath/jdwp/processor/PacketProcessor.java: New file.
+ 
+ 2005-06-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/gen-classlist.sh.in (vm_dirlist): Prune non-existing
+ 	directories.
+ 	* lib/Makefile.am (genclasses): Pass top_srcdir to
+ 	gen-classlist.sh.
+ 	* m4/acinclude.m4: Quote default value of vm_classes.
+ 
+ 2005-06-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/JComponent.java (setMinimumSize): Only adjust
+ 	prefferedSize or maximumSize when they are set.
+ 	* javax/swing/JScrollPane.java (JScrollPane(Component,int,int)):
+ 	Set viewport and view manually.
+ 
+ 2005-06-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* m4/acinclude.m4 (--with-vm-classes): New option.
+ 	* lib/gen-classlist.sh.in: Handle 'vm_classes' feature.
+ 	* lib/Makefile.am (compile_classpath): Updated for new
+ 	classpath-setting approach.
+ 	(noinst_DATA): Now unconditional.
+ 
+ 2005-06-14  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (updateBufferedImage):
+ 	Fixed pixelBuffer array index.
+ 
+ 2005-06-14  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	Classpath bug #13353:
+ 	* gnu/java/net/protocol/jar/Handler.java (parseURL, toExternalForm):
+ 	Append fragments (#ref) to URLs.
+ 
+ 2005-06-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/text/InternationalFormatter.java (clone): Disabled.
+ 
+ 2005-06-14  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(DecimalFormat(String, DecimalFormatSymbols)): store clone of symbols;
+ 	(equals): add missing checks;
+ 	(getDecimalFormatSymbols): return clone of symbols;
+ 	(setDecimalFormatSymbols): store clone of symbols.
+ 	
+ 2005-06-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/standard.omit: Add gnu/classpath/jdwp.
+ 	
+ 2005-06-13  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* gnu/classpath/jdwp/id/ArrayId.java: New file.
+ 	* gnu/classpath/jdwp/id/ArrayReferenceTypeId.java: New file.
+ 	* gnu/classpath/jdwp/id/ClassLoaderId.java: New file.
+ 	* gnu/classpath/jdwp/id/ClassObjectId.java: New file.
+ 	* gnu/classpath/jdwp/id/ClassReferenceTypeId.java: New file.
+ 	* gnu/classpath/jdwp/id/InterfaceReferenceTypeId.java: New file.
+ 	* gnu/classpath/jdwp/id/JdwpId.java: New file.
+ 	* gnu/classpath/jdwp/id/ObjectId.java: New file.
+ 	* gnu/classpath/jdwp/id/ReferenceTypeId.java: New file.
+ 	* gnu/classpath/jdwp/id/StringId.java: New file.
+ 	* gnu/classpath/jdwp/id/ThreadGroupId.java: New file.
+ 	* gnu/classpath/jdwp/id/ThreadId.java: New file.
+ 	* gnu/classpath/jdwp/util/Signature.java: New file.
+ 	* gnu/classpath/jdwp/transport/JdwpConnection.java: New file.
+ 	* gnu/classpath/jdwp/transport/ITransport.java: New file.
+ 	* gnu/classpath/jdwp/transport/SocketTransport.java: New file.
+ 	* gnu/classpath/jdwp/transport/TransportFactory.java: New file.
+ 	* gnu/classpath/jdwp/transport/TransportException.java: New file.
+ 	* gnu/classpath/jdwp/transport/JdwpPacket.java: New file.
+ 	* gnu/classpath/jdwp/transport/JdwpCommandPacket.java: New file.
+ 	* gnu/classpath/jdwp/transport/JdwpReplyPacket.java: New file.
+ 
+ 2005-06-13  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	* java/awt/image/SampleModel.java (getPixels): Fixed array
+ 	assignment.
+ 
+ 2005-06-13  Keith Seitz  <keiths@redhat.com>
+ 
+ 	* lib/Makefile.am (metafiles): Exclude directories and CVS files.
+ 
+ 2005-06-13  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	* java/text/AttributedStringIterator.java (getRunLimit): Fixed the
+ 	range of the returned indexes.
+ 
+ 2005-06-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalUtils.java:
+ 	Added new package-private helper class.
+ 	* javax/swing/plaf/metal/MetalSplitPaneDivider.java:
+ 	Added new package-private class. This is the divider used
+ 	by JSplitPane.
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java
+ 	(paintThumb): Use new MetalUtils class for drawing the typical
+ 	Metal pattern on the thumb.
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java
+ 	(initComponentDefaults): Added color defaults for SplitPane.
+ 	* javax/swing/plaf/metal/MetalSplitPaneUI.java:
+ 	(createDefaultDivider): Implemented new method. This creates
+ 	the Metal divider for JSplitPane.
+ 
+ 2005-06-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JSpinner.java
+ 	(StubEditor): Removed this inner class.
+ 	(DefaultEditor): Implemented this class and its dummy methods.
+ 	(DateEditor): Added and implemented this inner class.
+ 
+ 2005-06-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(setValue): Creates an AbstractFormatter instance based on the type
+ 	of the value beeing set.
+ 	(createFormatter): New helper method.
+ 
+ 2005-06-13  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+     * org/omg/SendingContext/Runtime.java: Deleted.
+ 	* org/omg/SendingContext/RunTime.java: Added.
+ 
+ 2005-06-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/DateFormatter.java:
+ 	Implemented new class.
+ 	* javax/swing/JFormattedTextField.java
+ 	(setValue): Added conversion from value to text.
+ 
+ 2005-06-12  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	* java/text/MessageFormat.java (parse): When parsing strings, check
+ 	for an empty pattern trailer.
+ 
+ 2005-06-12  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	PR libgcj/20435:
+ 	* gnu/regexp/RESyntax.java (RE_POSSESSIVE_OPS): New field.
+ 	(static): Add possessive matching to JAVA_1_4 syntax.
+ 	* gnu/regexp/RETokenRepeated.java (possessive): New field.
+ 	(makePossessive, isPossessive): New methods.
+ 	(match): Don't back off during possessive matching.
+ 	* gnu/regexp/RE.java (initalize): Accept possessive quantifier.
+ 	* java/util/regex/Pattern.java (constructor): Switch syntax from PERL5
+ 	to JAVA_1_4.
+ 
+ 2005-06-11  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ORB.java,
+ 	org/omg/CORBA/CustomValue.java,
+ 	org/omg/CORBA/VM_ABSTRACT.java,
+ 	org/omg/CORBA/VM_CUSTOM.java,
+ 	org/omg/CORBA/VM_NONE.java,
+ 	org/omg/CORBA/VM_TRUNCATABLE.java,
+ 	org/omg/CORBA/VM_TRUNCATABLE.java,
+ 	org/omg/CORBA/portable/ValueBase.java,
+ 	org/omg/CORBA_2_3/portable/package.html: Documentation update.
+ 	* org/omg/CORBA_2_3/package.html: New file.
+ 
+ 2005-06-11  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 	
+ 	* org/omg/CORBA/portable/StreamableValue.java,
+ 	org/omg/CORBA/portable/CustomValue.java,
+ 	gnu/CORBA/CDR/Vio.java: New files.
+ 	* org/omg/CORBA/ValueBaseHelper.java: Using	gnu.CORBA.Vio.
+ 	* org/omg/CORBA_2_3/portable/OutputStream.java: Documentatin update. 
+ 	(write_value): Using gnu.CORBA.Vio.
+ 	* org/omg/CORBA_2_3/portable/InputStream.java Documentation update. 
+ 	(read_value): Using gnu.CORBA.Vio.
+ 	* gnu/CORBA/ObjectCreator.java (Idl2class, Idl2Object): New methods.
+ 	(toIDL): Do not insert OMG prefix.
+ 	* gnu/CORBA/Restricted_ORB.java (create_any): Set ORB for that Any.
+ 	(register_value_factory, unregister_value_factory, lookup_value_factory): 
+ 	New CORBA 2_3 methods.
+ 	* gnu/CORBA/gnuAny.java (extract_Value): Use reflection if holder does
+ 	not implement ValueBaseHolder.
+ 	* gnu/CORBA/CDR/cdrInput.java: Implementing 2_3 stream and 
+ 	DataInputStream, (read_Value, read_Abstract, read_char_array, 
+ 	read_wchar_array, ensureArray, read_ulong_array, read_long_array, 
+ 	read_float_array, read_double_array, read_short_array, read_ushort_array,
+ 	read_octet_array, read_longlong_array, read_ulonglong_array, 
+ 	read_boolean_array, read_any_array, _truncatable_ids): New methods.
+ 	* gnu/CORBA/CDR/cdrOutput.java: Implementing 2_3 stream 
+ 	and DataOutputStream, (write_any_array, _truncatable_ids, write_Abstract, 
+ 	write_Value): New methods.
+ 	* org/omg/CORBA/portable/ValueBase.java: Documentation update.
+ 
+ 2005-06-10  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/InternationalFormatter.java:
+ 	Implemented new class.
+ 
+ 2005-06-10  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(BasicHorizontalLayoutManager.preferredLayoutSize): fixed return
+ 	statement.
+ 	(BasicVerticalLayoutManager.preferredLayoutSize): Likewise.
+ 	
+ 2005-06-10  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(getPreferredSize): Implemented new method. This is overridden
+ 	in order to support custom set rows and columns.
+ 
+ 2005-06-10  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/SendingContext/package.html,
+ 	org/omg/CORBA/SendingContext/Runtime.java,
+ 	org/omg/CORBA/SendingContext/RuntimeOperations.java: Removed.
+ 	* org/omg/SendingContext/package.html,
+ 	org/omg/SendingContext/Runtime.java,
+ 	org/omg/SendingContext/RuntimeOperations.java: Added.
+ 
+ 2005-06-10  Sven de Marothy  <sven@physto.se>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(gdkDrawDrawable): Check if cairo pattern is non-null before 
+ 	setting its matrix.
+ 	
+ 2005-06-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java,
+ 	gnu_java_awt_peer_gtk_GtkPanelPeer.c (connectSignals): New method.
+ 	* include/gnu_java_awt_peer_gtk_GtkPanelPeer.h: Regenerate.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_focus_in_cb, window_focus_out_cb): Remove FIXMEs.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(copyState): Check if cairo pattern is null before copying it.
+ 	(drawPixels): Check if cairo pattern is null before retrieving it.
+ 
+ 	* java/awt/MenuItem.java (label): Initialize to empty string.
+ 
+ 2005-06-08  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/rmi/server/RMIClassLoader.java (getClassLoader): Make public.
+ 	From Gary Benson.
+ 
+ 2005-06-08  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (cairoSetRGBColor,
+ 	cairoSetAlpha): Combine ...
+ 	(cairoSetRGBAColor): New method.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics2D.h: Regenerate.
+ 	* include/gnu_java_awt_peer_gtk_GtkImage.h: Regenerate.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Use
+ 	Cairo 0.5.0 APIs.
+ 	* INSTALL: Document Cairo 0.5.0 requirement.
+ 	* NEWS: Likewise.
+ 	* configure.ac: Require Cairo 0.5.0.
+ 
+ 2005-06-08  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/image/BandedSampleModel.java
+ 	(createBankArray): New method.
+ 	(BandedSampleModel(int, int, int, int)): reimplemented.
+ 	(BandedSampleModel(int, int, int, int, int[], int[]): 
+ 	RasterFormatException nearer to start of constructor.
+ 	(getPixel): Use band index, not zero.
+ 	(getPixels): Fixed loop indices.
+ 	(getSamples): Fixed loop indices.
+ 	(setDataElements): Use band index, not zero.
+ 
+ 2005-06-08 Audrius Meskauskas <AudriusA@Bioinformatics.org>.
+ 
+ 	* org/omg/CORBA/CustomValue.java,
+ 	org/omg/CORBA/CustomMarshal.java,
+ 	org/omg/CORBA/DataOutputStream.java,
+ 	org/omg/CORBA/DataInputStream.java: New classes.
+ 
+ 2005-06-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/DefaultFormatter.java
+ 	(FormatterDocumentFilter.remove): Added check for valid input.
+ 	(FormatterDocumentFilter.insertString): Added check for valid input.
+ 	Added support for overwriteMode property.
+ 	(FormatterDocumentFilter.replace): Added check for valid input.
+ 	(checkValidInput): New helper method to check for valid input
+ 	and roll it back if necessary.
+ 
+ 2005-06-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(getActions): Call super.getActions instead of throwing an exception.
+ 	This is safe here.
+ 	(processFocusEvent): Likewise.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(createKeymap): Construct new bindings array if UIDefaults does return
+ 	a null object for this.
+ 
+ 2005-06-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(installDefaults): Call resetLayoutManager() _after_ the divider
+ 	is created to prevent NPE.
+ 	(paint): Removed check for valid divider location. This is done
+ 	in resetComponentAt(index).
+ 	(resetLayoutManager): Call layout.updateComponents _after_ the
+ 	layout has been installed. Otherwise it has no effect.
+ 
+ 2005-06-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java
+ 	(setMinimumSize): Adjust preferredSize and maximumSize when
+ 	minimumSize is greater than preferred or maximumSize.
+ 
+ 2005-06-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/DefaultEditorKit.java:
+ 	Added some API documentation.
+ 
+ 2005-06-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(DefaultKeyTypedAction.actionPerformed): This action
+ 	has to filter control characters here.
+ 	(InsertBreakAction.actionPerformed): This action inserts
+ 	a newline character here.
+ 
+ 2005-06-08  Audrius Meskauskas <AudriusA@Bioinformatics.org>.
+ 
+ 	* org/omg/CORBA/UnionMemberHelper.java,
+ 	org/omg/CORBA/ValueMemberHelper.java,
+ 	org/omg/CORBA/StructMemberHelper.java,
+ 	org/omg/CORBA/IDLTypeHelper.java,
+ 	org/omg/CORBA/_IDLTypeStub.java: New files.
+ 	* gnu/CORBA/IOR.java (write_null, _read_no_endian),
+ 	gnu/CORBA/CDR/cdrInput.java (read_Object),
+ 	gnu/CORBA/CDR/cdrOutput.java (write_Object):
+ 	Implemented sending of java null.
+ 
+ 2005-06-07  Audrius Meskauskas <AudriusA@Bioinformatics.org>.
+ 
+ 	* doc/www.gnu.org/home.wml: Added "omg.org"
+ 
+ 2005-06-07  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/IOR_Delegate.java (release),
+ 	gnu/CORBA/IOR_contructed_object.java (finalize):
+ 	Close the associated socket if the finalizer is called.
+ 	gnu/CORBA/gnuRequest.java (submit),
+ 	gnu/CORBA/Functional_ORB.java (serveStep): Try to reuse the opened sockets.
+ 	* gnu/CORBA/SocketRepository.java,
+ 	gnu/CORBA/GIOP/CloseMessage.java: New files.
+ 
+ 2005-06-06  Sven de Marothy <sven@physto.se>
+ 
+ 	* javax/swing/JLabel.java
+ 	(JLabel): Horizontal justification changed to default to LEADING.
+ 
+ 2005-06-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/DefaultFormatter.java:
+ 	Implemented new class.
+ 
+ 2005-06-06  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/CompletionStatusHelper.java (type): New method.
+ 	* org/omg/CORBA/Current.java: Inherit from org.omg.portable.IDLEntity.
+ 
+ 2005-06-06  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/StringValueHelper.java,
+ 	org/omg/CORBA/WStringValueHelper.java: New helpers.
+ 	* org/omg/CORBA/portable/BoxedValueHelper.java: Documentation update.
+ 
+ 2005-06-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JFrame.java:
+ 	Added the two missing constructors that take
+ 	java.awt.GraphicsConfiguration objects as arguments.
+ 
+ 2005-06-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTree.java
+ 	(removeDescendantSelectedPaths): Implemented new method.
+ 
+ 2005-06-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonListener.java
+ 	(focusLost): Don't unarm button on focus lost. This behaviour is
+ 	not documented anywhere and disturbs correct event processing
+ 	in buttons.
+ 
+ 2005-06-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(getKeymapName): Removed debug statement.
+ 
+ 2005-06-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(getKeymapName): Added API documentation comments.
+ 
+ 2005-06-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(getKeymapName): Reimplemented to return the classname of
+ 	itself. This way subclasses don't have to override this
+ 	method.
+ 
+ 2005-06-06  Sven de Marothy <sven@physto.se>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(gtkWidgetSetForeground): Avoid setting black-on-black selection color.
+ 
+ 2005-06-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.java (resourcePath): Reindented.
+ 
+ 2005-06-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* scripts/generate-locale-list.sh: Remove redundant 'cd'.
+ 
+ 2005-06-06  Sven de Marothy <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImage.java
+ 	(getSource, deliver): Added null checks.
+ 	* java/awt/image/RGBImageFilter.java
+ 	(filterRGBPixels): Reimplement.
+ 	
+ 2005-06-05  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/VisibilityHelper.java: New helper.
+ 
+ 2005-06-05  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/stub/java/rmi/_Remote_Stub.java:
+ 	Inheriting from Stub, Remote and Serializable.
+ 
+ 2005-06-05  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org\omg\CORBA\portable\ValueFactory.java (read_value): Changed 
+ 	parameter type to org.omg.CORBA_2_3.portable.InputStream.
+ 	* org\omg\CosNaming\_BindingIteratorStub.java,
+ 	* org\omg\CosNaming\_NamingContextStub.java: Fixed serialVersionUID.
+ 	* org\omg\CORBA_2_3\portable\InputStream.java 
+ 	(read_value(BoxedValueHelper)): Implemented.
+ 	* org\omg\CORBA_2_3\portable\OutputStream.java 
+ 	(write_abstract_interface): 
+ 	Changed parameter type to java.lang.Object.
+ 	* org\omg\CORBA\portable\BoxedValueHelper.java: 
+ 	Moved wrongly placed bracket.
+ 	* org\omg\CORBA\ParameterMode.java: Inherit from
+ 	Serializable, IDLEntity and removing duplicated header.
+ 	(_PARAM_IN, _PARAM_OUT, _PARAM_INOUT): Making final.
+ 	* org\omg\Messaging\SyncScopeHelper.java (extract, id, insert, 
+ 	read, type, write): Making public.
+ 	
+ 2005-06-05  Ka-Hing Cheung  <kahing@javabsp.org>
+ 
+ 	* javax/swing/event/TreeSelectionEvent.java
+ 	(getPaths): Return a cloned copy.
+ 	(isAddedPath): Implemented.
+ 	(cloneWithSource): Likewise.
+ 
+ 2005-06-05  Ka-Hing Cheung  <kahing@javabsp.org>
+ 
+ 	* javax/swing/event/TreeSelectionEvent.java:
+ 	Reformatted.
+ 
+ 2005-06-05  Ka-Hing Cheung  <kahing@javabsp.org>
+ 
+ 	* javax/swing/tree/TreePath.java
+ 	(toString): Implemented.
+ 
+ 2005-06-05  Sven de Marothy  <sven@physto.se>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
+ 	(getPixels): Handle pixbufs which don't have alpha.
+ 
+ 2005-06-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java (focusListener): Use
+ 	correct type.
+ 	(listDataListener, listSelectionListener, mouseInputListener,
+ 	propertyChangeListener): Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java (ChangeHandler): Now
+ 	public and deprecated.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(TabbedPaneLayout): Now public.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(ButtonActionListener): Now public.
+ 	(PropertyChangeHandler): Likewise.
+ 	(ButtonAreaLayout): Likewise.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(TitlePaneLayout): Now public.
+ 	(PropertyChangeHandler): Likewise.
+ 	* javax/swing/plaf/basic/BasicCheckBoxUI.java
+ 	(getPropertyPrefix): New method.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java (ChangeHandler):
+ 	Now public.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java (ComponentHandler):
+ 	Now public.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(BasicVerticalLayoutManager): Now public.
+ 	(FocusHandler): Likewise.
+ 	(BasicHorizontalLayoutManager): Likewise.
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java
+ 	(AcceptAllFileFilter): New public constructor.
+ 	(BasicFileView): Likewise.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(BorderListener.RESIZE_NONE): Now final.
+ 
+ 2005-06-04  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/DefinitionKindHelper.java,
+ 	org/omg/CORBA/FieldNameHelper.java,
+ 	org/omg/CORBA/IdentifierHelper.java,
+ 	org/omg/CORBA/ParameterMode.java,
+ 	org/omg/CORBA/ParameterModeHelper.java,
+ 	org/omg/CORBA/ParameterModeHolder.java,
+ 	org/omg/CORBA/RepositoryIdHelper.java,
+ 	org/omg/CORBA/SetOverrideTypeHelper.java,
+ 	org/omg/CORBA/VersionSpecHelper.java,
+ 	gnu/CORBA/SetOverrideTypeHolder.java,
+ 	gnu/CORBA/DefinitionKindHolder.java: New files.
+ 
+ 2005-06-04  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/stub/java/rmi/_Remote_Stub.java,
+ 	org/omg/stub/java/rmi/package.html: New package.
+ 
+ 2005-06-04  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/Messaging/SyncScopeHelper.java
+ 	org/omg/Messaging/SYNC_WITH_TRANSPORT.java
+ 	org/omg/Messaging/package.html: New package.
+ 
+ 2005-06-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf):
+ 	Fixed method declaration format.
+ 	(Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaled):
+ 	Likewise.
+ 
+ 2005-06-03  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* AUTHORS (Roman Kennke): New author.
+ 
+ 2005-06-03  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/portable/BoxedValueHelper.java,
+ 	org/omg/CORBA_2_3/portable/OutputStream.java,
+ 	org/omg/CORBA_2_3/portable/Delegate.java,
+ 	org/omg/CORBA_2_3/portable/ObjectImpl.java,
+ 	org/omg/CORBA_2_3/portable/package.html: New files.
+ 
+ 2005-06-03  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CosNaming/NamingContextPackage/AlreadyBound.java,
+ 	org/omg/CosNaming/NamingContextPackage/CannotProceed.java,
+ 	org/omg/CosNaming/NamingContextPackage/InvalidName.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotEmpty.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotFound.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotFoundReason.java:
+ 	Added SerialVersionUID.
+ 
+ 2005-06-03  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+     * gnu/CORBA/GIOP/uncObjectInputStream.java,
+ 	gnu/CORBA/GIOP/uncObjectInputStream/uncObjectOutputStream.java:
+ 	Deleting files.
+     * gnu/CORBA/CDR/uncObjectInputStream.java,
+ 	gnu/CORBA/CDR/uncObjectInputStream/uncObjectOutputStream.java:
+ 	Adding files.
+ 
+ 2005-06-03  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Functional_ORB.java,
+ 	gnu/CORBA/IOR_Delegate.java,
+ 	gnu/CORBA/Simple_delegate.java,
+ 	gnu/CORBA/universalHolder.java,
+ 	gnu/CORBA/CDR/aligningInputStream.java,
+ 	gnu/CORBA/CDR/aligningOutputStream.java,
+ 	gnu/CORBA/CDR/cdrInput.java,
+ 	gnu/CORBA/CDR/cdrOutput.java,
+ 	gnu/CORBA/CDR/encapsulatedOutput.java,
+ 	gnu/CORBA/GIOP/ErrorMessage.java,
+ 	gnu/CORBA/GIOP/MessageHeader.java,
+ 	gnu/CORBA/GIOP/cxCodeSet.java,
+ 	gnu/CORBA/GIOP/v1_2/RequestHeader.java,
+ 	org/omg/CosNaming/BindingIteratorHelper.java,
+ 	org/omg/CosNaming/BindingListHelper.java,
+ 	org/omg/CosNaming/BindingTypeHelper.java,
+ 	org/omg/CosNaming/NameComponentHelper.java,
+ 	org/omg/CosNaming/NameHelper.java,
+ 	org/omg/CosNaming/NamingContextExtHelper.java,
+ 	org/omg/CosNaming/NamingContextHelper.java:
+ 	Initialise instances of org.omg.SystemException, thrown
+ 	after catching the other exception, with InitCause.
+ 
+ 2005-06-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(damageLayout): Check for list beeing null before revalidating
+ 	it.
+ 
+ 2005-06-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/PlainDocument.java
+ 	(removeUpdate): Fixed indices in text buffer access.
+ 	* javax/swing/text/PlainView.java
+ 	(drawLine): Simplified element access.
+ 
+ 2005-06-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(constructor): Set preferredSize to a sane default.
+ 
+ 2005-06-03  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/GIOP/uncObjectInputStream.java,
+ 	gnu/CORBA/GIOP/uncObjectInputStream/uncObjectOutputStream.java: New streams.
+ 	* org/omg/CORBA/ValueBaseHelper.java: Removing inner classes,
+ 	using uncObjectInputStream, uncObjectOutputStream instead.
+ 	* org/omg/CORBA_2_3/portable.InputStream.java (read_value): 
+ 	Delegate call to ValueBaseHelper.
+ 
+ 2005-06-03  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/SendingContext/Runtime.java,
+ 	org/omg/CORBA/SendingContext/RunTimeOperations.java:
+ 	Fixing the package statement.
+ 
+ 2005-06-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SwingUtilites.java
+ 	(replaceUIActionMap): Fixed loop again. Now correctly, I hope.
+ 	* javax/swing/ActionMap.java
+ 	(setParent): Make sure we don't build a loop.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(createActionMap): Create ActionMapUIResource instead of
+ 	plain ActionMap.
+ 
+ 2005-06-03  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java:
+ 	Removed declarations for the previously removed native methods.
+ 
+ 2005-06-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SwingUtilites.java
+ 	(replaceUIActionMap): Fixed condition in while loop that caused
+ 	infinite looping.
+ 
+ 2005-06-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTableUI.java
+ 	(uninstallDefault): Don't set properties to null, this corrupts
+ 	component state.
+ 
+ 2005-06-02  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* lib/Makefile.am:
+ 	Fix permissions problem with creation of META-INF tree.
+ 
+ 2005-06-02  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/Component.java
+ 	(setBackgroundColor): Return if the color equals the existing bgcolor.
+ 
+ 2005-06-02  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	(drawImage): Remove reference to GtkOffScreenImage.
+ 	* gnu/java/awt/peer/gtk/GtkImageConsumer.java:
+ 	Add additional comments.
+ 
+ 2005-06-02  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java:
+ 	(GdkGraphics): New constructor.
+ 	(drawImage): Reimplemented.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
+ 	(checkImage,createImage): Reimplemented.
+ 	(prepareImage): Just call the GdkToolkit method.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java:
+ 	(setIconImage): Reimplemented.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java: Reimplemented.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java:
+ 	(checkImage): Change handling of GtkImage.
+ 	(createImage): Reimplemented for GtkImage.
+ 	(getColorModel): Return the actual native color model.
+ 	(prepareImage): Reimplemented.
+ 	* include/Makefile.am,
+ 	* native/jni/gtk-peer/Makefile.am: Removed old files, added new ones.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h,
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c:
+ 	(initFromImage): New method.
+ 	(copyPixmap, flip_pixbuf, copyAndScalePixmap): Removed.
+ 	* include/gnu_java_awt_peer_gtk_GtkFramePeer.h,
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c:
+ 	(nativeSetIconImage): New method.
+ 	(nativeSetIconImageFromData,nativeSetIconImageFromDecoder): Removed.
+ 	* gnu/java/awt/peer/gtk/GtkImageConsumer.java,
+ 	* include/gnu_java_awt_peer_gtk_GtkImage.h,
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c: 
+ 	New files.
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java,
+ 	* gnu/java/awt/peer/gtk/GtkOffScreenImage.java,
+ 	* include/gnu_java_awt_peer_gtk_GtkImagePainter.h,
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c:
+ 	Removed files.
+ 
+ 2005-06-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectInputStream.java (currentLoader): Fixed typo.
+ 
+ 2005-06-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* org/omg/CosNaming/IstringHelper.java: Changed non-ascii
+ 	characters.
+ 
+ 2005-06-01  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/SendingContext/package.html,
+ 	org/omg/SendingContext/RunTimeOperations.java,
+ 	org/omg/SendingContext/Runtime.java: New package.
+ 	
+ 2005-06-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java
+ 	(setLogicalStyle): Implemented this method.
+ 
+ 2005-06-01  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/GregorianCalendar.java
+ 	(setTimeInMillis): Recompute time fields.
+ 
+ 2005-06-01  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CosNaming/BindingType.java,
+ 	org/omg/CosNaming/NameComponent.java,
+ 	org/omg/CosNaming/_BindingIteratorStub.java,
+ 	org/omg/CosNaming/_NamingContextStub.java,
+     org/omg/CosNaming/_NamingContextExtStub.java,	
+ 	org/omg/CosNaming/_BindingIteratorImplBase.java,
+ 	org/omg/CosNaming/_NamingContextImplBase.java: Added SerialVersionUID.
+ 
+ 2005-06-01  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 	
+ 	* org/omg/CosNaming/IstringHelper.java: New class.
+ 
+ 2005-06-01  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/CDR/cdrInput.java (read_wstring): Correcting
+ 	check for native encoding.
+ 
+ 2005-06-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java
+ 	(installComponents): Changed layout of main panel from GridBagLayout
+ 	to BorderLayout (as is the case in Suns JDK). This fixes
+ 	bug#13244.
+ 
+ 2005-06-01  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Functional_ORB.java (serveStep),
+ 	gnu/CORBA/gnuRequest.java (submit),
+ 	gnu/CORBA/CDR/cdrInput.java (read_encapsulation): Correcting
+ 	data read loop.
+ 
+ 2005-06-01  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Functional_ORG.java (getFreePort): Remember
+ 	the port number in the local variable.
+ 
+ 2005-06-01  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* examples/gnu/classpath/examples/CORBA/SimpleCommunication/
+ 	communication/ourUserExceptionHelper.java (extract): New method.
+ 	* examples/gnu/classpath/examples/CORBA/SimpleCommunication/
+ 	communication/RequestTest.java:Use helper extract method.
+ 
+ 2005-06-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JPopupMenu.java
+ 	(insert): Do not check for index == -1 at this point, this is done
+ 	in java.awt.Container. Catching -1 indices here disturbes the
+ 	Container.addImpl which leads to bug #13247 for example.
+ 
+ 2005-06-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/PlainDocument.java
+ 	(removeUpdate): Fixed indices in call to rootElement.replace().
+ 
+ 2005-06-01  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java
+ 	(processKeyEvent): Call super.processKeyEvent() so that KeyEvents
+ 	are delivered to registered KeyListeners.
+ 
+ 2005-05-31  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA_2_3/ORB.java,
+ 	org/omg/CORBA_2_3/portable/InputStream.java,
+ 	org/omg/CORBA/portable/ValueFactory.java: New classes.
+ 
+ 2005-05-31  Audrius Meskauskas <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg.CORBA/DynValue.java (declaration): Inherit from DynAny,
+ 	org.omg.CORBA.Object. (set_members): Declare it may throw InvalidSeq.
+ 
+ 2005-06-01  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/TimeZone (getDefaultTimeZone): Reimplemented.
+ 	(parseTime, getDateParams): New private methods.
+ 
+ 2005-06-01  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* gnu/java/awt/GradientPaintContext.java: New file.
+ 	* java/awt/GradientPaint.java: Implemented.
+ 	* java/awt/image/IndexColorModel.java: Reimplemented.
+ 
+ 2005-05-31 Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/CDR/BigEndianInputStream.java,
+ 	gnu/CORBA/CDR/BigEndianOutputStream.java,
+ 	gnu/CORBA/CDR/LittleEndianInputStream.java,
+ 	gnu/CORBA/CDR/LittleEndianOutputStream.java: New streams.
+ 	gnu/CORBA/CDR/abstractDataInputStream.java,
+ 	gnu/CORBA/CDR/abstractDataOutputStream.java: New interfaces.
+ 	* gnu/CORBA/IOR.java: Implemented parsing of the Little
+ 	Endian encoded IOR references. 
+ 	* gnu/CORBA/Functional_ORB.java, 
+ 	gnu/CORBA/binaryReply.java, 
+ 	gnu/CORBA/gnuRequest.java, 
+ 	gnu/CORBA/CDR/cdrInput.java, 
+ 	gnu/CORBA/CDR/cdrOutput.java, 
+ 	gnu/CORBA/CDR/encapsulatedOutput.java, 
+ 	gnu/CORBA/GIOP/MessageHeader.java: Implemented support
+ 	for Big and Little Endian.
+ 	* org/omg/CORBA/package.html: Documentation update.
+ 
+ 2005-05-31  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/ServerSocket.java
+ 	(bound): Removed.
+ 	(local): New field.
+ 	(bind): Cache local socket address.
+ 	(getInetAddress, getLocalPort, getLocalSocketAddress, isBound):
+ 	Use cached local socket address.
+ 	(close): bound field was removed.
+ 
+ 2005-05-31  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java
+ 	(FileChannelImpl()): Removed.
+ 	(FileChannelImpl(File,int)): Made private.
+ 	(create): New method.
+ 	* java/io/FileInputStream.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/RandomAccessFile.java:
+ 	Updated construction of FileChannelImpl instance.
+ 
+ 2005-05-31  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/image/BufferedImage.java:
+ 	(ImageProducer): Use Vector instead of HashMap.
+ 	* java/awt/image/DirectColorModel.java:
+ 	(getAlpha): Default to 255 (opaque).
+ 	
+ 2005-05-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTree.java
+ 	(getNextMatch): Implemented new method.
+ 
+ 2005-05-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalSplitPaneUI.java:
+ 	(createUI): Do not share one instance of MetalSplitPaneUI
+ 	between multiple JSplitPanes.
+ 
+ 2005-05-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java:
+ 	Made JComponent.AccessibleJComponent implement
+ 	AccessibleExtendedComponent.
+ 
+ 2005-05-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JButton.java
+ 	(constructor): Set initial actionCommand equal to the buttons label.
+ 
+ 2005-05-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JList.java
+ 	(getNextMatch): Implemented new method.
+ 	(getCellBounds): Implemented new method.
+ 
+ 2005-05-30  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Functional_ORB.java (serve, portServer, serveStep):
+ 	Implemented support for the subsequent invocations reusing the same
+ 	socket.
+ 	* gnu/CORBA/GIOP/MessageHeader.java (read): throw
+ 	NO_IMPLEMENT, not MARSHAL for Little Endian request.
+ 
+ 2005-05-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	(putLayer): Implemented new method.
+ 
+ 2005-05-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JFileChooser.java:
+ 	Fixed values of some constant fields.
+ 
+ 2005-05-30  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SwingUtilities.java:
+ 	(getWindowAncestor): This method has to be static instead of
+ 	non-static.
+ 
+ 2005-05-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/LinkedHashMap.java (access): Set 'root.pred'.
+ 
+ 2005-05-29  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CosNaming/_BindingIteratorImplBase.java ,
+ 	org/omg/CosNaming/_NamingContextExtImplBase.java,
+ 	org/omg/CosNaming/_NamingContextImplBase.java: Inherit from
+ 	DynamicImplementation.
+ 	* gnu/CORBA/ServiceRequestAdapter.java: New class.
+ 	* gnu/CORBA/gnuNVList.java (add, add_item):
+ 	Replacing null by constructed instance.
+ 
+ 2005-05-29  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/Functional_ORB.java (serve, useProperties, init): Implementing
+ 	the property-configurable time-outs. 
+ 
+ 2005-05-29  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/gnuRequest.java (p_invoke): Wrap the received UserException into
+ 	UnknownUserException.
+ 	* gnu/CORBA/streamReadyHolder.java: New wrapper for UserException. 
+ 	* org/omg/CORBA/UnknownUserException.java: New exception.
+ 
+ 2005-05-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	Bumped up serialVersionUID(s) to JDK1.4 compatibility.
+ 	* javax/swing/ImageIcon.java: Likewise.
+ 	* javax/swing/JFileChooser.java: Likewise.
+ 	* javax/swing/JInternalFrame.java: Likewise.
+ 	* javax/swing/JMenu.java: Likewise.
+ 	* javax/swing/JRadioButton.java: Likewise.
+ 	* javax/swing/JScrollPane.java: Likewise.
+ 	* javax/swing/JSpinner.java: Likewise.
+ 	* javax/swing/JTabbedPane.java: Likewise.
+ 	* javax/swing/ImageIcons.java: Likewise.
+ 	* javax/swing/JToggleButton.java: Likewise.
+ 	* javax/swing/JToolTip.java: Likewise.
+ 	* javax/swing/JViewPort.java: Likewise.
+ 	* javax/swing/LayoutFocusTraversalPolicy.java: Likewise.
+ 	* javax/swing/SpinnerDateModel.java: Likewise.
+ 	* javax/swing/TransferHandler.java: Likewise.
+ 
+ 2005-05-27  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (setFont): Handle
+ 	lightweight peers specially.
+ 
+ 2005-05-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* omg/org/CORBA/ORB.java (create_recursive_sequence_tc): New method.
+ 
+ 2005-05-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* omg/org/CORBA/DynValue.java: New interface.
+ 
+ 2005-05-27  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* omg/org/CORBA/package.html: Documentation update.
+ 
+ 2005-05-26  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ORB.java (create_basic_dyn_any): 
+ 	Declare it may throw an InconsistentTypeCode.
+ 	(create_dyn_any): Remove wrong exception declaration.
+ 	(create_operation_list, create_abstract_interface_tc, 
+ 	create_native_tc, get_service_information): Implementing these methods.
+ 	* org/omg/CORBA/ServerRequest.java (result, except, params, op_name): 
+ 	Marking deprecated.
+ 
+ 2005-05-26  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java:
+ 	(connect()): Reverted the removal of the exception
+ 	with 404s.
+ 
+ 2005-05-26  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/net/URI.java:
+ 	(getURIGroup(String)): Correctly handle the difference
+ 	between null and undefined optional values.
+ 	(relativize(java.net.URI)): Corrected documentation.
+ 	
+ 2005-05-26  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/xml/transform/StreamSerializer.java:
+ 	(serialize(org.w3c.dom.Node,java.io.OutputStream,
+ 	boolean)): Add missing 'DOCTYPE' keyword to
+ 	DocumentType node output.
+ 	
+ 2005-05-26  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java:
+ 	(connect()): Fixed a null pointer exception with 304
+ 	responses and an inappropriate exception with 404s.
+ 	* gnu/java/net/protocol/http/Request.java:
+ 	(readResponse(java.io.LineInputStream)): Fixed a
+ 	fruitless attempt to read the non-existant body
+ 	of a 304 response.
+ 
+ 2005-05-25  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* examples/Makefile.am:
+ 	Fix command-line options for ecj.
+ 	* lib/Makefile.am:
+ 	Added a META-INF directory structure to glibj.zip.
+ 	* resource/META-INF/services/javax.xml.parsers.DocumentBuilderFactory,
+ 	resource/META-INF/services/javax.xml.parsers.SAXParserFactory,
+ 	resource/META-INF/services/javax.xml.parsers.TransformerFactory,
+ 	resource/META-INF/services/org.xml.sax.driver:
+ 	Properties for the XML facilities.
+ 
+ 2005-05-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(create): Prevent min == max scrollbars.
+ 	(setValues): Likewise.
+ 
+ 	* java/awt/Component.java (enableInputMethods): Implement.
+ 
+ 2005-05-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/TRANSIENT.java (serialVersionUID): Added 1.4 SVUID.
+ 
+ 2005-05-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ValueBaseHelper.java,
+ 	org/omg/CORBA/ValueBaseHolder.java,
+ 	org/omg/CORBA/portable/ValueBase.java: New files.
+ 	* gnu/CORBA/gnuAny.java (insert_Value, extract_Value): 
+ 	Implemented methods. 
+ 
+ 2005-05-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* NEWS: Add entry describing GTK scrollbar peer change.
+ 	* INSTALL: Bump GTK requirement to 2.6.x.
+ 
+ 2005-05-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ORB.java (create_dyn_any, create_dyn_array,
+ 	create_dyn_enum, create_dyn_sequence, create_dyn_struct, 
+ 	create_dyn_union, create_policy): Declaring they may throw an
+ 	exceptions.
+ 	* org/omg/CORBA/DefinitionKind.java: Making fields final and inherit
+ 	from IDLEntity, Serializable.
+ 	* org/omg/CORBA/IRObject.java: Inherit from 
+ 	org.omg.CORBA.Object, Serializable, IDLEntity.
+ 
+ 2005-05-25  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Connected_objects.java (cObject, getKey, add, get,
+ 	entrySet, remove),
+ 	* gnu/CORBA/Functional_ORB.java (portServer, getFreePort, connect,
+ 	startService, destroy, disconnect, object_to_string, run, shutdown, 
+ 	find_connected_object, createIOR, finalize): Implemented 
+ 	listening on different ports for different objects.
+ 
+ 2005-05-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	(constructor): Removed model creation.
+ 	* javax/swing/JButton.java:
+ 	(constructor): Added model creation.
+ 	* javax/swing/JMenuItem.java:
+ 	(init): Added model creation.
+ 
+ 2005-05-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	(static getLayer): Add cast to force a call to the instance method
+ 	getLayer().
+ 	(getLayeredPaneAbove): Added and implemented method.
+ 	* javax/swing/JInternalFrame.java
+ 	(getLayer): Add cast to force a call to the instance method
+ 	getLayer() of JLayeredPane.
+ 
+ 2005-05-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(paint): Added check to make sure the split pane divider has
+ 	a valid location.
+ 
+ 2005-05-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(connetJObject): Removed.
+ 
+ 2005-05-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Locale.java (getISOStrings):
+ 	Re-implemented for locale properties files.
+ 
+ 2005-05-24  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(connectSignals): Connect to new change-value signal.
+ 	(post_change_event): Remove signal handler.
+ 	(slider_moved_cb): New signal handler.
+ 	* configure.ac: Require gtk+-2.0 >= 2.6.
+ 
+ 2005-05-24  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/portable/Delegate.java (equals): Compare parameters.
+ 
+ 2005-05-24  Gary Benson  <gbenson@redhat.com>
+ 
+ 	* java/text/MessageFormat.java (MessageFormatElement.setLocale):
+ 	Handle DateFormat.DEFAULT case correctly.
+ 
+ 2005-05-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/regex/Pattern.java (split): Assign value of variable
+ 	matched outside while statement.
+ 	* gnu/regexp/RE.java (getCharUnit): Assign value of unit.bk variable
+ 	outside if statement.
+ 	* gnu/CORBA/bufferedResponseHandler.java (createReply): Assign values
+ 	from static class type constants.
+ 	* gnu/CORBA/IOR.java (_write_no_endian): Likewise.
+ 	* gnu/CORBA/Functional_ORB.java (respond_to_client): Likewise.
+ 	(serve): Likewise.
+ 
+ 2005-05-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/Makefile.am (FOUND_JIKES): Add +Pno-switchcheck.
+ 
+ 2005-05-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Asynchron.java: New file.
+ 	* org/omg/CORBA/ORB.java (send_multiple_requests_oneway,
+ 	send_multiple_requests_deferred, poll_next_response, 
+ 	get_next_response, perform_work, work_pending): New methods.
+ 	* gnu/CORBA/gnuRequest.java (send_deferred, send_oneway):
+ 	Launch the submission process in a separate thread.
+ 	* org/omg/CORBA/portable/ObjectImpl.java (hashCode): Removing
+ 	redundant method.
+ 	* gnu/CORBA/Functional_ORB.java (send_multiple_requests_oneway,
+ 	send_multiple_requests_deferred, poll_next_response,
+ 	get_next_response, perform_work, work_pending): New methods.
+ 	* gnu/CORBA/Restricted_ORB.java (send_multiple_requests_oneway,
+ 	send_multiple_requests_deferred, poll_next_response,
+ 	get_next_response, perform_work, work_pending): New methods.	
+ 
+ 2005-05-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/hacking.texinfo (Source Code Style Guide): Document UTF-8
+ 	use.
+ 	* lib/Makefile.am (GCJF): New variable.
+ 	(JAVAC): Use it.  Add -encoding option where needed.
+ 
+ 2005-05-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/NameValuePair.java: Inherit from Serializable, IDLEntity.
+ 	* org/omg/CORBA/SetOverrideType.java (constuctor): Making protected.
+ 	* org/omg/CORBA/DynFixed.java (set_value): Declare it may throw an 
+ 	InvalidValue.
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(getPreferredScrollableViewportSize): Implemented this method.
+ 	(getScrollableUnitIncrement): Implemented this method.
+ 	(getScrollableBlockIncrement): Implemented this method.
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(getPreferredScrollableViewportSize): Added and implemented
+ 	new method.
+ 	(getScrollableUnitIncrement): Added and implemented new
+ 	method.
+ 
+ 2005-05-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/DefinitionKind.java,
+ 	org/omg/CORBA/IRObject.java,
+ 	org/omg/CORBA/IRObjectOperations.java,
+ 	org/omg/CORBA/IDLTypeOperations.java: New files.
+ 	* org/omg/CORBA/IDLType.java: Inherit from IDLTypeOperations.
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	(getLayer): Added and implemented new (static) method.
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JFileChooser.java
+ 	(constructor(String, FileSystemView)): Added constructor.
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JViewport.java
+ 	(createLayoutManager): Added and implemented new method.
+ 	(constructor): Set the LayoutManager that is created by
+ 	createLayoutManager().
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(installUI): Removed setLayout(..). This is moved into
+ 	the constructor of JViewport (as the API docs suggest).
+ 
+ 2005-05-23  Audrius Meskauskas  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ORB.java (create_context_list, create_basic_dyn_any,
+ 	create_dyn_any, create_dyn_array,  create_dyn_enum,
+ 	create_dyn_sequence, create_dyn_struct, create_dyn_union,
+ 	create_policy, get_current): New 
+ 	methods. 
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JViewport.java:
+ 	(ViewListener): Added and implemented inner class.
+ 	(createViewListener): Added and implemented new method.
+ 	(setView): Add and remove ViewListener to/from the view component.
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(fireValueChanged(boolean)): Added and implemented this method.
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SwingUtilities.java:
+ 	(getWindowAncestor): Added and implemented this method.
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JFileChooser.java:
+ 	Fixed the values of several public constant fields.
+ 
+ 2005-05-23  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* doc/www.gnu.org/tasks.wml: Improved text of the CORBA task.
+ 
+ 2005-05-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Uncommented code that has accidentally
+ 	been commented out.
+ 
+ 2005-05-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/BoxLayout.java
+ 	(maximumLayoutSize): Added checks for overflow. This is necessary
+ 	because some components have maximumSize of Integer.MAX_VALUE,
+ 	that would cause an overflow if summed up.
+ 
+ 2005-05-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/tree/TreePath.java
+ 	(getParentPath): Return null if this path only has no parent.
+ 
+ 2005-05-22  Roman Kennke  <roman@kennke.org>
+ 
+         * javax/swing/plaf/basic/BasicTextUI.java:
+         (getMaximumSize): Fixed comment.
+ 
+ 2005-05-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/tree/TreePath.java:
+ 	Reformatted this file in order to match our coding style.
+ 
+ 2005-05-22  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ServerRequest.java,
+ 	org/omg/CORBA/DynamicImplementation.java:
+ 	New files.
+ 
+ 2005-05-22  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* gnu/java/security/provider/SHA1PRNG.java
+ 	(SEED_SIZE, DATA_SIZE): new constants.  Use them instead of
+ 	magic numbers.
+ 	(SHA1PRNG) Added documentation.
+ 
+ 2005-05-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(getMaximumSize): Implemented this method.
+ 
+ 2005-05-22  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/cdrOutput.java (write_octet_array): Removing
+ 	redundant loop.
+ 
+ 2005-05-22  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ServiceInformation.java,
+ 	org/omg/CORBA/ServiceInformationHelper.java,
+ 	org/omg/CORBA/ServiceInformationHolder: New files.
+ 
+ 2005-05-22  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/ServiceDetail.java,
+ 	org/omg/CORBA/ServiceDetailHelper.java,
+ 	gnu/CORBA/ServiceDetailHolder.java: New files.
+ 
+ 2005-05-21  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/ObjectCreator.java: Use gnu/CORBA namespace.
+ 
+ 2005-05-21  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/universalHolder.java: New file.
+ 	* gnu/CORBA/gnuAny.java (create_input_stream,
+ 	read_value): Use the universalHolder.
+ 	* gnu/CORBA/CDR/aligningInputStream.java
+ 	(getBuffer): New method.
+ 
+ 2005-05-21  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* java/lang/mprec.c (mult, lshift, b2d, d2b): Add parenthesis to
+ 	avoid warnings.
+ 
+ 2005-05-21  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* NEWS: document VM interface changes.
+ 	* java/lang/ClassLoader.java: (vmdata): add
+ 	* vm/reference/java/lang/VMClass.java: (getModifiers()): add
+ 	new parameter ignoreInnerClassesAttrib
+ 	* vm/reference/java/lang/VMClassLoader.java: (defineClass()): remove
+ 	deprecated version (getPrimitiveClass(String)): remove
+ 	(getPrimitiveClass(char)): make native (loadClass()): make native
+ 	* vm/reference/java/lang/VMThread.java: (vmdata): add
+ 	(countStackFrames()): make native
+ 	* vm/reference/java/lang/VMThrowable.java: (vmdata): add
+ 	(fillInStackTrace()): make native
+ 	(getStackTrace()): make native
+ 	* vm/reference/java/lang/reflect/Constructor.java:
+ 	(parameterTypes, exceptionTypes): remove
+ 	(getParameterTypes(), getExceptionTypes()): make native
+ 
+ 2005-05-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* resource/gnu/java/locale/LocaleInformation_as.properties,
+ 	resource/gnu/java/locale/LocaleInformation_bg.properties,
+ 	resource/gnu/java/locale/LocaleInformation_cs.properties,
+ 	resource/gnu/java/locale/LocaleInformation_da.properties,
+ 	resource/gnu/java/locale/LocaleInformation_de.properties,
+ 	resource/gnu/java/locale/LocaleInformation_dz.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_GB.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_IE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_SG.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fa.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fa_AF.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fi.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fr.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ga.properties,
+ 	resource/gnu/java/locale/LocaleInformation_hi.properties,
+ 	resource/gnu/java/locale/LocaleInformation_it.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ja.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ko.properties,
+ 	resource/gnu/java/locale/LocaleInformation_mr.properties,
+ 	resource/gnu/java/locale/LocaleInformation_mt.properties,
+ 	resource/gnu/java/locale/LocaleInformation_nb.properties,
+ 	resource/gnu/java/locale/LocaleInformation_nl.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ps.properties,
+ 	resource/gnu/java/locale/LocaleInformation_pt.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sr.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sr_Latn.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sv.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sw.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ta.properties,
+ 	resource/gnu/java/locale/LocaleInformation_uz_AF.properties,
+ 	resource/gnu/java/locale/LocaleInformation_zh.properties,
+ 	resource/gnu/java/locale/LocaleInformation_zh_Hant.properties:
+ 	Regenerated with newer gnu.localegen to fix newline bug.
+ 
+ 2005-05-21  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/DateFormatSymbols.java:
+ 	(getStringArray(java.util.ResourceBundle,String)):
+ 	Fixed parsing of new property files.
+ 	(getZoneStrings(java.util.ResourceBundle)):
+ 	Likewise.
+ 	
+ 2005-05-21  Dalibor Topic  <robilad@kaffe.org>
+ 
+         * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+         (area_updated): Delete jpixels reference after use to avoid wasting references.
+ 
+ 2005-05-20  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+     * doc/www.gnu.org/tasks.wml: Adding CORBA task.
+ 
+ 2005-05-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java:
+ 	Documentation fixes.
+ 
+ 2005-05-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(CaretBlinkTimer): Added inner class to make caret blinking.
+ 	(constructor): Create one instance of CaretBlinkTimer.
+ 	(setEditable): Switch caret on and off depending on the editable
+ 	property.
+ 	(setCare): Register caret with the CaretBlinkTimer.
+ 	* javax/swing/text/DefaultCaret.java:
+ 	Set a good blink rate of 500ms.
+ 
+ 2005-05-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JEditorPane.java:
+ 	(processComponentKeyEvent): Removed this method. This blocks
+ 	key events from beeing delivered and is not in the API.
+ 	(processKeyEvent): Removed this method. This blocks
+ 	key events from beeing delivered and is not in the API.
+ 
+ 2005-05-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java
+ 	(processKeyEvent): Properly swallow KEY_TYPED events after
+ 	a KEY_PRESSED event for a focusTraversalKey has been received.
+ 	Otherwise the focusTraversalKey (e.g. a TAB) would end up
+ 	beeing delivered to the focused component.
+ 
+ 2005-05-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Component.java
+ 	(dispatchEventImpl): Let MouseEvents trigger a focus change
+ 	on lightweight components.
+ 
+ 2005-05-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextField.java
+ 	(constructor): Set default value for the horizontalAlignment
+ 	property.
+ 
+ 2005-05-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(setButtonIcons): Added checks for null references.
+ 
+ 2005-05-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JProgressBar.java
+ 	(paintBorder): Check if border is null before trying to paint it.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	(paint): Don't paint the border here. This would lead to the border
+ 	beeing painted twice.
+ 
+ 2005-05-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(convertPoint): Check for visibility of source and destination
+ 	before calling convertPointToScreen or convertPointFromScreen.
+ 
+ 2005-05-20  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/SetOverrideType.java (_ADD_OVERRIDE, _SET_OVERRIDE),
+ 	org/omg/CORBA/CompletionStatus.java
+ 	(_COMPLETED_YES, _COMPLETED_NO, _COMPLETED_MAYBE): Making public.
+ 	* org/omg/CORBA/ValueMember.java: Inherit from 
+ 	org.omg.CORBA.portable.IDLEntity.
+ 
+ 2005-05-20  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/portable/ApplicationException.java,
+ 	org/omg/CORBA/portable/RemarshalException.java:
+ 	Adding serialVersionUID.
+ 	*org/omg/CORBA/portable/OutputStream.java(write_Context):
+ 	Making concrete.
+ 	org/omg/CORBA/portable/ServantObject.java (servant):
+ 	Fixing typo in the field name.
+ 
+ 2005-05-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/generate-locale-list.sh:
+ 	Use the new locale properties files.
+ 
+ 2005-05-20  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* javax/swing/SizeRequirements.java: Removed two non-UTF8 chars.
+ 
+ 2005-05-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/net/URI.java:
+ 	Added more documentation.
+ 	(RFC2396_MARK): Removed.
+ 	(RFC2396_UNRESERVED): Changed to RFC3986_UNRESERVED and updated.
+ 	(RFC2396_REG_NAME): Changed to RFC3986_REG_NAME and updated.
+ 	(RFC2396_PCHAR): Changed to RFC3986_PCHAR and updated.
+ 	(RFC2396_SEGMENT): Changed to RFC3986_SEGMENT and updated.
+ 	(RFC2396_PATH_SEGMENTS): Changed to RFC3986_PATH_SEGMENTS.
+ 	(RFC3986_UNRESERVED): New field.
+ 	(RFC3986_SSP): New field.
+ 	(RFC3986_HOST): New field.
+ 	(RFC3986_USERINFO): New field.
+ 	(static): New initializer to initialize patterns with class.
+ 	(parseURI()): Moved authority parsing to parseServerAuthority().
+ 	(unquote(String)): Removed invalid exception for non-ASCII chars.
+ 	(quote(String)): Implemented.
+ 	(quoteAuthority(String)): Adapted to use new fields.
+ 	(quote(String,String)): Moved escaping of characters to another
+ 	method.
+ 	(quoteHost(String)): Implemented.
+ 	(quotePath(String)): Adapted to use new fields.
+ 	(quoteUserInfo(String)): Implemented.
+ 	(parseServerAuthority()): Implemented.
+ 	(normalize()): Implemented.
+ 	(normalizePath(String)): Implemented as part of normalize().
+ 	(removeLastSegment(StringBuffer)): Likewise.
+ 	(relativize(java.net.URI)): Implemented.
+ 	(equals(Object)): Implemented.
+ 	(hashCode()): Implemented.
+ 	(compareTo(Object)): Implemented.
+ 	(compareFragments(java.net.URI)): Implemented.
+ 	(toString()): Use fields directly.
+ 	(toASCIIString()): Implemented.
+ 	(escapeCharacters(String)): Implemented to escape non-ASCII characters.
+ 
+ 2005-05-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SizeRequirements.java
+ 	(constructors): Implemented.
+ 	(getTiledSizeRequirements): Implemented.
+ 	(calculateTiledPositions): Implemented.
+ 
+ 2005-05-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SizeRequirements.java:
+ 	Added API documentation for this class.
+ 
+ 2005-05-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SizeRequirements.java:
+ 	Reformatted file to meet our coding standards.
+ 
+ 2005-05-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(getUIInputMap): Return the InputMap that has been set by
+ 	the UI of the component, not the component's own InputMap.
+ 	(getUIActionMap): Return the ActionMap that has been set by
+ 	the UI of the component, not the component's own ActionMap.
+ 
+ 2005-05-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/FocusManager.java:
+ 	Reformatted this file to match our coding standard.
+ 
+ 2005-05-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/BasicFileChooserUI.java:
+ 	(installComponents): Include parents ComboBox. This has been
+ 	commented out because ComboBox was broken (see previous entry).
+ 
+ 2005-05-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalComboBoxUI.java
+ 	(createUI): Do not share instances of this UI class between
+ 	different JComboBoxes.
+ 
+ 2005-05-19  Kim Ho  <kho@luxsci.net>
+ 
+ 	* javax/swing/DefaultComboBoxModel.java:
+ 	(addElement): Set index to be the element of the added item.
+ 	(removeAllElements): Clear before retrieving new size. Use
+ 	correct size.
+ 	* javax/swing/JFileChooser.java: Implemented.
+ 	* javax/swing/filechooser/FileSystemView.java: Implemented.
+ 	* javax/swing/filechooser/UnixFileSystemView.java: New file.
+ 	Implemented.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java:
+ 	(intervalAdded): Set initial index to start.
+ 	* javax/swing/plaf/basic/BasicDirectoryModel.java: New file.
+ 	Implemented.
+ 	* javax/swing/plaf/basic/BasicFileChooserUI.java: New file.
+ 	Implemented.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Add FileChooserUI.
+ 	Commented out GIF properties for FileChooser stuff.
+ 
+ 2005-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* lib/Makefile.am: Remove accidentally commited -nowarn option for
+ 	jikes.
+ 
+ 2005-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/DateFormatSymbols.java
+ 	(getStringArray): New method.
+ 	(getZoneStrings): Likewise.
+ 	(DateFormatSymbols): Load symbols from properties files.
+ 	* java/util/Locale.java
+ 	(getDisplayLanguage): Handle new way to load language names.
+ 	(getDisplayCountry): Handle new way to load territory names.
+ 	(getDisplayVariant): Handle new way to load variant names.
+ 	* lib/Makefile.am, lib/gen-classlist.sh.in:
+ 	No need to special case classes from gnu.java.locale anymore.
+ 	* scripts/generate-locale-list.sh:
+ 	Generate list from the new properties files.
+ 	* LICENSE: Added license of locale data properties files.
+ 
+ 2005-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* resource/gnu/java/locale/LocaleInformation_aa_DJ.properties,
+ 	resource/gnu/java/locale/LocaleInformation_aa_ER.properties,
+ 	resource/gnu/java/locale/LocaleInformation_aa_ER_SAAHO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_aa_ET.properties,
+ 	resource/gnu/java/locale/LocaleInformation_aa.properties,
+ 	resource/gnu/java/locale/LocaleInformation_af.properties,
+ 	resource/gnu/java/locale/LocaleInformation_af_ZA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_am_ET.properties,
+ 	resource/gnu/java/locale/LocaleInformation_am.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_DZ.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_IQ.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_JO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_KW.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_LB.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_LY.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_MA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_QA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_SA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_SY.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_TN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ar_YE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_as_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_as.properties,
+ 	resource/gnu/java/locale/LocaleInformation_az_Cyrl.properties,
+ 	resource/gnu/java/locale/LocaleInformation_be_BY.properties,
+ 	resource/gnu/java/locale/LocaleInformation_be.properties,
+ 	resource/gnu/java/locale/LocaleInformation_bg_BG.properties,
+ 	resource/gnu/java/locale/LocaleInformation_bg.properties,
+ 	resource/gnu/java/locale/LocaleInformation_bn_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_bn.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ca_ES.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ca.properties,
+ 	resource/gnu/java/locale/LocaleInformation_cs_CZ.properties,
+ 	resource/gnu/java/locale/LocaleInformation_cs.properties,
+ 	resource/gnu/java/locale/LocaleInformation_cy_GB.properties,
+ 	resource/gnu/java/locale/LocaleInformation_cy.properties,
+ 	resource/gnu/java/locale/LocaleInformation_da_DK.properties,
+ 	resource/gnu/java/locale/LocaleInformation_da.properties,
+ 	resource/gnu/java/locale/LocaleInformation_de_AT.properties,
+ 	resource/gnu/java/locale/LocaleInformation_de_BE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_de_CH.properties,
+ 	resource/gnu/java/locale/LocaleInformation_de_DE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_de_LI.properties,
+ 	resource/gnu/java/locale/LocaleInformation_de_LU.properties,
+ 	resource/gnu/java/locale/LocaleInformation_de.properties,
+ 	resource/gnu/java/locale/LocaleInformation_dv_MV.properties,
+ 	resource/gnu/java/locale/LocaleInformation_dv.properties,
+ 	resource/gnu/java/locale/LocaleInformation_dz_BT.properties,
+ 	resource/gnu/java/locale/LocaleInformation_dz.properties,
+ 	resource/gnu/java/locale/LocaleInformation_el_GR.properties,
+ 	resource/gnu/java/locale/LocaleInformation_el.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_AS.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_AU.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_BE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_BW.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_BZ.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_CA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_GB.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_GU.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_HK.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_IE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_MH.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_MP.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_MT.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_NZ.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_PH.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_PK.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_SG.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_UM.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_US_POSIX.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_US.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_VI.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_ZA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_en_ZW.properties,
+ 	resource/gnu/java/locale/LocaleInformation_eo.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_AR.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_BO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_CL.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_CO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_CR.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_DO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_EC.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_ES.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_GT.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_HN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_MX.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_NI.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_PA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_PE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_PR.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_PY.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_SV.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_US.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_UY.properties,
+ 	resource/gnu/java/locale/LocaleInformation_es_VE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_et_EE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_et.properties,
+ 	resource/gnu/java/locale/LocaleInformation_eu_ES.properties,
+ 	resource/gnu/java/locale/LocaleInformation_eu.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fa_AF.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fa_IR.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fa.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fi_FI.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fi.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fo_FO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fo.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fr_BE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fr_CA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fr_CH.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fr_LU.properties,
+ 	resource/gnu/java/locale/LocaleInformation_fr.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ga_IE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ga.properties,
+ 	resource/gnu/java/locale/LocaleInformation_gl_ES.properties,
+ 	resource/gnu/java/locale/LocaleInformation_gl.properties,
+ 	resource/gnu/java/locale/LocaleInformation_gu_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_gu.properties,
+ 	resource/gnu/java/locale/LocaleInformation_gv_GB.properties,
+ 	resource/gnu/java/locale/LocaleInformation_gv.properties,
+ 	resource/gnu/java/locale/LocaleInformation_he_IL.properties,
+ 	resource/gnu/java/locale/LocaleInformation_he.properties,
+ 	resource/gnu/java/locale/LocaleInformation_hi_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_hi.properties,
+ 	resource/gnu/java/locale/LocaleInformation_hr.properties,
+ 	resource/gnu/java/locale/LocaleInformation_hu_HU.properties,
+ 	resource/gnu/java/locale/LocaleInformation_hu.properties,
+ 	resource/gnu/java/locale/LocaleInformation_hy_AM.properties,
+ 	resource/gnu/java/locale/LocaleInformation_hy_AM_REVISED.properties,
+ 	resource/gnu/java/locale/LocaleInformation_hy.properties,
+ 	resource/gnu/java/locale/LocaleInformation_id_ID.properties,
+ 	resource/gnu/java/locale/LocaleInformation_id.properties,
+ 	resource/gnu/java/locale/LocaleInformation_is_IS.properties,
+ 	resource/gnu/java/locale/LocaleInformation_is.properties,
+ 	resource/gnu/java/locale/LocaleInformation_it_CH.properties,
+ 	resource/gnu/java/locale/LocaleInformation_it_IT.properties,
+ 	resource/gnu/java/locale/LocaleInformation_it.properties,
+ 	resource/gnu/java/locale/LocaleInformation_iu.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ja_JP.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ja.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ka.properties,
+ 	resource/gnu/java/locale/LocaleInformation_kk_KZ.properties,
+ 	resource/gnu/java/locale/LocaleInformation_kk.properties,
+ 	resource/gnu/java/locale/LocaleInformation_kl_GL.properties,
+ 	resource/gnu/java/locale/LocaleInformation_kl.properties,
+ 	resource/gnu/java/locale/LocaleInformation_km_KH.properties,
+ 	resource/gnu/java/locale/LocaleInformation_km.properties,
+ 	resource/gnu/java/locale/LocaleInformation_kn_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_kn.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ko_KR.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ko.properties,
+ 	resource/gnu/java/locale/LocaleInformation_kw_GB.properties,
+ 	resource/gnu/java/locale/LocaleInformation_kw.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ky.properties,
+ 	resource/gnu/java/locale/LocaleInformation_lo_LA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_lo.properties,
+ 	resource/gnu/java/locale/LocaleInformation_lt_LT.properties,
+ 	resource/gnu/java/locale/LocaleInformation_lt.properties,
+ 	resource/gnu/java/locale/LocaleInformation_lv_LV.properties,
+ 	resource/gnu/java/locale/LocaleInformation_lv.properties,
+ 	resource/gnu/java/locale/LocaleInformation_mk.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ml_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ml.properties,
+ 	resource/gnu/java/locale/LocaleInformation_mn_MN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_mn.properties,
+ 	resource/gnu/java/locale/LocaleInformation_mr_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_mr.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ms_BN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ms_MY.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ms.properties,
+ 	resource/gnu/java/locale/LocaleInformation_mt_MT.properties,
+ 	resource/gnu/java/locale/LocaleInformation_mt.properties,
+ 	resource/gnu/java/locale/LocaleInformation_nb_NO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_nb.properties,
+ 	resource/gnu/java/locale/LocaleInformation_nl_BE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_nl_NL.properties,
+ 	resource/gnu/java/locale/LocaleInformation_nl.properties,
+ 	resource/gnu/java/locale/LocaleInformation_nn_NO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_nn.properties,
+ 	resource/gnu/java/locale/LocaleInformation_om_ET.properties,
+ 	resource/gnu/java/locale/LocaleInformation_om_KE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_om.properties,
+ 	resource/gnu/java/locale/LocaleInformation_or_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_or.properties,
+ 	resource/gnu/java/locale/LocaleInformation_pa_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_pa.properties,
+ 	resource/gnu/java/locale/LocaleInformation_pl_PL.properties,
+ 	resource/gnu/java/locale/LocaleInformation_pl.properties,
+ 	resource/gnu/java/locale/LocaleInformation.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ps_AF.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ps.properties,
+ 	resource/gnu/java/locale/LocaleInformation_pt_BR.properties,
+ 	resource/gnu/java/locale/LocaleInformation_pt.properties,
+ 	resource/gnu/java/locale/LocaleInformation_pt_PT.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ro.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ro_RO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ru.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ru_RU.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ru_UA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sa_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sa.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sk.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sk_SK.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sl.properties,
+ 	resource/gnu/java/locale/LocaleInformation_so_DJ.properties,
+ 	resource/gnu/java/locale/LocaleInformation_so_ET.properties,
+ 	resource/gnu/java/locale/LocaleInformation_so_KE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_so.properties,
+ 	resource/gnu/java/locale/LocaleInformation_so_SO.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sq_AL.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sq.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sr_Latn.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sr.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sv_FI.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sv.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sv_SE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sw_KE.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sw.properties,
+ 	resource/gnu/java/locale/LocaleInformation_sw_TZ.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ta_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ta.properties,
+ 	resource/gnu/java/locale/LocaleInformation_te_IN.properties,
+ 	resource/gnu/java/locale/LocaleInformation_te.properties,
+ 	resource/gnu/java/locale/LocaleInformation_th.properties,
+ 	resource/gnu/java/locale/LocaleInformation_th_TH.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ti_ER.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ti_ET.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ti.properties,
+ 	resource/gnu/java/locale/LocaleInformation_tr.properties,
+ 	resource/gnu/java/locale/LocaleInformation_tr_TR.properties,
+ 	resource/gnu/java/locale/LocaleInformation_tt.properties,
+ 	resource/gnu/java/locale/LocaleInformation_tt_RU.properties,
+ 	resource/gnu/java/locale/LocaleInformation_uk.properties,
+ 	resource/gnu/java/locale/LocaleInformation_uk_UA.properties,
+ 	resource/gnu/java/locale/LocaleInformation_ur.properties,
+ 	resource/gnu/java/locale/LocaleInformation_uz_AF.properties,
+ 	resource/gnu/java/locale/LocaleInformation_uz.properties,
+ 	resource/gnu/java/locale/LocaleInformation_vi.properties,
+ 	resource/gnu/java/locale/LocaleInformation_zh_CN_Hans.properties,
+ 	resource/gnu/java/locale/LocaleInformation_zh_Hant.properties,
+ 	resource/gnu/java/locale/LocaleInformation_zh_HK_Hant.properties,
+ 	resource/gnu/java/locale/LocaleInformation_zh_MO_Hant.properties,
+ 	resource/gnu/java/locale/LocaleInformation_zh.properties,
+ 	resource/gnu/java/locale/LocaleInformation_zh_SG_Hans.properties,
+ 	resource/gnu/java/locale/LocaleInformation_zh_TW_Hant.properties:
+ 	New files.
+ 	* gnu/java/locale/LocaleInformation_aa_DJ.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER_SAAHO.java,
+ 	gnu/java/locale/LocaleInformation_aa_ET.java,
+ 	gnu/java/locale/LocaleInformation_aa.java,
+ 	gnu/java/locale/LocaleInformation_af.java,
+ 	gnu/java/locale/LocaleInformation_af_ZA.java,
+ 	gnu/java/locale/LocaleInformation_am_ET.java,
+ 	gnu/java/locale/LocaleInformation_am.java,
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java,
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_as_IN.java,
+ 	gnu/java/locale/LocaleInformation_as.java,
+ 	gnu/java/locale/LocaleInformation_az_Cyrl.java,
+ 	gnu/java/locale/LocaleInformation_az.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_be.java,
+ 	gnu/java/locale/LocaleInformation_bg_BG.java,
+ 	gnu/java/locale/LocaleInformation_bg.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_bn.java,
+ 	gnu/java/locale/LocaleInformation_br_FR.java,
+ 	gnu/java/locale/LocaleInformation_bs_BA.java,
+ 	gnu/java/locale/LocaleInformation_byn_ER.java,
+ 	gnu/java/locale/LocaleInformation_byn.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_ca.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_cy.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_LI.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_dv.java,
+ 	gnu/java/locale/LocaleInformation_dv_MV.java,
+ 	gnu/java/locale/LocaleInformation_dz_BT.java,
+ 	gnu/java/locale/LocaleInformation_dz.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_el.java,
+ 	gnu/java/locale/LocaleInformation_en_AS.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BE.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_BZ.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_DK.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_GU.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_en_MH.java,
+ 	gnu/java/locale/LocaleInformation_en_MP.java,
+ 	gnu/java/locale/LocaleInformation_en_MT.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_PK.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_UM.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_US_POSIX.java,
+ 	gnu/java/locale/LocaleInformation_en_VI.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_eo.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_et.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_eu.java,
+ 	gnu/java/locale/LocaleInformation_fa_AF.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fa.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fo.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_ga.java,
+ 	gnu/java/locale/LocaleInformation_gez_ER.java,
+ 	gnu/java/locale/LocaleInformation_gez_ET.java,
+ 	gnu/java/locale/LocaleInformation_gez.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gl.java,
+ 	gnu/java/locale/LocaleInformation_gu_IN.java,
+ 	gnu/java/locale/LocaleInformation_gu.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_gv.java,
+ 	gnu/java/locale/LocaleInformation_haw.java,
+ 	gnu/java/locale/LocaleInformation_haw_US.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_he.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hi.java,
+ 	gnu/java/locale/LocaleInformation_hr.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_hu.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM_REVISED.java,
+ 	gnu/java/locale/LocaleInformation_hy.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_id.java,
+ 	gnu/java/locale/LocaleInformation_is_IS.java,
+ 	gnu/java/locale/LocaleInformation_is.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_iu.java,
+ 	gnu/java/locale/LocaleInformation_iw_IL.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation.java,
+ 	gnu/java/locale/LocaleInformation_ka.java,
+ 	gnu/java/locale/LocaleInformation_kk.java,
+ 	gnu/java/locale/LocaleInformation_kk_KZ.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_kl.java,
+ 	gnu/java/locale/LocaleInformation_km.java,
+ 	gnu/java/locale/LocaleInformation_km_KH.java,
+ 	gnu/java/locale/LocaleInformation_kn_IN.java,
+ 	gnu/java/locale/LocaleInformation_kn.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_kok_IN.java,
+ 	gnu/java/locale/LocaleInformation_kok.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_kw.java,
+ 	gnu/java/locale/LocaleInformation_ky.java,
+ 	gnu/java/locale/LocaleInformation_lo.java,
+ 	gnu/java/locale/LocaleInformation_lo_LA.java,
+ 	gnu/java/locale/LocaleInformation_lt.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mk.java,
+ 	gnu/java/locale/LocaleInformation_ml_IN.java,
+ 	gnu/java/locale/LocaleInformation_ml.java,
+ 	gnu/java/locale/LocaleInformation_mn.java,
+ 	gnu/java/locale/LocaleInformation_mn_MN.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_mr.java,
+ 	gnu/java/locale/LocaleInformation_ms_BN.java,
+ 	gnu/java/locale/LocaleInformation_ms.java,
+ 	gnu/java/locale/LocaleInformation_ms_MY.java,
+ 	gnu/java/locale/LocaleInformation_mt.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nb_NO.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java,
+ 	gnu/java/locale/LocaleInformation_nn.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_no_NO.java,
+ 	gnu/java/locale/LocaleInformation_oc_FR.java,
+ 	gnu/java/locale/LocaleInformation_om_ET.java,
+ 	gnu/java/locale/LocaleInformation_om.java,
+ 	gnu/java/locale/LocaleInformation_om_KE.java,
+ 	gnu/java/locale/LocaleInformation_or_IN.java,
+ 	gnu/java/locale/LocaleInformation_or.java,
+ 	gnu/java/locale/LocaleInformation_pa_IN.java,
+ 	gnu/java/locale/LocaleInformation_pa.java,
+ 	gnu/java/locale/LocaleInformation_pl.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_ps_AF.java,
+ 	gnu/java/locale/LocaleInformation_ps.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_sa_IN.java,
+ 	gnu/java/locale/LocaleInformation_sa.java,
+ 	gnu/java/locale/LocaleInformation_se_NO.java,
+ 	gnu/java/locale/LocaleInformation_sid_ET.java,
+ 	gnu/java/locale/LocaleInformation_sid.java,
+ 	gnu/java/locale/LocaleInformation_sk.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sl.java,
+ 	gnu/java/locale/LocaleInformation_so_DJ.java,
+ 	gnu/java/locale/LocaleInformation_so_ET.java,
+ 	gnu/java/locale/LocaleInformation_so.java,
+ 	gnu/java/locale/LocaleInformation_so_KE.java,
+ 	gnu/java/locale/LocaleInformation_so_SO.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sq.java,
+ 	gnu/java/locale/LocaleInformation_sr.java,
+ 	gnu/java/locale/LocaleInformation_sr_Latn.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_sw.java,
+ 	gnu/java/locale/LocaleInformation_sw_KE.java,
+ 	gnu/java/locale/LocaleInformation_sw_TZ.java,
+ 	gnu/java/locale/LocaleInformation_syr.java,
+ 	gnu/java/locale/LocaleInformation_syr_SY.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_ta.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_te.java,
+ 	gnu/java/locale/LocaleInformation_tg_TJ.java,
+ 	gnu/java/locale/LocaleInformation_th.java,
+ 	gnu/java/locale/LocaleInformation_th_TH.java,
+ 	gnu/java/locale/LocaleInformation_ti_ER.java,
+ 	gnu/java/locale/LocaleInformation_ti_ET.java,
+ 	gnu/java/locale/LocaleInformation_tig_ER.java,
+ 	gnu/java/locale/LocaleInformation_tig.java,
+ 	gnu/java/locale/LocaleInformation_ti.java,
+ 	gnu/java/locale/LocaleInformation_tr.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_tt.java,
+ 	gnu/java/locale/LocaleInformation_tt_RU.java,
+ 	gnu/java/locale/LocaleInformation_uk.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java,
+ 	gnu/java/locale/LocaleInformation_ur.java,
+ 	gnu/java/locale/LocaleInformation_uz_AF.java,
+ 	gnu/java/locale/LocaleInformation_uz.java,
+ 	gnu/java/locale/LocaleInformation_vi.java,
+ 	gnu/java/locale/LocaleInformation_wal_ET.java,
+ 	gnu/java/locale/LocaleInformation_wal.java,
+ 	gnu/java/locale/LocaleInformation_zh_CN_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_HK_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_MO_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_TW_Hant.java:
+ 	Removed.
+ 
+ 2005-05-18  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Window.java (createBufferStrategy): Remove unnecessary
+ 	try-catch blocks.
+ 	* java/awt/Canvas.java (createBufferStrategy): Likewise.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkVolatileImage.java: Fix imports.
+ 
+ 	* gnu/java/security/provider/DSASignature.java: Import updates
+ 	from GNU Crypto.
+ 
+ 2005-05-18  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/MenuSelectionManager.java
+ 	(processMouseEvent): Clear selected path if the mouse was released
+ 	over non-menu component.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java
+ 	(Constructor): Removed initialization of mouseInputListener.
+ 	(installListeners): Do not add mouseInputListener to this popup
+ 	menu. Instead it will be added to the root container of the popup
+ 	menu.
+ 	(uninstallListeners): Remove code that removed mouseInputListener
+ 	from popupMenu.
+ 	(popupMenuWillBecomeInvisible): If this popup menu is the last
+ 	menu on the screen, then stop interrupting mouse events through
+ 	the glass pane.
+ 	(popupMenuWillBecomeVisible): Add mouseInputListener to glass pane
+ 	if it was not added before and make glass pane visible in order to
+ 	interrupt mouse evevents.
+ 	(MouseInputHandler): Close menu hierarchy if the mouse was clicked
+ 	on non menu component.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(isManagingFocus): According to Suns API documentation this
+ 	method is not implemented in this class. Also the
+ 	implementation did not add any value. Removed.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JSeparator.java
+ 	(isFocusTraversable): According to Suns API documentation this
+ 	method is not implemented in this class. Also the
+ 	implementation did not add any value. Removed.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(isFocusTraversable): According to Suns API documentation this
+ 	method is not implemented in this class. Also the
+ 	implementation did not add any value. Removed.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/ImageIcon.java
+ 	(AccessibleImageIcon): Added inner class for Accessibility support
+ 	in ImageIcon.
+ 	(getAccessibleContext): Added method for accessibility support
+ 	in ImageIcon.
+ 
+ 2005-05-18  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
+ 	(createCompatibleVolatileImage(int,int)): Implement.
+ 	(createCompatibleVolatileImage(int,int,ImageCapabilities)):
+ 	Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (backBuffer, caps):
+ 	New fields.
+ 	(createVolatileImage): Implement.
+ 	(createBuffers): Likewise.
+ 	(getBackBuffer): Likewise.
+ 	(flip): Likewise.
+ 	(destroyBuffers): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkVolatileImage.java: New file.
+ 	* java/awt/Canvas.java (CanvasBltBufferStrategy): New class.
+ 	(CanvasFlipBufferStrategy): Likewise.
+ 	(createBufferStrategy(int)): New method.
+ 	(createBufferStrategy(int,BufferCapabilities)): Likewise.
+ 	* java/awt/Component.java (BltBufferStrategy): Implement and
+ 	document class.
+ 	(FlipBufferStrategy): Likewise.
+ 	* java/awt/Window.java (WindowBltBufferStrategy): New class.
+ 	(WindowFlipBufferStrategy): Likewise.
+ 	(createBufferStrategy(int)): New method.
+ 	(createBufferStrategy(int,BufferCapabilities)): Likewise.
+ 	(getBufferStrategy): Likewise.
+ 	* java/awt/BufferCapabilities.java (BufferCapabilities): Rename
+ 	front to frontCaps and back to backCaps.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTable.java:
+ 	(BooleanCellRenderer): Added default renderer for Boolean cell values.
+ 	(DateCellRenderer): Added default renderer for Date cell values.
+ 	(DoubleCellRenderer): Added default renderer for Double cell values.
+ 	(FloatCellRenderer): Added default renderer for Float cell values.
+ 	(NumberCellRenderer): Added default renderer for Number cell values.
+ 	(IconCellRenderer): Added default renderer for Icon cell values.
+ 	(createDefaultRenderers): Include new default renderers.
+ 	(distributeSpill): Fix algorithm to do a nice layout, if still not
+ 	beeing 100% perfect.
+ 	(doLayout): Correctly calculate the spill variable.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Window.java
+ 	(isShowing): A Window can be showing even if its parent is not
+ 	showing.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/util/prefs/AbstractPreferences.java
+ 	(flushNode): Changed toArray() call to toArray(new String[0]) call
+ 	to avoid casting errors.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(constructor): Make text components editable by default.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/UIManager.java
+ 	(toString): Added method.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(getUIInputMap): Added method.
+ 	(getUIActionMap): Added method.
+ 
+ 2005-05-18  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/DynAny.java,
+ 	org/omg/CORBA/DynArray.java,
+ 	org/omg/CORBA/DynSequence.java,
+ 	org/omg/CORBA/DynEnum.java,
+ 	org/omg/CORBA/DynFixed.java,
+ 	org/omg/CORBA/DynStruct.java,
+ 	org/omg/CORBA/DynUnion.java: New interfaces.
+ 	* org/omg/CORBA/NameValuePair.java,
+ 	org/omg/CORBA/NameValuePairHelper.java,
+ 	gnu/CORBA/DynAn/NameValuePairHolder.java:
+ 	New classes.
+ 
+ 2005-05-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java
+ 	(constructor): Make component requestFocusEnabled by default.
+ 	(requestFocusInWindow): Added method.
+ 
+ 2005-05-18  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/text/SimpleDateFormat.java
+ 	(computeOffset): Allow timezone to be first in the parsed String.
+ 
+ 2005-05-18  Sven de Marothy <sven@physto.se>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(getTableCellRendererComponent): Allow table parameter to be null.
+ 	
+ 2005-05-17  Jan Roehrich  <jan@roehrich.info>
+ 
+ 	* javax/swing/JTree.java
+ 	(getExpandedDescendants): Added method.
+ 
+ 2005-05-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTree.java
+ 	(TreeModelHandler): Added inner class.
+ 	(TreeSelectionRedirector): Added inner class.
+ 	(EmptySelectionModel): Added inner class.
+ 	(DynamicUtilTreeNode.getChildAt): Added method.
+ 	(constructor(model)): Sets up a model and a selection model.
+ 	(setModel): Set up the JTree treeModelListener on newly set
+ 	models.
+ 	(createModelListener): Added method.
+ 	(getDefaultTreeModel): Added method.
+ 	(convertValueToText): Added method.
+ 	(paramString): Added method.
+ 
+ 2005-05-16  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/CurrentOperations.java,
+ 	org/omg/CORBA/Current.java,
+ 	org/omg/CORBA/PolicyError.java,
+ 	org/omg/CORBA/NO_RESOURCES.java: New files.
+ 
+ 2005-05-16  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 	
+ 	* org/omg/CORBA/ValueMember: Inherit from Serializable and IDLEntity.
+ 	* org/omg/CORBA/IDLType: Inherit from org.omg.CORBA.Object.
+ 
+ 2005-05-16  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/PRIVATE_MEMBER.java,
+ 	org/omg/CORBA/PUBLIC_MEMBER.java
+ 	(value): Changing the type from int to short.
+ 
+ 2005-05-16  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/portable/OutputStream.java
+ 	(read): Declaring and commenting the IOException.
+ 
+ 2005-05-16  Audrius Meskauskas, <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CosNaming/BindingIterator.java: Inherit from
+ 	Serializable, IDLEntity and org.omg.CORBA.Object.
+ 
+ 2005-05-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/nio/charset/Charset.java (encode, decode): Synchronize on
+ 	'this', not the class.
+ 
+ 2005-05-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/net/protocol/http/Headers.java (parse): Include final
+ 	character of line.
+ 
+ 2005-05-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URI.java (unquote): Handle lower-case letters as well.
+ 
+ 2005-05-16  Ziga Mahkovec  <ziga.mahkovec@klika.si>
+ 
+ 	PR libgcj/20504
+ 	gnu/regexp/RE.java: Add support for quoting constructs.
+ 
+ 2005-05-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/String.java (startsWith): Fixed javadoc.
+ 
+ 2005-05-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/JComponent.java: Removed invalid char from comment.
+ 
+ 2005-05-15  Audrius Meskauskas, Lithuania  <AudriusA@Bioinformatics.org>
+ 
+ 	* org/omg/CORBA/TestContextList.java,
+ 	gnu/CORBA/CDR/testBinaryIO.java: Removing tests from the core.
+ 
+ 2005-05-15  Audrius Meskauskas, Lithuania  <AudriusA@Bioinformatics.org>
+ 
+ 	* gnu/CORBA/Version.java,
+ 	gnu/CORBA/IOR.java,
+ 	gnu/CORBA/IOR_contructed_object.java,
+ 	gnu/CORBA/Restricted_ORB.java,
+ 	gnu/CORBA/Functional_ORB.java,
+ 	gnu/CORBA/gnuAny.java,
+ 	gnu/CORBA/gnuContext.java,
+ 	gnu/CORBA/gnuContextList.java,
+ 	gnu/CORBA/gnuEnvironment.java,
+ 	gnu/CORBA/gnuExceptionList.java,
+ 	gnu/CORBA/gnuRequest.java,
+ 	gnu/CORBA/gnuNVList.java,
+ 	gnu/CORBA/gnuNamedValue.java,
+ 	gnu/CORBA/Simple_delegate.java,
+ 	gnu/CORBA/BigDecimalHelper.java,
+ 	gnu/CORBA/Unexpected.java,
+ 	gnu/CORBA/OctetHolder.java,
+ 	gnu/CORBA/TypeCodeHelper.java,
+ 	gnu/CORBA/corbaArrayList.java,
+ 	gnu/CORBA/WCharHolder.java,
+ 	gnu/CORBA/WStringHolder.java,
+ 	gnu/CORBA/IOR_Delegate.java,
+ 	gnu/CORBA/fixedTypeCode.java,
+ 	gnu/CORBA/generalTypeCode.java,
+ 	gnu/CORBA/holderFactory.java,
+ 	gnu/CORBA/recordTypeCode.java,
+ 	gnu/CORBA/recursiveTypeCode.java,
+ 	gnu/CORBA/stringTypeCode.java,
+ 	gnu/CORBA/Connected_objects.java,
+ 	gnu/CORBA/ByteArrayComparator.java,
+ 	gnu/CORBA/binaryReply.java,
+ 	gnu/CORBA/typeNamer.java,
+ 	gnu/CORBA/streamRequest.java,
+ 	gnu/CORBA/stubFinder.java,
+ 	gnu/CORBA/bufferedResponseHandler.java,
+ 	gnu/CORBA/ExceptionCreator.java,
+ 	gnu/CORBA/ObjectCreator.java,
+ 	gnu/CORBA/aliasTypeCode.java: New files.
+ 	* org/omg/CORBA/TestContextList.java,
+ 	gnu/CORBA/CDR/testBinaryIO.java: New tests.
+ 	* gnu/CORBA/NamingService/snConverter.java,
+ 	gnu/CORBA/NamingService/Ext.java,
+ 	gnu/CORBA/NamingService/cmpNameComponent.java,
+ 	gnu/CORBA/NamingService/TransientContext.java,
+ 	gnu/CORBA/NamingService/NamingMap.java,
+ 	gnu/CORBA/NamingService/Binding_iterator_impl.java,
+ 	gnu/CORBA/NamingService/NamingServiceTransient.java,
+ 	gnu/CORBA/NamingService/NameValidator.java: New files.
+ 	* gnu/CORBA/CDR/aligningInputStream.java,
+ 	gnu/CORBA/CDR/aligningOutputStream.java,
+ 	gnu/CORBA/CDR/cdrOutput.java,
+ 	gnu/CORBA/CDR/cdrInput.java,
+ 	gnu/CORBA/CDR/cdrBufOutput.java,
+ 	gnu/CORBA/CDR/encapsulatedOutput.java,
+ 	gnu/CORBA/CDR/cdrBufInput.java,
+ 	gnu/CORBA/CDR/testBinaryIO.java: New files.
+ 	* org/omg/CORBA/StringHolder.java,
+ 	* org/omg/CORBA/StringSeqHelper.java,
+ 	* org/omg/CORBA/StringSeqHolder.java: Read and write string,
+ 	not wstring and use stringTypeCode.
+ 	* org/omg/CORBA/Any.java: Adding serialVersionUID.
+ 	* org/omg/CORBA/FixedHolder: Use fixedTypeCode.
+ 	* org/omg/CORBA/UNKNOWN.java: Making constructors public.
+ 	* org/omg/CORBA/UserException.java: Inherit 
+ 	from org.omg.CORBA.portable.IDLEntity.
+ 	* org/omg/CORBA/ORB.java,
+ 	org/omg/CORBA/Object.java: Replacing empty class 
+ 	declarations with implementation.
+ 	* gnu/CORBA/primitiveTypeCode.java: Exception fixes.
+ 	* gnu/CORBA/primitiveArrayTypeCode.java: Adding extra
+ 	parameter in constructor.
+ 	* gnu/CORBA/GIOP/CancelHeader.java,
+ 	gnu/CORBA/GIOP/ErrorMessage.java,
+ 	gnu/CORBA/GIOP/MessageHeader.java,
+ 	gnu/CORBA/GIOP/ReplyHeader.java,
+ 	gnu/CORBA/GIOP/RequestHeader.java,
+ 	gnu/CORBA/GIOP/ServiceContext.java,
+ 	gnu/CORBA/GIOP/cxCodeSet.java,
+ 	gnu/CORBA/GIOP/CharSets_OSF.java,
+ 	gnu/CORBA/GIOP/v1_0/CancelHeader.java,
+ 	gnu/CORBA/GIOP/v1_0/RequestHeader.java,
+ 	gnu/CORBA/GIOP/v1_0/ReplyHeader.java,
+ 	gnu/CORBA/GIOP/v1_2/RequestHeader.java,
+ 	gnu/CORBA/GIOP/v1_2/ReplyHeader.java: New files.
+ 	org/omg/CosNaming/_NamingContextStub.java,
+ 	org/omg/CosNaming/_NamingContextImplBase.java,
+ 	org/omg/CosNaming/BindingHelper.java,
+ 	org/omg/CosNaming/BindingListHelper.java,
+ 	org/omg/CosNaming/NameComponentHelper.java,
+ 	org/omg/CosNaming/NameHelper.java,
+ 	org/omg/CosNaming/BindingTypeHelper.java,
+ 	org/omg/CosNaming/NamingContextHelper.java,
+ 	org/omg/CosNaming/BindingIteratorHelper.java,
+ 	org/omg/CosNaming/_NamingContextExtStub.java,
+ 	org/omg/CosNaming/NamingContextExt.java,
+ 	org/omg/CosNaming/NamingContextExtHelper.java,
+ 	org/omg/CosNaming/NamingContextExtHolder.java,
+ 	org/omg/CosNaming/NamingContextExtOperations.java,
+ 	org/omg/CosNaming/_NamingContextExtImplBase.java,
+ 	org/omg/CosNaming/NamingContextOperations.java,
+ 	org/omg/CosNaming/NamingContext.java,
+ 	org/omg/CosNaming/NameComponent.java,
+ 	org/omg/CosNaming/BindingIterator.java,
+ 	org/omg/CosNaming/_BindingIteratorStub.java,
+ 	org/omg/CosNaming/Binding.java,
+ 	org/omg/CosNaming/BindingType.java,
+ 	org/omg/CosNaming/BindingIteratorHolder.java,
+ 	org/omg/CosNaming/BindingListHolder.java,
+ 	org/omg/CosNaming/BindingHolder.java,
+ 	org/omg/CosNaming/BindingTypeHolder.java,
+ 	org/omg/CosNaming/NameComponentHolder.java,
+ 	org/omg/CosNaming/NameHolder.java,
+ 	org/omg/CosNaming/NamingContextHolder.java,
+ 	org/omg/CosNaming/_BindingIteratorImplBase.java,
+ 	org/omg/CosNaming/package.html,
+ 	org/omg/CosNaming/NamingContextExtPackage/InvalidAddress.java,
+ 	org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHolder.java,
+ 	org/omg/CosNaming/NamingContextExtPackage/package.html,
+ 	org/omg/CosNaming/NamingContextExtPackage/AddressHelper.java,
+ 	org/omg/CosNaming/NamingContextExtPackage/URLStringHelper.java,
+ 	org/omg/CosNaming/NamingContextExtPackage/StringNameHelper.java,
+ 	org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHelper.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotEmpty.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotFound.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotFoundReason.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotFoundReasonHolder.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotFoundHolder.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotEmptyHolder.java,
+ 	org/omg/CosNaming/NamingContextPackage/AlreadyBoundHolder.java,
+ 	org/omg/CosNaming/NamingContextPackage/CannotProceedHolder.java,
+ 	org/omg/CosNaming/NamingContextPackage/InvalidNameHolder.java,
+ 	org/omg/CosNaming/NamingContextPackage/CannotProceed.java,
+ 	org/omg/CosNaming/NamingContextPackage/InvalidName.java,
+ 	org/omg/CosNaming/NamingContextPackage/AlreadyBound.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotFoundHelper.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotEmptyHelper.java,
+ 	org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.java,
+ 	org/omg/CosNaming/NamingContextPackage/InvalidNameHelper.java,
+ 	org/omg/CosNaming/NamingContextPackage/NotFoundReasonHelper.java,
+ 	org/omg/CosNaming/NamingContextPackage/CannotProceedHelper.java,
+ 	org/omg/CosNaming/NamingContextPackage/package.html: New files.
+ 	* examples/gnu/classpath/examples/CORBA/NamingService/Demo.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/Demo.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/comServer.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/passThisHelper.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/passThisHolder.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/returnThis.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/passThis.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/returnThisHelper.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/returnThisHolder.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DirectTest.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/RequestTest.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/comServant.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/ourUserException.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/node.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/nodeHelper.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/nodeHolder.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_comTesterStub.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/ourUserExceptionHelper.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_comTesterImplBase.java,
+ 	examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/comTester.java: 
+ 	New IIOP (CORBA) examples.
+ 
+ 2005-05-14  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/DomDocumentBuilder.java,
+ 	  gnu/xml/dom/transform/XSLUriResolver.java: Handle unqualified
+         relative URLs.
+ 	* gnu/xml/dom/ls/SAXEventSink.java: Ignore XML entities in start/
+ 	end entity callbacks.
+ 
+ 2005-05-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JDialog.java
+ 	(setDefaultCloseOperation): Don't throw an IllegalArgumentException
+ 	but instead accept illegal values as DO_NOTHING_ON_CLOSE.
+ 
+ 2005-05-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(createMessageArea): Enabled input components to be used
+ 	in OptionPanes.
+ 
+ 2005-05-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	(getPreferredSize): Changed implementation so that getGraphics()
+ 	is not used (this triggers a NPE).
+ 
+ 2005-05-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/ScrollPaneLayout.java
+ 	(getViewportBorderBounds): Documented methods.
+ 
+ 2005-05-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/RepaintManager.java:
+ 	(getVolatileOffscreenBuffer): Added methods.
+ 
+ 2005-05-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/DefaultButtonModel.java:
+ 	Removed superfluous semicolon.
+ 
+ 2005-05-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(ButtonChangeListener): Added this inner class.
+ 
+ 2005-05-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java
+ 	(requestFocus): Added method.
+ 	(requestFocus(boolean)): Added method.
+ 	(requestFocusInWindow): Added method.
+ 	(addNotify): Added method.
+ 	(removeNotify): Added method.
+ 	(contains): Added method.
+ 	(disable): Added method.
+ 	(enable): Added method.
+ 	(getGraphics): Added method.
+ 	(getX): Added method.
+ 	(getY): Added method.
+ 	(getHeight): Added method.
+ 	(getWidth): Added method.
+ 	(getPropertyChangeListener): Added method.
+ 	(print): Added method.
+ 	(printAll): Added method.
+ 	(printComponent): Added method.
+ 	(printChildren): Added method.
+ 	(printBorder): Added method.
+ 	(processMouseMotionEvent): Added method.
+ 	(reshape): Added method.
+ 
+ 2005-05-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java:
+ 	Added a JTable example.
+ 
+ 2005-05-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java:
+ 	Added Examples menu to menu bar.
+ 	Slightly changed the layout of the main panel so that an overlenghty
+ 	button panel at the bottom is displayed in a useful way.
+ 
+ 2005-05-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java:
+ 	Added examples for JEditorPane and JTree.
+ 
+ 2005-05-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/DefaultMenuLayout.java:
+ 	Added this class.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java
+ 	(installUI): Use the new DefaultMenuLayout instead of GridBagLayout.
+ 
+ 2005-05-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractCellEditor.java
+ 	(constructor): Implemented.
+ 	(isCellEditable): Implemented.
+ 	(shouldSelectCell): Implemented.
+ 	(stopCellEditing): Implemented.
+ 	(cancelCellEditing): Implemented.
+ 
+ 2005-05-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractCellEditor.java:
+ 	Documented this class.
+ 
+ 2005-05-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/AbstractCellEditor.java:
+ 	Reformatted this file to our coding style.
+ 
+ 2005-05-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(createSeparator): Implemented. Returns a vertical separator with
+ 	a height of 17 pixels as recommended in the book Java Look & Feel
+ 	Design Guidelines.
+ 	(installComponents): Added an empty border around the dialog.
+ 
+ 2005-05-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/View.java
+ 	(insertUpdate) Removed a debug println statement.
+ 
+ 2005-05-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.insertUpdate): Added. Forwards the update to the real
+ 	root view.
+ 	(RootView.removeUpdate): Added. Forwards the update to the real
+ 	root view.
+ 	(RootView.changedUpdate): Added. Forwards the update to the real
+ 	root view.
+ 	(DocumentHandler): Added. Receives DocumentEvents and forwards
+ 	them to the corresponding View methods.
+ 	(installDocumentListeners): Installs Document listeners on the
+ 	text component's document model.
+ 	* javax/swing/plaf/text/FieldView.java
+ 	(adjustAllocation): Added. Adjusts the view area so that the
+ 	input line is centered vertically and correctly aligned horizontally.
+ 	(modelToView): Call adjustAllocation before call to
+ 	super.modelToView(..).
+ 	(paint): Call adjustAllocation before call to super.paint(..).
+ 	(insertUpdate): Added. Calls adjustAllocation before call to
+ 	super.insertUpdate(..).
+ 	(removeUpdate): Added. Calls adjustAllocation before call to
+ 	super.removeUpdate(..).
+ 	(changedUpdate): Added. Calls adjustAllocation before call to
+ 	super.changedUpdate(..).
+ 	* javax/swing/text/JTextComponent.java:
+ 	Removed RepaintListener. This is no longer needed and should
+ 	instead be handled by the text component's View.
+ 	* javax/swing/plaf/text/View.java
+ 	(paint): If parent is null, we still need to make sure the
+ 	text component is updated through calling revalidate().
+ 	(insertUpdate): Added. Receive notification about changes in the
+ 	text document model.
+ 	(removeUpdate): Added. Receive notification about changes in the
+ 	text document model.
+ 	(changedUpdate): Added. Receive notification about changes in the
+ 	text document model.
+ 	(updateChildren): Added. Updates the list of child Views after
+ 	text has been modified.
+ 	(forwardUpdate): Added. Forwards the update notification to the
+ 	child Views.
+ 	(forwardUpdateToView): Added. Actually performs the forwarding of
+ 	update events.
+ 	(updateLayout): Added. Makes sure that the display is in sync with
+ 	the model.
+ 
+ 2005-05-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JTextField.java
+ 	(createDefaultModel): Create and return a subclass of PlainDocument
+ 	to allow newlines to be swallowed.
+ 
+ 2005-05-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/faq/faq.wml: Update looking at proprietary source
+ 	code entry.
+ 
+ 2005-05-10  David Daney  <ddaney@avtrex.com>
+ 
+ 	* java/util/BitSet.java (get(int, int)): Fix breakage when
+ 	requested set doesn't start on a multiple of 64.
+ 
+ 2005-05-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure.ac (CLASSPATH_INCLUDES): Remove quotes in checking
+ 	messages.
+ 
+ 2005-05-10  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ClassLoader.java
+ 	(defaultGetSystemClassLoader): Refactored in three new methods.
+ 	(createExtClassLoader, createSystemClassLoader,
+ 	createAuxiliarySystemClassLoader): New methods.
+ 
+ 2005-05-06  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* java/awt/Frame.java:
+ 	(setUndecorated): Toggled boolean expression.
+ 
+ 2005-05-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Kalle Olavi Niemitalo <kon@iki.fi>.
+ 	Workaround for gcj bug #21418
+ 	* lib/gen-classlist.sh.in: Set LC_ALL and LANG to C. Sort result of
+ 	find.
+ 
+ 2005-05-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/PlainView.java
+ 	(getPreferredSpan): Corrected the calculation of the span of
+ 	the view.
+ 
+ 2005-05-05  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/transform/StreamSerializer.java: Produce compact,
+ 	human-readable XML for non-UTF/ASCII encodings using NIO.
+ 
+ 2005-05-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/BufferCapabilities.java (BufferCapabilities): Make
+ 	documentation of arguments match code.
+ 
+ 2005-05-04  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/image/BufferStrategy.java: Document.
+ 
+ 	* java/awt/BufferCapabilities.java: Document.
+ 
+ 2005-05-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/nio/channels/FileLock.java (toString): Entirely avoid
+ 	String "+".
+ 
+ 2005-05-04  Andrew Overholt  <overholt@redhat.com>
+ 
+ 	* java/nio/channels/FileLock.java (toString): Re-implement using
+ 	StringBuffer.
+ 
+ 2005-05-04  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/ImageCapabilities.java: Document.
+ 
+ 	* java/awt/image/VolatileImage.java: Unindent copyright header.
+ 
+ 2005-05-04  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/PlainView.java
+ 	(drawUnselectedText): Call Utilities.drawTabbedText() with correct
+ 	offset parameter.
+ 	* javax/swing/text/Utilities.java
+ 	(drawTabbedText): Initilialize local variable pos correctly.
+ 
+ 2005-05-04  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(LeafElement): Made start and end package private fields for
+ 	effective reindexing.
+ 	* javax/swing/text/PlainDocument.java
+ 	(constructor): The field rootElement is always BranchElement,
+ 	so we handle it	as such.
+ 	(removeUpdate): Rewritten reindexing for removeUpdate so that
+ 	the actual removal is taken into account.
+ 
+ 2005-05-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/image/VolatileImage.java: Document.
+ 
+ 2005-05-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(init_glib_threads): Check if threading system is already
+ 	initialized.
+ 
+ 2005-05-03  Andrew Overholt  <overholt@redhat.com>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java: Return null if lock
+ 	could not be acquired.
+ 	* java/nio/channels/FileLock.java (toString): Re-implement to be
+ 	in line with other implementations.
+ 
+ 2005-05-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/GapContent.java:
+ 	Removed debugging output stuff, which I accidentally left in.
+ 
+ 2005-05-03  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/GapContent.java:
+ 	Implemented a real GapContent. Only the public methods have
+ 	been implemented so far and still no UndoableEdit support.
+ 
+ 2005-05-02  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(hashCode): Reimplemented and added API docs.
+ 
+ 2005-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* lib/Makefile.am: Delete CVS directories and .cvsignore files
+ 	for resources we copy into the release tarball.
+ 
+ 2005-05-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .classpath: Updated.
+ 	* .project: Added new builders.
+ 	* .externalToolBuilders/Autogen.launch: New file.
+ 	* .externalToolBuilders/Configure.launch: New file.
+ 	* .settings/org.eclipse.jdt.core.prefs: New file.
+ 	* .settings/org.eclipse.jdt.ui.prefs: New file.
+ 
+ 2005-05-01  Andreas Tobler  <toa@pop.agri.ch>
+ 
+ 	* autogen.sh: Use glibtoolize on Darwin.
+ 
+ 2005-05-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.15+cvs.
+ 
+ 	* doc/www.gnu.org/announce/20050429.wml: New file.
+ 	* doc/www.gnu.org/newsitems.txt: Add announcement.
+ 	* doc/www.gnu.org/downloads/downloads.wml: Add 0.15 download.
+ 
+ 2005-05-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Add 0.15 release date and new features.
+ 	* configure.ac: Set version to 0.15.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
+ 	(window_delete_cb): Don't use C++ style comments.
+ 
+ 	* doc/api/Makefile.am (clean): Renamed.
+ 	(clean-local): Renamed from clean.
+ 
+ 2005-04-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(currentLoader): Don't create SecurityManager, directly call
+ 	VMObjectInputStream.currentClassLoader().
+ 	(resolveProxyClass): Use currentLoader().
+ 	* vm/reference/java/io/VMObjectInputStream.java
+ 	(currentClassLoader(SecurityManager)): Removed.
+ 	(currentClassLoader): New method.
+ 	* native/jni/java-io/java_io_VMObjectInputStream.c
+ 	(Java_java_io_VMObjectInputStream_currentClassLoader): Removed.
+ 	* include/java_io_VMObjectInputStream.h: Regenerated.
+ 
+ 	* NEWS: Document new interface and reference implementation.
+ 
+ 2005-04-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (prepareImage): Only prepare
+ 	GtkImages.
+ 
+ 2005-04-30  Robert Schuster  <thebohemian@gmx.net>
+ 
+     * doc/hacking.texinfo: Added section about dealing with
+     unrealistic code paths.
+ 
+ 2005-04-30  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Fixed
+ 	copyright header.
+ 
+ 2005-04-30  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
+ 	(window_delete_cb): Made the function return TRUE.
+ 
+ 2005-04-30  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* NEWS: Documented aadition of
+ 	"gnu.classpath.boot.library.path".
+ 
+ 2005-04-29  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/nio/channels/FileChannelImpl.java
+ 	(FileChannelImpl(Sting, int)): Removed.
+ 	(FileChannelImpl(File, int)) Added. Check if opened file is a
+ 	directory.
+ 
+ 	* java/io/FileInputStream.java(FileInputStream): Fixed javadocs.
+ 	Call FileChannelImpl(File, int).
+ 
+ 	* java/io/FileOutputStream.java	(FileInputStream): Call
+ 	FileChannelImpl(File, int).
+ 
+ 	* java/io/RandomAccessFile.java (RandomAccessFile):
+ 	Call FileChannelImpl(File, int). Switched constructors around.
+ 
+ 2005-04-29  Audrius Meskauskas  <AudriusA@bluewin.ch>
+ 
+ 	* org/omg/CORBA/WStringSeqHelper.java,
+ 	org/omg/CORBA/AnySeqHelper.java,
+ 	org/omg/CORBA/BooleanSeqHelper.java,
+ 	org/omg/CORBA/CharSeqHelper.java,
+ 	org/omg/CORBA/DoubleSeqHelper.java,
+ 	org/omg/CORBA/FloatSeqHelper.java,
+ 	org/omg/CORBA/LongLongSeqHelper.java,
+ 	org/omg/CORBA/LongSeqHelper.java,
+ 	org/omg/CORBA/OctetSeqHelper.java,
+ 	org/omg/CORBA/ShortSeqHelper.java,
+ 	org/omg/CORBA/StringSeqHelper.java,
+ 	org/omg/CORBA/ULongLongSeqHelper.java,
+ 	org/omg/CORBA/ULongSeqHelper.java,
+ 	org/omg/CORBA/UShortSeqHelper.java,
+ 	org/omg/CORBA/WCharSeqHelper.java:
+ 	Removing redundant object instantiation. 
+ 
+ 2005-04-29  Sven de Marothy  <sven@physto.se>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/nio/charset/Charset.java (defaultCharset): Use
+ 	SystemProperties.
+ 	(provider): Check gnu.classpath.nio.charset.provider.iconv system
+ 	property and return the IconvProvider when set.
+ 
+ 	* NEWS: Document new character encoder framework.
+ 
+ 2005-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/charset/Charset.java
+ 	(defaultCharset): Reformatted.
+ 
+ 2005-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/HTTPConnection.java:
+ 	(userAgent): Initialize from system properties.
+ 	(initUserAgent): Removed.
+ 
+ 2005-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/ClassLoader.java:
+ 	Fixed formatting.
+ 
+ 2005-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(aton): Fixed javadoc.
+ 
+ 2005-04-28  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* NEWS: Documented the Java Beans API fixes.
+ 
+ 2005-04-28  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* java/beans/FeatureDescriptor.java:
+ 	(getShortDescription): Implemented fallback mechanism and fixed
+ 	documentation (fixes bug #12637).
+ 	(getDisplayName): Dito.
+ 
+ 2005-04-28  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* java/beans/Introspector.java: Fixed bug #12624, BeanDescriptors
+ 	will now be set correctly.
+ 	(flushCaches): Now flushes all cached intermediate data.
+ 
+ 2005-04-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(replaceRange): Removed error throwing.
+ 
+ 2005-04-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AccessControlContext.java:
+ 	Reformatted.
+ 
+ 2005-04-28  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* java/security/Security.java (Security): Silence the warning about no
+ 	providers found in the no debug case.
+ 
+ 2005-04-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/charset/Charset.java
+ 	(providers2): Renamed from 'providers'.
+ 
+ 2005-04-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI
+ 	(getThumbBounds): Do not make thumb smaller than
+ 	minimumThumbSize.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel
+ 	(initComponentDefaults): Added color defaults for ScrollBar.
+ 	* javax/swing/plaf/metal/MetalScrollBarUI
+ 	(paintThumb): Added.
+ 	(getMinimumThumbSize): Added.
+ 
+ 2005-04-27  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/net/URL.java: Remove org.metastatic.jessie from default
+ 	protocol search path.
+ 
+ 2005-04-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel
+ 	(initComponentDefaults): Added some default colors.
+ 
+ 2005-04-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(configureScrollBarColors: Changed key 'ScrollBar.thumbLightShadow'
+ 	to 'ScrollBar.thumbShadow'. The formes does not exist.
+ 	(paintThumb): Use BasicGraphicsUtils for painting the thumb.
+ 
+ 2005-04-27  Chris Burdess  <dog@gnu.org>
+ 
+ 	* java/net/protocol/http/HTTPURLConnection.java (connect): Accept
+ 	absolute and relative paths in Location header.
+ 
+ 2005-04-27  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/MediaTracker.java: Added 2005 to copyright statement.
+ 	* javax/swing/BoxLayout.java: Likewise.
+ 	* javax/swing/UIManager.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java: Likewise.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java: Likewise.
+ 	* javax/swing/text/Document.java: Likewise.
+ 	* javax/swing/text/GapContent.java: Likewise.
+ 	* javax/swing/text/SimpleAttributeSet.java: Likewise.
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java: Likewise.
+ 
+ 2005-04-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* autogen.sh: Use '-I m4'.
+ 	* m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4: New files.
+ 	* m4/pkg.m4, m4/accross.m4, m4/iconv.m4, m4/acinclude.m4: Moved
+ 	from...
+ 	* pkg.m4, accross.m4, iconv.m4, acinclude.m4: ... here.  Removed.
+ 
+ 2005-04-26  Luca Barbieri  <luca.barbieri@gmail.com>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (tryLock): Pass
+ 	'false' to native lock().
+ 	(lock): Pass 'true' to native lock().
+ 
+ 2005-04-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/nio/charset/iconv/IconvCharset.java (name):
+ 	Removed unused field.
+ 	(IconvCharset): Updated.
+ 
+ 2005-04-26  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java: Throw
+ 	FileNotFoundException and implement getErrorStream on 404.
+ 
+ 2005-04-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/text/html/parser/ParserDelegator.java (callBack,
+ 	gnu): Now package-private.
+ 	* javax/swing/text/html/parser/DocumentParser.java (parser,
+ 	callBack, gnu): Now package-private.
+ 	* javax/swing/text/StringContent.java (content, setOffset,
+ 	checkLocation): Now package-private.
+ 	* javax/swing/text/JTextComponent.java (doc): Now
+ 	package-private.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java (owner,
+ 	lastGoodOrientation, origParent, borders, cachedBounds,
+ 	cachedOrientation, DragWindow): Now package-private.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java (incrButton,
+ 	decrButton, viewport, panel, currentScrollLocation, layoutManager,
+ 	tabAreaRect, contentRect, createIncreaseButton,
+ 	createDecreaseButton, findPointForIndex): Now package-private.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java
+ 	(currentDividerLocation, moveDividerTo): Now package-private.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java (findClosestTick): Now
+ 	package-private.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(calculatePreferredSize, valueForYPosition, valueForXPosition):
+ 	Now package-private.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java
+ 	(topWindowListener): Now package-private.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java (iconSize,
+ 	OK_STRING, YES_STRING, NO_STRING, CANCEL_STRING): Now constants.
+ 	(messageAreaContainer, buttonContainer, resetSelectedValue): Now
+ 	package-private.
+ 	* javax/swing/plaf/basic/BasicListUI.java (damageLayout): Now
+ 	package-private.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java (title):
+ 	Now package-private.
+ 	* javax/swing/plaf/basic/BasicDesktopIconUI.java (button): Now
+ 	package-private.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java (largestItemSize,
+ 	borderInsets): Now package-private.
+ 	(arrowButtonWidth): Likewise.  Now a constant.
+ 	* javax/swing/plaf/basic/BasicColorChooserUI.java (chooser, pane,
+ 	makeTabs, updatePreviewPanel): Now package-private.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java (shadow,
+ 	darkShadow, highlight): Now package-private.
+ 	* javax/swing/colorchooser/DefaultSwatchChooserPanel.java
+ 	(addColorToQueue): Now package-private.
+ 	* javax/swing/colorchooser/DefaultRGBChooserPanel.java
+ 	(spinnerChange, sliderChange, updateChange, R, G, B, RSpinner,
+ 	GSpinner, BSpinner): Now package-private.
+ 	* javax/swing/colorchooser/DefaultHSBChooserPanel.java
+ 	(gradientImage, trackImage, slider, hRadio, sRadio, bRadio,
+ 	hSpinner, sSpinner, bSpinner, gradientPoint, internalChange,
+ 	spinnerTrigger, locked, handlingMouse, updateImage, updateSlider,
+ 	updateTrack): Now package-private.
+ 	* javax/swing/TransferHandler.java (clipboard): Now
+ 	package-private.
+ 	* javax/swing/ToolTipManager.java (showTip, hideTip): Now
+ 	package-private.
+ 	* javax/swing/Timer.java (drainEvents, queueEvent): Now
+ 	package-private.
+ 	* javax/swing/RepaintManager.java (globalManager): Now
+ 	package-private.
+ 	* javax/swing/JFormattedTextField.java (editValid): Now
+ 	package-private.
+ 	* javax/swing/JColorChooser.java (makeModal): Now
+ 	package-private.
+ 	* java/awt/geom/GeneralPath.java (rule, types, xpoints, ypoints,
+ 	index, path): Now package-private.
+ 	* java/awt/geom/Area.java (solids, holes, cubicCubicIntersect,
+ 	lineQuadIntersect, lineCubicIntersect, linesIntersect,
+ 	pointEquals): Now package-private.
+ 	* java/awt/geom/Arc2D.java (type): Now package-private.
+ 	* java/awt/Window.java (windowFocusOwner): Now package-private.
+ 	* java/awt/TextComponent.java (editable, selectionStart,
+ 	selectionEnd, text, getIndexAtPoint, getCharacterBounds): Now
+ 	package-private.
+ 	* java/awt/MenuItem.java (actionCommand, enabled, label): Now
+ 	package-private.
+ 	* java/awt/MenuComponent.java (focusListener): Now
+ 	package-private.
+ 	* java/awt/Frame.java (state): Now package-private.
+ 	* java/awt/Choice.java (pItems): Now package-private.
+ 	* java/awt/Checkbox.java (state): Now package-private.
+ 	* java/awt/Button.java (actionCommand, label): Now
+ 	package-private.
+ 	* gnu/javax/swing/text/html/parser/support/Parser.java
+ 	(attributes, _handleEndTag_remaining, _handleStartTag): Now
+ 	package-private.
+ 	* gnu/java/beans/decoder/PersistenceParser.java (javaHandler): Now
+ 	package-private.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (paint, stroke, fg, bg,
+ 	clip, transform, font, comp): Now package-private.
+ 
+ 2005-04-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Robot.java (waitForIdle): Call invokeAndWait in a
+ 	static way.
+ 
+ 2005-04-26  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicToggleButtonUI.java:
+ 	(getPropertyPrefix): Added.
+ 
+ 2005-04-26  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(getPropertyPrefix): Added.
+ 	(installDefaults): Use getPropertyPrefix instead of hard-coded
+ 	prefix.
+ 
+ 2005-04-26  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JToggleButton.java
+ 	(JToggleButton): Removed horizontalAlignment setting, this
+ 	was wrong. Added setting of an actionCommand, ToggleButtons
+ 	have "" as default actionCommand.
+ 
+ 2005-04-26  David Daney  <ddaney@avtrex.com>
+ 
+ 	* java/net/InetAddress.java (InetAddress): Make a private copy of
+ 	the address.
+ 	* java/net/Inet4Address.java (getAddress): Return a copy of the
+ 	address.
+ 	* java/net/Inet6Address.java (Inet6Address): Use private copy of
+ 	the address
+ 	(getAddress): Return a copy of the address.
+ 	(equals): Rewrote.
+ 
+ 2005-04-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ImageIcon.java: 
+ 	Merged copyright with GCJ.
+ 
+ 2005-04-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/AWTKeyStroke.java (vktable): Now package-private.
+ 
+ 2005-04-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* iconv.m4: New file.
+ 	* configure.ac: Use AM_ICONV.
+ 	* native/jni/java-nio/Makefile.am (libjavanio_la_LIBADD):
+ 	Add LTLIBICONV.
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c:
+ 	Include config.h and jcl.h, use if defined(HAVE_ICONV), add new
+ 	static variables infid and outfid, add char_union.
+ 	(Java_gnu_java_nio_charset_iconv_IconvDecoder_openIconv):
+ 	Guard with if defined(HAVE_ICONV), use JCL_jstring_to_cstring,
+ 	JCL_free_cstring and JCL_ThrowException, cache inremaining and
+ 	outremaining fieldIDs.
+ 	(Java_gnu_java_nio_charset_iconv_IconvDecoder_decode):
+ 	Guard with if defined(HAVE_ICONV), use ICONV_CONST for iconv
+ 	argument, used cached fieldIDs, use char_union.
+ 	(Java_gnu_java_nio_charset_iconv_IconvDecoder_closeIconv):
+ 	Guard with if defined(HAVE_ICONV).
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c:
+ 	Include config.h and jcl.h, use if defined(HAVE_ICONV), add new
+ 	static variables infid and outfid, add char_union.
+ 	(Java_gnu_java_nio_charset_iconv_IconvEncoder_openIconv):
+ 	Guard with if defined(HAVE_ICONV), use JCL_jstring_to_cstring,
+ 	JCL_free_cstring and JCL_ThrowException, cache inremaining and
+ 	outremaining fieldIDs.
+ 	(Java_gnu_java_nio_charset_iconv_IconvEncoder_encode):
+ 	Guard with if defined(HAVE_ICONV), use ICONV_CONST for iconv
+ 	argument, used cached fieldIDs, use char_union.
+ 	(Java_gnu_java_nio_charset_iconv_IconvEncoder_closeIconv):
+ 	Guard with if defined(HAVE_ICONV).
+ 	* gnu/java/nio/charset/iconv/IconvDecoder.java (dispose): Renamed.
+ 	(finalize): Renamed from dispose.
+ 	* gnu/java/nio/charset/iconv/IconvEncoder.java (dispose): Renamed.
+ 	(finalize): Renamed from dispose.
+ 	
+ 2005-04-25  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/io/InputStreamReader.java:
+ 	(InputStreamReader): Always replace invalid chars.
+ 	(read): Return -1 if zero bytes are read.
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c,
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c:
+ 	Correct C pointer arithmetic.
+ 
+ 2005-04-25  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/Transparency.java
+ 	(getTransparency): fixed API docs.
+ 
+ 2005-04-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(initDefaults): Initialize thumb*Color fields correctly.
+ 
+ 2005-04-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/GapContent.java:
+ 	Added API comments.
+ 
+ 2005-04-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java:
+ 	Added inner class ScrollPaneBorder.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added default for "ScrollPane.border"
+ 	to use the new ScrollPaneBorder.
+ 
+ 2005-04-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	Added FIXME comments. This class still has to be
+ 	implemented thread-safe.
+ 
+ 2005-04-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java
+ 	(DefaultTreeSelectionModel): Initialize listenerList here.
+ 
+ 2005-04-25  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalTextFieldUI.java
+ 	(createUI): Return one instance per Component instead of a
+ 	shared instance.
+ 
+ 2005-04-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/Makefile.am (JNIDIRS): New macro.
+ 	(SUBDIRS): Use it.
+ 	* configure.ac (--enable-core-jni): New option.
+ 	* NEWS: Document new option.
+ 
+ 2005-04-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/jni_md-x86-linux-gnu.h (JNIIMPORT): New define.
+ 	(jsize): New typedef.
+ 	* include/jni.h: Re-merged with libgcj.
+ 	* doc/vmintegration.texinfo (JNI Implementation): New node.
+ 	* NEWS: Document the change.
+ 
+ 2005-04-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/classpath/Configuration.java.in (default_awt_peer_toolkit):
+ 	Now set by configure.
+ 	* configure.ac (--enable-default-toolkit): New option.
+ 	* NEWS: Document new option.
+ 
+ 2005-04-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure.ac: Formatting fixes.
+ 
+ 2005-03-22  Mike Stump  <mrs@apple.com>
+ 
+ 	* native/fdlibm/ieeefp.h: ppc64 is also __IEEE_BIG_ENDIAN.
+ 
+ 2005-04-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/text/StyleConstants.java (StyleConstants): Now
+ 	package-private.
+ 
+ 2005-04-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URL.java (URL(URL,String,URLStreamHandler)): Add spec
+ 	to MalformedURLException.
+ 
+ 2005-04-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java
+ 	(getChannel): Improved javadoc comment.
+ 
+ 2005-04-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/Document.java:
+ 	Added API documentation comments.
+ 
+ 2005-04-23  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(getDocumentProperties): Implemented.
+ 	(setDocumentProperties): Implemented.
+ 	(getProperty): Implemented.
+ 	(putProperty): Implemented.
+ 
+ 2005-04-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* accross.m4: New file, from gcc.
+ 	* configure.ac: Only call AC_C_BIGENDIAN once.  Use a single
+ 	AC_CHECK_HEADERS call for most headers.  Likewise for
+ 	AC_CHECK_FUNCS.  Use AC_COMPILE_CHECK_SIZEOF.  Don't look for
+ 	function named 'sizeof'.
+ 
+ 2005-04-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(connectSignals): Realize the window widget after connecting
+ 	signals.
+ 
+ 2005-04-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/BoxLayout
+ 	(preferredLayoutSize): Fixed computation so that it correctly
+ 	adds the top and bottom insets of the container.
+ 
+ 2005-04-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(paintText): Make use of the 'selectionForeground' UI default
+ 	for text painting.
+ 
+ 2005-04-22  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initSystemColorDefaults): Modified colors to match the
+ 	BasicLookAndFeel in the reference implementation.
+ 	(initComponentDefaults): Likewise.
+ 
+ 2005-04-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/vmintegration.texinfo (Introduction): Typo fix.
+ 	(Initialization): Removed redundant 'current'.
+ 
+ 2005-04-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/classpath/SystemProperties.java:
+ 	Reformatted.
+ 
+ 2005-04-21  Casey Marshall <csm@gnu.org>
+ 
+ 	* gnu/java/security/der/DERValue.java
+ 	(getValueAs): new method.
+ 	* gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java
+ 	(<init>): read both dates with 'DERValue.getValueAs', with
+ 	'GENERALIZED_TIME' as the argument.
+ 
+ 2005-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_nio_charset_iconv_IconvDecoder.h,
+ 	include/gnu_java_nio_charset_iconv_IconvEncoder.h:
+ 	Regenerated with gcjh from gcc 4.0 branch.
+ 
+ 2005-04-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Changed Button.border to be
+ 	BasicBorders.getButtonBorder as it should be.
+ 
+ 2005-04-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	(getMaximumSize): Return (Short.MAX_VALUE, Short.MAX_VALUE) as it
+ 	should according to a mauve testcase, instead of the preferred
+ 	size.
+ 
+ 2005-04-20  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/io/OutputStreamWriter.java:
+ 	(close): Do nothing on multiple closes.
+ 
+ 2005-04-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JMenu.java
+ 	(add): add(Component) now calls PopupMenu.insert(..) instead of
+ 	PopupMenu.add(..). add(..) is not implemented for Component,
+ 	so JComponent.add(..) is called instead, adding the component
+ 	in the wrong place.
+ 
+ 2005-04-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonListener.java
+ 	(mousePressed): replaced query to getModifiersEx with getModifiers.
+ 	This method relied on faulty behaviour in getModifierEx.
+ 	(mouseReleased): replaced query to getModifiersEx with getModifiers.
+ 	This method relied on faulty behaviour in getModifierEx.
+ 
+ 2005-04-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(getDefaults): Call addCustomEntriesToTable on the theme.
+ 
+ 2005-04-20  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java
+ 	(constructor): Added implementation.
+ 	(getRowMapper): Added implementation.
+ 	(setSelectionMode): Added implementation.
+ 	(getSelectionMode): Added implementation.
+ 	(getSelectionPath): Added implementation.
+ 	(getSelectionPaths): Added implementation.
+ 	(getSelectionCount): Added implementation.
+ 	(isSelectionEmpty): Added implementation.
+ 	(getSelectionRows): Added implementation.
+ 	(getMinSelectionRow): Added implementation.
+ 	(getMaxSelectionRow): Added implementation.
+ 	(getLeadSelectionRow): Added implementation.
+ 	(getLeadSelectionPath): Added implementation.
+ 
+ 2005-04-20  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/nio/charset/Charset.java:
+ 	(defaultCharset()): New method.
+ 	Status updated to 1.5
+ 
+ 2005-04-20  Sven de Marothy  <sven@physto.se>
+ 	
+ 	* gnu/java/io/EncodingManager.java: Removed charset alias properties.
+ 	* gnu/java/io/decode/Decoder.java,
+ 	* gnu/java/io/decode/Decoder8859_1.java,
+ 	* gnu/java/io/decode/Decoder8859_13.java,
+ 	* gnu/java/io/decode/Decoder8859_15.java,
+ 	* gnu/java/io/decode/Decoder8859_2.java,
+ 	* gnu/java/io/decode/Decoder8859_3.java,
+ 	* gnu/java/io/decode/Decoder8859_4.java,
+ 	* gnu/java/io/decode/Decoder8859_5.java,
+ 	* gnu/java/io/decode/Decoder8859_6.java,
+ 	* gnu/java/io/decode/Decoder8859_7.java,
+ 	* gnu/java/io/decode/Decoder8859_8.java,
+ 	* gnu/java/io/decode/Decoder8859_9.java,
+ 	* gnu/java/io/decode/DecoderASCII.java,
+ 	* gnu/java/io/decode/DecoderCp1047.java,
+ 	* gnu/java/io/decode/DecoderEBCDIC_XML_US.java,
+ 	* gnu/java/io/decode/DecoderEightBitLookup.java,
+ 	* gnu/java/io/decode/DecoderUTF16BE.java,
+ 	* gnu/java/io/decode/DecoderUTF16LE.java,
+ 	* gnu/java/io/decode/DecoderUTF32BE.java,
+ 	* gnu/java/io/decode/DecoderUTF32LE.java,
+ 	* gnu/java/io/decode/DecoderUTF8.java,
+ 	* gnu/java/io/decode/DecoderUnicodeBig.java,
+ 	* gnu/java/io/decode/DecoderUnicodeLittle.java,
+ 	* gnu/java/io/decode/DecoderWindows1250.java,
+ 	* gnu/java/io/decode/DecoderWindows1252.java,
+ 	* gnu/java/io/decode/package.html
+ 	* gnu/java/io/encode/Encoder.java,
+ 	* gnu/java/io/encode/Encoder8859_1.java,
+ 	* gnu/java/io/encode/Encoder8859_13.java,
+ 	* gnu/java/io/encode/Encoder8859_15.java,
+ 	* gnu/java/io/encode/Encoder8859_2.java,
+ 	* gnu/java/io/encode/Encoder8859_3.java,
+ 	* gnu/java/io/encode/Encoder8859_4.java,
+ 	* gnu/java/io/encode/Encoder8859_5.java,
+ 	* gnu/java/io/encode/Encoder8859_6.java,
+ 	* gnu/java/io/encode/Encoder8859_7.java,
+ 	* gnu/java/io/encode/Encoder8859_8.java,
+ 	* gnu/java/io/encode/Encoder8859_9.java,
+ 	* gnu/java/io/encode/EncoderASCII.java,
+ 	* gnu/java/io/encode/EncoderCp1047.java,
+ 	* gnu/java/io/encode/EncoderEBCDIC_XML_US.java,
+ 	* gnu/java/io/encode/EncoderEightBitLookup.java,
+ 	* gnu/java/io/encode/EncoderUTF16BE.java,
+ 	* gnu/java/io/encode/EncoderUTF16LE.java,
+ 	* gnu/java/io/encode/EncoderUTF32BE.java,
+ 	* gnu/java/io/encode/EncoderUTF32LE.java,
+ 	* gnu/java/io/encode/EncoderUTF8.java,
+ 	* gnu/java/io/encode/EncoderUnicodeBig.java,
+ 	* gnu/java/io/encode/EncoderUnicodeLittle.java,
+ 	* gnu/java/io/encode/EncoderWindows1250.java,
+ 	* gnu/java/io/encode/EncoderWindows1252.java,
+ 	* gnu/java/io/encode/package.html:
+ 	Removed
+ 	
+ 2005-04-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/geom/QuadCurve2D.java:
+ 	Fixed Brian Gough's name for real.
+ 
+ 2005-04-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paint): This should not care about margin and insets
+ 	at the same time, as insets already include the margin
+ 	through the border.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java
+ 	(getPreferredButtonSize): Likewise.
+ 	* javax/swing/plaf/metal/MetalBorders.java
+ 	(getBorderInsets): Likewise.
+ 
+ 2005-04-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java:
+ 	Pulled out GNULookAndFeel so that it can be accessed.
+ 	On startup, if the property swing.defaultlaf is not set,
+ 	display a message on how to set the L&F for the demo.
+ 	Changed font for bottom buttons to normal.
+ 	* examples/gnu/classpath/examples/swing/GNULookAndFeel.java:
+ 	Pulled out of Demo.java.
+ 
+ 2005-04-19  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(createMessageArea): The JPanel that holds the message area
+ 	doesn't need to override getPreferredSize. This prevents some
+ 	message components from rendering nicely.
+ 
+ 2005-04-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/net/URL.java:
+ 	(toURI()): Implemented.
+ 
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalInternalFrameUI.java
+ 	(createUI): Do not share instances between components.
+ 	* javax/swing/plaf/metal/MetalSliderUI.java
+ 	(createUI): Do not share instances between components.
+ 
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders:
+ 	(PopupMenuBorder): Added.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel
+ 	(initComponentDefaults): Added PopupMenuBorder.
+ 
+ 2005-04-18  Sven de Marothy  <sven@physto.se>
+ 	
+ 	* java/io/InputStreamReader.java:
+ 	(read): Fix several bugs leading to incorrect length being returned.
+ 
+ 2005-04-18  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/nio/ByteBufferImpl.java:
+ 	(putChar): Inlined for speed.
+ 	(put, get): Bulk methods can use arraycopy.
+ 	* java/nio/CharBufferImpl.java:
+ 	(put, get): Bulk methods can use arraycopy.
+ 	
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java:
+ 	Added API documentation all over the class.
+ 
+ 2005-04-18  Sven de Marothy  <sven@physto.se>
+ 	
+ 	* include/Makefile.am,
+ 	* native/jni/java-nio/Makefile.am: Added new files.
+ 	* gnu/java/nio/charset/iconv/IconvCharset.java,
+ 	* gnu/java/nio/charset/iconv/IconvDecoder.java,
+ 	* gnu/java/nio/charset/iconv/IconvEncoder.java,
+ 	* gnu/java/nio/charset/iconv/IconvMetaData.java, 
+ 	* gnu/java/nio/charset/iconv/IconvProvider.java,
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c,
+ 	* native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c,
+ 	* include/gnu_java_nio_charset_iconv_IconvDecoder.h,
+ 	* include/gnu_java_nio_charset_iconv_IconvEncoder.h,
+ 	New files.
+ 
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/lang/String.java:
+ 	Make value, offset and count fields package private instead
+ 	of private.
+ 
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(installDefaults): Link managed JScrollPane in instance field.
+ 	(uninstallDefaults): Unlink managed JScrollPane in instance field.
+ 
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(PropertyChangeHandler.propertyChange): Add default
+ 	to switch statement to avoid errors with unusual values
+ 	for orientation.
+ 	(installComponents): Likewise.
+ 
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java:
+ 	(createUI): Instances cannot be shared among JScrollPanes.
+ 
+ 2005-04-18  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/lang/String.java: Value, offset and count should be private.
+ 
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added defaults for Menu, MenuBar
+ 	MenuEntry fonts.
+ 
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(installUI): Install listeners after everything all, otherwise
+ 	we get strange NPEs in some situations, especially with
+ 	custom L&Fs.
+ 	(createIncreaseButton): Orientation is expected to be
+ 	SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
+ 	HORIZONTAL or VERTICAL.
+ 	(createDecreaseButton): Orientation is expected to be
+ 	SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
+ 	HORIZONTAL or VERTICAL.
+ 	(installComponents): Orientation for buttons is expected to be
+ 	SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
+ 	HORIZONTAL or VERTICAL.
+ 
+ 2005-04-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/nio/ByteBufferImpl.java (get(), put(byte)): Inlined checks
+ 	and field updates.
+ 	* java/nio/CharBufferImpl.java
+ 	(CharBufferImpl(CharBufferImpl)): Copy array_offset field.
+ 	(get(), put(char)): Inlined checks and field updates. Fixed to
+ 	take array_offset into account.
+ 	(get(int), put(int, char)): Fixed to take array_offset into account.
+ 
+ 2005-04-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Class.java (getModifiers, newInstance): Changed
+ 	call to VMClass.getModifiers().
+ 	* vm/reference/java/lang/VMClass.java
+ 	(getModifiers(Class, boolean)): New method.
+ 
+ 2005-04-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/GraphicsEnvironment.java
+ 	(localGraphicsEnvironment): New field.
+ 	(getLocalGraphicsEnvironment): Added support for java.awt.graphicsenv
+ 	property.
+ 	(isHeadless): Added support for java.awt.headless property.
+ 	(isHeadlessInstance): Call headless().
+ 
+ 2005-04-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/beans/IntrospectionIncubator.java
+ 	(addToPropertyHash, addToListenerHash): Don't confuse get(),
+ 	set(), is(), add() and remove() with properties or events.
+ 
+ 2005-04-18  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JToolBar.java
+ 	(addImpl): Adjust added AbstractButtons to look and feel like
+ 	toolbar buttons.
+ 	* javax/swing/plaf/metal/MetalBorders.java:
+ 	Adjusted insets of ButtonBorder.
+ 	(RolloverMarginBorder): Added class for toolbar buttons.
+ 	(getButtonBorder): Adjusted factory method to return a shared
+ 	instance of button border.
+ 	(getToolbarButtonBorder): Added factory method to return a shared
+ 	instance of toolbar button border.
+ 	(getMarginBorder): Added factory method to return a shared
+ 	instance of margin border.
+ 	* javax/swing/plaf/metal/MetalButtonUI.java
+ 	(installDefauls): If button is child of a JToolBar then set
+ 	special border on this button.
+ 
+ 2005-04-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/SimpleAttributeSet.java
+ 	(addAttribute): Removed null pointer check.
+ 	* javax/swing/text/StyleContext.java
+ 	(NamedStyle.setResolveParent): Added null pointer check.
+ 
+ 2005-04-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* examples/gnu/classpath/exammples/swing/Demo.java:
+ 	Print a short summary for available values for the property
+ 	swing.defaultlaf.
+ 	Set MetalLookAndFeel as default.
+ 	Pulled out GNULookAndFeel so that it is accessible.
+ 	* examples/gnu/classpath/exammples/swing/GNULookAndFeel.java:
+ 	Pulled out this class from Demo.java.
+ 
+ 2005-04-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/UIManager.java:
+ 	Make the UIManager respect the swing.defaultlaf system
+ 	property.
+ 
+ 2005-04-17  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/SimpleAttributeSet.java
+ 	(addAttribute): Check for null and remove key in that case.
+ 	This fixes http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21064 .
+ 
+ 2005-04-16  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/BorderLayout.java
+ 	(calcSize): Check for overflow when component sizes are added.
+ 
+ 2005-04-16  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/rmi/Naming.java:
+ 	Added class documentation.
+ 	(lookup(String)): Call parseURL and getName.
+ 	(bind(String,java.rmi.Remote)): Likewise.
+ 	(unbind(String)): Likewise.
+ 	(rebind(String, java.rmi.Remote)): Likewise.
+ 	(list(String)): Call parseURL.
+ 	(parseURL(String)): New method to handle parsing and defaults.
+ 	(getName(java.net.URL)): New method to handle finding the service name.
+ 	
+ 2005-04-16  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/net/URI.java:
+ 	Added class documentation.
+ 	(parseURI(String)): Only handle scheme-specific parts
+ 	if URI is not opaque.  Allow for parts that can't be null.
+ 	(toString()): Output the scheme-specific part whole, rather
+ 	than as its possibly non-existent components.
+ 	
+ 2005-04-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/server/RemoteObject.java:
+ 	Removed unused import statement.
+ 
+ 2005-04-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/Makefile.am: Removed java_io_ObjectInputStream.h
+ 	and added java_io_VMObjectInputStream.h.
+ 	* include/java_io_ObjectInputStream.h: Removed.
+ 	* include/java_io_VMObjectInputStream.h: New file.
+ 	* java/io/ObjectInputStream.java
+ 	(currentClassLoader): Removed.
+ 	(allocateObject): Likewise.
+ 	* native/jni/java-io/Makefile.am: Removed java_io_ObjectInputStream.c
+ 	and added java_io_VMObjectInputStream.c.
+ 	* native/jni/java-io/java_io_ObjectInputStream.c: Removed.
+ 	* native/jni/java-io/java_io_VMObjectInputStream.c: New file.
+ 	* vm/reference/java/io/VMObjectInputStream.java: Likewise.
+ 
+ 2005-04-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/java_lang_Double.h,
+ 	include/java_lang_Object.h,
+ 	native/jni/java-lang/java_lang_Double.c,
+ 	native/jni/java-lang/java_lang_Object.c: Removed.
+ 	* include/java_lang_VMDouble.h: Regenerated.
+ 	* java/lang/Double.java
+ 	(static): Removed.
+ 	(toString): Call native method from VMDouble.
+ 	(parseDouble): Make non-native and call native method from VMDouble.
+ 	(toString): Removed.
+ 	* java/lang/Float.java
+ 	(toString): Call native method from VMDouble.
+ 	* java/lang/Object.java
+ 	(getClass): Refactored to call the native in java.lang.VMObject.
+ 	* include/Makefile.am: Don't generate java_lang_Double.h and
+ 	java_lang_Object.h.
+ 	* native/jni/java-lang/Makefile.am: Removed java_lang_Double.c and
+ 	java_lang_Object.c.
+ 	* native/jni/java-lang/java_lang_VMDouble.c
+ 	(initIDs): New method.
+ 	(toString): Likewise.
+ 	(parseDouble): Likewise.
+ 	* vm/reference/java/lang/VMDouble.java
+ 	(initIDs): Likewise.
+ 	(toString): Likewise.
+ 	(parseDouble): Likewise.
+ 	* vm/reference/java/lang/VMObject.java
+ 	(getClass): Likewise.
+ 
+ 2005-04-15  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/DecimalFormatSymbols.java:
+ 	Added retrieval of "XXX" instance in place of null.
+ 	* java/util/Currency.java,
+ 	(Currency(String)): New constructor for the XXX special case.
+ 	(getInstance(String)): Allow special case of "XXX".
+ 
+ 2005-04-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added Label.font.
+ 	(initSystemColorDefaults): Added this method and adjusted the
+ 	general control color.
+ 
+ 2005-04-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java:
+ 	Added newline between import blocks. Changed Map to
+ 	HashMap in field declarations.
+ 
+ 2005-04-15  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/nio/charset/EncodingHelper.java: Added method
+ 	* java/io/InputStreamReader.java,
+ 	* java/io/OutputStreamWriter.java,
+ 	* java/lang/String.java: Move to NIO charsets.
+ 	* java/io/PrintStream.java: Inline conversion using String.
+ 
+ 2005-04-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalBorders.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalButtonUI.java:
+ 	(installDefaults): Install button font.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java:
+ 	(initComponentDefaults): Added button border, font and margin.
+ 	Changed components background color to the Metal current themes
+ 	standard color.
+ 
+ 2005-04-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java
+ 	(createUI): Create one MetalTabbedPaneUI per Component instead
+ 	of sharing one instance.
+ 
+ 2005-04-15  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initComponentDefaults): Added to set Metal specific component
+ 	defaults.
+ 
+ 2005-04-14  Chris Burdess  <dog@gnu.org>
+ 
+ 	* java/io/DataOutputStream.java (writeUTF): Use block write for
+ 	output.
+ 
+ 2005-04-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initClassDefaults): Call super.initClassDefaults().
+ 
+ 2005-04-14  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(initClassDefaults): Added to include the *UI classes.
+ 
+ 2005-04-14  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalComboBoxUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalDesktopIconUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalInternalFrameUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalProgressBarUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalRootPaneUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalScrollBarUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalSeparatorUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalSliderUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalSplitPaneUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalTextFieldUI.java:
+ 	Added.
+ 	* javax/swing/plaf/metal/MetalToggleButtonUI.java:
+ 
+ 2005-04-14  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalButtonUI.java:
+ 	Fixed year in copyright notice.
+ 	* javax/swing/plaf/metal/MetalCheckBoxUI.java:
+ 	Fixed year in copyright notice.
+ 	* javax/swing/plaf/metal/MetalLabelUI.java:
+ 	Fixed year in copyright notice.
+ 	* javax/swing/plaf/metal/MetalRadioButtonUI.java:
+ 	Fixed year in copyright notice.
+ 	* javax/swing/plaf/metal/MetalScrollPaneUI.java:
+ 	Fixed year in copyright notice.
+ 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java:
+ 	Fixed year in copyright notice.
+ 
+ 2005-04-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/metal/MetalButtonUI.java:
+ 	Added skeleton class.
+ 	* javax/swing/plaf/metal/MetalCheckBoxUI.java:
+ 	Added skeleton class.
+ 	* javax/swing/plaf/metal/MetalLabelUI.java:
+ 	Added skeleton class.
+ 	* javax/swing/plaf/metal/MetalRadioButtonUI.java:
+ 	Added skeleton class.
+ 	* javax/swing/plaf/metal/MetalScrollPaneUI.java:
+ 	Added skeleton class.
+ 	* javax/swing/plaf/metal/MetalTabbedPaneUI.java:
+ 	Added skeleton class.
+ 
+ 2005-04-13  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/nio/charset/Charset.java: Cached encoders shouldn't be static.
+ 	
+ 2005-04-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/MediaTracker.java:
+ 	Reindented tabs to spaces.
+ 
+ 2005-04-13  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/MediaTracker.java
+ 	(MediaEntry.imageUpdate): Removed check for SOMEBITS, this
+ 	confused the media tracker and lead to lockups. The LOADING
+ 	bit is handled on other places.
+ 	(addImage): Removed the 'start image tracking' stuff. This
+ 	is not necessary and could confuse the media tracker.
+ 	(checkAll): Improved the check for image status so that
+ 	images that already complete images are detected. Also now
+ 	are really all images checked and if necessary loaded. Before
+ 	the method bailed out after the first incomplete image.
+ 	(statusAll): Detect images that are complete after the
+ 	call to Component.prepareImage(..).
+ 	(checkID): The same as in checkAll.
+ 	(statusID): The same as in statusAll.
+ 
+ 2005-04-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/util/.cvsignore:
+ 	Added file and included LocaleDate.java.
+ 	* lib/.cvsignore:
+ 	Added classes.locale.
+ 	* scripts/.cvsignore:
+ 	Added classpath.spec.
+ 
+ 2005-04-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuUI.java
+ 	(getMaximumSize): Now returns preferredSize because JMenu should
+ 	never be bigger than that.
+ 	* javax/swing/JRootPane
+ 	(RootLayout.layoutContainer): Make JMenuBars take the whole width.
+ 
+ 2005-04-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	Fixed tabs to spaces.
+ 
+ 2005-04-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JRootPane.java:
+ 	Fixed various tabs to be spaces.
+ 	(RootLayout.layoutContainer): Made menubar left aligned.
+ 
+ 2005-04-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/JComponent.java:
+ 	Modified alignmentX and alignmentY to be 0.5 instead of 0.0.
+ 	Untabified the file.
+ 
+ 2005-04-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/BoxLayout.java:
+ 	(layoutContainer): Made this layout manager respect the
+ 	minimum, maximum and preferred size more correctly.
+ 
+ 2005-04-12  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/MediaTracker.java
+ 	(addImage): Synchronized list access.
+ 	(waitForAll): Fixed comparison of time (changed < to >).
+ 	(waitForID): Fixed comparison of time (changed < to >).
+ 	(removeImage): Synchronized list access.
+ 
+ 2005-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FilePermission.java
+ 	(serialVersionUID): Made private.
+ 	(ALL_FILES): New constant.
+ 	(implies): Handle '<<ALL FILES>>' case.
+ 
+ 2005-04-12  Audrius Meskauskas, Lithuania  <AudriusA@Bioinformatics.org>
+ 
+ 	* javax/swing/text/html/HTMLDocument.java: New file.
+ 
+ 2005-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/html/HTMLFrameHyperlinkEvent.java:
+ 	Reformatted.
+ 	* javax/swing/text/html/parser/AttributeList.java:
+ 	Fixed order of modifiers.
+ 	(AttributeList): Made final.
+ 	* javax/swing/text/html/parser/ContentModel.java:
+ 	Fixed html characters in javadocs.
+ 	* javax/swing/text/html/parser/DTD.java
+ 	(DTD): Don't implement java.io.Serializable directly.
+ 	(getElement): Simplified.
+ 	* javax/swing/text/html/parser/DTDConstants.java:
+ 	Reformatted file.
+ 	* javax/swing/text/html/parser/Element.java:
+ 	Fixed order of modifiers.
+ 	* javax/swing/text/html/parser/Parser.java:
+ 	Reformatted. Don't use fully-qualified class names.
+ 	* javax/swing/text/html/parser/ParserDelegator.java:
+ 	Fixed order of modifiers.
+ 	* javax/swing/text/rtf/RTFParser.java:
+ 	Re-ordered import statements.
+ 	* javax/swing/text/rtf/RTFScanner.java:
+ 	Removed unused import statement.
+ 
+ 2005-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/RasterOp.java:
+ 	Fixed wrong formatting.
+ 
+ 2005-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/print/PrinterJob.java
+ 	(pageDialog): New method.
+ 	(printDialog): Implemented.
+ 
+ 2005-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/FontMetrics.java: Reformatted.
+ 	(getFontRenderContext): Handle case when java.awt.Graphics context is
+ 	given.
+ 
+ 2005-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/FontMetrics.java
+ 	(getStringBounds): New methods.
+ 
+ 2005-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetworkInterface.java
+ 	(NetworkInterface): Made constructor package private.
+ 	Introduced another constructor for more addresses on one
+ 	interface.
+ 
+ 2005-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/java-net/Makefile.am
+ 	Compile new files java_net_VMInetAddress.c and
+ 	java_net_VMNetworkInterface.
+ 
+ 2005-04-12  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/nio/charset/Provider.java: Add UnicodeLittle.
+ 	* gnu/java/nio/charset/UnicodeLittle.java: New file.
+ 	* gnu/java/nio/charset/UTF_16.java: UnicodeBig is an alias.
+ 	* gnu/java/nio/charset/UTF_16BE.java,
+ 	* gnu/java/nio/charset/UTF_16LE.java: No byte-order mark.
+ 	* gnu/java/nio/charset/UTF_16Encoder.java (encodeLoop): Fixed bug.
+ 	
+ 2005-04-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(static): Removed.
+ 	(getLocalHostname): Likewise.
+ 	(lookupInaddrAny): Likewise.
+ 	(getHostByAddr): Likewise.
+ 	(getHostByName): Likewise.
+ 	* java/net/NetworkInterface.java
+ 	(static): Likewise.
+ 	(getRealNetworkInterfaces): Likewise.
+ 	* native/jni/java-net/java_net_InetAddress.c: Renamed to...
+ 	* native/jni/java-net/java_net_VMInetAddress.c: New file.
+ 	Renamed from java_net_InetAddress.c. All native methods moved to class
+ 	VMInetAddress.
+ 	* native/jni/java-net/java_net_NetworkInterface.c: Renamed to...
+ 	Renamed from java_net_NetworkInterface.c. All native methods moved to
+ 	class VMNetworkInterface.
+ 	* native/jni/java-net/java_net_VMNetworkInterface.c: New file.
+ 	* vm/reference/java/net/VMInetAddress.java,
+ 	vm/reference/java/net/VMNetworkInterface.java: New files.
+ 	* include/java_net_InetAddress.h,
+ 	include/java_net_NetworkInterface.h: Removed.
+ 	* include/java_net_VMInetAddress.h,
+ 	include/java_net_VMNetworkInterface.h: New files.
+ 	* include/Makefile.am: Build new header files.
+ 
+ 2005-04-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/ImageIcon.java
+ 	Added API documentation.
+ 
+ 2005-04-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/MediaTracker.java
+ 	Added API documentation.
+ 
+ 2005-04-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageIO.java (ReaderFormatFilter.filter):
+ 	Fixed wrong casting.
+ 
+ 2005-04-11  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* org/omg/CORBA/Request.java:
+ 	(send_deferred): Added missing 'abstract' keyword.
+ 	
+ 2005-04-10  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/text/SimpleDateFormat.java:
+ 	(formatWithAttribute): Pad year before truncating digits.
+ 
+ 2005-04-10  Audrius Meskauskas  <audriusa@bluewin.ch>	
+ 	* org/omg/CORBA/PRIVATE_MEMBER.java,
+ 	org/omg/CORBA/PUBLIC_MEMBER.java,
+ 	org/omg/CORBA/Request.java,
+ 	org/omg/CORBA/StructMember.java,
+ 	org/omg/CORBA/UnionMember.java,
+ 	org/omg/CORBA/UNSUPPORTED_POLICY.java,
+ 	org/omg/CORBA/UNSUPPORTED_POLICY_VALUE.java,
+ 	org/omg/CORBA/ValueMember.java,
+ 	org/omg/CORBA/VM_ABSTRACT.java,
+ 	org/omg/CORBA/VM_CUSTOM.java,
+ 	org/omg/CORBA/VM_NONE.java,
+ 	org/omg/CORBA/VM_TRUNCATABLE.java,
+ 	org/omg/CORBA/WrongTransaction.java,
+ 	org/omg/CORBA/BAD_POLICY.java,
+ 	org/omg/CORBA/BAD_POLICY_TYPE.java,
+ 	org/omg/CORBA/BAD_POLICY_VALUE.java,
+ 	org/omg/CORBA/Environment.java,
+ 	org/omg/CORBA/IDLType.java,
+ 	org/omg/CORBA/OMGVMCID.java: new files.
+ 	
+ 2005-04-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-lang/java_lang_Double.c: Reindent.
+ 	* native/jni/java-lang/java_lang_Math.c: Likewise.
+ 	* native/jni/java-lang/java_lang_Object.c: Likewise.
+ 	* native/jni/java-lang/java_lang_VMDouble.c: Likewise.
+ 	* native/jni/java-lang/java_lang_VMFloat.c: Likewise.
+ 	* native/jni/java-lang/java_lang_VMSystem.c: Likewise.
+ 	* native/jni/java-lang/java_lang_reflect_Array.c: Likewise.
+ 	* native/jni/java-nio/java_nio.c
+ 	(Java_gnu_java_nio_FileChannelImpl_nio_1mmap_1file): Removed.
+ 	(Java_gnu_java_nio_FileChannelImpl_nio_1unmmap_1file): Likewise.
+ 	(Java_gnu_java_nio_SocketChannelImpl_SocketCreate): Likewise.
+ 	(Java_gnu_java_nio_SocketChannelImpl_SocketConnect): Likewise.
+ 	(Java_gnu_java_nio_SocketChannelImpl_SocketBind): Likewise.
+ 	(Java_gnu_java_nio_SocketChannelImpl_SocketListen): Likewise.
+ 	(Java_gnu_java_nio_SocketChannelImpl_SocketAvailable): Likewise.
+ 	(Java_gnu_java_nio_SocketChannelImpl_SocketClose): Likewise.
+ 	(Java_gnu_java_nio_SocketChannelImpl_SocketRead): Likewise.
+ 	(Java_gnu_java_nio_SocketChannelImpl_SocketWrite): Likewise.
+ 	* native/jni/java-nio/java_nio_VMDirectByteBuffer.c: Reindent.
+ 
+ 2005-04-09  Audrius Meskauskas  <audriusa@bluewin.ch>	
+ 	* org/omg/CORBA/DynAnyPackage/Invalid.java,
+ 	org/omg/CORBA/DynAnyPackage/InvalidSeq.java,
+ 	org/omg/CORBA/DynAnyPackage/InvalidValue.java,
+ 	org/omg/CORBA/DynAnyPackage/TypeMismatch.java,
+ 	org/omg/CORBA/DynAnyPackage/package.html: New files.
+ 	
+ 2005-04-08  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/nio/charset/UTF_8.java
+ 	(Decoder): Previous fix was incorrect. Sorry.
+ 	* java/nio/charset/Charset.java: Reset cached de/encoders.
+ 	* java/nio/charset/CharsetDecoder.java,
+ 	java/nio/charset/CharsetEncoder.java:
+ 	Resize encoding/decoding result buffers.
+ 	
+ 2005-04-08  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/nio/charset/Provider.java: Add new charsets.
+ 	* gnu/java/nio/charset/UTF_16.java: Default to using BOM.
+ 	* gnu/java/nio/charset/UTF_16Decoder.java: Minor fixes.
+ 	* gnu/java/nio/charset/UTF_16Encoder.java,
+ 	Use NIO's built-in byte-ordering instead.
+ 	* gnu/java/nio/charset/UTF_8.java,
+ 	(Decoder): Correct values of maximum chars per byte.
+ 	(decodeLoop): Handle 4-byte surrogates.
+ 	* gnu/java/nio/charset/ByteCharset.java,
+ 	gnu/java/nio/charset/Cp424.java,
+ 	gnu/java/nio/charset/Cp437.java,
+ 	gnu/java/nio/charset/Cp737.java,
+ 	gnu/java/nio/charset/Cp775.java,
+ 	gnu/java/nio/charset/Cp850.java,
+ 	gnu/java/nio/charset/Cp852.java,
+ 	gnu/java/nio/charset/Cp855.java,
+ 	gnu/java/nio/charset/Cp857.java,
+ 	gnu/java/nio/charset/Cp860.java,
+ 	gnu/java/nio/charset/Cp861.java,
+ 	gnu/java/nio/charset/Cp862.java,
+ 	gnu/java/nio/charset/Cp863.java,
+ 	gnu/java/nio/charset/Cp864.java,
+ 	gnu/java/nio/charset/Cp865.java,
+ 	gnu/java/nio/charset/Cp866.java,
+ 	gnu/java/nio/charset/Cp869.java,
+ 	gnu/java/nio/charset/Cp874.java,
+ 	gnu/java/nio/charset/EncodingHelper.java,
+ 	gnu/java/nio/charset/ISO_8859_13.java,
+ 	gnu/java/nio/charset/ISO_8859_15.java,
+ 	gnu/java/nio/charset/ISO_8859_2.java,
+ 	gnu/java/nio/charset/ISO_8859_3.java,
+ 	gnu/java/nio/charset/ISO_8859_4.java,
+ 	gnu/java/nio/charset/ISO_8859_5.java,
+ 	gnu/java/nio/charset/ISO_8859_6.java,
+ 	gnu/java/nio/charset/ISO_8859_7.java,
+ 	gnu/java/nio/charset/ISO_8859_8.java,
+ 	gnu/java/nio/charset/ISO_8859_9.java,
+ 	gnu/java/nio/charset/KOI_8.java,
+ 	gnu/java/nio/charset/MS874.java,
+ 	gnu/java/nio/charset/MacCentralEurope.java,
+ 	gnu/java/nio/charset/MacCroatian.java,
+ 	gnu/java/nio/charset/MacCyrillic.java,
+ 	gnu/java/nio/charset/MacDingbat.java,
+ 	gnu/java/nio/charset/MacGreek.java,
+ 	gnu/java/nio/charset/MacIceland.java,
+ 	gnu/java/nio/charset/MacRoman.java,
+ 	gnu/java/nio/charset/MacRomania.java,
+ 	gnu/java/nio/charset/MacSymbol.java,
+ 	gnu/java/nio/charset/MacThai.java,
+ 	gnu/java/nio/charset/MacTurkish.java,
+ 	gnu/java/nio/charset/Windows1250.java,
+ 	gnu/java/nio/charset/Windows1251.java,
+ 	gnu/java/nio/charset/Windows1252.java,
+ 	gnu/java/nio/charset/Windows1253.java,
+ 	gnu/java/nio/charset/Windows1254.java,
+ 	gnu/java/nio/charset/Windows1255.java,
+ 	gnu/java/nio/charset/Windows1256.java,
+ 	gnu/java/nio/charset/Windows1257.java,
+ 	gnu/java/nio/charset/Windows1258.java:
+ 	New files.
+ 	
+ 2005-04-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/MediaTracker.java
+ 	(MediaEntry.imageUpdate): Fixed flags. The different flags
+ 	must not be ORed together.
+ 	(checkAll): Modified to handle different meaning of the flags.
+ 	(waitForAll): Fixed so that it waits maximum the
+ 	specified amount of milliseconds.
+ 	(statusAll): Modified to handle different meaning of the flags.
+ 	(waitForID): Fixed so that it waits maximum the
+ 	specified amount of milliseconds.
+ 
+ 2005-04-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/ImageIcon.java
+ 	(ImageIcon): Use setImage instead of direct assignment.
+ 	(setImage): Call loadImage to make sure that the image is loaded.
+ 	(loadImage): Waits for the image to complete loading.
+ 	(getImageLoadStatus): Added. Returns the load status of the
+ 	image.
+ 
+ 2005-04-08  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* native/jni/classpath/jcl.h,
+ 	native/jni/java-io/java_io_ObjectInputStream.c,
+ 	native/jni/java-io/java_io_VMFile.c,
+ 	native/jni/java-io/java_io_VMObjectStreamClass.c,
+ 	native/jni/java-io/javaio.c,
+ 	native/jni/java-lang/java_lang_Double.c,
+ 	native/jni/java-lang/java_lang_Math.c,
+ 	native/jni/java-lang/java_lang_Object.c,
+ 	native/jni/java-lang/java_lang_VMDouble.c,
+ 	native/jni/java-lang/java_lang_VMFloat.c,
+ 	native/jni/java-lang/java_lang_VMProcess.c,
+ 	native/jni/java-lang/java_lang_VMSystem.c,
+ 	native/jni/java-lang/java_lang_reflect_Array.c,
+ 	native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c,
+ 	native/jni/java-net/gnu_java_net_PlainSocketImpl.c,
+ 	native/jni/java-net/java_net_InetAddress.c,
+ 	native/jni/java-net/java_net_NetworkInterface.c,
+ 	native/jni/java-net/javanet.c,
+ 	native/jni/java-nio/gnu_java_nio_VMPipe.c,
+ 	native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c,
+ 	native/jni/java-nio/java_nio.c,
+ 	native/jni/java-nio/java_nio_MappedByteBufferImpl.c,
+ 	native/jni/java-nio/java_nio_VMDirectByteBuffer.c,
+ 	native/jni/java-util/java_util_VMTimeZone.c: Reindented using 
+ 	GNU indent (GNU style).
+ 
+ 2005-04-08  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(JTextComponent): Added repaintListener which issues repaint
+ 	requests when the underlying document changes.
+ 	(setDocument): Adds repaintListener to document when the
+ 	document is changed.
+ 	* javax/swing/text/DefaultEditorKit.java:
+ 	Removed repaint calls on JTextComponent. This is now handled
+ 	through a DocumentListener in JTextComponent that repaints
+ 	the component when needed.
+ 
+ 2005-04-07  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/CRLFInputStream.java: Rewrite to return
+ 	CRLF-delimited chunks.
+ 
+ 2005-04-07  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/UIDefaults.java:
+ 	Added API documentation for all methods.
+ 
+ 2005-04-06  Roman Kennke  <roman@kennke.org>
+ 
+ 	* javax/swing/UIDefaults.java
+ 	(put): Now uses new checkAndPut method instead of checking
+ 	directly.
+ 	(putDefaults): Fixed so that it accepts null-values and
+ 	treats them like remove(key).
+ 	(checkAndPut): Added. This checks for null-values and calls
+ 	put or remove.
+ 
+ 2005-04-06   Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/CTX_RESTRICT_SCOPE.java,
+ 	org/omg/CORBA/ExceptionList.java,
+ 	org/omg/CORBA/NVList.java,
+ 	PrincipalHolder.java: New classes.
+ 	* org/omg/CORBA/Context.java: Completing
+ 	part, dependent from classes above,
+ 	org/omg/CORBA/MARSHAL.java: accessibility fixes.
+ 
+ 2005-04-05  Roman Kennke  <roman@kennke.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java
+ 	(getDisplayMode): Added. Returns the current display mode.
+ 	(isFullScreenSupported): Added.
+ 	* java/awt/GraphicsDevice.java
+ 	(setFullScreenWindow): Implemented a primitive fullscreen mode.
+ 	This resizes and relocates the fullscreen window so that it uses
+ 	the whole screen. This is not a fully accelerated fullscreen
+ 	exclusive mode.
+ 
+ 2005-04-03  Guilhem Lavaux  <guilhem@kaffe.org>
+ 	Rei Odaira <ray@is.s.u-tokyo.ac.jp>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_VMSelector.c
+ 	(helper_select): Return the error number.
+ 	(Java_gnu_java_nio_VMSelector_select0): If the result is negative
+ 	consider it as the error code. This prevents conflicts between EINTR
+ 	and the number of filedescriptor particularly.
+ 
+ 2005-04-03  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_VMSelector.c: Reindented.
+ 	
+ 2005-04-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/AssertionError.java: Typo fix.
+ 
+ 2005-04-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/PipedInputStream.java
+ 	(read): Make sure a positive byte value is returned. Revised javadoc.
+ 	Thanks to Olafur Bragason for reporting these bugs.
+ 
+ 2005-04-01  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/awt/image/IndexColorModel.java
+ 	(getRGB): Check if pixel is negative.
+ 
+ 2005-03-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/swing/text/JTextComponent.java (viewToModel): New method.
+ 
+ 2005-03-31  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 	* org/omg/CORBA/ORBPackage/InconsistentTypeCode.java,
+ 	org/omg/CORBA/ORBPackage/InvalidName.java,
+ 	org/omg/CORBA/ORBPackage/package.html: New files.
+ 
+ 2005-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(getClipBounds): Handle clip being null.
+ 	(setClip): Likewise.
+ 	* java/beans/beancontext/BeanContextSupport.java
+ 	(add): Implemented.
+ 	(addAll): Likewise.
+ 	(clear): Likewise.
+ 	(removeAll): Likewise.
+ 	(retainAll): Likewise.
+ 
+ 2005-03-30  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java:
+ 	(drawImage): Don't notify the image observer for offscreen images.
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java:
+ 	(setPixels): Don't notify the image observer.
+ 
+ 2005-03-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/beancontext/BeanContextServicesSupport.java
+ 	(BeanContextServicesSupport): Reimplemented.
+ 	(addBeanContextServicesListener): Implemented.
+ 	(initialize): Likewise.
+ 	(removeBeanContextServicesListener): Likewise.
+ 	* java/beans/beancontext/BeanContextSupport.java
+ 	(add): Likewise.
+ 	(addBeanContextMembershipListener): Likewise.
+ 	(getLocale): Likewise.
+ 	(initialize): Likewise.
+ 	(iterator): Likewise.
+ 	(remove): Likewise.
+ 	(toArray): Likewise.
+ 
+ 2005-03-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/ConvolveOp.java:
+ 	Removed comment added by eclipse.
+ 
+ 2005-03-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/xml/aelfred2/XmlParser.java:
+ 	Revert my typo fix.
+ 
+ 2005-03-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/geom/CubicCurve2D.java,
+ 	java/awt/geom/QuadCurve2D.java:
+ 	Fixed typo in name of Brian Cough.
+ 
+ 2005-03-29  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_VMSelector.c
+ 	(Java_gnu_java_nio_VMSelector_select): Use GetStaticMethodID
+ 	for Thread.interrupted().
+ 		
+ 2005-03-29  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/classpath/SystemProperties.java (static): Converted encoding
+ 	aliases	to lower case and removed redudant aliases.
+ 	* gnu/java/io/EncodingManager.java
+ 	(findEncoderConstructor, findDecoderConstructor): Call new method
+ 	resolveAlias().
+ 	(resolveAlias): New method.
+ 	* java/lang/System.java (getProperties): Removed uppercase aliases
+ 	from comments.
+ 
+ 2005-03-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URL.java (DEFAULT_SEARCH_PATH): Added
+ 	org.metastatic.jessie.
+ 
+ 2005-03-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (loadClass): Resolve class even if
+ 	it was already found.
+ 
+ 2005-03-28  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/io/decode/DecoderUnicodeBig.java,
+ 	* gnu/java/io/decode/DecoderUnicodeLittle.java,
+ 	* gnu/java/io/encode/EncoderUnicodeBig.java,
+ 	* gnu/java/io/encode/EncoderUnicodeLittle.java:
+ 	New files.
+ 
+ 2005-03-26  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* doc/hacking.texinfo:
+ 	Added note on reserved word usage.
+ 	
+ 2005-03-26  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_VMSelector.c:
+ 	Moved include statement for config.h to the top to
+ 	fix the build on Darwin6.
+ 
+ 	Reported by:  Riccardo Mottola <zuse@libero.it>
+ 
+ 2005-03-26  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_VMSelector.c:
+ 	Include <sys/types.h> to fix build on OS X.
+ 
+ 	Reported by: Michael Franz <mvfranz@gmail.com>
+ 
+ 2005-03-26  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/text/DecimalFormat.java (parse):
+ 	Check whether the positive suffix matches the pattern.
+ 
+ 2005-03-26  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/DomNode.java (notifyNode): grow listener array as
+ 	required.
+ 
+ 2005-03-26  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* javax/imageio/spi/IIORegistry.java (IIORegistry):
+ 	Don't assume that awt Toolkit is always ClasspathToolkit.
+ 
+ 2005-03-26  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/image/PixelGrabber.java (setPixels(int,int,int,int,
+ 	ColorModel,byte[],int,int): Fixed byte to int conversion.
+ 
+ 2005-03-23  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/xml/dom/html2/DomHTMLParser.java:
+ 	Changed 'enum' references to become 'enumeration'.
+ 	
+ 2005-03-22  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* configure.ac: Generate scripts/classpath.spec.
+ 	* scripts/classpath.spec.in: New file.
+ 
+ 2005-03-21  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 	
+ 	* gnu/xml/dom/html2/DomHTMLParser.java: New file.
+ 	* gnu/classpath/examples/html/Demo.java: New example.
+ 
+ 2005-03-21  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/classpath/SystemProperties.java:
+ 	Add missing aliases for "UnicodeBigUnmarked" and
+ 	UnicodeLittleUnmarked".
+ 	
+ 2005-03-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/events/escape_fosdem05.wml: Add link to kaffe
+ 	presentation.
+ 
+ 2005-03-17  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java: handle ZIP files
+ 	on the boot loader class path in getResources()
+ 
+ 2005-03-19  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/AnySeqHolder.java,
+ 	org/omg/CORBA/AnySeqHelper.java,
+ 	org/omg/CORBA/CompletionStatusHelper.java:
+ 	New files.
+ 
+ 2005-03-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www/downloads/downloads.wml: Add 0.14.
+ 	* doc/www/announce/20050226.wml: New file.
+ 
+ 2005-03-18  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/zip/GZIPInputStream.java:
+ 	(GZIPInputStream): Read header in constructor.
+ 	
+ 2005-03-18  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/javax/swing/text/html/parser/htmlAttributeSet.java:
+ 	(getAttributeNames()): Replaced 'enum' with 'enumeration'.
+ 	* gnu/javax/swing/text/html/parser/htmlValidator.java:
+ 	(validateParameters(TagElement,htmlAttributeSet)):
+ 	Replaced 'enum' with 'enumeration'.
+ 	(validateAttribute(TagElement,htmlAttributeSet,
+ 	                   Enumeration,Enumeration)):
+ 	Likewise.
+ 
+ 2005-03-18  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* ChangeLog.usermap: New file (replacing).
+ 
+ 2005-03-18  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* javax/swing/text/html/parser/Entity.java (getType): New method.
+ 	* javax/swing/text/html/parser/DocumentParser.java:
+ 	Inherit from javax.swing.text.html.parser.Parser.
+ 	
+ 2005-03-18  Robert Schuster  <thebohemian@gmx>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_VMSelector.c: Added important
+ 	return statement after throwing exception.
+ 
+ 2005-03-18  Robert Schuster  <thebohemian@gmx>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_VMSelector.c: Implemented
+ 	Java_gnu_java_nio_VMSelector_select.
+ 	* configure.ac: Added check for sys/select.h and strerro_r().
+ 
+ 2005-03-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: Add 0.14 release announcement
+ 	and link for the dead of the gui branch.
+ 
+ 2005-03-17  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/html2/DomHTMLDocument.java: Fixed element creation and
+ 	check for HTML/XHTML namespace.
+ 
+ 2005-03-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/lang/MainThread.java (MainThread): Load main class
+ 	using system class loader.
+ 
+ 2005-03-16  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* native/jni/java-nio/java_nio_VMDirectByteBuffer.c: use
+ 	global native reference to wrap persistent jclass variable.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c:
+ 	use DeleteLocalRef() to avoid exhausting local native references.
+ 
+ 2005-03-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/vmintegration.texinfo: Change input start to \input.
+ 
+ 2005-03-16  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* doc/vmintegration.texinfo: Added explanation
+ 	of gnu.classpath.boot.library.path property.
+ 
+ 2005-03-16  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* java/lang/Runtime.java: Added support for
+ 	gnu.classpath.boot.library.path system property.
+ 
+ 2005-03-14  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/DomImpl.java,
+ 	gnu/xml/dom/html2/DomHTMLAnchorElement.java,
+ 	gnu/xml/dom/html2/DomHTMLDocument.java,
+ 	gnu/xml/dom/html2/DomHTMLElement.java,
+ 	gnu/xml/dom/html2/DomHTMLFormElement.java,
+ 	gnu/xml/dom/html2/DomHTMLFrameElement.java,
+ 	gnu/xml/dom/html2/DomHTMLIFrameElement.java,
+ 	gnu/xml/dom/html2/DomHTMLImpl.java,
+ 	gnu/xml/dom/html2/DomHTMLInputElement.java,
+ 	gnu/xml/dom/html2/DomHTMLObjectElement.java,
+ 	gnu/xml/dom/html2/DomHTMLOptionElement.java,
+ 	gnu/xml/dom/html2/DomHTMLSelectElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableCellElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableRowElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableSectionElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTextAreaElement.java: JAXP integration,
+ 	UI events, and tree utility functions.
+ 
+ 2005-03-14  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: news on gui branch and calientra
+ 	* doc/www.gnu.org/docs/docs.wml: link to the wiki added
+ 	* doc/www.gnu.org/faq/faq.wml: entry on tainted developers
+ 
+ 2005-03-14  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* javax/swing/text/html/parser/Parser.java,
+ 	javax/swing/text/html/parser/Entity.java:
+ 	Inheriting from DTDConstants.
+ 	* javax/swing/text/html/parser/AttributeList.java
+ 	(getValues): Changed return type.
+ 	* javax/swing/text/html/parser/DocumentParser
+ 	(parse): Adding the callback parameter that receives
+ 	the parsing events.
+ 
+ 2005-03-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.14+cvs.
+ 
+ 2005-03-13  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/BAD_CONTEXT.java,
+ 	org/omg/CORBA/BAD_INV_ORDER.java,
+ 	org/omg/CORBA/BAD_OPERATION.java,
+ 	org/omg/CORBA/BAD_TYPECODE.java,
+ 	org/omg/CORBA/COMM_FAILURE.java,
+ 	org/omg/CORBA/DATA_CONVERSION.java,
+ 	org/omg/CORBA/FREE_MEM.java,
+ 	org/omg/CORBA/IMP_LIMIT.java,
+ 	org/omg/CORBA/INITIALIZE.java,
+ 	org/omg/CORBA/INTERNAL.java,
+ 	org/omg/CORBA/INTF_REPOS.java,
+ 	org/omg/CORBA/INVALID_TRANSACTION.java,
+ 	org/omg/CORBA/INV_FLAG.java,
+ 	org/omg/CORBA/INV_IDENT.java,
+ 	org/omg/CORBA/INV_OBJREF.java,
+ 	org/omg/CORBA/INV_POLICY.java,
+ 	org/omg/CORBA/NO_IMPLEMENT.java,
+ 	org/omg/CORBA/NO_MEMORY.java,
+ 	org/omg/CORBA/NO_PERMISSION.java,
+ 	org/omg/CORBA/NO_RESPONSE.java,
+ 	org/omg/CORBA/OBJECT_NOT_EXIST.java,
+ 	org/omg/CORBA/OBJ_ADAPTER.java,
+ 	org/omg/CORBA/PERSIST_STORE.java,
+ 	org/omg/CORBA/TRANSACTION_REQUIRED.java,
+ 	org/omg/CORBA/TRANSACTION_ROLLEDBACK.java,
+ 	org/omg/CORBA/TRANSIENT.java: making constructors
+ 	public.
+ 
+ 2005-03-13  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/StringSeqHolder.java,
+ 	org/omg/CORBA/WStringSeqHolder.java:
+ 	replacing replacing CR CR LF by CR LF.
+ 	* org/omg/CORBA/BAD_PARAM.java: making constructors
+ 	public.
+ 
+ 2005-03-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* org/omg/CORBA/ARG_IN.java: Removed redundant modifiers.
+ 	* org/omg/CORBA/ARG_INOUT.java: Likewise.
+ 	* org/omg/CORBA/ARG_OUT.java: Likewise.
+ 	* org/omg/CORBA/Any.java: Fixed HTML tags.
+ 	* org/omg/CORBA/Principal.java: Likewise.
+ 	* org/omg/CORBA/BAD_PARAM.java: Reordered modifiers.
+ 	* org/omg/CORBA/FixedHolder.java: Reworked imports.
+ 	* org/omg/CORBA/StringSeqHolder.java: Likewise.
+ 	* org/omg/CORBA/TypeCode.java: Likewise.
+ 	* org/omg/CORBA/TypeCodePackage/BadKind.java: Likewise.
+ 	* org/omg/CORBA/TypeCodePackage/Bounds.java: Likewise.
+ 	* org/omg/CORBA/WStringSeqHolder.java: Likewise.
+ 	* org/omg/CORBA/portable/OutputStream.java: Likewise.
+ 
+ 2005-03-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/https/Handler.java:
+ 	Reworked import statements.
+ 
+ 2005-03-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/javax/swing/text/html/parser/HTML_401F.java,
+ 	gnu/javax/swing/text/html/parser/gnuDTD.java,
+ 	gnu/javax/swing/text/html/parser/models/node.java:
+ 	Reworked import statements.
+ 
+ 2005-03-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/xml/aelfred2/XmlParser.java: Fixed typo.
+ 
+ 2005-03-12  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/StringSeqHelper.java,
+ 	org/omg/CORBA/WStringSeqHelper.java: New files.
+ 
+ 2005-03-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/events/escape_fosdem05.wml: Add links to
+ 	presentations.
+ 
+ 2005-03-11  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/html2/DomHTMLButtonElement.java,
+ 	gnu/xml/dom/html2/DomHTMLCollection.java,
+ 	gnu/xml/dom/html2/DomHTMLDocument.java,
+ 	gnu/xml/dom/html2/DomHTMLElement.java: Extensions for new element
+ 	types.
+ 	* gnu/xml/dom/html2/DomHTMLDListElement.java,
+ 	gnu/xml/dom/html2/DomHTMLDirectoryElement.java,
+ 	gnu/xml/dom/html2/DomHTMLDivElement.java,
+ 	gnu/xml/dom/html2/DomHTMLFieldSetElement.java,
+ 	gnu/xml/dom/html2/DomHTMLFontElement.java,
+ 	gnu/xml/dom/html2/DomHTMLFormElement.java,
+ 	gnu/xml/dom/html2/DomHTMLFrameElement.java,
+ 	gnu/xml/dom/html2/DomHTMLFrameSetElement.java,
+ 	gnu/xml/dom/html2/DomHTMLHRElement.java,
+ 	gnu/xml/dom/html2/DomHTMLHeadElement.java,
+ 	gnu/xml/dom/html2/DomHTMLHeadingElement.java,
+ 	gnu/xml/dom/html2/DomHTMLHtmlElement.java,
+ 	gnu/xml/dom/html2/DomHTMLIFrameElement.java,
+ 	gnu/xml/dom/html2/DomHTMLImageElement.java,
+ 	gnu/xml/dom/html2/DomHTMLInputElement.java,
+ 	gnu/xml/dom/html2/DomHTMLIsIndexElement.java,
+ 	gnu/xml/dom/html2/DomHTMLLIElement.java,
+ 	gnu/xml/dom/html2/DomHTMLLabelElement.java,
+ 	gnu/xml/dom/html2/DomHTMLLegendElement.java,
+ 	gnu/xml/dom/html2/DomHTMLLinkElement.java,
+ 	gnu/xml/dom/html2/DomHTMLMapElement.java,
+ 	gnu/xml/dom/html2/DomHTMLMenuElement.java,
+ 	gnu/xml/dom/html2/DomHTMLMetaElement.java,
+ 	gnu/xml/dom/html2/DomHTMLModElement.java,
+ 	gnu/xml/dom/html2/DomHTMLOListElement.java,
+ 	gnu/xml/dom/html2/DomHTMLObjectElement.java,
+ 	gnu/xml/dom/html2/DomHTMLOptGroupElement.java,
+ 	gnu/xml/dom/html2/DomHTMLOptionElement.java,
+ 	gnu/xml/dom/html2/DomHTMLParagraphElement.java,
+ 	gnu/xml/dom/html2/DomHTMLParamElement.java,
+ 	gnu/xml/dom/html2/DomHTMLPreElement.java,
+ 	gnu/xml/dom/html2/DomHTMLQuoteElement.java,
+ 	gnu/xml/dom/html2/DomHTMLScriptElement.java,
+ 	gnu/xml/dom/html2/DomHTMLSelectElement.java,
+ 	gnu/xml/dom/html2/DomHTMLStyleElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableCaptionElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableCellElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableColElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableRowElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTableSectionElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTextAreaElement.java,
+ 	gnu/xml/dom/html2/DomHTMLTitleElement.java,
+ 	gnu/xml/dom/html2/DomHTMLUListElement.java: New files.
+ 
+ 2005-03-11  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/aelfred2/SAXDriver.java: Corrected bug handling URI
+ 	warnings.
+ 
+ 2005-03-11  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/portable/InputStream.java (read_Context):
+ 	following API, this must be concrete and unimplemented.
+ 
+ 2005-03-11  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/BooleanSeqHelper.java,
+ 	org/omg/CORBA/CharSeqHelper.java,
+ 	org/omg/CORBA/DoubleSeqHelper.java,
+ 	org/omg/CORBA/FloatSeqHelper.java,
+ 	org/omg/CORBA/LongLongSeqHelper.java,
+ 	org/omg/CORBA/LongSeqHelper.java,
+ 	org/omg/CORBA/OctetSeqHelper.java,
+ 	org/omg/CORBA/ShortSeqHelper.java,
+ 	org/omg/CORBA/ULongLongSeqHelper.java,
+ 	org/omg/CORBA/ULongSeqHelper.java,
+ 	org/omg/CORBA/UShortSeqHelper.java,
+ 	org/omg/CORBA/WCharSeqHelper.java,
+ 	org/omg/CORBA/StringSeqHelper.java,
+ 	org/omg/CORBA/WStringSeqHelper.java:
+ 	New sequence holders.
+ 	* org/omg/CORBA/StringSeqHelper.java,
+ 	org/omg/CORBA/WStringSeqHelper.java: New helpers.
+ 
+ 2005-03-11  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* native/jni/java-lang/java_lang_VMProcess.c: Fix segfault
+ 	in the case that a zero length command array is passed.
+ 
+ 2005-03-11  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/fdlibm/ieeefp.h: Merge m32r bits from libgcj to keep the diff
+ 	minimal.
+ 
+ 2005-03-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Compmonent.java
+ 	(setComponentOrientation): The variable oldOrientation is initialized
+ 	too early. This is fixed.
+ 
+ 2005-03-11  Roman Kennke  <roman@kennke.org>
+ 
+ 	* java/awt/Compmonent.java
+ 	(setComponentOrientation): Made this property firing a
+ 	PropertyChangeEvent.
+ 
+ 2005-03-11  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* java/beans/EventHandler.java: Reworked documentation.
+ 	(invoke): Fixed behavior to match spec. 
+ 
+ 2005-03-11  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Class.java (newInstance): Fixed previous patch.
+ 
+ 2005-03-11  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Class.java (newInstance): Fix bug related to package
+ 	private classes.
+ 
+ 2005-03-10  Andrew Haley  <aph@redhat.com>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (smallTransferFrom):
+ 	New.
+ 	(smallTransferTo): New.
+ 	(transferFrom): Loop around smallTransferFrom, copying pageSize
+ 	bytes each time.
+ 	(transferTo): Likewise.
+ 
+ 2005-03-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/InputStreamReader.java: Indentation fixlets.  Added
+ 	'@since' markers.
+ 
+ 2005-03-10  Chris Burdess  <dog@bluezoo.org>
+ 
+ 	* gnu/xml/dom/ls/SAXEventSink.java: Ignore element declarations if
+ 	not currently parsing the DTD.
+ 
+ 2005-03-10  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* testsuite/javax.swing.text.html.parser/
+ 	AllParserTests.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/HTML_Test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/AttributeList_test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/DTD_test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/Element_Test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/Entity_Test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/HTML_parsing.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/HTML_randomTable.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/parameterDefaulter_Test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/Parser_Test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/ParserEntityResolverTest.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/ParserTest.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/supplementaryNotifications.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/TagElement_Test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/TestCase.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/Text.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/textPreProcessor_Test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/Token_locations.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/low/Buffer_Test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/low/Constants_Test.java,
+ 	testsuite/javax.swing.text.html.parser/
+ 	test/gnu/javax/swing/text/html/parser/low/ReaderTokenizer_Test.java:
+ 	New Classpath specific tests for the parser classes in gnu namespace.
+ 
+ 2005-03-10  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* javax/swing/text/ChangedCharSetException.java,
+ 	javax/swing/text/html/HTMLEditorKit.java,
+ 	javax/swing/text/html/HTMLFrameHyperlinkEvent.java,
+ 	javax/swing/text/html/parser/AttributeList.java,
+ 	javax/swing/text/html/parser/ContentModel.java,
+ 	javax/swing/text/html/parser/DocumentParser.java,
+ 	javax/swing/text/html/parser/DTD.java,
+ 	javax/swing/text/html/parser/DTDConstants.java,
+ 	javax/swing/text/html/parser/Element.java,
+ 	javax/swing/text/html/parser/Entity.java,
+ 	javax/swing/text/html/parser/Parser.java,
+ 	javax/swing/text/html/parser/TagElement.java,
+ 	gnu/javax/swing/text/html/package.html,
+ 	gnu/javax/swing/text/html/parser/gnuDTD.java,
+ 	gnu/javax/swing/text/html/parser/HTML_401F.java,
+ 	gnu/javax/swing/text/html/parser/htmlAttributeSet.java,
+ 	gnu/javax/swing/text/html/parser/htmlValidator.java,
+ 	gnu/javax/swing/text/html/parser/package.html,
+ 	gnu/javax/swing/text/html/parser/models/list.java,
+ 	gnu/javax/swing/text/html/parser/models/node.java,
+ 	gnu/javax/swing/text/html/parser/models/noTagModel.java,
+ 	gnu/javax/swing/text/html/parser/models/package.html,
+ 	gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java,
+ 	gnu/javax/swing/text/html/parser/models/TableRowContentModel.java,
+ 	gnu/javax/swing/text/html/parser/models/transformer.java,
+ 	gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java,
+ 	gnu/javax/swing/text/html/parser/support/package.html,
+ 	gnu/javax/swing/text/html/parser/support/parameterDefaulter.java,
+ 	gnu/javax/swing/text/html/parser/support/Parser.java,
+ 	gnu/javax/swing/text/html/parser/support/textPreProcessor.java,
+ 	gnu/javax/swing/text/html/parser/support/low/Buffer.java,
+ 	gnu/javax/swing/text/html/parser/support/low/Constants.java,
+ 	gnu/javax/swing/text/html/parser/support/low/Location.java,
+ 	gnu/javax/swing/text/html/parser/support/low/node.java,
+ 	gnu/javax/swing/text/html/parser/support/low/package.html,
+ 	gnu/javax/swing/text/html/parser/support/low/ParseException.java,
+ 	gnu/javax/swing/text/html/parser/support/low/pattern.java,
+ 	gnu/javax/swing/text/html/parser/support/low/Queue.java,
+ 	gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java:
+ 	New files.
+ 	* javax/swing/text/html/HTML.java,
+ 	javax/swing/text/html/parser/ParserDelegator.java:
+ 	New files (replacing).
+ 	* javax/swing/text/html/package.html,
+ 	javax/swing/text/html/parser/package.html: Documenting the
+ 	packages.
+ 
+ 2005-03-09  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/Calendar.java
+ 	(set): Use starting day of week when one is needed if none is given.
+ 	* java/text/SimpleDateFormat.java
+ 	(parse): Handle 1-12 and 1-24 timestamps correctly.
+ 	* java/util/GregorianCalendar
+ 	(computeTime, computeFields): HOUR should be in 0-11 format.
+ 	(nonLeniencyCheck): Adjust leniency checking to that fact.
+ 
+ 2005-03-09  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/locale/Calendar.java,
+ 	gnu/java/locale/Calendar_nl.java,
+ 	gnu/java/locale/Calendar_de.java,
+ 	gnu/java/locale/Calendar_en.java:
+ 	Removed.
+ 
+ 2005-03-09  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/Calendar.java:
+ 	Updated to use gnu.java.locale.LocaleInformation for locale info.
+ 	* java/util/GregorianCalendar.java:
+ 	Made gregorianCutover a hard-coded constant. It is not localized.
+ 
+ 2005-03-09  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/html2/DomHTMLAnchorElement.java,
+ 	gnu/xml/dom/html2/DomHTMLAppletElement.java,
+ 	gnu/xml/dom/html2/DomHTMLAreaElement.java,
+ 	gnu/xml/dom/html2/DomHTMLBaseElement.java,
+ 	gnu/xml/dom/html2/DomHTMLBaseFontElement.java,
+ 	gnu/xml/dom/html2/DomHTMLBodyElement.java,
+ 	gnu/xml/dom/html2/DomHTMLBRElement.java,
+ 	gnu/xml/dom/html2/DomHTMLButtonElement.java,
+ 	gnu/xml/dom/html2/DomHTMLCollection.java,
+ 	gnu/xml/dom/html2/DomHTMLDocument.java,
+ 	gnu/xml/dom/html2/DomHTMLElement.java: New files.
+ 
+ 2005-03-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation.java,
+ 	gnu/java/locale/LocaleInformation_aa.java,
+ 	gnu/java/locale/LocaleInformation_aa_DJ.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER_SAAHO.java,
+ 	gnu/java/locale/LocaleInformation_aa_ET.java,
+ 	gnu/java/locale/LocaleInformation_af.java,
+ 	gnu/java/locale/LocaleInformation_af_ZA.java,
+ 	gnu/java/locale/LocaleInformation_am.java,
+ 	gnu/java/locale/LocaleInformation_am_ET.java,
+ 	gnu/java/locale/LocaleInformation_ar.java,
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java,
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_as.java,
+ 	gnu/java/locale/LocaleInformation_as_IN.java,
+ 	gnu/java/locale/LocaleInformation_az_Cyrl.java,
+ 	gnu/java/locale/LocaleInformation_be.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_bg.java,
+ 	gnu/java/locale/LocaleInformation_bg_BG.java,
+ 	gnu/java/locale/LocaleInformation_bn.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ca.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cy.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_de_LI.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_dv.java,
+ 	gnu/java/locale/LocaleInformation_dv_MV.java,
+ 	gnu/java/locale/LocaleInformation_dz.java,
+ 	gnu/java/locale/LocaleInformation_dz_BT.java,
+ 	gnu/java/locale/LocaleInformation_el.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_en_AS.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BE.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_BZ.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_GU.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en_MH.java,
+ 	gnu/java/locale/LocaleInformation_en_MP.java,
+ 	gnu/java/locale/LocaleInformation_en_MT.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_PK.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_UM.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_US_POSIX.java,
+ 	gnu/java/locale/LocaleInformation_en_VI.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_eo.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_eu.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_fa.java,
+ 	gnu/java/locale/LocaleInformation_fa_AF.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fo.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gl.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gu.java,
+ 	gnu/java/locale/LocaleInformation_gu_IN.java,
+ 	gnu/java/locale/LocaleInformation_gv.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_he.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_hi.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hr.java,
+ 	gnu/java/locale/LocaleInformation_hu.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_hy.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM_REVISED.java,
+ 	gnu/java/locale/LocaleInformation_id.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_is.java,
+ 	gnu/java/locale/LocaleInformation_is_IS.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_iu.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation_ka.java,
+ 	gnu/java/locale/LocaleInformation_kk.java,
+ 	gnu/java/locale/LocaleInformation_kk_KZ.java,
+ 	gnu/java/locale/LocaleInformation_kl.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_km.java,
+ 	gnu/java/locale/LocaleInformation_km_KH.java,
+ 	gnu/java/locale/LocaleInformation_kn.java,
+ 	gnu/java/locale/LocaleInformation_kn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_ky.java,
+ 	gnu/java/locale/LocaleInformation_lo.java,
+ 	gnu/java/locale/LocaleInformation_lo_LA.java,
+ 	gnu/java/locale/LocaleInformation_lt.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mk.java,
+ 	gnu/java/locale/LocaleInformation_ml.java,
+ 	gnu/java/locale/LocaleInformation_ml_IN.java,
+ 	gnu/java/locale/LocaleInformation_mn.java,
+ 	gnu/java/locale/LocaleInformation_mn_MN.java,
+ 	gnu/java/locale/LocaleInformation_mr.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_ms.java,
+ 	gnu/java/locale/LocaleInformation_ms_BN.java,
+ 	gnu/java/locale/LocaleInformation_ms_MY.java,
+ 	gnu/java/locale/LocaleInformation_mt.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nb_NO.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java,
+ 	gnu/java/locale/LocaleInformation_nn.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_om.java,
+ 	gnu/java/locale/LocaleInformation_om_ET.java,
+ 	gnu/java/locale/LocaleInformation_om_KE.java,
+ 	gnu/java/locale/LocaleInformation_or.java,
+ 	gnu/java/locale/LocaleInformation_or_IN.java,
+ 	gnu/java/locale/LocaleInformation_pa.java,
+ 	gnu/java/locale/LocaleInformation_pa_IN.java,
+ 	gnu/java/locale/LocaleInformation_pl.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_ps.java,
+ 	gnu/java/locale/LocaleInformation_ps_AF.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_sa.java,
+ 	gnu/java/locale/LocaleInformation_sa_IN.java,
+ 	gnu/java/locale/LocaleInformation_sk.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sl.java,
+ 	gnu/java/locale/LocaleInformation_so.java,
+ 	gnu/java/locale/LocaleInformation_so_DJ.java,
+ 	gnu/java/locale/LocaleInformation_so_ET.java,
+ 	gnu/java/locale/LocaleInformation_so_KE.java,
+ 	gnu/java/locale/LocaleInformation_so_SO.java,
+ 	gnu/java/locale/LocaleInformation_sq.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sr.java,
+ 	gnu/java/locale/LocaleInformation_sr_Latn.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_sw.java,
+ 	gnu/java/locale/LocaleInformation_sw_KE.java,
+ 	gnu/java/locale/LocaleInformation_sw_TZ.java,
+ 	gnu/java/locale/LocaleInformation_ta.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_te.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_th.java,
+ 	gnu/java/locale/LocaleInformation_th_TH.java,
+ 	gnu/java/locale/LocaleInformation_ti.java,
+ 	gnu/java/locale/LocaleInformation_ti_ER.java,
+ 	gnu/java/locale/LocaleInformation_ti_ET.java,
+ 	gnu/java/locale/LocaleInformation_tr.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_tt.java,
+ 	gnu/java/locale/LocaleInformation_tt_RU.java,
+ 	gnu/java/locale/LocaleInformation_uk.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java,
+ 	gnu/java/locale/LocaleInformation_ur.java,
+ 	gnu/java/locale/LocaleInformation_uz.java,
+ 	gnu/java/locale/LocaleInformation_uz_AF.java,
+ 	gnu/java/locale/LocaleInformation_vi.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_CN_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_HK_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_MO_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_TW_Hant.java:
+ 	Regenerated with current gnu.localegen.
+ 
+ 2005-03-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java (addURLImpl): Reset 'thisString'.
+ 	(toString): Synchronize.
+ 
+ 2005-03-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* org/omg/CORBA/ARG_IN.java,
+ 	org/omg/CORBA/ARG_INOUT.java,
+ 	org/omg/CORBA/ARG_OUT.java,
+ 	org/omg/CORBA/Any.java,
+ 	org/omg/CORBA/AnyHolder.java,
+ 	org/omg/CORBA/BAD_CONTEXT.java,
+ 	org/omg/CORBA/BAD_INV_ORDER.java,
+ 	org/omg/CORBA/BAD_OPERATION.java,
+ 	org/omg/CORBA/BAD_PARAM.java,
+ 	org/omg/CORBA/BAD_TYPECODE.java,
+ 	org/omg/CORBA/BooleanHolder.java,
+ 	org/omg/CORBA/BooleanSeqHolder.java,
+ 	org/omg/CORBA/Bounds.java,
+ 	org/omg/CORBA/ByteHolder.java,
+ 	org/omg/CORBA/COMM_FAILURE.java,
+ 	org/omg/CORBA/CharHolder.java,
+ 	org/omg/CORBA/CharSeqHolder.java,
+ 	org/omg/CORBA/CompletionStatus.java,
+ 	org/omg/CORBA/Context.java,
+ 	org/omg/CORBA/ContextList.java,
+ 	org/omg/CORBA/DATA_CONVERSION.java,
+ 	org/omg/CORBA/DoubleHolder.java,
+ 	org/omg/CORBA/DoubleSeqHolder.java,
+ 	org/omg/CORBA/FREE_MEM.java,
+ 	org/omg/CORBA/FixedHolder.java,
+ 	org/omg/CORBA/FloatHolder.java,
+ 	org/omg/CORBA/FloatSeqHolder.java,
+ 	org/omg/CORBA/IDLEntity.java,
+ 	org/omg/CORBA/IMP_LIMIT.java,
+ 	org/omg/CORBA/INITIALIZE.java,
+ 	org/omg/CORBA/INTERNAL.java,
+ 	org/omg/CORBA/INTF_REPOS.java,
+ 	org/omg/CORBA/INVALID_TRANSACTION.java,
+ 	org/omg/CORBA/INV_FLAG.java,
+ 	org/omg/CORBA/INV_IDENT.java,
+ 	org/omg/CORBA/INV_OBJREF.java,
+ 	org/omg/CORBA/INV_POLICY.java,
+ 	org/omg/CORBA/IntHolder.java,
+ 	org/omg/CORBA/LongHolder.java,
+ 	org/omg/CORBA/LongLongSeqHolder.java,
+ 	org/omg/CORBA/LongSeqHolder.java,
+ 	org/omg/CORBA/MARSHAL.java,
+ 	org/omg/CORBA/NO_IMPLEMENT.java,
+ 	org/omg/CORBA/NO_MEMORY.java,
+ 	org/omg/CORBA/NO_PERMISSION.java,
+ 	org/omg/CORBA/NO_RESPONSE.java,
+ 	org/omg/CORBA/NamedValue.java,
+ 	org/omg/CORBA/OBJECT_NOT_EXIST.java,
+ 	org/omg/CORBA/OBJ_ADAPTER.java,
+ 	org/omg/CORBA/ORB.java,
+ 	org/omg/CORBA/Object.java,
+ 	org/omg/CORBA/OctetSeqHolder.java,
+ 	org/omg/CORBA/PERSIST_STORE.java,
+ 	org/omg/CORBA/Principal.java,
+ 	org/omg/CORBA/ShortHolder.java,
+ 	org/omg/CORBA/ShortSeqHolder.java,
+ 	org/omg/CORBA/StringHolder.java,
+ 	org/omg/CORBA/SystemException.java,
+ 	org/omg/CORBA/TCKind.java,
+ 	org/omg/CORBA/TRANSACTION_REQUIRED.java,
+ 	org/omg/CORBA/TRANSACTION_ROLLEDBACK.java,
+ 	org/omg/CORBA/TRANSIENT.java,
+ 	org/omg/CORBA/TypeCode.java,
+ 	org/omg/CORBA/TypeCodeHolder.java,
+ 	org/omg/CORBA/TypeCodePackage/BadKind.java,
+ 	org/omg/CORBA/TypeCodePackage/Bounds.java,
+ 	org/omg/CORBA/ULongLongSeqHolder.java,
+ 	org/omg/CORBA/ULongSeqHolder.java,
+ 	org/omg/CORBA/UNKNOWN.java,
+ 	org/omg/CORBA/UShortSeqHolder.java,
+ 	org/omg/CORBA/UserException.java,
+ 	org/omg/CORBA/WCharSeqHolder.java,
+ 	org/omg/CORBA/portable/IDLEntity.java,
+ 	org/omg/CORBA/portable/InputStream.java,
+ 	org/omg/CORBA/portable/OutputStream.java,
+ 	org/omg/CORBA/portable/Streamable.java:
+ 	Use our standard copyright header.
+ 
+ 2005-03-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* org/omg/CORBA/AnyHolder.java: Added missing import.
+ 
+ 2005-03-09  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	* java/awt/AWTEvent.java (toString): Added case
+ 	for source not being an AWT component.
+ 	
+ 2005-03-08  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/BooleanHolder.java,
+ 	org/omg/CORBA/ByteHolder.java,
+ 	org/omg/CORBA/CharHolder.java,
+ 	org/omg/CORBA/DoubleHolder.java,
+ 	org/omg/CORBA/FixedHolder.java,
+ 	org/omg/CORBA/FloatHolder.java,
+ 	org/omg/CORBA/IntHolder.java,
+ 	org/omg/CORBA/LongHolder.java,
+ 	org/omg/CORBA/ShortHolder.java,
+ 	org/omg/CORBA/StringHolder.java,
+ 	org/omg/CORBA/TypeCodeHolder.java:  
+ 	Fixing the _read method.
+ 
+ 2005-03-08  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/NamedValue.java,
+ 	org/omg/CORBA/ARG_IN.java,
+ 	org/omg/CORBA/ARG_OUT.java,
+ 	org/omg/CORBA/ARG_INOUT.java:
+ 	New files.
+ 
+ 2005-03-08  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 	* org/omg/CORBA/AnyHolder.java: New file.
+ 
+ 2005-03-08 David Gilbert <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/Font.java (decode): Handle null argument and allow
+ 	space as delimiter.
+ 
+ 2005-03-07  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/https/Handler.java: New file.
+ 
+ 2005-03-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/DataInputStream.java (ignoreInitialNewline): Removed
+ 	(readLine): Changed newline handling.
+ 
+ 2005-03-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URI.java (AUTHORITY_REGEXP): Corrected regexp.
+ 	(AUTHORITY_USERINFO_GROUP,AUTHORITY_HOST_GROUP,AUTHORITY_PORT_GROUP):
+ 	Adjusted to match new regexp.
+ 
+ 2005-03-06  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/CORBA/primitiveArrayTypeCode.java:
+ 	Moved from org.omg.CORBA.
+ 	* gnu/CORBA/primitiveTypeCode.java: Likewise.
+ 	* org/omg/CORBA/BooleanHolder.java,
+ 	org/omg/CORBA/ByteHolder.java,
+ 	org/omg/CORBA/CharHolder.java,
+ 	org/omg/CORBA/DoubleHolder.java,
+ 	org/omg/CORBA/FixedHolder.java,
+ 	org/omg/CORBA/FloatHolder.java,
+ 	org/omg/CORBA/IntHolder.java,
+ 	org/omg/CORBA/LongHolder.java,
+ 	org/omg/CORBA/ShortHolder.java,
+ 	org/omg/CORBA/StringHolder.java,
+ 	org/omg/CORBA/TypeCodeHolder.java:
+ 	Added necessary imports.
+ 	* org/omg/CORBA/BooleanSeqHolder.java,
+ 	org/omg/CORBA/CharSeqHolder.java,
+ 	org/omg/CORBA/DoubleSeqHolder.java,
+ 	org/omg/CORBA/FloatSeqHolder.java,
+ 	org/omg/CORBA/LongLongSeqHolder.java,
+ 	org/omg/CORBA/LongSeqHolder.java,
+ 	org/omg/CORBA/OctetSeqHolder.java,
+ 	org/omg/CORBA/ShortSeqHolder.java,
+ 	org/omg/CORBA/ULongLongSeqHolder.java,
+ 	org/omg/CORBA/ULongSeqHolder.java,
+ 	org/omg/CORBA/UShortSeqHolder.java,
+ 	org/omg/CORBA/WCharSeqHolder.java:
+ 	Likewise and changed direct value
+ 	assignments to setValue calls.
+ 	
+ 2005-03-06  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* org/omg/CORBA/CompletionStatus.java,
+ 	org/omg/CORBA/TypeCode.java,
+ 	org/omg/CORBA/primitiveTypeCode.java:
+ 	Fix references to Bounds and add implementations
+ 	of IDLEntity.
+ 	
+ 2005-03-06  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 	* org/omg/CORBA/TypeCodePackage/BadKind.java,
+ 	org/omg/CORBA/SystemException.java,
+ 	org/omg/CORBA/TypeCode.java,
+ 	org/omg/CORBA/UserException.java,
+ 	org/omg/CORBA/CompletionStatus.java:
+ 	Documenting that serialVersionUID is from v1.4.
+ 	
+ 2005-04-06  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 	* org/omg/CORBA/Context.java,
+ 	org/omg/CORBA/ContextList.java: New files.
+ 
+ 2005-04-06  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 	* org/omg/CORBA/TCKind.java: Making fields final.
+ 
+ 2005-04-06  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/Any.java,
+ 	org/omg/CORBA/Principal.java,
+ 	org/omg/CORBA/TypeCodePackage/Bounds.java,
+ 	org/omg/CORBA/TypeCodePackage/package.html: New files.
+ 
+ 2005-03-06 Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/ULongSeqHolder.java,
+ 	org/omg/CORBA/UShortSeqHolder.java,
+ 	org/omg/CORBA/WCharSeqHolder.java,
+ 	org/omg/CORBA/BooleanSeqHolder.java,
+ 	org/omg/CORBA/CharSeqHolder.java,
+ 	org/omg/CORBA/DoubleSeqHolder.java,
+ 	org/omg/CORBA/FloatSeqHolder.java,
+ 	org/omg/CORBA/LongLongSeqHolder.java,
+ 	org/omg/CORBA/LongSeqHolder.java,
+ 	org/omg/CORBA/OctetSeqHolder.java,
+ 	org/omg/CORBA/ShortSeqHolder.java,
+ 	org/omg/CORBA/ULongLongSeqHolder.java: New files.
+ 
+ 2005-03-06  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/IntHolder.java,
+ 	org/omg/CORBA/LongHolder.java,
+ 	org/omg/CORBA/ShortHolder.java,
+ 	org/omg/CORBA/StringHolder.java,
+ 	org/omg/CORBA/TypeCodeHolder.java,
+ 	org/omg/CORBA/BooleanHolder.java,
+ 	org/omg/CORBA/ByteHolder.java,
+ 	org/omg/CORBA/CharHolder.java,
+ 	org/omg/CORBA/DoubleHolder.java,
+ 	org/omg/CORBA/FixedHolder.java,
+ 	org/omg/CORBA/FloatHolder.java,
+ 	org/omg/CORBA/primitiveTypeCode.java,
+ 	org/omg/CORBA/primitiveArrayTypeCode.java: New files.
+  
+ 2005-03-06  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/portable/InputStream.java,
+ 	org/omg/CORBA/portable/OutputStream.java,
+ 	org/omg/CORBA/portable/IDLEntity.java,
+ 	org/omg/CORBA/portable/Streamable.java: New files.
+ 	* org/omg/CORBA/Object.java,
+ 	org/omg/CORBA/ORB.java: New files (just to keep code compilable).
+  
+ 2005-03-06  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 	* org/omg/CORBA/TypeCodePackage/BadKind.java,
+ 	org/omg/CORBA/SystemException.java,
+ 	org/omg/CORBA/TypeCode.java,
+ 	org/omg/CORBA/UserException.java,
+ 	org/omg/CORBA/CompletionStatus.java: 
+ 	Replacing serialVersionUID v1.2 into v1.4.
+ 	
+ 2005-03-06  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 	* org/omg/CORBA/TypeCodePackage/BadKind.java,
+ 	org/omg/CORBA/SystemException.java,
+ 	org/omg/CORBA/TypeCode.java,
+ 	org/omg/CORBA/UserException.java,
+ 	org/omg/CORBA/CompletionStatus.java: Adding serialVersionUID.
+ 	
+ 2005-03-05  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/fdlibm/dtoa.c (_dtoa_r): Initialize variables ilim, ilim1
+ 	and spec_case. Initialize pointer mlo.
+ 	* native/fdlibm/strtod.c (_strtod_r): Initialize pointers bb, bd,
+ 	ds and delta.
+ 	* native/fdlibm/e_asin.c (__ieee754_asin): Initialize variable t.
+ 	* native/fdlibm/e_exp.c (__ieee754_exp): Initialize variables hi,
+ 	lo and k.
+ 	* native/fdlibm/e_rem_pio2.c (__ieee754_rem_pio2): Initialize
+ 	uninitialized variable z.
+ 
+ 2005-03-05  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 	* org/omg/CORBA/BAD_OPERATION.java: Formatting change
+ 	(replacing CR CR LF by CR LF).
+ 	
+ 2005-03-04  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* org/omg/CORBA/Bounds.java: New file.
+ 	* org/omg/CORBA/TypeCode.java: Commented
+ 	out Any to fix build.
+ 	From Audrius Meskauskas:
+ 	* org/omg/CORBA/BAD_OPERATION.java: New file.	
+ 
+ 2005-03-05  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/INV_POLICY.java,
+ 	org/omg/CORBA/NO_PERMISSION.java,
+ 	org/omg/CORBA/BAD_INV_ORDER.java,
+ 	org/omg/CORBA/INTF_REPOS.java,
+ 	org/omg/CORBA/INV_IDENT.java,
+ 	org/omg/CORBA/NO_IMPLEMENT.java,
+ 	org/omg/CORBA/UNKNOWN.java,
+ 	org/omg/CORBA/INV_FLAG.java,
+ 	org/omg/CORBA/BAD_TYPECODE.java,
+ 	org/omg/CORBA/NO_MEMORY.java,
+ 	org/omg/CORBA/INVALID_TRANSACTION.java,
+ 	org/omg/CORBA/INTERNAL.java,
+ 	org/omg/CORBA/COMM_FAILURE.java,
+ 	org/omg/CORBA/PERSIST_STORE.java,
+ 	org/omg/CORBA/BAD_CONTEXT.java,
+ 	org/omg/CORBA/INV_OBJREF.java,
+ 	org/omg/CORBA/TRANSACTION_REQUIRED.java,
+ 	org/omg/CORBA/TRANSACTION_ROLLEDBACK.java,
+ 	org/omg/CORBA/FREE_MEM.java,
+ 	org/omg/CORBA/OBJECT_NOT_EXIST.java,
+ 	org/omg/CORBA/TRANSIENT.java,
+ 	org/omg/CORBA/OBJ_ADAPTER.java,
+ 	org/omg/CORBA/IMP_LIMIT.java,
+ 	org/omg/CORBA/INITIALIZE.java,
+ 	org/omg/CORBA/NO_RESPONSE.java,
+ 	org/omg/CORBA/DATA_CONVERSION.java,
+ 	org/omg/CORBA/MARSHAL.java: New files.
+ 
+ 2005-03-04  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/text/rtf/ControlWordToken.java: New file.
+ 	* javax/swing/text/rtf/RTFEditorKit.java: New file.
+ 	* javax/swing/text/rtf/RTFParseException.java: New file.
+ 	* javax/swing/text/rtf/RTFParser.java: New file.
+ 	* javax/swing/text/rtf/RTFScanner.java: New file.
+ 	* javax/swing/text/rtf/TextToken.java: New file.
+ 	* javax/swing/text/rtf/Token.java: New file.
+ 	
+ 2005-03-02  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+         * org/omg/CORBA/TypeCode.java,
+         org/omg/CORBA/UserException.java,
+         org/omg/CORBA/TypeCodePackage/BadKind.java: New files. 
+ 	
+ 2005-03-02  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* org/omg/CORBA/TCKind.java,
+ 	org/omg/CORBA/BAD_PARAM.java,
+ 	org/omg/CORBA/CompletionStatus.java,
+ 	org/omg/CORBA/IDLEntity.java,
+ 	org/omg/CORBA/SystemException.java: New files.
+ 
+ 2005-03-03  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/BoxLayout.java:
+ 	(preferredLayoutSize,minimumLayoutSize,maximumLayoutSize,
+ 	layoutContainer): Make these methods and thereby the
+ 	BoxLayout respect the insets (like borders) of the
+ 	component that is laid out.
+ 
+ 2005-03-03  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/InheritableThreadLocal.java
+ 	(threadMap): Removed.
+ 	(InheritableThreadLocal): Removed code.
+ 	(newChildThread): Changed to use locals map in Thread.
+ 	* java/lang/Thread.java
+ 	(locals): New field.
+ 	(die): Clear locals field.
+ 	(getThreadLocals): New method.
+ 	* java/lang/ThreadLocal.java
+ 	(value): Removed.
+ 	(valueMap): Removed.
+ 	(get,set): Changed to use locals map in Thread.
+ 
+ 2005-03-03  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/FileInputStream.java (FileInputStream(File)),
+ 	java/io/FileOutputStream.java (FileOutputStream(File)):
+ 	Removed unnecessary File.isDirectory() check.
+ 
+ 2005-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* doc/hacking.texinfo: Improved explanation of our coding style
+ 	regarding import statements.
+ 
+ 2005-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/OID.java,
+ 	gnu/java/security/der/DERReader.java,
+ 	gnu/java/security/provider/CollectionCertStoreImpl.java,
+ 	gnu/java/security/provider/DSAParameterGenerator.java,
+ 	gnu/java/security/provider/DefaultPolicy.java,
+ 	gnu/java/security/provider/EncodedKeyFactory.java,
+ 	gnu/java/security/provider/GnuDHPublicKey.java,
+ 	gnu/java/security/provider/GnuDSAPrivateKey.java,
+ 	gnu/java/security/provider/GnuDSAPublicKey.java,
+ 	gnu/java/security/provider/GnuRSAPrivateKey.java,
+ 	gnu/java/security/provider/GnuRSAPublicKey.java,
+ 	gnu/java/security/provider/PKIXCertPathValidatorImpl.java,
+ 	gnu/java/security/provider/RSA.java,
+ 	gnu/java/security/provider/SHA1PRNG.java,
+ 	gnu/java/security/provider/SHA1withRSA.java,
+ 	gnu/java/security/provider/X509CertificateFactory.java,
+ 	gnu/java/security/x509/GnuPKIExtension.java,
+ 	gnu/java/security/x509/X500DistinguishedName.java,
+ 	gnu/java/security/x509/X509CRL.java,
+ 	gnu/java/security/x509/X509CRLEntry.java,
+ 	gnu/java/security/x509/X509CertPath.java,
+ 	gnu/java/security/x509/X509CertSelectorImpl.java,
+ 	gnu/java/security/x509/X509Certificate.java,
+ 	gnu/java/security/x509/ext/AuthorityKeyIdentifier.java,
+ 	gnu/java/security/x509/ext/BasicConstraints.java,
+ 	gnu/java/security/x509/ext/CRLNumber.java,
+ 	gnu/java/security/x509/ext/CertificatePolicies.java,
+ 	gnu/java/security/x509/ext/ExtendedKeyUsage.java,
+ 	gnu/java/security/x509/ext/Extension.java,
+ 	gnu/java/security/x509/ext/GeneralNames.java,
+ 	gnu/java/security/x509/ext/IssuerAlternativeNames.java,
+ 	gnu/java/security/x509/ext/KeyUsage.java,
+ 	gnu/java/security/x509/ext/PolicyConstraint.java,
+ 	gnu/java/security/x509/ext/PolicyMappings.java,
+ 	gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java,
+ 	gnu/java/security/x509/ext/ReasonCode.java,
+ 	gnu/java/security/x509/ext/SubjectAlternativeNames.java,
+ 	gnu/java/security/x509/ext/SubjectKeyIdentifier.java:
+ 	Reworked import statments to match our style.
+ 
+ 2005-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/Buffers.java,
+ 	gnu/java/awt/ComponentDataBlitOp.java,
+ 	gnu/java/awt/EmbeddedWindowSupport.java,
+ 	gnu/java/awt/image/ImageDecoder.java,
+ 	gnu/java/awt/image/XBMDecoder.java,
+ 	gnu/java/awt/peer/ClasspathFontPeer.java,
+ 	gnu/java/beans/IntrospectionIncubator.java,
+ 	gnu/java/io/EncodingManager.java,
+ 	gnu/java/io/decode/DecoderUTF8.java,
+ 	gnu/java/io/encode/EncoderEightBitLookup.java,
+ 	gnu/java/io/encode/EncoderUTF8.java,
+ 	gnu/java/lang/ClassHelper.java,
+ 	gnu/java/lang/MainThread.java,
+ 	gnu/java/lang/reflect/TypeSignature.java,
+ 	gnu/java/locale/LocaleHelper.java,
+ 	gnu/java/net/CRLFInputStream.java,
+ 	gnu/java/net/EmptyX509TrustManager.java,
+ 	gnu/java/net/HeaderFieldHelper.java,
+ 	gnu/java/net/LineInputStream.java,
+ 	gnu/java/net/PlainSocketImpl.java,
+ 	gnu/java/net/URLParseError.java,
+ 	gnu/java/net/protocol/file/Connection.java,
+ 	gnu/java/net/protocol/file/Handler.java,
+ 	gnu/java/net/protocol/ftp/ActiveModeDTP.java,
+ 	gnu/java/net/protocol/ftp/BlockInputStream.java,
+ 	gnu/java/net/protocol/ftp/CompressedInputStream.java,
+ 	gnu/java/net/protocol/ftp/DTP.java,
+ 	gnu/java/net/protocol/ftp/DTPInputStream.java,
+ 	gnu/java/net/protocol/ftp/FTPConnection.java,
+ 	gnu/java/net/protocol/ftp/FTPURLConnection.java,
+ 	gnu/java/net/protocol/ftp/PassiveModeDTP.java,
+ 	gnu/java/net/protocol/ftp/StreamInputStream.java,
+ 	gnu/java/net/protocol/http/ChunkedInputStream.java,
+ 	gnu/java/net/protocol/http/HTTPConnection.java,
+ 	gnu/java/net/protocol/http/HTTPURLConnection.java,
+ 	gnu/java/net/protocol/http/Headers.java,
+ 	gnu/java/net/protocol/http/Request.java,
+ 	gnu/java/net/protocol/jar/Connection.java,
+ 	gnu/java/net/protocol/jar/Handler.java,
+ 	gnu/java/nio/ChannelInputStream.java,
+ 	gnu/java/nio/ChannelOutputStream.java,
+ 	gnu/java/nio/InputStreamChannel.java,
+ 	gnu/java/nio/OutputStreamChannel.java,
+ 	gnu/java/nio/SelectorProviderImpl.java,
+ 	gnu/java/rmi/RMIMarshalledObjectInputStream.java,
+ 	gnu/java/rmi/RMIMarshalledObjectOutputStream.java,
+ 	gnu/java/rmi/dgc/DGCImpl.java,
+ 	gnu/java/rmi/registry/RegistryImpl.java,
+ 	gnu/java/rmi/server/ProtocolConstants.java,
+ 	gnu/java/rmi/server/RMIDefaultSocketFactory.java,
+ 	gnu/java/rmi/server/RMIIncomingThread.java,
+ 	gnu/java/rmi/server/RMIObjectInputStream.java,
+ 	gnu/java/rmi/server/RMIObjectOutputStream.java,
+ 	gnu/java/rmi/server/RMIVoidValue.java,
+ 	gnu/java/rmi/server/UnicastConnectionManager.java,
+ 	gnu/java/rmi/server/UnicastRef.java,
+ 	gnu/java/rmi/server/UnicastRemoteCall.java,
+ 	gnu/java/rmi/server/UnicastRemoteStub.java,
+ 	gnu/java/rmi/server/UnicastServerRef.java:
+ 	Reorganized import statments and fixed some @author tags and html
+ 	usage in javadocs.
+ 
+ 2005-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/color/package.html,
+ 	gnu/java/awt/image/package.html,
+ 	gnu/java/awt/package.html,
+ 	gnu/java/awt/peer/package.html,
+ 	gnu/java/beans/decoder/package.html,
+ 	gnu/java/beans/editors/package.html,
+ 	gnu/java/beans/package.html,
+ 	gnu/java/io/decode/package.html,
+ 	gnu/java/io/encode/package.html,
+ 	gnu/java/io/package.html,
+ 	gnu/java/lang/package.html,
+ 	gnu/java/lang/reflect/package.html,
+ 	gnu/java/locale/package.html,
+ 	gnu/java/math/package.html,
+ 	gnu/java/net/package.html,
+ 	gnu/java/net/protocol/file/package.html,
+ 	gnu/java/net/protocol/http/event/package.html,
+ 	gnu/java/net/protocol/jar/package.html,
+ 	gnu/java/nio/channels/package.html,
+ 	gnu/java/nio/charset/package.html,
+ 	gnu/java/nio/package.html,
+ 	gnu/java/rmi/dgc/package.html,
+ 	gnu/java/rmi/package.html,
+ 	gnu/java/rmi/registry/package.html,
+ 	gnu/java/rmi/server/package.html,
+ 	gnu/java/security/action/package.html,
+ 	gnu/java/security/ber/package.html,
+ 	gnu/java/security/der/package.html,
+ 	gnu/java/security/package.html,
+ 	gnu/java/security/pkcs/package.html,
+ 	gnu/java/security/provider/package.html,
+ 	gnu/java/security/util/package.html,
+ 	gnu/java/security/x509/ext/package.html,
+ 	gnu/java/security/x509/package.html,
+ 	gnu/java/text/package.html,
+ 	gnu/java/util/package.html,
+ 	gnu/java/util/prefs/package.html,
+ 	java/lang/annotation/package.html:
+ 	New files.
+ 
+ 2005-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/color/CieXyzConverter.java,
+ 	gnu/java/awt/color/ClutProfileConverter.java,
+ 	gnu/java/awt/color/ColorLookUpTable.java,
+ 	gnu/java/awt/color/ColorSpaceConverter.java,
+ 	gnu/java/awt/color/GrayProfileConverter.java,
+ 	gnu/java/awt/color/GrayScaleConverter.java,
+ 	gnu/java/awt/color/LinearRGBConverter.java,
+ 	gnu/java/awt/color/ProfileHeader.java,
+ 	gnu/java/awt/color/PyccConverter.java,
+ 	gnu/java/awt/color/RgbProfileConverter.java,
+ 	gnu/java/awt/color/SrgbConverter.java,
+ 	gnu/java/awt/color/TagEntry.java,
+ 	gnu/java/awt/color/ToneReproductionCurve.java:
+ 	Use standard copyright header.
+ 
+ 2005-03-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/cp-tools/cp-tools.wml: Fix createlink to
+ 	texidoclet.html.
+ 
+ 2005-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* doc/api/Makefile.am: Remove gjdoc_rawcomment.cache if neccesary.
+ 
+ 2005-02-28  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java
+ 	(mkListPanel,mkButtonBar): Changed JList example so that
+ 	the newly added support for JList.HORIZONTAL_WRAP and
+ 	JList.VERTICAL_WRAP is shown.
+ 
+ 2005-02-27  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/JList.java
+ 	(getPreferredScrollableViewportSize):
+ 	The previous implementation was merely guessing the size,
+ 	now it respects layoutOrientation, visibleRowCount
+ 	and preferredSize.
+ 	(getScrollableTracksViewportHeight):
+ 	Reimplemented so that layoutOrientation, visibleRowCount
+ 	and preferred size are respected.
+ 	(getScrollableTracksViewportWidth):
+ 	Reimplemented so that layoutOrientation, visibleRowCount
+ 	and preferred size are respected.
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(getPreferredSize):
+ 	Improved calculation of preferredSize when JList is
+ 	set to HORIZONTAL_WRAP or VERTICAL_WRAP.
+ 	(getCellBounds):
+ 	The previous implementation assumed a layoutOrientation of
+ 	JList.VERTICAL, now also ok with JList.HORIZONTAL_WRAP and
+ 	JList.VERTICAL_WRAP.
+ 
+ 2005-02-27  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/CellRendererPane.java:
+ 	implemented all methods of this class.
+ 	reformatted all wrong formatted code.
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(paintCell): use CellRendererPane for painting the cells.
+ 
+ 2005-02-27  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* javax/swing/JComboBox.java (constructors): selecting the 
+ 	first item if the box was constructed from the provided
+ 	non - empty array or vector.
+ 
+ 2005-02-27  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI:
+ 	fixed modifiers of several fields, methods and inner
+ 	classes to match the 'spec'.
+ 	(getMaximumSize): removed. It's not in the spec and the
+ 	implementations was superfluous.
+ 
+ 2005-02-27  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java: Return correct content
+ 	length for directory listing.
+ 	* java/net/URLClassLoader.java: Correction for URLClassLoader, bug
+ 	#11285: return valid URLs for directories.
+ 
+ 2005-02-27  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/aelfred2/JAXPFactory.java,
+ 	gnu/xml/aelfred2/SAXDriver.java,
+ 	gnu/xml/aelfred2/XmlParser.java,
+ 	gnu/xml/aelfred2/XmlReader.java: Applied GNU Classpath source code
+ 	formatting conventions. Replaced arrays of Object with struct-like
+ 	classes for easier maintainability. Made SAXDriver.stringInterning
+ 	package private to allow access from XmlParser inside the loop without
+ 	a method call overhead.
+ 
+ 2005-02-27  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI:
+ 	make BasicListUI capable of wrapping lists
+ 	(layoutOrientation property of javax.swing.JList)
+ 
+ 2005-02-26  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* javax/swing/Timer.java: documenting and some
+ 	formatting.	
+ 
+ 2005-02-26  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* javax/swing/JTextArea.java (replaceRange): 
+ 	Fixing doc.remove(start, length) misinterpretation.
+ 	
+ 2005-02-26  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI
+ 	(updateLayoutState,paint): make BasicListUI aware of the
+ 	width of the rendered JList
+ 
+ 2005-02-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Add 0.14 release date.
+ 	* configure.ac: Set version to 0.14.
+ 
+ 2005-02-25  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/net/InetAddress.java
+ 	(toString): Don't print empty hostnames.
+ 	Fixes bug #11956
+ 
+ 2005-02-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/Makefile (SUBDIRS): Add cp-tools.
+ 	* doc/www.gnu.org/cp-tools/Makefile: New file.
+ 	* doc/www.gnu.org/cp-tools/cp-tools.wml: Likewise.
+ 	* doc/www.gnu.org/cp-tools/texidoclet.html: Likewise.
+ 
+ 2005-02-24  Audrius Meskauskas  <audriusa@bluewin.ch>
+ 
+ 	* javax/swing/Timer.java (constructor): assigning initialDelay
+ 
+ 2005-02-24  Audrius Meskauskas  <audriusa@bluewin.ch>
+    
+ 	* javax/swing/Timer.java (Waker.run): firing the first action
+ 	event.
+ 
+ 2005-02-24  Chris Burdess  <dog@gnu.org>
+ 
+ 	* BASE64.java: Truncate encoded byte array.
+ 
+ 2005-02-24  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/font/TextAttribute.java: changed names to lower case;
+ 	(readResolve): implemented.
+ 	Added doc comments all over.
+ 
+ 2005-02-22  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/SimpleDateFormat.java:
+ 	Substitute StringBuilder for the original
+ 	StringBuffer.
+ 
+ 2005-02-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/PolicyFile.java,
+ 	gnu/java/security/pkcs/PKCS7SignedData.java,
+ 	gnu/java/security/pkcs/SignerInfo.java:
+ 	Fixed copyright header.
+ 
+ 2005-02-22  Roman Kennke <roman@ontographics.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Fixed Button left and right margin
+ 
+ 2005-02-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gthread-jni.c (throw):
+ 	Call g_snprintf instead of snprintf.
+ 
+ 2005-02-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(button_to_awt_mods): Return BUTTON masks, not BUTTON_DOWN masks.
+ 
+ 2005-02-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(getWidth): New method.
+ 	(getHeight): Likewise.
+ 	(create): Remove width, height and insets parameters.  Move size
+ 	setup ...
+ 	(realize_cb): ... here.  New function.
+ 	(connectSignals): Connect realize_cb.
+ 	(request_frame_extents): Remove FIXME.  Move
+ 	postInsetsChangedEvent lookup ...
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (gtkInit):
+ 	... here.  Look up GtkWindowPeer getWidth and getHeight methods.
+ 	* jni/gtk-peer/gtkpeer.h (postInsetsChangedEventID): Declare
+ 	jmethodID.
+ 	(windowGetWidthID): Likewise.
+ 	(windowGetHeightID): Likewise.
+ 
+ 2005-02-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h:
+ 	Regenerated.
+ 
+ 2005-02-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Robot.java (waitForIdle): Call invokeAndWait on an
+ 	empty Runnable.
+ 
+ 2005-02-21  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/io/ObjectInputStream.java (readClassDescriptor): Cache result
+ 	of currentLoader() in callersClassLoader field. Check for primitive
+ 	type Class names if resolveClass throws a ClassNotFoundException.
+ 	(resolveClass): Call currentLoader() only if callersClassLoader is
+ 	not set. Cache result of currentLoader(). Don't check for primitive
+ 	type Class names here.
+ 	(callersClassLoader): New field.
+ 	* java/io/ObjectOutputStream.java (writeObject, callWriteMethod):
+ 	Whitespace fixes.
+ 
+ 2005-02-22  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* java/io/InputStreamReader.java: Fixed compilation
+ 	problem.
+ 
+ 2005-02-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Checkbox.java
+ 	(next_checkbox_number): New static variable.
+ 	(generateName): New method.
+ 	(getUniqueLong): Likewise.
+ 	* java/awt/Window.java
+ 	(next_window_number): New static variable.
+ 	(generateName): New method.
+ 	(getUniqueLong): Likewise.
+ 
+ 2005-02-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/JarFile.java (verifyHashes): Check whether ZipEntry
+ 	exists.
+ 	
+ 2005-02-21  Robert Schuster  <thebohemian@gmx.net>
+ 	
+ 	* gnu/java/nio/ChannelReader: Fixed comments.
+ 
+ 2005-02-21  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* java/nio/channels/Channels: Added FIXMEs about
+ 	stub method implementation.
+ 	(newReader): Implemented.
+ 	* java/io/InputStreamReader:
+ 	(InputStreamReader(InputStream, Charset)): Implemented.
+ 	(InputStreamReader(InputStream, CharsetDecoder)): Implemented.
+ 	* gnu/java/nio/ChannelReader: New class.
+ 
+ 2005-02-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_nio_channels_FileChannelImpl.h:
+ 	Regenerated.
+ 
+ 2005-02-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Class.java,
+ 	java/lang/SecurityManager.java,
+ 	java/net/URL.java:
+ 	Formatting cleanups.
+ 
+ 2005-02-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Button.java,
+ 	java/awt/Container.java,
+ 	java/awt/Font.java,
+ 	java/awt/Frame.java,
+ 	java/text/CollationElementIterator.java,
+ 	java/text/RuleBasedCollator.java,
+ 	java/util/PropertyPermission.java:
+ 	Fixed formatting issues all over.
+ 
+ 2005-02-21  Anthony Green  <green@redhat.com>
+ 
+ 	* gnu/java/rmi/registry/RegistryImpl.java:
+ 	Change year for '--version' to 2005.
+ 
+ 2005-02-20  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	Merge of interfaces and exceptions to HEAD from
+ 	the generics branch.
+ 
+ 	* java/lang/StringBuilder.java: Serial version updated.
+ 	* java/lang/annotation/AnnotationTypeMismatchException.java: Likewise.
+ 
+ 	Changes from generics branch:
+ 	
+ 	2005-02-20  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/io/Closeable.java: Documented.
+ 	* java/io/Flushable.java: Documented.
+ 	* java/lang/Appendable.java: Corrected line overrun.
+ 	* java/lang/Readable.java: Corrected indentation.
+ 	* java/lang/TypeNotPresentException.java: Documented.
+ 	* java/lang/annotation/AnnotationFormatError.java: Likewise.
+ 	* java/lang/annotation/AnnotationTypeMismatchException.java: Likewise.
+ 	* java/lang/reflect/GenericArrayType.java: Likewise.
+ 	* java/lang/reflect/GenericSignatureFormatError.java: Likewise.
+ 	* java/lang/reflect/ParameterizedType.java: Likewise.
+ 	* java/lang/reflect/Type.java: Likewise.
+ 	* java/lang/reflect/WildcardType.java: Likewise.	
+ 	
+ 	2005-01-07  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/lang/annotation/AnnotationTypeMismatchException.java:
+ 	Added import of java.lang.reflect.Method
+ 
+ 	2004-08-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/reflect/GenericSignatureFormatError.java: New file.
+ 	* java/lang/reflect/WildcardType.java: New file.
+ 	* java/lang/reflect/ParameterizedType.java: New file.
+ 	* java/lang/reflect/GenericArrayType.java: New file.
+ 	* java/lang/reflect/Type.java: New file.
+ 	* java/io/Flushable.java: New file.
+ 	* java/io/Closeable.java: New file.
+ 
+ 	2004-08-07  Tom Tromey  <tromey@redhat.com>
+ 	
+ 	* java/lang/annotation/AnnotationFormatError.java: New file.
+ 	* java/lang/annotation/AnnotationTypeMismatchException.java: New
+ 	file.
+ 
+ 	2004-08-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Readable.java: New file.
+ 
+ 2005-02-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/SimpleTimeZone.java (getOffset): Calculate beforeEnd by
+ 	taking dstSavings into account.
+ 
+ 2005-02-20  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/text/SimpleDateFormat.java,
+ 	(parse): Set DST_OFFSET to the correct value.
+ 
+ 2005-02-20  Rutger Ovidius  <ovidr@users.sourceforge.net>
+ 
+ 	* gnu/java/security/provider/Gnu.java (Gnu): Add SHA-160 alias.
+ 
+ 2005-02-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/text/SimpleDateFormat.java
+ 	(SimpleDateFormat(String, DateFormatSymbols)): Throw
+ 	NullPointerException when formatData is null.
+ 
+ 2005-02-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_af.java,
+ 	gnu/java/locale/LocaleInformation_am.java,
+ 	gnu/java/locale/LocaleInformation_ca.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_cy.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_el.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_eo.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_et.java,
+ 	gnu/java/locale/LocaleInformation_eu.java,
+ 	gnu/java/locale/LocaleInformation_fa.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_ga.java,
+ 	gnu/java/locale/LocaleInformation_hr.java,
+ 	gnu/java/locale/LocaleInformation_hu.java,
+ 	gnu/java/locale/LocaleInformation_hy.java,
+ 	gnu/java/locale/LocaleInformation_id.java,
+ 	gnu/java/locale/LocaleInformation_is.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ka.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_lo.java,
+ 	gnu/java/locale/LocaleInformation_lt.java,
+ 	gnu/java/locale/LocaleInformation_lv.java,
+ 	gnu/java/locale/LocaleInformation_mk.java,
+ 	gnu/java/locale/LocaleInformation_mn.java,
+ 	gnu/java/locale/LocaleInformation_ms.java,
+ 	gnu/java/locale/LocaleInformation_mt.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nn.java,
+ 	gnu/java/locale/LocaleInformation_pl.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_ro.java,
+ 	gnu/java/locale/LocaleInformation_ru.java,
+ 	gnu/java/locale/LocaleInformation_sk.java,
+ 	gnu/java/locale/LocaleInformation_sl.java,
+ 	gnu/java/locale/LocaleInformation_sq.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_th.java,
+ 	gnu/java/locale/LocaleInformation_tr.java,
+ 	gnu/java/locale/LocaleInformation_vi.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java: Updated.
+ 	* gnu/java/locale/LocaleInformation_az_Cyrl.java: New file.
+ 
+ 2005-02-19  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* java/lang/Throwable.java: simplify initializing cause in constructor
+ 
+ 2005-02-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JToggleButton.java: Removed empty line.
+ 
+ 2005-02-18  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/LinkedHashMap (addEntry): Call remove() with key argument, 
+ 	not the HashEntry. Reported by Jean-Marie White.
+ 
+ 2005-02-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/events/escape_fosdem05.wml: New event.
+ 	* doc/www.gnu.org/newsitems.txt: Add Escape the Java Trap.
+ 	* doc/www.gnu.org/events/events.wml: Likewise.
+ 
+ 2005-02-18  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/util/TimeZone.java,
+ 	(getDefaultDisplayName): Fix previous fix.
+ 
+ 2005-02-18  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/font/TransformAttribute.java,
+ 	(TransformAttribute(AffineTransform)): throw 
+ 	IllegalArgumentException for null transform.
+ 	(getTransform): return a copy of transform.
+ 	Added doc comments to all.
+ 
+ 2005-02-18  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/util/TimeZone.java,
+ 	(getDefaultDisplayName): Don't print zero offsets.
+ 
+ 2005-02-18  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	* java/nio/charset/Charset.java (forName): Throws
+ 	IllegalArgumentException when argument is null
+ 	and added documentation.
+ 
+ 2005-02-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/SimpleTimeZone.java (checkRule): Throw
+ 	IllegalArgumentException when month out of range.
+ 
+ 2005-02-17  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/GregorianCalendar.java,
+ 	(add): Don't set fields directly anymore. Use set()
+ 
+ 2005-02-17  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (write(ByteBuffer)):
+ 	Move the position of the source buffer forward.
+ 
+ 2005-02-16  Andrew Haley  <aph@redhat.com>
+ 
+ 	* javax/security/auth/Subject.java (doAsPrivileged): If acc is
+ 	null, create a new AccessControlContext.
+ 	* java/security/SecureClassLoader.java (protectionDomainCache):
+ 	new field.
+ 	(defineClass): Create a new protection domain and add it to our
+ 	cache.
+ 
+ 	* java/rmi/server/UnicastRemoteObject.java (exportObject): Call
+ 	addStub() to keep track of the stub we've exported.
+ 	(unexportObject): Call deleteStub().
+ 	* java/rmi/server/RemoteObject.java (stubs): New field.
+ 	(addStub): New method.
+ 	(deleteStub): New method.
+ 	(toStub): Rewrite.
+ 	
+ 	* java/security/Permissions.java (PermissionsHash.implies):
+ 	Iterate over the collection and invoke implies() on each
+ 	element.
+ 
+ 2005-02-16  Julian Scheid  <julian@sektor37.de>
+ 
+ 	* gnu/java/nio/charset/UTF_8.java (decodeLoop): Set inPos to
+ 	in.position().
+ 	(encodeLoop): Likewise.
+ 
+ 2005-02-16  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Locale.java
+ 	Added two new String[] arrays for caching.
+ 	(getLocale(String)): Documentation.
+ 	(getLocale(String, String)): Documentation.
+ 	(getLocale(String, String, String)): Documentation.
+ 	(getISOCountries()): Now calls getISOStrings() and caches result.
+ 	(getISOLanguages()): Now calls getISOStrings() and caches result.
+ 	(getISOStrings(String)): Pulls all two-letter keys from the specified
+ 	hashtable in our locale information.
+ 	
+ 2005-02-16  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/logging/LogManager.java: Reformatted.
+ 	(readConfiguration): If a logger for a key is not found, create one.
+ 
+ 2005-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/checkstyle-config.xml: Activate JavadocStyle and
+ 	IllegalInstantiation tests.
+ 	* scripts/checkstyle-suppressions.xml: Suppress some more errors.
+ 
+ 2005-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java,
+ 	gnu/java/awt/peer/gtk/GdkFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkGlyphVector.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java,
+ 	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
+ 	gnu/java/awt/peer/gtk/GdkRobotPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java,
+ 	gnu/java/awt/peer/gtk/GdkTextLayout.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkChoicePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkClipboard.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuBarPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java:
+ 	Made checkstyle clean.
+ 	* gnu/java/awt/peer/gtk/package.html:
+ 	New file.
+ 
+ 2005-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/geom/Ellipse2D.java,
+ 	java/beans/PropertyDescriptor.java,
+ 	java/net/NetworkInterface.java,
+ 	java/nio/ByteBufferImpl.java,
+ 	java/nio/DoubleBufferImpl.java,
+ 	java/nio/FloatBufferImpl.java,
+ 	java/nio/IntBufferImpl.java,
+ 	java/nio/LongBufferImpl.java,
+ 	java/nio/ShortBufferImpl.java,
+ 	java/nio/channels/Channel.java,
+ 	java/util/Calendar.java,
+ 	java/util/Comparator.java,
+ 	java/util/Date.java,
+ 	java/util/SimpleTimeZone.java,
+ 	java/util/logging/FileHandler.java,
+ 	java/util/prefs/InvalidPreferencesFormatException.java,
+ 	java/util/prefs/Preferences.java,
+ 	javax/security/auth/callback/ConfirmationCallback.java,
+ 	javax/security/sasl/Sasl.java,
+ 	javax/security/sasl/SaslServerFactory.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JList.java,
+ 	javax/swing/JProgressBar.java,
+ 	javax/swing/JTree.java,
+ 	javax/swing/text/JTextComponent.java:
+ 	Fixed javadocs to contain valid (X)HTML.
+ 
+ 2005-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/xml/XMLConstants.java,
+ 	javax/xml/datatype/DatatypeConfigurationException.java,
+ 	javax/xml/datatype/DatatypeConstants.java,
+ 	javax/xml/datatype/DatatypeFactory.java,
+ 	javax/xml/datatype/Duration.java,
+ 	javax/xml/datatype/XMLGregorianCalendar.java,
+ 	javax/xml/namespace/NamespaceContext.java,
+ 	javax/xml/namespace/QName.java,
+ 	javax/xml/parsers/DocumentBuilder.java,
+ 	javax/xml/parsers/DocumentBuilderFactory.java,
+ 	javax/xml/parsers/FactoryConfigurationError.java,
+ 	javax/xml/parsers/ParserConfigurationException.java,
+ 	javax/xml/parsers/SAXParser.java,
+ 	javax/xml/parsers/SAXParserFactory.java,
+ 	javax/xml/transform/ErrorListener.java,
+ 	javax/xml/transform/OutputKeys.java,
+ 	javax/xml/transform/Result.java,
+ 	javax/xml/transform/Source.java,
+ 	javax/xml/transform/SourceLocator.java,
+ 	javax/xml/transform/Templates.java,
+ 	javax/xml/transform/Transformer.java,
+ 	javax/xml/transform/TransformerConfigurationException.java,
+ 	javax/xml/transform/TransformerException.java,
+ 	javax/xml/transform/TransformerFactory.java,
+ 	javax/xml/transform/TransformerFactoryConfigurationError.java,
+ 	javax/xml/transform/URIResolver.java,
+ 	javax/xml/transform/dom/DOMLocator.java,
+ 	javax/xml/transform/dom/DOMResult.java,
+ 	javax/xml/transform/dom/DOMSource.java,
+ 	javax/xml/transform/sax/SAXResult.java,
+ 	javax/xml/transform/sax/SAXSource.java,
+ 	javax/xml/transform/sax/SAXTransformerFactory.java,
+ 	javax/xml/transform/sax/TemplatesHandler.java,
+ 	javax/xml/transform/sax/TransformerHandler.java,
+ 	javax/xml/transform/stream/StreamResult.java,
+ 	javax/xml/transform/stream/StreamSource.java,
+ 	javax/xml/validation/Schema.java,
+ 	javax/xml/validation/SchemaFactory.java,
+ 	javax/xml/validation/TypeInfoProvider.java,
+ 	javax/xml/validation/Validator.java,
+ 	javax/xml/validation/ValidatorHandler.java,
+ 	javax/xml/xpath/XPathConstants.java,
+ 	javax/xml/xpath/XPathException.java,
+ 	javax/xml/xpath/XPathExpression.java,
+ 	javax/xml/xpath/XPathExpressionException.java,
+ 	javax/xml/xpath/XPathFactory.java,
+ 	javax/xml/xpath/XPathFactoryConfigurationException.java,
+ 	javax/xml/xpath/XPathFunction.java,
+ 	javax/xml/xpath/XPathFunctionException.java,
+ 	javax/xml/xpath/XPathFunctionResolver.java:
+ 	Fixed usage of @author tag.
+ 
+ 2005-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/XMLConstants.java,
+ 	javax/datatype/DatatypeConfigurationException.java,
+ 	javax/datatype/DatatypeConstants.java,
+ 	javax/datatype/DatatypeFactory.java,
+ 	javax/datatype/Duration.java,
+ 	javax/datatype/XMLGregorianCalendar.java,
+ 	javax/namespace/NamespaceContext.java,
+ 	javax/namespace/QName.java,
+ 	javax/parsers/DocumentBuilder.java,
+ 	javax/parsers/DocumentBuilderFactory.java,
+ 	javax/parsers/FactoryConfigurationError.java,
+ 	javax/parsers/ParserConfigurationException.java,
+ 	javax/parsers/SAXParser.java,
+ 	javax/parsers/SAXParserFactory.java,
+ 	javax/transform/ErrorListener.java,
+ 	javax/transform/OutputKeys.java,
+ 	javax/transform/Result.java,
+ 	javax/transform/Source.java,
+ 	javax/transform/SourceLocator.java,
+ 	javax/transform/Templates.java,
+ 	javax/transform/Transformer.java,
+ 	javax/transform/TransformerConfigurationException.java,
+ 	javax/transform/TransformerException.java,
+ 	javax/transform/TransformerFactory.java,
+ 	javax/transform/TransformerFactoryConfigurationError.java,
+ 	javax/transform/URIResolver.java,
+ 	javax/transform/dom/DOMLocator.java,
+ 	javax/transform/dom/DOMResult.java,
+ 	javax/transform/dom/DOMSource.java,
+ 	javax/transform/sax/SAXResult.java,
+ 	javax/transform/sax/SAXSource.java,
+ 	javax/transform/sax/SAXTransformerFactory.java,
+ 	javax/transform/sax/TemplatesHandler.java,
+ 	javax/transform/sax/TransformerHandler.java,
+ 	javax/transform/stream/StreamResult.java,
+ 	javax/transform/stream/StreamSource.java,
+ 	javax/validation/Schema.java,
+ 	javax/validation/SchemaFactory.java,
+ 	javax/validation/TypeInfoProvider.java,
+ 	javax/validation/Validator.java,
+ 	javax/validation/ValidatorHandler.java,
+ 	javax/xpath/XPathConstants.java,
+ 	javax/xpath/XPathException.java,
+ 	javax/xpath/XPathExpression.java,
+ 	javax/xpath/XPathExpressionException.java,
+ 	javax/xpath/XPathFactory.java,
+ 	javax/xpath/XPathFactoryConfigurationException.java,
+ 	javax/xpath/XPathFunction.java,
+ 	javax/xpath/XPathFunctionException.java,
+ 	javax/xpath/XPathFunctionResolver.java:
+ 	Fixed usage of @author tag.
+ 
+ 2005-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/accessibility/Accessible.java,
+ 	javax/accessibility/AccessibleAction.java,
+ 	javax/accessibility/AccessibleBundle.java,
+ 	javax/accessibility/AccessibleComponent.java,
+ 	javax/accessibility/AccessibleContext.java,
+ 	javax/accessibility/AccessibleEditableText.java,
+ 	javax/accessibility/AccessibleExtendedComponent.java,
+ 	javax/accessibility/AccessibleExtendedTable.java,
+ 	javax/accessibility/AccessibleHyperlink.java,
+ 	javax/accessibility/AccessibleHypertext.java,
+ 	javax/accessibility/AccessibleIcon.java,
+ 	javax/accessibility/AccessibleKeyBinding.java,
+ 	javax/accessibility/AccessibleRelation.java,
+ 	javax/accessibility/AccessibleRelationSet.java,
+ 	javax/accessibility/AccessibleResourceBundle.java,
+ 	javax/accessibility/AccessibleRole.java,
+ 	javax/accessibility/AccessibleSelection.java,
+ 	javax/accessibility/AccessibleState.java,
+ 	javax/accessibility/AccessibleStateSet.java,
+ 	javax/accessibility/AccessibleTable.java,
+ 	javax/accessibility/AccessibleTableModelChange.java,
+ 	javax/accessibility/AccessibleText.java,
+ 	javax/accessibility/AccessibleValue.java,
+ 	javax/imageio/IIOException.java,
+ 	javax/imageio/spi/IIOServiceProvider.java,
+ 	javax/imageio/spi/ImageInputStreamSpi.java,
+ 	javax/imageio/spi/ImageOutputStreamSpi.java,
+ 	javax/imageio/spi/ImageReaderWriterSpi.java,
+ 	javax/imageio/spi/ImageTranscoderSpi.java,
+ 	javax/imageio/spi/RegisterableService.java,
+ 	javax/imageio/spi/ServiceRegistry.java,
+ 	javax/imageio/stream/IIOByteBuffer.java,
+ 	javax/imageio/stream/ImageInputStream.java,
+ 	javax/imageio/stream/ImageOutputStream.java,
+ 	javax/naming/Binding.java,
+ 	javax/naming/CannotProceedException.java,
+ 	javax/naming/CompositeName.java,
+ 	javax/naming/CompoundName.java,
+ 	javax/naming/LinkException.java,
+ 	javax/naming/LinkRef.java,
+ 	javax/naming/NameClassPair.java,
+ 	javax/naming/Reference.java,
+ 	javax/naming/ReferralException.java,
+ 	javax/naming/directory/Attribute.java,
+ 	javax/naming/directory/AttributeModificationException.java,
+ 	javax/naming/directory/Attributes.java,
+ 	javax/naming/directory/DirContext.java,
+ 	javax/naming/directory/ModificationItem.java,
+ 	javax/naming/directory/SearchControls.java,
+ 	javax/naming/directory/SearchResult.java,
+ 	javax/naming/event/EventContext.java,
+ 	javax/naming/event/EventDirContext.java,
+ 	javax/naming/event/NamespaceChangeListener.java,
+ 	javax/naming/event/NamingExceptionEvent.java,
+ 	javax/naming/event/NamingListener.java,
+ 	javax/naming/event/ObjectChangeListener.java,
+ 	javax/naming/ldap/Control.java,
+ 	javax/naming/ldap/ExtendedResponse.java,
+ 	javax/naming/ldap/HasControls.java,
+ 	javax/naming/ldap/LdapContext.java,
+ 	javax/naming/ldap/UnsolicitedNotification.java,
+ 	javax/naming/ldap/UnsolicitedNotificationEvent.java,
+ 	javax/naming/ldap/UnsolicitedNotificationListener.java,
+ 	javax/naming/spi/DirectoryManager.java,
+ 	javax/naming/spi/ResolveResult.java,
+ 	javax/naming/spi/Resolver.java,
+ 	javax/swing/DefaultBoundedRangeModel.java,
+ 	javax/swing/JRadioButton.java,
+ 	javax/swing/JTextArea.java,
+ 	javax/swing/JToggleButton.java,
+ 	javax/swing/SpinnerListModel.java,
+ 	javax/swing/event/EventListenerList.java,
+ 	javax/swing/text/Utilities.java,
+ 	javax/swing/undo/UndoManager.java,
+ 	javax/swing/undo/UndoableEditSupport.java,
+ 	javax/transaction/HeuristicCommitException.java,
+ 	javax/transaction/HeuristicMixedException.java,
+ 	javax/transaction/HeuristicRollbackException.java,
+ 	javax/transaction/InvalidTransactionException.java,
+ 	javax/transaction/NotSupportedException.java,
+ 	javax/transaction/RollbackException.java,
+ 	javax/transaction/Status.java,
+ 	javax/transaction/Synchronization.java,
+ 	javax/transaction/SystemException.java,
+ 	javax/transaction/Transaction.java,
+ 	javax/transaction/TransactionManager.java,
+ 	javax/transaction/TransactionRequiredException.java,
+ 	javax/transaction/TransactionRolledbackException.java,
+ 	javax/transaction/UserTransaction.java,
+ 	javax/transaction/xa/XAException.java,
+ 	javax/transaction/xa/XAResource.java,
+ 	javax/transaction/xa/Xid.java:
+ 	Fixed usage of @author tag all over.
+ 
+ 2005-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/applet/Applet.java,
+ 	java/beans/AppletInitializer.java,
+ 	java/beans/ExceptionListener.java,
+ 	java/beans/PropertyChangeEvent.java,
+ 	java/beans/PropertyChangeListenerProxy.java,
+ 	java/beans/PropertyChangeSupport.java,
+ 	java/beans/PropertyDescriptor.java,
+ 	java/beans/VetoableChangeListenerProxy.java,
+ 	java/beans/VetoableChangeSupport.java,
+ 	java/io/BufferedInputStream.java,
+ 	java/io/BufferedReader.java,
+ 	java/io/ByteArrayInputStream.java,
+ 	java/io/ByteArrayOutputStream.java,
+ 	java/io/CharArrayReader.java,
+ 	java/io/CharArrayWriter.java,
+ 	java/io/CharConversionException.java,
+ 	java/io/DataInput.java,
+ 	java/io/DataInputStream.java,
+ 	java/io/DataOutput.java,
+ 	java/io/DataOutputStream.java,
+ 	java/io/EOFException.java,
+ 	java/io/FileInputStream.java,
+ 	java/io/FileNotFoundException.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/FilenameFilter.java,
+ 	java/io/FilterInputStream.java,
+ 	java/io/FilterOutputStream.java,
+ 	java/io/FilterReader.java,
+ 	java/io/FilterWriter.java,
+ 	java/io/IOException.java,
+ 	java/io/InputStream.java,
+ 	java/io/InputStreamReader.java,
+ 	java/io/InterruptedIOException.java,
+ 	java/io/LineNumberInputStream.java,
+ 	java/io/LineNumberReader.java,
+ 	java/io/ObjectStreamException.java,
+ 	java/io/OptionalDataException.java,
+ 	java/io/OutputStream.java,
+ 	java/io/OutputStreamWriter.java,
+ 	java/io/PrintStream.java,
+ 	java/io/PrintWriter.java,
+ 	java/io/PushbackInputStream.java,
+ 	java/io/PushbackReader.java,
+ 	java/io/RandomAccessFile.java,
+ 	java/io/Reader.java,
+ 	java/io/SequenceInputStream.java,
+ 	java/io/Serializable.java,
+ 	java/io/StreamCorruptedException.java,
+ 	java/io/StreamTokenizer.java,
+ 	java/io/StringBufferInputStream.java,
+ 	java/io/StringWriter.java,
+ 	java/io/SyncFailedException.java,
+ 	java/io/UTFDataFormatException.java,
+ 	java/io/UnsupportedEncodingException.java,
+ 	java/io/WriteAbortedException.java,
+ 	java/io/Writer.java,
+ 	java/lang/AbstractMethodError.java,
+ 	java/lang/ArithmeticException.java,
+ 	java/lang/ArrayIndexOutOfBoundsException.java,
+ 	java/lang/ArrayStoreException.java,
+ 	java/lang/AssertionError.java,
+ 	java/lang/Boolean.java,
+ 	java/lang/Byte.java,
+ 	java/lang/ClassCastException.java,
+ 	java/lang/ClassCircularityError.java,
+ 	java/lang/ClassLoader.java,
+ 	java/lang/ClassNotFoundException.java,
+ 	java/lang/CloneNotSupportedException.java,
+ 	java/lang/Cloneable.java,
+ 	java/lang/Comparable.java,
+ 	java/lang/Compiler.java,
+ 	java/lang/Double.java,
+ 	java/lang/Error.java,
+ 	java/lang/Exception.java,
+ 	java/lang/ExceptionInInitializerError.java,
+ 	java/lang/Float.java,
+ 	java/lang/IllegalAccessError.java,
+ 	java/lang/IllegalAccessException.java,
+ 	java/lang/IllegalArgumentException.java,
+ 	java/lang/IllegalMonitorStateException.java,
+ 	java/lang/IllegalStateException.java,
+ 	java/lang/IllegalThreadStateException.java,
+ 	java/lang/IncompatibleClassChangeError.java,
+ 	java/lang/IndexOutOfBoundsException.java,
+ 	java/lang/InheritableThreadLocal.java,
+ 	java/lang/InstantiationError.java,
+ 	java/lang/InstantiationException.java,
+ 	java/lang/Integer.java,
+ 	java/lang/InternalError.java,
+ 	java/lang/InterruptedException.java,
+ 	java/lang/LinkageError.java,
+ 	java/lang/Long.java,
+ 	java/lang/NegativeArraySizeException.java,
+ 	java/lang/NoClassDefFoundError.java,
+ 	java/lang/NoSuchFieldError.java,
+ 	java/lang/NoSuchFieldException.java,
+ 	java/lang/NoSuchMethodError.java,
+ 	java/lang/NoSuchMethodException.java,
+ 	java/lang/NullPointerException.java,
+ 	java/lang/Number.java,
+ 	java/lang/NumberFormatException.java,
+ 	java/lang/OutOfMemoryError.java,
+ 	java/lang/Process.java,
+ 	java/lang/Runnable.java,
+ 	java/lang/Runtime.java,
+ 	java/lang/RuntimeException.java,
+ 	java/lang/RuntimePermission.java,
+ 	java/lang/SecurityException.java,
+ 	java/lang/SecurityManager.java,
+ 	java/lang/Short.java,
+ 	java/lang/StackOverflowError.java,
+ 	java/lang/StackTraceElement.java,
+ 	java/lang/StringBuffer.java,
+ 	java/lang/StringIndexOutOfBoundsException.java,
+ 	java/lang/ThreadDeath.java,
+ 	java/lang/ThreadGroup.java,
+ 	java/lang/Throwable.java,
+ 	java/lang/UnsatisfiedLinkError.java,
+ 	java/lang/UnsupportedOperationException.java,
+ 	java/lang/VerifyError.java,
+ 	java/lang/VirtualMachineError.java,
+ 	java/lang/reflect/AccessibleObject.java,
+ 	java/lang/reflect/Array.java,
+ 	java/lang/reflect/InvocationTargetException.java,
+ 	java/lang/reflect/Member.java,
+ 	java/lang/reflect/Modifier.java,
+ 	java/lang/reflect/Proxy.java,
+ 	java/lang/reflect/ReflectPermission.java,
+ 	java/lang/reflect/UndeclaredThrowableException.java,
+ 	java/math/BigInteger.java,
+ 	java/nio/ByteBufferHelper.java,
+ 	java/nio/channels/IllegalBlockingModeException.java,
+ 	java/nio/charset/spi/CharsetProvider.java,
+ 	java/security/AccessControlException.java,
+ 	java/security/AllPermission.java,
+ 	java/security/BasicPermission.java,
+ 	java/security/DigestException.java,
+ 	java/security/DigestInputStream.java,
+ 	java/security/DigestOutputStream.java,
+ 	java/security/GeneralSecurityException.java,
+ 	java/security/Guard.java,
+ 	java/security/GuardedObject.java,
+ 	java/security/InvalidAlgorithmParameterException.java,
+ 	java/security/InvalidKeyException.java,
+ 	java/security/InvalidParameterException.java,
+ 	java/security/Key.java,
+ 	java/security/KeyException.java,
+ 	java/security/KeyManagementException.java,
+ 	java/security/KeyStoreException.java,
+ 	java/security/MessageDigestSpi.java,
+ 	java/security/NoSuchAlgorithmException.java,
+ 	java/security/NoSuchProviderException.java,
+ 	java/security/Permission.java,
+ 	java/security/PermissionCollection.java,
+ 	java/security/Permissions.java,
+ 	java/security/Principal.java,
+ 	java/security/PrivateKey.java,
+ 	java/security/PrivilegedActionException.java,
+ 	java/security/ProviderException.java,
+ 	java/security/PublicKey.java,
+ 	java/security/SecureRandom.java,
+ 	java/security/SecureRandomSpi.java,
+ 	java/security/SignatureException.java,
+ 	java/security/SignatureSpi.java,
+ 	java/security/SignedObject.java,
+ 	java/security/Signer.java,
+ 	java/security/UnrecoverableKeyException.java,
+ 	java/security/UnresolvedPermission.java,
+ 	java/security/acl/AclNotFoundException.java,
+ 	java/security/acl/LastOwnerException.java,
+ 	java/security/acl/NotOwnerException.java,
+ 	java/security/cert/CertPath.java,
+ 	java/security/cert/CertPathBuilderException.java,
+ 	java/security/cert/CertPathValidatorException.java,
+ 	java/security/cert/CertStoreException.java,
+ 	java/text/BreakIterator.java,
+ 	java/text/ChoiceFormat.java,
+ 	java/text/CollationElementIterator.java,
+ 	java/text/CollationKey.java,
+ 	java/text/Collator.java,
+ 	java/text/DateFormat.java,
+ 	java/text/DateFormatSymbols.java,
+ 	java/text/FieldPosition.java,
+ 	java/text/Format.java,
+ 	java/text/MessageFormat.java,
+ 	java/text/ParseException.java,
+ 	java/text/ParsePosition.java,
+ 	java/text/StringCharacterIterator.java,
+ 	java/util/AbstractCollection.java,
+ 	java/util/AbstractList.java,
+ 	java/util/AbstractMap.java,
+ 	java/util/AbstractSequentialList.java,
+ 	java/util/AbstractSet.java,
+ 	java/util/ArrayList.java,
+ 	java/util/Arrays.java,
+ 	java/util/BitSet.java,
+ 	java/util/Collection.java,
+ 	java/util/Collections.java,
+ 	java/util/Comparator.java,
+ 	java/util/ConcurrentModificationException.java,
+ 	java/util/EmptyStackException.java,
+ 	java/util/Enumeration.java,
+ 	java/util/EventListener.java,
+ 	java/util/EventListenerProxy.java,
+ 	java/util/EventObject.java,
+ 	java/util/HashMap.java,
+ 	java/util/HashSet.java,
+ 	java/util/Hashtable.java,
+ 	java/util/IdentityHashMap.java,
+ 	java/util/Iterator.java,
+ 	java/util/LinkedHashSet.java,
+ 	java/util/LinkedList.java,
+ 	java/util/List.java,
+ 	java/util/ListIterator.java,
+ 	java/util/ListResourceBundle.java,
+ 	java/util/Map.java,
+ 	java/util/MissingResourceException.java,
+ 	java/util/NoSuchElementException.java,
+ 	java/util/Observable.java,
+ 	java/util/Observer.java,
+ 	java/util/Properties.java,
+ 	java/util/PropertyPermissionCollection.java,
+ 	java/util/RandomAccess.java,
+ 	java/util/Set.java,
+ 	java/util/SortedMap.java,
+ 	java/util/SortedSet.java,
+ 	java/util/Stack.java,
+ 	java/util/StringTokenizer.java,
+ 	java/util/TooManyListenersException.java,
+ 	java/util/TreeMap.java,
+ 	java/util/TreeSet.java,
+ 	java/util/Vector.java,
+ 	java/util/logging/Level.java,
+ 	java/util/prefs/BackingStoreException.java:
+ 	Fixed @author tag all over.
+ 
+ 2005-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/AWTError.java,
+ 	java/awt/AWTEvent.java,
+ 	java/awt/AWTEventMulticaster.java,
+ 	java/awt/AWTException.java,
+ 	java/awt/AWTKeyStroke.java,
+ 	java/awt/AWTPermission.java,
+ 	java/awt/ActiveEvent.java,
+ 	java/awt/Adjustable.java,
+ 	java/awt/AlphaComposite.java,
+ 	java/awt/AttributeValue.java,
+ 	java/awt/BorderLayout.java,
+ 	java/awt/BufferCapabilities.java,
+ 	java/awt/Button.java,
+ 	java/awt/Canvas.java,
+ 	java/awt/CheckboxGroup.java,
+ 	java/awt/CheckboxMenuItem.java,
+ 	java/awt/Color.java,
+ 	java/awt/ColorPaintContext.java,
+ 	java/awt/Component.java,
+ 	java/awt/ComponentOrientation.java,
+ 	java/awt/Composite.java,
+ 	java/awt/CompositeContext.java,
+ 	java/awt/Container.java,
+ 	java/awt/ContainerOrderFocusTraversalPolicy.java,
+ 	java/awt/DefaultFocusTraversalPolicy.java,
+ 	java/awt/Dialog.java,
+ 	java/awt/Dimension.java,
+ 	java/awt/DisplayMode.java,
+ 	java/awt/FileDialog.java,
+ 	java/awt/FontFormatException.java,
+ 	java/awt/Graphics.java,
+ 	java/awt/Graphics2D.java,
+ 	java/awt/GraphicsConfigTemplate.java,
+ 	java/awt/GraphicsConfiguration.java,
+ 	java/awt/GraphicsDevice.java,
+ 	java/awt/GridBagLayout.java,
+ 	java/awt/GridBagLayoutInfo.java,
+ 	java/awt/GridLayout.java,
+ 	java/awt/HeadlessException.java,
+ 	java/awt/IllegalComponentStateException.java,
+ 	java/awt/Image.java,
+ 	java/awt/Insets.java,
+ 	java/awt/ItemSelectable.java,
+ 	java/awt/JobAttributes.java,
+ 	java/awt/KeyEventDispatcher.java,
+ 	java/awt/KeyEventPostProcessor.java,
+ 	java/awt/KeyboardFocusManager.java,
+ 	java/awt/Label.java,
+ 	java/awt/LayoutManager.java,
+ 	java/awt/MenuBar.java,
+ 	java/awt/MenuComponent.java,
+ 	java/awt/MenuContainer.java,
+ 	java/awt/PageAttributes.java,
+ 	java/awt/Paint.java,
+ 	java/awt/PaintContext.java,
+ 	java/awt/Panel.java,
+ 	java/awt/Point.java,
+ 	java/awt/Polygon.java,
+ 	java/awt/PrintGraphics.java,
+ 	java/awt/PrintJob.java,
+ 	java/awt/Rectangle.java,
+ 	java/awt/RenderingHints.java,
+ 	java/awt/Shape.java,
+ 	java/awt/Stroke.java,
+ 	java/awt/SystemColor.java,
+ 	java/awt/Toolkit.java,
+ 	java/awt/Transparency.java,
+ 	java/awt/Window.java,
+ 	java/awt/color/CMMException.java,
+ 	java/awt/color/ColorSpace.java,
+ 	java/awt/color/ICC_ColorSpace.java,
+ 	java/awt/color/ICC_Profile.java,
+ 	java/awt/color/ProfileDataException.java,
+ 	java/awt/datatransfer/FlavorTable.java,
+ 	java/awt/datatransfer/MimeTypeParseException.java,
+ 	java/awt/datatransfer/Transferable.java,
+ 	java/awt/datatransfer/UnsupportedFlavorException.java,
+ 	java/awt/dnd/Autoscroll.java,
+ 	java/awt/dnd/DnDConstants.java,
+ 	java/awt/dnd/DragGestureListener.java,
+ 	java/awt/dnd/DragSourceAdapter.java,
+ 	java/awt/dnd/DragSourceDropEvent.java,
+ 	java/awt/dnd/DragSourceListener.java,
+ 	java/awt/dnd/DragSourceMotionListener.java,
+ 	java/awt/dnd/DropTargetAdapter.java,
+ 	java/awt/dnd/DropTargetContext.java,
+ 	java/awt/dnd/DropTargetListener.java,
+ 	java/awt/dnd/InvalidDnDOperationException.java,
+ 	java/awt/dnd/MouseDragGestureRecognizer.java,
+ 	java/awt/dnd/peer/DropTargetContextPeer.java,
+ 	java/awt/event/AWTEventListener.java,
+ 	java/awt/event/AWTEventListenerProxy.java,
+ 	java/awt/event/ActionEvent.java,
+ 	java/awt/event/AdjustmentEvent.java,
+ 	java/awt/event/AdjustmentListener.java,
+ 	java/awt/event/ComponentAdapter.java,
+ 	java/awt/event/ComponentEvent.java,
+ 	java/awt/event/ComponentListener.java,
+ 	java/awt/event/ContainerAdapter.java,
+ 	java/awt/event/ContainerEvent.java,
+ 	java/awt/event/ContainerListener.java,
+ 	java/awt/event/FocusAdapter.java,
+ 	java/awt/event/FocusEvent.java,
+ 	java/awt/event/FocusListener.java,
+ 	java/awt/event/InputEvent.java,
+ 	java/awt/event/InputMethodEvent.java,
+ 	java/awt/event/InputMethodListener.java,
+ 	java/awt/event/InvocationEvent.java,
+ 	java/awt/event/ItemEvent.java,
+ 	java/awt/event/ItemListener.java,
+ 	java/awt/event/KeyAdapter.java,
+ 	java/awt/event/KeyEvent.java,
+ 	java/awt/event/KeyListener.java,
+ 	java/awt/event/MouseAdapter.java,
+ 	java/awt/event/MouseEvent.java,
+ 	java/awt/event/MouseListener.java,
+ 	java/awt/event/MouseMotionAdapter.java,
+ 	java/awt/event/MouseMotionListener.java,
+ 	java/awt/event/MouseWheelEvent.java,
+ 	java/awt/event/MouseWheelListener.java,
+ 	java/awt/event/PaintEvent.java,
+ 	java/awt/event/TextEvent.java,
+ 	java/awt/event/TextListener.java,
+ 	java/awt/event/WindowAdapter.java,
+ 	java/awt/event/WindowEvent.java,
+ 	java/awt/event/WindowFocusListener.java,
+ 	java/awt/event/WindowListener.java,
+ 	java/awt/event/WindowStateListener.java,
+ 	java/awt/font/TextHitInfo.java,
+ 	java/awt/geom/CubicCurve2D.java,
+ 	java/awt/geom/Dimension2D.java,
+ 	java/awt/geom/Ellipse2D.java,
+ 	java/awt/geom/IllegalPathStateException.java,
+ 	java/awt/geom/Line2D.java,
+ 	java/awt/geom/NoninvertibleTransformException.java,
+ 	java/awt/geom/PathIterator.java,
+ 	java/awt/geom/Point2D.java,
+ 	java/awt/geom/QuadCurve2D.java,
+ 	java/awt/geom/RectangularShape.java,
+ 	java/awt/geom/RoundRectangle2D.java,
+ 	java/awt/im/InputContext.java,
+ 	java/awt/im/InputMethodHighlight.java,
+ 	java/awt/im/InputMethodRequests.java,
+ 	java/awt/im/InputSubset.java,
+ 	java/awt/im/spi/InputMethod.java,
+ 	java/awt/im/spi/InputMethodDescriptor.java,
+ 	java/awt/image/BandCombineOp.java,
+ 	java/awt/image/BandedSampleModel.java,
+ 	java/awt/image/ByteLookupTable.java,
+ 	java/awt/image/ComponentSampleModel.java,
+ 	java/awt/image/DataBuffer.java,
+ 	java/awt/image/DataBufferByte.java,
+ 	java/awt/image/DataBufferDouble.java,
+ 	java/awt/image/DataBufferFloat.java,
+ 	java/awt/image/DataBufferInt.java,
+ 	java/awt/image/DataBufferShort.java,
+ 	java/awt/image/DataBufferUShort.java,
+ 	java/awt/image/ImagingOpException.java,
+ 	java/awt/image/Kernel.java,
+ 	java/awt/image/LookupTable.java,
+ 	java/awt/image/MultiPixelPackedSampleModel.java,
+ 	java/awt/image/PackedColorModel.java,
+ 	java/awt/image/PixelInterleavedSampleModel.java,
+ 	java/awt/image/RGBImageFilter.java,
+ 	java/awt/image/Raster.java,
+ 	java/awt/image/RasterFormatException.java,
+ 	java/awt/image/SampleModel.java,
+ 	java/awt/image/ShortLookupTable.java,
+ 	java/awt/image/SinglePixelPackedSampleModel.java,
+ 	java/awt/image/WritableRaster.java,
+ 	java/awt/print/PrinterAbortException.java,
+ 	java/awt/print/PrinterException.java,
+ 	java/awt/print/PrinterIOException.java:
+ 	Fixed @author tag all over.
+ 
+ 2005-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/EventQueue.java: Reworked import statements.
+ 	* java/lang/StringBuilder.java
+ 	(DEFAULT_CAPACITY): Reordered modifiers.
+ 	* java/text/SimpleDateFormat.java: Reworked import statements.
+ 	Fixed one littel formatting issue.
+ 	(formatData): Removed a useless comment.
+ 	* javax/imageio/ImageIO.java: Reworked import statements.
+ 	* javax/swing/text/StringContent.java: Likewise.
+ 	* javax/swing/JTextField.java: Likewise.
+ 	(notifyAction): Added javadoc.
+ 
+ 2005-02-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/Attributes.java (Name.CLASS_PATH): Document that
+ 	file path elements are separated by spaces.
+ 
+ 2005-02-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/net/ssl/SSLContext.java (getInstance): Add exception message
+ 	and/or cause before throwing.
+ 
+ 2005-02-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLClassLoader.java (JarURLLoader.JarURLLoader): Just use
+ 	space for parsing CLASS_PATH attribute.
+ 
+ 2005-02-15  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java
+ 	(URLLoader.getClassPath): New method.
+ 	(JarURLLoader.JarURLLoader): Read mainfest to parse "Class-Path"
+ 	attribute and add URLs for each entry.
+ 	(JarURLLoader.classPath): New field.
+ 	(JarURLLoader.getClassPath): New method.
+ 	(addURLImpl): Scan through the list of extraUrls in the new
+ 	loader, adding them to our urlinfos.
+ 	(definePackage, findURLResource, findResources): Use
+ 	urlinfos.size(), not urls.size().
+ 
+ 2005-02-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java (URLLoader(URLClassLoader, URL,
+ 	URL)): New constructor.
+ 
+ 2005-02-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLClassLoader.java (findClass): Throw
+ 	ClassNotFoundExceptions including urls, plus parent using toString().
+ 	(thisString): New field.
+ 	(toString): New method.
+ 
+ 	* java/lang/ClassLoader (defaultGetSystemClassLoader): Only install
+ 	ExtensionClassLoader when there are actual extension URLs.
+ 
+ 2005-02-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/xmlj/.cvsignore: Add *.o, *.a, *.lo, *.la, .libs, .deps.
+ 
+ 2005-02-14  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/Calendar.java 
+ 	(Calendar): Constructor should clear fields.
+ 
+ 2005-02-14  Sven de Marothy  <sven@physto.se>
+ 
+ 	* javax/swing/SpinnerDateModel.java: Implemented.
+ 
+ 2005-02-14  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/Calendar.java 
+ 	(clear): Dates should clear to local time.
+ 	* java/util/GregorianCalendar.java      
+ 	(computeTime): Fix priority problem with DAY_OF_WEEK,
+ 	Handle non-sunday-startig weeks and minimumDaysInFirstWeek.
+ 
+ 2005-02-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/AWTKeyStroke.java (getAWTKeyStroke(String)): Throw
+ 	IllegalArgumentException when the given String is null.
+ 
+ 	* javax/swing/KeyStroke.java (getKeyStroke(String)): Return null
+ 	when given keystoke sequence cannot be parsed.
+ 
+ 	* javax/swing/JRootPane.java (setJMenuBar): Remove current menubar
+ 	if one is installed. Only install the given menubar is not null.
+ 
+ 	* javax/swing/JViewport.java (getViewSize): Return an empty
+ 	Dimension when the view isn't set or preferred component size when
+ 	no viewSize is set.
+ 
+ 	* javax/swing/ViewportLayout.java (preferredLayoutSize): Return an
+ 	empty Dimension when there is no view set.
+ 	(minimumLayoutSize): Likewise.
+ 	(layoutContainer): Don't try to layout when there is no view.
+ 
+ 2005-02-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	# Fixes bug #11957
+ 	* java/io/ObjectInputStream.java (resolveClass): Don't check "void"
+ 	twice.
+ 
+ 2005-02-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/xml/aelfred2/SAXDriver.java: Ensure that null is returned when
+ 	attribute index is out of bounds.
+ 
+ 2005-02-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #11949
+ 	* java/awt/BasicStroke.java (hashCode): Check for null dash.
+ 
+ 2005-02-11  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/java/awt/color/ClutProfileConverter.java,
+ 	gnu/java/awt/peer/ClasspathTextLayoutPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkGlyphVector.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java,
+ 	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
+ 	gnu/java/awt/peer/gtk/GdkRobotPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkTextLayout.java,
+ 	gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkChoicePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkContainerPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	gnu/java/io/EncodingManager.java,
+ 	gnu/java/io/decode/DecoderUTF8.java,
+ 	gnu/java/net/protocol/file/Connection.java,
+ 	gnu/java/net/protocol/ftp/ActiveModeDTP.java,
+ 	gnu/java/net/protocol/ftp/BlockInputStream.java,
+ 	gnu/java/net/protocol/ftp/BlockOutputStream.java,
+ 	gnu/java/net/protocol/ftp/CompressedOutputStream.java,
+ 	gnu/java/net/protocol/ftp/StreamInputStream.java,
+ 	gnu/java/net/protocol/ftp/StreamOutputStream.java,
+ 	gnu/java/net/protocol/http/Cookie.java,
+ 	gnu/java/net/protocol/http/HTTPConnection.java,
+ 	gnu/java/net/protocol/http/HTTPDateFormat.java,
+ 	gnu/java/net/protocol/http/Request.java,
+ 	gnu/java/nio/SelectorImpl.java,
+ 	gnu/java/rmi/dgc/DGCImpl.java,
+ 	gnu/java/rmi/server/UnicastConnectionManager.java,
+ 	gnu/java/security/pkcs/SignerInfo.java,
+ 	gnu/java/security/provider/EncodedKeyFactory.java,
+ 	gnu/java/security/provider/GnuDHPublicKey.java,
+ 	gnu/java/security/provider/PKIXCertPathValidatorImpl.java,
+ 	gnu/java/security/x509/X500DistinguishedName.java,
+ 	gnu/java/security/x509/X509CRL.java,
+ 	gnu/java/security/x509/X509CRLEntry.java,
+ 	gnu/java/security/x509/X509Certificate.java,
+ 	gnu/java/security/x509/ext/AuthorityKeyIdentifier.java,
+ 	gnu/java/security/x509/ext/CertificatePolicies.java,
+ 	gnu/java/security/x509/ext/PolicyConstraint.java,
+ 	gnu/xml/aelfred2/SAXDriver.java,
+ 	gnu/xml/dom/Consumer.java,
+ 	gnu/xml/dom/DomCharacterData.java,
+ 	gnu/xml/dom/DomDocument.java,
+ 	gnu/xml/dom/DomDocumentBuilder.java,
+ 	gnu/xml/dom/DomIterator.java,
+ 	gnu/xml/dom/DomNode.java,
+ 	gnu/xml/dom/DomXPathExpression.java,
+ 	gnu/xml/dom/DomXPathResult.java,
+ 	gnu/xml/dom/JAXPFactory.java,
+ 	gnu/xml/dom/ls/DomLSException.java,
+ 	gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java,
+ 	gnu/xml/libxmlj/dom/GnomeXPathNodeList.java,
+ 	gnu/xml/libxmlj/sax/GnomeXMLReader.java,
+ 	gnu/xml/libxmlj/transform/GnomeTransformer.java,
+ 	gnu/xml/libxmlj/transform/GnomeTransformerFactory.java,
+ 	gnu/xml/libxmlj/util/XMLJ.java,
+ 	gnu/xml/pipeline/CallFilter.java,
+ 	gnu/xml/pipeline/DomConsumer.java,
+ 	gnu/xml/pipeline/LinkFilter.java,
+ 	gnu/xml/pipeline/NSFilter.java,
+ 	gnu/xml/pipeline/TeeConsumer.java,
+ 	gnu/xml/pipeline/ValidationConsumer.java,
+ 	gnu/xml/pipeline/WellFormednessFilter.java,
+ 	gnu/xml/pipeline/XIncludeFilter.java,
+ 	gnu/xml/pipeline/XsltFilter.java,
+ 	gnu/xml/transform/ApplyImportsNode.java,
+ 	gnu/xml/transform/Bindings.java,
+ 	gnu/xml/transform/DocumentFunction.java,
+ 	gnu/xml/transform/FormatNumberFunction.java,
+ 	gnu/xml/transform/NodeNumberNode.java,
+ 	gnu/xml/transform/NumberNode.java,
+ 	gnu/xml/transform/Stylesheet.java,
+ 	gnu/xml/transform/SystemPropertyFunction.java,
+ 	gnu/xml/transform/Template.java,
+ 	gnu/xml/transform/TemplatesImpl.java,
+ 	gnu/xml/transform/TransformerImpl.java,
+ 	gnu/xml/transform/ValueOfNode.java,
+ 	gnu/xml/transform/XSLURIResolver.java,
+ 	gnu/xml/util/DoParse.java,
+ 	gnu/xml/util/Resolver.java,
+ 	gnu/xml/xpath/Expr.java,
+ 	gnu/xml/xpath/FunctionCall.java,
+ 	gnu/xml/xpath/RelationalExpr.java,
+ 	gnu/xml/xpath/Selector.java,
+ 	gnu/xml/xpath/XPathParser.java,
+ 	java/beans/XMLDecoder.java,
+ 	java/text/SimpleDateFormat.java,
+ 	javax/swing/JPopupMenu.java,
+ 	javax/swing/JSpinner.java,
+ 	javax/swing/SortingFocusTraversalPolicy.java,
+ 	javax/swing/SwingUtilities.java,
+ 	javax/swing/plaf/basic/BasicComboBoxEditor.java,
+ 	javax/swing/plaf/basic/BasicComboBoxRenderer.java,
+ 	javax/swing/tree/DefaultMutableTreeNode.java,
+ 	javax/xml/parsers/DocumentBuilder.java,
+ 	javax/xml/parsers/DocumentBuilderFactory.java,
+ 	javax/xml/transform/sax/SAXTransformerFactory.java,
+ 	vm/reference/java/lang/VMClassLoader.java,
+ 	vm/reference/java/lang/VMProcess.java,
+ 	vm/reference/java/lang/VMRuntime.java,
+ 	vm/reference/java/lang/VMSystem.java,
+ 	vm/reference/java/security/VMAccessController.java:
+ 	Removed unused imports and expanded starred
+ 	imports.
+ 
+ 2005-02-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkFontPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GdkGraphics2D.h:
+ 	Regenerated.
+ 
+ 2005-02-12  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java: Add.
+ 
+ 2005-02-12  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontPeer.java
+ 	(getGlyphVector):
+ 	(getFontMetrics):
+ 	(getTextMetrics): New native methods.
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java: Remove native parts.
+ 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java: 
+ 	Hold reference to GtkToolkit.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(cairoSetFont):
+ 	(cairoDrawGdkTextLayout):
+ 	(cairoDrawString): 
+ 	(getPeerTextMetrics):
+ 	(getPeerFontMetrics): Remove.
+ 	(setFont): Don't call cairoSetFont.
+ 	(cairoDrawGlyphVector): Accept font peer argument.
+ 	(drawGlyphVector): Pass font peer to cairoDrawGlyphVector.
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
+ 	(finalize): Call finish from here.
+ 	(produce): Not from here.
+ 	* gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java:
+ 	Hold reference to GdkGraphicsEnvironment.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java:
+ 	(getFontMetrics): Change locking.
+ 	(getBounds): New method.
+ 	(getLocalGraphicsEnvironment): Pass reference to this.
+ 
+ 	* include/Makefile.am: Remove entries for GdkFontMetrics, GdkGlyphVector.
+ 	* include/gnu_java_awt_peer_gtk_GdkFontMetrics.h: Remove.
+ 	* include/gnu_java_awt_peer_gtk_GdkFontPeer.h: Regenerate.
+ 	* include/gnu_java_awt_peer_gtk_GdkGlyphVector.h: Remove.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics2D.h: Regenerate.
+ 
+ 	* native/jni/gtk-peer/Makefile.am
+ 	Remove entries for GdkFontMetrics, GdkGlyphVector.
+ 	* native/jni/gtk-peer/gdkfont.h: Add #defines, remove struct glyphvec.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(ensure_metrics_cairo):
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont):
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawString):
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerFontMetrics):
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerTextMetrics):
+ 	(metrics_cairo):
+ 	(metrics_surface): Remove.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector):
+ 	Pass and install font peer.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c:
+ 	Release GDK lock while performing upcalls.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Remove.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector):
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics): 
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getTextMetrics): New methods.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: Remove.
+ 
+ 2005-02-11  Craig Black  <craig.black@aonix.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxMenuItem.java
+ 	(postMenuActionEvent): Implement to notify ItemListeners.
+ 	* java/awt/CheckboxMenuItem.java
+ 	(dispatchEventImpl): Update state on ItemEvent.
+ 	* java/awt/MenuItem.java
+ 	(processActionEvent): Retarget event source.
+ 
+ 2005-02-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (create):
+ 	Use GTK's built-in file system backend.  Use GTK_RESPONSE_ACCEPT.
+ 	(handle_response): Use GTK_RESPONSE_ACCEPT.
+ 
+ 2005-02-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Define GTK_CAIRO in config.h
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(gtkInit): Compile Graphics2D stuff conditionally.
+ 
+ 2005-02-10  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/dom/DomAttr.java,
+ 	gnu/xml/dom/DomCDATA.java,
+ 	gnu/xml/dom/DomCDATASection.java,
+ 	gnu/xml/dom/DomCharacterData.java,
+ 	gnu/xml/dom/DomDOMException.java,
+ 	gnu/xml/dom/DomDoctype.java,
+ 	gnu/xml/dom/DomDocument.java,
+ 	gnu/xml/dom/DomDocumentConfiguration.java,
+ 	gnu/xml/dom/DomDocumentFragment.java,
+ 	gnu/xml/dom/DomElement.java,
+ 	gnu/xml/dom/DomEx.java,
+ 	gnu/xml/dom/DomFragment.java,
+ 	gnu/xml/dom/DomImpl.java,
+ 	gnu/xml/dom/DomIterator.java,
+ 	gnu/xml/dom/DomNamedNodeMap.java,
+ 	gnu/xml/dom/DomNode.java,
+ 	gnu/xml/dom/DomNsNode.java,
+ 	gnu/xml/dom/DomPI.java,
+ 	gnu/xml/dom/DomProcessingInstruction.java,
+ 	gnu/xml/dom/DomText.java,
+ 	gnu/xml/dom/DomLSEx.java,
+ 	gnu/xml/dom/DomLSException.java,
+ 	gnu/xml/dom/DomLSParser.java,
+ 	gnu/xml/dom/DomLSSerializer.java: Refactoring of exception and DOM
+ 	implementation class names to conform to Classpath guidelines. Make
+ 	DomLSException use JDK 1.4+ exception chaining.
+ 	* gnu/xml/util/SAXNullTransformerFactory.java,
+ 	gnu/xml/xpath/Predicate.java: Use constants relative to declaring
+ 	class or interface.
+ 
+ 2005-02-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTabbedPane.java
+ 	(Page.setDisplayedMnemonicIndex): Handle empty menmonic.
+ 
+ 2005-02-10  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
+ 	Release GDK lock during upcalls.
+ 
+ 2005-02-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c:
+ 	Merged file header from java-gui-20050128-branch.
+ 
+ 2005-02-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Container.java (paramString):
+ 	If layoutMgr is null just return result of super.paramString().
+ 
+ 2005-02-10  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/text/Collator.java (getInstance(Locale)):
+ 	Added default collation pattern to handle case when resource
+ 	is missing and throw InternalError instead of returning null
+ 	should parsing fail.
+ 
+ 2005-02-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/net/protocol/jar/Connection.java (getJarFile): 
+ 	Rename jar_file to jf.
+ 
+ 2005-02-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/net/protocol/jar/Connection.java (getJarFile): Open
+ 	jar file with OPEN_DELETE.
+ 	* java/util/zip/ZipFile.java (ZipFile): Call deleteOnExit when
+ 	OPEN_DELETE is used.
+ 
+ 2005-02-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Scrollbar.java: Reformatted.
+ 
+ 2005-02-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URI.java (AUTHORITY_REGEXP): Handle case where user
+ 	name or port is missing.
+ 	(AUTHORITY_USERINFO_GROUP, AUTHORITY_HOST_GROUP,
+ 	AUTHORITY_PORT_GROUP): Updated.
+ 
+ 2005-02-08  Craig Black  <craig.black@aonix.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(copyState): Pass a JNI global reference to signal handler.
+ 	(realize_cb): Use and free JNI global reference.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(create): Pass a JNI global reference to signal handler.
+ 	(selection_changed): Match declaration.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
+ 	(dispose): Do not remove entries from state tables until after widget is
+ 	destroyed.
+ 
+ 2005-02-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/java-nio/java_nio_VMDirectByteBuffer.c
+ 	(NIOGetPointer): Handle case of pointer size != 32 bit.
+ 	(NIOGetRawData): Likewise.
+ 	(Java_java_nio_VMDirectByteBuffer_init): Likewise.
+ 	Fixed asking for primitive type 'long'.
+ 
+ 2005-02-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Define substition variable GTK_CAIRO_ENABLED.
+ 	Fix handling of GTK_CAIRO conditional.
+ 	* gnu/classpath/Configuration.java.in (GTK_CAIRO_ENABLED):
+ 	New constant.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (static):
+ 	Throw error when Cairo support was not enabled during configure time.
+ 
+ 2005-02-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/tree/DefaultMutableTreeNode.java:
+ 	Reworked Javadocs all over.
+ 	(getPathToRoot): Fixed direction of result array initialization.
+ 
+ 2005-02-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/ResourceBundle.java (getObject): Clarify
+ 	MissingResourceException detailed message.
+ 	(tryBundle(String,ClassLoader)): Likewise.
+ 
+ 2005-02-07  Craig Black  <craig.black@aonix.com>
+ 
+ 	* native/jni/classpath/native_state.c
+ 	(add_node): Update head pointer when moving node to front of list.
+ 
+ 2005-02-07  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* acinclude.m4:
+ 	(CLASSPATH_FIND_JAVAC): Add ECJ option.
+ 	(CLASSPATH_WITH_ECJ): New function.
+ 	(CLASSPATH_CHECK_ECJ): New function.
+ 	* examples/Makefile.am:
+ 	Allow examples to be built with ecj.
+ 	* lib/Makefile.am:
+ 	Allow Classpath to be built with ecj.
+ 
+ 2005-02-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Timo Lindfors <timo.lindfors@iki.fi>
+ 	java/util/regex/Matcher.java (lookingAt): Set position when match
+ 	found.
+ 	(matches): Implemented through lookingAt().
+ 
+ 2005-02-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fix suggested by Timo Lindfors <timo.lindfors@iki.fi>
+ 	* java/util/regex/Pattern.java (split(CharSequence,int)):
+ 	Fix while empties > 0 loops.
+ 
+ 2005-02-05  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* gnu/java/rmi/registry/: Added back to classpath again, used by core
+ 	library.
+ 	* gnu/java/rmi/registry/RegistryImpl.java: ditto
+ 	* gnu/java/rmi/registry/RegistryImpl_Skel.java: ditto
+ 	* gnu/java/rmi/registry/RegistryImpl_Stub.java: ditto
+ 
+ 2005-02-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/api/Makefile.am (create_html): Remove gjdoc -public flag.
+ 
+ 2005-02-05  Sven de Marothy  <sven@physto.se>
+ 
+         * java/text/SimpleDateFormat.java
+         (parse): Tweak handling of 2-year dates
+         * java/util/Calendar.java
+         (clear): Clear fields to correct value.
+         * java/util/GregorianCalendar.java
+         (computeTime): Correct handling of time zones.
+         Correct field minimum values.
+ 
+ 2005-02-05  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* gnu/java/rmi/rmic/: added to cp-tools and removed from classpath
+ 	* gnu/java/rmi/rmic/Compile_gcj.java: ditto
+ 	* gnu/java/rmi/rmic/Compile_jikes.java: ditto
+ 	* gnu/java/rmi/rmic/Compile_kjc.java: ditto
+ 	* gnu/java/rmi/rmic/Compiler.java: ditto
+ 	* gnu/java/rmi/rmic/CompilerProcess.java: ditto
+ 	* gnu/java/rmi/rmic/RMICException.java: ditto
+ 	* gnu/java/rmi/rmic/RMIC.java: ditto
+ 	* gnu/java/rmi/rmic/TabbedWriter.java: ditto
+ 	* gnu/java/rmi/registry/: added to cp-tools and removed from classpath
+ 	* gnu/java/rmi/registry/RegistryImpl.java: ditto
+ 	* gnu/java/rmi/registry/RegistryImpl_Skel.java: ditto
+ 	* gnu/java/rmi/registry/RegistryImpl_Stub.java: ditto
+ 
+ 2005-02-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/api/Makefile.am (classpathbox): Use class logo and target _top.
+ 
+ 2005-02-04  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/aelfred2/SAXDriver.java: Corrected implementation of
+ 	isDeclared methods. Improved performance of isSpecified methods.
+ 
+ 2005-02-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SortingFocusTraversalPolicy.java
+ 	(getSortedCycle): Fixed initialization of set.
+ 
+ 2005-02-03  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* gnu/java/nio/charset/ISO_8859_1.java,
+ 	gnu/java/nio/charset/US_ASCII.java, 
+ 	gnu/java/nio/charset/UTF_16.java,
+ 	gnu/java/nio/charset/UTF_16_LE.java,
+ 	gnu/java/nio/charset/UTF_16_BE.java,
+ 	gnu/java/nio/charset/UTF_8.java: Fixed canonical names
+ 	 and aliases according to
+ 	 "http://www.iana.org/assignments/character-sets",
+ 	 "http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html"
+ 	 and "http://oss.software.ibm.com/cgi-bin/icu/convexp?s=ALL".
+ 	* gnu/java/nio/charset/Provider.java: Made charset lookup
+ 	 case-insensitive which fixes bug #11740. 
+ 
+ 2005-02-03  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* libraries/javalib/gnu/regexp/RE.java,
+ 	libraries/javalib/java/io/ObjectInputStream.java,
+ 	libraries/javalib/java/io/ObjectStreamClass.java,
+ 	libraries/javalib/java/lang/SecurityManager.java,
+ 	libraries/javalib/java/security/AllPermission.java,
+ 	libraries/javalib/java/security/BasicPermission.java,
+ 	libraries/javalib/java/security/Permissions.java,
+ 	libraries/javalib/java/text/MessageFormat.java,
+ 	libraries/javalib/java/util/AbstractList.java:
+ 	Made 'inner' classes real public static inner classes,
+ 	and made them final where possible, or removed them 
+ 	where unused. 
+ 
+ 2005-02-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	Fix includes for cairo 0.3.0 snappshot.
+ 
+ 2005-02-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/net/protocol/jar/Connection.java (is_trying): Removed
+ 	field.
+ 	(get): Don't use or set is_trying.
+ 
+ 2005-02-02  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/util/Calendar.java 
+ 	(set) Invalidate all fields on first call to set().
+ 
+ 2005-02-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java: Remove SystemClassLoader
+ 	import statement.
+ 
+ 2005-02-02  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/SimpleDateFormat.java
+ 	Lots of documentation updates.
+ 	(readObject(java.io.ObjectInputStream)): Wraps
+ 	IllegalArgumentException as specified.
+ 	(compileFormat(String)): Uses standardChars
+ 	rather than the local pattern characters.
+ 	Throws IllegalArgumentException rather than
+ 	storing a -1 field.
+ 	(toString()): Extended to include all variables
+ 	in a better format.
+ 	(translateLocalizedPattern(String, String, String)):
+ 	Renamed to better define the use of this method.
+ 
+ 2005-02-02  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* gnu/java/net/GetSystemPropertyAction.java:
+ 	Removed.
+ 	* gnu/java/net/protocol/ftp/FTPURLConnection.java:
+ 	Use gnu.java.security.action.GetPropertyAction instead 
+ 	of gnu.java.net.GetSystemPropertyAction.
+ 
+ 2005-02-02  Robert Schuster  <thebohemian@gmx.net>
+ 
+ 	* gnu/java/beans/decoder/GrowableArrayContext.java: Fixed
+ 	assignment behavior by using java.lang.reflect.Array.set()
+ 	directly.
+ 
+ 2005-02-01  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* gnu/java/beans/EmptyBeanInfo.java,
+ 	gnu/java/beans/info/ComponentBeanInfo.java,
+ 	gnu/java/lang/SystemClassLoader.java:
+ 	Removed unused files.
+ 
+ 2005-02-01  Sven de Marothy  <sven@physto.se>
+ 	
+ 	* java/util/GregorianCalendar.java
+ 	(computeTime): Fixed handling of time zones.
+ 
+ 2005-02-01  Sven de Marothy  <sven@physto.se>
+ 	
+ 	* java/util/Calendar.java
+ 	(clear): Set values to Epoch instead of zero.
+ 	(set): Set isSet to the relevant field pattern instead of just the
+ 	field.
+ 	* java/util/GregorianCalendar.java
+ 	(getBundle): Removed.
+ 	(getDayOfYear): Removed.
+ 	(getFirstDayOfMonth): New private method.
+ 	(nonLeniencyCheck): New private method.
+ 	(computeTime): Correct handling of insufficient data.
+ 
+ 2005-02-01  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* javax/security/auth/callback/Callback.java,
+ 	javax/security/auth/callback/CallbackHandler.java,
+ 	javax/security/auth/callback/ChoiceCallback.java,
+ 	javax/security/auth/callback/ConfirmationCallback.java,
+ 	javax/security/auth/callback/LanguageCallback.java,
+ 	javax/security/auth/callback/NameCallback.java,
+ 	javax/security/auth/callback/PasswordCallback.java,
+ 	javax/security/auth/callback/TextInputCallback.java,
+ 	javax/security/auth/callback/TextOutputCallback.java,
+ 	javax/security/auth/callback/UnsupportedCallbackException.java:
+ 	Removed CVS version tags.
+ 	
+ 2005-01-31  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/java/locale/LocaleHelper.java:
+ 	New utility class.
+ 	(getLocalizedString(java.util.Locale,
+ 	String, String, boolean, boolean)):
+ 	More generic version of what was
+ 	java.util.Locale.getDisplayString, now
+ 	available to all classes.
+ 	* gnu/java/locale/LocaleInformation.java,
+ 	gnu/java/locale/LocaleInformation_aa.java,
+ 	gnu/java/locale/LocaleInformation_aa_ET.java,
+ 	gnu/java/locale/LocaleInformation_af.java,
+ 	gnu/java/locale/LocaleInformation_am.java,
+ 	gnu/java/locale/LocaleInformation_am_ET.java,
+ 	gnu/java/locale/LocaleInformation_ar.java,
+ 	gnu/java/locale/LocaleInformation_as.java,
+ 	gnu/java/locale/LocaleInformation_az.java,
+ 	gnu/java/locale/LocaleInformation_be.java,
+ 	gnu/java/locale/LocaleInformation_bg.java,
+ 	gnu/java/locale/LocaleInformation_bn.java,
+ 	gnu/java/locale/LocaleInformation_byn.java
+ 	gnu/java/locale/LocaleInformation_byn_ER.java
+ 	gnu/java/locale/LocaleInformation_ca.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_cy.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_dv.java,
+ 	gnu/java/locale/LocaleInformation_dz.java,
+ 	gnu/java/locale/LocaleInformation_dz_BT.java,
+ 	gnu/java/locale/LocaleInformation_el.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BE.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_MT.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_eo.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_et.java,
+ 	gnu/java/locale/LocaleInformation_eu.java,
+ 	gnu/java/locale/LocaleInformation_fa.java,
+ 	gnu/java/locale/LocaleInformation_fa_AF.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fo.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gez.java
+ 	gnu/java/locale/LocaleInformation_gez_ER.java
+ 	gnu/java/locale/LocaleInformation_gez_ET.java
+ 	gnu/java/locale/LocaleInformation_gl.java,
+ 	gnu/java/locale/LocaleInformation_gu.java,
+ 	gnu/java/locale/LocaleInformation_gv.java,
+ 	gnu/java/locale/LocaleInformation_haw.java
+ 	gnu/java/locale/LocaleInformation_haw_US.java
+ 	gnu/java/locale/LocaleInformation_he.java,
+ 	gnu/java/locale/LocaleInformation_hi.java,
+ 	gnu/java/locale/LocaleInformation_hr.java,
+ 	gnu/java/locale/LocaleInformation_hu.java,
+ 	gnu/java/locale/LocaleInformation_hy.java,
+ 	gnu/java/locale/LocaleInformation_id.java,
+ 	gnu/java/locale/LocaleInformation_is.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_iu.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ka.java,
+ 	gnu/java/locale/LocaleInformation_kk.java,
+ 	gnu/java/locale/LocaleInformation_kl.java,
+ 	gnu/java/locale/LocaleInformation_km.java,
+ 	gnu/java/locale/LocaleInformation_kn.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_kok.java
+ 	gnu/java/locale/LocaleInformation_kok_IN.java
+ 	gnu/java/locale/LocaleInformation_kw.java,
+ 	gnu/java/locale/LocaleInformation_ky.java,
+ 	gnu/java/locale/LocaleInformation_lo.java,
+ 	gnu/java/locale/LocaleInformation_lt.java,
+ 	gnu/java/locale/LocaleInformation_lv.java,
+ 	gnu/java/locale/LocaleInformation_mk.java,
+ 	gnu/java/locale/LocaleInformation_ml.java,
+ 	gnu/java/locale/LocaleInformation_mn.java,
+ 	gnu/java/locale/LocaleInformation_mn_MN.java,
+ 	gnu/java/locale/LocaleInformation_mr.java,
+ 	gnu/java/locale/LocaleInformation_ms.java,
+ 	gnu/java/locale/LocaleInformation_ms_BN.java,
+ 	gnu/java/locale/LocaleInformation_mt.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nn.java,
+ 	gnu/java/locale/LocaleInformation_om.java,
+ 	gnu/java/locale/LocaleInformation_om_ET.java,
+ 	gnu/java/locale/LocaleInformation_or.java,
+ 	gnu/java/locale/LocaleInformation_pa.java,
+ 	gnu/java/locale/LocaleInformation_pl.java,
+ 	gnu/java/locale/LocaleInformation_ps.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro.java,
+ 	gnu/java/locale/LocaleInformation_ru.java,
+ 	gnu/java/locale/LocaleInformation_sa.java,
+ 	gnu/java/locale/LocaleInformation_sid.java
+ 	gnu/java/locale/LocaleInformation_sid_ET.java
+ 	gnu/java/locale/LocaleInformation_sk.java,
+ 	gnu/java/locale/LocaleInformation_sl.java,
+ 	gnu/java/locale/LocaleInformation_so.java,
+ 	gnu/java/locale/LocaleInformation_so_DJ.java,
+ 	gnu/java/locale/LocaleInformation_so_ET.java,
+ 	gnu/java/locale/LocaleInformation_so_SO.java,
+ 	gnu/java/locale/LocaleInformation_sq.java,
+ 	gnu/java/locale/LocaleInformation_sr.java,
+ 	gnu/java/locale/LocaleInformation_sr_Latn.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_sw.java,
+ 	gnu/java/locale/LocaleInformation_syr.java
+ 	gnu/java/locale/LocaleInformation_syr_SY.java
+ 	gnu/java/locale/LocaleInformation_ta.java,
+ 	gnu/java/locale/LocaleInformation_te.java,
+ 	gnu/java/locale/LocaleInformation_th.java,
+ 	gnu/java/locale/LocaleInformation_ti.java,
+ 	gnu/java/locale/LocaleInformation_ti_ER.java,
+ 	gnu/java/locale/LocaleInformation_ti_ET.java,
+ 	gnu/java/locale/LocaleInformation_tig.java
+ 	gnu/java/locale/LocaleInformation_tig_ER.java
+ 	gnu/java/locale/LocaleInformation_tr.java,
+ 	gnu/java/locale/LocaleInformation_tt.java,
+ 	gnu/java/locale/LocaleInformation_uk.java,
+ 	gnu/java/locale/LocaleInformation_ur.java,
+ 	gnu/java/locale/LocaleInformation_uz.java,
+ 	gnu/java/locale/LocaleInformation_uz_AF.java,
+ 	gnu/java/locale/LocaleInformation_vi.java,
+ 	gnu/java/locale/LocaleInformation_wal.java
+ 	gnu/java/locale/LocaleInformation_wal_ET.java
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_HK_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_MO_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG_Hans.java,
+ 	Locales updated with re-ordered zone strings,
+ 	new separator ('|' replaced with \u00A6) and updated
+ 	data from the latest CLDR CVS (including 16 new
+ 	locales).
+ 	* java/util/Currency.java:
+ 	 (currencySymbol): Removed.
+ 	(getCurrencyCode()): Rewritten to call
+ 	getCurrencyCode(Locale.getDefault()).
+ 	(getCurrencyCode(java.util.Locale)): Rewritten to
+ 	lookup localized currency symbol from our locale data.
+ 	* java/util/Locale.java:
+ 	(getDisplayLanguage(java.util.Locale)): Now calls
+ 	method in LocaleHelper.
+ 	(getDisplayCountry(java.util.Locale)): Likewise.
+ 	(getDisplayVariant(java.util.Locale)): Likewise.
+ 	(getDisplayString()): Rewritten in LocaleHelper.
+ 	
+ 2005-01-29  Quentin Anciaux  <quentin.anciaux@advalvas.be>
+ 
+ 	* gnu/classpath/SystemProperties.java (static): Add all aliases
+ 	for UTF8, UTF16 and UTF32 (Little and Big Endian), US-ASCII,
+ 	iso-8859-[1-9], iso-8859-13, iso-8859-15, cp-1250, cp-1252 and
+ 	cp1047 to defaultProperties.
+ 	* gnu/java/io/decode/Decoder8859_13.java: New class.
+ 	* gnu/java/io/decode/Decoder8859_15.java: Likewise.
+ 	* gnu/java/io/decode/Decoder8859_6.java: Likewise.
+ 	* gnu/java/io/decode/Decoder8859_7.java: Likewise.
+ 	* gnu/java/io/decode/Decoder8859_8.java: Likewise.
+ 	* gnu/java/io/decode/Decoder8859_9.java: Likewise.
+ 	* gnu/java/io/decode/DecoderASCII.java: Likewise.
+ 	* gnu/java/io/decode/DecoderCp1047.java: Likewise.
+ 	* gnu/java/io/decode/DecoderEBCDIC_XML_US.java: Likewise.
+ 	* gnu/java/io/decode/DecoderUTF16BE.java: Likewise.
+ 	* gnu/java/io/decode/DecoderUTF16LE.java: Likewise.
+ 	* gnu/java/io/decode/DecoderUTF32BE.java: Likewise.
+ 	* gnu/java/io/decode/DecoderUTF32LE.java: Likewise.
+ 	* gnu/java/io/decode/DecoderWindows1250.java: Likewise.
+ 	* gnu/java/io/decode/DecoderWindows1252.java: Likewise.
+ 	* gnu/java/io/encode/Encoder8859_13.java: Likewise.
+ 	* gnu/java/io/encode/Encoder8859_15.java: Likewise.
+ 	* gnu/java/io/encode/Encoder8859_6.java: Likewise.
+ 	* gnu/java/io/encode/Encoder8859_7.java: Likewise.
+ 	* gnu/java/io/encode/Encoder8859_8.java: Likewise.
+ 	* gnu/java/io/encode/Encoder8859_9.java: Likewise.
+ 	* gnu/java/io/encode/EncoderASCII.java: Likewise.
+ 	* gnu/java/io/encode/EncoderCp1047.java: Likewise.
+ 	* gnu/java/io/encode/EncoderEBCDIC_XML_US.java: Likewise.
+ 	* gnu/java/io/encode/EncoderUTF16BE.java: Likewise.
+ 	* gnu/java/io/encode/EncoderUTF16LE.java: Likewise.
+ 	* gnu/java/io/encode/EncoderUTF32BE.java: Likewise.
+ 	* gnu/java/io/encode/EncoderUTF32LE.java: Likewise.
+ 	* gnu/java/io/encode/EncoderWindows1250.java: Likewise.
+ 	* gnu/java/io/encode/EncoderWindows1252.java: Likewise.
+ 
+ 2005-01-29  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* vm/reference/gnu/classpath/VMStackWalker.java: Doc fix.
+ 
+ 2005-01-29  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/text/SimpleDateFormat.java:
+ 	(parse): Set the DST offset to 0 when parsing
+ 	GMT offset timezones.
+ 
+ 2005-01-28  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/xml/DomNode: Correct implementation of getElementsByTagName
+ 	etc to return a NodeList that returns consistent results from item
+ 	and getLength methods.
+ 
+ 2005-01-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/Attributes.java (Attributes.Name): Add documentation
+ 	to describe attributes without a constant field value in this class.
+ 
+ 2005-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(getFontMetrics): Removed.
+ 
+ 2005-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Container.java
+ 	(paramString): Implemented.
+ 	* javax/swing/AbstractButton.java
+ 	(paramString): Implemented.
+ 	* javax/swing/JComponent.java
+ 	(paramString): Implemented.
+ 	* javax/swing/JMenu.java
+ 	(paramString): Implemented.
+ 	* javax/swing/JMenuBar.java
+ 	(paramString): Implemented.
+ 	* javax/swing/JMenuItem.java
+ 	(paramString): Implemented.
+ 	* javax/swing/JPopupMenu.java
+ 	(paramString): Implemented.
+ 
+ 2005-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JMenu.java
+ 	(uiClassID): Removed.
+ 	(JMenu): Set invoker on popup menu.
+ 	(getUIClassID): Return id directly.
+ 	(getItemCount): Simply return getMenuComponentCount().
+ 	Fixed javadoc.
+ 	(isTopLevelMenu): Simplified.
+ 	* javax/swing/JMenuItem.java
+ 	(uiClassID): Removed.
+ 	(getUIClassID): Return id directly.
+ 	* javax/swing/JPopupMenu.java
+ 	(uiClassID): Removed.
+ 	(JPopupMenu): Always initialize correctly.
+ 	(getSubElements): Only return components implementing MenuElement
+ 	interface.
+ 	(HeavyWeightPopup.hide): Removed.
+ 
+ 2005-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/jar/Attributes.java
+ 	(CREATED_BY, JAVA_BEAN, MAGIC): Removed.
+ 
+ 2005-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/ReplicateScaleFilter.java
+ 	(replicatePixels): Made private.
+ 	* javax/swing/colorchooser/DefaultRGBChooserPanel.java
+ 	(DefaultRGBChooserPanel): Made package private.
+ 	* javax/swing/colorchooser/DefaultSwatchChooserPanel.java
+ 	(RecentSwatchPanel): Likewise.
+ 	* javax/swing/event/MouseInputAdapter.java: Reformatted.
+ 	(MouseInputAdapter): Made abstract.
+ 	* javax/swing/tree/DefaultMutableTreeNode.java
+ 	(random): Removed.
+ 	(growTree): Likewise.
+ 
+ 2005-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/GregorianCalendar.java (getLeniarDay): 
+ 	Made private.
+ 
+ 2005-01-27  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/faq/faq.wml: type in faq code corrected
+ 
+ 2005-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/dnd/DropTarget.java (addDropTargetListener):
+ 	Clarified comments.
+ 
+ 2005-01-27  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/dnd/DropTarget.java
+ 	(addDropTargetListener): Despite documentation, do not throw.
+ 	* javax/swing/JComponent.java: Set a default DropTarget.
+ 
+ 2005-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/ZipFile.java
+ 	(ZIP_MAGIC): New constant.
+ 	(ZipFile): Check if given file is really a zip file.
+ 	(checkZipFile): New method.
+ 	(checkClosed): New method.
+ 	(entries): Check if file was closed. Return an empty enumeration in
+ 	error case.
+ 	(getEntries): Use checkClosed().
+ 	(getEntry): Check if file was closed.
+ 	(getInputStream): Likewise.
+ 	(size): Likewise.
+ 
+ 2005-01-27  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/faq/faq.wml: current command to generate doc
+ 	added to the faq
+ 
+ 2005-01-27  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/docs/docs.wml: link to gjdoc-generated docs
+ 
+ 2005-01-27  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* javax/swing/SwingUtilities.java:
+ 	(getAccessibleAt(java.awt.Component, java.awt.Point)):
+ 	Implemented and documented.
+ 	(getAccessibleChild(java.awt.Component, int)): Likewise.
+ 	(getAccessibleChildrenCount(java.awt.Component)): Likewise.
+ 	(getAccessibleIndexInParent(java.awt.Component)): Likewise.
+ 	(getAccessibleStateSet(java.awt.Component)): Likewise.
+ 	
+ 2005-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java
+ 	(ENABLED_PROPERTY): Removed.
+ 	(setEnabled): Replaced constant with real string.
+ 	* javax/swing/AbstractButton.java
+ 	(createActionPropertyChangeListener.propertyChange): Likewise.
+ 	* javax/swing/JComboBox.java
+ 	(DEFAULT_MAXIMUM_ROW_COUNT): Made private.
+ 	(EDITABLE_CHANGED_PROPERTY): Removed.
+ 	(MAXIMUM_ROW_COUNT_CHANGED_PROPERTY):Likewise.
+ 	(ENABLED_CHANGED_PROPERTY):Likewise.
+ 	(RENDERER_CHANGED_PROPERTY):Likewise.
+ 	(EDITOR_CHANGED_PROPERTY):Likewise.
+ 	(MODEL_CHANGED_PROPERTY):Likewise.
+ 	(uiClassID):Likewise.
+ 	(getUIClassID): Replaced constant with real string.
+ 	(setModel):Likewise.
+ 	(setEditable):Likewise.
+ 	(setMaximumRowCount):Likewise.
+ 	(setRenderer):Likewise.
+ 	(setEditor):Likewise.
+ 	(setEnabled):Likewise.
+ 	* javax/swing/JLabel.java
+ 	(DISABLED_ICON_CHANGED_PROPERTY): Removed.
+ 	(DISPLAYED_MNEMONIC_CHANGED_PROPERTY): Likewise.
+ 	(DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY): Likewise.
+ 	(HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY): Likewise.
+ 	(HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY): Likewise.
+ 	(ICON_CHANGED_PROPERTY): Likewise.
+ 	(ICON_TEXT_GAP_CHANGED_PROPERTY): Likewise.
+ 	(LABEL_FOR_CHANGED_PROPERTY): Likewise.
+ 	(TEXT_CHANGED_PROPERTY): Likewise.
+ 	(VERTICAL_ALIGNMENT_CHANGED_PROPERTY): Likewise.
+ 	(VERTICAL_TEXT_POSITION_CHANGED_PROPERTY): Likewise.
+ 	(setText): Replaced constant with real string.
+ 	(setIcon): Likewise.
+ 	(setDisabledIcon): Likewise.
+ 	(setDisplayedMnemonic): Likewise.
+ 	(setIconTextGap): Likewise.
+ 	(setVerticalAlignment): Likewise.
+ 	(setHorizontalAlignment): Likewise.
+ 	(setVerticalTextPosition): Likewise.
+ 	(setHorizontalTextPosition): Likewise.
+ 	(setLabelFor): Replaced constant with real string.
+ 	Fire property change event after property got changed.
+ 	* javax/swing/JList.java
+ 	(CELL_RENDERER_PROPERTY_CHANGED): Likewise.
+ 	(FIXED_CELL_HEIGHT_PROPERTY_CHANGED): Likewise.
+ 	(FIXED_CELL_WIDTH_PROPERTY_CHANGED): Likewise.
+ 	(LAYOUT_ORIENTATION_PROPERTY_CHANGED): Likewise.
+ 	(MODEL_PROPERTY_CHANGED): Likewise.
+ 	(PROTOTYPE_CELL_VALUE_PROPERTY_CHANGED): Likewise.
+ 	(SELECTION_BACKGROUND_PROPERTY_CHANGED): Likewise.
+ 	(SELECTION_FOREGROUND_PROPERTY_CHANGED): Likewise.
+ 	(SELECTION_MODEL_PROPERTY_CHANGED): Likewise.
+ 	(setFixedCellWidth): Reimplemented.
+ 	(setFixedCellHeight): Exit if new value is identical.
+ 	Replaced constant with real string.
+ 	(setSelectionBackground): Likewise.
+ 	(setSelectionForeground): Likewise.
+ 	(setPrototypeCellValue): Likewise.
+ 	(setCellRenderer): Replaced constant with real string.
+ 	(setModel): Likewise.
+ 	(setSelectionModel): Likewise.
+ 	* javax/swing/JMenuBar.java
+ 	(BORDER_PAINTED_CHANGED_PROPERTY): Removed.
+ 	(MODEL_CHANGED_PROPERTY): Likewise.
+ 	(MARGIN_CHANGED_PROPERTY): Likewise.
+ 	(setBorderPainted): Reimplemented.
+ 	(setMargin): Likewise.
+ 	(setSelectionModel): Replaced constant with real string.
+ 	* javax/swing/JPopupMenu.java
+ 	(LABEL_CHANGED_PROPERTY): Removed.
+ 	(VISIBLE_CHANGED_PROPERTY): Likewise.
+ 	(borderPainted): Likewise.
+ 	(setLabel): Replaced constant with real string.
+ 	(setVisible): Exit if new value is identical.
+ 	Replaced constant with real string.
+ 	* javax/swing/JProgressBar.java
+ 	(BORDER_PAINTED_CHANGED_PROPERTY): Removed.
+ 	(ORIENTATION_CHANGED_PROPERTY): Likewise.
+ 	(STRING_CHANGED_PROPERTY): Likewise.
+ 	(STRING_PAINTED_CHANGED_PROPERTY): Likewise.
+ 	(INDETERMINATE_CHANGED_PROPERTY): Likewise.
+ 	(setOrientation): Replaced constant with real string.
+ 	(setStringPainted): Likewise.
+ 	(setString): Likewise.
+ 	(setBorderPainted): Likewise.
+ 	(setIndeterminate): Likewise.
+ 	* javax/swing/JScrollBar.java
+ 	(BLOCK_INCREMENT_CHANGED_PROPERTY): Removed.
+ 	(MODEL_CHANGED_PROPERTY): Likewise.
+ 	(ORIENTATION_CHANGED_PROPERTY): Likewise.
+ 	(setOrientation): Replaced constant with real string.
+ 	(setModel): Likewise.
+ 	(setUnitIncrement): Likewise.
+ 	(setBlockIncrement): Likewise.
+ 	* javax/swing/JScrollPane.java
+ 	(COLUMN_HEADER_CHANGED_PROPERTY): Removed.
+ 	(COMPONENT_ORIENTATION_CHANGED_PROPERTY): Likewise.
+ 	(HORIZONTAL_SCROLLBAR_CHANGED_PROPERTY): Likewise.
+ 	(HORIZONTAL_SCROLLBAR_POLICY_CHANGED_PROPERTY): Likewise.
+ 	(LAYOUT_CHANGED_PROPERTY): Likewise.
+ 	(ROW_HEADER_CHANGED_PROPERTY): Likewise.
+ 	(VERTICAL_SCROLLBAR_CHANGED_PROPERTY): Likewise.
+ 	(VERTICAL_SCROLLBAR_POLICY_CHANGED_PROPERTY): Likewise.
+ 	(VIEWPORT_CHANGED_PROPERTY): Likewise.
+ 	(VIEWPORT_BORDER_CHANGED_PROPERTY): Likewise.
+ 	(WHEEL_SCROLLING_ENABLED_CHANGED_PROPERTY): Likewise.
+ 	(setComponentOrientation): Replaced constant with real string.
+ 	(setColumnHeader): Likewise.
+ 	(setHorizontalScrollBar): Likewise.
+ 	(setHorizontalScrollBarPolicy): Likewise.
+ 	(setRowHeader): Likewise.
+ 	(setVerticalScrollBar): Likewise.
+ 	(setVerticalScrollBarPolicy): Likewise.
+ 	(setWheelScrollingEnabled): Likewise.
+ 	(setViewport): Likewise.
+ 	(setViewportBorder): Likewise.
+ 	* javax/swing/JSlider.java
+ 	(INVERTED_CHANGED_PROPERTY): Removed.
+ 	(LABEL_TABLE_CHANGED_PROPERTY): Likewise.
+ 	(MAJOR_TICK_SPACING_CHANGED_PROPERTY): Likewise.
+ 	(MINOR_TICK_SPACING_CHANGED_PROPERTY): Likewise.
+ 	(MODEL_CHANGED_PROPERTY): Likewise.
+ 	(ORIENTATION_CHANGED_PROPERTY): Likewise.
+ 	(PAINT_LABELS_CHANGED_PROPERTY): Likewise.
+ 	(PAINT_TICKS_CHANGED_PROPERTY): Likewise.
+ 	(setModel): Replaced constant with real string.
+ 	(setOrientation): Likewise.
+ 	(setLabelTable): Likewise.
+ 	(setInverted): Likewise.
+ 	(setMajorTickSpacing): Likewise.
+ 	(setMinorTickSpacing): Likewise.
+ 	(setPaintTicks): Likewise.
+ 	(setPaintLabels): Likewise.
+ 	* javax/swing/JTabbedPane.java
+ 	(MODEL_CHANGED_PROPERTY): Removed.
+ 	(TAB_PLACEMENT_CHANGED_PROPERTY): Likewise.
+ 	(TAB_LAYOUT_POLICY_CHANGED_PROPERTY): Likewise.
+ 	(setModel): Replaced constant with real string.
+ 	(setTabPlacement): Likewise.
+ 	(setTabLayoutPolicy): Likewise.
+ 	* javax/swing/JToolBar.java
+ 	(ORIENTATION_CHANGED_PROPERTY): Removed.
+ 	(FLOATABLE_CHANGED_PROPERTY): Likewise.
+ 	(BORDER_PAINTED_CHANGED_PROPERTY): Likewise.
+ 	(MARGIN_CHANGED_PROPERTY): Likewise.
+ 	(ROLLOVER_CHANGED_PROPERTY): Likewise.
+ 	(setRollover): Replaced constant with real string.
+ 	(setMargin): Likewise.
+ 	(setBorderPainted): Likewise.
+ 	(setFloatable): Likewise.
+ 	(setOrientation): Likewise.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java
+ 	(PropertyChangeHandler.propertyChange): Likewise.
+ 	* javax/swing/plaf/basic/BasicComboPopup.java
+ 	(PropertyChangeHandler.propertyChange): Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java
+ 	(PropertyChangeHandler.propertyChange): Likewise.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	(PropertyChangeHandler.propertyChange): Likewise.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(PropertyChangeHandler.propertyChange): Likewise.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(PropertyChangeHandler.propertyChange): Likewise.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(PropertyChangeHandler.propertyChange): Likewise.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(PropertyChangeHandler.propertyChange): Likewise.
+ 
+ 2005-01-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultButtonModel.java
+ 	(changeState): Made private.
+ 	* javax/swing/DefaultDesktopManager.java
+ 	(setWasIcon): Fixed second argument to be java.lang.Boolean.
+ 	* javax/swing/JLayeredPane.java
+ 	(layerToRange): Made private.
+ 	(incrLayer): Likewise.
+ 	(decrLayer): Likewise.
+ 	* javax/swing/JTable.java
+ 	(dragEnabled): Likewise.
+ 	(preferredViewportSize): Renamed from preferredScrollableViewportSize.
+ 	* javax/swing/KeyStroke.java
+ 	(Keystroke): Made private.
+ 	* javax/swing/TransferHandler.java
+ 	(COMMAND_COPY): Likewise.
+ 	(COMMAND_CUT): Likewise.
+ 	(COMMAND_PASTE): Likewise.
+ 
+ 2005-01-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextField.java
+ 	(postActionEvent): Use text in field when actionCommand is null.
+ 	(getActionCommand): Removed.
+ 
+ 2005-01-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractSet.java: Removed.
+ 
+ 2005-01-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Window.java
+ 	(AccessibleWindow.getAccessibleStateSet): Fixed method name.
+ 	* java/awt/dnd/DnDConstants.java
+ 	(DnDConstants): New private constructor.
+ 
+ 2005-01-25  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/text/SimpleDateFormat.java:
+ 	(parse): Use offset to set ZONE_OFFSET
+ 	rather than the DST_OFFSET, so that
+ 	GMT offset timezones change the right
+ 	one.
+ 	
+ 2005-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultCellRenderer.java: Removed.
+ 
+ 2005-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(fireItemStateChanged): Made protected.
+ 	(fireActionPerformed): Likewise.
+ 	(fireStateChanged): Likewise.
+ 	* javax/swing/DefaultButtonModel.java
+ 	(fireItemStateChanged): Likewise.
+ 	(fireActionPerformed): Likewise.
+ 	(fireStateChanged): Likewise.
+ 	* javax/swing/JApplet.java
+ 	(JApplet): Removed.
+ 	(frameInit): Likewise.
+ 	(setRootPane): Made protected.
+ 	(createRootPane): Likewise.
+ 	* javax/swing/JComponent.java
+ 	(getClientProperty): Likewise.
+ 	(putClientProperty): Likewise.
+ 	* javax/swing/JEditorPane.java
+ 	(getContentType): Likewise.
+ 	(setContentType): Likewise.
+ 	* javax/swing/JFrame.java
+ 	(setRootPane): Likewise.
+ 	(createRootPane): Likewise.
+ 	* javax/swing/JInternalFrame.java
+ 	(getFocusCycleRootAncestor): Made final. Added @since tag.
+ 	(isFocusCycleRoot): Likewise.
+ 	(getWarningString): Made final.
+ 	* javax/swing/JScrollBar.java
+ 	(changeListener): Removed.
+ 	(changeEvent): Likewise.
+ 	(createChangeListener): Likewise.
+ 	(fireStateChanged): Likewise.
+ 	(addChangeListener): Likewise.
+ 	(removeChangeListener): Likewise.
+ 	(getChangeListeners): Likewise.
+ 	* javax/swing/JScrollPane.java
+ 	(createViewport): Made protected.
+ 	* javax/swing/JViewport.java
+ 	(addImpl): Likewise.
+ 	(setBorder): New method.
+ 	* javax/swing/JWindow.java
+ 	(setRootPane): Made protected.
+ 	(createRootPane): Likewise.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(installListeners): Likewise.
+ 	(uninstallListeners): Likewise.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	(incrementAnimationIndex): Likewise.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(createLayoutManager): Likewise.
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(firePropertyChange): Likewise.
+ 	* javax/swing/table/JTableHeader.java
+ 	(AccessibleJTableHeaderEntry.AccessibleJTableHeaderEntry):
+ 	New constructor.
+ 	* javax/swing/text/PlainDocument.java
+ 	(reindex): Made private.
+ 	* javax/swing/text/PlainView.java
+ 	(drawLine): Made protected.
+ 	(getTabSize): Likewise.
+ 	* javax/swing/text/View.java
+ 	(setSize): Removed.
+ 	(preferenceChanged): New method.
+ 	(getBreakWeight): Likewise.
+ 	(breakView): Likewise.
+ 	(getViewIndex): Likewise.
+ 
+ 2005-01-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JScrollPane.java
+ 	(ScrollBar): Made class protected.
+ 	* javax/swing/JSpinner.java
+ 	(JSpinner): Added @since tag.
+ 	(listenerList): Removed.
+ 	* javax/swing/JTable.java
+ 	(setValueAt): New method.
+ 	(getColumn): Likewise.
+ 	* javax/swing/JWindow.java
+ 	(rootPaneCheckingEnabled): Renamed from checking.
+ 
+ 2005-01-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.modelToView): Made it public and return a java.awt.Shape.
+ 	Handle null subview.
+ 	(uninstall): Set textComponent to null when its not possible used
+ 	anymore.
+ 	* javax/swing/text/View.java
+ 	(setParent): Use better argument name.
+ 	(getContainer): Get parent via getParent().
+ 	(getViewFactory): Likewise.
+ 	(getAttributes): Get element via getElement().
+ 	(getStartOffset): Likewise.
+ 	(getEndOffset): Likewise.
+ 	(getResizeWeight): New method.
+ 	(getMaximumSpan): Likewise.
+ 	(getMinimumSpan): Likewise.
+ 	(setSize): Likewise.
+ 	(getGraphics): Likewise.
+ 
+ 2005-01-24  Graydon Hoare  <graydon@redhat.com>
+ 	    Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/LayoutFocusTraversalPolicy.java,
+ 	javax/swing/SortingFocusTraversalPolicy.java:
+ 	New classes.
+ 
+ 2005-01-23  Sven de Marothy <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
+ 	Reverted to previous version, after a mistake in the previous commit.
+ 
+ 2005-01-23  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/util/Calendar.java: Invalidate ERA field on setting the YEAR.
+ 	* java/util/SimpleTimeZone.java: 
+ 	(getDaysInMonth): Reimplemented.
+ 	* java/util/GregorianCalendar.java:
+ 	(getLinearTime): Removed.
+ 	(isLeapYear(int,boolean)): Removed.
+ 	(before(), after()): Removed.
+ 	(computeTime): Reimplemented.
+ 
+ 2005-01-23  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/java/locale/LocaleInformation.java:
+ 	Extended localPatternChars string to match root.xml.
+ 	* gnu/java/locale/LocaleInformation_en.java:
+ 	Removed invalid localPatternChars string.
+ 	* gnu/java/locale/LocaleInformation_nl.java:
+ 	Likewise.
+ 	* java/text/DateFormat.java:
+ 	Documented pattern character offset constants and
+ 	added new ones.
+ 	(Field): Added new static fields for new pattern chars.
+ 	* java/text/SimpleDateFormat.java:
+ 	(CompiledField): Changed name of FieldSizePair class
+ 	to CompiledField after adding the character as an
+ 	attribute.  Changed fields to private and added
+ 	accessors to give encapsulation.
+ 	(CompiledField.CompiledField(int,int,char)): Extended
+ 	with character field.
+ 	(CompiledField.getField()): New accessor method.
+ 	(CompiledField.getSize()): New acceessor method.
+ 	(CompiledField.getCharacter()): New accessor method.
+ 	(CompiledField.toString()): Added primarily for debugging.
+ 	(standardChars): Now uses extended 24 character sequence.
+ 	(compileFormat(String)): Changed to use CompiledField.
+ 	(formatWithAttribute(java.util.Date, gnu.java.text.FormatBuffer,
+ 	java.text.FieldPosition)): Changed to use CompiledField.
+ 	New handler for RFC 822 timezones added.
+ 	
+ 2005-01-22  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/Checkbox.java:
+ 	(AccessibleAWTCheckbox()): Added public constructor
+ 	to call superclass.
+ 	* java/awt/Choice.java:
+ 	(AccessibleAWTChoice): Added class documentation.
+ 	(AccessibleAWTChoice()): Added public constructor
+ 	to call superclass.
+ 	(AccessibleAWTChoice.getAccessibleAction()): Documented.
+ 	(AccessibleAWTChoice.getAccessibleRole()): Documented,
+ 	and changed role to COMBO_BOX.
+ 	(AccessibleAWTChoice.getAccessibleActionCount()): Documented.
+ 	(AccessibleAWTChoice.getAccessibleActionDescription(int)): Documented.
+ 	(AccessibleAWTChoice.doAccessibleAction(int)): Documented.
+ 
+ 2005-01-21  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/SimpleDateFormat.java:
+ 	(parse(String, java.text.ParsePosition)):
+ 	Changed 'E' and 'M' cases to use both
+ 	short and long names.  Extended 'z'
+ 	case to also handle 'Z', and deal
+ 	with simple GMT offsets such as +0100.
+ 	(computeOffset(String)): New private method,
+ 	which converts a GMT offset specification,
+ 	such as GMT-0500 to a numeric offset in
+ 	milliseconds.
+ 	* java/util/TimeZone.java:
+ 	(timezones()): Added "CEST", the daylight
+ 	savings time version of "CET", or Central
+ 	European Time.
+ 	
+ 2005-01-21  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/util/Calendar.java: Reformatted.
+ 	* java/util/GregorianCalendar.java: Reformatted.
+ 	* java/util/SimpleTimeZon.java: Reformatted.
+ 
+ 2005-01-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DebugGraphics.java: Mostly implemented.
+ 
+ 2005-01-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(findFocusOwner): New method.
+ 
+ 2005-01-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(read): Added '\n' after each line.
+ 	* javax/swing/text/PlainView.java
+ 	(modelToView): Update metrics.
+ 	(drawLine): Use offsets from element.
+ 	(paint): Update metrics. Draw all lines.
+ 
+ 2005-01-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/print/PrinterJob.java
+ 	(pageDialog): Throws java.awt.HeadlessException.
+ 	(printDialog): Likewise.
+ 
+ 2005-01-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* doc/hacking.texinfo: Fixed one typo and the paragraph about time
+ 	formats.
+ 
+ 2005-01-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/Chromaticity.java
+ 	(serialVersionUID): Fixed value.
+ 	* javax/print/attribute/standard/Destination.java
+ 	(serialVersionUID): Fixed value.
+ 	* javax/print/attribute/standard/MediaPrintableArea.java,
+ 	javax/print/attribute/standard/MediaSize.java:
+ 	New files.
+ 
+ 2005-01-20  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Currency.java:
+ 	Added new countryMap which maps country codes
+ 	to international currency codes.  The cache
+ 	has been altered to map currency codes to
+ 	Currency objects.
+ 	(getInstance(java.util.Locale)): adds to both
+ 	caches and attempts initial lookup from country map
+ 	(getInstance(java.lang.String)): attempts to
+ 	use code -> currency map first
+ 	
+ 2005-01-20  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/Checkbox.java:
+ 	(AccessibleAWTCheckbox): Added class documentation
+ 	* java/awt/Scrollbar.java:
+ 	(AccessibleAWTScrollBar): typo corrected and docs added
+ 	(AccessibleAWTScrollBar.getAccessibleRole()): documented
+ 	(AccessibleAWTScrollBar.getAccessibleStateSet()): likewise
+ 	(AccessibleAWTScrollBar.getAccessibleValue()): likewise
+ 	(AccessibleAWTScrollBar.getCurrentAccessibleValue()): likewise
+ 	(AccessibleAWTScrollBar.setCurrentAccessibleValue(java.lang.Number)): likewise
+ 	(AccessibleAWTScrollBar.getMinimumAccessibleValue()): likewise
+ 	(AccessibleAWTScrollBar.getMaximumAccessibleValue()): likewise
+ 	(getAccessibleContext()): name of accessible class corrected
+ 
+ 2005-01-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Currency.java (Currency(Locale)): Add Locale to
+ 	IllegalArgumentException message.
+ 
+ 2005-01-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/BasicStroke.java (hashCode): Implement.
+ 	(equals): Document.
+ 
+ 2005-01-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java
+ 	(getValueAt): New method.
+ 	* javax/swing/table/JTableHeader.java
+ 	(columnAtPoint): New method.
+ 
+ 2005-01-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Currency.java (Currency(Locale)): Clarify
+ 	IllegalArgumentException message.
+ 
+ 2005-01-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/naming/directory/BasicAttributes.java (equals): Compare to any
+ 	Attributes and attribute order doesn't matter.
+ 	(BasicAttributesEnumeration.where): Initialize to zero.
+ 	(BasicAttributesEnumeration.nextElement): Update and compare where
+ 	appropriately (zero based).
+ 
+ 2005-01-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextField.java
+ 	(actions): New field.
+ 	(static): Initalize actions field.
+ 	(getActions): New method.
+ 
+ 2005-01-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gtkpeer.h (gdk_env): Fix prototype.
+ 
+ 2005-01-20  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(env_union): Use union to avoid type-punning warning.
+ 	
+ 2005-01-20  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/Checkbox.java:
+ 	(AccessibleAWTCheckbox): name capitalization corrected
+ 	and serialization UID added.
+ 	(AccessibleAWTCheckbox.itemStateChanged(java.awt.event.ItemEvent)):
+ 	documented.
+ 	(AccessibleAWTCheckbox.getAccessibleAction()): likewise
+ 	(AccessibleAWTCheckbox.getAccessibleValue()): likewise
+ 	(AccessibleAWTCheckbox.getAccessibleActionCount()): likewise
+ 	(AccessibleAWTCheckbox.getAccessibleActionDescription(int)): likewise
+ 	(AccessibleAWTCheckbox.doAccessibleAction(int)): likewise
+ 	(AccessibleAWTCheckbox.getCurrentAccessibleValue()): likewise
+ 	(AccessibleAWTCheckbox.setCurrentAccessibleValue(java.lang.Number)): likewise
+ 	(AccessibleAWTCheckbox.getMinimumAccessibleValue()): likewise
+ 	(AccessibleAWTCheckbox.getMaximumAccessibleValue()): likewise
+ 	(AccessibleAWTCheckbox.getAccessibleRole()): likewise
+ 	(AccessibleAWTCheckbox.getAccessibleStateSet()): implemented and
+ 	documented
+ 	(getAccessibleContext()): name of accessible class corrected
+ 	
+ 2005-01-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	Merge of java.lang.Appendable to HEAD from
+ 	the generics branch.
+ 	
+ 	2004-08-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Appendable.java: New file.
+ 
+ 	2004-09-26  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/lang/Appendable.java
+ 	Documented this class.
+ 	(append(CharSequence, int, int)): added.
+ 
+ 	2004-10-31  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	* java/lang/Appendable.java (append):
+ 	Throws IOException.
+ 
+ 2005-01-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(clone): New method.
+ 
+ 2005-01-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/check_jni_methods.sh: Call sed with LC_ALL=C.
+ 
+ 2005-01-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java:
+ 	Import statements reworked.
+ 	(imageCache): Made it of type java.util.HashMap.
+ 
+ 2005-01-19  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
+ 	Rewrite uses of extern variable to be function calls.
+ 	* native/jni/gtk-peer/gtkpeer.h (gdk_env): Change declaration to
+ 	function, from extern variable.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(gdk_env): Remove variable, add new function.
+ 	(java_vm): Add new variable.
+ 	(Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit): Initialize
+ 	java_vm rather than old gdk_env variable.
+ 
+ 2005-01-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #11618.
+ 	* java/io/ObjectInputStream.java (readClassDescriptor): Handle classes
+ 	without a super class and us ObjectStreamClass.lookupForClassObject().
+ 	(resolveClass): Check for primitive types.
+ 	(lookupClass): Return null when argument is null.
+ 
+ 2005-01-18 David Gilbert <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/DefaultListModel.java
+ 	(add): fire correct event,
+ 	(addElement): corrected interval indices in event,
+ 	(clear): corrected upper bound for interval, only fire event if
+ 	list is not empty,
+ 	(setSize): fire appropriate event.
+ 
+ 2005-01-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/Externalizable.java,
+ 	java/io/Serializable.java
+ 	(serialVersionUID): Removed.
+ 	* java/rmi/server/RemoteObject.java,
+ 	java/rmi/server/UID.java
+ 	(serialVersionUID): Made private.
+ 	* java/rmi/server/RemoteRef.java,
+ 	java/rmi/server/ServerRef.java
+ 	(serialVersionUID): Set proper value.
+ 	* java/security/interfaces/DSAPrivateKey.java,
+ 	java/security/interfaces/DSAPublicKey.java,
+ 	java/security/interfaces/RSAMultiPrimePrivateCrtKey.java,
+ 	java/security/interfaces/RSAPrivateCrtKey.java,
+ 	java/security/interfaces/RSAPrivateKey.java,
+ 	java/security/interfaces/RSAPublicKey.java,
+ 	javax/crypto/SecretKey.java
+ 	(serialVersionUID): Added.
+ 
+ 2005-01-18  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: Likewise.
+ 	* java/awt/EventQueue.java (getNextEvent):
+ 	Adjust event loop to switch to native mode after 100ms.
+ 	* javax/swing/Timer.java (drainEvents): Reuse Runnable.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose):
+ 	Wake up event thread.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue):
+ 	Adjust event loop to switch to java mode after 100ms.
+ 
+ 2005-01-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkToolkit.h: Regenerated.
+ 
+ 2005-01-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/MessageFormat.java (scanString): Changed how quoting
+ 	is handled.
+ 	(scanFormatElement): Likewise.
+ 
+ 2005-01-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* scripts/check_jni_methods.sh: Don't use mktemp for TMPFILEs.
+ 
+ 2005-01-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	PR libgcj/19444
+ 	* java/net/URI.java
+ 	(AUTHORITY_REGEXP): New regexp constant.
+ 	(AUTHORITY_USERINFO_GROUP): New constant.
+ 	(AUTHORITY_HOST_GROUP): Likewise.
+ 	(AUTHORITY_PORT_GROUP): Likewise.
+ 	(port): Changed default value to -1.
+ 	(parseURI): Parse authority part and initialize host,
+ 	port and userInfo.
+ 
+ 2005-01-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/Chromaticity.java,
+ 	javax/print/attribute/standard/Destination.java:
+ 	New files.
+ 
+ 2005-01-17  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* javax/imageio/metadata/IIOMetadataNode.java:
+ 	Implemented.
+ 	* javax/imageio/metadata/IIOAttr.java,
+ 	javax/imageio/metadata/IIONamedNodeMap.java,
+ 	javax/imageio/metadata/IIONodeList.java:
+ 	New files
+ 
+ 2005-01-17  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Currency.java:
+ 	(getInstance(String)): catch IllegalArgumentException
+ 	for locales without countries
+ 	
+ 2005-01-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Christian Thalinger <twisti@complang.tuwien.ac.at>
+ 	* java/lang/ClassLoader.java (getExtClassLoaderUrls): Add check for
+ 	null returned from getFiles().
+ 
+ 2005-01-15  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/SimpleDateFormat.java:
+ 	(getDateFormatSymbols()): return a copy
+ 	(setDateFormatSymbols(java.text.DateFormatSymbols)):
+ 	throw exception on null input
+ 	(clone()): implemented to clone internal fields
+ 
+ 2005-01-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Martin Platter <motse@complang.tuwien.ac.at>
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile):
+ 	Correct method signature of gtkSetFilename.
+ 
+ 2005-01-14  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/util/GregorianCalendar.java
+ 	(GregorianCalendar): Update fields in the constructor
+ 
+ 2005-01-14  Arnaud Vandyck  <avdyk@gnu.org>
+ 
+ 	* javax/swing/text/StringContent.java: New file.
+ 
+ 2005-01-13  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/SimpleDateFormat.java:
+ 	(parse): extend try{} block so all illegal arguments
+ 	are caught and returned as null
+ 
+ 2005-01-13  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/text/SimpleDateFormat.java
+ 	(parse): comparison should be case-insensitive, ignore null strings.
+ 
+ 2005-01-13  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* vm/reference/java/nio/channels/VMChannels.java: Class shouldn't
+ 	be public.
+ 	(newInputStream,newOutputStream): No need to be public.
+ 
+ 2005-01-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/check_jni_methods.sh: Don't use GNU sed specific features.
+ 
+ 2005-01-12  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/DecimalFormatSymbols.java
+ 	(DecimalFormatSymbols(java.util.Locale)): defaults
+ 	changed to "?" and "XXX" to match a nuance of Sun's
+ 	impl. along with documentation
+ 
+ 2005-01-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/x509/X509Certificate.java
+ 	(parse): Handle val == null case.
+ 
+ 2005-01-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/Channels.java
+ 	(newInputStream(ReadableByteChannel)):
+ 	Call VMChannels.newInputStream(ReadableByteChannel).
+ 	(newOutputStream(WritableByteChannel):
+ 	Call VMChannels.newOutputStream(WritableByteChannel).
+ 	(newInputStream(FileChannelImpl)): Removed.
+ 	(newOutputStream(FileChannelImpl)): Likewise.
+ 	* vm/reference/java/nio/channels/VMChannels.java: Nw file.
+ 	* native/jni/java-nio/Makefile.am:
+ 	* native/jni/java-nio/java_nio_channels_Channels.c,
+ 	include/java_nio_channels_Channels.h: Removed.
+ 	* include/Makefile.am: Don't generate java_nio_channels_Channels.h.
+ 	Removed java_nio_channels_Channels.c.
+ 
+ 2005-01-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainSocketImpl.java
+ 	(shutdownInput): Made native. Throws IOException. Added Javadoc.
+ 	(shutdownOutput): Likewise.
+ 	* include/gnu_java_net_PlainSocketImpl.h: Regenerated.
+ 	* native/jni/java-net/gnu_java_net_PlainSocketImpl.c
+ 	(Java_gnu_java_net_PlainSocketImpl_shutdownInput): New method.
+ 	(Java_gnu_java_net_PlainSocketImpl_shutdownOutput): Likewise.
+ 	* native/jni/java-net/javanet.c
+ 	(_javanet_shutdownInput): Likewise.
+ 	(_javanet_shutdownOutput): Likewise.
+ 	* native/jni/java-net/javanet.h
+ 	(_javanet_shutdownInput): Likewise.
+ 	(_javanet_shutdownOutput): Likewise.
+ 
+ 2005-01-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible):
+ 	Removed setting of gdk_env.
+ 
+ 2005-01-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* acinclude.m4 (CLASSPATH_WITH_GJDOC): Test for gjdoc, not jay.
+ 
+ 2005-01-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c
+ 	(mouseWheel): Call XFlush.
+ 	(keyPress): Likewise.
+ 	(keyRelease): Likewise.
+ 
+ 2005-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/UIDefaults.java (UIDefaults):
+ 	Fixed typo in javadoc (Thanks to Thomas Zander for reporting)
+ 	Fixed HTML entity and removed a redundant comma.
+ 
+ 2005-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Check for gdk-pixbuf-2.0.
+ 
+ 2005-01-11  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java
+ 	(registerImageIOSpis): New method.
+ 	* gnu/java/awt/image/ImageDecoder.java
+ 	(imageDecoder): New constructor using InputStream
+ 	(startProduction): Handle existing InputStream.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(findSimpleIntegerArray): Make public and static.
+ 	(updateBufferedImage): Set each pixel, in a loop.
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
+ 	Implement ImageIO SPI classes.
+ 	(createBufferedImage): Rewrite in terms of SPI classes.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(registerImageIOSpis): New method.
+ 	* java/lang/reflect/natMethod.cc
+ 	(_Jv_CallAnyMethodA): Borrow a patch from aph, applied to trunk,
+ 	which lets JNI call interface methods properly.
+ 	* javax/imageio/ImageIO.java
+ 	(WriterFormatFilter.filter): Fix copy-and-paste typos.
+ 	(WriterMIMETypeFilter.filter): Likewise.
+ 	(ImageReaderIterator): Pass extension argument through to SPI.
+ 	(getReadersByFilter): Likewise.
+ 	(getWritersByFilter): Likewise.
+ 	(getImageReadersByFormatName): Likewise.
+ 	(getImageReadersByMIMEType): Likewise.
+ 	(getImageReadersBySuffix): Likewise.
+ 	(getImageWritersByFormatName): Likewise.
+ 	(getImageWritersByMIMEType): Likewise.
+ 	(getImageWritersBySuffix): Likewise.
+ 	(read): Implement.
+ 	(write): Implement.
+ 	* javax/imageio/ImageReader.java
+ 	(progressListeners): Initialize.
+ 	(setInput): Implement.
+ 	* javax/imageio/ImageWriter.java
+ 	(progressListeners): Initialize.
+ 	(warningListeners): Likewise.
+ 	(warningLocales): Likewise.
+ 	(setOutput): Test "isInstance" rather than class equality.
+ 	* javax/imageio/spi/IIORegistry.java
+ 	(static): Add reader and writer SPIs.
+ 	(IIORegistry): Call ClasspathToolkit.registerImageIOSpis.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	(query_formats): New function.
+ 	(save_to_stream): Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage): Likewise.
+ 
+ 2005-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: Regenerated.
+ 
+ 2005-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java (URL): Handle specs like
+ 	"/redir?http://domain2.com/index.html" which start with a slash.
+ 
+ 2005-01-11  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* scripts/check_jni_methods.sh: Portable to the OpenBSD
+ 	"mktemp", as used in Red Hat Linux 7.3.
+ 	Check whether "mktemp" fails; abort if it does.
+ 	
+ 2005-01-11  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/DecimalFormatSymbols.java
+ 	(DecimalFormatSymbols(java.util.Locale)): check for
+ 	errors in setting the currency and default to null and
+ 	empty strings if unavailable
+ 	(setCurrency(Currency)): moved assignment to ensure
+ 	currency is not accidentally set to null
+ 	* java/util/Currency.java
+ 	(Currency(java.util.Locale)): throw IllegalArgumentException
+ 	for empty country string and NullPointerException for null
+ 	locale or country
+ 
+ 2005-01-11  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java
+ 	(nativeQueueEmpty)
+ 	(wakeNativeQueue)
+ 	(iterateNativeQueue): New methods.
+ 	* gnu/java/awt/peer/gtk/GtkMainThread.java: Remove.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(gtkInit): Absorb from defunct GtkMainThread class.
+ 	(static): Run gtkInit in static startup block.
+ 	(GtkToolkit): Remove construction of GtkMainThread and queue.
+ 	(getSystemEventQueueImpl): Construct queue when requested.
+ 	(nativeQueueEmpty)
+ 	(wakeNativeQueue)
+ 	(iterateNativeQueue): New methods.
+ 	* java/awt/Component.java (removeNotify): Remove race.
+ 	* java/awt/EventDispatchThread.java
+ 	(EventDispatchThread): Don't start on construction.
+ 	(run): Remove isInterrupted check.
+ 	* java/awt/EventQueue.java (shutdown): New flag.
+ 	(isShutdown): New method checking J2SE shutdown condition.
+ 	(setShutdown): New method.
+ 	(getNextEvent): Restructure to use ClasspathToolkit.
+ 	(postEvent): Activate new thread on posting, wake thread on
+ 	post of possible shutdown condition event.
+ 	* java/awt/Frame.java
+ 	(Frame): Call noteFrame in all constructors.
+ 	(fireDummyEvent): New helper method.
+ 	(addNotify): Fire a dummy event to wake up queue.
+ 	(removeNotify): Fire a dummy event to wake up queue.
+ 	(noteFrame): New method.
+ 	(weakFrames): New static field.
+ 	(getFrames): Implement.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c:
+ 	Remove.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c:
+ 	Move everything from GtkMainThread into this file
+ 	(Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue)
+ 	(Java_gnu_java_awt_peer_gtk_GtkToolkit_wakeNativeQueue)
+ 	(Java_gnu_java_awt_peer_gtk_GtkToolkit_nativeQueueEmpty):
+ 	New functions to implement single-threaded queue semantics.
+ 
+ 2005-01-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Replace direct
+ 	references to event queue q with method call q().
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkGenericPeer.java: Likewise.
+ 	(q): New method.
+ 
+ 2005-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/Makefile.am:
+ 	Removed gnu_java_awt_peer_gtk_GtkMainThread.c.
+ 	* include/Makefile.am:
+ 	Don't generate gnu_java_awt_peer_gtk_GtkMainThread.h
+ 	* include/gnu_java_awt_peer_gtk_GtkMainThread.h: Removed.
+ 
+ 2005-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(deinstall): Removed.
+ 	(install): Likewise.
+ 
+ 2005-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/UIDefaults.java (put): Handle value of null.
+ 
+ 2005-01-11  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPConnection.java: Use correct form of
+ 	Host header when using a non-default port number.
+ 
+ 2005-01-11  Chris Burdess  <dog@gnu.org>
+ 
+ 	* javax/net/ssl/HttpsURLConnection.java: Do not request SSLv3
+ 	provider during class initialization.
+ 
+ 2005-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Robot.java,
+ 	java/awt/Scrollbar.java,
+ 	java/awt/print/PrinterJob.java,
+ 	javax/swing/JTable.java,
+ 	javax/swing/text/AbstractDocument.java:
+ 	Reworked import statements.
+ 
+ 2005-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/XMLDecoder.java: Reworked imports, fixed class javadoc.
+ 	* java/io/File.java,
+ 	java/lang/System.java,
+ 	java/net/Inet4Address.java,
+ 	java/util/Currency.java,
+ 	java/util/ResourceBundle.java: Reworked imports.
+ 
+ 2005-01-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/BufferedInputStream.java: Fixed indentation.
+ 
+ 2005-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(read): Implemented.
+ 	(write): Likewise.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(page): Renamed from page_url. Made private.
+ 	(editorKit): Renamed from kit. Made private.
+ 	(ctype): Removed.
+ 	(JEditorPane): All constructors reimplemented.
+ 	(getContentType): Use content type from editor kit.
+ 	(getEditorKit): Return editorKit.
+ 	(getEditorKitForContentType):Likewise.
+ 	(getPage): Return page.
+ 	(setContentType): Reimplemented.
+ 	(setEditorKit): Likewise.
+ 	(setEditorKitForContentType): Removed wrong implementation.
+ 	(setPage): Implemented.
+ 
+ 2005-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/check_jni_methods.sh: Dont ignore
+ 	Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromData.
+ 
+ 2005-01-10  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
+ 	(nativeSetIconImageFromData): Re-add native implementation.
+ 
+ 2005-01-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/security/AlgorithmParameterGenerator.java (getInstance):
+ 	Mention provider when throwing NoSuchProviderException.
+ 	* java/security/AlgorithmParameters.java (getInstance): Likewise.
+ 	* java/security/KeyFactory.java (getInstance): Likewise.
+ 	* java/security/KeyStore.java (getInstance): Likewise.
+ 	* java/security/SecureRandom.java (getInstance): Likewise.
+ 	* java/security/cert/CertificateFactory.java (getInstance): Likewise.
+ 
+ 2005-01-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-io/java_io_VMFile.c
+ 	(Java_java_io_VMFile_create): Call JCL_free_cstring() when done with
+ 	string.
+ 	* native/jni/java-io/javaio.c
+ 	(_javaio_open_read): Likewise.
+ 	(_javaio_open_readwrite): Likewise.
+ 	* native/jni/java-lang/java_lang_VMSystem.c
+ 	(Java_java_lang_VMSystem_getenv): Likewise.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_open): Likewise.
+ 
+ 2005-01-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Update version to 0.13+cvs.
+ 
+ 2005-01-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* acinclude.m4 (CLASSPATH_WITH_GJDOC): Renamed from
+ 	CLASSPATH_ENABLE_GJDOC. Can now take argument to use as gjdoc program.
+ 	Doesn't depend on xml tools.
+ 	* configure.ac: Use CLASSPATH_WITH_GJDOC.
+ 	* INSTALL: Mention --with-gjdoc option.
+ 	* NEWS: Add --with-gjdoc addition.
+ 	* doc/api/Makefile.am (EXTRA_DIST): Removed.
+ 	(sourcepath): New variable.
+ 	(htmllist): Removed.
+ 	(core): Removed.
+ 	(packages): Removed.
+ 	(date): Removed.
+ 	(clean): Also remove create_html file.
+ 	(create_html): Rewritten.
+ 	* doc/api/classpath-copyright.xml: Removed.
+ 
+ 2005-01-09  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt doc/www.gnu.org/announce/20050107.wml 
+ 	doc/www.gnu.org/downloads/downloads.wml: classpath 0.13 release news
+ 
+ 2005-01-08  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/nio/charset/Charset.java (providers):
+ 	New method to make an array of CharsetProviders defined in
+ 	META-INF/services/java.nio.charset.spi.CharsetProvider.
+ 	(charsetForName, availableCharsets): Use the
+ 	new method providers().
+ 
+ 2005-01-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/SimpleTimeZone.java (checkRule):
+ 	Throw IllegalArgumentException on invalid month values.
+ 
+ 2005-01-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/HTTPConnection.java
+ 	(newRequest): Use "/" as path if no path given in URL.
+ 
+ 2005-01-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* resource/Makefile.am: Install classpath.security file.
+ 
+ 2005-01-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* resource/java/util/iso639_fr.properties,
+ 	resource/java/util/iso3166.properties,
+ 	resource/java/util/iso3166_de.properties,
+ 	resource/java/util/iso639-a3.properties,
+ 	resource/java/util/iso639_de.properties,
+ 	resource/java/util/iso639.properties,
+ 	resource/java/util/iso639-a2-old.properties,
+ 	resource/java/util/iso3166-a3.properties,
+ 	resource/java/util/iso639_ga.properties: Removed.
+ 
+ 2005-01-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Package.java (getPackages): Use VMClassLoader when
+ 	appropriate.
+ 	(getPackage): Likewise.
+ 
+ 2005-01-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java (address): New field.
+ 	* java/nio/DirectByteBufferImpl.java (address): Removed.
+ 	* java/nio/MappedByteBufferImpl.java (address): Likewise..
+ 	* java/nio/CharViewBufferImpl.java (CharViewBufferImpl): Explicitely
+ 	initialize Buffer.address if needed.
+ 	* java/nio/DoubleViewBufferImpl.java (DoubleViewBufferImpl): Likewise.
+ 	* java/nio/FloatViewBufferImpl.java (FloatViewBufferImpl): Likewise.
+ 	* java/nio/IntViewBufferImpl.java (IntViewBufferImpl): Likewise.
+ 	* java/nio/LongViewBufferImpl.java (LongViewBufferImpl): Likewise.
+ 	* java/nio/ShortViewBufferImpl.java (ShortViewBufferImpl): Likewise.
+ 
+ 2005-01-07  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(columnAtPoint): New Method. Implemented.
+ 	(rowAtPoint): Likewise.
+ 	(countSelections): Fixed few small count errors.
+ 	(getSelections): Likewise.
+ 	(setSelectionMode): Set selection mode for column
+ 	selection model in addition to row selection model.
+ 	* javax/swing/plaf/basic/BasicTableUI.java:
+ 	(getRowForPoint): Removed. Replaced by
+ 	JTable.rowAtPoint().
+ 	(getColForPoint): Removed. Replaced by
+ 	JTable.columnAtPoint().
+ 	(updateSelection): Updated to call JTable.columnAtPoint
+ 	and JTable.rowAtPoint.
+ 	* javax/swing/table/DefaultTableColumnModel.java:
+ 	(getSelectedColumns): Implemented.
+ 	(getSelectedColumnCount): Implemented.
+ 
+ 2005-01-07  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* javax/swing/table/DefaultTableModel.java
+ 	(DefaultTableModel()): Added Javadocs.
+ 	(DefaultTableModel(int, int)): Fixed implementation.
+ 	(DefaultTableModel(Vector, int)): Throw IllegalArgumentException
+ 	for negative rowCount.
+ 	(DefaultTableModel(Object[], int)): Added Javadocs.
+ 	(DefaultTableModel(Vector, Vector)): Likewise.
+ 	(DefaultTableModel(Object[][], Object[])): Likewise.
+ 	(getDataVector): Likewise.
+ 	(setDataVector(Vector, Vector)): Likewise.
+ 	(setDataVector(Object[][], Object[])): Likewise.
+ 	(newDataAvailable): Likewise.
+ 	(newRowsAdded): Likewise.
+ 	(rowsRemoved): Likewise.
+ 	(setColumnIdentifiers(Vector)): Allow for null argument.
+ 	(setColumnIdentifiers(Object[])): Added Javadocs.
+ 	(setNumRows): Likewise.
+ 	(setRowCount): Adds new rows if necessary, and sends more specific
+ 	TableModelEvent.
+ 	(setColumnCount): Allow for null columnIdentifiers.
+ 	(addColumn(Object)): Added Javadocs.
+ 	(addColumn(Object, Vector)): Handle null columnData.
+ 	(addColumn(Object, Object[])): Handle columnData with more or less
+ 	entries than rows in the table.
+ 	(addRow(Vector)): Fire appropriate event.
+ 	(addRow(Object[])): Added Javadocs.
+ 	(insertRow(int, Vector)): Fire appropriate event.
+ 	(insertRow(int, Object[])): Added Javadocs.
+ 	(moveRow): Reimplemented.
+ 	(removeRow(int)): Fire appropriate event.
+ 	(getColumnCount): Allow for null columnIdentifiers.
+ 	(getColumnName): Now returns empty string when column index is too
+ 	large.
+ 	(isCellEditable): Added Javadocs.
+ 	(getValueAt): Likewise.
+ 	(setValueAt): Fire more specific event.
+ 	(convertToVector): Added Javadocs.
+ 	* javax/swing/table/TableModel.java
+ 	Added Javadocs.
+ 
+ 2005-01-07  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* NEWS: Document changes.
+ 	* java/lang/Class.java (newInstance(), getClassLoader(),
+ 	forName(String), forName(String, boolean, ClassLoader)):
+ 	Use new VMStackWalker methods.
+ 	* java/lang/ClassLoader.java (getParent(), getSystemClassLoader()):
+ 	Likewise.
+ 	* java/lang/Package.java (getPackages()): Likewise.
+ 	* java/lang/SecurityManager.java (getClassContext()): Likewise.
+ 	* java/util/ResourceBundle.java (getBundle()): Likewise.
+ 	* java/lang/Runtime.java (load(), loadLibrary()): Load the native
+ 	library using the calling class' class loader.
+ 	* java/lang/System.java (load(), loadLibrary()): Likewise.
+ 	(currentClassLoader()): implement via currentLoadedClass().
+ 	* vm/reference/gnu/classpath/VMStackWalker.java: New class.
+ 	* vm/reference/java/lang/VMRuntime.java (nativeLoad()):
+ 	Add a ClassLoader parameter.
+ 	* vm/reference/java/lang/VMSecurityManager.java: Removed.
+ 
+ 2005-01-07  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/SimpleTimeZone.java:
+ 	(getOffset): offset end date with daylight savings
+ 
+ 2005-01-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (findClass): Fixed documentation.
+ 
+ 2005-01-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Update version to 0.13.
+ 	* NEWS: Add news about 0.13.
+ 	* INSTALL: Mention new dependencies and configure flags.
+ 
+ 2005-01-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Add explicit X and libXtst tests when gtk+ peers are
+ 	enabled.
+ 
+ 2005-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/TimeZone.java
+ 	(setID): Throw NullPointerException if needed.
+ 
+ 2005-01-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/gen-classlist.sh.in: Don't split locales in classes.locale1
+ 	and classes.locale2.
+ 	* lib/Makefile.am (JAVAC): Compile only classes.locale.
+ 	(CLEANFILES): Remove classes.locale1 and classes.locale2,
+ 	add classes.locale.
+ 
+ 2005-01-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/zip/ZipEntry.java (setCompressedSize): Allow any
+ 	argument.
+ 	(compressedSize): Now 'long'.  Default to -1.
+ 	(getCompressedSize): Rewrote.
+ 
+ 2005-01-05  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/util/IdentityHashMap.java (put): Replace mistaken use
+ 	of "<<" by "*".
+ 
+ 2005-01-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_mn_MN.java:
+ 	New file.
+ 	* gnu/java/locale/LocaleInformation_aa.java,
+ 	gnu/java/locale/LocaleInformation_aa_DJ.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER_SAAHO.java,
+ 	gnu/java/locale/LocaleInformation_aa_ET.java,
+ 	gnu/java/locale/LocaleInformation_af.java,
+ 	gnu/java/locale/LocaleInformation_af_ZA.java,
+ 	gnu/java/locale/LocaleInformation_am.java,
+ 	gnu/java/locale/LocaleInformation_am_ET.java,
+ 	gnu/java/locale/LocaleInformation_ar.java,
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java,
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_as.java,
+ 	gnu/java/locale/LocaleInformation_as_IN.java,
+ 	gnu/java/locale/LocaleInformation_az.java,
+ 	gnu/java/locale/LocaleInformation_be.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_bg.java,
+ 	gnu/java/locale/LocaleInformation_bg_BG.java,
+ 	gnu/java/locale/LocaleInformation_bn.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ca.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cy.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_de_LI.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_dv.java,
+ 	gnu/java/locale/LocaleInformation_dv_MV.java,
+ 	gnu/java/locale/LocaleInformation_dz.java,
+ 	gnu/java/locale/LocaleInformation_dz_BT.java,
+ 	gnu/java/locale/LocaleInformation_el.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_en_AS.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BE.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_BZ.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_GU.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en_MH.java,
+ 	gnu/java/locale/LocaleInformation_en_MP.java,
+ 	gnu/java/locale/LocaleInformation_en_MT.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_PK.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_UM.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_US_POSIX.java,
+ 	gnu/java/locale/LocaleInformation_en_VI.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_eo.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_eu.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_fa.java,
+ 	gnu/java/locale/LocaleInformation_fa_AF.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fo.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gl.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gu.java,
+ 	gnu/java/locale/LocaleInformation_gu_IN.java,
+ 	gnu/java/locale/LocaleInformation_gv.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_he.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_hi.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hr.java,
+ 	gnu/java/locale/LocaleInformation_hu.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_hy.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM_REVISED.java,
+ 	gnu/java/locale/LocaleInformation_id.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_is.java,
+ 	gnu/java/locale/LocaleInformation_is_IS.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_iu.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation_ka.java,
+ 	gnu/java/locale/LocaleInformation_kk.java,
+ 	gnu/java/locale/LocaleInformation_kk_KZ.java,
+ 	gnu/java/locale/LocaleInformation_kl.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_km.java,
+ 	gnu/java/locale/LocaleInformation_km_KH.java,
+ 	gnu/java/locale/LocaleInformation_kn.java,
+ 	gnu/java/locale/LocaleInformation_kn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_ky.java,
+ 	gnu/java/locale/LocaleInformation_lo.java,
+ 	gnu/java/locale/LocaleInformation_lo_LA.java,
+ 	gnu/java/locale/LocaleInformation_lt.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mk.java,
+ 	gnu/java/locale/LocaleInformation_ml.java,
+ 	gnu/java/locale/LocaleInformation_ml_IN.java,
+ 	gnu/java/locale/LocaleInformation_mn.java,
+ 	gnu/java/locale/LocaleInformation_mr.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_ms.java,
+ 	gnu/java/locale/LocaleInformation_ms_BN.java,
+ 	gnu/java/locale/LocaleInformation_ms_MY.java,
+ 	gnu/java/locale/LocaleInformation_mt.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nb_NO.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java,
+ 	gnu/java/locale/LocaleInformation_nn.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_om.java,
+ 	gnu/java/locale/LocaleInformation_om_ET.java,
+ 	gnu/java/locale/LocaleInformation_om_KE.java,
+ 	gnu/java/locale/LocaleInformation_or.java,
+ 	gnu/java/locale/LocaleInformation_or_IN.java,
+ 	gnu/java/locale/LocaleInformation_pa.java,
+ 	gnu/java/locale/LocaleInformation_pa_IN.java,
+ 	gnu/java/locale/LocaleInformation_pl.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_ps.java,
+ 	gnu/java/locale/LocaleInformation_ps_AF.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_sa.java,
+ 	gnu/java/locale/LocaleInformation_sa_IN.java,
+ 	gnu/java/locale/LocaleInformation_sk.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sl.java,
+ 	gnu/java/locale/LocaleInformation_so.java,
+ 	gnu/java/locale/LocaleInformation_so_DJ.java,
+ 	gnu/java/locale/LocaleInformation_so_ET.java,
+ 	gnu/java/locale/LocaleInformation_so_KE.java,
+ 	gnu/java/locale/LocaleInformation_so_SO.java,
+ 	gnu/java/locale/LocaleInformation_sq.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sr.java,
+ 	gnu/java/locale/LocaleInformation_sr_Latn.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_sw.java,
+ 	gnu/java/locale/LocaleInformation_sw_KE.java,
+ 	gnu/java/locale/LocaleInformation_sw_TZ.java,
+ 	gnu/java/locale/LocaleInformation_ta.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_te.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_th.java,
+ 	gnu/java/locale/LocaleInformation_th_TH.java,
+ 	gnu/java/locale/LocaleInformation_ti.java,
+ 	gnu/java/locale/LocaleInformation_ti_ER.java,
+ 	gnu/java/locale/LocaleInformation_ti_ET.java,
+ 	gnu/java/locale/LocaleInformation_tr.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_tt.java,
+ 	gnu/java/locale/LocaleInformation_tt_RU.java,
+ 	gnu/java/locale/LocaleInformation_uk.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java,
+ 	gnu/java/locale/LocaleInformation_ur.java,
+ 	gnu/java/locale/LocaleInformation_uz.java,
+ 	gnu/java/locale/LocaleInformation_uz_AF.java,
+ 	gnu/java/locale/LocaleInformation_vi.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_CN_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_HK_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_MO_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_TW_Hant.java:
+ 	Regenerated.
+ 
+ 2005-01-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* vm/reference/java/lang/VMProcess.java (VMProcess): Constructor
+ 	now package-private.
+ 	(processThread, workList, reapedPid, reapedExitValue, state, cmd,
+ 	env, dir, exception, pid, stdin, stdout, stderr, exitValue): Now
+ 	package-private.
+ 	(nativeSpawn, nativeReap): Likewise.
+ 	* vm/reference/java/lang/VMThread.java (currentThread): Reordered
+ 	modifiers.
+ 	* vm/reference/java/security/VMAccessController.java
+ 	(DEFAULT_CONTEXT): Reordered modifiers.
+ 
+ 	* gnu/java/nio/SelectorImpl.java: Removed unused import.
+ 	* gnu/java/security/der/DERWriter.java: Removed unused import.
+ 	* gnu/java/net/protocol/http/Connection.java: Removed unused
+ 	import.
+ 	* gnu/java/nio/PipeImpl.java (read): Reordered modifiers.  Fixed
+ 	indentation.
+ 	(write): Likewise.
+ 	* gnu/java/rmi/server/ConnectionRunnerPool.java
+ 	(getConnectionRunner): Reordered modifiers.
+ 	* gnu/java/text/FormatCharacterIterator.java (debug): Removed
+ 	useless `final'.
+ 	(dumpTable): Likewise.
+ 	* gnu/java/net/PlainDatagramSocketImpl.java (bind): Reordered
+ 	modifiers.
+ 	(create, setOption, getOption, close, join, leave): Likewise.
+ 	* gnu/java/net/PlainSocketImpl.java (create): Reordered
+ 	modifiers.
+ 	(bind, listen, accept): Likewise.
+ 
+ 2005-01-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.am (EXTRA_DIST): Added ChangeLog-2004.
+ 
+ 2005-01-04  Robert Schuster <thebohemian@gmx.net>
+ 
+        * gnu/java/beans/DummyAppletStub.java: Add dummy implementation
+        of AppletStub for java.beans.Beans.instantiate.
+        * gnu/java/beans/DummyAppletContext.java: Add dummy implementation
+        of AppletContext.
+        * java/beans/Beans: Added 1.4 functionality, fixed user documentation
+        to be conformant with Javadoc guidelines.
+        (instantiate): Added two more overloaded variants, reworked user
+        documentation, fixed exception behavior, fixed behavior when
+        deserializing null.
+ 
+ 2005-01-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(getControlTextFont): New method.
+ 	(getMenuTextFont): Likewise.
+ 	(getSubTextFont): Likewise.
+ 	(getSystemTextFont): Likewise.
+ 	(getUserTextFont): Likewise.
+ 	(getWindowTitleFont): Likewise.
+ 
+ 2005-01-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(documentFilter): New field.
+ 	(getDocumentFilter): New method.
+ 	(setDocumentFilter): Likewise.
+ 	(dump): Likewise.
+ 
+ 2005-01-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTree.java
+ 	(DynamicUtilTreeNode.hasChildren): Clarify javadoc.
+ 
+ 2005-01-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java (createRobot): New method.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
+ 	(getDefaultScreenDevice): Implement.
+ 	* gnu/java/awt/peer/gtk/GdkRobotPeer.java: New file.
+ 	* gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createRobot): New method.
+ 	* java/awt/Robot.java: Implement.
+ 	* java/awt/peer/RobotPeer.java: Rename parameters.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: New file.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(awt_keycode_to_keysym): Make non-static.
+ 	* native/jni/gtk-peer/gtkpeer.h (AWT_BUTTON1_MASK, AWT_BUTTON2_MASK,
+ 	AWT_BUTTON3_MASK): Declare constants.
+ 	(awt_keycode_to_keysym): Declare.
+ 
+ 2005-01-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Check for X11 stuff when GTK peer is enabled.
+ 	* include/Makefile.am: Generate gnu_java_awt_peer_gtk_GdkRobotPeer.h.
+ 	* include/gnu_java_awt_peer_gtk_GdkRobotPeer.h: New files.
+ 	* native/jni/gtk-peer/Makefile.am: Link libXtst.
+ 	Added gnu_java_awt_peer_gtk_GdkRobotPeer.c to the build.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c:
+ 	Added "__attribute__((__unused__))" all over.
+ 
+ 2005-01-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java: Made all hexadecimal numbers lowercase.
+ 	Fixed typos in javadocs.
+ 	(isSiteLocalAddress): Fixed handling of byte values.
+ 	(isMCLinkLocal): Likewise.
+ 	* java/net/Inet4Address.java
+ 	(isMulticastAddress): Call super method.
+ 	(isLoopbackAddress): Likewise.
+ 	(isAnyLocalAddress): Likewise.
+ 	(isLinkLocalAddress): Likewise.
+ 	(isSiteLocalAddress): Likewise.
+ 	(isMCGlobal): Likewise.
+ 	(isMCNodeLocal): Likewise.
+ 	(isMCLinkLocal): Likewise.
+ 	(isMCSiteLocal): Likewise.
+ 	(isMCOrgLocal): Likewise.
+ 	(getHostAddress): Likewise.
+ 
+ 2005-01-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/beans/decoder/DummyHandler.java: Add return statements for
+ 	failing methods.
+ 	* gnu/java/beans/decoder/DummyContext.java: Likewise.
+ 
+ 2005-01-02  Robert Schuster  <theBohemian@gmx.net>
+ 
+ 	* gnu/java/beans/decoder/AbstractContext.java,
+ 	gnu/java/beans/decoder/AbstractCreatableContext.java,
+ 	gnu/java/beans/decoder/AbstractElementHandler.java,
+ 	gnu/java/beans/decoder/AbstractObjectContext.java,
+ 	gnu/java/beans/decoder/ArrayContext.java,
+ 	gnu/java/beans/decoder/ArrayHandler.java,
+ 	gnu/java/beans/decoder/BooleanHandler.java,
+ 	gnu/java/beans/decoder/ByteHandler.java,
+ 	gnu/java/beans/decoder/CharHandler.java,
+ 	gnu/java/beans/decoder/ClassHandler.java,
+ 	gnu/java/beans/decoder/ConstructorContext.java,
+ 	gnu/java/beans/decoder/Context.java,
+ 	gnu/java/beans/decoder/DecoderContext.java,
+ 	gnu/java/beans/decoder/DefaultExceptionListener.java,
+ 	gnu/java/beans/decoder/DoubleHandler.java,
+ 	gnu/java/beans/decoder/DummyContext.java,
+ 	gnu/java/beans/decoder/DummyHandler.java,
+ 	gnu/java/beans/decoder/ElementHandler.java,
+ 	gnu/java/beans/decoder/FloatHandler.java,
+ 	gnu/java/beans/decoder/GrowableArrayContext.java,
+ 	gnu/java/beans/decoder/IndexContext.java,
+ 	gnu/java/beans/decoder/IntHandler.java,
+ 	gnu/java/beans/decoder/JavaHandler.java,
+ 	gnu/java/beans/decoder/LongHandler.java,
+ 	gnu/java/beans/decoder/MethodContext.java,
+ 	gnu/java/beans/decoder/MethodFinder.java,
+ 	gnu/java/beans/decoder/NullHandler.java,
+ 	gnu/java/beans/decoder/ObjectContext.java,
+ 	gnu/java/beans/decoder/ObjectHandler.java,
+ 	gnu/java/beans/decoder/PersistenceParser.java,
+ 	gnu/java/beans/decoder/PropertyContext.java,
+ 	gnu/java/beans/decoder/ShortHandler.java,
+ 	gnu/java/beans/decoder/SimpleHandler.java,
+ 	gnu/java/beans/decoder/StaticMethodContext.java,
+ 	gnu/java/beans/decoder/StringHandler.java,
+ 	gnu/java/beans/decoder/VoidHandler.java: New class
+ 	implementing java.beans.XMLDecoder decoding functionality.
+ 	* java/beans/XMLDecoder.java: New class.
+ 
+ 2005-01-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* acinclude.m4 (REGEN_WITH_JAY): New macro.
+ 	* configure.ac: Call REGEN_WITH_JAY.
+ 	* lib/Makefile.am (gen-xpath-parser): New rule, depends on
+ 	REGEN_PARSER being defined.
+ 	(genclasses): Depend on gen-xpath-parser.
+ 
+ 2005-01-02  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* vm/reference/java/lang/VMThread.java (sleep()): revert behavior
+ 	of sleep(0,0) to previous, where we check for InterruptedException.
+ 
+ 2005-01-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* ChangeLog.gnujaxp.1: New (historic) ChangeLog file.
+ 	* ChangeLog.gnujaxp.2: Likewise.
+ 	* ChangeLog.libxmlj: Likewise.
+ 	* Makefile.am (EXTRA_DIST): List new ChangeLog files.
+ 	* INSTALL: Add libxml2 and libxslt requirements for --enable-xmlj.
+ 	* doc/README.jaxp: New file.
+ 	* doc/Makefile.am (EXTRA_DIST): List new README.jaxp
+ 	* native/jni/xmlj/BUGS: New file.
+ 	* native/jni/xmlj/Makefile.am (EXTRA_DIST): List new BUGS file.
+ 
+ 2005-01-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/gen-classlist.sh.in: Use test -ef and echo top_srcdir and
+ 	top_builddir locations.
+ 
+ 2005-01-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Fix pkg checks for libxml-2.0 and libxslt.
+ 	* native/jni/xmlj/Makefile.am (AM_CFLAGS): Add STRICT_WARNING_CFLAGS
+ 	but disable ERROR_CFLAGS.
+ 	* native/jni/xmlj/xmlj_dom.c: Add __attribute__ ((__unused__)) where
+ 	obvious.
+ 	* native/jni/xmlj/xmlj_sax.c: Likewise.
+ 	* native/jni/xmlj/xmlj_transform.c: Likewise.
+ 	* native/jni/xmlj/xmlj_xpath.c: Likewise.
+ 
+ 2005-01-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(AbstractElement.getLength): Fixed off-by-one error.
+ 	(AbstractElement.children): Made abstract.
+ 	(AbstractElement.getAllowsChildren): Likewise.
+ 	(AbstractElement.getElement): Likewise.
+ 	(AbstractElement.dumpElement): New private method.
+ 	(AbstractElement.dump): New method.
+ 	(BranchElememt.getName): Fixed implementation.
+ 	(BranchElememt.toString): Likewise.
+ 	(BranchElememt.getElement): Fixed arguments.
+ 	(LeafElement.getName): Fixed implementation.
+ 	(LeafElement.toString): Likewise.
+ 	* javax/swing/text/GapContent.java
+ 	(GapContent): Put default content into buffer.
+ 	* javax/swing/text/PlainDocument.java
+ 	(reindex): Use empty attribute sets instead of null.
+ 	(createDefaultRoot): Reimplemented.
+ 	(insertUpdate): Call super method.
+ 	(removeUpdate): Likewise.
+ 	(getParagraphElement): Implemented.
+ 
+ 2005-01-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultBoundedRangeModel.java
+ 	(fireValueChanged): Fixed off-by-one error.
+ 
+ 
+ Local Variables:
+ coding: iso-latin-1-unix	
+ End:
diff -Nrcpad gcc-4.0.2/libjava/classpath/ChangeLog-2003 gcc-4.1.0/libjava/classpath/ChangeLog-2003
*** gcc-4.0.2/libjava/classpath/ChangeLog-2003	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/ChangeLog-2003	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,29107 ----
+ 2003-12-31  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/Choice.java
+ 	(add): Generate ItemEvent for the first item added.
+ 	(insert): Generate ItemEvent if insertion caused selection to change.
+ 	(remove): Generate ItemEvent if removal cause selection to change.
+ 	(removeAll): Change algorithm to prevent generation of ItemEvents.
+ 
+ 2003-12-31 Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectOutputStream.java
+ 	(putFields): Removed redundant code.
+ 	(writeFields): Check for multiple call to writeFields.
+ 	(markFieldsWritten): Fixed exception message.
+ 
+ 2003-12-30 Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/net/URLStreamHandler.java,
+ 	java/net/URL.java
+ 	(URL): Change context path to "/" if it is empty.
+ 
+ 2003-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/Channels.java
+ 	(newInputStream): Implemented.
+ 	(newOuputStream): Implemented.
+ 	(newChannel): Implemented.
+ 	* gnu/java/nio/ChannelInputStream.java,
+ 	gnu/java/nio/ChannelOutputStream.java,
+ 	gnu//java/nio/InputStreamChannel.java,
+ 	gnu/java/nio/OutputStreamChannel.java: New files.
+ 	* gnu/java/nio/Makefile.am (EXTRA_DIST): Added new files.
+ 
+ 2003-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectStreamClass.java
+ 	(getSerialPersistentFields): Little reformating.
+ 
+ 2003-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(outputStream): New field.
+ 	(bufferedOutputStream): New field.
+ 	(connect): Initialize outputStream and bufferedOutputStream.
+ 	(sendRequest): Create PrintWriter object from outputStream,
+ 	support HTTP 1.1, send missing HTTP headers and buffered output data
+ 	for POST method.
+ 	(getOutputStream): Set request method to POST if output stream is
+ 	used, return bufferedOutputStream.
+ 	(setRequestMethod): Allow HEAD and POST methods.
+ 	This fixes libgcj PR/6302 and libgcj PR/7752.
+ 
+ 2003-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java
+ 	(req_props): Removed.
+ 	(getHeaderField): Do nothing here. Implementation has to be in
+ 	subclass.
+ 	(setRequestProperty): Likewise.
+ 	(addRequestProperty): Likewise.
+ 	(getRequestProperty): Likewise.
+ 	(getRequestProperties): Likewise.
+ 	(setDefaultRequestProperty): Likewise.
+ 	(getDefaultRequestProperty): Likewise.
+ 
+ 2003-12-29 Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/RuleBasedCollator.java,
+ 	java/text/CollationElementIterator.java:
+ 	Parser rewritten. All but one feature implemented.
+ 
+ 2003-12-29 Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(parseURL): Change a relative path into an
+ 	absolute if the original URL does not have any path.
+ 
+ 	* java/util/GregorianCalendar.java
+ 	(computeFields): Reported by Ito Kazumitsu <kaz@maczuka.gcd.org>.
+ 	Fixed the computation of DAY_OF_WEEK_IN_MONTH.
+ 
+ 2003-12-29 Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectStreamClass.java: Reindented.
+ 
+ 2003-12-29 Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectInputStream.java: Use if instead of catching
+ 	NullPointerException.
+ 
+ 2003-12-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/HeaderFieldHelper.java
+ 	(getHeaderFieldValueByKey): New method.
+ 	(getHeaderFields): New method.
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(connect): Lowercase key before adding to HeaderFieldHelper object.
+ 	(getHeaderField): New method.
+ 	(getHeaderFields): New method.
+ 
+ 2003-12-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectOutputStream.java,
+ 	java/io/ObjectInputStream.java,
+ 	java/io/ObjectStreamClass.java: Reindented. Some exception message
+ 	has been added.
+ 
+ 2003-12-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectOutputStream.java
+ 	(writeClassDescriptor): Externalizable class must also write their
+ 	hierarchy.
+ 	(putFields): Added some text message for an exception.
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readClassDescriptor): Documented. Better field checking.
+ 	(defaultReadObject): Readjusted messages in exceptions.
+ 	(currentLoader): Documented.
+ 	(inputGetObjectStreamClasses): Changed indentation.
+ 	(readFields): Documented. Changed logic to improve error reporting and
+ 	behaviour compared to the JDK.
+ 	(readFields): Fixed behaviour.
+ 	(getField): Documented. Fixed behaviour.
+ 	(callReadMethod): Invalidate read fields.
+ 
+ 	* java/io/ObjectStreamClass.java
+ 	(setFields): Fix to avoid a NullPointerException.
+ 	(getSerialPersistentFields): Documented. Improved modifier checking.
+ 
+ 2003-12-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/LineNumberReader.java
+ 	(countLines): Removed.
+ 	(fill): New private method.
+ 	(mark): Changed logic to use savedLineNumber and matchedNewLine.
+ 	(reset): Likewise.
+ 	(read): Likewise.
+ 	(skipRedundantLF): Likewise.
+ 
+ 2003-12-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/LineNumberReader.java
+ 	(mark): Improved error checking.
+ 	(read): Likewise.
+ 	(skip): Likewise. Skip is now really eating the specified number of
+ 	characters.
+ 	
+ 2003-12-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/FileChannelImpl.java
+ 	(implRead): Only put data into buffer when data was read.
+ 
+ 2003-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectStreamField.java
+ 	(isShared): Documentation added.
+ 
+ 2003-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(getRequestProperty): Removed.
+ 	(setRequestProperty): Removed.
+ 
+ 2003-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(setRequestProperty): New method.
+ 	(getRequestProperty): New method.
+ 	(getHeaderField): Reformated.
+ 	(getHeaderFieldKey): Reformated.
+ 
+ 2003-12-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/Makefile.am: Add java_lang_VMRuntime.h generation rule.
+ 	* include/java_lang_VMRuntime.h: Regenerated.
+ 	* java/lang/Makefile.am (EXTRA_DIST): Add Runtime.java.
+ 	* vm/reference/java/lang/Makefile.am: Remove Runtime.java, add
+ 	VMRuntime.java.
+ 
+ 2003-12-27  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(receiveReply): Add the null header containing the reply of the server.
+ 	(getHeaderField, getHeaderFieldKey): Check whether the connection has
+ 	already been established.
+ 
+ 2003-12-27  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/CharArrayReader.java (read): It should throw
+ 	IndexOutOfBoundsException and not ArrayIndexOutOfBoundsException (see
+ 	mauve).
+ 	
+ 2003-12-27  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/BufferedReader.java (readLine): Make readLine() really block
+ 	until either EOF is reached or a true error happens.
+ 
+ 2003-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(outputWriter): Removed.
+ 	(connect): Always initialize inputStream, don't initialize
+ 	outputWriter.
+ 	(sendRequest): Create PrintWriter object locally.
+ 	(receiveReply): Made private.
+ 	(getInputStream): Return inputStream confitionally.
+ 	(getOuputStream): Documentation added.
+ 	(setRequestMethod): Reordered.
+ 	(getHeaderField): Reordered.
+ 	(getHeaderFieldKey): Reordered.
+ 
+ 2003-12-27  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/System.java (mapLibraryName): Changed to call
+ 	VMRuntime.nativeGetLibname.
+ 	* java/lang/Runtime.java: New file.
+ 	* vm/reference/java/lang/Runtime.java: Removed.
+ 	* vm/reference/java/lang/VMRuntime.java: New file.
+ 	* include/java_lang_VMRuntime.h: New file.
+ 	* include/java_lang_Runtime.h: Removed.
+ 
+ 
+ 2003-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/Copies.java,
+ 	javax/print/attribute/standard/JobImpressions.java,
+ 	javax/print/attribute/standard/JobMediaSheets.java,
+ 	javax/print/attribute/standard/JobPriority.java,
+ 	javax/print/attribute/standard/NumberOfDocuments.java,
+ 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
+ 	javax/print/attribute/standard/NumberUp.java,
+ 	javax/print/attribute/standard/PagesPerMinuteColor.java,
+ 	javax/print/attribute/standard/PagesPerMinute.java,
+ 	javax/print/attribute/standard/QueuedJobCount.java,
+ 	javax/print/attribute/standard/Makefile.am,
+ 	javax/print/attribute/standard/package.html: New files
+ 
+ 2003-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/spi/AbstractSelector.java:
+ 	Added import for java.nio.channels.ClosedSelectorException.
+ 	(close): Added synchronized to method declaration.
+ 	(cancelledKeys): Throw ClosedSelectorException if is closed.
+ 	(cancelKey): Synchronize on cancelled key set before key.
+ 
+ 2003-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/SimpleTimeZone.java
+ 	(setStartRule): Reformated documentation.
+ 	(setEndRule): Reworked documentation.
+ 	(getDSTSavings): Fixed @since tag.
+ 	(setDSTSavings): New method.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Calendar.java,
+ 	java/util/IdentityHashMap.java:
+ 	Import used classes explicitely.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/prefs/Preferences.java:
+ 	Import used classes explicitely.
+ 	* java/util/prefs/AbstractPreferences.java
+ 	(cachedChildren): New method.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/MessageFormat.java
+ 	(MessageFormat): New constructor.
+ 	* java/text/NumberFormat.java
+ 	(getCurrency): New method.
+ 	(setCurrency): New method.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/Format.java (serialVersionUID): Fixed value.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramPacket.java
+ 	(length): Made package-private to make it accessible via CNI.
+ 	(maxlen): New field.
+ 	(DatagramPacket): Cleaned up.
+ 	(setSocketAddress): Add message to exception.
+ 	(setData): Call other setData().
+ 	(setData): Call setLength().
+ 	(setLength): Initialize maxlen too.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(close): Directly return if socket is closed.
+ 	* java/net/ServerSocket.java bind():
+ 	If InetSocketAddress.getAddress() returns "null" use "0.0.0.0" as
+ 	address to bind to.
+ 	(close): Directly return if socket is closed.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/TimeZone.java (getOffset): New method.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/event/EventDirContext.java: Jalopied.
+ 	(addNamingListener): Fixed typo in method name.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/directory/Attribute.java,
+ 	javax/naming/directory/Attributes.java,
+ 	javax/naming/directory/DirContext.java,
+ 	javax/naming/directory/InitialDirContext.java,
+ 	javax/naming/directory/SearchResult.java,
+ 	javax/naming/event/EventContext.java,
+ 	javax/naming/event/EventDirContext.java,
+ 	javax/naming/event/NamingEvent.java,
+ 	javax/naming/event/NamingExceptionEvent.java,
+ 	javax/naming/ldap/ControlFactory.java,
+ 	javax/naming/ldap/ExtendedRequest.java,
+ 	javax/naming/ldap/HasControls.java,
+ 	javax/naming/ldap/InitialLdapContext.java,
+ 	javax/naming/ldap/LdapContext.java,
+ 	javax/naming/ldap/LdapReferralException.java,
+ 	javax/naming/ldap/UnsolicitedNotification.java,
+ 	javax/naming/ldap/UnsolicitedNotificationListener.java,
+ 	javax/naming/spi/DirObjectFactory.java,
+ 	javax/naming/spi/DirStateFactory.java,
+ 	javax/naming/spi/DirectoryManager.java,
+ 	javax/naming/spi/NamingManager.java,
+ 	javax/naming/spi/ObjectFactoryBuilder.java,
+ 	javax/naming/spi/ResolveResult.java,
+ 	javax/naming/spi/Resolver.java,
+ 	javax/naming/spi/StateFactory.java:
+ 	Import used classes explicitely.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/reflect/TypeSignature.java: Reformatted.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FilePermission.java:
+ 	Import used classes explicitely.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/BeanDescriptor.java,
+ 	java/beans/EventSetDescriptor.java,
+ 	java/beans/FeatureDescriptor.java,
+ 	java/beans/IndexedPropertyDescriptor.java,
+ 	java/beans/Introspector.java,
+ 	java/beans/MethodDescriptor.java,
+ 	java/beans/PropertyDescriptor.java,
+ 	java/beans/SimpleBeanInfo.java: Explicitely import used classes.
+ 	* java/beans/beancontext/BeanContextServicesSupport.java
+ 	(serialVersionUID): New field.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/PixelGrabber.java: Removed assert() statements added
+ 	in last commit as this breaks compilation with jikes.
+ 
+ 2003-12-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/datatransfer/DataFlavor.java (getParameter):
+ 	Fix off-by-one error which was clipping off the first character of a
+ 	parameter value.
+ 	* java/awt/datatransfer/StringSelection.java (getTransferData):
+ 	Return object of type expected by specified DataFlavor.
+ 
+ 2003-12-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/image/PixelGrabber.java:
+ 	Fix implementation and update javadocs.
+ 2003-12-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/FlowLayout.java (layoutContainer): Let components
+ 	assume their preferred height.  Centre components vertically.
+ 
+ 2003-12-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/List.java (replaceItem): Prevent selection to move with
+ 	replace and minimize flickering.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/target/generic/target_generic_file.h
+ 	(TARGET_NATIVE_FILE_FILEFLAG_SYNC): Define to O_FSYNC on systems where
+ 	O_SYNC doesnt exist but O_FSYNC does (like FreeBSD).
+ 
+ 2003-12-26  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* java/awt/Polygon.java (translate):
+ 	Fixed error that caused polygon to move right/left
+ 	when up/down translation was required.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/MenuComponent.java: Import java.io.Serialization.
+ 	* java/awt/MenuItem.java: Likewise.
+ 	* java/awt/TextComponent.java: Likewise.
+ 	* java/awt/image/ImagingOpException.java
+ 	(serialVersionUID): Fixed.
+ 
+ 2003-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/AttributeSetUtilities.java,
+ 	javax/print/attribute/DateTimeSyntax.java,
+ 	javax/print/attribute/DocAttribute.java,
+ 	javax/print/attribute/DocAttributeSet.java,
+ 	javax/print/attribute/EnumSyntax.java,
+ 	javax/print/attribute/HashAttributeSet.java,
+ 	javax/print/attribute/HashDocAttributeSet.java,
+ 	javax/print/attribute/HashPrintJobAttributeSet.java,
+ 	javax/print/attribute/HashPrintRequestAttributeSet.java,
+ 	javax/print/attribute/HashPrintServiceAttributeSet.java,
+ 	javax/print/attribute/IntegerSyntax.java,
+ 	javax/print/attribute/PrintJobAttribute.java,
+ 	javax/print/attribute/PrintJobAttributeSet.java,
+ 	javax/print/attribute/PrintRequestAttribute.java,
+ 	javax/print/attribute/PrintServiceAttribute.java,
+ 	javax/print/attribute/PrintServiceAttributeSet.java,
+ 	javax/print/attribute/ResolutionSyntax.java,
+ 	javax/print/attribute/SetOfIntegerSyntax.java,
+ 	javax/print/attribute/Size2DSyntax.java,
+ 	javax/print/attribute/SupportedValuesAttribute.java,
+ 	javax/print/attribute/TextSyntax.java,
+ 	javax/print/attribute/URISyntax.java,
+ 	javax/print/attribute/UnmodifiableSetException.java: New files
+ 	* javax/print/attribute/Makefile.am (EXTRA_DIST): Added new files.
+ 
+ 2003-12-26  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/util/GregorianCalendar.java (computeTime): 12:00 midnight is AM
+ 	and 12:00 noon is PM.
+ 
+ 2003-12-26  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/rmi/Naming.java (lookup): Check if the first character of the
+ 	filename returned by URL.getFile() is a '/', only if it is the case
+ 	we cut this first character and call the registry with the good name.
+ 	(bind): Likewise.
+ 	(rebind): Likewise.
+ 
+ 2003-12-26  Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/net/Socket.java (close): Allow a Socket to be closed
+ 	multiple times without throwing an exception.
+ 
+ 2003-12-26  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/io/FileInputStream.java (FileInputStream(String)): Call
+ 	FileInputStream(File).
+ 	(FileInputStream(File)): Check whether the argument is a directory.
+ 
+ 2003-12-26  Guilhem Lavaux  <guilhem@kaffe.org>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/BufferedReader.java (BufferedReader): Throw
+ 	IllegalArgumentException when size <= 0.
+ 	(mark): Document and better exception message for negative readLimit
+ 	IllegalArgumentException.
+ 	(read(char[],int,int)): Throw IndexOutOfBoundsException if offset and
+ 	count are not valid regarding buf.
+ 	(skip): Throw IllegalArgumentException when count is negative.
+ 
+ 2003-12-25  Guilhem Lavaux  <guilhem@kaffe.org>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/rmi/server/UnicastConnectionManager.java
+ 	(startScavenger): Set the client connection manager to daemon
+ 	state because it may block clients until TIMEOUT is reached
+ 	when they are exiting.
+ 
+ 	* gnu/java/rmi/RMIVoidValue.java: New file for a class representing
+ 	a void return.
+ 
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java
+ 	(DummyOutputStream): Add a boolean before each written field to
+ 	know whether it is a primitive.
+ 	(releaseOutputStream): Flush parameters at write time.
+ 
+ 	* gnu/java/rmi/server/UnicastServerRef.java
+ 	(incomingMessageCall): Return a RMIVoidValue if no value is to be
+ 	returned.
+ 
+ 	* gnu/java/rmi/server/UnicastServer.java
+ 	(incomingMessageCall): Do not write a returned object if it is
+ 	a RMIVoidValue.
+ 
+ 	* gnu/java/rmi/server/Makefile.am (EXTRA_DIST): Add RMIVoidValue.java.
+ 
+ 2003-12-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/Makefile.am (ARG_CLASSPATH_JAVAH): Use -bootclasspath.
+ 	* include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: Regenerated.
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkToolkit.h: Likewise.
+ 	* include/java_lang_VMSystem.h: Likewise.
+ 
+ 2003-12-25  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* gnu/java/net/URLParseError.java: New file.
+ 	* gnu/java/net/protocol/jar/Handler.java
+ 	(parseURL): Throw URLParseError if needed, fix '/' handling.
+ 	* java/net/URL.java (URL): Catch URLParseError and
+ 	transform it into a MalformedURLException.
+ 
+ 	* gnu/java/net/Makefile.am (EXTRA_DIST): Add URLParseError.java.
+ 
+ 2003-12-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in: Set version to 0.07+cvs.
+ 
+ 2003-12-03  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/List.java (getSelectedIndex):
+ 	Return -1 if no list element is selected.
+ 
+ 2003-12-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
+ 	(initState): Mark obj parameter as unused.
+ 	(stringWidth): Mark obj parameter as unused.  Initialize
+ 	font_name properly.
+ 
+ 2003-12-02  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* Container.java (LightweightDispatcher): Expand implementation.
+ 	(visitChild): Use existing graphics object, rather than clone.
+ 	(dispatchEventImpl): Call LightweightDispatcher if it exists.
+ 	(addNotifyContainerChildren): Build LightweightDispatcher.
+ 
+ 2003-12-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h,
+ 	include/gnu_java_awt_peer_gtk_GtkComponentPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkToolkit.h: Regenerate.
+ 	* native/jni/gtk-peer/Makefile.am: Add
+ 	gnu_java_awt_peer_gtk_GdkPixbufDecoder.c.
+ 	* gnu/java/awt/image/ImageDecoder.java (ImageDecoder(byte[],int,int)):
+ 	New constructor.
+ 	(startProduction): Create ByteArrayInputStream when url and filename are
+ 	null.
+ 	(produce): Declare stream parameter as InputStream.
+ 	* gnu/java/awt/image/XBMDecoder.java (produce): Declare stream parameter
+ 	as InputStream.
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+ 	(GdkPixbufDecoder(byte[],int,int)): New constructor.
+ 	(produce): Declare stream parameter as InputStream.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (prepareImage): Throw NPE
+ 	if image is null.  Set image's observer before running PrepareImage
+ 	thread.  Pass image to startProduction.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java: Add null checks before calls to
+ 	source's member functions.
+ 	(observer): New field.
+ 	(setObserver): New method.
+ 	(setDimensions, setPixels, imageComplete): Call observer's imageUpdate.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (checkImage, getImage): Return
+ 	new GtkImage.
+ 	(prepareImage): Implement.
+ 	* java/awt/Component.java: Add static fields incrementalDraw and
+ 	redrawRate.
+ 	(imageUpdate): Implement.
+ 	(createImage): Call Toolkit's createImage if peer is null.
+ 	(prepareImage): Throw NPE if image is null.
+ 	* java/awt/MediaTracker.java: Fix return value.
+ 
+ 2003-12-02  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectInputStream.java:
+ 	(setBooleanField): Throw an InvalidClassException if the field hasn't 
+ 	the required type.
+ 	(setByteField): Likewise.
+ 	(setCharField): Likewise.
+ 	(setDoubleField): Likewise.
+ 	(setFloatField): Likewise.
+ 	(setIntField): Likewise.
+ 	(setShortField): Likewise.
+ 	(setLongField): Likewise.
+ 	(setObjectField): Likewise.
+ 
+ 2003-12-02  Guilhem Lavaux <guilhem@kaffe.org>
+ 	
+ 	* java/io/ObjectStreamField.java: A few methods were added
+ 	in prevision of the upcoming upgrade of the serialization code.
+ 	(ObjectStreamField): We should throw a NullPointerException when
+ 	'name' is null.
+ 
+ 2003-12-02  Guilhem Lavaux <guilhem@kaffe.org>, Helmer Kraemer <hkraemer@freenet.de>
+ 
+ 	* gnu/java/lang/reflect/TypeSignature.java
+ 	(getClassForEncoding): Splitted the method so we can specify an
+ 	explicit boot loader.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/io/PlatformHelper.java: Reformated.
+ 
+ 2003-12-02  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JLayeredPane.java: Implement.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(close): Close associated DatagramChannel object.
+ 	* java/net/Socket.java
+ 	(close): Reset impl and bound before calling getChannel().close() to
+ 	prevent from loops.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/spi/AbstractInterruptibleChannel.java
+ 	(opened): Removed.
+ 	(closed): New field.
+ 	(close): Check of channel is closed already.
+ 	(isOpen): Return !closed.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): Call other sister constructor.
+ 	(connect): Revised exception message.
+ 	(setBroadcast): Renamed on to enable.
+ 	(getLocalAddress): Completed documentation.
+ 	(getChannel): Likewise.
+ 	(isBound): Likewise.
+ 	(isConnected): Likewise.
+ 	(getRemoteSocketAddress): Likewise.
+ 	(getLocalSocketAddress): Likewise.
+ 	(getReuseAddress): Likewise.
+ 	(setBroadcast): Likewise.
+ 	(getTrafficClass): Likewise.
+ 	* java/net/ServerSocket.java
+ 	(getLocalSocketAddress): Simplified.
+ 	(accept): Renamed s to socket.
+ 	(implAccept): Likewise.
+ 	(toString): Made it compliant to SUNs JDK.
+ 	* java/net/Socket.java
+ 	(impl): Make private.
+ 	(getInetAddress): Check if socket is connected.
+ 	(getPort): Likewise.
+ 	(getInputStream): Likewise.
+ 	(getOutputStream): Likewise.
+ 	(getLocalPort): Check if socket is bound.
+ 	(shutdownOutput):
+ 	Readd accidently removed "getImpl().shutdownOutput()".
+ 	(connect): Completed documentation.
+ 	(getOOBInline): Likewise.
+ 	(getReuseAddress): Likewise.
+ 	(getTrafficClass): Likewise.
+ 	(isConnected): Likewise.
+ 	(isBound): Likewise.
+ 	(isClosed): Likewise.
+ 	(isInputShutdown): Likewise.
+ 	(isOutputShutdown): Likewise.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(impl): Made private.
+ 	(bound): New private member variable.
+ 	(DatagramSocket): Fixed documentation, use getImpl().
+ 	(getImpl): New package-private method.
+ 	(isClosed): Use getImpl().
+ 	(getLocalAddress): Completed documentation, use getImpl().
+ 	(getLocalPort): Use getImpl().
+ 	(getSoTimeout): Likewise.
+ 	(setSoTimeout): Likewise.
+ 	(getSendBufferSize): Likewise.
+ 	(setSendBufferSize): Likewise.
+ 	(getReceiveBufferSize): Likewise.
+ 	(setReceiveBufferSize): Likewise.
+ 	(connect): Likewise.
+ 	(disconnect): Likewise.
+ 	(receive): Likewise.
+ 	(send): Likewise.
+ 	(setReuseAddress): Likewise.
+ 	(setTrafficClass): Likewise.
+ 	(bind): Added message to exception.
+ 	(isClosed): Completed documentation.
+ 	(getChannel): Likewise.
+ 	(connect): Added missing exception, refined exception message.
+ 	(isBound): Completed documentation, just return bound.
+ 	(isConnected): Completed documentation.
+ 	(getRemoteSocketAddress): Likewise.
+ 	(getReuseAddress): Completed documentation, use getImpl().
+ 	(setSoBroadcast): Likewise.
+ 	(getSoBroadcast): Likewise.
+ 	(getTrafficClass): Likewise.
+ 	(getLocalSocketAddress): Simplified.
+ 	* java/net/MulticastSocket.java
+ 	(MulticastSocket): Removed comment not applying anymore.
+ 	(getInterface): Use getImpl().
+ 	(getTTL): Likewise.
+ 	(getTimeToLive): Likewise.
+ 	(setInterface): Likewise.
+ 	(setNetworkInterface): Likewise.
+ 	(getNetworkInterface): Likewise.
+ 	(setLoopback): Likewise.
+ 	(getLoopback): Likewise.
+ 	(setTTL): Likewise.
+ 	(setTimeToLive): Likewise.
+ 	(joinGroup): Likewise.
+ 	(leaveGroup): Likewise.
+ 	(send): Likewise.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(implCreated): Dont set default value explicitely, added
+ 	documentation.
+ 	(inputShutdown): Likewise.
+ 	(outputShutdown): Likewise.
+ 	(bound): New private member variable.
+ 	(bind): Set bound to true.
+ 	(close): Set bound to false.
+ 	(isBound): Return bound.
+ 	* java/net/ServerSocket.java
+ 	(bound): New private member variable.
+ 	(bind): Set bound to true.
+ 	(close): Set bound to false.
+ 	(isBound): Return bound.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(factory): Made private.
+ 	(closed): Removed.
+ 	(DatagramSocket): Check impl argument, use constructor with
+ 	SocketAddress argument.
+ 	(close): Set impl to null, use isClosed().
+ 	(isClosed): Check for impl == null.
+ 	(getLocalAddress): Use isClosed().
+ 	(getLocalPort): Check if socket is closed.
+ 	(getSoTimeout): Likewise.
+ 	(setSoTimeout): Likewise.
+ 	(getSendBufferSize): Likewise.
+ 	(setSendBufferSize): Likewise.
+ 	(getReceiveBufferSize): Likewise.
+ 	(setReceiveBufferSize): Likewise.
+ 	(receive): Likewise.
+ 	(send): Likewise.
+ 	(bind): Likewise.
+ 	(connect): Likewise.
+ 	(setReuseAddress): Likewise.
+ 	(getReuseAddress): Likewise.
+ 	(setBroadcast): Likewise.
+ 	(getBroadcast): Likewise.
+ 	(setTrafficClass): Likewise.
+ 	(getTrafficClass): Likewise.
+ 	* java/net/MulticastSocket.java
+ 	(getInterface): Check if socket is closed.
+ 	(getTTL): Likewise.
+ 	(getTimeToLive): Likewise.
+ 	(setInterface): Likewise.
+ 	(setNetworkInterface): Likewise.
+ 	(getNetworkInterface): Likewise.
+ 	(setLoopbackMode): Likewise.
+ 	(setTTL): Likewise.
+ 	(setTimeToLive): Likewise.
+ 	(joinGroup): Likewise.
+ 	(leaveGroup): Likewise.
+ 	(send): Likewise.
+ 	* java/net/ServerSocket.java
+ 	(closed): Removed.
+ 	(close): Check if socket is closed, set impl to null.
+ 	(isClosed): Check impl == null;
+ 	(ServerSocket): Check impl argument.
+ 	(getInetAddress): Check if socket is bound.
+ 	(getLocalPort): Likewise.
+ 	(getLocalSocketAddress): Likewise.
+ 	(bind): Check if socket is closed.
+ 	(implAccept): Likewise.
+ 	(setSoTimeout): Likewise.
+ 	(getSoTimeout): Likewise.
+ 	(setReuseAddress): Likewise.
+ 	(getReuseAddress): Likewise.
+ 	(setReceiveBufferSize): Likewise.
+ 	(getReceiveBufferSize): Likewise.
+ 	* java/net/Socket.java
+ 	(closed): Removed.
+ 	(Socket): Fixed documentation.
+ 	(connect): Check if socket is closed, changed exception text,
+ 	fixed documentation.
+ 	(getInputStream): Check of socket is closed  and connected.
+ 	(getOutputStream): Likewise.
+ 	(bind): Check if socket is closed.
+ 	(setTcpNoDelay): Likewise.
+ 	(getTcpNoDelay): Likewise.
+ 	(setSoLinger): Likewise.
+ 	(getSoLinger): Likewise.
+ 	(sendUrgentData): Likewise.
+ 	(setOOBInline): Likewise.
+ 	(getOOBInline): Likewise.
+ 	(setSoTimeout): Likewise.
+ 	(getSoTimeout): Likewise.
+ 	(setSendBufferSize): Likewise.
+ 	(getSendBufferSize): Likewise.
+ 	(setReceiveBufferSize): Likewise.
+ 	(getReceiveBufferSize): Likewise.
+ 	(setKeepAlive): Likewise.
+ 	(getKeepAlive): Likewise.
+ 	(close): Likewise.
+ 	(shutdownInput): Likewise.
+ 	(shutdownOutput): Likewise.
+ 	(getReuseAddress): Likewise.
+ 	(getTrafficClass): Likewise.
+ 	(setTrafficClass): Likewise.
+ 	(isClosed): Check impl == null.
+ 	(toString): Added missing ']'.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): Move binding code to bind(), simplify constructors.
+ 	* java/net/MulticastSocket.java
+ 	(MulticastSocket): Call parent constructor with null argument,
+ 	bind socket after setReuseAddress is called, simplify constructors.
+ 	* java/net/Socket.java
+ 	(various): Some more getImpl() fixes.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(implCreated): New variable that indicates created impl.
+ 	(getImpl): New method.
+ 	(toString): Return more SUN compliant string representation.
+ 	(various): Use getImpl() instead of impl.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/DateFormat.java:
+ 	Explicitely import used classes.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkFontMetrics.h: Regenerated.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java:
+ 	(openConnection): Handle case when host part of file: URL is set.
+ 	* gnu/java/net/protocol/http/Connection.java: Reformated.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/ClassLoaderHelper.java:
+ 	Explicitly import used classes.
+ 	* gnu/java/lang/SystemClassLoader.java
+ 	(systemFindResource): Fixed typo.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java: Reformated.
+ 	(inputStream): Made an InputStream.
+ 	(outputStream): Made an OutputStream.
+ 	(connect): Don't throw FileNotFoundException directly. FileInputStream
+ 	constructor does this for us.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Connection.java:
+ 	Reformated.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Handler.java:
+ 	Reformated.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java:
+ 	Reformated.
+ 
+ 2003-12-01  Kim Ho <kho@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c (create):
+ 	Disable wrapping if TextArea has horizontal scroll bars.
+ 
+ 2003-12-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(awt_event_handler): Hard-code inset values.
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java (GdkFontMetrics):
+ 	Pass font name, not XLFD, to initState.
+ 	(stringWidth(String, int, String)): New method.
+ 	(stringWidth(String)): Call new stringWidth.
+ 	(getLeading): Always return 0.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
+ 	(initState): New Pango implementation.
+ 	(stringWidth): Likewise.
+ 
+ 2003-12-01  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/Container.java (swapComponents): New method.
+ 	* (visitChild): Handle null clip bounds.
+ 	* javax/swing/JLayeredPane.java: Conform to mauve test, javadoc.
+ 
+ 2003-12-01  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* java/awt/TextComponent.java:
+ 	(getSelectionStart): Updated javadocs.
+ 	(getSelectionEnd): Ditto.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer:
+ 	(getSelectionStart): Changed to return caret position if no
+ 	text is selected
+ 	(getSelectionEnd): Ditto.
+ 
+ 2003-12-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImage.java (setDimensions,
+ 	setProperties): Check that io is not null before calling
+ 	io.imageUpdate.
+ 	* java/awt/image/ImageConsumer.java (setPixels, imageComplete):
+ 	Update javadocs.
+ 	* java/awt/image/PixelGrabber.java: Fix implementation and
+ 	update javadocs.
+ 
+ 2003-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in: Set version to 0.07.
+ 	* NEWS: Set release date to today.
+ 
+ 2003-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/security/Security.java: Don't use &nbsp; in the api doc.
+ 
+ 2003-11-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/api/Makefile.am (packages, create_html): Only generate api doc
+ 	for the core packages, not the external ones.
+ 
+ 2003-11-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Etienne Gagnon <gagnon.etienne_m@uqam.ca>
+ 	* doc/www.gnu.org/stories: Updated SableVM blurb and add extra
+ 	publications link.
+ 
+ 2003-11-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/hacking.texi: Clearify jikesrvm link (www, not www-124).
+ 	* doc/www.gnu.org/stories.wml: Likewise.
+ 	* doc/www.gnu.org/home.wml: Update Open Tasks savannah link.
+ 
+ 2003-11-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java
+ 	(sendTo): Added offset argument.
+ 	* include/gnu_java_net_PlainDatagramSocketImpl.h: Regenerated.
+ 	* native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c
+ 	(receive0): Use completely available space in buffer array.
+ 	(sendTo): Use offset.
+ 
+ 2003-11-28  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/text/SimpleDateFormat.java (compileFormat):
+ 	isLowerCase() and isUpperCase() allow too many characters.
+ 	Just use >= 'A' && <= 'Z' || >= 'a' && <= 'z'.
+ 
+ 2003-11-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Archie Cobbs:
+ 	* java/security/DigestInputStream.java (read(byte[], int, int): Call
+ 	digest.update() with temp, not len as lenght.
+ 
+ 2003-11-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Michael Hind <hindm@us.ibm.com>:
+ 	* doc/www.gnu.org/stories: Updated Jikes RVM blurb.
+ 	Fixed Joas and SableVM publication links.
+ 
+ 2003-11-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Update with new 0.07 items.
+ 
+ 2003-11-28  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	Reported by: Jim Pick <jim@kaffe.org>
+ 
+ 	* libraries/javalib/java/util/Hashtable.java
+ 	(internalcontainsValue): New method.
+ 	(contains) Delegate to internalContainsValue.
+ 
+ 	Reported by: Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libraries/javalib/java/util/Hashtable.java
+ 	(contains): Improved comment.
+ 
+ 	Reported by: Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* libraries/javalib/java/util/Hashtable.java
+ 	(containsValue): Delegate to contains(Object) to make sure older
+ 	code overwriting it continues to work.
+ 
+ 2003-11-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* doc/www.gnu.org/downloads/tools.wml: Add GNU.xml style definition
+ 	file.
+ 
+ 2003-11-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	New setup from Patrik Reali <reali@acm.org>
+ 	* Makefile: New setup.
+ 	* README: Describe new setup.
+ 	* benchmarks.wml: New file.
+ 	* external.wml: New file.
+ 	* home.wml: Use new setup.
+ 	* license.wml: New file.
+ 	* stories.wml: New file.
+ 	* docs/Makefile: New setup.
+ 	* docs/docs.wml: Use new setup.
+ 	* downloads/.cvsignore: New file.
+ 	* downloads/19990206.wml: New file.
+ 	* downloads/20001120.wml: New file.
+ 	* downloads/20010106.wml: New file.
+ 	* downloads/20020208.wml: New file.
+ 	* downloads/Makefile: New file.
+ 	* downloads/downloads.wml: New file.
+ 	* downloads/tools.wml: New file.
+ 	* faq/.cvsignore: New file.
+ 	* faq/Makefile: New file.
+ 	* faq/faq.wml: New file.
+ 	* include/layout.wml: New file.
+ 	* include/macros.wml: New setup.
+ 
+ 2003-11-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in: Removed AC_CYGWIN and AC_MINGW32.
+ 
+ 2003-11-27  Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/text/FieldPosition.java (equals): Fixed comment.
+ 
+ 2003-11-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(connect): Always create outputStream, its needed to send request to
+ 	remote server. Set connected to true after request was sent and reply
+ 	received.
+ 
+ 2003-11-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(parseURL): Added comment in catch statement.
+ 	(canonicalizeFilename): Add documentation.
+ 	(sameURL): Completed documentation.
+ 	(equals): Likewise.
+ 	(hostsEqual): Likewise.
+ 	(getDefaulPort): Likewise.
+ 	(hashCode): Likewise.
+ 	(toExternalForm): Likewise.
+ 	(getHostName): Fix empty hostname check, completed documentation.
+ 
+ 2003-11-26  Tom Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java (getLayoutDimensions): Return array of
+ 	two zero-length int arrays when layoutInfo is null.
+ 	(getLayoutWeights): Return array of two zero-length double arrays when
+ 	layoutInfo is null.
+ 
+ 2003-11-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/BoxLayout.java
+ 	(serialVersionUIR): New member variable.
+ 	(X_AXIS, Y_AXIS): Documentation added.
+ 	(LINE_AXIS, PAGE_AXIS): New constants.
+ 	(grid): Renamed from gridbag.
+ 	(BoxLayout): Use new constants, throw exception if invalid value for
+ 	way, added documentation.
+ 	(BoxLayout): Removed.
+ 	(addLayoutComponent): Use new constants, added documentation.
+ 	(removeLayoutComponent): Likewise.
+ 	(addLayoutContainer): Added documentation.
+ 	(preferredLayoutSize): Added documentation, check given argument.
+ 	(minimumLayoutSize): Likewise.
+ 	(layoutContainer): Likewise.
+ 	(getLayoutAlignmentX): Likewise.
+ 	(getLayoutAlignmentY): Likewise.
+ 	(invalidateLayout): Likewise.
+ 	(maximumLayoutSize): Likewise.
+ 
+ 2003-11-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(getNativeFD): Use getPlainDatagramSocketImpl().
+ 	* gnu/java/nio/NIODatagramSocket.java
+ 	(getPlainDatagramSocketImpl): Renamed from getImpl().
+ 	* gnu/java/nio/NIOSocket.java
+ 	(getPlainSocketImpl): Renamed from getImpl().
+ 	(setChannel): Use getPlainSocketImpl().
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(SocketChannelImpl): Use getPlainSocketImpl().
+ 	(getPlainSocketImpl): Renamed from getImpl().
+ 	(getNativeFD): Use getPlainSocketImpl().
+ 
+ 2003-11-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java
+ 	(URL): Fixed documentation to be HTML compliant.
+ 	(getContent): Completed documentation.
+ 	(getFile): Likewise.
+ 	(getPath): Likewise.
+ 	(getAuthority): Likewise.
+ 	(getHost): Likewise.
+ 	(getDefaultPort): Likewise.
+ 	(getProtocol): Likewise.
+ 	(hashCode): Likewise.
+ 	(openConnection): Likewise.
+ 	(openStream): Likewise.
+ 	(set): Likewise.
+ 	(getURLStreamHandler): Wrapped lines to fit into our 79 chars rule.
+ 
+ 2003-11-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramPacket.java
+ 	(DatagramPacket): Fixed documentation to become legal HTML.
+ 
+ 2003-11-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetSocketAddress.java
+ 	(hostname): Made private, added documentation.
+ 	(addr): Likewise.
+ 	(port): Likewise.
+ 	(equals): Completed documentation.
+ 	(getAddress): Likewise.
+ 	(getHostName): Likewise.
+ 	(getPort): Likewise.
+ 	(hashCode): Likewise.
+ 	(isUnresolved): Likewise.
+ 	(toString): Likewise.
+ 
+ 2003-11-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(getHostName): Fix empty hostname check.
+ 	(toExternalForm): Add port number only when host is present and port
+ 	was specified in spec.
+ 
+ 2003-11-25  David Belanger  <dbelan2@cs.mcgill.ca>
+ 
+ 	* java/util/zip/ZipFile (Zipfile(File)): Set file path as name.
+ 	(ZipFile(File,int)): Likewise.
+ 
+ 2003-11-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Thanks to Sascha Brawer
+ 	* NEWS: Update new features, vm-interface changes and bug fixes.
+ 
+ 2003-11-25  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/util/GregorianCalendar.java (getLinearTime): Avoid counting
+ 	the leap day of the leap year twice.
+ 	(computeFields): First week of month is 1 not 0.
+ 
+ 2003-11-23  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/NumberFormat.java:
+ 	(getIntegerInstance) Added the java version in the comments.
+ 
+ 	* java/text/FormatCharacterIterator.java: Documented the class and
+ 	its methods.
+ 
+ 2003-11-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/text/NumberFormat.java: Import java.io.InvalidObjectException.
+ 	(readResolve): Reformat.
+ 
+ 2003-11-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-net/javanet.c: Plain[Datagram]SocketImpl moved from
+ 	java/net to gnu/java/net.
+ 
+ 2003-11-22  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/NumberFormat.java
+ 	(NumberFormat.Field): New implemented class to match Java 1.4. 
+ 	(getIntegerInstance): Two new Java 1.4 methods.o
+ 
+ 	* java/text/DecimalFormatSymbols.java (locale): New field.
+ 	(DecimalFormatSymbols (Locale)): Set locale.
+ 	(serialVersionOnStream): Upgraded to number 2.
+ 	(readObject): Assign locale if it wasn't by the serializer.
+ 
+ 	* java/text/FormatCharacterIterator.java: Fixed some typos.
+ 
+ 2003-11-18  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JLayeredPane.java: Implement.
+ 	* javax/swing/JFrame.java (getContentPane): Make public
+ 	* javax/swing/javax/swing/JRootPane.java (setContentPane): 
+ 	Use JLayeredPane.FRAME_CONTENT_LAYER.
+ 
+ 2003-11-21  Jeroen Frijters  <jeroen@frijters.net>
+ 	* vm/reference/java/lang/Runtime.java (exit): Fixed bug introduced
+ 	earlier today that caused exit() calls during finalization for exit
+ 	to get lost.
+ 
+ 2003-11-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in: Depend on gtk+ 2.2.x.
+ 	* HACKING, NEWS: Document.
+ 
+ 2003-11-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/Runtime.java (exit): Add extra comments.
+ 
+ 2003-11-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/Makefile.am (EXTRA_DIST): Add
+ 	GdkClasspathFontPeerMetrics.java.
+ 
+ 2003-11-21  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Thread.java (start): Throw IllegalThreadStateException
+ 	instead of IllegalStateException.
+ 	* vm/reference/java/lang/Runtime.java (exit): Moved shutdown hook
+ 	processing to new method.
+ 	(runShutdownHooks): New method.
+ 
+ 2003-11-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/InputStreamReader.java (getEncoding): Handle closed stream
+ 	(in == null) case.
+ 
+ 2003-11-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/basic/BasicDefaults.java (BasicDefaults): Put
+ 	AbstractUndoableEdit.undoText and AbstractUndoableEdit.redoText.
+ 
+ 2003-11-18  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/font/TextLayout.java: Implement simple layouts
+ 	using attributed strings and glyph vectors.
+ 
+ 2003-11-17  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java: New file.
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java 
+ 	(GdkFontLineMetrics): New inner class.
+ 	(getLineMetrics): Return new GdkFontLineMetrics.
+ 	(getFontMetrics): Return new GdkClasspathFontPeerMetrics.
+ 	(layoutGlyphVector): Create GdkGlyphVector.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (stateStack): New member.
+ 	(GdkGraphics2D): Initialize state via mathod calls.
+ 	(cairoSetMatrix, cairoShowGlyphs): Simplify native calls.
+ 	(cairoTranslate, cairoScale, cairoRotate): Remove.
+ 	(various methods): use setTransform for special transform cases.
+ 	(DrawState): New inner class.
+ 	(stateSave): New method.
+ 	(stateRestore): New method.
+ 	(various methods): use stateSave, stateRestore.
+ 	(getClipInDevSpace): New method.
+ 	(clip, clipRect, setClip, getClip, getClipBounds): 
+ 	Follow spec more closely.
+ 	(getTransform): Return clone of transform.
+ 	(setStroke): Set linewidth to passed width / 2.0.
+ 	(setPaintMode): Set SrcOver rather than Xor.
+ 	(setColor): Set paint to passed color.
+ 	(drawRaster, drawImage, PainterThread, drawPixels): Take affine
+ 	transform from image to user space.
+ 	(drawRenderedImage, drawRenderableImage): Implement.
+ 	(getFontRenderContext, getFontMetrics, drawString, getFont): 
+ 	Implement
+ 	(drawArc, drawOval, drawRoundRect, fillArc, fillOval, fillRoundRect): 
+ 	Implement.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: 
+ 	Match changes to java side.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c: 
+ 	Release resources.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: 
+ 	Don't use pango for metrics.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c: 
+ 	New file.
+ 
+ 2003-11-19  Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/text/FieldPosition.java (equals): Adapted to handle
+ 	field_attribute. Added fast-circuit check for comparison to self.
+ 	Replaced use of instanceof by getClass to fix symmetry for derived
+ 	types.
+ 	(toString): Adapted to handle field_attribute. Improved readability.
+ 	(hashCode): New method.
+ 
+ 2003-11-19  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/FieldPosition.java (field_attribute): New field.
+ 	(FieldPosition (Format.Field), FieldPosition(Format.Field, int),
+ 	getFieldAttribute): New methods.
+ 
+ 2003-11-18  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* native/target/generic/target_generic.h: Fixed extern-C declaration.
+ 	* native/target/generic/target_generic_io.h: Likewise.
+ 	* native/target/generic/target_generic_math_float.h: Likewise.
+ 	* native/target/generic/target_generic_math_int.h: Likewise.
+ 	* native/target/generic/target_generic_misc.h: Likewise.
+ 	* native/target/Linux/target_native.h: Likewise.
+ 	* native/target/Linux/target_native_file.h: Likewise.
+ 	* native/target/Linux/target_native_io.h: Likewise.
+ 	* native/target/Linux/target_native_math_float.h: Likewise.
+ 	* native/target/Linux/target_native_math_int.h: Likewise. 
+ 	* native/target/Linux/target_native_misc.h: Likewise.
+ 	* native/target/Linux/target_native_network.h: Likewise.
+ 
+ 2003-11-17  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* java/io/ByteArrayOutputStream.java (resize):
+ 	Fix off-by-one error.
+ 
+ 2003-11-17  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicDefaults.java: Rewrite to spec.
+ 	* javax/swing/UIDefaults.java: Modify to reflect rewrite.
+ 
+ 2003-11-17  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/classpath/Configuration.java.in (default_awt_peer_toolkit):
+ 	Change GTK -> Gtk.
+ 
+ 2003-11-17  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/StateEdit.java (getPresentationName): Docfix.
+ 	* javax/swing/undo/AbstractUndoableEdit.java (canUndo, canRedo,
+ 	isSignificant): Likewise.
+ 
+ 2003-11-17  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/CompoundEdit.java: Re-format, document.
+ 	(inProgress): Set initial value to true.
+ 	(undo, redo, die, canUndo, canRedo): Also call inherited
+ 	implementation; simplify code structure.
+ 	(getPresentationName, getUndoPresentationName,
+ 	getRedoPresentationName): Make behavior dependent on lastEdit.
+ 	(addEdit, isSignificant): Completely re-written.
+ 
+ 2003-11-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/StreamTokenizer.java (commentChar): Clear other
+ 	attributes for character.
+ 	(quoteChar): Likewise.
+ 
+ 2003-11-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Font.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/math/BigInteger.java,
+ 	java/net/Inet4Address.java,
+ 	java/net/Inet6Address.java,
+ 	java/rmi/MarshalledObject.java,
+ 	java/rmi/server/RMIClassLoader.java,
+ 	java/security/cert/CertStore.java,
+ 	java/sql/Timestamp.java,
+ 	java/text/SimpleDateFormat.java,
+ 	javax/naming/CompoundName.java (equals):
+ 	Removed some redundant obj == null checks.
+ 
+ 2003-11-15  Guilhem Lavaux <guilhem@kaffe.org>
+ 	    Jim Pick  <jim@kaffe.org>
+ 
+ 	* java/text/DecimalFormat.java (getCurrency, setCurrency): New
+ 	methods.
+ 
+ 2003-11-15  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/text/DecimalFormatSymbols.java (getCurrency,
+ 	setCurrency): New methods.
+ 
+ 2003-11-14  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/StateEdit.java: Re-format, document.
+ 	(undo, redo): Also call inherited implementation.
+ 
+ 2003-11-14  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/StateEditable.java: Re-format, document.
+ 
+ 2003-11-14  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/AbstractUndoableEdit.java: Re-format, document.
+ 	(AbstractUndoableEdit): Initialize hasBeenDone to true.
+ 	(canUndo, canRedo): Simplify.
+ 	(getUndoPresentationName, getRedoPresentationName): Support
+ 	localized message; call getPresentationName() only once.
+ 
+ 2003-11-14  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/UIManager.java (getDefaults, getDimension,
+ 	getIcon, getInsets, getInstalledLookAndFeels, getInt,
+ 	getLookAndFeel, getString, getSystemLookAndFeelClassName):
+ 	Declare as public.
+ 
+ 2003-11-13  Guilhem Lavaux  <guilhem@kaffe.org>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLStreamHandler (parseUrl): Fixed URL parsing
+ 	('@' should be checked to distinguish port from userinfo).
+ 	(toExternalForm): Add @ userInfo if necessary.
+ 
+ 2003-11-13  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/net/ServerSocket.java (close): Check if server socket has
+ 	already been released, before attepting to close it.
+ 
+ 2003-11-13  Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java (permission): New field.
+ 	(DEFAULT_PERMISSION): New constant.
+ 	(Connection): Create a FilePermission with permission to read file.
+ 	(getPermission): Overwrite getPermission to return a FilePermission.
+ 
+ 2003-11-13  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/CannotRedoException.java: Re-format, document.
+ 	* javax/swing/undo/CannotUndoException.java: Likewise.
+ 
+ 2003-11-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkLabelPeer.h: Rebuilt.
+ 
+ 2003-11-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* external/jaxp/source/gnu/xml/pipeline/XIncludeFilter.java
+ 	(Scrubber.Scrubber): Call methods of super class.
+ 	* external/jaxp/source/org/xml/sax/helpers/XMLReaderFactory.java
+ 	(createXMLReader): Catch RuntimeException not Exception.
+ 
+ 2003-11-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java (create()): Call new create.
+ 	(create(String, float)): New method.
+ 	(setText): Make native.
+ 	(nativeSetAlignment): New method.
+ 	(setAlignment): Call nativeSetAlignment.
+ 	(getArgs): Remove method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(find_fg_color_widget, find_bg_color_widget): New functions.
+ 	(gtkWidgetSetForeground): Call find_fg_color_widget.
+ 	(gtkWidgetSetBackground): Call find_bg_color_widget.  Modify active and
+ 	prelight colors.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (create): Wrap label
+ 	widget in event box.
+ 	(setText, setAlignment): Implement new native methods.
+ 
+ 2003-11-11  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/FlatteningPathIterator.java: Entirely re-written.
+ 	* java/awt/geom/doc-files/FlatteningPathIterator-1.html:
+ 	Describe how the implementation works.
+ 
+ 2003-11-10  Gary Benson  <gbenson@redhat.com>
+ 
+ 	* java/sql/Timestamp.java (valueOf): Correctly handle
+ 	nanoseconds.
+ 
+ 2003-11-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/Inet4Address.java (serialVersionUID): Updated.
+ 
+ 2003-11-07  Stuart Ballard <stuart.ballard@corp.fast.net>
+ 
+ 	* java/util/HashMap.java (putAll): Use Iterator hasNext() method.
+ 	(putAllInternal): Likewise.
+ 	* java/util/Hashtable.java (putAll): Use Iterator hasNext() method.
+ 	(putAllInternal): Likewise.
+ 
+ 2003-11-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* gnu/java/awt/BitwiseXORComposite.java: New file.
+ 	* gnu/java/awt/doc-files: New directory.
+ 	* gnu/java/awt/doc-files/BitwiseXORComposite-1.png: New image.
+ 	* gnu/java/awt/Makefile.am (EXTRA_DIST):
+ 	Added BitwiseXORComposite.java.
+ 
+ 2003-11-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java: New file.
+ 	* gnu/java/awt/Makefile.am
+ 	(EXTRA_DIST): Added ClasspathToolkit.java.
+ 	* gnu/java/awt/image/GdkPixbufDecoder.java,
+ 	gnu/java/awt/image/GtkOffScreenDecoder.java: Removed.
+ 	* gnu/java/awt/image/ImageDecoder.java
+ 	(produce): Made public.
+ 	* gnu/java/awt/image/Makefile.am
+ 	(EXTRA_DIST): Removed GdkPixbufDecoder.java and
+ 	GtkOffScreenDecoder.java.
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkGlyphVector.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: New files.
+ 	* gnu/java/awt/peer/Makefile.am
+ 	(EXTRA_DIST): Added ClasspathFontPeer.java.
+ 	* gnu/java/awt/peer/gtk/Makefile.am
+ 	(EXTRA_DIST): Added GdkClasspathFontPeer.java, GdkGlyphVector.java,
+ 	GdkGraphics2D.java and GdkPixbufDecoder.java.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java:
+ 	Import gnu.java.awt.peer.gtk.GdkPixbufDecoder.
+ 	* include/Makefile.am: Generate and install new file
+ 	gnu_java_awt_peer_gtk_GdkPixbufDecoder.h.
+ 	* include/gnu_java_awt_image_GdkPixbufDecoder.h: Removed.
+ 	* include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: New file.
+ 	* native/jni/gtk-peer/gnu_java_awt_image_GdkPixbufDecoder.c: Removed.
+ 
+ 2003-11-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/SocketPermission.java
+ 	(equals): Removed unneeded obj == null check.
+ 	* java/net/URL.java
+ 	(equals): Removed unneeded obj == null check.
+ 	(getURLStreamHandler): Removed unneeded ph == null check.
+ 
+ 2003-11-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/Checksum.java,
+ 	java/util/zip/ZipConstants.java:
+ 	Removed redundant modifiers.
+ 	* java/util/zip/InflaterInputStream.java:
+ 	Merged copyright with libgcj's version.
+ 
+ 2003-11-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java
+ 	(equals): Removed unneeded obj != null check.
+ 
+ 2003-11-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (AC_CHECK_FUNC): Add ftruncate, fsync and select.
+ 
+ 	* native/target/generic/target_generic_file.h
+ 	(TARGET_NATIVE_FILE_OPEN): Check filedescriptor >= 0 before calling
+ 	fcntl.
+ 
+ 2003-10-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c (create): Turn on
+ 	word wrapping.
+ 
+ 2003-10-29  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (getSize): Return
+ 	scrolled window's size request.
+ 
+ 2003-10-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Helmer Kraemer <hkraemer@freenet.de>
+ 	* java/util/jar/JarInputStream.java (readManifest): Don't call
+ 	closeEntry().
+ 
+ 2003-10-26  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/lang/reflect/AccessibleObject.java (secureSetAccessible):
+ 	Don't check for AccessibleObject. Update javadocs.
+ 
+ 	* java/util/TreeMap.java: Doc fixes. HashMap -> TreeMap.
+ 
+ 2003-10-24  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* javax/naming/spi/NamingManager.java (getContinuationContext): Call
+ 	getObjectInstance() with Object, Name, Context and environment
+ 	Hashtable from exception. Call fillInStackTrace() on exception when
+ 	rethrown.
+ 
+ 2003-10-24  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* javax/naming/InitialContext.java (lookup(Name)): When a
+ 	CannotProceedException is thrown use the ContinuationContext.
+ 	(lookup(String)): Likewise.
+ 	(close): Clear myProps and defaultInitCtx.
+ 
+ 2003-10-24  Ito Kazumitsu <kaz@maczuka.gcd.org>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(scanFormat) corrected so that '%' may appear in a pattern.
+ 
+ 2003-10-24  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (handleEvent):
+ 	Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java (postWindowEvent):
+ 	New method.
+ 	* java/awt/Window.java (Window(Window,GraphicsConfiguration),
+ 	show, hide, dispose, getOwnedWindows): Synchronize on tree lock.
+ 	(dispose): Post WINDOW_CLOSED event.
+ 	(addWindowFocusListener, addWindowStateListener): Assign result
+ 	of multicaster add back to window listener.
+ 	(removeWindowFocusListener, removeWindowStateListener): Assign
+ 	result of multicaster remove back to window listener.
+ 	(dispatchEventImpl): Add null checks for focus and state
+ 	listeners.
+ 	(processWindowEvent): Handle case where windowListener is null
+ 	but state or focus listeners exist.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Add JNI
+ 	glue for postWindowEvent.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_delete_cb, window_destroy_cb, window_show_cb,
+ 	window_focus_in_cb, window_focus_out_cb, window_window_state_cb,
+ 	window_get_new_state): New functions.
+ 	* jni/gtk-peer/gtkpeer.h: Define window event and frame state
+ 	macros.  Declare postWindowEventID.
+ 
+ 2003-10-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	From Guilhem Lavaux  <guilhem.lavaux@free.fr>
+ 	* java/text/DateFormat.java (Field): New public static inner class.
+ 	* java/text/Format.java (Field): Likewise.
+ 	(formatToCharacterIterator): New method.
+ 	* java/text/FormatCharacterIterator.java: New file.
+ 	* java/text/Makefile.am (EXTRA_DIST): Add
+ 	FormatCharacterIterator.java.
+ 
+ 2003-10-24  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* gnu/java/beans/IntrospectionIncubator.java (addMethod): Add public
+ 	static methods.
+ 
+ 2003-10-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	From Guilhem Lavaux  <guilhem.lavaux@free.fr>
+ 	* java/util/Currency.java: New file.
+ 	* java/util/Makefile.am (EXTRA_DIST): Add Currency.java.
+ 
+ 2003-10-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/net/protocol/file/Makefile.am (EXTRA_DIST): Renamed
+ 	FileURLConnection.java to Connection.java.
+ 	* gnu/java/net/protocol/http/Makefile.am (EXTRA_DIST): Renamed
+ 	HttpURLConnection.java to Connection.java.
+ 	* gnu/java/net/protocol/jar/Makefile.am (EXTRA_DIST): Renamed
+ 	JarURLConnection.java to Connection.java.
+ 
+ 2003-10-23  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/CubicCurve2D.java (contains): Docfix for URL of embedded drawing.
+ 	* java/awt/geom/QuadCurve2D.java: Likewise.
+ 
+ 2003-10-23  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/CubicCurve2D.java: Added documentation.
+ 	* java/awt/geom/QuadCurve2D.java: Likewise.
+ 
+ 	* java/awt/geom/doc-files/QuadCurve2D-4.png,
+ 	java/awt/geom/doc-files/QuadCurve2D-5.png,
+ 	java/awt/geom/doc-files/CubicCurve2D-4.png,
+ 	java/awt/geom/doc-files/Cubicurve2D-5.png: New illustrations.
+ 
+ 2003-10-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.java: Indentation fixes.
+ 
+ 2003-10-22  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/CubicCurve2D.java (getFlatnessSq): Implement.
+ 	(subdivide(CubicCurve2D, CubicCurve2D)): Avoid useless object allocation.
+ 	(subdivide(double[],int,double[],int,double[],int)): Implement.
+ 
+ 2003-10-22  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/doc-files/CubicCurve2D-1.png,
+ 	java/awt/geom/doc-files/CubicCurve2D-2.png,
+ 	java/awt/geom/doc-files/CubicCurve2D-3.png: New illustrations.
+ 
+ 2003-10-22  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/QuadCurve2D.java (subdivide): Added documentation.
+ 	java/awt/geom/doc-files/QuadCurve2D-3.png: New illustration.
+ 
+ 2003-10-22  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/QuadCurve2D.java: Reformatted, wrote Javadoc.
+ 	* java/awt/geom/doc-files: New directory.
+ 	* java/awt/geom/doc-files/QuadCurve2D-1.png,
+ 	java/awt/geom/doc-files/QuadCurve2D-2.png: New illustrations.
+ 	
+ 2003-10-22  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/QuadCurve2D.java (subdivide): Implement.
+ 
+ 2003-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationKey.java
+ 	(compareTo): Simplified implementation.
+ 	(equals): Reoved redundant obj == null check.
+ 	* java/text/RuleBasedCollator.java
+ 	(RuleBasedCollator): Throw ParseException instead of
+ 	IllegalArgumentException.
+ 
+ 2003-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(equals): Removed redundant obj == null check.
+ 
+ 2003-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/target/generic/target_generic_file.h
+ 	(TARGET_NATIVE_OPEN_FILE): Set close-on-exec flag.
+ 	* native/target/generic/target_generic_network.h
+ 	(TARGET_NATIVE_NETWORK_SOCKET_OPEN_STREAM): Set close-on-exec flag.
+ 	(TARGET_NATIVE_NETWORK_SOCKET_OPEN_DATAGRAM): Likewise.
+ 
+ 2003-10-21  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/QuadCurve2D.java (getFlatness, getFlatnessSq): Implement.
+ 
+ 2003-10-21  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Fix for Classpath bug #6076.
+ 	* java/awt/geom/GeneralPath.java (append): Re-written.
+ 
+ 2003-10-21  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Fix for Classpath bug #6089.
+ 	* java/awt/geom/GeneralPath.java (curveTo): Set correct segment type.
+ 	(getPathIterator, GeneralPathIterator): Re-written from scratch.
+ 
+ 2003-10-21  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Fix for bug #2944, reported by David Holmes <dholmes@dltech.com.au>
+ 	* java/util/logging/ErrorManager.java (everUsed): Made volatile.
+ 	(error): Synchronize on instance, not class.
+ 
+ 2003-10-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by M.Negovanovic
+ 	* java/beans/Introspector.java (getBeanInfo(ClassLoader, String)): New
+ 	method.
+ 	(reallyFindExplicitBeanInfo): Use new getBeanInfo() method.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/PipeImpl.java
+ 	(PipeImpl): New constructor implementation which takes
+ 	SelectorProvider argument.
+ 	* gnu/java/nio/SelectorProviderImpl.java
+ 	(openPipe): Give SelectorProvider argument to PipeImpl.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(read): Fixed reading into ByteBuffer objects which are backed by an
+ 	array.
+ 	(write): Likewise.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java,
+ 	gnu/java/nio/SelectorImpl.java,
+ 	java/nio/ByteOrder.java,
+ 	java/nio/DirectByteBufferImpl.java,
+ 	java/nio/channels/FileChannelImpl.java:
+ 	Added code to load library with native methods in it.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectorImpl.java: Reformated.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(connected): Removed. Use socket.isConnected() instead.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java,
+ 	gnu/java/net/protocol/http/Connection.java:
+ 	Some reformating.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(inputStream): Made it a BufferedInputStream.
+ 	(outputStream): Made it a BufferedOutputStream.
+ 	(connect): Initialize inputStream and outputStream correctly.
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(proxyHost): New class variable.
+ 	(proxyPort): Likewise.
+ 	(proxyInUse): Likewise.
+ 	(static): New method to initialize proxy variables.
+ 	(connect): connect to proxy if proxy is used.
+ 	(sendRequest): Fixed handling of "Host" request property.
+ 	(usingProxy): Return true if proxy is used.
+ 	* gnu/java/net/protocol/jar/Connection.java
+ 	(Connection): Removed IOException from throws clause. Moved
+ 	initialization if jar_url to connect().
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/RuleBasedCollator.java: Some more reformating.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java:
+ 	Reformated. Renamed some variables to match libgcj's version.
+ 
+ 2003-10-20  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/GeneralPath.java (getCurrentPoint): Return last
+ 	point, not start of subpath.  Fixes Classpath bug #6075.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java:
+ 	Reformated, renamed some in_stream to inputStream in out_stream to
+ 	outputStream.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java
+ 	(native_fd): Made package-private.
+ 	(finalize): New method.
+ 	(getTTL): Call getTimeToLive.
+ 	(setTTL): Call setTimeToLive.
+ 	* gnu/java/net/PlainSocketImpl.java
+ 	(native_fd): Made package-private.
+ 	(finalize): New method.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/HeaderFieldHelper.java: Reformated.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Handler.java,
+ 	gnu/java/net/protocol/http/Handler.java,
+ 	gnu/java/net/protocol/file/Handler.java:
+ 	Some reformating, edited ChangeLog and authors to merge with libgcj.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/RuleBasedCollator.java:
+ 	Renamed some variables, some reformating.
+ 	(RuleBasedCollator): Throw ParseException instead of
+ 	IllegalArgumentException.
+ 
+ 2003-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/FileURLConnection.java,
+ 	gnu/java/net/protocol/http/HttpURLConnection.java,
+ 	gnu/java/net/protocol/jar/JarURLConnection.java:
+ 	Removed.
+ 	* gnu/java/net/protocol/file/Connection.java,
+ 	gnu/java/net/protocol/http/Connection.java,
+ 	gnu/java/net/protocol/jar/Connection.java:
+ 	New files.
+ 	* gnu/java/net/protocol/jar/Handler.java,
+ 	gnu/java/net/protocol/http/Handler.java,
+ 	gnu/java/net/protocol/file/Handler.java,
+ 	gnu/java/lang/SystemClassLoader.java:
+ 	Use new files.
+ 
+ 2003-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/FileURLConnection.java,
+ 	gnu/java/net/protocol/http/HttpURLConnection.java,
+ 	gnu/java/net/protocol/jar/JarURLConnection.java:
+ 	Reformated.
+ 
+ 2003-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java,
+ 	gnu/java/net/protocol/http/Handler.java,
+ 	gnu/java/net/protocol/jar/Handler.java:
+ 	Reformated.
+ 
+ 2003-10-18  Ralph Loader  <rcl@ihug.co.nz>
+ 
+ 	* java/lang/StringBuffer.java (getChars): Fix array index checks.
+ 	(append, substring, insert): Likewise.
+ 
+ 2003-10-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/reflect/Proxy.java (generate): Pass protection domain
+ 	to VMClassLoader.defineClass.
+ 
+ 2003-10-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by M.Negovanovic
+ 	* java/beans/IndexedPropertyDescriptor.java
+ 	(IndexedPropertyDescriptor): this.setIndex = setIndex, not getIndex.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/RuleBasedCollator.java
+ 	(RuleBasedCollator): Renamed i to index and save rules.length() to
+ 	temporary variable.
+ 	(getCollationElementIterator): Fixed documentation.
+ 	(getCollationKey): Fixed documentation.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/RuleBasedCollator.java:
+ 	Some reformating.
+ 	(CollationElement): Made final.
+ 	(compare): Renamed s1 to source and s2 to target.
+ 	(getCollationElementIterator): Renamed str to source,
+ 	replaced while loop with for loop.
+ 	(getCollationKey): Renamed str to source.
+ 	(getCollationElementValue): Likewise.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(CollationElementIterator): Exchange arguments, call setText.
+ 	(next): Reformated.
+ 	(reset): Reformated.
+ 	(setText): Fixed documentation, added @since tag, reformated.
+ 	(getOffset): Added @since tag, reformated.
+ 	(previous): Reformated.
+ 	* java/text/CollationKey.java
+ 	(getSourceString): Reformated.
+ 	(hashCode): Reformated.
+ 	(toByteArray): Reformated.
+ 	* java/text/RuleBasedCollator.java: Reordered all methods to match
+ 	order in libgcj.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/AttributedCharacterIterator.java,
+ 	java/text/CharacterIterator.java:
+ 	Reformated.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/AttributedCharacterIterator.java,
+ 	java/text/CharacterIterator.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIOSocket.java
+ 	(setChannel): Initialize impl.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(ServerSocketChannelImpl): Made class public final.
+ 	(serverSocket): Made it a NIOServerSocket.
+ 	(getNativeFD): New method.
+ 	(implConfigureBlocking): Set socket timeout.
+ 	(accept): Rewritten.
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(register): Use ServerSocketChannelSelectionKey for server socket
+ 	channels, removed comments.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(impl): New member variable.
+ 	(SocketChannelImpl): Initialize impl.
+ 	(getImpl): New method.
+ 	* gnu/java/nio/NIOServerSocket.java,
+ 	gnu/java/nio/ServerSocketChannelSelectionKey.java: New files.
+ 	* gnu/java/nio/Makefile.am (EXTRA_DIST):
+ 	Added NIOServerSocket.java and ServerSocketChannelSelectionKey.java.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Map.java,
+ 	java/util/Observer.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/server/ProtocolConstants.java,
+ 	gnu/java/security/der/DER.java,
+ 	java/net/URLStreamHandlerFactory.java,
+ 	java/rmi/activation/ActivationInstantiator.java,
+ 	java/rmi/activation/ActivationMonitor.java,
+ 	java/rmi/activation/ActivationSystem.java,
+ 	java/rmi/activation/Activator.java:
+ 	Removed redundant modifiers.
+ 	* java/sql/DatabaseMetaData.java,
+ 	java/sql/ParameterMetaData.java,
+ 	java/sql/PreparedStatement.java:
+ 	Readded accidently removed modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java: Reformated.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(caseSensitive): New class varibale indicatinc case sensitivity.
+ 	Currently set to true statically to support only case sensitive file
+ 	systems.
+ 	(equals): Support case sensitivity (in general).
+ 	(getParentFile): Simplified.
+ 	(hashCode): Support case sensitivity (in general).
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java
+ 	(hasRemaining): Made implementation more clear.
+ 	* java/nio/MappedByteBuffer.java
+ 	(loaded): New member variable.
+ 	(force): Added comment.
+ 	(isLoaded): Return value of loaded.
+ 	(load): Set loaded to true, added comment.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java
+ 	(getImpl): New package private method to be accessed only by Java NIO.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(jarFileURL): Made final.
+ 	(entryName): Renamed from entry_name, made file.
+ 	(getJarEntry): Renamed file to jarFile.
+ 	(getCertificates): Check getJarEntry() != null.
+ 	(getMainAttributes): Check getManifest() != null.
+ 	* java/net/URLConnection.java
+ 	(def_req_props): Removed, obsoleted since JDK 1.3.
+ 	(): Renamed d to date.
+ 	(toString): Print class name.
+ 	(): Added possible exceptions in documentation.
+ 	(setRequestProperty): Check for key == null and connection state.
+ 	(addRequestProperty): Check for key == null, fixed documentation.
+ 	(getRequestProperty): Check for connection state.
+ 	(getRequestProperties): Check for connection state.
+ 	(setDefaultRequestProperty): Does nothing since JDK 1.3.
+ 	(getDefaultRequestProperty): Likewise.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(registered): Made private.
+ 	(blocking): Likewise.
+ 	(LOCK): Likewise.
+ 	(provider): Likewise.
+ 	(keys): Made it a private LinkedList.
+ 	(AbstractSelectableChannel): Initialize keys.
+ 	(isRegistered): New implementation.
+ 	(locate): Rewritten.
+ 	(register): Rewritten.
+ 	* java/nio/channels/spi/AbstractSelectionKey.java
+ 	(ok): Removed.
+ 	(cancelled): New member variable.
+ 	(cancel): Rewritten.
+ 	(isValid): Rewritten.
+ 	* java/nio/channels/spi/AbstractSelector.java:
+ 	Some methods moved.
+ 	(closed): Make private.
+ 	(provider): Likewise.
+ 	(cancelledKeys): New member variable.
+ 	(AbstractSelector): Initialize cancelledKeys.
+ 	(cancelKey): New method.
+ 	* java/nio/channels/spi/SelectorProvider.java
+ 	(pr): Removed.
+ 	(systemDefaultProvider): New member variable.
+ 	(provider): Made it synchronized, use property
+ 	java.nio.channels.spi.SelectorProvider.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FilePermission.java
+ 	(implies): Removed unused local variables.
+ 	* java/io/ObjectStreamClass.java
+ 	(getObjectStreamClasses): Removed unused local variable.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/Attribute.java,
+ 	javax/print/attribute/AttributeSet.java,
+ 	javax/print/attribute/PrintRequestAttributeSet.java,
+ 	javax/transaction/Status.java,
+ 	javax/transaction/Synchronization.java,
+ 	javax/transaction/Transaction.java,
+ 	javax/transaction/TransactionManager.java,
+ 	javax/transaction/UserTransaction.java,
+ 	javax/transaction/xa/XAResource.java,
+ 	javax/transaction/xa/Xid.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/event/AncestorListener.java,
+ 	javax/swing/event/CaretListener.java,
+ 	javax/swing/event/CellEditorListener.java,
+ 	javax/swing/event/ChangeListener.java,
+ 	javax/swing/event/DocumentEvent.java,
+ 	javax/swing/event/DocumentListener.java,
+ 	javax/swing/event/HyperlinkListener.java,
+ 	javax/swing/event/InternalFrameListener.java,
+ 	javax/swing/event/ListDataListener.java,
+ 	javax/swing/event/ListSelectionListener.java,
+ 	javax/swing/event/MenuDragMouseListener.java,
+ 	javax/swing/event/MenuKeyListener.java,
+ 	javax/swing/event/MenuListener.java,
+ 	javax/swing/event/MouseInputListener.java,
+ 	javax/swing/event/PopupMenuListener.java,
+ 	javax/swing/event/TableColumnModelListener.java,
+ 	javax/swing/event/TableModelListener.java,
+ 	javax/swing/event/TreeExpansionListener.java,
+ 	javax/swing/event/TreeModelListener.java,
+ 	javax/swing/event/TreeSelectionListener.java,
+ 	javax/swing/event/TreeWillExpandListener.java,
+ 	javax/swing/event/UndoableEditListener.java,
+ 	javax/swing/table/DefaultTableModel.java,
+ 	javax/swing/table/TableCellEditor.java,
+ 	javax/swing/table/TableCellRenderer.java,
+ 	javax/swing/table/TableColumnModel.java,
+ 	javax/swing/table/TableModel.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/Document.java,
+ 	javax/swing/text/MutableAttributeSet.java,
+ 	javax/swing/text/StyledDocument.java,
+ 	javax/swing/text/ViewFactory.java,
+ 	javax/swing/tree/DefaultMutableTreeNode.java,
+ 	javax/swing/tree/MutableTreeNode.java,
+ 	javax/swing/tree/RowMapper.java,
+ 	javax/swing/tree/TreeCellEditor.java,
+ 	javax/swing/tree/TreeCellRenderer.java,
+ 	javax/swing/tree/TreeModel.java,
+ 	javax/swing/tree/TreeNode.java,
+ 	javax/swing/tree/TreeSelectionModel.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/Action.java,
+ 	javax/swing/BoundedRangeModel.java,
+ 	javax/swing/CellEditor.java,
+ 	javax/swing/ComboBoxEditor.java,
+ 	javax/swing/ComboBoxModel.java,
+ 	javax/swing/DesktopManager.java,
+ 	javax/swing/JComboBox.java,
+ 	javax/swing/ListCellRenderer.java,
+ 	javax/swing/ListSelectionModel.java,
+ 	javax/swing/MenuElement.java,
+ 	javax/swing/MutableComboBoxModel.java,
+ 	javax/swing/Renderer.java,
+ 	javax/swing/RootPaneContainer.java,
+ 	javax/swing/ScrollPaneConstants.java,
+ 	javax/swing/SingleSelectionModel.java,
+ 	javax/swing/SpinnerModel.java,
+ 	javax/swing/SwingConstants.java,
+ 	javax/swing/UIDefaults.java,
+ 	javax/swing/WindowConstants.java,
+ 	javax/swing/border/Border.java,
+ 	javax/swing/colorchooser/ColorSelectionModel.java,
+ 	javax/swing/plaf/UIResource.java,
+ 	javax/swing/plaf/metal/MetalLookAndFeel.java,
+ 	javax/swing/undo/StateEditable.java,
+ 	javax/swing/undo/UndoableEdit.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/Context.java,
+ 	javax/naming/Name.java,
+ 	javax/naming/NameParser.java,
+ 	javax/naming/NamingEnumeration.java,
+ 	javax/naming/Referenceable.java,
+ 	javax/naming/directory/Attribute.java,
+ 	javax/naming/directory/Attributes.java,
+ 	javax/naming/directory/DirContext.java,
+ 	javax/naming/event/EventContext.java,
+ 	javax/naming/event/EventDirContext.java,
+ 	javax/naming/event/NamespaceChangeListener.java,
+ 	javax/naming/event/NamingListener.java,
+ 	javax/naming/event/ObjectChangeListener.java,
+ 	javax/naming/ldap/Control.java,
+ 	javax/naming/ldap/ExtendedRequest.java,
+ 	javax/naming/ldap/ExtendedResponse.java,
+ 	javax/naming/ldap/HasControls.java,
+ 	javax/naming/ldap/LdapContext.java,
+ 	javax/naming/ldap/UnsolicitedNotification.java,
+ 	javax/naming/ldap/UnsolicitedNotificationListener.java,
+ 	javax/naming/spi/DirObjectFactory.java,
+ 	javax/naming/spi/DirStateFactory.java,
+ 	javax/naming/spi/InitialContextFactory.java,
+ 	javax/naming/spi/InitialContextFactoryBuilder.java,
+ 	javax/naming/spi/ObjectFactory.java,
+ 	javax/naming/spi/ObjectFactoryBuilder.java,
+ 	javax/naming/spi/Resolver.java,
+ 	javax/naming/spi/StateFactory.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/sql/Array.java,
+ 	java/sql/Blob.java,
+ 	java/sql/CallableStatement.java,
+ 	java/sql/Clob.java,
+ 	java/sql/Connection.java,
+ 	java/sql/DatabaseMetaData.java,
+ 	java/sql/Driver.java,
+ 	java/sql/ParameterMetaData.java,
+ 	java/sql/PreparedStatement.java,
+ 	java/sql/Ref.java,
+ 	java/sql/ResultSet.java,
+ 	java/sql/ResultSetMetaData.java,
+ 	java/sql/SQLData.java,
+ 	java/sql/SQLInput.java,
+ 	java/sql/SQLOutput.java,
+ 	java/sql/Savepoint.java,
+ 	java/sql/Statement.java,
+ 	java/sql/Struct.java,
+ 	javax/sql/ConnectionEventListener.java,
+ 	javax/sql/ConnectionPoolDataSource.java,
+ 	javax/sql/DataSource.java,
+ 	javax/sql/PooledConnection.java,
+ 	javax/sql/RowSet.java,
+ 	javax/sql/RowSetInternal.java,
+ 	javax/sql/RowSetListener.java,
+ 	javax/sql/RowSetMetaData.java,
+ 	javax/sql/RowSetReader.java,
+ 	javax/sql/RowSetWriter.java,
+ 	javax/sql/XAConnection.java,
+ 	javax/sql/XADataSource.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/sql/Array.java,
+ 	java/sql/Blob.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Key.java,
+ 	java/security/PrivateKey.java,
+ 	java/security/PublicKey.java,
+ 	java/security/acl/Acl.java,
+ 	java/security/acl/AclEntry.java,
+ 	java/security/acl/Group.java,
+ 	java/security/acl/Owner.java,
+ 	java/security/acl/Permission.java,
+ 	java/security/cert/X509Extension.java,
+ 	java/security/interfaces/DSAKey.java,
+ 	java/security/interfaces/DSAKeyPairGenerator.java,
+ 	java/security/interfaces/DSAParams.java,
+ 	java/security/interfaces/DSAPrivateKey.java,
+ 	java/security/interfaces/DSAPublicKey.java,
+ 	java/security/interfaces/RSAKey.java,
+ 	java/security/interfaces/RSAPrivateCrtKey.java,
+ 	java/security/interfaces/RSAPrivateKey.java,
+ 	java/security/interfaces/RSAPublicKey.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/Channel.java,
+ 	java/nio/channels/GatheringByteChannel.java,
+ 	java/nio/channels/ReadableByteChannel.java,
+ 	java/nio/channels/ScatteringByteChannel.java,
+ 	java/nio/channels/WritableByteChannel.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/Externalizable.java,
+ 	java/io/FileFilter.java,
+ 	java/io/ObjectInput.java,
+ 	java/io/ObjectInputValidation.java,
+ 	java/io/ObjectOutput.java,
+ 	java/io/ObjectStreamConstants.java,
+ 	java/io/Serializable.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ContentHandlerFactory.java,
+ 	java/net/DatagramSocketImplFactory.java,
+ 	java/net/FileNameMap.java,
+ 	java/net/SocketImplFactory.java,
+ 	java/net/SocketOptions.java:
+ 	Removing redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/dgc/DGC.java,
+ 	java/rmi/registry/Registry.java,
+ 	java/rmi/registry/RegistryHandler.java,
+ 	java/rmi/server/LoaderHandler.java,
+ 	java/rmi/server/RMIClientSocketFactory.java,
+ 	java/rmi/server/RMIFailureHandler.java,
+ 	java/rmi/server/RMIServerSocketFactory.java,
+ 	java/rmi/server/RemoteCall.java,
+ 	java/rmi/server/RemoteRef.java,
+ 	java/rmi/server/ServerRef.java,
+ 	java/rmi/server/Skeleton.java,
+ 	java/rmi/server/Unreferenced.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/AppletInitializer.java,
+ 	java/beans/BeanInfo.java,
+ 	java/beans/Customizer.java,
+ 	java/beans/DesignMode.java,
+ 	java/beans/PropertyEditor.java,
+ 	java/beans/Visibility.java,
+ 	java/beans/beancontext/BeanContext.java,
+ 	java/beans/beancontext/BeanContextChild.java,
+ 	java/beans/beancontext/BeanContextChildComponentProxy.java,
+ 	java/beans/beancontext/BeanContextChildSupport.java,
+ 	java/beans/beancontext/BeanContextContainerProxy.java,
+ 	java/beans/beancontext/BeanContextMembershipListener.java,
+ 	java/beans/beancontext/BeanContextProxy.java,
+ 	java/beans/beancontext/BeanContextServiceProvider.java,
+ 	java/beans/beancontext/BeanContextServiceProviderBeanInfo.java,
+ 	java/beans/beancontext/BeanContextServiceRevokedListener.java,
+ 	java/beans/beancontext/BeanContextServices.java,
+ 	java/beans/beancontext/BeanContextServicesListener.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/ActiveEvent.java,
+ 	java/awt/datatransfer/ClipboardOwner.java,
+ 	java/awt/datatransfer/FlavorMap.java,
+ 	java/awt/datatransfer/Transferable.java,
+ 	java/awt/dnd/Autoscroll.java,
+ 	java/awt/dnd/peer/DragSourceContextPeer.java,
+ 	java/awt/dnd/peer/DropTargetContextPeer.java,
+ 	java/awt/dnd/peer/DropTargetPeer.java,
+ 	java/awt/font/MultipleMaster.java,
+ 	java/awt/font/OpenType.java,
+ 	java/awt/im/spi/InputMethodDescriptor.java,
+ 	java/awt/image/ImageConsumer.java,
+ 	java/awt/image/ImageObserver.java,
+ 	java/awt/image/ImageProducer.java,
+ 	java/awt/image/RGBImageFilter.java,
+ 	java/awt/image/RasterOp.java,
+ 	java/awt/image/renderable/RenderableImage.java,
+ 	java/awt/peer/ButtonPeer.java,
+ 	java/awt/peer/CheckboxMenuItemPeer.java,
+ 	java/awt/peer/CheckboxPeer.java,
+ 	java/awt/peer/ChoicePeer.java,
+ 	java/awt/peer/ComponentPeer.java,
+ 	java/awt/peer/ContainerPeer.java,
+ 	java/awt/peer/DialogPeer.java,
+ 	java/awt/peer/FileDialogPeer.java,
+ 	java/awt/peer/FramePeer.java,
+ 	java/awt/peer/LabelPeer.java,
+ 	java/awt/peer/ListPeer.java,
+ 	java/awt/peer/MenuBarPeer.java,
+ 	java/awt/peer/MenuComponentPeer.java,
+ 	java/awt/peer/MenuItemPeer.java,
+ 	java/awt/peer/MenuPeer.java,
+ 	java/awt/peer/PopupMenuPeer.java,
+ 	java/awt/peer/RobotPeer.java,
+ 	java/awt/peer/ScrollPanePeer.java,
+ 	java/awt/peer/ScrollbarPeer.java,
+ 	java/awt/peer/TextAreaPeer.java,
+ 	java/awt/peer/TextComponentPeer.java,
+ 	java/awt/peer/TextFieldPeer.java,
+ 	java/awt/peer/WindowPeer.java,
+ 	java/awt/print/Pageable.java,
+ 	java/awt/print/Printable.java,
+ 	java/awt/print/PrinterGraphics.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainSocketImpl.java: Added classes SocketInputStream
+ 	and SocketOutputStream.
+ 	* gnu/java/net/SocketInputStream.java: Removed.
+ 	* gnu/java/net/SocketOutputStream.java: Removed.
+ 	* gnu/java/net/Makefile.am (EXTRA_DIST): Removed removed files.
+ 
+ 2003-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(isSiteLocalAddress): Made hexadecimal numbers lowercase.
+ 	(getLocalHostname): Renamed from getLocalHostName, fixed
+ 	documentation.
+ 	(aton): New method.
+ 	(getByName): Moved functionality to aton(), simplified code.
+ 	(getLocalHost): Reformated.
+ 	(lookupInaddrAny): Reformated.
+ 	* include/java_net_InetAddress.h: Regenerated.
+ 	* native/jni/java-net/java_net_InetAddress.c
+ 	(getLocalHostname): Renamed from getLocalHostName.
+ 
+ 2003-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/math/BigInteger.java
+ 	(add): Removed unused local variable len.
+ 
+ 2003-10-08  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java (handleEvent): Remove
+ 	modality check.
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (initializeInsets):
+ 	Initialize insets to use latest insets.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java (latestInsets): New
+ 	field.
+ 	(postConfigureEvent): Update latestInsets field when insets
+ 	change.  Remove call to setSize.  Move validate call outside of
+ 	if blocks.
+ 	(setVisible): Call setBounds before showing window.
+ 	(nativeSetVisible): New native method.
+ 	* java/awt/Window.java (show): Show visible owned windows.
+ 	(hide): Hide visible owned windows.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(awt_event_handler): Implement modality using GTK grabs.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(global_gtk_window_group): New global variable.
+ 	(gtkInit): Initialize global_gtk_window_group.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create):
+ 	Clamp width and height values to at least 1.  Add this window to
+ 	the global GTK window group.
+ 	(setVisible): Rename to nativeSetVisible.
+ 	(setup_window): Remove function.
+ 	(setSize): Clamp width and height values to at least 1.
+ 	(nativeSetBounds): Likewise.
+ 	(gdk_window_get_root_geometry): Remove function.
+ 	* jni/gtk-peer/gtkpeer.h: Remove gdk_window_get_root_geometry
+ 	and setup_window declarations.  Declare global_gtk_window_group.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(gtkSetFont): Handle BOLD and ITALIC style specifiers.
+ 	(gtkWidgetSetForeground): New method.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetSetBackground, gtkWidgetSetForeground): New methods.
+ 	(setBackground, setForeground): Implement.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(gtkSetFont): Handle BOLD and ITALIC style specifiers.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
+ 	Position PangoLayout relative to text's baseline.
+ 	* jni/gtk-peer/gtkpeer.h: Define AWT font style constants.
+ 
+ 	* java/awt/FlowLayout.java (layoutContainer): Fix offset problem
+ 	for CENTER and RIGHT alignments.
+ 
+ 2003-10-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/StrictMath.java (toDegrees): Multiply before
+ 	dividing.
+ 	(toRadians): Likewise.
+ 
+ 	* java/lang/reflect/Proxy.java (generate): Removed comment about
+ 	security hole.
+ 
+ 2003-10-08  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java (setEnabled): Stub
+ 	out.
+ 	* jni/classpath/jcl.c [!__GNUC__]: Elide __attribute__.
+ 	(JCL_free): Attach "unused" attribute to env parameter.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,
+ 	jni/gtk-peer/gthread-jni.c: Attach "unused" attribute to unused
+ 	parameters.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c:
+ 	(initNativeState): Pass 0 as info argument to
+ 	gtk_selection_add_target.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	(setVisible, gtkFixedNew, gtkFixedPut, gtkFixedMove): Remove
+ 	unused method implementations.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(awt_event_handler): Add break statement after default label.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
+ 	(drawPixels): Remove unused variable i.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(setEnabled): Remove method implementation.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(accel_attach): Call _gtk_accel_group_attach with G_OBJECT
+ 	argument.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (sr): Remove
+ 	unused function.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ 	(menu_pos): Assign TRUE to push_in.
+ 	(setupAccelGroup): Call _gtk_accel_group_attach with G_OBJECT
+ 	argument.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
+ 	(create): Remove unused variable layout.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create):
+ 	Pass window_widget, rather than window, to
+ 	gtk_widget_set_size_request.
+ 	* jni/gtk-peer/gthread-jni.c (g_thread_jni_functions): Fill out
+ 	structure initialization with NULL values.
+ 	* jni/gtk-peer/gtkpeer.h [!__GNUC__]: Elide __attribute__.
+ 
+ 2003-10-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (gtkTextGetSize):
+ 	Remove unused parameters.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (gtkEntryGetSize):
+ 	Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(keyevent_state_to_awt_mods): Export function.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(getCaretPosition): Fix TextArea case.
+ 	(textcomponent_commit_cb): Get exact event time and modifier
+ 	state.
+ 	* jni/gtk-peer/gtkpeer.h: Declare keyevent_state_to_awt_mods.
+ 
+ 2003-10-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Security.java: Merged formating with libgcj,
+ 	added non-breaking space in documentation.
+ 
+ 2003-10-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Security.java
+ 	(providersList): Renamed to "providers".
+ 	(providersInited): Removed.
+ 	(static): New static initializer.
+ 	(providers): Removed.
+ 
+ 2003-10-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/server/RMIClassLoader.java: Reformated to match libgcj's
+ 	version more.
+ 	(defaultAnnotation): Added comment.
+ 
+ 2003-10-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java
+ 	(ServerSocket): New package-private constructor used by java.nio.
+ 
+ 2003-10-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBufferHelper.java:
+ 	Rewrote all methods by suggestions from Eric Blake.
+ 
+ 2003-10-02  Arnaud Vandyck <arnaud.vandyck@ulg.ac.be>
+ 
+ 	* javax/swing/table/AbstractTableModel.java
+ 	(getColumnName): Simplified code much. Thanks to Yannick Boogaerts who
+ 	helped stop pulling my hair on this +1 then -1 tricky thing!
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/SimpleDateFormat.java
+ 	(compileFormat): Character.isLetter(char) allows too much characters.
+ 	Replace it with Character.isLowerCase(char) ||
+ 	Character.isUpperCase(char).
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/prefs/Preferences.java
+ 	(defaultFactoryClass): Fixed default factory class name.
+ 	(getFactory): Instantiate factory class.
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(isSiteLocalAddress): New method.
+ 	(isMCLinkLocal): New method.
+ 	(getByAddress): Call getByAddress alternative instead of implementing
+ 	it again.
+ 	(getAllByName): Added security manager check.
+ 	(getLocalHost): Fixed documentation.
+ 	(readResolve): Added documentation.
+ 
+ 2003-10-02  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/net/InetSocketAddress.java
+ 	(InetSocketAddress): Made exception more clear.
+ 	(equals): Handle case when addr is null.
+ 	(toString): Likewise.
+ 	* java/net/NetworkInterface.java
+ 	(static): Load native library.
+ 	(getNetworkInterfaces): Rewritten.
+ 
+ 2003-10-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (insets): New
+ 	field.
+ 	(initializeInsets): New method.
+ 	(GtkComponentPeer): Call initializeInsets.  Call setCursor and
+ 	setBounds unconditionally.
+ 	(setBounds): Convert coordinates if parent is a Window.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (insets): Move
+ 	field to GtkComponentPeer.
+ 	(GtkContainerPeer): Don't initialize insets.
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (initializeInsets):
+ 	New method.
+ 	(create): Call new GtkWindowPeer create method.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (initializeInsets):
+ 	New method.
+ 	(create): Call new GtkWindowPeer create method.
+ 	(setBounds): Remove method.
+ 	(postConfigureEvent): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java: Replace GTK window
+ 	type constants with GDK window type constants.
+ 	(create(int,boolean,int,int,GtkWindowPeer)): New method.
+ 	(create(int,boolean)): Likewise.
+ 	(create()): Call create(int,boolean).
+ 	(nativeSetBounds): New native method declaration.
+ 	(setBounds): Call native method declaration.
+ 	(setSize): New native method declaration.
+ 	(setBoundsCallback): Likewise.
+ 	(postConfigureEvent): Handle change in insets.  Call setSize and
+ 	setBoundsCallback methods.
+ 	* java/awt/Window.java (Window): Set visible to false.
+ 	(setBoundsCallback): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetGetLocationOnScreen): If this component is not a
+ 	container, adjust the location returned based on the peer's
+ 	allocation.
+ 	(set(String,boolean)): Revert change from 2003-09-19.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(awt_event_handler): Fix inset calculation.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Add JNI
+ 	glue for Window.setBoundsCallback.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create):
+ 	Set up stacking order, window decorations and window manager
+ 	hints.
+ 	(setBoundsCallback): New method.
+ 	(setSize): New method.
+ 	(nativeSetBounds): New method.
+ 	* jni/gtk-peer/gtkpeer.h: Declare setBoundsCallbackID.
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(toString): Got of StringBuffer, return SUN compliant string.
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(isAnyLocalAddress): New method.
+ 	(isLoopbackAddress): New method.
+ 	(getAddress): Clone addr instead of copying it ourself.
+ 	(hashCode): Merge much simpler (but SUN conform) code from libgcj.
+ 	(equals): Renamed "test_ip" to "addr2".
+ 	(getByName): Added security manager check, fixed documentation.
+ 	(getAllByName): Fixed documentation.
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java
+ 	(DEFAULT_SEARCH_PATH): Added sun.net.www.protocol to search path.
+ 	(ph_cache): Made it a HashMap.
+ 	(ph_search_path): Removed.
+ 	(static): Removed initialization of ph_search_path.
+ 	(getURLStreamHandler): Get java.protocol.handler.pkgs property and
+ 	append DEFAULT_SEARCH_PATH locally.
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/classpath/Configuration.java.in
+ 	(default_awt_peer_toolkit) :
+ 	New member variable for default AWT toolkit.
+ 	* java/awt/Toolkit.java
+ 	(default_toolkit_name): Initialize with
+ 	gnu.classpath.Configuration.default_awt_peer_toolkit.
+ 
+ 2003-09-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/AbstractTableModel.java
+ 	(findColumnName): Prevent from NullPointerException if argument
+ 	columnName is null.
+ 
+ 2003-09-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/AbstractTableModel.java:
+ 	This patch is based on a patch done by Arnaud Vandyck
+ 	<arnaud.vandyck@ulg.ac.be>.
+ 	(getColumnName): Fixed method documentation.
+ 	(findColumn): Likewise.
+ 	(getColumnClass): Likewise.
+ 	(isCellEditable): Likewise.
+ 	(setValueAt): Likewise.
+ 	(addTableModelListener): Likewise.
+ 	(removeTableModelListener): Likewise.
+ 	(getTableModelListeners): New method.
+ 
+ 2003-09-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/AbstractTableModel.java:
+ 	Reformated.
+ 
+ 2003-09-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(isLinkLocalAddress): New method.
+ 	(isMCGlobal): Likewise.
+ 	(isMCNodeLocal): Likewise.
+ 	(isMCSiteLocal): Likewise.
+ 	(isMCOrgLocal): Likewise.
+ 
+ 2003-09-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java: Reformatted.
+ 	* java/net/URL.java
+ 	(DEFAULT_SEARCH_PATH): New constant for default handler search path.
+ 	(static): Use DEFAULT_SEARCH_PATH instead of static string.
+ 	(getURLStreamHandler): Put instances of the handlers into the cache.
+ 
+ 2003-09-28  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/text/DateFormat.java (format): Throw IllegalArgumentException
+ 	if `obj' is not a Number or Date instance.
+ 	* java/text/SimpleDateFormat.java (tokens): Make it an ArrayList
+ 	instead of Vector.
+ 
+ 2003-09-28  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/text/SimpleDateFormat.java (parse): Revert patch of 2003-09-09.
+ 	Don't call setTimeZone on calendar.
+ 
+ 2003-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java: Reordered several methods to match order
+ 	in libgcj's version of InetAddress.java. Some code got reformated too.
+ 
+ 2003-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* AUTHORS: Added myself.
+ 
+ 2003-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java (getURLStreamHandler):
+ 	Initialize ph, make loop over StringTokenizer more efficient
+ 	a.k.a. do eventually less loops.
+ 
+ 2003-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/IndexColorModel.java: Reformated.
+ 
+ 2003-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java (getURLStreamHandler):
+ 	Try to put handler into cache only once. Reformat some code
+ 	to match libgcj more.
+ 
+ 2003-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java,
+ 	gnu/java/net/PlainSocketImpl.java:
+ 	(getNativeFD): New method.
+ 	* gnu/java/nio/DatagramChannelImpl.java,
+ 	gnu/java/nio/DatagramChannelSelectionKey.java,
+ 	gnu/java/nio/SelectionKeyImpl.java,
+ 	gnu/java/nio/SelectorImpl.java,
+ 	gnu/java/nio/SocketChannelImpl.java:
+ 	Many fixes, I cant write them all down here again.
+ 	Files are merged from libgcj.
+ 	* gnu/java/nio/DatagramChannelSelectionKey.java,
+ 	gnu/java/nio/SocketChannelSelectionKey.java:
+ 	New files.
+ 	* gnu/java/nio/Makefile.am (EXTRA_DIST):
+ 	Added DatagramChannelSeclectionKey.java and
+ 	SocketChannelSelectionKey.java.
+ 
+ 2003-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBufferHelper.java:
+ 	Totally reworked with help from Eric Blake.
+ 
+ 2003-09-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/geom/RoundRectangle2D.java (getPathIterator): Wrote.
+ 	* java/awt/geom/PathIterator.java: Documentation fixes.
+ 
+ 2003-09-26  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/image/SinglePixelPackedSampleModel.java (createDataBuffer): 
+ 	Save space for some pixels at the buffer end.  Added Javadoc.
+ 
+ 2003-09-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java (writeFields): Fixed
+ 	indentation.
+ 	(putFields): Likewise.
+ 
+ 2003-09-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (create()): Create a
+ 	top-level GTK window.
+ 	(getArgs): Add "title" property.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java (setResizable): Use
+ 	"allow_shrink" and "allow_grow" properties.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Remove
+ 	unused GtkArg code.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(create): Set window's size requisition.
+ 	(connectHooks): Fix indentation.
+ 	(setResizable): Remove function.
+ 	(static setBounds): Likewise.
+ 	(setBounds): Replace call to setBounds with GTK size requisition
+ 	and resize calls.
+ 
+ 	* java/awt/Dialog.java: Initialize resizable to true and change
+ 	comments accordingly.  Initialize visible to false in
+ 	constructors.
+ 	* java/awt/Frame.java (dispose): Remove method.
+ 	* java/awt/Window.java (ownedWindows): New field.
+ 	(Window(Window,GraphicsConfiguration)): Add a weak reference to
+ 	owner's ownedWindows vector.
+ 	(finalize): Remove method.
+ 	(hide): Hide owned windows.
+ 	(dispose): Dispose of owned windows.
+ 	(getOwnedWindows): Implement.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java:
+ 	Reordered imports.
+ 	* gnu/java/net/PlainSocketImpl.java:
+ 	Removed import for java.net.NetworkInterface.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(implSelect): Renamed from java_do_select.
+ 	(select): Made final, throws IOException,
+ 	call native implSelect() and add support for Thread interruption.
+ 	(selectNow): Made final, throws IOException.
+ 	(getFDsAsArray): Made final.
+ 	(selectedKeys): Likewise.
+ 	(wakeup): Likewise.
+ 	(deregisterCancelledKeys): Likewise.
+ 	(register): Likewise.
+ 	(ass): Removed.
+ 	(add_selected): Removed.
+ 
+ 2003-09-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Math.java (min): Revert to using != for NaN
+ 	detection.
+ 	(max): Likewise.
+ 	(round): Likewise.
+ 
+ 2003-09-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/nio/Makefile.am (EXTRA_DIST): Add ByteBufferHelper.java. 
+ 	* java/lang/Makefile.am (EXTRA_DIST): Add Thread.java.
+ 	* vm/reference/java/lang/Makefile.am (EXTRA_DIST): Remove Thread.java.
+ 	Add VMThread.java.
+ 
+ 2003-09-25  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/image/Raster.java(Raster): Interpret null origin as (0,0).
+ 	* java/awt/image/WritableRaster.java(WritableRaster): Likewise.
+ 
+ 2003-09-25  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/image/BufferedImage.java (toString): Implement.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/java_lang_reflect_Array.h: Regenerated.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(DatagramChannelImpl): Made class final.
+ 	(blocking): Made private.
+ 	(socket): Made it a NIODatagramSocket and private.
+ 	(DatagramChannelImpl): create NIODatagramSocket instead of
+ 	DatagramSocket.
+ 	(implConfigureBlocking): Set socket timeout.
+ 	(connect): Check that channel is not closed.
+ 	(write): Implemented.
+ 	(write): Rewritten.
+ 	(read): Implemented.
+ 	(read): Rewritten.
+ 	(receive): Implemented.
+ 	(send): Implemented.
+ 	* gnu/java/nio/SelectionKeyImpl.java
+ 	(readyOps): Made private.
+ 	(interestOps): Made private.
+ 	(impl): Made private.
+ 	(ch): Made private.
+ 	(readyOps): Check if selection key is valid.
+ 	(interestOps): Likewise.
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(closed): Removed.
+ 	(keys): Made private.
+ 	(selected): Made private.
+ 	(finalize): New method.
+ 	(implCloseSelector): Rewritten.
+ 	(keys): Return unmodifiable Set.
+ 	(deregisterCancelledKeys): Fixed typo in method name.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(SocketChannelImpl): Made class final.
+ 	(socket): Made it a NIOSocket and private.
+ 	(blocking): Made private.
+ 	(connected): Made private.
+ 	(connectionPending): New member variable.
+ 	(SocketChannelImpl): New implementation.
+ 	(finalizer): Use isConnected().
+ 	(connect): Rewritten.
+ 	(finishConnect): Throws IOException, implemented.
+ 	(isConnectionPending): Return connectionPending.
+ 	(read): Rewritten.
+ 	(write): Rewritten.
+ 	* gnu/java/nio/NIOConstants.java: New file.
+ 	* java/nio/ByteBufferHelper.java:
+ 	New file.
+ 	* java/nio/ByteBufferImpl.java,
+ 	java/nio/DirectByteBufferImpl.java,
+ 	java/nio/MappedByteBufferImpl.java
+ 	(getType,putType): Use new helper class ByteBufferHelper.
+ 	* gnu/java/nio/Makefile.am (EXTRA_DIST): Added NIOConstants.java.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/Makefile.am: Dont generated gnu_java_nio_FileChannelImpl.h.
+ 	* include/gnu_java_nio_FileChannelImpl.h: Removed.
+ 	* native/jni/java-nio/java_nio.c:
+ 	Include java_nio_channels_FileChannelImpl.h instead of
+ 	gnu_java_nio_FileChannelImpl.h.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/server/RMIClassLoader.java:
+ 	Reindented and reformatted code, no functional changes.
+ 
+ 2003-09-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java: Don't import SystemClassLoader.
+ 	(systemClassLoader): Fixed indentation.
+ 
+ 2003-09-24  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/Rectangle2D.java (getPathIterator): Use the same
+ 	winding rule as Sun J2SE.
+ 
+ 2003-09-24  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/MatteBorder.java (MatteBorder(Icon)): Docfix.
+ 
+ 2003-09-24  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/lang/StringBuffer.java (substring): Don't set `shared' on small
+ 	Strings, even if buffer is already shared.
+ 
+ 2003-09-23  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/font/FontRenderContext.java (getTransform): Return
+ 	copy of internal transform object. Add Javadoc.
+ 
+ 2003-09-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* external/.cvsignore: New file, ignore Makefile and Makefile.in.
+ 
+ 2003-09-21  Ralph Loader  <suckfish@ihug.co.nz>
+ 
+ 	PR java/12350:
+ 	* java/lang/StringBuffer.java (substring): Fix handling of shared flag.
+ 
+ 2003-09-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(static): Unified static initializers.
+ 	(address): Made private.
+ 	(InetAddress): Moved around.
+ 	(isMulticastAddress): Moved around.
+ 	(getByAddress): New method, merged from libgcj.
+ 	(readResolve): Likewise.
+ 	(readObject): Likewise.
+ 	(writeObject): Likewise.
+ 
+ 2003-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(JarURLConnection): Rename "str" (again) to "spec" to match libgcj
+ 	better.
+ 
+ 2003-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(JarURLConnection): Added some comments.
+ 	(getAttributes): Reimplements because getJarEntry() can return null.
+ 
+ 2003-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java:
+ 	(jar_file): Removed.
+ 	(JarURLConnection): Renamed "url_string" to "str", no need to strip
+ 	"jar:", URL.getFile does this already for us, simplified code.
+ 	(getJarEntry): Reimplemented without using jar_file.
+ 	(getManifest): Likewise.
+ 
+ 2003-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(real_url): Renamed to jarFileURL.
+ 	(jarFileURL): Renamed from jarFileURL (to match libgcj).
+ 	(JarURLConnection): Renamed real_url to jarFileURL, made exception
+ 	descriptions more descriptive and move "jar" protocol test around.
+ 	(getJarFileURL): Return jarFileURL.
+ 
+ 2003-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(JarURLConnection): Store result of url_string.index ("!/") in a local
+ 	variable instead of computing it 4 times.
+ 
+ 2003-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): Implemented socket implementaion initialization
+ 	with respect to "impl.prefix" property. This is a merge from libgcj.
+ 
+ 2003-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIODatagramSocket.java,
+ 	gnu/java/nio/NIOSocket.java: New files,
+ 	merged from libgcj.
+ 	* gnu/java/nio/Makefile.am
+ 	(EXTRA_DIST): Added new files NIODatagramSocket.java
+ 	and NIOSocket.java.
+ 
+ 2003-09-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(getLocalAddress): Check if socket got closed,
+ 	return InetAddress.ANY_IF when SecurityManager.checkConnect() fails.
+ 	* java/net/URLConnection.java
+ 	(getInputStream): Throw UnknownServiceException.
+ 	(getOutputStream): Likewise.
+ 	(setRequestProperty): Fixed link in method documentation.
+ 
+ 2003-09-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/home.wml: The latest release can again be found at
+ 	ftp://alpha.gnu.org/gnu/classpath/.
+ 
+ 2003-09-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(ch): Removed.
+ 	(receive): Use getChannel() instead of ch.
+ 	(send): Likewise.
+ 	(getChannel): Return null.
+ 	* java/net/ServerSocket.java
+ 	(ch): Removed.
+ 	(setChannel): Removed.
+ 	(implAccept): Use getChannel() instead of ch.
+ 	(close): Likewise.
+ 	(getChannel): Return null.
+ 	* java/net/Socket.java
+ 	(ch): Removed.
+ 	(connect): Use getChannel() instead of ch.
+ 	(setChannel): Removed.
+ 	(getChannel): Return null.
+ 
+ 2003-09-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/FileChannelImpl.java
+ 	(read): Set position before actually reading.
+ 	(write): Set position before acturally writing.
+ 	(transferTo): Flip buffer before writing.
+ 	(transferFrom): Likewise.
+ 
+ 2003-09-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java: Some documentation fixes.
+ 	* java/net/URLStreamHandler.java (parseURL): If original file
+ 	ends with "/", so must canonical result.
+ 
+ 2003-09-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java,
+ 	gnu/java/net/PlainSocketImpl.java,
+ 	gnu/java/net/SocketInputStream.java,
+ 	gnu/java/net/SocketOutputStream.java: Moved from java/net.
+ 	* gnu/java/net/Makefile.am
+ 	(EXTRA_DIST): Added new files:
+ 	PlainDatagramSocketImpl.java, PlainSocketImpl.java,
+ 	SocketInputStream.java, SocketOutputStream.java.
+ 	* include/gnu_java_net_PlainDatagramSocketImpl.h,
+ 	include/gnu_java_net_PlainSocketImpl.h: New generated JNI header.
+ 	* include/java_net_PlainDatagramSocketImpl.h,
+ 	include/java_net_PlainSocketImpl.h: Removed generated JNI header.
+ 	* include/Makefile.am: Generate and install new JNI header files
+ 	instead of the old ones.
+ 	* java/net/PlainDatagramSocketImpl.java,
+ 	java/net/PlainSocketImpl.java,
+ 	java/net/SocketInputStream.java,
+ 	java/net/SocketOutputStream.java: Moved to gnu/java/net.
+ 	* java/net/DatagramSocket.java:
+ 	Import gnu.java.net.PlainDatagramSocketImpl.
+ 	* java/net/ServerSocket.java,
+ 	java/net/Socket.java: Import gnu.java.net.PlainSocketImpl.
+ 	* java/net/Makefile.am (EXTRA_DIST): Removed the following files:
+ 	PlainDatagramSocketImpl.java, PlainSocketImpl.java,
+ 	SocketInputStream.java, SocketOutputStream.java.
+ 	* native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c,
+ 	native/jni/java-net/gnu_java_net_PlainSocketImpl.c,
+ 	native/jni/java-net/java_net_PlainDatagramSocketImpl.c,
+ 	native/jni/java-net/java_net_PlainSocketImpl.c:
+ 	Moved from java.net namespace to gnu.java.net.
+ 	* native/jni/java-net/Makefile.am:
+ 	Compile new files instead of old ones.
+ 
+ 2003-09-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Toolkit.java: Added missing "in" in javadoc.
+ 
+ 2003-09-13 Dalibor Topic <robilad@kaffe.org>,
+ 	   Helmer Kraemer <hkraemer@freenet.de>
+ 
+ 	* javax/naming/spi/NamingManager.java (getURLContext,
+ 	getObjectInstance, getStateToBind): Always use current thread's
+ 	context class loader when calling Class.forName.
+ 
+ 2003-09-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/InitialContext.java: Reindented.
+ 
+ 2003-09-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/.cvsignore: Ignore Makefile.in and Makefile.
+ 
+ 2003-09-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/event/KeyEvent.java: Some reformatting.
+ 	This merges KeyEvent with libgcj.
+ 
+ 2003-09-18  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Frame.java (Frame(String)): Initialize visible field
+ 	to false.
+ 	(Frame(GraphicsConfiguration)): Likewise.
+ 	(Frame(String,GraphicsConfiguration)): Likewise.
+ 
+ 2003-09-17  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: 
+ 	New files.
+ 
+ 2003-09-16  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/BufferedImage.java (setData): Support non-component
+ 	sample models.
+ 	(getData): Same.
+ 
+ 2003-09-10  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/geom/AffineTransform.java(transform): Fix airthmetic bugs.
+ 	* java/awt/geom/Arc2D.java: Approximate arc segments with cubics.
+ 
+ 2003-09-15  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* native/jni/java-net/java_net_PlainDatagramSocketImpl.c (receive, receive0): renamed receive to receive0 
+ 
+ 	* include/java_net_PlainDatagramSocketImpl.h (receive, receive0): renamed receive to receive0 
+ 
+ 	* java/net/PlainDatagramSocketImpl.java (receive0): added
+ 	(receive): changed to call receive0 and serialize access on RECEIVE_LOCK
+ 	(send): chanded to serialize access on SEND_LOCK
+ 	
+ 
+ 2003-09-11  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/Toolkit.java (getSystemEventQueue, getSystemEventQueueImpl):
+ 	Replace UTF-8 characters in Javadoc by XML/HTML escape sequence.
+ 
+ 2003-09-11  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/Toolkit.java (getSystemEventQueue): Call SecurityManager
+ 	if one is installed. Improve Javadoc.
+ 	(getSystemEventQueueImpl): Improve Javadoc.
+ 
+ 2003-09-10  David Daney <ddaney@avtrex.com>
+ 
+ 	* java/util/Arrays.java (equals(all variants)): Quit using
+ 	NullPointerException catching to detect null valued parameters.
+ 
+ 2003-09-09  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/text/SimpleDateFormat.java (parse): Don't use class calendar
+ 	field.
+ 
+ 2003-09-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/reflect/Array.java (set): Allow null for Object arrays.
+ 
+ 2003-09-09  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/text/DecimalFormat.java (format): Don't immediatly round
+ 	baseNumber to long.
+ 	(setMinimumIntegerDigits): Call super.
+ 	(setMinimumFractionDigits): Likewise.
+ 	(setMaximumIntegerDigits): Likewise.
+ 	(setMaximumFractionDigits): Likewise.
+ 
+ 2003-09-07  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/awt/BasicStroke.java (BasicStroke): Fixed illegal argument
+ 	checking to follow 1.4.2 spec.
+ 
+ 2003-08-25  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* java/awt/Component.java (createImage): changed to use peer method.
+ 
+ 2003-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/home.wml: Update project description and status.
+ 	Mark links which are temporarily unreachable. Add news section.
+ 	Move distribution terms to the end. Add Kaffe OpenVM.
+ 	* doc/www.gnu.org/docs/docs.wml: Mark api doc as temporarily down.
+ 
+ 2003-08-31  David P Grove  <groved@us.ibm.com>
+ 
+ 	* java/io/LineNumberReader (read): Don't reset pos & limit when
+ 	markPos is 0.
+ 
+ 2003-08-29  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* gnu/java/rmi/rmic/Compile_gcj.java (COMPILER_ARGS): New private
+ 	constant.
+ 	(computeArguments): use computeTypicalArguments.
+ 
+ 	* gnu/java/rmi/rmic/Makefile.am (EXTRA_DIST): Add Compile_kjc.java,
+ 	Compile_jikes.java and RMICException.java.
+ 	* gnu/java/rmi/rmic/Compile_kjc.java: New file.
+ 	* gnu/java/rmi/rmic/Compile_jikes.java: Likewise.
+ 	* gnu/java/rmi/rmic/RMICException.java: Likewise.
+ 
+ 	* gnu/java/rmi/rmic/Compiler.java (getDestination): New method.
+ 
+ 	* gnu/java/rmi/rmic/CompilerProcess.java: Import java.io.InputStream.
+ 	(computeTypicalArguments): New method.
+ 	(compile): Print compiler output to System.out. Collect compiler
+ 	error output and use it in exception message.
+ 
+ 	* gnu/java/rmi/rmic/RMIC.java: Import java.util.Set.
+ 	(destination): Initialize to null.
+ 	(run): Replace file separator with '.' when processing class.
+ 	(processClass): Replace '.' with file separator when compiling
+ 	classes.
+ 	(findClass): Use SystemClassLoader to load class.
+ 	(generateStub): Use full class name for generated stub, that puts
+ 	it in right path.  Replace '.' with file separator when generating
+ 	stub file name. Write just the stub class name without package
+ 	information as class name, and constructor name. Write only
+ 	interface names for interfaces extending java.rmi.Remote as
+ 	implemented.
+ 	(generateSkel): Use full class name for generated skel, that puts
+ 	it in right path.  Replace '.' with file separator when generating
+ 	stub file name. Write just the stub class name without package
+ 	information as class name.
+ 
+ 2003-08-29  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* ltmain.sh: Define SED and max_cmd_len when undefined.
+ 
+ 2003-08-29  Jeroen Frijters <jeroen@frijters.net>
+ 
+ 	* java/lang/Thread.java: New file.
+ 	* vm/reference/java/lang/Thread.java: Removed.
+ 	* vm/reference/java/lang/VMThread.java: New file.
+ 
+ 2003-08-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/reflect/Proxy.java (ProxyData): `pack' now a String.
+ 	(ProxyData.getPackage): New method.
+ 	(ProxyData.getProxyData): Use package name, not Package.
+ 	(ClassFactory.ClassFactory): Updated.
+ 
+ 2003-08-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/Thread.java (join(long)): Call sleep(10),
+ 	not sleep(1). Explicitly check elapsed time.
+ 
+ 2003-08-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (AC_INIT): Use four argument version.
+ 	(AC_CONFIG_SRCDIR): New to explicitly set src dir.
+ 	(AM_INIT_AUTOMAKE): Use zero argument version.
+ 	(AC_SUBST): Only set LIBVERSION explicitly. Removed variables
+ 	PACKAGE, VERSION which are substituted implicitly.
+ 	(AM_DISABLE_STATIC): Renamed to AC_DISABLE_STATIC.
+ 	(AC_DISABLE_STATIC): Renamed from AM_DISABLE_STATIC.
+ 	(AM_PROG_LIBTOOL): Renamed to AC_PROG_LIBTOOL.
+ 	(AC_PROG_LIBTOOL: Renamed from AM_PROG_LIBTOOL.
+ 	(--enable-jni): Default to yes.
+ 	* config.guess: New version from libtoolize --force --copy.
+ 	* config.sub: Likewise.
+ 	* ltmain.sh: Likewise.
+ 	* HACKING: Document that libtool 1.5a works.
+ 	* lib/Makefile.am (MAINTAINERCLEANFILES): Renamed to CLEANFILES.
+ 	(CLEANFILES): New variable renamed from MAINTAINERCLEANFILES with
+ 	glibj.zip and classes.1 added.
+ 	(maintainer-clean-local): Renamed to clean-local.
+ 	(clean-local): Renamed from maintainer-clean-local.
+ 	
+ 2003-08-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (drawString): Pass font
+ 	name, not XLFD, to native drawString.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
+ 	Replace XLFD-based implementation with Pango-based
+ 	implementation.
+ 
+ 2003-08-22  Scott Gilbertson  <scottg@mantatest.com>
+ 	    Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/GLightweightPeer.java: Remove file.
+ 	* gnu/java/awt/Makefile.am (EXTRA_DIST): Remove
+ 	GLightweightPeer.java.
+ 	* gnu/java/awt/peer/GLightweightPeer.java: New file.
+ 	* gnu/java/awt/peer/Makefile.am (EXTRA_DIST): Add
+ 	GLightweightPeer.java.
+ 	* java/awt/Component.java (getToolkit): Add comment about
+ 	lightweight components.
+ 	* java/awt/Toolkit.java (createComponent): Return
+ 	gnu.java.awt.peer.GLightweightPeer.
+ 
+ 2003-08-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (create): Create
+ 	GTK_WINDOW_POPUP window.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java: Remove
+ 	GTK_WINDOW_DIALOG.  Set GTK_WINDOW_POPUP to 1.
+ 
+ 2003-08-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (VERSION): Set to 0.06+cvs.
+ 
+ 2003-08-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (VERSION): Set to 0.06.
+ 
+ 2003-08-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ref/Reference.java (get): Indentation fix.
+ 	(clear): Comment fix.
+ 	(enqueue): Likewise.
+ 	(lock): Likewise.
+ 	(referent): Likewise.
+ 
+ 2003-08-19  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-nio/java_nio_FileChannelImpl.c:
+ 	Added includes target_native.h, target_native_math_int.h
+ 
+ 2003-08-19  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_network.h:
+ 	Fixed TARGET_NATIVE_NETWORK_GET_HOSTNAME() macro
+ 
+ 2003-08-19  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-nio/java_nio_FileChannelImpl.c:
+ 	Fixed return value of Java_java_nio_channels_FileChannelImpl_size(),
+ 	Java_java_nio_channels_FileChannelImpl_implPosition__()
+ 
+ 2003-08-19  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-io/java_io_File.c:
+ 	Fixed return value of 0 in Java_java_io_File_lastModifiedInternal()
+ 
+ 2003-08-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Disable --enable-gjdoc.
+ 	* doc/api/Makefile.am (dist-hook): Removed.
+ 
+ 2003-08-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (dist-hook): Remove entries now handled by Makefile.am
+ 	in the external directory.
+ 
+ 2003-08-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* external/jaxp/source/javax/xml/transform/TransformerFactory.java:
+ 	Don't use &nbsp; in the api documentation.
+ 	external/jaxp/source/org/xml/sax/ext/Locator2.java: Likewise.
+ 
+ 2003-08-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/api/Makefile.am (core): Don't include doc-files in package list.
+ 	(jaxp): Don't include gnu packages.
+ 	(create_html): Add classpath-copyright.xml as -bottomnote.
+ 	* doc/api/classpath-copyright.xml: Updated year.
+ 
+ 2003-08-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (SUBDIRS): Add external.
+ 	* configure.in (AC_OUTPUT): Add external/Makefile.
+ 	* external/README: Add how to update Makefile.am jaxp_FILES entry.
+ 	* external/Makefile.am: New file.
+ 
+ 2003-08-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/security/Security.java: Don't use &nbsp; in the api
+ 	documentation.
+ 	* java/security/acl/Acl.java: Fix broken p tag.
+ 	* java/text/DateFormatSymbols.java: Correctly open and close li tags.
+ 	* javax/swing/border/LineBorder.java: Close img tag alt attributes.
+ 	* javax/swing/plaf/TreeUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java: Likewise.
+ 
+ 2003-08-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Properties.java: Use the word umlaut, not &auml; in api
+ 	documentation.
+ 	* java/util/PropertyResourceBundle.java: Likewise and add closing code
+ 	tag.
+ 
+ 2003-08-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Fix java.swing.border -> javax.swing.border and nativee ->
+ 	native.
+ 
+ 2003-08-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Patrik Reali
+ 	* gnu/java/io/decode/DecoderUTF8.java (charsInByteArray): Take offset
+ 	into account.
+ 	(convertToChars): Take buf_offset into account.
+ 	(read): Take offset into account. Break loop early when
+ 	in.avaiable() <= 0.
+ 
+ 2003-08-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Julian Dolby
+ 	* java/lang/Package.java (getPackage): Use currentClassLoader() not
+ 	VMSecurityManager.getClassContext()[1].getClassLoader().
+ 
+ 2003-08-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Guilhem Lavaux and Julian Dolby
+ 	* java/io/ObjectStreamClass.java (getSerialPersistentFields): Get the
+ 	field "serialPersistentFields", not "getSerialPersistentFields".
+ 
+ 2003-08-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Updated with important improvements for 0.06 release.
+ 
+ 2003-08-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* HACKING: Updated known working/not-working versions of auto-tools.
+ 
+ 2003-08-14  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* java/lang/reflect/Constructor.java (equals):
+ 	Completely rewritten for correctness.
+ 	* java/lang/reflect/Field.java (equals):
+ 	Completely rewritten for correctness.
+ 	* java/lang/reflect/Method.java (equals):
+ 	Completely rewritten for correctness.
+ 
+ 2003-08-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (AC_OUTPUT): Add native/target/Makefile,
+ 	native/target/Linux/Makefile and native/target/generic/Makefile.
+ 	* native/Makefile.am (SUBDIRS): Add target.
+ 	* native/target/.cvsignore: New file.
+ 	* native/target/Makefile.am: Likewise.
+ 	* native/target/Linux/.cvsignore: Likewise.
+ 	* native/target/Linux/Makefile.am: Likewise.
+ 	* native/target/generic/.cvsignore: Likewise.
+ 	* native/target/generic/Makefile.am: Likewise.
+ 
+ 2003-08-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkMainThread.h: Regenerated.
+ 	* include/gnu_java_nio_FileChannelImpl.h: Likewise.
+ 
+ 2003-08-14  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/security/Security.java (providers_lazy): Renamed.
+ 	(providersList): Renamed providers_lazy field.
+ 	(providers_lazy_set): Renamed
+ 	(providersInited): Renamed providers_lazy_set field.
+ 	(providers): Set providersInited to true. Reindent.
+ 
+ 2003-08-12  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/Font.java: 
+ 	Stub out more recent API. 
+ 
+ 2003-08-12  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/Color.java (getAlpha): 
+ 	Prevent sign-extended alpha values.
+ 
+ 2003-08-12  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/util/TimeZone.java: initialize lazily 
+ 	* java/util/Locale.java:readManifest: fix check for country 
+ 	* java/util/GregorianCalendar.java:make use of ResourceBundle better traceable 
+ 	* java/util/Calendar.java: make use of ResourceBundle better traceable 
+ 
+ 2003-08-12  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* gnu/java/io/encode/EncoderEightBitLookup.java: conserve memory 
+ 	* gnu/java/io/decode/DecoderEightBitLookup.java: override ready()-method 
+ 
+ 2003-08-12  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/util/logging/SimpleFormatter.java:print souceClassName and sourceMethodName
+ 
+ 2003-08-12  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/rmi/server/RMIClassLoader.java: identify cached classloaders by 
+ 	codebase and contextclassloader 
+ 	* java/rmi/Naming.java: added comments, now accepts pseudo protocol "rmi" 
+ 	* gnu/java/rmi/rmic/RMIC.java: uncommeted code  
+ 
+ 2003-08-12  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URLClassLoader: (findClass): close InputStream after
+ 	we're done with it
+ 
+ 2003-08-12  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/util/logging/Logger.java: provide class and method information 
+ 	* java/util/logging/LogManager.java: create handlers  
+ 
+ 2003-08-12  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/io/ObjectOutputStream.java : allow putFields be called more than once 
+ 
+ 2003-08-12  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/font/OpenType.java: Remove 'public static final'
+ 	from OpenType tags, reverting the change of 2003-08-11.  See
+ 	Classpath discussion list of 2003-08-11.
+ 
+ 2003-08-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (currentEvent, lastWhen): New fields.
+ 	(postEvent): Removed FIXME comment.
+ 	(isDispatchThread): Documented.
+ 	(getCurrentEvent): New method.
+ 	(dispatchEvent): Set currentEvent and lastWhen.
+ 	(getMostRecentEventTime): Rewrote.
+ 	(invokeLater): Documented.
+ 
+ 2003-08-11  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* gnu/java/rmi/server/UnicastRef.java: make constructor public and check if serverobject  
+ 	is compatible in case client and server are running in the same VM
+ 	* gnu/java/rmi/rmic/RMIC.java: fix that methods of the remote interfaces are used
+ 	instead of the xxxImpl class
+ 	
+ 
+ 2003-08-11  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* gnu/java/net/protocol/http/HttpURLConnection.java: fixed NullPointerException.
+ 	* gnu/java/net/protocol/http/Handler.java: override getDefaultPort() to return 80
+ 
+ 2003-08-11  Ingo Proetel <proetel@aicas.com>
+ 
+ 	* native/jni/classpath/jcl.c: removed static array for error string.
+ 	The use of this static array made the code non-reentrant and wasted 
+ 	memory when it was not needed. 
+ 
+ 2003-08-11 Ingo Proetel <proetel@aicas.com>
+ 
+ 	* java/util/class-dependencies.conf,
+ 	java/text/class-dependencies.conf,
+ 	java/nio/class-dependencies.conf,
+ 	java/net/class-dependencies.conf,
+ 	java/math/class-dependencies.conf,
+ 	java/lang/class-dependencies.conf,
+ 	java/io/class-dependencies.conf,
+ 	gnu/java/io/class-dependencies.conf:
+ 	Added use of variables in class dependencies. These variable can be 
+ 	used to configure the set of supported libraries for features such 
+ 	as supported encoders/decoders, URL protocols, etc.
+ 	
+ 2003-08-11 Ingo Proetel <proetel@aicas.com>
+ 
+ 	* java/security/Security.java: moved initialization code of providers
+ 	from static initializer into a method to allow lazy evaluation of
+ 	this code. This permits faster startup and even automatic removal of
+ 	this code if it is not needed. 
+ 
+ 2003-08-11  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/font/OpenType.java: Declare OpenType tags
+ 	as 'public static final'.
+ 
+ 2003-08-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/home.wml: Add Joas and JAmiga. Update links.
+ 	Remove links to proprietary projects.
+ 
+ 2003-08-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/classpath/Makefile.am (EXTRA_DIST): Add RawData.java.
+ 	* javax/swing/Makefile.am (EXTRA_DIST): Add Popup.java and
+ 	PopupFactory.java.
+ 	* vm/reference/java/lang/Makefile.am (EXTRA_DIST): Add VMDouble.java,
+ 	VMFloat.java and VMString.java.
+ 
+ 2003-08-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/security/x509/Makefile.am (EXTRA_DIST): Corrected spelling
+ 	of X500DistingushedName.java to X500DistinguishedName.java.
+ 	* java/nio/Makefile.am (EXTRA_DIST): Changed CharViewBuffer.java,
+ 	DoubleViewBuffer.java, FloatViewBuffer.java, IntViewBuffer.java,
+ 	LongViewBuffer.java and ShortViewBuffer.java to
+ 	CharViewBufferImpl.java, DoubleViewBufferImpl.java,
+ 	FloatViewBufferImpl.java, IntViewBufferImpl.java,
+ 	LongViewBufferImpl.java and ShortViewBufferImpl.java.
+ 
+ 2003-08-10  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/Container.java
+ 	(getPreferredSize): Call preferredSize.
+ 	(preferredSize): Moved body of getPreferredSize here.
+ 	(getMinimumSize): Call minimumSize.
+ 	(minimumSize): Moved body of getMinimumSize here.
+ 
+ 2003-08-10  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/io/PrintStream.java (print): Always flush if auto_flush is
+ 	set. Don't check for newline characters.
+ 	(write (int)): Implement without using a temporary array.
+ 	(write (byte[], int, int): Always flush if auto_flush is set. Don't
+ 	check for newline characters.
+ 	Fixes PR libgcj/11778.
+ 
+ 2003-08-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by David Holmes <dholmes@dltech.com.au>, fixes bug #3229.
+ 	* java/lang/InheritableThreadLocal.java (threadMap): Wrap inside
+ 	Collections.synchronizedMap.
+ 	* java/lang/ThreadLocal.java (valueMap): Likewise.
+ 
+ 2003-08-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Archie Cobbs <archie@dellroad.org>
+ 	* vm/reference/java/lang/Thread.java (Thread): Explicitly set
+ 	contextClassLoader.
+ 
+ 2003-08-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* LICENSE: Update with current exception statement.
+ 
+ 2003-08-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/System.java: Typo fix.
+ 
+ 2003-08-07  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/net/Socket.java (Socket (SocketImpl)): Don't allow null
+ 	SocketImpl. Update Javadoc.
+ 	(bind): Call close() not impl.close() in event of exception.
+ 	(connect): Likewise.
+ 	Remove superfluous null checks throughout.
+ 	* java/net/ServerSocket.java (ServerSocket (int, int, InetAddress)):
+ 	Don't create an extra socket. Fix for PR libgcj/10868.
+ 	(bind): Clean up exception handling.
+ 	Remove superfluous null checks throughout.
+ 	
+ 2003-08-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/FilePermission.java (equals): Use correct index for
+ 	last character of path.
+ 
+ 2003-08-06  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (postKeyEvent):
+ 	Add keyLocation parameter.
+ 	* java/awt/event/KeyEvent.java (getKeyText): Fix "NumPad-"
+ 	string.
+ 	(paramString): Generate keyChar string according to keyChar, not
+ 	keyCode.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(state_to_awt_mods): Handle ALT key.
+ 	(keyevent_state_to_awt_mods): New function.
+ 	(get_first_keyval_from_keymap): New function.
+ 	(keysym_to_awt_keycode): Get virtual key code from keymap.
+ 	Handle missing VK_ values.
+ 	(keysym_to_awt_keylocation): New function.
+ 	(keyevent_to_awt_keychar): New function.
+ 	(generates_key_typed_event): Handle non-text-component case.
+ 	Handle GDK_KP_Delete and GDK_KP_Enter.
+ 	(awt_event_handler): Call new functions to get postKeyEvent
+ 	parameters.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (gtkInit):
+ 	Update postKeyEvent method signature.
+ 	* jni/gtk-peer/gtkpeer.h: Add KEY_LOCATION defines.  Add missing
+ 	VK_ defines.
+ 
+ 2003-08-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (getParent): Use isAncestorOf.
+ 	(isAncestorOf): New method.
+ 
+ 2003-08-01  David P Grove  <groved@us.ibm.com>
+ 
+ 	* java/text/DecimalFormat.java (format): avoid ArithmeticException
+ 	when groupingSize is 0.
+ 	(parse): Likewise.
+ 
+ 2003-08-04  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Class.java (forName(String,boolean,ClassLoader)):
+ 	Call ClassLoader.loadClass(String) instead of
+ 	ClassLoader.loadClass(String,boolean) as per VM spec.
+ 
+ 2003-08-01  David P Grove  <groved@us.ibm.com>
+ 
+ 	* java/util/zip/InflaterInputStream.java (close): Only close
+ 	once.
+ 	* java/io/InputStreamReader.java (close): Only close once.
+ 
+ 2003-08-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/WeakHashMap.java (WeakHashMap(int,float)): If
+ 	initialCapacity is 0, set it to 1.
+ 
+ 2003-08-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/math/BigDecimal.java (divide): Calculate sign correctly. And
+ 	optimize checks againsts sign and half values.
+ 
+ 2003-07-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectInputStream.java (processResolution): Use
+ 	getMethod.
+ 	(getMethod): Make method accessible.
+ 	(getField): Make field accessible.
+ 	(setBooleanField): Don't call setAccessible here.
+ 	(setByteField, setCharField, setDoubleField, setFloatField,
+ 	setIntField, setLongField, setShortField, setObjectField):
+ 	Likewise.
+ 	(callReadMethod): Don't check whether method is null.  Catch
+ 	NoSuchMethodException.
+ 	* java/io/ObjectOutputStream.java (callWriteMethod): Initialize
+ 	cause on thrown exceptions.
+ 
+ 2003-07-31  Stepan Koltsov  <yozh@mx1.ru>
+ 
+ 	* java/util/HashMap.java (readObject): Set size.
+ 
+ 2003-07-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java (getMethod): Make method
+ 	accessible.
+ 	(getField): Likewise.
+ 	(writeObject): Use getMethod.
+ 	Import PrivilegedAction and AccessController.
+ 	(callWriteMethod): Don't check whether m is null.  Catch
+ 	NoSuchMethodException.
+ 
+ 2003-07-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/geom/Arc2D.java (getBounds2D): Implement.
+ 	(containsAngle): Likewise.
+ 	(getStartPoint): Rewrote.
+ 	(getEndPoint): Likewise.
+ 	(setAngleStart(Point2D)): Likewise.
+ 
+ 2003-07-31  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* java/lang/SecurityManager.java:
+ 	checkPackageList(): replace access of String.count with
+ 	String.length() to make it compatible with other
+ 	implementations of class String
+ 
+ 2003-07-31  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* java/io/File.java:
+ 	createTempFile(): use long names on system where file
+ 	separator is not '\', otherwise limit filenames to
+ 	8+3-convention
+ 
+ 2003-07-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/*.h: Rebuilt.
+ 
+ 	* native/jni/java-nio/java_nio_FileChannelImpl.c: Include
+ 	java_nio_channels_FileChannelImpl.h.
+ 	* include/java_nio_FileChannelImpl.h: Removed.
+ 	* include/java_nio_channels_FileChannelImpl.h: New file.
+ 	* include/Makefile.am (H_FILES): Added
+ 	java_nio_channels_FileChannelImpl.h.
+ 	($(top_srcdir)/include/java_nio_channels_FileChannelImpl.h): New rule.
+ 
+ 2003-07-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/PlainSocketImpl.java
+ 	(connect): Reverted Torsten's commit.
+ 
+ 2003-07-30  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* include/java_nio_FileChannelImpl.h:
+ 	copied from gnu_java_nio_FileChannelImpl.h, renamed
+ 	Java_gnu_java_nio_channels_* -> Java_java_nio_channels*
+ 	to match new implementation of FileChannelImpl.java,
+ 	added some missing native functions
+ 
+ 2003-07-30  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-nio/java_nio_FileChannelImpl.c:
+ 	rename Java_gnu_java_nio_channels_* -> Java_java_nio_channels*
+ 	to match new implementation of FileChannelImpl.java, added some
+ 	missing native functions
+ 
+ 2003-07-30  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-io/FileDescriptor.c:
+ 	fixed warning in Java_java_io_FileDescriptor_nativeSync()
+ 
+ 2003-07-30  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* java/net/PlainSocketImpl.java:
+ 	implemented connect(SocketAddress address, int timeout)
+ 	(preliminary implementation; timeout still not supported)
+ 
+ 2003-07-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/StrictMath.java: Typo fix.
+ 	* java/lang/Math.java: Typo fix.
+ 
+ 2003-07-29  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Call getName rather
+ 	than getXLFD.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(gtkSetFont): Scale size parameter by PANGO_SCALE.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c:
+ 	Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c:
+ 	Likewise.
+ 
+ 2003-07-29  Stephen Crawley <crawley@dstc.edu.au>
+ 
+ 	* java/net/SocketImpl.java (toString): Display the remote address
+ 	of an unconnected server socket as "0.0.0.0/0.0.0.0".
+ 	* native/jni/java-net/javanet.c (_javanet_connect):
+ 	Don't create a new InetAddress for the remote host.
+ 	Instead, attach the parameter InetAddress to the
+ 	connected SocketImpl object.
+ 	* java/net/PlainSocketImpl.java (connect):
+ 	Implemented connect(SocketAddress, int) overloading.
+ 
+ 2003-07-28  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* vm/reference/java/lang/Thread.java (stop): no longer remove 
+ 	thread from thread group in this method.  JVMs must remove thread
+ 	from thread group after thread has had a chance to finishing running
+ 	after catching ThreadDeath.  Mauve test case exists, see bug #2685.
+ 
+ 2003-07-28  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* include/jni.h.in:
+ 	removed obsoleted constants JNI_JLONG_CONST*
+ 
+ 2003-07-28  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-net/java_net_PlainDatagramSocketImpl.c:
+ 	improved some exception messages in Java_java_net_PlainDatagramSocketImpl_receive,
+ 	Java_java_net_PlainDatagramSocketImpl_sendto
+ 
+ 2003-07-28  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/BevelBorder.java,
+ 	javax/swing/border/EtchedBorder.java,
+ 	javax/swing/border/LineBorder.java,
+ 	javax/swing/border/MatteBorder.java,
+ 	javax/swing/border/SoftBevelBorder.java,
+ 	javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/ComponentUI.java,
+ 	javax/swing/plaf/TreeUI.java,
+ 	javax/swing/plaf/basic/BasicBorders.java,
+ 	javax/swing/plaf/basic/BasicGraphicsUtils.java,
+ 	javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Prepend "doc-files" to all paths to embedded Javadoc images, so
+ 	that the generated documentation contains the correct URL.
+ 
+ 2003-07-24  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (create):
+ 	Don't pack label in an event box.
+ 
+ 2003-07-24  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* Makefile.am (SUBDIRS): Add include.
+ 	* configure.in: Add --enable-regen-headers flag.
+ 	(AC_OUTPUT): Add include/Makefile.
+ 	* include/Makefile.am: New file.
+ 
+ 2003-07-24  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/sql/Timestamp.java
+ 	(valueOf): Fixed confusion of java.sql.Date and java.util.Date
+ 
+ 2003-07-24  H. Vï¿½isï¿½nen  <hvaisane@joyx.joensuu.fi>
+ 
+ 	* java/text/SimpleDateFormat.java (format) [YEAR_FIELD]: Zero pad
+ 	unless field size is 2.
+ 
+ 2003-07-24  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/Component.java
+ 	(getPreferredSize): Call preferredSize.
+ 	(preferredSize): Moved body of getPreferredSize here.
+ 	(getMinimumSize): Call minimumSize.
+ 	(minimumSize): Moved body of getMinimumSize here.
+ 	(prepareImage): Fall back on Toolkit.prepareImage if there is no peer
+ 	(checkImage(Image,ImageObserver)): Don't call getWidth/getHeight, but
+ 	pass -1
+ 	* java/awt/Container.java
+ 	(validate): Don't validate if there is no peer.
+ 	(update): Clear background before calling paint.
+ 	* java/awt/GridBagLayout.java
+ 	Completed the implementation and fixed several bugs.
+ 	* java/awt/MediaTracker.java
+ 	(MediaEntry.imageUpdate): Fixed typo. & instead of | was used to
+ 	combine flags.
+ 	* java/awt/Window.java
+ 	(Window): Don't call setVisible(false). Windows are invisible by
+ 	default and calling virtual methods from constructor causes
+ 	compatibility problems (e.g. subclasses may assume that the peer
+ 	already exists).
+ 
+ 2003-07-23  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_file.h:
+ 	Fixed include of utime.h, sys/utime.h: rename HAVE_UTIME -> 
+ 	HAVE_UTIME_H, HAVE_SYS_UTIME -> HAVE_SYS_UTIME_H
+ 
+ 2003-07-23  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* gnu/java/io/class-dependencies.conf:
+ 	Added missing class-dependency file
+ 
+ 2003-07-23  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-io/java_io_File.c:
+ 	Replaced JNI_JLONG_CONST* -> TARGET_NATIVE_MATH_INT_*, because
+ 	JNI_JLONG_CONST* should be removed from jni.h
+ 
+ 2003-07-23  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-io/java_io_File.c:
+ 	Replaced JNI_JLONG_CONST* -> TARGET_NATIVE_MATH_INT_*, because
+ 	JNI_JLONG_CONST* should be removed from jni.h
+ 
+ 2003-07-23  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-io/FileDescriptor.c:
+ 	Replaced JNI_JLONG_CONST* -> TARGET_NATIVE_MATH_INT_*, because
+ 	JNI_JLONG_CONST* should be removed from jni.h
+ 	removed HAVE_FTRUNCATE, HAVE_FSYNC, HAVE_SELECT (now set in
+ 	configure)
+ 
+ 2003-07-23  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-nio/java_nio.c:
+ 	Replaced JNI_JLONG_CONST_0 -> TARGET_NATIVE_MATH_INT_INT64_CONST_0,
+ 	because JNI_JLONG_CONST* should be removed from jni.h
+ 
+ 2003-07-23  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-net/javanet.c:
+ 	Enable option SO_BROADCAST for datagram sockets
+ 
+ 2003-07-23  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_file.h:
+ 	added TARGET_NATIVE_FILE_FILEPERMISSION_READONLY, improved
+ 	TARGET_NATIVE_FILE_VALID_FILE_DESCRIPTOR: now use fcntl()
+ 	or fstat()
+ 
+ 2003-07-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Window.java (getWarningString): Just return the
+ 	string.
+ 	(Window): Set warningString; check with security manager.
+ 
+ 	* java/net/URLEncoder.java (encode(String)): Use platform default
+ 	encoding.
+ 	(encode(String,String)): Convert to 2-digit upper-case hex
+ 	number.
+ 	(hex): New field.
+ 
+ 2003-07-22  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_network.h:
+ 	removed double defined macros, added
+ 	TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_BROADCAST(),
+ 	TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BROADCAST()
+ 
+ 2003-07-22  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_math_float.h:
+ 	added macro TARGET_NATIVE_MATH_FLOAT_FLOAT_FINITE(),
+ 	TARGET_NATIVE_MATH_FLOAT_DOUBLE_FINITE()
+ 
+ 2003-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(create): Remove unused method implementation.
+ 	(connectHooks): Remove debug messages.
+ 
+ 2003-07-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* vm/reference/java/lang/Runtime.java: Typo fix.
+ 
+ 2003-07-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java
+ 	(handlers): Removed member variable, unused.
+ 	I think this came in with a libgcj merge.
+ 
+ 2003-07-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java:
+ 	Partly merged with libgcj.
+ 
+ 2003-07-19  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* java/io/File.java:
+ 	canWrite(): set prefix for temporary file to "tmp" to make methode
+ 	usable on systems with DOS-style filesystems (8+3-limitation)
+ 	createTempFile(): limit length of filename from temporary file to
+ 	8-length(prefix) to make methode usuable on systems with DOS-style
+ 	filesystems (8+3-limitation)
+ 
+ 2003-07-18  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c: 
+ 	Handle missing event cases, connect to "value-changed" signal.
+ 
+ 2003-07-18  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/geom/CubicCurve2D.java,
+ 	java/awt/geom/Line2D.java,
+ 	java/awt/geom/QuadCurve2D.java,
+ 	java/awt/geom/Rectangle2D.java: 
+ 	Fix path some calculations, make path iterators follow
+ 	a consistent style.
+ 
+ 2003-07-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/security/BasicPermission.java: Extends with fully qualified
+ 	classname is workaround for gcj 3.3.
+ 
+ 2003-07-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/InflaterInputStream.java (InflaterInputStream): Check
+ 	for null InputStream and Inflater.
+ 
+ 2003-07-18  Jerry Quinn  <jlquinn@optonline.net>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/math/BigDecimal (divide): Correctly handle
+ 	ROUND_HALF_EVEN when amount is greater than 0.5.
+ 	Simplify code.
+ 
+ 2003-07-17  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* java/net/URLClassLoader.java (addURL): Moved implementation to
+ 	private addURLImpl() to avoid calling addURL from the constructor.
+ 	(addURLImpl): Contains the code that was previously in addURL.
+ 	(addURLs): Call addURLImpl(), not addURL().
+ 
+ 2003-07-17  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/lang/ThreadGroup.java (removeThread): null the 'group' field
+ 	of the removed Thread.
+ 	* vm/reference/java/lang/Thread.java (setDaemon): Don't throw an
+ 	exception when called on an exited Thread.
+ 
+ 2003-07-17  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* java/lang/Class.java (newInstance): Improved constructor caching.
+ 
+ 2003-07-16  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* java/net/URLClassLoader.java (JarURLLoader.getResource): If the
+ 	name starts with a slash, chop it off.
+ 
+ 2003-07-16  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_file.h:
+ 	Some fixes for target native layer (reported by Stephen Crawley)
+ 
+ 2003-07-16  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* configure.in:
+ 	Some fixes for target native layer (reported by Stephen Crawley)
+ 
+ 2003-07-16  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* java/io/class-dependencies.conf:
+ 	java/lang/class-dependencies.conf:
+ 	java/math/class-dependencies.conf:
+ 	java/net/class-dependencies.conf:
+ 	java/nio/class-dependencies.conf:
+ 	java/text/class-dependencies.conf:
+ 	java/util/class-dependencies.conf:
+ 	Class dependencies file
+ 
+ 2003-07-16  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_file.h:
+ 	Fixed typing error
+ 
+ 2003-07-16  David Grove  <groved@us.ibm.com
+ 
+ 	* java/lang/Double.java (doubleToLongBits): No longer native,
+ 	delegates to VMDouble.
+ 	(doubleToRawLongBits): Likewise.
+ 	(longBitsToDouble): Likewise.
+ 	* java/lang/Float.java (static): Moved to VMFloat.
+ 	(floatToIntBits) No longer native, delegates to VMFloat.
+ 	(floatToRawIntBits): Likewise.
+ 	(intBitsToFloat): Likewise.
+ 	* vm/reference/java/lang/VMDouble.java: New class.
+ 	* vm/reference/java/lang/VMFloat.java: New class.
+ 	* native/jni/java-lang/Makefile.am (libjavalang_la_SOURCES): Remove
+ 	java_lang_Float.c, add java_lang_VMFloat.c and java_lang_VMDouble.c.
+ 	* native/jni/java-lang/java_lang_Double.c (doubleToLongBits):
+ 	Removed, moved to java_lang_VMDouble.c.
+ 	(doubleToRawLongBits): Likewise.
+ 	(longBitsToDouble): Likewise.
+ 	* native/jni/java-lang/java_lang_Float.c: Removed file.
+ 	* native/jni/java-lang/java_lang_VMDouble.c: New file.
+ 	* native/jni/java-lang/java_lang_VMFloat.c: New file.
+ 	* include/java_lang_Double.h: Regenerated.
+ 	* include/java_lang_Float.h: Removed.
+ 	* include/java_lang_VMDouble.h: New file.
+ 	* include/java_lang_VMFloat.h: New file.
+ 	* NEWS: Describe new VM Float/Double conversion methods.
+ 
+ 2003-07-16  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/classpath/jcl.c:
+ 	Fixed wrong include
+ 
+ 2003-07-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/logging/Handler.java (isLoggable): Check record level
+ 	smaller or equal.
+ 
+ 2003-07-16  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/classpath/jnilink.c:
+ 	Removed include malloc.h, added stdlib.h
+ 
+ 2003-07-16  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/classpath/jcl.h,
+ 	native/jni/classpath/jcl.c:
+ 	Fixed some prototypes
+ 
+ 2003-07-16  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-io/FileDescriptor.c:
+ 	Renamed some internal constants to avoid conflicts with existing
+ 	constants in some OS (e. g. vxWorks)
+ 
+ 2003-07-15  David Grove  <groved@us.ibm.com
+ 
+ 	* java/lang/String.java (internTable): Removed.
+ 	(intern): Use VMString.intern().
+ 	* vm/reference/java/lang/VMString.java: New VM interface class.
+ 	* NEWS: Document new VM interface.
+ 
+ 2003-07-15  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-net/java_net_InetAddress.c,
+ 	native/jni/java-net/java_net_NetworkInterface.c,
+ 	native/jni/java-net/java_net_PlainDatagramSocketImpl.c,
+ 	native/jni/java-net/java_net_PlainSocketImpl.c,
+ 	native/jni/java-net/javanet.c:
+ 	Added target native layer macros for native OS functions
+ 
+ 2003-07-15  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_network.h:
+ 	Added macro for BIND_ADDRESS
+ 
+ 2003-07-15  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-util/java_util_TimeZone.c:
+ 	renamed target native macro
+ 
+ 2003-07-15  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_misc.h:
+ 	Fixed typing error
+ 
+ 2003-07-15  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_misc.h:
+ 	Clean-up some target macro names
+ 
+ 2003-07-15  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-util/java_util_TimeZone.c:
+ 	Replace natve OS functions by target native layer macros
+ 
+ 2003-07-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DirectByteBufferImpl.java:
+ 	Partly merge with libgcj.
+ 
+ 2003-07-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java: Removed.
+ 	* gnu/java/nio/Makefile.am
+ 	(EXTRA_DIST): Removed FileChannelImpl.java.
+ 	* java/nio/channels/FileChannelImpl.java: New file.
+ 	* java/nio/channels/Makefile.am
+ 	(EXTRA_DIST): Added FileChannelImpl.java.
+ 	* java/io/FileInputStream.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/RandomAccessFile.java,
+ 	java/nio/MappedByteBufferImpl.java:
+ 	Import java.nio.channels.FileChannelImpl instead of
+ 	gnu.java.nio.FileChannelImpl.
+ 	* java/nio/channels/FileChannel.java
+ 	(MapMode.m): Made package-private.
+ 
+ 2003-07-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java,
+ 	java/net/Socket.java: New versions from libgcj.
+ 
+ 2003-07-13  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* java/util/zip/ZipFile.java (finalize): Check raf for null to prevent
+ 	NullPointerException if the file was never constructed.
+ 
+ 2003-07-13  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* javax/naming/CompoundName.java (CompoundName(String,Properties)):
+ 	guard against beginQuote and beginQuote2 being null
+ 
+ 2003-07-13  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* java/beans/PropertyEditorManager.java (findEditor): use the thread
+ 	context class loader to try and find the class
+ 
+ 	* javax/naming/spi/NamingManager.java (getInitialContext): use the
+ 	thread context class loader
+ 
+ 2003-07-13  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* gnu/java/rmi/server/UnicastServerRef.java
+ 	(getHelperClass): if class loader is null, use Class.forName
+ 
+ 2003-07-12  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* java/awt/image/MemoryImageSource.java
+ 	(MemoryImageSource(int,int,ColorModel, byte[],int,int,Hashtable props)):
+ 	Changed array copy length to max * height.
+ 	(MemoryImageSource(int,int,ColorModel, int[],int,int,Hashtable props)):
+ 	Changed array copy length to max * height
+ 	(sendPicture): Call setDimensions on the consumer.
+ 
+ 2003-07-11  Matt Kraai  <kraii@alumni.cmu.edu>
+ 
+ 	* java/awt/im/InputContext.java: Remove a redundant
+ 	partial line.
+ 
+ 2003-07-10  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* classpath/native/target/generic/target_generic_network.h:
+ 	Adding missing #include <assert.h>
+ 
+ 2003-07-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectOutputStream.java (writeObject): break after
+ 	calling writeClassDescriptor().
+ 
+ 2003-07-09  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* classpath/include/jni.h.in:
+ 	Fixed missing JNI_JLONG_CONST* definitions (preliminary fix)
+ 
+ 2003-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCanvasPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkChoicePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkClipboard.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkContainerPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkGenericPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkImage.java,
+ 	gnu/java/awt/peer/gtk/GtkImagePainter.java,
+ 	gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuBarPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkOffScreenImage.java,
+ 	gnu/java/awt/peer/gtk/GtkPanelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java:
+ 	Reworked import statements.
+ 
+ 2003-07-09  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	*  native/jni/java-io/FileDescriptor.c,
+ 	native/jni/java-io/java_io_File.c,
+ 	native/jni/java-io/java_io_ObjectInputStream.c,
+ 	native/jni/java-io/javaio.c:
+ 	Implemented target native layer macros for all native OS functions
+ 
+ 2003-07-08  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic_file.h:
+ 	More fixed for native layer: open with sync/dsync, 64bit-clean
+ 
+ 2003-07-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
+ 	(setCaretPosition, setEditable): Rely entirely on native
+ 	implementation.
+ 	(getArgs): Remove.
+ 	(postTextEvent): New method.
+ 	(handleEvent): New method.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (handleEvent): New
+ 	method.
+ 	* java/awt/event/ActionEvent.java (paramString): Fix formatting.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(keysym_to_awt_keycode): Fix range checks.
+ 	(generates_key_typed_event): New function.
+ 	(awt_event_handler): Post AWT_KEY_RELEASED events to event
+ 	queue.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(gtkInit): Store TextComponent's postTextEvent method ID.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(setText): Post TEXT_VALUE_CHANGED event to event queue.
+ 
+ 2003-07-07  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/tar2003-07-09  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* /cvsroot/classpath/classpath/native/jni/java-io/FileDescriptor.c:
+ 	Implemented target native layer macros for all native OS functions
+ 	* native/target/Linux/target_native.h,
+ 	native/target/Linux/target_native_file.h,
+ 	native/target/Linux/target_native_math_float.h,
+ 	native/target/Linux/target_native_math_int.h,
+ 	native/target/Linux/target_native_misc.h,
+ 	native/target/Linux/target_native_network.h:
+ 	Small fixes for target native layer
+ 
+ 	* native/target/Linux/target_native_io.h:
+ 	Target native layer I/O functions for Linux
+ 
+ 2003-07-07  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/target/generic/target_generic.h,
+ 	native/target/generic/target_generic_file.h,
+ 	native/target/generic/target_generic_math_float.h,
+ 	native/target/generic/target_generic_math_int.h,
+ 	native/target/generic/target_generic_misc.h,
+ 	native/target/generic/target_generic_network.h:
+ 	Small fixes for target native layer
+ 
+ 	* native/target/generic/target_generic_io.h:
+ 	Target native layer I/O functions
+ 
+ 2003-07-03  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* native/jni/java-nio/java_nio_FileChannelImpl.c:
+ 	Fixed header Java_gnu_java_nio_FileChannelImpl_implPosition__
+ 
+ 2003-07-03  Torsten Rupp  <rupp@lisa.aicas.com>
+ 
+ 	* gnu/java/rmi/server/UnicastServerRef.java:
+ 	Fixed getReturnMethodType
+ 
+ 
+ 2003-07-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in:
+ 	Added native/jni/java-nio/Makefile to AC_OUTPUT call.
+ 	* include/gnu_java_nio_FileChannelImpl.h:
+ 	Regenrated.
+ 	* include/gnu_java_nio_FileLockImpl.h,
+ 	include/java_nio_DirectByteBufferImpl.h:
+ 	New files.
+ 	* native/jni/Makefile.am
+ 	(SUBDIRS): Added new java-nio subdir.
+ 	* native/jni/java-io/Makefile.am:
+ 	Removed java_nio.c from compilation.
+ 	* native/jni/java-io/java_nio.c:
+ 	Removed.
+ 	* native/jni/java-net/java_net_NetworkInterface.c
+ 	(getRealNetworkInterfaces): Fixed arguments.
+ 	* native/jni/java-nio/.cvsignore,
+ 	native/jni/java-nio/Makefile.am,
+ 	native/jni/java-nio/java_nio.c,
+ 	native/jni/java-nio/java_nio_DirectByteBufferImpl.c,
+ 	native/jni/java-nio/java_nio_FileChannelImpl.c,
+ 	native/jni/java-nio/java_nio_FileLockImpl.c:
+ 	New files.
+ 
+ 2003-07-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java:
+ 	Reworked imports.
+ 
+ 2003-07-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	Reformatted. Three usages of non existing ButtonModel methods removed.
+ 	* javax/swing/ButtonModel.java
+ 	(fireItemStateChanged, fireStateChanged, fireActionPerformed):
+ 	Removed.
+ 	* javax/swing/SwingUtilities.java:
+ 	Reformatted.
+ 	* javax/swing/UIManager.java:
+ 	Reformatted.
+ 	* javax/swing/colorchooser/DefaultColorSelectionModel.java
+ 	(DefaultColorSelectionModel): Implemented.
+ 	(setSelectedColor): Likewise.
+ 	(getSelectedColor): Likewise.
+ 	(addChangeListener): Likewise.
+ 	(removeChangeListener): Likewise.
+ 	(fireStateChange): Likewise.
+ 	* javax/swing/event/AncestorEvent.java
+ 	(ANCESTOR_ADDED): Fixed value.
+ 	(ANCESTOR_MOVED): Likewise.
+ 	* javax/swing/event/InternalFrameEvent.java
+ 	(INTERNAL_FRAME_ICONIFIED): Fixed value.
+ 	(INTERNAL_FRAME_OPENED): Likewise.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java:
+ 	Reformatted.
+ 	(BasicLabelUI): Implements PropertyChangeListener.
+ 	(propertyChange): New method.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(serialVersionUID): Fixed value.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(BasicTabbedPaneUI): Implements SwingConstants.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(BasicTextUI): Implements ViewFactory.
+ 	(create): New method.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(MetalLookAndFeel): Extends BasicLookAndFeel instead of LookAndFeel.
+ 
+ 2003-07-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Container.java
+ 	(add): Revised documentation.
+ 	* java/awt/GridBagLayout.java:
+ 	Yippie, 90% are done. Now are comming the 10% work which take 90% of
+ 	time.
+ 	* java/awt/GridBagLayoutInfo.java
+ 	(x, y): Renamed to pos_x and pos_y.
+ 
+ 2003-07-01  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/basic/BasicBorders.java (SplitPaneBorder):
+ 	For a bug report filed with Sun, replace the review ID by its bug ID.
+ 
+ 2003-06-30  Gary Benson  <gbenson@redhat.com>
+ 
+ 	* javax/naming/spi/NamingManager.java (getURLContext): Use
+ 	correct name for factory class.
+ 
+ 2003-06-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/GridBagLayout.java:
+ 	Yippie, 90% are done. Now are comming the 10% work which take 90% of
+ 	time.
+ 
+ 2003-06-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/GridBagLayout.java,
+ 	java/awt/GridBagLayoutInfo.java:
+ 	More work done to implement this beasts.
+ 
+ 2003-06-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/GridBagLayout.java:
+ 	More work done. API should now be complete.
+ 
+ 2003-06-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/GridBagLayout.java:
+ 	Totally reworked and partly implemented.
+ 	* java/awt/GridBagLayoutInfo.java:
+ 	New file.
+ 	* java/awt/Makefile.am
+ 	(EXTRA_DIST): Added GridBagLayoutInfo.java.
+ 
+ 2003-06-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Timer.java
+ 	(finalize): Throws Throwable.
+ 
+ 2003-06-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Window.java
+ 	(Window): Implements javax.accessibility.Accessible.
+ 
+ 2003-06-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java,
+ 	java/net/URLStreamHandler.java:
+ 	Renamd variable "handler" to "ph" to match libgcj more.
+ 
+ 2003-06-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/MappedByteBufferImpl.java:
+ 	Reverted.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/RandomAccessFile.java,
+ 	java/nio/ByteBufferImpl.java,
+ 	java/nio/CharBufferImpl.java,
+ 	java/nio/DirectByteBufferImpl.java,
+ 	java/nio/DoubleBufferImpl.java,
+ 	java/nio/FloatBufferImpl.java,
+ 	java/nio/IntBufferImpl.java,
+ 	java/nio/LongBufferImpl.java,
+ 	java/nio/MappedByteBufferImpl.java,
+ 	java/nio/ShortBufferImpl.java,
+ 	java/rmi/server/SkeletonNotFoundException.java,
+ 	java/rmi/server/UnicastRemoteObject.java,
+ 	java/security/Certificate.java,
+ 	java/security/cert/PolicyQualifierInfo.java,
+ 	java/text/Format.java,
+ 	javax/naming/CompositeName.java,
+ 	javax/naming/CompoundName.java,
+ 	javax/naming/InitialContext.java,
+ 	javax/naming/LinkRef.java,
+ 	javax/naming/NamingException.java,
+ 	javax/naming/NamingSecurityException.java,
+ 	javax/naming/ReferralException.java,
+ 	javax/naming/StringRefAddr.java,
+ 	javax/naming/directory/BasicAttribute.java,
+ 	javax/naming/directory/BasicAttributes.java,
+ 	javax/naming/ldap/UnsolicitedNotificationEvent.java,
+ 	javax/security/auth/x500/X500Principal.java:
+ 	New versions from libgcj.
+ 
+ 2003-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(write): Removed.
+ 	* java/awt/font/GraphicAttribute.java
+ 	(getAlignment): Made final.
+ 	* java/awt/font/ImageGraphicAttribute.java
+ 	(ImageGraphicAttribute): Made final.
+ 	* java/awt/image/DataBufferByte.java
+ 	(DataBufferByte): Made final.
+ 	* java/awt/image/DataBufferInt.java
+ 	(DataBufferInt): Made final.
+ 	* java/awt/image/DataBufferUShort.java
+ 	(DataBufferUShort): Made final.
+ 	* java/awt/image/DirectColorModel.java
+ 	(coerceData): Made final.
+ 	* java/awt/image/PixelGrabber.java
+ 	(status): Removed @deprecated tag.
+ 	* java/beans/beancontext/BeanContextSupport.java
+ 	(BCSIterator): Made final.
+ 	* java/io/RandomAccessFile.java
+ 	(readLine): Removed @deprecated tag.
+ 	* java/net/Inet4Address.java
+ 	(Inet4Address): Made package-private.
+ 	* java/net/Inet6Address.java
+ 	(Inet6Address): Made package-private.
+ 	* java/nio/channels/FileChannel.java
+ 	(write): Made final.
+ 	* java/nio/channels/ServerSocketChannel.java
+ 	(ServerSocketChannel): Made protected.
+ 
+ 2003-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/event/AncestorEvent.java,
+ 	javax/swing/event/InternalFrameEvent.java,
+ 	javax/swing/event/ListDataEvent.java,
+ 	javax/swing/event/TableModelEvent.java:
+ 	Constants must be final.
+ 
+ 2003-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/event/AncestorEvent.java,
+ 	javax/swing/event/HyperlinkEvent.java,
+ 	javax/swing/event/InternalFrameEvent.java,
+ 	javax/swing/event/ListDataEvent.java,
+ 	javax/swing/event/TableModelEvent.java:
+ 	Fixed values of all serialVersionUIDs.
+ 
+ 2003-06-26  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/test/RuleBasedCollator.java
+ 	(RuleBasedCollator): Fix bugs in building the collator data structures
+ 	that resulted in the wrong keys being associated collated characters.
+ 
+ 2003-06-26  Stephen Crawley <crawley@dstc.edu.au>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(next): Fix bug that caused the first character of the
+ 	Iterator's text to be skipped.
+ 
+ 2003-06-26  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/TextUI.java (getNextVisualPositionFrom):
+ 	Declare to throw BadLocationException. Documented in JavaDoc.
+ 	* javax/swing/plaf/basic/BasicTextUI.java: Likewise.
+ 
+ 	* javax/swing/plaf/TreeUI.java (getClosesPathForLocation): Method
+ 	renamed to getClosestPathForLocation.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java (getClosesPathForLocation):
+ 	Likewise.
+ 	
+ 2003-06-26  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/TreeUI.java (getPathBounds, getPathForRow,
+ 	getRowForPath, getRowCount, getClosesPathForLocation,
+ 	isEditing, stopEditing, cancelEditing, startEditingAtPath,
+ 	getEditingPath): New abstract methods.
+ 
+ 	* javax/swing/plaf/basic/BasicTreeUI.java (getPathBounds,
+ 	getPathForRow, getRowForPath, getRowCount,
+ 	getClosesPathForLocation, isEditing, stopEditing, cancelEditing,
+ 	startEditingAtPath, getEditingPath): Stubbed implementations
+ 	for methods required by abstract superclass.
+ 	
+ 	* javax/swing/plaf/doc-files/TreeUI-1.png: New image.
+ 	
+ 	* javax/swing/plaf/basic/BasicTextUI.java (RootView): Commented
+ 	out to avoid errors when compiling with the Sun JDK.  The
+ 	implementation was way too incomplete to be of any use.
+ 
+ 	(modelToView): Declare to throw javax.swing.text.BadLocationException.
+ 	
+ 2003-06-26  Sascha Brawer  <brawer@dandelis.ch>
+ 	
+ 	* javax/swing/plaf/TextUI.java: Made imports specific, reformatted,
+ 	wrote JavaDoc.
+ 	(modelToView): Declare to throw javax.swing.text.BadLocationException.
+ 	(getToolTipText): New method.
+ 	
+ 2003-06-25  Stephen Crawley <crawley@dstc.edu.au>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_nl.java:
+ 	Fixed collation rules.
+ 
+ 2003-06-25  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/SplitPaneUI.java: Made imports specific,
+ 	reformatted, wrote JavaDoc.
+ 
+ 	* javax/swing/plaf/TabbedPaneUI.java: Made abstract, reformatted,
+ 	wrote JavaDoc.
+ 	(tabForCoordinate, getTabBounds, getTabRunCount): Made abstract.
+ 
+ 2003-06-25  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/PopupMenuUI.java (isPopupTrigger, getPopup):
+ 	New methods.
+ 
+ 2003-06-25  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/JWindow.java (JWindow()): Add stubbed constructor
+ 	so that javax/swing/Popup.java compiles.
+ 
+ 2003-06-25  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/Popup.java, javax/swing/PopupFactory.java:
+ 	Initial	check-in.
+ 
+ 2003-06-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java,
+ 	java/io/ObjectOutputStream.java:
+ 	Merged new versions from libgcj.
+ 
+ 2003-06-25  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/SpinnerUI.java: Initial check-in of new file.
+ 
+ 2003-06-24  Sascha Brawer  <brawer@dandelis.ch>
+ 	
+ 	* javax/swing/plaf/RootPaneUI.java,
+ 	javax/swing/plaf/ScrollBarUI.java,
+ 	javax/swing/plaf/ScrollPaneUI.java,
+ 	javax/swing/plaf/SeparatorUI.java,
+ 	javax/swing/plaf/SliderUI.java,
+ 	javax/swing/plaf/TableHeaderUI.java,
+ 	javax/swing/plaf/TableUI.java,
+ 	javax/swing/plaf/ToolBarUI.java,
+ 	javax/swing/plaf/ToolTipUI.java,
+ 	javax/swing/plaf/ViewportUI.java: Reformatted, wrote JavaDoc.
+ 
+ 2003-06-24  Sascha Brawer  <brawer@dandelis.ch>
+ 	
+ 	* javax/swing/plaf/ActionMapUIResource.java,
+ 	javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/ButtonUI.java,
+ 	javax/swing/plaf/ColorChooserUI.java,
+ 	javax/swing/plaf/ColorUIResource.java,
+ 	javax/swing/plaf/ComboBoxUI.java,
+ 	javax/swing/plaf/ComponentInputMapUIResource.java,
+ 	javax/swing/plaf/ComponentUI.java,
+ 	javax/swing/plaf/DesktopIconUI.java,
+ 	javax/swing/plaf/DesktopPaneUI.java,
+ 	javax/swing/plaf/DimensionUIResource.java,
+ 	javax/swing/plaf/FileChooserUI.java,
+ 	javax/swing/plaf/FontUIResource.java,
+ 	javax/swing/plaf/IconUIResource.java,
+ 	javax/swing/plaf/InputMapUIResource.java,
+ 	javax/swing/plaf/InsetsUIResource.java,
+ 	javax/swing/plaf/InternalFrameUI.java,
+ 	javax/swing/plaf/LabelUI.java,
+ 	javax/swing/plaf/ListUI.java,
+ 	javax/swing/plaf/MenuBarUI.java,
+ 	javax/swing/plaf/MenuItemUI.java,
+ 	javax/swing/plaf/OptionPaneUI.java,
+ 	javax/swing/plaf/PanelUI.java,
+ 	javax/swing/plaf/ProgressBarUI.java: State "Copyright (C) 2002, 2003"
+ 	instead of only 2003, thus restoring the original year.
+ 	Thanks for Michael Koch <konqueror@gmx.de> for having noticed.
+ 
+ 2003-06-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/PlainDatagramSocketImpl.java:
+ 	Reordered methods to match libgcj.
+ 
+ 2003-06-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/event/AncestorEvent.java,
+ 	javax/swing/event/HyperlinkEvent.java,
+ 	javax/swing/event/InternalFrameEvent.java,
+ 	javax/swing/event/ListDataEvent.java,
+ 	javax/swing/event/TableModelEvent.java:
+ 	Compile fixes.
+ 	* javax/swing/plaf/basic/BasicListUI.java,
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	Added missing methods to make it compile.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/event/AncestorEvent.java
+ 	* javax/swing/event/HyperlinkEvent.java
+ 	* javax/swing/event/InternalFrameEvent.java
+ 	* javax/swing/event/ListDataEvent.java
+ 	* javax/swing/event/TableModelEvent.java
+ 	* javax/swing/event/TreeWillExpandListener.java
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/ColorModel.java:
+ 	Reformatted.
+ 	(getComponents): Added comment.
+ 	(getDataElements): Likewise.
+ 	(getDataElement): New method.
+ 	(getDataElements): Likewise.
+ 	(getNormalizedComponents): Likewise.
+ 
+ 2003-06-24  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/ListUI.java: Re-written.
+ 	* javax/swing/plaf/LabelUI.java: Made abstract.
+ 	* javax/swing/plaf/MenuBarUI.java: Reformatted, wrote JavaDoc.
+ 	* javax/swing/plaf/MenuItemUI.java: Likewise.
+ 	* javax/swing/plaf/OptionPaneUI.java: Re-written.
+ 	* javax/swing/plaf/PanelUI.java: Made abstract, reformatted,
+ 	wrote JavaDoc.
+ 	* javax/swing/plaf/ProgressBarUI.java: Reformatted, wrote JavaDoc.
+ 
+ 2003-06-24  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/InputMapUIResource.java: Reformatted, wrote JavaDoc.
+ 	* javax/swing/plaf/InternalFrameUI.java: Likewise.
+ 	* javax/swing/plaf/LabelUI.java: Likewise.
+ 
+ 	* javax/swing/plaf/InsetsUIResource.java: Reformatted, wrote JavaDoc.
+ 	(serialVersionUID): New field.
+ 
+ 2003-06-24  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/IconUIResource.java: Reformatted, wrote JavaDoc.
+ 	(delegate): New field.
+ 	(IconUIResource): Store the delegate argument.
+ 	(paintIcon, getIconWidth, getIconHeight): Forward the message to
+ 	the delegate icon.
+ 
+ 2003-06-24  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/DesktopIconUI.java: Reformatted, wrote JavaDoc.
+ 	* javax/swing/plaf/DesktopPaneUI.java: Likewise.
+ 	* javax/swing/plaf/DimensionUIResource.java: Likewise.
+ 	* javax/swing/plaf/FileChooserUI.java: Likewise.
+ 	* javax/swing/plaf/FontUIResource.java: Likewise.
+ 	
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Toolkit.java
+ 	(getDefaultToolit): Merged new version from libgcj.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/SocketImpl.java,
+ 	java/net/URLStreamHandler.java:
+ 	New versions from libgcj.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java:
+ 	New version from libgcj.
+ 
+ 2003-06-24  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/ComponentUI.java: Re-written from scratch.
+ 	* javax/swing/plaf/doc-files/ComponentUI-1.png: Dotted line and
+ 	new wording for comments.
+ 	* javax/swing/plaf/doc-files/ComponentUI-1.dia: Likewise.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/LineNumberReader.java:
+ 	New version from libgcj.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/color/ColorSpace.java
+ 	(isCS_sRGB): Implemented.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/RuleBasedCollator.java
+ 	(getCollationKey): Fixed indexing.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/PlainDatagramSocketImpl.java:
+ 	Merged class documentation with libgcj.
+ 	(IP_TTL): Moved.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/Timer.java
+ 	(listenerList): New member variable.
+ 	(actions): Removed.
+ 	(addActionListener): Use listenerList.
+ 	(removeActionListener): Likewise.
+ 	(getListeners): New method.
+ 	(getActionListeners): New method.
+ 	(fireActionPerformed): Made protected.
+ 	(fireActionPerformed): Reimplemented.
+ 
+ 2003-06-23  Torsten Rupp  <rupp@aicas.com>
+ 
+ 	* configure.in:
+ 	added includes 'Linux' and 'generic' as extra-include paths.
+ 	This change is temporary and have to be replaced by more
+ 	elaborated code to be able to select the target system for
+ 	which Classpath is compiled. Currently only 'Linux' is
+ 	supported; other targets will be added when available.
+ 
+ 2003-06-23  John Leuner  <jewel@debian.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: cosmetic changes
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: add specifc code for GtkButton to connect to event_window
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): call gdk_threads_init
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: added some debugging code
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (connectHooks): don't use deprecated gtk methods
+ 
+ 2003-06-23  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/doc-files: New directory.
+ 	* javax/swing/plaf/doc-files/ComponentUI-1.png: New image.
+ 	* javax/swing/plaf/doc-files/ComponentUI-1.dia: New image (source for
+ 	UML diagram in ComponentUI-1.png).
+ 	
+ 2003-06-23  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/ButtonUI.java: Made abstract; reformatted;
+ 	added JavaDoc.
+ 	* javax/swing/plaf/ColorChooserUI.java: Reformatted; added JavaDoc.
+ 	* javax/swing/plaf/ColorUIResource.java: Re-written.
+ 	* javax/swing/plaf/ComboBoxUI.java: Reformatted; added JavaDoc.
+ 	* javax/swing/plaf/ComponentInputMapUIResource.java: Likewise.
+ 	* javax/swing/plaf/ComponentUI.java: Do not implement UIResource.
+ 	
+ 2003-06-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Font.java:
+ 	Reordered imports.
+ 	* java/awt/Window.java:
+ 	Fixed documentation.
+ 	(Window): No need to case BorderLayout to LayoutManager.
+ 	* java/awt/datatransfer/StringSelection.java
+ 	(supported_flavors): Added DataFlavor.stringFlavor.
+ 	* java/awt/image/ColorModel.java
+ 	(getTransferType): New method.
+ 
+ 2003-06-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/PlainSocketImpl.java
+ 	(in): New member variable.
+ 	(out): Likewise.
+ 	(setOption): Renamed arguments to match libgcj.
+ 	(getOption): Likewise.
+ 	(connect): Simplified.
+ 	(connect): Made protected.
+ 	(getInputStream): Return always the same stream.
+ 	(getOutputStream): Likewise.
+ 
+ 2003-06-23  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/ActionMapUIResource.java: Reformatted.
+ 	Added JavaDoc.
+ 	
+ 2003-06-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/MappedShortFileBuffer.java:
+ 	Really remove it.
+ 
+ 2003-06-23  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/basic/BasicBorders.java
+ 	(FieldBorder, RolloverButtonBorder): New class.
+ 	
+ 	(getTextFieldBorder, getProgressBarBorder, getInternalFrameBorder):
+ 	New method.
+ 
+ 	(MarginBorder.getBorderInsets): Amended to also retrieve the margin
+ 	of javax.swing.text.JTextComponent.
+ 	
+ 	* javax/swing/plaf/basic/doc-files/BasicBorders.FieldBorder.png,
+ 	javax/swing/plaf/basic/doc-files/BasicBorders-1.png,
+ 	javax/swing/plaf/basic/doc-files/BasicBorders-2.png,
+ 	New image.
+ 
+ 	* javax/swing/text/JTextComponent.java (getMargin): Added stub
+ 	implementation to allow compilation of
+ 	javax.swing.plaf.basic.BasicBorders.FieldBorder.
+ 
+ 2003-06-22  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/basic/Makefile.am: Added BasicSplitPaneDivider.java,
+ 	BasicSplitPaneUI.java.
+ 
+ 2003-06-22  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/basic/BasicBorders.java (SplitPaneBorder,
+ 	SplitPaneDividerBorder): New inner classes. The ugly appearance
+ 	is intentional, each pixel gets painted in the same color
+ 	as with the JDK.
+ 	
+ 	(getSplitPaneBorder, getSplitPaneDividerBorder): New methods.
+ 
+ 2003-06-22  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java: Stubbed to allow
+ 	compiling other classes.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java: Likewise.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/PlainSocketImpl.java:
+ 	Reformatting, merged class documentation with libgcj,
+ 	Moved all methods to match order of libgcj.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/SimpleTimeZone.java:
+ 	New version from libgcj.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java:
+ 	Use new MappedByteBufferImpl instead of MappedByteFileBuffer.
+ 	* java/nio/MappedByteBufferImpl.java:
+ 	New files.
+ 	* java/nio/MappedByteFileBuffer.java,
+ 	java/nio/MappedCharFileBuffer.java,
+ 	java/nio/MappedDoubleFileBuffer.java,
+ 	java/nio/MappedFloatFileBuffer.java,
+ 	java/nio/MappedIntFileBuffer.java,
+ 	java/nio/MappedLongFileBuffer.java,
+ 	java/nio/MappedLongFileBuffer.java:
+ 	Removed.
+ 	* java/nio/Makefile.am:
+ 	(EXTRA_DIST): Added MappedByteBufferImpl.java and removed
+ 	Mapped*FileBuffer.java
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectStreamField.java:
+ 	New version from libgcj.
+ 
+ 2003-06-21  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/BorderUIResource.java (LineBorderUIResource):
+ 	Note URL of enhancement request filed with Sun.
+ 
+ 	* javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-1.png,
+ 	javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-2.png,
+ 	javax/swing/plaf/basic/doc-files/
+ 	BasicBorders.SplitPaneDividerBorder-1.png: Indicate the pixels
+ 	drawn by SplitPaneDividerBorder on the edges that are not adjacent
+ 	to the JSplitPane contents.
+ 
+ 2003-06-20  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* AUTHORS (Sascha Brawer): Changed e-mail address.
+ 	* ChangeLog.usermap (brawer): Added myself.
+ 
+ 2003-06-20  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/LineBorder.java (getLineColor): New method.
+ 	Thanks to Michael Koch for having noticed the omission.
+ 	
+ 	* javax/swing/plaf/basic/doc-files/
+ 	BasicBorders.SplitPaneBorder-1.png: Corrected explanation of width.
+ 	* javax/swing/plaf/basic/doc-files/
+ 	BasicBorders.SplitPaneBorder-2.png: Close black border in upper half.
+ 
+ 2003-06-20  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/SoftBevelBorder.java (serialVersionUID):
+ 	Use value from JDK 1.4.1_01 on GNU/Linux. The old value was
+ 	determined using Apple/Sun JDK 1.3.1. This value should not have
+ 	changed between JDK releases.  Since it did, Classpath better
+ 	uses the value from the newer JDK.  Thanks to Michael Koch
+ 	<konqueror@gmx.de> for noticing.
+ 	
+ 	* javax/swing/plaf/basic/BasicBorders.java (MenuBarBorder): Re-written.
+ 	(getMenuBarBorder): New method.
+ 
+ 	* javax/swing/plaf/basic/doc-files/
+ 	BasicBorders.SplitPaneBorder-1.png,
+ 	BasicBorders.SplitPaneBorder-2.png,
+ 	BasicBorders.SplitPaneDividerBorder-1.png: New image.
+ 
+ 2003-06-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java,
+ 	gnu/java/nio/SocketChannelImpl.java:
+ 	New versions from libgcj.
+ 
+ 2003-06-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/HttpURLConnection.java,
+ 	java/net/Inet4Address.java,
+ 	java/net/Inet6Address.java,
+ 	java/net/ServerSocket.java,
+ 	java/net/SocketImpl.java,
+ 	java/net/URLClassLoader.java:
+ 	New versions from libgcj.
+ 
+ 2003-06-19  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* configure.in: uncomment m4_pattern_allow to avoid autoconf warning
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/SimpleTimeZone.java:
+ 	Dont import unneeded classes, reformatted.
+ 	(getDSTDavings): @since 1.2.
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JInternalFrame.java
+ 	(serialVersionUID): New member variable.
+ 	(CONTENT_PANE_PROPERTY): Likewise.
+ 	(MENU_BAR_PROPERTY): Likewise.
+ 	(TITLE_PROPERTY): Likewise.
+ 	(LAYERED_PANE_PROPERTY): Likewise.
+ 	(ROOT_PANE_PROPERTY): Likewise.
+ 	(GLASS_PANE_PROPERTY): Likewise.
+ 	(FRAME_ICON_PROPERTY): Likewise.
+ 	(IS_SELECTED_PROPERTY): Likewise.
+ 	(IS_CLOSED_PROPERTY): Likewise.
+ 	(IS_MAXIMUM_PROPERTY): Likewise.
+ 	(IS_ICON_PROPERTY): Likewise.
+ 	* javax/swing/MenuSelectionManager.java
+ 	(changeEvent): New member variable.
+ 	(listenerList): Likewise.
+ 	(fireStateChanged): New method.
+ 	(addChangeListener): Likewise.
+ 	(removeChangeListener): Likewise.
+ 	(getChangeListeners): Likewise.
+ 	* javax/swing/SwingUtilities.java:
+ 	Reformatted.
+ 	(SwingUtilities): Implements SwingConstants.
+ 	(getRootPane): Must be public.
+ 	(updateComponentTreeUI): Likewise.
+ 	* javax/swing/JComponent.java,
+ 	javax/swing/ToggleButtonModel.java:
+ 	Reformatted.
+ 	* javax/swing/SpinnerModel.java:
+ 	New file.
+ 	* javax/swing/Makefile.am
+ 	(EXTRA_DIST): Added SpinnelModel.java.
+ 
+ 2003-06-19  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/basic/BasicBorders.java (RadioButtonBorder,
+ 	ToggleButtonBorder): Re-written.
+ 	(getRadioButtonBorder, getToggleButtonBorder): New public method.
+ 	* javax/swing/plaf/basic/doc-files/
+ 	BasicBorders.MenuBarBorder-1.png,
+ 	BasicBorders.RadioButtonBorder-1.png,
+ 	BasicBorders.ToggleButtonBorder-1.png: New image.
+ 	
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java
+ 	(equals): Simplified code.
+ 
+ 2003-06-19  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/UIManager.java (getLookAndFeelDefaults): Made public.
+ 	* javax/swing/plaf/basic/BasicBorders.java (ButtonBorder): Re-written.
+ 	(getButtonBorder): New public method.
+ 	(getMarginBorder): New private method.
+ 	(sharedMarginBorder): New private field.
+ 	* javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-1.png:
+ 	New image.
+ 	
+ 2003-06-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/Inet6Address.java (isAnyLocalAddress): Don't use "=="
+ 	on arrays.
+ 	(isLoopbackAddress): Likewise.
+ 	* java/net/Inet4Address.java (isAnyLocalAddress): Don't use "=="
+ 	on arrays.
+ 
+ 2003-06-19  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/Font.java (getLineMetrics(String, FontRenderContext)):
+ 	Stubbed for avoiding compilation errors in Swing.
+ 
+ 2003-06-18  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java: Re-written
+ 	from scratch.
+ 
+ 	* javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-1.png,
+ 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-2.png,
+ 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-3.png,
+ 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-4.png,
+ 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-5.png,
+ 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-6.png,
+ 	javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-7.png:
+ 	New image.
+ 	
+ 	* javax/swing/plaf/basic/BasicButtonUI.java (paint, paintText):
+ 	Don't use methods that are not part of the official API.
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java (getPreferredSize),
+ 	javax/swing/plaf/basic/BasicCheckBoxUI.java (getPreferredSize),
+ 	javax/swing/plaf/basic/BasicRadioButtonUI.java (getPreferredSize),
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.java (getPreferredSize):
+ 	Use BasicGraphicsUtils.getPreferredButtonSize instead of a method
+ 	that is not part of the official API.
+ 
+ 	* javax/swing/plaf/basic/BasicLabelUI.java (getPreferredSize):
+ 	Replace call to method that is not part of the official API
+ 	with a dummy value.
+ 	
+ 2003-06-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/x509/X509Certificate.java:
+ 	Explicitely import used classes.
+ 
+ 2003-06-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/IndexColorModel.java:
+ 	Reformatted.
+ 
+ 2003-06-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java,
+ 	gnu/java/nio/SelectorImpl.java,
+ 	gnu/java/nio/ServerSocketChannelImpl.java,
+ 	gnu/java/nio/SocketChannelImpl.java,
+ 	java/nio/DirectByteBufferImpl.java:
+ 	New versions from libgcj.
+ 
+ 2003-06-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetSocketAddress.java,
+ 	java/net/Socket.java:
+ 	New versions from libgcj.
+ 
+ 2003-06-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Locale.java,
+ 	java/util/PropertyResourceBundle.java,
+ 	java/util/prefs/AbstractPreferences.java,
+ 	java/util/prefs/Preferences.java,
+ 	java/util/prefs/PreferencesFactory.java,
+ 	java/util/zip/ZipEntry.java,
+ 	java/util/zip/ZipFile.java,
+ 	java/util/zip/ZipInputStream.java,
+ 	java/util/zip/ZipOutputStream.java:
+ 	New versions from libgcj.
+ 
+ 2003-06-17  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/basic/BasicBorders.java
+ 	(BasicBorders.MarginBorder): Re-written	from scratch.
+ 	* javax/swing/plaf/basic/doc-files: New directory for Javadoc images.
+ 	* javax/swing/plaf/basic/doc-files/BasicBorders.MarginBorder-1.png:
+ 	New image.
+ 
+ 2003-06-17  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/plaf/BorderUIResource.java (BorderUIResource): Check
+ 	argument validity.
+ 	(paintBorder, getBorderInsets, isBorderOpaque): Call wrapped delegate.
+ 	(etchedBorderUIResource, loweredBevelBorderUIResource,
+ 	raisedBevelBorderUIResource, blackLineBorderUIResource): New fields.
+ 	(getEtchedBorderUIResource, getLoweredBevelBorderUIResource,
+ 	getRaisedBevelBorderUIResource, getBlackLineBorderUIResource):
+ 	Create shared borders on demand.
+ 	
+ 	(BorderUIResource.BevelBorderUIResource): Add Javadoc.
+ 	(BorderUIResource.CompundBorderUIResource): Add Javadoc.
+ 	(BorderUIResource.EmptyBorderUIResource): Add Javadoc.
+ 	(BorderUIResource.EtchedBorderUIResource): Add Javadoc.
+ 	(BorderUIResource.LineBorderUIResource): Add Javadoc.
+ 	(BorderUIResource.MatteBorderUIResource): Add Javadoc.
+ 	(BorderUIResource.TitledBorderUIResource): Add Javadoc.
+ 
+ 	(BorderUIResource.LineBorderUIResource): Add comment for noting
+ 	that there is no constructor which would take a value for
+ 	the roundedCorners property. Also gives the "review ID"
+ 	of the enhancement request that was filed with Sun.
+ 	
+ 	(BorderUIResource.EmptyBorderUIResource.EmptyBorderUIResource(int,
+ 	int, int, int), BorderUIResource.MatteBorderUIResource
+ 	.MatteBorderUIResource(int, int, int, int, Color), BorderUIResource
+ 	.MatteBorderUIResource.MatteBorderUIResource(int, int, int, int, Icon):
+ 	Call inherited constructor without allocating a new Insets object.
+ 
+ 	(BorderUIResource.TitledBorderUIResource.TitledBorderUIResource(
+ 	[all variants])): Accessibility made public.
+ 	
+ 	* javax/swing/border/CompoundBorder.java
+ 	(CompoundBorder(Border, Border)): Fix typos in API documentation.
+ 	
+ 	* javax/swing/plaf/.cvsignore: Add *.class.
+ 
+ 2003-06-16  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/EmptyBorder.java (getBorderInsets()): New method.
+ 
+ 	* javax/swing/border/Border.java: Added API documentation.
+ 	
+ 	* javax/swing/border/MatteBorder.java: Re-written from scratch.
+ 	* javax/swing/border/doc-files/MatteBorder-1.png,
+ 	javax/swing/border/doc-files/MatteBorder-2.png,
+ 	javax/swing/border/doc-files/MatteBorder-3.png,
+ 	javax/swing/border/doc-files/MatteBorder-4.png,
+ 	javax/swing/border/doc-files/MatteBorder-5.png,
+ 	javax/swing/border/doc-files/MatteBorder-6.png: New image.
+ 	
+ 	* javax/swing/border/SoftBevelBorder.java: Initial check-in.
+ 	* javax/swing/border/doc-files/SoftBevelBorder-1.png,
+ 	* javax/swing/border/doc-files/SoftBevelBorder-2.png,
+ 	* javax/swing/border/doc-files/SoftBevelBorder-3.png: New image.
+ 
+ 	* javax/swing/border/Makefile.am: Add SoftBevelBorder.java.
+ 
+ 2003-06-16  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/LineBorder.java: Re-written from scratch.
+ 	* javax/swing/border/doc-files/LineBorder-1.png: New image.
+ 
+ 2003-06-13  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* configure.in: last patch missing necessary quotation
+ 	characters, see the autoconf manual for macro writers for
+ 	details.
+ 
+ 2003-06-13  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/EtchedBorder.java: Re-written from scratch.
+ 	* javax/swing/border/doc-files/EtchedBorder-1/2.png: New images.
+ 	* javax/swing/border/BevelBorder.java (serialVersionUID): Added.
+ 	* javax/swing/border/CompundBorder.java (serialVersionUID): Explain
+ 	how the value was obtained.
+ 
+ 2003-06-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/MappedByteFileBuffer.java,
+ 	gnu/java/nio/MappedCharFileBuffer.java,
+ 	gnu/java/nio/MappedDoubleFileBuffer.java,
+ 	gnu/java/nio/MappedFloatFileBuffer.java,
+ 	gnu/java/nio/MappedIntFileBuffer.java,
+ 	gnu/java/nio/MappedLongFileBuffer.java,
+ 	gnu/java/nio/MappedShortFileBuffer.java:
+ 	Removed.
+ 
+ 2003-06-13  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/BevelBorder.java: Re-written from scratch.
+ 	* javax/swing/border/EmptyBorder.java: Re-written from scratch.
+ 	* javax/swing/border/doc-files/: New directory for JavaDoc images.
+ 	* javax/swing/border/doc-files/BevelBorder-1/2/3.png: New images.
+ 	* javax/swing/border/doc-files/EmptyBorder-1.png: New image.
+ 	* javax/swing/border/.cvsignore: Added *.class to ignored files.
+ 
+ 2003-06-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileOutputStream.java
+ 	(FileOutputStream): Fix parens.
+ 	* java/util/zip/InflaterInputStream.java
+ 	(read): Fix parens.
+ 
+ 2003-06-12  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/UIManager.java (getFont): Made public in conformance with
+ 	the API spec.
+ 
+ 2003-06-12  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/AbstractBorder.java (getBorderInsets): Revised Javadoc
+ 	better explains the purpose of the method.
+ 	* javax/swing/border/TitledBorder.java (getBorderInsets): Likewise.
+ 
+ 2003-06-11  Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/Locale.java (Locale): Intern String fields.
+ 	(equals): Compare String references, not contents.
+ 	(getISO3Language): Ditto.
+ 	(getISO3Country): Ditto.
+ 
+ 2003-06-11  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* configure.in: Allow building when glib 2.0 / gtk 2.0 are not
+ 	present.
+ 
+ 2003-06-11  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/text/DateFormat.java (equals): The JDK behaviour is not to
+ 	include the Calendar object in the equality predicate.
+ 	* java/text/DateFormat.java (hashCode): Ditto.
+ 	* java/text/SimpleDateFormat.java (equals): The JDK behaviour is
+ 	not to include the century start Date in the equality  predicate.
+ 	* java/text/SimpleDateFormat.java (hashCode): New method.
+ 
+ 2003-06-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/PrintStream.java: Not deprecated.
+ 
+ 2003-06-12  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/TitledBorder.java: New implementation.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/InflaterInputStream.java:
+ 	Reworked formatting and documentation.
+ 	(close): Set in to null.
+ 	(fill): Check if stream is already closed.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/directory/Attribute.java
+ 	(serialVersionUID): New member variable.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedReader.java
+ 	(mark): Throw exception if readLimit < 0.
+ 	* java/io/FileOutputStream.java
+ 	(FileOutputStream): Set FileDescriptor.WRITE flag when appending to a
+ 	file.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java:
+ 	New version from libgcj.
+ 
+ 2003-06-11  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/io/FileOutputStream.java
+ 	(FileOutputStream): Set the WRITE bit when opening a file for append.
+ 	* java/io/InputStreamReader.java
+ 	(close): Null the wrapped stream.
+ 	(ready): Test for closed Reader.
+ 	(read): Likewise.
+ 	(skip): New method.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/MappedByteBuffer.java,
+ 	java/nio/ShortBuffer.java,
+ 	java/nio/channels/Channels.java,
+ 	java/nio/channels/ServerSocketChannel.java,
+ 	java/nio/channels/spi/AbstractSelector.java:
+ 	New versions from libgcj.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java:
+ 	Imported import java.nio.MappedByteFileBuffer.
+ 	(map_address): made public for now.
+ 	* java/nio/MappedByteBuffer.java,
+ 	java/nio/MappedByteFileBuffer.java,
+ 	java/nio/MappedCharFileBuffer.java,
+ 	java/nio/MappedDoubleFileBuffer.java,
+ 	java/nio/MappedFloatFileBuffer.java,
+ 	java/nio/MappedIntFileBuffer.java,
+ 	java/nio/MappedLongFileBuffer.java,
+ 	java/nio/MappedShortFileBuffer.java:
+ 	Moved from gnu/java/nio.
+ 	* gnu/java/nio/Makefile.am
+ 	(EXTRA_DIST): Removed files.
+ 	* java/nio/Makefile.am
+ 	(EXTRA_DIST): Added new files.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java,
+ 	java/net/URLStreamHandler.java:
+ 	New versions from libgcj.
+ 
+ 2003-06-11  Torsten Rupp  <rupp@aicas.com>
+ 
+ 	* native/jni/java-io/java_io_File.c:
+ 	replace lstat() -> stat() in isDirectory/isFile to be able to follow symbolic links
+ 
+ 
+ 2003-06-11  Torsten Rupp  <rupp@aicas.com>
+ 
+ 	* native/jni/java-net/javanet.c:
+ 	replace recvfrom() -> recv() in case of stream sockets
+ 
+ 2003-06-11  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/AbstractBorder.java: Numerous fixes for making
+ 	the implementaton comply with the API specification. Added Javadoc.
+ 	
+ 	(paintBorder): Removed warning because calling this method is perfectly
+ 	feasible for some subclasses, for instance EmptyBorder.
+ 
+ 	* javax/swing/border/CompoundBorder.java (serialVersionUID): Added.
+ 	(paintBorder): Docfix.
+ 	
+ 2003-06-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/JList.java (setListData): Remove gcj workaround.
+ 	* java/security/BasicPermission.java: Remove gcj workaround.
+ 	* java/lang/reflect/Proxy.java (getProperty): Remove gcj
+ 	workaround.
+ 	* java/awt/im/InputSubset.java: Remove gcj workaround.
+ 
+ 2003-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/BorderFactory.java:
+ 	Wrapped all method documentations.
+ 	(createEtchedBorder): New method.
+ 
+ 2003-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/image/GdkPixbufDecoder.java:
+ 	Reworked imports to explicitely import classes only.
+ 
+ 2003-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ServerSocketChannelImpl.java,
+ 	gnu/java/nio/SocketChannelImpl.java:
+ 	Mainly merged with libgcj.
+ 
+ 2003-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java:
+ 	New version from libgcj.
+ 
+ 2003-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/PrintStream.java
+ 	(close): Removed "synchronized". This class is not thread-safe.
+ 	(write): Likewise.
+ 
+ 2003-06-10  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/border/CompoundBorder.java: Re-implemented from scratch;
+ 	see mailing list archive of 2003-06-10 for a list of issues with the
+ 	previous implementation.
+ 
+ 2003-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/border/AbstractBorder.java,
+ 	javax/swing/border/Border.java,
+ 	javax/swing/border/CompoundBorder.java:
+ 	Reworked imports and constructors, reformatted files.
+ 
+ 2003-06-09  John Leuner  <jewel@debian.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
+ 	GtkEvents.c, GtkWindowPeer.c: removed SETV macro
+ 	changed gtk_object_get to g_object_get
+ 	
+ 2003-06-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/SimpleDateFormat.java (parse(String,ParsePosition)):
+ 	Limit number of characters in numeric field when required.
+ 	* java/text/DecimalFormat.java (parse(String,ParsePosition)):
+ 	Respect maximumIntegerDigits.
+ 
+ 2003-06-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Robot.java
+ 	(screen): New member variable.
+ 	* javax/swing/BorderFactory.java
+ 	(create*Border): Implemented.
+ 	* javax/swing/plaf/BorderUIResource.java
+ 	(*BorderUIResource): Call correct parent constructor.
+ 
+ 2003-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/BorderFactory.java:
+ 	Reformatted.
+ 	* javax/swing/JTable.java:
+ 	Import javax.swing.table.JTableHeader.
+ 	* javax/swing/table/JTableHeader.java:
+ 	New file.
+ 	* javax/swing/table/Makefile.am
+ 	(EXTRA_DIST): Added JTableHeader.java.
+ 
+ 2003-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JButton.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/swing/JComboBox.java
+ 	(serialVersionUID): New member variable.
+ 	(isFocusTraversable): Added @deprecated tag.
+ 	* javax/swing/JPasswordField.java
+ 	(getText): Added @deprecated tag.
+ 	* javax/swing/JScrollPane.java:
+ 	Reworked imports and class declaration.
+ 	* javax/swing/JTable.java:
+ 	Reworked imports.
+ 	* javax/swing/JViewport.java:
+ 	Reworked imports.
+ 	* javax/swing/UIDefaults.java
+ 	(UIDefaults): Implements LazyValue.
+ 	(serialVersionUID): New member variable.
+ 	* javax/swing/event/SwingPropertyChangeSupport.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/swing/event/UndoableEditEvent.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/swing/plaf/basic/BasicDefaults.java:
+ 	Reworked imports.
+ 
+ 2003-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/colorchooser/AbstractColorChooserPanel.java,
+ 	javax/swing/colorchooser/ColorChooserComponentFactory.java,
+ 	javax/swing/colorchooser/ColorSelectionModel.java,
+ 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
+ 	javax/swing/event/AncestorEvent.java,
+ 	javax/swing/event/HyperlinkEvent.java,
+ 	javax/swing/event/InternalFrameAdapter.java,
+ 	javax/swing/event/InternalFrameEvent.java,
+ 	javax/swing/event/ListDataEvent.java,
+ 	javax/swing/event/MouseInputAdapter.java,
+ 	javax/swing/event/TableModelEvent.java,
+ 	javax/swing/event/TreeWillExpandListener.java,
+ 	javax/swing/filechooser/FileFilter.java,
+ 	javax/swing/filechooser/FileSystemView.java,
+ 	javax/swing/filechooser/FileView.java,
+ 	javax/swing/table/AbstractTableModel.java,
+ 	javax/swing/table/DefaultTableCellRenderer.java,
+ 	javax/swing/table/DefaultTableColumnModel.java,
+ 	javax/swing/table/DefaultTableModel.java,
+ 	javax/swing/table/TableColumn.java,
+ 	javax/swing/text/JTextComponent.java,
+ 	javax/swing/tree/AbstractLayoutCache.java,
+ 	javax/swing/tree/DefaultMutableTreeNode.java,
+ 	javax/swing/tree/DefaultTreeCellEditor.java,
+ 	javax/swing/tree/DefaultTreeCellRenderer.java,
+ 	javax/swing/tree/DefaultTreeModel.java,
+ 	javax/swing/tree/DefaultTreeSelectionModel.java,
+ 	javax/swing/tree/FixedHeightLayoutCache.java,
+ 	javax/swing/tree/TreeCellEditor.java,
+ 	javax/swing/tree/TreeModel.java,
+ 	javax/swing/tree/TreeNode.java,
+ 	javax/swing/tree/TreePath.java,
+ 	javax/swing/tree/TreeSelectionModel.java,
+ 	javax/swing/tree/VariableHeightLayoutCache.java,
+ 	javax/swing/undo/AbstractUndoableEdit.java,
+ 	javax/swing/undo/CompoundEdit.java,
+ 	javax/swing/undo/StateEdit.java,
+ 	javax/swing/undo/UndoManager.java,
+ 	javax/swing/undo/UndoableEditSupport.java:
+ 	Reworked import statements to import classes explicitely only.
+ 	Checked extends and implements statements, some reformattin.
+ 
+ 2003-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java,
+ 	javax/swing/Box.java,
+ 	javax/swing/DefaultListSelectionModel.java,
+ 	javax/swing/FocusManager.java,
+ 	javax/swing/JCheckBoxMenuItem.java,
+ 	javax/swing/JComboBox.java,
+ 	javax/swing/JDesktopPane.java,
+ 	javax/swing/JLabel.java,
+ 	javax/swing/JLayeredPane.java,
+ 	javax/swing/JList.java,
+ 	javax/swing/JPanel.java,
+ 	javax/swing/JPopupMenu.java,
+ 	javax/swing/JProgressBar.java,
+ 	javax/swing/JRadioButtonMenuItem.java,
+ 	javax/swing/JSeparator.java,
+ 	javax/swing/JTabbedPane.java,
+ 	javax/swing/JToggleButton.java,
+ 	javax/swing/JToolBar.java,
+ 	javax/swing/JToolTip.java,
+ 	javax/swing/Timer.java:
+ 	Fixed extends and implements.
+ 
+ 2003-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java,
+ 	javax/swing/AbstractCellEditor.java,
+ 	javax/swing/BorderFactory.java,
+ 	javax/swing/Box.java,
+ 	javax/swing/BoxLayout.java,
+ 	javax/swing/ButtonGroup.java,
+ 	javax/swing/DefaultButtonModel.java,
+ 	javax/swing/DefaultListModel.java,
+ 	javax/swing/DefaultListSelectionModel.java,
+ 	javax/swing/FocusManager.java,
+ 	javax/swing/ImageIcon.java,
+ 	javax/swing/InputMap.java,
+ 	javax/swing/JApplet.java,
+ 	javax/swing/JCheckBox.java,
+ 	javax/swing/JColorChooser.java,
+ 	javax/swing/JComboBox.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JDesktopPane.java,
+ 	javax/swing/JDialog.java,
+ 	javax/swing/JEditorPane.java,
+ 	javax/swing/JFileChooser.java,
+ 	javax/swing/JFormattedTextField.java,
+ 	javax/swing/JFrame.java,
+ 	javax/swing/JLabel.java,
+ 	javax/swing/JLayeredPane.java,
+ 	javax/swing/JList.java,
+ 	javax/swing/JMenuBar.java,
+ 	javax/swing/JMenuItem.java,
+ 	javax/swing/JOptionPane.java,
+ 	javax/swing/JPanel.java,
+ 	javax/swing/JRadioButton.java,
+ 	javax/swing/JRootPane.java,
+ 	javax/swing/JScrollBar.java,
+ 	javax/swing/JSlider.java,
+ 	javax/swing/JTabbedPane.java,
+ 	javax/swing/JTextField.java,
+ 	javax/swing/JToggleButton.java,
+ 	javax/swing/JToolTip.java,
+ 	javax/swing/JTree.java,
+ 	javax/swing/JWindow.java,
+ 	javax/swing/KeyStroke.java,
+ 	javax/swing/ListSelectionModel.java,
+ 	javax/swing/LookAndFeel.java,
+ 	javax/swing/RepaintManager.java,
+ 	javax/swing/ScrollPaneLayout.java,
+ 	javax/swing/SizeRequirements.java,
+ 	javax/swing/SwingConstants.java,
+ 	javax/swing/Timer.java,
+ 	javax/swing/UIManager.java:
+ 	Reworked import statements to explicitely import used classes.
+ 
+ 2003-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Frame.java
+ 	(setMaximizedBounds): Implemented.
+ 	* java/awt/Graphics.java
+ 	(drawRoundRect): Removed. This was never in the official JDK API.
+ 	(drawChars): Likewise.
+ 	(drawString): Removed commented drawString.
+ 	* java/awt/Menu.java
+ 	(cound): Removed. This was never in the official JDK API.
+ 	* javax/swing/AbstractAction.java:
+ 	Reformatted.
+ 	(actionPerformed): Removed. This was never in the official JDK API.
+ 	* javax/swing/AbstractListModel.java
+ 	(getElementAt): Removed. This was never in the official JDK API.
+ 	(getSize): Likewise.
+ 
+ 2003-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/PrintStream.java:
+ 	Merged copright year from libgcj.
+ 	* java/security/Security.java:
+ 	New version from libgcj.
+ 
+ 2003-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(localAddr): Removed.
+ 	(bind): Dont initialize localAddr.
+ 	(getLocalAddress): Get local address from socket implementation.
+ 
+ 2003-06-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocketImpl.java
+ 	(getOption): Removed. This was a workaround for GCJ < 3.3.
+ 	(setOption): Likewise.
+ 	* java/net/MulticastSocket.java
+ 	(MulticastSocket): Call setReuseAddress (true) in all constructors.
+ 	* java/net/SocketImpl.java
+ 	(getOption): Removed. This was a workaround for GCJ < 3.3.
+ 	(setOption): Likewise.
+ 	* java/net/URLConnection.java
+ 	(getContentType): Dont try to guess content type if header
+ 	"content-type" doesnt exist.
+ 	(getHeaderFieldDate): Merged with libgcj.
+ 	(getHeaderFieldKey): Likewise.
+ 	(setDoInput): Likewise.
+ 	(setUseCaches): Likewise.
+ 	(setIfModifiedSince): Likewise.
+ 	(getDefaultUseCaches): Likewise.
+ 	(setDefaultUseCaches): Likewise.
+ 	(addRequestProperty): New method merged from libgcj.
+ 	(getContent): Likewise.
+ 
+ 2003-06-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/border/BevelBorder.java,
+ 	javax/swing/border/EmptyBorder.java,
+ 	javax/swing/border/EtchedBorder.java,
+ 	javax/swing/border/LineBorder.java,
+ 	javax/swing/border/MatteBorder.java,
+ 	javax/swing/border/TitledBorder.java,
+ 	javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/basic/BasicDefaults.java,
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	New versions from libgcj to make it all compile.
+ 
+ 2003-06-05  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* java/text/SimpleDateFormat.java (SimpleDateFormat): Added
+ 	numberFormat.setParseIntegerOnly(true).
+ 
+ 2003-06-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/image/ColorModel.java: Typo fix.
+ 
+ 2003-06-05  Jeff Sturm	<jsturm@one-point.com>
+ 
+ 	* java/io/ObjectInputStream (enableResolveObject):
+ 	Fixed spelling of permission name.
+ 
+ 2003-06-05  Ito Kazumitsu  <ito.kazumitsu@hitachi-cable.co.jp>
+ 
+ 	* java/awt/image/ColorModel.java (ColorModel): Compute sRGB.
+ 
+ 2003-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/ScrollPane.java
+ 	(addImpl): Must be protected.
+ 	(eventTypeEnabled): Likewise.
+ 	* java/awt/Window.java
+ 	(isFocusableWindow): Must be final.
+ 	* java/awt/image/WritableRaster.java
+ 	(setRect): Reordered arguments to match SUNs version
+ 	and fixed our implementation.
+ 	* java/awt/print/PageFormat.java
+ 	(getImageableHeight): Fixed typo in name.
+ 	* java/awt/print/PrinterJob.java
+ 	(setCopies): Fixed argument to match SUNs version.
+ 
+ 2003-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Button.java,
+ 	java/awt/Checkbox.java,
+ 	java/awt/CheckboxMenuItem.java,
+ 	java/awt/Choice.java,
+ 	java/awt/Container.java,
+ 	java/awt/Dialog.java,
+ 	java/awt/EventQueue.java,
+ 	java/awt/FileDialog.java,
+ 	java/awt/Frame.java,
+ 	java/awt/Label.java,
+ 	java/awt/List.java,
+ 	java/awt/Menu.java,
+ 	java/awt/MenuItem.java,
+ 	java/awt/Panel.java,
+ 	java/awt/PopupMenu.java,
+ 	java/awt/Rectangle.java,
+ 	java/awt/ScrollPane.java,
+ 	java/awt/Scrollbar.java,
+ 	java/awt/TextArea.java,
+ 	java/awt/TextField.java,
+ 	java/awt/Window.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/awt/dnd/DragSource.java,
+ 	java/awt/dnd/DragSourceContext.java,
+ 	java/awt/event/HierarchyEvent.java,
+ 	java/awt/event/MouseWheelEvent.java,
+ 	java/awt/im/InputContext.java,
+ 	java/awt/image/BufferedImage.java,
+ 	java/awt/image/ComponentColorModel.java,
+ 	java/awt/image/Raster.java,
+ 	java/awt/image/WritableRaster.java,
+ 	java/awt/peer/ComponentPeer.java:
+ 	Reworked all imports, only import classes explicitly,
+ 	dont import unused classes.
+ 
+ 2003-05-30  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): Initialize laddr if null and use it.
+ 
+ 2003-05-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/PrintStream.java
+ 	(PrintStream): Renamed autoFlush to auto_flush;
+ 	* java/net/URLConnection.java
+ 	(getHeaderFieldInt): Compile fix.
+ 
+ 2003-05-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/PrintStream.java
+ 	(PrintStream): Merged with libgcj.
+ 	(write): Likewise.
+ 	* java/lang/reflect/Modifier.java:
+ 	Merged copyrigth with libgcj.
+ 	* java/net/URLConnection.java
+ 	(getHeaderFields): New method merged from libgcj.
+ 	(getHeaderFieldInt): Merged with libgcj.
+ 
+ 2003-05-25  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/net/NetPermission.java
+ 	Update class overview in docs
+ 	* java/net/NetworkInterface.java
+ 	Update documentation
+ 	* java/net/PasswordAuthentication.java
+ 	Reformat
+ 	* java/net/SocketPermission.java
+ 	Minor doc fix
+ 	
+ 2003-05-23  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/net/ContentHandlerFactory.java
+ 	Reformat, minor doc fixes
+ 	(createContentHandler): Explicitly declare public
+ 	* java/net/DatagramSocketImplFactory.java
+ 	Minor doc fixes
+ 	(createDatagramSocketImpl): Explicitly declare public
+ 	* java/net/FileNameMap.java
+ 	Reformat
+ 	(getContentTypeFor): Explicitly declare public
+ 	* java/net/SocketImplFactory.java
+ 	Reformat, minor doc fixes
+ 	(createSocketImpl): Explicitly declare public
+ 	* java/net/SocketOptions.java
+ 	Minor reformatting
+ 	* java/net/URLStreamHandlerFactory.java
+ 	Reformat, minor doc fixes
+ 	(createURLStreamHandler): Explicitly declare public
+ 
+ 2003-05-23  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/io/PushbackInputStream.java
+ 	Minor doc fixes
+ 
+ 2003-05-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/String.java:
+ 	Merged copyright with libgcj, added Per Bother as author, reordered
+ 	imports.
+ 	(compareToIgnoreCase): Renamed s to str to match libgcj.
+ 	(valueof): Merged from libgcj.
+ 
+ 2003-05-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/Inflater.java:
+ 	Merged copyright from libgcj, reformatted and reordered some methods.
+ 
+ 2003-05-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/StringBuffer.java:
+ 	Merged copyright from libgcj.
+ 	* java/lang/System.java
+ 	(mapLibraryName): Fixed documentation.
+ 
+ 2003-05-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Checkbox.java
+ 	(getItemListeners): New method.
+ 	* java/awt/Dialog.java
+ 	(Dialog): Reformatted classs documentation.
+ 	(undecorated): New member variable.
+ 	(isUndecorated): New method.
+ 	(setUndecorated): New method.
+ 	* java/awt/Font.java
+ 	(getPeer): Added @deprecated tag.
+ 	* java/awt/Frame.java
+ 	(maximizedBounds): New member variable.	
+ 	(undecorated): New member variable.
+ 	(getState): New implementation.
+ 	(setState): New method.
+ 	(setExtendedState): New method.
+ 	(getExtendedState): New method.
+ 	(getMaximizedBounds): New method.
+ 	(setMaximizedBounds): New method.
+ 	(isUndecorated): New method.
+ 	(setUndecorated): New method.
+ 	* java/awt/ScrollPaneAdjustable.java
+ 	(valueIsAdvertising): New member variable.
+ 	(getValueIsAdjusting): New method.
+ 	(setValueIsAdjusting): New method.
+ 	* java/awt/Scrollbar.java
+ 	(valueIsAdvertising): New member variable.
+ 	(getValueIsAdjusting): New method.
+ 	(setValueIsAdjusting): New method.
+ 	* java/awt/Window.java
+ 	(focusMgr): Added @since 1.2 tag.
+ 	(state): Likewise.
+ 	(focusableWindowState): New member variable.
+ 	(isFocusableWindow): New method.
+ 	(getFocusableWindowState): New method.
+ 	(setFocusableWindowState): New method.
+ 
+ 2003-05-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/DeflaterOutputStream.java,
+ 	java/util/zip/GZIPInputStream.java,
+ 	java/util/zip/GZIPOutputStream.java:
+ 	Reformatted.
+ 
+ 2003-05-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationKey.java:
+ 	Reformatted.
+ 	(originalText): Renamed from str to match libgcj.
+ 
+ 2003-05-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectionKeyImpl.java:
+ 	Reformatted.
+ 
+ 2003-05-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java:
+ 	Reformatted.
+ 	* java/io/PrintStream.java:
+ 	Reformatted.
+ 	(error_occurred): Fixed typo in documentation.
+ 
+ 2003-05-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileOutputStream.java:
+ 	New version from libgcj.
+ 
+ 2003-05-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataInputStream.java:
+ 	New version from libgcj.
+ 	* java/io/PrintStream.java
+ 	(error_occured): Inititialize with false.
+ 
+ 2003-05-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java
+ 	(fd): New member variable.
+ 	(released): New member variable.
+ 	(FileLockImpl): Added FileDescriptor object as argument.
+ 	(isValid): Implemented.
+ 	(release): Implemented.
+ 	(releaseImpl): New native method.
+ 
+ 2003-05-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java,
+ 	gnu/java/nio/CharBufferImpl.java,
+ 	gnu/java/nio/DoubleBufferImpl.java,
+ 	gnu/java/nio/FloatBufferImpl.java,
+ 	gnu/java/nio/IntBufferImpl.java,
+ 	gnu/java/nio/LongBufferImpl.java,
+ 	gnu/java/nio/ShortBufferImpl.java:
+ 	Moved to java/nio.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(write): Dont use ByteBufferImpl directly.
+ 	* gnu/java/nio/Makefile.am:
+ 	(EXTRA_DIST): Removed moved files.
+ 	* java/nio/ByteBuffer.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/ShortBuffer.java:
+ 	Dont import anything.
+ 	* java/nio/ByteBufferImpl.java,
+ 	java/nio/CharBufferImpl.java,
+ 	java/nio/DoubleBufferImpl.java,
+ 	java/nio/FloatBufferImpl.java,
+ 	java/nio/IntBufferImpl.java,
+ 	java/nio/LongBufferImpl.java,
+ 	java/nio/ShortBufferImpl.java:
+ 	Moved from gnu/java/nio.
+ 	* java/nio/Makefile.am
+ 	(EXTRA_DIST): Added moved files.
+ 
+ 2003-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java
+ 	(allocateDirect): Implemented.
+ 	* java/nio/CharViewBufferImpl.java,
+ 	java/nio/DirectByteBufferImpl.java,
+ 	java/nio/DoubleViewBufferImpl.java,
+ 	java/nio/FloatViewBufferImpl.java,
+ 	java/nio/IntViewBufferImpl.java,
+ 	java/nio/LongViewBufferImpl.java,
+ 	java/nio/ShortViewBufferImpl.java:
+ 	New files.
+ 	* java/nio/Makefile.am:
+ 	(EXTRA_DIST): Added new files.
+ 
+ 2003-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Calendar.java
+ 	(get): Not final anymore since JDK 1.4.
+ 	(set): Likewise.
+ 
+ 2003-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java,
+ 	gnu/java/nio/CharBufferImpl.java,
+ 	gnu/java/nio/DoubleBufferImpl.java,
+ 	gnu/java/nio/FloatBufferImpl.java,
+ 	gnu/java/nio/IntBufferImpl.java,
+ 	gnu/java/nio/LongBufferImpl.java,
+ 	gnu/java/nio/ShortBufferImpl.java,
+ 	java/nio/Buffer.java,
+ 	java/nio/ByteBuffer.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/ShortBuffer.java:
+ 	Big (partly-)merge from libgcj, only little changes are needed because gcj
+ 	handles package-private as public. 
+ 
+ 2003-05-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java
+ 	(ByteBuffer): Moved.
+ 	* java/nio/CharBuffer.java
+ 	(CharBuffer): Moved.
+ 	* java/nio/DoubleBuffer.java
+ 	(DoubleBuffer): Moved.
+ 	(allocateDirect): Removed.
+ 	(wrap): Removed.
+ 	* java/nio/FloatBuffer.java
+ 	(FloatBuffer): Moved, removed initialization of array_offset.
+ 	(allocateDirect): Removed.
+ 	(wrap): Removed.
+ 	* java/nio/IntBuffer.java
+ 	(IntBuffer): Moved, removed initialization of array_offset.
+ 	(allocateDirect): Removed.
+ 	(wrap): Removed.
+ 	* java/nio/LongBuffer.java
+ 	(LongBuffer): Moved, removed initialization of array_offset.
+ 	(allocateDirect): Removed.
+ 	(wrap): Removed.
+ 	* java/nio/ShortBuffer.java
+ 	(ShortBuffer): Moved, removed initialization of array_offset.
+ 	(allocateDirect): Removed.
+ 	(wrap): Removed.
+ 
+ 2003-05-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ShortBuffer.java
+ 	(get): Merged from libgcj.
+ 	(put): Likewise.
+ 	(compact): Likewise.
+ 	(isDirect): Likewise.
+ 	(slice): Likewise.
+ 	(duplicate): Likewise.
+ 	(asReadOnlyBuffer): Likewise.
+ 
+ 2003-05-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java: Merged documentation all over from libgcj,
+ 	reformatted code, no functional changes.
+ 	* java/nio/CharBuffer.java: Likewise.
+ 	* java/nio/DoubleBuffer.java: Likewise.
+ 	* java/nio/FloatBuffer.java: Likewise.
+ 	* java/nio/IntBuffer.java: Likewise.
+ 	* java/nio/LongBuffer.java: Likewise.
+ 	* java/nio/ShortBuffer.java: Likewise.
+ 
+ 2003-05-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetworkInterface.java:
+ 	New version from libgcj.
+ 
+ 2003-05-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataOutputStream.java:
+ 	New version from libgcj.
+ 	* java/io/PrintWriter.java:
+ 	Reformatted and moved class documentation.
+ 	* java/io/RandomAccessFile.java
+ 	(read): call in directly.
+ 
+ 2003-05-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Key.java
+ 	(Key): Fixed declaration of serialVersionUID.
+ 	* java/security/PrivateKey.java
+ 	(PrivateKey): Likewise.
+ 	* java/security/Provider.java
+ 	(Provider): Likewise.
+ 	* java/security/PublicKey.java
+ 	(PublicKey): Likewise.
+ 
+ 2003-05-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/FileLock.java:
+ 	New version from libgcj.
+ 	* java/nio/charset/Charset.java:
+ 	Likewise.
+ 
+ 2003-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java:
+ 	Reformated:
+ 	(CollationElementIterator): Class documentation merged from libgcj.
+ 	(collator): Renamed from rbc.
+ 	(text): Renamed from str.
+ 	(index): Renamed from pos.
+ 	(CollationElementIterator): Moved.
+ 	* java/text/CollationKey.java:
+ 	Merged copytight with libgcj.
+ 	* java/text/RuleBasedCollator.java:
+ 	Reformatted, fixed some documentation to use html entities.
+ 
+ 2003-05-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/RandomAccessFile.java
+ 	(out): New member variable.
+ 	(in): Likewise.
+ 	(buf): Removed.
+ 	(RandomAccessFile): Handle mode "rwd".
+ 	(read): Use in stream.
+ 	(readBoolean): Likewise.
+ 	(readByte): Likewise.
+ 	(readDouble): Likewise.
+ 	(readFloat): Likewise.
+ 	(readUnsignedByte): Likewise.
+ 	(write): Likewise.
+ 	(writeBoolean): Likewise.
+ 	(writeByte): Likewise.
+ 	(writeFloat): Likewise.
+ 	(writeDouble): Likewise.
+ 	(writeBytes): Likewise.
+ 	(writeChars): Likewise.
+ 	(writeUTF): Likewise.
+ 	(readChar): Use in stream, no need for being synchronized now.
+ 	(readFully): Likewise.
+ 	(readInt): Likewise.
+ 	(readLine): Likewise.
+ 	(readLong): Likewise.
+ 	(readShort): Likewise.
+ 	(readUnsignedShort): Likewise.
+ 	(readUTF): Likewise.
+ 	(writeShort): Likewise.
+ 	(writeChar): Likewise.
+ 	(writeInt): Likewise.
+ 	(writeLong): Likewise.
+ 	* java/io/FileDescriptor.java
+ 	(DSYNC): New constant.
+ 	* native/jni/java-io/FileDescriptor.c
+ 	(DSYNC): New constant.
+ 	(open): Handle new DSYNC constant.
+ 
+ 2003-05-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/RandomAccessFile.java
+ 	(RandomAccessFile): Reformatted.
+ 	(setLength): Likewise.
+ 	(length): Likewise.
+ 
+ 2003-05-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(createTempFile): Only throws IOException.
+ 	(compareTo): Renamed argument to match libgcj, doesnt throws
+ 	ClassCastException.
+ 	(deleteOnExit): Added @since tag.
+ 
+ 2003-05-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java:
+ 	New version from libgcj. Normal file operations should now work with
+ 	FileChannels.
+ 
+ 2003-05-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Identity.java
+ 	(serialVersionUID): Made it private.
+ 	* java/security/IdentityScope.java
+ 	(serialVersionUID): Made it private.
+ 	* java/security/KeyPair.java
+ 	(serialVersionUID): Made it private.
+ 	* java/security/SecureRandom.java
+ 	(serialVersionUID): Made it private.
+ 	* java/security/SecureRandomSpi.java
+ 	(serialVersionUID): Made it private.
+ 	* java/security/SignedObject.java
+ 	(serialVersionUID): Made it private.
+ 	* java/security/Signer.java
+ 	(serialVersionUID): Made it private.
+ 
+ 2003-05-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/BreakIterator.java
+ 	(clone): New method merged from libgcj.
+ 
+ 2003-05-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedOutputStream.java
+ 	(close): New method merged from libgcj.
+ 	(finalize): Likewise.
+ 	* java/io/DataInputStream.java
+ 	(readChar): Reformatted.
+ 	(readInt): Likewise.
+ 	(readLine): Merged documentation from libgcj.
+ 	(readUnsignedByte): Likewise.
+ 	(readUnsignedShort): Likewise.
+ 	(skip): Likewise.
+ 	* java/io/InputStreamReader.java
+ 	(read): Merged documentation from libgcj, reformatted.
+ 	* java/io/OutputStreamWriter.java
+ 	(OutputStreamWriter): Merged class documentation with libgcj.
+ 	(OutputStreamWriter): Reformatted.
+ 	(close): Likewise.
+ 	(getEncoding): Likewise.
+ 	(flush): Likewise.
+ 	(write): Merged with libgcj.
+ 
+ 2003-05-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(InetAddress): Merged documentation with libgcj.
+ 	* java/net/JarURLConnection.java
+ 	(getMainAttributes): Merged documentation with libgcj.
+ 	(getAttributes): Likewise.
+ 	(getManifest): Likewise.
+ 
+ 2003-05-06  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* java/security/Key.java: Fix misspelling of "version".
+ 	* java/security/PrivateKey.java: Likewise.
+ 	* java/security/Provider.java: Likewise.
+ 	* java/security/PublicKey.java: Likewise.
+ 
+ 2003-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(checkWrite): New method (from libgcj).
+ 	(checkRead): Likewise.
+ 	(writeObject): Likewise.
+ 	(readObject): Likewise.
+ 	(canRead): Replaced SecurityManager code with checkRead() call.
+ 	(exists): Likewise.
+ 	(isDirectory): Likewise.
+ 	(isFile): Likewise.
+ 	(lastModified): Likewise.
+ 	(length): Likewise.
+ 	(canWrite): Replaced SecurityManager code with checkWrite() call.
+ 	(mkdir): Likewise.
+ 	(renameTo): Likewise.
+ 
+ 2003-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataOutputStream.java
+ 	(write): Renamed argument to "value", merged documentation with
+ 	libgcj.
+ 	(writeBoolean): Likewise.
+ 	(writeByte): Likewise.
+ 	(writeShort): Likewise.
+ 	(writeChar): Likewise.
+ 	(writeInt): Likewise.
+ 	(writeLong): Likewise.
+ 	(writeFloat): Likewise.
+ 	(writeDouble): Likewise.
+ 	(writeBytes): Likewise.
+ 	(writeChars):Likewise.
+ 	(writeUTF): Likewise.
+ 	* java/io/File.java:
+ 	Reordered methods to match libgcj, some documentation merged from
+ 	libgcj and reformatting of some code.
+ 	* java/io/FileOutputStream.java
+ 	(FileOutputStream): Merged from libgcj.
+ 	* java/io/InputStreamReader.java:
+ 	Merged copyright from libgcj.
+ 	(InputStreamReader): Merged from libgcj.
+ 	* java/io/RandomAccessFile.java
+ 	(RandomAccessFile): Merged from libgcj.
+ 
+ 2003-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataInputStream.java:
+ 	Reordered all methods to match libgcj.
+ 
+ 2003-05-03  John Leuner  <jewel@debian.org>
+ 
+ 	* native/jni/java-net/java_net_PlainDatagramSocketImpl.c (Java_java_net_PlainDatagramSocketImpl_receive): 
+ 	added check for null packet argument
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URI.java
+ 	(create): Doesnt throws IllegalArgumentException.
+ 	* java/net/URLConnection
+ 	(URLConnection): Merged documentation with libgcj.
+ 	(getExpiration): Merged implementation with libgcj.
+ 	(getDate): Likewise.
+ 	(getLastModified): Likewise.
+ 	(getHeaderField): Likewise.
+ 	(getHeaderFieldKey): Likewise.
+ 	(setDoInput): Likewise.
+ 	(getHeaderFieldInt): Merged documentation with libgcj.
+ 	(getPermission): Likewise.
+ 	(setAllowUserInteraction): Likewise.
+ 	(setUseCaches): Likewise.
+ 	(setIfModifiedSince): Likewise.
+ 	(getDefaultUseCaches): Likewise.
+ 	(setRequestProperty): Likewise.
+ 	(getRequestProperty): Likewise.
+ 	(getRequestProperties): Likewise.
+ 	(setDefaultRequestProperty): Likewise.
+ 	(getDefaultRequestProperty): Likewise.
+ 	(guessContentTypeFromName): Likewise.
+ 	(setDoOutput): Merged implementation and documentation with libgcj.
+ 	(setContentHandlerFactory): Likewise.
+ 	(getFileNameMap): Likewise.
+ 	(setFileNameMap): Likewise.
+ 	(setDefaultAllowUserInteraction): No need to make this sychronized.
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java:
+ 	More merging with libgcj.
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java,
+ 	java/net/JarURLConnection,
+ 	java/net/URLConnection:
+ 	Partly merged with libgcj.
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationKey.java:
+ 	Reformated and reorderd to match libgcj more.
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java:
+ 	Merged class documentation with libgcj.
+ 	* java/net/URL.java:
+ 	Reformatted and reordered to match libgcj.
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): Reformatted.
+ 	* java/net/ServerSocket.java
+ 	(ServerSocket): Reformatted.
+ 	* java/net/Socket.java
+ 	(Socket): Reformatted.
+ 	* java/net/URLConnection.java:
+ 	Some documentation merged with libgcj.
+ 	(doInput): Set default value to true.
+ 	(ifModifiedSince): Set default value to 0L.
+ 
+ 2003-05-01  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	Fixes [ Bug #3415 ] System.setIn/setOut/setErr do not work
+ 	* native/jni/java-lang/java_lang_VMSystem.c
+ 	(Java_java_lang_VMSystem_setIn): set static field in java/lang/System
+ 	and perform appropriate JNI exception checks
+ 	(Java_java_lang_VMSystem_setOut): ditto
+ 	(Java_java_lang_VMSystem_setErr): ditto
+ 
+ 2003-05-01  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(GDK_STABLE_IS_PIXMAP): converted macro to use GDK_IS_PIXMAP
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(TEXT_FROM_SW): convert macro to use GTK_TEXT_VIEW
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): convert
+ 	gtk_text_new to gtk_text_view_new
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_old_create): removed
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkTextGetSize): converted
+ 	to use just gtk_widget_size_request, though this may be in error it
+ 	at least isn't as bad as the previous implementation
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_insert): convert to new
+ 	GTK2 GtkTextBuffer/GtkTextIter usage
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_replaceRange): ditto
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont): convert
+ 	to Pango, new to GTK2
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(getCaretPosition): GtkTextView and GtkEntry handled separately 
+ 	since in GTK2 they do not share common ancestory.
+ 	(setCaretPosition): ditto
+ 	(getSelectionStart): ditto
+ 	(getSelectionEnd): ditto
+ 	(select): ditto
+ 	(setEditable): ditto
+ 	(getText): ditto
+ 	(setText): ditto
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create): use gtk_button_new
+ 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont): use Pango
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize): converted to use
+ 	just gtk_widget_size_request, though this may be in error it at least
+ 	isn't as bad as the previous implementation
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextField.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetSize): ditto
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkSetFont): use Pango
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(gdk_window_get_root_geometry): GdkWindowPrivate changed to GdkWindow;
+ 	attempting to use gdk_window_get_geometry instead of direct Xlib calls
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(GTK_OBJECT_SETV): unsure about use of the private API to set data
+ 	generically for different types, but updated to compile with GTK2
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectHooks): give
+ 	connect_awt_hook the only structure member, range, in GTK2 instead;
+ 	changed to connect to signal on the scroll bar instead of the 
+ 	adjustment since that is the one with GtkScrollType in GTK2
+ 	(post_adjustment_event): modified to fit GtkScrollBar move_slider
+ 	signal signature
+ 	* configure.in: require gtk 2.0+, glib 2.0+
+ 	* HACKING: mention change in GTK requirements
+ 	* INSTALL: mention change in GTK requirements
+ 	* THANKYOU: add David P. Grove, fix order
+ 
+ 2003-05-01  David P. Grove  <groved@us.ibm.com>
+ 
+ 	This patch fixes a regression for the past month that made it 
+ 	difficult to read files larger than 2^16 bytes.
+ 	* native/jni/java-io/FileDescriptor.c
+ 	(CONVERT_JLONG_TO_INT): modified macro to fix large file problem
+ 	(CONVERT_JINT_TO_INT): ditto
+ 	(CONVERT_SSIZE_T_TO_INT): new macro
+ 	(Java_java_io_FileDescriptor_nativeReadBuf): use 
+ 	CONVERT_SSIZE_T_TO_INT macro
+ 	(Java_java_io_FileDescriptor_nativeAvailable): ditto
+ 
+ 2003-05-01  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* native/jni/java-lang/java_lang_VMSystem.c:
+ 	(Java_java_lang_VMSystem_setIn0): renamed 
+ 	Java_java_lang_VMSystem_setIn to match Java class and native headers
+ 	(Java_java_lang_VMSystem_setOut0): renamed 
+ 	Java_java_lang_VMSystem_setOut to match Java class and native headers
+ 	(Java_java_lang_VMSystem_setErr0): renamed 
+ 	Java_java_lang_VMSystem_setErr to match Java class and native headers
+ 
+ 2003-04-30  Torsten Rupp  <rupp@homer.aicas.com>
+ 
+ 	* /cvsroot/classpath/classpath/java/net/Socket.java:
+ 	Added try-catch-blocks to
+ 
+ 	* Socket.java: socket()
+ 	* ServerSocket.java: socket()
+ 	* DatagramSocket.java: socket()
+ 
+ 	with clean-up of file-descriptors in case bind(), connect() or listen()
+ 	fail. This fix will avoid loss of file-descriptors in the case create()
+ 	is executed successfully, but bind/connect/listen fail with an exception.
+ 	Then close() was not called and the file-descriptor allcoated by create()
+ 	was not returned to the OS.
+ 
+ 2003-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/cert/Certificate.java
+ 	(Certificate): Implements java.io.Serializable.
+ 	(serialVersionUID): Must be private.
+ 	* java/security/cert/PKIXCertPathBuilderResult.java
+ 	(PKIXCertPathBuilderResult): Implements CertPathBuilderResult.
+ 	* java/security/cert/X509Certificate.java
+ 	(serialVersionUID): New member variable.
+ 
+ 2003-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java,
+ 	java/text/CollationKey.java,
+ 	java/text/RuleBasedCollator.java:
+ 	Reformatted.
+ 
+ 2003-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/regex/Matcher.java
+ 	(pattern): New member variable.
+ 	(appendReplacement): New method.
+ 	(appendTail): New method.
+ 	(end): New method.
+ 	(find): New method.
+ 	(group): New method.
+ 	(replaceFirst): Added documentation.
+ 	(replaceAll): Added documentation.
+ 	(groupCount): New method.
+ 	(lookingAt): New method.
+ 	(matches): New method.
+ 	(reset): New method.
+ 	(start): New method.
+ 	* java/util/regex/Pattern.java
+ 	(serialVersionUID): New constant.
+ 	(CANON_EQ): New constant.
+ 	(CASE_INSENSITIVE): New constant.
+ 	(COMMENTS): New constant.
+ 	(DOTALL): New constant.
+ 	(MULTILINE): New constant.
+ 	(UNICODE_CASE): New constant.
+ 	(UNIX_LINES): New constant.
+ 	(regex): New member variable.
+ 	(flags): New member variable.
+ 	(Pattern): New method.
+ 	(compile): Documentation added.
+ 	(flags): New method.
+ 	(matches): Documentation added.
+ 	(matcher): Documentation added.
+ 	(split): Documentation added.
+ 	(pattern): New method.
+ 
+ 2003-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/der/DEREncodingException.java:
+ 	Explicitly import java.io.IOException.
+ 	* gnu/java/security/x509/X509Certificate.java:
+ 	Explicitly import java.io.Serializable.
+ 
+ 2003-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/SecureClassLoader.java,
+ 	java/security/SecureRandom.java,
+ 	java/security/Security.java,
+ 	java/security/cert/CertificateFactory.java,
+ 	java/security/cert/CertificateFactorySpi.java:
+ 	Fixed typos in documention.
+ 
+ 2003-04-29  Casey Marshall  <rsdio@metastatic.org>
+ 
+ 	* java/security/cert/CertPathValidator.java:
+ 	(getIntstance) renamed to proper name.
+ 	(getInstance) renamed from getIntstance.
+ 	* java/security/cert/X509CRL.java:
+ 	(getIssuerX500Principal) new method (1.4 compatibility).
+ 
+ 2003-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java
+ 	(AUTO_RESIZE_ALL_COLUMNS): New constant.
+ 	(AUTO_RESIZE_LAST_COLUMN): New constant.
+ 	(AUTO_RESIZE_NEXT_COLUMN): New constant.
+ 	(AUTO_RESIZE_OFF): New constant.
+ 	(AUTO_RESIZE_SUBSEQUENT_COLUMNS): New constant.
+ 	(JTable): New method.
+ 	(columnAdded): New method.
+ 	(columnMarginChanged): New method.
+ 	(columnMoved): New method.
+ 	(columnRemoved): New method.
+ 	(columnSelectionChanged): New method.
+ 	(editingCanceled): New method.
+ 	(editingStopped): New method.
+ 	(getColumnModel): New method.
+ 	(getPreferredScrollableViewportSize): New method.
+ 	(getScrollableBlockIncrement): New method.
+ 	(getScrollableTracksViewportHeight): New method.
+ 	(getScrollableTracksViewportWidth): New method.
+ 	(getScrollableUnitIncrement): New method.
+ 	(getSelectedRow): New method.
+ 	(getSelectionModel): New method.
+ 	(tableChanged): New method.
+ 	(setModel): New method.
+ 	(setSelectionMode): New method.
+ 	(setSelectionModel): New method.
+ 	(setShowGrid): New method.
+ 	(valueChanged): New method.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(backwardAction): New constant.
+ 	(beepAction): New constant.
+ 	(beginAction): New constant.
+ 	(beginLineAction): New constant.
+ 	(beginParagraphAction): New constant.
+ 	(beginWordAction): New constant.
+ 	(copyAction): New constant.
+ 	(cutAction): New constant.
+ 	(defaultKeyTypedAction): New constant.
+ 	(deleteNextCharAction): New constant.
+ 	(deletePrevCharAction): New constant.
+ 	(downAction): New constant.
+ 	(endAction): New constant.
+ 	(endLineAction): New constant.
+ 	(endOfLineStringProperty): New constant.
+ 	(endParagraphAction): New constant.
+ 	(endWordAction): New constant.
+ 	(forwardAction): New constant.
+ 	(insertBreakAction): New constant.
+ 	(insertContentAction): New constant.
+ 	(insertTabAction): New constant.
+ 	(nextWordAction): New constant.
+ 	(pageDownAction): New constant.
+ 	(pageUpAction): New constant.
+ 	(pasteAction): New constant.
+ 	(previousWordAction): New constant.
+ 	(readOnlyAction): New constant.
+ 	(selectAllAction): New constant.
+ 	(selectionBackwardAction): New constant.
+ 	(selectionBeginAction): New constant.
+ 	(selectionBeginLineAction): New constant.
+ 	(selectionBeginParagraphAction): New constant.
+ 	(selectionBeginWordAction): New constant.
+ 	(selectionDownAction): New constant.
+ 	(selectionEndAction): New constant.
+ 	(selectionEndLineAction): New constant.
+ 	(selectionEndParagraphAction): New constant.
+ 	(selectionEndWordAction): New constant.
+ 	(selectionForwardAction): New constant.
+ 	(selectionNextWordAction): New constant.
+ 	(selectionPreviousWordAction): New constant.
+ 	(selectionUpAction): New constant.
+ 	(selectLineAction): New constant.
+ 	(selectParagraphAction): New constant.
+ 	(selectWordAction): New constant.
+ 	(upAction): New constant.
+ 	(writableAction): New constant.
+ 
+ 2003-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/x509/.cvsignore,
+ 	javax/print/.cvsignore,
+ 	javax/print/attribute/.cvsignore,
+ 	javax/security/.cvsignore,
+ 	javax/security/auth/.cvsignore,
+ 	javax/security/auth/x500/.cvsignore:
+ 	New files to ignore Makefile and Makefile.in
+ 
+ 2003-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/Attribute.java,
+ 	* javax/print/attribute/AttributeSet.java,
+ 	* javax/print/attribute/PrintRequestAttributeSet.java:
+ 	New files merged from libgcj.
+ 	* javax/print/attribute/package.html: New files
+ 	* javax/print/Makefile.am,
+ 	javax/print/attribute/Makefile.am: New files.
+ 	* configure.in
+ 	(AC_OUTPUT): Added javax/print/Makefile and
+ 	javax/print/attribute/Makefile.
+ 
+ 2003-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractListModel.java:
+ 	Reformatted.
+ 	(getListDataListeners): New method.
+ 	* javax/swing/DefaultBoundedRangeModel.java:
+ 	Reformatted.
+ 	(getChangeListeners): New method.
+ 	* javax/swing/DefaultSingleSelectionModel.java:
+ 	Reformatted.
+ 	(getChangeListeners): New method.
+ 	
+ 2003-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Window.java
+ 	(show): Call super.show() instead of setVisible() to avoid endless
+ 	loop.
+ 	(hide): Call super.hide() instead of setVisible() to avoid endless
+ 	loop.
+ 
+ 2003-04-27  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: fixed typo
+ 
+ 2003-04-27  Casey Marshall  <rsdio@metastatic.org>
+ 
+ 	* java/io/FileDescriptor.java (in, out, err): set to non-null
+ 	* native/jni/java-io/FileDescriptor.c 
+ 	(Java_java_io_FileDescriptor_nativeInit): set the static fields
+ 	appropriately and use ExceptionOccurred instead of ExceptionCheck.
+ 
+ 2003-04-27  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: updated Jikes RVM information
+ 
+ 2003-04-25  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/io/FileDescriptor.java : do dummy initialisation of
+ 	the in/out/err statics before calling nativeInit, not after
+ 	* native/jni/java-io/FileDescriptor.c (nativeInit) : correct
+ 	the method signature for the FileDescriptor constructor used
+ 	 to create the in/out/err FileDescriptor objects
+ 
+ 2003-04-23  Casey Marshall  <rsdio@metastatic.org>
+ 
+ 	Removed files:
+ 	* java/security/Engine.java: moved to gnu/java/security/Engine.java.
+ 	* gnu/java/security/provider/DERReader.java: obsoleted by
+ 	gnu/java/security/der/DERReader.java.
+ 	* gnu/java/security/provider/DERWriter.java: obsoleted by
+ 	gnu/java/security/der/DERWriter.java.
+ 
+ 	Added files:
+ 	* gnu/java/io/Base64InputStream.java: input stream for decoding
+ 	Base-64.
+ 	* gnu/java/io/ASN1ParsingException.java: used to signal
+ 	high-level errors in DER encoded data.
+ 	* gnu/java/security/OID.java: object identifier class.
+ 	* gnu/java/security/der/BitString.java: ASN.1 BIT STRING type.
+ 	* gnu/java/security/der/DER.java: DER constants.
+ 	* gnu/java/security/der/DERReader.java: DER parser.
+ 	* gnu/java/security/der/DERValue.java: A single value read or
+ 	written to a DER stream.
+ 	* gnu/java/security/der/DERWriter.java: DER encoder.
+ 	* gnu/java/security/Engine.java: from java/security/Engine.java.
+ 	(Changes from java/security/Engine.java follow)
+ 	- Class and getInstance method made public.
+ 	- getInstance now throws java.lang.reflect.InvocationTargetException.
+ 	- Added additional getInstance method that takes an array of
+ 	parameters to be passed to the constructor.
+ 	* gnu/java/security/provider/DSAKeyFactory.java: translator for
+ 	DSA keys.
+ 	* gnu/java/security/provider/X509CertificateFactory.java: X.509
+ 	certificate factory class.
+ 	* gnu/java/security/x509/X500DistinguishedName.java: ASN.1 Name
+ 	construct implementation.
+ 	* gnu/java/security/x509/X509Certificate.java: X.509
+ 	certificate class.
+ 	* gnu/java/security/x509/X509CRL.java: X.509 certificate
+ 	revocation list.
+ 	* gnu/java/security/x509/X509CRLEntry.java: X.509 certificate
+ 	revocation list entry.
+ 	* java/security/cert/CRLSelector.java: JDK 1.4 support.
+ 	* java/security/cert/CertPathBuilder.java: JDK 1.4 support.
+ 	* java/security/cert/CertPathBuilderResult.java: JDK 1.4 support.
+ 	* java/security/cert/CertPathBuilderSpi.java: JDK 1.4 support.
+ 	* java/security/cert/CertPathParameters.java: JDK 1.4 support.
+ 	* java/security/cert/CertPathValidator.java: JDK 1.4 support.
+ 	* java/security/cert/CertPathValidatorResult.java: JDK 1.4 support.
+ 	* java/security/cert/CertPathValidatorSpi.java: JDK 1.4 support.
+ 	* java/security/cert/CertSelector.java: JDK 1.4 support.
+ 	* java/security/cert/CertStore.java: JDK 1.4 support.
+ 	* java/security/cert/CertStoreParameters.java: JDK 1.4 support.
+ 	* java/security/cert/CertStoreSpi.java: JDK 1.4 support.
+ 	* java/security/cert/CollectionCertStoreParameters.java: JDK 1.4
+ 	support.
+ 	* java/security/cert/LDAPCertStoreParameters.java: JDK 1.4 support.
+ 	* java/security/cert/PKIXBuilderParameters.java: JDK 1.4 support.
+ 	* java/security/cert/PKIXCertPathBuilderResult.java: JDK 1.4 support.
+ 	* java/security/cert/PKIXCertPathChecker.java: JDK 1.4 support.
+ 	* java/security/cert/PKIXCertPathValidatorResult.java: JDK 1.4 support.
+ 	* java/security/cert/PKIXParameters.java: JDK 1.4 support.
+ 	* java/security/cert/PolicyNode.java: JDK 1.4 support.
+ 	* java/security/cert/PolicyQualifierInfo.java: JDK 1.4 support.
+ 	* java/security/cert/TrustAnchor.java: JDK 1.4 support.
+ 	* javax/security/auth/x500/X500Principal.java: JDK 1.4 support.
+ 
+ 	Modified files:
+ 	* gnu/java/security/der/DEREncodingException.java: extend
+ 	java.io.IOException instead of Exception.
+ 	* gnu/java/security/provider/DSAParameters.java: use new DER
+ 	parser.
+ 	(engineInit(AlgorithmParameterSpec)) variable assignment
+ 	bugfix.
+ 	* gnu/java/security/provider/DSASignature.java:
+ 	(engineVerify()) use new DER parser.
+ 	* gnu/java/security/provider/DSAPrivateKey.java: added
+ 	toString() method.
+ 	* gnu/java/security/provider/DSAPrivateKey.java:
+ 	(<init>) variable assignment bug fix.
+ 	Added toString() method.
+ 	* gnu/java/security/provider/Gnu.java: added new key factory and
+ 	certificate factory entries.
+ 	* java/security/AlgorithmParameterGenerator.java:
+ 	(getInstance) accomodate changes to Engine class.
+ 	* java/security/AlgorithmParameters.java:
+ 	(getInstance) accomodate changes to Engine class.
+ 	* java/security/KeyFactory.java:
+ 	(getInstance) accomodate changes to Engine class.
+ 	* java/security/KeyPairGenerator.java:
+ 	(getInstance) accomodate changes to Engine class.
+ 	* java/security/KeyStore.java:
+ 	(getInstance) accomodate changes to Engine class.
+ 	* java/security/MessageDigest.java:
+ 	(getInstance) accomodate changes to Engine class.
+ 	* java/security/SecureRandom.java:
+ 	(getInstance) accomodate changes to Engine class.
+ 	* java/security/Signature.java:
+ 	(getInstance) accomodate changes to Engine class.
+ 	* java/security/cert/Certificate.java: Added writeReplace() method. 
+ 	* java/security/cert/CertificateFactory.java: (JDK 1.4 compatibility)
+ 	(getInstance(String)) and modified to use generic getInstance
+ 	method.
+ 	(getInstance(String, String)) likewise.
+ 	getInstance(String, Provider) method added.
+ 	getInstance(String, String, Provider) method removed.
+ 	generateCertPath(InputStream) method added.
+ 	generateCertPath(InputStream, String) method added.
+ 	generateCertPath(List) method added.
+ 	getCertPathEncodings() method added.
+ 	* java/security/cert/CertificateFactorySpi.java: (1.4 compatibility)
+ 	engineGenerateCertPath(InputStream) method added.
+ 	engineGenerateCertPath(InputStream, String) method added.
+ 	engineGenerateCertPath(List) method added.
+ 	engineGetCertPathEncodings() method added.
+ 
+ 2003-04-23  Torsten Rupp  <rupp@homer.aicas.com>
+ 
+ 	* /cvsroot/classpath/classpath/java/net/InetAddress.java:
+ 	Fixed parsing of IP numbers in getByName if sub-numbers are >127
+ 
+ 2003-04-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/java_io_FileDescriptor.h: Rebuilt.
+ 	* java/io/FileInputStream.java (FileInputStream): Updated for
+ 	changes to FileDescriptor.
+ 	(FileInputStream(FileDescriptor)): Don't throw SecurityException
+ 	if fd is invalid.
+ 	* java/io/FileOutputStream.java (FileOutputStream): Updated for
+ 	changes to FileDescriptor.  Don't throw SecurityException if fd
+ 	is invalid.
+ 	* java/io/RandomAccessFile.java (RandomAccessFile): Updated for
+ 	changes to FileDescriptor.
+ 	(readOnly): Removed; updated all users.
+ 	* java/io/FileDescriptor.java (SET, CUR, END): Now constants.
+ 	(READ, WRITE, APPEND, EXCL, SYNC): New constants.
+ 	(in, out, err): Require nativeInit to initialize.
+ 	(FileDescriptor(String,int)): New constructor.
+ 	(open): Changed argument type of `mode'.  Allow empty paths.
+ 	Only throw runtime errors or FileNotFoundException.
+ 	(nativeValid): Don't throw IOException.
+ 	(valid): Simplified.
+ 	(nativeOpen): Throw FileNotFoundException.  Changed type of
+ 	`mode' argument.
+ 	* native/jni/java-io/FileDescriptor.c
+ 	(Java_java_io_FileDescriptor_nativeValid): Updated comment.
+ 	(SET, CUR, END, READ, WRITE, APPEND, EXCL, SYNC): New defines.
+ 	(Java_java_io_FileDescriptor_nativeOpen): Changed type of mode
+ 	argument.
+ 	(true): Don't define; use JNI_TRUE.
+ 	(false): Don't define; use JNI_FALSE.
+ 	(INIT_FIELD): New define.
+ 	(Java_java_io_FileDescriptor_nativeInit): Rewrote.
+ 	* native/jni/java-io/java_io_FileDescriptor.c: Removed.
+ 
+ 2003-04-20  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* java/awt/Container.java (addImpl): Enable paint events if adding
+ 	a lightweight to a heavyweight.
+ 	(addNotify): Ensure that peer is created before
+ 	addNotifyContainerChildren.
+ 	(addNotifyContainerChildren): Enable paint events if a heavyweight
+ 	container contains a lightweight.
+ 
+ 2003-04-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/sql/Timestamp.java: Formatting fix.
+ 	* java/sql/Time.java: Formatting fixes.
+ 	* java/sql/DriverManager.java: Formatting fix.
+ 	* java/sql/Date.java: Formatting fixes.
+ 
+ 2003-04-19  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* java/awt/Container.java (visitChild): Dispose gfx2 when
+ 	finished.
+ 
+ 2003-04-19  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/math/BigInteger.java (probablePrime): New.
+ 	* java/math/BigDecimal.java (unscaledValue): New.
+ 
+ 2003-04-17  Jeroen Frijters  <jeroen@sumatra.nl>
+ 
+ 	* java/lang/Class.java
+ 	(constructor): Added transient field to cache constructor.
+ 	(newInstance): Fixed to consider non-public constructors as well, 
+ 	added constructor object caching and implemented accessibility check.
+ 	* vm/reference/java/lang/VMClass.java (throwException): option method
+ 	used to throw exception without declaring it... useful for 
+ 	duplicating Sun behavior in newInstance
+ 	* include/java_lang_VMClass.h: updated
+ 
+ 2003-04-07  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* java/lang/Character.java (digit): char[] array element never negative
+ 
+ 2003-04-07  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* vm/reference/java/lang/Thread.java (currentThread): javadoc updates
+ 
+ 2003-04-07  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/io/BufferedOutputStream.java
+ 	(close): Delete commented out method
+ 	(finalize): Delete commented out method
+ 	* java/io/BufferedReader.java
+ 	* java/io/BufferedWriter.java
+ 
+ 2003-04-07  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/io/DataInputStream.java
+ 	Re-order methods to be more logical and consistent with DataInput
+ 	interface
+ 
+ 2003-04-07  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/io/DataInput.java
+ 	* java/io/DataOutput.java
+ 	Fix minor javadoc typos
+ 	* java/io/DataInputStream.java
+ 	Update javadocs to match DataInput
+ 	* java/io/DataOutputStream.java
+ 	Update javadocs to match DataOutput
+ 
+ 2003-04-07  Jeroen Frijters  <jeroen@sumatra.nl>
+ 
+ 	* java/lang/Class.java
+ 	(getSigners): If signers array is null, don't attempt to 
+ 	clone it
+ 	(internalGetFields): Implemented algorithm dictated by API docs 
+ 	and used HashSet to prevent the same field showing up twice (if 
+ 	an interface is implemented multiple times)
+ 	(getMethods): Changed comments to indicate that Object methods are
+ 	available from array types. This is in contrast with the API docs, but
+ 	it matches common sense and the Sun implementation.
+ 	(internalGetMethods): For consistency, changed to use HashMap 
+ 	instead of java.util.HashMap.
+ 	(getField): Now uses internalGetField.
+ 	(internalGetField): New method to implement correct search algorithm.
+ 	(getMethod): Changed comments to indicate that Object methods are
+ 	available from array types. Changed to use internalGetMethod.
+ 	(internalGetMethod): New method to implement correct search algorithm.
+ 	(matchParameters): Don't use equals() to compare Class objects, they
+ 	have to be identical so == can be used.
+ 
+ 2003-04-06  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/io/ObjectStreamException
+ 	* java/io/FileFilter
+ 	* java/io/FilenameFilter
+ 	* java/io/ObjectInput
+ 	* java/io/ObjectOutput
+ 	* java/io/ObjectStreamConstants
+ 	Minor doc fixes, format fixes, spelling corrections, etc.
+ 	* java/io/DataInput
+ 	Corrected code samples in Javadocs to match reality
+ 	* java/io/DataOutput
+ 	* java/io/ObjectInputValidation
+ 	Major documentation fixes - all Javadocs re-written or updated
+ 
+ 2003-04-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	Mostly merged from libgcj.
+ 	* gnu/java/nio/MappedByteFileBuffer.java,
+ 	gnu/java/nio/MappedCharFileBuffer.java,
+ 	gnu/java/nio/MappedDoubleFileBuffer.java,
+ 	gnu/java/nio/MappedFloatFileBuffer.java,
+ 	gnu/java/nio/MappedIntFileBuffer.java,
+ 	gnu/java/nio/MappedLongFileBuffer.java,
+ 	gnu/java/nio/MappedShortFileBuffer.java:
+ 	Renamed address to map_address.
+ 	* java/io/FileInputStream.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/RandomAccessFile.java:
+ 	(getChannel): Merged from libgcj.
+ 
+ 2003-04-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileInputStream.java
+ 	(skip): Merged with version from libgcj.
+ 
+ 2003-04-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/sql/Date.java,
+ 	java/sql/Time.java:
+ 	Merged latest version from libgcj.
+ 
+ 2003-04-05  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* vm/reference/java/lang/VMClass.java (getInstance): removed
+ 	* include/java_lang_VMClass.h: regenerated
+ 
+ 2003-04-05  Jeroen Frijters  <jeroen@sumatra.nl>
+ 
+ 	* java/lang/Class.java
+ 	(vmClass): Made vmClass field package instead of private
+ 	(Class): Made constructor package instead of private and passed in
+ 	VMClass instance
+ 	(forName(String,boolean,ClassLoader)): Added special handling for array
+ 	classes and initialization
+ 	(isArray): Removed superfluous ternary operator
+ 	(internalGetClasses): Fixed to use ArrayList.addAll instead of
+ 	ArrayList.add
+ 	(internalGetFields): Fixed to use ArrayList.addAll instead of
+ 	ArrayList.add
+ 	(getMethod(String,Class[])): Added code to also look at interfaces
+ 	* vm/reference/java/lang/VMClass.java
+ 	(initialize): Added
+ 	(loadArrayClass): Added
+ 
+ 2003-04-04  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* THANKYOU: added Archie Cobbs
+ 	
+ 2003-04-04  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* native/jni/java-io/java_io_FileDescriptor.c
+ 	(Java_java_io_FileDescriptor_nativeWriteBuf): return type is jlong
+ 	(Java_java_io_FileDescriptor_nativeWriteBuf): return type is jlong
+ 	* native/jni/java-io/java_io_ObjectStreamClass.c: removed
+ 	* native/jni/java-io/java_io_RandomAccessFile.c: removed
+ 	* native/jni/java-io/java_io_FileInputStream.c: removed
+ 	* native/jni/java-io/java_io_FileOutputStream.c: removed
+ 	* native/jni/java-io/Makefile.am: adjusted members of java-io library
+ 	
+ 
+ 2003-04-03  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* vm/reference/java/lang/VMClass.java: fix imports
+ 	* java/lang/Class.java
+ 	(internalGetMethods): fix spelling of superClass
+ 	(getSigners): cast clone of Object[]
+ 	(getSuperclass): fix spelling of getSuperclass
+ 	(forName): use VMClass.forName for static invocation
+ 	* include/*.h: updated
+ 	* doc/www.gnu.org/home.wml: update link to GNU Crypto
+ 
+ 2003-04-03  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	Many pieces of this patch contributed by Archie Cobbs
+ 	* vm/reference/java/lang/VMClass.java: new file
+ 	* vm/reference/java/lang/Class.java: moved to java/lang
+ 	* java/lang/Class.java: added transient reference to VMClass
+ 	(Class): added call to static VMClass.getInstance()
+ 	(forName(String)): calls VMClass.forName and if that returns null
+ 	then performs the previous method call instead
+ 	(isInstance): moved to VMClass
+ 	(isAssignableFrom): moved to VMClass
+ 	(isInterface): moved to VMClass
+ 	(isArray): calls VMClass.isArray before returning to getName()
+ 	based implementation
+ 	(isPrimitive): moved to VMClass
+ 	(getName): moved to VMClass
+ 	(getSuperclass): moved to VMClass
+ 	(getInterfaces): moved to VMClass
+ 	(getComponentType): moved to VMClass
+ 	(getModifiers): moved to VMClass
+ 	(getSigners): return a clone of the signers array
+ 	(memberAccessCheck): new method
+ 	(getDeclaringClass): moved to VMClass
+ 	(getClasses): calls internalGetClasses
+ 	(internalGetClasses): new method
+ 	(getFields): calls internalGetFields
+ 	(internalGetFields): new method
+ 	(getMethods): calls internalGetMethods
+ 	(internalGetMethods): new method
+ 	(getConstructors): calls getDeclaredConstructors
+ 	(getField): calls getDeclaredFields
+ 	(getMethod): calls getDeclaredMethods
+ 	(matchMethod): new method
+ 	(matchParameters): new method
+ 	(getConstructor): calls getDeclaredConstructors
+ 	(getDeclaredClasses): calls getDeclaredClasses(boolean)
+ 	(getDeclaredClasses(boolean)): new method
+ 	(getDeclaredFields): calls getDeclaredFields(boolean)
+ 	(getDeclaredFields(boolean)): new method
+ 	(getDeclaredMethods): calls getDeclaredMethods(boolean)
+ 	(getDeclaredMethods(boolean)): new method
+ 	(getDeclaredConstructors): calls getDeclaredConstructors(boolean)
+ 	(getDeclaredConstructors(boolean)): new method
+ 	(getDeclaredField): calls getDeclaredFields
+ 	(getDeclaredMethod): calls getDeclaredMethods
+ 	(getDeclaredConstructor): calls getDeclaredConstructors
+ 	(getClassLoader0): removed
+ 	* NEWS: note changes to Class
+ 	* gnu/classpath/RawData: new file (from libgcj)
+ 	* java/lang/Makefile.am: add Class.java to dist
+ 	* vm/reference/java/lang/Makefile.am: add VMClass.java to dist, 
+ 	remove Class.java
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/dgc/VMID.java,
+ 	java/rmi/registry/RegistryHandler.java,
+ 	java/rmi/server/LoaderHandler.java,
+ 	java/rmi/server/LogStream.java,
+ 	java/rmi/server/Operation.java,
+ 	java/rmi/server/RemoteCall.java,
+ 	java/rmi/server/RemoteRef.java,
+ 	java/rmi/server/RemoteStub.java,
+ 	java/rmi/server/Skeleton.java:
+ 	New version from libgcj.
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/font/TextAttribute.java
+ 	(readResolve): Throws java.io.InvalidObjectException.
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java:
+ 	Reordered methods, reformatted code.
+ 	* java/io/PrintStream.java:
+ 	Reordered methods, reformatted code.
+ 	* java/io/RandomAccessFile.java:
+ 	Reordered methods, reformatted code.
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/ComponentView.java:
+ 	Merged from libgcj.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java:
+ 	Merged from libgcj.
+ 
+ 2003-03-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java: Reindented.
+ 
+ 	* java/lang/ClassLoader.java (getSystemClassLoader): Fixed
+ 	formatting.
+ 	(loadClass(String,boolean)): Likewise.
+ 	(getPackage): Likewise.
+ 	(getPackages): Likewise.
+ 
+ 2003-03-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/MessageFormat.java (MessageFormat.serialVersionUID):
+ 	Define.
+ 	* java/text/AttributedCharacterIterator.java
+ 	(Attribute.serialVersionUID): Define.
+ 
+ 2003-03-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Package.java (toString): Formatting fixlet.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Date.java:
+ 	Fixed documentation starting tag to make javadoc happy.
+ 	* java/util/regex/Pattern.java
+ 	(Pattern): Implements Serializable.
+ 	* java/util/PatternSyntaxException.java
+ 	(serialVersionUID): New member variable.
+ 
+ 2003-03-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java:
+ 	Merged comment from libgcj.
+ 	(serialVersionUID): Made it private.
+ 	* java/io/ObjectOutputStream.java
+ 	(PutField.write): Documentation reformatted.
+ 	* java/io/PrintStream.java:
+ 	Merged comment from libgcj.
+ 	(PrintStream): Reformatted.
+ 	* java/io/RandomAccessFile.java
+ 	(RandomAccessFile): Merged with libgcj.
+ 	(read): Likewise.
+ 
+ 2003-03-28  Torsten Rupp  <rupp@homer.aicas.com>
+ 
+ 	* native/target/generic/target_generic.h,
+ 	native/target/generic/target_generic_file.h,
+ 	native/target/generic/target_generic_math_float.h:
+ 	Fix in extern-C-declaration
+ 
+ 	* native/target/generic/target_generic_math_int.h:
+ 	Fixed some int64-operation macros
+ 
+ 	* native/target/generic/target_generic_network.h:
+ 	Added some macros for setting/getting socket options
+ 
+ 	* native/target/generic/target_generic_misc.h:
+ 	Added TARGET_NATIVE_FORMAT_STRING macro
+ 
+ 	* native/target/Linux/target_native.h,
+ 	native/target/Linux/target_native_file.h,
+ 	native/target/Linux/target_native_math_float.h,
+ 	native/target/Linux/target_native_math_int.h,
+ 	native/target/Linux/target_native_misc.h,
+ 	native/target/Linux/target_native_network.h:
+ 	Fix in extern-C-declaration
+ 
+ 2003-03-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java:
+ 	Merged authors with libgcj, reformatted.
+ 	* java/io/FileOutputStream.java:
+ 	Merged authors with libgcj, reformatted.
+ 	(FileOutputStream): Partly merged with libgcj.
+ 	(finalize): New dummy method to make API complete.
+ 	(write): Added argument check from libgcj.
+ 	* java/io/RandomAccessFile.java:
+ 	Merged authors with libgcj, reformatted.
+ 	(read*): Throws only IOException.
+ 
+ 2003-03-26  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* configure.in: VERSION changed to 0.05+cvs
+ 	* THANKYOU: added Casey Marshall
+ 
+ 2003-03-26  Casey Marshall  <rsdio@metastatic.org> 
+ 
+ 	* java/security/AlgorithmParameterGenerator.java 
+ 	(getInstance (String)): add missing return statement
+ 	(getInstance (String,String)): check for improper provider argument
+ 	(getInstance (String,Provider)): reuse common Engine code
+ 	(getInstance (String,String,Provider)): removed
+ 	* java/security/AlgorithmParameters.java
+ 	(getInstance (String,String)): check for improper provider argument
+ 	(getInstance (String,Provider)): reuse common Engine code
+ 	(getInstance (String,String,Provider)): removed
+ 	* java/security/Engine.java: new file
+ 	* java/security/KeyFactory.java
+ 	(getInstance (String)): add missing return statement
+ 	(getInstance (String,String)): check for improper provider argument
+ 	(getInstance (String,Provider)): reuse common Engine code
+ 	(getInstance (String,String,Provider)): removed
+ 	* java/security/KeyPairGenerator.java
+ 	(getInstance (String,Provider)): reuse common Engine code
+ 	(getInstance (String,String,Provider)): removed
+ 	* java/security/KeyStore.java
+ 	(getInstance (String)): use getInstance(String,Provider) instead
+ 	(getInstance (String,String)): use getInstance(String,Provider) instead
+ 	(getInstance (String,Provider): reuse common Engine code
+ 	* java/security/MessageDigest.java
+ 	(getInstance (String,String)): check for improper provider argument
+ 	(getInstance (String,Provider)): reuse common Engine code
+ 	* java/security/SecureRandom.java
+ 	(getInstance (String): formatting
+ 	(getInstance (String,String)): check for improper provider argument
+ 	(getInstance (String,Provider)): reuse common Engine code
+ 	* java/security/Signature.java
+ 	(getInstance (String,String)): check for improper provider argument
+ 	(getInstance (String,Provider)): reuse common Engine code
+ 	(getInstance (String,String,Provider)): removed
+ 
+ 2003-03-25  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/io/RandomAccessFile.java
+ 	(length): Replace length() with getLength().
+ 	(read): Replace in with fd.
+ 
+ 2003-03-25  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/io/FileOutputStream.java
+ 	(getFD): Check FileDescriptor object before using it, Reformatted.
+ 	(write): Reformatted.
+ 	(close): Check FileDescriptor object before using it.
+ 
+ 2003-03-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java
+ 	(getFirstComponent): Implemented.
+ 	(getLastComponent): Implemented.
+ 	(getDefaultComponent): Implemented.
+ 	(setImplicitDownCycleTraversal): Fixed implementation.
+ 	* java/awt/Robot.java
+ 	(Robot): Documentation added.
+ 	* java/awt/Toolkit.java
+ 	(getFontList): Deprecated.
+ 	(getFontMetrics): Deprecated.
+ 	(getPrintJob): Documentation added.
+ 	(getSystemSelection): Documentation added.
+ 	(getLockingKeyState): Documentation addded.
+ 	(setLockingKeyState): Documentation addded.
+ 	(createCustonCursor): Documentation addded.
+ 	(getBestCursorSize): Documentation addded.
+ 	(getMaximumCursorColors): Documentation addded.
+ 	(isFrameStateSupported): Documentation addded.
+ 
+ 2003-03-24  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: link to mauve results on gnu.org
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/RandomAccessFile.java:
+ 	More little merges with libgcj.
+ 	
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java:
+ 	Merged copyright from libgcj.
+ 	* java/io/FileInputStream.java
+ 	(close): Merged implementation from libgcj.
+ 	(finalize): Merged from libgcj for API completeness.
+ 	(seek): Partly merged from libgcj.
+ 	* java/io/InputStreamReader.java:
+ 	Moving of some methods to match the order in libgcj and reformatting.
+ 	* java/io/OutputStreamWriter.java:
+ 	Moving of some methods to match the order in libgcj and reformatting.
+ 	* java/io/PrintStream.java:
+ 	Moving of some methods to match the order in libgcj and reformatting.
+ 	* java/io/RandomAccessFile.java:
+ 	Moving of some methods to match the order in libgcj and reformatting.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/beancontext/BeanContextEvent.java:
+ 	Reformated.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileInputStream.java:
+ 	More merging with libgcj.
+ 	(read): Compile fix.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataOutputStream.java:
+ 	Reordered methods to match libgcj, reformatting.
+ 	(writeBoolean): Replaced if ... else ... with a single line of code.
+ 	* java/io/FileInputStream.java:
+ 	Reordered methods to match libgcj, reformatting.
+ 	* java/io/FileOutputStream.java:
+ 	Reordered methods to match libgcj, reformatting.
+ 	* java/io/InputStreamReader.java:
+ 	Merged copyright years with libgcj.
+ 	* java/io/OutputStreamWriter.java:
+ 	Merged copyright years with libgcj.
+ 	* java/io/RandomAccessFile.java:
+ 	Merged copyright years with libgcj.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Frame.java
+ 	(DEFAULT_CURSOR): Fixed @deprecated tag.
+ 	(setCursor): Fixed @deprecated tag.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileInputStream.java
+ 	(getChannel): Make it synchronized, rewrote implementation.
+ 	* java/io/FileOutputStream.java
+ 	(getChannel): Make it synchronized, rewrote implementation.
+ 	* java/io/RandomAccessFile.java
+ 	(getChannel): Make it synchronized, rewrote implementation.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectOutputStream.java,
+ 	java/io/RandomAccessFile.java:
+ 	Reformated.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileInputStream.java:
+ 	Reformated.
+ 	* java/io/ObjectOutputStream.java:
+ 	Reformated and some @see tags fixed.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataOutputStream.java
+ 	(writeDouble): Fixed @see tag.
+ 	(writeFloat): Fixed @see tag.
+ 	* java/io/ObjectInputStream.java:
+ 	Reformated.
+ 	* java/io/ObjectOutputStream.java:
+ 	Reformated.
+ 	* java/io/ObjectStreamClass.java
+ 	(toString): Fixed @see tags, documentation reformated.
+ 	* java/io/Writer.java
+ 	(write): Fixed documentation.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedOutputStream.java,
+ 	java/io/BufferedReader.java,
+ 	java/io/DataInput.java,
+ 	java/io/DataOutput.java,
+ 	java/io/Externalizable.java,
+ 	java/io/File.java,
+ 	java/io/FileDescriptor.java,
+ 	java/io/FileFilter.java,
+ 	java/io/FileInputStream.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/FileWriter.java,
+ 	java/io/FilenameFilter.java,
+ 	java/io/FilterInputStream.java,
+ 	java/io/FilterOutputStream.java,
+ 	java/io/FilterReader.java,
+ 	java/io/FilterWriter.java,
+ 	java/io/InputStreamReader.java,
+ 	java/io/ObjectInput.java,
+ 	java/io/ObjectOutput.java,
+ 	java/io/OutputStreamWriter.java,
+ 	java/io/PrintStream.java,
+ 	java/io/SerializablePermission.java,
+ 	java/io/Writer.java:
+ 	Reformated.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ByteArrayOutputStream.java
+ 	(size): Fixed @see tag.
+ 	* java/io/CharArrayWriter.java
+ 	(size): Fixed @see tag.
+ 	* java/io/DataInputStream.java
+ 	(readUTF): Fixed typo in @return tag.
+ 	* java/io/DataOutputStream.java
+ 	(writeFloat): Fixed @see tag.
+ 	(writeDouble): Fixed @see tag.
+ 	* java/io/FilePermission.java
+ 	(FilePermission): Replaced @XXX with FIXME to make javadoc happy.
+ 	* java/io/LineNumberInputStream.java
+ 	(LineNumberInputStream): Replaced @code with html tags.
+ 	(getLineNumber): Fixed typo @return tag.
+ 	* java/io/LineNumberReader.java
+ 	(getLineNumber): Fixed typo @return tag.
+ 	* java/io/PushbackReader.java
+ 	(PushbackReader): Replaced @code with @param.
+ 	* java/io/RandomAccessFile.java
+ 	(writeInt): Fixed @see tag.
+ 	(writeDouble): Fixed @see tag.
+ 	* java/io/StreamTokenizer.java
+ 	(writeDouble): Fixed @see tag.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java,
+ 	javax/swing/text/DocumentFilter.java,
+ 	javax/swing/text/NavigationFilter.java:
+ 	New files.
+ 	* javax/swing/Makefile.am
+ 	(EXTRA_DIST): Added JFormattedTextField.java.
+ 	* javax/swing/text/Makefile.am:
+ 	(EXTRA_DIST): Added DocumentFilter.java and NavigationFilter.java.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/Action.java
+ 	(ACCELERATOR_KEY): New constant.
+ 	(ACTION_COMMAND_KEY): Likewise.
+ 	(MNEMONIC_KEY): Likewise.
+ 	* javax/swing/UnsupportedLookAndFeelException.java
+ 	(UnsupportedLookAndFeelException): Must be public.
+ 	* javax/swing/WindowConstants.java
+ 	(EXIT_ON_CLOSE): New constant.
+ 	* javax/swing/text/BadLocationException.java
+ 	(offset): New member variable.
+ 	(BadLocationException): New implementation, documentation added.
+ 	(offsetRequested): New method.
+ 	* javax/swing/text/Caret.java:
+ 	Reformated.
+ 	* javax/swing/text/Document.java:
+ 	Reformated.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/activation/Activatable.java
+ 	(serialVersionUID): New member variable.
+ 	* java/rmi/activation/ActivationGroup.java
+ 	(serialVersionUID): New member variable.
+ 	* java/rmi/activation/ActivationGroupDesc.java
+ 	(serialVersionUID): New member variable.
+ 	* java/rmi/registry/Registry.java:
+ 	Reformated.
+ 	(Registry): Deprecated.
+ 	* java/rmi/server/LoaderHandler.java
+ 	Reformated.
+ 	(LoaderHandler): Deprecated.
+ 	* java/rmi/server/LogStream.java
+ 	Reformated.
+ 	(LogStream): Deprecated.
+ 	* java/rmi/server/Operation.java
+ 	(Operation): Deprecated.
+ 	* java/rmi/server/RMIFailureHandler.java:
+ 	Reformated.
+ 	* java/rmi/server/RMISocketFactory.java:
+ 	Reformated.
+ 	* java/rmi/server/RemoteCall.java
+ 	(RemoteCall): Deprecated.
+ 	* java/rmi/server/RemoteStub.java:
+ 	Reformated.
+ 	* java/rmi/server/Skeleton.java
+ 	Reformated.
+ 	(Skeleton): Deprecated.
+ 
+ 2003-03-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/dnd/DropTarget.java
+ 	(DropTarget.DropTargetAutoScroller): Now public.
+ 	* java/awt/dnd/DropTargetContext.java
+ 	(DropTargetContext.TransferableProxy): Now public.
+ 
+ 	* java/io/ObjectOutputStream.java (PutField.write): Deprecate.
+ 	(PutField.put): Don't declare any exceptions.
+ 	(putFields): Update.
+ 
+ 	* java/io/FileDescriptor.java (close): Simplify with `finally'.
+ 
+ 2003-03-21  Torsten Rupp  <rupp@homer.aicas.com>
+ 
+ 	* native/target/generic/target_generic.h,
+ 	native/target/generic/target_generic_file.h,
+ 	native/target/generic/target_generic_math_float.h,
+ 	native/target/generic/target_generic_math_int.h,
+ 	native/target/generic/target_generic_misc.h
+ 	native/target/generic/target_generic_network.h
+ 	native/target/Linux/target_native.h
+ 	native/target/Linux/target_native_file.h
+ 	native/target/Linux/target_native_math_float.h
+ 	native/target/Linux/target_native_math_int.h
+ 	native/target/Linux/target_native_misc.h
+ 	native/target/Linux/target_native_network.h:
+ 	Target specific native code. This code is still not used, but please
+ 	have a look. aicas GmbH will add and activate this code soon as
+ 	possible (currently we are very busy; please be patient, we will do
+ 	our best!)
+ 
+ 2003-03-20  John Leuner  <jewel@debian.org>
+ 
+ 	Patches from Stephen Crawley
+ 	* java/util/PropertyPermission.java: Fix to prevent recursive call during
+ 	initialization
+ 	* java/io/FileDescriptor.java (close) : clear nativeFD on success
+ 	* java/net/PlainDatagramSocketImpl.java (setTTL): remap the TTL passed
+ 	as an unsigned byte to an integer in the range 0..255
+ 	* native/jni/java-net/javanet.c (_javanet_get_option): 
+ 	implement ..._get(SOCKOPT_SO_BINDADDR) -> 'getsockname' syscall
+ 	* native/jni/java-net/javanet.c (_javanet_set_option):
+ 	implement ..._set(SOCKOPT_SO_BINDADDR) -> Exception
+ 
+ 	
+ 2003-03-20  Raif S. Naffah  <raif@fl.net.au>
+ 
+ 	* java.security.Security (getAlgorithms(String): fixed a bug.
+ 
+ 2003-03-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/ScrollPane.java
+ 	(ScrollPane): Rewrote for new ScrollPaneAdjustable.
+ 	(getViewportSize): Likewise.
+ 	(addNotify): Likewise.
+ 	(removeNotify): Likewise.
+ 	* java/awt/ScrollPaneAdjustable.java
+ 	(ScrollPaneAdjustable): No longer extends Scrollbar.
+ 	* java/beans/beancontext/BeanContextServices.java:
+ 	Reformated.
+ 	(getService): Added throws TooManyListenersException;
+ 	* java/beans/beancontext/BeanContextServicesSupport.java:
+ 	Reformated.
+ 	(getService): Added throws TooManyListenersException;
+ 
+ 2003-03-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/Beans.java:
+ 	Explicitely import classes not packages.
+ 	* java/beans/FeatureDescriptor.java
+ 	(preferred): New member variable.
+ 	(isPreferred): New method.
+ 	(setPreferred): New method.
+ 	* java/beans/PropertyEditorManager.java:
+ 	Explicitely import used classes.
+ 	* java/beans/beancontext/BeanContextChild.java:
+ 	Added line wrapping.
+ 	* java/beans/beancontext/BeanContextChildSupport.java:
+ 	Reindented.
+ 	* java/beans/beancontext/BeanContextEvent.java:
+ 	Reindented.
+ 
+ 2003-03-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Dialog.java
+ 	(Dialog): New constructor, changed implementations, added
+ 	documentation.
+ 	* java/awt/ScrollPaneAdjustable.java
+ 	(ScrollPaneAdjustable): Implements Adjustable and Serializable.
+ 	(serialVersionUID): New member variable.
+ 	(sp): New member variable.
+ 	(orientation): New member variable.
+ 	(value): New member variable.
+ 	(minimum): New member variable.
+ 	(maximum): New member variable.
+ 	(visibleAmount): New member variable.
+ 	(unitIncrement): New member variable.
+ 	(blockIncrement): New member variable.
+ 	(AdjustmentListener): New member variable.
+ 	(ScrollPaneAdjustable): New implementation.
+ 	(addAdjustmentListener): New method.
+ 	(removeAdjustmentListener): New method.
+ 	(getAdjustmentListeners): New method.
+ 	(getBlockIncrement): New method.
+ 	(getMaximum): New method.
+ 	(getMinimum): New method.
+ 	(getOrientation): New method.
+ 	(getUnitIncrement): New method.
+ 	(getValue): New method.
+ 	(getVisibleAmount): New method.
+ 	(setBlockIncrement): New method.
+ 	(setMaximum): Implemented.
+ 	(setMinimum): Implemented.
+ 	(setUnitIncrement): New method.
+ 	(setValue): New method.
+ 	(setVisibleAmount): Implemented. 
+ 	(paramString): New stubbed method.
+ 	* java/awt/Window.java
+ 	(show): Call setVisible().
+ 	(hide): Call setVisible().
+ 	(processEvent): Add cases for WINDOW_GAINED_FOCUS, WINDOW_LOST_FOCUS
+ 	and WINDOW_STATE_CHANGED.
+ 	(processWindowFocusEvent): New method.
+ 	(processWindowStateEvent): New method.
+ 	(postEvent): Deprecated.
+ 	(applyResourceBundle): Deprecated.
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(DataFlavor): Doesn't thow ClassNotFoundException.
+ 
+ 2003-03-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Process.java (waitFor): Fixed typo.
+ 
+ 2003-03-15  Jeroen Frijters  <jeroen@sumatra.nl>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java (loadClass): Changed
+ 	documentation to make clear null can be returned to signal that the
+ 	class wasn't found.
+ 	* java/lang/ClassLoader.java (loadClass(String,boolean)): Added check
+ 	for null return value from VMClassLoader.loadClass.
+ 	* vm/reference/java/lang/Class.java
+ 	(forName(String,boolean,ClassLoader)): Likewise. 
+ 	* NEWS: Add note about VM interface changes.
+ 
+ 2003-03-15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FileOutputStream - Fix 1.4 compatibility issue
+ 	(FileOutputStream(File, boolean)): new constructor
+ 	* java/io/FileWriter - Fix 1.4 compatibility issue
+ 	(FileWriter(File, boolean)): new constructor
+ 	* java/io/PrintStream - Fix 1.4 compatibility issue
+ 	(PrintStream(OutputStream, boolean, String)): new constructor
+ 
+ 2003-03-15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/RandomAccessFile - Fix 1.4 compatibility problems
+ 	(RandomAccessFile(File, String)) - Delete implementation, call
+ 	RandomAccessFile(String, String), throw FileNotFound instead of IOExcep
+ 	(RandomAccessFile(String, String) - Add implementation copied from
+ 	other constructor, make throw FileNotFound instead of IOException
+ 
+ 2003-03-15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FileDescriptor - Make native signatures match Java, misc fixs
+ 	(FileDescriptor(long)): Change parm from int
+ 	(close): Synchronize, ensure consistency via try/catch loop
+ 	(nativeWriteByte): Change byte from long to int
+ 	(write): Change offset, len to int
+ 	(nativeWriteBuf): Change offset, len to int
+ 	(read): Expect byte from nativeReadByte
+ 	(nativeReadByte): Return int
+ 	(read(byte[],int, int): Expect int return from nativeReadBuf
+ 	(nativeReadBuf): offset, len to int
+ 	(available): Expect int from nativeAvailable
+ 	(nativeAvailable): Return int
+ 	* native/jni/java-io/FileDescriptor.c
+ 	Change function signatures to match Java signatures
+ 	(nativeWriteByte): Byte to write to int
+ 	(nativeWriteBuf): offset, len to int
+ 	(nativeReadByte): return int
+ 	(nativeReadBuf): offset, len to int, return int
+ 	(nativeAvailable): return int
+ 	
+ 2003-03-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/beancontext/BeanContextServicesSupport.java
+ 	(getService): Compile fix.
+ 	* java/beans/beancontext/BeanContextServicesSupport.java:
+ 	Forgot to add sooner.
+ 
+ 2003-03-14  Jeroen Frijters  <jeroen@sumatra.nl>
+ 
+ 	* java/io/ObjectInputStream.java (readObject): Cleaned up the class
+ 	hierarchy loop.
+ 	(readFields(Object,ObjectStreamField[],boolean)): Changed argument
+ 	list to Object,ObjectStreamClass, moved callReadMethod code up into
+ 	readObject and added Class argument to all setXxxField calls.
+ 	(callReadMethod): Changed Class argument to ObjectStreamClass to be
+ 	consistent with ObjectOutputStream and to facilitate caching the
+ 	Method in the future.
+ 	(setBooleanField): Added Class argument.
+ 	(setByteField): Likewise.
+ 	(setCharField): Likewise.
+ 	(setDoubleField): Likewise.
+ 	(setFloatField): Likewise.
+ 	(setIntField): Likewise.
+ 	(setLongField): Likewise.
+ 	(setShortField): Likewise.
+ 	(setObjectField): Likewise.
+ 	* java/io/ObjectOutputStream.java (writeObject): Cleaned up the
+ 	class hierarchy loop.
+ 	(defaultWriteObject): Call writeFields with new argument list.
+ 	(writeFields(Object,ObjectStreamField[],boolean): Changed argument
+ 	list to Object,ObjectStreamClass, moved callWriteMethod up into
+ 	writeObject and added Class argument to all getXxxField calls.
+ 	(callWriteMethod): Added ObjectStreamClass argument to be able to
+ 	get the proper class to call getMethod on (each class can have (or
+ 	not have) its own writeObject method).
+ 	(getBooleanField): Added Class argument.
+ 	(getByteField): Likewise.
+ 	(getCharField): Likewise.
+ 	(getDoubleField): Likewise.
+ 	(getFloatField): Likewise.
+ 	(getIntField): Likewise.
+ 	(getLongField): Likewise.
+ 	(getShortField): Likewise.
+ 	(getObjectField): Likewise.
+ 	* java/io/ObjectStreamClass.java (hasReadMethod): Added method to
+ 	facilitate caching the Method object in the future.
+ 
+ 2003-03-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java:
+ 	Partly merged with libgcj.
+ 	* java/net/JarURLConnection.java:
+ 	Partly merged with libgcj.
+ 	* java/net/PlainSocketImpl.java:
+ 	Partly merged with libgcj.
+ 
+ 2003-03-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/beancontext/BeanContextServicesSupport.java,
+ 	java/beans/beancontext/BeanContextServicesSupport.java: New files.
+ 	* java/beans/beancontext/Makefile.am
+ 	(EXTRA_DIST): Added new files.
+ 
+ 2003-03-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectionKeyImpl.java:
+ 	Merged with libgcj.
+ 	* gnu/java/nio/SelectorProviderImpl.java:
+ 	Merged with libgcj.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java:
+ 	Partly merged with libgcj.
+ 	* gnu/java/nio/SocketChannelImpl.java:
+ 	Merged with libgcj.
+ 
+ 2003-03-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/CharBufferImpl.java:
+ 	Merged with libgcj.
+ 	* gnu/java/nio/DatagramChannelImpl.java:
+ 	Merged with libgcj.
+ 	* gnu/java/nio/MappedByteFileBuffer.java:
+ 	Partly merged with libgcj.
+ 
+ 2003-03-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/logging/FileHandler.java (FileHandler(String)): New
+ 	constructor.
+ 	* java/util/logging/LogRecord.java (serialVersionUID): Use
+ 	correct value.
+ 
+ 2003-03-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/security/Signer.java: Removed non-ASCII characters.
+ 	* java/security/Signature.java: Removed non-ASCII characters.
+ 	* java/security/Security.java: Removed non-ASCII characters.
+ 	* java/security/Policy.java (getCurrentPolicy): Typo fix.
+ 	(isLoaded): Removed non-ASCII character.
+ 
+ 2003-03-12  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/Level.java (OFF, SEVERE, WARNING, INFO, CONFIG,
+ 	FINE, FINER, FINEST, ALL): Added Javadoc.
+ 
+ 2003-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java: Reformated, no code changes.
+ 	* java/net/MulticastSocket.java: Fixed some @see tags for javadoc.
+ 	* java/net/PlainDatagramSocketImpl.java: Reformated, no code changes.
+ 	* java/net/Socket.java:  Fixed some @see tags for javadoc.
+ 	* java/net/URLConnection.java: Reformated, no code changes.
+ 
+ 2003-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(InetAddress): Constructors must be package-private, not public.
+ 
+ 2003-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java: Reformated, no code changes.
+ 
+ 2003-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java: New file.
+ 	* gnu/java/nio/Makefile.am
+ 	(EXTRA_DIST): Added FileLockImpl.java.
+ 
+ 2003-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java,
+ 	gnu/java/nio/CharBufferImpl.java,
+ 	gnu/java/nio/DoubleBufferImpl.java,
+ 	gnu/java/nio/FloatBufferImpl.java,
+ 	gnu/java/nio/IntBufferImpl.java,
+ 	gnu/java/nio/LongBufferImpl.java,
+ 	gnu/java/nio/MappedByteFileBuffer.java,
+ 	gnu/java/nio/MappedCharFileBuffer.java,
+ 	gnu/java/nio/MappedDoubleFileBuffer.java,
+ 	gnu/java/nio/MappedFloatFileBuffer.java,
+ 	gnu/java/nio/MappedIntFileBuffer.java,
+ 	gnu/java/nio/MappedLongFileBuffer.java,
+ 	gnu/java/nio/MappedShortFileBuffer.java,
+ 	gnu/java/nio/ShortBufferImpl.java,
+ 	java/nio/Buffer.java,
+ 	java/nio/ByteBuffer.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/MappedByteBuffer.java,
+ 	java/nio/ShortBuffer.java:
+ 	More merges with libgcj. Some little changes needed to make jikes
+ 	happy.
+ 
+ 2003-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/CharBufferImpl.java,
+ 	gnu/java/nio/DoubleBufferImpl.java,
+ 	gnu/java/nio/FloatBufferImpl.java,
+ 	gnu/java/nio/IntBufferImpl.java,
+ 	gnu/java/nio/LongBufferImpl.java,
+ 	gnu/java/nio/MappedDoubleFileBuffer.java,
+ 	gnu/java/nio/MappedFloatFileBuffer.java,
+ 	gnu/java/nio/MappedIntFileBuffer.java,
+ 	gnu/java/nio/MappedLongFileBuffer.java,
+ 	gnu/java/nio/MappedShortFileBuffer.java,
+ 	gnu/java/nio/ShortBufferImpl.java,
+ 	java/nio/ByteBuffer.java,
+ 	java/nio/ByteOrder.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/MappedByteBuffer.java,
+ 	java/nio/ShortBuffer.java:
+ 	Partly merged java.nio from libgcj.
+ 	
+ 2003-03-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/security/Signer.java: Removed non-ASCII character.
+ 	* java/security/Signature.java (setParameter): Removed non-ASCII
+ 	character.
+ 	* java/security/Security.java (getAlgorithms): Removed non-ASCII
+ 	characters.
+ 	* java/security/ProtectionDomain.java (implies): Removed non-ASCII
+ 	character.
+ 	* java/security/Policy.java (isLoaded): Removed non-ASCII
+ 	character.
+ 
+ 2003-03-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/FocusTraversalPolicy.java
+ 	(FocusTraversalPolicy): Documentation added.
+ 	(getComponentAfter): Documentation added.
+ 	(getComponentBefore): Documentation added.
+ 	(getFirstComponent): Documentation added.
+ 	(getLastComponent): Documentation added.
+ 	(getDefaultComponent): Documentation added.
+ 	(getInitialComponent): Documentation added.
+ 	* java/awt/ScrollPaneAdjustable.java
+ 	(sp): New member variable.
+ 	(orientation): New member variable.
+ 	(value): New member variable.
+ 	(minimum): New member variable.
+ 	(maximum): New member variable.
+ 	(visibleAmount): New member variable.
+ 	(unitIncrement): New member variable.
+ 	(blockIncrement): New member variable.
+ 	(adjustmentListener): New member variable.
+ 	(ScrollPaneAdjustable): Rewrote.
+ 	(addAdjustmentListener): New method.
+ 	(removeAdjustmentListener): New method.
+ 	(getAdjustmentListeners): New method.
+ 	(getBlockIncrement): New method.
+ 	(getMaximum): New method.
+ 	(getMinimum): New method.
+ 	(getOrientation): New method.
+ 	(getUnitIncrement): New method.
+ 	(getValue): New method.
+ 	(getVisibleAmount): New method.
+ 	(setBlockIncrement): New method.
+ 	(setUnitIncrement): New method.
+ 	(setMaximum): Implemented.
+ 	(setMinimum): Implemented.
+ 	(setValue): New method.
+ 	(setVisibleAmount): Implemented.
+ 	(paramString): New method.
+ 	* java/awt/Window.java
+ 	(show): Use setVisible(true) instead of super.show().
+ 	(hide): Use sevVisible(false) instead of super.hide().
+ 	(processWindowEvent): Added cases for WINDOW_GAINED_FOCUS,
+ 	WINDOW_LOST_FOCUS and WINDOW_STATE_CHANGED.
+ 	(postEvent): Deprecated.
+ 	(applyResourceBundle): Deprecated.
+ 	(processWindowFocusEvent): New method.
+ 	(processWindowStateEvent): New method.
+ 	* java/awt/datatransfer/DataFlavor.java: Reindented.
+ 	* java/awt/font/TextHitInfo.java
+ 	(charIndex): New member variable.
+ 	(leadingEdge): New member variable.
+ 	(TextHitInfo): New constructor.
+ 	(getCharIndex): Implemented.
+ 	(isLeadingEdge): Implemented.
+ 	(getInsertionIndex): Implemented.
+ 	(hashCode): Access charIndex directly.
+ 	(equals): Reformated.
+ 	(leading): Implemented.
+ 	(trailing): Implemented.
+ 	(beforeOffset): Implemented.
+ 	(afterOffset): Implemented.
+ 	(getOtherHit): Implemented.
+ 	(getOffsetHit): Implemented.
+ 	(toString): Implemented.
+ 	* java/awt/image/BufferedImage.java
+ 	(BufferedImage): Implements WritableRenderedImage.
+ 	(observers): New member variable.
+ 	(addTileObserver): New method.
+ 	(removeTileObserver): New method.
+ 
+ 2003-03-09  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* native/jni/java-io/FileDescriptor.c
+ 	(nativeOpen) Apply code from patch #1239 specifying mode bits in open()
+ 
+ 2003-03-09  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/io/LineNumberReader.java
+ 	Merge with gcj by replacing all methods with the versions from
+ 	gcj with the exception of skip() This file is in essence
+ 	completely new except for the Javadoc comments, which are carried
+ 	over from Classpath
+ 
+ 2003-03-09  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/io/BufferedReader.java
+ 	* java/io/BufferedWriter.java
+ 	* java/io/ByteArrayOutputStream.java
+ 	* java/io/FileReader.java
+ 	* java/io/PipedInputStream.java
+ 	* java/io/PipedReader.java
+ 	* java/io/PrintWriter.java
+ 	* java/io/PushbackReader.java
+ 	* java/io/Reader.java
+ 	* java/io/StringReader.java
+ 	Fix word wrapped comments, minor comment corrections.
+ 	* java/io/BufferedOutputStream.java
+ 	* java/io/DataInput.java
+ 	* java/io/DataOutput.java
+ 	* java/io/Externalizable.java
+ 	* java/io/FileFilter.java
+ 	* java/io/FilePermission.java (extensive)
+ 	* java/io/FileWriter.java
+ 	* java/io/FilenameFilter.java
+ 	* java/io/FilterInputStream.java
+ 	* java/io/FilterOutputStream.java
+ 	* java/io/FilterReader.java
+ 	* java/io/FilterWriter.java
+ 	* java/io/InputStreamReader.java
+ 	* java/io/ObjectInput.java
+ 	* java/io/ObjectInputValidation.java
+ 	* java/io/ObjectOutput.java
+ 	* java/io/ObjectStreamField.java
+ 	* java/io/OutputStreamWriter.java
+ 	* java/io/SerializablePermission.java
+ 	* java/io/Writer.java
+ 	Re-indent code, fix word wrapped comments.
+ 
+ 2003-03-09  Aaron M. Renn (arenn@urbanophile.com)
+ 
+ 	* java/io/FileOutputStream.java
+ 	(FileOutputStream(String,boolean)) Open write only
+ 	* java/io/FileDescriptor.java
+ 	(open) Support new open modes "w" & "a", change "ra" to "rwa"
+ 	* java/io/RandomAccessFile.java
+ 	(RandomAccessFile(String,String)) Always do checkRead on open
+ 	* native/jni/java-io/FileDescriptor.c
+ 	(nativeOpen) Support new open modes "w" "a", change "ra" to "rwa"
+ 
+ 2003-03-09  Raif S. Naffah  <raif@fl.net.au>
+ 
+ 	* java.security.AlgorithmParameterGenerator.java
+ 	(getInstance(String)): use new getInstance(String, Provider).
+ 	(getInstance(String, String)): ditto.
+ 	(getInstance(String, Provider)): new method.
+ 	* java.security.AlgorithmParameters.java
+ 	(getInstance(String)): use new getInstance(String, Provider).
+ 	(getInstance(String, String)): ditto.
+ 	(getInstance(String, Provider)): new method.
+ 	* java.security.IdentityScope.java: added SVUID.
+ 	* java.security.KeyFactory.java
+ 	(getInstance(String)): use new getInstance(String, Provider).
+ 	(getInstance(String, String)): ditto.
+ 	(getInstance(String, Provider)): new method.
+ 	* java.security.KeyPairGenerator.java 
+ 	(getInstance(String, Provider)): made it public and documented it.
+ 	* java.security.MessageDigest.java
+ 	(getInstance(String, Provider)): made it public and documented it.
+ 	* java.security.Policy.java
+ 	(pd2pc): new field.
+ 	(setPolicy()): ensure instance is loaded.
+ 	(setup(Policy)): new method.
+ 	(getCurrentPolicy()): new package-private method; contains code
+ 	previously in static initialiser.
+ 	(isLoaded()): new method.
+ 	(getPermissions(ProtectionDomain)): new method.
+ 	(implies(ProtectionDomain, Permission)): new method.
+ 	* java.security.ProtectionDomain.java
+ 	(classloader, principals, staticBinding): new fields.
+ 	(<ctor>(CodeSource, PermissionCollection)): use new ctor.
+ 	(<ctor>(CodeSource, PermissionCollection, ClassLoader, Principal[])):
+ 	new ctor.
+ 	(getClassLoader(), getPrincipals(), implies(Permission)): new methods.
+ 	(toString()): added representation of new fields.
+ 	* java.security.Security.java
+ 	(getAlgorithmProperty(String, String)): added implementation.
+ 	(getAlgorithms(String), getProviders(String), getProviders(Map)): new
+ 	public methods.
+ 	(selectProviders(...), provides(...)): new private methods.
+ 	* java.security.Signature.java
+ 	(getInstance(String, Provider)): made it public and documented it.
+ 	(verify(byte[], int, int), getParameters()): new methods.
+ 	* java.security.SignatureSpi.java
+ 	(engineVerify(byte[], int, int), engineGetParameters()): new methods.
+ 	* java.security.SignedObject.java
+ 	(getObject()): ensure streams are closed before return.
+ 	(getSignature()): return a clone.
+ 	(readObject(ObjectInputStream)): new method.
+ 	* java.security.Signer.java: added SVUID.
+ 	* java.security.interfaces.RSAMultiPrimePrivateCrtKey.java: new file
+ 	* java.security.spec.PSSParameterSpec.java: new file
+ 	* java.security.spec.RSAMultiPrimePrivateCrtKeySpec.java: new file
+ 	* java.security.spec.RSAOtherPrimeInfo.java: new file
+ 	* java/security/interfaces/Makefile.am: added RSAMultiPrimePrivateCrtKey.java.
+ 	* java/security/spec/Makefile.am: added PSSParameterSpec.java,
+ 	RSAMultiPrimePrivateCrtKeySpec.java, RSAOtherPrimeInfo.java.
+ 
+ 2003-03-09  Raif S. Naffah  <raif@fl.net.au>
+ 
+ 	* java.security.AlgorithmParameterGenerator.java: formatting +
+ 	documentation
+ 
+ 2003-03-08  Raif S. Naffah  <raif@fl.net.au>
+ 
+ 	* java.security.AlgorithmParameters.java: formatting + documentation
+ 	* java.security.Identity.java: formatting + documentation
+ 	* java.security.IdentityScope.java: formatting + documentation
+ 	* java.security.KeyFactory.java: formatting + documentation
+ 	* java.security.KeyPairGenerator.java: formatting + documentation
+ 	* java.security.MessageDigest.java: formatting + documentation
+ 	* java.security.Policy.java: formatting + documentation
+ 	* java.security.ProtectionDomain.java: formatting + documentation
+ 	* java.security.Security.java: formatting + documentation
+ 	* java.security.Signature.java: formatting + documentation
+ 	* java.security.SignatureSpi.java: formatting + documentation
+ 	* java.security.SignedObject.java: formatting + documentation
+ 	* java.security.Signer.java: formatting + documentation
+ 
+ 2003-03-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (initialized): New global.
+ 	(ClassLoader): Set it.
+ 	(defineClass): Throw security exception if class not initialized.
+ 
+ 2003-03-06  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: link to Jikes RVM instructions
+ 	* doc/www.gnu.org/docs/jikesrvm.wml: new file
+ 
+ 2003-03-05  Aaron M. Renn  <arenn@urbanophile.com>
+ 
+ 	* java/io/LineNumberReader.java
+ 	Re-indent code, fix word-wrapped comments
+ 	* java/io/PrintStream.java
+ 	Re-indent code, fix word-wrapped comments
+ 
+ 2003-03-04  Aaron M. Renn  <arenn@urbanophile.com>
+ 
+ 	* Converted file based I/O mechanisms in java.io to new 
+ 	native provider interface.
+ 	* java/io/FileDescriptor.java
+ 	Re-indent code and fix word-wrapped comments.
+ 	native_fd Rename instance variable to nativeFd
+ 	Commence primary ignition....
+ 	getFileDescriptor(int)
+ 	Diked out.
+ 	(setNativeFD) Rename to setNativeFd, make private
+ 	(getNativeFD) Rename to getNativeFd
+ 	(syncInternal) Rename to nativeSync(long)
+ 	(validInternal) Rename to nativeValid (long)
+ 	New instance methods added:
+ 	open(String, String)
+ 	close()
+ 	write(byte)
+ 	write(byte[], long, long)
+ 	read()
+ 	read(byte[], long, long)
+ 	available()
+ 	seek()
+ 	getFilePointer()
+ 	getLength()
+ 	setLength()
+ 	nativeOpen()
+ 	nativeClose()
+ 	nativeWriteByte()
+ 	nativeWriteBuf()
+ 	nativeReadByte()
+ 	nativeReadBuf()
+ 	nativeAvailable()
+ 	nativeSeek()
+ 	nativeGetFilePointer()
+ 	nativeGetLength()
+ 	nativeSetLength()
+ 	Added new static methods
+ 	nativeInit()
+ 	* java/io/FileInputStream.java
+ 	Re-ident code and fix word-wrapped comments.
+ 	native_fd - Convert from int to FileDescriptor, rename fd
+ 	FileInputStream(String) - Use string directly, don't convert to File
+ 	and call overloaded constructor
+ 	FileInputStream(File) - Call getPath, then invoke overloaded 
+ 	constructor
+ 	(getFD) - Just return fd
+ 	(available) - Just call fd.available()
+ 	(skip) - Convert to use fd.seek()
+ 	(read) - Use fd.read()
+ 	(read(byte[])) - Use fd.read(byte[], long, long)
+ 	(close) - Use fd.close()
+ 	(getChannel) - Use fd.getNativeFd()
+ 	Commence primary ignition....
+ 	grand_total_read instance variable
+ 	skipInternal
+ 	readInternal
+ 	open
+ 	closeInternal
+ 	finalize
+ 	static initializer block
+ 	Diked out.
+ 	* java/io/FileOutputStream.java
+ 	native_fd - Convert to FileDescriptor and rename fd
+ 	(getFD) - Just return fd
+ 	(write) - Use fd.write()
+ 	(write(byte[], long, long) - Use fd.write(byte[], long, long)
+ 	(close) - Use fd.close()
+ 	(getChannel) - Use fd.getNativeFd()
+ 	Commence primary ignition....
+ 	writeInternal
+ 	open
+ 	closeInternal
+ 	finalize
+ 	static initializer block
+ 	Diked out.
+ 	* java/io/RandomAccessFile.java
+ 	native_fd - Convert to FileDescriptor and rename fd
+ 	(RandomAccessFile(File, String)) - Add modes "rws" and "rwd"
+ 	(getFD) - Just return fd
+ 	(getFilePointer) - Use fd.getFilePointer()
+ 	(length) - Use fd.length()
+ 	(seek) - Use fd.seek()
+ 	(setLength) - Use fd.setLength()
+ 	(read) - Use fd.read()
+ 	(write) - Use fd.write()
+ 	(skipBytes) - Use fd.getFilePointer() and fd.seek()
+ 	(getChannel) - Use fd.getNativeFd()
+ 	Commence primary ignition ....
+ 	closeInternal
+ 	getFilePointerInternal
+ 	lengthInternal
+ 	seekInternal
+ 	setLengthInternal
+ 	readInternal
+ 	skipInternal
+ 	writeInternal
+ 	static initializer block
+ 	Diked Out.
+ 	* native/jni/java-io/FileDescriptor.c
+ 	New C module implementing all native methods from FileDescriptor
+ 	* native/jni/java-io/Makefile.am
+ 	Use new FileDescriptor.c instead of old modules
+ 	* native/jni/java-io/java_io_FileDescriptor.c
+ 	No longer used
+ 	* native/jni/java-io/java_io_FileInputStream.c
+ 	No longer used
+ 	* native/jni/java-io/java_io_FileOutputStream.c
+ 	No longer used
+ 	* native/jni/java-io/java_io_RandomAccessFile.c
+ 	No longer used.
+ 	
+ 2003-03-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/java_net_NetworkInterface.h: New file.
+ 	* java/net/NetworkInterface.java: Merged with libgcj.
+ 	* native/jni/java-net/java_net_NetworkInterface.c: New file.
+ 	* native/jni/java-net/Makefile.am
+ 	(libjavanet_la_SOURCES): Added java_net_NetworkInterface.c.
+ 
+ 2003-03-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(setSoTimeout): Clarify documentation.
+ 
+ 2003-03-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/Channels.java:
+ 	Merged from libgcj.
+ 	* java/nio/channels/FileChannel.java:
+ 	Merged from libgcj.
+ 
+ 2003-03-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/DatagramChannel.java:
+ 	Merged from libgcj.
+ 	* java/nio/channels/spi/SelectorProvider.java:
+ 	Merged from libgcj.
+ 	* java/nio/charset/Charset.java:
+ 	Merged from libgcj.
+ 	* java/nio/charset/CharsetEncoder.java:
+ 	Merged from libgcj.
+ 	* java/nio/charset/IllegalCharsetNameException.java:
+ 	Merged from libgcj.
+ 	* java/nio/charset/UnsupportedCharsetExeption.java:
+ 	Merged from libgcj.
+ 
+ 2003-03-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLStreamHandler.java:
+ 	Merged Win32 fixes from libgcj.
+ 
+ 2003-03-02  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/File.java
+ 	Re-indent code and eliminate word wrapped comments
+ 
+ 2003-03-02  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/DataInputStream.java
+ 	Fix word wrapped comments
+ 	Commence primary ignition...
+ 	(convertToBoolean)
+ 	(convertToByte)
+ 	(convertToUnsignedInt)
+ 	(convertToChar)
+ 	(convertToShort)
+ 	(convertToUnsignedShort)
+ 	(convertToInt)
+ 	(convertToLong)
+ 	Diked out.
+ 	Elimate call to convert methods above and inline functionality in:
+ 	(readBoolean)
+ 	(readByte)
+ 	(readChar) + synchronized
+ 	(readInt) + synchronized
+ 	(readLong) + synchronized
+ 	(readShort) + synchronized
+ 	(readUnsignedByte)
+ 	* java/io/DataOutputStream.java
+ 	Re-indented code and fixed word wrapped comments
+ 	Commence primary ignition...
+ 	(convertFromBoolean)
+ 	(convertFromChar)
+ 	(getConvertedStringChars)
+ 	(convertFromShort)
+ 	(convertFromInt)
+ 	(convertFromLong)
+ 	Diked out.
+ 	(buf) Added new instance variable
+ 	Elimate call to convert methods above and inline functionality in:
+ 	(writeChar) + synchronized 
+ 	(writeShort) + synchronized
+ 	(writeInt) + synchronized
+ 	(writeLong) + synchronized
+ 	* java/io/RandomAccessFile.java
+ 	Re-indented code and fixed word wrapped comments
+ 	(buf) Added new instance variable
+ 	Eliminate call to convert methods and inline functionality in:
+ 	(readByte)
+ 	(readUnsignedByte)
+ 	(readChar)
+ 	(readShort)
+ 	(readUnsignedShort)
+ 	(readInt)
+ 	(readLong)
+ 	(writeBoolean)
+ 	(writeChar)
+ 	(writeShort)
+ 	(writeInt)
+ 	(writeLong)
+ 
+ 2003-03-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Properties.java (load): Only skip line if the first
+ 	character is a comment, whitespaces don't count.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Package.java: Little merge with libgcj.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(connected): Removed.
+ 	(closed): New member variable.
+ 	(DatagramSocket): New constructor.
+ 	(close): Reset member variables on close.
+ 	(connect): Dont declare to throw exceptions.
+ 	(receive): Added exception checks and documentation.
+ 	(send): Merge implementation from libgcj.
+ 	(isClosed): New method.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/HttpURLConnection.java
+ 	(HTTP_SERVER_ERROR): Deprecated.
+ 	* java/net/MulticastSocket.java
+ 	(send): Replaced checkMulticast with appropriate checkPermission call,
+ 	deprecated.
+ 	* java/net/URLDecoder.java
+ 	(decode): Deprecated.
+ 	* java/net/URLEncoder.java
+ 	(encode): Deprecated.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/Caret.java
+ 	(getMagicCaretPosition): Fixed typo in method name.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(getMagicCaretPosition): Fixed typo in method name.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/List.java
+ 	(setMultipleSelections): Deprecated.
+ 	(delItem): Deprecated.
+ 	* java/awt/MenuComponent.java
+ 	(getPeer): Deprecated.
+ 	* java/awt/ScrollPane.java
+ 	(addNotify): getPeer() is deprecated. Use isDisplayable() instead.
+ 	* java/awt/dnd/MouseDragGestureRecognizer.java
+ 	(mouseClicked): Added comment.
+ 	(mousePressed): Added comment.
+ 	(mouseReleased): Added comment.
+ 	(mouseEntered): Added comment.
+ 	(mouseExited): Added comment.
+ 	(mouseDragged): Added comment.
+ 	(mouseMoved): Added comment.
+ 	* java/awt/event/KeyEvent.java
+ 	(KeyEvent): Deprecated.
+ 	(setModifiers): Deprecated.
+ 	
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/dnd/DropTargetContext.java:
+ 	Compile fix: Forgot to commit import.
+ 
+ 2003-03-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectInputStream.java: Reindent and remove dead and/or
+ 	commented out code.
+ 	* java/io/ObjectOutputStream.java: Likewise.
+ 
+ 2003-03-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/rmi/registry/RegistryHandler.java: Deprecate.
+ 
+ 2003-02-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/Beans.java,
+ 	java/beans/FeatureDescriptor.java
+ 	java/beans/PropertyEditorManager.java:
+ 	Reformated to GNU style.
+ 	* javax/accessibility/AccessibleContext.java
+ 	(ACCESSIBLE_DESCRIPTION_PROPERTY): Fixed typo.
+ 
+ 2003-02-27  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* java/lang/Math.java
+ 	(min(float,float)): check Float.isNaN(a) and return a
+ 	(max(float,float)): ditto 
+ 	(round(float)): ditto
+ 	(min(double,double)): check Double.isNaN(a) and return a
+ 	(max(double,double)): ditto
+ 	(round(double)): ditto
+ 	(toRadians): multiply before dividing to reduce decimal error
+ 	(toDegrees): ditto
+ 
+ 2003-02-25  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* java/awt/dnd/peer/DragSourceContextPeer.java
+ 	(startDrag): mark public; throws InvalidDnDOperationException
+ 	(setCursor): ditto
+ 	(transferablesFlavorsChanges: mark public
+ 	(getCursor): mark public
+ 	* java/awt/dnd/peer/DropTargetPeer.java: new file
+ 	* java/awt/dnd/peer/DropTargetContextPeer.java:
+ 	(setTargetActions): added method
+ 	(getTargetActions): ditto
+ 	(getDropTarget): ditto
+ 	(getTransferDataFlavors): ditto
+ 	(getTransferable): ditto
+ 	(isTransferableJVMLocal): ditto
+ 	(acceptDrag): ditto
+ 	(rejectDrag): ditto
+ 	(acceptDrop): ditto
+ 	(rejectDrop): ditto
+ 	(dropComplete): ditto
+ 	* java/awt/peer/ButtonPeer.java: reformatted
+ 	* java/awt/peer/CheckboxMenuItemPeer.java: reformatted
+ 	(setState): remove unneeded abstract keyword
+ 	* java/awt/peer/CheckboxPeer.java: reformatted
+ 	* java/awt/peer/ChoicePeer.java: reformatted
+ 	(removeAll): added method
+ 	* java/awt/peer/ComponentPeer.java:
+ 	(isFocusable): added method
+ 	(requestFocus): ditto
+ 	(getGraphicsConfiguration): mark public 
+ 	(isObscured): added method
+ 	(canDetermineObscurity): ditto
+ 	(coalescePaintEvent): ditto
+ 	(updateCursorImmediately): ditto
+ 	(createVolatileImage): ditto
+ 	(handlesWheelScrolling): ditto
+ 	(createBuffers): ditto
+ 	(getBackBuffer): ditto
+ 	(flip): ditto
+ 	(destroyBuffers): ditto
+ 	* java/awt/peer/ContainerPeer.java
+ 	(insets): remove unneeded abstract keyword
+ 	(getInsets): ditto
+ 	(beginValidate): ditto
+ 	(endValidate): ditto
+ 	(beginLayout): added method
+ 	(endLayout): ditto
+ 	(isPaintPending): ditto
+ 	* java/awt/peer/DialogPeer.java: reformatted
+ 	(setResizable): remove unneeded abstract keyword
+ 	(setTitle): ditto
+ 	* java/awt/peer/FileDialogPeer.java: reformatted
+ 	(setFile): remove unneeded abstract keyword
+ 	(setDirectory): ditto
+ 	(setFilenameFilter): ditto
+ 	* java/awt/peer/FramePeer.java: reformatted
+ 	(setIconImage): remove unneeded abstract keyword
+ 	(setMenuBar): ditto
+ 	(setResizable): ditto
+ 	(setTitle): ditto
+ 	(getState): added method
+ 	(setState): ditto
+ 	(setMaximizedBounds): ditto
+ 	* java/awt/peer/LabelPeer.java: reformatted
+ 	* java/awt/peer/ListPeer.java: reformatted
+ 	(add): remove unneeded abstract keyword
+ 	(addItem): ditto
+ 	(clear): ditto
+ 	(delItems): ditto
+ 	(deselect): ditto
+ 	(getSelectedIndexes): ditto
+ 	(makeVisible): ditto
+ 	(minimumSize): ditto
+ 	(preferredSize): ditto
+ 	(removeAll): ditto
+ 	(select): ditto
+ 	(setMultipleMode): ditto
+ 	(setMultipleSelections): ditto
+ 	(getPreferredSize): added method
+ 	(getMinimumSize): ditto
+ 	* java/awt/peer/MenuBarPeer.java: reformatted
+ 	* java/awt/peer/MenuComponentPeer.java: reformatted
+ 	(dispose): remove unneeded abstract keyword
+ 	* java/awt/peer/MenuItemPeer.java: reformatted
+ 	* java/awt/peer/MenuPeer.java
+ 	(addItem): remove unneeded abstract keyword
+ 	(addSeparator): ditto
+ 	(delItem): ditto
+ 	* java/awt/peer/PopupMenuPeer.java: 
+ 	(show)(Component, int, int): remove unneeded abstract keyword
+ 	(show(Event)): added method
+ 	* java/awt/peer/RobotPeer.java: new file
+ 	* java/awt/peer/ScrollbarPeer.java: reformatted
+ 	* java/awt/peer/ScrollPanePeer.java: reformmatted
+ 	(getHScrollbarHeight): remove unneeded abstract keyword
+ 	(getVScrollbarWidth): ditto
+ 	(setScrollPosition): ditto
+ 	(childResized): ditto
+ 	(setUnitIncrement): ditto
+ 	(setValue): ditto
+ 	* java/awt/peer/TextAreaPeer.java: reformatted
+ 	(insert): remove unneeded abstract keyword
+ 	(insertText): ditto
+ 	(minimumSize): ditto
+ 	(getMinimumSize): ditto
+ 	(preferredSize): ditto
+ 	(getPreferredSize): ditto
+ 	(replaceRange): ditto
+ 	(replaceText): ditto
+ 	* java/awt/peer/TextComponentPeer.java: reformatted
+ 	(getSelectionEnd): remove unneeded abstract keyword
+ 	(getSelectionStart): ditto
+ 	(getText): ditto
+ 	(setText): ditto
+ 	(select): ditto
+ 	(setEditable): ditto
+ 	(getCaretPosition): ditto
+ 	(setCaretPosition): ditto
+ 	(getIndexAtPoint): added method
+ 	(getCharacterBounds): ditto
+ 	(filterEvents): ditto
+ 	* java/awt/peer/TextFieldPeer.java: reformatted
+ 	(minimumSize): remove unneeded abstract keyword
+ 	(preferredSize): ditto
+ 	(getMinimumSize): ditto
+ 	(getPreferredSize): ditto
+ 	(setEchoChar): ditto
+ 	(setEchoCharacter): ditto
+ 	* java/awt/peer/WindowPeer.java: reformatted
+ 	(toBack): remove unneeded abstract keyword
+ 	(toFront): ditto
+ 	* gnu/java/awt/GLightweightPeer.java 
+ 	(isFocusable): added method
+ 	(requestFocus): ditto
+ 	(isObscured): ditto
+ 	(canDetermineObscurity): ditto
+ 	(coalescePaintEvent): ditto
+ 	(updateCursorImmediately): ditto
+ 	(createVolatileImage): ditto
+ 	(handlesWheelScrolling): ditto
+ 	(createBuffers): ditto
+ 	(getBackBuffer): ditto
+ 	(flip): ditto
+ 	(destroyBuffers): ditto
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(isFocusable): added method
+ 	(requestFocus): ditto
+ 	(isObscured): ditto
+ 	(canDetermineObscurity): ditto
+ 	(coalescePaintEvent): ditto
+ 	(updateCursorImmediately): ditto
+ 	(createVolatileImage): ditto
+ 	(handlesWheelScrolling): ditto
+ 	(createBuffers): ditto
+ 	(getBackBuffer): ditto
+ 	(flip): ditto
+ 	(destroyBuffers): ditto
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java
+ 	(removeAll): new method
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(beginLayout): added method
+ 	(endLayout): ditto
+ 	(isPaintPending): ditto
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(setState): added method
+ 	(getState): ditto
+ 	(setMaximizedBounds): ditto
+ 	* gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
+ 	(show): added method
+ 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
+ 	(getIndexAtPoint): added method
+ 	(getCharacterBounds): ditto
+ 	(filterEvents): ditto
+ 	* doc/www.gnu.org/Makefile: fix wml invocation
+ 	* doc/www.gnu.org/home.wml: fix link to japitools, link to providers
+ 	of core packages not yet part of Classpath
+ 	* doc/www.gnu.org/announce/Makefile: fix wml invocation
+ 	* doc/www.gnu.org/docs/Makefile: fix wml invocation
+ 
+ 2003-02-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ByteArrayOutputStream.java (toString(int)): Fixed typo
+ 	in @deprecated.
+ 
+ 2003-02-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/ZipEntry.java (setComment): Don't check length when
+ 	argument is null.
+ 
+ 2003-02-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/ZipEntry.java (ZipEntry(String)): When name is bigger
+ 	then 65535 chars throw IllegalArgumentException.
+ 
+ 2003-02-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/ScrollPaneAdjustable.java: Reformated.
+ 
+ 2003-02-21  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/awt/Graphics2D.java
+ 	(getFontRenderContext): New abstract method.
+ 	(drawGlyphVector): New abstract method.
+ 	
+ 2003-02-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* vm/reference/java/lang/Runtime.java: Reverted previous patch.
+ 
+ 2003-02-21  Anthony Green  <green@redhat.com>
+ 
+ 	* vm/reference/java/lang/Runtime.java (getLocalizedInputStream):
+ 	Deprecate.
+ 	(getLocalizedOutputStream): Ditto.
+ 
+ 2003-02-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/prefs/AbstractPreferences.java (isUserNode):
+ 	Implemented.
+ 
+ 2003-02-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/ZipFile.java (finalize): New method.
+ 
+ 2003-02-18  Hans Boehm  <Hans.Boehm@hp.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(setFont, gtkSetFont): add.
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java (GtkComponentPeer):
+ 	Propagate font to peer.  (setFont): add FIXME comment.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(gtkTextGetSize): fix height, width computation.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java (GtkFontPeer):
+ 	Make X font name a bit less bogus.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(post_adjustment_event): Pass on GTK_SCROLL_NONE.
+ 
+ 	* java/awt/Scrollbar.java (setValues): Fix visibleAmount range check.
+ 	(processAdjustmentEvent): Adjust value.
+ 
+ 	* java/awt/FlowLayout.java (layoutContainer) Fix 2 indexing and one
+ 	logic errors.
+ 
+ 	* java/awt/Component.java (setVisible, show, hide): Call show and
+ 	hide methods in subclasses.
+ 	(getPreferredSize): don't set prefSize before we have peer.
+ 
+ 	* java/awt/TextArea.java, java/awt/TextField.java (getPreferredSize):
+ 	Guess (0,0) if we don't have peer.
+ 
+ 2003-02-18  Raif S. Naffah <raif@fl.net.au>
+ 
+ 	* java/math/BigInteger.java (euclidInv): Take result array as an
+ 	argument.  Updated all callers.
+ 	(modInverse): Removed unused variables.
+ 
+ 2003-02-17  Raif S. Naffah <raif@fl.net.au>
+ 
+ 	* java/math/BigInteger.java (euclidInv): Return array of
+ 	`BigInteger's.  Changed all callers.
+ 
+ 2003-02-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java:
+ 	Merged some comments with libgcj.
+ 	(connect): Merged with libgcj.
+ 	(send): Merged FIXME comment with libgcj.
+ 	(getLocalSocketAddress): Fixed return argument.
+ 
+ 2003-02-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/font/Makefile.am: Added new files:
+ 	java/awt/font/FontRenderContext.java
+ 	java/awt/font/ShapeGraphicAttribute.java
+ 	java/awt/font/MultipleMaster.java
+ 	java/awt/font/TransformAttribute.java
+ 	java/awt/font/GlyphJustificationInfo.java
+ 	java/awt/font/LineBreakMeasurer.java
+ 	java/awt/font/TextMeasurer.java
+ 	java/awt/font/TextLayout.java
+ 	java/awt/font/LineMetrics.java
+ 	java/awt/font/TextAttribute.java
+ 	java/awt/font/GlyphMetrics.java
+ 	java/awt/font/OpenType.java
+ 	java/awt/font/GlyphVector.java
+ 	java/awt/font/GraphicAttribute.java
+ 	java/awt/font/ImageGraphicAttribute.java
+ 	java/awt/font/NumericShaper.java
+ 	
+ 2003-02-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/dnd/DragSourceContext.java
+ 	(addDragSourceListener): Added documentation.
+ 	* java/awt/dnd/DragSourceDragEvent.java
+ 	(serialVersionUID): New member variable.
+ 	(getDropAction): Reformated.
+ 	* java/awt/dnd/DragSourceDropEvent.java
+ 	(serialVersionUID): New member variable.
+ 	(dropSuccess): Renamed from success for serialization issues.
+ 	* java/awt/dnd/DragSourceEvent.java
+ 	(serialVersionUID): New member variable.
+ 	* java/awt/dnd/DropTarget.java
+ 	(serialVersionUID): New member variable.
+ 	(DropTarget): Implemented, documentation reworked.
+ 	(setComponent): Documentation added.
+ 	(getComponent): Documentation added.
+ 	(setDefaultActions): Documentation added.
+ 	(getDefaultActions): Documentation added.
+ 	(addDropTargetListener): Documentation added.
+ 	* java/awt/dnd/DropTargetContext.java
+ 	(DropTargetContext): Documentation added.
+ 	(TransferableProxy.TransferableProxy): New method.
+ 	(dropComplete): Fixed documentation.
+ 	(getTransferable): Fixed documentation.
+ 	(createTransferableProxy): Implemented.
+ 	* java/awt/dnd/DropTargetDragEvent.java
+ 	(DropTargetDragEvent): Documentation added.
+ 	(serialVersionUID): New member variable.
+ 	(DropTargetDragEvent): Throw exceptions, documentation added.
+ 	(acceptDrag): Implemented.
+ 	(getCurrentDataFlavors): Implemented.3yy
+ 	(getCurrentDataFlavorsAsList): Implemented.
+ 	(isDataFlavorSupported): Implemented.
+ 	(rejectDrag): Implemented.
+ 	* java/awt/dnd/DropTargetDropEvent.java
+ 	(DropTargetDropEvent): Documentation added.
+ 	(serialVersionUID): New member variable.
+ 	(actions): Renamed from srcActions for serialization issues.
+ 	(isLocalTx): Renamed from isLocalTx for serialization issues.
+ 	(DropTargetDropEvent): New implementation, throw exceptions,
+ 	documentation added.
+ 	(getCurrentDataFlavors): Implemented.
+ 	(getCurrentDataFlavorsAsList): Implemented.
+ 	(isDataFlavorSupported): Implemented.
+ 	(getSourceActions): Implemented.
+ 	(getDropAction): Implemented.
+ 	(getTransferable): Implemented.
+ 	(acceptDrop): Implemented.
+ 	(rejectDrop): Implemented.
+ 	* java/awt/dnd/DropTargetListener.java
+ 	(drop): Fixed documentation.
+ 	* java/awt/dnd/MouseDragGestureRecognizer.java
+ 	(MouseDragGestureRecognizer): Documentation added.
+ 
+ 2003-02-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/font/FontRenderContext.java,
+ 	java/awt/font/ShapeGraphicAttribute.java,
+ 	java/awt/font/MultipleMaster.java,
+ 	java/awt/font/TransformAttribute.java,
+ 	java/awt/font/GlyphJustificationInfo.java,
+ 	java/awt/font/LineBreakMeasurer.java,
+ 	java/awt/font/TextMeasurer.java,
+ 	java/awt/font/TextLayout.java,
+ 	java/awt/font/LineMetrics.java,
+ 	java/awt/font/TextAttribute.java,
+ 	java/awt/font/GlyphMetrics.java,
+ 	java/awt/font/OpenType.java,
+ 	java/awt/font/GlyphVector.java,
+ 	java/awt/font/GraphicAttribute.java,
+ 	java/awt/font/ImageGraphicAttribute.java,
+ 	java/awt/font/NumericShaper.java: New files.
+ 	* Makefile.am
+ 	(awt_java_source_files): Added the following files:
+ 	java/awt/font/FontRenderContext.java
+ 	java/awt/font/ShapeGraphicAttribute.java
+ 	java/awt/font/MultipleMaster.java
+ 	java/awt/font/TransformAttribute.java
+ 	java/awt/font/GlyphJustificationInfo.java
+ 	java/awt/font/LineBreakMeasurer.java
+ 	java/awt/font/TextMeasurer.java
+ 	java/awt/font/TextLayout.java
+ 	java/awt/font/LineMetrics.java
+ 	java/awt/font/TextAttribute.java
+ 	java/awt/font/GlyphMetrics.java
+ 	java/awt/font/OpenType.java
+ 	java/awt/font/GlyphVector.java
+ 	java/awt/font/GraphicAttribute.java
+ 	java/awt/font/ImageGraphicAttribute.java
+ 	java/awt/font/NumericShaper.java
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-02-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/print/Paper.java
+ 	(Paper): Implements Cloneable.
+ 	* java/awt/print/PrinterJob.java
+ 	(setJobName): Return value must be void.
+ 	(print): Throws PrinterException.
+ 	
+ 2003-02-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/undo/UndoableEditSupport.java (UndoableEditSupport):
+ 	Removed `TODO'.
+ 	(addUndoableEditListener, removeUndoableEditListener): Wrote.
+ 	(getUndoableEditListeners): New method.
+ 	(getUpdateLevel): Implemented.
+ 	(createCompoundEdit): Likewise.
+ 	(_postEdit): Likewise.
+ 	(beginUpdate): Likewise.
+ 	(endUpdate): Likewise.
+ 	(toString): Likewise.
+ 
+ 	* javax/swing/undo/UndoableEditSupport.java: Reindented.
+ 
+ 	* javax/swing/undo/StateEditable.java (RCSID): New field.
+ 
+ 	* javax/swing/undo/StateEditable.java: Reindented.
+ 
+ 2003-02-16  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/util/Properties.java (store): Move the code formerly in
+ 	list(), into this method.
+ 	(list (PrintStream)): Just call list (PrintWriter) with a 
+ 	PrintWriter object constructed from the given PrintStream object.
+ 	(list (PrintWriter)): Emulate the output of Properties.list()
+ 	as found in JDK 1.3/1.4.
+ 
+ 2003-02-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/undo/AbstractUndoableEdit.java (toString):
+ 	Implemented.
+ 
+ 	* javax/swing/undo/StateEdit.java: Implemented.
+ 
+ 	* javax/swing/undo/StateEdit.java: Reindented.
+ 
+ 2003-02-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetPermission.java
+ 	(NetPermission): Make doucmentation match the method declaration.
+ 	* java/net/NetworkInterface.java
+ 	(equals): Reformated for GNU coding style.
+ 
+ 2003-02-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLStreamHandler.java (toExternalForm): Fixed
+ 	indentation.
+ 
+ 2003-02-16  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* doc/api/Makefile.am: remove non-public packages from output
+ 
+ 2003-02-16  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* NEWS: updated                                                         
+ 	* configure.in: updated VERSION to 0.05                                 
+ 	* doc/api/Makefile.am: updated for gjdoc 0.4.1
+ 	* doc/api/xslt: directory removed; no longer needed      
+ 
+ 2003-02-15  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* configure.in (portable-native-sync): new configure option allows
+ 	user to configure native AWT peers to use Java threading primitives
+ 	instead of pthread primitives.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): get JavaVM 
+ 	reference before calling g_thread_init if using PORTABLE_NATIVE_SYNC
+ 	* native/jni/gtk-peer/gthread-jni.c
+ 	(maybe_rethrow): utility method checks for JNI exception and throws
+ 	another exception (maybe it should clear the previous first?)
+ 	(allocatePlainObject): new method used to create a mutex
+ 	(freePlainObject): new method use to free a mutex
+ 	(takeLock): new method
+ 	(releaseLock): new method
+ 	(g_mutex_new_jni_impl): uses allocatePlainObject instead
+ 	(g_mutex_lock_jni_impl): uses takeLock instead
+ 	(g_mutex_unlock_jni_impl): uses releaseLock instead
+ 	(g_mutex_free_jni_impl): uses freePlainObject instead
+ 	(g_private_new_jni_impl): implemented
+ 	(g_private_get_jni_impl): implemented
+ 	(g_private_set_jni_impl): implemented
+ 	(g_cond_new_jni_impl): implemented; uses allocatePlainObject
+ 	(g_cond_signal_jni_impl): implemented
+ 	(g_cond_broadcast_jni_impl): implemented
+ 	(g_cond_wait_jni_impl): implemented
+ 	(g_cond_timed_wait_jni_impl): implemented
+ 	(g_cond_free_jni_impl): implemented; uses freePlainObject
+ 	* native/jni/gtk-peer/gthread-jni.h: extern JavaVM *gdk_vm
+ 
+ 2003-02-15  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* TODO: updated
+ 
+ 2003-02-15  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* java/util/zip/InflaterInputStream.java (markSupported): added method
+ 	(mark): added method
+ 	(reset): added method
+ 
+ 2003-02-15  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* native/jni/java-net/java_net_PlainSocketImpl.c: do not need to 
+ 	specifically test for AIX since the configure check for the header
+ 	does what is needed.
+ 
+ 2003-02-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(drawString): New method.
+ 	* java/awt/Graphics.java
+ 	(drawString): New abstract method.
+ 	
+ 2003-02-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(isRepresentationClassByteBuffer): Removed try-catch block.
+ 	(isRepresentationClassCharBuffer): Removed try-catch block.
+ 	(isRepresentationClassReader): Removed try-catch block.
+ 
+ 2003-02-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/CheckboxMenuItem.java
+ 	(CheckBoxMenuItem): Dont implement Serializable.
+ 	(getListeners): New method,
+ 	(getItemListeners): New method.
+ 	* java/awt/Choice.java
+ 	(getListeners): New method,
+ 	(getItemListeners): New method.
+ 	* java/awt/Container.java
+ 	(getListeners): Added exception documentation.
+ 	(setFocusTraversalKeys): Throw exceptions, added documentattion.
+ 	(getFocusTraversalKeys): Added documentation.
+ 	(areFocusTraversalKeysSet): Added documentation.
+ 	(applyComponentOrientation): Added documentation.
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java
+ 	(implicitDownCycleTraversal): Renamed from downCycle for
+ 	serialization.
+ 	(ContainerOrderFocusTraversalPolicy): Added documentation.
+ 	(accept): Reformated.
+ 	* java/awt/Dialog.java
+ 	(Dialog): Dont implement Serializable.
+ 	(Dialog): Added documentation.
+ 	* java/awt/Font.java
+ 	(Font): Dont use absolute class name.
+ 	* java/awt/Frame.java
+ 	(Frame): Font implement Serializable.
+ 	* java/awt/List.java
+ 	(getListeners): New method,
+ 	(getActionListeners): New method.	
+ 	(getItemListeners): New method.
+ 	* java/awt/Menu.java
+ 	(countItems): New deprecated method.
+ 	* java/awt/Scrollbar.java
+ 	(getListeners): New method,
+ 	(getAdjustmentListeners): New method,
+ 	* java/awt/TextComponent.java
+ 	(getListeners): New method,
+ 	(getTextListeners): New method,
+ 	* java/awt/TextField.java
+ 	(getListeners): New method,
+ 	(getActionListeners): New method.	
+ 	* java/awt/Window.java
+ 	(windowFocusListener): New member variable.
+ 	(windowStateListener): New member variable.
+ 	(getWindowFocusListeners): New method.
+ 	(getWindowStateListeners): New method.
+ 	(addWindowFocusListener): New method.
+ 	(addWindowStateListener): New method.
+ 	(removeWindowFocusListener): New method.
+ 	(removeWindowStateListener): New method.
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(isRepresentationClassByteBuffer): New method.
+ 	(isRepresentationClassCharBuffer): New method.
+ 	(isRepresentationClassReader): New method.
+ 
+ 2003-02-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/math/BigDecimal.java (BigDecimal(String)): Always set scale to
+ 	zero when there is an exponent and the significant is zero.
+ 	(divide): Always set scale to newScale even in special ZERO case.
+ 
+ 2003-02-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/BufferedOutputStream.java (write(int)): Only flush when
+ 	next byte cannot be buffered.
+ 
+ 2003-02-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/System.java (properties): Use Properties.clone.
+ 	(setProperties): Likewise.
+ 
+ 2003-02-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/prefs/NodeChangeEvent.java
+ 	(serialVersionUID): New member variable (Merge back from libgcj).
+ 	* java/util/prefs/PreferenceChangeEvent.java
+ 	(serialVersionUID): New member variable (Merge back from libgcj).
+ 	* java/util/prefs/PreferenceChangeListener.java
+ 	(preferenceChange): Renamed from PreferenceChange (Merge back from
+ 	libgcj).
+ 
+ 2003-02-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Label.java
+ 	(Label): Don't implement Serializable directly.
+ 	(addNotify): Fixed typo in documentation.
+ 	* java/awt/List.java
+ 	(List): Don't implement Serializable directly.
+ 	* java/awt/PopupMenu.java
+ 	(PopupMenu): Don't implement Serializable directly.
+ 	* java/awt/ScrollPane.java
+ 	(ScrollPane): Don't implement Serializable directly.
+ 	* java/awt/Scrollbar.java
+ 	(Scrollbar): Don't implement Serializable directly.
+ 	* java/awt/TextArea.java
+ 	(preferredSize): Fixed method arguments.
+ 	* java/awt/TextField.java
+ 	(TextField): Don't implement Serializable directly.
+ 	* java/awt/color/ICC_ColorSpace.java
+ 	(fromCIOXYZ): Documentation added.
+ 	(getMinValue): Documentation added.
+ 	(getMaxValue): Documentation added.
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(isMimeTypeEqual): May not be final.
+ 	(clone): Throws CloneNotSupportedException.
+ 	(getReaderForText): Don't throws UnsupportedEncodingException.
+ 
+ 2003-02-13  Casey Marshall  <rsdio@metastatic.org>
+ 
+ 	PR libgcj/9271:
+ 	* java/security/SecureRandom.java (next): Avoid bias in results.
+ 
+ 2003-02-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/GridBagConstraints.java
+ 	(FIRST_LINE_ENT, FIRST_LINE_START, LAST_LINE_END, LAST_LINE_START,
+ 	LINE_END, LINE_START, PAGE_END, PAGE_START): New constants.
+ 	* java/awt/KeyboardFocusManager.java
+ 	(setGlobalCurrentFocusCycleRoot): Must be public.
+ 	* java/awt/MenuComponent.java
+ 	(MenuComponent): Must be public.
+ 	* java/awt/Toolkit.java:
+ 	Added some empty lines to make documentation more readable.
+ 	(getFontPeer): Added @deprecated.
+ 	(getColorModel): Added exception documentation.
+ 	(getProperty): Fixed documentation.
+ 
+ 2003-02-12  Jeroen Frijters  <jeroen@sumatra.nl>
+ 
+ 	* java/io/File.java (File(String)): Only remove tail separators while
+ 	path isn't the root directory.
+ 
+ 2003-02-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/zip/ZipInputStream.java (read): Fixed indentation.
+ 
+ 2003-02-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/undo/AbstractUndoableEdit.java (UndoName, RedoName):
+ 	Now final.
+ 
+ 	* javax/swing/undo/AbstractUndoableEdit.java: Reindented.
+ 
+ 	* javax/sql/ConnectionEvent.java (serialVersionUID): New field.
+ 	(ex): Renamed from sqlException.
+ 
+ 2003-02-10  Raif S. Naffah <raif@fl.net.au>
+ 
+ 	* java/math/BigInteger.java:
+ 	Updated notice to include years 2002 and 3.
+ 	Added 2 private (int) arrays with values from the HAC (Handbook of
+ 	Applied Cryptography -A. Menezes & al): k[] that contains bit lengths
+ 	and t[] that contains nbr. of tests --used in isProbablePrime().
+ 
+ 	* java/math/BigInteger.java (make(long)): Merged into valueOf(long).
+ 
+ 	* java/math/BigInteger.java (make(int[],int), add(int,int),
+ 	add(BI,BI,int), times(BI,int), divide(long,long,BI,BI,int), gcd(BI),
+ 	isProbablePrime(int), shift(BI,int), valueOf(String,int), neg(BI),
+ 	bitOp(int,BI,BI), and(BI,int)): Use valueOf(long) instead of
+ 	make(long).
+ 
+ 	* java/math/BigInteger.java (euclidInv): Reduce number of work vars
+ 	(euclidInv(int,int,int)): Now returns an array of 2 ints instead of 3.
+ 	(euclidInv(BI,BI,BI)): Used to return an array of 2 BIs; now accepts 6
+ 	BIs and returns void.
+ 	(modInverse(BI)): Use new signatures of euclidInv().
+ 
+ 	* java/math/BigInteger.java (isProbablePrime(int)): Use divide() with
+ 	static small primes instead of remainder().
+ 	Use pre-computed max nbr of trials based on bitlength of BI to test.
+ 	Use pre-computed small primes for the trial tests instead of random
+ 	numbers.
+ 
+ 	* java/math/BigInteger.java (isOdd, isMinusOne, pow): Removed.
+ 	not used.
+ 
+ 	* java/math/BigInteger.java (format(int,StringBuffer)): Removed
+ 	invoacation of MPN.chars_per_word().  not used.
+ 
+ 	* java/math/BigInteger.java (gcd(int,int)): Declared 'tmp' once as
+ 	local var and used where needed.
+ 
+ 	* java/math/BigInteger.java (modPow(BI,BI)): Fixed spelling.
+ 	Combined declaration with initialisation of locals.
+ 	Removed unused var.
+ 
+ 	* java/math/BigInteger.java: Style changes
+ 	(pow(int)): Removed 'else' keyword.
+ 	(toString(int)): idem.
+ 	(doubleValue()): idem.
+ 	(bitLength()): idem.
+ 	(equals(Object)): Use static methods name in same class w/o prepending
+ 	class name.
+ 	(doubleValue()): idem.
+ 	(setNegative(BI)): idem.
+ 	(negate()): idem.
+ 	(and(BI,int)): idem.
+ 	(and(BI)): idem.
+ 	(gcd(BI)): idem.
+ 	(byteArrayToIntArray()): Removed casting to (int). this is
+ 	std. behaviour.
+ 	(canonicalize()): idem.
+ 	(alloc(int)): Always instantiate a new BI.
+ 
+ 2003-02-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/sql/Timestamp.java (compareTo(Object)): New method.
+ 	(compareTo(Timestamp)): Likewise.
+ 	(serialVersionUID): Updated.
+ 
+ 2003-02-09  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: add more links to projects/products using
+ 	GNU Classpath.
+ 
+ 2003-02-09  Raif S. Naffah  <raif@fl.net.au>
+ 
+ 	* gnu/java/security/provider/SHA1PRNG.java (ensureIsSeeded): new 
+ 	method used to ensure seeding has occurred and that a specific 
+ 	seed can be set and used.
+ 
+ 2003-02-07  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/beans/PropertyDescriptor.java
+ 	(PropertyDescriptor(String, Class)): Sanity check getter and setter
+ 	methods.
+ 	(PropertyDescriptor(String, Class, String, String)): Likewise.
+ 	(PropertyDescriptor(String, Method, Method): Factor out getter and
+ 	setter method sanity checks into new method.
+ 	(findMethods): Don't do parameter sanity checking of get method here.
+ 	(checkMethods): New method.
+ 
+ 2003-02-07  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/beans/PropertyDescriptor.java: Reformat.
+ 
+ 2003-02-06  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/io/ObjectOutputStream.java (defaultProtocolVersion): Now
+ 	defaults to PROTOCOL_VERSION_2
+ 
+ 2003-02-04  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/jar/JarFile.java: Reindent.
+ 
+ 2003-02-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/PipedOutputStream.java (flush): Declare as throwing
+ 	IOException.
+ 	(close): Likewise.
+ 	* java/io/PipedWriter.java (close): Declare as throwing
+ 	IOException.
+ 	* java/io/StringWriter.java (close): Declare as throwing
+ 	IOException.
+ 
+ 2003-02-03  John Leuner  <jewel@debian.org>
+ 
+ 	* java/util/zip/InflaterInputStream.java: fix problem with 0-length 
+ 	reads from end of file
+ 	* java/util/zip/ZipInputStream.java: idem
+ 	* java/util/jar/JarFile.java: read manifest
+ 
+ 2003-02-02  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: add Jikes RVM to list of JVMs; update
+ 	ORP information.
+ 
+ 2003-02-02  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* configure.in: updated VERSION to 0.05-beta1
+ 	* doc/hacking.texinfo: updated with new sections, modifications
+ 
+ 2003-02-01  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/math/BigDecimal(valueOf): fix DiagBigDecimal val008, val013
+ 	tests; see patch #1016 on Savannah.
+ 
+ 2003-02-01  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* Makefile.am: fix copy of external/jaxp to $(distdir)
+ 
+ 2003-02-01  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* external/README: new file
+ 	* external/jaxp: import Classpathx JAXP from January 31, 2003 CVS
+ 	* LICENSE: new file
+ 	* Makefile.am: distribute LICENSE, external/jaxp/source
+ 	* lib/Makefile.am: add external/jaxp/source to classpath; removed
+ 	-target 1.1 from jikes invocation
+ 	* lib/gen-classlist.sh.in: add external/jaxp/source to directories 
+ 	to search
+ 	* doc/api/Makefile.am: add external/jaxp/source to source path
+ 
+ 2003-01-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (static): Use
+ 	INIT_LOAD_LIBRARY.
+ 
+ 2003-01-31  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* java/util/Properties.java (load): Ignore backslash before EOF.
+ 
+ 2003-01-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c:
+ 	Include GdkFontMetrics.h, not GdkGraphics.h.
+ 
+ 2003-01-30  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* java/net/SocketImpl.java (localport): set to -1 by default
+ 	* native/jni/java-net/javanet.h (SOCKOPT_SO_KEEPALIVE): new #define
+ 	* native/jni/java-net/javanet.c (_javanet_set_option): case SO_KEEPALIVE
+ 	(_javanet_get_option): case SO_KEEPALIVE
+ 
+ 2003-01-30  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* native/jni/java-net/javanet.c (_javanet_bind): following gcj's 
+ 	example and setting SO_REUSEADDR before binding the port, testing 
+ 	with JDK seems to indicate it does this as well
+ 	(_javanet_set_option): support SO_REUSEADDR; use JNI_TRUE/JNI_FALSE 
+ 	instead of 1/0 where applicable.  Do not throw exception if setting
+ 	SO_TIMEOUT fails; appears JDK does not throw exception and may be
+ 	using alarm or setitimer (see `man 7 socket' on GNU/Linux)
+ 	(_javanet_get_option): support SO_REUSEADDR; use JNI_TRUE/JNI_FALSE
+ 	instead of 1/0 where applicable
+ 
+ 2003-01-28  Oscar Pearce  <oscar@pearceenterprises.com>
+ 
+ 	* java/awt/Component.java (processPaintEvent): Dispose of Graphics
+ 	object when finished.
+ 
+ 2003-01-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/classpath/Configuration.java.in: Reverted change of
+ 	2003-01-17.
+ 	* java/awt/Toolkit.java: Likewise.
+ 
+ 2003-01-25  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* java/text/CollationElementIterator.java (secondaryOrder): return 
+ 	value is supposed to be a short instead of an int; merged with gcj
+ 	(tertiaryOrder): ditto
+ 	(primaryOrder): merged with gcj
+ 
+ 2003-01-25  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/math/BigDecimal.java (BigDecimal): enhance parsing of exponents
+ 	(toString): do not return Strings starting with . and - erroneously.
+ 	Improves Mauve results to 12 of 600 instead of 16 of 338 on 
+ 	DiagBigDecimal.
+ 
+ 2003-01-25  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* NEWS: note jni.h updates and patches
+ 	* include/jni.h.in (AttachCurrentThreadAsDaemon): new function
+ 
+ 2003-01-25  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* include/jni.h.in (JNI_VERSION_1_4): new define
+ 	(NewDirectByteBuffer): new function
+ 	(GetDirectBufferAddress): new function
+ 	(GetDirectBufferCapacity): new function
+ 	(_JNI_VM_INTERNAL_TYPES_DEFINED): if defined, do not use default
+ 	declarations for jobject, jfieldID, and jmethodID
+ 
+ 2003-01-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectOutputStream.java (writeObject): Rethrow fatal
+ 	ObjectStreamExceptions.
+ 
+ 2003-01-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectOutputStream.java (writeObject): Reformat.
+ 	(annotateClass): Likewise.
+ 	(annotateProxyClass): Likewise.
+ 	(write): Likewise.
+ 	* (callWriteMethod): No longer native.
+ 	* (getBooleanField): Likewise.
+ 	* (getByte): Likewise.
+ 	* (getCharField): Likewise.
+ 	* (getDoubleField): Likewise.
+ 	* (getFloatField): Likewise.
+ 	* (getIntField): Likewise.
+ 	* (getLongField): Likewise.
+ 	* (getShortField): Likewise.
+ 	* (getObjectField): Likewise.
+ 	* native/jni/java-io/java_io_ObjectOutputStream.c: Removed.
+ 	* native/jni/java-io/Makefile.am (libjavaio_la_SOURCES): Remove
+ 	java_io_ObjectOutputStream.c.
+ 
+ 2003-01-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectInputStream.java (ObjectInputStream): Set dump flag
+ 	according to System property.
+ 	(resolveObject): Moved to allign with libgcj version.
+ 	(read): Make sure result is positive.
+ 	(getField): New method.
+ 	(getMethod): Likewise.
+ 	(callReadMethod): No longer native.
+ 	(setBooleanField): Likewise.
+ 	(setByteField): Likewise.
+ 	(setCharField): Likewise.
+ 	(setDoubleField): Likewise.
+ 	(setFloatField): Likewise.
+ 	(setIntField): Likewise.
+ 	(setLongField): Likewise.
+ 	(setShortField): Likewise.
+ 	(setObjectField): Likewise.
+ 	(setDump): Removed.
+ 	* native/jni/java-io/java_io_ObjectInputStream.c (callReadMethod):
+ 	removed.
+ 	(setBooleanField): removed.
+ 	(setByteField): removed.
+ 	(setCharField): Removed.
+ 	(setDoubleField): Removed.
+ 	(setFloatField): Removed.
+ 	(setIntField): Removed.
+ 	(setLongField): Removed.
+ 	(setShortField): Removed.
+ 	(setObjectField): Removed.
+ 	* include/java_io_ObjectInputStream.h: Regenerated.
+ 
+ 2003-01-18  Archie Cobbs <archie@dellroad.org>
+ 
+ 	* gnu/java/io/encode/EncoderUTF8.java (bytesInCharArray): Use offset.
+ 	(convertToBytes): Likewise.
+ 
+ 2003-01-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Toolkit.java (default_toolkit_name): Use AWT_TOOLKIT.
+ 	* gnu/classpath/Configuration.java.in (AWT_TOOLKIT): New
+ 	constant.
+ 
+ 2003-01-17  Mark Wielaard  <mark@klomp.org>
+ 	    Jeroen Frijters  <jeroen@sumatra.nl>
+ 
+ 	* java/net/URLClassLoader.java (Resource.getCodeSource):
+ 	Fix check certs == null.
+ 	(getCanonicalFileURL): Removed method.
+ 	(JarURLLoader): Don't call removed method.
+ 	(FileURLLoader): Likewise.
+ 	(FileURLLoader.getResource): Don't canonicalize file name.
+ 
+ 2003-01-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/ClassLoader.java (normalize): Removed.
+ 	(getResource): Don't call normalize.
+ 	(getResources): Likewise.
+ 
+ 2003-01-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Describe java.io.(VM)ObjectStreamClass.
+ 	* configure.in (AC_OUTPUT): Add vm/reference/java/io/Makefile.
+ 	* include/java_io_VMObjectOutputStream.h: New pregenerated header file.
+ 	* java/io/ObjectStreamClass.java (getClassUID): Call
+ 	VMObjectStreamClass.hasClassInitializer().
+ 	(hasClassInitializer): Removed.
+ 	* native/jni/java-io/Makefile.am (libjavaio_la_SOURCES): Add
+ 	java_io_ObjectStreamClass.c
+ 	* native/jni/java-io/java_io_ObjectStreamClass.c: New file.
+ 	* vm/reference/java/Makefile.am (SUBDIRS): Add io.
+ 	* vm/reference/java/io/.cvsignore: New file.
+ 	* vm/reference/java/io/Makefile.am: New file.
+ 	* vm/reference/java/io/VMObjectStreamClass.java: New class.
+ 
+ 2003-01-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/image/ColorModel.java (ColorModel): Call getNumComponents().
+ 	* java/awt/image/ImageFilter.java (getFilterInstance): Calling clone()
+ 	doesn't throw exception.
+ 
+ 2003-01-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/SocketImpl.java (toString): Don't explicitly call
+ 	toString() on possible null address.
+ 
+ 2003-01-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/MulticastSocket.java
+ 	(setInterface): Merged with libgcj, reindented.
+ 	
+ 2003-01-15  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* java/awt/CardLayout.java (show): Rewrote.
+ 	(gotoComponent): Removed `target' argument.  Simplified code.
+ 	Don't pre-compute `choice' unless `what' is FIRST or LAST.
+ 	Changed all callers.
+ 	(NONE): Removed.
+ 
+ 2003-01-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetSocketAddress.java
+ 	(serialVersionUID): New member variable.
+ 	* java/net/NetPermission.java
+ 	(NetPermission): Dont implement java.io.Serialization directly.
+ 	* java/net/SocketAddress.java:
+ 	(serialVersionUID): Documentation added.
+ 
+ 2003-01-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Label.java
+ 	(Label): Implements javax.accessibility.Accessible;
+ 	* java/awt/List.java
+ 	(List): Implements javax.accessibility.Accessible;
+ 	* java/awt/ScrollPane.java
+ 	(ScrollPane): Implements javax.accessibility.Accessible;
+ 	* java/awt/Scrollbar.java
+ 	(Scrollbar): Implements javax.accessibility.Accessible;
+ 	* java/awt/TextComponent.java
+ 	(setCaretPosition): Throw exception, documentation added.
+ 	* java/awt/Toolkit.java:
+ 	Added some newlines in method documentations.
+ 	(createButton): Exception documentation added.
+ 	(createTextField): Exception documentation added.
+ 	(createLabel): Exception documentation added.
+ 	(createList): Exception documentation added.
+ 	(createCheckbox): Exception documentation added.
+ 	(createScrollbar): Exception documentation added.
+ 	(createScrollPane): Exception documentation added.
+ 	(createTextArea): Exception documentation added.
+ 	(createChoice): Exception documentation added.
+ 	(createFrame): Exception documentation added.
+ 	(createWindow): Exception documentation added.
+ 	(createDialog): Exception documentation added.
+ 	(createMenuBar): Exception documentation added.
+ 	(createMenu): Exception documentation added.
+ 	(createMenuItem): Exception documentation added.
+ 	(createFileDialog): Exception documentation added.
+ 	(createCheckboxMenuItem): Exception documentation added.
+ 	(loadSystemColors): Exception documentation added.
+ 	(setDynamicLayout): Exception documentation added.
+ 	(isDynamicLayoutSet): Exception documentation added.
+ 	(isDynamicLayoutActive): Exception documentation added.
+ 	(getScreenSize): Exception documentation added.
+ 	(getScreenResolution): Exception documentation added.
+ 	(getScreenInsets): Exception documentation added.
+ 	(getColorModel): Exception documentation added.
+ 	(getSystemClipboard): Exception documentation added.
+ 	(getSystemSelection): Exception documentation added.
+ 	(getMenuShortcutKeyMask): Exception documentation added.
+ 	(getSystemEventQueue): Exception documentation added.
+ 	* java/awt/Window.java:
+ 	Reindented some code.
+ 	(Window): Centralized implementation, documentation added.
+ 	(finalize): Documentation added.
+ 	(hide): Fixed typo in comment.
+ 	(getWindowListeners): Documentation added.
+ 	* java/awt/color/ColorSpace.java
+ 	(toRGB): Documentation added.
+ 	* java/awt/color/ICC_ColorSpace.java
+ 	(ICC_ColorSpace): Documentation added.
+ 	(toRGB): Throw exception, documentation added.
+ 	(fromRGB): Throw exception, documentation added.
+ 	(toCIEXYZ): Documentation added.
+ 	(fromCIEXYZ): Documentation added.
+ 	(getMinValue): Documentation added.
+ 	(getMaxValue): Documentation added.
+ 	* java/awt/geom/Dimension2D.java
+ 	(clone): Documentation added.
+ 	* java/awt/geom/GeneralPath.java
+ 	(clone): Documentation added.
+ 	* java/awt/geom/Line2D.java
+ 	(clone): Documentation added.
+ 	* java/awt/geom/QuadCurve2D.java
+ 	(clone): Documentation added.
+ 	* java/awt/image/ColorModel.java
+ 	(ColorModel): Throw exception, documentation added.
+ 	* java/awt/image/ImageFilter.java
+ 	(clone): Doesnt throw CloneNotSupportedException.
+ 
+ 2003-01-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/api/Makefile.am (install-data-local): Avoid error when
+ 	htmllist is empty.
+ 	(uninstall-local): Likewise.
+ 
+ 2003-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/DisplayMode.java
+ 	(equals): Fixed argument type and implementation.
+ 
+ 2003-01-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (static): Fixed indentation.
+ 	(getCallingClassLoader): Likewise.
+ 	(getObject): Likewise.
+ 
+ 2003-01-10:  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* java/net/Socket.java: add missing @since tags, most of patch
+ 	from Sasha Brawer, includes a couple of javadoc typo fixes.
+ 
+ 2003-01-10:  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* mkinstalldirs: updated to automake 1.6
+ 	* missing: ditto
+ 	* install-sh: ditto
+ 	* config.sub: ditto
+ 	* config.guess: ditto 
+ 	* depcomp: ditto
+ 	* doc/texinfo.tex: ditto
+ 	* configure.in: check for headers sys/ioctl.h asm/ioctls.h
+ 	* native/jni/java-net/java_net_PlainSocketImpl.c: include config.h,
+ 	checks for HAVE_SYS_IOCTL_H and HAVE_ASM_IOCTL_H, exclude for _AIX
+ 	asm/ioctls.h, parts of patch from Julian Dolby
+ 
+ 2003-01-10  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* native/fdlibm/fdlibm.h: define _XOPEN_SOURCE for AIX
+ 	* native/fdlibm/ieeefp.h: defines for _POWER as well as __PPC__
+ 
+ 2003-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectOuputStream.java:
+ 	Reformated, no code or documentation changes.
+ 
+ 2003-01-05  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* THANKYOU: fixed Weldon's email reference
+ 
+ 2003-01-05  Julian Dolby  <dolby@us.ibm.com>
+ 	* java/util/ResourceBundle.java (tryBundle): If an exception
+ 	occurs, do not try to use the bundle.
+ 	* (static): initialize static reference to loaded ResourceBundle and
+ 	ResourceBundle$Security
+ 	* (getCallingClassLoader): Use new static references
+ 
+ 2003-01-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Merge with libgcj.
+ 	* java/io/ObjectStreamClass.java (isProxyClass): Now a field.
+ 	(setClass): Throws InvalidClassException.
+ 	(setSuperclass): Use getClassUID if not a proxy Class.
+ 	(setFields): Make sure to call setAccessible(true).
+ 	(setUID): Renamed to...
+ 	(getClassUID): Return the uid. Call setAccessible(true) for field.
+ 	Fall back to Gnu provider SHA algorithm if necessary.
+ 	(getDefinedSUID): Removed method.
+ 	(hasClassInitializer): Don't throw NoSuchMethodError.
+ 	(static): Removed.
+ 	* java/io/ObjectOutputStream.java (writeObject): Use isProxyClass.
+ 
+ 2003-01-03  Dhek Bhun Kho  <bhun@chello.nl>
+ 
+ 	* gnu/java/rmi/server/UnicastServerRef.java (unexportObject):
+ 	Don't throw RemoteException.
+ 	* java/rmi/server/UnicastRemoteObject.java (unexportObject): Don't
+ 	throw RemoteException.
+ 
+ 2003-01-02  Artur Biesiadowski  <abies@pg.gda.pl>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/ZipFile.java (entries): Now HashMap.
+ 	(readLeShort(DataInput, byte[])): Read from given byte array.
+ 	(readLeInt(DataInput, byte[]): Likewise.
+ 	(readLeShort(byte[] b, int off)): New method.
+ 	(readLeInt(byte[] b, int off)): Likewise.
+ 	(readEntries): Use byte arrays to read info in bigger chunks.
+ 	(getEntries): Return HashMap.
+ 	(getEntry): Use HashMap.
+ 	(locBuf): New private field.
+ 	(checkLocalHeader): Use locBuf to read info in one chunk.
+ 	(getInputStream): Use entries HashMap, wrap PartialInputStream
+ 	in BufferedInputStream.
+ 	(ZipEntryEnumeration): Use HashMap and Interator.
+ 
+ 2003-01-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Transparency.java: Don't mark fields as static or
+ 	final.
+ 	* java/awt/Scrollbar.java: Typo fix.
+ 	* java/awt/BasicStroke.java: Typo fixes.
+ 	* java/awt/Adjustable.java: Don't mark fields as static or final.
+ 
+ 2002-12-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/logging/LogManager.java (readConfiguration): Remove
+ 	extra `lib'.
+ 	* javax/naming/InitialContext.java (init): Remove extra `lib'.
+ 
+ 	* javax/naming/InitialContext.java (init): Use
+ 	gnu.classpath.home.url.
+ 	* java/util/logging/LogManager.java (readConfiguration): Use
+ 	gnu.classpath.home.url.
+ 	* java/security/Security.java: Use new properties.
+ 	(loadProviders): Accept base url; use it.
+ 	* java/lang/System.java: Document gnu.classpath.vm.shortname, and
+ 	gnu.classpath.home.url.
+ 	(gnu.classpath.home.url): Define.
+ 	(gnu.classpath.vm.shortname): Likewise.
+ 
+ 2002-12-28  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java (parseURL): Make sure that
+ 	host != null.
+ 
+ 2002-12-27  Daryl Lee <dolee@sources.redhat.com>
+ 
+ 	* java/io/RandomAccessFile.java: corrected skipBytes() to stop at EOF
+ 
+ 2002-12-25  Daryl Lee <dolee@sources.redhat.com>
+ 
+ 	* java/io/PipedOutputStream.java: corrected connect(); test to check if
+ 	already connected was invalid.
+ 
+ 2002-12-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Properties.java (formatForOutput): Don't fall 
+ 	through to default case after escaping character.
+ 
+ 2002-12-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLStreamHandler.java (toExternalForm): Ignore port
+ 	if zero or smaller.
+ 
+ 2002-12-24  Daryl Lee <dolee@sources.redhat.com>
+ 
+ 	* java/io/PipedWriter.java: corrected connect(); test to check if
+ 	already connected was invalid.
+ 
+ 2002-12-24  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* INSTALL: updated link to bugs, tool version numbers
+ 	* TODO: removed easy HTML API generation todo item, it's done now;
+ 	mention that CNI code won't be included in Classpath CVS for now
+ 	since only gcj is using it
+ 	* README: remove special mention of ORP
+ 	* NEWS: add blurb about infrastructure improvements
+ 	* HACKING: update automake, autoconf version numbers; remove
+ 	mention of gcjh for compiling JNI libraries; updated gcj/jikes
+ 	version numbers
+ 	* lib/Makefile.am: distribute glibj.zip; uninstall no-zip case; 
+ 	separate resources target; avoid extra gen-classlist.sh calls; 
+ 	support DESTDIR
+ 	* doc/api/Makefile.am: distribute HTML API documentation; install
+ 	documentation in pkgdatadir/api; uninstall appropriately; support
+ 	DESTDIR
+ 	* resource/gnu/java/awt/peer/gtk/Makefile.am: add uninstall-local
+ 	target; support DESTDIR
+ 	* resource/java/security/Makefile.am: add uninstall-local target;
+ 	support DESTDIR
+ 	* javax/swing/Makefile.am: BoundedRangeModel missing .java extension
+ 	* javax/transaction/xa/Makefile.am: Removed xa/ from filenames
+ 	* java/awt/dnd/Makefile.am: added missing .java files to dist
+ 	* java/net/Makefile.am: added missing .java files to dist
+ 	* java/nio/channels/Makefile.am: added missing .java files to dist
+ 	* javax/naming/Makefile.am: added missing .java files to dist
+ 	* javax/naming/directory/Makefile.am: added missing .java files to dist
+ 	* javax/naming/event/Makefile.am: new file
+ 	* javax/naming/event/.cvsignore: new file
+ 	* javax/naming/ldap/Makefile.am: new file
+ 	* javax/naming/ldap/.cvsignore: new file
+ 	* javax/naming/spi/Makefile.am: added missing .java files to dist
+ 	* javax/sql/Makefile.am: added missing .java files to dist
+ 	* javax/sql/.cvsignore: new file
+ 	* javax/swing/plaf/Makefile.am: added missing .java files to dist
+ 	* javax/swing/Makefile.am: added missing .java files to dist
+ 	* Makefile.am: ignore errors during dist-hook
+ 	* configure.in: add missing directory Makefiles to output; add
+ 	check for 'date', 'cp', and 'mkdir'
+ 	* acinclude.m4: remove check for 'find' and 'cp'
+ 
+ 2002-12-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Adjustable.java
+ 	(HORIZONTAL): Made static final.
+ 	(VERTICAL): Made static final.
+ 	(NO_ORITENTATION): Made static final.
+ 	* java/awt/AlphaComposite.java
+ 	(getInstance): Documentation added.
+ 	* java/awt/BasicStroke.java
+ 	(BasicStroke): Documentation added, reformated code.
+ 	* java/awt/CheckboxMenuItem.java
+ 	(CheckboxMenuItem): Throw HeadlessException,
+ 	added exception documentation.
+ 	* java/awt/Choice.java
+ 	(Choice): Throw exception, added documentation.
+ 	(add): Throw NullPointerException instead of IllegalArgumentException,
+ 	added some documentation.
+ 	(addItem): Added some documentation.
+ 	(insert): Throw exception, added documentation.
+ 	* java/awt/Container.java:
+ 	Made some documentation looking better.
+ 	(getListeners): Added documentation.
+ 	(setFocusTraversalKeys): Throw exception.
+ 	(getFocusTraversalKeys): Throw exception.
+ 	(areFocusTraversalKeys): Throw exception.
+ 	* java/awt/Cursor.java
+ 	(Cursor): Added documentation.
+ 	(getSystemCustomCursor): Throw exception, added documentation.
+ 	* java/awt/EventQueue.java
+ 	(postEvent): Added documentation.
+ 	(invodeAndWait): Added documentation.
+ 	(push): Added documentation.
+ 	(pop): Added documentation.
+ 	(dispatchEvent): Added documentation.
+ 	* java/awt/FileDialog.java
+ 	(FileDialog): Call setMode() instead of code duplication,
+ 	added documentation.
+ 	(setMode): Added documentation.
+ 	* java/awt/Label.java
+ 	(Label): Throw exception, added documentation.
+ 	* java/awt/List.java
+ 	(List): Throw exception, added documentation.
+ 	* java/awt/Menu.java
+ 	(Menu): Throw exception, added documentation.
+ 	* java/awt/MenuBar.java
+ 	(MenuBar): Throw exception, added documentation.
+ 	* java/awt/MenuComponent.java
+ 	(MenuComponent): Throw exception, added documentation.
+ 	* java/awt/PopupMenu.java
+ 	(PopupMenu): Throw exception, added documentation.
+ 	* java/awt/ScrollPane.java
+ 	(ScrollPane): Throw exception, added documentation.
+ 	* java/awt/Scrollbar.java
+ 	(Scrollbar): Throw exception, added documentation.
+ 	* java/awt/TextArea.java
+ 	(TextArea): Throw exception, added documentation.
+ 	* java/awt/TextField.java
+ 	(TextField): Throw exception, added documentation.
+ 	* java/awt/Transparency.java
+ 	(OPAQUE): Made static final.
+ 	(BITMASK): Made static final.
+ 	(TRANSLUCENT): Made static final.
+ 	* java/awt/color/CMMException.java:
+ 	(CMMException): Extends RuntimeException not Exception.
+ 	* java/awt/color/ColorSpace.java
+ 	(ColorSpace): Implements Serializable.
+ 	* java/awt/color/ICC_Profile.java
+ 	(write): Throws IOException.
+ 	* java/awt/color/ProfileDataException.java
+ 	(ProfileDataException): Extends RuntimeException not Exception.
+ 	* java/awt/datatransfer/Clipboard.java
+ 	(getContents): Added documentation.
+ 	(setContents): Added documentation.
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(DataFlavor): Added documentation.
+ 	(isMimeTypeEqual): Added documentation.
+ 	(clone): Added documentation.
+ 	(readExternal): Added documentation.
+ 	(writeExternal): Added documentation.
+ 	* java/awt/datatransfer/SystemDataFlavor.java:
+ 	Reintented, Reformated.	
+ 	(SystemDataFlavor): Added implements FlavorTable.
+ 	(getFalvorsForNative): New stubbed method.
+ 	(getNativesForFlavor): New stubbed method.
+ 	* java/awt/dnd/DragGestureEvent.java
+ 	(startDrag): Added documentation.
+ 	* java/awt/dnd/DragGestureRecognizer.java
+ 	(addDragGestureListener): Added documentation.
+ 	* java/awt/dnd/DragSource.java
+ 	(DragSource): Throw exception, documentation added.
+ 	(getDefaultDragSource): Added documentation.
+ 	(startDrag): Added documentation.
+ 	(createDragSourceContext): Added documentation.
+ 	* java/awt/dnd/DropTarget.java
+ 	(DropTarget): Implements DropTargetListener, EventListener,
+ 	Serializable.
+ 	(isActive): New member variable to save state.
+ 	(setActive): Implemented.
+ 	(isActive): Implemented.
+ 	* java/awt/geom/PathIterator.java:
+ 	Fixed two documentations to be HTML conform.
+ 	
+ 2002-12-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/server/RMIClassLoaderSpi.java:
+ 	New abstract class.
+ 
+ 2002-12-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/reflect/Proxy.java
+ 	(h): This member was never final in any jdk release.
+ 	* java/awt/Graphics2D.java
+ 	(drawImage): Fixed Arguments.
+ 	* java/awt/event/WindowEvent.java
+ 	(WINDOW_LAST): Constant value must be 209, not 207.
+ 	* java/awt/im/InputMethodHighlight.java
+ 	(getStyle): Fixed typo.
+ 	
+ 2002-12-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLClassLoader.java (getCanonicalFileURL): Make sure that
+ 	if the original file part of the URL ended with a separator that the
+ 	canonical version also ends with a separator.
+ 
+ 2002-12-21  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/TreeMap.java (fabricateTree): Fix off-by-one error.
+ 	(TreeIterator.remove): Prefer IllegalStateException over
+ 	ConcurrentModificationException, to match Sun.
+ 
+ 2002-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/FileChannel.java
+ 	(force): Added throws IOException.
+ 
+ 2002-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URI.java
+ 	(create): Doesnt throw URISyntaxException.
+ 	* java/net/URLConnection.java
+ 	(guessContentTypeFromName): Made public.
+ 	* java/nio/MappedByteBuffer.java
+ 	(MappedByteBuffer): added @author and @since.
+ 	
+ 2002-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/SocketPermission.java:
+ 	Reindented.
+ 	* java/net/URLDecoder.java
+ 	(decode): Added throws IOException.
+ 	* java/nio/channels/FileLock.java
+ 	(release): Added throws IOException.
+ 	
+ 2002-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/HttpURLConnection.java
+ 	(HTTP_NOT_IMPLEMENTED): Must be public.
+ 	* java/net/ServerSocket.java
+ 	(closed): New member variable.
+ 	(bind): Throw exception if socket is closed.
+ 	(close): Set new member variable, close associated channel too.
+ 	(isClosed): New method.
+ 	* java/net/Socket.java
+ 	(closed): New member variable.
+ 	(bind): Throw exception if socket is closed.
+ 	(connect): Throw exception if socket is closed.
+ 	(close): Set new member variable, close associated channel too.
+ 	(isClosed): New method.
+ 	* java/nio/channels/DatagramChannel.java
+ 	(connect): Added throws IOException.
+ 	(disconnect): Added throws IOException.
+ 	(read): Added throws IOException.
+ 	(write): Added throws IOException.
+ 	(receive): Added throws IOException.
+ 	* java/nio/channels/Pipe.java
+ 	(open): Added throws IOException.
+ 	* java/nio/channels/SelectableChannel.java
+ 	(configureBlocking): Added throws IOException.
+ 	* java/nio/channels/SelectionKey.java
+ 	(OP_ACCEPT): Fix constant value.
+ 	(OP_CONNECT): Fix constant value.
+ 	(OP_READ): Fix constant value.
+ 	(OP_WRITE): Fix constant value.
+ 	* java/nio/channels/ServerSocketChannel.java
+ 	(accept): Added throws IOException.
+ 	* java/nio/channels/SocketChannel.java
+ 	(SocketChannel): Fixed implements.
+ 	(read): Added throws IOException.
+ 	(write): Added throws IOException.
+ 	(finishConnect): Added throws IOException.
+ 	* java/nio/channels/spi/AbstractInterruptibleChannel.java
+ 	(end): Added throws AsynchronousCloseException.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(configureBlocking): Added throws IOException.
+ 	(implCloseChannel): Added throws IOException.
+ 	(implCloseSelectableChannel): Added throws IOException.
+ 	(implConfigureBlocking): Added throws IOException.
+ 	* java/nio/channels/spi/SelectorProvider.java
+ 	(openDatagramChannel): Added throws IOException.
+ 	(openPipe): Added throws IOException.
+ 	(openSelector): Added throws IOException.
+ 	(openServerSocketChannel): Added throws IOException.
+ 	(openSocketChannel): Added throws IOException.
+ 	(provider): Merge with libgcj.
+ 
+ 2002-12-20  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* BUGS: updated Savannah URL
+ 	* doc/api: new directory
+ 	* doc/api/.cvsignore: new file
+ 	* doc/api/classpath-copyright.xml: new directory
+ 	* doc/api/Makefile.am: new file
+ 	* configure.in: added doc/api/Makefile to output, include
+ 	CLASSPATH_ENABLE_GJDOC
+ 	* acinclude.m4: added function CLASSPATH_ENABLE_GJDOC
+ 	* doc/Makefile.am: added api to SUBDIRS
+ 	* doc/xslt: new directory
+ 	* doc/xslt/gjdocxml2html.xsl: new file
+ 	* doc/xslt/common: new directory
+ 	* doc/xslt/common/gjdochtml.css: new file
+ 	* doc/xslt/common/images: new directory
+ 	* doc/xslt/common/images/tree-branch.png: new file
+ 	* doc/xslt/common/images/tree-empty.png: new file
+ 	* doc/xslt/common/images/tree-final-node.png: new file
+ 	* doc/xslt/common/images/tree-node.png: new file
+ 
+ 2002-12-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(read): New method.
+ 	(write): New method.
+ 
+ 2002-12-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/CharBufferImpl.java
+ 	gnu/java/nio/DoubleBufferImpl.java
+ 	gnu/java/nio/FileChannelImpl.java
+ 	gnu/java/nio/FloatBufferImpl.java
+ 	gnu/java/nio/IntBufferImpl.java
+ 	gnu/java/nio/LongBufferImpl.java
+ 	gnu/java/nio/ShortBufferImpl.java:
+ 	(nio_cast): Removed.
+ 	(*BufferImpl): Removed.
+ 	(nio_get_*): Removed.
+ 	(get_put_*): Removed.
+ 	(as*Buffer): Removed.
+ 
+ 2002-12-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java:
+ 	Implements Comparable.
+ 	(get): Must not be final.
+ 	(put): Must not be final.
+ 	* java/nio/CharBuffer.java:
+ 	Implements Comparable.
+ 	(get): Must not be final.
+ 	(put): Must not be final.
+ 	* java/nio/DoubleBuffer.java:
+ 	Implements Comparable.
+ 	(get): Must not be final.
+ 	(put): Must not be final.
+ 	(order): Must not be final.
+ 	(asShortBuffer): Removed.
+ 	(asCharBuffer): Removed.
+ 	(asIntBuffer): Removed.
+ 	(asLongBuffer): Removed.
+ 	(asFloatBuffer): Removed.
+ 	(asDoubleBuffer): Removed.
+ 	(getChar): Removed.
+ 	(putChar): Removed.
+ 	(getShort): Removed.
+ 	(putShort): Removed.
+ 	(getInt): Removed.
+ 	(putInt): Removed.
+ 	(getLong): Removed.
+ 	(putLong): Removed.
+ 	(getFloat): Removed.
+ 	(putFloat): Removed.
+ 	(getDouble): Removed.
+ 	(putDouble): Removed.
+ 	* java/nio/FloatBuffer.java:
+ 	Implements Comparable.
+ 	(get): Must not be final.
+ 	(put): Must not be final.
+ 	(order): Must not be final.
+ 	(asShortBuffer): Removed.
+ 	(asCharBuffer): Removed.
+ 	(asIntBuffer): Removed.
+ 	(asLongBuffer): Removed.
+ 	(asFloatBuffer): Removed.
+ 	(asDoubleBuffer): Removed.
+ 	(getChar): Removed.
+ 	(putChar): Removed.
+ 	(getShort): Removed.
+ 	(putShort): Removed.
+ 	(getInt): Removed.
+ 	(putInt): Removed.
+ 	(getLong): Removed.
+ 	(putLong): Removed.
+ 	(getFloat): Removed.
+ 	(putFloat): Removed.
+ 	(getDouble): Removed.
+ 	(putDouble): Removed.
+ 	* java/nio/IntBuffer.java:
+ 	Implements Comparable.
+ 	(get): Must not be final.
+ 	(put): Must not be final.
+ 	(order): Must not be final.
+ 	(asShortBuffer): Removed.
+ 	(asCharBuffer): Removed.
+ 	(asIntBuffer): Removed.
+ 	(asLongBuffer): Removed.
+ 	(asFloatBuffer): Removed.
+ 	(asDoubleBuffer): Removed.
+ 	(getChar): Removed.
+ 	(putChar): Removed.
+ 	(getShort): Removed.
+ 	(putShort): Removed.
+ 	(getInt): Removed.
+ 	(putInt): Removed.
+ 	(getLong): Removed.
+ 	(putLong): Removed.
+ 	(getFloat): Removed.
+ 	(putFloat): Removed.
+ 	(getDouble): Removed.
+ 	(putDouble): Removed.
+ 	* java/nio/LongBuffer.java:
+ 	Implements Comparable.
+ 	(get): Must not be final.
+ 	(put): Must not be final.
+ 	(order): Must not be final.
+ 	(asShortBuffer): Removed.
+ 	(asCharBuffer): Removed.
+ 	(asIntBuffer): Removed.
+ 	(asLongBuffer): Removed.
+ 	(asFloatBuffer): Removed.
+ 	(asDoubleBuffer): Removed.
+ 	(getChar): Removed.
+ 	(putChar): Removed.
+ 	(getShort): Removed.
+ 	(putShort): Removed.
+ 	(getInt): Removed.
+ 	(putInt): Removed.
+ 	(getLong): Removed.
+ 	(putLong): Removed.
+ 	(getFloat): Removed.
+ 	(putFloat): Removed.
+ 	(getDouble): Removed.
+ 	(putDouble): Removed.
+ 	* java/nio/ShortBuffer.java:
+ 	Implements Comparable.
+ 	(get): Must not be final.
+ 	(put): Must not be final.
+ 	(order): Must not be final.
+ 	(asShortBuffer): Removed.
+ 	(asCharBuffer): Removed.
+ 	(asIntBuffer): Removed.
+ 	(asLongBuffer): Removed.
+ 	(asFloatBuffer): Removed.
+ 	(asDoubleBuffer): Removed.
+ 	(getChar): Removed.
+ 	(putChar): Removed.
+ 	(getShort): Removed.
+ 	(putShort): Removed.
+ 	(getInt): Removed.
+ 	(putInt): Removed.
+ 	(getLong): Removed.
+ 	(putLong): Removed.
+ 	(getFloat): Removed.
+ 	(putFloat): Removed.
+ 	(getDouble): Removed.
+ 	(putDouble): Removed.
+ 	
+ 2002-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(remoteAddress): Renamed from remote_addr.
+ 	(remotePort): Renamed from remote_port.
+ 	(getSoTimeout): Throw exception
+ 	if not initialized socket successfully.
+ 	(getSendBufferSize): Throw exception
+ 	if not initialized socket successfully.
+ 	(getReceiveBufferSize): Throw exception
+ 	if not initialized socket successfully.
+ 	(receive): Added SecurityManager check.
+ 	
+ 2002-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(factory): New member to store default DatagramSocketFactory object.
+ 	(bind): New method.
+ 	(getChannel): New method.
+ 	(connect): New method.
+ 	(isBound): New method.
+ 	(isConnected): New method.
+ 	(getRemoteSocketAddress): New method.
+ 	(getLocalSocketAddress): New method.
+ 	(setReuseAddress): New method.
+ 	(getReuseAddress): New method.
+ 	(setBroadcast): New method.
+ 	(getBroadcast): New method.
+ 	(setTrafficClass): New method.
+ 	(getTrafficClass): New method.
+ 	(setDatagramSocketImplFactory): New method.
+ 	* java/net/HttpURLConnection.java
+ 	(HTTP_INTERNAL_ERROR): Code number is 500, not 501.
+ 	* java/net/ServerSocket.java
+ 	(bind): Simply call sister method instead of implementing
+ 	it a second time.
+ 	
+ 2002-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(ch): New member variable to store associated datagram channel.
+ 	(DatagramSocket): Added/fixed documentation.
+ 	(close): Fixed documentation.
+ 	(getPort): Fixed documentation.
+ 	(getLocalAddress): Fixed documentation.
+ 	(getLocalPort): Fixed documentation.
+ 	(getSoTimeout): Fixed documentation, remove unneeded parenthesis.
+ 	(setSendBufferSize): Added exception documentation.
+ 	(setReceiveBufferSize): Added exception documentation.
+ 	(send): Added/fixed documentation.
+ 	* java/net/MulticastSocket.java
+ 	(setInterface): Moved around, fixed documentation.
+ 	(setLoopbackMode): New method.
+ 	(getLoopbackMode): New method.
+ 	
+ 2002-12-18  John Leuner  <jewel@debian.org>
+ 
+ 	* java/lang/System.java: delegated native calls to VMSystem
+ 	added three new calls VMSystem.makeStandardxxxStream
+ 	* vm/reference/java/lang/VMSystem.java: added 3 methods for default 
+ 	implementation of makeStandardxxxStream
+ 	* native/jni/java-lang/Makefile.am (libjavalang_la_SOURCES): changed System to VMSystem
+ 	* native/jni/java-lang/java_lang_VMSystem.c: Added this file (copied from System.c)
+ 	* native/jni/java-lang/java_lang_System.c:   Deleted this file
+ 	* include/java_lang_VMSystem.h: Added this file
+ 	* include/java_lang_System.h: Deleted this file
+ 
+ 2002-12-18  John Leuner  <jewel@debian.org>
+ 
+ 	* vm/reference/java/lang/reflect/Method.java: Fixed javadoc
+ 	* vm/reference/java/lang/VMClassLoader.java: copied code from ClassLoader
+ 	for getSystemClassLoader
+ 	* java/lang/ClassLoader.java: Delegate getSystemClassLoader
+ 	to VMClassLoader
+ 
+ 2002-12-17  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/docs/license.wml: link->createlink conversion.
+ 	* doc/www.gnu.org/docs/orp.wml: link->createlink conversion.
+ 	* doc/www.gnu.org/docs/redistribution.wml: link->createlink conversion.
+ 	* doc/www.gnu.org/docs/docs.wml: fix link to hacking doc, 
+ 	link->createlink conversion.
+ 	* doc/www.gnu.org/announce/19990206.wml: link->createlink conversion.
+ 	* doc/www.gnu.org/announce/20001120.wml: link->createlink conversion.
+ 	* doc/www.gnu.org/announce/20010106.wml: link->createlink conversion.
+ 	* doc/www.gnu.org/announce/20020208.wml: link->createlink conversion.
+ 	* doc/www.gnu.org/announce/announcements.wml: link->createlink 
+ 	conversion.
+ 	* doc/www.gnu.org/savannah.css: new file
+ 	* doc/www.gnu.org/include/macros.wml: rename 'link' tag 'createlink'
+ 	* doc/www.gnu.org/home.wml: link to cp-tools sub-project, 
+ 	link->createlink conversion.
+ 	* doc/www.gnu.org/Makefile: copy *.css to webroot when publishing
+ 
+ 2002-12-17  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/LogManager.java: Fix a dependency on the order
+ 	in which the JVM chooses to initialize the mutually dependent
+ 	classes java.util.logging.LogManager and java.util.logging.Logger.
+ 	Thanks to Sergio Freire <sergio-s-freire@ptinovacao.pt> for reporting
+ 	the bug which would only occur on GCJ 3.2, not on the Sun 1.3.1 JVM.
+ 
+ 2002-12-17  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: link to docs directory
+ 	* doc/www.gnu.org/docs/docs.wml: new file
+ 	* doc/www.gnu.org/docs/redistribution.wml: new file
+ 	* doc/www.gnu.org/docs/license.wml: new file
+ 
+ 2002-12-15  Raif Naffah  <raif@fl.net.au>
+ 
+ 	* java/math/BigInteger.java (euclidInv): Make sure quot and rem are in
+ 	canonical form after divide().
+ 	(modInverse): Likewise.
+ 
+ 2002-12-13  Casey Marshall  <rsdio@metastatic.org>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/security/SecurityRandom (digest): Removed field.
+ 	(SecureRandom): Check all providers for case-insensitive SecureRandom
+ 	implementation. Don't ignore classname == null. Fallback to SHA1PRNG
+ 	if necessary.
+ 	(getInstance(String,Provider,boolean): New method.
+ 	(getInstance(String)): Use new method.
+ 	(getInstance(String,String)): Likewise.
+ 	(getInstance(String,Provider)): Likewise.
+ 
+ 2002-12-13  Casey Marshall  <rsdio@metastatic.org>
+ 
+ 	* java/security/Security.java (loadProviders): Increment i only once.
+ 
+ 2002-12-12  Archie Cobbs <archie@dellroad.org>
+ 
+ 	* java/io/LineNumberReader.java: Don't use PushbackReader.
+ 
+ 2002-12-12  C. Brian Jones  <cbj@gnu.org>
+ 	* doc/www.gnu.org/doc: moved to doc/www.gnu.org/docs
+ 	* doc/www.gnu.org/docs: new directory
+ 	* doc/www.gnu.org/Makefile: SUBDIRS reflect new docs directory, copy
+ 	texi2html output to the correct directory
+ 	* doc/www.gnu.org/docs/Makefile: publish to docs directory
+ 	* doc/www.gnu.org/home.wml: point doc URLs to docs
+ 
+ 2002-12-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (defineClass): Now synchronized.
+ 	(findLoadedClass): Likewise.
+ 
+ 2002-12-10  Mark Wielaard  <mark@klomp.org>
+ 	    Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java (getCanonicalFileURL): New method.
+ 	(JarURLLoader): Use it.
+ 	(FileURLLoader): Likewise.
+ 	(JarURLResource.getURL): Use chained exception.
+ 	(FileResource.getURL): Likewise.
+ 	(FileURLLoader.getResource): Use canonical file name.
+ 	(addURL): Indentation fix.
+ 
+ 2002-12-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLClassLoader.java: Reindent and other formatting fixes.
+ 
+ 2002-12-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/ResourceBundle.java (resourceBundleCache): Not final.
+ 	(lastDefaultLocale): New field.
+ 	(getBundle): When Locale.getDefault != lastDefaultLocale reset
+ 	resourceBundleCache.
+ 
+ 2002-12-05  Dalibor Topic  <robilad@yahoo.com>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java: Removed unused import.
+ 
+ 2002-12-05  John Leuner  <jewel@debian.org>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java (toExternalForm): make URL
+ 	format like that produced by SUN JVM
+ 	* java/net/URLStreamHandler.java: ditto
+ 
+ 2002-12-03  Jeroen Frijters  <jeroen@sumatra.nl>
+ 
+ 	* gnu/java/lang/SystemClassLoader.java (getResource): Renamed to
+ 	findResource and made protected.
+ 	(findResource): New protected method renamed from getResource.
+ 	(systemGetResource): Renamed to systemFindResource and made private.
+ 	(systemFindResource): New private methods renamed from
+ 	systemGetResource.
+ 
+ 	* THANKYOU: Added Jeroen.
+ 
+ 2002-12-03  Raif Naffah  <raif@fl.net.au>
+ 
+ 	* java/security/spec/DSAParameterSpec.java (getP): Return p, not q.
+ 	* java/security/spec/DSAPrivateKeySpec.java (getP): Likewise.
+ 	* java/security/spec/DSAPublicKeySpec.java (getP): Likewise.
+ 
+ 2002-12-01  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* java/text/CollationElementIterator.java (next): 
+ 
+ 2002-12-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/SocketPermission.java (hashCode): Rewrote.
+ 
+ 2002-12-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java:
+ 	Use native methods instead of dummy methods.
+ 	* java/nio/channels/DatagramChannel.java
+ 	(connect): Added exception documentation.
+ 	(receive): Added exception documentation.
+ 	(send): Added exception documentation.
+ 	* java/nio/channels/SocketChannel.java
+ 	(open): Added exception documentation.
+ 	(read): Added exception documentation.
+ 	(write): Added exception documentation.
+ 	(connect): Added exception documentation.
+ 	(finishConnect): Added exception documentation.
+ 	
+ 2002-12-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java
+ 	Reformated.
+ 	* gnu/java/nio/CharBufferImpl.java
+ 	Reformated.
+ 	* gnu/java/nio/DoubleBufferImpl.java
+ 	Reformated.
+ 	* gnu/java/nio/FloatBufferImpl.java
+ 	Reformated.
+ 	* gnu/java/nio/IntBufferImpl.java
+ 	Reformated.
+ 	* gnu/java/nio/LongBufferImpl.java
+ 	Reformated.
+ 	* gnu/java/nio/ShortBufferImpl.java
+ 	Reformated.
+ 	
+ 2002-12-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/classpath/native_state.c (add_node): Never create a
+ 	loop in the linked list.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (native_state): Use
+ 	GtkGenericPeer.getUniqueInteger.
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java (native_state): Use
+ 	GtkGenericPeer.getUniqueInteger.
+ 	* gnu/java/awt/peer/gtk/GtkGenericPeer.java (getUniqueInteger): No
+ 	longer private.
+ 
+ 2002-12-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-net/java_net_InetAddress.c (getHostByName):
+ 	JCL_ThrowException takes hostname, not host.
+ 	* native/jni/java-net/javanet.c (_javanet_set_remhost_addr): New
+ 	method.
+ 	(_javanet_set_remhost): Use new method.
+ 	(_javanet_connect): Likewise.
+ 	* java/net/InetAddress.java (toString): Include hostname or alias if
+ 	known, but don't lookup.
+ 	* java/net/Socket.java (setSocketImplFactory): Throw SocketException
+ 	when fac == null.
+ 
+ 2002-12-01  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* native/jni/java-net/java_net_PlainSocketImpl.c (available):
+ 	Implement.
+ 
+ 2002-12-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Bug compatibility:
+ 	* java/io/CharArrayWriter.java (close): Do nothing.
+ 	(flush): Likewise.
+ 	(reset): Don't touch `closed'.
+ 	(write(int)): Don't throw IOException.
+ 	(write(char[],int,int)): Likewise.
+ 	(write(String,int,int)): Likewise.
+ 	(closed): Removed.
+ 
+ 2002-11-29  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* java/awt/image/ColorModel.java (getUnnormalizedComponents,
+ 	getNormalizedComponents): Fix calculation which was using one too
+ 	many bits in the unnormalized format.
+ 
+ 2002-11-29  Gary Benson  <gbenson@redhat.com>
+ 
+ 	* java/beans/Introspector.java (flushCaches): New method.
+ 	(flushFromCaches): Likewise.
+ 
+ 2002-11-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/InetAddress.java (toString): Convert signed byte to
+ 	unsigned int.
+ 
+ 2002-11-29  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* native/jni/java-net/java_net_InetAddress.c (getHostByName):
+ 	FindClass "[B", not "[I".
+ 
+ 2002-11-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Merge patches from Julian Dolby <dolby@us.ibm.com>
+ 	* java/io/File.java (File(File, String)): Only add separator when
+ 	dirpath is not a root dir.
+ 	(File(String, String)): Call this(File, String).
+ 	(File(String)): Remove all trailing separators when not root dir.
+ 	(canWrite): Return null when no separator is found in path.
+ 	If a directory then check that we can create and delete temp file.
+ 	(list): Return null when file not exists or is not a dir.
+ 	Return empty array when listInternal returns null.
+ 	* java/io/FileInputStream.java(open): Throws FileNotFoundException.
+ 	* java/io/FileOutputStream.java (FileOutputStream): Likewise.
+ 	(open): Likewise.
+ 	* native/jni/java-io/java_io_FileOutputStream.c (open): Likewise.
+ 	* native/jni/java-io/javaio.c (_javaio_close): Check that fd != -1.
+ 
+ 	* THANKYOU: Add Julian Dolby.
+ 
+ 2002-11-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/JarFile.java (manifest): Not final.
+ 	(manifestRead): New field.
+ 	(JarFile): Don't read Manifest in constructor.
+ 	(getManifest): New method.
+ 	(JarEnumeration.nextElement): Use new method.
+ 	(getEntry): Likewise.
+ 	* java/util/zip/ZipFile.java (name): Final.
+ 	(raf): Likewsie.
+ 	(entries): Change type to Hashtable.
+ 	(closed): New field.
+ 	(ZipFile): Don't read enties in constructor.
+ 	(readEntries): Use Hashtable.
+ 	(close): Set new close flag and set entries to null inside
+ 	synchronized block.
+ 	(entries): Contruct enumeration using new getEntries() method and
+ 	entries Hashtable.
+ 	(getEntryIndex): Removed.
+ 	(getEntries): New method.
+ 	(getEntry): Use new getEntries() method and entries Hastable.
+ 	(getInputStream): Likewise.
+ 	(size): Return getEntries().size().
+ 	(ZipEntryEnumeration): Wrap entries Hashtable elements.
+ 	* java/util/zip/ZipEntry.java (cal): Don't initialize.
+ 	(time): Removed
+ 	(dostime): New field.
+ 	(zipFileIndex): Removed.
+ 	(ZipEntry(ZipEntry)): Copy dostime.
+ 	(setDOSTime): Now final and doesn't convert dos time.
+ 	(getDOSTime): Likewise.
+ 	(setTime): Convert dos time.
+ 	(getTime): Likewise.
+ 	(getCalendar): New method.
+ 	(setExtra): Use setTime().
+ 	* java/util/zip/ZipInputStream.java (getNextEntry): Format error msg.
+ 
+ 2002-11-27  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* java/util/Locale.java (toString): Improve efficiency if country
+ 	and variant are both empty.
+ 
+ 2002-11-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/io/encode/EncoderUTF8.java (convertToBytes): Removed
+ 	redundant test.
+ 
+ 2002-11-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/transaction/HeuristicCommitException.java: New file from gcj,
+ 	* javax/transaction/HeuristicMixedException.java: Likewise.
+ 	* javax/transaction/HeuristicRollbackException.java: Likewise.
+ 	* javax/transaction/NotSupportedException.java: Likewise.
+ 	* javax/transaction/RollbackException.java: Likewise.
+ 	* javax/transaction/Status.java: Likewise.
+ 	* javax/transaction/Synchronization.java: Likewise.
+ 	* javax/transaction/SystemException.java: Likewise.
+ 	* javax/transaction/Transaction.java: Likewise.
+ 	* javax/transaction/TransactionManager.java: Likewise.
+ 	* javax/transaction/UserTransaction.java: Likewise.
+ 
+ 	* javax/transaction/Makefile.am (SUBDIRS): Add transaction.
+ 	* javax/transaction/Makefile: New file.
+ 	* javax/transaction/.cvsignore: Likewise.
+ 	* javax/transaction/xa/Makefile.am: Likewise.
+ 	* javax/transaction/xa/.cvsignore: Likewise.
+ 	* configure.in (AC_OUTPUT): Add new Makefiles.am.
+ 
+ 2002-11-26  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/nio/CharBuffer.java (array_offset): Now protected.
+ 
+ 2002-11-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ref/Reference.java (enqueue): Return false if already
+ 	enqueued.
+ 
+ 2002-11-25  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java
+ 	(ByteBufferImpl): Call position() after limit().
+ 	* gnu/java/nio/CharBufferImpl.java
+ 	(CharBufferImpl): Call position() after limit().
+ 	* gnu/java/nio/DoubleBufferImpl.java
+ 	(Thanks to Ito Kazumitsu <ito.kazumitsu@hitachi-cable.co.jp>)
+ 	(DoubleBufferImpl): Call position() after limit().
+ 	* gnu/java/nio/FloatBufferImpl.java
+ 	(FloatBufferImpl): Call position() after limit().
+ 	* gnu/java/nio/IntBufferImpl.java
+ 	(IntBufferImpl): Call position() after limit().
+ 	* gnu/java/nio/LongBufferImpl.java
+ 	(LongBufferImpl): Call position() after limit().
+ 	* gnu/java/nio/ShortBufferImpl.java
+ 	(ShortBufferImpl): Call position() after limit().
+ 	
+ 2002-11-25  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/CharBufferImpl.java
+ 	(array_offset): Removed.
+ 	(endian): New member variable to store endianess of buffer.
+ 	(order): New method.
+ 	* gnu/java/nio/MappedCharFileBuffer.java
+ 	(endian): New member variable to store endianess of buffer.
+ 	(order): New method.
+ 	* java/nio/CharBuffer.java
+ 	(array_offset): New member variable.
+ 	(allocateDirect): Removed.
+ 	(wrap): Fixed
+ 	(Thanks to Ito Kazumitsu <ito.kazumitsu@hitachi-cable.co.jp>).
+ 	(wrap): Documentation added.
+ 	(get): Throw exception, documentation added.
+ 	(put): Throw exception, documentation added.
+ 	(put): New method.
+ 	(hasArray): Documentation added.
+ 	(array): Documentation added.
+ 	(arrayOffset): Implemented, documentation added.
+ 	(hashCode): Documentation added.
+ 	(subSequence): Documentation added.
+ 	(length): Documentation added.
+ 	(charAt): Reformated, documentation added.
+ 	(toString): Documentation added.
+ 	(compareTo): Documentation added.
+ 	(order): Made a final method to an abstract method.
+ 	(order): Removed.
+ 	(compact): Documentation added.
+ 	(isDirect): Documentation added.
+ 	(slice): Documentation added.
+ 	(duplicate): Documentation added.
+ 	(asReadOnlyBuffer): Documentation added.
+ 	(asShortBuffer): Removed.
+ 	(asCharBuffer): Removed.
+ 	(asIntBuffer): Removed.
+ 	(asLongBuffer): Removed.
+ 	(asDoubleBuffer): Removed.
+ 	(asFloatBuffer): Removed.
+ 	(asBuffer): Removed.
+ 	(getChar): Removed.
+ 	(putChar): Removed.
+ 	(getShort): Removed.
+ 	(putShort): Removed.
+ 	(getInt): Removed.
+ 	(putInt): Removed.
+ 	(getLong): Removed.
+ 	(putLong): Removed.
+ 	(getDouble): Removed.
+ 	(putDouble): Removed.
+ 	(getFloat): Removed.
+ 	(putFloat): Removed.
+ 	
+ 2002-11-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/net/protocol/jar/JarURLConnection.java (READBUFSIZE): 4K.
+ 	(get): Only write out as much bytes as we actaully read in.
+ 
+ 2002-11-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/naming/AuthenticationException.java: Import file from libgcj.
+ 	* javax/naming/AuthenticationNotSupportedException.java: Likewise.
+ 	* javax/naming/Binding.java: Likewise.
+ 	* javax/naming/CannotProceedException.java: Likewise.
+ 	* javax/naming/CommunicationException.java: Likewise.
+ 	* javax/naming/CompositeName.java: Likewise.
+ 	* javax/naming/CompoundName.java: Likewise.
+ 	* javax/naming/ConfigurationException.java: Likewise.
+ 	* javax/naming/Context.java: Likewise.
+ 	* javax/naming/ContextNotEmptyException.java: Likewise.
+ 	* javax/naming/InitialContext.java: Likewise.
+ 	* javax/naming/InsufficientResourcesException.java: Likewise.
+ 	* javax/naming/InterruptedNamingException.java: Likewise.
+ 	* javax/naming/LimitExceededException.java: Likewise.
+ 	* javax/naming/LinkException.java: Likewise.
+ 	* javax/naming/LinkLoopException.java: Likewise.
+ 	* javax/naming/LinkRef.java: Likewise.
+ 	* javax/naming/MalformedLinkException.java: Likewise.
+ 	* javax/naming/NameAlreadyBoundException.java: Likewise.
+ 	* javax/naming/NameClassPair.java: Likewise.
+ 	* javax/naming/NameNotFoundException.java: Likewise.
+ 	* javax/naming/NameParser.java: Likewise.
+ 	* javax/naming/NamingEnumeration.java: Likewise.
+ 	* javax/naming/NamingSecurityException.java: Likewise.
+ 	* javax/naming/NoInitialContextException.java: Likewise.
+ 	* javax/naming/NoPermissionException.java: Likewise.
+ 	* javax/naming/NotContextException.java: Likewise.
+ 	* javax/naming/OperationNotSupportedException.java: Likewise.
+ 	* javax/naming/PartialResultException.java: Likewise.
+ 	* javax/naming/Reference.java: Likewise.
+ 	* javax/naming/Referenceable.java: Likewise.
+ 	* javax/naming/ReferralException.java: Likewise.
+ 	* javax/naming/ServiceUnavailableException.java: Likewise.
+ 	* javax/naming/SizeLimitExceededException.java: Likewise.
+ 	* javax/naming/TimeLimitExceededException.java: Likewise.
+ 	* javax/naming/directory/Attribute.java: Likewise.
+ 	* javax/naming/directory/AttributeInUseException.java: Likewise.
+ 	* javax/naming/directory/AttributeModificationException.java: Likewise.
+ 	* javax/naming/directory/Attributes.java: Likewise.
+ 	* javax/naming/directory/BasicAttribute.java: Likewise.
+ 	* javax/naming/directory/BasicAttributes.java: Likewise.
+ 	* javax/naming/directory/DirContext.java: Likewise.
+ 	* javax/naming/directory/InitialDirContext.java: Likewise.
+ 	* javax/naming/directory/InvalidAttributeIdentifierException.java:
+ 	Likewise.
+ 	* javax/naming/directory/InvalidAttributeValueException.java: Likewise.
+ 	* javax/naming/directory/InvalidAttributesException.java: Likewise.
+ 	* javax/naming/directory/InvalidSearchControlsException.java: Likewise.
+ 	* javax/naming/directory/InvalidSearchFilterException.java: Likewise.
+ 	* javax/naming/directory/ModificationItem.java: Likewise.
+ 	* javax/naming/directory/NoSuchAttributeException.java: Likewise.
+ 	* javax/naming/directory/SchemaViolationException.java: Likewise.
+ 	* javax/naming/directory/SearchControls.java: Likewise.
+ 	* javax/naming/directory/SearchResult.java: Likewise.
+ 	* javax/naming/event/EventContext.java: Likewise.
+ 	* javax/naming/event/EventDirContext.java: Likewise.
+ 	* javax/naming/event/NamespaceChangeListener.java: Likewise.
+ 	* javax/naming/event/NamingEvent.java: Likewise.
+ 	* javax/naming/event/NamingExceptionEvent.java: Likewise.
+ 	* javax/naming/event/NamingListener.java: Likewise.
+ 	* javax/naming/event/ObjectChangeListener.java: Likewise.
+ 	* javax/naming/ldap/Control.java: Likewise.
+ 	* javax/naming/ldap/ControlFactory.java: Likewise.
+ 	* javax/naming/ldap/ExtendedRequest.java: Likewise.
+ 	* javax/naming/ldap/ExtendedResponse.java: Likewise.
+ 	* javax/naming/ldap/HasControls.java: Likewise.
+ 	* javax/naming/ldap/InitialLdapContext.java: Likewise.
+ 	* javax/naming/ldap/LdapContext.java: Likewise.
+ 	* javax/naming/ldap/LdapReferralException.java: Likewise.
+ 	* javax/naming/ldap/UnsolicitedNotification.java: Likewise.
+ 	* javax/naming/ldap/UnsolicitedNotificationEvent.java: Likewise.
+ 	* javax/naming/ldap/UnsolicitedNotificationListener.java: Likewise.
+ 	* javax/naming/spi/DirObjectFactory.java: Likewise.
+ 	* javax/naming/spi/DirStateFactory.java: Likewise.
+ 	* javax/naming/spi/DirectoryManager.java: Likewise.
+ 	* javax/naming/spi/InitialContextFactory.java: Likewise.
+ 	* javax/naming/spi/InitialContextFactoryBuilder.java: Likewise.
+ 	* javax/naming/spi/NamingManager.java: Likewise.
+ 	* javax/naming/spi/ObjectFactory.java: Likewise.
+ 	* javax/naming/spi/ObjectFactoryBuilder.java: Likewise.
+ 	* javax/naming/spi/ResolveResult.java: Likewise.
+ 	* javax/naming/spi/Resolver.java: Likewise.
+ 	* javax/naming/spi/StateFactory.java: Likewise.
+ 
+ 2002-11-23  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java
+ 	(put): Documentation added.
+ 	(get): Documentation added.
+ 	(compact): Documentation added.
+ 	(isDirect): Documentation added.
+ 	(slice): Documentation added.
+ 	(duplicate): Documentation added.
+ 	(asReadOnlyBuffer): Documentation added.
+ 	(asShortBuffer): Documentation added.
+ 	(asCharBuffer): Documentation added.
+ 	(asIntBuffer): Documentation added.
+ 	(asLongBuffer): Documentation added.
+ 	(asFloatBuffer): Documentation added.
+ 	(asDoubleBuffer): Documentation added.
+ 	(getChar): Documentation added.
+ 	(putChar): Documentation added.
+ 	(getShort): Documentation added.
+ 	(putShort): Documentation added.
+ 	(getInt): Documentation added.
+ 	(putInt): Documentation added.
+ 	(getLong): Documentation added.
+ 	(putLong): Documentation added.
+ 	(getFloat): Documentation added.
+ 	(putFloat): Documentation added.
+ 	(getDouble): Documentation added.
+ 	(putDouble): Documentation added.
+ 
+ 2002-11-23  Jesse Rosenstock <jmr@ugcs.caltech.edu>
+ 
+ 	* gnu/java/nio/CharBufferImpl.java
+ 	(subSequence): Implemented.
+ 	(toString): Removed.
+ 	* java/nio/CharBuffer.java
+ 	(length): Return remaining() instead of limit().
+ 	(charAt): Implemented correctly.
+ 	(toString): Implemented correctly.
+ 
+ 2002-11-23  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): New method.
+ 	(DatagramSocket): Call new method istead of own implementation,
+ 	Added exception documentation.
+ 	* java/net/MulticastSocket.java
+ 	(MulticastSocket): New method.
+ 	
+ 2002-11-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/net/protocol/jar/JarURLConnection.java (get):
+ 	ZipFile.OPEN_DELETE not yet implemented.
+ 	* java/net/HttpURLConnection.java (getResponseVals): Only set
+ 	responseCode when not yet explicitly set by subclass.
+ 	* java/net/URLClassLoader.java (URLLoader.getManifest): Make default
+ 	return null.
+ 	(URLResource.getCertificates): Likewise
+ 	(RemoteURLLoader): New class.
+ 	(RemoteResource): Likewise.
+ 	(FileURLLoader.getManifest): No longer needed.
+ 	(FileResource.getCertificates): Likewise.
+ 	(addURL): Create either a FileURLLoader or a RemoteURLLoader.
+ 
+ 2002-11-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-net/java_net_InetAddress.c (lookupInaddrAny): Use
+ 	Byte not Int arrays.
+ 	(getHostByAddr): Likewise.
+ 	(getHostByName): Likewise.
+ 
+ 2002-11-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URL.java (getURLStreamHandler): Fall through to standard
+ 	handlers when a stream factory doesn't handle a protocol.
+ 	(getPath): Handle file == null case.
+ 	(getQuery): Likewise.
+ 	(getUserInfo): Handle host == null case.
+ 
+ 	* java/net/URLClassLoader.java (JarLoader): More efficient use of
+ 	StringBuffer.
+ 
+ 2002-11-22  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/CharBufferImpl.java
+ 	(subSequence): New stubbed method.
+ 	* gnu/java/nio/MappedCharFileBuffer.java:
+ 	Reindented.
+ 	(subSequence): New stubbed method.
+ 	* java/nio/CharBuffer.java
+ 	(CharBuffer): Implements Comparable and CharSequence.
+ 	(lenght): New method.
+ 	(charAt): New method.
+ 	(toString): New method.
+ 	(put): Removed unneeded "java.nio." prefix.
+ 
+ 2002-11-22  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/Channels.java:
+ 	Reindented, documentation added.
+ 	(newInputStream): Documentation added.
+ 	(newOutputStream): Documentation added.
+ 	(newChannel): Documentation added.
+ 	(newReader): JDK 1.4 conform implementation, documentation added.
+ 	(newWriter: JDK 1.4 conform implementation, documentation added.
+ 	
+ 2002-11-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/JarFile.java (getManifest): Throws IOException.
+ 	* java/net/URLClassLoader.java (JarURLLoader): Don't use gnu cache
+ 	directly, use standard JarURLConnection.getJarFile().
+ 	(JarURLLoader.getManifest): Catch IOException.
+ 	* gnu/java/net/protocol/jar/Handler.java (parseURL): Check for
+ 	empty file part and only use url_String from start till end.
+ 
+ 	* java/net/HttpURLConnection.java (HTTP_USE_PROXY): Add field.
+ 	(HTTP_INTERNAL_ERROR): Constant value should be 501.
+ 	* java/net/URLDecoder.java (decode): Throws Exception.
+ 
+ 	* java/net/URL.html: Merge with libgcj (partly).
+ 	* java/net/URLStreamHandler: Merge with libgcj.
+ 
+ 2002-11-21  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/AsynchronousCloseException.java,
+ 	java/nio/channels/CancelledKeyException.java,
+ 	java/nio/channels/ClosedByInterruptException.java,
+ 	java/nio/channels/ConnectionPendingException.java,
+ 	java/nio/channels/FileLockInterruptionException.java,
+ 	java/nio/channels/IllegalSelectorException.java,
+ 	java/nio/channels/NoConnectionPendingException.java,
+ 	java/nio/channels/NonReadableChannelException.java,
+ 	java/nio/channels/NonWritableChannelException.java,
+ 	java/nio/channels/NotYetBoundException.java,
+ 	java/nio/channels/NotYetConnectedException.java,
+ 	java/nio/channels/OverlappingFileLockException.java,
+ 	java/nio/channels/UnresolvedAddressException.java,
+ 	java/nio/channels/UnsupportedAddressTypeException.java:
+ 	New files.
+ 	* java/nio/channels/Makefile.am: Added new files.
+ 	* java/nio/channels/ServerSocketChannel.java
+ 	(accept): Added exception documentation.
+ 	(open): Fixed typo, added exception documentation.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(implCloseChannel): Added exception documentation.
+ 	(add): Reformated.
+ 	(register): Added exception documentation.
+ 
+ 2002-11-19  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java,
+ 	gnu/java/nio/CharBufferImpl.java,
+ 	gnu/java/nio/DoubleBufferImpl.java,
+ 	gnu/java/nio/FloatBufferImpl.java,
+ 	gnu/java/nio/IntBufferImpl.java,
+ 	gnu/java/nio/LongBufferImpl.java,
+ 	gnu/java/nio/ShortBufferImpl.java:
+ 	Do explicit imports, reindented.
+ 
+ 2002-11-18  Jesse Rosenstock <jmr@ugcs.caltech.edu>
+ 
+ 	* java/nio/charset/CoderResult.java (Cache.get): Fix a bug
+ 	that was causing CoderResults to be cached, not WeakReferences
+ 	to CoderResults.
+ 
+ 2002-11-18  Joerg Brunsmann  <joerg_brunsmann@yahoo.de>
+ 
+ 	* java/security/KeyStore.java (getInstance): Fix
+ 	comment and throw IllegalArgumentException if 
+ 	given provider is null.
+ 	(getInstance): New method for jdk1.4 compatibility.
+ 
+ 2002-11-18  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(select): Throww exception when selector is closed,
+ 	reinitialize counter before reusing it.
+ 	(implCloseSelector): Implemented.
+ 	(register): Added support for ServerSocketChannelImpl.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(ServerSocketChannelImpl): Create server socket.
+ 	* gnu/java/nio/SocketChannelImpl.java: Reformated.
+ 	* java/net/ServerSocket.java
+ 	(ServerSocket): Create unbound socket.
+ 	* java/nio/channels/ClosedChannelException.java: Documentation added.
+ 	* java/nio/channels/ClosedSelectorException.java: New file.
+ 
+ 2002-11-17  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* scripts/japi: new file, used nightly
+ 	* scripts/kissme-mauve: new file, used nightly
+ 
+ 2002-11-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/security/Makefile.am (EXTRA_DIST): Removed.
+ 	* gnu/java/security/DefaultPermissionCollection.java: Removed.
+ 
+ 2002-11-17  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DoubleBufferImpl.java,
+ 	gnu/java/nio/FloatBufferImpl.java,
+ 	gnu/java/nio/IntBufferImpl.java,
+ 	gnu/java/nio/LongBufferImpl.java,
+ 	gnu/java/nio/ShortBufferImpl.java;
+ 	Reindented.
+ 
+ 2002-11-17   Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/net/HttpURLConnection.java (getPermission): Take port
+ 	into consideration.
+ 	(getErrorStream): Implement.
+ 
+ 2002-11-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/HttpURLConnection.java: Merge with libgcj.
+ 
+ 2002-11-16  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java,
+ 	gnu/java/nio/CharBufferImpl.java,
+ 	gnu/java/nio/DoubleBufferImpl.java,
+ 	gnu/java/nio/FloatBufferImpl.java,
+ 	gnu/java/nio/IntBufferImpl.java,
+ 	gnu/java/nio/LongBufferImpl.java,
+ 	gnu/java/nio/ShortBufferImpl.java:
+ 	Reindented.
+ 
+ 2002-11-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Integrate work by Raif S. Naffah (raif@fl.net.au)
+ 	* java/security/DummyKeyPairGenerator.java (clone): New method.
+ 	* java/security/DummyMessageDigest.java (clone): New method.
+ 	(engineUpdate): Now public.
+ 	(engineReset): Likewise.
+ 	(engineDigest): Likewise.
+ 	(engineGetDigestLength): New method.
+ 	* java/security/DummySignature.java (clone): New method.
+ 	* java/security/KeyPairGenerator.java (provider): Now package private.
+ 	(getInstance(String)): Use getInstance(String,Provider).
+ 	(getInstance(String,String): Use getInstance(String,Provider)
+ 	(getInstance(String,Provider): New method.
+ 	(getInstance(String,String,Provider): Don't cast DummyKeyPairGenerator.
+ 	* java/security/KeyPairGeneratorSpi.java (clone): New method.
+ 	* java/security/MessageDigest.java (provider): Now package private.
+ 	(getInstance(String): Use getInstance(String,Provider).
+ 	(getInstance(String,String): Use getInstance(String,Provider)
+ 	(getInstance(String,Provider): New method.
+ 	* java/security/Provider.java (toCanonicalKey): New method.
+ 	(get): New method that uses toCanonicalKey().
+ 	(put): Use toCanonicalKey().
+ 	(remove): Likewise.
+ 	* java/security/Security.java (insertProviderAt): Provider index is one
+ 	based, not zero based.
+ 	(addProvider): Likewise.
+ 	(removeProvider): Likewise.
+ 	* java/security/Signature.java (provider): Now package private.
+ 	(getInstance(String)): Use getInstance(String,Provider).
+ 	(getInstance(String,String): Use getInstance(String,Provider)
+ 	(getInstance(String,Provider): New method.
+ 	(getInstance(String,String,Provider): Don't cast DummySignature.
+ 
+ 	* THANKYOU: Add Raif.
+ 
+ 2002-11-16  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/SocketAddress.java: Added some documentation.
+ 
+ 2002-11-16  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java, java/nio/CharBuffer.java:
+ 	Reindented.
+ 	* java/nio/DoubleBuffer.java
+ 	(compareTo): use Buffer.position() instead of Buffer.pos.
+ 	* java/nio/FloatBuffer.java
+ 	(compareTo): use Buffer.position() instead of Buffer.pos.
+ 	* java/nio/IntBuffer.java
+ 	(compareTo): use Buffer.position() instead of Buffer.pos.
+ 	* java/nio/LongBuffer.java
+ 	(compareTo): use Buffer.position() instead of Buffer.pos.
+ 	* java/nio/ShortBuffer.java
+ 	(compareTo): use Buffer.position() instead of Buffer.pos.
+ 	
+ 2002-11-16  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java,
+ 	gnu/java/nio/FileChannelImpl.java,
+ 	gnu/java/nio/PipeImpl.java,
+ 	gnu/java/nio/SelectionKeyImpl.java,
+ 	gnu/java/nio/SelectorImpl.java,
+ 	gnu/java/nio/SelectorProviderImpl.java,
+ 	gnu/java/nio/ServerSocketChannelImpl.java,
+ 	gnu/java/nio/SocketChannelImpl.java:
+ 	Reindented.
+ 	
+ 2002-11-16  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(map): Last argument must be of type long,
+ 	made it a dummy method for now.
+ 	* java/nio/channels/FileChannel.java:
+ 	Documentation added.
+ 	(MapMode): Documentation added.
+ 	(MapMode.toString): Reformated.
+ 	(FileChannel): Documentation added.
+ 	(map): Last argument must be type long, documentation added.
+ 	(write): New method.
+ 	(write): Documentation added.
+ 	(read): Documentation added.
+ 	(implCloseChannel): Documentation added.
+ 	(force): Reformated documentation.	
+ 	* java/nio/channels/Selector.java
+ 	(open): Added "throws IOException".
+ 	* java/nio/channels/spi/SelectorProvider.java
+ 	(SelectorProvider): Added SecurityManager check, documentation added.
+ 	* java/nio/charset/Charset.java
+ 	(encode): Use cached encoder object.
+ 	(decode): Use cached decoder object.
+ 	
+ 2002-11-16  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/ReadOnlyBufferException.java: New file.
+ 	* java/nio/Makefile.am: Added ReadOnlyBufferException.java.
+ 
+ 2002-11-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java (RadioWindow.init): Add
+ 	buttons to set state via group.
+ 
+ 2002-11-15  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/nio/Buffer.java (cap): Make field protected for now to get
+ 	things compiling. Added a FIXME.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBounds): Declare widget
+ 	before use.
+ 
+ 2002-11-15  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java (write, read): Add missing
+ 	stub methods.
+ 	* java/net/MulticastSocket.java: Add missing import.
+ 	* java/nio/channels/FileChannel.java: Add missing import.
+ 
+ 2002-11-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/classpath/native_state.c (add_node): Set `c_state'
+ 	field even when moving node.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_dispose): New
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove): New
+ 	function.
+ 	Include GtkComponentPeer header.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (dispose): Removed.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose): Renamed.
+ 	* gnu/java/awt/peer/gtk/Makefile.am (EXTRA_DIST): Added
+ 	GtkCheckboxGroupPeer.java.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java (old_group): Now a
+ 	GtkCheckboxGroupPeer.
+ 	(nativeCreate): Argument now a GtkCheckboxGroupPeer.
+ 	(nativeSetCheckboxGroup): Likewise.  Removed `old_group'
+ 	argument.
+ 	(create): Find the GtkCheckboxGroupPeer.
+ 	(setCheckboxGroup): Likewise.
+ 	(dispose): New method.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java: New file.
+ 	* gnu/java/awt/peer/gtk/GtkGenericPeer.java (next_native_state):
+ 	New global.
+ 	(getUniqueInteger): New method.
+ 	(native_state): Use it.
+ 	(dispose): New native method.
+ 
+ 2002-11-13  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java: Reindented.
+ 	* java/nio/channels/DatagramChannel.java:
+ 	Added "import java.nio.channels.spi.SelectorProvider;"
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java:
+ 	Added some missing imports.
+ 
+ 2002-11-13  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java
+ 	Correctly initialize mark.
+ 	(capacity): Removed.
+ 	(capacity): Documentation added.
+ 	(clear): Set mark to -1, documentation added.
+ 	(flip): Set mark to -1, documentation added.
+ 	(hasRemaining): Documentation added.
+ 	(isReadOnly): Documentation added.
+ 	(limit): Throw exception, set mark to -1, documentation added.
+ 	(mark): Documentation added.
+ 	(postion): Throw exception, set mark to -1, documentation added.
+ 	(remaining): Documentation added.
+ 	(reset): Throw exception, documentation added.
+ 	(rewind): Set mark to -1, documentation added.
+ 	* java/nio/channels/DatagramChannel.java
+ 	(DatagramChannel): Documentation added.
+ 	(open): Documentation added.
+ 	(read): Documentation added.
+ 	(write): Documentation added.
+ 	(connect): Documentation added.
+ 	(disconnect): Documentation added.
+ 	(isConnected): Documentation added.
+ 	(receive): Documentation added.
+ 	(send): Documentation added.
+ 	(socket): Documentation added.
+ 	(validOps): Documentation added.
+ 	* java/nio/channels/ServerSocketChannel.java
+ 	(ServerSocketChannel): Documentation added.
+ 	(accept): Documentation added.
+ 	(socket): Documentation added.
+ 	(open): Documentation added.
+ 	(validOps): Documentation added.
+ 	* java/nio/channels/SocketChannel.java
+ 	(SocketChannel): Documentation added.
+ 	(open): Documentation added.
+ 	(read): Documentation added.
+ 	(write): Documentation added.
+ 	(validOps): Documentation added.
+ 	(connect): Documentation added.
+ 	(finishConnect): Documentation added.
+ 	(isConnected): Documentation added.
+ 	(isConnectionPending): Documentation added.
+ 	(socket): Documentation added.
+ 	* java/nio/channels/spi/SelectorProvider.java
+ 	(SelectorProvider): Documentation added.
+ 	(openDatagramChannel): Documentation added.
+ 	(openPipe): Documentation added.
+ 	(openSelector): Documentation added.
+ 	(openServerSocketChannel): Documentation added.
+ 	(openSocketChannel): Documentation added.
+ 	(provider): Documentation added.
+ 
+ 2002-11-13  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(validOps): Removed.
+ 	* gnu/java/nio/ByteBufferImpl.java,
+ 	gnu/java/nio/DoubleBufferImpl.java,
+ 	gnu/java/nio/FloatBufferImpl.java,
+ 	gnu/java/nio/IntBufferImpl.java,
+ 	gnu/java/nio/LongBufferImpl.java,
+ 	gnu/java/nio/ShortBufferImpl.java,
+ 	gnu/java/nio/SocketChannelImpl.java:
+ 	Dont use capacity(cap).
+ 	* java/nio/InvalidMarkException.java: New file.
+ 	* java/nio/Makefile.am: Added InvalidMarkException.java.
+ 
+ 2002-11-13  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/Makefile.am: Added URI.java.
+ 
+ 2002-11-13  Michael Koch <konqueror@gmx.de>
+ 
+ 	* ChangeLog.usermap: Added myself.
+ 	* java/nio/channels/Pipe.java
+ 	(SinkChannel.SinkChannel): Documentation added.
+ 	(SinkChannel.validOps): New method.
+ 	(SourceChannel.SourceChannel): Documentation added.
+ 	(SourceChannek.validOps): New method.
+ 	(open): Implemented, documentation added.
+ 	(SinkChannel.sink): Documentation added.
+ 	(SourceChannel.source): Documentation added.
+ 	* java/nio/channels/SelectableChannel.java
+ 	(SelectableChannel): Documentation added.
+ 	(blockingLock): Documentation added.
+ 	(configureBlocking): Documentation added.
+ 	(isBlocking): Documentation added.
+ 	(isRegistered): Documentation added.
+ 	(keyFor): Documentation added.
+ 	(provider): Documentation added.
+ 	(register): Documentation added.
+ 	(validOps): Documentation added.
+ 	* java/nio/channels/SelectionKey.java
+ 	(SelectionKey): Documentation added.
+ 	(attach): Documentation added.
+ 	(attachment): Documentation added.
+ 	(isAcceptable): Documentation added.
+ 	(isConnectable): Documentation added.
+ 	(isReadable): Documentation added.
+ 	(isWritable): Documentation added.
+ 	(cancel): Documentation added.
+ 	(interestOps): Documentation added.
+ 	(isValid): Documentation added.
+ 	(readyOps): Documentation added.
+ 	(selector): Documentation added.
+ 	* java/nio/channels/Selector.java
+ 	(Selector): Documentation added.
+ 	(open): Documentation added.
+ 	(close): Documentation added.
+ 	(isOpen): Documentation added.
+ 	(keys): Documentation added.
+ 	(provider): Documentation added.
+ 	(select): Documentation added.
+ 	(selectedKeys): Documentation added.
+ 	(selectNow): Documentation added.
+ 	(wakeup): Documentation added.
+ 	* java/nio/channels/spi/AbstractInterruptibleChannel.java
+ 	(opened): Default to true.
+ 	(AbstractInterruptibleChannel): Documentation added.
+ 	(begin): Documentation added.
+ 	(close): Set opened, Documentation added.
+ 	(end): Documentation added.
+ 	(implCloseChannel): Documentation added.
+ 	(isOpen): Documentation added.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(AbstractSelectableChannel): Documentation added.
+ 	(blockingLock): Documentation added.
+ 	(configureBlocking): Documentation added.
+ 	(implCloseChannel): Documentation added.
+ 	(implCloseSelectableChannel): Documentation added.
+ 	(implConfigureBlocking): Documentation added.
+ 	(isBlocking): Documentation added.
+ 	(isRegistered): Documentation added.
+ 	(keyFor): Documentation added.
+ 	(provider): Documentation added.
+ 	(register): Documentation added.
+ 	* java/nio/channels/spi/AbstractSelectionKey.java
+ 	(AbstractSelectionKey): Documentation added.
+ 	(cancel): Documentation added.
+ 	(isValid): Documentation added.
+ 	* java/nio/channels/spi/AbstractSelector.java
+ 	(closed): Default to false.
+ 	(AbstractSelector): Documentation added.
+ 	(begin): Documentation added.
+ 	(close): Documentation added.
+ 	(isOpen): Documentation added.
+ 	(implCloseSelector): Documentation added.
+ 
+ 2002-11-12  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/applet/AppletContext.java: Fix typo and remove redundant
+ 	modifiers.
+ 	* java/lang/ClassLoader.java (getPackage): Not final.
+ 
+ 2002-11-12  Michael Koch <konqueror@gmx.de>
+ 	
+ 	* java/net/Makefile.am: Added NetworkInterface.java.
+ 	
+ 2002-11-12  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/NetworkInterface.java: New file.
+ 	* java/net/DatagramSocketImpl.java
+ 	(peekData): New method.
+ 	(joinGroup): New method.
+ 	(leaveGroup): New method.
+ 	* java/net/MulticastSocket.java
+ 	(setNetworkInterface): New method.
+ 	(getNetworkInterface): New method.
+ 	(joinGroup): New method.
+ 	(leaveGroup): New method.
+ 	* java/net/PlainDatagramSocketImpl.java
+ 	(peekData): New method.
+ 	(joinGroup): New method.
+ 	(leaveGroup): New method.
+ 	* java/net/PlainSocketImpl.java
+ 	(connect): New method.
+ 	(sendUrgentData): New method.
+ 	(shutdownInput): New method.
+ 	(shutdownOutput): New method.
+ 	* java/net/ServerSocket.java
+ 	(bind): Implemented.
+ 	* java/net/Socket.java
+ 	(bind): Implemented.
+ 	(connect): Implemented.
+ 	(sendUrgentData): Implemented.
+ 	(shutdownInput): Implemented.
+ 	(shutdownOutput): Implemented.
+ 	* java/net/SocketImpl.java
+ 	(connect): New method.
+ 	(sendUrgentData): New method.
+ 	(shutdownInput): New method.
+ 	(shutdownOutput): New method.
+ 
+ 2002-11-11  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(isOpen): Removed.
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(cancelledKeys): Removed.
+ 	* java/nio/MappedByteBuffer.java
+ 	(force): Must be final.
+ 	(isLoaded): Must be final.
+ 	(load): Must be final.
+ 	* java/nio/channels/DatagramChannel.java:
+ 	(DatagramChannel): Call parent constructor.
+ 	(read): Must be final.
+ 	(write): New method.
+ 	(validOps): Must be final.
+ 	* java/nio/channels/Pipe.java: Reindented.
+ 	* java/nio/channels/SelectableChannel.java: Reindented.
+ 	* java/nio/channels/SelectionKey.java: Reindented.
+ 	* java/nio/channels/Selector.java: Reindented.
+ 	* java/nio/channels/ServerSocketChannel.java
+ 	(ServerSocketChannel): Call parent constructor.
+ 	* java/nio/channels/SocketChannel.java
+ 	(SocketChannel): Call parent constructor.
+ 	* java/nio/channels/spi/AbstractChannel.java:
+ 	Removed inexistant class.
+ 	* java/nio/channels/spi/AbstractInterruptibleChannel.java:
+ 	Reindented.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java:
+ 	Reindented.
+ 	(AbstractSelectableChannel): New method.
+ 	* java/nio/channels/spi/AbstractSelector.java: Reindented.
+ 	* java/nio/channels/spi/Makefile.am: Removed AbstractChannel.java.
+ 
+ 2002-11-11  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/AlreadyConnectedException.java:
+ 	Removed unneeded import.
+ 	(AlreadyConnectedException): Added documentation.
+ 	* java/nio/channels/ByteChannel.java: Wrapped.
+ 	* java/nio/channels/Channel.java: Documentation added.
+ 	* java/nio/channels/DatagramChannel.java: Reindented.
+ 	* java/nio/channels/FileChannel.java: Reindented.
+ 	* java/nio/channels/GatheringByteChannel.java: Documentation added.
+ 	* java/nio/channels/InterruptibleChannel.java: Documentation added.
+ 	* java/nio/channels/ReadableByteChannel.java: Documentation added.
+ 	* java/nio/channels/ScatteringByteChannel.java: Documentation added.
+ 	* java/nio/channels/WritableByteChannel.java: Documentation added.
+ 	* java/nio/channels/spi/AbstractChannel.java: Reindented.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java:
+ 	(blockingLock): Must be final.
+ 	(configureBlocking): Must be final.
+ 	(implCloseChannel): Must be final.
+ 	(isBlocking): Must be final.
+ 	(isRegistered): Must be final.
+ 	(provider): Must be final.
+ 	(register): Must be final.
+ 	* java/nio/channels/spi/AbstractSelectionKey.java:
+ 	Reindented.
+ 	(cancel): Must be final.
+ 	(isValid): Must be final.
+ 
+ 2002-11-11  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/XMLFormatter.java (getHead): Use UTF-8 as
+ 	default if System.getProperty("file.encoding") returns null. Since
+ 	file.encoding is defined on Sun VMs, but not documented in the API
+ 	specification of java.lang.System.getProperties(), we cannot
+ 	depend on it. Comments in the source explain why UTF-8 is a safe
+ 	fallback unless the platform uses something really arcane (such as
+ 	EBCDIC) for its files.
+ 
+ 2002-11-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Container.java (validate): Use tree lock.
+ 	(getComponent): Likewise.
+ 	(getComponents): Likewise.
+ 	(addImpl): Likewise.
+ 	(remove): Likewise.
+ 	(removeAll): Likewise.
+ 	(processEvent): Fixed indentation.
+ 	(getComponentAt): Use tree lock.
+ 	(findComponentAt): Likewise.
+ 	(removeNotify): Likewise.
+ 	(isAncestorOf): Likewise.
+ 	(list): Likewise.
+ 	(visitChildren): Likewise.
+ 	(findNextFocusComponent): Likewise.
+ 	(addNotifyContainerChildren): Likewise.
+ 	(getAccessibleChildrenCount): Likewise.
+ 	(getAccessibleChild): Likewise.
+ 
+ 2002-11-10  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: link to jdk11 comparison, mauve results
+ 
+ 2002-11-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/GridLayout.java (layoutContainer): Use tree lock.
+ 	(getSize): Likewise.
+ 	* java/awt/FlowLayout.java (layoutContainer): Use tree lock.
+ 	(getSize): Likewise.
+ 	* java/awt/BorderLayout.java (layoutContainer): Use tree lock.
+ 	(calcSize): Likewise.
+ 	* java/awt/CardLayout.java (getSize): Use tree lock.
+ 	(gotoComponent): Likewise.
+ 	(layoutContainer): Likewise.
+ 
+ 2002-11-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/GridLayout.java (setColumns): Check newCols, not cols.
+ 	(setRows): Check newRows, not rows.
+ 
+ 2002-11-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBounds): Reverted
+ 	earlier patch.
+ 
+ 	* native/jni/classpath/native_state.c (add_node): Only allocate
+ 	new node if it is needed.
+ 
+ 2002-11-10  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* mauve-classpath: clean up, no longer need to ignore all these tests
+ 
+ 2002-11-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer):
+ 	Renamed.
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBounds): handle case
+ 	where widget isn't set yet.
+ 	(setBounds): Now static.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java (setMenuBar,
+ 	setMenuBarPeer): Moved...
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar,
+ 	setMenuBarPeer): ...here.
+ 	(setBounds): Don't call getMenuBarHeight.
+ 
+ 	* java/awt/ScrollPane.java (ScrollPane): Fixed indentation.
+ 
+ 	* java/awt/List.java (processEvent): Added missing `else's.
+ 
+ 	* java/awt/Window.java (show): validate() before showing.  Make
+ 	parent displayable.
+ 	(isDisplayable): New method.
+ 
+ 2002-11-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createButton): Don't set
+ 	bounds on new button.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (GtkComponentPeer):
+ 	Set bounds on component.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java (postConfigureEvent):
+ 	Removed println.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (static): Removed
+ 	println.
+ 	(createImage): Likewise.
+ 	(setComponentState): Likewise.
+ 	(createLabel): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (getMinimumSize):
+ 	Removed println.
+ 	(getPreferredSize): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (getMinimumSize):
+ 	Removed println.
+ 	(getPreferredSize): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java (GtkImage): Removed
+ 	println.
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (handleEvent): Removed
+ 	println.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (getMinimumSize):
+ 	Removed println.
+ 	(getPreferredSize): Likewise.
+ 	(setBackground): Likewise.
+ 	(setForeground): Likewise.
+ 	(getArgs): Likewise.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (clipRect): Removed
+ 	println.
+ 	(drawRoundRect): Likewise.
+ 	(fillRoundRect): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetSize):
+ 	Removed printf.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getHScrollbarHeight): Removed printf.
+ 	(Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getVScrollbarWidth):
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (sr):
+ 	Removed printf.  Now static.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): Removed
+ 	printf.
+ 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkMain): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkFixedPut): Removed
+ 	printf.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkFixedMove):
+ 	Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds):
+ 	Likewise.
+ 	(find_gtk_layout): Likewise.
+ 	(set_parent): Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_Object_2): Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_create): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_image_GdkPixbufDecoder.c
+ 	(area_prepared): Remove printf.  Now static.
+ 	(area_updated): Likewise.
+ 	(closed): Likewise.
+ 
+ 2002-11-08  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/charset/ISO_8859_1.java,
+ 	gnu/java/nio/charset/Provider.java,
+ 	gnu/java/nio/charset/US_ASCII.java,
+ 	gnu/java/nio/charset/UTF_16.java,
+ 	gnu/java/nio/charset/UTF_16BE.java,
+ 	gnu/java/nio/charset/UTF_16Decoder.java,
+ 	gnu/java/nio/charset/UTF_16Encoder.java,
+ 	gnu/java/nio/charset/UTF_16LE.java,
+ 	gnu/java/nio/charset/UTF_8.java:
+ 	Added copyright text.
+ 	
+ 2002-11-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/InputStreamReader.java (InputStreamReader): Throw
+ 	NullPointerException when any argument is null.
+ 
+ 2002-11-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/nio/charset/Charset.java: Add necessary imports (gcj doesn't
+ 	care about them, but jikes does).
+ 	* java/nio/charset/CoderResult.java: Likewise and move declaration of
+ 	OVERFLOW and UNDERFLOW after the declaration of the corresponding
+ 	TYPE_ fields they use (again gcj doesn't care but jikes does).
+ 
+ 2002-11-08  Jesse Rosenstock <jmr@fulcrummicro.com>
+ 
+ 	* java/nio/charset/CharacterCodingException.java:
+ 	This class must be public.
+ 	* java/nio/charset/Charset.java:
+ 	Implemented whole class.
+ 	* java/nio/charset/CharsetDecoder.java:
+ 	Implemented whole class.
+ 	* java/nio/charset/CharsetEncoder.java:
+ 	Implemented whole class.
+ 	* java/nio/charset/CoderMalfunctionError.java:
+ 	This class must be public.
+ 	* java/nio/charset/CoderResult.java:
+ 	Implemented whole class.
+ 	* java/nio/charset/CodingErrorAction.java:
+ 	This class must be public.
+ 	* java/nio/charset/IllegalCharsetNameException.java:
+ 	This class must be public, better implementation.
+ 	* java/nio/charset/MalformedInputException.java:
+ 	This class must be public, better implementation.
+ 	* java/nio/charset/UnmappableCharacterException.java:
+ 	This class must be public, better implementation.
+ 	* java/nio/charset/UnsupportedCharsetException.java:
+ 	This class must be public, better implementation.
+ 	* gnu/java/nio/charset/ISO_8859_1.java,
+ 	gnu/java/nio/charset/Provider.java,
+ 	gnu/java/nio/charset/US_ASCII.java,
+ 	gnu/java/nio/charset/UTF_16.java,
+ 	gnu/java/nio/charset/UTF_16BE.java,
+ 	gnu/java/nio/charset/UTF_16Decoder.java,
+ 	gnu/java/nio/charset/UTF_16Encoder.java,
+ 	gnu/java/nio/charset/UTF_16LE.java,
+ 	gnu/java/nio/charset/UTF_8.java,
+ 	gnu/java/nio/charset/Makefile.am,
+ 	gnu/java/nio/charset/.cvsignore:
+ 	New files.
+ 	* gnu/java/nio/Makefile.am: Add new subdir charset.
+ 	* configure.in: Added gnu/java/nio/charset/Makefile to AC_OUTPUT.
+ 	
+ 2002-11-08  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/CharBuffer.java:
+ 	Reindented.
+ 	(wrap): New method.
+ 	(put): New method.
+ 	* java/nio/BufferOverflowException.java,
+ 	java/nio/BufferUnderflowException.java: New file.
+ 	* java/nio/Makefile.am: Added new files.
+ 	
+ 2002-11-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/ScrollPane.java (ScrollPane): Conditions should all be true.
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java (bundle): Possibly null.
+ 	(GtkFontPeer): Fall back to some default for Xname if bundle == 0.
+ 	* gnu/java/awt/peer/gtk/Test.java (paint): Check for null
+ 	ScrollPanePeer.
+ 
+ 2002-11-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectStreamConstants: New value TC_MAX = TC_PROXYCLASSDESC.
+ 
+ 2002-11-07  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/color/Makefile.am: Add ICC_Profile{Gray|RGB}.
+ 	* java/awt/color/ICC_ProfileGray.java: Add stubbed class.
+ 	* java/awt/color/ICC_ProfileRGB.java: Ditto.
+ 	* java/awt/color/ColorSpace.java: Improve serialization, 1.4
+ 	compliance, and formatting.
+ 	* java/awt/color/ICC_ColorSpace.java: Ditto.
+ 	* java/awt/color/ICC_Profile.java: Ditto.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/ClosedChannelException.java:
+ 	Reindented.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteOrder.java:
+ 	Constants must be public.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java,
+ 	java/net/Socket.java,
+ 	java/net/SocketImpl.java:
+ 	More merges with libgcj.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocketImpl.java:
+ 	Partly merged with libgcj.
+ 	* java/net/MulticastSocket.java:
+ 	Partly merged with libgcj.
+ 	* java/net/ServerSocket.java:
+ 	Partly merged with libgcj.
+ 	* java/net/Socket.java:
+ 	Partly merged with libgcj.
+ 	
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocketImpl.java: Added documentation.
+ 	* java/net/Inet4Address.java: Made final again.
+ 	* java/net/MulticastSocket.java: Reindented.
+ 	* java/net/ServerSocket.java: Added documentation.
+ 	* java/net/Socket.java: Added documentation.
+ 	(Socket): Must be public now.
+ 	* java/net/SocketImpl.java: Added documentation.
+ 	* java/nio/channels/IllegalBlockingModeException.java: New file.
+ 	* java/nio/channels/Makefile.am:
+ 	Added IllegalBlockingModeException.java.
+ 
+ 2002-11-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/nio/charset/CodingErrorAction.java: New private constructor to
+ 	initialize final static fields.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java: Made it conform to Inet4Address and
+ 	Inet6Address. This will be merged later with libgcj.
+ 	* java/net/Makefile.am: Added Inet4Address.java and Inet6Address.java.
+ 	
+ 2002-11-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java: Reindent.
+ 	* java/rmi/server/RemoteObject.java (readObject): Chain exceptions.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java: This class my not be final.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/awt/DisplayMode.java
+ 	(equals): Fixed implementation.
+ 	* java/awt/Toolkit.java: Fixed typo.
+ 	* jva/awt/peer/ContainerPeer.java: Reindented.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/charset/CoderMalfunctionError.java,
+ 	java/nio/charset/IllegalCharsetNameException.java,
+ 	java/nio/charset/MalformedInputException.java,
+ 	java/nio/charset/UnmappableCharacterException.java,
+ 	java/nio/charset/UnsupportedCharsetException.java:
+ 	New files.
+ 	* java/nio/charset/CharacterCodingException.java:
+ 	Removed unneeded constructor, reindented file.
+ 	* java/nio/charset/CodingErrorAction.java:
+ 	Added missing constants.
+ 	(toString): Added dummy implementation.
+ 	* java/nio/charset/Makefile.am:
+ 	Added missing files.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/Inet4Address.java: New file, not used yet.
+ 	* java/net/Inet6Address.java: New file, not used yet.
+ 	* java/net/InetSocketAddress.java: Reindented.
+ 	* java/net/SocketAddress.java: Reindented.
+ 	* java/net/SocketOptions.java: Merged with libgcj, reindented.
+ 	* java/net/SocketPermission.java: Merged with libgcj.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/awt/Event.java:
+ 	Made constants more readable (at least for jdiff.sh).
+ 	* java/awt/Frame.java:
+ 	Added some missing constants.
+ 	* java/awt/event/KeyEvent.java:
+ 	Fixed typos in constants (s/MARK/POINT/).
+ 	
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/awt/color/ICC_Profile.java:
+ 	Added missing constants.
+ 	* java/awt/color/ICC_ColorSpace.java
+ 	(getMinValue): Added dummy implementation.
+ 	(getMaxValue): Added dummy implementation.
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(imageFlavor): Added.
+ 	(isMimeTypeEqual): Must be final.
+ 	(getDefaultRepresentationClass): Must be non-static.
+ 	(getDefaultRepresentationClassAsString): Must be non-static.
+ 	* java/awt/dnd/DragSourceContext.java
+ 	(dragExit): Corrected argument.
+ 	(dragDropEnd): Corrected argument.
+ 	* java/awt/dnd/DragSourceListener.java
+ 	(dragExit): Corrected argument.
+ 	(dragDropEnd): Corrected argument.
+ 	* java/awt/font/TextHitInfo.java
+ 	(toString): Added stubbed implementation.
+ 	* java/awt/geom/PathIterator.java:
+ 	The constants must be static.
+ 	* java/awt/image/VolatileImage.java
+ 	(IMAGE_INCOMPATIBLE): Fixed typo.
+ 	* java/awt/image/renderable/RenderableImage.java
+ 	(HINTS_OBSERVED): Must be static.
+ 	* java/beans/BeanInfo.java:
+ 	Constants must be final.
+ 
+ 2002-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	From svens@it.uu.se:
+ 	* java/util/Random.java (nextInt(int)): Only use 31 bits.
+ 
+ 2002-11-06  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/AbstractMap.java (values().contains): Add missing
+ 	method.
+ 	* java/util/HashMap.java (HashEntry.access): New method.
+ 	(put): Call it.
+ 	(getEntry): Optimize.
+ 	(readObject): Fix deserialization of LinkedHashMap.
+ 	* java/util/LinkedHashMap.java (head): replace root and tail for
+ 	more efficient and more compliant implementation.
+ 	(LinkedHashEntry.access): Implement.
+ 
+ 2002-11-04  R. A. Rivas Diaz  <rivasdiaz@yahoo.com>
+ 
+ 	* gnu/java/security/provider/SHA.java (engineGetDigestLength):
+ 	Return 20.
+ 	* gnu/java/security/provider/MD5.java (engineGetDigestLength):
+ 	Return 16.
+ 
+ 2002-11-04  Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/jar/Attributes.java (Name): Fix name check.
+ 
+ 2002-11-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/nio/channels/AlreadyConnectedException.java: Extend
+ 	IllegalStateException, per spec.
+ 
+ 2002-11-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-io/java_io_ObjectInputStream.c
+ 	(Java_java_io_ObjectInputStream_currentClassLoader): Return result of
+ 	CallObjectMethod().
+ 
+ 2002-10-31  Mark Wielaard  <mark@klomp.org>:
+ 
+ 	* java/net/URLDecoder.java: Indentation and documentation update.
+ 	* java/net/URLEncoder.java: Likewise.
+ 
+ 2002-10-31  Mark Wielaard  <mark@klomp.org>:
+ 
+ 	* java/util/zip/ZipFile.java: Indentation fixes.
+ 
+ 2002-10-31  Mark Anderson  <mark@panonet.net>
+ 
+ 	* java/awt/GridBagLayout.java (setConstraints): New stubbed method
+ 	added
+ 
+ 2002-10-31  Mark Wielaard  <mark@klomp.org>:
+ 
+ 	Merge Orp RMI patches from Wu Gansha <gansha.wu@intel.com>
+ 	* configure.in (AC_OUTPUT): Add javax/rmi/Makefile,
+ 	* gnu/javax/Makefile, gnu/javax/rmi/Makefile,
+ 	javax/rmi/CORBA/Makefile and gnu/javax/rmi/CORBA/Makefile.
+ 	* javax/.cvsignore: New File.
+ 	* javax/Makefile.am (SUBDIRS): Add rmi.
+ 	* javax/rmi/.cvsignore: New File.
+ 	* javax/rmi/Makefile.am: New file.
+ 	* javax/rmi/CORBA/.cvsignore: New file.
+ 	* javax/rmi/CORBA/Makefile.am: New file.
+ 	* gnu/Makefile.am (SUBDIRS): Add javax.
+ 	* gnu/javax/.cvsignore: New file.
+ 	* gnu/javax/Makefile.am: New file.
+ 	* gnu/javax/rmi/.cvsignore: New file.
+ 	* gnu/javax/rmi/Makefile.am: New file.
+ 	* gnu/javax/rmi/CORBA/.cvsignore: New file.
+ 	* gnu/javax/rmi/CORBA/Makefile.am: New file.
+ 
+ 	* java/rmi/MarshalledObject.java (equals): Check hashcode first.
+ 
+ 	* java/rmi/server/RMIClassLoader.java (MyClassLoader): Create/Use
+ 	annotation.
+ 	(loadClass): Take String as codebases.
+ 	(getClassAnnotation): Use MyClassLoader annotations.
+ 	* java/rmi/server/UnicastRemoteObject.java (UnicastRemoteObject):
+ 	call exportObject(this).
+ 
+ 	* gnu/java/rmi/RMIMarshalledObjectOutputStream.java
+ 	(RMIMarshalledObjectOutputStream): set locBytesStream and locStream.
+ 	(setAnnotation): Don't set locBytesStream and locStream.
+ 	(replaceObject): Removed.
+ 	(flush): Don't test locStream.
+ 	(getLocButes): LikeWise.
+ 	* gnu/java/rmi/dgc/DGCImpl.java: extends UnicastServerRef.
+ 	(leaseCache): New field.
+ 	(dirty): Use leaseCache.
+ 	(LeaseRecord): New inner class.
+ 	* gnu/java/rmi/registry/RegistryImpl.java (RegistryImpl): Don't
+ 	explicitly call exportObject().
+ 	* gnu/java/rmi/registry/RegistryImpl_Stub.java: set useNewInvoke to
+ 	false to communicate with Sun JDK130.
+ 	* gnu/java/rmi/server/ConnectionRunnerPool.java: Add CPU comment.
+ 	* gnu/java/rmi/server/RMIObjectInputStream.java
+ 	(UnicastConnectionManager): Removed field.
+ 	* gnu/java/rmi/server/RMIObjectOutputStream.java (replaceObject):
+ 	Use UnicastServer.getExportedRef().
+ 	* gnu/java/rmi/server/UnicastConnection.java (reviveTime): New field.
+ 	(expireTime): Likewise.
+ 	(CONNECTION_TIMEOUT): Likewise.
+ 	(disconnect): Call sock.close().
+ 	(isExpired): New method.
+ 	(resetTime): Likewise.
+ 	(run): Use do while loop and catch Exception for discardConnection().
+ 	* gnu/java/rmi/server/UnicastConnectionManager.java: Pool connections.
+ 	* gnu/java/rmi/server/UnicastRef.java: Lots of changes.
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java: Lots of changes.
+ 	* gnu/java/rmi/server/UnicastServer.java (refcache): New field.
+ 	(exportObject): Use refcache.
+ 	(unexportObject): Likewise.
+ 	(getExportedRef): New method.
+ 	* gnu/java/rmi/server/UnicastServerRef.java (UnicastServerRef): New
+ 	constructor.
+ 	(exportObject): Save manager.serverobj.
+ 	(getStub): New method.
+ 
+ 	* javax/rmi/PortableRemoteObject.java: New file.
+ 	* gnu/javax/rmi/PortableServer.java: Likewise.
+ 
+ 	* javax/rmi/CORBA/ClassDesc.java: New file.
+ 	* javax/rmi/CORBA/PortableRemoteObjectDelegate.java: Likewise.
+ 	* javax/rmi/CORBA/Stub.java: Likewise.
+ 	* javax/rmi/CORBA/StubDelegate.java: Likewise.
+ 	* javax/rmi/CORBA/Tie.java: Likewise.
+ 	* javax/rmi/CORBA/Util.java: Likewise.
+ 	* javax/rmi/CORBA/UtilDelegate.java: Likewise.
+ 	* javax/rmi/CORBA/ValueHandler.java: Likewise.
+ 	* gnu/javax/rmi/CORBA/DelegateFactory.java: Likewise.
+ 	* gnu/javax/rmi/CORBA/GetDelegateInstanceException.java: Likewise.
+ 	* gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java: Likewise.
+ 	* gnu/javax/rmi/CORBA/StubDelegateImpl.java: Likewise.
+ 	* gnu/javax/rmi/CORBA/UtilDelegateImpl.java: Likewise.
+ 	* gnu/javax/rmi/CORBA/ValueHandlerImpl.java: Likewise.
+ 
+ 	* javax/rmi/BAD_OPERATION.java: Stub class.
+ 	* javax/rmi/ORB.java: Likewise
+ 	* javax/rmi/CORBA/ObjectImpl.java: Likewise
+ 	* javax/rmi/CORBA/SystemException.java: Likewise.
+ 
+ 2002-10-30  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/Level.java (isStandardLevel): New package-private
+ 	method, used by java.util.logging.XMLFormatter.
+ 
+ 2002-10-30  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/LogManager.java (addLogger): Adding a named
+ 	logger now throws a SecurityException unless the caller has been
+ 	granted a LoggingPermission("control").
+ 	(reset): Likewise.
+ 	(reset): Clear LogManager properties.
+ 	(getProperty): Add Javadoc.
+ 
+ 2002-10-30  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/Logger.java (anonymous): Add private flag to
+ 	indicate whether security checks are performed. The previous
+ 	implementation checked for name == null, but Sun J2SE 1.4 seems to
+ 	enforce security for any logger unless it is created by
+ 	getAnonymousLogger(), even if its name is null.
+ 	
+ 	(threshold, recalcThreshold, SEVERE_THRESHOLD, WARNING_THRESHOLD,
+ 	INFO_THRESHOLD, CONFIG_THRESHOLD, FINE_THRESHOLD, FINER_THRESHOLD,
+ 	FINEST_THRESHOLD, entering, exiting, throwing, severe, warning,
+ 	info, config, fine, finer, finest): Remove threshold caching, use
+ 	isLoggable(Level) instead.
+ 
+ 	(global, name, resourceBundleName, info, removeHandler): Improve
+ 	Javadoc.
+ 
+ 	(getLogger): Throw an exception if a newly created logger cannot
+ 	be registered. Improve Javadoc.
+ 
+ 	(getLogger): If a logger has been registered under the same name,
+ 	but without a resource bundle, return the existing logger after
+ 	associating it with the specified bundle. The previous
+ 	implementation would have thrown an exception; the current behaves
+ 	like Sun J2SE1.4.
+ 
+ 	(log): If the LogRecord's logger name is null, set it to the name
+ 	of this logger.
+ 
+ 	(log): Avoid that some other thread is changing the logger
+ 	hierarchy while we are traversing it. Previous code had a race
+ 	condition.
+ 
+ 	(log): Invoke only the filter of the logger whose log method is
+ 	called, not for any of its parents.  Parent loggers publish
+ 	everything, without considering either their level threshold or
+ 	their filter.  This is weird, but seems to be the behavior of the
+ 	Sun J2SE 1.4 reference implementation.
+ 
+ 	(addHandler, removeHandler, setParent): Throw NullPointerException
+ 	for null arguments.
+ 
+ 2002-10-30  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/SimpleFormatter.java (format): Generate output
+ 	similar to the Sun J2SE 1.4 reference implementation. Improve Javadoc.
+ 
+ 2002-10-30  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/StreamHandler.java (setEncoding, publish):
+ 	Clarify Javadoc. Add comments to explain interaction with the
+ 	inherited implementation.
+ 
+ 	(close): Report ErrorManager.CLOSE_FAILURE instead of
+ 	FLUSH_FAILURE if a closed stream is closed again.
+ 
+ 	(close): Emit head and tail strings even if no record has ever
+ 	been published to the stream.  The previous implementation caused
+ 	XML log files to be empty, which is different to the behavior of
+ 	Sun J2SE 1.4.
+ 
+ 2002-10-30  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/XMLFormatter.java (lineSep): Add comment
+ 	explaining rationale for different different to Sun J2SE 1.4.
+ 
+ 	(iso8601): Add comment explaining why we cannot use a singleton
+ 	instance.
+ 
+ 	(appendTag): Use XML esacpe sequences for '&', '<', '>' and
+ 	any non-ASCII characters.
+ 
+ 	(isStandardLevel): Moved to java.util.logging.Level.
+ 
+ 	(format): Try to match the output of Sun J2SE 1.4 implementation,
+ 	even where this is in violation of the their own API specification.
+ 	See the source for details.
+ 
+ 	(getHead): Explain why SYSTEM is a relative URL.
+ 
+ 2002-10-30  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/ConsoleHandler.java: Specify correct
+ 	LogManager configuration properties in Javadoc; implementation was ok.
+ 	* java/util/logging/FileHandler.java (replaceFileNameEscapes):
+ 	Fix Javadoc typo.
+ 	(pattern): Likewise.
+ 	* java/util/logging/Formatter.java (getHead, getTail): Better Javadoc.
+ 	* java/util/logging/Handler.java: Re-indent Javadoc.
+ 	* java/util/logging/LogRecord.java (setLevel): Re-indent Javadoc.
+ 
+ 2002-10-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-io/javaio.c (_javaio_read): Return 0, if len == 0.
+ 	(_javaio_write): Likewise.
+ 
+ 2002-10-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/ZipInputStream.java (getNextEntry): Throw IOException
+ 	when stream is closed.
+ 	(closeEntry): Likewise.
+ 	(read): Likewise.
+ 	* java/util/zip/ZipOutputStream.java (putNextEntry): Throw ZipException
+ 	when no entry active.
+ 	(closeEntry): Likewise.
+ 	(write): Likewise.
+ 
+ 2002-10-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/FileInputStream (close): Check native_fd != -1.
+ 	* java/io/FileOutputStream.java (close): Likewise.
+ 	* java/io/RandomAccessFile.java (close): Likewise.
+ 
+ 2002-10-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/ZipFile.java (readLeShort): Take and use DataInput as
+ 	argument.
+ 	(readLeShort): Likewise and use byte[].
+ 	(readLeInt): Likewise.
+ 	(readEntries): Use new versions of methods and use byte[] for reading
+ 	a complete zip entry. Add ZipFile name to exceptions.
+ 	(entries): Add ZipFile name to exceptions.
+ 	(getEntry): Likewise.
+ 	(checkLocalHeader): Use new versions of methods and add ZipFile name
+ 	to exceptions.
+ 
+ 2002-10-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/ClassLoader.java (normalize): New method,
+ 	(getResource): Use normalize.
+ 	(getResources): Likewise.
+ 	* java/net/URLClassLoader.java: Complete rewrite.
+ 
+ 2002-10-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/Class.java (forName): Use VMClassLoader as
+ 	bootstrap classloader when classloader == null.
+ 	* vm/reference/java/lang/VMClassLoader.java: Indicate methods that
+ 	should be implemented by the VM and don't rely on the
+ 	application/system classloader to prevent circular class call
+ 	chains.
+ 	* java/lang/ClassLoader.java (ClassLoader): Use systemClassLoader
+ 	directly.
+ 	(findSystemClass): Likewise.
+ 	(getSystemResources): Likewise.
+ 
+ 2002-10-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/Class.java (getClassLoader): Return null for
+ 	classes starting with "java." or "gnu.java.".
+ 
+ 2002-10-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLDecoder.java (decode): Initialize Stringbuffer size to
+ 	length of String.
+ 	* java/net/URLEncoder.java (encode): Likewise.
+ 
+ 2002-10-25  Wu Gansha <gansha.wu@intel.com>:
+ 
+ 	* vm/reference/java/lang/reflect/Constructor.java (toString): Use 128
+ 	as initial StringBuffer size.
+ 	* vm/reference/java/lang/reflect/Field.java (toString): Use 64 as
+ 	initial StringBuffer size.
+ 	* vm/reference/java/lang/reflect/Method.java (equals): Explicitly
+ 	check for null.
+ 	(toString): Use 128 as initial StringBuffer size.
+ 
+ 2002-10-25  Wu Gansha <gansha.wu@intel.com>:
+ 
+ 	* java/lang/reflect/Proxy.java (ProxyType): Set loader to System
+ 	ClassLoader when null.
+ 	(ProxyType.hashCode): Loader null check no longer needed.
+ 	(ProxyType.sameTypes): New method.
+ 	(ProxyType.equals): Use new method.
+ 
+ 2002-10-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/net/protocol/jar/JarURLConnection.java (JarFileCache.get):
+ 	Always verify the Manifest, open read only and delete when done if
+ 	appropriate.
+ 
+ 2002-10-25  Wu Gansha <gansha.wu@intel.com>:
+ 
+ 	* java/io/DataInputStream.java (convertFromUTF): Give StringBuffer an
+ 	initial estimated size to avoid enlarge buffer frequently.
+ 
+ 2002-10-25  Wu Gansha <gansha.wu@intel.com>:
+ 
+ 	* java/util/ArrayList.java (readObject, writeObject): Only read/write
+ 	size items.
+ 
+ 2002-10-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/File.java: Remove all commented out security checks.
+ 	(listFiles(FilenameFilter)): Return null when filelist == null.
+ 	(listFiles(FileFilter)): Return null when fobjlist == null, return
+ 	filelist when filter == null.
+ 	* native/jni/java-io/java_io_File.c: Return empty array for empty dir.
+ 
+ 2002-10-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Merged patches from Wu Gansha <gansha.wu@intel.com>:
+ 	* gnu/java/io/PlatformHelper.java (INITIAL_MAX_PATH): new constant.
+ 	(toCanonicalForm): Use new constant to optimize StringBuffer usage.
+ 	Return lowercase path when isWindows == true.
+ 	* gnu/java/lang/SystemClassLoader.java (classpath): New static field.
+ 	(pathinfos): Likewise.
+ 	(getSystemResource): Refactored, cache partial result for each path
+ 	item in classpath.
+ 	* gnu/java/net/protocol/file/Handler.java (toExternalForm): New
+ 	method implementation specific to file protocol.
+ 	* gnu/java/net/protocol/http/HttpURLConnection.java
+ 	(buffered_out_stream): New field.
+ 	(connect): Don't set in_stream, wrap out_stream BufferedOutputStream.
+ 	Move sending request and receiveing reesponce to new methods.
+ 	(sendRequest): New method.
+ 	(receiveReply): Likewise.
+ 	(setRequestMethod): Accept "POST".
+ 	(getInputStream): When in_stream == null, call SendRequest() and
+ 	ReceiveReply().
+ 	(getOutputStream): New method.
+ 	* gnu/java/net/protocol/jar/Handler.java (toExternalForm): New
+ 	optimized method.
+ 	* gnu/java/net/protocol/jar/JarURLConnection.java (getContentLength):
+ 	New method.
+ 	* java/net/URL.java (URL): Remove toLowerCase() when calling this().
+ 	* java/net/URLConnection.java (req_props): Made final, set in
+ 	constructor using Hashtable(Map).
+ 	(setRequestProperty): Not synchronized.
+ 	(getRequestProperties): New method.
+ 	* java/net/URLStreamHandler (toExternalForm): Use StringBuffer.
+ 
+ 2002-10-16  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: Updated link to nightly japi results to
+ 	point to alpha.gnu.org.
+ 
+ 2002-10-10  C. Brian Jones <cbj@gnu.org>
+ 	
+ 	* configure.in: Fix goof I made earlier when AC_DEFINE'd stuff
+ 	was changed since acconfig.h went away.
+ 
+ 2002-10-10  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/lang/Double.java (valueOf): Return new Double(parseDouble(s)).
+ 	* native/jni/java-lang/java_lang_Double.c
+ 	(Java_java_lang_Double_toString): Add extra brackets in if expression.
+ 	(Java_java_lang_Double_parseDouble): Throw NullPointerException when
+ 	str == NULL.
+ 
+ 2002-10-10  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/reflect/Proxy.java: Fix checking for duplicate
+ 	interfaces.
+ 
+ 2002-10-08  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: Updated status section, provide link
+ 	to daily updated japicompat results against Java 2, 1.3.  Will
+ 	use results against 1.4 when the tool supports it.
+ 
+ 2002-10-08  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/Logger.java (toString): Remove method,
+ 	use inherited java.lang.Object.toString() instead.
+ 
+ 2002-10-06  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/status.wml: Removed since it is no longer used.
+ 
+ 2002-10-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (AC_OUTPUT): Remove com/Makefile, com/sun/Makefile
+ 	and com/sun/javadoc/Makefile.
+ 	* Makefile.am (SUBDIRS): Remove com.
+ 	* lib/Makefile.am (install-data-local): Don't copy com dir.
+ 	(glibj.zip): Don't zip com dir.
+ 	(maintainer-clean-local): Don't remove com dir.
+ 	* gen-classlist.sh.in: Remove com dir from find.
+ 	* com/.cvsignore: Removed.
+ 	* com/Makefile.am: Removed.
+ 	* com/sun/.cvsignore: Removed.
+ 	* com/sun/Makefile.am: Removed.
+ 	* com/sun/javadoc/.cvsignore: Removed.
+ 	* com/sun/javadoc/ClassDoc.java: Removed.
+ 	* com/sun/javadoc/ConstructorDoc.java: Removed.
+ 	* com/sun/javadoc/Doc.java: Removed.
+ 	* com/sun/javadoc/DocErrorReporter.java: Removed.
+ 	* com/sun/javadoc/Doclet.java: Removed.
+ 	* com/sun/javadoc/ExecutableMemberDoc.java: Removed.
+ 	* com/sun/javadoc/FieldDoc.java: Removed.
+ 	* com/sun/javadoc/MemberDoc.java: Removed.
+ 	* com/sun/javadoc/MethodDoc.java: Removed.
+ 	* com/sun/javadoc/PackageDoc.java: Removed.
+ 	* com/sun/javadoc/ParamTag.java: Removed.
+ 	* com/sun/javadoc/Parameter.java: Removed.
+ 	* com/sun/javadoc/ProgramElementDoc.java: Removed.
+ 	* com/sun/javadoc/RootDoc.java: Removed.
+ 	* com/sun/javadoc/SeeTag.java: Removed.
+ 	* com/sun/javadoc/SerialFieldTag.java: Removed.
+ 	* com/sun/javadoc/Tag.java: Removed.
+ 	* com/sun/javadoc/ThrowsTag.java: Removed.
+ 	* com/sun/javadoc/Type.java: Removed.
+ 	* com/sun/javadoc/Makefile.am: Removed.
+ 	* NEWS: Document javadoc class move.
+ 
+ 	* vm/reference/Makefile.am (SUBDIRS): Remove gnu.
+ 
+ 2002-10-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (AC_OUTPUT): Remove vm/reference/gnu/Makefile,
+ 	vm/reference/gnu/vm/Makefile and vm/reference/gnu/vm/stack/Makefile.
+ 	* gnu/java/lang/Makefile.am (EXTRA_DIST): Remove ExecutionStack.java
+ 	and StackFrame.java.
+ 	* gnu/java/lang/ExecutionStack.java: Removed.
+ 	* gnu/java/lang/StackFrame.java: Removed.
+ 	* vm/reference/gnu/.cvsignore: Removed.
+ 	* vm/reference/gnu/Makefile.am: Removed.
+ 	* vm/reference/gnu/vm/.cvsignore: Removed.
+ 	* vm/reference/gnu/vm/Makefile.am: Removed.
+ 	* vm/reference/gnu/vm/stack/.cvsignore: Removed.
+ 	* vm/reference/gnu/vm/stack/Makefile.am: Removed.
+ 	* vm/reference/gnu/vm/stack/StackFrame.java: Removed.
+ 	* vm/reference/gnu/vm/stack/StackTrace.java: Removed.
+ 	* NEWS: Explain removal.
+ 
+ 2002-10-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Makefile.am (EXTRA_DIST): Add Throwable.java
+ 	* vm/reference/java/lang/Makefile.am (EXTRA_DIST): Remove
+ 	Throwable.java, add VMThrowable.java.
+ 
+ 2002-10-04  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* .cvsignore: Ignore all automt4e*.cache files
+ 
+ 2002-10-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Mention the new VMThrowable interface.
+ 	* doc/vmintegration.texinfo: Update Throwable documentation.
+ 	* java/lang/StackTraceElement (toString): Add whitespace.
+ 	* java/lang/Throwable.java: New file.
+ 	* vm/reference/java/lang/Throwable.java: Removed file.
+ 	* vm/reference/java/lang/VMThrowable.java: New file.
+ 
+ 2002-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URI.java: New stub file, by request of Giannis Georgalis.
+ 	* java/net/Makefile.am: Added URI.java.
+ 
+ 2002-10-03  C. Scott Ananian <cananian@lesser-magoo.lcs.mit.edu>
+ 
+ 	* java/lang/Character.java (zeroBasedStringValue): Removed.
+ 	* java/lang/String.java (zeroBasedStringValue): Added.
+ 	* java/lang/ProtectionDomain.java (linesep): Remove field.
+ 	(toString): Use System.getProperty("line.separator").
+ 
+ 2002-10-03  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* vm/reference/java/lang/Thread.java (Thread): Use root ThreadGroup,
+ 	NORM_PRIORITY and set daemon flag to false when currentThread == null.
+ 
+ 2002-10-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in: Set VERSION to 0.04+cvs.
+ 	* gnu/classpath/Configuration.java (CLASSPATH_VERSION): New field.
+ 	* java/lang/System.java (static): Set gnu.classpath.version property.
+ 
+ 2002-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/CardLayout.java: Added serialVersionUID.
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java:
+ 	Added serialVersionUID.
+ 	* java/awt/Cursor.java: Added serialVersionUID.
+ 	* java/awt/Event.java: Added serialVersionUID.
+ 	* java/awt/GridBagConstraints.java: Added serialVersionUID.
+ 	* java/awt/GridBagLayout.java: Added serialVersionUID.
+ 	* java/awt/GridLayout.java: Added serialVersionUID.
+ 	* java/awt/datatransfer/DataFlavor.java: Added serialVersionUID.
+ 	* java/awt/dnd/DragSourceContext.java: Added serialVersionUID.
+ 	* java/awt/dnd/DropTargetContext.java: Added serialVersionUID.
+ 	* java/beans/beancontext/BeanContextChildSupport.java:
+ 	Added serialVersionUID.
+ 	* java/io/Externalizable.java: Added serialVersionUID.
+ 	* java/io/File.java: Added serialVersionUID.
+ 	* java/io/FilePermission.java: Added serialVersionUID.
+ 	* java/io/Serializable.java: Added serialVersionUID.
+ 	* java/io/SerializablePermission.java: Added serialVersionUID.
+ 	* java/net/DatagramPacket.java: New intendation.
+ 	* java/rmi/activation/ActivationDesc.java: Added serialVersionUID.
+ 	* java/rmi/activation/ActivationGroupDesc.java: Added serialVersionUID.
+ 	* java/rmi/activation/ActivationID.java: Added serialVersionUID.
+ 	* java/rmi/activation/ActivationGroupID.java: Added serialVersionUID.
+ 	* java/security/Identity.java: Added serialVersionUID.
+ 	* java/security/KeyPair.java: Added serialVersionUID.
+ 	* java/security/Provider.java: Added serialVersionUID.
+ 	* java/security/SecureRandom.java: Added serialVersionUID.
+ 	* java/security/SecureRandomSpi.java: Added serialVersionUID.
+ 	* java/security/SignedObject.java: Added serialVersionUID.
+ 	* java/security/cert/Certificate.java: Added serialVersionUID.
+ 	* java/text/Format.java: Added serialVersionUID.
+ 	* java/util/prefs/BackingStoreException.java: Added serialVersionUID.
+ 	* java/util/prefs/InvalidPreferencesFormatException.java:
+ 	Added serialVersionUID.
+ 	* javax/naming/BinaryRefAddr.java: Added serialVersionUID.
+ 	* javax/naming/Name.java: Added serialVersionUID.
+ 	* javax/swing/AbstractAction.java: Added serialVersionUID.
+ 	* javax/swing/AbstractCellEditor.java: Added serialVersionUID.
+ 	* javax/swing/AbstractListModel.java: Added serialVersionUID.
+ 	* javax/swing/ActionMap.java: Added serialVersionUID.
+ 	* javax/swing/ButtonGroup.java: Added serialVersionUID.
+ 	* javax/swing/DefaultBoundedRangeModel.java: Added serialVersionUID.
+ 	* javax/swing/DefaultButtonModel.java: Added serialVersionUID.
+ 	* javax/swing/DefaultCellEditor.java: Added serialVersionUID.
+ 	* javax/swing/DefaultComboBoxModel.java: Added serialVersionUID.
+ 	* javax/swing/DefaultDesktopManager.java: Added serialVersionUID.
+ 	* javax/swing/DefaultListCellRenderer.java: Added serialVersionUID.
+ 	* javax/swing/DefaultSingleSelectionModel.java: Added serialVersionUID.
+ 	* javax/swing/InputMap.java: Added serialVersionUID.
+ 	* javax/swing/JComponent.java: Added serialVersionUID.
+ 	* javax/swing/JMenu.java: Added serialVersionUID.
+ 	* javax/swing/JSlider.java: Added serialVersionUID.
+ 	* javax/swing/KeyStroke.java: Added serialVersionUID.
+ 	* javax/swing/OverlayLayout.java: Added serialVersionUID.
+ 	* javax/swing/ScrollPaneLayout.java: Added serialVersionUID.
+ 	* javax/swing/SizeRequirements.java: Added serialVersionUID.
+ 	* javax/swing/UIManager.java: Added serialVersionUID.
+ 	* javax/swing/ViewportLayout.java: Added serialVersionUID.
+ 	* javax/swing/border/AbstractBorder.java: Added serialVersionUID.
+ 	* javax/swing/colorchooser/DefaultColorSelectionModel.java:
+ 	Added serialVersionUID.
+ 	* javax/swing/event/EventListenerList.java: Added serialVersionUID.
+ 	* javax/swing/plaf/BorderUIResource.java: Added serialVersionUID.
+ 	* javax/swing/plaf/IconUIResource.java: Added serialVersionUID.
+ 	* javax/swing/plaf/basic/BasicIconFactory.java: Added serialVersionUID.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Added serialVersionUID.
+ 	* javax/swing/table/AbstractTableModel.java: Added serialVersionUID.
+ 	* javax/swing/table/DefaultTableCellRenderer.java:
+ 	Added serialVersionUID.
+ 	* javax/swing/table/DefaultTableColumnModel.java:
+ 	Added serialVersionUID.
+ 	* javax/swing/table/DefaultTableModel.java: Added serialVersionUID.
+ 	* javax/swing/table/TableColumn.java: Added serialVersionUID.
+ 	* javax/swing/text/StyledEditorKit.java: Added serialVersionUID.
+ 	* javax/swing/tree/DefaultMutableTreeNode.java: Added serialVersionUID.
+ 	* javax/swing/tree/DefaultTreeModel.java: Added serialVersionUID.
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java:
+ 	Added serialVersionUID.
+ 	* javax/swing/tree/TreePath.java: Added serialVersionUID.
+ 	* javax/swing/undo/AbstractUndoableEdit.java: Added serialVersionUID.
+ 
+ 2002-09-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/RefAddr:
+ 	(addrType): addrType was never final.
+ 	(equals): Fix typo in method name.
+ 	* javax/naming/BinaryRefAddr:
+ 	(equals): Fix typo in method name.
+ 
+ 2002-09-30  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/LogManager.java (pcs): Pass the LogManager
+ 	class object, not the singleton instance, to the constructor of the
+ 	PropertyChangeSupport delegate. The generated PropertyChangeEvents
+ 	now indicate the same event source as the Sun J2SE 1.4 reference
+ 	implementation.
+ 	
+ 	* java/util/logging/LogManager.java (readConfiguration):
+ 	Pass null for the property name, so listeners receive the same
+ 	PropertyChangeEvent as they would when running Sun J2SE 1.4.
+ 	
+ 	* java/util/logging/LogManager.java (getLogger): Passing null
+ 	now throws a NullPointerException, as with Sun J2SE 1.4.
+ 	
+ 	* java/util/logging/LogManager.java (reset): Fix a bug which
+ 	would cause spurious NullPointerExceptions upon resetting
+ 	the log manager configuration.  A WeakReference had not been
+ 	checked for null.
+ 	
+ 	* java/util/logging/LogManager.java (getIntPropertyClamped):
+ 	New package-private method for properties inside an integer range.
+ 
+ 	* java/util/logging/MemoryHandler.java (constructor):
+ 	Take configuration from log manager properties.  Docfixes.
+ 	Throw exception for size values <= 0.
+ 
+ 2002-09-29  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: use AC_DEFINE templates instead of acconfig.h
+ 	* acconfig.h: removed
+ 	* lib/Makefile.am: make use of -target 1.1 when using Jikes
+ 
+ 2002-09-28  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/home.wml: add information on API testing with japitools and
+ 	jdiff.sh, maybe we can get this comparison automated eventually and
+ 	link it as well.
+ 
+ 2002-09-28  C. Brian Jones <cbj@gnu.org>
+ 	* doc/hacking.texinfo: Small updates to correct directory tree 
+ 	structure, added a note about serialVersionUID and verbatim copying
+ 	of Eric Blake's words on the mailing list.
+ 
+ 2002-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/dnd/DragSourceAdapter.java: 
+ 	(dragExit, dragDropEnd): Fixed argument types.
+ 	* java/awt/dnd/DropTarget.java:
+ 	Added stubs for all methods and the subclass.
+ 	* java/awt/dnd/Autoscroll.java: New file.
+ 	* java/awt/dnd/DragSourceDropEvent.java: New file.
+ 	* java/awt/dnd/DropTargetAdapter.java: New file.
+ 	* java/awt/dnd/DropTargetContext.java: New file.
+ 	* java/awt/dnd/DropTargetDragEvent.java: New file.
+ 	* java/awt/dnd/DropTargetDropEvent.java: New file.
+ 	* java/awt/dnd/DropTargetEvent.java: New file.
+ 	* java/awt/dnd/DropTargetListener.java: New file.
+ 	* java/awt/dnd/MouseDragGestureRecognizer.java: New file.
+ 	* java/awt/dnd/peer/DropTargetContextPeer.java: New file.
+ 	* java/awt/dnd/Makefile.am: Adding all the new files.
+ 
+ 2002-09-26  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/applet/AppletContext.java (setStream): Fix signature typo.
+ 	* javax/accessibility/AccessibleEditableText.java (cut, delete):
+ 	Ditto.
+ 	* javax/accessibility/AccessibleHyperlink.java
+ 	(getAccessibleActionAnchor, getAccessibleActionObject): Ditto.
+ 
+ 2002-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Choice.java
+ 	(remove): Fix exception documentation.
+ 	(select): Fix exception documentation.
+ 	* java/awt/Container.java
+ 	(add): Fix exception documentation.
+ 	(addImpl): Fix exception documentation.
+ 	* java/awt/DisplayMode.java
+ 	(equals): Fix argument type.
+ 
+ 2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	* java/util/TimeZone.java (getDSTSavings): New method.
+ 
+ 2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	* java/util/zip/ZipInputStream.java (entryAtEOF): New field.
+ 	(getNextEntry): Set it.
+ 	(closeEntry): Likewise.
+ 	(read): Likewise.
+ 	(close): Likewise.
+ 	(available): Use it.
+ 
+ 2002-09-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (tryBundle): Cache `null' if we
+ 	didn't find a given bundle.
+ 	(getBundle): Don't require base bundle.
+ 	(setParent): Removed old comment.
+ 	(tryLocalBundle): Try components even if preceding components were
+ 	empty.
+ 
+ 2002-09-22  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: remove old task list, refer to Savannah instead.
+ 	Updated list of projects using GNU Classpath.
+ 
+ 2002-09-17  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/ErrorManager.java: Verify correctness of
+ 	constant field values.
+ 	* java/util/logging/Logger.java,
+ 	java/util/logging/MemoryHandler.java,
+ 	java/util/logging/SocketHandler.java,
+ 	java/util/logging/StreamHandler.java: Minor docfixes.
+ 
+ 2002-09-17  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* resource/java/util/iso639_de.properties: Correct German language
+ 	names.  Most names verified using an encyclopedia of Linguistics.
+ 
+ 2002-09-16  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/String.java (compareToIgnoreCase): Update to use the
+ 	new behavior documented in JDK 1.4.1.
+ 	* java/lang/Package.java: Improve comments and formatting.
+ 	* java/lang/System.java: Ditto.
+ 
+ 2002-09-12  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/net/URLClassLoader.java: import java.io.File.
+ 
+ 2002-09-10  C. Scott Ananian <cananian@lesser-magoo.lcs.mit.edu>
+ 
+ 	* INSTALL: Add note about installing from CVS.
+ 
+ 2002-09-10  C. Scott Ananian <cananian@lesser-magoo.lcs.mit.edu>
+ 
+ 	* vm/reference/java/lang/Thread.java: Fix comment threat -> thread.
+ 
+ 2002-09-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/VMObject.java (getClass): Removed.
+ 
+ 2002-09-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLClassLoader.java (findClass): Also construct CodeSource
+ 	for "file" protocol.
+ 
+ 2002-09-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Thanks to rzschech. Closes bug #1132.
+ 	* gnu/java/util/prefs/NodeReader.java (readRoot): Also use "system".
+ 
+ 2002-09-09  John Leuner  <jewel@debian.org>
+ 
+ 	* native/fdlibm/ieeefp.h: added check for S390 arch
+ 
+ 2002-09-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/Makefile.am: Use --bootclasspath for gcj.
+ 	* java/net/Socket.java (shutdownInput, shutdownOutput): Comment out
+ 	implementation.
+ 
+ 2002-09-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java (shutdonwInput, shutdownOutput, getChannel):
+ 	re-add accidently removed code.
+ 
+ 2002-08-30  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	* java/util/Calendar.java (getTimeInMillis, getTimeInMillis): Now
+ 	public, per 1.4 spec.
+ 
+ 2002-08-30  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/net/SocketInputStream.java (read): Don't promote byte value
+ 	to signed int. From Jeroen Frijters <jeroen@sumatra.nl>.
+ 
+ 2002-08-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramPacket.java: updated to JDK 1.4 API
+ 	new methods are:
+ 	DatagramPacket(byte[] buf, int offset, int length, SocketAddress
+ 	address),
+ 	DatagramPacket(byte[] buf, int length, SocketAddress address),
+ 	void setSocketAddress(SocketAddress address)
+ 	public SocketAddress getSocketAddress()
+ 
+ 2002-08-28  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/InetSocketAddress.java: Added some documentation and argument
+ 	checks for the port numbers.
+ 	* java/net/DatagramSocketImplFactory.java: New file.
+ 
+ 2002-08-28  Michael Koch <konqueror@gmx.de>
+ 
+ 	* javax/swing/colorchooser/.cvsignore,
+ 	javax/swing/filechooser/.cvsignore,
+ 	javax/swing/text/html/.cvsignore,
+ 	javax/swing/text/html/parser/.cvsignore: added some CVS ignore files.
+ 
+ 2002-08-28  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/Authenticator.java: added some documentation.
+ 
+ 2002-08-27  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/BindException.java,
+ 	java/net/JarURLConnection.java,
+ 	java/net/FileNameMap.java,
+ 	java/net/HttpURLConnection.java,
+ 	java/net/InetSocketAddress.java,
+ 	java/net/DatagramPacket.java,
+ 	java/net/DatagramSocket.java,
+ 	java/net/DatagramSocketImpl.java,
+ 	java/net/MulticastSocket.java,
+ 	java/net/PasswordAuthentication.java,
+ 	java/net/ServerSocket.java,
+ 	java/net/Socket.java,
+ 	java/net/URLClassLoader.java,
+ 	java/net/URLConnection.java: add/update of some @since/@deprecated
+ 	
+ 2002-08-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Authenticator.java,
+ 	java/net/ContentHandler.java: Merge with libgcj. 
+ 	Updated to JDK 1.4 compatibility.
+ 	
+ 2002-08-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* vm/reference/java/lang/Runtime.java (exec): Pass `dir' argument
+ 	to execInternal.
+ 	(execInternal): Accept `dir' argument.
+ 	* NEWS: Updated.
+ 
+ 2002-08-18  Mark Wielaard <mark@klomp.org>
+ 
+ 	* gnu/classpath/Configuration.java.in: Add CLASSPATH_HOME field.
+ 	* java/lang/System.java: Set gnu.classpath.home property.
+ 	* java/security/Security.java: Use java.home are gnu.classpath.home
+ 	to load providers.
+ 	(loadProviders): Extra dir argument.
+ 	(getProvider): Return null when not found.
+ 
+ 2002-08-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* NEWS: Updated for Runtime change.
+ 	* vm/reference/java/lang/Runtime.java (exec): Don't create new
+ 	environment if ENV==null.
+ 	(execInternal): Updated documentation.
+ 
+ 2002-08-15  Mark Wielaard <mark@klomp.org>
+ 
+ 	* gnu/java/io/encode/Encoder.java (convertToBytes): Use offset and
+ 	len arguments.
+ 
+ 2002-08-13  Philip Fong <pwlfong@users.sourceforge.net>
+ 
+ 	* java/security/SecureClassLoader.java (SecureClassLoader): Only
+ 	create ProtectionDomain when CodeSource is not null. Don't catch and
+ 	ignore ClassFormatError.
+ 
+ 2002-08-13  C. Scott Ananian <cananian@lesser-magoo.lcs.mit.edu>
+ 
+ 	* native/jni/java-util/java_util_TimeZone.c
+ 	(Java_java_util_TimeZone_getDefaultTimeZoneId): Add standard jni doc
+ 	and remove call to NewGlobalRef.
+ 	* native/jni/java-lang/java_lang_Double.c: Clean up jni docs.
+ 	* native/jni/java-io/java_io_File.c: Likewise.
+ 	* native/jni/java-io/java_io_FileDescriptor.c: Likewise.
+ 	* native/jni/java-io/java_io_FileInputStream.c: Likewise.
+ 	* native/jni/java-io/java_io_FileOutputStream.c: Likewise.
+ 	* native/jni/java-io/java_io_ObjectInputStream.c: Likewise.
+ 	* native/jni/java-io/java_io_ObjectOutputStream.c: Likewise.
+ 	* native/jni/java-io/java_io_RandomAccessFile.c: Likewise.
+ 
+ 2002-08-13  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/lang/Character.java (zeroBasedStringValue): New method.
+ 	(blocks): Use zeroBasedStringValue().
+ 	(data): Likewise.
+ 	(numValue): Likewise.
+ 	(upper): Likewise.
+ 	(lower): Likewise.
+ 	(direction): Likewise.
+ 	(title): Likewise.
+ 	* java/lang/String.java (upperExpand): Use zeroBasedStringValue() from
+ 	Character.
+ 	(upperSpecial): Likewise.
+ 
+ 2002-08-11  Etienne M. Gagnon <etienne.gagnon@uqam.ca>
+ 
+ 	* gnu/java/locale/LocaleInformation_af_ZA.java,
+ 	gnu/java/locale/LocaleInformation_ar_AE.java,
+ 	gnu/java/locale/LocaleInformation_ar_BH.java,
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java,
+ 	gnu/java/locale/LocaleInformation_ar_EG.java,
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_OM.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SD.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_br_FR.java,
+ 	gnu/java/locale/LocaleInformation_bs_BA.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_DK.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr_FR.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gd_GB.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hr_HR.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_iw_IL.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation_ka_GE.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mi_NZ.java,
+ 	gnu/java/locale/LocaleInformation_mk_MK.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_no_NO.java,
+ 	gnu/java/locale/LocaleInformation_oc_FR.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_se_NO.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sl_SI.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sr_YU.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_tg_TJ.java,
+ 	gnu/java/locale/LocaleInformation_tl_PH.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java,
+ 	gnu/java/locale/LocaleInformation_ur_PK.java,
+ 	gnu/java/locale/LocaleInformation_uz_UZ.java,
+ 	gnu/java/locale/LocaleInformation_vi_VN.java,
+ 	gnu/java/locale/LocaleInformation_yi_US.java,
+ 	gnu/java/locale/LocaleInformation_zh_CN.java,
+ 	gnu/java/locale/LocaleInformation_zh_HK.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG.java,
+ 	gnu/java/locale/LocaleInformation_zh_TW.java,
+ 	gnu/java/locale/iso3166-a3.properties,
+ 	gnu/java/locale/iso3166.properties,
+ 	gnu/java/locale/iso3166_de.properties,
+ 	gnu/java/locale/iso639-a2-old.properties,
+ 	gnu/java/locale/iso639-a3.properties,
+ 	gnu/java/locale/iso639.properties,
+ 	gnu/java/locale/iso639_de.properties,
+ 	gnu/java/locale/iso639_fr.properties,
+ 	gnu/java/locale/iso639_ga.properties,
+ 	gnu/java/rmi/dgc/DGCImpl_Skel.java,
+ 	gnu/java/rmi/dgc/DGCImpl_Stub.java,
+ 	gnu/java/rmi/registry/RegistryImpl_Skel.java,
+ 	gnu/java/rmi/registry/RegistryImpl_Stub.java,
+ 	resource/gnu/java/awt/peer/gtk/font.properties,
+ 	resource/java/security/classpath.security,
+ 	resource/java/util/iso3166-a3.properties,
+ 	resource/java/util/iso3166.properties,
+ 	resource/java/util/iso3166_de.properties,
+ 	resource/java/util/iso639-a2-old.properties,
+ 	resource/java/util/iso639-a3.properties,
+ 	resource/java/util/iso639.properties,
+ 	resource/java/util/iso639_de.properties,
+ 	resource/java/util/iso639_fr.properties,
+ 	resource/java/util/iso639_ga.properties: Added missing copyright
+ 	statement.  
+ 
+ 2002-08-11  Etienne M. Gagnon <etienne.gagnon@uqam.ca>
+ 
+ 	* java/nio/channels/spi/AbstractChannel.java,
+ 	java/nio/channels/spi/AbstractInterruptibleChannel.java,
+ 	java/nio/channels/spi/AbstractSelectableChannel.java,
+ 	java/nio/channels/spi/AbstractSelectionKey.java,
+ 	java/nio/channels/spi/AbstractSelector.java,
+ 	java/nio/channels/spi/SelectorProvider.java,
+ 	javax/swing/BorderFactory.java, javax/swing/plaf/ButtonUI.java,
+ 	javax/swing/plaf/ColorUIResource.java,
+ 	javax/swing/plaf/ComponentUI.java,
+ 	javax/swing/plaf/DimensionUIResource.java,
+ 	javax/swing/plaf/FontUIResource.java,
+ 	javax/swing/plaf/IconUIResource.java,
+ 	javax/swing/plaf/InsetsUIResource.java,
+ 	javax/swing/plaf/LabelUI.java, javax/swing/plaf/ListUI.java,
+ 	javax/swing/plaf/OptionPaneUI.java, javax/swing/plaf/PanelUI.java,
+ 	javax/swing/plaf/TabbedPaneUI.java, javax/swing/plaf/TextUI.java,
+ 	javax/swing/plaf/TreeUI.java, javax/swing/plaf/ViewportUI.java,
+ 	javax/swing/plaf/basic/BasicBorders.java,
+ 	javax/swing/plaf/basic/BasicButtonUI.java,
+ 	javax/swing/plaf/basic/BasicCheckBoxUI.java,
+ 	javax/swing/plaf/basic/BasicDefaults.java,
+ 	javax/swing/plaf/basic/BasicGraphicsUtils.java,
+ 	javax/swing/plaf/basic/BasicIconFactory.java,
+ 	javax/swing/plaf/basic/BasicLabelUI.java,
+ 	javax/swing/plaf/basic/BasicListUI.java,
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.java,
+ 	javax/swing/plaf/basic/BasicPanelUI.java,
+ 	javax/swing/plaf/basic/BasicRadioButtonUI.java,
+ 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
+ 	javax/swing/plaf/basic/BasicTextUI.java,
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
+ 	javax/swing/plaf/basic/BasicTreeUI.java,
+ 	javax/swing/plaf/basic/BasicViewportUI.java,
+ 	javax/swing/plaf/metal/MetalLookAndFeel.java,
+ 	javax/swing/table/DefaultTableCellRenderer.java: Added missing
+ 	copyright statement.  
+ 
+ 2002-07-31  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/awt/Frame.java (Frame): Remove println calls.
+ 
+ 2002-07-30   Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/String.java (equals): Also check offset when value is the
+ 	same.
+ 
+ 2002-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/nio/channels/AlreadyConnectedException.java: Extend
+ 	IllegalStateException, per spec.
+ 
+ 	* java/nio/ByteOrder.java (toString): Simplified; now conforms to
+ 	spec.
+ 	(BIG_ENDIAN, LITTLE_ENDIAN): Reordered modifiers.
+ 	(nativeOrder): Now public, per spec.
+ 	(ByteOrder): Class now final, per spec.
+ 	(ByteOrder()): New constructor.
+ 
+ 2002-07-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/image/MemoryImageSource.java: Change constructor to take
+ 	int[] not byte[].
+ 	* java/awt/Graphics2D.java: Uncomment methods that can now be
+ 	compiled.
+ 	* java/awt/GridBagLayout.java: New stub implementation.
+ 	* java/awt/Makefile.am (EXTRA_DIST): Add GridBagLayout.java.
+ 	* java/awt/dnd/.cvsignore: New file.
+ 	* javax/swing/text/Makefile.am: Add SUBDIRS=html.
+ 	* javax/swing/text/html/HTML.java: Stub implementation.
+ 	* javax/swing/text/html/Makefile.am: New file.
+ 	* javax/swing/text/html/parser/Makefile.am: Likewise.
+ 	* javax/swing/text/html/parser/ParserDelegator.java: New stub
+ 	implementation.
+ 	* javax/swing/text/html/parser/package.html: New file.
+ 	* configure.in (AC_OUTPUT): Add javax/swing/text/html/Makefile and
+ 	javax/swing/text/html/parser/Makefile.
+ 
+ 
+ 2002-07-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/security/provider/MD5.java: Extends MessageDigest, not
+ 	MessageDigestSpi (fixes bug #783).
+ 
+ 2002-07-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/security/provider/Gnu.java: Reference all implementation
+ 	classes by using Class.getName().
+ 
+ 2002-07-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/StreamTokenizer.java (pushBack): Update documentation.
+ 	(whitespaceChars): call resetChar().
+ 
+ 2002-07-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/transaction/InvalidTransactionException.java,
+ 	javax/transaction/TransactionRequiredException.java,
+ 	javax/transaction/TransactionRolledbackException.java,
+ 	javax/transaction/xa/XAException.java,
+ 	javax/transaction/xa/XAResource.java,
+ 	javax/transaction/xa/Xid.java: New files from libgcj.
+ 
+ 2002-07-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/security/provider/DefaultPolicy.java: Remove commented out
+ 	code.
+ 	* gnu/java/security/provider/SHA.java: Likewise.
+ 
+ 2002-07-14  Scott Ananian  <cananian@lesser-magoo.lcs.mit.edu>
+ 
+ 	* java/lang/AssertionError.java: Documentation updates.
+ 	* java/net/Authenticator.java: Likewise.
+ 	* java/net/DatagramSocketImpl.java: Likewise.
+ 	* java/net/SocketAddress.java: Likewise.
+ 
+ 2002-07-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Character.java (toString(char)): use ch not value.
+ 
+ 2002-07-12  Jesse Rosenstock  <jmr@fulcrummicro.com>
+ 
+ 	* java/lang/Character.java (toString(char)): Now static.
+ 
+ 2002-07-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Thanks to Jeroen Frijters <jeroen@sumatra.nl>
+ 	* java/io/FileInputStream.java (native_fd): Initialize to -1.
+ 	* java/io/FileOutputStream.java (native_fd): Likewise.
+ 
+ 2002-07-06  Jochen Hoenicke <jochen@gnu.org>
+ 
+ 	* java/util/zip/InflaterDynHeader.java (decode): Use a single
+ 	array for litlen and dist codes. This fixes the bug where a 
+ 	repeat code spans over both arrays. Rewrote the code.
+ 	(builtLitLenTree): This function now needs to split the common
+ 	litdistLens array.
+ 	(builtDistTree): Likewise.
+ 
+ 2002-07-05  Jochen Hoenicke <jochen@gnu.org>
+ 
+ 	* java/util/zip/Inflater.java
+ 	(inflate): Handle zero length.  Fully check for
+ 	ArrayIndexOutOfBoundsException.
+ 
+ 	* java/util/zip/DeflaterEngine.java
+ 	(slideWindow): New function, takes out some code from fillWindow.
+ 	Slide the prev array too, and handle head/prev values as unsigned.
+ 	(deflateFast): Always slide window when strstart + MIN_LOOKAHEAD
+ 	falls out of window.  This is needed when we are flushing.
+ 	(deflateSlow): Likewise.
+ 
+ 2002-07-02  Tom Tromey  <tromey@redhat.com>
+ 	    David Hovemeyer  <daveho@cs.umd.edu>
+ 
+ 	* java/text/ChoiceFormat.java
+ 	(format(double,StringBuffer,FieldPosition)): Fix fencepost error
+ 	in check loop.
+ 	* java/text/MessageFormat.java
+ 	(format(Object[],StringBuffer,FieldPosition): Pass all arguments
+ 	to MessageFormat.
+ 
+ 2002-06-23  John Leuner  <jewel@debian.org>
+ 
+ 	* java/lang/String.java (trim): Take into account offset added by substring
+ 
+ 2002-06-21  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	Reformat JDBC classes and add new JDK 1.4 classes and methods.
+ 
+ 	* java/sql/ParameterMetaData.java, java/sql/SQLPermission.java,
+ 	java/sql/Savepoint.java: New files.
+ 	* java/sql/Array.java, java/sql/BatchUpdateException.java,
+ 	java/sql/Blob.java, java/sql/CallableStatement.java,
+ 	java/sql/Clob.java, java/sql/Connection.java,
+ 	java/sql/DataTruncation.java, java/sql/DatabaseMetaData.java,
+ 	java/sql/Date.java, java/sql/Driver.java, java/sql/DriverManager.java,
+ 	java/sql/DriverPropertyInfo.java, java/sql/PreparedStatement.java,
+ 	java/sql/Ref.java, java/sql/ResultSet.java,
+ 	java/sql/ResultSetMetaData.java, java/sql/SQLData.java
+ 	java/sql/SQLException.java, java/sql/SQLInput.java,
+ 	java/sql/SQLOutput.java, java/sql/SQLWarning.java
+ 	java/sql/Statement.java, java/sql/Struct.java, java/sql/Time.java,
+ 	java/sql/Timestamp.java, java/sql/Types.java: Updated to JDBC 3.0
+ 	(JDK 1.4) specification.
+ 	* javax/sql/ConnectionEvent.java, 
+ 	javax/sql/ConnectionEventListener.java,
+ 	javax/sql/ConnectionPoolDataSource.java,
+ 	javax/sql/DataSource.java, javax/sql/PooledConnection.java,
+ 	javax/sql/RowSetEvent.java, javax/sql/RowSetInternal.java,
+ 	javax/sql/RowSet.java, javax/sql/RowSetListener.java,
+ 	javax/sql/RowSetMetaData.java, javax/sql/RowSetReader.java,
+ 	javax/sql/RowSetWriter.java, javax/sql/XAConnection.java,
+ 	javax/sql/XADataSource.java: New files.
+ 	* java/sql/Makefile.am: Add new files.
+ 	* javax/sql/Makefile.am: New.
+ 	* javax/sql/package.html: New.
+ 
+ 2002-06-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ThreadGroup.java (enumerate(Thread[],int,boolean): Get
+ 	groups from `groups' Vector.
+ 
+ 2002-06-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/LineNumberInputStream.java: Merged with libgcj version.
+ 
+ 2002-06-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for Mauve regressions:
+ 	* java/lang/Long.java (toString): Don't assume decimal output when
+ 	argument is MIN_VALUE.
+ 	(toUnsignedString): Don't use Integer.toUnsignedString when NUM is
+ 	negative.
+ 	(parseLong): Correctly handle all overflow cases.
+ 	* java/lang/Integer.java (toString): Don't assume decimal output
+ 	when argument is MIN_VALUE.
+ 	(parseInt): Correctly handle all overflow cases.
+ 
+ 2002-06-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/zip/ZipEntry.java (clone): Copy `extra' field.
+ 	* java/util/zip/ZipInputStream.java (getNextEntry): Use
+ 	createZipEntry.
+ 
+ 2002-05-30  John Leuner  <jewel@debian.org>
+ 
+ 	* java/util/zip/*java: Changed to use default character 
+ 	encoding instead of UTF8 for zip comments.
+ 	
+ 	* lib/jazzlib/makeJazzlibDist.sh: Changed to use zsh. 
+ 	Builds .zip and .jar files too.
+ 	
+ 2002-05-28  Andrew Selkirk  <aselkirk@sympatico.ca>
+ 
+ 	* configure.in: Updated with colorchooser and filechooser dirs.
+ 
+ 2002-05-28  Andrew Selkirk  <aselkirk@sympatico.ca>
+ 
+ 	* javax/swing/AbstractAction.java: Updated.
+ 	* javax/swing/AbstractButton.java: Updated.
+ 	* javax/swing/AbstractCellEditor.java: New file.
+ 	* javax/swing/CellRendererPane.java: New file.
+ 	* javax/swing/ComponentInputMap.java: Updated.
+ 	* javax/swing/DebugGraphics.java: New file.
+ 	* javax/swing/DefaultCellEditor.java: New file.
+ 	* javax/swing/DefaultComboBoxModel.java: New file.
+ 	* javax/swing/DefaultDesktopManager.java: New file.
+ 	* javax/swing/DefaultFocusManager.java: New file.
+ 	* javax/swing/DefaultListCellRenderer.java: New file.
+ 	* javax/swing/DefaultSingleSelectionModel.java: New file.
+ 	* javax/swing/FocusManager.java: New file.
+ 	* javax/swing/JCheckBoxMenuItem.java: New file.
+ 	* javax/swing/JColorChooser.java: New file.
+ 	* javax/swing/JComboBox.java: New file.
+ 	* javax/swing/JComponent.java: Updated.
+ 	* javax/swing/JDesktopPane.java: New file.
+ 	* javax/swing/JFileChooser.java: New file.
+ 	* javax/swing/JMenu.java: New file.
+ 	* javax/swing/JMenuItem.java: New file.
+ 	* javax/swing/JPasswordField.java: New file.
+ 	* javax/swing/JPopupMenu.java: New file.
+ 	* javax/swing/JProgressBar.java: New file.
+ 	* javax/swing/JRadioButtonMenuItem.java: New file.
+ 	* javax/swing/JSeparator.java: New file.
+ 	* javax/swing/JSlider.java: New file.
+ 	* javax/swing/JSplitPane.java: New file.
+ 	* javax/swing/JTextField.java: Updated.
+ 	* javax/swing/JTextPane.java: New file.
+ 	* javax/swing/JToolBar.java: New file.
+ 	* javax/swing/Makefile.am: Updated.
+ 	* javax/swing/OverlayLayout.java: New file.
+ 	* javax/swing/ProgressMonitor.java: New file.
+ 	* javax/swing/ProgressMonitorInputStream.java: New file.
+ 	* javax/swing/RepaintManager.java: New file.
+ 	* javax/swing/ScrollPaneLayout.java: New file.
+ 	* javax/swing/ToolTipManager.java: New file.
+ 	* javax/swing/ViewportLayout.java: New file.
+ 	* javax/swing/colorchooser/AbstractColorChooserPanel.java: New file.
+ 	* javax/swing/colorchooser/ColorChooserComponentFactory.java: New file.
+ 	* javax/swing/colorchooser/ColorSelectionModel.java: New file.
+ 	* javax/swing/colorchooser/DefaultColorSelectionModel.java: New file.
+ 	* javax/swing/colorchooser/Makefile.am: New file.
+ 	* javax/swing/colorchooser/package.html: New file.
+ 	* javax/swing/filechooser/FileFilter.java: New file.
+ 	* javax/swing/filechooser/FileSystemView.java: New file.
+ 	* javax/swing/filechooser/FileView.java: New file.
+ 	* javax/swing/filechooser/Makefile.am: New file.
+ 	* javax/swing/filechooser/package.html: New file.
+ 	* javax/swing/plaf/ActionMapUIResource.java: New file.
+ 	* javax/swing/plaf/ColorChooserUI.java: New file.
+ 	* javax/swing/plaf/ComboBoxUI.java: New file.
+ 	* javax/swing/plaf/ComponentInputMapUIResource.java: New file.
+ 	* javax/swing/plaf/DesktopIconUI.java: New file.
+ 	* javax/swing/plaf/DesktopPaneUI.java: New file.
+ 	* javax/swing/plaf/FileChooserUI.java: New file.
+ 	* javax/swing/plaf/InputMapUIResource.java: New file.
+ 	* javax/swing/plaf/InternalFrameUI.java: New file.
+ 	* javax/swing/plaf/Makefile.am: Updated.
+ 	* javax/swing/plaf/MenuBarUI.java: New file.
+ 	* javax/swing/plaf/MenuItemUI.java: New file.
+ 	* javax/swing/plaf/PopupMenuUI.java: New file.
+ 	* javax/swing/plaf/ProgressBarUI.java: New file.
+ 	* javax/swing/plaf/RootPaneUI.java: New file.
+ 	* javax/swing/plaf/ScrollBarUI.java: New file.
+ 	* javax/swing/plaf/ScrollPaneUI.java: Updated.
+ 	* javax/swing/plaf/SeparatorUI.java: New file.
+ 	* javax/swing/plaf/SliderUI.java: New file.
+ 	* javax/swing/plaf/SplitPaneUI.java: New file.
+ 	* javax/swing/plaf/TableHeaderUI.java: New file.
+ 	* javax/swing/plaf/TableUI.java: New file.
+ 	* javax/swing/plaf/ToolBarUI.java: New file.
+ 	* javax/swing/plaf/ToolTipUI.java: New file.
+ 	* javax/swing/text/JTextComponent.java: Updated.
+ 	* javax/swing/text/MutableAttributeSet.java: New file.
+ 	* javax/swing/text/StyledDocument.java: New file.
+ 	* javax/swing/text/StyledEditorKit.java: New file.
+ 	* javax/swing/text/TextAction.java: New file.
+ 
+ 2002-05-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/TimerTask.java:  Fix javadoc code example.
+ 
+ 2002-05-23  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: add blurb about Mauve
+ 
+ 2002-05-21  Andrew Selkirk  <aselkirk@sympatico.ca>
+ 
+ 	* javax/swing/DefaultBoundedRangeModel.java: New file.
+ 	* javax/swing/Makefile.am: Updated.
+ 
+ 2002-05-21  Andrew Selkirk  <aselkirk@sympatico.ca>
+ 
+ 	* javax/swing/Makefile.am: Updated.
+ 	* javax/swing/SizeRequirements.java: New file.
+ 	* javax/swing/SizeSequence.java: New file.
+ 
+ 2002-05-20  Andrew Selkirk  <aselkirk@sympatico.ca>
+ 
+ 	* javax/swing/Makefile.am: Updated.
+ 
+ 2002-05-20  Andrew Selkirk  <aselkirk@sympatico.ca>
+ 
+ 	* javax/swing/AbstractListModel.java: Updated.
+ 	* javax/swing/BoundedRangeModel.java: Compile fix.
+ 
+ 2002-05-20  Andrew Selkirk  <aselkirk@sympatico.ca>
+ 
+ 	* javax/swing/Action.java: Updated.
+ 	* javax/swing/ActionMap.java: New file.
+ 	* javax/swing/BoundedRangeModel.java: New file.
+ 	* javax/swing/ComboBoxEditor.java: New file.
+ 	* javax/swing/ComboBoxModel.java: New file.
+ 	* javax/swing/DefaultListModel.java: New file (unstubbed).
+ 	* javax/swing/DesktopManager.java: New file.
+ 	* javax/swing/CellEditor.java: New file (unstubbed).
+ 	* javax/swing/InputMap.java: New file (unstubbed).
+ 	* javax/swing/InputVerifier.java: New file.
+ 	* javax/swing/KeyStroke.java: New file (unstubbed).
+ 	* javax/swing/MenuElement.java: New file (unstubbed).
+ 	* javax/swing/MutableComboBoxModel.java: New file.
+ 	* javax/swing/Renderer.java: New file.
+ 	* javax/swing/RootPaneContainer.java: New file.
+ 	* javax/swing/ScrollPaneConstants.java: New file.
+ 	* javax/swing/SingleSelectionModel.java: New file.
+ 	* javax/swing/WindowConstants.java: New file.
+ 
+ 2002-05-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/TimeZone.java: Removed some FIXME comments.
+ 
+ 2002-05-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/text/SentenceBreakIterator.java (next): Skip all java white
+ 	space characters.
+ 	(previous_internal): Likewise.
+ 
+ 2002-05-08  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/AlphaComposite.java: Import Map, so workaround works.
+ 
+ 2002-05-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/AlphaComposite.java (cache.removeEldestEntry): Use fully
+ 	qualified Map.Entry, not just Entry as gcj 3.1 workaround.
+ 
+ 2002-05-08  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* configure.in: Add java/awt/dnd/peer, java/nio/charset/spi.
+ 	* gnu/java/awt/EventModifier.java: New file (split from
+ 	java.awt.event.InputEvent).
+ 	* gnu/java/awt/Makefile.am: Add EventModifier.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: Add missing methods.
+ 	* java/nio/charset/Makefile.am (SUBDIRS): Visit spi.
+ 	* java/nio/charset/spi/.cvsignore: New file.
+ 	* java/nio/charset/spi/Makefile.am: New file.
+ 	* java/nio/charset/spi/package.html: New file.
+ 	* java/nio/charset/spi/CharsetProvider.java: New file.
+ 	* java/awt/Toolkit.java: Add missing methods, some formatting.
+ 	* java/awt/Window.java: Formatting.
+ 	* java/awt/datatransfer/FlavorTable.java: New file.
+ 	* java/awt/datatransfer/Makefile.am: Add FlavorTable.
+ 	* java/awt/datatransfer/Transferable.java: Update to 1.4.
+ 	* java/awt/dnd/DnDConstants.java: New file.
+ 	* java/awt/dnd/DragGestureEvent.java: New file.
+ 	* java/awt/dnd/DragGestureListener.java: New file.
+ 	* java/awt/dnd/DragGestureRecognizer.java: New file.
+ 	* java/awt/dnd/DragSource.java: New file.
+ 	* java/awt/dnd/DragSourceAdapter.java: New file.
+ 	* java/awt/dnd/DragSourceContext.java: New file.
+ 	* java/awt/dnd/DragSourceDragEvent.java: New file.
+ 	* java/awt/dnd/DragSourceEvent.java: New file.
+ 	* java/awt/dnd/DragSourceListener.java: New file.
+ 	* java/awt/dnd/DragSourceMotionListener.java: New file.
+ 	* java/awt/dnd/InvalidDnDOperationException.java: New file.
+ 	* java/awt/dnd/Makefile.am: Update for new files.
+ 	* java/awt/dnd/peer/.cvsignore: New file.
+ 	* java/awt/dnd/peer/DragSourceContextPeer.java: New file.
+ 	* java/awt/dnd/peer/Makefile.am: New file.
+ 	* java/awt/dnd/peer/package.html: New file.
+ 	* java/awt/event/InputEvent.java: Update modifier handling to use
+ 	gnu.java.awt.EventModifier.
+ 	* java/awt/event/KeyEvent.java: Ditto.
+ 	* java/awt/event/MouseEvent.java: Ditto.
+ 	* java/util/Makefile.am (SUBDIRS): Alphabetize.
+ 
+ 2002-05-07  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/Color.java: Tweak to work with SystemColor.
+ 	* java/awt/ColorPaintContext.java: New file (split out from
+ 	Color.java).
+ 	* java/awt/Component.java: More javadoc.
+ 	* java/awt/Container.java: Formatting, stub 1.4 methods.
+ 	(LightweightDispatcher): Add class.
+ 	* java/awt/Image.java: Update to 1.4.
+ 	* java/awt/KeyboardFocusManager.java (downFocusCycle): Fix typo.
+ 	* java/awt/Makefile.am (EXTRA_DIST): Add ColorPaintContext.
+ 	* java/awt/SystemColor.java: Update to 1.4.
+ 
+ 2002-05-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/image/renderable/package.html: New stub package file.
+ 	* java/awt/image/renderable/Makefile.am (EXTRA_DIST): Add package.html
+ 
+ 2002-05-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/accessibility/AccessibleContext.java: Fix javadoc to fully
+ 	qualify java.awt.IllegalComponentStateException.
+ 
+ 2002-05-07  Etienne M. Gagnon  <etienne.gagnon@uqam.ca>
+ 
+ 	* native/jni/java-io/java_nio.c: Fixed file title in copyright notice.
+ 
+ 2002-05-06  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* Makefile.am (SUBDIRS): Alphabetize.
+ 	* java/util/AbstractList.java (SubList): Increase member
+ 	visibility for fewer accessor methods.
+ 	* java/util/Hashmap.java (getEntry): Ditto.
+ 	* java/util/Hashtable.java (getEntry): Ditto.
+ 	* java/util/LinkedList.java (getEntry, removeEntry): Ditto.
+ 	* java/util/WeakHashMap.java (buckets, internalRemove): Ditto.
+ 
+ 2002-05-06  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/awt/geom/PathIterator.java: Update javadoc to fully qualify
+ 	java.util.NoSuchElementException.
+ 
+ 2002-05-06  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/regex/PatternSyntaxException.java: package java.util.regex,
+ 	not regexp.
+ 	* java/lang/String.java: import likewise.
+ 
+ 2002-05-06  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/applet/Makefile.am (EXTRA_DIST): Add package.html
+ 	* java/awt/color/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/dnd/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/im/spi/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/im/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/datatransfer/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/event/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/font/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/geom/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/image/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/peer/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/print/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/awt/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/beans/beancontext/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/beans/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/io/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/lang/ref/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/lang/reflect/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/lang/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/math/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/net/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/rmi/activation/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/rmi/dgc/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/rmi/registry/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/rmi/server/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/rmi/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/security/acl/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/security/cert/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/security/interfaces/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/security/spec/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/security/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/sql/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/text/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/util/jar/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/util/zip/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/util/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/util/prefs/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/util/logging/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/util/regex/Makefile.am (EXTRA_DIST): Likewise and
+ 	PatternSyntaxException.java.
+ 	* java/nio/channels/spi/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/nio/channels/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/nio/charset/Makefile.am (EXTRA_DIST): Likewise.
+ 	* java/nio/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/accessibility/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/naming/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/border/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/event/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/table/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/plaf/basic/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/plaf/metal/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/plaf/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/text/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/tree/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/undo/Makefile.am (EXTRA_DIST): Likewise.
+ 	* javax/swing/Makefile.am (EXTRA_DIST): Likewise.
+ 
+ 2002-05-06  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/awt/Choice.java: Fix javadoc spelling mistake.
+ 	* java/awt/im/spi/InputMethodContext.java: Import HeadlessException.
+ 	* java/awt/image/PixelGrabber.java: Fix javadoc spelling mistake.
+ 	* java/io/File.java: Likewise.
+ 	* java/lang/String.java: Likewise.
+ 	* java/security/AccessController.java: Likewise.
+ 	* java/sql/DatabaseMetaData.java: Likewise.
+ 	* java/util/Arrays.java: Likewise.
+ 	* java/util/prefs/AbstractPreferences.java: Likewise.
+ 	* java/util/prefs/Preferences.java: Likewise.
+ 	* java/util/zip/Inflater.java: Likewise.
+ 	* java/util/regex/PatternSyntaxException.java: New class.
+ 
+ 2002-05-06  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/applet/package.html: Add stub package description fo gjdoc.
+ 	* java/awt/color/package.html: Likewise.
+ 	* java/awt/dnd/package.html: Likewise.
+ 	* java/awt/im/spi/package.html: Likewise.
+ 	* java/awt/im/package.html: Likewise.
+ 	* java/awt/datatransfer/package.html: Likewise.
+ 	* java/awt/event/package.html: Likewise.
+ 	* java/awt/font/package.html: Likewise.
+ 	* java/awt/geom/package.html: Likewise.
+ 	* java/awt/image/package.html: Likewise.
+ 	* java/awt/peer/package.html: Likewise.
+ 	* java/awt/print/package.html: Likewise.
+ 	* java/awt/package.html: Likewise.
+ 	* java/beans/beancontext/package.html: Likewise.
+ 	* java/beans/package.html: Likewise.
+ 	* java/io/package.html: Likewise.
+ 	* java/lang/ref/package.html: Likewise.
+ 	* java/lang/reflect/package.html: Likewise.
+ 	* java/lang/package.html: Likewise.
+ 	* java/math/package.html: Likewise.
+ 	* java/net/package.html: Likewise.
+ 	* java/rmi/activation/package.html: Likewise.
+ 	* java/rmi/dgc/package.html: Likewise.
+ 	* java/rmi/registry/package.html: Likewise.
+ 	* java/rmi/server/package.html: Likewise.
+ 	* java/rmi/package.html: Likewise.
+ 	* java/security/acl/package.html: Likewise.
+ 	* java/security/cert/package.html: Likewise.
+ 	* java/security/interfaces/package.html: Likewise.
+ 	* java/security/spec/package.html: Likewise.
+ 	* java/security/package.html: Likewise.
+ 	* java/sql/package.html: Likewise.
+ 	* java/text/package.html: Likewise.
+ 	* java/util/jar/package.html: Likewise.
+ 	* java/util/zip/package.html: Likewise.
+ 	* java/util/package.html: Likewise.
+ 	* java/util/prefs/package.html: Likewise.
+ 	* java/util/logging/package.html: Likewise.
+ 	* java/util/regex/package.html: Likewise.
+ 	* java/nio/channels/spi/package.html: Likewise.
+ 	* java/nio/channels/package.html: Likewise.
+ 	* java/nio/charset/package.html: Likewise.
+ 	* java/nio/package.html: Likewise.
+ 	* javax/accessibility/package.html: Likewise.
+ 	* javax/naming/package.html: Likewise.
+ 	* javax/swing/border/package.html: Likewise.
+ 	* javax/swing/event/package.html: Likewise.
+ 	* javax/swing/table/package.html: Likewise.
+ 	* javax/swing/plaf/basic/package.html: Likewise.
+ 	* javax/swing/plaf/metal/package.html: Likewise.
+ 	* javax/swing/plaf/package.html: Likewise.
+ 	* javax/swing/text/html/package.html: Likewise.
+ 	* javax/swing/text/package.html: Likewise.
+ 	* javax/swing/tree/package.html: Likewise.
+ 	* javax/swing/undo/package.html: Likewise.
+ 	* javax/swing/package.html: Likewise.
+ 
+ 2002-05-05  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: Announcements section removed; we use
+ 	the News section of Savannah instead.  Old announcements linked
+ 	under documentation.
+ 	Status information will be transitioning to Savannah Tasks system.
+ 	Clarified affect of Classpath license upon JVM license.
+ 	Added project menu bar from Savannah to top of web page.
+ 	Removed mailing list information on this page, it is more detailed
+ 	on the Lists link at the top of the page.
+ 	Last modified author update
+ 	* doc/www.gnu.org/announce/announcements.wml: last modified author
+ 	* doc/www.gnu.org/include/macros.wml (header): Moved title to
+ 	the right of droplet and enlarged text.
+ 	Updated copyright date.
+ 	* BUGS: update URL for submitting bugs
+ 	* HACKING: update date; clarify via punctuation modification of
+ 	vm/reference classes.
+ 	* configure.in: added --enable-gtk-peer from Carlos Cavanna
+ 	Updated version to 0.04; configure java/util/logging,
+ 	java/util/regex
+ 	* native/Makefile.am: SUBDIRS typo fixed
+ 	* native/jni/Makefile.am: SUBDIRS conditionally defined based on
+ 	--enable-gtk-peer
+ 	* INSTALL: update with mention of --enable-gtk-peer, typo fixed
+ 	* NEWS: updated for 0.04 release
+ 	* README: updated with AegisVM, note failure to run with ORP 1.0.9
+ 	* TODO: removed duplicate information on where packages currently
+ 	stand, too hard to keep up to date in multiple places.
+ 	* THANKYOU: add Carlos Cavanna
+ 	* java/util/logging/Makefile.am: new file
+ 	* java/util/regex/Makefile.am: new file
+ 	* java/util/regex/.cvsignore: new file
+ 	* gnu/java/awt/peer/gtk/Makefile.am: EXTRA_DIST updated
+ 	* gnu/java/locale/Makefile.am: ditto
+ 	* java/awt/Makefile.am: ditto
+ 	* java/net/Makefile.am: ditto
+ 	* java/util/Makefile.am: ditto
+ 	* java/util/zip/Makefile.am: ditto
+ 	* javax/accessibility/Makefile.am: ditto
+ 	* javax/swing/Makefile.am: ditto
+ 	* javax/swing/plaf/Makefile.am: ditto
+ 	* javax/swing/table/Makefile.am: ditto
+ 
+ 2002-05-05  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/applet/Applet.java (getAccessibleState): Update.
+ 	* java/awt/AWTEvent.java (INPUT_ENABLED_EVENT_MASK): New flag.
+ 	* java/awt/AWTKeyStroke.java (keyCode): Make more visible.
+ 	* java/awt/AlphaComposite.java: New file (needs documentation).
+ 	* java/awt/AttributeValue.java: New file.
+ 	* java/awt/BasicStroke.java: New file (needs docs).
+ 	* java/awt/BufferCapabilities.java: New file (needs docs).
+ 	* java/awt/Button.java (getActionListeners, getListeners): Use new
+ 	features of AWTEventMulticater.
+ 	* java/awt/Component.java: Partial update to 1.4.
+ 	* java/awt/ComponentOrientation.java: Update to 1.4.
+ 	* java/awt/Container.java (getContainerListeners, getListeners):
+ 	Use new features of AWTEventMulticaster.
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java: New
+ 	file (stubbed, needs docs).
+ 	* java/awt/DefaultFocusTraversalPolicy.java: New file (stubbed).
+ 	* java/awt/DefaultKeyboardFocusManager.java: New file (stubbed).
+ 	* java/awt/FocusTraversalPolicy.java: New file (needs docs).
+ 	* java/awt/GradientPaint.java: New file (stubbed).
+ 	* java/awt/GraphicsConfiguration.java: Update to 1.4.
+ 	* java/awt/ImageCapabilities.java: New file (stubbed).
+ 	* java/awt/Insets.java: Update to 1.4.
+ 	* java/awt/JobAttributes.java: New file (needs docs).
+ 	* java/awt/KeyboardFocusManager.java: New file (partially
+ 	stubbed).
+ 	* java/awt/Makefile.am (EXTRA_DIST): Account for new files.
+ 	* java/awt/MenuItem.java (getActionListeners, getListeners): Use
+ 	new features of AWTEventMulticaster.
+ 	* java/awt/PageAttributes.java: New file (needs docs).
+ 	* java/awt/PaintContext.java (paint): Remove redundant keyword.
+ 	* java/awt/PrintJob.java: Update to 1.4.
+ 	* java/awt/RenderingHints.java: Partial update to 1.4 (needs docs).
+ 	* java/awt/Robot.java: New file (stubbed).
+ 	* java/awt/TexturePaint.java: New file (stubbed).
+ 	* java/awt/Window.java (getWindowListeners, getListeners): Use new
+ 	features of AWTEventMulticaster.
+ 	* java/awt/geom/Arc2D.java: Implement and document.
+ 	* java/awt/geom/Rectangle2D.java: Fix doc typo.
+ 
+ 2002-05-05  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* configure.in: Add java/awt/image/renderable.
+ 	* java/awt/image/BufferStrategy.java: New file (needs docs).
+ 	* java/awt/image/BufferedImageOp.java: Ditto.
+ 	* java/awt/image/RenderedImage.java: Ditto.
+ 	* java/awt/image/TileObserver.java: Ditto.
+ 	* java/awt/image/VolatileImage.java: Ditto.
+ 	* java/awt/image/WritableRenderedImage.java: Ditto.
+ 	* java/awt/image/renderable/ContextualRenderedImageFactory.java:
+ 	Ditto.
+ 	* java/awt/image/renderable/ParameterBlock.java: Ditto.
+ 	* java/awt/image/renderable/RenderContext.java: Ditto.
+ 	* java/awt/image/renderable/RenderableImage.java: Ditto.
+ 	* java/awt/image/renderable/RenderableImageOp.java: Ditto.
+ 	* java/awt/image/renderable/RenderableImageProducer.java: Ditto.
+ 	* java/awt/image/renderable/RenderedImageFactory.java: Ditto.
+ 	* java/awt/image/Makefile.am: Account for new files.
+ 	* java/awt/image/renderable/.cvsignore: New file.
+ 	* java/awt/image/renderable/Makefile.am: New file.
+ 
+ 2002-05-04  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: include information on AegisVM, use a
+ 	table to list JVMs and descriptions
+ 	* java/util/zip/ZipEntry.java: implements ZipConstants; patch from 
+ 	Sascha Brawer
+ 	* java/net/HttpURLConnection.java (HTTP_NOT_IMPLEMENTED): updated
+ 	javadoc comment to note this is in the specification since 1.3; 
+ 	patch from Sascha Brawer
+ 	* gnu/java/net/protocol/file/FileURLConnection.java: additions from
+ 	Nic Ferrier
+ 	(getLastModified): new method
+ 	(getContentLength): new method
+ 	(exists): new method
+ 	(isDirectory): new method
+ 	(getListing): new method
+ 
+ 2002-05-02  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/TreeMap.java (remove): Fix improper return value.
+ 	* THANKYOU: Add Xuan Baldauf for spotting this.
+ 
+ 2002-05-02  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: move check for ZIP to --with-zip
+ 	* acinclude.m4: define CLASSPATH_WITH_ZIP, allow user to specify
+ 	--without-zip to avoid creating or installing glibj.zip
+ 
+ 2002-05-02  Xuan Baldauf <entwicklung--classpath--gnu.org@medium.net>
+ 
+ 	* java/util/TreeMap.java (SubMap.values): return this.values instead
+ 	of this.keys
+ 
+ 2002-04-30  Etienne M. Gagnon <etienne.gagnon@uqam.ca>
+ 
+ 	* native/jni/java-io/Makefile.am: Re-added java_nio.c into JNI
+ 	build.
+ 	* native/jni/java-io/java_nio.c: Solved compile time problems under
+ 	gcc 2.95.x and added missing Copyright statement.
+ 
+ 2002-04-30  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* configure.in: Configure the swing directories.
+ 
+ 2002-04-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/BufferedReader.java (fill): Handle case where markPos
+ 	point to ignored \n.
+ 
+ 2002-04-30  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/text/ChoiceFormat.java (class description):
+ 	Docfix to avoid angle brackets in Javadoc and for pre-formatted
+ 	code without asterisks.
+ 	* java/text/Collator.java (compare(String, String),
+ 	compare(Object, Object)): Same.
+ 	* java/text/RuleBasedCollator.java (compare(String,String)): Same.
+ 	
+ 	* java/util/AbstractList.java (hashCode):
+ 	Docfix to avoid angle brackets in Javadoc and for pre-formatted
+ 	code without asterisks.
+ 	* java/util/AbstractMap.java (equals, hashCode): Same.
+ 	* java/util/ArrayList.java (ensureCapacity): Same.
+ 	* java/util/Arrays.java (sort): Same.
+ 	* java/util/BitSet.java (hashCode, nextSetBit): Same.
+ 	* java/util/Calendar.java (class description): Same.
+ 	* java/util/Dictionary.java (class description): Same.
+ 	* java/util/HashMap.java (rehash): Same.
+ 	* java/util/Hashtable.java (rehash, equals): Same.
+ 	* java/util/IdentityHashMap.java (get(Object), remove(Object),
+ 	remove()): Same.
+ 	* java/util/LinkedHashMap.java (LinkedHashMap(int),
+ 	removeEldestEntry(Map.Entry), class description): Same.
+ 	* java/util/LinkedList.java (getEntry): Same.
+ 	* java/util/List.java (hashCode): Same.
+ 	* java/util/ListResourceBundle.java (class description): Same.
+ 	* java/util/Map.java (hashCode, equals): Same.
+ 	* java/util/Properties.java (class description, load): Same.
+ 	* java/util/PropertyPermissionCollection.java (implies): Same.
+ 	* java/util/PropertyResourceBundle.java (class description): Same.
+ 	* java/util/Random.java (setSeed, next, nextBytes, nextInt(),
+ 	nextInt(int), nextLong, nextBoolean, nextFloat, nextDouble,
+ 	nextGaussian): Same.
+ 	* java/util/ResourceBundle.java (class description): Same.
+ 	* java/util/SimpleTimeZone.java (getOffset): Same.
+ 	* java/util/WeakHashMap.java (threshold, slot): Same.
+ 
+ 2002-04-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java: Add copyright notice.
+ 	* gnu/java/nio/CharBufferImpl.java: Likewise.
+ 	* gnu/java/nio/DatagramChannelImpl.java: Likewise.
+ 	* gnu/java/nio/DoubleBufferImpl.java: Likewise.
+ 	* gnu/java/nio/FileChannelImpl.java: Likewise.
+ 	* gnu/java/nio/FloatBufferImpl.java: Likewise.
+ 	* gnu/java/nio/IntBufferImpl.java: Likewise.
+ 	* gnu/java/nio/LongBufferImpl.java: Likewise.
+ 	* gnu/java/nio/MappedByteFileBuffer.java: Likewise.
+ 	* gnu/java/nio/MappedCharFileBuffer.java: Likewise.
+ 	* gnu/java/nio/MappedDoubleFileBuffer.java: Likewise.
+ 	* gnu/java/nio/MappedFloatFileBuffer.java: Likewise.
+ 	* gnu/java/nio/MappedIntFileBuffer.java: Likewise.
+ 	* gnu/java/nio/MappedLongFileBuffer.java: Likewise.
+ 	* gnu/java/nio/MappedShortFileBuffer.java: Likewise.
+ 	* gnu/java/nio/PipeImpl.java: Likewise.
+ 	* gnu/java/nio/SelectionKeyImpl.java: Likewise.
+ 	* gnu/java/nio/SelectorImpl.java: Likewise.
+ 	* gnu/java/nio/SelectorProviderImpl.java: Likewise.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java: Likewise.
+ 	* gnu/java/nio/ShortBufferImpl.java: Likewise.
+ 	* gnu/java/nio/SocketChannelImpl.java: Likewise.
+ 	* java/awt/dnd/DropTarget.java: Likewise.
+ 	* java/awt/font/TextHitInfo.java: Likewise.
+ 	* java/net/InetSocketAddress.java: Likewise.
+ 	* java/net/SocketAddress.java: Likewise.
+ 	* java/nio/Buffer.java: Likewise.
+ 	* java/nio/ByteBuffer.java: Likewise.
+ 	* java/nio/ByteOrder.java: Likewise.
+ 	* java/nio/CharBuffer.java: Likewise.
+ 	* java/nio/DoubleBuffer.java: Likewise.
+ 	* java/nio/FloatBuffer.java: Likewise.
+ 	* java/nio/IntBuffer.java: Likewise.
+ 	* java/nio/LongBuffer.java: Likewise.
+ 	* java/nio/MappedByteBuffer.java: Likewise.
+ 	* java/nio/ShortBuffer.java: Likewise.
+ 	* java/nio/channels/AlreadyConnectedException.java: Likewise.
+ 	* java/nio/channels/ByteChannel.java: Likewise.
+ 	* java/nio/channels/Channel.java: Likewise.
+ 	* java/nio/channels/Channels.java: Likewise.
+ 	* java/nio/channels/ClosedChannelException.java: Likewise.
+ 	* java/nio/channels/DatagramChannel.java: Likewise.
+ 	* java/nio/channels/FileChannel.java: Likewise.
+ 	* java/nio/channels/FileLock.java: Likewise.
+ 	* java/nio/channels/GatheringByteChannel.java: Likewise.
+ 	* java/nio/channels/InterruptibleChannel.java: Likewise.
+ 	* java/nio/channels/Pipe.java: Likewise.
+ 	* java/nio/channels/ReadableByteChannel.java: Likewise.
+ 	* java/nio/channels/ScatteringByteChannel.java: Likewise.
+ 	* java/nio/channels/SelectableChannel.java: Likewise.
+ 	* java/nio/channels/SelectionKey.java: Likewise.
+ 	* java/nio/channels/Selector.java: Likewise.
+ 	* java/nio/channels/ServerSocketChannel.java: Likewise.
+ 	* java/nio/channels/SocketChannel.java: Likewise.
+ 	* java/nio/channels/WritableByteChannel.java: Likewise.
+ 	* java/nio/charset/CharacterCodingException.java: Likewise.
+ 	* java/nio/charset/Charset.java: Likewise.
+ 	* java/nio/charset/CharsetDecoder.java: Likewise.
+ 	* java/nio/charset/CharsetEncoder.java: Likewise.
+ 	* java/nio/charset/CoderResult.java: Likewise.
+ 	* java/nio/charset/CodingErrorAction.java: Likewise.
+ 	* java/util/regex/Matcher.java: Likewise.
+ 	* java/util/regex/Pattern.java: Likewise.
+ 	* javax/swing/AbstractAction.java: Likewise.
+ 	* javax/swing/AbstractButton.java: Likewise.
+ 	* javax/swing/AbstractListModel.java: Likewise.
+ 	* javax/swing/AbstractSet.java: Likewise.
+ 	* javax/swing/Box.java: Likewise.
+ 	* javax/swing/BoxLayout.java: Likewise.
+ 	* javax/swing/ButtonGroup.java: Likewise.
+ 	* javax/swing/CellEditor.java: Likewise.
+ 	* javax/swing/ComponentInputMap.java: Likewise.
+ 	* javax/swing/DefaultButtonModel.java: Likewise.
+ 	* javax/swing/DefaultCellRenderer.java: Likewise.
+ 	* javax/swing/DefaultListModel.java: Likewise.
+ 	* javax/swing/DefaultListSelectionModel.java: Likewise.
+ 	* javax/swing/Icon.java: Likewise.
+ 	* javax/swing/ImageIcon.java: Likewise.
+ 	* javax/swing/InputMap.java: Likewise.
+ 	* javax/swing/JApplet.java: Likewise.
+ 	* javax/swing/JButton.java: Likewise.
+ 	* javax/swing/JCheckBox.java: Likewise.
+ 	* javax/swing/JComponent.java: Likewise.
+ 	* javax/swing/JDialog.java: Likewise.
+ 	* javax/swing/JEditorPane.java: Likewise.
+ 	* javax/swing/JFrame.java: Likewise.
+ 	* javax/swing/JInternalFrame.java: Likewise.
+ 	* javax/swing/JLabel.java: Likewise.
+ 	* javax/swing/JLayeredPane.java: Likewise.
+ 	* javax/swing/JList.java: Likewise.
+ 	* javax/swing/JMenuBar.java: Likewise.
+ 	* javax/swing/JOptionPane.java: Likewise.
+ 	* javax/swing/JPanel.java: Likewise.
+ 	* javax/swing/JRadioButton.java: Likewise.
+ 	* javax/swing/JRootPane.java: Likewise.
+ 	* javax/swing/JScrollBar.java: Likewise.
+ 	* javax/swing/JScrollPane.java: Likewise.
+ 	* javax/swing/JTabbedPane.java: Likewise.
+ 	* javax/swing/JTable.java: Likewise.
+ 	* javax/swing/JTextField.java: Likewise.
+ 	* javax/swing/JToggleButton.java: Likewise.
+ 	* javax/swing/JToolTip.java: Likewise.
+ 	* javax/swing/JTree.java: Likewise.
+ 	* javax/swing/JViewport.java: Likewise.
+ 	* javax/swing/JWindow.java: Likewise.
+ 	* javax/swing/KeyStroke.java: Likewise.
+ 	* javax/swing/ListCellRenderer.java: Likewise.
+ 	* javax/swing/ListModel.java: Likewise.
+ 	* javax/swing/ListSelectionModel.java: Likewise.
+ 	* javax/swing/LookAndFeel.java: Likewise.
+ 	* javax/swing/MenuElement.java: Likewise.
+ 	* javax/swing/MenuSelectionManager.java: Likewise.
+ 	* javax/swing/Scrollable.java: Likewise.
+ 	* javax/swing/SwingConstants.java: Likewise.
+ 	* javax/swing/SwingUtilities.java: Likewise.
+ 	* javax/swing/Timer.java: Likewise.
+ 	* javax/swing/ToggleButtonModel.java: Likewise.
+ 	* javax/swing/UIDefaults.java: Likewise.
+ 	* javax/swing/UIManager.java: Likewise.
+ 	* javax/swing/UnsupportedLookAndFeelException.java: Likewise.
+ 	* javax/swing/border/AbstractBorder.java: Likewise.
+ 	* javax/swing/border/BevelBorder.java: Likewise.
+ 	* javax/swing/border/Border.java: Likewise.
+ 	* javax/swing/border/CompoundBorder.java: Likewise.
+ 	* javax/swing/border/EmptyBorder.java: Likewise.
+ 	* javax/swing/border/EtchedBorder.java: Likewise.
+ 	* javax/swing/border/LineBorder.java: Likewise.
+ 	* javax/swing/border/MatteBorder.java: Likewise.
+ 	* javax/swing/border/TitledBorder.java: Likewise.
+ 	* javax/swing/text/AbstractDocument.java: Likewise.
+ 	* javax/swing/text/AttributeSet.java: Likewise.
+ 	* javax/swing/text/BadLocationException.java: Likewise.
+ 	* javax/swing/text/Caret.java: Likewise.
+ 	* javax/swing/text/CharacterIterator.java: Likewise.
+ 	* javax/swing/text/ComponentView.java: Likewise.
+ 	* javax/swing/text/DefaultCaret.java: Likewise.
+ 	* javax/swing/text/DefaultEditorKit.java: Likewise.
+ 	* javax/swing/text/Document.java: Likewise.
+ 	* javax/swing/text/EditorKit.java: Likewise.
+ 	* javax/swing/text/Element.java: Likewise.
+ 	* javax/swing/text/GapContent.java: Likewise.
+ 	* javax/swing/text/JTextComponent.java: Likewise.
+ 	* javax/swing/text/Keymap.java: Likewise.
+ 	* javax/swing/text/PlainDocument.java: Likewise.
+ 	* javax/swing/text/PlainEditorKit.java: Likewise.
+ 	* javax/swing/text/Position.java: Likewise.
+ 	* javax/swing/text/Segment.java: Likewise.
+ 	* javax/swing/text/Style.java: Likewise.
+ 	* javax/swing/text/View.java: Likewise.
+ 	* javax/swing/text/ViewFactory.java: Likewise.
+ 
+ 2002-04-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/System.java (out, err): Use auto-flush PrintStream.
+ 
+ 2002-04-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/Action.java: Interface is always abstract, add copyright
+ 	notice.
+ 	* javax/swing/ButtonModel.java: Likewise.
+ 
+ 2002-04-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/prefs/BackingStoreException.java (readObject): Throws
+ 	NotSerializableException.
+ 	(writeObject): Likewise.
+ 	* java/util/prefs/InvalidPreferencesFormatException.java: Remove
+ 	second super call.
+ 	(readObject): Throws NotSerializableException.
+ 	(writeObject): Likewise.
+ 	* lib/standard.omit: Remove [gnu.]java.util.prefs (which compiles) and
+ 	gnu.classpath.tools (which does not exist).
+ 
+ 2002-04-30  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* AUTHORS: Add Andrew Selkirk.
+ 	* lib/standard.omit: Made sure swing at least compiles (although
+ 	it is non-functional).
+ 	* javax/Makefile.am: Visit swing.
+ 	* javax/swing/.cvsignore: New file.
+ 	* javax/swing/AbstractButton.java: Fix for compilation.
+ 	* javax/swing/CellEditor.java: New file.
+ 	* javax/swing/Icon.java: Fix for compilation.
+ 	* javax/swing/ImageIcon.java: Fix for compilation.
+ 	* javax/swing/JComponent.java: Fix for compilation.
+ 	* javax/swing/JEditorPane.java: Fix for compilation.
+ 	* javax/swing/JFrame.java: Fix for compilation.
+ 	* javax/swing/JInternalFrame.java: New file.
+ 	* javax/swing/JLabel.java: Fix for compilation.
+ 	* javax/swing/JTable.java: New file.
+ 	* javax/swing/JTextField.java: Fix for compilation.
+ 	* javax/swing/KeyStroke.java: Fix for compilation.
+ 	* javax/swing/Makefile.am: New file.
+ 	* javax/swing/MenuElement.java: New file.
+ 	* javax/swing/MenuSelectionManager.java: New file.
+ 	* javax/swing/UIDefaults.java: Fix for compilation.
+ 	* javax/swing/border/.cvsignore: New file.
+ 	* javax/swing/border/Makefile.am: New file.
+ 	* javax/swing/event/.cvsignore: New file.
+ 	* javax/swing/event/Makefile.am: New file.
+ 	* javax/swing/plaf/.cvsignore: New file.
+ 	* javax/swing/plaf/ColorUIResource.java: New file.
+ 	* javax/swing/plaf/DimensionUIResource.java: New file.
+ 	* javax/swing/plaf/FontUIResource.java: New file.
+ 	* javax/swing/plaf/IconUIResource.java: New file.
+ 	* javax/swing/plaf/InsetsUIResource.java: New file.
+ 	* javax/swing/plaf/Makefile.am: New file.
+ 	* javax/swing/plaf/basic/.cvsignore: New file.
+ 	* javax/swing/plaf/basic/BasicBorders.java: New file.
+ 	* javax/swing/plaf/basic/BasicIconFactory.java: New file.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Fix for compilation.
+ 	* javax/swing/plaf/basic/Makefile.am: New file.
+ 	* javax/swing/plaf/metal/.cvsignore: New file.
+ 	* javax/swing/plaf/metal/Makefile.am: New file.
+ 	* javax/swing/table/.cvsignore: New file.
+ 	* javax/swing/table/DefaultTableCellRenderer.java: New file.
+ 	* javax/swing/table/Makefile.am: New file.
+ 	* javax/swing/text/.cvsignore: New file.
+ 	* javax/swing/text/JTextComponent.java: Fix for compilation.
+ 	* javax/swing/text/Makefile.am: New file.
+ 	* javax/swing/tree/.cvsignore: New file.
+ 	* javax/swing/tree/Makefile.am: New file.
+ 	* javax/swing/tree/TreeCellEditor.java: Fix for compilation.
+ 	* javax/swing/undo/.cvsignore: New file.
+ 	* javax/swing/undo/Makefile.am: New file.
+ 
+ 2002-04-30  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/security/cert/Makefile.am (EXTRA_DIST): Add CertPath.java.
+ 	* java/security/cert/CertPath.java: New file.
+ 	* java/security/cert/CertificateFactory.java (generateCertPath):
+ 	New method.
+ 	* lib/standard.omit: Update java.awt and java.security classes
+ 	that now compile.
+ 
+ 2002-04-30  Patrik Reali  <reali@acm.org>
+ 
+ 	Patch 284:
+ 	* java/lang/String.java (concat): Fix wrong reference.
+ 
+ 2002-04-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/System.java (in, out, err): Use buffered streams.
+ 
+ 2002-04-28  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* native/jni/java-io/Makefile.am: remove java_nio.c from compilation
+ 
+ 2002-04-28  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* vm/reference/java/lang/Runtime.java (nativeLoad): comment fix, 
+ 	@return 0 on failure, nonzero on success: this matches current VM
+ 	implementations using Classpath
+ 
+ 2002-04-28  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/standard.omit: disable javax.swing
+ 
+ 2002-04-28  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4(CLASSPATH_CHECK_GCJ): check gcj version; 3.1 or 
+ 	higher or warn
+ 
+ 2002-04-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/System.java (runFinalizersOnExit): Removed extra
+ 	newline.
+ 
+ 2002-04-25  Andrew Selkirk  <aselkirk@sympatico.ca>
+ 
+ 	* javax/swing/undo/AbstractUndoableEdit.java: New file.
+ 	* javax/swing/undo/CannotRedoException.java: New file.
+ 	* javax/swing/undo/CannotUndoException.java: New file.
+ 	* javax/swing/undo/CompoundEdit.java: New file.
+ 	* javax/swing/undo/StateEditable.java: New file.
+ 	* javax/swing/undo/StateEdit.java: New file (stubbed).
+ 	* javax/swing/undo/UndoableEdit.java: New file.
+ 	* javax/swing/undo/UndoableEditSupport.java: New file (stubbed).
+ 	* javax/swing/undo/UndoManager.java: New file (stubbed).
+ 
+ 2002-04-25  Andrew Selkirk  <aselkirk@sympatico.ca>
+ 
+ 	* javax/swing/event/AncestorEvent.java: New file.
+ 	* javax/swing/event/AncestorListener.java: New file.
+ 	* javax/swing/event/CaretEvent.java: New file.
+ 	* javax/swing/event/CaretListener.java: New file.
+ 	* javax/swing/event/CellEditorListener.java: New file.
+ 	* javax/swing/event/ChangeEvent.java: New file.
+ 	* javax/swing/event/ChangeListener.java: New file.
+ 	* javax/swing/event/DocumentEvent.java: New file.
+ 	* javax/swing/event/DocumentListener.java: New file.
+ 	* javax/swing/event/EventListenerList.java: New file.
+ 	* javax/swing/event/HyperlinkEvent.java: New file.
+ 	* javax/swing/event/HyperlinkListener.java: New file.
+ 	* javax/swing/event/InternalFrameAdapter.java: New file.
+ 	* javax/swing/event/InternalFrameEvent.java: New file.
+ 	* javax/swing/event/InternalFrameListener.java: New file.
+ 	* javax/swing/event/ListDataEvent.java: New file.
+ 	* javax/swing/event/ListDataListener.java: New file.
+ 	* javax/swing/event/ListSelectionEvent.java: New file.
+ 	* javax/swing/event/ListSelectionListener.java: New file.
+ 	* javax/swing/event/MenuDragMouseEvent.java: New file.
+ 	* javax/swing/event/MenuDragMouseListener.java: New file.
+ 	* javax/swing/event/MenuEvent.java: New file.
+ 	* javax/swing/event/MenuKeyEvent.java: New file.
+ 	* javax/swing/event/MenuKeyListener.java: New file.
+ 	* javax/swing/event/MenuListener.java: New file.
+ 	* javax/swing/event/MouseInputAdapter.java: New file.
+ 	* javax/swing/event/MouseInputListener.java: New file.
+ 	* javax/swing/event/PopupMenuEvent.java: New file.
+ 	* javax/swing/event/PopupMenuListener.java: New file.
+ 	* javax/swing/event/SwingPropertyChangeSupport.java: New file.
+ 	* javax/swing/event/TableColumnModelEvent.java: New file.
+ 	* javax/swing/event/TableColumnModelListener.java: New file.
+ 	* javax/swing/event/TableModelEvent.java: New file.
+ 	* javax/swing/event/TableModelListener.java: New file.
+ 	* javax/swing/event/TreeExpansionEvent.java: New file.
+ 	* javax/swing/event/TreeExpansionListener.java: New file.
+ 	* javax/swing/event/TreeModelEvent.java: New file.
+ 	* javax/swing/event/TreeModelListener.java: New file.
+ 	* javax/swing/event/TreeSelectionEvent.java: New file.
+ 	* javax/swing/event/TreeSelectionListener.java: New file.
+ 	* javax/swing/event/TreeWillExpandListener.java: New file.
+ 	* javax/swing/event/UndoableEditEvent.java: New file.
+ 	* javax/swing/event/UndoableEditListener.java: New file.
+ 	* javax/swing/table/AbstractTableModel.java: New file.
+ 	* javax/swing/table/DefaultTableColumnModel.java: New file (stubbed).
+ 	* javax/swing/table/DefaultTableModel.java: New file.
+ 	* javax/swing/table/TableCellEditor.java: New file.
+ 	* javax/swing/table/TableCellRenderer.java: New file.
+ 	* javax/swing/table/TableColumn.java: New file.
+ 	* javax/swing/table/TableColumnModel.java: New file.
+ 	* javax/swing/table/TableModel.java: New file.
+ 	* javax/swing/tree/AbstractLayoutCache.java: New file.
+ 	* javax/swing/tree/DefaultMutableTreeNode.java: New file.
+ 	* javax/swing/tree/DefaultTreeCellEditor.java: New file (stubbed).
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java: New file (stubbed).
+ 	* javax/swing/tree/DefaultTreeModel.java: New file (stubbed).
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java: New file (stubbed).
+ 	* javax/swing/tree/ExpandVetoException.java: New file.
+ 	* javax/swing/tree/FixedHeightLayoutCache.java: New file (stubbed).
+ 	* javax/swing/tree/MutableTreeNode.java: New file.
+ 	* javax/swing/tree/RowMapper.java: New file.
+ 	* javax/swing/tree/TreeCellEditor.java: New file.
+ 	* javax/swing/tree/TreeCellRenderer.java: New file.
+ 	* javax/swing/tree/TreeModel.java: New file.
+ 	* javax/swing/tree/TreeNode.java: New file.
+ 	* javax/swing/tree/TreePath.java: New file.
+ 	* javax/swing/tree/TreeSelectionModel.java: New file.
+ 	* javax/swing/tree/VariableHeightLayoutCache.java: New file (stubbed).
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: New file.
+ 
+ 2002-04-24  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/System.java: Fix missing exception.
+ 	* javax/accessibility/AccessibleComponent.java: Update Javadoc.
+ 
+ 2002-04-24  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	PR 100787:
+ 	* gnu/java/rmi/.cvsignore: Ignore Makefile.
+ 	* gnu/java/rmi/dgc/.cvsignore: Ditto.
+ 	* gnu/java/rmi/registry/.cvsignore: Ditto.
+ 	* gnu/java/rmi/rmic/.cvsignore: Ditto.
+ 	* gnu/java/rmi/server/.cvsignore: Ditto.
+ 	* include/.cvsignore: Ignore stamp-h1
+ 	* java/awt/im/.cvsignore: Ignore Makefile.
+ 	* java/awt/im/spi/.cvsignore: Ditto.
+ 	* java/rmi/.cvsignore: Ditto.
+ 	* java/rmi/activation/.cvsignore: Ditto.
+ 	* java/rmi/dgc/.cvsignore: Ditto.
+ 	* java/rmi/registry/.cvsignore: Ditto.
+ 	* java/rmi/server/.cvsignore: Ditto.
+ 	* javax/accessibility/.cvsignore: Ditto.
+ 	* lib/.cvsignore: Ignore classes.1
+ 
+ 2002-04-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/AWTKeyStroke.java (removeEldestEntry): Add comment
+ 	describing the workaround needed for gcj 3.1.
+ 	* java/awt/im/InputSubset.java: Likewise.
+ 	* java/util/AbstractMap.java (BasicMapEntry): Likewise.
+ 	* javax/swing/JList.java (setListData): Likewise.
+ 
+ 2002-04-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/AWTKeyStroke.java (removeEldestEntry): Use fully qualified
+ 	Map.Entry as argument (gcj 3.1 workaround).
+ 	* java/awt/im/InputSubset.java: extends fully qualified
+ 	Character.Subset (likewise).
+ 	* java/util/AbstractMap.java (BasicMapEntry): implements fully
+ 	qualified Map.Entry (likewise).
+ 	* javax/swing/JList.java (setListData): Rename innerclass AL to ALData
+ 	to avoid name clash (likewise).
+ 
+ 2002-04-08  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/LogRecord.java (serialVersionUID): Added
+ 	for serialization compatibility with Sun J2SE 1.4.
+ 
+ 2002-04-08  Alberto Biancardi  <alberto.biancardi@unipv.it>
+ 
+ 	* java/awt/geom/Point2D.java (distance): Call distanceSq, not
+ 	distance.
+ 
+ 2002-04-08  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Character.java: Revert improper changes made by Mark's
+ 	re-merge with gcj.
+ 
+ 2002-04-08  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/zip/GZIPInputStream.java: Re-indentation, minor
+ 	amendments to the Javadoc.
+ 
+ 2002-04-08  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/zip/GZIPConstants.java: Remove file because the API
+ 	specification does not mention it.
+ 	* java/util/zip/GZIPInputStream.java (GZIP_MAGIC): Moved from
+ 	interface GZIPConstants.
+ 	* java/util/zip/GZIPInputStream.java (FTEXT, FHCRC,
+ 	FEXTRA, FNAME, FCOMMENT): Moved from interface GZIPConstants.
+ 	Change accessibility to package-only -- these members are not
+ 	mentioned by the API specification.
+ 	* java/util/zip/GZIPOutputStream.java
+ 	(GZIPOutputStream(OutputStream,int)): Take GZIP_MAGIC from
+ 	GZIPInputStream instead of GZIPConstants.
+ 
+ 2002-04-07  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/AbstractMap.java (putAll): Use entrySet size.
+ 	(toString): Explicitly use getKey() and getValue().
+ 
+ 2002-04-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/Makefile.am (JAVAC): Added -bootclasspath and
+ 	$(ARG_CLASSPATH_JAVAC) arguments.
+ 
+ 2002-04-07  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/Hashtable.java (contains): Remove NullPointer check.
+ 	(containsValue): Add NullPointer check.
+ 	(remove): Always throw NullPointerException when key is null.
+ 
+ 2002-04-06  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/lang/Character.java (isDefined): getType() != UNASSIGNED.
+ 
+ 2002-04-06  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/ArrayList.java (addAll(int,Collection)): System.arraycopy
+ 	all of the remaining elements.
+ 	* java/util/Vector.java (addAll(int,Collection)): Likewise.
+ 	(removeRange): If toIndex == fromIndex do
+ 	nothing, if toIndex < fromIndex throw IndexOutIfBoundsException.
+ 	(removeAll): Always throw NullPointerException when collection is
+ 	null.
+ 	(retrainAll): Likewise.
+ 
+ 2002-04-05  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/ArrayList.jva (removeRange): If toIndex == fromIndex do
+ 	nothing, if toIndex < fromIndex throw IndexOutIfBoundsException.
+ 		
+ 2002-04-04  Nic Ferrier  <nferrier@tapsellferrier.co.uk>
+ 
+ 	* gnu/java/net/protocol/file/FileURLConnection.java (connect):
+ 	Style change.
+ 	(getInputStream): ditto.
+ 	(getOutputStream): ditto.
+ 
+ 2002-04-04  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/Arrays.java (qsort): Fix off-by-one errors and use of
+ 	incorrect "hi" value when count > 40.
+ 
+ 2002-04-04  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/Level.java (readResolve): Add Javadoc.
+ 	* java/util/logging/Level.java (serialVersionUID): Make equal
+ 	to value of Sun J2SE1.4.
+ 
+ 2002-04-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/reflect/Modifier.java (toString(int,StringBuffer)): Fix
+ 	ordering.
+ 
+ 2002-04-02  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/IdentityHashMap.java (put, IdentityHashMap, hash),
+ 	(readObject): Strength reduction.
+ 	* java/awt/Color.java: Update to 1.4.
+ 
+ 2002-04-02  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/IdentityHashMap.java (put): Set new threshold correctly
+ 	when resizing table.
+ 
+ 2002-04-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/BitSet.java (BitSet(int)): if nbits < 0 throw
+ 	NegativeArraySizeException
+ 	(clear(int)): Use sign extended shift.
+ 	(flip(int)): Likewise.
+ 	(get(int)): Likewise.
+ 	(nextClearBit(int)): Likewise.
+ 	(nextSetBit(int)): Likewise.
+ 	(set(int)): Likewise.
+ 
+ 2002-04-01  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* configure.in: Add java/awt/dnd.
+ 	* java/awt/dnd/.cvsignore: New file.
+ 	* java/awt/dnd/Makefile.am: New file.
+ 	* java/awt/dnd/DropTarget.java: New file (stubbed).
+ 	* java/awt/event/WindowAdapter.java: Make abstract.
+ 	* java/beans/PropertyChangeEvent.java (rollback): New method.
+ 	* java/beans/VetoableChangeListener.java: Improve documentation.
+ 	* java/beans/VetoableChangeSupport.java (fireVetoableChange):
+ 	Rollback a failed change.
+ 	* javax/accessibility/AccessibleText.java: Uncomment javax.swing.
+ 	* javax/accessibility/AccessibleEditableText.java: Ditto.	
+ 
+ 2002-03-31  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/beans/ExceptionListener.java: New file.
+ 	* java/beans/Makefile.am (EXTRA_DIST): Add 3 new files.
+ 	* java/beans/PropertyChangeEvent.java: Update to 1.4.
+ 	* java/beans/PropertyChangeListener.java: Update to 1.4.
+ 	* java/beans/PropertyChangeListenerProxy.java: New file.
+ 	* java/beans/PropertyChangeSupport.java: Update to 1.4.
+ 	* java/beans/VetoableChangeListener.java: Update to 1.4.
+ 	* java/beans/VetoableChangeListenerProxy.java: New file.
+ 	* java/beans/VetoableChangeSupport.java: Update to 1.4.
+ 
+ 2002-03-30  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/Makefile.am (EXTRA_DIST): Add AWTKeyStroke.java.
+ 	* java/awt/AWTKeyStroke.java: New file.
+ 	* java/awt/AWTEventMulticaster.java: Update to 1.4.
+ 
+ 2002-03-30  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/EventQueue.java (getMostRecentEventTime): New method.
+ 	* java/util/EventListenerProxy.java: Fix typos.
+ 	* java/util/EventObject.java: Fix typos.
+ 	* java/awt/event/AWTEventListener.java: Update to 1.4.
+ 	* java/awt/event/AWTEventListenerProxy.java: New file.
+ 	* java/awt/event/ActionEvent.java: Update to 1.4.
+ 	* java/awt/event/ActionListener.java: Update to 1.4.
+ 	* java/awt/event/AdjustmentEvent.java: Update to 1.4.
+ 	* java/awt/event/AdjustmentListener.java: Update to 1.4.
+ 	* java/awt/event/ComponentAdapter.java: Update to 1.4.
+ 	* java/awt/event/ComponentEvent.java: Update to 1.4.
+ 	* java/awt/event/ComponentListener.java: Update to 1.4.
+ 	* java/awt/event/ContainerAdapter.java: Update to 1.4.
+ 	* java/awt/event/ContainerEvent.java: Update to 1.4.
+ 	* java/awt/event/ContainerListener.java: Update to 1.4.
+ 	* java/awt/event/FocusAdapter.java: Update to 1.4.
+ 	* java/awt/event/FocusEvent.java: Update to 1.4.
+ 	* java/awt/event/FocusListener.java: Update to 1.4.
+ 	* java/awt/event/HierarchyBoundsAdapter.java: Update to 1.4.
+ 	* java/awt/event/HierarchyBoundsListener.java: Update to 1.4.
+ 	* java/awt/event/HierarchyEvent.java: Update to 1.4.
+ 	* java/awt/event/HierarchyListener.java: Update to 1.4.
+ 	* java/awt/event/InputEvent.java: Update to 1.4.
+ 	* java/awt/event/InputMethodEvent.java: Update to 1.4.
+ 	* java/awt/event/InputMethodListener.java: Update to 1.4.
+ 	* java/awt/event/InvocationEvent.java: Update to 1.4.
+ 	* java/awt/event/ItemEvent.java: Update to 1.4.
+ 	* java/awt/event/ItemListener.java: Update to 1.4.
+ 	* java/awt/event/KeyAdapter.java: Update to 1.4.
+ 	* java/awt/event/KeyEvent.java: Update to 1.4.
+ 	* java/awt/event/KeyListener.java: Update to 1.4.
+ 	* java/awt/event/Makefile.am (EXTRA_DIST): Add new files.
+ 	* java/awt/event/MouseAdapter.java: Update to 1.4.
+ 	* java/awt/event/MouseEvent.java: Update to 1.4.
+ 	* java/awt/event/MouseListener.java: Update to 1.4.
+ 	* java/awt/event/MouseMotionAdapter.java: Update to 1.4.
+ 	* java/awt/event/MouseMotionListener.java: Update to 1.4.
+ 	* java/awt/event/MouseWheelEvent.java: New file.
+ 	* java/awt/event/MouseWheelListener.java: New file.
+ 	* java/awt/event/PaintEvent.java: Update to 1.4.
+ 	* java/awt/event/TextEvent.java: Update to 1.4.
+ 	* java/awt/event/TextListener.java: Update to 1.4.
+ 	* java/awt/event/WindowAdapter.java: Update to 1.4.
+ 	* java/awt/event/WindowEvent.java: Update to 1.4.
+ 	* java/awt/event/WindowFocusListener.java: New file.
+ 	* java/awt/event/WindowListener.java: Update to 1.4.
+ 	* java/awt/event/WindowStateListener.java: New file.
+ 
+ 2002-03-29  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/security/AllPermission.java: Update to 1.4.
+ 	* java/security/BasicPermission.java: Ditto.
+ 	* java/security/Certificate.java: Ditto.
+ 	* java/security/CodeSource.java: Ditto.
+ 	* java/security/DomainCombiner.java: Ditto.
+ 	* java/security/Guard.java: Ditto.
+ 	* java/security/GuardedObject.java: Ditto.
+ 	* java/security/Key.java: Ditto.
+ 	* java/security/Permission.java: Ditto.
+ 	* java/security/PermissionCollection.java: Ditto.
+ 	* java/security/Permissions.java: Ditto.
+ 	* java/security/Principal.java: Ditto.
+ 	* java/security/PrivateKey.java: Ditto.
+ 	* java/security/PrivilegedAction.java: Ditto.
+ 	* java/security/PrivilegedExceptionAction.java: Ditto.
+ 	* java/security/PublicKey.java: Ditto.
+ 	* java/security/SecurityPermission.java: Ditto.
+ 	* java/security/UnresolvedPermission.java: Ditto.
+ 
+ 2002-03-28  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* test/.cvsignore: New file.
+ 	* test/gnu.java.lang.reflect/.cvsignore: New file.
+ 	* test/java.io/.cvsignore: New file.
+ 	* test/java.lang.reflect/.cvsignore: New file.
+ 	* test/java.net/.cvsignore: New file.
+ 	* test/java.util/.cvsignore: New file.
+ 
+ 2002-03-28  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* configure.in: Add java/awt/im, java/awt/im/spi.
+ 	* java/awt/Makefile.am (SUBDIRS): Add java/awt/im.
+ 	* java/awt/im/.cvsignore: New file.
+ 	* java/awt/im/InputContext.java: New file.
+ 	* java/awt/im/InputMethodHighlight.java: New file.
+ 	* java/awt/im/InputMethodRequests.java: New file.
+ 	* java/awt/im/InputSubset.java: New file.
+ 	* java/awt/im/Makefile.am: New file.
+ 	* java/awt/im/spi/.cvsignore: New file.
+ 	* java/awt/im/spi/InputMethod.java: New file.
+ 	* java/awt/im/spi/InputMethodContext.java: New file.
+ 	* java/awt/im/spi/InputMethodDescriptor.java: New file.
+ 	* java/awt/im/spi/Makefile.am: New file.
+ 
+ 2002-03-28  John Leuner  <jewel@debian.org>
+ 
+ 	* java/lang/ClassLoader.java (getSystemClassLoader): Break
+ 	infinite loop by specifying parent classloader.
+ 	* gnu/java/lang/SystemClassLoader.java (SystemClassLoader): Add
+ 	proper constructor.
+ 
+ 2002-03-28  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* .cvsignore: Add autom4te.cache to ignored list.
+ 	* configure.in: Move CLASSPATH_WITH_JAVAH and
+ 	CLASSPATH_WITH_INCLUDEDIR out of conditionals, for use with latest
+ 	autotools. Make variable tests consistent.
+ 	* acinclude.m4: Make variable tests consistent.
+ 
+ 2002-03-28  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* AUTHORS: Update.
+ 	* THANKYOU: Update.
+ 
+ 2002-03-28  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	Patch 204:
+ 	* vm/reference/java/lang/Runtime.java (exit): Check shutdownHooks
+ 	for null.
+ 	(Runtime): Improve library path parsing.
+ 
+ 2002-03-26  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/Level.java (SEVERE, WARNING, INFO, CONFIG,
+ 	FINE, FINER, FINEST): Same intValue as Sun J2SE 1.4.
+ 
+ 2002-03-25  Eric Blake  <ebb9@email.byu.edu>
+ 	    Fred Gray  <fegray@npl.uiuc.edu>
+ 
+ 	* java/lang/Object.java (<clinit>): More bootstrap documentation.
+ 	* java/lang/System.java (<clinit>): Load native methods sooner.
+ 	* java/util/Hashtable.java (hash): Avoid native methods.
+ 
+ 2002-03-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/rmi/registry/RegistryImpl.java (main): Recognize --help
+ 	and --version.
+ 	(help): New method.
+ 	(version): Likewise.
+ 	* gnu/java/rmi/rmic/RMIC.java (parseOptions): Removed extraneous
+ 	"GNU".
+ 
+ 2002-03-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/Attributes.java (putValue(Name,String)): Make package
+ 	private.
+ 	* java/util/jar/Manifest.java (read_main_section): Don't require
+ 	Manifest-Version info, set to "0.0" when not found.
+ 
+ 2002-03-25  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* vm/reference/java/lang/Runtime.java (defaultProperties): New
+ 	field, to work around bootstrap issue.
+ 	(securityManager): Make package visible.
+ 	(Runtime): Remove bootstrap dependencies from constructor.
+ 	* vm/reference/java/lang/Thread.java: Use securityManager field
+ 	directly.
+ 	* vm/reference/java/lang/VMSystem.java (insertSystemProperties):
+ 	Move to Runtime, for bootstrap issue.
+ 	* java/lang/Object.java: Document bootstrap importance.
+ 	* java/lang/String.java: Ditto.
+ 	* java/lang/ThreadGroup.java: Use securityManager field directly.
+ 	* java/lang/System.java (defaultProperties): Remove, to work
+ 	around bootstrap issue.
+ 	* java/util/Dictionary.java: Document bootstrap importance.
+ 	* java/util/Hashtable.java: Ditto.
+ 	* java/util/Propeties.java: Ditto.
+ 	* java/util/StringTokenizer.java: Ditto.
+ 	* java/util/WeakHashMap.java: Ditto.
+ 
+ 2002-03-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Component.java (processEvent): Check ComponentEvent
+ 	after KeyEvent.
+ 
+ 2002-03-24  C. Brian Jones <cbj@gnu.org>
+ 
+ 	The following changes are all from patch submissions from Intel's
+ 	ORP team to get Classpath into a JBOSS compatible state.  This 
+ 	is primarily just the non-public API patches.
+ 	* java/io/BufferedOutputStream.java (flush): after writing out the
+ 	current buffer contents flush the underlying output stream
+ 	* java/io/File.java
+ 	(File(String,String)): make use of gnu.java.io.PlatformHelper; avoid
+ 	possible double separator char when setting path
+ 	(getName): make use of gnu.java.io.PlatformHelper
+ 	(getAbsolutePath): make use of PlatformHelper; avoid possible
+ 	double separator char if user.dir ends with separator
+ 	(getCanonicalPath): mostly replaced with call to 
+ 	gnu.java.io.PlatformHelper.toCanonicalForm()
+ 	(getParent): make use of gnu.java.io.PlatformHelper
+ 	(isAbsolute): make use of gnu.java.io.PlatformHelper when checking
+ 	root prefix
+ 	(mkdir): make use of gnu.java.io.PlatformHelper to consolidate 
+ 	removal of trailing separator character
+ 	(list): ditto
+ 	(toURL): add trailing separator for directory
+ 	* java/io/ObjectInputStream.java (readObject): place code in 
+ 	finally clause to it always executes
+ 	(defaultReadObject): change block data mode before/after read
+ 	(resolveProxyClass): formatting
+ 	(read): ??? modified algorithm, needs testing
+ 	(readBoolean): change block data mode as needed
+ 	(readByte): ditto
+ 	(readUnsignedByte): ditto
+ 	(readShort): ditto
+ 	(readUnsignedShort): ditto
+ 	(readChar): ditto
+ 	(readInt): ditto
+ 	(readLong): ditto
+ 	(readFloat): ditto
+ 	(readDouble): ditto
+ 	(readFields): change block data mode preserving old mode
+ 	(readFields): ditto; catch NoSuchFieldError and dump error message
+ 	(dump): set field to false by default to avoid debug messages
+ 	* java/io/ObjectOutputStream.java (writeObject): save old mode before
+ 	unsetting block data mode. Handle proxy classes writing instances of
+ 	Class
+ 	(annotateProxyClass): new method
+ 	(drain): conditionally write block data header
+ 	(close): flush stream before closing
+ 	(writeBoolean): blockDataOutput instead of dataOutput
+ 	(writeByte): ditto
+ 	(writeShort): ditto
+ 	(writeChar): ditto
+ 	(writeInt): ditto
+ 	(writeLong): ditto
+ 	(writeFloat): ditto
+ 	(writeDouble): ditto
+ 	(put): throw IllegalArgumentException if field not found
+ 	(write): save and reset block data mode
+ 	(writeArraySizeAndElements): optimize byte array case
+ 	(writeFields): save and reset block data mode; call 
+ 	ObjectStreamField.getTypeString instead of 
+ 	TypeSignature.getEncodingOfClass
+ 	(setBlockDataMode): added call to drain() and return boolean oldmode
+ 	* java/io/ObjectStreamClass.java 
+ 	(lookup): call lookupForClassObject
+ 	(lookupForClassObject): new method
+ 	(isProxyClass): new method
+ 	(setClass): set _isProxyClass
+ 	(ObjectStreamClass): set _isProxyClass; only set UID if serializable
+ 	(setFields): code to interoperate with JDK if Throwable serialized
+ 	form is not the same as the Java API, but commented out
+ 	* java/io/ObjectStreamConstants.java:
+ 	(TC_LONGSTRING): new constant
+ 	(TC_PROXYCLASSDESC): new constant
+ 	* java/io/ObjectStreamField.java (ObjectStreamField): store typename
+ 	(ObjectStreamField): new package private constructor for cases
+ 	where access to a Class is not available
+ 	(getTypeCode): use stored type name
+ 	(getTypeString): ditto
+ 	* java/io/PushbackInputStream.java (available): calculate available
+ 	correctly
+ 	(read): recalculate numBytes
+ 	(skip): skip ahead only the amount available that is already read
+ 	* java/security/DigestOutputStream.java
+ 	(write): use out.write instead of super.write
+ 	* java/security/MessageDigest.java (update): use offset
+ 	* java/security/PermissionCollection.java (static): do not override
+ 	private linesep
+ 	(toString): indicate readonly and output PermissionCollection
+ 	* java/security/Permissions.java (add): add perm to allPermissions
+ 	(add): do nothing if permission already added
+ 	* java/security/Policy.java (static): added static initializer to 
+ 	create policy
+ 	* java/security/ProtectionDomain.java (toString): output 
+ 	ProtectionDomain
+ 	* java/security/SecureClassLoader.java (SecureClassLoader): FIXME 
+ 	removed, call SecurityManager.checkCreateClassLoader
+ 	(SecureClassLoader): call SecurityManager.checkCreateClassLoader
+ 	* java/net/InetAddress.java (serialVersionUID): needed for 
+ 	serialization compatibility
+ 	(hostname): renamed hostName
+ 	(hostname_alias): changed to transient
+ 	(my_ip[]): ditto
+ 	(lookup_time): ditto
+ 	(address): new field for serialization
+ 	(family): ditto
+ 	(getHostName): use changed variable name hostName
+ 	(InetAddress): set family and address
+ 	* java/net/JarURLConnection.java (JarURLConnection): correct getting
+ 	of embedded URL
+ 	* java/net/PlainSocketImpl.java (available): implement natively
+ 	(getOption): do not synchronize
+ 	(setOption): ditto
+ 	(connect): ditto
+ 	(close): ditto
+ 	* java/net/URL.java (authority): new field
+ 	(userInfo): new transient field
+ 	(ph): changed to transient
+ 	(URL): removed previous hack of treating the spec URL as a file
+ 	to append to the context
+ 	(sameFile): missing brackets and incorrect formatting for the given
+ 	code make this a great catch
+ 	(writeObject): new method
+ 	(readObject): new method, throw IOException for unhandled protocol
+ 	(getPath): new method (1.3 spec)
+ 	* java/net/URLClassLoader.java (findClass): handled jars better
+ 	(findResource): treat as directory if it does not end with .zip or .jar
+ 	(getURLs): pass unnamed array of the appropriate size to toArray
+ 	* java/net/URLStreamHandler.java: import gnu.java.io.PlatformHelper
+ 	(parseURL): simplifying method
+ 	* java/rmi/MarshalledObject.java (MarshalledObject): implemented
+ 	(equals): implemented
+ 	(get): implemented
+ 	(hashCode): implemented
+ 	* java/rmi/server/RMIClassLoader.java
+ 	(MyClassLoader): new constructor
+ 	(static): initialize state
+ 	(loadClass): reimplemented; I think the new method may inappropriately 
+ 	miss the use of tok in caching loaders which also means not checking
+ 	for the loader correctly
+ 	(getClassAnnotation): implemented
+ 	* include/java_net_PlainSocketImpl.h: need to write native method
+ 	available
+ 
+ 2002-03-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/io/PushbackReader.java: Reformat.
+ 
+ 	Based on patch from Intel's ORP team:
+ 	* java/io/PushbackInputStream.java (available): Calculate correct 
+ 	number of bytes in buffer.
+ 	(read): Remove redundant bound check. Return bytes from both the
+ 	buffer and the stream.
+ 
+ 2002-03-24  Fred Gray  <fegray@uiuc.edu>
+ 
+ 	* java/lang/String.java (toCharArray): Remove optimization that
+ 	crashes ORP 1.0.9.
+ 
+ 2002-03-24  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/InheritableThreadLocal.java (newChildThread): Fix case
+ 	with inheriting null.
+ 	* java/util/ListResourceBundle.java: Update to 1.4.
+ 	* java/util/Locale.java: Update to 1.4.
+ 	* java/util/PropertyResourceBundle.java: Update to 1.4.
+ 	* java/util/ResourceBundle.java: Javadoc improvements.
+ 
+ 2002-03-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java (connectHooks): New
+ 	method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_old_create ):
+ 	Removed.
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectHooks): New
+ 	function.
+ 
+ 	* java/awt/TextComponent.java (TextComponent): Editable by
+ 	default.
+ 
+ 2002-03-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/MenuItem.java (eventMask): No longer private.
+ 	* java/awt/Button.java (dispatchEventImpl): Only dispatch to
+ 	superclass if we didn't handle event.
+ 	* java/awt/Checkbox.java (dispatchEventImpl): New method.
+ 	* java/awt/CheckboxMenuItem.java (dispatchEventImpl): New method.
+ 	* java/awt/Choice.java (dispatchEventImpl): New method.
+ 	* java/awt/List.java (dispatchEventImpl): New method.
+ 	* java/awt/Scrollbar.java (dispatchEventImpl): New method.
+ 	* java/awt/TextComponent.java (dispatchEventImpl): New method.
+ 	* java/awt/TextField.java (dispatchEventImpl): New method.
+ 
+ 2002-03-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectHooks): New
+ 	function.
+ 	(connect_checkbox_item_selectable_hook): Removed.
+ 	(item_toggled): Use jobject as second argument.
+ 	(connect_checkbox_item_selectable_hook): Removed.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java (postItemEvent): New
+ 	method.
+ 	(connectHooks): Likewise.
+ 
+ 2002-03-23  Michael Smith  <msmith@spinnakernet.com>
+ 
+ 	* java/util/GregorianCalendar.java (minimums, maximums): Correct
+ 	MONTH entry.
+ 
+ 2002-03-22  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	Portions of Patch 70:
+ 	* gnu/java/lang/ClassLoaderHelper.java: Remove special casing for
+ 	String, which no longer uses this.
+ 	* gnu/java/lang/Makefile.am (EXTRA_DIST) Add
+ 	SystemClassLoader.java.
+ 	* gnu/java/lang/SystemClassLoader.java: New file.
+ 	* gnu/java/lang/reflect/TypeSignature.java: Clean up, borrowing
+ 	ideas from java.lang.reflect.Proxy.
+ 	* gnu/java/util/EmptyEnumeration.java: Improve formatting.
+ 	* java/lang/ClassLoader.java: Use the new
+ 	gnu.java.lang.SystemClassLoader, plus support for loading an
+ 	alternative at startup.
+ 	* java/lang/reflect/Proxy.java: Fix some off-by-one bugs, use
+ 	gnu.java.lang.reflect.TypeSignature.
+ 	* java/sql/DriverManager.java: Throw appropriate exception.
+ 	* java/util/ResourceBundle.java: Rearrange code to favor common
+ 	case; use string buffers for speed.
+ 	* vm/reference/java/lang/Class.java (getClassLoader): Perform
+ 	security checks.
+ 	(getComponentType): Fix bugs.
+ 	* vm/reference/java/lang/Runtime.java: Include "." in search path.
+ 
+ 2002-03-22  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/geom/AffineTransform.java: Update to 1.4.
+ 	* java/awt/geom/Arc2D.java: New file (stubbed).
+ 	* java/awt/geom/Area.java: New file (stubbed).
+ 	* java/awt/geom/CubicCurve2D.java: New file (stubbed).
+ 	* java/awt/geom/Ellipse2D.java: Update formatting.
+ 	* java/awt/geom/FlatteningPathIterator.java: Check parameters.
+ 	* java/awt/geom/GeneralPath.java: New file (stubbed).
+ 	* java/awt/geom/Line2D.java: Fix minor bugs.
+ 	* java/awt/geom/Makefile.am (EXTRA_DIST): Add new files.
+ 	* java/awt/geom/Point2D.java: Fix spelling typo.
+ 	* java/awt/geom/QuadCurve2D.java: New file (stubbed).
+ 	* java/awt/geom/Rectangle2D.java (Float): Add new constructor.
+ 	(hashCode): Fix compile error - patch 203.
+ 	* java/awt/geom/RoundRectangle2D.java: Update formatting.
+ 
+ 2002-03-21  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/Locale.java (<clinit>): Attempt to resolve bootstrap
+ 	cycle with String.toUpperCase.
+ 
+ 2002-03-21  Eric Blake  <ebb9@email.byu.edu>
+ 	    Patrik Reali  <reali@acm.org>
+ 
+ 	* java/lang/String.java (replace, toLowerCase, toUpperCase): Fix
+ 	off-by-one and offset errors - inspired by patch 201.
+ 
+ 2002-03-21  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/Rectangle.java: Spelling typo.
+ 	* java/awt/geom/Rectangle2D.java (hashCode, equals): Missed these
+ 	in last commit.
+ 
+ 2002-03-21  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/Dimension.java: Update to 1.4.
+ 	* java/awt/Point.java: Update to 1.4.
+ 	* java/awt/Polygon.java (Polygon): Don't share array.
+ 	(contains(double, double)): Use boolean instead of int.
+ 	(getPathIterator): Fix bugs.
+ 	* java/awt/Rectangle.java: Update to 1.4.
+ 	* java/awt/geom/AffineTransform.java: Remove unused nested class.
+ 	* java/awt/geom/Dimension2D.java: Update to 1.4.
+ 	* java/awt/geom/FlatteningPathIterator.java: New file (stubbed).
+ 	* java/awt/geom/Line2D.java: Update to 1.4.
+ 	* java/awt/geom/Makefile.am (EXTRA_DIST) Added
+ 	FlatteningPathIterator.java.
+ 	* java/awt/geom/PathIterator.java: Improve Javadoc.
+ 	* java/awt/geom/Point2D.java: Update to 1.4.
+ 	* java/awt/geom/Rectangle2D.java: Update to 1.4.
+ 	* java/awt/geom/RectangularShape.java: Update to 1.4.
+ 
+ 2002-03-21  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/zip/ZipFile.java (OPEN_DELETE): Match constant
+ 	value given by Sun J2SE 1.4 Javadoc.
+ 
+ 2002-03-21  C. Brian Jones <cbj@gnu.org>
+ 
+ 	The following changes are all from patch submissions from Intel's
+ 	ORP team to get Classpath into a JBOSS compatible state.  This 
+ 	is primarily just the non-public API patches.  The rest will be
+ 	committed within a few days.
+ 	* gnu/java/io/PlatformHelper.java: new file
+ 	* gnu/java/io/Makefile.am: add new file to EXTRA_DIST
+ 	* gnu/java/lang/ClassLoaderHelper.java (getSystemResourceAsFile):
+ 	add support for .zip/.jar archive loading
+ 	* gnu/java/lang/reflect/TypeSignature.java: additional comments
+ 	* gnu/java/net/protocol/file/FileURLConnection.java (connect): if
+ 	file does not exist, throw FileNotFoundException
+ 	* gnu/java/net/protocol/file/Handler.java (parseURL): override
+ 	method from URLStreamHandler for parsing file URL
+ 	* gnu/java/net/protocol/jar/JarURLConnection.java: new file
+ 	* gnu/java/net/protocol/jar/Handler.java: new file
+ 	* gnu/java/net/protocol/jar/.cvsignore: new file
+ 	* gnu/java/net/protocol/jar/Makefile.am: new file
+ 	* gnu/java/net/protocol/Makefile.am: add jar to SUBDIRS
+ 	* gnu/java/rmi/RMIMarshalledObjectInputStream.java: new file
+ 	* gnu/java/rmi/RMIMarshalledObjectOutputStream.java: new file
+ 	* gnu/java/rmi/Makefile.am: add new file to EXTRA_DIST
+ 	* gnu/java/rmi/dgc/DGCImpl.java (dirty): partially implemented
+ 	* gnu/java/rmi/server/Makefile.am: add new file to EXTRA_DIST
+ 	* gnu/java/rmi/server/ConnectionRunnerPool.java: new file
+ 	* gnu/java/rmi/server/RMIHashes.java (getMethodHash): conformance
+ 	to object serialization specification 8.3
+ 	* gnu/java/rmi/server/RMIObjectInputStream.java 
+ 	(RMIObjectInputStream): new constructor
+ 	(resolveClass): try additional method of loading class and catch
+ 	exception from super.resolveClass
+ 	(getAnnotation): new method
+ 	(resolveProxyClass): new method
+ 	(readValue): new method
+ 	* gnu/java/rmi/server/RMIObjectOutputStream.java 
+ 	(setAnnotation): new method
+ 	(annotateClass): use new setAnnotation method
+ 	(annotateProxyClass): new method
+ 	(replaceObject): new method
+ 	(writeValue): new method
+ 	* gnu/java/rmi/server/UnicastConnection.java 
+ 	(acceptConnection): use buffered streams to improve efficiency
+ 	(makeConnection): ditto
+ 	(disconnect): close oout stream if needed
+ 	* gnu/java/rmi/server/UnicastConnectionManager.java 
+ 	(static): use host address instead of host name
+ 	(getInstance): ditto
+ 	(stopServer): new method
+ 	(run): exit thread if server thread is null
+ 	* gnu/java/rmi/server/UnicastRef.java (invokeCommon): handle 
+ 	primitive types and null return type
+ 	(writeExternal): remove write of RETURN_ACK because it confuses Sun's
+ 	implementation when interoperating
+ 	(readExternal): similarly read of RETURN_ACK or Sun's value ok
+ 	* gnu/java/rmi/server/UnicastServer.java 
+ 	(unexportObject): new method
+ 	(incomingMessageCall): check for primitive type and write it out
+ 	correctly
+ 	* gnu/java/rmi/server/UnicastServerRef.java: implements ServerRef
+ 	(exportObject): call new exportObject method with argument
+ 	(exportObject): new method, not completely implemented
+ 	(unexportObject): new method
+ 	(getHelperClass): remove use of Class.forName
+ 	(buildMethodHash): boolean argument allows build up or tear down
+ 	of method hash
+ 	(getMethodReturnType): new method
+ 	(incomingMessageCall): handle exceptions from meth.invoke differently
+ 	* gnu/java/security/provider/DefaultPolicy.java
+ 	(getPermissions): do not maintain static class variable of Permissions
+ 	* gnu/java/security/provider/SHA.java 
+ 	(engineUpdate): algorithm change
+ 	(engineDigest): algorithm change
+ 	* java/io/ObjectInputStream.java (resolveProxyClass): new method
+ 	* configure.in: add new Makefiles to AC_OUTPUT
+ 
+ 2002-03-20  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Cloneable.java: Improve Javadoc.
+ 	* java/lang/Comparable.java: Improve formatting.
+ 	* java/lang/Compiler.java: Improve formatting. Update to 1.4.
+ 	* java/lang/InheritableThreadLocal.java: Update to 1.4. This
+ 	includes much less object creation.
+ 	* java/lang/Process.java: Update to 1.4.
+ 	* java/lang/Runnable.java: Improve formatting.
+ 	* java/lang/SecurityManager.java: Partial update to 1.4.
+ 	* java/lang/ThreadGroup.java: Update to 1.4.
+ 	* java/lang/ThreadLocal.java: Update to 1.4. This includes much
+ 	less object creation.
+ 	* vm/reference/java/lang/Runtime.java: Check for dead Thread.
+ 	* vm/reference/java/lang/Thread.java: Update to 1.4.
+ 	* vm/reference/java/lang/Throwable.java: Fix typo.
+ 	* java/util/Properties.java: Fix comment.
+ 
+ 2002-03-20  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/awt/Font.java: Add 1.3 and 1.4 constant values.
+ 	* java/io/PipedInputStream.java (PIPE_SIZE): Adjust constant
+ 	value to match Sun J2SE 1.4 Javadoc.
+ 	* vm/reference/java/lang/Thread.java (MIN_PRIORITY, MAX_PRIORITY,
+ 	NORM_PRIORITY): Match values given by Sun J2SE 1.4 Javadoc.
+ 	* java/rmi/server/LogStream.java (BRIEF, VERBOSE): Match values
+ 	given by Sun J2SE 1.4 Javadoc.
+ 	* java/sql/Types.java: Mark 1.2 constant fields with @since.
+ 	* java/sql/Types.java (DATALINK, BOOLEAN): Add 1.4 constants.
+ 	
+ 2002-03-19  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/Makefile.am (EXTRA_DIST): Add new files.
+ 	* java/awt/AWTEvent.java: Update to 1.4.
+ 	* java/awt/ActiveEvent.java: Update to 1.4.
+ 	* java/awt/Adjustable.java: Update to 1.4.
+ 	* java/awt/Composite.java: New file.
+ 	* java/awt/CompositeContext.java: New file.
+ 	* java/awt/ItemSelectable.java: Update to 1.4.
+ 	* java/awt/KeyEventDispatcher.java: New file.
+ 	* java/awt/KeyEventPostProcessor.java: New file.
+ 	* java/awt/LayoutManager.java: Update to 1.4.
+ 	* java/awt/LayoutManager2.java: Update to 1.4.
+ 	* java/awt/MenuContainer.java: Update to 1.4.
+ 	* java/awt/Paint.java: Update to 1.4.
+ 	* java/awt/PaintContext.java: Update to 1.4.
+ 	* java/awt/Polygon.java: Update to 1.4, including new methods.
+ 	* java/awt/PrintGraphics.java: Update to 1.4.
+ 	* java/awt/Shape.java: Update to 1.4.
+ 	* java/awt/Stroke.java: New file.
+ 	* java/awt/Transparency.java: Update to 1.4.
+ 
+ 2002-03-19  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/awt/AWTEvent.java: Add constant field values to match J2SE
+ 	1.4 javadoc.
+ 	* java/awt/BorderLayout.java: Add constant field values in order
+ 	to match J2SE 1.4 javadoc.  Nicer documentation strings for some
+ 	constant field values.  Add @since tags to mark 1.2 and 1.4 fields.
+ 
+ 2002-03-19  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/lang/String.java (regionMatches): Used wrong String, see
+ 	Patch 195.
+ 
+ 2002-03-19  Nic Ferrier  <nferrier@tapsellferrier.co.uk>
+ 
+ 	* gnu/java/net/protocol/file/FileURLConnection.java: Formatting
+ 	changes.
+ 	* gnu/java/net/protocol/file/Handle.java: Formatting changes.
+ 
+ 2002-03-18  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* javax/accessibility/AccessibleExtendedComponent.java: Typos in
+ 	original commit.
+ 	* javax/accessibility/AccessibleExtendedTable.java: Ditto.
+ 	* javax/accessibility/AccessibleHyperlink.java: Ditto.
+ 
+ 2002-03-18  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* lib/standard.omit: Remove javax/accessibility.
+ 	* configure.in (AC_OUTPUT): Add javax/accessibility/Makefile.
+ 
+ 2002-03-18  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/applet/AppletContext.java (setStream, getStream),
+ 	(getStreamKeys): Add new methods.
+ 	* java/applet/AppletStub.java: Improve javadoc.
+ 	* java/applet/AudioClip.java: Ditto.
+ 	* java/applet/Applet.java: Updated to 1.4.
+ 	* java/awt/Makefile.am (EXTRA_DIST): Add DisplayMode.java,
+ 	GraphicsConfigTemplate.java, GraphicsDevice.java and
+ 	GraphicsEnvironment.java.
+ 	* java/awt/DisplayMode.java: New file.
+ 	* java/awt/GraphicsConfigTemplate.java: New file.
+ 	* java/awt/GraphicsDevice.java: New file.
+ 	* java/awt/GraphicsEnvironment.java: New file.
+ 	* java/awt/GraphicsConfiguration.java (getDevice): Add method.
+ 	* java/awt/Panel.java: Updated to 1.4.
+ 	* java/awt/AWTPermission.java: Updated to 1.4.
+ 	* java/awt/Container.java: Partial update to 1.4.
+ 	* java/awt/Component.java: Partial update to 1.4.
+ 
+ 2002-03-18  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* javax/Makefile.am (SUBDIRS): Visit accessibility subdir.
+ 	* javax/accessibility/Makefile.am: New file.
+ 	* javax/accessibility/.cvsignore: New file.
+ 	* javax/accessibility/Accessible.java: Update to 1.4.
+ 	* javax/accessibility/AccessibleAction.java: Update to 1.4.
+ 	* javax/accessibility/AccessibleBundle.java: Implement.
+ 	* javax/accessibility/AccessibleComponent.java: Update to 1.4.
+ 	* javax/accessibility/AccessibleContext.java: Implement.
+ 	* javax/accessibility/AccessibleEditableText.java: New file.
+ 	* javax/accessibility/AccessibleExtendedComponent.java: New file.
+ 	* javax/accessibility/AccessibleExtendedTable.java: New file.
+ 	* javax/accessibility/AccessibleHyperlink.java: Implement.
+ 	* javax/accessibility/AccessibleHypertext.java: Update to 1.4.
+ 	* javax/accessibility/AccessibleIcon.java: New file.
+ 	* javax/accessibility/AccessibleKeyBinding.java: New file.
+ 	* javax/accessibility/AccessibleRelation.java: New file.
+ 	* javax/accessibility/AccessibleRelationSet.java: New file.
+ 	* javax/accessibility/AccessibleResourceBundle.java: Implement.
+ 	* javax/accessibility/AccessibleRole.java: Implement.
+ 	* javax/accessibility/AccessibleSelection.java: Update to 1.4.
+ 	* javax/accessibility/AccessibleState.java: Implement.
+ 	* javax/accessibility/AccessibleStateSet.java: Implement.
+ 	* javax/accessibility/AccessibleTable.java: New file.
+ 	* javax/accessibility/AccessibleTableModelChange.java: New file.
+ 	* javax/accessibility/AccessibleText.java: Update to 1.4.
+ 	* javax/accessibility/AccessibleValue.java: Update to 1.4.
+ 
+ 2002-03-17  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* java/net/URLStreamHandler.java (parseURL): incorporate patch from
+ 	Intel to accomodate additional formats
+ 
+ 2002-03-12  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/gen_nio.sh.in: new file is renamed gen_nio.sh plus fixes 
+ 	to make it work when building outside of the classpath directory
+ 	* lib/gen_nio.sh: removed file
+ 	* lib/.cvsignore: ignore gen_nio.sh
+ 	* configure.in: generate gen_nio.sh and nio related Makefiles 
+ 	in OUTPUT.  Revert comment out of check for libart_lgpl
+ 	* lib/Makefile.am: give gen_nio.sh some idea of the top_builddir
+ 	and make it a separate target, gennio, that must be manually 
+ 	executed; the generated files will be part of CVS since they change
+ 	only when the source .cpp changes rather than due to a configuration
+ 	change
+ 	* java/nio/Makefile.am: new file
+ 	* java/nio/.cvsignore: new file
+ 	* java/nio/charset/Makefile.am: new file
+ 	* java/nio/charset/.cvsignore: new file
+ 	* java/nio/channels/Makefile.am: new file
+ 	* java/nio/channels/.cvsignore: new file
+ 	* java/nio/channels/spi/Makefile.am: new file
+ 	* java/nio/channels/spi/.cvsignore: new file
+ 	* gnu/java/nio/Makefile.am: new file
+ 	* gnu/java/nio/.cvsignore: new file
+ 	* java/nio/ShortBuffer.java: generated file
+ 	* java/nio/ByteBuffer.java: generated file
+ 	* java/nio/LongBuffer.java: generated file
+ 	* java/nio/IntBuffer.java: generated file
+ 	* java/nio/FloatBuffer.java: generated file
+ 	* java/nio/DoubleBuffer.java: generated file
+ 	* java/nio/CharBuffer.java: generated file
+ 	* gnu/java/nio/ShortBufferImpl.java: generated file
+ 	* gnu/java/nio/MappedShortFileBuffer.java: generated file
+ 	* gnu/java/nio/MappedLongFileBuffer.java: generated file
+ 	* gnu/java/nio/MappedIntFileBuffer.java: generated file
+ 	* gnu/java/nio/MappedFloatFileBuffer.java: generated file
+ 	* gnu/java/nio/MappedDoubleFileBuffer.java: generated file
+ 	* gnu/java/nio/MappedCharFileBuffer.java: generated file
+ 	* gnu/java/nio/MappedByteFileBuffer.java: generated file
+ 	* gnu/java/nio/LongBufferImpl.java: generated file
+ 	* gnu/java/nio/IntBufferImpl.java: generated file
+ 	* gnu/java/nio/FloatBufferImpl.java: generated file
+ 	* gnu/java/nio/DoubleBufferImpl.java: generated file
+ 	* gnu/java/nio/CharBufferImpl.java: generated file
+ 	* gnu/java/nio/ByteBufferImpl.java: generated file
+ 
+ 2002-03-12  Ronald Veldema <rveldema@cs.vu.nl>
+ 
+ 	* Removes dependencies on manta; javax.swing, 
+ 	gnu.java.nio and java.nio now compile with jikes;
+ 
+ 2002-03-11  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: moved AM_CONDITIONAL statements out of conditionals
+ 	to avoid warning from autoconf 2.53
+ 	* configure.in: explicitly call CLASSPATH_FIND_JAVA outside of a 
+ 	conditional to avoid AM_CONDITIONAL warning
+ 
+ 2002-03-11  Ronald Veldema <rveldema@cs.vu.nl>
+ 
+ 	* java.nio.*: new files
+ 	* gnu.java.nio.*: new files; provides java.nio.* implementation; 
+ 	the native side is not yet done
+ 	* javax.swing.*: new files; embryonic state;swing builds ontop of 
+ 	java.awt, so needs awt; needs makefile support
+ 	* added lib/gen_nio.sh: new file; it generates all those 
+ 	java.nio.TYPEBuffer.java and gnu.java.nio.TYPEBuffer.java files 
+ 	where TYPE={Byte,Long,Float,etc}
+ 
+ 2002-03-11  Mark Wielaard <mark@klomp.org>
+ 
+ 	* lib/standard.omit: add java.nio and gnu.java.nio packages.
+ 
+ 2002-03-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(awt_event_handler): Set insets to 0.
+ 
+ 	* native/jni/gtk-peer/gthread-jni.h: Fixed #endif.
+ 
+ 	Update checkbutton and radiobutton code.  Now it mostly works.
+ 	* gnu/java/awt/peer/gtk/GtkRadioButtonPeer.java: Removed.
+ 	* gnu/java/awt/peer/gtk/GtkCheckButtonPeer.java: Removed.
+ 	* gnu/java/awt/peer/gtk/GtkToggleButtonPeer.java: Removed.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createCheckbox): Use
+ 	GtkCheckboxPeer.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java (setLabel): Rewrote.
+ 	(setState): Rewrote.
+ 	(gtkCheckButtonSetState, gtkCheckButtonSetLabel): Removed.
+ 	(setCheckboxGroup): Rewrote.
+ 	(gtkRadioButtonSetGroup): Removed.
+ 	(nativeCreate): Declare.
+ 	(gtkRadioButtonNew, gtkCheckButtonNew): Removed.
+ 	(GtkCheckboxPeer): Don't call `new' methods.
+ 	(create): New method.
+ 	(getArgs): Likewise.
+ 	(nativeSetCheckboxGroup): New method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_setCheckboxGroup):
+ 	Likewise.
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_setState): Removed.
+ 	(Java_gnu_java_awt_peer_gtk_GtkRadioButtonPeer_create): Removed.
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkRadioButtonNew):
+ 	Removed.
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkCheckButtonNew):
+ 	Removed.
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_setLabel): Removed.
+ 
+ 	* java/awt/GridLayout.java (layoutContainer): Handle case where
+ 	there are no items in container.
+ 
+ 2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/awt/MediaTracker.java: Implemented.
+ 	* java/awt/ImageMediaEntry: Removed.
+ 	* java/awt/MediaEntry: Removed.
+ 	* java/awt/Makefile.am (EXTRA_DIST): Remove ImageMediaEntry and 
+ 	MediaEntry.
+ 
+ 2002-03-09  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* scripts/unicode-muncher.pl: Bump the version, minor tweaks.
+ 	* gnu/java/lang/CharData.java: Regenerate.
+ 	* java/lang/Character.java: Remerge with gcj.
+ 	* java/lang/Integer.java (toString, toUnsignedString): Use package
+ 	String constructor.
+ 	* java/lang/Long.java (toString, toUnsignedString): Ditto.
+ 	* java/lang/String.java: Fix some off-by-one errors and typos.
+ 	(offset): Implement, to match gcj.
+ 	(String(char[], int, int, boolean)): Change signature of package
+ 	constructor to be more flexible, and match gcj.
+ 	* java/lang/StringBuffer.java (substring, regionMatches): Use
+ 	offset improvements in String.	
+ 
+ 2002-03-08  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/regex/Pattern.java (split): Add missing stubs.
+ 	* java/util/regex/Matcher.java (replace*): Ditto.
+ 	* doc/unicode/SpecialCasing-2.txt: New file from unicode.org.
+ 	* scripts/unicode-muncher.pl: Add special casing rules for
+ 	multi-character uppercase expansions.
+ 	* gnu/java/lang/CharData.java: Regenerate.
+ 	* java/util/WeakHashMap.java: Improve Javadoc.
+ 	* java/lang/CharSequence.java: Ditto.
+ 	* java/lang/Character.java (getDirectionality): Update to new
+ 	CharData format.
+ 	(direction, readChar): Change visibility.
+ 	(toString): One less method call.
+ 	* java/lang/String.java: General code cleanup, optimizations, and
+ 	better exception matching to Sun's implementation.
+ 	(internTable, intern): Switch to use weak references.
+ 	(String(StringBuffer), String(char[], int)): Implement array
+ 	sharing when the array comes from a trusted source.
+ 	(matches, replace*, split): New methods, that call unimplemented
+ 	stubs in java.util.regex.
+ 	(toUpperCase, toLowerCase): Correctly implement one-to-many case
+ 	conversions, and special casing based on locale.
+ 	(upperExpand, upperSpecial, upperCaseExpansion, upperCaseIndex):
+ 	New tables and methods, to implement toUpperCase.
+ 	* java/lang/StringBuffer.java: General code cleanup,
+ 	optimizations, and better exception matching.
+ 	(substring): Use array sharing.
+ 	(append(StringBuffer), indexOf, lastIndexOf): Avoid object
+ 	creation.
+ 	(regionMatches): New method, used by indexOf.
+ 
+ 2002-03-08  Mark Wielaard <mark@klomp.org>
+ 
+ 	* lib/Makefile.am: Add -bootclasspath '' -extdirs '' -sourcepath '' to
+ 	jikes invocation.
+ 	* java/net/Socket.java (shutdownInput): new stub method.
+ 	(shutdownOutput): likewise.
+ 	* vm/reference/java/lang/Class.java (forNme(String)): native again.
+ 	* gnu/java/awt/peer/gtk/Makefile: removed (autogenerated).
+ 
+ 2002-03-08  John Leuner  <jewel@debian.org>
+ 
+ 	* java/util/regex/Matcher.java: Added stub class
+ 	* java/util/regex/Pattern.java: Added stub class
+ 
+ 2002-03-07  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/String.java: Improve Javadoc and formatting.
+ 	* java/lang/StringBuffer.java: Ditto.
+ 
+ 2002-03-06  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/RuntimePermission.java: Improve Javadoc.
+ 	* java/lang/SecurityManager.java: Improve Javadoc and formatting.
+ 	* java/lang/System.java (setIn, setOut, setErr): Add required
+ 	security check.
+ 	(defaultProperties): Add a default, to allow clean resetting of
+ 	properties back to the VM startup state.
+ 	(setProperties): Correctly reset properties to default state.
+ 	* native/jni/java-lang/java_lang_System.c: Update method
+ 	signatures for changing I/O.
+ 	* include/java_lang_System.h: Ditto.
+ 	* vm/reference/java/lang/Runtime.java: Add shutdown hook
+ 	capability, as well as updating the exec calls.
+ 	* vm/reference/java/lang/VMSecurityManager.java: Improve Javadoc.
+ 	* java/util/PropertyPermission.java: Fix implication bugs.
+ 	* java/util/PropertyPermissionCollection.java: Ditto.
+ 
+ 2002-03-04  Sascha Brawer  <brawer@acm.org>
+ 
+ 	* java/util/logging/ConsoleHandler.java: Initial check-in.
+ 	* java/util/logging/ErrorManager.java: Initial check-in.
+ 	* java/util/logging/FileHandler.java: Initial check-in.
+ 	* java/util/logging/Filter.java: Initial check-in.
+ 	* java/util/logging/Formatter.java: Initial check-in.
+ 	* java/util/logging/Handler.java: Initial check-in.
+ 	* java/util/logging/Level.java: Initial check-in.
+ 	* java/util/logging/LogManager.java: Initial check-in.
+ 	* java/util/logging/LogRecord.java: Initial check-in.
+ 	* java/util/logging/Logger.java: Initial check-in.
+ 	* java/util/logging/LoggingPermission.java: Initial check-in.
+ 	* java/util/logging/MemoryHandler.java: Initial check-in.
+ 	* java/util/logging/SimpleFormatter.java: Initial check-in.
+ 	* java/util/logging/SocketHandler.java: Initial check-in.
+ 	* java/util/logging/StreamHandler.java: Initial check-in.
+ 	* java/util/logging/XMLFormatter.java: Initial check-in.
+ 	
+ 2002-03-03 Mark Wielaard <mark@klomp.org>
+ 
+ 	* THANKYOU: Add Sascha Brawer
+ 	* java/lang/System.java (static): Set java.io.tmpdir from java.tmpdir
+ 	if not yet set.
+ 	* java/io/File.java (createTempFile): Use java.io.tmpdir property not
+ 	java.tmpdir.
+ 
+ 2002-03-03 Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/awt/Font.java (decode): Catch NumberFormatException.
+ 
+ 2002-03-03 Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/Timer (TaskQueue.stop): set elements to zero.
+ 	* THANKYOU: Add Shuhua Zhang
+ 
+ 2002-03-02 Mark Wielaard <mark@klomp.org>
+ 
+ 	* lib/standard.omit: java/security/cert/CertPathValidatorException.java
+ 	added.
+ 
+ 2002-03-02 Wu Gansha <gansha.wu@intel.com>
+ 
+ 	* vm/reference/java/lang/reflect/Method.java (equals): reimplement.
+ 
+ 2002-02-26  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* vm/reference/java/lang/Runtime.java: Formatting and Javadoc.
+ 	* vm/reference/java/lang/VMSystem.java: Ditto.
+ 	* java/lang/System.java: Ditto.
+ 	* java/util/Properties.java: Fix doc typo.
+ 
+ 2002-02-25  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Double.java (byteValue, shortValue, compareTo): Add
+ 	missing methods, fix typo in last commit.
+ 	* java/lang/Float.java (byteValue, shortValue, compareTo): Ditto.
+ 	* java/lang/Number.java (digits): Add lookup table.
+ 	* java/lang/Character.java (forDigit): Use table.
+ 	* java/lang/Integer.java (toString(int, int)): Optimize
+ 	case for MIN_VALUE.
+ 	(getInteger(String, Integer)): Trap NullPointerException,
+ 	IllegalArgumentException from System.getProperty.
+ 	(parseInt(String, int, boolean)): Combine parseInt and decode into
+ 	one method, and optimize.
+ 	(parseInt, decode, valueOf): Use improved parseInt.
+ 	* java/lang/Byte.java (parseByte, decode): Ditto.
+ 	* java/lang/Short.java (parseShort, decode): Ditto.
+ 	* java/lang/Long.java (parseLong(String, int, boolean)): Combine
+ 	parseLong and decode into one method, and optimize.
+ 	(parseLong, decode, valueOf): Use improved parseLong.
+ 	(toString): Optimize case for MIN_VALUE.
+ 	(getLong(String, Long)): Trap NullPointerException,
+ 	IllegalArgumentException from System.getProperty.
+ 	* java/lang/Boolean.java (getBoolean): Trap NullPointerException,
+ 	IllegalArgumentException from System.getProperty.
+ 
+ 2002-02-24  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Byte.java: Reformat, improve Javadoc.
+ 	* java/lang/Double.java: Ditto.
+ 	* java/lang/Float.java: Ditto.
+ 	* java/lang/Integer.java: Ditto.
+ 	* java/lang/Long.java: Ditto.
+ 	* java/lang/Number.java: Ditto.
+ 	* java/lang/Short.java: Ditto.
+ 
+ 2002-02-23  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/AWTError.java: Update to 1.4.
+ 	* java/awt/AWTException.java: Ditto.
+ 	* java/awt/IllegalComponentStateException.java: Ditto.
+ 	* java/awt/datatransfer/MimeTypeParseException.java: Ditto.
+ 	* java/awt/datatransfer/UnsupportedFlavorException.java: Ditto.
+ 	* java/awt/geom/IllegalPathStateException.java: Ditto.
+ 	* java/awt/geom/NoninvertibleTransformException.java: Ditto.
+ 	* java/awt/print/PrinterAbortException.java: Ditto.
+ 	* java/awt/print/PrinterException.java: Ditto.
+ 	* java/awt/print/PrinterIOException.java: Ditto.
+ 	* java/beans/IntrospectionException.java: Ditto.
+ 	* java/beans/PropertyVetoException.java: Ditto.
+ 	* java/io/CharConversionException.java: Ditto.
+ 	* java/io/EOFException.java: Ditto.
+ 	* java/io/FileNotFoundException.java: Ditto.
+ 	* java/io/InterruptedIOException.java: Ditto.
+ 	* java/io/InvalidClassException.java: Ditto.
+ 	* java/io/InvalidObjectException.java: Ditto.
+ 	* java/io/IOException.java: Ditto.
+ 	* java/io/NotActiveException.java: Ditto.
+ 	* java/io/NotSerializableException.java: Ditto.
+ 	* java/io/ObjectStreamException.java: Ditto.
+ 	* java/io/OptionalDataException.java: Ditto.
+ 	* java/io/StreamCorruptedException.java: Ditto.
+ 	* java/io/SyncFailedException.java: Ditto.
+ 	* java/io/UnsupportedEncodingException.java: Ditto.
+ 	* java/io/UTFDataFormatException.java: Ditto.
+ 	* java/io/WriteAbortedException.java: Ditto.
+ 	* java/lang/AbstractMethodError.java: Ditto.
+ 	* java/lang/ArithmeticException.java: Ditto.
+ 	* java/lang/ArrayIndexOutOfBoundsException.java: Ditto.
+ 	* java/lang/ArrayStoreException.java: Ditto.
+ 	* java/lang/AssertionError.java: Ditto.
+ 	* java/lang/ClassCastException.java: Ditto.
+ 	* java/lang/ClassCircularityError.java: Ditto.
+ 	* java/lang/ClassFormatError.java: Ditto.
+ 	* java/lang/ClassNotFoundException.java: Ditto.
+ 	* java/lang/CloneNotSupportedException.java: Ditto.
+ 	* java/lang/Exception.java: Ditto.
+ 	* java/lang/ExceptionInInitializerError.java: Ditto.
+ 	* java/lang/IllegalAccessError.java: Ditto.
+ 	* java/lang/IllegalAccessException.java: Ditto.
+ 	* java/lang/IllegalArgumentException.java: Ditto.
+ 	* java/lang/IllegalMonitorStateException.java: Ditto.
+ 	* java/lang/IllegalStateException.java: Ditto.
+ 	* java/lang/IllegalThreadStateException.java: Ditto.
+ 	* java/lang/IncompatibleClassChangeError.java: Ditto.
+ 	* java/lang/IndexOutOfBoundsException.java: Ditto.
+ 	* java/lang/InstantiationError.java: Ditto.
+ 	* java/lang/InstantiationException.java: Ditto.
+ 	* java/lang/InternalError.java: Ditto.
+ 	* java/lang/InterruptedException.java: Ditto.
+ 	* java/lang/LinkageError.java: Ditto.
+ 	* java/lang/NegativeArraySizeException.java: Ditto.
+ 	* java/lang/NoClassDefFoundError.java: Ditto.
+ 	* java/lang/NoSuchFieldError.java: Ditto.
+ 	* java/lang/NoSuchFieldException.java: Ditto.
+ 	* java/lang/NoSuchMethodError.java: Ditto.
+ 	* java/lang/NoSuchMethodException.java: Ditto.
+ 	* java/lang/NullPointerException.java: Ditto.
+ 	* java/lang/NumberFormatException.java: Ditto.
+ 	* java/lang/OutOfMemoryError.java: Ditto.
+ 	* java/lang/RuntimeException.java: Ditto.
+ 	* java/lang/SecurityException.java: Ditto.
+ 	* java/lang/StackOverflowError.java: Ditto.
+ 	* java/lang/StringIndexOutOfBoundsException.java: Ditto.
+ 	* java/lang/ThreadDeath.java: Ditto.
+ 	* java/lang/UnknownError.java: Ditto.
+ 	* java/lang/UnsatisfiedLinkError.java: Ditto.
+ 	* java/lang/UnsupportedClassVersionError.java: Ditto.
+ 	* java/lang/UnsupportedOperationException.java: Ditto.
+ 	* java/lang/VerifyError.java: Ditto.
+ 	* java/lang/VirtualMachineError.java: Ditto.
+ 	* java/lang/Void.java: Ditto.
+ 	* java/lang/reflect/InvocationTargetException.java: Ditto.
+ 	* java/lang/reflect/UndeclaredThrowableException.java: Ditto.
+ 	* java/net/BindException.java: Ditto.
+ 	* java/net/ConnectException.java: Ditto.
+ 	* java/net/MalformedURLException.java: Ditto.
+ 	* java/net/NoRouteToHostException.java: Ditto.
+ 	* java/net/ProtocolException.java: Ditto.
+ 	* java/net/SocketException.java: Ditto.
+ 	* java/net/UnknownHostException.java: Ditto.
+ 	* java/net/UnknownServiceException.java: Ditto.
+ 	* java/rmi/AccessException.java: Ditto.
+ 	* java/rmi/AlreadyBoundException.java: Ditto.
+ 	* java/rmi/ConnectException.java: Ditto.
+ 	* java/rmi/ConnectIOException.java: Ditto.
+ 	* java/rmi/MarshalException.java: Ditto.
+ 	* java/rmi/NoSuchObjectException.java: Ditto.
+ 	* java/rmi/NotBoundException.java: Ditto.
+ 	* java/rmi/RemoteException.java: Ditto.
+ 	* java/rmi/RMISecurityException.java: Ditto.
+ 	* java/rmi/ServerException.java: Ditto.
+ 	* java/rmi/ServerRuntimeException.java: Ditto.
+ 	* java/rmi/StubNotFoundException.java: Ditto.
+ 	* java/rmi/UnexpectedException.java: Ditto.
+ 	* java/rmi/UnknownHostException.java: Ditto.
+ 	* java/rmi/UnmarshalException.java: Ditto.
+ 	* java/rmi/activation/ActivateFailedException.java: Ditto.
+ 	* java/rmi/activation/ActivationException.java: Ditto.
+ 	* java/rmi/activation/UnknownGroupException.java: Ditto.
+ 	* java/rmi/activation/UnknownObjectException.java: Ditto.
+ 	* java/rmi/server/ExportException.java: Ditto.
+ 	* java/rmi/server/ServerCloneException.java: Ditto.
+ 	* java/rmi/server/ServerNotActiveException.java: Ditto.
+ 	* java/rmi/server/SkeletonMismatchException.java: Ditto.
+ 	* java/rmi/server/SkeletonNotFoundException.java: Ditto.
+ 	* java/rmi/server/SocketSecurityException.java: Ditto.
+ 	* java/security/AccessControlException.java: Ditto.
+ 	* java/security/DigestException.java: Ditto.
+ 	* java/security/GeneralSecurityException.java: Ditto.
+ 	* java/security/InvalidAlgorithmParameterException.java: Ditto.
+ 	* java/security/InvalidKeyException.java: Ditto.
+ 	* java/security/InvalidParameterException.java: Ditto.
+ 	* java/security/KeyException.java: Ditto.
+ 	* java/security/KeyManagementException.java: Ditto.
+ 	* java/security/KeyStoreException.java: Ditto.
+ 	* java/security/NoSuchAlgorithmException.java: Ditto.
+ 	* java/security/NoSuchProviderException.java: Ditto.
+ 	* java/security/PrivilegedActionException.java: Ditto.
+ 	* java/security/ProviderException.java: Ditto.
+ 	* java/security/SignatureException.java: Ditto.
+ 	* java/security/UnrecoverableKeyException.java: Ditto.
+ 	* java/security/acl/AclNotFoundException.java: Ditto.
+ 	* java/security/acl/LastOwnerException.java: Ditto.
+ 	* java/security/acl/NotOwnerException.java: Ditto.
+ 	* java/security/cert/CertificateEncodingException.java: Ditto.
+ 	* java/security/cert/CertificateException.java: Ditto.
+ 	* java/security/cert/CertificateExpiredException.java: Ditto.
+ 	* java/security/cert/CertificateNotYetValidException.java: Ditto.
+ 	* java/security/cert/CertificateParsingException.java: Ditto.
+ 	* java/security/cert/CRLException.java: Ditto.
+ 	* java/security/spec/InvalidKeySpecException.java: Ditto.
+ 	* java/security/spec/InvalidParameterSpecException.java: Ditto.
+ 	* java/sql/BatchUpdateException.java: Ditto.
+ 	* java/sql/DataTruncation.java: Ditto.
+ 	* java/sql/SQLException.java: Ditto.
+ 	* java/sql/SQLWarning.java: Ditto.
+ 	* java/text/ParseException.java: Ditto.
+ 	* java/util/MissingResourceException.java: Ditto.
+ 	* java/util/jar/JarException.java: Ditto.
+ 	* java/util/prefs/BackingStoreException.java: Ditto.
+ 	* java/util/prefs/InvalidPreferencesFormatException.java: Ditto.
+ 	* java/util/zip/DataFormatException.java: Ditto.
+ 	* java/util/zip/ZipException.java: Ditto.
+ 	* java/awt/Makefile.am (EXTRA_DIST): Add FontFormatException.java
+ 	and HeadlessException.java.
+ 	* java/awt/FontFormatException.java: New file.
+ 	* java/awt/HeadlessException.java: New file.
+ 	* java/awt/color/Makefile.am (EXTRA_DIST): Add CMMException.java
+ 	and ProfileDataException.java.
+ 	* java/awt/color/CMMException.java: New file.
+ 	* java/awt/color/ProfileDataException.java: New file.
+ 	* java/awt/image/Makefile.am (EXTRA_DIST): Add
+ 	ImagingOpException.java and RasterFormatException.java.
+ 	* java/awt/image/ImagingOpException.java: New file.
+ 	* java/awt/image/RasterFormatException.java: New file.
+ 	* java/net/Makefile.am (EXTRA_DIST): Add
+ 	PortUnreachableException.java, SocketTimeoutException.java and
+ 	URISyntaxException.java.
+ 	* java/net/PortUnreachableException.java: New file.
+ 	* java/net/SocketTimeoutException.java: New file.
+ 	* java/net/URISyntaxException.java: New file.
+ 	* java/security/cert/Makefile.am (EXTRA_DIST): Add
+ 	CertPathBuilderException.java, CertPathValidatorException.java,
+ 	and CertStoreException.java.
+ 	* java/security/cert/CertPathBuilderException.java: New file.
+ 	* java/security/cert/CertPathValidatorException.java: New file.
+ 	* java/security/cert/CertStoreException.java: New file.
+ 	* vm/reference/java/lang/Throwable.java (toString): Use
+ 	getLocalizedMessage().
+ 	* ChangeLog: Fix spelling error.
+ 
+ 2002-02-23  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Makefile.am (EXTRA_DIST): Add AssertionError.java and
+ 	StackTraceElement.java.
+ 	* java/lang/AssertionError.java: New file.
+ 	* java/lang/ClassLoader.java: Add some synchronization and code
+ 	cleanups to use improved VMClassLoader.
+ 	Add assertion status fields and methods.
+ 	* java/lang/StackTraceElement.java: New file.
+ 	* vm/reference/java/lang/Class.java (desiredAssertionStatus): Add.
+ 	Other locations: clean up code.
+ 	* vm/reference/java/lang/Throwable.java (cause, stackTrace): Add
+ 	exception chaining, and Java code for stack traces (native code
+ 	unimplemented).
+ 	* vm/reference/java/lang/VMClassLoader.java: Add (unimplemented)
+ 	hooks to compile assertion status.
+ 	(defineClass, loadClass): Add prototypes for missing native hooks.
+ 	* vm/reference/java/lang/VMSecurityManager.java: Formatting.
+ 	* gnu/java/lang/ClassHelper.java (getAllMethodsAtDeclaration),
+ 	(getAllFieldsAtDeclaration): Delete, as they were just duplicates.
+ 	(getAllMethods, getAllFields): Optimize.
+ 	* gnu/java/lang/ArrayHelper.java: Formatting and Javadoc.
+ 	(equalsArray): Delete, it duplicates java.util.Arrays.equals.
+ 	* gnu/java/beans/BeanInfoEmbryo.java (hasMethod): Use
+ 	Arrays.equals instead of ArrayHelper.equalsArray.
+ 
+ 2002-02-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/rmi/rmic/RMIC.java (parseOptions): Include the "Inc.".
+ 
+ 	* gnu/java/rmi/rmic/RMIC.java (parseOptions): Only print most
+ 	recent copyright date.
+ 
+ 2002-02-22  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* java/beans/Introspector.java: added new static final fields 
+ 	introduced in 1.2, lots of other updates remain to be done
+ 
+ 2002-02-22  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* java/beans/Introspector.java: reformatting
+ 
+ 2002-02-22  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* gnu/java/lang/ClassHelper.java: Improve Javadoc and formatting,
+ 	and rearrange methods.
+ 	* vm/reference/java/lang/Class.java: Ditto.
+ 	* vm/reference/java/lang/Throwable.java: Ditto.
+ 	* vm/reference/java/lang/VMClassLoader.java: Ditto.
+ 	* vm/reference/java/lang/VMObject.java: Ditto.
+ 	* java/lang/Boolean.java: Ditto.
+ 	* java/lang/ClassLoader.java: Ditto.
+ 	* java/lang/Object.java: Ditto.
+ 	* java/lang/Error.java: Update to 1.4 with new constructors.
+ 
+ 2002-02-22  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/PropertyPermission.java (setActions): Optimize the
+ 	action parsing.
+ 	(PropertyPermission): Throw IllegalArgumentException on null.
+ 	(hashCode): Add.
+ 	(newPermissionCollection): Use PropertyPermissionCollection.
+ 	* java/util/PropertyPermissionCollection.java: New class, to match
+ 	up with Sun's serialization.
+ 	* java/util/StringTokenizer.java (len): Add a field, to reduce the
+ 	number of method calls being made.
+ 
+ 2002-02-21  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/PropertyPermission.java: Improve Javadoc.
+ 	* java/util/StringTokenizer.java: Improve Javadoc.
+ 
+ 2002-02-21  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/EventObject.java (EventObject(Object)): Check for
+ 	null, to match JDK behavior.
+ 	* java/util/Observable.java (observers): Change from Vector to
+ 	LinkedHashSet, to avoid cost of extra synchronization.	
+ 	(notifyObservers): Add synchronization around set cloning.
+ 	* java/util/Properties.java (propertyNames): Eliminate tail
+ 	recursion.
+ 	(list): Reuse the same StringBuffer.
+ 
+ 2002-02-21  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/Makefile.am (EXTRA_DIST): Add EventListenerProxy.java.
+ 	* java/util/EventListener.java: Improve Javadoc.
+ 	* java/util/EventListenerProxy.java: New class.
+ 	* java/util/EventObject.java: Improve Javadoc.
+ 	* java/util/Observable.java: Improve Javadoc.
+ 	* java/util/Observer.java: Improve Javadoc.
+ 	* java/util/Properties.java: Improve Javadoc, and reorder methods.
+ 	* java/util/Random.java: Improve Javadoc and formatting.
+ 	* java/util/TooManyListenersException.java: Improve Javadoc.
+ 
+ 2002-02-20  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* java/beans/Introspector.java: default beanInfoSearchPath will 
+ 	not include sun.beans.infos given we provide no such package and
+ 	the API doesn't really require it; gnu.java.beans.info is the
+ 	default.
+ 
+ 2002-02-20  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/BasicMapEntry.java: Delete; top-level classes in
+ 	java.util should be public.
+ 	* java/util/Makefile.am (EXTRA_DIST): Remove BasicMapEntry.java.
+ 	* java/util/AbstractMap.java: Make BasicMapEntry a nested class.
+ 	* java/util/Collections.java (SingletonMap.entrySet): Update to
+ 	new location of BasicMapEntry.	
+ 	* java/util/HashMap.java (HashEntry):  Ditto.
+ 	* java/util/Hashtable.java (HashEntry):  Ditto.
+ 	* java/util/TreeMap.java (Node): Ditto.
+ 
+ 2002-02-19  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* scripts/unicode-blocks.pl: Move from doc/unicode/.
+ 	* scripts/unicode-muncher.pl: Ditto.
+ 	* gnu/java/lang/CharData.java: Regenerate.
+ 	* java/lang/Character.java (UnicodeBlock): Regenerate.
+ 
+ 2002-02-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Based on patches submitted by Wu Gansha <gansha.wu@intel.com>
+ 	* vm/reference/java/lang/reflect/Method.java (toString()): use
+ 	Class.getName() not Class.toString().
+ 	* vm/reference/java/lang/Class.java: final, implements Serializable
+ 	(serialVersionUID): added field.
+ 
+ 2002-02-18  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* doc/unicode/unicode-blocks.pl: Minor tweaks.
+ 	* doc/unicode/unicode-muncher.pl: Minor tweaks.
+ 	* java/lang/Character.java: Update to latest tweaks in
+ 	doc/unicode/*.pl.
+ 	* gnu/java/lang/CharData.java: Ditto.
+ 
+ 2002-02-18  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* native/jni/java-io/java_io_File.c 
+ 	(Java_java_io_File_lastModifiedInternal): properly return 
+ 	modified time in milliseconds
+ 
+ 2002-02-18  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* doc/unicode/unicode-muncher.pl: Based on Artur's comments,
+ 	credit Jochen Hoenicke, not Artur, as original author.
+ 	* gnu/java/lang/CharData.java: Regenerate.	
+ 
+ 2002-02-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in: Reenable ZIP.
+ 	* lib/Makefile.am: Don't copy gnu/java/locale/*.uni, they no longer
+ 	exist.
+ 
+ 2002-02-18  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* doc/unicode/unicode-blocks.pl: Minor updates, to avoid warnings.
+ 	* doc/unicode/unicode-muncher.pl: Rewrite, to incorporate ideas
+ 	from Artur Biesiadowski: use a 2-level lookup of fixed-length
+ 	blocks instead of a 1-level lookup of variable-length blocks, and
+ 	store the data in String literals in a Java interface instead of
+ 	in binary files.
+ 	* doc/unicode/unicode.database.format: Remove, as
+ 	gnu/java/lang/CharData is self-documenting.
+ 	* gnu/java/locale/block.uni: Remove, replaced by
+ 	gnu/java/lang/CharData.java.
+ 	* gnu/java/locale/character.uni: Ditto.
+ 	* gnu/java/locale/titlecase.uni: Ditto.
+ 	* gnu/java/lang/Makefile.am (EXTRA_DIST): Add CharData.java.
+ 	* gnu/java/lang/CharData.java: New file, holding the Unicode
+ 	database for java.lang.Character.
+ 	* java/lang/Character.java (blocks, data, numValue, upper, lower),
+ 	(direction, title): Replace blocks, tcs, and unicodeData as the
+ 	Unicode database used in all other methods; initialized by
+ 	gnu.java.lang.CharData.
+ 	(<clinit>, getBlock, class Block, class CharAttr): Delete;
+ 	character attribute lookup now uses char[] instead of objects.
+ 	(readChar): Update to use new database.
+ 	(Various others): Reduce multiple comparisons to just one when
+ 	checking a character's type.
+ 
+ 2002-02-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Thanks to Orp developers
+ 	* gnu/java/beans/editors/NativeBooleanEditor.java (setAsText(String)):
+ 	switch TRUE and FALSE return values.
+ 
+ 2002-02-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/Thread.java (contextClassLoader): new field.
+ 	(Thread): set contextClassLoader field.
+ 	(stop): deprecated.
+ 	(suspend): likewise.
+ 	(resume): likewise.
+ 	(checkAccess): final.
+ 	(getContextClassLoader): implement.
+ 	(setContextClassLoader): new method.
+ 
+ 2002-02-17  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* doc/unicode/UnicodeCharacterDatabase-3.0.0.html: Add
+ 	redistribution license to accompany previous commit.
+ 
+ 2002-02-17  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Character.java (getUnicodeBlock): Delete.
+ 	(class UnicodeBlock): Add (generated) class, and move constants
+ 	from Subset into it.
+ 	(class Block, class CharAttr): Make nested classes of Character.
+ 	(Subset.equals, Subset.hashcode, Subset.toString): Add methods.
+ 	(getDirectionality, isMirrored, toString(char)): Add methods.
+ 	(DIRECTIONALITY_*, *_QUOTE_PUNCTUATION): Add constants.
+ 	(<clinit>, readChar): Update to new format of Unicode database.
+ 	Overall: optimize code, bring in line with JDK 1.4 specs.
+ 	* doc/unicode/UnicodeData-3.0.0.txt: Rename from
+ 	UnicodeData-3.0.txt, to match the filename from www.unicode.org.
+ 	* doc/unicode/ReadMe-3.0.0.txt: Rename from ReadMe-3.0.txt.
+ 	* doc/unicode/UnicodeData-3.0.0.html: Add the Unicode 3.0
+ 	document, copyright, and file format, from www.unicode.org.
+ 	* doc/unicode/Blocks-3.txt: Add the Unicode 3.0 groups (supercedes
+ 	BLOCKS.TXT of 2.1.2), from www.unicode.org.
+ 	* doc/unicode/unicode.database.format: Document changes in the
+ 	format of the Unicode database used by Character.
+ 	* doc/unicode/unicode-muncher.pl: Update the Unicode database
+ 	format to accomodate directionality and mirrored characters, and
+ 	further compress the size of the database.
+ 	* doc/unicode/unicode-blocks.pl: Add, to efficiently generate
+ 	Character.UnicodeBlock.
+ 	* gnu/java/locale/block.uni: Regenerate from Unicode 3.0.0.
+ 	* gnu/java/locale/character.uni: Regenerate from Unicode 3.0.0.
+ 	* gnu/java/locale/titlecase.uni: Regenerate from Unicode 3.0.0.
+ 	
+ 2002-02-16  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Character.java: Reformat and comment (no code changes).
+ 
+ 2002-02-15  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/Collections.java (list): Update the API to reflect
+ 	change from JDK 1.4 beta documentation.
+ 
+ 2002-02-15  Mark Wielaard <mark@klomp.org>
+ 
+ 	* THANKYOU: Add Isaac Jones and Patrick Doyle
+ 
+ 2002-02-15  Wu Gansha  <gansha.wu@intel.com>
+ 
+ 	* gnu/java/net/protocol/file/FileURLConnection.java (connect): check
+ 	and set connected field.
+ 
+ 2002-02-15  Wu Gansha  <gansha.wu@intel.com>
+ 
+ 	* java/lang/ClassLoader.java
+ 	(defineClass(String,byte[],int,int, ProtectionDomain)): removed an
+ 	infinite recursive call.
+ 
+ 2002-02-15  Wu Gansha  <gansha.wu@intel.com>
+ 
+ 	* java/io/RandomAccessFile.java (read(byte[],int,int): fix a bug in
+ 	calling readInternal, use offset and len.
+ 
+ 2002-02-15  Isaac Jones  <ijones@cis.ohio-state.edu>
+ 
+ 	* java/lang/StringBuffer.java (subSequence): is new in 1.4,
+ 	though it was already implemented in classpath.  I added the
+ 	"@since 1.4" tag to make it compatible with the 1.4. I
+ 	altered the exception thrown to be IndexOutOfBoundsException to
+ 	make the documentation compatible with the 1.4.
+ 	* java/lang/StringBuffer.java (indexOf, lastIndexOf): I copied the
+ 	javadoc in the classpath String class.  The functions call through
+ 	to those functions, so they behave exactly the same.
+ 
+ 2002-02-15  Mark Wielaard <mark@klomp.org>
+ 
+ 	Thanks to Patrick Doyle
+ 	* java/lang/String.java (indexOf(String,int)): account for empty
+ 	string.
+ 	(lastIndexOf(String): account for empty string, and small
+ 	optimization.
+ 	(lastIndexOf(String,int): small optimization.
+ 
+ 2002-02-14  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Makefile.am: Add StrictMath.java.
+ 	* java/lang/StrictMath.java: New file.
+ 	* java/lang/Math.java: Formatting and comments (no functional
+ 	changes).
+ 
+ 2002-02-13  Julian Scheid  <julian@sektor37.de>
+ 
+ 	* com/sun/javadoc/Doclet.java (validOptions): Now static.
+ 
+ 2002-02-11  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: removed -nowarn argument to jikes
+ 
+ 2002-02-10  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/awt/Makefile.am (SUBDIRS): Alphabetize.
+ 
+ 2002-02-10  Mark Wielaard <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/home.wml: Fix 2001->2002 typo
+ 
+ 2002-02-10  Mark Wielaard <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/doc/orp.wml: Revert CLASSPATH setting. No zip file
+ 	in this release.
+ 
+ 2002-02-10  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: pretend we do not have zip to force class copying,
+ 	works around a problem with the Character property loading
+ 
+ 2002-02-09  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* INSTALL: Last-minute typo in previous commit.
+ 	* HACKING: Ditto.
+ 
+ 2002-02-09  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* INSTALL: Update instructions for using jikes 1.15b.
+ 	* HACKING: Ditto.
+ 	* ChangeLog: Clean up some whitespace.
+ 
+ 2002-02-09  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: without zip, try copying class files instead
+ 	during install, and avoid zip during make
+ 	* configure.in: new automake conditional to handle presence or
+ 	absence of zip
+ 
+ 2002-02-09  Mark Wielaard <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/home.wml: Add 0.03 announcement.
+ 	* doc/www.gnu.org/doc/orp.wml: Add glibj.zip to CLASSPATH, make
+ 	Announcement en Documentation links relative.
+ 	* doc/www.gnu.org/include/macros.wml: Make status.html link relative.
+ 
+ 2002-02-09  Mark Wielaard <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/announce/20020208.wml: Make "Who should use this
+ 	software?" less pessimistic.
+ 
+ 2002-02-09  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/net/DatagramSocketImpl.java (setOption, getOption): Work
+ 	around gcj bug of wrong emitted qualifier for inherited method.
+ 	* java/net/SocketImpl.java (setOption, getOption): Ditto.
+ 	* java/util/WeakHashMap.java (WeakEntrySet): Add non-private
+ 	constructor to reduce amount of emitted bytecode. While this
+ 	happens to work around a jikes 1.15 bug, it is still a useful
+ 	patch even for correct compilers.
+ 	* java/rmi/server/RMIClassLoader.java (MyClassLoader): Ditto.
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java
+ 	(DummyObjectOutputStream, DummyObjectInputStream): Ditto.
+ 
+ 2002-02-09  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/net/DatagramSocketImpl.java: Reformat (no code changes).
+ 	* java/net/SocketImpl.java: Ditto.
+ 	* java/rmi/server/RMIClassLoader.java: Ditto.
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java: Ditto.
+ 
+ 2002-02-09  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* INSTALL: removed mention of needing gcjh and edited compilation
+ 	verbage
+ 	* HACKING: warning that autoreconf does not always do what might
+ 	be expected
+ 	* configure.in: version set back to 0.03
+ 
+ 2002-02-09  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: no JNI header generation, do not use mkdep.pl,
+ 	Remake classes when source changes or new classes are added.
+ 	Do not bother including glibj.zip in dist, it has to be remade 
+ 	regardless due to path differences to source files we cannot control
+ 	in users' environment
+ 	* lib/gen-classlist.sh: create java.dep from this script instead of
+ 	mkdep.pl.in
+ 	* native/jni/gtk-peer/Makefile.am: added $(top_srcdir)/include to
+ 	INCLUDES
+ 	* native/jni/java-io/Makefile.am: added $(top_srcdir)/include to
+ 	INCLUDES
+ 	* native/jni/java-lang/Makefile.am: added $(top_srcdir)/include to
+ 	INCLUDES
+ 	* native/jni/java-net/Makefile.am: added $(top_srcdir)/include to
+ 	INCLUDES
+ 	* configure.in: removed mkdep.pl, mkcollections.pl from output.
+ 	Commented out check for Perl.
+ 	* acinclude.m4: do not fail if no javah program found
+ 	* include/.cvsignore: no longer ignore JNI headers
+ 	* include/gnu_java_awt_image_GdkPixbufDecoder.h: new file
+ 	* include/gnu_java_awt_peer_gtk_GdkFontMetrics.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkButtonPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkCheckButtonPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkChoicePeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkClipboard.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkFramePeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkImagePainter.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkLabelPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkListPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkMainThread.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkPanelPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkTextComponentPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkToolkit.h: ditto
+ 	* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: ditto
+ 	* include/gnu_java_lang_ExecutionStack.h: ditto
+ 	* include/java_io_FileDescriptor.h: ditto
+ 	* include/java_io_File.h: ditto
+ 	* include/java_io_FileInputStream.h: ditto
+ 	* include/java_io_FileOutputStream.h: ditto
+ 	* include/java_io_ObjectInputStream.h: ditto
+ 	* include/java_io_ObjectOutputStream.h: ditto
+ 	* include/java_io_RandomAccessFile.h: ditto
+ 	* include/java_lang_Class.h: ditto
+ 	* include/java_lang_Double.h: ditto
+ 	* include/java_lang_Float.h: ditto
+ 	* include/java_lang_Math.h: ditto
+ 	* include/java_lang_Object.h: ditto
+ 	* include/java_lang_reflect_Array.h: ditto
+ 	* include/java_lang_reflect_Constructor.h: ditto
+ 	* include/java_lang_reflect_Field.h: ditto
+ 	* include/java_lang_reflect_Method.h: ditto
+ 	* include/java_lang_reflect_Proxy.h: ditto
+ 	* include/java_lang_Runtime.h: ditto
+ 	* include/java_lang_System.h: ditto
+ 	* include/java_lang_Thread.h: ditto
+ 	* include/java_lang_Throwable.h: ditto
+ 	* include/java_lang_VMClassLoader.h: ditto
+ 	* include/java_net_InetAddress.h: ditto
+ 	* include/java_net_PlainDatagramSocketImpl.h: ditto
+ 	* include/java_net_PlainSocketImpl.h: ditto
+ 	* include/java_util_TimeZone.h: ditto
+ 
+ 2002-02-09  Mark Wielaard <mark@klomp.org>
+ 
+ 	Thanks to Takashi Okamoto
+ 	* java/util/Arrays.java (ArrayList.indexOf()): this.equals().
+ 	* java/util/Arrays.java (ArrayList.lastIndexOf()): Likewise.
+ 	* java/util/WeakHashMap.java (WeakEntry.getEntry()): this.get().
+ 
+ 2002-02-07  Mark Wielaard <mark@klomp.org>
+ 
+ 	* gnu/java/io/encode/Encoder8859_1.java (static): explicitly mention
+ 	superclass when calling static method as workaround for jikes 1.15a
+ 	combined with orp 1.0.9.
+ 	* gnu/java/io/encode/Encoder8859_2.java (static): Likewise
+ 	* gnu/java/io/encode/Encoder8859_3.java (static): Likewise
+ 
+ 2002-02-07  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/security/BasicPermission.java: extends with fully qualified
+ 	classname as workaround for gcj 3.0.4.
+ 
+ 	* doc/www.gnu.org/announce/20020208.wml: grammar fix.
+ 
+ 2002-02-07  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: fixed broken make dist by moving some of the checks
+ 	out of an if statement wrapping functionality needed only for 
+ 	compiling JNI libraries, so unfortunately yes you probably must 
+ 	have a C compiler even if just compiling the Java source
+ 	* Makefile.am: dist-hook to use $(distdir) instead of $(top_distdir)
+ 	* native/gnu.java.awt.image: removed directory, needed file was
+ 	already part of native/jni/gtk-peer/ directory and library.
+ 	* resource/java/util/Makefile.am: updated properties files to
+ 	include in distribution
+ 	* resource/Makefile.am: include gnu in SUBDIRS
+ 	* resource/gnu/Makefile.am: new file
+ 	* resource/gnu/.cvsignore: ditto
+ 	* resource/gnu/java/Makefile.am: ditto
+ 	* resource/gnu/java/.cvsignore: ditto
+ 	* resource/gnu/java/awt/Makefile.am: ditto
+ 	* resource/gnu/java/awt/.cvsignore: ditto
+ 	* resource/gnu/java/awt/peer/Makefile.am: ditto
+ 	* resource/gnu/java/awt/peer/.cvsignore: ditto
+ 	* resource/gnu/java/awt/peer/gtk/Makefile.am: ditto
+ 	* resource/gnu/java/awt/peer/gtk/.cvsignore: ditto
+ 	* configure.in: added above Makefiles to output
+ 	
+ 2002-02-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/announce/20020208.wml: new file, 0.03 announcement.
+ 	* doc/www.gnu.org/announce/announcements.wml: add new announcement.
+ 
+ 2002-02-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* HACKING: add "last updated" and some new information.
+ 	* INSTALL: add information on different byte code compilers.
+ 	* README: add "last updated"
+ 
+ 2002-02-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (AC_OUTPUT): add gnu/java/math/Makefile and
+ 	java/awt/font/Makefile.
+ 	* java/awt/Makefile.am (EXTRA_DIST): add GridBagConstraints.java and
+ 	sort entries.
+ 	(SUBDIRS): add font.
+ 	* java/awt/datatransfer/Makefile.am (EXTRA_DIST): add
+ 	MimeTypeParseException.java and SystemFlavorMap.java.
+ 	* java/awt/event/Makefile.am (EXTRA_DIST): Sort entries.
+ 	* java/awt/font/Makefile.am: new file.
+ 	* java/lang/Makefile.am (EXTRA_DIST): add CharSequence.java and sort
+ 	entries.
+ 	* java/net/Makefile.am (EXTRA_DIST): add URLClassLoader.java and sort
+ 	entries.
+ 	* java/security/Makefile.am 9EXTRA_DIST): add AccessController.java
+ 	and sort entries.
+ 	* java/text/Makefile.am (EXTRA_DIST): add DecimalFormat.java, remove
+ 	DefaultBreakIterator.java and sort entries.
+ 	* java/util/Makefile.am (EXTRA_DIST): remove Bucket.java,
+ 	DoubleEnumeration.java and sort entries.
+ 	* com/sun/javadoc/Makefile.am (EXTRA_DIST): sort entries.
+ 	* gnu/java/Makefile.am (SUBDIRS): add math.
+ 	* gnu/java/awt/image/Makefile.am (EXTRA_DIST): sort entries.
+ 	* gnu/java/awt/peer/gtk/Makefile.am (EXTRA_DIST): sort entries.
+ 	* gnu/java/io/decode/Makefile.am (EXTRA_DIST): sort entries.
+ 	* gnu/java/io/encode/Makefile.am (EXTRA_DIST): sort entries.
+ 	* gnu/java/math/Makefile.am: new file.
+ 	* gnu/java/security/provider/Makefile.am (EXTRA_DIST): add
+ 	DefaultPolicy.java.
+ 
+ 2002-02-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* README: Update URLs, add more info.
+ 	* resource/orp-1.0.9.patch: New file.
+ 	* doc/www.gnu.org/doc/orp.wml: Update for ORP 1.0.9 release.
+ 
+ 2002-02-07  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* native/jni/java-lang/Makefile.am: removed empty SUBDIRS
+ 	* gnu/classpath/Makefile.am: ditto
+ 	* native/fdlibm/Makefile.am: ditto
+ 	* native/jni/java-io/Makefile.am: ditto
+ 	* native/jni/java-net/Makefile.am: ditto
+ 	* native/jni/java-util/Makefile.am: ditto
+ 	* java/io/Makefile.am: removed BlockDataException.java
+ 	* native/Makefile.am: removed empty SUBDIRS, added option to build
+ 	cni and jni libraries at the same time (if we actually built cni
+ 	libraries)
+ 	* configure.in: added native/cni/Makefile to output
+ 
+ 2002-02-06  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* native/jni/java-lang/Makefile.am: Clean up automake problems
+ 	in cygwin caused by trailing '\'.
+ 
+ 2002-02-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/jni.h.in: Add GPL license exception clarification
+ 
+ 2002-02-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: updates for next release
+ 
+ 2002-02-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/Class.java (pd): rename field to pd from
+ 	protectionDomain as a workaround for compiling with gcj 3.1 (CVS)
+ 
+ 2002-02-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/math/BigInteger.java: import gnu.java.math.MPN not the whole
+ 	package as a workaround for gcj 3.0.x
+ 
+ 2002-01-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/List.java (addNotify): Correctly check to see if peer
+ 	does not exist.
+ 
+ 2002-01-29  Nic Ferrier  <nferrier@tapsellferrier.co.uk>
+ 
+ 	* java/net/PlainSocketImpl.java: Re-indent.
+ 
+ 2002-01-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/GridLayout.java (layoutContainer): Use number of rows
+ 	to compute height of each cell, and number of columns to compute
+ 	width of each cell.
+ 	* java/awt/Window.java (getOwnedWindows): Don't return null.
+ 	* java/awt/FlowLayout.java (layoutContainer): Set width and height
+ 	of component.  Increment x using horizontal gap, not vertical
+ 	gap.
+ 
+ 2002-01-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/FlowLayout.java (layoutContainer): Correctly compute
+ 	loop termination condition.
+ 	* java/awt/GridLayout.java (getSize): Use `real_cols' to compute
+ 	width.
+ 
+ 2002-01-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Scrollbar.java (Scrollbar(int)): Removed `FIXME'
+ 	comment.
+ 	(Scrollbar(int,int,int,int,int)): Default lineIncrement to 1.
+ 	(addNotify): Use libgcj implementation.
+ 	(paramString): Don't include class name or parens; do include
+ 	superclass paramString() result, page and line increment, and
+ 	orientation.
+ 
+ 	* java/awt/Container.java (addNotify): Unconditionally call
+ 	addNotifyContainerChildren and superclass addNotify.
+ 
+ 	* java/awt/image/ColorModel.java (getAlpha(Object)): Call
+ 	getAlpha, not getBlue.
+ 
+ 2002-01-25  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/awt/image/PixelGrabber.java (grabPixels()): Call grabPixels(0).
+ 	(grabPixels(long)): Wait to be notified that the ImageProducer has 
+ 	completed.
+ 
+ 2002-01-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java (addLayoutComponent): Added missing
+ 	`else'.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createImage(String)): New
+ 	method.
+ 	(createImage(URL)): Likewise.
+ 	* java/awt/Toolkit.java (createImage(String)): New method.
+ 	(createImage(URL)): Likewise.
+ 	(getMenuShortcutKeyMask): Return Event.CTRL_MASK.
+ 	(getLockingKeyState): New method.
+ 	(setLockingKeyState): Likewise.
+ 	(createCustomCursor): Likewise.
+ 	(getBestCursorSize): Likewise.
+ 	(getMaximumCursorColors): Likewise.
+ 	(getDesktopProperty): Likewise.
+ 	(setDesktopProperty): Likewise.
+ 	(changeSupport): New field.
+ 	(desktopProperties): Likewise.
+ 	(lazilyLoadDesktopProperty): New method.
+ 	(initializeDesktopProperties): Likewise.
+ 	(addPropertyChangeListener): Likewise.
+ 	(removePropertyChangeListener): Likewise.
+ 	(addAWTEventListener): Likewise.
+ 	(removeAWTEventListener): Likewise.
+ 
+ 	* java/awt/PaintContext.java: Updated license.
+ 
+ 	* java/awt/GridBagConstraints.java (clone): Catch
+ 	CloneNotSupportedException.
+ 
+ 2002-01-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Minor changes from libgcj:
+ 	* java/util/AbstractMap.java: Re-merged.
+ 	* java/util/AbstractSequentialList.java: Re-merged.
+ 	* java/util/AbstractSet.java: Re-merged.
+ 	* java/util/ArrayList.java: Re-merged.
+ 	* java/util/Arrays.java: Re-merged.
+ 	* java/util/LinkedHashSet.java: Re-merged.
+ 	* java/util/TreeMap.java: Re-merged.
+ 	* java/util/TreeSet.java: Re-merged.
+ 	* java/util/Vector.java: Re-merged.
+ 
+ 	* java/awt/GridBagConstraints.java: Updated copyright.
+ 
+ 2002-01-22  Mark Wielaard <mark@klomp.org>
+ 
+ 	* ChangeLog compat/java.net/PlainSocketImpl.java 
+ 	doc/www.gnu.org/home.wml gnu/classpath/Configuration.java.in 
+ 	gnu/java/awt/BitMaskExtent.java gnu/java/awt/Buffers.java 
+ 	gnu/java/awt/ComponentDataBlitOp.java 
+ 	gnu/java/awt/GLightweightPeer.java 
+ 	gnu/java/awt/image/GdkPixbufDecoder.java 
+ 	gnu/java/awt/image/GtkOffScreenDecoder.java 
+ 	gnu/java/awt/image/ImageDecoder.java 
+ 	gnu/java/awt/image/XBMDecoder.java 
+ 	gnu/java/awt/peer/gtk/GdkFontMetrics.java 
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java 
+ 	gnu/java/awt/peer/gtk/GtkArg.java 
+ 	gnu/java/awt/peer/gtk/GtkArgList.java 
+ 	gnu/java/awt/peer/gtk/GtkButtonPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkCanvasPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkCheckButtonPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkCheckboxPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkChoicePeer.java 
+ 	gnu/java/awt/peer/gtk/GtkClipboard.java 
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkContainerPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkDialogPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkFontPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java 
+ 	gnu/java/awt/peer/gtk/GtkGenericPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkImage.java 
+ 	gnu/java/awt/peer/gtk/GtkImagePainter.java 
+ 	gnu/java/awt/peer/gtk/GtkLabelPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkListPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkMainThread.java 
+ 	gnu/java/awt/peer/gtk/GtkMenuBarPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkMenuPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkOffScreenImage.java 
+ 	gnu/java/awt/peer/gtk/GtkPanelPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkRadioButtonPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkScrollPanePeer.java 
+ 	gnu/java/awt/peer/gtk/GtkScrollbarPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkTextComponentPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkToggleButtonPeer.java 
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java 
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java 
+ 	gnu/java/awt/peer/gtk/Test.java 
+ 	gnu/java/awt/peer/gtk/TestAWT.java 
+ 	gnu/java/beans/BeanInfoEmbryo.java 
+ 	gnu/java/beans/EmptyBeanInfo.java 
+ 	gnu/java/beans/ExplicitBeanInfo.java 
+ 	gnu/java/beans/IntrospectionIncubator.java 
+ 	gnu/java/beans/editors/ColorEditor.java 
+ 	gnu/java/beans/editors/FontEditor.java 
+ 	gnu/java/beans/editors/NativeBooleanEditor.java 
+ 	gnu/java/beans/editors/NativeByteEditor.java 
+ 	gnu/java/beans/editors/NativeDoubleEditor.java 
+ 	gnu/java/beans/editors/NativeFloatEditor.java 
+ 	gnu/java/beans/editors/NativeIntEditor.java 
+ 	gnu/java/beans/editors/NativeLongEditor.java 
+ 	gnu/java/beans/editors/NativeShortEditor.java 
+ 	gnu/java/beans/editors/StringEditor.java 
+ 	gnu/java/beans/info/ComponentBeanInfo.java 
+ 	gnu/java/io/ClassLoaderObjectInputStream.java 
+ 	gnu/java/io/EncodingManager.java 
+ 	gnu/java/io/NullOutputStream.java 
+ 	gnu/java/io/ObjectIdentityWrapper.java 
+ 	gnu/java/io/decode/Decoder.java 
+ 	gnu/java/io/decode/Decoder8859_1.java 
+ 	gnu/java/io/decode/Decoder8859_2.java 
+ 	gnu/java/io/decode/Decoder8859_3.java 
+ 	gnu/java/io/decode/Decoder8859_4.java 
+ 	gnu/java/io/decode/Decoder8859_5.java 
+ 	gnu/java/io/decode/DecoderEightBitLookup.java 
+ 	gnu/java/io/decode/DecoderUTF8.java 
+ 	gnu/java/io/encode/Encoder.java 
+ 	gnu/java/io/encode/Encoder8859_1.java 
+ 	gnu/java/io/encode/Encoder8859_2.java 
+ 	gnu/java/io/encode/Encoder8859_3.java 
+ 	gnu/java/io/encode/Encoder8859_4.java 
+ 	gnu/java/io/encode/Encoder8859_5.java 
+ 	gnu/java/io/encode/EncoderEightBitLookup.java 
+ 	gnu/java/io/encode/EncoderUTF8.java 
+ 	gnu/java/lang/ArrayHelper.java gnu/java/lang/ClassHelper.java 
+ 	gnu/java/lang/ClassLoaderHelper.java 
+ 	gnu/java/lang/ExecutionStack.java 
+ 	gnu/java/lang/MainThread.java gnu/java/lang/StackFrame.java 
+ 	gnu/java/lang/reflect/TypeSignature.java 
+ 	gnu/java/locale/Calendar.java gnu/java/locale/Calendar_de.java 
+ 	gnu/java/locale/Calendar_en.java 
+ 	gnu/java/locale/Calendar_nl.java 
+ 	gnu/java/locale/LocaleInformation.java 
+ 	gnu/java/locale/LocaleInformation_de.java 
+ 	gnu/java/locale/LocaleInformation_en.java 
+ 	gnu/java/locale/LocaleInformation_nl.java 
+ 	gnu/java/math/MPN.java gnu/java/net/HeaderFieldHelper.java 
+ 	gnu/java/net/content/text/plain.java 
+ 	gnu/java/net/protocol/file/FileURLConnection.java 
+ 	gnu/java/net/protocol/file/Handler.java 
+ 	gnu/java/net/protocol/http/Handler.java 
+ 	gnu/java/net/protocol/http/HttpURLConnection.java 
+ 	gnu/java/rmi/dgc/DGCImpl.java 
+ 	gnu/java/rmi/registry/RegistryImpl.java 
+ 	gnu/java/rmi/rmic/Compile_gcj.java 
+ 	gnu/java/rmi/rmic/Compiler.java 
+ 	gnu/java/rmi/rmic/CompilerProcess.java 
+ 	gnu/java/rmi/rmic/RMIC.java 
+ 	gnu/java/rmi/rmic/TabbedWriter.java 
+ 	gnu/java/rmi/server/ProtocolConstants.java 
+ 	gnu/java/rmi/server/RMIDefaultSocketFactory.java 
+ 	gnu/java/rmi/server/RMIHashes.java 
+ 	gnu/java/rmi/server/RMIObjectInputStream.java 
+ 	gnu/java/rmi/server/RMIObjectOutputStream.java 
+ 	gnu/java/rmi/server/UnicastConnection.java 
+ 	gnu/java/rmi/server/UnicastConnectionManager.java 
+ 	gnu/java/rmi/server/UnicastRef.java 
+ 	gnu/java/rmi/server/UnicastRemoteCall.java 
+ 	gnu/java/rmi/server/UnicastRemoteStub.java 
+ 	gnu/java/rmi/server/UnicastServer.java 
+ 	gnu/java/rmi/server/UnicastServerRef.java 
+ 	gnu/java/security/DefaultPermissionCollection.java 
+ 	gnu/java/security/der/DEREncodingException.java 
+ 	gnu/java/security/provider/DERReader.java 
+ 	gnu/java/security/provider/DERWriter.java 
+ 	gnu/java/security/provider/DSAKeyPairGenerator.java 
+ 	gnu/java/security/provider/DSAParameterGenerator.java 
+ 	gnu/java/security/provider/DSAParameters.java 
+ 	gnu/java/security/provider/DSASignature.java 
+ 	gnu/java/security/provider/DefaultPolicy.java 
+ 	gnu/java/security/provider/Gnu.java 
+ 	gnu/java/security/provider/GnuDSAPrivateKey.java 
+ 	gnu/java/security/provider/GnuDSAPublicKey.java 
+ 	gnu/java/security/provider/MD5.java 
+ 	gnu/java/security/provider/SHA.java 
+ 	gnu/java/security/provider/SHA1PRNG.java 
+ 	gnu/java/security/util/Prime.java 
+ 	gnu/java/text/BaseBreakIterator.java 
+ 	gnu/java/text/CharacterBreakIterator.java 
+ 	gnu/java/text/LineBreakIterator.java 
+ 	gnu/java/text/SentenceBreakIterator.java 
+ 	gnu/java/text/WordBreakIterator.java 
+ 	gnu/java/util/DoubleEnumeration.java 
+ 	gnu/java/util/EmptyEnumeration.java 
+ 	gnu/java/util/prefs/FileBasedFactory.java 
+ 	gnu/java/util/prefs/MemoryBasedFactory.java 
+ 	gnu/java/util/prefs/MemoryBasedPreferences.java 
+ 	gnu/java/util/prefs/NodeReader.java 
+ 	gnu/java/util/prefs/NodeWriter.java 
+ 	gnu/javax/swing/plaf/gtk/GtkBorders.java 
+ 	gnu/javax/swing/plaf/gtk/GtkCheckBoxUI.java 
+ 	gnu/javax/swing/plaf/gtk/GtkIconFactory.java 
+ 	gnu/javax/swing/plaf/gtk/GtkLookAndFeel.java 
+ 	gnu/javax/swing/plaf/gtk/GtkRadioButtonUI.java 
+ 	gnu/javax/swing/plaf/gtk/GtkSliderUI.java gnu/test/Fail.java 
+ 	gnu/test/Pass.java gnu/test/Result.java gnu/test/Test.java 
+ 	gnu/test/Unresolved.java gnu/test/Unsupported.java 
+ 	gnu/test/Untested.java gnu/test/XFail.java gnu/test/XPass.java 
+ 	java/applet/Applet.java java/applet/AppletContext.java 
+ 	java/applet/AppletStub.java java/applet/AudioClip.java 
+ 	java/awt/AWTError.java java/awt/AWTEvent.java 
+ 	java/awt/AWTEventMulticaster.java java/awt/AWTException.java 
+ 	java/awt/AWTPermission.java java/awt/ActiveEvent.java 
+ 	java/awt/Adjustable.java java/awt/BorderLayout.java 
+ 	java/awt/Button.java java/awt/Canvas.java 
+ 	java/awt/CardLayout.java java/awt/Checkbox.java 
+ 	java/awt/CheckboxGroup.java java/awt/CheckboxMenuItem.java 
+ 	java/awt/Choice.java java/awt/Color.java 
+ 	java/awt/Component.java java/awt/ComponentOrientation.java 
+ 	java/awt/Container.java java/awt/Cursor.java 
+ 	java/awt/Dialog.java java/awt/Dimension.java 
+ 	java/awt/Event.java java/awt/EventDispatchThread.java 
+ 	java/awt/EventQueue.java java/awt/FileDialog.java 
+ 	java/awt/FlowLayout.java java/awt/Font.java 
+ 	java/awt/FontMetrics.java java/awt/Frame.java 
+ 	java/awt/Graphics.java java/awt/Graphics2D.java 
+ 	java/awt/GraphicsConfiguration.java java/awt/GridLayout.java 
+ 	java/awt/IllegalComponentStateException.java 
+ 	java/awt/Image.java java/awt/ImageMediaEntry.java 
+ 	java/awt/Insets.java java/awt/ItemSelectable.java 
+ 	java/awt/Label.java java/awt/LayoutManager.java 
+ 	java/awt/LayoutManager2.java java/awt/List.java 
+ 	java/awt/MediaEntry.java java/awt/MediaTracker.java 
+ 	java/awt/Menu.java java/awt/MenuBar.java 
+ 	java/awt/MenuComponent.java java/awt/MenuContainer.java 
+ 	java/awt/MenuItem.java java/awt/MenuShortcut.java 
+ 	java/awt/Paint.java java/awt/Panel.java java/awt/Point.java 
+ 	java/awt/Polygon.java java/awt/PopupMenu.java 
+ 	java/awt/PrintGraphics.java java/awt/PrintJob.java 
+ 	java/awt/Rectangle.java java/awt/RenderingHints.java 
+ 	java/awt/ScrollPane.java java/awt/ScrollPaneAdjustable.java 
+ 	java/awt/Scrollbar.java java/awt/Shape.java 
+ 	java/awt/SystemColor.java java/awt/TextArea.java 
+ 	java/awt/TextComponent.java java/awt/TextField.java 
+ 	java/awt/Toolkit.java java/awt/Transparency.java 
+ 	java/awt/Window.java java/awt/color/ColorSpace.java 
+ 	java/awt/color/ICC_ColorSpace.java 
+ 	java/awt/color/ICC_Profile.java 
+ 	java/awt/datatransfer/Clipboard.java 
+ 	java/awt/datatransfer/ClipboardOwner.java 
+ 	java/awt/datatransfer/DataFlavor.java 
+ 	java/awt/datatransfer/FlavorMap.java 
+ 	java/awt/datatransfer/MimeTypeParseException.java 
+ 	java/awt/datatransfer/StringSelection.java 
+ 	java/awt/datatransfer/SystemFlavorMap.java 
+ 	java/awt/datatransfer/Transferable.java 
+ 	java/awt/datatransfer/UnsupportedFlavorException.java 
+ 	java/awt/event/AWTEventListener.java 
+ 	java/awt/event/ActionEvent.java 
+ 	java/awt/event/ActionListener.java 
+ 	java/awt/event/AdjustmentEvent.java 
+ 	java/awt/event/AdjustmentListener.java 
+ 	java/awt/event/ComponentAdapter.java 
+ 	java/awt/event/ComponentEvent.java 
+ 	java/awt/event/ComponentListener.java 
+ 	java/awt/event/ContainerAdapter.java 
+ 	java/awt/event/ContainerEvent.java 
+ 	java/awt/event/ContainerListener.java 
+ 	java/awt/event/FocusAdapter.java 
+ 	java/awt/event/FocusEvent.java 
+ 	java/awt/event/FocusListener.java 
+ 	java/awt/event/HierarchyBoundsAdapter.java 
+ 	java/awt/event/HierarchyBoundsListener.java 
+ 	java/awt/event/HierarchyEvent.java 
+ 	java/awt/event/HierarchyListener.java 
+ 	java/awt/event/InputEvent.java 
+ 	java/awt/event/InputMethodEvent.java 
+ 	java/awt/event/InputMethodListener.java 
+ 	java/awt/event/InvocationEvent.java 
+ 	java/awt/event/ItemEvent.java java/awt/event/ItemListener.java 
+ 	java/awt/event/KeyAdapter.java java/awt/event/KeyEvent.java 
+ 	java/awt/event/KeyListener.java 
+ 	java/awt/event/MouseAdapter.java 
+ 	java/awt/event/MouseEvent.java 
+ 	java/awt/event/MouseListener.java 
+ 	java/awt/event/MouseMotionAdapter.java 
+ 	java/awt/event/MouseMotionListener.java 
+ 	java/awt/event/PaintEvent.java java/awt/event/TextEvent.java 
+ 	java/awt/event/TextListener.java 
+ 	java/awt/event/WindowAdapter.java 
+ 	java/awt/event/WindowEvent.java 
+ 	java/awt/event/WindowListener.java 
+ 	java/awt/geom/AffineTransform.java 
+ 	java/awt/geom/Dimension2D.java java/awt/geom/Ellipse2D.java 
+ 	java/awt/geom/IllegalPathStateException.java 
+ 	java/awt/geom/Line2D.java 
+ 	java/awt/geom/NoninvertibleTransformException.java 
+ 	java/awt/geom/PathIterator.java java/awt/geom/Point2D.java 
+ 	java/awt/geom/Rectangle2D.java 
+ 	java/awt/geom/RectangularShape.java 
+ 	java/awt/geom/RoundRectangle2D.java 
+ 	java/awt/image/AreaAveragingScaleFilter.java 
+ 	java/awt/image/BufferedImage.java 
+ 	java/awt/image/ColorModel.java 
+ 	java/awt/image/ComponentColorModel.java 
+ 	java/awt/image/ComponentSampleModel.java 
+ 	java/awt/image/CropImageFilter.java 
+ 	java/awt/image/DataBuffer.java 
+ 	java/awt/image/DataBufferByte.java 
+ 	java/awt/image/DataBufferInt.java 
+ 	java/awt/image/DataBufferUShort.java 
+ 	java/awt/image/DirectColorModel.java 
+ 	java/awt/image/FilteredImageSource.java 
+ 	java/awt/image/ImageConsumer.java 
+ 	java/awt/image/ImageFilter.java 
+ 	java/awt/image/ImageObserver.java 
+ 	java/awt/image/ImageProducer.java 
+ 	java/awt/image/IndexColorModel.java 
+ 	java/awt/image/MemoryImageSource.java 
+ 	java/awt/image/PackedColorModel.java 
+ 	java/awt/image/PixelGrabber.java 
+ 	java/awt/image/RGBImageFilter.java java/awt/image/Raster.java 
+ 	java/awt/image/RasterOp.java 
+ 	java/awt/image/ReplicateScaleFilter.java 
+ 	java/awt/image/SampleModel.java 
+ 	java/awt/image/SinglePixelPackedSampleModel.java 
+ 	java/awt/image/WritableRaster.java 
+ 	java/awt/peer/ButtonPeer.java java/awt/peer/CanvasPeer.java 
+ 	java/awt/peer/CheckboxMenuItemPeer.java 
+ 	java/awt/peer/CheckboxPeer.java java/awt/peer/ChoicePeer.java 
+ 	java/awt/peer/ComponentPeer.java 
+ 	java/awt/peer/ContainerPeer.java java/awt/peer/DialogPeer.java 
+ 	java/awt/peer/FileDialogPeer.java java/awt/peer/FontPeer.java 
+ 	java/awt/peer/FramePeer.java java/awt/peer/LabelPeer.java 
+ 	java/awt/peer/LightweightPeer.java java/awt/peer/ListPeer.java 
+ 	java/awt/peer/MenuBarPeer.java 
+ 	java/awt/peer/MenuComponentPeer.java 
+ 	java/awt/peer/MenuItemPeer.java java/awt/peer/MenuPeer.java 
+ 	java/awt/peer/PanelPeer.java java/awt/peer/PopupMenuPeer.java 
+ 	java/awt/peer/ScrollPanePeer.java 
+ 	java/awt/peer/ScrollbarPeer.java 
+ 	java/awt/peer/TextAreaPeer.java 
+ 	java/awt/peer/TextComponentPeer.java 
+ 	java/awt/peer/TextFieldPeer.java java/awt/peer/WindowPeer.java 
+ 	java/awt/print/Book.java java/awt/print/PageFormat.java 
+ 	java/awt/print/Pageable.java java/awt/print/Paper.java 
+ 	java/awt/print/Printable.java 
+ 	java/awt/print/PrinterAbortException.java 
+ 	java/awt/print/PrinterException.java 
+ 	java/awt/print/PrinterGraphics.java 
+ 	java/awt/print/PrinterIOException.java 
+ 	java/awt/print/PrinterJob.java 
+ 	java/beans/AppletInitializer.java 
+ 	java/beans/BeanDescriptor.java java/beans/BeanInfo.java 
+ 	java/beans/Beans.java java/beans/Customizer.java 
+ 	java/beans/DesignMode.java java/beans/EventSetDescriptor.java 
+ 	java/beans/FeatureDescriptor.java 
+ 	java/beans/IndexedPropertyDescriptor.java 
+ 	java/beans/IntrospectionException.java 
+ 	java/beans/Introspector.java java/beans/MethodDescriptor.java 
+ 	java/beans/ParameterDescriptor.java 
+ 	java/beans/PropertyChangeEvent.java 
+ 	java/beans/PropertyChangeListener.java 
+ 	java/beans/PropertyChangeSupport.java 
+ 	java/beans/PropertyDescriptor.java 
+ 	java/beans/PropertyEditor.java 
+ 	java/beans/PropertyEditorManager.java 
+ 	java/beans/PropertyEditorSupport.java 
+ 	java/beans/PropertyVetoException.java 
+ 	java/beans/SimpleBeanInfo.java 
+ 	java/beans/VetoableChangeListener.java 
+ 	java/beans/VetoableChangeSupport.java 
+ 	java/beans/Visibility.java 
+ 	java/beans/beancontext/BeanContext.java 
+ 	java/beans/beancontext/BeanContextChild.java 
+ 	java/beans/beancontext/BeanContextChildComponentProxy.java 
+ 	java/beans/beancontext/BeanContextChildSupport.java 
+ 	java/beans/beancontext/BeanContextContainerProxy.java 
+ 	java/beans/beancontext/BeanContextEvent.java 
+ 	java/beans/beancontext/BeanContextMembershipEvent.java 
+ 	java/beans/beancontext/BeanContextMembershipListener.java 
+ 	java/beans/beancontext/BeanContextProxy.java 
+ 	java/beans/beancontext/BeanContextServiceAvailableEvent.java 
+ 	java/beans/beancontext/BeanContextServiceProvider.java 
+ 	java/beans/beancontext/BeanContextServiceProviderBeanInfo.java 
+ 	java/beans/beancontext/BeanContextServiceRevokedEvent.java 
+ 	java/beans/beancontext/BeanContextServiceRevokedListener.java 
+ 	java/beans/beancontext/BeanContextServices.java 
+ 	java/beans/beancontext/BeanContextServicesListener.java 
+ 	java/io/BufferedInputStream.java 
+ 	java/io/BufferedOutputStream.java java/io/BufferedReader.java 
+ 	java/io/BufferedWriter.java java/io/ByteArrayInputStream.java 
+ 	java/io/ByteArrayOutputStream.java 
+ 	java/io/CharArrayReader.java java/io/CharArrayWriter.java 
+ 	java/io/CharConversionException.java java/io/DataInput.java 
+ 	java/io/DataInputStream.java java/io/DataOutput.java 
+ 	java/io/DataOutputStream.java java/io/EOFException.java 
+ 	java/io/Externalizable.java java/io/File.java 
+ 	java/io/FileDescriptor.java java/io/FileFilter.java 
+ 	java/io/FileInputStream.java 
+ 	java/io/FileNotFoundException.java 
+ 	java/io/FileOutputStream.java java/io/FilePermission.java 
+ 	java/io/FileReader.java java/io/FileWriter.java 
+ 	java/io/FilenameFilter.java java/io/FilterInputStream.java 
+ 	java/io/FilterOutputStream.java java/io/FilterReader.java 
+ 	java/io/FilterWriter.java java/io/IOException.java 
+ 	java/io/InputStream.java java/io/InputStreamReader.java 
+ 	java/io/InterruptedIOException.java 
+ 	java/io/InvalidClassException.java 
+ 	java/io/InvalidObjectException.java 
+ 	java/io/LineNumberInputStream.java 
+ 	java/io/LineNumberReader.java java/io/NotActiveException.java 
+ 	java/io/NotSerializableException.java java/io/ObjectInput.java 
+ 	java/io/ObjectInputStream.java 
+ 	java/io/ObjectInputValidation.java java/io/ObjectOutput.java 
+ 	java/io/ObjectOutputStream.java java/io/ObjectStreamClass.java 
+ 	java/io/ObjectStreamConstants.java 
+ 	java/io/ObjectStreamException.java 
+ 	java/io/ObjectStreamField.java 
+ 	java/io/OptionalDataException.java java/io/OutputStream.java 
+ 	java/io/OutputStreamWriter.java java/io/PipedInputStream.java 
+ 	java/io/PipedOutputStream.java java/io/PipedReader.java 
+ 	java/io/PipedWriter.java java/io/PrintStream.java 
+ 	java/io/PrintWriter.java java/io/PushbackInputStream.java 
+ 	java/io/PushbackReader.java java/io/RandomAccessFile.java 
+ 	java/io/Reader.java java/io/SequenceInputStream.java 
+ 	java/io/Serializable.java java/io/SerializablePermission.java 
+ 	java/io/StreamCorruptedException.java 
+ 	java/io/StreamTokenizer.java 
+ 	java/io/StringBufferInputStream.java java/io/StringReader.java 
+ 	java/io/StringWriter.java java/io/SyncFailedException.java 
+ 	java/io/UTFDataFormatException.java 
+ 	java/io/UnsupportedEncodingException.java 
+ 	java/io/WriteAbortedException.java java/io/Writer.java 
+ 	java/lang/AbstractMethodError.java 
+ 	java/lang/ArithmeticException.java 
+ 	java/lang/ArrayIndexOutOfBoundsException.java 
+ 	java/lang/ArrayStoreException.java java/lang/Boolean.java 
+ 	java/lang/Byte.java java/lang/CharSequence.java 
+ 	java/lang/Character.java java/lang/ClassCastException.java 
+ 	java/lang/ClassCircularityError.java 
+ 	java/lang/ClassFormatError.java java/lang/ClassLoader.java 
+ 	java/lang/ClassNotFoundException.java 
+ 	java/lang/CloneNotSupportedException.java 
+ 	java/lang/Cloneable.java java/lang/Comparable.java 
+ 	java/lang/Compiler.java java/lang/Double.java 
+ 	java/lang/Error.java java/lang/Exception.java 
+ 	java/lang/ExceptionInInitializerError.java 
+ 	java/lang/Float.java java/lang/IllegalAccessError.java 
+ 	java/lang/IllegalAccessException.java 
+ 	java/lang/IllegalArgumentException.java 
+ 	java/lang/IllegalMonitorStateException.java 
+ 	java/lang/IllegalStateException.java 
+ 	java/lang/IllegalThreadStateException.java 
+ 	java/lang/IncompatibleClassChangeError.java 
+ 	java/lang/IndexOutOfBoundsException.java 
+ 	java/lang/InheritableThreadLocal.java 
+ 	java/lang/InstantiationError.java 
+ 	java/lang/InstantiationException.java java/lang/Integer.java 
+ 	java/lang/InternalError.java 
+ 	java/lang/InterruptedException.java 
+ 	java/lang/LinkageError.java java/lang/Long.java 
+ 	java/lang/Math.java java/lang/NegativeArraySizeException.java 
+ 	java/lang/NoClassDefFoundError.java 
+ 	java/lang/NoSuchFieldError.java 
+ 	java/lang/NoSuchFieldException.java 
+ 	java/lang/NoSuchMethodError.java 
+ 	java/lang/NoSuchMethodException.java 
+ 	java/lang/NullPointerException.java java/lang/Number.java 
+ 	java/lang/NumberFormatException.java java/lang/Object.java 
+ 	java/lang/OutOfMemoryError.java java/lang/Package.java 
+ 	java/lang/Process.java java/lang/Runnable.java 
+ 	java/lang/RuntimeException.java 
+ 	java/lang/RuntimePermission.java 
+ 	java/lang/SecurityException.java 
+ 	java/lang/SecurityManager.java java/lang/Short.java 
+ 	java/lang/StackOverflowError.java java/lang/String.java 
+ 	java/lang/StringBuffer.java 
+ 	java/lang/StringIndexOutOfBoundsException.java 
+ 	java/lang/System.java java/lang/ThreadDeath.java 
+ 	java/lang/ThreadGroup.java java/lang/ThreadLocal.java 
+ 	java/lang/UnknownError.java 
+ 	java/lang/UnsatisfiedLinkError.java 
+ 	java/lang/UnsupportedClassVersionError.java 
+ 	java/lang/UnsupportedOperationException.java 
+ 	java/lang/VerifyError.java java/lang/VirtualMachineError.java 
+ 	java/lang/Void.java java/lang/ref/PhantomReference.java 
+ 	java/lang/ref/Reference.java java/lang/ref/ReferenceQueue.java 
+ 	java/lang/ref/SoftReference.java 
+ 	java/lang/ref/WeakReference.java 
+ 	java/lang/reflect/AccessibleObject.java 
+ 	java/lang/reflect/Array.java 
+ 	java/lang/reflect/InvocationHandler.java 
+ 	java/lang/reflect/InvocationTargetException.java 
+ 	java/lang/reflect/Member.java java/lang/reflect/Modifier.java 
+ 	java/lang/reflect/Proxy.java 
+ 	java/lang/reflect/ReflectPermission.java 
+ 	java/lang/reflect/UndeclaredThrowableException.java 
+ 	java/math/BigDecimal.java java/math/BigInteger.java 
+ 	java/net/Authenticator.java java/net/BindException.java 
+ 	java/net/ConnectException.java java/net/ContentHandler.java 
+ 	java/net/ContentHandlerFactory.java 
+ 	java/net/DatagramPacket.java java/net/DatagramSocket.java 
+ 	java/net/DatagramSocketImpl.java java/net/FileNameMap.java 
+ 	java/net/HttpURLConnection.java java/net/InetAddress.java 
+ 	java/net/JarURLConnection.java 
+ 	java/net/MalformedURLException.java 
+ 	java/net/MimeTypeMapper.java java/net/MulticastSocket.java 
+ 	java/net/NetPermission.java 
+ 	java/net/NoRouteToHostException.java 
+ 	java/net/PasswordAuthentication.java 
+ 	java/net/PlainDatagramSocketImpl.java 
+ 	java/net/PlainSocketImpl.java java/net/ProtocolException.java 
+ 	java/net/ServerSocket.java java/net/Socket.java 
+ 	java/net/SocketException.java java/net/SocketImpl.java 
+ 	java/net/SocketImplFactory.java 
+ 	java/net/SocketInputStream.java java/net/SocketOptions.java 
+ 	java/net/SocketOutputStream.java 
+ 	java/net/SocketPermission.java java/net/URL.java 
+ 	java/net/URLClassLoader.java java/net/URLConnection.java 
+ 	java/net/URLDecoder.java java/net/URLEncoder.java 
+ 	java/net/URLStreamHandler.java 
+ 	java/net/URLStreamHandlerFactory.java 
+ 	java/net/UnknownHostException.java 
+ 	java/net/UnknownServiceException.java 
+ 	java/rmi/AccessException.java 
+ 	java/rmi/AlreadyBoundException.java 
+ 	java/rmi/ConnectException.java 
+ 	java/rmi/ConnectIOException.java 
+ 	java/rmi/MarshalException.java java/rmi/MarshalledObject.java 
+ 	java/rmi/Naming.java java/rmi/NoSuchObjectException.java 
+ 	java/rmi/NotBoundException.java 
+ 	java/rmi/RMISecurityException.java 
+ 	java/rmi/RMISecurityManager.java java/rmi/Remote.java 
+ 	java/rmi/RemoteException.java java/rmi/ServerError.java 
+ 	java/rmi/ServerException.java 
+ 	java/rmi/ServerRuntimeException.java 
+ 	java/rmi/StubNotFoundException.java 
+ 	java/rmi/UnexpectedException.java 
+ 	java/rmi/UnknownHostException.java 
+ 	java/rmi/UnmarshalException.java 
+ 	java/rmi/activation/Activatable.java 
+ 	java/rmi/activation/ActivateFailedException.java 
+ 	java/rmi/activation/ActivationDesc.java 
+ 	java/rmi/activation/ActivationException.java 
+ 	java/rmi/activation/ActivationGroup.java 
+ 	java/rmi/activation/ActivationGroupDesc.java 
+ 	java/rmi/activation/ActivationGroupID.java 
+ 	java/rmi/activation/ActivationID.java 
+ 	java/rmi/activation/ActivationInstantiator.java 
+ 	java/rmi/activation/ActivationMonitor.java 
+ 	java/rmi/activation/ActivationSystem.java 
+ 	java/rmi/activation/Activator.java 
+ 	java/rmi/activation/UnknownGroupException.java 
+ 	java/rmi/activation/UnknownObjectException.java 
+ 	java/rmi/dgc/DGC.java java/rmi/dgc/Lease.java 
+ 	java/rmi/dgc/VMID.java java/rmi/registry/LocateRegistry.java 
+ 	java/rmi/registry/Registry.java 
+ 	java/rmi/registry/RegistryHandler.java 
+ 	java/rmi/server/ExportException.java 
+ 	java/rmi/server/LoaderHandler.java 
+ 	java/rmi/server/LogStream.java java/rmi/server/ObjID.java 
+ 	java/rmi/server/Operation.java 
+ 	java/rmi/server/RMIClassLoader.java 
+ 	java/rmi/server/RMIClientSocketFactory.java 
+ 	java/rmi/server/RMIFailureHandler.java 
+ 	java/rmi/server/RMIServerSocketFactory.java 
+ 	java/rmi/server/RMISocketFactory.java 
+ 	java/rmi/server/RemoteCall.java 
+ 	java/rmi/server/RemoteObject.java 
+ 	java/rmi/server/RemoteRef.java 
+ 	java/rmi/server/RemoteServer.java 
+ 	java/rmi/server/RemoteStub.java 
+ 	java/rmi/server/ServerCloneException.java 
+ 	java/rmi/server/ServerNotActiveException.java 
+ 	java/rmi/server/ServerRef.java java/rmi/server/Skeleton.java 
+ 	java/rmi/server/SkeletonMismatchException.java 
+ 	java/rmi/server/SkeletonNotFoundException.java 
+ 	java/rmi/server/SocketSecurityException.java 
+ 	java/rmi/server/UID.java 
+ 	java/rmi/server/UnicastRemoteObject.java 
+ 	java/rmi/server/Unreferenced.java 
+ 	java/security/AccessControlContext.java 
+ 	java/security/AccessControlException.java 
+ 	java/security/AccessController.java 
+ 	java/security/AlgorithmParameterGenerator.java 
+ 	java/security/AlgorithmParameterGeneratorSpi.java 
+ 	java/security/AlgorithmParameters.java 
+ 	java/security/AlgorithmParametersSpi.java 
+ 	java/security/AllPermission.java 
+ 	java/security/BasicPermission.java 
+ 	java/security/Certificate.java java/security/CodeSource.java 
+ 	java/security/DigestException.java 
+ 	java/security/DigestInputStream.java 
+ 	java/security/DigestOutputStream.java 
+ 	java/security/DomainCombiner.java 
+ 	java/security/DummyKeyPairGenerator.java 
+ 	java/security/DummyMessageDigest.java 
+ 	java/security/DummySignature.java 
+ 	java/security/GeneralSecurityException.java 
+ 	java/security/Guard.java java/security/GuardedObject.java 
+ 	java/security/Identity.java java/security/IdentityScope.java 
+ 	java/security/InvalidAlgorithmParameterException.java 
+ 	java/security/InvalidKeyException.java 
+ 	java/security/InvalidParameterException.java 
+ 	java/security/Key.java java/security/KeyException.java 
+ 	java/security/KeyFactory.java java/security/KeyFactorySpi.java 
+ 	java/security/KeyManagementException.java 
+ 	java/security/KeyPair.java java/security/KeyPairGenerator.java 
+ 	java/security/KeyPairGeneratorSpi.java 
+ 	java/security/KeyStore.java 
+ 	java/security/KeyStoreException.java 
+ 	java/security/KeyStoreSpi.java 
+ 	java/security/MessageDigest.java 
+ 	java/security/MessageDigestSpi.java 
+ 	java/security/NoSuchAlgorithmException.java 
+ 	java/security/NoSuchProviderException.java 
+ 	java/security/Permission.java 
+ 	java/security/PermissionCollection.java 
+ 	java/security/Permissions.java java/security/Policy.java 
+ 	java/security/Principal.java java/security/PrivateKey.java 
+ 	java/security/PrivilegedAction.java 
+ 	java/security/PrivilegedActionException.java 
+ 	java/security/PrivilegedExceptionAction.java 
+ 	java/security/ProtectionDomain.java 
+ 	java/security/Provider.java 
+ 	java/security/ProviderException.java 
+ 	java/security/PublicKey.java 
+ 	java/security/SecureClassLoader.java 
+ 	java/security/SecureRandom.java 
+ 	java/security/SecureRandomSpi.java java/security/Security.java 
+ 	java/security/SecurityPermission.java 
+ 	java/security/Signature.java 
+ 	java/security/SignatureException.java 
+ 	java/security/SignatureSpi.java 
+ 	java/security/SignedObject.java java/security/Signer.java 
+ 	java/security/UnrecoverableKeyException.java 
+ 	java/security/UnresolvedPermission.java 
+ 	java/security/acl/Acl.java java/security/acl/AclEntry.java 
+ 	java/security/acl/AclNotFoundException.java 
+ 	java/security/acl/Group.java 
+ 	java/security/acl/LastOwnerException.java 
+ 	java/security/acl/NotOwnerException.java 
+ 	java/security/acl/Owner.java java/security/acl/Permission.java 
+ 	java/security/cert/CRL.java 
+ 	java/security/cert/CRLException.java 
+ 	java/security/cert/Certificate.java 
+ 	java/security/cert/CertificateEncodingException.java 
+ 	java/security/cert/CertificateException.java 
+ 	java/security/cert/CertificateExpiredException.java 
+ 	java/security/cert/CertificateFactory.java 
+ 	java/security/cert/CertificateFactorySpi.java 
+ 	java/security/cert/CertificateNotYetValidException.java 
+ 	java/security/cert/CertificateParsingException.java 
+ 	java/security/cert/X509CRL.java 
+ 	java/security/cert/X509CRLEntry.java 
+ 	java/security/cert/X509Certificate.java 
+ 	java/security/cert/X509Extension.java 
+ 	java/security/interfaces/DSAKey.java 
+ 	java/security/interfaces/DSAKeyPairGenerator.java 
+ 	java/security/interfaces/DSAParams.java 
+ 	java/security/interfaces/DSAPrivateKey.java 
+ 	java/security/interfaces/DSAPublicKey.java 
+ 	java/security/interfaces/RSAKey.java 
+ 	java/security/interfaces/RSAPrivateCrtKey.java 
+ 	java/security/interfaces/RSAPrivateKey.java 
+ 	java/security/interfaces/RSAPublicKey.java 
+ 	java/security/spec/AlgorithmParameterSpec.java 
+ 	java/security/spec/DSAParameterSpec.java 
+ 	java/security/spec/DSAPrivateKeySpec.java 
+ 	java/security/spec/DSAPublicKeySpec.java 
+ 	java/security/spec/EncodedKeySpec.java 
+ 	java/security/spec/InvalidKeySpecException.java 
+ 	java/security/spec/InvalidParameterSpecException.java 
+ 	java/security/spec/KeySpec.java 
+ 	java/security/spec/PKCS8EncodedKeySpec.java 
+ 	java/security/spec/RSAKeyGenParameterSpec.java 
+ 	java/security/spec/RSAPrivateCrtKeySpec.java 
+ 	java/security/spec/RSAPrivateKeySpec.java 
+ 	java/security/spec/RSAPublicKeySpec.java 
+ 	java/security/spec/X509EncodedKeySpec.java java/sql/Array.java 
+ 	java/sql/BatchUpdateException.java java/sql/Blob.java 
+ 	java/sql/CallableStatement.java java/sql/Clob.java 
+ 	java/sql/Connection.java java/sql/DataTruncation.java 
+ 	java/sql/DatabaseMetaData.java java/sql/Date.java 
+ 	java/sql/Driver.java java/sql/DriverManager.java 
+ 	java/sql/DriverPropertyInfo.java 
+ 	java/sql/PreparedStatement.java java/sql/Ref.java 
+ 	java/sql/ResultSet.java java/sql/ResultSetMetaData.java 
+ 	java/sql/SQLData.java java/sql/SQLException.java 
+ 	java/sql/SQLInput.java java/sql/SQLOutput.java 
+ 	java/sql/SQLWarning.java java/sql/Statement.java 
+ 	java/sql/Struct.java java/sql/Time.java 
+ 	java/sql/Timestamp.java java/sql/Types.java 
+ 	java/text/Annotation.java 
+ 	java/text/AttributedCharacterIterator.java 
+ 	java/text/AttributedString.java 
+ 	java/text/AttributedStringIterator.java 
+ 	java/text/BreakIterator.java java/text/CharacterIterator.java 
+ 	java/text/ChoiceFormat.java 
+ 	java/text/CollationElementIterator.java 
+ 	java/text/CollationKey.java java/text/Collator.java 
+ 	java/text/DateFormat.java java/text/DateFormatSymbols.java 
+ 	java/text/DecimalFormat.java 
+ 	java/text/DecimalFormatSymbols.java 
+ 	java/text/FieldPosition.java java/text/Format.java 
+ 	java/text/MessageFormat.java java/text/NumberFormat.java 
+ 	java/text/ParseException.java java/text/ParsePosition.java 
+ 	java/text/RuleBasedCollator.java 
+ 	java/text/SimpleDateFormat.java 
+ 	java/text/StringCharacterIterator.java 
+ 	java/util/AbstractCollection.java java/util/AbstractList.java 
+ 	java/util/AbstractMap.java 
+ 	java/util/AbstractSequentialList.java 
+ 	java/util/AbstractSet.java java/util/ArrayList.java 
+ 	java/util/Arrays.java java/util/BasicMapEntry.java 
+ 	java/util/BitSet.java java/util/Calendar.java 
+ 	java/util/Collection.java java/util/Collections.java 
+ 	java/util/Comparator.java 
+ 	java/util/ConcurrentModificationException.java 
+ 	java/util/Date.java java/util/Dictionary.java 
+ 	java/util/EmptyStackException.java java/util/Enumeration.java 
+ 	java/util/EventListener.java java/util/EventObject.java 
+ 	java/util/GregorianCalendar.java java/util/HashMap.java 
+ 	java/util/HashSet.java java/util/Hashtable.java 
+ 	java/util/IdentityHashMap.java java/util/Iterator.java 
+ 	java/util/LinkedHashMap.java java/util/LinkedHashSet.java 
+ 	java/util/LinkedList.java java/util/List.java 
+ 	java/util/ListIterator.java java/util/ListResourceBundle.java 
+ 	java/util/Locale.java java/util/Map.java 
+ 	java/util/MissingResourceException.java 
+ 	java/util/NoSuchElementException.java 
+ 	java/util/Observable.java java/util/Observer.java 
+ 	java/util/Properties.java java/util/PropertyPermission.java 
+ 	java/util/PropertyResourceBundle.java java/util/Random.java 
+ 	java/util/RandomAccess.java java/util/ResourceBundle.java 
+ 	java/util/Set.java java/util/SimpleTimeZone.java 
+ 	java/util/SortedMap.java java/util/SortedSet.java 
+ 	java/util/Stack.java java/util/StringTokenizer.java 
+ 	java/util/TimeZone.java java/util/Timer.java 
+ 	java/util/TimerTask.java 
+ 	java/util/TooManyListenersException.java 
+ 	java/util/TreeMap.java java/util/TreeSet.java 
+ 	java/util/Vector.java java/util/WeakHashMap.java 
+ 	java/util/jar/Attributes.java java/util/jar/JarEntry.java 
+ 	java/util/jar/JarException.java java/util/jar/JarFile.java 
+ 	java/util/jar/JarInputStream.java 
+ 	java/util/jar/JarOutputStream.java java/util/jar/Manifest.java 
+ 	java/util/prefs/AbstractPreferences.java 
+ 	java/util/prefs/BackingStoreException.java 
+ 	java/util/prefs/InvalidPreferencesFormatException.java 
+ 	java/util/prefs/NodeChangeEvent.java 
+ 	java/util/prefs/NodeChangeListener.java 
+ 	java/util/prefs/PreferenceChangeEvent.java 
+ 	java/util/prefs/PreferenceChangeListener.java 
+ 	java/util/prefs/Preferences.java 
+ 	java/util/prefs/PreferencesFactory.java 
+ 	java/util/zip/Adler32.java java/util/zip/CRC32.java 
+ 	java/util/zip/CheckedInputStream.java 
+ 	java/util/zip/CheckedOutputStream.java 
+ 	java/util/zip/Checksum.java 
+ 	java/util/zip/DataFormatException.java 
+ 	java/util/zip/Deflater.java 
+ 	java/util/zip/DeflaterConstants.java 
+ 	java/util/zip/DeflaterEngine.java 
+ 	java/util/zip/DeflaterHuffman.java 
+ 	java/util/zip/DeflaterOutputStream.java 
+ 	java/util/zip/DeflaterPending.java 
+ 	java/util/zip/GZIPConstants.java 
+ 	java/util/zip/GZIPInputStream.java 
+ 	java/util/zip/GZIPOutputStream.java 
+ 	java/util/zip/Inflater.java 
+ 	java/util/zip/InflaterDynHeader.java 
+ 	java/util/zip/InflaterHuffmanTree.java 
+ 	java/util/zip/InflaterInputStream.java 
+ 	java/util/zip/OutputWindow.java 
+ 	java/util/zip/PendingBuffer.java 
+ 	java/util/zip/StreamManipulator.java 
+ 	java/util/zip/ZipConstants.java java/util/zip/ZipEntry.java 
+ 	java/util/zip/ZipException.java java/util/zip/ZipFile.java 
+ 	java/util/zip/ZipInputStream.java 
+ 	java/util/zip/ZipOutputStream.java 
+ 	javax/accessibility/Accessible.java 
+ 	javax/accessibility/AccessibleAction.java 
+ 	javax/accessibility/AccessibleComponent.java 
+ 	javax/accessibility/AccessibleHypertext.java 
+ 	javax/accessibility/AccessibleSelection.java 
+ 	javax/accessibility/AccessibleText.java 
+ 	javax/accessibility/package.html 
+ 	javax/naming/BinaryRefAddr.java 
+ 	javax/naming/InvalidNameException.java javax/naming/Name.java 
+ 	javax/naming/NamingException.java javax/naming/RefAddr.java 
+ 	javax/naming/StringRefAddr.java javax/swing/GrayFilter.java 
+ 	javax/swing/plaf/BorderUIResource.java 
+ 	javax/swing/plaf/UIResource.java 
+ 	native/gnu.java.awt.image/gdkpixbufdecoder.c 
+ 	native/jni/classpath/jcl.c native/jni/classpath/jcl.h 
+ 	native/jni/classpath/jnilink.c native/jni/classpath/jnilink.h 
+ 	native/jni/classpath/native_state.c 
+ 	native/jni/classpath/native_state.h 
+ 	native/jni/classpath/primlib.c native/jni/classpath/primlib.h 
+ 	native/jni/gtk-peer/gnu_java_awt_image_GdkPixbufDecoder.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c 
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c 
+ 	native/jni/gtk-peer/gthread-jni.c 
+ 	native/jni/gtk-peer/gthread-jni.h 
+ 	native/jni/gtk-peer/gtkpeer.h 
+ 	native/jni/java-io/java_io_File.c 
+ 	native/jni/java-io/java_io_FileDescriptor.c 
+ 	native/jni/java-io/java_io_FileInputStream.c 
+ 	native/jni/java-io/java_io_FileOutputStream.c 
+ 	native/jni/java-io/java_io_ObjectInputStream.c 
+ 	native/jni/java-io/java_io_ObjectOutputStream.c 
+ 	native/jni/java-io/java_io_RandomAccessFile.c 
+ 	native/jni/java-io/javaio.c native/jni/java-io/javaio.h 
+ 	native/jni/java-lang/java_lang_Double.c 
+ 	native/jni/java-lang/java_lang_Float.c 
+ 	native/jni/java-lang/java_lang_Math.c 
+ 	native/jni/java-lang/java_lang_Object.c 
+ 	native/jni/java-lang/java_lang_System.c 
+ 	native/jni/java-lang/java_lang_reflect_Array.c 
+ 	native/jni/java-net/java_net_InetAddress.c 
+ 	native/jni/java-net/java_net_PlainDatagramSocketImpl.c 
+ 	native/jni/java-net/java_net_PlainSocketImpl.c 
+ 	native/jni/java-net/javanet.c native/jni/java-net/javanet.h 
+ 	native/jni/java-util/java_util_TimeZone.c native/vmi/vmi.c 
+ 	native/vmi/vmi.h vm/reference/gnu/vm/stack/StackFrame.java 
+ 	vm/reference/gnu/vm/stack/StackTrace.java 
+ 	vm/reference/java/lang/Class.java 
+ 	vm/reference/java/lang/Runtime.java 
+ 	vm/reference/java/lang/Thread.java 
+ 	vm/reference/java/lang/Throwable.java 
+ 	vm/reference/java/lang/VMClassLoader.java 
+ 	vm/reference/java/lang/VMObject.java 
+ 	vm/reference/java/lang/VMSecurityManager.java 
+ 	vm/reference/java/lang/VMSystem.java 
+ 	vm/reference/java/lang/reflect/Constructor.java 
+ 	vm/reference/java/lang/reflect/Field.java 
+ 	vm/reference/java/lang/reflect/Method.java: Add license clarification.
+ 
+ 2002-01-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/PopupMenu.java (addNotify): New implementation from
+ 	libgcj.
+ 	* java/awt/MenuBar.java (add): Handle case where menu already has
+ 	a parent.
+ 	(deleteShortcut): Delete shortcut from all menus.
+ 	(remove(int)): New implementation from libgcj.
+ 	(setHelpMenu): Likewise.
+ 	* java/awt/MenuItem.java (paramString): Don't include class name
+ 	or brackets.  Call superclass paramString.
+ 	* java/awt/MenuComponent.java (toString): Call paramString.
+ 	(paramString): Compute string; don't call toString.
+ 	* java/awt/Label.java (paramString): Don't include class name
+ 	or brackets.  Call superclass paramString.
+ 	* java/awt/Checkbox.java (paramString): Don't include class name
+ 	or brackets.  Call superclass paramString.
+ 	* java/awt/Button.java (paramString): Don't include class name or
+ 	brackets.  Call superclass paramString.
+ 	* java/awt/MenuComponent.java (getTreeLock): Now protected.
+ 	* java/awt/Panel.java (addNotify): Call superclass addNotify.
+ 	* java/awt/PaintContext.java: New file from libgcj.
+ 	* java/awt/MenuShortcut.java (equals(Object)): New method.
+ 	(hashCode): Likewise.
+ 	(toString): Use paramString and square brackets.
+ 	* java/awt/MenuContainer.java (postEvent): Resurrected.
+ 	* java/awt/Menu.java (menuSerializedDataVersion): New field.
+ 	(addNotify): Use peer field directly.  Call superclass addNotify.
+ 	(add): New implementation from libgcj.
+ 	(separator): New field.
+ 	(addSeparator): New implementation from libgcj.
+ 	(insertSeparator): Likewise.
+ 	(removeAll): Removed redundant test.  Always remove item 0.
+ 	(paramString): Include tearOff, isHelpMenu, and superclass
+ 	paramString.
+ 	* java/awt/List.java (List()): Default to 4 rows.
+ 	(addNotify): Use `peer' directly.  Call superclass addNotify.
+ 	(addItem(String)): Deprecated.
+ 	(add(String)): Call add, not addItem.
+ 	(add(String,int)): Do work here.
+ 	(addItem(String,int)): Call add.  Deprecated.
+ 	(removeAll): Use `clear' on items.  Use `peer' field directly.
+ 	(remove(String)): Use remove, not delItem.
+ 	(replaceItem): Likewise.
+ 	(remove(int)): New implementation from libgcj.
+ 	(delItem(int)): Use remove.
+ 	(getSelectedIndex): New implementation from libgcj.
+ 	(getSelectedIndexes): Likewise.
+ 	(isIndexSelected): Remove redundant test.
+ 	(setMultipleMode): Use `peer' field directly.
+ 	(makeVisible): Likewise.
+ 	(paramString): New implementation from libgcj.
+ 	(delItems): Run loop in reverse direction.  Use `peer' field
+ 	directly.
+ 	* java/awt/Insets.java (equals): Removed redundant test.
+ 	(hashCode): New method.
+ 	* java/awt/GridBagConstraints.java: New file from libgcj.
+ 	* java/awt/FontMetrics.java (getMaxAdvance): Return -1.
+ 	(toString): Use libgcj implementation.
+ 	* java/awt/Font.java (ROMAN_BASELINE, CENTER_BASELINE,
+ 	HANGING_BASELINE): New constants.
+ 	(pointSize): New field.
+ 	(Font): Initialize pointSize.
+ 	(getStyle): New method.
+ 	(getSize2D): Likewise.
+ 	* java/awt/FileDialog.java (addNotify): Use `peer' field directly.
+ 	Call superclass addNotify.
+ 	(paramString): Don't include class name or brackets.  Call
+ 	superclass paramString.
+ 	(setDirectory): Use `peer' field directly.
+ 	(setFile): Likewise.
+ 	(setFilenameFilter): Likewise.
+ 	* java/awt/Dialog.java (Dialog(Dialog)): New constructor.
+ 	(Dialog(Dialog,String)): Likewise.
+ 	(Dialog(Dialog,String,boolean)): Likewise.
+ 	(addNotify): Use `peer' field directly.  Call superclass
+ 	addNotify.
+ 	(setTitle): Use `peer' field directly.
+ 	(setResizable): Likewise.
+ 	(paramString): Don't include class name
+ 	or brackets.  Call superclass paramString.
+ 	* java/awt/Cursor.java: Merged with libgcj.
+ 	* java/awt/Color.java (white, lightGray, gray, darkGray, black,
+ 	red, pink, orange, yellow, green, magenta, cyan, blue): Set alpha
+ 	value.
+ 	(value): Initialize.
+ 	(Color(int,boolean)): New constructor.
+ 	(Color(int,int,int,int)): Likewise.
+ 	(alphamask): New constant.
+ 	(getAlpha): New method.
+ 	(BRIGHT_STEP): New constant.
+ 	(brighter, darker): New implementation from libgcj.
+ 	(getTransparency): New method.
+ 	(equals): Remove redundant test.  Compare `value' fields
+ 	directly.
+ 	* java/awt/Choice.java (selectedIndex): Initialize to -1.
+ 	(add): Throw exception if item is null.  Use `peer' field
+ 	directly.  Select item if it is the first.
+ 	(addItem): Call add.
+ 	(addNotify): Use `peer' field directly.  Call superclass
+ 	addNotify.
+ 	(getSelectedItem): Handle case where selectedIndex is -1.
+ 	(insert): Use `peer' field directly.  Only cast if peer is
+ 	non-null.  Handle case where `index' is too large.  Select item if
+ 	it is the first one.
+ 	(paramString): Don't include class name or brackets.  Call
+ 	superclass paramString.
+ 	(remove(String)): Throw exception if item not found.
+ 	(remove(int)): Use `peer' field directly.  Update selection.
+ 	(removeAll): Correctly remove items.  Remove redundant check.
+ 	(select(String)): Throw exception if item not found.
+ 	(select(int)): Use `peer' field directly.  Don't cast unless peer
+ 	is non-null.
+ 	* java/awt/CheckboxMenuItem.java (addNotify): Use `peer' field
+ 	directly.  Call superclass addNotify.
+ 	(paramString): Don't include class name	or brackets.  Call
+ 	superclass paramString.
+ 	(processEvent): Call superclass processEvent.
+ 	(setState): Use `peer' field directly.  Don't cast unless peer is
+ 	non-null.
+ 
+ 2002-01-19  Mark Wielaard <mark@klomp.org>
+ 
+ 	* native/jni/java-net/javanet.c (_javanet_get_option): make exception
+ 	message more clear.
+ 	* native/jni/java-net/javanet.h
+ 	(SOCKOPT_SO_SNDBUF,SOCKOPT_SO_REUSEADDR): swap definitions.
+ 
+ 2002-01-17  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* include/.cvsignore: updated to not ignore jni files
+ 
+ 2002-01-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/MenuComponent.java (parent): Now package-private.
+ 
+ 	* java/awt/MenuComponent.java (postEvent): Restored, now returns
+ 	`false'.
+ 
+ 	* java/awt/MenuComponent.java (peer): Now transient and
+ 	package-private.
+ 	(parent): Now transient.
+ 	(tree_lock): Likewise.
+ 	(toolkit): Now transient and static.	
+ 	(dispatchEvent): Call dispatchEventImpl.
+ 	(dispatchEventImpl): New method.
+ 	(processEvent): Removed redundant `return'.
+ 	* java/awt/MenuItem.java (setLabel): Use `peer' field directly.
+ 	Don't cast peer unless it is non-null.
+ 	(setEnabled): Likewise.
+ 	(removeActionListener): New method.
+ 	(addNotify): Use `peer' field directly.
+ 	(getListeners): New method.
+ 	(dispatchEventImpl): Likewise.
+ 	Import EventListener.
+ 	* java/awt/Button.java (Button): Use `null' as default.
+ 	(addNotify): Call superclass addNotify().  Use `peer' field
+ 	directly.
+ 	(dispatchEventImpl): New method.
+ 	(getListeners): Likewise.
+ 	(setActionCommand): Handle case where argument is `null'.
+ 	(setLabel): Use `peer' field directly.  Don't cast peer unless it
+ 	is non-null.
+ 	Import EventListener.
+ 
+ 	* java/awt/ActiveEvent.java: Replaced with libgcj version.
+ 
+ 2002-01-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Canvas.java: Merged with libgcj.
+ 
+ 	* java/awt/CheckboxGroup.java (setSelectedCheckbox): Handle case
+ 	where argument is null.
+ 	* java/awt/Checkbox.java (setLabel): Only cast peer if it exists.
+ 	(setState): Likewise.
+ 	(setCheckboxGroup): Likewise.
+ 	(addNotify): Use `peer' field directly.  Call superclass
+ 	addNotify().
+ 	(paramString): Use square brackets.  Include `group'.
+ 
+ 	* java/awt/Dimension.java: Merged with libgcj.
+ 	* java/awt/Point.java: Updated copyright.
+ 
+ 	* java/awt/Point.java: Merged with libgcj.
+ 
+ 	* java/util/IdentityHashMap.java (IdentityHashMap): Removed
+ 	commented code.
+ 	(hash): Correctly compute initial value for `h'.
+ 
+ 2002-01-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Label.java (Label(String,int)): Use setAlignment and
+ 	setText.
+ 	(setAlignment): Throw exception if alignment is invalid.  Only
+ 	cast peer if it is not null.
+ 	(setText): Only cast peer if it is not null.
+ 	(addNotify): Only create peer if it doesn't already exist.  Call
+ 	superclass addNotify.
+ 
+ 2002-01-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Makefile.am (EXTRA_DIST): Added new file.
+ 	* java/awt/AWTPermission.java: New file from libgcj.
+ 
+ 	* configure.in (AC_OUTPUT): Create new Makefiles.
+ 	* gnu/java/awt/Makefile.am (EXTRA_DIST): New macro.
+ 	* java/awt/color/.cvsignore: New file.
+ 	* java/awt/geom/.cvsignore: New file.
+ 	* java/awt/image/Makefile.am (EXTRA_DIST): Updated.
+ 	* java/awt/event/Makefile.am (EXTRA_DIST): Updated.
+ 	* java/awt/geom/Makefile.am: New file.
+ 	* java/awt/color/Makefile.am: New file.
+ 	* java/awt/Makefile.am (EXTRA_DIST): Updated.
+ 	(SUBDIRS): Added color, geom.
+ 
+ 	* java/awt/GridLayout.java: Merged with libgcj.
+ 	* java/awt/CardLayout.java: Merged with libgcj.
+ 
+ 2002-01-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(getGraphicsConfiguration): New method.
+ 	(setMask): Likewise.
+ 
+ 	Start of AWT merge with libgcj:
+ 	* java/awt/CardLayout.java: Merged with libgcj.
+ 	* java/awt/Rectangle.java: Merged with libgcj.
+ 	* java/awt/Frame.java (Frame): Use `super()'.
+ 	(setIconImage): Only notify peer if it exists.
+ 	(setResizable): Likewise.
+ 	(setTitle): Likewise.
+ 	(setMenuBar): Likewise.
+ 	(getState): New method from libgcj.
+ 	(Frame(GraphicsConfiguration)): Likewise.
+ 	(Frame(String,GraphicsConfiguration)): Likewise.
+ 	(addNotify): New implementation from libgcj.
+ 	(getFrames): New stub from libgcj.
+ 	* java/awt/Paint.java: New file from libgcj.
+ 	* java/awt/RenderingHints.java: New file from libgcj.
+ 	* java/awt/Graphics.java (drawRect(int,int,int,int)): New
+ 	implementation from libgcj.
+ 	(draw3DRect): New method from libgcj.
+ 	(drawBytes): Likewise.
+ 	(hitClip): Likewise.
+ 	(getClipBounds(Rectangle)): Likewise.
+ 	(fill3DRect): Implementation from libgcj.
+ 	* java/awt/image/DirectColorModel.java: Merged with libgcj.
+ 	* java/awt/Transparency.java: New file from libgcj.
+ 	* java/awt/image/ColorModel.java: Merged with libgcj.
+ 	* java/awt/geom/AffineTransform.java: New file from libgcj.
+ 	* java/awt/geom/Dimension2D.java: New file from libgcj.
+ 	* java/awt/geom/Ellipse2D.java: New file from libgcj.
+ 	* java/awt/geom/IllegalPathStateException.java: New file from libgcj.
+ 	* java/awt/geom/Line2D.java: New file from libgcj.
+ 	* java/awt/geom/NoninvertibleTransformException.java: New file
+ 	from libgcj.
+ 	* java/awt/geom/PathIterator.java: New file from libgcj.
+ 	* java/awt/geom/Point2D.java: New file from libgcj.
+ 	* java/awt/geom/Rectangle2D.java: New file from libgcj.
+ 	* java/awt/geom/Rectangle2D.java: New file from libgcj.
+ 	* java/awt/geom/RectanglularShape.java: New file from libgcj.
+ 	* java/awt/geom/RoundRectangle2D.java: New file from libgcj.
+ 	* java/awt/Graphics2D.java: New file from libgcj.
+ 	* java/awt/image/Raster.java: New file from libgcj.
+ 	* java/awt/image/ComponentColorModel.java: New file from libgcj.
+ 	* java/awt/image/BufferedImage.java: New file from libgcj.
+ 	* java/awt/image/DataBuffer.java: New file from libgcj.
+ 	* java/awt/image/DataBufferByte.java: New file from libgcj.
+ 	* java/awt/image/DataBufferInt.java: New file from libgcj.
+ 	* java/awt/image/DataBufferUShort.java: New file from libgcj.
+ 	* java/awt/image/WritableRaster.java: New file from libgcj.
+ 	* java/awt/image/ComponentSampleModel.java: New file from libgcj.
+ 	* java/awt/image/PackedColorModel.java: New file from libgcj.
+ 	* java/awt/image/RasterOp.java: New file from libgcj.
+ 	* java/awt/image/SampleModel.java: New file from libgcj.
+ 	* java/awt/image/SinglePixelPackedSampleModel.java: New file from
+ 	libgcj.
+ 	* java/awt/EventDispatcher.java: Removed.
+ 	* java/awt/EventDispatchThread.java: New file from libgcj.
+ 	* java/awt/Window.java: Merged with libgcj.
+ 	* java/awt/color/ColorSpace.java: New file from libgcj.
+ 	* java/awt/color/ICC_ColorSpace.java: Likewise.
+ 	* java/awt/color/ICC_Profile.java: Likewise.
+ 	* java/awt/AWTEventMulticaster.java: Merged with libgcj.
+ 	* java/awt/event/HierarchyListener.java: New file from libgcj.
+ 	* java/awt/event/HierarchyEvent.java: New file from libgcj.
+ 	* java/awt/event/HierarchyBoundsListener.java: New file from
+ 	libgcj.
+ 	* java/awt/event/HierarchyBoundsAdapter.java: New file from
+ 	libgcj.
+ 	* java/awt/peer/ComponentPeer.java (getGraphicsConfiguration): New
+ 	method.
+ 	(setEventMask): Likewise.
+ 	* java/awt/AWTEvent.java: Merged with libgcj.
+ 	* java/awt/Event.java: New file from libgcj.
+ 	* java/awt/GraphicsConfiguration.java: New file from libgcj.
+ 	* java/awt/Component.java: Merged with libgcj.
+ 	* java/awt/Container.java (addImpl): Handle case where constraint
+ 	is not a String.  Post event via system event queue.
+ 	(remove): Post event via system event queue.
+ 	(validateTree): Only validate child if it is invalid.
+ 	(getAlignmentX): Call super method as default.
+ 	(getAlignmentY): Likewise.
+ 	(addContainerListener): Now synchronized.
+ 	(removeContainerListener): Likewise.
+ 	(addNotifyContainerChildren): Now private.
+ 	* java/awt/FlowLayout.java (serialVersionUID): New field.
+ 	(setAlignment): Better exception message.
+ 	(layoutContainer): Don't compute component's preferred size unless
+ 	we're going to use it.
+ 	* java/awt/ComponentOrientation.java: New file from libgcj.
+ 	* java/awt/BorderLayout.java (AFTER_LAST_LINE, AFTER_LINE_ENDS,
+ 	BEFORE_FIRST_LINE, BEFORE_LINE_BEGINS): New constants.
+ 	(firstLine, lastLine, firstItem, lastItem): New fields.
+ 	(addLayoutComponent): Handle case where constraints is null.
+ 	Also, handle relative locations.
+ 	(removeLayoutComponent): Handle relative locations.
+ 	(MIN, MAX, PREF): New constants.
+ 	(calcCompSize): New method.
+ 	(calcSize): New method.
+ 	(minimumLayoutSize): Use it.
+ 	(preferredLayoutSize): Likewise.
+ 	(maximumLayoutSize): Likewise.
+ 	(toString): Include more information.
+ 	(setBounds): New method.
+ 	(layoutContainer): Use libgcj implementation; extended to handle
+ 	relative locations.
+ 
+ 2002-01-15  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Double.java (equals, compare): Fix 0.0 vs. -0.0 math.
+ 	* java/lang/Float.java (equals, compare): Ditto.
+ 
+ 2002-01-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* acinclude.m4: Fix $user_specified_javac detection
+ 
+ 2002-01-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	compat/java.net/PlainSocketImpl.java,
+ 	gnu/java/awt/image/GdkPixbufDecoder.java,
+ 	gnu/java/awt/image/GtkOffScreenDecoder.java,
+ 	gnu/java/awt/image/ImageDecoder.java,
+ 	gnu/java/awt/image/XBMDecoder.java,
+ 	gnu/java/awt/peer/gtk/GdkFontMetrics.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu/java/awt/peer/gtk/GtkArg.java,
+ 	gnu/java/awt/peer/gtk/GtkArgList.java,
+ 	gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCanvasPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkChoicePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkClipboard.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkContainerPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkGenericPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkImage.java,
+ 	gnu/java/awt/peer/gtk/GtkImagePainter.java,
+ 	gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMainThread.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuBarPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkOffScreenImage.java,
+ 	gnu/java/awt/peer/gtk/GtkPanelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkRadioButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToggleButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	gnu/java/awt/peer/gtk/TestAWT.java,
+ 	gnu/java/awt/peer/gtk/Test.java,
+ 	gnu/java/net/protocol/http/Handler.java,
+ 	gnu/javax/swing/plaf/gtk/GtkBorders.java,
+ 	gnu/javax/swing/plaf/gtk/GtkCheckBoxUI.java,
+ 	gnu/javax/swing/plaf/gtk/GtkIconFactory.java,
+ 	gnu/javax/swing/plaf/gtk/GtkLookAndFeel.java,
+ 	gnu/javax/swing/plaf/gtk/GtkRadioButtonUI.java,
+ 	gnu/javax/swing/plaf/gtk/GtkSliderUI.java,
+ 	gnu/test/Fail.java, gnu/test/Pass.java, gnu/test/Result.java,
+ 	gnu/test/Test.java, gnu/test/Unresolved.java,
+ 	gnu/test/Unsupported.java, gnu/test/Untested.java,
+ 	gnu/test/XFail.java, gnu/test/XPass.java,
+ 	java/awt/Adjustable.java, java/awt/AWTError.java,
+ 	java/awt/AWTEvent.java, java/awt/AWTEventMulticaster.java,
+ 	java/awt/AWTException.java, java/awt/BorderLayout.java,
+ 	java/awt/Button.java, java/awt/Canvas.java,
+ 	java/awt/CardLayout.java, java/awt/CheckboxGroup.java,
+ 	java/awt/Checkbox.java, java/awt/CheckboxMenuItem.java,
+ 	java/awt/Choice.java, java/awt/Color.java,
+ 	java/awt/Component.java, java/awt/Container.java,
+ 	java/awt/Cursor.java, java/awt/datatransfer/Clipboard.java,
+ 	java/awt/datatransfer/ClipboardOwner.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/awt/datatransfer/FlavorMap.java,
+ 	java/awt/datatransfer/MimeTypeParseException.java,
+ 	java/awt/datatransfer/StringSelection.java,
+ 	java/awt/datatransfer/SystemFlavorMap.java,
+ 	java/awt/datatransfer/Transferable.java,
+ 	java/awt/datatransfer/UnsupportedFlavorException.java,
+ 	java/awt/Dialog.java, java/awt/Dimension.java,
+ 	java/awt/event/ActionEvent.java, java/awt/event/ActionListener.java,
+ 	java/awt/event/AdjustmentEvent.java,
+ 	java/awt/event/AdjustmentListener.java,
+ 	java/awt/event/AWTEventListener.java,
+ 	java/awt/event/ComponentAdapter.java,
+ 	java/awt/event/ComponentEvent.java,
+ 	java/awt/event/ComponentListener.java,
+ 	java/awt/event/ContainerAdapter.java,
+ 	java/awt/event/ContainerEvent.java,
+ 	java/awt/event/ContainerListener.java, java/awt/EventDispatcher.java,
+ 	java/awt/event/FocusAdapter.java, java/awt/event/FocusEvent.java,
+ 	java/awt/event/FocusListener.java, java/awt/event/InputEvent.java,
+ 	java/awt/event/InputMethodEvent.java,
+ 	java/awt/event/InputMethodListener.java,
+ 	java/awt/event/InvocationEvent.java, java/awt/event/ItemEvent.java,
+ 	java/awt/event/ItemListener.java, java/awt/event/KeyAdapter.java,
+ 	java/awt/event/KeyEvent.java, java/awt/event/KeyListener.java,
+ 	java/awt/event/MouseAdapter.java, java/awt/event/MouseEvent.java,
+ 	java/awt/event/MouseListener.java,
+ 	java/awt/event/MouseMotionAdapter.java,
+ 	java/awt/event/MouseMotionListener.java,
+ 	java/awt/event/PaintEvent.java, java/awt/EventQueue.java,
+ 	java/awt/event/TextEvent.java, java/awt/event/TextListener.java,
+ 	java/awt/event/WindowAdapter.java, java/awt/event/WindowEvent.java,
+ 	java/awt/event/WindowListener.java, java/awt/FileDialog.java,
+ 	java/awt/FlowLayout.java, java/awt/Font.java,
+ 	java/awt/FontMetrics.java, java/awt/Frame.java, java/awt/Graphics.java,
+ 	java/awt/GridLayout.java, java/awt/IllegalComponentStateException.java,
+ 	java/awt/image/AreaAveragingScaleFilter.java,
+ 	java/awt/image/ColorModel.java, java/awt/image/CropImageFilter.java,
+ 	java/awt/image/DirectColorModel.java,
+ 	java/awt/image/FilteredImageSource.java,
+ 	java/awt/image/ImageConsumer.java, java/awt/image/ImageFilter.java,
+ 	java/awt/image/ImageObserver.java, java/awt/image/ImageProducer.java,
+ 	java/awt/image/IndexColorModel.java, java/awt/Image.java,
+ 	java/awt/ImageMediaEntry.java, java/awt/image/MemoryImageSource.java,
+ 	java/awt/image/PixelGrabber.java,
+ 	java/awt/image/ReplicateScaleFilter.java,
+ 	java/awt/image/RGBImageFilter.java, java/awt/Insets.java,
+ 	java/awt/ItemSelectable.java, java/awt/Label.java,
+ 	java/awt/LayoutManager2.java, java/awt/LayoutManager.java,
+ 	java/awt/List.java, java/awt/MediaEntry.java,
+ 	java/awt/MediaTracker.java, java/awt/MenuBar.java,
+ 	java/awt/MenuComponent.java, java/awt/MenuContainer.java,
+ 	java/awt/MenuItem.java, java/awt/Menu.java,
+ 	java/awt/MenuShortcut.java, java/awt/Panel.java,
+ 	java/awt/peer/ButtonPeer.java, java/awt/peer/CanvasPeer.java,
+ 	java/awt/peer/CheckboxMenuItemPeer.java,
+ 	java/awt/peer/CheckboxPeer.java, java/awt/peer/ChoicePeer.java,
+ 	java/awt/peer/ComponentPeer.java, java/awt/peer/ContainerPeer.java,
+ 	java/awt/peer/DialogPeer.java, java/awt/peer/FileDialogPeer.java,
+ 	java/awt/peer/FontPeer.java, java/awt/peer/FramePeer.java,
+ 	java/awt/peer/LabelPeer.java, java/awt/peer/LightweightPeer.java,
+ 	java/awt/peer/ListPeer.java, java/awt/peer/MenuBarPeer.java,
+ 	java/awt/peer/MenuComponentPeer.java, java/awt/peer/MenuItemPeer.java,
+ 	java/awt/peer/MenuPeer.java, java/awt/peer/PanelPeer.java,
+ 	java/awt/peer/PopupMenuPeer.java, java/awt/peer/ScrollbarPeer.java,
+ 	java/awt/peer/ScrollPanePeer.java, java/awt/peer/TextAreaPeer.java,
+ 	java/awt/peer/TextComponentPeer.java, java/awt/peer/TextFieldPeer.java,
+ 	java/awt/peer/WindowPeer.java, java/awt/Point.java,
+ 	java/awt/Polygon.java, java/awt/PopupMenu.java,
+ 	java/awt/print/Book.java, java/awt/PrintGraphics.java,
+ 	java/awt/PrintJob.java, java/awt/print/Pageable.java,
+ 	java/awt/print/PageFormat.java, java/awt/print/Paper.java,
+ 	java/awt/print/Printable.java,
+ 	java/awt/print/PrinterAbortException.java,
+ 	java/awt/print/PrinterException.java,
+ 	java/awt/print/PrinterGraphics.java,
+ 	java/awt/print/PrinterIOException.java,
+ 	java/awt/print/PrinterJob.java, java/awt/Rectangle.java,
+ 	java/awt/Scrollbar.java, java/awt/ScrollPaneAdjustable.java,
+ 	java/awt/ScrollPane.java, java/awt/Shape.java,
+ 	java/awt/SystemColor.java, java/awt/TextArea.java,
+ 	java/awt/TextComponent.java, java/awt/TextField.java,
+ 	java/awt/Toolkit.java, java/awt/Window.java,
+ 	native/gnu.java.awt.image/gdkpixbufdecoder.c,
+ 	native/jni/gtk-peer/gnu_java_awt_image_GdkPixbufDecoder.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,
+ 	native/jni/gtk-peer/gthread-jni.c,
+ 	native/jni/gtk-peer/gthread-jni.h,
+ 	native/jni/gtk-peer/gtkpeer.h,
+ 	vm/reference/gnu/vm/stack/StackFrame.java,
+ 	vm/reference/gnu/vm/stack/StackTrace.java,
+ 	vm/reference/java/lang/Class.java, vm/reference/java/lang/Runtime.java,
+ 	vm/reference/java/lang/Thread.java,
+ 	vm/reference/java/lang/VMClassLoader.java,
+ 	vm/reference/java/lang/VMObject.java,
+ 	vm/reference/java/lang/VMSecurityManager.java,
+ 	vm/reference/java/lang/VMSystem.java: Update copyright notice.
+ 	COPYING.LIB, projects/swing/COPYING.LIB: Removed.
+ 	
+ 2002-01-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/DatagramSocket.java: reindent to prepare for libgcj merge
+ 
+ 2002-01-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/InetAddress.java (ANY_IF): new field.
+ 	* java/net/Socket.java: Merge with libgcj.
+ 	* java/net/ServerSocket.java: Likewise.
+ 
+ 2002-01-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/rmi/rmic/RMIC.java (parseOptions): Handle --help and
+ 	--version.  Recognize GNU-style long options.  Print GNU-style
+ 	error messages.
+ 	(usage): Print GNU-style help.  Exit with status 0.
+ 	(error): New method.
+ 	(run): Print error message if no class names found.
+ 	(main): Don't print usage on error.
+ 
+ 2002-01-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/locale/LocaleInformation.java: Extend
+ 	LocaleInformation_en.
+ 	* gnu/java/locale/LocaleInformation_en.java: Added zone strings
+ 	and time/date formats.
+ 	* gnu/java/locale/LocaleInformation_en_US.java: Now automatically
+ 	generated.
+ 	* gnu/java/locale/LocaleInformation_af_ZA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_AE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_BH.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_DZ.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_EG.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_IN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_IQ.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_JO.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_KW.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_LB.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_LY.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_MA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_OM.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_QA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_SD.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_SY.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_TN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ar_YE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_be_BY.java: New file.
+ 	* gnu/java/locale/LocaleInformation_bn_IN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_br_FR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_bs_BA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ca_ES.java: New file.
+ 	* gnu/java/locale/LocaleInformation_cs_CZ.java: New file.
+ 	* gnu/java/locale/LocaleInformation_cy_GB.java: New file.
+ 	* gnu/java/locale/LocaleInformation_da_DK.java: New file.
+ 	* gnu/java/locale/LocaleInformation_de_AT.java: New file.
+ 	* gnu/java/locale/LocaleInformation_de_BE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_de_CH.java: New file.
+ 	* gnu/java/locale/LocaleInformation_de_DE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_de_LU.java: New file.
+ 	* gnu/java/locale/LocaleInformation_el_GR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_AU.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_BW.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_CA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_DK.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_GB.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_HK.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_IE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_IN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_NZ.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_PH.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_SG.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_ZA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_en_ZW.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_AR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_BO.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_CL.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_CO.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_CR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_DO.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_EC.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_ES.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_GT.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_HN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_MX.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_NI.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_PA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_PE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_PR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_PY.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_SV.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_US.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_UY.java: New file.
+ 	* gnu/java/locale/LocaleInformation_es_VE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_et_EE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_eu_ES.java: New file.
+ 	* gnu/java/locale/LocaleInformation_fa_IR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_fi_FI.java: New file.
+ 	* gnu/java/locale/LocaleInformation_fo_FO.java: New file.
+ 	* gnu/java/locale/LocaleInformation_fr_BE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_fr_CA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_fr_CH.java: New file.
+ 	* gnu/java/locale/LocaleInformation_fr_FR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_fr_LU.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ga_IE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_gd_GB.java: New file.
+ 	* gnu/java/locale/LocaleInformation_gl_ES.java: New file.
+ 	* gnu/java/locale/LocaleInformation_gv_GB.java: New file.
+ 	* gnu/java/locale/LocaleInformation_he_IL.java: New file.
+ 	* gnu/java/locale/LocaleInformation_hi_IN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_hr_HR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_hu_HU.java: New file.
+ 	* gnu/java/locale/LocaleInformation_id_ID.java: New file.
+ 	* gnu/java/locale/LocaleInformation_it_CH.java: New file.
+ 	* gnu/java/locale/LocaleInformation_it_IT.java: New file.
+ 	* gnu/java/locale/LocaleInformation_iw_IL.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ja_JP.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ka_GE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_kl_GL.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ko_KR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_kw_GB.java: New file.
+ 	* gnu/java/locale/LocaleInformation_lt_LT.java: New file.
+ 	* gnu/java/locale/LocaleInformation_lv_LV.java: New file.
+ 	* gnu/java/locale/LocaleInformation_mi_NZ.java: New file.
+ 	* gnu/java/locale/LocaleInformation_mk_MK.java: New file.
+ 	* gnu/java/locale/LocaleInformation_mr_IN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_mt_MT.java: New file.
+ 	* gnu/java/locale/LocaleInformation_nl_BE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_nl_NL.java: New file.
+ 	* gnu/java/locale/LocaleInformation_nn_NO.java: New file.
+ 	* gnu/java/locale/LocaleInformation_no_NO.java: New file.
+ 	* gnu/java/locale/LocaleInformation_oc_FR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_pl_PL.java: New file.
+ 	* gnu/java/locale/LocaleInformation_pt_BR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_pt_PT.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ro_RO.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ru_RU.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ru_UA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_se_NO.java: New file.
+ 	* gnu/java/locale/LocaleInformation_sk_SK.java: New file.
+ 	* gnu/java/locale/LocaleInformation_sl_SI.java: New file.
+ 	* gnu/java/locale/LocaleInformation_sq_AL.java: New file.
+ 	* gnu/java/locale/LocaleInformation_sr_YU.java: New file.
+ 	* gnu/java/locale/LocaleInformation_sv_FI.java: New file.
+ 	* gnu/java/locale/LocaleInformation_sv_SE.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ta_IN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_te_IN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_tg_TJ.java: New file.
+ 	* gnu/java/locale/LocaleInformation_tl_PH.java: New file.
+ 	* gnu/java/locale/LocaleInformation_tr_TR.java: New file.
+ 	* gnu/java/locale/LocaleInformation_uk_UA.java: New file.
+ 	* gnu/java/locale/LocaleInformation_ur_PK.java: New file.
+ 	* gnu/java/locale/LocaleInformation_uz_UZ.java: New file.
+ 	* gnu/java/locale/LocaleInformation_vi_VN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_yi_US.java: New file.
+ 	* gnu/java/locale/LocaleInformation_zh_CN.java: New file.
+ 	* gnu/java/locale/LocaleInformation_zh_HK.java: New file.
+ 	* gnu/java/locale/LocaleInformation_zh_SG.java: New file.
+ 	* gnu/java/locale/LocaleInformation_zh_TW.java: New file.
+ 	* gnu/java/locale/Makefile.am (EXTRA_DIST): Added new files.
+ 
+ 2001-01-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/System.java (insertGNUProperties): Add standard character
+ 	encoding aliases.
+ 
+ 2001-12-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectInputStream.java (enableResolveObject): Use
+ 	correct security check.
+ 	* java/io/ObjectOutputStream.java (enableReplaceObject): Use
+ 	correct security check.
+ 
+ 2001-12-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/math/BigInteger.java: Import gnu.java.math.*.
+ 	* gnu/java/math/MPN.java: New file, from ...
+ 	* gnu/classpath/math/MPN.java: ... here.  Deleted.
+ 
+ 	* java/math/BigInteger.java: Corrected copyright dates.
+ 
+ 2001-12-16  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/io/DataOutputStream (write (byte[], int, int)): Update 
+ 	"written" correctly. Fix from the ORP team.
+ 
+ 2001-12-15  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/BitSet.java (and): Fix off-by-one bug, don't skip part of
+ 	the bitset.
+ 	(andNot): Likewise.
+ 	(xor): Likewise.
+ 
+ 2001-12-14  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: blockquote special exception. fix 
+ 	cvs directions.
+ 
+ 2001-12-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectInputStream.java (readObject): Fixed typo.
+ 
+ 2001-12-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ThreadGroup.java (uncaughtException): Print message to
+ 	System.err.  Required by spec.
+ 
+ 2001-11-27  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* resource/orp-1.0.8.patch: new file
+ 	* doc/www.gnu.org/home.wml: added link to ORP doc
+ 	* doc/www.gnu.org/doc/orp.wml: simple directions for using 
+ 	ORP+Classpath
+ 
+ 2001-11-25  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* java/net/DatagramSocket (getLocalAddress): return local address
+ 	used in creating socket instead of calling a native method to retrieve
+ 	a value that cannot be changed (fixes Mauve regression).
+ 	* native/jni/classpath/jcl.h: #include <config.h> for definition 
+ 	of DEBUG
+ 	* native/jni/java-net/java_net_PlainDatagramSocketImpl.c: Added 
+ 	more checks for exceptions thrown from use of JNI functions to all
+ 	methods (fixes Mauve regression).
+ 	Debug messages cleaned up.
+ 	* native/jni/java-net/javanet.c: ditto
+ 	* native/jni/java-io/javaio.c: _javaio_ThrowException changed to 
+ 	JCL_ThrowException
+ 	* mauve-classpath: updated and can be used with ORP (158 of 1943 tests
+ 	fail)
+ 
+ 2001-11-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/math/BigDecimal.java (BigDecimal(double)): Rewrote.
+ 	(BigDecimal(String)): Likewise.
+ 
+ 2001-11-25  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/LinkedList.java (LinkedListItr.add): Don't skip the next
+ 	entry.
+ 
+ 2001-11-23  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/TreeMap.java (removeNode): Fix bug in node removal.
+ 
+ 2001-11-23  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/AbstractCollection.java (containsAll): Use size of the
+ 	correct collection for loop bound.
+ 	* java/util/AbstractList.java (iterator.next): Increment pos after
+ 	calling get on backing list.
+ 	(listIterator.next): Likewise.
+ 	* java/util/LinkedList.java (addLastEntry): Don't increment size before
+ 	checking for size == 0.
+ 	(addFirstEntry): Rearrange to match addLastEntry.
+ 	(add): Do not increment size before inserting the new entry.
+ 
+ 	* java/util/AbstractCollection.java (addAll): Use size of the
+ 	correct collection for loop bound.
+ 
+ 2001-11-18  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/AbstractSet.java (removeAll): Fix scoping thinko.
+ 	* java/util/HashMap.java (putAllInternal): Set size here.
+ 	* java/util/Hashtable.java (putAllInternal): New method. Copy contents
+ 	of a map efficiently without calling put() or putAll().
+ 	(Hashtable (map)): Use putAllInternal.
+ 	(clone): Likewise.
+ 
+ 2001-11-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Timer.java (TaskQueue.isStopped): Remove method.
+ 	(Scheduler.run): Try to re-schedule task and ignore exception
+ 	if queue has been stopped.
+ 
+ 2001-11-15  C. Brian Jones
+ 	* native/jni/java-lang/java_lang_Double.c (parseDouble): Throw 
+ 	NullPointerException if the String argument is null.
+ 	* java/lang/Double.java (valueOf): Reverse previously applied 
+ 	patch to throw NullPointerException.
+ 	* java/lang/Integer.java (parseInt): Throw NumberFormatException
+ 	explicitly in the case of a null argument in keeping with JDK 1.3.
+ 
+ 2001-11-14  C. Brian Jones
+ 	
+ 	* java/lang/Integer.java (getInteger): Attempt to decode the value
+ 	of the system property instead of the name of the system property.
+ 	* java/lang/Double.java (valueOf): Throw NullPointerException
+ 	explicitly in the case of a null argument in keeping with JDK 1.3.
+ 
+ 2001-11-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Double.java (parseDouble): Now native.
+ 	(parseDouble0): Removed.
+ 	* native/jni/java-lang/java_lang_Double.c
+ 	(Java_java_lang_Double_parseDouble): Renamed.  Rewrote to trim
+ 	String internally.  Free the UTF buffer at end.
+ 
+ 2001-11-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/Timer.java (TaskQueue.isStopped): New method.
+ 	(Scheduler.run): Don't re-schedule task if queue has been
+ 	stopped.
+ 
+ 2001-11-12  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* native/jni/java-lang/java_lang_Double.c (parseDouble0): 
+ 	handle 'f', 'F', 'd', 'D' per JLS 3.10.2, fixes problems found using
+ 	Mauve
+ 
+ 2001-11-12  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* native/jni/java-io/javaio.c (_javaio_open): use 
+ 	JCL_jstring_to_cstring instead of old undefined method
+ 	* acconfig.h: changed #define DEBUG 0 to #undef DEBUG to match
+ 	current usage in C source
+ 	* native/jni/java-lang/java_lang_Double.c: isNaNID, 
+ 	NEGATIVE_INFINITY, POSITIVE_INFINITY all made static
+ 	(initIDs): add debugging aids
+ 	(toString): add debugging aids; compare value and POSITIVE_INFINITY
+ 	directly to fix bug found using Mauve
+ 
+ 2001-11-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/Makefile: Make it work with GNU sed 3.02 and
+ 	texi2html 1.65
+ 
+ 2001-11-11  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* native/jni/java-io/Makefile.am: missing javaio.c, javaio.h in 
+ 	libjavaio
+ 
+ 2001-11-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/vmintegration.texinfo: Add gcj, kissme and small explanation of
+ 	VMObject, VMClassLoader, VMSystem and VMSecurityManager
+ 	* java/lang/Boolean.java (TYPE): VMClassLoader.getPrimitiveClass(char)
+ 	* java/lang/Byte.java (TYPE): Likewise
+ 	* java/lang/Character.java (TYPE): Likewise
+ 	* java/lang/Double.java (TYPE): Likewise
+ 	* java/lang/Float.java (TYPE): Likewise
+ 	* java/lang/Integer.java (TYPE): Likewise
+ 	* java/lang/Long.java (TYPE): Likewise
+ 	* java/lang/Short.java (TYPE): Likewise
+ 	* java/lang/Void.java (TYPE): Likewise
+ 	* vm/reference/java/lang/VMClassLoader.java (getPrimitiveClass(char)):
+ 	new method
+ 
+ 2001-11-06  Joseph S. Myers  <jsm28@cam.ac.uk>
+ 
+ 	* java/io/ByteArrayOutputStream.java,
+ 	java/io/CharConversionException.java,
+ 	java/io/PipedInputStream.java, java/io/PipedReader.java,
+ 	java/io/PrintWriter.java, java/io/WriteAbortedException.java,
+ 	java/net/BindException.java, java/net/ConnectException.java,
+ 	java/net/ProtocolException.java, java/net/SocketException.java,
+ 	java/net/UnknownServiceException.java,
+ 	java/security/SecureRandom.java, java/security/SignedObject.java,
+ 	java/security/cert/X509Certificate.java,
+ 	java/security/interfaces/DSAKey.java,
+ 	java/sql/DatabaseMetaData.java,
+ 	java/text/DecimalFormatSymbols.java, java/util/Calendar.java,
+ 	java/util/GregorianCalendar.java, java/util/Properties.java,
+ 	java/util/Timer.java, java/util/jar/Attributes.java,
+ 	java/util/jar/JarEntry.java, java/util/jar/JarInputStream.java,
+ 	java/util/jar/JarOutputStream.java: Fix spelling errors.
+ 
+ 2001-11-05  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: changed AC_CANONICAL_SYSTEM to AC_CANONICAL_TARGET.
+ 	Modify usage of target_vendor to target_cpu to link jni_md.h.
+ 	Modify target_cpu to be x86 where it matches regex .*86.
+ 	Modify target_cpu and target_os to be x86 and linux-gnu where 
+ 	jni_md-$target_cpu-$target_os.h does not exist and print a warning.
+ 	* include/jni_md-pc-linux-gnu.h: renamed include/jni_md-x86-linux-gnu.h
+ 
+ 2001-11-05  John Leuner  <jewel@debian.org>
+ 
+ 	* java/awt/Window.java: sets is_notified flag
+ 	* java/awt/Container.java: added debug message
+ 	added is_notified flag
+ 	* java/awt/Component.java: added check for null peer
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: changed debug message
+ 	to print class
+ 
+ 2001-11-4  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* THANKYOU: added Fred Gray
+ 
+ 2001-11-4   Fred Gray <fegray@npl.uiuc.edu>
+ 
+ 	* java/util/ResourceBundle.java: add static modifier to class Security
+ 
+ 2001-11-04  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* native/jni/awt: renamed native/jni/gtk-peer
+ 	* native/jni/javaio.h: moved to native/jni/java-io
+ 	* native/jni/javaio.c: moved to native/jni/java-io
+ 	* native/jni/java_io_File.c: moved to native/jni/java-io
+ 	* native/jni/java_io_FileDescriptor.c: moved to native/jni/java-io
+ 	* native/jni/java_io_FileInputStream.c: moved to native/jni/java-io
+ 	* native/jni/java_io_FileOutputStream.c: moved to native/jni/java-io
+ 	* native/jni/java_io_ObjectInputStream.c: moved to native/jni/java-io
+ 	* native/jni/java_io_ObjectOutputStream.c: moved to native/jni/java-io
+ 	* native/jni/java_io_RandomAccessFile.c: moved to native/jni/java-io
+ 	* native/jni/javalang.h: moved to native/jni/java-lang
+ 	* native/jni/javalang.c: moved to native/jni/java-lang
+ 	* native/jni/java_lang_Double.c: moved to native/jni/java-lang
+ 	* native/jni/java_lang_Float.c: moved to native/jni/java-lang
+ 	* native/jni/java_lang_Object.c: moved to native/jni/java-lang
+ 	* native/jni/java_lang_System.c: moved to native/jni/java-lang
+ 	* native/jni/java_lang_reflect_Array.c: moved to native/jni/java-lang
+ 	* native/jni/javanet.h: moved to native/jni/java-net
+ 	* native/jni/javanet.c: moved to native/jni/java-net
+ 	* native/jni/java_net_InetAddress.c: moved to native/jni/java-net
+ 	* native/jni/java_net_PlainDatagramSocketImpl.c: moved to 
+ 	native/jni/java-net
+ 	* native/jni/java_net_PlainSocketImpl.c: moved to native/jni/java-net
+ 	* native/jni/java_util_ResourceBundle.c: moved to native/jni/java-util
+ 	* native/jni/java_util_TimeZone.c: moved to native/jni/java-util
+ 	* native/jni/ieeefp.h: moved to native/jni/mprec
+ 	* native/jni/java-assert.h: moved to native/jni/mprec
+ 	* native/jni/mprec.c: moved to native/jni/mprec
+ 	* native/jni/mprec.h: moved to native/jni/mprec
+ 	* native/jni/acos.c: removed
+ 	* native/jni/asin.c: removed
+ 	* native/jni/atan2.c: removed
+ 	* native/jni/atan.c: removed
+ 	* native/jni/ceil.c: removed
+ 	* native/jni/cos.c: removed
+ 	* native/jni/dtoa.c: removed
+ 	* native/jni/e_fmod.c: removed
+ 	* native/jni/exp.c: removed
+ 	* native/jni/floor.c: removed
+ 	* native/jni/jcl.c: removed
+ 	* native/jni/jcl.h: removed
+ 	* native/jni/k_cos.c: removed
+ 	* native/jni/k_rem_pio2.c: removed
+ 	* native/jni/k_sin.c: removed
+ 	* native/jni/k_tan.c: removed
+ 	* native/jni/log.c: removed
+ 	* native/jni/pow.c: removed
+ 	* native/jni/remainder.c: removed
+ 	* native/jni/rint.c: removed
+ 	* native/jni/s_fabs.c: removed
+ 	* native/jni/sin.c: removed
+ 	* native/jni/sqrt.c: removed
+ 	* native/jni/tan.c: removed
+ 	* native/jni/fdlibm.h: removed
+ 	* native/jni/java_math_BigInteger.c: no longer needed
+ 	* native/fdlibm/dtoa.c: added from gcj to sync sources
+ 	* native/fdlibm/e_acos.c: added from gcj to sync sources
+ 	* native/fdlibm/e_asin.c: added from gcj to sync sources
+ 	* native/fdlibm/e_atan2.c: added from gcj to sync sources
+ 	* native/fdlibm/e_exp.c: added from gcj to sync sources
+ 	* native/fdlibm/e_fmod.c: added from gcj to sync sources
+ 	* native/fdlibm/e_log.c: added from gcj to sync sources
+ 	* native/fdlibm/e_pow.c: added from gcj to sync sources
+ 	* native/fdlibm/e_remainder.c: added from gcj to sync sources
+ 	* native/fdlibm/e_rem_pio2.c: added from gcj to sync sources
+ 	* native/fdlibm/e_scalb.c: added from gcj to sync sources
+ 	* native/fdlibm/e_sqrt.c: added from gcj to sync sources
+ 	* native/fdlibm/fdlibm.h: added from gcj to sync sources
+ 	* native/fdlibm/ieeefp.h: added from gcj to sync sources
+ 	* native/fdlibm/java-assert.h: added from gcj to sync sources
+ 	* native/fdlibm/k_cos.c: added from gcj to sync sources
+ 	* native/fdlibm/k_rem_pio2.c: added from gcj to sync sources
+ 	* native/fdlibm/k_sin.c: added from gcj to sync sources
+ 	* native/fdlibm/k_tan.c: added from gcj to sync sources
+ 	* native/fdlibm/mprec.c: added from gcj to sync sources
+ 	* native/fdlibm/mprec.h: added from gcj to sync sources
+ 	* native/fdlibm/s_atan.c: added from gcj to sync sources
+ 	* native/fdlibm/s_ceil.c: added from gcj to sync sources
+ 	* native/fdlibm/s_copysign.c: added from gcj to sync sources
+ 	* native/fdlibm/s_cos.c: added from gcj to sync sources
+ 	* native/fdlibm/s_fabs.c: added from gcj to sync sources
+ 	* native/fdlibm/sf_fabs.c: added from gcj to sync sources
+ 	* native/fdlibm/s_floor.c: added from gcj to sync sources
+ 	* native/fdlibm/sf_rint.c: added from gcj to sync sources
+ 	* native/fdlibm/s_rint.c: added from gcj to sync sources
+ 	* native/fdlibm/s_scalbn.c: added from gcj to sync sources
+ 	* native/fdlibm/s_sin.c: added from gcj to sync sources
+ 	* native/fdlibm/s_tan.c: added from gcj to sync sources
+ 	* native/fdlibm/strtod.c: added from gcj to sync sources
+ 	* native/fdlibm/w_acos.c: added from gcj to sync sources
+ 	* native/fdlibm/w_asin.c: added from gcj to sync sources
+ 	* native/fdlibm/w_atan2.c: added from gcj to sync sources
+ 	* native/fdlibm/w_exp.c: added from gcj to sync sources
+ 	* native/fdlibm/w_fmod.c: added from gcj to sync sources
+ 	* native/fdlibm/w_log.c: added from gcj to sync sources
+ 	* native/fdlibm/w_pow.c: added from gcj to sync sources
+ 	* native/fdlibm/w_remainder.c: added from gcj to sync sources
+ 	* native/fdlibm/w_sqrt.c: added from gcj to sync sources
+ 	* native/fdlibm/.cvsignore: new file
+ 	* native/jni/gtk-peer/Makefile.am: added -module to LDFLAGS
+ 	* native/jni/java-io/Makefile.am: added -module to LDFLAGS
+ 	* native/jni/java-io/.cvsignore: new file
+ 	* native/jni/java-lang/Makefile.am: added -module to LDFLAGS
+ 	* native/jni/java-lang/.cvsignore: new file
+ 	* native/jni/java-net/Makefile.am: added -module to LDFLAGS
+ 	* native/jni/java-net/.cvsignore: new file
+ 	* native/jni/java-util/Makefile.am: added -module to LDFLAGS
+ 	* native/jni/java-util/.cvsignore: new file
+ 	* native/fdlibm/Makefile.am: added -module to LDFLAGS
+ 	* native/jni/Makefile.am: removed rules, SUBDIRS equals java-io,
+ 	java-lang, java-net, java-util, gtk-peer
+ 	* native/Makefile.am: prepended fdlibm to SUBDIRS
+ 	* java/lang/Math.java static(): load libjavalang.so instead of
+ 	libjavalangmath.so
+ 	* java/math/BigInteger.java: replaced our native version with 
+ 	pure Java implementation from gcj
+ 	* gnu/classpath/math: new directory
+ 	* gnu/classpath/math/MPN.java: new file from gcj, which came from Kawa,
+ 	and is included with permission from Per Bothner, the author.
+ 	* README: updated with current information about CVS and the
+ 	project
+ 	* THANKYOU: added Per Bothner
+ 	* TODO: updated with current information as I know it
+ 	* NEWS: updated with information about a 0.03 release
+ 	* HACKING: updated with new information
+ 	* INSTALL: updated with new information
+ 	* BUGS: added link to Savannah bug reporting page for the project
+ 	* ltconfig: removed due to upgrade of libtool to 1.4.2
+ 	* ltmain.sh: updated with libtool 1.4.2
+ 	* depcomp: new file from automake 1.5 upgrade
+ 	* configure.in: added to OUTPUT native/fdlibm/Makefile, 
+ 	native/jni/java-io/Makefile, native/jni/java-lang/Makefile, 
+ 	native/jni/java-net/Makefile, native/jni/java-util/Makefile, 
+ 	native/jni/gtk-peer/Makefile
+ 	* install.sh: updated
+ 	* missing: updated
+ 	* mkinstalldirs: updated
+ 	* native/lib/Makefile.am: INCLUDES += changed to just INCLUDES = to
+ 	avoid automake warning
+ 	* native/lib/jcl.h: removed TRUE/FALSE #defines, added DBG
+ 	* native/nsa/: removed, files native_state.* moved to native/lib
+ 	* native/lib: renamed native/jni/classpath
+ 	* native/cni/Makefile.am: new file
+ 	* native/cni/.cvsignore: new file
+ 	* native/jni/gtk-peer/Makefile.am: LIBADD used to get native_state from
+ 	a common location
+ 	* native/jni/java-io/Makefile.am: LIBADD used to get jcl from a
+ 	common location, source modified to use relevant JCL_* functions
+ 	* native/jni/java-lang/Makefile.am: LIBADD used to get jcl from a 
+ 	common location
+ 	* native/jni/java-net/Makefile.am: LIBADD used to get jcl from a common
+ 	location, source modified to use relevant JCL_* functions
+ 	* vm/reference/java/lang/Thread.java (Thread): wrongly marked private
+ 	constructor Thread (ThreadGroup, String) now public
+ 	* native/jni/java-util/java_util_ResourceBundle.c: removed file
+ 	* native/jni/java-util/Makefile.am: removed java_util_ResourceBundle.c
+ 	from library
+ 
+ 2001-11-04  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/ResourceBundle.java (getClassContext): Removed.
+ 	(Security): New class, extends SecurityManger.
+ 	(getBundle): Use Security.getCallingClassLoader instead of
+ 	getClassContext.
+ 	* native/jni/java_util_ResourceBundle.c: Removed.
+ 	* native/jni/Makefile.am: Updated.
+ 
+ 2001-10-30  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/Collections.java:
+ 	* java/util/Vector.java:
+ 	* java/util/WeakHashMap.java: Fix spelling errors.
+ 
+ 2001-10-27  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* include/jni.h.in: added largely from gcj with edits based on 
+ 	published specification in ISBN 0-201-32557-2, sablepath-0.1.7,
+ 	and Japhar.
+ 	* include/jni_md-pc-gnu-linux.h: new file
+ 
+ 2001-10-27  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/text/.cvsignore: new file
+ 	* lib/.cvsignore: added com
+ 	* acinclude.m4: renamed CLASSPATH_INTERNAL_CHECK_JAPHAR to 
+ 	CLASSPATH_CHECK_JAPHAR
+ 	renamed CLASSPATH_INTERNAL_CHECK_KAFFE to CLASSPATH_CHECK_KAFFE
+ 	renamed CLASSPATH_CHECK_JAPHAR to CLASSPATH_WITH_JAPHAR
+ 	renamed CLASSPATH_CHECK_KAFFE to CLASSPATH_WITH_KAFFE
+ 	added CLASSPATH_FIND_JAVAC and supporting functions re-arranged,
+ 	support for gcj added
+ 	added CLASSPATH_FIND_JAVA and supporting functions
+ 	added CLASSPATH_WITH_JAVAH and supporting functions
+ 	added CLASSPATH_WITH_CLASSLIB
+ 	added CLASSPATH_WITH_INCLUDEDIR
+ 	* configure.in: use AC_CANONICAL_SYSTEM instead of AC_CANONICAL_HOST
+ 	version changed to 0.03
+ 	added --enable-java (always by default)
+ 	added --enable-jni (not built by default)
+ 	added --enable-cni (not built by default, currently not implemented)
+ 	added automake conditional CREATE_JNI_HEADERS, if true then build 
+ 	JNI headers
+ 	added automake conditional CREATE_JNI_LIBRARIES, if true then build 
+ 	JNI native libraries
+ 	added automake conditional CREATE_CNI_LIBRARIES, if true then build
+ 	CNI native libraries, currently not implemented
+ 	moved checks related to building JNI libraries so they are avoided
+ 	when not building JNI libraries
+ 	added AC_CYGWIN and AC_MINGW32 tests when building JNI libraries
+ 	removed JVM specific checks
+ 	moved --with-java, --with-javah, --with-classlib, --with-includedir
+ 	macros to acinclude.m4
+ 	removed --enable-developer-mode
+ 	added macro call to link jni_md.h
+ 	added jni.h to OUTPUT to place it in ${top_builddir}/include easily
+ 	handled INIT_LOAD_LIBRARY appropriately when --enable-cni is used
+ 	* lib/Makefile.am: centralized definition of configured variables
+ 	remove Sun's javac cruft
+ 	simply definition of various tool argument definitions
+ 	added gcj support
+ 	avoid creating JNI headers unless --enable-jni used with configure
+ 	fixup maintainer clean target
+ 	* lib/genclasslist.sh.in: added com, avoid duplicates when top_srcdir
+ 	equals top_builddir, causes gcj problems otherwise
+ 	* native/Makefile.am: redefine subdirs in terms of --enable-jni or
+ 	--enable-cni
+ 	* native/jni/Makefile.am: removed JVM specific rules
+ 	* native/jni/fdlibm.h: include stdlib.h (for NULL)
+ 	* native/jni/java_lang_System.c: include stdlib.h (for NULL)
+ 	* native/jni/awt/Makefile.am: removed JVM specific rules
+ 	* native/lib/Makefile.am: removed JVM specific rules
+ 	* vm/Makefile.am: removed JVM specific SUBDIRS definition
+ 
+ 2001-10-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/standard.omit: DataFlavor.java and AWTEvent.java should and
+ 	must be compiled by default
+ 
+ 2001-10-25  John Leuner  <jewel@debian.org>
+ 
+ 	* lib/jazzlib/index.html: Added this directory.
+ 	Added the html file for the jazzlib project.
+ 	Moved the dist generation script to this directory.
+ 	Changed the dist generation script to generate files
+ 	in the java.util.zip and net.sf.jazzlib namespaces.
+ 
+ 2001-10-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/reflect/Proxy.java (getProxyClass):
+ 	Workaround for bug in gcj
+ 	* java/util/TreeMap.java (TreeIterator (int)): likewise
+ 
+ 2001-10-25  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/AbstractCollection.java (removeAllInternal),
+ 	(retainAllInternal): Add hooks for use by ArrayList.
+ 	* java/util/AbstractList.java: Minor code updates. Fix some
+ 	scoping.
+ 	* java/util/AbstractMap.java: ditto
+ 	* java/util/ArrayList.java (readObject, writeObject): ditto
+ 	(removeAllInternal, retainAllInternal): Optimize.
+ 	* java/util/Arrays.java: ditto
+ 	* java/util/Collections.java: ditto. Change order of parameters
+ 	to equals(Object, Object) to match specs.
+ 	* java/util/Dictionary.java: Improve javadoc.
+ 	(Dictionary): Add explicit constructor.
+ 	* java/util/HashMap.java: Improve javadoc. Rearrange methods to
+ 	follow order in JDK. Cleanups related to recent code migration to
+ 	AbstractMap. Fix some scoping.
+ 	(entrySet): Cache the result.
+ 	(modCount): Ensure that this is updated correctly.
+ 	* java/util/HashSet.java: Improve javadoc. Fix some scoping.
+ 	(init): Add hooks for LinkedHashSet.
+ 	(map): Use "" instead of Boolean.TRUE in backing map. Use
+ 	package-private API where possible for less overhead.
+ 	(readObject, writeObject): Fix serialization.
+ 	* java/util/Hashtable.java: Improve javadoc. Fix some scoping.
+ 	(entrySet, keySet, values): Cache the result.
+ 	(modCount): Ensure that this is updated correctly.
+ 	(contains, remove): Fix NullPointer checking to match specs.
+ 	(class Enumeration): Make more like HashIterator.
+ 	* java/util/IdentityHashMap.java: Minor code updates.
+ 	(modCount): Ensure that this is updated correctly.
+ 	(readObject, writeObject): Fix serialization.
+ 	* java/util/LinkedHashMap.java: Minor code updates. Cleanups
+ 	related to recent code migration to AbstractMap.
+ 	* java/util/LinkedHashSet.java: New file.
+ 	* java/util/LinkedList.java:
+ 	(readObject, writeObject): Fix serialization.
+ 	* java/util/Makefile.am: List recently added files.
+ 	* java/util/Stack.java: Minor code updates.
+ 	* java/util/TreeMap.java: Improve javadoc. Overhaul the class to
+ 	be more efficient. Fix some scoping. Rearrange the methods.
+ 	(nil): Ensure that this can be thread-safe, and make it a static
+ 	final. Initialize it to be more useful as a sentinal node.
+ 	(Node): Specify color in constructor.
+ 	(deleteFixup, insertFixup): Improve comments and algorithm.
+ 	(fabricateTree): Redesign with less overhead.
+ 	(lowestGreaterThan): Add parameter first to make SubMap easier.
+ 	(removeNode): Patch hole where nil was being modified. Choose
+ 	predecessor instead of successor so in-place swap works.
+ 	(class VerifyResult, verifyTree, verifySub, verifyError): Remove
+ 	this dead code after verifying the class works.
+ 	(class SubMap): Rewrite several algorithms to avoid problems with
+ 	comparing nil.
+ 	* java/util/TreeSet.java: Improve javadoc. Fix some scoping.
+ 	(clone): Fix ClassCastException when cloning subSet().
+ 	(readObject, writeObject): Fix serialization.
+ 	* java/util/WeakHashMap.java: Improve javadoc. Fix some scoping.
+ 	(NULL_KEY): Make it compare as null, for ease elsewhere.
+ 	(Class WeakEntry): Rename from Entry, to avoid shadowing
+ 	Map.Entry. Add missing toString.
+ 	(modCount): Ensure that this is updated correctly.
+ 	(clear, containsValue, keySet, putAll, values, WeakHashMap(Map)):
+ 	Add missing methods and constructor.
+ 
+ 2001-10-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/sql/Types.java (Types): New constructor.
+ 
+ 2001-10-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/PropertyResourceBundle.java (handleGetObject): Now
+ 	public.
+ 	* java/util/ListResourceBundle.java (handleGetObject): Now public
+ 	and final, per spec.
+ 
+ 2001-10-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/BufferedWriter.java (localFlush): Don't synchronize.
+ 
+ 2001-10-23  John Leuner  <jewel@debian.org>
+ 
+ 	* lib/makeJazzlibDist.sh: Added this script to make a jazzlib 
+ 	distribution from the java.util.zip files. It changes the 
+ 	package header to net.sf.jazzlib and makes a source and binary
+ 	file. This is not to be used by any classpath build infrastructure
+ 	, it's only there to make snapshots of the pure java zip code.
+ 
+ 2001-10-23  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/io/BufferedWriter (write (String, int, int)): Remove redundant 
+ 	bounds checks.
+ 	(write (char[], int, int)): Likewise.
+ 
+ 2001-10-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/GregorianCalendar.java (getGregorianChange): Removed
+ 	`date' argument.
+ 
+ 2001-10-21  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/ArrayList.java (checkBoundExclusive),
+ 	(checkBoundInclusive): Rename from range??clusive, to match
+ 	AbstractList.
+ 	* java/util/LinkedList.java (checkBoundsExclusive),
+ 	(checkBoundsInclusive): ditto
+ 	* java/util/Vector.java (checkBoundExclusive),
+ 	(checkBoundInclusive): Move bounds checking into common methods.
+ 
+ 2001-10-21  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/AbstractList.java:
+ 	(modCount): Make sure it is updated in all needed places.
+ 	* java/util/ArrayList.java: Improve javadoc. Implements
+ 	RandomAccess. Add serialVersionUID. Reorder methods.
+ 	(modCount): Make sure it is updated in all needed places.
+ 	(rangeExclusive, rangeInclusive): Add common methods for bounds
+ 	check.
+ 	(isEmpty): Add missing method.
+ 	* java/util/Collections.java: (class SynchronizedList): Make
+ 	package visible.
+ 	* java/util/ConcurrentModificationException.java: Improve
+ 	javadoc.
+ 	* java/util/EmptyStackException.java: Improve javadoc.
+ 	* java/util/LinkedList.java: Improve javadoc.
+ 	(modCount): Make sure it is updated in all needed places.
+ 	(rangeExclusive, rangeInclusive): Add common methods for bounds
+ 	check.
+ 	* java/util/NoSuchElementException.java: Improve javadoc.
+ 	* java/util/Stack.java: Improve javadoc. Fix synchronization
+ 	issues.
+ 	(modCount): Make sure it is updated in all needed places.
+ 	* java/util/Vector.java: Improve javadoc. Fix synchronization
+ 	issues. Implements RandomAccess. Reorder methods.
+ 	(modCount): Make sure it is updated in all needed places.
+ 	(setSize): Fix according to specifications: this does not dictate
+ 	the backing array size.
+ 	(removeAll, retainAll): Faster implementations.
+ 
+ 2001-10-20  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/reflect/AccessibleObject.java: Improve javadoc.
+ 	(secureSetAccessible): Add method to perform check for
+ 	Class Constructors and AccessibleObject accessors.
+ 	* java/lang/reflect/Array.java: Reindent and comment, add
+ 	necessary exception checking throughout.
+ 	(newInstance): Check for Object[] first, not last.
+ 	(getLength): Implement in Java, rather than native.
+ 	(objectClass): Remove dead code.
+ 	(createMultiArray): Rename from createDimensionedArray.
+ 	* java/lang/reflect/InvocationHandler.java: New file.
+ 	* java/lang/reflect/InvocationTargetException.java: Reindent and
+ 	comment.
+ 	(printStackTrace): Remove, in anticipation of 1.4 compatibility.
+ 	(getCause): Add, in anticipation of 1.4 compatibility.
+ 	(serialVersionUID): Make private.
+ 	* java/lang/reflect/Makefile.am: Update for new files.
+ 	* java/lang/reflect/Member.java: Reindent and comment.
+ 	* java/lang/reflect/Modifier.java: Improve javadoc.
+ 	(toString(int, StringBuffer)): Strip final space only if the
+ 	buffer was modified.
+ 	* java/lang/reflect/Proxy.java: New file.
+ 	* java/lang/reflect/ReflectPermission.java: Improve javadoc.
+ 	(serialVersionUID): Add missing field.
+ 	* java/lang/reflect/UndeclaredThrowableException.java: New file.
+ 	* gnu/classpath/Configuration.java.in: Add options for use by
+ 	java.lang.reflect.Proxy.
+ 
+ 2001-10-19  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* vm/reference/java/lang/reflect/Field.java: Reindent and comment,
+ 	extends AccessibleObject.
+ 	* vm/reference/java/lang/reflect/Method.java: ditto
+ 	(toString): Output throws clause.
+ 	* vm/reference/java/lang/reflect/Constructor.java: ditto
+ 	(toString): Output throws clause.
+ 
+ 2001-10-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Double.java: More libgcj merging
+ 	(isNaN): return v != v
+ 	* java/lang/Float.java: Ditto
+ 	(equals (Object)): use floatToIntBits()
+ 	(isNaN): return v != v
+ 
+ 2001-10-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (AC_OUTPUT): removed gnu/classpath/tools/Makefile,
+ 	added javax/naming/Makefile, javax/naming/directory/Makefile and
+ 	javax/naming/spi/Makefile
+ 	* gnu/java/text/Makefile.in: removed
+ 	* javax/Makefile.am (SUBDIRS): add naming
+ 	* javax/naming/.cvsignore: new file
+ 	* javax/naming/BinaryRefAddr.java: ditto
+ 	* javax/naming/InvalidNameException.java: ditto
+ 	* javax/naming/Makefile.am: ditto
+ 	* javax/naming/Name.java: ditto
+ 	* javax/naming/NamingException.java: ditto
+ 	* javax/naming/RefAddr.java: ditto
+ 	* javax/naming/StringRefAddr.java: ditto
+ 	* javax/naming/directory/.cvsignore: ditto
+ 	* javax/naming/directory/Makefile.am: ditto
+ 	* javax/naming/spi/.cvsignore: ditto
+ 	* javax/naming/spi/Makefile.am: ditto
+ 	* lib/.cvsignore: add javax
+ 	* lib/gen-classlist.sh.in: ditto
+ 	* lib/standard.omit: removed java/net, java/lang, java/text and
+ 	java/util/jar classes, added javax/accessibility and javax/swing
+ 
+ 2001-10-19  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/IdentityHashMap.java: Improve javadoc, fix member
+ 	visibility for less code generation.
+ 	(modCount): Add fail-safe iteration.
+ 	(entries): Cache the entry set.
+ 	(hash): Rename from getHash, and make it more powerful - common
+ 	code for iterating over the table is now in one location.
+ 	(entrySet): Add missing method hashCode, optimize methods contains
+ 	and remove.
+ 	(equals, putAll): Add missing (but useless) methods.
+ 	(hashCode): Add missing (and important) method.
+ 	(keySet): Add missing method hashCode.
+ 	(values): Add missing method remove.
+ 	(class IdentityIterator): Add fail-safe iteration, fix next to be
+ 	correctly parameterized.
+ 	(class IdentityEntry): Add a class for entrySet iteration.
+ 	* java/util/AbstractMap.java (hashCode): Optimize.
+ 	* java/util/Collections.java (SingletonSet): Fix visibility for
+ 	less code generation.
+ 
+ 2001-10-18  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/BitSet.java: Improve javadoc.
+ 	(cardinality(), clear(), clear(int, int), flip(int)),
+ 	(flip(int, int), get(int, int), intersects(BitSet), isEmpty()),
+ 	(nextClearBit(int), nextSetBit(int), set(int, boolean)),
+ 	(set(int, int), set(int, int, boolean)): Add new JDK 1.4 methods.
+ 	(clone): Fix so subclasses clone correctly.
+ 
+ 2001-10-18  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/AbstractCollection.java: Improve javadoc.
+ 	(AbstractCollection()): Make constructor protected.
+ 	(equals(Object, Object), hashCode(Object)): Add utility methods.
+ 	* java/util/AbstractList.java: Improve javadoc.
+ 	(AbstractList()): Make constructor protected.
+ 	(indexOf(Object)): Call listIterator(), not listIterator(int).
+ 	(iterator()): Follow Sun's requirement to not use listIterator(0).
+ 	(listIterator(int)): Make AbstractListItr anonymous.
+ 	(subList(int, int)): Add support for RandomAccess.
+ 	(SubList.add(int, Object), SubList.remove(Object)): Fix bug with
+ 	modCount tracking.
+ 	(SubList.addAll(Collection)): Add missing method.
+ 	(SubList.listIterator(int)): Fix bugs in indexing, modCount
+ 	tracking.
+ 	(class RandomAccessSubList): Add new class.
+ 	* java/util/AbstractMap.java: Improve javadoc.
+ 	(keys, values, KEYS, VALUES, ENTRIES): Consolidate common map
+ 	fields.
+ 	(AbstractMap()): Make constructor protected.
+ 	(equals(Object, Object), hashCode(Object)): Add utility methods.
+ 	(equals(Object)): Change algorithm to
+ 	entrySet().equals(m.entrySet()), as documented by Sun.
+ 	(keySet(), values()): Cache the collections.
+ 	* java/util/AbstractSequentialList.java: Improve javadoc.
+ 	(AbstractSequentialList()): Make constructor protected.
+ 	* java/util/AbstractSet.java: Improve javadoc.
+ 	(AbstractSet()): Make constructor protected.
+ 	(removeAll(Collection)): Add missing method.
+ 	* java/util/Arrays.java: Improve javadoc, rearrange method orders.
+ 	(defaultComparator): Remove, in favor of
+ 	Collections.compare(Object, Object, Comparator).
+ 	(binarySearch, equals, sort): Fix natural order comparison of
+ 	floats and doubles. Also improve Object comparison - when
+ 	comparator is null, use natural order.
+ 	(fill, sort): Add missing checks for IllegalArgumentException.
+ 	(sort, qsort): Fix sorting bugs, rework the code for more
+ 	legibility.
+ 	(mergeSort): Inline into sort(Object[], int, int, Comparator).
+ 	(class ArrayList): Rename from ListImpl, and make compatible with
+ 	JDK serialization. Add methods which more efficiently override
+ 	those of AbstractList.
+ 	* java/util/Collections: Improve javadoc.
+ 	(isSequential(List)): Add and use a method for deciding between
+ 	RandomAccess and sequential algorithms on lists.
+ 	(class Empty*, class Synchronized*, class Unmodifiable*): Make
+ 	compliant with JDK serializability.
+ 	(class Singleton*, class CopiesList, class RevereseComparator),
+ 	(class UnmodifiableMap.UnmodifiableEntrySet),
+ 	(class *RandomAccessList): New classes for serial compatibility.
+ 	(class Empty*, class Singleton*, class CopiesList): Add methods
+ 	which more efficiently override those of Abstract*.
+ 	(search): Inline into binarySearch(List, Object, Comparator).
+ 	(binarySearch): Make sequential search only do log(n) comparisons,
+ 	instead of n.
+ 	(copy(List, List)): Do bounds checking before starting.
+ 	(indexOfSubList, lastIndexOfSubList, list, replaceAll, rotate),
+ 	(swap):	Add new JDK 1.4 methods.
+ 	(binarySearch, max, min, sort): Allow null comparator to represent
+ 	natural ordering.
+ 	(reverse(List)): Avoid unnecessary swap.
+ 	(shuffle(List, Random)): Do shuffle in-place for RandomAccess
+ 	lists.
+ 	(SingletonList.get): Fix logic bug.
+ 	(SingletonMap.entrySet): Make the entry immutable, and cache the
+ 	returned set.
+ 	(SynchronizedCollection, SynchronizedMap, UnmodifiableCollection),
+ 	(UnmodifiableMap): Detect null pointer in construction.
+ 	(SynchronizedMap, UnmodifiableMap): Cache collection views.
+ 	* java/util/BasicMapEntry: Improve javadoc.
+ 
+ 2001-10-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/BufferedWriter.java (write(String,int,int)): Correctly
+ 	check bounds.
+ 
+ 	* java/security/Security.java (loadProviders): Removed unused
+ 	`pname' variable.  Don't create `File' object.  Don't update
+ 	`providerCount'.
+ 	(providerCount): Removed.
+ 	(insertProviderAt): Don't use `providerCount'.
+ 	(addProvider(Provider,int)): Likewise.
+ 	(removeProvider): Likewise.
+ 	(addProvider(Provider)): Rewrote.
+ 	(getProviders): Rewrote.
+ 	(getProvider): Don't use `providerCount'.
+ 
+ 2001-10-18  Jochen Hoenicke  <jochen@gnu.org>
+ 
+ 	* java/util/zip/ZipFile.java (readEntries): Search for the End Of
+ 	Central Directory.  When a zip comment is present the directory
+ 	may start earlier.  Patch suggested by Jï¿½rg Prante
+ 	<joergprante@gmx.de>.
+ 
+ 	* java/util/zip/ZipConstants.java: Renamed constants to their SUN
+ 	name, which is are now mentioned in the documentation of the sub
+ 	classes of ZipConstants.  Changed all usages.
+ 
+ 	* java/util/zip/ZipEntry.java (STORED): New constant.
+ 	(DEFLATED): Likewise.
+ 
+ 2001-10-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/security/Security.java (loadProviders): Added `vendor'
+ 	argument.
+ 	Load both `classpath' and `java.vm.name' providers.
+ 
+ 2001-10-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/security/provider/SHA1PRNG.java (engineNextBytes):
+ 	Rewrote.
+ 	* java/security/SecureRandom.java (setSeed(long)): Don't set seed
+ 	if secureRandomSpi is not initialized.
+ 
+ 2001-10-17  Anthony Green  <green@redhat.com>
+ 
+ 	* java/security/Security.java (loadProviders): Fix bug in how
+ 	providers are loaded.
+ 
+ 2001-10-15  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/HashMap.java (HashEntry.clone): Removed.
+ 	(HashMap(Map)): Use putAllInternal.
+ 	(clone): Likewise.
+ 	(putAllInternal): New method. Efficient counterpart to putAll which 
+ 	does not call put().	
+ 	* java/util/LinkedHashMap.java (rethread): Removed.
+ 	(putAllInternal): New method. Clear "head" and "tail".
+ 	(addEntry): New argument "callRemove". Don't call removeEldestEntry()
+ 	if callRemove == false. 
+ 
+ 2001-10-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/reflect/Makefile.am (EXTRA_DIST): Added new file.
+ 	* java/lang/reflect/AccessibleObject.java: New file.
+ 
+ 2001-10-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/beans/Makefile.am (EXTRA_DIST): Added new file.
+ 	* java/beans/AppletInitializer.java: New file.
+ 
+ 	* java/net/SocketPermission.java (hostport, actions): Now
+ 	private.
+ 
+ 2001-10-15  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/Collection.java: Updated javadoc.
+ 	* java/util/Comparator.java: Updated javadoc.
+ 	* java/util/Enumeration.java: Updated javadoc.
+ 	* java/util/Iterator.java: Updated javadoc.
+ 	* java/util/List.java: Updated javadoc.
+ 	* java/util/ListIterator.java: Updated javadoc.
+ 	* java/util/Map.java: Updated javadoc.
+ 	* java/util/RandomAccess.java: New file.
+ 	* java/util/Set.java: Updated javadoc.
+ 	* java/util/SortedMap.java: Updated javadoc.
+ 	* java/util/SortedSet.java: Updated javadoc.
+ 
+ 2001-10-13  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/include/macros.wml: fixed missing blockquote 
+ 	affecting status.wml
+ 	* doc/www.gnu.org/status.wml: changed maintainer of java.math to 
+ 	Various
+ 	* doc/www.gnu.org/home.wml: removed link to japhar+classpath doc
+ 
+ 2001-10-13  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/classpath/tools: removed and added to cp-tools sister project
+ 
+ 2001-10-13  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: added Savannah information
+ 
+ 2001-10-13  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/README: updated
+ 	* doc/www.gnu.org/Makefile: add publish target
+ 	* doc/www.gnu.org/announce/Makefile: add publish target
+ 	* doc/www.gnu.org/doc/Makefile: add publish target
+ 
+ 2001-10-13  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/home.wml: new file
+ 	* doc/www.gnu.org/status.wml: new file
+ 	* doc/www.gnu.org/announce/announcements.wml: new file
+ 	* doc/www.gnu.org/announce/1990206.wml: new file
+ 	* doc/www.gnu.org/announce/20001120.wml: new file
+ 	* doc/www.gnu.org/announce/20010106.wml: new file
+ 	* doc/www.gnu.org/*.mhtml: removed
+ 	* doc/www.gnu.org/announce/*.mhtml: removed
+ 	* doc/www.gnu.org/doc/*.mhtml: removed
+ 	* doc/www.gnu.org/Makefile: updated to use WML toolset
+ 	* doc/www.gnu.org/announce/Makefile: updated to use WML toolset
+ 	* doc/www.gnu.org/doc/Makefile: updated to use WML toolset
+ 	
+ 2001-10-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/SecurityManager.java (SecurityManager): Now public.
+ 
+ 	* java/security/AccessController.java (checkPermission): Now
+ 	throws AccessControlException.
+ 	* java/security/AllPermission.java: Class now final.
+ 	* java/security/Permission.java (getName): Now final.
+ 	(name): Now private.
+ 	(equals): New abstract method.
+ 	* java/security/PermissionCollection.java (linesep): Now private.
+ 	* java/security/Permissions.java: Class now final.
+ 	* java/security/Security.java (Security): New private
+ 	constructor.
+ 	* java/security/UnresolvedPermission.java: Import
+ 	java.security.cert.Certificate.  Class now final.
+ 	* java/security/acl/Group.java: Now extends Principal.
+ 	(isMember): Added Principal argument.
+ 	* java/security/spec/X509EncodedKeySpec.java (getFormat): Now
+ 	final.
+ 	* java/security/spec/PKCS8EncodedKeySpec.java (getFormat): Now
+ 	final.
+ 
+ 2001-10-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/rmi/rmic/RMIC.java (compile): Uncommented; fixed to use
+ 	new Compiler class.
+ 	* gnu/java/rmi/rmic/Makefile.am (EXTRA_DIST): Updated.
+ 	* gnu/java/rmi/rmic/Compile_gcj.java: New file.
+ 	* gnu/java/rmi/rmic/CompilerProcess.java: New file.
+ 	* gnu/java/rmi/rmic/Compiler.java: New file.
+ 
+ 2001-10-12  Jochen Hoenicke  <jochen@gnu.org>
+ 
+ 	* java/util/zip/DeflaterEngine.java (deflate): Fixed a bug
+ 	in the logic which lead to ArrayIndexOutOfBoundsException.
+ 
+ 2001-10-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Double.java: Partial merge with libgcj
+ 	(serialVersionUID): new private field
+ 	(byteValue): removed, already defined in superclass Number
+ 	(shortValue): likewise
+ 	* java/lang/Float.java: Partial merge with libgcj
+ 	(serialVersionUID): new private field
+ 
+ 2001-10-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/SocketImpl.java: Merge with libgcj
+ 
+ 2001-10-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/DatagramSocketImpl.java: Merge with libgcj
+ 
+ 2001-10-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLDecoder.java: Reimplement to take character encoding
+ 	into account.
+ 	* java/net/URLEncoder.java: Ditto
+ 
+ 2001-10-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/BufferedInputStream.java: Merge with libgcj
+ 
+ 2001-10-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/DecimalFormat.java (format): Use localized minus sign
+ 	when generating exponent; never use `+'.  Use floor to compute
+ 	exponent.
+ 
+ 2001-10-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/Adler32.java: Merge with libgcj
+ 	* java/util/zip/CRC32.java: Merge with libgcj
+ 	* java/util/zip/CheckedInputStream.java: New file from libgcj
+ 	* java/util/zip/CheckedOutputStream.java: Ditto
+ 	* java/util/zip/Checksum.java: Merge with libgcj
+ 	* java/util/zip/DataFormatException.java: Ditto
+ 	* java/util/zip/ZipException.java: Ditto
+ 	* java/util/zip/Makefile.am: add new classes
+ 
+ 2001-10-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Package.java: Reindent and fix comments
+ 	* java/lang/reflect/Modifier.java: Merge with libgcj
+ 
+ 2001-10-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/SequenceInputStream.java: Merge with libgcj
+ 	* java/io/StringBufferInputStream.java: Ditto
+ 
+ 2001-10-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/InheritableThreadLocal.java (addToHeritage): check if this
+ 	local is already contained in the heritage before adding it.
+ 
+ 2001-10-01  Jochen Hoenicke  <jochen@gnu.org>
+ 
+ 	* java/util/zip/ZipFile.java: Return -1 in 
+ 	PartialInputStream.read(byte[],int,int) when end of stream reached.
+ 	Reported by Bernd Mï¿½sli <bmoesli@esmertec.com>.
+ 
+ 2001-10-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/CharSequence.java: Fix javadoc comment.
+ 	* java/lang/StringBuffer.java: Remove extra javadoc author.date block.
+ 
+ 2001-09-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/FileWriter.java: Merged with libgcj.
+ 	* java/io/FilterInputStream.java: Ditto.
+ 	* java/io/FilterOutputStream.java: Ditto.
+ 	(write (byte[],int,int): Explicitly call write(int) on every byte.
+ 	* java/io/FilterReader.java: Ditto.
+ 	(FilterReader): call super(in.lock).
+ 	* java/io/FilterWriter.java: Merged with libgcj.
+ 	(FilterWriter): call super(in).
+ 	* java/io/Writer.java: Merged with libgcj.
+ 	* java/lang/Compiler.java: Ditto.
+ 	* java/lang/Process.java: Ditto.
+ 	* java/lang/Void.java: Ditto.
+ 	* java/net/ContentHandler.java: Ditto.
+ 	* java/net/DatagramPacket.java: Ditto.
+ 	* java/net/MulticastSocket.java: Merged (almost) with libgcj.
+ 	Note that the contructor super() calls are still different
+ 
+ 2001-09-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/DataInput.java: Merged with libgcj.
+ 	* java/io/DataOutput.java: Idem.
+ 	* java/io/FilenameFilter.java: Idem.
+ 	* java/io/Serializable.java: Idem. Remove explicit serialVersionUID.
+ 	* java/lang/Cloneable.java: Merged with libgcj.
+ 	* java/lang/Comparable.java: Idem.
+ 	* java/lang/Runnable.java: Idem.
+ 	* java/lang/reflect/Member.java: Idem.
+ 	Note that the values of DECLARED and PUBLIC were switched.
+ 	* java/net/ContentHandlerFactory.java: Merged with libgcj.
+ 	* java/net/FileNameMap.java: Idem.
+ 	* java/net/PlainDatagramSocketImpl.java: Added IP_TTL field.
+ 	* java/net/SocketOptions.java: Removed IP_TTL field. Merged with libgcj.
+ 	* java/net/SocketImplFactory.java: Merged with libgcj.
+ 	* java/net/URLStreamHandlerFactory.java: Idem.
+ 
+ 2001-09-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/IdentityHashMap.java (containsKey): Use getHash.
+ 	(get): Likewise.
+ 	(put): Likewise.
+ 	(remove): Likewise.
+ 	(getHash): New method.
+ 	(tombstone, emptyslot): Now static final.
+ 	(put): Correctly determine when to rehash, and correctly rehash.
+ 	(containsKey, remove): Test against table length with `>='.
+ 
+ 2001-09-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/DataInputStream.java (readChar): Use readFully.
+ 	(readInt): Likewise.
+ 	(readLong): Likewise.
+ 	(readShort): Likewise.
+ 	(readUnsignedShort): Likewise.
+ 
+ 2001-09-24  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/String.java (CaseInsensitiveComparator): Add serial UID.
+ 
+ 2001-09-25  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/Hashtable.java (toString): Fix a recently introduced 
+ 	typo/bug.
+ 	(readObject): Remove dead code.
+ 	
+ 	* gnu/java/security/provider/DefaultPolicy.java: New file, from libgcj.
+ 	* java/security: Merge from libgcj. These are mostly formatting fixes, 
+ 	with a few fixes and enhancements.
+ 
+ 2001-09-24  John Leuner  <jewel@debian.org>
+ 
+ 	* java/net/URLStreamHandler.java (parseURL): added check for file: and file:// URLsadded check for file: and file:// URLs
+ 	
+ 	* java/io/StreamTokenizer.java (nextToken): fixed toLowerCase() call to actually
+ 	change sval 
+ 
+ 2001-09-22  John Leuner  <jewel@debian.org>
+ 
+ 	* native/jni/awt/gnu_java_awt_image_GdkPixbufDecoder.c: Removed call to
+ 	get_pixbuf to allow code to compile
+ 
+ 2001-09-21  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/Makefile.am: removed tools from SUBDIRS
+ 	* gnu/java/awt/image/GdkPixbufDecoder.java: wrapped loadLibrary
+ 	call within if (Configuration.INIT_LOAD_LIBRARY)
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: same
+ 	* java/io/File.java: same
+ 	* java/io/FileDescriptor.java: same
+ 	* java/io/FileInputStream.java: same
+ 	* java/io/FileOutputStream.java: same
+ 	* java/io/ObjectInputStream.java: same
+ 	* java/io/ObjectOutputStream.java: same
+ 	* java/io/ObjectStreamClass.java: same
+ 	* java/io/RandomAccessFile.java: same
+ 	* java/lang/Double.java: same
+ 	* java/lang/Float.java: same
+ 	* java/lang/Math.java: same
+ 	* java/lang/Object.java: same
+ 	* java/lang/System.java: same
+ 	* java/lang/reflect/Array.java: same
+ 	* java/math/BigInteger.java: same
+ 	* java/net/InetAddress.java: same
+ 	* java/net/PlainDatagramSocketImpl.java: same
+ 	* java/net/PlainSocketImpl.java: same
+ 	* java/util/ResourceBundle.java: same
+ 	* java/util/TimeZone.java: same
+ 	* vm/reference/java/lang/Throwable.java: remove unused loadLibrary
+ 	call, VMs typically statically link these native methods instead.
+ 
+ 2001-09-20  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/Makefile.am: Added LinkedHashMap.java.
+ 	* java/util/LinkedHashMap.java: Added new file.
+ 	* java/util/Collections.java (singletonMap): Fix constructor call.
+ 	* java/util/Hashtable.java: Fix up some efficiency issues pointed
+ 	out by others.
+ 	* java/util/HashMap.java: Fix up some efficiency issues, and redo
+ 	the documentation. Add hooks for LinkedHashMap to use.
+ 
+ 2001-09-18  John Leuner  <jewel@debian.org>
+ 
+ 	* java/util/zip/*.java: Changed headers of files imported from 
+ 	jazzlib to reflect new Classpath home.
+ 
+ 2001-09-17  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/Collections.java (SynchronizedCollection)
+ 	(SynchronizedSet): Made package visible.
+ 	* java/util/Hashtable.java: More cleanup and documentation. Fix
+ 	synchronization issues.
+ 	(HashEntry): renamed from Entry, to avoid conflict with Map.Entry.
+ 	(clone): Reverted prior change.
+ 	* java/util/HashMap.java (clone): Reverted prior change; as
+ 	pointed out to me, recursion is worse than looping.
+ 
+ 2001-09-16  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* gnu/tools/serialver/Main.java: moved to 
+ 	gnu/classpath/tools/SerialVer.java
+ 	* gnu/tools/: removed because it is empty
+ 	* gnu/classpath/Makefile.am: added tools to SUBDIRS
+ 	* gnu/classpath/tools/Makefile.am: new file
+ 	* gnu/classpath/tools/.cvsignore: new file
+ 	* configure.in: update Makefile output
+ 	* lib/standard.omit: avoid compiling gnu/classpath/tools because
+ 	it depends on gnu.bytecode 
+ 	* gnu/classpath/tools/Util.java: new file
+ 	* gnu/classpath/tools/Javap.java: new file
+ 	* gnu/classpath/tools/JavapMain.java: new file
+ 	* gnu/classpath/tools/JavahMain.java: new file
+ 	* gnu/classpath/tools/tester.j: new file, helps test tools
+ 	* gnu/classpath/tools/README: new file
+ 
+ 2001-09-15  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/util/Hashtable.java (contains): check for null
+ 	(Hashtable(Map)): more efficient
+ 	(clear): more efficient
+ 	(clone): more efficient, by adding Entry.copy
+ 	* java/util/HashMap.java (clear): more efficient
+ 	(HashMap(Map)): more efficient
+ 	(clone): more efficient, by adding Entry.copy
+ 
+ 2001-09-15  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/io/File.java (File(String, String)): Correct error in
+ 	yesterday's patch. Thanks to Stuart Ballard.
+ 
+ 2001-09-14  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	Fixes for specjvm javac benchmark, reports from Gansha Wu:
+ 
+ 	* java/util/Hashtable.java (Enumerator): Ensure that if 
+ 	hasMoreElements() returns true, nextElement() will always return
+ 	something even if the table has been modified.
+ 
+ 	* java/io/File.java (File(String, String)): Permit a null dirName
+ 	parameter.
+ 
+ 2001-09-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/Properties.java (load): Correctly read \u sequences.
+ 	Report from Anthony Green.
+ 
+ 2001-09-09  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/CloneNotSupportedException.java (serialVersionUID):
+ 	make private, so that subclasses do not inherit wrong value
+ 	* java/lang/Object.java: reindent, improve documentation
+ 	* java/lang/Cloneable.java: improve documentation
+ 
+ 2001-09-07  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/String.java (CASE_INSENSITIVE_ORDER): implements
+ 	Serializable
+ 
+ 2001-09-07  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* native/cni: added for CNI native files
+ 	* native/common: added for common JNI/CNI files
+ 
+ 2001-09-07  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk: removed
+ 	* native/java.lang: removed
+ 	* native/java.lang.reflect: removed
+ 	* native/java.math: removed
+ 	* native/java.net: removed
+ 	* native/java.util: removed
+ 
+ 2001-09-06  Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (tryLocalBundle): Eliminate
+ 	redundant method calls.
+ 	(emptyLocale): New private member.
+ 	(tryBundle): Use emptyLocale.  Remove duplicate code.  Only cache
+ 	exact matches.
+ 
+ 2001-09-07  John Leuner  <jewel@debian.org>
+ 
+ 	* java/util/zip/*.java: imported the jazzlib code. Should
+ 	all be functional.
+ 
+ 2001-09-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/DecimalFormat.java (clone): Rewrote.
+ 	(DecimalFormat(DecimalFormat)): Removed.
+ 	* java/text/MessageFormat.java: Merged in old Classpath Javadoc.
+ 	(clone): Rewrote.
+ 
+ 	* java/util/Properties.java (load): Use ISO-8859-1 encoding.
+ 	(store): Likewise.
+ 
+ 	* java/lang/Character.java: Replaced non-ASCII characters in
+ 	comments.  Report from Etienne M. Gagnon.
+ 
+ 	Report from Gansha Wu:
+ 	* java/io/FileOutputStream.java (write(byte[],int,int)): Correctly
+ 	pass `offset' to writeInternal.
+ 
+ 	Report from Gansha Wu:
+ 	* java/io/DataOutputStream.java (write(int)): Update `written'.
+ 	(write(byte[],int,int)): Likewise.
+ 
+ 	Report from Gansha Wu:
+ 	* java/util/Date.java (weekNames, monthNames): Now final.
+ 	* java/util/Date.java (weekNames, monthNames): Now static.
+ 
+ 	* java/text/DateFormatSymbols.java: Updated license info.
+ 
+ 2001-09-05  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/text/MessageFormat.java (setLocale): Don't catch ParseException 
+ 	here, DecimalFormat.applyPattern() does not throw it.
+ 	* java/awt/Component.java (setLocation(Point)): Implemented.
+ 	* gnu/classpath/Configuration.java.in: Clarify comments.
+ 
+ 2001-09-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/IdentityHashMap.java (clone): Return the value.
+ 
+ 	* java/util/IdentityHashMap.java (clone): Make a copy of the
+ 	table.
+ 
+ 	* java/text/SimpleDateFormat.java
+ 	(SimpleDateFormat(String,DateFormatSymbols)): Call
+ 	computeCenturyStart().
+ 	* gnu/java/locale/LocaleInformation_de.java (word_breaks,
+ 	sentence_breaks, line_breaks): Removed.
+ 	(collation_rules): Use `k,K', not `j,K'.  Don't using leading
+ 	`-'.  Use `0<1', not `0,1'.  Use `9<A', not `9A'.
+ 	* gnu/java/locale/LocaleInformation_nl.java: Likewise.
+ 	* gnu/java/locale/LocaleInformation_en.java: Likewise.
+ 	* java/text/DateFormatSymbols.java: Merged with libgcj.
+ 	* java/text/StringCharacterIterator.java: Reindented and merged
+ 	with libgcj.
+ 	(StringCharacterIterator(String,int,int,int)): Simplified.
+ 	(current): Likewise.
+ 	(next): Likewise.
+ 	(previous): Likewise.
+ 	(last): Likewise.
+ 	(equals): Likewise.
+ 	(setText): Now public.  Also sets all fields.
+ 	* java/text/RuleBasedCollator.java (clone): Rewrote.
+ 	* java/text/Collator.java: Mostly merged with libgcj.
+ 	* java/text/MessageFormat.java: Merged with libgcj.
+ 	* java/text/FieldPosition.java: Reindented.  Merged with libgcj.
+ 	* java/text/ParsePosition.java: Reindented.  Merged with libgcj.
+ 	* java/text/Format.java: Reindented.  Merged with libgcj.
+ 	(parseObject): Doesn't throw exception on error.
+ 	* java/text/CharacterIterator.java: Reindented.
+ 	* java/text/ChoiceFormat.java: Merged with libgcj.
+ 	* gnu/java/text/Makefile.am: New file.
+ 	* gnu/java/Makefile.am (SUBDIRS): Added text.
+ 	* configure.in (AC_OUTPUT): Added gnu/java/text/Makefile.
+ 	* gnu/java/text/BaseBreakIterator.java: New file from libgcj.
+ 	* gnu/java/text/CharacterBreakIterator.java: Likewise.
+ 	* gnu/java/text/LineBreakIterator.java: Likewise.
+ 	* gnu/java/text/SentenceBreakIterator.java: Likewise.
+ 	* gnu/java/text/WordBreakIterator.java: Likewise.
+ 	* java/text/BreakIterator.java: Merged with libgcj.
+ 	* java/text/DefaultBreakIterator.java: Removed.
+ 	* java/text/DecimalFormatSymbols.java: Merged with libgcj.
+ 	* java/text/DateFormat.java: Merged with libgcj.
+ 	* gnu/java/locale/Makefile.am (EXTRA_DIST): Added new file.
+ 	* gnu/java/locale/LocaleInformation_en.java: Removed US-specific
+ 	entries.
+ 	(collation_rules): Use `k,K', not `j,K'.
+ 	* gnu/java/locale/LocaleInformation_en_US.java: New file.
+ 	* java/text/NumberFormat.java: Merged with libgcj.
+ 	* java/text/DecimalFormat.java: Merged with libgcj.
+ 
+ 2001-09-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* standard.omit: Don't build java.net.URLClassLoader and the
+ 	java.util.prefs package by default
+ 
+ 2001-09-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.in (AC_OUTPUT): List new Makefiles.
+ 	* gnu/java/Makefile.am (SUBDIRS): Added util.
+ 	* java/util/Makefile.am (SUBDIRS): Added prefs.
+ 	* gnu/java/util/.cvsignore, gnu/java/util/Makefile.am,
+ 	gnu/java/util/prefs/.cvsignore, gnu/java/util/prefs/Makefile.am,
+ 	java/util/prefs/.cvsignore, java/util/prefs/Makefile.am: New files.
+ 	* gnu/java/util/prefs/FileBasedFactory.java,
+ 	gnu/java/util/prefs/MemoryBasedFactory.java 
+ 	gnu/java/util/prefs/MemoryBasedPreferences.java 
+ 	gnu/java/util/prefs/NodeReader.java 
+ 	gnu/java/util/prefs/NodeWriter.java
+ 	java/util/prefs/AbstractPreferences.java 
+ 	java/util/prefs/BackingStoreException.java 
+ 	java/util/prefs/InvalidPreferencesFormatException.java 
+ 	java/util/prefs/NodeChangeEvent.java 
+ 	java/util/prefs/NodeChangeListener.java 
+ 	java/util/prefs/PreferenceChangeEvent.java 
+ 	java/util/prefs/PreferenceChangeListener.java 
+ 	java/util/prefs/Preferences.java 
+ 	java/util/prefs/PreferencesFactory.java: New class files.
+ 
+ 2001-09-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/IllegalThreadStateException.java,
+ 	java/lang/InstantiationException.java: Minor comment tweaks to
+ 	satisfy libgcj `classes.pl' script.
+ 
+ 2001-09-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	More conformance with spec; plus merge with libgcj:
+ 	* java/lang/SecurityManager.java (checkSecurityAccess):
+ 	Implemented.
+ 	(SecurityManager): New constructor.
+ 	(checkPermission(Permission,Object)): New method.
+ 
+ 2001-08-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/zip/ZipException.java: Re-merged with libgcj.
+ 
+ 	* java/util/zip/Checksum.java: Re-merged with libgcj.
+ 	* java/util/zip/DataFormatException.java: Likewise.
+ 
+ 	* java/net/NetPermission.java: Re-merged with libgcj.
+ 	* java/net/SocketPermission.java: Likewise.
+ 
+ 	* java/lang/ThreadGroup.java: Re-merged with libgcj.
+ 
+ 	* java/io/InvalidClassException.java: Re-merged from libgcj
+ 	(indentation cleanup).
+ 
+ 	* java/io/BufferedReader.java (DEFAULT_BUFFER_SIZE): Default to 8k.
+ 
+ 2001-08-31  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/BufferedReader.java (DEFAULT_BUFFER_SIZE): Restored.
+ 	(BufferedReader): Use it.
+ 	* java/io/LineNumberReader.java: comment change to note buffer size
+ 
+ 	Uncertain about clone() implementations given JDK 1.4 docs
+ 	* java/util/AbstractMap.java (clone): new method to conform to API
+ 	* java/util/IdentityHashMap.java (clone): don't throw
+ 	CloneNotSupportedException
+ 
+ 2001-08-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/PipedWriter.java (write): Changed argument to `int'.
+ 
+ 	* java/util/Comparator.java (equals): Added.
+ 
+ 	* java/beans/VetoableChangeSupport.java: Updated copyright
+ 	header.
+ 
+ 	* java/util/ResourceBundle.java (getBundle): Now synchronized.
+ 
+ 	Merge with libgcj:
+ 	* java/util/StringTokenizer.java (countTokens): Replaced with
+ 	libgcj implementation.
+ 	* java/util/Locale.java (Locale): Don't intern values.  Convert
+ 	values to canonical case.
+ 	(convertLanguage): Likewise.
+ 	Class now final.
+ 	(getAvailableLocales): Fixed indentation.
+ 	(equals): Likewise.
+ 	(writeObject): Now synchronized.  Restore hashcode when done.
+ 	(hashCode): Now synchronized.
+ 
+ 	* java/util/Random.java: Fixed keyword ordering.
+ 
+ 	* java/io/ByteArrayOutputStream.java: Updated copyright header.
+ 
+ 	* java/io/ByteArrayInputStream.java: Merged with libgcj.
+ 
+ 2001-08-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Re-merged classes with libgcj:
+ 	* java/io/PipedReader.java (ready): Throw IOException if pipe
+ 	closed.
+ 	* java/io/BufferedReader.java (mark, reset, ready, read, skip):
+ 	Perform checkStatus check inside synchronized block.
+ 
+ 2001-08-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/rmi/activation/Activatable.java,
+ 	java/rmi/activation/ActivateFailedException.java,
+ 	java/rmi/activation/ActivationDesc.java,
+ 	java/rmi/activation/ActivationException.java,
+ 	java/rmi/activation/ActivationGroup.java,
+ 	java/rmi/activation/ActivationGroupDesc.java,
+ 	java/rmi/activation/ActivationGroupID.java,
+ 	java/rmi/activation/ActivationID.java,
+ 	java/rmi/activation/ActivationInstantiator.java,
+ 	java/rmi/activation/ActivationMonitor.java,
+ 	java/rmi/activation/ActivationSystem.java,
+ 	java/rmi/activation/Activator.java,
+ 	java/rmi/activation/UnknownGroupException.java,
+ 	java/rmi/activation/UnknownObjectException.java,
+ 	java/rmi/AccessException.java,
+ 	java/rmi/AlreadyBoundException.java,
+ 	java/rmi/ConnectException.java, java/rmi/ConnectIOException.java,
+ 	java/rmi/MarshalException.java, java/rmi/MarshalledObject.java,
+ 	java/rmi/Naming.java, java/rmi/NoSuchObjectException.java,
+ 	java/rmi/NotBoundException.java,
+ 	java/rmi/RMISecurityException.java,
+ 	java/rmi/RMISecurityManager.java, java/rmi/Remote.java,
+ 	java/rmi/RemoteException.java, java/rmi/ServerError.java,
+ 	java/rmi/ServerException.java,
+ 	java/rmi/ServerRuntimeException.java,
+ 	java/rmi/StubNotFoundException.java,
+ 	java/rmi/UnexpectedException.java,
+ 	java/rmi/UnknownHostException.java,
+ 	java/rmi/UnmarshalException.java, java/rmi/dgc/DGC.java,
+ 	java/rmi/dgc/Lease.java, java/rmi/dgc/VMID.java,
+ 	java/rmi/registry/LocateRegistry.java,
+ 	java/rmi/registry/Registry.java,
+ 	java/rmi/registry/RegistryHandler.java,
+ 	java/rmi/server/ExportException.java,
+ 	java/rmi/server/LoaderHandler.java,
+ 	java/rmi/server/LogStream.java, java/rmi/server/ObjID.java,
+ 	java/rmi/server/Operation.java,
+ 	java/rmi/server/RMIClassLoader.java,
+ 	java/rmi/server/RMIClientSocketFactory.java,
+ 	java/rmi/server/RMIFailureHandler.java,
+ 	java/rmi/server/RMIServerSocketFactory.java,
+ 	java/rmi/server/RMISocketFactory.java,
+ 	java/rmi/server/RemoteCall.java,
+ 	java/rmi/server/RemoteObject.java, java/rmi/server/RemoteRef.java,
+ 	java/rmi/server/RemoteServer.java,
+ 	java/rmi/server/RemoteStub.java,
+ 	java/rmi/server/ServerCloneException.java,
+ 	java/rmi/server/ServerNotActiveException.java,
+ 	java/rmi/server/ServerRef.java, java/rmi/server/Skeleton.java,
+ 	java/rmi/server/SkeletonMismatchException.java,
+ 	java/rmi/server/SkeletonNotFoundException.java,
+ 	java/rmi/server/SocketSecurityException.java,
+ 	java/rmi/server/UID.java,
+ 	java/rmi/server/UnicastRemoteObject.java,
+ 	java/rmi/server/Unreferenced.java, gnu/java/rmi/dgc/DGCImpl.java,
+ 	gnu/java/rmi/dgc/DGCImpl_Skel.java,
+ 	gnu/java/rmi/dgc/DGCImpl_Stub.java,
+ 	gnu/java/rmi/registry/RegistryImpl.java,
+ 	gnu/java/rmi/registry/RegistryImpl_Skel.java,
+ 	gnu/java/rmi/registry/RegistryImpl_Stub.java,
+ 	gnu/java/rmi/rmic/RMIC.java, gnu/java/rmi/rmic/TabbedWriter.java,
+ 	gnu/java/rmi/server/ProtocolConstants.java,
+ 	gnu/java/rmi/server/RMIDefaultSocketFactory.java,
+ 	gnu/java/rmi/server/RMIHashes.java,
+ 	gnu/java/rmi/server/RMIObjectInputStream.java,
+ 	gnu/java/rmi/server/RMIObjectOutputStream.java,
+ 	gnu/java/rmi/server/UnicastConnection.java,
+ 	gnu/java/rmi/server/UnicastConnectionManager.java,
+ 	gnu/java/rmi/server/UnicastRef.java,
+ 	gnu/java/rmi/server/UnicastRemoteCall.java,
+ 	gnu/java/rmi/server/UnicastRemoteStub.java,
+ 	gnu/java/rmi/server/UnicastServer.java,
+ 	gnu/java/rmi/server/UnicastServerRef.java: RMI implementation from
+ 	Kaffe.  Relabelled classes to fit into Classpath tree.
+ 	* configure.in (AC_OUTPUT): List new Makefiles.
+ 	* gnu/java/rmi/server/Makefile.am: New file.
+ 	* gnu/java/rmi/rmic/Makefile.am: New file.
+ 	* gnu/java/rmi/registry/Makefile.am: New file.
+ 	* gnu/java/rmi/dgc/Makefile.am: New file.
+ 	* gnu/java/rmi/Makefile.am: New file.
+ 	* gnu/java/Makefile.am (SUBDIRS): Added rmi.
+ 	* java/rmi/server/Makefile.am: New file.
+ 	* java/rmi/registry/Makefile.am: New file.
+ 	* java/rmi/dgc/Makefile.am: New file.
+ 	* java/rmi/activation/Makefile.am: New file.
+ 	* java/rmi/Makefile.am: New file.
+ 	* java/Makefile.am (SUBDIRS): Added rmi.
+ 
+ 2001-08-21  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* java/util/IdentityHashMap.java (get): Fix off-by-one error.
+ 	(put): Likewise.
+ 
+ 2001-08-19  John Leuner  <jewel@debian.org>
+ 
+ 	* java/lang/Math.java (various methods): applied fixes from Eric Blake 
+ 
+ 2001-08-17  John Leuner  <jewel@debian.org>
+ 
+ 	* vm/reference/java/lang/Runtime.java (setSecurityManager): Fixed reference to wrong 'securityManager'
+ 
+ 2001-08-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/IdentityHashMap.java: New file.
+ 	* java/util/Makefile.am (EXTRA_DIST): Added IdentityHashMap.java.
+ 
+ 2001-08-11  John Leuner  <jewel@debian.org>
+ 
+ 	* java/awt/ActiveEvent.java: added this file (new interface)
+ 	* gnu/java/awt/peer/gtk/Test.java (new MouseAdapter): changed event name from e to me
+ 	* gnu/java/awt/peer/gtk/TestAWT.java:  fixed ambiguous references to getSize()
+ 	and getBackground()
+ 	* gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java (show): changed method to not use
+ 	AWT 1.0 Event
+ 
+ 2001-08-11  John Leuner  <jewel@debian.org>
+ 
+ 	* java/awt/font/TextHitInfo.java: added this file (no implementation)
+ 	* java/awt/Window.java (postEvent): commented out this 1.0 method
+ 	* java/awt/Toolkit.java (getMenuShortcutKeyMask): Just guessed VK_CONTROL instead
+ 	of Event.CTRL_MASK
+ 	* java/awt/peer/PopupMenuPeer.java (show): doesn't use 1.0 Event anymore 
+ 	* java/awt/PopupMenu.java (show): doesn't create 1.0 Event anymore 
+ 	* java/awt/MenuContainer.java (postEvent): commented out this 1.0 method
+ 	* java/awt/MenuComponent.java (postEvent): commented out this 1.0 method
+ 	* java/awt/Container.java (deliverEvent): commented out this 1.0 method
+ 	* java/awt/Component.java (getFocus): commented out this 1.0 method
+ 	(lostFocus): idem
+ 	(handleEvent): idem
+ 	(action): idem
+ 	(deliverEvent): idem
+ 	(postEvent): idem
+ 	(keyDown): idem
+ 	(keyUp): idem
+ 	(mouseDown): idem
+ 	(mouseUp): idem
+ 	(mouseEnter): idem
+ 	(mouseExit): idem
+ 	(mouseDrag): idem
+ 	(mouseMove): idem
+ 	* java/awt/AWTEvent.java (AWTEvent(Event)): commented out this constructor
+ 
+ 2001-08-11  John Leuner  <jewel@debian.org>
+ 
+ 	* java/net/URLConnection.java (getDefaultUseCaches): made non-static
+ 	(setDefaultUseCaches): made non-static
+ 
+ 2001-08-07  John Leuner  <jewel@debian.org>
+ 
+ 	* native/jni/java_lang_Double.c (Java_java_lang_Double_initIDs): Fixed signature for isNaN
+ 	changed GetFieldID to GetStaticFieldID for pos and neg infinity
+ 
+ 	* native/jni/java_lang_Double.c (Java_java_lang_Double_toString): added casts to jlong for POS INF check
+ 	
+ 	* native/jni/java_lang_Double.c (Java_java_lang_Double_parseDouble0): added conditional for KISSME JVM to use normal strtod
+ 
+ 2001-08-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/StringWriter.java: Merged with libgcj.
+ 	* java/io/InputStream.java: Merged with libgcj.
+ 	* java/io/OutputStream.java: Merged with libgcj.
+ 	* java/io/PushbackInputStream.java: Merged with libgcj.
+ 	* java/io/CharArrayReader.java: Merged with libgcj.
+ 	* java/io/CharArrayWriter.java: Merged with libgcj.
+ 
+ 2001-08-05  John Leuner  <jewel@debian.org>
+ 
+ 	* java/lang/String.java (copyValueOf (char[],int,int)): Added this method
+ 	* java/lang/String.java (copyValueOf (char[])): Added this method
+ 	
+ 2001-08-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* vm/reference/java/lang/reflect/Constructor.java: Comment fix.
+ 	From Patrick Doyle.
+ 
+ 2001-07-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/Date.java (getDay): Fix return value.
+ 
+ 	* java/lang/Integer.java (toString(int,int)): Handle case where
+ 	radix is out of range.
+ 
+ 	* java/lang/Integer.java (toString(int,int)): Don't bother to
+ 	optimize.
+ 
+ 	* java/io/File.java (renameTo): Don't change `path'.  From Gansha Wu.
+ 	(list): Apply the filter.
+ 
+ 2001-07-30  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/GregorianCalendar.java (GregorianCalendar): Call
+ 	setTimeInMillis() to set the default/current time.
+ 
+ 2001-07-26  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/Calendar.java (set): Never recompute fields here. They 
+ 	will already be set if someone set time explicitly, and it can cause
+ 	problems to do so. Don't invalidate AM_PM setting if HOUR is set.
+ 	* java/util/GregorianCalendar.java (computeTime): Don't ignore an
+ 	HOUR setting if AM_PM is set. Don't try to ensure the HOUR value is 
+ 	sane.
+ 	* java/text/SimpleDateFormat.java (defaultCentury): New field.
+ 	(readObject): Call set2DigitYearStart if appropriate so that 
+ 	defaultCentury is calculated.
+ 	(SimpleDateFormat): Don't bother clearing calendar here. Call
+ 	computeCenturyStart().
+ 	(set2DigitYearStart): Calculate and set defaultCentury.
+ 	(format): Don't clone the calendar. Use "calendar" not "theCalendar"
+ 	everywhere.
+ 	(parse): Likewise. If the pattern is "y" or "yy" and it found exactly
+ 	2 numeric digits, use the 80-20 heuristic to parse the value into a
+ 	default century based on defaultCenturyStart.
+ 	(computeCenturyStart): Rewritten. Call set2DigitYearStart().
+ 
+ 2001-07-26  R. S. Veldema
+ 	* java/awt/MediaEntry.java: LOADING, ABORTED, ERRORED, COMPLETE,
+ 	LOADSTARTED, DONE access changed from private to public
+ 
+ 2001-07-26  C. Brian Jones
+ 	* vm/reference/java/lang/Runtime.java (Runtime): use 
+ 	File.pathSeparatorChar instead of ':'
+ 
+ 2001-07-26  Patrick Doyle
+ 	* vm/reference/java/lang/Runtime.java (Runtime): deal with
+ 	null library path
+ 	* vm/reference/java/lang/Class.java: documentation fix
+ 
+ 2001-07-26  Julian Scheid <julian.scheid@sektor37.de>
+ 
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setValues):
+ 	changed argument type from int to jint
+ 	* gnu/java/locale/LocaleInformation_en.java: sentence_breaks 
+ 	updated
+ 	* gnu/java/locale/LocaleInformation_nl.java: sentence_breaks 
+ 	updated
+ 	* gnu/java/locale/LocaleInformation_de.java: Added word_breaks, 
+ 	sentence_breaks, and line_breaks.
+ 
+ 2001-07-25  Etienne M. Gagnon <etienne.gagnon@uqam.ca>
+ 
+ 	* native/jni/java_io_FileDescriptor.c: added 
+ 	#include "java_io_FileDescriptor.h"
+ 	* native/jni/java_io_ObjectInputStream.c: return 0 changed to 
+ 	return NULL
+ 	* native/jni/javaio.c (_javaio_read): change 0 to JNI_FALSE
+ 	* native/jni/javaio.h: add #include <stddef.h>
+ 	* native/jni/java_lang_reflect_Array.c: added #include <stddef.h>
+ 	* native/jni/java_math_BigInteger.c: modify #include 
+ 	statements for compilation
+ 	* native/jni/jcl.c: #include <stdio.h>
+ 	* native/lib/jcl.c: #include <stdio.h>
+ 	* native/jni/jcl.h: #include <stddef.h>
+ 	* native/lib/jcl.h: #include <stddef.h>
+ 
+ 2001-07-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Short.java: Reindented.
+ 	(digits): Removed.
+ 	(toString): From libgcj.
+ 	(toString(short,int)): Removed.
+ 	(parseStrict(short,int,boolean)): Removed.
+ 	(parseStrict(String,int)): From libgcj.
+ 	(decode): Likewise.
+ 	* java/lang/Number.java: Indentation fixes.
+ 	(serialVersionUID): Define.
+ 	* java/lang/Byte.java: Reindented.
+ 	(digits): Removed.
+ 	(toString): From libgcj.
+ 	(toStringStatic): Removed.
+ 	(parseByte(String,int,boolean)): Removed.
+ 	(paresByte(String,int)): From libgcj.
+ 	(decode): Likewise.
+ 	* java/lang/Long.java: Reindented.
+ 	(toUnsignedString): From libgcj.
+ 	(toString): Likewise.
+ 	(parseLong): Likewise.
+ 	(compareTo): Likewise
+ 	(decode): Likewise.  Now public.
+ 	* java/lang/String.java (valueOf): Use two-arg toString.
+ 	* java/lang/Integer.java: Reindented; merged with libgcj.
+ 	(digits): Removed.
+ 	(serialVersionUID): Now private.
+ 	(MIN_VALUE, MAX_VALUE): Updated docs.
+ 	(decode): From libgcj.
+ 	(parseInt): Likewise.
+ 	(toUnsignedString): Likewise.
+ 	(toString): Likewise.
+ 	(compareTo): Likewise.
+ 
+ 2001-07-17  Mark Wielaard  <mark@klomp.org>
+ 	    Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/Boolean.java (Boolean String): equalsIgnoreCase() already
+ 	checks for null.
+ 	(value): Make field final
+ 	* java/lang/Byte.java (value): idem
+ 	* java/lang/Character.java (value): idem
+ 	* java/lang/Double.java (value): idem
+ 	* java/lang/Float.java (value): idem
+ 	* java/lang/Integer.java (value): idem
+ 	* java/lang/Long.java (value): idem
+ 	* java/lang/Short.java (value): idem
+ 
+ 2001-07-17  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/util/LinkedList.java (clone): Clear the copy list with clear(), 
+ 	not by setting its size field.
+ 
+ 2001-07-17  Nic Ferrier <nferrier@tapsellferrier.co.uk>
+ 
+ 	* java/net/URLClassLoader.java (findResource): use URLConnection.connect()
+ 	to test if the connection is really valid
+ 
+ 2001-07-13  John Leuner  <jewel@debian.org>
+ 
+ 	* java/text/DecimalFormat.java: Fixed duplicate 'package java.text;' line
+ 	* javax/swing/plaf/UIResource.java: changed 'abstract interface' to 'interface'
+ 	* javax/accessibility/AccessibleAction.java: idem
+ 	* javax/accessibility/AccessibleComponent.java: idem
+ 	* javax/accessibility/AccessibleSelection.java: idem
+ 	* javax/accessibility/Accessible.java: idem
+ 	* javax/accessibility/AccessibleValue.java: idem
+ 	* javax/accessibility/AccessibleHypertext.java: idem
+ 	* javax/accessibility/AccessibleText.java: idem
+ 	* java/security/cert/X509Extension.java: idem
+ 	* java/security/spec/KeySpec.java: idem
+ 	* java/security/spec/AlgorithmParameterSpec.java: idem
+ 	* com/sun/javadoc/ClassDoc.java: idem
+ 	* com/sun/javadoc/Doc.java: idem
+ 	* com/sun/javadoc/ProgramElementDoc.java: idem
+ 	* com/sun/javadoc/Type.java: idem
+ 	* com/sun/javadoc/MemberDoc.java: idem
+ 	* com/sun/javadoc/ExecutableMemberDoc.java: idem
+ 	* com/sun/javadoc/PackageDoc.java: idem
+ 	* com/sun/javadoc/MethodDoc.java: idem
+ 	* com/sun/javadoc/DocErrorReporter.java: idem
+ 	* com/sun/javadoc/Tag.java: idem
+ 	* com/sun/javadoc/ParamTag.java: idem
+ 	* com/sun/javadoc/RootDoc.java: idem
+ 	* com/sun/javadoc/SerialFieldTag.java: idem
+ 	* com/sun/javadoc/ThrowsTag.java: idem
+ 	* com/sun/javadoc/Parameter.java: idem
+ 	* com/sun/javadoc/ConstructorDoc.java: idem
+ 	* com/sun/javadoc/SeeTag.java: idem
+ 	* com/sun/javadoc/FieldDoc.java: idem
+ 
+ 2001-07-13  John Leuner <jewel@debian.org>
+ 
+ 	* java/text/DecimalFormat.java: Added a skeleton (ie non-working
+ 	and incomplete) version to allow MessageFormat to compile.
+ 
+ 2001-07-13  John Leuner <jewel@debian.org>
+ 
+ 	* java/net/SocketOptions.java: changed 'abstract interface' to 'interface'
+ 	* java/net/URLStreamHandlerFactory.java: idem
+ 	* java/net/SocketImplFactory.java: idem
+ 	* java/net/ContentHandlerFactory.java: idem
+ 	* java/net/FileNameMap.java: idem
+ 	* java/lang/Runnable.java: idem
+ 	* java/lang/Cloneable.java: idem
+ 	* java/lang/Comparable.java: idem
+ 	* java/io/DataOutput.java: idem
+ 	* java/io/ObjectInput.java: idem
+ 	* java/io/ObjectInputValidation.java: idem
+ 	* java/io/ObjectOutput.java: idem
+ 	* java/io/DataInput.java: idem
+ 	* java/io/Externalizable.java: idem
+ 	* java/io/Serializable.java: idem
+ 	* java/io/FilenameFilter.java: idem
+ 
+ 2001-07-10  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/lang/CharSequence.java: new 1.4 interface
+ 	* java/lang/String.java: implements Serializable, CharSequence
+ 	(contentEquals StringBuffer): new 1.4 method
+ 	(subSequence): new 1.4 method needed for CharSequence
+ 	* java/lang/StringBuffer.java: implements CharSequence
+ 	(subSequence): new 1.4 method needed for CharSequence
+ 
+ 2001-07-10  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/lang/Boolean.java (valueOf boolean): new 1.4 method
+ 	(toString boolean): idem
+ 	(valueOf String): return one of the predefined Boolean instances
+ 	* java/lang/Double.java (compare double double): new 1.4 method
+ 	(compareTo Double): call new method
+ 	* java/lang/Float.java (compare float float): new 1.4 method
+ 	(compareTo Float): call new method
+ 
+ 2001-07-10  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/io/File.java (String,String constructor): compile fix
+ 
+ 2001-07-05  Julian Scheid <julian.scheid@sektor37.de>
+ 
+ 	* com/sun/javadoc/Doc.java (getRawCommentText): previously
+ 	mistakenly said setRawCommentText.
+ 	* com/sun/javadoc/DocErrorReporter.java (printNotice): missing
+ 	argument has been added.
+ 
+ 2001-07-05  Gansha Wu <gansha.wu@intel.com>
+ 
+ 	* java/net/PlainSocketImpl.java (read): remove synchronized
+ 	keyword to avoid deadlock between readers and writers using the
+ 	same socket.
+ 	(write): remove synchronized keyword to avoid deadlock betweeen 
+ 	readers and writers using the same socket.
+ 	* java/io/File.java (File): in File (String, String) ignore null
+ 	first argument which then assumes current working directory.
+ 	
+ 2001-06-25  Takashi Okamoto <tora@debian.org>
+ 
+ 	* gnu/java/io/encode/EncoderUTF8.java (convertToBytes): create 
+ 	valid UTF8 encoding.
+ 
+ 2001-06-25  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/jni/mprec.h: new file from gcj
+ 	* native/jni/mprec.c: new file from gcj
+ 	* native/jni/fdlibm.h: new file from gcj
+ 	* native/jni/ieeefp.h: new file from gcj
+ 	* native/jni/java-assert.h: new file from gcj
+ 	* native/jni/dtoa.c: new file from gcj
+ 	* native/jni/jcl.c: copy of file in native/jni/lib/
+ 	* native/jni/jcl.h: copy of file in native/jni/lib/
+ 	* acconfig.h: added HAVE_INT32_DEFINED and HAVE_BSD_INT32_DEFINED
+ 	* doc/hacking.texinfo: fixed typo
+ 	* configure.in: rename --enable-libgcj-debug to --enable-debug.
+ 	Created new option --enable-load-library potentially to be used
+ 	to limit all System.loadLibrary() calls in class initializers.
+ 	Added more header checks and define HAVE_INT32_DEFINED
+ 	or HAVE_BSD_INT32_DEFINED similarly to gcj.  Renamed libgcj-debug
+ 	to the neutral sounding debug.  Checks for more headers.
+ 	* gnu/classpath/Configuration.java.in: INIT_LOAD_LIBRARY added.
+ 	Should be helpful for more directly using classpath code in gcj.
+ 	* TODO: added URL to javadoc docs for writing serial tags
+ 	* java/lang/Double.java: merged with gcj version, credit to 
+ 	Andrew Haley.
+ 	(byteValue): added missing function
+ 	(shortValue): added missing function
+ 	(compareTo): properly return 0 if both values are NaN
+ 	* java/lang/Float.java: merged with gcj version, credit to 
+ 	Andrew Haley.
+ 	(Float): removed NullPointerException from throws clause
+ 	(toString): calls Double.toString
+ 	(valueOf): removed NullPointerException from throws clause
+ 	(floatToRawIntBits): new native method
+ 	(parseFloat): removed NullPointerException from throws clause.
+ 	Calls Double.parseDouble now.
+ 	* native/jni/java_lang_Float.c (*): aligned with gcj implementation
+ 	* native/jni/java_lang_Double.c (*): aligned with gcj implementation
+ 	* lib/Makefile.am: changed to handle separate builddir
+ 	* lib/gen-classlib.sh.in: changed to handle separate builddir
+ 	* lib/mkdep.pl.in: changed to handle separate builddir
+ 	* lib/standard.omit: changed to handle regex of separate builddir
+ 	* native/jni/Makefile.am: include $(top_builddir)/include instead
+ 	of $(top_srcdir).  Additions to javalang shared library.
+ 	* native/jni/awt/Makefile.am: include $(top_builddir)/include
+ 	instead of $(top_srcdir).
+ 	
+ 2001-06-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/Date.java (toLocaleString): Deprecated.
+ 	(toGMTSTring): Likewise.
+ 	(parse): Likewise.
+ 	(skipParens, parseTz, parseMonth, parseDayOfWeek, parse): New
+ 	methods from libgcj.
+ 
+ 2001-06-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/security/PublicKey.java: Extend Key.
+ 	* java/security/PrivateKey.java: Extend Key.
+ 
+ 2001-05-31  Patrik Reali  <reali@inf.ethz.ch>
+ 
+ 	* vm/reference/java/lang/Thread.java: Implements Runnable.
+ 
+ 2001-05-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/sql/DriverManager.java (getDrivers): Handle case where
+ 	driver's class loader is null.  From Corey Minyard.
+ 
+ 2001-05-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/SimpleDateFormat.java (parse): Handle non-dst time
+ 	zones.
+ 
+ 2001-05-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/GregorianCalendar.java (computeTime): Only call
+ 	getTimeZone() once.
+ 
+ 2001-05-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/SimpleDateFormat.java (parse): Clear DST_OFFSET and
+ 	ZONE_OFFSET just before computing the time.
+ 
+ 2001-05-10  Shane Nay  <shane@minirl.com>
+ 
+ 	* java/awt/Toolkit.java (getDefaultToolkit): Use
+ 	default_toolkit_name.
+ 
+ 2001-05-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/SimpleDateFormat.java (computeCenturyStart): New
+ 	method.
+ 	(defaultCenturyStart): Use it.
+ 	(readObject): Likewise.
+ 	(SimpleDateFormat): Clear the calendar.  Set the grouping on the
+ 	number format.
+ 	(parse): Copy the calendar before modifying it.  Correctly handle
+ 	the time zone.
+ 
+ 	* java/util/Calendar.java (clear): Set field value(s) to 0.
+ 
+ 2001-05-10  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* Calendar.java (get): Clear areFieldsSet if requested field
+ 	is not set.
+ 	(set): Unset fields that depend on new value.
+ 
+ 2001-05-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/GregorianCalendar.java (getLinearTime): Correctly
+ 	handle case when this year is a leap year but we haven't seen the
+ 	leap day yet.
+ 	(getLinearDay): Likewise.
+ 	(cleanUpAfterRoll): Now private.
+ 
+ 2001-05-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/GregorianCalendar.java (bundleName): Use `.', not `/',
+ 	as separator.
+ 
+ 2001-04-20  J. Russell Smyth  <drfish@uswest.net>
+ 
+ 	* java/math/BigInteger.java (forEachDigit): Corrected
+ 	ArrayIndexOutOfBounds exception.
+ 
+ 	* gnu/java/io/decode/DecoderEightBitLookup.java (convertToChars):
+ 	Corrected table lookup index.
+ 
+ 	* native/java.lang/Double.c (toString): Corrected format
+ 	specifiers for sprintf call to give better precision.
+ 
+ 2001-04-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/java.lang/Float.c (Java_java_lang_Float_toString): Fixed
+ 	first argument to sprintf.
+ 
+ 2001-04-20  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/text/SimpleDateFormat.java
+ 	(indexInArray): Removed private method.
+ 	(processYear): Removed private method.
+ 	(parseLenient): Removed private method.
+ 	(parseLeadingZeros): Removed private method.
+ 	(parseStrict): Removed private method.
+ 	(expect): Added new private method from libgcj.
+ 	(parse): Merge with libgcj version with minor fixes.
+ 
+ 2001-04-18  Jochen Hoenicke  <jochen@gnu.org>
+ 
+ 	* java/util/Random.java (next): Fixed the calculation to make it 
+ 	fully Sun compatible.
+ 
+ 2001-04-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/accessibility/AccessibleText.java (getAfterIndex, getAtIndex,
+ 	getBeforeIndex, getCharacterAttribute, getCharacterBounds,
+ 	getIndexAtPoint): Added missing identifiers.
+ 	* javax/accessibility/AccessibleValue.java
+ 	(setCurrentAccessibleValue): idem
+ 
+ 2001-04-15  Ian D. Stewart  <idstewart@softhome.net>
+ 
+ 	* javax/accessibility/AccessibleComponent.java (getAccessibleAt): Added
+ 	identifier 'point' to method declaration.
+ 
+ 2001-03-24  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/HashMap.java (HashMap): If 0 is given for initialCapacity 
+ 	paramater, bump it to 1.
+ 	* java/util/Hashtable.java (Hashtable): Likewise.
+ 
+ 2001-03-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/ExceptionInInitializerError.java: print classname for target
+ 	exception
+ 	* java/lang/reflect/InvocationTargetException.java: idem
+ 
+ 2001-03-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLClassLoader.java: new 1.2 class
+ 	* lib/standard.omit: add URLClassLoader.java
+ 
+ 2001-03-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/CharConversionException.java: merged with libgcj
+ 	* java/io/EOFException.java: idem
+ 	* java/io/FileNotFoundException.java: idem
+ 	* java/io/IOException.java: idem
+ 	* java/io/InterruptedIOException.java: idem
+ 	* java/io/ObjectStreamException.java: idem
+ 	* java/io/OptionalDataException.java: idem
+ 	* java/io/StreamCorruptedException.java: idem
+ 	* java/io/SyncFailedException.java: idem
+ 	* java/io/UTFDataFormatException.java: idem
+ 	* java/io/UnsupportedEncodingException.java: idem
+ 	* java/lang/AbstractMethodError.java: idem
+ 	* java/lang/ArithmeticException.java: idem
+ 	* java/lang/ArrayIndexOutOfBoundsException.java: idem
+ 	* java/lang/ArrayStoreException.java: idem
+ 	* java/lang/ClassCastException.java: idem
+ 	* java/lang/ClassCircularityError.java: idem
+ 	* java/lang/ClassFormatError.java: idem
+ 	* java/lang/CloneNotSupportedException.java: idem
+ 	* java/lang/Error.java: idem
+ 	* java/lang/Exception.java: idem
+ 	* java/lang/ExceptionInInitializerError.java: idem
+ 	* java/lang/IllegalAccessError.java: idem
+ 	* java/lang/IllegalAccessException.java: idem
+ 	* java/lang/IllegalArgumentException.java: idem
+ 	* java/lang/IllegalMonitorStateException.java: idem
+ 	* java/lang/IllegalStateException.java: idem
+ 	* java/lang/IllegalThreadStateException.java: idem
+ 	* java/lang/IncompatibleClassChangeError.java: idem
+ 	* java/lang/IndexOutOfBoundsException.java: idem
+ 	* java/lang/InstantiationError.java: idem
+ 	* java/lang/InstantiationException.java: idem
+ 	* java/lang/InternalError.java: idem
+ 	* java/lang/InterruptedException.java: idem
+ 	* java/lang/LinkageError.java: idem
+ 	* java/lang/NegativeArraySizeException.java: idem
+ 	* java/lang/NoClassDefFoundError.java: idem
+ 	* java/lang/NoSuchFieldError.java: idem
+ 	* java/lang/NoSuchFieldException.java: idem
+ 	* java/lang/NoSuchMethodError.java: idem
+ 	* java/lang/NoSuchMethodException.java: idem
+ 	* java/lang/NullPointerException.java: idem
+ 	* java/lang/NumberFormatException.java: idem
+ 	* java/lang/OutOfMemoryError.java: idem
+ 	* java/lang/RuntimeException.java: idem
+ 	* java/lang/SecurityException.java: idem
+ 	* java/lang/StackOverflowError.java: idem
+ 	* java/lang/StringIndexOutOfBoundsException.java: idem
+ 	* java/lang/ThreadDeath.java: idem
+ 	* java/lang/UnknownError.java: idem
+ 	* java/lang/UnsatisfiedLinkError.java: idem
+ 	* java/lang/UnsupportedOperationException.java: idem
+ 	* java/lang/VerifyError.java: idem
+ 	* java/lang/VirtualMachineError.java: idem
+ 	* java/lang/reflect/InvocationTargetException.java: idem
+ 	* java/net/BindException.java: idem
+ 	* java/net/ConnectException.java: idem
+ 	* java/net/MalformedURLException.java: idem
+ 	* java/net/NoRouteToHostException.java: idem
+ 	* java/net/ProtocolException.java: idem
+ 	* java/net/SocketException.java: idem
+ 	* java/net/UnknownHostException.java: idem
+ 	* java/net/UnknownServiceException.java: idem
+ 	* java/text/ParseException.java: idem
+ 
+ 2001-03-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectStreamClass.java (setUID): Don't write interface
+ 	info for array classes.
+ 
+ 2001-03-06  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/TreeSet.java (writeObject): Use a for-loop instead of
+ 	Iterator.hasNext().
+ 
+ 2001-03-05  Jochen Hoenicke  <jochen@gnu.org>
+ 
+ 	* java/util/TreeMap.java (writeObject): Use defaultWriteObject()
+ 	instead of the new JDK1.2 API.  This is simpler and makes 
+ 	back-porting the classes to JDK1.1 trivial.
+ 	(readObject): likewise.
+ 	* lib/mkcollections.pl.in (mymkdir): Give the permission parameter 
+ 	to mkdir.  Simplified the method.
+ 	(convert): Removed the hacks to convert the JDK1.2 api to 1.1, as 
+ 	they are no longer necessary.
+ 
+ 2001-02-22  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Fix for PR java/2040:
+ 	* java/util/HashMap.java (HashMap): Don't throw exception for 
+ 	loadFactor > 1. Add exception messages.
+ 	* java/util/Hashtable.java (Hashtable): Likewise.
+ 
+ 2001-02-21  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Disable libgcjx by default.
+ 	* configure.in: Add support for --enable-java-awt configure option. 
+ 	Use --enable-java-awt=xlib to build the xlib peers (libgcjx).
+ 	* Makefile.am: Make libgcjx conditional on XLIB_AWT, instead of NO_X.
+ 	* Makefile.in: Rebuilt.
+ 	* configure: Rebuilt.
+ 
+ 2001-02-20  Jochen Hoenicke <jochen@gnu.org>
+ 
+ 	* scripts/timezones.pl (parseOffset): Parse negative times
+ 	correctly. (parseTime): Likewise.
+ 	Adapted to new indentation in TimeZone.java.
+ 	Read in tzabbrevs.  Improved time zone sort order.
+ 	* scripts/tzabbrevs: New file containing abbreviated timezone as
+ 	specified in the JCL.  Corresponds to the change from Warren Levy
+ 	from 2001-01-09.
+ 	* java/util/TimeZone.java: Rebuild Timezone database from
+ 	tzdata2000h.
+ 
+ 2001-02-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/PipedWriter.java (flush): Throw exception if stream
+ 	closed.
+ 	* java/io/BufferedWriter.java (close): Clear `buffer'.
+ 	(flush): Throw IOException if stream is closed.
+ 	(write): Likewise.
+ 
+ 2001-02-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* java/lang/ThreadGroup.java (activeCount): Only include threads
+ 	which are alive.
+ 	(enumerate): Likewise.
+ 
+ 2001-02-18  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/ArrayList.java: Remove RCS keywords from comments
+ 	* java/util/BasicMapEntry.java: idem
+ 	* java/util/Dictionary.java: idem
+ 	* java/util/HashMap.java: idem
+ 	* java/util/HashSet.java: idem
+ 	* java/util/Hashtable.java: idem
+ 	* java/util/TreeMap.java: idem
+ 	* java/util/TreeSet.java: idem
+ 
+ 	* java/util/Collection.java: reindent
+ 
+ 	* java/util/ConcurrentModificationException.java: merge with libgcj
+ 	* java/util/EmptyStackException.java: idem
+ 	* java/util/Enumeration.java: idem
+ 	* java/util/EventListener.java: idem
+ 	* java/util/MissingResourceException.java: idem
+ 	* java/util/NoSuchElementException.java: idem
+ 	* java/util/Observable.java: idem
+ 	* java/util/Observer.java: idem
+ 	* java/util/Stack.java: idem
+ 	* java/util/TooManyListenersException.java: idem
+ 
+ 	* java/util/DoubleEnumeration.java: removed
+ 	* java/util/PropertyResourceBundle.java:
+ 	import gnu.java.util.DoubleEnumeration
+ 
+ 2001-02-16  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/io/BlockDataException.java: Removed.
+ 	* java/io/ObjectInputStream.java (readObject): Throw 
+ 	StreamCorruptedException, not BlockDataException.
+ 
+ 	* java/util/TreeSet.java (clone): Made subclass safe, use 
+ 	super.clone(), not new.
+ 	* java/util/TreeMap.java (clone): Likewise.
+ 
+ 	* java/util/TreeMap.java (nil): Made non-final.
+ 	(clone): Create new sentinal for copy.
+ 
+ 	* java/util/HashSet.java (clone): Made subclass safe, use 
+ 	super.clone(), not new.
+ 
+ 2001-02-15  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/HashMap.java: Rewritten.
+ 	* java/util/Hashtable.java: Rewritten based on new HashMap code.
+ 	* java/util/TreeMap.java: Rewritten.
+ 	* java/util/Bucket.java: Deleted.
+ 	* java/util/BasicMapEntry.java: Remove unneccessary comments. 
+ 	(equals): Simplified. Made final.
+ 	(getKey): Made final.
+ 	(getValue): Likewise.
+ 	(toString): New method.
+ 	* java/util/Collections.java (search): Use a for-loop, not iterator
+ 	hasNext().
+ 	(copy): Use a for-loop. Throw an IndexOutOfBoundsException if run out 
+ 	of elements in source.
+ 	(max): Use a for-loop.
+ 	(min): Ditto.
+ 	(reverse): Keep track of positions instead of using Iterator's 
+ 	nextIndex() and previousIndex().
+ 	(shuffle(List)): Initialize defaultRandom if required using 
+ 	double-check thread safety idiom. Call two-argument shuffle method 
+ 	using defaultRandom.
+ 	(defaultRandom): New field.
+ 	(shuffle(List, Random)): Use a for-loop. Keep track of pos instead of
+ 	using previousIndex() and nextIndex().
+ 	(singletonMap(iterator)): Use a HashMap.Entry, not BasicMapEntry.
+ 	(ReverseComparator): New static class.
+ 	(reverseOrder): Return static instance of ReverseComparator.	
+ 	* java/util/AbstractCollection.java (toString): Use a StringBuffer.
+ 	* java/util/AbstractMap.java (toString): Use StringBuffer.
+ 
+ 2001-02-09  Steve Mayer <SMayer@dynamicsoft.com>
+ 
+ 	* java/util/Timer.java (remove): Install new heap.
+ 
+ 2001-02-07  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/Arrays.java: Removed "cmp" methods.
+ 	(qsort): Don't use "cmp".
+ 	(med3): Likewise.
+ 
+ 2001-02-07  Mark Benvenuto  <mcb54@columbia.edu>
+ 
+ 	* java/util/Arrays.java (qsort): Handle N value of 7 with insertion
+ 	sort. Fix for PR java/1895.
+ 
+ 2001-01-25  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/io/DataInputStream.java: update copyright notice
+ 	* java/io/PrintWriter.java: idem
+ 	* java/io/Reader.java: idem
+ 	* java/io/StreamTokenizer.java: idem
+ 	* java/io/StringReader.java: idem
+ 	* java/lang/reflect/ReflectPermission.java: idem
+ 
+ 2001-01-23  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/security/AccessController.java: new file (stub implementation)
+ 
+ 2001-01-23  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: generate Makefiles for proper native directories
+ 	* native/Makefile.am: modify SUBDIRS to build from jni directory
+ 	* native/jni/.cvsignore: new file
+ 	* native/jni/Makefile.am: new file; combines all previous Makefile.am's in 
+ 	a subdirectory
+ 	* native/jni/acos.c: renamed from native/java.lang/acos.c
+ 	* native/jni/asin.c: renamed from native/java.lang/asin.c
+ 	* native/jni/atan.c: renamed from native/java.lang/atan.c
+ 	* native/jni/atan2.c: renamed from native/java.lang/atan2.c
+ 	* native/jni/ceil.c: renamed from native/java.lang/ceil.c
+ 	* native/jni/cos.c: renamed from native/java.lang/cos.c
+ 	* native/jni/e_fmod.c: renamed from native/java.lang/e_fmod.c
+ 	* native/jni/exp.c: renamed from native/java.lang/exp.c
+ 	* native/jni/fdlibm.h: renamed from native/java.lang/fdlibm.h
+ 	* native/jni/floor.c: renamed from native/java.lang/floor.c
+ 	* native/jni/java_io_File.c: renamed from native/java.io/File.c
+ 	* native/jni/java_io_FileDescriptor.c: renamed from native/java.io/FileDescriptor.c
+ 	* native/jni/java_io_FileInputStream.c: renamed from native/java.io/FileInputStream.c
+ 	* native/jni/java_io_FileOutputStream.c: renamed from native/java.io/FileOutputStream.c
+ 	* native/jni/java_io_ObjectInputStream.c: renamed from native/java.io/ObjectInputStream.c
+ 	* native/jni/java_io_ObjectOutputStream.c: renamed from native/java.io/ObjectOutputStream.c
+ 	* native/jni/java_io_RandomAccessFile.c: renamed from native/java.io/RandomAccessFile.c
+ 	* native/jni/java_lang_Double.c: renamed from native/java.lang/Double.c
+ 	* native/jni/java_lang_Float.c: renamed from native/java.lang/Float.c
+ 	* native/jni/java_lang_Object.c: renamed from native/java.lang/Object.c
+ 	* native/jni/java_lang_System.c: renamed from native/java.lang/System.c
+ 	* native/jni/java_lang_reflect_Array.c: renamed from native/java.lang.reflect/Array.c
+ 	* native/jni/java_math_BigInteger.c: renamed from native/java.math/BigInteger.c
+ 	* native/jni/java_net_InetAddress.c: renamed from native/java.net/InetAddress.c
+ 	* native/jni/java_net_PlainDatagramSocketImpl.c: renamed from native/java.net/PlainDatagramSocketImpl.c
+ 	* native/jni/java_net_PlainSocketImpl.c: renamed from native/java.net/PlainSocketImpl.c
+ 	* native/jni/java_util_ResourceBundle.c: renamed from native/java.util/ResourceBundle.c
+ 	* native/jni/java_util_TimeZone.c: renamed from native/java.util/TimeZone.c
+ 	* native/jni/javaio.c: renamed from native/java.io/javaio.c
+ 	* native/jni/javaio.h: renamed from native/java.io/javaio.h
+ 	* native/jni/javalang.c: renamed from native/java.lang/javalang.c
+ 	* native/jni/javalang.h: renamed from native/java.lang/javalang.h
+ 	* native/jni/javanet.c: renamed from native/java.net/javanet.c
+ 	* native/jni/javanet.h: renamed from native/java.net/javanet.h
+ 	* native/jni/k_cos.c: renamed from native/java.lang/k_cos.c
+ 	* native/jni/k_rem_pio2.c: renamed from native/java.lang/k_rem_pio2.c
+ 	* native/jni/k_sin.c: renamed from native/java.lang/k_sin.c
+ 	* native/jni/k_tan.c: renamed from native/java.lang/k_tan.c
+ 	* native/jni/log.c: renamed from native/java.lang/log.c
+ 	* native/jni/pow.c: renamed from native/java.lang/pow.c
+ 	* native/jni/remainder.c: renamed from native/java.lang/remainder.c
+ 	* native/jni/rint.c: renamed from native/java.lang/rint.c
+ 	* native/jni/s_fabs.c: renamed from native/java.lang/s_fabs.c
+ 	* native/jni/sin.c: renamed from native/java.lang/sin.c
+ 	* native/jni/sqrt.c: renamed from native/java.lang/sqrt.c
+ 	* native/jni/tan.c: renamed from native/java.lang/tan.c
+ 	* native/jni/awt/.cvsignore: new file
+ 	* native/jni/awt/Makefile.am: renamed from native/gnu.java.awt.peer.gtk/Makefile.am
+ 	* native/jni/awt/gnu_java_awt_image_GdkPixbufDecoder.c: renamed
+ 	from native/gnu.java.awt.image/gdkpixbufdecoder.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GdkFontMetrics.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gdkfontmetrics.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GdkGraphics.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gdkgraphics.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkButtonPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkbuttonpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkCanvasPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkcanvaspeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkcheckboxmenuitempeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkcheckboxpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkChoicePeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkchoicepeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkClipboard.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkclipboard.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkComponentPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkEvents.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkevents.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkfiledialogpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkImagePainter.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkimagepainter.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkLabelPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtklabelpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkListPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtklistpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkMainThread.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkmainthread.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkmenubarpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkmenuitempeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkMenuPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkmenupeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkPanelPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkpanelpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkpopupmenupeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkscrollpanepeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtktextareapeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtktextcomponentpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtktextfieldpeer.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkToolkit.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtktoolkit.c
+ 	* native/jni/awt/gnu_java_awt_peer_gtk_GtkWindowPeer.c: renamed
+ 	from native/gnu.java.awt.peer.gtk/gtkwindowpeer.c
+ 	* native/jni/awt/gthread-jni.c: renamed from 
+ 	native/gnu.java.awt.peer.gtk/gthread-jni.c
+ 	* native/jni/awt/gthread-jni.h: renamed from 
+ 	native/gnu.java.awt.peer.gtk/gthread-jni.h
+ 	* native/jni/awt/gtkpeer.h: renamed from 
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h
+ 	* native/jni/awt/native_state.c: renamed from 
+ 	native/gnu.java.awt.peer.gtk/native_state.c
+ 	* native/jni/awt/native_state.h: renamed from 
+ 	native/gnu.java.awt.peer.gtk/native_state.h
+ 	
+ 2001-01-19  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/text/SimpleDateFormat.java (format): Compute hour for cases
+ 	HOUR_OF_DAY1_FIELD (1-24), HOUR1_FIELD (1-12), and HOUR0_FIELD (0-11)
+ 	correctly.  Adjust properly from 0-23 clock hour.
+ 
+ 2001-01-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLDecoder.java: Thanks Edgar Villanueva (edgarvil@home.com)
+ 	(decode): fix comment, don't throw Exception
+ 
+ 2001-01-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/datatransfer/Clibboard.java:
+ 	(getContents, setContents): synchronized, add comment
+ 	* java/awt/datatransfer/DataFlavor.java:
+ 	(DataFlavor constructor): refactored,
+ 	if null set humanPresentable name to mimeType
+ 	(getParameter): renamed from getParamter
+ 	(equals(String)): deprecated
+ 	(hashCode): new method
+ 	(match): new method, XXX implemented as equals
+ 	(toString): new method
+ 	(getTextPlainUnicodeFlavor): new method, XXX returns plainTextFlavor
+ 	(getDefaultRepresentationClass): new method, XXX returns InputStream
+ 	(getDefaultRepresentationClassAsString): new method, XXX
+ 	(selectBestTextFlavor): new method
+ 	(getReaderForText): new method
+ 	* java/awt/datatransfer/FlavorMap.java: update comments
+ 	* java/awt/datatransfer/MimeTypeParseException.java: new class
+ 	* java/awt/datatransfer/SystemFlavorMap.java: new class XXX
+ 
+ 2001-01-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/ClassLoader.java: 1.2 updates
+ 	(loadClass(String)): now calls loadClass with resolve set to false not true
+ 	(loadClass(String,boolean)): no longer abstract
+ 	(getResource): now calls parent classloader first
+ 	(getResourceAsStream): Ditto
+ 	(defineClass): There is now a version which takes a ProtectionDomain,
+ 	but that needs native support
+ 	(findLibrary): new method
+ 	(getSystemResources):Ditto
+ 
+ 2001-01-10  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/math/BigDecimal.java (divide): Fixed comment.
+ 
+ 2001-01-10  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/math/BigDecimal.java (divide): Check newScale for validity.
+ 	Ensure that BigInteger.pow() is called with a non-negative value.
+ 	(setScale (int)): New public method.
+ 	(setScale (int,int)): New public method.
+ 
+ 2001-01-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/Class.java: 1.2 updates
+ 	(forName(String,boolean,ClassLoader)): new method
+ 	(getPackage): Ditto
+ 	(getProtectionDomain): Ditto
+ 	* java/lang/ClassLoader.java: 1.2 updates
+ 	(getParent): new method
+ 	(getSystemClassLoader): Ditto
+ 	(findClass): Ditto
+ 	(findResource): Ditto
+ 	(findResources): Ditto
+ 	(getResources): Ditto
+ 
+ 2001-01-09  Mark Wielaard <mark@klomp.org>
+ 
+ 	* gnu/java/util/DoubleEnumeration.java: new class, adapted from
+ 	java/util/DoubleEnumeration. Clears references earlier, handles null
+ 	and/or empty enumerations better.
+ 	* gnu/java/util/EmptyEnumeration.java: new class.
+ 
+ 2001-01-09  Oskar Liljeblad <osk@hem.passagen.se>
+ 
+ 	* java/io/StreamTokenizer.java (nextToken): Handle // and /* before
+ 	commentChar.  Fixed typos in comments.
+ 
+ 2001-01-09  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/io/StreamTokenizer.java: Don't throw a
+ 	NumberFormatException if a field is numeric as far as the
+ 	StreamTokenizer is concerned but not as far as Double.valueOf() is
+ 	concerned: return a zero instead.	
+ 
+ 2001-01-09  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/util/TimeZone.java: Add standard ID names per JCL; removed
+ 	non-standard ones.  Marked with XXX comments to note what code
+ 	should be removed after java.lang.System is merged with libgcj.
+ 
+ 2001-01-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/ClassLoader.java: 1.2 updates
+ 	(definedPackages, parent, systemClassLoader): new private fields
+ 	(ClassLoader): new constructor that takes a parent classloader
+ 	(definePackage, getPackage, getPackages): new protected methods
+ 	* java/lang/Package.java: 1.2 updates
+ 	(Package): change argument order to match ClassLoader.definePackage(),
+ 	throw NullPointerException when name == null
+ 	(getPackage, getPackages): implemented
+ 	* java/lang/Sysem.java: 1.2 updates
+ 	(setProperty): new method
+ 	(runFinalizersOnExit): deprecated
+ 
+ 2001-01-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Float.java: implements Comparable, new method compareTo()
+ 	* java/lang/Integer.java: Ditto
+ 	* java/lang/Long.java: Ditto
+ 	* java/lang/Short.java: Ditto
+ 	* java/lang/String.java: Ditto
+ 	(CASE_INSENSITIVE_ORDER): new field
+ 	(compareToIgnoreCase): new method
+ 
+ 2001-01-07  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/StringBuffer.java: Fix comments.
+ 
+ 2001-01-06  Brian Jones  <cbj@gnu.org>
+ 
+ 	* mauve-classpath: Mauve testing file can be used with Japhar.
+ 
+ 2001-01-06  Brian Jones  <cbj@gnu.org>
+ 
+ 	* Release classpath-0.02
+ 	* doc/www.gnu.org/announce/20010106.mhtml: New file.
+ 	* resource/japhar-0.09.patch.1: patch for Japhar 0.09 for 
+ 	GNU Classpath 0.02 release.
+ 	* NEWS: Added 0.02 release information.
+ 	* configure.in: Update release number, add additional Makefile output
+ 	files.
+ 	* doc/Makefile.am: New target 'docs' can be used to generate
+ 	formal postscript documentation.
+ 	* doc/texinfo.tex: Updated to tetex 1.0.7 release.
+ 	* doc/www.gnu.org/classpath.mhtml: Notice of license change and
+ 	other small enhancements.
+ 	* gnu/java/beans/Makefile.am: Removed ChangeLog from EXTRA_DIST
+ 	* gnu/java/beans/editors/Makefile.am: Ditto.
+ 	* gnu/java/beans/info/Makefile.am: Ditto.
+ 	* gnu/java/io/Makefile.am: Ditto
+ 	* gnu/java/io/decode/Makefile.am: Ditto.
+ 	* gnu/java/io/encode/Makefile.am: Ditto.
+ 	* gnu/java/lang/Makefile.am: Ditto.
+ 	* gnu/java/lang/reflect/Makefile.am: Ditto.
+ 	* gnu/java/net/content/text/Makefile.am: Ditto.
+ 	* java/beans/Makefile.am: Ditto.
+ 	* java/lang/reflect/Makefile.am: Ditto.
+ 	* java/net/Makefile.am: Ditto.
+ 	* java/util/Makefile.am: Ditto.
+ 	* resource/Makefile.am: Add japhar-0.09.patch.1 to EXTRA_DIST
+ 	* resource/java/security/Makefile.am: Rules to install security
+ 	policy in $(libdir)/security.
+ 
+ 2001-01-06  Anthony Green  <green@redhat.com>
+ 
+ 	* java/beans/PropertyDescriptor.java: Fix comment.
+ 	* java/io/PushbackReader.java: Fix comment.
+ 	* java/io/ObjectStreamClass.java: Fix comment.
+ 	* java/io/DataInputStream.java: Fix comment.
+ 	* java/io/PipedInputStream.java: Fix comments.
+ 	* java/io/PipedReader.java: Fix comments.
+ 	* java/sql/DatabaseMetaData.java: Fix comments.
+ 
+ 2000-12-17  Brian Jones  <cbj@gnu.org>
+ 
+ 	* doc/hacking.texinfo: Updated slightly.
+ 	* doc/vmintegration.texinfo: Updated slightly.
+ 	* resource/java/security/classpath.security: New file.
+ 	* resource/java/security/Makefile.am: New file.
+ 	* resource/java/security/.cvsignore: New file.
+ 	* resource/java/Makefile.am: Add security to SUBDIRS.
+ 
+ 2001-01-06  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* test/java.io/PipedReaderWriterTest.java: Use Thread.sleep() to 
+ 	implement delay, not System.gc().
+ 	* test/java.io/PipedStreamTest.java: Ditto.
+ 
+ 	* java/io/PipedReader: Synchronize on "lock" instead of this.
+ 
+ 2001-01-05  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* test/java.io/RandomAccessFileTest.java: Fix overflow of integer 
+ 	constant.
+ 	* test/java.io/dataoutput-jdk.out: Update with corrected JDK output.
+ 
+ 	* java/io/PipedInputStream: Rewritten. Now simpler and more correct.
+ 	* java/io/PipedOutputStream: Updated to match new PipedInputStream.
+ 	* java/io/PipedReader: New implementation based on new
+ 	PipedInputStream.
+ 	* java/io/PipedWriter: Updated to match new PipedReader.
+ 
+ 2000-12-27  Jeff Sturm  <jeff.sturm@commerceone.com>
+ 
+ 	* java/sql/DriverManager.java (getConnection): Don't set user/password
+ 	properties if null.
+ 
+ 2000-12-27  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/util/Calendar.java: Fix typo in comment.
+ 	(set): Set 24-hour clock hour instead of 12-hour clock hour.
+ 	* java/util/TimeZone.java (getDefaultDisplayName): Casts to char
+ 	needed for evaluating numbers '0' to '9' in printouts of GMT offsets.
+ 
+ 2000-12-26  Petter Reinholdtsen  <pere@hungry.com>
+ 
+ 	* java/sql/SQLWarning.java: Fixed typo in comment.
+ 
+ 2000-12-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/beans/PropertyChangeListener.java: Extends EventListener.
+ 	* java/beans/VetoableChangeListener.java: Extends EventListener.
+ 
+ 2000-12-17  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/ArrayList.java (data): Declare transient.
+ 	(serialPersistantFields): Removed.
+ 	(readObject): Use defaultReadObject(), not readFields().
+ 	(writeObject): Use defaultWriteObject(), not writeFields().
+ 
+ 2000-12-17  Brian Jones  <cbj@gnu.org>
+ 
+ 	* java/util/ArrayList.java: Changes made to let a given Perl script
+ 	produce the correct collections api in a different package for
+ 	Java 1.1. 
+ 	writeObject(): renamed variable to oFields
+ 	readObject(): renamed variable to iFields
+ 	* configure.in: create lib/mkcollections.pl
+ 	* lib/Makefile.am: distribute mkcollections.pl.in
+ 	* lib/mkcollections.pl.in: creates copies of collections classes
+ 	in a new user defined package name space for use in Java 1.1 
+ 	projects, contributed by Jochen Hoenicke 
+ 	<Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>.
+ 
+ 2000-12-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/RuntimePermission.java: Class now final.
+ 
+ 	* java/io/SerializablePermission.java (legal_names): Now private.
+ 
+ 2000-12-14  Brian Jones  <cbj@gnu.org>
+ 
+ 	* acinclude.m4 : CLASSPATH_INTERNAL_CHECK_JAPHAR takes an optional 
+ 	argument such that specifying the prefix to Japhar now works, 
+ 	allowing the user to have multiple installations of Japhar and yet 
+ 	configure for a specific installation.
+ 
+ 2000-12-10  Brian Jones  <cbj@gnu.org>
+ 
+ 	* configure.in : commented out code to assume Japhar if not 
+ 	otherwise specified.  Compiling without Japhar is almost 
+ 	easy now.
+ 
+ 2000-12-10  Brian Jones  <cbj@gnu.org>
+ 
+ 	* configure.in : fixed a small syntax error
+ 
+ 2000-12-10  Brian Jones  <cbj@gnu.org>
+ 
+ 	* gnu/classpath/.cvsignore : Ignore Configuration.java
+ 	* native/java.lang/System.c (Java_java_lang_System_setIn) : fixed 
+ 	call to GetStaticFieldID().
+ 	(Java_java_lang_System_setOut) : Ditto.
+ 	(Java_java_lang_System_setErr) : Ditto.
+ 	* java/lang/Makefile.am : Removed Throwable.java
+ 	* vm/reference/java/lang/Makefile.am : Added Throwable.java.  
+ 	Throwable.java is now part of the VM interface.
+ 
+ 2000-12-09  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/io/DataInputStream.java (readBoolean): Use convertToBoolean().
+ 	(readByte): Use convertToByte().
+ 	(readChar): Use convertToChar().
+ 	(readInt): Use convertToInt().
+ 	(readLong): Use convertToLong().
+ 	(readShort): Use convertToShort().
+ 	(readUnsignedByte): Use convertToUnsignedByte().
+ 	(readUnsignedShort): Use convertToUnsignedShort().
+ 	(readUTF): Use convertToUTF().
+ 
+ 	(convertToBoolean): Resurrected.
+ 	(convertToByte): Ditto.
+ 	(convertToChar): Ditto.
+ 	(convertToInt): Ditto.
+ 	(convertToLong): Ditto.
+ 	(convertToShort): Ditto.
+ 	(convertToUnsignedByte): Ditto.
+ 	(convertToUnsignedShort): Ditto.
+ 	(convertToUTF): Ditto.
+ 
+ 	* java/io/BufferedReader (DEFAULT_BUFFER_SIZE): Restored.
+ 	(BufferedReader): Use it.
+ 
+ 2000-12-08  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/lang/StringBuffer.java (insert(int,char[])): Avoid
+ 	NullPointerException so proper check of offset can be done.
+ 
+ 2000-12-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/BitSet.java: Class no longer final.
+ 
+ 2000-12-06  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* java/util/Random.java (nextDouble): Use 1L for bit-shift, not 1
+ 	integer. From Christian Grothoff <grothoff@cs.purdue.edu>.
+ 
+ 2000-12-03  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* java/io/FilePermission.java: Made class final per spec.
+ 	* java/util/LinkedList.java: Implements List.
+ 
+ 2000-12-03 01:00  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/beans/ChangeLog: removed
+ 	* gnu/java/beans/editors/ChangeLog: removed
+ 	* gnu/java/beans/info/ChangeLog: removed
+ 	* gnu/java/io/ChangeLog: removed
+ 	* gnu/java/io/decode/ChangeLog: removed
+ 	* gnu/java/io/encode/ChangeLog: removed
+ 	* gnu/java/lang/ChangeLog: removed
+ 	* gnu/java/lang/reflect/ChangeLog: removed
+ 	* gnu/java/net/content/text/ChangeLog: removed
+ 	* java/beans/ChangeLog: removed
+ 	* java/io/ChangeLog: removed
+ 	* java/lang/reflect/ChangeLog: removed
+ 	* java/net/ChangeLog: removed
+ 	* java/util/ChangeLog: removed
+ 	* native/java.io/ChangeLog: removed
+ 	* native/java.lang.reflect/ChangeLog: removed
+ 	* native/java.net/ChangeLog: removed
+ 	* native/lib/ChangeLog: removed
+ 	* native/vmi/ChangeLog: removed
+ 	* test/java.io/ChangeLog: removed
+ 	
+ 2000-12-02 04:16  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/util/Vector.java (insertElementAt): Unconditionally 
+ 	increment elementCount.  
+ 	(removeRange): Clear unused slots in vector.  
+ 
+ 2000-12-02 01:52  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	From Adam Welc <welc@cs.purdue.edu>: 
+ 	* java/util/LinkedList.java (removeFirst): Update `first' field.  
+ 	Handle the last == first case.  
+ 	(removeLast): Update `last' field. Handle the last == first case.  
+ 
+ 2000-12-01 01:42  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/sql/Array.java: Adjusted class signature to match spec.  
+ 	* java/sql/BatchUpdateException.java: Ditto.  
+ 	* java/sql/Blob.java: Ditto.  
+ 	* java/sql/CallableStatement.java: Ditto.  
+ 	* java/sql/Clob.java: Ditto.  
+ 	* java/sql/DataTruncation.java: Ditto.  
+ 	* java/sql/Driver.java: Ditto.  
+ 	* java/sql/Ref.java: Ditto.  
+ 	* java/sql/ResultSetMetaData.java: Ditto.  
+ 	* java/sql/SQLData.java: Ditto.  
+ 	* java/sql/SQLException.java: Ditto.  
+ 	* java/sql/SQLInput.java: Ditto.  
+ 	* java/sql/SQLWarning.java: Ditto.  
+ 	* java/sql/Statement.java: Ditto.  
+ 	* java/sql/Struct.java: Ditto.  
+ 	* java/sql/Connection.java: Ditto.  
+ 	(setTransactionIsolation): Renamed to match the spec.  
+ 	* java/sql/DatabaseMetaData.java: Ditto on class signature.  
+ 	(supportsResultSetType): Renamed to match the spec.  
+ 	* java/sql/PreparedStatement.java: Ditto on class signature.  
+ 	(addBatch): New abstract method.  
+ 	* java/sql/ResultSet.java: Ditto on class signature.  
+ 	(first): returns boolean.  
+ 	(last): returns boolean.  
+ 	* java/sql/SQLOutput.java: Ditto on class signature.  
+ 	(writeAsciiStream): New abstract method.  
+ 	* java/sql/DriverManager.java (registerDriver): Throws
+ 	
+ 	SQLException.  
+ 	(deregisterDriver): Throws SQLException.  
+ 
+ 2000-11-28 20:18  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/text/DateFormatSymbols.java (formatPrefixes): Made field static. 
+ 	* java/text/SimpleDateFormat.java (format): Added case for 
+ 	TIMEZONE_FIELD.  
+ 
+ 2000-11-28 11:15  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/doc/Makefile: added *.mhtml to MHTML_SRC, thanks
+ 	to John Keiser (jkeiser@iname.com) 
+ 
+ 2000-11-28 04:54  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/io/DataInputStream.java: Merge libgcj implementation.  
+ 	* java/io/BufferedReader.java: Ditto.  
+ 
+ 2000-11-28 01:52  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/text/SimpleDateFormat.java: Minor formatting fixes.  
+ 
+ 2000-11-28 01:38  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* gnu/java/locale/LocaleInformation_en.java (localPatternChars): 
+ 	Letters 'k' and 'h' were reversed from the spec.  
+ 	* java/text/DateFormat.java: Minor formatting fixes.  
+ 	(DEFAULT): Added comment to note discrepancy against JCL.  
+ 	(equals): Check that numberFormat is equals (per JCL).  
+ 	* java/text/SimpleDateFormat.java (tokens): Made transient.  
+ 	(serialVersionUID): Added new field.  
+ 	(readObject): Added serialization method.  
+ 	(standardChars): Added new private field.  
+ 	(SimpleDateFormat): Rewrote constructors to match JCL.  Merged 
+ 	from libgcj.  
+ 	(toLocalizedPattern): Merged from libgcj.  
+ 	(applyLocalizedPattern): Merged from libgcj.  
+ 	(format): Merged from libgcj; now handles pos.  
+ 	(parseLenient): Made private.  
+ 	(parseStrict): Made private.  
+ 	* java/util/TimeZone.java: Use user.timezone property if set.  
+ 	(setRawOffset): Added abstract method per spec.  
+ 	(getTimeZone): Changed comment to reflect that GMT is the default.  
+ 
+ 2000-11-28 00:16  Brian Jones <cbj@gnu.org>
+ 
+ 	* acconfig.h: added DEBUG 
+ 	* configure.in: Add Configuration.java to CONFIG_FILES. Set
+ 	LIBGCJDEBUG substitution if --enable-libgcj-debug is specified 
+ 	* gnu/Makefile.am: added classpath to SUBDIRS 
+ 	* gnu/classpath/.cvsignore: New file 
+ 	* gnu/classpath/Configuration.java.in: New file 
+ 	* gnu/classpath/Makefile.am: New file 
+ 
+ 2000-11-28 00:06  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: target ChangeLog uses --fsf for cvs2cl 
+ 
+ 2000-11-27 23:17  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/: classpath.mhtml, announce/19990206.mhtml,
+ 	announce/20001120.mhtml, announce/Makefile,
+ 	announce/announcements.mhtml: 
+ 	* classpath.mhtml: new announcment added to announce list 
+ 	* Makefile: symbolically link to announcements.html instead of a
+ 	specific announcement 
+ 	* 19990206.mhtml: fixed ftp link to download source 
+ 	* 20001120.mhtml: new announcment of classpath 0.01 release 
+ 	* announcements.mhtml: new index.html file instead of pointing to a
+ 	specific announcment 
+ 
+ 2000-11-27 08:28  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/Vector.java (ensureCapacity): Don't increment modCount.  
+ 	(addElement): Don't increment elementCount twice. Doh.  
+ 	* java/util/ArrayList.java (add): Only call ensureCapacity if the 
+ 	array needs to be expanded.  
+ 	(addAll): Ditto.  
+ 	* java/util/Collections.java (UnmodifiableCollection): Implement 
+ 	toString().  
+ 	(UnmodifiableList): Throw UnsupportedOperationException from 
+ 	modification methods. Set `l' from the one-parameter constructor.  
+ 	(UnmodifiableMap): Implement toString().  
+ 	(SynchronizedCollection): Ditto.  
+ 	(SynchronizedList): Set `l' from the one-parameter constructor.  
+ 	(SynchronizedSortedSet): Set `ss' from the one-parameter constructor.  
+ 	(SynchronizedMap): Implement toString().  
+ 
+ 2000-11-26 22:37  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/: ArrayList.java, List.java, SimpleTimeZone.java: These
+ 	changes were ommitted from my last check-in. Oops.  
+ 
+ 2000-11-23 05:19  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/Vector.java: 2000-11-23  Bryce McKinlay 
+ 	<bryce@albatross.co.nz> 
+ 	
+ 	* java/util/Vector.java: Improve exception messages.  
+ 	(Vector): Check initialCapacity for IllegalArgumentException.  
+ 	(tromToSize): Don't check for elementCount == elementData.length 
+ 	case.  
+ 	(toArray): Don't try to set null marker if target array is the same 
+ 	length as the vector.  
+ 
+ 2000-11-21 04:23  Brian Jones <cbj@gnu.org>
+ 
+ 	* javax/accessibility/: Accessible.java, AccessibleAction.java,
+ 	AccessibleBundle.java, AccessibleComponent.java,
+ 	AccessibleContext.java, AccessibleHyperlink.java,
+ 	AccessibleHypertext.java, AccessibleResourceBundle.java,
+ 	AccessibleRole.java, AccessibleSelection.java,
+ 	AccessibleState.java, AccessibleStateSet.java, AccessibleText.java,
+ 	AccessibleValue.java, package.html: 
+ 	* javax.accessibility initial checkin, missing most abstract classes 
+ 
+ 2000-11-20 18:22  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/lang/reflect/ReflectPermission.java: 
+ 	* java/lang/reflect/ReflectPermission.java: New file.  
+ 
+ 2000-11-20 05:01  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: Makefile.am: added ChangeLog target 
+ 
+ 2000-11-20 04:39  Brian Jones <cbj@gnu.org>
+ 
+ 	* NEWS: NEWS: added sparce information concerning the 0.01 release 
+ 
+ 2000-11-20 04:38  Brian Jones <cbj@gnu.org>
+ 
+ 	* AUTHORS: AUTHORS: added many people from the GCJ team, please let
+ 	me know if I missed someone 
+ 
+ 2000-11-20 04:29  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: Makefile.am: added HACKING to EXTRA_DIST 
+ 
+ 2000-11-20 04:05  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile.am: Makefile.am: added
+ 	headers to _SOURCES, removed HEADERS variable 
+ 
+ 2000-11-20 04:01  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile.am: Makefile.am: added
+ 	HEADERS option for distributed header files 
+ 
+ 2000-11-20 03:47  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: Makefile.am: added com to SUBDIRS 
+ 
+ 2000-11-20 03:46  Brian Jones <cbj@gnu.org>
+ 
+ 	* com/sun/javadoc/.cvsignore, com/sun/javadoc/Makefile.am,
+ 	com/sun/.cvsignore, com/sun/Makefile.am, com/.cvsignore,
+ 	com/Makefile.am, gnu/java/security/util/.cvsignore,
+ 	java/applet/.cvsignore, java/sql/.cvsignore: initial commit 
+ 
+ 2000-11-20 03:45  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: configure.in: added new directory Makefiles to
+ 	output 
+ 
+ 2000-11-20 03:34  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/Makefile.am: Makefile.am: added sql to SUBDIRS 
+ 
+ 2000-11-20 03:33  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/Makefile.am: Makefile.am: added applet to SUBDIRS 
+ 
+ 2000-11-20 03:29  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/security/Makefile.am: Makefile.am: added der to SUBDIRS 
+ 
+ 2000-11-20 03:29  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/security/der/: .cvsignore, Makefile.am: initial checkin 
+ 
+ 2000-11-20 03:24  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/Makefile.am: Makefile.am: typo fixed 
+ 
+ 2000-11-20 02:59  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/sql/Makefile.am: Makefile.am: initial checkin 
+ 
+ 2000-11-20 02:35  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/security/Makefile.am: Makefile.am: added util to SUBDIRS 
+ 
+ 2000-11-20 02:33  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/security/provider/Makefile.am,
+ 	gnu/java/locale/Makefile.am, java/awt/Makefile.am,
+ 	java/security/Makefile.am, java/security/interfaces/Makefile.am,
+ 	java/security/spec/Makefile.am, java/text/Makefile.am,
+ 	java/util/Makefile.am, gnu/java/security/provider/Makefile.am: 
+ 	Makefile.am: updated EXTRA_DIST 
+ 
+ 2000-11-20 02:33  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/applet/Makefile.am, gnu/java/security/util/Makefile.am: 
+ 	Makefile.am: initial commit 
+ 
+ 2000-11-20 02:01  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/Makefile.am: Makefile.am: added
+ 	GtkRadioButtonPeer.java to EXTRA_DIST 
+ 
+ 2000-11-20 02:00  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/image/Makefile.am: Makefile.am: added
+ 	GdkPixbufDecoder.java, GtkOffScreenDecoder.java to EXTRA_DIST 
+ 
+ 2000-11-20 01:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/Makefile.am: Makefile.am: added
+ 	GtkToggleButtonPeer.java to EXTRA_DIST 
+ 
+ 2000-11-20 01:48  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/Makefile.am: Makefile.am: EXTRA_DIST
+ 	updated 
+ 
+ 2000-11-20 01:40  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: configure.in: create a Makefile in classpath/javax 
+ 
+ 2000-11-20 01:36  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: Makefile.am: added javax to SUBDIRS 
+ 
+ 2000-11-20 01:36  Brian Jones <cbj@gnu.org>
+ 
+ 	* javax/: .cvsignore, Makefile.am: Makefile.am: initial commit 
+ 	.cvsignore: initial commit 
+ 
+ 2000-11-20 01:26  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/Makefile.am: Makefile.am: added awt to SUBDIRS 
+ 
+ 2000-11-20 00:13  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: mkdep.pl.in: changed HEADERS to CP_HEADERS 
+ 
+ 2000-11-20 00:13  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: Makefile.am: removed +M for jikes compilation 
+ 	changed HEADERS to CP_HEADERS due to a conflicting autoconf variable 
+ 	auto-included in the dist target put glibj.zip back into the dist
+ 	
+ 	target 
+ 
+ 2000-11-19 23:49  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: configure.in: VERSION => 0.01 (oops) 
+ 
+ 2000-11-19 23:15  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/Makefile.am: Makefile.am: removed gnu.java.awt.image from
+ 	SUBDIRS 
+ 
+ 2000-11-19 23:14  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: configure.in: removed native/gnu.java.awt.image
+ 	from build since it does not compile and is not needed for a release 
+ 
+ 2000-11-19 22:52  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: configure.in: 	avoid putting -O2 in CFLAGS, Red Hat
+ 	7 gcc 2.96 fails to compile otherwise 
+ 
+ 2000-11-19 22:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: configure.in: VERSION => 0.02 
+ 
+ 2000-11-19 21:47  Brian Jones <cbj@gnu.org>
+ 
+ 	* vm/kaffe/: .cvsignore, java/.cvsignore, kaffe/.cvsignore,
+ 	native/.cvsignore: classpath/vm/kaffe/.cvsignore: ignore
+ 	Makefile.in, Makefile classpath/vm/kaffe/java/.cvsignore: ignore
+ 	Makefile.in, Makefile classpath/vm/kaffe/kaffe/.cvsignore: ignore
+ 	Makefile.in, Makefile classpath/vm/kaffe/native/.cvsignore: ignore
+ 	Makefile.in, Makefile 
+ 
+ 2000-11-18 07:30  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/classpath.mhtml: classpath.mhtml: links to
+ 	mailing list web pages at gnu added 
+ 
+ 2000-11-18 02:23  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/util/PropertyPermission.java: 
+ 	* java/util/PropertyPermission.java (actionStrings): Now `final'.  
+ 	(equals): New method.  
+ 
+ 2000-11-18 01:06  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/jar/: Attributes.java, JarFile.java: 
+ 	Merge with libgcj (fixes by Anthony Green and Mark Wielaard) 
+ 	* java/util/jar/Attributes.java: Correct comment spelling.  
+ 	* java/util/jar/JarFile.java: Constructor that takes mode now 
+ 	calls super. Don't call java.util.zip.ZipFile.getEntry twice.  
+ 
+ 2000-11-17 04:47  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/util/Arrays.java: 
+ 	Fixes for Java 2 compatibility: 
+ 	* java/util/Arrays.java (sort(byte[],int,int)): New method.  
+ 	(sort(char[],int,int)): Likewise.  
+ 	(sort(double[],int,int)): Likewise.  
+ 	(sort(float[],int,int)): Likewise.  
+ 	(sort(int[],int,int)): Likewise.  
+ 	(sort(long[],int,int)): Likewise.  
+ 	(sort(short[],int,int)): Likewise.  
+ 
+ 2000-11-17 04:46  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/io/PushbackReader.java: 
+ 	Merged with libgcj: 
+ 	* java/io/PushbackReader.java (PushbackReader): Throw correct 
+ 	exception if buffer size not positive.  
+ 	(close): Reset buf.  Synchronize.  
+ 	(mark, reset): Minor changes to exception text.  
+ 	(ready): Throw exception if stream closed.  Synchronize.  
+ 	(skip): Indentation cleanup.  Fixed synchronization.  
+ 	(read): Fixed synchronization.  Throw exception if stream closed.  
+ 	Indentation cleanup.  
+ 	(read(char[],int,int)): Use libgcj implementation.  
+ 	(unread): Fixed synchronization, indentation.  
+ 	(unread(char[],int,int): Use libgcj implementation.  
+ 
+ 2000-11-17 04:39  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/Locale.java: 
+ 	* java/util/Locale.java: Fix reformatting screw-up.  
+ 
+ 2000-11-17 03:41  Brian Jones <cbj@gnu.org>
+ 
+ 	* HACKING: # removed duplicate todo list, read todo items in TODO
+ 	instead 
+ 
+ 2000-11-16 21:34  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/beans/: PropertyChangeSupport.java,
+ 	VetoableChangeSupport.java: 
+ 	* java/beans/PropertyChangeSupport.java (propertyListeners): Made 
+ 	transient.  
+ 	(listeners): Made transient.  
+ 	(source): Renamed from 'bean'.  
+ 	(children): New field for serialization.  
+ 	(propertyChangeSupportSerializedDataVersion): Ditto.  
+ 	(serialVersionUID): Ditto.  
+ 	(writeObject): New serialization method.  
+ 	(readObject): New serialization method.  
+ 	* java/beans/VetoableChangeSupport.java (propertyListeners): Made 
+ 	transient.  
+ 	(listeners): Made transient.  
+ 	(source): Renamed from 'bean'.  
+ 	(children): New field for serialization.  
+ 	(vetoableChangeSupportSerializedDataVersion): Ditto.  
+ 	(serialVersionUID): Ditto.  
+ 	(writeObject): New serialization method.  
+ 	(readObject): New serialization method.  
+ 	Serialization mods.  
+ 
+ 2000-11-16 04:50  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: typo: Systm -> System typo: there
+ 	-> their 
+ 
+ 2000-11-16 04:05  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: dumpElement (String): removed
+ 	extraneous semi-colon dumpElementln (String): removed extraneous
+ 	semi-colon setDump (boolean): removed reference to this in static
+ 	method 
+ 
+ 2000-11-03 08:14  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectInputStream.java: 
+ 	* java/io/ObjectInputStream.java (readObject): Added code to 
+ 	conditionally dump out the serialized data.  
+ 	Handle ENDBLOCKDATA case a bit more gracefully since the current 
+ 	behavior doesn't seem to work as expected.  
+ 	(readStreamHeader): Added code for serialized data dumper.  
+ 	(readNextBlock): Ditto.  
+ 	(readFields): Ditto.  
+ 	(dump): New private static field for turning on/off dumper.  
+ 	(setDump): New method.  
+ 	(dumpElement): New method.  
+ 	(dumpElementln): New method.  
+ 	Serialization dumper.  Enable by calling 
+ 	java.io.ObjectInputStream.setDump(true) in your test program.  The
+ 	output will be generated as the object is deserialized (i.e. the 
+ 	readObject() method is executed).  
+ 
+ 2000-11-03 03:59  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/: AbstractList.java, LinkedList.java: 2000-11-03  Bryce
+ 	McKinlay  <bryce@albatross.co.nz> 
+ 	
+ 	* java/util/AbstractList.java (SubList): Make it a top-level
+ 	
+ 	private 
+ 	class.  
+ 	* java/util/LinkedList.java (remove): Do update modCount and
+ 	
+ 	knownMod.  
+ 	(add): Ditto.  
+ 
+ 2000-11-02 10:12  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/: io/FileReader.java, io/Reader.java, io/StringReader.java,
+ 	util/AbstractList.java, util/AbstractSequentialList.java,
+ 	util/ArrayList.java, util/LinkedList.java: 2000-11-02  Bryce
+ 	McKinlay  <bryce@albatross.co.nz> 
+ 	
+ 	* java/util/AbstractList.java: Throw messages with 
+ 	IndexOutOfBoundsExceptions.  
+ 	(listIterator()): Call listIterator(0).  
+ 	(size): New field. Initialize to size().  
+ 	(hasNext): Test position against size, not size().  
+ 	(remove): Increment knownMod by one instead of resetting it from 
+ 	modCount.  
+ 	(add): Ditto.  
+ 	(SubList.upMod): Removed.  
+ 	(SubList.set): Don't call upMod() or update knownMod.  
+ 	(SubList.add(int,Object)): Increment modCount instead of calling 
+ 	upMod().  
+ 	(SubList.remove): Ditto.  
+ 	(SubList.addAll): Don't call backingList.size(). Increment size
+ 	
+ 	from 
+ 	c.size().  
+ 	(SubList.iterator): New method. Call listIterator(0).  
+ 	(SubList.listIterator): New method. Restore code to return an 
+ 	anonymous listIterator implementation (with some changes).  
+ 	* java/util/AbstractSequentialList.java: Throw messages with 
+ 	IndexOutOfBoundsExceptions.  
+ 	(addAll): Add a specnote.  
+ 	* java/util/ArrayList.java (removeRange): Get the math right.  
+ 	(addAll): Increment modCount _before_ creating iterator.  
+ 	* java/util/LinkedList.java: Rewritten, mostly.  
+ 	
+ 	* java/util/BitSet.java: Merged with libgcj implementation.  
+ 	* java/io/Reader.java: Ditto.  
+ 	* java/io/FileReader.java: Ditto.  
+ 	* java/io/StringReader.java: Ditto.  
+ 
+ 2000-10-30 02:02  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/: AbstractCollection.java, AbstractList.java,
+ 	AbstractMap.java, AbstractSequentialList.java, AbstractSet.java,
+ 	ArrayList.java: 2000-10-29  Bryce McKinlay  <bryce@albatross.co.nz> 
+ 	
+ 	* java/util/AbstractCollection.java (addAll): Use size() instead of 
+ 	hasNext() in iterator loop.  
+ 	(clear): Ditto.  
+ 	(contains): Ditto. Simplify loop.  
+ 	(containsAll): Ditto.  
+ 	(remove): Ditto.  
+ 	(removeAll): Ditto.  
+ 	(retainAll): Ditto.  
+ 	(toArray): Ditto.  
+ 	(toString): Ditto. Use string concatenation operators, not 
+ 	StringBuffer.  
+ 	* java/util/AbstractList.java (addAll): Use size() instead of 
+ 	hasNext() in iterator loop.  
+ 	(equals): Ditto.  
+ 	(hashCode): Ditto.  
+ 	(indexOf): Ditto. Don't take null check outside of the loop.  
+ 	(iterator): Return an AbstractListItr instead of anonymous class.  
+ 	(lastIndexOf): Use a for loop bounded by size() instead of 
+ 	hasPrevious() in iterator loop.  
+ 	(listIterator): Return an AbstractListItr.  
+ 	(removeRange): Remove bounds checking code and docs.  
+ 	(AbstractListItr): New inner class. Code moved here from 
+ 	listIterator().  
+ 	(SubList.iterator): Removed. Use default implementation from 
+ 	AbstractList instead.  
+ 	(SubList.listIterator): As above.  
+ 	* java/util/AbstractMap.java (clear): Use a for loop bounded by
+ 	
+ 	size() 
+ 	instead of hasNext() in iterator loop.  
+ 	(containsValue): Ditto.  
+ 	(equals): Ditto.  
+ 	(get): Ditto.  
+ 	(put): Ditto.  
+ 	(putAll): Ditto.  
+ 	(remove): Ditto.  
+ 	(toString): Ditto. Use string concatenation operators, not 
+ 	StringBuffer.  
+ 	* java/util/AbstractSequentialList.java (addAll): Use a for loop 
+ 	bounded by size() instead of hasNext() in iterator loop.  
+ 	* java/util/AbstractSet.java (hashCode): Don't catch exception as 
+ 	part of normal execution flow. Do an explicit null check instead.  
+ 	* java/util/ArrayList.java (_iSize): Rename to `size'.  
+ 	(_arData): Rename to `data'.  
+ 	(get): Check lower bounds also. Simplify IndexOutOfBoundsException 
+ 	message.  
+ 	(remove): Ditto.  
+ 	(removeRange): Make protected. Don't check bounds.  
+ 	(add): Check lower bounds also. Simplify IndexOutOfBoundsException 
+ 	message.  
+ 	(addAll (Collection)): Use a size-bounded for loop instead of
+ 	
+ 	hasNext() 
+ 	check.  
+ 	(addAll (int, Collection)): Check lower bounds. Simplify exception 
+ 	string.  
+ 	(clone): Clone the data array too.  
+ 	(indexOf): Inline doesEqual().  
+ 	(lastIndexOf): Ditto.  
+ 	(clear): Don't set array data to null.  
+ 	(set): Check lower bounds. Simplify exception string.  
+ 	(toArray): Correct comment.  
+ 	(trimToSize): Don't update modCount, this is not a structural
+ 	
+ 	change.  
+ 	Add comment.  
+ 
+ 2000-10-30 01:56  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/: AbstractCollection.java, AbstractList.java,
+ 	AbstractMap.java, AbstractSequentialList.java, AbstractSet.java,
+ 	ArrayList.java, BitSet.java: 2000-10-29  Bryce McKinlay 
+ 	<bryce@albatross.co.nz> 
+ 	
+ 	* java/util/AbstractCollection.java (addAll): Use size() instead of 
+ 	hasNext() in iterator loop.  
+ 	(clear): Ditto.  
+ 	(contains): Ditto. Simplify loop.  
+ 	(containsAll): Ditto.  
+ 	(remove): Ditto.  
+ 	(removeAll): Ditto.  
+ 	(retainAll): Ditto.  
+ 	(toArray): Ditto.  
+ 	(toString): Ditto. Use string concatenation operators, not 
+ 	StringBuffer.  
+ 	* java/util/AbstractList.java (addAll): Use size() instead of 
+ 	hasNext() in iterator loop.  
+ 	(equals): Ditto.  
+ 	(hashCode): Ditto.  
+ 	(indexOf): Ditto. Don't take null check outside of the loop.  
+ 	(iterator): Return an AbstractListItr instead of anonymous class.  
+ 	(lastIndexOf): Use a for loop bounded by size() instead of 
+ 	hasPrevious() in iterator loop.  
+ 	(listIterator): Return an AbstractListItr.  
+ 	(removeRange): Remove bounds checking code and docs.  
+ 	(AbstractListItr): New inner class. Code moved here from 
+ 	listIterator().  
+ 	(SubList.iterator): Removed. Use default implementation from 
+ 	AbstractList instead.  
+ 	(SubList.listIterator): As above.  
+ 	* java/util/AbstractMap.java (clear): Use a for loop bounded by
+ 	
+ 	size() 
+ 	instead of hasNext() in iterator loop.  
+ 	(containsValue): Ditto.  
+ 	(equals): Ditto.  
+ 	(get): Ditto.  
+ 	(put): Ditto.  
+ 	(putAll): Ditto.  
+ 	(remove): Ditto.  
+ 	(toString): Ditto. Use string concatenation operators, not 
+ 	StringBuffer.  
+ 	* java/util/AbstractSequentialList.java (addAll): Use a for loop 
+ 	bounded by size() instead of hasNext() in iterator loop.  
+ 	* java/util/AbstractSet.java (hashCode): Don't catch exception as 
+ 	part of normal execution flow. Do an explicit null check instead.  
+ 	* java/util/ArrayList.java (_iSize): Rename to `size'.  
+ 	(_arData): Rename to `data'.  
+ 	(get): Check lower bounds also. Simplify IndexOutOfBoundsException 
+ 	message.  
+ 	(remove): Ditto.  
+ 	(removeRange): Make protected. Don't check bounds.  
+ 	(add): Check lower bounds also. Simplify IndexOutOfBoundsException 
+ 	message.  
+ 	(addAll (Collection)): Use a size-bounded for loop instead of 
+ 	hasNext() check.  
+ 	(addAll (int, Collection)): Check lower bounds. Simplify exception 
+ 	string.  
+ 	(clone): Clone the data array too.  
+ 	(indexOf): Inline doesEqual().  
+ 	(lastIndexOf): Ditto.  
+ 	(clear): Don't set array data to null.  
+ 	(set): Check lower bounds. Simplify exception string.  
+ 	(toArray): Correct comment.  
+ 	(trimToSize): Don't update modCount, this is not a structural
+ 	
+ 	change.  
+ 	Add comment.  
+ 	
+ 	* java/util/BitSet.java: Merged with classpath, new JDK 1.2 methods 
+ 	implemented.  
+ 	(toString): Declare `bit' as long, not int.  
+ 	(data): Made package-private, not private.  
+ 
+ 2000-10-27 10:29  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/util/Calendar.java: 
+ 	* java/util/Calendar.java (toString): Always print fields.  
+ 
+ 2000-10-27 09:53  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/: math/BigDecimal.java, util/Calendar.java,
+ 	util/SimpleTimeZone.java: 
+ 	* java/math/BigDecimal.java (intVal): Renamed from 'num' for 
+ 	serialization compatibility.  
+ 	(scale): Made private.  
+ 	(serialVersionUID): New field.  
+ 	(main): Removed.  
+ 	* java/util/Calendar.java (bundleName): Use '.' separators instead 
+ 	of '/' in fully qualified class name.  
+ 	(getInstance): Made synchronized per doc.  
+ 	(getAvailableLocales): Made synchronized per doc.  
+ 	(getTimeInMillis): Made not a final method.  
+ 	(setTimeInMillis): Made protected rather than public final and 
+ 	recompute fields, per doc.  
+ 	(clear): Set areFieldsSet to false per spec and don't recompute
+ 	
+ 	fields.  
+ 	(isSet): Only return isSet[field] per spec.  
+ 	(complete): Check areFieldsSet before calling computeFields.  
+ 	(toString): Removed superfluous comma field.  Added areFieldsSet
+ 	
+ 	and 
+ 	print out "?" if time and/or fields[] values are invalid.  
+ 	* java/util/SimpleTimeZone.java (monthLength): New field.  
+ 	(serialVersionUID): New field.  
+ 	Serialization mods.  
+ 
+ 2000-10-26 10:19  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/: AbstractCollection.java, AbstractList.java,
+ 	AbstractMap.java, AbstractSequentialList.java, AbstractSet.java,
+ 	ArrayList.java, Arrays.java, BasicMapEntry.java, BitSet.java,
+ 	Bucket.java, Calendar.java, Collection.java, Collections.java,
+ 	Comparator.java, ConcurrentModificationException.java, Date.java,
+ 	Dictionary.java, DoubleEnumeration.java, EmptyStackException.java,
+ 	Enumeration.java, EventListener.java, EventObject.java,
+ 	GregorianCalendar.java, HashMap.java, HashSet.java, Hashtable.java,
+ 	Iterator.java, LinkedList.java, List.java, ListIterator.java,
+ 	ListResourceBundle.java, Locale.java, Map.java,
+ 	MissingResourceException.java, NoSuchElementException.java,
+ 	Observable.java, Observer.java, Properties.java,
+ 	PropertyPermission.java, PropertyResourceBundle.java, Random.java,
+ 	ResourceBundle.java, Set.java, SimpleTimeZone.java, SortedMap.java,
+ 	SortedSet.java, Stack.java, StringTokenizer.java, TimeZone.java,
+ 	Timer.java, TimerTask.java, TooManyListenersException.java,
+ 	TreeMap.java, TreeSet.java, Vector.java, WeakHashMap.java,
+ 	jar/Attributes.java, jar/JarEntry.java, jar/JarException.java,
+ 	jar/JarFile.java, jar/JarInputStream.java,
+ 	jar/JarOutputStream.java, jar/Manifest.java: 2000-10-26  Bryce
+ 	McKinlay  <bryce@albatross.co.nz> 
+ 	
+ 	* java/util/*.java: Fix indentation on copyright notices.  
+ 	* java/util/jar/*.java: Ditto.  
+ 
+ 2000-10-24 11:02  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/lang/ThreadGroup.java: 2000-10-24  Bryce McKinlay 
+ 	<bryce@albatross.co.nz> 
+ 	
+ 	* java/lang/ThreadGroup.java (uncaughtException): Print thread name 
+ 	with stack dump. Set had_uncaught_exception.  
+ 	(had_uncaught_exception): New field. Refer to comment.  
+ 
+ 2000-10-24 10:51  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/EventObject.java: 
+ 	* java/util/EventObject.java (toString): Corrected output.  
+ 
+ 2000-10-24 10:07  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/util/: AbstractCollection.java, AbstractList.java,
+ 	AbstractMap.java, AbstractSequentialList.java, AbstractSet.java,
+ 	ArrayList.java, Arrays.java, BasicMapEntry.java, BitSet.java,
+ 	Bucket.java, Calendar.java, Collection.java, Collections.java,
+ 	Comparator.java, ConcurrentModificationException.java, Date.java,
+ 	Dictionary.java, DoubleEnumeration.java, EmptyStackException.java,
+ 	Enumeration.java, EventListener.java, EventObject.java,
+ 	GregorianCalendar.java, HashMap.java, HashSet.java, Hashtable.java,
+ 	Iterator.java, LinkedList.java, List.java, ListIterator.java,
+ 	ListResourceBundle.java, Locale.java, Map.java,
+ 	MissingResourceException.java, NoSuchElementException.java,
+ 	Observable.java, Observer.java, Properties.java,
+ 	PropertyPermission.java, PropertyResourceBundle.java, Random.java,
+ 	ResourceBundle.java, Set.java, SimpleTimeZone.java, SortedMap.java,
+ 	SortedSet.java, Stack.java, StringTokenizer.java, TimeZone.java,
+ 	Timer.java, TimerTask.java, TooManyListenersException.java,
+ 	TreeMap.java, TreeSet.java, Vector.java, WeakHashMap.java,
+ 	jar/Attributes.java, jar/JarEntry.java, jar/JarException.java,
+ 	jar/JarFile.java, jar/JarInputStream.java,
+ 	jar/JarOutputStream.java, jar/Manifest.java: 2000-10-24  Bryce
+ 	McKinlay  <bryce@albatross.co.nz> 
+ 	
+ 	* java/util/*.java: Reformat all to unofficial standard coding
+ 	
+ 	style.  
+ 	No changes of substance.  
+ 	* java/util/jar/*.java: Ditto.  
+ 
+ 2000-10-10 23:08  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/sql/: Date.java, Time.java, Timestamp.java: 
+ 	* java/sql/Date.java (serialVersionUID): New field.  
+ 	* java/sql/Time.java (serialVersionUID): New field.  
+ 	* java/sql/Timestamp.java (serialVersionUID): New field.  
+ 	Serialization mods.  
+ 
+ 2000-10-07 18:11  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/util/Properties.java: 
+ 	* java/util/Properties.java (addHashEntries): New method from 
+ 	libgcj.  
+ 	(propertyNames): Use libgcj implementation.  
+ 	(formatForOutput): Always quote spaces in key.  
+ 
+ 2000-10-06 00:04  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/: security/Key.java, security/Provider.java,
+ 	security/interfaces/DSAPrivateKey.java,
+ 	security/interfaces/DSAPublicKey.java, sql/DataTruncation.java,
+ 	sql/SQLException.java, sql/SQLWarning.java, util/Date.java: 
+ 	* java/security/Key.java (serialVersionUID): New value.  
+ 	* java/security/Provider.java (serialVersionUID): New field.  
+ 	* java/security/interfaces/DSAPrivateKey.java (serialVersionUID): 
+ 	New value.  
+ 	* java/security/interfaces/DSAPublicKey.java (serialVersionUID): 
+ 	New value.  
+ 	* java/sql/DataTruncation.java (serialVersionUID): New field.  
+ 	* java/sql/SQLException.java (serialVersionUID): New field.  
+ 	* java/sql/SQLWarning.java (serialVersionUID): New field.  
+ 	* java/util/Date.java (writeObject): Renamed from incorrect name.  
+ 
+ 2000-10-06 00:03  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/io/: Makefile.am, ObjectInputStream.java,
+ 	ObjectOutputStream.java, Replaceable.java, Resolvable.java: 
+ 	* Makefile.am: Removed Replaceable.java and Resolvable.java.  
+ 	* ObjectInputStream.java (processResolution): Fixed typo 
+ 	in method name.  
+ 	(processResolution): Handle readResolve method via reflection with 
+ 	removal of Resolvable interface.  
+ 	* ObjectOutputStream.java (writeObject): Handle writeReplace 
+ 	method via reflection with removal of Replaceable interface.  
+ 	* Replaceable.java: Removed.  
+ 	* Resolvable.java: Removed.  
+ 	Serialization mods.  Note:  The interfaces java.io.Replaceable and
+ 	java.io.Resolvable were only temporary additions to JDK 1.2 beta
+ 	versions and were not included in the JDK 1.2 final.  The
+ 	Serialization spec instructs how to deal with their methods (via
+ 	reflection).  
+ 
+ 2000-09-18 14:50  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* gnu/java/locale/: iso3166_de.properties, iso639_de.properties: 
+ 	Fixed a few spellings.  Removed all entries for which I don't have a
+ 	german translation.  Java will automatically fall back to the
+ 	default for them.  
+ 
+ 2000-09-18 13:58  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* gnu/java/locale/: LocaleInformation_de.java,
+ 	iso3166_de.properties, iso639.properties, iso639_de.properties,
+ 	iso639_fr.properties, iso639_ga.properties: Changed all iso8859-1
+ 	characters to their escape sequence representation.  
+ 
+ 2000-09-08 19:39  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/: beans/PropertyChangeEvent.java,
+ 	beans/PropertyVetoException.java, io/ObjectOutputStream.java,
+ 	io/ObjectStreamClass.java: 
+ 	* java/beans/PropertyChangeEvent.java (serialVersionUID): Added.  
+ 	* java/beans/PropertyVetoException.java (serialVersionUID): Added.  
+ 	* java/io/ObjectOutputStream.java (writeObject): Initialized 
+ 	fieldsAlreadyWritten before recursion rather than after.  
+ 	* java/io/ObjectStreamClass.java (serialVersionUID): Added.  
+ 	Serialization mods merged from libgcj.  
+ 
+ 2000-08-31 16:00  John Keiser <jkeiser@iname.com>
+ 
+ 	* THANKYOU: Add Weldon Washburn.  
+ 
+ 2000-08-31 15:57  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/Thread.java: Fixes from Weldon Washburn
+ 	
+ 	[mailto:weldon.washburn@intel.com]: 
+ 	1. Make Thread always have a name when initializing.  
+ 	2. Fix nasty bug in join() where it was not actually waiting for 
+ 	the thread to stop.  
+ 	3. Fix toString() to show the correct String format.  
+ 
+ 2000-08-31 09:13  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* THANKYOU: Added Sreenivas Subramoney.  
+ 
+ 2000-08-31 09:08  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Properties.java: 
+ 	* java/util/Properties.java (getProperties): Fixed a bug reported by 
+ 	Sreenivas Subramoney:  It did not correctly search the default of 
+ 	the default property list.  
+ 
+ 2000-08-23 21:52  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/: io/ByteArrayOutputStream.java, io/PrintWriter.java,
+ 	util/Collections.java: 
+ 	* java/util/Collections.java (EMPTY_MAP) (singletonList(Object) 
+ 	(singletonMap(Object,Object)): implemented, new in 1.3.  
+ 	* java/io/PrintWriter.java (print(String)): Don't catch
+ 	
+ 	IOException, 
+ 	write(String) already does.  
+ 	* java/io/ByteArrayOutputStream.java: Fix from libgcj for double
+ 	
+ 	assignment 
+ 	of final variable initial_buffer_size.  
+ 
+ 2000-08-16 01:44  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/io/ByteArrayOutputStream.java: 
+ 	* ByteArrayOutputStream.java: Merged with libgcj.  
+ 
+ 2000-08-07 20:00  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/io/PipedInputStream.java: 
+ 	* PipedInputStream.java (read(byte[],int,int)): Mostly rewrote.  
+ 	(receive): Streamlined.  
+ 
+ 2000-08-06 01:55  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/io/PrintWriter.java: 
+ 	* PrintWriter.java: Merged with libgcj.  
+ 
+ 2000-08-06 00:49  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/io/StreamTokenizer.java: 
+ 	* java/io/StreamTokenizer.java (TT_NONE): Now private.  
+ 	(nextToken): Handle backslashed newline.  From Oskar Liljeblad.  
+ 
+ 2000-08-04 00:45  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/io/: ObjectInputStream.java, ObjectOutputStream.java,
+ 	ObjectStreamClass.java: 
+ 	* ObjectInputStream.java (readFields): Turn off 
+ 	readDataFromBlock while reading via GetField.  
+ 	(GetField$1.get(String, Object)): Pass Class of default value to 
+ 	getField.  
+ 	(getField): Allow for null default values.  
+ 	
+ 	* ObjectOutputStream.java: Fixed typo in comment.  
+ 	(PutField$1.put): Fixed calls of checkType in most of the put 
+ 	methods to pass the correct parameter.  
+ 	(PutField$1.put(String, Object)): Allow for null value arg.  
+ 	(PutField$1.write): Turn off writeDataAsBlocks while writing via 
+ 	PutField.  
+ 	
+ 	* ObjectStreamClass.java (serialPersistentFields): Fixed 
+ 	typo in spec'ed field name.  
+ 	(getSerialPersistentFields): Changed spelling of method to match 
+ 	the correct spelling of the spec'ed field name.  
+ 	More serialization fixes per Mauve results.  
+ 
+ 2000-07-31 03:37  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* native/java.io/java_io_ObjectStreamClass.c: 
+ 	* java_io_ObjectStreamClass.c: Removed.  
+ 
+ 2000-07-30 04:05  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/www.gnu.org/classpath-japhar.mhtml: Really removing it now :) 
+ 
+ 2000-07-30 04:04  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/www.gnu.org/doc/classpath-japhar.mhtml: Move classpath-japhar
+ 	to doc.  
+ 
+ 2000-07-29 05:45  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/www.gnu.org/: classpath-japhar.mhtml, classpath.mhtml: Add
+ 	file explaining how to install Classpath and Japhar.  
+ 
+ 2000-07-28 23:42  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/io/ObjectOutputStream.java: 
+ 	* ObjectOutputStream.java (writeObject): Per spec, call 
+ 	NotSerializableException with just the class name.  
+ 
+ 2000-07-28 17:22  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/lang/String.java: 2000-07-28  Weldon Washburn
+ 	<weldon.washburn@intel.com> 
+ 	
+ 	* java/lang/String.java (String(byte[],int,int,int)): Properly 
+ 	initialize `this.count'.  
+ 
+ 2000-07-27 23:59  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* gnu/java/security/provider/SHA.java,
+ 	java/io/ObjectOutputStream.java, java/io/ObjectStreamClass.java,
+ 	native/java.io/Makefile.am: 
+ 	* gnu/java/security/provider/SHA.java (munch): Reset buffer to 0 so 
+ 	spurious bits don't cause discrepancies.  
+ 	
+ 	* ObjectOutputStream.java: Fixed typo in comment.  
+ 	* ObjectStreamClass.java: Merged with libgcj.  
+ 	Fixed typos in comments.  
+ 	(lookup): Applied patch from Brian Jones <cbj@gnu.org> to optimize.  
+ 	(getDefinedSUID): Removed native method.  
+ 	(getSerialPersistantFields): Removed native method.  
+ 	(hasClassInitializer): Removed native method.  
+ 	
+ 	* Makefile.am: Removed reference to java_io_ObjectStreamClass.c.  
+ 	Serialization mods.  
+ 
+ 2000-07-23 17:53  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/io/StreamTokenizer.java: 2000-07-23  Oskar Liljeblad
+ 	<osk@hem.passagen.se> 
+ 	
+ 	* java/io/StreamTokenizer.java: Merged with libgcj.  
+ 
+ 2000-07-12 04:56  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/applet/: Applet.java, AppletContext.java, AppletStub.java,
+ 	AudioClip.java: 2000-07-12  Bryce McKinlay  <bryce@albatross.co.nz> 
+ 	
+ 	* java/applet/*.java: Reformatted to match current coding style.  
+ 
+ 2000-07-01 16:10  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: gnu.java.awt.image/Makefile.am,
+ 	gnu.java.awt.peer.gtk/Makefile.am, java.io/Makefile.am,
+ 	java.lang/Makefile.am, java.lang.reflect/Makefile.am,
+ 	java.net/Makefile.am, java.util/Makefile.am, lib/Makefile.am: 
+ 	Makefile.am: ignore error when symlinking libraries to libjaphar_* 
+ 
+ 2000-06-29 23:44  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/: beans/PropertyChangeEvent.java,
+ 	beans/PropertyVetoException.java,
+ 	beans/beancontext/BeanContextServiceRevokedEvent.java,
+ 	io/ObjectOutputStream.java, io/WriteAbortedException.java: 
+ 	* java/beans/PropertyChangeEvent.java (oldVal): Renamed to
+ 	
+ 	oldValue.  
+ 	(newVal): Renamed to newValue.  
+ 	* java/beans/PropertyVetoException.java (changeEvent): Renamed to
+ 	
+ 	evt.  
+ 	* java/beans/beancontext/BeanContextServiceRevokedEvent.java 
+ 	(revokeNow): Renamed to invalidateRefs.  
+ 	* java/io/ObjectOutputStream.java (writeObject): Use component type 
+ 	when writing arrays.  
+ 	Fixed typo.  
+ 	* java/io/WriteAbortedException.java (message): Made transient.  
+ 	Serialization mods per the JDK spec: 
+ 	http://java.sun.com/products/jdk/1.2/docs/api/serialized-form.html 
+ 
+ 2000-06-29 23:20  Warren Levy <warrenl@cygnus.com>
+ 
+ 	* java/: math/BigDecimal.java, sql/Connection.java,
+ 	sql/DatabaseMetaData.java, sql/Driver.java,
+ 	sql/PreparedStatement.java: 
+ 	* java/math/BigDecimal.java (add): Reimplemented.  
+ 	(subtract): Corrected method name from 'substract'.  Reimplemented.  
+ 	* java/sql/Connection.java (TRANSACTION_SERIALIZABLE): Corrected 
+ 	spelling to match JDK spec.  
+ 	* java/sql/DatabaseMetaData.java (getIdentifierQuoteString): 
+ 	Corrected method name from 'getIdentiferQuoteString'.  
+ 	(getTimeDateFunctions): Corrected name to match the spec.  
+ 	(supportsCatalogsInPrivilegeDefinitions): Ditto.  
+ 	(getMaxUserNameLength): Ditto.  
+ 	(getTables): Added String types[] parameter to match the spec.  
+ 	* java/sql/Driver.java (getMajorVersion): Corrected method name.  
+ 	* java/sql/PreparedStatement.java: Class extends Statement.  
+ 	(setBigDecimal): New method.  
+ 	(setAsciiStream): Added int length parameter.  
+ 	(setUnicodeStream): Ditto.  
+ 	(setBinaryStream): Ditto.  
+ 	(setCharacterStream): Ditto.  
+ 	(execute): New method.  
+ 	(executeQuery): New method.  
+ 	(executeUpdate): New method.  
+ 	Mods to match the JDK spec (and to fix BigDecimal bugs).  
+ 
+ 2000-06-28 14:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* INSTALL: INSTALL: updated to include latest fast-breaking new
+ 	information :) 
+ 
+ 2000-06-28 14:02  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.image/.cvsignore: .cvsignore : ignore more
+ 	build generated files 
+ 
+ 2000-06-28 13:59  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: Makefile.am, gnu.java.awt.image/Makefile.am,
+ 	gnu.java.awt.peer.gtk/Makefile.am, java.io/Makefile.am,
+ 	java.lang/Makefile.am, java.lang.reflect/Makefile.am,
+ 	java.net/Makefile.am, java.util/Makefile.am, lib/Makefile.am: 
+ 	Makefile.am : 	conditionally link libjaphar_* to given libraries .so
+ 	if 
+ 	the --with-japhar argument was given to configure 
+ 
+ 2000-06-28 06:03  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/lang/ThreadGroup.java: 
+ 	* ThreadGroup.java: Added synchronized flag to many methods.  
+ 	(destroyed_flag): Removed.  
+ 	(isDestroyed, removeGroup, removeThread): Test for parent == null.  
+ 	(activeCount): Added spec note.  
+ 
+ 2000-06-27 23:56  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/lang/ThreadGroup.java: 
+ 	* ThreadGroup.java: Merged with libgcj's ThreadGroup.  
+ 
+ 2000-06-26 05:05  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.io/java_io_ObjectInputStream.c: currentClassLoader()
+ 	: added two fixes from Petter Reinholdtsen for 
+ 	missing return from function.  
+ 
+ 2000-06-25 07:24  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/Throwable.java: Throwable does not yet actually
+ 	populate itself, so for now we have to make sure that there is
+ 	actually something in the stack trace.  
+ 
+ 2000-06-25 07:22  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/System.java, vm/reference/java/lang/Runtime.java: 
+ 	Remove dependency of Runtime on System.  (This makes bootup
+ 	possible.) 
+ 
+ 2000-06-24 21:30  John Keiser <jkeiser@iname.com>
+ 
+ 	* acinclude.m4: Was outputting both yes and no when Japhar classes
+ 	were not found.  
+ 
+ 2000-06-20 21:16  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/ClassLoader.java: Fixed comments: JDK 1.1 specs
+ 	clarified whether loadClass() should resolve.  
+ 
+ 2000-06-18 13:05  Mark Wielaard <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/Thread.java: Thread.yield() is static 
+ 
+ 2000-06-14 01:36  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.image/.cvsignore: initial checkin 
+ 
+ 2000-06-14 01:35  Brian Jones <cbj@gnu.org>
+ 
+ 	* include/.cvsignore: ignore stamp-h 
+ 
+ 2000-06-14 01:28  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/.cvsignore, gnu/java/.cvsignore, gnu/java/awt/.cvsignore,
+ 	gnu/java/awt/image/.cvsignore, gnu/java/awt/peer/.cvsignore,
+ 	gnu/java/awt/peer/gtk/.cvsignore, gnu/java/beans/.cvsignore,
+ 	gnu/java/beans/editors/.cvsignore, gnu/java/beans/info/.cvsignore,
+ 	gnu/java/io/.cvsignore, gnu/java/io/decode/.cvsignore,
+ 	gnu/java/io/encode/.cvsignore, gnu/java/lang/.cvsignore,
+ 	gnu/java/lang/reflect/.cvsignore, gnu/java/locale/.cvsignore,
+ 	gnu/java/net/.cvsignore, gnu/java/net/content/.cvsignore,
+ 	gnu/java/net/content/text/.cvsignore,
+ 	gnu/java/net/protocol/.cvsignore,
+ 	gnu/java/net/protocol/file/.cvsignore,
+ 	gnu/java/net/protocol/http/.cvsignore,
+ 	gnu/java/security/.cvsignore,
+ 	gnu/java/security/provider/.cvsignore, gnu/tools/.cvsignore,
+ 	gnu/tools/serialver/.cvsignore, java/.cvsignore,
+ 	java/awt/.cvsignore, java/awt/datatransfer/.cvsignore,
+ 	java/awt/event/.cvsignore, java/awt/image/.cvsignore,
+ 	java/awt/peer/.cvsignore, java/awt/print/.cvsignore,
+ 	java/beans/.cvsignore, java/beans/beancontext/.cvsignore,
+ 	java/io/.cvsignore, java/lang/.cvsignore, java/lang/ref/.cvsignore,
+ 	java/lang/reflect/.cvsignore, java/math/.cvsignore,
+ 	java/security/.cvsignore, java/security/acl/.cvsignore,
+ 	java/security/cert/.cvsignore, java/security/interfaces/.cvsignore,
+ 	java/security/spec/.cvsignore, java/text/.cvsignore,
+ 	java/util/.cvsignore, vm/reference/.cvsignore,
+ 	vm/reference/gnu/.cvsignore, vm/reference/gnu/vm/.cvsignore,
+ 	vm/reference/gnu/vm/stack/.cvsignore, vm/reference/java/.cvsignore,
+ 	vm/reference/java/lang/.cvsignore,
+ 	vm/reference/java/lang/reflect/.cvsignore, vm/.cvsignore,
+ 	resource/.cvsignore, resource/java/.cvsignore,
+ 	resource/java/util/.cvsignore: ignore Makefile 
+ 
+ 2000-06-14 01:08  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/.cvsignore: ignore Makefile ignore *.info 
+ 
+ 2000-06-11 20:49  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/jar/.cvsignore, java/util/jar/JarFile.java,
+ 	java/util/jar/JarInputStream.java, java/util/jar/Makefile.am,
+ 	java/util/jar/Manifest.java, lib/standard.omit: Add last two
+ 	java.util.jar classes 
+ 
+ 2000-06-05 20:27  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/jar/JarOutputStream.java, lib/standard.omit,
+ 	java/util/jar/Makefile.am: Add new 1.2 class:
+ 	java/util/jar/JarOutputStream.java 
+ 
+ 2000-06-04 21:41  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/jar/JarEntry.java, java/util/jar/Makefile.am,
+ 	lib/standard.omit: Add java/util/jar/JarEntry.java: new 1.2 class 
+ 
+ 2000-06-04 19:33  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/jar/Makefile.am: Jarexception.java not
+ 	JarException.jar. Must go to bed...  
+ 
+ 2000-06-04 19:04  Mark Wielaard <mark@klomp.org>
+ 
+ 	* configure.in, java/util/zip/Makefile.am: java/util/jar/Makefile
+ 	and java/util/zip Makefile added to configure.in 
+ 
+ 2000-06-04 18:40  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/jar/Manifest.java: getEntries is a method not a field 
+ 
+ 2000-06-04 18:19  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/: lang/Makefile.am, util/Makefile.am, util/jar/Makefile.am: 
+ 	add missing java/dir entries 
+ 
+ 2000-06-04 18:18  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/jar/: Attributes.java, JarException.java,
+ 	Manifest.java: new 1.2 classes 
+ 
+ 2000-06-04 14:50  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/Timer.java: java/util/Timer.java: move all waiting
+ 	logic into the queue as suggested by Jochen Hoenicke to prevent race
+ 	conditions 
+ 
+ 2000-06-04 13:46  Brian Jones <cbj@gnu.org>
+ 
+ 	* include/.cvsignore: added ignore *.h and *.in 
+ 
+ 2000-06-04 13:45  Brian Jones <cbj@gnu.org>
+ 
+ 	* .cvsignore: removed include from the list to ignore 
+ 
+ 2000-05-30 22:03  Mark Wielaard <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/Thread.java: added example to use
+ 	ThreadLocals 
+ 
+ 2000-05-30 22:02  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/lang/: InheritableThreadLocal.java, ThreadLocal.java: new
+ 	1.2 classes 
+ 
+ 2000-05-30 22:02  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/lang/Package.java: new 1.2 class (but no support in
+ 	ClassLoader yet) 
+ 
+ 2000-05-30 22:01  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/: Timer.java, TimerTask.java: new 1.3 classes 
+ 
+ 2000-05-30 21:59  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/net/JarURLConnection.java: getCertificates returns a
+ 	Certificate[] 
+ 
+ 2000-05-30 21:59  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/security/ProtectionDomain.java: constructor should make the
+ 	PermissionCollection read only 
+ 
+ 2000-05-21 13:27  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/classpath.mhtml: updated anonymous cvs
+ 	information 
+ 
+ 2000-05-20 20:32  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/: io/BufferedWriter.java, lang/StringBuffer.java: Fixed a
+ 	couple copyright notices 
+ 
+ 2000-05-19 23:36  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/io/: BufferedOutputStream.java, BufferedWriter.java: 
+ 	* BufferedWriter.java: Merged with libgcj.  
+ 	* BufferedOutputStream.java (write(byte[],int,int)): Removed 
+ 	unused `if'.  Don't bother chunking or buffering large writes.  
+ 
+ 2000-05-15 09:30  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/lang/String.java: 2000-05-15  Bryce McKinlay 
+ 	<bryce@albatross.co.nz> 
+ 	
+ 	* java/lang/String.java (trim): Optimize nd' loop. Don't lose the 
+ 	last character of the returned string.  
+ 
+ 2000-05-10 11:10  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/lang/StringBuffer.java: 2000-05-10  Bryce McKinlay 
+ 	<bryce@albatross.co.nz> 
+ 	
+ 	* java/lang/StringBuffer.java (replace): Calculate length for 
+ 	arraycopy() correctly.  
+ 
+ 2000-05-10 09:54  Bryce McKinlay <bryce@albatross.co.nz>
+ 
+ 	* java/lang/StringBuffer.java: 2000-05-10  Bryce McKinlay 
+ 	<bryce@albatross.co.nz> 
+ 	
+ 	* java/lang/StringBuffer.java (delete): Call arrayCopy() correctly.  
+ 	Avoid arrayCopy() call where possible. Update `count' _after_
+ 	
+ 	calling 
+ 	arrayCopy().  
+ 	(replace): Reimplemented. Fix javadoc.  
+ 	(reverse): Call ensureCapacity_unsynchronized().  
+ 	(StringBuffer (String)): Use DEFAULT_CAPACITY.  
+ 
+ 2000-05-09 22:45  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/lang/StringBuffer.java: 
+ 	Merged with libgcj: 
+ 	* java/lang/StringBuffer.java (toString): Don't mark buffer as 
+ 	shared.  
+ 	(insert(int,char[],int,int): New method.  
+ 	(delete): New method from Classpath.  
+ 	(deleteCharAt): Likewise.  
+ 	(substring): Likewise.  
+ 	(shared): No longer private.  
+ 	Added JavaDoc comments from Classpath.  
+ 
+ 2000-05-09 02:12  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* gnu/java/awt/image/ImageDecoder.java,
+ 	gnu/java/awt/peer/gtk/GtkImagePainter.java, java/lang/String.java: 
+ 	From Mark Wielaard <mark@klomp.org>: 
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java: Added `package' 
+ 	statement.  
+ 	* gnu/java/awt/image/ImageDecoder.java: Deleted syntactically 
+ 	incorrect code from static block.  
+ 	* java/lang/String.java (String): Removed bogus text.  
+ 
+ 2000-05-04 15:52  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/net/: DatagramPacket.java, MulticastSocket.java: 
+ 	* java/net/MulticastSocket.java (joinGroup): Don't explicitly 
+ 	check for null pointer.  
+ 	(leaveGroup): Likewise.  
+ 	* java/net/DatagramPacket.java (DatagramPacket): Removed erroneous 
+ 	comment.  
+ 	(setData): Likewise.  
+ 
+ 2000-04-21 22:27  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/io/: PipedInputStream.java, PipedOutputStream.java: 
+ 	* PipedOutputStream.java (write(int)): Use `receive', not 
+ 	`write'.  
+ 	(write(byte[],int,int): Likewise.  
+ 	* PipedInputStream.java (receive(byte[],int,int)): Renamed from 
+ 	`write'.  
+ 	(receive(int)): Rewrote.  
+ 
+ 2000-04-21 20:05  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* java/io/: PipedInputStream.java, PipedReader.java: 
+ 	* PipedInputStream.java (try_not_to_block): Removed.  
+ 	(read): Can return fewer than LEN bytes as long as at least one 
+ 	byte was read.  
+ 	* PipedReader.java (try_not_to_block): Removed.  
+ 	(read): Can return fewer than LEN characters as long as at least 
+ 	one character was read.  
+ 	(connect, close, read, write): Fixed indentation.  
+ 
+ 2000-04-20 22:18  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/MulticastSocket.java: Switch to libgcj implementation,
+ 	merge doc comments 
+ 
+ 2000-04-20 20:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/: ServerSocket.java, Socket.java, SocketImpl.java: Merge
+ 	in libgcj ; doc cleanup 
+ 
+ 2000-04-20 20:19  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/DatagramSocketImpl.java: Doc cleanup 
+ 
+ 2000-04-20 20:17  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/DatagramSocket.java: Disregard previous log message. 
+ 	Still using Classpath version on this file with useful libgcj
+ 	portions merged in.  
+ 
+ 2000-04-20 20:14  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/: DatagramPacket.java, DatagramSocket.java: Switch to
+ 	libgcj implementation; merge in doc comments 
+ 
+ 2000-04-20 03:19  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/zip/: .cvsignore, Checksum.java,
+ 	DataFormatException.java, ZipException.java: Initial checkin, files
+ 	from libgcj + .cvsignore 
+ 
+ 2000-04-19 03:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/.cvsignore: Added patterns to ignore build output files 
+ 
+ 2000-04-19 03:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* TODO: Add new item about checking for thread safety 
+ 
+ 2000-04-19 02:14  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/SocketOptions.java: Convert constants to hex a la
+ 	libgcj; fix transposed values; doc cleanup 
+ 
+ 2000-04-19 01:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URLDecoder.java: Switch to libgcj version, merge in doc
+ 	comments 
+ 
+ 2000-04-19 01:24  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/: Authenticator.java, NetPermission.java,
+ 	ContentHandler.java, URLEncoder.java, PasswordAuthentication.java,
+ 	SocketInputStream.java, SocketOutputStream.java: Documentation
+ 	cleanup 
+ 
+ 2000-04-19 01:22  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/SocketPermission.java: Partial serialization fix, doc
+ 	cleanup 
+ 
+ 2000-04-19 01:20  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/: BindException.java, ConnectException.java,
+ 	ContentHandlerFactory.java, FileNameMap.java,
+ 	MalformedURLException.java, NoRouteToHostException.java,
+ 	ProtocolException.java, SocketException.java,
+ 	SocketImplFactory.java, URLStreamHandlerFactory.java,
+ 	UnknownHostException.java, UnknownServiceException.java: 
+ 	Documentation and other misc cleanup 
+ 
+ 2000-04-19 01:12  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* THANKYOU: Add Gaute Smaaland 
+ 
+ 2000-04-19 01:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* README: Update administrivia 
+ 
+ 2000-04-19 01:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* TODO: Initial checkin 
+ 
+ 2000-04-18 05:56  Tom Tromey <tromey@cygnus.com>
+ 
+ 	* gnu/java/lang/reflect/TypeSignature.java: 2000-04-17  Andrew
+ 	Haley  <aph@cygnus.com> 
+ 	
+ 	* TypeSignature.java (getClassForEncoding): Don't remove 
+ 	punctuation from the classname of an array element.  
+ 
+ 2000-04-01 18:09  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* com/sun/javadoc/: MemberDoc.java, ParamTag.java: Fix header lines 
+ 
+ 2000-03-22 01:59  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* THANKYOU: Add carriage return at end 
+ 
+ 2000-03-21 02:08  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* FOO: Deleting test file 
+ 
+ 2000-03-21 02:07  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* FOO: Initial Checking 
+ 
+ 2000-03-20 04:59  Paul Fisher <rao@gnu.org>
+ 
+ 	* javax/swing/: GrayFilter.java, plaf/BorderUIResource.java,
+ 	plaf/UIResource.java: Change license to libgcc-like terms.  
+ 
+ 2000-03-20 04:47  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gdkfontmetrics.c, gdkgraphics.c,
+ 	gthread-jni.c, gthread-jni.h, gtkbuttonpeer.c, gtkcanvaspeer.c,
+ 	gtkcheckboxmenuitempeer.c, gtkcheckboxpeer.c, gtkchoicepeer.c,
+ 	gtkclipboard.c, gtkcomponentpeer.c, gtkevents.c,
+ 	gtkfiledialogpeer.c, gtkimagepainter.c, gtklabelpeer.c,
+ 	gtklistpeer.c, gtkmainthread.c, gtkmenubarpeer.c,
+ 	gtkmenuitempeer.c, gtkmenupeer.c, gtkpanelpeer.c, gtkpeer.h,
+ 	gtkpopupmenupeer.c, gtkscrollbarpeer.c, gtkscrollpanepeer.c,
+ 	gtktextareapeer.c, gtktextcomponentpeer.c, gtktextfieldpeer.c,
+ 	gtktoolkit.c, gtkwindowpeer.c, native_state.c, native_state.h: 
+ 	Update license information.  
+ 
+ 2000-03-20 04:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.image/gdkpixbufdecoder.c: Add license.  
+ 
+ 2000-03-20 04:20  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/image/: GdkPixbufDecoder.java,
+ 	GtkOffScreenDecoder.java, ImageDecoder.java, XBMDecoder.java: 
+ 	Change license to clearly mark the peer and non-peer AWT libraries.  
+ 
+ 2000-03-20 04:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GdkFontMetrics.java, GdkGraphics.java,
+ 	GtkArg.java, GtkArgList.java, GtkButtonPeer.java,
+ 	GtkCanvasPeer.java, GtkCheckButtonPeer.java,
+ 	GtkCheckboxMenuItemPeer.java, GtkCheckboxPeer.java,
+ 	GtkChoicePeer.java, GtkClipboard.java, GtkComponentPeer.java,
+ 	GtkContainerPeer.java, GtkDialogPeer.java, GtkFileDialogPeer.java,
+ 	GtkFontPeer.java, GtkFramePeer.java, GtkGenericPeer.java,
+ 	GtkImage.java, GtkImagePainter.java, GtkLabelPeer.java,
+ 	GtkListPeer.java, GtkMainThread.java, GtkMenuBarPeer.java,
+ 	GtkMenuComponentPeer.java, GtkMenuItemPeer.java, GtkMenuPeer.java,
+ 	GtkOffScreenImage.java, GtkPanelPeer.java, GtkPopupMenuPeer.java,
+ 	GtkRadioButtonPeer.java, GtkScrollPanePeer.java,
+ 	GtkScrollbarPeer.java, GtkTextAreaPeer.java,
+ 	GtkTextComponentPeer.java, GtkTextFieldPeer.java,
+ 	GtkToggleButtonPeer.java, GtkToolkit.java, GtkWindowPeer.java,
+ 	Test.java, TestAWT.java: Reformat license.  Make clear that these
+ 	files are covered under the LGPL.  
+ 
+ 2000-03-18 22:45  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: 
+ 	* jikes generates .u files with +M 
+ 	* generating makefile.dep removes the .u files before glibj.zip is 
+ 	created 
+ 
+ 2000-03-18 22:40  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/lib/Makefile.am: libclasspath_lib -> libclasspath 
+ 
+ 2000-03-18 22:25  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/libgcj.omit: initial commit 
+ 
+ 2000-03-18 00:41  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/awt/peer/: ButtonPeer.java, CanvasPeer.java,
+ 	CheckboxMenuItemPeer.java, CheckboxPeer.java, ChoicePeer.java,
+ 	ComponentPeer.java, ContainerPeer.java, DialogPeer.java,
+ 	FileDialogPeer.java, FontPeer.java, FramePeer.java, LabelPeer.java,
+ 	LightweightPeer.java, ListPeer.java, MenuBarPeer.java,
+ 	MenuComponentPeer.java, MenuItemPeer.java, MenuPeer.java,
+ 	PanelPeer.java, PopupMenuPeer.java, ScrollPanePeer.java,
+ 	ScrollbarPeer.java, TextAreaPeer.java, TextComponentPeer.java,
+ 	TextFieldPeer.java, WindowPeer.java: Change license to clearly
+ 	state that these are part of the non-peer libraries.  
+ 
+ 2000-03-17 23:49  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/awt/: AWTError.java, AWTEvent.java,
+ 	AWTEventMulticaster.java, AWTException.java, Adjustable.java,
+ 	BorderLayout.java, Button.java, Canvas.java, CardLayout.java,
+ 	Checkbox.java, CheckboxGroup.java, CheckboxMenuItem.java,
+ 	Choice.java, Color.java, Component.java, Container.java,
+ 	Cursor.java, Dialog.java, Dimension.java, EventDispatcher.java,
+ 	EventQueue.java, FileDialog.java, FlowLayout.java, Font.java,
+ 	FontMetrics.java, Frame.java, Graphics.java, GridLayout.java,
+ 	IllegalComponentStateException.java, Image.java,
+ 	ImageMediaEntry.java, Insets.java, ItemSelectable.java, Label.java,
+ 	LayoutManager.java, LayoutManager2.java, List.java,
+ 	MediaEntry.java, MediaTracker.java, Menu.java, MenuBar.java,
+ 	MenuComponent.java, MenuContainer.java, MenuItem.java,
+ 	MenuShortcut.java, Panel.java, Point.java, Polygon.java,
+ 	PopupMenu.java, PrintGraphics.java, PrintJob.java, Rectangle.java,
+ 	ScrollPane.java, ScrollPaneAdjustable.java, Scrollbar.java,
+ 	Shape.java, SystemColor.java, TextArea.java, TextComponent.java,
+ 	TextField.java, Toolkit.java, Window.java,
+ 	datatransfer/Clipboard.java, datatransfer/ClipboardOwner.java,
+ 	datatransfer/DataFlavor.java, datatransfer/FlavorMap.java,
+ 	datatransfer/StringSelection.java, datatransfer/Transferable.java,
+ 	datatransfer/UnsupportedFlavorException.java,
+ 	event/AWTEventListener.java, event/ActionEvent.java,
+ 	event/ActionListener.java, event/AdjustmentEvent.java,
+ 	event/AdjustmentListener.java, event/ComponentAdapter.java,
+ 	event/ComponentEvent.java, event/ComponentListener.java,
+ 	event/ContainerAdapter.java, event/ContainerEvent.java,
+ 	event/ContainerListener.java, event/FocusAdapter.java,
+ 	event/FocusEvent.java, event/FocusListener.java,
+ 	event/InputEvent.java, event/InputMethodEvent.java,
+ 	event/InputMethodListener.java, event/InvocationEvent.java,
+ 	event/ItemEvent.java, event/ItemListener.java,
+ 	event/KeyAdapter.java, event/KeyEvent.java, event/KeyListener.java,
+ 	event/MouseAdapter.java, event/MouseEvent.java,
+ 	event/MouseListener.java, event/MouseMotionAdapter.java,
+ 	event/MouseMotionListener.java, event/PaintEvent.java,
+ 	event/TextEvent.java, event/TextListener.java,
+ 	event/WindowAdapter.java, event/WindowEvent.java,
+ 	event/WindowListener.java, image/AreaAveragingScaleFilter.java,
+ 	image/ColorModel.java, image/CropImageFilter.java,
+ 	image/DirectColorModel.java, image/FilteredImageSource.java,
+ 	image/ImageConsumer.java, image/ImageFilter.java,
+ 	image/ImageObserver.java, image/ImageProducer.java,
+ 	image/IndexColorModel.java, image/MemoryImageSource.java,
+ 	image/PixelGrabber.java, image/RGBImageFilter.java,
+ 	image/ReplicateScaleFilter.java, print/Book.java,
+ 	print/PageFormat.java, print/Pageable.java, print/Paper.java,
+ 	print/Printable.java, print/PrinterAbortException.java,
+ 	print/PrinterException.java, print/PrinterGraphics.java,
+ 	print/PrinterIOException.java, print/PrinterJob.java: Change
+ 	license to clearly state that these are part of the non-peer AWT
+ 	libraries.  
+ 
+ 2000-03-17 21:09  Paul Fisher <rao@gnu.org>
+ 
+ 	* com/sun/javadoc/: ClassDoc.java, ConstructorDoc.java, Doc.java,
+ 	DocErrorReporter.java, Doclet.java, ExecutableMemberDoc.java,
+ 	FieldDoc.java, MemberDoc.java, MethodDoc.java, PackageDoc.java,
+ 	ParamTag.java, Parameter.java, ProgramElementDoc.java,
+ 	RootDoc.java, SeeTag.java, SerialFieldTag.java, Tag.java,
+ 	ThrowsTag.java, Type.java: Designate as being part of the
+ 	com.sun.javadoc implementation, and therefore, clearly marked as
+ 	being GPL'd.  
+ 
+ 2000-03-17 21:00  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/: lib/jcl.c, lib/jcl.h, lib/jnilink.c, lib/jnilink.h,
+ 	lib/primlib.c, lib/primlib.h, nsa/native_state.c,
+ 	nsa/native_state.h, vmi/vmi.c, vmi/vmi.h: Change license to
+ 	libgcc-like terms.  
+ 
+ 2000-03-17 20:02  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/locale/Calendar.java, gnu/java/locale/Calendar_de.java,
+ 	gnu/java/locale/Calendar_en.java, gnu/java/locale/Calendar_nl.java,
+ 	gnu/java/locale/LocaleInformation.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_nl.java, native/java.io/File.c,
+ 	native/java.io/FileDescriptor.c, native/java.io/FileInputStream.c,
+ 	native/java.io/FileOutputStream.c,
+ 	native/java.io/RandomAccessFile.c,
+ 	native/java.io/java_io_ObjectInputStream.c,
+ 	native/java.io/java_io_ObjectOutputStream.c,
+ 	native/java.io/java_io_ObjectStreamClass.c,
+ 	native/java.io/javaio.c, native/java.io/javaio.h,
+ 	native/java.lang/Double.c, native/java.lang/Float.c,
+ 	native/java.lang/Object.c, native/java.lang/System.c,
+ 	native/java.lang/javalang.c, native/java.lang/javalang.h,
+ 	native/java.lang.reflect/Array.c, native/java.math/BigInteger.c,
+ 	native/java.net/InetAddress.c,
+ 	native/java.net/PlainDatagramSocketImpl.c,
+ 	native/java.net/PlainSocketImpl.c, native/java.net/javanet.c,
+ 	native/java.net/javanet.h, native/java.util/ResourceBundle.c,
+ 	native/java.util/TimeZone.c: Change license to libgcc-like terms.  
+ 	Fix copyright lines.  
+ 
+ 2000-03-17 19:55  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/beans/: BeanInfoEmbryo.java, EmptyBeanInfo.java,
+ 	ExplicitBeanInfo.java, IntrospectionIncubator.java,
+ 	editors/ColorEditor.java, editors/FontEditor.java,
+ 	editors/NativeBooleanEditor.java, editors/NativeByteEditor.java,
+ 	editors/NativeDoubleEditor.java, editors/NativeFloatEditor.java,
+ 	editors/NativeIntEditor.java, editors/NativeLongEditor.java,
+ 	editors/NativeShortEditor.java, editors/StringEditor.java,
+ 	info/ComponentBeanInfo.java: Change license to libcc-like terms.  
+ 
+ 2000-03-17 00:25  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/security/: DefaultPermissionCollection.java,
+ 	der/DEREncodingException.java, provider/DERReader.java,
+ 	provider/DERWriter.java, provider/DSAKeyPairGenerator.java,
+ 	provider/DSAParameterGenerator.java, provider/DSAParameters.java,
+ 	provider/DSASignature.java, provider/Gnu.java,
+ 	provider/GnuDSAPrivateKey.java, provider/GnuDSAPublicKey.java,
+ 	provider/MD5.java, provider/SHA.java, provider/SHA1PRNG.java,
+ 	util/Prime.java: Change licensing terms to libgcc-like.  Change DOS
+ 	EOLs to Unix EOLs.  
+ 
+ 2000-03-16 23:51  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/: io/ClassLoaderObjectInputStream.java,
+ 	io/EncodingManager.java, io/NullOutputStream.java,
+ 	io/ObjectIdentityWrapper.java, io/decode/Decoder.java,
+ 	io/decode/Decoder8859_1.java, io/decode/Decoder8859_2.java,
+ 	io/decode/Decoder8859_3.java, io/decode/Decoder8859_4.java,
+ 	io/decode/Decoder8859_5.java, io/decode/DecoderEightBitLookup.java,
+ 	io/decode/DecoderUTF8.java, io/encode/Encoder.java,
+ 	io/encode/Encoder8859_1.java, io/encode/Encoder8859_2.java,
+ 	io/encode/Encoder8859_3.java, io/encode/Encoder8859_4.java,
+ 	io/encode/Encoder8859_5.java, io/encode/EncoderEightBitLookup.java,
+ 	io/encode/EncoderUTF8.java, net/HeaderFieldHelper.java,
+ 	net/content/text/plain.java,
+ 	net/protocol/file/FileURLConnection.java,
+ 	net/protocol/file/Handler.java,
+ 	net/protocol/http/HttpURLConnection.java, lang/ArrayHelper.java,
+ 	lang/ClassHelper.java, lang/ClassLoaderHelper.java,
+ 	lang/ExecutionStack.java, lang/MainThread.java,
+ 	lang/StackFrame.java, lang/reflect/TypeSignature.java: Change
+ 	license to libgcc-like terms.  
+ 
+ 2000-03-16 23:31  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/: AbstractMethodError.java, ArithmeticException.java,
+ 	ArrayIndexOutOfBoundsException.java, ArrayStoreException.java,
+ 	Boolean.java, Byte.java, Character.java, ClassCastException.java,
+ 	ClassCircularityError.java, ClassFormatError.java,
+ 	ClassLoader.java, ClassNotFoundException.java,
+ 	CloneNotSupportedException.java, Cloneable.java, Comparable.java,
+ 	Compiler.java, Double.java, Error.java, Exception.java,
+ 	ExceptionInInitializerError.java, Float.java,
+ 	IllegalAccessError.java, IllegalAccessException.java,
+ 	IllegalArgumentException.java, IllegalMonitorStateException.java,
+ 	IllegalStateException.java, IllegalThreadStateException.java,
+ 	IncompatibleClassChangeError.java, IndexOutOfBoundsException.java,
+ 	InstantiationError.java, InstantiationException.java, Integer.java,
+ 	InternalError.java, InterruptedException.java, LinkageError.java,
+ 	Long.java, Math.java, NegativeArraySizeException.java,
+ 	NoClassDefFoundError.java, NoSuchFieldError.java,
+ 	NoSuchFieldException.java, NoSuchMethodError.java,
+ 	NoSuchMethodException.java, NullPointerException.java, Number.java,
+ 	NumberFormatException.java, Object.java, OutOfMemoryError.java,
+ 	Process.java, Runnable.java, RuntimeException.java,
+ 	RuntimePermission.java, SecurityException.java,
+ 	SecurityManager.java, Short.java, StackOverflowError.java,
+ 	String.java, StringBuffer.java,
+ 	StringIndexOutOfBoundsException.java, System.java,
+ 	ThreadDeath.java, ThreadGroup.java, Throwable.java,
+ 	UnknownError.java, UnsatisfiedLinkError.java,
+ 	UnsupportedClassVersionError.java,
+ 	UnsupportedOperationException.java, VerifyError.java,
+ 	VirtualMachineError.java, Void.java: Change license to libgcc-like
+ 	terms.  Fix copyright lines.  Mental note: Kill anyone who ever uses
+ 	a different format for the license header.  
+ 
+ 2000-03-16 22:33  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/System.java, native/java.lang/System.c: Add
+ 	gnu.cpu.endian property.  
+ 
+ 2000-03-16 22:24  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/reflect/: Array.java, InvocationTargetException.java,
+ 	Member.java, Modifier.java: Change license to libgcc-like terms.  
+ 	Fix copyright lines.  
+ 
+ 2000-03-16 20:40  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/security/: cert/CertificateEncodingException.java,
+ 	cert/CertificateException.java,
+ 	cert/CertificateExpiredException.java,
+ 	cert/CertificateFactory.java, cert/CertificateFactorySpi.java,
+ 	cert/CRLException.java, cert/Certificate.java,
+ 	cert/CertificateNotYetValidException.java,
+ 	cert/CertificateParsingException.java, cert/CRL.java,
+ 	cert/X509CRLEntry.java, cert/X509Certificate.java,
+ 	cert/X509CRL.java, cert/X509Extension.java,
+ 	spec/AlgorithmParameterSpec.java, spec/DSAParameterSpec.java,
+ 	spec/DSAPrivateKeySpec.java, spec/DSAPublicKeySpec.java,
+ 	spec/EncodedKeySpec.java, spec/InvalidKeySpecException.java,
+ 	spec/InvalidParameterSpecException.java, spec/KeySpec.java,
+ 	spec/PKCS8EncodedKeySpec.java, spec/RSAKeyGenParameterSpec.java,
+ 	spec/RSAPrivateCrtKeySpec.java, spec/RSAPrivateKeySpec.java,
+ 	spec/RSAPublicKeySpec.java, spec/X509EncodedKeySpec.java: Change
+ 	license to libgcc-like terms.  Change DOS EOLs to Unix EOLs.  
+ 
+ 2000-03-16 20:23  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/: security/acl/Acl.java, security/acl/AclEntry.java,
+ 	security/acl/AclNotFoundException.java, security/acl/Group.java,
+ 	security/acl/LastOwnerException.java,
+ 	security/acl/NotOwnerException.java, security/acl/Owner.java,
+ 	security/acl/Permission.java, lang/ref/PhantomReference.java,
+ 	lang/ref/Reference.java, lang/ref/ReferenceQueue.java,
+ 	lang/ref/SoftReference.java, lang/ref/WeakReference.java: Change
+ 	license to libgcc-like terms.  
+ 
+ 2000-03-16 20:18  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/security/: AccessControlContext.java,
+ 	AccessControlException.java, AlgorithmParameterGenerator.java,
+ 	AlgorithmParameterGeneratorSpi.java, AlgorithmParameters.java,
+ 	AlgorithmParametersSpi.java, AllPermission.java,
+ 	BasicPermission.java, Certificate.java, CodeSource.java,
+ 	DigestException.java, DigestInputStream.java,
+ 	DigestOutputStream.java, DomainCombiner.java,
+ 	DummyKeyPairGenerator.java, DummyMessageDigest.java,
+ 	DummySignature.java, GeneralSecurityException.java, Guard.java,
+ 	GuardedObject.java, Identity.java, IdentityScope.java,
+ 	InvalidAlgorithmParameterException.java, InvalidKeyException.java,
+ 	InvalidParameterException.java, KeyException.java, KeyFactory.java,
+ 	Key.java, KeyFactorySpi.java, KeyManagementException.java,
+ 	KeyPair.java, KeyPairGenerator.java, KeyPairGeneratorSpi.java,
+ 	KeyStore.java, KeyStoreException.java, KeyStoreSpi.java,
+ 	MessageDigest.java, MessageDigestSpi.java,
+ 	NoSuchAlgorithmException.java, NoSuchProviderException.java,
+ 	Permission.java, PermissionCollection.java, Permissions.java,
+ 	Policy.java, Principal.java, PrivateKey.java,
+ 	PrivilegedAction.java, PrivilegedActionException.java,
+ 	PrivilegedExceptionAction.java, ProtectionDomain.java,
+ 	Provider.java, ProviderException.java, PublicKey.java,
+ 	SecureClassLoader.java, SecureRandom.java, SecureRandomSpi.java,
+ 	Security.java, SecurityPermission.java, Signature.java,
+ 	SignatureException.java, SignatureSpi.java, SignedObject.java,
+ 	Signer.java, UnrecoverableKeyException.java,
+ 	UnresolvedPermission.java, interfaces/DSAKey.java,
+ 	interfaces/DSAKeyPairGenerator.java, interfaces/DSAParams.java,
+ 	interfaces/RSAKey.java, interfaces/RSAPrivateCrtKey.java,
+ 	interfaces/RSAPrivateKey.java, interfaces/RSAPublicKey.java: Change
+ 	license to libgcc-like terms.  Change DOS EOLs to Unix EOLs.  Fix
+ 	copyright lines.  
+ 
+ 2000-03-16 19:20  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/io/: BlockDataException.java, BufferedInputStream.java,
+ 	BufferedOutputStream.java, BufferedReader.java,
+ 	BufferedWriter.java, ByteArrayInputStream.java,
+ 	ByteArrayOutputStream.java, CharArrayReader.java,
+ 	CharArrayWriter.java, CharConversionException.java, DataInput.java,
+ 	DataInputStream.java, DataOutput.java, DataOutputStream.java,
+ 	EOFException.java, Externalizable.java, File.java,
+ 	FileDescriptor.java, FileFilter.java, FileInputStream.java,
+ 	FileNotFoundException.java, FileOutputStream.java,
+ 	FilePermission.java, FileReader.java, FileWriter.java,
+ 	FilenameFilter.java, FilterInputStream.java,
+ 	FilterOutputStream.java, FilterReader.java, FilterWriter.java,
+ 	IOException.java, InputStream.java, InputStreamReader.java,
+ 	InterruptedIOException.java, InvalidClassException.java,
+ 	InvalidObjectException.java, LineNumberInputStream.java,
+ 	LineNumberReader.java, NotActiveException.java,
+ 	NotSerializableException.java, ObjectInput.java,
+ 	ObjectInputStream.java, ObjectInputValidation.java,
+ 	ObjectOutput.java, ObjectOutputStream.java, ObjectStreamClass.java,
+ 	ObjectStreamConstants.java, ObjectStreamException.java,
+ 	ObjectStreamField.java, OptionalDataException.java,
+ 	OutputStream.java, OutputStreamWriter.java, PipedInputStream.java,
+ 	PipedOutputStream.java, PipedReader.java, PipedWriter.java,
+ 	PrintStream.java, PrintWriter.java, PushbackInputStream.java,
+ 	PushbackReader.java, RandomAccessFile.java, Reader.java,
+ 	Replaceable.java, Resolvable.java, SequenceInputStream.java,
+ 	Serializable.java, SerializablePermission.java,
+ 	StreamCorruptedException.java, StreamTokenizer.java,
+ 	StringBufferInputStream.java, StringReader.java, StringWriter.java,
+ 	SyncFailedException.java, UTFDataFormatException.java,
+ 	UnsupportedEncodingException.java, WriteAbortedException.java,
+ 	Writer.java: Change license to libgcc-like terms.  Fix copyright
+ 	years.  
+ 
+ 2000-03-15 23:46  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/net/: Authenticator.java, BindException.java,
+ 	ConnectException.java, ContentHandlerFactory.java,
+ 	ContentHandler.java, DatagramPacket.java, DatagramSocketImpl.java,
+ 	DatagramSocket.java, FileNameMap.java, HttpURLConnection.java,
+ 	InetAddress.java, JarURLConnection.java,
+ 	MalformedURLException.java, MimeTypeMapper.java,
+ 	MulticastSocket.java, NetPermission.java,
+ 	NoRouteToHostException.java, PasswordAuthentication.java,
+ 	PlainDatagramSocketImpl.java, PlainSocketImpl.java,
+ 	ProtocolException.java, ServerSocket.java, SocketException.java,
+ 	SocketImplFactory.java, Socket.java, SocketImpl.java,
+ 	SocketInputStream.java, SocketOptions.java,
+ 	SocketOutputStream.java, SocketPermission.java,
+ 	UnknownHostException.java, URLConnection.java, URLDecoder.java,
+ 	UnknownServiceException.java, URL.java, URLEncoder.java,
+ 	URLStreamHandlerFactory.java, URLStreamHandler.java: Change license
+ 	to libgcc-like terms.  Fix copyrights.  
+ 
+ 2000-03-15 23:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/math/: BigDecimal.java, BigInteger.java: Change to
+ 	libgcc-like terms.  Fix copyright lines.  
+ 
+ 2000-03-15 22:46  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/: applet/Applet.java, applet/AppletContext.java,
+ 	applet/AppletStub.java, applet/AudioClip.java, sql/Array.java,
+ 	sql/BatchUpdateException.java, sql/Blob.java,
+ 	sql/CallableStatement.java, sql/Clob.java, sql/Connection.java,
+ 	sql/DataTruncation.java, sql/DatabaseMetaData.java, sql/Date.java,
+ 	sql/Driver.java, sql/DriverManager.java,
+ 	sql/DriverPropertyInfo.java, sql/PreparedStatement.java,
+ 	sql/Ref.java, sql/ResultSet.java, sql/ResultSetMetaData.java,
+ 	sql/SQLData.java, sql/SQLException.java, sql/SQLInput.java,
+ 	sql/SQLOutput.java, sql/SQLWarning.java, sql/Statement.java,
+ 	sql/Struct.java, sql/Time.java, sql/Timestamp.java, sql/Types.java: 
+ 	Change license to libgcc-like terms.  
+ 
+ 2000-03-15 22:42  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/: text/Annotation.java,
+ 	text/AttributedCharacterIterator.java, text/AttributedString.java,
+ 	text/AttributedStringIterator.java, text/BreakIterator.java,
+ 	text/CharacterIterator.java, text/ChoiceFormat.java,
+ 	text/CollationElementIterator.java, text/CollationKey.java,
+ 	text/Collator.java, text/DateFormat.java,
+ 	text/DateFormatSymbols.java, text/DecimalFormatSymbols.java,
+ 	text/DefaultBreakIterator.java, text/FieldPosition.java,
+ 	text/Format.java, text/NumberFormat.java, text/ParseException.java,
+ 	text/ParsePosition.java, text/RuleBasedCollator.java,
+ 	text/SimpleDateFormat.java, text/StringCharacterIterator.java,
+ 	beans/BeanDescriptor.java, beans/BeanInfo.java, beans/Beans.java,
+ 	beans/Customizer.java, beans/DesignMode.java,
+ 	beans/EventSetDescriptor.java, beans/FeatureDescriptor.java,
+ 	beans/IndexedPropertyDescriptor.java,
+ 	beans/IntrospectionException.java, beans/Introspector.java,
+ 	beans/MethodDescriptor.java, beans/ParameterDescriptor.java,
+ 	beans/PropertyChangeEvent.java, beans/PropertyChangeListener.java,
+ 	beans/PropertyChangeSupport.java, beans/PropertyDescriptor.java,
+ 	beans/PropertyEditor.java, beans/PropertyEditorManager.java,
+ 	beans/PropertyEditorSupport.java, beans/PropertyVetoException.java,
+ 	beans/SimpleBeanInfo.java, beans/VetoableChangeListener.java,
+ 	beans/Visibility.java, beans/beancontext/BeanContext.java,
+ 	beans/beancontext/BeanContextChild.java,
+ 	beans/beancontext/BeanContextChildComponentProxy.java,
+ 	beans/beancontext/BeanContextChildSupport.java,
+ 	beans/beancontext/BeanContextContainerProxy.java,
+ 	beans/beancontext/BeanContextEvent.java,
+ 	beans/beancontext/BeanContextMembershipEvent.java,
+ 	beans/beancontext/BeanContextMembershipListener.java,
+ 	beans/beancontext/BeanContextProxy.java,
+ 	beans/beancontext/BeanContextServiceAvailableEvent.java,
+ 	beans/beancontext/BeanContextServiceProvider.java,
+ 	beans/beancontext/BeanContextServiceProviderBeanInfo.java,
+ 	beans/beancontext/BeanContextServiceRevokedEvent.java,
+ 	beans/beancontext/BeanContextServiceRevokedListener.java,
+ 	beans/beancontext/BeanContextServices.java,
+ 	beans/beancontext/BeanContextServicesListener.java: Change license
+ 	to libgcc-like terms.  Fix copyright years.  
+ 
+ 2000-03-15 21:59  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/util/: AbstractCollection.java, AbstractList.java,
+ 	AbstractMap.java, AbstractSequentialList.java, AbstractSet.java,
+ 	ArrayList.java, Arrays.java, BasicMapEntry.java, BitSet.java,
+ 	Bucket.java, Calendar.java, Collection.java, Collections.java,
+ 	Comparator.java, ConcurrentModificationException.java, Date.java,
+ 	Dictionary.java, DoubleEnumeration.java, EmptyStackException.java,
+ 	Enumeration.java, EventListener.java, EventObject.java,
+ 	GregorianCalendar.java, HashMap.java, HashSet.java, Hashtable.java,
+ 	Iterator.java, LinkedList.java, ListIterator.java, List.java,
+ 	ListResourceBundle.java, Locale.java, Map.java,
+ 	MissingResourceException.java, NoSuchElementException.java,
+ 	Observer.java, Properties.java, PropertyPermission.java,
+ 	PropertyResourceBundle.java, Random.java, ResourceBundle.java,
+ 	Set.java, SimpleTimeZone.java, SortedMap.java, SortedSet.java,
+ 	Stack.java, StringTokenizer.java, TimeZone.java,
+ 	TooManyListenersException.java, TreeMap.java, TreeSet.java,
+ 	Vector.java, WeakHashMap.java: Change license to libgcc-like terms.  
+ 	Update copyright lines to contain correct years.  
+ 
+ 2000-03-15 21:33  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/util/Observable.java: 
+ 	(notifyObservers): Use hasChanged and clearChanged.  
+ 
+ 2000-03-15 21:31  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/util/Observable.java: Make thread-safe.  
+ 
+ 2000-03-09 16:10  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/TreeMap.java: 
+ 	(rbDelete,rbDeleteFixup): Fixed rebalancing (was completely broken).  
+ 	(containsValue): Fixed (searched only half the tree).  
+ 	(dumpMethod): Method for debugging purposes.  
+ 
+ 2000-03-06 10:15  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/LinkedList.java: bug fixes.  
+ 
+ 2000-03-05 18:49  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: HashMap.java, Hashtable.java, AbstractMap.java,
+ 	WeakHashMap.java: Some bug fixes.  
+ 
+ 2000-03-03 15:23  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Vector.java: Fixed some bugs, removed some buggy
+ 	methods, that are already efficiently implemented by AbstractList.  
+ 
+ 2000-03-03 15:21  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/AbstractList.java: fixed a off by one bug in
+ 	lastIndexOf() Made SubList an inner class with explicit backing list
+ 	pointer, to remove name conflicts (jikes didn't compile it
+ 	correctly).  
+ 
+ 2000-03-03 13:11  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* THANKYOU: added more people, alphabetized again 
+ 
+ 2000-03-03 13:00  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: ArrayList.java, Bucket.java, HashMap.java,
+ 	Hashtable.java, Vector.java: patch from Steven Hugg: Don't increase
+ 	modCount on non-structural changes Bucket.add() now returns old
+ 	value directly.  
+ 
+ 2000-03-03 11:24  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: TreeMap.java, TreeSet.java: Fixed some bugs reported
+ 	by Martin Schroeder.  Clone is now implemented ;-) FIXME: rbDelete
+ 	is still incorrect and doesn't rebalance in some cases.  
+ 
+ 2000-01-31 09:56  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Collections.java: fixed a bug in shuffle (it was
+ 	duplicating some entries, removing others) 
+ 
+ 2000-01-08 05:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: Makefile.am, Makefile.am: mkdir -p pkgdatadir if it doesn't
+ 	exist 
+ 
+ 2000-01-07 04:39  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: changed to not error out if no classes for Japhar
+ 	or Kaffe are found need to implement cache checking, but it's so
+ 	ugly...  
+ 
+ 2000-01-07 03:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* THANKYOU: # small cleanup 
+ 
+ 2000-01-07 03:41  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Double.java: boolean isInfinite(double) -> static
+ 	boolean isInfinite(double) 
+ 
+ 2000-01-07 03:40  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Float.java: boolean isInfinite(float) -> static boolean
+ 	isInfinite(float) thanks to Mark Wielaard 
+ 
+ 2000-01-03 10:35  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/TimeZone.java: updated timezone data to tzdata1999j 
+ 
+ 2000-01-03 04:21  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: patch from Mark Wielaard to only add
+ 	KJC_CLASSPATH to the vm classpath 
+ 
+ 1999-12-31 14:05  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: fixed a comment 
+ 
+ 1999-12-31 13:58  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: changed LIBVERSION="0:0:0" 
+ 
+ 1999-12-31 13:51  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: vm/reference to vm/current 
+ 
+ 1999-12-31 13:46  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: classpath argument for javah also incorrect 
+ 
+ 1999-12-31 13:41  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: did not pass the right arguments to javah when
+ 	it was user specified, fix now to be -jni.  let me rant right now
+ 	and say that all these java tools using whatever the hell they want
+ 	for arguments is totally ****ed up.  
+ 
+ 1999-12-31 13:34  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: had two jikes calls switched around, it was
+ 	leaving out the user specified classlib when it shouldn't and adding
+ 	it when it shouldn't 
+ 
+ 1999-12-31 06:25  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4, configure.in, lib/Makefile.am,
+ 	lib/gen-classlist.sh.in, native/gnu.java.awt.image/Makefile.am,
+ 	native/gnu.java.awt.peer.gtk/Makefile.am,
+ 	native/java.io/Makefile.am, native/java.lang/Makefile.am,
+ 	native/java.lang.reflect/Makefile.am, native/java.net/Makefile.am,
+ 	native/java.util/Makefile.am, native/lib/Makefile.am: added support
+ 	for kjc/javac(again), see mail archives 
+ 
+ 1999-12-30 23:52  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.cvsignore: added kaffe here 
+ 
+ 1999-12-30 20:02  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: fixed it so that japhar and kaffe don't incorrectly
+ 	override bindir and datadir.  
+ 
+ 1999-12-30 18:29  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/WeakHashMap.java: added the queue parameter to
+ 	WeakBucket constructor, to fix compiling with javac.  
+ 
+ 1999-12-30 17:33  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* configure.in: sorted the output list.  This is necessary to
+ 	configure in another directory: configure cannot create files in
+ 	deeply nested directories, before it created a file in a higher
+ 	directory.  
+ 
+ 1999-12-30 17:26  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/lang/Throwable.java: fillInStackTrace():  remove exception
+ 	constructors from stack trace.  constructor:  use fillInStackTrace.  
+ 	printStackTrace(): fixed a bug, simplified.  
+ 
+ 1999-12-30 17:19  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* vm/reference/gnu/vm/stack/StackFrame.java: added toString() and
+ 	getCalledClass() 
+ 
+ 1999-12-30 17:08  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* scripts/timezones.pl: fixed a off by one error in month length
+ 	lookup.  This affected only the America/Godthab timezone.  
+ 
+ 1999-12-30 17:03  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/SimpleTimeZone.java: Added getDSTSavings() 
+ 
+ 1999-12-30 16:58  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: SimpleTimeZone.java, TimeZone.java: fixed a few bugs.  
+ 
+ 1999-12-30 16:47  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Arrays.java: added the sort(Object[], fromIndex,
+ 	toIndex...) methods added a defaultComparator, that is used to
+ 	compare if no comparator given.  rewrote the mergeSort method.  
+ 
+ 1999-12-30 15:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.image/Makefile.am: changed libdir to
+ 	pkglibdir for installation changed JAPAHR_CFLAGS to EXTRA_INCLUDES 
+ 	changed 0:0:0 to @LIBVERSION@ 
+ 
+ 1999-12-30 15:39  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Math.java: changed java_lang_Math to javalangmath for
+ 	System.loadLibrary() call 
+ 
+ 1999-12-30 15:36  Brian Jones <cbj@gnu.org>
+ 
+ 	* vm/Makefile.am: fixed problem with autoheader complaining about
+ 	the missing subdir 
+ 
+ 1999-12-30 03:16  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: ImageMediaEntry.java, MediaEntry.java,
+ 	MediaTracker.java: Committing these unfinished modules.  They don't
+ 	compile but somebody might want to hack on them.  IIRC, the problem
+ 	is that I can't figure out how to implement them based on the only
+ 	spec I have - namely the Serialized Form listing in the Javadocs.  
+ 
+ 1999-12-30 02:26  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/Makefile.am: Fix syntax error in @LIBVERSION@
+ 	autoconf variable 
+ 
+ 1999-12-30 01:24  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/standard.omit: Add a few unfinished AWT classes 
+ 
+ 1999-12-29 21:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: install class files in pkgdatadir instead of
+ 	datadir 
+ 
+ 1999-12-29 21:54  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/testsuite/Makefile.am: commented out everything 
+ 
+ 1999-12-29 21:33  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: gnu.java.awt.peer.gtk/Makefile.am, java.net/Makefile.am,
+ 	java.util/Makefile.am, lib/Makefile.am: install into pkglibdir
+ 	instead of libdir 
+ 
+ 1999-12-29 21:28  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang.reflect/Makefile.am: using pkglibdir instead of
+ 	libdir 
+ 
+ 1999-12-29 21:26  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.io/Makefile.am: simplified Makefile using pkglibdir
+ 	instead of libdir 
+ 
+ 1999-12-29 21:18  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Makefile.am: switched to installing into
+ 	pkglibdir 
+ 
+ 1999-12-29 20:28  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Makefile.am: simplified Makefile 
+ 
+ 1999-12-29 20:09  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/: Object.c, System.c: include appropriate
+ 	headers 
+ 
+ 1999-12-29 20:08  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/: Object.h, System.h: autogenerated 
+ 
+ 1999-12-29 19:58  Brian Jones <cbj@gnu.org>
+ 
+ 	* HACKING: updated TODO list and added more build information 
+ 
+ 1999-12-29 18:49  Brian Jones <cbj@gnu.org>
+ 
+ 	* vm/kaffe/: Makefile.am, java/Makefile.am, kaffe/Makefile.am,
+ 	native/Makefile.am: initial checkin 
+ 
+ 1999-12-29 18:45  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in, acinclude.m4, lib/Makefile.am,
+ 	lib/gen-classlist.sh.in, vm/Makefile.am, configure.in,
+ 	configure.in: configure work to support kaffe 
+ 
+ 1999-12-29 01:52  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/applet/: Applet.java, AppletContext.java, AppletStub.java,
+ 	AudioClip.java: Initial Checkin 
+ 
+ 1999-12-28 18:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: Made changes suggested by kopi
+ 	
+ 	(kjc) compiler team to be in keeping with JLS 4.5.4.  The changes
+ 	may be unnecessary but should not affect the outcome of compiling
+ 	with any other compiler.  
+ 
+ 1999-12-28 16:31  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Hashtable.java: fixed a bug in equals (spotted by Mark
+ 	Wielaard).  
+ 
+ 1999-12-21 03:17  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* java/awt/image/: Makefile.am, MemoryImageSource.java: Added
+ 	java.awt.image.MemoryImageSource and update Makefile.am 
+ 
+ 1999-12-20 09:43  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* gnu/java/locale/: Calendar.java, Calendar_de.java,
+ 	Calendar_en.java, Calendar_nl.java, LocaleInformation_de.java,
+ 	LocaleInformation_en.java, LocaleInformation_nl.java: Moved
+ 	calendar specific locales into its own resource bundle.  Fixed some
+ 	more typos in LocaleInformation_nl 
+ 
+ 1999-12-20 09:39  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: Calendar.java, GregorianCalendar.java, Locale.java: 
+ 	Fixed typo in getAvailableLocales()  (thanks to Mark Wielaard) 
+ 	(Gregorian)?Calendar now uses its own resource bundle.  
+ 
+ 1999-12-18 05:37  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* javax/swing/GrayFilter.java: Add GrayFilter so I can eventually
+ 	test java.awt.image.RGBImageFilter 
+ 
+ 1999-12-18 05:03  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* java/awt/image/PixelGrabber.java: java.awt.image.PixelGrabber is
+ 	for the most part finished 
+ 
+ 1999-12-18 02:32  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* java/awt/Makefile.am: Enable compilation of java.awt.image 
+ 
+ 1999-12-18 00:25  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* configure.in: Compile java.awt.image now 
+ 
+ 1999-12-18 00:24  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* lib/standard.omit: We can now compile java.awt.image 
+ 
+ 1999-12-18 00:23  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* java/awt/image/Makefile.am: Automate compiling of java.awt.image 
+ 
+ 1999-12-18 00:22  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* java/awt/image/: AreaAveragingScaleFilter.java,
+ 	CropImageFilter.java, DirectColorModel.java,
+ 	FilteredImageSource.java, ImageFilter.java, IndexColorModel.java,
+ 	ReplicateScaleFilter.java: Compilation fixes for java.awt.image 
+ 
+ 1999-12-17 21:18  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* java/awt/image/RGBImageFilter.java: RGBImageFilter - still needs
+ 	some tweaks and bug testing 
+ 
+ 1999-12-17 18:51  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* java/awt/image/: DirectColorModel.java, ColorModel.java: Fixed
+ 	Compilation Errors in java.awt.image.ColorModel and DirectColorModel 
+ 
+ 1999-12-16 10:54  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/text/: DateFormat.java, DateFormatSymbols.java: submitted
+ 	patch by Mark Wielaard.  
+ 
+ 1999-12-16 10:50  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* gnu/java/locale/: LocaleInformation_de.java,
+ 	LocaleInformation_en.java, LocaleInformation_nl.java, Makefile.am: 
+ 	submitted patch by Mark Wielaard: Added LocaleInformation_nl and
+ 	fixed a typo in other locales.  
+ 
+ 1999-12-16 10:45  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* THANKYOU: added Mark Wielaard 
+ 
+ 1999-12-15 05:05  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/DirectColorModel.java: rearranged constructor 
+ 
+ 1999-12-15 05:04  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/: FilteredImageSource.java, IndexColorModel.java: 
+ 	initial commit 
+ 
+ 1999-12-14 03:58  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/ColorModel.java: masks for creating default color
+ 	model are correct now according to JDK 
+ 
+ 1999-12-14 03:30  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/ColorModel.java: # this might be the right form
+ 	for the bits... ? 
+ 
+ 1999-12-14 02:10  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/ColorModel.java: # call DirectColorModel
+ 	appropriately 
+ 
+ 1999-12-14 02:08  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/: CropImageFilter.java, DirectColorModel.java: 
+ 	initial commit 
+ 
+ 1999-12-14 01:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/: AreaAveragingScaleFilter.java, ColorModel.java,
+ 	ReplicateScaleFilter.java: initial commits 
+ 
+ 1999-12-13 21:39  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/Makefile.am: added vmintegration.texinfo to info_TEXINFOS 
+ 
+ 1999-12-12 17:42  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java: Minor syntax error
+ 	(method should be static).  
+ 
+ 1999-12-10 14:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* vm/reference/java/lang/Class.java,
+ 	vm/reference/java/lang/VMClassLoader.java, java/lang/Boolean.java,
+ 	java/lang/Byte.java, java/lang/Character.java,
+ 	java/lang/Double.java, java/lang/Float.java,
+ 	java/lang/Integer.java, java/lang/Long.java, java/lang/Short.java,
+ 	java/lang/Void.java: changing Class.getPrimitiveClass back to
+ 	VMClassLoader.getPrimitiveClass, thanks John 
+ 
+ 1999-12-10 04:35  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Boolean.java, java/lang/Byte.java,
+ 	java/lang/Character.java, java/lang/Double.java,
+ 	java/lang/Float.java, java/lang/Integer.java, java/lang/Long.java,
+ 	java/lang/Short.java, java/lang/Void.java,
+ 	vm/reference/java/lang/Class.java,
+ 	vm/reference/java/lang/VMClassLoader.java: changed
+ 	VMCLassLoader.getPrimitiveClass to Class.getPrimitiveClass 
+ 
+ 1999-12-09 04:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/vmintegration.texinfo: updated menus C-u C-c C-u m is your
+ 	friend 
+ 
+ 1999-12-07 00:38  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang.reflect/Makefile.am: removed reflect.c and
+ 	reflect.h 
+ 
+ 1999-12-07 00:37  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang.reflect/: Constructor.c, Field.c, Method.c,
+ 	reflect.c, reflect.h: the VM must implement these 
+ 
+ 1999-12-07 00:33  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang.reflect/TODO: no longer pertinent 
+ 
+ 1999-11-27 05:54  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/ImageFilter.java: clone() throws
+ 	CloneNotSupportedException in Java 2 
+ 
+ 1999-11-27 05:53  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Error.java: # typo 
+ 
+ 1999-11-27 05:46  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/ImageFilter.java: initial commit 
+ 
+ 1999-11-26 15:31  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/ImageConsumer.java: # typos 
+ 
+ 1999-11-26 15:29  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/: ImageObserver.java, ImageProducer.java: initial
+ 	commit 
+ 
+ 1999-11-26 06:21  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/image/ImageConsumer.java: initial checkin 
+ 
+ 1999-11-26 06:05  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/standard.omit: omit java.awt.image 
+ 
+ 1999-11-26 04:53  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: # fixed it so mkdep can detect more native
+ 	methods 
+ 
+ 1999-11-26 04:27  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/: net/PlainSocketImpl.java, io/File.java: # fixed it so
+ 	mkdep can detect the native method 
+ 
+ 1999-11-26 01:29  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/net/: InetAddress.java, PlainDatagramSocketImpl.java: #
+ 	fixed it so mkdep can detect the native method 
+ 
+ 1999-11-26 01:13  Brian Jones <cbj@gnu.org>
+ 
+ 	* HACKING: notes on obtaining gdk-pixbuf 
+ 
+ 1999-11-26 00:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* .cvsignore: added stamp-h.in, include 
+ 
+ 1999-11-26 00:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.util/.cvsignore: initial commit 
+ 
+ 1999-11-26 00:38  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/util/TimeZone.java: # made a change to help me catch this
+ 	native method 
+ 
+ 1999-11-26 00:30  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang.reflect/: Array.c, Constructor.c, Field.c,
+ 	Method.c: updated #include 
+ 
+ 1999-11-26 00:29  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: java.lang.reflect/Array.h,
+ 	java.lang.reflect/Constructor.h, java.lang.reflect/Field.h,
+ 	java.lang.reflect/Method.h, java.net/java_net_InetAddress.h,
+ 	java.net/java_net_PlainDatagramSocketImpl.h,
+ 	java.net/java_net_PlainSocketImpl.h,
+ 	java.util/java_util_ResourceBundle.h,
+ 	java.util/java_util_TimeZone.h: autogenerated 
+ 
+ 1999-11-26 00:23  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: java.io/java_io_File.h,
+ 	java.io/java_io_FileInputStream.h,
+ 	java.io/java_io_FileOutputStream.h,
+ 	java.io/java_io_ObjectInputStream.h,
+ 	java.io/java_io_ObjectOutputStream.h,
+ 	java.io/java_io_ObjectStreamClass.h,
+ 	java.io/java_io_RandomAccessFile.h, java.lang/java_lang_Double.h,
+ 	java.lang/java_lang_Float.h, java.lang/java_lang_Math.h: 
+ 	autogenerated now 
+ 
+ 1999-11-26 00:04  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Double.java: # typo 
+ 
+ 1999-11-24 01:49  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.image/Makefile.am: Fix to properly link
+ 	against gtkpeer.  
+ 
+ 1999-11-24 01:01  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/image/ImageDecoder.java: Remove `public' from
+ 	produce method.  
+ 
+ 1999-11-23 05:06  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/: ObjectStreamClass.java, ObjectStreamConstants.java,
+ 	ObjectStreamField.java: Added Get/PutField support.  
+ 
+ 1999-11-23 05:03  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: Added GetField class and
+ 	associated methods.  
+ 
+ 1999-11-23 05:01  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectOutputStream.java: Added PutField class and
+ 	associated methods.  
+ 
+ 1999-11-23 00:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* lib/standard.omit: Remove reference to GdkPixbufLoader 
+ 
+ 1999-11-23 00:13  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/image/GdkPixbufDecoder.java: Initial commit.  
+ 
+ 1999-11-23 00:12  Paul Fisher <rao@gnu.org>
+ 
+ 	* configure.in, native/gnu.java.awt.image/Makefile.am,
+ 	native/gnu.java.awt.image/gdkpixbufdecoder.c: Add in gdk-pixbuf
+ 	code.  
+ 
+ 1999-11-23 00:10  Paul Fisher <rao@gnu.org>
+ 
+ 	* HACKING: Add gdk-pixbuf requirement.  
+ 
+ 1999-11-22 21:38  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java: 
+ 	(setVisible): Override ComponentPeer.setVisible, so we can call an 
+ 	XFlush after gdk_window_show.  
+ 
+ 1999-11-22 21:35  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: XFlush to keep
+ 	events moving along.  
+ 
+ 1999-11-22 21:00  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gdkgraphics.c: 
+ 	(translateNative): Remove race condition on set/get of
+ 	{x,y}_offsets.  
+ 
+ 1999-11-22 20:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gdkgraphics.c: 
+ 	(dispose): Replace gdk_flush () with XFlush (GDK_DISPLAY ()).  
+ 
+ 1999-11-21 22:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* COPYING.LIB: updated to version 2.1 
+ 
+ 1999-11-20 23:40  Geoff Berry <gcb@gnu.org>
+ 
+ 	* native/java.io/: java_io_ObjectInputStream.c,
+ 	java_io_ObjectOutputStream.c, java_io_ObjectStreamClass.c: Convert
+ 	C++ style comments to C style comments.  
+ 
+ 1999-11-20 01:52  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Test.java,
+ 	gnu/java/awt/peer/gtk/TestAWT.java,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpanelpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkscrollpanepeer.c: Make ScrollPanes
+ 	and Scrollbars work reasonably well.  
+ 
+ 1999-11-19 20:27  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/awt/event/AdjustmentEvent.java: Change "BLOCK_INCREMENTS" to
+ 	"BLOCK_INCREMENT".  
+ 
+ 1999-11-19 20:16  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c: 
+ 	(connectHooks): Connect "value_changed" to adjustment.  
+ 
+ 1999-11-19 19:41  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/awt/ScrollPane.java: Really fix static final constants.  
+ 
+ 1999-11-19 18:10  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/awt/ScrollPane.java: Fix static final constants.  
+ 
+ 1999-11-19 02:52  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* doc/www.gnu.org/: status.mhtml, macros.mhtml: Update status to
+ 	reflect that I'm doing java.awt.applet and that Mark Benvenuto is
+ 	doing java.security.* 
+ 
+ 1999-11-19 02:15  Mark Benvenuto <mcb54@columbia.edu>
+ 
+ 	* AUTHORS, java/security/AccessControlContext.java,
+ 	java/security/BasicPermission.java,
+ 	java/security/DomainCombiner.java,
+ 	java/security/KeyPairGenerator.java, java/security/Signature.java,
+ 	java/security/cert/Certificate.java,
+ 	java/security/interfaces/RSAKey.java,
+ 	java/security/interfaces/RSAPrivateKey.java,
+ 	java/security/interfaces/RSAPublicKey.java,
+ 	java/security/spec/RSAKeyGenParameterSpec.java: Updated the AUTHORS
+ 	file so I am reflected as an author. Commited some JDK 1.3 Beta
+ 	updates to java.security 
+ 
+ 1999-11-18 05:39  Brian Jones <cbj@gnu.org>
+ 
+ 	* HACKING: GNU Classpath has no compile errors with Java source
+ 	code now.  
+ 	Changed documentation on building to note that kaffeh has a bug
+ 	which makes it useless for some .h generation at the moment, but
+ 	javah from Sun works.  
+ 	Note on jni.h and why we currently require Japhar for it.  
+ 
+ 1999-11-18 05:31  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: entering no compile errors phase 
+ 
+ 1999-11-18 05:12  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/standard.omit: removed java.awt.even.InputMethodListener
+ 	which was causing InputMethodEvent to be compiled 
+ 
+ 1999-11-18 04:46  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: Makefile.am, mkdep.pl.in: fix problem with always
+ 	generating headers when glibj.zip changes 
+ 
+ 1999-11-18 03:20  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* THANKYOU: Updating with new guy 
+ 
+ 1999-11-18 02:24  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/ChoiceFormat.java: Stub out missing format() method -
+ 	hope it compiles 
+ 
+ 1999-11-18 02:22  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* vm/reference/java/lang/Thread.java: Stub out
+ 	getContextClassLoader - hope it compiles 
+ 
+ 1999-11-18 01:10  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: 
+ 	(getFontMetrics): Make compile.  
+ 
+ 1999-11-18 01:02  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: 
+ 	(getColorModel, getFontMetrics): Implement.  
+ 
+ 1999-11-18 00:43  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c: Add back scrollbar
+ 	support (should work).  
+ 
+ 1999-11-18 00:42  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: 
+ 	(getType): remove 
+ 
+ 1999-11-18 00:07  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/security/SecureClassLoader.java: Add Mark's updates.  
+ 
+ 1999-11-17 03:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: added dist-hook 
+ 
+ 1999-11-17 02:24  Paul Fisher <rao@gnu.org>
+ 
+ 	* configure.in, native/gnu.java.awt.peer.gtk/gtkimagepainter.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h, native/java.lang/fdlibm.h,
+ 	native/java.math/BigInteger.c: Check for byte order with autoconf.  
+ 
+ 1999-11-17 02:05  Paul Fisher <rao@gnu.org>
+ 
+ 	* acinclude.m4, configure.in,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Makefile, gnu/java/awt/peer/gtk/Test.java,
+ 	gnu/java/awt/peer/gtk/TestAWT.java, java/awt/Dialog.java,
+ 	java/awt/Graphics.java, java/awt/Image.java, java/awt/Menu.java,
+ 	java/awt/Toolkit.java, java/awt/peer/ComponentPeer.java,
+ 	java/awt/peer/MenuPeer.java, java/awt/peer/PopupMenuPeer.java,
+ 	lib/standard.omit, native/gnu.java.awt.peer.gtk/Makefile.am,
+ 	native/gnu.java.awt.peer.gtk/gdkgraphics.c,
+ 	native/gnu.java.awt.peer.gtk/gtkimagepainter.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h: Make peers build with
+ 	toplevel build environment.  
+ 
+ 1999-11-17 01:51  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/awt/MenuComponent.java: Change parent to be a MenuContainer.  
+ 
+ 1999-11-16 06:20  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile.am: Remove
+ 	gtkcontainerpeer.c.  
+ 
+ 1999-11-16 06:20  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcontainerpeer.c: no longer
+ 	necessary.  
+ 
+ 1999-11-16 06:02  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/awt/PopupMenu.java: show: Call proper peer method.  
+ 
+ 1999-11-16 05:32  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/awt/Rectangle.java: Add translate (int, int).  
+ 
+ 1999-11-16 05:28  Paul Fisher <rao@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: Change regex in hasNativeMethod.  
+ 
+ 1999-11-16 05:08  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile.am: Remove gtkdialogpeer.c 
+ 
+ 1999-11-16 05:07  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkdialogpeer.c: no longer needed.  
+ 
+ 1999-11-16 03:21  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Forgot to commit
+ 	earlier.  
+ 
+ 1999-11-16 01:35  Paul Fisher <rao@gnu.org>
+ 
+ 	* HACKING: Add libart_lgpl dependency.  
+ 
+ 1999-11-16 01:32  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkbuttonpeer.c, gtkcanvaspeer.c,
+ 	gtkcheckboxpeer.c, gtkchoicepeer.c, gtkcomponentpeer.c,
+ 	gtkevents.c, gtkfiledialogpeer.c, gtkimagepainter.c,
+ 	gtklabelpeer.c, gtklistpeer.c, gtkmenuitempeer.c, gtkpanelpeer.c,
+ 	gtkscrollbarpeer.c, gtkscrollpanepeer.c, gtktextareapeer.c,
+ 	gtktextfieldpeer.c, gtkwindowpeer.c: toshok-style commit.  
+ 
+ 1999-11-16 01:20  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/image/: ImageDecoder.java, XBMDecoder.java: Change
+ 	framework to allow for proper reloading of image data.  
+ 
+ 1999-11-16 01:19  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkToolkit.java, GtkWindowPeer.java,
+ 	GtkTextComponentPeer.java, GtkTextFieldPeer.java,
+ 	GtkScrollPanePeer.java, GtkListPeer.java, GtkPanelPeer.java,
+ 	GtkLabelPeer.java, GtkImagePainter.java, GtkImage.java,
+ 	GtkFramePeer.java, GtkDialogPeer.java, GtkFileDialogPeer.java,
+ 	GtkContainerPeer.java, GtkComponentPeer.java, GtkCanvasPeer.java,
+ 	GtkChoicePeer.java, GtkButtonPeer.java, GdkGraphics.java,
+ 	GtkRadioButtonPeer.java, GtkCheckButtonPeer.java,
+ 	GtkToggleButtonPeer.java, GtkArg.java, GtkArgList.java: Implement
+ 	image functions in GdkGraphics.  Depend on libart.  Major design
+ 	changes.  
+ 
+ 1999-11-15 20:36  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* doc/www.gnu.org/classpath.mhtml: Mailing list archive is now
+ 	linked to from the web page.  
+ 
+ 1999-11-15 13:17  Brian Jones <cbj@gnu.org>
+ 
+ 	* HACKING: todo updates and how to build updates 
+ 
+ 1999-11-14 14:52  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: japhar check only forced if you do not define javah
+ 	and classlib and you are in either of developer or maintainer build
+ 	mode 
+ 
+ 1999-11-13 18:10  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: java.lang/Makefile.am, java.lang.reflect/Makefile.am,
+ 	java.net/Makefile.am, java.util/Makefile.am, lib/Makefile.am: added
+ 	-I$(top_srcdir)/include to INCLUDES 
+ 
+ 1999-11-13 18:10  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.io/Makefile.am: added -I/include to INCLUDES 
+ 
+ 1999-11-13 18:09  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/Makefile.am: removed config.h stuff 
+ 
+ 1999-11-13 18:03  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: Makefile.am, mkdep.pl.in, standard.omit: updates 
+ 
+ 1999-11-13 18:02  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/util/Random.java: public int next(int) -> protected int
+ 	next(int) to match 1.1/1.2 signatures 
+ 
+ 1999-11-13 18:02  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/security/SecureClassLoader.java: added two missing
+ 	semicolons 
+ 
+ 1999-11-13 17:59  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: config.h generated in include/ 
+ 
+ 1999-11-13 17:57  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/java.dep: generated in build 
+ 
+ 1999-11-13 17:57  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.cvsignore: added java.dep and compile-classes 
+ 
+ 1999-11-13 17:49  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/image/.cvsignore,
+ 	gnu/java/security/provider/.cvsignore, java/awt/.cvsignore,
+ 	java/awt/peer/.cvsignore, java/awt/datatransfer/.cvsignore,
+ 	java/awt/event/.cvsignore, java/awt/print/.cvsignore,
+ 	java/awt/image/.cvsignore, java/beans/beancontext/.cvsignore,
+ 	java/lang/ref/.cvsignore, java/security/cert/.cvsignore,
+ 	java/security/spec/.cvsignore, projects/swing/COPYING.LIB, HACKING: 
+ 	initial checkin 
+ 
+ 1999-11-13 17:16  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: GdkGraphics.h, Makefile,
+ 	Makefile.am: removed autogenerated .h files 
+ 
+ 1999-11-13 17:14  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gdkfontmetrics.c, gdkgraphics.c,
+ 	gtkbuttonpeer.c, gtkcanvaspeer.c, gtkcheckboxmenuitempeer.c,
+ 	gtkcheckboxpeer.c, gtkchoicepeer.c, gtkclipboard.c,
+ 	gtkcomponentpeer.c, gtkcontainerpeer.c, gtkdialogpeer.c,
+ 	gtkfiledialogpeer.c, gtkimagepainter.c, gtklabelpeer.c,
+ 	gtklistpeer.c, gtkmainthread.c, gtkmenubarpeer.c,
+ 	gtkmenuitempeer.c, gtkmenupeer.c, gtkpanelpeer.c,
+ 	gtkpopupmenupeer.c, gtkscrollbarpeer.c, gtkscrollpanepeer.c,
+ 	gtktextareapeer.c, gtktextcomponentpeer.c, gtktextfieldpeer.c,
+ 	gtktoolkit.c, gtkwindowpeer.c: include files are autogenerated by
+ 	the build and located in $(top_srcdir)/include include files have
+ 	gnu_java_awt_peer_gtk_ prepended as is normal with javah include
+ 	directives in *.c updated appropriately 
+ 
+ 1999-11-13 16:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/GtkButtonPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkCanvasPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkCheckboxPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkChoicePeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkClipboard.h,
+ 	native/gnu.java.awt.peer.gtk/GtkComponentPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkContainerPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkDialogPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkFileDialogPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkFramePeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkGenericPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkImage.h,
+ 	native/gnu.java.awt.peer.gtk/GtkImagePainter.h,
+ 	native/gnu.java.awt.peer.gtk/GtkLabelPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkListPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkMainThread.h,
+ 	native/gnu.java.awt.peer.gtk/GtkPanelPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkScrollPanePeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkScrollbarPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkTextAreaPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkTextComponentPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkTextFieldPeer.h,
+ 	native/gnu.java.awt.peer.gtk/GtkToolkit.h,
+ 	native/gnu.java.awt.peer.gtk/GtkWindowPeer.h,
+ 	native/gnu.java.awt.peer.gtk/Makefile,
+ 	gnu/java/awt/peer/gtk/Makefile: no longer needed 
+ 
+ 1999-11-13 15:48  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/peer/ComponentPeer.java: removed bogus method
+ 	nextFocus() 
+ 
+ 1999-11-13 05:47  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/: Button.java, Canvas.java, Checkbox.java,
+ 	CheckboxMenuItem.java, Choice.java, Dialog.java, FileDialog.java,
+ 	Label.java, List.java, MenuBar.java, Panel.java, ScrollPane.java,
+ 	Scrollbar.java, TextArea.java, TextComponent.java, TextField.java,
+ 	peer/ButtonPeer.java, peer/CanvasPeer.java,
+ 	peer/CheckboxMenuItemPeer.java, peer/CheckboxPeer.java,
+ 	peer/ChoicePeer.java, peer/ContainerPeer.java,
+ 	peer/DialogPeer.java, peer/FileDialogPeer.java,
+ 	peer/FramePeer.java, peer/LabelPeer.java,
+ 	peer/LightweightPeer.java, peer/ListPeer.java,
+ 	peer/MenuBarPeer.java, peer/MenuItemPeer.java, peer/MenuPeer.java,
+ 	peer/PanelPeer.java, peer/PopupMenuPeer.java,
+ 	peer/ScrollPanePeer.java, peer/ScrollbarPeer.java,
+ 	peer/TextAreaPeer.java, peer/TextComponentPeer.java,
+ 	peer/TextFieldPeer.java, peer/WindowPeer.java: more changes for
+ 	compiling 
+ 
+ 1999-11-12 04:17  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/: CheckboxMenuItem.java, Dialog.java, Frame.java,
+ 	Menu.java, MenuItem.java, PopupMenu.java, Window.java: less than
+ 	half of the fixes needed to compile 
+ 
+ 1999-11-12 03:48  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/peer/: CanvasPeer.java, CheckboxMenuItemPeer.java,
+ 	CheckboxPeer.java, ChoicePeer.java, ContainerPeer.java,
+ 	DialogPeer.java, FileDialogPeer.java, FramePeer.java,
+ 	LabelPeer.java, LightweightPeer.java, ListPeer.java,
+ 	MenuBarPeer.java, MenuItemPeer.java, MenuPeer.java, PanelPeer.java,
+ 	PopupMenuPeer.java, ScrollPanePeer.java, ScrollbarPeer.java,
+ 	TextAreaPeer.java, TextComponentPeer.java, TextFieldPeer.java,
+ 	WindowPeer.java: changed extends *Peer to implements *Peer 
+ 
+ 1999-11-12 03:10  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/AWTEventMulticaster.java: 
+ 	remove(TextListener,TextListener): added method 
+ 
+ 1999-11-12 01:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/Toolkit.java: added method DialogPeer
+ 	createDialog(Dialog target) 
+ 
+ 1999-11-12 01:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/peer/ButtonPeer.java: removed extends object... must be
+ 	tired 
+ 
+ 1999-11-12 01:29  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/peer/ButtonPeer.java: changed extends ComponentPeer to
+ 	implements ComponentPeer and added extends Object 
+ 
+ 1999-11-11 23:24  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/standard.omit: compile stuff in gnu/java/awt/peer/gtk 
+ 
+ 1999-11-11 23:24  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/Makefile.am: gnu.java.awt.peer.gtk back in SUBDIRS 
+ 
+ 1999-11-11 23:23  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: config.h, config.h.in: no longer needed 
+ 
+ 1999-11-11 23:21  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: distinguish java.awt.List
+ 	from java.util.List 
+ 
+ 1999-11-11 22:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/standard.omit: do not compile stuff in gnu/java/awt/peer/gtk 
+ 
+ 1999-11-11 22:41  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/Makefile.am: do not compile stuff in gnu.java.awt.peer.gtk 
+ 
+ 1999-11-11 04:50  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.cvsignore: ignore more stuff 
+ 
+ 1999-11-11 04:49  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/beans/beancontext/Makefile.am: initial checkin 
+ 
+ 1999-11-11 04:48  Brian Jones <cbj@gnu.org>
+ 
+ 	* .cvsignore: ignore config.h* 
+ 
+ 1999-11-11 04:40  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: updates 
+ 
+ 1999-11-10 14:05  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: properly generate headers.dep, really 
+ 
+ 1999-11-10 14:02  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: properly generate headers.dep 
+ 
+ 1999-11-08 04:34  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/beans/Makefile.am: # fixed missing \ 
+ 
+ 1999-11-07 20:01  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: ignore some errors 
+ 
+ 1999-11-07 19:57  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: mostly working java build with jikes 
+ 
+ 1999-11-06 04:55  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/: FileInputStream.c, RandomAccessFile.c, javaio.c,
+ 	javaio.h: Fix seek problem 
+ 
+ 1999-11-04 13:57  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/: Float.c, Double.c: patch to remove Japhar
+ 	kludge from Chris Toshok 
+ 
+ 1999-11-04 05:23  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: definitely make lib before native 
+ 
+ 1999-11-04 05:23  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: Makefile.am, standard.omit, java.dep: updates 
+ 
+ 1999-10-30 15:51  Brian Jones <cbj@gnu.org>
+ 
+ 	* javax/swing/plaf/: BorderUIResource.java, UIResource.java: 
+ 	finished the move 
+ 
+ 1999-10-29 22:53  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/datatransfer/DataFlavor.java: static(): fixed a problem
+ 	with initializing static final variables which jikes did not like by
+ 	creating another intermediate non-final static variable and
+ 	assigning its value to each final variable exactly once.  
+ 
+ 1999-10-24 08:55  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: added CSO flag again 
+ 
+ 1999-10-24 08:47  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: minor oops 
+ 
+ 1999-10-24 08:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: updated 
+ 
+ 1999-10-24 08:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/mkdep.pl.in: maintainer utility 
+ 
+ 1999-10-24 08:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: some changes for jikes support # having a
+ 	problem with make but jikes compiles nearly 700 classes so # that's
+ 	good 
+ 
+ 1999-10-24 06:15  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: # updated version number for the inevitable release
+ 	:) 
+ 
+ 1999-10-24 05:57  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: deps.sh.in, .deps: no longer needed, broken anyway 
+ 
+ 1999-10-24 05:54  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: no longer need jdeps, using jikes instead (1.09+) 
+ 	added a number of derived objects for configure to produce added a
+ 	check for perl, used in maintainer-build 
+ 
+ 1999-10-24 05:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/beans/Makefile.am: updated EXTRA_DIST added SUBDIRS 
+ 
+ 1999-10-24 05:36  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/Makefile.am: added SUBDIRS 
+ 
+ 1999-10-24 05:34  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/: Makefile.am, datatransfer/Makefile.am,
+ 	event/Makefile.am, peer/Makefile.am, print/Makefile.am: initial
+ 	checkin 
+ 
+ 1999-10-24 05:19  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/peer/Makefile.am, gnu/java/awt/peer/gtk/Makefile.am,
+ 	java/Makefile.am, java/security/Makefile.am: updated 
+ 
+ 1999-10-24 05:18  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/image/Makefile.am, java/security/cert/Makefile.am,
+ 	java/security/spec/Makefile.am: initial commit 
+ 
+ 1999-10-24 05:18  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/Makefile.am: added image to SUBDIRS 
+ 
+ 1999-10-23 05:59  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: remove lib/deps.sh as derived object of configure 
+ 
+ 1999-10-23 05:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/standard.omit: ignore gnu/javax/swing/plaf/gtk/.* 
+ 
+ 1999-10-23 05:03  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/peer/TextComponentPeer.java: getCaretPosition() :
+ 	changed return type to int from void 
+ 
+ 1999-10-23 05:01  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/peer/ScrollPanePeer.java: getHScrollbarHeight() : set
+ 	return type to int getVScrollbarWidth()  : set return type to int 
+ 
+ 1999-10-23 04:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/event/WindowEvent.java: WINDOW_ClOSED changed to
+ 	WINDOW_CLOSED 
+ 
+ 1999-10-23 04:53  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/awt/TextArea.java: append() : changed reference to variable
+ 	'text' to the argument of the function 'str' 
+ 
+ 1999-10-20 05:39  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu/java/awt/peer/gtk/GtkCanvasPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gdkgraphics.c,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkevents.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpanelpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Make Swing go.  
+ 
+ 1999-10-20 04:10  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/standard.omit: updated 
+ 
+ 1999-10-20 03:37  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/security/provider/SHA1PRNG.java: added package
+ 	definition gnu.java.security.provider 
+ 
+ 1999-10-17 05:21  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gdkgraphics.c,
+ 	native/gnu.java.awt.peer.gtk/gtkimagepainter.c,
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkOffScreenImage.java: Implement double
+ 	buffering support (minus the ImageProducer).  
+ 
+ 1999-10-17 05:16  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkmenuitempeer.c,
+ 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java: Implement setEnabled
+ 	and setLabel.  
+ 
+ 1999-10-16 23:54  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gdkgraphics.c,
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java: Implement copyArea.  
+ 
+ 1999-10-16 23:29  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gdkgraphics.c,
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java: Implement clipRect.  
+ 
+ 1999-10-16 23:09  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	native/gnu.java.awt.peer.gtk/gdkgraphics.c: Implement most of
+ 	Graphics (minus Images and stupid rounded rectangles).  
+ 
+ 1999-10-16 05:13  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	native/gnu.java.awt.peer.gtk/gtkmenupeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpopupmenupeer.c: Implement
+ 	MenuShortcuts.  
+ 
+ 1999-10-16 04:25  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/: Makefile, doc/Makefile, announce/Makefile: 
+ 	fixed my earlier mistake 
+ 
+ 1999-10-16 01:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/: announce/Makefile, doc/Makefile, status.mhtml,
+ 	status.mhtml: updated 
+ 
+ 1999-10-16 01:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/www.gnu.org/Makefile: better recursion, moved almost all
+ 	rules into this one Makefile 
+ 
+ 1999-10-15 21:34  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtktextareapeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtktextcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtktextfieldpeer.c: Clean up.  
+ 
+ 1999-10-15 20:20  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtklistpeer.c: Clean up and make
+ 	getSelectedIndexes return sane values.  
+ 
+ 1999-10-15 20:19  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java: Clean up and remove
+ 	myListPeer.  
+ 
+ 1999-10-13 20:08  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	native/gnu.java.awt.peer.gtk/gtkpopupmenupeer.c: Add popup menu
+ 	support.  
+ 
+ 1999-10-12 23:55  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkevents.c: Fire MOUSE_MOVED and
+ 	MOUSE_DRAGGED events.  
+ 
+ 1999-10-12 20:27  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	native/gnu.java.awt.peer.gtk/gdkfontmetrics.c: Add FontMetrics
+ 	support.  
+ 
+ 1999-10-12 17:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java: Remove paintMode and make
+ 	use of immutable property of Color objects.  
+ 
+ 1999-10-12 05:30  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java: Simplify color ops.  
+ 
+ 1999-10-12 05:25  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java: Initial commit.  
+ 
+ 1999-10-12 05:18  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu/java/awt/peer/gtk/GtkCanvasPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkContainerPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gdkgraphics.c,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtktoolkit.c,
+ 	native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Add Font support.  
+ 	Change around getGraphics handling.  Add XOR drawing support.  
+ 
+ 1999-10-12 05:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* resource/gnu/java/awt/peer/gtk/font.properties: Change suffixes
+ 	to integers (style value).  
+ 
+ 1999-10-07 21:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* resource/gnu/java/awt/peer/gtk/font.properties: Initial commit
+ 	for iso8859-1 fonts.  
+ 
+ 1999-10-04 23:06  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkcomponentpeer.c,
+ 	gtkcontainerpeer.c, gtkpanelpeer.c, gtkscrollpanepeer.c,
+ 	gtkwindowpeer.c: Switch to GtkLayout.  
+ 
+ 1999-10-04 23:05  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java: Remove unnecessary
+ 	checkResize.  
+ 
+ 1999-10-04 22:03  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkdialogpeer.c,
+ 	gtkfiledialogpeer.c: Kinda make FileDialog go.  
+ 
+ 1999-10-04 22:03  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkContainerPeer.java,
+ 	GtkDialogPeer.java, GtkFileDialogPeer.java: Kinda make the
+ 	FileDialog go, while breaking Dialog.  
+ 
+ 1999-10-04 11:20  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/security/cert/: Collection.java, Set.java: removed bogus
+ 	classes.  
+ 
+ 1999-10-04 01:59  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: 
+ 	(setBounds): Add note to fix.  
+ 
+ 1999-10-04 01:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkContainerPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuBarPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkevents.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmainthread.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmenuitempeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Handle Insets.  
+ 
+ 1999-10-02 21:45  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkmenuitempeer.c: 
+ 	(create): Handle separators properly.  
+ 
+ 1999-10-02 21:45  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuPeer.java: 
+ 	(addSeparator): create a MenuItem with "-" as the label.  
+ 
+ 1999-10-02 21:31  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	native/gnu.java.awt.peer.gtk/gtkcheckboxmenuitempeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmenuitempeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Add CheckboxMenuItem
+ 	support.  
+ 
+ 1999-10-02 07:06  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	gnu/java/awt/peer/gtk/TestAWT.java,
+ 	native/gnu.java.awt.peer.gtk/gtkmenubarpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmenuitempeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmenupeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Add basic menu
+ 	support.  
+ 
+ 1999-10-01 03:24  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtklistpeer.c: Use a GtkCList
+ 	instead of a GtkList.  
+ 
+ 1999-09-29 13:40  Brian Jones <cbj@gnu.org>
+ 
+ 	* config.guess, config.sub: updated to version 1.4 automake 
+ 
+ 1999-09-20 20:38  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/locale/: block.uni, character.uni: Unicode 3.0 database
+ 	support 
+ 
+ 1999-09-20 20:34  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/unicode/: UnicodeData-3.0.txt, ReadMe-3.0.txt, BLOCKS.TXT: 
+ 	Unicode 3.0 database 
+ 
+ 1999-09-19 01:38  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4, configure.in, lib/Makefile.am: support for jikes 
+ 
+ 1999-09-15 04:04  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile: no longer needed 
+ 
+ 1999-09-15 03:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4, configure.in, native/Makefile.am: updates for
+ 	libgtk libglib gtkpeers 
+ 
+ 1999-09-15 03:55  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile.am: # initial checkin 
+ 
+ 1999-09-15 03:54  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: GdkGraphics.h, GtkButtonPeer.h,
+ 	GtkCanvasPeer.h, GtkCheckboxPeer.h, GtkChoicePeer.h,
+ 	GtkClipboard.h, GtkComponentPeer.h, GtkContainerPeer.h,
+ 	GtkDialogPeer.h, GtkFileDialogPeer.h, GtkFramePeer.h,
+ 	GtkGenericPeer.h, GtkImage.h, GtkImagePainter.h, GtkLabelPeer.h,
+ 	GtkListPeer.h, GtkMainThread.h, GtkPanelPeer.h,
+ 	GtkScrollPanePeer.h, GtkScrollbarPeer.h, GtkTextAreaPeer.h,
+ 	GtkTextComponentPeer.h, GtkTextFieldPeer.h, GtkToolkit.h,
+ 	GtkWindowPeer.h: #stubs...  
+ 
+ 1999-09-12 18:50  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: MenuBar.java, CheckboxMenuItem.java, PrintJob.java: 
+ 	Initial Checkin 
+ 
+ 1999-09-10 02:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/peer/PopupMenuPeer.java: Modified interface for GNU
+ 	PopupMenu implementation 
+ 
+ 1999-09-10 02:01  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/peer/MenuPeer.java: Add needed methods 
+ 
+ 1999-09-10 02:00  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: Menu.java, PopupMenu.java: Initial Checkin 
+ 
+ 1999-09-09 02:49  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: java.io/Makefile.am, java.lang/Makefile.am,
+ 	java.lang.reflect/Makefile.am, java.net/Makefile.am,
+ 	java.util/Makefile.am: # fixed automake warnings 
+ 
+ 1999-09-09 02:20  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: [no log message] 
+ 
+ 1999-09-09 01:58  Brian Jones <cbj@gnu.org>
+ 
+ 	* ltconfig, ltmain.sh: updated to libtool 1.3b 
+ 
+ 1999-09-09 01:46  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/MenuItem.java: Initial Checkin 
+ 
+ 1999-09-07 23:39  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: MenuComponent.java, MenuShortcut.java: Initial Checkin 
+ 
+ 1999-09-06 20:04  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/BorderLayout.java: Initial Checkin 
+ 
+ 1999-09-05 19:33  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: Color.java, CardLayout.java: Initial Checkin 
+ 
+ 1999-09-05 00:37  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: Checkbox.java, CheckboxGroup.java, Canvas.java: 
+ 	Initial Checkin 
+ 
+ 1999-09-02 01:42  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Choice.java: Initial Checkin 
+ 
+ 1999-09-01 00:12  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/FileDialog.java: Initial Checkin 
+ 
+ 1999-08-31 02:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Dialog.java: Oops, add layout manager 
+ 
+ 1999-08-31 01:45  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: FlowLayout.java, Dialog.java: Initial Checkin 
+ 
+ 1999-08-26 10:47  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/PropertyPermission.java: newPermissionCollection() uses
+ 	a hashtable to store permissions.  This should make huge
+ 	PermissionCollections with few wildcards more efficient.  
+ 
+ 1999-08-26 10:45  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/security/BasicPermission.java: simplified implies (use the
+ 	information about wildcard positions).  newPermissionCollection
+ 	added.  
+ 
+ 1999-08-26 10:29  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* scripts/timezones.pl: added a script to transform the timezone
+ 	sources (as used by glibc) to commands that fill the hashtable in
+ 	java/util/TimeZone.java 
+ 
+ 1999-08-26 10:26  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/TimeZone.java: The default timezones are now stored in
+ 	a hashtable along with their aliases.  All timezones added (via a
+ 	script that transform the standard timezone sources as used by
+ 	glibc) getDisplayName fully implemented.  getTimeZone now always a
+ 	timezone with the requested ID, or GMT if there is no timezone with
+ 	that ID. This even applies for aliases.  hasSameRules added.  
+ 
+ 1999-08-26 10:20  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/SimpleTimeZone.java: getDisplayName removed (TimeZone
+ 	handles it now).  hasSameRules added.  toString added.  minor
+ 	changes.  
+ 
+ 1999-08-26 10:12  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/ResourceBundle.java: Fix in resource bundle semantic:
+ 	Items that do not exists in the bundle for the requested local
+ 	should not be taken from the bundle of the default local.  The
+ 	default local is only used if there is no _bundle_ for the requested
+ 	local.  
+ 
+ 1999-08-26 10:05  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/GregorianCalendar.java: Localized gregorianCutOver.  
+ 	Some fixes in the roll() method.  Allow to add to AM_PM field.  Some
+ 	minor changes.  
+ 
+ 1999-08-26 10:02  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Calendar.java: Localized some items:
+ 	minimalDayInFirstWeek, firstDayOfWeek, 
+ 	and the name of the Calendar class clone method fixed. (Didn't
+ 	
+ 	clone the field and isSet arrays.) toString method added.  
+ 
+ 1999-08-26 09:48  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* gnu/java/locale/: LocaleInformation_de.java,
+ 	LocaleInformation_en.java: Added some items for
+ 	java.util.*Calendar.  Added localized data for german.  
+ 
+ 1999-08-24 22:43  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/FontMetrics.java: Initial checkin 
+ 
+ 1999-08-18 02:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Font.java: Initial Checkin 
+ 
+ 1999-08-14 15:09  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/ResourceBundle.java: use soft references for the
+ 	resource bundle cache 
+ 
+ 1999-08-14 14:56  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/AbstractMap.java: added keySet().contains() method as
+ 	mentioned in the jdk1.2 documentation.  
+ 
+ 1999-08-14 14:52  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Vector.java: Fixed the toArray() runtime array class
+ 	problem.  checked serialized form and added serialVersionUID.  
+ 
+ 1999-08-14 14:49  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: Hashtable.java, ConcurrentModificationException.java,
+ 	EmptyStackException.java, EventObject.java,
+ 	MissingResourceException.java, NoSuchElementException.java,
+ 	Properties.java, Random.java, Stack.java, TimeZone.java: checked
+ 	serialized form and added serialVersionUID.  
+ 
+ 1999-08-14 14:43  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: PropertyPermission.java,
+ 	TooManyListenersException.java: added two missing classes 
+ 
+ 1999-08-04 03:20  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Graphics.java: Initial Checking 
+ 
+ 1999-08-03 04:15  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/javax/swing/plaf/gtk/: GtkIconFactory.java,
+ 	GtkLookAndFeel.java, GtkSliderUI.java, SliderTest.java: # been
+ 	holding these too long 
+ 
+ 1999-07-25 03:26  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: List.java, Image.java: Initial Checkin 
+ 
+ 1999-07-22 12:51  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/WeakHashMap.java: Make sure that hashed slot number is
+ 	not negative.  
+ 
+ 1999-07-21 11:27  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* AUTHORS: Fixed a typo in my name.  
+ 
+ 1999-07-18 21:39  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/: AccessControlContext.java,
+ 	AlgorithmParameterGenerator.java,
+ 	AlgorithmParameterGeneratorSpi.java, AlgorithmParameters.java,
+ 	AlgorithmParametersSpi.java, DigestInputStream.java,
+ 	DummyKeyPairGenerator.java, DummyMessageDigest.java,
+ 	DummySignature.java, Identity.java, IdentityScope.java,
+ 	KeyFactory.java, KeyFactorySpi.java, KeyPair.java,
+ 	KeyPairGenerator.java, KeyPairGeneratorSpi.java, KeyStore.java,
+ 	KeyStoreSpi.java, Policy.java, SecureClassLoader.java,
+ 	SecureRandom.java, SecureRandomSpi.java, Security.java,
+ 	Signature.java, SignatureSpi.java, SignedObject.java, Signer.java,
+ 	cert/CRL.java, cert/CRLException.java, cert/Certificate.java,
+ 	cert/CertificateEncodingException.java,
+ 	cert/CertificateException.java,
+ 	cert/CertificateExpiredException.java,
+ 	cert/CertificateFactory.java, cert/CertificateFactorySpi.java,
+ 	cert/CertificateNotYetValidException.java,
+ 	cert/CertificateParsingException.java, cert/Collection.java,
+ 	cert/Set.java, cert/X509CRL.java, cert/X509CRLEntry.java,
+ 	cert/X509Certificate.java, cert/X509Extension.java,
+ 	spec/AlgorithmParameterSpec.java, spec/DSAParameterSpec.java,
+ 	spec/DSAPrivateKeySpec.java, spec/DSAPublicKeySpec.java,
+ 	spec/EncodedKeySpec.java, spec/InvalidKeySpecException.java,
+ 	spec/InvalidParameterSpecException.java, spec/KeySpec.java,
+ 	spec/PKCS8EncodedKeySpec.java, spec/RSAPrivateCrtKeySpec.java,
+ 	spec/RSAPrivateKeySpec.java, spec/RSAPublicKeySpec.java,
+ 	spec/X509EncodedKeySpec.java: Initial checking of Mark Benvenuto's
+ 	security code 
+ 
+ 1999-07-18 21:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/security/: der/DEREncodingException.java,
+ 	provider/DERReader.java, provider/DERWriter.java,
+ 	provider/DSAKeyPairGenerator.java,
+ 	provider/DSAParameterGenerator.java, provider/DSAParameters.java,
+ 	provider/DSASignature.java, provider/Gnu.java,
+ 	provider/GnuDSAPrivateKey.java, provider/GnuDSAPublicKey.java,
+ 	provider/MD5.java, provider/SHA.java, provider/SHA1PRNG.java,
+ 	util/Prime.java: Initial checkin of Mark Benvenuto's security code 
+ 
+ 1999-07-18 21:34  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: Component.java, EventDispatcher.java, Frame.java,
+ 	Window.java: Updates 
+ 
+ 1999-07-15 13:32  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/jcl.c: Fixed incredibly stupid FindClass bug.  Thanks
+ 	to Ken Redergard [kenr@xilix.com] for the fix.  
+ 
+ 1999-07-07 02:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Panel.java: Initial Checkin 
+ 
+ 1999-07-07 01:54  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: ScrollPane.java, ScrollPaneAdjustable.java: Initial
+ 	Checkin.  They compile, but there's not a snowball's chance in hell
+ 	that ScrollPane will actually work.  
+ 
+ 1999-06-30 13:47  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/LinkedList.java: Added clone() and serialization
+ 	(compatible to jdk1.2).  Fixed a bug in Iter: knownMod was not
+ 	initialized.  
+ 
+ 1999-06-30 13:42  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Collections.java: Fixed a bug in
+ 	Collections.singleton() 
+ 
+ 1999-06-25 13:25  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/AbstractList.java: changed "knownMod < modCount" to
+ 	"knownMod != modCount".  Latter will even work, if the modCount
+ 	counter wrapped around.  
+ 	Resolved a naming conflict that jikes complained on.  
+ 
+ 1999-06-25 13:20  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: Hashtable.java, LinkedList.java: changed "knownMod <
+ 	modCount" to "knownMod != modCount".  Latter will even work, if the
+ 	modCount counter wrapped around.  
+ 
+ 1999-06-25 13:17  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: HashSet.java, TreeMap.java, TreeSet.java: added
+ 	serialVersionUID compatible with the JDK1.2 classes.  
+ 
+ 1999-06-25 13:12  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/HashMap.java: simplified serialization (by using
+ 	defaultWriteObject and marking the other fields as transient).  
+ 	added serialVersionUID compatible with the JDK1.2 classes.  
+ 	changed "knownMod < modCount" to "knownMod != modCount".  Latter
+ 	will even work, if the modCount counter wrapped around.  
+ 
+ 1999-06-25 13:05  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: Makefile.am, WeakHashMap.java: java.util.WeakHashMap
+ 	added.  
+ 
+ 1999-06-23 12:54  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/lang/: Makefile.am, ref/Makefile.am,
+ 	ref/PhantomReference.java, ref/Reference.java,
+ 	ref/ReferenceQueue.java, ref/SoftReference.java,
+ 	ref/WeakReference.java: added the java.lang.ref package.  
+ 
+ 1999-06-22 01:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Scrollbar.java: Initial Checkin 
+ 
+ 1999-06-12 20:57  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: TextField.java, TextArea.java: Initial Checkin 
+ 
+ 1999-06-12 20:51  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/TextComponent.java: Pass unprocessed events to
+ 	superclass 
+ 
+ 1999-06-11 22:57  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/TextComponent.java: Initial Checkin 
+ 
+ 1999-06-07 21:57  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/classpath.mhtml: Remove mail archive link.  
+ 
+ 1999-06-04 02:47  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: Button.java, SystemColor.java: Initial Checkin 
+ 
+ 1999-06-01 05:27  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/: Float.c, Double.c: # changed include to math.h
+ 	instead of bits/huge_val.h 
+ 
+ 1999-05-31 18:59  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URL.java: Context dependent URL parsing fixes 
+ 
+ 1999-05-31 18:15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/InetAddress.java: Multicast address determination fix 
+ 
+ 1999-05-31 18:01  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/io/EncodingManager.java, java/net/InetAddress.java,
+ 	java/io/PipedReader.java, java/io/ByteArrayOutputStream.java,
+ 	java/io/CharArrayWriter.java, java/io/PipedInputStream.java: Read
+ 	system properties in a more clean manner 
+ 
+ 1999-05-31 00:20  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/peer/ComponentPeer.java: Minor syntax error fix 
+ 
+ 1999-05-30 00:37  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/EventQueue.java: Start dispatcher thread 
+ 
+ 1999-05-30 00:37  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/EventDispatcher.java: Initial Checkin 
+ 
+ 1999-05-29 20:59  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Label.java: Add serialVersionUID 
+ 
+ 1999-05-29 20:55  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Frame.java: Added addNotify method 
+ 
+ 1999-05-29 20:50  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: Label.java, GridLayout.java: Initial Checkin 
+ 
+ 1999-05-25 08:07  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/EventQueue.java: Add call to notify() in postEvent 
+ 
+ 1999-05-24 01:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Frame.java: Remove FIXME comment for something I already
+ 	fixed 
+ 
+ 1999-05-24 01:08  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/AWTEvent.java: Add field for event queuing 
+ 
+ 1999-05-24 00:43  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: Frame.java, EventQueue.java, Cursor.java: Initial
+ 	Checkin 
+ 
+ 1999-05-24 00:43  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Window.java: Add to parent frame's owned windows list,
+ 	destory child component on disposal 
+ 
+ 1999-05-24 00:42  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Component.java: Call peer.dispose() in removeNotify() 
+ 
+ 1999-05-22 01:41  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/javax/swing/plaf/gtk/GtkSliderUI.java: # more tweaks, long
+ 	ways to go 
+ 
+ 1999-05-22 01:40  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/javax/swing/plaf/gtk/GtkLookAndFeel.java: # more defaults
+ 	work for sliders 
+ 
+ 1999-05-21 01:22  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/javax/swing/plaf/gtk/GtkSliderUI.java: paintThumb(): sliders
+ 	drawn to the right size now 
+ 
+ 1999-05-18 02:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Window.java: Initial checkin 
+ 
+ 1999-05-18 02:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Component.java: Added imageUpdate() method stub 
+ 
+ 1999-05-09 03:59  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Container.java: Initial Checkin 
+ 
+ 1999-05-07 04:54  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkimagepainter.c: 
+ 	(drawPixels): Don't use gdk_flush.  
+ 
+ 1999-05-07 04:01  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile,
+ 	native/gnu.java.awt.peer.gtk/gtkclipboard.c,
+ 	gnu/java/awt/peer/gtk/GtkClipboard.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Makefile, gnu/java/awt/peer/gtk/Test.java: 
+ 	System clipboard support added.  
+ 
+ 1999-05-07 02:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Insets.java: Initial Checkin 
+ 
+ 1999-05-02 23:30  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Component.java: Finished first cut of this class 
+ 
+ 1999-05-01 03:44  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Component.java: Initial Checkin - not complete, won't
+ 	compile, just ci for backup 
+ 
+ 1999-05-01 01:42  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/peer/ComponentPeer.java: Fix decl for getFontMetrics 
+ 
+ 1999-04-30 12:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/awt/Toolkit.java: * (getSystemEventQueue): Fix typo in
+ 	comment.  
+ 
+ 1999-04-28 01:01  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Toolkit.java: Initial Checkin 
+ 
+ 1999-04-27 03:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/AWTEventMulticaster.java: Initial Checkin 
+ 
+ 1999-04-27 00:20  Jon A. Zeppieri <jon@eease.com>
+ 
+ 	* java/util/TreeSet.java: Oops:  I accidentally committed this code
+ 	with some testing modifications.  I was referencing a class called
+ 	"org.p2c2e.TreeMap" rather than the "real" java.util.TreeMap.  
+ 	Fixed now.  
+ 
+ 1999-04-25 02:17  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: AWTEvent.java, Polygon.java: Initial Checkin 
+ 
+ 1999-04-25 00:51  Jon A. Zeppieri <jon@eease.com>
+ 
+ 	* java/util/ArrayList.java: Really trivial documentation change.  
+ 
+ 1999-04-24 21:46  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Rectangle.java: Forgot hashCode() 
+ 
+ 1999-04-24 21:44  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Dimension.java: Initial checkin 
+ 
+ 1999-04-24 21:26  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/Rectangle.java: Initial Checkin 
+ 
+ 1999-04-24 04:51  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/peer/: ButtonPeer.java, CanvasPeer.java,
+ 	CheckboxMenuItemPeer.java, CheckboxPeer.java, ChoicePeer.java,
+ 	ComponentPeer.java, ContainerPeer.java, DialogPeer.java,
+ 	FileDialogPeer.java, FontPeer.java, FramePeer.java, LabelPeer.java,
+ 	LightweightPeer.java, ListPeer.java, MenuBarPeer.java,
+ 	MenuComponentPeer.java, MenuItemPeer.java, MenuPeer.java,
+ 	PanelPeer.java, PopupMenuPeer.java, ScrollPanePeer.java,
+ 	ScrollbarPeer.java, TextAreaPeer.java, TextComponentPeer.java,
+ 	TextFieldPeer.java, WindowPeer.java: Initial Checkin 
+ 
+ 1999-04-24 01:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/: EventListener.java, EventObject.java,
+ 	Observable.java, Observer.java: Initial checkin of Daniel Rall's
+ 	code 
+ 
+ 1999-04-24 00:59  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/: print/Book.java, print/Paper.java,
+ 	print/PrinterJob.java, datatransfer/Clipboard.java,
+ 	datatransfer/ClipboardOwner.java, datatransfer/DataFlavor.java,
+ 	datatransfer/FlavorMap.java, datatransfer/StringSelection.java,
+ 	datatransfer/Transferable.java,
+ 	datatransfer/UnsupportedFlavorException.java,
+ 	event/AWTEventListener.java, event/ActionEvent.java,
+ 	event/ActionListener.java, event/AdjustmentEvent.java,
+ 	event/AdjustmentListener.java, event/ComponentAdapter.java,
+ 	event/ComponentEvent.java, event/ComponentListener.java,
+ 	event/ContainerAdapter.java, event/ContainerEvent.java,
+ 	event/ContainerListener.java, event/FocusAdapter.java,
+ 	event/FocusEvent.java, event/FocusListener.java,
+ 	event/InputEvent.java, event/InputMethodEvent.java,
+ 	event/InputMethodListener.java, event/InvocationEvent.java,
+ 	event/ItemEvent.java, event/ItemListener.java,
+ 	event/KeyAdapter.java, event/KeyEvent.java, event/KeyListener.java,
+ 	event/MouseAdapter.java, event/MouseEvent.java,
+ 	event/MouseListener.java, event/MouseMotionAdapter.java,
+ 	event/MouseMotionListener.java, event/PaintEvent.java,
+ 	event/TextEvent.java, event/TextListener.java,
+ 	event/WindowAdapter.java, event/WindowEvent.java,
+ 	event/WindowListener.java, AWTError.java, AWTException.java,
+ 	Adjustable.java, IllegalComponentStateException.java,
+ 	ItemSelectable.java, LayoutManager.java, LayoutManager2.java,
+ 	MenuContainer.java, PrintGraphics.java, Shape.java, Point.java: 
+ 	Initial Checkin 
+ 
+ 1999-04-24 00:52  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/print/: PageFormat.java, Printable.java: Finished these
+ 	classes 
+ 
+ 1999-04-13 03:20  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/awt/print/: PrinterAbortException.java,
+ 	PrinterException.java, PageFormat.java, Pageable.java,
+ 	Printable.java, PrinterGraphics.java, PrinterIOException.java: 
+ 	Initial Checkin 
+ 
+ 1999-04-13 02:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* THANKYOU: Log changes 
+ 
+ 1999-04-13 01:58  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/ChoiceFormat.java: Add parse method.  Minor fixes 
+ 
+ 1999-04-09 01:46  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/locale/LocaleInformation_en.java,
+ 	java/text/DecimalFormatSymbols.java: Fix typo 
+ 
+ 1999-04-08 02:49  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* doc/hacking.texinfo: Add decimal format information to
+ 	Localization section 
+ 
+ 1999-04-08 02:32  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/locale/LocaleInformation_en.java: Add
+ 	DecimalFormatSymbol information first cut values 
+ 
+ 1999-04-08 02:18  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/DecimalFormatSymbols.java: Initial Checkin 
+ 
+ 1999-04-04 22:40  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/: CollationElementIterator.java,
+ 	RuleBasedCollator.java: Fix rule parsing 
+ 
+ 1999-04-04 01:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/Collator.java: Correct property name 
+ 
+ 1999-04-02 02:31  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/: BreakIterator.java, DefaultBreakIterator.java: Misc
+ 	fixes.  
+ 
+ 1999-03-31 01:51  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/AttributedStringIterator.java: Fix in getRunLength to
+ 	detect when attribute is not set on a character.  I still don't know
+ 	what this interface method is supposed to do, but at least it now
+ 	does better what I think it is supposed to do! 
+ 
+ 1999-03-31 01:49  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/AttributedString.java: Fix stupid bug where attribs
+ 	wasn't initialized in some constructors.  
+ 
+ 1999-03-25 03:07  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/Annotation.java: Update toString() for JDK consistency 
+ 
+ 1999-03-17 13:15  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: BitSet.java, Calendar.java, GregorianCalendar.java: 
+ 	Updated to JDK 1.2 
+ 
+ 1999-03-16 15:47  Jon A. Zeppieri <jon@eease.com>
+ 
+ 	* java/util/ArrayList.java: adding java.util.ArrayList (JDK1.2's
+ 	answer to Vector) an array-backed List implementation 
+ 
+ 1999-03-16 08:04  Jon A. Zeppieri <jon@eease.com>
+ 
+ 	* java/util/: TreeMap.java, TreeSet.java: adding java.util.TreeSet 
+ 	significant bugfixes to java.util.TreeMap 
+ 
+ 1999-03-15 23:24  John Keiser <jkeiser@iname.com>
+ 
+ 	* test/java.beans/: DescriptorTest.java, IntrospectorTest.java,
+ 	PropertyChangeSupportTest.java: Cleanup, new test 
+ 
+ 1999-03-15 23:08  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/VetoableChangeSupport.java: Oops, typo.  
+ 
+ 1999-03-15 22:57  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/beancontext/: BeanContext.java,
+ 	BeanContextChildComponentProxy.java, BeanContextChildSupport.java,
+ 	BeanContextContainerProxy.java: Doc fixes.  
+ 
+ 1999-03-15 22:55  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/: PropertyChangeSupport.java, Visibility.java: Doc
+ 	fixes 
+ 
+ 1999-03-15 22:53  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/VetoableChangeSupport.java: Updated to 1.2.  
+ 
+ 1999-03-15 22:17  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/PropertyChangeSupport.java: Updated to 1.2 spec.  
+ 
+ 1999-03-15 05:08  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/javax/swing/plaf/gtk/: GtkBorders.java, GtkCheckBoxUI.java,
+ 	GtkIconFactory.java, GtkLookAndFeel.java, GtkRadioButtonUI.java,
+ 	GtkSliderUI.java, README: initial commit of these files.  
+ 
+ 1999-03-15 05:02  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/javax/swing/plaf/gtk/icons/README: initial commit 
+ 
+ 1999-03-15 05:01  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/javax/swing/plaf/gtk/icons/: Error.gif, Inform.gif,
+ 	JavaCup.gif, JavaCupLarge.gif, Question.gif, TreeClosed.gif,
+ 	TreeLeaf-normal.gif, TreeLeaf.gif, TreeOpen.gif, Warn.gif,
+ 	file-folders.gif, slider.gif: initial checkin, most images need
+ 	work but folders are done 
+ 
+ 1999-03-13 23:05  Jon A. Zeppieri <jon@eease.com>
+ 
+ 	* java/util/TreeMap.java: 13 March 1999 -JAZ- adding
+ 	java.util.TreeMap (red-black tree implementation) to repository 
+ 
+ 1999-03-11 03:28  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/MessageFormat.java: Initial Checkin 
+ 
+ 1999-03-06 20:07  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/hacking.texinfo: Reformat sample code to be GNU-style.  
+ 
+ 1999-03-06 20:02  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/hacking.texinfo: Update coding standards.  Remove references
+ 	to DejaGNU, and update versions of required software.  
+ 
+ 1999-03-06 18:12  Geoff Berry <gcb@gnu.org>
+ 
+ 	* test/java.util/ArraysTest.java: 
+ 	(testObject): Commented out toList test since that function doesn't
+ 	exist.  
+ 
+ 1999-03-06 18:11  Geoff Berry <gcb@gnu.org>
+ 
+ 	* test/java.io/DataInputOutputTest.java: 
+ 	(runReadTest): Added 'L' to the end of literal long that is too big
+ 	to fit in an integer.  JDK javac compiles without this, but it is
+ 	illegal according to JLS.  
+ 	(main): Same as above.  
+ 
+ 1999-03-06 16:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/announce/: .cvsignore, 19990206.mhtml: Set
+ 	MHTML::INCLUDE-PREFIX and cvsignore *.html.  
+ 
+ 1999-03-06 16:05  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/announce/Makefile: Fix a silly bug.  
+ 
+ 1999-03-06 16:01  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/: Makefile, classpath.mhtml,
+ 	announce/19990206.mhtml, announce/Makefile: Add 1999-02-06
+ 	announcement.  
+ 
+ 1999-03-04 17:55  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkimagepainter.c: 
+ 	(drawPixels): Convert image data from 0xBBGGRRAA to 0xAARRGGBB on 
+ 	little endian machines.  
+ 
+ 1999-03-03 14:41  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Properties.java: fixed a bug in store (missing flush)
+ 	spotted by Matt Mucklo 
+ 
+ 1999-03-02 07:01  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImage.java: 
+ 	(setPixels): Handle (width < scansize).  
+ 
+ 1999-03-01 21:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GdkGraphics.java, GtkImage.java,
+ 	GtkImagePainter.java, GtkToolkit.java, Makefile, Test.java: Initial
+ 	image code support (scaling methods of Graphics are not yet
+ 	supported).  
+ 
+ 1999-03-01 21:23  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: Makefile, gdkgraphics.c,
+ 	gtkimagepainter.c, gtkpeer.h: Initial image code support.  
+ 
+ 1999-03-01 03:15  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/security/: DigestOutputStream.java, Makefile.am,
+ 	MessageDigest.java, MessageDigestSpi.java, Security.java: Added to
+ 	repository.  
+ 
+ 1999-03-01 02:55  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/security/Provider.java: 
+ 	(Provider): Make protected to match spec.  
+ 
+ 1999-03-01 01:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* THANKYOU: Alphabetize and add Matt Mucklo 
+ 
+ 1999-03-01 01:12  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URLDecoder.java: Fix a ton of D-U-M dumb bugs. I must've
+ 	been drunk when I coded this.  Don't laugh, I always drink when I
+ 	code.  
+ 
+ 1999-02-27 05:22  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/AttributedCharacterIterator.java: Fix equals() to
+ 	behave per spec 
+ 
+ 1999-02-27 04:16  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/StringCharacterIterator.java: Fix bounds checking in
+ 	constructor.  Override equals() method.  
+ 
+ 1999-02-26 03:02  Brian Jones <cbj@gnu.org>
+ 
+ 	* aclocal.m4: removed because it is autogenerated by 'aclocal' and
+ 	is confusing to people who may not be familiar with the build
+ 	process from CVS.  
+ 
+ 1999-02-25 21:00  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkmainthread.c: 
+ 	(gtkInit): Register gdk_threads_enter to be called for normal
+ 	program termination.  
+ 
+ 1999-02-24 05:25  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/SimpleDateFormat.java: Added date parsing support 
+ 
+ 1999-02-24 05:10  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/Date.java: Subtract one from returned weekday in
+ 	toString() Is this right? 
+ 
+ 1999-02-24 04:58  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/Date.java: Use HOUR_OF_DAY instead of HOUR in
+ 	toString() 
+ 
+ 1999-02-22 21:21  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/beancontext/: BeanContextChild.java,
+ 	BeanContextServiceRevokedListener.java,
+ 	BeanContextServicesListener.java: doc, bug fixes 
+ 
+ 1999-02-22 21:21  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/beancontext/BeanContextChildSupport.java: New class.  
+ 
+ 1999-02-22 21:06  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: 
+ 	(readObject): Removed unused variable.  
+ 
+ 1999-02-22 21:05  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: 
+ 	(readObject): Changed while loop to switch statement.  
+ 
+ 1999-02-22 15:57  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/Beans.java: Doh!  Typo.  
+ 
+ 1999-02-19 22:22  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/beancontext/: BeanContextMembershipEvent.java,
+ 	BeanContextServiceAvailableEvent.java,
+ 	BeanContextServiceRevokedEvent.java: typos 
+ 
+ 1999-02-19 22:16  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/beancontext/: BeanContextEvent.java,
+ 	BeanContextMembershipEvent.java,
+ 	BeanContextServiceAvailableEvent.java,
+ 	BeanContextServiceRevokedEvent.java: Added events.  
+ 
+ 1999-02-19 00:12  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkmainthread.c: 
+ 	(gtkInit): Init gdkrgb.  
+ 
+ 1999-02-19 00:06  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/DesignMode.java: New 1.2 class 
+ 
+ 1999-02-19 00:05  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/www.gnu.org/: classpath.mhtml, status.mhtml: Updated status 
+ 
+ 1999-02-18 23:54  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/beancontext/: BeanContext.java, BeanContextChild.java,
+ 	BeanContextChildComponentProxy.java,
+ 	BeanContextContainerProxy.java, BeanContextMembershipListener.java,
+ 	BeanContextProxy.java, BeanContextServiceProvider.java,
+ 	BeanContextServiceProviderBeanInfo.java,
+ 	BeanContextServiceRevokedListener.java, BeanContextServices.java,
+ 	BeanContextServicesListener.java: Added interfaces for new package 
+ 
+ 1999-02-18 23:54  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/Beans.java: Fixed doc comments 
+ 
+ 1999-02-11 23:34  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* com/sun/javadoc/: ClassDoc.java, ConstructorDoc.java, Doc.java,
+ 	DocErrorReporter.java, Doclet.java, ExecutableMemberDoc.java,
+ 	FieldDoc.java, MemberDoc.java, MethodDoc.java, PackageDoc.java,
+ 	ParamTag.java, Parameter.java, ProgramElementDoc.java,
+ 	RootDoc.java, SeeTag.java, SerialFieldTag.java, Tag.java,
+ 	ThrowsTag.java, Type.java: Initial checkin of Javadoc API 
+ 
+ 1999-02-11 22:11  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/: beans/Introspector.java, lang/Double.java,
+ 	lang/Float.java, lang/Integer.java, lang/Object.java,
+ 	lang/RuntimePermission.java, lang/StringBuffer.java: Fixed glaring
+ 	ugliness in doc comments 
+ 
+ 1999-02-11 21:09  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/: gnu/vm/stack/StackFrame.java,
+ 	gnu/vm/stack/StackTrace.java, java/lang/Class.java,
+ 	java/lang/Runtime.java, java/lang/Thread.java,
+ 	java/lang/VMClassLoader.java, java/lang/VMObject.java,
+ 	java/lang/VMSecurityManager.java, java/lang/VMSystem.java,
+ 	java/lang/reflect/Constructor.java, java/lang/reflect/Field.java,
+ 	java/lang/reflect/Method.java: Copyright, Doc Fixes 
+ 
+ 1999-02-11 08:33  Geoff Berry <gcb@gnu.org>
+ 
+ 	* gnu/java/security/provider/: Makefile.am, SHA.java: Added to
+ 	repoitory.  
+ 
+ 1999-02-11 08:32  Geoff Berry <gcb@gnu.org>
+ 
+ 	* gnu/java/security/Makefile.am: 
+ 	(SUBDIRS): Added provider.  
+ 
+ 1999-02-11 08:31  Geoff Berry <gcb@gnu.org>
+ 
+ 	* configure.in: 
+ 	(AC_OUTPUT): Added gnu/java/security/provider/Makefile.  
+ 
+ 1999-02-10 23:54  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/Math.java: Added docs.  
+ 
+ 1999-02-10 22:34  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/: beans/BeanInfoEmbryo.java, beans/EmptyBeanInfo.java,
+ 	beans/ExplicitBeanInfo.java, beans/IntrospectionIncubator.java,
+ 	beans/editors/ColorEditor.java, beans/editors/FontEditor.java,
+ 	beans/editors/NativeBooleanEditor.java,
+ 	beans/editors/NativeByteEditor.java,
+ 	beans/editors/NativeDoubleEditor.java,
+ 	beans/editors/NativeFloatEditor.java,
+ 	beans/editors/NativeIntEditor.java,
+ 	beans/editors/NativeLongEditor.java,
+ 	beans/editors/NativeShortEditor.java,
+ 	beans/editors/StringEditor.java, beans/info/ComponentBeanInfo.java,
+ 	io/ClassLoaderObjectInputStream.java, lang/ArrayHelper.java,
+ 	lang/ClassHelper.java, lang/ClassLoaderHelper.java,
+ 	lang/ExecutionStack.java, lang/MainThread.java,
+ 	lang/StackFrame.java: Copyright Fixes.  
+ 
+ 1999-02-10 22:29  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/StringBuffer.java: Docs added.  
+ 
+ 1999-02-10 00:03  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/vmintegration.texinfo: Texinfo typo 
+ 
+ 1999-02-10 00:02  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/vmintegration.texinfo: Updates based on new knowledge.  
+ 
+ 1999-02-09 23:32  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/hacking.texinfo: Modified notes about Portability (VM
+ 	Interface) 
+ 
+ 1999-02-09 21:23  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/www.gnu.org/status.mhtml: Doh, typo 
+ 
+ 1999-02-09 21:22  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/www.gnu.org/: classpath.mhtml, macros.mhtml, status.mhtml: 
+ 	Clarified some comments about package status.  
+ 
+ 1999-02-09 04:37  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/macros.mhtml: Tweak Tap's tapping a tad.  
+ 
+ 1999-02-09 00:46  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* doc/www.gnu.org/announce/19990206.txt: Initial Checkin 
+ 
+ 1999-02-08 23:42  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Double.java, Float.java: Re-added
+ 	NullPointerException; removed WIDEFP_* fields; clarified doc
+ 	comments 
+ 
+ 1999-02-08 21:47  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Double.java, Float.java: Added comments for parsing
+ 	and printing.  
+ 
+ 1999-02-08 17:50  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/: BeanDescriptor.java, BeanInfo.java, Beans.java,
+ 	Customizer.java, EventSetDescriptor.java, FeatureDescriptor.java,
+ 	IndexedPropertyDescriptor.java, IntrospectionException.java,
+ 	Introspector.java, MethodDescriptor.java, ParameterDescriptor.java,
+ 	PropertyChangeEvent.java, PropertyChangeListener.java,
+ 	PropertyChangeSupport.java, PropertyDescriptor.java,
+ 	PropertyEditor.java, PropertyEditorManager.java,
+ 	PropertyEditorSupport.java, PropertyVetoException.java,
+ 	SimpleBeanInfo.java, TODO, VetoableChangeListener.java,
+ 	VetoableChangeSupport.java, Visibility.java: Copyright assigned to
+ 	FSF; @since tags added.  
+ 
+ 1999-02-08 17:28  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/String.java: More documented methods 
+ 
+ 1999-02-08 17:11  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Byte.java, Cloneable.java, Comparable.java,
+ 	Double.java, Float.java, Integer.java, Throwable.java: More doc
+ 	fixes (@author, @since, added docs for Float/Double).  
+ 
+ 1999-02-08 16:07  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Boolean.java, Byte.java, Character.java,
+ 	ClassLoader.java, Comparable.java, Double.java, Float.java,
+ 	Integer.java, Long.java, Math.java, Number.java, Object.java,
+ 	Runnable.java, SecurityManager.java, Short.java, String.java,
+ 	StringBuffer.java, System.java, ThreadDeath.java, ThreadGroup.java,
+ 	Throwable.java, Void.java: Added *lots* of comments, fixed
+ 	copyrights, added @author, @since tags where they didn't exist.  
+ 
+ 1999-02-07 16:52  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/classpath.mhtml: Fix spelling of `temporary'.  
+ 
+ 1999-02-07 09:16  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/classpath.mhtml: Make links absolute.  
+ 
+ 1999-02-07 09:11  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/Makefile: Generate index.html as a symlink from
+ 	classpath.html 
+ 
+ 1999-02-07 08:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/doc/.cvsignore: Fix stupid typo.  
+ 
+ 1999-02-07 08:57  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/: .cvsignore, doc/.cvsignore: Ignore *.html.  
+ 
+ 1999-02-07 08:30  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/: Makefile, doc/Makefile: Allow mhc to be
+ 	specified through the environment.  
+ 
+ 1999-02-07 07:37  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/: Makefile, doc/Makefile, doc/footer.mhtml: Add
+ 	appropriate copyright footer to autogenerated html from texinfo
+ 	files.  
+ 
+ 1999-02-07 07:08  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/macros.mhtml: 
+ 	(package-item): Make status.html link absolute.  
+ 
+ 1999-02-07 06:54  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/README: Info on how to change/add files to
+ 	www.gnu.org.  
+ 
+ 1999-02-07 06:54  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/www.gnu.org/: Makefile, classpath.mhtml, macros.mhtml,
+ 	status.mhtml, doc/Makefile: Initial setup for www.gnu.org.  
+ 
+ 1999-02-06 20:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/File.c: Fix permissions settings in
+ 	setReadOnlyInternal() 
+ 
+ 1999-02-05 22:24  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/Void.java: Added copyright, comments.  
+ 
+ 1999-02-05 22:16  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/reflect/: Array.java, InvocationTargetException.java,
+ 	Member.java, Modifier.java, README, TODO: 
+ 	
+ 	Changed copyrights, updated docs 
+ 
+ 1999-02-02 04:42  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: More reality.  
+ 
+ 1999-02-02 04:40  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Trying to show Paul
+ 	reality.  
+ 
+ 1999-02-02 03:31  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: 
+ 	(setComponentState): Use getBounds instead of getLocation and
+ 	getSize.  
+ 
+ 1999-02-02 03:14  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Fucked up shit.  
+ 
+ 1999-02-02 03:12  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkButtonPeer.java, GtkCanvasPeer.java,
+ 	GtkCheckboxPeer.java, GtkChoicePeer.java, GtkComponentPeer.java,
+ 	GtkLabelPeer.java, GtkListPeer.java, GtkPanelPeer.java,
+ 	GtkScrollPanePeer.java, GtkScrollbarPeer.java,
+ 	GtkTextAreaPeer.java, GtkTextFieldPeer.java, GtkToolkit.java: 
+ 	Abandon syncAttributes.  Use setComponentState.  
+ 
+ 1999-02-01 14:52  Stuart Ballard <stuart.ballard@mcmail.com>
+ 
+ 	* java/util/Collections.java: Fix for build bustage; unimplemented
+ 	methods now implemented 
+ 
+ 1999-02-01 04:49  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/: .deps, standard.omit: New dependency info 
+ 
+ 1999-02-01 04:22  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/math/Makefile.am: Add BigDecimal to EXTRA_DIST 
+ 
+ 1999-02-01 03:47  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* NEWS, INSTALL: Minor typo fixes 
+ 
+ 1999-02-01 03:42  Stuart Ballard <stuart.ballard@mcmail.com>
+ 
+ 	* java/util/AbstractList.java: Fix for build bustage. Oops! 
+ 
+ 1999-02-01 03:32  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/math/BigDecimal.java: Add compareTo(Object) method 
+ 
+ 1999-02-01 03:31  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/math/BigInteger.java: Add substract method 
+ 
+ 1999-02-01 03:18  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/: AbstractList.java, Collections.java: Fall back
+ 	changes to make them compile 
+ 
+ 1999-01-31 04:40  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkbuttonpeer.c, gtkcanvaspeer.c,
+ 	gtkcheckboxpeer.c, gtkchoicepeer.c, gtkcomponentpeer.c,
+ 	gtkevents.c, gtklabelpeer.c, gtklistpeer.c, gtkmainthread.c,
+ 	gtkpanelpeer.c, gtkscrollbarpeer.c, gtkscrollpanepeer.c,
+ 	gtktextareapeer.c, gtktextfieldpeer.c: Cleaned up code.  Removed
+ 	visibility settings in constructors.  Removed defunct functions.  
+ 
+ 1999-01-31 04:37  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkButtonPeer.java, GtkCanvasPeer.java,
+ 	GtkCheckboxPeer.java, GtkChoicePeer.java, GtkComponentPeer.java,
+ 	GtkDialogPeer.java, GtkFileDialogPeer.java, GtkLabelPeer.java,
+ 	GtkListPeer.java, GtkMainThread.java, GtkPanelPeer.java,
+ 	GtkScrollPanePeer.java, GtkScrollbarPeer.java,
+ 	GtkTextAreaPeer.java, GtkTextFieldPeer.java, TestAWT.java: Cleaned
+ 	up code.  Resurrected syncAttrs() as syncAttributes().  All Peer 
+ 	constructors now call syncAttributes() except top level windows.  
+ 	Moved visibility and size setting into syncAttributes() where
+ 	applicable.  
+ 	TestAWT is now maintainable.  Maybe.  
+ 
+ 1999-01-30 23:23  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/math/: BigDecimal.java, BigInteger.java: Put package decl
+ 	before import 
+ 
+ 1999-01-30 21:54  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* README, INSTALL, THANKYOU: Updates for release 
+ 
+ 1999-01-29 16:33  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/lang/String.java: [no log message] 
+ 
+ 1999-01-28 22:56  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/math/: BigDecimal.java, BigInteger.java: Bring java.math up
+ 	to JDK 1.2 compliance.  (code still needs to be rigorously tested) 
+ 
+ 1999-01-28 22:55  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/java.math/BigInteger.c: Initial commit of native side of
+ 	BigInteger.  
+ 
+ 1999-01-27 16:07  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: ListResourceBundle.java, PropertyResourceBundle.java: 
+ 	fixed an incompatibility with sun jdk.  
+ 
+ 1999-01-27 15:53  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* native/java.util/: Makefile.am, ResourceBundle.c,
+ 	java_util_ResourceBundle.h: Added a native method for
+ 	ResourceBundle (totally untested).  
+ 
+ 1999-01-27 15:07  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/ResourceBundle.java: replaced usage of
+ 	gnu.vm.stack.StackTrace with native method.  fixed an
+ 	incompatibility with sun jdk, where the doc was incomplete.  
+ 
+ 1999-01-26 07:07  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkevents.c,
+ 	gnu/java/awt/peer/gtk/GtkButtonPeer.java: Deliver key presses to
+ 	widgets that have keyboard focus, and fire an action event if space
+ 	is pressed when a button has keyboard focus.  
+ 
+ 1999-01-26 07:02  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: Convert MouseListeners to
+ 	ActionListeners.  Note to self: Kill Jim.  
+ 
+ 1999-01-26 05:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/Locale.java: Don't attempt to convert language is lang
+ 	is empty string 
+ 
+ 1999-01-26 05:23  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/String.java: Allocate the intern hash table to we don't
+ 	crash and burn on intern() 
+ 
+ 1999-01-26 05:13  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/Date.java: Make toString() use getDisplayName() instead
+ 	of getID() 
+ 
+ 1999-01-26 05:12  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/SimpleTimeZone.java: Added getDisplayName() 
+ 
+ 1999-01-26 04:47  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/TimeZone.java: Added getDisplayName() methods and
+ 	LONG/SHORT constants 
+ 
+ 1999-01-26 03:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/SimpleDateFormat.java: Make strict date parsing
+ 	work...sort of, for most things 
+ 
+ 1999-01-26 03:18  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: Radio Buttons.  
+ 
+ 1999-01-26 03:05  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: FileDialog (broken: Rao did
+ 	it.), Label.  
+ 
+ 1999-01-25 15:32  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Locale.java, gnu/java/locale/Makefile.am,
+ 	gnu/java/locale/iso3166_de.properties,
+ 	gnu/java/locale/iso639-a3.properties,
+ 	gnu/java/locale/iso639.properties,
+ 	gnu/java/locale/iso639_de.properties,
+ 	gnu/java/locale/iso639_fr.properties,
+ 	gnu/java/locale/iso639_ga.properties: Replaced Locale.java with my
+ 	version (should be 1.2 compliant and serializable) Changed three
+ 	iso639 contry codes to their new variants.  Added properties for
+ 	german.  
+ 
+ 1999-01-24 21:17  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/image/XBMDecoder.java: 
+ 	(getScanline): Use a static masktable.  
+ 
+ 1999-01-24 21:06  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/image/XBMDecoder.java: 
+ 	(getScanline): Handle unpadded bitmaps.  
+ 
+ 1999-01-24 08:03  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/image/: ImageDecoder.java, XBMDecoder.java: Initial
+ 	image code framework with support for X11 bitmaps.  
+ 
+ 1999-01-24 00:12  Stuart Ballard <stuart.ballard@mcmail.com>
+ 
+ 	* java/util/: AbstractSequentialList.java, Collections.java: Fixed
+ 	to use the new (1.2RC1) semantics of ListIterator.add() 
+ 
+ 1999-01-23 23:39  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: Added TextField 
+ 
+ 1999-01-23 22:34  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: What the fuck? 
+ 
+ 1999-01-23 04:45  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java,
+ 	gnu/java/awt/peer/gtk/TestAWT.java,
+ 	native/gnu.java.awt.peer.gtk/gtkchoicepeer.c: Fixed: choice select
+ 	event.  
+ 
+ 1999-01-22 19:52  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkchoicepeer.c,
+ 	gtkcheckboxpeer.c, gtkpeer.h: Fire ItemEvents for CheckBox widgets.  
+ 
+ 1999-01-22 19:07  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtklistpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmainthread.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	gnu/java/awt/peer/gtk/GtkListPeer.java: Fire ItemEvents for List
+ 	widgets.  
+ 
+ 1999-01-22 01:42  Stuart Ballard <stuart.ballard@mcmail.com>
+ 
+ 	* java/util/Collections.java: Remove hack now that we have
+ 	java.util.Random implemented to 1.2 specs -- the method in question
+ 	should now WORK as well as just compiling ;) 
+ 
+ 1999-01-22 01:36  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkchoicepeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkevents.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	native/gnu.java.awt.peer.gtk/gtkmainthread.c,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java: Fire ItemEvents for
+ 	Choice widgets.  
+ 
+ 1999-01-22 01:34  Stuart Ballard <stuart.ballard@mcmail.com>
+ 
+ 	* java/util/: ListIterator.java, AbstractList.java,
+ 	LinkedList.java: Update semantics of ListIterator to bring in line
+ 	with 1.2RC1 and later 
+ 
+ 1999-01-20 18:05  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtklabelpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h: Implement setAlignment 
+ 
+ 1999-01-20 05:50  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/: Makefile.am, standard.omit: Make --enable-developer work. 
+ 	Omit java.sql 
+ 
+ 1999-01-20 05:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/Makefile.am: Added Random.java to EXTRA_DIST 
+ 
+ 1999-01-20 01:38  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* configure.in: Make version number 0.00 instead of just 0.0 
+ 
+ 1999-01-20 01:33  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/locale/Makefile.am: Put property and unicode files in
+ 	EXTRA_DIST 
+ 
+ 1999-01-20 01:01  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/Makefile.am: Try to fix --enable-developer-build problem 
+ 
+ 1999-01-19 23:40  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkChoicePeer.java, GtkListPeer.java: 
+ 	Bring java code insync with native code.  
+ 
+ 1999-01-19 23:39  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/math/BigInteger.java: 
+ 	(equals): Clean up.  
+ 
+ 1999-01-19 22:49  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c,
+ 	gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Fix up page_size.  
+ 
+ 1999-01-19 20:48  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkmainthread.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c,
+ 	gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Fire AdjustmentEvents.  
+ 
+ 1999-01-19 04:28  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/sql/DriverManager.java: Initial Checkin 
+ 
+ 1999-01-19 02:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/sql/: Date.java, Time.java, Timestamp.java: Oops, forgot to
+ 	make them serializable 
+ 
+ 1999-01-19 02:17  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/sql/: Date.java, Time.java, Timestamp.java,
+ 	CallableStatement.java, PreparedStatement.java, Statement.java,
+ 	DriverPropertyInfo.java, Types.java: Initial Checkin 
+ 
+ 1999-01-17 20:39  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/sql/: Ref.java, ResultSet.java, ResultSetMetaData.java,
+ 	SQLData.java, SQLInput.java, SQLOutput.java, Struct.java: Initial
+ 	Checkin 
+ 
+ 1999-01-17 20:15  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gdkgraphics.c: Allow dispose to be
+ 	called more than once.  
+ 
+ 1999-01-17 18:34  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkButtonPeer.java,
+ 	GtkComponentPeer.java: If a modal window has the grab, don't fire
+ 	an action event.  
+ 
+ 1999-01-17 18:33  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Add
+ 	modalHasGrab.  
+ 
+ 1999-01-17 17:38  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkchoicepeer.c, gtklistpeer.c: 
+ 	Fix up choice and list widgets to work again.  
+ 
+ 1999-01-17 17:07  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: Proto-code for cursors. 
+ 	Exhibits Choice bug.  
+ 
+ 1999-01-17 04:09  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/sql/DatabaseMetaData.java: Checkin of completed interface 
+ 
+ 1999-01-15 17:50  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcheckboxpeer.c: 
+ 	s/gtk_toggle_button_set_state/gtk_toggle_button_set_active/g 
+ 
+ 1999-01-15 03:57  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/sql/DatabaseMetaData.java: Initial checkin of this
+ 	incomplete module.  I'd hate to lose what I've typed already,
+ 	especially since I've already got COBOL fingers and I'm only 2/3
+ 	done.  
+ 
+ 1999-01-15 03:16  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Change around
+ 	setBounds to work with WindowMaker 0.50.2.  
+ 
+ 1999-01-14 05:02  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/sql/: Array.java, Blob.java, Clob.java, Connection.java,
+ 	Driver.java: Initial Checkin 
+ 
+ 1999-01-13 03:34  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.io/: java_io_ObjectInputStream.c,
+ 	java_io_ObjectOutputStream.c: remove /* within comment 
+ 
+ 1999-01-12 04:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/sql/: BatchUpdateException.java, DataTruncation.java,
+ 	SQLException.java, SQLWarning.java: Initial Checkin 
+ 
+ 1999-01-12 02:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* INSTALL: Modify install instructions again 
+ 
+ 1999-01-12 02:05  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/Makefile.am: Change install method for time being since we
+ 	don't support zip archives 
+ 
+ 1999-01-12 01:40  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* README, INSTALL: Add blurb about Japhar CVS 
+ 
+ 1999-01-12 01:25  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/.deps: Updated dependency information 
+ 
+ 1999-01-12 01:22  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/Makefile.am: Remove awt subdirectory for now 
+ 
+ 1999-01-11 19:19  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* resource/java/util/: iso3166_de.properties, iso639_de.properties: 
+ 	Properties for java.util.Locale 
+ 
+ 1999-01-11 18:52  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/TimeZone.java: Fixed some time zone names.  
+ 
+ 1999-01-11 18:45  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Properties.java: Parsing is a little bit more robust.  
+ 	Comment fixing.  
+ 
+ 1999-01-11 18:41  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/GregorianCalendar.java: filled the missing constructors 
+ 
+ 1999-01-11 18:39  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/: BitSet.java, Calendar.java, DoubleEnumeration.java,
+ 	ListResourceBundle.java, PropertyResourceBundle.java,
+ 	ResourceBundle.java, SimpleTimeZone.java, StringTokenizer.java: 
+ 	aesthetic fixes (mainly comments) 
+ 
+ 1999-01-11 18:35  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Date.java: added the missing (deprecated) methods 
+ 
+ 1999-01-11 18:28  Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.de>
+ 
+ 	* java/util/Random.java: Added java.util.Random; the random number
+ 	generator 
+ 
+ 1999-01-11 05:26  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* doc/hacking.texinfo: Added section on localization 
+ 
+ 1999-01-11 03:13  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/DateFormatSymbols.java: Fix the equals method 
+ 
+ 1999-01-11 03:12  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* configure.in: Added native/java.util Makefile 
+ 
+ 1999-01-11 03:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/Makefile.am: Add java.util directory 
+ 
+ 1999-01-11 03:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.util/Makefile.am, native/java.util/TimeZone.c,
+ 	native/java.util/java_util_TimeZone.h,
+ 	java/text/SimpleDateFormat.java: Initial checkin 
+ 
+ 1999-01-11 03:10  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/TimeZone.java: Added new aliasings mechanism for time
+ 	zones.  Also added a new internal method to calculate the default
+ 	time zone.  Not relying on user.timezone.  
+ 
+ 1999-01-10 18:23  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/locale/LocaleInformation_en.java: Corrected date format 
+ 
+ 1999-01-09 23:40  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/: FieldPosition.java, ParsePosition.java: Add
+ 	toString() method 
+ 
+ 1999-01-09 05:40  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/: DateFormat.java, DateFormatSymbols.java: Initial
+ 	Checkin 
+ 
+ 1999-01-07 06:01  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Compiler.java: doc fixes 
+ 
+ 1999-01-07 05:41  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Double.java: compareTo(Double): initial implementation 
+ 	compareTo(Object): initial implementation doc comments added 
+ 
+ 1999-01-07 05:10  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Double.c: parseDouble(): float and double
+ 	designators are allowed 
+ 
+ 1999-01-07 05:09  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Float.c: float designators 'f' and 'F' are
+ 	allowed in updates to the JLS.  
+ 
+ 1999-01-07 03:53  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Cloneable.java: copyright notice added 
+ 
+ 1999-01-06 14:14  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/hacking.texinfo: If you add a node or otherwise rearrange the
+ 	document, be sure to do a C-u C-c C-u m (remake master menu and
+ 	recalculate all next/prev pointers).  
+ 
+ 1999-01-06 14:08  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Byte.java: doc fixes 
+ 
+ 1999-01-06 14:01  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Boolean.java: doc fix 
+ 
+ 1999-01-06 10:22  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Character.java: Hopefully fix CVS build.  
+ 
+ 1999-01-06 04:33  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Byte.java: doc comments added 
+ 
+ 1999-01-06 03:45  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Boolean.java: comments added 
+ 
+ 1999-01-06 03:24  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: The evil twin of TestGTK.  
+ 
+ 1999-01-06 02:52  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/.cvsignore,
+ 	gnu/java/awt/peer/gtk/.cvsignore: Put something useful in here.  
+ 
+ 1999-01-05 16:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Character.java: 
+ 	(readChar): Cache last read value, and handle (getBlock(ch) == -1) 
+ 	correctly.  
+ 
+ 1999-01-05 15:10  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Boolean.java: 
+ 	(toString): convert if/then/else to ternary expression.  
+ 
+ 1999-01-03 21:17  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkevents.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmainthread.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java: Add focus event
+ 	framework.  
+ 
+ 1999-01-03 20:31  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkmainthread.c, gtkpeer.h: Update
+ 	for key event support.  
+ 
+ 1999-01-03 17:59  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkevents.c,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java: Add key events.  
+ 
+ 1999-01-03 06:59  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* doc/hacking.texinfo: Added section on byte/char converters 
+ 
+ 1999-01-03 00:20  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: do not create awt Makefiles 
+ 
+ 1999-01-03 00:18  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/deps.sh.in: specify location of gen-classlist.sh 
+ 
+ 1999-01-02 23:28  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Double.java: static(): load library `javalang' 
+ 
+ 1999-01-02 23:26  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/: Float.c, java_lang_Float.h: author updated 
+ 
+ 1999-01-02 23:25  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Makefile.am: include Double.c for compile 
+ 
+ 1999-01-02 23:25  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/: Double.c, java_lang_Double.h: initial checkin 
+ 
+ 1999-01-02 22:28  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: redundant
+ 	gtk_container_add removed 
+ 
+ 1999-01-02 22:00  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c,
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkDialogPeer.java: It compiles again.  
+ 
+ 1999-01-02 21:50  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkpeer.h: Added setup_window () 
+ 
+ 1999-01-02 21:48  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Moved dialog
+ 	construction out, added setup_window () for generic window tasks 
+ 
+ 1999-01-02 21:41  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java: Moved dialogpeer
+ 	construction to dialogpeer class 
+ 
+ 1999-01-02 21:40  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: Added parent parameter to
+ 	createDialog 
+ 
+ 1999-01-02 21:39  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java: Moved construction into
+ 	dialogpeer from windowpeer 
+ 
+ 1999-01-02 21:38  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkdialogpeer.c: Initial commit 
+ 
+ 1999-01-02 21:37  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/Makefile: Added Dialog support 
+ 
+ 1999-01-02 21:35  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile: Added dialog support 
+ 
+ 1999-01-02 21:01  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/GregorianCalendar.java: Make constructors public
+ 	instead of protected 
+ 
+ 1999-01-02 18:24  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkButtonPeer.java,
+ 	GtkComponentPeer.java: Use new isEnabled to see if we should send
+ 	an action command.  
+ 
+ 1999-01-02 18:22  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Add isEnabled
+ 	which is smarter than Component.isEnabled.  
+ 
+ 1999-01-02 18:04  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: gdk_flush()
+ 	after a setVisible call.  
+ 
+ 1999-01-02 17:54  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile: Add gtkcontainerpeer.o 
+ 
+ 1999-01-02 17:51  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkComponentPeer.java,
+ 	GtkContainerPeer.java, Makefile: Move gtk_container_check_resize to
+ 	ContainerPeer.  
+ 
+ 1999-01-02 17:50  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkcomponentpeer.c,
+ 	gtkcontainerpeer.c: Move gtk_container_check_resize to a more
+ 	appropriate location.  
+ 
+ 1999-01-02 17:49  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: 
+ 	(setBounds): Clean up warning.  
+ 
+ 1999-01-02 17:35  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Allow negative
+ 	coordinate window placement.  
+ 
+ 1999-01-02 08:20  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkcomponentpeer.c, gdkgraphics.c: 
+ 	Use bit-shifts for converting 16/8bit color values.  
+ 
+ 1999-01-02 08:05  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkButtonPeer.java, GtkCanvasPeer.java,
+ 	GtkCheckboxPeer.java, GtkComponentPeer.java, GtkContainerPeer.java,
+ 	GtkLabelPeer.java, GtkPanelPeer.java, GtkScrollPanePeer.java,
+ 	GtkScrollbarPeer.java, GtkTextFieldPeer.java, Makefile: Parents are
+ 	set in the constructors.  
+ 
+ 1999-01-02 08:04  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gdkgraphics.c, gtkbuttonpeer.c,
+ 	gtkcanvaspeer.c, gtkcheckboxpeer.c, gtkcomponentpeer.c,
+ 	gtkevents.c, gtklabelpeer.c, gtkpanelpeer.c, gtkscrollbarpeer.c,
+ 	gtkscrollpanepeer.c, gtktextfieldpeer.c, gtkwindowpeer.c, Makefile,
+ 	gtkpeer.h: Parents are set in constructors.  There are still a few 
+ 	widgets that need this done.  Test.java works again.  
+ 
+ 1999-01-02 06:12  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/java_lang_Float.h: toString() added 
+ 
+ 1999-01-02 06:09  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Float.c: toString(): uses %G of sprintf (no post
+ 	parsing just yet) parseFloat(): fixed numerous bugs, we no longer
+ 	crash japhar though the JDK does! 
+ 
+ 1999-01-02 01:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/locale/: LocaleInformation_en.java,
+ 	LocaleInformation_en.java: Added entries for date
+ 	formatting/parsing 
+ 
+ 1998-12-31 23:48  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Float.java: static initializer added 
+ 
+ 1998-12-31 23:48  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Float.c: parseFloat(String): while() loop
+ 	changed to avoid infinite loop 
+ 
+ 1998-12-31 23:30  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkCanvasPeer.java,
+ 	GtkContainerPeer.java: New scribble stuff.  
+ 
+ 1998-12-31 23:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/Test.java: Update for new line stuff.  
+ 
+ 1998-12-31 22:07  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gdkgraphics.c, gtkcomponentpeer.c,
+ 	gtkevents.c, gtkmainthread.c, gtkpeer.h: Event code clean up.  
+ 
+ 1998-12-31 22:06  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GdkGraphics.java, GtkButtonPeer.java,
+ 	GtkCanvasPeer.java, GtkComponentPeer.java, GtkContainerPeer.java,
+ 	Test.java: Lots of event code clean up.  
+ 
+ 1998-12-31 18:53  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/io/decode/Decoder.java: Fix problem where I was
+ 	calculating the number of chars in an entire buffer rather than just
+ 	in the requested portion of the buffer.  
+ 
+ 1998-12-31 17:18  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: gen-classlist.sh.in, deps.sh.in: fix up relative refs to
+ 	generated output 
+ 
+ 1998-12-31 17:05  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Float.java: updated 
+ 
+ 1998-12-31 16:59  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: CLASSPATH_INTERNAL_CHECK_JAPHAR:
+ 	AC_DEFINE(WITH_JAPHAR) 
+ 
+ 1998-12-31 16:58  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: AM_CONFIG_HEADER(config.h) added check for strtod,
+ 	atof 
+ 
+ 1998-12-31 16:56  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Float.c, native/java.lang/java_lang_Float.h,
+ 	native/java.lang/javalang.c, native/java.lang/javalang.h,
+ 	acconfig.h: initial commit 
+ 
+ 1998-12-31 16:55  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Makefile.am: javalang.c, javalang.h, Float.c,
+ 	java_lang_Float.h added for compilation include config.h in INCLUDES 
+ 
+ 1998-12-31 05:28  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtktoolkit.c: 
+ 	(getScreenResolution): Change type of res variable to jint.  
+ 
+ 1998-12-31 05:25  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	native/gnu.java.awt.peer.gtk/gtktoolkit.c: Implement
+ 	Toolkit.sync().  
+ 
+ 1998-12-31 05:22  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gdkgraphics.c, gtkcomponentpeer.c: 
+ 	Add C side of getForeground/Background.  
+ 
+ 1998-12-31 05:19  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GdkGraphics.java, GtkComponentPeer.java,
+ 	GtkToolkit.java, Test.java: Add getForeground and getBackground
+ 	methods to peers, and have the Toolkit call the set equivalents on
+ 	the non-peers at creation.  
+ 
+ 1998-12-31 01:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GdkGraphics.java, GtkCanvasPeer.java,
+ 	GtkToolkit.java, Test.java, Makefile: Scribble support on the Java
+ 	side.  
+ 
+ 1998-12-31 01:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkpeer.h: Add scribble-ability
+ 	prototypes.  
+ 
+ 1998-12-31 01:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gdkgraphics.c, gtkcanvaspeer.c,
+ 	gtkevents.c, gtkmainthread.c, Makefile: We can scribble now.  This
+ 	is a very good thing.  
+ 
+ 1998-12-31 00:37  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/Character.java: Slurp character data at beginning and
+ 	cache.  
+ 
+ 1998-12-31 00:35  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: FileInputStream.java, RandomAccessFile.java: Ensure we
+ 	always return -1 on end of file 
+ 
+ 1998-12-30 22:49  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: *.properties and *.uni copied to gnu/java/locale
+ 	before zip DISTCLEANFILES and MAINTAINERCLEANFILES added.  Left off
+ 	putting glibj.zip in CLEANFILES because a user probably shouldn't be
+ 	able to do that easily.  Added 'Makefile' to the dependency line of
+ 	glibj.zip so it gets recreated when it should be more often.  
+ 
+ 1998-12-30 21:43  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GdkGraphics.java, GtkButtonPeer.java,
+ 	GtkComponentPeer.java, Makefile, Test.java: Stub out Graphics
+ 	methods and hook creation into ComponentPeer.  
+ 
+ 1998-12-30 21:26  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/awt/peer/Makefile.am, lib/standard.omit: pretending
+ 	subdir gtk doesn't exist :) 
+ 
+ 1998-12-30 20:12  Brian Jones <cbj@gnu.org>
+ 
+ 	* AUTHORS: use CVS to keep track of who did what 
+ 
+ 1998-12-30 19:48  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/locale/: block.uni, character.uni,
+ 	iso3166-a3.properties, iso3166.properties,
+ 	iso639-a2-old.properties, iso639-a3.properties, iso639.properties,
+ 	titlecase.uni, iso639_fr.properties, iso639_ga.properties: Initial
+ 	Checkin 
+ 
+ 1998-12-30 19:46  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/.deps: New dependencies that include java.lang.Charater 
+ 
+ 1998-12-30 19:40  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/standard.omit: Remove java.lang.Character from the omit list 
+ 
+ 1998-12-30 19:40  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/Locale.java: Fully qualify location of property
+ 	resources 
+ 
+ 1998-12-30 19:39  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/: Integer.java, String.java: Remove temporary
+ 	workarounds now that we have Character working 
+ 
+ 1998-12-30 19:38  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/Character.java: Fully qualify location of unicode
+ 	database.  Change \u000D to \r for JavaDeps 
+ 
+ 1998-12-30 19:37  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/ClassLoader.java: Fix getSystemResourceAsStream to
+ 	return null if resource not found 
+ 
+ 1998-12-30 19:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/lang/ClassLoaderHelper.java: Handle absolute names and
+ 	names without trailing / 
+ 
+ 1998-12-30 19:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* THANKYOU: More people to thank 
+ 
+ 1998-12-30 19:33  Brian Jones <cbj@gnu.org>
+ 
+ 	* AUTHORS: in keeping with section 5 of the maintainers guide 
+ 
+ 1998-12-30 19:03  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkChoicePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkPanelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtkbuttonpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkcheckboxpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkchoicepeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkevents.c,
+ 	native/gnu.java.awt.peer.gtk/gtklabelpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtklistpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkscrollpanepeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtktextareapeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	native/gnu.java.awt.peer.gtk/gtktextfieldpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Realize widgets when
+ 	they're created, and honor visibility setting.  
+ 
+ 1998-12-30 05:41  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkContainerPeer.java,
+ 	GtkWindowPeer.java, Test.java: Validate a Container's children
+ 	after a setBounds.  
+ 
+ 1998-12-30 05:36  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: AM_DISABLE_STATIC called before AM_PROG_LIBTOOL 
+ 
+ 1998-12-30 04:54  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/ClassLoader.java: Add getSystemResource support. Note
+ 	that this currently does not support resources in zip or jar files. 
+ 	I will add that at some point, maybe when we have zip and jar
+ 	support.  
+ 
+ 1998-12-30 04:00  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: cleaned up
+ 	warnings 
+ 
+ 1998-12-30 03:42  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkcomponentpeer.c, gtklistpeer.c,
+ 	gtkscrollpanepeer.c, gtktextareapeer.c, gtktextfieldpeer.c: Changed
+ 	size request code to work.  
+ 
+ 1998-12-30 01:32  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkcomponentpeer.c, gtkevents.c,
+ 	gtkpeer.h, gtkwindowpeer.c: Stuff.  
+ 
+ 1998-12-29 23:49  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: removed configure from EXTRA_DIST 
+ 
+ 1998-12-29 23:20  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: oops: endif changed to 'fi' 
+ 
+ 1998-12-29 22:59  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: --enable-maintainer-build and
+ 	--enable-developer-build cannot be configured together 
+ 
+ 1998-12-29 22:50  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: DEVELOPER_BUILD conditional added 
+ 
+ 1998-12-29 22:50  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: --enable-developer-build: rebuild glibj.zip without
+ 	rebuilding .deps --enable-maintainer-build: rebuild .deps and
+ 	rebuild glibj.zip default: do not build glibj.zip (so to do make
+ 	dist, configure 
+ 	with --enable-maintainer-build) 
+ 
+ 1998-12-29 22:31  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: include `configure' in EXTRA_DIST since it doesn't
+ 	appear to be included by default 
+ 
+ 1998-12-29 20:35  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Minor clean ups.  
+ 
+ 1998-12-29 20:16  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Back out firing of
+ 	shown/hidden events, the AWT does this for us.  
+ 
+ 1998-12-29 20:15  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Rename
+ 	setVisible function.  
+ 
+ 1998-12-29 20:12  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkevents.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmainthread.c,
+ 	native/gnu.java.awt.peer.gtk/gtkwindowpeer.c,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	gnu/java/awt/peer/gtk/Test.java: Implement configure events.  
+ 
+ 1998-12-29 07:07  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Fix up
+ 	enable/visible function names.  
+ 
+ 1998-12-29 07:05  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Fire shown/hidden
+ 	events from setVisible.  
+ 
+ 1998-12-29 06:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Rename native
+ 	method of setEnabled.  
+ 
+ 1998-12-29 06:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Fire COMPONENT_SHOWN
+ 	and COMPONENT_HIDDEN events.  
+ 
+ 1998-12-29 06:21  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkevents.c: Hook up notify events.  
+ 
+ 1998-12-29 03:28  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/Test.java: Add action listener to wb.  
+ 
+ 1998-12-29 03:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Only signal an action
+ 	on a button 1 click.  
+ 
+ 1998-12-29 01:53  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java: Fix Title bug.  
+ 
+ 1998-12-29 01:46  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkButtonPeer.java, GtkGenericPeer.java,
+ 	Test.java: Implement action event support for Button.  
+ 
+ 1998-12-29 01:00  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c,
+ 	gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Don't override
+ 	dispose().  
+ 
+ 1998-12-29 00:52  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c: Override
+ 	dispose.  
+ 
+ 1998-12-29 00:50  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/Test.java: Add dispose and exit calls to
+ 	Button click callback.  
+ 
+ 1998-12-29 00:49  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Override dispose() 
+ 
+ 1998-12-29 00:48  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkevents.c: Implement click events.  
+ 
+ 1998-12-29 00:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkButtonPeer.java,
+ 	GtkComponentPeer.java, GtkGenericPeer.java, GtkLabelPeer.java,
+ 	GtkMainThread.java, Test.java: Implement dispose, and update
+ 	various other event code.  
+ 
+ 1998-12-29 00:25  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Implement
+ 	dispose.  
+ 
+ 1998-12-28 23:58  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Makefile, gnu/java/awt/peer/gtk/Test.java: 
+ 	Added support for scrollbar.  
+ 
+ 1998-12-28 23:56  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtkscrollbarpeer.c: Initial commit.  
+ 
+ 1998-12-28 22:23  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkcomponentpeer.c,
+ 	gtkwindowpeer.c: Connect AWT event handler for Container widgets.  
+ 
+ 1998-12-28 21:43  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: 
+ 	(requestFocus): Mark native.  
+ 	(isFocusTraversable): Default to true.  
+ 
+ 1998-12-28 21:42  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Implement
+ 	requestFocus.  
+ 
+ 1998-12-28 21:35  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Implement
+ 	setEnable.  
+ 
+ 1998-12-28 21:28  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: 
+ 	(enable, disable): Fix stupid typo.  
+ 
+ 1998-12-28 21:23  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: 
+ 	(enable, disable): Call setEnable.  
+ 
+ 1998-12-28 18:22  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile: Add glib-config setting to
+ 	work with latest CVS tree.  
+ 
+ 1998-12-28 18:21  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkbuttonpeer.c,
+ 	gtkcheckboxpeer.c, gtkchoicepeer.c, gtkcomponentpeer.c,
+ 	gtkevents.c, gtklabelpeer.c, gtklistpeer.c, gtkmainthread.c,
+ 	gtkpeer.h, gtktextfieldpeer.c: Connect AWT event handler to
+ 	non-java.awt.Container widgets.  
+ 
+ 1998-12-28 16:45  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtklistpeer.c: Clean up NSA code.  
+ 
+ 1998-12-28 02:04  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/BufferedInputStream.java: Fix nasty bug in reset() 
+ 
+ 1998-12-28 02:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/BufferedReader.java: Fixed nasty mark/reset bug in
+ 	reset().  Removed synchronized decl from methods since we are using
+ 	synchronized blocks instead.  
+ 
+ 1998-12-28 01:21  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtktextcomponentpeer.c,
+ 	gtktextareapeer.c: Clean up NSA calls.  
+ 
+ 1998-12-27 21:29  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtktextfieldpeer.c,
+ 	gtkscrollpanepeer.c: Clean up NSA calls.  
+ 
+ 1998-12-27 20:10  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile,
+ 	native/gnu.java.awt.peer.gtk/gtkbuttonpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkevents.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmainthread.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	gnu/java/awt/peer/gtk/GtkGenericPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Test.java: Initial event code added.  
+ 
+ 1998-12-27 02:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtklabelpeer.c: 
+ 	(gtkLabelSet): Move NSA_GET_PTR to be initial call.  
+ 
+ 1998-12-27 02:56  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtklabelpeer.c: Clean up of
+ 	gtklabelpeer.c.  
+ 
+ 1998-12-27 02:31  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkButtonPeer.java, GtkCheckboxPeer.java,
+ 	GtkChoicePeer.java, GtkComponentPeer.java, GtkContainerPeer.java,
+ 	GtkGenericPeer.java, GtkLabelPeer.java, GtkListPeer.java,
+ 	GtkMainThread.java, GtkPanelPeer.java, GtkScrollPanePeer.java,
+ 	GtkTextAreaPeer.java, GtkTextComponentPeer.java,
+ 	GtkTextFieldPeer.java, GtkWindowPeer.java: Init
+ 	GtkGenericPeer.awtWidget through constructor.  
+ 
+ 1998-12-27 01:27  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkGenericPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkPanelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	gnu/java/awt/peer/gtk/Test.java: Add setCursor support.  
+ 
+ 1998-12-27 01:25  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: ObjectInputStream.java, ObjectOutputStream.java,
+ 	File.java, FileInputStream.java, ObjectStreamClass.java,
+ 	FileOutputStream.java, RandomAccessFile.java: Ensure javaio native
+ 	library loaded 
+ 
+ 1998-12-26 05:53  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* README, INSTALL: Update to reflect current state of reality 
+ 
+ 1998-12-26 01:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* configure.in: Generate Makefile in native/vmi 
+ 
+ 1998-12-26 01:00  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/Makefile.am: Add vmi subdir 
+ 
+ 1998-12-26 01:00  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/vmi/Makefile.am: Initial checkin 
+ 
+ 1998-12-26 00:53  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/Makefile.am: Missed a header here too 
+ 
+ 1998-12-26 00:49  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.lang/Makefile.am: Missed a header 
+ 
+ 1998-12-26 00:37  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/: java.lang/Makefile.am, java.lang.reflect/Makefile.am: 
+ 	Added .h files to SOURCES list 
+ 
+ 1998-12-26 00:25  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/Makefile.am: Fix stupid typo where I put io
+ 	instead of net 
+ 
+ 1998-12-25 23:57  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/.deps: New .deps file with no stubs 
+ 
+ 1998-12-25 23:55  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* acinclude.m4: Make default install target JAPHAR_PREFIX, not
+ 	/usr/local/classpath 
+ 
+ 1998-12-25 23:51  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/Makefile.am: Make correct install target for glibj.zip 
+ 
+ 1998-12-25 23:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/Makefile.am: Don't need to compile java.net twice 
+ 
+ 1998-12-25 23:26  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.lang/Makefile.am: Rename libraries when compiling for
+ 	Japhar 
+ 
+ 1998-12-25 23:22  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/Makefile.am: Hopefully make things build right 
+ 
+ 1998-12-25 23:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/: InetAddress.c, PlainDatagramSocketImpl.c,
+ 	PlainSocketImpl.c: Ok, now we include the JNI headers again 
+ 
+ 1998-12-25 23:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/: java_net_InetAddress.h,
+ 	java_net_PlainDatagramSocketImpl.h, java_net_PlainSocketImpl.h: 
+ 	Adding generated JNI headers to repository 
+ 
+ 1998-12-25 23:08  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/: File.c, FileInputStream.c, FileOutputStream.c,
+ 	RandomAccessFile.c: Now including the javah generated headers 
+ 
+ 1998-12-25 23:07  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/Makefile.am: If compiling with Japhar, make name
+ 	libjaphar_javaio.so 
+ 
+ 1998-12-25 23:07  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/: java_io_File.h, java_io_FileInputStream.h,
+ 	java_io_FileOutputStream.h, java_io_RandomAccessFile.h: Add stub
+ 	files to repository 
+ 
+ 1998-12-25 21:25  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/deps.sh.in: Don't use the --native flag. We don't need it and
+ 	the STUBS line it outputs as a result is broken.  
+ 
+ 1998-12-25 06:20  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/: InetAddress.c, Makefile.am,
+ 	PlainDatagramSocketImpl.c, PlainSocketImpl.c: Remove JNI generated
+ 	headers from include and build because we don't handle this right
+ 	yet.  
+ 
+ 1998-12-25 05:02  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* vm/reference/java/lang/Thread.java: Make the run() method
+ 	actually run the code it is supposed to! 
+ 
+ 1998-12-25 04:04  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* NEWS: Update news file 
+ 
+ 1998-12-25 04:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* BUGS: Update bugs file 
+ 
+ 1998-12-25 04:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* AUTHORS: Update author list 
+ 
+ 1998-12-25 03:54  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/: File.c, FileDescriptor.c, FileInputStream.c,
+ 	FileOutputStream.c, java_io_ObjectInputStream.c,
+ 	java_io_ObjectOutputStream.c, java_io_ObjectStreamClass.c,
+ 	javaio.c, javaio.h: Remove all references to "JCL" library. 
+ 	Instead, move all needed functions into javaio.c and rename them to
+ 	start with _javaio_.  This solves interlibrary dependency.  It could
+ 	break serialization though.  We should probably consolidate the
+ 	serialization libraries into the main java.io library.  
+ 
+ 1998-12-25 03:51  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/RandomAccessFile.c: Remove JNI header include
+ 	since we aren't generating it yet 
+ 
+ 1998-12-25 03:50  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/Makefile.am: Added RandomAccessFile.c to build 
+ 
+ 1998-12-25 03:49  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* vm/reference/java/lang/reflect/Constructor.java: Added a private
+ 	no arg constructor.  Also renamed and added some variables to make
+ 	this class consistent with Japhar's existing native code.  
+ 
+ 1998-12-25 03:48  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* vm/reference/java/lang/Thread.java: Add yield method.  Make
+ 	start() directly native and eliminate nativeStart().  
+ 
+ 1998-12-25 03:47  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* vm/reference/java/lang/Runtime.java: Added some additional needed
+ 	SecurityManager checks and renamed a couple of internal native
+ 	methods.  
+ 
+ 1998-12-25 03:46  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* vm/reference/java/lang/Class.java: Remove name and superclass
+ 	variables and simply make the getName() and getSuperclass() method
+ 	natives.  Note that Japhar currently manually and arbitrarily sets
+ 	the field count on java/lang/Class to 0, so using instance variables
+ 	won't work in this class.  This should be resolved at a future date.  
+ 
+ 1998-12-25 03:43  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/String.java: Rename str to value and len to count and
+ 	make some miscellaneous bug fixes and temp workarounds in order to
+ 	make this class work with Japhar.  
+ 
+ 1998-12-25 03:33  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/Vector.java: Fix premature elementCount increment in
+ 	addElement 
+ 
+ 1998-12-25 03:14  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/Integer.java: Change the parseInt method temporarily
+ 	until the Character class is fully operative.  
+ 
+ 1998-12-25 02:57  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/StringTokenizer.java: Fix countTokens() to not
+ 	increment pos 
+ 
+ 1998-12-24 05:59  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in, acinclude.m4, lib/Makefile.am, lib/deps.sh.in: 
+ 	javah options 
+ 
+ 1998-12-22 13:27  Geoff Berry <gcb@gnu.org>
+ 
+ 	* Makefile.am: 
+ 	(EXTRA_DIST): deleted redundant files that are automatically
+ 	included in `DIST_COMMON'.  
+ 
+ 1998-12-22 06:03  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/: beans/.cvsignore, beans/Makefile.am,
+ 	security/acl/.cvsignore, security/interfaces/.cvsignore,
+ 	text/.cvsignore, text/Makefile.am: initial commit 
+ 
+ 1998-12-22 05:53  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/Makefile.am, java/lang/Makefile.am,
+ 	java/lang/reflect/Makefile.am, java/math/Makefile.am,
+ 	java/net/Makefile.am, java/security/Makefile.am,
+ 	java/security/acl/Makefile.am,
+ 	java/security/interfaces/Makefile.am, java/util/Makefile.am,
+ 	lib/.deps, lib/Makefile.am, lib/standard.omit, java/Makefile.am,
+ 	gnu/tools/serialver/Makefile.am, gnu/java/io/Makefile.am,
+ 	gnu/java/Makefile.am, Makefile.am, configure.in: updated 
+ 
+ 1998-12-22 04:03  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/Makefile.am: remove vm from SUBDIRS 
+ 
+ 1998-12-22 03:52  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/net/Makefile.am: remove http 
+ 
+ 1998-12-22 03:49  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/java/net/Makefile.am: add protocol 
+ 
+ 1998-12-22 02:13  Brian Jones <cbj@gnu.org>
+ 
+ 	* compat/.cvsignore, compat/java.net/.cvsignore, doc/.cvsignore,
+ 	gnu/.cvsignore, gnu/java/.cvsignore, gnu/java/io/.cvsignore,
+ 	gnu/java/lang/.cvsignore, gnu/java/lang/reflect/.cvsignore,
+ 	gnu/java/net/.cvsignore, gnu/java/net/content/.cvsignore,
+ 	gnu/java/net/content/text/.cvsignore, gnu/java/net/http/.cvsignore,
+ 	gnu/test/.cvsignore, gnu/tools/.cvsignore,
+ 	gnu/tools/serialver/.cvsignore, java/.cvsignore,
+ 	java/io/.cvsignore, java/lang/.cvsignore,
+ 	java/lang/reflect/.cvsignore, java/math/.cvsignore,
+ 	java/net/.cvsignore, java/security/.cvsignore,
+ 	java/util/.cvsignore, vm/.cvsignore, vm/Makefile.am,
+ 	vm/reference/.cvsignore, vm/reference/Makefile.am,
+ 	vm/reference/gnu/.cvsignore, vm/reference/gnu/Makefile.am,
+ 	vm/reference/gnu/vm/.cvsignore, vm/reference/gnu/vm/Makefile.am,
+ 	vm/reference/gnu/vm/stack/.cvsignore,
+ 	vm/reference/gnu/vm/stack/Makefile.am,
+ 	vm/reference/java/.cvsignore, vm/reference/java/Makefile.am,
+ 	vm/reference/java/lang/.cvsignore,
+ 	vm/reference/java/lang/Makefile.am,
+ 	vm/reference/java/lang/reflect/.cvsignore,
+ 	vm/reference/java/lang/reflect/Makefile.am,
+ 	gnu/java/awt/.cvsignore, gnu/java/awt/Makefile.am,
+ 	gnu/java/awt/peer/.cvsignore, gnu/java/awt/peer/Makefile.am,
+ 	gnu/java/awt/peer/gtk/.cvsignore,
+ 	gnu/java/awt/peer/gtk/Makefile.am, gnu/java/beans/.cvsignore,
+ 	gnu/java/beans/Makefile.am, gnu/java/beans/editors/.cvsignore,
+ 	gnu/java/beans/editors/Makefile.am, gnu/java/beans/info/.cvsignore,
+ 	gnu/java/beans/info/Makefile.am, gnu/java/io/decode/.cvsignore,
+ 	gnu/java/io/decode/Makefile.am, gnu/java/io/encode/.cvsignore,
+ 	gnu/java/io/encode/Makefile.am, gnu/java/lang/Makefile.am,
+ 	gnu/java/lang/reflect/Makefile.am, gnu/java/locale/.cvsignore,
+ 	gnu/java/locale/Makefile.am, gnu/java/net/Makefile.am,
+ 	gnu/java/net/content/text/Makefile.am,
+ 	gnu/java/net/protocol/.cvsignore,
+ 	gnu/java/net/protocol/Makefile.am,
+ 	gnu/java/net/protocol/file/.cvsignore,
+ 	gnu/java/net/protocol/file/Makefile.am,
+ 	gnu/java/net/protocol/http/.cvsignore,
+ 	gnu/java/net/protocol/http/Makefile.am,
+ 	gnu/java/security/.cvsignore, gnu/java/security/Makefile.am,
+ 	resource/.cvsignore, resource/Makefile.am,
+ 	resource/java/.cvsignore, resource/java/Makefile.am,
+ 	resource/java/util/.cvsignore, resource/java/util/Makefile.am: 
+ 	initial checkin 
+ 
+ 1998-12-21 05:28  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/deps.sh.in: no native until I hear otherwise 
+ 
+ 1998-12-21 05:27  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am, acinclude.m4, configure.in, aclocal.m4,
+ 	lib/.deps: updated 
+ 
+ 1998-12-21 05:27  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.cvsignore: ignore these 
+ 
+ 1998-12-21 00:16  Geoff Berry <gcb@gnu.org>
+ 
+ 	* lib/Makefile.am: 
+ 	(EXTRA_DIST): changed from target to variable.  
+ 
+ 1998-12-20 21:25  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/net/http/: Handler.java, HttpURLConnection.java, TODO,
+ 	Makefile.am: Removing files from old directory 
+ 
+ 1998-12-20 21:12  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URL.java: Changed default search path for protocol
+ 	handlers to gnu.java.net.protocol.  Made protocol handler lookup
+ 	static and eliminated redundant property lookups.  
+ 
+ 1998-12-20 21:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URLConnection.java: Eliminated header storage mechanism
+ 	and moved it to subclasses where it belongs.  
+ 
+ 1998-12-20 21:10  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/TODO: Delete finished items 
+ 
+ 1998-12-20 21:09  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/net/protocol/file/: FileURLConnection.java,
+ 	Handler.java: Initial checkin 
+ 
+ 1998-12-20 21:09  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/net/protocol/http/: Handler.java,
+ 	HttpURLConnection.java, Makefile.am, TODO: Re-checking in in new
+ 	directory 
+ 
+ 1998-12-20 21:07  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/net/HeaderFieldHelper.java: Initial Checkin 
+ 
+ 1998-12-20 09:04  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: forgot this one 
+ 
+ 1998-12-20 08:55  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am, lib/deps.sh.in, lib/gen-classlist.sh.in,
+ 	configure.in: touchups 
+ 
+ 1998-12-20 06:54  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: mauve exists, no longer need guile 
+ 
+ 1998-12-20 06:52  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: deps.sh.in, gen-classlist.sh.in: autoconf input 
+ 
+ 1998-12-20 06:51  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: deps.sh, gen-classlist.sh: generated by autoconf 
+ 
+ 1998-12-20 06:51  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: --with-jdeps: optionally include path to jdeps 
+ 
+ 1998-12-20 06:06  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: java.io/Makefile.am, java.lang/Makefile.am,
+ 	java.lang.reflect/Makefile.am, java.net/Makefile.am,
+ 	lib/Makefile.am, testsuite/Makefile.am: if JAPHAR 
+ 
+ 1998-12-20 06:05  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: removed ancient VMINCLUDE cruft in favor of using
+ 	AM_CONDITIONAL in Makefile.am files.  
+ 
+ 1998-12-20 05:58  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: 
+ 	CLASSPATH_INTERNAL_CHECK_JAPHAR: 
+ 	AC var JVM=yes if Japhar is found 
+ 	AC var JAPHAR_JNI_LIBS is now JAPHAR_LIBS 
+ 	use japhar-config 'compile' and 'link' (see Japhar CVS) 
+ 	CLASSPATH_CHECK_JAPHAR 
+ 	denote default=yes CLASSPATH_CHECK_KAFFE 
+ 	denote default=no 
+ 
+ 1998-12-19 18:09  Paul Fisher <rao@gnu.org>
+ 
+ 	* resource/java/util/iso3166.properties: Fix capitalization for
+ 	Hong Kong and Mc Donald Islands.  
+ 
+ 1998-12-19 07:29  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/deps.sh: Assumin jdeps in PATH 
+ 
+ 1998-12-19 07:28  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/gen-classlist.sh: Remove ../vm/reference from class scan 
+ 
+ 1998-12-19 07:28  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/standard.omit: Update list of classes to exclude from build 
+ 
+ 1998-12-19 07:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* lib/.deps: New dependency list 
+ 
+ 1998-12-19 07:25  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/Makefile.am: Removed testsuite to enable compilation
+ 	without guile 
+ 
+ 1998-12-19 07:24  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/GregorianCalendar.java: Added dummy constructors needed
+ 	for compiling other classes 
+ 
+ 1998-12-19 07:23  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/: AbstractCollection.java, BasicMapEntry.java: Fully
+ 	qualified references to UnsupportedOperationException to please 
+ 	JavaDeps 
+ 
+ 1998-12-19 07:23  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: Makefile, gtkbuttonpeer.c,
+ 	gtkcheckboxpeer.c, gtkchoicepeer.c, gtkcomponentpeer.c,
+ 	gtkfiledialogpeer.c, gtklabelpeer.c, gtklistpeer.c,
+ 	gtkmainthread.c, gtkpeer.h, gtkscrollpanepeer.c, gtktextareapeer.c,
+ 	gtktextcomponentpeer.c, gtktextfieldpeer.c, gtktoolkit.c,
+ 	gtkwindowpeer.c: Require pthreads until JNI 1.2.  Update to latest
+ 	GTK/GLIB cvs trees.  
+ 
+ 1998-12-19 07:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/Collator.java: Add import for MissingResourceException 
+ 
+ 1998-12-19 07:20  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/PermissionCollection.java: Initialize linesep to
+ 	null to supress bogus compiler warnings 
+ 
+ 1998-12-19 07:19  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/: Double.java, Float.java: Add package declaration 
+ 	Uncomment commented out TYPE static final variables.  
+ 
+ 1998-12-19 07:18  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/ObjectStreamField.java: Fully qualify reference to
+ 	java.lang.Comparable to please JavaDeps 
+ 
+ 1998-12-19 07:18  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/StreamTokenizer.java: Converted unicode esacpe to regular
+ 	escape to please JavaDeps 
+ 
+ 1998-12-19 07:16  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* ltconfig, ltmain.sh: Alpha version of libtool with interlibrary
+ 	dependencies 
+ 
+ 1998-12-19 07:15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* configure.in: Added java/security makefile gen 
+ 
+ 1998-12-19 07:15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* Makefile.am: Removed compat subdir 
+ 
+ 1998-12-19 07:14  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* THANKYOU: Added Artur B.  
+ 
+ 1998-12-19 04:38  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FileDescriptor.java: Added private static method to
+ 	create FileDescriptor from native fd 
+ 
+ 1998-12-18 02:38  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/Makefile.am: Dumb mistakes 
+ 
+ 1998-12-18 02:32  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/Makefile.am: Initial checkin 
+ 
+ 1998-12-17 14:30  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: Makefile, gtkcomponentpeer.c,
+ 	gtkmainthread.c, gtkpeer.h, gtkscrollpanepeer.c,
+ 	gtktextfieldpeer.c: Update files to frozen GTK+ cvs tree.  
+ 
+ 1998-12-17 14:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gdkjnithreads.c, gdkjnithreads.h: 
+ 	Functionality has been replaced by gthread-jni.[ch].  
+ 
+ 1998-12-17 14:24  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gthread-jni.c, gthread-jni.h: 
+ 	Initial commit of new threading routines for GLIB.  
+ 
+ 1998-12-16 03:22  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtktextcomponentpeer.c,
+ 	gtkcomponentpeer.c: Cleaning.  
+ 
+ 1998-12-16 03:10  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/: Makefile, Test.java: Added ListPeer 
+ 
+ 1998-12-16 03:10  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: Added support for ListPeer 
+ 
+ 1998-12-16 03:08  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtklistpeer.c: Initial commit 
+ 
+ 1998-12-16 03:07  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtklabelpeer.c: Added EventBox 
+ 
+ 1998-12-15 22:56  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Rename
+ 	gtkWidgetSetVisible and mark setVisible as native.  
+ 
+ 1998-12-15 08:11  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c: Implement
+ 	getLocationOnScreen.  
+ 
+ 1998-12-15 07:27  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java: Implement repaint.  
+ 
+ 1998-12-15 06:38  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Implement
+ 	reshape(int, int, int, int).  
+ 
+ 1998-12-15 06:29  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java: Implement
+ 	setVisible(false).  
+ 
+ 1998-12-15 05:53  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile: Add -Wall.  
+ 
+ 1998-12-14 17:55  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Character.java: 
+ 	(isWhitespace): Correct method name typo.  
+ 
+ 1998-12-13 21:16  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkChoicePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkContainerPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMainThread.java,
+ 	gnu/java/awt/peer/gtk/GtkPanelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtkbuttonpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkcheckboxpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkchoicepeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkfiledialogpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmainthread.c,
+ 	native/gnu.java.awt.peer.gtk/gtkscrollpanepeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkwindowpeer.c: Attempt to conform to
+ 	coding standards.  Sorry.  
+ 
+ 1998-12-13 20:57  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Makefile, gnu/java/awt/peer/gtk/Test.java,
+ 	native/gnu.java.awt.peer.gtk/Makefile: Added support for labels 
+ 
+ 1998-12-13 20:56  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtklabelpeer.c: Initial commit 
+ 
+ 1998-12-13 20:55  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java: Initial checkin 
+ 
+ 1998-12-13 18:25  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Makefile, gnu/java/awt/peer/gtk/Test.java,
+ 	native/gnu.java.awt.peer.gtk/Makefile: Added support for text
+ 	widgets 
+ 
+ 1998-12-13 18:23  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	native/gnu.java.awt.peer.gtk/gtktextareapeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtktextcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtktextfieldpeer.c: Initial commit 
+ 
+ 1998-12-13 04:43  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/util/: BitSet.java, Calendar.java, Date.java,
+ 	DoubleEnumeration.java, GregorianCalendar.java,
+ 	ListResourceBundle.java, MissingResourceException.java,
+ 	Properties.java, PropertyResourceBundle.java, ResourceBundle.java,
+ 	SimpleTimeZone.java, StringTokenizer.java, TimeZone.java: Initial
+ 	Checkin 
+ 
+ 1998-12-13 04:28  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* THANKYOU: Add this file to be sure I write down all the folks who
+ 	sent in bug reports, patches, etc. but who might not be listed as a
+ 	main author.  
+ 
+ 1998-12-13 04:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/javanet.c: Clear exception on method not found
+ 	error 
+ 
+ 1998-12-13 03:58  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/PlainDatagramSocketImpl.java: Added get/setTimeToLive 
+ 
+ 1998-12-13 03:57  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/: Socket.java, DatagramSocket.java: Made 'impl' a
+ 	package protected variable 
+ 
+ 1998-12-12 22:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/: Socket.java, ServerSocket.java: Cleanup security
+ 	checks 
+ 
+ 1998-12-12 22:23  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URLDecoder.java: Initial Checkin 
+ 
+ 1998-12-12 22:04  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/Authenticator.java: Misc 1.2 updates 
+ 
+ 1998-12-12 22:04  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/lang/SecurityManager.java: Added checkPermission 
+ 
+ 1998-12-12 21:51  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/Makefile.am: Added FilePermission.java and
+ 	SerializablePermission.java 
+ 
+ 1998-12-12 19:53  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/HttpURLConnection.java: Added missing methods for 1.2 
+ 
+ 1998-12-12 19:39  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/: javanet.c, javanet.h: Add support for SO_SNDBUF
+ 	and SO_RCVBUF 
+ 
+ 1998-12-12 19:28  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/SocketOptions.java: Made interface public. Added new
+ 	variables per 1.2 spec.  
+ 
+ 1998-12-10 01:20  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URLConnection.java: Made get/setDefaultUseCaches
+ 	instance methods.  Added get/setFileName map methods and made
+ 	fileNameMap private Added getPermission method.  
+ 
+ 1998-12-06 19:56  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URLStreamHandlerFactory.java: Added 'abstract' keyword
+ 	to conform to spec 
+ 
+ 1998-12-06 19:56  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URLEncoder.java: Made vars private. Added constructor 
+ 
+ 1998-12-06 19:53  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/URL.java: Made all internal vars private and ensured
+ 	consisten naming with serialized form.  Added constructors that
+ 	allow user to specify own protocol handler.  
+ 
+ 1998-12-06 19:20  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/SocketImplFactory.java: Added 'abstract' keyword to
+ 	comply with spec 
+ 
+ 1998-12-06 19:19  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/Socket.java: Added missing constructor. Added missing
+ 	methods to get/set send and receive buffer size.  
+ 
+ 1998-12-06 19:09  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/ServerSocket.java: Make instance vars private. 
+ 	Re-classify a constructor as package internal.  
+ 
+ 1998-12-06 19:04  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/: DatagramSocket.java, HttpURLConnection.java,
+ 	PasswordAuthentication.java, SocketOptions.java: 
+ 	PasswordAuthentication.java 
+ 
+ 1998-12-06 19:01  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/MulticastSocket.java: Added new {get,set}TimeToLive
+ 	methods 
+ 
+ 1998-12-06 19:00  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/DatagramSocketImpl.java: Set correct return/param types
+ 	in TimeToLive methods 
+ 
+ 1998-12-05 20:18  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/InetAddress.java: Eliminated useless main() method 
+ 
+ 1998-12-05 05:12  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/FileNameMap.java: Added superfluous 'abstract' keyword
+ 	to interface decl to conform to spec 
+ 
+ 1998-12-05 05:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/DatagramSocketImpl.java: Added new useless
+ 	{get,sec}TimeToLive methods to satisfy spec 
+ 
+ 1998-12-05 04:42  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/DatagramPacket.java: Made all instance variables
+ 	private.  Added 'offset' instance variables and two new constructor
+ 	forms and setData() and getOffset() methods to properly handle the
+ 	offset variable.  All to conform to latest 1.2 spec.  
+ 
+ 1998-12-05 04:26  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/ContentHandlerFactory.java: Added 'abstract' keywork to
+ 	interface decl for spec conformance 
+ 
+ 1998-12-03 02:53  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/InvalidClassException.java: Make all constructors public 
+ 
+ 1998-12-03 02:52  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/Externalizable.java: Implement Serializable 
+ 
+ 1998-12-03 02:51  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/DataOutputStream.java: Change I missed.  Fixed method
+ 	signature on write(int) 
+ 
+ 1998-12-02 03:47  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* test/java.io/: BufferedByteOutputStreamTest.java,
+ 	PipedStreamTest.java: Initial checkin 
+ 
+ 1998-12-02 03:41  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FilterOutputStream.java: Call flush() before closing the
+ 	underlying stream 
+ 
+ 1998-12-02 02:46  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FileDescriptor.java: Added static initializer to load
+ 	native library 
+ 
+ 1998-12-02 02:21  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/: gtkbuttonpeer.c,
+ 	gtkcheckboxpeer.c, gtkchoicepeer.c, gtkcomponentpeer.c,
+ 	gtkfiledialogpeer.c, gtkmainthread.c, gtkpeer.h,
+ 	gtkscrollpanepeer.c, gtkwindowpeer.c: Added NSA_* macros to deal
+ 	with native data generically.  
+ 
+ 1998-12-02 02:18  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMainThread.java: Removed GtkInitTable 
+ 
+ 1998-12-02 02:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FilePermission.java: Misc changes to make this module
+ 	compile 
+ 
+ 1998-12-02 02:02  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/BufferedReader.java: Made DEFAULT_BUFFER_SIZE package
+ 	level protected 
+ 
+ 1998-12-02 01:50  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/Writer.java: Made constructor protected like it should
+ 	have been 
+ 
+ 1998-12-02 01:49  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/WriteAbortedException.java: Made constructor public like
+ 	it should have been 
+ 
+ 1998-12-02 01:48  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/StreamTokenizer.java: Made internal methods readChar()
+ 	and enlargeBuffer() private like they should be 
+ 
+ 1998-12-02 01:41  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/Serializable.java: Added superfluous 'abstract' keywork
+ 	to interface decl for spec conformance.  Added serialVersionUID.  
+ 
+ 1998-12-02 01:30  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/Reader.java: Made constructors protected to comply with
+ 	spec 
+ 
+ 1998-12-02 01:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/RandomAccessFile.java: Remove 'final' keyword from
+ 	skipBytes method decl 
+ 
+ 1998-12-02 01:23  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: PushbackInputStream.java, PushbackReader.java: Added
+ 	comments in code requesting that non-spec public methods not be
+ 	deleted 
+ 
+ 1998-12-02 01:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/PushbackReader.java: Added close() and mark() methods to
+ 	comply with the spec.  However, I did not delete my skip() method
+ 	per the spec because in my estimation it is needed.  This is the
+ 	only way the skip method can function properly if there are unread
+ 	bytes in the buffer.  The superclass skip() method only delegates to
+ 	the underlying Reader.  
+ 
+ 1998-12-02 01:15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/PushbackInputStream.java: Made vars 'pos' and 'buf'
+ 	protected and added close() method to comply with spec.  However, I
+ 	did not delete my reset() method to comply with the spec because in
+ 	my estimation it is needed. PBIS subclasses from FilterInputStream,
+ 	which redirects the call to reset() to the underlying InputStream it
+ 	is wrappering.  If that InputStream supported mark/reset, then the
+ 	stream position could be messed up.  Therefore we need to override
+ 	this method and throw and exception in it.  
+ 
+ 1998-12-02 01:08  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/PrintWriter.java: Make 'out' var protected to comply with
+ 	spec 
+ 
+ 1998-12-01 04:32  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/RuntimePermission.java: initial commit (javadoc not
+ 	done) 
+ 
+ 1998-12-01 03:15  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/standard.omit: java.lang.RuntimePermission ignored 
+ 
+ 1998-12-01 02:57  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Process.java: initial checkin 
+ 
+ 1998-12-01 02:14  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile,
+ 	native/gnu.java.awt.peer.gtk/gtkchoicepeer.c,
+ 	gnu/java/awt/peer/gtk/GtkChoicePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Makefile, gnu/java/awt/peer/gtk/Test.java: 
+ 	Initial commit 
+ 
+ 1998-11-30 17:27  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Test.java,
+ 	native/gnu.java.awt.peer.gtk/gtktoolkit.c: Added
+ 	Toolkit.getScreenResolution().  
+ 
+ 1998-11-30 17:05  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Test.java,
+ 	native/gnu.java.awt.peer.gtk/gtktoolkit.c: Added
+ 	Toolkit.getScreenSize().  
+ 
+ 1998-11-30 14:40  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/: DataInputStream.java, RandomAccessFile.java: \uxxxx
+ 	HTML reference is &#92;uxxxx 
+ 
+ 1998-11-30 06:01  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/Makefile,
+ 	native/gnu.java.awt.peer.gtk/Makefile,
+ 	native/gnu.java.awt.peer.gtk/gtktoolkit.c: Added beep.  
+ 
+ 1998-11-30 04:47  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMainThread.java: Fix typo.  
+ 
+ 1998-11-30 04:45  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMainThread.java: Only allow one
+ 	GtkMainThread to be constructed.  
+ 
+ 1998-11-30 02:09  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/PipedWriter.java: Added write(int) method for spec
+ 	conformance 
+ 
+ 1998-11-30 02:08  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/PipedReader.java: Made internal variable private instead
+ 	of proteced.  Added read() method.  All for spec conformance.  
+ 
+ 1998-11-30 02:00  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/PipedOutputStream.java: Added flush() method to conform
+ 	to spec 
+ 
+ 1998-11-30 01:56  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/ObjectStreamException.java: Made class abstract.  Added
+ 	implements Serializable.  Made all constructors protected.  All to
+ 	comply with spec.  
+ 
+ 1998-11-30 01:53  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/ObjectOutput.java: Added the abstract keyword to the
+ 	interface decl to bring up to spec.  Added the write(int),
+ 	write(byte[], int, int) and write(byte[]) methods to bring up to
+ 	spec.  
+ 
+ 1998-11-30 01:47  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: ObjectInput.java, ObjectInputValidation.java: Added
+ 	abstract keyword to interface decl to conform to spec 
+ 
+ 1998-11-30 01:47  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/LineNumberInputStream.java: Added skip() method to
+ 	conform to spec 
+ 
+ 1998-11-30 01:43  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FilterWriter.java: Made constructor protected to conform
+ 	to RC2 spec 
+ 
+ 1998-11-30 01:42  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FilterReader.java: Made class abstract to conform to RC2
+ 	spec 
+ 
+ 1998-11-30 01:38  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FileOutputStream.java: Fixed signatures on
+ 	closeInternal() and finalize() to meet spec 
+ 
+ 1998-11-30 01:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/File.java: Numerous changes to comply with RC2 spec: 
+ 	-- Added methods createNewFile, isHidden, setLastModified, 
+ 	setReadOnly, getAbsoluteFile, getCanonicaFile, getParentFile, 
+ 	listFiles(), listFiles(FilenameFilter), listFiles(FileFilter), 
+ 	listRoots(), toURL 
+ 	-- Made private deleteInternal, mkdirInternal,
+ 	
+ 	lastModifiedInternal.  
+ 	-- Updated to new signatures for the variants of createTempFile 
+ 	These changes compile but have not yet been tested.  
+ 
+ 1998-11-30 01:33  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FileFilter.java: Changed incorrect parameter type from
+ 	String to File 
+ 
+ 1998-11-30 01:32  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/File.c: Added native methods to set modification
+ 	time and to make read only.  Note that these are as yet untested but
+ 	they do compile.  
+ 
+ 1998-11-29 23:58  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.io/File.c: Changed createInternal to make it specify
+ 	O_EXCL and to return a value indicating whether or not the file
+ 	existed already.  
+ 
+ 1998-11-29 23:37  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/DataOutputStream.java: Added the methods flush(),
+ 	write(byte) and write(byte[], int, int) in order to conform to the
+ 	spec.  
+ 
+ 1998-11-29 23:30  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/DataInputStream.java: Added read(byte[]) and read(byte[],
+ 	int, int) to conform to spec 
+ 
+ 1998-11-29 23:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: DataInput.java, DataOutput.java, Externalizable.java: 
+ 	Added superfluous abstract keyword to interface decl to conform to
+ 	spec 
+ 
+ 1998-11-29 23:19  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/CharArrayWriter.java: Added write(String, int, int) to
+ 	conform to spec 
+ 
+ 1998-11-29 23:14  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: ByteArrayInputStream.java, ByteArrayOutputStream.java: 
+ 	Added close() method to conform to spec 
+ 
+ 1998-11-29 23:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/BufferedWriter.java: Removed finalize() and added
+ 	write(String, int, int) to conform to spec 
+ 
+ 1998-11-29 23:06  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/BufferedReader.java: Made marklimit and
+ 	DEFAULT_BUFFER_SIZE private to conform to spec 
+ 
+ 1998-11-29 23:04  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/BufferedOutputStream.java: Removed close() and finalize()
+ 	methods for spec compatibility 
+ 
+ 1998-11-29 23:02  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/BufferedInputStream.java: Add close() method for spec
+ 	compatibility 
+ 
+ 1998-11-29 22:28  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: ObjectStreamException.java, FilterOutputStream.java: 
+ 	Copyright Fix 
+ 
+ 1998-11-29 22:28  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/: io/OutputStreamWriter.java, io/FilterReader.java,
+ 	io/FilterInputStream.java, net/DatagramSocketImpl.java,
+ 	net/HttpURLConnection.java, net/Socket.java: Documentation Fix 
+ 
+ 1998-11-29 03:36  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/: jcl.c, jcl.h, jnilink.c, jnilink.h: Removed the
+ 	darned carriage returns.  
+ 
+ 1998-11-29 01:15  John Keiser <jkeiser@iname.com>
+ 
+ 	* lib/.cvsignore: First checkin.  
+ 
+ 1998-11-29 01:12  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/: .cvsignore, gnu.java.awt.peer.gtk/.cvsignore,
+ 	java.io/.cvsignore, java.lang/.cvsignore,
+ 	java.lang.reflect/.cvsignore, java.math/.cvsignore,
+ 	java.net/.cvsignore, lib/.cvsignore, nsa/.cvsignore,
+ 	testsuite/.cvsignore, vmi/.cvsignore: Copied from Japhar's native
+ 	.cvsignore.  
+ 
+ 1998-11-29 01:11  John Keiser <jkeiser@iname.com>
+ 
+ 	* .cvsignore: 'Bout time. :) 
+ 
+ 1998-11-29 01:02  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: PipedInputStream.java, PipedReader.java,
+ 	PipedInputStream.java, PipedReader.java, PrintStream.java,
+ 	PrintWriter.java, RandomAccessFile.java, Reader.java,
+ 	SequenceInputStream.java, SerializablePermission.java,
+ 	StreamTokenizer.java, StringBufferInputStream.java,
+ 	StringReader.java, Writer.java, BufferedInputStream.java,
+ 	BufferedReader.java, FileInputStream.java, InputStream.java,
+ 	PushbackInputStream.java, PushbackReader.java, OutputStream.java,
+ 	Reader.java, Writer.java: Documentation Fix 
+ 
+ 1998-11-29 00:46  John Keiser <jkeiser@iname.com>
+ 
+ 	* lib/.deps: Updated to remove FilePermission.java.  
+ 
+ 1998-11-29 00:45  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Double.java, ExceptionInInitializerError.java: Typos.  
+ 
+ 1998-11-29 00:12  John Keiser <jkeiser@iname.com>
+ 
+ 	* lib/standard.omit: Typo.  Was including FilePermission.java when
+ 	it shouldn't.  
+ 
+ 1998-11-29 00:06  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/io/FilePermission.java: Needed to import java.security.* 
+ 
+ 1998-11-28 22:58  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: FileFilter.java, FilenameFilter.java,
+ 	Externalizable.java, ObjectInput.java, ObjectOutput.java,
+ 	BufferedInputStream.java, BufferedReader.java,
+ 	ByteArrayInputStream.java, CharArrayReader.java,
+ 	DataInputStream.java, DataOutputStream.java, DataInputStream.java,
+ 	File.java, FileDescriptor.java, FileInputStream.java,
+ 	FileOutputStream.java, InputStreamReader.java,
+ 	LineNumberInputStream.java, LineNumberReader.java: Documentation
+ 	Fix 
+ 
+ 1998-11-28 22:36  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/DataOutput.java: Documentation fix 
+ 
+ 1998-11-28 22:17  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/DataInput.java: Documentation Fixes 
+ 
+ 1998-11-27 04:43  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/: GtkToolkit.java, Makefile, Test.java: 
+ 	Added support for GtkCheckboxPeer 
+ 
+ 1998-11-27 04:41  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/Makefile: Added support for
+ 	gtkcheckboxpeer 
+ 
+ 1998-11-27 04:41  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkcheckboxpeer.c,
+ 	gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: Initial commit 
+ 
+ 1998-11-27 01:45  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkpeer.h: Added support for
+ 	~/.classpath-gtkrc 
+ 
+ 1998-11-27 01:43  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* native/gnu.java.awt.peer.gtk/gtkmainthread.c: Added support for
+ 	GTK themes via ~/.classpath-gtkrc 
+ 
+ 1998-11-25 06:17  Jim Blair <jeblair@eos.ncsu.edu>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkContainerPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkGenericPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMainThread.java,
+ 	gnu/java/awt/peer/gtk/GtkPanelPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	gnu/java/awt/peer/gtk/Makefile, gnu/java/awt/peer/gtk/Test.java,
+ 	native/gnu.java.awt.peer.gtk/Makefile,
+ 	native/gnu.java.awt.peer.gtk/gdkjnithreads.c,
+ 	native/gnu.java.awt.peer.gtk/gdkjnithreads.h,
+ 	native/gnu.java.awt.peer.gtk/gtkbuttonpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkcomponentpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkfiledialogpeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkmainthread.c,
+ 	native/gnu.java.awt.peer.gtk/gtkpeer.h,
+ 	native/gnu.java.awt.peer.gtk/gtkscrollpanepeer.c,
+ 	native/gnu.java.awt.peer.gtk/gtkwindowpeer.c,
+ 	native/gnu.java.awt.peer.gtk/native_state.c,
+ 	native/gnu.java.awt.peer.gtk/native_state.h: Initial commit of GTK
+ 	peers.  
+ 
+ 1998-11-24 02:50  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/reflect/InvocationTargetException.java: updated for
+ 	serialization, added methods, etc.  1.2 compatible 
+ 
+ 1998-11-24 02:32  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/VirtualMachineError.java: keyword 'abstract' added to
+ 	class declaration 
+ 
+ 1998-11-24 02:30  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/SecurityManager.java: 
+ 	checkMulticast(java.net.InetAddress, byte): wrong argument type int
+ 	in declaration 
+ 
+ 1998-11-24 02:28  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/SecurityManager.java: checkTopLevelWindow(Object):
+ 	returns false instead of throwing exception 
+ 
+ 1998-11-24 02:21  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Object.java: getClass(): added 'final' keyword for API
+ 	compliance clone(): made function 'protected' for API compliance 
+ 
+ 1998-11-24 02:20  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Runnable.java: added 'abstract' keyword for API
+ 	compliance 
+ 
+ 1998-11-24 02:20  Brian Jones <cbj@gnu.org>
+ 
+ 	* vm/reference/java/lang/Runtime.java: removed 'final' keyword for
+ 	API compliance 
+ 
+ 1998-11-24 02:11  Brian Jones <cbj@gnu.org>
+ 
+ 	* vm/reference/java/lang/Class.java: void setSigners(Object[])
+ 	instead of public (readded) 
+ 
+ 1998-11-24 01:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Comparable.java: keyword 'abstract' added for API
+ 	consistency 
+ 
+ 1998-11-24 01:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Cloneable.java: keyword 'abstract' added for API
+ 	consistency (1.2RC2) 
+ 
+ 1998-11-24 01:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* vm/reference/java/lang/Class.java: removed "public
+ 	setSigners(Object[]) function" to be consistent with API.  
+ 	Serialization needs to be done still (not sure how myself with this
+ 	one) 
+ 
+ 1998-11-24 01:30  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Byte.java: doc comment fix 
+ 
+ 1998-11-24 01:23  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Byte.java: implements java.lang.Comparable 
+ 
+ 1998-11-23 15:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.deps: 407 compiled classes 
+ 
+ 1998-11-23 05:13  John Keiser <jkeiser@iname.com>
+ 
+ 	* lib/: deps.sh, gen-classlist.sh, standard.omit: Modified deps.sh
+ 	to work with a .omit file which allows the build to exclude certain
+ 	files (most notably java.security, for now).  Each line in 
+ 	standard.omit is a line to be passed to grep -v to screen out files.  
+ 	This should be extended later so that when we want to, we can create 
+ 	different builds of Classpath (Personal Java, Server Java, etc.) 
+ 
+ 1998-11-23 00:18  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/ThreadDeath.java: Added VERY rudimentary version of
+ 	ThreadDeath for compilation.  No comments, and absolutely no
+ 	constructors or methods (besides the default ThreadDeath() supplied
+ 	by the compiler).  
+ 
+ 1998-11-23 00:16  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/Byte.java: Modified so that it compiles.  
+ 
+ 1998-11-21 22:37  Brian Jones <cbj@gnu.org>
+ 
+ 	* scripts/patches.pl: updated to send email 
+ 
+ 1998-11-21 17:36  Brian Jones <cbj@gnu.org>
+ 
+ 	* scripts/patches.pl: initial commit 
+ 
+ 1998-11-18 04:25  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Byte.java: compareTo(Byte): added for 1.2 
+ 	compareTo(Object): added for 1.2 
+ 
+ 1998-11-18 04:00  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Boolean.java: added toString() to comply with 1.2RC1.  
+ 
+ 1998-11-18 03:03  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/ObjectOutput.java: Added superfluous abstract declaration
+ 	to interface for Java spec compat 
+ 
+ 1998-11-18 02:24  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/InvalidClassException.java: Really fix bad method
+ 	signature 
+ 
+ 1998-11-18 02:22  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FilterWriter.java: Added abstract declaration to class to
+ 	comply with spec 
+ 
+ 1998-11-18 02:21  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FilterReader.java: Removed superfluous read(char[])
+ 	method 
+ 
+ 1998-11-18 02:18  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FilterInputStream.java: Added missing close() method 
+ 
+ 1998-11-18 02:16  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FilenameFilter.java: Added superfluous abstract keyword
+ 	to sync with Java spec 
+ 
+ 1998-11-18 02:08  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/SerializablePermission.java: Initial Checkin 
+ 
+ 1998-11-18 01:55  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FilenameFilter.java: Replace Texinfo with HTML 
+ 
+ 1998-11-18 01:55  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/FileFilter.java: Initial checkin of this stupid class 
+ 
+ 1998-11-16 03:45  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: updated 
+ 
+ 1998-11-16 03:44  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: CLASSPATH_CHECK_JVM is now CLASSPATH_CHECK_JAPHAR
+ 	and CLASSPATH_CHECK_KAFFE Note: when editing acinclude.m4 make sure
+ 	to change emacs mode to sh-mode since the default is m4-mode.  
+ 
+ 1998-11-15 04:37  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: cleaned up a bit.  major bug is --with-jvm must be
+ 	specified on configure command line and it never makes use of its
+ 	argument.  is this just on my machine? 
+ 
+ 1998-11-15 04:35  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: CLASSPATH_CHECK_JVM added 
+ 	CLASSPATH_INTERNAL_CHECK_JVM added CLASSPATH_CHECK_THREADS added 
+ 
+ 1998-11-15 04:34  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/javanet.c: Another Moses DeJong warning patch 
+ 
+ 1998-11-15 04:33  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/NumberFormat.java: Initial Checkin 
+ 
+ 1998-11-13 23:00  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/util/Collections.java: look for FIXME to see what I
+ 	bastardized 
+ 
+ 1998-11-13 22:45  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/util/Map.java: entries(): is now entrySet() (JDK 1.2 RC1) 
+ 
+ 1998-11-11 22:59  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/: Float.java, Double.java: Initial commit -- native
+ 	methods are missing.  
+ 
+ 1998-11-10 18:47  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.deps: updated 
+ 
+ 1998-11-10 18:36  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/FilePermission.java: fixed parsing errors: 
+ 	cannot have void return type for constructor 
+ 	extra '}' closing switch statement in the middle of the switch
+ 	
+ 	statement 
+ 
+ 1998-11-09 20:08  John Keiser <jkeiser@iname.com>
+ 
+ 	* NoJDK: Removed.  Really no need for this anymore.  We shouldn't
+ 	be working with the JDK.  
+ 
+ 1998-11-09 20:04  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/Throwable.java: Changed 'detailMessage' back to
+ 	'message' now that Japhar calls getMessage().  
+ 
+ 1998-11-09 15:15  Stuart Ballard <stuart.ballard@mcmail.com>
+ 
+ 	* java/util/: AbstractCollection.java, AbstractList.java,
+ 	AbstractSequentialList.java, AbstractSet.java, Arrays.java,
+ 	Collection.java, Collections.java, LinkedList.java, List.java,
+ 	Map.java: [one commit for multiple Collections files] Several fixes
+ 	for completeness, updating to beta4 spec (with some RC1 enhancements
+ 	too), and more doc comments.  Note that all changes are untested
+ 	because my time availability is nil, but they shouldn't be far from
+ 	working.  
+ 
+ 1998-11-09 01:51  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/Thread.java: Added private constructor for
+ 	Japhar's use.  
+ 
+ 1998-11-09 01:34  Brian Jones <cbj@gnu.org>
+ 
+ 	* acinclude.m4: initial checkin 
+ 
+ 1998-11-09 01:33  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: added configure.in patch from Petter 
+ 
+ 1998-11-08 06:22  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/: Class.java, Thread.java: Removed
+ 	private_data fields.  
+ 
+ 1998-11-08 06:21  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/Throwable.java: Changed message to detailMessage.  This
+ 	should also simplify serialization ... but I don't know if that's
+ 	what we want to do.  
+ 
+ 1998-11-08 06:18  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/io/PrintWriter.java: *Temporary* fix for odd system
+ 	properties problem.  
+ 
+ 1998-11-08 01:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/UnsupportedOperationException.java: grabbed
+ 	serialVersionUID from JDK 1.2 
+ 
+ 1998-11-08 01:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/UnsupportedClassVersionError.java: grabbed
+ 	serialVersionUID value from JDK 1.2 
+ 
+ 1998-11-08 01:18  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.deps: 392 classes now compile 
+ 
+ 1998-11-08 01:15  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/: ArithmeticException.java,
+ 	ArrayIndexOutOfBoundsException.java, ArrayStoreException.java,
+ 	ClassCastException.java, ClassNotFoundException.java,
+ 	CloneNotSupportedException.java, Exception.java,
+ 	IllegalAccessException.java, IllegalArgumentException.java,
+ 	IllegalMonitorStateException.java, IllegalStateException.java,
+ 	IllegalThreadStateException.java, IndexOutOfBoundsException.java,
+ 	InstantiationException.java, InterruptedException.java,
+ 	NegativeArraySizeException.java, NoSuchFieldException.java,
+ 	NoSuchMethodException.java, NullPointerException.java,
+ 	NumberFormatException.java, RuntimeException.java,
+ 	SecurityException.java, StringIndexOutOfBoundsException.java,
+ 	UnsupportedOperationException.java: added serialVersionUID
+ 	information for most classes added missing functions where necessary 
+ 
+ 1998-11-08 01:14  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/ExceptionInInitializerError.java: serialVersionUID
+ 	information for most classes added missing methods where necessary 
+ 
+ 1998-11-08 00:30  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Throwable.java: serialVersionUID added (1.1 JDK
+ 	reference) 
+ 
+ 1998-11-07 23:39  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Throwable.java: compile fixes 
+ 
+ 1998-11-07 23:27  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/: AbstractMethodError.java, ClassCircularityError.java,
+ 	ClassFormatError.java, Error.java,
+ 	ExceptionInInitializerError.java, IllegalAccessError.java,
+ 	IncompatibleClassChangeError.java, InstantiationError.java,
+ 	InternalError.java, LinkageError.java, NoClassDefFoundError.java,
+ 	NoSuchFieldError.java, NoSuchMethodError.java,
+ 	OutOfMemoryError.java, StackOverflowError.java, UnknownError.java,
+ 	UnsatisfiedLinkError.java, UnsupportedClassVersionError.java,
+ 	VerifyError.java, VirtualMachineError.java: initial checkin 
+ 
+ 1998-11-07 20:07  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Throwable.java: implemented readObject and writeObject
+ 	for serialization 
+ 
+ 1998-11-07 00:24  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/io/FilePermission.java: Initial checkin.  
+ 
+ 1998-11-06 23:21  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/vmintegration.texinfo: Initial checkin of texinfo file with
+ 	info on VM integration.  Needs texinfo work still.  
+ 
+ 1998-11-06 04:00  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/: ArithmeticException.java,
+ 	ArrayIndexOutOfBoundsException.java, ArrayStoreException.java,
+ 	ClassCastException.java, ClassNotFoundException.java,
+ 	CloneNotSupportedException.java, Exception.java,
+ 	IllegalAccessException.java, IllegalArgumentException.java,
+ 	IllegalMonitorStateException.java, IllegalStateException.java,
+ 	IllegalThreadStateException.java, IndexOutOfBoundsException.java,
+ 	InstantiationException.java, InterruptedException.java,
+ 	NegativeArraySizeException.java, NoSuchFieldException.java,
+ 	NoSuchMethodException.java, NullPointerException.java,
+ 	NumberFormatException.java, RuntimeException.java,
+ 	SecurityException.java, StringIndexOutOfBoundsException.java,
+ 	UnsupportedOperationException.java: updated via 1.2FCS docs 
+ 
+ 1998-11-06 03:32  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/: PlainDatagramSocketImpl.c, InetAddress.c,
+ 	javanet.c: Merge Moses DeJong's patch to suppress warnings and
+ 	allow compiles on Solaris.  
+ 
+ 1998-11-04 02:47  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectOutputStream.java: (writeFields()): added to allow
+ 	compilation.  Not yet implemented.  
+ 
+ 1998-11-04 02:46  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/AbstractMap.java: (values()): fixed reference to
+ 	`map_iterator' in Iterator inner class of AbstractCollection inner
+ 	class so class can actually be compiled.  
+ 
+ 1998-11-03 18:25  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/WriteAbortedException.java: 
+ 	(WriteAbortedException(Exception)): changed to 
+ 	WriteAbortedException(String,Exception) as per 1.2 documentation.  
+ 
+ 1998-11-02 15:47  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: deps.sh, .deps: set directory to classes correctly in .deps 
+ 
+ 1998-11-02 15:29  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: compile lib first 
+ 
+ 1998-11-02 15:28  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: JAVAHEADER var added 
+ 
+ 1998-11-02 15:27  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.deps: include native .h stuff 
+ 
+ 1998-11-02 05:07  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.io/: File.c, FileDescriptor.c, FileInputStream.c,
+ 	FileOutputStream.c, Makefile.am: Fix java.io compilation: until we
+ 	deal with a particular build issue, not using .h files at all.  
+ 
+ 1998-11-02 05:06  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang.reflect/Makefile.am: Don't compile certain
+ 	native stuff that's already included with Japhar.  
+ 
+ 1998-11-02 04:28  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/System.java: Made sure references to in, out and err
+ 	are not forward.  
+ 
+ 1998-11-02 04:28  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/Thread.java: Set values of MIN_PRIORITY,
+ 	NORM_PRIORITY, MAX_PRIORITY 
+ 
+ 1998-11-02 03:07  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.deps: updated 
+ 
+ 1998-11-01 21:43  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/io/: File.java, FileDescriptor.java, FileInputStream.java,
+ 	FileOutputStream.java: No longer load libraries.  Some java.io
+ 	classes are part of the bootstrap process, so javaio is loaded
+ 	automatically by Japhar (and should be by other VMs as well).  
+ 
+ 1998-11-01 21:32  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/reflect/Field.java: Changed many things to
+ 	native that were not native before.  
+ 
+ 1998-11-01 21:32  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/Runtime.java: Removed debugging stuff that
+ 	shouldn't have made it into CVS in the first place.  
+ 
+ 1998-11-01 21:31  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/Thread.java: No longer manages state --
+ 	that is done natively.  
+ 
+ 1998-11-01 21:31  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/Class.java: Changed some fields for
+ 	Japhar.  
+ 
+ 1998-11-01 21:22  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/: Class.java, Runtime.java: Changes for
+ 	Japhar.  
+ 
+ 1998-11-01 21:21  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/gnu/vm/stack/StackTrace.java: Fixed minor
+ 	error-checking bug, preventing possible infinite loop.  
+ 
+ 1998-11-01 21:19  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/Makefile.am: MAJOR CHANGE: Japhar won't work without
+ 	this.  I changed the name of the library to "classpath_lib" since
+ 	classpath seemed a likely candidate for native library name
+ 	conflicts.  
+ 
+ 1998-11-01 21:14  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/System.java: Modified System to work with odd quirks in
+ 	guavac -- particularly, in, out and err have to be initialized in
+ 	the static initializer so that they are guaranteed to be initialized
+ 	in the correct order--after properties is initialized.  I made an
+ 	optimization on the SecurityManager usage as well, and have not yet
+ 	tested it with Japhar.  
+ 
+ 1998-11-01 21:03  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.io/: File.c, FileDescriptor.c, FileInputStream.c,
+ 	FileOutputStream.c, RandomAccessFile.c: Removed stubs (I think). 
+ 	Looks like .h files are not being created automatically: someone
+ 	should either do that or not include them.  
+ 
+ 1998-11-01 20:50  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.io/Makefile.am: Added a few other changes ...  
+ 
+ 1998-11-01 04:48  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang.reflect/Makefile.am: VMINCLUDE fix 
+ 
+ 1998-11-01 04:32  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: MAINTAINER_BUILD conditional support 
+ 
+ 1998-11-01 04:31  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/Makefile.am: updated 
+ 
+ 1998-11-01 04:31  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/.deps: initial checkin 
+ 
+ 1998-11-01 02:48  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: gnu not in subdirs 
+ 
+ 1998-11-01 02:47  Brian Jones <cbj@gnu.org>
+ 
+ 	* aclocal.m4: guile stuff 
+ 
+ 1998-11-01 02:47  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/test/Makefile.am: don't want to compile these here 
+ 
+ 1998-11-01 02:46  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/deps.sh: include the right directories in search 
+ 
+ 1998-11-01 02:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/: java.io/Makefile.am, java.net/Makefile.am,
+ 	lib/Makefile.am: VMINCLUDE fix 
+ 
+ 1998-11-01 02:04  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.lang/Makefile.am: fixed typo with VMINCLUDE 
+ 
+ 1998-10-31 21:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/StringBuffer.java: 
+ 	(ensureCapacity): Revert to using Math.max.  
+ 
+ 1998-10-31 00:44  Jon A. Zeppieri <jon@eease.com>
+ 
+ 	* java/util/: AbstractMap.java, HashMap.java, Map.java: jdk1.2beta4
+ 	compatibility fixes (entries() changed to entrySet() in Map.java and
+ 	AbstractMap.java); also, two private instance variables in HashMap
+ 	were made package-access 
+ 
+ 1998-10-30 23:47  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/StringIndexOutOfBoundsException.java: added constructor 
+ 
+ 1998-10-30 04:29  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/: ArithmeticException.java,
+ 	ArrayIndexOutOfBoundsException.java, ArrayStoreException.java,
+ 	ClassCastException.java, ClassNotFoundException.java,
+ 	CloneNotSupportedException.java, Exception.java,
+ 	IllegalAccessException.java, IllegalArgumentException.java,
+ 	IllegalMonitorStateException.java, IllegalStateException.java,
+ 	IllegalThreadStateException.java, IndexOutOfBoundsException.java,
+ 	InstantiationException.java, InterruptedException.java,
+ 	NegativeArraySizeException.java, NoSuchFieldException.java,
+ 	NoSuchMethodException.java, NullPointerException.java,
+ 	NumberFormatException.java, RuntimeException.java,
+ 	SecurityException.java, StringIndexOutOfBoundsException.java,
+ 	UnsupportedOperationException.java: added copyright notice 
+ 
+ 1998-10-29 07:29  Geoff Berry <gcb@gnu.org>
+ 
+ 	* native/java.io/: java_io_ObjectStreamClass.c,
+ 	java_io_ObjectStreamClass.h: (getSerialPersistantFields(Class)):
+ 	added.  
+ 
+ 1998-10-29 07:28  Geoff Berry <gcb@gnu.org>
+ 
+ 	* native/java.io/: java_io_ObjectInputStream.c,
+ 	java_io_ObjectInputStream.h: Changed callConstructor to take a
+ 	class as a apramter instead of an object.  
+ 
+ 1998-10-29 07:22  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/: ObjectInputStream.java, ObjectOutputStream.java,
+ 	ObjectStreamClass.java, ObjectStreamField.java: Added Persistant
+ 	Fields API support.  
+ 
+ 1998-10-29 03:25  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/ChoiceFormat.java: Initial Checkin 
+ 
+ 1998-10-27 02:50  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/ArrayIndexOutOfBoundsException.java: added comments to
+ 	third constructor 
+ 
+ 1998-10-26 22:04  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/ArrayIndexOutOfBoundsException.java: Add int
+ 	constructor.  
+ 
+ 1998-10-25 03:39  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/java.lang/Makefile.am: Add java_lang_Math.  
+ 
+ 1998-10-25 03:24  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/java.lang/: acos.c, asin.c, atan.c, atan2.c, ceil.c,
+ 	cos.c, e_fmod.c, exp.c, fdlibm.h, floor.c, java_lang_Math.h,
+ 	k_cos.c, k_rem_pio2.c, k_sin.c, k_tan.c, log.c, pow.c, remainder.c,
+ 	rint.c, s_fabs.c, sin.c, sqrt.c, tan.c: Initial commit of native
+ 	code for java.lang.Math.  
+ 
+ 1998-10-25 03:12  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Math.java: Finished implementing JDK1.2 java.lang.Math.  
+ 
+ 1998-10-24 19:28  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/: ClassCastException.java, ClassNotFoundException.java,
+ 	CloneNotSupportedException.java, IllegalAccessException.java,
+ 	IllegalArgumentException.java, IllegalMonitorStateException.java,
+ 	IllegalStateException.java, IllegalThreadStateException.java,
+ 	IndexOutOfBoundsException.java, InstantiationException.java,
+ 	InterruptedException.java, NegativeArraySizeException.java,
+ 	NoSuchFieldException.java, NoSuchMethodException.java,
+ 	NullPointerException.java, NumberFormatException.java,
+ 	RuntimeException.java, SecurityException.java,
+ 	StringIndexOutOfBoundsException.java: initial checkin 
+ 
+ 1998-10-22 03:51  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/: ArrayStoreException.java, ArithmeticException.java,
+ 	ArrayIndexOutOfBoundsException.java: initial checkin 
+ 
+ 1998-10-21 20:00  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: added lib as SUBDIR 
+ 
+ 1998-10-21 19:59  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: added lib/Makefile as target 
+ 
+ 1998-10-21 19:59  Brian Jones <cbj@gnu.org>
+ 
+ 	* lib/: deps.sh, Makefile.am: initial checkin 
+ 
+ 1998-10-21 03:53  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* native/java.net/: InetAddress.c, PlainDatagramSocketImpl.c,
+ 	Makefile.am, PlainSocketImpl.c: For John, no stubs anymore 
+ 
+ 1998-10-21 01:58  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/: CollationElementIterator.java,
+ 	RuleBasedCollator.java: Initial Checkin 
+ 
+ 1998-10-20 00:16  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Math.java: Initial commit (functional for John's
+ 	purposes).  
+ 
+ 1998-10-19 04:30  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/Throwable.java: Added synchronization so that things
+ 	don't change on us while printing.  
+ 
+ 1998-10-19 04:27  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/StringBuffer.java: Fixed a rather nasty off-by-one bug,
+ 	making it copy things wrong.  Also put Math.max() into comments
+ 	until we have Math.  
+ 
+ 1998-10-17 20:41  John Keiser <jkeiser@iname.com>
+ 
+ 	* configure.in: Make native/java.lang Makefile with configure.  
+ 
+ 1998-10-17 20:36  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/: beans/IntrospectionIncubator.java,
+ 	lang/MainThread.java: Fixed a typo in IntrospectionIncubator, added
+ 	MainThread.java (which can be used by the VM to run the initial
+ 	class with main(String[] args)).  
+ 
+ 1998-10-17 20:34  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/: beans/PropertyEditorManager.java, lang/ThreadGroup.java,
+ 	lang/Throwable.java, lang/Void.java, lang/reflect/Constructor.java,
+ 	lang/reflect/Field.java, lang/reflect/Method.java: Fixed a few
+ 	typos, added ThreadGroup, moved reflect classes to vm/reference.  
+ 
+ 1998-10-17 20:33  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/: gnu/vm/stack/StackFrame.java,
+ 	gnu/vm/stack/StackTrace.java, java/lang/Thread.java,
+ 	java/lang/VMSecurityManager.java,
+ 	java/lang/reflect/Constructor.java, java/lang/reflect/Field.java,
+ 	java/lang/reflect/Method.java: Moved some files that are
+ 	VM-specific over from the main tree.  Fixed a few typos too.  
+ 
+ 1998-10-14 02:45  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/locale/LocaleInformation_en.java: Adding warning message
+ 	to document 
+ 
+ 1998-10-14 02:44  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/DefaultBreakIterator.java: Initial Checkin 
+ 
+ 1998-10-13 03:20  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: include GUILE_FLAGS 
+ 
+ 1998-10-13 03:18  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/testsuite/Makefile.am: easier to add other VMs to
+ 	testsuite now 
+ 
+ 1998-10-13 02:15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/locale/LocaleInformation.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	java/text/BreakIterator.java: Initial Checkin 
+ 
+ 1998-10-13 02:15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/locale/LocaleInformation.properties: Removing this file
+ 	since I'm switching to ListResourceBundles 
+ 
+ 1998-10-13 00:38  Jon A. Zeppieri <jon@eease.com>
+ 
+ 	* java/util/: BasicMapEntry.java, Bucket.java, Dictionary.java,
+ 	HashMap.java, HashSet.java, Hashtable.java: added files: 
+ 	BasicMapEntry.java, Bucket.java, Dictionary.java, HashMap.java, 
+ 	HashSet.java, Hashtable.java 
+ 
+ 1998-10-11 18:50  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Character.java: 
+ 	(toUpperCase, toTitleCase): Doc fix.  
+ 
+ 1998-10-10 06:20  Paul Fisher <rao@gnu.org>
+ 
+ 	* README: "Fix" GNU/Linux reference.  
+ 
+ 1998-10-09 21:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/Makefile.am: added testsuite to SUBDIRS 
+ 
+ 1998-10-09 21:37  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/test/Makefile.am, native/testsuite/Makefile.am: initial
+ 	checkin 
+ 
+ 1998-10-09 21:35  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/Makefile.am: include test in SUBDIRS 
+ 
+ 1998-10-09 21:34  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: new variable VMLIB available in Makefile.am as
+ 	@VMLIB@ autodetect of Japhar as pretty much the only vm we support
+ 	at the moment 
+ 
+ 1998-10-09 19:12  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/VMSecurityManager.java: Made a previously
+ 	public method non-public and added another method.  
+ 
+ 1998-10-09 19:09  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/Throwable.java: Weird.   CVS did something weird with
+ 	the last version, merged mine and Brian's or something.  This should
+ 	be the normal one.  
+ 
+ 1998-10-09 19:07  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/Makefile.am: Made VMINCLUDE and such work correctly.  
+ 
+ 1998-10-09 19:05  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang/System.c: Stole Japhar's implementation of
+ 	System.currentTimeMillis(), courtesy Chris Toshok.  
+ 
+ 1998-10-09 19:04  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/Makefile.am: Modified to build correct libraries.  
+ 
+ 1998-10-09 19:01  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: ClassLoader.java, SecurityManager.java,
+ 	Throwable.java: Commented Throwable, made all three integrate with
+ 	Japhar.  
+ 
+ 1998-10-08 16:12  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Object.java: finalize(): throws Throwable 
+ 
+ 1998-10-08 16:12  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/Throwable.java: toString(): must return a string 
+ 
+ 1998-10-08 15:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/IOException.java: must extend java.lang.Exception 
+ 
+ 1998-10-08 13:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* gnu/Makefile.am: commented out java and tools subdirs 
+ 
+ 1998-10-08 13:43  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: commented out java subdir 
+ 
+ 1998-10-08 02:33  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/AttributedStringIterator.java: Initial checkin 
+ 
+ 1998-10-07 02:18  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/StringCharacterIterator.java: Added another constructor
+ 	for my personal use 
+ 
+ 1998-10-06 03:01  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/AttributedString.java: Initial Checkin.  Missing
+ 	support class needed to compile.  Will follow soon.  
+ 
+ 1998-10-05 21:45  scgmille
+ 
+ 	* java/util/Vector.java: Optimized some methods in
+ 	java.util.Vector.  
+ 
+ 1998-10-05 02:11  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/AttributedCharacterIterator.java: Initial Checkin. 
+ 	Note that guavac has bugs and can't compile this module.  
+ 
+ 1998-10-04 23:03  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/: Runtime.java, VMClassLoader.java,
+ 	VMObject.java, VMRuntime.java, VMSecurityManager.java,
+ 	VMSystem.java: First rev. of changes for Japhar.  Incidentally, I
+ 	have the Japhar native side compiling now.  Wish me luck.  
+ 
+ 1998-10-04 23:02  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Class.java, Runtime.java, SecurityManager.java,
+ 	System.java: First rev. of changes for Japhar integration ...  
+ 
+ 1998-10-04 18:32  John Keiser <jkeiser@iname.com>
+ 
+ 	* AUTHORS: Added me.  
+ 
+ 1998-10-04 18:28  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Boolean.java, Byte.java, Character.java,
+ 	Integer.java, Long.java, Short.java, Void.java: Uses VMClassLoader
+ 	method for TYPE instead of VMClass.  
+ 
+ 1998-10-04 18:17  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/: Class.java, VMClassLoader.java: Now
+ 	VMClassLoader has the primitive class thingy.  Class is in here,
+ 	now, too.  
+ 
+ 1998-10-04 17:57  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/VMClass.java: Silly me, I forgot
+ 	VMClass.java was going away.  
+ 
+ 1998-10-04 17:44  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Boolean.java, Byte.java, Character.java,
+ 	Integer.java, Long.java, Short.java, Void.java: Primitive types use
+ 	VMClass.getPrimitiveClass() to initialize TYPE now.  
+ 
+ 1998-10-04 17:39  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/VMClass.java: Added getPrimitiveClass().  
+ 
+ 1998-10-03 23:53  Paul Fisher <rao@gnu.org>
+ 
+ 	* testsuite/config/tests: Initial list of tests.  
+ 
+ 1998-10-03 23:49  Paul Fisher <rao@gnu.org>
+ 
+ 	* testsuite/java.lang/ByteTest.java: ByteTest now conforms to the
+ 	new Guile testing framework.  
+ 
+ 1998-10-03 23:47  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/test/: Fail.java, Pass.java, Result.java, Test.java,
+ 	Unresolved.java, Unsupported.java, Untested.java, XFail.java,
+ 	XPass.java: Initial commit of the testsuite driving code.  
+ 
+ 1998-10-03 23:36  Paul Fisher <rao@gnu.org>
+ 
+ 	* testsuite/scheme/test.scm: Initial commit of scheme driver code.  
+ 
+ 1998-10-03 23:22  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/testsuite/guile-jvm.c: Handle exceptions from test().  
+ 
+ 1998-10-02 05:16  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/testing.framework.text: Modify spec to allow test() to throw
+ 	runtime exceptions and errors.  
+ 
+ 1998-10-02 04:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* testsuite/java.lang/ByteTest.java: Modified for testing framework 
+ 
+ 1998-10-02 03:07  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/Format.java: Initial Checkin 
+ 
+ 1998-10-01 23:57  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/testing.framework.text: Clarify example 2.  
+ 
+ 1998-10-01 23:56  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/testing.framework.text: Add import line to example.  
+ 
+ 1998-09-29 04:49  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/testing.framework.text: Update author info.  
+ 
+ 1998-09-29 04:47  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/native.api: Update with author info.  
+ 
+ 1998-09-29 04:28  Paul Fisher <rao@gnu.org>
+ 
+ 	* native/testsuite/guile-jvm.c, doc/testing.framework.text: Initial
+ 	commit.  
+ 
+ 1998-09-26 20:00  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/Collator.java,
+ 	gnu/java/locale/LocaleInformation.properties: Initial Checkin 
+ 
+ 1998-09-25 15:26  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/StreamTokenizer.java: changed 'u000a' to '\n' for
+ 	compiling 
+ 
+ 1998-09-25 15:21  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/lang/: Throwable.java, Exception.java: initial checkin (just
+ 	to compile) 
+ 
+ 1998-09-25 13:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: added LIBVERSION 
+ 
+ 1998-09-25 13:41  Brian Jones <cbj@gnu.org>
+ 
+ 	* native/java.net/Makefile.am: added @LIBVERSION@ and double dashes
+ 	to japharh 
+ 
+ 1998-09-25 01:26  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/text/: Annotation.java, CharacterIterator.java,
+ 	CollationKey.java, FieldPosition.java, ParseException.java,
+ 	ParsePosition.java, StringCharacterIterator.java: Initial Checkin 
+ 
+ 1998-09-24 21:50  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: --with-javac ignores 'yes' and 'no' arguments 
+ 
+ 1998-09-24 21:27  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: now supports defining javac automatically or
+ 	manually 
+ 
+ 1998-09-23 18:09  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/Makefile.am: Modified Makefile for java.lang natives 
+ 
+ 1998-09-23 18:08  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang/: Makefile.am, Object.c, Object.h, System.c,
+ 	System.h: First revision of native java.lang code.  
+ 
+ 1998-09-23 14:26  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Class.java, ClassLoader.java, Object.java,
+ 	Runtime.java, SecurityManager.java, System.java: Modified to work
+ 	with VM interface.  
+ 
+ 1998-09-22 19:50  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/VMSystem.java: method should have been
+ 	static 
+ 
+ 1998-09-22 19:40  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/: VMClass.java, VMObject.java,
+ 	VMSecurityManager.java, VMSystem.java: Typos (whoops) 
+ 
+ 1998-09-22 19:21  John Keiser <jkeiser@iname.com>
+ 
+ 	* vm/reference/java/lang/: VMClass.java, VMClassLoader.java,
+ 	VMObject.java, VMRuntime.java, VMSecurityManager.java,
+ 	VMSystem.java: Initial set of VM interface classes.  Must be
+ 	customized on a per-VM basis.  
+ 
+ 1998-09-20 15:44  Stuart Ballard <stuart.ballard@mcmail.com>
+ 
+ 	* java/util/: VectorIterator.java, VectorListIterator.java,
+ 	ArrayEnumeration.java, Vector.java: Update to Vector to take
+ 	advantage of AbstractList 
+ 
+ 1998-09-15 03:23  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/: ProtectionDomain.java, Provider.java: Initial
+ 	Checkin 
+ 
+ 1998-09-15 00:47  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/: CodeSource.java, GuardedObject.java: Initial
+ 	Checkin 
+ 
+ 1998-09-13 04:19  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/util/Stack.java: Initial commit.  
+ 
+ 1998-09-13 04:18  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/util/ArrayEnumeration.java: Fix doc comment.  
+ 
+ 1998-09-12 20:50  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/Permission.java: Make it compile 
+ 
+ 1998-09-12 20:49  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/Permissions.java,
+ 	java/security/PermissionCollection.java,
+ 	gnu/java/security/DefaultPermissionCollection.java,
+ 	java/security/SecurityPermission.java: Initial Checkin 
+ 
+ 1998-09-12 20:44  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/util/: ArrayEnumeration.java, Vector.java,
+ 	VectorIterator.java, VectorListIterator.java: Added Scott Miller's
+ 	Vector implementation.  
+ 
+ 1998-09-12 18:15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/: AllPermission.java, BasicPermission.java,
+ 	Permission.java, UnresolvedPermission.java: Initial checkin 
+ 
+ 1998-09-01 02:33  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/: AccessControlException.java, Certificate.java,
+ 	DigestException.java, GeneralSecurityException.java, Guard.java,
+ 	InvalidAlgorithmParameterException.java, InvalidKeyException.java,
+ 	InvalidParameterException.java, Key.java, KeyException.java,
+ 	KeyManagementException.java, KeyStoreException.java,
+ 	NoSuchAlgorithmException.java, NoSuchProviderException.java,
+ 	Principal.java, PrivateKey.java, PrivilegedAction.java,
+ 	PrivilegedActionException.java, PrivilegedExceptionAction.java,
+ 	ProviderException.java, PublicKey.java, SignatureException.java,
+ 	UnrecoverableKeyException.java: Initial Checkin 
+ 
+ 1998-08-30 23:33  Geoff Berry <gcb@gnu.org>
+ 
+ 	* gnu/java/io/NullOutputStream.java,
+ 	gnu/java/io/ObjectIdentityWrapper.java,
+ 	gnu/java/lang/reflect/TypeSignature.java,
+ 	gnu/tools/serialver/Main.java, java/io/BlockDataException.java,
+ 	java/io/ObjectInputStream.java, java/io/ObjectOutputStream.java,
+ 	java/io/ObjectStreamClass.java, java/io/ObjectStreamConstants.java,
+ 	java/io/ObjectStreamField.java, java/lang/Comparable.java,
+ 	java/lang/UnsupportedOperationException.java,
+ 	java/util/AbstractMap.java,
+ 	native/java.io/java_io_ObjectInputStream.c,
+ 	native/java.io/java_io_ObjectOutputStream.c,
+ 	native/java.io/java_io_ObjectStreamClass.c,
+ 	test/gnu.java.lang.reflect/TypeSignatureTest.java,
+ 	test/java.io/ObjectInputStreamTest.java,
+ 	test/java.io/ObjectOutputStreamTest.java,
+ 	test/java.io/ObjectStreamClassTest.java, test/java.io/Test.java: 
+ 	Changed copyright assignment to FSF.  
+ 
+ 1998-08-30 23:32  Geoff Berry <gcb@gnu.org>
+ 
+ 	* AUTHORS: Added my name and email.  
+ 
+ 1998-08-26 00:23  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectStreamConstants.java: Made class and fields public
+ 	as per jdk1.2b4.  
+ 
+ 1998-08-25 17:56  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/Makefile.am: Added all new .java files that were not
+ 	already present.  
+ 
+ 1998-08-25 14:50  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/texinfo.tex: required by automake to appear in the same dir
+ 	as source (mostly) 
+ 
+ 1998-08-24 22:25  Brian Jones <cbj@gnu.org>
+ 
+ 	* Makefile.am: include doc in make process 
+ 
+ 1998-08-24 22:24  Brian Jones <cbj@gnu.org>
+ 
+ 	* configure.in: added doc/Makefile 
+ 
+ 1998-08-24 22:23  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/Makefile.am: generate info file automatically 
+ 
+ 1998-08-24 22:22  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/hacking.texinfo: renamed from jcl-hacking.textinfo 
+ 
+ 1998-08-24 22:20  Brian Jones <cbj@gnu.org>
+ 
+ 	* doc/jcl-hacking.texinfo: renamed to hacking.textinfo 
+ 
+ 1998-08-24 22:10  Brian Jones <cbj@gnu.org>
+ 
+ 	* java/io/Makefile.am: OSCField.java previously removed from
+ 	java/io/ 
+ 
+ 1998-08-24 21:42  Brian Jones <cbj@gnu.org>
+ 
+ 	* README: updated information on website, Sun JVM compatibility,
+ 	etc.  
+ 
+ 1998-08-21 02:09  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/security/: interfaces/DSAKey.java,
+ 	interfaces/DSAKeyPairGenerator.java, interfaces/DSAParams.java,
+ 	interfaces/DSAPrivateKey.java, interfaces/DSAPublicKey.java,
+ 	interfaces/Makefile.am, interfaces/RSAPrivateCrtKey.java,
+ 	interfaces/RSAPrivateKey.java, interfaces/RSAPublicKey.java,
+ 	acl/Acl.java, acl/AclEntry.java, acl/AclNotFoundException.java,
+ 	acl/Group.java, acl/LastOwnerException.java,
+ 	acl/NotOwnerException.java, acl/Owner.java, acl/Makefile.am,
+ 	acl/Permission.java: Initial Checkin 
+ 
+ 1998-08-21 01:45  Paul Fisher <rao@gnu.org>
+ 
+ 	* resource/java/util/: iso3166-a3.properties, iso3166.properties,
+ 	iso639-a2-old.properties, iso639-a3.properties, iso639.properties,
+ 	iso639_fr.properties, iso639_ga.properties: Properties for
+ 	java.util.Locale 
+ 
+ 1998-08-21 00:44  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/util/Locale.java: Initial commit.  
+ 
+ 1998-08-20 01:47  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/BufferedReader.java: Fixed such heinous bugs in
+ 	readLine() that I can't believe it ever worked even once.  
+ 
+ 1998-08-20 00:35  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/net/http/HttpURLConnection.java: Eliminated internal
+ 	readLine() method and just use a DataInputStream to read lines
+ 	instead.  
+ 
+ 1998-08-20 00:29  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/SocketInputStream.java: Re-fixed major read bug where
+ 	read would return 0 instead of -1 at end of stream.  I coulda swore
+ 	I checked this in once before.  
+ 
+ 1998-08-16 03:42  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: 
+ 	(toLowerCase,toUpperCase): Don't copy str to newStr.  
+ 
+ 1998-08-14 01:19  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/io/EncodingManager.java: Added a property based aliasing
+ 	scheme for looking up encoding aliases 
+ 
+ 1998-08-14 00:51  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/io/encode/EncoderEightBitLookup.java: Now recognized
+ 	0x0000 correctly 
+ 
+ 1998-08-14 00:27  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/StreamTokenizer.java,
+ 	test/java.io/StreamTokenizerTest.java,
+ 	test/java.io/stream-tokenizer.data: Initial checkin 
+ 
+ 1998-08-13 00:15  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* test/java.io/utf8test-jdk.out: Initial Checkin 
+ 
+ 1998-08-12 22:09  John Keiser <jkeiser@iname.com>
+ 
+ 	* test/base/OutputClass.java: Now outputs one file with all the
+ 	class names prepended, for easier diffing.  
+ 
+ 1998-08-12 02:17  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/ByteArrayOutputStream.java: Implemented toString methods 
+ 
+ 1998-08-11 23:44  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/: Class.java, ClassLoader.java, Object.java,
+ 	Runtime.java, System.java: Added Java implementation for basic
+ 	system classes.  
+ 
+ 1998-08-11 23:43  John Keiser <jkeiser@iname.com>
+ 
+ 	* Class.java, ClassLoader.java, Object.java, Runtime.java,
+ 	System.java: Darn it, wrong path.  Sorry.  
+ 
+ 1998-08-11 23:42  John Keiser <jkeiser@iname.com>
+ 
+ 	* Class.java, ClassLoader.java, Object.java, Runtime.java,
+ 	System.java, gnu/java/lang/ExecutionStack.java,
+ 	gnu/java/lang/StackFrame.java, java/lang/SecurityManager.java: 
+ 	Added basic Java implementation for these system classes.  
+ 
+ 1998-08-10 23:54  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: Add byte/char encoder/decoder support.  
+ 
+ 1998-08-10 08:58  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/jcl-hacking.texinfo: refill 
+ 
+ 1998-08-10 08:51  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/jcl-hacking.texinfo: Change around platform support.  
+ 
+ 1998-08-10 08:49  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/jcl-hacking.texinfo: Fix up titlepage to work with texi2html.  
+ 
+ 1998-08-10 08:37  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/jcl-hacking.texinfo: Add doc comment coding standards.  
+ 
+ 1998-08-10 08:23  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/jcl-hacking.texinfo: Replaced $classpath with Classpath.  
+ 
+ 1998-08-10 04:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: 
+ 	(equals): instanceof test fixed 
+ 
+ 1998-08-10 04:20  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Cloneable.java: Add API docs.  
+ 
+ 1998-08-10 03:51  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Boolean.java: compiles again.  
+ 
+ 1998-08-10 03:50  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/: Boolean.java, Integer.java: 
+ 	(equals): simplify 
+ 
+ 1998-08-09 23:18  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/unicode/unicode-muncher.pl: Initial commit.  Generates
+ 	character.uni, block.uni, and titelcase.uni.  
+ 
+ 1998-08-09 23:07  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/unicode/unicode.database.format: Doc describing the GNU
+ 	Classpath Unicode Attribute Database format 
+ 
+ 1998-08-09 23:04  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/Character.java: Initial commit of java.lang.Character.  
+ 	Fully compliant with JDK 1.2beta4 API.  
+ 
+ 1998-08-09 23:03  Paul Fisher <rao@gnu.org>
+ 
+ 	* gnu/java/lang/ClassLoaderHelper.java: Initial commit.  
+ 
+ 1998-08-09 17:17  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/: java.lang.reflect/DEPENDENCIES,
+ 	java.lang.reflect/README, java.lang.reflect/STATUS,
+ 	java.lang.reflect/TODO, lib/DEPENDENCIES, lib/README, lib/STATUS,
+ 	vmi/DEPENDENCIES, vmi/README, vmi/STATUS: Made docs standard, made
+ 	a few updates as well.  
+ 
+ 1998-08-09 17:06  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/lang/ClassHelper.java: Added a method in ClassHelper,
+ 	added ChangeLog 
+ 
+ 1998-08-09 17:04  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/TODO: Standard Docs 
+ 
+ 1998-08-09 17:04  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/editors/TODO: Standard docs 
+ 
+ 1998-08-09 16:57  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/reflect/: DEPENDENCIES, STATUS, TODO: Made
+ 	documentation like everybody else's 
+ 
+ 1998-08-09 16:49  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/TODO: Updated TODO, added ChangeLog.  
+ 
+ 1998-08-09 16:47  John Keiser <jkeiser@iname.com>
+ 
+ 	* NoJDK: A list of the classes that do not, and never will, work
+ 	with JDK.  We should work this into the Makefile at some point to
+ 	compile a JDK-friendly version.  
+ 
+ 1998-08-03 00:12  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/: SimpleBeanInfo.java, TODO: Implemented loadImage()
+ 	in SimpleBeanInfo.  
+ 
+ 1998-08-02 23:53  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/IndexedPropertyDescriptor.java: Fixed typo.  
+ 
+ 1998-08-02 23:52  John Keiser <jkeiser@iname.com>
+ 
+ 	* test/java.beans/: DescriptorTest.java, IntrospectorTest.java: 
+ 	Started a real test suite for java.beans.  
+ 
+ 1998-08-02 02:54  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/io/encode/EncoderUTF8.java,
+ 	test/java.io/UTF8EncodingTest.java: Initial checkin 
+ 
+ 1998-08-02 02:52  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/io/: decode/DecoderUTF8.java, encode/Encoder8859_2.java,
+ 	encode/Encoder8859_3.java, encode/Encoder8859_4.java,
+ 	encode/Encoder8859_5.java, decode/Decoder8859_2.java,
+ 	decode/Decoder8859_3.java, decode/Decoder8859_4.java,
+ 	decode/Decoder8859_5.java: Initial Checkin 
+ 
+ 1998-08-02 02:51  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/io/: decode/DecoderEightBitLookup.java,
+ 	encode/EncoderEightBitLookup.java: Minor organizational cleanup 
+ 
+ 1998-08-02 02:50  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/io/EncodingManager.java: Fixed minor but major typo bug 
+ 
+ 1998-08-02 00:40  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* test/java.io/: BufferedCharWriterTest.java,
+ 	BufferedReaderTest.java, CharArrayReaderTest.java,
+ 	FileInputStreamTest.java, FileOutputStreamTest.java,
+ 	FileReaderTest.java, FileTest.java, FileWriterTest.java,
+ 	LineNumberReaderTest.java, PipedReaderWriterTest.java,
+ 	PrintStreamTest.java, PrintWriterTest.java,
+ 	PushbackReaderTest.java, RandomAccessFileTest.java,
+ 	StringWriterTest.java, README: Initial Checkin 
+ 
+ 1998-08-02 00:38  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* test/java.io/: BufferedInputStreamTest.java,
+ 	ByteArrayInputStreamTest.java, DataInputOutputTest.java,
+ 	LineNumberInputStreamTest.java, PushbackInputStreamTest.java,
+ 	SequenceInputStreamTest.java, StringBufferInputStreamTest.java: 
+ 	Copyright notice update 
+ 
+ 1998-08-01 23:51  John Keiser <jkeiser@iname.com>
+ 
+ 	* test/base/OutputClass.java: OutputClass will allow us to compare
+ 	our sigs and exceptions with Sun's.  
+ 
+ 1998-08-01 23:50  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/lang/ClassHelper.java: Fixed them.  They work now.  
+ 
+ 1998-08-01 23:49  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/: Beans.java, Customizer.java, Introspector.java,
+ 	PropertyEditorSupport.java, SimpleBeanInfo.java, TODO: Modified
+ 	signatures for full compliance with spec.  Added TODO.  
+ 
+ 1998-08-01 18:03  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/info/ComponentBeanInfo.java: Mirrors Sun's
+ 	ComponentBeanInfo.  
+ 
+ 1998-08-01 18:03  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/Introspector.java: Moved synchronized keyword to
+ 	appropriate place.  
+ 
+ 1998-08-01 18:02  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/IndexedPropertyDescriptor.java: Typo.  
+ 
+ 1998-08-01 18:01  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/IntrospectionIncubator.java: Fixed typo.  
+ 
+ 1998-08-01 16:27  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/IntrospectionIncubator.java: Fixed EventSet naming
+ 	problem.  
+ 
+ 1998-08-01 05:39  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/IndexedPropertyDescriptor.java: Fixed a few
+ 	NullPointerExceptions.  
+ 
+ 1998-08-01 05:27  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/: BeanDescriptor.java, Introspector.java,
+ 	PropertyDescriptor.java: Fairly major revision, changing which
+ 	methods are used for what things and making explicit info work
+ 	better.  
+ 
+ 1998-08-01 05:26  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/: BeanInfoEmbryo.java,
+ 	IntrospectionIncubator.java: Fairly major revision, changing the
+ 	way methods are found and used and using explicit info properly.  
+ 
+ 1998-08-01 05:25  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/lang/ClassHelper.java: Fixed
+ 	getAllMethodsAtDeclaration() cache.  
+ 
+ 1998-08-01 04:48  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: DataInputStream.java, DataOutputStream.java: Moved data
+ 	conversion functionality to package callable static method instead
+ 	of embedding directly in instance methods to make it easy for
+ 	RandomAccessFile to share 
+ 
+ 1998-08-01 04:46  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/: BufferedInputStream.java, BufferedOutputStream.java,
+ 	ByteArrayInputStream.java, ByteArrayOutputStream.java,
+ 	CharConversionException.java, DataInput.java, DataOutput.java,
+ 	EOFException.java, Externalizable.java, FileNotFoundException.java,
+ 	FilenameFilter.java, IOException.java, InputStream.java,
+ 	InterruptedIOException.java, InvalidClassException.java,
+ 	InvalidObjectException.java, LineNumberInputStream.java,
+ 	NotActiveException.java, NotSerializableException.java,
+ 	ObjectInput.java, ObjectInputValidation.java, ObjectOutput.java,
+ 	OptionalDataException.java, OutputStream.java,
+ 	PushbackInputStream.java, Replaceable.java, Resolvable.java,
+ 	SequenceInputStream.java, Serializable.java,
+ 	StreamCorruptedException.java, SyncFailedException.java,
+ 	UTFDataFormatException.java, UnsupportedEncodingException.java,
+ 	WriteAbortedException.java: Copyright notice update 
+ 
+ 1998-08-01 03:39  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* gnu/java/io/EncodingManager.java,
+ 	gnu/java/io/decode/Decoder.java,
+ 	gnu/java/io/decode/DecoderEightBitLookup.java,
+ 	gnu/java/io/decode/Decoder8859_1.java,
+ 	gnu/java/io/encode/Encoder.java,
+ 	gnu/java/io/encode/Encoder8859_1.java,
+ 	gnu/java/io/encode/EncoderEightBitLookup.java,
+ 	java/io/BufferedReader.java, java/io/BufferedWriter.java,
+ 	java/io/CharArrayReader.java, java/io/CharArrayWriter.java,
+ 	java/io/File.java, java/io/FileDescriptor.java,
+ 	java/io/FileInputStream.java, java/io/FileOutputStream.java,
+ 	java/io/FileReader.java, java/io/FileWriter.java,
+ 	java/io/InputStreamReader.java, java/io/LineNumberReader.java,
+ 	java/io/OutputStreamWriter.java, java/io/PipedWriter.java,
+ 	java/io/PipedReader.java, java/io/PrintStream.java,
+ 	java/io/PrintWriter.java, java/io/PipedInputStream.java,
+ 	java/io/PushbackReader.java, java/io/PipedOutputStream.java,
+ 	java/io/RandomAccessFile.java, java/io/Reader.java,
+ 	java/io/StringReader.java, java/io/StringWriter.java,
+ 	java/io/Writer.java, java/io/FilterReader.java,
+ 	java/io/FilterWriter.java, native/java.io/File.c,
+ 	native/java.io/FileDescriptor.c, native/java.io/FileInputStream.c,
+ 	native/java.io/FileOutputStream.c,
+ 	native/java.io/RandomAccessFile.c, native/java.io/javaio.c,
+ 	native/java.io/javaio.h: Initial Checkin 
+ 
+ 1998-08-01 03:01  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/IntrospectionIncubator.java: Minor bugfix.  
+ 
+ 1998-08-01 03:00  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/BeanInfoEmbryo.java: Fixed bug wherein multiple
+ 	methods with same name could not be added 
+ 
+ 1998-08-01 02:59  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/Introspector.java: Changed docs to specify that
+ 	addXXX(type) need not have type==XXX 
+ 
+ 1998-07-31 06:52  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/: EventSetDescriptor.java, Introspector.java,
+ 	PropertyDescriptor.java: Minor bugfixes.  
+ 
+ 1998-07-31 06:50  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/IntrospectionIncubator.java: Small bugfixes.  
+ 
+ 1998-07-31 06:32  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/editors/: ColorEditor.java, FontEditor.java,
+ 	NativeBooleanEditor.java, NativeByteEditor.java,
+ 	NativeDoubleEditor.java, NativeFloatEditor.java,
+ 	NativeIntEditor.java, NativeLongEditor.java,
+ 	NativeShortEditor.java, StringEditor.java: PropertyEditors for the
+ 	primitive types.  
+ 
+ 1998-07-31 02:14  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/beans/: BeanDescriptor.java, BeanInfo.java, Beans.java,
+ 	Customizer.java, EventSetDescriptor.java, FeatureDescriptor.java,
+ 	IndexedPropertyDescriptor.java, IntrospectionException.java,
+ 	Introspector.java, MethodDescriptor.java, ParameterDescriptor.java,
+ 	PropertyChangeEvent.java, PropertyChangeListener.java,
+ 	PropertyChangeSupport.java, PropertyDescriptor.java,
+ 	PropertyEditor.java, PropertyEditorManager.java,
+ 	PropertyEditorSupport.java, PropertyVetoException.java,
+ 	SimpleBeanInfo.java, VetoableChangeListener.java,
+ 	VetoableChangeSupport.java, Visibility.java: java.beans.  Right now
+ 	it just compiles.  Test cases will follow.  
+ 
+ 1998-07-31 02:12  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/beans/: BeanInfoEmbryo.java, EmptyBeanInfo.java,
+ 	ExplicitBeanInfo.java, IntrospectionIncubator.java: Helpers for
+ 	java.beans.  
+ 
+ 1998-07-31 02:11  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/lang/: ArrayHelper.java, ClassHelper.java: Stuff that
+ 	oughta have been in the core in the first place :) 
+ 
+ 1998-07-31 02:09  John Keiser <jkeiser@iname.com>
+ 
+ 	* gnu/java/io/ClassLoaderObjectInputStream.java: ObjectInputStream,
+ 	but allowing a different ClassLoader.  
+ 
+ 1998-07-31 02:04  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang.reflect/Makefile.am: Changed it to use the
+ 	NO_VMI option for now ... some features are left out with this on,
+ 	but at least it can compile VM-independent.  
+ 
+ 1998-07-29 02:31  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/: OSCField.java, ObjectOutputStream.java,
+ 	ObjectStreamClass.java, ObjectStreamField.java: Renamed OSCField to
+ 	ObjectStreamField to match JDK1.2b4 spec.  Changed all usage of
+ 	OSCField to ObjectStreamField.  
+ 
+ 1998-07-29 01:02  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: Changed usage of OSCField to
+ 	ObjectStreamField.  Partially implemented reading in data for a
+ 	different version of a class.  
+ 
+ 1998-07-28 16:13  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/TODO.serialization: Removed (no longer necessary).  
+ 
+ 1998-07-28 16:11  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: Completed
+ 	(registerValidation(ObjectInputValidation,int)).  
+ 
+ 1998-07-28 00:15  Geoff Berry <gcb@gnu.org>
+ 
+ 	* aclocal.m4: [no log message] 
+ 
+ 1998-07-27 23:36  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/Collections.java: Fixed variable name typos.  
+ 
+ 1998-07-27 23:32  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/AbstractSet.java: (hashCode()) added return statement.  
+ 
+ 1998-07-27 23:31  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/AbstractMap.java: Implemented all non-abstract methods.  
+ 
+ 1998-07-27 22:22  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/AbstractSequentialList.java: (remove(int)): added
+ 	return of removed object.  
+ 	(removeRange(int,int): changed index to fromIndex.  
+ 
+ 1998-07-27 22:18  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/AbstractSequentialList.java: (addAll(int,Collection)):
+ 	added return value.  
+ 
+ 1998-07-27 22:16  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/Collections.java: Added missing semicolon from inner
+ 	class decl.  
+ 
+ 1998-07-27 22:15  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/AbstractSet.java: Completed implements clause.  
+ 
+ 1998-07-27 22:14  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/AbstractMap.java: Added empty bodies for non-abstract
+ 	methods.  
+ 
+ 1998-07-27 22:08  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/net/: URLStreamHandler.java, DatagramSocketImpl.java,
+ 	ContentHandler.java: Removed synchronized modifier from abstract
+ 	methods.  
+ 
+ 1998-07-27 22:05  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/net/SocketImpl.java: Removed synchronized modifiers from
+ 	abstract methods.  
+ 
+ 1998-07-27 22:02  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/math/BigInteger.java: Added package declaration.  
+ 
+ 1998-07-27 19:37  Geoff Berry <gcb@gnu.org>
+ 
+ 	* aclocal.m4, configure.in: New variable @VMINCLUDE@ is set to the
+ 	path to the include files for the JVM being configured for.  
+ 
+ 1998-07-27 19:35  Geoff Berry <gcb@gnu.org>
+ 
+ 	* native/java.io/Makefile.am: Added @VMINCLUDE@ to INCLUDES 
+ 
+ 1998-07-27 19:33  Geoff Berry <gcb@gnu.org>
+ 
+ 	* native/java.lang.reflect/Makefile.am, java/util/Makefile.am: 
+ 	First version 
+ 
+ 1998-07-27 19:30  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/lang/Makefile.am: Added reflect SUBDIR 
+ 
+ 1998-07-25 15:00  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang.reflect/: Constructor.c, Field.c, Method.c: They
+ 	don't use jnilink anymore; they never needed to in the first place.  
+ 
+ 1998-07-25 14:59  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/primlib.c: Uses new jnilink.  
+ 
+ 1998-07-25 14:59  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/: jcl.c, jcl.h: Added JCL_free for completeness.  
+ 
+ 1998-07-25 14:58  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/: jnilink.c, jnilink.h: Changed it so that 1.1 and 1.2
+ 	jnilinks will be binary compatible and so that the interface is a
+ 	little bit easier.  
+ 
+ 1998-07-24 22:56  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/lang/Comparable.java, java/lang/Makefile.am,
+ 	java/lang/UnsupportedOperationException.java,
+ 	java/lang/reflect/Makefile.am, java/math/Makefile.am,
+ 	java/net/Makefile.am, test/java.lang.reflect/Makefile.am,
+ 	test/java.util/Makefile.am: Added java.lang.Comparable,
+ 	java.lang.UnsupportedOperationException and some Makefile.am's in an
+ 	attempt to get the entire tree to compile.  
+ 
+ 1998-07-24 22:54  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: Made string and array constants
+ 	into static final veriables 
+ 
+ 1998-07-24 22:53  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/Makefile.am: Added new classes 
+ 
+ 1998-07-24 22:52  Geoff Berry <gcb@gnu.org>
+ 
+ 	* configure.in: Added Makefile entries for Makefile.am's added to
+ 	tree 
+ 
+ 1998-07-24 22:37  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/lang/Makefile.am: Fixed Comparable misspelling 
+ 
+ 1998-07-24 22:24  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/WriteAbortedException.java: Changed constructor
+ 	parameters to match spec.  
+ 
+ 1998-07-24 22:16  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/util/Arrays.java: Rewrote anonymous inner class to be a
+ 	static inner class to allow compilation with guavac.  
+ 
+ 1998-07-24 22:06  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/lang/Makefile.am: Added Comparable 
+ 
+ 1998-07-24 21:45  Geoff Berry <gcb@gnu.org>
+ 
+ 	* native/java.io/Makefile.am: Added libjava_io_ObjectInputStream.la 
+ 
+ 1998-07-24 21:31  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/Makefile.am: Added math 
+ 
+ 1998-07-24 21:29  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/Makefile.am: Added lang 
+ 
+ 1998-07-24 20:40  Geoff Berry <gcb@gnu.org>
+ 
+ 	* configure.in: Added java/lang/reflect/Makefile 
+ 
+ 1998-07-24 20:37  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/lang/reflect/Array.java: Remove unnecessary semicolon from
+ 	end of constructor declaration (no I'm not that picky, but guavac
+ 	gives me warnings).  
+ 
+ 1998-07-24 20:35  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/lang/reflect/: Method.java, Field.java: Added empty body to
+ 	private constructor to make it compile.  
+ 
+ 1998-07-24 20:03  Geoff Berry <gcb@gnu.org>
+ 
+ 	* test/java.io/: HairyGraph.java, OOSCallDefault.java,
+ 	OOSExtern.java, OOSNoCallDefault.java, ObjectInputStreamTest.java,
+ 	Test.java, calldefault.data, external.data, graph.data,
+ 	nocalldefault.data: Updated data files to correspond to new test
+ 	classes.  Moved test classes out of ObjectOutputStreamTest.  Added
+ 	ObjectInputStreamTest.  
+ 
+ 1998-07-24 20:00  Geoff Berry <gcb@gnu.org>
+ 
+ 	* test/java.io/ObjectOutputStreamTest.java: Moved test classes into
+ 	seperate files so they could be used by ObjectInputStreamTest.  
+ 
+ 1998-07-24 19:59  Geoff Berry <gcb@gnu.org>
+ 
+ 	* test/gnu.java.lang.reflect/TypeSignatureTest.java: Added tests
+ 	for (getClassForEncoding).  
+ 
+ 1998-07-24 19:54  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java: Fixed bug in (readObject()) where
+ 	ObjectStreamClass's weren't getting handles assigned soon enough.  
+ 
+ 1998-07-24 19:52  Geoff Berry <gcb@gnu.org>
+ 
+ 	* gnu/java/lang/reflect/TypeSignature.java: Fixed
+ 	(getClassForEncoding(String)) to actually work with arrays.  
+ 
+ 1998-07-24 01:59  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/net/Authenticator.java, java/net/BindException.java,
+ 	java/net/ConnectException.java, java/net/ContentHandler.java,
+ 	java/net/ContentHandlerFactory.java, java/net/DatagramPacket.java,
+ 	java/net/DatagramSocket.java, java/net/DatagramSocketImpl.java,
+ 	java/net/FileNameMap.java, java/net/HttpURLConnection.java,
+ 	java/net/InetAddress.java, java/net/JarURLConnection.java,
+ 	java/net/MalformedURLException.java, java/net/MimeTypeMapper.java,
+ 	java/net/MulticastSocket.java, java/net/NetPermission.java,
+ 	java/net/NoRouteToHostException.java,
+ 	java/net/PasswordAuthentication.java,
+ 	java/net/PlainDatagramSocketImpl.java,
+ 	java/net/PlainSocketImpl.java, java/net/ProtocolException.java,
+ 	java/net/ServerSocket.java, java/net/Socket.java,
+ 	java/net/SocketException.java, java/net/SocketImpl.java,
+ 	java/net/SocketImplFactory.java, java/net/SocketInputStream.java,
+ 	java/net/SocketOptions.java, java/net/SocketOutputStream.java,
+ 	java/net/SocketPermission.java, java/net/URL.java,
+ 	java/net/URLConnection.java, java/net/URLEncoder.java,
+ 	java/net/URLStreamHandler.java,
+ 	java/net/URLStreamHandlerFactory.java,
+ 	java/net/UnknownHostException.java,
+ 	java/net/UnknownServiceException.java,
+ 	gnu/java/net/content/text/plain.java,
+ 	gnu/java/net/http/Handler.java,
+ 	gnu/java/net/http/HttpURLConnection.java: Copyright notice update 
+ 
+ 1998-07-23 15:05  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/unicode/: BLOCKS.TXT, ReadMe-2.1.1.txt,
+ 	UnicodeData-2.1.2.txt: Added Unicode reference material.  
+ 
+ 1998-07-23 02:10  John Keiser <jkeiser@iname.com>
+ 
+ 	* configure.in: Added support for native/java.lang.reflect and
+ 	native/lib Makefiles 
+ 
+ 1998-07-23 02:01  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/Makefile.am: Added java.lang.reflect and lib to subdirs.  
+ 
+ 1998-07-23 02:00  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/jcl.c: Fixed a little warning booboo.  
+ 
+ 1998-07-23 02:00  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/Makefile.am: Added.  
+ 
+ 1998-07-23 01:24  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang.reflect/: Constructor.c, Field.c, Method.c,
+ 	reflect.c: Allow compilation of java.lang.reflect without VMI or
+ 	JVMDI-specific stuff using NO_VMI.  This can be used for standalone
+ 	testing.  Also fixed a couple of 'void return from non-void method'
+ 	errors, and a Makefile.  
+ 
+ 1998-07-23 01:11  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/StringBuffer.java: Completed StringBuffer.  Fully
+ 	compatible with JDK 1.2beta4.  
+ 
+ 1998-07-23 00:49  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang.reflect/: Field.c, Method.c, Constructor.c,
+ 	reflect.c, reflect.h: Moved common member access check
+ 	functionality from implementations to the reflect library.  
+ 
+ 1998-07-23 00:45  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/: jcl.c, jcl.h: Added JCL_FindClass.  
+ 
+ 1998-07-23 00:43  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/vmi/: vmi.c, vmi.h: Added JVMDI_GetFrameClass (since it
+ 	could be a static method).  
+ 
+ 1998-07-23 00:39  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/reflect/: Field.java, Method.java, Constructor.java: 
+ 	Made them uninstantiable.  
+ 
+ 1998-07-22 19:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/: String.java, String.java, String.java: ...  
+ 
+ 1998-07-22 19:23  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: ..  
+ 
+ 1998-07-22 19:19  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: [no log message] 
+ 
+ 1998-07-22 19:14  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: argargarg 
+ 
+ 1998-07-22 19:09  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: yet again -- testing commits.  
+ 
+ 1998-07-22 19:03  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: Testing commit scripts.  
+ 
+ 1998-07-22 16:31  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: and again. lalala.  
+ 
+ 1998-07-22 16:29  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: arg.  
+ 
+ 1998-07-22 16:26  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: Still testing.  
+ 
+ 1998-07-22 16:24  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: take 2 
+ 
+ 1998-07-22 16:15  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: Testing mode changes.  
+ 
+ 1998-07-22 05:43  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: 
+ 	(toLowerCase): Fix typo.  
+ 
+ 1998-07-22 05:36  Paul Fisher <rao@gnu.org>
+ 
+ 	* java/lang/String.java: Commented entire class.  Implemented JLS
+ 	20.12.  
+ 	(hashCode): Added cached hashcodes.  
+ 
+ 1998-07-21 19:55  Brian Jones <cbj@gnu.org>
+ 
+ 	* AUTHORS: changed my email address 
+ 
+ 1998-07-21 06:16  Geoff Berry <gcb@gnu.org>
+ 
+ 	* test/java.io/: calldefault.data, external.data, graph.data,
+ 	nocalldefault.data, notserial.data, notserialfield.data: Added data
+ 	files for ObjectOutputStreamTest.  
+ 
+ 1998-07-21 06:14  Geoff Berry <gcb@gnu.org>
+ 
+ 	* test/java.io/ObjectStreamClassTest.java: Fixed typo.  
+ 
+ 1998-07-21 06:08  Geoff Berry <gcb@gnu.org>
+ 
+ 	* native/java.io/java_io_ObjectInputStream.h,
+ 	native/java.io/java_io_ObjectInputStream.c,
+ 	test/java.io/ObjectOutputStreamTest.java: First version.  
+ 
+ 1998-07-21 06:05  Geoff Berry <gcb@gnu.org>
+ 
+ 	* gnu/java/lang/reflect/TypeSignature.java: Added
+ 	`getClassForEncoding(String)' method.  
+ 
+ 1998-07-21 05:57  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectStreamConstants.java: Changed constants from hex to
+ 	decimal to make debugging easier.  
+ 
+ 1998-07-21 05:57  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectStreamClass.java: Added setter methods used to
+ 	reconstruct ObjectStreamClass objects from the stream.  
+ 
+ 1998-07-21 05:56  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectOutputStream.java: Added some 1.2 features such as
+ 	allowing subclasses to override the implementation and selecting the
+ 	protocol to use.  Changed usage of `java.lang.reflect.Field' to
+ 	`java.io.OSCField'.  
+ 
+ 1998-07-21 05:52  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/: BlockDataException.java, OSCField.java,
+ 	ObjectInputStream.java: First version 
+ 
+ 1998-07-17 21:22  Paul Fisher <rao@gnu.org>
+ 
+ 	* doc/jcl-hacking.texinfo: Added Paul Fisher as author.  
+ 
+ 1998-07-15 19:51  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/reflect/Array.java: Fixed it so it runs under all
+ 	tests.  Have one more test to do later.  
+ 
+ 1998-07-15 19:50  John Keiser <jkeiser@iname.com>
+ 
+ 	* test/java.lang.reflect/ArrayTest.java: Added test for Array
+ 	java.lang.reflect class.  Requires Makefiles I have not made yet,
+ 	but runs successfully on JDK 1.1.6 / Win32.  
+ 
+ 1998-07-15 14:45  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/primlib.c: Fixed "Control reaches end of non-void
+ 	method" warnings.  
+ 
+ 1998-07-15 03:59  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* doc/jcl-hacking.texinfo: Changed project name to $classpath and
+ 	made some references to the Kaffe class library effort.  
+ 
+ 1998-07-13 20:42  Geoff Berry <gcb@gnu.org>
+ 
+ 	* java/io/ObjectOutputStream.java: Added comments.  
+ 
+ 1998-07-07 08:21  Geoff Berry <gcb@gnu.org>
+ 
+ 	* configure.in, gnu/Makefile.am, gnu/java/io/Makefile.am,
+ 	gnu/java/io/ObjectIdentityWrapper.java,
+ 	gnu/java/io/UniqueObjectWrapper.java, gnu/tools/Makefile.am,
+ 	gnu/tools/serialver/Main.java, gnu/tools/serialver/Makefile.am,
+ 	java/io/ObjectOutputStream.java, java/io/ObjectStreamClass.java,
+ 	native/java.io/java_io_ObjectStreamClass.c,
+ 	native/java.io/java_io_ObjectStreamClass.h,
+ 	test/java.io/ObjectStreamClassTest.java: See ChangeLog.  
+ 
+ 1998-07-07 01:09  Geoff Berry <gcb@gnu.org>
+ 
+ 	* gnu/java/io/UniqueObjectWrapper.java: Added comments 
+ 
+ 1998-07-07 00:10  Geoff Berry <gcb@gnu.org>
+ 
+ 	* gnu/java/lang/reflect/TypeSignature.java,
+ 	java/io/ObjectStreamClass.java, java/io/ObjectStreamConstants.java,
+ 	java/util/Arrays.java, native/java.io/java_io_ObjectStreamClass.c,
+ 	test/Makefile.am, test/gnu.java.lang.reflect/Makefile.am,
+ 	test/gnu.java.lang.reflect/TypeSignatureTest.java: Added comments
+ 	for gnu/java/lang/reflect/TypeSignature.java 
+ 	java/io/ObjectStreamClass.java java/io/ObjectStreamConstants.java 
+ 	native/java.io/java_io_ObjectStreamClass.c 
+ 	Added initialization of int d2 in mergeSort(Object[],Comparator) to 
+ 	placate javac.  
+ 
+ 1998-07-05 00:58  Aaron M. Renn <arenn@urbanophile.com>
+ 
+ 	* java/io/DataInputStream.java: File out of sync on my local disk.
+ 	I must have changed something! 
+ 
+ 1998-07-04 00:39  Geoff Berry <gcb@gnu.org>
+ 
+ 	* native/java.io/: Makefile.am, java_io_ObjectOutputStream.c,
+ 	java_io_ObjectOutputStream.h, java_io_ObjectStreamClass.c,
+ 	java_io_ObjectStreamClass.h: [no log message] 
+ 
+ 1998-07-04 00:34  Geoff Berry <gcb@gnu.org>
+ 
+ 	* Makefile.am, aclocal.m4, configure.in, gnu/java/Makefile.am,
+ 	gnu/java/io/Makefile.am, gnu/java/io/NullOutputStream.java,
+ 	gnu/java/io/UniqueObjectWrapper.java, gnu/java/lang/Makefile.am,
+ 	gnu/java/lang/reflect/Makefile.am,
+ 	gnu/java/lang/reflect/TypeSignature.java, java/io/Makefile.am,
+ 	java/io/ObjectOutputStream.java, java/io/ObjectStreamClass.java,
+ 	java/io/ObjectStreamConstants.java, java/io/TODO.serialization,
+ 	native/Makefile.am: Added files needed for writing out serialized
+ 	objects.  Modified Makefiles to included added subdirectories.  
+ 
+ 1998-07-03 20:55  Geoff Berry <gcb@gnu.org>
+ 
+ 	* doc/jcl-hacking.texinfo: 
+ 	Fixed links and menu.  
+ 
+ 1998-07-01 18:17  John Keiser <jkeiser@iname.com>
+ 
+ 	* doc/jcl-hacking.texinfo: Added new sections on native code,
+ 	robustness, efficiency, portability.  Also changed Specification
+ 	Sources to add more sources.  Still needs a little texinfo
+ 	prettying, but at least it's there for now.  
+ 
+ 1998-07-01 03:57  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/vmi/: vmi.c, vmi.h: VMI no longer overlaps with JVMDI.  
+ 
+ 1998-07-01 03:46  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang.reflect/TODO: Some changes 
+ 
+ 1998-07-01 03:45  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang.reflect/reflect.c: Uses JVMDI instead of VMI
+ 	where appropriate.  
+ 
+ 1998-07-01 03:45  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang.reflect/: Field.c, Field.h: Finally added
+ 	Field.* native stuff.  Untested as usual; will test with Japhar
+ 	soon.  
+ 
+ 1998-07-01 03:44  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/java.lang.reflect/: Constructor.c, Method.c: Changed to
+ 	use JVMDI where appropriate and to use JNILINK correctly.  
+ 
+ 1998-07-01 03:41  John Keiser <jkeiser@iname.com>
+ 
+ 	* test/native/lib/: JNILinkTest.java, MethodTester.c,
+ 	MethodTester.h, PrimlibInterface.c, PrimlibInterface.h,
+ 	PrimlibTest.java: Created tests for primlib and jnilink.  primlib
+ 	test needs one more addition.  Later.  
+ 
+ 1998-07-01 03:38  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/primlib.c: Uses JNILINK now, and fixed null ptr bug 
+ 
+ 1998-07-01 03:37  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/: jnilink.c, jnilink.h: Changed JNILINK to not depend
+ 	on VMI, changed API.  More to come.  
+ 
+ 1998-07-01 03:35  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/jcl.c: Made JCL_ThrowException more thorough.  
+ 
+ 1998-07-01 03:34  John Keiser <jkeiser@iname.com>
+ 
+ 	* native/lib/DEPENDENCIES: JNILINK no longer depends on VMI.  
+ 
+ 1998-07-01 03:32  John Keiser <jkeiser@iname.com>
+ 
+ 	* java/lang/reflect/Field.java: Changed so that it uses native
+ 	peers 
+ 
+ 
+ Local Variables:
+ coding: iso-latin-1-unix	
+ End:
diff -Nrcpad gcc-4.0.2/libjava/classpath/ChangeLog-2004 gcc-4.1.0/libjava/classpath/ChangeLog-2004
*** gcc-4.0.2/libjava/classpath/ChangeLog-2004	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/ChangeLog-2004	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,18990 ----
+ 2004-12-31  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* NEWS: Add documentation about reference implementation.
+ 	* java/lang/Thread.java (sleep(long,int)): Only do argument
+ 	checking and push implementation to VMThread.sleep().
+ 	* vm/reference/java/lang/VMThread.java (join): Prevent ms overflow.
+ 	(sleep): Provide default implementation using Object.wait() and
+ 	Thread.yield().
+ 
+ 2004-12-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/LookAndFeel.java
+ 	(getDesktopPropertyValue): New method.
+ 
+ 2004-12-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTree.java
+ 	(hasChildren): New instance field.
+ 
+ 2004-12-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(getToolTipText): New method.
+ 	(getTitledBorderText): Likewise.
+ 	(getAccessibleKeyBinding): Likewise.
+ 	(getVerifyInputWhenFocusTarget): Likewise.
+ 	(setVerifyInputWhenFocusTarget): Likewise.
+ 	(verifyInputWhenFocusTarget): New instance field.
+ 
+ 2004-12-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(fireValueChanged): New method.
+ 
+ 2004-12-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultBoundedRangeModel.java:
+ 	Fixed javadocs all over.
+ 	(fireStateChanged): Simplified.
+ 	* javax/swing/BoundedRangeModel.java:
+ 	Reformatted.
+ 
+ 2004-12-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JRootPane.java
+ 	(setMenuBar): Added @deprecated tag.
+ 	(getMenuBar): Likewise.
+ 	* javax/swing/JTable.java
+ 	(sizeColumnsToFit): Likewise.
+ 
+ 2004-12-30  Paul Jenner  <psj.home@ntlworld.com>
+ 
+ 	* javax/swing/ImageIcon.java (setImage): Implemented.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_as.java,
+ 	gnu/java/locale/LocaleInformation_bg.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_dz.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_fa_AF.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_ga.java,
+ 	gnu/java/locale/LocaleInformation_hi.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_mr.java,
+ 	gnu/java/locale/LocaleInformation_mt.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_sr.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_sw.java,
+ 	gnu/java/locale/LocaleInformation_ta.java,
+ 	gnu/java/locale/LocaleInformation_uz_AF.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java:
+ 	Regenerated with new gnu.localegen to get timeZone arrays correct.
+ 
+ 2004-12-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/java/locale/LocaleInformation.java
+ 	Added EEK -> kr mapping for currency symbols.
+ 
+ 2004-12-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/DecimalFormatSymbols.java
+ 	New transient currency variable.
+ 	(getCurrency()): uses local variable instead
+ 	(getExponential()): documentation
+ 	(setExponential(char)): documentation
+ 	(getInternationalCurrencySymbol()): documentation fix
+ 	(setInternationalCurrencySymbol(String)): sets currency
+ 	* java/text/NumberFormat.java
+ 	(getCurrencyInstance(java.util.Locale)): sets fraction digits
+ 	from the currency after creation of the format.
+ 	
+ 2004-12-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Locale.java
+ 	(getDisplayLanguage(java.util.Locale)): more documentation,
+ 	uses getDisplayString
+ 	(getDisplayCountry(java.util.Locale)): more documentation,
+ 	uses getDisplayString
+ 	(getDIsplayVariant(java.util.Locale)): more documentation,
+ 	uses getDisplayString
+ 	(getDisplayString(java.util.Locale,String,String)): returns
+ 	a possibly localized string, using appropriate information from
+ 	gnu.java.locale.LocaleInformation
+ 
+ 2004-12-30  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	(prepareRenderer): Get column's index in dataModel instead
+ 	of column's view index.
+ 	(getColumnCount): return count of the columns in ColumnModel,
+ 	not in dataModel.
+ 	(removeColumn): Implemented.
+ 	(moveColumm): Likewise.
+ 	(setRowHeight): throw IllegalArgumentException if height is
+ 	less then 1.
+ 	* javax/swing/table/DefaultTableColumnModel.java: Add javadocs.
+ 	(DefaultTableColumnModel):Add call to createSelectionModel().
+ 	(addColumn): Fire columnAdded event to registered listeners.
+ 	(removeColumn): Fire columnRemoved event to registered listeners.
+ 	(moveColumn): Fire columnMoved event to registered listeners.
+ 	(setColumnMargin): Fire ColumnMarginChanged event to registered listeners.
+ 	(getColumnIndex): Changed parameter name.
+ 	(setColumnSelectionAllowed): Likewise.
+ 	(fireColumnAdded): Implemented.
+ 	(fireColumnRemoved): Likewise.
+ 	(fireColumnMoved): Likewise.
+ 	(fireColumnMarginChanged): Likewise.
+ 	(getListeners): Changed parameter name.
+ 	(propertyChange): Implemented.
+ 	(valueChanged): Changed parameter name.
+ 	(createSelectionModel): Implemented.
+ 
+ 004-12-29  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Button.java,
+ 	java/awt/Canvas.java,
+ 	java/awt/Checkbox.java,
+ 	java/awt/CheckboxMenuItem.java,
+ 	java/awt/Choice.java,
+ 	java/awt/Dialog.java,
+ 	java/awt/Frame.java,
+ 	java/awt/Label.java,
+ 	java/awt/List.java,
+ 	java/awt/Menu.java,
+ 	java/awt/MenuBar.java,
+ 	java/awt/MenuItem.java,
+ 	java/awt/PopupMenu.java,
+ 	java/awt/ScrollPane.java,
+ 	java/awt/Scrollbar.java,
+ 	java/awt/TextArea.java,
+ 	java/awt/Window.java (getAccessibleContext): Clean up comments.
+ 	Reformat.
+ 	* java/awt/Button.java,
+ 	java/awt/Checkbox.java,
+ 	java/awt/Choice.java,
+ 	java/awt/Menu.java,
+ 	java/awt/PopupMenu.java,
+ 	java/awt/TextArea.java (getAccessibleContext): Only create new
+ 	accessible once.
+ 	* java/awt/TextComponent.java (getAccessibleContext): Implement.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/metadata/IIOInvalidTreeException.java
+ 	(IIOInvalidTreeException): Reformatted.
+ 	* javax/imageio/spi/IIORegistry.java
+ 	(static): Register ImageReaderSpi.class and ImageWriterSpi.class.
+ 	* javax/imageio/stream/MemoryCacheImageInputStream.java:
+ 	Reworked import statements.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java:
+ 	Regenerated with newer gnu.lcoalegen to include localized variant
+ 	names.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java:
+ 	Explicitely import used classes.
+ 	(getLocalGraphicsEnvironment): Simplify.
+ 	* java/awt/Window.java (Window):
+ 	Enable code to get the default GraphicsConfiguration.
+ 
+ 2004-12-30  Chris Burdess <dog@gnu.org>
+ 
+ 	* GnomeDocument.java,GnomeXPathNSResolver: Fixed XPathNSResolver
+ 	implementation to resolve relative to node argument.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/metal/DefaultMetalTheme.java
+ 	(CONTROL_TEXT_FONT): New static field.
+ 	(MENU_TEXT_FONT): Likewise.
+ 	(SUB_TEXT_FONT): Likewise.
+ 	(SYSTEM_TEXT_FONT): Likewise.
+ 	(USER_TEXT_FONT): Likewise.
+ 	(WINDOW_TITLE_FONT): Likewise.
+ 	(getControlTextFont): New method.
+ 	(getMenuTextFont): Likewise.
+ 	(getSubTextFont): Likewise.
+ 	(getSystemTextFont): Likewise.
+ 	(getUserTextFont): Likewise.
+ 	(getWindowTitleFont): Likewise.
+ 	* javax/swing/plaf/metal/MetalTheme.java
+ 	(BLACK): Initialize with Color.BLACK.
+ 	(WHITE): Initialize with Color.WHITE.
+ 	(getInactiveControlTextColor): Return getControlDisabled().
+ 	(getMenuDisabledForeground): Return getSecondary3().
+ 	(getControlTextFont): New abstract method.
+ 	(getMenuTextFont): Likewise.
+ 	(getSubTextFont): Likewise.
+ 	(getSystemTextFont): Likewise.
+ 	(getUserTextFont): Likewise.
+ 	(getWindowTitleFont): Likewise.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/DateFormat.java
+ 	(getAvailableLocales): Implemented.
+ 	* java/util/Locale.java
+ 	(availableLocales): Fix modifier order.
+ 	(localeMap): Likewise.
+ 	(getAvailableLocales): Likewise.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_aa.java,
+ 	gnu/java/locale/LocaleInformation_af.java,
+ 	gnu/java/locale/LocaleInformation_am.java,
+ 	gnu/java/locale/LocaleInformation_ar.java,
+ 	gnu/java/locale/LocaleInformation_as.java,
+ 	gnu/java/locale/LocaleInformation_az.java,
+ 	gnu/java/locale/LocaleInformation_be.java,
+ 	gnu/java/locale/LocaleInformation_bg.java,
+ 	gnu/java/locale/LocaleInformation_bn.java,
+ 	gnu/java/locale/LocaleInformation_ca.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_cy.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_dv.java,
+ 	gnu/java/locale/LocaleInformation_dz.java,
+ 	gnu/java/locale/LocaleInformation_el.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_eo.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_et.java,
+ 	gnu/java/locale/LocaleInformation_eu.java,
+ 	gnu/java/locale/LocaleInformation_fa.java,
+ 	gnu/java/locale/LocaleInformation_fa_AF.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fo.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_ga.java,
+ 	gnu/java/locale/LocaleInformation_gl.java,
+ 	gnu/java/locale/LocaleInformation_gu.java,
+ 	gnu/java/locale/LocaleInformation_gv.java,
+ 	gnu/java/locale/LocaleInformation_he.java,
+ 	gnu/java/locale/LocaleInformation_hi.java,
+ 	gnu/java/locale/LocaleInformation_hr.java,
+ 	gnu/java/locale/LocaleInformation_hu.java,
+ 	gnu/java/locale/LocaleInformation_hy.java,
+ 	gnu/java/locale/LocaleInformation_id.java,
+ 	gnu/java/locale/LocaleInformation_is.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_iu.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ka.java,
+ 	gnu/java/locale/LocaleInformation_kk.java,
+ 	gnu/java/locale/LocaleInformation_kl.java,
+ 	gnu/java/locale/LocaleInformation_km.java,
+ 	gnu/java/locale/LocaleInformation_kn.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_kw.java,
+ 	gnu/java/locale/LocaleInformation_ky.java,
+ 	gnu/java/locale/LocaleInformation_lo.java,
+ 	gnu/java/locale/LocaleInformation_lt.java,
+ 	gnu/java/locale/LocaleInformation_lv.java,
+ 	gnu/java/locale/LocaleInformation_mk.java,
+ 	gnu/java/locale/LocaleInformation_ml.java,
+ 	gnu/java/locale/LocaleInformation_mn.java,
+ 	gnu/java/locale/LocaleInformation_mr.java,
+ 	gnu/java/locale/LocaleInformation_ms.java,
+ 	gnu/java/locale/LocaleInformation_mt.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nn.java,
+ 	gnu/java/locale/LocaleInformation_om.java,
+ 	gnu/java/locale/LocaleInformation_or.java,
+ 	gnu/java/locale/LocaleInformation_pa.java,
+ 	gnu/java/locale/LocaleInformation_pl.java,
+ 	gnu/java/locale/LocaleInformation_ps.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro.java,
+ 	gnu/java/locale/LocaleInformation_ru.java,
+ 	gnu/java/locale/LocaleInformation_sa.java,
+ 	gnu/java/locale/LocaleInformation_sk.java,
+ 	gnu/java/locale/LocaleInformation_sl.java,
+ 	gnu/java/locale/LocaleInformation_so.java,
+ 	gnu/java/locale/LocaleInformation_sq.java,
+ 	gnu/java/locale/LocaleInformation_sr.java,
+ 	gnu/java/locale/LocaleInformation_sr_Latn.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_sw.java,
+ 	gnu/java/locale/LocaleInformation_ta.java,
+ 	gnu/java/locale/LocaleInformation_te.java,
+ 	gnu/java/locale/LocaleInformation_th.java,
+ 	gnu/java/locale/LocaleInformation_ti.java,
+ 	gnu/java/locale/LocaleInformation_tr.java,
+ 	gnu/java/locale/LocaleInformation_tt.java,
+ 	gnu/java/locale/LocaleInformation_uk.java,
+ 	gnu/java/locale/LocaleInformation_ur.java,
+ 	gnu/java/locale/LocaleInformation_uz.java,
+ 	gnu/java/locale/LocaleInformation_uz_AF.java,
+ 	gnu/java/locale/LocaleInformation_vi.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG_Hans.java:
+ 	Regenerated.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation.java,
+ 	gnu/java/locale/LocaleInformation_bg.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java:
+ 	Updated to match update CLDR data more.
+ 
+ 2004-12-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Thread.java (sleep): Update documentation. Make sure
+ 	VMThread.sleep() is never called with zero arguments.
+ 	* vm/reference/java/lang/VMThread.java (sleep): Update documentation.
+ 	* NEWS: Mention change in VMThread.sleep() interface.
+ 
+ 2004-12-30  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* gnu/java/locale/LocaleInformation.java
+ 	Additional currency symbols.
+ 	* java/text/DecimalFormat.java
+ 	Correction of authorship < to (.
+ 	(scanFix): removed currency changes
+ 	(DecimalFormat()): documentation
+ 	(DecimalFormat(String)): documentation
+ 	(DecimalFormat(String, DecimalFormatSymbols): documentation
+ 	(formatInternal(double,FormatBuffer,FieldPosition)): added currency
+ 	substitution (apologies for reformatting).
+ 	(format(long,FormatBuffer,FieldPosition): ditto
+ 	(parse(String)): corrected compile warning (naming of multiplier)
+ 	(substituteCurrency(String,double)): new method
+ 	* java/text/DecimalFormatSymbols.java
+ 	Correction of authorship < to (.
+ 	(safeGetString): documentation
+ 	(DecimalFormatSymbols()): currency uses java.util.Currency
+ 	(setCurrency(java.util.Currency)): changes currency symbol and intl.
+ 	currency symbol
+ 	(setInternationalCurrencySymbol(String)): sets currency symbol
+ 	on basis of change
+ 	* java/text/NumberFormat.java
+ 	Correction of authorship < to (.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation.java
+ 	Addition of currency code to symbols mapping.
+ 	* java/util/Currency.java
+ 	(Currency()): added symbol retrieval
+ 	(getSymbol()): implemented
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_et.java
+ 	(contents): Removed localPatternChars entry.
+ 
+ 2004-12-30  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/nio/ByteBufferImpl.java (compact):
+ 	Set position and limit even if no bytes were moved.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/CharViewBufferImpl.java (compact): Likewise.
+ 	* java/nio/DirectByteBufferImpl.java (compact): Likewise.
+ 	* java/nio/DoubleViewBufferImpl.java (compact): Likewise.
+ 	* java/nio/FloatViewBufferImpl.java (compact): Likewise.
+ 	* java/nio/IntViewBufferImpl.java (compact): Likewise.
+ 	* java/nio/LongViewBufferImpl.java (compact): Likewise.
+ 	* java/nio/MappedByteBufferImpl.java (compact): Likewise.
+ 	* java/nio/ShortViewBufferImpl.java (compact): Likewise.
+ 	* java/nio/FloatBufferImpl.java (compact): Set position.
+ 	* java/nio/CharBufferImpl.java (compact): Likewise.
+ 	* java/nio/DoubleBufferImpl.java (compact): Likewise.
+ 	* java/nio/IntBufferImpl.java (compact): Likewise.
+ 	* java/nio/LongBufferImpl.java (compact): Likewise.
+ 	* java/nio/ShortBufferImpl.java (compact): Likewise.
+ 
+ 2004-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(getFocusLostBehavior): Fixed typo in method name.
+ 	(setFocusLostBehavior): Likewise.
+ 
+ 2004-12-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Add --enable-xmlj option. Check for libxml2 and
+ 	libxslt libraries when enabled. Add native/jni/xmlj/Makefile.
+ 	* gnu/xml/libxmlj/*: New files.
+ 	* include/Makefile.am: Add XMLJ_H_FILES. Group awt gtk peer headers
+ 	under GTKPEER_H_FILES. Generate new headers.
+ 	* include/gnu_xml_libxmlj_*.h: New generated files.
+ 	* native/jni/Makefile.am: Conditionally add xmlj dir.
+ 	* native/jni/xmlj/*: New files.
+ 
+ 2004-12-29  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/CheckboxMenuItem.java (getAccessibleContext,
+ 	AccessibleAWTCheckboxMenuItem): Implement.
+ 	* java/awt/Choice.java: Add implements declaration for Accessible.
+ 	* java/awt/Dialog.java (AccessibleAWTFrame, getAccessibleContext):
+ 	Implement.
+ 	* java/awt/Frame.java (AccessibleAWTFrame, getAccessibleContext):
+ 	Implement.
+ 	* java/awt/List.java: Implement AccessibleAWTList, AccessibleAWTListChild.
+ 	* java/awt/MenuComponent.java (accessibleContext): Make package visible.
+ 	* java/awt/MenuItem.java (getAccessibleContext): Implement.
+ 	* java/awt/Scrollbar.java (AccessibleAWTScrollbar, getAccessibleContext):
+ 	Implement.
+ 	* java/awt/ScrollPane.java (AccessibleAWTScrollPane, getAccessibleContext):
+ 	Implement.
+ 	* java/awt/Window.java (AccessibleAWTWindow): Implement.
+ 	(isActive, isFocused, getAccessibleContext): Implement.
+ 
+ 2004-12-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/TextAction.java
+ 	(getTextComponent): Simplified. Added Javadoc.
+ 	(augmentList): Implemented. Added Javadoc.
+ 	(getFocusedComponent): Added javadoc.
+ 
+ 2004-12-29  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(format(long,StringBuffer,FieldPosition)): multiply
+ 	number by multiplier before formatting.
+ 	
+ 2004-12-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(owner): Reformatted javadoc.
+ 	(ReadOnly): Reorganized keywords.
+ 	(ReadWrite): Likewise.
+ 
+ 2004-12-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Button.java,
+ 	java/lang/Runtime.java,
+ 	java/lang/System.java,
+ 	java/security/cert/X509CRLSelector.java,
+ 	java/security/cert/X509CertSelector.java,
+ 	java/util/ResourceBundle.java,
+ 	java/util/jar/JarFile.java,
+ 	javax/swing/JApplet.java,
+ 	javax/swing/JFormattedTextField.java,
+ 	javax/swing/JTree.java,
+ 	javax/swing/JWindow.java,
+ 	javax/swing/TransferHandler.java,
+ 	javax/swing/plaf/basic/BasicEditorPaneUI.java,
+ 	javax/swing/plaf/basic/BasicTextPaneUI.java
+ 	javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Imports reworked.
+ 
+ 2004-12-28  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Runtime.java
+ 	(runShutdownHooks): Rewrote wait for shutdown hooks loop.
+ 
+ 2004-12-28  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* NEWS: Added entry about new method.
+ 	* java/lang/Runtime.java
+ 	(addShutdownHook): Added call to new method.
+ 	* vm/reference/java/lang/VMRuntime.java
+ 	(enableShutdownHooks): New method.
+ 
+ 2004-12-27  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/nio/ByteBufferImpl.java,
+ 	java/nio/CharBufferImpl.java,
+ 	java/nio/DirectByteBufferImpl.java,
+ 	java/nio/DoubleBufferImpl.java,
+ 	java/nio/FloatBufferImpl.java,
+ 	java/nio/IntBufferImpl.java,
+ 	java/nio/LongBufferImpl.java,
+ 	java/nio/MappedByteBufferImpl.java,
+ 	java/nio/ShortBufferImpl.java
+ 	(compact): Added explicit read-only check and invalidate mark.
+ 
+ 2004-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/IIOParam.java
+ 	(setSourceBands): New method.
+ 	(setSourceSubsampling): Likewise.
+ 	* javax/imageio/ImageReadParam.java
+ 	(setDestination): Likewise.
+ 	(setDestinationBands): Likewise.
+ 	(setSourceProgressivePasses): Likewise.
+ 
+ 2004-12-27  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* NEWS: Added entry about class change.
+ 	* java/lang/Class.java
+ 	(Class(Object,Object)): Added protection domain "inheriting" for
+ 	array classes.
+ 
+ 2004-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java,
+ 	javax/swing/AbstractCellEditor.java,
+ 	javax/swing/AbstractListModel.java,
+ 	javax/swing/DefaultBoundedRangeModel.java,
+ 	javax/swing/DefaultButtonModel.java,
+ 	javax/swing/DefaultCellEditor.java,
+ 	javax/swing/DefaultComboBoxModel.java,
+ 	javax/swing/DefaultDesktopManager.java,
+ 	javax/swing/JMenu.java,
+ 	javax/swing/JSlider.java,
+ 	javax/swing/KeyStroke.java,
+ 	javax/swing/OverlayLayout.java,
+ 	javax/swing/ScrollPaneLayout.java,
+ 	javax/swing/SizeRequirements.java,
+ 	javax/swing/ViewportLayout.java:
+ 	Made serialVersionUID private.
+ 
+ 2004-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/metadata/IIOInvalidTreeException.java:
+ 	Use org.w3c.dom.Node instead of java.lang.Object.
+ 	(serialVersionUID): New field.
+ 
+ 2004-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de_AT.java: Reformatted.
+ 
+ 2004-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de_BE.java: Reformatted.
+ 
+ 2004-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_aa.java,
+ 	gnu/java/locale/LocaleInformation_aa_DJ.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER_SAAHO.java,
+ 	gnu/java/locale/LocaleInformation_aa_ET.java,
+ 	gnu/java/locale/LocaleInformation_af.java,
+ 	gnu/java/locale/LocaleInformation_af_ZA.java,
+ 	gnu/java/locale/LocaleInformation_am.java,
+ 	gnu/java/locale/LocaleInformation_am_ET.java,
+ 	gnu/java/locale/LocaleInformation_ar.java,
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java,
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_as.java,
+ 	gnu/java/locale/LocaleInformation_as_IN.java,
+ 	gnu/java/locale/LocaleInformation_az.java,
+ 	gnu/java/locale/LocaleInformation_be.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_bg.java,
+ 	gnu/java/locale/LocaleInformation_bg_BG.java,
+ 	gnu/java/locale/LocaleInformation_bn.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ca.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cy.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_de_LI.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_dv.java,
+ 	gnu/java/locale/LocaleInformation_dv_MV.java,
+ 	gnu/java/locale/LocaleInformation_dz.java,
+ 	gnu/java/locale/LocaleInformation_dz_BT.java,
+ 	gnu/java/locale/LocaleInformation_el.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_en_AS.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BE.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_BZ.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_GU.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en_MH.java,
+ 	gnu/java/locale/LocaleInformation_en_MP.java,
+ 	gnu/java/locale/LocaleInformation_en_MT.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_PK.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_UM.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_US_POSIX.java,
+ 	gnu/java/locale/LocaleInformation_en_VI.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_eo.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_eu.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_fa.java,
+ 	gnu/java/locale/LocaleInformation_fa_AF.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fo.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gl.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gu.java,
+ 	gnu/java/locale/LocaleInformation_gu_IN.java,
+ 	gnu/java/locale/LocaleInformation_gv.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_he.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_hi.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hr.java,
+ 	gnu/java/locale/LocaleInformation_hu.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_hy.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM_REVISED.java,
+ 	gnu/java/locale/LocaleInformation_id.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_is.java,
+ 	gnu/java/locale/LocaleInformation_is_IS.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_iu.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation_ka.java,
+ 	gnu/java/locale/LocaleInformation_kk.java,
+ 	gnu/java/locale/LocaleInformation_kk_KZ.java,
+ 	gnu/java/locale/LocaleInformation_kl.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_km.java,
+ 	gnu/java/locale/LocaleInformation_km_KH.java,
+ 	gnu/java/locale/LocaleInformation_kn.java,
+ 	gnu/java/locale/LocaleInformation_kn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_ky.java,
+ 	gnu/java/locale/LocaleInformation_lo.java,
+ 	gnu/java/locale/LocaleInformation_lo_LA.java,
+ 	gnu/java/locale/LocaleInformation_lt.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mk.java,
+ 	gnu/java/locale/LocaleInformation_ml.java,
+ 	gnu/java/locale/LocaleInformation_ml_IN.java,
+ 	gnu/java/locale/LocaleInformation_mn.java,
+ 	gnu/java/locale/LocaleInformation_mr.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_ms.java,
+ 	gnu/java/locale/LocaleInformation_ms_BN.java,
+ 	gnu/java/locale/LocaleInformation_ms_MY.java,
+ 	gnu/java/locale/LocaleInformation_mt.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nb_NO.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java,
+ 	gnu/java/locale/LocaleInformation_nn.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_om.java,
+ 	gnu/java/locale/LocaleInformation_om_ET.java,
+ 	gnu/java/locale/LocaleInformation_om_KE.java,
+ 	gnu/java/locale/LocaleInformation_or.java,
+ 	gnu/java/locale/LocaleInformation_or_IN.java,
+ 	gnu/java/locale/LocaleInformation_pa.java,
+ 	gnu/java/locale/LocaleInformation_pa_IN.java,
+ 	gnu/java/locale/LocaleInformation_pl.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_ps.java,
+ 	gnu/java/locale/LocaleInformation_ps_AF.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_sa.java,
+ 	gnu/java/locale/LocaleInformation_sa_IN.java,
+ 	gnu/java/locale/LocaleInformation_sk.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sl.java,
+ 	gnu/java/locale/LocaleInformation_so.java,
+ 	gnu/java/locale/LocaleInformation_so_DJ.java,
+ 	gnu/java/locale/LocaleInformation_so_ET.java,
+ 	gnu/java/locale/LocaleInformation_so_KE.java,
+ 	gnu/java/locale/LocaleInformation_so_SO.java,
+ 	gnu/java/locale/LocaleInformation_sq.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sr.java,
+ 	gnu/java/locale/LocaleInformation_sr_Latn.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_sw.java,
+ 	gnu/java/locale/LocaleInformation_sw_KE.java,
+ 	gnu/java/locale/LocaleInformation_sw_TZ.java,
+ 	gnu/java/locale/LocaleInformation_ta.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_te.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_th.java,
+ 	gnu/java/locale/LocaleInformation_th_TH.java,
+ 	gnu/java/locale/LocaleInformation_ti.java,
+ 	gnu/java/locale/LocaleInformation_ti_ER.java,
+ 	gnu/java/locale/LocaleInformation_ti_ET.java,
+ 	gnu/java/locale/LocaleInformation_tr.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_tt.java,
+ 	gnu/java/locale/LocaleInformation_tt_RU.java,
+ 	gnu/java/locale/LocaleInformation_uk.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java,
+ 	gnu/java/locale/LocaleInformation_ur.java,
+ 	gnu/java/locale/LocaleInformation_uz.java,
+ 	gnu/java/locale/LocaleInformation_uz_AF.java,
+ 	gnu/java/locale/LocaleInformation_vi.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_CN_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_HK_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_MO_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_TW_Hant.java:
+ 	Regenerated with newer version of gnu.localegen.
+ 
+ 2004-12-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(drawImage): Update image observer.
+ 
+ 2004-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics2D.h: Regenerated.
+ 
+ 2004-12-26  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	Rework painting into BufferedImages
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
+ 	Construct BufferedImage with alpha only when alpha is
+ 	present in colormodel.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
+ 	Rework painting into client-side jint arrays.
+ 	* jni/gtk-peer/gtkcairopeer.h:
+ 	Likewise.
+ 
+ 2004-12-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Reformatted.
+ 
+ 2004-12-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/Makefile.am (JAVAC): Handle GCJX.
+ 	(GCJ): Removed.
+ 	(JIKES): Likewise.
+ 	(USER_JABBA): Likewise.
+ 	(USER_JAVAH): Likewise.
+ 	(FIND): Likewise.
+ 	(USER_CLASSLIB): Likewise.
+ 	* examples/Makefile.am (JCOMPILER): Handle gcjx.
+ 	(GCJ): Removed.
+ 	(JIKES): Likewise.
+ 	* acinclude.m4 (CLASSPATH_WITH_GCJX): New macro.
+ 	(CLASSPATH_CHECK_GCJX): Likewise.
+ 	(CLASSPATH_FIND_JAVAC): Use it.
+ 
+ 2004-12-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug libgcj/18014.
+ 	* java/util/Locale.java (Locale(String, String, String)):
+ 	Don't uppercase variant.
+ 
+ 2004-12-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/PasswordView.java
+ 	(drawEchoCharacter): Added javadoc.
+ 	(drawSelectedText): Likewise.
+ 	(drawUnselectedText): Likewise.
+ 
+ 2004-12-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JRootPane.java
+ 	(windowDecorationStyle): New field.
+ 	(setMenuBar): New method.
+ 	(getMenuBar): Likewise.
+ 	(getWindowDecorationStyle): Likewise.
+ 	(setWindowDecorationStyle): Likewise.
+ 
+ 2004-12-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(leadAnchorNotificationEnabled): Made protected.
+ 
+ 2004-12-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/InternalFrameFocusTraversalPolicy.java: New file.
+ 
+ 2004-12-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java: Implemented.
+ 	* javax/swing/JWindow.java
+ 	(JWindow): New constructors.
+ 	(initWindow): Renamed from initFrame.
+ 	* javax/swing/UIDefaults.java
+ 	(ActiveValue): Made interface static.
+ 	(LazyValue): Likewise.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(TitlePaneLayout.TitlePaneLayout): New constructor.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(ChangeHandler): Made public.
+ 	(FocusHandler): Likewise.
+ 	(PropertyChangeHandler): Likewise.
+ 	(ScrollListener): Likewise.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(FocusHandler): Likewise.
+ 	(MouseHandler): Likewise.
+ 	* javax/swing/plaf/basic/BasicTextPaneUI.java
+ 	(BasicTextPaneUI): Extend BasicEditorPaneUI.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(BasicToolBarUI): Simplified. Reworked javadoc.
+ 	(canDock): Simplified. Make public.
+ 	(DockingListener): Made public.
+ 	* javax/swing/text/JTextComponent.java
+ 	(navigationFilter): New field.
+ 	(getNavigationFilter): New method.
+ 	(setNavigationFilter): Likewise.
+ 
+ 2004-12-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/xml/*: Imported from GNU JAXP.
+ 	* javax/xml/*: Likewise.
+ 	* external/*: Imported external sax and w3c_dom projects.
+ 	* LICENSE: Add new copyright and distribution notices.
+ 	* Makefile.am (SUBDirs): Add external.
+ 	(DIST_SUBDIRS): Likewise.
+ 	* configure.ac (AC_CONFIG_FILES): Add external/Makefile,
+ 	external/sax/Makefile and external/w3c_dom/Makefile.
+ 	* lib/gen-classlist.sh.in (FIND): Search in external/sax and
+ 	external/w3c_dom. 
+ 	(Split): Add new classes.xml for gcj.
+ 	* lib/Makefile.am (compile_classpath): Add external/sax and
+ 	external/w3c_dom.
+ 	(FOUND_GCJ): Compile classes.xml.
+ 	* lib/.cvsignore: Add classes.xml.
+ 	* .classpath: Updated exclusion filter and add external projects plus
+ 	examples.
+ 
+ 2004-12-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/Makefile.am (compile_classpath): New variable.
+ 	Use when compiling with either jikes or gcj.
+ 	(LocaleData.java): New rules.
+ 	(genclasses): Depend on new rule.
+ 	(CLEANFILES): Add LocaleData.java, classes.locale1 and classes.locale2.
+ 	(dist-hook): Remove generated LocaleData.java file.
+ 	* lib/gen-classlist.sh.in: Add extra split files for locales.
+ 	* lib/.cvsignore: Add classes.locale1 and classes.locale2.
+ 
+ 2004-12-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/java_lang_Double.h: Regenerated.
+ 
+ 2004-12-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/metal/MetalTheme.java
+ 	(getControlTextColor): Return getControlInfo().
+ 	(getHighlightedTextColor): Return getControlTextColor().
+ 
+ 2004-12-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonListener.java
+ 	(BasicButtonListener): New constructor.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(createButtonListener): Usw new BasicButtonListener constructor.
+ 
+ 2004-12-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/MemoryImageSource.java: Reformatted.
+ 
+ 2004-12-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/tree/TreeCellEditor.java: Refomatted.
+ 
+ 2004-12-22  Michael Koch  <konqueror@gmx.de>
+ 	    Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JTable.java
+ 	(editorComp): New field.
+ 	(JTable): Initialize local variables and call updateUI
+ 	(selectionBackground): Make protected.
+ 	(selectionForeground): Likewise.
+ 	(initializeLocalVars): Create default editors and renderers,
+ 	initialize editingColumn, editingRow variables.
+ 	(createDefaultEditors): New Method.
+ 	(createDefaultRenderers): Likewise.
+ 	(createDefaultListSelectionModel): Removed
+ 	(createDefaultSelectionModel): New Method.
+ 	(createDefaultTableHeader): Likewise
+ 	(removeColumn): Likewise.
+ 	(getEditingColumn): Likewise.
+ 	(setEditingColumn): Likewise.
+ 	(getEditingRow): Likewise.
+ 	(setEditingRow): Likewise.
+ 	(getEditorComponent): Likewise.
+ 	(isEditing): Likewise.
+ 	(setDefaultEditor): Likewise.
+ 	(addColumnSelectionInterval): Likewise.
+ 	(addRowSelectionInterval): Likewise.
+ 	(setColumnSelectionInterval): Likewise.
+ 	(setRowSelectionInterval): Likewise.
+ 	(removeColumnSelectionInterval): Likewise.
+ 	(removeRowSelectionInterval): Likewise.
+ 	(isColumnSelected): Likewise.
+ 	(isRowSelected): Likewise.
+ 	(isCellSelected): Likewise.
+ 	(selectAll): Likewise.
+ 
+ 2004-12-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFileChooser.java
+ 	(showDialog): Return CANCEL_OPTION for now.
+ 	(showOpenDialog): Likewise.
+ 	(showSaveDialog): Likewise.
+ 
+ 2004-12-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextField.java (getPreferredSize):
+ 	Re-implemented.
+ 
+ 2004-12-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicEditorPaneUI.java: New file.
+ 
+ 2004-12-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/metal/MetalTheme.java,
+ 	javax/swing/plaf/metal/DefaultMetalTheme.java:
+ 	New files.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java:
+ 	Implemented all color resource getter methods.
+ 
+ 2004-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JLabel.java (setDisplayedMnemoic):
+ 	Make text upper case before searching mnemonic character.
+ 
+ 2004-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JLabel.java
+ 	(setDisplayedMnemonicIndex): Handle index == -1 and fire
+ 	PropertyChangeEvent after property got set to the new index.
+ 	(setDisplayedMnemonic): Use only upper case characters.
+ 
+ 2004-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* lib/.cvsignore,  scripts/.cvsignore:
+ 	Added more files to ignore.
+ 
+ 2004-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFrame.java
+ 	(setDefaultLookAndFeelDecorated): Removed wrong code again.
+ 	* javax/swing/JInternalFrame.java
+ 	(setDefaultCloseOperation): Fixed typo.
+ 
+ 2004-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JApplet.java
+ 	(HIDE_ON_CLOSE): Removed.
+ 	(EXIT_ON_CLOSE): Likewise.
+ 	(DISPOSE_ON_CLOSE): Likewise.
+ 	(DO_NOTHING_ON_CLOSE): Likewise.
+ 	(close_action): Likewise.
+ 	(getDefaultCloseOperation): Likewise.
+ 	(setDefaultCloseOperation): Likewise.
+ 	(processWindowEvent): Likewise.
+ 	(getPreferredSize): Simplified.
+ 	* javax/swing/JDialog.java
+ 	(setDefaultLookAndFeelDecorated): Throw exception on wrong argument
+ 	value.
+ 	* javax/swing/JFrame.java
+ 	(setDefaultLookAndFeelDecorated): Likewise.
+ 	* javax/swing/JInternalFrame.java
+ 	(setDefaultCloseOperation): Fixed throwing exception on wrong argument
+ 	value.
+ 	* javax/swing/JWindow.java
+ 	(HIDE_ON_CLOSE): Removed.
+ 	(EXIT_ON_CLOSE): Likewise.
+ 	(DISPOSE_ON_CLOSE): Likewise.
+ 	(DO_NOTHING_ON_CLOSE): Likewise.
+ 	(close_action): Likewise.
+ 	(processKeyEvent): Likewise.
+ 	(setDefaultCloseOperation): Likewise.
+ 	(getPreferredSize): Simplified.
+ 
+ 2004-12-21  Chris Burdess  <dog@gnu.org>
+ 
+ 	* configure.ac: Check for presence of crt_externs.h on Darwin.
+ 	* native/jni/java-lang/java_lang_VMProcess.c: If HAVE_CRT_EXTERNS_H
+ 	is defined, define environ as calling _NSGetEnviron(), otherwise
+ 	define it as an external variable.
+ 
+ 2004-12-21  Chris Burdess  <dog@gnu.org>
+ 
+ 	* acinclude.m4: Check version of Jikes.
+ 
+ 2004-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/DefaultStyledDocument.java:
+ 	New file.
+ 
+ 2004-12-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* lib/Makefile.am: Generate java/util/LocaleData.java in build tree.
+ 	* lib/gen-classlist.sh.in: Include classes in java.* packages in build
+ 	tree.
+ 	* scripts/Makefile.am: Include generate-locale-list.sh in dist
+ 	tarball.
+ 
+ 2004-12-19  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	* javax/swing/JComboBox.java:
+ 	(JComboBox): Removed selection of the
+ 	first item in the model.
+ 
+ 2004-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* resource/Makfile.am: Don't call make for subdirs.
+ 	* resource/gnu/.cvsignore,
+ 	resource/gnu/java/.cvsignore,
+ 	resource/gnu/java/awt/.cvsignore,
+ 	resource/gnu/java/awt/peer/.cvsignore,
+ 	resource/gnu/java/awt/peer/gtk/.cvsignore,
+ 	resource/gnu/regexp/.cvsignore,
+ 	resource/java/.cvsignore,
+ 	resource/java/security/.cvsignore,
+ 	resource/java/util/.cvsignore,
+ 	resource/java/util/logging/.cvsignore,
+ 	resource/org/.cvsignore,
+ 	resource/org/ietf/.cvsignore,
+ 	resource/org/ietf/jgss/.cvsignore: Removed.
+ 
+ 2004-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/iso3166-a3.properties,
+ 	gnu/java/locale/iso3166_de.properties,
+ 	gnu/java/locale/iso3166.properties,
+ 	gnu/java/locale/iso639-a2-old.properties,
+ 	gnu/java/locale/iso639-a3.properties,
+ 	gnu/java/locale/iso639_de.properties,
+ 	gnu/java/locale/iso639_fr.properties,
+ 	gnu/java/locale/iso639_ga.properties,
+ 	gnu/java/locale/iso639.properties: Removed.
+ 	* lib/Makefile.am: Install resource files into dist tarball
+ 	* resource/java/util/iso4217.properties:
+ 	New file.
+ 
+ 2004-12-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Currency.java
+ 	New implementation of this class so as to
+ 	use iso4271.properties.
+ 
+ 2004-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Locale.java: Make sure all locales get only created once.
+ 	(availableLocales): New static field.
+ 	(localeMap): Likewise.
+ 	(getLocale): New private static method.
+ 	(getAvailableLocales): Re-implemented.
+ 	(getISOCountries): Fixed typo in javadoc.
+ 	(getDisplayLanguage): Load iso639.properties from correct package.
+ 	(getDisplayCountry): Load iso3166.properties from correct package.
+ 	* scripts/generate-locale-list.sh: New script.
+ 	* lib/Makefile.am: Call scripts/generate-locale-list.sh to generate
+ 	java/util/LocaleData.java.
+ 
+ 2004-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_aa.java,
+ 	gnu/java/locale/LocaleInformation_aa_DJ.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER.java,
+ 	gnu/java/locale/LocaleInformation_aa_ER_SAAHO.java,
+ 	gnu/java/locale/LocaleInformation_aa_ET.java,
+ 	gnu/java/locale/LocaleInformation_af.java,
+ 	gnu/java/locale/LocaleInformation_am.java,
+ 	gnu/java/locale/LocaleInformation_am_ET.java,
+ 	gnu/java/locale/LocaleInformation_ar.java,
+ 	gnu/java/locale/LocaleInformation_ar_SA.java,
+ 	gnu/java/locale/LocaleInformation_as.java,
+ 	gnu/java/locale/LocaleInformation_as_IN.java,
+ 	gnu/java/locale/LocaleInformation_az.java,
+ 	gnu/java/locale/LocaleInformation_be.java,
+ 	gnu/java/locale/LocaleInformation_bg.java,
+ 	gnu/java/locale/LocaleInformation_bg_BG.java,
+ 	gnu/java/locale/LocaleInformation_bn.java,
+ 	gnu/java/locale/LocaleInformation_ca.java,
+ 	gnu/java/locale/LocaleInformation_cs.java,
+ 	gnu/java/locale/LocaleInformation_cy.java,
+ 	gnu/java/locale/LocaleInformation_da.java,
+ 	gnu/java/locale/LocaleInformation_de_LI.java,
+ 	gnu/java/locale/LocaleInformation_dv.java,
+ 	gnu/java/locale/LocaleInformation_dv_MV.java,
+ 	gnu/java/locale/LocaleInformation_dz.java,
+ 	gnu/java/locale/LocaleInformation_dz_BT.java,
+ 	gnu/java/locale/LocaleInformation_en_AS.java,
+ 	gnu/java/locale/LocaleInformation_en_BE.java,
+ 	gnu/java/locale/LocaleInformation_en_BZ.java,
+ 	gnu/java/locale/LocaleInformation_en_GU.java,
+ 	gnu/java/locale/LocaleInformation_en_MH.java,
+ 	gnu/java/locale/LocaleInformation_en_MP.java,
+ 	gnu/java/locale/LocaleInformation_en_MT.java,
+ 	gnu/java/locale/LocaleInformation_en_PK.java,
+ 	gnu/java/locale/LocaleInformation_en_UM.java,
+ 	gnu/java/locale/LocaleInformation_en_US_POSIX.java,
+ 	gnu/java/locale/LocaleInformation_en_VI.java,
+ 	gnu/java/locale/LocaleInformation_eo.java,
+ 	gnu/java/locale/LocaleInformation_es.java,
+ 	gnu/java/locale/LocaleInformation_et.java,
+ 	gnu/java/locale/LocaleInformation_eu.java,
+ 	gnu/java/locale/LocaleInformation_fa.java,
+ 	gnu/java/locale/LocaleInformation_fa_AF.java,
+ 	gnu/java/locale/LocaleInformation_fo.java,
+ 	gnu/java/locale/LocaleInformation_ga.java,
+ 	gnu/java/locale/LocaleInformation_gl.java,
+ 	gnu/java/locale/LocaleInformation_gu.java,
+ 	gnu/java/locale/LocaleInformation_gu_IN.java,
+ 	gnu/java/locale/LocaleInformation_gv.java,
+ 	gnu/java/locale/LocaleInformation_he.java,
+ 	gnu/java/locale/LocaleInformation_hi.java,
+ 	gnu/java/locale/LocaleInformation_hr.java,
+ 	gnu/java/locale/LocaleInformation_hu.java,
+ 	gnu/java/locale/LocaleInformation_hy.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM.java,
+ 	gnu/java/locale/LocaleInformation_hy_AM_REVISED.java,
+ 	gnu/java/locale/LocaleInformation_id.java,
+ 	gnu/java/locale/LocaleInformation_is.java,
+ 	gnu/java/locale/LocaleInformation_is_IS.java,
+ 	gnu/java/locale/LocaleInformation_it.java,
+ 	gnu/java/locale/LocaleInformation_iu.java,
+ 	gnu/java/locale/LocaleInformation_ja.java,
+ 	gnu/java/locale/LocaleInformation_ka.java,
+ 	gnu/java/locale/LocaleInformation_kk.java,
+ 	gnu/java/locale/LocaleInformation_kk_KZ.java,
+ 	gnu/java/locale/LocaleInformation_kl.java,
+ 	gnu/java/locale/LocaleInformation_km.java,
+ 	gnu/java/locale/LocaleInformation_km_KH.java,
+ 	gnu/java/locale/LocaleInformation_kn.java,
+ 	gnu/java/locale/LocaleInformation_kn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ko.java,
+ 	gnu/java/locale/LocaleInformation_kw.java,
+ 	gnu/java/locale/LocaleInformation_ky.java,
+ 	gnu/java/locale/LocaleInformation_lo.java,
+ 	gnu/java/locale/LocaleInformation_lo_LA.java,
+ 	gnu/java/locale/LocaleInformation_lt.java,
+ 	gnu/java/locale/LocaleInformation_lv.java,
+ 	gnu/java/locale/LocaleInformation_mk.java,
+ 	gnu/java/locale/LocaleInformation_ml.java,
+ 	gnu/java/locale/LocaleInformation_ml_IN.java,
+ 	gnu/java/locale/LocaleInformation_mn.java,
+ 	gnu/java/locale/LocaleInformation_mr.java,
+ 	gnu/java/locale/LocaleInformation_ms.java,
+ 	gnu/java/locale/LocaleInformation_ms_BN.java,
+ 	gnu/java/locale/LocaleInformation_ms_MY.java,
+ 	gnu/java/locale/LocaleInformation_mt.java,
+ 	gnu/java/locale/LocaleInformation_nb.java,
+ 	gnu/java/locale/LocaleInformation_nb_NO.java,
+ 	gnu/java/locale/LocaleInformation_nn.java,
+ 	gnu/java/locale/LocaleInformation_om.java,
+ 	gnu/java/locale/LocaleInformation_om_ET.java,
+ 	gnu/java/locale/LocaleInformation_om_KE.java,
+ 	gnu/java/locale/LocaleInformation_or.java,
+ 	gnu/java/locale/LocaleInformation_or_IN.java,
+ 	gnu/java/locale/LocaleInformation_pl.java,
+ 	gnu/java/locale/LocaleInformation_ps.java,
+ 	gnu/java/locale/LocaleInformation_ps_AF.java,
+ 	gnu/java/locale/LocaleInformation_pt.java,
+ 	gnu/java/locale/LocaleInformation_ro.java,
+ 	gnu/java/locale/LocaleInformation_ru.java,
+ 	gnu/java/locale/LocaleInformation_sa.java,
+ 	gnu/java/locale/LocaleInformation_sa_IN.java,
+ 	gnu/java/locale/LocaleInformation_sk.java,
+ 	gnu/java/locale/LocaleInformation_sl.java,
+ 	gnu/java/locale/LocaleInformation_so.java,
+ 	gnu/java/locale/LocaleInformation_so_DJ.java,
+ 	gnu/java/locale/LocaleInformation_so_ET.java,
+ 	gnu/java/locale/LocaleInformation_so_KE.java,
+ 	gnu/java/locale/LocaleInformation_so_SO.java,
+ 	gnu/java/locale/LocaleInformation_sq.java,
+ 	gnu/java/locale/LocaleInformation_sr.java,
+ 	gnu/java/locale/LocaleInformation_sr_Latn.java,
+ 	gnu/java/locale/LocaleInformation_sw.java,
+ 	gnu/java/locale/LocaleInformation_sw_KE.java,
+ 	gnu/java/locale/LocaleInformation_sw_TZ.java,
+ 	gnu/java/locale/LocaleInformation_ta.java,
+ 	gnu/java/locale/LocaleInformation_te.java,
+ 	gnu/java/locale/LocaleInformation_th.java,
+ 	gnu/java/locale/LocaleInformation_th_TH.java,
+ 	gnu/java/locale/LocaleInformation_ti.java,
+ 	gnu/java/locale/LocaleInformation_ti_ER.java,
+ 	gnu/java/locale/LocaleInformation_ti_ET.java,
+ 	gnu/java/locale/LocaleInformation_tt.java,
+ 	gnu/java/locale/LocaleInformation_tt_RU.java,
+ 	gnu/java/locale/LocaleInformation_uk.java,
+ 	gnu/java/locale/LocaleInformation_ur.java,
+ 	gnu/java/locale/LocaleInformation_uz.java,
+ 	gnu/java/locale/LocaleInformation_uz_AF.java,
+ 	gnu/java/locale/LocaleInformation_vi.java,
+ 	gnu/java/locale/LocaleInformation_zh.java,
+ 	gnu/java/locale/LocaleInformation_zh_CN_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_HK_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_MO_Hant.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG_Hans.java,
+ 	gnu/java/locale/LocaleInformation_zh_TW_Hant.java:
+ 	New locale files.
+ 	* gnu/java/locale/LocaleInformation_ar_AE.java,
+ 	gnu/java/locale/LocaleInformation_ar_BH.java,
+ 	gnu/java/locale/LocaleInformation_ar_EG.java,
+ 	gnu/java/locale/LocaleInformation_ar_OM.java,
+ 	gnu/java/locale/LocaleInformation_ar_SD.java,
+ 	gnu/java/locale/LocaleInformation_fr_FR.java,
+ 	gnu/java/locale/LocaleInformation_hr_HR.java,
+ 	gnu/java/locale/LocaleInformation_ka_GE.java,
+ 	gnu/java/locale/LocaleInformation_mk_MK.java,
+ 	gnu/java/locale/LocaleInformation_sl_SI.java,
+ 	gnu/java/locale/LocaleInformation_sr_YU.java,
+ 	gnu/java/locale/LocaleInformation_ur_PK.java,
+ 	gnu/java/locale/LocaleInformation_uz_UZ.java,
+ 	gnu/java/locale/LocaleInformation_vi_VN.java,
+ 	gnu/java/locale/LocaleInformation_zh_CN.java,
+ 	gnu/java/locale/LocaleInformation_zh_HK.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG.java,
+ 	gnu/java/locale/LocaleInformation_zh_TW.java:
+ 	Removed.
+ 
+ 2004-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation.java (LocaleInformation):
+ 	Don't inherit LocaleInformation_en and put all default values into
+ 	this class.
+ 	* gnu/java/locale/LocaleInformation_af_ZA.java
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java:
+ 	Removed all redundant stuff.
+ 
+ 2004-12-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_af_ZA.java,
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java,
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_el.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_pa.java,
+ 	gnu/java/locale/LocaleInformation_pa_IN.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_tr.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java:
+ 	Updated to latest gnu.localegen and locale date.
+ 
+ 2004-12-18  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	* javax/swing/JComboBox.java
+ 	added support for no item being selected
+ 	(JComboBox): select first or nothing depending on element
+ 	count
+ 	(setModel): cleaned up unneeded "this." usage, added more
+ 	docs, made exception behavior match that of the JDK
+ 	(setLighWeightPopupEnabled): removed unneeded "this." usage
+ 	(setEditable): dito
+ 	(setMaximumRowCount): dito
+ 	(setRenderer): dito
+ 	(setPrototypeDisplayValue): dito
+ 	(getSelectedItem): simplified, added more user doc
+ 	(setSelectedIndex): corrected exception behavior, added more user
+ 	doc
+ 	(getSelectedIndex): fixed hardcoded dependency on DefaultComboBoxModel
+ 	 (see bug #11255), added performance warning to user doc
+ 	(addItem): fixed exception behavior, added user doc
+ 	(insertItemAt): dito
+ 	(removeItem): dito
+ 	(removeItemAt): dito
+ 	(removeAll): fixed exception behavior, added user doc, added support
+ 	for model not being instance of DefaultComboBoxModel (see bug #11255)
+ 	(getSelectedItemObjects): simplified
+ 	(getItemCount): fixed dependency on DefaultComboBoxModel (see bug #11255)
+ 	(getItemAt): fixed dependency on MutableComboBoxModel (see bug #11255)
+ 	* javax/swing/DefaultComboBoxModel.java:
+ 	(setSelectedItem): updates selected item only if new 
+ 	value is null or known (match JDK behavior)
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java:
+ 	(paintCurrentValue): renders "" if no item is selected
+ 
+ 2004-12-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_FR.java,
+ 	gnu/java/locale/LocaleInformation_oc_FR.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java:
+ 	Updated.
+ 	* gnu/java/locale/LocaleInformation_el.java,
+ 	gnu/java/locale/LocaleInformation_fi.java,
+ 	gnu/java/locale/LocaleInformation_fr.java,
+ 	gnu/java/locale/LocaleInformation_sv.java,
+ 	gnu/java/locale/LocaleInformation_tr.java:
+ 	New files.
+ 
+ 2004-12-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* INSTALL: We need jikes 1.19 or higher now.
+ 	* lib/Makefile.am: Add +Pno-shadow to JIKES compilation.
+ 
+ 2004-12-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* scripts/.cvsignore: New file.
+ 
+ 2004-12-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_gd_GB.java:
+ 	Updated.
+ 	gnu/java/locale/LocaleInformation_mi_NZ.java
+ 	gnu/java/locale/LocaleInformation_tl_PH.java
+ 	gnu/java/locale/LocaleInformation_yi_US.java:
+ 	Removed.
+ 
+ 2004-12-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_af_ZA.java,
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java,
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java:
+ 	Updated.
+ 
+ 2004-12-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_af_ZA.java,
+ 	gnu/java/locale/LocaleInformation_ar_AE.java,
+ 	gnu/java/locale/LocaleInformation_ar_BH.java,
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java,
+ 	gnu/java/locale/LocaleInformation_ar_EG.java,
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_OM.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SD.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_br_FR.java,
+ 	gnu/java/locale/LocaleInformation_bs_BA.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_DK.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr_FR.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gd_GB.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hr_HR.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_iw_IL.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation_ka_GE.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mi_NZ.java,
+ 	gnu/java/locale/LocaleInformation_mk_MK.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_no_NO.java,
+ 	gnu/java/locale/LocaleInformation_oc_FR.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_se_NO.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sl_SI.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sr_YU.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_tg_TJ.java,
+ 	gnu/java/locale/LocaleInformation_tl_PH.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java,
+ 	gnu/java/locale/LocaleInformation_ur_PK.java,
+ 	gnu/java/locale/LocaleInformation_uz_UZ.java,
+ 	gnu/java/locale/LocaleInformation_vi_VN.java,
+ 	gnu/java/locale/LocaleInformation_yi_US.java,
+ 	gnu/java/locale/LocaleInformation_zh_CN.java,
+ 	gnu/java/locale/LocaleInformation_zh_HK.java,
+ 	gnu/java/locale/LocaleInformation_zh_SG.java,
+ 	gnu/java/locale/LocaleInformation_zh_TW.java:
+ 	Updated.
+ 
+ 2004-12-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java:
+ 	Updated.
+ 
+ 2004-12-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_nl.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java:
+ 	Updated.
+ 
+ 2004-12-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java
+ 	(addColumn): New method.
+ 	(getColumnClass): Likewise.
+ 	(getColumnName): Likewise.
+ 
+ 2004-12-17  Paul Jenner  <psj.home@ntlworld.com>
+ 
+ 	* javax/swing/TransferHandler.java
+ 	(createTransferable): Made protected.
+ 
+ 2004-12-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java,
+ 	javax/swing/plaf/basic/BasicTableHeaderUI.java,
+ 	javax/swing/plaf/basic/BasicTableUI.java:
+ 	Use fixed get/setIntercellSpacing() methods.
+ 
+ 2004-12-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java
+ 	(getIntercellSpacing): Fixed typo in method name.
+ 	(setIntercellSpacing): Likewise.
+ 
+ 2004-12-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(focusAccelerator): New variable.
+ 	(getFocusAccelerator): New method.
+ 	(setFocusAccelerator): Likewise.
+ 
+ 2004-12-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(setTransferHandler): Made public. Fire property change event.
+ 	* javax/swing/TransferHandler.java: Implemented.
+ 	* javax/swing/text/JTextComponent.java
+ 	(DefaultTransferHandler): New inner class.
+ 	(defaultTransferHandler): New variable.
+ 	(copy): New method.
+ 	(cut): Likewise.
+ 	(paste): Likewise.
+ 	(doTransferAction): Likewise.
+ 
+ 2004-12-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/NumberFormat.java (getIntegerInstance):
+ 	Make sure that doubles get formatted as integers.
+ 
+ 2004-12-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTree.java
+ 	(collapsePath): New method.
+ 	(collapseRow): Likewise.
+ 	(expandPath): Likewise.
+ 	(expandRow): Likewise.
+ 	(checkExpandParents): Likewise.
+ 	(doExpandParents): Likewise.
+ 	(setExpandedState): Likewise.
+ 	(makeVisible): Likewise.
+ 
+ 2004-12-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JPasswordField.java: Updated javadocs.
+ 
+ 2004-12-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h:
+ 	Regenerated.
+ 
+ 2004-12-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	(getLayer): Fixed return type, made public.
+ 	(getPosition): Use new getLayer().
+ 	(SetPosition): Likewise.
+ 	(getIndexOf): Likewise.
+ 	(remove): Likewise.
+ 	* javax/swing/JInternalFrame.java
+ 	(getLayer): Use new JLayeredPane.getLayer().
+ 
+ 
+ 2004-12-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/TableColumn.java: Added/fixed javadocs over all.
+ 	(setHeaderValue): Simplified. Do nothing when old value == new value.
+ 
+ 2004-12-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java:
+ 	Reworked import statements.
+ 
+ 2004-12-12  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/zip/ZipFile.java
+ 	(getEntry): Fix to find dir entries without slash.
+ 	* java/util/zip/ZipEntry.java
+ 	(ZipEntry(ZipEntry,String)): New constructor to copy and change name.
+ 	(ZipEntry(ZipEntry)): Delegate to new constructor.
+ 
+ 2004-12-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (setClip): Protect
+ 	against null clip region.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (create): Call
+ 	gtkWindowSetResizable.
+ 	(postConfigureEvent): Only revalidate if frame size has changed.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java (postConfigureEvent):
+ 	Only revalidate if frame size has changed.
+ 	* java/awt/Component.java (reshape): Only repaint and post
+ 	component events if component is showing.
+ 	* java/awt/Container.java (addImpl): Only post container event if
+ 	container is showing.
+ 	(remove): Likewise.
+ 	* java/awt/Window.java (setLocationRelativeTo): Implement.
+ 	(setBoundsCallback): Only post component events if component is
+ 	showing.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (clearRect):
+ 	Protect against null graphics structure.  Flush gdk event queue.
+ 
+ 2004-12-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Clarify VMRuntime and String/StringBuffer VMSystem usage.
+ 
+ 	* vm/reference/gnu/classpath/VMSystemProperties.java (postInit):
+ 	Provide empty default implementation.
+ 
+ 	* java/lang/String.java: Replace all usage of System.arraycopy() with
+ 	VMSystem.arraycopy().
+ 	* java/lang/StringBuffer.java: Likewise.
+ 
+ 2004-12-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* LICENSE: Add text about org.ietf.jgss documentation.
+ 	* org/ietf/jgss/ChannelBinding.java: Merge top two comment blocks.
+ 	* org/ietf/jgss/GSSCredential.java: Likewise.
+ 	* org/ietf/jgss/GSSException.java: Likewise.
+ 	* org/ietf/jgss/GSSManager.java: Likewise.
+ 	* org/ietf/jgss/GSSName.java: Likewise.
+ 	* org/ietf/jgss/MessageProp.java: Likewise.
+ 	* org/ietf/jgss/Oid.java: Likewise.
+ 
+ 2004-12-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/FileDescriptor.java (sync): Add real exception to
+ 	SyncFailedException.
+ 
+ 2004-12-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/text/MessageFormat.java (scanFormat): Chain thrown exception.
+ 
+ 2004-12-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/ZipEntry.java (KNOWN_EXTRA): New static field.
+ 	(setExtra): Don't parse bytes.
+ 	(parseExtra): New private method.
+ 	(getTime): Call parseExtra.
+ 
+ 2004-12-07  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java: Added support
+ 	for http.agent, http.keepAlive, and http.maxConnections system
+ 	properties (and LRU connection pool).
+ 
+ 2004-12-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_pa.java,
+ 	gnu/java/locale/LocaleInformation_pa_IN.java:
+ 	New locale files.
+ 
+ 2004-12-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/stream/FileImageOutputStream.java:
+ 	Implemented.
+ 
+ 2004-12-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/Timer.java
+ 	(run): Stop the queue if a task throws an exception.
+ 
+ 2004-12-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/beans/PropertyDescriptor.java
+ 	(PropertyDescriptor,setReadMethod): Set propertyType.
+ 
+ 2004-12-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/stream/FileCacheImageInputStream.java,
+ 	javax/imageio/stream/FileCacheImageOutputStream.java,
+ 	javax/imageio/stream/FileImageInputStream.java,
+ 	javax/imageio/stream/ImageInputStreamImpl.java,
+ 	javax/imageio/stream/ImageOutputStreamImpl.java,
+ 	javax/imageio/stream/MemoryCacheImageInputStream.java,
+ 	javax/imageio/stream/MemoryCacheImageOutputStream.java:
+ 	Added all missing methods in javax.imageio.stream.
+ 
+ 2004-12-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/BufferedInputStream.java
+ 	(skip): Don't return -1 on EOF.
+ 
+ 2004-12-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/LineInputStream.java: (read) fixed possible infinite
+ 	loop (inetlib bug #11200).
+ 
+ 2004-12-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java:
+ 	(getHeaderField) return null if there are less than (index+1) fields.
+ 
+ 2004-12-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readObject): Fix to consume TC_ENDBLOCKDATA after readExternal.
+ 
+ 2004-12-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* vm/reference/gnu/classpath/VMSystemProperties.java:
+ 	Added import to make it compile.
+ 
+ 2004-12-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* include/java_lang_VMSystem.h:
+ 	Removed isWordsBigEndian.
+ 
+ 2004-12-06  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* NEWS: Updated.
+ 
+ 2004-12-06  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/classpath/SystemProperties.java: New file.
+ 	* vm/reference/gnu/classpath/VMSystemProperties.java: New file.
+ 	* gnu/java/io/EncodingManager.java,
+ 	gnu/java/net/protocol/file/Connection.java,
+ 	java/io/File.java,
+ 	java/lang/Throwable.java,
+ 	java/security/Security.java,
+ 	java/security/cert/X509CRLSelector.java,
+ 	java/security/cert/X509CertSelector.java,
+ 	java/util/Locale.java,
+ 	vm/reference/java/lang/VMClassLoader.java:
+ 	Modified to use SystemProperties.
+ 	* java/lang/Class.java: Modified to use SecurityManager.current.
+ 	* java/lang/ClassLoader.java
+ 	(StaticData.systemClassLoader): New field.
+ 	(StaticData.static): New static initializer to install default
+ 	security manager.
+ 	(ClassLoader()): Modified to use StaticData.systemClassLoader.
+ 	ClassLoader(ClassLoader)): Modified to use SecurityManager.current.
+ 	(findSystemClass): Modified to use StaticData.systemClassLoader.
+ 	(getParent): Modified to use SecurityManager.current.
+ 	(getSystemResource,getSystemResources): Modified to use
+ 	StaticData.systemClassLoader.
+ 	(getSystemClassLoader): Modified to use SecurityManager.current and
+ 	StaticData.systemClassLoader.
+ 	(getExtClassLoaderUrls,getSystemClassLoaderUrls): Modified to use
+ 	SystemProperties.
+ 	(defaultGetSystemClassLoader): Modified to use SecurityManager.current
+ 	and SystemProperties.
+ 	(getSystemProperty): Removed.
+ 	* java/lang/Runtime.java
+ 	(securityManager): Removed.
+ 	(defaultProperties): Removed.
+ 	(static): Removed.
+ 	(Runtime): Modified to use SystemProperties.
+ 	(exit,removeShutdownHook,halt,runFinalizersOnExit,exec,load,loadLib):
+ 	Modified to use SecurityManager.current.
+ 	(loadLibrary): Modified to use SecurityManager.current and changed
+ 	call to System.mapLibraryName to VMRuntime.mapLibraryName.
+ 	* java/lang/SecurityManager.java
+ 	(current): New field.
+ 	* java/lang/System.java
+ 	(systemClassLoader): Removed.
+ 	(properties): Removed.
+ 	(in,out,err): Initialize in-line.
+ 	(static): Removed.
+ 	(initLoadLibrary): Removed.
+ 	(initProperties): Removed.
+ 	(initSystemClassLoader): Removed.
+ 	(initSecurityManager): Removed.
+ 	(setIn,setOut,setErr,setSecurityManager,getSecurityManager,getenv):
+ 	Modified to use SecurityManager.current.
+ 	(getProperties,setProperties,getProperty(String),
+ 	getProperty(String,String),setProperty): Modified to use
+ 	SecurityManager.current and SystemProperties.
+ 	(mapLibraryName): Modified to call VMRuntime.mapLibraryName.
+ 	* java/lang/Thread.java: Modified to use SecurityManager.current.
+ 	* java/lang/ThreadGroup.java: Modified to use SecurityManager.current.
+ 	* native/jni/java-lang/java_lang_VMSystem.c
+ 	(Java_java_lang_VMSystem_isWordsBigEndian): Removed.
+ 	* vm/reference/java/lang/VMRuntime.java
+ 	(nativeGetLibname): Removed (renamed to mapLibraryName).
+ 	(mapLibraryName): New method.
+ 	(insertSystemProperties): Removed.
+ 	* vm/reference/java/lang/VMSystem.java
+ 	(isWordsBigEndian): Removed.
+ 
+ 2004-12-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/java_io_ObjectInputStream.h: Regenerated.
+ 
+ 2004-12-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultListCellRenderer.java
+ 	(serialVersionUID): Made private.
+ 	(getListCellRendererComponent): Set horizontal alignment.
+ 	* javax/swing/JLabel.java
+ 	(setVerticalAlignment): Re-implemented.
+ 	(setHorizontalAlignment): Do nothing if old value = new value.
+ 	* javax/swing/JList.java
+ 	(setCellRenderer): Likewise.
+ 	(setModel): Re-implemented.
+ 	(setSelectionModel): Likewise.
+ 
+ 2004-12-06  David Gilbert <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/Component.java,
+ 	java/awt/geom/Rectangle2D.java:
+ 	Javadoc fixes.
+ 
+ 2004-12-06  Guilhem Lavaux  <guilhem@kaffe.org>
+ 	Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(newObject): Changed prototype. Get a constructor reflect object
+ 	directly.
+ 	(callConstructor): Removed.
+ 	(allocateObject): Changed prototype.
+ 	(readClassDescriptor): Build the constructor reflection directly.
+ 	(readObject): Invoke newObject using the new prototype.
+ 
+ 	* java/io/ObjectStreamClass.java
+ 	(firstNonSerializableParent): Removed.
+ 	(firstNonSerializableParentConstructor): Added.
+ 	
+ 	* include/java_io_ObjectInputStream.h: Regenerated.
+ 
+ 	* native/jni/java-io/java_io_ObjectInputStream.c
+ 	(allocateObject): Allocate an object and call the requested
+ 	constructor.
+ 	(callConstructor): Removed.
+ 	
+ 2004-12-06  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/BufferedInputStream.java
+ 	(read(byte,int,int)): Handle case when zero bytes are requested.
+ 
+ 2004-12-06  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/color/ICC_Profile.java
+ 	(finalize): Removed pointless field assignments.
+ 
+ 2004-12-05  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPConnection.java,
+ 	gnu/java/net/protocol/http/HTTPURLConnection.java:
+ 	HTTPURLConnection now derives from HttpsURLConnection.
+ 
+ 2004-12-01  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPConnection.java:
+ 	HTTPConnection's default User-Agent header set to "classpath/" plus
+ 	the version of Classpath in use.
+ 
+ 2004-12-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/ftp/package.html,
+ 	gnu/java/net/protocol/http/package.html:
+ 	Add missing files.
+ 
+ 2004-12-02  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/EventDispatchThread.java,
+ 	java/awt/Toolkit.java,
+ 	java/io/ObjectStreamClass.java,
+ 	java/lang/reflect/Proxy.java,
+ 	java/net/URL.java,
+ 	java/security/SecureRandom.java,
+ 	java/util/Timer.java,
+ 	java/util/prefs/AbstractPreferences.java,
+ 	vm/reference/java/lang/VMProcess.java:
+ 	Don't catch java.lang.ThreadDeath.
+ 
+ 2004-12-02  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(StaticData): New inner class to contain statics.
+ 	(connect, getHeaderField): Modified to use StaticData.
+ 	* java/lang/Class.java
+ 	(desiredAssertionStatus): Modified to use ClassLoader.StaticData.
+ 	* java/lang/ClassLoader.java
+ 	(StaticData): New inner class to contain statics.
+ 	(defineClass, setPackageAssertionStatus, setClassAssertionStatus):
+ 	Modified to use StaticData.
+ 
+ 2004-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractListModel.java
+ 	(fireContentsChanged): Simplified.
+ 	(fireIntervalAdded): Likewise.
+ 	(fireIntervalRemoved): Likewise.
+ 	* javax/swing/DefaultSingleSelectionModel.java:
+ 	Reformatted.
+ 	(fireStateChanged): Simplified.
+ 	* javax/swing/JPopupMenu.java
+ 	(setSelectionModel): Set property.
+ 
+ 2004-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(register): Removed redundant code.
+ 
+ 2004-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/print/Book.java: Reformatted.
+ 
+ 2004-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/geom/Area.java
+ 	(QuadSegment.curveArea): Remove unused variables.
+ 	(CubicSegment.curveArea): Likewise.
+ 
+ 2004-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_nl.java:
+ 	Removed unneeded comments.
+ 
+ 2004-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java:
+ 	Re-generated with current gnu.localegen.
+ 
+ 2004-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_af_ZA.java,
+ 	gnu/java/locale/LocaleInformation_ar_DZ.java,
+ 	gnu/java/locale/LocaleInformation_ar_IN.java,
+ 	gnu/java/locale/LocaleInformation_ar_IQ.java,
+ 	gnu/java/locale/LocaleInformation_ar_JO.java,
+ 	gnu/java/locale/LocaleInformation_ar_KW.java,
+ 	gnu/java/locale/LocaleInformation_ar_LB.java,
+ 	gnu/java/locale/LocaleInformation_ar_LY.java,
+ 	gnu/java/locale/LocaleInformation_ar_MA.java,
+ 	gnu/java/locale/LocaleInformation_ar_QA.java,
+ 	gnu/java/locale/LocaleInformation_ar_SY.java,
+ 	gnu/java/locale/LocaleInformation_ar_TN.java,
+ 	gnu/java/locale/LocaleInformation_ar_YE.java,
+ 	gnu/java/locale/LocaleInformation_be_BY.java,
+ 	gnu/java/locale/LocaleInformation_bn_IN.java,
+ 	gnu/java/locale/LocaleInformation_ca_ES.java,
+ 	gnu/java/locale/LocaleInformation_cs_CZ.java,
+ 	gnu/java/locale/LocaleInformation_cy_GB.java,
+ 	gnu/java/locale/LocaleInformation_da_DK.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_AT.java,
+ 	gnu/java/locale/LocaleInformation_de_BE.java,
+ 	gnu/java/locale/LocaleInformation_de_CH.java,
+ 	gnu/java/locale/LocaleInformation_de_DE.java,
+ 	gnu/java/locale/LocaleInformation_de_LU.java,
+ 	gnu/java/locale/LocaleInformation_el_GR.java,
+ 	gnu/java/locale/LocaleInformation_en_AU.java,
+ 	gnu/java/locale/LocaleInformation_en_BW.java,
+ 	gnu/java/locale/LocaleInformation_en_CA.java,
+ 	gnu/java/locale/LocaleInformation_en_GB.java,
+ 	gnu/java/locale/LocaleInformation_en_HK.java,
+ 	gnu/java/locale/LocaleInformation_en_IE.java,
+ 	gnu/java/locale/LocaleInformation_en_IN.java,
+ 	gnu/java/locale/LocaleInformation_en_NZ.java,
+ 	gnu/java/locale/LocaleInformation_en_PH.java,
+ 	gnu/java/locale/LocaleInformation_en_SG.java,
+ 	gnu/java/locale/LocaleInformation_en_US.java,
+ 	gnu/java/locale/LocaleInformation_en_ZA.java,
+ 	gnu/java/locale/LocaleInformation_en_ZW.java,
+ 	gnu/java/locale/LocaleInformation_es_AR.java,
+ 	gnu/java/locale/LocaleInformation_es_BO.java,
+ 	gnu/java/locale/LocaleInformation_es_CL.java,
+ 	gnu/java/locale/LocaleInformation_es_CO.java,
+ 	gnu/java/locale/LocaleInformation_es_CR.java,
+ 	gnu/java/locale/LocaleInformation_es_DO.java,
+ 	gnu/java/locale/LocaleInformation_es_EC.java,
+ 	gnu/java/locale/LocaleInformation_es_ES.java,
+ 	gnu/java/locale/LocaleInformation_es_GT.java,
+ 	gnu/java/locale/LocaleInformation_es_HN.java,
+ 	gnu/java/locale/LocaleInformation_es_MX.java,
+ 	gnu/java/locale/LocaleInformation_es_NI.java,
+ 	gnu/java/locale/LocaleInformation_es_PA.java,
+ 	gnu/java/locale/LocaleInformation_es_PE.java,
+ 	gnu/java/locale/LocaleInformation_es_PR.java,
+ 	gnu/java/locale/LocaleInformation_es_PY.java,
+ 	gnu/java/locale/LocaleInformation_es_SV.java,
+ 	gnu/java/locale/LocaleInformation_es_US.java,
+ 	gnu/java/locale/LocaleInformation_es_UY.java,
+ 	gnu/java/locale/LocaleInformation_es_VE.java,
+ 	gnu/java/locale/LocaleInformation_et_EE.java,
+ 	gnu/java/locale/LocaleInformation_eu_ES.java,
+ 	gnu/java/locale/LocaleInformation_fa_IR.java,
+ 	gnu/java/locale/LocaleInformation_fi_FI.java,
+ 	gnu/java/locale/LocaleInformation_fo_FO.java,
+ 	gnu/java/locale/LocaleInformation_fr_BE.java,
+ 	gnu/java/locale/LocaleInformation_fr_CA.java,
+ 	gnu/java/locale/LocaleInformation_fr_CH.java,
+ 	gnu/java/locale/LocaleInformation_fr_LU.java,
+ 	gnu/java/locale/LocaleInformation_ga_IE.java,
+ 	gnu/java/locale/LocaleInformation_gl_ES.java,
+ 	gnu/java/locale/LocaleInformation_gv_GB.java,
+ 	gnu/java/locale/LocaleInformation_he_IL.java,
+ 	gnu/java/locale/LocaleInformation_hi_IN.java,
+ 	gnu/java/locale/LocaleInformation_hu_HU.java,
+ 	gnu/java/locale/LocaleInformation_id_ID.java,
+ 	gnu/java/locale/LocaleInformation_it_CH.java,
+ 	gnu/java/locale/LocaleInformation_it_IT.java,
+ 	gnu/java/locale/LocaleInformation_ja_JP.java,
+ 	gnu/java/locale/LocaleInformation_kl_GL.java,
+ 	gnu/java/locale/LocaleInformation_ko_KR.java,
+ 	gnu/java/locale/LocaleInformation_kw_GB.java,
+ 	gnu/java/locale/LocaleInformation_lt_LT.java,
+ 	gnu/java/locale/LocaleInformation_lv_LV.java,
+ 	gnu/java/locale/LocaleInformation_mr_IN.java,
+ 	gnu/java/locale/LocaleInformation_mt_MT.java,
+ 	gnu/java/locale/LocaleInformation_nl_BE.java,
+ 	gnu/java/locale/LocaleInformation_nl_NL.java,
+ 	gnu/java/locale/LocaleInformation_nn_NO.java,
+ 	gnu/java/locale/LocaleInformation_pl_PL.java,
+ 	gnu/java/locale/LocaleInformation_pt_BR.java,
+ 	gnu/java/locale/LocaleInformation_pt_PT.java,
+ 	gnu/java/locale/LocaleInformation_ro_RO.java,
+ 	gnu/java/locale/LocaleInformation_ru_RU.java,
+ 	gnu/java/locale/LocaleInformation_ru_UA.java,
+ 	gnu/java/locale/LocaleInformation_sk_SK.java,
+ 	gnu/java/locale/LocaleInformation_sq_AL.java,
+ 	gnu/java/locale/LocaleInformation_sv_FI.java,
+ 	gnu/java/locale/LocaleInformation_sv_SE.java,
+ 	gnu/java/locale/LocaleInformation_ta_IN.java,
+ 	gnu/java/locale/LocaleInformation_te_IN.java,
+ 	gnu/java/locale/LocaleInformation_tr_TR.java,
+ 	gnu/java/locale/LocaleInformation_uk_UA.java:
+ 	Updated to match by gnu.localegen generated locales more.
+ 
+ 2004-12-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (drawImage variants):
+ 	Update image observer.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage):
+ 	Start image production.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Protect
+ 	against negative menu bar widths.
+ 	(setBounds): Likewise.
+ 	(postConfigureEvent): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java (imageComplete): Don't
+ 	remove consumer unless only a single frame has completed.
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java (GtkImagePainter):
+ 	Add observer parameter.
+ 	(setPixels): Update image observer.
+ 	(imageComplete): Likewise.
+ 	* java/applet/Applet.java (width): New field.
+ 	(height): Likewise.
+ 	(setStub): Set size if width or height field has been set.
+ 	(resize): If stub is null save width and height values.
+ 	* java/awt/Component.java (reshape): Protect against null
+ 	parent.
+ 	* java/awt/image/MemoryImageSource.java
+ 	(MemoryImageSource(int,int,ColorModel,byte[],int,int)):
+ 	Document.
+ 	(MemoryImageSource(int,int,ColorModel,int[],int,int)):
+ 	Likewise.
+ 	(MemoryImageSource(int,int,ColorModel,byte[],int,int,Hashtable)):
+ 	Reference pixel array directly, rather than creating a local
+ 	copy.
+ 	(MemoryImageSource(int,int,ColorModel,int[],int,int,Hashtable)):
+ 	Likewise.
+ 	(newPixels(int,int,int,int)): Fix for loop and array copy
+ 	bounds.
+ 	(newPixels(int,int,int,int,boolean)): Likewise.
+ 	(startProduction): If animated call imageComplete with
+ 	SINGLEFRAME.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Uncomment
+ 	gdk_flush lines.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
+ 	(drawPixels): Return if g is null or g->drawable is not a gdk
+ 	drawable.
+ 
+ 2004-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTree.java
+ 	(ANCHOR_SELECTION_PATH_PROPERTY): Added @since tag.
+ 	(LEAD_SELECTION_PATH_PROPERTY): Likewise.
+ 	(EXPANDS_SELECTED_PATHS_PROPERTY): Likewise.
+ 	(EXPANDED): New constant.
+ 	(COLLAPSED): Likewise.
+ 	(nodeStates): New field.
+ 	(cellEditor): New method.
+ 	(cellRenderer): Likewise.
+ 	(selectionModel): Likewise.
+ 	(treeModel): Likewise.
+ 	(scrollPathToVisible): Likewise.
+ 	(scrollRowToVisible): Likewise.
+ 	(isCollapsed): Likewise.
+ 	(isExpanded): Likewise.
+ 	(clearToggledPaths): Likewise.
+ 	(getDescendantToggledPaths): Likewise.
+ 	(hasBeenExpanded): Likewise.
+ 	(isVisible): Likewise.
+ 	(isPathEditable): Likewise.
+ 
+ 2004-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JLayeredPane.java: Reformatted.
+ 
+ 2004-12-01  Chris Burdess  <dog@gnu.org>
+ 
+ 	* gnu/java/net/protocol/http/HTTPURLConnection.java:
+ 	HTTPURLConnection now returns Lists as getHeaderFields() values.
+ 
+ 2004-12-01  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectOutputStream.java
+ 	(writeObject, callWriteMethod): Replaced reflection with accessing
+ 	cached info in ObjectStreamClass.
+ 	(getMethod): Removed.
+ 	* java/io/ObjectStreamClass.java
+ 	(findMethod): Added check to make sure the method found has the
+ 	right modifiers.
+ 	(cacheMethods): Added writeReplace and writeObject methods.
+ 	(setFlags): Look at new writeObjectMethod field instead of doing
+ 	reflection again.
+ 	(writeReplaceMethod): New field.
+ 	(writeObjectMethod): New field.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/BASE64.java,
+ 	gnu/java/net/CRLFInputStream.java,
+ 	gnu/java/net/CRLFOutputStream.java,
+ 	gnu/java/net/EmptyX509TrustManager.java,
+ 	gnu/java/net/GetLocalHostAction.java,
+ 	gnu/java/net/GetSystemPropertyAction.java,
+ 	gnu/java/net/LineInputStream.java,
+ 	gnu/java/net/protocol/http/Authenticator.java,
+ 	gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java,
+ 	gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java,
+ 	gnu/java/net/protocol/http/ChunkedInputStream.java,
+ 	gnu/java/net/protocol/http/Cookie.java,
+ 	gnu/java/net/protocol/http/CookieManager.java,
+ 	gnu/java/net/protocol/http/Credentials.java,
+ 	gnu/java/net/protocol/http/HTTPConnection.java,
+ 	gnu/java/net/protocol/http/HTTPDateFormat.java,
+ 	gnu/java/net/protocol/http/HTTPURLConnection.java,
+ 	gnu/java/net/protocol/http/Headers.java,
+ 	gnu/java/net/protocol/http/Request.java,
+ 	gnu/java/net/protocol/http/RequestBodyWriter.java,
+ 	gnu/java/net/protocol/http/Response.java,
+ 	gnu/java/net/protocol/http/ResponseBodyReader.java,
+ 	gnu/java/net/protocol/http/ResponseHeaderHandler.java,
+ 	gnu/java/net/protocol/http/SimpleCookieManager.java,
+ 	gnu/java/net/protocol/http/event/ConnectionEvent.java,
+ 	gnu/java/net/protocol/http/event/ConnectionListener.java,
+ 	gnu/java/net/protocol/http/event/RequestEvent.java,
+ 	gnu/java/net/protocol/http/event/RequestListener.java:
+ 	New files
+ 	* gnu/java/net/protocol/http/Connection.java:
+ 	gnu/java/net/protocol/http/TODO: Removed
+ 	* gnu/java/net/protocol/http/Handler.java: Updated.
+ 	Merged HTTP protocol implementation from GNU inetlib.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/ftp/ActiveModeDTP.java,
+ 	gnu/java/net/protocol/ftp/BlockInputStream.java,
+ 	gnu/java/net/protocol/ftp/BlockOutputStream.java,
+ 	gnu/java/net/protocol/ftp/CompressedInputStream.java,
+ 	gnu/java/net/protocol/ftp/CompressedOutputStream.java,
+ 	gnu/java/net/protocol/ftp/DTP.java,
+ 	gnu/java/net/protocol/ftp/DTPInputStream.java,
+ 	gnu/java/net/protocol/ftp/DTPOutputStream.java,
+ 	gnu/java/net/protocol/ftp/FTPConnection.java,
+ 	gnu/java/net/protocol/ftp/FTPException.java,
+ 	gnu/java/net/protocol/ftp/FTPResponse.java,
+ 	gnu/java/net/protocol/ftp/FTPURLConnection.java,
+ 	gnu/java/net/protocol/ftp/Handler.java,
+ 	gnu/java/net/protocol/ftp/PassiveModeDTP.java,
+ 	gnu/java/net/protocol/ftp/StreamInputStream.java,
+ 	gnu/java/net/protocol/ftp/StreamOutputStream.java:
+ 	New files. Merged from GNU inetlib.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/tree/DefaultMutableTreeNode.java:
+ 	Completely Revised.
+ 	* javax/swing/tree/MutableTreeNode.java:
+ 	Reformatted.
+ 
+ 2004-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(setDocument): Call setDocument of super class. Don't fire property
+ 	change event.
+ 
+ 2004-11-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Fix typo.
+ 
+ 2004-11-27  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	Reformatted.
+ 	(drawRaster): Added FIXME.
+ 	(drawRaster): Changed to work with packed-sample models.
+ 
+ 2004-11-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JList.java, javax/swing/JTree.java:
+ 	Added much new methods and fixed much methods setting bound properties.
+ 
+ 2004-11-26  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(drawRaster): Set alpha component to opaque if image has no alpha
+ 	
+ 2004-11-26  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/File.java
+ 	(canWrite): Moved directory write test to VMFile.
+ 	* vm/reference/java/io/VMFile.java
+ 	(canWriteDirectory): New method.
+ 
+ 2004-11-25  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/image/MultiPixelPackedSampleModel.java
+ 	(MultiPixelPackedSampleModel): Corrected parameters, order of bit 
+ 	shifts and masks, stride length off by one.		
+ 	
+ 2004-11-25  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/image/IndexColorModel.java
+ 	(IndexColorModel): Add FIXME with respect to alpha handling.
+ 	(getAlpha): Default to returning opaque pixels.
+ 
+ 2004-11-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/vmintegration.texinfo: Fix link to Japhar.
+ 	* doc/www.gnu.org/stories.wml: Likewise.
+ 	* doc/www.gnu.org/announce/19990206.wml: Likewise.
+ 	* doc/www.gnu.org/announce/20001120.wml: Likewise.
+ 	* doc/www.gnu.org/announce/20010106.wml: Likewise.
+ 	* doc/www.gnu.org/downloads/19990206.wml: Likewise.
+ 	* doc/www.gnu.org/downloads/20001120.wml: Likewise.
+ 	* doc/www.gnu.org/downloads/20010106.wml: Likewise.
+ 
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/Menu.java (AccessibleAWTMenu
+ 	getAccessibleContext): Implement.
+ 	* java/awt/PopupMenu.java (AccessibleAWTPopupMenu
+ 	getAccessibleContext): Implement.
+ 	* java/awt/TextComponent.java (AccessibleAWTTextComponent
+ 	getAccessibleContext): Implement.
+ 	(TextComponent): Extends Accessible.
+ 	(getIndexAtPoint, getCharacterBounds): New methods.
+ 
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/Button.java
+ 	(AccessibleAWTButton.getAccessibleActionDescription): Explain the
+ 	source of 'click'.
+ 
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/Checkbox.java: Remove stub comments.
+ 
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/Button.java
+ 	(AccessibleAWTButton.getAccessibleActionDescription): Return
+ 	'click'.
+ 
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/Checkbox.java (AccessibleAWTCheckBox): Remove todo
+ 	comments.
+ 
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/Checkbox.java (itemStateChanged): Implement function.
+ 	(getAccessibleContext): Add AccessibleAWTCheckBox to item listeners.
+ 	
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/TextArea.java (AccessibleAWTTextArea,
+ 	getAccessibleContext): Implement.
+ 	* java/awt/TextField.java (AccessibleAWTTextField,
+ 	getAccessibleContext): Implement.
+ 
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/Checkbox.java (AccessibleAWTCheckBox): Implement.
+ 	(getAccessibleContext): Implement.
+ 	
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/MenuItem.java (AccessibleAWTMenuItem): Implement.
+ 
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/Choice.java (AccessibleAWTChoice): Implement.
+ 
+ 2004-11-23 Jerry Quinn <jlquinn@optonline.net>
+ 
+ 	* java/awt/MenuItem.java (AccessibleAWTMenuItem): Implement.
+ 
+ 2004-11-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultSingleSelectionModel.java,
+ 	javax/swing/JPasswordField.java,
+ 	javax/swing/tree/AbstractLayoutCache.java:
+ 	Reformatted and javadocs cleaned up.
+ 
+ 2004-11-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(register): Only reuse valid selection keys.
+ 
+ 2004-11-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIOServerSocket.java
+ 	(getPlainSocketImpl): Removed debug code.
+ 
+ 2004-11-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Component.java:
+ 	Fixed argument names to match javadocs.
+ 	(setFont): Rewritten set property first and then fire event.
+ 	(setLocale): Likewise.
+ 	* javax/swing/text/JTextComponent.java
+ 	(setEditable): Likewise.
+ 
+ 2004-11-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/InflaterInputStream.java
+ 	(onebytebuffer): Little reformatting to match libgcj's version.
+ 	(read): Likewise.
+ 
+ 2004-11-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIOServerSocket.java
+ 	(getPlainSocketImpl): Implemented in java with reflection.
+ 	* include/gnu_java_nio_NIOServerSocket.h,
+ 	native/jni/java-nio/gnu_java_nio_NIOServerSocket.c: Removed.
+ 	* include/Makefile.am:
+ 	Don't generate include/gnu_java_nio_NIOServerSocket.h.
+ 	* native/jni/java-nio/Makefile.am:
+ 	Don't build native/jni/java-nio/gnu_java_nio_NIOServerSocket.c.
+ 
+ 2004-11-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(read): Made check for blocking un-ambiguous.
+ 	Removed wrong check for data array length.
+ 
+ 2004-11-22  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt doc/www.gnu.org/announce/20041115.wml
+ 	doc/www.gnu.org/downloads/downloads.wml: classpath 0.12 announcement
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(read): Only return 0 when no bytes for reading available in
+ 	non-blocking mode.
+ 	* java/nio/channels/SocketChannel.java:
+ 	Added some missing @return tags.
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/PropertyChangeSupport.java
+ 	(propertyChangeSupportSerializedDataVersion): Made static.
+ 	* java/beans/VetoableChangeSupport.java
+ 	(propertyChangeSupportSerializedDataVersion): Likewise.
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/CardLayout.java:
+ 	Made some constants static.
+ 	(serialVersionUID): Made private.
+ 	(addLayoutComponent): Simplified code.
+ 	* java/awt/event/InputEvent.java
+ 	(getModifiersEx): Added missing @param tag.
+ 	* java/awt/image/RGBImageFilter.java
+ 	(filterRGBPixels): Reformatted, removed wrong @param tag.
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java
+ 	(getContent): Added missing @return tag.
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/FieldView.java,
+ 	javax/swing/text/JTextComponent.java:
+ 	Removed debug code.
+ 
+ 2004-11-21  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(ReadOnly): New inner subclass.
+ 	(ReadWrite): New inner subclass.
+ 	(owner): Made final and private.
+ 	(address): Made final.
+ 	(DirectByteBufferImpl(int)): New constructor.
+ 	(DirectByteBufferImpl(Object,RawData,int,int,int)): New constructor.
+ 	(DirectByteBufferImpl(Object,RawData,int,int,int,boolean)): Removed.
+ 	(allocate): Modified to instantiate ReadWrite subclass.
+ 	(finalize): Fixed to only free the buffer, if we own it.
+ 	(put): Removed read-only check.
+ 	(slice, duplicate): Modified to instantiate appropriate subclass.
+ 	(isReadOnly): Removed.
+ 	* java/nio/MappedByteBufferImpl.java
+ 	(slice, duplicate): Modified to instantiate appropriate
+ 	DirectByteBufferImpl subclass.
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/BorderFactory.java
+ 	(BorderFactory): Added private constructor.
+ 	* javax/swing/SwingUtilities.java
+ 	(SwingUtilities): Likewise.
+ 	(computeStringWidth): New method.
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/color/ICC_Profile.java
+ 	(icSigNamedColorTag): Removed.
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(isMimeTypeEqual): Made final.
+ 	* java/awt/image/AffineTransformOp.java:
+ 	Reworked javadocs.
+ 	(TYPE_BICUBIC): Added @since tag.
+ 
+ 2004-11-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/classpath/RawData.java: Made abstract.
+ 	* gnu/classpath/RawData32.java,
+ 	gnu/classpath/RawData64.java: New files.
+ 	* include/Makefile.am:
+ 	Don't generate java_nio_DirectByteBufferImpl.h anymore
+ 	and generate java_nio_VMDirectByteBuffer.h now.
+ 	* java/nio/DirectByteBufferImpl.java:
+ 	Moved native methods to VMDirectByteBuffer.
+ 	* java/nio/MappedByteBufferImpl.java:
+ 	Use methods from VMDirectBteBuffer.
+ 	* native/jni/java-nio/Makefile.am:
+ 	Removed java_nio_DirectByteBufferImpl.c
+ 	and added java_nio_VMDirectByteBuffer.c
+ 	* include/java_nio_DirectByteBufferImpl.h,
+ 	native/jni/java-nio/java_nio_DirectByteBufferImpl.c:
+ 	Removed.
+ 	* include/java_nio_VMDirectByteBuffer.h,
+ 	* native/jni/java-nio/java_nio_VMDirectByteBuffer.c,
+ 	* vm/reference/java/nio/VMDirectByteBuffer.java:
+ 	New files.
+ 
+ 2004-11-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (tryBundle): Use
+ 	Class.isAssignableFrom rather than catching ClassCastException.
+ 
+ 2004-11-20  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/ResourceBundle.java (bundleCache): Renamed from
+ 	resourceBundleCache. Update comments.
+ 	(getObject): Don't catch MissingResourceException.
+ 	(getBundle(String)): Remove 'final'. Use system classloader if
+ 	getCallingClassLoader returned null.
+ 	(getBundle(String, Locale)): Likewise.
+ 	(BundleKey): New private class. HashMap key for bundle cache lookup.
+ 	(lookupKey): New. Singleton instance of BundleKey.
+ 	(nullEntry): New. Cache entry to represent failed lookups.
+ 	(getBundle(String, Locale, ClassLoader)): Re-written to use new 
+ 	caching strategy, no-allocation lookup, and new tryBundle methods.
+ 	(tryBundle(String, ClassLoader)): New. Load a locale-qualified bundle 
+ 	name using given classloader.
+ 	(tryBundle(String, Locale, ClassLoader, boolean): New. Qualify 
+ 	baseName for given Locale and attempt to load bundle.
+ 
+ 2004-11-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/io/decode/DecoderUTF8.java
+ 	(charsInByteArray, convertToChars, read): Added surrogate pair
+ 	support.
+ 	(pendingChar): New field.
+ 	* gnu/java/io/encode/EncoderUTF8.java
+ 	(bytesInCharArray, convertToBytes): Added surrogate pair support.
+ 
+ 2004-11-18  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/nio/FileLock.java (isValid): locks are valid if the
+ 	channel is open.
+ 
+ 2004-11-17  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/io/decode/DecoderUTF8.java
+ 	(read): Fixed EOF bug introduced in last commit.
+ 
+ 2004-11-17  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/io/decode/Decoder.java: Removed throws
+ 	CharConversionException from the various methods.
+ 	* gnu/java/io/decode/DecoderUTF8.java
+ 	(REPLACEMENT_CHARACTER): New field.
+ 	(charsInByteArray, convertToChars, read): Removed throws
+ 	CharConversionException and reimplemented algorithm to replace
+ 	illegal UTF-8 sequences with REPLACEMENT_CHARACTER instead of
+ 	throwing an exception.
+ 	* gnu/java/io/encode/Encoder.java
+ 	(bad_char, bad_char_set, setBadCharValue): Removed.
+ 	(bytesInCharArray, convertToBytes): Removed throws
+ 	CharConversionException.
+ 	* gnu/java/io/encode/EncoderEightBitLookup.java
+ 	(BAD_CHARACTER): New field.
+ 	(convertToBytes): Changed to always replace invalid characters with
+ 	BAD_CHARACTER instead of throwing an exception if bad_char hadn't
+ 	been set.
+ 	* java/io/OutputStreamWriter.java
+ 	(OutputStreamWriter): Removed call to Encoder.setBadCharValue().
+ 	* java/lang/String.java: Removed try/catch block around
+ 	Encoder/Decoder calls that no longer throw CharConversionException.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/print/PrinterJob.java: Reformatted.
+ 
+ 2004-11-17  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/print/PrinterJob.java (lookupPrintServices,
+ 	getPrintService, setPrintService): Implement.
+ 	(lookupStreamPrintServices): Add commented out implementation.
+ 	(printer): New field.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java (getPort): Return 0 in error case.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	*  java/nio/DirectByteBufferImpl.java
+ 	(owner): Updated comment.
+ 	(allocate): New method.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java (URL): Handle case when argument is null.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/Beans.java,
+ 	java/beans/PropertyChangeEvent.java,
+ 	java/beans/PropertyEditorSupport.java:
+ 	Fixed javadocs.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Timer.java (DEFAULT_SIZE): Made static.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/AffineTransformOp.java,
+ 	java/awt/image/ColorConvertOp.java,
+ 	java/awt/image/LookupOp.java,
+ 	java/awt/image/RescaleOp.java:
+ 	Added final keywords where they belong.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/CardLayout.java,
+ 	java/awt/Component.java,
+ 	java/awt/Font.java,
+ 	java/awt/image/SinglePixelPackedSampleModel.java:
+ 	Fixed javadocs and argument names all over.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/DataBufferShort.java: Fixed file header.
+ 	* java/awt/image/DataBufferUShort.java: Likewise.
+ 	(DataBufferUShort): Throw NullPointerException if dataArray is null.
+ 
+ 2004-11-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java (getCanonicalHostName):
+ 	Support IPv6 addresses.
+ 
+ 2004-11-17  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/Arc2D.java,
+ 	(setAngleStart): Corrected (wrong sign on atan2 y parameter)
+ 	(setAngles): Likewise
+ 	(containsAngle): Return false on zero extent, don't include final angle
+ 	(contains): Treat OPEN-type arcs like CHORD ones, not as PIE ones.
+ 
+ 2004-11-16  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/AffineTransform.java,
+ 	(inverseTransform): Fixed bug and simplified code.
+ 	(createTransformedShape): Return null on null parameter.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Collections.java (synchronizedSortedMap):
+ 	Removed some cruft in javadoc.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java:
+ 	Added some new locale informations to the contents object.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedReader.java,
+ 	java/io/FileInputStream.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/FileWriter.java,
+ 	java/io/OutputStreamWriter.java,
+ 	java/io/PipedInputStream.java,
+ 	java/io/PipedOutputStream.java,
+ 	java/io/PipedReader.java,
+ 	java/io/PipedWriter.java,
+ 	java/io/PrintStream.java,
+ 	java/io/PushbackInputStream.java,
+ 	java/io/RandomAccessFile.java,
+ 	java/io/Reader.java,
+ 	java/io/StreamTokenizer.java,
+ 	java/io/StringReader.java,
+ 	java/net/NetworkInterface.java,
+ 	java/net/URLClassLoader.java,
+ 	java/nio/ByteOrder.java,
+ 	java/nio/channels/Channel.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/color/ICC_ColorSpace.java,
+ 	java/awt/color/ICC_Profile.java,
+ 	java/awt/color/ICC_ProfileGray.java,
+ 	java/awt/color/ICC_ProfileRGB.java:
+ 	Re-indent copyright header to be standardish.
+ 	* java/awt/datatransfer/StringSelection.java:
+ 	Reformatted.
+ 	* java/awt/geom/Area.java
+ 	(EPSILON): Made static.
+ 	(RS_EPSILON): Likewise.
+ 	(PE_EPSILON): Likewide.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java:
+ 	Fix compile error.
+ 
+ 2004-11-16  Sven de Marothy  <sven@physto.se>
+ 
+ 	* javax/swing/SwingUtilities.java:
+ 	(computeDifference): Implemented
+ 	(computeIntersection): Likewise
+ 	(computeUnion): Likewise
+ 	(isRectangleContainingRectangle): Likewise
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/BasicStroke.java,
+ 	java/awt/Button.java,
+ 	java/awt/Canvas.java,
+ 	java/awt/CheckboxMenuItem.java,
+ 	java/awt/Container.java,
+ 	java/awt/EventQueue.java,
+ 	java/awt/FileDialog.java,
+ 	java/awt/FlowLayout.java,
+ 	java/awt/FontMetrics.java,
+ 	java/awt/Graphics.java,
+ 	java/awt/GridLayout.java,
+ 	java/awt/KeyboardFocusManager.java,
+ 	java/awt/Label.java,
+ 	java/awt/LayoutManager2.java,
+ 	java/awt/List.java,
+ 	java/awt/MenuBar.java,
+ 	java/awt/Scrollbar.java,
+ 	java/awt/Toolkit.java,
+ 	java/awt/Window.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/awt/datatransfer/FlavorTable.java,
+ 	java/awt/event/ActionListener.java,
+ 	java/awt/event/HierarchyBoundsAdapter.java,
+ 	java/awt/geom/Arc2D.java,
+ 	java/awt/geom/Rectangle2D.java,
+ 	java/awt/geom/RectangularShape.java,
+ 	java/awt/im/spi/InputMethod.java,
+ 	java/awt/image/ByteLookupTable.java,
+ 	java/awt/image/ColorModel.java,
+ 	java/awt/image/DirectColorModel.java,
+ 	java/awt/image/ShortLookupTable.java,
+ 	java/awt/print/Book.java:
+ 	Fixed javadocs and method argument names all over.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java: Reordered entries in
+ 	contents array, added support for ap/pm and territorial names.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java: Reformatted. Replaced
+ 	some definitions with their generated counterparts.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java: Removed some comments to
+ 	make it easier to merge this with the new generated classes.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Added scripts/Makefile to output files.
+ 	* Makefile.am (SUBDIRS): Add scripts
+ 	* scripts/Makefile.am: New file.
+ 
+ 2004-11-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontPeer.java
+ 	(buildString): Optimise String building.
+ 
+ 2004-11-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/Makefile.am: Add checking of JNI methods.
+ 	* scripts/check_jni_methods.sh: New file.
+ 
+ 2004-11-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4 (CLASSPATH_WITH_GLIBJ): Added support to not build the
+ 	class files/glibj.zip. Handle --disable-examples argument.
+ 	* Makefile.am: Build examples subdir conditionally.
+ 
+ 2004-11-15  Craig Black  <craig.black@aonix.com>
+ 
+ 	* gnu/java/beans/BeanInfoEmbryo.java: Use TreeMap for proper sorting.
+ 
+ 2004-11-15  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/StackTraceElement.java: Made final.
+ 	* java/nio/channels/Channels.java: Added private constructor.
+ 	* java/rmi/Naming.java: Added private constructor.
+ 	* java/rmi/registry/LocateRegistry.java: Added private constructor.
+ 	* java/rmi/server/RMIClassLoader.java: Added private constructor.
+ 	* java/security/KeyPairGeneratorSpi.java
+ 	(clone): Made protected and simplified implementation.
+ 	* java/text/DateFormat.java
+ 	(allFields): Made package accessible.
+ 	* java/text/DecimalFormat.java
+ 	(formatInternal): Made private.
+ 	* java/text/Format.java
+ 	(formatInternal): Made private.
+ 	* java/util/logging/Handler.java: Made constructor protected.
+ 	* java/util/regex/Matcher.java: Made final.
+ 	* java/util/regex/Pattern.java: Made final.
+ 	* java/util/zip/InflaterHuffmanTree.java: Made package.
+ 	* javax/crypto/CipherInputStream.java
+ 	(mark): Corrected mark parameter type (from long to int).
+ 	* javax/crypto/ExemptionMechanism.java
+ 	(finalize): Added.
+ 	* javax/crypto/Mac.java
+ 	(getMacLength): Made final.
+ 	(clone): Made final.
+ 	* javax/imageio/ImageIO.java: Added private constructor.
+ 	* javax/imageio/stream/ImageInputStreamImpl.java
+ 	(checkClosed): Made final.
+ 	* javax/net/ssl/SSLPermission.java: Made final.
+ 	* javax/print/DocFlavor.java
+ 	(hostEncoding): Added work-around to prevent the field from being
+ 	a compile time constant.
+ 	* javax/print/attribute/AttributeSetUtilities.java: Added private
+ 	constructor.
+ 	(UnmodifiableDocAttributeSet): Made private.
+ 	(UnmodifiablePrintJobAttributeSet): Made private.
+ 	(UnmodifiablePrintRequestAttributeSet): Made private.
+ 	(UnmodifiablePrintServiceAttributeSet): Made private.
+ 	(SynchronizedAttributeSet): Made private.
+ 	(SynchronizedDocAttributeSet): Made private.
+ 	(SynchronizedPrintJobAttributeSet): Made private.
+ 	(SynchronizedPrintRequestAttributeSet): Made private.
+ 	(SynchronizedPrintServiceAttributeSet): Made private.
+ 	* javax/security/auth/PrivateCredentialPermission.java: Made final.
+ 
+ 2004-11-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.12+cvs.
+ 
+ 2004-11-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.12.
+ 	* NEWS: Add new items for this release.
+ 
+ 2004-11-14  Mattias Rehnberg  <Mattias.Rehnberg@home.se>
+ 
+ 	* java/net/Inet6Address.java (getHostAddress): Fix textual
+ 	representation of IPv6 address with embedded zeroes 
+ 	to conform to RFC 2373.
+ 
+ 2004-11-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac (--disable-Werror): Make no the default.
+ 
+ 2004-11-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/ToolTipManager.java (mouseMoved): Set currentComponent
+ 	when not yet set.
+ 
+ 2004-11-13  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	Complete 1.4 support
+ 	* java/beans/PropertyDescriptor.java:
+ 	(setReadMethod): New method
+ 	(setWriteMethod): New method
+ 	(equals): Implemented (1.4)
+ 	(checkMethods): operates on arguments now (private)
+ 
+ 2004-11-12  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* gnu/classpath/Configuration.java.in: Added
+ 	JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION. 
+ 	* configure.ac: Added
+ 	--enable-java-lang-system-explicit-initialization. 
+ 	* java/lang/System.java: Added support for
+ 	JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION. 
+ 	
+ 2004-11-12  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/Polygon.java (contains): Reimplemented.
+ 
+ 2004-11-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Indentation fixups.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: Likewise.
+ 
+ 2004-11-11  Paul Jenner  <psj.home@ntlworld.com>
+ 
+ 	* java/awt/image/Raster.java
+ 	(createPackedRaster): Implemented.
+ 
+ 2004-11-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java: Indentation fixups.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java: Likewise.
+ 	* javax/swing/text/PlainDocument.java: Likewise.
+ 	* javax/swing/text/SimpleAttributeSet.java: Likewise.
+ 	* javax/swing/text/Utilities.java: Likewise.
+ 
+ 2004-11-11  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java:
+ 	Listen to focus events, indicate focus via caret.
+ 	* javax/swing/text/GapContent.java (getString): Return substring.
+ 	* javax/swing/text/PlainDocument.java (reindex): New method.
+ 	(createDefaultRoot): Call it.
+ 	(insertUpdate): Likewise.
+ 	(removeUpdate): Likewise.
+ 	* javax/swing/text/Utilities.java (drawTabbedText): Always advance
+ 	on tab and newline, even if no painting happens.
+ 
+ 2004-11-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (setFont):
+ 	Set pango context's description and language.
+ 
+ 2004-11-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkFontMetrics.h: Regenerated.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkClipboard.h: Likewise.
+ 	* include/gnu_java_net_PlainDatagramSocketImpl.h: Likewise.
+ 	* include/java_io_ObjectInputStream.h: Likewise.
+ 	* include/java_io_VMFile.h: Likewise.
+ 	* include/java_lang_Math.h: Likewise.
+ 	* include/java_lang_VMProcess.h: Likewise.
+ 	* include/java_net_InetAddress.h: Likewise.
+ 
+ 2004-11-11  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(GdkGraphics2D): Set clip after transform.
+ 	(drawImage): Protect against null image.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(setIconImage): Protect against non-GtkImage args.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(checkImage): Protect against non-GtkImage args.
+ 	* java/awt/print/PrinterJob.java:
+ 	(print): Add variant taking PrintRequestAttributeSet.
+ 	(printDialog): Likewise.
+ 	* javax/swing/JComponent.java:
+ 	(transferHandler): New field.
+ 	(getComponentGraphics): Build new Graphics for each sub-paint.
+ 	(getTransferHandler): New method.
+ 	(setTransferHandler): New method.
+ 	* javax/swing/JDesktopPane.java
+ 	(setDragMode): Force LIVE_DRAG_MODE.
+ 	* javax/swing/JMenuItem.java
+ 	(menuSelectionChanged): Protect against null parent.
+ 	* javax/swing/JTable.java (setDefaultRenderer): New method.
+ 	* javax/swing/JTree.java: Get basic ctors and UI working.
+ 	* javax/swing/JViewport.java (JViewport): Set scroll mode.
+ 	* javax/swing/RepaintManager.java
+ 	(addDirtyRegion): Skip empty regions.
+ 	* javax/swing/ScrollPaneLayout.java (minimumLayoutSize): Do not
+ 	bound scrollpane minimum by central view minimum.
+ 	* javax/swing/ToolTipManager.java
+ 	(showTip): Guard against null component.
+ 	* javax/swing/TransferHandler.java: Stub out.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Add entry for TextPaneUI, change Tree icons to pngs.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(installDefaults): Set text position and alignment.
+ 	(paintMenuItem): Layout icon with normal compound function.
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java:
+ 	(getMaximumSize): Delete.
+ 	(getMinimumSize): Delete.
+ 	(getPreferredSize): Use column model's total width.
+ 	* javax/swing/plaf/basic/BasicTextPaneUI.java: New file.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(modelChanged): Make resilient against nulls.
+ 	* javax/swing/plaf/basic/BasicTreeUI.java:
+ 	Add some simplistic config / painting functions.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(paintSimple): Add new non-backingstore paint mode.
+ 	(paintBackingStore): Split out backing store code.
+ 	(paint): Switch on painting mode.
+ 	* javax/swing/text/SimpleAttributeSet.java
+ 	(SimpleAttributeSet): Resist nulls.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java: Implement.
+ 	* javax/swing/tree/DefaultTreeModel.java: Partially implement.
+ 
+ 2004-11-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/JarFile.java (verify): Make package private.
+ 	(signaturesRead): Likewise.
+ 	(verified): Likewise.
+ 	(entryCerts): Likewise.
+ 	(DEBUG): Likewise.
+ 	(debug): Likewise.
+ 	(entries): Construct new JarEnumeration with reference to this.
+ 	(JarEnumeration): Make static.
+ 	(JarEnumeration.jarfile): New field.
+ 	(JarEnumeration.nextElement): Use and synchronize on jarfile.
+ 	Compare verified value to Boolean.TRUE or Boolean.False only
+ 	when verify is true.
+ 	(getEntry): Make synchronized. Compare value of verified to
+ 	Boolean.TRUE.
+ 	(getInputStream): Construct EntryInputStream with reference to this.
+ 	(getManifest): Make synchronized.
+ 	(EntryInputStream): Make static.
+ 	(EntryInputStream.jarfile): New field.
+ 	(EntryInputStream.EntryInputStream): Check if manifest exists,
+ 	before getting attributes.
+ 	(eof): Synchronize on jarfile.
+ 	
+ 2004-11-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/gen-classlist.sh.in: Split in classes list in standard, awt
+ 	and standardx lists.
+ 	* lib/Makefile.am (FOUND_GCJ): Split compilation in three parts.
+ 	(CLEANFILES): Add classes.standard, classes.awt and classes.standardx.
+ 
+ 2004-11-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/classpath-build: Use autogen.sh script. Added
+ 	--with-glibj=both to configure. Make sure logfile is empty.
+ 
+ 2004-11-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* scripts/eclipse-gnu.xml: New file.
+ 
+ 	* java/io/File.java (directory.getName): Removed redundant cast.
+ 	Changed "mask" to be of type "long".
+ 
+ 2004-11-08  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/util/jar/JarFile.java (verify): return if the jar is signed
+ 	with an unsupported algorithm.
+ 
+ 2004-11-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/GregorianCalendar.java: Removed unused imports.
+ 	* java/util/Vector.java: Removed unused import.
+ 
+ 	* java/io/PrintStream.java (ForwardStream): New constructor.
+ 
+ 2004-11-08  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	Fixed regression:
+ 	* gnu/java/beans/IntrospectionIncubator.java:
+ 	(addMethod): corrected classification of normal and property methods
+ 	(capitalize): added documentation
+ 	(DoubleKey): [class] added documentation
+ 	(isReachable): new method, refactoring of a large expression
+ 
+ 2004-11-08  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(parseURL): Fixed file path canonicalisation.
+ 
+ 2004-11-08  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/File.java:
+ 	(createTempFile): Use VMFile.IS_DOS_8_3 instead of separatorChar
+ 	to determine file system naming restrictions.
+ 	* vm/reference/java/io/VMFile.java
+ 	(caseSensitive): Renamed to IS_CASE_SENSITIVE.
+ 	(IS_DOS_8_3): New field.
+ 
+ 2004-11-08  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ClassLoader.java: Updated some comments.
+ 	(systemClassLoader): Moved to java.lang.System to remove
+ 	circular initialization dependency.
+ 	* java/lang/System.java: Moved initialization of static fields
+ 	to static initializers to make ordering more explicit.
+ 	(static): Added creation of system class loader.
+ 	(static): Added support for setting the default security manager.
+ 
+ 2004-11-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/image/LookupOp.java: Comments and indentation fixes.
+ 
+ 2004-11-07  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/security/provider/GnuDSAPrivateKey.java
+ 	(encodedKey): new field.
+ 	(getFormat): return "PKCS#8".
+ 	(getEncoded): implemented.
+ 	(toString): check for 'null' values.
+ 	* gnu/java/security/provider/GnuDSAPublicKey.java
+ 	(encodedKey): new field.
+ 	(getFormat): return "X.509".
+ 	(getEncoded): implemented.
+ 	(toString): check for 'null' values.
+ 
+ 2004-11-07  Casey Marshall  <csm@gnu.org>
+ 
+ 	* NEWS: started 0.12 entry; mention signed JAR files and X.509
+ 	improvements.
+ 
+ 2004-11-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/JarFile.java (EntryInputStream): Add actual
+ 	InputStream as argument.
+ 	(getInputStream): Construct a new EntryInputStream with the result of
+ 	super.getInputStream(entry).
+ 
+ 2004-11-07  Casey Marshall  <csm@gnu.org>
+ 
+ 	Signed JAR file support.
+ 	* java/net/URLClassLoader.java
+ 	(JarURLResource.getCertificates): re-read jar entry to ensure
+ 	certificates are picked up.
+ 	(findClass): fill in class `signers' field, too.
+ 	* java/util/jar/JarFile.java (META_INF): new constant.
+ 	(PKCS7_DSA_SUFFIX): new constant.
+ 	(PKCS7_RSA_SUFFIX): new constant.
+ 	(DIGEST_KEY_SUFFIX): new constant.
+ 	(SF_SUFFIX): new constant.
+ 	(MD2_OID): new constant.
+ 	(MD4_OID): new constant.
+ 	(MD5_OID): new constant.
+ 	(SHA1_OID): new constant.
+ 	(DSA_ENCRYPTION_OID): new constant.
+ 	(RSA_ENCRYPTION_OID): new constant.
+ 	(signaturesRead): new field.
+ 	(verified): new field.
+ 	(entryCerts): new field.
+ 	(DEBUG): new constant.
+ 	(debug): new method.
+ 	(JarEnumeration.nextElement): fill in entry certificates, read
+ 	signatures if they haven't been read.
+ 	(getEntry): likewise.
+ 	(getInputStream): verify stream if it hasn't been verified
+ 	yet.
+ 	(readSignatures): new method.
+ 	(verify): new method.
+ 	(verifyHashes): new method.
+ 	(readManifestEntry): new method.
+ 	(EntryInputStream): new class.
+ 	* java/util/zip/InflaterInputStream.java
+ 	Don't defer to underlying stream for mark/reset.
+ 	(markSupported): new method; return `false'.
+ 	(mark): new method.
+ 	(reset): new method.
+ 	* gnu/java/io/Base64InputStream.java (decode): new class
+ 	method.
+ 	* gnu/java/security/der/DERReader.java don't make class
+ 	final.
+ 	(in): made protected.
+ 	(encBuf): likewise.
+ 	(readLength): likewise.
+ 	* gnu/java/security/ber/BER.java,
+ 	* gnu/java/security/ber/BEREncodingException.java,
+ 	* gnu/java/security/ber/BERReader.java,
+ 	* gnu/java/security/ber/BERValue.java,
+ 	* gnu/java/security/pkcs/PKCS7SignedData.java,
+ 	* gnu/java/security/pkcs/SignerInfo.java:
+ 	new files.
+ 
+ 2004-11-07  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/security/provider/Gnu.java
+ 	(<init>): add entries in a priviliged action.
+ 	Add new algorithms.
+ 	* gnu/java/security/provider/X509CertificateFactory.java
+ 	(engineGenerateCertificate): chain exceptions.
+ 	(engineGenerateCertificates): likewise.
+ 	(engineGenerateCRL): likewise.
+ 	(engineGenerateCRLs): likewise.
+ 	(engineGenerateCertPath): new methods.
+ 	(generateCert): throw exception if 'inStream' is null.
+ 	(generateCRL): likewise.
+ 	* gnu/java/security/x509/X500DistinguishedName.java: replaced with
+ 	version from GNU Crypto CVS.
+ 	* gnu/java/security/x509/X509CRL.java: likewise.
+ 	* gnu/java/security/x509/X509CRLEntry.java: likewise.
+ 	* gnu/java/security/x509/X509Certificate.java: likewise.
+ 	* java/security/cert/TrustAnchor.java: call 'toString' and not
+ 	toRFC2253.
+ 	* gnu/java/security/provider/CollectionCertStoreImpl.java,
+ 	* gnu/java/security/provider/EncodedKeyFactory.java,
+ 	* gnu/java/security/provider/GnuDHPublicKey.java,
+ 	* gnu/java/security/provider/GnuRSAPrivateKey.java,
+ 	* gnu/java/security/provider/GnuRSAPublicKey.java,
+ 	* gnu/java/security/provider/MD2withRSA.java,
+ 	* gnu/java/security/provider/MD4withRSA.java,
+ 	* gnu/java/security/provider/MD5withRSA.java,
+ 	* gnu/java/security/provider/PKIXCertPathValidatorImpl.java,
+ 	* gnu/java/security/provider/RSA.java,
+ 	* gnu/java/security/provider/RSAKeyFactory.java,
+ 	* gnu/java/security/provider/SHA1withRSA.java,
+ 	* gnu/java/security/x509/GnuPKIExtension.java,
+ 	* gnu/java/security/x509/PolicyNodeImpl.java,
+ 	* gnu/java/security/x509/Util.java,
+ 	* gnu/java/security/x509/X509CRLSelectorImpl.java,
+ 	* gnu/java/security/x509/X509CertPath.java,
+ 	* gnu/java/security/x509/X509CertSelectorImpl.java,
+ 	* gnu/java/security/x509/ext/AuthorityKeyIdentifier.java,
+ 	* gnu/java/security/x509/ext/BasicConstraints.java,
+ 	* gnu/java/security/x509/ext/CRLNumber.java,
+ 	* gnu/java/security/x509/ext/CertificatePolicies.java,
+ 	* gnu/java/security/x509/ext/ExtendedKeyUsage.java,
+ 	* gnu/java/security/x509/ext/Extension.java,
+ 	* gnu/java/security/x509/ext/GeneralNames.java,
+ 	* gnu/java/security/x509/ext/IssuerAlternativeNames.java,
+ 	* gnu/java/security/x509/ext/KeyUsage.java,
+ 	* gnu/java/security/x509/ext/PolicyConstraint.java,
+ 	* gnu/java/security/x509/ext/PolicyMappings.java,
+ 	* gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java,
+ 	* gnu/java/security/x509/ext/ReasonCode.java,
+ 	* gnu/java/security/x509/ext/SubjectAlternativeNames.java,
+ 	* gnu/java/security/x509/ext/SubjectKeyIdentifier.java:
+ 	new files.
+ 
+ 2004-11-07  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/GeneralPath.java (evaluateCrossings):
+ 	Fixed epsilon value, should always be nonzero.
+ 
+ 2004-11-07  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/BandedSampleModel.java (scanlineStride): Remove
+ 	field hiding ComponentSampleModel.scanlineStride.
+ 
+ 2004-11-06  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
+ 	Track Window focus owner on FOCUS_GAINED events.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/hacking.texinfo (Source Code Style Guide): Fixed
+ 	grammatical error.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/rmi/server/UnicastConnectionManager.java (clients): Now
+ 	package-private.
+ 	(connections): Likewise.
+ 	(scavenger): Likewise.
+ 	* gnu/java/rmi/server/ConnectionRunnerPool.java (freelist): Now
+ 	package-private.
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java (vec): Now
+ 	package-private.
+ 	(ptr): Likewise.
+ 	* gnu/java/security/PolicyFile.java (debug): Now package-private.
+ 	* gnu/classpath/ServiceFactory.java (log): Now package-private.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/directory/BasicAttributes.java (attributes): Now
+ 	package-private.
+ 	* javax/imageio/spi/ServiceRegistry.java (categories): Now
+ 	package-private.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java (URLClassLoader): Now
+ 	package-private.
+ 	* java/nio/charset/CoderResult.java (CoderResult): Now
+ 	package-private.
+ 	(get): Likewise.
+ 	(Cache): Likewise.  Don't synchronize on `this'.
+ 	* java/rmi/server/RMIClassLoader.java (MyClassLoader): Now
+ 	package-private.
+ 	* java/util/TimeZone.java (timezones): Now package-private.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/security/Permissions.java (perms): Now package-private.
+ 	* java/security/UnresolvedPermission.java (permissions): Now
+ 	package-private.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/FilePermission.java: Reindented.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java (currentObjectStreamClass): Now
+ 	package-private.
+ 	(setBlockDataMode): Likewise.
+ 	* java/io/DeleteFileHelper.java (DeleteFileHelper): Now
+ 	package-private.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/nio/charset/ISO_8859_1.java (Decoder): Now
+ 	package-private.
+ 	(Encoder): Likewise.
+ 	* gnu/java/nio/charset/UTF_8.java (Decoder): Now package-private.
+ 	(Encoder): Likewise.
+ 	* gnu/java/nio/charset/US_ASCII.java (Decoder): Now
+ 	package-private.
+ 	(Encoder): Likewise.
+ 
+ 2004-11-06  Robert Schuster  <theBohemian@gmx.net>
+ 
+ 	Fixes bug #10908
+ 	* gnu/java/beans/IntrospectionIncubator.java:
+ 	(addMethod): static methods are discarded now, too.
+ 
+ 2004-11-06  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/image/ConvolveOp.java: Added missing copyright notice.
+ 
+ 2004-11-06  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/AffineTransformOp.java (filter): Implement
+ 	filtering and bilinear interpolation for Rasters.
+ 	 Add TYPE_BICUBIC.
+ 	* java/awt/image/IndexColorModel.java (IndexColorModel): Actually
+ 	use the provided colormap.  Throw documented exceptions.  Document
+ 	exceptions.
+ 	* java/awt/image/ComponentSampleModel.java (getDataElements,
+ 	setDataElements): Implement SHORT, FLOAT, and INT transfer types.
+ 	* java/awt/image/Raster.java (createBandedRaster): Implement.
+ 	* java/awt/image/SampleModel.java (createSubsetSampleModel): Add
+ 	javadocs.
+ 	* java/awt/image/RescaleOp.java,
+ 	java/awt/image/ColorConvertOp.java: Fix loop bounds.
+ 	* java/awt/image/BandCombineOp.java,
+ 	java/awt/image/LookupOp.java,
+ 	java/awt/image/ConvolveOp.java: New classes.
+ 
+ 2004-11-06  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readObject): ENDBLOCKDATA is generated if the class has a write
+ 	method, not if it has a read method.
+ 
+ 2004-11-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Vector.java (readObject): Removed.
+ 
+ 2004-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java (sendRequest): Fix
+ 	typo.
+ 
+ 2004-11-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	PR libjava/14009
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(sendRequest): Handle case when url.getFile() returns an empty string.
+ 
+ 2004-11-06  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: JDK 1.0 compatibility news
+ 
+ 2004-11-05  Noa Resare  <noa@resare.com>
+ 
+ 	* java/net/Socket.java(getPort): Return 0 instead of -1 on
+ 	unconnected sockets.
+ 
+ 2004-11-05  Sven de Marothy <sven@physto.se>
+ 	
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(createImage): Created bitmap should be filled with bg color
+ 
+ 2004-11-04  Torsten Rupp  <rupp@aicas.com>
+ 
+ 	* native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c:
+ 	Replaced 'this' arguments by 'obj' to make source compatible with
+ 	C++ compilers.
+ 
+ 2004-11-04  Torsten Rupp  <rupp@aicas.com>
+ 
+ 	* native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c:
+ 	Add dummy return values for WITHOUT_NETWORK code path.
+ 	(Java_gnu_java_net_PlainDatagramSocketImpl_receive0): Check fid not
+ 	NULL for maxlen field id.
+ 
+ 2004-11-04  Torsten Rupp  <rupp@aicas.com>
+ 
+ 	* native/jni/java-net/gnu_java_net_PlainSocketImpl.c: Added missing
+ 	return values for WITHOUT_NETWORK code path.
+ 
+ 2004-11-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.am (EXTRA_DIST): Added ChangeLog-2003.
+ 
+ 2004-11-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/jni.h (struct JNINativeInterface) <NewObjectArray>: Now
+ 	returns jobjectArray.
+ 	(_Jv_JNIEnv::NewObjectArray): Likewise.
+ 
+ 2004-11-02  Mattias Rehnberg  <Mattias.Rehnberg@home.se>
+ 
+ 	* java/io/Vector.java
+ 	(readObject, writeObject): New function to match Sun's
+ 	serialized output for Vector.
+ 
+ 	* java/io/ObjectOutputStream.java
+ 	(writeObject): Move the assignment of the class handle to after
+ 	the assignment of class descriptor handle.
+ 
+ 2004-11-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Font.java (name): New field.
+ 	(size): Likewise.
+ 	(style): Likewise.
+ 
+ 2004-11-01  Andrew John Hughes <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/GregorianCalendar.java:
+ 	Added/amended documentation.
+ 	
+ 2004-11-01  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ClassLoader.java:
+ 	(addFileURL): New method.
+ 	(getSystemClassLoaderUrls): Fixed to treat lone separators as
+ 	current directory.
+ 
+ 2004-10-31  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	Fixes documentation and indentation
+ 	* java/beans/PropertyEditorSupport.java:
+ 	 reworked initial API doc
+ 	(value): changed name from val
+ 
+ 2004-10-31  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	Updates to 1.5
+ 	* java/beans/PropertyEditorSupport.java
+ 	(PropertyEditorSupport()): Changed modifier to public
+ 	(PropertyEditorSupport(Object): Changed modifier to public
+ 	(setSource): New method
+ 	(getSource): New method
+ 
+ 2004-10-31  Robert Schuster <thebohemian@gmx.net>
+ 
+ 	Fixes bug #10799
+ 	* java/beans/PropertyEditorSupport.java
+ 	(setValue): Fire property change event
+ 
+ 2004-10-31  Noa Resare  <noa@resare.com>
+ 
+ 	* java/util/Calendar.java (explicitDSTOffset): New instance field.
+ 	(set(int,int)): Set and use new field.
+ 	(set(int,int,int)): Check new field.
+ 
+ 2004-10-29  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ColorConvertOp.java: New class.
+ 	* java/awt/image/ColorModel.java (cloneColorModel): New method.
+ 
+ 2004-10-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(gtkWidgetSetVisible): Unused. Removed.
+ 	(connectJObject): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
+ 	(gtkScrolledWindowSetScrollPosition): Commented out.
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h:
+ 	Regenerated.
+ 
+ 2004-10-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(cairoShowGlyphs) Removed.
+ 
+ 2004-10-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/java-nio/java_nio.c
+ 	(Java_gnu_java_nio_FileChannelImpl_lengthInternal): Removed.
+ 
+ 2004-10-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c,
+ 	native/jni/java-lang/java_lang_Double.c,
+ 	native/jni/java-lang/java_lang_Math.c,
+ 	native/jni/java-lang/java_lang_Object.c,
+ 	native/jni/java-lang/java_lang_VMDouble.c,
+ 	native/jni/java-lang/java_lang_VMFloat.c,
+ 	native/jni/java-lang/java_lang_reflect_Array.c:
+ 	Fixed method names to start at begin of line. This is desired by GNU
+ 	coding style guide.
+ 
+ 2004-10-28  Sven de Marothy  <sven@physto.se>
+ 
+ 	* gnu/java/awt/color/CieXyzConverter.java,
+ 	gnu/java/awt/color/GrayScaleConverter.java,
+ 	gnu/java/awt/color/SrgbConverter.java,
+ 	gnu/java/awt/color/ClutProfileConverter.java,
+ 	gnu/java/awt/color/LinearRGBConverter.java,
+ 	gnu/java/awt/color/TagEntry.java,
+ 	gnu/java/awt/color/ColorLookUpTable.java,
+ 	gnu/java/awt/color/ProfileHeader.java,
+ 	gnu/java/awt/color/ToneReproductionCurve.java,
+ 	gnu/java/awt/color/ColorSpaceConverter.java,
+ 	gnu/java/awt/color/PyccConverter.java,
+ 	gnu/java/awt/color/GrayProfileConverter.java,
+ 	gnu/java/awt/color/RgbProfileConverter.java:
+ 	New files.
+ 	* java/awt/color/ICC_ColorSpace.java,
+ 	java/awt/color/ICC_Profile.java,
+ 	java/awt/color/ICC_ProfileGray.java,
+ 	java/awt/color/ICC_ProfileRGB.java:
+ 	Implemented (sans PhotoYCC color space).
+ 	
+ 2004-10-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/font/TextAttribute.java
+ 	(RUN_DIRECTION_LTR): Initialie with static value instead of
+ 	calculating it.
+ 	(RUN_DIRECTION_RTL): Likewise.
+ 	(STRIKETHROUGH_ON): Likewise.
+ 	(SWAP_COLORS_ON): Likewise.
+ 
+ 2004-10-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(releasePeerGraphicsResource): Fixed typo in method name.
+ 	* gnu/java/awt/peer/gtk/GdkFontPeer.java
+ 	(finalize): Fixed typo in releasePeerGraphicsResource.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics2D.h:
+ 	Regenerated.
+ 
+ 2004-10-28  Noa Resare  <noa@resare.com>
+ 
+ 	* java/awt/geom/GeneralPath.java (currentSegment):
+ 	Fix typo in transform.transform() invocation.
+ 
+ 2004-10-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/security/cert/X509Certificate.java: Fully qualify extends to
+ 	java.security.cert.Certificate.
+ 
+ 2004-10-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText): Installed and
+ 	and renamed from Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText.
+ 
+ 2004-10-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/Makefile.am (AM_CFLAGS): Add ERROR_CFLAGS.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setText): Removed.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(init_dpi_conversion_factor): Correct prototype.
+ 
+ 2004-10-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c 
+ 	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
+ 
+ 2004-10-26  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
+ 	(Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun):
+ 	Fix pointer warning.
+ 
+ 2004-10-26  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter):
+ 	Fix pointer warning.
+ 
+ 	* native/jni/gtk-peer/gtkpeer.h: Introduce widget_union to fix type
+ 	punned warnings.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect): Use widget_union
+ 	to fix type punned pointer warning.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Likewise.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_get_new_state): Introduce unions to fix warnings as above.
+ 	(window_property_changed_cb): Likewise.
+ 	(window_active_state_change_cb): Mark unused variables unused.
+ 	(window_focus_state_change_cb): Likewise.
+ 	(window_focus_in_cb): Likewise.
+ 	(window_focus_out_cb): Likewise.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont): Convert
+ 	PangoFontMap correctly with PANGO_FT2FONT_MAP macro.
+ 
+ 2004-10-26  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Use the
+ 	GTK_TEXT_VIEW macro.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(connect_awt_hook_cb): Mark unused variable unused.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
+ 	(selection_get): Do the cast right.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create): According to
+ 	the gtk API gtk_combo_box_new_text actually returns a GtkWidget.
+ 	Remove unused var menu.
+ 	(selection_changed): Remove unused value.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds): Fix pointer
+ 	warning with using an intermediate variable.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	(area_updated): Fix unused var warning for BE archs.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_connectSignals): Remove unused
+ 	var.
+ 	(realize_cb): Mark unused variable unused.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
+ 	(seek_glyphstring_idx): Fix a C90 warning.
+ 
+ 2004-10-26  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
+ 	(Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun):
+ 	Mark unused arguments unused.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_initState),
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setGlyphCodes),
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphCharIndex),
+ 	(Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphIsHorizontal):
+ 	Likewise.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerFontMetrics),
+ 	(Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerTextMetrics):
+ 	Likewise.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter):
+ 	Likewise.
+ 	(filenameFilterCallback): Remove unused var.
+ 	(handle_response): Declare str_fileName and remove last else statement.
+ 
+ 2004-10-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac (CLASSPATH_MODULE): Add -no-undefined.
+ 	(Werror): New configure flag.
+ 	(gtk-peer): Remove comma from help string.
+ 	(AM_CFLAGS): Replace by...
+ 	(WARNING_CFLAGS, STRICT_WARNING_CFLAGS, ERROR_CFLAGS): New gcc flags.
+ 	(AM_CPPFLAGS): Replace by...
+ 	(CLASSPATH_INCLUDES): New -I gcc flags.
+ 	* native/fdlibm/Makefile.am: Use new AM_LDFLAGS, AM_CPPFLAGS and
+ 	AM_CFLAGS when not library specific flags are used.
+ 	* native/jni/gtk-peer/Makefile.am: Likewise.
+ 	* native/jni/java-io/Makefile.am: Likewise.
+ 	* native/jni/java-lang/Makefile.am: Likewise.
+ 	* native/jni/java-net/Makefile.am: Likewise.
+ 	* native/jni/java-nio/Makefile.am: Likewise.
+ 	* native/jni/java-util/Makefile.am: Likewise.
+ 
+ 	* native/jni/java-io/java_io_ObjectInputStream.c: Mark function
+ 	arguments unused where necessary.
+ 	* native/jni/java-io/java_io_VMFile.c: Likewise.
+ 	* native/jni/java-io/java_io_VMObjectStreamClass.c: Likewise.
+ 	(getFieldReference): Make sure we allocate the_type ourselves if we
+ 	free it later. Removed unused argument object.
+ 	* native/jni/java-io/javaio.c (javaio_read): Removed unused argument
+ 	obj.
+ 	(javaio_write): Likewise.
+ 	* native/jni/java-io/javaio.h: Mark function arguments unused where
+ 	necessary.
+ 	* native/jni/java-lang/java_lang_Double.c: Likewise.
+ 	(Java_java_lang_Double_parseDouble): Declare buf as const char*.
+ 	* native/jni/java-lang/java_lang_Math.c: Mark function arguments
+ 	unused where necessary.
+ 	* native/jni/java-lang/java_lang_VMDouble.c: Likewise.
+ 	* native/jni/java-lang/java_lang_VMFloat.c: Likewise.
+ 	* native/jni/java-lang/java_lang_VMSystem.c: Likewise.
+ 	* native/jni/java-lang/java_lang_reflect_Array.c: Likewise.
+ 	* native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c
+ 	(Java_gnu_java_net_PlainDatagramSocketImpl_receive0): Mark only
+ 	maxlen and offset as unsigned.
+ 	* native/jni/java-net/java_net_InetAddress.c: Mark function arguments
+ 	unused where necessary.
+ 	(Java_java_net_InetAddress_getHostByName): New local int variable
+ 	max_addresses.
+ 	* native/jni/java-net/java_net_NetworkInterface.c: Mark function
+ 	arguments unused where necessary.
+ 	* native/jni/java-net/javanet.c (_javanet_set_int_field): Removed
+ 	unused argument class.
+ 	(_javanet_accept): Check result variable after it has been assigned.
+ 	* native/jni/java-nio/gnu_java_nio_NIOServerSocket.c: Mark function
+ 	arguments unused where necessary.
+ 	* native/jni/java-nio/gnu_java_nio_VMPipe.c: Likewise.
+ 	* native/jni/java-nio/gnu_java_nio_VMSelector.c: Likewise.
+ 	* native/jni/java-nio/gnu_java_nio_VMSelector.c: Likewise.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c:
+ 	Likewise.
+ 	* native/jni/java-nio/java_nio_DirectByteBufferImpl.c: Likewise.
+ 	* native/jni/java-nio/java_nio_MappedByteBufferImpl.c: Likewise.
+ 	* native/jni/java-nio/java_nio_channels_Channels.c: Likewise.
+ 	* native/jni/java-util/java_util_VMTimeZone.c (jint_to_charbuf):
+ 	Mark as static function.
+ 	(Java_java_util_VMTimeZone_getSystemTimeZoneId): Mark clazz argument
+ 	as unused. Cast _timezone to long before use.
+ 	* native/target/generic/target_generic_network.h: Remove asserts.
+ 	
+ 2004-10-25  Noa Resare  <noa@resare.com>
+ 
+ 	* java/awt/Choice.java (add):
+ 	Implement correct selection behavior when peer == null.
+ 	(insert): Likewise.
+ 	(remove): Likewise.
+ 
+ 2004-10-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (GtkChoicePeer):
+ 	Call select() when Choice has a selected item.
+ 
+ 2004-10-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(getOutputStream): Implicitely switch to POST method.
+ 
+ 2004-10-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/text/WordBreakIterator.java (WordBreakIterator): Don't
+ 	initialize `iter'.
+ 	* gnu/java/text/SentenceBreakIterator.java
+ 	(SentenceBreakIterator): Don't initialize `iter'.
+ 	* gnu/java/text/LineBreakIterator.java (LineBreakIterator): Don't
+ 	initialize `iter'.
+ 	* gnu/java/text/CharacterBreakIterator.java
+ 	(CharacterBreakIterator): Don't initialize `iter'.
+ 	* gnu/java/text/BaseBreakIterator.java (BaseBreakIterator): New
+ 	constructor.
+ 	* java/text/BreakIterator.java: Updated documentation.
+ 
+ 2004-10-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JMenuBar.java
+ 	(updateUI): Simplified.
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java:
+ 	Reorganized import statements.
+ 
+ 2004-10-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(toString): Rename 'address' to 'addr'.
+ 
+ 2004-10-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/font/TextAttribute.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JInternalFrame.java,
+ 	javax/swing/table/TableColumn.java,
+ 	javax/swing/text/StyleConstants.java:
+ 	Replaced "new Boolean(boolean)" with "Boolean.valueOf(boolean)".
+ 
+ 2004-10-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/security/auth/spi/package.html: New file.
+ 
+ 2004-10-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/checkstyle.css,
+ 	scripts/checkstyle2html.xsl:
+ 	New files
+ 
+ 2004-10-24  Casey Marshall  <csm@gnu.org>
+ 
+ 	* gnu/java/security/action/GetSecurityPropertyAction.java: new file.
+ 	* javax/security/auth/login/Configuration.java
+ 	(getConfig): new method.
+ 	* javax/security/auth/login/LoginContext.java: implemented.
+ 	* javax/security/auth/spi/LoginModule.java: new file.
+ 
+ 2004-10-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/tree/DefaultTreeCellEditor.java,
+ 	javax/swing/tree/DefaultTreeModel.java,
+ 	javax/swing/tree/DefaultTreeSelectionModel.java:
+ 	Jalopied.
+ 
+ 2004-10-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/tree/DefaultTreeCellEditor.java
+ 	(EditorContainer.EditorContainer): Fixed arguments.
+ 	(EditorContainer.EditorContainer): New method.
+ 	(DefaultTextField.DefaultTextField): Fixed arguments, implemented.
+ 	(DefaultTextField.getBorder): Implemented.
+ 	(listenerList): New field.
+ 	(addCellEditorListener): Implemented.
+ 	(removeCellEditorListener): Implemented.
+ 	(getCellEditorListeners): New method.
+ 	* javax/swing/tree/DefaultTreeModel.java
+ 	(addTreeModelListener): Fixed javadoc.
+ 	(removeTreeModelListener): Likewise.
+ 	(getTreeModelListeners): New method.
+ 	(fireTreeNodesChanged): Implemented.
+ 	(fireTreeNodesInserted): Likewise.
+ 	(fireTreeNodesRemoved): Likewise.
+ 	(fireTreeStructureChanged): Likewise.
+ 	(getListeners): Fixed javadoc.
+ 	* javax/swing/tree/DefaultTreeSelectionModel.java
+ 	(addTreeSelectionListener): Implemented.
+ 	(removeTreeSelectionListener): Likewise.
+ 	(fireValueChanged): Likewise.
+ 	(getListeners): Likewise.
+ 	(addPropertyChangeListener): Likewise.
+ 	(removePropertyChangeListener): Likewise.
+ 	(getTreeSelectionListeners): New method.
+ 	(getPropertyChangeListeners): Likewise.
+ 
+ 2004-10-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(maximumThumbSize): Removed static keyword.
+ 	(minimumThumbSize): Likewise.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(CloseAction): Made public.
+ 	(IconifyAction): Likewise.
+ 	(MaximizeAction): Likewise.
+ 	(MoveAction): Likewise.
+ 	(RestoreAction): Likewise.
+ 	(SizeAction): Likewise.
+ 	(SystemMenuBar): Likewise.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(TrackListener): Likewise.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(KeyboardDownRightHandler): Likewise.
+ 	(KeyboardEndHandler): Likewise.
+ 	(KeyboardHomeHandler): Likewise.
+ 	(KeyboardResizeToggleHandler): Likewise.
+ 	(KeyboardUpLeftHandler): Likewise.
+ 	(PropertyHandler): Likewise.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(PropertyChangeHandler): Likewise.
+ 	(TabSelectionHandler): Likewise.
+ 
+ 2004-10-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/DocFlavor.java,
+ 	javax/print/attribute/standard/JobStateReason.java,
+ 	javax/print/attribute/standard/MultipleDocumentHandling.java:
+ 	Added missing constants.
+ 
+ 2004-10-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(getKeymap): Made public.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Character.java,
+ 	scripts/unicode-blocks.pl:
+ 	Reordered modifiers.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(getStream): Throws IOException.
+ 	(read): Likewise.
+ 	* javax/swing/JRootPane.java
+ 	(createContentPane): Fixed return type.
+ 	* javax/swing/JSpinner.java
+ 	(commitEdit): Throws ParseException.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(serialVersionUID): New field.
+ 	* javax/swing/table/TableColumn.java
+ 	(resizedPostingDisableCount): Added @deprecated tag.
+ 	(disableResizedPosting): Likewise.
+ 	(enableResizedPosting): Likewise.
+ 	* javax/swing/text/Document.java
+ 	(TitleProperty): Fixed value.
+ 	* javax/swing/tree/TreeCellEditor.java
+ 	(TreeCellEditor): Extends CellEditor.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/checkstyle-config.xml: Uncomment checks for modifiers.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Class.java,
+ 	java/lang/StringBuffer.java,
+ 	java/lang/Throwable.java,
+ 	java/security/spec/DSAParameterSpec.java,
+ 	java/util/Currency.java,
+ 	java/util/ResourceBundle.java,
+ 	java/util/zip/DeflaterConstants.java,
+ 	java/util/zip/DeflaterEngine.java,
+ 	java/util/zip/DeflaterHuffman.java,
+ 	java/util/zip/GZIPInputStream.java,
+ 	java/util/zip/InflaterHuffmanTree.java,
+ 	java/util/zip/OutputWindow.java,
+ 	java/util/zip/ZipEntry.java,
+ 	java/util/zip/ZipFile.java,
+ 	java/util/zip/ZipInputStream.java,
+ 	java/util/zip/ZipOutputStream.java:
+ 	Removed redundant and reordered modifiers.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JWindow.java
+ 	javax/swing/SpinnerModel.java
+ 	javax/swing/Timer.java
+ 	javax/swing/event/MenuKeyEvent.java
+ 	javax/swing/plaf/basic/BasicButtonUI.java
+ 	javax/swing/plaf/basic/BasicIconFactory.java
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	javax/swing/text/AttributeSet.java
+ 	javax/swing/text/Highlighter.java
+ 	javax/swing/text/StyleConstants.java
+ 	javax/swing/tree/TreeCellEditor.java:
+ 	Removed redundant and reordered modifiers.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Math.java,
+ 	java/lang/StackTraceElement.java,
+ 	java/nio/Buffer.java,
+ 	java/nio/ByteBuffer.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/ShortBuffer.java,
+ 	java/nio/charset/Charset.java,
+ 	java/rmi/server/RMIClassLoader.java,
+ 	java/rmi/server/RMISocketFactory.java,
+ 	java/security/Policy.java,
+ 	java/text/ChoiceFormat.java,
+ 	java/text/CollationElementIterator.java,
+ 	java/text/DateFormat.java,
+ 	java/text/DecimalFormat.java,
+ 	java/text/DecimalFormatSymbols.java,
+ 	java/text/MessageFormat.java,
+ 	java/text/NumberFormat.java,
+ 	java/text/RuleBasedCollator.java,
+ 	java/text/SimpleDateFormat.java,
+ 	java/util/BitSet.java,
+ 	java/util/Calendar.java,
+ 	java/util/Collections.java,
+ 	java/util/IdentityHashMap.java,
+ 	java/util/Locale.java,
+ 	java/util/TreeMap.java,
+ 	java/util/logging/LogRecord.java,
+ 	java/util/logging/XMLFormatter.java,
+ 	java/util/prefs/AbstractPreferences.java,
+ 	java/util/prefs/Preferences.java,
+ 	javax/crypto/interfaces/DHPrivateKey.java,
+ 	javax/crypto/interfaces/DHPublicKey.java,
+ 	javax/crypto/interfaces/PBEKey.java,
+ 	javax/net/ssl/HandshakeCompletedEvent.java,
+ 	javax/security/auth/Subject.java:
+ 	Removed redundant and reordered modifiers.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java:
+ 	Reformatted copyright header.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java,
+ 	javax/swing/AbstractButton.java,
+ 	javax/swing/AbstractCellEditor.java,
+ 	javax/swing/AbstractListModel.java,
+ 	javax/swing/AbstractSpinnerModel.java,
+ 	javax/swing/ActionMap.java,
+ 	javax/swing/BorderFactory.java,
+ 	javax/swing/Box.java,
+ 	javax/swing/ButtonModel.java,
+ 	javax/swing/CellEditor.java,
+ 	javax/swing/CellRendererPane.java,
+ 	javax/swing/DefaultBoundedRangeModel.java,
+ 	javax/swing/DefaultButtonModel.java,
+ 	javax/swing/DefaultCellEditor.java,
+ 	javax/swing/DefaultDesktopManager.java,
+ 	javax/swing/DefaultListCellRenderer.java,
+ 	javax/swing/DefaultListSelectionModel.java,
+ 	javax/swing/DefaultSingleSelectionModel.java,
+ 	javax/swing/GrayFilter.java,
+ 	javax/swing/InputMap.java,
+ 	javax/swing/JApplet.java,
+ 	javax/swing/JCheckBoxMenuItem.java,
+ 	javax/swing/JColorChooser.java,
+ 	javax/swing/JComboBox.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JDesktopPane.java,
+ 	javax/swing/JDialog.java,
+ 	javax/swing/JEditorPane.java,
+ 	javax/swing/JFileChooser.java,
+ 	javax/swing/JFormattedTextField.java,
+ 	javax/swing/JFrame.java,
+ 	javax/swing/JInternalFrame.java,
+ 	javax/swing/JLabel.java,
+ 	javax/swing/JLayeredPane.java,
+ 	javax/swing/JList.java,
+ 	javax/swing/JMenu.java,
+ 	javax/swing/JMenuBar.java,
+ 	javax/swing/JMenuItem.java,
+ 	javax/swing/JOptionPane.java,
+ 	javax/swing/JPanel.java,
+ 	javax/swing/JPasswordField.java,
+ 	javax/swing/JPopupMenu.java,
+ 	javax/swing/JRadioButtonMenuItem.java,
+ 	javax/swing/JRootPane.java,
+ 	javax/swing/JSpinner.java,
+ 	javax/swing/JSplitPane.java,
+ 	javax/swing/JTabbedPane.java,
+ 	javax/swing/JTable.java,
+ 	javax/swing/JTextArea.java,
+ 	javax/swing/JTextPane.java,
+ 	javax/swing/JToggleButton.java,
+ 	javax/swing/JToolBar.java,
+ 	javax/swing/JToolTip.java,
+ 	javax/swing/JTree.java,
+ 	javax/swing/JViewport.java,
+ 	javax/swing/ListModel.java,
+ 	javax/swing/LookAndFeel.java,
+ 	javax/swing/MenuSelectionManager.java,
+ 	javax/swing/ProgressMonitorInputStream.java,
+ 	javax/swing/RepaintManager.java,
+ 	javax/swing/RootPaneContainer.java,
+ 	javax/swing/ScrollPaneLayout.java,
+ 	javax/swing/SpringLayout.java,
+ 	javax/swing/SwingUtilities.java,
+ 	javax/swing/Timer.java,
+ 	javax/swing/ToolTipManager.java,
+ 	javax/swing/UIDefaults.java,
+ 	javax/swing/UIManager.java,
+ 	javax/swing/border/MatteBorder.java,
+ 	javax/swing/colorchooser/AbstractColorChooserPanel.java,
+ 	javax/swing/colorchooser/ColorSelectionModel.java,
+ 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
+ 	javax/swing/colorchooser/DefaultHSBChooserPanel.java,
+ 	javax/swing/colorchooser/DefaultPreviewPanel.java,
+ 	javax/swing/colorchooser/DefaultRGBChooserPanel.java,
+ 	javax/swing/colorchooser/DefaultSwatchChooserPanel.java,
+ 	javax/swing/event/AncestorEvent.java,
+ 	javax/swing/event/HyperlinkEvent.java,
+ 	javax/swing/event/InternalFrameEvent.java,
+ 	javax/swing/event/MenuDragMouseEvent.java,
+ 	javax/swing/event/TableColumnModelEvent.java,
+ 	javax/swing/event/TableModelEvent.java,
+ 	javax/swing/event/TreeExpansionEvent.java,
+ 	javax/swing/event/TreeModelEvent.java,
+ 	javax/swing/event/TreeSelectionEvent.java,
+ 	javax/swing/event/TreeWillExpandListener.java,
+ 	javax/swing/event/UndoableEditEvent.java,
+ 	javax/swing/filechooser/FileView.java,
+ 	javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/ComponentUI.java,
+ 	javax/swing/plaf/FileChooserUI.java,
+ 	javax/swing/plaf/IconUIResource.java,
+ 	javax/swing/plaf/ListUI.java,
+ 	javax/swing/plaf/PopupMenuUI.java,
+ 	javax/swing/plaf/SplitPaneUI.java,
+ 	javax/swing/plaf/TabbedPaneUI.java,
+ 	javax/swing/plaf/TextUI.java,
+ 	javax/swing/plaf/TreeUI.java,
+ 	javax/swing/plaf/basic/BasicArrowButton.java,
+ 	javax/swing/plaf/basic/BasicBorders.java,
+ 	javax/swing/plaf/basic/BasicButtonUI.java,
+ 	javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicColorChooserUI.java,
+ 	javax/swing/plaf/basic/BasicComboBoxEditor.java,
+ 	javax/swing/plaf/basic/BasicComboBoxRenderer.java,
+ 	javax/swing/plaf/basic/BasicComboBoxUI.java,
+ 	javax/swing/plaf/basic/BasicComboPopup.java,
+ 	javax/swing/plaf/basic/BasicDesktopIconUI.java,
+ 	javax/swing/plaf/basic/BasicDesktopPaneUI.java,
+ 	javax/swing/plaf/basic/BasicIconFactory.java,
+ 	javax/swing/plaf/basic/BasicInternalFrameTitlePane.java,
+ 	javax/swing/plaf/basic/BasicInternalFrameUI.java,
+ 	javax/swing/plaf/basic/BasicListUI.java,
+ 	javax/swing/plaf/basic/BasicLookAndFeel.java,
+ 	javax/swing/plaf/basic/BasicMenuBarUI.java,
+ 	javax/swing/plaf/basic/BasicMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicMenuUI.java,
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.java,
+ 	javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java,
+ 	javax/swing/plaf/basic/BasicPopupMenuUI.java,
+ 	javax/swing/plaf/basic/BasicProgressBarUI.java,
+ 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicRootPaneUI.java,
+ 	javax/swing/plaf/basic/BasicScrollBarUI.java,
+ 	javax/swing/plaf/basic/BasicSeparatorUI.java,
+ 	javax/swing/plaf/basic/BasicSliderUI.java,
+ 	javax/swing/plaf/basic/BasicSpinnerUI.java,
+ 	javax/swing/plaf/basic/BasicSplitPaneDivider.java,
+ 	javax/swing/plaf/basic/BasicSplitPaneUI.java,
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
+ 	javax/swing/plaf/basic/BasicTableHeaderUI.java,
+ 	javax/swing/plaf/basic/BasicTableUI.java,
+ 	javax/swing/plaf/basic/BasicTextAreaUI.java,
+ 	javax/swing/plaf/basic/BasicTextFieldUI.java,
+ 	javax/swing/plaf/basic/BasicTextUI.java,
+ 	javax/swing/plaf/basic/BasicToolBarSeparatorUI.java,
+ 	javax/swing/plaf/basic/BasicToolBarUI.java,
+ 	javax/swing/plaf/basic/BasicToolTipUI.java,
+ 	javax/swing/plaf/basic/BasicTreeUI.java,
+ 	javax/swing/plaf/basic/BasicViewportUI.java,
+ 	javax/swing/plaf/basic/ComboPopup.java,
+ 	javax/swing/table/AbstractTableModel.java,
+ 	javax/swing/table/DefaultTableCellRenderer.java,
+ 	javax/swing/table/DefaultTableColumnModel.java,
+ 	javax/swing/table/DefaultTableModel.java,
+ 	javax/swing/table/JTableHeader.java,
+ 	javax/swing/table/TableCellEditor.java,
+ 	javax/swing/table/TableCellRenderer.java,
+ 	javax/swing/table/TableColumn.java,
+ 	javax/swing/table/TableColumnModel.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/Caret.java,
+ 	javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/DefaultEditorKit.java,
+ 	javax/swing/text/DefaultHighlighter.java,
+ 	javax/swing/text/EditorKit.java,
+ 	javax/swing/text/JTextComponent.java,
+ 	javax/swing/text/LayeredHighlighter.java,
+ 	javax/swing/text/PasswordView.java,
+ 	javax/swing/text/SimpleAttributeSet.java,
+ 	javax/swing/text/StyleConstants.java,
+ 	javax/swing/text/StyleContext.java,
+ 	javax/swing/text/StyledEditorKit.java,
+ 	javax/swing/text/TextAction.java,
+ 	javax/swing/text/View.java,
+ 	javax/swing/tree/AbstractLayoutCache.java,
+ 	javax/swing/tree/DefaultTreeCellRenderer.java,
+ 	javax/swing/tree/DefaultTreeModel.java,
+ 	javax/swing/tree/DefaultTreeSelectionModel.java,
+ 	javax/swing/tree/FixedHeightLayoutCache.java,
+ 	javax/swing/tree/TreeCellRenderer.java,
+ 	javax/swing/tree/TreeSelectionModel.java,
+ 	javax/swing/tree/VariableHeightLayoutCache.java,
+ 	javax/swing/undo/AbstractUndoableEdit.java,
+ 	javax/swing/undo/UndoableEditSupport.java:
+ 	Imports cleaned up.
+ 
+ 2004-10-22  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c:
+ 	New File.
+ 	(nativeGetNumFontsFamilies) New function.
+ 	(nativeGetFontFamilies) Likewise.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
+ 	(getAvailableFontFamilyNames): Implement.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h:
+ 	New file.
+ 	* include/gnu_java_awt_peer_gtk_GtkButtonPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkLabelPeer.h: Regenerated,
+ 	* include/Makefile.am:
+ 	Added gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h.
+ 	* native/jni/gtk-peer/Makefile.am:
+ 	Added gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c.
+ 
+ 2004-10-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java
+ 	(setStandardAttributes(String,Map)): If size attribute doesn't
+ 	exist, default to size 12.  Clamp size value to a minimum of 1.
+ 
+ 2004-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(getLabel): Added @deprecated tag.
+ 	(setLabel): Likewise.
+ 	* javax/swing/FocusManager.java
+ 	(disableSwingFocusManager): Likewise.
+ 	(isFocusManagerEnabled): Likewise.
+ 	* javax/swing/JComponent.java
+ 	(isManagingFocus): Added version to @deprecated tag.
+ 	(getNextFocusableComponent): Moved @deprecated tag to bottom of
+ 	javadoc.
+ 	(getConditionForKeyStroke): Likewise.
+ 	(getActionForKeyStroke): Likewise.
+ 	* javax/swing/JDesktopPane.java
+ 	(LIVE_DRAG_MODE): Added @specnote tag.
+ 	(OUTLINE_DRAG_MODE): Likewise.
+ 	* javax/swing/JInternalFrame.java
+ 	(MENU_BAR_PROPERTY): Fixed value.
+ 	(getMenuBar): Added @deprecated tag.
+ 	(setMenuBar): Likewise.
+ 	* javax/swing/JViewport.java
+ 	(isBackingStoreEnabled): Likewise.
+ 	(setBackingStoreEnabled): Likewise.
+ 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java
+ 	(closeKey): Likewise.
+ 	(maximizeKey): Likewise.
+ 	(minimizeKey): Likewise.
+ 	(navigateKey): Likewise.
+ 	(navigateKey2): Likewise.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java
+ 	(openMenuKey): Likewise.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(keyboardDownRightListener): Likewise.
+ 	(keyboardEndListener): Likewise.
+ 	(keyboardHomeListener): Likewise.
+ 	(keyboardResizeToggleListener): Likewise.
+ 	(keyboardUpLeftListener): Likewise.
+ 	(dividerResizeToggleKey): Likewise.
+ 	(downKey): Likewise.
+ 	(endKey): Likewise.
+ 	(homeKey): Likewise.
+ 	(leftKey): Likewise.
+ 	(rightKey): Likewise.
+ 	(upKey): Likewise.
+ 	(createKeyboardUpLeftListener): Likewise.
+ 	(createKeyboardDownRightListener): Likewise.
+ 	(createKeyboardHomeListener): Likewise.
+ 	(createKeyboardEndListener): Likewise.
+ 	(createKeyboardResizeToggleListener): Likewise.
+ 	(getDividerBorderSize): Likewise.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(downKey): Likewise.
+ 	(leftKey): Likewise.
+ 	(rightKey): Likewise.
+ 	(upKey): Likewise.
+ 
+ 2004-10-22  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Date.java
+ 	Added missing documentation.
+ 	
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Container.java,
+ 	java/awt/Font.java,
+ 	java/awt/font/TextLayout.java,
+ 	java/lang/ClassLoader.java,
+ 	java/lang/Process.java,
+ 	java/lang/System.java,
+ 	java/util/zip/CheckedInputStream.java,
+ 	java/util/zip/InflaterInputStream.java,
+ 	java/util/zip/ZipFile.java,
+ 	java/util/zip/ZipInputStream.java:
+ 	Import cleanups.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetworkInterface.java,
+ 	java/text/Format.java,
+ 	javax/security/auth/x500/X500Principal.java,
+ 	javax/security/auth/x500/X500PrivateCredential.java,
+ 	javax/security/cert/X509CertBridge.java,
+ 	javax/security/sasl/Sasl.java,
+ 	javax/sql/XAConnection.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/net/ssl/HandshakeCompletedEvent.java,
+ 	javax/net/ssl/KeyManagerFactory.java,
+ 	javax/net/ssl/SSLContext.java,
+ 	javax/net/ssl/SSLServerSocketFactory.java,
+ 	javax/net/ssl/SSLSession.java,
+ 	javax/net/ssl/SSLSocketFactory.java,
+ 	javax/net/ssl/TrustManagerFactory.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/directory/BasicAttribute.java,
+ 	javax/naming/directory/BasicAttributes.java,
+ 	javax/naming/directory/InitialDirContext.java,
+ 	javax/naming/event/NamingEvent.java,
+ 	javax/naming/ldap/ControlFactory.java,
+ 	javax/naming/ldap/ExtendedRequest.java,
+ 	javax/naming/ldap/InitialLdapContext.java,
+ 	javax/naming/ldap/LdapReferralException.java,
+ 	javax/naming/spi/DirObjectFactory.java,
+ 	javax/naming/spi/DirStateFactory.java,
+ 	javax/naming/spi/DirectoryManager.java,
+ 	javax/naming/spi/InitialContextFactory.java,
+ 	javax/naming/spi/InitialContextFactoryBuilder.java,
+ 	javax/naming/spi/NamingManager.java,
+ 	javax/naming/spi/ObjectFactory.java,
+ 	javax/naming/spi/ObjectFactoryBuilder.java,
+ 	javax/naming/spi/StateFactory.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/event/IIOReadProgressListener.java,
+ 	javax/imageio/event/IIOReadUpdateListener.java,
+ 	javax/imageio/event/IIOReadWarningListener.java,
+ 	javax/imageio/event/IIOWriteProgressListener.java,
+ 	javax/imageio/event/IIOWriteWarningListener.java,
+ 	javax/imageio/metadata/IIOMetadataFormat.java,
+ 	javax/imageio/stream/FileCacheImageInputStream.java,
+ 	javax/imageio/stream/FileCacheImageOutputStream.java,
+ 	javax/imageio/stream/ImageInputStreamImpl.java:
+ 	Import cleanup.
+ 	* javax/imageio/metadata/package.html: New file.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/crypto/Cipher.java,
+ 	javax/crypto/EncryptedPrivateKeyInfo.java,
+ 	javax/crypto/ExemptionMechanism.java,
+ 	javax/crypto/KeyAgreement.java,
+ 	javax/crypto/KeyGenerator.java,
+ 	javax/crypto/Mac.java,
+ 	javax/crypto/SecretKeyFactory.java,
+ 	javax/crypto/SecretKeyFactorySpi.java,
+ 	javax/crypto/spec/SecretKeySpec.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AlgorithmParameterGenerator.java,
+ 	java/security/AlgorithmParameters.java,
+ 	java/security/AlgorithmParametersSpi.java,
+ 	java/security/AllPermission.java,
+ 	java/security/BasicPermission.java,
+ 	java/security/Certificate.java,
+ 	java/security/CodeSource.java,
+ 	java/security/DigestInputStream.java,
+ 	java/security/DigestOutputStream.java,
+ 	java/security/GuardedObject.java,
+ 	java/security/KeyFactory.java,
+ 	java/security/KeyFactorySpi.java,
+ 	java/security/KeyPairGenerator.java,
+ 	java/security/KeyStore.java,
+ 	java/security/KeyStoreSpi.java,
+ 	java/security/Permissions.java,
+ 	java/security/Security.java,
+ 	java/security/Signature.java,
+ 	java/security/UnresolvedPermission.java,
+ 	java/security/cert/CertPathBuilder.java,
+ 	java/security/cert/CertPathValidator.java,
+ 	java/security/cert/CertStore.java,
+ 	java/security/cert/Certificate.java,
+ 	java/security/cert/CertificateFactory.java,
+ 	java/security/cert/PolicyQualifierInfo.java,
+ 	java/security/cert/TrustAnchor.java,
+ 	java/security/cert/X509CRL.java,
+ 	java/security/cert/X509CRLSelector.java,
+ 	java/security/cert/X509CertSelector.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/MarshalledObject.java,
+ 	java/rmi/Naming.java,
+ 	java/rmi/activation/Activatable.java,
+ 	java/rmi/activation/ActivationGroup.java,
+ 	java/rmi/activation/ActivationGroupDesc.java,
+ 	java/rmi/activation/ActivationInstantiator.java,
+ 	java/rmi/activation/ActivationMonitor.java,
+ 	java/rmi/activation/ActivationSystem.java,
+ 	java/rmi/activation/Activator.java,
+ 	java/rmi/registry/LocateRegistry.java,
+ 	java/rmi/registry/Registry.java,
+ 	java/rmi/server/LogStream.java,
+ 	java/rmi/server/ObjID.java,
+ 	java/rmi/server/RMIClientSocketFactory.java,
+ 	java/rmi/server/RMIServerSocketFactory.java,
+ 	java/rmi/server/RMISocketFactory.java,
+ 	java/rmi/server/RemoteCall.java,
+ 	java/rmi/server/RemoteServer.java,
+ 	java/rmi/server/ServerRef.java,
+ 	java/rmi/server/UID.java,
+ 	java/rmi/server/UnicastRemoteObject.java:
+ 	Import cleanup.
+ 
+ 2004-10-21  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* autogen.sh: Invoke $ACLOCAL with the flag "-I .".
+ 
+ 2004-10-20  Andrew John Hughes <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Currency.java:
+ 	Documented variables and methods more fully.
+ 	Caches the currency instances, so that a request
+ 	for a locale, l, only ever returns the same
+ 	instance (i.e. successive calls to getInstance(l)
+ 	are reference equivalent (==)).
+ 	
+ 2004-10-20  Andrew John Hughes <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Collections.java:
+ 	Added documentation.
+ 	* java/util/SortedMap.java:
+ 	Clarified some method examples.
+ 	* java/util/SortedSet.java:
+ 	Clarified some method examples.
+ 	
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/ColorSupported.java,
+ 	javax/print/attribute/standard/Compression.java,
+ 	javax/print/attribute/standard/Copies.java,
+ 	javax/print/attribute/standard/CopiesSupported.java,
+ 	javax/print/attribute/standard/DateTimeAtCompleted.java,
+ 	javax/print/attribute/standard/DateTimeAtCreation.java,
+ 	javax/print/attribute/standard/DateTimeAtProcessing.java,
+ 	javax/print/attribute/standard/DocumentName.java,
+ 	javax/print/attribute/standard/Fidelity.java,
+ 	javax/print/attribute/standard/Finishings.java,
+ 	javax/print/attribute/standard/JobHoldUntil.java,
+ 	javax/print/attribute/standard/JobImpressions.java,
+ 	javax/print/attribute/standard/JobImpressionsCompleted.java,
+ 	javax/print/attribute/standard/JobImpressionsSupported.java,
+ 	javax/print/attribute/standard/JobKOctets.java,
+ 	javax/print/attribute/standard/JobKOctetsProcessed.java,
+ 	javax/print/attribute/standard/JobKOctetsSupported.java,
+ 	javax/print/attribute/standard/JobMediaSheets.java,
+ 	javax/print/attribute/standard/JobMediaSheetsCompleted.java,
+ 	javax/print/attribute/standard/JobMediaSheetsSupported.java,
+ 	javax/print/attribute/standard/JobMessageFromOperator.java,
+ 	javax/print/attribute/standard/JobName.java,
+ 	javax/print/attribute/standard/JobOriginatingUserName.java,
+ 	javax/print/attribute/standard/JobPriority.java,
+ 	javax/print/attribute/standard/JobPrioritySupported.java,
+ 	javax/print/attribute/standard/JobSheets.java,
+ 	javax/print/attribute/standard/JobState.java,
+ 	javax/print/attribute/standard/JobStateReason.java,
+ 	javax/print/attribute/standard/JobStateReasons.java,
+ 	javax/print/attribute/standard/Media.java,
+ 	javax/print/attribute/standard/MultipleDocumentHandling.java,
+ 	javax/print/attribute/standard/NumberOfDocuments.java,
+ 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
+ 	javax/print/attribute/standard/NumberUp.java,
+ 	javax/print/attribute/standard/NumberUpSupported.java,
+ 	javax/print/attribute/standard/OrientationRequested.java,
+ 	javax/print/attribute/standard/OutputDeviceAssigned.java,
+ 	javax/print/attribute/standard/PDLOverrideSupported.java,
+ 	javax/print/attribute/standard/PageRanges.java,
+ 	javax/print/attribute/standard/PagesPerMinute.java,
+ 	javax/print/attribute/standard/PagesPerMinuteColor.java,
+ 	javax/print/attribute/standard/PrintQuality.java,
+ 	javax/print/attribute/standard/PrinterInfo.java,
+ 	javax/print/attribute/standard/PrinterIsAcceptingJobs.java,
+ 	javax/print/attribute/standard/PrinterLocation.java,
+ 	javax/print/attribute/standard/PrinterMakeAndModel.java,
+ 	javax/print/attribute/standard/PrinterMessageFromOperator.java,
+ 	javax/print/attribute/standard/PrinterMoreInfo.java,
+ 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.java,
+ 	javax/print/attribute/standard/PrinterName.java,
+ 	javax/print/attribute/standard/PrinterStateReason.java,
+ 	javax/print/attribute/standard/PrinterStateReasons.java,
+ 	javax/print/attribute/standard/PrinterURI.java,
+ 	javax/print/attribute/standard/ReferenceUriSchemesSupported.java,
+ 	javax/print/attribute/standard/RequestingUserName.java:
+ 	Reorganized imports and removed redundant final modifiers.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/ImageReaderSpi.java
+ 	(isOwnReader): New method.
+ 	* javax/imageio/spi/ImageWriterSpi.java
+ 	(isOwnWriter): Likewise.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/security/sasl/SaslClient.java,
+ 	javax/security/sasl/SaslClientFactory.java,
+ 	javax/security/sasl/SaslException.java,
+ 	javax/security/sasl/SaslServer.java,
+ 	javax/security/sasl/SaslServerFactory.java:
+ 	Remvoed CVS tags.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/security/auth/login/NullConfiguration.java,
+ 	javax/security/auth/x500/X500Principal.java,
+ 	javax/security/cert/X509Certificate.java,
+ 	javax/security/sasl/AuthenticationException.java,
+ 	javax/security/sasl/AuthorizeCallback.java,
+ 	javax/security/sasl/RealmCallback.java,
+ 	javax/security/sasl/RealmChoiceCallback.java,
+ 	javax/security/sasl/Sasl.java,
+ 	javax/security/sasl/SaslClient.java,
+ 	javax/security/sasl/SaslClientFactory.java,
+ 	javax/security/sasl/SaslException.java,
+ 	javax/security/sasl/SaslServer.java,
+ 	javax/security/sasl/SaslServerFactory.java:
+ 	Cleaned up import statements and copyright notices.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageWriter.java
+ 	(convertImageMetadata): New abstract method.
+ 	(convertStreamMetadata): Likewise.
+ 	(write): Likewise.
+ 	* javax/imageio/stream/FileCacheImageInputStream.java
+ 	(close): Fixed setting of stream to null.
+ 	(checkStreamClosed): Throws IOException.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/rmic/RMIC.java: Reformatted.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/stream/FileCacheImageInputStream.java,
+ 	javax/imageio/stream/FileCacheImageOutputStream.java,
+ 	javax/imageio/stream/FileImageInputStream.java,
+ 	javax/imageio/stream/FileImageOutputStream.java,
+ 	javax/imageio/stream/MemoryCacheImageInputStream.java,
+ 	javax/imageio/stream/MemoryCacheImageOutputStream.java:
+ 	New files.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java:
+ 	Fixed @author tag to be HTML compatible.
+ 	* java/sql/Timestamp.java,
+ 	java/text/AttributedCharacterIterator.java,
+ 	java/text/AttributedString.java,
+ 	java/util/zip/CheckedOutputStream.java,
+ 	java/util/zip/DeflaterOutputStream.java,
+ 	java/util/zip/GZIPInputStream.java,
+ 	java/util/zip/ZipFile.java,
+ 	javax/crypto/Cipher.java,
+ 	javax/crypto/ExemptionMechanismException.java,
+ 	javax/crypto/SecretKey.java,
+ 	javax/crypto/SecretKeyFactory.java,
+ 	javax/naming/directory/ModificationItem.java,
+ 	javax/naming/directory/SearchControls.java,
+ 	javax/naming/event/NamingListener.java,
+ 	javax/naming/ldap/Control.java,
+ 	javax/naming/ldap/ExtendedResponse.java,
+ 	javax/net/ssl/SSLSocketFactory.java:
+ 	Reorganized imports and fixed copyright headers.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/logging/ConsoleHandler.java,
+ 	java/util/logging/ErrorManager.java,
+ 	java/util/logging/FileHandler.java,
+ 	java/util/logging/Filter.java,
+ 	java/util/logging/Formatter.java,
+ 	java/util/logging/Handler.java,
+ 	java/util/logging/Level.java,
+ 	java/util/logging/LogManager.java,
+ 	java/util/logging/LogRecord.java,
+ 	java/util/logging/Logger.java,
+ 	java/util/logging/LoggingPermission.java,
+ 	java/util/logging/MemoryHandler.java,
+ 	java/util/logging/SimpleFormatter.java,
+ 	java/util/logging/SocketHandler.java,
+ 	java/util/logging/StreamHandler.java,
+ 	java/util/logging/XMLFormatter.java:
+ 	Standardized copyrigth header.
+ 
+ 2004-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AlgorithmParameterGenerator.java,
+ 	java/security/AlgorithmParameters.java,
+ 	java/security/DigestInputStream.java,
+ 	java/security/Identity.java,
+ 	java/security/KeyFactory.java,
+ 	java/security/KeyPairGenerator.java,
+ 	java/security/KeyStore.java,
+ 	java/security/MessageDigest.java,
+ 	java/security/MessageDigestSpi.java,
+ 	java/security/Policy.java,
+ 	java/security/SecureRandom.java,
+ 	java/security/Security.java,
+ 	java/security/Signature.java,
+ 	java/security/SignatureSpi.java,
+ 	java/security/cert/CertPathBuilder.java,
+ 	java/security/cert/CertPathValidator.java,
+ 	java/security/cert/CertStore.java,
+ 	java/security/cert/Certificate.java,
+ 	java/security/cert/CertificateFactory.java,
+ 	java/security/cert/PolicyQualifierInfo.java,
+ 	java/security/cert/TrustAnchor.java,
+ 	java/security/cert/X509CRL.java,
+ 	java/security/cert/X509CRLEntry.java,
+ 	java/security/cert/X509Certificate.java,
+ 	java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java:
+ 	Import statements reorganized, some little formatting issues,
+ 	used java-style array declarations, added comments in empty catch
+ 	blocks.
+ 
+ 2004-10-19  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java: Added imports
+ 	that I forgot in the previous commit.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/RuleBasedCollator.java:
+ 	Reorganized import statements.
+ 
+ 2004-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/provider/DSAParameters.java:
+ 	Fixed copyright years.
+ 
+ 2004-10-17  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ClassLoader.java
+ 	(getExtClassLoaderUrls): New method.
+ 	(getSystemClassLoaderUrls): New method.
+ 	(defaultGetSystemClassLoader): New method.
+ 	(getSystemProperty): New method.
+ 	* vm/reference/java/lang/VMClassLoader.java
+ 	(getResource): Changed to provide default implementation.
+ 	(getResources): Likewise.
+ 	(getSystemClassLoader): Removed broken default implementation
+ 	and changed to call ClassLoader.defaultGetSystemClassLoader.
+ 
+ 2004-10-17  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/Calendar.java
+ 	(setTimeInMillis): Added call to clear, removed computeFields call.
+ 	* java/util/Date.java
+ 	(Date(int,int,int,int,int,int)): Removed workaround for
+ 	GregorianCalendar bug.
+ 	* java/util/GregorianCalendar.java
+ 	(GregorianCalendar): Chained all constructors to a (new)
+ 	common constructor.
+ 	(computeTime): Fixed support for lenient month treatment.
+ 	(getLinearDay): Return long instead of int.
+ 	(calculateDay): Added fields argument and changed day argument
+ 	to long.
+ 
+ 2004-10-16  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(setNativeBounds): Set GtkEventBox, GtkButton and GtkLabel size
+ 	requests.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(setNativeBounds): Make package private.  Set size request even
+ 	if GTK parent is NULL.
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
+ 	(setNativeBounds): Set GtkEventBox and GtkLabel size requests.
+ 
+ 2004-10-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* vm/reference/java/lang/reflect/Method.java
+ 	(toString): Fix names of arguments.
+ 	(getUserTypeName): New Method.
+ 
+ 2004-10-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* autogen.sh: Fixed check for AUTOGEN_SUBDIR_MODE.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/activation/ActivationSystem.java
+ 	(SYSTEM_PORT): Initialize with correct port number.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/server/RemoteRef.java
+ 	(serialVersionUID): Revert latest change to it.
+ 	* java/rmi/server/ServerRef.java
+ 	(serialVersionUID): Revert latest change to it.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(InetAddress): Don't initialize address field. Its only used during
+ 	serialization.
+ 	(toString): Simplified.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/MarshalledObject.java,
+ 	java/rmi/Naming.java,
+ 	java/rmi/RMISecurityManager.java,
+ 	java/rmi/Remote.java,
+ 	java/rmi/activation/Activatable.java,
+ 	java/rmi/activation/ActivationDesc.java,
+ 	java/rmi/activation/ActivationGroup.java,
+ 	java/rmi/activation/ActivationGroupDesc.java,
+ 	java/rmi/activation/ActivationGroupID.java,
+ 	java/rmi/activation/ActivationID.java,
+ 	java/rmi/activation/ActivationInstantiator.java,
+ 	java/rmi/activation/ActivationMonitor.java,
+ 	java/rmi/activation/ActivationSystem.java,
+ 	java/rmi/activation/Activator.java,
+ 	java/rmi/dgc/DGC.java,
+ 	java/rmi/dgc/Lease.java,
+ 	java/rmi/dgc/VMID.java,
+ 	java/rmi/registry/LocateRegistry.java,
+ 	java/rmi/registry/Registry.java,
+ 	java/rmi/registry/RegistryHandler.java,
+ 	java/rmi/server/LoaderHandler.java,
+ 	java/rmi/server/LogStream.java,
+ 	java/rmi/server/ObjID.java,
+ 	java/rmi/server/Operation.java,
+ 	java/rmi/server/RMIClassLoader.java,
+ 	java/rmi/server/RMIClassLoaderSpi.java,
+ 	java/rmi/server/RMIClientSocketFactory.java,
+ 	java/rmi/server/RMIFailureHandler.java,
+ 	java/rmi/server/RMIServerSocketFactory.java,
+ 	java/rmi/server/RMISocketFactory.java,
+ 	java/rmi/server/RemoteCall.java,
+ 	java/rmi/server/RemoteObject.java,
+ 	java/rmi/server/RemoteRef.java,
+ 	java/rmi/server/RemoteServer.java,
+ 	java/rmi/server/RemoteStub.java,
+ 	java/rmi/server/ServerRef.java,
+ 	java/rmi/server/Skeleton.java,
+ 	java/rmi/server/SkeletonMismatchException.java,
+ 	java/rmi/server/UID.java,
+ 	java/rmi/server/UnicastRemoteObject.java,
+ 	java/rmi/server/Unreferenced.java:
+ 	Fixed file headers and import statements.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/HttpURLConnection.java: Removed redundant parenthesis.
+ 	* java/net/MimeTypeMapper.java: Reformatted.
+ 	* java/net/NetworkInterface.java: Added comment to empty catch block.
+ 	* java/net/PasswordAuthentication.java: Reformatted.
+ 	* java/net/ServerSocket.java: Added comment to empty catch block.
+ 	* java/net/Socket.java: Reworked import statements.
+ 	* java/net/SocketPermission.java: Removed redundant parenthesis.
+ 	* java/net/URI.java: Removed redundant parenthesis.
+ 	* java/net/URL.java: Reworked import statements.
+ 	* java/net/URLStreamHandler.java: Removed redundant semicolon.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Inet4Address.java
+ 	(writeReplace): Use two-argument constructor of InetAddress.
+ 	(Inet4Address): Remove unused constructors. Use two-argument
+ 	constructor of InetAddress in remaining constructor.
+ 	* java/net/Inet6Address.java
+ 	(Inet6Address): Use two-argument constructor of InetAddress.
+ 	* java/net/InetAddress.java
+ 	(LOCALHOST): New static field to store object for localhost.
+ 	(static): Initialize LOCALHOST.
+ 	(hostname_alias): Removed.
+ 	(InetAdress): Removed hostname_alias argument.
+ 	(getHostName): Don't handle alias anymore.
+ 	(getCanonicalHostName): New method.
+ 	(toString): Don't handle alias anymore.
+ 	(getByName): Simply call getAllByName() and return its first result
+ 	entry.
+ 	(getAllByName): Handle null argument properly.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/charset/UTF_16Encoder.java
+ 	(UTF_16Encoder): Fixed maxBytesPerChar handling.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Object.java (equals): Rename 'o' to 'obj'.
+ 	* java/lang/Runtime.java, java/lang/Thread.java,
+ 	java/lang/ThreadLocal.java, java/lang/Void.java:
+ 	Improved javadocs to be valid XHTML.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/reflect/Proxy.java: Improved javadocs.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/reflect/AccessibleObject.java
+ 	(checkPermission): Removed redundant final modifier.
+ 	(secureSetAccessible): Likewise.
+ 	* java/lang/reflect/Proxy.java:
+ 	Reworked import statements.
+ 	(generate): Removed redundant final modifier.
+ 	* java/lang/reflect/ReflectPermission.java:
+ 	Reorder package declaration and import statement.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteOrder.java,
+ 	java/nio/MappedByteBuffer.java,
+ 	java/nio/MappedByteBufferImpl.java,
+ 	java/nio/channels/Channels.java,
+ 	java/nio/channels/spi/SelectorProvider.java,
+ 	java/nio/charset/Charset.java:
+ 	Cleanup.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Removed CNI "support".
+ 	* native/Makefile.am (SUBDIRS): Don't compile cni subdir
+ 	* native/cni/.cvsignore, native/cni/Makefile.am: Removed.
+ 
+ 2004-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* autogen.sh: Replaced with a GNOME-like script that aborts when the
+ 	versions of autoconf, automake or libtool are not sufficient.
+ 
+ 2004-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/ByteLookupTable.java
+ 	(ByteLookupTable) :Fixed HTML entities in javadocs.
+ 	(lookupPixel): Fix case when dst is null.
+ 	* java/awt/image/ShortLookupTable.java
+ 	(ShortLookupTable) :Fixed HTML entities in javadocs.
+ 	(lookupPixel): Fix case when dst is null.
+ 
+ 2004-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/BitwiseXORComposite.java,
+ 	gnu/java/awt/ClasspathToolkit.java,
+ 	gnu/java/awt/image/XBMDecoder.java,
+ 	gnu/java/awt/peer/GLightweightPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkGlyphVector.java,
+ 	gnu/java/io/EncodingManager.java,
+ 	gnu/java/net/PlainDatagramSocketImpl.java,
+ 	gnu/java/net/protocol/http/Connection.java,
+ 	gnu/java/nio/NIODatagramSocket.java,
+ 	gnu/java/nio/ServerSocketChannelImpl.java,
+ 	gnu/java/nio/charset/UTF_16.java,
+ 	gnu/java/nio/charset/UTF_16BE.java,
+ 	gnu/java/nio/charset/UTF_16LE.java,
+ 	gnu/java/rmi/RMIMarshalledObjectOutputStream.java,
+ 	gnu/java/rmi/rmic/RMIC.java,
+ 	gnu/java/rmi/server/RMIHashes.java,
+ 	gnu/java/rmi/server/RMIObjectInputStream.java,
+ 	gnu/java/rmi/server/RMIObjectOutputStream.java,
+ 	gnu/java/rmi/server/UnicastConnection.java,
+ 	gnu/java/rmi/server/UnicastConnectionManager.java,
+ 	gnu/java/rmi/server/UnicastRemoteCall.java,
+ 	gnu/java/rmi/server/UnicastServer.java,
+ 	gnu/java/rmi/server/UnicastServerRef.java,
+ 	gnu/java/security/OID.java,
+ 	gnu/java/security/provider/DSAParameters.java,
+ 	gnu/java/security/provider/DSASignature.java,
+ 	gnu/java/security/x509/X500DistinguishedName.java,
+ 	gnu/java/security/x509/X509CRL.java,
+ 	gnu/javax/rmi/CORBA/DelegateFactory.java,
+ 	gnu/javax/rmi/CORBA/GetDelegateInstanceException.java,
+ 	gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java,
+ 	gnu/javax/rmi/CORBA/StubDelegateImpl.java,
+ 	gnu/javax/rmi/PortableServer.java:
+ 	Reorganized import statements.
+ 
+ 2004-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/beans/ExplicitBeanInfo.java:
+ 	Explicitely import java.awt.Image.
+ 	(getIcon): Fixed off-by-one error.
+ 
+ 2004-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/DataBufferByte.java,
+ 	java/awt/image/DataBufferDouble.java,
+ 	java/awt/image/DataBufferFloat.java,
+ 	java/awt/image/DataBufferInt.java,
+ 	java/awt/image/DataBufferShort.java,
+ 	java/awt/image/DataBufferUShort.java:
+ 	Fix initialization of bankData in constructors.
+ 
+ 2004-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/BindException.java, java/net/ConnectException.java,
+ 	java/net/ContentHandler.java, java/net/ContentHandlerFactory.java,
+ 	java/net/DatagramPacket.java, java/net/DatagramSocket.java,
+ 	java/net/DatagramSocketImpl.java, java/net/DatagramSocketImplFactory.java,
+ 	java/net/FileNameMap.java, java/net/JarURLConnection.java,
+ 	java/net/MalformedURLException.java, java/net/MulticastSocket.java,
+ 	java/net/NoRouteToHostException.java, java/net/PortUnreachableException.java,
+ 	java/net/ProtocolException.java, java/net/SocketException.java,
+ 	java/net/SocketImpl.java, java/net/SocketImplFactory.java,
+ 	java/net/SocketOptions.java, java/net/SocketTimeoutException.java,
+ 	java/net/URISyntaxException.java, java/net/URL.java,
+ 	java/net/URLDecoder.java, java/net/URLEncoder.java,
+ 	java/net/URLStreamHandlerFactory.java, java/net/UnknownHostException.java,
+ 	java/net/UnknownServiceException.java:
+ 	Fixed @author tags to be valid HTML.
+ 
+ 2004-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Character.java, java/lang/Class.java,
+ 	java/lang/Math.java, java/lang/Object.java,
+ 	java/lang/Package.java, java/lang/Runtime.java,
+ 	java/lang/StrictMath.java, java/lang/System.java:
+ 	Reorganized import statements. Reworked modifiers.
+ 	Fix @author tags to be valid HTML.
+ 
+ 2004-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/math/BigDecimal.java, java/math/BigInteger.java:
+ 	Reorganized import statements, removed redundant and reorganized
+ 	modifiers.
+ 
+ 2004-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/GZIPInputStream.java
+ 	(GZIP_MAGIC): Fixed value.
+ 	(readHeader): Fixed GZIP_MAGIC handling.
+ 	* java/util/zip/GZIPOutputStream.java
+ 	(GZIPOutputStream): Likewise.
+ 
+ 2004-10-12  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/SecurityManager.java
+ 	(checkPackageAccess, checkPackageDefinition): Pass complete
+ 	restriction.
+ 	(checkPackageList): Simplified and corrected the code.
+ 
+ 2004-10-12  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/Date.java
+ 	(Date(int,int,int), Date(int,int,int,int,int)): Delegate to other
+ 	constructor.
+ 	(Date(int,int,int,int,int,int)): Fixed to handle out-of-range
+ 	arguments.
+ 	(getTimezoneOffset): Inverted sign.
+ 
+ 2004-10-11  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ClassLoader.java
+ 	(defineClass(String,byte[],int,int,ProtectionDomain)):
+ 	Reverted previous commit.
+ 
+ 2004-10-11  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/ClassLoader.java
+ 	(defineClass(String,byte[],int,int,ProtectionDomain)):
+ 	Added call to SecurityManager.checkPackageDefinition().
+ 
+ 2004-10-11  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/PrintStream.java
+ 	(ForwardStream): New inner class.
+ 	(PrintStream(OutputStream,boolean),
+ 	PrintStream(OutputStream,boolean,String)):
+ 	Changed to use ForwardStream.
+ 	(write(int), write(byte[],int,int)):
+ 	Don't consume thread interrupts.
+ 
+ 2004-10-11  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/logging/LogManager.java
+ 	(findAncestor): Fixed IndexOutOfBoundsException.
+ 
+ 2004-10-11  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/SecurityManager.java
+ 	(checkPackageList): Use AccessController.doPrivileged to get
+ 	security property.
+ 	* java/security/Security.java
+ 	(static): Use AccessController.doPrivileged to get system property.
+ 
+ 2004-10-11  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/awt/EventDispatchThread.java
+ 	(dispatchThreadNum): Removed initializer.
+ 	(EventDispatchThread): Pre-increment dispatchThreadNum.
+ 	* java/awt/Button.java
+ 	(next_button_number): Removed useless initializer.
+ 	* java/awt/Frame.java
+ 	(next_frame_number): Likewise.
+ 	* java/awt/Scrollbar.java
+ 	(next_scrollbar_number): Likewise.
+ 	* java/awt/TextArea.java
+ 	(next_text_number): Likewise.
+ 	* java/io/ObjectInputStream.java
+ 	(dump): Likewise.
+ 	* java/lang/reflect/Proxy.java
+ 	(count): Likewise.
+ 	* java/security/IdentityScope.java
+ 	(systemScope): Likewise.
+ 	* java/security/Policy.java
+ 	(currentPolicy): Likewise.
+ 	* java/util/Timer.java
+ 	(nr): Likewise.
+ 	* java/util/logging/LogRecord.java
+ 	(lastSeqNum): Likewise.
+ 	* javax/naming/spi/NamingManager.java
+ 	(icfb, ofb): Likewise.
+ 	* javax/swing/JDialog.java
+ 	(decorated): Likewise.
+ 	* javax/swing/JFrame.java
+ 	(defaultLookAndFeelDecorated): Likewise.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(offset, regular): Made final.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(DECREASE_HIGHLIGHT, INCREASE_HIGHLIGHT, NO_HIGHLIGHT,
+ 	POSITIVE_SCROLL, NEGATIVE_SCROLL): Made final.	
+ 	* java/util/zip/ZipEntry.java
+ 	(KNOWN_SIZE, KNOWN_CSIZE, KNOWN_CRC, KNOWN_TIME): Made final.
+ 	* java/net/HttpURLConnection.java
+ 	(valid_methods): Made final.	
+ 
+ 2004-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataInputStream.java
+ 	(readUTF): Reorder modifiers.
+ 	* java/io/DataOutputStream.java
+ 	(writeUTF): Likewise.
+ 	* java/io/ObjectInputStream.java
+ 	(GetField): Likewise.
+ 	* java/io/ObjectOutputStream.java
+ 	(PutField): Likewise.
+ 	(BUFFER_SIZE): Likewise.
+ 	* java/io/InputStreamReader.java:
+ 	Merged file header.
+ 
+ 2004-10-10  Sven de Marothy  <sven@physto.se>
+ 
+ 	* native/jni/java-lang/java_lang_Double.c
+ 	(parseDouble): Add handling of NaN/Infinity (bug #10491)
+ 	* java/nio/ByteBufferHelper.java
+ 	(putDouble): Use Double.toRawLongBits instead (bug #9106)
+ 
+ 2004-10-10  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* jni/gtk-peer/gdkfont.h: Mark native_text_layout_state_table extern.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Use
+ 	native_text_layout_state_table here.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/metadata/IIOInvalidTreeException.java,
+ 	javax/imageio/metadata/IIOMetadataFormatImpl.java,
+ 	javax/imageio/metadata/IIOMetadataNode.java:
+ 	New stub files.
+ 
+ 2004-10-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Don't create a link to the VM specific files.
+ 	* include/Makefile.am: Remove vm/current with topsrc_dir vm/reference.
+ 	* lib/Makefile.am: Likewise.
+ 	* lib/gen-classlist.sh.in: Likewise.
+ 	* lib/mkdep.pl.in: Likewise.
+ 
+ 2004-10-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.h: Removed.
+ 	* include/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.h:
+ 	Removed.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/stream/ImageInputStreamImpl.java,
+ 	javax/imageio/stream/ImageOutputStreamImpl.java:
+ 	New files.
+ 
+ 2004-10-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gdkfont.h: Include gtkpeer.h not gtkcairopeer.h.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/server/UnicastConnectionManager.java:
+ 	Fix file header.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS as
+ 	we don't support cross compiling anyway.
+ 
+ 2004-10-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* javax/swing/JList.java (init): Revert accidental commit.
+ 
+ 2004-10-08  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Calendar.java (set): Invalidate DST_OFFSET
+ 	field as a DST boundary may have been crossed.
+ 	* java/util/GregorianCalendar.java (add): Throw 
+ 	IllegalArgumentException on attempt to add to DST_OFFSET or 
+ 	ZONE_OFFSET fields. Update javadoc.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
+ 	Removed.
+ 	* native/jni/gtk-peer/Makefile.am: Removed files.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	java/awt/font/TextLayout.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,
+ 	native/jni/gtk-peer/gtkpeer.h:
+ 	Merged whitespace stuff with java-gui-branch.
+ 
+ 2004-10-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (endValidate):
+ 	Don't call setParentAndBounds on GtkWindowPeers.
+ 
+ 2004-10-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (static): Don't set default keyboard
+ 	focus manager.
+ 	* java/awt/KeyboardFocusManager.java
+ 	(getCurrentKeyboardFocusManager): If current keyboard focus
+ 	manager is null set a default.
+ 
+ 2004-10-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(gtkWidgetSetBackground): New method.
+ 	(block_expose_events_cb): New function.
+ 	(connectSignals): Block the AWT's expose event processing on
+ 	button press and release.
+ 	(gtkSetLabel): Set text on proper widget.
+ 	(gtkWidgetModifyFont): Modify font on proper widget.
+ 	(gtkWidgetSetBackground): Set normal, active and prelight
+ 	colours.
+ 	(gtkWidgetSetForeground): Set forground colour of proper widget.
+ 	(gtkActivate): Activate the correct widget.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (clearRect):
+ 	Only clear rectangle if the backing component is not an event
+ 	box.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(beginNativeRepaintID): New variable.
+ 	(endNativeRepaintID): Likewise.
+ 	(gtkInit): Initialize new fields with method IDs.
+ 	* jni/gtk-peer/gtkpeer.h (beginNativeRepaintID): Declare extern.
+ 	(endNativeRepaintID): Likewise.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkButtonPeer.h: Regenerated.
+ 
+ 2004-10-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (GdkGraphics):
+ 	Call initComponentGraphics or connectSignals depending on
+ 	component's realization status.
+ 	(realize_cb): New function.
+ 	(initComponentGraphics): New method.
+ 	(connectSignals): New method.
+ 	(clipRect): Return immediately if component is not realized.
+ 	(setClip): Likewise.
+ 	(translate): Likewise.
+ 	(drawImage variants): Return false immediately if component is
+ 	not realized.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(connectSignals): New method.
+ 	(GdkGraphics2D): Call initComponentGraphics2D or connectSignals
+ 	depending on component's realization status.  Move other
+ 	initialization calls to ...
+ 	(initComponentGraphics2D): New method.
+ 	(realize_cb): New function.
+ 	(cairoSetMatrix): Return immediately if gr is NULL.
+ 	(cairoNewPath): Likewise.
+ 	(cairoRectangle): Likewise.
+ 	(cairoClip): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetRepaintArea): Remove method.
+ 	(isRealized): New method.
+ 	(GtkComponentPeer): Move setParent, connectJObject and setCursor
+ 	calls to setParentAndBounds.  Call setParentAndBounds.
+ 	(setParentAndBounds): New method.
+ 	(setComponentBounds): Return immediately if bounds are all zero.
+ 	(repaint): Remove call to gtkWidgetRepaintArea.  Return
+ 	immediately if requested paint region is 0x0.
+ 	(setCursor): New method.
+ 	(gtkWidgetSetParent): Only set widget's parent if its parent is
+ 	currently NULL.
+ 	(setNativeBounds): Only set widget's bounds if it has a parent.
+ 	(connectSignals): Don't call gtk_widget_realize.  Connect
+ 	"realize" signal to connect_awt_hook_cb handler.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (isValidating):
+ 	New field.
+ 	(beginValidate): Set isValidating true.
+ 	(endValidate): Set parents and bounds for children first, then
+ 	for this.  Set isValidating false.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(connectJObject): Remove method.
+ 	(connectSignals): Don't call gtk_widget_realize.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(connectJObject): Remove method.
+ 	(connectSignals): Don't call gtk_widget_realize.
+ 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
+ 	(connectJObject): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(connectJObject): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(create): Don't call gtk_widget_realize.
+ 	(connectJObject): Remove method.
+ 	(connectSignals): Don't call gtk_widget_realize.  Connect
+ 	"realize" signal to connect_awt_hook_cb handler.
+ 	(nativeSetBounds): Don't attempt to move GDK window if it is
+ 	NULL.
+ 	* java/awt/Container.java (addImpl): Don't call comp.addNotify
+ 	if peer is not null.
+ 	(validateTree): Create peers for all children before calling
+ 	doLayout.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(connectSignals): Don't call gtk_widget_realize.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(connect_awt_hook_cb): New function.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(initComponentGraphicsID): New variable.
+ 	(initComponentGraphics2DID): Likewise.
+ 	(setCursorID): Likewise.
+ 	(gtkInit): Initialize new fields with method IDs.
+ 	* jni/gtk-peer/gtkpeer.h (initComponentGraphicsID): Declare
+ 	extern.
+ 	(initComponentGraphics2DID): Declare extern.
+ 	(setCursorID): Likewise.
+ 	(connect_awt_hook_cb): Declare function.
+ 
+ 2004-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h,
+ 	include/gnu_java_awt_peer_gtk_GdkGraphics2D.h,
+ 	include/gnu_java_awt_peer_gtk_GtkComponentPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkListPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkPanelPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkWindowPeer.h:
+ 	Regenerated.
+ 
+ 2004-10-09  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(install_font_peer): Minor bug fixes to track cairo font
+ 	semantics.
+ 
+ 2004-10-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* examples/.cvsignore,
+ 	lib/.cvsignore,
+ 	gnu/classpath/.cvsignore:
+ 	Fixes for builddir == srcdir.
+ 
+ 2004-10-08  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java
+ 	(getClasspathTextLayoutPeer) Add.
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java
+ 	(copyStyleToAttrs)
+ 	(copySizeToAttrs): Make public.
+ 	* gnu/java/awt/peer/ClasspathTextLayoutPeer.java: New file.
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java: Remove.
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java: Remove.
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java: Rewrite.
+ 	* gnu/java/awt/peer/gtk/GdkFontPeer.java: New file.
+ 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java: Adjust type names.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(getFontPeer): New function.
+ 	(drawString): Pass font peer to native side.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(cairoSetFont)
+ 	(cairoShowGlyphs)
+ 	(PainterThread): Remove.
+ 	(GdkGraphics2D): Set hints during construction.
+ 	(shifted)
+ 	(walkPath)
+ 	(draw)
+ 	(setRenderingHint)
+ 	(setRenderingHints): Reimplement normalization logic.
+ 	(getDefaultHints)
+ 	(updateBufferedImage)
+ 	(isBufferedImageGraphics)
+ 	(updateImagePixels)
+ 	(drawImage): Make final.
+ 	(drawImage): Always paint synchronously.
+ 	(drawString)
+ 	(drawGlyphVector): Rewrite.
+ 	(releasePeerGraphicResource)
+ 	(getPeerTextMetrics)
+ 	(getPeerFontMetrics)
+ 	(drawGdkGlyphVector)
+ 	(drawGdkTextLayout)
+ 	(cairoDrawGdkGlyphVector)
+ 	(cairoDrawGdkTextLayout)
+ 	(cairoDrawString)
+ 	(getFontPeer): New functions.
+ 	* gnu/java/awt/peer/gtk/GdkTextLayout.java: New file.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(getFontMetrics): Get metrics via toolkit, to hit cache.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Use getFontMetrics.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (LRUCache): New class.
+ 	(fontCache)
+ 	(metricsCache)
+ 	(imageCache): New members.
+ 	(getFontMetrics)
+ 	(getImage)
+ 	(getClasspathFontPeer): Use caches.
+ 	(getFontPeer): Route through getClasspathFontPeer.
+ 	* java/awt/Font.java (attrsToMap): Remove, adjust ctors.
+ 	* java/awt/font/TextLayout.java: Implement in terms of peer.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(paintThumb): Use polyline rather than polygon.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java:
+ 	Update comment but, alas, still do not switch to using TextLayouts.
+ 	* javax/swing/text/Utilities.java (drawTabbedText):
+ 	Draw text run-at-a-time, not char-at-a-time.
+ 	* jni/gtk-peer/gdkfont.h: Publicize some of the font interface, add
+ 	layout table.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c:
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
+ 	Remove files.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Rewrite to
+ 	incorporate brains of old GdkClasspathFontPeerMetrics.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Rewrite to
+ 	incorporate brains of old GdkClasspathFontPeer.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: New file.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(drawString): Rewrite to use persistent layout in peer font.
+ 	Comment out extraneous gdk_flush calls.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(metrics_cairo)
+ 	(metrics_surface): New static variables.
+ 	(paint_glyph_run)
+ 	(install_font_peer): New helper functions.
+ 	(releasePeerGraphicResource)
+ 	(getPeerTextMetrics)
+ 	(getPeerFontMetrics)
+ 	(cairoDrawGdkTextLayout)
+ 	(cairoDrawGdkGlyphVector): New native methods.
+ 	(cairoDrawString): Rewrite, leaving layout-based version
+ 	commented out for the time being.
+ 	* jni/gtk-peer/gtkpeer.h (graphics): Add fields for pango stuff.
+ 
+ 2004-10-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkFontMetrics.h,
+ 	include/gnu_java_awt_peer_gtk_GdkGraphics.h,
+ 	include/gnu_java_awt_peer_gtk_GdkGraphics2D.h: Regenerated.
+ 	* include/gnu_java_awt_peer_gtk_GdkFontPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GdkTextLayout.h: New files
+ 	* include/Makefile.am: Added new files.
+ 	* native/jni/gtk-peer/Makefile.am: Added new files.
+ 
+ 2004-10-08 Andreas Tobler <a.tobler@schweiz.ch>
+ 
+ 	* configure.ac: Introduce AC_C_BIGENDIAN_CROSS for WORDS_BIGENDIAN.
+ 	* native/jni/gtk-peer/gtkpeer.h (SWAPU32): Introduce macro to swap pixels.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c: Moved SWAPU32
+ 	macro to gtkpeer.h.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePixels): Convert
+ 	pixels from  0xBBGGRRAA to 0xAARRGGBB only on Little Endian
+ 	architectures.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	(area_updated): Likewise.
+ 
+ 2004-10-08  Paul Jenner  <psj.home@ntlworld.com>
+ 
+ 	* javax/swing/JTree.java
+ 	(isRootVisible): Fixed typo in method name.
+ 	* javax/swing/JScrollBar.java
+ 	(setValues): Likewise.
+ 	* javax/swing/JScrollPane.java
+ 	(createScrollListener): Call JScrollBar.setValues.
+ 
+ 2004-10-07  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/BufferedImageFilter.java: Implement.
+ 
+ 2004-10-06  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/README: a few custom tag documented
+ 	* doc/www.gnu.org/external.wml: external package table reformatted,
+ 	added external tools from tools.wml page (only those without website)
+ 	* doc/www.gnu.org/home.wml: added "news" anchor for news
+ 	* doc/www.gnu.org/inetlib.wml: first version
+ 	* doc/www.gnu.org/newsitems.txt: cp-tools savannah merge
+ 	* doc/www.gnu.org/include/layout.wml doc/www.gnu.org/include/macros.wml
+ 	doc/www.gnu.org/stories.wml: custom tag jvm renamed to project and
+ 	moved to macros.wml, custom tags moved from layout to macros
+ 
+ 2004-10-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageIO.java:
+ 	Added much new methods.
+ 
+ 2004-10-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageReader.java,
+ 	javax/imageio/ImageWriter.java,
+ 	javax/imageio/spi/ImageWriterSpi.java:
+ 	Add SOME new methods.
+ 
+ 2004-10-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/IIOParam.java,
+ 	javax/imageio/ImageReadParam.java,
+ 	javax/imageio/ImageReader.java,
+ 	javax/imageio/ImageWriter.java:
+ 	Mostly implemented.
+ 	* javax/imageio/spi/ImageReaderSpi.java,
+ 	javax/imageio/spi/ImageWriterSpi.java:
+ 	New files.
+ 
+ 2004-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageWriteParam.java,
+ 	javax/imageio/metadata/IIOMetadataFormat.java:
+ 	Implemented.
+ 
+ 2004-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageTypeSpecifier.java:
+ 	Mostly implemented.
+ 
+ 2004-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/metadata/IIOMetadata.java:
+ 	Mostly implemented.
+ 
+ 2004-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/IIOImage.java,
+ 	javax/imageio/ImageReadParam.java,
+ 	javax/imageio/metadata/IIOMetadataController.java,
+ 	javax/imageio/metadata/IIOMetadataFormat.java:
+ 	New files.
+ 	* javax/imageio/stream/ImageOutputStream.java:
+ 	Implemented.
+ 
+ 2004-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/IIOParam.java,
+ 	javax/imageio/IIOParamController.java,
+ 	javax/imageio/ImageTypeSpecifier.java,
+ 	javax/imageio/ImageWriteParam.java,
+ 	javax/imageio/metadata/IIOMetadata.java:
+ 	New files.
+ 	* javax/imageio/ImageTranscoder.java:
+ 	Implemented.
+ 
+ 2004-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/ImageInputStreamSpi.java,
+ 	javax/imageio/spi/ImageOutputStreamSpi.java:
+ 	Reworked import startments.
+ 	* javax/imageio/spi/ServiceRegistry.java:
+ 	Reworked import startments. Fixed XHTML in javadocs.
+ 	(ServiceRegistry): Added @param tag to javadoc.
+ 	* javax/imageio/stream/ImageInputStream.java
+ 	(mark): Doesn't throws IOException;
+ 
+ 2004-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/ImageIO.java:
+ 	New file.
+ 
+ 2004-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/IIORegistry.java
+ 	(static): Don't register ImageReaderSpi.class and
+ 	ImageWriterSpi.class yet.
+ 
+ 2004-10-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/IIORegistry.java:
+ 	New file.
+ 
+ 2004-10-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* resource/java/util/logging/.cvsignore: New file.
+ 
+ 2004-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/CharArrayWriter.java
+ 	(resize): Remove redundant final modifier.
+ 	* java/io/FileDescriptor.java,
+ 	java/io/FileInputStream.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/ObjectOutputStream.java,
+ 	java/io/ObjectStreamClass.java,
+ 	java/io/PipedInputStream.java,
+ 	java/io/RandomAccessFile.java:
+ 	Reworked import statements.
+ 
+ 2004-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/rmic/RMIC.java,
+ 	gnu/java/rmi/server/RMIHashes.java,
+ 	gnu/java/rmi/server/RMIObjectInputStream.java,
+ 	gnu/java/rmi/server/UnicastConnection.java,
+ 	gnu/java/rmi/server/UnicastConnectionManager.java,
+ 	gnu/java/rmi/server/UnicastRemoteCall.java,
+ 	gnu/java/rmi/server/UnicastServerRef.java:
+ 	Import statements cleaned up.
+ 
+ 2004-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java,
+ 	gnu/java/awt/peer/gtk/GdkGlyphVector.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java,
+ 	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
+ 	gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkClipboard.java,
+ 	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkFontPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java: Import statements reworked.
+ 	Some little reformattings.
+ 
+ 2004-10-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/AffineTransformOp.java
+ 	(TYPE_BILINEAR): Initialize with 2.
+ 	* java/awt/print/Printable.java: Jalopied.
+ 	(PAGE_EXISTS): Initialize with 0;
+ 	(NO_SUCH_PAGE): Initialized with 1.
+ 
+ 2004-10-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataInputStream.java
+ 	(readFully): Throw IndexOutOfBoundsException if len is negative.
+ 
+ 2004-10-01  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/geom/AffineTransform.java:
+ 	Fixed javadocs overall.
+ 
+ 2004-10-01  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/IndexColorModel.java: Fix use of immutable
+ 	BigIntegers.
+ 	* java/awt/image/ComponentColorModel.java: Remove FIXME comment
+ 	since it's correct.
+ 
+ 2004-09-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java: Reformatted.
+ 	Removed redundant parenthesis.
+ 	(getHostAddress): Merged with version from llibgcj.
+ 
+ 2004-09-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/Beans.java,
+ 	java/beans/EventHandler.java,
+ 	java/beans/EventSetDescriptor.java,
+ 	java/beans/Introspector.java,
+ 	java/beans/PropertyEditorManager.java,
+ 	java/beans/beancontext/BeanContext.java,
+ 	java/beans/beancontext/BeanContextChild.java,
+ 	java/beans/beancontext/BeanContextChildSupport.java,
+ 	java/beans/beancontext/BeanContextMembershipEvent.java:
+ 	Reordered import statements and removed redundant modifiers.
+ 
+ 2004-09-30   Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboPopup.java
+ 	(SCROLL_DOWN): made final.
+ 	(SCROLL_UP): made final.
+ 
+ 2004-09-30  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/RescaleOp.java: Fix formatting.
+ 
+ 2004-09-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java (MessageIcon):
+ 	Renamed from 'messageIcon'.
+ 	(errorIcon, infoIcon, warningIcon, questionIcon): Updated.
+ 
+ 2004-09-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/MessageFormat.java (Field): Constructor now
+ 	protected.
+ 
+ 	* java/net/URLConnection.java (setFileNameMap): Now synchronized.
+ 
+ 	* javax/crypto/MacSpi.java: Fixed typo.
+ 
+ 	* java/lang/System.java (getenv): Added @specnote.
+ 
+ 2004-09-28  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/IndexColorModel.java: Add class docs.
+ 	(getRGBs, convertToIntDiscrete): Implement.
+ 	(isValid, getValidPixels): Implement.
+ 	* java/awt/image/RescaleOp.java: Implement.
+ 
+ 2004-09-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java:
+ 	Reformatted.
+ 	(getContent): Make sure we are connected. Moved code to get content
+ 	handler to getContentHandler() method for easier merging with libgcj's
+ 	version.
+ 	(getContentHandler): New method.
+ 
+ 2004-09-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLClassLoader.java:
+ 	Reformated.
+ 	(addURLImpl): Partly merged with libgcj's version.
+ 
+ 2004-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/AWTKeyStroke.java,
+ 	java/awt/Canvas.java,
+ 	java/awt/CardLayout.java,
+ 	java/awt/CheckboxMenuItem.java,
+ 	java/awt/Component.java,
+ 	java/awt/Container.java,
+ 	java/awt/DefaultKeyboardFocusManager.java,
+ 	java/awt/EventDispatchThread.java,
+ 	java/awt/FileDialog.java,
+ 	java/awt/FlowLayout.java,
+ 	java/awt/Font.java,
+ 	java/awt/Frame.java,
+ 	java/awt/Graphics2D.java,
+ 	java/awt/GraphicsEnvironment.java,
+ 	java/awt/GridBagConstraints.java,
+ 	java/awt/GridBagLayout.java,
+ 	java/awt/GridLayout.java,
+ 	java/awt/Image.java,
+ 	java/awt/KeyboardFocusManager.java,
+ 	java/awt/Label.java,
+ 	java/awt/List.java,
+ 	java/awt/MediaTracker.java,
+ 	java/awt/Menu.java,
+ 	java/awt/MenuBar.java,
+ 	java/awt/MenuComponent.java,
+ 	java/awt/Panel.java,
+ 	java/awt/PopupMenu.java,
+ 	java/awt/ScrollPane.java,
+ 	java/awt/Scrollbar.java,
+ 	java/awt/SystemColor.java,
+ 	java/awt/TextArea.java,
+ 	java/awt/TextField.java,
+ 	java/awt/Toolkit.java,
+ 	java/awt/Window.java,
+ 	java/awt/color/ICC_Profile.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/awt/datatransfer/StringSelection.java,
+ 	java/awt/datatransfer/SystemFlavorMap.java,
+ 	java/awt/dnd/Autoscroll.java,
+ 	java/awt/dnd/DropTarget.java,
+ 	java/awt/dnd/DropTargetContext.java,
+ 	java/awt/dnd/DropTargetDragEvent.java,
+ 	java/awt/dnd/peer/DropTargetContextPeer.java,
+ 	java/awt/event/AdjustmentEvent.java,
+ 	java/awt/event/InputEvent.java,
+ 	java/awt/event/InvocationEvent.java,
+ 	java/awt/event/KeyEvent.java,
+ 	java/awt/event/MouseEvent.java,
+ 	java/awt/font/TextLayout.java,
+ 	java/awt/geom/GeneralPath.java,
+ 	java/awt/geom/Point2D.java,
+ 	java/awt/im/InputContext.java,
+ 	java/awt/im/spi/InputMethodContext.java,
+ 	java/awt/image/AffineTransformOp.java,
+ 	java/awt/image/BufferedImage.java,
+ 	java/awt/image/ColorModel.java,
+ 	java/awt/image/ComponentColorModel.java,
+ 	java/awt/image/CropImageFilter.java,
+ 	java/awt/image/DirectColorModel.java,
+ 	java/awt/image/MemoryImageSource.java,
+ 	java/awt/image/PackedColorModel.java,
+ 	java/awt/image/PixelGrabber.java,
+ 	java/awt/image/RasterOp.java,
+ 	java/awt/peer/MenuBarPeer.java:
+ 	Some fixes for checkstyle. Import statement and modifier order
+ 	redordering.
+ 
+ 2004-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java
+ 	(setModel): Reimplemented.
+ 
+ 2004-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(insert): Renaming of method local variables.
+ 
+ 2004-09-27  Per Bothner  <per@bothner.com>
+ 
+ 	* java/util/Collections.java (sort):  Copy from array in forwards
+ 	order, rather than reverse order which may be much less
+ 	efficient.
+ 
+ 2004-09-27  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java.util.Calendar.java (cache): New private static field. Cached
+ 	mappings of locales->calendar classes.
+ 	(ctorArgTypes): New private static field. Singleton argument for
+ 	calendar class constructor lookup.
+ 	(getInstance): Cache Locale->Calendar class mappings using HashMap.
+ 	Optimize by bypassing reflection instantiation for the
+ 	GregorianCalendar case.
+ 
+ 2004-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SpinnerNumberModel.java
+ 	(SpinnerNumberModel): Implements java.io.Serializable.
+ 
+ 2004-09-27  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/BandedSampleModel.java: Implement.
+ 	* java/awt/image/ColorModel.java (getDataElement,
+ 	getDataElements): Document since 1.4.
+ 	* java/awt/image/ComponentColorModel.java (ComponentColorModel):
+ 	Implement missing 1.4 constructor.
+ 	* java/awt/image/IndexColorModel.java (IndexColorModel): Implement
+ 	missing constructor.
+ 
+ 2004-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFrame.java,
+ 	javax/swing/JRadioButton.java,
+ 	javax/swing/JRootPane.java,
+ 	javax/swing/JTextField.java,
+ 	javax/swing/SpinnerNumberModel.java,
+ 	javax/swing/plaf/basic/BasicArrowButton.java,
+ 	javax/swing/plaf/basic/BasicScrollBarUI.java,
+ 	javax/swing/plaf/basic/BasicSplitPaneDivider.java,
+ 	javax/swing/table/DefaultTableColumnModel.java,
+ 	javax/swing/table/JTableHeader.java,
+ 	javax/swing/text/DocumentFilter.java,
+ 	javax/swing/text/JTextComponent.java,
+ 	javax/swing/text/NavigationFilter.java:
+ 	Whitespace cleanup.
+ 
+ 2004-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(getColumnWidth): New method.
+ 	(getLineCount): Likewise.
+ 	(getLineStartOffset): Likewise.
+ 	(getLineEndOffset): Likewise.
+ 	(getLineOfOffset): Likewise.
+ 	(getRowHeight): Likewise.
+ 	(replaceRange): Likewise.
+ 	(insert): Reformatted.
+ 
+ 2004-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JSpinner.java:
+ 	Some Re-formatting.
+ 	(spinner): New field.
+ 	(DefaultEditor): New method.
+ 	(getSpinner): Likewise.
+ 	(NumberEdito): Likewise.
+ 	(getModel): Likewise.
+ 	(setModel): Likewise.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextField.java
+ 	(scrollOffset): new field.
+ 	(getScrollOffset): New method.
+ 	(setScrollOffset): Likewise.
+ 	(getColumnWidth): Likewise.
+ 	(action): New field.
+ 	(actionCommand): Likewise.
+ 	(actionPropertyChangeListener): Likewise.
+ 	(setHorizontalAlignment): Abort soon if new value == old value. Fire
+ 	event before repainting.
+ 	(postActionEvent): New method.
+ 	(getAction): Likewise.
+ 	(setAction): Likewise.
+ 	(getActionCommand): Likewise.
+ 	(setActionCommand): Likewise.
+ 	(createActionPropertyChangeListener): Likewise.
+ 	(configurePropertiesFromAction): Likewise.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/JTextComponent.java
+ 	(dragEnabled): New field.
+ 	(getSelectedText): New method.
+ 	(getDragEnabled): Likewise.
+ 	(setDragEnabled): Likewise.
+ 	(replaceSelection): Reimplemented.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JRootPane.java
+ 	(NONE): New static field.
+ 	(FRAME): Likewise.
+ 	(PLAIN_DIALOG): Likewise.
+ 	(INFORMATION_DIALOG): Likewise.
+ 	(ERROR_DIALOG): Likewise.
+ 	(COLOR_CHOOSER_DIALOG): Likewise.
+ 	(FILE_CHOOSER_DIALOG): Likewise.
+ 	(QUESTION_DIALOG): Likewise.
+ 	(WARNING_DIALOG): Likewise.
+ 	(defaultButton): New field.
+ 	(getDefaultButton): New method.
+ 	(setDefaultButton): Likewise.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/DefaultHighlighter.java
+ 	(drawsLayeredHighlights): New field.
+ 	(getDrawsLayeredHighlights): New method.
+ 	(setDrawsLayeredHighlights): Likewise.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SpringLayout.java
+ 	(Constraints): May not be final.
+ 
+ 2004-09-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Throwable.java (StaticData.nl): Make package private.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SpinnerNumberModel.java
+ 	(SpinnerNumberModel): Implements java.io.Serializable.
+ 	(serialVersionUID): New field.
+ 	(SpinnerNumberModel): Added missing @throws tags to javadocs.
+ 	(getMinimum): New method.
+ 	(setMinimum): Likewise.
+ 	(getMaximum): Likewise.
+ 	(setMaximum): Likewise.
+ 	(getStepSize): Likewise.
+ 	(setStepSize): Likewise.
+ 
+ 2004-09-26  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	Jalopy. Reimplement.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	Jalopy.
+ 	(arrowIcon, upIcon, downIcon, leftIcon,
+ 	rightIcon): Removed.
+ 	(createIncreaseButton): Use BasicArrowButton.
+ 	(createDecreaseButton): Ditto.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
+ 	(createRightOneTouchButton): Remove button border.
+ 	(createLeftOneTouchButton): Ditto.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTree.java
+ 	(ANCHOR_SELECTION_PATH_PROPERTY): New static field.
+ 	(CELL_EDITOR_PROPERTY): Likewise.
+ 	(CELL_RENDERER_PROPERTY): Likewise.
+ 	(EDITABLE_PROPERTY): Likewise.
+ 	(EXPANDS_SELECTED_PATHS_PROPERTY): Likewise.
+ 	(INVOKES_STOP_CELL_EDITING_PROPERTY): Likewise.
+ 	(LARGE_MODEL_PROPERTY): Likewise.
+ 	(LEAD_SELECTION_PATH_PROPERTY): Likewise.
+ 	(ROOT_VISIBLE_PROPERTY): Likewise.
+ 	(ROW_HEIGHT_PROPERTY): Likewise.
+ 	(SCROLLS_ON_EXPAND_PROPERTY): Likewise.
+ 	(SELECTION_MODEL_PROPERTY): Likewise.
+ 	(SHOWS_ROOT_HANDLES_PROPERTY): Likewise.
+ 	(TOGGLE_CLICK_COUNT_PROPERTY): Likewise.
+ 	(TREE_MODEL_PROPERTY): Likewise.
+ 	(VISIBLE_ROW_COUNT_PROPERTY): Likewise.
+ 	(cellEditor): New field.
+ 	(invokesStopCellEditing): Likewise.
+ 	(largeModel): Likewise.
+ 	(rowHeight): Likewise.
+ 	(scrollsOnExpand): Likewise.
+ 	(selectionModel): Likewise.
+ 	(toggleClickCount): Likewise.
+ 	(visibleRowCount): Likewise.
+ 	(setShowsRootHandles): Fixed typo in method name.
+ 	(getCellEditor): New method.
+ 	(setCellEditor): Likewise.
+ 	(getSelectionModel): Likewise.
+ 	(setSelectionModel): Likewise.
+ 	(getVisibleRowCount): Likewise.
+ 	(setVisibleRowCount): Likewise.
+ 	(isLargeModel): Likewise.
+ 	(setLargeModel): Likewise.
+ 	(getRowHeight): Likewise.
+ 	(setRowHeight): Likewise.
+ 	(getInvokesStopCellEditing): Likewise.
+ 	(setInvokesStopCellEditing): Likewise.
+ 	(getToggleClickCount): Likewise.
+ 	(setToggleClickCount): Likewise.
+ 	(getScrollsOnExpand): Likewise.
+ 	(setScrollsOnExpand): Likewise.
+ 	* javax/swing/table/DefaultTableColumnModel.java
+ 	(addColumnModelListener): Fixed javadoc.
+ 	(removeColumnModelListener): Implemented. Fixed javadoc.
+ 	(getColumnModelListeners): New method.
+ 	* javax/swing/table/JTableHeader.java
+ 	(columnModel): Made protected.
+ 	(draggedColumn): Likewise.
+ 	(draggedDistance): Likewise.
+ 	(reorderingAllowed): Likewise.
+ 	(resizingAllowed): Likewise.
+ 	(resizingColumn): Likewise.
+ 	(table): Likewise.
+ 	(updateTableInRealTime): Likewise.
+ 	(createDefaultColumnModel): Renamed from
+ 	createDefaultTableColumnModel.
+ 	(setDefaultRenderer): New method.
+ 	* javax/swing/table/TableColumn.java
+ 	(getPropertyChangeListeners): New method.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JPasswordField.java:
+ 	Reformated. Implemented construtors.
+ 	* javax/swing/plaf/basic/BasicPasswordFieldUI.java
+ 	(create): New method.
+ 	* javax/swing/text/PlainView.java
+ 	(selectedColor): Made package-private to allow access from sub-classes
+ 	in same package too.
+ 	(unselectedColor): Likewise.
+ 	(font): Likewise.
+ 	(drawSelectedText): Make protected.
+ 	(drawUnselectedText): Likewise.
+ 	* javax/swing/text/PasswordView.java: New file.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/DocumentFilter.java
+ 	(FilterBypass): New inner class.
+ 	(insertString): New method.
+ 	(remove): Likewise.
+ 	(replace): Likewise.
+ 	* javax/swing/text/NavigationFilter.java
+ 	(FilterBypass): New inner class.
+ 	(NavigationFilter): New method.
+ 	(moveDot): Likewise.
+ 	(setDot): Likewise.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/SimpleAttributeSet.java
+ 	(EMPTY): Made public final.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/UIManager.java
+ 	(get): New method.
+ 	(getBoolean): Likewise.
+ 	(getBorder): Likewise.
+ 	(getColor): Likewise.
+ 	(getDimension): Likewise.
+ 	(getFont): Likewise.
+ 	(getIcon): Likewise.
+ 	(getInsets): Likewise.
+ 	(getInt): Likewise.
+ 	(getString): Likewise.
+ 
+ 2004-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/UIDefaults.java
+ 	(removePropertyChangeListener): Made public.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JApplet.java:
+ 	Whitespace fixes.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JApplet.java
+ 	(rootPaneCheckingEnabled): Renamed from checking.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java
+ 	(getUI): Javadoc added.
+ 	(setUI): New method.
+ 
+ 2004-09-25  Shashank Bapat  <shashankbapat@yahoo.com>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/regexp/RE.java (initialize): Add RETokenLookAhead support.
+ 	* gnu/regexp/RETokenLookAhead.java: New file.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JViewport.java
+ 	(getUI): New method.
+ 	(setUI): Likewise.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JScrollPane.java
+ 	(getUI): New method.
+ 	(setUI): Likewise.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JMenu.java
+ 	(getMenuListeners): New method.
+ 	(fireMenuSelected): Simplified.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFrame.java
+ 	Re-formatted a bit and reordered some methods.
+ 	(rootPaneCheckingEnabled): Renamed from checking.
+ 	(getPreferredSize): Simplified.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(isMaximumSizeSet): New method.
+ 	(isMinimumSizeSet): Likewise.
+ 	(isPreferredSizeSet): Likewise.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(JComponent): Added javadoc comment.
+ 	(setBorder): Fire property change event.
+ 	(setEnabled): Likewise.
+ 	(setMaximumSize): Likewise.
+ 	(setMinimumSize): Likewise.
+ 	(setPreferredSize): Likewise.
+ 	(setOpaque): Likewise.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JCheckBox.java
+ 	(BORDER_PAINTED_FLAT_CHANGED_PROPERTY): New static field.
+ 
+ 2004-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JApplet.java, javax/swing/JFrame.java:
+ 	Re-indented.
+ 
+ 2004-09-24  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/security/BasicPermission.java: Don't check wildcards.
+ 
+ 2004-09-24  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readObject): Save and restore this.currentObject and
+ 	this.currentObjectStreamClass around calls to callReadMethod().
+ 
+ 2004-09-24  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java
+ 	(readObject): Save and restore this.currentObject and
+ 	this.currentObjectStreamClass around calls to callReadMethod().
+ 
+ 2004-09-24  David Daney  <ddaney@avtrex.com>
+ 
+ 	* java/net/URL.java (URL): Copy userInfo from context.
+ 	(getUserInfo): Return cached userInfo if present.
+ 
+ 2004-09-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/table/DefaultTableModel.java: Whitespace cleanup.
+ 
+ 2004-09-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/Component.java: Whitespace cleanup.
+ 	* java/awt/Container.java: Likewise.
+ 	* java/awt/DefaultFocusTraversalPolicy.java: Likewise.
+ 	* java/awt/DefaultKeyboardFocusManager.java: Likewise.
+ 	* java/awt/KeyboardFocusManager.java: Likewise.
+ 
+ 2004-09-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/awt/Demo.java: Add help menu
+ 	example.
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkButtonPeer.h: Regenerate with gcjh
+ 	from CVS.
+ 	* include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkFramePeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkGenericPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkLabelPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkListPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: Likewise.
+ 
+ 2004-09-23  David Jee  <djee@redhat.com>
+ 
+ 	PR AWT/17059
+ 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
+ 	(nativeSetHelpMenu): New native method declaration.
+ 	(addHelpMenu): Call nativeSetHelpMenu().
+ 	(addMenu): Remove.
+ 	* java/awt/MenuBar.java
+ 	(setHelpMenu): Call addNotify() on the new help menu.
+ 	(add): Call addNotify() on the new menu.
+ 	(addNotify): Set the help menu if one exists.
+ 	* java/awt/peer/MenuBarPeer.java
+ 	(addMenu): Remove.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
+ 	(nativeSetHelpMenu): New method.
+ 
+ 2004-09-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/AbstractButton.java: Whitespace cleanup.
+ 	* javax/swing/DefaultButtonModel.java: Likewise.
+ 	* javax/swing/JLabel.java: Likewise.
+ 	* javax/swing/KeyStroke.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicComboPopup.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicTableUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicTextUI.java: Likewise.
+ 	* javax/swing/table/DefaultTableCellRenderer.java: Likewise.
+ 	* javax/swing/text/AbstractDocument.java: Likewise.
+ 	* javax/swing/text/AttributeSet.java: Likewise.
+ 	* javax/swing/text/DefaultEditorKit.java: Likewise.
+ 
+ 2004-09-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/InputVerifier.java:
+ 	Re-formatted.
+ 	* javax/swing/JComponent.java
+ 	(inputVerifier): New property field.
+ 	(getInputVerifier): New method.
+ 	(setInputVerifier): Likewise.
+ 
+ 2004-09-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DebugGraphics.java:
+ 	Re-formatted. Fixed some javadocs.
+ 
+ 2004-09-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	Little re-formatting.
+ 	(changeEvent): Made protected.
+ 	(fireStateChanged): Removed argument.
+ 	(setHorizontalAlignment): Abort method when old value is equal too new
+ 	value.
+ 	(setHorizontalTextPosition): Likewise.
+ 	(setVerticalAlignment): Likewise.
+ 	(setVerticalTextPosition): Likewise.
+ 	(setBorderPainted): Likewise.
+ 	(setIcon): Likewise.
+ 	(setText): Likewise.
+ 	(setIconTextGap): Likewise.
+ 	(setMargin): Likewise.
+ 	(setPressedIcon): Likewise.
+ 	(setFocusPainted): Likewise.
+ 	(setDisabledSelectedIcon): Likewise.
+ 	(setRolloverIcon): Likewise.
+ 	(setRolloverSelectedIcon): Likewise.
+ 	(setSelectedIcon): Likewise.
+ 	(setContentAreaFilled): Likewise.
+ 
+ 2004-09-23  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ComponentSampleModel.java: Add documentation.
+ 
+ 2004-09-22  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/announce/20040913.wml: classpath 0.11 release announce
+ 	* doc/www.gnu.org/downloads/downloads.wml: classpath 0.11 download added
+ 	* doc/www.gnu.org/newsitems.txt: classpath 0.11, inetlib 1.1 
+ 
+ 2004-09-22  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
+ 	(setEnabled): Make it a native method.
+ 	* java/awt/DefaultKeyboardFocusManager.java
+ 	(postProcessKeyEvent): Only post event if the menu item
+ 	is active.
+ 	* java/awt/MenuItem.java:
+ 	Private field 'enabled' should be true by default.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(setEnabled): New function.
+ 
+ 2004-09-22  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ColorModel.java (getDataElement): Implemented.
+ 	Update javadoc.
+ 	(getDataElements): Add missing version.  Remove bogus version.
+ 	Update javadoc.
+ 	* java/awt/image/MultiPixelPackedSampleModel.java: Implement.
+ 	* java/awt/image/Raster.java
+ 	(createPackedRaster(int,int,int,int,int,Point)): Implement for
+ 	bands>1.
+ 	(getNumBands): Implement.
+ 	* java/awt/image/SinglePixelPackedSampleModel.java
+ 	(SinglePixelPackedSampleModel): Throw exception for unsupported
+ 	datatype.
+ 			
+ 
+ 2004-09-22  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java:
+ 	(paintCurrentValue): Pass correct parameters to 
+ 	getListCellRendererComponent().
+ 	(ListDataHandler.intervalRemoved): Implemented. 
+ 	(PropertyChangeHandler.propertyChange): Handle changes in
+ 	MODEL_CHANGED_PROPERTY of the JComboBox
+ 	* javax/swing/plaf/basic/BasicComboPopup.java:
+ 	(BasicComboPopup): Moved code that configures popup to 
+ 	configurePopup() and call it instead. 
+ 	(firePopupMenuWillBecomeVisible): Implemented.
+ 	(firePopupMenuWillBecomeInvisible): Likewise.
+ 	(firePopupMenuCanceled): Likewise.
+ 	(configureList): Set list's visibleRowCount same as 
+ 	comboBox's visibleRowCount.
+ 	(configurePopup): Implemented.
+ 	(getPopupHeightForRowCount): Get item's from JComboBox's model and 
+ 	not from model of the JList.
+ 	(ListMouseMotionHandler.mouseMoved): Implemented.
+ 	(PropertyChangeHandler.propertyChange): Handles change in the
+ 	JComboBox's model.
+ 
+ 2004-09-22  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/colorchooser/DefaultHSBChooserPanel.java:
+ 	(stateChanged): Only update the image and the track if
+ 	the values are not being adjusted.
+ 	(updateChooser): Grab the new mouse point from the
+ 	spinner values. Update the image and track only if 
+ 	the values are not being adjusted. 
+ 	(getHSBValues): New method.
+ 	* javax/swing/colorchooser/DefaultRGBChooserPanel.java:
+ 	(SliderHandler::stateChanged): Changed internalChange 
+ 	to updateChange. Set sliderChange.
+ 	(SpinnerHandler::stateChanged): Ditto. Set spinnerChange.
+ 	(spinnerChange): New variable.
+ 	(sliderChange): Ditto.
+ 	(updateChange): Renamed from internalChange.
+ 	(updateChooser): Do not update sliders if the sliders
+ 	were the original source of the change. Ditto for spinners.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	(mousePress): Don't scroll the JViewport if there will
+ 	be extra space at the end of the run. Change layout() to
+ 	revalidate().
+ 	(calculateSize): Use the component's width/height unless
+ 	it is smaller than the max tab width/height.
+ 	(calculateTabRects): Subtract the tab run overlay.
+ 	(rotateTabRuns): Don't rotate if there's only one run.
+ 	(layoutContainer): Reuse the viewport point.
+ 	(createLayoutManager): Set the viewport to use no layout.
+ 	(paintTabArea): Don't paint the tabs that are not visible
+ 	to the JViewport.
+ 	(paintContentBorderTopEdge): Check for scroll tab layout before
+ 	looking for gap.
+ 	(paintContentBorderLeftEdge): Ditto.
+ 	(paintContentBorderBottomEdge): Ditto.
+ 	(paintContentBorderRightEdge): Ditto.
+ 
+ 2004-09-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkClipboard.java,
+ 	java/awt/datatransfer/Clipboard.java,
+ 	java/awt/datatransfer/ClipboardOwner.java:
+ 	Reformated to make it use our coding standard.
+ 
+ 2004-09-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Set menu
+ 	bar's width.
+ 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (nativeSetHelpMenu):
+ 	Add FIXME comment.
+ 	(addHelpMenu): Elide call to nativeSetHelpMenu.
+ 	* java/awt/Menu.java (isTearOff): Rename to tearOff.
+ 	(menuSerializedDataVersion): Initialize to 1.
+ 	(separatorLabel): Mark transient.
+ 	(insert(MenuItem,int)): Implement.
+ 	* java/awt/MenuBar.java (setHelpMenu): Call getPeer to retrieve
+ 	peer.
+ 	(countMenus): Count help menu.
+ 	* java/awt/MenuItem.java: Remove event mask FIXME.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(gtkWidgetModifyFont): Only set font if label is non-NULL.
+ 	(setLabel): Don't treat "-" specially.
+ 
+ 2004-09-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java (gtkWidgetSetFont):
+ 	Rename ...
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
+ 	(setMenuBarWidth): New method.
+ 	(setBounds): Set the menu bar width.
+ 	(postConfigureEvent): Set the menu bar width if the window's
+ 	width has changed.
+ 	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (GtkMenuBarPeer):
+ 	Don't call create.
+ 	(setFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java (create): New
+ 	method.
+ 	(setFont): Likewise.
+ 	(GtkMenuComponentPeer): Call create and setFont.
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(connectSignals): Make package private.
+ 	(gtkWidgetModifyFont): New method.
+ 	(create): Likewise.
+ 	(GtkMenuItemPeer): Don't call create.
+ 	(setFont): New method.
+ 	* java/awt/CheckboxMenuItem.java (addNotify): Fix peer == null
+ 	condition.
+ 	* java/awt/Container.java (validateTree): Fix comment typos.
+ 	* java/awt/MenuComponent.java (getFont): Return parent's font if
+ 	our font is null.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
+ 	(create): Remove call to deprecated
+ 	gtk_check_menu_item_set_show_toggle function.
+ 
+ 2004-09-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java:
+ 	(gtkFixedMove): Remove method.
+ 
+ 2004-09-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* Makefile.am (gtk_c_source_files): Add
+ 	gnu_java_awt_peer_gtk_GtkFramePeer.c.
+ 	* Makefile.in: Regenerate.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (getClipBounds): Remove
+ 	comment.
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(create): Pack GtkButton in GtkEventBox.
+ 	(connectJObject): Remove.
+ 	(focus_in_cb): New function.
+ 	(focus_out_cb): Likewise.
+ 	(connectSignals): Connect focus-in-event and focus-out-event
+ 	signals.
+ 	(gtkSetFont): Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	(gtkWidgetRequestFocus): New method.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(gtkSetFont): Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(isInRepaint): New field.
+ 	(gtkSetFont): Remove method.
+ 	(addExposeFilter): Likewise.
+ 	(removeExposeFilter): Likewise.
+ 	(gtkWidgetQueueDrawArea): Rename to ...
+ 	(gtkWidgetRepaintArea): New method.
+ 	(beginNativeRepaint): New method.
+ 	(endNativeRepaint): New method.
+ 	(setComponentBounds): Move implementation here from
+ 	GtkComponentPeer.
+ 	(paint): Remove implementation.
+ 	(repaint): Wrap call to gtkWidgetRepaintArea with calls to
+ 	beginNativeRepaint and endNativeRepaint.
+ 	(setBounds): Use menu bar height in bounds calculation.
+ 	(postExposeEvent): Only post paint event if we're not doing a
+ 	native repaint.
+ 	(gtkWidgetSetParent): Replace gtk_layout_put with gtk_fixed_put.
+ 	(setNativeBounds): Replace gtk_layout_move with gtk_fixed_move.
+ 	(find_gtk_layout): Remove function.
+ 	(filter_expose_event_handler): Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (postExposeEvent):
+ 	Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(setComponentBounds): Call GtkComponentPeer's
+ 	setComponentBounds.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight):
+ 	New method.
+ 	(moveLayout): Rename to ...
+ 	(gtkFixedMove): New method.
+ 	(gtkLayoutSetVisible): Rename to ...
+ 	(gtkFixedSetVisible): New method.
+ 	(setMenuBar): Rearrange, to make the three separate cases
+ 	clearer.
+ 	(postExposeEvent): Only post paint event if we're not doing a
+ 	native repaint.
+ 	* gnu/java/awt/peer/gtk/GtkGenericPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,Color)):
+ 	Call run directly, rather than spawning a new thread.
+ 	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,int,int,int,int,Color)):
+ 	Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (gtkSetFont):
+ 	Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	(create): Rename ebox to eventbox.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
+ 	Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
+ 	(GtkMenuComponentPeer): Set the default font.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(gtkSetFont): Rename to ...
+ 	(gtkWidgetModifyFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
+ 	* java/awt/Component.java (locale): Initialize to default
+ 	locale.
+ 	* java/awt/Container.java (invalidateTree): Make
+ 	package-private.
+ 	(paint): Paint self first.
+ 	(setMenuBar): Call invalidateTree.
+ 	* java/awt/Panel.java (dispatchEventImpl): Remove method.
+ 	* java/awt/Window.java (show): Call no-parameter variant of
+ 	requestFocusInWindow.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (initState):
+ 	Remove special case for window widget.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(grab_current_drawable): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
+ 	(create): Replace GtkLayout with GtkFixed.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Remove special cases for GDK_EXPOSE events.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: New file.
+ 	Move all GtkFramePeer native method implementations here from
+ 	gnu_java_awt_peer_gtk_GtkWindowPeer.c.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
+ 	Replace GtkLayout with GtkFixed.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(find_layout): Remove function.
+ 	(create): Replace GtkLayout with GtkFixed.
+ 	(connectSignals): Remove find_layout call.
+ 	(toBack): Replace XFlush with gdk_flush.
+ 	(toFront): Replace XFlush with gdk_flush.
+ 	Move GtkFramePeer native method implementations to
+ 	gnu_java_awt_peer_gtk_GtkFramePeer.c.
+ 	* jni/gtk-peer/gtkpeer.h: Remove declaration of find_gtk_layout.
+ 
+ 2004-09-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/Makefile.am:
+ 	Added new file gnu_java_awt_peer_gtk_GtkFramePeer.c.
+ 
+ 2004-09-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/util/VMTimeZone.java
+ 	(getDefaultTimeZoneId): Remove debug output.
+ 
+ 2004-09-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #10447
+ 	* java/util/Collections.java
+ 	(binarySearch(List, Object, Comparator): Explicitly reverse direction
+ 	in list iterator.
+ 
+ 2004-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/applet/Applet.java,
+ 	java/applet/AppletContext.java,
+ 	java/applet/AppletStub.java,
+ 	java/applet/AudioClip.java:
+ 	Jalopied and checkstyle clean.
+ 
+ 2004-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/jalopy-gnu.xml: throws clauses have to be indented by
+ 	two spaces.
+ 
+ 2004-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/checkstyle-config.xml:
+ 	Enabled check for ordered import statements.
+ 	* scripts/jalopy-gnu.xml:
+ 	Fix grouping of import statements.
+ 
+ 2004-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/jalopy-gnu.xml: Converted to use Unix-style EOL.
+ 
+ 2004-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/crypto/package.html,
+ 	javax/crypto/interfaces/package.html,
+ 	javax/crypto/spec/package.html,
+ 	javax/net/package.html,
+ 	javax/net/ssl/package.html,
+ 	javax/security/package.html,
+ 	javax/security/auth/package.html,
+ 	javax/security/auth/callback/package.html,
+ 	javax/security/auth/login/package.html,
+ 	javax/security/cert/package.html,
+ 	javax/security/sasl/package.html:
+ 	New files for package documentation.
+ 
+ 2004-09-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(getLocalAddress): Return InetAddress.ANY_IF if not bound yet.
+ 
+ 2004-09-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/checkstyle-config.xml,
+ 	scripts/checkstyle-header.regex,
+ 	scripts/checkstyle-suppressions.xml:
+ 	New files to check GNU classpath with checkstyle.
+ 
+ 2004-09-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .settings/org.eclipse.core.resources.prefs: New file.
+ 	* .classpath: Updated.
+ 
+ 2004-09-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* scripts/jalopy-gnu.xml: New file.
+ 
+ 2004-09-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/net/ssl/SSLServerSocket.java:
+ 	Removed comment about "Do not edit this file, it's generated.".
+ 
+ 2004-09-20  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/StackTraceElement.java
+ 	(className): Renamed field to declaringClass to be compatible
+ 	with Sun serialization format.
+ 
+ 2004-09-20  Ilya Perminov  <iperminov@logicalsoft.com>
+ 
+ 	* gnu/java/rmi/server/UnicastServer.java
+ 	(incomingMessageCall): Added code to handle Errors.
+ 	* gnu/java/rmi/server/UnicastServerRef.java
+ 	(incomingMessageCall): Added code to handle Errors.
+ 
+ 2004-09-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java
+ 	(openConnection): Clarified comment.
+ 
+ 2004-09-20  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* javax/swing/JInternalFrame.java
+ 	(CONTENT_PANE_PROPERTY,FRAME_ICON_PROPERTY,GLASS_PANE_PROPERTY,
+ 	IS_CLOSED_PROPERTY,IS_ICON_PROPERTY,IS_MAXIMUM_PROPERTY,
+ 	IS_SELECTED_PROPERTY,LAYERED_PANE_PROPERTY,MENU_BAR_PROPERTY,
+ 	ROOT_PANE_PROPERTY,TITLE_PROPERTY): Made final as per API spec.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ 	(CLOSE_CMD,ICONIFY_CMD,MAXIMIZE_CMD,MOVE_CMD,RESTORE_CMD,SIZE_CMD):
+ 	Made final as per API spec.
+ 
+ 2004-09-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (loadedClasses): Declare as HashMap.
+ 	(definedPackages): Likewise.
+ 
+ 2004-09-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Collections.java (rotate): Just return when list is empty.
+ 
+ 2004-09-19  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #10383 reported by Ilya Perminov.
+ 	* java/util/TreeMap.java (root): Don't initialize.
+ 	(TreeMap(Comparator)): Call fabricateTree(0).
+ 	(fabricateTree): Initialize root and size when count is 0.
+ 
+ 2004-09-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.11+cvs.
+ 
+ 2004-09-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* vm/reference/java/lang/VMProcess.java (ProcessThread): Added
+ 	explicit constructor.
+ 
+ 2004-09-17  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/awt/Component.java (postEvent):
+ 	Only delegate to parent if a parent exists.
+ 
+ 	Reported by: Stephane Meslin-Weber <steph@tangency.co.uk>
+ 
+ 2004-09-17  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/nio/ByteBuffer.java:
+ 	(hashCode): Implemented.
+ 	* java/nio/CharBuffer.java:
+ 	* java/nio/DoubleBuffer.java:
+ 	* java/nio/FloatBuffer.java:
+ 	* java/nio/LongBuffer.java:
+ 	* java/nio/IntBuffer.java:
+ 	* java/nio/ShortBuffer.java:
+ 	Likewise.
+ 
+ 2004-09-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Set release date.
+ 	* configure.ac: Set version to 0.11. Add java/util/logging/Makefile.
+ 
+ 	* java/util/logging/logging.properties: Removed.
+ 	* resource/java/util/Makefile.am (SUBDIRS): Add logging.
+ 	* resource/java/util/logging/Makefile.am: Added.
+ 	* resource/java/util/logging/logging.properties: Added.
+ 
+ 2004-09-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/CompoundName.java (CompoundName): Don't check for
+ 	separator in "flat" case.
+ 
+ 2004-09-11  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/MenuComponent.java
+ 	(newEventsOnly): added additional serialization
+ 	comment
+ 	
+ 2004-09-11  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/Component.java
+ 	(translateEvent): made static with package access
+ 	rather than private
+ 	* java/awt/MenuBar.java
+ 	Added documentation
+ 	(getAccessibleContext()): implemented
+ 	(AccessibleAWTMenuBar): new class
+ 	(AccessibleAWTMenuBar()): new constructor
+ 	(getAccessibleRole()): implemented
+ 	* java/awt/MenuComponent.java
+ 	(accessibleContext, newEventsOnly, nameExplicitlySet,
+ 	focusHandler): new variables
+ 	(setName(String)): adding setting of nameExplicitlySet
+ 	(dispatchEventImpl(java.awt.AWTEvent)): converts 1.1 events
+ 	to 1.0
+ 	(processEvent): added focus handling for accessible component
+ 	(getAccessibleContext()): implemented
+ 	(AccessibleAWTMenuComponent): new class
+ 	(AccessibleAWTMenuComponent()): new constructor
+ 	(addAccessibleSelection(int)): stub for subclasses
+ 	(addFocusListener(java.awt.event.FocusListener)): implemented
+ 	(clearAccessibleSelection()): stub for subclasses
+ 	(contains(java.awt.Point)): implemented against getBounds()
+ 	(getAccessibleAt(java.awt.Point)): stub for subclasses
+ 	(getAccessibleChild(int)): stub for subclasses
+ 	(getAccessibleChildrenCount()): stub for subclasses
+ 	(getAccessibleComponent()): implemented
+ 	(getAccessibleDescription()): implemented
+ 	(getAccessibleIndexInParent()): implemented
+ 	(getAccessibleName()): implemented
+ 	(getAccessibleParent()): implemented
+ 	(getAccessibleRole()): implemented
+ 	(getAccessibleSelection()): implemented
+ 	(getAccessibleSelection(int)): stub for subclasses
+ 	(getAccessibleSelectionCount()): stub for subclasses
+ 	(getAccessibleStateSet()): implemented
+ 	(getBackground()): implemented
+ 	(getBounds()): stub for subclasses
+ 	(getCursor()): implemented
+ 	(getFont()): implemented
+ 	(getFontMetrics(java.awt.Font)): implemented
+ 	(getForeground()): implemented
+ 	(getLocale()): implemented
+ 	(getLocation()): implemented against getBounds()
+ 	(getLocationOnScreen()): stub for subclasses
+ 	(getSize()): implemented against getBounds()
+ 	(isAccessibleChildSelected(int)): stub for subclasses
+ 	(isEnabled()): stub for subclasses
+ 	(isFocusTraversable()): stub for subclasses
+ 	(isShowing()): stub for subclasses
+ 	(isVisible()): stub for subclasses
+ 	(removeAccessibleSelection(int)): stub for subclasses
+ 	(removeFocusListener(java.awt.event.FocusListener)): implemented
+ 	(selectAllAccessibleSelection()): implemented against addAccessibleSelection(int)
+ 	(setBackground(java.awt.Color)): stub for subclasses
+ 	(setBounds(java.awt.Rectangle)): stub for subclasses
+ 	(setCursor(java.awt.Cursor)): stub for subclasses
+ 	(setEnabled(boolean)): stub for subclasses
+ 	(setFont(java.awt.Font)): implemented
+ 	(setForeground(java.awt.Color)): stub for subclasses
+ 	(setLocation(java.awt.Point)): implemented against setBounds()
+ 	(setSize(java.awt.Dimension)): implemented against setBounds()
+ 	(setVisible(boolean)): stub for subclasses
+ 
+ 2004-09-10  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(dateFormat): New static field.
+ 	(getHeaderField): Implemented.
+ 
+ 2004-09-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(exists): Removed.
+ 	(isDirectory): Likewise.
+ 	(getListing): Likewise.
+ 
+ 2004-09-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #8991.
+ 	* java/net/URLConnection.java (getContent): Add support for
+ 	explicit mime types. Call getInputStream() if no handler found.
+ 	* gnu/java/net/content/text/plain.java: Removed
+ 
+ 2004-09-09  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/io/ObjectInputStream.java (callReadMethod): re-throw
+ 	`ClassNotFoundException'.
+ 
+ 2004-09-09  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/SystemColor.java: Fix @link doc entries.
+ 
+ 2004-09-09  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/image/DataBuffer.java: Update API documentation.
+ 	* java/awt/image/DataBufferByte.java: Likewise.
+ 	* java/awt/image/DataBufferDouble.java: Likewise.
+ 	* java/awt/image/DataBufferFloat.java: Likewise.
+ 	* java/awt/image/DataBufferInt.java: Likewise.
+ 	* java/awt/image/DataBufferShort.java: Likewise.
+ 	* java/awt/image/DataBufferUShort.java: Likewise.
+ 
+ 2004-09-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Mention JColorChooser, JComboBox and JTextField addition.
+ 	Set release date.
+ 
+ 2004-09-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* LICENSE: Reindent. List examples and all external libraries
+ 	distributed together with GNU Classpath.
+ 	* examples/README: Fix is/are as indicated by FSF legal.
+ 
+ 2004-09-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(lineSeparator): Made non-final.
+ 	(static): Removed.
+ 	(connect): Initialize lineSeparator lazily. Use ByteArrayInputStream
+ 	instead of StringBufferInputStream.
+ 
+ 2004-09-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(connect): Handle file is a directory case.
+ 
+ 2004-09-08  Sven de Marothy  <sven@physto.se>
+ 	
+ 	Patch from David Gilbert <david.gilbert@object-refinery.com>:
+ 	* java/awt/AWTEventMulticaster.java:
+ 	Fix a big number of documentation errors.
+ 	* java/awt/Adjustable.java
+ 	* java/awt/Point.java
+ 	* java/awt/Polygon.java
+ 	* java/awt/Rectangle.java
+ 	* java/awt/Shape.java
+ 	* java/awt/geom/Area.java
+ 	* java/awt/geom/Ellipse2D.java
+ 	* java/awt/geom/PathIterator.java 
+ 	* java/awt/geom/Point2D.java
+ 	* java/awt/geom/Rectangle2D.java 
+ 	* java/lang/Comparable.java
+ 	* java/util/Arrays.java:
+ 	Likewise. Thank you David!
+ 
+ 2004-09-07  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/doc-files/Area-1.png:
+ 	Graphics for Area documentation. New file.
+ 
+ 	* java/awt/geom/doc-files/Ellipse-1.png:
+ 	Graphics for Ellipse2D documentation. New file.
+ 
+ 	* java/awt/geom/doc-files/GeneralPath-1.png:
+ 	Graphics for GeneralPath documentation. New file.
+ 
+ 	* java/awt/geom/Arc2D.java:
+ 	(intersects): Fix: Now checks the arc segment.
+ 	(contains): Cleaned up.
+ 
+ 	* java/awt/geom/Area.java:
+ 	(isRectangular): Should return true on an empty path.
+ 	(equals): Check for null.
+ 	(rayIntersects): Fix insideness-test
+ 
+ 	* java/awt/geom/CubicCurve2D.java:
+ 	Fix insideness-test to comply with the correct behavior on edges
+ 	* java/awt/geom/GeneralPath.java:
+ 	Likewise
+ 	* java/awt/geom/QuadCurve2D.java:
+ 	Likewise
+ 	
+ 2004-09-07  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/TimeZone.java
+ 	(getDefaultTimeZone): Fixed test to distinguish between hours and
+ 	minutes in specified timezone.
+ 
+ 2004-09-06  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/Canvas.java
+ 	(AccessibleAWTCanvas): added serialization UID
+ 	* java/awt/Label.java
+ 	(AccessibleAWTLabel): added serialization UID
+ 	* java/net/Inet4Address.java
+ 	(Inet4Address): added comment to serialization UID
+ 	* java/text/Format.java
+ 	(Format): added comment to serialization UID
+ 	* javax/rmi/CORBA/Stub.java
+ 	(Stub): added serialization UID
+ 	* javax/security/auth/PrivateCredentialPermission.java
+ 	(PrivateCredentialPermission): added serialization UID
+ 	* javax/swing/JRootPane.java
+ 	(AccessibleJRootPane): added comment to existing UID
+ 	* javax/swing/JSpinner.java
+ 	(DefaultEditor): added serialization UID
+ 	(NumberEditor): added serialization UID
+ 	* javax/swing/SpinnerListModel.java
+ 	(SpinnerListModel): added serialization UID
+ 	* javax/swing/SpinnerNumberModel.java
+ 	(SpinnerNumberModel): added serialization UID
+ 	* javax/swing/text/html/HTML.java
+ 	(UnknownTag): added serialization UID
+ 	* org/ietf/jgss/GSSException.java
+ 	(GSSException): added serialization UID
+ 	
+ 2004-09-06  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Runtime.java
+ 	(load): Added link security check.
+ 	(loadLib): Changed link security check to read check.
+ 	(loadLibrary): Added link security check and throw if ClassLoader
+ 	supplied library doesn't exist.
+ 
+ 2004-09-06  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/io/EncodingManager.java
+ 	(decoder_cons): Removed.
+ 	(encoder_cons): Removed.
+ 	(getSystemProperty): New method. Replaced all direct calls to
+ 	System.getProperty with calls to this new helper that goes
+ 	via AccessController.doPrivileged.
+ 	(findDecoderConstructor): Removed unused caching support.
+ 	(findEncoderConstructor): Removed unused caching support.
+ 	(getDecoder(String,boolean)): Removed unused method.
+ 	(getDecoder(InputStream)): Added exception chaining.
+ 	(getDecoder(InputStream,String,boolean)): Removed unused method.
+ 	(getEncoder(String,boolean)): Removed unused method.
+ 	(getEncoder(OutputStream)): Added exception chaining.
+ 	(getEncoder(OutputStream,String,boolean)): Removed unused method.
+ 	(getEncoder(OutputStream,String)): Added exception chaining.
+ 
+ 2004-09-05  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	Fixed a typo.
+ 	* javax/swing/JToggleButton.java
+ 	Added missing documentation.
+ 	(AccessibleJToggleButton): new inner class
+ 	(AccessibleJToggleButton()): new constructor
+ 	(getAccessibleRole()): new method
+ 	(itemStateChanged(ItemEvent)): new method
+ 	(JToggleButton(Icon, boolean)): new constructor
+ 	(getAccessibleContext()): implemented
+ 	(updateUI()): style cleanup
+ 	* javax/swing/JRadioButton.java
+ 	Added missing documentation.
+ 	(AccessibleJRadioButton): new inner class
+ 	(AccessibleJRadioButton()): new constructor
+ 	(getAccessibleRole()): new method
+ 	(JRadioButton(Icon, boolean)): new constructor
+ 	(JRadioButton(String, boolean)): new constructor
+ 	(JRadioButton(String, Icon, boolean)): new constructor
+ 	(getAccessibleContext()): implemented
+ 	(updateUI()): new method
+ 
+ 2004-09-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
+ 	(setChars): Only call pango_itemize() when vec->glyphitems != NULL.
+ 	Only call pango_shape() when gi->glyphs->num_glyphs > 0.
+ 
+ 2004-09-05  Mark Wielaard  <mark@klomp.org>
+ 	
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Use
+ 	Color.BLACK if c == null, don't create new Color object each time.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java (comp): New private
+ 	field.
+ 	(setColor): Use Color.BLACK when argument null.
+ 	(setComposite): Set this.comp field.
+ 	(getComposite): Return this.comp, or AlphaComposite.SrcOver when null.
+ 	(DrawState.comp): New private field.
+ 	(DrawState.save): Save Composite.
+ 	(DrawState.restore): Restore comp field.
+ 	* java/awt/FontMetrics.java (gRC): New static final private field.
+ 	(getLineMetrics(String, Graphics)): New method.
+ 	(getLineMetrics(String, int, int, Graphics)): Likewise.
+ 	(getLineMetrics(char[], int, int, Graphics)): Likewise.
+ 	(getLineMetrics(CharacterIterator, int, int, Graphics)): Likewise.
+ 	* javax/swing/JMenu.java (JMenu(String, boolean)): Ignore tearoff
+ 	argument. PR SWING/17294.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java (): Always use
+ 	the fall-back code since none of the TextArea methods are really
+ 	implemented now. PR SWING/17296.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
+ 	(GdkGlyphVector_setChars): Replace assert() with if block when
+ 	pango_itemize() returns null. PR AWT/17295.
+ 	(GdkGlyphVector_allInkExtents): Likewise when vec->glyphitems is null.
+ 	
+ 2004-09-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java (mkComboBox):
+ 	New method.
+ 
+ 2004-09-05  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/ComboBoxEditor.java: Added javadocs.
+ 	* javax/swing/ComboBoxModel.java: Likewise.
+ 	* javax/swing/DefaultComboBoxModel.java: Implemented.
+ 	* javax/swing/DefaultListCellRenderer.java: Added javadocs
+ 	and ran through jalopy to fix formatting style.
+ 	(getListCellRendererComponent): Use appropriate border
+ 	if renderer has focus and use noFocusBorder when it doesn't.
+ 	* javax/swing/JComboBox.java: Implemented.
+ 	* javax/swing/JList.java:
+ 	(locationToIndex): New Method. Implemented.
+ 	(indexToLocation): New Method.
+ 	* javax/swing/JPopupMenu.java: 
+ 	(visible): New field.
+ 	(isVisible): Changed to use new field above.
+ 	(setVisible): Likewise.
+ 	* javax/swing/MutableComboBoxModel.java: Added javadocs.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java: 
+ 	(shadow): Changed default color to Color.gray.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java: New File.
+ 	UI delegate for JComboBox.
+ 	* javax/swing/plaf/basic/BasicComboPopup.java: New File.
+ 	Popup menu containing list of JComboBox's items.
+ 	* javax/swing/plaf/basic/BasicComboBoxEditor.java: New File.
+ 	* javax/swing/plaf/basic/BasicComboBoxRenderer.java: New File.
+ 	* javax/swing/plaf/basic/BasicComboBoxUI.java: New File.
+ 	* javax/swing/plaf/basic/BasicComboPopup.java: New File.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	(popupMenuWillBecomeVisible): Set selected path to the first
+ 	element only if it is of type MenuElement. Also fix formatting
+ 	style.
+ 	* javax/swing/plaf/basic/ComboPopup.java: Added javadocs and missing
+ 	methods signatures.
+ 
+ 2004-09-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/dnd/package.html: Fixed typo.
+ 
+ 2004-09-04  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/Box.java: Fix setting of layout in ctor.
+ 	* javax/swing/JScrollPane.java: Scroll headers as well.
+ 	* javax/swing/JTable.java: Reimplement.
+ 	* javax/swing/JViewPort.java: Only add non-null children.
+ 	* javax/swing/ScrollPaneLayout.java: Correct header calculations.
+ 	* javax/swing/Timer.java: Fix stopping null waker.
+ 	* javax/swing/plaf/basic/BasicTableHeaderUI.java: New file.
+ 	* javax/swing/plaf/basic/BasicTableUI.java: New file.
+ 	* javax/swing/table/DefaultTableCellRenderer.java: Configure.
+ 	* javax/swing/table/DefaultTableColumnModel.java: Flesh out.
+ 	* javax/swing/table/DefaultTableModel.java: Clean up.
+ 	* javax/swing/table/JTableHeader.java: Implement.
+ 
+ 2004-09-04  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/DefaultButtonModel.java:
+ 	Skip group notification when no group is set.
+ 
+ 2004-09-04  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JComponent.java
+ 	(resetKeyboardActions): Add null checks.
+ 
+ 2004-09-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java (mkColorChooser):
+ 	New method.
+ 
+ 2004-09-04  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JColorChooser.java:
+ 	Make a couple inner classes static, for jikes.
+ 
+ 2004-09-04  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Color.java: Fix documentation.
+ 	(RGBtoHSB): Use floats for conversions.
+ 	* javax/swing/ButtonGroup.java: Run Jalopy.
+ 	(setSelected): Reimplement.
+ 	* javax/swing/DefaultButtonModel.java: Run Jalopy.
+ 	(changeState): Let ButtonGroup know that the button 
+ 	is changing state.
+ 	* javax/swing/JColorChooser.java: Implement.
+ 	* javax/swing/JLabel.java: Run Jalopy.
+ 	* javax/swing/JSpinner.java: Run Jalopy.
+ 	(setValue): New method.
+ 	* javax/swing/JTabbedPane.java: Run Jalopy.
+ 	(removeTabAt): Call correct remove method.
+ 	* javax/swing/SpinnerNumberModel.java: Run Jalopy.
+ 	(getPreviousValue): Compare minimum value.
+ 	* javax/swing/Timer.java: Run Jalopy.
+ 	(run): Comment out println.
+ 	* javax/swing/ToolTipManager.java:
+ 	(mouseMoved): Get new tooltip text for location.
+ 	* javax/swing/colorchooser/AbstractColorChooserPanel.java:
+ 	Jalopy and Javadoc.
+ 	* javax/swing/colorchooser/ColorChooserComponentFactory.java:
+ 	Implement.
+ 	* javax/swing/colorchooser/DefaultColorSelectionModel.java:
+ 	Run Jalopy.
+ 	(setSelectedColor): Fire ChangeEvent.
+ 	* javax/swing/colorchooser/DefaultHSBChooserPanel.java:
+ 	New file. Implement.
+ 	* javax/swing/colorchooser/DefaultPreviewPanel.java:
+ 	Ditto.
+ 	* javax/swing/colorchooser/DefaultRGBChooserPanel.java:
+ 	Ditto.
+ 	* javax/swing/colorchooser/DefaultSwatchChooserPanel.java:
+ 	Ditto.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	(getArrow): Fix size of upward pointing button.
+ 	* javax/swing/plaf/basic/BasicColorChooserUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	(getWidthOfWidestLabel): Use preferred dimensions.
+ 	(getHeightOfTallestLabel): Ditto.
+ 	* javax/swing/plaf/basic/BasicSpinnerUI.java:
+ 	Run Jalopy.
+ 	(mousePressed): Disable changes to spinner if it is not enabled.
+ 
+ 2004-09-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/DeleteFileHelper.java (DeleteFileHelper): No longer
+ 	public.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(lineWrap): Renamed from "wrapping".
+ 	(wrapStyleWord): NEw field.
+ 	(getLineWrap): Re-edited javadoc comment.
+ 	(setLineWrap): Likewise.
+ 	(getWrapStyleWord): New method.
+ 	(setWrapStyleWord): Likewise.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextAreaUI.java
+ 	(create): New method.
+ 	* javax/swing/text/DefaultHighlighter.java
+ 	(DefaultHighlightPainter.debugRect): Removed.
+ 	* javax/swing/text/StyleContext.java
+ 	(DEFAULT_STYLE): New field.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initComponentDefaults): Add keybindings for selection.backward and
+ 	selection-forward for text components.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(paintSafely): Paint highlight only when something is actually
+ 	selected.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(handleHighlight): New method.
+ 	(setSelectionVisible): Don't do anything when nothing changes.
+ 	Handle highlight.
+ 	(moveDot): Reimplemented. Handle highlight.
+ 	(setDot): Set mark too. Handle highlight.
+ 	(getSelectionPainter): New method.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(defaultActions): Added new actions for text selection.
+ 	* javax/swing/text/DefaultHighlighter.java
+ 	(DefaultHighlightPainter): New inner class.
+ 	(DefaultPainter): New field.
+ 	(paint): Implemented.
+ 	* javax/swing/text/PlainView.java
+ 	(paint): Don't draw background here again.
+ 	* javax/swing/text/Utilities.java
+ 	(getTabbedTextWidth): Use width of ' ' instead of 'm' for tabsize.
+ 	(drawTabbedText): Likewise.
+ 
+ 2004-09-04  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(isFocusTraversable): Predicate on isLightweight()
+ 	(setFocusable): Set isFocusTraversableOverridden.
+ 	(requestFocus): Predicate peer dispatch on !isLightweight()
+ 	(requestFocusInWindow): Likewise.
+ 	(dispatchEventImpl): Coordinate with KeyboardFocusManager.
+ 	* java/awt/Container.java
+ 	(dispatchEventImpl): Predicate on event mask.
+ 	(LightweightDispatcher): Remove focus machinery.
+ 	* java/awt/DefaultFocusTraversalPolicy.java
+ 	(accept): Expand predicate to include isFocusable().
+ 	* java/awt/DefaultKeyboardFocusManager.java:
+ 	Globally change c.dispatchEvent(e) to redispatchEvent(c,e)
+ 	* java/awt/KeyboardFocusManager.java
+ 	(redispatchEvent): Synchronize on event to prevent feedback.
+ 	* javax/swing/AbstractButton.java
+ 	(ButtonFocusListener): Remove class.
+ 	(init): Set focusPainted, focusable.
+ 	* javax/swing/ActionMap.java (get): Check parent for null.
+ 	* javax/swing/InputMap.java (get): Likewise.
+ 	* javax/swing/JComponent.java
+ 	(inputMap_whenFocused): New InputMap.
+ 	(inputMap_whenAncestorOfFocused): Likewise.
+ 	(inputMap_whenInFocusedWindow): Likewise.
+ 	(getActionForKeyStroke): Rewrite.
+ 	(getConditionForKeystroke): Likewise.
+ 	(ActionListenerProxy): New private class.
+ 	(setInputMap): Implement.
+ 	(getInputMap): Likewise.
+ 	(setActionMap): Likewise.
+ 	(getActionMap): Likewise.
+ 	(processComponentKeyEvent): New empty method.
+ 	(processKeyEvent): Implement.
+ 	(processKeyBinding): Likewise.
+ 	(resetKeyboardActions): Rewrite.
+ 	* javax/swing/KeyStroke.java: Rewrite.
+ 	* javax/swing/SwingUtilities.java
+ 	(notifyAction): Implement.
+ 	(replaceUIActionMap): Likewise.
+ 	(replaceUIInputMap): Likewise.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java
+ 	(focusGained): Implement.
+ 	(focusLost): Repaint if focusPainted().
+ 	(installKeyboardActions): Install pressed / released actions.
+ 	(uninstallKeyboardActions): Implement.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(focusColor): New field.
+ 	(installDefaults): Load focus color, install input map.
+ 	(installKeyboardActions): Implement.
+ 	(uninstallKeyboardActions): Likewise.
+ 	(paintFocus): Rewrite.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(Button.focus): New default, midPurple.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(kit): Make static.
+ 	(installUI): Get doc from kit, load defaults.
+ 	(getKeymapName): Implement.
+ 	(createKeymap): Likewise.
+ 	(installKeyboardActions): Likewise.
+ 	(getInputMap): Likewise.
+ 	(getActionMap): Likewise.
+ 	(createActionMap): Likewise.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(getStartPosition): Implement.
+ 	(getEndPosition): Likewise.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(CopyAction): New class.
+ 	(CutAction): Likewise.
+ 	(DefaultKeyTypedAction): Likewise.
+ 	(InsertBreakAction): Likewise.
+ 	(InsertContentAction): Likewise.
+ 	(InsertTabAction): Likewise.
+ 	(PasteAction): Likewise.
+ 	(defaultActions): New static table.
+ 	(createCaret): Implement.
+ 	(getActions): Likewise.
+ 	* javax/swing/text/JTextComponent.java
+ 	(KeymapWrapper): New private class.
+ 	(KeymapActionMap): Likewise.
+ 	(DefaultKeymap): New class.
+ 	(keymaps): New static table.
+ 	(keymap): New field.
+ 	(getKeymap): Implement.
+ 	(removeKeymap): Likewise.
+ 	(addKeymap): Likewise.
+ 	(setKeymap): Likewise.
+ 	(loadKeymap): Likewise.
+ 	(getActions): Likewise.
+ 	(margin): New field.
+ 	(JTextComponent): Build and install default keymap.
+ 	* javax/swing/text/TextAction.java
+ 	(textAction): Call super properly.
+ 	(getTextComponent): Implement.
+ 	* javax/swing/text/Utilities.java
+ 	(drawTabbedText): Adjust position by ascent.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RottView.modelToView): New method.
+ 	(UpdateHandler): Renamed from EventHandler.
+ 	(updateHandler): Renamed from eventHandler.
+ 	(modelToView): Implemented.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(BranchElement.getElement): Return null for non-existing indeces.
+ 	(BranchElement.getElementIndex): Return 0 in some corner cases.
+ 	* javax/swing/text/FieldView.java
+ 	(modelToView): New method.
+ 	* javax/swing/text/PlainView.java
+ 	(modelToView): Made public.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(createBranchElement): Use new constructor of BranchElement.
+ 	(createLeafElement): Renamed arguments.
+ 	(getRootElements): Implemented.
+ 	(BranchElement.start): Removed.
+ 	(BranchElement.end): Likewise.
+ 	(BranchElement.BranchElement): Fixed arguments.
+ 	(BranchElement.getEndOffset): Reimplemented.
+ 	(BranchElement.getStartOffset): Likewis.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(paint): Draw simple vertical line as caret instead of a rectangle.
+ 	* javax/swing/text/JTextComponent.java
+ 	(setText): Use doc directly.
+ 	* javax/swing/text/PlainView.java
+ 	(nextTabStop): Implemented.
+ 	* javax/swing/text/Utilities.java
+ 	(drawTabbedText): nextTabStop() returns an absolute x position.
+ 	(getTabbedTextWidth): Likewise.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/PlainView.java
+ 	(selectedColor): New field.
+ 	(unselectedColor): Likewise.
+ 	(font): Likewise.
+ 	(updateMetrics): New method.
+ 	(lineToRect): Likewise.
+ 	(modelToView): Likewise.
+ 	(drawSelectedText): Use color from JTextComponent ad draw with
+ 	Utilities class.
+ 	(drawUnselectedText): Likewise.
+ 	(paint): Initialize helper fields.
+ 	* javax/swing/text/View.java
+ 	(getChildAllocation): New method.
+ 	(getViewIndex): Likewise.
+ 	(getToolTipText): Likewise.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/Utilities.java
+ 	(drawTabbedText): Reimplemented.
+ 	(getTabbedTextWidth): Likewise.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installDefaults): Install caret and highlighter.
+ 	(modelToView): Use Bias.Forward when calling sibling.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(ElementEdit): Implements DocumentEvent.ElementChange.
+ 	(ElementEdit.ElementEdit): New method.
+ 	(ElementEdit.getChildrenAdded): Likewise.
+ 	(ElementEdit.getChildrenRemoved): Likewise.
+ 	(ElementEdit.getElement): Likewise.
+ 	(ElementEdit.getIndex): Likewise.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(color): Removed.
+ 	(textComponent): Renamed from parent, made private.
+ 	(selectionVisible): Renamed from vis_sel, made private.
+ 	(blinkRate): Renamed from blink, made private.
+ 	(magicCaretPosition): Renamed from magic, made private.
+ 	(visible): Renamed from vis, made private.
+ 	(dot): Made private.
+ 	(mark): Likewise.
+ 	(deinstall): Remove as MouseMotionListener.
+ 	(install): Initialize textComponent first. Add as 
+ 	MouseMotionListener.
+ 	(paint): Reimplemented.
+ 	* javax/swing/text/JTextComponent.java
+ 	(setCaret): Deinstall old caret, install new one and fire property
+ 	change after setting property.
+ 	(setHighlighter): Deinstall old highlighter, install new one and fire
+ 	property change after setting property.
+ 	(setCaretColor): Fire property change after setting property.
+ 	(setDisabledTextColor): Likewise.
+ 	(setSelectedTextColor): Likewise.
+ 	(setSelectionColor): Likewise.
+ 	(modelToView): New method.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(getText): Simplified.
+ 	* javax/swing/text/Segment.java
+ 	(current): New field.
+ 	(current): Reimplemented.
+ 	(first): Likewise.
+ 	(getIndex): Likewise.
+ 	(last): Likewise.
+ 	(next): Likewise.
+ 	(previous): Likewise.
+ 	(setIndex): Likewise.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(defaultTextIconGap): Made protected.
+ 	(defaultTextShiftOffset): Likewise.
+ 	(textShiftOffset): New field.
+ 	(clearTextShiftOffset): New method.
+ 	(getTextShiftOffset): Likewise.
+ 	(setTextShiftOffset): Likewise.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installUI): Add eventHandler as property listener.
+ 	(uninstallUI): remove eventHandler as propert listener.
+ 	(installDefaults): Added comment.
+ 	(installListeners): Likewise.
+ 	(installKeyboardActions): Likewise.
+ 	(uninstallDefaults): Likewise.
+ 	(uninstallListeners): Likewise.
+ 	(uninstallKeyboardActions): Likewise.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	Fixed some typos in comments.
+ 	(insertString): Reimplemented.
+ 	(remove): Likewise.
+ 	(replace): New method.
+ 	(children): Dont use fully qualified class name.
+ 	(DefaultDocumentEvent.offset): Renamed from off.
+ 	(DefaultDocumentEvent.length): Renamed from len.
+ 	(DefaultDocumentEvent.type): New field.
+ 	(DefaultDocumentEvent.DefaultDocumentEvent): New constructor.
+ 	(DefaultDocumentEvent.getType): Implemented.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.textComponent): Removed.
+ 	(RootView.RootView): Don't initialize textComponent.
+ 	(RootView.getViewFactory): New method.
+ 	(EventHandler): New inner class.
+ 	(rootView): Initialize at instance creation.
+ 	(eventHandler): New field.
+ 	(installUI): Don't create view hierarchy directly,
+ 	call modelChanged() instead.
+ 	(modelChanged): New method.
+ 	* javax/swing/text/JTextComponent.java
+ 	(setDocument): Fire property change event.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView.paint): Removed debug output.
+ 	(paintSafely): Draw highlighter before text.
+ 	(paintBackground): Use background color of text component.
+ 	* javax/swing/plaf/basic/BasicToggleButtonUI.java:
+ 	Reformatted.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(BasicToolBarUI): Fixed arguments for constructor.
+ 	(createUI): Fixed creation of object.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/TabSet.java
+ 	(TabSet): Implements java.io.Serializable.
+ 	* javax/swing/text/TabStop.java
+ 	(TabStop): Implements java.io.Serializable.
+ 	(TabStop): Made public.
+ 
+ 2004-09-04  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/text/SimpleAttributeSet.java: New file.
+ 	* javax/swing/text/StyleConstants.java: New file.
+ 	* javax/swing/text/StyleContext.java: New file.
+ 	* javax/swing/text/TabSet.java: New file.
+ 	* javax/swing/text/TabStop.java: New file.
+ 	* javax/swing/text/AbstactDocument.java:
+ 	(AbstractElement): Implement attribute support.
+ 	* javax/swing/text/AttributeSet.java
+ 	(NameAttribute): New static field.
+ 	(ResolveAttribute): New static field.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(setUI): Fire PropertyChange.
+ 	* javax/swing/JLabel.java
+ 	(text): Renamed from labelText.
+ 	(horizontalAlignment): New default vlaue.
+ 	(icon): Renamed from activeIcon.
+ 	(displayedMnemonic): Renamed from mnemonicKey, added default value.
+ 	(displayedMnemonicIndex): Renamed from underlineChar.
+ 	(setDisplayedMnemonic): Reimplemented.
+ 	* javax/swing/JRadioButton.java
+ 	(JRadioButton): New constructors.
+ 	* javax/swing/JTextField.java
+ 	(JTextField): Throw exception if colums < 0, initialitialz
+ 	this.columns directly and initialize document with text 
+ 	conditionally.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicFormattedTextFieldUI.java,
+ 	javax/swing/plaf/basic/BasicPasswordFieldUI.java,
+ 	javax/swing/plaf/basic/BasicTextAreaUI.java: New files.
+ 	* javax/swing/text/FieldView.java
+ 	(paint): Just call super method for now.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/TransferHandler.java,
+ 	javax/swing/plaf/basic/ComboPopup.java: New files
+ 
+ 2004-09-04  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/text/Utilities.java: New file.
+ 
+ 2004-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java:
+ 	Added demo for JTextField.
+ 
+ 2004-09-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (SUBDIRS): Remove external.
+ 	* configure.ac (AC_CONFIG_FILES): Remove external/Makefile.
+ 	* doc/api/Makefile.am: Don't refer to external directory
+ 	* lib/Makefile.am: Likewise.
+ 	* lib/gen-classlist.sh.in: Likewise.
+ 	* external/*: Removed.
+ 	* NEWS: Mention GNU JAXP.
+ 
+ 2004-08-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Add new news.
+ 
+ 2004-08-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Check for sys/time.h, localtime_r, tm_gmtoff in
+ 	struct tm and for for global timezone variable.
+ 	* include/Makefile.am: Generate include/java_util_VMTimeZone.h.
+ 	* include/java_util_TimeZone.h: Removed.
+ 	* include/java_util_VMTimeZone.h: Added.
+ 	* java/util/TimeZone.java (defaultZone): Use VMTimeZone.
+ 	(getDefaultTimeZone): Make package private. Check that GMToffset
+ 	contains at least one digit.
+ 	(getDefaultTimeZoneId, readTimeZoneFile, readtzFile): (Re)Moved to
+ 	VMTimeZone.
+ 	* vm/reference/java/util/VMTimeZone.java: New file with above methods.
+ 	* native/jni/java-util/Makefile.am: Compile new java_util_VMTimeZone.c.
+ 	* native/jni/java-util/java_util_TimeZone.c: Removed.
+ 	* native/jni/java-util/java_util_VMTimeZone.c: New file.
+ 	* native/target/generic/target_generic_misc.h
+ 	(TARGET_NATIVE_MISC_GET_TIMEZONE_STRING): Removed unused macro.
+ 	* NEWS: Mention TimeZone/VMTimeZone split.
+ 	
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(fireValueChanged): Renamed from fireSelectionValueChanged,
+ 	made protected.
+ 
+ 2004-08-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* vm/reference/java/io/VMFile.java:
+ 	Reindented.
+ 
+ 2004-08-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* resource/org/.cvsignore: New file.
+ 	* resource/org/ietf/.cvsignore: Likewise.
+ 	* resource/org/ietf/jgss/.cvsignore: Likewise.
+ 
+ 2004-08-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Depend on automake 1.9.
+ 	* INSTALL: Likewise.
+ 	* INSTALL: Updated to depend on automake 1.9 and libtool 1.5.
+ 	* autogen.sh: Likewise.
+ 	* configure.ac (AM_INIT_AUTOMAKE): Depend on automake 1.9, support
+ 	long paths in dist tarball.
+ 
+ 2004-08-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/TimeZone.java (defaultZone): Try a couple of ways to get
+ 	a TimeZoneId string and then try to convert that to a TimeZone with
+ 	getDefaultSystemTimeZone(String).
+ 	(timezones0): Changed type from Hashtable to HashMap.
+ 	(timezones): Create HashMap, not Hashtable.
+ 	(getDefaultTimeZone): New method, rewritten from CNI version.
+ 	(readTimeZoneFile): New method.
+ 	(readtzFile): Likewise.
+ 	(skipFully): Likewise.
+ 
+ 2004-08-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/System.java (getenv): Do security checks and call
+ 	VMSystem.getenv().
+ 	* vm/reference/java/lang/VMSystem.java (getenv): New static native
+ 	method.
+ 	* native/jni/java-lang/java_lang_VMSystem.c (getenv): New function.
+ 	* include/java_lang_VMSystem.h: Regenerated.
+ 	* NEWS: Mention new VMSystem.getenv() method and reference
+ 	implementation in Runtime Interface section.
+ 
+ 2004-08-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Arrays.java
+ 	(sort(byte[], int, int)): Check fromIndex < 0.
+ 	(sort(char[], int, int)): Likewise.
+ 	(sort(short[], int, int)): Likewise.
+ 	(sort(int[], int, int)): Likewise.
+ 	(sort(long[], int, int)): Likewise.
+ 	(sort(float[], int, int)): Likewise.
+ 	(sort(double[], int, int)): Likewise.
+ 	(sort(Object[], int, int, Comparator)): Likewise.
+ 	(qsort(byte[], int, int)): Honor lower bound from in insertion sort.
+ 	(qsort(char[], int, int)): Honor lower bound from in insertion sort.
+ 	(qsort(short[], int, int)): Honor lower bound from in insertion sort.
+ 	(qsort(int[], int, int)): Honor lower bound from in insertion sort.
+ 	(qsort(long[], int, int)): Honor lower bound from in insertion sort.
+ 	(qsort(float[], int, int)): Honor lower bound from in insertion sort.
+ 	(qsort(double[], int, int)): Honor lower bound from in insertion sort.
+ 
+ 2004-08-27  David Gilbert  <david.gilbert@object-refinery.com>
+ 
+ 	* java/awt/RenderingHints.java: Documented.
+ 	(RenderingHints): Accept null init Map.
+ 	(putAll): Preprocess map to generate appropriate exceptions.
+ 	(remove): Cast object to Key and remove from hintMap.
+ 
+ 2004-08-27  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/Area.java
+ 	Implemented.
+ 
+ 2004-08-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/geom/Arc2D.java (ArcIterator): Make package private.
+ 
+ 2004-08-25  Sven de Marothy <sven@physto.se>
+ 
+ 	* java/awt/geom/Arc2D.java
+ 	Reformatted.
+ 	setArc(): Correct documentation to say 'upper left corner'.
+ 	(setArcByTangent,contains,intersects): Implemented.
+ 	(containsAngle): Corrected to handle negative extents.
+ 	ArcIterator: Set to private.
+ 	ArcIterator: Corrected for CHORD-type arcs, negative extents.
+ 	* java/awt/geom/Ellipse2D.java
+ 	Documented.
+ 	(contains,intersects): Implemented.
+ 	* java/awt/geom/Line2D.java
+ 	(linesIntersect): Correct handling of special cases.
+ 
+ 2004-08-24  Andrew John Hughes <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/Label.java, java/awt/Canvas.java
+ 	Added accessibility classes to AWT Label and Canvas,
+ 	as well as additional documentation for Canvas.
+ 	
+ 2004-08-24  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/awt/KeyboardFocusManager.java
+ 	Added missing documentation.
+ 
+ 2004-08-22  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: news on JSpinner and java crypto
+ 
+ 2004-08-22  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/security/cert/X509CRLSelector.java
+ 	(match): remove unreachable try-catch clauses.
+ 	Reported by: Dalibor Topic <robilad@kaffe.org>
+ 
+ 2004-08-21  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/security/AccessController.java
+ 	Removed FIXME comment.
+ 	(doPriviliged(PrivilegedAction)): push and pop a null context.
+ 	(doPrivileged(PrivilegedExceptionAction)): likewise.
+ 	(doPrivileged(PrivilegedAction,AccessControlContext)): only pass
+ 	the context to `VMAccessController.pushContext'.
+ 	(doPrivileged(PrivilegedExceptionAction,AccessControlContext)):
+ 	likewise.
+ 	* vm/reference/java/security/VMAccessController.java
+ 	(contexts): use a ThreadLocal for this field.
+ 	(pushContext): only take the context as parameter; insert it
+ 	into a thread local stack.
+ 	(popContext): take no arguments. Handle new form of `contexts'
+ 	stack.
+ 	(getContext): set `inGetContext' as early as possible.
+ 	Include the call just prior to `doPrivileged' too.
+ 	Handle new form of `contexts' stack.
+ 
+ 2004-08-20  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/security/cert/X509CRLSelector.java: new file.
+ 	* java/security/cert/X509CertSelector.java: new file.
+ 
+ 2004-08-18  Casey Marshall  <csm@gnu.org>
+ 
+ 	* lib/Makefile.am (dist-hook): add `org' to remove commands, too.
+ 
+ 2004-08-18  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* javax/swing/JTextArea.java
+ 	Implemented insert() method and added additional
+ 	documentation.
+ 
+ 2004-08-18  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* javax/swing/SpinnerListModel.java, javax/swing/SpinnerModel.java
+ 	Implemented SpinnerListModel.  Added documentation to
+ 	SpinnerModel.
+ 
+ 2004-08-18  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/17081
+ 	* java/net/URI.java (string): New field. Make all other fields
+ 	transient.
+ 	(readObject): Implemented.
+ 	(writeObject): Implemented.
+ 	(URI): Set 'string'.
+ 
+ 2004-08-18  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/17079
+ 	* java/util/logging/Handler.java (isLoggable): Accept record if its
+ 	log level equals the threshold level. From Robin Green.
+ 
+ 2004-08-17  Casey Marshall <csm@gnu.org>
+ 
+ 	* lib/Makefile.am (dist-hook): copy `org' too.
+ 
+ 2004-08-17  Casey Marshall <csm@gnu.org>
+ 
+ 	* autogen.sh: use `head -n 1' instead of `head -1'.
+ 
+ 2004-08-16  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/AbstractCollection.java, java/util/AbstractList.java,
+ 	java/util/AbstractMap.java, java/util/AbstractSequentialList.java,
+ 	java/util/ArrayList.java, java/util/Arrays.java,
+ 	java/util/BitSet.java, java/util/Calendar.java,
+ 	java/util/Collection.java, java/util/ListIterator.java,
+ 	java/util/Map.java, java/util/SortedSet.java:
+ 	Added additional exceptions to documentation, along
+ 	with some additions and corrections.
+ 
+ 2004-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .classpath: Updated.
+ 
+ 2004-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Bug 9596.
+ 	* java/lang/Class.java (getName): Fixed javadoc.
+ 
+ 2004-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Bug 9949.
+ 	* java/text/AttributedString.java (AttributedString): Use
+ 	ArrayList to build array of attribute ranges.  Don't use
+ 	`attribs' before it is set.
+ 
+ 2004-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Bug 9948.
+ 	* javax/swing/JDesktopPane.java (LIVE_DRAG_MODE): Now final.
+ 	(OUTLINE_DRAG_MODE): LIVE_DRAG_MODE.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	(NON_CONTINUOUS_DIVIDER): Now final.  Initialize.
+ 
+ 2004-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Bug 9946.
+ 	* gnu/java/security/util/Prime.java (generateRandomPrime): Use
+ 	return result from `add'.
+ 
+ 2004-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Bug 9944.
+ 	* java/rmi/server/UID.java (UID): Read `nextCount', not count.
+ 
+ 2004-08-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* NEWS: Mention VMCompiler.
+ 	* java/lang/Compiler.java: Rewrote in terms of VMCompiler.
+ 	* vm/reference/java/lang/VMCompiler.java: New file.
+ 
+ 2004-08-16  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/File.java File(String,String): Fixed handling of empty
+ 	path.
+ 
+ 2004-08-15  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/security/DummyKeyPairGenerator.java (clone): removed
+ 	useless instanceof check.
+ 	* java/security/DummyMessageDigest.java (clone): likewise.
+ 	* java/security/DummySignature.java (clone): likewise.
+ 	* java/security/MessageDigest.java (clone): remove useless
+ 	instanceof check.
+ 	* java/security/MessageDigestSpi.java (clone): likewise.
+ 	* java/security/Signature.java (clone): provide meaningful
+ 	implementation.
+ 	* java/security/SignatureSpi.java (clone): likewise.
+ 	* javax/crypto/MacSpi.java (clone): likewise.
+ 
+ 2004-08-14  Ka-Hing Cheung  <kahing@javabsp.org>
+ 
+ 	* javax/swing/AbstractSpinnerModel.java,
+ 	javax/swing/JSpinner.java,
+ 	javax/swing/SpinnerNumberModel.java,
+ 	javax/swing/plaf/basic/BasicSpinnerUI.java:
+ 	New files.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initClassDefaults): Added defaults for BasicSpinnerUI.
+ 
+ 2004-08-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/gnu/classpath/examples/swing/Demo.java (mkSpinner):
+ 	New method.
+ 	(mkButtonBar): Add Spinner.
+ 
+ 2004-08-14  Casey Marshall <csm@gnu.org>
+ 
+ 	The Big Crypto Merge of 2004.
+ 
+ 	* configure.ac: generate jgss resource Makefiles.
+ 
+ 	* lib/Makefile.am: updated for jgss resources.
+ 
+ 	* lib/gen-classlist.sh.in: updated for classes in org/.
+ 
+ 	* javax/security/auth/x500/X500Principal.java: replaced with GNU
+ 	Crypto's version.
+ 
+ 	* resource/org/Makefile.am,
+ 	* resource/org/ietf/Makefile.am,
+ 	* resource/org/ietf/jgss/Makefile.am:
+ 	new files.
+ 
+ 	Files imported from GNU Crypto.
+ 	* javax/crypto/BadPaddingException.java
+ 	* javax/crypto/Cipher.java
+ 	* javax/crypto/CipherInputStream.java
+ 	* javax/crypto/CipherOutputStream.java
+ 	* javax/crypto/CipherSpi.java
+ 	* javax/crypto/EncryptedPrivateKeyInfo.java
+ 	* javax/crypto/ExemptionMechanism.java
+ 	* javax/crypto/ExemptionMechanismException.java
+ 	* javax/crypto/ExemptionMechanismSpi.java
+ 	* javax/crypto/IllegalBlockSizeException.java
+ 	* javax/crypto/KeyAgreement.java
+ 	* javax/crypto/KeyAgreementSpi.java
+ 	* javax/crypto/KeyGenerator.java
+ 	* javax/crypto/KeyGeneratorSpi.java
+ 	* javax/crypto/Mac.java
+ 	* javax/crypto/MacSpi.java
+ 	* javax/crypto/Makefile.am
+ 	* javax/crypto/NoSuchPaddingException.java
+ 	* javax/crypto/NullCipher.java
+ 	* javax/crypto/NullCipherImpl.java
+ 	* javax/crypto/SealedObject.java
+ 	* javax/crypto/SecretKey.java
+ 	* javax/crypto/SecretKeyFactory.java
+ 	* javax/crypto/SecretKeyFactorySpi.java
+ 	* javax/crypto/ShortBufferException.java
+ 	* javax/crypto/interfaces/DHKey.java
+ 	* javax/crypto/interfaces/DHPrivateKey.java
+ 	* javax/crypto/interfaces/DHPublicKey.java
+ 	* javax/crypto/interfaces/PBEKey.java
+ 	* javax/crypto/spec/DESKeySpec.java
+ 	* javax/crypto/spec/DESedeKeySpec.java
+ 	* javax/crypto/spec/DHGenParameterSpec.java
+ 	* javax/crypto/spec/DHParameterSpec.java
+ 	* javax/crypto/spec/DHPrivateKeySpec.java
+ 	* javax/crypto/spec/DHPublicKeySpec.java
+ 	* javax/crypto/spec/IvParameterSpec.java
+ 	* javax/crypto/spec/PBEKeySpec.java
+ 	* javax/crypto/spec/PBEParameterSpec.java
+ 	* javax/crypto/spec/RC2ParameterSpec.java
+ 	* javax/crypto/spec/RC5ParameterSpec.java
+ 	* javax/crypto/spec/SecretKeySpec.java
+ 	* javax/security/auth/AuthPermission.java
+ 	* javax/security/auth/DestroyFailedException.java
+ 	* javax/security/auth/Destroyable.java
+ 	* javax/security/auth/Policy.java
+ 	* javax/security/auth/PrivateCredentialPermission.java
+ 	* javax/security/auth/RefreshFailedException.java
+ 	* javax/security/auth/Refreshable.java
+ 	* javax/security/auth/Subject.java
+ 	* javax/security/auth/SubjectDomainCombiner.java
+ 	* javax/security/auth/callback/Callback.java
+ 	* javax/security/auth/callback/CallbackHandler.java
+ 	* javax/security/auth/callback/ChoiceCallback.java
+ 	* javax/security/auth/callback/ConfirmationCallback.java
+ 	* javax/security/auth/callback/LanguageCallback.java
+ 	* javax/security/auth/callback/NameCallback.java
+ 	* javax/security/auth/callback/PasswordCallback.java
+ 	* javax/security/auth/callback/TextInputCallback.java
+ 	* javax/security/auth/callback/TextOutputCallback.java
+ 	* javax/security/auth/callback/UnsupportedCallbackException.java
+ 	* javax/security/auth/login/AccountExpiredException.java
+ 	* javax/security/auth/login/AppConfigurationEntry.java
+ 	* javax/security/auth/login/Configuration.java
+ 	* javax/security/auth/login/CredentialExpiredException.java
+ 	* javax/security/auth/login/FailedLoginException.java
+ 	* javax/security/auth/login/LoginContext.java
+ 	* javax/security/auth/login/LoginException.java
+ 	* javax/security/auth/login/NullConfiguration.java
+ 	* javax/security/auth/x500/X500PrivateCredential.java
+ 	* javax/security/sasl/AuthenticationException.java
+ 	* javax/security/sasl/AuthorizeCallback.java
+ 	* javax/security/sasl/RealmCallback.java
+ 	* javax/security/sasl/RealmChoiceCallback.java
+ 	* javax/security/sasl/Sasl.java
+ 	* javax/security/sasl/SaslClient.java
+ 	* javax/security/sasl/SaslClientFactory.java
+ 	* javax/security/sasl/SaslException.java
+ 	* javax/security/sasl/SaslServer.java
+ 	* javax/security/sasl/SaslServerFactory.java
+ 	* org/ietf/jgss/ChannelBinding.java
+ 	* org/ietf/jgss/GSSContext.java
+ 	* org/ietf/jgss/GSSCredential.java
+ 	* org/ietf/jgss/GSSException.java
+ 	* org/ietf/jgss/GSSManager.java
+ 	* org/ietf/jgss/GSSName.java
+ 	* org/ietf/jgss/MessageProp.java
+ 	* org/ietf/jgss/Oid.java
+ 	* resources/org/ietf/jgss/MessagesBundle.properties
+ 
+ 	Files imported from Jessie <http://www.nongnu.org/jessie/>
+ 	* javax/net/ServerSocketFactory.java
+ 	* javax/net/SocketFactory.java
+ 	* javax/net/VanillaServerSocketFactory.java
+ 	* javax/net/VanillaSocketFactory.java
+ 	* javax/net/ssl/HandshakeCompletedEvent.java
+ 	* javax/net/ssl/HandshakeCompletedListener.java
+ 	* javax/net/ssl/HostnameVerifier.java
+ 	* javax/net/ssl/HttpsURLConnection.java
+ 	* javax/net/ssl/KeyManager.java
+ 	* javax/net/ssl/KeyManagerFactory.java
+ 	* javax/net/ssl/KeyManagerFactorySpi.java
+ 	* javax/net/ssl/ManagerFactoryParameters.java
+ 	* javax/net/ssl/SSLContext.java
+ 	* javax/net/ssl/SSLContextSpi.java
+ 	* javax/net/ssl/SSLException.java
+ 	* javax/net/ssl/SSLHandshakeException.java
+ 	* javax/net/ssl/SSLKeyException.java
+ 	* javax/net/ssl/SSLPeerUnverifiedException.java
+ 	* javax/net/ssl/SSLPermission.java
+ 	* javax/net/ssl/SSLProtocolException.java
+ 	* javax/net/ssl/SSLServerSocket.java
+ 	* javax/net/ssl/SSLServerSocketFactory.java
+ 	* javax/net/ssl/SSLSession.java
+ 	* javax/net/ssl/SSLSessionBindingEvent.java
+ 	* javax/net/ssl/SSLSessionBindingListener.java
+ 	* javax/net/ssl/SSLSessionContext.java
+ 	* javax/net/ssl/SSLSocket.java
+ 	* javax/net/ssl/SSLSocketFactory.java
+ 	* javax/net/ssl/TrivialHostnameVerifier.java
+ 	* javax/net/ssl/TrustManager.java
+ 	* javax/net/ssl/TrustManagerFactory.java
+ 	* javax/net/ssl/TrustManagerFactorySpi.java
+ 	* javax/net/ssl/X509KeyManager.java
+ 	* javax/net/ssl/X509TrustManager.java
+ 	* javax/security/cert/Certificate.java
+ 	* javax/security/cert/CertificateEncodingException.java
+ 	* javax/security/cert/CertificateException.java
+ 	* javax/security/cert/CertificateExpiredException.java
+ 	* javax/security/cert/CertificateNotYetValidException.java
+ 	* javax/security/cert/CertificateParsingException.java
+ 	* javax/security/cert/X509CertBridge.java
+ 	* javax/security/cert/X509Certificate.java
+ 
+ 2004-08-14  Casey Marshall <csm@gnu.org>
+ 
+ 	Author e-mail updated for all files.
+ 	* gnu/java/security/OID.java (equals): test if the aurgment is an
+ 	instance of OID.
+ 	(compareTo): use `equals'.
+ 	* gnu/java/security/der/BitString.java (equals): test if the
+ 	argument is an instance of BitString.
+ 	* gnu/java/security/der/DERReader.java: Removed NIO imports.  Made
+ 	class final. Made fields private.
+ 	(<init>): new constructor.
+ 	(skip): new method.
+ 	(makeString): made static; don't use NIO.
+ 	(fromIso88591, fromUtf16Be, fromUtf8): new methods.
+ 	* gnu/java/security/der/DERWriter.java: fixed imports.
+ 	(writeString): don't use NIO.
+ 	(toIso88591, toUtf16Be, toUtf8): new methods.
+ 	* gnu/java/security/der/DERValue.java: formatting changes only.
+ 	* gnu/java/security/der/DER.java: likewise.
+ 
+ 2004-08-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Add --enable-gtk-cairo checking (cairo, pangoft2).
+ 	* include/Makefile.am: Add rules for
+ 	gnu_java_awt_peer_gtk_GdkClasspathFontPeer.h,
+ 	gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.h,
+ 	gnu_java_awt_peer_gtk_GdkGlyphVector.h and
+ 	gnu_java_awt_peer_gtk_GdkGraphics2D.h.
+ 	* include/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.h: New generated
+ 	file.
+ 	* include/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.h: Idem.
+ 	* include/gnu_java_awt_peer_gtk_GdkGlyphVector.h: Idem.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h: Regenerated.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics2D.h: New generated file.
+ 	* include/gnu_java_awt_peer_gtk_GtkFramePeer.h: Regenerated.
+ 	* native/jni/gtk-peer/Makefile.am: Add gtk_cairo_c_source_files when
+ 	GTK_CAIRO is set.
+ 	* native/jni/gtk-peer/
+ 	gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c: Declare variables
+ 	at top of functions/block.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Likewise.
+ 
+ 2004-08-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* examples/.cvsignore: New file.
+ 
+ 2004-08-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Rectangle.java (intersects): Check r.width and r.height
+ 	first.
+ 
+ 2004-08-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/nio/CharBuffer.java (put): Fix typo.
+ 	* java/nio/DoubleBuffer.java (put): Fix typo.
+ 	* java/nio/FloatBuffer.java (put): Fix typo.
+ 	* java/nio/IntBuffer.java (put): Fix typo.
+ 	* java/nio/LongBuffer.java (put): Fix typo.
+ 	* java/nio/ShortBuffer.java (put): Fix typo.
+ 
+ 2004-08-09  Florian Weimer  <fw@deneb.enyo.de>
+ 
+ 	* java/nio/ByteBuffer.java (put): Fix typo.
+ 
+ 2004-08-12  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/net/URL.java (URL): Delete whitespaces in the protocol string.
+ 
+ 2004-08-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* vm/reference/java/lang/VMClassLoader.java: Added security
+ 	comment.
+ 
+ 2004-08-10  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: added newitem about generics branch 
+ 
+ 2004-08-09  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR AWT/16121
+ 	* native/jni/gtk-peer/gthread-jni.c: Include stdio.h.  Eliminate
+ 	type-punning compiler warnings using unions.
+ 	(throw): Replace bzero with memset.
+ 
+ 2004-08-09  Andreas Tobler  <a.tobler@schweiz.ch>
+ 	    Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: Move
+ 	NSA_PB macros to gtkpeer.h.  Include gtkpeer.h.
+ 	* native/jni/gtk-peer/gtkpeer.h: Move NSA_PB macros here.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(nativeSetIconImageFromDecoder): Use NSA_GET_PB_PTR macro.
+ 
+ 2004-08-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JMenuItem.java
+ 	(getMenuDragMouseListeners): New method.
+ 	(getMenuKeyListeners): Likewise.
+ 
+ 2004-08-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(model): Made protected.
+ 	(actionListener): Likewise.
+ 	(changeListener): Likewise.
+ 	(itemListener): Likewise.
+ 	(multiClickThreshhold): New field.
+ 	(getActionListeners): New method.
+ 	(getChangeListeners): Likewise.
+ 	(getItemListeners): Likewise.
+ 	(fireItemStateChanged): Simplified implementation.
+ 	(fireActionPerformed): Likewise.
+ 	(fireStateChanged): Likewise.
+ 	(getMultiClickThreshhold): New method.
+ 	(setMultiClickThreshhold): Likewise.
+ 
+ 2004-08-09  Craig Black  <craig.black@aonix.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java 
+ 	(drawImage): Add support for scaling pixmaps.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h,
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(copyAndScalePixmap): New native method.
+ 
+ 2004-08-08  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Button.java (Button()): Use empty string rather than
+ 	null in no-label constructor.
+ 
+ 2004-08-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c:
+ 	#include gdk.h, not gtk.h. #include jni.h, native_state.h, string.h
+ 	and stdlib.h, not gtkpeer.h.
+ 	(*vm): New static variable.
+ 	(areaPreparedID): Make static.
+ 	(areaUpdatedID): Likewise.
+ 	(area_prepared): Get and use JNIEnv through stored JavaVM *vm.
+ 	(area_prepared): Likewise.
+ 	(area_updated): Likewise.
+ 	(closed): Likewise.
+ 	(initStaticState): Initialize *vm javaVM.
+ 	(pumpBytes): Use given env, not global gdk_env.
+ 
+ 2004-08-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/geom/CubicCurve2D.java (solveCubic): Removed duplicate
+ 	comments.
+ 
+ 2004-08-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Reindent.
+ 
+ 2004-08-08  David Jee  <djee@redhat.com>
+ 
+ 	PR AWT/16682
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
+ 	(nativeSetIconImageFromData): New native method declaration.
+ 	(setIconImage): Handle images not produced from GdkPixbufDecoder.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java
+ 	(getPixelCache): New method.
+ 	(getColorModel): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
+ 	(free_pixbuf_data): New helper function.
+ 	(nativeSetIconImageFromData): New function.
+ 
+ 2004-08-08  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Component.java:
+ 	(processMouseEvent): Consume event after
+ 	listene	rs process it.
+ 	(processMouseMotionEvent): ditto.
+ 	(processMouseWheelEvent): ditto.
+ 	* java/awt/Container.java:
+ 	(acquireComponentForMouseEvent):
+ 	Do not dispatch to events that have been
+ 	removed from the Container.
+ 	(handleEvent): Consume the MouseEvents.
+ 	* javax/swing/RepaintManager.java:
+ 	(paintDirtyRegions): Do not add to list of 
+ 	damaged areas if the component has no root.
+ 
+ 2004-08-08  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	PR SWING/16576
+ 	* javax/swing/JLayeredPane.java
+ 	(setLayer): Permit changing layer after addition.
+ 	(setPosition): Permit over-length positions.
+ 	(layerToRange): Compare intValue()s.
+ 	* javax/swing/Box.java (createHorizontalBox): Implement.
+ 	(createRigidArea): Likewise.
+ 	(createVerticalBox): Likewise.
+ 
+ 2004-08-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/DatagramSocket.java: Fixed typo.
+ 
+ 	* java/awt/image/Kernel.java (clone): Use super.clone().
+ 
+ 2004-08-04  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: latest AWT+SWING screenshots
+ 	* doc/www.gnu.org/faq/faq.wml: [BUG9846] entry on proprietary
+ 	VM integration
+ 
+ 2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/sql/Timestamp.java (valueOf): Synchronize access to dateFormat.
+ 
+ 2004-08-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* doc/api/Makefile.am,
+ 	external/Makefile.am,
+ 	lib/Makefile.am:
+ 	Fixed usage of find.
+ 
+ 2004-08-01  Sven de Marothy  <sven@physto.se>
+ 
+ 	* java/awt/geom/CubicCurve2.java: Reindent.
+ 	(contains): Implemented.
+ 	(intersects): Implemented.
+ 	* java/awt/geom/QuadCurve2D.java: Likewise.
+ 	* java/awt/geom/GeneralPath.java: Reindent and document.
+ 	Fully (re)implemented using separate xpoints and ypoints
+ 	float[] coords.
+ 	* java/awt/geom/RoundRectangle2D.java: Several bugfixes (Bug #6007).
+ 
+ 2004-08-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* NEWS: Mention new examples.
+ 	* Makefile.am (SUBDIRS): Add examples directory.
+ 	* configure.ac (AC_CONFIG_FILES): Add examples/Makefile.
+ 	* lib/standard.omit: Remove TestAWT.java and Test.java
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: Removed.
+ 	* gnu/java/awt/peer/gtk/Test.java: Removed.
+ 	* examples/README: New file.
+ 	* examples/Makefile.am: New file.
+ 	* examples/gnu/classpath/examples/icons/*.png: New icon resources.
+ 	* examples/gnu/classpath/examples/awt/Demo.java: New class.
+ 	* examples/gnu/classpath/examples/swing/Demo.java: New class.
+ 
+ 2004-08-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/Makefile.am
+ 	(EXTRA_DIST): Removed.
+ 
+ 2004-07-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/DefaultTableColumnModel.java
+ 	(serialVersionUID): Made private.
+ 	(listenerList): Initialize.
+ 	(changeEvent): Initialize.
+ 	* javax/swing/table/JTableHeader.java
+ 	(JTableHeader): New constructors.
+ 	(createDefaultColumnModel): New method.
+ 	* javax/swing/table/TableColumn.java
+ 	(setHeaderRenderer): Simplified code.
+ 	(setCellRenderer): Likewise.
+ 	(setWidth): Likewise.
+ 
+ 2004-07-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/text/AbstractDocument.java: Reindent.
+ 	* javax/swing/text/AttributeSet.java: Reindent.
+ 	* javax/swing/text/DefaultEditorKit.java: Reindent.
+ 	* javax/swing/text/EditorKit.java: Reindent.
+ 	* javax/swing/text/Position.java: Reindent.
+ 	* javax/swing/text/StyledEditorKit.java: Reindent.
+ 	* javax/swing/text/TextAction.java: Reindent.
+ 	* javax/swing/text/ViewFactory.java: Reindent.
+ 
+ 2004-07-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(JFormattedTextField): Implemented.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(BeepAction): New inner class.
+ 	* javax/swing/text/Segment.java
+ 	(partialReturn): New field.
+ 	(setPartialReturn): New method.
+ 	(isPartialReturn): Likewise.
+ 	* javax/swing/text/View.java
+ 	(createFragment): Fixed typo.
+ 	(getStartOffset): New method.
+ 	(getEndOffset): Likewise.
+ 
+ 2004-07-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/basic/BasicArrowButton.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicListUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicTextUI.java: Reindent.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java: Reindent.
+ 
+ 2004-07-31  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/Box.java:
+ 	(createGlue): Implemented
+ 	(createHorizontalGlue): Implemented
+ 	(createHorizontalStrut): Implemented
+ 	(createVerticalGlue): Implemented
+ 	(createVerticalStrut): Implemented
+ 
+ 2004-07-31  Roman Kennke  <roman@ontographics.com>
+ 
+ 	* javax/swing/BoxLayout.java: Reimplement.
+ 
+ 2004-07-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/Component.java: Reindent.
+ 	* java/awt/im/InputContext.java: Reindent.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c:
+ 	Reindent.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Reindent.
+ 
+ 2004-07-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: Regenerated.
+ 
+ 2004-07-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (create): Use tf
+ 	variable in setEditable call.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(gtkWidgetSetBackground): New method.
+ 	(gtkWidgetSetForeground): Likewise.
+ 	(create): Set peer's editable state based on awtComponent's.
+ 
+ 2004-07-31  David Jee  <djee@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetGetPreferredDimensions): For widgets extending GtkWindow,
+ 	use their default sizes rather than their natural requisitions.
+ 
+ 2004-07-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(gtkWidgetSetSensitive): Removed.
+ 	(gtkWidgetSetParent): Removed.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetSetSensitive): New method.
+ 	(gtkWidgetSetParent): Likewise.
+ 	Remove all set methods.
+ 	* include/gnu_java_awt_peer_gtk_GtkChoicePeer.h: Regenerated.
+ 
+ 2004-07-31  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java
+ 	(GtkChoicePeer): Do not automatically select first item.
+ 	(getHistory): Remove.
+ 	(nativeGetSelected): New method.
+ 	(nativeRemoveAll): New method.
+ 	(add): Use nativeGetSelected() instead of getHistory().
+ 	(remove): Likewise.
+ 	(removeAll): Call nativeRemoveAll().
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(create): Migrate to GtkComboBox.
+ 	(append): Likewise.
+ 	(nativeAdd): Likewise.
+ 	(nativeRemove): Likewise.
+ 	(select): Likewise.
+ 	(nativeRemoveAll): New method.
+ 	(nativeGetSelected): New method.
+ 	(selection_changed): New method.
+ 	(getHistory): Remove.
+ 	(item_activate): Remove.
+ 	(item_removed): Remove.
+ 	(connect_choice_item_selectable_hook): Remove.
+ 
+ 2004-07-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java: Document AWT 1.0 event handler
+ 	methods.
+ 
+ 2004-07-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java: Reindent.
+ 	* gnu/java/awt/image/ImageDecoder.java: Reindent.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Reindent.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java: Reindent.
+ 	* java/awt/DefaultKeyboardFocusManager.java: Reindent.
+ 	* java/awt/Frame.java: Reindent.
+ 	* javax/swing/JCheckBox.java: Reindent.
+ 	* javax/swing/JCheckBoxMenuItem.java: Reindent.
+ 	* javax/swing/UIDefaults.java: Reindent.
+ 	* javax/swing/UIManager.java: Reindent.
+ 
+ 2004-07-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/image/DirectColorModel.java: Reindent.
+ 	* java/awt/image/MemoryImageSource.java: Likewise.
+ 	* java/awt/image/RGBImageFilter.java: Likewise.
+ 
+ 2004-07-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	PR AWT/16040
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
+ 	* java/awt/AWTKeyStroke.java: Remove old modifier masks.
+ 	* java/awt/Component.java: Replace old modifier masks with new
+ 	ones.
+ 	* java/awt/Container.java: Call getModifiersEx, not
+ 	getModifiers.
+ 	* java/awt/DefaultKeyboardFocusManager.java: Likewise.  Remove
+ 	old modifier masks.
+ 	* javax/swing/JMenuItem.java: Replace old button masks with new
+ 	ones.
+ 	* javax/swing/KeyStroke.java: Call getModifiersEx, not
+ 	getModifiers.
+ 	* javax/swing/SwingUtilities.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Replace old
+ 	mask macros with new ones.
+ 	* native/jni/gtk-peer/gtkpeer.h: Replace old button and modifier mask
+ 	macros with new ones representing new masks.
+ 
+ 2004-07-31  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java
+ 	(postProcessKeyEvent): Only activate MenuShortcuts on KEY_PRESSED
+ 	event.  Fix shift modifier checking.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(accel_attach): Remove.
+ 	(setupAccelGroup): Remove calls to accel_attach.
+ 
+ 2004-07-31  Patrik Reali  <reali@acm.org>
+ 
+ 	* gnu/java/nio/SelectorImpl.java,
+ 	include/Makefile.am,
+ 	include/gnu_java_nio_SelectorImpl.h,
+ 	include/gnu_java_nio_VMSelector.h,
+ 	native/jni/java-nio/Makefile.am,
+ 	native/jni/java-nio/gnu_java_nio_SelectorImpl.c,
+ 	native/jni/java-nio/gnu_java_nio_VMSelector.c,
+ 	vm/reference/gnu/java/nio/VMSelector.java: native method moved from
+ 	gnu/java/nio/SelectorImpl to vm/reference/gnu/java/nio/VMSelector
+ 
+ 2004-07-31  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java:
+ 	(acquireComponentForMouseEvent): Respect
+ 	the event mask when looking for candidate.
+ 	* javax/swing/JComponent.java:
+ 	Remove toolTip field.
+ 	(createToolTip): Create a tooltip on demand.
+ 	(setToolTipText): Register with the ToolTipManager.
+ 	(getToolTipText(MouseEvent)): Return getToolTipText().
+ 	* javax/swing/JToolTip.java: Implement.
+ 	* javax/swing/Timer.java: Jalopy.
+ 	(restart): Call stop, then start.
+ 	(stop): Interrupt the timer rather than wait for
+ 	the timer to come to a stop naturally.
+ 	* javax/swing/ToolTipManager.java: Implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Change ToolTip.background color.
+ 	* javax/swing/plaf/basic/BasicToolTipUI.java:
+ 	Implement.
+ 
+ 2004-07-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/Makefile.am: Add rules to generate
+ 	gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h.
+ 	* include/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h: New
+ 	generated header file.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h:
+ 	Removed
+ 	* native/jni/gtk-peer/gthread-jni.c: Define MIN_, MAX_ and NORM_
+ 	PRIORITY when not already defined in header file.
+ 
+ 2004-07-31  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: AWT bug reports on GCC bugzilla
+ 	* doc/www.gnu.org/faq/faq.wml: how to edit the web pages
+ 
+ 2004-07-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkButtonPeer.h: Regenerated.
+ 	* include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Likewise.
+ 
+ 	* include/gnu_java_nio_VMPipe.h: Regenerated.
+ 
+ 2004-07-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkArg.java: Remove file.
+ 	* gnu/java/awt/peer/gtk/GtkArgList.java: Remove file.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(create(String)): New method.
+ 	(create): Call new create method.
+ 	(getArgs): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c 
+ 	(nativeCreate): Rename to create.
+ 	(gtkSetLabel): Rename to gtkButtonSetLabel.
+ 	(gtkToggleButtonSetActive): New method.
+ 	(create): Call gtkToggleButtonSetActive and gtkButtonSetLabel.
+ 	(setState): Replace set call with gtkToggleButtonSetActive.
+ 	(setLabel): Replace gtkSetLabel call with gtkButtonSetLabel.
+ 	(getArgs): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetSetSensitive): New method.
+ 	(gtkWidgetSetParent): Likewise.
+ 	(GtkComponentPeer): Call setParent, setComponentBounds and
+ 	setVisibleAndEnabled.
+ 	(setParent): New method.
+ 	(setComponentBounds): New method.
+ 	(setVisibleAndEnabled): New method.
+ 	(setEnabled): Call gtkWidgetSetSensitive.
+ 	(getArgs): Remove method.
+ 	Remove all set methods.
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (create): Call
+ 	gtkWindowSetModal, setTitle and setResizable.
+ 	(getArgs): Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(setComponentBounds): New method.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setResizable):
+ 	Replace set call with gtkWindowSetResizable.
+ 	(getArgs): Remove method.
+ 	(create): Call setTitle and setResizable.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(gtkWindowSetTitle): New method.
+ 	(gtkWindowSetResizable): New method.
+ 	(gtkWindowSetModal): New method.
+ 	(setParent): New method.
+ 	(setVisibleAndEnabled): New method.
+ 	(getArgs): Remove method.
+ 	(setTitle): Call gtkWindowSetTitle.
+ 	(setResizable): Call gtkWindowSetResizable.
+ 	* native/jni/gtk-peer/gtkpeer.h [DEBUG_LOCKING]: New define to turn on
+ 	and off locking instrumentation.
+ 
+ 2004-07-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/AbstractButton.java: Reformat.
+ 	* javax/swing/ActionMap.java: Likewise.
+ 	* javax/swing/ComponentInputMap.java: Likewise.
+ 	* javax/swing/DefaultDesktopManager.java: Likewise.
+ 	* javax/swing/ImageIcon.java: Likewise.
+ 	* javax/swing/InputMap.java: Likewise.
+ 	* javax/swing/JButton.java: Likewise.
+ 	* javax/swing/JEditorPane.java: Likewise.
+ 	* javax/swing/JInternalFrame.java: Likewise.
+ 	* javax/swing/JMenu.java: Likewise.
+ 	* javax/swing/JMenuBar.java: Likewise.
+ 	* javax/swing/JMenuItem.java: Likewise.
+ 	* javax/swing/JOptionPane.java: Likewise.
+ 	* javax/swing/JPopupMenu.java: Likewise.
+ 	* javax/swing/JRootPane.java: Likewise.
+ 	* javax/swing/JScrollPane.java: Likewise.
+ 	* javax/swing/JTable.java: Likewise.
+ 	* javax/swing/JTextField.java: Likewise.
+ 	* javax/swing/JToolBar.java: Likewise.
+ 	* javax/swing/MenuSelectionManager.java: Likewise.
+ 	* javax/swing/RepaintManager.java: Likewise.
+ 	* javax/swing/ScrollPaneLayout.java: Likewise.
+ 	* javax/swing/UIManager.java: Likewise.
+ 	* javax/swing/ViewportLayout.java: Likewise.
+ 
+ 2004-07-30  Craig Black  <craig.black@aonix.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java 
+ 	(drawRoundRect): Implemented.
+ 	(fillRoundRect): Implemented.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java 
+ 	(drawRoundRect): Reimplemented to match GdkGraphics.
+ 	(fillRoundRect): Reimplemented to match GdkGraphics.
+ 
+ 2004-07-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(initState(GtkComponentPeer)): Don't return array of colour
+ 	values.
+ 	(GdkGraphics(int,int)): Set default font to size 12.
+ 	(GdkGraphics(GtkComponentPeer)): Set graphics colour to
+ 	component's foreground colour.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(initState(GtkComponentPeer)): Don't return array of colour
+ 	values.
+ 	(GdkGraphics2D(GtkComponentPeer)): Set foreground and background
+ 	colours to component's colours.
+ 	(current_colors_of_widget): Remove function.
+ 	* gnu/java/awt/peer/gtk/GtkOffScreenImage.java (getGraphics):
+ 	Return a new graphics object.
+ 	* java/awt/Font.java (toString): Fix format.
+ 	* java/awt/Graphics.java (toString): Likewise.
+ 
+ 2004-07-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h: Regenerated
+ 
+ 2004-07-30  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java (createImageProducer): New.
+ 	Default implementation.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (createImageProducer): New.
+ 	Implement using GdkPixbufDecoder.
+ 
+ 2004-07-30  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/lang/Runtime.java
+ 	(addShutdownHook): Improved error messages.
+ 
+ 2004-07-29  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+ 
+ 	* java/util/Collection.java, java/util/List.java,
+ 	java/util/Map.java, java/util/Set.java,
+ 	java/util/SortedMap.java, java/util/SortedSet.java:
+ 	Added additional exceptions to documentation.
+ 	
+ 2004-07-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/Makefile.am: Default to gcj as source to bytecode compiler.
+ 
+ 2004-07-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* lib/Makefile.am: Don't include glibj.zip into dist tarball.
+ 
+ 2004-07-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java
+ 	(addNotify): Use AccessController to allow execution of privileged
+ 	code.
+ 
+ 2004-07-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/awt/peer/GLightweightPeer.java,
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	gnu/javax/rmi/CORBA/StubDelegateImpl.java,
+ 	javax/swing/JScrollPane.java: Removed
+ 	redundant imports.
+ 
+ 	* configure.ac: Correct text for --disable-gtk-peer option.
+ 
+ 2004-07-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/security/action/GetPropertyAction.java (setParameters):
+ 	Renamed from 'setName'. New 2-argument form with default value.
+ 	(run): Pass default 'value' parameter to System.getProperty().
+ 	* gnu/java/security/action/SetAccessibleAction.java: Fix javadoc
+ 	typos.
+ 	* gnu/java/net/protocol/http/Connection.java: Use 'setParameters'
+ 	not 'setName'.
+ 
+ 2004-07-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am
+ 	(SUBIDRS): Removed gnu, java, javax and vm.
+ 	* configure.ac
+ 	(AC_CONFIG_FILES): Removed all now unused Makefiles.
+ 	* lib/Makefile.am
+ 	(dist-hook): New target to put all files in the gnu, java, javax and
+ 	vm directories into the dist tarball.
+ 	* lib/gen-classlist.sh.in: Don't search for class files in
+ 	${top_builddir}/java and ${top_builddir}/javax. There are none.
+ 	* gnu/classpath/.cvsignore,
+ 	gnu/classpath/Makefile.am,
+ 	gnu/.cvsignore,
+ 	gnu/java/awt/.cvsignore,
+ 	gnu/java/awt/image/.cvsignore,
+ 	gnu/java/awt/image/Makefile.am,
+ 	gnu/java/awt/Makefile.am,
+ 	gnu/java/awt/peer/.cvsignore,
+ 	gnu/java/awt/peer/gtk/.cvsignore,
+ 	gnu/java/awt/peer/gtk/Makefile.am,
+ 	gnu/java/awt/peer/Makefile.am,
+ 	gnu/java/beans/.cvsignore,
+ 	gnu/java/beans/editors/.cvsignore,
+ 	gnu/java/beans/editors/Makefile.am,
+ 	gnu/java/beans/info/.cvsignore,
+ 	gnu/java/beans/info/Makefile.am,
+ 	gnu/java/beans/Makefile.am,
+ 	gnu/java/.cvsignore,
+ 	gnu/java/io/.cvsignore,
+ 	gnu/java/io/decode/.cvsignore,
+ 	gnu/java/io/decode/Makefile.am,
+ 	gnu/java/io/encode/.cvsignore,
+ 	gnu/java/io/encode/Makefile.am,
+ 	gnu/java/io/Makefile.am,
+ 	gnu/java/lang/.cvsignore,
+ 	gnu/java/lang/Makefile.am,
+ 	gnu/java/lang/reflect/.cvsignore,
+ 	gnu/java/lang/reflect/Makefile.am,
+ 	gnu/java/locale/.cvsignore,
+ 	gnu/java/locale/Makefile.am,
+ 	gnu/java/Makefile.am,
+ 	gnu/java/math/.cvsignore,
+ 	gnu/java/math/Makefile.am,
+ 	gnu/java/net/content/.cvsignore,
+ 	gnu/java/net/content/Makefile.am,
+ 	gnu/java/net/content/text/.cvsignore,
+ 	gnu/java/net/content/text/Makefile.am,
+ 	gnu/java/net/.cvsignore,
+ 	gnu/java/net/Makefile.am,
+ 	gnu/java/net/protocol/.cvsignore,
+ 	gnu/java/net/protocol/file/.cvsignore,
+ 	gnu/java/net/protocol/file/Makefile.am,
+ 	gnu/java/net/protocol/http/.cvsignore,
+ 	gnu/java/net/protocol/http/Makefile.am,
+ 	gnu/java/net/protocol/jar/.cvsignore,
+ 	gnu/java/net/protocol/jar/Makefile.am,
+ 	gnu/java/net/protocol/Makefile.am,
+ 	gnu/java/nio/channels/.cvsignore,
+ 	gnu/java/nio/channels/Makefile.am,
+ 	gnu/java/nio/charset/.cvsignore,
+ 	gnu/java/nio/charset/Makefile.am,
+ 	gnu/java/nio/.cvsignore,
+ 	gnu/java/nio/Makefile.am,
+ 	gnu/java/rmi/.cvsignore,
+ 	gnu/java/rmi/dgc/.cvsignore,
+ 	gnu/java/rmi/dgc/Makefile.am,
+ 	gnu/java/rmi/Makefile.am,
+ 	gnu/java/rmi/registry/.cvsignore,
+ 	gnu/java/rmi/registry/Makefile.am,
+ 	gnu/java/rmi/rmic/.cvsignore,
+ 	gnu/java/rmi/rmic/Makefile.am,
+ 	gnu/java/rmi/server/.cvsignore,
+ 	gnu/java/rmi/server/Makefile.am,
+ 	gnu/java/security/action/Makefile.am,
+ 	gnu/java/security/.cvsignore,
+ 	gnu/java/security/der/.cvsignore,
+ 	gnu/java/security/der/Makefile.am,
+ 	gnu/java/security/Makefile.am,
+ 	gnu/java/security/provider/.cvsignore,
+ 	gnu/java/security/provider/Makefile.am,
+ 	gnu/java/security/util/.cvsignore,
+ 	gnu/java/security/util/Makefile.am,
+ 	gnu/java/security/x509/.cvsignore,
+ 	gnu/java/security/x509/Makefile.am,
+ 	gnu/java/text/.cvsignore,
+ 	gnu/java/text/Makefile.am,
+ 	gnu/java/util/.cvsignore,
+ 	gnu/java/util/Makefile.am,
+ 	gnu/java/util/prefs/.cvsignore,
+ 	gnu/java/util/prefs/Makefile.am,
+ 	gnu/javax/.cvsignore,
+ 	gnu/javax/Makefile.am,
+ 	gnu/javax/rmi/CORBA/.cvsignore,
+ 	gnu/javax/rmi/CORBA/Makefile.am,
+ 	gnu/javax/rmi/.cvsignore,
+ 	gnu/javax/rmi/Makefile.am,
+ 	gnu/Makefile.am,
+ 	gnu/regexp/.cvsignore,
+ 	gnu/regexp/Makefile.am,
+ 	java/applet/.cvsignore,
+ 	java/applet/Makefile.am,
+ 	java/awt/color/.cvsignore,
+ 	java/awt/color/Makefile.am,
+ 	java/awt/.cvsignore,
+ 	java/awt/datatransfer/.cvsignore,
+ 	java/awt/datatransfer/Makefile.am,
+ 	java/awt/dnd/.cvsignore,
+ 	java/awt/dnd/Makefile.am,
+ 	java/awt/dnd/peer/.cvsignore,
+ 	java/awt/dnd/peer/Makefile.am,
+ 	java/awt/event/.cvsignore,
+ 	java/awt/event/Makefile.am,
+ 	java/awt/font/.cvsignore,
+ 	java/awt/font/Makefile.am,
+ 	java/awt/geom/.cvsignore,
+ 	java/awt/geom/Makefile.am,
+ 	java/awt/image/.cvsignore,
+ 	java/awt/image/Makefile.am,
+ 	java/awt/image/renderable/.cvsignore,
+ 	java/awt/image/renderable/Makefile.am,
+ 	java/awt/im/.cvsignore,
+ 	java/awt/im/Makefile.am,
+ 	java/awt/im/spi/.cvsignore,
+ 	java/awt/im/spi/Makefile.am,
+ 	java/awt/Makefile.am,
+ 	java/awt/peer/.cvsignore,
+ 	java/awt/peer/Makefile.am,
+ 	java/awt/print/.cvsignore,
+ 	java/awt/print/Makefile.am,
+ 	java/beans/beancontext/.cvsignore,
+ 	java/beans/beancontext/Makefile.am,
+ 	java/beans/.cvsignore,
+ 	java/beans/Makefile.am,
+ 	java/.cvsignore,
+ 	java/io/.cvsignore,
+ 	java/io/Makefile.am,
+ 	java/lang/.cvsignore,
+ 	java/lang/Makefile.am,
+ 	java/lang/ref/.cvsignore,
+ 	java/lang/reflect/.cvsignore,
+ 	java/lang/reflect/Makefile.am,
+ 	java/lang/ref/Makefile.am,
+ 	java/Makefile.am,
+ 	java/math/.cvsignore,
+ 	java/math/Makefile.am,
+ 	java/net/.cvsignore,
+ 	java/net/Makefile.am,
+ 	java/nio/channels/.cvsignore,
+ 	java/nio/channels/Makefile.am,
+ 	java/nio/channels/spi/.cvsignore,
+ 	java/nio/channels/spi/Makefile.am,
+ 	java/nio/charset/.cvsignore,
+ 	java/nio/charset/Makefile.am,
+ 	java/nio/charset/spi/.cvsignore,
+ 	java/nio/charset/spi/Makefile.am,
+ 	java/nio/.cvsignore,
+ 	java/nio/Makefile.am,
+ 	java/rmi/activation/.cvsignore,
+ 	java/rmi/activation/Makefile.am,
+ 	java/rmi/.cvsignore,
+ 	java/rmi/dgc/.cvsignore,
+ 	java/rmi/dgc/Makefile.am,
+ 	java/rmi/Makefile.am,
+ 	java/rmi/registry/.cvsignore,
+ 	java/rmi/registry/Makefile.am,
+ 	java/rmi/server/.cvsignore,
+ 	java/rmi/server/Makefile.am,
+ 	java/security/acl/.cvsignore,
+ 	java/security/acl/Makefile.am,
+ 	java/security/cert/.cvsignore,
+ 	java/security/cert/Makefile.am,
+ 	java/security/.cvsignore,
+ 	java/security/interfaces/.cvsignore,
+ 	java/security/interfaces/Makefile.am,
+ 	java/security/Makefile.am,
+ 	java/security/spec/.cvsignore,
+ 	java/security/spec/Makefile.am,
+ 	java/sql/.cvsignore,
+ 	java/sql/Makefile.am,
+ 	java/text/.cvsignore,
+ 	java/text/Makefile.am,
+ 	java/util/.cvsignore,
+ 	java/util/jar/.cvsignore,
+ 	java/util/jar/Makefile.am,
+ 	java/util/logging/.cvsignore,
+ 	java/util/logging/Makefile.am,
+ 	java/util/Makefile.am,
+ 	java/util/prefs/.cvsignore,
+ 	java/util/prefs/Makefile.am,
+ 	java/util/regex/.cvsignore,
+ 	java/util/regex/Makefile.am,
+ 	java/util/zip/.cvsignore,
+ 	java/util/zip/Makefile.am,
+ 	javax/accessibility/.cvsignore,
+ 	javax/accessibility/Makefile.am,
+ 	javax/.cvsignore,
+ 	javax/imageio/.cvsignore,
+ 	javax/imageio/event/.cvsignore,
+ 	javax/imageio/event/Makefile.am,
+ 	javax/imageio/Makefile.am,
+ 	javax/imageio/spi/.cvsignore,
+ 	javax/imageio/spi/Makefile.am,
+ 	javax/imageio/stream/.cvsignore,
+ 	javax/imageio/stream/Makefile.am,
+ 	javax/Makefile.am,
+ 	javax/naming/.cvsignore,
+ 	javax/naming/directory/.cvsignore,
+ 	javax/naming/directory/Makefile.am,
+ 	javax/naming/event/.cvsignore,
+ 	javax/naming/event/Makefile.am,
+ 	javax/naming/ldap/.cvsignore,
+ 	javax/naming/ldap/Makefile.am,
+ 	javax/naming/Makefile.am,
+ 	javax/naming/spi/.cvsignore,
+ 	javax/naming/spi/Makefile.am,
+ 	javax/print/attribute/.cvsignore,
+ 	javax/print/attribute/Makefile.am,
+ 	javax/print/attribute/standard/Makefile.am,
+ 	javax/print/.cvsignore,
+ 	javax/print/event/.cvsignore,
+ 	javax/print/event/Makefile.am,
+ 	javax/print/Makefile.am,
+ 	javax/rmi/CORBA/.cvsignore,
+ 	javax/rmi/CORBA/Makefile.am,
+ 	javax/rmi/.cvsignore,
+ 	javax/rmi/Makefile.am,
+ 	javax/security/auth/.cvsignore,
+ 	javax/security/auth/Makefile.am,
+ 	javax/security/auth/x500/.cvsignore,
+ 	javax/security/auth/x500/Makefile.am,
+ 	javax/security/.cvsignore,
+ 	javax/security/Makefile.am,
+ 	javax/sql/.cvsignore,
+ 	javax/sql/Makefile.am,
+ 	javax/swing/border/.cvsignore,
+ 	javax/swing/border/Makefile.am,
+ 	javax/swing/colorchooser/.cvsignore,
+ 	javax/swing/colorchooser/Makefile.am,
+ 	javax/swing/.cvsignore,
+ 	javax/swing/event/.cvsignore,
+ 	javax/swing/event/Makefile.am,
+ 	javax/swing/filechooser/.cvsignore,
+ 	javax/swing/filechooser/Makefile.am,
+ 	javax/swing/Makefile.am,
+ 	javax/swing/plaf/basic/.cvsignore,
+ 	javax/swing/plaf/basic/Makefile.am,
+ 	javax/swing/plaf/.cvsignore,
+ 	javax/swing/plaf/Makefile.am,
+ 	javax/swing/plaf/metal/.cvsignore,
+ 	javax/swing/plaf/metal/Makefile.am,
+ 	javax/swing/table/.cvsignore,
+ 	javax/swing/table/Makefile.am,
+ 	javax/swing/text/.cvsignore,
+ 	javax/swing/text/html/.cvsignore,
+ 	javax/swing/text/html/Makefile.am,
+ 	javax/swing/text/html/parser/.cvsignore,
+ 	javax/swing/text/html/parser/Makefile.am,
+ 	javax/swing/text/Makefile.am,
+ 	javax/swing/tree/.cvsignore,
+ 	javax/swing/tree/Makefile.am,
+ 	javax/swing/undo/.cvsignore,
+ 	javax/swing/undo/Makefile.am,
+ 	javax/transaction/.cvsignore,
+ 	javax/transaction/Makefile.am,
+ 	javax/transaction/xa/.cvsignore,
+ 	javax/transaction/xa/Makefile.am,
+ 	vm/reference/gnu/.cvsignore,
+ 	vm/reference/gnu/java/.cvsignore,
+ 	vm/reference/gnu/java/Makefile.am,
+ 	vm/reference/gnu/java/nio/.cvsignore,
+ 	vm/reference/gnu/java/nio/Makefile.am,
+ 	vm/reference/gnu/Makefile.am,
+ 	vm/reference/java/.cvsignore,
+ 	vm/reference/java/io/.cvsignore,
+ 	vm/reference/java/io/Makefile.am,
+ 	vm/reference/java/lang/.cvsignore,
+ 	vm/reference/java/lang/Makefile.am,
+ 	vm/reference/java/lang/reflect/.cvsignore,
+ 	vm/reference/java/lang/reflect/Makefile.am,
+ 	vm/reference/java/Makefile.am,
+ 	vm/reference/java/security/.cvsignore,
+ 	vm/reference/java/security/Makefile.am:
+ 	Removed.
+ 
+ 2004-07-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* .cvsignore: Added 'compile'.
+ 
+ 2004-07-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/http/.cvsignore: Removed.
+ 
+ 2004-07-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/io/VMFile.java (toCanonicalForm): Made
+ 	static.
+ 
+ 2004-07-27  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* vm/reference/java/io/VMFile.java (toCanonicalForm): New method.
+ 	* java/io/File.java (dupSeparator): New field. (File(String)):
+ 	Modified to use new normalizePath method. (normalizePath): New method
+ 	merged from libgcj.
+ 	(File(String,String)): Modified to use new normalizePath method.
+ 	(File(File,String)): Modified to forward to File(String,String).
+ 	(File(URI)): New constructor. (getAbsolutePath): Merged from libgcj.
+ 	(getCanonicalPath): New implementation that forwards to VMFile.
+ 	(getParent): Merged from libgcj. (isAbsolute): Merged from libgcj.
+ 	(list(FilenameFilter)): Removed unnecessary path normalization.
+ 	(toURL): Merged from libgcj. (mkdir): Removed unnecessary path
+ 	normalization. (compareTo): Removed incorrect canonicalization.
+ 
+ 2004-07-27  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Class.java (getClassLoader): Removed special case for
+ 	java. and gnu.java. classes and fixed class loader security rule.
+ 
+ 2004-07-26  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* native/jni/gtk-peer/gthread-jni.c: don't #include nonexistent files
+ 
+ 2004-07-26  Patrik Reali  <reali@acm.org>
+ 	
+ 	* doc/www.gnu.org/home.wml doc/www.gnu.org/newsitems.txt: link to
+ 	mauve test results updated
+ 
+ 2004-07-26  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: AWT commit and inetlib HTTP client 
+ 	* doc/www.gnu.org/faq/faq.wml: add dependencies and CVS udpate to
+ 	the installation (3.4) section
+ 
+ 2004-07-25 Patrik Reali  <reali@acm.org>
+ 
+ 	* INSTALL: gtk+2.4 requirement updated (was 2.2)
+ 
+ 2004-07-25 Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* gnu/java/awt/ComponentDataBlitOp.java,
+ 	gnu/java/beans/ExplicitBeanInfo.java,
+ 	gnu/java/beans/IntrospectionIncubator.java,
+ 	gnu/java/beans/editors/ColorEditor.java,
+ 	gnu/java/beans/editors/FontEditor.java,
+ 	gnu/java/beans/editors/NativeBooleanEditor.java,
+ 	gnu/java/beans/editors/NativeByteEditor.java,
+ 	gnu/java/beans/editors/NativeDoubleEditor.java,
+ 	gnu/java/beans/editors/NativeFloatEditor.java,
+ 	gnu/java/beans/editors/NativeIntEditor.java,
+ 	gnu/java/beans/editors/NativeLongEditor.java,
+ 	gnu/java/beans/editors/NativeShortEditor.java,
+ 	gnu/java/beans/editors/StringEditor.java,
+ 	gnu/java/io/ClassLoaderObjectInputStream.java,
+ 	gnu/java/io/decode/Decoder.java,
+ 	gnu/java/io/encode/Encoder.java,
+ 	gnu/java/lang/ClassHelper.java,
+ 	gnu/java/locale/Calendar.java,
+ 	gnu/java/locale/Calendar_de.java,
+ 	gnu/java/locale/Calendar_en.java,
+ 	gnu/java/locale/Calendar_nl.java,
+ 	gnu/java/locale/LocaleInformation_de.java,
+ 	gnu/java/locale/LocaleInformation_en.java,
+ 	gnu/java/locale/LocaleInformation_nl.java:
+ 	Cleaned up imports.
+ 
+ 2004-07-25 Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(filenameFilterCallback): Declare local variable accepted before use.
+ 
+ 2004-07-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac (AC_CONFIG_FILES): gnu/java/security/action/Makefile
+ 	added.
+ 
+ 2004-07-23  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java: Use GetPropertyAction
+ 	for privileged getProperty calls.
+ 	* java/io/ObjectOutputStream.java (getField): No longer static. Use
+ 	SetAccessibleAction instead of anonymous class for doPrivileged call.
+ 	(getMethod): Likewise.
+ 	(setAccessible): New field. PrivilegedAction object to use when
+ 	calling setAccessible.
+ 	* java/io/ObjectStreamClass.java (calculateOffsets): Use
+ 	SetAccessibleAction instead of anonymous class for diPrivileged call.
+ 	(setFields): Likewise.
+ 	(getClassUID): Likewise.
+ 	(findMethod): Likewise.
+ 	* gnu/java/security/action/GetPropertyAction.java: New class.
+ 	* gnu/java/security/action/SetAccessibleAction.java: New class.
+ 	* gnu/java/security/action/Makefile.am: New file.	
+ 	* gnu/java/security/Makefile.am: Updated.
+ 
+ 2004-07-23  Craig Black  <craig.black@aonix.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(addTearOff_: New function.
+ 	include/gnu_java_awt_peer_gtk_GtkMenuPeer.h: Regenerated.
+ 	* gnu/java/awt/peer/gtk/GtkMenuPeer.java (addTearOff):
+ 	New native method.
+ 	(init): Call addTearOff() when menu.isTearOff().
+ 
+ 2004-07-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/System.java (static): Set http.agent system property when
+ 	not yet set.
+ 	* gnu/java/net/protocol/http/Connection.java (static): Get httpAgent
+ 	from system property inside AccessController.doPrivileged() call.
+ 	(proxyPort): Made package private.
+ 	(proxyInUse): Likewise.
+ 	(proxyHost): Likewise.
+ 	(userAgent): Likewise.
+ 
+ 2004-07-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/image/Makefile.am (EXTRA_DIST): Add ByteLookupTable.java,
+ 	Kernel.java, LookupTable.java and ShortLookupTable.java.
+ 	* javax/swing/Makefile.am (EXTRA_DIST): Add Spring.java and
+ 	SpringLayout.java.
+ 	* javax/swing/plaf/basic/Makefile.am (EXTRA_DIST): Add
+ 	BasicTextFieldUI.java and BasicToolBarSeparatorUI.java.
+ 	* javax/swing/text/Makefile.am (EXTRA_DIST): Add
+ 	DefaultHighlighter.java, FieldView.java, Highlighter.java,
+ 	LayeredHighlighter.java, PlainView.java, TabExpander.java and
+ 	TabableView.java. Remove CharacterIterator.java and
+ 	PlainEditorKit.java
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Regenerated.
+ 	* include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h: Likewise.
+ 
+ 	* configure.ac: Test for PKG_CHECK_MODULES gtk+-2.0 >= 2.4.
+ 	* NEWS: Add overview of new GUI functionality.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(setLineWrap): Fire property change event after new value is set.
+ 	(setTabSize): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTable.java
+ 	(autoCreateColumnsFromModel): New field.
+ 	(autoResizeMode): Likewise.
+ 	(cellEditor): Likewise.
+ 	(cellSelectionEnabled): Likewise.
+ 	(columnModel): Likewise.
+ 	(dataModel): Likewise.
+ 	(defaultEditorsByColumnClass): Likewise.
+ 	(defaultRenderersByColumnClass): Likewise.
+ 	(editingColumn): Likewise.
+ 	(editingRow): Likewise.
+ 	(gridColor): Likewise.
+ 	(preferredViewportSize): Likewise.
+ 	(rowHeight): Likewise.
+ 	(rowMargin): Likewise.
+ 	(rowSelectionAllowed): Likewise.
+ 	(selectionBackground): Likewise.
+ 	(selectionForeground): Likewise.
+ 	(selectionModel): Likewise.
+ 	(showHorizontalLines): Likewise.
+ 	(showVerticalLines): Likewise.
+ 	(tableHeader): Likewise.
+ 	(JTable): Implemented.
+ 	(getColumnModel): Likewise.
+ 	(getSelectedRow): Likewise.
+ 	(getSelectionModel): Likewise.
+ 	(setModel): Likewise.
+ 	(setSelectionModel): Likewise.
+ 	(createScrollPaneForTable): New method.
+ 	(createDefaultDataModel): Likewise.
+ 	(createDefaultListSelectionModel): Likewise.
+ 	(getModel): Likewise.
+ 	(getTableHeader): Likewise.
+ 	(setTableHeader): Likewise.
+ 	(getColumnSelectionAllowed): Likewise.
+ 	(setColumnSelectionAllowed): Likewise.
+ 	(getRowSelectionAllowed): Likewise.
+ 	(setRowSelectionAllowed): Likewise.
+ 	(getAutoResizeMode): Likewise.
+ 	(setAutoResizeMode): Likewise.
+ 	(getColumnCount): Likewise.
+ 	(getRowCount): Likewise.
+ 	(getCellRenderer): Likewise.
+ 	* javax/swing/JTree.java
+ 	(cellRenderer): New field.
+ 	(editable): Likewise.
+ 	(rootVisible): Likewise.
+ 	(showsRootHandles): Likewise.
+ 	(getModel): New method.
+ 	(setModel): Likewise.
+ 	(isEditable): Likewise.
+ 	(setEditable): Likewise.
+ 	(isRootVisbile): Likewise.
+ 	(setRootVisible): Likewise.
+ 	(getShowsRootHandles): Likewise.
+ 	(setShowRootHandles): Likewise.
+ 	(getCellRenderer): Likewise.
+ 	(setCellRenderer): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(setDocument): Implemented.
+ 	* javax/swing/JRootPane.java:
+ 	Fixed javadocs.
+ 	* javax/swing/JTable.java
+ 	(getDefaultRenderer): New method.
+ 	* javax/swing/JTextField.java
+ 	(setFont): Likewise.
+ 	(getPreferredSize): Likewise.
+ 	* javax/swing/JToggleButton.java
+ 	(getAccessibleContext): Fix javadoc.
+ 	* javax/swing/JTree.java:
+ 	Add some javadocs.
+ 	* javax/swing/JViewport.java:
+ 	Likewise.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java:
+ 	Collect all native method declaration at the top.
+ 	(create): Set the filename filter if necessary.
+ 	(setDirectory): Call nativeSetDirectory().
+ 	(setFilenameFilter): Implement.
+ 	(filenameFilterCallback): New method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(create): Configure dialog to show hidden files.
+ 	(filenameFilterCallback): New function. 
+ 	(nativeSetFilenameFilter): New function.
+ 	(nativeSetDirectory): New function.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	Ran Jalopy.
+ 	(paintTrack): Fill the track before painting
+ 	the borders.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	patch from Roman Kennke <roman@ontographics.com>
+ 	* javax/swing/Spring.java: New file.
+ 	* javax/swing/SpringLayout.java: New file.
+ 	* Makefile.am: Add new files.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java: Minor layout fixes.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Likewise.
+ 	* javax/swing/ScrollPaneLayout.java: Likewise.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/DefaultDesktopManager.java:
+ 	(findMinimum): Removed.
+ 	(resizeFrame): Trust the UI to pass valid 
+ 	bounds.
+ 	* javax/swing/JOptionPane.java:
+ 	Implemented showInternalXXXDialog methods.
+ 	(startModal): New method.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	(BorderListener::mouseDragged): Verify that the new 
+ 	bounds are valid before passing them to the DesktopManager.
+ 	(preferredLayoutSize): Delegate
+ 	to getSize.
+ 	(minimumLayoutSize): Ditto.
+ 	(getSize): New method.
+ 	(GlassPaneDispatcher): Reimplemented by copying 
+ 	a stripped down LightweightDispatcher from Container.
+ 	(getMinimumSize): Call minimumLayoutSize.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	Ran Jalopy.
+ 	(mousePressed): Add ability to properly close 
+ 	JInternalFrames.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java:
+ 	(DragWindow): Set owner for DragWindow.
+ 
+ 2004-07-21  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/ShortLookupTable.java: New file.
+ 	* java/awt/image/ByteLookupTable.java: New file.
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(create(GtkContainerPeer)): New native method.
+ 	(create()): Call native create(), passing in the parent frame
+ 	as the paramter. Natively set the current file and directory.
+ 	(setFile): Construct an absolute filename before passing it to
+ 	the native peer.
+ 	(nativeGetDirectory): New method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(window_closed): Removed.
+ 	(ok_clicked): Likewise.
+ 	(cancel_clicked): Likewise.
+ 	(handle_response): New method.
+ 	(create): Use GtkFileChooserDialog.
+ 	(connectSignals): Connect to handle_response.
+ 	(nativeGetDirectory): New method.
+ 	(nativeSetFile): Use GtkFileChooserDialog.
+ 
+ 2004-07-21  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/LookupTable.java: New file.
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/image/Kernel.java: New file.
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java: Fixed Javadocs.
+ 	* javax/swing/JMenu.java: Likewise.
+ 	* javax/swing/JMenuBar.java: Likewise.
+ 	(MARGIN_CHANGED_PROPERTY): New property.
+ 	(setMargin): Implemented.
+ 	* javax/swing/JMenuItem.java: Fixed javadocs.
+ 	* javax/swing/JPopupMenuUI.java: Fixed javadocs.
+ 	(LABEL_CHANGED_PROPERTY): New property.
+ 	(add): changed to use createActionComponent.
+ 	(createActionComponent): Implemented.	
+ 	(setLabel): Fire PropertyChangeEvent if label property
+ 	changes.
+ 	* javax/swing/JRadioButtonMenuItem.java: Fixed javadocs.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
+ 	(ContainerHandler): Repaint if margin property has changed.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(installUI): Call installComponents().
+ 	(uninstallUI): Call uinstallComponents().
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	Fixed javadocs.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	Likewise.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java:
+ 	(DragWindow): Use the right constructor.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JToolBar.java:
+ 	(layoutContainer): Use getComponents.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java:
+ 	(DragWindow): Don't use SwingUtilities' 
+ 	getOwnerFrame
+ 	(ToolBarDialog): ditto.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JRootPane.java:
+ 	Ran jalopy.
+ 	(layoutContainer): Set the glasspane's size to 
+ 	be the same as the content pane.
+ 	(createGlassPane): Set opaque property to false.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (requestFocus()): Don't handle Panels
+ 	specially.
+ 	(requestFocus(boolean)): Likewise.
+ 	(requestFocusInWindow(boolean)): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
+ 	Set GTK_CAN_FOCUS flag.
+ 
+ 2004-07-21  Kim Ho  <kho@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerated.
+ 	* gcj/Makefile.in: Regenerated.
+ 	* include/Makefile.in: Regenerated.
+ 	* javax/swing/AbstractButton.java:
+ 	Add rollOverEnabled property.
+ 	(setRolloverEnabled): Use new property.
+ 	(isRolloverEnabled): Use new property.
+ 	* javax/swing/JTabbedPane.java:
+ 	(setComponent): Remove useless JTabbedPane.this.
+ 	* javax/swing/JToolBar.java: Finish implementation.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	(paint): Moved border painting to a border.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Change JToolBar look and feel defaults.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java
+ 	(actionPerformed): Return Integer index instead of name.
+ 	(addButtonComponents): Check to see if component is
+ 	JButton last.
+ 	(createMessageArea): Don't use components that are not
+ 	completed yet.
+ 	(getIconForType): Use temporary icons.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	(mousePressed): Do not return if it's on thumb.
+ 	(paintMinorTickForHorizSlider): Use BLACK to paint ticks.
+ 	(paintMinorTickForVertSlider): ditto.
+ 	(paintMajorTickForHorizSlider): ditto.
+ 	(paintMajorTickForVertSlider): ditto.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
+ 	Add a border around the SplitPaneDivider.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java:
+ 	Remove comments.
+ 	* javax/swing/plaf/basic/BasicToolBarSeparatorUI.java:
+ 	New file. Implemented.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java:
+ 	Implemented.
+ 	* testsuite/Makefile.in: Regenerated.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/Timer.java (run): Queue events each time cycle.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(imageComplete): Call image.imageComplete().
+ 	* java/awt/image/MemoryImageSource.java:
+ 	Reimplement consumers as a Vector instead of a Hashtable.  This is
+ 	because enumeration on a Hashtable is not thread-safe.
+ 	(addConsumer): Adapt to Vector consumers.
+ 	(isConsumer): Adapt to Vector consumers.
+ 	(removeConsumer): Adapt to Vector consumers.
+ 	(startProduction): Adapt to Vector consumers. Call imageComplete()
+ 	with STATICIMAGEDONE flag instead of SINGLEFRAME flag.
+ 	(newPixels): Adapt to Vector consumers.
+ 	(sendPicture): Set the color model of the image consumer.
+ 	(newPixels(IIII)): Adapt to Vector consumers.
+ 	(newPixels(IIIIB)): Adapt to Vector consumers.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (deliverEvent): Implement.
+ 	(postEvent): Implement.
+ 	(handleEvent): Implement.
+ 	(translateEvent): New method.
+ 	(dispatchEventImpl): Document.  Add AWT 1.0 event handling.
+ 	* java/awt/Container.java (deliverEvent): Implement.
+ 	* java/awt/Event.java (paramString): Fix formatting.
+ 	* java/awt/Font.java (toString): Likewise.
+ 	* java/awt/Window.java (postEvent): Implement.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
+ 	Set window's focus owner upon receiving a FOCUS_LOST event.
+ 	* java/awt/Window.java (Window()): Refocus the previously
+ 	focused component within the window when the window regains the
+ 	top-level focus.
+ 	(setFocusOwner): New method.
+ 	* java/awt/Component.java (requestFocus): Add FIXME.
+ 
+ 	* libgcj.pc.in: Remove library flags.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java (handleEvent): Handle
+ 	MOUSE_PRESSED event.
+ 	* java/awt/Component.java (requestFocus()): Handle Panel
+ 	specially.  Post FOCUS_LOST event on opposite component.
+ 	(requestFocus(boolean)): Likewise.
+ 	(requestFocusInWindow(boolean)): Likewise.
+ 	(paramString): Reorder dimension fields.
+ 	* java/awt/Container.java (paramString): Fix string format.
+ 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
+ 	Handle FOCUS_LOST events.  Don't handle Windows specially.  Only
+ 	process key events if the focus owner is non-null.
+ 	(dispatchKeyEvent): Likewise.
+ 	* java/awt/Frame.java (paramString): Fix formatting.
+ 	(generateName): New method.
+ 	(getUniqueLong): Likewise.
+ 	* java/awt/KeyboardFocusManager.java (getFocusOwner): Check if
+ 	the temporary focus owner is null.  If so, return the permanent
+ 	focus owner.
+ 	* java/awt/Panel.java (generateName): New method.
+ 	(getUniqueLong): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Rework
+ 	signal handling to make callbacks more specific.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/Position.java
+ 	(Bias): Implemented.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/LookAndFeel.java
+ 	(provideErrorFeedback): New method.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java
+ 	(tabSize): New field.
+ 	(getTabSize): New method.
+ 	(setTabSize): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ActionMap.java:
+ 	Fixed javadocs all over.
+ 	(serialVersionUID): Made private.
+ 	(parent): Don't explicitely initialize with default value.
+ 	(get): SImplified.
+ 	(keys): Reimplemented.
+ 	(allKeys): Likewise.
+ 	(convertSet): Removed.
+ 	* javax/swing/ComponentInputMap.java:
+ 	Fixed javadocs all over.
+ 	(ComponentInputMap): Implemented.
+ 	(put): Likewise.
+ 	(clear): Likewise.
+ 	(remove): Likewise.
+ 	(SetParent): Likewise.
+ 	(getComponent): Likewise.
+ 	* javax/swing/InputMap.java:
+ 	Fixed javadocs all over.
+ 	(serialVersionUID): Made private.
+ 	(parent): Don't explicitely initialize with default value.
+ 	(get): SImplified.
+ 	(keys): Reimplemented.
+ 	(allKeys): Likewise.
+ 	(convertSet): Removed.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ActionMap.java,
+ 	javax/swing/ComponentInputMap.java,
+ 	javax/swing/InputMap.java,
+ 	javax/swing/table/DefaultTableColumnModel.java,
+ 	javax/swing/table/TableColumn.java,
+ 	javax/swing/table/TableColumnModel.java,
+ 	javax/swing/table/TableModel.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/TextAction.java:
+ 	Reformated.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (bufferedImageOrError): 
+ 	Make method non-static.
+ 	* javax/swing/AbstractButton.java:
+ 	Rename fields to match property names where possible.
+ 	(iconTextGap): New property.
+ 	* javax/swing/JCheckBox.java: Match AbstractButton changes.
+ 	(init) New method, call from after various constructors.
+ 	* javax/swing/JComponent.java (revalidate): 
+ 	Invalidate before queueing repair.
+ 	* javax/swing/JList.java (getPreferredScrollableViewportSize):
+ 	Reimplement in terms of visibleRowCount property.
+ 	* javax/swing/JMenuButton.java: Match AbstractButton changes.
+ 	* javax/swing/JScrollPane.java (createScrollListener): 
+ 	Remove tracing chatter.
+ 	* javax/swing/JToggleButton.java: Match AbstractButton changes.
+ 	* javax/swing/RepaintManager.java (addInvalidComponent): 
+ 	Don't invalidate.
+ 	* javax/swing/ScrollPaneLayout.java: Various corrections to layout
+ 	calculations.
+ 	* javax/swing/SwingUtilities.java (layoutCompoundLabel): 
+ 	Mimic sun behavior on top left/right positioning.
+ 	* javax/swing/ViewportLayout.java (preferredLayoutSize):
+ 	Remove mistaken use of preferredScrollableViewportSize here.
+ 	(layoutContainer): Use view's preferred size as basis.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java:
+ 	Set, get, and use textIconGap property.
+ 	(paint) Paint text returned from layout (with ellipsis).
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	Remove tracing chatter, correct various minor calculations.
+ 	(getCellBounds): Update layout state before calculating.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java (Button.Margin):
+ 	Use margin default similar to sun's.	
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java (ArrowIcon):
+ 	(createIncreaseIcon): Center icon, minimize margins.
+ 	(createDecreaseIcon): Likewise.
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java (installDefaults):
+ 	Implement.
+ 	(installUI): Call it.
+ 	(uninstallDefaults): Implement.
+ 	(uninstallUI): Call it.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java (DragWindow):
+ 	Call existing Window constructor.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java (paint):
+ 	Set clip before painting.
+ 
+ 2004-07-21  Olga Rodimina <rodimina@redhat.com>
+ 	
+ 	* javax/swing/JMenuItem.java:
+ 	(processMouseEvent): Reimplemented to deal with
+ 	mouse drag events.
+ 	(createMenuDragMouseEvent): New private helper method.
+ 	Creates MenuDragMouseEvent.
+ 	* javax/swing/MenuSelectionManager.java
+ 	(componentForPoint): Implemented.
+ 	(isComponentPartOfCurrentMenu): Made public.
+ 	(processMouseEvent): Reimplemented to deal with 
+ 	mouse drag events.
+ 	(setSelectedPath): Corrected small mistake that caused
+ 	path to be set incorrectly.
+ 	(getPath): If given component is JMenu then also add this
+ 	menu's popup menu to the selected path.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(getPath): Ditto.
+ 	(getPreferredSize): Call getPreferredMenuItemSize().
+ 	(getPreferredItemSize): Moved code from getPreferredSize to here.
+ 	(installListeners): Install MouseMotionListeners.
+ 	(MouseInputHandler): Pass mouse release event to MenuSelectionManager 
+ 	if mouse wasn't released in the bounds of this menu item.
+ 	(MenuDragMouseHandler): Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(installListeners): Install MouseMotionListener and 
+ 	MenuDrageMouseListener.
+ 	(MenuDragMouseHandler): Implemented.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	(uninstallListeners): Implemented.
+ 	
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JCheckBox.java: Reformated.
+ 	(JCheckBox): Fixed all constructors.
+ 	(isBorderPaintedFlat): New method.
+ 	(setBorderPaintedFlat): New method.
+ 	* javax/swing/JEditorPane.java
+ 	(createEditorKitForContentType): Made public.
+ 	(scrollToReference): Likewise.
+ 	* javax/swing/JTextArea.java
+ 	(setLineWrap): Fire property change.
+ 	* javax/swing/JToggleButton.java
+ 	(JToggleButton): New constructor.
+ 	(JToggleButton): Simplified.
+ 	* javax/swing/text/AttributeSet.java
+ 	(FontAttribute): Renamed from FontCharacterAttribute.
+ 	* javax/swing/text/JTextComponent.java
+ 	(KeyBinBinding): Added javadoc.
+ 	(JTextComponent): Likewise.
+ 	(getAccessibleContext): Fixed javadoc.
+ 	* javax/swing/text/View.java
+ 	(View): Added javadoc.
+ 	* javax/swing/text/TabableView.java: New file.
+ 	* Makefile.am: Added javax/swing/text/TabableView.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/image/BufferedImage.java (getSource): Remove tracing chatter.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java 
+ 	(GtkErrorImage): New helper class.
+ 	(bufferedImageOrError): New helper method.
+ 	(createImage): Use it.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(setCaretPosition): Scroll the text view so the new caret position
+ 	is visible on screen.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(setBounds): Do not validate awtComponent here.
+ 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
+ 	(getPreferredSize): New method.
+ 	* java/awt/ScrollPane.java
+ 	(ScrollPane): Set default size to 100x100.
+ 	(addNotify): If child is not a Panel, wrap it with a new Panel.
+ 	(paramString): Implement.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenu.java:
+ 	(setSelected): Display popup menu only if this menu 
+ 	is showing on the screen.
+ 	* javax/swing/JPopupMenu.java:
+ 	(processMouseEvent): Added comment.
+ 	(processKeyEvent): Likewise.
+ 	* javax/swing/MenuSelectionManager.java:
+ 	(clearSelectedPath): Only fireStateChanged() after
+ 	selected path was changed, not before.
+ 	(setSelectedPath): Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Corrected position of menu item's
+ 	icon.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	(installUI): Correct setDefaultLightWeightPopupEnabled call.
+ 	(popupMenuCanceled): Reimplemented.
+ 	(popupMenuWillBecomeVisible): Select first menu item by default 
+ 	when displaying free floating popup menus.
+ 	(TopWindowListener): Reimplemented.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Panel.java (dispatchEventImpl): Override to prevent
+ 	Panel from being painted twice when it is first shown.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* java/awt/Window.java: Reverted changes from my 
+ 	previous patch for creating window without an owner.
+ 	* javax/swing/SwingUtilities.java: 
+ 	(SwingUtilities.OwnerFrame): made static.
+ 	(OwnerFrame.setVisible): New method. Overridden with
+ 	empty implementation.
+ 	(OwnerFrame.isShowing): New method. Ovverridden
+ 	to return always true.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(GtkComponentPeer): Remove temporary try/catch block.
+ 	(setVisible): Call show and hide.
+ 	(show): Make native.
+ 	(hide): Likewise.
+ 	(getArgs): Don't add "visible" argument.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(property_notify_predicate): Return Bool instead of int.
+ 	(find_layout): New function.
+ 	(connectJObject): Call find_layout.
+ 	(connectSignals): Likewise.
+ 	(moveLayout): Likewise.
+ 	(gtkLayoutSetVisible): Likewise.
+ 
+ 2004-07-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/event/InvocationEvent.java (dispatch): Synchronize
+ 	on notifier object before calling notifyAll().
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* java/awt/Window.java: Changed constructors to use new
+ 	method that is described below. Constructors call this
+ 	methods only if newly created window should have an owner.
+ 	(setWindowOwner): New method. Implementation for
+ 	this method is moved from this(owner,configuration).
+ 	* javax/swing/JWindow.java:
+ 	(JWindow): Reimplement to use SwingUtilities.ownerFrame
+ 	instead of owner.
+ 	* javax/swing/SwingUtilities.java:
+ 	(ownerFrame): Change type of this field to OwnerFrame.
+ 	(getOwnerFrame): Changed to return object of type OwnerFrame.
+ 	(SwingUtilities.OwnerFrame): New class. Represents owner
+ 	of a Window that is not provided with one.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	*  javax/swing/AbstractButton.java: 
+ 	(configurePropertiesFromAction): Set action command
+ 	to button's text by default if action command is not 
+ 	explicitely specified.
+ 	* javax/swing/JMenu.java: Remove unnecessary listener
+ 	and methods relevant to it.
+ 	(setSelected): Reimplemented.
+ 	(menuSelectionChanged): Moved most part of implementation to
+ 	setSelected() and call it instead.
+ 	* javax/swing/JMenuItem.java: 
+ 	(init): Comment out statement that sets paint_border to false.
+ 	(configurePropertiesFromAction): Do not set accelerator
+ 	for JMenu.
+ 	(menuSelectionChanged): Change selected index in the selection
+ 	model of menu item's parent.
+ 	* javax/swing/JPopupMenu.java:
+ 	(remove): Set constraints.fill field to GridBagConstraints.BOTH
+ 	instead of GridBagConstraints.HORIZONTAL.
+ 	(insert): Likewise.
+ 	(createActionChangeListener): Implemented.
+ 	(setVisible): Correct location of HeavyWeightMenu and 
+ 	don't firePopupMenuCanceled().
+ 	(menuSelectionChanged): Implemented.
+ 	(ActionChangeListener): New Listener. Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	(BasicMenuBarUI.ContainerHandler): Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Uncommented out code that paints 
+ 	icon, now that icons are working properly.
+ 	(PropertyChangeListener): Implemented.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	Added javadocs.
+ 	(topWindowListener): New field.
+ 	(Constructor): initialize topWindowListener.
+ 	(BasicPopupMenuUI.TopWindowListener): Implemented.	
+ 	(BasicPopupMenuUI.PopupMenuHandler): Implemented.
+ 	(BasicPopupMenuUI.TopWindowListener): New ComponentListener.
+ 	Implemented.
+ 	
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paintFocus): Fixed method signature.
+ 	(paintButtonPressed): Likewise.
+ 	(paintButtonNormal): Likewise.
+ 	(paintText): New method.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	(paint): Re-indented.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installUI): Set parent textComponent to opaque.
+ 	* javax/swing/text/DefaultHighlighter.java
+ 	(checkPositions): New helper method.
+ 	(addHighlight): Throws BadLocationException, check positions.
+ 	(changeHighlight): Likewise.
+ 	* javax/swing/text/EditorKit.java
+ 	(EditorKit): Implements Serializable.
+ 	* javax/swing/text/JTextComponent.java
+ 	(getUI): Added javadoc.
+ 	(setUI): Likewise.
+ 	(upadteUI): Added javadoc, don't revalidate and repaint.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(ArrangeGrid): Use PREFERREDSIZE instead of MINSIZE.
+ 	* javax/swing/AbstractButton.java
+ 	(setText): Reindent.
+ 	* javax/swing/RepaintManager.java
+ 	(addInvalidComponent): Find the first ancestor that isValidateRoot().
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JFormattedTextField.java
+ 	(value): New field.
+ 	(JFormattedTextField): Implemented.
+ 	(getValue): Likewise.
+ 	(setValue): Likewise.
+ 	* javax/swing/LookAndFeel.java
+ 	(getSupportsWindowDecorations): New method.
+ 	* javax/swing/UIDefaults.java:
+ 	Use java.beans.PropertyChangeSupport instead of doing all ourself.
+ 	(addPropertyChangeListener): Made public.
+ 	(addResourceBundle): Likewise.
+ 	(removeResourceBundle): Likewise.
+ 	(setDefaultLocale): Likewise.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java
+ 	(BasicRootPaneUI): Implements PropertyChangeListener.
+ 	(propertyChange): New method.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(BasicHighlighter): New inner class.
+ 	(createHighlighter): New method.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(DragWindow): Extends java.awt.Window.
+ 	* javax/swing/text/JTextComponent.java
+ 	(getDocument): Removed debug output.
+ 	* javax/swing/plaf/basic/BasicTextFieldUI.java,
+ 	javax/swing/text/DefaultHighlighter.java,
+ 	javax/swing/text/FieldView.java,
+ 	javax/swing/text/PlainView.java: New files.
+ 	* Makefile.am: Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(createDefaultEditorKit): Use javax.swing.text.DefaultEditorKit.
+ 	(createEditorKitForContentType): Likewise.
+ 	* javax/swing/text/DefaultEditorKit.java
+ 	(serialVersionUID): Added constant field.
+ 	(EndOfLineStringPropery): Fixed typo.
+ 	(DefaultEditorKit): New constructor.
+ 	* javax/swing/text/Segment.java:
+ 	Import java.text.CharacterIterator.
+ 	* javax/swing/text/CharacterIterator.java,
+ 	javax/swing/text/PlainEditorKit.java: Removed.
+ 	* Makefile.am: Removed javax/swing/text/CharacterIterator.java and
+ 	javax/swing/text/PlainEditorKit.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JButton.java,
+ 	javax/swing/text/DefaultEditorKit.java,
+ 	javax/swing/text/EditorKit.java,
+ 	javax/swing/text/Segment.java,
+ 	javax/swing/text/StyledEditorKit.java:
+ 	Reformatted.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ImageIcon.java
+ 	(file): Removed.
+ 	(description): Renamed from descr.
+ 	(ImageIcon): Added missing constructors.
+ 	(setParent): Removed.
+ 	(setImageObserver): New method.
+ 	(getImageObserver): New method.
+ 	(paintIcon): Handle observer = null.
+ 	* javax/swing/JButton.java
+ 	(removeNotify): Fixed javadoc.
+ 	(updateUI): Simplified.
+ 	* javax/swing/JRootPane.java
+ 	(serialVersionUID): New constant field.
+ 	* javax/swing/UIManager.java:
+ 	Fixed javadocs all over.
+ 	(setLookAndFeel): Throws UnsupportedLookAndFeelException.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(createPosition): Throws BadLocationException.
+ 	(getText): Likewise.
+ 	(remove): Likewise.
+ 	* javax/swing/text/ComponentView.java
+ 	(modelToView): Likewise.
+ 	* javax/swing/text/DefaultEditorKit.java:
+ 	Made all public methods public.
+ 	(read): Throws BadLocationException and IOException.
+ 	(write): Likewise.
+ 	* javax/swing/text/EditorKit.java:
+ 	Made all public methods public.
+ 	(serialVersionUID): New constant field.
+ 	(clone): New method.
+ 	(read): Throws BadLocationException and IOException.
+ 	(write): Likewise.
+ 	* javax/swing/text/Segment.java
+ 	(array): Made public.
+ 	(count): Likewise.
+ 	(offset): Likewise.
+ 	(Segment): New constructors.
+ 	(clone): Reimplemented.
+ 	* javax/swing/text/StyledEditorKit.java
+ 	(serialVersionUID): New constant field.
+ 
+ 2004-07-21  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/awt/image/BufferedImage.java 
+ 	(getSource): Implement.
+ 	* javax/swing/ImageIcon.java 
+ 	(ImageIcon): Implement ctor.
+ 	* javax/swing/ScrollPaneLayout.java 
+ 	(preferredLayoutSize): Be more careful about nulls.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AttributeSet.java
+ 	(CharacterAttribute): New interface
+ 	(ColorAttribute): Likewise.
+ 	(FontCharacterAttribute): Likewise.
+ 	(ParagraphAttribute): Likewise.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(moveCaret): New method.
+ 	(positionCaret): Likewise.
+ 	(repaint): Made protected.
+ 	* javax/swing/text/JTextComponent.java
+ 	(KeyBinding): Made it static.
+ 	* javax/swing/text/View.java
+ 	(getContainer): Honor parent == null.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java:
+ 	Reformatted.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java:
+ 	Import javax.swing.UIManager explicitely.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(ScrollingButton): Made it static.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/UIDefaults.java
+ 	(ActiveValue): Made public.
+ 	(LazyValue): Likewise.
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(RootView): Reintroduced.
+ 	(view): Removed.
+ 	(rootView): New field.
+ 	(installUI): Create document if needed, initialize rootView.
+ 	(uninstallUI): Hanle rootView.
+ 	(paint): Likewise.
+ 	(getRootView): Likewise.
+ 	(setView): Likewise.
+ 	* javax/swing/text/DefaultCaret.java:
+ 	Renamed all "evt" variables to "event".
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(move): Delegate to setBounds().
+ 	(resize): Likewise.
+ 	(reshape): Fix so it repaints parent and self only when necessary.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(GtkComponentPeer): Revert previous patch from 2004-06-22.
+ 	(setVisible): Likewise.
+ 	(show): Likewise.
+ 	(hide): Likewise.
+ 	(getArgs): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(property_notify_predicate): Likewise.
+ 	(find_layout): Likewise.
+ 	(connectJObject): Likewise.
+ 	(connectSignals): Likewise.
+ 	(moveLayout): Likewise.
+ 	(gtkLayoutSetVisible): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(replace): Dont use protected method of java.util.Vector directly.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(installUI): Call specialized install methods.
+ 	(installDefaults): New method.
+ 	(installListeners): Likewise.
+ 	(installKeyboardActions): Likewise.
+ 	(uninstallUI): Likewise.
+ 	(uninstallDefaults): New method.
+ 	(uninstallListeners): Likewise.
+ 	(uninstallKeyboardActions): Likewise.
+ 	(getPropertyPrefix): New abstract method.
+ 	(paint): Made final, just call paintSafely().
+ 	(paintSavely): New method.
+ 	(paintBackground): Likewise.
+ 	(getVisibleEditorRect): Likewise.
+ 	* javax/swing/text/LayeredHighlighter.java,
+ 	javax/swing/text/TabExpander.java: New files.
+ 	* Makefile.am: Added javax/swing/text/LayeredHighlighter.java
+ 	and javax/swing/text/TabExpander.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicTextUI.java
+ 	(BasicTextUI): Made abstract.
+ 	(BasicCaret): New inner class.
+ 	(view): Don't explicitely initialize with "null".
+ 	(textComponent): New field.
+ 	(textColor): Removed.
+ 	(disabledTextColor): Removed.
+ 	(normalBackgroundColor): Removed.
+ 	(RootView): Removed commented out inner class.
+ 	(createUI): Removed.
+ 	(createCaret): New method.
+ 	(getComponent): Likewise.
+ 	(installUI): Initialize textComponent only.
+ 	(getPreferredSize): Use installed JTextComponent.
+ 	(setView): New method.
+ 	(create): Likewise.
+ 	* javax/swing/text/JTextComponent.java
+ 	(highlighter): New field.
+ 	(caretColor): Likewise.
+ 	(disabledTextColor): Likewise.
+ 	(seletedTextColor): Likewise.
+ 	(selectionColor): Likewise.
+ 	(setUI): New method.
+ 	(getCaretColor): Likewise.
+ 	(setCaretColor): Likewise.
+ 	(getDisabledColor): Likewise.
+ 	(setDisabledColor): Likewise.
+ 	(getSelectedTextColor): Likewise.
+ 	(setSelectedTextColor): Likewise.
+ 	(getSelectionColor): Likewise.
+ 	(setSelectionColor): Likewise.
+ 	(getHighlighter): Likewise.
+ 	(setHighlighter): Likewise.
+ 	(replaceSelection): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java
+ 	(BasicScrollPaneUI): Implements ScrollPaneConstants.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	(BasicToolBarUI): Implements SwingConstants.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JPopupMenu.java: Removed CVS tags.
+ 	* javax/swing/UIDefaults.java: Reformatted.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java:
+ 	Explicitely import used classes.
+ 
+ 2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(GtkComponentPeer): Remove temporary try/catch block.
+ 	(setVisible): Call show and hide.
+ 	(show): Make native.
+ 	(hide): Likewise.
+ 	(getArgs): Don't add "visible" argument.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(property_notify_predicate): Return Bool instead of int.
+ 	(find_layout): New function.
+ 	(connectJObject): Call find_layout.
+ 	(connectSignals): Likewise.
+ 	(moveLayout): Likewise.
+ 	(gtkLayoutSetVisible): Likewise.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	(setDisplayedMnemonicIndex): Check if button
+ 	text is not null before checking its length.
+ 	* javax/swing/JMenuItem.java:
+ 	(processMouseEvent): Disarm menu item if mouse has
+ 	exited it.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(MouseInputHandler.mouseEntered): Do not raise
+ 	popup menu if this menu is already selected.
+ 	(MouseInputHandler.mousePressed): Do not fire 
+ 	MenuEvents.
+ 	(MenuHandler): Implemented.	
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java: Added Javadoc.
+ 	(getSelectedObjects): Implemented.
+ 	* javax/swing/JRadioButtonMenuItem.java: Added Javadoc.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java: 
+ 	Added javadoc for few methods.
+ 	(processMouseEvent): Made public.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
+ 	(processMouseEvent): Likewise.
+ 
+ 2004-07-21  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java:
+ 	(init): Set display mnemonic index to -1.
+ 	(setMnemonic(char)): Use setMnemonic(int).
+ 	(setMnemonic(int)): Set display mnemonic index.
+ 	(getDisplayedMnemonicIndex): Change method signature
+ 	by removing 'index' parameter.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Added default for Menu.selectionBackground.	
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(paintMenuItem): Change background color of the selected
+ 	menu item.
+ 	(paintText): Paint differently when menu item is disabled.
+ 	Also paint mnemonic if it appears in the menu item's label.
+ 	(paintAccelerator): Paint accelerator differently
+ 	if menu item is disabled.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(installDefaults): Install defaults for 
+ 	selectionForeground and selectionBackground.
+ 	(uninstallDefaults): Uninstall defauls for 
+ 	selectionForeground and selectionBackground.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(BranchElement): Implemented.
+ 	(LeafElement): Implemented.
+ 	* javax/swing/text/DefaultCaret.java:
+ 	Import used classes.
+ 	(serialVersionUID): New constant.
+ 	* javax/swing/text/JTextComponent.java
+ 	(AccessibleJTextComponent): Removed dead declaration.
+ 	(caretPos): Removed.
+ 	(setCaret): New method.
+ 	* javax/swing/text/PlainDocument.java
+ 	(rootElement): New field.
+ 	(PlainDocument): Initialize rootElement.
+ 	(createDefaultRoot): New method.
+ 	(getDefaultRootElement): Implemented.
+ 	* javax/swing/text/View.java: Reformatted.
+ 	* javax/swing/text/ViewFactory.java
+ 	(create): Added javadoc.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ToolTipManager.java: Reformatted.
+ 
+ 2004-07-21  Rodimina Olga  <rodimina@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(changeEvent): New field.
+ 	(fireItemStateChanged): Change source of the event
+ 	to 'this' before firing it to button listeners.
+ 	(fireActionPerformed): Likewise.
+ 	(fireStateChanged): Likewise.
+ 	(createActionListener): Do not set source 
+ 	of the event to AbstractButton.                                  
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	(ContainerHandler.componentAdded): Removed 
+ 	print out statement.
+ 	(ContainerHandler.componentRemoved): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/Highlighter.java: New file.
+ 	* Makefile.am: Added javax/swing/text/Highlighter.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ToolTipManager.java
+ 	(stillInsideTimerAction): Fixed constructor arguments.
+ 	(outsideTimerAction): Likewise.
+ 	(insideTimerAction): Likewise.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JButton.java: Reformatted.
+ 	* javax/swing/JFormattedTextField.java
+ 	(getUIClassID): Implemented.
+ 	* javax/swing/JRootPane.java
+ 	(serialVersionUID): New constant.
+ 	* javax/swing/JTextField.java
+ 	(align): New field.
+ 	(JTextField): Simplified.
+ 	(getUIClassID): New method.
+ 	(getActionListeners): Added @since tag.
+ 	(setColumns): Invalidate layout and repaint.
+ 	(getHorizontalAlignment): New method.
+ 	(setHorizontalAlignment): New method.
+ 	(selectAll): Removed.
+ 	* javax/swing/SwingUtilities.java
+ 	(getAncestorOfClass): Removed redundant @see tag.
+ 	(isLeftMouseButton): Fixed implementation.
+ 	(isMiddleMouseButton): Likewise.
+ 	(isRightMouseButton): Likewise.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(AttributeContext.addAttribute): New method.
+ 	(AttributeContext.addAttributes): New method.
+ 	(AttributeContext.getEmptySet): New method.
+ 	(AttributeContext.reclaim): New method.
+ 	(AttributeContext.removeAttribute): New method.
+ 	(AttributeContext.removeAttributes): New method.
+ 	* javax/swing/text/Document.java
+ 	(createPosition): Throws BadLocationException.
+ 	(getText): Likewise.
+ 	(remove): Likewise.
+ 	* javax/swing/text/JTextComponent.java
+ 	(getText): Return null if no document is set. Catch
+ 	BadLocationException.
+ 	(getUI): Return ui.
+ 	(updateUI): Simplified.
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JButton.java
+ 	(removeNotify): Fixed javadoc.
+ 	(updateUI): Simplified.
+ 
+ 2004-07-21  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/image/ImageDecoder.java
+ 	(startProduction): Only add consumer if it's not added yet.
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+ 	(GdkPixbufDecoder): Don't call initState() here.
+ 	(produce): Call initState() here, to ensure area_prepared and
+ 	area_updated signals are properly connected.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java
+ 	(setColorModel): Use equals() to compare ColorModel objects.
+ 	(setPixels): Likewise.
+ 	* java/awt/image/ColorModel.java
+ 	(equals): Fix typo. Use Arrays.equals() to compare int arrays.
+ 	* java/awt/image/RGBImageFilter.java
+ 	(setColorModel): Set consumer's color model.
+ 	(setPixels): Use equals() to compare ColorModel objects.
+ 
+ 2004-07-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java:
+ 	Merge debug code with libgcj.
+ 	(depth): New field.
+ 	* java/io/ObjectOutputStream.java
+ 	(writeObject): Revert not intended change in my last commit.
+ 
+ 2004-07-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/String.java: Fixed javadocs all over.
+ 
+ 2004-07-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/Makefile.am: Don't generate gnu_java_awt_EmbeddedWindow.h.
+ 	* include/gnu_java_awt_EmbeddedWindow.h: Removed.
+ 
+ 2004-07-22  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Class.java (pd): Made final. (unknownProtectionDomain):
+ 	Removed. (StaticData): New inner class.
+ 	(Class(Object, ProtectionDomain): New constructor.
+ 	(getProtectionDomain): Get unknownProtectionDomain from StaticData
+ 	inner class.
+ 
+ 2004-07-21  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/net/URLConnection.java (position): New field.
+ 	(dateFormat1, dateFormat2, dateFormat3): Removed.
+ 	(dateFormats): New field.
+ 	(getHeaderFieldDate): Use new dateFormats array. Re-use parsePosition
+ 	each time instead of re-allocating.
+ 	(initializeDateFormats): Initialize 'dateFormats'.
+ 
+ 2004-07-20  Patrik Reali  <reali@acm.org>
+ 
+ 	* gnu/java/nio/PipeImpl.java,
+ 	include/Makefile.am,
+ 	include/gnu_java_nio_VMPipe.h,
+ 	include/gnu_java_nio_VMPipeImpl.h,
+ 	native/jni/java-nio/Makefile.am,
+ 	native/jni/java-nio/gnu_java_nio_VMPipe.c,
+ 	native/jni/java-nio/gnu_java_nio_VMPipeImpl.c,
+ 	vm/reference/gnu/java/nio/Makefile.am,
+ 	vm/reference/gnu/java/nio/VMPipe.java,
+ 	vm/reference/gnu/java/nio/VMPipeImpl.java: VMPipeImpl renamed to VMPipe
+ 
+ 2004-07-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/Makefile.am: Fixed generation of VMPipeImpl.h
+ 
+ 2004-07-20  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/faq/faq.wml: entry on lib/standard.omit
+ 
+ 2004-07-20  Patrik Reali  <reali@acm.org>
+ 
+ 	* configure.ac, 
+ 	gnu/java/nio/PipeImpl.java, 
+ 	include/Makefile.am, 
+ 	include/gnu_java_nio_PipeImpl.h,
+ 	include/gnu_java_nio_VMPipeImpl.h, 
+ 	native/jni/java-nio/Makefile.am, 
+ 	native/jni/java-nio/gnu_java_nio_PipeImpl.c, 
+ 	native/jni/java-nio/gnu_java_nio_VMPipeImpl.c,
+ 	vm/reference/Makefile.am,
+ 	vm/reference/gnu/.cvsignore,
+ 	vm/reference/gnu/Makefile.am,
+ 	vm/reference/gnu/java/.cvsignore, 
+ 	vm/reference/gnu/java/Makefile.am,
+ 	vm/reference/gnu/java/nio/.cvsignore,
+ 	vm/reference/gnu/java/nio/Makefile.am,
+ 	vm/reference/gnu/java/nio/VMPipeImpl.java: native method init moved
+ 	from gnu.java.nio.PipeImpl to gnu.java.nio.VMPipeImpl
+ 
+ 2004-07-20  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/net/Socket.java (getImpl): Now private. Remove comment.
+ 
+ 2004-07-20  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/io/BufferedWriter.java (BufferedWriter): Use existing lock
+ 	of chained Writer when calling super-constructor.
+ 	* java/io/FilterWriter.java (FilterWriter): Likewise.
+ 	* java/io/PrintWriter.java (PrintWriter): Likewise.
+ 
+ 2004-07-20  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/home.wml doc/www.gnu.org/newsitems.txt: mauve
+ 	reports added to news and homepage
+ 
+ 2004-06-19  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c
+ 	(receive0): Don't byte-swap already-swapped remote port
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(getLocalAddress): Check if socket is bound or not.
+ 	* java/net/Socket.java
+ 	(getLocalAddrss): Check if socket is bound or not.
+ 	(getPort): Return -1 when not connected. Dont check getImpl() for
+ 	null.
+ 	(setReuseAddress): Check if socket is closed.
+ 	(isConnected): Check if getImpl() returns null.
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/EventHandler.java: New file.
+ 	* java/beans/Makefile.am
+ 	(EXTRA_DIST): Added EventHandler.java.
+ 
+ 2004-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac
+ 	(AC_CONFIG_FILES): Removed native/jni/java-awt/Makefile.
+ 	* gnu/java/awt/EmbeddedWindow.java
+ 	(static): Removed.
+ 	(addNotify): Set peer via reflection.
+ 	(setWindowPeer): Removed.
+ 	* native/jni/Makefile.am
+ 	(SUBDIRS): Removed java-awt.
+ 	(DIST_SUBDIRS): Likewise.
+ 	* native/jni/java-awt/.cvsignore,
+ 	native/jni/java-awt/Makefile.am,
+ 	native/jni/java-awt/gnu_java_awt_EmbeddedWindow.c:
+ 	Removed.
+ 
+ 2004-07-16  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URL.java (URL(String,String,int,String,URLStreamHandler):
+ 	Don't set authority if host isn't specified.
+ 
+ 2004-07-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteOrder.java
+ 	(static): Removed. Not needed.
+ 	Thanks to Patrick Reali for noticing.
+ 
+ 2004-07-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/GZIPOutputStream.java:
+ 	Fixed javadocs.
+ 
+ 2004-07-16  Michael Koch  <konqueror@gmx.de> 
+ 	    Matthias Klose  <doko@debian.org> 
+ 
+ 	* java/awt/im/InputContext.java: Initialize in, line.
+ 
+ 2004-07-15  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR libgcj/16574
+ 	* java/sql/Timestamp.java (dateFormat): Renamed from sdf.
+ 	(decimalFormat): New static variable.
+ 	(sbuf): Likewise.
+ 	(getTime): New. Override Date.getTime().
+ 	(toString): Synchronize. Use decimalFormat to format nanos value
+ 	correctly. Truncate extra zeros.
+ 	(before): Compare getNanos() only if getTime() is equal.
+ 	(after): Likewise.
+ 
+ 2004-07-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/OutputWindow.java:
+ 	Fixed javadocs all over.
+ 	(WINDOW_SIZE): Made static.
+ 	(WINDOW_MASK): Made static.
+ 
+ 2004-07-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Security.java: Fixed javadocs all over.
+ 
+ 2004-07-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/charset/CharsetDecoder.java
+ 	(decode): Fix for bug #9177: Reset state before flipping.
+ 
+ 2004-07-15  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(text_decomposition): Changed type to RuleBasedCollator.CollationElement[]
+ 	(setText): Use ArrayList instead of Vector.
+ 
+ 2004-07-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/Makefile.am: Distclean jni_md.h.
+ 
+ 2004-07-15  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java: Add DEBUG statements
+ 	everywhere.
+ 	(dumpElementln): New method.
+ 	(depth): New field.
+ 
+ 2004-07-14  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: SableVM and JC releases
+ 	* doc/www.gnu.org/tasks.wml: General Paths task removed
+ 
+ 2004-07-11  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* java/net/URLStreamHandler.java (parseURL): Canonicalize
+ 	file portion of URL in addition to spec for file: protocol.
+ 
+ 2004-07-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.10+cvs.
+ 
+ 2004-07-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: Link to html file, not wml file.
+ 
+ 2004-07-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/announce/20040712.wml: New file.
+ 	* doc/www.gnu.org/downloads/downloads.wml: Add 0.10 release.
+ 	* doc/www.gnu.org/newsitems.txt: Add announcement.
+ 
+ 2004-07-10  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/BufferedInputStream.java (count, pos, marklimit): Removed
+ 	unnecessary initialization. (marktarget, CHUNKSIZE): Removed.
+ 	(bufferSize): New field. (close): Reset state. (read()): Removed
+ 	unnecessary cast. (read(byte[],int,int): Try harder to read the
+ 	requested number of bytes. (mark,reset,refill): Fixed handling of
+ 	marking. (skip): Added stream closed check and removed mark handling.
+ 
+ 2004-07-10  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java (readObject): Delegate instantation
+ 	of Externalizable classes to ObjectStreamClass.
+ 	* java/io/ObjectStreamClass.java (newInstance): New method to
+ 	instantiate Externalizable (while ignoring the accessibility of
+ 	the constructor). (constructor): New field to cache the constructor.
+ 
+ 2004-07-10  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/reflect/Proxy.java (getPackage, ClassFactory): Fixed
+ 	handling of default package. (generate): Removed confused comments
+ 	and code about making Method and Field accessible.
+ 
+ 2004-07-10  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/DatagramPacket.java (setAddress): Removed check for
+ 	null address.
+ 
+ 2004-07-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.10.
+ 	* NEWS: Add new features of 0.10.
+ 	* README: Mention additional GNU library packages.
+ 
+ 2004-07-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): Initialize
+ 	gdk_env before calling any gdk or gtk function.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMainThread.java (gtkInitCalled): New field.
+ 	(GtkMainThread): Call wait() in while loop waiting for gtkInitCalled.
+ 	(run): Seet gtkInitCalled.
+ 
+ 2004-07-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gthread-jni.c (setup_cache): Call
+ 	ExceptionOccurred, not ExceptionCheck, when we don't have JNI 1.2.
+ 
+ 2004-07-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/Box.java: Put FIXME comment above class declaration.
+ 	* javax/swing/JButton.java: Remove illegal L&F HTML from comments.
+ 	* javax/swing/JCheckBox.java: Likewise.
+ 	* javax/swing/JDialog.java: Likewise.
+ 	* javax/swing/JRadioButton.java: Likewise.
+ 	* javax/swing/JToggleButton.java: Likewise.
+ 	* javax/swing/UIManager.java: Likewise.
+ 	* javax/swing/border/TitledBorder.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
+ 	* javax/swing/text/JTextComponent.java: Likewise.
+ 	
+ 2004-07-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/System.java (static): Set file.encoding to 8859_1 when
+ 	not set yet.
+ 	* vm/reference/java/lang/VMRuntime.java (insertSystemProperties):
+ 	Document file.encoding property.
+ 
+ 2004-07-08  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/io/File.java
+ 	(toURI): Use new URI(scheme, userInfo, host, port, path,
+ 	query, fragment).
+ 
+ 2004-07-08  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/text/MessageFormat.java
+ 	(formatInternal): Append "{n}" if argument n is unavailable.
+ 	(format(Object, StringBuffer, FieldPosition)): This
+ 	should be equivalent to format(Object[], StringBuffer, FieldPosition).
+ 
+ 2004-07-07  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* include/jni.h: Fixed compilation in C++ mode.
+ 
+ 2004-07-07  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMainThread.java (run): Pass the value of 
+ 	the gnu.classpath.awt.gtk.portable.native.sync system property to C.
+ 
+ 	* configure.ac: Correct description of PORTABLE_NATIVE_SYNC
+ 	config.h definition.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
+ 	include/gnu_java_awt_peer_gtk_GtkMainThread.h
+ 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): New argument,
+ 	portableNativeSync.  Delegate PORTABLE_NATIVE_SYNC work to
+ 	init_glib_threads. 
+ 	(init_glib_threads): New function.
+ 
+ 	* doc/vmintegration.texinfo (VM Threading Model): Explain the
+ 	gnu.classpath.awt.gtk.portable.native.sync system property. 
+ 
+ 	* NEWS: Mention the gnu.classpath.awt.gtk.portable.native.sync
+ 	new system property.
+ 	
+ 2004-07-06  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: mail about emacs with GNU Classpath
+ 	style support added
+ 
+ 2004-07-05  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Locale.java (readObject): Intern strings read from object
+ 	stream.
+ 
+ 2004-07-05  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Locale.java (hashcode): Made transient.
+ 	(hashCode): No longer synchronized.
+ 	(equals): Remove comment.
+ 	(writeObject): No longer synchronized. Implement using writeObject 
+ 	calls instead of tweaking hashCode field. Update doc.
+ 	(readObject): Implement using readObject calls.
+ 
+ 2004-07-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.10-pre1.
+ 
+ 2004-07-04  Stephen Crawley <crawley@dstc.edu.au>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_read___3BII):
+ 	Check zero length early.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_write___3BII):
+ 	Check zero length early. Return immediatly when exception is thrown.
+ 
+ 2004-07-04  Casey Marshall <csm@gnu.org>
+ 
+ 	* java/security/AccessControlContext.java
+ 	(checkPermission): check for empty context.
+ 	* vm/reference/java/security/VMAccessController.java
+ 	(getContext): combine debugging statements.
+ 	(getStack): implemented.
+ 
+ 	* NEWS: Describe new platform dependent VMAccessController class.
+ 
+ 2004-07-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/System.java (static): Add (fake) ASCII support to
+ 	defaultProperties encoding_scheme_alias.
+ 
+ 2004-07-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* INSTALL: Make needed texinfo version (4.2+) more explicit.
+ 
+ 2004-07-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/beans/Expression.java: New class from libgcj.
+ 	* java/beans/Statement.java: Likewise.
+ 	* java/beans/Makefile.am (EXTRA_DIST): Add new files.
+ 
+ 2004-07-03  Mark Wielaard  <mark@klomp.org>
+ 	    Anthony Green  <green@redhat.com>
+ 
+ 	* java/net/URL.java (getFile): Clarify return value doc.
+ 	(getPath): Return null if file is empty - not
+ 	empty String.
+ 
+ 2004-07-03  Mark Wielaard  <mark@klomp.org>
+ 	    Anthony Green  <green@redhat.com>
+ 
+ 	* java/net/URL.java (set): Convert protocol to lower case before
+ 	doing anything.
+ 	Only change the protocol handler if it's different.
+ 
+ 2004-07-03  Anthony Green  <green@redhat.com>
+ 
+ 	* java/net/URL.java (URL): Convert protocol to lower case before
+ 	doing anything, so we getURLStreamHandler() with the proper
+ 	value.
+ 
+ 2004-07-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Roman Kennke <roman@ontographics.com> (bug #9331)
+ 	* java/net/URLStreamHandler.java (parseURL): When url file part
+ 	doesn't contain a '/' just ignore context.
+ 
+ 2004-07-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URL.java (systemClassLoader): New static field.
+ 	(getURLStreamHandler): Always use system/application classloader
+ 	for finding URLStreamhandler. Remove unecessary instanceof checks.
+ 
+ 2004-07-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/event/InvocationEvent.java (dispatch): Synchronize
+ 	on notifier object before calling notifyAll().
+ 
+ 2004-07-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
+ 	Define hid at start of function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
+ 	Likewise.
+ 
+ 2004-07-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java:
+ 	Load native library for setWindowPeer method.
+ 
+ 2003-06-30  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* gnu/regexp/CharIndexedInputStream.java: Reorganized imports.
+ 
+ 2004-06-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* doc/www.gnu.org/faq/faq.wml: Update CVS locations.
+ 
+ 2004-06-29  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Thread.java (sleep(long,int)): Added argument checking.
+ 
+ 2003-06-27  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/text/DateFormat.java (parse):
+ 	Improved javadoc. Improved exception message.
+ 
+ 2003-06-27  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* vm/reference/java/lang/VMThread.java (holdsLock):
+ 	Implemented in java.
+ 	* NEWS: Document new java version.
+ 
+ 2004-06-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java (userAgent): New static
+ 	final field.
+ 	(sendRequest): Use new field in user-agent http agent.
+ 
+ 2004-06-27  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/util/zip/ZipEntry.java (setTime): Remove scaling.
+ 
+ 2004-06-27  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(init_dpi_conversion_factor): Check for int_dpi < 0 in case gtk-xft-dpi
+ 	can not calculate the right value.
+ 	(dpi_changed_cb): Likewise. Mark *pspec as unused.
+ 
+ 2004-06-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/EventQueue.java (postEvent): Throw NullPointerException
+ 	when argument is null.
+ 
+ 2004-06-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(ok_clicked): Use Ljava/lang/String; not Ljava.lang.String; in JNI
+ 	GetMethodID call.
+ 	(cancel_clicked): Likewise.
+ 
+ 2004-06-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkFontMetrics.h: Regenerated.
+ 
+ 	* javax/swing/plaf/basic/BasicMenuUI.java (mousePressed): Don't call
+ 	protected JMenu methods fireMenuCanceled() and fireMenuSelected().
+ 
+ 	* javax/swing/Makefile.am (EXTRA_DIST): Add jTextArea.
+ 	* javax/swing/plaf/basic/Makefile.am (EXTRA_DIST): Add
+ 	BasicDesktopIconUI.java, BasicDesktopPaneUI.java,
+ 	BasicInternalFrameTitlePane.java, BasicInternalFrameUI.java,
+ 	BasicPopupMenuSeparatorUI.java and BasicToolBarUI.java.
+ 
+ 2004-06-26  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Fix up non-ansi comments.
+ 
+ 2004-06-26  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* javax/swing/text/AbstractDocument.java: Adding missing import
+ 	for javax.swing.event.EventListenerList.
+ 	* javax/swing/text/DefaultCaret.java: Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JToolBar.java
+ 	(name): Removed.
+ 	(JToolBar): Use Component.setName(String) instead of doing it all
+ 	alone.
+ 	* javax/swing/Timer.java
+ 	(queueEvent): Added missing modifier.
+ 
+ 2004-06-26  Olga Rodimina  <rodimina@redhat.coom>
+ 
+ 	* javax/swing/JMenu.java:
+ 	(insertSeparator): Implemented.
+ 	* javax/swing/JPopupMenu.java:
+ 	(JPopupMenu.Separator): Implemented.
+ 	* javax/swing/MenuSelectionManager.java:
+ 	(processMouseEvent): Use java.awt.Component 
+ 	for event source instead of javax.swing.JComponent. 
+ 	* javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java:
+ 	New File. Implemented.
+ 	
+ 2004-06-26  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(GetLayoutInfo): Adjust cell sizes iff parent size is not zero.
+ 	Make sure pos_x and pos_y are never negative.
+ 
+ 2004-06-26  Andrew Overholt  <overholt@redhat.com>
+ 
+ 	* javax/swing/JToolBar.java
+ 	Partially implemented.
+ 	* javax/swing/plaf/basic/BasicToolBarUI.java
+ 	New file. Partially implemented.
+ 
+ 2004-06-26  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java 
+ 	(setComposite): Accept AlphaComposite arguments.
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+ 	(createBufferedImage): Add new overloads.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(createImage): Use GdkPixbufDecoder.createBufferedImage
+ 	when useGraphics2D() is true.
+ 	(getImage): Delegate to createImage.
+ 	* javax/swing/JList.java
+ 	(isSelectionEmpty):
+ 	(getFirstVisibleIndex):
+ 	(getLastVisibleIndex):
+ 	(setSelectedValue):
+ 	(ensureIndexIsVisible): New methods.
+ 	* javax/swing/Timer.java: Reimplement.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(AbstracElement): Made public, implements java.io.Serializable.
+ 	(AttributeContext): Made public.
+ 	(BranchElement): Likewise.
+ 	(Content): Likewise.
+ 	(DefaultDocumentEvent): Made public, extends
+ 	javax.swing.undo.CompoundEdit.
+ 	(ElementEdit): Made public, extends
+ 	javax.swing.undo.AbstractUndoableEdit.
+ 	(LeafElement): Made public.
+ 	(LeafElement.LeafElement): Made public.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/JTextComponent.java: Totally reworked. Removed many
+ 	methods (that were obviously never be intended to get included hi this
+ 	class. Added some methods too.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/PlainDocument.java
+ 	(serialVersionUID): New constant.
+ 	(lineLimitAttribute): Likewise.
+ 	(tabSizeAttribute): Likewise.
+ 	(tabSize): New field.
+ 	(PlainDocument): Made public.
+ 	(PlainDocument): New constructor.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java
+ 	(insertString): Throws BadLocationException.
+ 	* javax/swing/text/Document.java
+ 	(insertString): Likewise.
+ 	* javax/swing/text/JTextComponent.java:
+ 	Javadocs and comments cleaned up.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/event/UndoableEditListener.java: Reformatted.
+ 	* javax/swing/text/AbstractDocument.java
+ 	(AbstractDocument): Implements java.io.Serializable.
+ 	(doc_list): Removed.
+ 	(undo_list): Removed.
+ 	(AbstractElement.serialVerionUID): New field.
+ 	(BranchElement.serialVerionUID): Likewise.
+ 	(DefaultDocumentEvent.serialVerionUID): Likewise.
+ 	(ElementEdit.serialVerionUID): Likewise.
+ 	(LeafElement.serialVerionUID): Likewise.
+ 	(serialVerionUID): Likewise.
+ 	(BAD_LOCATION): New constant.
+ 	(BidiElementName): Likewise.
+ 	(ContentElementName): Likewise.
+ 	(ParagraphElementName): Likewise.
+ 	(SectionElementName): Likewise.
+ 	(ElementNameAttribute): Likewise.
+ 	(AbstractDocument): Made protected.
+ 	(AbstractDocument): New construtor.
+ 	(listenerList): New field.
+ 	(fireChangedUpdate): Implemented.
+ 	(fireInsertUpdate): Likewise.
+ 	(fireRemoveUpdate): Likewise.
+ 	(fireUndoableEditUpdate): Likewise.
+ 	(getListeners): Likewise.
+ 	(addDocumentListener): Likewise.
+ 	(removeDocumentListener): Likewise.
+ 	(addUndoableEditListener): Likewise.
+ 	(removeUndoableEditListener): Likewise.
+ 	(getDocumentListeners): New method.
+ 	(getUndoableEditListeners): Likewise.
+ 	(getAsynchronousLoadPriority): Made public.
+ 	(getBidiRootElement): Likewise.
+ 	(setAsynchronousLoadPriority): Likewise.
+ 	(setDocumentProperties): Likewise.
+ 	* javax/swing/text/BadLocationException.java
+ 	(serialVerionUID): New field.
+ 	* javax/swing/text/DefaultCaret.java
+ 	(changeEvent): New field.
+ 	(listenerList): Likewise.
+ 	(changes): Removed.
+ 	(addChangeListener): Reimplemented.
+ 	(removeChangeListener): Likewise.
+ 	(getListeners): New method.
+ 	(getChangeListeners): Likwise.
+ 	(getComponent): Likewise.
+ 	* javax/swing/text/GapContent.java
+ 	(GapContent): Implements java.io.Serializable.
+ 	(serialVerionUID): New field.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTree.java
+ 	(treeModel): New field.
+ 	(JTree): New constructors, one existing one made public.
+ 	(createTreeModel): New method.
+ 	(addTreeExpansionListener): Likewise.
+ 	(removeTreeExpansionListener): Likewise.
+ 	(getTreeExpansionListeners): Likewise.
+ 	(fireTreeCollapsed): Likewise.
+ 	(fireTreeExpanded): Likewise.
+ 	(addTreeSelectionListener): Likewise.
+ 	(removeTreeSelectionListener): Likewise.
+ 	(getTreeSelectionListeners): Likewise.
+ 	(fireValueChanged): Likewise.
+ 	(addTreeWillExpandListener): Likewise.
+ 	(removeTreeWillExpandListener): Likewise.
+ 	(getTreeWillExpandListeners): Likewise.
+ 	(fireTreeWillCollapse): Likewise.
+ 	(fireTreeWillExpand): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTree.java: Reformatted.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JTextArea.java: New file.
+ 	* javax/swing/JTextField.java
+ 	(actions): Removed.
+ 	(notifyAction): New constant.
+ 	(columns): New field.
+ 	(JTextField): New constructors.
+ 	(createDefaultModel): New method.
+ 	(addActionListener): Reimplmemented.
+ 	(removeActionListener): Reimplemented.
+ 	(getActionListeners): New method.
+ 	(fireActionPerformed): New method.
+ 	(getColumns): New method.
+ 	(setColumne): New method.
+ 	* javax/swing/text/JTextComponent.java
+ 	(AccessibleJTextComponent.serialVersionUID): New field.
+ 	(serialVersionUID): Likewise.
+ 	(DEFAULT_KEYMAP): Likewise.
+ 	(FOCUS_ACCELERATOR_KEY): Likewise.
+ 	(doc): Made private.
+ 	(icon_gap): Likewise.
+ 	(icon): Likewise.
+ 	(align): Likewise.
+ 	(JTextComponent): Some constructors removed.
+ 	(getScrollableTracksViewportHeight): New method.
+ 	(getScrollableTracksViewportWidth): Likewise.
+ 
+ 2004-06-26  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/ImageIcon.java (ImageIcon): New constructor.
+ 	* javax/swing/JFrame.java (defaultLookAndFeelDecorated): New property.
+ 	* javax/swing/JViewport.java 
+ 	(getExtentSize): Return size rather than preferred size.
+ 	(toViewCoordinates): New methods.
+ 	(getViewSize): Return size rather than preferred size.
+ 	(setViewSize): Note view size as set.
+ 	* javax/swing/ViewportLayout.java (layoutContainer): Reimplement.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java 
+ 	(getPreferredSize): Don't redo layout.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java 
+ 	(paint): Translate image properly and eat exceptions.
+ 
+ 2004-06-26  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JTabbedPane.java
+ 	(setComponent): Remove old component and
+ 	add new component.
+ 	(setSelectedIndex): Don't operate on the 
+ 	components if they're null. Don't set index
+ 	on the model if the index is the same.
+ 	(insertTab): Don't add or hide the component
+ 	if it's null. Repaint the container.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	Change colors for TabbedPane.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(mousePressed): Re-layout and paint the component.
+ 	(layoutContainer): Don't set location on the view.
+ 	(ScrollingViewport::paint): Remove.
+ 
+ 2004-06-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetDispatchKeyEvent): Change warning message to comment.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
+ 	Wrap baseline y value in PANGO_PIXELS macro, rather than simply
+ 	dividing by PANGO_SCALE.  Call gdk_flush before leaving GDK
+ 	critical region.
+ 	(drawLine): Call gdk_flush before leaving GDK critical region.
+ 	(fillRect): Likewise.
+ 	(drawRect): Likewise.
+ 	(copyArea): Likewise.
+ 	(copyPixmap): Likewise.
+ 	(clearRect): Likewise.
+ 	(drawArc): Likewise.
+ 	(drawPolyline): Likewise.
+ 	(drawPolygon): Likewise.
+ 	(fillPolygon): Likewise.
+ 	(fillArc): Likewise.
+ 	(drawOval): Likewise.
+ 	(fillOval): Likewise.
+ 
+ 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java (initState): Add
+ 	style parameter.
+ 	(GdkFontMetrics): Add style argument to initState call.
+ 	(stringWidth(String,int,int,String)): Add style parameter.
+ 	(stringWidth(String)): Add style argument to stringWidth call.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
+ 	(initState): Set pango font style and weight based on AWT style
+ 	parameter.  Pass default GTK language to
+ 	pango_context_get_metrics.  Use PANGO_PIXELS macro rather than
+ 	simply dividing by PANGO_SCALE.
+ 	(stringWidth): Set pango font style and weight based on AWT style
+ 	parameter.
+ 
+ 	* java/awt/Button.java (next_button_number): New field.
+ 	(paramString): Change output.
+ 	(generateName): New method.
+ 	(getUniqueLong): New method.
+ 
+ 2004-06-26  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JTabbedPane.java:
+ 	(setComponentAt): Set the component, not
+ 	the enabled status.
+ 	* javax/swing/plaf/basic/BasicDesktopIconUI.java
+ 	(actionPerformed): Let deiconize catch exception.
+ 
+ 2004-06-26  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JPopupMenu.java:
+ 	(setVisible): Corrected location of a 
+ 	heavyweight popup menu.
+ 
+ 2004-06-26  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/MenuSelectionManager.java: 
+ 	Ran through jalopy to fix formatting style.
+ 
+ 2004-06-26  Olga Rodimina  <rodimina@redhat.com>
+ 	
+ 	* javax/swing/JLayeredPane.java: 
+ 	(remove): Revalidate and repaint layered pane after
+ 	the component was removed.
+ 	javax/swing/JMenu.java:
+ 	(setVisible): Display popup menu at the user location,
+ 	if one was set by the user.
+ 	(setMenuLocation): Reimplemented. Fixed javadoc.
+ 	* javax/swing/JMenuBar.java: Added javadoc.
+ 	(BORDER_PAINTED_CHANGED_PROPERTY): New Property.
+ 	(MODEL_CHANGED_PROPERTY): New Property.
+ 	(isSelected): Implemented.
+ 	(setBorderPainted): Fire PropertyChangeEvent
+ 	if paintBorder property changes.
+ 	(setSelected): Implemented.
+ 	(setSelectionModel): Implemented.
+ 	* javax/swing/JPopupMenu.java: Added Javadoc
+ 	(pack): Implemented.
+ 	(setVisible): Reimplemented.
+ 	(show): Fixed location.
+ 	(JPopupMenu.LigthWeightPopup): Reimplemented to use
+ 	Container instead of JPanel.
+ 	* javax/swing/MenuSelectionManager.java: Added Javadocs.
+ 	(clearSelectedPath): Reimplemented to clear selectedPath
+ 	in reverse order.
+ 	(processMouseEvent): Reimplemented.
+ 	(setSelectedPath): Fire stateChange event indicating that
+ 	selected menu path has changed.
+ 	(getPath): Change to use ArrayList instead of Vector.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	(installUI): call installKeyboardActions().
+ 	(uninstallUI): call uninstallKeyboardActions().
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/BadLocationException.java:
+ 	Reformatted.
+ 
+ 2004-06-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (DEFAULT_ROWS,
+ 	DEFAULT_COLS): New variables.
+ 	(create): Don't allow 0 rows or 0 columns.  Instead, set the
+ 	values to DEFAULT_ROWS or DEFAULT_COLS.
+ 	(getMinimumSize): Likewise.
+ 	(getPreferredSize): Likewise.
+ 	(minimumSize): Likewise.
+ 	(preferredSize): Likewise.
+ 	(create): Set peer's editable state.
+ 	* java/awt/TextArea.java (TextArea()): Set rows and columns to
+ 	zero.  Update javadocs.
+ 	(TextArea(String)): Likewise.
+ 	(TextArea(int,int)): Fix javadocs.
+ 	(TextArea(String,int,int,int)): Only throw exception if one of
+ 	rows or columns is zero.  Fix javadocs.
+ 
+ 2004-06-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/AWTEvent.java (toString): Handle MenuComponents in
+ 	addition to Components.
+ 
+ 	* java/awt/MenuItem.java (dispatchEventImpl): If the event
+ 	wasn't consumed by normal processing, send it to the parent
+ 	menu.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(setPixels(int,int,int,int,ColorModel,int[],int,int)): Remove
+ 	translation.
+ 
+ 2004-06-26  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/MediaTracker.java
+ 	(addImage(Image,int)): Call imageUpdate() to udpate image status.
+ 	(addImage(Image,int,int,int)): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/Document.java,
+ 	javax/swing/text/GapContent.java,
+ 	javax/swing/text/JTextComponent.java,
+ 	javax/swing/text/PlainDocument.java:
+ 	Reformatted.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JRootPane.java
+ 	(AccessibleJRootPane.serialVersionUID): New field.
+ 	(AccessibleJRootPane.AccessibleJRootPane): New constructor.
+ 	(AccessibleJRootPane.getAccessibleRole): New method.
+ 	(RootLayout): Implements Serializable.
+ 	(RootLayout.serialVersionUID): New field.
+ 	(RootLayout.RootLayout): New constructor.
+ 	(setJMenuBar): Made public.
+ 	(getJMenuBar): Likewise.
+ 	(JRootPane): Likewise.
+ 	(createContentPane): Likewise.
+ 	(createGlassPane): Likewise.
+ 	(createLayeredPane): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(isLeftMouseButton): Fixed javadoc.
+ 	(isMiddleMouseButton): Likewise.
+ 	(isRightMouseButton): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JScrollPane.java
+ 	(serialVersionUID): New field.
+ 	(columnHeader): Made protected.
+ 	(rowHeader): Likewise.
+ 	(lowerLeft): Likewise.
+ 	(lowerRight): Likewise.
+ 	(upperLeft): Likewise.
+ 	(upperRight): Likewise.
+ 	(horizontalScrollBar): Likewise.
+ 	(horizontalScrollBarPolicy): Likewise.
+ 	(verticalScrollBar): Likewise.
+ 	(verticalScrollBarPolicy): Likewise.
+ 	(viewport): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/LookAndFeel.java: Fixed javadocs.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JEditorPane.java: Fixed javadocs.
+ 	(JEditorPane): Removed redundant call to to this().
+ 	(fireHyperlinkUpdate): Implemented.
+ 
+ 2004-06-26  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenu.java: Fixed file name 
+ 	in the file comment.
+ 
+ 2004-06-26  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenu.java: Added javadoc.
+ 	(JMenu): Added MenuChangeListener to listen to 
+ 	ChangeEvents occuring in menu's model. 
+ 	(insert): Throw IllegalArgumentException if 
+ 	index is less than 0
+ 	(setSelected): Reimplement.
+ 	(setPopupMenuVisible): Call menu's model isEnabled()
+ 	(setDelay): Throw IllegalArgumentException if 
+ 	given amount of delay is less than 0.
+ 	(createActionComponent): Implemented.
+ 	(createActionChangeListener): Implemented.
+ 	(addSeparator): Implemented.
+ 	(getItem): Throw IllegalArgumentException if index is 
+ 	less than 0.
+ 	(getItemCount): Implemented.
+ 	(fireMenuSelected): Changed to use menuEvent.
+ 	(fireMenuDeselected): Likewise.
+ 	(fireMenuCanceled): Likewise.
+ 	(setAccelerator): Changed to throw an error if this 
+ 	method is used. 
+ 	(doClick): Implemented.
+ 	(JMenu.ActionChangedListener): New inner class to handle
+ 	PropertyChangeEvents occuring in the actions associated with menu.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java: Added javadoc.
+ 	(BasicMenuUI): Added PropertyChangeListener to the menu.
+ 	(createChangeListener): Implemented.
+ 	(createMenuDragMouseListener): Likewise.
+ 	(createMenuKeyListener): Likewise.
+ 	(createPropertyChangeListener): Likewise.
+ 	(uninstallListeners): Likewise.
+ 	(BasicMenuUI.MouseInputHandler): Reimplemented.
+ 	(BasicMenuUI.PropertyChangeHandler): New class. Not implemented yet.
+ 	(BasicMenuUI.ChangeHandler): Likewise.
+ 	(BasicMenuUI.MenuDragMouseHandler): Likewise.
+ 	(BasicMenuUI.MenuKeyHandler): Likewise.
+ 
+ 2004-06-26  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/MediaTracker.java
+ 	(imageUpdate): Only do notifyAll() if the image is complete.
+ 
+ 2004-06-26  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JApplet.java:
+ 	(getJMenuBar): Made public.
+ 	(setJMenuBar): Likewise.
+ 	* javax/swing/JFrame.java:
+ 	(getJMenuBar): Made public.
+ 	(setJMenuBar): Likewise.
+ 	* javax/swing/JWindow.java:
+ 	(getJMenuBar): Removed.
+ 	(setJMenuBar): Removed.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JEditorPane.java
+ 	(createEditorKitForContentType): Fixed visibility.
+ 	(fireHyperlinkUpdate): Likewise.
+ 	(getContentType): Likewise.
+ 	(getEditorKit): Likewise.
+ 	(getEditorKitForContentType): Likewise.
+ 	(getPage): Likewise.
+ 	(read): Likewise.
+ 	(registerEditorKitForContentTyoe): Likewise.
+ 	(replaceSelection): Likewise.
+ 	(setContentType): Likewise.
+ 	(setEditorKit): Likewise.
+ 	(setPage): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/Timer.java
+ 	(Timer): New constructor.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	(animationTimer): Don't initialize at construction.
+ 	(startAnimationTimer): Added since tag.
+ 	(stopAnimationTimer): Likewise.
+ 	(installUI): Use new Timer constructor.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(installUI): Likewise.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	(installUI): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ButtonGroup.java
+ 	(serialVersionUID): Made private.
+ 	(buttons): Renamed from v, added javadoc.
+ 	(sel): Added javadoc.
+ 	(ButtonGroup): Likewise.
+ 	(add): Likewise.
+ 	(remove): Likewise.
+ 	(getElements): Likewise.
+ 	(getSelection): Likewise.
+ 	(setSelected): Likewise.
+ 	(isSelected): Likewise.
+ 	(getButtonCount): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ButtonGroup.java,
+ 	javax/swing/ImageIcon.java,
+ 	javax/swing/JEditorPane.java,
+ 	javax/swing/JRootPane.java,
+ 	javax/swing/JTextField.java,
+ 	javax/swing/LookAndFeel.java,
+ 	javax/swing/plaf/basic/BasicTextUI.java:
+ 	Reindented.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/Style.java: Added javadocs.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(fireVetoableChange): Removed redundant cast.
+ 	* javax/swing/JLabel.java
+ 	(getDisabledIcon): Save icon for next call.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/KeyStroke.java
+ 	(getKeyStroke(char,boolean)): Marked deprecated.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultCellEditor.java,
+ 	javax/swing/GrayFilter.java,
+ 	javax/swing/event/DocumentEvent.java,
+ 	javax/swing/text/JTextComponent.java,
+ 	javax/swing/text/MutableAttributeSet.java:
+ 	Reindented.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/BorderUIResource.java:
+ 	Added serialVersionUID all over.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/DefaultButtonModel.java
+ 	(ARMED): Made public final, fixed value.
+ 	(ENABLED): Likewise.
+ 	(PRESSED): Likewise.
+ 	(ROLLOVER): Likewise.
+ 	(SELECTED): Likewise.
+ 	(stateMask): Initialize directly.
+ 	(listenerList): Likewise.
+ 	(mnemonic): Likewise.
+ 	(fireStateChanged): Removed argument, use changeEvent as event.
+ 	All places where this method is called are fixed too.
+ 	(getActionCommant): Fixed javadoc.
+ 	(setGroup): Fixed javadoc.
+ 	(getGroup): New method.
+ 
+ 2004-06-26  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(AbstractButton): Use init() to initialize the button.
+ 	(init): New Method. Initializes AbstractButton.
+ 	* javax/swing/JMenuItem.java: Documented.
+ 	(JMenuItem): Reimplemented.
+ 	(init): Implemented.
+ 	(setEnabled): Changed to call super.setEnabled()
+ 	(processMouseEvent): Reimplemented.
+ 	(fireMenuKeyPressed): Implemented.
+ 	(fireMenuKeyReleased): Implemented.
+ 	(fireMenuKeyTyped): Implemented.
+ 	(menuSelectionChanged): disarm the model if the menu item was
+ 	deselected.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:Documented.
+ 	(getPath): Change to use ArrayList instead of Vector.
+ 	(getPreferredSize): Renamed variable.
+ 	(paintMenuItem): Paint margin area of menu item.
+ 	(MouseInputHandler.mouseEntered): Set selection in MenuSelectionManager.
+ 	(MouseInputHandler.mouseReleased): Check if mouse was pressed inside
+ 	menu item's bounds before clearing the selection. 	
+ 
+ 2004-06-26  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
+ 	(GtkTextComponentPeer): Set caret position to 0.
+ 	* java/awt/TextComponent.java
+ 	(setText): Set caret position to 0.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
+ 	Handle GtkScrolledWindow separately. Fix signal handler blocking.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Make cursor
+ 	visible.
+ 
+ 2004-06-26  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(getComponentAt): Removed.
+ 	* javax/swing/AbstractAction.java
+ 	(ENABLED_PROPERTY): New property.
+ 	(putValue): Fire PropertyChangeEvents.
+ 	(setEnabled): ditto.
+ 	(firePropertyChange): Javadoc and implement
+ 	convenience method.
+ 	* javax/swing/AbstractButton.java
+ 	(setAction): Don't create PropertyChangeListener
+ 	if new Action is null.
+ 	(setIcon): Don't set icon till after comparing
+ 	it.
+ 	(configurePropertiesFromAction): Check mnemonic
+ 	key before calling intValue().
+ 	(createActionPropertyChangeListener): Check
+ 	properties rather than bulk change.
+ 	* javax/swing/DefaultDesktopManager.java:
+ 	Implement.
+ 	* javax/swing/DesktopManager.java:
+ 	Jalopy and javadoc.
+ 	* javax/swing/JComponent.java
+ 	(fireVetoableChange): Implement.
+ 	(paintImmediately): Use root component.
+ 	* javax/swing/JDesktopPane.java: Implement
+ 	* javax/swing/JInternalFrame.java: Implement
+ 	* javax/swing/JLabel.java
+ 	(getDisabledIcon): Return grayscaled icon if
+ 	no disabled icon specified.
+ 	* javax/swing/JMenuBar.java
+ 	(getComponentAtIndex): Use getComponent
+ 	* javax/swing/JOptionPane.java
+ 	(getDesktopPaneForComponent): Use SwingUtilities'
+ 	getAncestorOfClass
+ 	(getFrameForComponent): ditto.
+ 	* javax/swing/JSplitPane.java
+ 	(remove): Use getComponent.
+ 	* javax/swing/SwingUtilities.java
+ 	(convertPoint): Implement.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paintButtonNormal): Check opaqueness before
+ 	filling background.
+ 	* javax/swing/plaf/basic/BasicDesktopIconUI.java:
+ 	Implement
+ 	* javax/swing/plaf/basic/BasicDesktopPaneUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicInternalFrameTitlePane.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Change InternalFrame and Desktop colors.
+ 
+ 2004-06-26  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(remove): Do not set component to invisible.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/tree/DefaultMutableTreeNode.java
+ 	(getLeafCount): Renamed enum to e.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java
+ 	(positionForMouseEvent): Removed redundant semicolon.
+ 	(continueDrag): Use method arguments.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/border/TitledBorder.java,
+ 	javax/swing/filechooser/FileSystemView.java,
+ 	javax/swing/plaf/basic/BasicButtonListener.java,
+ 	javax/swing/plaf/basic/BasicGraphicsUtils.java,
+ 	javax/swing/plaf/basic/BasicLabelUI.java,
+ 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicScrollBarUI.java,
+ 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
+ 	javax/swing/plaf/basic/BasicSliderUI.java,
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
+ 	javax/swing/table/JTableHeader.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/StyledEditorKit.java,
+ 	javax/swing/tree/DefaultTreeCellEditor.java:
+ 	Reworked import statements.
+ 
+ 2004-06-26  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/Box.java: Temporarily comment out code
+ 	broken due to visibility bug.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ImageIcon.java
+ 	(ImageIcon): Added missing constructor.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JToggleButton.java
+ 	(JToggleButton): New constructor.
+ 	(getAccessibleContext): Moved documentation into javadoc.
+ 	(getUIClassID): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(getDisabledIcon): Create disabled icon if none exists yet.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(initClassDefaults): Added FormattedTextFieldUI.
+ 	(loadResourceBundle): Renamed enum to e.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java
+ 	(paintIcon): Simplified.
+ 	(paintText): Paint disabled button correctly.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(createToolTip): Use official JToolTip API.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JToolTip.java
+ 	(JToolTip): No arguments in API.
+ 	(setTipText): New method.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingUtilities.java
+ 	(isLeftMouseButton): New method.
+ 	(isMiddleMouseButton): New method.
+ 	(isRightMouseButton): New method.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java,
+ 	javax/swing/CellRendererPane.java,
+ 	javax/swing/JCheckBoxMenuItem.java,
+ 	javax/swing/JColorChooser.java,
+ 	javax/swing/JComboBox.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JDesktopPane.java,
+ 	javax/swing/JFileChooser.java,
+ 	javax/swing/JMenu.java,
+ 	javax/swing/JMenuItem.java,
+ 	javax/swing/JOptionPane.java,
+ 	javax/swing/JPasswordField.java,
+ 	javax/swing/JPopupMenu.java,
+ 	javax/swing/JProgressBar.java,
+ 	javax/swing/JRadioButtonMenuItem.java,
+ 	javax/swing/JScrollBar.java,
+ 	javax/swing/JSeparator.java,
+ 	javax/swing/JSlider.java,
+ 	javax/swing/JSplitPane.java,
+ 	javax/swing/JTabbedPane.java,
+ 	javax/swing/JTextField.java,
+ 	javax/swing/JToolBar.java,
+ 	javax/swing/text/JTextComponent.java:
+ 	Fixed all constructors of accessibility classes.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/ScrollPaneLayout.java: Renamed all memeber variables all
+ 	over.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/Box.java
+ 	(AccessibleBoxFiller): Extends AccessibleAWTComponent.
+ 	(AccessibleBoxFiller.serialVersionUID): New member variable.
+ 	* javax/swing/DefaultButtonModel.java
+ 	(stateMask): Made protected.
+ 	(listenerList): Likewise.
+ 	(changeEvent): Likewise.
+ 	(group): Likewise.
+ 	(mnemonic): Likewise.
+ 	(actionCommand): Likewise.
+ 	(getListeners): New method.
+ 	(getActionListeners): New method.
+ 	(getItemListeners): New method.
+ 	(getChangeListeners): New method.
+ 	(fireItemStateChanged): Simplified.
+ 	(fireActionPerformed): Simplified.
+ 	(fireStateChanged): Simplified.
+ 	* javax/swing/JFrame.java
+ 	(JFrame): Implements WindowContants.
+ 	(HIDE_ON_CLOSE): Removed.
+ 	(EXIT_ON_CLOSE): Removed.
+ 	(DISPOSE_ON_CLOSE): Removed.
+ 	(DO_NOTHING_ON_CLOSE): Removed.
+ 	(processWindowEvent): Exit with code 0.
+ 	(setDefaultCloseOperation): Do security check before setting value.
+ 	* javax/swing/JOptionPane.java
+ 	(message): Initialize only in constructor.
+ 	* javax/swing/JToolTip.java: Removed unused imports.
+ 	* javax/swing/JViewport.java
+ 	(serialVersionUID): New member variable.
+ 	(SIMPLE_SCROLL_MODE): Made final, fixed value.
+ 	(BLIT_SCROLL_MODE): Likewise.
+ 	(BACKINGSTORE_SCROLL_MODE): Likewise.
+ 	(scrollUnderway): Made protected.
+ 	(isViewSizeSet): Likewise.
+ 	* javax/swing/ListModel.java: Fixed javadoc.
+ 	* javax/swing/Popup.java: Likewise.
+ 	* javax/swing/RepaintManager.java
+ 	(paintDirtyRegions): Don't use internal classes of
+ 	java.util.AbstractMap.
+ 	* javax/swing/ScrollPaneConstants.java: Reindented.
+ 	* javax/swing/ScrollPaneLayout.java
+ 	(viewport): Made protected.
+ 	(verticalScrollBar): Made protected, renamed to vsb.
+ 	(horizontalScrollBar): Made protected, renamed to hsb.
+ 	(rowHeader): Made protected, renamed to rowHead.
+ 	(columnHeader): Made protected, renamed to colHead.
+ 	(lowerLeft): Made protected.
+ 	(lowerRight): Made protected.
+ 	(upperLeft): Made protected.
+ 	(upperRight): Made protected.
+ 	(verticalScrollBarPolicy): Made protected, renamed to vsbPolicy.
+ 	(horizontalScrollBarPolicy): Made protected, renamed to hsbPolicy.
+ 
+ 2004-06-26  Bernd Schmidt  <bernds@btinternet.com>
+ 
+ 	* java/awt/MediaTracker.java (imageUpdate): Only set status to
+ 	LOADING if flags has SOMEBITS set.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java: Reorganized imports.
+ 	* javax/swing/ActionMap.java: Likewise.
+ 	* javax/swing/DefaultButtonModel.java: Likewise.
+ 	* javax/swing/DefaultListModel.java: Likewise.
+ 	* javax/swing/ImageIcon.java: Likewise.
+ 	(serialVersionUID): New member variable.
+ 	* javax/swing/JComboBox.java: Reorganized imports.
+ 	* javax/swing/JComponent.java: Likewise.
+ 	(ui): Made protected.
+ 	(listenerList): Made protected.
+ 	(TOOL_TIP_TEXT_KEY): New constant.
+ 	(scrollRectToVisible): Removed redundant null check.
+ 	* javax/swing/JFrame.java: Reorganized imports.
+ 	* javax/swing/JInternalFrame.java: Reorganized imports.
+ 	* javax/swing/JProgressBar.java: Likewise.
+ 	* javax/swing/JRootPane.java: Likewise.
+ 	* javax/swing/JScrollBar.java: Likewise.
+ 	* javax/swing/JSeparator.java: Likewise.
+ 	* javax/swing/JSlider.java: Likewise.
+ 	* javax/swing/JTabbedPane.java: Likewise.
+ 	* javax/swing/JTextField.java: Likewise.
+ 	* javax/swing/JToolBar.java: Likewise.
+ 	* javax/swing/JTree.java: Likewise.
+ 	* javax/swing/JViewport.java: Likewise.
+ 	* javax/swing/JWindow.java: Likewise.
+ 	* javax/swing/KeyStroke.java: Likewise.
+ 	* javax/swing/LookAndFeel.java: Likewise.
+ 	* javax/swing/MenuSelectionManager.java: Likewise.
+ 	* javax/swing/SwingUtilities.java: Likewise.
+ 	* javax/swing/Timer.java: Likewise.
+ 	* javax/swing/DefaultBoundedRangeModel.java: Fixed javadoc.
+ 	* javax/swing/JList.java
+ 	(HORIZONTAL_WRAP): Made final, fixed value.
+ 	(VERTICAL): Likewise.
+ 	(VERTICAL_WRAP): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java
+ 	(serialVersionUID): New member variable.
+ 	(AccessibleAbstractButton.serialVersionUID): Likewise.
+ 	(AbstractButton): Made public.
+ 	* javax/swing/Box.java
+ 	(AccessibleBox.serialVersionUID): New member variable.
+ 	(Filler.serialVersionUID): Likewise.
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JApplet.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JCheckBox.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JCheckBoxMenuItem.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJCheckBoxMenuItem.serialVersionUID): Likewise.
+ 	* javax/swing/JColorChooser.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJColorChooser.serialVersionUID): Likewise.
+ 	* javax/swing/JComponent.java
+ 	(serialVersionUID): Made private.
+ 	(AccessibleJComponent.serialVersionUID): New member variable.
+ 	* javax/swing/JDesktopPane.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JDialog.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JFormattedTextField.java
+ 	(serialVersionUID): Fixed value.
+ 	* javax/swing/JFrame.java
+ 	(serialVersionUID): New member variable.
+ 	(getDefaultCloseOpertation): Made public.
+ 	* javax/swing/JLayeredPane.java
+ 	(serialVersionUID): Likewise.
+ 	(LAYER_PROPERTY): Made final, fixed value.
+ 	(JLayeredPane): Made public.
+ 	* javax/swing/JMenu.java
+ 	(AccessibleJMenu.serialVersionUID): New member variable.
+ 	(WinListener.serialVersionUID): Likewise.
+ 	* javax/swing/JMenuBar.java
+ 	(serialVersionUID): Likewise.
+ 	(getComponentAtIndex): Added @deprecated tag.
+ 	* javax/swing/JMenuItem.java
+ 	(serialVersionUID): New member variable.
+ 	(AccessibleJMenuItem.serialVersionUID): Likewise.
+ 	* javax/swing/JOptionPane.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJOptionPane.serialVersionUID): Likewise.
+ 	* javax/swing/JPopupMenu.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJPopupMenu.serialVersionUID): Likewise.
+ 	(getPopupMenuListeners): New method.
+ 	(getComponentAtIndex): Added @deprecated tag.
+ 	* javax/swing/JProgressBar.java
+ 	(serialVersionUID): New member variable.
+ 	(AccessibleJProgressBar.serialVersionUID): Likewise.
+ 	* javax/swing/JRadioButton.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JRadioButtonMenuItem.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJRadioButtonMenuItem.serialVersionUID): Likewise.
+ 	* javax/swing/JScrollBar.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJScrollBar.serialVersionUID): Likewise.
+ 	* javax/swing/JSeparator.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJSeparator.serialVersionUID): Likewise.
+ 	* javax/swing/JSlider.java: Fixed javadocs.
+ 	(AccessibleJSlider.serialVersionUID): New member variable.
+ 	* javax/swing/JSplitPane.java: Added copyright statement.
+ 	(serialVersionUID): New member variable.
+ 	(AccessibleJSplitPane.serialVersionUID): Likewise.
+ 	* javax/swing/JTabbedPane.java
+ 	(serialVersionUID): Likewise.
+ 	(AccessibleJTabbedPane.serialVersionUID): Likewise.
+ 	(ModelListener.serialVersionUID): Likewise.
+ 	(ModelListener.ModelListener): New constructor.
+ 	(SCROLL_TAB_LAYOUT): Made public final, fixed value.
+ 	(WRAP_TAB_LAYOUT): Likewise.
+ 	* javax/swing/JTable.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/swing/JToggleButton.java
+ 	(serialVersionUID): Likewise.
+ 	(ToggleButtonModel): Made static.
+ 	(ToggleButtonModel.serialVersionUID): New member variable.
+ 	* javax/swing/JToolTip.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JTree.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/JWindow.java
+ 	(serialVersionUID): Likewise.
+ 	* javax/swing/Timer.java
+ 	(serialVersionUID): Likewise.
+ 
+ 2004-06-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingConstants.java
+ 	(NEXT): New constant.
+ 	(PREVIOUS): Likewise.
+ 	* javax/swing/UIManager.java
+ 	(LookAndFeel): Made public.
+ 	(LookAndFeel.getClassName): Likewise.
+ 	(LookAndFeel.getName): Likewise.
+ 
+ 2004-06-26  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java:
+ 	Removed CVS tags.
+ 	* javax/swing/JMenu.java: Likewise.
+ 	* javax/swing/JMenuBar.java: Likewise.
+ 	* javax/swing/JMenuItem.java: Likewise.
+ 	* javax/swing/JPopupMenu.java: Likewise.
+ 	* javax/swing/JRadioButtonMenuItem.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java:Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Likewise.
+ 
+ 2004-06-26  Olga Rodimina  <rodimina@redhat.com>
+ 	
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	(MouseEntered): Do not call getPath() from MenuSelectionManager.
+ 	Call getPath() from super class instead.
+ 
+ 2004-06-26  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(remove): Set component visibility to false after removing it.
+ 
+ 2004-06-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (getForeground): Return SystemColor if
+ 	parent is null.
+ 	(getBackground): Likewise.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(item_highlighted): New function.
+ 	(connectSignals): Set item_highlighted as list's select
+ 	function.
+ 
+ 	* java/applet/Applet.java: Revert changes from 2004-04-29,
+ 	2004-03-15 and 2004-03-14.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
+ 	Divide baseline y coordinate by PANGO_SCALE, not DPI conversion
+ 	factor.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (create): Set
+ 	"Dialog" as the default font.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (create):
+ 	Likewise.
+ 	* java/awt/Component.java (getFont): Return "Dialog" font by
+ 	default.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c:
+ 	Multiply size argument to pango_font_description_set_size by the
+ 	DPI conversion factor rather than by PANGO_SCALE.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
+ 	Divide baseline y coordinate by DPI conversion factor rather
+ 	than by PANGO_SCALE.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	(area_prepared): Fix typo.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
+ 	(gtkSetFont): Move gtk_bin_get_child inside GDK critical region.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(dpi_conversion_factor): New global variable.
+ 	(init_dpi_conversion_factor): New function to calculate and
+ 	track DPI conversion factor.
+ 	(dpi_changed_cb): New callback.
+ 	* native/jni/gtk-peer/gtkpeer.h (dpi_conversion_factor): Declare.
+ 
+ 2004-06-26  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(getGraphics): Return a new GdkGraphics instance.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(getGraphics): Call super.getGraphics().
+ 
+ 2004-06-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(setNativeBounds): Clamp width and height values to >= 0.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(find_fg_color_widget): Handle GtkOptionMenu specially.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Only post configure events to visible
+ 	top-level windows.
+ 
+ 2004-06-26  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java
+ 	(layoutContainer): Fix size calculations.
+ 
+ 2004-06-26  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_wm_protocols_filter): Remove function.
+ 	(create): Remove filter that removes WM_TAKE_FOCUS client
+ 	messages.
+ 
+ 2004-06-25  Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/zip/ZipFile.java (getInputStream): Return null if
+ 	entry not found.
+ 
+ 2004-06-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/FilePermission.java (usingPerms): Removed.
+ 	(actionsString): Made final.
+ 	(cachePerms): Renamed to checkPerms.
+ 	(checkPerms): Renamed from cachePerms. Call trim() and toLowerCase()
+ 	on action String.
+ 	(FilePermission): Check arguments, call checkPerms().
+ 	(equals): Remove cachePerms() call.
+ 	(implies): Likewise.
+ 
+ 2004-06-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/SelectorImpl.java (select): Call static Thread
+ 	interrupted() method to clear interupt flag of our Thread.
+ 
+ 2004-06-21  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* native/jni/classpath/jcl.h, native/jni/classpath/jcl.c
+ 	(JCL_free_cstring): "cstr" argument back to const.
+ 
+ 2004-06-21  Steven Augart <augart@watson.ibm.com>
+ 
+ 	* native/jni/classpath/jcl.c, native/jni/classpath/jcl.h
+ 	(JCL_FindClass): Fixed const/non-const warning in function prototype.
+ 	(JCL_ThrowException): Idem.
+ 	(JCL_free_cstring): Fixed logical const/non-const problem in
+ 	function prototype.
+ 
+ 	* native/jni/classpath/jnilink.c, native/jni/classpath/jnilink.h
+ 	(LINK_ReallyLinkClass): Fix const/non-const warning in function
+ 	prototype. 
+ 	(LINK_RelinkClass): Idem.
+ 	(LINK_RelinkMethod): Idem.
+ 	(LINK_RelinkStaticMethod): Idem.
+ 	(LINK_RelinkField): Idem.
+ 	(LINK_RelinkStaticField): Idem.
+ 	
+ 	* native/jni/classpath/primlib.c (nativeWrapClassName): Make const.
+ 	(nativeWrapClassConstructorSig): Idem.
+ 	(nativeWrapClassAccessorName): Idem.
+ 	(nativeWrapClassAccessorSig): Idem.
+ 	
+ 2004-06-21  Steven Augart <augart@watson.ibm.com>
+ 
+ 	* native/jni/classpath/jcl.c, native/jni/classpath/jcl.h,
+ 	native/jni/classpath/jnilink.c, native/jni/classpath/jnilink.h,
+ 	native/jni/classpath/native_state.c, 
+ 	native/jni/classpath/native_state.h,
+ 	native/jni/classpath/primlib.c, native/jni/classpath/primlib.h:
+ 	Reformatted according to GNU Coding standards.
+ 
+ 2004-06-21  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* gnu/java/awt/peer/gtk/Makefile.am (EXTRA_DIST): Fixed
+ 	alphabetization.
+ 
+ 2004-06-21  David Grove <groved@us.ibm.com> 
+ 	    Steven Augart <augart@watson.ibm.com>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c:
+ 	Trivial formatting (trim trailing spaces).
+ 	(native_fd_fieldID): New variable.
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_init): 
+ 	Cache native_fd_fieldID. 
+ 	Fix "return with value in function returning void" warning.
+ 	(get_native_fd): Use cached native_fd_fieldID.
+ 	
+ 2004-06-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/Makefile.am (EXTRA_DIST): Add
+ 	gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h.
+ 	(libgtkpeer_la_SOURCES): Add
+ 	gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c.
+ 	* gnu/java/awt/peer/gtk/Makefile.am (EXTRA_DIST): Add
+ 	GThreadNativeMethodRunner.java and GThreadMutex.java
+ 
+ 2004-06-18  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* configure.ac: Complain if user types --enable-gtk-peers.
+ 
+ 2003-06-15  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/nio/Buffer.java,
+ 	java/nio/ByteBuffer.java,
+ 	java/nio/ByteBufferHelper.java,
+ 	java/nio/ByteBufferImpl.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/CharBufferImpl.java,
+ 	java/nio/CharViewBufferImpl.java,
+ 	java/nio/DirectByteBufferImpl.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/DoubleBufferImpl.java,
+ 	java/nio/DoubleViewBufferImpl.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/FloatBufferImpl.java,
+ 	java/nio/FloatViewBufferImpl.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/IntBufferImpl.java,
+ 	java/nio/IntViewBufferImpl.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/LongBufferImpl.java,
+ 	java/nio/LongViewBufferImpl.java,
+ 	java/nio/MappedByteBufferImpl.java,
+ 	java/nio/ShortBuffer.java,
+ 	java/nio/ShortBufferImpl.java,
+ 	java/nio/ShortViewBufferImpl.java:
+ 	Fixed javadocs all over. Improved input error
+ 	checking.
+ 
+ 	* java/nio/Buffer.java
+ 	(checkForUnderflow, checkForOverflow, checkIndex,
+ 	checkIfReadOnly, checkArraySize): New helper methods
+ 	for error checking.
+ 
+ 	* java/nio/ByteBufferHelper.java
+ 	(checkRemainingForRead, checkRemainingForWrite,
+ 	checkAvailableForRead, checkAvailableForWrite): Removed
+ 	no longer needed methods.
+ 
+ 2004-06-15  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Calendar.java: Use getSystemClassLoader as argument for
+ 	ResourceBundle.getBundle() calls.
+ 	* java/util/GregorianCalendar.java: Likewise.
+ 	* java/util/Currency.java: Likewise.
+ 	* java/text/BreakIterator.java: Likewise.
+ 	* java/text/Collator.java: Likewise.
+ 	* java/text/DateFormat.java: Likewise.
+ 	* java/text/DateFormatSymbols.java: Likewise.
+ 	* java/text/DecimalFormatSymbols.java: Likewise.
+ 	* java/text/NumberFormat.java: Likewise.
+ 	* java/awt/Window.java: Likewise.
+ 
+ 2004-06-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SwingConstants.java
+ 	(NEXT): New constant.
+ 	(PREVIOUS): Likewise.
+ 	* javax/swing/UIManager.java
+ 	(LookAndFeel): Made public.
+ 	(LookAndFeel.getName): Likewise.
+ 	(LookAndFeel.getClassName): Likewise.
+ 
+ 2004-06-15  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/util/GregorianCalendar.java (computeTime):  Skip buggy formulae
+ 	when we already know the answer.
+ 	* java/util/SimpleTimeZone.java (serialVersionOnStream): Bump to 2.
+ 	(setStartRule,setEndRule): Don't take abs of day number.
+ 	(getOffset): Clarify docs.  Add argument checks.
+ 	(isBefore): Take abs of day number in DOW_LE_DOM_MODE.
+ 	(equals,hasSameRules,toString,readObject): Use startTimeMode and
+ 	endTimeMode.
+ 
+ 2004-06-15  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* java/util/Calendar.java: Change ResourceBundle.getBundle() calls
+ 	to pass ClassLoader argument.
+ 	* java/util/GregorianCalendar.java: Likewise.
+ 	* java/util/Currency.java: Likewise.
+ 	* java/text/BreakIterator.java: Likewise.
+ 	* java/text/Collator.java: Likewise.
+ 	* java/text/DateFormat.java: Likewise.
+ 	* java/text/DateFormatSymbols.java: Likewise.
+ 	* java/text/DecimalFormatSymbols.java: Likewise.
+ 	* java/text/NumberFormat.java: Likewise.
+ 	* java/awt/Window.java: Likewise.
+ 
+ 2004-06-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/DeflaterOutputStream.java:
+ 	Reformatted.
+ 	* java/util/zip/InflaterInputStream.java
+ 	(InflaterInputStream): Removed redundant initialization of len to 0.
+ 	(available): Check for closed stream.
+ 	(read): Likewise.
+ 	(skip): Check for closed stream, simplified implementation.
+ 
+ 2004-06-14  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: consistent layout and latest news
+ 
+ 2004-06-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/RepaintManager.java
+ 	(paintDirtyRegions): Use entrySet(), not values().
+ 
+ 2004-06-12  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* java/lang/String.java: Doc fix.
+ 
+ 2004-06-11  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* NEWS: Added info on bug fix.
+ 
+ 2004-06-09  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* configure.ac: Add SIZEOF_VOID_P to include/config.h.
+ 	Quote '.*86'.
+ 
+ 2004-06-07  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* gnu/java/io/EncodingManager.java, java/util/ResourceBundle.java:
+ 	Replace ``Class.forName("Foo")'' with ``Foo.class''.
+ 
+ 2004-06-07  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* native/jni/gtk-peer/gthread-jni.c (c-font-lock-extra-types): 
+ 	Added jfieldID, jmethodID.
+ 	* include/jni.h (c-font-lock-extra-types): Added.
+ 
+ 2004-06-06  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* doc/vmintegration.texinfo (JNI Version): New section.
+ 	(VM Threading Model): New section.
+ 	(Miscellaneous VM Requirements): New chapter.
+ 
+ 2004-06-06  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	--portable-native-sync implemented for GTK2:
+ 	
+ 	* native/jni/gtk-peer/gthread-jni.c: Indentation fixes.
+ 	Implemented missing functions for GTK2.
+ 	Added error handling.
+ 	Renamed static functions out of the g_ namespace.
+ 	Added TRACE_API_CALLS, EXPLAIN_TROUBLE, EXPLAIN_BROKEN, 
+ 	EXPLAIN_BADLY_BROKEN, and DELETE_LOCAL_REFS options.
+ 	Rewrote global-reference code.
+ 	Eliminated cascading errors.
+ 	(mutex_trylock_jni_impl) Fully implemented.
+ 	(cond_timed_wait_jni_impl) Went from millisecond to microsecond
+ 	resolution.
+ 	(setup_cache) New function.
+ 	(mutex_cond_wait_jni_impl, mutex_cond_timed_wait_jni_impl) Fixed
+ 	bug where they were not unlocking the GMutex associated with the
+ 	condition variable during the wait on that condition variable.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
+ 	native/jni/gtk-peer/gthread-jni.c,
+ 	native/jni/gtk-peer/gthread-jni.h
+ 	(g_thread_jni_functions): Renamed to ...
+ 	(portable_native_sync_jni_functions): this name.
+ 	(gdk_vm): Renamed to...
+ 	(the_vm): this name.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(gdk_vm): Removed duplicate definition.
+ 	(gtkInit): Removed stray message to stdout.
+ 	(gtkInit): Use g_malloc and g_free instead of malloc and free.
+ 	(gtkInit): Fix a const assignment bug.
+ 	(gtkInit): Simplified code.
+ 
+ 	* gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h,
+ 	gnu/java/awt/peer/gtk/GThreadMutex.java:
+ 	New files.
+ 	
+ 2004-06-05  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* doc/vmintegration.texinfo: Added formatting.  Fixed some typos.
+ 	(Introduction): Added Jikes RVM and JamVM to the VM list.
+ 	Minor updates to other VM descriptions.
+ 
+ 2004-06-04  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* resource/gnu/regexp/MessagesBundle.properties, 
+ 	resource/gnu/regexp/MessagesBundle_fr.properties:
+ 	Corrected apostrophes.
+ 	Replaced "expected" with "unexpected".
+ 	
+ 	* resource/gnu/regexp/MessagesBundle_it.properties: New file.
+ 	
+ 2004-06-04  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* doc/hacking.texinfo: Formatting fixes.  
+ 	(Utility Classes) New TeXinfo node.
+ 
+ 2004-06-04  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/RuleBasedCollator.java
+ 	(mergeRules): Use ArrayList instead of Vector.
+ 	(subParseString): likewise.
+ 	(parseString): likewise.
+ 	(buildCollationVector): likewise.
+ 	(getCollationKey): likewise.
+ 
+ 2004-06-04  Casey Marshall <csm@gnu.org>
+ 
+ 	* java/lang/SecurityManager.java
+ 	(getSecurityContext): return `AccessController.getContext'.
+ 	(checkPermission(Permission)): use AccessController.
+ 	(checkPermission(Permission,Object)): likewise.
+ 	(checkRead): likewise.
+ 	(checkConnect): likewise.
+ 
+ 2004-06-03  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/Makefile: dependency to newsitems.txt added
+ 
+ 2004-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java (readFields): Use long datatype
+ 	when shifting byte values more then 24 bits left.
+ 
+ 2004-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Regenerated.
+ 
+ 2004-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* doc/hacking.texinfo: Fixed path to jnilink.h
+ 
+ 2004-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/MainThread.java: Reformated to match our coding style.
+ 
+ 2004-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(requestFocus): Call gtkWidgetFocus() and post focus event.
+ 	(gtkRequestFocus): Removed.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkRequestFocus):
+ 	Renamed to ...
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRequestFocus):
+ 	New method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_setupAccelGroup):
+ 	Merged comment with libgcj's version.
+ 
+ 2004-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AccessControlContext.java
+ 	(equals): Renamed protectionDomain to protectionDomains.
+ 	(hashCode): Likewise.
+ 	* vm/reference/java/security/.cvsignore: New file.
+ 
+ 2004-06-03  Casey Marshall  <csm@gnu.org>
+ 
+ 	* java/security/AccessController.java
+ 	(doPrivileged(PrivilegedAction,AccessControlContext)): call
+ 	VMAccessController.pushContext and popContext.
+ 	(doPrivileged(PrivilegedExceptionAction,AccessControlContext)):
+ 	likewise.
+ 	(getContext): call VMAccessController.getContext.
+ 	* java/security/Makefile.am
+ 	(EXTRA_DIST): add IntersectingDomainCombiner.java.
+ 	* gnu/java/security/Makefile.am
+ 	(EXTRA_DIST): add PolicyFile.java
+ 	* vm/reference/java/Makefile.am
+ 	(SUBDIRS): add security.
+ 	* java/security/IntersectingDomainCombiner.java: new file.
+ 	* gnu/java/security/PolicyFile.java: new file.
+ 	* vm/reference/java/security/VMAccessController.java: new file.
+ 	* vm/reference/java/security/Makefile.am: new file
+ 
+ 2004-06-03  Michael Koch  <konqerorq@gmx.de>
+ 
+ 	* configure.ac: Added vm/runtime/java/security/Makefile to output
+ 	files.
+ 
+ 2004-06-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AccessControlContext.java,
+ 	java/security/ProtectionDomain.java,
+ 	java/security/SecureClassLoader.java,
+ 	java/util/PropertyPermissionCollection.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-06-03  Casey Marshall <csm@gnu.org>
+ 
+ 	* java/security/AccessControlContext.java
+ 	(protectionDomain): mark final.
+ 	(combiner): likewise.
+ 	(<init>(ProtectionDomain[])): use HashSet to uniquify domains.
+ 	(<init>(ProtectionDomain[],AccessControlContext,DomainCombiner)):
+ 	new constructor.
+ 	(checkPermission): only succeed if `perm' is implied by all
+ 	protection domains.
+ 	(equal): do unordered comparison.
+ 	* java/security/ProtectionDomain.java
+ 	(<init>(CodeSource,PermissionCollection)): set `staticBinding' to
+ 	`true'.
+ 	* java/security/SecureClassLoader.java
+ 	(defineClass): make protection domain dynamically bound.
+ 	(getPermissions): call `getCurrentPolicy' to avoid permission
+ 	check.
+ 	* java/util/PropertyPermissionCollection.java
+ 	(implies): avoid infinite loop.
+ 
+ 2004-06-03  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java: Removed CVS tags.
+ 	* javax/swing/JMenu.java: Likewise.
+ 	* javax/swing/JMenuBar.java: Likewise.
+ 	* javax/swing/JMenuItem.java: Likewise.
+ 	* javax/swing/JPopupMenu.java: Likewise.
+ 	* javax/swing/JRadioButtonMenuItem.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Likewise.
+ 
+ 2004-05-31  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(remove): Set component's parent to null only after we removed the
+ 	component from its parent's layout manager.
+ 
+ 2004-05-31  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(GtkComponentPeer): Set bounds regardless of whether awtComponent
+ 	is valid.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java
+ 	(getSize): Change native method declaration.
+ 	(minimumSize): Pass visible row count into getSize().
+ 	(preferredSize): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize): Use scroll window's
+ 	natural size. Use visible row count to determine the final height
+ 	value to return.
+ 
+ 2004-05-31  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(setClip): Minor correction to order of operations.
+ 
+ 	* javax/swing/JScrollPane.java: Extend sketchy implementation.
+ 	* javax/swing/ScrollPaneLayout.java: Likewise.
+ 	* javax/swing/JViewPort.java: Likewise.
+ 	* javax/swing/ViewportLayout.java: Likewise.
+ 
+ 	* javax/swing/JComponent.java: Rewrite.
+ 	* javax/swing/RepaintManager.java: Likewise.
+ 
+ 	* javax/swing/JLayeredPane.java: Change validate() to revalidate().
+ 	* javax/swing/JList.java
+ 	(setSelectedIndices):
+ 	(getSelectedIndices):
+ 	(getSelectedValues): New functions.
+ 	(getPreferredScrollableViewportSize): Return preferred size.
+ 	(getScrollableUnitIncrement):
+ 	(getScrollableBlockIncrement): Initial implementations.
+ 	* javax/swing/JRootPane.java: Clean up slightly.
+ 	(getUI):
+ 	(setUI):
+ 	(updateUI):
+ 	(getUIClassID):
+ 	(isValidateRoot): Add overrides from JComponent.
+ 	* javax/swing/JScrollBar.java: Set default orientation to VERTICAL.
+ 	* javax/swing/UIManager.java (getDimension): Return the dimension.
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java: Set component opaque.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java:
+ 	Likewise, and set background.
+ 	* javax/swing/plaf/basic/BasicListUI.java:
+ 	Likewise, and improve a bit.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	Likewise, and adjust calculations.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java:
+ 	Likewise, and improve a bit.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(Button.margin): Shrink.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
+ 	Hack to set horizontal always, workaround pango.
+ 
+ 	* jni/gtk-peer/gtkcairopeer.h: Change to match pattern API.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
+ 	Synchronize more often, check cairo status after ops,
+ 	handle changes to cairo pattern API, check for disposal.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(BasicMenuItemUI): Create propertyChangeListener.
+ 	(getPath):Implemented.
+ 	(installListeners): Add propertyChangeListener to menuItem.
+ 	(uninstallListeners): Remove propertyChangeListener from menuItem.
+ 	(update): Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuUI.MouseInputHandler:
+ 	(mouseEntered): Take insets of popup menu into account when
+ 	calculating position of popup menu.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JMenuBar.java:
+ 	Started implementation.
+ 	* javax/swing/JPopupMenu.java:
+ 	(setVisible): Fixed location of lightweight/mediumweight
+ 	popup menu.
+ 	(show): Fixed location of PopupMenu.
+ 	* javax/swing/plaf/basic/BasicMenuBarUI.java:
+ 	New file. UI Delegate for JMenuBar.
+ 	* javax/swing/plaf/basic/BasicMenuUI.MouseInputHandler:
+ 	(mouseEntered): Corrected position of the submenu.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Remove calls
+ 	to _gtk_accel_group_attach.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
+ 	Likewise.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Give gtkSetFont
+ 	package access.  Don't override setFont.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: Likewise.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Give
+ 	gtkWidgetRequestFocus package access.
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java: Don't override
+ 	setFont.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java: Override gtkSetFont.
+ 	Give gtkWidgetRequestFocus package access.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Give
+ 	gtkWidgetRequestFocus package access.  Don't override setFont.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Don't override
+ 	setFont.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(gtkSetLabel): Move call to gtk_bin_get_child into GDK critical
+ 	region.
+ 	(gtkSetFont): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
+ 	Implement.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(gtkSetFont): Whitespace fix.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkWidgetSetUsize): Remove method.
+ 
+ 2004-05-31  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/image/MemoryImageSource.java
+ 	(newPixels(int,int,int,int,boolean)): Set only the specified
+ 	rectangle of pixels.
+ 	(newPixels(byte[],ColorModel,int,int)): Implement.
+ 	(newPixels(int[],ColorModel,int,int)): Implement.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JMenu.java: Started
+ 	implementation.
+ 	* javax/swing/JPopupMenu.java:
+ 	(insert): If specified index is -1, then
+ 	add component at the end.
+ 	(isPopupTrigger): Reimplemented.
+ 	(JPopupMenu.LightWeightPopup): setBounds
+ 	of the lightWeightPopup before adding it
+ 	to the layeredPane.
+ 	(javax/swing/plaf/basic/BasicIconFactory.java):
+ 	(getMenuArrowIcon): Implemented.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(getPreferredSize): Add size of the arrow icon
+ 	if this menu item is instance of JMenu.
+ 	(paintMenuItem): Paint arrow icon if this
+ 	menu item is a submenu.
+ 	* javax/swing/plaf/basic/BasicMenuUI.java:
+ 	New File. UI Delegate for JMenu.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (postKeyEvent):
+ 	Post KEY_TYPED events.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(generates_key_typed_event): Remove function.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JRootPane.java
+ 	(JRootPane.RootLayout): Reimplemented to
+ 	set bounds of contentPane and menuBar.
+ 	(setJMenuBar): Add menu bar to the layered pane.
+ 	(createLayeredPane): Set layout of layeredPane
+ 	to null.
+ 	* javax/swing/JLayeredPane.java:
+ 	(addImpl): Calculate index of the component in the
+ 	layeredPane according to the specified position within
+ 	the layer.
+ 
+ 2004-05-31  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(setPixels): Change color model to the default model after
+ 	converting pixels.
+ 	* java/awt/image/MemoryImageSource.java
+ 	(newPixels): Set only the specified rectangle of pixels.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* libgcj.spec.in (lib): Add -l-java-awt -l-java-applet
+ 	-l-java-beans -l-javax-accessibility -l-javax-swing.
+ 
+ 	* java/awt/AWTEvent.java (toString): Print source's name rather
+ 	than the source itself.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (loadSystemColors): Make
+ 	native.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+ 	(gdk_color_to_java_color): New function.
+ 	* jni/gtk-peer/gtkpeer.h: Add SystemColor defines.
+ 
+ 2004-05-31  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/image/RGBImageFilter.java:
+ 	Initialize origmodel as null.
+ 	(makeColor): Fix pixel component order.
+ 	(filterRGBPixels): Fix pixel iteration.
+ 	(setPixels): Add extra checks for index color model. Convert pixels
+ 	to default color model if necessary.
+ 	(convertColorModelToDefault): New override method for byte pixels.
+ 	(convertColorModelToDefault): For int pixels, fix pixel iteration.
+ 	(makeColorbyDefaultCM): New override method for byte pixels.
+ 	(makeColorbyDefaultCM): For int pixel, add color model as argument.
+ 	(makeColor): Fix pixel component order.
+ 
+ 2004-05-31  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/Box.java:
+ 	Comment out more parts of Box.Filler.
+ 
+ 2004-05-31  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/Box.java:
+ 	Remove reference to AccessibleAWTComponent so
+ 	it compiles again.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Update
+ 	implementation of list peer to use GtkTreeView instead of
+ 	deprecated GtkCList.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(gtkWidgetDispatchKeyEvent): Remove keyChar parameter.
+ 	(handleEvent): Remove keyChar argument to
+ 	gtkWidgetDispatchKeyEvent calls.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Fix
+ 	compiler warnings.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
+ 	Likewise.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(gtkWidgetRequestFocus): Mark protected.
+ 	(GtkComponentPeer): Only set the peer's bounds if its component
+ 	is valid.
+ 	* java/awt/Component.java (static): Set the default keyboard
+ 	focus manager.
+ 	(requestFocus(), requestFocus(boolean), requestFocusInWindow(),
+ 	requestFocusInWindow(temporary)): Don't request focus if the
+ 	component is not showing.  Get tree lock before traversing
+ 	component hierarchy.
+ 	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
+ 	Only set the global focus owner if it is not a Window.
+ 	(processKeyEvent): Consume keystrokes associated with the focus
+ 	traversal keystroke.
+ 	(focusPreviousComponent, focusNextComponent, upFocusCycle,
+ 	downFocusCycle): Call requestFocusInWindow instead of
+ 	requestFocus.
+ 	* java/awt/EventDispatchThread.java (run): Move setting of
+ 	default keyboard focus manager to Component.java.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(awt_keycode_to_keysym): New function.
+ 	(gtkWidgetDispatchKeyEvent): Finish implementation.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Add FIXME comment.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(gtkWidgetRequestFocus): New method.
+ 	* java/awt/TextArea.java (TextArea): Set focus traversal keys to
+ 	disable Tab and Shift-Tab keystrokes.
+ 	(addNotify, appendText, insertText, replaceText): Simplify peer
+ 	retrieval code.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(connectSignals): Remove connections to "commit" signals.
+ 	Remove C++-style comments.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(handleEvent): Activate GTK button when the space bar key is
+ 	pressed.
+ 	(gtkActivate): New method.
+ 
+ 2004-05-31  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/image/CropImageFilter.java
+ 	(setPixels): Implement for byte array pixels.
+ 	* java/awt/image/ReplicateScaleFilter.java
+ 	(setPixels): Implement for byte array pixels.
+ 	(replicatePixels): Overload for byte array pixels.
+ 
+ 2004-05-31  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/Box.java:
+ 	(getAccessibleContext): Return an instance of the
+ 	correct class.
+ 
+ 2004-05-31  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(drawImage): When component is null, use SystemColor.window as
+ 	the default bgcolor.
+ 	* gnu/java/awt/peer/gtk/GtkImage.java
+ 	(setPixels): We can avoid iterating through the pixel rows only
+ 	when height is 1.
+ 	* java/awt/Image.java
+ 	(getScaledInstance): Partially implement.
+ 	* java/awt/image/CropImageFilter.java
+ 	(setProperties): Fix "filter" property.
+ 	(setPixels): Implement.
+ 	* java/awt/image/ReplicateScaleFilter.java
+ 	(setDimensions): Use scaled dimensions.
+ 	(setPixels): Implement.
+ 	(replicatePixels): New method.
+ 
+ 2004-05-31  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkImagePainter.java
+ 	(convertPixels): If either pixels or model is null, return null.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkImagePainter_drawPixels): If jpixels
+ 	is null, do nothing and return.
+ 
+ 2004-05-31  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java:
+ 	(getGraphics): Like GtkFramePeer, the Graphics
+ 	object needs to be translate to account for
+ 	window decorations.
+ 	(postMouseEvent): New method. Account for
+ 	translation.
+ 	(postExposeEvent): ditto.
+ 	* javax/swing/Box.java: Stubbed.
+ 	* javax/swing/JDialog.java: Ran through jalopy
+ 	to fix indentation.
+ 	(JDialog): Call SwingUtilities' getOwnerFrame
+ 	for null owners.
+ 	(setLayout): Check isRootPaneCheckingEnabled
+ 	* javax/swing/JOptionPane.java: Re-implemented.
+ 	* javax/swing/SwingUtilities.java:
+ 	(getOwnerFrame): Static method to grab a default
+ 	owner frame for Dialogs that don't specify owners.
+ 	* javax/swing/event/SwingPropertyChangeSupport.java:
+ 	(firePropertyChange): Fix early exit condition.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java:
+ 	(paint): Avoid painting text if it is null
+ 	or empty.
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	Implement.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added new file.
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JPopupMenu.java:
+ 	Started implementation.
+ 	* javax/swing/JWindow.java
+ 	(JWindow): call super() if parent for window
+ 	is not specified.
+ 	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ 	New File. UI Delegate for JPopupMenu.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JApplet.java: Indicated that JApplet
+ 	implements RootPaneContainer and made method of this
+ 	interface public.
+ 	* javax/swing/JFrame.java: Ditto.
+ 	* javax/swing/JWindow.java: Ditto.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(nativeSetBounds): Call gdk_window_move in addition to
+ 	gtk_window_move.
+ 
+ 	* java/applet/Applet.java (preferredSize): Call parent's
+ 	preferredSize if the applet stub is null.
+ 	(minimumSize): Likewise for parent's minimumSize.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenuItem.java
+ 	(createActionPropertyChangeListener): Implemented.
+ 	(processMouseEvent): Ditto.
+ 	(fireMenuDragMouseEntered): Ditto.
+ 	(fireMenuDragMouseExited): Ditto.
+ 	(fireMenuDragMouseDragged): Ditto.
+ 	(fireMenuDragMouseReleased): Ditto.
+ 	(menuSelectionChanged): Ditto.
+ 	(getSubElements): Ditto.
+ 	(getComponent): Ditto.
+ 	(addMenuDragMouseListener): Ditto.
+ 	(removeMenuDragMouseListener):Ditto.
+ 	(addMenuKeyListener): Ditto.
+ 	(removeMenuKeyListener): Ditto.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java
+ 	(doClick): Imlemented.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.MouseInputHandler:
+ 	Don't handle mouse events here. Pass them to
+ 	MenuSelectionManager.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 	Used correct version of jalopy configuration
+ 	file to fix style in the files below.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JCheckBoxMenuItem.java:
+ 	Fixed style and removed unnecessary comments.
+ 	* javax/swing/JMenuItem.java: Ditto.
+ 	* javax/swing/JRadioButtonMenuItem.java: Ditto.
+ 	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java: Ditto.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java: Ditto.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Ditto.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu_java_awt_peer_gtk_GtkWindowPeer.c: Change FIXME comment to
+ 	C-style.
+ 
+ 	* gnu_java_awt_peer_gtk_GtkWindowPeer.c: Add FIXME comment.
+ 
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java
+ 	(getComponentAfter): Start from current component and work up
+ 	the component hierarchy until an acceptable component is found.
+ 	Synchronize on tree lock.
+ 	(getComponentBefore): Likewise.
+ 
+ 2004-05-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Remove
+ 	focus-related debugging messages.
+ 	* java/awt/DefaultKeyboardFocusManager.java: Likewise.
+ 	* java/awt/EventDispatchThread.java: Likewise.
+ 	* java/awt/KeyboardFocusManager.java: Likewise.
+ 	* java/awt/Window.java: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Change
+ 	new C++-style comments to C-style comments.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(handleEvent): Dispatch key press and key release events to
+ 	backing widget.
+ 	(requestFocus): Post a FOCUS_GAINED event to the event queue.
+ 	(gtkWidgetRequestFocus): New method.
+ 	(gtkWidgetDispatchKeyEvent): Likewise.
+ 	* java/awt/Component.java (requestFocus, requestFocus(boolean),
+ 	requestFocusInWindow, requestFocusInWindow(boolean),
+ 	getFocusCycleRootAncestor, nextFocus, transferFocus,
+ 	transferFocusBackward, transferFocusUpCycle, hasFocus,
+ 	isFocusOwner): Implement and document focus-handling methods.
+ 	(setFocusTraversalKeys): Inherit focus traversal keys when
+ 	keystrokes argument is null.  Fix focus-handling documentation
+ 	throughout class.
+ 	* java/awt/Container.java (setFocusTraversalKeys,
+ 	getFocusTraversalKeys, areFocusTraversalKeysSet,
+ 	isFocusCycleRoot, setFocusTraversalPolicy,
+ 	getFocusTraversalPolicy, isFocusTraversalPolicySet,
+ 	setFocusCycleRoot, isFocusCycleRoot, transferFocusDownCycle):
+ 	Implement and document focus-handling methods.
+ 	(transferFocusBackward): Remove method.
+ 	(readObject, writeObject): Implement and document serialization
+ 	methods.
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java: Implement
+ 	and document.
+ 	* java/awt/DefaultFocusTraversalPolicy.java: Implement and
+ 	document.
+ 	* java/awt/DefaultKeyboardFocusManager.java: Implement and
+ 	partially document.
+ 	* java/awt/EventDispatchThread.java (run): Set default keyboard
+ 	focus manager.  Attempt to dispatch each event to the keyboard
+ 	focus manager before normal dispatch.
+ 	* java/awt/KeyboardFocusManager.java: Implement and partially
+ 	document.
+ 	* java/awt/Window.java (Window): Set focusCycleRoot to true.
+ 	(show): Focus initial component when window is shown for the
+ 	first time.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Replace complex key press and key release
+ 	logic with simple callbacks into GtkComponentPeer.
+ 	* jni/gtk-peer/gtkpeer.h: Fix FOCUS_GAINED/FOCUS_LOST reversal.
+ 
+ 2004-05-31  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/MenuSelectionManager.java
+ 	(componentForPoint): Added new method.
+ 	(defaultManager): New Method. Implemented.
+ 	(getSelectedPath): Ditto.
+ 	(isComponentPartOfCurrentMenu): Ditto.
+ 	(processKeyEvent): Added new method.
+ 	(processMouseEvent): New Method. Implemented.
+ 	(setSelectedPath): Ditto.
+ 	(getPath): Ditto.
+ 
+ 2004-05-31  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java:
+ 	(remove): Set the component's parent to null.
+ 	(getComponentAt): Implement.
+ 	* javax/swing/JComponent.java:
+ 	(JComponent): Initialize defaultLocale
+ 	(getDefaultLocale): Implement.
+ 	(setDefaultLocale): ditto.
+ 	* javax/swing/JSlider.java:
+ 	(JSlider): Fix calculation of value.
+ 	* javax/swing/JSplitPane.java: Implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Change SplitPane's default divider size.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	(paint): Remove unused code.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
+ 	Added comments and ran through jalopy.
+ 	(setBasicSplitPaneUI): Get reference to hidden divider
+ 	and set up one touch buttons if necessary.
+ 	(setBorder): Fire propertyChangeEvent only if
+ 	borders are different.
+ 	(getPreferredSize): Defer to layout manager.
+ 	(propertyChange): Implement.
+ 	(oneTouchExpandableChanged): ditto.
+ 	(createLeftOneTouchButton): Use BasicArrowButton.
+ 	(createRightOneTouchButton): ditto.
+ 	(moveDividerTo): New method. Moves the divider
+ 	to a set location based on the last divider location.
+ 	(BasicSplitPaneDivider::MouseHandler): Implement.
+ 	(BasicSplitPaneDivider::OneTouchButton): Removed.
+ 	(BasicSplitPaneDivider::DragController): Implement.
+ 	(BasicSplitPaneDivider::VerticalDragController):
+ 	ditto.
+ 	(BasicSplitPaneDivider::DividerLayout): ditto.
+ 	* javax/swing/plaf/basic/BasicSplitPaneUI.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	(calculateLayoutInfo): Don't show component if it's
+ 	null.
+ 	(paintTab): Fix title paint logic.
+ 
+ 2004-05-30  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/RuleBasedCollator.java
+ 	(CollationElement.CollationElement): Removed unused constructor.
+ 	New argument for the other one.
+ 	(subParseString): Mark the element as ignorable but do not erase
+ 	them from the database.
+ 	(compare): Take into account the ignore field for ignorable
+ 	elements.
+ 	(buildCollationVector): Use the ignore field now.
+ 	* java/text/CollationElementIterator.java
+ 	(setText): Keep ignorable characters.
+ 
+ 2004-05-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/RandomAccessFile.java
+ 	(setLength): Only extend file if new size is bigger.
+ 
+ 2004-05-28  Mark Wielaard <mark@klomp.org>
+ 
+ 	* include/Makefile.am: Add java_lang_VMDouble.h. Remove
+ 	java.lang.VMRuntime.
+ 
+ 	* include/gnu_java_awt_EmbeddedWindow.h: Regenerated.
+ 	* include/gnu_java_awt_peer_gtk_GdkFontMetrics.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkButtonPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkChoicePeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkClipboard.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkFramePeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkGenericPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkImagePainter.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkLabelPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkListPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkMainThread.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkPanelPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkTextComponentPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkToolkit.h: Likewise.
+ 	* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Likewise.
+ 	* include/gnu_java_net_PlainDatagramSocketImpl.h: Likewise.
+ 	* include/gnu_java_net_PlainSocketImpl.h: Likewise.
+ 	* include/gnu_java_nio_NIOServerSocket.h: Likewise.
+ 	* include/gnu_java_nio_PipeImpl.h: Likewise.
+ 	* include/gnu_java_nio_SelectorImpl.h: Likewise.
+ 	* include/gnu_java_nio_channels_FileChannelImpl.h: Likewise.
+ 	* include/java_io_ObjectInputStream.h: Likewise.
+ 	* include/java_io_VMFile.h: Likewise.
+ 	* include/java_io_VMObjectStreamClass.h: Likewise.
+ 	* include/java_lang_Double.h: Likewise.
+ 	* include/java_lang_Math.h: Likewise.
+ 	* include/java_lang_Object.h: Likewise.
+ 	* include/java_lang_VMDouble.h: Likewise.
+ 	* include/java_lang_VMFloat.h: Likewise.
+ 	* include/java_lang_VMProcess.h: Likewise.
+ 	* include/java_lang_VMSystem.h: Likewise.
+ 	* include/java_lang_reflect_Array.h: Likewise.
+ 	* include/java_net_InetAddress.h: Likewise.
+ 	* include/java_net_NetworkInterface.h: Likewise.
+ 	* include/java_nio_DirectByteBufferImpl.h: Likewise.
+ 	* include/java_nio_MappedByteBufferImpl.h: Likewise.
+ 	* include/java_nio_channels_Channels.h: Likewise.
+ 	* include/java_util_TimeZone.h: Likewise.
+ 
+ 	* include/gnu_java_nio_MappedByteFileBuffer.h: Removed.
+ 	* include/java_lang_Thread.h: Removed.
+ 	* include/java_lang_VMClass.h: Removed.
+ 	* include/java_lang_VMRuntime.h: Removed.
+ 	* include/java_lang_reflect_Constructor.h: Removed.
+ 	* include/java_lang_reflect_Field.h: Removed.
+ 	* include/java_lang_reflect_Method.h: Removed.
+ 	* include/java_lang_reflect_Proxy.h: Removed.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (requestFocus):
+ 	Implement by calling gtkRequestFocus.
+ 	(gtkRequestFocus): New native method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_requestFocus__):
+ 	Renamed to ...
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkRequestFocus):
+ 	New function name.
+ 	(filter_expose_event_handler): Mark static.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ 	(menu_pos): Mark static.
+ 
+ 2004-05-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Removed include/jni.h from output files.
+ 	* include/jni.h: New file.
+ 	* include/jni.h.in: Removed.
+ 
+ 2004-05-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Security.java
+ 	(insertProviderAt): Use equals() instead of ==.
+ 	(removeProvicer): Likewise.
+ 	(getProvider): Likewise.
+ 
+ 2004-05-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/CharBuffer.java
+ 	(wrap): Fixed arguments, added javadocs.
+ 
+ 2004-05-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java
+ 	(limit): Fixed off by one error.
+ 
+ 2004-05-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4: Don't set USER_SPECIFIED_* conditionals.
+ 	* lib/Makefile.am: Big cleanup. Use commandline arguments directly.
+ 
+ 2004-05-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4
+ 	(CLASSPATH_CHECK_KAFFE): Removed.
+ 	(CLASSPATH_WITH_KAFFE): Removed.
+ 	(CLASSPATH_CHECK_JAVA): Removed.
+ 	(CLASSPAHT_WITH_JAVA): Removed.
+ 	(CLASSPAHT_FIND_JAVA): Removed.
+ 	(CLASSPATH_CHECK_KJC): Rewritten to check for kjc script.
+ 	(CLASSPATH_WITH_KJC): New macro.
+ 	* configure.ac: Dont call CLASSPAHT_FIND_JAVA.
+ 	* lib/Makefile.am
+ 	(KJC_CLASSPATH): Removed.
+ 	(KJC_MAIN): Removed.
+ 	(JAVAC): Set correctly when using kjc.
+ 
+ 2004-05-25  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/news.wml: show first 9999 entries
+ 
+ 2004-05-25  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/news.wml, doc/www.gnu.org/home.wml, 
+ 	doc/www.gnu.org/include/layout.wml: added page with all newsitems, 
+ 	newsitems on home limited to 8
+ 
+ 	* doc/www.gnu.org/newsitems.txt: news updated
+ 
+ 2004-05-24  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* acinclude.m4
+ 	(CLASSPATH_CHECK_GCJ):  Fixed the version number check to work
+ 	with GCC 3's --version message.
+ 
+ 2004-05-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/www.gnu.org/home.wml: Fixup archive and cvs links.
+ 
+ 2004-05-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/www.gnu.org/tasks.wml: Added security tasks.
+ 
+ 2004-05-21  Mark Wielaard <mark@klomp.org>
+ 
+ 	* README: Update cvs instructions.
+ 
+ 2004-05-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DeleteFileHelper.java (static): Removed.
+ 
+ 2004-05-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/beans/BeanInfoEmbryo.java,
+ 	java/awt/im/InputContext.java,
+ 	java/io/SequenceInputStream.java,
+ 	java/util/zip/ZipOutputStream.java,
+ 	javax/swing/plaf/basic/BasicLookAndFeel.java,
+ 	javax/swing/tree/DefaultMutableTreeNode.java:
+ 	Rename enum to e because enum is a keyword in Java 1.5.
+ 
+ 2004-05-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4 (CLASSPATH_WITH_INCLUDEDIR): Removed.
+ 	* configure.ac (EXTRA_INCLUDES): Removed.
+ 	(AM_CPPFLAGS): New variable to store needed includes.
+ 	* native/fdlibm/Makefile.am (INCLUDES): Removed.
+ 	* native/jni/classpath/Makefile.am (INCLUDES): Removed.
+ 	* native/jni/gtk-peer/Makefile.am: Use libgtkpeer_la_CPPFLAGS
+ 	instead of INCLUDES.
+ 	* native/jni/java-awt/Makefile.am (INCLUDES): Removed.
+ 	* native/jni/java-io/Makefile.am (INCLUDES): Removed.
+ 	* native/jni/java-lang/Makefile.am: Use libjavalang_la_CFLAGS and
+ 	libjavalangreflect_la_CFLAGS instead of INCLUDES.
+ 	* native/jni/java-net/Makefile.am (INCLUDES): Removed.
+ 	* native/jni/java-nio/Makefile.am (INCLUDES): Removed.
+ 	* native/jni/java-util/Makefile.am (INCLUDES): Removed.
+ 
+ 2004-05-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/fdlibm/e_pow.c: CYGNUS LOCAL should be GCJ LOCAL.
+ 	* native/fdlibm/fdlibm.h: Likewise.
+ 
+ 2004-05-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* native/fdlibm/mprec.c (lo0bits): Fix paren typo.
+ 
+ 2004-05-21  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* native/fdlibm/w_exp.c (o_threshold, u_threshold): Define only
+ 	if _IEEE_LIBM is undefined.
+ 
+ 2004-05-21  Bo Thorsen  <bo@berlioz.suse.de>
+ 
+ 	* native/fdlibm/ieeefp.h: Add x86-64 support.
+ 
+ 2004-05-21  Gerhard Tonn  <GerhardTonn@swol.de>
+ 
+ 	* native/fdlibm/ieeefp.h: Define __IEEE_BIG_ENDIAN for S/390.
+ 
+ 2004-05-21  Anthony Green  <green@redhat.com>
+ 
+ 	* native/fdlibm/ieeefp.h: Add arm thumb support.
+ 
+ 2004-05-21  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* native/fdlibm/ieeefp.h: Handle ARM platforms that have pure-endian
+ 	floating point.
+ 
+ 2002-1-1  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* native/fdlibm/ieeefp.h: Define __IEEE_BIG_ENDIAN for
+ 	PPC Darwin, not for all of Darwin.
+ 
+ 2004-05-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/System.java (properties): Make package private.
+ 	* java/lang/Throwable.java (StaticData.nl): Initialize through
+ 	directly accessing System.properties.getProperty().
+ 
+ 2004-05-20  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(requestFocus): Re-add function.
+ 
+ 2004-05-20  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(nextBlock, previousBlock): Use text_indexes to compute
+ 	textIndex.
+ 	(setOffset): Use text_indexes to chose the right position.
+ 	(text_indexes): New field.
+ 	(setText): Build text_indexes. Better handling of expansion
+ 	ordering.
+ 	* java/text/RuleBasedCollator.java
+ 	(CollationElement, CollationSorter): Made static.
+ 	(last_tertiary_value, SPECIAL_UNKNOWN_SEQ): Introduced special
+ 	collation elements for unknown character this is for sequence
+ 	using resets.
+ 	(mergeRules): Fixed insertion point.
+ 	(buildCollationVector): Initialize last_tertiary_value.
+ 	(compare): Handle special cases of accented characters.
+ 	(getDefaultAccentedElement): New method.
+ 	(getCollationFixed): Fixed key building.
+ 	* java/text/DecimalFormat.java
+ 	(parse): Fixed parsing of decimal strings. Number of maximum
+ 	digits to be read should now work.
+ 	* java/text/SimpleDateFormat.java:
+ 	(SimpleDateFormat): Set maximumFractionDigit to 0 for the number
+ 	formatter. This fixes DateFormatTest. 
+ 
+ 2004-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac (AM_CFLAGS): Added -Wmissing-declarations
+ 	-Wmissing-prototypes and -Wstring-prototypes.
+ 
+ 2004-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/Makefile.am (EXTRA_DIST): Added DeleteFileHelper.java.
+ 
+ 2004-05-19  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/io/DeleteFileHelper.java: New file.
+ 	* java/io/File.java
+ 	(deleteOnExit): Implemented.
+ 
+ 2004-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/testsuite/Makefile.am: Removed more dead Japhar code.
+ 
+ 2004-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4: Removed all Japhar specific stuff. Japhar is dead
+ 	since a long time. This also includes the macro
+ 	CLASSPATH_CHECK_THREADS.
+ 
+ 2004-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Use AC_CONFIG_COMMANDS instead of obsoleted
+ 	AC_OUTPUT_COMMANDS.
+ 
+ 2004-05-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4: Fixed typo.
+ 
+ 2004-05-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/Writer.java (Writer(Object)): Fixed API doc.
+ 
+ 2004-05-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectStreamField.java: Merge copyright year with libgcj.
+ 
+ 2004-05-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4: Depend on GCJ 3.3 or newer.
+ 
+ 2004-05-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4: Fix escaping of arguments to AC_ARG_WITH and use
+ 	AS_HELP_STRING for ./configure --help output.
+ 
+ 2004-05-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* vm/kaffe/.cvsignore,
+ 	vm/kaffe/Makefile.am,
+ 	vm/kaffe/java/.cvsignore,
+ 	vm/kaffe/java/Makefile.am,
+ 	vm/kaffe/kaffe/.cvsignore,
+ 	vm/kaffe/kaffe/Makefile.am,
+ 	vm/kaffe/native/.cvsignore,
+ 	vm/kaffe/native/Makefile.am: Removed.
+ 
+ 2004-05-16  Steven Augart  <augart@watson.ibm.com>
+ 	
+ 	* ChangeLog: Restore corrupted umlauts.  
+ 	
+ 	Some time between 2004-04-07 and 2004-05-01, somebody used
+ 	an editing tool on ChangeLog that converted Bernd Mï¿½sli's surname
+ 	to Mvsli, and similarly corrupted the names of Jï¿½rg Prante and
+ 	H. Vï¿½isï¿½nen.  It looks as if the editing tool read in latin1
+ 	characters, then masked them with 0x7F and wrote them out again.
+ 	
+ 	* ChangeLog: Explicitly set coding system to latin-1.
+ 	Added a "Local Variables" section.
+ 	
+ 2004-05-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/Toolkit.java (loadSystemColors): Make ACTIVE_CAPTION color
+ 	0xFF000080. Line out values.
+ 
+ 2004-05-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/Writer.java (Writer(Object)): Check for null lock object.
+ 
+ 2004-05-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/Toolkit.java (loadSystemColors): Implement.
+ 	
+ 2004-05-14  Steven Augart  <augart@watson.ibm.com>
+ 
+ 	* include/jni.h.in (_Jv_func): Removed.
+ 	(struct JNINativeInterface): Use `void *' for reserved slots.
+ 	(struct JNIInvokeInterface): Likewise.
+ 
+ 2004-05-08  Casey Marshall  <rsdio@metastatic.org>
+ 
+ 	* java/security/Signature.java
+ 	(sign): Don't set state to UNINITIALIZED.
+ 	(verify): Likewise.
+ 
+ 2004-05-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/io/decode/Decoder.java,
+ 	gnu/java/io/encode/Encoder.java,
+ 	gnu/java/math/MPN.java,
+ 	gnu/java/rmi/rmic/CompilerProcess.java,
+ 	java/awt/geom/Arc2D.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-05-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/event/.cvsignore: New file.
+ 
+ 2004-05-07  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/util/SimpleTimeZone.java (startTimeMode, endTimeMode,
+ 	WALL_TIME, STANDARD_TIME, UTC_TIME): New members.
+ 	(SimpleTimeZone): Tweak docs.  Add new variation.
+ 	(setStartRule,setEndRule): Add new variations.  Use
+ 	startTimeMode and endTimeMode.
+ 
+ 2004-05-07  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/util/Calendar.java (getActualMinimum,
+ 	getActualMaximum):  Remove abstract.  Implement.
+ 
+ 2004-05-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c
+ 	(receive0): Fix usage of java.net.DatagramPacket class.
+ 
+ 2004-05-07  Stephen Crawley <crawley@dstc.edu.au>
+ 
+ 	* vm/reference/java/lang/VMProcess.java (destroy) :
+ 	fix the infinite loop that occurs if you try to destroy a Process
+ 	that hasn't terminated yet.
+ 
+ 09-20-03 Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/File.java:
+ 	(File(File,String)): fixed the behaviour according to JDK 1.4.1.
+ 	dirPath should not be initialized to the full path if directory
+ 	is null, but to "/" if directory.getPath() is "" and the full path
+ 	in the other cases. A null name should throw a NullPointerException.
+ 
+ 2004-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/spi/ImageReaderWriterSpi.java
+ 	(ImageReaderWriterSpi): Made it public.
+ 
+ 2004-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/logging/Level.java:
+ 	Explicitly import java.io.Serializable.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/GZIPOutputStream.java
+ 	(GZIPOutputStream): Initialize crc.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(getParent): Fixed javadoc.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/java_lang_Double.h: Regenerated.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/DateTimeAtCompleted.java,
+ 	javax/print/attribute/standard/DateTimeAtCreation.java,
+ 	javax/print/attribute/standard/DateTimeAtProcessing.java,
+ 	javax/print/attribute/standard/DocumentName.java,
+ 	javax/print/attribute/standard/JobHoldUntil.java,
+ 	javax/print/attribute/standard/JobImpressionsCompleted.java,
+ 	javax/print/attribute/standard/JobMessageFromOperator.java,
+ 	javax/print/attribute/standard/JobName.java,
+ 	javax/print/attribute/standard/JobOriginatingUserName.java,
+ 	javax/print/attribute/standard/JobPriority.java,
+ 	javax/print/attribute/standard/JobPrioritySupported.java,
+ 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
+ 	javax/print/attribute/standard/OutputDeviceAssigned.java,
+ 	javax/print/attribute/standard/PrinterInfo.java,
+ 	javax/print/attribute/standard/PrinterLocation.java,
+ 	javax/print/attribute/standard/PrinterMakeAndModel.java,
+ 	javax/print/attribute/standard/PrinterMessageFromOperator.java,
+ 	javax/print/attribute/standard/PrinterName.java,
+ 	javax/print/attribute/standard/QueuedJobCount.java,
+ 	javax/print/attribute/standard/RequestingUserName.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/DocFlavor.java,
+ 	javax/print/attribute/standard/ColorSupported.java,
+ 	javax/print/attribute/standard/Compression.java,
+ 	javax/print/attribute/standard/CopiesSupported.java,
+ 	javax/print/attribute/standard/Fidelity.java,
+ 	javax/print/attribute/standard/Finishings.java,
+ 	javax/print/attribute/standard/JobImpressionsSupported.java,
+ 	javax/print/attribute/standard/JobKOctetsSupported.java,
+ 	javax/print/attribute/standard/JobMediaSheetsSupported.java,
+ 	javax/print/attribute/standard/JobSheets.java,
+ 	javax/print/attribute/standard/JobState.java,
+ 	javax/print/attribute/standard/JobStateReason.java,
+ 	javax/print/attribute/standard/JobStateReasons.java,
+ 	javax/print/attribute/standard/Media.java,
+ 	javax/print/attribute/standard/MediaSizeName.java,
+ 	javax/print/attribute/standard/MultipleDocumentHandling.java,
+ 	javax/print/attribute/standard/NumberUpSupported.java,
+ 	javax/print/attribute/standard/OrientationRequested.java,
+ 	javax/print/attribute/standard/PDLOverrideSupported.java,
+ 	javax/print/attribute/standard/PageRanges.java,
+ 	javax/print/attribute/standard/PresentationDirection.java,
+ 	javax/print/attribute/standard/PrintQuality.java,
+ 	javax/print/attribute/standard/PrinterIsAcceptingJobs.java,
+ 	javax/print/attribute/standard/PrinterMoreInfo.java,
+ 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.java,
+ 	javax/print/attribute/standard/PrinterResolution.java,
+ 	javax/print/attribute/standard/PrinterState.java,
+ 	javax/print/attribute/standard/PrinterStateReason.java,
+ 	javax/print/attribute/standard/PrinterStateReasons.java,
+ 	javax/print/attribute/standard/PrinterURI.java,
+ 	javax/print/attribute/standard/ReferenceUriSchemesSupported.java,
+ 	javax/print/attribute/standard/Severity.java,
+ 	javax/print/attribute/standard/SheetCollate.java,
+ 	javax/print/attribute/standard/Sides.java:
+ 	Added serialVersionUID and removed final keyword where it doenst
+ 	belong.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/package.html,
+ 	javax/print/event/package.html: New files.
+ 	* javax/print/Makefile.am
+ 	(EXTRA_DIST): Added package.html.
+ 	* javax/print/event/Makefile.am
+ 	(EXTRA_DIST): Added package.html.
+ 
+ 2004-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetworkInterface.java
+ 	(getByName): Return null when no interface was found.
+ 
+ 2004-05-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.09+cvs.
+ 
+ 2004-05-02  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt doc/www.gnu.org/announce/20040502.wml 
+ 	doc/www.gnu.org/downloads/downloads.wml  updated with release 0.09
+ 	information
+ 
+ 2004-05-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.09.
+ 	* README: Move text around. Add section on active projects which use
+ 	modified versions of the libraries.
+ 	* NEWS: Add important updates for this release.
+ 
+ 2004-05-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reverting bad commit from 2004-04-29
+ 	* javax/swing/JComponent.java (reshape): Call super.reshape().
+ 	* javax/swing/ViewportLayout.java (layoutContainer): Call
+ 	parent.countComponents().
+ 
+ 2004-05-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (finalize): New method.
+ 
+ 2004-05-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/AbstractButton.java: Replace special HTML entities with
+ 	ASCII equivalent.
+ 	* javax/swing/DefaultBoundedRangeModel.java: Likewise.
+ 	* javax/swing/DefaultButtonModel.java: Likewise.
+ 	* javax/swing/DefaultListModel.java: Likewise.
+ 	* javax/swing/JList.java: Likewise.
+ 	* javax/swing/JSlider.java: Likewise.
+ 	* javax/swing/ListModel.java: Likewise.
+ 	* javax/swing/Popup.java: Likewise.
+ 	* javax/swing/SwingUtilities.java: Likewise.
+ 
+ 2004-05-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Import GNU JAXP 2004-02-01
+ 	* external/jaxp/source/gnu/xml/aelfred2/JAXPFactory.java: Imported.
+ 	* external/jaxp/source/gnu/xml/aelfred2/SAXDriver.java: Idem.
+ 	* external/jaxp/source/gnu/xml/aelfred2/XmlParser.java: Idem.
+ 	* external/jaxp/source/gnu/xml/aelfred2/XmlReader.java: Idem.
+ 	* external/jaxp/source/gnu/xml/aelfred2/package.html: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/Consumer.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomAttr.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomCDATA.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomCharacterData.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomComment.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomDoctype.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomDocument.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomElement.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomEntity.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomEntityReference.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomEvent.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomEx.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomExtern.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomFragment.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomImpl.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomIterator.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomNamedNodeMap.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomNode.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomNotation.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomNsNode.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomPI.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/DomText.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/JAXPFactory.java: Idem.
+ 	* external/jaxp/source/gnu/xml/dom/package.html: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/CallFilter.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/DomConsumer.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/EventConsumer.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/EventFilter.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/LinkFilter.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/NSFilter.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/PipelineFactory.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/TeeConsumer.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/TextConsumer.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/ValidationConsumer.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/WellFormednessFilter.java:
+ 	Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/XIncludeFilter.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/XsltFilter.java: Idem.
+ 	* external/jaxp/source/gnu/xml/pipeline/package.html: Idem.
+ 	* external/jaxp/source/gnu/xml/util/DoParse.java: Idem.
+ 	* external/jaxp/source/gnu/xml/util/DomParser.java: Idem.
+ 	* external/jaxp/source/gnu/xml/util/Resolver.java: Idem.
+ 	* external/jaxp/source/gnu/xml/util/SAXNullTransformerFactory.java:
+ 	Idem.
+ 	* external/jaxp/source/gnu/xml/util/XCat.java: Idem.
+ 	* external/jaxp/source/gnu/xml/util/XHTMLWriter.java: Idem.
+ 	* external/jaxp/source/gnu/xml/util/XMLWriter.java: Idem.
+ 	* external/jaxp/source/gnu/xml/util/package.html: Idem.
+ 	* external/jaxp/source/javax/xml/parsers/ClassStuff.java: Idem.
+ 	* external/jaxp/source/javax/xml/parsers/DocumentBuilder.java: Idem.
+ 	* external/jaxp/source/javax/xml/parsers/DocumentBuilderFactory.java:
+ 	Idem.
+ 	* external/jaxp/source/javax/xml/parsers/
+ 	FactoryConfigurationError.java: Idem.
+ 	* external/jaxp/source/javax/xml/parsers/
+ 	ParserConfigurationException.java: Idem.
+ 	* external/jaxp/source/javax/xml/parsers/SAXParser.java: Idem.
+ 	* external/jaxp/source/javax/xml/parsers/SAXParserFactory.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/ClassStuff.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/ErrorListener.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/OutputKeys.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/Result.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/Source.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/SourceLocator.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/Templates.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/Transformer.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/
+ 	TransformerConfigurationException.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/TransformerException.java:
+ 	Idem.
+ 	* external/jaxp/source/javax/xml/transform/TransformerFactory.java:
+ 	Idem.
+ 	* external/jaxp/source/javax/xml/transform/
+ 	TransformerFactoryConfigurationError.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/URIResolver.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/dom/DOMLocator.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/dom/DOMResult.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/dom/DOMSource.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/sax/SAXResult.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/sax/SAXSource.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/sax/
+ 	SAXTransformerFactory.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/sax/TemplatesHandler.java:
+ 	Idem.
+ 	* external/jaxp/source/javax/xml/transform/sax/
+ 	TransformerHandler.java: Idem.
+ 	* external/jaxp/source/javax/xml/transform/stream/StreamResult.java:
+ 	Idem.
+ 	* external/jaxp/source/javax/xml/transform/stream/StreamSource.java:
+ 	Idem.
+ 	* external/jaxp/source/org/xml/sax/AttributeList.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/Attributes.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ContentHandler.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/DTDHandler.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/DocumentHandler.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/EntityResolver.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ErrorHandler.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/HandlerBase.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/InputSource.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/Locator.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/Parser.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/SAXException.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/SAXNotRecognizedException.java:
+ 	Idem.
+ 	* external/jaxp/source/org/xml/sax/SAXNotSupportedException.java:
+ 	Idem.
+ 	* external/jaxp/source/org/xml/sax/SAXParseException.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/XMLFilter.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/XMLReader.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/package.html: Idem.
+ 	* external/jaxp/source/org/xml/sax/ext/Attributes2.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ext/Attributes2Impl.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ext/DeclHandler.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ext/DefaultHandler2.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ext/EntityResolver2.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ext/LexicalHandler.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ext/Locator2.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ext/Locator2Impl.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/ext/package.html: Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/AttributeListImpl.java:
+ 	Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/AttributesImpl.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/DefaultHandler.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/LocatorImpl.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/NamespaceSupport.java:
+ 	Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/NewInstance.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/ParserAdapter.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/ParserFactory.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/XMLFilterImpl.java: Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/XMLReaderAdapter.java:
+ 	Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/XMLReaderFactory.java:
+ 	Idem.
+ 	* external/jaxp/source/org/xml/sax/helpers/package.html: Idem.
+ 
+ 2004-05-01  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(MAXIMUM_INTEGER_DIGITS): New constant to keep the numeric value 309.
+ 	(applyPatternWithSymbols): Use MAXIMUM_INTEGER_DIGITS.
+ 	(parse): Fixed handling of exponentiation notation and grouping.
+ 
+ 2004-05-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c:
+ 	New files.
+ 	* native/jni/gtk-peer/Makefile.am:
+ 	Added new files to build.
+ 
+ 2004-04-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java (truncate): Only truncate
+ 	when size is smaller.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(implTruncate): Always save current position. Only reposition file
+ 	pointer to where we started if not beyond new lenght. Reposition file
+ 	pointer to file length if it points beyond the end of file.
+ 	* java/io/RandomAccessFile.java (setLength): Use truncate for
+ 	shrinking the file and seek plus write for expanding the file.
+ 
+ 2004-04-30  Tom Tromey  <tromey@redhat.com>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/File.java (toURI): New method.
+ 	(toURL): Use isDirectory() directly.
+ 
+ 2004-04-30  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/util/zip/InflaterInputStream.java (skip): Copied implementation
+ 	from java.io.InputStream.
+ 
+ 2004-04-30  Grzegorz B. Prokopski <gadek@debian.org>
+ 
+ 	* java/lang/Object.java (static): Remove static initializer.
+ 	* java/lang/Throwable.java (nl): Remove static field.
+ 	(StaticData): New private static inner class.
+ 	(stackTraceStringBuffer): Use StaticData.nl.
+ 
+ 2004-04-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by David Holmes
+ 	* java/lang/Class.java: Clean up confusing stateements about system
+ 	classloader versus bootstrap classloader.
+ 
+ 2004-04-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Nikolay Fiykov [bugs #8611]
+ 	* java/lang/Runtime.java (loadLib): New private method.
+ 	(load): Call loadLib.
+ 	(loadLibrary): Call loadLib.
+ 
+ 	* java/lang/Runtime.java (runShutdownHooks): Use Thread.yield().
+ 
+ 2004-04-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* README: Update end user dev environments and hackers runtime lists.
+ 	* INSTALL: Update needed library versions, add texinfo version
+ 	requirement, mention website/hacker guide.
+ 	* doc/hacking.texinfo: Include item on texinfo.
+ 
+ 2004-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GdkFontMetrics.h,
+ 	include/gnu_java_awt_peer_gtk_GdkGraphics.h,
+ 	include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkLabelPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkMenuPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkWindowPeer.h:
+ 	Fixed stange method signatures produced by buggy gcjh.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c:
+ 	Include gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(dispose): Removed.
+ 	(remove): Removed.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(dispose): Removed.
+ 	(requestFocus): Removed.
+ 	(gtkWidgetSetUSize): Removed.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(setTitle): Removed.
+ 	* native/jni/gtk-peer/gthread-jni.c
+ 	(gdk_threads_wake): Removed
+ 	* native/jni/java-io/javaio.h
+ 	(_javaio_open_read): Added prototype.
+ 	(_javaio_open_readwrite): Likewise.
+ 	* native/jni/java-lang/java_lang_VMDouble.c:
+ 	Include java_lang_VMDouble.h.
+ 	* native/jni/java-lang/java_lang_reflect_Array.c
+ 	(getLength): Removed.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(nativeGetLength): Removed.
+ 
+ 2004-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/java_nio_channels_Channels.h,
+ 	native/jni/java-nio/java_nio_channels_Channels.c:
+ 	New files.
+ 	* include/Makefile.am:
+ 	Generate include/java_nio_channels_Channels.h.
+ 	* native/jni/java-nio/Makefile.am:
+ 	Compile java_nio_channels_Channels.c.
+ 
+ 2004-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/prefs/AbstractPreferences.java
+ 	(AbstractPreferences): Added parenthesis for clarity. Closes bug #7940.
+ 
+ 2004-04-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/BitwiseXORComposite.java
+ 	(compose(Raster, Raster, WritableRaster)): Removed unused variable
+ 	transferType.
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java (minimumSize): Removed
+ 	unused variables hScrollbarHeight and vScrollbarWidth.
+ 	(preferredSize): Likewise.
+ 	* gnu/java/security/provider/DSAParameters.java (engineToString):
+ 	Removed unused call to System.getProperty("line.seperator");
+ 	* java/security/Security.java (loadProviders): Return result.
+ 
+ 2004-04-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by f.haeglsperger@gmx.de [patch #2485]
+ 	* java/util/HashMap.java (rehash): Add entry at start of bucket.
+ 
+ 2004-04-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/RandomAccessFile.java (setLength): Set position to new
+ 	length when new length is smaller then current position.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(static): ANY_IF should be an instance of Inet4Address.
+ 	(InetAddress): Remove unused constructors.
+ 	(getByName): Create instance of Inet4Address for IPv4 addresses.
+ 	(getAllByName): Likewise.
+ 	(getInaddrAny): Likewise.
+ 	* java/net/Inet4Address.java
+ 	(Inet4Address): New constructor which takes hostname_alias. route all
+ 	other construtors through this one.
+ 	* java/net/Inet6Address.java
+ 	(Inet6Address): Call correct super constructor.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java,
+ 	java/nio/CharBuffer.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/ShortBuffer.java:
+ 	(compareTo): Fixed bogus implementation in all buffer classes.
+ 
+ 2004-04-29  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/applet/Applet.java (preferredSize): Call parent's
+ 	preferredSize if the applet stub is null.
+ 	(minimumSize): Likewise for parent's minimumSize.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_net_PlainSocketImpl.h
+ 	(connect): Fixed signature of method.
+ 	* include/gnu_java_nio_channels_FileChannelImpl.h
+ 	(lock): Likewise.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(lock): Likewise.
+ 
+ 2004-04-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* .classpath: New file.
+ 	* .project: New file.
+ 
+ 2004-04-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/AttributedString.java: Cleaned up imports.
+ 	* java/util/zip/Deflater.java (strategy): Removed.
+ 	* java/util/zip/DeflaterEngine.java (buffer): Removed.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/java_nio_MappedByteBufferImpl.h:
+ 	New file.
+ 	* include/Makefile.am:
+ 	Generate java_nio_MappedByteBufferImpl.h.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(implTruncate): Fixed typo.
+ 	* native/jni/java-nio/java_nio_MappedByteBufferImpl.c:
+ 	New file.
+ 	* native/jni/java-nio/Makefile.am:
+ 	Compile java_nio_MappedByteBufferImpl.c.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/PrintServiceLookup.java: New file.
+ 	* javax/print/Makefile.am (EXTRA_DIST):
+ 	Added PrintServiceLookup.java.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/DocFlavor.java:
+ 	Implemented all flavor classes.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/ColorSupported.java,
+ 	javax/print/attribute/standard/Compression.java,
+ 	javax/print/attribute/standard/CopiesSupported.java,
+ 	javax/print/attribute/standard/Fidelity.java,
+ 	javax/print/attribute/standard/Finishings.java,
+ 	javax/print/attribute/standard/JobImpressionsSupported.java,
+ 	javax/print/attribute/standard/JobKOctetsSupported.java,
+ 	javax/print/attribute/standard/JobMediaSheetsSupported.java,
+ 	javax/print/attribute/standard/JobSheets.java,
+ 	javax/print/attribute/standard/JobState.java,
+ 	javax/print/attribute/standard/JobStateReason.java,
+ 	javax/print/attribute/standard/JobStateReasons.java,
+ 	javax/print/attribute/standard/Media.java,
+ 	javax/print/attribute/standard/MediaSizeName.java,
+ 	javax/print/attribute/standard/MultipleDocumentHandling.java,
+ 	javax/print/attribute/standard/NumberUpSupported.java,
+ 	javax/print/attribute/standard/OrientationRequested.java,
+ 	javax/print/attribute/standard/PDLOverrideSupported.java,
+ 	javax/print/attribute/standard/PageRanges.java,
+ 	javax/print/attribute/standard/PresentationDirection.java,
+ 	javax/print/attribute/standard/PrintQuality.java,
+ 	javax/print/attribute/standard/PrinterIsAcceptingJobs.java,
+ 	javax/print/attribute/standard/PrinterMoreInfo.java,
+ 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.java,
+ 	javax/print/attribute/standard/PrinterResolution.java,
+ 	javax/print/attribute/standard/PrinterState.java,
+ 	javax/print/attribute/standard/PrinterStateReason.java,
+ 	javax/print/attribute/standard/PrinterStateReasons.java,
+ 	javax/print/attribute/standard/PrinterURI.java,
+ 	javax/print/attribute/standard/ReferenceUriSchemesSupported.java,
+ 	javax/print/attribute/standard/Severity.java,
+ 	javax/print/attribute/standard/SheetCollate.java,
+ 	javax/print/attribute/standard/Sides.java: New files.
+ 	* javax/print/attribute/standard/Makefile.am
+ 	(EXTRA_DIST): Added new files.
+ 
+ 2004-04-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/lang/Makefile.am (EXTRA_DIST): Removed
+ 	ClassLoaderHelper.java.
+ 	* javax/print/Makefile.am (EXTRA_DIST): Fixed DonPrintJob.java typo
+ 	by DocPrintJob.java.
+ 
+ 2004-04-29  Stephen Crawley  <crawley@dstc.edu.au>
+ 	    Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_read___3BII):
+ 	Fill buffer with a  do-while bytes_read < 1 loop.
+ 	Check for length == 0.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java,
+ 	javax/swing/ActionMap.java,
+ 	javax/swing/DefaultButtonModel.java,
+ 	javax/swing/DefaultListModel.java,
+ 	javax/swing/ImageIcon.java,
+ 	javax/swing/JComboBox.java,
+ 	javax/swing/JComponent.java,
+ 	javax/swing/JFrame.java,
+ 	javax/swing/JInternalFrame.java,
+ 	javax/swing/JMenuBar.java,
+ 	javax/swing/JMenuItem.java,
+ 	javax/swing/JOptionPane.java,
+ 	javax/swing/JProgressBar.java,
+ 	javax/swing/JRootPane.java,
+ 	javax/swing/JScrollBar.java,
+ 	javax/swing/JScrollPane.java,
+ 	javax/swing/JSeparator.java,
+ 	javax/swing/JSlider.java,
+ 	javax/swing/JTabbedPane.java,
+ 	javax/swing/JTable.java,
+ 	javax/swing/JTextField.java,
+ 	javax/swing/JToolBar.java,
+ 	javax/swing/JToolTip.java,
+ 	javax/swing/JTree.java,
+ 	javax/swing/JViewport.java,
+ 	javax/swing/JWindow.java,
+ 	javax/swing/KeyStroke.java,
+ 	javax/swing/LookAndFeel.java,
+ 	javax/swing/SwingUtilities.java,
+ 	javax/swing/Timer.java,
+ 	javax/swing/ToolTipManager.java,
+ 	javax/swing/UIDefaults.java,
+ 	javax/swing/ViewportLayout.java,
+ 	javax/swing/border/TitledBorder.java,
+ 	javax/swing/filechooser/FileSystemView.java,
+ 	javax/swing/plaf/basic/BasicButtonListener.java,
+ 	javax/swing/plaf/basic/BasicButtonUI.java,
+ 	javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicGraphicsUtils.java,
+ 	javax/swing/plaf/basic/BasicLabelUI.java,
+ 	javax/swing/plaf/basic/BasicMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java,
+ 	javax/swing/plaf/basic/BasicRootPaneUI.java,
+ 	javax/swing/plaf/basic/BasicScrollBarUI.java,
+ 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
+ 	javax/swing/plaf/basic/BasicSliderUI.java,
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
+ 	javax/swing/table/JTableHeader.java,
+ 	javax/swing/table/TableColumn.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/StyledEditorKit.java,
+ 	javax/swing/tree/DefaultTreeCellEditor.java:
+ 	Clean ip imports.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(create): Declare variable on top of function.
+ 
+ 2004-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/java-io/java_io_VMObjectStreamClass.c
+ 	(getFieldReference): Use char* for strings, not jbyte*.
+ 	* native/jni/java-lang/java_lang_VMProcess.c
+ 	(copy_string): Likewise.
+ 	* native/jni/java-lang/java_lang_VMSystem.c:
+ 	Include jcl.h for JCL_FindClass definition.
+ 	* native/jni/java-nio/gnu_java_nio_NIOServerSocket.c
+ 	(getPlainSocketImpl): Return NULL.
+ 	* native/jni/java-nio/java_nio_DirectByteBufferImpl.c
+ 	(getImpl): Don't return anything.
+ 	(adjustAddress): Return NULL.
+ 
+ 2004-04-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectStreamField.java: Cleaned up imports.
+ 	* javax/imageio/stream/ImageInputStream.java: Removed unused import.
+ 	* java/io/BufferedReader.java (skip): Removed unused
+ 	variable.
+ 
+ 2004-04-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/jni.h.in (GetStringUTFChars):
+ 	Made it return const char * instead of const jbyte *.
+ 
+ 2004-04-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* gnu/java/text/FormatBuffer.java,
+ 	gnu/java/text/AttributedFormatBuffer.java,
+ 	gnu/java/text/StringFormatBuffer.java: New classes to implement
+ 	attributed iterators in java.text.
+ 
+ 	* gnu/java/text/FormatCharacterIterator.java: Moved 
+ 	from java/text as it is an internal class.
+ 
+ 	* gnu/java/text/Makefile.am: Added new files to EXTRA_DIST.
+ 
+ 	* java/text/Makefile.am: Removed moved classes from EXTRA_DIST.
+ 	
+ 2004-04-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/MessageFormat.java:
+ 	(class Field): New class.
+ 	(formatToCharacterIterator): New method.
+ 	(format): Use formatInternal now.
+ 	(formatInternal): New method. String formatter should
+ 	be done here (with attributes). Attributes merging supported.
+ 	(parse): More documentation.
+ 	(getFormatsByArgumentIndex): New method.
+ 	(setFormatByArgumentIndex): New method.
+ 	(setFormatsByArgumentIndex): New method.
+ 
+ 2004-04-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/SimpleDateFormat.java:
+ 	(formatWithAttribute): New method. It implements
+ 	the formatting process with attributes.
+ 	(format): Use formatWithAttribute.
+ 	(formatToCharacterIterator): New method. Use
+ 	formatWithAttribute.
+ 
+ 2004-04-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(scanFix): Build attribute array. Fixed error reporting.
+ 	(applyPatternWithSymbols): Store attributes for the prefix and
+ 	suffix.
+ 	(formatInternal): New method. Changed the way the string is
+ 	computed. Implemented attributes. Cleant up rounding in
+ 	exponential notation.
+ 	(format): Use formatInternal.
+ 	(formatToCharacterIterator): New method.
+ 	(exponentRound, negativePrefixRanges, positivePrefixRanges,
+ 	negativePrefixAttrs, positivePrefixAttrs, negativeSuffixRanges,
+ 	positiveSuffixRanges, negativeSuffixAttrs, positiveSuffixAttrs):
+ 	New fields.
+ 
+ 2004-04-28  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/Format.java: Updated importations. Removed unnecessary
+ 	classes.
+ 
+ 2004-04-28  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/image/ColorModel.java (getRGBdefault): Default ColorModel has
+ 	32 bit pixels not 8 bit pixels.
+ 	(isCompatibleRaster): Added javadoc comment.
+ 
+ 2004-04-28  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/image/ComponentSampleModel.java (setDataSamples):Do not reset
+ 	scanline stride.
+ 
+ 2004-04-28  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/ColorPaintContext.java (<init>): Added ColorModel to signature.
+ 	(getColorModel): Return the actual color model.
+ 	(getRaster): Implemented.
+ 	(ColorRaster): New inner class.
+ 	* java/awt/SystemColor.java (createContext): Use ColorModel when creating
+ 	a PaintContext.
+ 	* java/awt/Color.java (<init>): Make exception more verbose.
+ 	(createContext): Use ColorModel when creating a PaintContext.
+ 
+ 2004-04-27  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* include/Makefile.am: add java_lang_VMProcess.h
+ 	* include/java_lang_VMProcess.h: new file
+ 	* include/java_lang_VMRuntime.h: regenerate
+ 	* native/jni/java-lang/Makefile.am: add java_lang_VMProcess.c
+ 	* native/jni/java-lang/java_lang_VMProcess.c: new file
+ 	* vm/reference/java/lang/Makefile.am: add VMProcess.java
+ 	* vm/reference/java/lang/VMProcess.java: new file
+ 	* vm/reference/java/lang/VMRuntime.java (exec): use VMProcess
+ 
+ 2004-04-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/Doc.java
+ 	(getPrintData): Throws IOException.
+ 	(getReaderForText): Likewise.
+ 	(getStreamForBytes): Likewise.
+ 	* javax/print/DocFlavor.java:
+ 	Fixed filename in copyright.
+ 	(serialVersionUID): New field.
+ 	* javax/print/ServiceUIFactory.java:
+ 	Made all constants final.
+ 	* javax/print/AttributeException.java
+ 	javax/print/MultiDoc.java
+ 	javax/print/MultiDocPrintJob.java
+ 	javax/print/MultiDocPrintService.java
+ 	javax/print/StreamPrintService.java
+ 	javax/print/URIException.java: New files.
+ 	* javax/print/Makefile.am
+ 	(EXTRA_DIST): Added all new files.
+ 
+ 2004-04-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/Copies.java,
+ 	javax/print/attribute/standard/DateTimeAtCompleted.java,
+ 	javax/print/attribute/standard/DateTimeAtCreation.java,
+ 	javax/print/attribute/standard/DateTimeAtProcessing.java,
+ 	javax/print/attribute/standard/DocumentName.java,
+ 	javax/print/attribute/standard/JobHoldUntil.java,
+ 	javax/print/attribute/standard/JobImpressions.java,
+ 	javax/print/attribute/standard/JobImpressionsCompleted.java,
+ 	javax/print/attribute/standard/JobKOctets.java,
+ 	javax/print/attribute/standard/JobKOctetsProcessed.java,
+ 	javax/print/attribute/standard/JobMediaSheets.java,
+ 	javax/print/attribute/standard/JobMediaSheetsCompleted.java,
+ 	javax/print/attribute/standard/JobMessageFromOperator.java,
+ 	javax/print/attribute/standard/JobName.java,
+ 	javax/print/attribute/standard/JobOriginatingUserName.java,
+ 	javax/print/attribute/standard/JobPriority.java,
+ 	javax/print/attribute/standard/JobPrioritySupported.java,
+ 	javax/print/attribute/standard/NumberOfDocuments.java,
+ 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
+ 	javax/print/attribute/standard/NumberUp.java,
+ 	javax/print/attribute/standard/OutputDeviceAssigned.java,
+ 	javax/print/attribute/standard/PagesPerMinute.java,
+ 	javax/print/attribute/standard/PagesPerMinuteColor.java:
+ 	Fixed @return tag all over.
+ 
+ 2004-04-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/event/PrintEvent.java,
+ 	javax/print/event/PrintJobAdapter.java,
+ 	javax/print/event/PrintJobAttributeEvent.java,
+ 	javax/print/event/PrintJobAttributeListener.java,
+ 	javax/print/event/PrintJobEvent.java,
+ 	javax/print/event/PrintJobListener.java,
+ 	javax/print/event/PrintServiceAttributeEvent.java,
+ 	javax/print/event/PrintServiceAttributeListener.java,
+ 	javax/print/event/Makefile.am: New files.
+ 	* configure.ac: Generate javax/print/event/Makefile.
+ 	* javax/print/Makefile.am (SUBDIRS): Added event.
+ 
+ 2004-04-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/AttributeSetUtilities.java
+ 	(verifyCategoryForValue): Fixed typo in javadoc.
+ 	* javax/print/attribute/HashAttributeSet.java
+ 	(containsKey): Fixed @return tag.
+ 	(comtainsValue): Likewise.
+ 	(equals): Likewise.
+ 	* javax/print/attribute/IntegerSyntax.java
+ 	(equals): Likewise.
+ 	* javax/print/attribute/ResolutionSyntax.java
+ 	(equals): Likewise.
+ 	(getCrossFeedResolution): Removed unused code.
+ 	(getFeedResolution): Likewise.
+ 	* javax/print/attribute/SetOfIntegerSyntax.java
+ 	(SetOfIntegerSyntax): Fixed HTML entities in javadoc.
+ 	(equals): Fixed @return tag.
+ 	* javax/print/attribute/TextSyntax.java
+ 	(TextSyntax): Take locale into account.
+ 	(hashCode): Better implementation.
+ 
+ 2004-04-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/CancelablePrintJob.java,
+ 	javax/print/Doc.java,
+ 	javax/print/DocFlavor.java,
+ 	javax/print/DocPrintJob.java,
+ 	javax/print/FlavorException.java,
+ 	javax/print/PrintException.java,
+ 	javax/print/PrintService.java,
+ 	javax/print/ServiceUIFactory.java: New files.
+ 	* javax/print/Makefile.am (EXTRA_DIST): Added all new files.
+ 
+ 2004-04-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java: Moved all native methods to the new class
+ 	VMFile and removed the "Internal" suffix.
+ 	* vm/reference/java/io/VMFile.java: New file.
+ 	* vm/reference/java/io/Makefile.am (EXTRA_DIST): Added VMFile.java.
+ 	* include/java_io_File.h: Removed.
+ 	* include/java_io_VMFile.h: New file.
+ 	* include/Makefile.am: Generate java_io_VMFile.h.
+ 	* native/jni/java-io/java_io_File.c: Moved all methods to
+ 	java_io_VMFile.c and renamed them accordingly.
+ 	* native/jni/java-io/java_io_VMFile.c: New file.
+ 	* native/jni/java-io/Makefile.am: Removed java_io_File.c and added
+ 	java_io_VMFile.c to build.
+ 
+ 2004-04-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-net/javanet.c (_javanet_accept): Retry when we get
+ 	EINTR.
+ 
+ 2004-04-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/FileDialog.java: Import java.io.Serializable explicitetly.
+ 
+ 2004-04-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* vm/reference/java/lang/VMClass.java: Make final and package local.
+ 	Add private constructor.  Removed all instance fields and methods.
+ 
+ 2004-04-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/OutputStreamWriter.java (getEncoding): Return null when
+ 	out == null, otherwise call out.getSchemeName.
+ 	* gnu/java/io/decode/Decoder.java (scheme_name): Make non-static
+ 	private final.
+ 	(scheme_description): Removed.
+ 	(in): Make final.
+ 	(getSchemeName): Make non-static.
+ 	(getSchemeDescription): Removed.
+ 	(Decoder): Make protected and add name parameter.
+ 	gnu/java/io/decode/Decoder8859_1.java (lookup_table_8859_1): Make
+ 	private static final.
+ 	(static): Removed block.
+ 	(Decoder8859_1): Call super(in, name, table).
+ 	* gnu/java/io/decode/Decoder8859_2.java: Likewise.
+ 	* gnu/java/io/decode/Decoder8859_3.java: Likewise.
+ 	* gnu/java/io/decode/Decoder8859_4.java: Likewise.
+ 	* gnu/java/io/decode/Decoder8859_5.java: Likewise.
+ 	* gnu/java/io/decode/DecoderEightBitLookup.java (lookup_table): Make
+ 	private final.
+ 	(DecoderEightBitLookup): Make protected. Add name and table
+ 	parameters. Call super(in, name).
+ 	* gnu/java/io/decode/DecoderUTF8.java (static): Remove block.
+ 	(DecoderUTF8): Call super(in, name).
+ 	* gnu/java/io/encode/Encoder.java (scheme_description): Remove field.
+ 	(scheme_name): Make non-static private final.
+ 	(out): Make final.
+ 	(getSchemeName): Make non-static.
+ 	(getSchemeDescription): Removed.
+ 	(Encoder): Make protected and add parameter name to initialize
+ 	scheme_name.
+ 	* gnu/java/io/encode/Encoder8859_1.java (lookup_table_8859_1): Make
+ 	private and final.
+ 	(static): Remove block.
+ 	(Encoder8859_1): Call super(out, name, table).
+ 	gnu/java/io/encode/Encoder8859_2.java: Likewise.
+ 	gnu/java/io/encode/Encoder8859_3.java: Likewise.
+ 	gnu/java/io/encode/Encoder8859_4.java: Likewise.
+ 	gnu/java/io/encode/Encoder8859_5.java: Likewise.
+ 	* gnu/java/io/encode/EncoderEightBitLookup.java (lookup_table):
+ 	Removed field.
+ 	(encoding_table): Make non-static and final.
+ 	(loadTable): Make non-static private and return byte[] table.
+ 	(EncoderEightBitLookup): Add parameters name and table. Call
+ 	super(out, name) and initialize encoding_table with loadTable(table).
+ 	* gnu/java/io/encode/EncoderUTF8.java (static): Remove block.
+ 	(EncoderUTF8): Call super(out, name).
+ 
+ 2004-04-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac (AC_CHECK_HEADERS): Check for sys/filio.h.
+ 	* native/target/generic/target_generic_file.h
+ 	(TARGET_NATIVE_FILE_AVAILABLE): First include headers if they exist,
+ 	then check for FIONREAD.
+ 
+ 2004-04-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/lang/ClassLoaderHelper.java: Removed.
+ 
+ 2004-04-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/System.java (runFinalizersOnExit): Updated javadoc.
+ 	Cleaned up imports.
+ 
+ 2004-04-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLStreamHandler.java (toExternalForm): Removed
+ 	unused variables.
+ 	* java/net/URLConnection.java: Removed unused imports.
+ 	* java/net/URLClassLoader.java (URLClassLoader): Removed
+ 	unused constructor.
+ 	* java/math/BigDecimal.java (divide): Removed unused variable.
+ 	* java/lang/Throwable.java: Cleaned up imports.
+ 	* java/lang/String.java: Cleaned up imports.
+ 	* java/lang/ClassLoader.java: Cleaned up imports.
+ 	* java/io/FilePermission.java (implies): Removed unused
+ 	variable.
+ 	* java/awt/TextComponent.java: Removed unused import.
+ 	* gnu/java/util/prefs/NodeReader.java: Cleaned up imports.
+ 	* gnu/java/util/DoubleEnumeration.java: Removed unused import.
+ 	* gnu/java/text/WordBreakIterator.java: Removed unused import.
+ 	* gnu/java/text/SentenceBreakIterator.java: Removed unused
+ 	import.
+ 	* gnu/java/text/LineBreakIterator.java: Removed unused import.
+ 	* gnu/java/text/CharacterBreakIterator.java: Removed
+ 	unused import.
+ 	* gnu/java/security/provider/DSAKeyPairGenerator.java:
+ 	Cleaned up imports.
+ 	* gnu/java/security/der/DERWriter.java: Cleaned up imports.
+ 	* gnu/java/nio/charset/UTF_16Decoder.java (put): Removed
+ 	unused method.
+ 	* gnu/java/nio/SocketChannelImpl.java: Cleaned up imports.
+ 	* gnu/java/nio/FileLockImpl.java: Cleaned up imports.
+ 	* gnu/java/io/Base64InputStream.java: Cleaned up imports.
+ 	* gnu/java/beans/info/ComponentBeanInfo.java: Cleaned up imports.
+ 	* gnu/classpath/ServiceFactory.java: Cleaned up imports.
+ 	(lookupProviders): Removed unused variable.
+ 	(loadNextServiceProvider): Likewise.
+ 	* gnu/java/beans/BeanInfoEmbryo.java: Cleaned up imports.
+ 
+ 2004-04-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/text/Format.java: Cleaned up imports.
+ 	* java/text/DecimalFormat.java: Cleaned up imports.
+ 	* java/security/SecureRandom.java: Cleaned up imports.
+ 	(SecureRandom): Removed unused variable.
+ 	* java/security/UnresolvedPermission.java: Cleaned up imports.
+ 	* java/util/Date.java (parse): Removed unused variable.
+ 	* java/util/ResourceBundle.java: Cleaned up imports.
+ 	(getBundle): Removed unused variable.
+ 	(tryBundle): Likewise.
+ 	* java/util/regex/Pattern.java (Pattern): Removed unused constructor.
+ 	* java/util/zip/DeflaterHuffman.java (buildCodes): Removed unused
+ 	variable.
+ 
+ 2004-04-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/CompoundName.java (endsWith): Look at correct
+ 	element of source name.
+ 
+ 2004-04-23  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/security/interfaces/DSAKeyPairGenerator.java,
+ 	java/security/interfaces/DSAPrivateKey.java,
+ 	java/security/interfaces/DSAPublicKey.java,
+ 	java/security/interfaces/RSAPrivateKey.java,
+ 	java/security/interfaces/RSAPublicKey.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/security/der/DERReader.java: Call static methods staticly.
+ 	* java/awt/TextComponent.java (select): Use selectionEnd parameter.
+ 	* java/lang/System.java (runFinalizersOnExit): Call static
+ 	Runtime.runFinalizersOnExit staticly.
+ 	* java/net/URL.java
+ 	(set(String, String, int, String, String, String, String, String)):
+ 	Assign this.file to path or path + "?" + query.
+ 	* java/text/RuleBasedCollator.java: Call static methods staticly.A
+ 	* java/util/Arrays.java: Likewise.
+ 	* java/util/zip/ZipEntry.java: Likewise.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java (setDirection): Assign
+ 	dir to this.direction.
+ 	* javax/swing/table/DefaultTableCellRenderer.java (noFocusBorder):
+ 	Assign static field only once.
+ 	(DefaultTableCellRenderer): Don't reassign noFocusBorder each time.
+ 
+ 2004-04-23  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* ChangeLog: Fixed my last entry to follow
+ 	coding conventions.
+ 
+ 2004-04-23  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/text/AttributedString.java,
+ 	java/text/AttributedStringIterator.java,
+ 	java/text/CollationElementIterator.java,
+ 	java/text/Collator.java,
+ 	java/text/DecimalFormatSymbols.java,
+ 	java/text/NumberFormat.java,
+ 	java/text/RuleBasedCollator.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java,
+ 	java/net/URLConnection.java:
+ 	Fixed coding style.
+ 
+ 2004-04-23  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java: 
+ 	Imported GCJ implementation. The URL parsing is completely handled
+ 	by URLStreamHandler now.
+ 
+ 2004-04-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/charset/IllegalCharsetNameException.java
+ 	(charsetName): Made private.
+ 	(IllegalCharsetNameException): Added @param tag to javadoc.
+ 	(getCharsetName): Added @return tag to javadoc.
+ 	* java/nio/charset/MalformedInputException.java
+ 	(MalformedInputException): Added @param tag to javadoc.
+ 	(getInputLength): Revised method description, added @return tag.
+ 	(getMessage): Added @return tag.
+ 
+ 2004-04-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java
+ 	(SET, CUR): Unused, removed.
+ 
+ 2004-04-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/unicode-muncher.pl: Fixed typo.
+ 
+ 2004-04-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/spi/AbstractInterruptibleChannel.java
+ 	(end): Throw AsynchronousCloseException if stream is close.
+ 
+ 2004-04-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
+ 	(create(long)): Take long parameter, not int.  Cast gtk_plug_new
+ 	argument to GdkNativeWindow.
+ 	(construct): New method.
+ 
+ 2004-04-22  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Class.java: Changed all calls to VMClass to static calls.
+ 	(vmClass) Removed. (vmdata) Added. (Class) Changed argument type
+ 	from VMClass to Object.
+ 	* vm/reference/java/lang/VMClass.java: Changed all instance methods
+ 	to static methods.
+ 	* NEWS: Added entry to describe Class/VMClass interface change.
+ 
+ 2004-04-22 Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/sql/DriverManager.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-22 Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/util/jar/JarFile.java,
+ 	java/util/jar/JarInputStream.java,
+ 	java/util/jar/JarOutputStream.java,
+ 	java/util/jar/Manifest.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-22 Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/util/ArrayList.java,
+ 	java/util/Calendar.java,
+ 	java/util/Currency.java,
+ 	java/util/HashMap.java,
+ 	java/util/HashSet.java,
+ 	java/util/Hashtable.java,
+ 	java/util/LinkedList.java,
+ 	java/util/Properties.java,
+ 	java/util/PropertyPermission.java,
+ 	java/util/TimeZone.java,
+ 	java/util/TreeMap.java,
+ 	java/util/TreeSet.java,
+ 	java/util/Vector.java,
+ 	java/util/WeakHashMap.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-22  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/util/logging/FileHandler.java,
+ 	java/util/logging/Formatter.java,
+ 	java/util/logging/Handler.java,
+ 	java/util/logging/Logger.java,
+ 	java/util/logging/SimpleFormatter.java,
+ 	java/util/logging/XMLFormatter.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-22  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-io/java_io_VMObjectStreamClass.c
+ 	(getFieldReference): Allocate type_len + 1 bytes for type.
+ 
+ 2004-04-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(shiftDown): Overwrite shiftDown method from ByteBuffer.
+ 	* java/nio/MappedByteBufferImpl.java
+ 	(compact): Use optimized shiftDown() method.
+ 
+ 2004-04-22  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* java/awt/Font.java (deriveFont): Implement missing variants.
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java (deriveFont): Implement
+ 	missing variants.
+ 
+ 2004-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/imageio/IIOException.java,
+ 	javax/imageio/event/IIOReadProgressListener.java,
+ 	javax/imageio/event/IIOReadUpdateListener.java,
+ 	javax/imageio/event/IIOReadWarningListener.java,
+ 	javax/imageio/event/IIOWriteProgressListener.java,
+ 	javax/imageio/event/IIOWriteWarningListener.java: New files.
+ 	* configure.ac: Added all Makefiles under javax.imageio to
+ 	AC_OUTPUT_FILES.
+ 	* javax/Makefile.am
+ 	(SUBDIRS): Added imageio.
+ 	* javax/imageio/Makefile.am
+ 	(SUBDIRS): Added event.
+ 	(EXTRA_DIST): Added IIOException.java.
+ 	* javax/imageio/event/Makefile.am: New file.
+ 	* javax/imageio/event/.cvsignore,
+ 	javax/imageio/spi/.cvsignore,
+ 	javax/imageio/stream/.cvsignore: New files to ignore generated files.
+ 
+ 2004-04-21  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/util/prefs/Preferences.java,
+ 	java/util/prefs/InvalidPreferencesFormatException.java,
+ 	java/util/prefs/BackingStoreException.java,
+ 	java/util/prefs/AbstractPreferences.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-21  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/util/regex/Matcher.java,
+ 	java/util/regex/Pattern.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/java-net/javanet.h
+ 	(BIND_EXCEPTION): New define.
+ 	* native/jni/java-net/javanet.c
+ 	(_javanet_bind): Throw correct exception on failed bind().
+ 
+ 2004-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(register): Check ops for validity.
+ 
+ 2004-04-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(impl): Made package-private.
+ 	* java/net/ServerSocket.java
+ 	(implAccept): Access Socket.impl field directly.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/AttributedCharacterIterator.java
+ 	(Attribute): Made public.
+ 	* javax/naming/spi/DirStateFactory.java
+ 	(Result): Made public static.
+ 
+ 2004-04-20  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* java/text/AttributedString.java 
+ 	(addAttribute): Fix off-by-one.
+ 	(getIterator): Likewise.	
+ 	* java/text/AttributedStringIterator.java 
+ 	(getRunLimit): Correct logic.
+ 	(getRunStart): Likewise.
+ 	(getAttribute): Fix inequality.
+ 	(getAttributes): Likewise.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/SecurityManager.java
+ 	(checkAWTEventQueueAccess): Implemented.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AccessController.java:
+ 	Merged coypright year from libgcj.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/DateFormatSymbols.java:
+ 	Fixed file name in copyright.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/StringWriter.java
+ 	(close): Fixed typo in javadoc.
+ 
+ 2004-04-20  Jeroen Frijters <jeroen@sumatra.nl>
+ 
+ 	* java/io/File.java
+ 	(toURL): Correct the file path before constructing the URL.
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(parseURL): Convert the file path to using '/' instead of native
+ 	file separator.
+ 
+ 2004-04-20  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/net/URL.java
+ 	(userInfo): New field.
+ 	(URL): Set authority to the right value.
+ 	(getContent, openStream): Made final as in the Java spec.
+ 	(setURL): Fixed authority and file initialization.
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(parseURL): Take care of the query tag. Build authority.
+ 	(toExternalForm): Fixed URL building using authority.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FilterInputStream.java
+ 	(markSupported): Removed unneeded whitespace.
+ 	(available): Likewise.
+ 
+ 2004-04-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* autogen.sh: Added "-I ." to aclocal call.
+ 
+ 2004-04-19  Patrik Reali  <reali@acm.org>
+ 	* doc/www.gnu.org/faq/faq.wml: new entry "How do you keep your
+ 	sources synchronized"
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/accessibility/AccessibleText.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/naming/AuthenticationException.java,
+ 	javax/naming/AuthenticationNotSupportedException.java,
+ 	javax/naming/CannotProceedException.java,
+ 	javax/naming/CommunicationException.java,
+ 	javax/naming/CompoundName.java,
+ 	javax/naming/ConfigurationException.java,
+ 	javax/naming/ContextNotEmptyException.java,
+ 	javax/naming/InitialContext.java,
+ 	javax/naming/InsufficientResourcesException.java,
+ 	javax/naming/InterruptedNamingException.java,
+ 	javax/naming/LimitExceededException.java,
+ 	javax/naming/LinkException.java,
+ 	javax/naming/LinkLoopException.java,
+ 	javax/naming/LinkRef.java,
+ 	javax/naming/MalformedLinkException.java,
+ 	javax/naming/Name.java,
+ 	javax/naming/NameAlreadyBoundException.java,
+ 	javax/naming/NameNotFoundException.java,
+ 	javax/naming/NamingSecurityException.java,
+ 	javax/naming/NoInitialContextException.java,
+ 	javax/naming/NoPermissionException.java,
+ 	javax/naming/NotContextException.java,
+ 	javax/naming/PartialResultException.java,
+ 	javax/naming/ReferralException.java,
+ 	javax/naming/ServiceUnavailableException.java,
+ 	javax/naming/SizeLimitExceededException.java,
+ 	javax/naming/TimeLimitExceededException.java,
+ 	javax/naming/directory/Attribute.java,
+ 	javax/naming/directory/Attributes.java,
+ 	javax/naming/directory/SearchResult.java,
+ 	javax/naming/event/NamingExceptionEvent.java,
+ 	javax/naming/spi/ResolveResult.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/swing/JSlider.java:
+ 	Fixed HTML tags in comments.
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/rmi/CORBA/PortableRemoteObjectDelegate.java,
+ 	javax/rmi/CORBA/Stub.java,
+ 	javax/rmi/CORBA/Util.java,
+ 	javax/rmi/CORBA/ValueHandler.java,
+ 	javax/rmi/CORBA/ValueHandler.java,
+ 	javax/rmi/PortableRemoteObject.java,
+ 	javax/security/auth/x500/X500Principal.java:
+ 	Added 2004 to copyright notices.
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/rmi/CORBA/PortableRemoteObjectDelegate.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/rmi/CORBA/Stub.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/rmi/CORBA/Util.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/rmi/CORBA/ValueHandler.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/rmi/PortableRemoteObject.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-19  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* javax/security/auth/x500/X500Principal.java:
+ 	Cleaned up imports.
+ 
+ 2004-04-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/Makefile.am: Remove java_nio_FileLockImpl.h generation.
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h: Regenerate.
+ 	* include/gnu_java_awt_peer_gtk_GtkPanelPeer.h: Regenerate.
+ 	* include/gnu_java_nio_FileLockImpl.h: Removed.
+ 	* native/jni/java-nio/Makefile.am (libjavanio_la_SOURCES): Removed
+ 	java_nio_FileLockImpl.c.
+ 	* native/jni/java-nio/java_nio_FileLockImpl.c: Removed.
+ 
+ 2004-04-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/File.java (canWrite): Only do checkWrite() security
+ 	check, use internal methods for actual actions.
+ 	(createTempFile): Don't do security checks for temp files that
+ 	won't be created.
+ 	(setReadOnly): Do checkWrite() security check before trying to
+ 	do anything else.
+ 	(renameTo): Add checkWrite() security check for destination file.
+ 
+ 2004-04-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JLayeredPane.java
+ 	* javax/swing/plaf/BorderUIResource.java
+ 	* javax/swing/plaf/ComponentUI.java
+ 	* javax/swing/undo/CompoundEdit.java
+ 	* javax/swing/undo/StateEdit.java
+ 
+ 2004-04-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/EnumSyntax.java
+ 	(getOffset): Has to be protected.
+ 	* javax/print/attribute/HashAttributeSet.java
+ 	(HashAttributeSet): Likewise.
+ 	* javax/print/attribute/ResolutionSyntax.java
+ 	(getFeedResolution): Fixed typo in exception name in javadoc.
+ 	(getCrossFeedResolution): Likewise.
+ 	* javax/print/attribute/TextSyntax.java
+ 	(equals): Fixed typo in @return tag.
+ 	(toString): New method.
+ 
+ 2004-04-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/Naming.java,
+ 	java/rmi/RemoteException.java,
+ 	java/rmi/activation/ActivationException.java,
+ 	java/rmi/server/ServerCloneException.java,
+ 	javax/naming/NamingException.java:
+ 	Fixed HTML tags in javadocs.
+ 
+ 2004-04-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/sql/Array.java,
+ 	java/sql/DatabaseMetaData.java,
+ 	java/sql/ResultSet.java:
+ 	Fixed HTML tags in javadocs.
+ 
+ 2004-04-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/basic/Makefile.am: Add BasicArrowButton.java,
+ 	BasicCheckBoxMenuItemUI.java, BasicMenuItemUI.java and
+ 	BasicRadioButtonMenuItemUI.java.
+ 
+ 	* javax/swing/JToggleButton.java (ToggleButtonModel):
+ 	Make public static inner class.
+ 	* javax/swing/JTabbedPane.java (setComponentAt):
+ 	Call Page.setComponent().
+ 	(SCROLL_TAB_LAYOUT): Make public, value is 1.
+ 	(WRAP_TAB_LAYOUT): Make public, value is 0.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java (ScrollingButton):
+ 	Make private static inner class.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Changed C++ comments into C comments.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c:
+ 	Likewise.
+ 
+ 2004-04-17  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java (connectSignals):
+ 	Remove method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c: Remove
+ 	unused code.
+ 
+ 2004-04-17  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/ImageIcon.java: 
+ 	(ImageIcon(file)): set description of the icon 
+ 	to the file name
+ 	* javax/swing/JCheckBoxMenuItem.java:
+ 	Mostly Implemented. Work in progress.
+ 	* javax/swing/JRadioButtonMenuItem.java:
+ 	Reimplement constructors to use JToggleButtonModel.
+ 	* javax/swing/plaf/basic/BasicIconFactory.java:
+ 	(getCheckBoxMenuItemIcon): return check box
+ 	icon.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	paint menu item selected only when it is armed and 
+ 	pressed. 
+ 
+ 2004-04-17  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
+ 	(GtkMenuItemPeer): Only connect signals if this isn't a Menu peer.
+ 	* java/awt/Component.java
+ 	(add): Set the parent of the popup as this component.
+ 	* java/awt/PopupMenu.java
+ 	(addNotify): Create popup menu when peer is null.
+ 	(show): Call addNotify() if peer is null.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_show): Set the button
+ 	argument for gtk_menu_popup() as zero. This causes the popup menu to
+ 	respond to any mouse button.
+ 
+ 2004-04-17  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JRadioButtonMenuItem.java:
+ 	Implemented.
+ 	* javax/swing/plaf/basic/BasicIconFactory.java:
+ 	(getRadioButtonMenuItemIcon): Return
+ 	radio button icon.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	(getPreferredSize): Add size of checkIcon if it
+ 	exists.
+ 	(installDefaults): Don't initialize checkIcon.
+ 	It's value will be set in subclasses. 
+ 	(uninstallDefaults): remove uninstallation of 
+ 	checkIcon.
+ 	(paint): Moved code to paintMenuItem().
+ 	(paintMenuItem): Implemented.
+ 	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java:
+ 	UI delegate for JRadioButtonMenuItem.
+ 	
+ 2004-04-17  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	Corrected position of the accelerator.
+ 
+ 2004-04-17  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* javax/swing/JMenuItem.java: Partly 
+ 	implemented. Work in progress
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Changed default value of acceleratorDelimiter.
+ 	* javax/swing/plaf/basic/BasicMenuItemUI.java:
+ 	New class. Partly implemented.
+ 		
+ 2004-04-17  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuPeer.java
+ 	(addSeparator): Remove.
+ 	* java/awt/Menu.java
+ 	(separator): Remove static final MenuItem field.
+ 	(separatorLabel): New static final String field.
+ 	(addSeparator): Do not use peer method; use add(MenuItem) instead.
+ 	Use separatorLabel to denote that it is a separator.
+ 	(insertSeparator): Create a new MenuItem with separatorLabel, instead
+ 	of reusing the static separator instance, because a MenuItem instance
+ 	can't be added more than once without being cloned.
+ 	* java/awt/peer/MenuPeer.java
+ 	(addSeparator): Remove from interface.
+ 
+ 2004-04-17  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
+ 	(connectSignals): New native method declaration.
+ 	(GtkMenuItemPeer): Connect signals if the parent is a Menu.
+ 	* java/awt/MenuItem.java
+ 	(getActionCommand): Return the label if the action command is not set.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu): Use
+ 	gtk_menu_shell_append().
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(item_activate): Fix argument type.
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create): Do not connect
+ 	signal here.
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_connectSignals): New
+ 	method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create): Check if a label is
+ 	given. Add the menu widget's top-level GtkWindow to the global window
+ 	group, so it can grab the pointer.
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem): Use
+ 	gtk_menu_shell_append().
+ 
+ 2004-04-17  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	(calculateSizes): Return real width and height.
+ 
+ 2004-04-17  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ 	(calculateTabRects): Set the selectedRun before
+ 	trying to rotate tabs.
+ 
+ 2004-04-17  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/DefaultSingleSelectionModel.java
+ 	(isSelected): Return true if the selected index
+ 	is not -1.
+ 	* javax/swing/JLabel.java: Do not change mnemonic
+ 	index if text is null.
+ 	* javax/swing/JProgressBar.java: Use JComponent's
+ 	EventListenerList.
+ 	* javax/swing/JScrollBar.java: Ditto.
+ 	* javax/swing/JSlider.java: Ditto.
+ 	* javax/swing/JTabbedPane.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Add defaults for TabbedPane.
+ 	* javax/swing/plaf/basic/BasicArrowButton.java:
+ 	Implement
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java:
+ 	(paintDeterminate): Don't paint String if it's
+ 	empty.
+ 	(paintIndeterminate): ditto.
+ 	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ 	Reimplement.
+ 
+ 2004-04-17  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JComponent.java: Turn off double buffer by default.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java: Clear rects before
+ 	painting.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable): 
+ 	Use cairo to copy areas.
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClip):
+ 	Initialize and set clip region.
+ 
+ 2004-04-17  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/applet/Applet.java (preferredSize): Override deprecated
+ 	variant of getPreferredSize.
+ 	(minimumSize): Override deprecated variant of getMinimumSize.
+ 
+ 2004-04-17  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(drawImage(img,xform,bgcolor,obs)): New Method.
+ 	Helper function that every drawImage method will
+ 	use.
+ 	(drawRaster): Added new parameter, bgcolor. All
+ 	transparent pixels are changed to bgcolor before 
+ 	image is drawn.
+ 	(drawRenderedImage): Fixed to use changed drawRaster().
+ 	(drawImage(image,xform,obs): Fixed to use new helper function 
+ 	(drawImage(image,op,x,y)): Ditto.
+ 	(drawImage (img,x,y,observer)): Ditto.
+ 	((PainterThread) bgcolor): New Field.
+ 	((PainterThread) (setPixels)): Changed all transparent pixels 
+ 	to bgcolor.	
+ 	(drawImage(img,x,y,width,height,bgcolor,observer)): 
+ 	Fixed FIXME - all the transparent pixels are 
+ 	changed to the specified bgcolor. 
+ 	(drawImage(img, x, y, width, height, observer): Changed to 
+ 	use function above.
+ 	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,bgcolor,observer)): 
+ 	Fixed FIXME- changed all transparent pixels to bgcolor.
+ 	(drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer)):
+ 	Changed to use function above. 
+ 
+ 2004-04-17  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/applet/Applet.java (dimensions): New field.
+ 	(getDimensions): New method.
+ 	(getPreferredSize): Call getDimensions.
+ 	(getMinimumSize): Likewise.
+ 
+ 2004-04-17  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/applet/Applet.java (getPreferredSize): New method.
+ 	(getMinimumSize): New method.
+ 
+ 2004-04-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Collections.java,
+ 	java/util/PropertyResourceBundle.java,
+ 	java/util/ResourceBundle.java,
+ 	java/util/StringTokenizer.java,
+ 	java/util/jar/Attributes.java,
+ 	java/util/logging/ConsoleHandler.java,
+ 	java/util/logging/LogManager.java,
+ 	java/util/logging/MemoryHandler.java,
+ 	java/util/logging/SocketHandler.java:
+ 	Fixed HTML tags in javadocs all over.
+ 
+ 2004-04-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AlgorithmParameterGenerator.java,
+ 	java/security/AlgorithmParameters.java,
+ 	java/security/CodeSource.java,
+ 	java/security/Identity.java,
+ 	java/security/IdentityScope.java,
+ 	java/security/KeyPairGenerator.java,
+ 	java/security/KeyStore.java,
+ 	java/security/Signature.java,
+ 	java/security/SignatureSpi.java,
+ 	java/security/SignedObject.java:
+ 	Fixed HTML tags in javadoc comments all over.
+ 
+ 2004-04-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java,
+ 	java/net/NetPermission.java,
+ 	java/net/SocketPermission.java,
+ 	java/net/URLConnection.java:
+ 	Fixed HTML tags in javadocs all over.
+ 
+ 2004-04-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/ChoiceFormat.java,
+ 	java/text/CollationElementIterator.java,
+ 	java/text/CollationKey.java,
+ 	java/text/Collator.java,
+ 	java/text/DateFormat.java,
+ 	java/text/DateFormatSymbols.java,
+ 	java/text/DecimalFormatSymbols.java,
+ 	java/text/Format.java,
+ 	java/text/ParsePosition.java,
+ 	java/text/RuleBasedCollator.java,
+ 	java/text/SimpleDateFormat.java,
+ 	java/text/StringCharacterIterator.java:
+ 	Fixed HTML tags in javadocs all over
+ 
+ 2004-04-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataInput.java,
+ 	java/io/File.java,
+ 	java/io/InputStream.java,
+ 	java/io/InputStreamReader.java,
+ 	java/io/PushbackInputStream.java,
+ 	java/io/RandomAccessFile.java:
+ 	Fixed javadocs all over.
+ 
+ 2004-04-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Byte.java
+ 	(parseByte): Fixed <code> tag in javadoc.
+ 	* java/lang/CharSequence.java
+ 	(subSequence): Likewise.
+ 	* java/lang/Class.java
+ 	(forName): Added @return tag.
+ 	(getConstructor): Fixed argument name.
+ 	(getDeclaredConstructor): Likewise.
+ 	(getDeclaredMethod): Fixed argument name and HTML tag in javadoc.
+ 	(getMethod): Likewise.
+ 	(getName): Added missing </pre> tag.
+ 	* java/lang/ClassLoader.java
+ 	(getParent): Added @return tag.
+ 	* java/lang/Double.java
+ 	(parseDouble): Fixed argument name.
+ 	* java/lang/Float.java
+ 	(parseFloat): Likewise.
+ 	* java/lang/Integer.java
+ 	(parseInt): Fixed javadoc.
+ 	(getInteger): Likewise.
+ 	(decode): Likewise.
+ 	* java/lang/Long.java
+ 	(parseLong): Likewise.
+ 	(decode): Likewise.
+ 	(getLong): Likewise.
+ 	* java/lang/Number.java
+ 	(digits): Added comma to array definition.
+ 	* java/lang/Object.java
+ 	(equals): Fixed HTML tag.
+ 	* java/lang/Package.java
+ 	(isCompatibleWith): Added @return tag.
+ 	* java/lang/Runtime.java
+ 	(loadLibrary): Fixed @param tag.
+ 	* java/lang/SecurityManager.java:
+ 	Fixed javadocs all over.
+ 	* java/lang/String.java
+ 	(regionMatches): Fixed @param tag.
+ 	(startsWith): Likewise.
+ 	(substring): Likewise.
+ 	* java/lang/StringBuffer.java
+ 	(append): Likewise.
+ 	* java/lang/ThreadGroup.java
+ 	(parentOf): Use group as argument name.
+ 	(uncaughtException): Fixed @param tag.
+ 	* java/lang/Throwable.java
+ 	(printStackTrace): Likewise.
+ 
+ 2004-04-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/AWTPermission.java,
+ 	java/awt/Component.java,
+ 	java/awt/ComponentOrientation.java,
+ 	java/awt/Dialog.java,
+ 	java/awt/FontMetrics.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/beans/Introspector.java,
+ 	java/beans/PropertyEditor.java,
+ 	java/beans/PropertyEditorManager.java,
+ 	java/beans/beancontext/BeanContextServiceProvider.java:
+ 	Fixed HTML tags in javadocs.
+ 
+ 2004-04-16  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	Reported by Nektarios Papadopoulos <npapadop@inaccessnetworks.com>
+ 	* java/io/FileOutputStream.java
+ 	(FileOutputStream) Reorganized constructors. Constructors now
+ 	check whether the given path is directory.
+ 
+ 2004-04-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/awt/JFrame.java: Implement WindowConstants. Remove final
+ 	static fields defined in interface.
+ 	* javax/awt/JDialog.java: Likewise.
+ 	(JDialog): Make constructors public.
+ 	(getDefaultCloseOperation): Make public.
+ 	(processWindowEvent): Call System.exit(0) when EXIT_ON_CLOSE set.
+ 	(setDefaultCloseOperation): Make public. Check argument. Add API doc.
+ 
+ 2004-04-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/awt/JFrame.java (close_action): Default to HIDE_ON_CLOSE.
+ 	(getDefaultCloseOperation): Make public.
+ 	(processWindowEvent): Call System.exit(0) when EXIT_ON_CLOSE set.
+ 	(setDefaultCloseOperation): Make public. Check argument. Add API doc.
+ 
+ 2004-04-15  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/imageio/package.html, javax/imageio/spi/package.html,
+ 	javax/imageio/stream/package.html: Added boilerplate docs.
+ 
+ 	* javax/imageio/Makefile.am, javax/imageio/spi/Makefile.am,
+ 	javax/imageio/stream/Makefile.am: New files.
+ 
+ 	* gnu/classpath/Makefile.am (EXTRA_DIST): Include
+ 	ServiceFactory.java and ServiceProviderLoadingAction.java.
+ 
+ 2004-04-15  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/image/ComponentColorModel.java
+ 	(createCompatibleSampleModel): Return PixelInterleavedSampleModel
+ 	for TYPE_BYTE and TYPE_USHORT transferTypes, in order to pass the
+ 	Mauve tests on this method. Improved documentation.
+ 
+ 2004-04-14  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/image/DataBufferShort.java,
+ 	java/awt/image/DataBufferFloat.java,
+ 	java/awt/image/DataBufferDouble.java: New files.
+ 
+ 	* java/awt/image/Makefile.am (EXTRA_DIST): Added
+ 	DataBufferShort.java, DataBufferFloat.java, and
+ 	DataBufferDouble.java.
+ 
+ 	* gnu/java/awt/Buffers.java (createBuffer, createBufferFromData,
+ 	getData): Added support	for TYPE_SHORT, TYPE_FLOAT and TYPE_DOUBLE.
+ 
+ 2004-04-14  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/image/Makefile.am (EXTRA_DIST):
+ 	Added PixelInterleavedSampleModel.java
+ 
+ 2004-04-14  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/imageio/spi/ImageReaderWriterSpi.java (getFormatNames):
+ 	Return cloned names, for compatibility with JDK.
+ 
+ 2004-04-14  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/image/PixelInterleavedSampleModel.java: New class.
+ 
+ 2004-04-13  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: SableVM, Jikes RVM, JC releases
+ 
+ 2004-04-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-io/java_io_VMObjectStreamClass.c
+ 	getFieldReference(): Array types are different from reference
+ 	types.
+ 
+ 2004-04-13  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/imageio/spi/IIOServiceProvider.java,
+ 	javax/imageio/spi/ImageInputStreamSpi.java,
+ 	javax/imageio/spi/ImageOutputStreamSpi.java,
+ 	javax/imageio/spi/ImageReaderWriterSpi.java,
+ 	javax/imageio/spi/ImageTranscoderSpi.java: Implemented.
+ 
+ 	* javax/imageio/stream: New directory.
+ 
+ 	* javax/imageio/stream/IIOByteBuffer.java,
+ 	javax/imageio/stream/ImageInputStream.java: Implemented,
+ 	but not documented.
+ 	
+ 	* javax/imageio/ImageReader.java,
+ 	javax/imageio/ImageWriter.java,
+ 	javax/imageio/ImageTranscoder.java,
+ 	javax/imageio/stream/ImageOutputStream.java:
+ 	Added empty class/interface in order to allow compilation of
+ 	javax.imageio.spi.
+ 
+ 2004-04-13  Jeroen Frijters <jeroen@frijters.net>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java:
+ 	(FileChannelImpl(int,int)) Made package private instead of private.
+ 
+ 2004-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/CharArrayWriter.java,
+ 	java/io/PipedInputStream.java,
+ 	java/io/PipedReader.java,
+ 	java/io/SerializablePermission.java,
+ 	java/io/StreamTokenizer.java,
+ 	java/io/WriteAbortedException.java:
+ 	Fixed HTML in javadocs.
+ 
+ 2004-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/java-io/FileDescriptor.c: Removed.
+ 	* native/jni/java-io/Makefile.am: Don't compile FileDescriptor.c
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c:
+ 	Dont include java_io_FileDescriptor.h.
+ 	* native/jni/java-nio/java_nio_DirectByteBufferImpl.c
+ 	(shiftDown): Method signature fixed.
+ 
+ 2004-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/ClassLoader.java,
+ 	java/lang/Compiler.java,
+ 	java/lang/Double.java,
+ 	java/lang/Float.java,
+ 	java/lang/Long.java,
+ 	java/lang/Math.java,
+ 	java/lang/Runtime.java,
+ 	java/lang/RuntimePermission.java,
+ 	java/lang/Short.java,
+ 	java/lang/System.java,
+ 	java/lang/reflect/InvocationHandler.java,
+ 	java/lang/reflect/Proxy.java:
+ 	Fixed HTML in javadocs.
+ 
+ 2004-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(shiftDown): Made static and give address of memory block as argument.
+ 	* native/jni/java-nio/java_nio_DirectByteBufferImpl.c:
+ 	Replaced "class" with "clazz".
+ 	(shiftDown): Changed to new method signature.
+ 	* include/java_nio_DirectByteBufferImpl.h: Regenerated.
+ 
+ 2004-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/java_io_FileDescriptor.h: Removed.
+ 	* include/Makefile.am: Dont regenerate java_io_FileDescriptor.h.
+ 
+ 2004-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/DeflaterOutputStream.java
+ 	(write): Removed debug code.
+ 	* java/util/zip/GZIPInputStream.java: Jalopied.
+ 	* java/util/zip/GZIPOutputStream.java: Jalopied
+ 	(write): Update CRC sum after actually writing data.
+ 	* java/util/zip/InflaterInputStream.java: Jalopied.
+ 	(InflaterInputStream): Check arguments before setting fields.
+ 	(markSupported): Removed.
+ 
+ 2004-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java,
+ 	java/net/SocketPermission.java:
+ 	Jalopied.
+ 
+ 2004-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Initialize CLASSPATH_MODULE.
+ 	* native/fdlibm/Makefile.am,
+ 	native/jni/classpath/Makefile.am,
+ 	native/jni/gtk-peer/Makefile.am,
+ 	native/jni/java-awt/Makefile.am,
+ 	native/jni/java-io/Makefile.am,
+ 	native/jni/java-lang/Makefile.am,
+ 	native/jni/java-net/Makefile.am,
+ 	native/jni/java-nio/Makefile.am,
+ 	native/jni/java-util/Makefile.am:
+ 	Use new @CLASSPATH_MODULE@.
+ 
+ 2004-04-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Call only CLASSPATH_WITH_GLIBJ to get what to install.
+ 	* acinclude.m4
+ 	(CLASSPATH_WITH_GLIBJ): New function to specify what to install.
+ 	(CLASSPATH_ENABLE_GLIBJ): Removed.
+ 	(CLASSPATH_ENABLE_CLASS_INSTALL): Removed.
+ 	* lib/Makefile.am: Handle INSTALL_GLIBJ_ZIP and INSTALL_CLASS_FILES.
+ 
+ 2004-04-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac (CFLAGS): Remove definition.
+ 	(AM_CFLAGS): Remove -std=c89 option.
+ 
+ 2004-04-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-io/java_io_VMObjectStreamClass.c
+ 	(throwInternalError): Just return when everything fails.
+ 	(getFieldReference): Get field declaring class, not object class.
+ 	Calculate field type descriptor if not yet given.
+ 
+ 2004-04-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(Java_gnu_java_nio_channels_FileChannelImpl_size): Implemented.
+ 
+ 2004-04-11  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java:
+ 	(FileChannelImpl(int,int)) Restored previously removed constructor
+ 	and made it private.
+ 
+ 2004-04-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* .cvsignore: Ignore ltmain.sh.
+ 	* gnu/java/nio/channels/.cvsignore,
+ 	gnu/regexp/.cvsignore: New files.
+ 
+ 2004-04-10  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/FieldPosition.java
+ 	(FieldPosition) Constructor now behaves as it should according
+ 	to the java documentation.
+ 
+ 2004-04-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/fdlibm/Makefile.am (libfdlibm_la_SOURCES): Add java-assert.h.
+ 
+ 2004-04-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac (AM_CFLAGS): Don't define _POSIX_SOURCE.
+ 
+ 	* native/jni/gtk-peer/gthread-jni.c (maybe_rethrow): Explicitly
+ 	malloc and free buf.
+ 
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
+ 	(GET_NATIVE_FD): Remove macro.
+ 	(get_native_fd): Replace GET_NATIVE_FD macro.
+ 
+ 	* native/target/generic/target_generic_misc.h
+ 	(TARGET_NATIVE_MISC_FORMAT_STRING): Remove unused macro.
+ 
+ 2004-04-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* autogen.sh: Check for explicit versions of the autotools installed
+ 	in /usr/bin.
+ 
+ 2004-03-25  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* INSTALL: Document GNU make requirement for building.
+ 
+ 2004-04-09  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/lang/SecurityManager.java: (checkAccess): Use getThreadGroup().
+ 	Improved documentation.
+ 
+ 2004-04-09  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URLConnection.java: (setContentHandlerFactory): Fixed
+ 	to check static field instead of argument.
+ 
+ 2004-04-09  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/nio/channels/FileChannelImpl.java: (fd, mode) Made private.
+ 	(length, pos) Removed. (FileChannelImpl (int, int)) Removed.
+ 	(implPosition, seek, implTruncate, unlock, lock) Added throws clause.
+ 
+ 2004-04-09  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/FileDescriptor.java: (FileDescriptor) Added public
+ 	constructor. (valid) Added null check.
+ 
+ 2004-04-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set AM_CFLAGS to ISO C90 pedantic ansi, but with
+ 	longlong (jlong) support and modern POSIX and BSD C library
+ 	funtions/prototypes.
+ 	* native/fdlibm/Makefile.am: Cancel out project wide AM_CFLAGS.
+ 	* native/fdlibm/mprec.h: Remove C++ comments.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Turn C++
+ 	comments into C comments.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
+ 	Likewise.
+ 	* native/jni/java-io/FileDescriptor.c: Likewise.
+ 	* native/jni/java-io/java_io_File.c: Likewise.
+ 	* native/jni/java-io/javaio.c: Remove unused fprintf calls.
+ 	* native/jni/java-net/javanet.c: Turn C++ comments into C comments.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c:
+ 	Likewise.
+ 	* native/target/generic/target_generic_file.h: Likewise.
+ 	* native/target/generic/target_generic_network.h: Likewise.
+ 
+ 2004-04-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* config.guess: Removed automatically generated file.
+ 	* config.sub: Likewise.
+ 	* .cvsignore: Ignore config.guess and config.sub.
+ 
+ 2004-04-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_nio_PipeImpl.h,
+ 	include/gnu_java_nio_SelectorImpl.h,
+ 	native/jni/java-nio/gnu_java_nio_PipeImpl.c,
+ 	native/jni/java-nio/gnu_java_nio_SelectorImpl.c:
+ 	New files.
+ 	* native/jni/java-nio/Makefile.am:
+ 	Build gnu_java_nio_PipeImpl.c and gnu_java_nio_SelectorImpl.c.
+ 	* include/Makefile.am:
+ 	Generate gnu_java_nio_PipeImpl.h and gnu_java_nio_SelectorImpl.h.
+ 
+ 2004-04-08  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(accel_attach): Comment out _gtk_accel_group_attach call.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
+ 	(setupAccelGroup): Likewise.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/AccessController.java:
+ 	Fixed all @return tags.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DirectByteBufferImpl.java,
+ 	java/nio/MappedByteBuffer.java,
+ 	java/nio/MappedByteBufferImpl.java:
+ 	Forgot to commit this during the big NIO commit.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedWriter.java,
+ 	java/io/FilterInputStream.java,
+ 	java/io/ObjectInputStream.java:
+ 	More javadoc and coding style work.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ ,
+ 	* java/nio/channels/DatagramChannel.java,
+ 	java/nio/channels/FileChannel.java,
+ 	java/nio/channels/FileLock.java,
+ 	java/nio/channels/Pipe.java,
+ 	java/nio/channels/ServerSocketChannel.java,
+ 	java/nio/channels/SocketChannel.java,
+ 	java/nio/channels/spi/AbstractInterruptibleChannel.java,
+ 	java/nio/channels/spi/AbstractSelectableChannel.java,
+ 	java/nio/channels/spi/AbstractSelectionKey.java,
+ 	java/nio/channels/spi/AbstractSelector.java,
+ 	java/nio/channels/spi/SelectorProvider.java:
+ 	Reworked coding style and javadocs.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* resource/gnu/regexp/.cvsignore: New file.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java,
+ 	java/nio/ByteBufferImpl.java,
+ 	java/nio/CharBufferImpl.java,
+ 	java/nio/DoubleBufferImpl.java,
+ 	java/nio/DoubleViewBufferImpl.java,
+ 	java/nio/FloatBufferImpl.java,
+ 	java/nio/FloatViewBufferImpl.java,
+ 	java/nio/IntBufferImpl.java,
+ 	java/nio/IntViewBufferImpl.java,
+ 	java/nio/LongBufferImpl.java,
+ 	java/nio/LongViewBufferImpl.java,
+ 	java/nio/ShortBufferImpl.java,
+ 	java/nio/ShortViewBufferImpl.java,
+ 	java/nio/channels/AlreadyConnectedException.java,
+ 	java/nio/channels/AsynchronousCloseException.java,
+ 	java/nio/channels/ByteChannel.java,
+ 	java/nio/channels/CancelledKeyException.java,
+ 	java/nio/channels/Channel.java,
+ 	java/nio/channels/ClosedByInterruptException.java,
+ 	java/nio/channels/ClosedChannelException.java,
+ 	java/nio/channels/ClosedSelectorException.java,
+ 	java/nio/channels/ConnectionPendingException.java,
+ 	java/nio/channels/FileLockInterruptionException.java,
+ 	java/nio/channels/GatheringByteChannel.java,
+ 	java/nio/channels/IllegalBlockingModeException.java,
+ 	java/nio/channels/IllegalSelectorException.java,
+ 	java/nio/channels/InterruptibleChannel.java,
+ 	java/nio/channels/NoConnectionPendingException.java,
+ 	java/nio/channels/NonReadableChannelException.java,
+ 	java/nio/channels/NonWritableChannelException.java,
+ 	java/nio/channels/NotYetBoundException.java,
+ 	java/nio/channels/NotYetConnectedException.java,
+ 	java/nio/channels/OverlappingFileLockException.java,
+ 	java/nio/channels/ReadableByteChannel.java,
+ 	java/nio/channels/ScatteringByteChannel.java,
+ 	java/nio/channels/SelectableChannel.java,
+ 	java/nio/channels/SelectionKey.java,
+ 	java/nio/channels/Selector.java,
+ 	java/nio/channels/UnresolvedAddressException.java,
+ 	java/nio/channels/UnsupportedAddressTypeException.java,
+ 	java/nio/channels/WritableByteChannel.java,
+ 	java/nio/charset/spi/CharsetProvider.java:
+ 	Reworked coding style and javadocs.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* ChangeLog, acinclude.m4, lib/Makefile.am:
+ 	Added support for building and installing glibj.zip and separate
+ 	class files.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* autogen.sh: New script to generate configure and friends.
+ 	* ltmain.sh: Removed. This gets added now by calling libtoolize.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Added gnu/java/nio/channels/Makefile to output files.
+ 	* gnu/java/nio/Makefile.am: Added subdir channels.
+ 	* include/gnu_java_nio_channels_FileChannelImpl.h: New file.
+ 	* include/java_io_FileDescriptor.h,
+ 	include/java_nio_DirectByteBufferImpl.h: Updates.
+ 	* include/java_nio_channels_FileChannelImpl.h: Removed.
+ 	* include/Makefile.am: Handle generation of
+ 	gnu_java_nio_channels_FileChannelImpl.h.
+ 	* java/nio/channels/Makefile.am (EXTRA_DIST): Removed FileChannelImpl.java.
+ 	* native/jni/java-nio/Makefile.am
+ 	(libjavanio_la_SOURCES): Removed java_nio_FileChannelImpl.c and
+ 	added gnu_java_nio_channels_FileChannelImpl.c.
+ 	* native/jni/java-io/FileDescriptor.c: Commented out all code.
+ 	* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c: New file.
+ 	* native/jni/java-nio/java_nio_DirectByteBufferImpl.c: Fixed method names.
+ 	* native/jni/java-nio/java_nio_FileChannelImpl.c: Removed.
+ 
+ 2004-04-08  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/channels/Channels.java (newInputStream, newOutputStream):
+ 	Optimize when argument is a FileChannelImpl.
+ 	(newInputStream(FileChannelImpl), newOutputStream(FileChannelImpl)):
+ 	New native methods.
+ 
+ 2004-04-08  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/channels/FileChannelImpl.java:  Moved to package
+ 	gnu/java/nio/channels, since we need to refer to it from java.io.
+ 	* java/nio/channels/natFileChannelImpl.cc:  Removed file.
+ 	* gnu/java/nio/channels/FileChannelImpl.java:  New class, renamed
+ 	from java/nio/channels.  Don't depend on FileDescriptor.
+ 	(in, out, err):  New static fields.
+ 	(mode):  New field.
+ 	(SET, CUR, READ, WRITE, APPEND, EXCL, SYNC, DSYNC):  Moved constants
+ 	from FileDescriptor.
+ 	(by):  Removed MappedByteBuffer field.
+ 	(map):  New working implementation.
+ 	* java/io/FileDescriptor.java:  Implement on top of FileChannel.
+ 	Remove native methods.
+ 	* gnu/java/nio/FileLockImpl.java (fd):  Remove field, replacing it by:
+ 	(ch):  New FileChannelImpl field.  Update constructor to match.
+ 	(releaseImpl):  Remove native method.  Instead ...
+ 	(release):  Call unlock on channel.
+ 	* java/io/FileInputStream.java (ch):  Change type to FileChannelImpl.
+ 	(<init>(File)):  Allocate a FileChannelImpl, not a FileDescriptor.
+ 	(<init>(FileChannelImpl)):  New package-private constructor.
+ 	(<init>(FileDescriptor)):  Extract FileChannelImpl from arg.
+ 	(available, close, read, skip):  Implement using FileChannelImpl.
+ 	(getFD):  Allocate FileDescriptor if needed.
+ 	(getChannel):  Is now trivial.
+ 	* java/io/FileOutputStream.java:  Corresponding changes.
+ 	* java/io/RandomAccessFile.java:  Corresponding changes.
+ 	* java/nio/MappedByteBuffer.java: (forceImpl, isLoadedImpl, loadImpl,
+ 	unmapImpl):  New dummy methods, to be overridden by subclass.
+ 	(finalize, isLoaded, load, force):  New methods.
+ 	* java/nio/MappedByteBufferImpl.java:  More-or-less rewrite.
+ 	Now works, at least for read mapping.
+ 
+ 2004-04-08  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/CharBufferImpl.java:  Inline super constructor.
+ 	* java/nio/DoubleBufferImpl.java:  Likewise.
+ 	* java/nio/FloatBufferImpl.java:  Likewise.
+ 	* java/nio/IntBufferImpl.java:  Likewise.
+ 	* java/nio/LongBufferImpl.java:  Likewise.
+ 	* java/nio/ShortBufferImpl.java:  Likewise.
+ 	* java/nio/CharBuffer.java:  Remove unused constructor.
+ 	* java/nio/DoubleBuffer.java:  Likewise.
+ 	* java/nio/FloatBuffer.java:  Likewise.
+ 	* java/nio/IntBuffer.java:  Likewise.
+ 	* java/nio/LongBuffer.java:  Likewise.
+ 	* java/nio/ShortBuffer.java:  Likewise.
+ 	* java/nio/CharViewBufferImpl.java:  New convenience constructor.
+ 	Fix buggy call to super constructor.
+ 	* java/nio/DoubleViewBufferImpl.java:  Likewise.
+ 	* java/nio/FloatViewBufferImpl.java:  Likewise.
+ 	* java/nio/IntViewBufferImpl.java:  Likewise.
+ 	* java/nio/LongViewBufferImpl.java:  Likewise.
+ 	* java/nio/ShortViewBufferImpl.java:  Likewise.
+ 	* java/nio/ByteBuffer.java (endian):  Make non-private so other
+ 	java.nio classes can inherit it.
+ 	(<init>):  Don't bother clearing array_offset.
+ 	* java/nio/ByteBuffer.java (allocate):  Re-implement using wrap.
+ 	* java/nio/ByteBuffer.java (get(byte[],int,int)):  Check underflow.
+ 	Remove redundant test.
+ 	* java/nio/ByteBufferImpl.java (asCharBuffer, asShortBuffer,
+ 	asIntBuffer, asLongBuffer, asFloatBuffer, asDoubleBuffer):
+ 	Use new XxxViewBufferImpl constructors.
+ 	* java/nio/MappedByteBufferImpl.java:  Likewise.
+ 	* java/nio/DirectByteBufferImpl.java:  Likewise.
+ 	* java/nio/ByteBufferImpl.java:  Remove one constructor.
+ 	Inline super in remaining constructor.
+ 	* java/nio/ByteBuffer.java:  Remove unused constructor.
+ 	* java/nio/ByteBufferImpl.java (shiftDown):  New optimized method.
+ 	* java/nio/ByteBufferImpl.java (get, put):  Add array_offset.
+ 	* java/nio/DirectByteBufferImpl.java (owner):  New field.
+ 	(offset):  Remove unused field.
+ 	(<init>):  Modify one and add another constructor.  Change callers.
+ 	(allocateDirect):  Removed - not used.
+ 	(getImpl, putImpl):  Make static and pass address explicitly,
+ 	to make them useful for MappedByteBufferImpl.
+ 	(get, put):  Check for underflow.  Modify for new getImpl.
+ 	(getImpl):  New native method where target is array.
+ 	(get(byte[],int,int)):  Use the above.
+ 	(adjustAddress):  New static native method.
+ 	(slice, duplicate, asReadOnly):  New implementations.
+ 
+ 2004-04-08  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/ByteBuffer.java (shiftDown):  New helper method.
+ 	* java/nio/ByteBufferImpl.java (compact):  Use new shiftDown method.
+ 	* sava/nio/ByteBufferHelper.java:  Remove redundant 'final' specifiers.
+ 	Pass ByteOrder parameter to most methods, since the underlying
+ 	ByteBuffer's order isn't always what we should use.
+ 	* java/nio/ByteBufferImpl.java:  Pass byte-order various places.
+ 	* java/nio/DirectByteBufferImpl.java:  Likewise.
+ 	Use ByteBufferHelper methods.
+ 	* java/nio/MappedByteBufferImpl.java:  Likewise.
+ 	(compact):  Use shiftDown.
+ 	* java/nio/CharViewBufferImpl.java (<init>):  Pass byte-order.
+ 	(get, put):  Use ByteBufferHelper.
+ 	(compact):  Use new shiftDown method.
+ 	(duplicate(boolean)):  New helper method.
+ 	(duplicate, asReadOnlyBuffer):  Use it.
+ 	(order):  Return endian field.
+ 	* java/nio/DoubleViewBufferImpl.java:  Likewise.
+ 	* java/nio/FloatViewBufferImpl.java:  Likewise.
+ 	* java/nio/IntViewBufferImpl.java:  Likewise.
+ 	* java/nio/LongViewBufferImpl.java:  Likewise.
+ 	* java/nio/ShortViewBufferImpl.java:  Likewise.
+ 	* java/nio/CharViewBufferImpl.java (subsequence):  Redundant test.
+ 	* java/nio/DirectByteBufferImpl.java (shiftDown):  New native method.
+ 	(compact):  Re-implement using shiftDown.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ContentHandler.java,
+ 	java/net/ContentHandlerFactory.java,
+ 	java/net/Inet4Address.java,
+ 	java/net/Inet6Address.java,
+ 	java/net/JarURLConnection.java,
+ 	java/net/MimeTypeMapper.java,
+ 	java/net/URI.java,
+ 	java/net/URL.java,
+ 	java/net/URLClassLoader.java,
+ 	java/net/URLConnection.java,
+ 	java/net/URLStreamHandler.java:
+ 	Reworked javadocs and coding style.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Authenticator.java,
+ 	java/net/BindException.java,
+ 	java/net/ConnectException.java,
+ 	java/net/DatagramPacket.java,
+ 	java/net/DatagramSocket.java,
+ 	java/net/DatagramSocketImpl.java,
+ 	java/net/DatagramSocketImplFactory.java,
+ 	java/net/FileNameMap.java,
+ 	java/net/HttpURLConnection.java,
+ 	java/net/InetSocketAddress.java,
+ 	java/net/MalformedURLException.java,
+ 	java/net/MulticastSocket.java,
+ 	java/net/NetPermission.java,
+ 	java/net/NetworkInterface.java,
+ 	java/net/NoRouteToHostException.java,
+ 	java/net/PasswordAuthentication.java,
+ 	java/net/PortUnreachableException.java,
+ 	java/net/ProtocolException.java,
+ 	java/net/ServerSocket.java,
+ 	java/net/Socket.java,
+ 	java/net/SocketAddress.java,
+ 	java/net/SocketException.java,
+ 	java/net/SocketImpl.java,
+ 	java/net/SocketImplFactory.java,
+ 	java/net/SocketOptions.java,
+ 	java/net/SocketTimeoutException.java,
+ 	java/net/URISyntaxException.java,
+ 	java/net/URLDecoder.java,
+ 	java/net/URLEncoder.java,
+ 	java/net/URLStreamHandlerFactory.java,
+ 	java/net/UnknownHostException.java,
+ 	java/net/UnknownServiceException.java:
+ 	Reworked javadoc and coding style all over.
+ 
+ 2004-04-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ByteArrayInputStream.java,
+ 	java/io/DataInput.java,
+ 	java/io/DataInputStream.java,
+ 	java/io/InputStream.java,
+ 	java/io/InputStreamReader.java,
+ 	java/io/ObjectStreamClass.java,
+ 	java/io/ObjectStreamField.java,
+ 	java/io/PushbackReader.java,
+ 	java/io/StringWriter.java,
+ 	java/io/Writer.java:
+ 	Fixed javadocs and style all over.
+ 
+ 2004-04-06  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectStreamField.java
+ 	(setBooleanField, setCharField, setByteField, setShortField,
+ 	setIntField, setLongField, setFloatField, setDoubleField,
+ 	setObjectField): Use native methods directly to be able to set
+ 	final fields.
+ 
+ 	* vm/reference/java/io/VMObjectStreamClass.java
+ 	(setBooleanNative, setCharNative, setByteNative, setShortNative,
+ 	setIntNative, setLongNative, setFloatNative, setDoubleNative,
+ 	setObjectNative): New methods for serialization to be able to
+ 	set final fields.
+ 
+ 	* native/jni/java-io/java_io_VMObjectStreamClass.c:
+ 	Implemented new native methods of java.io.VMObjectStreamClass
+ 	accordingly.
+ 
+ 	* include/java_io_VMObjectStreamClass.h: Regenerated.
+ 
+ 	* NEWS: Added a warning clause about the VM Interface change.
+ 
+ 2004-04-07  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/events/fosdem04.wml: link to group picture added
+ 
+ 2004-04-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c:
+ 	Changed C++ comments into C comments. Removed commented out code.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
+ 	Likewise.
+ 	* native/jni/gtk-peer/gthread-jni.c:
+ 	Likewise.
+ 
+ 2004-04-07  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/image/SampleModel.java (<init>): Added error cause
+ 	information to thrown exception.
+ 
+ 2004-04-07  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/image/SinglePixelPackedSampleModel.java (getDataElements):
+ 	New method.
+ 	(setDataElements): New method.
+ 	(setPixels): New method.
+ 	(toString): New method.
+ 
+ 2004-04-07  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/Polygon.java (getBoundingBox): Use correct y-coordinate
+ 	in Rectangle constructor.
+ 
+ 2004-04-07  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/image/Raster.java (toString): Added method. 
+ 
+ 2004-04-07  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/newsitems.txt: JamVM release; ServiceFactory release
+ 
+ 2004-04-06  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/downloads/downloads.wml: removed download links
+ 	0.00 to 0.05 because they do not exist; link to 0.07 fixed
+ 
+ 2004-04-06  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/downloads/downloads.wml: link to 0.08 corrected
+ 
+ 2004-04-05  Patrik Reali  <reali@acm.org>
+ 
+ 	* doc/www.gnu.org/README: some custom tags documented
+ 	* doc/www.gnu.org/newsitems.txt: planet classpath added
+ 	* doc/www.gnu.org/faq/faq.wml doc/www.gnu.org/include/layout.wml 
+ 	doc/www.gnu.org/include/macros.wml: faq entry on installing classpath
+ 	and mauve, custom tags for commented code
+ 
+ 2004-04-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/hacking.texinfo (Source Code Style Guide): Mention `extends
+ 	Object' and `import java.lang.Integer' as redundant.
+ 
+ 	* java/rmi/MarshalledObject.java (MarshalledObject): Removed
+ 	redundant `extends'.
+ 	* java/security/Security.java (Security): Removed redundant
+ 	`extends'.
+ 	* java/security/spec/DSAPublicKeySpec.java (DSAPublicKeySpec):
+ 	Removed redundant `extends'.
+ 	* java/security/spec/DSAPrivateKeySpec.java (DSAPrivateKeySpec):
+ 	Removed redundant `extends'.
+ 	* java/security/spec/DSAParameterSpec.java (DSAParameterSpec):
+ 	Removed redundant `extends'.
+ 	* javax/naming/directory/SearchControls.java (SearchControls):
+ 	Removed redundant `extends'.
+ 	* javax/naming/spi/DirStateFactory.java (Result): Removed
+ 	redundant modifiers.
+ 	* java/util/Map.java (Entry): Removed redundant modifiers.
+ 	* java/text/AttributedCharacterIterator.java (Attribute): Removed
+ 	redundant modifiers.
+ 	* java/security/Security.java (provides): Removed unused label.
+ 
+ 2004-04-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/hacking.texi: Added sections on needed libraries, coding
+ 	conventions, hacking on the code, writing ChangeLog
+ 	entries. Updated old/deprecated information.
+ 
+ 	* HACKING: Moved all content to doc/hacking.text. Add pointer to
+ 	above document.
+ 
+ 2004-04-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/JViewport.java (JViewport): Make constructor public.
+ 
+ 2004-04-01  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/text/DecimalFormat.java (scanFix): Removed suffix check
+ 	for percent and permill check.
+ 
+ 2004-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_nio_ByteBufferImpl.h,
+ 	include/gnu_java_nio_CharBufferImpl.h,
+ 	include/gnu_java_nio_DoubleBufferImpl.h,
+ 	include/gnu_java_nio_FloatBufferImpl.h,
+ 	include/gnu_java_nio_IntBufferImpl.h,
+ 	include/gnu_java_nio_LongBufferImpl.h,
+ 	include/gnu_java_nio_ShortBufferImpl.h:
+ 	Removed, unused.
+ 
+ 2004-03-29  Steven Augart  <steve+freejava@augart.com>
+ 
+ 	* doc/vmintegration.texinfo; Added dir entry.
+ 	* doc/hacking.texinfo: Likewise.
+ 
+ 2004-03-28  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/OutputStreamWriter.java
+ 	(OutputStreamWriter): Added call to set bad character value for the
+ 	encoder.
+ 
+ 2004-03-28  Etienne M. Gagnon  <gagnon.etienne_m@uqam.ca>
+ 
+ 	* doc/vmintegration.texinfo, doc/www.gnu.org/stories.wml: Update
+ 	SableVM related descriptions.
+ 
+ 2004-03-19  Ito Kazumitsu <kaz@maczuka.gcd.org>
+ 
+ 	* libraries/javalib/java/util/Properties (load): Delete leading
+ 	whitespaces before checking comment characters.
+ 
+ 2004-03-26  Peter Moon  <peterm@miraculum.com>
+ 
+ 	* java/text/NumberFormat.java: Fix spelling of setCurrency
+ 	method.
+ 
+ 2004-03-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(item_activate): Declare label before use.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(gtkSetFont): Removed unused variable label.
+ 	(addExposeFilter): Declare variables before use.
+ 	(removeExposeFilter): Likewise.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(ok_clicked): Declare str_fileName before use.
+ 
+ 2004-03-25  Archie Cobbs  <archie@dellroad.org>
+ 
+ 	* configure.ac: Use the more portable ``:'' expr(1)
+ 	keyword instead of ``match''.
+ 
+ 2004-03-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java: Use fallback when
+ 	MissingResourceException is thrown.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (getFontPeer): Don't return
+ 	null when a MissingResourceException is thrown. Should never happen.
+ 
+ 2004-03-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/hacking.texinfo (Serialization): Typo.
+ 
+ 2004-03-24  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/imageio, javax/imageio/spi: New directories.
+ 	* javax/imageio/spi/ServiceRegistry.java: Implemented.
+ 	* javax/imageio/spi/RegisterableService.java: Implemented.
+ 
+ 2004-03-24  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* gnu/classpath/ServiceFactory.java: Implemented a general
+ 	facility for loading plug-in services specified via resources
+ 	in META-INF/services.
+ 
+ 	* gnu/classpath/ServiceProviderLoadingAction.java: New file.
+ 
+ 2004-03-22  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/event/MouseEvent.java (<init>): fixed field assignment 
+ 
+ 2004-03-22 Ingo Proetel <proetel@aicas.com>
+ 
+ 	* java/awt/Graphics.java (draw3DRect): fixed lower horizontal line
+ 
+ 2004-03-22  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/awt/FontMetrics.java:
+ 	(charsWidth): fixed accumulation of total_width
+ 	(getWidth): simple default implementation
+ 
+ 2004-03-21  Ito Kazumitsu <kaz@maczuka.gcd.org>
+ 
+ 	* libraries/javalib/java/net/ServerSocket.java
+ 	(accept): Close the socket when error occured.
+ 
+ 2004-03-21  Norbert Frese  <postfach@nfrese.net>
+ 
+ 	* gnu/java/rmi/server/RMIIncomingThread.java: New file.
+ 	* gnu/java/rmi/server/UnicastConnection.java:
+ 	Create a new RMIObjectOuputStream/RMIObjectInputStream for every
+ 	rmi-message.
+ 	(getObjectInputStream): Return object reference, throw IOException if null.
+ 	(startObjectInputStream): Create new RMIObjectInputStream on top of 'din'.
+ 	(getObjectOutputStream): Return object reference, throw IOException if null.
+ 	(startObjectOutputStream): Create new RMIObjectOutputStream on top of 'dout'.
+ 	* gnu/java/rmi/server/UnicastConnectionManager.java:
+ 	(UnicastConnectionManager): Throw RemoteException if port is not available.
+ 	(getInstance): Throw RemoteException.
+ 	(run): Lookup client host and attach it to new RMIIncomingThread for later retrieval.
+ 	* gnu/java/rmi/server/UnicastRef.java:
+ 	Start a new RMIObjectInputStream/RMIObjectOutputStream for every rmi-message.
+ 	Collect Exceptions which are returned by a rmi-call and fix void returns.
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java:
+ 	Start a new RMIObjectInputStream/RMIObjectOutputStream for every rmi-message.
+ 	* gnu/java/rmi/server/UnicastServer.java:
+ 	(dispatch): Answer ping messages which are sent by other java implementions.
+ 	(incomingMessageCall): Start a new RMIObjectInputStream/RMIObjectOutputStream
+ 	for every rmi-message and fix void return problems.
+ 	* gnu/java/rmi/server/UnicastServerRef.java
+ 	(UnicastServerRef): Throw RemoteException.
+ 	(exportObject): Find the class up the class hierarchy which has a _Stub generated by rmic.
+ 	In some situations it is necessary to export a subclass of the class which has the _Stub.
+ 	For instance when the class with has the _Stub is abstract.
+ 	(findStubSkelClass): New method which looks for the class which has the _Stub.
+ 	(getClientHost): Implementated.
+ 	* java/rmi/server/RemoteServer.java
+ 	(getClientHost): Implemented.
+ 	* gnu/java/rmi/server/Makefile.am
+ 	(EXTRA_DIST): RMIIncomingThread.java.
+ 
+ 2004-03-20  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/net/URI.java (parseURI): Added unquoting.
+ 	(unquote): New method.
+ 	(quoteAuthority): Implemented.
+ 	(quote(String,String)): New method.
+ 	(quotePath): Implemented.
+ 	(getRawSchemeSpecificPart): Return new rawSchemeSpecificPart field.
+ 	(getSchemeSpecificPart): Removed FIXME comment.
+ 	(getRawAuthority): Return new rawAuthority field.
+ 	(getAuthority): Removed FIXME comment.
+ 	(getRawUserInfo): Return new rawUserInfo field.
+ 	(getUserInfo): Removed FIXME comment.
+ 	(getRawPath): Return new rawPath field.
+ 	(getPath): Removed FIXME comment.
+ 	(getRawQuery): Return new rawQuery field.
+ 	(getQuery): Removed FIXME comment.
+ 	(getRawFragment): Return new rawFragment field.
+ 	(getFragment): Removed FIXME comment.
+ 
+ 2004-03-20  Norbert Frese  <postfach@nfrese.net>
+ 
+ 	* java/net/InetAddress.java
+ 	(getByName): Handle hostname == "" case.
+ 
+ 2004-03-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java: Reformated.
+ 	(equals): Removed unneeded pointer check.
+ 
+ 2004-03-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(getOutputStream): Dont set POST method.
+ 
+ 2004-03-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/PipeImpl.java
+ 	(SourceChannelImpl): Made final.
+ 	(read): Implemented.
+ 	(SinkChannelImpl): Made final.
+ 	(write): Implemented.
+ 
+ 2004-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c,
+ 	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
+ 	Merged from libgcj. I actually forgot this in my last commit.
+ 
+ 2004-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/HttpURLConnection.java:
+ 	Fixed typos in javadoc.
+ 
+ 2004-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java:
+ 	Fixed javadoc to be correct xhtml.
+ 
+ 2004-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/Makefile.am,
+ 	java/awt/image/Makefile.am,
+ 	javax/swing/plaf/basic/Makefile.am:
+ 	Added new files.
+ 	* include/gnu_java_awt_peer_gtk_GdkGraphics.h,
+ 	include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkComponentPeer.h,
+ 	include/gnu_java_awt_peer_gtk_GtkLabelPeer.h:
+ 	Regenerated.
+ 
+ 2004-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/AffineTransformOp.java
+ 	(AffineTransformOp): Made public.
+ 	* javax/swing/JComponent.java
+ 	(listenerList): Made protected.
+ 	(accessibleContext): Likewise.
+ 	* javax/swing/JList.java
+ 	(valueChanged): Dont use internal fields of ListSelectionEvent.
+ 	* javax/swing/JViewport.java
+ 	(getView): Dont use internal fields of Component.
+ 	(addImpl): Likewise.
+ 	* javax/swing/Timer.java
+ 	(isRunning): Made public.
+ 	(start): Likewise.
+ 	(stop): Likewise.
+ 	* javax/swing/UIDefaults.java
+ 	(getInt): Made public.
+ 	* javax/swing/plaf/basic/BasicListUI.java
+ 	(mousePressed): Dont use internal fields of MouseEvent.
+ 	(propertyChanged): Dont use internal fields of PropertyChangeEvent.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java
+ 	(arrowIcon): Made static.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java
+ 	(stateChanged): Dont use internal field on ChangeEvent.
+ 	* javax/swing/text/JTextComponent.java
+ 	(getUI): Call UIManager.getUI().
+ 	(updateUI): Use getUI().
+ 
+ 2004-03-19  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Clipping fixes.
+ 	* javax/swing/JComponent.java (paint): Use persistent double buffer. 
+ 	* javax/swing/JList.java (ListListener): Revalidate on changes.
+ 	* javax/swing/JScrollPane.java: Reimplement.
+ 	* javax/swing/JViewport.java: Reimplement.
+ 	* javax/swing/ScrollPaneLayout.java: Reimplement.
+ 	* javax/swing/ViewportLayout.java: Tidy up.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java: Remove printlns.
+ 	* javax/swing/plaf/basic/BasicScrollPaneUI.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java: Handle missing labels.
+ 	* javax/swing/plaf/basic/BasicViewportUI.java: Implement in terms of
+ 	backing store only.
+ 
+ 2004-03-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_wm_protocols_filter): New function.
+ 	(window_focus_in_cb): Remove function.
+ 	(window_focus_out_cb): Likewise.
+ 	(window_focus_or_active_state_change_cb): New function.
+ 	(create): Add filter that removes WM_TAKE_FOCUS client messages.
+ 	(connectSignals): Don't attach handlers to focus-in-event or
+ 	focus-out-event signals.  Handle notify signal.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
+ 	(gtkSetLabel): New native method declaration.
+ 	(setLabel): Use gtkSetLabel.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetLabel): New method.
+ 
+ 2004-03-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Default to
+ 	black when color argument is null.
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java: Remove check
+ 	for drag events.
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java: (visitChild):
+ 	Remove candidate clip. Use the component
+ 	clip to intersect.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
+ 	(handleEvent): Use the PaintEvent's clip.
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
+ 	(handleEvent): Don't set the clip for the
+ 	Graphics object.
+ 
+ 2004-03-19  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: 
+ 	Fix double <-> fixed macros, reset font transform.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
+ 	Likewise.
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* java/awt/Container.java: (visitChild): Move
+ 	the x and y coordinate of the component rectangle
+ 	to correct position.
+ 	(handleEvent): Forward drag events to the pressed
+ 	component.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	Fix comments.
+ 	(ArrowButtonListener::mousePressed): Stop the
+ 	existing timer.
+ 	(mouseDragged): Implement.
+ 	(TrackListener::mousePressed): Only react if
+ 	the press doesn't occur on the thumb, otherwise
+ 	just set the offset.
+ 	(TrackListener::mouseReleased): Unset the isAdjusting
+ 	value.
+ 	(createIncreaseIcon): Switch icon.
+ 	(createDecreaseIcon): Switch icon.
+ 	(calculatePreferredSize): Use width.
+ 	(getThumbBounds): Use the top as the lower value.
+ 	(layoutVScrollBar): Switch the button locations.
+ 	(paintIncreaseHighlight): Paint correct side of thumb.
+ 	(paintDecreaseHighlight): ditto.
+ 	(valueForYPosition): Use top as the lower value.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	Fix comments.
+ 	(mouseDragged): Implement.
+ 	(mousePressed): Only react when the thumb isn't
+ 	pressed, otherwise just set offset.
+ 	(mouseReleased): Handle a release of the thumb.
+ 	(scrollDueToClickInTrack): Stop the timer first.
+ 	* javax/swing/JProgressBar.java:
+ 	(setString): Fix change condition.
+ 	* javax/swing/JSeparator.java:
+ 	Remove println's.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/image/AffineTransformOp.java:
+ 	(filter): Use Graphics2D interface instead of directly using the
+ 	GdkGraphics2D peer.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java
+ 	(handleEvent): Action events are generated upon MOUSE_RELEASED.
+ 	* java/awt/Container.java
+ 	(acquireComponentForMouseEvent): Fixed.
+ 	(handleEvent): Fixed.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(state_to_awt_mods_with_button_states): New method.
+ 	(pre_event_handler): Fixed mouse event generation.
+ 
+ 2004-03-19  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(GdkGraphics2D (BufferedImage)): Initialize
+ 	pixmap associated with specified BufferedImage.
+ 	(setPaint): Changed implementation of Texture
+ 	Paint to use AffineTransformOp.
+ 	* java/awt/image/AffineTransformOp.java
+ 	(createCompatibleDestRaster): Throw RasterFormatException 
+ 	if resulting width or height of raster is 0.
+ 
+ 2004-03-19  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* java/awt/image/AffineTransformOp.java:
+ 	Removed unnecessary field interpolationType.
+ 	Formatted some of the lines to be consistent with 
+ 	the GNU style.
+ 	(AffineTransformOp): Create new RenderingHints 
+ 	containing specified interpolation type.
+ 	(createCompatibleDestImage): Implemented.
+ 	(createCompatibleDestRaster): Implemented.
+ 	(filter): Implemented.
+ 	(getBounds2D(BufferedImage)): Implemented.
+ 	(getBounds2D(Raster)): Implemented.
+ 	(getInterpolationType): Get interpolation value from 
+ 	rendering hints.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(setFont): Check if child peers are null.
+ 
+ 2004-03-19  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* testsuite/lib/libjava.exp (libjava_find_lib): Don't include
+ 	.libs in -L option.
+ 	(libjava_arguments): Add new libraries to argument list.
+ 
+ 2004-03-19  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added java/awt/image/AffineTransformOp.java
+ 	* Makefile.in: Re-generated.
+ 	* java/awt/image/AffineTransformOp.java: New Class.
+ 
+ 2004-03-19  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(setPaint): Interpret correctly TexturePaint's
+ 	anchor rectangle.
+ 	(drawImage): Fixed scale factors of the affine
+ 	transform.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(GdkGraphics(Component)): Inherit font from component.
+ 	(drawString): Use font style.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
+ 	(gtkSetFont): New native method declaration.
+ 	(setFont): New method.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(gtkSetFont): New native method declaration.
+ 	(setFont): Call new native method gtkSetFont.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(setFont): For all child components who do not their fonts set,
+ 	set their peers' fonts with this container's font.
+ 	* gnu/java/awt/peer/gtk/GtkLabelPeer.java:
+ 	Move all native method declarations to the top for readability.
+ 	(gtkSetFont): New native method declaration.
+ 	(setFont): New method.
+ 	* java/awt/Component.java
+ 	(setFont): Invalidate after setting the font.
+ 	* java/awt/Container.java
+ 	(invalidateTree): New method.
+ 	(setFont): Invalidate the container tree after setting the font.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString): Use font style.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetFont): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkSetFont): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkSetFont): New method.
+ 
+ 2004-03-19  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(updateBufferedImage): New helper function.
+ 	Updates BufferedImage in memory if it was changed.
+ 	(draw): changed to update BufferedImage in memory after
+ 	this drawing operation
+ 	(fill): Ditto.
+ 	(draw3DRect): Ditto.
+ 	(fill3DRect): Ditto.
+ 	(clearRect): Ditto.
+ 	(drawRaster): Ditto.
+ 	(drawImage) : Ditto. Update only in case of GtkOffScreenImage with 
+ 	no affine transformation.
+ 	(drawGlyphVector): Ditto.
+ 
+ 2004-03-19  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(isBufferedImageGraphics): New Helper function. 
+ 	Returns true if this graphics2d can be used to draw 
+ 	into buffered image and false otherwise.
+ 	(updateImagePixels): New Helper function. 
+ 	Updates pixels in the BufferedImage.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ 	(getImagePixels): New function. Returns pixels
+ 	of the buffered image associated with 
+ 	this Graphics2D.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java
+ 	(layoutContainer): Fix width and height calculations to ensure
+ 	that they're non-negative.
+ 	* java/awt/Component.java
+ 	(setBackground): If c is null, inherit from closest ancestor whose
+ 	background color is set.
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* Makefile.am: Add new files.
+ 	* Makefile.in: Re-generate.
+ 	* javax/swing/JProgressBar.java: 
+ 	(JProgressBar(int, int int)): Throw
+ 	IllegalArgumentException if orientation is
+ 	invalid.
+ 	(JProgressBar(BoundedRangeModel)): Create
+ 	ChangeListener and register it. UpdateUI.
+ 	(getChangeListeners): Implement.
+ 	(setModel): Reset ChangeListener.
+ 	* javax/swing/JScrollBar.java: Implement.
+ 	* javax/swing/JSeparator.java: Implement.
+ 	* javax/swing/JSlider.java:
+ 	(JSlider(int, int, int, int)): Throw 
+ 	IllegalArgumentException if orientation
+ 	is invalid.
+ 	(getChangeListeners): Fix method name.
+ 	* javax/swing/SwingUtilities.java:
+ 	(layoutCompoundLabel): If there is no text,
+ 	set the text rectangle dimensions to 0.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java:
+ 	(paint): If there is no text, don't paint it.
+ 	* javax/swing/plaf/basic/BasicScrollBarUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicSeparatorUI.java:
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java: 
+ 	(propertyChange): If the model changes, change
+ 	the listeners accordingly.
+ 
+ 2004-03-19  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/AbstractButton.java: Add "final" qualifiers.
+ 	* javax/swing/JList.java: Reimplement.
+ 	* javax/swing/DefaultListSelectionModel.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicListUI.java: Reimplement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Add "purple" values.
+ 	* javax/swing/ListModel.java: Javadoc.
+ 	* javax/swing/ListSelectionModel.java: Add missing methods.
+ 	* javax/swing/AbstractListModel.java: Javadoc and corrections.
+ 	* javax/swing/DefaultListModel.java: Javadoc and corrections.
+ 	* javax/swing/ListModel.java: Javadoc and corrections.
+ 	* javax/swing/DefaultListCellRenderer.java: Minor tidying.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java
+ 	(GtkFontPeer): Change default size to 12.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(getFontPeer): Change default size to 12.
+ 	(getClasspathFontPeer): Likewise. Set default name to "Default".
+ 	* java/awt/Font.java
+ 	(Font(Map)): Call Font(String,Map).
+ 	(Font(String,Map)): If attrs is null, initialize it as an empty
+ 	HashMap, which will ensure that the Font will get default attributes.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java
+ 	(GtkFontPeer(String,int)): Call the new constructor with size 1.
+ 	(GtkFontPeer(String,int,int)): New constructor with size attribute.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(getFontPeer(String,int)): Call the new overload method with size 1.
+ 	(getFontPeer(String,int,int)): New method. Overloaded with size
+ 	attribute.
+ 	(getClasspathFontPeer): Set the size of the font.
+ 
+ 2004-03-19  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(bimage): New field.
+ 	(GdkGraphics2D): New Constructor. Constructs Graphics
+ 	object that can be used to draw into the Buffered Image.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
+ 	(GdkGraphicsEnvironment): Fixed to include public 
+ 	keyword.
+ 	(createGraphics): Implemented.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(getLocalGraphicsEnvironment): Implemented.
+ 	* java/awt/GraphicsEnvironment.java:
+ 	(getLocalGraphicsEnvironment): Implemented.
+ 	* java/awt/image/BufferedImage.java:
+ 	(createGraphics): Implemented.
+ 		
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(eventTypeEnabled): Add MOUSE_MOVED and MOUSE_DRAGGED event types.
+ 	* java/awt/Container.java
+ 	(addNotifyContainerChildren): Fix event enabling.
+ 
+ 2004-03-19  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* Makefile.am: Added 
+ 	gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
+ 	* Makefile.in: Re-generated.
+ 	* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
+ 	New Class. 
+ 	
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* Makefile.am: Add BasicProgressBarUI
+ 	* Makefile.in: Regenerate.
+ 	* javax/swing/JProgressBar.java: 
+ 	Re-implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	Add constants for JProgressBar.
+ 	* javax/swing/plaf/basic/BasicProgressBarUI.java
+ 	Implement.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	Change comments.
+ 	(calculateGeometry): New method
+ 	(paint): Remove unnecessary size calculations.
+ 
+ 2004-03-19  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
+ 	(drawRaster): Fixed small error that caused
+ 	imageToUser transformation to be set incorrectly.
+ 	(toString): Implemented.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/CardLayout.java
+ 	(addLayoutComponent): Show the first component added as the default.
+ 	(removeLayoutComponent): After removing, show the next component.
+ 	(gotoComponent): If there is only one component, show it and return.
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JSlider.java: Re-order
+ 	modifiers.
+ 	* javax/swing/JLabel.java: Re-order
+ 	modifiers.
+ 	* javax/swing/JComponent.java: 
+ 	(addPropertyChangeListener):
+ 	Implement.
+ 	(removePropertyChangeListener):
+ 	ditto.
+ 	(firePropertyChangeEvent):
+ 	ditto.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(show): Dispatch ComponentEvent via system event queue.
+ 	(hide): Likewise.
+ 	(move): Likewise.
+ 	(resize): Likewise.
+ 	(reshape): Likewise.
+ 	* java/awt/Window.java
+ 	(setBoundsCallback): Likewise.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds):
+ 	Use gtk_widget_set_size_request() instead of the deprecated
+ 	gtk_widget_set_usize().
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JSlider.java: Fix comments and
+ 	make property strings constants.
+ 	(createStandardLabels): Use the labels
+ 	preferred size as bounds.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java
+ 	Fix comments.
+ 	(ScrollHandler::actionPerformed): Don't
+ 	calculate the timer stop value. Let the
+ 	MouseListeners find the stop location.
+ 	(getPreferredHorizontalSize): Re-implement.
+ 	(getPreferredVerticalSize): ditto.
+ 	(getMinimumHorizontalSize): ditto.
+ 	(getMinimumVerticalSize): ditto.
+ 	(getPreferredSize): ditto.
+ 	(getMinimumSize): ditto.
+ 	(getMaximumSize): ditto.
+ 	(paintTicks): Use doubles to find the
+ 	tick location.
+ 	(paintHorizontalLabel):  Use preferredSize
+ 	as initial width and height.
+ 	(paintVerticalLabel): ditto.
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JLabel.java: Changed 
+ 	property strings to constants.
+ 	(DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY):
+ 	New property.
+ 	(setText): Change mnemonic index if
+ 	text is too short.
+ 	(setDisplayedMnemonicIndex): Fire property
+ 	change event.
+ 	(getDisplayedMnemonicIndex): Remove check
+ 	against short text.
+ 
+ 2004-03-19 Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	(drawImage(img,xform,obs)): Invert xform before
+ 	passing the xform to cairo.
+ 	(drawImage(img,x,y,bgcolor,obs)): Implemented.
+ 	(drawImage (img,x,y,w,h,bgcolor,obs)): Partly
+ 	implemented.
+ 	(drawImage (img,x,y,w,h,obs)): Implemented.
+ 	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,
+ 	bgcolor,obs)): Partly implemented.
+ 	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,obs)):
+ 	Implemented.
+ 	* java/awt/image/BufferedImage.java:
+ 	(copyData): if dest is null, create raster with same
+ 	dimensions as the current image.
+ 
+ 2004-03-19  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/plaf/basic/BasicLabelUI.java 
+ 	(getPreferredSize): Use layoutCL.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java 
+ 	(getPreferredButtonSize): Start with empty view rect, layout using
+ 	component's preferred alignment.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java: Add some Label and
+ 	List defaults.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Component.java
+ 	(show): Dispatch COMPONENT_SHOWN ComponentEvent.
+ 	(hide): Dispatch COMPONENT_HIDDEN ComponentEvent.
+ 	(move): Erase old bounds and repaint new bounds. Dispatch
+ 	COMPONENT_MOVED ComponentEvent.
+ 	(resize): Erase old bounds and repaint new bounds. Dispatch
+ 	COMPONENT_RESIZED ComponentEvent.
+ 	(reshape): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
+ 	ComponentEvents.
+ 	* java/awt/Window.java
+ 	(setBoundsCallback): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
+ 	ComponentEvents.
+ 
+ 2004-03-19  Olga Rodimina  <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	(setRenderingHint): Added implementation of 
+ 	Interpolation rendering hints.
+ 	(setRenderingHints): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
+ 	(drawPixels): fixed to allow user to choose type 
+ 	of filtering that should be used when displaying images.
+ 	(cairoSurfaceSetFilter): New method. Sets filter type for 
+ 	interpolation of pixel values.
+ 
+ 2004-03-19  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(calcCellSizes): Rows or columns with zero sizes should still be
+ 	considered for extra space distribution.
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JLabel.java: Re-implement.
+ 	* javax/swing/plaf/basic/BasicLabelUI.java
+ 	Re-implement.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java:
+ 	Added constant.
+ 
+ 2004-03-19  Kim Ho  <kho@redhat.com>
+ 
+ 	* javax/swing/JSlider.java: Fix indentation and comments.
+ 	(setModel): Remove null check to conform with Sun's.
+ 	(setOrientation): Throw exception if not
+ 	HORIZONTAL or VERTICAL.
+ 	(getInverted): Use private variable instead of 
+ 	ComponentOrientation.
+ 	(setInverted): ditto.
+ 	* javax/swing/plaf/basic/BasicSliderUI.java:
+ 	Fix indentation and comments.
+ 	(propertyChange): Remove check for inverted slider, handle
+ 	in main paint.
+ 	(getMinimumSize): Return preferred size.
+ 	(getMaximumSize): ditto.
+ 	(calculateFocusRect): Don't relocate rectangle.
+ 	(drawInverted): Return XOR of the slider's inversion and 
+ 	the component's orientation.
+ 	(paint): Update leftToRightCache
+ 
+ 2004-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java:
+ 	Some reformating to match libgcj's version better.
+ 	* gnu/java/net/PlainSocketImpl.java:
+ 	Some reformating to match libgcj's version better.
+ 	(connect): Javadoc added.
+ 	(SocketInputStream.impl): Not needed, removed.
+ 	(SocketInputStream.SocketInputStream): Likewise.
+ 	(SocketInputStream.mark): Likewise.
+ 	(SocketInputStream.markSupported): Likewise.
+ 	(SocketInputStream.reset): Likewise.
+ 	(SocketInputStream.available): Use implicit pointer to outer class.
+ 	(SocketInputStream.close): Likewise.
+ 	(SocketInputStream.read): Javadoc refined, use implicit pointer to outer class.
+ 	(SocketOutputStream.impl): Not needed, removed.
+ 	(SocketOutputStream.SocketOutputStream): Likewise.
+ 	(SocketOutputStream.close): Use implicit pointer to outer class.
+ 	(SocketOutputStream.flush): Not needed, removed.
+ 	(SocketOutputStream.write): Javadoc refined, use implicit pointer to outer class.
+ 
+ 2004-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Locale.java
+ 	(getISO3Country): Added comment for string comparison optimization.
+ 	(getISO3Language): Likewise.
+ 2004-03-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* include/Makefile.am: Add java_io_VMObjectStreamClass.h generation.
+ 	* include/java_io_VMObjectStreamClass.h: New file.
+ 	* native/jni/java-io/Makefile.am (SOURCES): Add new file.
+ 	* native/jni/java-io/java_io_VMObjectStreamClass.c: New file.
+ 
+ 2004-03-15  Patrik Reali  <reali@acm.org>
+ 	* doc/hacking.texinfo doc/www.gnu.org/benchmarks.wml: link to japitools
+ 	fixed
+ 	* doc/www.gnu.org/home.wml: short news moved to page top
+ 	* doc/www.gnu.org/downloads/downloads.wml: release 0.08 added
+ 
+ 2004-03-15  Patrik Reali  <reali@acm.org>
+ 	* doc/www.gnu.org/announce/20040313.wml doc/www.gnu.org/Makefile
+ 	doc/www.gnu.org/announce/Makefile doc/www.gnu.org/newsitems.txt:
+ 	classpath 0.08 release news item
+ 	* doc/www.gnu.org/home.wml: broken links to JDK comparison fixed
+ 	* doc/www.gnu.org/events/fosdem04.wml: link to Tom's slides
+ 	* doc/www.gnu.org/faq/faq.wml: entry on free java needs
+ 
+ 2004-03-13  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Class.java (resourcePath): If the resource path is
+ 	absolute chop off the leading / and if it is relative, but the
+ 	class doesn't have a package, don't prepend the /.
+ 
+ 2004-03-13  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Thread.java: Removed unnecessary initialization of
+ 	static field.
+ 	* java/lang/ThreadGroup.java (list): Changed print to println.
+ 
+ 2004-03-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.08+cvs.
+ 
+ 2004-03-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Set version to 0.08.
+ 	* NEWS: Update with interesting items.
+ 	* TODO: Point to http://www.gnu.org/software/classpath/tasks.html
+ 
+ 2004-03-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java: Use fallback when
+ 	MissingResourceException is thrown.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getVScrollbarWidth):
+ 	Don't access ws when it is null.
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight):
+ 	Likewise.
+ 
+ 2004-03-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(connectJObject): Replace printf calls with g_assert statements.
+ 	Move property-notify-event signal connection to ...
+ 	(connectSignals): Connect property-notify-event signal.  Iterate
+ 	through the vbox's children to find layout.
+ 
+ 2004-03-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/BufferedReader.java: Use &lt;=, not &lt;&eq; to make gjdoc
+ 	happy.
+ 
+ 2004-03-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Stephen Crawley
+ 	* java/io/FilePermission.java (implies): Use String.length() -1 to
+ 	access last char of String.
+ 
+ 2004-03-11  Ito Kazumitsu  <ito.kazumitsu@hitachi-cable.co.jp>
+ 
+ 	* java/net/URI.java (toURL): Implemented.
+ 
+ 2003-03-11  Ito Kazumitsu  <ito.kazumitsu@hitachi-cable.co.jp>
+ 
+ 	* java/net/URI.java
+ 	(URI_REGEXP) updated to contain scheme specific part.
+ 	(SCHEME_SPEC_PART_GROUP) new constant.
+ 	(AUTHORITY_GROUP, PATH_GROUP, QUERY_GROUP, FRAGMENT_GROUP)
+ 	updated to make room for SCHEME_SPEC_PART_GROUP.
+ 	(parseURI) parse scheme specific part.
+ 	(resolve, isAbsolute, isOpaque, getRawSchemeSpecificPart,
+ 	getSchemeSpecificPart, getAuthority, getUserInfo, getPath,
+ 	getQuery, getFragment) implemented.
+ 
+ 2002-03-11  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* libraries/javalib/java/net/URI.java
+ 	partially implemented using java.util.regex.
+ 	(URI_REGEXP) new constant. Used to parse URIs.
+ 	(SCHEME_GROUP) new constant representing index of scheme group
+ 	in parsed URI.
+ 	(AUTHORITY_GROUP) new constant representing index of authority
+ 	group in parsed URI.
+ 	(PATH_GROUP) new constant representing index of path group in
+ 	parsed URI.
+ 	(QUERY_GROUP) new constant representing index of query group in
+ 	parsed URI.
+ 	(FRAGMENT_GROUP) new constant representing index of fragment
+ 	group in parsed URI.
+ 	(getURIGroup) new static utility method.
+ 	(parseURI) implemented.
+ 	(quote) stub for new static utility method.
+ 	(quoteAuthority) stub for new static utility method.
+ 	(quoteHost) stub for new static utility method.
+ 	(quotePath) stub for new static utility method.
+ 	(quoteUserInfo) stub for new static utility method.
+ 	(URI) implemented.
+ 	(create) don't throw URISyntaxException. Implemented.
+ 	(toString) implemented.
+ 
+ 2004-03-11  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	Reported by: Adam Heath <doogie@debian.org>
+ 	* gnu/javax/rmi/CORBA/DelegateFactory.java (getInstance): Use context
+ 	class loader.
+ 
+ 2004-03-09  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/io/BufferedInputStream.java (marktarget): New field for max
+ 	mark limit.
+ 	(CHUNKSIZE): New constant for incremental mark buffer allocation.
+ 	(mark): Use new fields.
+ 	(read): Likewise.
+ 	(read(byte[],int,int)): Likewise.
+ 	(skip): Likewise.
+ 	(refill): Likewise.
+ 
+ 2004-03-08  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* java/text/AttributedString.java
+ 	(addAttribute(AttributedCharacterIterator.Attribute,Object,int,int)):
+ 	Use HashMap instead of Hashtable since value can be null, and
+ 	you can not store a null value in a Hashtable.
+ 
+ 2004-03-08  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/text/DateFormatSymbols.java: Fixed copyright notice.
+ 
+ 2004-03-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/beans/BeanDescriptor.java (BeanDescriptor):
+ 	Set the FeatureDescriptor programmatic name.
+ 
+ 2004-03-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Add gnu/regexp/Makefile and
+ 	resource/gnu/regexp/Makefile
+ 	* gnu/Makefile.am (SUBDIRS): Add regexp.
+ 	* gnu/regexp/Makefile.am: New file.
+ 	* gnu/regexp/CharIndexed.java: Imported.
+ 	* gnu/regexp/CharIndexedCharArray.java: Likewise.
+ 	* gnu/regexp/CharIndexedInputStream.java: Likewise.
+ 	* gnu/regexp/CharIndexedString.java: Likewise.
+ 	* gnu/regexp/CharIndexedStringBuffer.java: Likewise.
+ 	* gnu/regexp/RE.java: Likewise.
+ 	* gnu/regexp/REException.java: Likewise.
+ 	* gnu/regexp/REFilterInputStream.java: Likewise.
+ 	* gnu/regexp/REMatch.java: Likewise.
+ 	* gnu/regexp/REMatchEnumeration.java: Likewise.
+ 	* gnu/regexp/RESyntax.java: Likewise.
+ 	* gnu/regexp/REToken.java: Likewise.
+ 	* gnu/regexp/RETokenAny.java: Likewise.
+ 	* gnu/regexp/RETokenBackRef.java: Likewise.
+ 	* gnu/regexp/RETokenChar.java: Likewise.
+ 	* gnu/regexp/RETokenEnd.java: Likewise.
+ 	* gnu/regexp/RETokenEndSub.java: Likewise.
+ 	* gnu/regexp/RETokenOneOf.java: Likewise.
+ 	* gnu/regexp/RETokenPOSIX.java: Likewise.
+ 	* gnu/regexp/RETokenRange.java: Likewise.
+ 	* gnu/regexp/RETokenRepeated.java: Likewise.
+ 	* gnu/regexp/RETokenStart.java: Likewise.
+ 	* gnu/regexp/RETokenWordBoundary.java: Likewise.
+ 	* gnu/regexp/UncheckedRE.java: Likewise.
+ 	* java/util/regex/Matcher.java: Add gnu.regexp wrappers.
+ 	* java/util/regex/Pattern.java: Likewise.
+ 	* resource/gnu/Makefile.am (SUBDIRS): Add regexp.
+ 	* resource/gnu/regexp/Makefile.am: New file.
+ 	* resource/gnu/regexp/MessagesBundle.properties: Imported.
+ 	* resource/gnu/regexp/MessagesBundle_fr.properties: Likewise.
+ 
+ 2004-03-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/Makefile.am (propertydirs, propertyfiles): New variables.
+ 	(resources): Create dirs and install property files.
+ 
+ 2004-03-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainSocketImpl.java
+ 	(SocketInputStream): Made final.
+ 	(read(byte[] buf)): Removed, redundant.
+ 	(SocketOutputStream): Made final.
+ 	(write(byte[] buf)): Removed, redundant.
+ 
+ 2004-03-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java: Reformated.
+ 	(isAbsolute): Simplified code.
+ 	(isHidden): Likewise.
+ 	(mkdir): Likewise.
+ 	(compareTo): Handle case sensitiveness.
+ 
+ 2004-02-28    Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/AttributedStringIterator.java
+ 	(getAllAttributesKey): Return only keys concerned
+ 	by the current iterator.
+ 	(getAttributes): Use strict inequality for
+ 	end_index. 
+ 
+ 2004-02-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Thread.java: Rearranged some methods. Renamed some
+ 	variables.
+ 	(runnable): Renamed from 'toRun'.
+ 	(destroy): Just throw NoSuchMedthodError as Sun does.
+ 	(setContextClassLoader): Made sychronized.
+ 
+ 2004-02-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractButton.java: Made several constants final.
+ 
+ 2004-02-27  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/StringBuffer.java: No need to NULL out remainder of
+ 	buffer since ensureCapacity_unsynchronized will have done this for
+ 	us.
+ 
+ 2004-02-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(send): Check if target address is resolved.
+ 	* gnu/java/nio/FileLockImpl.java
+ 	(finalize): Made protected.
+ 	* java/nio/channels/FileChannel.java
+ 	(MapMode.READ_ONLY): Made final.
+ 	(MapMode.READ_WRITE): Made final.
+ 	(MapMode.PRIVATE): Made final.
+ 	* java/nio/channels/SocketChannel.java
+ 	(open): Simplified code.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(registered): Unused, removed.
+ 	(keyFor): Check channel is open, only locate key
+ 	and not add a new one.
+ 	(register): Don't delete attachments.
+ 
+ 2004-02-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Handler.java
+ 	(): Removed unneeded check for file != null. java.net.URL.getFile()
+ 	returns an empty string but never null.
+ 
+ 2004-02-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java
+ 	(dateFormat1, dateformat2, dateformat3): New fields.
+ 	(dateformats_initialized): New field for lazy initialization of date
+ 	format fields.
+ 	(getHeaderFieldDate): Rewritten to use DateFormat.parse() instead of
+ 	the deprecated Date(String) constructor. This implementation
+ 	(initializeDateFormats): New method,
+ 
+ 2004-02-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/ComponentDataBlitOp.java
+ 	(INSTANCE): Made final.
+ 	* gnu/java/awt/image/ImageDecoder.java:
+ 	Reworked imports.
+ 	(cm): Unused, removed.
+ 
+ 2004-02-25  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readClassDescriptor): Keep elements of the mapping non null.
+ 	(checkTypeConsistency): New method.
+ 	(readFields): Fixed main loop and base logic. Small reindentation.
+ 
+ 	* java/io/ObjectStreamField.java
+ 	(lookupField): New method to update the field reference.
+ 	(checkFieldType): New method.
+ 	
+ 	* java/io/ObjectStreamClass.java
+ 	(setClass, setFields): Call lookupField when building the field
+ 	database. Check the real field type.
+ 
+ 2004-02-17  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/CharBufferImpl.java:  Inline super constructor.
+ 	* java/nio/DoubleBufferImpl.java:  Likewise.
+ 	* java/nio/FloatBufferImpl.java:  Likewise.
+ 	* java/nio/IntBufferImpl.java:  Likewise.
+ 	* java/nio/LongBufferImpl.java:  Likewise.
+ 	* java/nio/ShortBufferImpl.java:  Likewise.
+ 	* java/nio/CharBuffer.java:  Remove unused constructor.
+ 	* java/nio/DoubleBuffer.java:  Likewise.
+ 	* java/nio/FloatBuffer.java:  Likewise.
+ 	* java/nio/IntBuffer.java:  Likewise.
+ 	* java/nio/LongBuffer.java:  Likewise.
+ 	* java/nio/ShortBuffer.java:  Likewise.
+ 	* java/nio/CharViewBufferImpl.java:  New convenience constructor.
+ 	Fix buggy call to super constructor.
+ 	* java/nio/DoubleViewBufferImpl.java:  Likewise.
+ 	* java/nio/FloatViewBufferImpl.java:  Likewise.
+ 	* java/nio/IntViewBufferImpl.java:  Likewise.
+ 	* java/nio/LongViewBufferImpl.java:  Likewise.
+ 	* java/nio/ShortViewBufferImpl.java:  Likewise.
+ 	
+ 	* java/nio/ByteBuffer.java (endian):  Make non-private so other
+ 	java.nio classes can inherit it.
+ 	(<init>):  Don't bother clearing array_offset.
+ 	* java/nio/ByteBuffer.java (allocate):  Re-implement using wrap.
+ 	* java/nio/ByteBuffer.java (get(byte[],int,int)):  Check underflow.
+ 	Remove redundant test.
+ 
+ 	* java/nio/ByteBufferImpl.java (asCharBuffer, asShortBuffer,
+ 	asIntBuffer, asLongBuffer, asFloatBuffer, asDoubleBuffer):
+ 	Use new XxxViewBufferImpl constructors.
+ 	* java/nio/MappedByteBufferImpl.java:  Likewise.
+ 	* java/nio/DirectByteBufferImpl.java:  Likewise.
+ 
+ 	* java/nio/ByteBufferImpl.java:  Remove one constructor.
+ 	Inline super in remaining constructor.
+ 	* java/nio/ByteBuffer.java:  Remove unused constructor.
+ 
+ 	* java/nio/ByteBufferImpl.java (shiftDown):  New optimized method.
+ 
+ 	* java/nio/ByteBufferImpl.java (get, put):  Add array_offset.
+ 
+ 2004-02-17  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/channels/spi/AbstractInterruptibleChannel.java (close):
+ 	Set closed before calling implCloseChannel, as in the spec.
+ 
+ 2004-02-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/Makefile.am (EXTRA_DIST): Remove ToggleButtonModel.java.
+ 	* javax/swing/plaf/basic/Makefile.am (EXTRA_DIST): Remove
+ 	BasicDefaults.java. Add BasicButtonListener.java and
+ 	BasicRootPaneUI.java.
+ 
+ 2004-02-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/AbstractButton.java (getSelectedIcon): Make public
+ 	(getRolloverSelectedIcon): Likewise.
+ 
+ 2004-02-14  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/ToggleButtonModel.java: Remove dead class.
+ 	* javax/swing/plaf/basic/BasicDefaults.java: Remove dead class.
+ 	* javax/swing/plaf/basic/BasicButtonListener.java: New class.
+ 	* javax/swing/plaf/basic/BasicRootPaneUI.java: New class.
+ 	* Makefile.am: Update for new and removed files.
+ 	* Makefile.in: Regenerate.
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Initialize default hints.
+ 	* javax/swing/AbstractButton.java 
+ 	(AbstractButton): Initialize fields correctly in ctor.
+ 	* javax/swing/JCheckbox.java 
+ 	(JCheckBox): Override painting flags.
+ 	* javax/swing/DefaultButtonModel.java: Conform to sun.
+ 	* javax/swing/JComponent.java (paint): Fill with background color
+ 	if available.
+ 	(processComponentKeyEvent)
+ 	(processFocusEvent)
+ 	(processKeyEvent)
+ 	(processMouseMotionEvent): Remove event-consuming empty methods.
+ 	(getUIClassID): Return "ComponentUI" not "JComponent"
+ 	* javax/swing/JFrame.java: Remove some debugging chatter.
+ 	(JFrame): Subscribe to window events.
+ 	* javax/swing/JRadioButton.java 
+ 	(JRadioButton): Override painting flags.
+ 	* javax/swing/JRootPane.java 
+ 	(JRootPane): Set background from UIDefaults.
+ 	* javax/swing/JToggleButton.java 
+ 	(ToggleButtonModel): New inner class.
+ 	(JToggleButton): Override layout alighment.
+ 	* javax/swing/SwingUtilities.java:
+ 	(getLocalBounds): Return width and height, not x and y.
+ 	(calculateInnerArea): Use local bounds, not bounds.
+ 	(layoutCompoundLabel): Provide overridden form.
+ 	(layoutCompoundLabel): Correct bugs.
+ 	* javax/swing/UIDefaults.java: Correct comment.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java: 
+ 	Move most logic into defaults, external listener.
+ 	(paintIcon): Implement icon painting.
+ 	(paint): Fix state painting to conform to changes in model.
+ 	* javax/swing/plaf/basic/BasicCheckBoxUI.java:
+ 	Remove most dead/wrong methods.
+ 	(getDefaultIcon): Return defaults.getIcon("CheckBox.icon").
+ 	* javax/swing/plaf/basic/BasicIconFactory.java:
+ 	(DummyIcon): New class.
+ 	(getMenuItemCheckIcon)
+ 	(getMenuItemArrowIcon) 
+ 	(getMenuArrowIcon)
+ 	(getCheckBoxMenuItemIcon)
+ 	(getRadioButtonMenuItemIcon)
+ 	(createEmptyFrameIcon): Return DummyIcons, not null.
+ 	(getCheckBoxIcon): Implement an icon that looks like sun's.
+ 	(getRadioButtonIcon): Implement an icon that looks like sun's.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java 
+ 	(initComponentDefaults): Fix impossible values, add some missing.
+ 	* javax/swing/plaf/basic/BasicPanelUI.java (gap): Remove field.
+ 	* javax/swing/plaf/basic/BasicRadioButtonUI.java:
+ 	Remove most dead/wrong methods.
+ 	(icon): New field.
+ 	(getDefaultIcon): New method.
+ 	* javax/swing/plaf/basic/BasicToggleButtonUI.java:
+ 	Remove most dead/wrong methods.
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java
+ 	(getDefaults): Return super.getDefaults(), not BasicDefaults.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ 	(Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect):
+ 	Implement "clearing" as drawing, when on pixmap drawables.
+ 
+ 	* javax/swing/JButton.java (getUIClassID): 
+ 	* javax/swing/JCheckBox.java (getUIClassID):
+ 	* javax/swing/JEditorPane.java (getUIClassID):
+ 	* javax/swing/JLabel.java (getUIClassID): 
+ 	* javax/swing/JList.java (getUIClassID): 
+ 	* javax/swing/JOptionPane.java (getUIClassID): 
+ 	* javax/swing/JPanel.java (getUIClassID): 
+ 	* javax/swing/JPasswordField.java (uiClassID): 
+ 	* javax/swing/JRadioButton.java (getUIClassID): 
+ 	* javax/swing/JRootPane.java (getUIClassID): 
+ 	* javax/swing/JScrollPane.java (getUIClassID): 
+ 	* javax/swing/JTabbedPane.java (getUIClassID): 
+ 	* javax/swing/JToggleButton.java (getUIClassID): 
+ 	* javax/swing/JTree.java (getUIClassID): 
+ 	* javax/swing/JViewport.java (getUIClassID): 
+ 	* javax/swing/text/JTextComponent.java (getUIClassID):
+ 	Return "fooUI" not "Jfoo"
+ 
+ 2004-02-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
+ 	New file. Forgot this to add in a previous commit.
+ 
+ 2004-02-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java,
+ 	gnu/java/awt/EmbeddedWindowSupport.java,
+ 	gnu/java/awt/peer/EmbeddedWindowPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java,
+ 	include/gnu_java_awt_EmbeddedWindow.h,
+ 	include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h,
+ 	native/jni/java-awt/gnu_java_awt_EmbeddedWindow.c,
+ 	native/jni/java-awt/Makefile.am,
+ 	native/jni/java-awt/.cvsignore: New files.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	* configure.ac (AC_OUTPUT_FILES): Added native/jni/java-awt/Makefile
+ 	* gnu/java/awt/Makefile.am
+ 	(EXTRA_DIST): Added EmbeddedWindow.java and
+ 	EmbeddedWindowSupport.java.
+ 	* gnu/java/awt/peer/Makefile.am
+ 	(EXTRA_DIST): Added EmbeddedWindowPeer.java.
+ 	* gnu/java/awt/peer/gtk/Makefile.am
+ 	(EXTRA_DIST): Added GtkEmbeddedWindowPeer.java.
+ 	* include/Makefile.am: Generate gnu_java_awt_EmbeddedWindow.h and
+ 	gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h.
+ 	* native/jni/Makefile.am: Added subdir java-awt.
+ 	* native/jni/gtk-peer/Makefile.am: Added
+ 	gnu_java_awt_EmbeddedWindow.c.
+ 
+ 2004-02-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(setReuseAddress): Use Boolean.valueOf() instead of creating a new
+ 	Boolean object.
+ 	(setBroadcast): Likewise.
+ 	* java/net/MulticastSocket.java
+ 	(setLoopbackMode): Likewise.
+ 	* java/net/ServerSocket.java
+ 	(setReuseAddress): Likewise.
+ 	* java/net/Socket.java
+ 	(setTcpNoDelay): Likewise.
+ 	(setSoLinger): Likewise.
+ 	(setOOBInline): Likewise.
+ 	(setKeepAlive): Likewise.
+ 	(setReuseAddress): Likewise.
+ 	* java/net/URLStreamHandler.java
+ 	(hostSEquals): Fix checking host addresses.
+ 	(toExternalForm): Dont check protocol for null. We know already its
+ 	not null.
+ 
+ 2004-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java:
+ 	Reformated copyright boilerplate.
+ 
+ 2004-02-11  Per Bothner  <per@bothner.com>
+ 
+ 	* java/nio/ByteBuffer.java (shiftDown):  New helper method.
+ 	* java/nio/ByteBufferImpl.java (compact):  Use new shiftDown method.
+ 	* sava/nio/ByteBufferHelper.java:  Remove redundant 'final' specifiers.
+ 	Pass ByteOrder parameter to most methods, since the underlying
+ 	ByteBuffer's order isn't always what we should use.
+ 	* java/nio/ByteBufferImpl.java:  Pass byte-order various places.
+ 	* java/nio/DirectByteBufferImpl.java:  Likewise.
+ 	Use ByteBufferHelper methods.
+ 	* java/nio/MappedByteBufferImpl.java:  Likewise.
+ 	(compact):  Use shiftDown.
+ 	* java/nio/CharViewBufferImpl.java (<init>):  Pass byte-order.
+ 	(get, put):  Use ByteBufferHelper.
+ 	(compact):  Use new shiftDown method.
+ 	(duplicate(boolean)):  New helper method.
+ 	(duplicate, asReadOnlyBuffer):  Use it.
+ 	(order):  Return endian field.
+ 	* java/nio/DoubleViewBufferImpl.java:  Likewise.
+ 	* java/nio/FloatViewBufferImpl.java:  Likewise.
+ 	* java/nio/IntViewBufferImpl.java:  Likewise.
+ 	* java/nio/LongViewBufferImpl.java:  Likewise.
+ 	* java/nio/ShortViewBufferImpl.java:  Likewise.
+ 	* java/nio/CharViewBufferImpl.java (subsequence):  Redundant test.
+ 	* java/nio/DirectByteBufferImpl.java (shiftDown):  New native method.
+ 	(compact):  Re-implement using shiftDown.
+ 
+ 2004-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/java_nio_DirectByteBufferImpl.h: Regenerated.
+ 	* native/jni/java-nio/java_nio_DirectByteBufferImpl.c
+ 	(shiftDown): New method.
+ 
+ 2004-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/ref/Reference.java
+ 	(Reference): Fixed typo.
+ 
+ 2004-02-11  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/UndoManager.java: Re-written from scratch.
+ 
+ 2004-02-10  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java
+ 	(calcCompSize): Invisible components get zero dimensions.
+ 	* java/awt/Button.java
+ 	(setLabel): Set actionCommand.
+ 	* java/awt/Component.java
+ 	(show): Invalidate component and parent container.
+ 	(hide): Likewise.
+ 
+ 2004-02-10  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/GridBagLayout.java
+ 	(GridBagLayout): New private field, internalcomptable.
+ 	(lookupInternalConstraints): New method.
+ 	(ArrangeGrid): Use components' MINSIZE. Use internalcomptable.
+ 	(GetLayoutInfo): Reimplement.
+ 	(calcCellSizes): Ignore rows/columns with size 0.
+ 
+ 2004-02-10  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java
+ 	(gtkSetLabel): New native method definition.
+ 	(setLabel): Use gtkSetLabel.
+ 	* include/gnu_java_awt_peer_gtk_GtkButtonPeer.h: Regenerated.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetLabel): New method.
+ 
+ 2004-02-10  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/io/ObjectInputStream.java (readClassDescriptor): Avoid the
+ 	overflow of fieldmapping.
+ 
+ 2004-02-06  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* java/io/BufferedReader.java (sbuf): New field.
+ 	(readLine): Use String.valueOf instead of new String() as per
+ 	Per Bothner's suggestion. Use instance sbuf field instead of a
+ 	local StringBuffer instance.
+ 
+ 2004-02-06  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java (getTransform): Never
+ 	return null. 
+ 
+ 2004-02-06  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/SwingUtilities.java: Many new functions.
+ 	* java/awt/Container.java (LightweightDispatcher): Reimplement.
+ 	* javax/swing/basic/BasicGraphicsUtils.java 
+ 	(getPreferredButtonSize): Start layout from top-left corner.
+ 
+ 2004-02-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIOServerSocket.java
+ 	(impl): Unused, removed.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(finnishConnect): Don't throw NoConnectionPendingException if not
+ 	connected or no connection pending.
+ 
+ 2004-02-06  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(inChannelOperation): New field.
+ 	(isInChannelOperation): New accessor.
+ 	(setInChannelOperation): New modifier.
+ 	(receive): Use capacity() - position() of destination
+ 	buffer instead of remaining(). Set and reset our "in
+ 	channel operation indicator" before and after delegating
+ 	the receive to our datagram socket. Removed testing code.
+ 	Update destination buffer's current position if it is
+ 	backed by a byte array (hasArray() is true).
+ 	(send): Set and reset our "in channel operation indicator"
+ 	before and after delegating the send to our datagram socket.
+ 	Removed testing code. Update source buffer's current position
+ 	if it is backed by a byte array (hasArray() is true).
+ 	* gnu/java/nio/SocketChannelImpl.java (read(ByteBuffer)):
+ 	Use capacity() - position() of destination buffer instead
+ 	of remaining().
+ 	* java/net/DatagramSocket.java (receive): Don't throw an
+ 	IllegalBlockingModeException if we have a non-blocking
+ 	channel which initiated this operation.
+ 	(send): Likewise.
+ 
+ 2004-02-06  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/net/PlainSocketImpl.java 
+ 	(inChannelOperation): New field.
+ 	(isInChannelOperation): New accessor.
+ 	(setInChannelOperation): New modifier.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(accept): Set and reset our server socket's PlainSocketImpl's
+ 	"in channel operation" indicator before and after delegating
+ 	the accept to our server socket.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(connect): Set and reset our socket's PlainSocketImpl's "in channel
+ 	operation" indicator before and after delegating the operation to
+ 	our socket.
+ 	(read): Likewise.
+ 	(write): Likewise.
+ 	* java/net/ServerSocket.java (implAccept): Don't throw an
+ 	IllegalBlockingModeException if we have a non-blocking
+ 	channel which initiated this accept operation.
+ 	* java/net/Socket.java (connect): Don't throw an
+ 	IllegalBlockingModeException if we have a non-blocking
+ 	channel which initiated this connect operation.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(configureBlocking): Only call implConfigureBlocking() if
+ 	the desired blocking mode is different from our current one.
+ 
+ 2004-02-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Scrollbar.java
+ 	(setBlockIncrement): Fixed.
+ 
+ 2004-02-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/datatransfer/DataFlavor.java
+ 	(imageFlavor): Javadoc added.
+ 	(javaJVMLocalObjectType): Fixed.
+ 
+ 2004-02-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/GenericBuffer.cpp,
+ 	* gnu/java/nio/GenericMappedByteFileBuffer.cpp:
+ 	Removed.
+ 
+ 2004-02-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (getFont): Return a default font
+ 	instead of null.
+ 
+ 2004-02-05  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* java/awt/geom/AffineTransform.java:
+ 	Corrected comments on the field definitions 
+ 	for m11 and m10
+ 	(shear): Fixed few errors that caused shear 
+ 	transformation to be performed incorrectly.
+ 	(createInverse): Fixed to return correct inverse
+ 	of the given matrix.
+ 
+ 2004-02-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Scrollbar.java (next_scrollbar_number): New field.
+ 	(Scrollbar (int, int, int, int, int)): Make default page
+ 	increment 10.
+ 	(setValues): Only call peer.setValues if one of the values has
+ 	changed.
+ 	(generateName): New method.
+ 	(getUniqueLong): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(range_scrollbar): Remove structure.
+ 	(post_adjustment_event): Remove function.
+ 	(post_change_event): Accept jobject argument.
+ 	(create): Cast jints to gdoubles.  Round scrollbar values to the
+ 	nearest integer.  Clamp min, max and value settings.
+ 	(connectJObject): Connect hook to widget->window.
+ 	(connectSignals): Remove range_scrollbar structure variables.
+ 	Remove "move-slider" connection.  Pass global peer reference to
+ 	"value-changed" callback.
+ 	(setLineIncrement): Cast jint value to gdouble.
+ 	(setPageIncrement): Likewise.
+ 	(setValues): Likewise.  Clamp min, max and value settings.
+ 
+ 2004-02-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractCellEditor.java
+ 	(getCellEditorValue): Removed.
+ 	* javax/swing/Box.java: Reformated.
+ 	(serialVersionUID): New field.
+ 	* javax/swing/ButtonGroup.java:
+ 	Removed some weird whitespace.
+ 	* javax/swing/CellEditor.java: Reformated.
+ 	* javax/swing/CellRendererPane.java
+ 	(serialVersionUID): New field.
+ 	(AccessibleCellRendererPaneserialVersionUID): New field.
+ 	* javax/swing/DefaultListModel.java
+ 	(serialVersionUID): New field.
+ 	* javax/swing/JEditorPane.java
+ 	(serialVersionUID): New field.
+ 	(setPage): Throws IOException.
+ 	(addHyperlinkListener): Implemented.
+ 	(removeHyperlinkListener): Implemented.
+ 	(getHyperlinkListener): New method.
+ 	* javax/swing/JFileChooser.java
+ 	(serialVersionUID): New field.
+ 	(AccessibleJFileChooser.serialVersionUID): New field.
+ 	(addActionListener): Implemented.
+ 	(removeActionListener): Implemented.
+ 	(getActionListeners): New method.
+ 	* javax/swing/JFormattedTextField.java
+ 	(serialVersionUID): New field.
+ 	(AbstractFormatter.serialVersionUID): New field.
+ 	(clone): Throws CloneNotSupportedException
+ 	(setEditValid): Add missing argument.
+ 	(stringToValue): Throws ParseExcpetion.
+ 	(valueToString): Throws ParseException.
+ 	(commitEdit): Throws ParseException.
+ 	* javax/swing/JLabel.java
+ 	(serialVersionUID): New field.
+ 	* javax/swing/JList.java
+ 	(serialVersionUID): New field.
+ 	(addListSelectionListener): Reformated.
+ 	(removeListSelectionListener): Reformated.
+ 	(getListSelectionListeners): New method.
+ 	* javax/swing/colorchooser/AbstractColorChooserPanel.java:
+ 	Reformated.
+ 	(serialVersionUID): New field.
+ 	* javax/swing/table/AbstractTableModel.java
+ 	(getValueAt): Removed.
+ 	(getColumnCount): Removed.
+ 	(getRowCount): Removed.
+ 
+ 2004-02-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/directory/Makefile.am,
+ 	javax/naming/event/Makefile.am,
+ 	javax/naming/ldap/Makefile.am,
+ 	javax/naming/spi/Makefile.am,
+ 	javax/rmi/CORBA/Makefile.am,
+ 	javax/rmi/Makefile.am,
+ 	javax/security/auth/x500/Makefile.am,
+ 	javax/transaction/Makefile.am,
+ 	javax/transaction/xa/Makefile.am
+ 	(EXTRA_DIST): Added package.html.
+ 	* javax/naming/directory/package.html,
+ 	javax/naming/event/package.html,
+ 	javax/naming/ldap/package.html,
+ 	javax/naming/spi/package.html,
+ 	javax/rmi/CORBA/package.html,
+ 	javax/rmi/package.html,
+ 	javax/security/auth/x500/package.html,
+ 	javax/transaction/package.html,
+ 	javax/transaction/xa/package.html: New files.
+ 
+ 2004-02-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* pkg.m4: New file.
+ 
+ 2004-02-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: Fixed little bug (s/gthread/gthread-2.0/).
+ 	* doc/hacking.texinfo (API COmpatibility): Added menu to make makeinfo silent.
+ 
+ 2004-02-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Thread.java
+ 	(Thread): Merged extensive javadoc from libgcj.
+ 	(setName): Do explicit null pointer check.
+ 	(toString): Reformated. Simplified javadoc.
+ 
+ 2004-02-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac: No need to call AC_PROG_MAKE_SET explicitely.
+ 	Define conditiional for building glibj.zip. Simplified GTK checks.
+ 	* lib/Makefile.am: Build glibj.zip conditionally.
+ 	* native/jni/gtk-peer/Makefile.am: Removed references of GTHREAD_*
+ 	and LIBART_*, all is now in GTK_*.
+ 
+ 2004-02-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/Deflater.java,
+ 	java/util/zip/DeflaterOutputStream.java,
+ 	java/util/zip/GZIPInputStream.java,
+ 	java/util/zip/GZIPOutputStream.java:
+ 	Merged class head with libgcj.
+ 
+ 2004-02-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java,
+ 	java/awt/BorderLayout.java, java/awt/CardLayout.java,
+ 	java/awt/CheckboxGroup.java, java/awt/Choice.java,
+ 	java/awt/Component.java, java/awt/Container.java,
+ 	java/awt/FontMetrics.java, java/awt/GridBagLayout.java,
+ 	java/awt/LayoutManager2.java, java/awt/List.java,
+ 	java/awt/Menu.java, java/awt/MenuBar.java,
+ 	java/awt/MenuItem.java, java/awt/Polygon.java,
+ 	java/awt/Rectangle.java, java/awt/ScrollPane.java,
+ 	java/awt/Scrollbar.java, java/awt/TextArea.java,
+ 	java/awt/TextField.java,
+ 	java/awt/image/renderable/RenderContext.java,
+ 	javax/swing/JApplet.java: Fix handling of alias methods, where a
+ 	method has been deprecated in favour of a new one with the same
+ 	funtion but a different name.  Put the method implementation in
+ 	the deprecated method and have the new method call the
+ 	deprecated one.  Make all other code call the new method.
+ 
+ 2004-02-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* doc/hacking.texinfo (Serialization): Add section header.
+ 	(Deprecated Methods): New section.
+ 
+ 2004-02-02  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/lang/Thread.java (setDaemon): Allow daemon state to be
+ 	changed for dead threads.
+ 
+ 2004-02-02  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/io/ObjectInputStream.java: Made all calls
+ 	to dumpElement[ln] conditional on dump flag. (readObject): Changed to
+ 	use cached info from ObjectStreamClass. (readClassDescriptor):
+ 	Cache more information in ObjectStreamClass. (processResolution,
+ 	readFields): Use cached info from ObjectStreamClass.
+ 	(newObject): Throw exception instead of returning null for failure.
+ 	(getField, getMethod, callReadMethod, setBooleanField, setByteField,
+ 	setCharField, setDoubleField, setFloatField, setIntField,
+ 	setLongField, setShortField, setObjectField, readObjectParams):
+ 	Removed. (dumpElement, dumpElementln): Removed dump flag condition
+ 	check.
+ 	* java/io/ObjectStreamField.java (hasReadMethod): Removed.
+ 	(setClass): Added call to cacheMethods() (findMethod): New method.
+ 	(cacheMethods): New method. (ObjectStreamClass): Added call to
+ 	cacheMethods(). (setFields): Cache fields. (getClassUID): Use
+ 	AccessController.doPrivileged to invoke setAccessible.
+ 	(readObjectMethod, readResolveMethod, realClassIsSerializable,
+ 	realClassIsExternalizable, fieldMapping, firstNonSerializableParent):
+ 	New fields.
+ 	* java/io/ObjectStreamField.java (ObjectStreamField): New constructor.
+ 	(ObjectStreamField): Removed FIXME workaround. (getTypeString,
+ 	isPrimitive): Made safe for cases where type == null.
+ 	(setBooleanField, setByteField, setCharField, setShortField,
+ 	setIntField, setLongField, setFloatField, setDoubleField,
+ 	setObjectField): New methods.
+ 
+ 2004-02-02  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java (parseURL): Fixed support
+ 	for relative file: urls.
+ 
+ 2004-02-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* configure.ac: Add PKG_CHECK_MODULES check for GTHREAD.
+ 	* native/jni/gtk-peer/Makefile.am (libgtkpeer_la_LDFLAGS): Remove
+ 	GLIB_LIBS, add GTHREAD_LIBS.
+ 	(INCLUDES): Add GTHREAD_CFLAGS.
+ 
+ 2004-02-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* doc/hacking.texinfo (Programming Standards): Escape { and } with @
+ 	in examples.
+ 
+ 2004-01-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* resource/java/security/Makefile.am: Removed comment that does not
+ 	apply anymore.
+ 
+ 2004-01-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/hacking.texinfo (Programming Standards): Added more
+ 	guidelines.
+ 
+ 2004-01-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/logging/Makefile.am: Include logging.properties in dist
+ 	tarball.
+ 	* native/jni/Makefile.am: Reworked subdir handling.
+ 	* native/Makefile.am: Likewise.
+ 	* resource/java/security/Makefile.am: Simplified classpath.security
+ 	handling.
+ 
+ 2004-01-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(getOutputStream): Fixed typo.
+ 
+ 2004-01-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.ac (AC_CONFIG_FILES): Removed lib/gen_nio.sh and fixed
+ 	quotation.
+ 	* java/nio/GenericBuffer.cpp: Removed.
+ 	* lib/gen_nio.sh.in: Removed.
+ 	* lib/Makefile.am: Removed rule to regenerate NIO buffer classes.
+ 
+ 2004-01-29  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(gtkLayoutSetVisible): New method
+ 	(setMenuBar): Hide layout before setting MenuBar
+ 	and reshow it after.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(gtkLayoutSetVisible): Hide or show the Gtk Layout.
+ 	* include/gnu_java_awt_peer_gtk_GtkFramePeer.h:
+ 	Regenerated.
+ 
+ 2004-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Thread.java: Reordered methods to match libgcj.
+ 
+ 2004-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java
+ 	(listenerList): Initalize globally.
+ 	(ancestor_list): Removed.
+ 	(veto_list): Removed.
+ 	(change_list): Removed.
+ 	(get_veto_list): Removed.
+ 	(get_change_list): Removed.
+ 	(get_ancestor_list): Removed.
+ 	(removeAncestorListener): Reimplemented.
+ 	(removePropertyChangeListener): Likewise.
+ 	(removeVetoableChangeListener): Likewise.
+ 	(addAncestorListener): Likewise.
+ 	(addPropertyChangeListener): Likewise.
+ 	(addVetoableChangeListener): Likewise.
+ 	(getListeners): New method.
+ 	(getAncestorListeners): Likewise.
+ 	(getVetoableChangeListeners): Likewise.
+ 	(fireVetoableChange): Throws PropertyVetoException.
+ 	* javax/swing/JEditorPane.java
+ 	(JEditorPane): Throws IOException.
+ 
+ 2004-01-28  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(create): Set the default foreground color to
+ 	java.awt.SystemColor.windowText.
+ 
+ 2004-01-28  Kim Ho  <kho@redhat.com>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h:
+ 	New file.
+ 	* include/Makefile.am: Updated.
+ 
+ 2004-01-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java:
+ 	Merged formating with libgcj.
+ 
+ 2004-01-27  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setResizable):
+ 	Override GtkWindowPeer's setResizable method to account for menu
+ 	bar height when setting the frame's size.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Container.java: Merged formating with libgcj.
+ 
+ 2004-01-27  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(gtkWidgetGetDimensions): Remove.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(gtkWidgetGetDimensions): Remove.
+ 	
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (GtkComponentPeer): If
+ 	it is a FileDialog and has dimensions of 0 by 0, then the initial
+ 	size is set to size request plus insets.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+ 	(gtkWidgetGetDimensions): Override method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(gtkWidgetGetDimensions): Override method. Returns size request plus
+ 	insets.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java: Merged copyright year.
+ 
+ 2004-01-27  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (moveLayout): New
+ 	method.
+ 	(setMenuBar): Shift the Gtk layout up/down by the MenuBar
+ 	height and let the Layout Managers readjust anything that
+ 	needs to move.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(moveLayout): New method. Shift everything in the Gtk
+ 	layout in the Y direction by an offset.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java
+ 	(removeMenuBarPeer): Remove MenuBarPeer argument.
+ 	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
+ 	(dispose): Call native method.
+ 	* java/awt/Frame.java (setMenuBar): Create and remove
+ 	MenuBar peers only if the Frame has a peer.
+ 	(addNotify): Create the MenuBar peer if one exists.
+ 	(removeNotify): Remove MenuBar peer if one exists.
+ 	* java/awt/Menu.java: Fix imports.
+ 	(addNotify): Don't use full class name.
+ 	(removeNotify): Call removeNotify on all children.
+ 	* java/awt/MenuBar.java (removeNotify): Call
+ 	removeNotify on all children.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(removeMenuBarPeer): Remove MenuBarPeer argument.
+ 	Iterate through children to find the Frame's MenuBar.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c
+ 	New file.
+ 	(dispose): Remove references to the MenuComponent.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (menuBarHeight): Mark
+ 	private.
+ 	(setMenuBar): Grab MenuBar height and change insets.
+ 	(setBounds): Account for MenuBar height.
+ 	(postInsetsChangedEvent): Ditto.
+ 	(postSizeAllocateEvent): Remove.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(menubar_resize_cb): Remove
+ 	(setMenuBarPeer): Remove callback.
+ 	(getMenuBarHeight): Use size requisition instead of
+ 	allocation.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (postConfigureEvent):
+ 	Fix comments.
+ 	(removeMenuBarPeer): Make package private.
+ 	(setMenuBarPeer): Make package private.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(menubar_resize_cb): Mark attributes unused.
+ 	(getMenuBarHeight): Ditto.
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(connectJObject): Iterate through the vbox's children to find layout.
+ 	And fixed date on last Changelog entry.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* HACKING, INSTALL, configure.ac, doc/hacking.texinfo:
+ 	Updated to depend on autoconf 2.59 and automake 1.7.
+ 	Also depend on GCJ 3.3 in all files.
+ 
+ 2004-01-27  David Jee  <djee@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(addExposeFilter): Handle GtkFramePeer separately.
+ 	(removeExposeFilter): Likewise.
+ 
+ 2004-01-27  Kim Ho  <kho@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight): Added
+ 	MenuBarPeer parameter.
+ 	(removeMenuBarPeer): New native method.
+ 	(setMenuBar): Call remove if menu bar is null. Adjust insets
+ 	appropriately.
+ 	(postSizeAllocateEvent): New method. Called when menu bar size is
+ 	allocated. Adjust insets and redo layout.
+ 	(GtkFramePeer): Set menu bar during frame creation.
+ 	(postConfigureEvent): Adjust position and size to accomodate
+ 	menu bar.
+ 	* java/awt/Frame.java (setMenuBar): addNotify to create menu bar.
+ 	* java/awt/Menu.java (addSeparator): Use peer's addSeparator.
+ 	(addNotify): Create the peer if it doesn't exist and call addNotify
+ 	for the menu's items.
+ 	* java/awt/MenuBar.java (addNotify): Create this menu bar's menus.
+ 	* java/awt/MenuItem.java (addNotify): Create the peer if it
+ 	doesn't exist.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(removeMenuBarPeer): New method. Remove menu bar on the current
+ 	frame.
+ 	(setMenuBarPeer): Add the menu bar to the current frame and the
+ 	callback for size-allocate events on the menu bar.
+ 	(getMenuBarHeight): Add menu bar parameter.
+ 	(menubar_resize_cb): New callback method for postSizeAllocate events.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* native/target/generic/target_generic_file.h:
+ 	Include fcntl.h
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java: Reformated.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h: Updated with
+ 	current gnu.java.awt.peer.gtk.GtkFileDialogPeer class.
+ 
+ 2004-01-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java: Reformated.
+ 	(getPropertyChangeListeners): New method.
+ 	* javax/swing/AbstractCellEditor.java: Reformated.
+ 	(getCellEditorListeners): New method.
+ 	* javax/swing/DefaultListSelectionModel.java
+ 	(listenerList): New field.
+ 	(listeners): Removed.
+ 	(get_listeners): Removed.
+ 	(addListSelectionListener): Rewritten.
+ 	(removeListSelectionListener): Rewritten.
+ 	(getListSelectionListeners): New method.
+ 	(getListeners): New method.
+ 	* javax/swing/JComboBox.java: Imports reworked.
+ 	(addActionListener): Implemented.
+ 	(removeActionListener): Implemented.
+ 	(addItemListener): Implemented.
+ 	(removeItemListener): Implemented.
+ 	(addPopupMenuListener): Implemented.
+ 	(removePopupMenuListener): Implemented.
+ 	(getActionListeners): New method.
+ 	(getItemListeners): New method.
+ 	(getPopupMenuListeners): New method.
+ 
+ 2004-01-27  Andrew Haley  <aph@redhat.com>
+ 
+ 	* javax/swing/table/JTableHeader.java: Extend JComponent
+ 
+ 2004-01-27  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(handleEvent): Implemented. Handles PaintEvents.
+ 	(paint): Implemented. Use GTK native methods to queue updates
+ 	for this heavyweight peer.
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(handleEvent): Removed.
+ 	* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Regenerated.
+ 	* java/awt/Component.java
+ 	(paint): Implemented. Explictly paint the heavyweight peer.
+ 	(update): Clear the background for heavyweight components.
+ 	(paintAll): No need to call peer.paint() anymore.
+ 	(processEvent): Don't process PaintEvents here. It's now done in
+ 	the peer's handleEvent().
+ 	(processPaintEvent): Removed.
+ 	* java/awt/Container.java
+ 	(paint): No need to call super.paint(). Visit heavyweight
+ 	children as well.
+ 	(update): Don't clear the background here.  It's done in
+ 	Component.update().
+ 	(visitChildren): Added check to not recurse into Containers.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(filter_expose_event_handler): New method.  Filter unwanted
+ 	expose events while painting heavyweight peers.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
+ 	New method. Connect filter and block pre_event_handler.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
+ 	New method. Disconnect filter and unblock pre_event_handler.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetQueueDrawArea):
+ 	New method. Invalidate and update given area.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Add checks for unwanted expose events.
+ 
+ 2004-01-22  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java: 
+ 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java:
+ 	Predicate static initialization on GtkToolkit.useGraphics2D().
+ 	* java/awt/Component.java (processPaintEvent): Consume event.
+ 	* javax/swing/AbstractButton.java: Reimplement, document.
+ 	* javax/swing/DefaultButtonModel.java: Reimplement, document.
+ 	* javax/swing/JComponent.java (paint): Use double buffer.
+ 	(listenerList): Enable member.
+ 	* javax/swing/ToggleButtonModel.java: Remove incorrect constructor.
+ 	* javax/swing/JToggleButton.java 
+ 	(JToggleButton): Modify model constructor.
+ 	* javax/swing/SwingUtilities.java 
+ 	(layoutCompoundLabel): Adjust arithmetic.
+ 	* javax/swing/plaf/basic/BasicButtonUI.java: Reimplement, document.
+ 	* javax/swing/plaf/basic/BasicGraphicsUtils.java 
+ 	(getPreferredButtonSize): Include margins in calculation.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals):
+ 	Receive up events from subordinate layout component.
+ 
+ 2004-01-12  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/gtk/GdkGraphics2D.java
+ 	(static): Check GtkToolkit before initializing static state.
+ 	(Graphics2D): Don't construct transform with 0.5 unit offset.
+ 
+ 2004-01-26  David Jee  <djee@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(find_bg_color_widget): For GtkButton, return its child.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (invokeAndWait): Use list-aware
+ 	isDispatchThread method to replace wrong test condition.
+ 	(pop): Prevent racing condition to add events to the queue out of order
+ 	by acquiring locks in the proper order and not by releasing one before
+ 	acquiring the other.
+ 	(getCurrentEvent): Consider that system events may be handled by any
+ 	queue in the stack.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Discard GDK_ENTER_NOTIFY related to ungrabs.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (pop): Prevent breaking the chain if pop
+ 	is called for an intermediate queue.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventDispatchThread.java (run): Stop running when
+ 	interrupted.
+ 	* java/awt/EventQueue.java (pop): Stop dispatch thread when done.
+ 	Reset the queue after transferring its contents.
+ 	(push): Start a new dispatch thread if none is running.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/EventQueue.java (isDispatchThread): Do check on top of stack.
+ 	(push): Make sure push is performed at the top of the thread stack.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java (DialogWindow): Make text not
+ 	visible so that dialog can be reused.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java (DialogWindow): Add WindowAdapter
+ 	to handle Window "Closing" events.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/TestAWT.java: Fix test program so that it does
+ 	not show modal dialogs twice and so that it allows showing a modal
+ 	dialog from another modal dialog.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/Dialog.java (show): Enable blocking for all modal dialogs
+ 	and run secondary dispatch thread to process event queue while this
+ 	thread is blocked.
+ 
+ 2004-01-26  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java (nativeSetFile):
+ 	New name for the former setFile native method.
+ 	(setFile): New method.
+ 	(setDirectory): Implemented.
+ 	(connectSignals): New native method.
+ 	(setFilenameFilter): Improve comment.
+ 	(getGraphics): Comment.
+ 	(gtkHideFileDialog): New method.
+ 	(gtkDisposeFileDialog): New method.
+ 	(gtkSetFilename): New method.
+ 	* java/awt/Dialog.java (show): Block on modal dialogs, but only
+ 	for FileDialog for now.
+ 	(hide): New method.
+ 	(dispose): New method.
+ 	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialog_create): Replace
+ 	deprecated creation functions.  Make dialog modal.  Add it to the
+ 	window group.
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialog_connectSignals): New
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_gtkFileSelectionSetFilename):
+ 	Rename to...
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile): New
+ 	name.
+ 	(window_closed): New function.
+ 	(ok_clicked): New function.
+ 	(cancel_clicked): New function.
+ 
+ 2004-01-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.java (internalGetMethod): Now private.
+ 
+ 2004-01-25  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/Component.java (show): Set visible to true before
+ 	showing the peer.
+ 
+ 	* java/awt/TextArea.java: Fix indentation.  Flesh out javadocs.
+ 	(getMinimumSize (int, int)): Fix FIXME -- return Dimension (0,0)
+ 	when peer is null.
+ 	(setColumns): Remove FIXME -- peer will retrieve number of
+ 	columns by calling getColumns.
+ 	(setRows): Likewise for number of rows.
+ 	(next_text_number): New field.
+ 	(paramString): Fix param string.
+ 	(generateName): New method.
+ 	(getUniqueLong): New method.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (checkImage): Inform
+ 	image observer of image loading status.
+ 	(getImage (String)): Start image production.
+ 	(getImage (URL)): Likewise.
+ 
+ 2004-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Class.java
+ 	(getInterfaces): Change html tags to lower case.
+ 	(getPackagePortion): Made private, moved around.
+ 
+ 2004-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Class.java
+ 	(getDeclaredMethod): Renamed argument "name" to "methodName".
+ 	(getField): Renamed argument "name" to "fieldName".
+ 	(getResource): Renamed argument "name" to "resourceName".
+ 	Call resourcePath() instead of doing the work here.
+ 	(getResourceAsStream): Renamed argument "name" to "resourceName".
+ 	Call resourcePath() instead of doing the work here.
+ 	(resourcePath): New method.
+ 
+ 2004-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Class.java: Moved all methods to get it in order with
+ 	libgcj.
+ 
+ 2004-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/ClassHelper.java
+ 	(getPackagePortion): Moved to java.lang.Class.
+ 	* java/lang/Class.java: Merged more with libgcj, renamed some
+ 	variables.
+ 	(toString): Moved.
+ 	(getPackagePortion): New method.
+ 	
+ 2004-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java
+ 	(fileNameMap): Don't initialize. Initialization should be lazy.
+ 	(guessContentTypeFromName): Get filename map from getFileNameMap().
+ 	(getFileNameMap): Made it synchronized. Initialize fileNameMapa if
+ 	needed.
+ 
+ 2004-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileDescriptor.java
+ 	(open): Javadoc added.
+ 	(close): Likewise.
+ 	(write): Likewise.
+ 	(read): Likewise.
+ 	(available): Likewise.
+ 	(seek): Likewise.
+ 	(getFilePointer): Likewise.
+ 	(getLength): Likewise.
+ 	(setLength): Likewise.
+ 
+ 2004-01-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java:
+ 	Fixed filename in copyright.
+ 	(released): Removed.
+ 	(finalize): New method.
+ 
+ 2004-01-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileDescriptor.java: Reformated.
+ 
+ 2004-01-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/logging/logging.properties: New file.
+ 	* java/util/logging/Makefile.am: Install logging.properties.
+ 
+ 2004-01-21  David Jee  <djee@redhat.com>
+ 
+ 	* java/awt/Container.java
+ 	(LightweightDispatcher.handleEvent): Add an extra check to avoid
+ 	dispatching MOUSE_ENTERED event twice. Translate the point for
+ 	the mouse event target before dispatching the event.
+ 
+ 2004-01-21  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* gnu/java/io/PlatformHelper.java (isRootDirectory): Fixed, by
+ 	delegating to beginWithRootPathPrefix.
+ 
+ 2004-01-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: Regenerate.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (setBounds):
+ 	Calculate proper offsets for heavyweight components packed in
+ 	lightweight containers.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(window_property_changed_cb): Set id_set.
+ 
+ 2004-01-20  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(native create): Add width parameter.
+ 	(create): Calculate text entry width based on current font's
+ 	metrics and number of columns.  Set TextField's font if not
+ 	already set.  Call native create.
+ 	(gtkEntryGetBorderWidth): New native method.
+ 	(gtkEntryGetSize): Remove method.
+ 	(getMinimumSize): Call minimumSize.
+ 	(getPreferredSize): Call preferredSize.
+ 	(minimumSize): Calculate minimum size based on backing
+ 	GtkEntry's borders, font metrics and number of columns.
+ 	(preferredSize): Likewise for preferred size.
+ 	(get_border_width): New static function.
+ 
+ 2004-01-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* scripts/classpath-build,
+ 	scripts/classpath-daily: New files for regular classpath
+ 	compilation/testing.
+ 
+ 2004-01-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in: Removed.
+ 	* configure.ac: New file.
+ 
+ 2004-01-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in: Fix AC_CONFIG_FILES usage and use AC_OUTPUT_COMMANDS.
+ 
+ 2004-01-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* HACKING: Updated autoconf and automake prerequisite descriptions.
+ 	* acinclude.m4 (CLASSPATH_ENABLE_GJDOC): Use AS_HELP_STRING,
+ 	fix quotation.
+ 	* configure.in: Rewrote AC_ARG_ENABLE usage to use AC_HELP_STRING and
+ 	to use a correct quotation. Use pkgconfig to search for glib, gtk and
+ 	libart. Ported AC_OUTPUT() to new AC_CONFIG_FILES()/AC_OUTPUT.
+ 
+ 2004-01-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Container.java: Typo and indentation fixes.
+ 
+ 2004-01-16 Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	(doPolygon): set fill rule of polygon to
+ 	WIND_EVEN_ODD by default.
+ 
+ 2004-01-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4: Fixed quotation to get rid of warnings with
+ 	automake 1.8.x.
+ 
+ 2004-01-15  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
+ 	Implemented rendering hints related methods.
+ 	(getDefaultHints): New helper method. Returns
+ 	default rendering hints.
+ 	(walkPath): changed to normalize path if
+ 	the KEY_STROKE_CONTROL key is in "normalize" mode.
+ 	(draw3DRect): changed coordinates of rectangle by +0.5
+ 	if in "normalize" mode.
+ 
+ 2004-01-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(list): Return null in error case.
+ 	* native/jni/java-io/java_io_File.c
+ 	(Java_java_io_File_listInternal): release local reference.
+ 	This fixes classpath bug #6898.
+ 
+ 2004-01-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/MessageFormat.java:
+ 	Added descriptions to exceptions.
+ 	This fixes PR libgcj/2429.
+ 
+ 2004-01-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(native	create): Add width and height parameters.  Set text
+ 	view's size request according to new parameters.
+ 	(create): Calculate text view size based on current font's
+ 	metrics and number of rows and columns.  Set TextArea's font if
+ 	not already set.  Call native create.
+ 	(getMinimumSize): Call minimumSize.
+ 	(getPreferredSize): Call preferredSize.
+ 	(getHScrollbarHeight): New method.
+ 	(getVScrollbarWidth): New method.
+ 	(minimumSize): Calculate minimum size based on scrollbar
+ 	visibility, scrollbar sizes, font metrics and number of rows and
+ 	columns.
+ 	(preferredSize): Likewise for preferred size.
+ 	(gtkTextGetSize): Remove method.
+ 
+ 2004-01-13  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ 	(initializeInsets): Remove method.
+ 	(GtkComponentPeer): Initialize insets field.  Remove call to
+ 	initializeInsets.
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (initializeInsets):
+ 	Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (initializeInsets):
+ 	Remove method.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c:
+ 	(latestInsets): Remove field.
+ 	(native create): Add insets parameter.  Call
+ 	window_get_frame_extents.  Set the window's default size and
+ 	size request based on its frame extents.
+ 	(create): Initialize insets.
+ 	(postInsetsChangedEvent): New method.
+ 	(postConfigureEvent): Remove parameters top, left, bottom,
+ 	right.  Remove insets-related logic.
+ 	(connectJObject): Handle property-notify-event.
+ 	(window_get_frame_extents, request_frame_extents,
+ 	property_notify_predicate, window_property_changed_cb): New
+ 	static functions.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Remove insets-related logic for configure
+ 	events.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (gtkInit):
+ 	Update postConfigureEvent signature.
+ 
+ 2004-01-13  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
+ 	(setBackground): New method. Children with no explicitly-set
+ 	background will be repainted with the parent container's new
+ 	background color.
+ 
+ 2004-01-12  David Jee  <djee@redhat.com>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(sendRequest): Fix a small typo.
+ 	* java/awt/Container.java
+ 	(update): Clear only the clipped region, instead of clearing the
+ 	entire Container.
+ 	(visitChildren): Visit children in descending order.
+ 
+ 2004-01-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java:
+ 	Compile fixes.
+ 
+ 2004-01-12  Arnaud Vandyck  <arnaud.vandyck@ulg.ac.be>
+ 	    Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/DefaultTableCellRenderer.java
+ 	(DefaultTableCellRenderer): Added javadoc for the class and for
+ 	the constructor, Border instance, create an EmptyBorder.
+ 	(UIResource): Removed the comment at the end of the class
+ 	(setForeground): New method.
+ 	(setBackground): New method.
+ 	(updateUI): New method.
+ 	(getTableCellRendererComponent): Rewritten with the help of
+ 	dvholten and Stephane Meslin-Weber.
+ 	(validate): New method.
+ 	(repaint): New method.
+ 	(firePropertyChange): New method.
+ 	(setValue): New method.
+ 
+ 2004-01-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(connect): Dont initialize bufferedOutputStream.
+ 	(sendRequest): Handle case when bufferedOutputStream is null.
+ 	(getOutputStream): Throw exception if called after it got connected.
+ 	Initialize bufferedOutputStream.
+ 
+ 2004-01-11  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JLayeredPane.java: Rewrite to accomodate
+ 	djee@redhat.com's recent inverse ordering of Container
+ 	elements.
+ 
+ 2004-01-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/undo/StateEditable.java
+ 	(RCSID): Removed redundant modifiers.
+ 
+ 2004-01-10  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java: Don't import
+ 	ClasspathFontPeer twice.
+ 
+ 2004-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/EnumSyntax.java
+ 	(getStringTable): Made protected.
+ 	(getEnumValueTable): Likewise.
+ 	* javax/print/attribute/standard/JobKOctetsProcessed.java
+ 	(JobKOctetsProcessed): Don't implement PrintRequestAttribute.
+ 	* javax/print/attribute/standard/JobMediaSheetsCompleted.java
+ 	(JobMediaSheetsCompleted): Made class final.
+ 	* javax/print/attribute/standard/OutputDeviceAssigned.java
+ 	(getName): Fixed typo.
+ 	* javax/print/attribute/standard/RequestingUserName.java
+ 	(serialVersionUID): Fixed value.
+ 
+ 2004-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicButtonUI.java,
+ 	javax/swing/plaf/basic/BasicCheckBoxUI.java,
+ 	javax/swing/plaf/basic/BasicListUI.java,
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.java,
+ 	javax/swing/plaf/basic/BasicPanelUI.java,
+ 	javax/swing/plaf/basic/BasicRadioButtonUI.java,
+ 	javax/swing/plaf/basic/BasicScrollPaneUI.java,
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.java,
+ 	javax/swing/plaf/basic/BasicViewportUI.java:
+ 	Fixed import statements.
+ 
+ 2004-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JRadioButtonMenuItem.java,
+ 	javax/swing/JSeparator.java,
+ 	javax/swing/JSplitPane.java,
+ 	javax/swing/JTextPane.java,
+ 	javax/swing/JToolBar.java,
+ 	javax/swing/ListCellRenderer.java,
+ 	javax/swing/ListModel.java,
+ 	javax/swing/MenuElement.java,
+ 	javax/swing/OverlayLayout.java,
+ 	javax/swing/ProgressMonitor.java,
+ 	javax/swing/ProgressMonitorInputStream.java,
+ 	javax/swing/Renderer.java,
+ 	javax/swing/RootPaneContainer.java,
+ 	javax/swing/Scrollable.java,
+ 	javax/swing/SingleSelectionModel.java,
+ 	javax/swing/ToolTipManager.java,
+ 	javax/swing/ViewportLayout.java,
+ 	javax/swing/event/DocumentEvent.java,
+ 	javax/swing/event/SwingPropertyChangeSupport.java,
+ 	javax/swing/event/TreeSelectionEvent.java,
+ 	javax/swing/event/UndoableEditEvent.java,
+ 	javax/swing/text/AbstractDocument.java,
+ 	javax/swing/text/AttributeSet.java,
+ 	javax/swing/text/Caret.java,
+ 	javax/swing/text/ComponentView.java,
+ 	javax/swing/text/DefaultCaret.java,
+ 	javax/swing/text/DefaultEditorKit.java,
+ 	javax/swing/text/Document.java,
+ 	javax/swing/text/EditorKit.java,
+ 	javax/swing/text/GapContent.java,
+ 	javax/swing/text/Keymap.java,
+ 	javax/swing/text/MutableAttributeSet.java,
+ 	javax/swing/text/PlainEditorKit.java,
+ 	javax/swing/text/Segment.java,
+ 	javax/swing/text/Style.java,
+ 	javax/swing/text/StyledDocument.java,
+ 	javax/swing/text/StyledEditorKit.java,
+ 	javax/swing/text/TextAction.java,
+ 	javax/swing/text/View.java: Fixed import statements.
+ 
+ 2004-01-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/hacking.texinfo (Programming Standards): Added some more
+ 	standards.
+ 
+ 2004-01-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/DocumentName.java,
+ 	javax/print/attribute/standard/JobHoldUntil.java,
+ 	javax/print/attribute/standard/JobMessageFromOperator.java,
+ 	javax/print/attribute/standard/JobName.java,
+ 	javax/print/attribute/standard/JobOriginatingUserName.java,
+ 	javax/print/attribute/standard/OutputDeviceAssigned.java,
+ 	javax/print/attribute/standard/PrinterInfo.java,
+ 	javax/print/attribute/standard/PrinterLocation.java,
+ 	javax/print/attribute/standard/PrinterMakeAndModel.java,
+ 	javax/print/attribute/standard/PrinterMessageFromOperator.java,
+ 	javax/print/attribute/standard/PrinterName.java,
+ 	javax/print/attribute/standard/RequestingUserName.java: New files.
+ 	* Makefile.am (javax_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2004-01-09  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/CompoundEdit.java (serialVersionUID): Made private.
+ 
+ 2004-01-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java,
+ 	javax/swing/AbstractSet.java,
+ 	javax/swing/Action.java,
+ 	javax/swing/ActionMap.java,
+ 	javax/swing/BoundedRangeModel.java,
+ 	javax/swing/ButtonModel.java,
+ 	javax/swing/CellEditor.java,
+ 	javax/swing/CellRendererPane.java,
+ 	javax/swing/ComboBoxEditor.java,
+ 	javax/swing/DebugGraphics.java,
+ 	javax/swing/DefaultCellEditor.java,
+ 	javax/swing/DefaultCellRenderer.java,
+ 	javax/swing/DefaultComboBoxModel.java,
+ 	javax/swing/DefaultDesktopManager.java,
+ 	javax/swing/DefaultFocusManager.java,
+ 	javax/swing/DefaultListCellRenderer.java,
+ 	javax/swing/Icon.java,
+ 	javax/swing/JButton.java,
+ 	javax/swing/JCheckBoxMenuItem.java,
+ 	javax/swing/JDesktopPane.java,
+ 	javax/swing/JEditorPane.java,
+ 	javax/swing/JMenu.java,
+ 	javax/swing/JPanel.java,
+ 	javax/swing/JPasswordField.java,
+ 	javax/swing/JPopupMenu.java,
+ 	javax/swing/JProgressBar.java: Reworked imports.
+ 
+ 2004-01-09  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/CompoundEdit.java (serialVersionUID): Added.
+ 
+ 2004-01-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/geom/PathIterator.java
+ 	(WIND_EVEN_ODD): Removed redundant modifiers.
+ 	(WIND_NON_ZERO): Likewise.
+ 	(SEG_MOVETO): Likewise.
+ 	(SEG_LINETO): Likewise.
+ 	(SEG_QUADTO): Likewise.
+ 	(SEG_CUBICTO): Likewise.
+ 	(SEG_CLOSE): Likewise.
+ 	* java/awt/image/SinglePixelPackedSampleModel.java:
+ 	Removed redundant semicolon.
+ 	* java/io/ObjectInputStream.java
+ 	(inputGetObjectStreamClasses): Removed unused variable "ret_val".
+ 	* java/util/logging/Filter.java
+ 	(isLoggable): Removed redundant modifier.
+ 	* java/util/logging/LogManager.java:
+ 	Removed redundant semicolon.
+ 	* java/util/logging/XMLFormatter.java
+ 	(format): Removed unused variable "key".
+ 
+ 2004-01-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/hacking.texinfo (Programming Standards): Added note about
+ 	NullPointerException.
+ 
+ 2004-01-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JLayeredPane.java: Revert changes to standard
+ 	boilerplate, reworked imports.
+ 
+ 2004-01-08  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* javax/swing/JLayeredPane.java: Fix semantics, add javadocs.
+ 
+ 2004-01-08  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(selectThreadMutex): New field.
+ 	(selectThread): New field.
+ 	(unhandledWakeup): New field.
+ 	(implCloseSelector): Added skeleton code which
+ 	synchronizes as per Sun JRE JavaDoc.
+ 	(keys): Throw ClosedSelectorException if selector
+ 	is closed.
+ 	(selectNow): Added comment that we're faking out
+ 	an immediate select with a one-microsecond-timeout one.
+ 	(select): Use 0 instead of -1 for infinite timeout.
+ 	(implSelect): Changed comment in declaration.
+ 	(select): Added synchronized to method declaration.
+ 	Added synchronization and wakeup support as per Sun
+ 	JRE JavaDoc.
+ 	(selectedKeys): Throw ClosedSelectorException if selector
+ 	is closed.
+ 	(wakeup): Implemented.
+ 	(deregisterCancelledKeys): Synchronize on cancelled key
+ 	set before deregistering.
+ 	(register): Synchronize on key set before registering.
+ 
+ 2004-01-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(blocking): Removed.
+ 	(DatagramChannelImpl): Call configureBlocking().
+ 	(implConfigureBlocking): Don't initialize blocking.
+ 	* gnu/java/nio/PipeImpl.java
+ 	(SourceChannelImpl): New inner class.
+ 	(SinkChannelImpl): New inner class.
+ 	(sink): New member variable.
+ 	(source): New member variable.
+ 	(PipeImpl): Add SelectorProvider argument, implemented.
+ 	(nativeInit): New method.
+ 	(sink): Return sink channel.
+ 	(source): Return source channel.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(serverSocket): Made private.
+ 	(connected): Made private, don't re-initialize with default value.
+ 	(blocking): Removed.
+ 	(ServerSocketChannelImpl): Call configureBlocking().
+ 	(implConfigureBlocking): Don't initialize blocking.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(blocking): Removed.
+ 	(connectionPending): Don't re-initialize with default value.
+ 	(SocketChannelImpl): Call configureBlocking().
+ 	(implConfigureBlocking): Dont initialize blocking.
+ 	(connect): Use isBlocking().
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(configureBlocking): Use blockingLock() instead of LOCK.
+ 	Set blocking after successfully called implConfigureBlocking().
+ 	(register): Use blockingLock() instead of LOCK.
+ 
+ 2004-01-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(setText): Fixed argument name in documentation.
+ 	* java/text/CollationKey.java
+ 	(equals): Directly compare parent collators.
+ 
+ 2004-01-06  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/Dialog.java (constructor): Accept null title as per spec.
+ 	* java/awt/FileDialog.java (constructor): Throw exception on invalid
+ 	argument as per spec.
+ 
+ 2004-01-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java (isBound): Fixed documentation.
+ 
+ 2004-01-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/standard/DateTimeAtCompleted.java,
+ 	javax/print/attribute/standard/DateTimeAtCreation.java,
+ 	javax/print/attribute/standard/DateTimeAtProcessing.java,
+ 	javax/print/attribute/standard/JobImpressionsCompleted.java,
+ 	javax/print/attribute/standard/JobKOctets.java,
+ 	javax/print/attribute/standard/JobKOctetsProcessed.java,
+ 	javax/print/attribute/standard/JobMediaSheetsCompleted.java,
+ 	javax/print/attribute/standard/JobPrioritySupported.java:
+ 	New files.
+ 	* javax/print/attribute/standard/Makefile.am (EXTRA_DIST):
+ 	Added new files.
+ 
+ 2004-01-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(collator): Made package-private.
+ 	(text): Likewise.
+ 	(index): Likewise.
+ 	(textIndex): Likewise.
+ 	(setText): Fixed documentation.
+ 	(setText): Renamed some variables to match libgcj's version.
+ 	(getOffset): Added @since tag to documentation.
+ 	* java/text/CollationKey.java
+ 	(hashCode): Reimplemented.
+ 	* java/text/RuleBasedCollator.java:
+ 	Some Reformating to match libgcj's version more.
+ 
+ 2004-01-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/reflect/Array.java:
+ 	Reformated to match libgcj's version more.
+ 
+ 2004-01-07  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/UndoableEditSupport.java (UndoableEditSupport):
+ 	Set realSource field. Improve documentation.
+ 	(_postEdit): Iterate over cloned listener vector.
+ 	
+ 	Fix for Classpath bug #7119.
+ 	* javax/swing/undo/UndoableEditSupport.java (toString): Don't emit
+ 	realSource.
+ 
+ 2004-01-06  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* configure.in: Add --enable-gtk-cairo check.
+ 	* configure: Regenerate.
+ 	* Makefile.am: Conditionally link against cairo.
+ 	* Makefile.in: Regenerate.
+ 	* acinclude.m4: Include PKG_CHECK_MODULES.
+ 	* aclocal.m4: Regenerate.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (useGraphics2D): New method.
+ 	(getFontMetrics, getClasspathFontPeer):
+ 	* gnu/java/awt/peer/gtk/GtkCanvasPeer.java (getGraphics):
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage):
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (getGraphics):
+ 	* gnu/java/awt/peer/gtk/GtkFramePeer.java (getGraphics):
+ 	Switch behavior depending on GtkToolkit.useGraphics2D().
+ 	* gnu/java/awt/peer/gtk/GtkFontPeer.java: Extend ClasspathFontPeer.
+ 	* java/awt/Font.java: Switch to peer model.
+ 	* jni/gtk-peer/gtkcairopeer.h: Definitions of cairo stuff.
+ 	* jni/gtk-peer/gdkfont.h: Include gtkcairopeer.h.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Include gtkcairopeer.h.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c: Un-include gtkpeer.h.
+ 
+ 2004-01-06  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java (handleEvent): Fix generation
+ 	of ActionEvents for mouse double-clicks.
+ 
+ 2004-01-06  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/Choice.java (add): Leave posting of ItemEvents to peer.
+ 	(insert): Ditto.
+ 	(remove): Ditto.  Also, Check for valid argument.
+ 	(removeAll): Use peer interface method.
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (nativeAdd): New name for
+ 	native add function.
+ 	(nativeRemove): New name for native remove function.
+ 	(getHistory): New native function.
+ 	(constructor): Generate ItemEvent.
+ 	(add): Ditto, if selection is changed.
+ 	(remove): Ditto, ditto.
+ 	(removeAll): Add implementation.
+ 	(handleEvent): Remove.  Dead code.
+ 	(choicePostItemEvent): Add comment.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append): Add comments.
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_add): Rename to...
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeAdd): New name.  Add
+ 	comments and fix condition to change selection.
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_remove): Rename to...
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemove): New name.  Add
+ 	remove all capability.
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_getHistory): New function.
+ 	(item_activate): Add cast to remove compiler warning.
+ 
+ 2004-01-06  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Set all insets to 0 when a Configure event
+ 	is received for a GtkPlug.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
+ 	(create(int, int)): New method.
+ 	(create): Call new create method.
+ 	(gtkScrolledWindowNew, gtkScrolledWindowSetSize): Remove
+ 	methods.
+ 	(childResized): Remove native implementation.  Implement in
+ 	Java.
+ 	(getHScrollbarHeight, getVScrollbarWidth): Call
+ 	gtk_widget_size_request to get scrollbar dimensions.
+ 	* java/awt/ScrollPane.java (getViewportSize): Reimplement.  Only
+ 	call getVScrollbarWidth and getHScrollbarHeight when vertical
+ 	and horizontal scrollbars respectively are needed.
+ 	(doLayout): Enlarge child if it is smaller than the viewport.
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(getPreferredSize): Call preferredSize.
+ 	(preferredSize): Call gtkWidgetGetPreferredDimensions.
+ 	(getMinimumSize): Call minimumSize.
+ 	(minimumSize): Call gtkWidgetGetPreferredDimensions.
+ 	(gtkWidgetGetDimensions): Return the peer widget's current size
+ 	request.
+ 	(gtkWidgetGetPreferredDimensions): Return the peer widget's
+ 	natural size request.
+ 
+ 2004-01-06  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkChoicePeer.java (postItemEvent): Rename to...
+ 	(choicePostItemEvent): Change signature to more specific String object.
+ 	* java/awt/Choice.java (add): Generate ItemEvent for the first item
+ 	added.
+ 	(insert): Generate ItemEvent if insertion caused
+ 	selection to change.
+ 	(remove): Generate ItemEvent if removal cause selection to change.
+ 	(removeAll): Change algorithm to prevent generation of ItemEvents.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(connect_choice_item_selectable_hook): Change argument type.
+ 	Fix argument value.
+ 	Make sure resources are feed by registering callback.
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append): Adjust call to the
+ 	above function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_add): Ditto.
+ 	(item_activate): Ditto.
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_remove): Destroy removed
+ 	menuitem.
+ 	(item_removed): New function.  Free resources.
+ 	* jni/gtk-peer/gtkpeer.h (item_event_hook_info): Change member type and
+ 	name.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): Obtain MethodID for
+ 	choicePostItemEvent.
+ 
+ 2004-01-06  Kim Ho  <kho@redhat.com>
+ 
+ 	Fix for Checkbox states.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java:
+ 	(currentState): New field.
+ 	(nativeCreate): Add initial state parameter.
+ 	(create): Changed to reflect new parameter.
+ 	(setState): Fire only on changed states.
+ 	(postItemEvent): Fire only on changed states. Also change the 
+ 	Java Checkbox to reflect new state.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c:
+ 	(nativeCreate): Add parameter and set active state.
+ 
+ 2004-01-06  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (awt_event_handler):
+ 	Most coded moved to pre_event_handler, with the modifications
+ 	mentioned below.
+ 	(pre_event_handler): New function.  Called on the Gtk "event" signal.
+ 	Do not retrieve the jobject from the window property as it is already
+ 	available as user data in the signal.
+ 	Do not try and find the grab widget as it is already done by Gtk at
+ 	this point.
+ 	Do not search for Window ancestor as Gtk already sends the signal to it.
+ 	Do not meddle with the activation state of peer widgets on each
+ 	key press or release.
+ 	Add CList to the special handling when looking for the focused widget.
+ 	* jni/gtk-peer/gtkpeer.h: Add declaration for pre_event_handler.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (connectJObject):
+ 	New function.
+ 	(connectSignals): New function.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c (connectHooks):
+ 	Rename to...
+ 	(connectSignals): New name.  Get rid of NewGlobalRef call.
+ 	Use g_signal_connect instead of deprecated gtk_signal_connect.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(connect_choice_item_selectable_hook): Use g_signal_connect instead of
+ 	deprecated gtk_signal_connect.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New
+ 	function.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New
+ 	function.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_old_create): Remove dead
+ 	code.
+ 	(item_select): Remove indirection.
+ 	(item_unselect): Ditto.
+ 	(connect_selectable_hook): Folded into connectSignals.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New
+ 	function.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c: Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
+ 	function.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New
+ 	function.
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Declare  and call
+ 	connectJObject and connectSignals instead of connectHooks.
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Declare connectJObject and
+ 	connectSignals.
+ 	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: Declare connectSignals
+ 	and not connectHooks.
+ 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java: Ditto.
+ 	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java: Declare connectJObject
+ 	and not connectHooks.
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java: Declare connectJObject and
+ 	connectSignals instead of connectHooks.
+ 	* gnu/java/awt/peer/gtk/GtkPanelPeer.java: Ditto.
+ 	* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Ditto.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java: Ditto. 
+ 
+ 2004-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java:
+ 	Renamed "char_seq" to "key" all over.
+ 	* java/text/RuleBasedCollator.java:
+ 	Fixed class documentation, reordered methods to match libgcj's
+ 	version.
+ 	(CollationElement.key): Renamed from char_seq.
+ 
+ 2004-01-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Fix for Classpath bug #7109.
+ 	* javax/swing/undo/UndoableEditSupport.java: Re-format, document.
+ 	(beginUpdate, endUpdate): Support nested updates.
+ 	(postEdit): Use compound edit if present.
+ 	
+ 2004-01-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/event/EventListenerList.java (toString): Implemented.
+ 
+ 2004-01-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Fix for Classpath bug #7107.
+ 	* javax/swing/DefaultBoundedRangeModel.java: Documented API.
+ 	(changeEvent): Create event object on demand.
+ 	(DefaultBoundedRangeModel, toString, setValue, setExtent,
+ 	setMinimum, setMaximum, setValueIsAdjusting, setRangeProperties,
+ 	fireStateChanged): Re-written.
+ 	* NEWS: Mention fixed bug.
+ 	
+ 2004-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/Makefile.am: Generate gnu_java_nio_NIOServerSocket.h.
+ 	* include/gnu_java_nio_NIOServerSocket.h,
+ 	native/jni/java-nio/gnu_java_nio_NIOServerSocket.c: New files.
+ 	* native/jni/java-nio/Makefile.am: Compile
+ 	gnu_java_nio_NIOServerSocket.c.
+ 	
+ 2004-01-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/event/EventListenerList.java: Document typical usage.
+ 	(getListeners): Re-written.
+ 
+ 2004-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(Connection): Don't re-initialize doOutput with the default value.
+ 	* java/net/JarURLConnection.java
+ 	(JarURLConnection): Initialize entryName with null if no entry
+ 	present, fixed off by one error.
+ 	* java/net/URLConnection.java: Reformating.
+ 	(getHeaderFields): Return empty map.
+ 	(getPermission): Don't use package in class name.
+ 
+ 2004-01-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/SecurityManager.java
+ 	(currentClassLoader): Use VMSecurityManager to get current class
+ 	loader.
+ 	(checkPackageList): Put array length into local variable.
+ 
+ 2004-01-06  Per Bothner  <per@bothner.com>
+ 
+ 	* java/util/Date.java (parse):  Fix a number of problems.
+ 	(skipParens):  Remove no-longer-needed method.
+ 
+ 2004-01-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Fix for Classpath bug #7105.
+ 	* javax/swing/event/EventListenerList.java (remove): Re-written.
+ 	* NEWS: Mention fixed bug.
+ 
+ 2004-01-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Fix for Classpath bug #7104.
+ 	* javax/swing/event/EventListenerList.java (add): Re-written.
+ 	* NEWS: Mention fixed bug.
+ 
+ 2004-01-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/event/EventListenerList.java (NO_LISTENERS): New
+ 	singleton field.
+ 	(listenerList): Declare as transient; document.
+ 	(serialVersionUID): Document.
+ 	
+ 2004-01-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Fix for Classpath bug #7099.
+ 	* javax/swing/event/EventListenerList.java (getListenerCount(Class)):
+ 	More efficient implementation, also accepts null argument.
+ 	Improve Javadoc.
+ 	* NEWS: Mention fixed bug.
+ 	
+ 	* javax/swing/event/EventListenerList.java (getListenerCount()):
+ 	Remove unnecessary cast; docfix.
+ 
+ 2004-01-06  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/event/EventListenerList.java: Reformatted.
+ 
+ 2004-01-05  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	Fix for Classpath bug #6095
+ 	Thanks to Brian Gough <bjg@network-theory.com>
+ 	* java/awt/geom/CubicCurve2D.java (solveCubic): Implemented.
+ 	* java/awt/geom/QuadCurve2D.java (solveQuadratic): Re-written.
+ 	* NEWS: Mention the new capability for solving equations.
+ 	* THANKYOU: Add Brian Gough.
+ 
+ 2004-01-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(jarFileURLConnection): New field.
+ 	* gnu/java/net/protocol/jar/Connection.java
+ 	(Connection): Made class final.
+ 	(Connection): Made constructor protected.
+ 	(getJarFile): Check doInput.
+ 	(getInputStream): Likewise.
+ 
+ 2004-01-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/HashMap.java (HashMap(Map)): As above.
+ 	(putAllInternal): As above.
+ 	* java/util/Hashtable.java (Hashtable(Map)): Use putAll, not
+ 	putAllInternal.
+ 	(putAllInternal): Correct comment.
+ 	(internalContainsValue): Removed.
+ 	(containsValue): Don't delegate to internalContainsValue.
+ 
+ 
+ Local Variables:
+ coding: iso-latin-1-unix	
+ End:
diff -Nrcpad gcc-4.0.2/libjava/classpath/ChangeLog.gcj gcc-4.1.0/libjava/classpath/ChangeLog.gcj
*** gcc-4.0.2/libjava/classpath/ChangeLog.gcj	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/ChangeLog.gcj	Mon Feb 13 22:58:37 2006
***************
*** 0 ****
--- 1,408 ----
+ 2006-02-13  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #26166
+ 	* gnu/regexp/RE.java(initialize): Parsing of character class expression
+ 	was moved to a new method parseCharClass.
+ 	(parseCharClass): New method originally in initialize. Added parsing
+ 	of nested character classes.
+ 	(ParseCharClassResult): New inner class used as a return value of
+ 	parseCharClass.
+ 	(getCharExpression),(getNamedProperty): Made static.
+ 	* gnu/regexp/RESyntax.java(RE_NESTED_CHARCLASS): New syntax flag.
+ 	* gnu/regexp/RETokenOneOf.java(addition): New Vector for storing
+ 	nested character classes.
+ 	(RETokenOneOf): New constructor accepting the Vector addition.
+ 	(getMinimumLength), (getMaximumLength): Returns 1 if the token
+ 	stands for only one character.
+ 	(match): Added the processing of the Vector addition.
+ 	(matchN), (matchP): Do not check next token if addition is used.
+ 
+ 2006-02-09  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #26112
+ 	* gnu/regexp/RE.java(REG_REPLACE_USE_BACKSLASHESCAPE): New execution
+ 	flag which enables backslash escape in a replacement.
+ 	(getReplacement): New public static method. 
+ 	(substituteImpl),(substituteAllImpl): Use getReplacement.
+ 	* gnu/regexp/REMatch.java(substituteInto): Replace $n even if n>=10.
+ 	* java/util/regex/Matcher.java(appendReplacement)
+ 	Use RE#getReplacement.
+ 	(replaceFirst),(replaceAll): Use RE.REG_REPLACE_USE_BACKSLASHESCAPE.
+ 
+ 2006-02-06  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* java/util/regex/Matcher.java(matches):
+ 	set RE.REG_TRY_ENTIRE_MATCH as an execution flag of getMatch.
+ 
+ 2006-02-06  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #25812
+  	* gnu/regexp/CharIndexed.java(lookBehind),(length): New method.
+ 	* gnu/regexp/CharIndexedCharArray.java
+ 	(lookBehind),(length): Implemented.
+ 	* gnu/regexp/CharIndexedInputStream.java: Likewise.
+ 	* gnu/regexp/CharIndexedString.java: Likewise.
+ 	* gnu/regexp/CharIndexedStringBuffer.java: Likewise.
+ 	* gnu/regexp/REToken.java(getMaximumLength): New method.
+ 	* gnu/regexp/RE.java(internal constructor RE): Added new argument
+ 	maxLength.
+ 	(initialize): Parse (?<=X), (?<!X), (?>X).
+ 	(getMaximumLength): Implemented.
+ 	* gnu/regexp/RETokenAny.java(getMaximumLength): Implemented.
+ 	* gnu/regexp/RETokenChar.java: Likewise.
+ 	* gnu/regexp/RETokenEnd.java: Likewise.
+ 	* gnu/regexp/RETokenEndSub.java: Likewise.
+ 	* gnu/regexp/RETokenLookAhead.java: Likewise.
+ 	* gnu/regexp/RETokenNamedProperty.java: Likewise.
+ 	* gnu/regexp/RETokenOneOf.java: Likewise.
+ 	* gnu/regexp/RETokenPOSIX.java: Likewise.
+ 	* gnu/regexp/RETokenRange.java: Likewise.
+ 	* gnu/regexp/RETokenRepeated.java: Likewise.
+ 	* gnu/regexp/RETokenStart.java: Likewise.
+ 	* gnu/regexp/RETokenWordBoundary.java: Likewise.
+ 	* gnu/regexp/RETokenIndependent.java: New file.
+ 	* gnu/regexp/RETokenLookBehind.java: New file.
+ 
+ 2006-02-04  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* gnu/regexp/RETokenNamedProperty.java(getHandler): Check for
+ 	a Unicode block if the name starts with "In".
+ 	(UnicodeBlockHandler): New inner class.
+ 
+ 2006-02-02  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* gnu/regexp/REMatch.java(REMatchList): New inner utility class
+ 	for making a list of REMatch instances.
+ 	* gnu/regexp/RETokenOneOf.java(match): Rewritten using REMatchList.
+ 	* gnu/regexp/RETokenRepeated.java(findDoables): New method.
+ 	(match): Rewritten using REMatchList.
+ 	(matchRest): Rewritten using REMatchList.
+ 
+ 2006-02-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/regexp/RE.java (getRETokenNamedProperty): Chain exception.
+ 	* gnu/regexp/RETokenNamedProperty.java (LETTER, MARK, SEPARATOR,
+ 	SYMBOL, NUMBER, PUNCTUATION, OTHER): New final byte[] fields.
+ 	(getHandler): Check for grouped properties L, M, Z, S, N, P or C.
+ 	(UnicodeCategoriesHandler): New private static class.
+ 	
+ 2006-01-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URI.java (getURIGroup): Check for null to see whether
+ 	group actually exists.
+ 
+ 2006-01-31  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #22873
+ 	* gnu/regexp/REMatch(toString(int)): Throw IndexOutOfBoundsException
+ 	for an invalid index and return null for a skipped group.
+ 
+ 2006-01-31  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #26002
+ 	* gnu/regexp/gnu/regexp/RE.java(initialize): Parse /\p{prop}/.
+ 	(NamedProperty): New inner class.
+ 	(getNamedProperty): New method.
+ 	(getRETokenNamedProperty): New Method.
+ 	* gnu/regexp/RESyntax.java(RE_NAMED_PROPERTY): New syntax falg.
+ 	* gnu/regexp/RETokenNamedProperty.java: New file.
+ 
+ 2006-01-30  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #24876
+ 	* gnu/regexp/gnu/regexp/RE.java(REG_TRY_ENTIRE_MATCH):
+ 	New execution flag.
+ 	(getMatchImpl): if REG_TRY_ENTIRE_MATCH is set, add an
+ 	implicit RETokenEnd at the end of the regexp chain.
+ 	Do not select the longest match, but select the first match.
+ 	(match): Do not take care of REMatch.empty.
+ 	* gnu/regexp/REMatch.java(empty): To be used only in RETokenRepeated.
+ 	* gnu/regexp/RETokenOneOf.java: Corrected a typo in a comment.
+ 	* gnu/regexp/RETokenBackRef.java: Do not take care of REMatch.empty.
+ 	* gnu/regexp/RETokenRepeated.java (match): Rewrote stingy matching.
+ 	Do not take care of REMatch.empty. Set and check REMatch.empty
+ 	when trying to match the single token.
+ 
+ 2006-01-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/regex/PatternSyntaxException.java: Added @since.
+ 	* java/util/regex/Matcher.java (Matcher): Implements MatchResult.
+ 	* java/util/regex/MatchResult.java: New file.
+ 
+ 2006-01-23  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* gnu/regexp/REToken.java(empty): Made Cloneable.
+ 	* gnu/regexp/RETokenOneOf.java(match): RE.java(match):
+ 	Use separate methods matchN and matchP depending on the
+ 	boolean negative.
+ 	(matchN): New method used when negative. Done as before.
+ 	(matchP): New method used when not negative. Each token is
+ 	tried not by itself but by a clone of it.
+ 
+ 2006-01-22  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #25837
+ 	* gnu/regexp/REMatch.java(empty): New boolean indicating
+ 	an empty string matched.
+ 	* gnu/regexp/RE.java(match): Sets empty flag when an empty
+ 	string matched.
+ 	(initialize): Support back reference \10, \11, and so on.
+ 	(parseInt): renamed from getEscapedChar and returns int.
+ 	* gnu/regexp/RETokenRepeated.java(match): Sets empty flag
+ 	when an empty string matched. Fixed a bug of the case where
+ 	an empty string matched. Added special handling of {0}.
+ 	* gnu/regexp/RETokenBackRef.java(match): Sets empty flag
+ 	when an empty string matched. Fixed the case insensitive matching.
+ 
+ 2006-01-19  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #23212
+ 	* gnu/regexp/RE.java(initialize): Support escaped characters such as
+ 	\0123, \x1B, \u1234.
+ 	(getEscapedChar): New method.
+ 	(CharExpression): New inner class.
+ 	(getCharExpression): New Method.
+ 	* gnu/regexp/RESyntax.java(RE_OCTAL_CHAR, RE_HEX_CHAR,
+ 	RE_UNICODE_CHAR): New syntax bits.
+ 
+ 2006-01-17  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #25817
+ 	* gnu/regexp/RETokenRange.java(constructor):
+ 	Keep lo and hi as they are.
+ 	(match): Changed the case insensitive comparison.
+ 
+ 2006-01-17  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	* gnu/regexp/RETokenChar.java(chain):
+ 	Do not concatenate tokens whose insens flags are diffent.
+ 
+ 2006-01-16  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #22884
+ 	* gnu/regexp/RE.java(initialize): Parse embedded flags.
+ 	* gnu/regexp/RESyntax.java(RE_EMBEDDED_FLAGS): New syntax bit.
+ 
+ 2006-01-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/regex/Pattern.java (Pattern): Chain REException.
+ 
+ 2006-01-12  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #22802
+ 	* gnu/regexp/RE.java(initialize): Fixed the parsing of
+ 	character classes within a subexpression.
+ 
+ 2006-01-08  Ito Kazumitsu  <kaz@maczuka.gcd.org>  
+ 
+ 	Fixes bug #25679
+ 	* gnu/regexp/RETokenRepeated.java(match): Optimized the case
+ 	when an empty string matched an empty token.
+ 
+ 2006-01-06  Ito Kazumitsu  <kaz@maczuka.gcd.org>  
+ 
+ 	Fixes bug #25616
+ 	* gnu/regexp/RE.java(initialize): Allow repeat.empty.token.
+ 	* gnu/regexp/RETokenRepeated.java(match): Break the loop
+ 	when an empty string matched an empty token.
+ 
+ 2006-02-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/java/rmi/registry/RegistryImpl.java (version): Use 2006.
+ 	* gnu/CORBA/NamingService/NamingServiceTransient.java (main): Use
+ 	2006.
+ 
+ 2006-02-06  Anthony Green  <green@redhat.com>
+ 
+ 	* gnu/xml/aelfred2/XmlParser.java: Add missing break;.
+ 
+ 2006-02-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Backports from 0.21.
+ 
+ 	2006-01-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #25970 reported by Michael Kay <mike@saxonica.com>
+ 	* java/math/BigDecimal.java (compareTo): Don't strip trailing zeros.
+ 	Add trailing zeros to the fraction of the decimal with the smallest
+ 	scale.
+ 
+ 	2006-02-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fixes bug #25769 reported by Artemus Harper <subanark@gmail.com>
+ 	* java/util/AbstractCollection.java (toString): Only use Iterator,
+ 	check whether collection contains itself.
+ 
+ 2006-02-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Backports from trunk/0.20.
+ 
+ 	2005-12-25  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/util/Collections.java
+ 	(binarySearch(List,Object,Comparator)): Changed comparison order
+ 	for improved compatibility.
+ 
+ 	2005-12-07  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+ 
+ 	Fixes bug #25273
+ 	* java/text/DecimalFormat.java(scanFormat): Don't set
+ 	minimumIntegerDigits to 0.
+ 
+ 	2006-01-10  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	PR classpath/25727
+ 	* java/util/Hashtable.java
+ 	(contains): Call equals on existing value.
+ 	(containsKey, get, put, remove): Call equals on existing key.
+ 	(getEntry): Call equals on existing entry.
+ 
+ 	2006-01-10  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	PR classpath/24618
+ 	* java/util/AbstractMap.java
+ 	(equals(Object,Object)): Test for identity first.
+ 	* java/util/WeakHashMap.java
+ 	(WeakBucket.WeakEntry.equals): Use helper method to determine equality.
+ 	(WeakBucket.WeakEntry.toString): Fixed string representation of
+ 	null key.
+ 	(internalGet): Use helper method to determine equality.
+ 
+ 	2005-12-04  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/net/URL.java (URL): Check whether context is null before
+ 	accessing ph.
+ 
+ 	2005-11-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR classpath/25141:
+ 	* java/net/URL.java (URL): Use context's stream handler.
+ 
+ 2006-01-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/23499:
+ 	* lib/Makefile.in: Rebuilt.
+ 	* lib/Makefile.am (glibj_DATA): Commented out.
+ 
+ 2005-12-15  Caolan McNamara  <caolanm@redhat.com>
+ 
+ 	PR classpath/25426:
+ 	* gnu/xml/dom/DomNode.java (detach): Check whether current is
+ 	already null.
+ 
+ 2005-12-08  Matthias Klose  <doko@debian.org>
+ 
+ 	2005-11-20  Chris Burdess  <dog@gnu.org>
+         * gnu/xml/transform/TransformerImpl.java: Ensure that output stream
+ 	is not closed if provided in the StreamResult.
+ 
+ 2005-12-01  Anthony Green  <green@redhat.com>
+ 
+         PR bootstrap/25207
+         * configure.ac: Make sure we have an alsa library in addition to
+         the headers.  This extra test is required for systems with
+         multilibs.
+         * configure: Rebuilt.
+ 
+ 2005-10-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jawt/Makefile.in: Rebuilt.
+ 	* native/jawt/Makefile.am (noinst_LTLIBRARIES): Renamed.
+ 	* native/jni/xmlj/Makefile.in: Rebuilt.
+ 	* native/jni/xmlj/Makefile.am (noinst_LTLIBRARIES): Renamed.
+ 	* native/jni/qt-peer/Makefile.in: Rebuilt.
+ 	* native/jni/qt-peer/Makefile.am (noinst_LTLIBRARIES): Renamed.
+ 	* native/jni/gtk-peer/Makefile.in: Rebuilt.
+ 	* native/jni/gtk-peer/Makefile.am (noinst_LTLIBRARIES): Renamed.
+ 
+ 2005-10-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/24057:
+ 	* include/Makefile.in: Rebuilt.
+ 	* include/Makefile.am: Don't install headers.
+ 
+ 2005-09-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/24051:
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ACLOCAL_AMFLAGS): Added -I ../../config
+ 	* configure: Rebuilt.
+ 	* configure.ac: Use GCC_NO_EXECUTABLES
+ 
+ 2005-09-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* native/jawt/.cvsignore: Likewise.
+ 	* native/jni/qt-peer/.cvsignore
+ 	* native/jawt/Makefile.in: Added.
+ 	* native/jni/qt-peer/Makefile.in: Likewise.
+ 
+ 2005-09-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Imported Classpath 0.18.
+ 
+ 2005-08-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.ac: Fixed typo.
+ 
+ 2005-08-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/23498:
+ 	* doc/Makefile.am (info_TEXINFOS): Commented out.
+ 	* doc/Makefile.in: Rebuilt.
+ 
+ 2005-08-22  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.am (ACLOCAL_AMFLAGS): New.
+ 	* Makefile.in: Regenerate.
+ 	
+ 2005-08-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/23498:
+ 	* doc/Makefile.am (info_TEXINFOS): Commented out.
+ 	* doc/Makefile.in: Rebuilt.
+ 
+ 2005-08-11  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* lib/split-for-gcj.sh: Don't use unportable %{parameter%word}.
+ 	Don't use unportable !.
+ 
+ 2005-07-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* ChangeLog.gcj, Makefile.in, aclocal.m4, config.guess,
+ 	config.sub, configure, ltmain.sh, doc/Makefile.in,
+ 	doc/api/Makefile.in, examples/Makefile.in, external/Makefile.in,
+ 	external/sax/Makefile.in, external/w3c_dom/Makefile.in,
+ 	include/Makefile.in, include/config.h.in, include/jni.h,
+ 	lib/Makefile.in, native/Makefile.in, native/fdlibm/Makefile.in,
+ 	native/jni/Makefile.in, native/jni/classpath/Makefile.in,
+ 	native/jni/gtk-peer/Makefile.in, native/jni/java-io/Makefile.in,
+ 	native/jni/java-lang/Makefile.in, native/jni/java-net/Makefile.in,
+ 	native/jni/java-nio/Makefile.in, native/jni/java-util/Makefile.in,
+ 	native/jni/xmlj/Makefile.in, native/target/Makefile.in,
+ 	native/target/Linux/Makefile.in,
+ 	native/target/generic/Makefile.in, resource/Makefile.in,
+ 	scripts/Makefile.in: Added.
+ 	* native/fdlibm/.cvsignore, native/jni/xmlj/.cvsignore,
+ 	native/jni/java-util/.cvsignore, native/jni/classpath/.cvsignore,
+ 	native/jni/java-net/.cvsignore, native/jni/java-io/.cvsignore,
+ 	native/jni/.cvsignore, native/jni/java-lang/.cvsignore,
+ 	native/jni/gtk-peer/.cvsignore, native/jni/java-nio/.cvsignore,
+ 	native/testsuite/.cvsignore, native/.cvsignore,
+ 	native/vmi/.cvsignore, native/target/.cvsignore,
+ 	native/target/generic/.cvsignore, native/target/Linux/.cvsignore,
+ 	include/.cvsignore, doc/api/.cvsignore,
+ 	doc/www.gnu.org/faq/.cvsignore,
+ 	doc/www.gnu.org/downloads/.cvsignore,
+ 	doc/www.gnu.org/docs/.cvsignore, doc/www.gnu.org/.cvsignore,
+ 	doc/www.gnu.org/events/.cvsignore,
+ 	doc/www.gnu.org/announce/.cvsignore, doc/.cvsignore,
+ 	resource/.cvsignore, external/w3c_dom/.cvsignore,
+ 	external/sax/.cvsignore, external/.cvsignore,
+ 	java/util/.cvsignore, .cvsignore, test/java.net/.cvsignore,
+ 	test/java.io/.cvsignore, test/.cvsignore,
+ 	test/java.util/.cvsignore, test/gnu.java.lang.reflect/.cvsignore,
+ 	test/java.lang.reflect/.cvsignore, examples/.cvsignore,
+ 	lib/.cvsignore, gnu/classpath/.cvsignore, gnu/test/.cvsignore,
+ 	compat/java.net/.cvsignore, compat/.cvsignore, vm/.cvsignore,
+ 	vm/reference/.cvsignore, scripts/.cvsignore: Updated.
diff -Nrcpad gcc-4.0.2/libjava/classpath/ChangeLog.gnujaxp.1 gcc-4.1.0/libjava/classpath/ChangeLog.gnujaxp.1
*** gcc-4.0.2/libjava/classpath/ChangeLog.gnujaxp.1	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/ChangeLog.gnujaxp.1	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,205 ----
+ This is an historic file listing changes from the old GNU JAXP project.
+ GNU JAXP is now part of GNU Classpath.  New changes to these files are
+ listed in the main ChangeLog file or documented in the external
+ subdirectories for the w3c dom and sax sources.
+ 
+ 2004-12-22  Chris Burdess  <dog@gnu.org>
+ 
+ 	* Makefile.am: Generate META-INF/services factory configuration files.
+ 
+ 2004-12-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* css,html2: Updated APIs to final versions of W3C specifications
+ 	(DOM Level 2).
+ 
+ 2004-12-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* GnomeNodeIterator.java: Renamed to DomNodeIterator.java.
+ 
+ 2004-12-10  Chris Burdess  <dog@gnu.org>
+ 
+ 	* org/xml/sax: Updated version of SAX API to sax2r3 final.
+ 
+ 2004-12-04  Chris Burdess  <dog@gnu.org>
+ 
+ 	* README,INSTALL,AUTHORS: Updated documentation.
+ 
+ 2004-12-03  Andrew Overholt  <overholt@redhat.com>
+ 
+ 	* autogen.sh: New file.
+ 
+ 2004-11-27  Chris Burdess  <dog@gnu.org>
+ 
+ 	* Makefile.am: Removed redundant 'sources' and 'classes' makefile
+ 	variables. Added -W-no-long-long to libxmlj compilation flags.
+ 
+ 2004-11-26  Andrew Overholt  <overholt@redhat.com>
+ 
+ 	* Makefile.am: Update for gcj.
+ 	* configure.ac: Likewise.
+ 	* Makefile.in: Update generated.
+ 	* aclocal.m4: Likewise.
+ 	* configure: Likewise.
+ 	* config/config.guess: Likewise.
+ 	* config/config.sub: Likewise.
+ 	* config/ltmain.sh: Likewise.
+ 
+ 2004-10-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* Makefile.am: Fixes to permit gcj compilation.
+ 
+ 2004-10-27  Chris Burdess  <dog@gnu.org>
+ 
+ 	* parsers, transform, dom, sax, stream: API rewritten from
+ 	scratch to satisfy copyright assignment.
+ 
+ 2004-10-13  Arnaud Vandyck  <avdyk@gnu.org>
+ 	
+ 	Reported by John Kristian <jk2004@engineer.com>:
+ 	* manifest.mf: added Implementation Version field.
+ 	
+ 2004-10-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* Makefile.am: Make invocation of javadoc gjdoc-compatible.
+ 
+ 2004-09-03  Chris Burdess  <dog@gnu.org>
+ 
+ 	* all: Replaced GPL exception with new exception text.
+ 
+ 2004-09-01  Chris Burdess  <dog@gnu.org>
+ 
+ 	* all: Reassigned David Brownell's copyright to FSF.
+ 
+ 2004-05-12  Chris Burdess  <dog@gnu.org>
+ 
+ 	* (dom): Updated to DOM Level 3 Core and L&S interfaces.
+ 	* GnomeDocumentBuilder.java: Fixed stream retrieval bug.
+ 
+ 2004-05-05  Chris Burdess  <dog@gnu.org>
+ 
+ 	* Makefile.am, acinclude.m4: Added gcjh detection. Makefile will now
+ 	rebuild out of date JNI headers and gnujaxp.jar.
+ 
+ 2004-04-22  Arnaud Vandyck  <avdyk@ressource-toi.org>
+ 
+ 	* source: sources directory has been moved to source directory,
+ 	src has been deleted. Sorry for the inconvenience.
+ 
+ 2004-04-20  Arnaud Vandyck  <avdyk@ressource-toi.org>
+ 
+ 	Reported by Maarten Coene <MacBelgium@toughguy.net>:
+ 	* src/gnu/xml/aelfred2/JAXPFactory.java (getFeature): throws a
+ 	NullPointerException if you check for a feature that hasn't been
+ 	set at the factory level.
+ 
+ 2004-04-19  Arnaud Vandyck  <avdyk@ressource-toi.org>
+ 
+ 	* src/xmlj_io.h, src/xmlj_io.c, src/xmlj_error.h,
+ 	src/xmlj_error.c, src/libxsltj.c,
+ 	src/gnu/xml/libxmlj/transform/URIResolverProxy.java,
+ 	src/gnu/xml/libxmlj/transform/TransformerImpl.java,
+ 	src/gnu/xml/libxmlj/transform/TransformerFactoryImpl.java,
+ 	src/gnu/xml/libxmlj/transform/TransformTest.java,
+ 	src/gnu/xml/libxmlj/transform/TemplatesImpl.java,
+ 	src/gnu/xml/libxmlj/transform/SourceWrapper.java,
+ 	src/gnu/xml/libxmlj/transform/SourceLocatorImpl.java,
+ 	src/gnu/xml/libxmlj/transform/LibxsltStylesheet.java,
+ 	src/gnu/xml/libxmlj/transform/LibxmlDocument.java,
+ 	src/gnu/xml/libxmlj/transform/JavaContext.java,
+ 	src/gnu/xml/libxmlj/transform/IOToolkit.java,
+ 	src/gnu/xml/libxmlj/transform/ErrorListenerProxy.java,
+ 	src/gnu/xml/libxmlj/transform/DefaultURIResolverImpl.java,
+ 	src/gnu/xml/libxmlj/transform/DefaultErrorListenerImpl.java:
+ 	changed the copyright holder to FSF and changed the license to
+ 	GPL+linking exception, many thanks to Julian Scheid who wrote the
+ 	code and accepted to donate his code to the FSF and change the
+ 	license to GPL + linking exception.
+ 
+ 	* README: updated (added the libxmlj README comments)
+ 
+ 	* AUTHORS: added Julian.
+ 
+ 	* INSTALL: updated to match the current scheme (new dependency,
+ 	new build system)
+ 
+ 2004-04-15  Arnaud Vandyck  <avdyk@ressource-toi.org>
+ 
+ 	* src/gnu/xml/aelfred2/SAXDriver.java (SAXDriver): removed the
+ 	comparison choice because an org.xml.sax.SAXNotSupportedException
+ 	must be caught, so it'll slow the benefit of the interned strings!
+ 
+ 	* src/gnu/xml/pipeline/WellFormednessFilter.java (startDTD)
+ 	(notationDecl, unparsedEntityDecl): reverted the '==' comparison
+ 	between String's because they are internaled and there is no way
+ 	to choose if the comparison must use '==' or 'equals'
+ 
+ 	* src/gnu/xml/pipeline/ValidationConsumer.java: reverted the '=='
+ 	comparison between String's because they are internaled and there
+ 	is no way to choose if the comparison must use '==' or 'equals'
+ 
+ 	* src/gnu/xml/pipeline/DomConsumer.java:
+ 	(populateAttributes): using equals because I'm not sure "" is
+ 	interned?
+ 
+ 	* src/gnu/xml/aelfred2/XmlParser.java (parseAttribute)
+ 	(parseAttDef, readAttType, parseDefault)
+ 	(setInternalEntity, pushURL): if string-interning use the '=='
+ 	comparison, else, use 'equals'
+ 
+ 	* src/gnu/xml/aelfred2/SAXDriver.java (attribute, startElement)
+ 	(getType): if string-interning use the '==' comparison, else, use
+ 	'equals'
+ 
+ 2004-04-14  Arnaud Vandyck  <avdyk@ressource-toi.org>
+ 
+ 	* src/gnu/xml/aelfred2/SAXDriver.java (getFeature):
+ 	http://xml.org/sax/features/string-interning can now be set to
+ 	false so comparison if perform using equals (if true, comparison
+ 	is performed with '==').
+ 
+ 	* src/gnu/xml/util/XCat.java (startElement): reverted the '=='
+ 	comparison between String's because they are internaled and there
+ 	is no way to choose if the comparison must use '==' or 'equals'
+ 
+ 	* src/javax/xml/transform/sax/SAXResult.java, SAXSource.java,
+ 	SAXTransformerFactory.java, TemplatesHandler.java,
+ 	TransformerHandler.java,
+ 	src/javax/xml/transform/stream/StreamResult.java,
+ 	StreamSource.java, src/javax/xml/transform/dom/DOMLocator.java,
+ 	DOMResult.java, DOMSource.java,
+ 	src/javax/xml/parsers/ClassStuff.java, DocumentBuilder.java,
+ 	DocumentBuilderFactory.java, FactoryConfigurationError.java,
+ 	ParserConfigurationException.java, SAXParser.java,
+ 	SAXParserFactory.java, src/javax/xml/transform/ClassStuff.java,
+ 	ErrorListener.java, OutputKeys.java, Result.java, Source.java,
+ 	Templates.java, Transformer.java,
+ 	TransformerConfigurationException.java, TransformerException.java,
+ 	TransformerFactory.java,
+ 	TransformerFactoryConfigurationError.java,
+ 	src/gnu/xml/libxmlj/transform/DefaultErrorListenerImpl.java,
+ 	DefaultURIResolverImpl.java, ErrorListenerProxy.java,
+ 	IOToolkit.java, JavaContext.java, LibxmlDocument.java,
+ 	SourceLocatorImpl.java, SourceWrapper.java, TemplatesImpl.java,
+ 	TransformTest.java, TransformerImpl.java,
+ 	TransformerFactoryImpl.java, URIResolverProxy.java: removed the id
+ 	cvs tag to ease integration in other cvs repositories
+ 
+ 2004-04-08  Arnaud Vandyck  <avdyk@ressource-toi.org>
+ 
+ 	* NEWS: initial commit
+ 
+ 	* INSTALL: initial commit
+ 
+ 	* src: sources directory has been moved to src directory
+ 
+ 	* configure.ac, Makefile.am: now build jaxp and libxmlj together
+ 
+ 	* Makefile.aj, automakejar, configure.in: removed, no more used.
+ 	
+ 2004-02-05  Arnaud Vandyck  <avdyk@users.sourceforge.net>
+ 
+ 	* ChangeLog.libxmlj, source/*.c, source/*h,
+ 	source/gnu/xml/libxmlj/transform/*.*: imported from libxmlj
+ 
+ 	* ChangeLog.gnujaxp: added to have some history of the project
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/ChangeLog.gnujaxp.2 gcc-4.1.0/libjava/classpath/ChangeLog.gnujaxp.2
*** gcc-4.0.2/libjava/classpath/ChangeLog.gnujaxp.2	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/ChangeLog.gnujaxp.2	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1944 ----
+ This is an historic file listing changes from the old GNU JAXP project.
+ GNU JAXP is now part of GNU Classpath.  New changes to these files are listed
+ in the main ChangeLog file or documented in the external subdirectories for
+ the w3c dom and sax sources.
+ 
+ 2004-12-07  Chris Burdess  <dog@gnu.org>
+ 
+ 	* dom: Minor DOM Level 3 Core conformance improvements.
+ 
+ 2004-12-07  Mark Wielaard  <mark@klomp.org>
+ 
+    	* ReaderInputStream.java: Mark and reset implementation.
+    	
+ 2004-12-06  Chris Burdess  <dog@gnu.org>
+ 
+ 	* dom: Minor DOM Level 3 Core conformance improvements.
+ 
+ 2004-12-06  Mark Wielaard  <mark@klomp.org>
+ 
+    	* TransformerImpl.java: Use StreamResult's Writer if no byte stream
+    	is present.
+    	
+ 2004-12-05  Chris Burdess  <dog@gnu.org>
+ 
+ 	* TransformerImpl.java,XSLURIResolver.java: Permit identity
+ 	transforms with target nodes and null system IDs.
+ 
+ 2004-12-04  Dalibor Topic  <robilad@kaffe.org>
+ 
+    	* ElementAvailableFunction.java,FunctionAvailableFunction.java,
+ 	KeyFunction.java,SortKey.java,Stylesheet.java,
+ 	SystemPropertyFunction.java,TransformerImpl.java,XSLComparator.java,
+ 	NameTest.java,NamespaceTest.java,XPathParser.java,QName.java:
+    	Corrected QName.getLocalName to getLocalPart. Fixed missing imports.
+    	
+ 2004-12-02  Chris Burdess  <dog@gnu.org>
+ 
+    	* TransformerImpl.java: Implemented JAXP user output properties.
+    	* TransformerFactoryImpl.java: Implemented getAssociatedStylesheet.
+    	
+ 2004-12-01  Chris Burdess  <dog@gnu.org>
+ 
+    	* StreamSerializer.java: Use BOM for UTF-16 output.
+    	* XSLComparator.java: Implemented number data types.
+    	* SortKey.java: Implemented AVTs.
+    	* ApplyImportsNode.java: apply-imports implementation.
+    	
+ 2004-11-29  Chris Burdess  <dog@gnu.org>
+ 
+ 	* ls: Corrections to attribute namespaces.
+ 	* transform: element-available and function-available functions.
+ 
+ 2004-11-29  Chris Burdess  <dog@gnu.org>
+ 
+    	* transform,xpath: Clone entire stylesheet trees for reuse of
+    	stylesheets in JAXP templates. 
+    	
+ 2004-11-28  Chris Burdess  <dog@gnu.org>
+ 
+    	* StreamSerializer.java: Fix typo for disable-output-escaping.
+    	
+ 2004-11-27  Julian Scheid  <julian@sektor37.de>
+ 
+ 	* SubstringFunction.java: Fixed a bug which would copy one character
+    	short if the length is specified explicitly.
+ 	* TransformerFactory.java,ImplementationSource.java: Load libxmlj
+ 	classes dynamically.
+    	
+ 2004-11-26  Chris Burdess  <dog@gnu.org>
+ 
+ 	* TransformerException.java,TransformerConfigurationException.java:
+    	Include message from cause exception if none specified.
+ 	* transform: Import circularity detection.
+    	
+ 2004-11-25  Chris Burdess  <dog@gnu.org>
+ 
+    	* xpath: Selector and node test fixes.
+    	
+ 2004-11-24  Chris Burdess  <dog@gnu.org>
+ 
+    	* dom: Don't create attribute text node unless required.
+    	* transform: Better whitespace stripping, xsl:number algorithm
+    	improvements
+ 	* xpath: Improvements to math conformance.
+    	
+ 2004-11-23  Chris Burdess  <dog@gnu.org>
+ 
+    	* dom: Use LS implementation for JAXP DocumentBuilder.
+    	* ls: Fixed namespace node handling.
+    	
+ 2004-11-22  Chris Burdess  <dog@gnu.org>
+ 
+    	* transform,xpath: Namespace context support.
+    	* transform: XSL message instruction, special number handling, key()
+    	function
+    	
+ 2004-11-21  Chris Burdess  <dog@gnu.org>
+ 
+    	* dom: Use XMLConstants constants instead of literals.
+    	* transform: Fixed infinite loop in roman numeral generation.
+    	* xpath: Resolve functions at parse time.
+    	
+ 2004-11-20  Chris Burdess  <dog@gnu.org>
+ 
+    	* dom: Do not report events during DOM construction.
+    	
+ 2004-11-19  Chris Burdess  <dog@gnu.org>
+ 
+    	* transform: OASIS XSLT conformance improvements.
+    	
+ 2004-11-18  Chris Burdess  <dog@gnu.org>
+ 
+    	* ls: Implemented more of FilteredSAXEventSink.
+    	* transform: use-attribute-sets on literal result element.
+    	
+ 2004-11-16  Chris Burdess  <dog@gnu.org>
+ 
+    	* dom: Implemented Document.renameNode, Document.normalizeDocument,
+    	Element.setIdAttribute*. DomDocument.verifyXmlName accuracy was
+         improved. XML 1.1 Name, NCName, and Char checking was implemented,
+         and XML 1.0 rules applied.
+    	
+ 2004-11-15  Chris Burdess  <dog@gnu.org>
+ 
+    	* dom: Improved DOM Level 3 conformance.
+    	
+ 2004-11-14  Chris Burdess  <dog@gnu.org>
+ 
+    	* dom: TypeInfo implementations for DTD-specified type declarations.
+    	* ls: New DOM Level 3 Load and Save implementation.
+    	
+ 2004-11-11  Chris Burdess  <dog@gnu.org>
+ 
+    	* transform: Implemented decimal-formats and number formatting.
+    	* xpath: Implemented XSL-style pattern matching.
+    	
+ 2004-11-10  Chris Burdess  <dog@gnu.org>
+ 
+    	* transform: Additional XSLT XPath extension functions. More output
+  	parameters taken into account. Attribute-sets and namespace aliases
+ 	implemented.
+    	
+ 2004-11-09  Chris Burdess  <dog@gnu.org>
+ 
+    	* xpath: Separated functions into separate classes for efficiency.
+    	Fixes to evaluation model, notably path components.
+    	* transform: Fixes to XPath expression evaluation.
+    	
+ 2004-11-08  Chris Burdess  <dog@gnu.org>
+ 
+    	* transform: Fixes to template calling in foreign stylesheets.
+    	
+ 2004-11-04  Chris Burdess  <dog@gnu.org>
+ 
+    	* ContentHandler2.java: Extension interface for reporting XML
+    	declaration.
+    	* SAXDriver.java,XmlParser.java: Report XML declaration to content
+    	handlers implementing the ContentHandler2 interface.
+    	* Consumer.java,DomConsumer.java,EventFilter.java: Pass xmlDecl
+    	events to ContentHandler2s.
+    	* JAXPFactory.java: Set document URI during parse.
+    	* transform,xpath: document() function, function calls, variable
+    	binding fixes
+    	
+ 2004-11-03  Chris Burdess  <dog@gnu.org>
+ 
+  	* dom: Refactoring of DomNode for efficiency, using pointers to
+  	next/previous/first/last nodes instead of arrays of children, and
+  	explicit node type without the need for a method call. Fixed
+  	problems inserting DocumentFragments.
+  	* transform: whitespace stripping; parameters and variables;
+  	document() function.
+  	* xpath: Name test fix.
+    	
+ 2004-11-02  Chris Burdess  <dog@gnu.org>
+ 
+    	* transform: Fully compiled templates; many more XSL language
+    	features supported; stream, SAX, and DOM results.
+    	
+ 2004-10-31  Chris Burdess  <dog@gnu.org>
+ 
+ 	* DomNode.java: Implement Comparable using natural document order. 
+ 	* xpath: Use natural document ordering in DomNode.
+    	
+ 2004-10-30  Chris Burdess  <dog@gnu.org>
+ 
+    	* transform: Experimental XSLT transformer using XPath
+    	implementation.
+    	
+ 2004-10-28  Chris Burdess  <dog@gnu.org>
+ 
+    	* xpath: Implemented XPathFactory.newInstance(); added missing
+    	imports in GNU implementation.
+    	
+ 2004-10-27  Chris Burdess  <dog@gnu.org>
+ 
+    	* xpath: Added JAXP XPath implementation. Variable references and
+    	function calls now use JAXP resolver callback interfaces.
+    	
+ 2004-10-20  Chris Burdess  <dog@gnu.org>
+ 
+    	* all: Updates to bring API in line with JAXP 1.3: introduction of
+    	datatype, namespace, validation, and xpath JAXP packages and
+         miscellaneous updates to other packages. Style corrections.
+    	
+ 2004-10-18  Chris Burdess  <dog@gnu.org>
+ 
+    	* xpath: Number parsing fixes.
+    	
+ 2004-10-17  Chris Burdess  <dog@gnu.org>
+ 
+    	* xpath: XPath function calls.
+    	
+ 2004-10-18  Dalibor Topic  <robilad@kaffe.org>
+ 
+        * sources/gnu/xml/xpath/Index.java: Added missing include.
+           (toString) Convert left and right hand side to strings
+           explicitely.
+ 
+ 2004-10-17  Chris Burdess  <dog@gnu.org>
+ 
+    	* xpath: Added experimental XPath 1.0 engine.
+    	
+ 2004-10-06  Chris Burdess  <dog@gnu.org>
+ 
+    	* dom: Added framework for XPath expression evaluation.
+    	
+ 2004-08-10  Musachy Barroso  <musachy@gmail.com>
+ 
+    	* XmlParser.java: Fixed bug while reading 0x2028. Check
+    	for document version in external subset.
+    	
+ 2004-08-10  Musachy Barroso  <musachy@gmail.com>
+ 
+    	* XmlParser.java: Convert 0x2028 to '\r' when document is 1.1
+    	
+ 2004-08-08  Musachy Barroso  <musachy@gmail.com>
+ 
+    	* XmlParser.java: Report start name characters that are not
+    	BaseChar. (more of them)
+    	
+ 2004-08-08  Musachy Barroso  <musachy@gmail.com>
+ 
+    	* XmlParser.java: Report start name characters that are not
+    	BaseChar. 
+         
+ 2004-08-08  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Report NEL characters as igorable if document
+         is 1.1
+ 	
+ 2004-08-07  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Fixed bug while reading whitespaces in elements
+ 	content.
+ 	
+ 2004-08-06  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* SAXDriver.java: Check added for missing prefix in namespace 
+ 	declaration attribute.
+ 	
+ 2004-08-06  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Partial character ref, partial entity 
+ 	references checks, moved to parseEntity(...)
+ 	
+ 2004-08-06  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* SAXDriver.java: Checks added for colon in entities, PI and
+ 	notations. Unbounded prefixes error changed to fatal.
+ 	
+ 2004-08-05  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* SAXDriver.java: Fixed bug intruduced with the partial character
+ 	ref, partial entity references checks.
+ 	
+ 2004-08-05  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* SAXDriver.java: Fixed bug intruduced with the partial character
+ 	ref, partial entity references checks.
+ 	
+ 2004-08-03  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* SAXDriver.java: Check added for namespaces names containing only
+ 	':'. 
+ 	
+ 2004-07-31  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Improved check for partial character references
+ 	and partial entity references in internal entities. 
+ 	
+ 2004-07-31  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Added check for partial character references
+ 	in internal entities. 
+ 	
+ 2004-07-29  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* SAXDriver.java: Added checks for invalid use of reserved 
+ 	prefixes and namespaces.
+ 	
+ 2004-07-28  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Invalidate character range [0x7f - 0x9f] if the 
+ 	document version is 1.1. 0x85(NEL) is still valid.
+ 	 
+ 2004-07-25  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Fixed end-of-line handling to comply with sec 2.11.
+ 	
+ 2004-07-11  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Handle empty documents.
+ 	
+ 2004-07-11  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Call StartDocument at the right time.
+ 	
+ 2004-07-11  Musachy Barroso  <musachy@gmail.com>
+ 
+ 	* XmlParser.java: Disable LIT_DISABLE_CREF flag on entities parsing.
+ 
+ 2004-07-11  Musachy Barroso  <musachy@gmail.com>
+ 	
+ 	* SAXDriver.java: Refactoring of various attributes lists into a single list.
+ 	
+ 2004-06-24  Chris Burdess <dog@bluezoo.org>
+ 
+ 	* SAXDriver.java: Introduced reset method to reset state before
+ 	    new parse. Thanks to Musachy Barroso.
+ 
+ 2003-12-01 00:32  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/: *.java : Removed al the cvs
+ 	  tags inside sources to avoid complicated synchro. Patch by
+ 	  Dalibor Topic. Many thanks
+ 
+ 2003-11-06 12:18  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/: SAXDriver.java, XmlParser.java: Ito
+ 	  conclusion patch
+ 
+ 2003-11-06 12:11  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/XIncludeFilter.java: Call methods of
+ 	  super class
+ 
+ 2003-10-23 15:28  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/XMLReaderFactory.java: Wrong exception
+ 	  catched, thanks to Michael Koch
+ 
+ 2003-10-18 12:51  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: Ito Kazumitsu
+ 	  <kaz@maczuka.gcd.org>  found a case where GNU JAXP throws
+ 	  unwanted SAXParseExceptions. This is his patch.
+ 
+ 2003-09-13 15:56  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/sax/SAXSource.java: Handle case where
+ 	  sourceToInputSource() is called with an existing SAXSource.
+ 	  Thanks to Jim Pick
+ 	  <http://www.kaffe.org/pipermail/kaffe/2003-August/043709.html>
+ 
+ 2003-09-13 15:43  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: Corrected parseCharRef()
+ 	  so that it may not flush data buffer when not desired. This patch
+ 	  has been done by Ito Kazumitsu <kaz@maczuka.gcd.org>, many thanks
+ 	  <http://www.kaffe.org/pipermail/kaffe/2003-September/043771.html>
+ 
+ 2003-08-19 11:52  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/TransformerException.java:
+ 	  printStackTrace(System.out);// shouldn't it be System.err?
+ 
+ 2003-08-19 11:51  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/TransformerConfigurationException.java:
+ 	  new instance variable SourceLocator locator and two new
+ 	  constructors: public TransformerConfigurationException(String
+ 	  msg, SourceLocator locator), public
+ 	  TransformerConfigurationException(String msg, SourceLocator
+ 	  locator, Throwable ex)
+ 
+ 2003-08-16 10:50  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/SAXParser.java: parse(...) throws
+ 	  IllegalArgumentException if the argument is null.
+ 
+ 2003-08-16 10:49  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/DocumentBuilderFactory.java: JavaDoc
+ 	  changes: getAttribute(String) and setAttribute(String,Object)
+ 	  throws IllegalArgumentException if String is null, newInstance()
+ 	  throws FactoryConfigurationError
+ 
+ 2003-08-16 10:49  Arnaud Vandyck <avdyk@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/DocumentBuilder.java: parse([*]) throws
+ 	  IllegalArgumentException if the argument is null. [*]File,
+ 	  InputSource, InputStream, InputStream, String
+ 
+ 2003-01-21 19:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/XIncludeFilter.java: identify some
+ 	  limitations from a more recent CR
+ 
+ 2003-01-21 19:18  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: report the illegal 'no
+ 	  prefixes, no names' state
+ 
+ 2003-01-21 19:14  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/ClassStuff.java: add ie workaround
+ 
+ 2003-01-21 00:54  Nic Ferrier <nferrier@tapsellferrier.co.uk>
+ 
+ 	* source/javax/xml/parsers/ClassStuff.java: changed Exception to
+ 	  Throwable.
+ 
+ 2003-01-21 00:46  Nic Ferrier <nferrier@tapsellferrier.co.uk>
+ 
+ 	* source/: gnu/xml/aelfred2/SAXDriver.java,
+ 	  org/xml/sax/ext/Attributes2.java,
+ 	  org/xml/sax/ext/Attributes2Impl.java:
+ 	  source/gnu/xml/aelfred2/SAXDriver.java
+ 	  source/org/xml/sax/ext/Attributes2.java
+ 	  source/org/xml/sax/ext/Attributes2Impl.java:	 added isDeclared()
+ 	  definition.
+ 
+ 2002-12-06 18:18  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlReader.java: don't change
+ 	  namespace-prefixes setting when we bind() fixes bug reported with
+ 	  Kaffe, from Ito Kazumitsu
+ 
+ 2002-10-15 23:04  Nic Ferrier <nferrier@tapsellferrier.co.uk>
+ 
+ 	* tests/dom/: NodeType.java, nodetype.xml: new test code.
+ 
+ 2002-10-15 23:03  Nic Ferrier <nferrier@tapsellferrier.co.uk>
+ 
+ 	* source/gnu/xml/util/DoParse.java:
+ 	  source/gnu/xml/util/DoParse.java: added specific imports to fix a
+ 	  GCJ compilation problem.
+ 
+ 2002-10-15 23:02  Nic Ferrier <nferrier@tapsellferrier.co.uk>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java:
+ 	  source/gnu/xml/aelfred2/XmlParser.java (parseEntityDecl): get the
+ 	  value using flags instead of 0.
+ 
+ 2002-10-15 23:01  Nic Ferrier <nferrier@tapsellferrier.co.uk>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: source/gnu/xml/dom/DomNode.java
+ 	  (checkMisc): debug code (commented out for now).
+ 
+ 2002-10-15 22:59  Nic Ferrier <nferrier@tapsellferrier.co.uk>
+ 
+ 	* HACKING, Makefile.aj, Makefile.in, README, aclocal.m4,
+ 	  automakejar, configure, configure.in: automakejar based build
+ 	  system.
+ 
+ 2002-05-31 18:09  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/: dom/DomDocument.java, pipeline/DomConsumer.java:
+ 	  xmlns URI needs a trailing "/"
+ 
+ 2002-04-21 23:32  Nic Ferrier <nferrier@tapsellferrier.co.uk>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: added getNodeType for GCJ
+ 	  compatibility
+ 
+ 2002-03-07 21:38  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: cleanup, CDATA fix,
+ 	  bigger symtab
+ 
+ 2002-03-07 20:10  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: minor fixes
+ 
+ 2002-03-07 20:06  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: ignore unrecognized
+ 	  properties
+ 
+ 2002-02-12 21:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/XsltFilter.java: bugfix: hookup output
+ 
+ 2002-02-08 20:15  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/Resolver.java: @see XCat
+ 
+ 2002-02-08 19:51  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/: parsers/DocumentBuilder.java,
+ 	  transform/stream/StreamSource.java: expect JVM to report
+ 	  FileNotFoundException
+ 
+ 2002-02-03 02:42  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/XCat.java: doc tweaks
+ 
+ 2002-02-02 22:21  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: add null transform
+ 
+ 2002-02-02 22:10  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/SAXNullTransformerFactory.java: create
+ 
+ 2002-02-01 21:06  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/*.java: sync with SAX (2.0.1)
+ 
+ 2001-12-31 23:51  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomImpl.java: don't create xmlns attribute
+ 
+ 2001-12-13 20:20  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: don't force static
+ 	  linking of so many other classes
+ 
+ 2001-12-10 21:08  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlReader.java: thinner import
+ 
+ 2001-12-06 00:16  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/SAXParser.java: doesn't discard File
+ 	  naming any more; doc and cleanup
+ 
+ 2001-12-05 23:49  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/: DocumentBuilderFactory.java,
+ 	  SAXParserFactory.java: rm extra import
+ 
+ 2001-12-05 23:48  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/DocumentBuilder.java: minor doc tweaks,
+ 	  fileToUrl is package-private
+ 
+ 2001-12-05 21:54  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: report VC +
+ 	  skippedEntity() if skipped PEs; report PE Nesting VCs; Microstar
+ 	  said "PD" too
+ 
+ 2001-12-05 21:33  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: update note re Microstar
+ 	  license
+ 
+ 2001-12-03 22:35  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: report char data without
+ 	  extra buffer copy
+ 
+ 2001-11-30 00:35  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/DomParser.java: note conflict with Namespace
+ 	  REC
+ 
+ 2001-11-29 23:56  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/: CallFilter.java, XIncludeFilter.java:
+ 	  compile on jdk 1.1
+ 
+ 2001-11-29 23:55  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: note conflict with
+ 	  Namespace REC
+ 
+ 2001-11-29 23:48  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/: Consumer.java, DomDoctype.java,
+ 	  DomDocument.java, DomNamedNodeMap.java: compile with jdk 1.1
+ 
+ 2001-11-29 23:38  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/: parsers/ClassStuff.java,
+ 	  transform/ClassStuff.java: compile with jdk 1.1
+ 
+ 2001-11-24 23:26  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: add XCat
+ 
+ 2001-11-24 23:21  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/XCat.java: create
+ 
+ 2001-11-21 03:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* manifest.mf: for now, don't seal
+ 
+ 2001-11-21 03:04  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: update
+ 
+ 2001-11-21 02:53  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: minor speedups for traversal and
+ 	  notification
+ 
+ 2001-11-21 02:36  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/*.java: sync w/sax2r2pre3
+ 
+ 2001-11-20 23:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: minor cleanup to char ref
+ 	  parsing
+ 
+ 2001-11-20 05:57  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/: DomEvent.java, DomEx.java, DomImpl.java,
+ 	  DomIterator.java: update copyright date
+ 
+ 2001-11-20 05:54  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomText.java: move getNodeType() back into
+ 	  subclasses; rm isIgnorable
+ 
+ 2001-11-20 05:53  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomAttr.java, DomCDATA.java,
+ 	  DomCharacterData.java, DomComment.java, DomDoctype.java,
+ 	  DomDocument.java, DomElement.java, DomEntity.java,
+ 	  DomEntityReference.java, DomExtern.java, DomFragment.java,
+ 	  DomNotation.java, DomNsNode.java, DomPI.java: move getNodeType()
+ 	  back into subclasses
+ 
+ 2001-11-20 05:48  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: move getNodeType() back into
+ 	  subclasses
+ 
+ 2001-11-20 05:46  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/: Consumer.java, DomNamedNodeMap.java: space
+ 	  savings for attribute lists
+ 
+ 2001-11-20 02:20  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/: Consumer.java, DomNode.java: compact lists
+ 	  of children
+ 
+ 2001-11-20 02:15  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/XMLWriter.java: force output buffering; don't
+ 	  use String.toCharArray() so much
+ 
+ 2001-11-19 23:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: support cheaper
+ 	  construction
+ 
+ 2001-11-19 23:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/: DomCDATA.java, DomText.java, Consumer.java,
+ 	  DomDocument.java: support cheaper construction
+ 
+ 2001-11-19 23:21  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomCharacterData.java: use char arrays, not
+ 	  strings
+ 
+ 2001-11-19 19:49  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomDocument.java: check chars by default
+ 
+ 2001-11-19 19:27  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: fix no-namespaces bug in
+ 	  previous
+ 
+ 2001-11-19 06:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: correctly re-init
+ 	  namespace support
+ 
+ 2001-11-19 06:12  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: add javadoc package.html files
+ 
+ 2001-11-19 05:48  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomDocument.java: more attr defaulting on
+ 	  create
+ 
+ 2001-11-19 05:37  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/: transform/dom/package.html,
+ 	  transform/stream/package.html, parsers/package.html: create
+ 
+ 2001-11-19 04:27  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/Consumer.java: force name checking off in
+ 	  2nd-Nth passes too
+ 
+ 2001-11-19 04:24  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/JAXPFactory.java: use AElfred2 (conformance,
+ 	  performance)
+ 
+ 2001-11-19 00:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: speedup comment, PI,
+ 	  CDATA for faster parsing of well commmented dtds, and less
+ 	  garbage
+ 
+ 2001-11-17 04:02  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: update DOM test status
+ 
+ 2001-11-17 03:38  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: correct namespace filtering
+ 
+ 2001-11-17 03:27  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomAttr.java: set isSpecified when value
+ 	  changes
+ 
+ 2001-11-17 00:17  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/: DomDocument.java, DomElement.java: namespace
+ 	  fixes
+ 
+ 2001-11-17 00:12  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: namespace fixes
+ 
+ 2001-11-16 23:46  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: localname null in most cases
+ 
+ 2001-11-16 23:44  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNsNode.java: more errors to check for
+ 
+ 2001-11-16 23:42  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNamedNodeMap.java: default namespaced attrs
+ 	  too
+ 
+ 2001-11-16 21:24  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomDocument.java: createElement defaults
+ 	  attrs; getElementById; NS fix
+ 
+ 2001-11-16 21:14  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNamedNodeMap.java: restore defaulted
+ 	  attributes
+ 
+ 2001-11-16 21:13  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/Consumer.java: save attribute default/ID info
+ 
+ 2001-11-16 21:09  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomDoctype.java: remember defaulted/ID
+ 	  attributes
+ 
+ 2001-11-16 14:34  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomDocument.java: fix off-by-one w/namespaces
+ 
+ 2001-11-16 10:08  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/JAXPFactory.java: use right feature id for
+ 	  validation
+ 
+ 2001-11-16 09:37  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: entity refs can now be
+ 	  on stack
+ 
+ 2001-11-14 22:54  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: update
+ 
+ 2001-11-14 22:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/package.html: describe MT behavior
+ 
+ 2001-11-14 22:13  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/: SAXDriver.java, XmlParser.java: support
+ 	  EntityResolver2; cleanup
+ 
+ 2001-11-13 21:57  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: add EntityResolver2 extension
+ 
+ 2001-11-13 21:54  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/: package.html, ext/Locator2.java: sync with
+ 	  latest
+ 
+ 2001-11-13 21:46  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/ext/: DefaultHandler2.java,
+ 	  EntityResolver2.java: sync w/latest (alpha) extensions
+ 
+ 2001-11-13 21:44  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/XMLReaderFactory.java: add
+ 	  compile-time fallback
+ 
+ 2001-11-13 21:43  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/NewInstance.java: sync: build with jdk
+ 	  1.1
+ 
+ 2001-11-13 21:41  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/: ext/package.html, helpers/package.html: doc
+ 	  sync
+ 
+ 2001-11-12 00:15  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: match all other SAX2
+ 	  parser startDTD calls
+ 
+ 2001-11-11 07:53  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: cleaner handling of base
+ 	  URI and absolutizing
+ 
+ 2001-11-11 07:49  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: don't report illegal
+ 	  system IDs
+ 
+ 2001-11-11 04:27  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: throw
+ 	  SAXNotSupportedException
+ 
+ 2001-11-10 19:36  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: handles Japanese/... docs
+ 	  again; correctly flush text before reading an external entity
+ 
+ 2001-11-10 00:02  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: util.DefaultHandler -> sax.ext.DefaultHandler2
+ 
+ 2001-11-10 00:00  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/DefaultHandler.java: remove -- replaced by
+ 	  org.xml.sax.ext.DefaultHandler2
+ 
+ 2001-11-09 23:58  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/DomParser.java: use DefaultHandler2
+ 
+ 2001-11-09 23:55  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/: SAXDriver.java, XmlReader.java: use
+ 	  ext/Defaulthandler2
+ 
+ 2001-11-09 23:53  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: use ext/DefaultHandler2
+ 	  not util/DefaultHandler
+ 
+ 2001-11-09 23:53  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/: NSFilter.java, PipelineFactory.java,
+ 	  ValidationConsumer.java, WellFormednessFilter.java: rm import of
+ 	  unused class
+ 
+ 2001-11-09 22:03  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: unrecognized URI schemes
+ 	  are sometimes OK
+ 
+ 2001-11-09 21:26  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: refix
+ 	  startEntity/resolveEntity sequence; null sysid OK given char/byte
+ 	  stream; default handlers are null
+ 
+ 2001-11-09 21:24  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: refix
+ 	  startEntity/resolveEntity sequence; don't absolutize null sysid
+ 
+ 2001-11-07 03:07  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/ext/DefaultHandler2.java,
+ 	  source/org/xml/sax/package.html, Makefile.in: sync w/sax2-ext
+ 
+ 2001-11-07 03:03  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/DomParser.java: get/set nulls for properties
+ 
+ 2001-11-07 02:17  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: resolve-dtd-uris flag; rm
+ 	  unused fn()
+ 
+ 2001-11-07 02:12  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: resolve-dtd-uris flag;
+ 	  unset props are null
+ 
+ 2001-11-06 06:45  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/: XMLReader.java,
+ 	  helpers/NamespaceSupport.java, helpers/ParserAdapter.java,
+ 	  helpers/XMLFilterImpl.java: sync with sax@sourceforge
+ 
+ 2001-11-05 23:55  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlReader.java: validation forces some
+ 	  flag settings
+ 
+ 2001-11-05 23:38  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/: SAXDriver.java, XmlParser.java:
+ 	  optionally skip external PEs/GEs
+ 
+ 2001-11-05 08:25  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: bugfix UTF-8 BOM support
+ 
+ 2001-11-05 07:46  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/ValidationConsumer.java: E20 erratum
+ 
+ 2001-11-04 04:58  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/Consumer.java: after it's parsed, start to
+ 	  check names
+ 
+ 2001-11-04 04:43  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: blush ;)
+ 
+ 2001-11-04 02:38  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/XMLWriter.java: write PE decls correctly
+ 
+ 2001-11-04 02:18  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/package.html: cleanup
+ 
+ 2001-11-04 02:17  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/Consumer.java: populate entity ref nodes
+ 
+ 2001-11-04 02:15  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/JAXPFactory.java: fixes to option handling
+ 
+ 2001-11-04 02:11  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: hooks to populate
+ 	  entity refs; cleanup for noise options
+ 
+ 2001-11-04 01:51  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: event bugfixes, construction
+ 	  tweak
+ 
+ 2001-11-04 01:49  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: bugfix reporting for
+ 	  internal entities; misc
+ 
+ 2001-11-04 00:28  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/XMLWriter.java: better indenting
+ 
+ 2001-11-03 01:51  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: update
+ 
+ 2001-11-03 01:51  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* LICENSE: clarify
+ 
+ 2001-11-03 01:50  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/JAXPFactory.java: patch from Mike Gratton
+ 	  <mike@vee.net>
+ 
+ 2001-11-03 01:44  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: cleanup, add release target
+ 
+ 2001-11-02 23:07  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/: ErrorListener.java, OutputKeys.java,
+ 	  Result.java, Source.java, SourceLocator.java, Templates.java,
+ 	  Transformer.java, TransformerConfigurationException.java,
+ 	  TransformerException.java, TransformerFactory.java,
+ 	  TransformerFactoryConfigurationError.java, URIResolver.java,
+ 	  dom/DOMLocator.java, dom/DOMResult.java, dom/DOMSource.java,
+ 	  sax/SAXResult.java, sax/SAXSource.java,
+ 	  sax/SAXTransformerFactory.java, sax/TemplatesHandler.java,
+ 	  sax/TransformerHandler.java, stream/StreamResult.java,
+ 	  stream/StreamSource.java: license update
+ 
+ 2001-11-02 22:40  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/: DocumentBuilder.java,
+ 	  DocumentBuilderFactory.java, FactoryConfigurationError.java,
+ 	  ParserConfigurationException.java, SAXParserFactory.java: license
+ 	  update
+ 
+ 2001-11-02 22:39  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/SAXParser.java: license update; don't
+ 	  discard some URIs
+ 
+ 2001-10-29 23:05  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/TransformerFactory.java: use
+ 	  ClassStuff; add javadoc
+ 
+ 2001-10-29 22:59  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: add transform/ClassStuff
+ 
+ 2001-10-29 22:49  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/: DefaultHandler.java, DomParser.java,
+ 	  Resolver.java: javadoc fixes
+ 
+ 2001-10-29 22:46  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/package.html: mention euro issues
+ 
+ 2001-10-27 19:12  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/sax/SAXTransformerFactory.java: add
+ 	  javadoc
+ 
+ 2001-10-27 19:00  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/Transformer.java: add javadoc
+ 
+ 2001-10-26 22:50  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/: parsers/DocumentBuilder.java,
+ 	  transform/stream/StreamResult.java,
+ 	  transform/stream/StreamSource.java: add/use jdk1.1-compatible
+ 	  fileToUrl()
+ 
+ 2001-10-26 22:47  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/: parsers/ClassStuff.java,
+ 	  transform/ClassStuff.java: both packages need factory utils
+ 
+ 2001-10-25 10:09  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/XMLWriter.java: javadoc tweaks
+ 
+ 2001-10-25 09:41  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/WellFormednessFilter.java: javadoc tweaks
+ 
+ 2001-10-25 09:32  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/XIncludeFilter.java: javadoc tweaks
+ 
+ 2001-10-25 09:25  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/ValidationConsumer.java: javadoc tweaks
+ 
+ 2001-10-25 09:11  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/LinkFilter.java: javadoc tweaks
+ 
+ 2001-10-25 09:06  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/NSFilter.java: javadoc tweaks
+ 
+ 2001-10-25 08:49  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: javadoc tweaks
+ 
+ 2001-10-25 00:50  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/TeeConsumer.java: javadoc tweaks
+ 
+ 2001-10-25 00:39  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: javadoc tweaks
+ 
+ 2001-10-25 00:37  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/Consumer.java: Make "backdoor"
+ 	  public/subclassable; tweak for javadoc
+ 
+ 2001-10-24 19:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/sax/TransformerHandler.java: must
+ 	  implement DTDHandler too
+ 
+ 2001-10-24 01:14  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: fixes
+ 
+ 2001-10-24 01:12  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/XsltFilter.java: fix typo
+ 
+ 2001-10-23 22:21  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/package.html: doc
+ 
+ 2001-10-23 21:41  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/NamespaceSupport.java: latest sax2
+ 	  r2pre update
+ 
+ 2001-10-23 20:31  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/Source.java: docs
+ 
+ 2001-10-23 20:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/sax/SAXResult.java, SAXSource.java,
+ 	  SAXTransformerFactory.java, TransformerHandler.java,
+ 	  package.html: docs; add missing implementation
+ 
+ 2001-10-23 20:05  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/ClassStuff.java: use GPL with exception
+ 	  clause
+ 
+ 2001-10-23 20:00  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in, source/gnu/xml/pipeline/XsltFilter.java: Add XSLT
+ 	  pipeline stage
+ 
+ 2001-10-23 19:42  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/*.java: license text now includes GPL "exception"
+ 
+ 2001-10-19 00:20  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/PipelineFactory.java: dom stages weren't
+ 	  fully updated
+ 
+ 2001-10-19 00:08  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/Consumer.java: more pipeline support
+ 
+ 2001-10-19 00:08  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomDoctype.java: null pointer checks
+ 
+ 2001-10-18 08:41  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/NSFilter.java: handle some more errors
+ 
+ 2001-10-18 08:39  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: rm docs for limitations
+ 	  removed ages ago
+ 
+ 2001-10-18 02:57  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: implement Attributes2
+ 
+ 2001-10-18 02:48  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/Consumer.java: use Attributes2 info to set
+ 	  'specified' flag
+ 
+ 2001-10-18 02:45  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: add new files
+ 
+ 2001-10-18 02:40  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* LICENSE: add
+ 
+ 2001-10-18 02:39  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/ext/: Attributes2.java, Attributes2Impl.java,
+ 	  Locator2.java, Locator2Impl.java: sync with latest (alpha)
+ 	  extensions
+ 
+ 2001-10-18 02:36  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/*.java: sync with SAX2 r2pre2 and (alpha)
+ 	extensions
+ 
+ 2001-10-15 06:06  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/ClassStuff.java,
+ 	  DocumentBuilderFactory.java, SAXParserFactory.java: use the
+ 	  right class loader
+ 
+ 2001-10-15 04:48  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: cleanups, add XInclude
+ 
+ 2001-10-15 04:28  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: handle xml-stylesheet and
+ 	  similar PIs
+ 
+ 2001-10-15 04:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/PipelineFactory.java: teach about
+ 	  XInclude stage
+ 
+ 2001-10-15 04:18  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: minor binding magic for
+ 	  XInclude
+ 
+ 2001-10-15 04:12  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/XIncludeFilter.java: create
+ 
+ 2001-10-08 21:35  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* configure: match current configure.in
+ 
+ 2001-10-07 06:26  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/Resolver.java: refer to latest RFC on XML
+ 	  mimetypes
+ 
+ 2001-10-07 06:18  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/CallFilter.java: use encoding reported by
+ 	  server
+ 
+ 2001-10-07 06:09  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/XMLReaderFactory.java: bugfix system
+ 	  property and compiled-in default cases
+ 
+ 2001-10-07 06:04  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: locator/entity bugfix,
+ 	  standalone flag, doc tweaks
+ 
+ 2001-10-07 05:56  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: better SAX2 conformance
+ 	  w.r.t. "declared" system IDs
+ 
+ 2001-09-29 09:25  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/NewInstance.java: added from
+ 	  sax@sourceforge
+ 
+ 2001-09-29 09:24  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* configure.in: autoconf variables aren't $variables like bash
+ 
+ 2001-09-29 08:40  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: sax added a file, configure --with-gcj
+ 
+ 2001-09-29 08:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/Resolver.java: document return type
+ 
+ 2001-09-29 07:54  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* configure, configure.in: "--with-gcj" as javac substitute
+ 
+ 2001-09-29 07:34  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/AttributeListImpl.java,
+ 	  AttributesImpl.java, DefaultHandler.java, LocatorImpl.java,
+ 	  NamespaceSupport.java, ParserAdapter.java, ParserFactory.java,
+ 	  XMLFilterImpl.java, XMLReaderAdapter.java, XMLReaderFactory.java,
+ 	  package.html: sync with latest sax@sourceforge
+ 
+ 2001-09-26 21:31  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/XMLWriter.java: minor doc update
+ 
+ 2001-08-30 01:45  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomDocument.java: "xml" illegal for pi target
+ 	  name
+ 
+ 2001-08-24 23:44  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: pipelines can optimize
+ 	  to null
+ 
+ 2001-08-24 23:43  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: better subclass support
+ 
+ 2001-08-24 23:38  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomAttr.java, DomCharacterData.java: update
+ 	  createEvent() calls
+ 
+ 2001-08-24 23:36  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlReader.java: force prefixes=true when
+ 	  validating,
+ 
+ 2001-08-21 19:14  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: use other notion of event "type"
+ 
+ 2001-08-18 22:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/w3c/dom/*.java: merge 6/21/2001 W3C mapping/javadoc
+ 	  errata
+ 
+ 2001-08-09 20:33  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: trim unneeded code; save
+ 	  standalone flag
+ 
+ 2001-08-09 20:31  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlReader.java: signature update
+ 
+ 2001-08-09 20:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* manifest.mf: initial version
+ 
+ 2001-08-09 20:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: META-INF support, don't build unused DOM modules
+ 
+ 2001-08-07 20:16  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/InputSource.java: sync w/sax@sourceforge
+ 
+ 2001-08-03 21:13  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/: AttributeListImpl.java,
+ 	  LocatorImpl.java, ParserFactory.java, XMLFilterImpl.java: sync
+ 	  w/sax@sourceforge
+ 
+ 2001-08-03 21:08  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/*.java: sync w/sax@sourceforge
+ 
+ 2001-08-03 21:00  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: tweak generated javadoc
+ 
+ 2001-08-03 20:58  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/XMLReaderAdapter.java: sync
+ 	  w/sax@sourceforge: doc
+ 
+ 2001-08-03 20:57  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/ParserAdapter.java: sync
+ 	  w/sax@sourceforge: bugs
+ 
+ 2001-08-03 20:56  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/NamespaceSupport.java: sync
+ 	  w/sax@sourceforge: doc, bugs
+ 
+ 2001-08-03 20:53  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/AttributesImpl.java: sync
+ 	  w/sax@sourceforge: bugfix
+ 
+ 2001-08-03 20:51  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/ext/DeclHandler.java,
+ 	  ext/LexicalHandler.java, ext/package.html,
+ 	  helpers/DefaultHandler.java: sync w/sax@sourceforge: doc
+ 
+ 2001-08-03 20:48  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/Locator.java, package.html: sync
+ 	  w/sax@sourceforge: doc
+ 
+ 2001-08-03 20:47  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/DTDHandler.java, EntityResolver.java,
+ 	  ErrorHandler.java: sync w/sax@sourceforge: doc fixes
+ 
+ 2001-07-31 08:42  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: handle namespace decls
+ 	  in two passes (correctness)
+ 
+ 2001-07-31 08:38  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: absolutize URLs earlier;
+ 	  undo flush tweak; #IMPLIED attrs not reported
+ 
+ 2001-07-29 21:26  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: flush buffer more; MIME
+ 	  charset= bug
+ 
+ 2001-07-29 21:14  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: better diagnostic for
+ 	  runtime exceptions
+ 
+ 2001-07-29 21:12  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: update
+ 
+ 2001-07-29 20:58  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: add chainTo() glue to
+ 	  XMLFilterImpl
+ 
+ 2001-07-18 19:03  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: handle UTF-8 BOM (yeech)
+ 
+ 2001-07-18 19:01  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: update
+ 
+ 2001-07-18 18:40  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: bugfix name of a javax.transform Error
+ 
+ 2001-07-18 18:39  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: namespace checks must
+ 	  just be warnings
+ 
+ 2001-07-18 18:34  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/: TFactoryConfigurationError.java,
+ 	  TransformerFactoryConfigurationError.java: fix error class name
+ 
+ 2001-07-18 18:32  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/TransformerFactory.java: exception
+ 	  bugfix; alphabetize; style
+ 
+ 2001-07-18 18:28  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/TransformerException.java: add missing
+ 	  method, missing implementations
+ 
+ 2001-07-18 18:27  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	*
+ 	  source/javax/xml/transform/TransformerConfigurationException.java:
+ 	  alphabetize to match spec
+ 
+ 2001-07-18 18:25  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/ErrorListener.java,
+ 	  SourceLocator.java: javadoc summary
+ 
+ 2001-07-18 18:24  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/Transformer.java: alphabetize, match
+ 	  spec
+ 
+ 2001-07-18 18:22  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/OutputKeys.java: alphabetize (match
+ 	  spec)
+ 
+ 2001-07-18 18:19  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/stream/StreamResult.java,
+ 	  StreamSource.java: alphabetize; fix file-to-URL bug
+ 
+ 2001-07-18 18:15  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/transform/sax/SAXResult.java: export missing
+ 	  methods; alphabetize
+ 
+ 2001-07-17 22:20  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: feature setting cleanup;
+ 	  don't save unrecognized props/features
+ 
+ 2001-07-16 18:11  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/DocumentBuilder.java,
+ 	  DocumentBuilderFactory.java: add missing method; method order
+ 	  matches spec
+ 
+ 2001-07-14 23:41  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* configure: current autoconf output
+ 
+ 2001-07-14 22:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: add javax.xml.transform to javadoc
+ 
+ 2001-07-14 22:14  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: namespaces: intern uris,
+ 	  expect non-relative ones
+ 
+ 2001-07-14 21:49  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/package.html: import tweak given to
+ 	  sax@sourceforge
+ 
+ 2001-07-13 19:39  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/JAXPFactory.java: bugfix, from Zeger
+ 	  Hendrikse
+ 
+ 2001-07-12 23:07  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/package.html: update
+ 
+ 2001-07-12 23:03  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/InputSource.java: merge minor diff from
+ 	  sax@sourceforge
+ 
+ 2001-07-11 20:32  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: import CallFilter
+ 
+ 2001-07-11 20:32  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/CallFilter.java: import
+ 
+ 2001-07-11 19:51  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/package.html: import
+ 
+ 2001-07-11 19:50  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: more files, update
+ 
+ 2001-07-11 19:28  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/helpers/XMLReaderFactory.java: switch to
+ 	  optionally validating default
+ 
+ 2001-07-11 19:26  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/: DoParse.java, Resolver.java, package.html:
+ 	  import
+ 
+ 2001-07-11 19:15  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/XMLWriter.java: cleanup, start C14N support,
+ 	  add helpers
+ 
+ 2001-07-11 19:09  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/: SAXDriver.java, XmlParser.java: DTD
+ 	  callback simplification; minor tweaks
+ 
+ 2001-07-11 18:56  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: restore missing break
+ 
+ 2001-07-11 18:55  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/ValidationConsumer.java: that warning
+ 	  gets annoying
+ 
+ 2001-07-11 01:07  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: imported two more files
+ 
+ 2001-07-11 01:05  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: version != "1.0" is no
+ 	  longer fatal
+ 
+ 2001-07-11 01:00  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlReader.java: use EventFilter.bind()
+ 
+ 2001-07-11 00:56  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/WellFormednessFilter.java: add some more
+ 	  wfness checks
+ 
+ 2001-07-11 00:55  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: merge the last
+ 	  important EventProducer features
+ 
+ 2001-07-11 00:52  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/: NSFilter.java, LinkFilter.java,
+ 	  PipelineFactory.java: import
+ 
+ 2001-07-11 00:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: restore "filter" mode;
+ 	  DomProducer is now gone
+ 
+ 2001-07-10 23:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/: TeeConsumer.java, TextConsumer.java,
+ 	  ValidationConsumer.java: use EventFilter updates
+ 
+ 2001-07-10 23:22  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: add bind(), constants
+ 	  for URIs
+ 
+ 2001-07-08 14:30  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/ValidationConsumer.java: doc,
+ 	  getDocumentLocator()
+ 
+ 2001-07-08 14:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/NSFilter.java: use getDocumentLocator()
+ 
+ 2001-07-08 14:27  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/EventFilter.java: doc update, bugtweak,
+ 	  getDocumentLocator()
+ 
+ 2001-07-07 20:15  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/: SAXDriver.java, XmlParser.java:
+ 	  scrub-a-dub
+ 
+ 2001-07-05 04:42  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/JAXPFactory.java: use new
+ 	  optionally-validating parser
+ 
+ 2001-07-05 04:06  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: import validation support
+ 
+ 2001-07-05 04:04  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/package.html: javadoc update
+ 
+ 2001-07-05 04:02  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: don't report entity
+ 	  expansions within markup
+ 
+ 2001-07-05 04:00  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: javadoc update
+ 
+ 2001-07-05 03:52  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlReader.java: new _optionally_
+ 	  validating parser
+ 
+ 2001-07-05 03:47  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/ValidationConsumer.java: import
+ 
+ 2001-07-05 03:43  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/: EventFilter.java, TeeConsumer.java,
+ 	  TextConsumer.java, WellFormednessFilter.java: handler -->
+ 	  property; copyright dates
+ 
+ 2001-07-04 18:59  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java: SAX2 conformance:
+ 	  attributeDecl() reports NOTATION enum
+ 
+ 2001-07-04 18:50  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/package.html: update matching recent
+ 	  improvements
+ 
+ 2001-06-24 22:47  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: attribute defaults are
+ 	  yet another place PE ref syntax is ignored
+ 
+ 2001-06-24 19:51  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/XmlParser.java: strict UTF-8 decoding
+ 	  (Unicode 3.1 rules)
+ 
+ 2001-06-24 06:14  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: provide info about conformance testing
+ 
+ 2001-06-24 06:12  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/: Consumer.java, DomCharacterData.java,
+ 	  DomNode.java: bugfixes
+ 
+ 2001-06-24 06:11  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/JAXPFactory.java: closer match to jaxp config
+ 	  flags
+ 
+ 2001-06-24 06:10  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: closer match to jaxp
+ 	  config model
+ 
+ 2001-06-24 06:06  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/: SAXDriver.java, XmlParser.java: report
+ 	  entity boundaries; cleanup
+ 
+ 2001-06-23 23:15  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: new class; populate DOM doctype nodes
+ 
+ 2001-06-23 23:13  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/: dom/Consumer.java, dom/DomDoctype.java,
+ 	  dom/JAXPFactory.java, pipeline/DomConsumer.java: populate doctype
+ 	  nodes
+ 
+ 2001-06-23 07:23  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomCharacterData.java: bugfixes for data manip
+ 
+ 2001-06-23 07:19  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomNode.java: insertBefore bugfixes
+ 
+ 2001-06-23 07:17  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/DomImpl.java: handle alternative "null
+ 	  version"
+ 
+ 2001-06-23 07:14  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/JAXPFactory.java: publicize default
+ 	  constructor
+ 
+ 2001-06-22 17:54  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: add more pipeline stages
+ 
+ 2001-06-22 17:53  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/TeeConsumer.java, TextConsumer.java:
+ 	  more event consumers
+ 
+ 2001-06-22 17:52  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* .cvsignore: ignore javadoc output too
+ 
+ 2001-06-22 17:50  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java: rm javadoc warning
+ 
+ 2001-06-22 17:29  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/NSFilter.java,
+ 	  WellFormednessFilter.java: import more filters
+ 
+ 2001-06-22 17:16  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/util/DomParser.java: import DOM --> SAX2 parser
+ 
+ 2001-06-22 16:53  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: mention autoconf/configure/make
+ 
+ 2001-06-22 16:52  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in: bring over dom, javadoc
+ 
+ 2001-06-22 16:50  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/JAXPFactory.java, package.html: initial jaxp
+ 	  bootstrap support
+ 
+ 2001-06-22 16:47  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/DocumentBuilder.java,
+ 	  DocumentBuilderFactory.java: misc updates, doc
+ 
+ 2001-06-22 16:45  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* .cvsignore: ignore more
+ 
+ 2001-06-22 16:44  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/pipeline/DomConsumer.java, EventConsumer.java,
+ 	  EventFilter.java: partial import of pipelines
+ 
+ 2001-06-20 23:30  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/dom/*.java: import "dom2" implementation
+ 
+ 2001-06-20 22:48  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/package.html: add "lost" sax2 feature flag
+ 
+ 2001-06-20 22:46  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/SAXParserFactory.java: add javadoc, use
+ 	  gnu for system default parser
+ 
+ 2001-06-20 22:43  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java, XmlParser.java,
+ 	  package.html: recognize "lost" sax2 feature flag, doc tweaks
+ 
+ 2001-06-20 22:39  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/JAXPFactory.java: initial version
+ 
+ 2001-06-20 22:36  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* .cvsignore, AUTHORS: add
+ 
+ 2001-06-20 22:36  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* Makefile.in, configure.in: add initial autoconf support
+ 
+ 2001-06-20 17:16  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: add GPL "library exception"
+ 
+ 2001-06-08 23:00  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* README: add
+ 
+ 2001-06-08 22:59  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/gnu/xml/aelfred2/SAXDriver.java, aelfred2/XmlParser.java,
+ 	  aelfred2/package.html, util/DefaultHandler.java,
+ 	  util/XHTMLWriter.java, util/XMLWriter.java: initial add for
+ 	  AElfred2, XMLWriter
+ 
+ 2001-06-08 22:51  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/w3c/dom/Attr.java, CDATASection.java,
+ 	  CharacterData.java, Comment.java, DOMException.java,
+ 	  DOMImplementation.java, Document.java, DocumentFragment.java,
+ 	  DocumentType.java, Element.java, Entity.java,
+ 	  EntityReference.java, NamedNodeMap.java, Node.java,
+ 	  NodeList.java, Notation.java, ProcessingInstruction.java,
+ 	  Text.java, package.html: add dom interfaces (from w3c) and doc
+ 	  (not)
+ 
+ 2001-06-08 22:44  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/w3c/dom/events/DocumentEvent.java, events/Event.java,
+ 	  events/EventException.java, events/EventListener.java,
+ 	  events/EventTarget.java, events/MouseEvent.java,
+ 	  events/MutationEvent.java, events/UIEvent.java,
+ 	  events/package.html, traversal/DocumentTraversal.java,
+ 	  traversal/NodeFilter.java, traversal/NodeIterator.java,
+ 	  traversal/TreeWalker.java, traversal/package.html,
+ 	  css/CSS2Azimuth.java, css/CSS2BackgroundPosition.java,
+ 	  css/CSS2BorderSpacing.java, css/CSS2CounterIncrement.java,
+ 	  css/CSS2CounterReset.java, css/CSS2Cursor.java,
+ 	  css/CSS2FontFaceSrc.java, css/CSS2FontFaceWidths.java,
+ 	  css/CSS2PageSize.java, css/CSS2PlayDuring.java,
+ 	  css/CSS2Properties.java, css/CSS2TextShadow.java,
+ 	  css/CSSCharsetRule.java, css/CSSFontFaceRule.java,
+ 	  css/CSSImportRule.java, css/CSSMediaRule.java,
+ 	  css/CSSPageRule.java, css/CSSPrimitiveValue.java,
+ 	  css/CSSRule.java, css/CSSRuleList.java,
+ 	  css/CSSStyleDeclaration.java, css/CSSStyleRule.java,
+ 	  css/CSSStyleSheet.java, css/CSSUnknownRule.java,
+ 	  css/CSSValue.java, css/CSSValueList.java, css/Counter.java,
+ 	  css/DOMImplementationCSS.java, css/DocumentCSS.java,
+ 	  css/ElementCSSInlineStyle.java, css/RGBColor.java,
+ 	  css/Rect.java, css/ViewCSS.java, css/package.html,
+ 	  html/HTMLAnchorElement.java, html/HTMLAppletElement.java,
+ 	  html/HTMLAreaElement.java, html/HTMLBRElement.java,
+ 	  html/HTMLBaseElement.java, html/HTMLBaseFontElement.java,
+ 	  html/HTMLBodyElement.java, html/HTMLButtonElement.java,
+ 	  html/HTMLCollection.java, html/HTMLDListElement.java,
+ 	  html/HTMLDOMImplementation.java, html/HTMLDirectoryElement.java,
+ 	  html/HTMLDivElement.java, html/HTMLDocument.java,
+ 	  html/HTMLElement.java, html/HTMLFieldSetElement.java,
+ 	  html/HTMLFontElement.java, html/HTMLFormElement.java,
+ 	  html/HTMLFrameElement.java, html/HTMLFrameSetElement.java,
+ 	  html/HTMLHRElement.java, html/HTMLHeadElement.java,
+ 	  html/HTMLHeadingElement.java, html/HTMLHtmlElement.java,
+ 	  html/HTMLIFrameElement.java, html/HTMLImageElement.java,
+ 	  html/HTMLInputElement.java, html/HTMLIsIndexElement.java,
+ 	  html/HTMLLIElement.java, html/HTMLLabelElement.java,
+ 	  html/HTMLLegendElement.java, html/HTMLLinkElement.java,
+ 	  html/HTMLMapElement.java, html/HTMLMenuElement.java,
+ 	  html/HTMLMetaElement.java, html/HTMLModElement.java,
+ 	  html/HTMLOListElement.java, html/HTMLObjectElement.java,
+ 	  html/HTMLOptGroupElement.java, html/HTMLOptionElement.java,
+ 	  html/HTMLParagraphElement.java, html/HTMLParamElement.java,
+ 	  html/HTMLPreElement.java, html/HTMLQuoteElement.java,
+ 	  html/HTMLScriptElement.java, html/HTMLSelectElement.java,
+ 	  html/HTMLStyleElement.java, html/HTMLTableCaptionElement.java,
+ 	  html/HTMLTableCellElement.java, html/HTMLTableColElement.java,
+ 	  html/HTMLTableElement.java, html/HTMLTableRowElement.java,
+ 	  html/HTMLTableSectionElement.java,
+ 	  html/HTMLTextAreaElement.java, html/HTMLTitleElement.java,
+ 	  html/HTMLUListElement.java, html/package.html,
+ 	  ranges/DocumentRange.java, ranges/Range.java,
+ 	  ranges/RangeException.java, ranges/package.html,
+ 	  stylesheets/DocumentStyle.java, stylesheets/LinkStyle.java,
+ 	  stylesheets/MediaList.java, stylesheets/StyleSheet.java,
+ 	  stylesheets/StyleSheetList.java, stylesheets/package.html,
+ 	  views/AbstractView.java, views/DocumentView.java,
+ 	  views/package.html: add dom interfaces (from w3c) and docs (not)
+ 
+ 2001-06-08 22:42  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/*.java, ext/*.java, helpers/*.java: Public
+ 	  Domain --> GPL
+ 
+ 2001-06-08 22:22  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/*.java, transform/*.java,
+ 	transform/dom/*.java, transform/sax/*.java,
+ 	transform/stream/*.java: LGPL --> GPL
+ 
+ 2001-06-08 21:55  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* COPYING, COPYRIGHT.html: add GPL and w3c.dom licences
+ 
+ 2001-06-07 03:30  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/org/xml/sax/*.java, ext/*.java, helpers/*.java: add SAX2
+ 
+ 2001-06-07 03:21  David Brownell <dbrownell@users.sourceforge.net>
+ 
+ 	* source/javax/xml/parsers/*.java, transform/*.java,
+ 	  transform/dom/*.java, transform/sax/*.java,
+ 	  transform/stream/*.java: add sun-defined bits of jaxp
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/ChangeLog.libxmlj gcc-4.1.0/libjava/classpath/ChangeLog.libxmlj
*** gcc-4.0.2/libjava/classpath/ChangeLog.libxmlj	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/ChangeLog.libxmlj	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,169 ----
+ This is an historic file listing changes from the old GNU JAXP and libxmlj
+ projects.  Both are now part of GNU Classpath.  New changes to these files
+ are listed in the main ChangeLog file or documented in the external
+ subdirectories for the w3c dom and sax sources.
+ 
+ 2004-12-30  Chris Burdess <dog@gnu.org>
+ 
+ 	* GnomeDocument.java,GnomeXPathNSResolver: Fixed XPathNSResolver
+ 	implementation.
+ 
+ 2004-11-26  Chris Burdess <dog@gnu.org>
+ 
+ 	* xmlj_util.c: Check for exception in xmljNewString.
+ 
+ 2004-11-17  Chris Burdess <dog@gnu.org>
+ 
+ 	* dom: DOM Level 3 Core conformance testing.
+ 
+ 2004-11-12  Chris Burdess <dog@gnu.org>
+ 
+ 	* GnomeTransformerFactory.java: Implemented getAssociatedStylesheet.
+ 
+ 2004-11-01  Chris Burdess <dog@gnu.org>
+ 
+ 	* xmlj_sax.c: Fixed segfault with external entities in transform.
+ 
+ 2004-10-06  Chris Burdess <dog@gnu.org>
+ 
+ 	* RawData.java, RawData32.java, RawData64.java: Added copyright.
+ 
+ 2004-10-25  Chris Burdess <dog@gnu.org>
+ 
+ 	* xmlj_transform.c: Experimental code to load external entities
+ 	(xsl:import, xsl:include, and document()) from Java URL.
+ 	* configure.ac: Minimum version of libxslt is 1.1.11.
+ 
+ 2004-10-08  Chris Burdess <dog@gnu.org>
+ 
+ 	* xmlj_util.c: String caching only by setting macro.
+ 	* acinclude.m4,configure.ac,Makefile.am: automake 1.8 patch by
+ 	    Michael Koch; fixes to compile in subdirectory.
+ 
+ 2004-10-06  Chris Burdess <dog@gnu.org>
+ 
+ 	* xmlj_util.c,xmlj_error.c: Call fflush after fprintf.
+ 
+ 2004-08-10  Chris Burdess <dog@gnu.org>
+ 
+ 	* transform: Fixed imports.
+ 
+ 2004-07-30  Chris Burdess <dog@gnu.org>
+ 
+ 	* transform: Added support for DOMSource and DOMResult transforms
+ 	    to/from GnomeDocument nodes.
+ 
+ 2004-07-27  Chris Burdess <dog@gnu.org>
+ 
+ 	* GnomeElement: getAttribute(NS) returns empty strings instead of
+ 	    null.
+ 	* sax: Cached java.lang.String class.
+ 
+ 2004-07-21  Chris Burdess <dog@gnu.org>
+ 
+ 	* GnomeTransformerFactory.java: getFeature supports stream features.
+ 	* dom: Added traversal function.
+ 
+ 2004-07-12  Chris Burdess <dog@gnu.org>
+ 
+ 	* dom: Entities and notations NamedNodeMaps.
+ 
+ 2004-07-06  Chris Burdess <dog@gnu.org>
+ 
+ 	* xpath: Permit wildcards in getElementsByTagName[NS].
+ 
+ 2004-07-04  Chris Burdess <dog@gnu.org>
+ 
+ 	* dom: Skeleton DOMConfiguration implementation.
+ 
+ 2004-07-03  Chris Burdess <dog@gnu.org>
+ 
+ 	* dom: Corrected GnomeElement attribute methods and isEqualNode.
+ 
+ 2004-07-01  Chris Burdess <dog@gnu.org>
+ 
+ 	* dom: Corrected implementation of getElementsByTagName.
+ 
+ 2004-06-29  Chris Burdess <dog@gnu.org>
+ 
+ 	* dom: Added implementation of DOMImplementationSource.
+ 
+ 2004-06-28  Chris Burdess <dog@gnu.org>
+ 
+ 	* dom: Fixed name matching.
+ 
+ 2004-06-26  Chris Burdess <dog@gnu.org>
+ 
+ 	* dom: Added GnomeTypeInfo.
+ 
+ 2004-06-25  Chris Burdess <dog@gnu.org>
+ 
+ 	* xmlj_sax.c: Revert to calling ignorableWhitespace.
+ 
+ 2004-06-23  Chris Burdess <dog@gnu.org>
+ 
+ 	* all: Use RawData for native pointers.
+ 	* xmlj_sax.c: Fixed entity resolution.
+ 	* xmlj_io.c: Fixed race condition closing input stream context.
+ 
+ 2004-06-03  Chris Burdess <dog@gnu.org>
+ 
+ 	* all: Use longs for native pointers.
+ 	* dom: Added dom.xpath interfaces.
+ 
+ 2004-06-02  Chris Burdess <dog@gnu.org>
+ 
+ 	* GnomeNode.java et al, xmlj_dom.c: Implementation of some DOM Level 3
+ 	    methods.
+ 
+ 2004-06-01  Chris Burdess <dog@gnu.org>
+ 
+ 	* GnomeNode.java et al: Applied Dalibor's #3080 patch for missing
+ 	    imports.
+ 
+ 2004-05-27  Chris Burdess <dog@gnu.org>
+ 
+ 	* GnomeXMLReader.java, GnomeDocumentBuilder.java, JavaContext.java:
+ 	    Correct handling of zero-length documents.
+ 
+ 2004-05-24  Chris Burdess <dog@gnu.org>
+ 
+ 	* all: Refactoring for Gnome* naming scheme. All modules now use
+ 	    common parsing framework.
+ 
+ 2004-05-11  Chris Burdess <dog@gnu.org>
+ 
+ 	* GnomeXMLReader.java,xmlj_sax.x,xmlj_io.c: Provide selective
+ 	callbacks, based on the registered callback listeners.
+ 
+ 2004-05-04  Chris Burdess <dog@gnu.org>
+ 
+ 	* xmlj_sax.c: Fixed document locators.
+ 
+ 2004-05-02  Chris Burdess <dog@gnu.org>
+ 
+ 	* xmlj_sax.c: Implement DeclHandler and LexicalHandler callbacks.
+ 	* GnomeXMLReader.java: Fixed feature/property handling.
+ 
+ 2004-04-29  Chris Burdess <dog@gnu.org>
+ 
+  	* xmlj_[dom,io].c: Use Java streams for DOM input.
+ 
+ 2004-04-28  Chris Burdess <dog@gnu.org>
+ 
+ 	* xmlj_node.c et al: Implemented node cache (task #3289).
+ 
+ 2004-04-27  Chris Burdess <dog@gnu.org>
+ 
+ 	* all: Added SAX and DOM libxmlj implementation.
+ 	* Makefile.am: Moved JNI sources and headers to jni subdirectory.
+ 	* acinclude.m4: Fixed compatibility handling of libxml2 version. 
+ 
+ 2003-03-07  Julian Scheid <jscheid@sektor37.de>
+ 
+ 	* Makefile.am: Fixed build inconsistency.
+ 	* all: Added caching, fixed memory leaks.
+ 
+ 2003-02-10  Julian Scheid <jscheid@sektor37.de>
+ 
+ 	* all: First development release
diff -Nrcpad gcc-4.0.2/libjava/classpath/ChangeLog.usermap gcc-4.1.0/libjava/classpath/ChangeLog.usermap
*** gcc-4.0.2/libjava/classpath/ChangeLog.usermap	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/ChangeLog.usermap	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ abies:'Artur Biesiadowski <abies@pg.gda.pl>'
+ alexl:'Alex Lancaster <alexl@gnu.org>'
+ anwalt:'Andy Walter <anwalt_pop@aicas.com>'
+ aph:'Andrew Haley <aph@redhat.com>'
+ archie172:'Archie Cobbs <archie@dellroad.org>'
+ arenn:'Aaron M. Renn <arenn@urbanophile.com>'
+ aselkirk:'Andrew Selkirk <aselkirk@sympatico.ca>'
+ audriusa:'Audrius Meskauskas <audriusa@Bioinformatics.org>'
+ avdyk:'Arnaud Vandyck <arnaud.vandyck@ulg.ac.be>'
+ brawer:'Sascha Brawer <brawer@dandelis.ch>'
+ bryce:'Bryce McKinlay <mckinlay@redhat.com>'
+ cbj:'Brian Jones <cbj@gnu.org>'
+ corvus:'James E. Blair <corvus@gnu.org>'
+ craig:'Craig Black <craig.black@aonix.com>'
+ daryllee:'Daryl Lee <dlee@altaregos.com>'
+ djee:'David Jee <djee@redhat.com>'
+ dog:'Chris Burdess <dog@bluezoo.org>'
+ egagnon:'Etienne M. Gagnon <etienne.gagnon@uqam.ca>'
+ ericb:'Eric Blake <ebb9@byu.net>'
+ fitzsim:'Thomas Fitzsimmons <fitzsim@redhat.com>'
+ fnasser:'Fernando Nasser <fnasser@redhat.com>'
+ gadek:'Grzegorz B. Prokopski <gadek@debian.org>'
+ gcb:'Geoff Berry <gcb@gnu.org>'
+ glavaux:'Guilhem Lavaux <guilhem@kaffe.org>'
+ gnu_andrew:'Andrew John Hughes <gnu_andrew@member.fsf.org>'
+ graydon:'graydon hoare <graydon@pobox.com>'
+ green:'Anthony Green <green@redhat.com>'
+ iproetel:'Ingo Proetel <proetel@aicas.com>'
+ jaz:'Jon A. Zeppieri <jon@eease.com>'
+ jewel:'John Leuner <jewel@pixie.co.za>'
+ jfrijters:'Jeroen Frijters <jeroen@sumatra.nl>'
+ jgeorgal:'Giannis Georgalis <jgeorgal@csd.uoc.gr>'
+ jochen:'Jochen Hoenicke <jochen@gnu.org>'
+ joey:'Joseph C. Lesh <joey@gnu.org>'
+ jsturm:'Jeff Sturm <jsturm@one-point.com>'
+ julian:'Julian Scheid <scheid@sektor37.de>'
+ kho:'Kim Ho <kho@redhat.com>'
+ mark:'Mark Wielaard <mark@klomp.org>'
+ mcb:'Mark Benvenuto <mcb54@columbia.edu>'
+ mkoch:'Michael Koch <konqueror@gmx.de>'
+ nferrier:'Nic Ferrier <nferrier@gnu.org>'
+ noa:'Noa Resare <noa@resare.com>'
+ overholt:'Andrew Overholt <overholt@redhat.com>'
+ patrik_reali:'Patrik Reali <patrik@reali.ch>'
+ rabbit78:'Roman Kennke <roman@kennke.org>'
+ raif:'Raif S. Naffah <raif@swiftdsl.com.au>'
+ rao:'Paul Fisher <rao@gnu.org>'
+ robilad:'Dalibor Topic <robilad@yahoo.com>'
+ rodimina:'Olga Rodimina <rodimina@redhat.com>'
+ rschuster:'Robert Schuster <theBohemian@gmx.net>'
+ rsdio:'Casey Marshall <csm@gnu.org>'
+ rupp:'Torsten Rupp <rupp@aicas.com>'
+ rveldema:'Ronald Veldema <rveldema@cs.vu.nl>'
+ saugart:'Steven Augart <augart@watson.ibm.com>'
+ shalom:'John Keiser <shalom@gnu.org>'
+ siebert:'Fridtjof Siebert <siebert@aicas.com>'
+ smarothy:'Sven de Marothy <sven@physto.se>'
+ stuart:'Stuart Ballard <stuart.ballard@mcmail.com>'
+ tromey:'Tom Tromey <tromey@redhat.com>'
+ warrenl:'Warren Levy <warrenl@redhat.com>'
diff -Nrcpad gcc-4.0.2/libjava/classpath/HACKING gcc-4.1.0/libjava/classpath/HACKING
*** gcc-4.0.2/libjava/classpath/HACKING	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/HACKING	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,13 ----
+ HACKING GNU Classpath - Last updated: April 2, 2004
+ Please read the README and INSTALL files first.
+ 
+ You only need the information in this file when working on non-released (CVS)
+ versions of GNU Classpath. Installation information for released versions
+ of GNU Classpath can be found in the INSTALL file.
+ 
+ Everything you ever wanted to know about hacking on GNU Classpath and
+ how to obtain CVS checkouts can be found in doc/hacking.texi and/or
+ on the website http://www.gnu.org/software/classpath/docs/hacking.html
+ 
+ If you have any questions, suggestions, etc., send them to
+ classpath@gnu.org.
diff -Nrcpad gcc-4.0.2/libjava/classpath/INSTALL gcc-4.1.0/libjava/classpath/INSTALL
*** gcc-4.0.2/libjava/classpath/INSTALL	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/INSTALL	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,179 ----
+ Installing GNU Classpath - Last updated: September 7, 2005
+ 
+ First, this is a development release only! Unless you are interested in
+ active development and debugging, or just like running random alpha code,
+ this release is probably not for you. Please see the README file for a
+ list of VMs that work with GNU Classpath.
+ 
+ Note that if you are building from a non-released (CVS) version of GNU
+ classpath, installation instructions are found in the doc/hacking.texi
+ file. Or at http://www.gnu.org/software/classpath/docs/hacking.html
+ 
+ ------------------------------------------------------------------
+ Suggested Software
+ ------------------------------------------------------------------
+ 	GNU make ("gmake") is required for building Classpath.
+ 
+ 	For any build environment involving native libraries, these 
+ 	new versions of autoconf, automake, and libtool are required
+         if changes are made that require rebuilding configure, Makefile.in,
+         aclocal.m4, or config.h.in.
+ 
+         - GNU autoconf 2.59+
+         - GNU automake 1.9+
+         - GNU libtool 1.5+
+ 
+ 	When working from CVS you can run the above tools by executing
+ 	./autogen.sh in the source directory.
+ 
+ 	For building the Java bytecode (.class files), one of these
+ 	compilers are required.  You can select which compiler using
+ 	--with-jikes, --with-gcj, --with-ecj or --with-kjc as argument to
+ 	configure; the present default is gcj.
+ 
+         - GCJ 4.0+ (part of the GNU GCC package).
+         - IBM jikes 1.19+.  
+         - Eclipse Compiler for Java 3.1+
+         - The kjc compiler is supported with configure but we have
+           been unable to successfully compile with it.
+ 
+ 	IMPORTANT: Versions of GCJ which are earlier than 4.0 contain
+ 	bugs which make it impossible to compile the class library and
+ 	are *not* supported any more. If you are stuck on a system where
+ 	GCC 3.x is the system compiler we recommend using Jikes.
+ 
+ 	For building the gtk+ AWT peer JNI native libraries, the following
+ 	are required unless --disable-gtk-peer is used as an argument to
+ 	configure.
+ 
+         - GTK+ 2.4.x (or higher)
+         - gdk-pixbuf
+ 
+ 	- XTest Extension (libXtst) for GdkRobot support in java.awt.
+ 
+ 	For building the Cairo GdkGraphics2D backend you need at least
+ 	Cairo 0.5.0.
+ 
+ 	For building the Qt AWT peer JNI native libraries you have to
+ 	specify --enable-qt-peer and need the following library:
+ 
+         - Qt 4.0.1
+ 
+ 	Please note that at the moment most operating systems do not
+     ship Qt4 by default. We recommend using GNU Classpath' Qt4
+     support only for its developers and bug reporters. See
+     http://developer.classpath.org/mediation/ClasspathShowcase
+     for details on how to get it to work.
+ 
+ 	For building the xmlj JAXP implementation (disabled by default, use
+ 	configure --enable-xmlj) you need the following installed:
+ 	- The XML C library for Gnome (libxml2)
+ 	  http://www.xmlsoft.org/
+ 	  Minimum version of libxml2 required: 2.6.8
+ 
+ 	- The XSLT C library for Gnome (libxslt)
+ 	  http://www.xmlsoft.org/XSLT/
+ 	  Minimum version of libxslt required: 1.1.11
+ 
+ 	For building the documentation you will need
+ 
+ 	- texinfo 4.2 or higher.
+ 
+ 	For building the ALSA midi provider code you will need
+ 	ALSA.  http://www.alsa-project.org. 
+ 
+ 	For building the DSSI midi synthesizer provider code you will
+ 	need DSSI from http://dssi.sourceforge.net.  This, in turn, 
+ 	introduces many dependencies, including:
+ 
+ 	  - liblo: the Lightweight OSC implementation
+ 	    http://plugin.org.uk/liblo/
+ 
+ 	  - LADSPA: Linux Audio Developer's Simple Plugin API
+ 	    http://www.ladspa.org
+ 
+ 	  - the JACK Audio Connection Kit: A low latency audio server
+ 	    http://jackit.sourceforge.net
+ 
+ 	  - libsndfile: an audio file I/O library
+ 	    http://www.mega-nerd.com/libsndfile/
+ 
+ 	  - fluidsynth: a real-time SoundFont 2 based soft-synth
+ 	    http://www.fluidsynth.org/
+ 
+ 
+ This package was designed to use the GNU standard for configuration
+ and makefiles.  To build and install do the following:
+ 
+ 1).  Run the "configure" script to configure the package.  There are
+ various options you might want to pass to configure to control how the
+ package is built.  Consider the following options, "configure --help"
+ gives a complete list.  
+ 
+   --enable-java           compile Java source default=yes
+   --enable-jni            compile JNI source default=yes
+   --enable-gtk-peer       compile GTK native peers default=yes
+   --enable-gtk-cairo      compile cairo based Graphics2D default=no
+   --enable-qt-peer        compile Qt4 native peers default=no
+   --enable-default-toolkit
+                           fully qualified class name of default AWT toolkit
+                           default=no
+   --enable-xmlj           compile native libxml/xslt library default=no
+   --enable-load-library   enable to use JNI native methods default=yes
+   --with-jikes            to compile the class library using jikes
+                           the default is to use gcj
+   --with-glibj            define what to install (zip|flat|both|none)
+                           default=zip
+   --enable-Werror         whether to compile C code with -Werror which turns
+                           any compiler warning into a compilation failure
+                           default=no
+   --with-gjdoc            generate documentation using gjdoc default=no
+   --with-jay              Regenerate the parsers with jay must be given the
+                           path to the jay executable
+ 
+ For more flags run configure --help.
+ 
+ 2).  Type "gmake" to build the package.  There is no longer a
+ dependency problem and we aim to keep it that way.
+ 
+ 3).  Type "gmake install" to install everything.  This may require
+ being the superuser. The default install path is /usr/local/classpath
+ you may change it by giving configure the --prefix=<path> option.
+ 
+ Report bugs to classpath@gnu.org or much better via Savannah at this
+ URL: http://savannah.gnu.org/support/?func=addsupport&group=classpath
+ 
+ Happy Hacking!
+ 
+ Once installed, GNU Classpath is ready to be used by any VM that supports
+ using the official version of GNU Classpath.  Simply ensure that
+ /usr/local/classpath/share/classpath is in your $CLASSPATH environment
+ variable.  You'll also have to set your LD_LIBRARY_PATH
+ variable (or similar system configuration) to include the Classpath
+ native libraries in /usr/local/classpath/lib/classpath.  
+ 
+ *NOTE* All example paths assume the default prefix is used with configure.
+ If you don't know what this means then the examples are correct.
+ 
+ LD_LIBRARY_PATH=/usr/local/classpath/lib/classpath
+ CLASSPATH=/usr/local/classpath/share/classpath/glibj.zip:.
+ export LD_LIBRARY_PATH CLASSPATH
+ 
+ More information about the VMs that use GNU Classpath can be found in the
+ README file.
+ 
+ ------------------------------------------------------------------
+ Misc. Notes
+ ------------------------------------------------------------------
+ Compilation is accomplished using a compiler's @file syntax.  For our
+ part, we avoid placing make style dependencies as rules upon the
+ compilation of a particular class file and leave this up to the Java
+ compiler instead.
+ 
+ The --enable-maintainer-mode option to configure currently does very 
+ little and shouldn't be used by ordinary developers or users anyway.
+ 
+ On Windows machines, the native libraries do not currently build, but
+ the Java bytecode library will.  Gcj trunk is beginning to work under
+ Cygwin.  The mingw32 version of jikes cannot follow symbolic links, you 
+ must use a cygwin build of jikes to access this limited functionality.
diff -Nrcpad gcc-4.0.2/libjava/classpath/LICENSE gcc-4.1.0/libjava/classpath/LICENSE
*** gcc-4.0.2/libjava/classpath/LICENSE	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/LICENSE	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,300 ----
+ The software in this package is distributed under the GNU General Public
+ License (with a special exception described below).
+ 
+ A copy of GNU General Public License (GPL) is included in this distribution,
+ in the file COPYING.  If you do not have the source code, it is available at:
+ 
+     http://www.gnu.org/software/classpath/
+ 
+   Linking this library statically or dynamically with other modules is
+   making a combined work based on this library.  Thus, the terms and
+   conditions of the GNU General Public License cover the whole
+   combination.
+  
+   As a special exception, the copyright holders of this library give you
+   permission to link this library with independent modules to produce an
+   executable, regardless of the license terms of these independent
+   modules, and to copy and distribute the resulting executable under
+   terms of your choice, provided that you also meet, for each linked
+   independent module, the terms and conditions of the license of that
+   module.  An independent module is a module which is not derived from
+   or based on this library.  If you modify this library, you may extend
+   this exception to your version of the library, but you are not
+   obligated to do so.  If you do not wish to do so, delete this
+   exception statement from your version.
+ 
+ 
+ GNU Classpath also contains other (example) code distributed under other
+ terms.  External libraries included with GNU Classpath may also be
+ distributed under different licensing terms.
+ The location and the exact terms of this other code is mentioned below.
+ 
+ 
+ Directory examples.
+ All example code is distributed under the GNU General Public License (GPL).
+ Each example source code files carries the following notice:
+ 
+   GNU Classpath examples are free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+ 
+   GNU Classpath examples are distributed in the hope that they will be
+   useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+ 
+   You should have received a copy of the GNU General Public License
+   along with GNU Classpath examples; see the file COPYING.  If not,
+   write to the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.
+ 
+ For more information see the README file in the examples directory.
+ 
+ 
+ Directory native/fdlibm
+ fdlimb contains general algorithms useful for runtimes and compilers to
+ support strict double and float mathematical operations.
+ 
+ fdlibm files carry the following notices:
+ 
+   Copyright (c) 1991 by AT&T.
+  
+   Permission to use, copy, modify, and distribute this software for any
+   purpose without fee is hereby granted, provided that this entire notice
+   is included in all copies of any software which is or includes a copy
+   or modification of this software and in all copies of the supporting
+   documentation for such software.
+  
+   THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+   WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
+   REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+   OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ 
+   Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+  
+   Developed at SunPro, a Sun Microsystems, Inc. business.
+   Permission to use, copy, modify, and distribute this
+   software is freely granted, provided that this notice
+   is preserved.
+ 
+ The upstream for fdlibm is libgcj (http://gcc.gnu.org/java/), they sync
+ again with the 'real' upstream (http://www.netlib.org/fdlibm/readme).
+ 
+ 
+ The documentation of some of the files in org/ietf/jgss/ is derived from
+ the text of RFC 2853: Generic Security Service API Version 2: Java Bindings.
+ That document is covered under the following license notice:
+ 
+   Copyright (C) The Internet Society (2000).  All Rights Reserved.
+ 
+   This document and translations of it may be copied and furnished to
+   others, and derivative works that comment on or otherwise explain it
+   or assist in its implementation may be prepared, copied, published and
+   distributed, in whole or in part, without restriction of any kind,
+   provided that the above copyright notice and this paragraph are
+   included on all such copies and derivative works.  However, this
+   document itself may not be modified in any way, such as by removing
+   the copyright notice or references to the Internet Society or other
+   Internet organizations, except as needed for the purpose of developing
+   Internet standards in which case the procedures for copyrights defined
+   in the Internet Standards process must be followed, or as required to
+   translate it into languages other than English.
+ 
+   The limited permissions granted above are perpetual and will not be
+   revoked by the Internet Society or its successors or assigns.
+ 
+   This document and the information contained herein is provided on an
+   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
+   NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN
+   WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ 
+ 
+ Directory external/w3c_dom
+ Bindings for the Document Object Model (DOM) as published by the
+ World Wide Web Consortium. All files are distributed under the following
+ W3C Software Short Notice:
+ 
+   Copyright (c) 2004 World Wide Web Consortium,
+ 
+   (Massachusetts Institute of Technology, European Research Consortium for
+   Informatics and Mathematics, Keio University). All Rights Reserved. This
+   work is distributed under the W3C(r) Software License [1] 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.
+ 
+   [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+ 
+   Permission to copy, modify, and distribute this software and its
+   documentation, with or without modification, for any purpose and
+   without fee or royalty is hereby granted, provided that you include
+   the following on ALL copies of the software and documentation or
+   portions thereof, including modifications:
+ 
+   1. The full text of this NOTICE in a location viewable to users of
+   the redistributed or derivative work.
+   2. Any pre-existing intellectual property disclaimers, notices, or
+   terms and conditions. If none exist, the W3C Software Short Notice
+   should be included (hypertext is preferred, text is permitted) within
+   the body of any redistributed or derivative code.
+   3. Notice of any changes or modifications to the files, including
+   the date changes were made. (We recommend you provide URIs to the
+   location from which the code is derived.)
+ 
+   THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
+   HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
+   INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS
+   FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
+   DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
+   TRADEMARKS OR OTHER RIGHTS.
+ 
+   COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL
+   OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
+   DOCUMENTATION.
+ 
+   The name and trademarks of copyright holders may NOT be used in
+   advertising or publicity pertaining to the software without specific,
+   written prior permission. Title to copyright in this software and any
+   associated documentation will at all times remain with copyright
+   holders.
+ 
+ 
+ Directory external/sax
+ Simple API for XML, a standard application interface for processing XML.
+ All files are distributed with the following short notice:
+ 
+   NO WARRANTY!  This class is in the Public Domain.
+ 
+ The www.saxproject.org explains:
+ 
+   Copyright Status
+ 
+   SAX is free!
+ 
+   In fact, it's not possible to own a license to SAX, since it's been
+   placed in the public domain.
+ 
+   No Warranty
+ 
+   Because SAX is released to the public domain, there is no warranty
+   for the design or for the software implementation, to the extent
+   permitted by applicable law. Except when otherwise stated in writing
+   the copyright holders and/or other parties provide SAX "as is" without
+   warranty of any kind, either expressed or implied, including, but not
+   limited to, the implied warranties of merchantability and fitness for
+   a particular purpose. The entire risk as to the quality and
+   performance of SAX is with you. Should SAX prove defective, you assume
+   the cost of all necessary servicing, repair or correction.
+ 
+   In no event unless required by applicable law or agreed to in
+   writing will any copyright holder, or any other party who may modify
+   and/or redistribute SAX, be liable to you for damages, including any
+   general, special, incidental or consequential damages arising out of
+   the use or inability to use SAX (including but not limited to loss of
+   data or data being rendered inaccurate or losses sustained by you or
+   third parties or a failure of the SAX to operate with any other
+   programs), even if such holder or other party has been advised of the
+   possibility of such damages.
+ 
+   Copyright Disclaimers
+ 
+   This page includes statements to that effect by David Megginson, who
+   would have been able to claim copyright for the original work.
+ 
+   SAX 1.0
+ 
+   Version 1.0 of the Simple API for XML (SAX), created collectively by
+   the membership of the XML-DEV mailing list, is hereby released into
+   the public domain.
+ 
+   No one owns SAX: you may use it freely in both commercial and
+   non-commercial applications, bundle it with your software
+   distribution, include it on a CD-ROM, list the source code in a book,
+   mirror the documentation at your own web site, or use it in any other
+   way you see fit.
+ 
+   David Megginson, sax@megginson.com
+   1998-05-11
+ 
+   SAX 2.0
+ 
+   I hereby abandon any property rights to SAX 2.0 (the Simple API for
+   XML), and release all of the SAX 2.0 source code, compiled code, and
+   documentation contained in this distribution into the Public
+   Domain. SAX comes with NO WARRANTY or guarantee of fitness for any
+   purpose.
+ 
+   David Megginson, david@megginson.com
+   2000-05-05
+ 
+ 
+ Two files in gnu/xml/aelfred2 (SAXDriver.java and XmlParser.java) were
+ originally derived from code which carried the following notice:
+ 
+   Copyright (c) 1997, 1998 by Microstar Software Ltd.
+ 
+   AElfred is free for both commercial and non-commercial use and
+   redistribution, provided that Microstar's copyright and disclaimer are
+   retained intact.  You are free to modify AElfred for your own use and
+   to redistribute AElfred with your modifications, provided that the
+   modifications are clearly documented.
+ 
+   This program 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.  Please use it AT
+   YOUR OWN RISK.
+ 
+ 
+ The files in resource/gnu/java/locale were generated by gnu.localegen
+ from the files distributed from date provided by CLDR.
+ All these files are distributed under the following terms:
+ 
+   Copyright (C) 1991-2005 Unicode, Inc. All rights reserved. Distributed
+   under the Terms of Use in http://www.unicode.org/copyright.html.
+ 
+   Permission is hereby granted, free of charge, to any person obtaining
+   a copy of the Unicode data files and any associated documentation (the
+   "Data Files") or Unicode software and any associated documentation
+   (the "Software") to deal in the Data Files or Software without
+   restriction, including without limitation the rights to use, copy,
+   modify, merge, publish, distribute, and/or sell copies of the Data
+   Files or Software, and to permit persons to whom the Data Files or
+   Software are furnished to do so, provided that (a) the above copyright
+   notice(s) and this permission notice appear with all copies of the
+   Data Files or Software, (b) both the above copyright notice(s) and
+   this permission notice appear in associated documentation, and (c)
+   there is clear notice in each modified Data File or in the Software as
+   well as in the documentation associated with the Data File(s) or
+   Software that the data or software has been modified.
+ 
+   THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+   ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+   WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT
+   HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR
+   ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+   OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
+   SOFTWARE.
+ 
+   Except as contained in this notice, the name of a copyright holder
+   shall not be used in advertising or otherwise to promote the sale, use
+   or other dealings in these Data Files or Software without prior
+   written authorization of the copyright holder.
+ 
+ 
+ The file native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c
+ contains two functions (get_port_default and set_control) derived from
+ example code in the DSSI distribution (http://dssi.sourceforge.net).
+ The original DSSI example code is distributed under the following
+ terms:
+ 
+  Copyright 2004 Chris Cannam, Steve Harris and Sean Bolton.
+  
+  Permission to use, copy, modify, distribute, and sell this software
+  for any purpose is hereby granted without fee, provided that the
+  above copyright notice and this permission notice are included in
+  all copies or substantial portions of the software.
diff -Nrcpad gcc-4.0.2/libjava/classpath/Makefile.am gcc-4.1.0/libjava/classpath/Makefile.am
*** gcc-4.0.2/libjava/classpath/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/Makefile.am	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,25 ----
+ ## Input file for automake to generate the Makefile.in used by configure
+ 
+ # lib first, to compile .class files before native code, last examples
+ SUBDIRS = lib doc external include native resource scripts $(EXAMPLESDIR)
+ DIST_SUBDIRS = lib doc external include native resource scripts examples
+ 
+ ## GCJ LOCAL: we need an extra -I here.
+ ACLOCAL_AMFLAGS = -I m4 -I ../.. -I ../../config
+ 
+ native: lib
+ 
+ EXTRA_DIST = HACKING BUGS THANKYOU mauve-classpath LICENSE \
+              ChangeLog-2003 ChangeLog-2004 \
+              ChangeLog.gnujaxp.1 ChangeLog.gnujaxp.2 ChangeLog.libxmlj \
+ 	     autogen.sh
+ 
+ #DISTCHECK_CONFIGURE_FLAGS = --enable-gjdoc
+ 
+ dist-hook:
+ 	-$(mkinstalldirs) $(distdir)/include
+ 	-cp -f $(top_srcdir)/include/*.in $(distdir)/include
+ 	-cp -f $(top_srcdir)/include/*.h $(distdir)/include
+ 
+ ChangeLog:
+ 	cvs2cl.pl -b --gmt --log-opts "-d'1998-06-30< now'" --window 7200 --usermap ChangeLog.usermap --ignore ChangeLog --fsf
diff -Nrcpad gcc-4.0.2/libjava/classpath/Makefile.in gcc-4.1.0/libjava/classpath/Makefile.in
*** gcc-4.0.2/libjava/classpath/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/Makefile.in	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,706 ----
+ # Makefile.in generated by automake 1.9.3 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ # 2003, 2004  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ top_builddir = .
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+ INSTALL_HEADER = $(INSTALL_DATA)
+ transform = $(program_transform_name)
+ NORMAL_INSTALL = :
+ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ 	$(srcdir)/Makefile.in $(top_srcdir)/configure \
+ 	$(top_srcdir)/gnu/classpath/Configuration.java.in AUTHORS \
+ 	COPYING ChangeLog INSTALL NEWS TODO config.guess config.sub \
+ 	depcomp install-sh ltcf-c.sh ltcf-cxx.sh ltcf-gcj.sh ltconfig \
+ 	ltmain.sh missing mkinstalldirs
+ subdir = .
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ 	$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ 	$(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/iconv.m4 \
+ 	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ 	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+  configure.lineno configure.status.lineno
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = $(top_builddir)/include/config.h
+ CONFIG_CLEAN_FILES = gnu/classpath/Configuration.java
+ SOURCES =
+ DIST_SOURCES =
+ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ 	html-recursive info-recursive install-data-recursive \
+ 	install-exec-recursive install-info-recursive \
+ 	install-recursive installcheck-recursive installdirs-recursive \
+ 	pdf-recursive ps-recursive uninstall-info-recursive \
+ 	uninstall-recursive
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ distdir = $(PACKAGE)-$(VERSION)
+ top_distdir = $(distdir)
+ am__remove_distdir = \
+   { test ! -d $(distdir) \
+     || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+          && rm -fr $(distdir); }; }
+ DIST_ARCHIVES = $(distdir).tar.gz
+ GZIP_ENV = --best
+ distuninstallcheck_listfiles = find . -type f -print
+ distcleancheck_listfiles = find . -type f -print
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
+ BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
+ CLASSPATH_MODULE = @CLASSPATH_MODULE@
+ CP = @CP@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CREATE_ALSA_LIBRARIES_FALSE = @CREATE_ALSA_LIBRARIES_FALSE@
+ CREATE_ALSA_LIBRARIES_TRUE = @CREATE_ALSA_LIBRARIES_TRUE@
+ CREATE_API_DOCS_FALSE = @CREATE_API_DOCS_FALSE@
+ CREATE_API_DOCS_TRUE = @CREATE_API_DOCS_TRUE@
+ CREATE_CORE_JNI_LIBRARIES_FALSE = @CREATE_CORE_JNI_LIBRARIES_FALSE@
+ CREATE_CORE_JNI_LIBRARIES_TRUE = @CREATE_CORE_JNI_LIBRARIES_TRUE@
+ CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
+ CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
+ CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
+ CREATE_GTK_PEER_LIBRARIES_TRUE = @CREATE_GTK_PEER_LIBRARIES_TRUE@
+ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
+ CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
+ CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
+ CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
+ CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
+ CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
+ CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
+ CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DATE = @DATE@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ ECJ = @ECJ@
+ EGREP = @EGREP@
+ ERROR_CFLAGS = @ERROR_CFLAGS@
+ EXAMPLESDIR = @EXAMPLESDIR@
+ EXEEXT = @EXEEXT@
+ FIND = @FIND@
+ FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+ FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
+ FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
+ FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
+ FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
+ FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
+ FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
+ FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
+ FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
+ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
+ GCJ = @GCJ@
+ GCJX = @GCJX@
+ GJDOC = @GJDOC@
+ GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
+ INSTALL_CLASS_FILES_FALSE = @INSTALL_CLASS_FILES_FALSE@
+ INSTALL_CLASS_FILES_TRUE = @INSTALL_CLASS_FILES_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_GLIBJ_ZIP_FALSE = @INSTALL_GLIBJ_ZIP_FALSE@
+ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
+ JAY = @JAY@
+ JAY_SKELETON = @JAY_SKELETON@
+ JIKES = @JIKES@
+ JIKESENCODING = @JIKESENCODING@
+ KJC = @KJC@
+ LDFLAGS = @LDFLAGS@
+ LIBDEBUG = @LIBDEBUG@
+ LIBICONV = @LIBICONV@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIBVERSION = @LIBVERSION@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MKDIR = @MKDIR@
+ MOC = @MOC@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
+ PANGOFT2_LIBS = @PANGOFT2_LIBS@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ QT_CFLAGS = @QT_CFLAGS@
+ QT_LIBS = @QT_LIBS@
+ RANLIB = @RANLIB@
+ REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
+ REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
+ REMOVE = @REMOVE@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
+ STRIP = @STRIP@
+ USER_CLASSLIB = @USER_CLASSLIB@
+ USER_JAVAH = @USER_JAVAH@
+ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
+ USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
+ USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
+ USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+ VERSION = @VERSION@
+ WARNING_CFLAGS = @WARNING_CFLAGS@
+ XML_CFLAGS = @XML_CFLAGS@
+ XML_LIBS = @XML_LIBS@
+ XSLT_CFLAGS = @XSLT_CFLAGS@
+ XSLT_LIBS = @XSLT_LIBS@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZIP = @ZIP@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
+ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ datadir = @datadir@
+ default_toolkit = @default_toolkit@
+ exec_prefix = @exec_prefix@
+ glibjdir = @glibjdir@
+ host = @host@
+ host_alias = @host_alias@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ nativelibdir = @nativelibdir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ vm_classes = @vm_classes@
+ 
+ # lib first, to compile .class files before native code, last examples
+ SUBDIRS = lib doc external include native resource scripts $(EXAMPLESDIR)
+ DIST_SUBDIRS = lib doc external include native resource scripts examples
+ ACLOCAL_AMFLAGS = -I m4 -I ../.. -I ../../config
+ EXTRA_DIST = HACKING BUGS THANKYOU mauve-classpath LICENSE \
+              ChangeLog-2003 ChangeLog-2004 \
+              ChangeLog.gnujaxp.1 ChangeLog.gnujaxp.2 ChangeLog.libxmlj \
+ 	     autogen.sh
+ 
+ all: all-recursive
+ 
+ .SUFFIXES:
+ am--refresh:
+ 	@:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+ 	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
+ 		&& exit 0; \
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+ 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --gnu  Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+ 	  *config.status*) \
+ 	    echo ' $(SHELL) ./config.status'; \
+ 	    $(SHELL) ./config.status;; \
+ 	  *) \
+ 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ 	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ 	esac;
+ 
+ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ 	$(SHELL) ./config.status --recheck
+ 
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	cd $(srcdir) && $(AUTOCONF)
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+ gnu/classpath/Configuration.java: $(top_builddir)/config.status $(top_srcdir)/gnu/classpath/Configuration.java.in
+ 	cd $(top_builddir) && $(SHELL) ./config.status $@
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ 
+ # This directory's subdirectories are mostly independent; you can cd
+ # into them and run `make' without going through this Makefile.
+ # To change the values of `make' variables: instead of editing Makefiles,
+ # (1) if the variable is set in `config.status', edit `config.status'
+ #     (which will cause the Makefiles to be regenerated when you run `make');
+ # (2) otherwise, pass the desired values on the `make' command line.
+ $(RECURSIVE_TARGETS):
+ 	@set fnord $$MAKEFLAGS; amf=$$2; \
+ 	dot_seen=no; \
+ 	target=`echo $@ | sed s/-recursive//`; \
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  echo "Making $$target in $$subdir"; \
+ 	  if test "$$subdir" = "."; then \
+ 	    dot_seen=yes; \
+ 	    local_target="$$target-am"; \
+ 	  else \
+ 	    local_target="$$target"; \
+ 	  fi; \
+ 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ 	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ 	done; \
+ 	if test "$$dot_seen" = "no"; then \
+ 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ 	fi; test -z "$$fail"
+ 
+ mostlyclean-recursive clean-recursive distclean-recursive \
+ maintainer-clean-recursive:
+ 	@set fnord $$MAKEFLAGS; amf=$$2; \
+ 	dot_seen=no; \
+ 	case "$@" in \
+ 	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ 	  *) list='$(SUBDIRS)' ;; \
+ 	esac; \
+ 	rev=''; for subdir in $$list; do \
+ 	  if test "$$subdir" = "."; then :; else \
+ 	    rev="$$subdir $$rev"; \
+ 	  fi; \
+ 	done; \
+ 	rev="$$rev ."; \
+ 	target=`echo $@ | sed s/-recursive//`; \
+ 	for subdir in $$rev; do \
+ 	  echo "Making $$target in $$subdir"; \
+ 	  if test "$$subdir" = "."; then \
+ 	    local_target="$$target-am"; \
+ 	  else \
+ 	    local_target="$$target"; \
+ 	  fi; \
+ 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ 	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ 	done && test -z "$$fail"
+ tags-recursive:
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ 	done
+ ctags-recursive:
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ 	done
+ 
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '    { files[$$0] = 1; } \
+ 	       END { for (i in files) print i; }'`; \
+ 	mkid -fID $$unique
+ tags: TAGS
+ 
+ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+ 		$(TAGS_FILES) $(LISP)
+ 	tags=; \
+ 	here=`pwd`; \
+ 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ 	  include_option=--etags-include; \
+ 	  empty_fix=.; \
+ 	else \
+ 	  include_option=--include; \
+ 	  empty_fix=; \
+ 	fi; \
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  if test "$$subdir" = .; then :; else \
+ 	    test ! -f $$subdir/TAGS || \
+ 	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ 	  fi; \
+ 	done; \
+ 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '    { files[$$0] = 1; } \
+ 	       END { for (i in files) print i; }'`; \
+ 	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ 	  test -n "$$unique" || unique=$$empty_fix; \
+ 	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ 	    $$tags $$unique; \
+ 	fi
+ ctags: CTAGS
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+ 		$(TAGS_FILES) $(LISP)
+ 	tags=; \
+ 	here=`pwd`; \
+ 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '    { files[$$0] = 1; } \
+ 	       END { for (i in files) print i; }'`; \
+ 	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ 	     $$tags $$unique
+ 
+ GTAGS:
+ 	here=`$(am__cd) $(top_builddir) && pwd` \
+ 	  && cd $(top_srcdir) \
+ 	  && gtags -i $(GTAGS_ARGS) $$here
+ 
+ distclean-tags:
+ 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ 
+ distdir: $(DISTFILES)
+ 	$(am__remove_distdir)
+ 	mkdir $(distdir)
+ 	$(mkdir_p) $(distdir)/../.. $(distdir)/examples $(distdir)/gnu/classpath $(distdir)/lib $(distdir)/m4 $(distdir)/scripts
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ 	list='$(DISTFILES)'; for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ 	  esac; \
+ 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ 	    dir="/$$dir"; \
+ 	    $(mkdir_p) "$(distdir)$$dir"; \
+ 	  else \
+ 	    dir=''; \
+ 	  fi; \
+ 	  if test -d $$d/$$file; then \
+ 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ 	    fi; \
+ 	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ 	  else \
+ 	    test -f $(distdir)/$$file \
+ 	    || cp -p $$d/$$file $(distdir)/$$file \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+ 	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ 	  if test "$$subdir" = .; then :; else \
+ 	    test -d "$(distdir)/$$subdir" \
+ 	    || $(mkdir_p) "$(distdir)/$$subdir" \
+ 	    || exit 1; \
+ 	    distdir=`$(am__cd) $(distdir) && pwd`; \
+ 	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ 	    (cd $$subdir && \
+ 	      $(MAKE) $(AM_MAKEFLAGS) \
+ 	        top_distdir="$$top_distdir" \
+ 	        distdir="$$distdir/$$subdir" \
+ 	        distdir) \
+ 	      || exit 1; \
+ 	  fi; \
+ 	done
+ 	$(MAKE) $(AM_MAKEFLAGS) \
+ 	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ 	  dist-hook
+ 	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+ 	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ 	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ 	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+ 	|| chmod -R a+r $(distdir)
+ dist-gzip: distdir
+ 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ 	$(am__remove_distdir)
+ 
+ dist-bzip2: distdir
+ 	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ 	$(am__remove_distdir)
+ 
+ dist-tarZ: distdir
+ 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ 	$(am__remove_distdir)
+ 
+ dist-shar: distdir
+ 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ 	$(am__remove_distdir)
+ 
+ dist-zip: distdir
+ 	-rm -f $(distdir).zip
+ 	zip -rq $(distdir).zip $(distdir)
+ 	$(am__remove_distdir)
+ 
+ dist dist-all: distdir
+ 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ 	$(am__remove_distdir)
+ 
+ # This target untars the dist file and tries a VPATH configuration.  Then
+ # it guarantees that the distribution is self-contained by making another
+ # tarfile.
+ distcheck: dist
+ 	case '$(DIST_ARCHIVES)' in \
+ 	*.tar.gz*) \
+ 	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+ 	*.tar.bz2*) \
+ 	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+ 	*.tar.Z*) \
+ 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ 	*.shar.gz*) \
+ 	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+ 	*.zip*) \
+ 	  unzip $(distdir).zip ;;\
+ 	esac
+ 	chmod -R a-w $(distdir); chmod a+w $(distdir)
+ 	mkdir $(distdir)/_build
+ 	mkdir $(distdir)/_inst
+ 	chmod a-w $(distdir)
+ 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ 	  && cd $(distdir)/_build \
+ 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ 	    $(DISTCHECK_CONFIGURE_FLAGS) \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) check \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) install \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ 	        distuninstallcheck \
+ 	  && chmod -R a-w "$$dc_install_base" \
+ 	  && ({ \
+ 	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ 	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ 	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ 	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ 	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ 	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ 	  && rm -rf "$$dc_destdir" \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+ 	  && rm -rf $(DIST_ARCHIVES) \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ 	$(am__remove_distdir)
+ 	@(echo "$(distdir) archives ready for distribution: "; \
+ 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ 	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+ distuninstallcheck:
+ 	@cd $(distuninstallcheck_dir) \
+ 	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ 	   || { echo "ERROR: files left after uninstall:" ; \
+ 	        if test -n "$(DESTDIR)"; then \
+ 	          echo "  (check DESTDIR support)"; \
+ 	        fi ; \
+ 	        $(distuninstallcheck_listfiles) ; \
+ 	        exit 1; } >&2
+ distcleancheck: distclean
+ 	@if test '$(srcdir)' = . ; then \
+ 	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ 	  exit 1 ; \
+ 	fi
+ 	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ 	  || { echo "ERROR: files left in build directory after distclean:" ; \
+ 	       $(distcleancheck_listfiles) ; \
+ 	       exit 1; } >&2
+ check-am: all-am
+ check: check-recursive
+ all-am: Makefile
+ installdirs: installdirs-recursive
+ installdirs-am:
+ install: install-recursive
+ install-exec: install-exec-recursive
+ install-data: install-data-recursive
+ uninstall: uninstall-recursive
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-recursive
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+ 	@echo "it deletes files that may require special tools to rebuild."
+ clean: clean-recursive
+ 
+ clean-am: clean-generic clean-libtool mostlyclean-am
+ 
+ distclean: distclean-recursive
+ 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-generic distclean-libtool \
+ 	distclean-tags
+ 
+ dvi: dvi-recursive
+ 
+ dvi-am:
+ 
+ html: html-recursive
+ 
+ info: info-recursive
+ 
+ info-am:
+ 
+ install-data-am:
+ 
+ install-exec-am:
+ 
+ install-info: install-info-recursive
+ 
+ install-man:
+ 
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-recursive
+ 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ 	-rm -rf $(top_srcdir)/autom4te.cache
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-recursive
+ 
+ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+ 
+ pdf: pdf-recursive
+ 
+ pdf-am:
+ 
+ ps: ps-recursive
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am
+ 
+ uninstall-info: uninstall-info-recursive
+ 
+ .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+ 	check-am clean clean-generic clean-libtool clean-recursive \
+ 	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+ 	dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \
+ 	distclean-generic distclean-libtool distclean-recursive \
+ 	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ 	dvi-am html html-am info info-am install install-am \
+ 	install-data install-data-am install-exec install-exec-am \
+ 	install-info install-info-am install-man install-strip \
+ 	installcheck installcheck-am installdirs installdirs-am \
+ 	maintainer-clean maintainer-clean-generic \
+ 	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+ 	mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+ 	tags tags-recursive uninstall uninstall-am uninstall-info-am
+ 
+ 
+ native: lib
+ 
+ #DISTCHECK_CONFIGURE_FLAGS = --enable-gjdoc
+ 
+ dist-hook:
+ 	-$(mkinstalldirs) $(distdir)/include
+ 	-cp -f $(top_srcdir)/include/*.in $(distdir)/include
+ 	-cp -f $(top_srcdir)/include/*.h $(distdir)/include
+ 
+ ChangeLog:
+ 	cvs2cl.pl -b --gmt --log-opts "-d'1998-06-30< now'" --window 7200 --usermap ChangeLog.usermap --ignore ChangeLog --fsf
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff -Nrcpad gcc-4.0.2/libjava/classpath/NEWS gcc-4.1.0/libjava/classpath/NEWS
*** gcc-4.0.2/libjava/classpath/NEWS	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/NEWS	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,841 ----
+ New in release 0.20
+ 
+ Runtime interface changes:
+ 
+ * New method VMStackWalker.getClassLoader() was added to avoid an infinite
+   loop between getCallingClassLoader() and Class.getClassLoader().
+ 
+ New in release 0.19 (Nov 2, 2005)
+ 
+ * The Swing RepaintManager has been reworked for more efficient painting,
+   especially for large GUIs.
+ 
+ * The Swing layout manager OverlayLayout has been implemented, the BoxLayout
+   has been rewritten to make use of the SizeRequirements utility class and
+   caching for more efficient layout.
+ 
+ * Improved accessibility support for Swing.
+ 
+ * The java.net.HttpURLConnection implementation no longer buffers the
+   entire response body in memory.  This means that response bodies
+   larger than available memory can now be handled.
+ 
+ * The Andrew Watson, Vice President and Technical Director of the Object
+   Management Group, has officially assigned us 20 bit Vendor Minor Code Id: 
+   0x47430 ("GC") that will mark remote Classpath - specific system exceptions.
+   Obtaining the VMCID means that GNU Classpath now is a recogniseable type of
+   node in a highly interoperable CORBA world. 
+ 
+ * Classpath now includes the first working draft to support the RMI over
+   IIOP protocol. The current implementation is capable for remote invocations,
+   transferring various Serializables and Externalizables via RMI-IIOP protocol.
+   It can flatten graphs and, at least for the simple cases, is interoperable
+   with Sun's jdk 1.5.
+ 
+ * Qt4 configury switches for OS-X. Additional to the --enable-qt-peer, OS-X
+   users with a Qt4 installation can build the qt-peers with the argument
+   --with-qt4dir=<Qt4-installation-dir>.
+ 
+ * Significant progress has been made in the implementation of the 
+   javax.swing.plaf.metal.* package, with most UI delegates in a working state
+   now.  Please test this with your own applications and provide feedback that 
+   will help us to improve this package.
+ 
+ * The GUI demo (gnu.classpath.examples.swing.Demo) has been extended to 
+   highlight various features in our free-swing implementation. And includes
+   a look and feel switcher (Metal default, Ocean or GNU).
+ 
+ Runtime interface changes:
+ 
+ * Changed implementation of VMClassLoader.getPackage(s) : new method
+   VMClassLoader.getBootPackages should be implemented by the vm, and sould
+   return a string array of boot package names ("java.lang", "java.net", ...).
+   Feedback from vm implementors for usability and relevance of the
+   getBootPackages method would be greatly appreciated.
+   
+ New in release 0.18 (Sep 6, 2005)
+ 
+ * GNU JAWT implementation, the AWT Native Interface, which allows direct
+   access to native screen resources from within a Canvas's paint method.
+   GNU Classpath Examples comes with a Demo, see examples/README.
+ * awt.datatransfer updated to 1.5 with supports for FlavorEvents.
+   The gtk+ awt peers now allow copy/paste of text, images, uris/files
+   and serialized objects with other applications and tracking
+   clipboard change events with gtk+ 2.6 (for gtk+ 2.4 only text and
+   serialized objects are supported). A GNU Classpath Examples
+   datatransfer Demo was added to show the new functionality.
+ * org.omg.PortableInterceptor and related functionality in other packages
+   is now implemented:
+     - The sever and client interceptors work as required since 1.4.
+     - The IOR interceptor works as needed for 1.5. 
+ * The org.omg.DynamicAny package is completed and passes the prepared tests.
+ * The Portable Object Adapter should now support the output of the
+   recent IDL to java compilers. These compilers now generate servants and 
+   not CORBA objects as before, making the output depended on the existing 
+   POA implementation. Completing POA means that such code can already be 
+   tried to run on Classpath. Our POA is tested for the following usager
+   scenarios:
+     - POA converts servant to the CORBA object.
+     - Servant provides to the CORBA object.
+     - POA activates new CORBA object with the given Object Id (byte array) 
+       that is later accessible for the servant.
+     - During the first call, the ServantActivator provides servant for this 
+       and all subsequent calls on the current object.
+     - During each call, the ServantLocator provides servant for this call
+       only.
+     - ServantLocator or ServantActivator forwards call to another server.
+     - POA has a single servant, responsible for all objects.
+     - POA has a default servant, but some objects are explicitly connected 
+       to they specific servants.
+   The POA is verified using tests from the former cost.omg.org.      
+ * The javax.swing.plaf.multi.* package is now implemented.
+ * Editing and several key actions for JTree and JTable were implemented.
+ * Lots of icons and look and feel improvements for Free Swing basic and
+   metal themes were added.  Try running the GNU Classpath Swing Demo in
+   examples (gnu.classpath.examples.swing.Demo) with:
+   -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFeel
+   -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel
+ * Start of styled text capabilites for java.swing.text.
+ * NIO FileChannel.map implementation, fast bulk put implementation for
+   DirectByteBuffer (speeds up this method 10x).
+ * Split gtk+ awt peers event handling in two threads and improve gdk lock
+   handling (solves several AWT lock ups).
+ * Speed up awt Image loading.
+ * Updated TimeZone data against Olson tzdata2005l.
+ * Make zip and jar UTF-8 "clean".
+ * "native" code  builds and compiles (warning free) on Darwin and Solaris.
+ 
+ Runtime interface changes:
+ 
+ * All native resource "pointers" in the VM interface classes are now exposed
+   as gnu.classpath.Pointer objects. This might impact runtimes that
+   optimize and support java.nio.DirectByteBuffers. Creating these classes
+   and accessing the contents as void * pointers for the native reference JNI
+   implementation is done through the JCL_NewRawDataObject and JCL_GetRawData
+   functions.
+ * Simplified the Class/VMClass interface.
+ * Removed loadedClasses map from ClassLoader. It's now the VMs responsibility
+   to manage the list of defined and loaded classes for each class loader.
+ * Moved native methods from java.lang.reflect.Proxy to VMProxy.
+ * Added hook to VMClassLoader to allow VM to do class caching.
+ 
+ New Untested/Disabled Features:
+ 
+   The following new features are included, but not ready for production
+   yet. They are explicitly disabled and not supported. But if you want
+   to help with the development of these new features we are interested
+   in feedback. You will have to explicitly enable them to try them out
+   (and they will most likely contain bugs). If you are interested in any
+   of these then please join the mailing-list and follow development in
+   CVS.
+ 
+ * QT4 AWT peers, enable by giving configure --enable-qt-peer.
+ * JDWP framework, enable by deleting the jdwp references from
+   lib/standard.omit and vm/reference/standard.omit. No default
+   implementation is provided. Work is being done on gcj/gij integration.
+ * StAX java.xml.stream, enable by deleting the gnu.xml.stream and
+   java.xml.stream references in lib/standard.omit.
+ 
+ New in release 0.17 (Jul 15, 2005)
+ 
+ * gnu.xml fix for nodes created outside a namespace context.
+ * Add support for output indenting and cdata-section-elements output
+   instruction in xml.transform.
+ * xml.xpath corrections for cases where elements/attributes might have
+   been created in non-namespace-aware mode. Corrections to handling of
+   XSL variables and minor conformance updates.
+ * DefaultMutableTreeNode preorder, postorder, depthFirst and breadthFirst
+   traversal enumerations implemented.
+ * JInternalFrame colors and titlebar draw properly.
+ * JTree is working up to par (icons, selection and keyboard traversal).
+ * JMenus were made more compatible in visual and programmatic behavior.
+ * JTable changeSelection and multiple selections implemented.
+ * JButton and JToggleButton change states work properly now.
+ * JFileChooser fixes.
+ * revalidate and repaint fixes which make Free Swing much more responsive.
+ * Correctly handle system call interrupts and timeouts in native nio
+   and net functions.
+ * MetalIconFactory implemented.
+ * Handle image loading errors correctly for gdkpixbuf and MediaTracker.
+ * Added Tree World to GNU Classpath examples Free Swing demo.
+ * FileChannel.lock() and FileChannel.force() implemented.
+ * java.util.logging.FileHandler now rotates files.
+ * Better handle GDK lock. Properly prefix gtkpeer native functions (cp_gtk).
+ * Corba bug fixes and documentation updates.
+ * Updated gcj build infrastructure.
+ * Documentation fixes all over the place.
+   See http://developer.classpath.org/doc/
+ * VM Integration Guide updates with a full section on VM/Classpath hooks.
+ 
+ New in release 0.16 (Jun 30, 2005)
+ 
+ * Better GTK scrollbar peer implementation when using GTK >= 2.6.
+ * GdkGraphics2D has been updated to use Cairo 0.5.x APIs.
+ * BufferedImage and GtkImage rewrites. All image drawing operations
+   should now work correctly (flipping requires gtk+ >= 2.6)
+ * Future Graphics2D, Image and Text work is documented at:
+   http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
+ * Free Swing Top-Level Compatibility. JFrame, JDialog, JApplet,
+   JInternalFrame, and JWindow are now 1.5 compatible in the sense that you
+   can call add() and setLayout() directly on them, which will have the same
+   effect as calling getContentPane().add() and getContentPane().setLayout().
+ * The JTree interface has been completed. JTrees now recognizes mouse clicks
+   and selections work, but the visual implementation is not yet complete.
+   Work on expansion and collapsing of the tree nodes is being implemented.
+ * BoxLayout works properly now.
+ * Fixed GrayFilter to actually work.
+ * Metal SplitPane implemented.
+ * Lots of free swing text and editor stuff work now.
+ 
+ * When gtk+ 2.6 or higher is installed the default log handler will produce
+   stack traces whenever a WARNING, CRITICAL or ERROR message is produced.
+ 
+ * The CORBA implementation is now a working prototype that should support
+   features up till 1.3 inclusive. 
+   We would invite groups writing CORBA dependent applications to
+   try Classpath implementation, reporting any possible bugs.
+ 
+   The CORBA prototype is interoperable with Sun's implementation v 1.4,
+   transferring object references, primitive types, narrow and wide 
+   strings, arrays, structures, trees, abstract interfaces and 
+   value types (feature of CORBA 2.3) between these two platforms. 
+   The remote exceptions are transferred and handled correctly.
+   The stringified object references (IORs) from various sources are
+   parsed as required. 
+   The transient (for current session) and permanent (till jre restart)
+   redirections work. 
+   Both Little and Big Endian encoded messages are accepted. 
+   The implementation is verified using tests from the former cost.omg.org.
+   The current release includes working examples (see the examples directory),
+   demonstrating the client-server communication, using either CORBA Request
+   or IDL-based  stub (usually generated by a IDL to java compiler).
+   These examples also show how to use the Classpath CORBA naming service.
+   The IDL to java compiler is not yet written, but as our library must be 
+   compatible, it naturally accepts the output of other idlj implementations.
+ 
+ * New --with-vm-classes configure option, and new 'build' setting
+   for --with-glibj. (Only for integrators.)
+ 
+ Runtime interface changes:
+ 
+ * Start of a generic JDWP framework in gnu/classpath/jdwp.
+   This is unfinished, but feedback (at classpath@gnu.org) from runtime
+   hackers is greatly appreciated. Although most of the work is currently
+   being done around gcj/gij we want this framework to be as VM neutral as
+   possible. Early design is described in:
+   http://gcc.gnu.org/ml/java/2005-05/msg00260.html
+ * Native method VMClass.getModifiers() now takes an additional
+   boolean parameter.
+ * Deprecated native method VMClassLoader.defineClass(ClassLoader,
+   String, byte[], int, int) has been replaced by
+   VMClassLoader.defineClass(ClassLoader, String, byte[], int, int,
+   ProtectionDomain)
+ * VMClassLoader.loadClass(String name, boolean resolve) is now native,
+   replacing the former version which just returned null.
+ * Deprecated native method VMClassLoader.getPrimitiveClass(String) has
+   been replaced by new native method VMClassLoader.getPrimitiveClass(char).
+ * Previously empty implementations of methods VMThread.countStackFrames(),
+   VMThrowable.fillInStackTrace(), and VMThrowable.getStackTrace() have
+   been removed; these methods are now native methods.
+ * Fields "exceptionTypes" and "parameterTypes" have been removed from
+   Contructor.java and getExceptionTypes() and getParameterTypes() are
+   now native methods.
+ 
+ New in release 0.15 (Apr 29, 2005)
+ 
+ * The old character encoding framework (gnu.java.io.EncodingManager)
+ has been replaced by a system based completely on nio.charset
+ providers. Many converters have been added, both the io, lang and nio
+ frameworks now use the same set of converters and the whole character
+ stream framework (Readers and Writers) have been optimized. For some
+ workloads this leads to 2x till 20x speedups.
+ 
+ The default charsets supported are:
+ 
+   Cp424, Cp437, Cp737, Cp775, Cp850, Cp852, Cp855, Cp857, Cp860, Cp861,
+   Cp862, Cp863, Cp864, Cp865, Cp866, Cp869, Cp874, ISO_8859_1, ISO_8859_13,
+   ISO_8859_15, ISO_8859_2, ISO_8859_3, ISO_8859_4, ISO_8859_5, ISO_8859_6,
+   ISO_8859_7, ISO_8859_8, ISO_8859_9, KOI_8, MS874, MacCentralEurope,
+   MacCroatian, MacCyrillic, MacDingbat, MacGreek, MacIceland, MacRoman,
+   MacRomania, MacSymbol, MacThai, MacTurkish, US_ASCII, UTF_16, UTF_16BE,
+   UTF_16Decoder, UTF_16Encoder, UTF_16LE, UTF_8, UnicodeLittle, Windows1250,
+   Windows1251, Windows1252, Windows1253, Windows1254, Windows1255,
+   Windows1256, Windows1257, Windows1258.
+ 
+ Many more encoding are supported through the new IconvProvider
+ depending on the platform iconv support. GNU libiconv is recommended.
+ The IconvProvider is currently not enabled by default. To enable it
+ define the system property gnu.classpath.nio.charset.provider.iconv=true.
+ Some runtimes might choose to enable this by default by setting it
+ through VMSystemProperties. We would like to get feedback on whether
+ enabling or disabling the IconvProvider by default results in the
+ highest speedups.
+ 
+ * Free swing metal and pluggable look and feels have been improved.
+ The GNU Classpath free swing example can now be run with different
+ "skins" by setting the system property swing.defaultlaf to the GNU,
+ Basic or Metal look and feel.
+ 
+ * Some of the org.omg.CORBA classes and packages have now been
+ implemented. The Savannah bug tracker contains additional tasks for
+ which we are seeking help.
+ 
+ * Fixed compatibility problems in the java.beans which affected
+ Eclipse's Visual Editor Project.
+ 
+ * New completely lock free (Inheritable)ThreadLocal implementation.
+ 
+ * javax.swing.text.rtf framework added which can handle simple (plain)
+ text tokens.
+ 
+ * Support for parsing html files into Level 2 Document Object Model
+ (org.w3c.dom.html2 and javax.swing.text.html.parser). And a start of
+ javax.swing.text.html framework added.
+ 
+ Runtime interface changes:
+ 
+ * jni.h changed to better support compiling runtimes implementing jni;
+   see VM integration guide for details.
+ * New --enable-default-toolkit option to configure can be used to set
+   the fully qualified class name of the default AWT toolkit to use.
+   If not given, the old default of gnu.java.awt.peerk.gtk.GtkToolkit
+   is used.
+ * New --disable-core-jni option can be used to disable building the
+   "core" JNI libraries.  This is primarily useful if your VM can use the
+   Gtk peers but not the core JNI libraries.
+ * New system property "gnu.classpath.boot.library.path" can be specified
+   to define the location of the JNI libraries. It is by all means meant
+   ONLY for VM implementors and GNU Classpath hackers. See the hacking
+   guide for more information.
+ * The helper methods currentLoader() and allocateObject() for
+   java.io.ObjectInputStream have been moved to a VMObjectInputStream class.
+   Reference implementations are provided.
+ * java.net.InetAddress now uses VMInetAddress for runtime/platform
+   specific methods getLocalHostname(), getHostByAddr() and
+   getHostByName(). java.net.NetworkInterface now uses VMNetworkInterface
+   for runtime/platform specific getInterfaces() support. Default
+   (Posix/GNU JNI) implementations are provided.
+ * VMClass has a new method getModifiers(Class, boolean) which can be
+   used to get the real modifiers for an inner class or the ones
+   specified by the InnerClasses attribute.
+ * All (possible) runtime specific methods of Object and Double are now
+   in VMObject and VMDouble. Where possible generic reference
+   implementations are provided.
+ * The reference implementation of VMClassLoader now handles zip files
+   on the boot loader class path in getResources().
+ 
+ Other changes:
+ 
+ New in release 0.14 (Feb 25, 2005)
+ 
+ * Character encoders and decoders have been added for:
+   iso-8859-6 (arabic), iso-8859-7 (greek), iso-8859-8 (hebrew),
+   iso-8859-9 (latin-5), iso-8859-13, iso-8859-15 (latin-9), cp1047 (ebcdic),
+   ebcdic-xml-us,ascii, windows-1250, windows-1252, UTF-16BE (Big Endian),
+   UTF-16LE (Little Endian), UTF-32BE (Big Endian), UTF-32LE (Little Endian).
+ * Full documentation for all classes can be generated (again) by using
+   the --with-gjdoc configure option.
+ * javax.awt.imageio support through gdkpixbuf.
+ 
+ Runtime interface changes:
+ 
+ * VMSecurityManager has been replaced by gnu.classpath.VMStackWalker.
+   currentClassLoader() is no longer needed, and there are also two new
+   methods with non-native implementations. VM implementors are encouraged
+   to provide more efficient versions.
+ * VMRuntime.nativeLoad() now takes an additional ClassLoader parameter.
+ 
+ New in release 0.13 (Jan 6, 2005)
+ 
+ * The http url protocol handler has been replaced with a full HTTP/1.1
+   version from GNU inetlib.
+ * A new ftp url protocol handler has been added also from GNU inetlib.
+ * java.beans has been updated to 1.4 including support for XMLEncoder
+   and XMLDecoder.
+ * The java.util.Locale support is now based on the Common Locale Data
+   Repository (CLDR) Project (see http://www.unicode.org/cldr/).
+   GNU Classpath provides support for more than 250 locales now.
+   This new support is experimental and the GNU Classpath hackers are
+   working together with runtime developers and the unicode consortium
+   to improve them in the future.
+   If your runtime misdetects your locale or if the default locale gives
+   problems please try running with -Duser.language=en and -Duser.region=US
+   to fall back on a known good locale.
+ * Added implementations of javax.xml (JAXP 1.3), org.xml.sax (SAX2) and
+   org.w3c.dom (DOM Level 3) interfaces. It is possible to switch between
+   different implementations AElfred2, GNU DOM, GNU XSL, libxmlj SAX,
+   libxmlj DOM and libxmlj XSL by setting different system properties.
+   Also provided is a preliminary XPath 1.0 implementation.
+   The libxmlj versions are build around libxml2 and libxslt and have to
+   be enabled during build time by the --enable-xmlj configure flag.
+   The current support is equal to the last released GNU JAXP 1.3 release.
+   These packages will be maintained as part of the GNU Classpath core classes
+   in the future. For more information, conformance results and documentation
+   on selecting different implementations see doc/README.jaxp.
+ * More AWT accessible support.
+ * AWT gtk+ peers component layout, dialog placement, keyboard focus
+   handling and text positioning have been improved.
+ * ImageIO interfaces are more complete.
+ * JList, JTable and JTree have been hugely improved.
+ * java.awt.Robot support with GdkRobot in the gtk+ awt peers.
+   Needs XTest Extension (libXtst) XServer support.
+ * New --disable-examples configure argument.
+ 
+ Runtime interface changes:
+ 
+ * Added a new method (VMRuntime.enableShutdownHooks) that enables the VM
+   to lazily register an exit handler.
+ * The java.lang.Class constructor now automatically sets the protection
+   domain for array classes, based on the protection domain of the component
+   type class.
+ * New gnu.classpath.VMSystemProperties class. This replaces the
+   system properties initialization in VMRuntime. Note that it is
+   now the VMs responsibility to set one additional property:
+   gnu.cpu.endian should be set to "big" or "little".
+ * VMRuntime.nativeGetLibname() has been renamed to VMRuntime.mapLibraryName()
+   and has only one argument, the name of the library.
+ * String and StringBuffer now call VMSystem.arraycopy() directly and don't
+   go through java.lang.System. Be careful to not initialize java.lang.System
+   early in the bootstrap sequence in your VM runtime interface classes.
+ * Some (wrong) documentation about the behavior of VMThread.sleep(0, 0)
+   has been updated. Also, VMThread.sleep() now has a default non-native
+   implementation, but it is a generic implementation that ignores the
+   nano-seconds argument. Runtime hackers are encouraged to provide a more
+   efficient version.
+ * There is prelimenary support for nio direct byte buffers.
+   See VMDirectByteBuffer. Please contact the GNU Classpath mailinglist when
+   you add support for this to your runtime.
+ 
+ New in release 0.12 (Nov 14, 2004)
+ 
+ * GNU Classpath's JAR implementation now has preliminary support for
+   signed entries, for so called "signed JAR" file support. Signed JAR
+   files are one of the key security features of managed runtimes, and
+   allows code to run privileged given unforgeable proofs of identity.
+ * A much improved version of X.509 certificates has been added,
+   including a robust certificate path checking algorithm. Also
+   included is an implementation of the RSA signature scheme.
+ * Full java.awt.color implementation, with all standard ICC profiles,
+   except for PhotoYCC color space.
+ * java.beans 1.4 updates and bug fixes.
+ * java.awt.image support updated to 1.4.
+ * Improved build process. Uses less memory with gcj and C code is
+   buildable with -Werror on most platform. Please configure with
+   --enable-Werror and report any remaining issues.
+ * Big-endian (PowerPC) fixes for native awt GTK+ peers.
+ * Checkstyle support, see scripts/checkstyle-config.xml.
+ * Better AWT focus management fro GTK+ peers.
+ * Much faster and better fonts support
+   (for both gdk Graphics and cairo Graphics2D)
+ * AWT Choice fixes for hidden components.
+ * HTTP Connection Handler fixes for POST support.
+ * Much fuller collection documentation.
+ * Lots of Calendar bug fixes.
+ * More javax.imageio support.
+ * Better AWT Help MenuBar support.
+ * Lookahead support for regular expressions.
+ * Serialization object stream fixes for multiple ClassLoader scenarios.
+ * Swing TabbedPane, ColorChooser and ComboBox improvements.
+ * Start of JTree functionality.
+ * Improved Eclipse 3 support for GNU Classpath based runtimes.
+ 
+ Runtime interface Changes:
+ 
+ * New --enable-java-lang-system-explicit-initialization configuration
+   option. (Warning, will be replaced in next release, please consult
+   the mailinglist.)
+ * The reference implementation of VMClassLoader has default
+   implementations for getResource(s) and provides support for a new
+   default getSystemClassLoader implementation.
+ 
+ New in release 0.11 (Sep 13, 2004)
+ 
+ * javax.swing.Spring and SpringLayout support.
+ * Added pluggable look and feel support for BasicTextFieldUI and
+   BasicToolBarSeparatorUI.
+ * java.swing.text support for (Default and Layered) Highlighter, FieldView,
+   PlainView, TabExpander and TabableView added.
+ * Start of JTable and JTree implementation.
+ * Internal Swing frames work.
+ * JMenu and JPopupMenu work.
+ * New gtk+ AWT FileDialog peer now based on gtk+2.4 or higher.
+ * java.awt.image LookupTables and kernel support.
+ * Improved java.awt.image.BufferedImage support.
+ * AWT 1.0 event model support.
+ * GNU Classpath now comes with some example programs (see examples/README).
+ * New javax.crypto, javax.crypto.interfaces, javax.crypto.spec, javax.net,
+   javax.net.ssl, javax.security.auth, javax.security.auth.callback,
+   javax.security.auth.login, javax.security.auth.x500, javax.security.sasl
+   and org.ietf.jgss packages are now officially part of GNU Classpath.
+   Extra crypto algorithms can be obtained from the GNU Crypto project,
+   a full TLS implementation is provided by the Jessie project.
+   http://www.gnu.org/software/gnu-crypto/
+   http://www.nongnu.org/jessie/
+ * Frame.setIconImage() support.
+ * AWT GDKGraphics scaling.
+ * New configure flag --enable-gtk-cairo to build Graphics2D implementation
+   build on cairo and pangoft2.  Enabled at runtime by defining the system
+   property gnu.java.awt.peer.gtk.Graphics=Graphics2D.
+ * javax.swing.JSpinner implemented.
+ * Extensive documentation update for java.util collection classes.
+ * java.awt.geom completed. Area, Arc2D, Ellipse2D and Line2D implemented.
+ * GNU JAXP is no longer included with GNU Classpath. Runtime, compiler and
+   tool integrators are encouraged to directly integrate GNU JAXP.
+   This release has been tested against GNU JAXP 1.1.
+   http://www.gnu.org/software/classpathx/jaxp/jaxp.html
+ * JColorChooser, JComboBox and JTextField implemented, including example
+   uses in GNU Classpath Examples swing Demo.
+ 
+ Runtime interface Changes:
+ 
+ * java.lang.Compiler now uses the new java.lang.VMCompiler; there is
+   a reference implementation that most VMs can use.
+ * java.lang.VMSystem has a new getenv(String) method and a reference C/JNI
+   implementation that should work on most Posix like systems.
+ * java.util.TimeZone has been split into a platform independent class and
+   a platform dependent class VMTimeZone.  GNU Classpath comes with a generic
+   way to get at the default time zone for Posix/GNU-like platforms.
+ * [VM]AccessController improvements.  In particular it handles
+   `doPrivileged' calls better, and allows for recursive `doPrivileged'
+   calls in the same Thread. (see vm/reference/java/security/)
+ 
+ New in release 0.10 (Jul 9, 2004)
+ 
+ * java.net.URL now uses application classloader to load URLStreamHandlers
+   and reuses URLStreamHandlers when URL is reset (but protocol isn't changed).
+ * java.io.File.deleteOnExit() implementation.
+ * java.text multiple new features and bug fixes
+   (only 2 out of the 1000+ java.text Mauve tests now fail).
+ * Better (non-black) default AWT System colors.
+ * AWT lists use GTK treeviews.
+ * Proper AWT focus management has been implemented.
+ * Swing menus and scrollpanes are beginning to work.
+ * Swing splitpanes, dialogs and internal frames were added.
+ * Swing repainting / double buffering was redone.
+ * Font management and Pango DPI conversion fixes.
+ * A lot of AWT imaging and event bugs have been picked out.
+ * More of javax.swing.text has been implemented.
+ * javax.swing.Timer has been reimplemented.
+ * java.security.AccessController has been implemented
+   (see runtime section).
+ * The default java.lang.SecurityManager now uses AccessController.
+ * New java.beans.Statement and Expression implementations.
+ * Small FileChannel implementation speed improvement for traditional
+   JNI based systems.
+ * Regenerated all included JNI header files with gcjh (3.5 CVS),
+   removes extra extern modifier and allows stricter compiler warning.
+ * More C code cleanups (-Wmissing-declarations, -Wmissing-prototypes and
+   -Wstring-prototypes) and jni.h fixes (a few funtion prototype fixes,
+   made it compilable with C++ compilers and jni.h got renamed from jni.h.in).
+ * Double.toString() and Float.toString() now work properly on 64-bit 
+   PowerPC systems.
+ * PPC Darwin, arm, x86-64 and s/390 JNI C code compilation fixes.
+ * Build system refactored and removed old Japhar specific support.
+ * The gnu.java.awt.EmbeddedWindow class has been improved, and now
+   supports embedding AWT windows in other top-level X windows.
+   This functionality is required by gcjwebplugin.
+ * gcjwebplugin, an applet viewer that can be embedded into several web
+   browsers, has been extensively tested with this release of classpath.
+   (See http://www.nongnu.org/gcjwebplugin/)
+ * Runtime environments based on GNU Classpath 0.10 should be able to
+   start up Eclipse 3.0 out of the box now.
+ 
+ Runtime interface Changes:
+ 
+ * VMProcess.destroy() default implementation fixes.
+ * Fixed the "portable native sync" code; it had been broken since
+   Classpath release 0.06, when we upgraded to GTK+2.    
+   Classpath's AWT peers use GTK+.  GTK+ uses GLIB.  GLIB by default uses
+   the platform's native threading model -- pthreads in most cases.
+   If the Java runtime doesn't use the native threading model, then you should
+   specify --portable-native-sync when configuring Classpath, so that GLIB will
+   use the Java threading primitives instead.  (For a superior alternative,
+   see below.)
+ * The VM can set the system property
+   gnu.classpath.awt.gtk.portable.native.sync instead of using the
+   --portable-native-sync configure-type option.
+   See doc/vmintegration.texinfo for details.
+ * We intend that the next release of GNU Classpath will require the VM 
+   to provide JNI 1.2.  Classpath currently uses only JNI 1.1, except for 
+   one JNI 1.2 function: GetEnv(), in the JNI Invocation API. 
+   If this poses problems, please raise them on the classpath mailing list.
+ * The reference implementation of VMThread.holdsLock(Object) now has
+   a default implementation written in java. For efficiency and to
+   prevent spurious wakeups a real 'native' runtime version can be supplied.
+ * There is a new java.security.VMAccessController class that runtimes need
+   to implement to properly support SecurityManagers. The default
+   implementation that comes with GNU Classpath makes sure that ANY attempt
+   to access a protected resource is denied when a SecurityManager is
+   installed. Which is pretty secure, but also no very useful.
+   Please see the documentation in
+   vm/reference/java/security/VMAccessController.java,
+   and please give feedback on the GNU Classpath mailinglist whether or not
+   the current AccessController framework is flexible enough.
+ 
+ New in release 0.09 (May 2, 2004)
+ 
+ * Includes updated GNU JAXP version from 2004-02-01.
+ * Native C code is now -ansi -pedantic (C89) clean and (almost) -Wall clean.
+ * java.io is now implemented by delegating most tasks directly to java.nio.
+ * Reworked/Optimized implementations of java.nio.Buffer and subclasses.
+ * New javax.print, javax.print.attribute[.standard] and javax.print.event
+   packages and classes.
+ * java.text attributed iterators support.
+ * New javax.imageio, javax.imageio.event and javax.imageio.spi packages and
+   classes.
+ * GNU Classpath can now load service providers that are described via
+   META-INF/services/* resources in extension JARs. This is useful for
+   implementing the various APIs that are supposed to be extensible via
+   custom plugins. For details, please see the documentation of
+   gnu.classpath.ServiceFactory.
+   Application developers are strongly discouraged from calling glibj
+   internal packages.  Instead, they might want invoke the newly implemented
+   javax.imageio.spi.ServiceRegistry.lookupProviders, which is a standard 
+   method for loading plug-ins.
+ * New developers wanting to help the GNU Classpath project might want to
+   review the greatly expanded Hacker Guide included in the doc directory
+   or online at http://www.gnu.org/software/classpath/docs/hacking.html
+   Also the FAQ has been expanded. And when working from CVS you can now use
+   a simple autogen.sh script to get all autotools magic done automagically.
+ * New configure option --with-glibj which defines how to install the glibj
+   class files as zip, as flat directory files or both (zip|flat|both)
+   [default=zip].  When working with multiple runtimes some of which might
+   not support bootstrap classes in zip files the --with-glibj=both option
+   is recommended (this does take extra disc space).
+ * Two big code drops from the libgcj gui branch updating various java.awt
+   and javax.swing classes.
+ * Multiple java.net.InetAdress fixes and java.rmi fixes.
+ * ServerSocket.accept() now restarts listening when system call interrupted.
+ * Much cleanups to make standard API doc valid XHTML (not completed yet).
+ * A scan for unused variables and non-static invocation of static methods
+   turned up a couple of subtle bugs which have now all been fixed.
+ * The Mauve testsuite has been cleaned up considerable and lots of issues
+   in the GNU Classpath core class implementation have been fixed.
+ 
+ VM Interface changes:
+ 
+ * java.lang.Class/VMClass interface was changed. The interface now no
+   longer requires an instance of VMClass for each Class instance. Instead
+   the field vmdata in Class is now of type Object.
+ * GNU Classpath now assumes that JNI calls SetXField can modify final
+   fields. This was previously used silently for System.in/out/err and should
+   be considered as a feature now.
+ * A new VMProcess and a sample JNI C implementation are now provided to
+   make Runtime.exec() work out of the box on some systems.  This requires
+   a small change to VMRuntime.exec() when a runtime wants to use it as the
+   default java.lang.Process implementation.
+ * The implementation of most of java.io through java.nio moved serveral
+   runtime specific I/O methods. Most methods do have a generic default native
+   C JNI implementation in native/jni/java-nio.
+ * Runtime support methods for java.io.File have been moved to VMFile which
+   also comes with a default JNI C implementation.
+ * To support the new service provider mechanism runtimes must make sure that
+   extension JARs are made accessible via the default context class loader.
+ 
+ New in release 0.08 (2004/12/03)
+ 
+ * java.util.regexp implementation through gnu.regexp wrappers.
+ * java.net.URI implementation.
+ * Working implementation of javax.swing.undo.
+ * java.awt.geom.CubicCurve2D/QuadCurve2D: Can now solve cubic and quadratic
+   equations; implementation adapted from the GNU Scientific Library.
+ * Lots of java.awt and gtk+ peer improvements. Also more Swing work. Start
+   of EmbeddedWindow support.
+ * BufferedReader speed improvements.
+ * Improved useabilty of java.text implementation for several applications.
+ * ObjectInputStream is much faster and more compatible with other
+   implementations.
+ * Fix handling of alias methods, where a method has been deprecated in
+   favour of a new one with the same funtion but a different name.
+   (See Deprecated Methods section in the GNU Classpath Hacking Guide.)
+ * javax.print.attribute.standard added.
+ * Lots of java.nio, java.net, java.io
+ * Depend on autoconf 2.59+ and automake 1.7+, GCJ 3.3+, jikes 1.18+.
+ 
+ VM Interface changes:
+ * Split native methods in java.lang.Runtime into java.lang.VMRuntime.
+ * Resources are now also loaded/needed through the bootstrap classloader
+   (gnu.regexp needs MessageBundle included in glibj.zip
+ 
+ Fixed Classpath bugs:
+   #6095 java.awt.geom.QuadCurve2D.solveQuadratic sometimes gives
+         wrong results
+   #7099 EventListenerList.getListenerCount should accept null argument
+   #7104 EventListenerList.add does not work
+   #7105 EventListenerList.remove does not work
+   #7107 DefaultBoundedRangeModel.setValue and friends should not throw
+   And lots more.
+ 
+ New in release 0.07 (2003/30/11)
+ 
+ * Works with libtool 1.5 (and 1.4.3).
+ * java.awt gtk+ peers now depend on gtk+ 2.2.x and uses pango.
+   Lots and lots improvements on the peers.
+ * java.awt.geom.CubicCurve2D, java.awt.geom.QuadCurve2D:
+   Subdivision and flatness calculation implemented.
+ * java.awt.geom.FlatteningPathIterator: Working implementation.
+ * gnu.java.awt.BitwiseXORComposite helper class.
+ * New rmic compilers (jikes, kjc) support.
+ * java.text bug fixing and 1.4 updates (Currency).
+ * Hashtable and HashMap function more similar to other implementations.
+ * javax.naming and java.beans classloader fixes.
+ * URL parsing, URLConnection, protocol and (needed) permission fixes.
+ * More java.nio implementation
+   (API complete, but implementation not finished yet).
+ * Lots of java.net code cleanup.
+ * Improved documentation.
+ * Numerous bug fixes in almost every package, and lots of updates for
+   1.4 functionality.
+ * Fixed Classpath bugs:
+   #2944 Incorrect synchronization in java.util.logging.ErrorManager
+   #6075 java.awt.geom.GeneralPath.getCurrentPoint returns wrong results
+   #6076 java.awt.geom.GeneralPath constructor sometimes hangs
+   #6089 java.awt.geom.GeneralPath.getPathIterator does not work
+   [...]
+ 
+ VM Interface changes:
+ 
+ * Thread has been split in a VM-independent Thread class and a VM-dependent
+   VMThread class.
+ 
+ New in release 0.06 (2003/22/08)
+ 
+ * Update java.awt peers to GTK+2.
+ * java.awt.GridBagLayout implementation.
+ * javax.swing.border implementation.
+ * java.security and java.security.cert updated to 1.4 spec.
+ * New JNI native target code layer. See native/target/readme.txt.
+ * --enable-regen-headers configure flag for automatic jni .h file generation.
+ * Removed workaround for gcj 3.2 and lower, gcj 3.3+ or jikes 1.18+ is now
+   needed for compiling.
+ * Lots of improvements and/or new classes for java.awt, java.awt.dnd,
+   java.awt.font, java.awt.geom, java.awt.image, java.io, java.math, java.net,
+   java.nio, java.rmi, java.text, java.util, javax.swing, javax.swing.plaf,
+   javax.swing.text.
+ 
+ VM Interface changes:
+ 
+ * VMClassLoader.loadClass(), the bootstrap classloader called by
+   Class.forName() and ClassLoader.loadClass(), may now return null when
+   a class is not found instead of throwing a new ClassNotFoundException.
+   This is a performance optimization in some cases. This also changes
+   the Class.forName() reference code.
+ * Native methods in Class have been moved to VMClass.  A few additional
+   methods are also available in VMClass to provide optional performance
+   improvements.
+ * A VM can now supply its own String.intern() strategy through the
+   VMString class. The supplied VMString reference class implements the
+   original WeakHashMap strategy.
+ * Float and Double to/from bits conversion functions can now be supplied by
+   the VM through VMFloat and VMDouble. Default JNI conversion methods are
+   supplied.
+ 
+ New in release 0.05 (2003/02/15)
+ * Supports free Java VMs Jikes RVM and Kissme out of the box, perhaps others.
+ * Supports GNU Crypto 1.1 as the official provider of cryptographic primitives
+   and tools for GNU Classpath, available separately from 
+   http://www.gnu.org/software/classpathx/crypto/crypto.html. 
+ * Supports GNU Classpath Tools sub-project of GNU Classpath, official provider
+   of standard tools such as gjdoc, a javadoc replacement, and others.  Future
+   releases of GNU Classpath will begin to include these tools, available
+   separately from http://www.gnu.org/software/cp-tools/.
+ * Java primitives can be used to support AWT native threading, see 
+   the --enable-portable-native-sync configure option which may become the
+   default in a future release.
+ * Include file jni.h has been updated to the 1.4 specification.
+ * VM specific internal types for jobject, jfieldID, and jmethodID are
+   supported in jni.h.  More details can be found by reading the comment
+   in include/jni.h.in.  By default the old definitions are used instead.
+ * New VM helper class java.io.VMObjectStreamClass which should provide
+   the hasClassInitializer() method. Previously ObjectStreamClass used
+   Class.getDeclaredMethod("<clinit>") but according to the spec this
+   should always throw NoSuchMethodException for class initialization methods.
+   A JNI reference implementation is provided as
+   vm/reference/java-io/java_io_VMObjectStreamClass.c
+ * There have been numerous infrastructure improvements
+   * Configure option --enable-gjdoc to generate javadoc-like output 
+   * Gjdoc output is included with distribution, see doc/api/html/
+   * DESTDIR fully supported for install and uninstall
+ * Runtime.execInternal contract changed to allow for null `env'
+   and to accept `dir' argument.
+ * VMObject.getClass() removed. It was never used.
+ * java.lang.Throwable is now a 'normal' GNU Classpath class that uses the
+   VM specific java.lang.VMThrowable to get at the VM state and (if needed)
+   the StackTraceElements for a particular exception. A default implementation
+   (that does nothing) is provided in vm/reference/java/lang/VMThrowable.java.
+ * The vm/reference classes from the gnu.vm.stack and their counterparts
+   ExecutionStack and StackFrame in gnu.java.lang have been removed since they
+   are not actually part of the VM interface anyway.
+ * The GPLed com.sun.javadoc classes have been moved to the gjdoc application
+   from the GNU Classpath Tools project. See for more information the homepage
+   at: <http://www.gnu.org/software/cp-tools/>.
+ 
+ New in release 0.04 (2002/05/05)
+ * Additional configure options to disable zip creation and installation as
+   well as disable gtk peer native compilation.
+ * Addition of java.nio, java.util.logging, and javax.swing.
+ * Integration of most or all of the ORP patches to date, the purpose of 
+   which are to make it possible to use JBOSS with ORP and Classpath.  This
+   is still in a testing phase however.
+ * Significant changes in the reference VM interface that may require
+   support from the JVMs.
+ * Lots of bugfixes.
+ 
+ New in release 0.03 (2002/02/08)
+ * More merges with libgcj have been performed including java.math which now
+   provides a pure Java implementation of that package.
+   Current status at <http://gcc.gnu.org/java/libgcj-classpath-compare.html>
+ * A pure Java implementation (Jazzlib) of java.util.zip is available.
+ * Added the java.rmi implementation that Transvirtual donated to the FSF.
+ * Includes jni.h now, eliminating the need to specify a particular VM
+   via configure.
+ * No proprietary classes or programs are required to compile.
+   Compiles out of the box with jikes or gcj.
+ * Separation of compiling Java source and native libraries through the 
+   configure mechanism.  If given no arguments, configure will setup the
+   subsequent build to only produce Java bytecode (.class files).  More
+   information is available in INSTALLING.
+ * Support for compiling in a separate directory, as an example you may
+   cd classpath-0.03; mkdir build; cd build; ../configure; make
+ * Works with Orp 1.0.9 out of the box. Build instructions can be found at
+   <http://www.gnu.org/software/classpath/doc/orp.html>
+ * Lots of bugfixes that were found by using Classpath with the gcj, Orp,
+   SableVM, KissMe and Jaos VMs. Please use our bugdatabase at
+   <http://savannah.gnu.org/support/?group_id=85>
+ * Lots of updates to make Classpath more compliant with the 1.2, 1.3 and 1.4
+   API specification. The current status can be found at
+   <http://www.gnu.org/software/classpath/status.html>
+ * All files are now distributed under the same terms. Added clarification to
+   GPL exception.
+ 
+ New in release 0.02 (2001/01/06)
+ * Support for printing exceptions with Japhar 0.09 + patch included in
+   resource/japhar-0.09.patch.1.
+ * Typos, assorted bugfixes.
+ 
+ New in release 0.01 (2000/11/20)
+ * More packages are included now, though many remain untested.
+ * Support for Japhar 0.09 included.
+ 
+ New in release 0.00 (1999/02/01)
+ * First official development release of clean room class library for Java
+ * Following packages included:
+ 	-- java.beans
+ 	-- java.io
+ 	-- java.lang
+ 	-- java.lang.reflect
+ 	-- java.math
+ 	-- java.net
+ 	-- java.security (partial and non-functioning)
+ 	-- java.security.acl
+ 	-- java.security.interfaces
+ 	-- java.util
+ * Code is mostly Java 2 (see JDK 1.2) compatible with some functionality
+   missing and/or untested.
+ * Support for Japhar (http://www.japhar.org/) virtual machine is included.
+   Requires the current Japhar from CVS.
+ * Extensive javadoc comments for public API included
+ * Licensed under the GNU Library General Public License (see COPYING.LIB)
+ * Does not depend on any non-free code - developed in a "clean room"
+   environment.
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/README gcc-4.1.0/libjava/classpath/README
*** gcc-4.0.2/libjava/classpath/README	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/README	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,91 ----
+ GNU Classpath README - Last updated: August 31, 2005
+ 
+ GNU Classpath, Essential Libraries for Java is a project to create a
+ free software implementation of the core class libraries for the java
+ programming language.
+ 
+ Additionally GNU Classpath includes a sub-project called GNU Classpath
+ Tools whose goal is to provide a number of free replacements for
+ standard Java development tools like javadoc, javap, javah, and
+ others.  And a sub-project called GNU Inetlib, an extension library to
+ provide extra network protocol support (ftp, finger, gopher) for GNU
+ Classpath, but it can also standalone to ease adding http, imap, pop3
+ and smtp client support to applictions. These subprojects are normally
+ released independent from the core libraries.
+ 
+ This is a development snapshot release only and is not for general
+ purpose use.  GNU Classpath needs to be combine with a proper
+ development environments to be useable for end users.  Eventually,
+ these essential libraries for java will work with as many free
+ compilers and runtimes as possible.
+ 
+ Complete development environments known to be based on GNU Classpath
+ include (recommended for end users):
+ 
+ 	* GCC with GCJ 	(http://gcc.gnu.org/java/)
+ 	* Kaffe		(http://www.kaffe.org/)
+ 
+ Smaller environments (runtime only, no compilers, no tools) which work
+ with this GNU Classpath releases include
+ (tested by and recommended for GNU Classpath hackers):
+ 
+ 	* JamVM		(http://jamvm.sourceforge.net/)
+ 	* Jikes RVM	(http://www.ibm.com/developerworks/oss/jikesrvm/)
+ 	* Kissme	(http://kissme.sourceforge.net/)
+ 
+ In general the latest releases of the above VMs will work out of the box
+ with the latest GNU Classpath release (and in most cases directly with the
+ development sources from CVS).
+ 
+ Besides combining GNU Classpath with the runtimes and compilers above
+ you might want to add support for encryption libraries as provided by
+ GNU Crypto (http://www.gnu.org/software/gnu-crypto/).
+ And for additional extension libraries (mail, xml, activation, infobus,
+ servlet) check out GNU ClasspathX (http://www.gnu.org/software/classpathx).
+ 
+ Some tools come with their own customized version of GNU Classpath.
+ Please check if there is a customised version available for the tool you
+ use before trying the bare bones GNU Classpath release. We are working with
+ the tool creators to keep the differences between the core classes as small
+ as possible. Please tell us if you make GNU Classpath work with a new tool.
+ 
+ Active projects which use modified versions of the Classpath libraries
+ some of which synchronizes with the Classpath CVS head every couple of weeks:
+ 
+ 	* IKVM.NET	(http://www.ikvm.net/)
+ 	* JC		(http://jcvm.sourceforge.net/)
+ 	* JNode		(http://jnode.sourceforge.net/)
+ 	* MysaifuVM	(http://www2s.biglobe.ne.jp/~dat/java/project/jvm/)
+ 	* SableVM	(http://www.sablevm.org)
+ 
+ See for a more complete list of GNU Classpath based projects the
+ GNU Classpath website: http://www.gnu.org/software/classpath/stories.html
+ 
+ See the file INSTALL for details on installing GNU Classpath.
+ See the file NEWS for details on what is included in this release.
+ See the file TODO for the latest to do list.
+ See the file HACKING for working on (non-released) CVS development versions.
+ 
+ Homepage: http://www.gnu.org/software/classpath/
+ 
+ General Mailing List: classpath@gnu.org
+   --> Bugs and patches can be reported via Savannah if you have a browser
+       or via this address otherwise.
+   --> To subscribe send email to classpath-request@gnu.org with a 
+       subject and body of "subscribe".  To unsubscribe do the same,
+       only with a body and subject of "unsubscribe".  This is a
+       smartlist managed mailing list.
+ 
+ CVS Commit, Bugs and Patches List: commit-classpath@gnu.org
+   --> To subscribe send email to commit-classpath-request@gnu.org with a 
+       subject and body of "subscribe".  To unsubscribe do the same,
+       only with a body and subject of "unsubscribe".  This is a
+       smartlist managed mailing list.
+ 
+ Anonymous CVS:
+   --> export CVS_RSH="ssh"
+   --> cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/classpath co classpath
+   --> More detailed instructions available on the Savannah project website.
+       http://savannah.gnu.org/projects/classpath/
+ 
+ Happy Hacking!
diff -Nrcpad gcc-4.0.2/libjava/classpath/THANKYOU gcc-4.1.0/libjava/classpath/THANKYOU
*** gcc-4.0.2/libjava/classpath/THANKYOU	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/THANKYOU	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ The following have made minor contributions to the Classpath
+ project, such as testing, bug submission, or minor patches. See also
+ the AUTHORS file, which lists people who have submitted major
+ patches. If your name does not appear on either list, but should, let
+ us know. Please keep this list in alphabetic order.
+ 
+ C. Scott Ananian (cananian@lesser-magoo.lcs.mit.edu)
+ Xuan Baldauf (entwicklung--classpath--gnu.org@medium.net)
+ Artur Biesiadowski (abies@pg.gda.pl)
+ Per Bothner (per@bothner.com)
+ Carlos Cavanna (cdcavanna@yahoo.com)
+ Archie Cobbs (archie@precisionio.com)
+ Stephen Crawley (crawley@dstc.edu.au)
+ Moses DeJong (dejong@cs.umn.edu)
+ Patrick Doyle (doylep@eecg.toronto.edu)
+ Julian Dolby (dolby@us.ibm.com)
+ Raimar Falke (hawk@hawk.shef.ac.uk)
+ Philip Fong (pwlfong@users.sourceforge.net)
+ Jeroen Frijters (jeroen@sumatra.nl)
+ Etienne M. Gagnon (etienne.gagnon@uqam.ca)
+ Brian Gough (bjg@network-theory.com)
+ Fred Gray (fegray@npl.uiuc.edu)
+ Christian Grothoff <grothoff@cs.purdue.edu>
+ David P. Grove (groved@us.ibm.com)
+ Andrew Haley (aph@redhat.com)
+ Steven Hugg (hugg@pobox.com)
+ jockey@aromasoft.com
+ Isaac Jones (ijones@cis.ohio-state.edu)
+ Oskar Liljeblad (osk@hem.passagen.se)
+ Casey Marshall (rsdio@metastatic.org)
+ Steve Mayer (SMayer@dynamicsoft.com)
+ Matt Mucklo (mmucklo@jumpsmart.com)
+ Joseph S. Myers (jsm28@cam.ac.uk)
+ Raif S. Naffah (raif@fl.net.au)
+ Shane Nay (shane@minirl.com)
+ Takashi Okamoto (tora@debian.org)
+ Alexandre Oliva (oliva@dcc.unicamp.br)
+ Daniel Rall(dlr@west.net)
+ Patrik Reali (reali@inf.ethz.ch)
+ Petter Reinholdtsen (pere@hungry.com)
+ Julian Scheid (julian.scheid@sektor37.de)
+ Martin Schröder (ms@artcom-gmbh.de)
+ Gaute Smaaland (gs@sevenmountains.no)
+ Michael Smith (msmith@spinnakernet.com)
+ J. Russell Smyth (drfish@uswest.net)
+ Ian D. Stewart (idstewart@softhome.net)
+ Jeff Sturm (jsturm@one-point.com)
+ Sreenivas Subramoney (sreenivas.subramoney@intel.com)
+ Chris Toshok (toshok@hungry.com)
+ Weldon Washburn (weldon.washburn@intel.com)
+ Adam Welc (welc@cs.purdue.edu)
+ Gansha Wu (gansha.wu@intel.com)
+ Shuhua Zhang (Shuhua.Zhang@echostar.com)
diff -Nrcpad gcc-4.0.2/libjava/classpath/TODO gcc-4.1.0/libjava/classpath/TODO
*** gcc-4.0.2/libjava/classpath/TODO	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/TODO	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ See also http://www.gnu.org/software/classpath/tasks.html
+ Which is updated more often then this file.
+ 
+ The Classpath TODO list as of 2002/05/05
+ 
+ -- Write Mauve (http://sourceware.cygnus.com/mauve/) tests for those
+    classes that don't have them.
+ 
+ -- Write Java 2 packages not currently included or improve existing 
+    ones.
+ 
+ -- Modify ClassLoader.getSystemResource() to support loading classes 
+    from zip files in the CLASSPATH.  This requires java.util.zip to
+    be integrated first.  Jar files can probably be treated as zip
+    files for now.
+ 
+ -- Continue comparison and merge of classes between Classpath and GCJ.
+ 
+    Current status: http://gcc.gnu.org/java/libgcj-classpath-compare.html
+ 
+    Please keep in mind that Red Hat wishes to continue to use CNI
+    as their preferred native interface.  See:
+ 
+    http://sourceware.cygnus.com/java/papers/cni/t1.html
+ 
+ -- No resolution was identified for generating JNI compatible code from 
+    CNI source.  The simple solution has been adopted to include
+    both in GNU Classpath if and only if another JVM chooses to use CNI.  
+    Provisions for compiling CNI correctly need to be implemented.
+ 
+ -- Update the GNU Classpath Hacker's Guide.  There is a master texinfo
+    file in the doc/ directory in Classpath CVS.
+ 
+ -- Audit the code to identify methods that do not have Javadoc comments
+    and/or comments that are incomplete.  All input parameters, return
+    values, etc should be documentes.  Also look for Javadoc comments on
+    variables that are serializable.  
+    See http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#tag 
+    for details of what should be where in comments.
+ 
+ -- Figure out a way to generate a hardcopy manual for the Java class
+    library from the embedded Javadocs.  This probably involves writing
+    a custom doclet and probably some supplementary documentation
+    files into which the extracted Javadoc files are included.
+ 
+ -- Audit the code to ensure that all variable declarations are consistent
+    with the "Serialized Form" in the JDK.  That is, all serialized
+    variables in the JDK should be included in Classpath and all Classpath
+    instance variables that are not part of the JDK docs should be marked
+    transient.  Please be sure to use the online version of the Javadocs
+    for this and do not accept any "clickwrap" licenses from Sun in order
+    to download the JDK 1.2 Javadocs, which is where this information is
+    stored.
+ 
+ -- Audit code similar to above to determine where Sun uses readObject()
+    and writeObject() for serialization and determine what Classpath
+    needs to do for compatibility.
+ 
+ -- Audit code to ensure that every class that should be serializable
+    actually implementst java.io.Serializable and has the correct
+    serialVersionUID private static variable that is identical to the
+    JDK 1.1 version.  You can obtain that variable value using the
+    serialver command.
+ 
+ -- Do real life serialization compatibility tests of our code vs 
+    the JDK using serialcompat from Japitools.
+ 
+ -- Audit code for thread safety. 
+ 
+ -- Audit Java code for proper Security implementation.
+ 
+ -- Audit native code for security, memory handling, etc.
+ 
+ -- Bug reports are always welcome.  They are double welcome if they
+    are accompanied by a Mauve test that reproduces the bug.
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/aclocal.m4 gcc-4.1.0/libjava/classpath/aclocal.m4
*** gcc-4.0.2/libjava/classpath/aclocal.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/aclocal.m4	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1097 ----
+ # generated automatically by aclocal 1.9.3 -*- Autoconf -*-
+ 
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ #                                                        -*- Autoconf -*-
+ # Copyright (C) 2002, 2003  Free Software Foundation, Inc.
+ # Generated from amversion.in; do not edit by hand.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 
+ # AM_AUTOMAKE_VERSION(VERSION)
+ # ----------------------------
+ # Automake X.Y traces this macro to ensure aclocal.m4 has been
+ # generated from the m4 files accompanying Automake X.Y.
+ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+ 
+ # AM_SET_CURRENT_AUTOMAKE_VERSION
+ # -------------------------------
+ # Call AM_AUTOMAKE_VERSION so it can be traced.
+ # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ 	 [AM_AUTOMAKE_VERSION([1.9.3])])
+ 
+ # AM_AUX_DIR_EXPAND
+ 
+ # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+ # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+ # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+ #
+ # Of course, Automake must honor this variable whenever it calls a
+ # tool from the auxiliary directory.  The problem is that $srcdir (and
+ # therefore $ac_aux_dir as well) can be either absolute or relative,
+ # depending on how configure is run.  This is pretty annoying, since
+ # it makes $ac_aux_dir quite unusable in subdirectories: in the top
+ # source directory, any form will work fine, but in subdirectories a
+ # relative path needs to be adjusted first.
+ #
+ # $ac_aux_dir/missing
+ #    fails when called from a subdirectory if $ac_aux_dir is relative
+ # $top_srcdir/$ac_aux_dir/missing
+ #    fails if $ac_aux_dir is absolute,
+ #    fails when called from a subdirectory in a VPATH build with
+ #          a relative $ac_aux_dir
+ #
+ # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+ # are both prefixed by $srcdir.  In an in-source build this is usually
+ # harmless because $srcdir is `.', but things will broke when you
+ # start a VPATH build or use an absolute $srcdir.
+ #
+ # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+ # iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+ #   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+ # and then we would define $MISSING as
+ #   MISSING="\${SHELL} $am_aux_dir/missing"
+ # This will work as long as MISSING is not called from configure, because
+ # unfortunately $(top_srcdir) has no meaning in configure.
+ # However there are other variables, like CC, which are often used in
+ # configure, and could therefore not use this "fixed" $ac_aux_dir.
+ #
+ # Another solution, used here, is to always expand $ac_aux_dir to an
+ # absolute PATH.  The drawback is that using absolute paths prevent a
+ # configured tree to be moved without reconfiguration.
+ 
+ AC_DEFUN([AM_AUX_DIR_EXPAND],
+ [dnl Rely on autoconf to set up CDPATH properly.
+ AC_PREREQ([2.50])dnl
+ # expand $ac_aux_dir to an absolute path
+ am_aux_dir=`cd $ac_aux_dir && pwd`
+ ])
+ 
+ # AM_CONDITIONAL                                              -*- Autoconf -*-
+ 
+ # Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 6
+ 
+ # AM_CONDITIONAL(NAME, SHELL-CONDITION)
+ # -------------------------------------
+ # Define a conditional.
+ AC_DEFUN([AM_CONDITIONAL],
+ [AC_PREREQ(2.52)dnl
+  ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+ 	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+ AC_SUBST([$1_TRUE])
+ AC_SUBST([$1_FALSE])
+ if $2; then
+   $1_TRUE=
+   $1_FALSE='#'
+ else
+   $1_TRUE='#'
+   $1_FALSE=
+ fi
+ AC_CONFIG_COMMANDS_PRE(
+ [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+   AC_MSG_ERROR([[conditional "$1" was never defined.
+ Usually this means the macro was only invoked conditionally.]])
+ fi])])
+ 
+ # serial 7						-*- Autoconf -*-
+ 
+ # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ 
+ # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+ # written in clear, in which case automake, when reading aclocal.m4,
+ # will think it sees a *use*, and therefore will trigger all it's
+ # C support machinery.  Also note that it means that autoscan, seeing
+ # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+ 
+ 
+ 
+ # _AM_DEPENDENCIES(NAME)
+ # ----------------------
+ # See how the compiler implements dependency checking.
+ # NAME is "CC", "CXX", "GCJ", or "OBJC".
+ # We try a few techniques and use that to set a single cache variable.
+ #
+ # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+ # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+ # dependency, and given that the user is not expected to run this macro,
+ # just rely on AC_PROG_CC.
+ AC_DEFUN([_AM_DEPENDENCIES],
+ [AC_REQUIRE([AM_SET_DEPDIR])dnl
+ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+ AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+ AC_REQUIRE([AM_DEP_TRACK])dnl
+ 
+ ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+        [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+        [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+        [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
+ 
+ AC_CACHE_CHECK([dependency style of $depcc],
+                [am_cv_$1_dependencies_compiler_type],
+ [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+   # making a dummy file named `D' -- because `-MD' means `put the output
+   # in D'.
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+   # side effect of compilation, but ICC will put the dependencies in
+   # the current directory while Tru64 will put them in the object
+   # directory.
+   mkdir sub
+ 
+   am_cv_$1_dependencies_compiler_type=none
+   if test "$am_compiler_list" = ""; then
+      am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+   fi
+   for depmode in $am_compiler_list; do
+     # Setup a source with many dependencies, because some compilers
+     # like to wrap large dependency lists on column 80 (with \), and
+     # we should not choose a depcomp mode which is confused by this.
+     #
+     # We need to recreate these files for each test, as the compiler may
+     # overwrite some of them when testing with obscure command lines.
+     # This happens at least with the AIX C compiler.
+     : > sub/conftest.c
+     for i in 1 2 3 4 5 6; do
+       echo '#include "conftst'$i'.h"' >> sub/conftest.c
+       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+       # Solaris 8's {/usr,}/bin/sh.
+       touch sub/conftst$i.h
+     done
+     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+ 
+     case $depmode in
+     nosideeffect)
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+     none) break ;;
+     esac
+     # We check with `-c' and `-o' for the sake of the "dashmstdout"
+     # mode.  It turns out that the SunPro C++ compiler does not properly
+     # handle `-M -o', and we need to detect this.
+     if depmode=$depmode \
+        source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+        $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+          >/dev/null 2>conftest.err &&
+        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+       # icc doesn't choke on unknown options, it will just issue warnings
+       # or remarks (even with -Werror).  So we grep stderr for any message
+       # that says an option was ignored or not supported.
+       # When given -MP, icc 7.0 and 7.1 complain thusly:
+       #   icc: Command line warning: ignoring option '-M'; no argument required
+       # The diagnosis changed in icc 8.0:
+       #   icc: Command line remark: option '-MP' not supported
+       if (grep 'ignoring option' conftest.err ||
+           grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+         am_cv_$1_dependencies_compiler_type=$depmode
+         break
+       fi
+     fi
+   done
+ 
+   cd ..
+   rm -rf conftest.dir
+ else
+   am_cv_$1_dependencies_compiler_type=none
+ fi
+ ])
+ AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+ AM_CONDITIONAL([am__fastdep$1], [
+   test "x$enable_dependency_tracking" != xno \
+   && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+ ])
+ 
+ 
+ # AM_SET_DEPDIR
+ # -------------
+ # Choose a directory name for dependency files.
+ # This macro is AC_REQUIREd in _AM_DEPENDENCIES
+ AC_DEFUN([AM_SET_DEPDIR],
+ [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+ ])
+ 
+ 
+ # AM_DEP_TRACK
+ # ------------
+ AC_DEFUN([AM_DEP_TRACK],
+ [AC_ARG_ENABLE(dependency-tracking,
+ [  --disable-dependency-tracking  speeds up one-time build
+   --enable-dependency-tracking   do not reject slow dependency extractors])
+ if test "x$enable_dependency_tracking" != xno; then
+   am_depcomp="$ac_aux_dir/depcomp"
+   AMDEPBACKSLASH='\'
+ fi
+ AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+ AC_SUBST([AMDEPBACKSLASH])
+ ])
+ 
+ # Generate code to set up dependency tracking.   -*- Autoconf -*-
+ 
+ # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+ #   Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ #serial 2
+ 
+ # _AM_OUTPUT_DEPENDENCY_COMMANDS
+ # ------------------------------
+ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [for mf in $CONFIG_FILES; do
+   # Strip MF so we end up with the name of the file.
+   mf=`echo "$mf" | sed -e 's/:.*$//'`
+   # Check whether this is an Automake generated Makefile or not.
+   # We used to match only the files named `Makefile.in', but
+   # some people rename them; so instead we look at the file content.
+   # Grep'ing the first line is not enough: some people post-process
+   # each Makefile.in and add a new line on top of each file to say so.
+   # So let's grep whole file.
+   if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+     dirpart=`AS_DIRNAME("$mf")`
+   else
+     continue
+   fi
+   # Extract the definition of DEPDIR, am__include, and am__quote
+   # from the Makefile without running `make'.
+   DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+   test -z "$DEPDIR" && continue
+   am__include=`sed -n 's/^am__include = //p' < "$mf"`
+   test -z "am__include" && continue
+   am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+   # When using ansi2knr, U may be empty or an underscore; expand it
+   U=`sed -n 's/^U = //p' < "$mf"`
+   # Find all dependency output files, they are included files with
+   # $(DEPDIR) in their names.  We invoke sed twice because it is the
+   # simplest approach to changing $(DEPDIR) to its actual value in the
+   # expansion.
+   for file in `sed -n "
+     s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+     # Make sure the directory exists.
+     test -f "$dirpart/$file" && continue
+     fdir=`AS_DIRNAME(["$file"])`
+     AS_MKDIR_P([$dirpart/$fdir])
+     # echo "creating $dirpart/$file"
+     echo '# dummy' > "$dirpart/$file"
+   done
+ done
+ ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+ 
+ 
+ # AM_OUTPUT_DEPENDENCY_COMMANDS
+ # -----------------------------
+ # This macro should only be invoked once -- use via AC_REQUIRE.
+ #
+ # This code is only required when automatic dependency tracking
+ # is enabled.  FIXME.  This creates each `.P' file that we will
+ # need in order to bootstrap the dependency handling code.
+ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AC_CONFIG_COMMANDS([depfiles],
+      [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+      [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+ ])
+ 
+ # Do all the work for Automake.                            -*- Autoconf -*-
+ 
+ # This macro actually does too much some checks are only needed if
+ # your package does certain things.  But this isn't really a big deal.
+ 
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 11
+ 
+ # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+ # AM_INIT_AUTOMAKE([OPTIONS])
+ # -----------------------------------------------
+ # The call with PACKAGE and VERSION arguments is the old style
+ # call (pre autoconf-2.50), which is being phased out.  PACKAGE
+ # and VERSION should now be passed to AC_INIT and removed from
+ # the call to AM_INIT_AUTOMAKE.
+ # We support both call styles for the transition.  After
+ # the next Automake release, Autoconf can make the AC_INIT
+ # arguments mandatory, and then we can depend on a new Autoconf
+ # release and drop the old call support.
+ AC_DEFUN([AM_INIT_AUTOMAKE],
+ [AC_PREREQ([2.58])dnl
+ dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+ dnl the ones we care about.
+ m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+ AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ # test to see if srcdir already configured
+ if test "`cd $srcdir && pwd`" != "`pwd`" &&
+    test -f $srcdir/config.status; then
+   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+ 
+ # test whether we have cygpath
+ if test -z "$CYGPATH_W"; then
+   if (cygpath --version) >/dev/null 2>/dev/null; then
+     CYGPATH_W='cygpath -w'
+   else
+     CYGPATH_W=echo
+   fi
+ fi
+ AC_SUBST([CYGPATH_W])
+ 
+ # Define the identity of the package.
+ dnl Distinguish between old-style and new-style calls.
+ m4_ifval([$2],
+ [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+  AC_SUBST([PACKAGE], [$1])dnl
+  AC_SUBST([VERSION], [$2])],
+ [_AM_SET_OPTIONS([$1])dnl
+  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+ 
+ _AM_IF_OPTION([no-define],,
+ [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+  AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+ 
+ # Some tools Automake needs.
+ AC_REQUIRE([AM_SANITY_CHECK])dnl
+ AC_REQUIRE([AC_ARG_PROGRAM])dnl
+ AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+ AM_MISSING_PROG(AUTOCONF, autoconf)
+ AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+ AM_MISSING_PROG(AUTOHEADER, autoheader)
+ AM_MISSING_PROG(MAKEINFO, makeinfo)
+ AM_PROG_INSTALL_SH
+ AM_PROG_INSTALL_STRIP
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+ # We need awk for the "check" target.  The system "awk" is bad on
+ # some platforms.
+ AC_REQUIRE([AC_PROG_AWK])dnl
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+               [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ 	      		     [_AM_PROG_TAR([v7])])])
+ _AM_IF_OPTION([no-dependencies],,
+ [AC_PROVIDE_IFELSE([AC_PROG_CC],
+                   [_AM_DEPENDENCIES(CC)],
+                   [define([AC_PROG_CC],
+                           defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                   [_AM_DEPENDENCIES(CXX)],
+                   [define([AC_PROG_CXX],
+                           defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+ ])
+ ])
+ 
+ 
+ # When config.status generates a header, we must update the stamp-h file.
+ # This file resides in the same directory as the config header
+ # that is generated.  The stamp files are numbered to have different names.
+ 
+ # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+ # loop where config.status creates the headers, so we can generate
+ # our stamp files there.
+ AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+ [# Compute $1's index in $config_headers.
+ _am_stamp_count=1
+ for _am_header in $config_headers :; do
+   case $_am_header in
+     $1 | $1:* )
+       break ;;
+     * )
+       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+   esac
+ done
+ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+ 
+ # AM_PROG_INSTALL_SH
+ # ------------------
+ # Define $install_sh.
+ 
+ # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ AC_DEFUN([AM_PROG_INSTALL_SH],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ install_sh=${install_sh-"$am_aux_dir/install-sh"}
+ AC_SUBST(install_sh)])
+ 
+ #                                                          -*- Autoconf -*-
+ # Copyright (C) 2003  Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 1
+ 
+ # Check whether the underlying file-system supports filenames
+ # with a leading dot.  For instance MS-DOS doesn't.
+ AC_DEFUN([AM_SET_LEADING_DOT],
+ [rm -rf .tst 2>/dev/null
+ mkdir .tst 2>/dev/null
+ if test -d .tst; then
+   am__leading_dot=.
+ else
+   am__leading_dot=_
+ fi
+ rmdir .tst 2>/dev/null
+ AC_SUBST([am__leading_dot])])
+ 
+ # Add --enable-maintainer-mode option to configure.
+ # From Jim Meyering
+ 
+ # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 3
+ 
+ AC_DEFUN([AM_MAINTAINER_MODE],
+ [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+   dnl maintainer-mode is disabled by default
+   AC_ARG_ENABLE(maintainer-mode,
+ [  --enable-maintainer-mode  enable make rules and dependencies not useful
+ 			  (and sometimes confusing) to the casual installer],
+       USE_MAINTAINER_MODE=$enableval,
+       USE_MAINTAINER_MODE=no)
+   AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+   AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+   MAINT=$MAINTAINER_MODE_TRUE
+   AC_SUBST(MAINT)dnl
+ ]
+ )
+ 
+ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+ 
+ # Check to see how 'make' treats includes.	-*- Autoconf -*-
+ 
+ # Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 2
+ 
+ # AM_MAKE_INCLUDE()
+ # -----------------
+ # Check to see how make treats includes.
+ AC_DEFUN([AM_MAKE_INCLUDE],
+ [am_make=${MAKE-make}
+ cat > confinc << 'END'
+ am__doit:
+ 	@echo done
+ .PHONY: am__doit
+ END
+ # If we don't find an include directive, just comment out the code.
+ AC_MSG_CHECKING([for style of include used by $am_make])
+ am__include="#"
+ am__quote=
+ _am_result=none
+ # First try GNU make style include.
+ echo "include confinc" > confmf
+ # We grep out `Entering directory' and `Leaving directory'
+ # messages which can occur if `w' ends up in MAKEFLAGS.
+ # In particular we don't look at `^make:' because GNU make might
+ # be invoked under some other name (usually "gmake"), in which
+ # case it prints its new name instead of `make'.
+ if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+    am__include=include
+    am__quote=
+    _am_result=GNU
+ fi
+ # Now try BSD make style include.
+ if test "$am__include" = "#"; then
+    echo '.include "confinc"' > confmf
+    if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+       am__include=.include
+       am__quote="\""
+       _am_result=BSD
+    fi
+ fi
+ AC_SUBST([am__include])
+ AC_SUBST([am__quote])
+ AC_MSG_RESULT([$_am_result])
+ rm -f confinc confmf
+ ])
+ 
+ #  -*- Autoconf -*-
+ 
+ 
+ # Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 3
+ 
+ # AM_MISSING_PROG(NAME, PROGRAM)
+ # ------------------------------
+ AC_DEFUN([AM_MISSING_PROG],
+ [AC_REQUIRE([AM_MISSING_HAS_RUN])
+ $1=${$1-"${am_missing_run}$2"}
+ AC_SUBST($1)])
+ 
+ 
+ # AM_MISSING_HAS_RUN
+ # ------------------
+ # Define MISSING if not defined so far and test if it supports --run.
+ # If it does, set am_missing_run to use it, otherwise, to nothing.
+ AC_DEFUN([AM_MISSING_HAS_RUN],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+ # Use eval to expand $SHELL
+ if eval "$MISSING --run true"; then
+   am_missing_run="$MISSING --run "
+ else
+   am_missing_run=
+   AC_MSG_WARN([`missing' script is too old or missing])
+ fi
+ ])
+ 
+ # AM_PROG_MKDIR_P
+ # ---------------
+ # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+ 
+ # Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+ # created by `make install' are always world readable, even if the
+ # installer happens to have an overly restrictive umask (e.g. 077).
+ # This was a mistake.  There are at least two reasons why we must not
+ # use `-m 0755':
+ #   - it causes special bits like SGID to be ignored,
+ #   - it may be too restrictive (some setups expect 775 directories).
+ #
+ # Do not use -m 0755 and let people choose whatever they expect by
+ # setting umask.
+ #
+ # We cannot accept any implementation of `mkdir' that recognizes `-p'.
+ # Some implementations (such as Solaris 8's) are not thread-safe: if a
+ # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+ # concurrently, both version can detect that a/ is missing, but only
+ # one can create it and the other will error out.  Consequently we
+ # restrict ourselves to GNU make (using the --version option ensures
+ # this.)
+ AC_DEFUN([AM_PROG_MKDIR_P],
+ [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+   # We used to keeping the `.' as first argument, in order to
+   # allow $(mkdir_p) to be used without argument.  As in
+   #   $(mkdir_p) $(somedir)
+   # where $(somedir) is conditionally defined.  However this is wrong
+   # for two reasons:
+   #  1. if the package is installed by a user who cannot write `.'
+   #     make install will fail,
+   #  2. the above comment should most certainly read
+   #     $(mkdir_p) $(DESTDIR)$(somedir)
+   #     so it does not work when $(somedir) is undefined and
+   #     $(DESTDIR) is not.
+   #  To support the latter case, we have to write
+   #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+   #  so the `.' trick is pointless.
+   mkdir_p='mkdir -p --'
+ else
+   # On NextStep and OpenStep, the `mkdir' command does not
+   # recognize any option.  It will interpret all options as
+   # directories to create, and then abort because `.' already
+   # exists.
+   for d in ./-p ./--version;
+   do
+     test -d $d && rmdir $d
+   done
+   # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+   if test -f "$ac_aux_dir/mkinstalldirs"; then
+     mkdir_p='$(mkinstalldirs)'
+   else
+     mkdir_p='$(install_sh) -d'
+   fi
+ fi
+ AC_SUBST([mkdir_p])])
+ 
+ # Helper functions for option handling.                    -*- Autoconf -*-
+ 
+ # Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 2
+ 
+ # _AM_MANGLE_OPTION(NAME)
+ # -----------------------
+ AC_DEFUN([_AM_MANGLE_OPTION],
+ [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+ 
+ # _AM_SET_OPTION(NAME)
+ # ------------------------------
+ # Set option NAME.  Presently that only means defining a flag for this option.
+ AC_DEFUN([_AM_SET_OPTION],
+ [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+ 
+ # _AM_SET_OPTIONS(OPTIONS)
+ # ----------------------------------
+ # OPTIONS is a space-separated list of Automake options.
+ AC_DEFUN([_AM_SET_OPTIONS],
+ [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+ 
+ # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+ # -------------------------------------------
+ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+ AC_DEFUN([_AM_IF_OPTION],
+ [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+ 
+ # Copyright (C) 2001, 2003 Free Software Foundation, Inc.     -*- Autoconf -*-
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # AM_RUN_LOG(COMMAND)
+ # -------------------
+ # Run COMMAND, save the exit status in ac_status, and log it.
+ # (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+ AC_DEFUN([AM_RUN_LOG],
+ [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+    ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+    ac_status=$?
+    echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+    (exit $ac_status); }])
+ 
+ #
+ # Check to make sure that the build environment is sane.
+ #
+ 
+ # Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 3
+ 
+ # AM_SANITY_CHECK
+ # ---------------
+ AC_DEFUN([AM_SANITY_CHECK],
+ [AC_MSG_CHECKING([whether build environment is sane])
+ # Just in case
+ sleep 1
+ echo timestamp > conftest.file
+ # Do `set' in a subshell so we don't clobber the current shell's
+ # arguments.  Must try -L first in case configure is actually a
+ # symlink; some systems play weird games with the mod time of symlinks
+ # (eg FreeBSD returns the mod time of the symlink's containing
+ # directory).
+ if (
+    set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+    if test "$[*]" = "X"; then
+       # -L didn't work.
+       set X `ls -t $srcdir/configure conftest.file`
+    fi
+    rm -f conftest.file
+    if test "$[*]" != "X $srcdir/configure conftest.file" \
+       && test "$[*]" != "X conftest.file $srcdir/configure"; then
+ 
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+ alias in your environment])
+    fi
+ 
+    test "$[2]" = conftest.file
+    )
+ then
+    # Ok.
+    :
+ else
+    AC_MSG_ERROR([newly created file is older than distributed files!
+ Check your system clock])
+ fi
+ AC_MSG_RESULT(yes)])
+ 
+ # AM_PROG_INSTALL_STRIP
+ 
+ # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # One issue with vendor `install' (even GNU) is that you can't
+ # specify the program used to strip binaries.  This is especially
+ # annoying in cross-compiling environments, where the build's strip
+ # is unlikely to handle the host's binaries.
+ # Fortunately install-sh will honor a STRIPPROG variable, so we
+ # always use install-sh in `make install-strip', and initialize
+ # STRIPPROG with the value of the STRIP variable (set by the user).
+ AC_DEFUN([AM_PROG_INSTALL_STRIP],
+ [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+ # Installed binaries are usually stripped using `strip' when the user
+ # run `make install-strip'.  However `strip' might not be the right
+ # tool to use in cross-compilation environments, therefore Automake
+ # will honor the `STRIP' environment variable to overrule this program.
+ dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+ if test "$cross_compiling" != no; then
+   AC_CHECK_TOOL([STRIP], [strip], :)
+ fi
+ INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+ AC_SUBST([INSTALL_STRIP_PROGRAM])])
+ 
+ # Check how to create a tarball.                            -*- Autoconf -*-
+ 
+ # Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 1
+ 
+ 
+ # _AM_PROG_TAR(FORMAT)
+ # --------------------
+ # Check how to create a tarball in format FORMAT.
+ # FORMAT should be one of `v7', `ustar', or `pax'.
+ #
+ # Substitute a variable $(am__tar) that is a command
+ # writing to stdout a FORMAT-tarball containing the directory
+ # $tardir.
+ #     tardir=directory && $(am__tar) > result.tar
+ #
+ # Substitute a variable $(am__untar) that extract such
+ # a tarball read from stdin.
+ #     $(am__untar) < result.tar
+ AC_DEFUN([_AM_PROG_TAR],
+ [# Always define AMTAR for backward compatibility.
+ AM_MISSING_PROG([AMTAR], [tar])
+ m4_if([$1], [v7],
+      [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+      [m4_case([$1], [ustar],, [pax],,
+               [m4_fatal([Unknown tar format])])
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+ # Loop over all known methods to create a tar archive until one works.
+ _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+ # Do not fold the above two line into one, because Tru64 sh and
+ # Solaris sh will not grok spaces in the rhs of `-'.
+ for _am_tool in $_am_tools
+ do
+   case $_am_tool in
+   gnutar)
+     for _am_tar in tar gnutar gtar;
+     do
+       AM_RUN_LOG([$_am_tar --version]) && break
+     done
+     am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+     am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+     am__untar="$_am_tar -xf -"
+     ;;
+   plaintar)
+     # Must skip GNU tar: if it does not support --format= it doesn't create
+     # ustar tarball either.
+     (tar --version) >/dev/null 2>&1 && continue
+     am__tar='tar chf - "$$tardir"'
+     am__tar_='tar chf - "$tardir"'
+     am__untar='tar xf -'
+     ;;
+   pax)
+     am__tar='pax -L -x $1 -w "$$tardir"'
+     am__tar_='pax -L -x $1 -w "$tardir"'
+     am__untar='pax -r'
+     ;;
+   cpio)
+     am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+     am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+     am__untar='cpio -i -H $1 -d'
+     ;;
+   none)
+     am__tar=false
+     am__tar_=false
+     am__untar=false
+     ;;
+   esac
+ 
+   # If the value was cached, stop now.  We just wanted to have am__tar
+   # and am__untar set.
+   test -n "${am_cv_prog_tar_$1}" && break
+ 
+   # tar/untar a dummy directory, and stop if the command works
+   rm -rf conftest.dir
+   mkdir conftest.dir
+   echo GrepMe > conftest.dir/file
+   AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+   rm -rf conftest.dir
+   if test -s conftest.tar; then
+     AM_RUN_LOG([$am__untar <conftest.tar])
+     grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+   fi
+ done
+ rm -rf conftest.dir
+ 
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+ AC_SUBST([am__tar])
+ AC_SUBST([am__untar])
+ ]) # _AM_PROG_TAR
+ 
+ m4_include([../../libtool.m4])
+ m4_include([m4/acattribute.m4])
+ m4_include([m4/accross.m4])
+ m4_include([m4/acinclude.m4])
+ m4_include([m4/iconv.m4])
+ m4_include([m4/lib-ld.m4])
+ m4_include([m4/lib-link.m4])
+ m4_include([m4/lib-prefix.m4])
+ m4_include([m4/pkg.m4])
diff -Nrcpad gcc-4.0.2/libjava/classpath/autogen.sh gcc-4.1.0/libjava/classpath/autogen.sh
*** gcc-4.0.2/libjava/classpath/autogen.sh	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/autogen.sh	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,129 ----
+ #!/bin/sh
+ # Run this to generate all the initial makefiles, etc.
+ 
+ srcdir=`dirname $0`
+ test -z "$srcdir" && srcdir=.
+ 
+ ORIGDIR=`pwd`
+ cd $srcdir
+ PROJECT=classpath
+ TEST_TYPE=-f
+ FILE=java/lang/Object.java
+ 
+ DIE=0
+ 
+ LIBTOOLIZE=libtoolize
+ 
+ have_libtool=false
+ if ${LIBTOOLIZE} --version < /dev/null > /dev/null 2>&1 ; then
+ 	libtool_version=`${LIBTOOLIZE} --version | sed 's/^.*[^0-9.]\([0-9]\{1,\}\.[0-9.]\{1,\}\).*/\1/'`
+ 	case $libtool_version in
+ 	    1.5*)
+ 		have_libtool=true
+ 		;;
+ 	esac
+ fi
+ if $have_libtool ; then : ; else
+ 	echo
+ 	echo "You must have libtool 1.5 installed to compile $PROJECT."
+ 	echo "Install the appropriate package for your distribution,"
+ 	echo "or get the source tarball at http://ftp.gnu.org/gnu/libtool/"
+ 	echo "For Darwin you need the latest stable (1.5.18) to support"
+ 	echo "Frameworks linking. Also, you have to point ACLOCAL_FLAGS"
+ 	echo "to this libtool/share/aclocal."
+ 	DIE=1
+ fi
+ 
+ have_autoconf=false
+ if autoconf --version < /dev/null > /dev/null 2>&1 ; then
+ 	autoconf_version=`autoconf --version | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'`
+ 	case $autoconf_version in
+ 	    2.59*)
+ 		have_autoconf=true
+ 		;;
+ 	esac
+ fi
+ if $have_autoconf ; then : ; else
+ 	echo
+ 	echo "You must have autoconf 2.59 installed to compile $PROJECT."
+ 	echo "Install the appropriate package for your distribution,"
+ 	echo "or get the source tarball at http://ftp.gnu.org/gnu/autoconf/"
+ 	DIE=1
+ fi
+ 
+ have_automake=false
+ # We know each 1.9.x version works
+ if automake-1.9 --version < /dev/null > /dev/null 2>&1 ; then
+ 	AUTOMAKE=automake-1.9
+ 	ACLOCAL=aclocal-1.9
+ 	have_automake=true
+ elif automake --version < /dev/null > /dev/null 2>&1 ; then
+ 	AUTOMAKE=automake
+ 	ACLOCAL=aclocal
+ 	automake_version=`automake --version | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'`
+ 	case $automake_version in
+ 	    1.9*)
+ 		have_automake=true
+ 		;;
+ 	esac
+ fi
+ if $have_automake ; then : ; else
+ 	echo
+ 	echo "You must have automake 1.9 installed to compile $PROJECT."
+ 	echo "Install the appropriate package for your distribution,"
+ 	echo "or get the source tarball at http://ftp.gnu.org/gnu/automake/"
+ 	DIE=1
+ fi
+ 
+ if test "$DIE" -eq 1; then
+ 	exit 1
+ fi
+ 
+ test $TEST_TYPE $FILE || {
+ 	echo "You must run this script in the top-level $PROJECT directory"
+ 	exit 1
+ }
+ 
+ if test "x$AUTOGEN_SUBDIR_MODE" = "xyes"; then
+         if test -z "$*"; then
+                 echo "I am going to run ./configure with no arguments - if you wish "
+                 echo "to pass any to it, please specify them on the $0 command line."
+         fi
+ fi
+ 
+ if test -z "$ACLOCAL_FLAGS"; then
+ 
+ 	acdir=`$ACLOCAL --print-ac-dir`
+         m4list="glib-2.0.m4 glib-gettext.m4"
+ 
+ 	for file in $m4list
+ 	do
+ 		if [ ! -f "$acdir/$file" ]; then
+ 			echo "WARNING: aclocal's directory is $acdir, but..."
+ 			echo "         no file $acdir/$file"
+ 			echo "         You may see fatal macro warnings below."
+ 			echo "         If these files are installed in /some/dir, set the ACLOCAL_FLAGS "
+ 			echo "         environment variable to \"-I /some/dir\", or install"
+ 			echo "         $acdir/$file."
+ 			echo ""
+ 		fi
+ 	done
+ fi
+ 
+ # Use the "-I m4 flag in order to include pkg.m4 and other .m4 files.
+ $ACLOCAL -I m4 $ACLOCAL_FLAGS || exit $?
+ 
+ ${LIBTOOLIZE} --force || exit $?
+ 
+ autoheader || exit $?
+ 
+ $AUTOMAKE --add-missing || exit $?
+ autoconf || exit $?
+ cd $ORIGDIR || exit $?
+ 
+ if test "x$AUTOGEN_SUBDIR_MODE" = "xyes"; then
+         $srcdir/configure --enable-maintainer-mode $AUTOGEN_CONFIGURE_ARGS "$@" || exit $?
+ 
+         echo 
+         echo "Now type 'make' to compile $PROJECT."
+ fi
diff -Nrcpad gcc-4.0.2/libjava/classpath/compat/Makefile.am gcc-4.1.0/libjava/classpath/compat/Makefile.am
*** gcc-4.0.2/libjava/classpath/compat/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/compat/Makefile.am	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,4 ----
+ ## Input file for automake to generate the Makefile.in used by configure
+ 
+ SUBDIRS = java.net
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/compat/java.net/GetSocketOptionInfo.java gcc-4.1.0/libjava/classpath/compat/java.net/GetSocketOptionInfo.java
*** gcc-4.0.2/libjava/classpath/compat/java.net/GetSocketOptionInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/compat/java.net/GetSocketOptionInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,39 ----
+ // Class to identify socket option constants.
+ 
+ import java.io.*;
+ import java.net.*;
+ 
+ public class GetSocketOptionInfo extends Socket implements SocketImplFactory
+ {
+ 
+ public SocketImpl 
+ createSocketImpl()
+ {
+   return(new PlainSocketImpl());
+ }
+ 
+ public static void
+ main(String[] argv) throws IOException
+ {
+   Socket.setSocketImplFactory(new GetSocketOptionInfo());
+ 
+   Socket s = new Socket();
+ 
+   System.err.println("Setting TCP_NODELAY on");
+   s.setTcpNoDelay(true);
+   System.err.println("Setting TCP_NODELAY off");
+   s.setTcpNoDelay(false);
+ 
+   System.err.println("Setting SO_LINGER on");
+   s.setSoLinger(true, 10);
+   System.err.println("Setting SO_LINGER off");
+   s.setSoLinger(false, 1);
+ 
+   System.err.println("Setting SO_TIMEOUT to 15");
+   s.setSoTimeout(15);
+   System.err.println("Setting SO_TIMEOUT to 0");
+   s.setSoTimeout(0);
+ }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/compat/java.net/Makefile.am gcc-4.1.0/libjava/classpath/compat/java.net/Makefile.am
*** gcc-4.0.2/libjava/classpath/compat/java.net/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/compat/java.net/Makefile.am	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,14 ----
+ ## Input file for automake to generate the Makefile.in used by configure
+ 
+ # Hmm.. This doesn't seem to work
+ #noinst_JAVA = GetSocketOptionInfo.java PlainSocketImpl.java
+ 
+ JAVAROOT = .
+ 
+ compatdir = $(datadir)/compat/java.net
+ 
+ compat_JAVA = GetSocketOptionInfo.java PlainSocketImpl.java
+ 
+ 
+ EXTRA_DIST = README
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/compat/java.net/PlainSocketImpl.java gcc-4.1.0/libjava/classpath/compat/java.net/PlainSocketImpl.java
*** gcc-4.0.2/libjava/classpath/compat/java.net/PlainSocketImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/compat/java.net/PlainSocketImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,284 ----
+ /* PlainSocketImpl.java -- Default socket implementation
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ import java.net.*;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.io.IOException;
+ 
+ /**
+   * Unless the application installs its own SocketImplFactory, this is the
+   * default socket implemetation that will be used.  It simply uses a
+   * combination of Java and native routines to implement standard BSD
+   * style sockets of family AF_INET and types SOCK_STREAM and SOCK_DGRAM
+   *
+   * @version 0.1
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ class PlainSocketImpl extends SocketImpl
+ {
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Static Variables
+  */
+ 
+ /*
+ // Static initializer to load native library
+ static
+ {
+   System.loadLibrary("javanet");
+ }
+ */
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * This is the native file descriptor for this socket
+   */
+ protected int native_fd = -1;
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Default do nothing constructor
+   */
+ public
+ PlainSocketImpl()
+ {
+   ;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Accepts a new connection on this socket and returns in in the 
+   * passed in SocketImpl.
+   *
+   * @param impl The SocketImpl object to accept this connection.
+   */
+ protected native void
+ accept(SocketImpl impl) throws IOException;
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the number of bytes that the caller can read from this socket
+   * without blocking. //*****Figure out if we can do something here
+   *
+   * @return The number of readable bytes before blocking
+   *
+   * @exception IOException If an error occurs
+   */
+ protected int
+ available() throws IOException
+ {
+   return(0);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Binds to the specified port on the specified addr.  Note that this addr
+   * must represent a local IP address.  **** How bind to INADDR_ANY? ****
+   *
+   * @param addr The address to bind to
+   * @param port The port number to bind to
+   *
+   * @exception IOException If an error occurs
+   */
+ protected native void
+ bind(InetAddress addr, int port) throws IOException;
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Closes the socket.  This will cause any InputStream or OutputStream
+   * objects for this Socket to be closed as well.
+   * <p>
+   * Note that if the SO_LINGER option is set on this socket, then the
+   * operation could block.
+   *
+   * @exception IOException If an error occurs
+   */
+ protected native void
+ close() throws IOException;
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Connects to the remote address and port specified as arguments.
+   *
+   * @param addr The remote address to connect to
+   * @param port The remote port to connect to
+   *
+   * @exception IOException If an error occurs
+   */
+ protected void 
+ connect(InetAddress addr, int port) throws IOException
+ {
+   return;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Connects to the remote hostname and port specified as arguments.
+   *
+   * @param hostname The remote hostname to connect to
+   * @param port The remote port to connect to
+   *
+   * @exception IOException If an error occurs
+   */
+ protected void 
+ connect(String hostname, int port) throws IOException
+ {
+   InetAddress addr = InetAddress.getByName(hostname);
+   connect(addr, port);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Creates a new socket that is not bound to any local address/port and
+   * is not connected to any remote address/port.  This will be created as
+   * a stream socket if the stream parameter is true, or a datagram socket
+   * if the stream parameter is false.
+   *
+   * @param stream true for a stream socket, false for a datagram socket
+   */
+ protected native void 
+ create(boolean stream) throws IOException;
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Starts listening for connections on a socket. The queuelen parameter
+   * is how many pending connections will queue up waiting to be serviced
+   * before being accept'ed.  If the queue of pending requests exceeds this
+   * number, additional connections will be refused.
+   *
+   * @param queuelen The length of the pending connection queue
+   * 
+   * @exception IOException If an error occurs
+   */
+ protected native void
+ listen(int queuelen) throws IOException;
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the specified option on a socket to the passed in object.  For
+   * options that take an integer argument, the passed in object is an
+   * Integer.  The option_id parameter is one of the defined constants in
+   * this interface.
+   *
+   * @param option_id The identifier of the option
+   * @param val The value to set the option to
+   *
+   * @exception SocketException If an error occurs
+   */
+ public void
+ setOption(int option_id, Object val) throws SocketException
+ {
+ //*** Do non-native for now
+   System.err.println("Option Id=" + option_id);
+   System.err.println("Object is: " + val.getClass().getName());
+   System.err.println("Object value is: " + val);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the current setting of the specified option.  The Object returned
+   * will be an Integer for options that have integer values.  The option_id
+   * is one of the defined constants in this interface.
+   *
+   * @param option_id The option identifier
+   *
+   * @return The current value of the option
+   *
+   * @exception SocketException If an error occurs
+   */
+ public Object
+ getOption(int option_id) throws SocketException
+ {
+ //**** Do non-native for now
+   System.err.println("Option Id=" + option_id);
+   return(null);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns an InputStream object for reading from this socket.  This will
+   * be an instance of SocketInputStream.
+   *
+   * @return An InputStream
+   *
+   * @exception IOException If an error occurs
+   */
+ protected InputStream
+ getInputStream() throws IOException
+ {
+   return(null);
+ }
+   
+ /*************************************************************************/
+ 
+ /**
+   * Returns an OutputStream object for writing to this socket.  This will
+   * be an instance of SocketOutputStream.
+   * 
+   * @return An OutputStream
+   *
+   * @exception IOException If an error occurs
+   */
+ protected OutputStream
+ getOutputStream() throws IOException
+ {
+   return(null);
+ }
+ 
+ } // class PlainSocketImpl
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/compat/java.net/README gcc-4.1.0/libjava/classpath/compat/java.net/README
*** gcc-4.0.2/libjava/classpath/compat/java.net/README	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/compat/java.net/README	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,27 ----
+ This directory contains various "experiment" programs used to determine
+ the behavior of the java.net class where such behavior is not sufficiently
+ documented by Sun in order to write an implementation from docs alone.
+ 
+ Some key findings:
+ 
+ The setOption/getOption methods are discussed in the "Networking Enhancements"
+ document for Java 1.1 but are not in the javadocs.  However, the SocketImpl
+ class is shown implementing a SocketOptions interface that is not documented.
+ We assume this is a non-public interface which contains abstract declarations
+ of the get/setOption methods as well as contants for the option_id's.
+ 
+ TCP_NODELAY:
+   The option id of this option is 1.  The Object passed to setOption is
+   a Boolean indicating whether this option should be on (true) or off (false).
+ 
+ SO_LINGER:
+   The option id of this option is 128.  When SO_LINGER is to be disabled,
+   the Object passed to setOption is Boolean with a value of false.  When
+   SO_LINGER is to be enabled, the Object passed to setOption is an Integer
+   set to the linger value.
+ 
+ SO_TIMEOUT:
+   The option id of this option is 4102.  The Object passed to setOption is
+   an Integer that is the new timeout value (0 to disable).
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/config.guess gcc-4.1.0/libjava/classpath/config.guess
*** gcc-4.0.2/libjava/classpath/config.guess	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/config.guess	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1463 ----
+ #! /bin/sh
+ # Attempt to guess a canonical system name.
+ #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ #   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 
+ timestamp='2005-07-08'
+ 
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2 of the License, or
+ # (at your option) any later version.
+ #
+ # This program 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
+ # General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+ # 02110-1301, USA.
+ #
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+ 
+ 
+ # Originally written by Per Bothner <per@bothner.com>.
+ # Please send patches to <config-patches@gnu.org>.  Submit a context
+ # diff and a properly formatted ChangeLog entry.
+ #
+ # This script attempts to guess a canonical system name similar to
+ # config.sub.  If it succeeds, it prints the system name on stdout, and
+ # exits with 0.  Otherwise, it exits with 1.
+ #
+ # The plan is that this can be called by configure scripts if you
+ # don't specify an explicit build system type.
+ 
+ me=`echo "$0" | sed -e 's,.*/,,'`
+ 
+ usage="\
+ Usage: $0 [OPTION]
+ 
+ Output the configuration name of the system \`$me' is run on.
+ 
+ Operation modes:
+   -h, --help         print this help, then exit
+   -t, --time-stamp   print date of last modification, then exit
+   -v, --version      print version number, then exit
+ 
+ Report bugs and patches to <config-patches@gnu.org>."
+ 
+ version="\
+ GNU config.guess ($timestamp)
+ 
+ Originally written by Per Bothner.
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
+ 
+ This is free software; see the source for copying conditions.  There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ 
+ help="
+ Try \`$me --help' for more information."
+ 
+ # Parse command line
+ while test $# -gt 0 ; do
+   case $1 in
+     --time-stamp | --time* | -t )
+        echo "$timestamp" ; exit ;;
+     --version | -v )
+        echo "$version" ; exit ;;
+     --help | --h* | -h )
+        echo "$usage"; exit ;;
+     -- )     # Stop option processing
+        shift; break ;;
+     - )	# Use stdin as input.
+        break ;;
+     -* )
+        echo "$me: invalid option $1$help" >&2
+        exit 1 ;;
+     * )
+        break ;;
+   esac
+ done
+ 
+ if test $# != 0; then
+   echo "$me: too many arguments$help" >&2
+   exit 1
+ fi
+ 
+ trap 'exit 1' 1 2 15
+ 
+ # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+ # compiler to aid in system detection is discouraged as it requires
+ # temporary files to be created and, as you can see below, it is a
+ # headache to deal with in a portable fashion.
+ 
+ # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+ # use `HOST_CC' if defined, but it is deprecated.
+ 
+ # Portable tmp directory creation inspired by the Autoconf team.
+ 
+ set_cc_for_build='
+ trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+ trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+ : ${TMPDIR=/tmp} ;
+  { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+  { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+  { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+  { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+ dummy=$tmp/dummy ;
+ tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+ case $CC_FOR_BUILD,$HOST_CC,$CC in
+  ,,)    echo "int x;" > $dummy.c ;
+ 	for c in cc gcc c89 c99 ; do
+ 	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ 	     CC_FOR_BUILD="$c"; break ;
+ 	  fi ;
+ 	done ;
+ 	if test x"$CC_FOR_BUILD" = x ; then
+ 	  CC_FOR_BUILD=no_compiler_found ;
+ 	fi
+ 	;;
+  ,,*)   CC_FOR_BUILD=$CC ;;
+  ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+ esac ; set_cc_for_build= ;'
+ 
+ # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+ # (ghazi@noc.rutgers.edu 1994-08-24)
+ if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ 	PATH=$PATH:/.attbin ; export PATH
+ fi
+ 
+ UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+ UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+ 
+ # Note: order is significant - the case branches are not exclusive.
+ 
+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+     *:NetBSD:*:*)
+ 	# NetBSD (nbsd) targets should (where applicable) match one or
+ 	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+ 	# switched to ELF, *-*-netbsd* would select the old
+ 	# object file format.  This provides both forward
+ 	# compatibility and a consistent mechanism for selecting the
+ 	# object file format.
+ 	#
+ 	# Note: NetBSD doesn't particularly care about the vendor
+ 	# portion of the name.  We always set it to "unknown".
+ 	sysctl="sysctl -n hw.machine_arch"
+ 	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ 	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ 	case "${UNAME_MACHINE_ARCH}" in
+ 	    armeb) machine=armeb-unknown ;;
+ 	    arm*) machine=arm-unknown ;;
+ 	    sh3el) machine=shl-unknown ;;
+ 	    sh3eb) machine=sh-unknown ;;
+ 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ 	esac
+ 	# The Operating System including object format, if it has switched
+ 	# to ELF recently, or will in the future.
+ 	case "${UNAME_MACHINE_ARCH}" in
+ 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ 		eval $set_cc_for_build
+ 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ 			| grep __ELF__ >/dev/null
+ 		then
+ 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ 		    # Return netbsd for either.  FIX?
+ 		    os=netbsd
+ 		else
+ 		    os=netbsdelf
+ 		fi
+ 		;;
+ 	    *)
+ 	        os=netbsd
+ 		;;
+ 	esac
+ 	# The OS release
+ 	# Debian GNU/NetBSD machines have a different userland, and
+ 	# thus, need a distinct triplet. However, they do not need
+ 	# kernel version information, so it can be replaced with a
+ 	# suitable tag, in the style of linux-gnu.
+ 	case "${UNAME_VERSION}" in
+ 	    Debian*)
+ 		release='-gnu'
+ 		;;
+ 	    *)
+ 		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ 		;;
+ 	esac
+ 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ 	# contains redundant information, the shorter form:
+ 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ 	echo "${machine}-${os}${release}"
+ 	exit ;;
+     *:OpenBSD:*:*)
+ 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ 	exit ;;
+     *:ekkoBSD:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ 	exit ;;
+     macppc:MirBSD:*:*)
+ 	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+ 	exit ;;
+     *:MirBSD:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ 	exit ;;
+     alpha:OSF1:*:*)
+ 	case $UNAME_RELEASE in
+ 	*4.0)
+ 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ 		;;
+ 	*5.*)
+ 	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ 		;;
+ 	esac
+ 	# According to Compaq, /usr/sbin/psrinfo has been available on
+ 	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+ 	# covers most systems running today.  This code pipes the CPU
+ 	# types through head -n 1, so we only detect the type of CPU 0.
+ 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ 	case "$ALPHA_CPU_TYPE" in
+ 	    "EV4 (21064)")
+ 		UNAME_MACHINE="alpha" ;;
+ 	    "EV4.5 (21064)")
+ 		UNAME_MACHINE="alpha" ;;
+ 	    "LCA4 (21066/21068)")
+ 		UNAME_MACHINE="alpha" ;;
+ 	    "EV5 (21164)")
+ 		UNAME_MACHINE="alphaev5" ;;
+ 	    "EV5.6 (21164A)")
+ 		UNAME_MACHINE="alphaev56" ;;
+ 	    "EV5.6 (21164PC)")
+ 		UNAME_MACHINE="alphapca56" ;;
+ 	    "EV5.7 (21164PC)")
+ 		UNAME_MACHINE="alphapca57" ;;
+ 	    "EV6 (21264)")
+ 		UNAME_MACHINE="alphaev6" ;;
+ 	    "EV6.7 (21264A)")
+ 		UNAME_MACHINE="alphaev67" ;;
+ 	    "EV6.8CB (21264C)")
+ 		UNAME_MACHINE="alphaev68" ;;
+ 	    "EV6.8AL (21264B)")
+ 		UNAME_MACHINE="alphaev68" ;;
+ 	    "EV6.8CX (21264D)")
+ 		UNAME_MACHINE="alphaev68" ;;
+ 	    "EV6.9A (21264/EV69A)")
+ 		UNAME_MACHINE="alphaev69" ;;
+ 	    "EV7 (21364)")
+ 		UNAME_MACHINE="alphaev7" ;;
+ 	    "EV7.9 (21364A)")
+ 		UNAME_MACHINE="alphaev79" ;;
+ 	esac
+ 	# A Pn.n version is a patched version.
+ 	# A Vn.n version is a released version.
+ 	# A Tn.n version is a released field test version.
+ 	# A Xn.n version is an unreleased experimental baselevel.
+ 	# 1.2 uses "1.2" for uname -r.
+ 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ 	exit ;;
+     Alpha\ *:Windows_NT*:*)
+ 	# How do we know it's Interix rather than the generic POSIX subsystem?
+ 	# Should we change UNAME_MACHINE based on the output of uname instead
+ 	# of the specific Alpha model?
+ 	echo alpha-pc-interix
+ 	exit ;;
+     21064:Windows_NT:50:3)
+ 	echo alpha-dec-winnt3.5
+ 	exit ;;
+     Amiga*:UNIX_System_V:4.0:*)
+ 	echo m68k-unknown-sysv4
+ 	exit ;;
+     *:[Aa]miga[Oo][Ss]:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-amigaos
+ 	exit ;;
+     *:[Mm]orph[Oo][Ss]:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-morphos
+ 	exit ;;
+     *:OS/390:*:*)
+ 	echo i370-ibm-openedition
+ 	exit ;;
+     *:z/VM:*:*)
+ 	echo s390-ibm-zvmoe
+ 	exit ;;
+     *:OS400:*:*)
+         echo powerpc-ibm-os400
+ 	exit ;;
+     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ 	echo arm-acorn-riscix${UNAME_RELEASE}
+ 	exit ;;
+     arm:riscos:*:*|arm:RISCOS:*:*)
+ 	echo arm-unknown-riscos
+ 	exit ;;
+     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ 	echo hppa1.1-hitachi-hiuxmpp
+ 	exit ;;
+     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ 	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ 	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ 		echo pyramid-pyramid-sysv3
+ 	else
+ 		echo pyramid-pyramid-bsd
+ 	fi
+ 	exit ;;
+     NILE*:*:*:dcosx)
+ 	echo pyramid-pyramid-svr4
+ 	exit ;;
+     DRS?6000:unix:4.0:6*)
+ 	echo sparc-icl-nx6
+ 	exit ;;
+     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ 	case `/usr/bin/uname -p` in
+ 	    sparc) echo sparc-icl-nx7; exit ;;
+ 	esac ;;
+     sun4H:SunOS:5.*:*)
+ 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ 	exit ;;
+     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ 	exit ;;
+     i86pc:SunOS:5.*:*)
+ 	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ 	exit ;;
+     sun4*:SunOS:6*:*)
+ 	# According to config.sub, this is the proper way to canonicalize
+ 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+ 	# it's likely to be more like Solaris than SunOS4.
+ 	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ 	exit ;;
+     sun4*:SunOS:*:*)
+ 	case "`/usr/bin/arch -k`" in
+ 	    Series*|S4*)
+ 		UNAME_RELEASE=`uname -v`
+ 		;;
+ 	esac
+ 	# Japanese Language versions have a version number like `4.1.3-JL'.
+ 	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ 	exit ;;
+     sun3*:SunOS:*:*)
+ 	echo m68k-sun-sunos${UNAME_RELEASE}
+ 	exit ;;
+     sun*:*:4.2BSD:*)
+ 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ 	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ 	case "`/bin/arch`" in
+ 	    sun3)
+ 		echo m68k-sun-sunos${UNAME_RELEASE}
+ 		;;
+ 	    sun4)
+ 		echo sparc-sun-sunos${UNAME_RELEASE}
+ 		;;
+ 	esac
+ 	exit ;;
+     aushp:SunOS:*:*)
+ 	echo sparc-auspex-sunos${UNAME_RELEASE}
+ 	exit ;;
+     # The situation for MiNT is a little confusing.  The machine name
+     # can be virtually everything (everything which is not
+     # "atarist" or "atariste" at least should have a processor
+     # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+     # to the lowercase version "mint" (or "freemint").  Finally
+     # the system name "TOS" denotes a system which is actually not
+     # MiNT.  But MiNT is downward compatible to TOS, so this should
+     # be no problem.
+     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+         echo m68k-atari-mint${UNAME_RELEASE}
+ 	exit ;;
+     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ 	echo m68k-atari-mint${UNAME_RELEASE}
+         exit ;;
+     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+         echo m68k-atari-mint${UNAME_RELEASE}
+ 	exit ;;
+     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+         echo m68k-milan-mint${UNAME_RELEASE}
+         exit ;;
+     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+         echo m68k-hades-mint${UNAME_RELEASE}
+         exit ;;
+     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+         echo m68k-unknown-mint${UNAME_RELEASE}
+         exit ;;
+     m68k:machten:*:*)
+ 	echo m68k-apple-machten${UNAME_RELEASE}
+ 	exit ;;
+     powerpc:machten:*:*)
+ 	echo powerpc-apple-machten${UNAME_RELEASE}
+ 	exit ;;
+     RISC*:Mach:*:*)
+ 	echo mips-dec-mach_bsd4.3
+ 	exit ;;
+     RISC*:ULTRIX:*:*)
+ 	echo mips-dec-ultrix${UNAME_RELEASE}
+ 	exit ;;
+     VAX*:ULTRIX*:*:*)
+ 	echo vax-dec-ultrix${UNAME_RELEASE}
+ 	exit ;;
+     2020:CLIX:*:* | 2430:CLIX:*:*)
+ 	echo clipper-intergraph-clix${UNAME_RELEASE}
+ 	exit ;;
+     mips:*:*:UMIPS | mips:*:*:RISCos)
+ 	eval $set_cc_for_build
+ 	sed 's/^	//' << EOF >$dummy.c
+ #ifdef __cplusplus
+ #include <stdio.h>  /* for printf() prototype */
+ 	int main (int argc, char *argv[]) {
+ #else
+ 	int main (argc, argv) int argc; char *argv[]; {
+ #endif
+ 	#if defined (host_mips) && defined (MIPSEB)
+ 	#if defined (SYSTYPE_SYSV)
+ 	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ 	#endif
+ 	#if defined (SYSTYPE_SVR4)
+ 	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ 	#endif
+ 	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ 	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ 	#endif
+ 	#endif
+ 	  exit (-1);
+ 	}
+ EOF
+ 	$CC_FOR_BUILD -o $dummy $dummy.c &&
+ 	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ 	  SYSTEM_NAME=`$dummy $dummyarg` &&
+ 	    { echo "$SYSTEM_NAME"; exit; }
+ 	echo mips-mips-riscos${UNAME_RELEASE}
+ 	exit ;;
+     Motorola:PowerMAX_OS:*:*)
+ 	echo powerpc-motorola-powermax
+ 	exit ;;
+     Motorola:*:4.3:PL8-*)
+ 	echo powerpc-harris-powermax
+ 	exit ;;
+     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ 	echo powerpc-harris-powermax
+ 	exit ;;
+     Night_Hawk:Power_UNIX:*:*)
+ 	echo powerpc-harris-powerunix
+ 	exit ;;
+     m88k:CX/UX:7*:*)
+ 	echo m88k-harris-cxux7
+ 	exit ;;
+     m88k:*:4*:R4*)
+ 	echo m88k-motorola-sysv4
+ 	exit ;;
+     m88k:*:3*:R3*)
+ 	echo m88k-motorola-sysv3
+ 	exit ;;
+     AViiON:dgux:*:*)
+         # DG/UX returns AViiON for all architectures
+         UNAME_PROCESSOR=`/usr/bin/uname -p`
+ 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ 	then
+ 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ 	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+ 	    then
+ 		echo m88k-dg-dgux${UNAME_RELEASE}
+ 	    else
+ 		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ 	    fi
+ 	else
+ 	    echo i586-dg-dgux${UNAME_RELEASE}
+ 	fi
+  	exit ;;
+     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+ 	echo m88k-dolphin-sysv3
+ 	exit ;;
+     M88*:*:R3*:*)
+ 	# Delta 88k system running SVR3
+ 	echo m88k-motorola-sysv3
+ 	exit ;;
+     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ 	echo m88k-tektronix-sysv3
+ 	exit ;;
+     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ 	echo m68k-tektronix-bsd
+ 	exit ;;
+     *:IRIX*:*:*)
+ 	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ 	exit ;;
+     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ 	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+ 	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+     i*86:AIX:*:*)
+ 	echo i386-ibm-aix
+ 	exit ;;
+     ia64:AIX:*:*)
+ 	if [ -x /usr/bin/oslevel ] ; then
+ 		IBM_REV=`/usr/bin/oslevel`
+ 	else
+ 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ 	fi
+ 	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ 	exit ;;
+     *:AIX:2:3)
+ 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ 		eval $set_cc_for_build
+ 		sed 's/^		//' << EOF >$dummy.c
+ 		#include <sys/systemcfg.h>
+ 
+ 		main()
+ 			{
+ 			if (!__power_pc())
+ 				exit(1);
+ 			puts("powerpc-ibm-aix3.2.5");
+ 			exit(0);
+ 			}
+ EOF
+ 		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ 		then
+ 			echo "$SYSTEM_NAME"
+ 		else
+ 			echo rs6000-ibm-aix3.2.5
+ 		fi
+ 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ 		echo rs6000-ibm-aix3.2.4
+ 	else
+ 		echo rs6000-ibm-aix3.2
+ 	fi
+ 	exit ;;
+     *:AIX:*:[45])
+ 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ 		IBM_ARCH=rs6000
+ 	else
+ 		IBM_ARCH=powerpc
+ 	fi
+ 	if [ -x /usr/bin/oslevel ] ; then
+ 		IBM_REV=`/usr/bin/oslevel`
+ 	else
+ 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ 	fi
+ 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ 	exit ;;
+     *:AIX:*:*)
+ 	echo rs6000-ibm-aix
+ 	exit ;;
+     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ 	echo romp-ibm-bsd4.4
+ 	exit ;;
+     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+ 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+ 	exit ;;                             # report: romp-ibm BSD 4.3
+     *:BOSX:*:*)
+ 	echo rs6000-bull-bosx
+ 	exit ;;
+     DPX/2?00:B.O.S.:*:*)
+ 	echo m68k-bull-sysv3
+ 	exit ;;
+     9000/[34]??:4.3bsd:1.*:*)
+ 	echo m68k-hp-bsd
+ 	exit ;;
+     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ 	echo m68k-hp-bsd4.4
+ 	exit ;;
+     9000/[34678]??:HP-UX:*:*)
+ 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ 	case "${UNAME_MACHINE}" in
+ 	    9000/31? )            HP_ARCH=m68000 ;;
+ 	    9000/[34]?? )         HP_ARCH=m68k ;;
+ 	    9000/[678][0-9][0-9])
+ 		if [ -x /usr/bin/getconf ]; then
+ 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                     sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                     case "${sc_cpu_version}" in
+                       523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                       528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                       532)                      # CPU_PA_RISC2_0
+                         case "${sc_kernel_bits}" in
+                           32) HP_ARCH="hppa2.0n" ;;
+                           64) HP_ARCH="hppa2.0w" ;;
+ 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                         esac ;;
+                     esac
+ 		fi
+ 		if [ "${HP_ARCH}" = "" ]; then
+ 		    eval $set_cc_for_build
+ 		    sed 's/^              //' << EOF >$dummy.c
+ 
+               #define _HPUX_SOURCE
+               #include <stdlib.h>
+               #include <unistd.h>
+ 
+               int main ()
+               {
+               #if defined(_SC_KERNEL_BITS)
+                   long bits = sysconf(_SC_KERNEL_BITS);
+               #endif
+                   long cpu  = sysconf (_SC_CPU_VERSION);
+ 
+                   switch (cpu)
+               	{
+               	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               	case CPU_PA_RISC2_0:
+               #if defined(_SC_KERNEL_BITS)
+               	    switch (bits)
+               		{
+               		case 64: puts ("hppa2.0w"); break;
+               		case 32: puts ("hppa2.0n"); break;
+               		default: puts ("hppa2.0"); break;
+               		} break;
+               #else  /* !defined(_SC_KERNEL_BITS) */
+               	    puts ("hppa2.0"); break;
+               #endif
+               	default: puts ("hppa1.0"); break;
+               	}
+                   exit (0);
+               }
+ EOF
+ 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ 		    test -z "$HP_ARCH" && HP_ARCH=hppa
+ 		fi ;;
+ 	esac
+ 	if [ ${HP_ARCH} = "hppa2.0w" ]
+ 	then
+ 	    eval $set_cc_for_build
+ 
+ 	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ 	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+ 	    # generating 64-bit code.  GNU and HP use different nomenclature:
+ 	    #
+ 	    # $ CC_FOR_BUILD=cc ./config.guess
+ 	    # => hppa2.0w-hp-hpux11.23
+ 	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ 	    # => hppa64-hp-hpux11.23
+ 
+ 	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ 		grep __LP64__ >/dev/null
+ 	    then
+ 		HP_ARCH="hppa2.0w"
+ 	    else
+ 		HP_ARCH="hppa64"
+ 	    fi
+ 	fi
+ 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ 	exit ;;
+     ia64:HP-UX:*:*)
+ 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ 	echo ia64-hp-hpux${HPUX_REV}
+ 	exit ;;
+     3050*:HI-UX:*:*)
+ 	eval $set_cc_for_build
+ 	sed 's/^	//' << EOF >$dummy.c
+ 	#include <unistd.h>
+ 	int
+ 	main ()
+ 	{
+ 	  long cpu = sysconf (_SC_CPU_VERSION);
+ 	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ 	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+ 	     results, however.  */
+ 	  if (CPU_IS_PA_RISC (cpu))
+ 	    {
+ 	      switch (cpu)
+ 		{
+ 		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ 		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ 		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ 		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+ 		}
+ 	    }
+ 	  else if (CPU_IS_HP_MC68K (cpu))
+ 	    puts ("m68k-hitachi-hiuxwe2");
+ 	  else puts ("unknown-hitachi-hiuxwe2");
+ 	  exit (0);
+ 	}
+ EOF
+ 	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ 		{ echo "$SYSTEM_NAME"; exit; }
+ 	echo unknown-hitachi-hiuxwe2
+ 	exit ;;
+     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ 	echo hppa1.1-hp-bsd
+ 	exit ;;
+     9000/8??:4.3bsd:*:*)
+ 	echo hppa1.0-hp-bsd
+ 	exit ;;
+     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ 	echo hppa1.0-hp-mpeix
+ 	exit ;;
+     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ 	echo hppa1.1-hp-osf
+ 	exit ;;
+     hp8??:OSF1:*:*)
+ 	echo hppa1.0-hp-osf
+ 	exit ;;
+     i*86:OSF1:*:*)
+ 	if [ -x /usr/sbin/sysversion ] ; then
+ 	    echo ${UNAME_MACHINE}-unknown-osf1mk
+ 	else
+ 	    echo ${UNAME_MACHINE}-unknown-osf1
+ 	fi
+ 	exit ;;
+     parisc*:Lites*:*:*)
+ 	echo hppa1.1-hp-lites
+ 	exit ;;
+     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ 	echo c1-convex-bsd
+         exit ;;
+     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ 	if getsysinfo -f scalar_acc
+ 	then echo c32-convex-bsd
+ 	else echo c2-convex-bsd
+ 	fi
+         exit ;;
+     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ 	echo c34-convex-bsd
+         exit ;;
+     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ 	echo c38-convex-bsd
+         exit ;;
+     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ 	echo c4-convex-bsd
+         exit ;;
+     CRAY*Y-MP:*:*:*)
+ 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ 	exit ;;
+     CRAY*[A-Z]90:*:*:*)
+ 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ 	      -e 's/\.[^.]*$/.X/'
+ 	exit ;;
+     CRAY*TS:*:*:*)
+ 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ 	exit ;;
+     CRAY*T3E:*:*:*)
+ 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ 	exit ;;
+     CRAY*SV1:*:*:*)
+ 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ 	exit ;;
+     *:UNICOS/mp:*:*)
+ 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ 	exit ;;
+     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+         echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+         exit ;;
+     5000:UNIX_System_V:4.*:*)
+         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+         FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+         echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ 	exit ;;
+     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ 	exit ;;
+     sparc*:BSD/OS:*:*)
+ 	echo sparc-unknown-bsdi${UNAME_RELEASE}
+ 	exit ;;
+     *:BSD/OS:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ 	exit ;;
+     *:FreeBSD:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ 	exit ;;
+     i*:CYGWIN*:*)
+ 	echo ${UNAME_MACHINE}-pc-cygwin
+ 	exit ;;
+     i*:MINGW*:*)
+ 	echo ${UNAME_MACHINE}-pc-mingw32
+ 	exit ;;
+     i*:windows32*:*)
+     	# uname -m includes "-pc" on this system.
+     	echo ${UNAME_MACHINE}-mingw32
+ 	exit ;;
+     i*:PW*:*)
+ 	echo ${UNAME_MACHINE}-pc-pw32
+ 	exit ;;
+     x86:Interix*:[34]*)
+ 	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+ 	exit ;;
+     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ 	echo i${UNAME_MACHINE}-pc-mks
+ 	exit ;;
+     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ 	# How do we know it's Interix rather than the generic POSIX subsystem?
+ 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ 	# UNAME_MACHINE based on the output of uname instead of i386?
+ 	echo i586-pc-interix
+ 	exit ;;
+     i*:UWIN*:*)
+ 	echo ${UNAME_MACHINE}-pc-uwin
+ 	exit ;;
+     amd64:CYGWIN*:*:*)
+ 	echo x86_64-unknown-cygwin
+ 	exit ;;
+     p*:CYGWIN*:*)
+ 	echo powerpcle-unknown-cygwin
+ 	exit ;;
+     prep*:SunOS:5.*:*)
+ 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ 	exit ;;
+     *:GNU:*:*)
+ 	# the GNU system
+ 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ 	exit ;;
+     *:GNU/*:*:*)
+ 	# other systems with GNU libc and userland
+ 	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ 	exit ;;
+     i*86:Minix:*:*)
+ 	echo ${UNAME_MACHINE}-pc-minix
+ 	exit ;;
+     arm*:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     cris:Linux:*:*)
+ 	echo cris-axis-linux-gnu
+ 	exit ;;
+     crisv32:Linux:*:*)
+ 	echo crisv32-axis-linux-gnu
+ 	exit ;;
+     frv:Linux:*:*)
+     	echo frv-unknown-linux-gnu
+ 	exit ;;
+     ia64:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     m32r*:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     m68*:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     mips:Linux:*:*)
+ 	eval $set_cc_for_build
+ 	sed 's/^	//' << EOF >$dummy.c
+ 	#undef CPU
+ 	#undef mips
+ 	#undef mipsel
+ 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ 	CPU=mipsel
+ 	#else
+ 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ 	CPU=mips
+ 	#else
+ 	CPU=
+ 	#endif
+ 	#endif
+ EOF
+ 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ 	;;
+     mips64:Linux:*:*)
+ 	eval $set_cc_for_build
+ 	sed 's/^	//' << EOF >$dummy.c
+ 	#undef CPU
+ 	#undef mips64
+ 	#undef mips64el
+ 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ 	CPU=mips64el
+ 	#else
+ 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ 	CPU=mips64
+ 	#else
+ 	CPU=
+ 	#endif
+ 	#endif
+ EOF
+ 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ 	;;
+     ppc:Linux:*:*)
+ 	echo powerpc-unknown-linux-gnu
+ 	exit ;;
+     ppc64:Linux:*:*)
+ 	echo powerpc64-unknown-linux-gnu
+ 	exit ;;
+     alpha:Linux:*:*)
+ 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ 	  EV5)   UNAME_MACHINE=alphaev5 ;;
+ 	  EV56)  UNAME_MACHINE=alphaev56 ;;
+ 	  PCA56) UNAME_MACHINE=alphapca56 ;;
+ 	  PCA57) UNAME_MACHINE=alphapca56 ;;
+ 	  EV6)   UNAME_MACHINE=alphaev6 ;;
+ 	  EV67)  UNAME_MACHINE=alphaev67 ;;
+ 	  EV68*) UNAME_MACHINE=alphaev68 ;;
+         esac
+ 	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ 	exit ;;
+     parisc:Linux:*:* | hppa:Linux:*:*)
+ 	# Look for CPU level
+ 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ 	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ 	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ 	  *)    echo hppa-unknown-linux-gnu ;;
+ 	esac
+ 	exit ;;
+     parisc64:Linux:*:* | hppa64:Linux:*:*)
+ 	echo hppa64-unknown-linux-gnu
+ 	exit ;;
+     s390:Linux:*:* | s390x:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-ibm-linux
+ 	exit ;;
+     sh64*:Linux:*:*)
+     	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     sh*:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     sparc:Linux:*:* | sparc64:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     x86_64:Linux:*:*)
+ 	echo x86_64-unknown-linux-gnu
+ 	exit ;;
+     i*86:Linux:*:*)
+ 	# The BFD linker knows what the default object file format is, so
+ 	# first see if it will tell us. cd to the root directory to prevent
+ 	# problems with other programs or directories called `ld' in the path.
+ 	# Set LC_ALL=C to ensure ld outputs messages in English.
+ 	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ 			 | sed -ne '/supported targets:/!d
+ 				    s/[ 	][ 	]*/ /g
+ 				    s/.*supported targets: *//
+ 				    s/ .*//
+ 				    p'`
+         case "$ld_supported_targets" in
+ 	  elf32-i386)
+ 		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ 		;;
+ 	  a.out-i386-linux)
+ 		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ 		exit ;;
+ 	  coff-i386)
+ 		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ 		exit ;;
+ 	  "")
+ 		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+ 		# one that does not give us useful --help.
+ 		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ 		exit ;;
+ 	esac
+ 	# Determine whether the default compiler is a.out or elf
+ 	eval $set_cc_for_build
+ 	sed 's/^	//' << EOF >$dummy.c
+ 	#include <features.h>
+ 	#ifdef __ELF__
+ 	# ifdef __GLIBC__
+ 	#  if __GLIBC__ >= 2
+ 	LIBC=gnu
+ 	#  else
+ 	LIBC=gnulibc1
+ 	#  endif
+ 	# else
+ 	LIBC=gnulibc1
+ 	# endif
+ 	#else
+ 	#ifdef __INTEL_COMPILER
+ 	LIBC=gnu
+ 	#else
+ 	LIBC=gnuaout
+ 	#endif
+ 	#endif
+ 	#ifdef __dietlibc__
+ 	LIBC=dietlibc
+ 	#endif
+ EOF
+ 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ 	test x"${LIBC}" != x && {
+ 		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ 		exit
+ 	}
+ 	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+ 	;;
+     i*86:DYNIX/ptx:4*:*)
+ 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ 	# earlier versions are messed up and put the nodename in both
+ 	# sysname and nodename.
+ 	echo i386-sequent-sysv4
+ 	exit ;;
+     i*86:UNIX_SV:4.2MP:2.*)
+         # Unixware is an offshoot of SVR4, but it has its own version
+         # number series starting with 2...
+         # I am not positive that other SVR4 systems won't match this,
+ 	# I just have to hope.  -- rms.
+         # Use sysv4.2uw... so that sysv4* matches it.
+ 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ 	exit ;;
+     i*86:OS/2:*:*)
+ 	# If we were able to find `uname', then EMX Unix compatibility
+ 	# is probably installed.
+ 	echo ${UNAME_MACHINE}-pc-os2-emx
+ 	exit ;;
+     i*86:XTS-300:*:STOP)
+ 	echo ${UNAME_MACHINE}-unknown-stop
+ 	exit ;;
+     i*86:atheos:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-atheos
+ 	exit ;;
+     i*86:syllable:*:*)
+ 	echo ${UNAME_MACHINE}-pc-syllable
+ 	exit ;;
+     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ 	echo i386-unknown-lynxos${UNAME_RELEASE}
+ 	exit ;;
+     i*86:*DOS:*:*)
+ 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ 	exit ;;
+     i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ 		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ 	else
+ 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ 	fi
+ 	exit ;;
+     i*86:*:5:[678]*)
+     	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+ 	case `/bin/uname -X | grep "^Machine"` in
+ 	    *486*)	     UNAME_MACHINE=i486 ;;
+ 	    *Pentium)	     UNAME_MACHINE=i586 ;;
+ 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ 	esac
+ 	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ 	exit ;;
+     i*86:*:3.2:*)
+ 	if test -f /usr/options/cb.name; then
+ 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ 		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ 	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ 		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ 		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ 		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ 			&& UNAME_MACHINE=i586
+ 		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ 			&& UNAME_MACHINE=i686
+ 		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ 			&& UNAME_MACHINE=i686
+ 		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ 	else
+ 		echo ${UNAME_MACHINE}-pc-sysv32
+ 	fi
+ 	exit ;;
+     pc:*:*:*)
+ 	# Left here for compatibility:
+         # uname -m prints for DJGPP always 'pc', but it prints nothing about
+         # the processor, so we play safe by assuming i386.
+ 	echo i386-pc-msdosdjgpp
+         exit ;;
+     Intel:Mach:3*:*)
+ 	echo i386-pc-mach3
+ 	exit ;;
+     paragon:*:*:*)
+ 	echo i860-intel-osf1
+ 	exit ;;
+     i860:*:4.*:*) # i860-SVR4
+ 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ 	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ 	else # Add other i860-SVR4 vendors below as they are discovered.
+ 	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+ 	fi
+ 	exit ;;
+     mini*:CTIX:SYS*5:*)
+ 	# "miniframe"
+ 	echo m68010-convergent-sysv
+ 	exit ;;
+     mc68k:UNIX:SYSTEM5:3.51m)
+ 	echo m68k-convergent-sysv
+ 	exit ;;
+     M680?0:D-NIX:5.3:*)
+ 	echo m68k-diab-dnix
+ 	exit ;;
+     M68*:*:R3V[5678]*:*)
+ 	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ 	OS_REL=''
+ 	test -r /etc/.relid \
+ 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ 	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+           && { echo i486-ncr-sysv4; exit; } ;;
+     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ 	echo m68k-unknown-lynxos${UNAME_RELEASE}
+ 	exit ;;
+     mc68030:UNIX_System_V:4.*:*)
+ 	echo m68k-atari-sysv4
+ 	exit ;;
+     TSUNAMI:LynxOS:2.*:*)
+ 	echo sparc-unknown-lynxos${UNAME_RELEASE}
+ 	exit ;;
+     rs6000:LynxOS:2.*:*)
+ 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ 	exit ;;
+     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ 	exit ;;
+     SM[BE]S:UNIX_SV:*:*)
+ 	echo mips-dde-sysv${UNAME_RELEASE}
+ 	exit ;;
+     RM*:ReliantUNIX-*:*:*)
+ 	echo mips-sni-sysv4
+ 	exit ;;
+     RM*:SINIX-*:*:*)
+ 	echo mips-sni-sysv4
+ 	exit ;;
+     *:SINIX-*:*:*)
+ 	if uname -p 2>/dev/null >/dev/null ; then
+ 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ 		echo ${UNAME_MACHINE}-sni-sysv4
+ 	else
+ 		echo ns32k-sni-sysv
+ 	fi
+ 	exit ;;
+     PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                       # says <Richard.M.Bartel@ccMail.Census.GOV>
+         echo i586-unisys-sysv4
+         exit ;;
+     *:UNIX_System_V:4*:FTX*)
+ 	# From Gerald Hewes <hewes@openmarket.com>.
+ 	# How about differentiating between stratus architectures? -djm
+ 	echo hppa1.1-stratus-sysv4
+ 	exit ;;
+     *:*:*:FTX*)
+ 	# From seanf@swdc.stratus.com.
+ 	echo i860-stratus-sysv4
+ 	exit ;;
+     i*86:VOS:*:*)
+ 	# From Paul.Green@stratus.com.
+ 	echo ${UNAME_MACHINE}-stratus-vos
+ 	exit ;;
+     *:VOS:*:*)
+ 	# From Paul.Green@stratus.com.
+ 	echo hppa1.1-stratus-vos
+ 	exit ;;
+     mc68*:A/UX:*:*)
+ 	echo m68k-apple-aux${UNAME_RELEASE}
+ 	exit ;;
+     news*:NEWS-OS:6*:*)
+ 	echo mips-sony-newsos6
+ 	exit ;;
+     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ 	if [ -d /usr/nec ]; then
+ 	        echo mips-nec-sysv${UNAME_RELEASE}
+ 	else
+ 	        echo mips-unknown-sysv${UNAME_RELEASE}
+ 	fi
+         exit ;;
+     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+ 	echo powerpc-be-beos
+ 	exit ;;
+     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+ 	echo powerpc-apple-beos
+ 	exit ;;
+     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+ 	echo i586-pc-beos
+ 	exit ;;
+     SX-4:SUPER-UX:*:*)
+ 	echo sx4-nec-superux${UNAME_RELEASE}
+ 	exit ;;
+     SX-5:SUPER-UX:*:*)
+ 	echo sx5-nec-superux${UNAME_RELEASE}
+ 	exit ;;
+     SX-6:SUPER-UX:*:*)
+ 	echo sx6-nec-superux${UNAME_RELEASE}
+ 	exit ;;
+     Power*:Rhapsody:*:*)
+ 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ 	exit ;;
+     *:Rhapsody:*:*)
+ 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ 	exit ;;
+     *:Darwin:*:*)
+ 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ 	case $UNAME_PROCESSOR in
+ 	    *86) UNAME_PROCESSOR=i686 ;;
+ 	    unknown) UNAME_PROCESSOR=powerpc ;;
+ 	esac
+ 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ 	exit ;;
+     *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ 	UNAME_PROCESSOR=`uname -p`
+ 	if test "$UNAME_PROCESSOR" = "x86"; then
+ 		UNAME_PROCESSOR=i386
+ 		UNAME_MACHINE=pc
+ 	fi
+ 	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ 	exit ;;
+     *:QNX:*:4*)
+ 	echo i386-pc-qnx
+ 	exit ;;
+     NSE-?:NONSTOP_KERNEL:*:*)
+ 	echo nse-tandem-nsk${UNAME_RELEASE}
+ 	exit ;;
+     NSR-?:NONSTOP_KERNEL:*:*)
+ 	echo nsr-tandem-nsk${UNAME_RELEASE}
+ 	exit ;;
+     *:NonStop-UX:*:*)
+ 	echo mips-compaq-nonstopux
+ 	exit ;;
+     BS2000:POSIX*:*:*)
+ 	echo bs2000-siemens-sysv
+ 	exit ;;
+     DS/*:UNIX_System_V:*:*)
+ 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ 	exit ;;
+     *:Plan9:*:*)
+ 	# "uname -m" is not consistent, so use $cputype instead. 386
+ 	# is converted to i386 for consistency with other x86
+ 	# operating systems.
+ 	if test "$cputype" = "386"; then
+ 	    UNAME_MACHINE=i386
+ 	else
+ 	    UNAME_MACHINE="$cputype"
+ 	fi
+ 	echo ${UNAME_MACHINE}-unknown-plan9
+ 	exit ;;
+     *:TOPS-10:*:*)
+ 	echo pdp10-unknown-tops10
+ 	exit ;;
+     *:TENEX:*:*)
+ 	echo pdp10-unknown-tenex
+ 	exit ;;
+     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ 	echo pdp10-dec-tops20
+ 	exit ;;
+     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ 	echo pdp10-xkl-tops20
+ 	exit ;;
+     *:TOPS-20:*:*)
+ 	echo pdp10-unknown-tops20
+ 	exit ;;
+     *:ITS:*:*)
+ 	echo pdp10-unknown-its
+ 	exit ;;
+     SEI:*:*:SEIUX)
+         echo mips-sei-seiux${UNAME_RELEASE}
+ 	exit ;;
+     *:DragonFly:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ 	exit ;;
+     *:*VMS:*:*)
+     	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ 	case "${UNAME_MACHINE}" in
+ 	    A*) echo alpha-dec-vms ; exit ;;
+ 	    I*) echo ia64-dec-vms ; exit ;;
+ 	    V*) echo vax-dec-vms ; exit ;;
+ 	esac ;;
+     *:XENIX:*:SysV)
+ 	echo i386-pc-xenix
+ 	exit ;;
+     i*86:skyos:*:*)
+ 	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ 	exit ;;
+ esac
+ 
+ #echo '(No uname command or uname output not recognized.)' 1>&2
+ #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+ 
+ eval $set_cc_for_build
+ cat >$dummy.c <<EOF
+ #ifdef _SEQUENT_
+ # include <sys/types.h>
+ # include <sys/utsname.h>
+ #endif
+ main ()
+ {
+ #if defined (sony)
+ #if defined (MIPSEB)
+   /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+      I don't know....  */
+   printf ("mips-sony-bsd\n"); exit (0);
+ #else
+ #include <sys/param.h>
+   printf ("m68k-sony-newsos%s\n",
+ #ifdef NEWSOS4
+           "4"
+ #else
+ 	  ""
+ #endif
+          ); exit (0);
+ #endif
+ #endif
+ 
+ #if defined (__arm) && defined (__acorn) && defined (__unix)
+   printf ("arm-acorn-riscix\n"); exit (0);
+ #endif
+ 
+ #if defined (hp300) && !defined (hpux)
+   printf ("m68k-hp-bsd\n"); exit (0);
+ #endif
+ 
+ #if defined (NeXT)
+ #if !defined (__ARCHITECTURE__)
+ #define __ARCHITECTURE__ "m68k"
+ #endif
+   int version;
+   version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+   if (version < 4)
+     printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+   else
+     printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+   exit (0);
+ #endif
+ 
+ #if defined (MULTIMAX) || defined (n16)
+ #if defined (UMAXV)
+   printf ("ns32k-encore-sysv\n"); exit (0);
+ #else
+ #if defined (CMU)
+   printf ("ns32k-encore-mach\n"); exit (0);
+ #else
+   printf ("ns32k-encore-bsd\n"); exit (0);
+ #endif
+ #endif
+ #endif
+ 
+ #if defined (__386BSD__)
+   printf ("i386-pc-bsd\n"); exit (0);
+ #endif
+ 
+ #if defined (sequent)
+ #if defined (i386)
+   printf ("i386-sequent-dynix\n"); exit (0);
+ #endif
+ #if defined (ns32000)
+   printf ("ns32k-sequent-dynix\n"); exit (0);
+ #endif
+ #endif
+ 
+ #if defined (_SEQUENT_)
+     struct utsname un;
+ 
+     uname(&un);
+ 
+     if (strncmp(un.version, "V2", 2) == 0) {
+ 	printf ("i386-sequent-ptx2\n"); exit (0);
+     }
+     if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ 	printf ("i386-sequent-ptx1\n"); exit (0);
+     }
+     printf ("i386-sequent-ptx\n"); exit (0);
+ 
+ #endif
+ 
+ #if defined (vax)
+ # if !defined (ultrix)
+ #  include <sys/param.h>
+ #  if defined (BSD)
+ #   if BSD == 43
+       printf ("vax-dec-bsd4.3\n"); exit (0);
+ #   else
+ #    if BSD == 199006
+       printf ("vax-dec-bsd4.3reno\n"); exit (0);
+ #    else
+       printf ("vax-dec-bsd\n"); exit (0);
+ #    endif
+ #   endif
+ #  else
+     printf ("vax-dec-bsd\n"); exit (0);
+ #  endif
+ # else
+     printf ("vax-dec-ultrix\n"); exit (0);
+ # endif
+ #endif
+ 
+ #if defined (alliant) && defined (i860)
+   printf ("i860-alliant-bsd\n"); exit (0);
+ #endif
+ 
+   exit (1);
+ }
+ EOF
+ 
+ $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ 	{ echo "$SYSTEM_NAME"; exit; }
+ 
+ # Apollos put the system type in the environment.
+ 
+ test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+ 
+ # Convex versions that predate uname can use getsysinfo(1)
+ 
+ if [ -x /usr/convex/getsysinfo ]
+ then
+     case `getsysinfo -f cpu_type` in
+     c1*)
+ 	echo c1-convex-bsd
+ 	exit ;;
+     c2*)
+ 	if getsysinfo -f scalar_acc
+ 	then echo c32-convex-bsd
+ 	else echo c2-convex-bsd
+ 	fi
+ 	exit ;;
+     c34*)
+ 	echo c34-convex-bsd
+ 	exit ;;
+     c38*)
+ 	echo c38-convex-bsd
+ 	exit ;;
+     c4*)
+ 	echo c4-convex-bsd
+ 	exit ;;
+     esac
+ fi
+ 
+ cat >&2 <<EOF
+ $0: unable to guess system type
+ 
+ This script, last modified $timestamp, has failed to recognize
+ the operating system you are using. It is advised that you
+ download the most up to date version of the config scripts from
+ 
+   http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+ and
+   http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+ 
+ If the version you run ($0) is already up to date, please
+ send the following data and any information you think might be
+ pertinent to <config-patches@gnu.org> in order to provide the needed
+ information to handle your system.
+ 
+ config.guess timestamp = $timestamp
+ 
+ uname -m = `(uname -m) 2>/dev/null || echo unknown`
+ uname -r = `(uname -r) 2>/dev/null || echo unknown`
+ uname -s = `(uname -s) 2>/dev/null || echo unknown`
+ uname -v = `(uname -v) 2>/dev/null || echo unknown`
+ 
+ /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+ /bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+ 
+ hostinfo               = `(hostinfo) 2>/dev/null`
+ /bin/universe          = `(/bin/universe) 2>/dev/null`
+ /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+ /bin/arch              = `(/bin/arch) 2>/dev/null`
+ /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+ /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+ 
+ UNAME_MACHINE = ${UNAME_MACHINE}
+ UNAME_RELEASE = ${UNAME_RELEASE}
+ UNAME_SYSTEM  = ${UNAME_SYSTEM}
+ UNAME_VERSION = ${UNAME_VERSION}
+ EOF
+ 
+ exit 1
+ 
+ # Local variables:
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "timestamp='"
+ # time-stamp-format: "%:y-%02m-%02d"
+ # time-stamp-end: "'"
+ # End:
diff -Nrcpad gcc-4.0.2/libjava/classpath/config.sub gcc-4.1.0/libjava/classpath/config.sub
*** gcc-4.0.2/libjava/classpath/config.sub	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/config.sub	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1579 ----
+ #! /bin/sh
+ # Configuration validation subroutine script.
+ #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ #   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 
+ timestamp='2005-07-08'
+ 
+ # This file is (in principle) common to ALL GNU software.
+ # The presence of a machine in this file suggests that SOME GNU software
+ # can handle that machine.  It does not imply ALL GNU software can.
+ #
+ # This file is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2 of the License, or
+ # (at your option) any later version.
+ #
+ # This program 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 General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+ # 02110-1301, USA.
+ #
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+ 
+ 
+ # Please send patches to <config-patches@gnu.org>.  Submit a context
+ # diff and a properly formatted ChangeLog entry.
+ #
+ # Configuration subroutine to validate and canonicalize a configuration type.
+ # Supply the specified configuration type as an argument.
+ # If it is invalid, we print an error message on stderr and exit with code 1.
+ # Otherwise, we print the canonical config type on stdout and succeed.
+ 
+ # This file is supposed to be the same for all GNU packages
+ # and recognize all the CPU types, system types and aliases
+ # that are meaningful with *any* GNU software.
+ # Each package is responsible for reporting which valid configurations
+ # it does not support.  The user should be able to distinguish
+ # a failure to support a valid configuration from a meaningless
+ # configuration.
+ 
+ # The goal of this file is to map all the various variations of a given
+ # machine specification into a single specification in the form:
+ #	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+ # or in some cases, the newer four-part form:
+ #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+ # It is wrong to echo any other type of specification.
+ 
+ me=`echo "$0" | sed -e 's,.*/,,'`
+ 
+ usage="\
+ Usage: $0 [OPTION] CPU-MFR-OPSYS
+        $0 [OPTION] ALIAS
+ 
+ Canonicalize a configuration name.
+ 
+ Operation modes:
+   -h, --help         print this help, then exit
+   -t, --time-stamp   print date of last modification, then exit
+   -v, --version      print version number, then exit
+ 
+ Report bugs and patches to <config-patches@gnu.org>."
+ 
+ version="\
+ GNU config.sub ($timestamp)
+ 
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
+ 
+ This is free software; see the source for copying conditions.  There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ 
+ help="
+ Try \`$me --help' for more information."
+ 
+ # Parse command line
+ while test $# -gt 0 ; do
+   case $1 in
+     --time-stamp | --time* | -t )
+        echo "$timestamp" ; exit ;;
+     --version | -v )
+        echo "$version" ; exit ;;
+     --help | --h* | -h )
+        echo "$usage"; exit ;;
+     -- )     # Stop option processing
+        shift; break ;;
+     - )	# Use stdin as input.
+        break ;;
+     -* )
+        echo "$me: invalid option $1$help"
+        exit 1 ;;
+ 
+     *local*)
+        # First pass through any local machine types.
+        echo $1
+        exit ;;
+ 
+     * )
+        break ;;
+   esac
+ done
+ 
+ case $# in
+  0) echo "$me: missing argument$help" >&2
+     exit 1;;
+  1) ;;
+  *) echo "$me: too many arguments$help" >&2
+     exit 1;;
+ esac
+ 
+ # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+   nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+   kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+   *)
+     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+     if [ $basic_machine != $1 ]
+     then os=`echo $1 | sed 's/.*-/-/'`
+     else os=; fi
+     ;;
+ esac
+ 
+ ### Let's recognize common machines as not being operating systems so
+ ### that things like config.sub decstation-3100 work.  We also
+ ### recognize some manufacturers as not being operating systems, so we
+ ### can provide default operating systems below.
+ case $os in
+ 	-sun*os*)
+ 		# Prevent following clause from handling this invalid input.
+ 		;;
+ 	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ 	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ 	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ 	-apple | -axis | -knuth | -cray)
+ 		os=
+ 		basic_machine=$1
+ 		;;
+ 	-sim | -cisco | -oki | -wec | -winbond)
+ 		os=
+ 		basic_machine=$1
+ 		;;
+ 	-scout)
+ 		;;
+ 	-wrs)
+ 		os=-vxworks
+ 		basic_machine=$1
+ 		;;
+ 	-chorusos*)
+ 		os=-chorusos
+ 		basic_machine=$1
+ 		;;
+  	-chorusrdb)
+  		os=-chorusrdb
+ 		basic_machine=$1
+  		;;
+ 	-hiux*)
+ 		os=-hiuxwe2
+ 		;;
+ 	-sco5)
+ 		os=-sco3.2v5
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-sco4)
+ 		os=-sco3.2v4
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-sco3.2.[4-9]*)
+ 		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-sco3.2v[4-9]*)
+ 		# Don't forget version if it is 3.2v4 or newer.
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-sco*)
+ 		os=-sco3.2v2
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-udk*)
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-isc)
+ 		os=-isc2.2
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-clix*)
+ 		basic_machine=clipper-intergraph
+ 		;;
+ 	-isc*)
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-lynx*)
+ 		os=-lynxos
+ 		;;
+ 	-ptx*)
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ 		;;
+ 	-windowsnt*)
+ 		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ 		;;
+ 	-psos*)
+ 		os=-psos
+ 		;;
+ 	-mint | -mint[0-9]*)
+ 		basic_machine=m68k-atari
+ 		os=-mint
+ 		;;
+ esac
+ 
+ # Decode aliases for certain CPU-COMPANY combinations.
+ case $basic_machine in
+ 	# Recognize the basic CPU types without company name.
+ 	# Some are omitted here because they have special meanings below.
+ 	1750a | 580 \
+ 	| a29k \
+ 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ 	| am33_2.0 \
+ 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ 	| bfin \
+ 	| c4x | clipper \
+ 	| d10v | d30v | dlx | dsp16xx \
+ 	| fr30 | frv \
+ 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ 	| i370 | i860 | i960 | ia64 \
+ 	| ip2k | iq2000 \
+ 	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+ 	| mips | mipsbe | mipseb | mipsel | mipsle \
+ 	| mips16 \
+ 	| mips64 | mips64el \
+ 	| mips64vr | mips64vrel \
+ 	| mips64orion | mips64orionel \
+ 	| mips64vr4100 | mips64vr4100el \
+ 	| mips64vr4300 | mips64vr4300el \
+ 	| mips64vr5000 | mips64vr5000el \
+ 	| mips64vr5900 | mips64vr5900el \
+ 	| mipsisa32 | mipsisa32el \
+ 	| mipsisa32r2 | mipsisa32r2el \
+ 	| mipsisa64 | mipsisa64el \
+ 	| mipsisa64r2 | mipsisa64r2el \
+ 	| mipsisa64sb1 | mipsisa64sb1el \
+ 	| mipsisa64sr71k | mipsisa64sr71kel \
+ 	| mipstx39 | mipstx39el \
+ 	| mn10200 | mn10300 \
+ 	| ms1 \
+ 	| msp430 \
+ 	| ns16k | ns32k \
+ 	| or32 \
+ 	| pdp10 | pdp11 | pj | pjl \
+ 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ 	| pyramid \
+ 	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ 	| sh64 | sh64le \
+ 	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+ 	| sparcv8 | sparcv9 | sparcv9b \
+ 	| strongarm \
+ 	| tahoe | thumb | tic4x | tic80 | tron \
+ 	| v850 | v850e \
+ 	| we32k \
+ 	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+ 	| z8k)
+ 		basic_machine=$basic_machine-unknown
+ 		;;
+ 	m32c)
+ 		basic_machine=$basic_machine-unknown
+ 		;;
+ 	m6811 | m68hc11 | m6812 | m68hc12)
+ 		# Motorola 68HC11/12.
+ 		basic_machine=$basic_machine-unknown
+ 		os=-none
+ 		;;
+ 	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ 		;;
+ 
+ 	# We use `pc' rather than `unknown'
+ 	# because (1) that's what they normally are, and
+ 	# (2) the word "unknown" tends to confuse beginning users.
+ 	i*86 | x86_64)
+ 	  basic_machine=$basic_machine-pc
+ 	  ;;
+ 	# Object if more than one company name word.
+ 	*-*-*)
+ 		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ 		exit 1
+ 		;;
+ 	# Recognize the basic CPU types with company name.
+ 	580-* \
+ 	| a29k-* \
+ 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+ 	| avr-* \
+ 	| bfin-* | bs2000-* \
+ 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ 	| clipper-* | craynv-* | cydra-* \
+ 	| d10v-* | d30v-* | dlx-* \
+ 	| elxsi-* \
+ 	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ 	| h8300-* | h8500-* \
+ 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ 	| i*86-* | i860-* | i960-* | ia64-* \
+ 	| ip2k-* | iq2000-* \
+ 	| m32r-* | m32rle-* \
+ 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ 	| m88110-* | m88k-* | maxq-* | mcore-* \
+ 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ 	| mips16-* \
+ 	| mips64-* | mips64el-* \
+ 	| mips64vr-* | mips64vrel-* \
+ 	| mips64orion-* | mips64orionel-* \
+ 	| mips64vr4100-* | mips64vr4100el-* \
+ 	| mips64vr4300-* | mips64vr4300el-* \
+ 	| mips64vr5000-* | mips64vr5000el-* \
+ 	| mips64vr5900-* | mips64vr5900el-* \
+ 	| mipsisa32-* | mipsisa32el-* \
+ 	| mipsisa32r2-* | mipsisa32r2el-* \
+ 	| mipsisa64-* | mipsisa64el-* \
+ 	| mipsisa64r2-* | mipsisa64r2el-* \
+ 	| mipsisa64sb1-* | mipsisa64sb1el-* \
+ 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ 	| mipstx39-* | mipstx39el-* \
+ 	| mmix-* \
+ 	| ms1-* \
+ 	| msp430-* \
+ 	| none-* | np1-* | ns16k-* | ns32k-* \
+ 	| orion-* \
+ 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ 	| pyramid-* \
+ 	| romp-* | rs6000-* \
+ 	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ 	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+ 	| sparclite-* \
+ 	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ 	| tahoe-* | thumb-* \
+ 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ 	| tron-* \
+ 	| v850-* | v850e-* | vax-* \
+ 	| we32k-* \
+ 	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+ 	| xstormy16-* | xtensa-* \
+ 	| ymp-* \
+ 	| z8k-*)
+ 		;;
+ 	m32c-*)
+ 		;;
+ 	# Recognize the various machine names and aliases which stand
+ 	# for a CPU type and a company and sometimes even an OS.
+ 	386bsd)
+ 		basic_machine=i386-unknown
+ 		os=-bsd
+ 		;;
+ 	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ 		basic_machine=m68000-att
+ 		;;
+ 	3b*)
+ 		basic_machine=we32k-att
+ 		;;
+ 	a29khif)
+ 		basic_machine=a29k-amd
+ 		os=-udi
+ 		;;
+     	abacus)
+ 		basic_machine=abacus-unknown
+ 		;;
+ 	adobe68k)
+ 		basic_machine=m68010-adobe
+ 		os=-scout
+ 		;;
+ 	alliant | fx80)
+ 		basic_machine=fx80-alliant
+ 		;;
+ 	altos | altos3068)
+ 		basic_machine=m68k-altos
+ 		;;
+ 	am29k)
+ 		basic_machine=a29k-none
+ 		os=-bsd
+ 		;;
+ 	amd64)
+ 		basic_machine=x86_64-pc
+ 		;;
+ 	amd64-*)
+ 		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	amdahl)
+ 		basic_machine=580-amdahl
+ 		os=-sysv
+ 		;;
+ 	amiga | amiga-*)
+ 		basic_machine=m68k-unknown
+ 		;;
+ 	amigaos | amigados)
+ 		basic_machine=m68k-unknown
+ 		os=-amigaos
+ 		;;
+ 	amigaunix | amix)
+ 		basic_machine=m68k-unknown
+ 		os=-sysv4
+ 		;;
+ 	apollo68)
+ 		basic_machine=m68k-apollo
+ 		os=-sysv
+ 		;;
+ 	apollo68bsd)
+ 		basic_machine=m68k-apollo
+ 		os=-bsd
+ 		;;
+ 	aux)
+ 		basic_machine=m68k-apple
+ 		os=-aux
+ 		;;
+ 	balance)
+ 		basic_machine=ns32k-sequent
+ 		os=-dynix
+ 		;;
+ 	c90)
+ 		basic_machine=c90-cray
+ 		os=-unicos
+ 		;;
+ 	convex-c1)
+ 		basic_machine=c1-convex
+ 		os=-bsd
+ 		;;
+ 	convex-c2)
+ 		basic_machine=c2-convex
+ 		os=-bsd
+ 		;;
+ 	convex-c32)
+ 		basic_machine=c32-convex
+ 		os=-bsd
+ 		;;
+ 	convex-c34)
+ 		basic_machine=c34-convex
+ 		os=-bsd
+ 		;;
+ 	convex-c38)
+ 		basic_machine=c38-convex
+ 		os=-bsd
+ 		;;
+ 	cray | j90)
+ 		basic_machine=j90-cray
+ 		os=-unicos
+ 		;;
+ 	craynv)
+ 		basic_machine=craynv-cray
+ 		os=-unicosmp
+ 		;;
+ 	cr16c)
+ 		basic_machine=cr16c-unknown
+ 		os=-elf
+ 		;;
+ 	crds | unos)
+ 		basic_machine=m68k-crds
+ 		;;
+ 	crisv32 | crisv32-* | etraxfs*)
+ 		basic_machine=crisv32-axis
+ 		;;
+ 	cris | cris-* | etrax*)
+ 		basic_machine=cris-axis
+ 		;;
+ 	crx)
+ 		basic_machine=crx-unknown
+ 		os=-elf
+ 		;;
+ 	da30 | da30-*)
+ 		basic_machine=m68k-da30
+ 		;;
+ 	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ 		basic_machine=mips-dec
+ 		;;
+ 	decsystem10* | dec10*)
+ 		basic_machine=pdp10-dec
+ 		os=-tops10
+ 		;;
+ 	decsystem20* | dec20*)
+ 		basic_machine=pdp10-dec
+ 		os=-tops20
+ 		;;
+ 	delta | 3300 | motorola-3300 | motorola-delta \
+ 	      | 3300-motorola | delta-motorola)
+ 		basic_machine=m68k-motorola
+ 		;;
+ 	delta88)
+ 		basic_machine=m88k-motorola
+ 		os=-sysv3
+ 		;;
+ 	djgpp)
+ 		basic_machine=i586-pc
+ 		os=-msdosdjgpp
+ 		;;
+ 	dpx20 | dpx20-*)
+ 		basic_machine=rs6000-bull
+ 		os=-bosx
+ 		;;
+ 	dpx2* | dpx2*-bull)
+ 		basic_machine=m68k-bull
+ 		os=-sysv3
+ 		;;
+ 	ebmon29k)
+ 		basic_machine=a29k-amd
+ 		os=-ebmon
+ 		;;
+ 	elxsi)
+ 		basic_machine=elxsi-elxsi
+ 		os=-bsd
+ 		;;
+ 	encore | umax | mmax)
+ 		basic_machine=ns32k-encore
+ 		;;
+ 	es1800 | OSE68k | ose68k | ose | OSE)
+ 		basic_machine=m68k-ericsson
+ 		os=-ose
+ 		;;
+ 	fx2800)
+ 		basic_machine=i860-alliant
+ 		;;
+ 	genix)
+ 		basic_machine=ns32k-ns
+ 		;;
+ 	gmicro)
+ 		basic_machine=tron-gmicro
+ 		os=-sysv
+ 		;;
+ 	go32)
+ 		basic_machine=i386-pc
+ 		os=-go32
+ 		;;
+ 	h3050r* | hiux*)
+ 		basic_machine=hppa1.1-hitachi
+ 		os=-hiuxwe2
+ 		;;
+ 	h8300hms)
+ 		basic_machine=h8300-hitachi
+ 		os=-hms
+ 		;;
+ 	h8300xray)
+ 		basic_machine=h8300-hitachi
+ 		os=-xray
+ 		;;
+ 	h8500hms)
+ 		basic_machine=h8500-hitachi
+ 		os=-hms
+ 		;;
+ 	harris)
+ 		basic_machine=m88k-harris
+ 		os=-sysv3
+ 		;;
+ 	hp300-*)
+ 		basic_machine=m68k-hp
+ 		;;
+ 	hp300bsd)
+ 		basic_machine=m68k-hp
+ 		os=-bsd
+ 		;;
+ 	hp300hpux)
+ 		basic_machine=m68k-hp
+ 		os=-hpux
+ 		;;
+ 	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ 		basic_machine=hppa1.0-hp
+ 		;;
+ 	hp9k2[0-9][0-9] | hp9k31[0-9])
+ 		basic_machine=m68000-hp
+ 		;;
+ 	hp9k3[2-9][0-9])
+ 		basic_machine=m68k-hp
+ 		;;
+ 	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ 		basic_machine=hppa1.0-hp
+ 		;;
+ 	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ 		basic_machine=hppa1.1-hp
+ 		;;
+ 	hp9k78[0-9] | hp78[0-9])
+ 		# FIXME: really hppa2.0-hp
+ 		basic_machine=hppa1.1-hp
+ 		;;
+ 	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ 		# FIXME: really hppa2.0-hp
+ 		basic_machine=hppa1.1-hp
+ 		;;
+ 	hp9k8[0-9][13679] | hp8[0-9][13679])
+ 		basic_machine=hppa1.1-hp
+ 		;;
+ 	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ 		basic_machine=hppa1.0-hp
+ 		;;
+ 	hppa-next)
+ 		os=-nextstep3
+ 		;;
+ 	hppaosf)
+ 		basic_machine=hppa1.1-hp
+ 		os=-osf
+ 		;;
+ 	hppro)
+ 		basic_machine=hppa1.1-hp
+ 		os=-proelf
+ 		;;
+ 	i370-ibm* | ibm*)
+ 		basic_machine=i370-ibm
+ 		;;
+ # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+ 	i*86v32)
+ 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ 		os=-sysv32
+ 		;;
+ 	i*86v4*)
+ 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ 		os=-sysv4
+ 		;;
+ 	i*86v)
+ 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ 		os=-sysv
+ 		;;
+ 	i*86sol2)
+ 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ 		os=-solaris2
+ 		;;
+ 	i386mach)
+ 		basic_machine=i386-mach
+ 		os=-mach
+ 		;;
+ 	i386-vsta | vsta)
+ 		basic_machine=i386-unknown
+ 		os=-vsta
+ 		;;
+ 	iris | iris4d)
+ 		basic_machine=mips-sgi
+ 		case $os in
+ 		    -irix*)
+ 			;;
+ 		    *)
+ 			os=-irix4
+ 			;;
+ 		esac
+ 		;;
+ 	isi68 | isi)
+ 		basic_machine=m68k-isi
+ 		os=-sysv
+ 		;;
+ 	m88k-omron*)
+ 		basic_machine=m88k-omron
+ 		;;
+ 	magnum | m3230)
+ 		basic_machine=mips-mips
+ 		os=-sysv
+ 		;;
+ 	merlin)
+ 		basic_machine=ns32k-utek
+ 		os=-sysv
+ 		;;
+ 	mingw32)
+ 		basic_machine=i386-pc
+ 		os=-mingw32
+ 		;;
+ 	miniframe)
+ 		basic_machine=m68000-convergent
+ 		;;
+ 	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ 		basic_machine=m68k-atari
+ 		os=-mint
+ 		;;
+ 	mips3*-*)
+ 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ 		;;
+ 	mips3*)
+ 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ 		;;
+ 	monitor)
+ 		basic_machine=m68k-rom68k
+ 		os=-coff
+ 		;;
+ 	morphos)
+ 		basic_machine=powerpc-unknown
+ 		os=-morphos
+ 		;;
+ 	msdos)
+ 		basic_machine=i386-pc
+ 		os=-msdos
+ 		;;
+ 	mvs)
+ 		basic_machine=i370-ibm
+ 		os=-mvs
+ 		;;
+ 	ncr3000)
+ 		basic_machine=i486-ncr
+ 		os=-sysv4
+ 		;;
+ 	netbsd386)
+ 		basic_machine=i386-unknown
+ 		os=-netbsd
+ 		;;
+ 	netwinder)
+ 		basic_machine=armv4l-rebel
+ 		os=-linux
+ 		;;
+ 	news | news700 | news800 | news900)
+ 		basic_machine=m68k-sony
+ 		os=-newsos
+ 		;;
+ 	news1000)
+ 		basic_machine=m68030-sony
+ 		os=-newsos
+ 		;;
+ 	news-3600 | risc-news)
+ 		basic_machine=mips-sony
+ 		os=-newsos
+ 		;;
+ 	necv70)
+ 		basic_machine=v70-nec
+ 		os=-sysv
+ 		;;
+ 	next | m*-next )
+ 		basic_machine=m68k-next
+ 		case $os in
+ 		    -nextstep* )
+ 			;;
+ 		    -ns2*)
+ 		      os=-nextstep2
+ 			;;
+ 		    *)
+ 		      os=-nextstep3
+ 			;;
+ 		esac
+ 		;;
+ 	nh3000)
+ 		basic_machine=m68k-harris
+ 		os=-cxux
+ 		;;
+ 	nh[45]000)
+ 		basic_machine=m88k-harris
+ 		os=-cxux
+ 		;;
+ 	nindy960)
+ 		basic_machine=i960-intel
+ 		os=-nindy
+ 		;;
+ 	mon960)
+ 		basic_machine=i960-intel
+ 		os=-mon960
+ 		;;
+ 	nonstopux)
+ 		basic_machine=mips-compaq
+ 		os=-nonstopux
+ 		;;
+ 	np1)
+ 		basic_machine=np1-gould
+ 		;;
+ 	nsr-tandem)
+ 		basic_machine=nsr-tandem
+ 		;;
+ 	op50n-* | op60c-*)
+ 		basic_machine=hppa1.1-oki
+ 		os=-proelf
+ 		;;
+ 	openrisc | openrisc-*)
+ 		basic_machine=or32-unknown
+ 		;;
+ 	os400)
+ 		basic_machine=powerpc-ibm
+ 		os=-os400
+ 		;;
+ 	OSE68000 | ose68000)
+ 		basic_machine=m68000-ericsson
+ 		os=-ose
+ 		;;
+ 	os68k)
+ 		basic_machine=m68k-none
+ 		os=-os68k
+ 		;;
+ 	pa-hitachi)
+ 		basic_machine=hppa1.1-hitachi
+ 		os=-hiuxwe2
+ 		;;
+ 	paragon)
+ 		basic_machine=i860-intel
+ 		os=-osf
+ 		;;
+ 	pbd)
+ 		basic_machine=sparc-tti
+ 		;;
+ 	pbb)
+ 		basic_machine=m68k-tti
+ 		;;
+ 	pc532 | pc532-*)
+ 		basic_machine=ns32k-pc532
+ 		;;
+ 	pentium | p5 | k5 | k6 | nexgen | viac3)
+ 		basic_machine=i586-pc
+ 		;;
+ 	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ 		basic_machine=i686-pc
+ 		;;
+ 	pentiumii | pentium2 | pentiumiii | pentium3)
+ 		basic_machine=i686-pc
+ 		;;
+ 	pentium4)
+ 		basic_machine=i786-pc
+ 		;;
+ 	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ 		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ 		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ 		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	pentium4-*)
+ 		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	pn)
+ 		basic_machine=pn-gould
+ 		;;
+ 	power)	basic_machine=power-ibm
+ 		;;
+ 	ppc)	basic_machine=powerpc-unknown
+ 		;;
+ 	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	ppcle | powerpclittle | ppc-le | powerpc-little)
+ 		basic_machine=powerpcle-unknown
+ 		;;
+ 	ppcle-* | powerpclittle-*)
+ 		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	ppc64)	basic_machine=powerpc64-unknown
+ 		;;
+ 	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ 		basic_machine=powerpc64le-unknown
+ 		;;
+ 	ppc64le-* | powerpc64little-*)
+ 		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	ps2)
+ 		basic_machine=i386-ibm
+ 		;;
+ 	pw32)
+ 		basic_machine=i586-unknown
+ 		os=-pw32
+ 		;;
+ 	rom68k)
+ 		basic_machine=m68k-rom68k
+ 		os=-coff
+ 		;;
+ 	rm[46]00)
+ 		basic_machine=mips-siemens
+ 		;;
+ 	rtpc | rtpc-*)
+ 		basic_machine=romp-ibm
+ 		;;
+ 	s390 | s390-*)
+ 		basic_machine=s390-ibm
+ 		;;
+ 	s390x | s390x-*)
+ 		basic_machine=s390x-ibm
+ 		;;
+ 	sa29200)
+ 		basic_machine=a29k-amd
+ 		os=-udi
+ 		;;
+ 	sb1)
+ 		basic_machine=mipsisa64sb1-unknown
+ 		;;
+ 	sb1el)
+ 		basic_machine=mipsisa64sb1el-unknown
+ 		;;
+ 	sei)
+ 		basic_machine=mips-sei
+ 		os=-seiux
+ 		;;
+ 	sequent)
+ 		basic_machine=i386-sequent
+ 		;;
+ 	sh)
+ 		basic_machine=sh-hitachi
+ 		os=-hms
+ 		;;
+ 	sh64)
+ 		basic_machine=sh64-unknown
+ 		;;
+ 	sparclite-wrs | simso-wrs)
+ 		basic_machine=sparclite-wrs
+ 		os=-vxworks
+ 		;;
+ 	sps7)
+ 		basic_machine=m68k-bull
+ 		os=-sysv2
+ 		;;
+ 	spur)
+ 		basic_machine=spur-unknown
+ 		;;
+ 	st2000)
+ 		basic_machine=m68k-tandem
+ 		;;
+ 	stratus)
+ 		basic_machine=i860-stratus
+ 		os=-sysv4
+ 		;;
+ 	sun2)
+ 		basic_machine=m68000-sun
+ 		;;
+ 	sun2os3)
+ 		basic_machine=m68000-sun
+ 		os=-sunos3
+ 		;;
+ 	sun2os4)
+ 		basic_machine=m68000-sun
+ 		os=-sunos4
+ 		;;
+ 	sun3os3)
+ 		basic_machine=m68k-sun
+ 		os=-sunos3
+ 		;;
+ 	sun3os4)
+ 		basic_machine=m68k-sun
+ 		os=-sunos4
+ 		;;
+ 	sun4os3)
+ 		basic_machine=sparc-sun
+ 		os=-sunos3
+ 		;;
+ 	sun4os4)
+ 		basic_machine=sparc-sun
+ 		os=-sunos4
+ 		;;
+ 	sun4sol2)
+ 		basic_machine=sparc-sun
+ 		os=-solaris2
+ 		;;
+ 	sun3 | sun3-*)
+ 		basic_machine=m68k-sun
+ 		;;
+ 	sun4)
+ 		basic_machine=sparc-sun
+ 		;;
+ 	sun386 | sun386i | roadrunner)
+ 		basic_machine=i386-sun
+ 		;;
+ 	sv1)
+ 		basic_machine=sv1-cray
+ 		os=-unicos
+ 		;;
+ 	symmetry)
+ 		basic_machine=i386-sequent
+ 		os=-dynix
+ 		;;
+ 	t3e)
+ 		basic_machine=alphaev5-cray
+ 		os=-unicos
+ 		;;
+ 	t90)
+ 		basic_machine=t90-cray
+ 		os=-unicos
+ 		;;
+ 	tic54x | c54x*)
+ 		basic_machine=tic54x-unknown
+ 		os=-coff
+ 		;;
+ 	tic55x | c55x*)
+ 		basic_machine=tic55x-unknown
+ 		os=-coff
+ 		;;
+ 	tic6x | c6x*)
+ 		basic_machine=tic6x-unknown
+ 		os=-coff
+ 		;;
+ 	tx39)
+ 		basic_machine=mipstx39-unknown
+ 		;;
+ 	tx39el)
+ 		basic_machine=mipstx39el-unknown
+ 		;;
+ 	toad1)
+ 		basic_machine=pdp10-xkl
+ 		os=-tops20
+ 		;;
+ 	tower | tower-32)
+ 		basic_machine=m68k-ncr
+ 		;;
+ 	tpf)
+ 		basic_machine=s390x-ibm
+ 		os=-tpf
+ 		;;
+ 	udi29k)
+ 		basic_machine=a29k-amd
+ 		os=-udi
+ 		;;
+ 	ultra3)
+ 		basic_machine=a29k-nyu
+ 		os=-sym1
+ 		;;
+ 	v810 | necv810)
+ 		basic_machine=v810-nec
+ 		os=-none
+ 		;;
+ 	vaxv)
+ 		basic_machine=vax-dec
+ 		os=-sysv
+ 		;;
+ 	vms)
+ 		basic_machine=vax-dec
+ 		os=-vms
+ 		;;
+ 	vpp*|vx|vx-*)
+ 		basic_machine=f301-fujitsu
+ 		;;
+ 	vxworks960)
+ 		basic_machine=i960-wrs
+ 		os=-vxworks
+ 		;;
+ 	vxworks68)
+ 		basic_machine=m68k-wrs
+ 		os=-vxworks
+ 		;;
+ 	vxworks29k)
+ 		basic_machine=a29k-wrs
+ 		os=-vxworks
+ 		;;
+ 	w65*)
+ 		basic_machine=w65-wdc
+ 		os=-none
+ 		;;
+ 	w89k-*)
+ 		basic_machine=hppa1.1-winbond
+ 		os=-proelf
+ 		;;
+ 	xbox)
+ 		basic_machine=i686-pc
+ 		os=-mingw32
+ 		;;
+ 	xps | xps100)
+ 		basic_machine=xps100-honeywell
+ 		;;
+ 	ymp)
+ 		basic_machine=ymp-cray
+ 		os=-unicos
+ 		;;
+ 	z8k-*-coff)
+ 		basic_machine=z8k-unknown
+ 		os=-sim
+ 		;;
+ 	none)
+ 		basic_machine=none-none
+ 		os=-none
+ 		;;
+ 
+ # Here we handle the default manufacturer of certain CPU types.  It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ 	w89k)
+ 		basic_machine=hppa1.1-winbond
+ 		;;
+ 	op50n)
+ 		basic_machine=hppa1.1-oki
+ 		;;
+ 	op60c)
+ 		basic_machine=hppa1.1-oki
+ 		;;
+ 	romp)
+ 		basic_machine=romp-ibm
+ 		;;
+ 	mmix)
+ 		basic_machine=mmix-knuth
+ 		;;
+ 	rs6000)
+ 		basic_machine=rs6000-ibm
+ 		;;
+ 	vax)
+ 		basic_machine=vax-dec
+ 		;;
+ 	pdp10)
+ 		# there are many clones, so DEC is not a safe bet
+ 		basic_machine=pdp10-unknown
+ 		;;
+ 	pdp11)
+ 		basic_machine=pdp11-dec
+ 		;;
+ 	we32k)
+ 		basic_machine=we32k-att
+ 		;;
+ 	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+ 		basic_machine=sh-unknown
+ 		;;
+ 	sparc | sparcv8 | sparcv9 | sparcv9b)
+ 		basic_machine=sparc-sun
+ 		;;
+ 	cydra)
+ 		basic_machine=cydra-cydrome
+ 		;;
+ 	orion)
+ 		basic_machine=orion-highlevel
+ 		;;
+ 	orion105)
+ 		basic_machine=clipper-highlevel
+ 		;;
+ 	mac | mpw | mac-mpw)
+ 		basic_machine=m68k-apple
+ 		;;
+ 	pmac | pmac-mpw)
+ 		basic_machine=powerpc-apple
+ 		;;
+ 	*-unknown)
+ 		# Make sure to match an already-canonicalized machine name.
+ 		;;
+ 	*)
+ 		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ 		exit 1
+ 		;;
+ esac
+ 
+ # Here we canonicalize certain aliases for manufacturers.
+ case $basic_machine in
+ 	*-digital*)
+ 		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ 		;;
+ 	*-commodore*)
+ 		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ 		;;
+ 	*)
+ 		;;
+ esac
+ 
+ # Decode manufacturer-specific aliases for certain operating systems.
+ 
+ if [ x"$os" != x"" ]
+ then
+ case $os in
+         # First match some system type aliases
+         # that might get confused with valid system types.
+ 	# -solaris* is a basic system type, with this one exception.
+ 	-solaris1 | -solaris1.*)
+ 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ 		;;
+ 	-solaris)
+ 		os=-solaris2
+ 		;;
+ 	-svr4*)
+ 		os=-sysv4
+ 		;;
+ 	-unixware*)
+ 		os=-sysv4.2uw
+ 		;;
+ 	-gnu/linux*)
+ 		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ 		;;
+ 	# First accept the basic system types.
+ 	# The portable systems comes first.
+ 	# Each alternative MUST END IN A *, to match a version number.
+ 	# -sysv* is not here because it comes later, after sysvr4.
+ 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ 	      | -aos* \
+ 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+ 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ 	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ 	      | -skyos* | -haiku*)
+ 	# Remember, each alternative MUST END IN *, to match a version number.
+ 		;;
+ 	-qnx*)
+ 		case $basic_machine in
+ 		    x86-* | i*86-*)
+ 			;;
+ 		    *)
+ 			os=-nto$os
+ 			;;
+ 		esac
+ 		;;
+ 	-nto-qnx*)
+ 		;;
+ 	-nto*)
+ 		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ 		;;
+ 	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ 	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ 	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ 		;;
+ 	-mac*)
+ 		os=`echo $os | sed -e 's|mac|macos|'`
+ 		;;
+ 	-linux-dietlibc)
+ 		os=-linux-dietlibc
+ 		;;
+ 	-linux*)
+ 		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ 		;;
+ 	-sunos5*)
+ 		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ 		;;
+ 	-sunos6*)
+ 		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ 		;;
+ 	-opened*)
+ 		os=-openedition
+ 		;;
+         -os400*)
+ 		os=-os400
+ 		;;
+ 	-wince*)
+ 		os=-wince
+ 		;;
+ 	-osfrose*)
+ 		os=-osfrose
+ 		;;
+ 	-osf*)
+ 		os=-osf
+ 		;;
+ 	-utek*)
+ 		os=-bsd
+ 		;;
+ 	-dynix*)
+ 		os=-bsd
+ 		;;
+ 	-acis*)
+ 		os=-aos
+ 		;;
+ 	-atheos*)
+ 		os=-atheos
+ 		;;
+ 	-syllable*)
+ 		os=-syllable
+ 		;;
+ 	-386bsd)
+ 		os=-bsd
+ 		;;
+ 	-ctix* | -uts*)
+ 		os=-sysv
+ 		;;
+ 	-nova*)
+ 		os=-rtmk-nova
+ 		;;
+ 	-ns2 )
+ 		os=-nextstep2
+ 		;;
+ 	-nsk*)
+ 		os=-nsk
+ 		;;
+ 	# Preserve the version number of sinix5.
+ 	-sinix5.*)
+ 		os=`echo $os | sed -e 's|sinix|sysv|'`
+ 		;;
+ 	-sinix*)
+ 		os=-sysv4
+ 		;;
+         -tpf*)
+ 		os=-tpf
+ 		;;
+ 	-triton*)
+ 		os=-sysv3
+ 		;;
+ 	-oss*)
+ 		os=-sysv3
+ 		;;
+ 	-svr4)
+ 		os=-sysv4
+ 		;;
+ 	-svr3)
+ 		os=-sysv3
+ 		;;
+ 	-sysvr4)
+ 		os=-sysv4
+ 		;;
+ 	# This must come after -sysvr4.
+ 	-sysv*)
+ 		;;
+ 	-ose*)
+ 		os=-ose
+ 		;;
+ 	-es1800*)
+ 		os=-ose
+ 		;;
+ 	-xenix)
+ 		os=-xenix
+ 		;;
+ 	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ 		os=-mint
+ 		;;
+ 	-aros*)
+ 		os=-aros
+ 		;;
+ 	-kaos*)
+ 		os=-kaos
+ 		;;
+ 	-zvmoe)
+ 		os=-zvmoe
+ 		;;
+ 	-none)
+ 		;;
+ 	*)
+ 		# Get rid of the `-' at the beginning of $os.
+ 		os=`echo $os | sed 's/[^-]*-//'`
+ 		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ 		exit 1
+ 		;;
+ esac
+ else
+ 
+ # Here we handle the default operating systems that come with various machines.
+ # The value should be what the vendor currently ships out the door with their
+ # machine or put another way, the most popular os provided with the machine.
+ 
+ # Note that if you're going to try to match "-MANUFACTURER" here (say,
+ # "-sun"), then you have to tell the case statement up towards the top
+ # that MANUFACTURER isn't an operating system.  Otherwise, code above
+ # will signal an error saying that MANUFACTURER isn't an operating
+ # system, and we'll never get to this point.
+ 
+ case $basic_machine in
+ 	*-acorn)
+ 		os=-riscix1.2
+ 		;;
+ 	arm*-rebel)
+ 		os=-linux
+ 		;;
+ 	arm*-semi)
+ 		os=-aout
+ 		;;
+     c4x-* | tic4x-*)
+         os=-coff
+         ;;
+ 	# This must come before the *-dec entry.
+ 	pdp10-*)
+ 		os=-tops20
+ 		;;
+ 	pdp11-*)
+ 		os=-none
+ 		;;
+ 	*-dec | vax-*)
+ 		os=-ultrix4.2
+ 		;;
+ 	m68*-apollo)
+ 		os=-domain
+ 		;;
+ 	i386-sun)
+ 		os=-sunos4.0.2
+ 		;;
+ 	m68000-sun)
+ 		os=-sunos3
+ 		# This also exists in the configure program, but was not the
+ 		# default.
+ 		# os=-sunos4
+ 		;;
+ 	m68*-cisco)
+ 		os=-aout
+ 		;;
+ 	mips*-cisco)
+ 		os=-elf
+ 		;;
+ 	mips*-*)
+ 		os=-elf
+ 		;;
+ 	or32-*)
+ 		os=-coff
+ 		;;
+ 	*-tti)	# must be before sparc entry or we get the wrong os.
+ 		os=-sysv3
+ 		;;
+ 	sparc-* | *-sun)
+ 		os=-sunos4.1.1
+ 		;;
+ 	*-be)
+ 		os=-beos
+ 		;;
+ 	*-haiku)
+ 		os=-haiku
+ 		;;
+ 	*-ibm)
+ 		os=-aix
+ 		;;
+     	*-knuth)
+ 		os=-mmixware
+ 		;;
+ 	*-wec)
+ 		os=-proelf
+ 		;;
+ 	*-winbond)
+ 		os=-proelf
+ 		;;
+ 	*-oki)
+ 		os=-proelf
+ 		;;
+ 	*-hp)
+ 		os=-hpux
+ 		;;
+ 	*-hitachi)
+ 		os=-hiux
+ 		;;
+ 	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ 		os=-sysv
+ 		;;
+ 	*-cbm)
+ 		os=-amigaos
+ 		;;
+ 	*-dg)
+ 		os=-dgux
+ 		;;
+ 	*-dolphin)
+ 		os=-sysv3
+ 		;;
+ 	m68k-ccur)
+ 		os=-rtu
+ 		;;
+ 	m88k-omron*)
+ 		os=-luna
+ 		;;
+ 	*-next )
+ 		os=-nextstep
+ 		;;
+ 	*-sequent)
+ 		os=-ptx
+ 		;;
+ 	*-crds)
+ 		os=-unos
+ 		;;
+ 	*-ns)
+ 		os=-genix
+ 		;;
+ 	i370-*)
+ 		os=-mvs
+ 		;;
+ 	*-next)
+ 		os=-nextstep3
+ 		;;
+ 	*-gould)
+ 		os=-sysv
+ 		;;
+ 	*-highlevel)
+ 		os=-bsd
+ 		;;
+ 	*-encore)
+ 		os=-bsd
+ 		;;
+ 	*-sgi)
+ 		os=-irix
+ 		;;
+ 	*-siemens)
+ 		os=-sysv4
+ 		;;
+ 	*-masscomp)
+ 		os=-rtu
+ 		;;
+ 	f30[01]-fujitsu | f700-fujitsu)
+ 		os=-uxpv
+ 		;;
+ 	*-rom68k)
+ 		os=-coff
+ 		;;
+ 	*-*bug)
+ 		os=-coff
+ 		;;
+ 	*-apple)
+ 		os=-macos
+ 		;;
+ 	*-atari*)
+ 		os=-mint
+ 		;;
+ 	*)
+ 		os=-none
+ 		;;
+ esac
+ fi
+ 
+ # Here we handle the case where we know the os, and the CPU type, but not the
+ # manufacturer.  We pick the logical manufacturer.
+ vendor=unknown
+ case $basic_machine in
+ 	*-unknown)
+ 		case $os in
+ 			-riscix*)
+ 				vendor=acorn
+ 				;;
+ 			-sunos*)
+ 				vendor=sun
+ 				;;
+ 			-aix*)
+ 				vendor=ibm
+ 				;;
+ 			-beos*)
+ 				vendor=be
+ 				;;
+ 			-hpux*)
+ 				vendor=hp
+ 				;;
+ 			-mpeix*)
+ 				vendor=hp
+ 				;;
+ 			-hiux*)
+ 				vendor=hitachi
+ 				;;
+ 			-unos*)
+ 				vendor=crds
+ 				;;
+ 			-dgux*)
+ 				vendor=dg
+ 				;;
+ 			-luna*)
+ 				vendor=omron
+ 				;;
+ 			-genix*)
+ 				vendor=ns
+ 				;;
+ 			-mvs* | -opened*)
+ 				vendor=ibm
+ 				;;
+ 			-os400*)
+ 				vendor=ibm
+ 				;;
+ 			-ptx*)
+ 				vendor=sequent
+ 				;;
+ 			-tpf*)
+ 				vendor=ibm
+ 				;;
+ 			-vxsim* | -vxworks* | -windiss*)
+ 				vendor=wrs
+ 				;;
+ 			-aux*)
+ 				vendor=apple
+ 				;;
+ 			-hms*)
+ 				vendor=hitachi
+ 				;;
+ 			-mpw* | -macos*)
+ 				vendor=apple
+ 				;;
+ 			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ 				vendor=atari
+ 				;;
+ 			-vos*)
+ 				vendor=stratus
+ 				;;
+ 		esac
+ 		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ 		;;
+ esac
+ 
+ echo $basic_machine$os
+ exit
+ 
+ # Local variables:
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "timestamp='"
+ # time-stamp-format: "%:y-%02m-%02d"
+ # time-stamp-end: "'"
+ # End:
diff -Nrcpad gcc-4.0.2/libjava/classpath/configure gcc-4.1.0/libjava/classpath/configure
*** gcc-4.0.2/libjava/classpath/configure	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/configure	Thu Dec  1 20:09:06 2005
***************
*** 0 ****
--- 1,16295 ----
+ #! /bin/sh
+ # Guess values for system-dependent variables and create Makefiles.
+ # Generated by GNU Autoconf 2.59 for GNU Classpath 0.20-pre.
+ #
+ # Report bugs to <classpath@gnu.org>.
+ #
+ # Copyright (C) 2003 Free Software Foundation, Inc.
+ # This configure script is free software; the Free Software Foundation
+ # gives unlimited permission to copy, distribute and modify it.
+ ## --------------------- ##
+ ## M4sh Initialization.  ##
+ ## --------------------- ##
+ 
+ # Be Bourne compatible
+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+   emulate sh
+   NULLCMD=:
+   # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+   # is contrary to our usage.  Disable this feature.
+   alias -g '${1+"$@"}'='"$@"'
+ elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+   set -o posix
+ fi
+ DUALCASE=1; export DUALCASE # for MKS sh
+ 
+ # Support unset when possible.
+ if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+   as_unset=unset
+ else
+   as_unset=false
+ fi
+ 
+ 
+ # Work around bugs in pre-3.0 UWIN ksh.
+ $as_unset ENV MAIL MAILPATH
+ PS1='$ '
+ PS2='> '
+ PS4='+ '
+ 
+ # NLS nuisances.
+ for as_var in \
+   LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+   LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+   LC_TELEPHONE LC_TIME
+ do
+   if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+     eval $as_var=C; export $as_var
+   else
+     $as_unset $as_var
+   fi
+ done
+ 
+ # Required to use basename.
+ if expr a : '\(a\)' >/dev/null 2>&1; then
+   as_expr=expr
+ else
+   as_expr=false
+ fi
+ 
+ if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+   as_basename=basename
+ else
+   as_basename=false
+ fi
+ 
+ 
+ # Name of the executable.
+ as_me=`$as_basename "$0" ||
+ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ 	 X"$0" : 'X\(//\)$' \| \
+ 	 X"$0" : 'X\(/\)$' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X/"$0" |
+     sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+   	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\/\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+ 
+ 
+ # PATH needs CR, and LINENO needs CR and PATH.
+ # Avoid depending upon Character Ranges.
+ as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+ as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+ as_cr_digits='0123456789'
+ as_cr_alnum=$as_cr_Letters$as_cr_digits
+ 
+ # The user is always right.
+ if test "${PATH_SEPARATOR+set}" != set; then
+   echo "#! /bin/sh" >conf$$.sh
+   echo  "exit 0"   >>conf$$.sh
+   chmod +x conf$$.sh
+   if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+     PATH_SEPARATOR=';'
+   else
+     PATH_SEPARATOR=:
+   fi
+   rm -f conf$$.sh
+ fi
+ 
+ 
+   as_lineno_1=$LINENO
+   as_lineno_2=$LINENO
+   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+   test "x$as_lineno_1" != "x$as_lineno_2" &&
+   test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+   # Find who we are.  Look in the path if we contain no path at all
+   # relative or not.
+   case $0 in
+     *[\\/]* ) as_myself=$0 ;;
+     *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+ 
+        ;;
+   esac
+   # We did not find ourselves, most probably we were run as `sh COMMAND'
+   # in which case we are not to be found in the path.
+   if test "x$as_myself" = x; then
+     as_myself=$0
+   fi
+   if test ! -f "$as_myself"; then
+     { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+    { (exit 1); exit 1; }; }
+   fi
+   case $CONFIG_SHELL in
+   '')
+     as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for as_base in sh bash ksh sh5; do
+ 	 case $as_dir in
+ 	 /*)
+ 	   if ("$as_dir/$as_base" -c '
+   as_lineno_1=$LINENO
+   as_lineno_2=$LINENO
+   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+   test "x$as_lineno_1" != "x$as_lineno_2" &&
+   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+ 	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ 	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ 	     CONFIG_SHELL=$as_dir/$as_base
+ 	     export CONFIG_SHELL
+ 	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ 	   fi;;
+ 	 esac
+        done
+ done
+ ;;
+   esac
+ 
+   # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+   # uniformly replaced by the line number.  The first 'sed' inserts a
+   # line-number line before each line; the second 'sed' does the real
+   # work.  The second script uses 'N' to pair each line-number line
+   # with the numbered line, and appends trailing '-' during
+   # substitution so that $LINENO is not a special case at line end.
+   # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+   # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+   sed '=' <$as_myself |
+     sed '
+       N
+       s,$,-,
+       : loop
+       s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+       t loop
+       s,-$,,
+       s,^['$as_cr_digits']*\n,,
+     ' >$as_me.lineno &&
+   chmod +x $as_me.lineno ||
+     { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+    { (exit 1); exit 1; }; }
+ 
+   # Don't try to exec as it changes $[0], causing all sort of problems
+   # (the dirname of $[0] is not the place where we might find the
+   # original and so on.  Autoconf is especially sensible to this).
+   . ./$as_me.lineno
+   # Exit status is that of the last command.
+   exit
+ }
+ 
+ 
+ case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+   *c*,-n*) ECHO_N= ECHO_C='
+ ' ECHO_T='	' ;;
+   *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+   *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+ esac
+ 
+ if expr a : '\(a\)' >/dev/null 2>&1; then
+   as_expr=expr
+ else
+   as_expr=false
+ fi
+ 
+ rm -f conf$$ conf$$.exe conf$$.file
+ echo >conf$$.file
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+   # We could just check for DJGPP; but this test a) works b) is more generic
+   # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+   if test -f conf$$.exe; then
+     # Don't use ln at all; we don't have any links
+     as_ln_s='cp -p'
+   else
+     as_ln_s='ln -s'
+   fi
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+   as_ln_s=ln
+ else
+   as_ln_s='cp -p'
+ fi
+ rm -f conf$$ conf$$.exe conf$$.file
+ 
+ if mkdir -p . 2>/dev/null; then
+   as_mkdir_p=:
+ else
+   test -d ./-p && rmdir ./-p
+   as_mkdir_p=false
+ fi
+ 
+ as_executable_p="test -f"
+ 
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ # Sed expression to map a string onto a valid variable name.
+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ 
+ # IFS
+ # We need space, tab and new line, in precisely that order.
+ as_nl='
+ '
+ IFS=" 	$as_nl"
+ 
+ # CDPATH.
+ $as_unset CDPATH
+ 
+ 
+ # Name of the host.
+ # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+ # so uname gets run too.
+ ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+ 
+ exec 6>&1
+ 
+ #
+ # Initializations.
+ #
+ ac_default_prefix=/usr/local
+ ac_config_libobj_dir=.
+ cross_compiling=no
+ subdirs=
+ MFLAGS=
+ MAKEFLAGS=
+ SHELL=${CONFIG_SHELL-/bin/sh}
+ 
+ # Maximum number of lines to put in a shell here document.
+ # This variable seems obsolete.  It should probably be removed, and
+ # only ac_max_sed_lines should be used.
+ : ${ac_max_here_lines=38}
+ 
+ # Identity of this package.
+ PACKAGE_NAME='GNU Classpath'
+ PACKAGE_TARNAME='classpath'
+ PACKAGE_VERSION='0.20-pre'
+ PACKAGE_STRING='GNU Classpath 0.20-pre'
+ PACKAGE_BUGREPORT='classpath@gnu.org'
+ 
+ ac_unique_file="java/lang/System.java"
+ ac_default_prefix=/usr/local/classpath
+ # Factoring default headers for most tests.
+ ac_includes_default="\
+ #include <stdio.h>
+ #if HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+ #if HAVE_SYS_STAT_H
+ # include <sys/stat.h>
+ #endif
+ #if STDC_HEADERS
+ # include <stdlib.h>
+ # include <stddef.h>
+ #else
+ # if HAVE_STDLIB_H
+ #  include <stdlib.h>
+ # endif
+ #endif
+ #if HAVE_STRING_H
+ # if !STDC_HEADERS && HAVE_MEMORY_H
+ #  include <memory.h>
+ # endif
+ # include <string.h>
+ #endif
+ #if HAVE_STRINGS_H
+ # include <strings.h>
+ #endif
+ #if HAVE_INTTYPES_H
+ # include <inttypes.h>
+ #else
+ # if HAVE_STDINT_H
+ #  include <stdint.h>
+ # endif
+ #endif
+ #if HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif"
+ 
+ ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os LIBVERSION CLASSPATH_MODULE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CREATE_JNI_LIBRARIES_TRUE CREATE_JNI_LIBRARIES_FALSE CREATE_CORE_JNI_LIBRARIES_TRUE CREATE_CORE_JNI_LIBRARIES_FALSE default_toolkit CREATE_XMLJ_LIBRARY_TRUE CREATE_XMLJ_LIBRARY_FALSE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP CREATE_ALSA_LIBRARIES_TRUE CREATE_ALSA_LIBRARIES_FALSE CREATE_DSSI_LIBRARIES_TRUE CREATE_DSSI_LIBRARIES_FALSE CREATE_GTK_PEER_LIBRARIES_TRUE CREATE_GTK_PEER_LIBRARIES_FALSE GTK_CAIRO_ENABLED GTK_CAIRO_TRUE GTK_CAIRO_FALSE CREATE_QT_PEER_LIBRARIES_TRUE CREATE_QT_PEER_LIBRARIES_FALSE nativelibdir glibjdir CREATE_JNI_HEADERS_TRUE CREATE_JNI_HEADERS_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP LIBICONV LTLIBICONV WARNING_CFLAGS STRICT_WARNING_CFLAGS ERROR_CFLAGS PKG_CONFIG XML_CFLAGS XML_LIBS XSLT_CFLAGS XSLT_LIBS X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS GTK_CFLAGS GTK_LIBS CAIRO_CFLAGS CAIRO_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS QT_CFLAGS QT_LIBS MOC USER_JAVAH USER_SPECIFIED_JAVAH_TRUE USER_SPECIFIED_JAVAH_FALSE CLASSPATH_INCLUDES GCJ JIKES JIKESENCODING KJC GCJX ECJ FOUND_GCJ_TRUE FOUND_GCJ_FALSE FOUND_JIKES_TRUE FOUND_JIKES_FALSE FOUND_ECJ_TRUE FOUND_ECJ_FALSE FOUND_KJC_TRUE FOUND_KJC_FALSE FOUND_GCJX_TRUE FOUND_GCJX_FALSE USER_CLASSLIB USER_SPECIFIED_CLASSLIB_TRUE USER_SPECIFIED_CLASSLIB_FALSE vm_classes MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBDEBUG INIT_LOAD_LIBRARY JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION REMOVE MKDIR CP DATE FIND ZIP INSTALL_GLIBJ_ZIP_TRUE INSTALL_GLIBJ_ZIP_FALSE INSTALL_CLASS_FILES_TRUE INSTALL_CLASS_FILES_FALSE BUILD_CLASS_FILES_TRUE BUILD_CLASS_FILES_FALSE EXAMPLESDIR GJDOC CREATE_API_DOCS_TRUE CREATE_API_DOCS_FALSE JAY JAY_SKELETON REGEN_PARSERS_TRUE REGEN_PARSERS_FALSE LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+ 
+ # Initialize some variables set by options.
+ ac_init_help=
+ ac_init_version=false
+ # The variables have the same names as the options, with
+ # dashes changed to underlines.
+ cache_file=/dev/null
+ exec_prefix=NONE
+ no_create=
+ no_recursion=
+ prefix=NONE
+ program_prefix=NONE
+ program_suffix=NONE
+ program_transform_name=s,x,x,
+ silent=
+ site=
+ srcdir=
+ verbose=
+ x_includes=NONE
+ x_libraries=NONE
+ 
+ # Installation directory options.
+ # These are left unexpanded so users can "make install exec_prefix=/foo"
+ # and all the variables that are supposed to be based on exec_prefix
+ # by default will actually change.
+ # Use braces instead of parens because sh, perl, etc. also accept them.
+ bindir='${exec_prefix}/bin'
+ sbindir='${exec_prefix}/sbin'
+ libexecdir='${exec_prefix}/libexec'
+ datadir='${prefix}/share'
+ sysconfdir='${prefix}/etc'
+ sharedstatedir='${prefix}/com'
+ localstatedir='${prefix}/var'
+ libdir='${exec_prefix}/lib'
+ includedir='${prefix}/include'
+ oldincludedir='/usr/include'
+ infodir='${prefix}/info'
+ mandir='${prefix}/man'
+ 
+ ac_prev=
+ for ac_option
+ do
+   # If the previous option needs an argument, assign it.
+   if test -n "$ac_prev"; then
+     eval "$ac_prev=\$ac_option"
+     ac_prev=
+     continue
+   fi
+ 
+   ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+ 
+   # Accept the important Cygnus configure options, so we can diagnose typos.
+ 
+   case $ac_option in
+ 
+   -bindir | --bindir | --bindi | --bind | --bin | --bi)
+     ac_prev=bindir ;;
+   -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+     bindir=$ac_optarg ;;
+ 
+   -build | --build | --buil | --bui | --bu)
+     ac_prev=build_alias ;;
+   -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+     build_alias=$ac_optarg ;;
+ 
+   -cache-file | --cache-file | --cache-fil | --cache-fi \
+   | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+     ac_prev=cache_file ;;
+   -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+   | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+     cache_file=$ac_optarg ;;
+ 
+   --config-cache | -C)
+     cache_file=config.cache ;;
+ 
+   -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+     ac_prev=datadir ;;
+   -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+   | --da=*)
+     datadir=$ac_optarg ;;
+ 
+   -disable-* | --disable-*)
+     ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+    { (exit 1); exit 1; }; }
+     ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+     eval "enable_$ac_feature=no" ;;
+ 
+   -enable-* | --enable-*)
+     ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+    { (exit 1); exit 1; }; }
+     ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+     case $ac_option in
+       *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+       *) ac_optarg=yes ;;
+     esac
+     eval "enable_$ac_feature='$ac_optarg'" ;;
+ 
+   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+   | --exec | --exe | --ex)
+     ac_prev=exec_prefix ;;
+   -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+   | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+   | --exec=* | --exe=* | --ex=*)
+     exec_prefix=$ac_optarg ;;
+ 
+   -gas | --gas | --ga | --g)
+     # Obsolete; use --with-gas.
+     with_gas=yes ;;
+ 
+   -help | --help | --hel | --he | -h)
+     ac_init_help=long ;;
+   -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+     ac_init_help=recursive ;;
+   -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+     ac_init_help=short ;;
+ 
+   -host | --host | --hos | --ho)
+     ac_prev=host_alias ;;
+   -host=* | --host=* | --hos=* | --ho=*)
+     host_alias=$ac_optarg ;;
+ 
+   -includedir | --includedir | --includedi | --included | --include \
+   | --includ | --inclu | --incl | --inc)
+     ac_prev=includedir ;;
+   -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+   | --includ=* | --inclu=* | --incl=* | --inc=*)
+     includedir=$ac_optarg ;;
+ 
+   -infodir | --infodir | --infodi | --infod | --info | --inf)
+     ac_prev=infodir ;;
+   -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+     infodir=$ac_optarg ;;
+ 
+   -libdir | --libdir | --libdi | --libd)
+     ac_prev=libdir ;;
+   -libdir=* | --libdir=* | --libdi=* | --libd=*)
+     libdir=$ac_optarg ;;
+ 
+   -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+   | --libexe | --libex | --libe)
+     ac_prev=libexecdir ;;
+   -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+   | --libexe=* | --libex=* | --libe=*)
+     libexecdir=$ac_optarg ;;
+ 
+   -localstatedir | --localstatedir | --localstatedi | --localstated \
+   | --localstate | --localstat | --localsta | --localst \
+   | --locals | --local | --loca | --loc | --lo)
+     ac_prev=localstatedir ;;
+   -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+   | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+   | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+     localstatedir=$ac_optarg ;;
+ 
+   -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+     ac_prev=mandir ;;
+   -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+     mandir=$ac_optarg ;;
+ 
+   -nfp | --nfp | --nf)
+     # Obsolete; use --without-fp.
+     with_fp=no ;;
+ 
+   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+   | --no-cr | --no-c | -n)
+     no_create=yes ;;
+ 
+   -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+   | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+     no_recursion=yes ;;
+ 
+   -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+   | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+   | --oldin | --oldi | --old | --ol | --o)
+     ac_prev=oldincludedir ;;
+   -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+   | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+   | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+     oldincludedir=$ac_optarg ;;
+ 
+   -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+     ac_prev=prefix ;;
+   -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+     prefix=$ac_optarg ;;
+ 
+   -program-prefix | --program-prefix | --program-prefi | --program-pref \
+   | --program-pre | --program-pr | --program-p)
+     ac_prev=program_prefix ;;
+   -program-prefix=* | --program-prefix=* | --program-prefi=* \
+   | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+     program_prefix=$ac_optarg ;;
+ 
+   -program-suffix | --program-suffix | --program-suffi | --program-suff \
+   | --program-suf | --program-su | --program-s)
+     ac_prev=program_suffix ;;
+   -program-suffix=* | --program-suffix=* | --program-suffi=* \
+   | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+     program_suffix=$ac_optarg ;;
+ 
+   -program-transform-name | --program-transform-name \
+   | --program-transform-nam | --program-transform-na \
+   | --program-transform-n | --program-transform- \
+   | --program-transform | --program-transfor \
+   | --program-transfo | --program-transf \
+   | --program-trans | --program-tran \
+   | --progr-tra | --program-tr | --program-t)
+     ac_prev=program_transform_name ;;
+   -program-transform-name=* | --program-transform-name=* \
+   | --program-transform-nam=* | --program-transform-na=* \
+   | --program-transform-n=* | --program-transform-=* \
+   | --program-transform=* | --program-transfor=* \
+   | --program-transfo=* | --program-transf=* \
+   | --program-trans=* | --program-tran=* \
+   | --progr-tra=* | --program-tr=* | --program-t=*)
+     program_transform_name=$ac_optarg ;;
+ 
+   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+   | -silent | --silent | --silen | --sile | --sil)
+     silent=yes ;;
+ 
+   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+     ac_prev=sbindir ;;
+   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+   | --sbi=* | --sb=*)
+     sbindir=$ac_optarg ;;
+ 
+   -sharedstatedir | --sharedstatedir | --sharedstatedi \
+   | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+   | --sharedst | --shareds | --shared | --share | --shar \
+   | --sha | --sh)
+     ac_prev=sharedstatedir ;;
+   -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+   | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+   | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+   | --sha=* | --sh=*)
+     sharedstatedir=$ac_optarg ;;
+ 
+   -site | --site | --sit)
+     ac_prev=site ;;
+   -site=* | --site=* | --sit=*)
+     site=$ac_optarg ;;
+ 
+   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+     ac_prev=srcdir ;;
+   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+     srcdir=$ac_optarg ;;
+ 
+   -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+   | --syscon | --sysco | --sysc | --sys | --sy)
+     ac_prev=sysconfdir ;;
+   -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+   | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+     sysconfdir=$ac_optarg ;;
+ 
+   -target | --target | --targe | --targ | --tar | --ta | --t)
+     ac_prev=target_alias ;;
+   -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+     target_alias=$ac_optarg ;;
+ 
+   -v | -verbose | --verbose | --verbos | --verbo | --verb)
+     verbose=yes ;;
+ 
+   -version | --version | --versio | --versi | --vers | -V)
+     ac_init_version=: ;;
+ 
+   -with-* | --with-*)
+     ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid package name: $ac_package" >&2
+    { (exit 1); exit 1; }; }
+     ac_package=`echo $ac_package| sed 's/-/_/g'`
+     case $ac_option in
+       *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+       *) ac_optarg=yes ;;
+     esac
+     eval "with_$ac_package='$ac_optarg'" ;;
+ 
+   -without-* | --without-*)
+     ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid package name: $ac_package" >&2
+    { (exit 1); exit 1; }; }
+     ac_package=`echo $ac_package | sed 's/-/_/g'`
+     eval "with_$ac_package=no" ;;
+ 
+   --x)
+     # Obsolete; use --with-x.
+     with_x=yes ;;
+ 
+   -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+   | --x-incl | --x-inc | --x-in | --x-i)
+     ac_prev=x_includes ;;
+   -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+   | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+     x_includes=$ac_optarg ;;
+ 
+   -x-libraries | --x-libraries | --x-librarie | --x-librari \
+   | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+     ac_prev=x_libraries ;;
+   -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+     x_libraries=$ac_optarg ;;
+ 
+   -*) { echo "$as_me: error: unrecognized option: $ac_option
+ Try \`$0 --help' for more information." >&2
+    { (exit 1); exit 1; }; }
+     ;;
+ 
+   *=*)
+     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+    { (exit 1); exit 1; }; }
+     ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+     eval "$ac_envvar='$ac_optarg'"
+     export $ac_envvar ;;
+ 
+   *)
+     # FIXME: should be removed in autoconf 3.0.
+     echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+       echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+     ;;
+ 
+   esac
+ done
+ 
+ if test -n "$ac_prev"; then
+   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+   { echo "$as_me: error: missing argument to $ac_option" >&2
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ # Be sure to have absolute paths.
+ for ac_var in exec_prefix prefix
+ do
+   eval ac_val=$`echo $ac_var`
+   case $ac_val in
+     [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+     *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+    { (exit 1); exit 1; }; };;
+   esac
+ done
+ 
+ # Be sure to have absolute paths.
+ for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ 	      localstatedir libdir includedir oldincludedir infodir mandir
+ do
+   eval ac_val=$`echo $ac_var`
+   case $ac_val in
+     [\\/$]* | ?:[\\/]* ) ;;
+     *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+    { (exit 1); exit 1; }; };;
+   esac
+ done
+ 
+ # There might be people who depend on the old broken behavior: `$host'
+ # used to hold the argument of --host etc.
+ # FIXME: To remove some day.
+ build=$build_alias
+ host=$host_alias
+ target=$target_alias
+ 
+ # FIXME: To remove some day.
+ if test "x$host_alias" != x; then
+   if test "x$build_alias" = x; then
+     cross_compiling=maybe
+     echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+     If a cross compiler is detected then cross compile mode will be used." >&2
+   elif test "x$build_alias" != "x$host_alias"; then
+     cross_compiling=yes
+   fi
+ fi
+ 
+ ac_tool_prefix=
+ test -n "$host_alias" && ac_tool_prefix=$host_alias-
+ 
+ test "$silent" = yes && exec 6>/dev/null
+ 
+ 
+ # Find the source files, if location was not specified.
+ if test -z "$srcdir"; then
+   ac_srcdir_defaulted=yes
+   # Try the directory containing this script, then its parent.
+   ac_confdir=`(dirname "$0") 2>/dev/null ||
+ $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$0" : 'X\(//\)[^/]' \| \
+ 	 X"$0" : 'X\(//\)$' \| \
+ 	 X"$0" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$0" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+   srcdir=$ac_confdir
+   if test ! -r $srcdir/$ac_unique_file; then
+     srcdir=..
+   fi
+ else
+   ac_srcdir_defaulted=no
+ fi
+ if test ! -r $srcdir/$ac_unique_file; then
+   if test "$ac_srcdir_defaulted" = yes; then
+     { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+    { (exit 1); exit 1; }; }
+   else
+     { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+    { (exit 1); exit 1; }; }
+   fi
+ fi
+ (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+   { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+    { (exit 1); exit 1; }; }
+ srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ ac_env_build_alias_set=${build_alias+set}
+ ac_env_build_alias_value=$build_alias
+ ac_cv_env_build_alias_set=${build_alias+set}
+ ac_cv_env_build_alias_value=$build_alias
+ ac_env_host_alias_set=${host_alias+set}
+ ac_env_host_alias_value=$host_alias
+ ac_cv_env_host_alias_set=${host_alias+set}
+ ac_cv_env_host_alias_value=$host_alias
+ ac_env_target_alias_set=${target_alias+set}
+ ac_env_target_alias_value=$target_alias
+ ac_cv_env_target_alias_set=${target_alias+set}
+ ac_cv_env_target_alias_value=$target_alias
+ ac_env_CC_set=${CC+set}
+ ac_env_CC_value=$CC
+ ac_cv_env_CC_set=${CC+set}
+ ac_cv_env_CC_value=$CC
+ ac_env_CFLAGS_set=${CFLAGS+set}
+ ac_env_CFLAGS_value=$CFLAGS
+ ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ ac_cv_env_CFLAGS_value=$CFLAGS
+ ac_env_LDFLAGS_set=${LDFLAGS+set}
+ ac_env_LDFLAGS_value=$LDFLAGS
+ ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ ac_cv_env_LDFLAGS_value=$LDFLAGS
+ ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ ac_env_CPPFLAGS_value=$CPPFLAGS
+ ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ ac_env_CPP_set=${CPP+set}
+ ac_env_CPP_value=$CPP
+ ac_cv_env_CPP_set=${CPP+set}
+ ac_cv_env_CPP_value=$CPP
+ ac_env_CXX_set=${CXX+set}
+ ac_env_CXX_value=$CXX
+ ac_cv_env_CXX_set=${CXX+set}
+ ac_cv_env_CXX_value=$CXX
+ ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ ac_env_CXXFLAGS_value=$CXXFLAGS
+ ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ ac_env_CXXCPP_set=${CXXCPP+set}
+ ac_env_CXXCPP_value=$CXXCPP
+ ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ ac_cv_env_CXXCPP_value=$CXXCPP
+ 
+ #
+ # Report the --help message.
+ #
+ if test "$ac_init_help" = "long"; then
+   # Omit some internal or obsolete options to make the list less imposing.
+   # This message is too long to be a string in the A/UX 3.1 sh.
+   cat <<_ACEOF
+ \`configure' configures GNU Classpath 0.20-pre to adapt to many kinds of systems.
+ 
+ Usage: $0 [OPTION]... [VAR=VALUE]...
+ 
+ To assign environment variables (e.g., CC, CFLAGS...), specify them as
+ VAR=VALUE.  See below for descriptions of some of the useful variables.
+ 
+ Defaults for the options are specified in brackets.
+ 
+ Configuration:
+   -h, --help              display this help and exit
+       --help=short        display options specific to this package
+       --help=recursive    display the short help of all the included packages
+   -V, --version           display version information and exit
+   -q, --quiet, --silent   do not print \`checking...' messages
+       --cache-file=FILE   cache test results in FILE [disabled]
+   -C, --config-cache      alias for \`--cache-file=config.cache'
+   -n, --no-create         do not create output files
+       --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+ 
+ _ACEOF
+ 
+   cat <<_ACEOF
+ Installation directories:
+   --prefix=PREFIX         install architecture-independent files in PREFIX
+ 			  [$ac_default_prefix]
+   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+ 			  [PREFIX]
+ 
+ By default, \`make install' will install all the files in
+ \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+ an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+ for instance \`--prefix=\$HOME'.
+ 
+ For better control, use the options below.
+ 
+ Fine tuning of the installation directories:
+   --bindir=DIR           user executables [EPREFIX/bin]
+   --sbindir=DIR          system admin executables [EPREFIX/sbin]
+   --libexecdir=DIR       program executables [EPREFIX/libexec]
+   --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+   --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+   --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+   --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+   --libdir=DIR           object code libraries [EPREFIX/lib]
+   --includedir=DIR       C header files [PREFIX/include]
+   --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+   --infodir=DIR          info documentation [PREFIX/info]
+   --mandir=DIR           man documentation [PREFIX/man]
+ _ACEOF
+ 
+   cat <<\_ACEOF
+ 
+ Program names:
+   --program-prefix=PREFIX            prepend PREFIX to installed program names
+   --program-suffix=SUFFIX            append SUFFIX to installed program names
+   --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+ 
+ X features:
+   --x-includes=DIR    X include files are in DIR
+   --x-libraries=DIR   X library files are in DIR
+ 
+ System types:
+   --build=BUILD     configure for building on BUILD [guessed]
+   --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+   --target=TARGET   configure for building compilers for TARGET [HOST]
+ _ACEOF
+ fi
+ 
+ if test -n "$ac_init_help"; then
+   case $ac_init_help in
+      short | recursive ) echo "Configuration of GNU Classpath 0.20-pre:";;
+    esac
+   cat <<\_ACEOF
+ 
+ Optional Features:
+   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+   --enable-jni            compile JNI source default=yes
+   --enable-core-jni       compile JNI sources for core default=yes
+   --enable-Werror         whether to compile C code with -Werror which turns
+                           any compiler warning into a compilation failure
+                           default=no
+   --enable-default-toolkit
+                           fully qualified class name of default AWT toolkit
+   --enable-xmlj           compile native libxml/xslt library default=no
+   --disable-alsa          compile ALSA providers (enable by --enable-alsa)
+                           default=yes
+   --disable-dependency-tracking  speeds up one-time build
+   --enable-dependency-tracking   do not reject slow dependency extractors
+   --disable-dssi          compile DSSI providers (enable by --enable-dssi)
+                           default=yes
+   --disable-gtk-peer      compile GTK native peers (disabled by --disable-jni)
+                           default=yes
+ 
+   --enable-gtk-cairo      build the cairo Graphics2D implementation on GTK
+                           default=no
+   --enable-qt-peer        compile Qt4 native peers (disabled by --disable-jni)
+                           default=no
+   --enable-regen-headers  automatically regenerate JNI headers default=no
+   --enable-static=PKGS  build static libraries default=no
+   --enable-shared=PKGS  build shared libraries default=yes
+   --enable-fast-install=PKGS  optimize for fast installation default=yes
+   --disable-libtool-lock  avoid locking (might break parallel builds)
+   --disable-rpath         do not hardcode runtime library paths
+   --enable-maintainer-mode  enable make rules and dependencies not useful
+ 			  (and sometimes confusing) to the casual installer
+   --enable-debug          enable runtime debugging code
+   --enable-load-library   enable to use JNI native methods default=yes
+   --enable-java-lang-system-explicit-initialization
+                           will the VM explicitly invoke java.lang.System's
+                           static initialization methods default=no
+   --enable-examples       enable build of the examples default=yes
+   --enable-portable-native-sync
+                           synchronize VM threads portably
+ 
+ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+   --with-native-libdir    sets the installation directore for native libraries
+                           default='${libdir}/${PACKAGE}'
+   --with-glibj-dir        sets the installation directory for glibj.zip
+                           default='${libdir}/${PACKAGE}'
+   --with-gnu-ld           assume the C compiler uses GNU ld default=no
+   --with-pic              try to use only PIC/non-PIC objects default=use both
+   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+   --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+   --with-x                use the X Window System
+   --with-qt4dir=DIR       Qt4 installation directory used for OS-X. For other
+                           systems use pkg-config.
+   --with-javah            specify path or name of a javah-like program
+   --with-gcj              bytecode compilation with gcj
+   --with-jikes            bytecode compilation with jikes
+   --with-kjc              bytecode compilation with kjc
+   --with-gcjx             bytecode compilation with gcjx
+   --with-ecj              bytecode compilation with ecj
+   --with-classpath        specify path to a classes.zip like file
+   --with-vm-classes       specify path to VM override source files
+   --with-glibj            define what to install (zip|flat|both|none|build)
+                           [default=zip]
+   --with-gjdoc            generate documentation using gjdoc (default is NO)
+   --with-jay              Regenerate the parsers with jay must be given the
+                           path to the jay executable
+ 
+ Some influential environment variables:
+   CC          C compiler command
+   CFLAGS      C compiler flags
+   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+               nonstandard directory <lib dir>
+   CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+               headers in a nonstandard directory <include dir>
+   CPP         C preprocessor
+   CXX         C++ compiler command
+   CXXFLAGS    C++ compiler flags
+   CXXCPP      C++ preprocessor
+ 
+ Use these variables to override the choices made by `configure' or to help
+ it to find libraries and programs with nonstandard names/locations.
+ 
+ Report bugs to <classpath@gnu.org>.
+ _ACEOF
+ fi
+ 
+ if test "$ac_init_help" = "recursive"; then
+   # If there are subdirs, report their specific --help.
+   ac_popdir=`pwd`
+   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+     test -d $ac_dir || continue
+     ac_builddir=.
+ 
+ if test "$ac_dir" != .; then
+   ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+   # A "../" for each directory in $ac_dir_suffix.
+   ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+ else
+   ac_dir_suffix= ac_top_builddir=
+ fi
+ 
+ case $srcdir in
+   .)  # No --srcdir option.  We are building in place.
+     ac_srcdir=.
+     if test -z "$ac_top_builddir"; then
+        ac_top_srcdir=.
+     else
+        ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+     fi ;;
+   [\\/]* | ?:[\\/]* )  # Absolute path.
+     ac_srcdir=$srcdir$ac_dir_suffix;
+     ac_top_srcdir=$srcdir ;;
+   *) # Relative path.
+     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+     ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+ 
+ # Do not use `cd foo && pwd` to compute absolute paths, because
+ # the directories may not exist.
+ case `pwd` in
+ .) ac_abs_builddir="$ac_dir";;
+ *)
+   case "$ac_dir" in
+   .) ac_abs_builddir=`pwd`;;
+   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+   *) ac_abs_builddir=`pwd`/"$ac_dir";;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *)
+   case ${ac_top_builddir}. in
+   .) ac_abs_top_builddir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_srcdir=$ac_srcdir;;
+ *)
+   case $ac_srcdir in
+   .) ac_abs_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *)
+   case $ac_top_srcdir in
+   .) ac_abs_top_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+   esac;;
+ esac
+ 
+     cd $ac_dir
+     # Check for guested configure; otherwise get Cygnus style configure.
+     if test -f $ac_srcdir/configure.gnu; then
+       echo
+       $SHELL $ac_srcdir/configure.gnu  --help=recursive
+     elif test -f $ac_srcdir/configure; then
+       echo
+       $SHELL $ac_srcdir/configure  --help=recursive
+     elif test -f $ac_srcdir/configure.ac ||
+ 	   test -f $ac_srcdir/configure.in; then
+       echo
+       $ac_configure --help
+     else
+       echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+     fi
+     cd $ac_popdir
+   done
+ fi
+ 
+ test -n "$ac_init_help" && exit 0
+ if $ac_init_version; then
+   cat <<\_ACEOF
+ GNU Classpath configure 0.20-pre
+ generated by GNU Autoconf 2.59
+ 
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ This configure script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it.
+ _ACEOF
+   exit 0
+ fi
+ exec 5>config.log
+ cat >&5 <<_ACEOF
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+ 
+ It was created by GNU Classpath $as_me 0.20-pre, which was
+ generated by GNU Autoconf 2.59.  Invocation command line was
+ 
+   $ $0 $@
+ 
+ _ACEOF
+ {
+ cat <<_ASUNAME
+ ## --------- ##
+ ## Platform. ##
+ ## --------- ##
+ 
+ hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+ uname -m = `(uname -m) 2>/dev/null || echo unknown`
+ uname -r = `(uname -r) 2>/dev/null || echo unknown`
+ uname -s = `(uname -s) 2>/dev/null || echo unknown`
+ uname -v = `(uname -v) 2>/dev/null || echo unknown`
+ 
+ /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+ /bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+ 
+ /bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+ /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+ /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+ hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+ /bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+ /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+ /bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+ 
+ _ASUNAME
+ 
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   echo "PATH: $as_dir"
+ done
+ 
+ } >&5
+ 
+ cat >&5 <<_ACEOF
+ 
+ 
+ ## ----------- ##
+ ## Core tests. ##
+ ## ----------- ##
+ 
+ _ACEOF
+ 
+ 
+ # Keep a trace of the command line.
+ # Strip out --no-create and --no-recursion so they do not pile up.
+ # Strip out --silent because we don't want to record it for future runs.
+ # Also quote any args containing shell meta-characters.
+ # Make two passes to allow for proper duplicate-argument suppression.
+ ac_configure_args=
+ ac_configure_args0=
+ ac_configure_args1=
+ ac_sep=
+ ac_must_keep_next=false
+ for ac_pass in 1 2
+ do
+   for ac_arg
+   do
+     case $ac_arg in
+     -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+     | -silent | --silent | --silen | --sile | --sil)
+       continue ;;
+     *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+       ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+     esac
+     case $ac_pass in
+     1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+     2)
+       ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+       if test $ac_must_keep_next = true; then
+ 	ac_must_keep_next=false # Got value, back to normal.
+       else
+ 	case $ac_arg in
+ 	  *=* | --config-cache | -C | -disable-* | --disable-* \
+ 	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ 	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ 	  | -with-* | --with-* | -without-* | --without-* | --x)
+ 	    case "$ac_configure_args0 " in
+ 	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ 	    esac
+ 	    ;;
+ 	  -* ) ac_must_keep_next=true ;;
+ 	esac
+       fi
+       ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+       # Get rid of the leading space.
+       ac_sep=" "
+       ;;
+     esac
+   done
+ done
+ $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+ $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+ 
+ # When interrupted or exit'd, cleanup temporary files, and complete
+ # config.log.  We remove comments because anyway the quotes in there
+ # would cause problems or look ugly.
+ # WARNING: Be sure not to use single quotes in there, as some shells,
+ # such as our DU 5.0 friend, will then `close' the trap.
+ trap 'exit_status=$?
+   # Save into config.log some information that might help in debugging.
+   {
+     echo
+ 
+     cat <<\_ASBOX
+ ## ---------------- ##
+ ## Cache variables. ##
+ ## ---------------- ##
+ _ASBOX
+     echo
+     # The following way of writing the cache mishandles newlines in values,
+ {
+   (set) 2>&1 |
+     case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+     *ac_space=\ *)
+       sed -n \
+ 	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+       ;;
+     *)
+       sed -n \
+ 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+       ;;
+     esac;
+ }
+     echo
+ 
+     cat <<\_ASBOX
+ ## ----------------- ##
+ ## Output variables. ##
+ ## ----------------- ##
+ _ASBOX
+     echo
+     for ac_var in $ac_subst_vars
+     do
+       eval ac_val=$`echo $ac_var`
+       echo "$ac_var='"'"'$ac_val'"'"'"
+     done | sort
+     echo
+ 
+     if test -n "$ac_subst_files"; then
+       cat <<\_ASBOX
+ ## ------------- ##
+ ## Output files. ##
+ ## ------------- ##
+ _ASBOX
+       echo
+       for ac_var in $ac_subst_files
+       do
+ 	eval ac_val=$`echo $ac_var`
+ 	echo "$ac_var='"'"'$ac_val'"'"'"
+       done | sort
+       echo
+     fi
+ 
+     if test -s confdefs.h; then
+       cat <<\_ASBOX
+ ## ----------- ##
+ ## confdefs.h. ##
+ ## ----------- ##
+ _ASBOX
+       echo
+       sed "/^$/d" confdefs.h | sort
+       echo
+     fi
+     test "$ac_signal" != 0 &&
+       echo "$as_me: caught signal $ac_signal"
+     echo "$as_me: exit $exit_status"
+   } >&5
+   rm -f core *.core &&
+   rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+     exit $exit_status
+      ' 0
+ for ac_signal in 1 2 13 15; do
+   trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+ done
+ ac_signal=0
+ 
+ # confdefs.h avoids OS command line length limits that DEFS can exceed.
+ rm -rf conftest* confdefs.h
+ # AIX cpp loses on an empty file, so make sure it contains at least a newline.
+ echo >confdefs.h
+ 
+ # Predefined preprocessor variables.
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_NAME "$PACKAGE_NAME"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_VERSION "$PACKAGE_VERSION"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_STRING "$PACKAGE_STRING"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+ _ACEOF
+ 
+ 
+ # Let the site file select an alternate cache file if it wants to.
+ # Prefer explicitly selected file to automatically selected ones.
+ if test -z "$CONFIG_SITE"; then
+   if test "x$prefix" != xNONE; then
+     CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+   else
+     CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+   fi
+ fi
+ for ac_site_file in $CONFIG_SITE; do
+   if test -r "$ac_site_file"; then
+     { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+ echo "$as_me: loading site script $ac_site_file" >&6;}
+     sed 's/^/| /' "$ac_site_file" >&5
+     . "$ac_site_file"
+   fi
+ done
+ 
+ if test -r "$cache_file"; then
+   # Some versions of bash will fail to source /dev/null (special
+   # files actually), so we avoid doing that.
+   if test -f "$cache_file"; then
+     { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+ echo "$as_me: loading cache $cache_file" >&6;}
+     case $cache_file in
+       [\\/]* | ?:[\\/]* ) . $cache_file;;
+       *)                      . ./$cache_file;;
+     esac
+   fi
+ else
+   { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+ echo "$as_me: creating cache $cache_file" >&6;}
+   >$cache_file
+ fi
+ 
+ # Check that the precious variables saved in the cache have kept the same
+ # value.
+ ac_cache_corrupted=false
+ for ac_var in `(set) 2>&1 |
+ 	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+   eval ac_old_set=\$ac_cv_env_${ac_var}_set
+   eval ac_new_set=\$ac_env_${ac_var}_set
+   eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+   eval ac_new_val="\$ac_env_${ac_var}_value"
+   case $ac_old_set,$ac_new_set in
+     set,)
+       { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+ echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+       ac_cache_corrupted=: ;;
+     ,set)
+       { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+ echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+       ac_cache_corrupted=: ;;
+     ,);;
+     *)
+       if test "x$ac_old_val" != "x$ac_new_val"; then
+ 	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+ echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ 	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+ echo "$as_me:   former value:  $ac_old_val" >&2;}
+ 	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+ echo "$as_me:   current value: $ac_new_val" >&2;}
+ 	ac_cache_corrupted=:
+       fi;;
+   esac
+   # Pass precious variables to config.status.
+   if test "$ac_new_set" = set; then
+     case $ac_new_val in
+     *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+       ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+     *) ac_arg=$ac_var=$ac_new_val ;;
+     esac
+     case " $ac_configure_args " in
+       *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+       *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+     esac
+   fi
+ done
+ if $ac_cache_corrupted; then
+   { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+ echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+   { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+ echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ ac_aux_dir=
+ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+   if test -f $ac_dir/install-sh; then
+     ac_aux_dir=$ac_dir
+     ac_install_sh="$ac_aux_dir/install-sh -c"
+     break
+   elif test -f $ac_dir/install.sh; then
+     ac_aux_dir=$ac_dir
+     ac_install_sh="$ac_aux_dir/install.sh -c"
+     break
+   elif test -f $ac_dir/shtool; then
+     ac_aux_dir=$ac_dir
+     ac_install_sh="$ac_aux_dir/shtool install -c"
+     break
+   fi
+ done
+ if test -z "$ac_aux_dir"; then
+   { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+ echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+ 
+ # Make sure we can run config.sub.
+ $ac_config_sub sun4 >/dev/null 2>&1 ||
+   { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+ echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ echo "$as_me:$LINENO: checking build system type" >&5
+ echo $ECHO_N "checking build system type... $ECHO_C" >&6
+ if test "${ac_cv_build+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_build_alias=$build_alias
+ test -z "$ac_cv_build_alias" &&
+   ac_cv_build_alias=`$ac_config_guess`
+ test -z "$ac_cv_build_alias" &&
+   { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+ echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+    { (exit 1); exit 1; }; }
+ ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+   { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+ echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+ echo "${ECHO_T}$ac_cv_build" >&6
+ build=$ac_cv_build
+ build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+ build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+ build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ 
+ 
+ echo "$as_me:$LINENO: checking host system type" >&5
+ echo $ECHO_N "checking host system type... $ECHO_C" >&6
+ if test "${ac_cv_host+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_host_alias=$host_alias
+ test -z "$ac_cv_host_alias" &&
+   ac_cv_host_alias=$ac_cv_build_alias
+ ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+   { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+ echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+ echo "${ECHO_T}$ac_cv_host" >&6
+ host=$ac_cv_host
+ host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+ host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+ host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ 
+ 
+ echo "$as_me:$LINENO: checking target system type" >&5
+ echo $ECHO_N "checking target system type... $ECHO_C" >&6
+ if test "${ac_cv_target+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_target_alias=$target_alias
+ test "x$ac_cv_target_alias" = "x" &&
+   ac_cv_target_alias=$ac_cv_host_alias
+ ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
+   { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
+ echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+ echo "${ECHO_T}$ac_cv_target" >&6
+ target=$ac_cv_target
+ target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+ target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+ target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ 
+ 
+ # The aliases save the names the user supplied, while $host etc.
+ # will get canonicalized.
+ test -n "$target_alias" &&
+   test "$program_prefix$program_suffix$program_transform_name" = \
+     NONENONEs,x,x, &&
+   program_prefix=${target_alias}-
+ 
+ if expr ${target_cpu} : '.*86' > /dev/null; then target_cpu=x86; fi
+ 
+ LIBVERSION="0:0:0"
+ 
+ case "$host_os" in
+      darwin*)
+ 	cp_module=""
+ 	;;
+ 	*)
+ 	cp_module="-module"
+ 	;;
+ esac
+ 
+ CLASSPATH_MODULE="${cp_module} -version-info ${LIBVERSION} -no-undefined"
+ 
+ 
+ 
+ am__api_version="1.9"
+ # Find a good install program.  We prefer a C program (faster),
+ # so one script is as good as another.  But avoid the broken or
+ # incompatible versions:
+ # SysV /etc/install, /usr/sbin/install
+ # SunOS /usr/etc/install
+ # IRIX /sbin/install
+ # AIX /bin/install
+ # AmigaOS /C/install, which installs bootblocks on floppy discs
+ # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+ # AFS /usr/afsws/bin/install, which mishandles nonexistent args
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # OS/2's system install, which has a completely different semantic
+ # ./install, which can be erroneously created by make from ./install.sh.
+ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+ echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+ if test -z "$INSTALL"; then
+ if test "${ac_cv_path_install+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   # Account for people who put trailing slashes in PATH elements.
+ case $as_dir/ in
+   ./ | .// | /cC/* | \
+   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+   ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+   /usr/ucb/* ) ;;
+   *)
+     # OSF1 and SCO ODT 3.0 have their own names for install.
+     # Don't use installbsd from OSF since it installs stuff as root
+     # by default.
+     for ac_prog in ginstall scoinst install; do
+       for ac_exec_ext in '' $ac_executable_extensions; do
+ 	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ 	  if test $ac_prog = install &&
+ 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ 	    # AIX install.  It has an incompatible calling convention.
+ 	    :
+ 	  elif test $ac_prog = install &&
+ 	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ 	    # program-specific install script used by HP pwplus--don't use.
+ 	    :
+ 	  else
+ 	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ 	    break 3
+ 	  fi
+ 	fi
+       done
+     done
+     ;;
+ esac
+ done
+ 
+ 
+ fi
+   if test "${ac_cv_path_install+set}" = set; then
+     INSTALL=$ac_cv_path_install
+   else
+     # As a last resort, use the slow shell script.  We don't cache a
+     # path for INSTALL within a source directory, because that will
+     # break other packages using the cache if that directory is
+     # removed, or if the path is relative.
+     INSTALL=$ac_install_sh
+   fi
+ fi
+ echo "$as_me:$LINENO: result: $INSTALL" >&5
+ echo "${ECHO_T}$INSTALL" >&6
+ 
+ # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+ # It thinks the first close brace ends the variable substitution.
+ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+ 
+ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+ 
+ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+ 
+ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+ echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+ # Just in case
+ sleep 1
+ echo timestamp > conftest.file
+ # Do `set' in a subshell so we don't clobber the current shell's
+ # arguments.  Must try -L first in case configure is actually a
+ # symlink; some systems play weird games with the mod time of symlinks
+ # (eg FreeBSD returns the mod time of the symlink's containing
+ # directory).
+ if (
+    set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+    if test "$*" = "X"; then
+       # -L didn't work.
+       set X `ls -t $srcdir/configure conftest.file`
+    fi
+    rm -f conftest.file
+    if test "$*" != "X $srcdir/configure conftest.file" \
+       && test "$*" != "X conftest.file $srcdir/configure"; then
+ 
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+       { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+ alias in your environment" >&5
+ echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+ alias in your environment" >&2;}
+    { (exit 1); exit 1; }; }
+    fi
+ 
+    test "$2" = conftest.file
+    )
+ then
+    # Ok.
+    :
+ else
+    { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+ Check your system clock" >&5
+ echo "$as_me: error: newly created file is older than distributed files!
+ Check your system clock" >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ test "$program_prefix" != NONE &&
+   program_transform_name="s,^,$program_prefix,;$program_transform_name"
+ # Use a double $ so make ignores it.
+ test "$program_suffix" != NONE &&
+   program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+ # Double any \ or $.  echo might interpret backslashes.
+ # By default was `s,x,x', remove it if useless.
+ cat <<\_ACEOF >conftest.sed
+ s/[\\$]/&&/g;s/;s,x,x,$//
+ _ACEOF
+ program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+ rm conftest.sed
+ 
+ # expand $ac_aux_dir to an absolute path
+ am_aux_dir=`cd $ac_aux_dir && pwd`
+ 
+ test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+ # Use eval to expand $SHELL
+ if eval "$MISSING --run true"; then
+   am_missing_run="$MISSING --run "
+ else
+   am_missing_run=
+   { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+ echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+ fi
+ 
+ if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+   # We used to keeping the `.' as first argument, in order to
+   # allow $(mkdir_p) to be used without argument.  As in
+   #   $(mkdir_p) $(somedir)
+   # where $(somedir) is conditionally defined.  However this is wrong
+   # for two reasons:
+   #  1. if the package is installed by a user who cannot write `.'
+   #     make install will fail,
+   #  2. the above comment should most certainly read
+   #     $(mkdir_p) $(DESTDIR)$(somedir)
+   #     so it does not work when $(somedir) is undefined and
+   #     $(DESTDIR) is not.
+   #  To support the latter case, we have to write
+   #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+   #  so the `.' trick is pointless.
+   mkdir_p='mkdir -p --'
+ else
+   # On NextStep and OpenStep, the `mkdir' command does not
+   # recognize any option.  It will interpret all options as
+   # directories to create, and then abort because `.' already
+   # exists.
+   for d in ./-p ./--version;
+   do
+     test -d $d && rmdir $d
+   done
+   # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+   if test -f "$ac_aux_dir/mkinstalldirs"; then
+     mkdir_p='$(mkinstalldirs)'
+   else
+     mkdir_p='$(install_sh) -d'
+   fi
+ fi
+ 
+ for ac_prog in gawk mawk nawk awk
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_AWK+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$AWK"; then
+   ac_cv_prog_AWK="$AWK" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_AWK="$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ AWK=$ac_cv_prog_AWK
+ if test -n "$AWK"; then
+   echo "$as_me:$LINENO: result: $AWK" >&5
+ echo "${ECHO_T}$AWK" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   test -n "$AWK" && break
+ done
+ 
+ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+ echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+ set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+ if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.make <<\_ACEOF
+ all:
+ 	@echo 'ac_maketemp="$(MAKE)"'
+ _ACEOF
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+ eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+ if test -n "$ac_maketemp"; then
+   eval ac_cv_prog_make_${ac_make}_set=yes
+ else
+   eval ac_cv_prog_make_${ac_make}_set=no
+ fi
+ rm -f conftest.make
+ fi
+ if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+   echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+   SET_MAKE=
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+   SET_MAKE="MAKE=${MAKE-make}"
+ fi
+ 
+ rm -rf .tst 2>/dev/null
+ mkdir .tst 2>/dev/null
+ if test -d .tst; then
+   am__leading_dot=.
+ else
+   am__leading_dot=_
+ fi
+ rmdir .tst 2>/dev/null
+ 
+ # test to see if srcdir already configured
+ if test "`cd $srcdir && pwd`" != "`pwd`" &&
+    test -f $srcdir/config.status; then
+   { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+ echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ # test whether we have cygpath
+ if test -z "$CYGPATH_W"; then
+   if (cygpath --version) >/dev/null 2>/dev/null; then
+     CYGPATH_W='cygpath -w'
+   else
+     CYGPATH_W=echo
+   fi
+ fi
+ 
+ 
+ # Define the identity of the package.
+  PACKAGE='classpath'
+  VERSION='0.20-pre'
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE "$PACKAGE"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define VERSION "$VERSION"
+ _ACEOF
+ 
+ # Some tools Automake needs.
+ 
+ ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+ 
+ 
+ AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+ 
+ 
+ AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+ 
+ 
+ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+ 
+ 
+ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+ 
+ install_sh=${install_sh-"$am_aux_dir/install-sh"}
+ 
+ # Installed binaries are usually stripped using `strip' when the user
+ # run `make install-strip'.  However `strip' might not be the right
+ # tool to use in cross-compilation environments, therefore Automake
+ # will honor the `STRIP' environment variable to overrule this program.
+ if test "$cross_compiling" != no; then
+   if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_STRIP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$STRIP"; then
+   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ STRIP=$ac_cv_prog_STRIP
+ if test -n "$STRIP"; then
+   echo "$as_me:$LINENO: result: $STRIP" >&5
+ echo "${ECHO_T}$STRIP" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_STRIP"; then
+   ac_ct_STRIP=$STRIP
+   # Extract the first word of "strip", so it can be a program name with args.
+ set dummy strip; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_STRIP"; then
+   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_STRIP="strip"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+ fi
+ fi
+ ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+ if test -n "$ac_ct_STRIP"; then
+   echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+ echo "${ECHO_T}$ac_ct_STRIP" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   STRIP=$ac_ct_STRIP
+ else
+   STRIP="$ac_cv_prog_STRIP"
+ fi
+ 
+ fi
+ INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+ 
+ # We need awk for the "check" target.  The system "awk" is bad on
+ # some platforms.
+ # Always define AMTAR for backward compatibility.
+ 
+ AMTAR=${AMTAR-"${am_missing_run}tar"}
+ 
+ 
+ echo "$as_me:$LINENO: checking how to create a ustar tar archive" >&5
+ echo $ECHO_N "checking how to create a ustar tar archive... $ECHO_C" >&6
+ # Loop over all known methods to create a tar archive until one works.
+ _am_tools='gnutar plaintar pax cpio none'
+ _am_tools=${am_cv_prog_tar_ustar-$_am_tools}
+ # Do not fold the above two line into one, because Tru64 sh and
+ # Solaris sh will not grok spaces in the rhs of `-'.
+ for _am_tool in $_am_tools
+ do
+   case $_am_tool in
+   gnutar)
+     for _am_tar in tar gnutar gtar;
+     do
+       { echo "$as_me:$LINENO: $_am_tar --version" >&5
+    ($_am_tar --version) >&5 2>&5
+    ac_status=$?
+    echo "$as_me:$LINENO: \$? = $ac_status" >&5
+    (exit $ac_status); } && break
+     done
+     am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"'
+     am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"'
+     am__untar="$_am_tar -xf -"
+     ;;
+   plaintar)
+     # Must skip GNU tar: if it does not support --format= it doesn't create
+     # ustar tarball either.
+     (tar --version) >/dev/null 2>&1 && continue
+     am__tar='tar chf - "$$tardir"'
+     am__tar_='tar chf - "$tardir"'
+     am__untar='tar xf -'
+     ;;
+   pax)
+     am__tar='pax -L -x ustar -w "$$tardir"'
+     am__tar_='pax -L -x ustar -w "$tardir"'
+     am__untar='pax -r'
+     ;;
+   cpio)
+     am__tar='find "$$tardir" -print | cpio -o -H ustar -L'
+     am__tar_='find "$tardir" -print | cpio -o -H ustar -L'
+     am__untar='cpio -i -H ustar -d'
+     ;;
+   none)
+     am__tar=false
+     am__tar_=false
+     am__untar=false
+     ;;
+   esac
+ 
+   # If the value was cached, stop now.  We just wanted to have am__tar
+   # and am__untar set.
+   test -n "${am_cv_prog_tar_ustar}" && break
+ 
+   # tar/untar a dummy directory, and stop if the command works
+   rm -rf conftest.dir
+   mkdir conftest.dir
+   echo GrepMe > conftest.dir/file
+   { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
+    (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5
+    ac_status=$?
+    echo "$as_me:$LINENO: \$? = $ac_status" >&5
+    (exit $ac_status); }
+   rm -rf conftest.dir
+   if test -s conftest.tar; then
+     { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
+    ($am__untar <conftest.tar) >&5 2>&5
+    ac_status=$?
+    echo "$as_me:$LINENO: \$? = $ac_status" >&5
+    (exit $ac_status); }
+     grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+   fi
+ done
+ rm -rf conftest.dir
+ 
+ if test "${am_cv_prog_tar_ustar+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   am_cv_prog_tar_ustar=$_am_tool
+ fi
+ 
+ echo "$as_me:$LINENO: result: $am_cv_prog_tar_ustar" >&5
+ echo "${ECHO_T}$am_cv_prog_tar_ustar" >&6
+ 
+ 
+ 
+ 
+ 
+           ac_config_headers="$ac_config_headers include/config.h"
+ 
+ 
+ 
+ # Check whether --enable-jni or --disable-jni was given.
+ if test "${enable_jni+set}" = set; then
+   enableval="$enable_jni"
+   case "${enableval}" in
+                 yes) COMPILE_JNI=yes; COMPILE_JAVA=yes ;;
+                 no) COMPILE_JNI=no ;;
+                 *) COMPILE_JNI=yes; COMPILE_JAVA=yes ;;
+               esac
+ else
+   COMPILE_JNI=yes
+ fi;
+ 
+ 
+ if test "x${COMPILE_JNI}" = xyes; then
+   CREATE_JNI_LIBRARIES_TRUE=
+   CREATE_JNI_LIBRARIES_FALSE='#'
+ else
+   CREATE_JNI_LIBRARIES_TRUE='#'
+   CREATE_JNI_LIBRARIES_FALSE=
+ fi
+ 
+ 
+ # Check whether --enable-core-jni or --disable-core-jni was given.
+ if test "${enable_core_jni+set}" = set; then
+   enableval="$enable_core_jni"
+   case "${enableval}" in
+                 yes) COMPILE_CORE_JNI=yes; COMPILE_JAVA=yes ;;
+                 no) COMPILE_CORE_JNI=no ;;
+                 *) COMPILE_CORE_JNI=yes; COMPILE_JAVA=yes ;;
+               esac
+ else
+   COMPILE_CORE_JNI=yes
+ fi;
+ 
+ 
+ if test "x${COMPILE_CORE_JNI}" = xyes; then
+   CREATE_CORE_JNI_LIBRARIES_TRUE=
+   CREATE_CORE_JNI_LIBRARIES_FALSE='#'
+ else
+   CREATE_CORE_JNI_LIBRARIES_TRUE='#'
+   CREATE_CORE_JNI_LIBRARIES_FALSE=
+ fi
+ 
+ 
+ # Check whether --enable-Werror or --disable-Werror was given.
+ if test "${enable_Werror+set}" = set; then
+   enableval="$enable_Werror"
+   case "${enableval}" in
+                 yes) ENABLE_WERROR=yes ;;
+                 no) ENABLE_WERROR=no ;;
+                 *) ENABLE_WERROR=no ;;
+               esac
+ else
+   ENABLE_WERROR=no
+ fi;
+ 
+ # Check whether --enable-default-toolkit or --disable-default-toolkit was given.
+ if test "${enable_default_toolkit+set}" = set; then
+   enableval="$enable_default_toolkit"
+ 
+ fi;
+ default_toolkit=$enable_default_toolkit
+ if test "$default_toolkit" = ""; then
+    default_toolkit=gnu.java.awt.peer.gtk.GtkToolkit
+ fi
+ 
+ 
+ # Check whether --enable-xmlj or --disable-xmlj was given.
+ if test "${enable_xmlj+set}" = set; then
+   enableval="$enable_xmlj"
+   case "${enableval}" in
+                 yes) COMPILE_XMLJ=yes ;;
+                 no) COMPILE_XMLJ=no ;;
+                 *) COMPILE_XMLJ=no ;;
+               esac
+ else
+   COMPILE_XMLJ=no
+ fi;
+ 
+ 
+ if test "x${COMPILE_XMLJ}" = xyes; then
+   CREATE_XMLJ_LIBRARY_TRUE=
+   CREATE_XMLJ_LIBRARY_FALSE='#'
+ else
+   CREATE_XMLJ_LIBRARY_TRUE='#'
+   CREATE_XMLJ_LIBRARY_FALSE=
+ fi
+ 
+ 
+ DEPDIR="${am__leading_dot}deps"
+ 
+           ac_config_commands="$ac_config_commands depfiles"
+ 
+ 
+ am_make=${MAKE-make}
+ cat > confinc << 'END'
+ am__doit:
+ 	@echo done
+ .PHONY: am__doit
+ END
+ # If we don't find an include directive, just comment out the code.
+ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+ echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+ am__include="#"
+ am__quote=
+ _am_result=none
+ # First try GNU make style include.
+ echo "include confinc" > confmf
+ # We grep out `Entering directory' and `Leaving directory'
+ # messages which can occur if `w' ends up in MAKEFLAGS.
+ # In particular we don't look at `^make:' because GNU make might
+ # be invoked under some other name (usually "gmake"), in which
+ # case it prints its new name instead of `make'.
+ if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+    am__include=include
+    am__quote=
+    _am_result=GNU
+ fi
+ # Now try BSD make style include.
+ if test "$am__include" = "#"; then
+    echo '.include "confinc"' > confmf
+    if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+       am__include=.include
+       am__quote="\""
+       _am_result=BSD
+    fi
+ fi
+ 
+ 
+ echo "$as_me:$LINENO: result: $_am_result" >&5
+ echo "${ECHO_T}$_am_result" >&6
+ rm -f confinc confmf
+ 
+ # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+ if test "${enable_dependency_tracking+set}" = set; then
+   enableval="$enable_dependency_tracking"
+ 
+ fi;
+ if test "x$enable_dependency_tracking" != xno; then
+   am_depcomp="$ac_aux_dir/depcomp"
+   AMDEPBACKSLASH='\'
+ fi
+ 
+ 
+ if test "x$enable_dependency_tracking" != xno; then
+   AMDEP_TRUE=
+   AMDEP_FALSE='#'
+ else
+   AMDEP_TRUE='#'
+   AMDEP_FALSE=
+ fi
+ 
+ 
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gcc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="${ac_tool_prefix}gcc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+   ac_ct_CC=$CC
+   # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="gcc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+ echo "${ECHO_T}$ac_ct_CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   CC=$ac_ct_CC
+ else
+   CC="$ac_cv_prog_CC"
+ fi
+ 
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}cc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="${ac_tool_prefix}cc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+   ac_ct_CC=$CC
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="cc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+ echo "${ECHO_T}$ac_ct_CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   CC=$ac_ct_CC
+ else
+   CC="$ac_cv_prog_CC"
+ fi
+ 
+ fi
+ if test -z "$CC"; then
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+   ac_prog_rejected=no
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+        continue
+      fi
+     ac_cv_prog_CC="cc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ if test $ac_prog_rejected = yes; then
+   # We found a bogon in the path, so make sure we never use it.
+   set dummy $ac_cv_prog_CC
+   shift
+   if test $# != 0; then
+     # We chose a different compiler from the bogus one.
+     # However, it has the same basename, so the bogon will be chosen
+     # first if we set CC to just the basename; use the full file name.
+     shift
+     ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+   fi
+ fi
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   for ac_prog in cl
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     test -n "$CC" && break
+   done
+ fi
+ if test -z "$CC"; then
+   ac_ct_CC=$CC
+   for ac_prog in cl
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+ echo "${ECHO_T}$ac_ct_CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   test -n "$ac_ct_CC" && break
+ done
+ 
+   CC=$ac_ct_CC
+ fi
+ 
+ fi
+ 
+ 
+ test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: no acceptable C compiler found in \$PATH
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ # Provide some information about the compiler.
+ echo "$as_me:$LINENO:" \
+      "checking for C compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+   (eval $ac_compiler --version </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+   (eval $ac_compiler -v </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+   (eval $ac_compiler -V </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ 
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ ac_clean_files_save=$ac_clean_files
+ ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ # Try to create an executable without -o first, disregard a.out.
+ # It will help us diagnose broken compilers, and finding out an intuition
+ # of exeext.
+ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+ echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+ if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+   (eval $ac_link_default) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+   # Find the output, starting from the most likely.  This scheme is
+ # not robust to junk in `.', hence go to wildcards (a.*) only as a last
+ # resort.
+ 
+ # Be careful to initialize this variable, since it used to be cached.
+ # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ ac_cv_exeext=
+ # b.out is created by i960 compilers.
+ for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+ do
+   test -f "$ac_file" || continue
+   case $ac_file in
+     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ 	;;
+     conftest.$ac_ext )
+ 	# This is the source file.
+ 	;;
+     [ab].out )
+ 	# We found the default executable, but exeext='' is most
+ 	# certainly right.
+ 	break;;
+     *.* )
+ 	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ 	# FIXME: I believe we export ac_cv_exeext for Libtool,
+ 	# but it would be cool to find out if it's true.  Does anybody
+ 	# maintain Libtool? --akim.
+ 	export ac_cv_exeext
+ 	break;;
+     * )
+ 	break;;
+   esac
+ done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ { { echo "$as_me:$LINENO: error: C compiler cannot create executables
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: C compiler cannot create executables
+ See \`config.log' for more details." >&2;}
+    { (exit 77); exit 77; }; }
+ fi
+ 
+ ac_exeext=$ac_cv_exeext
+ echo "$as_me:$LINENO: result: $ac_file" >&5
+ echo "${ECHO_T}$ac_file" >&6
+ 
+ # Check the compiler produces executables we can run.  If not, either
+ # the compiler is broken, or we cross compile.
+ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+ echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+ # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+ # If not cross compiling, check that we can run a simple program.
+ if test "$cross_compiling" != yes; then
+   if { ac_try='./$ac_file'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+     cross_compiling=no
+   else
+     if test "$cross_compiling" = maybe; then
+ 	cross_compiling=yes
+     else
+ 	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+ If you meant to cross compile, use \`--host'.
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot run C compiled programs.
+ If you meant to cross compile, use \`--host'.
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+     fi
+   fi
+ fi
+ echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ 
+ rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ ac_clean_files=$ac_clean_files_save
+ # Check the compiler produces executables we can run.  If not, either
+ # the compiler is broken, or we cross compile.
+ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+ echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+ echo "${ECHO_T}$cross_compiling" >&6
+ 
+ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+ echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+   # If both `conftest.exe' and `conftest' are `present' (well, observable)
+ # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+ # work properly (i.e., refer to `conftest.exe'), while it won't with
+ # `rm'.
+ for ac_file in conftest.exe conftest conftest.*; do
+   test -f "$ac_file" || continue
+   case $ac_file in
+     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ 	  export ac_cv_exeext
+ 	  break;;
+     * ) break;;
+   esac
+ done
+ else
+   { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ rm -f conftest$ac_cv_exeext
+ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+ echo "${ECHO_T}$ac_cv_exeext" >&6
+ 
+ rm -f conftest.$ac_ext
+ EXEEXT=$ac_cv_exeext
+ ac_exeext=$EXEEXT
+ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+ echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+ if test "${ac_cv_objext+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.o conftest.obj
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+   for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+   case $ac_file in
+     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+        break;;
+   esac
+ done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot compute suffix of object files: cannot compile
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ rm -f conftest.$ac_cv_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+ echo "${ECHO_T}$ac_cv_objext" >&6
+ OBJEXT=$ac_cv_objext
+ ac_objext=$OBJEXT
+ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+ echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+ if test "${ac_cv_c_compiler_gnu+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ #ifndef __GNUC__
+        choke me
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_compiler_gnu=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_compiler_gnu=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_c_compiler_gnu=$ac_compiler_gnu
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+ echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+ GCC=`test $ac_compiler_gnu = yes && echo yes`
+ ac_test_CFLAGS=${CFLAGS+set}
+ ac_save_CFLAGS=$CFLAGS
+ CFLAGS="-g"
+ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+ echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+ if test "${ac_cv_prog_cc_g+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_prog_cc_g=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_prog_cc_g=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+ echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+ if test "$ac_test_CFLAGS" = set; then
+   CFLAGS=$ac_save_CFLAGS
+ elif test $ac_cv_prog_cc_g = yes; then
+   if test "$GCC" = yes; then
+     CFLAGS="-g -O2"
+   else
+     CFLAGS="-g"
+   fi
+ else
+   if test "$GCC" = yes; then
+     CFLAGS="-O2"
+   else
+     CFLAGS=
+   fi
+ fi
+ echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+ echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+ if test "${ac_cv_prog_cc_stdc+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_prog_cc_stdc=no
+ ac_save_CC=$CC
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+ struct buf { int x; };
+ FILE * (*rcsopen) (struct buf *, struct stat *, int);
+ static char *e (p, i)
+      char **p;
+      int i;
+ {
+   return p[i];
+ }
+ static char *f (char * (*g) (char **, int), char **p, ...)
+ {
+   char *s;
+   va_list v;
+   va_start (v,p);
+   s = g (p, va_arg (v,int));
+   va_end (v);
+   return s;
+ }
+ 
+ /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+    function prototypes and stuff, but not '\xHH' hex character constants.
+    These don't provoke an error unfortunately, instead are silently treated
+    as 'x'.  The following induces an error, until -std1 is added to get
+    proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+    array size at least.  It's necessary to write '\x00'==0 to get something
+    that's true only with -std1.  */
+ int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+ 
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};
+ int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+ int argc;
+ char **argv;
+ int
+ main ()
+ {
+ return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+   ;
+   return 0;
+ }
+ _ACEOF
+ # Don't try gcc -ansi; that turns off useful extensions and
+ # breaks some systems' header files.
+ # AIX			-qlanglvl=ansi
+ # Ultrix and OSF/1	-std1
+ # HP-UX 10.20 and later	-Ae
+ # HP-UX older versions	-Aa -D_HPUX_SOURCE
+ # SVR4			-Xc -D__EXTENSIONS__
+ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+ do
+   CC="$ac_save_CC $ac_arg"
+   rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_prog_cc_stdc=$ac_arg
+ break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext
+ done
+ rm -f conftest.$ac_ext conftest.$ac_objext
+ CC=$ac_save_CC
+ 
+ fi
+ 
+ case "x$ac_cv_prog_cc_stdc" in
+   x|xno)
+     echo "$as_me:$LINENO: result: none needed" >&5
+ echo "${ECHO_T}none needed" >&6 ;;
+   *)
+     echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+ echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+     CC="$CC $ac_cv_prog_cc_stdc" ;;
+ esac
+ 
+ # Some people use a C++ compiler to compile C.  Since we use `exit',
+ # in C++ we need to declare it.  In case someone uses the same compiler
+ # for both compiling C and C++ we need to have the C++ compiler decide
+ # the declaration of exit, since it's the most demanding environment.
+ cat >conftest.$ac_ext <<_ACEOF
+ #ifndef __cplusplus
+   choke me
+ #endif
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   for ac_declaration in \
+    '' \
+    'extern "C" void std::exit (int) throw (); using std::exit;' \
+    'extern "C" void std::exit (int); using std::exit;' \
+    'extern "C" void exit (int) throw ();' \
+    'extern "C" void exit (int);' \
+    'void exit (int);'
+ do
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+ rm -f conftest*
+ if test -n "$ac_declaration"; then
+   echo '#ifdef __cplusplus' >>confdefs.h
+   echo $ac_declaration      >>confdefs.h
+   echo '#endif'             >>confdefs.h
+ fi
+ 
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ depcc="$CC"   am_compiler_list=
+ 
+ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+ echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+ if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+   # making a dummy file named `D' -- because `-MD' means `put the output
+   # in D'.
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+   # side effect of compilation, but ICC will put the dependencies in
+   # the current directory while Tru64 will put them in the object
+   # directory.
+   mkdir sub
+ 
+   am_cv_CC_dependencies_compiler_type=none
+   if test "$am_compiler_list" = ""; then
+      am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+   fi
+   for depmode in $am_compiler_list; do
+     # Setup a source with many dependencies, because some compilers
+     # like to wrap large dependency lists on column 80 (with \), and
+     # we should not choose a depcomp mode which is confused by this.
+     #
+     # We need to recreate these files for each test, as the compiler may
+     # overwrite some of them when testing with obscure command lines.
+     # This happens at least with the AIX C compiler.
+     : > sub/conftest.c
+     for i in 1 2 3 4 5 6; do
+       echo '#include "conftst'$i'.h"' >> sub/conftest.c
+       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+       # Solaris 8's {/usr,}/bin/sh.
+       touch sub/conftst$i.h
+     done
+     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+ 
+     case $depmode in
+     nosideeffect)
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+     none) break ;;
+     esac
+     # We check with `-c' and `-o' for the sake of the "dashmstdout"
+     # mode.  It turns out that the SunPro C++ compiler does not properly
+     # handle `-M -o', and we need to detect this.
+     if depmode=$depmode \
+        source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+        $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+          >/dev/null 2>conftest.err &&
+        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+       # icc doesn't choke on unknown options, it will just issue warnings
+       # or remarks (even with -Werror).  So we grep stderr for any message
+       # that says an option was ignored or not supported.
+       # When given -MP, icc 7.0 and 7.1 complain thusly:
+       #   icc: Command line warning: ignoring option '-M'; no argument required
+       # The diagnosis changed in icc 8.0:
+       #   icc: Command line remark: option '-MP' not supported
+       if (grep 'ignoring option' conftest.err ||
+           grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+         am_cv_CC_dependencies_compiler_type=$depmode
+         break
+       fi
+     fi
+   done
+ 
+   cd ..
+   rm -rf conftest.dir
+ else
+   am_cv_CC_dependencies_compiler_type=none
+ fi
+ 
+ fi
+ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+ echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+ CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+ 
+ 
+ 
+ if
+   test "x$enable_dependency_tracking" != xno \
+   && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+   am__fastdepCC_TRUE=
+   am__fastdepCC_FALSE='#'
+ else
+   am__fastdepCC_TRUE='#'
+   am__fastdepCC_FALSE=
+ fi
+ 
+ 
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+ echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+ # On Suns, sometimes $CPP names a directory.
+ if test -n "$CPP" && test -d "$CPP"; then
+   CPP=
+ fi
+ if test -z "$CPP"; then
+   if test "${ac_cv_prog_CPP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+       # Double quotes because CPP needs to be expanded
+     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+     do
+       ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   break
+ fi
+ 
+     done
+     ac_cv_prog_CPP=$CPP
+ 
+ fi
+   CPP=$ac_cv_prog_CPP
+ else
+   ac_cv_prog_CPP=$CPP
+ fi
+ echo "$as_me:$LINENO: result: $CPP" >&5
+ echo "${ECHO_T}$CPP" >&6
+ ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   :
+ else
+   { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ echo "$as_me:$LINENO: checking for egrep" >&5
+ echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+ if test "${ac_cv_prog_egrep+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+     then ac_cv_prog_egrep='grep -E'
+     else ac_cv_prog_egrep='egrep'
+     fi
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+ echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+  EGREP=$ac_cv_prog_egrep
+ 
+ 
+ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+ echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+ if test "${ac_cv_header_stdc+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include <string.h>
+ #include <float.h>
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_header_stdc=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_header_stdc=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ 
+ if test $ac_cv_header_stdc = yes; then
+   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <string.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "memchr" >/dev/null 2>&1; then
+   :
+ else
+   ac_cv_header_stdc=no
+ fi
+ rm -f conftest*
+ 
+ fi
+ 
+ if test $ac_cv_header_stdc = yes; then
+   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "free" >/dev/null 2>&1; then
+   :
+ else
+   ac_cv_header_stdc=no
+ fi
+ rm -f conftest*
+ 
+ fi
+ 
+ if test $ac_cv_header_stdc = yes; then
+   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+   if test "$cross_compiling" = yes; then
+   :
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ctype.h>
+ #if ((' ' & 0x0FF) == 0x020)
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+ #else
+ # define ISLOWER(c) \
+ 		   (('a' <= (c) && (c) <= 'i') \
+ 		     || ('j' <= (c) && (c) <= 'r') \
+ 		     || ('s' <= (c) && (c) <= 'z'))
+ # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+ #endif
+ 
+ #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+ int
+ main ()
+ {
+   int i;
+   for (i = 0; i < 256; i++)
+     if (XOR (islower (i), ISLOWER (i))
+ 	|| toupper (i) != TOUPPER (i))
+       exit(2);
+   exit (0);
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   :
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ( exit $ac_status )
+ ac_cv_header_stdc=no
+ fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+ echo "${ECHO_T}$ac_cv_header_stdc" >&6
+ if test $ac_cv_header_stdc = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define STDC_HEADERS 1
+ _ACEOF
+ 
+ fi
+ 
+ # On IRIX 5.3, sys/types and inttypes.h are conflicting.
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ 		  inttypes.h stdint.h unistd.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ 
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   eval "$as_ac_Header=yes"
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ eval "$as_ac_Header=no"
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+   cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ _ACEOF
+ 
+ fi
+ 
+ done
+ 
+ 
+ # Check whether --enable-alsa or --disable-alsa was given.
+ if test "${enable_alsa+set}" = set; then
+   enableval="$enable_alsa"
+   case "${enableval}" in
+                 yes) COMPILE_ALSA=yes ;;
+                 no) COMPILE_ALSA=no ;;
+                 *) COMPILE_ALSA=yes ;;
+               esac
+ else
+ 
+ for ac_header in alsa/asoundlib.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ else
+   # Is the header compilable?
+ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+ echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_header_compiler=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_header_compiler=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+ echo "${ECHO_T}$ac_header_compiler" >&6
+ 
+ # Is the header present?
+ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+ echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <$ac_header>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   ac_header_preproc=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   ac_header_preproc=no
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+ echo "${ECHO_T}$ac_header_preproc" >&6
+ 
+ # So?  What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+   yes:no: )
+     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+ echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+ echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+     ac_header_preproc=yes
+     ;;
+   no:yes:* )
+     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+ echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+ echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+ echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+ echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+     (
+       cat <<\_ASBOX
+ ## -------------------------------- ##
+ ## Report this to classpath@gnu.org ##
+ ## -------------------------------- ##
+ _ASBOX
+     ) |
+       sed "s/^/$as_me: WARNING:     /" >&2
+     ;;
+ esac
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   eval "$as_ac_Header=\$ac_header_preproc"
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ 
+ fi
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+   cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ _ACEOF
+  echo "$as_me:$LINENO: checking for snd_seq_open in -lasound" >&5
+ echo $ECHO_N "checking for snd_seq_open in -lasound... $ECHO_C" >&6
+ if test "${ac_cv_lib_asound_snd_seq_open+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lasound  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char snd_seq_open ();
+ int
+ main ()
+ {
+ snd_seq_open ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_asound_snd_seq_open=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_asound_snd_seq_open=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_seq_open" >&5
+ echo "${ECHO_T}$ac_cv_lib_asound_snd_seq_open" >&6
+ if test $ac_cv_lib_asound_snd_seq_open = yes; then
+   COMPILE_ALSA=yes
+ else
+   COMPILE_ALSA=no
+ fi
+ 
+ else
+   COMPILE_ALSA=no
+ fi
+ 
+ done
+ 
+ fi;
+ 
+ 
+ if test "x${COMPILE_ALSA}" = xyes; then
+   CREATE_ALSA_LIBRARIES_TRUE=
+   CREATE_ALSA_LIBRARIES_FALSE='#'
+ else
+   CREATE_ALSA_LIBRARIES_TRUE='#'
+   CREATE_ALSA_LIBRARIES_FALSE=
+ fi
+ 
+ 
+ # Check whether --enable-dssi or --disable-dssi was given.
+ if test "${enable_dssi+set}" = set; then
+   enableval="$enable_dssi"
+   case "${enableval}" in
+                 yes) COMPILE_DSSI=yes ;;
+                 no) COMPILE_DSSI=no ;;
+                 *) COMPILE_DSSI=yes ;;
+               esac
+ else
+ 
+ for ac_header in dssi.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ else
+   # Is the header compilable?
+ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+ echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_header_compiler=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_header_compiler=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+ echo "${ECHO_T}$ac_header_compiler" >&6
+ 
+ # Is the header present?
+ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+ echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <$ac_header>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   ac_header_preproc=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   ac_header_preproc=no
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+ echo "${ECHO_T}$ac_header_preproc" >&6
+ 
+ # So?  What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+   yes:no: )
+     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+ echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+ echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+     ac_header_preproc=yes
+     ;;
+   no:yes:* )
+     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+ echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+ echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+ echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+ echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+     (
+       cat <<\_ASBOX
+ ## -------------------------------- ##
+ ## Report this to classpath@gnu.org ##
+ ## -------------------------------- ##
+ _ASBOX
+     ) |
+       sed "s/^/$as_me: WARNING:     /" >&2
+     ;;
+ esac
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   eval "$as_ac_Header=\$ac_header_preproc"
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ 
+ fi
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+   cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ _ACEOF
+  COMPILE_DSSI=yes
+ else
+   COMPILE_DSSI=no
+ fi
+ 
+ done
+ 
+ fi;
+ 
+ 
+ if test "x${COMPILE_DSSI}" = xyes; then
+   CREATE_DSSI_LIBRARIES_TRUE=
+   CREATE_DSSI_LIBRARIES_FALSE='#'
+ else
+   CREATE_DSSI_LIBRARIES_TRUE='#'
+   CREATE_DSSI_LIBRARIES_FALSE=
+ fi
+ 
+ 
+ # Check whether --enable-gtk-peer or --disable-gtk-peer was given.
+ if test "${enable_gtk_peer+set}" = set; then
+   enableval="$enable_gtk_peer"
+   case "${enableval}" in
+                 yes) COMPILE_GTK_PEER=yes ;;
+                 no) COMPILE_GTK_PEER=no ;;
+                 *) COMPILE_GTK_PEER=yes ;;
+               esac
+ else
+   COMPILE_GTK_PEER=yes
+ fi;
+ 
+ 
+ if test "x${COMPILE_GTK_PEER}" = xyes; then
+   CREATE_GTK_PEER_LIBRARIES_TRUE=
+   CREATE_GTK_PEER_LIBRARIES_FALSE='#'
+ else
+   CREATE_GTK_PEER_LIBRARIES_TRUE='#'
+   CREATE_GTK_PEER_LIBRARIES_FALSE=
+ fi
+ 
+ 
+ # Check whether --enable-gtk-peers or --disable-gtk-peers was given.
+ if test "${enable_gtk_peers+set}" = set; then
+   enableval="$enable_gtk_peers"
+   { { echo "$as_me:$LINENO: error: No --enable-gtk-peers (or --disable-gtk-peers) option; you want --enable-gtk-peer" >&5
+ echo "$as_me: error: No --enable-gtk-peers (or --disable-gtk-peers) option; you want --enable-gtk-peer" >&2;}
+    { (exit 1); exit 1; }; }
+ fi;
+ 
+ # Check whether --enable-gtk-cairo or --disable-gtk-cairo was given.
+ if test "${enable_gtk_cairo+set}" = set; then
+   enableval="$enable_gtk_cairo"
+   case "${enableval}" in
+                 yes) GTK_CAIRO_ENABLED=true ;;
+                 no) GTK_CAIRO_ENABLED=false ;;
+                 *) GTK_CAIRO_ENABLED=true ;;
+               esac
+ else
+   GTK_CAIRO_ENABLED=false
+ fi;
+ 
+ if test "x${GTK_CAIRO_ENABLED}" = xtrue; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define GTK_CAIRO 1
+ _ACEOF
+ 
+ fi
+ 
+ 
+ if test "x${GTK_CAIRO_ENABLED}" = xtrue; then
+   GTK_CAIRO_TRUE=
+   GTK_CAIRO_FALSE='#'
+ else
+   GTK_CAIRO_TRUE='#'
+   GTK_CAIRO_FALSE=
+ fi
+ 
+ 
+ # Check whether --enable-qt-peer or --disable-qt-peer was given.
+ if test "${enable_qt_peer+set}" = set; then
+   enableval="$enable_qt_peer"
+   case "${enableval}" in
+                 yes) COMPILE_QT_PEER=yes ;;
+                 no) COMPILE_QT_PEER=no ;;
+                 *) COMPILE_QT_PEER=yes ;;
+               esac
+ else
+   COMPILE_QT_PEER=no
+ fi;
+ 
+ 
+ if test "x${COMPILE_QT_PEER}" = xyes; then
+   CREATE_QT_PEER_LIBRARIES_TRUE=
+   CREATE_QT_PEER_LIBRARIES_FALSE='#'
+ else
+   CREATE_QT_PEER_LIBRARIES_TRUE='#'
+   CREATE_QT_PEER_LIBRARIES_FALSE=
+ fi
+ 
+ 
+ 
+ 
+ # Check whether --with-native-libdir or --without-native-libdir was given.
+ if test "${with_native_libdir+set}" = set; then
+   withval="$with_native_libdir"
+ 
+ 	     nativelibdir=${withval}
+ 
+ else
+ 
+ 	     nativelibdir='${libdir}/${PACKAGE}'
+ 
+ fi;
+ 
+ 
+ 
+ 
+ # Check whether --with-glibj-dir or --without-glibj-dir was given.
+ if test "${with_glibj_dir+set}" = set; then
+   withval="$with_glibj_dir"
+ 
+ 	     glibjdir=${withval}
+ 
+ else
+ 
+ 	     glibjdir='${datadir}/${PACKAGE}'
+ 
+ fi;
+ 
+ 
+ 
+ # Check whether --enable-regen-headers or --disable-regen-headers was given.
+ if test "${enable_regen_headers+set}" = set; then
+   enableval="$enable_regen_headers"
+   case "${enableval}" in
+                 yes) REGENERATE_JNI_HEADERS=yes ;;
+                 no) REGENERATE_JNI_HEADERS=no ;;
+                 *) REGENERATE_JNI_HEADERS=no ;;
+               esac
+ else
+   REGENERATE_JNI_HEADERS=no
+ fi;
+ 
+ 
+ if test "x${REGENERATE_JNI_HEADERS}" = xyes; then
+   CREATE_JNI_HEADERS_TRUE=
+   CREATE_JNI_HEADERS_FALSE='#'
+ else
+   CREATE_JNI_HEADERS_TRUE='#'
+   CREATE_JNI_HEADERS_FALSE=
+ fi
+ 
+ 
+ echo "$as_me:$LINENO: checking whether ln -s works" >&5
+ echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+ LN_S=$as_ln_s
+ if test "$LN_S" = "ln -s"; then
+   echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ else
+   echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+ echo "${ECHO_T}no, using $LN_S" >&6
+ fi
+ 
+ # Find a good install program.  We prefer a C program (faster),
+ # so one script is as good as another.  But avoid the broken or
+ # incompatible versions:
+ # SysV /etc/install, /usr/sbin/install
+ # SunOS /usr/etc/install
+ # IRIX /sbin/install
+ # AIX /bin/install
+ # AmigaOS /C/install, which installs bootblocks on floppy discs
+ # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+ # AFS /usr/afsws/bin/install, which mishandles nonexistent args
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # OS/2's system install, which has a completely different semantic
+ # ./install, which can be erroneously created by make from ./install.sh.
+ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+ echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+ if test -z "$INSTALL"; then
+ if test "${ac_cv_path_install+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   # Account for people who put trailing slashes in PATH elements.
+ case $as_dir/ in
+   ./ | .// | /cC/* | \
+   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+   ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+   /usr/ucb/* ) ;;
+   *)
+     # OSF1 and SCO ODT 3.0 have their own names for install.
+     # Don't use installbsd from OSF since it installs stuff as root
+     # by default.
+     for ac_prog in ginstall scoinst install; do
+       for ac_exec_ext in '' $ac_executable_extensions; do
+ 	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ 	  if test $ac_prog = install &&
+ 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ 	    # AIX install.  It has an incompatible calling convention.
+ 	    :
+ 	  elif test $ac_prog = install &&
+ 	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ 	    # program-specific install script used by HP pwplus--don't use.
+ 	    :
+ 	  else
+ 	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ 	    break 3
+ 	  fi
+ 	fi
+       done
+     done
+     ;;
+ esac
+ done
+ 
+ 
+ fi
+   if test "${ac_cv_path_install+set}" = set; then
+     INSTALL=$ac_cv_path_install
+   else
+     # As a last resort, use the slow shell script.  We don't cache a
+     # path for INSTALL within a source directory, because that will
+     # break other packages using the cache if that directory is
+     # removed, or if the path is relative.
+     INSTALL=$ac_install_sh
+   fi
+ fi
+ echo "$as_me:$LINENO: result: $INSTALL" >&5
+ echo "${ECHO_T}$INSTALL" >&6
+ 
+ # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+ # It thinks the first close brace ends the variable substitution.
+ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+ 
+ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+ 
+ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+ 
+ 
+ 
+ GCC_NO_EXECUTABLES
+ 
+ # Check whether --enable-static or --disable-static was given.
+ if test "${enable_static+set}" = set; then
+   enableval="$enable_static"
+   p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+   enable_static=no
+   # Look at the argument we got.  We use all the common list separators.
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+   for pkg in $enableval; do
+     if test "X$pkg" = "X$p"; then
+       enable_static=yes
+     fi
+   done
+   IFS="$ac_save_ifs"
+   ;;
+ esac
+ else
+   enable_static=no
+ fi;
+ # Check whether --enable-shared or --disable-shared was given.
+ if test "${enable_shared+set}" = set; then
+   enableval="$enable_shared"
+   p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+   enable_shared=no
+   # Look at the argument we got.  We use all the common list separators.
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+   for pkg in $enableval; do
+     if test "X$pkg" = "X$p"; then
+       enable_shared=yes
+     fi
+   done
+   IFS="$ac_save_ifs"
+   ;;
+ esac
+ else
+   enable_shared=yes
+ fi;
+ # Check whether --enable-fast-install or --disable-fast-install was given.
+ if test "${enable_fast_install+set}" = set; then
+   enableval="$enable_fast_install"
+   p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+   enable_fast_install=no
+   # Look at the argument we got.  We use all the common list separators.
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+   for pkg in $enableval; do
+     if test "X$pkg" = "X$p"; then
+       enable_fast_install=yes
+     fi
+   done
+   IFS="$ac_save_ifs"
+   ;;
+ esac
+ else
+   enable_fast_install=yes
+ fi;
+ 
+ # Check whether --with-gnu-ld or --without-gnu-ld was given.
+ if test "${with_gnu_ld+set}" = set; then
+   withval="$with_gnu_ld"
+   test "$withval" = no || with_gnu_ld=yes
+ else
+   with_gnu_ld=no
+ fi;
+ ac_prog=ld
+ if test "$GCC" = yes; then
+   # Check if gcc -print-prog-name=ld gives a path.
+   echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
+   case $host in
+   *-*-mingw*)
+     # gcc leaves a trailing carriage return which upsets mingw
+     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+   *)
+     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+   esac
+   case $ac_prog in
+     # Accept absolute paths.
+     [\\/]* | [A-Za-z]:[\\/]*)
+       re_direlt='/[^/][^/]*/\.\./'
+       # Canonicalize the path of ld
+       ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+       while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ 	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+       done
+       test -z "$LD" && LD="$ac_prog"
+       ;;
+   "")
+     # If it fails, then pretend we aren't using GCC.
+     ac_prog=ld
+     ;;
+   *)
+     # If it is relative, then search for the first ld in PATH.
+     with_gnu_ld=unknown
+     ;;
+   esac
+ elif test "$with_gnu_ld" = yes; then
+   echo "$as_me:$LINENO: checking for GNU ld" >&5
+ echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+ else
+   echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+ echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+ fi
+ if test "${lt_cv_path_LD+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -z "$LD"; then
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+   for ac_dir in $PATH; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+       lt_cv_path_LD="$ac_dir/$ac_prog"
+       # Check to see if the program is GNU ld.  I'd rather use --version,
+       # but apparently some GNU ld's only accept -v.
+       # Break only if it was the GNU/non-GNU ld that we prefer.
+       if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+ 	test "$with_gnu_ld" != no && break
+       else
+ 	test "$with_gnu_ld" != yes && break
+       fi
+     fi
+   done
+   IFS="$ac_save_ifs"
+ else
+   lt_cv_path_LD="$LD" # Let the user override the test with a path.
+ fi
+ fi
+ 
+ LD="$lt_cv_path_LD"
+ if test -n "$LD"; then
+   echo "$as_me:$LINENO: result: $LD" >&5
+ echo "${ECHO_T}$LD" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+ echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+    { (exit 1); exit 1; }; }
+ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+ echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+ if test "${lt_cv_prog_gnu_ld+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+ if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+   lt_cv_prog_gnu_ld=yes
+ else
+   lt_cv_prog_gnu_ld=no
+ fi
+ fi
+ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+ echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+ with_gnu_ld=$lt_cv_prog_gnu_ld
+ 
+ 
+ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+ echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+ if test "${lt_cv_ld_reload_flag+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   lt_cv_ld_reload_flag='-r'
+ fi
+ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+ echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+ reload_flag=$lt_cv_ld_reload_flag
+ test -n "$reload_flag" && reload_flag=" $reload_flag"
+ 
+ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+ echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+ if test "${lt_cv_path_NM+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$NM"; then
+   # Let the user override the test.
+   lt_cv_path_NM="$NM"
+ else
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+   for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+     test -z "$ac_dir" && ac_dir=.
+     tmp_nm=$ac_dir/${ac_tool_prefix}nm
+     if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+ 	lt_cv_path_NM="$tmp_nm -B"
+ 	break
+       elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+ 	lt_cv_path_NM="$tmp_nm -p"
+ 	break
+       else
+ 	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ 	continue # so that we can try to find one that supports BSD flags
+       fi
+     fi
+   done
+   IFS="$ac_save_ifs"
+   test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+ fi
+ fi
+ 
+ NM="$lt_cv_path_NM"
+ echo "$as_me:$LINENO: result: $NM" >&5
+ echo "${ECHO_T}$NM" >&6
+ 
+ echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5
+ echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
+ if test "${lt_cv_deplibs_check_method+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   lt_cv_file_magic_cmd='$MAGIC_CMD'
+ lt_cv_file_magic_test_file=
+ lt_cv_deplibs_check_method='unknown'
+ # Need to set the preceding variable on all platforms that support
+ # interlibrary dependencies.
+ # 'none' -- dependencies not supported.
+ # `unknown' -- same as none, but documents that we really don't know.
+ # 'pass_all' -- all dependencies passed with no checks.
+ # 'test_compile' -- check by making test program.
+ # 'file_magic [regex]' -- check by looking for files in library path
+ # which responds to the $file_magic_cmd with a given egrep regex.
+ # If you have `file' or equivalent on your system and you're not sure
+ # whether `pass_all' will *always* work, you probably want this one.
+ 
+ case $host_os in
+ aix*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ beos*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ bsdi4*)
+   lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+   lt_cv_file_magic_cmd='/usr/bin/file -L'
+   lt_cv_file_magic_test_file=/shlib/libc.so
+   ;;
+ 
+ cygwin* | mingw* |pw32*)
+   lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+   lt_cv_file_magic_cmd='$OBJDUMP -f'
+   ;;
+ 
+ darwin* | rhapsody*)
+   # this will be overwritten by pass_all, but leave it in just in case
+   lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+   lt_cv_file_magic_cmd='/usr/bin/file -L'
+   case "$host_os" in
+   rhapsody* | darwin1.012)
+     lt_cv_file_magic_test_file='/System/Library/Frameworks/System.framework/System'
+     ;;
+   *) # Darwin 1.3 on
+     lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+     ;;
+   esac
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ freebsd* | kfreebsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     case $host_cpu in
+     i*86 )
+       # Not sure whether the presence of OpenBSD here was a mistake.
+       # Let's accept both of them until this is cleared up.
+       lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+       lt_cv_file_magic_cmd=/usr/bin/file
+       lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+       ;;
+     esac
+   else
+     lt_cv_deplibs_check_method=pass_all
+   fi
+   ;;
+ 
+ gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ hpux10.20*|hpux11*)
+   case $host_cpu in
+   hppa*)
+     lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+     lt_cv_file_magic_cmd=/usr/bin/file
+     lt_cv_file_magic_test_file=/usr/lib/libc.sl
+     ;;
+   ia64*)
+     lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+     lt_cv_file_magic_cmd=/usr/bin/file
+     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+     ;;
+   esac
+   ;;
+ 
+ irix5* | irix6*)
+   case $host_os in
+   irix5*)
+     # this will be overridden with pass_all, but let us keep it just in case
+     lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+     ;;
+   *)
+     case $LD in
+     *-32|*"-32 ") libmagic=32-bit;;
+     *-n32|*"-n32 ") libmagic=N32;;
+     *-64|*"-64 ") libmagic=64-bit;;
+     *) libmagic=never-match;;
+     esac
+     # this will be overridden with pass_all, but let us keep it just in case
+     lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+     ;;
+   esac
+   lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ # This must be Linux ELF.
+ linux-gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+   else
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+   fi
+   ;;
+ 
+ newsos6)
+   lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+   lt_cv_file_magic_cmd=/usr/bin/file
+   lt_cv_file_magic_test_file=/usr/lib/libnls.so
+   ;;
+ 
+ osf3* | osf4* | osf5*)
+   # this will be overridden with pass_all, but let us keep it just in case
+   lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+   lt_cv_file_magic_test_file=/shlib/libc.so
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ sco3.2v5*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ solaris*)
+   lt_cv_deplibs_check_method=pass_all
+   lt_cv_file_magic_test_file=/lib/libc.so
+   ;;
+ 
+ sysv5uw[78]* | sysv4*uw2*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+   case $host_vendor in
+   ncr)
+     lt_cv_deplibs_check_method=pass_all
+     ;;
+   motorola)
+     lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+     lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+     ;;
+   esac
+   ;;
+ esac
+ 
+ fi
+ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+ echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ 
+ 
+ 
+ 
+ # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+ 
+ # find the maximum length of command line arguments
+ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+ echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+ if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+     i=0
+   teststring="ABCD"
+ 
+   case $build_os in
+   msdosdjgpp*)
+     # On DJGPP, this test can blow up pretty badly due to problems in libc
+     # (any single argument exceeding 2000 bytes causes a buffer overrun
+     # during glob expansion).  Even if it were fixed, the result of this
+     # check would be larger than it should be.
+     lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+     ;;
+ 
+   cygwin* | mingw*)
+     # On Win9x/ME, this test blows up -- it succeeds, but takes
+     # about 5 minutes as the teststring grows exponentially.
+     # Worse, since 9x/ME are not pre-emptively multitasking,
+     # you end up with a "frozen" computer, even though with patience
+     # the test eventually succeeds (with a max line length of 256k).
+     # Instead, let's just punt: use the minimum linelength reported by
+     # all of the supported platforms: 8192 (on NT/2K/XP).
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
+   amigaos*)
+     # On AmigaOS with pdksh, this test takes hours, literally.
+     # So we just punt and use a minimum line length of 8192.
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
+   netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+     # This has been around since 386BSD, at least.  Likely further.
+     if test -x /sbin/sysctl; then
+       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+     elif test -x /usr/sbin/sysctl; then
+       lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+     else
+       lt_cv_sys_max_cmd_len=65536 # usable default for *BSD
+     fi
+     # And add a safety zone
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+     ;;
+   esac
+ 
+ fi
+ 
+ if test -n "$lt_cv_sys_max_cmd_len" ; then
+   echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+ echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+ else
+   echo "$as_me:$LINENO: result: none" >&5
+ echo "${ECHO_T}none" >&6
+ fi
+ 
+ 
+ # Only perform the check for file, if the check method requires it
+ case $deplibs_check_method in
+ file_magic*)
+   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+     echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+ echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+ if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $MAGIC_CMD in
+   /*)
+   lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+   ;;
+   ?:/*)
+   lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+   ;;
+   *)
+   ac_save_MAGIC_CMD="$MAGIC_CMD"
+   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+   ac_dummy="/usr/bin:$PATH"
+   for ac_dir in $ac_dummy; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f $ac_dir/${ac_tool_prefix}file; then
+       lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+       if test -n "$file_magic_test_file"; then
+ 	case $deplibs_check_method in
+ 	"file_magic "*)
+ 	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ 	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ 	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ 	    egrep "$file_magic_regex" > /dev/null; then
+ 	    :
+ 	  else
+ 	    cat <<EOF 1>&2
+ 
+ *** Warning: the command libtool uses to detect shared libraries,
+ *** $file_magic_cmd, produces output that libtool cannot recognize.
+ *** The result is that libtool may fail to recognize shared libraries
+ *** as such.  This will affect the creation of libtool libraries that
+ *** depend on shared libraries, but programs linked with such libtool
+ *** libraries will work regardless of this problem.  Nevertheless, you
+ *** may want to report the problem to your system manager and/or to
+ *** bug-libtool@gnu.org
+ 
+ EOF
+ 	  fi ;;
+ 	esac
+       fi
+       break
+     fi
+   done
+   IFS="$ac_save_ifs"
+   MAGIC_CMD="$ac_save_MAGIC_CMD"
+   ;;
+ esac
+ fi
+ 
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if test -n "$MAGIC_CMD"; then
+   echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+ echo "${ECHO_T}$MAGIC_CMD" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ if test -z "$lt_cv_path_MAGIC_CMD"; then
+   if test -n "$ac_tool_prefix"; then
+     echo "$as_me:$LINENO: checking for file" >&5
+ echo $ECHO_N "checking for file... $ECHO_C" >&6
+ if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $MAGIC_CMD in
+   /*)
+   lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+   ;;
+   ?:/*)
+   lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+   ;;
+   *)
+   ac_save_MAGIC_CMD="$MAGIC_CMD"
+   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+   ac_dummy="/usr/bin:$PATH"
+   for ac_dir in $ac_dummy; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f $ac_dir/file; then
+       lt_cv_path_MAGIC_CMD="$ac_dir/file"
+       if test -n "$file_magic_test_file"; then
+ 	case $deplibs_check_method in
+ 	"file_magic "*)
+ 	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ 	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ 	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ 	    egrep "$file_magic_regex" > /dev/null; then
+ 	    :
+ 	  else
+ 	    cat <<EOF 1>&2
+ 
+ *** Warning: the command libtool uses to detect shared libraries,
+ *** $file_magic_cmd, produces output that libtool cannot recognize.
+ *** The result is that libtool may fail to recognize shared libraries
+ *** as such.  This will affect the creation of libtool libraries that
+ *** depend on shared libraries, but programs linked with such libtool
+ *** libraries will work regardless of this problem.  Nevertheless, you
+ *** may want to report the problem to your system manager and/or to
+ *** bug-libtool@gnu.org
+ 
+ EOF
+ 	  fi ;;
+ 	esac
+       fi
+       break
+     fi
+   done
+   IFS="$ac_save_ifs"
+   MAGIC_CMD="$ac_save_MAGIC_CMD"
+   ;;
+ esac
+ fi
+ 
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if test -n "$MAGIC_CMD"; then
+   echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+ echo "${ECHO_T}$MAGIC_CMD" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   else
+     MAGIC_CMD=:
+   fi
+ fi
+ 
+   fi
+   ;;
+ esac
+ 
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_RANLIB+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$RANLIB"; then
+   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ RANLIB=$ac_cv_prog_RANLIB
+ if test -n "$RANLIB"; then
+   echo "$as_me:$LINENO: result: $RANLIB" >&5
+ echo "${ECHO_T}$RANLIB" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_RANLIB"; then
+   ac_ct_RANLIB=$RANLIB
+   # Extract the first word of "ranlib", so it can be a program name with args.
+ set dummy ranlib; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_RANLIB"; then
+   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_RANLIB="ranlib"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+ fi
+ fi
+ ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+ if test -n "$ac_ct_RANLIB"; then
+   echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+ echo "${ECHO_T}$ac_ct_RANLIB" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   RANLIB=$ac_ct_RANLIB
+ else
+   RANLIB="$ac_cv_prog_RANLIB"
+ fi
+ 
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_STRIP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$STRIP"; then
+   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ STRIP=$ac_cv_prog_STRIP
+ if test -n "$STRIP"; then
+   echo "$as_me:$LINENO: result: $STRIP" >&5
+ echo "${ECHO_T}$STRIP" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_STRIP"; then
+   ac_ct_STRIP=$STRIP
+   # Extract the first word of "strip", so it can be a program name with args.
+ set dummy strip; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_STRIP"; then
+   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_STRIP="strip"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+ fi
+ fi
+ ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+ if test -n "$ac_ct_STRIP"; then
+   echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+ echo "${ECHO_T}$ac_ct_STRIP" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   STRIP=$ac_ct_STRIP
+ else
+   STRIP="$ac_cv_prog_STRIP"
+ fi
+ 
+ 
+ # Check for any special flags to pass to ltconfig.
+ libtool_flags="--cache-file=$cache_file"
+ test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
+ test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
+ test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
+ test "$GCC" = yes && libtool_flags="$libtool_flags --with-gcc"
+ test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
+ 
+ 
+ # Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+ if test "${enable_libtool_lock+set}" = set; then
+   enableval="$enable_libtool_lock"
+ 
+ fi;
+ test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
+ test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
+ 
+ 
+ # Check whether --with-pic or --without-pic was given.
+ if test "${with_pic+set}" = set; then
+   withval="$with_pic"
+   pic_mode="$withval"
+ else
+   pic_mode=default
+ fi;
+ test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic"
+ test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
+ 
+ # Some flags need to be propagated to the compiler or linker for good
+ # libtool support.
+ case $host in
+ *-*-irix6*)
+   # Find out which ABI we are using.
+   echo '#line 5135 "configure"' > conftest.$ac_ext
+   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+     case `/usr/bin/file conftest.$ac_objext` in
+     *32-bit*)
+       LD="${LD-ld} -melf32bsmip"
+       ;;
+     *N32*)
+       LD="${LD-ld} -melf32bmipn32"
+       ;;
+     *64-bit*)
+       LD="${LD-ld} -melf64bmip"
+       ;;
+     esac
+    else
+     case `/usr/bin/file conftest.$ac_objext` in
+     *32-bit*)
+       LD="${LD-ld} -32"
+       ;;
+     *N32*)
+       LD="${LD-ld} -n32"
+       ;;
+     *64-bit*)
+       LD="${LD-ld} -64"
+       ;;
+     esac
+    fi
+   fi
+   rm -rf conftest*
+   ;;
+ 
+ ia64-*-hpux*)
+   # Find out which ABI we are using.
+   echo 'int i;' > conftest.$ac_ext
+   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+     case "`/usr/bin/file conftest.o`" in
+     *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+     *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+     esac
+   fi
+   rm -rf conftest*
+   ;;
+ 
+ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+   # Find out which ABI we are using.
+   echo 'int i;' > conftest.$ac_ext
+   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+     case "`/usr/bin/file conftest.o`" in
+     *32-bit*)
+       case $host in
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+     *64-bit*)
+       case $host in
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+     esac
+   fi
+   rm -rf conftest*
+   ;;
+ 
+ *-*-sco3.2v5*)
+   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+   SAVE_CFLAGS="$CFLAGS"
+   CFLAGS="$CFLAGS -belf"
+   echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+ echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+ if test "${lt_cv_cc_needs_belf+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ 
+ 
+      ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+      cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   lt_cv_cc_needs_belf=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ lt_cv_cc_needs_belf=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+      ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ fi
+ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+ echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+   if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+     CFLAGS="$SAVE_CFLAGS"
+   fi
+   ;;
+ 
+ 
+ esac
+ 
+ 
+ # Save cache, so that ltconfig can load it
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+ # scripts and configure runs, see configure's option --config-cache.
+ # It is not useful on other systems.  If it contains results you don't
+ # want to keep, you may remove or edit it.
+ #
+ # config.status only pays attention to the cache file if you give it
+ # the --recheck option to rerun configure.
+ #
+ # `ac_cv_env_foo' variables (set or unset) will be overridden when
+ # loading this file, other *unset* `ac_cv_foo' will be assigned the
+ # following values.
+ 
+ _ACEOF
+ 
+ # The following way of writing the cache mishandles newlines in values,
+ # but we know of no workaround that is simple, portable, and efficient.
+ # So, don't put newlines in cache variables' values.
+ # Ultrix sh set writes to stderr and can't be redirected directly,
+ # and sets the high bit in the cache file unless we assign to the vars.
+ {
+   (set) 2>&1 |
+     case `(ac_space=' '; set | grep ac_space) 2>&1` in
+     *ac_space=\ *)
+       # `set' does not quote correctly, so add quotes (double-quote
+       # substitution turns \\\\ into \\, and sed turns \\ into \).
+       sed -n \
+ 	"s/'/'\\\\''/g;
+ 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+       ;;
+     *)
+       # `set' quotes correctly as required by POSIX, so do not add quotes.
+       sed -n \
+ 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+       ;;
+     esac;
+ } |
+   sed '
+      t clear
+      : clear
+      s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+      t end
+      /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+      : end' >>confcache
+ if diff $cache_file confcache >/dev/null 2>&1; then :; else
+   if test -w $cache_file; then
+     test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+     cat confcache >$cache_file
+   else
+     echo "not updating unwritable cache $cache_file"
+   fi
+ fi
+ rm -f confcache
+ 
+ # Actually configure libtool.  ac_aux_dir is where install-sh is found.
+ AR="$AR" LTCC="$CC" CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
+ MAGIC_CMD="$MAGIC_CMD" LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
+ LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" STRIP="$STRIP" \
+ AS="$AS" DLLTOOL="$DLLTOOL" OBJDUMP="$OBJDUMP" \
+ objext="$OBJEXT" exeext="$EXEEXT" reload_flag="$reload_flag" \
+ deplibs_check_method="$deplibs_check_method" file_magic_cmd="$file_magic_cmd" \
+ ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
+ $libtool_flags --no-verify --build="$build" $ac_aux_dir/ltmain.sh $host \
+ || { { echo "$as_me:$LINENO: error: libtool configure failed" >&5
+ echo "$as_me: error: libtool configure failed" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ # Reload cache, that may have been modified by ltconfig
+ if test -r "$cache_file"; then
+   # Some versions of bash will fail to source /dev/null (special
+   # files actually), so we avoid doing that.
+   if test -f "$cache_file"; then
+     { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+ echo "$as_me: loading cache $cache_file" >&6;}
+     case $cache_file in
+       [\\/]* | ?:[\\/]* ) . $cache_file;;
+       *)                      . ./$cache_file;;
+     esac
+   fi
+ else
+   { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+ echo "$as_me: creating cache $cache_file" >&6;}
+   >$cache_file
+ fi
+ 
+ 
+ # This can be used to rebuild libtool when needed
+ LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh $ac_aux_dir/ltcf-c.sh"
+ 
+ # Always use our own libtool.
+ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+ 
+ # Redirect the config.log output again, so that the ltconfig log is not
+ # clobbered by the next message.
+ exec 5>>./config.log
+ 
+ 
+ 
+ 
+ 
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gcc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="${ac_tool_prefix}gcc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+   ac_ct_CC=$CC
+   # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="gcc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+ echo "${ECHO_T}$ac_ct_CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   CC=$ac_ct_CC
+ else
+   CC="$ac_cv_prog_CC"
+ fi
+ 
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}cc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="${ac_tool_prefix}cc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+   ac_ct_CC=$CC
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="cc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+ echo "${ECHO_T}$ac_ct_CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   CC=$ac_ct_CC
+ else
+   CC="$ac_cv_prog_CC"
+ fi
+ 
+ fi
+ if test -z "$CC"; then
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+   ac_prog_rejected=no
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+        continue
+      fi
+     ac_cv_prog_CC="cc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ if test $ac_prog_rejected = yes; then
+   # We found a bogon in the path, so make sure we never use it.
+   set dummy $ac_cv_prog_CC
+   shift
+   if test $# != 0; then
+     # We chose a different compiler from the bogus one.
+     # However, it has the same basename, so the bogon will be chosen
+     # first if we set CC to just the basename; use the full file name.
+     shift
+     ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+   fi
+ fi
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   for ac_prog in cl
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     test -n "$CC" && break
+   done
+ fi
+ if test -z "$CC"; then
+   ac_ct_CC=$CC
+   for ac_prog in cl
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+ echo "${ECHO_T}$ac_ct_CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   test -n "$ac_ct_CC" && break
+ done
+ 
+   CC=$ac_ct_CC
+ fi
+ 
+ fi
+ 
+ 
+ test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: no acceptable C compiler found in \$PATH
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ # Provide some information about the compiler.
+ echo "$as_me:$LINENO:" \
+      "checking for C compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+   (eval $ac_compiler --version </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+   (eval $ac_compiler -v </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+   (eval $ac_compiler -V </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ 
+ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+ echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+ if test "${ac_cv_c_compiler_gnu+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ #ifndef __GNUC__
+        choke me
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_compiler_gnu=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_compiler_gnu=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_c_compiler_gnu=$ac_compiler_gnu
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+ echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+ GCC=`test $ac_compiler_gnu = yes && echo yes`
+ ac_test_CFLAGS=${CFLAGS+set}
+ ac_save_CFLAGS=$CFLAGS
+ CFLAGS="-g"
+ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+ echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+ if test "${ac_cv_prog_cc_g+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_prog_cc_g=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_prog_cc_g=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+ echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+ if test "$ac_test_CFLAGS" = set; then
+   CFLAGS=$ac_save_CFLAGS
+ elif test $ac_cv_prog_cc_g = yes; then
+   if test "$GCC" = yes; then
+     CFLAGS="-g -O2"
+   else
+     CFLAGS="-g"
+   fi
+ else
+   if test "$GCC" = yes; then
+     CFLAGS="-O2"
+   else
+     CFLAGS=
+   fi
+ fi
+ echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+ echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+ if test "${ac_cv_prog_cc_stdc+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_prog_cc_stdc=no
+ ac_save_CC=$CC
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+ struct buf { int x; };
+ FILE * (*rcsopen) (struct buf *, struct stat *, int);
+ static char *e (p, i)
+      char **p;
+      int i;
+ {
+   return p[i];
+ }
+ static char *f (char * (*g) (char **, int), char **p, ...)
+ {
+   char *s;
+   va_list v;
+   va_start (v,p);
+   s = g (p, va_arg (v,int));
+   va_end (v);
+   return s;
+ }
+ 
+ /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+    function prototypes and stuff, but not '\xHH' hex character constants.
+    These don't provoke an error unfortunately, instead are silently treated
+    as 'x'.  The following induces an error, until -std1 is added to get
+    proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+    array size at least.  It's necessary to write '\x00'==0 to get something
+    that's true only with -std1.  */
+ int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+ 
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};
+ int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+ int argc;
+ char **argv;
+ int
+ main ()
+ {
+ return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+   ;
+   return 0;
+ }
+ _ACEOF
+ # Don't try gcc -ansi; that turns off useful extensions and
+ # breaks some systems' header files.
+ # AIX			-qlanglvl=ansi
+ # Ultrix and OSF/1	-std1
+ # HP-UX 10.20 and later	-Ae
+ # HP-UX older versions	-Aa -D_HPUX_SOURCE
+ # SVR4			-Xc -D__EXTENSIONS__
+ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+ do
+   CC="$ac_save_CC $ac_arg"
+   rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_prog_cc_stdc=$ac_arg
+ break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext
+ done
+ rm -f conftest.$ac_ext conftest.$ac_objext
+ CC=$ac_save_CC
+ 
+ fi
+ 
+ case "x$ac_cv_prog_cc_stdc" in
+   x|xno)
+     echo "$as_me:$LINENO: result: none needed" >&5
+ echo "${ECHO_T}none needed" >&6 ;;
+   *)
+     echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+ echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+     CC="$CC $ac_cv_prog_cc_stdc" ;;
+ esac
+ 
+ # Some people use a C++ compiler to compile C.  Since we use `exit',
+ # in C++ we need to declare it.  In case someone uses the same compiler
+ # for both compiling C and C++ we need to have the C++ compiler decide
+ # the declaration of exit, since it's the most demanding environment.
+ cat >conftest.$ac_ext <<_ACEOF
+ #ifndef __cplusplus
+   choke me
+ #endif
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   for ac_declaration in \
+    '' \
+    'extern "C" void std::exit (int) throw (); using std::exit;' \
+    'extern "C" void std::exit (int); using std::exit;' \
+    'extern "C" void exit (int) throw ();' \
+    'extern "C" void exit (int);' \
+    'void exit (int);'
+ do
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+ rm -f conftest*
+ if test -n "$ac_declaration"; then
+   echo '#ifdef __cplusplus' >>confdefs.h
+   echo $ac_declaration      >>confdefs.h
+   echo '#endif'             >>confdefs.h
+ fi
+ 
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ depcc="$CC"   am_compiler_list=
+ 
+ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+ echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+ if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+   # making a dummy file named `D' -- because `-MD' means `put the output
+   # in D'.
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+   # side effect of compilation, but ICC will put the dependencies in
+   # the current directory while Tru64 will put them in the object
+   # directory.
+   mkdir sub
+ 
+   am_cv_CC_dependencies_compiler_type=none
+   if test "$am_compiler_list" = ""; then
+      am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+   fi
+   for depmode in $am_compiler_list; do
+     # Setup a source with many dependencies, because some compilers
+     # like to wrap large dependency lists on column 80 (with \), and
+     # we should not choose a depcomp mode which is confused by this.
+     #
+     # We need to recreate these files for each test, as the compiler may
+     # overwrite some of them when testing with obscure command lines.
+     # This happens at least with the AIX C compiler.
+     : > sub/conftest.c
+     for i in 1 2 3 4 5 6; do
+       echo '#include "conftst'$i'.h"' >> sub/conftest.c
+       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+       # Solaris 8's {/usr,}/bin/sh.
+       touch sub/conftst$i.h
+     done
+     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+ 
+     case $depmode in
+     nosideeffect)
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+     none) break ;;
+     esac
+     # We check with `-c' and `-o' for the sake of the "dashmstdout"
+     # mode.  It turns out that the SunPro C++ compiler does not properly
+     # handle `-M -o', and we need to detect this.
+     if depmode=$depmode \
+        source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+        $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+          >/dev/null 2>conftest.err &&
+        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+       # icc doesn't choke on unknown options, it will just issue warnings
+       # or remarks (even with -Werror).  So we grep stderr for any message
+       # that says an option was ignored or not supported.
+       # When given -MP, icc 7.0 and 7.1 complain thusly:
+       #   icc: Command line warning: ignoring option '-M'; no argument required
+       # The diagnosis changed in icc 8.0:
+       #   icc: Command line remark: option '-MP' not supported
+       if (grep 'ignoring option' conftest.err ||
+           grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+         am_cv_CC_dependencies_compiler_type=$depmode
+         break
+       fi
+     fi
+   done
+ 
+   cd ..
+   rm -rf conftest.dir
+ else
+   am_cv_CC_dependencies_compiler_type=none
+ fi
+ 
+ fi
+ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+ echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+ CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+ 
+ 
+ 
+ if
+   test "x$enable_dependency_tracking" != xno \
+   && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+   am__fastdepCC_TRUE=
+   am__fastdepCC_FALSE='#'
+ else
+   am__fastdepCC_TRUE='#'
+   am__fastdepCC_FALSE=
+ fi
+ 
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+ echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+ # On Suns, sometimes $CPP names a directory.
+ if test -n "$CPP" && test -d "$CPP"; then
+   CPP=
+ fi
+ if test -z "$CPP"; then
+   if test "${ac_cv_prog_CPP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+       # Double quotes because CPP needs to be expanded
+     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+     do
+       ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   break
+ fi
+ 
+     done
+     ac_cv_prog_CPP=$CPP
+ 
+ fi
+   CPP=$ac_cv_prog_CPP
+ else
+   ac_cv_prog_CPP=$CPP
+ fi
+ echo "$as_me:$LINENO: result: $CPP" >&5
+ echo "${ECHO_T}$CPP" >&6
+ ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   :
+ else
+   { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ ac_ext=cc
+ ac_cpp='$CXXCPP $CPPFLAGS'
+ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+   for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CXX+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CXX"; then
+   ac_cv_prog_CXX="$CXX" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CXX=$ac_cv_prog_CXX
+ if test -n "$CXX"; then
+   echo "$as_me:$LINENO: result: $CXX" >&5
+ echo "${ECHO_T}$CXX" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     test -n "$CXX" && break
+   done
+ fi
+ if test -z "$CXX"; then
+   ac_ct_CXX=$CXX
+   for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CXX"; then
+   ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CXX="$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+ if test -n "$ac_ct_CXX"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+ echo "${ECHO_T}$ac_ct_CXX" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   test -n "$ac_ct_CXX" && break
+ done
+ test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+ 
+   CXX=$ac_ct_CXX
+ fi
+ 
+ 
+ # Provide some information about the compiler.
+ echo "$as_me:$LINENO:" \
+      "checking for C++ compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+   (eval $ac_compiler --version </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+   (eval $ac_compiler -v </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+   (eval $ac_compiler -V </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ 
+ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+ echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+ if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ #ifndef __GNUC__
+        choke me
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_cxx_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_compiler_gnu=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_compiler_gnu=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+ echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+ GXX=`test $ac_compiler_gnu = yes && echo yes`
+ ac_test_CXXFLAGS=${CXXFLAGS+set}
+ ac_save_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="-g"
+ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+ echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+ if test "${ac_cv_prog_cxx_g+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_cxx_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_prog_cxx_g=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_prog_cxx_g=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+ echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+ if test "$ac_test_CXXFLAGS" = set; then
+   CXXFLAGS=$ac_save_CXXFLAGS
+ elif test $ac_cv_prog_cxx_g = yes; then
+   if test "$GXX" = yes; then
+     CXXFLAGS="-g -O2"
+   else
+     CXXFLAGS="-g"
+   fi
+ else
+   if test "$GXX" = yes; then
+     CXXFLAGS="-O2"
+   else
+     CXXFLAGS=
+   fi
+ fi
+ for ac_declaration in \
+    '' \
+    'extern "C" void std::exit (int) throw (); using std::exit;' \
+    'extern "C" void std::exit (int); using std::exit;' \
+    'extern "C" void exit (int) throw ();' \
+    'extern "C" void exit (int);' \
+    'void exit (int);'
+ do
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_cxx_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_cxx_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+ rm -f conftest*
+ if test -n "$ac_declaration"; then
+   echo '#ifdef __cplusplus' >>confdefs.h
+   echo $ac_declaration      >>confdefs.h
+   echo '#endif'             >>confdefs.h
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ depcc="$CXX"  am_compiler_list=
+ 
+ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+ echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+ if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+   # making a dummy file named `D' -- because `-MD' means `put the output
+   # in D'.
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+   # side effect of compilation, but ICC will put the dependencies in
+   # the current directory while Tru64 will put them in the object
+   # directory.
+   mkdir sub
+ 
+   am_cv_CXX_dependencies_compiler_type=none
+   if test "$am_compiler_list" = ""; then
+      am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+   fi
+   for depmode in $am_compiler_list; do
+     # Setup a source with many dependencies, because some compilers
+     # like to wrap large dependency lists on column 80 (with \), and
+     # we should not choose a depcomp mode which is confused by this.
+     #
+     # We need to recreate these files for each test, as the compiler may
+     # overwrite some of them when testing with obscure command lines.
+     # This happens at least with the AIX C compiler.
+     : > sub/conftest.c
+     for i in 1 2 3 4 5 6; do
+       echo '#include "conftst'$i'.h"' >> sub/conftest.c
+       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+       # Solaris 8's {/usr,}/bin/sh.
+       touch sub/conftst$i.h
+     done
+     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+ 
+     case $depmode in
+     nosideeffect)
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+     none) break ;;
+     esac
+     # We check with `-c' and `-o' for the sake of the "dashmstdout"
+     # mode.  It turns out that the SunPro C++ compiler does not properly
+     # handle `-M -o', and we need to detect this.
+     if depmode=$depmode \
+        source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+        $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+          >/dev/null 2>conftest.err &&
+        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+       # icc doesn't choke on unknown options, it will just issue warnings
+       # or remarks (even with -Werror).  So we grep stderr for any message
+       # that says an option was ignored or not supported.
+       # When given -MP, icc 7.0 and 7.1 complain thusly:
+       #   icc: Command line warning: ignoring option '-M'; no argument required
+       # The diagnosis changed in icc 8.0:
+       #   icc: Command line remark: option '-MP' not supported
+       if (grep 'ignoring option' conftest.err ||
+           grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+         am_cv_CXX_dependencies_compiler_type=$depmode
+         break
+       fi
+     fi
+   done
+ 
+   cd ..
+   rm -rf conftest.dir
+ else
+   am_cv_CXX_dependencies_compiler_type=none
+ fi
+ 
+ fi
+ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+ echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+ CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+ 
+ 
+ 
+ if
+   test "x$enable_dependency_tracking" != xno \
+   && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+   am__fastdepCXX_TRUE=
+   am__fastdepCXX_FALSE='#'
+ else
+   am__fastdepCXX_TRUE='#'
+   am__fastdepCXX_FALSE=
+ fi
+ 
+ ac_ext=cc
+ ac_cpp='$CXXCPP $CPPFLAGS'
+ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+ echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+ if test -z "$CXXCPP"; then
+   if test "${ac_cv_prog_CXXCPP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+       # Double quotes because CXXCPP needs to be expanded
+     for CXXCPP in "$CXX -E" "/lib/cpp"
+     do
+       ac_preproc_ok=false
+ for ac_cxx_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_cxx_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_cxx_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   break
+ fi
+ 
+     done
+     ac_cv_prog_CXXCPP=$CXXCPP
+ 
+ fi
+   CXXCPP=$ac_cv_prog_CXXCPP
+ else
+   ac_cv_prog_CXXCPP=$CXXCPP
+ fi
+ echo "$as_me:$LINENO: result: $CXXCPP" >&5
+ echo "${ECHO_T}$CXXCPP" >&6
+ ac_preproc_ok=false
+ for ac_cxx_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_cxx_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_cxx_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   :
+ else
+   { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ 
+ LIBTOOL_DEPS=$LIBTOOL_DEPS" $ac_aux_dir/ltcf-cxx.sh"
+ lt_save_CC="$CC"
+ lt_save_CFLAGS="$CFLAGS"
+ AR="$AR" LTCC="$CC" CC="$CXX" CXX="$CXX" CFLAGS="$CXXFLAGS" CPPFLAGS="$CPPFLAGS" \
+ MAGIC_CMD="$MAGIC_CMD" LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
+ LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" STRIP="$STRIP" \
+ AS="$AS" DLLTOOL="$DLLTOOL" OBJDUMP="$OBJDUMP" \
+ objext="$OBJEXT" exeext="$EXEEXT" reload_flag="$reload_flag" \
+ deplibs_check_method="$deplibs_check_method" \
+ file_magic_cmd="$file_magic_cmd" \
+ ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig -o libtool $libtool_flags \
+ --build="$build" --add-tag=CXX $ac_aux_dir/ltcf-cxx.sh $host \
+ || { { echo "$as_me:$LINENO: error: libtool tag configuration failed" >&5
+ echo "$as_me: error: libtool tag configuration failed" >&2;}
+    { (exit 1); exit 1; }; }
+ CC="$lt_save_CC"
+ CFLAGS="$lt_save_CFLAGS"
+ 
+ # Redirect the config.log output again, so that the ltconfig log is not
+ # clobbered by the next message.
+ exec 5>>./config.log
+ 
+ 
+ 
+ 
+ if test "x${COMPILE_JNI}" = xyes; then
+   echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+ echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+ if test "${ac_cv_header_stdc+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include <string.h>
+ #include <float.h>
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_header_stdc=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_header_stdc=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ 
+ if test $ac_cv_header_stdc = yes; then
+   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <string.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "memchr" >/dev/null 2>&1; then
+   :
+ else
+   ac_cv_header_stdc=no
+ fi
+ rm -f conftest*
+ 
+ fi
+ 
+ if test $ac_cv_header_stdc = yes; then
+   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "free" >/dev/null 2>&1; then
+   :
+ else
+   ac_cv_header_stdc=no
+ fi
+ rm -f conftest*
+ 
+ fi
+ 
+ if test $ac_cv_header_stdc = yes; then
+   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+   if test "$cross_compiling" = yes; then
+   :
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ctype.h>
+ #if ((' ' & 0x0FF) == 0x020)
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+ #else
+ # define ISLOWER(c) \
+ 		   (('a' <= (c) && (c) <= 'i') \
+ 		     || ('j' <= (c) && (c) <= 'r') \
+ 		     || ('s' <= (c) && (c) <= 'z'))
+ # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+ #endif
+ 
+ #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+ int
+ main ()
+ {
+   int i;
+   for (i = 0; i < 256; i++)
+     if (XOR (islower (i), ISLOWER (i))
+ 	|| toupper (i) != TOUPPER (i))
+       exit(2);
+   exit (0);
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   :
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ( exit $ac_status )
+ ac_cv_header_stdc=no
+ fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+ echo "${ECHO_T}$ac_cv_header_stdc" >&6
+ if test $ac_cv_header_stdc = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define STDC_HEADERS 1
+ _ACEOF
+ 
+ fi
+ 
+ 
+       echo "$as_me:$LINENO: checking size of void *" >&5
+ echo $ECHO_N "checking size of void *... $ECHO_C" >&6
+ if test "${ac_cv_sizeof_void_p+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include "confdefs.h"
+ #include <sys/types.h>
+ 
+ 
+ int
+ main ()
+ {
+ switch (0) case 0: case (sizeof (void *) == $ac_size):;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_sizeof_void_p=$ac_size
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   if test x$ac_cv_sizeof_void_p != x ; then break; fi
+ done
+ 
+ fi
+ 
+ if test x$ac_cv_sizeof_void_p = x ; then
+   { { echo "$as_me:$LINENO: error: cannot determine a size for void *" >&5
+ echo "$as_me: error: cannot determine a size for void *" >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5
+ echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+ _ACEOF
+ 
+ 
+ 
+     echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+ echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
+ if test "${ac_cv_c_bigendian+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_c_bigendian=unknown
+ # See if sys/param.h defines the BYTE_ORDER macro.
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/types.h>
+ #include <sys/param.h>
+ int
+ main ()
+ {
+ 
+ #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
+  bogus endian macros
+ #endif
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   # It does; now see whether it defined to BIG_ENDIAN or not.
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/types.h>
+ #include <sys/param.h>
+ int
+ main ()
+ {
+ 
+ #if BYTE_ORDER != BIG_ENDIAN
+  not big endian
+ #endif
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_c_bigendian=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_c_bigendian=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test $ac_cv_c_bigendian = unknown; then
+ if test "$cross_compiling" = yes; then
+    echo $ac_n "cross-compiling... " 2>&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ main () {
+   /* Are we little or big endian?  From Harbison&Steele.  */
+   union
+   {
+     long l;
+     char c[sizeof (long)];
+   } u;
+   u.l = 1;
+   exit (u.c[sizeof (long) - 1] == 1);
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_c_bigendian=no
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ( exit $ac_status )
+ ac_cv_c_bigendian=yes
+ fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+ echo "${ECHO_T}$ac_cv_c_bigendian" >&6
+ if test $ac_cv_c_bigendian = unknown; then
+ echo "$as_me:$LINENO: checking to probe for byte ordering" >&5
+ echo $ECHO_N "checking to probe for byte ordering... $ECHO_C" >&6
+ 
+ cat >conftest.c <<EOF
+ short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; }
+ short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; }
+ int main() { _ascii (); _ebcdic (); return 0; }
+ EOF
+  if test -f conftest.c ; then
+      if ${CC-cc} ${CFLAGS} -c conftest.c -o conftest.o && test -f conftest.o ; then
+         if test `grep -l BIGenDianSyS conftest.o` ; then
+            echo $ac_n ' big endian probe OK, ' 1>&6
+            ac_cv_c_bigendian=yes
+         fi
+         if test `grep -l LiTTleEnDian conftest.o` ; then
+            echo $ac_n ' little endian probe OK, ' 1>&6
+            if test $ac_cv_c_bigendian = yes ; then
+             ac_cv_c_bigendian=unknown;
+            else
+             ac_cv_c_bigendian=no
+            fi
+         fi
+         echo $ac_n 'guessing bigendian ...  ' >&6
+      fi
+   fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+ echo "${ECHO_T}$ac_cv_c_bigendian" >&6
+ fi
+ if test $ac_cv_c_bigendian = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define WORDS_BIGENDIAN 1
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HOST_WORDS_BIG_ENDIAN 1
+ _ACEOF
+ 
+   BYTEORDER=4321
+ else
+   BYTEORDER=1234
+ fi
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define BYTEORDER $BYTEORDER
+ _ACEOF
+ 
+ if test $ac_cv_c_bigendian = unknown; then
+   { { echo "$as_me:$LINENO: error: unknown endianess - sorry, please pre-set ac_cv_c_bigendian" >&5
+ echo "$as_me: error: unknown endianess - sorry, please pre-set ac_cv_c_bigendian" >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ for ac_header in unistd.h sys/types.h sys/config.h sys/ioctl.h \
+ 		    asm/ioctls.h \
+ 		    inttypes.h stdint.h utime.h sys/utime.h sys/filio.h \
+ 		    sys/time.h \
+ 		    sys/select.h \
+ 		    crt_externs.h \
+                     fcntl.h \
+ 		    sys/mman.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ else
+   # Is the header compilable?
+ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+ echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_header_compiler=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_header_compiler=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+ echo "${ECHO_T}$ac_header_compiler" >&6
+ 
+ # Is the header present?
+ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+ echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <$ac_header>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   ac_header_preproc=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   ac_header_preproc=no
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+ echo "${ECHO_T}$ac_header_preproc" >&6
+ 
+ # So?  What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+   yes:no: )
+     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+ echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+ echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+     ac_header_preproc=yes
+     ;;
+   no:yes:* )
+     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+ echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+ echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+ echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+ echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+     (
+       cat <<\_ASBOX
+ ## -------------------------------- ##
+ ## Report this to classpath@gnu.org ##
+ ## -------------------------------- ##
+ _ASBOX
+     ) |
+       sed "s/^/$as_me: WARNING:     /" >&2
+     ;;
+ esac
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   eval "$as_ac_Header=\$ac_header_preproc"
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ 
+ fi
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+   cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ _ACEOF
+ 
+ fi
+ 
+ done
+ 
+ 
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdint.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "uint32_t" >/dev/null 2>&1; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_INT32_DEFINED 1
+ _ACEOF
+ 
+ fi
+ rm -f conftest*
+ 
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <inttypes.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "uint32_t" >/dev/null 2>&1; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_INT32_DEFINED 1
+ _ACEOF
+ 
+ fi
+ rm -f conftest*
+ 
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/types.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "u_int32_t" >/dev/null 2>&1; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_BSD_INT32_DEFINED 1
+ _ACEOF
+ 
+ fi
+ rm -f conftest*
+ 
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/config.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "u_int32_t" >/dev/null 2>&1; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_BSD_INT32_DEFINED 1
+ _ACEOF
+ 
+ fi
+ rm -f conftest*
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ for ac_func in ftruncate fsync select \
+ 		  gethostname socket strerror fork pipe execve open close \
+ 		  lseek fstat read write htonl memset htons connect \
+ 		  getsockname getpeername bind listen accept \
+ 		  recvfrom send sendto setsockopt getsockopt time mktime \
+ 		  localtime_r \
+ 		  strerror_r \
+                   fcntl \
+ 		  mmap munmap mincore msync madvise getpagesize sysconf
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for $ac_func" >&5
+ echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_var+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ /* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define $ac_func innocuous_$ac_func
+ 
+ /* System header to define __stub macros and hopefully few prototypes,
+     which can conflict with char $ac_func (); below.
+     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+     <limits.h> exists even on freestanding compilers.  */
+ 
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 
+ #undef $ac_func
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char $ac_func ();
+ /* The GNU C library defines this for functions which it implements
+     to always fail with ENOSYS.  Some functions are actually named
+     something starting with __ and the normal name is an alias.  */
+ #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+ choke me
+ #else
+ char (*f) () = $ac_func;
+ #endif
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ return f != $ac_func;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   eval "$as_ac_var=yes"
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ eval "$as_ac_var=no"
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+ if test `eval echo '${'$as_ac_var'}'` = yes; then
+   cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+ _ACEOF
+ 
+ fi
+ done
+ 
+ 
+   echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+ echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+ if test "${ac_cv_header_time+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #include <time.h>
+ 
+ int
+ main ()
+ {
+ if ((struct tm *) 0)
+ return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_header_time=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_header_time=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+ echo "${ECHO_T}$ac_cv_header_time" >&6
+ if test $ac_cv_header_time = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define TIME_WITH_SYS_TIME 1
+ _ACEOF
+ 
+ fi
+ 
+   echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+ echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6
+ if test "${ac_cv_struct_tm+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/types.h>
+ #include <time.h>
+ 
+ int
+ main ()
+ {
+ struct tm *tp; tp->tm_sec;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_struct_tm=time.h
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_struct_tm=sys/time.h
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+ echo "${ECHO_T}$ac_cv_struct_tm" >&6
+ if test $ac_cv_struct_tm = sys/time.h; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define TM_IN_SYS_TIME 1
+ _ACEOF
+ 
+ fi
+ 
+   echo "$as_me:$LINENO: checking for struct tm.tm_zone" >&5
+ echo $ECHO_N "checking for struct tm.tm_zone... $ECHO_C" >&6
+ if test "${ac_cv_member_struct_tm_tm_zone+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/types.h>
+ #include <$ac_cv_struct_tm>
+ 
+ 
+ int
+ main ()
+ {
+ static struct tm ac_aggr;
+ if (ac_aggr.tm_zone)
+ return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_member_struct_tm_tm_zone=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/types.h>
+ #include <$ac_cv_struct_tm>
+ 
+ 
+ int
+ main ()
+ {
+ static struct tm ac_aggr;
+ if (sizeof ac_aggr.tm_zone)
+ return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_member_struct_tm_tm_zone=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_member_struct_tm_tm_zone=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
+ echo "${ECHO_T}$ac_cv_member_struct_tm_tm_zone" >&6
+ if test $ac_cv_member_struct_tm_tm_zone = yes; then
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_STRUCT_TM_TM_ZONE 1
+ _ACEOF
+ 
+ 
+ fi
+ 
+ if test "$ac_cv_member_struct_tm_tm_zone" = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_TM_ZONE 1
+ _ACEOF
+ 
+ else
+   echo "$as_me:$LINENO: checking for tzname" >&5
+ echo $ECHO_N "checking for tzname... $ECHO_C" >&6
+ if test "${ac_cv_var_tzname+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <time.h>
+ #ifndef tzname /* For SGI.  */
+ extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
+ #endif
+ 
+ int
+ main ()
+ {
+ atoi(*tzname);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_var_tzname=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_var_tzname=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
+ echo "${ECHO_T}$ac_cv_var_tzname" >&6
+   if test $ac_cv_var_tzname = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_TZNAME 1
+ _ACEOF
+ 
+   fi
+ fi
+ 
+ 
+   echo "$as_me:$LINENO: checking for tm_gmtoff in struct tm" >&5
+ echo $ECHO_N "checking for tm_gmtoff in struct tm... $ECHO_C" >&6
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <time.h>
+ int
+ main ()
+ {
+ struct tm tim; tim.tm_gmtoff = 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define STRUCT_TM_HAS_GMTOFF 1
+ _ACEOF
+ 
+    echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+    echo "$as_me:$LINENO: checking for global timezone variable" >&5
+ echo $ECHO_N "checking for global timezone variable... $ECHO_C" >&6
+                cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <time.h>
+ int
+ main ()
+ {
+ void i(){long z2 = 2*timezone;}
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_TIMEZONE 1
+ _ACEOF
+ 
+       echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+        echo "$as_me:$LINENO: checking for global _timezone variable" >&5
+ echo $ECHO_N "checking for global _timezone variable... $ECHO_C" >&6
+               cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <time.h>
+ int
+ main ()
+ {
+ long z2 = _timezone;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_UNDERSCORE_TIMEZONE 1
+ _ACEOF
+ 
+           echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ 
+   echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+ echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+ if test "${ac_cv_c_const+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ /* FIXME: Include the comments suggested by Paul. */
+ #ifndef __cplusplus
+   /* Ultrix mips cc rejects this.  */
+   typedef int charset[2];
+   const charset x;
+   /* SunOS 4.1.1 cc rejects this.  */
+   char const *const *ccp;
+   char **p;
+   /* NEC SVR4.0.2 mips cc rejects this.  */
+   struct point {int x, y;};
+   static struct point const zero = {0,0};
+   /* AIX XL C 1.02.0.0 rejects this.
+      It does not let you subtract one const X* pointer from another in
+      an arm of an if-expression whose if-part is not a constant
+      expression */
+   const char *g = "string";
+   ccp = &g + (g ? g-g : 0);
+   /* HPUX 7.0 cc rejects these. */
+   ++ccp;
+   p = (char**) ccp;
+   ccp = (char const *const *) p;
+   { /* SCO 3.2v4 cc rejects this.  */
+     char *t;
+     char const *s = 0 ? (char *) 0 : (char const *) 0;
+ 
+     *t++ = 0;
+   }
+   { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+     int x[] = {25, 17};
+     const int *foo = &x[0];
+     ++foo;
+   }
+   { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+     typedef const int *iptr;
+     iptr p = 0;
+     ++p;
+   }
+   { /* AIX XL C 1.02.0.0 rejects this saying
+        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+     struct s { int j; const int *ap[3]; };
+     struct s *b; b->j = 5;
+   }
+   { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+     const int foo = 10;
+   }
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_c_const=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_c_const=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+ echo "${ECHO_T}$ac_cv_c_const" >&6
+ if test $ac_cv_c_const = no; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define const
+ _ACEOF
+ 
+ fi
+ 
+   echo "$as_me:$LINENO: checking for __attribute__" >&5
+ echo $ECHO_N "checking for __attribute__... $ECHO_C" >&6
+ if test "${ac_cv_c_attribute+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ 
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ void foo(void) __attribute__ ((__noreturn__));
+ 
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_c_attribute=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_c_attribute=no
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_attribute" >&5
+ echo "${ECHO_T}$ac_cv_c_attribute" >&6
+ 
+ 
+ case $ac_cv_c_attribute in
+   yes) ;;
+   no)
+     cat >>confdefs.h <<_ACEOF
+ #define __attribute__(x)    /* nothing */
+ _ACEOF
+     ;;
+ esac
+ 
+ 
+ 
+       if test "X$prefix" = "XNONE"; then
+     acl_final_prefix="$ac_default_prefix"
+   else
+     acl_final_prefix="$prefix"
+   fi
+   if test "X$exec_prefix" = "XNONE"; then
+     acl_final_exec_prefix='${prefix}'
+   else
+     acl_final_exec_prefix="$exec_prefix"
+   fi
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+   prefix="$acl_save_prefix"
+ 
+ 
+ # Check whether --with-gnu-ld or --without-gnu-ld was given.
+ if test "${with_gnu_ld+set}" = set; then
+   withval="$with_gnu_ld"
+   test "$withval" = no || with_gnu_ld=yes
+ else
+   with_gnu_ld=no
+ fi;
+ # Prepare PATH_SEPARATOR.
+ # The user is always right.
+ if test "${PATH_SEPARATOR+set}" != set; then
+   echo "#! /bin/sh" >conf$$.sh
+   echo  "exit 0"   >>conf$$.sh
+   chmod +x conf$$.sh
+   if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+     PATH_SEPARATOR=';'
+   else
+     PATH_SEPARATOR=:
+   fi
+   rm -f conf$$.sh
+ fi
+ ac_prog=ld
+ if test "$GCC" = yes; then
+   # Check if gcc -print-prog-name=ld gives a path.
+   echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
+   case $host in
+   *-*-mingw*)
+     # gcc leaves a trailing carriage return which upsets mingw
+     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+   *)
+     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+   esac
+   case $ac_prog in
+     # Accept absolute paths.
+     [\\/]* | [A-Za-z]:[\\/]*)
+       re_direlt='/[^/][^/]*/\.\./'
+       # Canonicalize the path of ld
+       ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+       while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ 	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+       done
+       test -z "$LD" && LD="$ac_prog"
+       ;;
+   "")
+     # If it fails, then pretend we aren't using GCC.
+     ac_prog=ld
+     ;;
+   *)
+     # If it is relative, then search for the first ld in PATH.
+     with_gnu_ld=unknown
+     ;;
+   esac
+ elif test "$with_gnu_ld" = yes; then
+   echo "$as_me:$LINENO: checking for GNU ld" >&5
+ echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+ else
+   echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+ echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+ fi
+ if test "${acl_cv_path_LD+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -z "$LD"; then
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+   for ac_dir in $PATH; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+       acl_cv_path_LD="$ac_dir/$ac_prog"
+       # Check to see if the program is GNU ld.  I'd rather use --version,
+       # but apparently some GNU ld's only accept -v.
+       # Break only if it was the GNU/non-GNU ld that we prefer.
+       if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+ 	test "$with_gnu_ld" != no && break
+       else
+ 	test "$with_gnu_ld" != yes && break
+       fi
+     fi
+   done
+   IFS="$ac_save_ifs"
+ else
+   acl_cv_path_LD="$LD" # Let the user override the test with a path.
+ fi
+ fi
+ 
+ LD="$acl_cv_path_LD"
+ if test -n "$LD"; then
+   echo "$as_me:$LINENO: result: $LD" >&5
+ echo "${ECHO_T}$LD" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+ echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+    { (exit 1); exit 1; }; }
+ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+ echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+ if test "${acl_cv_prog_gnu_ld+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+ if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+   acl_cv_prog_gnu_ld=yes
+ else
+   acl_cv_prog_gnu_ld=no
+ fi
+ fi
+ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+ echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6
+ with_gnu_ld=$acl_cv_prog_gnu_ld
+ 
+ 
+ 
+                                                 echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+ echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6
+ if test "${acl_cv_rpath+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ 
+     CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+     ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+     . ./conftest.sh
+     rm -f ./conftest.sh
+     acl_cv_rpath=done
+ 
+ fi
+ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+ echo "${ECHO_T}$acl_cv_rpath" >&6
+   wl="$acl_cv_wl"
+   libext="$acl_cv_libext"
+   shlibext="$acl_cv_shlibext"
+   hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+   hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+   hardcode_direct="$acl_cv_hardcode_direct"
+   hardcode_minus_L="$acl_cv_hardcode_minus_L"
+     # Check whether --enable-rpath or --disable-rpath was given.
+ if test "${enable_rpath+set}" = set; then
+   enableval="$enable_rpath"
+   :
+ else
+   enable_rpath=yes
+ fi;
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     use_additional=yes
+ 
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   acl_save_exec_prefix="$exec_prefix"
+   exec_prefix="$acl_final_exec_prefix"
+ 
+     eval additional_includedir=\"$includedir\"
+     eval additional_libdir=\"$libdir\"
+ 
+   exec_prefix="$acl_save_exec_prefix"
+   prefix="$acl_save_prefix"
+ 
+ 
+ # Check whether --with-libiconv-prefix or --without-libiconv-prefix was given.
+ if test "${with_libiconv_prefix+set}" = set; then
+   withval="$with_libiconv_prefix"
+ 
+     if test "X$withval" = "Xno"; then
+       use_additional=no
+     else
+       if test "X$withval" = "X"; then
+ 
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   acl_save_exec_prefix="$exec_prefix"
+   exec_prefix="$acl_final_exec_prefix"
+ 
+           eval additional_includedir=\"$includedir\"
+           eval additional_libdir=\"$libdir\"
+ 
+   exec_prefix="$acl_save_exec_prefix"
+   prefix="$acl_save_prefix"
+ 
+       else
+         additional_includedir="$withval/include"
+         additional_libdir="$withval/lib"
+       fi
+     fi
+ 
+ fi;
+       LIBICONV=
+   LTLIBICONV=
+   INCICONV=
+   rpathdirs=
+   ltrpathdirs=
+   names_already_handled=
+   names_next_round='iconv '
+   while test -n "$names_next_round"; do
+     names_this_round="$names_next_round"
+     names_next_round=
+     for name in $names_this_round; do
+       already_handled=
+       for n in $names_already_handled; do
+         if test "$n" = "$name"; then
+           already_handled=yes
+           break
+         fi
+       done
+       if test -z "$already_handled"; then
+         names_already_handled="$names_already_handled $name"
+                         uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+         eval value=\"\$HAVE_LIB$uppername\"
+         if test -n "$value"; then
+           if test "$value" = yes; then
+             eval value=\"\$LIB$uppername\"
+             test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+             eval value=\"\$LTLIB$uppername\"
+             test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+           else
+                                     :
+           fi
+         else
+                               found_dir=
+           found_la=
+           found_so=
+           found_a=
+           if test $use_additional = yes; then
+             if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+               found_dir="$additional_libdir"
+               found_so="$additional_libdir/lib$name.$shlibext"
+               if test -f "$additional_libdir/lib$name.la"; then
+                 found_la="$additional_libdir/lib$name.la"
+               fi
+             else
+               if test -f "$additional_libdir/lib$name.$libext"; then
+                 found_dir="$additional_libdir"
+                 found_a="$additional_libdir/lib$name.$libext"
+                 if test -f "$additional_libdir/lib$name.la"; then
+                   found_la="$additional_libdir/lib$name.la"
+                 fi
+               fi
+             fi
+           fi
+           if test "X$found_dir" = "X"; then
+             for x in $LDFLAGS $LTLIBICONV; do
+ 
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   acl_save_exec_prefix="$exec_prefix"
+   exec_prefix="$acl_final_exec_prefix"
+   eval x=\"$x\"
+   exec_prefix="$acl_save_exec_prefix"
+   prefix="$acl_save_prefix"
+ 
+               case "$x" in
+                 -L*)
+                   dir=`echo "X$x" | sed -e 's/^X-L//'`
+                   if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                     found_dir="$dir"
+                     found_so="$dir/lib$name.$shlibext"
+                     if test -f "$dir/lib$name.la"; then
+                       found_la="$dir/lib$name.la"
+                     fi
+                   else
+                     if test -f "$dir/lib$name.$libext"; then
+                       found_dir="$dir"
+                       found_a="$dir/lib$name.$libext"
+                       if test -f "$dir/lib$name.la"; then
+                         found_la="$dir/lib$name.la"
+                       fi
+                     fi
+                   fi
+                   ;;
+               esac
+               if test "X$found_dir" != "X"; then
+                 break
+               fi
+             done
+           fi
+           if test "X$found_dir" != "X"; then
+                         LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+             if test "X$found_so" != "X"; then
+                                                         if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                                 LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+               else
+                                                                                 haveit=
+                 for x in $ltrpathdirs; do
+                   if test "X$x" = "X$found_dir"; then
+                     haveit=yes
+                     break
+                   fi
+                 done
+                 if test -z "$haveit"; then
+                   ltrpathdirs="$ltrpathdirs $found_dir"
+                 fi
+                                 if test "$hardcode_direct" = yes; then
+                                                       LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                 else
+                   if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                             LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                             haveit=
+                     for x in $rpathdirs; do
+                       if test "X$x" = "X$found_dir"; then
+                         haveit=yes
+                         break
+                       fi
+                     done
+                     if test -z "$haveit"; then
+                       rpathdirs="$rpathdirs $found_dir"
+                     fi
+                   else
+                                                                                 haveit=
+                     for x in $LDFLAGS $LIBICONV; do
+ 
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   acl_save_exec_prefix="$exec_prefix"
+   exec_prefix="$acl_final_exec_prefix"
+   eval x=\"$x\"
+   exec_prefix="$acl_save_exec_prefix"
+   prefix="$acl_save_prefix"
+ 
+                       if test "X$x" = "X-L$found_dir"; then
+                         haveit=yes
+                         break
+                       fi
+                     done
+                     if test -z "$haveit"; then
+                       LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                     fi
+                     if test "$hardcode_minus_L" != no; then
+                                                                                         LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                     else
+                                                                                                                                                                                 LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                     fi
+                   fi
+                 fi
+               fi
+             else
+               if test "X$found_a" != "X"; then
+                                 LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+               else
+                                                 LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+               fi
+             fi
+                         additional_includedir=
+             case "$found_dir" in
+               */lib | */lib/)
+                 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                 additional_includedir="$basedir/include"
+                 ;;
+             esac
+             if test "X$additional_includedir" != "X"; then
+                                                                                                                 if test "X$additional_includedir" != "X/usr/include"; then
+                 haveit=
+                 if test "X$additional_includedir" = "X/usr/local/include"; then
+                   if test -n "$GCC"; then
+                     case $host_os in
+                       linux*) haveit=yes;;
+                     esac
+                   fi
+                 fi
+                 if test -z "$haveit"; then
+                   for x in $CPPFLAGS $INCICONV; do
+ 
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   acl_save_exec_prefix="$exec_prefix"
+   exec_prefix="$acl_final_exec_prefix"
+   eval x=\"$x\"
+   exec_prefix="$acl_save_exec_prefix"
+   prefix="$acl_save_prefix"
+ 
+                     if test "X$x" = "X-I$additional_includedir"; then
+                       haveit=yes
+                       break
+                     fi
+                   done
+                   if test -z "$haveit"; then
+                     if test -d "$additional_includedir"; then
+                                             INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                     fi
+                   fi
+                 fi
+               fi
+             fi
+                         if test -n "$found_la"; then
+                                                         save_libdir="$libdir"
+               case "$found_la" in
+                 */* | *\\*) . "$found_la" ;;
+                 *) . "./$found_la" ;;
+               esac
+               libdir="$save_libdir"
+                             for dep in $dependency_libs; do
+                 case "$dep" in
+                   -L*)
+                     additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                 if test "X$additional_libdir" != "X/usr/lib"; then
+                       haveit=
+                       if test "X$additional_libdir" = "X/usr/local/lib"; then
+                         if test -n "$GCC"; then
+                           case $host_os in
+                             linux*) haveit=yes;;
+                           esac
+                         fi
+                       fi
+                       if test -z "$haveit"; then
+                         haveit=
+                         for x in $LDFLAGS $LIBICONV; do
+ 
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   acl_save_exec_prefix="$exec_prefix"
+   exec_prefix="$acl_final_exec_prefix"
+   eval x=\"$x\"
+   exec_prefix="$acl_save_exec_prefix"
+   prefix="$acl_save_prefix"
+ 
+                           if test "X$x" = "X-L$additional_libdir"; then
+                             haveit=yes
+                             break
+                           fi
+                         done
+                         if test -z "$haveit"; then
+                           if test -d "$additional_libdir"; then
+                                                         LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                           fi
+                         fi
+                         haveit=
+                         for x in $LDFLAGS $LTLIBICONV; do
+ 
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   acl_save_exec_prefix="$exec_prefix"
+   exec_prefix="$acl_final_exec_prefix"
+   eval x=\"$x\"
+   exec_prefix="$acl_save_exec_prefix"
+   prefix="$acl_save_prefix"
+ 
+                           if test "X$x" = "X-L$additional_libdir"; then
+                             haveit=yes
+                             break
+                           fi
+                         done
+                         if test -z "$haveit"; then
+                           if test -d "$additional_libdir"; then
+                                                         LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                           fi
+                         fi
+                       fi
+                     fi
+                     ;;
+                   -R*)
+                     dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                     if test "$enable_rpath" != no; then
+                                                                   haveit=
+                       for x in $rpathdirs; do
+                         if test "X$x" = "X$dir"; then
+                           haveit=yes
+                           break
+                         fi
+                       done
+                       if test -z "$haveit"; then
+                         rpathdirs="$rpathdirs $dir"
+                       fi
+                                                                   haveit=
+                       for x in $ltrpathdirs; do
+                         if test "X$x" = "X$dir"; then
+                           haveit=yes
+                           break
+                         fi
+                       done
+                       if test -z "$haveit"; then
+                         ltrpathdirs="$ltrpathdirs $dir"
+                       fi
+                     fi
+                     ;;
+                   -l*)
+                                         names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                     ;;
+                   *.la)
+                                                                                 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                     ;;
+                   *)
+                                         LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                     LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                     ;;
+                 esac
+               done
+             fi
+           else
+                                                             LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+             LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+           fi
+         fi
+       fi
+     done
+   done
+   if test "X$rpathdirs" != "X"; then
+     if test -n "$hardcode_libdir_separator"; then
+                         alldirs=
+       for found_dir in $rpathdirs; do
+         alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+       done
+             acl_save_libdir="$libdir"
+       libdir="$alldirs"
+       eval flag=\"$hardcode_libdir_flag_spec\"
+       libdir="$acl_save_libdir"
+       LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+     else
+             for found_dir in $rpathdirs; do
+         acl_save_libdir="$libdir"
+         libdir="$found_dir"
+         eval flag=\"$hardcode_libdir_flag_spec\"
+         libdir="$acl_save_libdir"
+         LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+       done
+     fi
+   fi
+   if test "X$ltrpathdirs" != "X"; then
+             for found_dir in $ltrpathdirs; do
+       LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+     done
+   fi
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+           am_save_CPPFLAGS="$CPPFLAGS"
+ 
+   for element in $INCICONV; do
+     haveit=
+     for x in $CPPFLAGS; do
+ 
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   acl_save_exec_prefix="$exec_prefix"
+   exec_prefix="$acl_final_exec_prefix"
+   eval x=\"$x\"
+   exec_prefix="$acl_save_exec_prefix"
+   prefix="$acl_save_prefix"
+ 
+       if test "X$x" = "X$element"; then
+         haveit=yes
+         break
+       fi
+     done
+     if test -z "$haveit"; then
+       CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+     fi
+   done
+ 
+ 
+   echo "$as_me:$LINENO: checking for iconv" >&5
+ echo $ECHO_N "checking for iconv... $ECHO_C" >&6
+ if test "${am_cv_func_iconv+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ 
+     am_cv_func_iconv="no, consider installing GNU libiconv"
+     am_cv_lib_iconv=no
+     cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <iconv.h>
+ int
+ main ()
+ {
+ iconv_t cd = iconv_open("","");
+        iconv(cd,NULL,NULL,NULL,NULL);
+        iconv_close(cd);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   am_cv_func_iconv=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+     if test "$am_cv_func_iconv" != yes; then
+       am_save_LIBS="$LIBS"
+       LIBS="$LIBS $LIBICONV"
+       cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <iconv.h>
+ int
+ main ()
+ {
+ iconv_t cd = iconv_open("","");
+          iconv(cd,NULL,NULL,NULL,NULL);
+          iconv_close(cd);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   am_cv_lib_iconv=yes
+         am_cv_func_iconv=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+       LIBS="$am_save_LIBS"
+     fi
+ 
+ fi
+ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+ echo "${ECHO_T}$am_cv_func_iconv" >&6
+   if test "$am_cv_func_iconv" = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_ICONV 1
+ _ACEOF
+ 
+   fi
+   if test "$am_cv_lib_iconv" = yes; then
+     echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+ echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6
+     echo "$as_me:$LINENO: result: $LIBICONV" >&5
+ echo "${ECHO_T}$LIBICONV" >&6
+   else
+             CPPFLAGS="$am_save_CPPFLAGS"
+     LIBICONV=
+     LTLIBICONV=
+   fi
+ 
+ 
+ 
+   if test "$am_cv_func_iconv" = yes; then
+     echo "$as_me:$LINENO: checking for iconv declaration" >&5
+ echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6
+     if test "${am_cv_proto_iconv+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ 
+       cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ #include <stdlib.h>
+ #include <iconv.h>
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ #if defined(__STDC__) || defined(__cplusplus)
+ size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+ #else
+ size_t iconv();
+ #endif
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   am_cv_proto_iconv_arg1=""
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ am_cv_proto_iconv_arg1="const"
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+ fi
+ 
+     am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+     echo "$as_me:$LINENO: result: ${ac_t:-
+          }$am_cv_proto_iconv" >&5
+ echo "${ECHO_T}${ac_t:-
+          }$am_cv_proto_iconv" >&6
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define ICONV_CONST $am_cv_proto_iconv_arg1
+ _ACEOF
+ 
+   fi
+ 
+ 
+     if test "x${GCC}" = xyes; then
+ 
+             WARNING_CFLAGS='-pedantic -W -Wall -Wmissing-declarations -Wwrite-strings -Wmissing-prototypes -Wno-long-long'
+ 
+ 
+             STRICT_WARNING_CFLAGS=-Wstrict-prototypes
+ 
+ 
+             ERROR_CFLAGS=
+     if test "x${ENABLE_WERROR}" = xyes; then
+        ERROR_CFLAGS='-Werror'
+     fi
+ 
+   fi
+ 
+     if test "x${COMPILE_XMLJ}" = xyes; then
+ 
+   succeeded=no
+ 
+   if test -z "$PKG_CONFIG"; then
+     # Extract the first word of "pkg-config", so it can be a program name with args.
+ set dummy pkg-config; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $PKG_CONFIG in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+   ;;
+ esac
+ fi
+ PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+ 
+ if test -n "$PKG_CONFIG"; then
+   echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+ echo "${ECHO_T}$PKG_CONFIG" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+   if test "$PKG_CONFIG" = "no" ; then
+      echo "*** The pkg-config script could not be found. Make sure it is"
+      echo "*** in your path, or set the PKG_CONFIG environment variable"
+      echo "*** to the full path to pkg-config."
+      echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+   else
+      PKG_CONFIG_MIN_VERSION=0.9.0
+      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+         echo "$as_me:$LINENO: checking for libxml-2.0 >= 2.6.8" >&5
+ echo $ECHO_N "checking for libxml-2.0 >= 2.6.8... $ECHO_C" >&6
+ 
+         if $PKG_CONFIG --exists "libxml-2.0 >= 2.6.8" ; then
+             echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+             succeeded=yes
+ 
+             echo "$as_me:$LINENO: checking XML_CFLAGS" >&5
+ echo $ECHO_N "checking XML_CFLAGS... $ECHO_C" >&6
+             XML_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.6.8"`
+             echo "$as_me:$LINENO: result: $XML_CFLAGS" >&5
+ echo "${ECHO_T}$XML_CFLAGS" >&6
+ 
+             echo "$as_me:$LINENO: checking XML_LIBS" >&5
+ echo $ECHO_N "checking XML_LIBS... $ECHO_C" >&6
+             XML_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.6.8"`
+             echo "$as_me:$LINENO: result: $XML_LIBS" >&5
+ echo "${ECHO_T}$XML_LIBS" >&6
+         else
+             XML_CFLAGS=""
+             XML_LIBS=""
+             ## If we have a custom action on failure, don't print errors, but
+             ## do set a variable so people can do so.
+             XML_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libxml-2.0 >= 2.6.8"`
+             echo $XML_PKG_ERRORS
+         fi
+ 
+ 
+ 
+      else
+         echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+         echo "*** See http://www.freedesktop.org/software/pkgconfig"
+      fi
+   fi
+ 
+   if test $succeeded = yes; then
+      :
+   else
+      { { echo "$as_me:$LINENO: error: Library requirements (libxml-2.0 >= 2.6.8) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5
+ echo "$as_me: error: Library requirements (libxml-2.0 >= 2.6.8) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;}
+    { (exit 1); exit 1; }; }
+   fi
+ 
+ 
+   succeeded=no
+ 
+   if test -z "$PKG_CONFIG"; then
+     # Extract the first word of "pkg-config", so it can be a program name with args.
+ set dummy pkg-config; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $PKG_CONFIG in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+   ;;
+ esac
+ fi
+ PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+ 
+ if test -n "$PKG_CONFIG"; then
+   echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+ echo "${ECHO_T}$PKG_CONFIG" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+   if test "$PKG_CONFIG" = "no" ; then
+      echo "*** The pkg-config script could not be found. Make sure it is"
+      echo "*** in your path, or set the PKG_CONFIG environment variable"
+      echo "*** to the full path to pkg-config."
+      echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+   else
+      PKG_CONFIG_MIN_VERSION=0.9.0
+      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+         echo "$as_me:$LINENO: checking for libxslt >= 1.1.11" >&5
+ echo $ECHO_N "checking for libxslt >= 1.1.11... $ECHO_C" >&6
+ 
+         if $PKG_CONFIG --exists "libxslt >= 1.1.11" ; then
+             echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+             succeeded=yes
+ 
+             echo "$as_me:$LINENO: checking XSLT_CFLAGS" >&5
+ echo $ECHO_N "checking XSLT_CFLAGS... $ECHO_C" >&6
+             XSLT_CFLAGS=`$PKG_CONFIG --cflags "libxslt >= 1.1.11"`
+             echo "$as_me:$LINENO: result: $XSLT_CFLAGS" >&5
+ echo "${ECHO_T}$XSLT_CFLAGS" >&6
+ 
+             echo "$as_me:$LINENO: checking XSLT_LIBS" >&5
+ echo $ECHO_N "checking XSLT_LIBS... $ECHO_C" >&6
+             XSLT_LIBS=`$PKG_CONFIG --libs "libxslt >= 1.1.11"`
+             echo "$as_me:$LINENO: result: $XSLT_LIBS" >&5
+ echo "${ECHO_T}$XSLT_LIBS" >&6
+         else
+             XSLT_CFLAGS=""
+             XSLT_LIBS=""
+             ## If we have a custom action on failure, don't print errors, but
+             ## do set a variable so people can do so.
+             XSLT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libxslt >= 1.1.11"`
+             echo $XSLT_PKG_ERRORS
+         fi
+ 
+ 
+ 
+      else
+         echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+         echo "*** See http://www.freedesktop.org/software/pkgconfig"
+      fi
+   fi
+ 
+   if test $succeeded = yes; then
+      :
+   else
+      { { echo "$as_me:$LINENO: error: Library requirements (libxslt >= 1.1.11) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5
+ echo "$as_me: error: Library requirements (libxslt >= 1.1.11) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;}
+    { (exit 1); exit 1; }; }
+   fi
+ 
+ 
+ 
+ 
+ 
+   fi
+ 
+     if test "x${COMPILE_GTK_PEER}" = xyes; then
+     echo "$as_me:$LINENO: checking for X" >&5
+ echo $ECHO_N "checking for X... $ECHO_C" >&6
+ 
+ 
+ # Check whether --with-x or --without-x was given.
+ if test "${with_x+set}" = set; then
+   withval="$with_x"
+ 
+ fi;
+ # $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+ if test "x$with_x" = xno; then
+   # The user explicitly disabled X.
+   have_x=disabled
+ else
+   if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+     # Both variables are already set.
+     have_x=yes
+   else
+     if test "${ac_cv_have_x+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   # One or both of the vars are not set, and there is no cached value.
+ ac_x_includes=no ac_x_libraries=no
+ rm -fr conftest.dir
+ if mkdir conftest.dir; then
+   cd conftest.dir
+   # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+   cat >Imakefile <<'_ACEOF'
+ acfindx:
+ 	@echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+ _ACEOF
+   if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+     # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+     eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+     # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+     for ac_extension in a so sl; do
+       if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+ 	 test -f $ac_im_libdir/libX11.$ac_extension; then
+ 	ac_im_usrlibdir=$ac_im_libdir; break
+       fi
+     done
+     # Screen out bogus values from the imake configuration.  They are
+     # bogus both because they are the default anyway, and because
+     # using them would break gcc on systems where it needs fixed includes.
+     case $ac_im_incroot in
+ 	/usr/include) ;;
+ 	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+     esac
+     case $ac_im_usrlibdir in
+ 	/usr/lib | /lib) ;;
+ 	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+     esac
+   fi
+   cd ..
+   rm -fr conftest.dir
+ fi
+ 
+ # Standard set of common directories for X headers.
+ # Check X11 before X11Rn because it is often a symlink to the current release.
+ ac_x_header_dirs='
+ /usr/X11/include
+ /usr/X11R6/include
+ /usr/X11R5/include
+ /usr/X11R4/include
+ 
+ /usr/include/X11
+ /usr/include/X11R6
+ /usr/include/X11R5
+ /usr/include/X11R4
+ 
+ /usr/local/X11/include
+ /usr/local/X11R6/include
+ /usr/local/X11R5/include
+ /usr/local/X11R4/include
+ 
+ /usr/local/include/X11
+ /usr/local/include/X11R6
+ /usr/local/include/X11R5
+ /usr/local/include/X11R4
+ 
+ /usr/X386/include
+ /usr/x386/include
+ /usr/XFree86/include/X11
+ 
+ /usr/include
+ /usr/local/include
+ /usr/unsupported/include
+ /usr/athena/include
+ /usr/local/x11r5/include
+ /usr/lpp/Xamples/include
+ 
+ /usr/openwin/include
+ /usr/openwin/share/include'
+ 
+ if test "$ac_x_includes" = no; then
+   # Guess where to find include files, by looking for Intrinsic.h.
+   # First, try using that file with no special directory specified.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <X11/Intrinsic.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # We can compile using X headers with no special include directory.
+ ac_x_includes=
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   for ac_dir in $ac_x_header_dirs; do
+   if test -r "$ac_dir/X11/Intrinsic.h"; then
+     ac_x_includes=$ac_dir
+     break
+   fi
+ done
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ fi # $ac_x_includes = no
+ 
+ if test "$ac_x_libraries" = no; then
+   # Check for the libraries.
+   # See if we find them without any special options.
+   # Don't add to $LIBS permanently.
+   ac_save_LIBS=$LIBS
+   LIBS="-lXt $LIBS"
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <X11/Intrinsic.h>
+ int
+ main ()
+ {
+ XtMalloc (0)
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   LIBS=$ac_save_LIBS
+ # We can link X programs with no special library path.
+ ac_x_libraries=
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ LIBS=$ac_save_LIBS
+ for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+ do
+   # Don't even attempt the hair of trying to link an X program!
+   for ac_extension in a so sl; do
+     if test -r $ac_dir/libXt.$ac_extension; then
+       ac_x_libraries=$ac_dir
+       break 2
+     fi
+   done
+ done
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi # $ac_x_libraries = no
+ 
+ if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
+   # Didn't find X anywhere.  Cache the known absence of X.
+   ac_cv_have_x="have_x=no"
+ else
+   # Record where we found X for the cache.
+   ac_cv_have_x="have_x=yes \
+ 		ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+ fi
+ fi
+ 
+   fi
+   eval "$ac_cv_have_x"
+ fi # $with_x != no
+ 
+ if test "$have_x" != yes; then
+   echo "$as_me:$LINENO: result: $have_x" >&5
+ echo "${ECHO_T}$have_x" >&6
+   no_x=yes
+ else
+   # If each of the values was on the command line, it overrides each guess.
+   test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+   test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+   # Update the cache value to reflect the command line values.
+   ac_cv_have_x="have_x=yes \
+ 		ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+   echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+ echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
+ fi
+ 
+ if test "$no_x" = yes; then
+   # Not all programs may use this symbol, but it does not hurt to define it.
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define X_DISPLAY_MISSING 1
+ _ACEOF
+ 
+   X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+ else
+   if test -n "$x_includes"; then
+     X_CFLAGS="$X_CFLAGS -I$x_includes"
+   fi
+ 
+   # It would also be nice to do this for all -L options, not just this one.
+   if test -n "$x_libraries"; then
+     X_LIBS="$X_LIBS -L$x_libraries"
+     # For Solaris; some versions of Sun CC require a space after -R and
+     # others require no space.  Words are not sufficient . . . .
+     case `(uname -sr) 2>/dev/null` in
+     "SunOS 5"*)
+       echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
+ echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
+       ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+       cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_R_nospace=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_R_nospace=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+       if test $ac_R_nospace = yes; then
+ 	echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ 	X_LIBS="$X_LIBS -R$x_libraries"
+       else
+ 	LIBS="$ac_xsave_LIBS -R $x_libraries"
+ 	cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_R_space=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_R_space=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ 	if test $ac_R_space = yes; then
+ 	  echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ 	  X_LIBS="$X_LIBS -R $x_libraries"
+ 	else
+ 	  echo "$as_me:$LINENO: result: neither works" >&5
+ echo "${ECHO_T}neither works" >&6
+ 	fi
+       fi
+       LIBS=$ac_xsave_LIBS
+     esac
+   fi
+ 
+   # Check for system-dependent libraries X programs must link with.
+   # Do this before checking for the system-independent R6 libraries
+   # (-lICE), since we may need -lsocket or whatever for X linking.
+ 
+   if test "$ISC" = yes; then
+     X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+   else
+     # Martyn Johnson says this is needed for Ultrix, if the X
+     # libraries were built with DECnet support.  And Karl Berry says
+     # the Alpha needs dnet_stub (dnet does not exist).
+     ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+     cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char XOpenDisplay ();
+ int
+ main ()
+ {
+ XOpenDisplay ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
+ echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
+ if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-ldnet  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char dnet_ntoa ();
+ int
+ main ()
+ {
+ dnet_ntoa ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_dnet_dnet_ntoa=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_dnet_dnet_ntoa=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+ echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
+ if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
+   X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+ fi
+ 
+     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+       echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
+ echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
+ if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-ldnet_stub  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char dnet_ntoa ();
+ int
+ main ()
+ {
+ dnet_ntoa ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_dnet_stub_dnet_ntoa=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_dnet_stub_dnet_ntoa=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+ echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
+ if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
+   X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+ fi
+ 
+     fi
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+     LIBS="$ac_xsave_LIBS"
+ 
+     # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+     # to get the SysV transport functions.
+     # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+     # needs -lnsl.
+     # The nsl library prevents programs from opening the X display
+     # on Irix 5.2, according to T.E. Dickey.
+     # The functions gethostbyname, getservbyname, and inet_addr are
+     # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+     echo "$as_me:$LINENO: checking for gethostbyname" >&5
+ echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
+ if test "${ac_cv_func_gethostbyname+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ /* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define gethostbyname innocuous_gethostbyname
+ 
+ /* System header to define __stub macros and hopefully few prototypes,
+     which can conflict with char gethostbyname (); below.
+     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+     <limits.h> exists even on freestanding compilers.  */
+ 
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 
+ #undef gethostbyname
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char gethostbyname ();
+ /* The GNU C library defines this for functions which it implements
+     to always fail with ENOSYS.  Some functions are actually named
+     something starting with __ and the normal name is an alias.  */
+ #if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
+ choke me
+ #else
+ char (*f) () = gethostbyname;
+ #endif
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ return f != gethostbyname;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_func_gethostbyname=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_func_gethostbyname=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
+ echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
+ 
+     if test $ac_cv_func_gethostbyname = no; then
+       echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
+ echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
+ if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lnsl  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char gethostbyname ();
+ int
+ main ()
+ {
+ gethostbyname ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_nsl_gethostbyname=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_nsl_gethostbyname=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
+ echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
+ if test $ac_cv_lib_nsl_gethostbyname = yes; then
+   X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+ fi
+ 
+       if test $ac_cv_lib_nsl_gethostbyname = no; then
+ 	echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
+ echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
+ if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lbsd  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char gethostbyname ();
+ int
+ main ()
+ {
+ gethostbyname ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_bsd_gethostbyname=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_bsd_gethostbyname=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
+ echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
+ if test $ac_cv_lib_bsd_gethostbyname = yes; then
+   X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+ fi
+ 
+       fi
+     fi
+ 
+     # lieder@skyler.mavd.honeywell.com says without -lsocket,
+     # socket/setsockopt and other routines are undefined under SCO ODT
+     # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+     # on later versions), says Simon Leinen: it contains gethostby*
+     # variants that don't use the name server (or something).  -lsocket
+     # must be given before -lnsl if both are needed.  We assume that
+     # if connect needs -lnsl, so does gethostbyname.
+     echo "$as_me:$LINENO: checking for connect" >&5
+ echo $ECHO_N "checking for connect... $ECHO_C" >&6
+ if test "${ac_cv_func_connect+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ /* Define connect to an innocuous variant, in case <limits.h> declares connect.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define connect innocuous_connect
+ 
+ /* System header to define __stub macros and hopefully few prototypes,
+     which can conflict with char connect (); below.
+     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+     <limits.h> exists even on freestanding compilers.  */
+ 
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 
+ #undef connect
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char connect ();
+ /* The GNU C library defines this for functions which it implements
+     to always fail with ENOSYS.  Some functions are actually named
+     something starting with __ and the normal name is an alias.  */
+ #if defined (__stub_connect) || defined (__stub___connect)
+ choke me
+ #else
+ char (*f) () = connect;
+ #endif
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ return f != connect;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_func_connect=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_func_connect=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
+ echo "${ECHO_T}$ac_cv_func_connect" >&6
+ 
+     if test $ac_cv_func_connect = no; then
+       echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+ echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
+ if test "${ac_cv_lib_socket_connect+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char connect ();
+ int
+ main ()
+ {
+ connect ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_socket_connect=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_socket_connect=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+ echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
+ if test $ac_cv_lib_socket_connect = yes; then
+   X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+ fi
+ 
+     fi
+ 
+     # Guillermo Gomez says -lposix is necessary on A/UX.
+     echo "$as_me:$LINENO: checking for remove" >&5
+ echo $ECHO_N "checking for remove... $ECHO_C" >&6
+ if test "${ac_cv_func_remove+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ /* Define remove to an innocuous variant, in case <limits.h> declares remove.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define remove innocuous_remove
+ 
+ /* System header to define __stub macros and hopefully few prototypes,
+     which can conflict with char remove (); below.
+     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+     <limits.h> exists even on freestanding compilers.  */
+ 
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 
+ #undef remove
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char remove ();
+ /* The GNU C library defines this for functions which it implements
+     to always fail with ENOSYS.  Some functions are actually named
+     something starting with __ and the normal name is an alias.  */
+ #if defined (__stub_remove) || defined (__stub___remove)
+ choke me
+ #else
+ char (*f) () = remove;
+ #endif
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ return f != remove;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_func_remove=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_func_remove=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
+ echo "${ECHO_T}$ac_cv_func_remove" >&6
+ 
+     if test $ac_cv_func_remove = no; then
+       echo "$as_me:$LINENO: checking for remove in -lposix" >&5
+ echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
+ if test "${ac_cv_lib_posix_remove+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lposix  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char remove ();
+ int
+ main ()
+ {
+ remove ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_posix_remove=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_posix_remove=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
+ echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
+ if test $ac_cv_lib_posix_remove = yes; then
+   X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+ fi
+ 
+     fi
+ 
+     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+     echo "$as_me:$LINENO: checking for shmat" >&5
+ echo $ECHO_N "checking for shmat... $ECHO_C" >&6
+ if test "${ac_cv_func_shmat+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ /* Define shmat to an innocuous variant, in case <limits.h> declares shmat.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define shmat innocuous_shmat
+ 
+ /* System header to define __stub macros and hopefully few prototypes,
+     which can conflict with char shmat (); below.
+     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+     <limits.h> exists even on freestanding compilers.  */
+ 
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 
+ #undef shmat
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char shmat ();
+ /* The GNU C library defines this for functions which it implements
+     to always fail with ENOSYS.  Some functions are actually named
+     something starting with __ and the normal name is an alias.  */
+ #if defined (__stub_shmat) || defined (__stub___shmat)
+ choke me
+ #else
+ char (*f) () = shmat;
+ #endif
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ return f != shmat;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_func_shmat=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_func_shmat=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
+ echo "${ECHO_T}$ac_cv_func_shmat" >&6
+ 
+     if test $ac_cv_func_shmat = no; then
+       echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
+ echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
+ if test "${ac_cv_lib_ipc_shmat+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lipc  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char shmat ();
+ int
+ main ()
+ {
+ shmat ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_ipc_shmat=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_ipc_shmat=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
+ echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
+ if test $ac_cv_lib_ipc_shmat = yes; then
+   X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+ fi
+ 
+     fi
+   fi
+ 
+   # Check for libraries that X11R6 Xt/Xaw programs need.
+   ac_save_LDFLAGS=$LDFLAGS
+   test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+   # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+   # check for ICE first), but we must link in the order -lSM -lICE or
+   # we get undefined symbols.  So assume we have SM if we have ICE.
+   # These have to be linked with before -lX11, unlike the other
+   # libraries we check for below, so use a different variable.
+   # John Interrante, Karl Berry
+   echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
+ echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
+ if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char IceConnectionNumber ();
+ int
+ main ()
+ {
+ IceConnectionNumber ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_ICE_IceConnectionNumber=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_ICE_IceConnectionNumber=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+ echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
+ if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
+   X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+ fi
+ 
+   LDFLAGS=$ac_save_LDFLAGS
+ 
+ fi
+ 
+     if test "$no_x" = yes; then
+         { { echo "$as_me:$LINENO: error: GTK+ peers requested but no X library available" >&5
+ echo "$as_me: error: GTK+ peers requested but no X library available" >&2;}
+    { (exit 1); exit 1; }; }
+     fi
+         echo "$as_me:$LINENO: checking for XTestQueryExtension in -lXtst" >&5
+ echo $ECHO_N "checking for XTestQueryExtension in -lXtst... $ECHO_C" >&6
+ if test "${ac_cv_lib_Xtst_XTestQueryExtension+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lXtst ${X_LIBS} $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char XTestQueryExtension ();
+ int
+ main ()
+ {
+ XTestQueryExtension ();
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_lib_Xtst_XTestQueryExtension=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_lib_Xtst_XTestQueryExtension=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_Xtst_XTestQueryExtension" >&5
+ echo "${ECHO_T}$ac_cv_lib_Xtst_XTestQueryExtension" >&6
+ if test $ac_cv_lib_Xtst_XTestQueryExtension = yes; then
+   true
+ else
+   { { echo "$as_me:$LINENO: error: libXtst NOT found, required for GdkRobot" >&5
+ echo "$as_me: error: libXtst NOT found, required for GdkRobot" >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ 
+   succeeded=no
+ 
+   if test -z "$PKG_CONFIG"; then
+     # Extract the first word of "pkg-config", so it can be a program name with args.
+ set dummy pkg-config; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $PKG_CONFIG in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+   ;;
+ esac
+ fi
+ PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+ 
+ if test -n "$PKG_CONFIG"; then
+   echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+ echo "${ECHO_T}$PKG_CONFIG" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+   if test "$PKG_CONFIG" = "no" ; then
+      echo "*** The pkg-config script could not be found. Make sure it is"
+      echo "*** in your path, or set the PKG_CONFIG environment variable"
+      echo "*** to the full path to pkg-config."
+      echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+   else
+      PKG_CONFIG_MIN_VERSION=0.9.0
+      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+         echo "$as_me:$LINENO: checking for gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0" >&5
+ echo $ECHO_N "checking for gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0... $ECHO_C" >&6
+ 
+         if $PKG_CONFIG --exists "gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0" ; then
+             echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+             succeeded=yes
+ 
+             echo "$as_me:$LINENO: checking GTK_CFLAGS" >&5
+ echo $ECHO_N "checking GTK_CFLAGS... $ECHO_C" >&6
+             GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0"`
+             echo "$as_me:$LINENO: result: $GTK_CFLAGS" >&5
+ echo "${ECHO_T}$GTK_CFLAGS" >&6
+ 
+             echo "$as_me:$LINENO: checking GTK_LIBS" >&5
+ echo $ECHO_N "checking GTK_LIBS... $ECHO_C" >&6
+             GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0"`
+             echo "$as_me:$LINENO: result: $GTK_LIBS" >&5
+ echo "${ECHO_T}$GTK_LIBS" >&6
+         else
+             GTK_CFLAGS=""
+             GTK_LIBS=""
+             ## If we have a custom action on failure, don't print errors, but
+             ## do set a variable so people can do so.
+             GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0"`
+             echo $GTK_PKG_ERRORS
+         fi
+ 
+ 
+ 
+      else
+         echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+         echo "*** See http://www.freedesktop.org/software/pkgconfig"
+      fi
+   fi
+ 
+   if test $succeeded = yes; then
+      :
+   else
+      { { echo "$as_me:$LINENO: error: Library requirements (gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5
+ echo "$as_me: error: Library requirements (gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;}
+    { (exit 1); exit 1; }; }
+   fi
+ 
+ 
+     if test "x${enable_gtk_cairo}" = xyes; then
+ 
+   succeeded=no
+ 
+   if test -z "$PKG_CONFIG"; then
+     # Extract the first word of "pkg-config", so it can be a program name with args.
+ set dummy pkg-config; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $PKG_CONFIG in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+   ;;
+ esac
+ fi
+ PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+ 
+ if test -n "$PKG_CONFIG"; then
+   echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+ echo "${ECHO_T}$PKG_CONFIG" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+   if test "$PKG_CONFIG" = "no" ; then
+      echo "*** The pkg-config script could not be found. Make sure it is"
+      echo "*** in your path, or set the PKG_CONFIG environment variable"
+      echo "*** to the full path to pkg-config."
+      echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+   else
+      PKG_CONFIG_MIN_VERSION=0.9.0
+      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+         echo "$as_me:$LINENO: checking for cairo >= 0.5.0" >&5
+ echo $ECHO_N "checking for cairo >= 0.5.0... $ECHO_C" >&6
+ 
+         if $PKG_CONFIG --exists "cairo >= 0.5.0" ; then
+             echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+             succeeded=yes
+ 
+             echo "$as_me:$LINENO: checking CAIRO_CFLAGS" >&5
+ echo $ECHO_N "checking CAIRO_CFLAGS... $ECHO_C" >&6
+             CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 0.5.0"`
+             echo "$as_me:$LINENO: result: $CAIRO_CFLAGS" >&5
+ echo "${ECHO_T}$CAIRO_CFLAGS" >&6
+ 
+             echo "$as_me:$LINENO: checking CAIRO_LIBS" >&5
+ echo $ECHO_N "checking CAIRO_LIBS... $ECHO_C" >&6
+             CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 0.5.0"`
+             echo "$as_me:$LINENO: result: $CAIRO_LIBS" >&5
+ echo "${ECHO_T}$CAIRO_LIBS" >&6
+         else
+             CAIRO_CFLAGS=""
+             CAIRO_LIBS=""
+             ## If we have a custom action on failure, don't print errors, but
+             ## do set a variable so people can do so.
+             CAIRO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cairo >= 0.5.0"`
+             echo $CAIRO_PKG_ERRORS
+         fi
+ 
+ 
+ 
+      else
+         echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+         echo "*** See http://www.freedesktop.org/software/pkgconfig"
+      fi
+   fi
+ 
+   if test $succeeded = yes; then
+      :
+   else
+      { { echo "$as_me:$LINENO: error: Library requirements (cairo >= 0.5.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5
+ echo "$as_me: error: Library requirements (cairo >= 0.5.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;}
+    { (exit 1); exit 1; }; }
+   fi
+ 
+     fi
+ 
+ 
+   succeeded=no
+ 
+   if test -z "$PKG_CONFIG"; then
+     # Extract the first word of "pkg-config", so it can be a program name with args.
+ set dummy pkg-config; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $PKG_CONFIG in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+   ;;
+ esac
+ fi
+ PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+ 
+ if test -n "$PKG_CONFIG"; then
+   echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+ echo "${ECHO_T}$PKG_CONFIG" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+   if test "$PKG_CONFIG" = "no" ; then
+      echo "*** The pkg-config script could not be found. Make sure it is"
+      echo "*** in your path, or set the PKG_CONFIG environment variable"
+      echo "*** to the full path to pkg-config."
+      echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+   else
+      PKG_CONFIG_MIN_VERSION=0.9.0
+      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+         echo "$as_me:$LINENO: checking for pangoft2" >&5
+ echo $ECHO_N "checking for pangoft2... $ECHO_C" >&6
+ 
+         if $PKG_CONFIG --exists "pangoft2" ; then
+             echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+             succeeded=yes
+ 
+             echo "$as_me:$LINENO: checking PANGOFT2_CFLAGS" >&5
+ echo $ECHO_N "checking PANGOFT2_CFLAGS... $ECHO_C" >&6
+             PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2"`
+             echo "$as_me:$LINENO: result: $PANGOFT2_CFLAGS" >&5
+ echo "${ECHO_T}$PANGOFT2_CFLAGS" >&6
+ 
+             echo "$as_me:$LINENO: checking PANGOFT2_LIBS" >&5
+ echo $ECHO_N "checking PANGOFT2_LIBS... $ECHO_C" >&6
+             PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2"`
+             echo "$as_me:$LINENO: result: $PANGOFT2_LIBS" >&5
+ echo "${ECHO_T}$PANGOFT2_LIBS" >&6
+         else
+             PANGOFT2_CFLAGS=""
+             PANGOFT2_LIBS=""
+             ## If we have a custom action on failure, don't print errors, but
+             ## do set a variable so people can do so.
+             PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pangoft2"`
+             echo $PANGOFT2_PKG_ERRORS
+         fi
+ 
+ 
+ 
+      else
+         echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+         echo "*** See http://www.freedesktop.org/software/pkgconfig"
+      fi
+   fi
+ 
+   if test $succeeded = yes; then
+      :
+   else
+      { { echo "$as_me:$LINENO: error: Library requirements (pangoft2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5
+ echo "$as_me: error: Library requirements (pangoft2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;}
+    { (exit 1); exit 1; }; }
+   fi
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   fi
+ 
+     if test "x${COMPILE_QT_PEER}" = xyes; then
+ 
+   succeeded=no
+ 
+   if test -z "$PKG_CONFIG"; then
+     # Extract the first word of "pkg-config", so it can be a program name with args.
+ set dummy pkg-config; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $PKG_CONFIG in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+   ;;
+ esac
+ fi
+ PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+ 
+ if test -n "$PKG_CONFIG"; then
+   echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+ echo "${ECHO_T}$PKG_CONFIG" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+   if test "$PKG_CONFIG" = "no" ; then
+      echo "*** The pkg-config script could not be found. Make sure it is"
+      echo "*** in your path, or set the PKG_CONFIG environment variable"
+      echo "*** to the full path to pkg-config."
+      echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+   else
+      PKG_CONFIG_MIN_VERSION=0.9.0
+      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+         echo "$as_me:$LINENO: checking for QtGui >= 4.0.1" >&5
+ echo $ECHO_N "checking for QtGui >= 4.0.1... $ECHO_C" >&6
+ 
+         if $PKG_CONFIG --exists "QtGui >= 4.0.1" ; then
+             echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+             succeeded=yes
+ 
+             echo "$as_me:$LINENO: checking QT_CFLAGS" >&5
+ echo $ECHO_N "checking QT_CFLAGS... $ECHO_C" >&6
+             QT_CFLAGS=`$PKG_CONFIG --cflags "QtGui >= 4.0.1"`
+             echo "$as_me:$LINENO: result: $QT_CFLAGS" >&5
+ echo "${ECHO_T}$QT_CFLAGS" >&6
+ 
+             echo "$as_me:$LINENO: checking QT_LIBS" >&5
+ echo $ECHO_N "checking QT_LIBS... $ECHO_C" >&6
+             QT_LIBS=`$PKG_CONFIG --libs "QtGui >= 4.0.1"`
+             echo "$as_me:$LINENO: result: $QT_LIBS" >&5
+ echo "${ECHO_T}$QT_LIBS" >&6
+         else
+             QT_CFLAGS=""
+             QT_LIBS=""
+             ## If we have a custom action on failure, don't print errors, but
+             ## do set a variable so people can do so.
+             QT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "QtGui >= 4.0.1"`
+ 
+         fi
+ 
+ 
+ 
+      else
+         echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+         echo "*** See http://www.freedesktop.org/software/pkgconfig"
+      fi
+   fi
+ 
+   if test $succeeded = yes; then
+      HAVE_QT4="yes"
+   else
+      HAVE_QT4="no"
+   fi
+ 
+     if test "x$HAVE_QT4" = "xyes"; then
+                   QT_INCLUDE_DIR=$($PKG_CONFIG --variable=includedir QtGui)
+       EXTRA_QT_INCLUDE_DIR="$QT_INCLUDE_DIR/Qt"
+       as_ac_File=`echo "ac_cv_file_$QT_INCLUDE_DIR/QWidget" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for $QT_INCLUDE_DIR/QWidget" >&5
+ echo $ECHO_N "checking for $QT_INCLUDE_DIR/QWidget... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_File+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   test "$cross_compiling" = yes &&
+   { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+ echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+    { (exit 1); exit 1; }; }
+ if test -r "$QT_INCLUDE_DIR/QWidget"; then
+   eval "$as_ac_File=yes"
+ else
+   eval "$as_ac_File=no"
+ fi
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+ if test `eval echo '${'$as_ac_File'}'` = yes; then
+   { echo "$as_me:$LINENO: No extra QT_INCLUDE_DIR needed" >&5
+ echo "$as_me: No extra QT_INCLUDE_DIR needed" >&6;}
+ else
+   as_ac_File=`echo "ac_cv_file_$EXTRA_QT_INCLUDE_DIR/QWidget" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for $EXTRA_QT_INCLUDE_DIR/QWidget" >&5
+ echo $ECHO_N "checking for $EXTRA_QT_INCLUDE_DIR/QWidget... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_File+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   test "$cross_compiling" = yes &&
+   { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+ echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+    { (exit 1); exit 1; }; }
+ if test -r "$EXTRA_QT_INCLUDE_DIR/QWidget"; then
+   eval "$as_ac_File=yes"
+ else
+   eval "$as_ac_File=no"
+ fi
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+ if test `eval echo '${'$as_ac_File'}'` = yes; then
+   QT_CFLAGS="$QT_CFLAGS -I$EXTRA_QT_INCLUDE_DIR"
+ else
+   { echo "$as_me:$LINENO: WARNING: QWidget not found" >&5
+ echo "$as_me: WARNING: QWidget not found" >&2;}
+ fi
+ 
+ fi
+ 
+ 	# Extract the first word of "moc", so it can be a program name with args.
+ set dummy moc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_MOC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$MOC"; then
+   ac_cv_prog_MOC="$MOC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_MOC="moc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ MOC=$ac_cv_prog_MOC
+ if test -n "$MOC"; then
+   echo "$as_me:$LINENO: result: $MOC" >&5
+ echo "${ECHO_T}$MOC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+     if test "x$HAVE_QT4" = "xno"; then
+       { echo "$as_me:$LINENO: Looking for QT_CFLAGS and QT_LIBS without pkg-config" >&5
+ echo "$as_me: Looking for QT_CFLAGS and QT_LIBS without pkg-config" >&6;}
+       case "$host_os" in
+   	darwin*)
+ 
+ # Check whether --with-qt4dir or --without-qt4dir was given.
+ if test "${with_qt4dir+set}" = set; then
+   withval="$with_qt4dir"
+   QT4DIR=$withval
+ 
+ fi;
+   	  if test x"$QT4DIR" = x ; then
+   	    { { echo "$as_me:$LINENO: error: *** No path for Qt4 --with-qt4dir option given" >&5
+ echo "$as_me: error: *** No path for Qt4 --with-qt4dir option given" >&2;}
+    { (exit 1); exit 1; }; }
+   	  fi
+   	  echo "$as_me:$LINENO: result: QT4DIR... $QT4DIR" >&5
+ echo "${ECHO_T}QT4DIR... $QT4DIR" >&6
+   	  # Extract the first word of "moc", so it can be a program name with args.
+ set dummy moc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_MOC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$MOC"; then
+   ac_cv_prog_MOC="$MOC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $QT4DIR/bin
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_MOC="$QT4DIR/bin/moc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ MOC=$ac_cv_prog_MOC
+ if test -n "$MOC"; then
+   echo "$as_me:$LINENO: result: $MOC" >&5
+ echo "${ECHO_T}$MOC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   	  if test x"$MOC" = x; then
+   	    { { echo "$as_me:$LINENO: error: *** This is not the right Qt installation" >&5
+ echo "$as_me: error: *** This is not the right Qt installation" >&2;}
+    { (exit 1); exit 1; }; }
+   	  fi
+   	  QT_CFLAGS="-F$QT4DIR/lib -I$QT4DIR/lib/QtCore.framework/Headers"
+   	  QT_CFLAGS="$QT_CFLAGS -I$QT4DIR/lib/QtGui.framework/Headers"
+   	  QT_LIBS="-Xlinker -F$QT4DIR/lib -Xlinker -framework -Xlinker QtCore"
+   	  QT_LIBS="$QT_LIBS -Xlinker -framework -Xlinker QtGui"
+   	  ;;
+   	*)
+   	  { { echo "$as_me:$LINENO: error: *** Please check PKG_CONFIG_PATH or the version
+   	  of your installed Qt4 installation." >&5
+ echo "$as_me: error: *** Please check PKG_CONFIG_PATH or the version
+   	  of your installed Qt4 installation." >&2;}
+    { (exit 1); exit 1; }; }
+   	  ;;
+       esac
+     fi
+     { echo "$as_me:$LINENO: Set QT_CFLAGS... $QT_CFLAGS" >&5
+ echo "$as_me: Set QT_CFLAGS... $QT_CFLAGS" >&6;}
+ 
+ 
+   fi
+ fi
+ 
+ 
+ 
+ # Check whether --with-javah or --without-javah was given.
+ if test "${with_javah+set}" = set; then
+   withval="$with_javah"
+ 
+     if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
+ 
+   if test "x${withval}" != x; then
+     if test -f "${withval}"; then
+       USER_JAVAH="${withval}"
+     else
+       # Extract the first word of ""${withval}"", so it can be a program name with args.
+ set dummy "${withval}"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_USER_JAVAH+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $USER_JAVAH in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_USER_JAVAH="$USER_JAVAH" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ USER_JAVAH=$ac_cv_path_USER_JAVAH
+ 
+ if test -n "$USER_JAVAH"; then
+   echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+ echo "${ECHO_T}$USER_JAVAH" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     for javah_name in gcjh javah; do
+       # Extract the first word of ""$javah_name"", so it can be a program name with args.
+ set dummy "$javah_name"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_USER_JAVAH+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $USER_JAVAH in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_USER_JAVAH="$USER_JAVAH" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ USER_JAVAH=$ac_cv_path_USER_JAVAH
+ 
+ if test -n "$USER_JAVAH"; then
+   echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+ echo "${ECHO_T}$USER_JAVAH" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+       if test "x${USER_JAVAH}" != x; then
+         break
+       fi
+     done
+   fi
+ 
+ #  if test "x${USER_JAVAH}" = x; then
+ #    echo "configure: cannot find javah" 1>&2
+ #    exit 1
+ #  fi
+ 
+     else
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       USER_JAVAH=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_USER_JAVAH+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $USER_JAVAH in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_USER_JAVAH="$USER_JAVAH" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ USER_JAVAH=$ac_cv_path_USER_JAVAH
+ 
+ if test -n "$USER_JAVAH"; then
+   echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+ echo "${ECHO_T}$USER_JAVAH" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     for javah_name in gcjh javah; do
+       # Extract the first word of ""$javah_name"", so it can be a program name with args.
+ set dummy "$javah_name"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_USER_JAVAH+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $USER_JAVAH in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_USER_JAVAH="$USER_JAVAH" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ USER_JAVAH=$ac_cv_path_USER_JAVAH
+ 
+ if test -n "$USER_JAVAH"; then
+   echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+ echo "${ECHO_T}$USER_JAVAH" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+       if test "x${USER_JAVAH}" != x; then
+         break
+       fi
+     done
+   fi
+ 
+ #  if test "x${USER_JAVAH}" = x; then
+ #    echo "configure: cannot find javah" 1>&2
+ #    exit 1
+ #  fi
+ 
+     fi
+ 
+ else
+ 
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       USER_JAVAH=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_USER_JAVAH+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $USER_JAVAH in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_USER_JAVAH="$USER_JAVAH" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ USER_JAVAH=$ac_cv_path_USER_JAVAH
+ 
+ if test -n "$USER_JAVAH"; then
+   echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+ echo "${ECHO_T}$USER_JAVAH" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     for javah_name in gcjh javah; do
+       # Extract the first word of ""$javah_name"", so it can be a program name with args.
+ set dummy "$javah_name"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_USER_JAVAH+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $USER_JAVAH in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_USER_JAVAH="$USER_JAVAH" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ USER_JAVAH=$ac_cv_path_USER_JAVAH
+ 
+ if test -n "$USER_JAVAH"; then
+   echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+ echo "${ECHO_T}$USER_JAVAH" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+       if test "x${USER_JAVAH}" != x; then
+         break
+       fi
+     done
+   fi
+ 
+ #  if test "x${USER_JAVAH}" = x; then
+ #    echo "configure: cannot find javah" 1>&2
+ #    exit 1
+ #  fi
+ 
+ 
+ fi;
+ 
+ 
+ if test "x${USER_JAVAH}" != x; then
+   USER_SPECIFIED_JAVAH_TRUE=
+   USER_SPECIFIED_JAVAH_FALSE='#'
+ else
+   USER_SPECIFIED_JAVAH_TRUE='#'
+   USER_SPECIFIED_JAVAH_FALSE=
+ fi
+ 
+ 
+ 
+ 
+ CLASSPATH_INCLUDES="-I\$(top_srcdir)/include -I\$(top_srcdir)/native/jni/classpath -I\$(top_srcdir)/native/target/Linux -I\$(top_srcdir)/native/target/generic"
+ 
+ 
+ if test "x${COMPILE_JNI}" = xyes; then
+   echo "$as_me:$LINENO: checking jni_md.h support" >&5
+ echo $ECHO_N "checking jni_md.h support... $ECHO_C" >&6
+   if test -f ${srcdir}/include/jni_md-${target_cpu}-${target_os}.h; then
+     echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+   else
+     target_cpu=x86
+     target_os=linux-gnu
+     { echo "$as_me:$LINENO: WARNING: no" >&5
+ echo "$as_me: WARNING: no" >&2;}
+   fi
+   ac_sources="include/jni_md-${target_cpu}-${target_os}.h"
+   ac_dests="include/jni_md.h"
+   while test -n "$ac_sources"; do
+     set $ac_dests; ac_dest=$1; shift; ac_dests=$*
+     set $ac_sources; ac_source=$1; shift; ac_sources=$*
+     ac_config_links_1="$ac_config_links_1 $ac_dest:$ac_source"
+   done
+             ac_config_links="$ac_config_links $ac_config_links_1"
+ 
+ fi
+ 
+ 
+   user_specified_javac=
+ 
+ 
+ 
+ # Check whether --with-gcj or --without-gcj was given.
+ if test "${with_gcj+set}" = set; then
+   withval="$with_gcj"
+ 
+     if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
+ 
+   if test "x${withval}" != x; then
+     if test -f "${withval}"; then
+       GCJ="${withval}"
+     else
+       # Extract the first word of ""${withval}"", so it can be a program name with args.
+ set dummy "${withval}"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJ="$GCJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJ=$ac_cv_path_GCJ
+ 
+ if test -n "$GCJ"; then
+   echo "$as_me:$LINENO: result: $GCJ" >&5
+ echo "${ECHO_T}$GCJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""gcj"", so it can be a program name with args.
+ set dummy "gcj"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJ="$GCJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJ=$ac_cv_path_GCJ
+ 
+ if test -n "$GCJ"; then
+   echo "$as_me:$LINENO: result: $GCJ" >&5
+ echo "${ECHO_T}$GCJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+     if test "x$GCJ" != x; then
+     echo "$as_me:$LINENO: checking gcj version 4.0" >&5
+ echo $ECHO_N "checking gcj version 4.0... $ECHO_C" >&6
+     ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+     cat >conftest.$ac_ext <<_ACEOF
+ #if __GNUC__ <= 3
+     #error GCJ 4.0.0 or higher is required
+     #endif
+ 
+ _ACEOF
+     $GCJ -E conftest.c > /dev/null
+     gcj_4_result=$?
+     if test "x$gcj_4_result" = "x0"; then
+       echo "$as_me:$LINENO: result: 4.0 or higher found" >&5
+ echo "${ECHO_T}4.0 or higher found" >&6
+     else
+       { echo "$as_me:$LINENO: WARNING: 4.0 or higher required" >&5
+ echo "$as_me: WARNING: 4.0 or higher required" >&2;}
+     fi
+     ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+   fi
+ 
+     else
+       if test "x${withval}" != xno; then
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       GCJ=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJ="$GCJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJ=$ac_cv_path_GCJ
+ 
+ if test -n "$GCJ"; then
+   echo "$as_me:$LINENO: result: $GCJ" >&5
+ echo "${ECHO_T}$GCJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""gcj"", so it can be a program name with args.
+ set dummy "gcj"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJ="$GCJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJ=$ac_cv_path_GCJ
+ 
+ if test -n "$GCJ"; then
+   echo "$as_me:$LINENO: result: $GCJ" >&5
+ echo "${ECHO_T}$GCJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+     if test "x$GCJ" != x; then
+     echo "$as_me:$LINENO: checking gcj version 4.0" >&5
+ echo $ECHO_N "checking gcj version 4.0... $ECHO_C" >&6
+     ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+     cat >conftest.$ac_ext <<_ACEOF
+ #if __GNUC__ <= 3
+     #error GCJ 4.0.0 or higher is required
+     #endif
+ 
+ _ACEOF
+     $GCJ -E conftest.c > /dev/null
+     gcj_4_result=$?
+     if test "x$gcj_4_result" = "x0"; then
+       echo "$as_me:$LINENO: result: 4.0 or higher found" >&5
+ echo "${ECHO_T}4.0 or higher found" >&6
+     else
+       { echo "$as_me:$LINENO: WARNING: 4.0 or higher required" >&5
+ echo "$as_me: WARNING: 4.0 or higher required" >&2;}
+     fi
+     ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+   fi
+ 
+       fi
+     fi
+     user_specified_javac=gcj
+ 
+ else
+ 
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       GCJ=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJ="$GCJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJ=$ac_cv_path_GCJ
+ 
+ if test -n "$GCJ"; then
+   echo "$as_me:$LINENO: result: $GCJ" >&5
+ echo "${ECHO_T}$GCJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""gcj"", so it can be a program name with args.
+ set dummy "gcj"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJ="$GCJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJ=$ac_cv_path_GCJ
+ 
+ if test -n "$GCJ"; then
+   echo "$as_me:$LINENO: result: $GCJ" >&5
+ echo "${ECHO_T}$GCJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+     if test "x$GCJ" != x; then
+     echo "$as_me:$LINENO: checking gcj version 4.0" >&5
+ echo $ECHO_N "checking gcj version 4.0... $ECHO_C" >&6
+     ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+     cat >conftest.$ac_ext <<_ACEOF
+ #if __GNUC__ <= 3
+     #error GCJ 4.0.0 or higher is required
+     #endif
+ 
+ _ACEOF
+     $GCJ -E conftest.c > /dev/null
+     gcj_4_result=$?
+     if test "x$gcj_4_result" = "x0"; then
+       echo "$as_me:$LINENO: result: 4.0 or higher found" >&5
+ echo "${ECHO_T}4.0 or higher found" >&6
+     else
+       { echo "$as_me:$LINENO: WARNING: 4.0 or higher required" >&5
+ echo "$as_me: WARNING: 4.0 or higher required" >&2;}
+     fi
+     ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+   fi
+ 
+ 
+ fi;
+ 
+ 
+ 
+ 
+ # Check whether --with-jikes or --without-jikes was given.
+ if test "${with_jikes+set}" = set; then
+   withval="$with_jikes"
+ 
+     if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
+ 
+   if test "x${withval}" != x; then
+     if test -f "${withval}"; then
+       JIKES="${withval}"
+     else
+       # Extract the first word of ""${withval}"", so it can be a program name with args.
+ set dummy "${withval}"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_JIKES+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $JIKES in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_JIKES="$JIKES" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ JIKES=$ac_cv_path_JIKES
+ 
+ if test -n "$JIKES"; then
+   echo "$as_me:$LINENO: result: $JIKES" >&5
+ echo "${ECHO_T}$JIKES" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""jikes"", so it can be a program name with args.
+ set dummy "jikes"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_JIKES+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $JIKES in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_JIKES="$JIKES" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ JIKES=$ac_cv_path_JIKES
+ 
+ if test -n "$JIKES"; then
+   echo "$as_me:$LINENO: result: $JIKES" >&5
+ echo "${ECHO_T}$JIKES" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+   if test "x$JIKES" != "x"; then
+         echo "$as_me:$LINENO: checking jikes version" >&5
+ echo $ECHO_N "checking jikes version... $ECHO_C" >&6
+     JIKES_VERSION=`$JIKES --version | awk '/^Jikes Compiler/' | cut -d ' ' -f 5`
+     JIKES_VERSION_MAJOR=`echo "$JIKES_VERSION" | cut -d '.' -f 1`
+     JIKES_VERSION_MINOR=`echo "$JIKES_VERSION" | cut -d '.' -f 2`
+     if expr "$JIKES_VERSION_MAJOR" = 1 > /dev/null; then
+       if expr "$JIKES_VERSION_MINOR" \< 19 > /dev/null; then
+         JIKES=""
+       fi
+     fi
+     if test "x$JIKES" != "x"; then
+       echo "$as_me:$LINENO: result: $JIKES_VERSION" >&5
+ echo "${ECHO_T}$JIKES_VERSION" >&6
+     else
+       { echo "$as_me:$LINENO: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&5
+ echo "$as_me: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&2;}
+     fi
+ 
+     JIKESENCODING=
+     if test -n "`$JIKES --help 2>&1 | grep encoding`"; then
+        JIKESENCODING='-encoding UTF-8'
+     fi
+ 
+   fi
+ 
+     else
+       if test "x${withval}" != xno; then
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       JIKES=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_JIKES+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $JIKES in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_JIKES="$JIKES" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ JIKES=$ac_cv_path_JIKES
+ 
+ if test -n "$JIKES"; then
+   echo "$as_me:$LINENO: result: $JIKES" >&5
+ echo "${ECHO_T}$JIKES" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""jikes"", so it can be a program name with args.
+ set dummy "jikes"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_JIKES+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $JIKES in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_JIKES="$JIKES" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ JIKES=$ac_cv_path_JIKES
+ 
+ if test -n "$JIKES"; then
+   echo "$as_me:$LINENO: result: $JIKES" >&5
+ echo "${ECHO_T}$JIKES" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+   if test "x$JIKES" != "x"; then
+         echo "$as_me:$LINENO: checking jikes version" >&5
+ echo $ECHO_N "checking jikes version... $ECHO_C" >&6
+     JIKES_VERSION=`$JIKES --version | awk '/^Jikes Compiler/' | cut -d ' ' -f 5`
+     JIKES_VERSION_MAJOR=`echo "$JIKES_VERSION" | cut -d '.' -f 1`
+     JIKES_VERSION_MINOR=`echo "$JIKES_VERSION" | cut -d '.' -f 2`
+     if expr "$JIKES_VERSION_MAJOR" = 1 > /dev/null; then
+       if expr "$JIKES_VERSION_MINOR" \< 19 > /dev/null; then
+         JIKES=""
+       fi
+     fi
+     if test "x$JIKES" != "x"; then
+       echo "$as_me:$LINENO: result: $JIKES_VERSION" >&5
+ echo "${ECHO_T}$JIKES_VERSION" >&6
+     else
+       { echo "$as_me:$LINENO: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&5
+ echo "$as_me: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&2;}
+     fi
+ 
+     JIKESENCODING=
+     if test -n "`$JIKES --help 2>&1 | grep encoding`"; then
+        JIKESENCODING='-encoding UTF-8'
+     fi
+ 
+   fi
+ 
+       fi
+     fi
+     user_specified_javac=jikes
+ 
+ else
+ 
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       JIKES=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_JIKES+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $JIKES in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_JIKES="$JIKES" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ JIKES=$ac_cv_path_JIKES
+ 
+ if test -n "$JIKES"; then
+   echo "$as_me:$LINENO: result: $JIKES" >&5
+ echo "${ECHO_T}$JIKES" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""jikes"", so it can be a program name with args.
+ set dummy "jikes"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_JIKES+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $JIKES in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_JIKES="$JIKES" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ JIKES=$ac_cv_path_JIKES
+ 
+ if test -n "$JIKES"; then
+   echo "$as_me:$LINENO: result: $JIKES" >&5
+ echo "${ECHO_T}$JIKES" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+   if test "x$JIKES" != "x"; then
+         echo "$as_me:$LINENO: checking jikes version" >&5
+ echo $ECHO_N "checking jikes version... $ECHO_C" >&6
+     JIKES_VERSION=`$JIKES --version | awk '/^Jikes Compiler/' | cut -d ' ' -f 5`
+     JIKES_VERSION_MAJOR=`echo "$JIKES_VERSION" | cut -d '.' -f 1`
+     JIKES_VERSION_MINOR=`echo "$JIKES_VERSION" | cut -d '.' -f 2`
+     if expr "$JIKES_VERSION_MAJOR" = 1 > /dev/null; then
+       if expr "$JIKES_VERSION_MINOR" \< 19 > /dev/null; then
+         JIKES=""
+       fi
+     fi
+     if test "x$JIKES" != "x"; then
+       echo "$as_me:$LINENO: result: $JIKES_VERSION" >&5
+ echo "${ECHO_T}$JIKES_VERSION" >&6
+     else
+       { echo "$as_me:$LINENO: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&5
+ echo "$as_me: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&2;}
+     fi
+ 
+     JIKESENCODING=
+     if test -n "`$JIKES --help 2>&1 | grep encoding`"; then
+        JIKESENCODING='-encoding UTF-8'
+     fi
+ 
+   fi
+ 
+ 
+ fi;
+ 
+ 
+ 
+ 
+ # Check whether --with-kjc or --without-kjc was given.
+ if test "${with_kjc+set}" = set; then
+   withval="$with_kjc"
+ 
+     if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
+ 
+   if test "x${withval}" != x; then
+     if test -f "${withval}"; then
+       KJC="${withval}"
+     else
+       # Extract the first word of ""${withval}"", so it can be a program name with args.
+ set dummy "${withval}"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_KJC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $KJC in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_KJC="$KJC" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ KJC=$ac_cv_path_KJC
+ 
+ if test -n "$KJC"; then
+   echo "$as_me:$LINENO: result: $KJC" >&5
+ echo "${ECHO_T}$KJC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""kJC"", so it can be a program name with args.
+ set dummy "kJC"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_KJC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $KJC in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_KJC="$KJC" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ KJC=$ac_cv_path_KJC
+ 
+ if test -n "$KJC"; then
+   echo "$as_me:$LINENO: result: $KJC" >&5
+ echo "${ECHO_T}$KJC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+     else
+       if test "x${withval}" != xno; then
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       KJC=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_KJC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $KJC in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_KJC="$KJC" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ KJC=$ac_cv_path_KJC
+ 
+ if test -n "$KJC"; then
+   echo "$as_me:$LINENO: result: $KJC" >&5
+ echo "${ECHO_T}$KJC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""kJC"", so it can be a program name with args.
+ set dummy "kJC"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_KJC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $KJC in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_KJC="$KJC" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ KJC=$ac_cv_path_KJC
+ 
+ if test -n "$KJC"; then
+   echo "$as_me:$LINENO: result: $KJC" >&5
+ echo "${ECHO_T}$KJC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+       fi
+     fi
+     user_specified_javac=kjc
+ 
+ else
+ 
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       KJC=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_KJC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $KJC in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_KJC="$KJC" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ KJC=$ac_cv_path_KJC
+ 
+ if test -n "$KJC"; then
+   echo "$as_me:$LINENO: result: $KJC" >&5
+ echo "${ECHO_T}$KJC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""kJC"", so it can be a program name with args.
+ set dummy "kJC"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_KJC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $KJC in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_KJC="$KJC" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ KJC=$ac_cv_path_KJC
+ 
+ if test -n "$KJC"; then
+   echo "$as_me:$LINENO: result: $KJC" >&5
+ echo "${ECHO_T}$KJC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+ 
+ fi;
+ 
+ 
+ 
+ 
+ # Check whether --with-gcjx or --without-gcjx was given.
+ if test "${with_gcjx+set}" = set; then
+   withval="$with_gcjx"
+ 
+     if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
+ 
+   if test "x${withval}" != x; then
+     if test -f "${withval}"; then
+       GCJX="${withval}"
+     else
+       # Extract the first word of ""${withval}"", so it can be a program name with args.
+ set dummy "${withval}"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJX+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJX in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJX="$GCJX" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJX=$ac_cv_path_GCJX
+ 
+ if test -n "$GCJX"; then
+   echo "$as_me:$LINENO: result: $GCJX" >&5
+ echo "${ECHO_T}$GCJX" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""gcjx"", so it can be a program name with args.
+ set dummy "gcjx"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJX+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJX in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJX="$GCJX" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJX=$ac_cv_path_GCJX
+ 
+ if test -n "$GCJX"; then
+   echo "$as_me:$LINENO: result: $GCJX" >&5
+ echo "${ECHO_T}$GCJX" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+     else
+       if test "x${withval}" != xno; then
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       GCJX=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJX+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJX in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJX="$GCJX" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJX=$ac_cv_path_GCJX
+ 
+ if test -n "$GCJX"; then
+   echo "$as_me:$LINENO: result: $GCJX" >&5
+ echo "${ECHO_T}$GCJX" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""gcjx"", so it can be a program name with args.
+ set dummy "gcjx"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJX+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJX in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJX="$GCJX" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJX=$ac_cv_path_GCJX
+ 
+ if test -n "$GCJX"; then
+   echo "$as_me:$LINENO: result: $GCJX" >&5
+ echo "${ECHO_T}$GCJX" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+       fi
+     fi
+     user_specified_javac=gcjx
+ 
+ else
+ 
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       GCJX=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJX+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJX in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJX="$GCJX" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJX=$ac_cv_path_GCJX
+ 
+ if test -n "$GCJX"; then
+   echo "$as_me:$LINENO: result: $GCJX" >&5
+ echo "${ECHO_T}$GCJX" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""gcjx"", so it can be a program name with args.
+ set dummy "gcjx"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GCJX+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GCJX in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GCJX="$GCJX" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ GCJX=$ac_cv_path_GCJX
+ 
+ if test -n "$GCJX"; then
+   echo "$as_me:$LINENO: result: $GCJX" >&5
+ echo "${ECHO_T}$GCJX" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+ 
+ fi;
+ 
+ 
+ 
+ 
+ # Check whether --with-ecj or --without-ecj was given.
+ if test "${with_ecj+set}" = set; then
+   withval="$with_ecj"
+ 
+     if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
+ 
+   if test "x${withval}" != x; then
+     if test -f "${withval}"; then
+       ECJ="${withval}"
+     else
+       # Extract the first word of ""${withval}"", so it can be a program name with args.
+ set dummy "${withval}"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_ECJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $ECJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_ECJ="$ECJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ ECJ=$ac_cv_path_ECJ
+ 
+ if test -n "$ECJ"; then
+   echo "$as_me:$LINENO: result: $ECJ" >&5
+ echo "${ECHO_T}$ECJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""ecj"", so it can be a program name with args.
+ set dummy "ecj"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_ECJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $ECJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_ECJ="$ECJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ ECJ=$ac_cv_path_ECJ
+ 
+ if test -n "$ECJ"; then
+   echo "$as_me:$LINENO: result: $ECJ" >&5
+ echo "${ECHO_T}$ECJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+     else
+       if test "x${withval}" != xno; then
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       ECJ=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_ECJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $ECJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_ECJ="$ECJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ ECJ=$ac_cv_path_ECJ
+ 
+ if test -n "$ECJ"; then
+   echo "$as_me:$LINENO: result: $ECJ" >&5
+ echo "${ECHO_T}$ECJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""ecj"", so it can be a program name with args.
+ set dummy "ecj"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_ECJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $ECJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_ECJ="$ECJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ ECJ=$ac_cv_path_ECJ
+ 
+ if test -n "$ECJ"; then
+   echo "$as_me:$LINENO: result: $ECJ" >&5
+ echo "${ECHO_T}$ECJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+       fi
+     fi
+     user_specified_javac=ecj
+ 
+ else
+ 
+ 
+   if test "x" != x; then
+     if test -f ""; then
+       ECJ=""
+     else
+       # Extract the first word of """", so it can be a program name with args.
+ set dummy ""; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_ECJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $ECJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_ECJ="$ECJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ ECJ=$ac_cv_path_ECJ
+ 
+ if test -n "$ECJ"; then
+   echo "$as_me:$LINENO: result: $ECJ" >&5
+ echo "${ECHO_T}$ECJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     fi
+   else
+     # Extract the first word of ""ecj"", so it can be a program name with args.
+ set dummy "ecj"; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_ECJ+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $ECJ in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_ECJ="$ECJ" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ ECJ=$ac_cv_path_ECJ
+ 
+ if test -n "$ECJ"; then
+   echo "$as_me:$LINENO: result: $ECJ" >&5
+ echo "${ECHO_T}$ECJ" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   fi
+ 
+ 
+ fi;
+ 
+ 
+ 
+   if test "x${user_specified_javac}" = x; then
+ 
+ 
+ if test "x${GCJ}" != x; then
+   FOUND_GCJ_TRUE=
+   FOUND_GCJ_FALSE='#'
+ else
+   FOUND_GCJ_TRUE='#'
+   FOUND_GCJ_FALSE=
+ fi
+ 
+ 
+ 
+ if test "x${JIKES}" != x; then
+   FOUND_JIKES_TRUE=
+   FOUND_JIKES_FALSE='#'
+ else
+   FOUND_JIKES_TRUE='#'
+   FOUND_JIKES_FALSE=
+ fi
+ 
+ 
+ 
+ if test "x${ECJ}" != x; then
+   FOUND_ECJ_TRUE=
+   FOUND_ECJ_FALSE='#'
+ else
+   FOUND_ECJ_TRUE='#'
+   FOUND_ECJ_FALSE=
+ fi
+ 
+   else
+ 
+ 
+ if test "x${user_specified_javac}" = xgcj; then
+   FOUND_GCJ_TRUE=
+   FOUND_GCJ_FALSE='#'
+ else
+   FOUND_GCJ_TRUE='#'
+   FOUND_GCJ_FALSE=
+ fi
+ 
+ 
+ 
+ if test "x${user_specified_javac}" = xjikes; then
+   FOUND_JIKES_TRUE=
+   FOUND_JIKES_FALSE='#'
+ else
+   FOUND_JIKES_TRUE='#'
+   FOUND_JIKES_FALSE=
+ fi
+ 
+ 
+ 
+ if test "x${user_specified_javac}" = xecj; then
+   FOUND_ECJ_TRUE=
+   FOUND_ECJ_FALSE='#'
+ else
+   FOUND_ECJ_TRUE='#'
+   FOUND_ECJ_FALSE=
+ fi
+ 
+   fi
+ 
+ 
+ if test "x${user_specified_javac}" = xkjc; then
+   FOUND_KJC_TRUE=
+   FOUND_KJC_FALSE='#'
+ else
+   FOUND_KJC_TRUE='#'
+   FOUND_KJC_FALSE=
+ fi
+ 
+ 
+ 
+ if test "x${user_specified_javac}" = xgcjx; then
+   FOUND_GCJX_TRUE=
+   FOUND_GCJX_FALSE='#'
+ else
+   FOUND_GCJX_TRUE='#'
+   FOUND_GCJX_FALSE=
+ fi
+ 
+ 
+   if test "x${GCJ}" = x && test "x${JIKES}" = x && test "x${user_specified_javac}" != xkjc && test "x${user_specified_javac}" != xgcjx; then
+       # FIXME: use autoconf error function
+       echo "configure: cannot find javac, try --with-gcj, --with-jikes, --with-kjc, or --with-gcjx" 1>&2
+       exit 1
+   fi
+ 
+ 
+ 
+ 
+ # Check whether --with-classpath or --without-classpath was given.
+ if test "${with_classpath+set}" = set; then
+   withval="$with_classpath"
+ 
+     if test "x${withval}" = xyes; then
+       # set user classpath to CLASSPATH from env
+       echo "$as_me:$LINENO: checking for classlib" >&5
+ echo $ECHO_N "checking for classlib... $ECHO_C" >&6
+       USER_CLASSLIB=${CLASSPATH}
+ 
+       echo "$as_me:$LINENO: result: ${USER_CLASSLIB}" >&5
+ echo "${ECHO_T}${USER_CLASSLIB}" >&6
+       conditional_with_classlib=true
+     elif test "x${withval}" != x && test "x${withval}" != xno; then
+       # set user classpath to specified value
+       echo "$as_me:$LINENO: checking for classlib" >&5
+ echo $ECHO_N "checking for classlib... $ECHO_C" >&6
+       USER_CLASSLIB=${withval}
+ 
+       echo "$as_me:$LINENO: result: ${withval}" >&5
+ echo "${ECHO_T}${withval}" >&6
+       conditional_with_classlib=true
+     fi
+ 
+ else
+    conditional_with_classlib=false
+ fi;
+ 
+ 
+ if test "x${conditional_with_classlib}" = xtrue; then
+   USER_SPECIFIED_CLASSLIB_TRUE=
+   USER_SPECIFIED_CLASSLIB_FALSE='#'
+ else
+   USER_SPECIFIED_CLASSLIB_TRUE='#'
+   USER_SPECIFIED_CLASSLIB_FALSE=
+ fi
+ 
+ 
+ 
+ # Check whether --with-vm-classes or --without-vm-classes was given.
+ if test "${with_vm_classes+set}" = set; then
+   withval="$with_vm_classes"
+   vm_classes="$with_vm_classes"
+ else
+   vm_classes='${top_srcdir}/vm/reference'
+ fi;
+ 
+ 
+ 
+ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+ if test "${enable_maintainer_mode+set}" = set; then
+   enableval="$enable_maintainer_mode"
+   USE_MAINTAINER_MODE=$enableval
+ else
+   USE_MAINTAINER_MODE=no
+ fi;
+   echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+ echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+ 
+ 
+ if test $USE_MAINTAINER_MODE = yes; then
+   MAINTAINER_MODE_TRUE=
+   MAINTAINER_MODE_FALSE='#'
+ else
+   MAINTAINER_MODE_TRUE='#'
+   MAINTAINER_MODE_FALSE=
+ fi
+ 
+   MAINT=$MAINTAINER_MODE_TRUE
+ 
+ 
+ 
+ # Check whether --enable-debug or --disable-debug was given.
+ if test "${enable_debug+set}" = set; then
+   enableval="$enable_debug"
+   case "${enableval}" in
+                 yes)
+               	LIBDEBUG="true"
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define DEBUG 1
+ _ACEOF
+ 
+               	;;
+                 no)   LIBDEBUG="false" ;;
+                 *) 	{ { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug" >&5
+ echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;}
+    { (exit 1); exit 1; }; } ;;
+               esac
+ else
+   LIBDEBUG="false"
+ fi;
+ 
+ 
+ # Check whether --enable-load-library or --disable-load-library was given.
+ if test "${enable_load_library+set}" = set; then
+   enableval="$enable_load_library"
+   case "${enableval}" in
+                 yes) INIT_LOAD_LIBRARY="true" ;;
+                 no) INIT_LOAD_LIBRARY="false" ;;
+                 *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-load-library" >&5
+ echo "$as_me: error: bad value ${enableval} for --enable-load-library" >&2;}
+    { (exit 1); exit 1; }; } ;;
+               esac
+ else
+   INIT_LOAD_LIBRARY="true"
+ fi;
+ 
+ 
+ 
+ # Check whether --enable-java-lang-system-explicit-initialization or --disable-java-lang-system-explicit-initialization was given.
+ if test "${enable_java_lang_system_explicit_initialization+set}" = set; then
+   enableval="$enable_java_lang_system_explicit_initialization"
+   case "${enableval}" in
+                 yes|true) JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="true" ;;
+                 no|false) JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="false" ;;
+                 *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-java-lang-system-explicit-initialization" >&5
+ echo "$as_me: error: bad value ${enableval} for --enable-java-lang-system-explicit-initialization" >&2;}
+    { (exit 1); exit 1; }; } ;;
+               esac
+ else
+   JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="false"
+ fi;
+ 
+ 
+ 
+ REMOVE=""
+ 
+ 
+ # Extract the first word of "mkdir", so it can be a program name with args.
+ set dummy mkdir; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_MKDIR+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $MKDIR in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ MKDIR=$ac_cv_path_MKDIR
+ 
+ if test -n "$MKDIR"; then
+   echo "$as_me:$LINENO: result: $MKDIR" >&5
+ echo "${ECHO_T}$MKDIR" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ # Extract the first word of "cp", so it can be a program name with args.
+ set dummy cp; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_CP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $CP in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_CP="$CP" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ CP=$ac_cv_path_CP
+ 
+ if test -n "$CP"; then
+   echo "$as_me:$LINENO: result: $CP" >&5
+ echo "${ECHO_T}$CP" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ # Extract the first word of "date", so it can be a program name with args.
+ set dummy date; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_DATE+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $DATE in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_DATE="$DATE" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ DATE=$ac_cv_path_DATE
+ 
+ if test -n "$DATE"; then
+   echo "$as_me:$LINENO: result: $DATE" >&5
+ echo "${ECHO_T}$DATE" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ 
+ # Extract the first word of "find", so it can be a program name with args.
+ set dummy find; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_FIND+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $FIND in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_FIND="$FIND" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ FIND=$ac_cv_path_FIND
+ 
+ if test -n "$FIND"; then
+   echo "$as_me:$LINENO: result: $FIND" >&5
+ echo "${ECHO_T}$FIND" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ 
+ 
+   # Extract the first word of "zip", so it can be a program name with args.
+ set dummy zip; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_ZIP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $ZIP in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   ;;
+ esac
+ fi
+ ZIP=$ac_cv_path_ZIP
+ 
+ if test -n "$ZIP"; then
+   echo "$as_me:$LINENO: result: $ZIP" >&5
+ echo "${ECHO_T}$ZIP" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ 
+ # Check whether --with-glibj or --without-glibj was given.
+ if test "${with_glibj+set}" = set; then
+   withval="$with_glibj"
+ 
+                 if test "x${withval}" = xyes || test "x${withval}" = xzip; then
+ 		  install_class_files=no
+ 		  build_class_files=yes
+ 		  use_zip=yes
+ 		elif test "x${withval}" = xboth; then
+ 		  install_class_files=yes
+ 		  build_class_files=yes
+ 		  use_zip=yes
+ 		elif test "x${withval}" = xflat; then
+ 		  install_class_files=yes
+ 		  build_class_files=yes
+ 		  use_zip=no
+                 elif test "x${withval}" = xno || test "x${withval}" = xnone; then
+ 		  install_class_files=no
+ 		  build_class_files=no
+ 		  use_zip=no
+ 		elif test "x${withval}" = xbuild; then
+ 		  install_class_files=no
+ 		  build_class_files=yes
+ 		  use_zip=no
+                 else
+ 		  { { echo "$as_me:$LINENO: error: unknown value given to --with-glibj" >&5
+ echo "$as_me: error: unknown value given to --with-glibj" >&2;}
+    { (exit 1); exit 1; }; }
+                 fi
+ 
+ else
+ 
+ 		install_class_files=no
+ 		use_zip=yes
+ 
+ fi;
+ 
+ 
+ if test "x${use_zip}" = xyes; then
+   INSTALL_GLIBJ_ZIP_TRUE=
+   INSTALL_GLIBJ_ZIP_FALSE='#'
+ else
+   INSTALL_GLIBJ_ZIP_TRUE='#'
+   INSTALL_GLIBJ_ZIP_FALSE=
+ fi
+ 
+ 
+ 
+ if test "x${install_class_files}" = xyes; then
+   INSTALL_CLASS_FILES_TRUE=
+   INSTALL_CLASS_FILES_FALSE='#'
+ else
+   INSTALL_CLASS_FILES_TRUE='#'
+   INSTALL_CLASS_FILES_FALSE=
+ fi
+ 
+ 
+ 
+ if test "x${build_class_files}" = xyes; then
+   BUILD_CLASS_FILES_TRUE=
+   BUILD_CLASS_FILES_FALSE='#'
+ else
+   BUILD_CLASS_FILES_TRUE='#'
+   BUILD_CLASS_FILES_FALSE=
+ fi
+ 
+ 
+   # Check whether --enable-examples or --disable-examples was given.
+ if test "${enable_examples+set}" = set; then
+   enableval="$enable_examples"
+   case "${enableval}" in
+ 		  yes) EXAMPLESDIR="examples" ;;
+ 		  no) EXAMPLESDIR="" ;;
+ 		  *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-examples" >&5
+ echo "$as_me: error: bad value ${enableval} for --enable-examples" >&2;}
+    { (exit 1); exit 1; }; } ;;
+ 		esac
+ else
+   EXAMPLESDIR="examples"
+ fi;
+   if test "x${use_zip}" = xno && test "x${install_class_files}" = xno; then
+     EXAMPLESDIR=""
+   fi
+ 
+ 
+ 
+ 
+ 
+ # Check whether --with-gjdoc or --without-gjdoc was given.
+ if test "${with_gjdoc+set}" = set; then
+   withval="$with_gjdoc"
+   if test "x${withval}" = xno; then
+ 	         WITH_GJDOC=no;
+ 	       elif test "x${withval}" = xyes -o "x{withval}" = x; then
+ 	         WITH_GJDOC=yes;
+ 	         # Extract the first word of "gjdoc", so it can be a program name with args.
+ set dummy gjdoc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_GJDOC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $GJDOC in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_GJDOC="$GJDOC" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_GJDOC="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_path_GJDOC" && ac_cv_path_GJDOC=""no""
+   ;;
+ esac
+ fi
+ GJDOC=$ac_cv_path_GJDOC
+ 
+ if test -n "$GJDOC"; then
+   echo "$as_me:$LINENO: result: $GJDOC" >&5
+ echo "${ECHO_T}$GJDOC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ 		 if test "x${GJDOC}" = xno; then
+ 		   { { echo "$as_me:$LINENO: error: \"gjdoc executable not found\"" >&5
+ echo "$as_me: error: \"gjdoc executable not found\"" >&2;}
+    { (exit 1); exit 1; }; };
+ 		 fi
+ 	       else
+ 	         WITH_GJDOC=yes
+ 		 GJDOC="${withval}"
+ 		 as_ac_File=`echo "ac_cv_file_${GJDOC}" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for ${GJDOC}" >&5
+ echo $ECHO_N "checking for ${GJDOC}... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_File+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   test "$cross_compiling" = yes &&
+   { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+ echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+    { (exit 1); exit 1; }; }
+ if test -r "${GJDOC}"; then
+   eval "$as_ac_File=yes"
+ else
+   eval "$as_ac_File=no"
+ fi
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+ if test `eval echo '${'$as_ac_File'}'` = yes; then
+   :
+ else
+   { { echo "$as_me:$LINENO: error: \"Cannot use ${withval} as gjdoc executable since it doesn't exist\"" >&5
+ echo "$as_me: error: \"Cannot use ${withval} as gjdoc executable since it doesn't exist\"" >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ 	       fi
+ else
+   WITH_GJDOC=no
+ fi;
+ 
+ 
+ 
+ if test "x${WITH_GJDOC}" = xyes; then
+   CREATE_API_DOCS_TRUE=
+   CREATE_API_DOCS_FALSE='#'
+ else
+   CREATE_API_DOCS_TRUE='#'
+   CREATE_API_DOCS_FALSE=
+ fi
+ 
+ 
+ 
+ 
+ 
+ # Check whether --with-jay or --without-jay was given.
+ if test "${with_jay+set}" = set; then
+   withval="$with_jay"
+ 
+     if test -d "${withval}"; then
+       JAY_DIR_PATH="${withval}"
+       # Extract the first word of "jay", so it can be a program name with args.
+ set dummy jay; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_path_JAY+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   case $JAY in
+   [\\/]* | ?:[\\/]*)
+   ac_cv_path_JAY="$JAY" # Let the user override the test with a path.
+   ;;
+   *)
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in ${JAY_DIR_PATH}
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_path_JAY="$as_dir/$ac_word$ac_exec_ext"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+   test -z "$ac_cv_path_JAY" && ac_cv_path_JAY=""no""
+   ;;
+ esac
+ fi
+ JAY=$ac_cv_path_JAY
+ 
+ if test -n "$JAY"; then
+   echo "$as_me:$LINENO: result: $JAY" >&5
+ echo "${ECHO_T}$JAY" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+       if test "x${JAY}" = xno; then
+         { { echo "$as_me:$LINENO: error: \"jay executable not found\"" >&5
+ echo "$as_me: error: \"jay executable not found\"" >&2;}
+    { (exit 1); exit 1; }; };
+       fi
+     else
+       JAY_DIR_PATH=$(dirname "${withval}")
+       JAY="${withval}"
+ 
+     fi
+     JAY_SKELETON="${JAY_DIR_PATH}/skeleton"
+     as_ac_File=`echo "ac_cv_file_${JAY_SKELETON}" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for ${JAY_SKELETON}" >&5
+ echo $ECHO_N "checking for ${JAY_SKELETON}... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_File+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   test "$cross_compiling" = yes &&
+   { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+ echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+    { (exit 1); exit 1; }; }
+ if test -r "${JAY_SKELETON}"; then
+   eval "$as_ac_File=yes"
+ else
+   eval "$as_ac_File=no"
+ fi
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+ if test `eval echo '${'$as_ac_File'}'` = yes; then
+   :
+ else
+   { { echo "$as_me:$LINENO: error: \"Expected skeleton file in $(dirname ${withval})\"" >&5
+ echo "$as_me: error: \"Expected skeleton file in $(dirname ${withval})\"" >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+     JAY_FOUND=yes
+ 
+ else
+ 
+     JAY_FOUND=no
+ 
+ fi;
+ 
+ 
+ if test "x${JAY_FOUND}" = xyes; then
+   REGEN_PARSERS_TRUE=
+   REGEN_PARSERS_FALSE='#'
+ else
+   REGEN_PARSERS_TRUE='#'
+   REGEN_PARSERS_FALSE=
+ fi
+ 
+ 
+ 
+ # Check whether --enable-portable-native-sync or --disable-portable-native-sync was given.
+ if test "${enable_portable_native_sync+set}" = set; then
+   enableval="$enable_portable_native_sync"
+   case "${enableval}" in
+                 yes)
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define PORTABLE_NATIVE_SYNC 1
+ _ACEOF
+ 
+                      ;;
+                 no)  ;;
+                 *)
+                      { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-portable-native-sync" >&5
+ echo "$as_me: error: bad value ${enableval} for --enable-portable-native-sync" >&2;}
+    { (exit 1); exit 1; }; }
+                      ;;
+               esac
+ fi;
+ 
+                                                                                                                                                                                                                                                                                                                                                     ac_config_files="$ac_config_files Makefile doc/Makefile doc/api/Makefile external/Makefile external/sax/Makefile external/w3c_dom/Makefile gnu/classpath/Configuration.java include/Makefile native/Makefile native/fdlibm/Makefile native/jawt/Makefile native/jni/Makefile native/jni/classpath/Makefile native/jni/java-io/Makefile native/jni/java-lang/Makefile native/jni/java-net/Makefile native/jni/java-nio/Makefile native/jni/java-util/Makefile native/jni/gtk-peer/Makefile native/jni/qt-peer/Makefile native/jni/xmlj/Makefile native/jni/midi-alsa/Makefile native/jni/midi-dssi/Makefile native/target/Makefile native/target/Linux/Makefile native/target/generic/Makefile resource/Makefile scripts/Makefile scripts/classpath.spec lib/Makefile lib/gen-classlist.sh lib/copy-vmresources.sh examples/Makefile examples/Makefile.jawt"
+ 
+           ac_config_commands="$ac_config_commands gen-classlist"
+ 
+           ac_config_commands="$ac_config_commands copy-vmresources"
+ 
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+ # scripts and configure runs, see configure's option --config-cache.
+ # It is not useful on other systems.  If it contains results you don't
+ # want to keep, you may remove or edit it.
+ #
+ # config.status only pays attention to the cache file if you give it
+ # the --recheck option to rerun configure.
+ #
+ # `ac_cv_env_foo' variables (set or unset) will be overridden when
+ # loading this file, other *unset* `ac_cv_foo' will be assigned the
+ # following values.
+ 
+ _ACEOF
+ 
+ # The following way of writing the cache mishandles newlines in values,
+ # but we know of no workaround that is simple, portable, and efficient.
+ # So, don't put newlines in cache variables' values.
+ # Ultrix sh set writes to stderr and can't be redirected directly,
+ # and sets the high bit in the cache file unless we assign to the vars.
+ {
+   (set) 2>&1 |
+     case `(ac_space=' '; set | grep ac_space) 2>&1` in
+     *ac_space=\ *)
+       # `set' does not quote correctly, so add quotes (double-quote
+       # substitution turns \\\\ into \\, and sed turns \\ into \).
+       sed -n \
+ 	"s/'/'\\\\''/g;
+ 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+       ;;
+     *)
+       # `set' quotes correctly as required by POSIX, so do not add quotes.
+       sed -n \
+ 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+       ;;
+     esac;
+ } |
+   sed '
+      t clear
+      : clear
+      s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+      t end
+      /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+      : end' >>confcache
+ if diff $cache_file confcache >/dev/null 2>&1; then :; else
+   if test -w $cache_file; then
+     test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+     cat confcache >$cache_file
+   else
+     echo "not updating unwritable cache $cache_file"
+   fi
+ fi
+ rm -f confcache
+ 
+ test "x$prefix" = xNONE && prefix=$ac_default_prefix
+ # Let make expand exec_prefix.
+ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+ 
+ # VPATH may cause trouble with some makes, so we remove $(srcdir),
+ # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+ # trailing colons and then remove the whole line if VPATH becomes empty
+ # (actually we leave an empty line to preserve line numbers).
+ if test "x$srcdir" = x.; then
+   ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+ s/:*\$(srcdir):*/:/;
+ s/:*\${srcdir}:*/:/;
+ s/:*@srcdir@:*/:/;
+ s/^\([^=]*=[	 ]*\):*/\1/;
+ s/:*$//;
+ s/^[^=]*=[	 ]*$//;
+ }'
+ fi
+ 
+ DEFS=-DHAVE_CONFIG_H
+ 
+ ac_libobjs=
+ ac_ltlibobjs=
+ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+   # 1. Remove the extension, and $U if already installed.
+   ac_i=`echo "$ac_i" |
+ 	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+   # 2. Add them.
+   ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+   ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+ done
+ LIBOBJS=$ac_libobjs
+ 
+ LTLIBOBJS=$ac_ltlibobjs
+ 
+ 
+ if test -z "${CREATE_JNI_LIBRARIES_TRUE}" && test -z "${CREATE_JNI_LIBRARIES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"CREATE_JNI_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"CREATE_JNI_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${CREATE_CORE_JNI_LIBRARIES_TRUE}" && test -z "${CREATE_CORE_JNI_LIBRARIES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"CREATE_CORE_JNI_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"CREATE_CORE_JNI_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${CREATE_XMLJ_LIBRARY_TRUE}" && test -z "${CREATE_XMLJ_LIBRARY_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"CREATE_XMLJ_LIBRARY\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"CREATE_XMLJ_LIBRARY\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"AMDEP\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${CREATE_ALSA_LIBRARIES_TRUE}" && test -z "${CREATE_ALSA_LIBRARIES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"CREATE_ALSA_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"CREATE_ALSA_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${CREATE_DSSI_LIBRARIES_TRUE}" && test -z "${CREATE_DSSI_LIBRARIES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"CREATE_DSSI_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"CREATE_DSSI_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${CREATE_GTK_PEER_LIBRARIES_TRUE}" && test -z "${CREATE_GTK_PEER_LIBRARIES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"CREATE_GTK_PEER_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"CREATE_GTK_PEER_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${GTK_CAIRO_TRUE}" && test -z "${GTK_CAIRO_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"GTK_CAIRO\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"GTK_CAIRO\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${CREATE_QT_PEER_LIBRARIES_TRUE}" && test -z "${CREATE_QT_PEER_LIBRARIES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"CREATE_QT_PEER_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"CREATE_QT_PEER_LIBRARIES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${CREATE_JNI_HEADERS_TRUE}" && test -z "${CREATE_JNI_HEADERS_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"CREATE_JNI_HEADERS\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"CREATE_JNI_HEADERS\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${USER_SPECIFIED_JAVAH_TRUE}" && test -z "${USER_SPECIFIED_JAVAH_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"USER_SPECIFIED_JAVAH\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"USER_SPECIFIED_JAVAH\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${FOUND_GCJ_TRUE}" && test -z "${FOUND_GCJ_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"FOUND_GCJ\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"FOUND_GCJ\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${FOUND_JIKES_TRUE}" && test -z "${FOUND_JIKES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"FOUND_JIKES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"FOUND_JIKES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${FOUND_ECJ_TRUE}" && test -z "${FOUND_ECJ_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"FOUND_ECJ\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"FOUND_ECJ\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${FOUND_GCJ_TRUE}" && test -z "${FOUND_GCJ_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"FOUND_GCJ\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"FOUND_GCJ\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${FOUND_JIKES_TRUE}" && test -z "${FOUND_JIKES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"FOUND_JIKES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"FOUND_JIKES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${FOUND_ECJ_TRUE}" && test -z "${FOUND_ECJ_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"FOUND_ECJ\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"FOUND_ECJ\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${FOUND_KJC_TRUE}" && test -z "${FOUND_KJC_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"FOUND_KJC\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"FOUND_KJC\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${FOUND_GCJX_TRUE}" && test -z "${FOUND_GCJX_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"FOUND_GCJX\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"FOUND_GCJX\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${USER_SPECIFIED_CLASSLIB_TRUE}" && test -z "${USER_SPECIFIED_CLASSLIB_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"USER_SPECIFIED_CLASSLIB\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"USER_SPECIFIED_CLASSLIB\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${INSTALL_GLIBJ_ZIP_TRUE}" && test -z "${INSTALL_GLIBJ_ZIP_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"INSTALL_GLIBJ_ZIP\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"INSTALL_GLIBJ_ZIP\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${INSTALL_CLASS_FILES_TRUE}" && test -z "${INSTALL_CLASS_FILES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"INSTALL_CLASS_FILES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"INSTALL_CLASS_FILES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${BUILD_CLASS_FILES_TRUE}" && test -z "${BUILD_CLASS_FILES_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"BUILD_CLASS_FILES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"BUILD_CLASS_FILES\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${CREATE_API_DOCS_TRUE}" && test -z "${CREATE_API_DOCS_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"CREATE_API_DOCS\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"CREATE_API_DOCS\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ if test -z "${REGEN_PARSERS_TRUE}" && test -z "${REGEN_PARSERS_FALSE}"; then
+   { { echo "$as_me:$LINENO: error: conditional \"REGEN_PARSERS\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+ echo "$as_me: error: conditional \"REGEN_PARSERS\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ : ${CONFIG_STATUS=./config.status}
+ ac_clean_files_save=$ac_clean_files
+ ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+ { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+ echo "$as_me: creating $CONFIG_STATUS" >&6;}
+ cat >$CONFIG_STATUS <<_ACEOF
+ #! $SHELL
+ # Generated by $as_me.
+ # Run this file to recreate the current configuration.
+ # Compiler output produced by configure, useful for debugging
+ # configure, is in config.log if it exists.
+ 
+ debug=false
+ ac_cs_recheck=false
+ ac_cs_silent=false
+ SHELL=\${CONFIG_SHELL-$SHELL}
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ ## --------------------- ##
+ ## M4sh Initialization.  ##
+ ## --------------------- ##
+ 
+ # Be Bourne compatible
+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+   emulate sh
+   NULLCMD=:
+   # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+   # is contrary to our usage.  Disable this feature.
+   alias -g '${1+"$@"}'='"$@"'
+ elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+   set -o posix
+ fi
+ DUALCASE=1; export DUALCASE # for MKS sh
+ 
+ # Support unset when possible.
+ if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+   as_unset=unset
+ else
+   as_unset=false
+ fi
+ 
+ 
+ # Work around bugs in pre-3.0 UWIN ksh.
+ $as_unset ENV MAIL MAILPATH
+ PS1='$ '
+ PS2='> '
+ PS4='+ '
+ 
+ # NLS nuisances.
+ for as_var in \
+   LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+   LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+   LC_TELEPHONE LC_TIME
+ do
+   if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+     eval $as_var=C; export $as_var
+   else
+     $as_unset $as_var
+   fi
+ done
+ 
+ # Required to use basename.
+ if expr a : '\(a\)' >/dev/null 2>&1; then
+   as_expr=expr
+ else
+   as_expr=false
+ fi
+ 
+ if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+   as_basename=basename
+ else
+   as_basename=false
+ fi
+ 
+ 
+ # Name of the executable.
+ as_me=`$as_basename "$0" ||
+ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ 	 X"$0" : 'X\(//\)$' \| \
+ 	 X"$0" : 'X\(/\)$' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X/"$0" |
+     sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+   	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\/\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+ 
+ 
+ # PATH needs CR, and LINENO needs CR and PATH.
+ # Avoid depending upon Character Ranges.
+ as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+ as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+ as_cr_digits='0123456789'
+ as_cr_alnum=$as_cr_Letters$as_cr_digits
+ 
+ # The user is always right.
+ if test "${PATH_SEPARATOR+set}" != set; then
+   echo "#! /bin/sh" >conf$$.sh
+   echo  "exit 0"   >>conf$$.sh
+   chmod +x conf$$.sh
+   if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+     PATH_SEPARATOR=';'
+   else
+     PATH_SEPARATOR=:
+   fi
+   rm -f conf$$.sh
+ fi
+ 
+ 
+   as_lineno_1=$LINENO
+   as_lineno_2=$LINENO
+   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+   test "x$as_lineno_1" != "x$as_lineno_2" &&
+   test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+   # Find who we are.  Look in the path if we contain no path at all
+   # relative or not.
+   case $0 in
+     *[\\/]* ) as_myself=$0 ;;
+     *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+ 
+        ;;
+   esac
+   # We did not find ourselves, most probably we were run as `sh COMMAND'
+   # in which case we are not to be found in the path.
+   if test "x$as_myself" = x; then
+     as_myself=$0
+   fi
+   if test ! -f "$as_myself"; then
+     { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+ echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+    { (exit 1); exit 1; }; }
+   fi
+   case $CONFIG_SHELL in
+   '')
+     as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for as_base in sh bash ksh sh5; do
+ 	 case $as_dir in
+ 	 /*)
+ 	   if ("$as_dir/$as_base" -c '
+   as_lineno_1=$LINENO
+   as_lineno_2=$LINENO
+   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+   test "x$as_lineno_1" != "x$as_lineno_2" &&
+   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+ 	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ 	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ 	     CONFIG_SHELL=$as_dir/$as_base
+ 	     export CONFIG_SHELL
+ 	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ 	   fi;;
+ 	 esac
+        done
+ done
+ ;;
+   esac
+ 
+   # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+   # uniformly replaced by the line number.  The first 'sed' inserts a
+   # line-number line before each line; the second 'sed' does the real
+   # work.  The second script uses 'N' to pair each line-number line
+   # with the numbered line, and appends trailing '-' during
+   # substitution so that $LINENO is not a special case at line end.
+   # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+   # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+   sed '=' <$as_myself |
+     sed '
+       N
+       s,$,-,
+       : loop
+       s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+       t loop
+       s,-$,,
+       s,^['$as_cr_digits']*\n,,
+     ' >$as_me.lineno &&
+   chmod +x $as_me.lineno ||
+     { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+ echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+   # Don't try to exec as it changes $[0], causing all sort of problems
+   # (the dirname of $[0] is not the place where we might find the
+   # original and so on.  Autoconf is especially sensible to this).
+   . ./$as_me.lineno
+   # Exit status is that of the last command.
+   exit
+ }
+ 
+ 
+ case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+   *c*,-n*) ECHO_N= ECHO_C='
+ ' ECHO_T='	' ;;
+   *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+   *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+ esac
+ 
+ if expr a : '\(a\)' >/dev/null 2>&1; then
+   as_expr=expr
+ else
+   as_expr=false
+ fi
+ 
+ rm -f conf$$ conf$$.exe conf$$.file
+ echo >conf$$.file
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+   # We could just check for DJGPP; but this test a) works b) is more generic
+   # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+   if test -f conf$$.exe; then
+     # Don't use ln at all; we don't have any links
+     as_ln_s='cp -p'
+   else
+     as_ln_s='ln -s'
+   fi
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+   as_ln_s=ln
+ else
+   as_ln_s='cp -p'
+ fi
+ rm -f conf$$ conf$$.exe conf$$.file
+ 
+ if mkdir -p . 2>/dev/null; then
+   as_mkdir_p=:
+ else
+   test -d ./-p && rmdir ./-p
+   as_mkdir_p=false
+ fi
+ 
+ as_executable_p="test -f"
+ 
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ # Sed expression to map a string onto a valid variable name.
+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ 
+ # IFS
+ # We need space, tab and new line, in precisely that order.
+ as_nl='
+ '
+ IFS=" 	$as_nl"
+ 
+ # CDPATH.
+ $as_unset CDPATH
+ 
+ exec 6>&1
+ 
+ # Open the log real soon, to keep \$[0] and so on meaningful, and to
+ # report actual input values of CONFIG_FILES etc. instead of their
+ # values after options handling.  Logging --version etc. is OK.
+ exec 5>>config.log
+ {
+   echo
+   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+ ## Running $as_me. ##
+ _ASBOX
+ } >&5
+ cat >&5 <<_CSEOF
+ 
+ This file was extended by GNU Classpath $as_me 0.20-pre, which was
+ generated by GNU Autoconf 2.59.  Invocation command line was
+ 
+   CONFIG_FILES    = $CONFIG_FILES
+   CONFIG_HEADERS  = $CONFIG_HEADERS
+   CONFIG_LINKS    = $CONFIG_LINKS
+   CONFIG_COMMANDS = $CONFIG_COMMANDS
+   $ $0 $@
+ 
+ _CSEOF
+ echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+ echo >&5
+ _ACEOF
+ 
+ # Files that config.status was made for.
+ if test -n "$ac_config_files"; then
+   echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+ fi
+ 
+ if test -n "$ac_config_headers"; then
+   echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+ fi
+ 
+ if test -n "$ac_config_links"; then
+   echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+ fi
+ 
+ if test -n "$ac_config_commands"; then
+   echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+ fi
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ 
+ ac_cs_usage="\
+ \`$as_me' instantiates files from templates according to the
+ current configuration.
+ 
+ Usage: $0 [OPTIONS] [FILE]...
+ 
+   -h, --help       print this help, then exit
+   -V, --version    print version number, then exit
+   -q, --quiet      do not print progress messages
+   -d, --debug      don't remove temporary files
+       --recheck    update $as_me by reconfiguring in the same conditions
+   --file=FILE[:TEMPLATE]
+ 		   instantiate the configuration file FILE
+   --header=FILE[:TEMPLATE]
+ 		   instantiate the configuration header FILE
+ 
+ Configuration files:
+ $config_files
+ 
+ Configuration headers:
+ $config_headers
+ 
+ Configuration links:
+ $config_links
+ 
+ Configuration commands:
+ $config_commands
+ 
+ Report bugs to <bug-autoconf@gnu.org>."
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<_ACEOF
+ ac_cs_version="\\
+ GNU Classpath config.status 0.20-pre
+ configured by $0, generated by GNU Autoconf 2.59,
+   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+ 
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ This config.status script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it."
+ srcdir=$srcdir
+ INSTALL="$INSTALL"
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # If no file are specified by the user, then we need to provide default
+ # value.  By we need to know if files were specified by the user.
+ ac_need_defaults=:
+ while test $# != 0
+ do
+   case $1 in
+   --*=*)
+     ac_option=`expr "x$1" : 'x\([^=]*\)='`
+     ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+     ac_shift=:
+     ;;
+   -*)
+     ac_option=$1
+     ac_optarg=$2
+     ac_shift=shift
+     ;;
+   *) # This is not an option, so the user has probably given explicit
+      # arguments.
+      ac_option=$1
+      ac_need_defaults=false;;
+   esac
+ 
+   case $ac_option in
+   # Handling of the options.
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+     ac_cs_recheck=: ;;
+   --version | --vers* | -V )
+     echo "$ac_cs_version"; exit 0 ;;
+   --he | --h)
+     # Conflict between --help and --header
+     { { echo "$as_me:$LINENO: error: ambiguous option: $1
+ Try \`$0 --help' for more information." >&5
+ echo "$as_me: error: ambiguous option: $1
+ Try \`$0 --help' for more information." >&2;}
+    { (exit 1); exit 1; }; };;
+   --help | --hel | -h )
+     echo "$ac_cs_usage"; exit 0 ;;
+   --debug | --d* | -d )
+     debug=: ;;
+   --file | --fil | --fi | --f )
+     $ac_shift
+     CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+     ac_need_defaults=false;;
+   --header | --heade | --head | --hea )
+     $ac_shift
+     CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+     ac_need_defaults=false;;
+   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+   | -silent | --silent | --silen | --sile | --sil | --si | --s)
+     ac_cs_silent=: ;;
+ 
+   # This is an error.
+   -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+ Try \`$0 --help' for more information." >&5
+ echo "$as_me: error: unrecognized option: $1
+ Try \`$0 --help' for more information." >&2;}
+    { (exit 1); exit 1; }; } ;;
+ 
+   *) ac_config_targets="$ac_config_targets $1" ;;
+ 
+   esac
+   shift
+ done
+ 
+ ac_configure_extra_args=
+ 
+ if $ac_cs_silent; then
+   exec 6>/dev/null
+   ac_configure_extra_args="$ac_configure_extra_args --silent"
+ fi
+ 
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+ if \$ac_cs_recheck; then
+   echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+   exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ fi
+ 
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<_ACEOF
+ #
+ # INIT-COMMANDS section.
+ #
+ 
+ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+ 
+ _ACEOF
+ 
+ 
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ for ac_config_target in $ac_config_targets
+ do
+   case "$ac_config_target" in
+   # Handling of arguments.
+   "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+   "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+   "doc/api/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/api/Makefile" ;;
+   "external/Makefile" ) CONFIG_FILES="$CONFIG_FILES external/Makefile" ;;
+   "external/sax/Makefile" ) CONFIG_FILES="$CONFIG_FILES external/sax/Makefile" ;;
+   "external/w3c_dom/Makefile" ) CONFIG_FILES="$CONFIG_FILES external/w3c_dom/Makefile" ;;
+   "gnu/classpath/Configuration.java" ) CONFIG_FILES="$CONFIG_FILES gnu/classpath/Configuration.java" ;;
+   "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+   "native/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/Makefile" ;;
+   "native/fdlibm/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/fdlibm/Makefile" ;;
+   "native/jawt/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jawt/Makefile" ;;
+   "native/jni/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/Makefile" ;;
+   "native/jni/classpath/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/classpath/Makefile" ;;
+   "native/jni/java-io/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-io/Makefile" ;;
+   "native/jni/java-lang/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-lang/Makefile" ;;
+   "native/jni/java-net/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-net/Makefile" ;;
+   "native/jni/java-nio/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-nio/Makefile" ;;
+   "native/jni/java-util/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-util/Makefile" ;;
+   "native/jni/gtk-peer/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/gtk-peer/Makefile" ;;
+   "native/jni/qt-peer/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/qt-peer/Makefile" ;;
+   "native/jni/xmlj/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/xmlj/Makefile" ;;
+   "native/jni/midi-alsa/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/midi-alsa/Makefile" ;;
+   "native/jni/midi-dssi/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/midi-dssi/Makefile" ;;
+   "native/target/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/target/Makefile" ;;
+   "native/target/Linux/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/target/Linux/Makefile" ;;
+   "native/target/generic/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/target/generic/Makefile" ;;
+   "resource/Makefile" ) CONFIG_FILES="$CONFIG_FILES resource/Makefile" ;;
+   "scripts/Makefile" ) CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
+   "scripts/classpath.spec" ) CONFIG_FILES="$CONFIG_FILES scripts/classpath.spec" ;;
+   "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+   "lib/gen-classlist.sh" ) CONFIG_FILES="$CONFIG_FILES lib/gen-classlist.sh" ;;
+   "lib/copy-vmresources.sh" ) CONFIG_FILES="$CONFIG_FILES lib/copy-vmresources.sh" ;;
+   "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+   "examples/Makefile.jawt" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile.jawt" ;;
+   "$ac_config_links_1" ) CONFIG_LINKS="$CONFIG_LINKS $ac_config_links_1" ;;
+   "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+   "gen-classlist" ) CONFIG_COMMANDS="$CONFIG_COMMANDS gen-classlist" ;;
+   "copy-vmresources" ) CONFIG_COMMANDS="$CONFIG_COMMANDS copy-vmresources" ;;
+   "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
+   *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+ echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+    { (exit 1); exit 1; }; };;
+   esac
+ done
+ 
+ # If the user did not use the arguments to specify the items to instantiate,
+ # then the envvar interface is used.  Set only those that are not.
+ # We use the long form for the default assignment because of an extremely
+ # bizarre bug on SunOS 4.1.3.
+ if $ac_need_defaults; then
+   test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+   test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+   test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
+   test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+ fi
+ 
+ # Have a temporary directory for convenience.  Make it in the build tree
+ # simply because there is no reason to put it here, and in addition,
+ # creating and moving files from /tmp can sometimes cause problems.
+ # Create a temporary directory, and hook for its removal unless debugging.
+ $debug ||
+ {
+   trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+   trap '{ (exit 1); exit 1; }' 1 2 13 15
+ }
+ 
+ # Create a (secure) tmp directory for tmp files.
+ 
+ {
+   tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+   test -n "$tmp" && test -d "$tmp"
+ }  ||
+ {
+   tmp=./confstat$$-$RANDOM
+   (umask 077 && mkdir $tmp)
+ } ||
+ {
+    echo "$me: cannot create a temporary directory in ." >&2
+    { (exit 1); exit 1; }
+ }
+ 
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<_ACEOF
+ 
+ #
+ # CONFIG_FILES section.
+ #
+ 
+ # No need to generate the scripts if there are no CONFIG_FILES.
+ # This happens for instance when ./config.status config.h
+ if test -n "\$CONFIG_FILES"; then
+   # Protect against being on the right side of a sed subst in config.status.
+   sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+    s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+ s,@SHELL@,$SHELL,;t t
+ s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+ s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+ s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+ s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+ s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+ s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+ s,@exec_prefix@,$exec_prefix,;t t
+ s,@prefix@,$prefix,;t t
+ s,@program_transform_name@,$program_transform_name,;t t
+ s,@bindir@,$bindir,;t t
+ s,@sbindir@,$sbindir,;t t
+ s,@libexecdir@,$libexecdir,;t t
+ s,@datadir@,$datadir,;t t
+ s,@sysconfdir@,$sysconfdir,;t t
+ s,@sharedstatedir@,$sharedstatedir,;t t
+ s,@localstatedir@,$localstatedir,;t t
+ s,@libdir@,$libdir,;t t
+ s,@includedir@,$includedir,;t t
+ s,@oldincludedir@,$oldincludedir,;t t
+ s,@infodir@,$infodir,;t t
+ s,@mandir@,$mandir,;t t
+ s,@build_alias@,$build_alias,;t t
+ s,@host_alias@,$host_alias,;t t
+ s,@target_alias@,$target_alias,;t t
+ s,@DEFS@,$DEFS,;t t
+ s,@ECHO_C@,$ECHO_C,;t t
+ s,@ECHO_N@,$ECHO_N,;t t
+ s,@ECHO_T@,$ECHO_T,;t t
+ s,@LIBS@,$LIBS,;t t
+ s,@build@,$build,;t t
+ s,@build_cpu@,$build_cpu,;t t
+ s,@build_vendor@,$build_vendor,;t t
+ s,@build_os@,$build_os,;t t
+ s,@host@,$host,;t t
+ s,@host_cpu@,$host_cpu,;t t
+ s,@host_vendor@,$host_vendor,;t t
+ s,@host_os@,$host_os,;t t
+ s,@target@,$target,;t t
+ s,@target_cpu@,$target_cpu,;t t
+ s,@target_vendor@,$target_vendor,;t t
+ s,@target_os@,$target_os,;t t
+ s,@LIBVERSION@,$LIBVERSION,;t t
+ s,@CLASSPATH_MODULE@,$CLASSPATH_MODULE,;t t
+ s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+ s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+ s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+ s,@CYGPATH_W@,$CYGPATH_W,;t t
+ s,@PACKAGE@,$PACKAGE,;t t
+ s,@VERSION@,$VERSION,;t t
+ s,@ACLOCAL@,$ACLOCAL,;t t
+ s,@AUTOCONF@,$AUTOCONF,;t t
+ s,@AUTOMAKE@,$AUTOMAKE,;t t
+ s,@AUTOHEADER@,$AUTOHEADER,;t t
+ s,@MAKEINFO@,$MAKEINFO,;t t
+ s,@install_sh@,$install_sh,;t t
+ s,@STRIP@,$STRIP,;t t
+ s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+ s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+ s,@mkdir_p@,$mkdir_p,;t t
+ s,@AWK@,$AWK,;t t
+ s,@SET_MAKE@,$SET_MAKE,;t t
+ s,@am__leading_dot@,$am__leading_dot,;t t
+ s,@AMTAR@,$AMTAR,;t t
+ s,@am__tar@,$am__tar,;t t
+ s,@am__untar@,$am__untar,;t t
+ s,@CREATE_JNI_LIBRARIES_TRUE@,$CREATE_JNI_LIBRARIES_TRUE,;t t
+ s,@CREATE_JNI_LIBRARIES_FALSE@,$CREATE_JNI_LIBRARIES_FALSE,;t t
+ s,@CREATE_CORE_JNI_LIBRARIES_TRUE@,$CREATE_CORE_JNI_LIBRARIES_TRUE,;t t
+ s,@CREATE_CORE_JNI_LIBRARIES_FALSE@,$CREATE_CORE_JNI_LIBRARIES_FALSE,;t t
+ s,@default_toolkit@,$default_toolkit,;t t
+ s,@CREATE_XMLJ_LIBRARY_TRUE@,$CREATE_XMLJ_LIBRARY_TRUE,;t t
+ s,@CREATE_XMLJ_LIBRARY_FALSE@,$CREATE_XMLJ_LIBRARY_FALSE,;t t
+ s,@CC@,$CC,;t t
+ s,@CFLAGS@,$CFLAGS,;t t
+ s,@LDFLAGS@,$LDFLAGS,;t t
+ s,@CPPFLAGS@,$CPPFLAGS,;t t
+ s,@ac_ct_CC@,$ac_ct_CC,;t t
+ s,@EXEEXT@,$EXEEXT,;t t
+ s,@OBJEXT@,$OBJEXT,;t t
+ s,@DEPDIR@,$DEPDIR,;t t
+ s,@am__include@,$am__include,;t t
+ s,@am__quote@,$am__quote,;t t
+ s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+ s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+ s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+ s,@CCDEPMODE@,$CCDEPMODE,;t t
+ s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+ s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+ s,@CPP@,$CPP,;t t
+ s,@EGREP@,$EGREP,;t t
+ s,@CREATE_ALSA_LIBRARIES_TRUE@,$CREATE_ALSA_LIBRARIES_TRUE,;t t
+ s,@CREATE_ALSA_LIBRARIES_FALSE@,$CREATE_ALSA_LIBRARIES_FALSE,;t t
+ s,@CREATE_DSSI_LIBRARIES_TRUE@,$CREATE_DSSI_LIBRARIES_TRUE,;t t
+ s,@CREATE_DSSI_LIBRARIES_FALSE@,$CREATE_DSSI_LIBRARIES_FALSE,;t t
+ s,@CREATE_GTK_PEER_LIBRARIES_TRUE@,$CREATE_GTK_PEER_LIBRARIES_TRUE,;t t
+ s,@CREATE_GTK_PEER_LIBRARIES_FALSE@,$CREATE_GTK_PEER_LIBRARIES_FALSE,;t t
+ s,@GTK_CAIRO_ENABLED@,$GTK_CAIRO_ENABLED,;t t
+ s,@GTK_CAIRO_TRUE@,$GTK_CAIRO_TRUE,;t t
+ s,@GTK_CAIRO_FALSE@,$GTK_CAIRO_FALSE,;t t
+ s,@CREATE_QT_PEER_LIBRARIES_TRUE@,$CREATE_QT_PEER_LIBRARIES_TRUE,;t t
+ s,@CREATE_QT_PEER_LIBRARIES_FALSE@,$CREATE_QT_PEER_LIBRARIES_FALSE,;t t
+ s,@nativelibdir@,$nativelibdir,;t t
+ s,@glibjdir@,$glibjdir,;t t
+ s,@CREATE_JNI_HEADERS_TRUE@,$CREATE_JNI_HEADERS_TRUE,;t t
+ s,@CREATE_JNI_HEADERS_FALSE@,$CREATE_JNI_HEADERS_FALSE,;t t
+ s,@LN_S@,$LN_S,;t t
+ s,@RANLIB@,$RANLIB,;t t
+ s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+ s,@LIBTOOL@,$LIBTOOL,;t t
+ s,@CXX@,$CXX,;t t
+ s,@CXXFLAGS@,$CXXFLAGS,;t t
+ s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+ s,@CXXDEPMODE@,$CXXDEPMODE,;t t
+ s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
+ s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
+ s,@CXXCPP@,$CXXCPP,;t t
+ s,@LIBICONV@,$LIBICONV,;t t
+ s,@LTLIBICONV@,$LTLIBICONV,;t t
+ s,@WARNING_CFLAGS@,$WARNING_CFLAGS,;t t
+ s,@STRICT_WARNING_CFLAGS@,$STRICT_WARNING_CFLAGS,;t t
+ s,@ERROR_CFLAGS@,$ERROR_CFLAGS,;t t
+ s,@PKG_CONFIG@,$PKG_CONFIG,;t t
+ s,@XML_CFLAGS@,$XML_CFLAGS,;t t
+ s,@XML_LIBS@,$XML_LIBS,;t t
+ s,@XSLT_CFLAGS@,$XSLT_CFLAGS,;t t
+ s,@XSLT_LIBS@,$XSLT_LIBS,;t t
+ s,@X_CFLAGS@,$X_CFLAGS,;t t
+ s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t
+ s,@X_LIBS@,$X_LIBS,;t t
+ s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
+ s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t
+ s,@GTK_LIBS@,$GTK_LIBS,;t t
+ s,@CAIRO_CFLAGS@,$CAIRO_CFLAGS,;t t
+ s,@CAIRO_LIBS@,$CAIRO_LIBS,;t t
+ s,@PANGOFT2_CFLAGS@,$PANGOFT2_CFLAGS,;t t
+ s,@PANGOFT2_LIBS@,$PANGOFT2_LIBS,;t t
+ s,@QT_CFLAGS@,$QT_CFLAGS,;t t
+ s,@QT_LIBS@,$QT_LIBS,;t t
+ s,@MOC@,$MOC,;t t
+ s,@USER_JAVAH@,$USER_JAVAH,;t t
+ s,@USER_SPECIFIED_JAVAH_TRUE@,$USER_SPECIFIED_JAVAH_TRUE,;t t
+ s,@USER_SPECIFIED_JAVAH_FALSE@,$USER_SPECIFIED_JAVAH_FALSE,;t t
+ s,@CLASSPATH_INCLUDES@,$CLASSPATH_INCLUDES,;t t
+ s,@GCJ@,$GCJ,;t t
+ s,@JIKES@,$JIKES,;t t
+ s,@JIKESENCODING@,$JIKESENCODING,;t t
+ s,@KJC@,$KJC,;t t
+ s,@GCJX@,$GCJX,;t t
+ s,@ECJ@,$ECJ,;t t
+ s,@FOUND_GCJ_TRUE@,$FOUND_GCJ_TRUE,;t t
+ s,@FOUND_GCJ_FALSE@,$FOUND_GCJ_FALSE,;t t
+ s,@FOUND_JIKES_TRUE@,$FOUND_JIKES_TRUE,;t t
+ s,@FOUND_JIKES_FALSE@,$FOUND_JIKES_FALSE,;t t
+ s,@FOUND_ECJ_TRUE@,$FOUND_ECJ_TRUE,;t t
+ s,@FOUND_ECJ_FALSE@,$FOUND_ECJ_FALSE,;t t
+ s,@FOUND_KJC_TRUE@,$FOUND_KJC_TRUE,;t t
+ s,@FOUND_KJC_FALSE@,$FOUND_KJC_FALSE,;t t
+ s,@FOUND_GCJX_TRUE@,$FOUND_GCJX_TRUE,;t t
+ s,@FOUND_GCJX_FALSE@,$FOUND_GCJX_FALSE,;t t
+ s,@USER_CLASSLIB@,$USER_CLASSLIB,;t t
+ s,@USER_SPECIFIED_CLASSLIB_TRUE@,$USER_SPECIFIED_CLASSLIB_TRUE,;t t
+ s,@USER_SPECIFIED_CLASSLIB_FALSE@,$USER_SPECIFIED_CLASSLIB_FALSE,;t t
+ s,@vm_classes@,$vm_classes,;t t
+ s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+ s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+ s,@MAINT@,$MAINT,;t t
+ s,@LIBDEBUG@,$LIBDEBUG,;t t
+ s,@INIT_LOAD_LIBRARY@,$INIT_LOAD_LIBRARY,;t t
+ s,@JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@,$JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION,;t t
+ s,@REMOVE@,$REMOVE,;t t
+ s,@MKDIR@,$MKDIR,;t t
+ s,@CP@,$CP,;t t
+ s,@DATE@,$DATE,;t t
+ s,@FIND@,$FIND,;t t
+ s,@ZIP@,$ZIP,;t t
+ s,@INSTALL_GLIBJ_ZIP_TRUE@,$INSTALL_GLIBJ_ZIP_TRUE,;t t
+ s,@INSTALL_GLIBJ_ZIP_FALSE@,$INSTALL_GLIBJ_ZIP_FALSE,;t t
+ s,@INSTALL_CLASS_FILES_TRUE@,$INSTALL_CLASS_FILES_TRUE,;t t
+ s,@INSTALL_CLASS_FILES_FALSE@,$INSTALL_CLASS_FILES_FALSE,;t t
+ s,@BUILD_CLASS_FILES_TRUE@,$BUILD_CLASS_FILES_TRUE,;t t
+ s,@BUILD_CLASS_FILES_FALSE@,$BUILD_CLASS_FILES_FALSE,;t t
+ s,@EXAMPLESDIR@,$EXAMPLESDIR,;t t
+ s,@GJDOC@,$GJDOC,;t t
+ s,@CREATE_API_DOCS_TRUE@,$CREATE_API_DOCS_TRUE,;t t
+ s,@CREATE_API_DOCS_FALSE@,$CREATE_API_DOCS_FALSE,;t t
+ s,@JAY@,$JAY,;t t
+ s,@JAY_SKELETON@,$JAY_SKELETON,;t t
+ s,@REGEN_PARSERS_TRUE@,$REGEN_PARSERS_TRUE,;t t
+ s,@REGEN_PARSERS_FALSE@,$REGEN_PARSERS_FALSE,;t t
+ s,@LIBOBJS@,$LIBOBJS,;t t
+ s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+ CEOF
+ 
+ _ACEOF
+ 
+   cat >>$CONFIG_STATUS <<\_ACEOF
+   # Split the substitutions into bite-sized pieces for seds with
+   # small command number limits, like on Digital OSF/1 and HP-UX.
+   ac_max_sed_lines=48
+   ac_sed_frag=1 # Number of current file.
+   ac_beg=1 # First line for current file.
+   ac_end=$ac_max_sed_lines # Line after last line for current file.
+   ac_more_lines=:
+   ac_sed_cmds=
+   while $ac_more_lines; do
+     if test $ac_beg -gt 1; then
+       sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+     else
+       sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+     fi
+     if test ! -s $tmp/subs.frag; then
+       ac_more_lines=false
+     else
+       # The purpose of the label and of the branching condition is to
+       # speed up the sed processing (if there are no `@' at all, there
+       # is no need to browse any of the substitutions).
+       # These are the two extra sed commands mentioned above.
+       (echo ':t
+   /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+       if test -z "$ac_sed_cmds"; then
+ 	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+       else
+ 	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+       fi
+       ac_sed_frag=`expr $ac_sed_frag + 1`
+       ac_beg=$ac_end
+       ac_end=`expr $ac_end + $ac_max_sed_lines`
+     fi
+   done
+   if test -z "$ac_sed_cmds"; then
+     ac_sed_cmds=cat
+   fi
+ fi # test -n "$CONFIG_FILES"
+ 
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+   case $ac_file in
+   - | *:- | *:-:* ) # input from stdin
+ 	cat >$tmp/stdin
+ 	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+   * )   ac_file_in=$ac_file.in ;;
+   esac
+ 
+   # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+   ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$ac_file" : 'X\(//\)[^/]' \| \
+ 	 X"$ac_file" : 'X\(//\)$' \| \
+ 	 X"$ac_file" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$ac_file" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+   { if $as_mkdir_p; then
+     mkdir -p "$ac_dir"
+   else
+     as_dir="$ac_dir"
+     as_dirs=
+     while test ! -d "$as_dir"; do
+       as_dirs="$as_dir $as_dirs"
+       as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$as_dir" : 'X\(//\)[^/]' \| \
+ 	 X"$as_dir" : 'X\(//\)$' \| \
+ 	 X"$as_dir" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     done
+     test ! -n "$as_dirs" || mkdir $as_dirs
+   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+    { (exit 1); exit 1; }; }; }
+ 
+   ac_builddir=.
+ 
+ if test "$ac_dir" != .; then
+   ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+   # A "../" for each directory in $ac_dir_suffix.
+   ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+ else
+   ac_dir_suffix= ac_top_builddir=
+ fi
+ 
+ case $srcdir in
+   .)  # No --srcdir option.  We are building in place.
+     ac_srcdir=.
+     if test -z "$ac_top_builddir"; then
+        ac_top_srcdir=.
+     else
+        ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+     fi ;;
+   [\\/]* | ?:[\\/]* )  # Absolute path.
+     ac_srcdir=$srcdir$ac_dir_suffix;
+     ac_top_srcdir=$srcdir ;;
+   *) # Relative path.
+     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+     ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+ 
+ # Do not use `cd foo && pwd` to compute absolute paths, because
+ # the directories may not exist.
+ case `pwd` in
+ .) ac_abs_builddir="$ac_dir";;
+ *)
+   case "$ac_dir" in
+   .) ac_abs_builddir=`pwd`;;
+   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+   *) ac_abs_builddir=`pwd`/"$ac_dir";;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *)
+   case ${ac_top_builddir}. in
+   .) ac_abs_top_builddir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_srcdir=$ac_srcdir;;
+ *)
+   case $ac_srcdir in
+   .) ac_abs_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *)
+   case $ac_top_srcdir in
+   .) ac_abs_top_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+   esac;;
+ esac
+ 
+ 
+   case $INSTALL in
+   [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+   *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+   esac
+ 
+   if test x"$ac_file" != x-; then
+     { echo "$as_me:$LINENO: creating $ac_file" >&5
+ echo "$as_me: creating $ac_file" >&6;}
+     rm -f "$ac_file"
+   fi
+   # Let's still pretend it is `configure' which instantiates (i.e., don't
+   # use $as_me), people would be surprised to read:
+   #    /* config.h.  Generated by config.status.  */
+   if test x"$ac_file" = x-; then
+     configure_input=
+   else
+     configure_input="$ac_file.  "
+   fi
+   configure_input=$configure_input"Generated from `echo $ac_file_in |
+ 				     sed 's,.*/,,'` by configure."
+ 
+   # First look for the input files in the build tree, otherwise in the
+   # src tree.
+   ac_file_inputs=`IFS=:
+     for f in $ac_file_in; do
+       case $f in
+       -) echo $tmp/stdin ;;
+       [\\/$]*)
+ 	 # Absolute (can't be DOS-style, as IFS=:)
+ 	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+    { (exit 1); exit 1; }; }
+ 	 echo "$f";;
+       *) # Relative
+ 	 if test -f "$f"; then
+ 	   # Build tree
+ 	   echo "$f"
+ 	 elif test -f "$srcdir/$f"; then
+ 	   # Source tree
+ 	   echo "$srcdir/$f"
+ 	 else
+ 	   # /dev/null tree
+ 	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+    { (exit 1); exit 1; }; }
+ 	 fi;;
+       esac
+     done` || { (exit 1); exit 1; }
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+   sed "$ac_vpsub
+ $extrasub
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ :t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+ s,@configure_input@,$configure_input,;t t
+ s,@srcdir@,$ac_srcdir,;t t
+ s,@abs_srcdir@,$ac_abs_srcdir,;t t
+ s,@top_srcdir@,$ac_top_srcdir,;t t
+ s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+ s,@builddir@,$ac_builddir,;t t
+ s,@abs_builddir@,$ac_abs_builddir,;t t
+ s,@top_builddir@,$ac_top_builddir,;t t
+ s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+ s,@INSTALL@,$ac_INSTALL,;t t
+ " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+   rm -f $tmp/stdin
+   if test x"$ac_file" != x-; then
+     mv $tmp/out $ac_file
+   else
+     cat $tmp/out
+     rm -f $tmp/out
+   fi
+ 
+ done
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ 
+ #
+ # CONFIG_HEADER section.
+ #
+ 
+ # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+ # NAME is the cpp macro being defined and VALUE is the value it is being given.
+ #
+ # ac_d sets the value in "#define NAME VALUE" lines.
+ ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ ac_dB='[	 ].*$,\1#\2'
+ ac_dC=' '
+ ac_dD=',;t'
+ # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ ac_uB='$,\1#\2define\3'
+ ac_uC=' '
+ ac_uD=',;t'
+ 
+ for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+   case $ac_file in
+   - | *:- | *:-:* ) # input from stdin
+ 	cat >$tmp/stdin
+ 	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+   * )   ac_file_in=$ac_file.in ;;
+   esac
+ 
+   test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+ echo "$as_me: creating $ac_file" >&6;}
+ 
+   # First look for the input files in the build tree, otherwise in the
+   # src tree.
+   ac_file_inputs=`IFS=:
+     for f in $ac_file_in; do
+       case $f in
+       -) echo $tmp/stdin ;;
+       [\\/$]*)
+ 	 # Absolute (can't be DOS-style, as IFS=:)
+ 	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+    { (exit 1); exit 1; }; }
+ 	 # Do quote $f, to prevent DOS paths from being IFS'd.
+ 	 echo "$f";;
+       *) # Relative
+ 	 if test -f "$f"; then
+ 	   # Build tree
+ 	   echo "$f"
+ 	 elif test -f "$srcdir/$f"; then
+ 	   # Source tree
+ 	   echo "$srcdir/$f"
+ 	 else
+ 	   # /dev/null tree
+ 	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+    { (exit 1); exit 1; }; }
+ 	 fi;;
+       esac
+     done` || { (exit 1); exit 1; }
+   # Remove the trailing spaces.
+   sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+ 
+ _ACEOF
+ 
+ # Transform confdefs.h into two sed scripts, `conftest.defines' and
+ # `conftest.undefs', that substitutes the proper values into
+ # config.h.in to produce config.h.  The first handles `#define'
+ # templates, and the second `#undef' templates.
+ # And first: Protect against being on the right side of a sed subst in
+ # config.status.  Protect against being in an unquoted here document
+ # in config.status.
+ rm -f conftest.defines conftest.undefs
+ # Using a here document instead of a string reduces the quoting nightmare.
+ # Putting comments in sed scripts is not portable.
+ #
+ # `end' is used to avoid that the second main sed command (meant for
+ # 0-ary CPP macros) applies to n-ary macro definitions.
+ # See the Autoconf documentation for `clear'.
+ cat >confdef2sed.sed <<\_ACEOF
+ s/[\\&,]/\\&/g
+ s,[\\$`],\\&,g
+ t clear
+ : clear
+ s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+ t end
+ s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+ : end
+ _ACEOF
+ # If some macros were called several times there might be several times
+ # the same #defines, which is useless.  Nevertheless, we may not want to
+ # sort them, since we want the *last* AC-DEFINE to be honored.
+ uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+ sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+ rm -f confdef2sed.sed
+ 
+ # This sed command replaces #undef with comments.  This is necessary, for
+ # example, in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ cat >>conftest.undefs <<\_ACEOF
+ s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+ _ACEOF
+ 
+ # Break up conftest.defines because some shells have a limit on the size
+ # of here documents, and old seds have small limits too (100 cmds).
+ echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+ echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+ echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+ echo '  :' >>$CONFIG_STATUS
+ rm -f conftest.tail
+ while grep . conftest.defines >/dev/null
+ do
+   # Write a limited-size here document to $tmp/defines.sed.
+   echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+   # Speed up: don't consider the non `#define' lines.
+   echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+   # Work around the forget-to-reset-the-flag bug.
+   echo 't clr' >>$CONFIG_STATUS
+   echo ': clr' >>$CONFIG_STATUS
+   sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+   echo 'CEOF
+   sed -f $tmp/defines.sed $tmp/in >$tmp/out
+   rm -f $tmp/in
+   mv $tmp/out $tmp/in
+ ' >>$CONFIG_STATUS
+   sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+   rm -f conftest.defines
+   mv conftest.tail conftest.defines
+ done
+ rm -f conftest.defines
+ echo '  fi # grep' >>$CONFIG_STATUS
+ echo >>$CONFIG_STATUS
+ 
+ # Break up conftest.undefs because some shells have a limit on the size
+ # of here documents, and old seds have small limits too (100 cmds).
+ echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+ rm -f conftest.tail
+ while grep . conftest.undefs >/dev/null
+ do
+   # Write a limited-size here document to $tmp/undefs.sed.
+   echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+   # Speed up: don't consider the non `#undef'
+   echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+   # Work around the forget-to-reset-the-flag bug.
+   echo 't clr' >>$CONFIG_STATUS
+   echo ': clr' >>$CONFIG_STATUS
+   sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+   echo 'CEOF
+   sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+   rm -f $tmp/in
+   mv $tmp/out $tmp/in
+ ' >>$CONFIG_STATUS
+   sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+   rm -f conftest.undefs
+   mv conftest.tail conftest.undefs
+ done
+ rm -f conftest.undefs
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+   # Let's still pretend it is `configure' which instantiates (i.e., don't
+   # use $as_me), people would be surprised to read:
+   #    /* config.h.  Generated by config.status.  */
+   if test x"$ac_file" = x-; then
+     echo "/* Generated by configure.  */" >$tmp/config.h
+   else
+     echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+   fi
+   cat $tmp/in >>$tmp/config.h
+   rm -f $tmp/in
+   if test x"$ac_file" != x-; then
+     if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+       { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+ echo "$as_me: $ac_file is unchanged" >&6;}
+     else
+       ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$ac_file" : 'X\(//\)[^/]' \| \
+ 	 X"$ac_file" : 'X\(//\)$' \| \
+ 	 X"$ac_file" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$ac_file" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+       { if $as_mkdir_p; then
+     mkdir -p "$ac_dir"
+   else
+     as_dir="$ac_dir"
+     as_dirs=
+     while test ! -d "$as_dir"; do
+       as_dirs="$as_dir $as_dirs"
+       as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$as_dir" : 'X\(//\)[^/]' \| \
+ 	 X"$as_dir" : 'X\(//\)$' \| \
+ 	 X"$as_dir" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     done
+     test ! -n "$as_dirs" || mkdir $as_dirs
+   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+    { (exit 1); exit 1; }; }; }
+ 
+       rm -f $ac_file
+       mv $tmp/config.h $ac_file
+     fi
+   else
+     cat $tmp/config.h
+     rm -f $tmp/config.h
+   fi
+ # Compute $ac_file's index in $config_headers.
+ _am_stamp_count=1
+ for _am_header in $config_headers :; do
+   case $_am_header in
+     $ac_file | $ac_file:* )
+       break ;;
+     * )
+       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+   esac
+ done
+ echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+ $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X$ac_file : 'X\(//\)[^/]' \| \
+ 	 X$ac_file : 'X\(//\)$' \| \
+ 	 X$ac_file : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X$ac_file |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ done
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ 
+ #
+ # CONFIG_LINKS section.
+ #
+ 
+ for ac_file in : $CONFIG_LINKS; do test "x$ac_file" = x: && continue
+   ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+   ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ 
+   { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_dest" >&5
+ echo "$as_me: linking $srcdir/$ac_source to $ac_dest" >&6;}
+ 
+   if test ! -r $srcdir/$ac_source; then
+     { { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5
+ echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;}
+    { (exit 1); exit 1; }; }
+   fi
+   rm -f $ac_dest
+ 
+   # Make relative symlinks.
+   ac_dest_dir=`(dirname "$ac_dest") 2>/dev/null ||
+ $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+ 	 X"$ac_dest" : 'X\(//\)$' \| \
+ 	 X"$ac_dest" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$ac_dest" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+   { if $as_mkdir_p; then
+     mkdir -p "$ac_dest_dir"
+   else
+     as_dir="$ac_dest_dir"
+     as_dirs=
+     while test ! -d "$as_dir"; do
+       as_dirs="$as_dir $as_dirs"
+       as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$as_dir" : 'X\(//\)[^/]' \| \
+ 	 X"$as_dir" : 'X\(//\)$' \| \
+ 	 X"$as_dir" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     done
+     test ! -n "$as_dirs" || mkdir $as_dirs
+   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dest_dir\"" >&5
+ echo "$as_me: error: cannot create directory \"$ac_dest_dir\"" >&2;}
+    { (exit 1); exit 1; }; }; }
+ 
+   ac_builddir=.
+ 
+ if test "$ac_dest_dir" != .; then
+   ac_dir_suffix=/`echo "$ac_dest_dir" | sed 's,^\.[\\/],,'`
+   # A "../" for each directory in $ac_dir_suffix.
+   ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+ else
+   ac_dir_suffix= ac_top_builddir=
+ fi
+ 
+ case $srcdir in
+   .)  # No --srcdir option.  We are building in place.
+     ac_srcdir=.
+     if test -z "$ac_top_builddir"; then
+        ac_top_srcdir=.
+     else
+        ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+     fi ;;
+   [\\/]* | ?:[\\/]* )  # Absolute path.
+     ac_srcdir=$srcdir$ac_dir_suffix;
+     ac_top_srcdir=$srcdir ;;
+   *) # Relative path.
+     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+     ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+ 
+ # Do not use `cd foo && pwd` to compute absolute paths, because
+ # the directories may not exist.
+ case `pwd` in
+ .) ac_abs_builddir="$ac_dest_dir";;
+ *)
+   case "$ac_dest_dir" in
+   .) ac_abs_builddir=`pwd`;;
+   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dest_dir";;
+   *) ac_abs_builddir=`pwd`/"$ac_dest_dir";;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *)
+   case ${ac_top_builddir}. in
+   .) ac_abs_top_builddir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_srcdir=$ac_srcdir;;
+ *)
+   case $ac_srcdir in
+   .) ac_abs_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *)
+   case $ac_top_srcdir in
+   .) ac_abs_top_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+   esac;;
+ esac
+ 
+ 
+   case $srcdir in
+   [\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;;
+       *) ac_rel_source=$ac_top_builddir$srcdir/$ac_source ;;
+   esac
+ 
+   # Try a symlink, then a hard link, then a copy.
+   ln -s $ac_rel_source $ac_dest 2>/dev/null ||
+     ln $srcdir/$ac_source $ac_dest 2>/dev/null ||
+     cp -p $srcdir/$ac_source $ac_dest ||
+     { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&5
+ echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&2;}
+    { (exit 1); exit 1; }; }
+ done
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ 
+ #
+ # CONFIG_COMMANDS section.
+ #
+ for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+   ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+   ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+   ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+ $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+ 	 X"$ac_dest" : 'X\(//\)$' \| \
+ 	 X"$ac_dest" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$ac_dest" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+   { if $as_mkdir_p; then
+     mkdir -p "$ac_dir"
+   else
+     as_dir="$ac_dir"
+     as_dirs=
+     while test ! -d "$as_dir"; do
+       as_dirs="$as_dir $as_dirs"
+       as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$as_dir" : 'X\(//\)[^/]' \| \
+ 	 X"$as_dir" : 'X\(//\)$' \| \
+ 	 X"$as_dir" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     done
+     test ! -n "$as_dirs" || mkdir $as_dirs
+   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+    { (exit 1); exit 1; }; }; }
+ 
+   ac_builddir=.
+ 
+ if test "$ac_dir" != .; then
+   ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+   # A "../" for each directory in $ac_dir_suffix.
+   ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+ else
+   ac_dir_suffix= ac_top_builddir=
+ fi
+ 
+ case $srcdir in
+   .)  # No --srcdir option.  We are building in place.
+     ac_srcdir=.
+     if test -z "$ac_top_builddir"; then
+        ac_top_srcdir=.
+     else
+        ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+     fi ;;
+   [\\/]* | ?:[\\/]* )  # Absolute path.
+     ac_srcdir=$srcdir$ac_dir_suffix;
+     ac_top_srcdir=$srcdir ;;
+   *) # Relative path.
+     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+     ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+ 
+ # Do not use `cd foo && pwd` to compute absolute paths, because
+ # the directories may not exist.
+ case `pwd` in
+ .) ac_abs_builddir="$ac_dir";;
+ *)
+   case "$ac_dir" in
+   .) ac_abs_builddir=`pwd`;;
+   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+   *) ac_abs_builddir=`pwd`/"$ac_dir";;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *)
+   case ${ac_top_builddir}. in
+   .) ac_abs_top_builddir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_srcdir=$ac_srcdir;;
+ *)
+   case $ac_srcdir in
+   .) ac_abs_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *)
+   case $ac_top_srcdir in
+   .) ac_abs_top_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+   esac;;
+ esac
+ 
+ 
+   { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+ echo "$as_me: executing $ac_dest commands" >&6;}
+   case $ac_dest in
+     depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+   # Strip MF so we end up with the name of the file.
+   mf=`echo "$mf" | sed -e 's/:.*$//'`
+   # Check whether this is an Automake generated Makefile or not.
+   # We used to match only the files named `Makefile.in', but
+   # some people rename them; so instead we look at the file content.
+   # Grep'ing the first line is not enough: some people post-process
+   # each Makefile.in and add a new line on top of each file to say so.
+   # So let's grep whole file.
+   if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+     dirpart=`(dirname "$mf") 2>/dev/null ||
+ $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$mf" : 'X\(//\)[^/]' \| \
+ 	 X"$mf" : 'X\(//\)$' \| \
+ 	 X"$mf" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$mf" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+   else
+     continue
+   fi
+   # Extract the definition of DEPDIR, am__include, and am__quote
+   # from the Makefile without running `make'.
+   DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+   test -z "$DEPDIR" && continue
+   am__include=`sed -n 's/^am__include = //p' < "$mf"`
+   test -z "am__include" && continue
+   am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+   # When using ansi2knr, U may be empty or an underscore; expand it
+   U=`sed -n 's/^U = //p' < "$mf"`
+   # Find all dependency output files, they are included files with
+   # $(DEPDIR) in their names.  We invoke sed twice because it is the
+   # simplest approach to changing $(DEPDIR) to its actual value in the
+   # expansion.
+   for file in `sed -n "
+     s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+     # Make sure the directory exists.
+     test -f "$dirpart/$file" && continue
+     fdir=`(dirname "$file") 2>/dev/null ||
+ $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$file" : 'X\(//\)[^/]' \| \
+ 	 X"$file" : 'X\(//\)$' \| \
+ 	 X"$file" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$file" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     { if $as_mkdir_p; then
+     mkdir -p $dirpart/$fdir
+   else
+     as_dir=$dirpart/$fdir
+     as_dirs=
+     while test ! -d "$as_dir"; do
+       as_dirs="$as_dir $as_dirs"
+       as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$as_dir" : 'X\(//\)[^/]' \| \
+ 	 X"$as_dir" : 'X\(//\)$' \| \
+ 	 X"$as_dir" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     done
+     test ! -n "$as_dirs" || mkdir $as_dirs
+   fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+ echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+    { (exit 1); exit 1; }; }; }
+ 
+     # echo "creating $dirpart/$file"
+     echo '# dummy' > "$dirpart/$file"
+   done
+ done
+  ;;
+     gen-classlist ) chmod 755 lib/gen-classlist.sh ;;
+     copy-vmresources ) chmod 755 lib/copy-vmresources.sh ;;
+   esac
+ done
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ 
+ { (exit 0); exit 0; }
+ _ACEOF
+ chmod +x $CONFIG_STATUS
+ ac_clean_files=$ac_clean_files_save
+ 
+ 
+ # configure is writing to config.log, and then calls config.status.
+ # config.status does its own redirection, appending to config.log.
+ # Unfortunately, on DOS this fails, as config.log is still kept open
+ # by configure, so config.status won't be able to write to it; its
+ # output is simply discarded.  So we exec the FD to /dev/null,
+ # effectively closing config.log, so it can be properly (re)opened and
+ # appended to by config.status.  When coming back to configure, we
+ # need to make the FD available again.
+ if test "$no_create" != yes; then
+   ac_cs_success=:
+   ac_config_status_args=
+   test "$silent" = yes &&
+     ac_config_status_args="$ac_config_status_args --quiet"
+   exec 5>/dev/null
+   $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+   exec 5>>config.log
+   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+   # would make configure fail if this is the last instruction.
+   $ac_cs_success || { (exit 1); exit 1; }
+ fi
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/configure.ac gcc-4.1.0/libjava/classpath/configure.ac
*** gcc-4.0.2/libjava/classpath/configure.ac	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/configure.ac	Thu Dec  1 20:09:06 2005
***************
*** 0 ****
--- 1,602 ----
+ dnl Process this file with autoconf to produce a configure script.
+ 
+ dnl -----------------------------------------------------------
+ dnl Turning off cache for debug reasons
+ dnl -----------------------------------------------------------
+ dnl define([AC_CACHE_LOAD], )dnl
+ dnl define([AC_CACHE_SAVE], )dnl
+ 
+ AC_INIT([GNU Classpath],[0.20-pre],[classpath@gnu.org],[classpath])
+ AC_CONFIG_SRCDIR(java/lang/System.java)
+ 
+ AC_CANONICAL_TARGET
+ 
+ dnl -----------------------------------------------------------
+ dnl Fold all IA-32 CPU architectures into "x86"
+ dnl -----------------------------------------------------------
+ if expr ${target_cpu} : '.*86' > /dev/null; then target_cpu=x86; fi
+ 
+ dnl -----------------------------------------------------------
+ dnl We will not track/change lib version until we reach version 1.0
+ dnl at which time we'll have to be more anal about such things
+ dnl -----------------------------------------------------------
+ AC_SUBST(LIBVERSION, "0:0:0")
+ case "$host_os" in
+      darwin*)
+ 	cp_module=""
+ 	;;
+ 	*)
+ 	cp_module="-module"
+ 	;;
+ esac
+ 
+ CLASSPATH_MODULE="${cp_module} -version-info ${LIBVERSION} -no-undefined"
+ AC_SUBST(CLASSPATH_MODULE)
+ 
+ AC_PREREQ(2.59)
+ AM_INIT_AUTOMAKE([1.9.0 gnu std-options tar-ustar])
+ AC_CONFIG_HEADERS([include/config.h])
+ AC_PREFIX_DEFAULT(/usr/local/classpath)
+ 
+ dnl -----------------------------------------------------------
+ dnl Enable JNI libraries (enabled by default)
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([jni],
+               [AS_HELP_STRING(--enable-jni,compile JNI source [default=yes])],
+               [case "${enableval}" in 
+                 yes) COMPILE_JNI=yes; COMPILE_JAVA=yes ;;
+                 no) COMPILE_JNI=no ;;
+                 *) COMPILE_JNI=yes; COMPILE_JAVA=yes ;;
+               esac],
+               [COMPILE_JNI=yes])
+ AM_CONDITIONAL(CREATE_JNI_LIBRARIES, test "x${COMPILE_JNI}" = xyes)
+ 
+ dnl -----------------------------------------------------------
+ dnl Enable core JNI libraries (enabled by default)
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([core-jni],
+               [AS_HELP_STRING(--enable-core-jni,
+ 	                      compile JNI sources for core [default=yes])],
+               [case "${enableval}" in 
+                 yes) COMPILE_CORE_JNI=yes; COMPILE_JAVA=yes ;;
+                 no) COMPILE_CORE_JNI=no ;;
+                 *) COMPILE_CORE_JNI=yes; COMPILE_JAVA=yes ;;
+               esac],
+               [COMPILE_CORE_JNI=yes])
+ AM_CONDITIONAL(CREATE_CORE_JNI_LIBRARIES, test "x${COMPILE_CORE_JNI}" = xyes)
+ 
+ dnl ------------------------------------------------------------
+ dnl Whether to compile with -Werror or not (disabled by default)
+ dnl ------------------------------------------------------------
+ AC_ARG_ENABLE([Werror],
+               [AS_HELP_STRING(--enable-Werror,whether to compile C code with -Werror which turns any compiler warning into a compilation failure [default=no])],
+               [case "${enableval}" in
+                 yes) ENABLE_WERROR=yes ;;
+                 no) ENABLE_WERROR=no ;;
+                 *) ENABLE_WERROR=no ;;
+               esac],
+               [ENABLE_WERROR=no])
+ 
+ dnl -----------------------------------------------------------
+ dnl Default AWT toolkit
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE(default-toolkit,
+   AS_HELP_STRING([--enable-default-toolkit],
+                  [fully qualified class name of default AWT toolkit]))
+ default_toolkit=$enable_default_toolkit
+ if test "$default_toolkit" = ""; then
+    default_toolkit=gnu.java.awt.peer.gtk.GtkToolkit
+ fi
+ AC_SUBST(default_toolkit)
+ 
+ dnl -----------------------------------------------------------
+ dnl Native libxml/xslt library (disabled by default)
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([xmlj],
+               [AS_HELP_STRING(--enable-xmlj,compile native libxml/xslt library [default=no])],
+               [case "${enableval}" in
+                 yes) COMPILE_XMLJ=yes ;;
+                 no) COMPILE_XMLJ=no ;;
+                 *) COMPILE_XMLJ=no ;;
+               esac],
+               [COMPILE_XMLJ=no])
+ AM_CONDITIONAL(CREATE_XMLJ_LIBRARY, test "x${COMPILE_XMLJ}" = xyes)
+ 
+ dnl -----------------------------------------------------------
+ dnl ALSA code (enabled by default)
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([alsa],
+               [AS_HELP_STRING(--disable-alsa,compile ALSA providers (enable by --enable-alsa) [default=yes])],
+               [case "${enableval}" in
+                 yes) COMPILE_ALSA=yes ;;
+                 no) COMPILE_ALSA=no ;;
+                 *) COMPILE_ALSA=yes ;;
+               esac],
+ 	      [AC_CHECK_HEADERS([alsa/asoundlib.h],
+ 				[AC_CHECK_LIB([asound], [snd_seq_open], COMPILE_ALSA=yes,COMPILE_ALSA=no)],
+ 				COMPILE_ALSA=no)])
+ AM_CONDITIONAL(CREATE_ALSA_LIBRARIES, test "x${COMPILE_ALSA}" = xyes)
+ 
+ dnl -----------------------------------------------------------
+ dnl DSSI code (enabled by default)
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([dssi],
+               [AS_HELP_STRING(--disable-dssi,compile DSSI providers (enable by --enable-dssi) [default=yes])],
+               [case "${enableval}" in
+                 yes) COMPILE_DSSI=yes ;;
+                 no) COMPILE_DSSI=no ;;
+                 *) COMPILE_DSSI=yes ;;
+               esac],
+               [AC_CHECK_HEADERS([dssi.h],COMPILE_DSSI=yes,COMPILE_DSSI=no)])
+ AM_CONDITIONAL(CREATE_DSSI_LIBRARIES, test "x${COMPILE_DSSI}" = xyes)
+ 
+ dnl -----------------------------------------------------------
+ dnl GTK native peer (enabled by default)
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([gtk-peer],
+               [AS_HELP_STRING(--disable-gtk-peer,compile GTK native peers (disabled by --disable-jni) [default=yes])],
+               [case "${enableval}" in
+                 yes) COMPILE_GTK_PEER=yes ;;
+                 no) COMPILE_GTK_PEER=no ;;
+                 *) COMPILE_GTK_PEER=yes ;;
+               esac],
+               [COMPILE_GTK_PEER=yes])
+ AM_CONDITIONAL(CREATE_GTK_PEER_LIBRARIES, test "x${COMPILE_GTK_PEER}" = xyes)
+ 
+ dnl -----------------------------------------------------------
+ dnl GTK native peer error checking 
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([gtk-peers],,AC_MSG_ERROR([No --enable-gtk-peers (or --disable-gtk-peers) option; you want --enable-gtk-peer]))
+ 
+ dnl ------------------------------------------------------------
+ dnl determine whether to enable the cairo GTK Graphics2D backend
+ dnl ------------------------------------------------------------
+ AC_ARG_ENABLE([gtk-cairo],
+               [AS_HELP_STRING(--enable-gtk-cairo,build the cairo Graphics2D implementation on GTK [default=no])],
+               [case "${enableval}" in
+                 yes) GTK_CAIRO_ENABLED=true ;;
+                 no) GTK_CAIRO_ENABLED=false ;;
+                 *) GTK_CAIRO_ENABLED=true ;;
+               esac],
+               [GTK_CAIRO_ENABLED=false])
+ AC_SUBST(GTK_CAIRO_ENABLED)
+ if test "x${GTK_CAIRO_ENABLED}" = xtrue; then
+   AC_DEFINE(GTK_CAIRO, 1, [defined if cairo support was built in])
+ fi
+ AM_CONDITIONAL(GTK_CAIRO, test "x${GTK_CAIRO_ENABLED}" = xtrue)
+ 
+ dnl -----------------------------------------------------------
+ dnl Qt native peer (disabled by default)
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([qt-peer],
+               [AS_HELP_STRING(--enable-qt-peer,compile Qt4 native peers (disabled by --disable-jni) [default=no])],
+               [case "${enableval}" in
+                 yes) COMPILE_QT_PEER=yes ;;
+                 no) COMPILE_QT_PEER=no ;;
+                 *) COMPILE_QT_PEER=yes ;;
+               esac],
+               [COMPILE_QT_PEER=no])
+ AM_CONDITIONAL(CREATE_QT_PEER_LIBRARIES, test "x${COMPILE_QT_PEER}" = xyes)
+ 
+ 
+ dnl -----------------------------------------------------------
+ dnl Sets the native libraries installation dir
+ dnl -----------------------------------------------------------
+ AC_ARG_WITH([native-libdir],
+ 	    [AS_HELP_STRING(--with-native-libdir,sets the installation directore for native libraries [default='${libdir}/${PACKAGE}'])],
+ 	    [
+ 	     nativelibdir=${withval}
+ 	    ],
+ 	    [
+ 	     nativelibdir='${libdir}/${PACKAGE}'
+ 	    ])
+ 
+ AC_SUBST(nativelibdir)
+ 
+ dnl -----------------------------------------------------------
+ dnl Sets the Java library installation dir.
+ dnl -----------------------------------------------------------
+ AC_ARG_WITH([glibj-dir],
+ 	    [AS_HELP_STRING(--with-glibj-dir,sets the installation directory for glibj.zip [default='${libdir}/${PACKAGE}'])],
+ 	    [
+ 	     glibjdir=${withval}
+ 	    ],
+ 	    [
+ 	     glibjdir='${datadir}/${PACKAGE}'
+ 	    ])
+ 
+ AC_SUBST(glibjdir)
+ 
+ dnl -----------------------------------------------------------
+ dnl Regenerate headers at build time (disabled by default)
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([regen-headers],
+               [AS_HELP_STRING(--enable-regen-headers,automatically regenerate JNI headers [default=no])],
+               [case "${enableval}" in
+                 yes) REGENERATE_JNI_HEADERS=yes ;;
+                 no) REGENERATE_JNI_HEADERS=no ;;
+                 *) REGENERATE_JNI_HEADERS=no ;;
+               esac],
+               [REGENERATE_JNI_HEADERS=no])
+ AM_CONDITIONAL(CREATE_JNI_HEADERS, test "x${REGENERATE_JNI_HEADERS}" = xyes)
+ 
+ AC_PROG_LN_S
+ AC_PROG_INSTALL
+ 
+ dnl -----------------------------------------------------------
+ dnl Checks for programs.
+ dnl -----------------------------------------------------------
+ 
+ dnl GCC LOCAL
+ GCC_NO_EXECUTABLES
+ 
+ dnl Initialize libtool
+ AC_DISABLE_STATIC
+ AC_PROG_LIBTOOL
+ dnl AC_PROG_AWK
+ AC_PROG_CC
+ AC_PROG_CPP
+ AC_PROG_CXX
+ 
+ if test "x${COMPILE_JNI}" = xyes; then
+   AC_HEADER_STDC
+ 
+   dnl Checking sizeof void * is needed for fdlibm to work properly on ppc64, 
+   dnl at least. 
+   AC_COMPILE_CHECK_SIZEOF(void *)
+ 
+   dnl Checking for endianess.
+   AC_C_BIGENDIAN_CROSS
+   
+   dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
+   dnl On that system, sys/ioctl.h will not include sys/filio.h unless
+   dnl BSD_COMP is defined; just including sys/filio.h is simpler.
+   dnl Check for crt_externs.h on Darwin.
+   AC_CHECK_HEADERS([unistd.h sys/types.h sys/config.h sys/ioctl.h \
+ 		    asm/ioctls.h \
+ 		    inttypes.h stdint.h utime.h sys/utime.h sys/filio.h \
+ 		    sys/time.h \
+ 		    sys/select.h \
+ 		    crt_externs.h \
+                     fcntl.h \
+ 		    sys/mman.h])
+ 
+   AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED, 1, [Define to 1 if you have uint32_t]))
+   AC_EGREP_HEADER(uint32_t, inttypes.h, AC_DEFINE(HAVE_INT32_DEFINED, 1, [Define to 1 if you have uint32_t]))
+   AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1, [Define to 1 if you have BSD u_int32_t]))
+   AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1, [Define to 1 if you have BSD u_int32_t]))
+ 
+   AC_CHECK_FUNCS([ftruncate fsync select \
+ 		  gethostname socket strerror fork pipe execve open close \
+ 		  lseek fstat read write htonl memset htons connect \
+ 		  getsockname getpeername bind listen accept \
+ 		  recvfrom send sendto setsockopt getsockopt time mktime \
+ 		  localtime_r \
+ 		  strerror_r \
+                   fcntl \
+ 		  mmap munmap mincore msync madvise getpagesize sysconf])
+ 
+   AC_HEADER_TIME
+   AC_STRUCT_TM
+   AC_STRUCT_TIMEZONE
+ 
+   AC_MSG_CHECKING([for tm_gmtoff in struct tm])
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]],[[struct tm tim; tim.tm_gmtoff = 0;]])],
+   [AC_DEFINE(STRUCT_TM_HAS_GMTOFF, 1, [Define if struct tm has tm_gmtoff field.])
+    AC_MSG_RESULT(yes)],
+   [AC_MSG_RESULT(no)
+    AC_MSG_CHECKING([for global timezone variable])
+    dnl FIXME: we don't want a link check here because that won't work
+    dnl when cross-compiling.  So instead we make an assumption that
+    dnl the header file will mention timezone if it exists.
+    dnl Don't find the win32 function timezone
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[void i(){long z2 = 2*timezone;}]])],
+      [AC_DEFINE(HAVE_TIMEZONE, 1, [Define if global 'timezone' exists.])
+       AC_MSG_RESULT(yes)],
+      [AC_MSG_RESULT(no)
+        AC_MSG_CHECKING([for global _timezone variable])
+        dnl FIXME: As above, don't want link check
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[long z2 = _timezone;]])],
+          [AC_DEFINE(HAVE_UNDERSCORE_TIMEZONE, 1,
+             [Define if your platform has the global _timezone variable.])
+           AC_MSG_RESULT(yes)],
+           [AC_MSG_RESULT(no)])])])
+ 
+   AC_C_CONST
+   AC_C_ATTRIBUTE
+ 
+   dnl See if we HAVE_ICONV, how ICONV_CONST is set and LTLIBICONV
+   AM_ICONV
+ 
+   dnl When using gcc we want warnings, lots of warnings :-)
+   if test "x${GCC}" = xyes; then
+     dnl We want ISO C90 pedantic ansi, but with longlong (jlong) support
+     dnl and modern POSIX and BSD C library functions/prototypes.
+ 
+     dnl Warning flags for (almost) everybody.
+     dnl Should probably be configurable
+     WARNING_CFLAGS='-pedantic -W -Wall -Wmissing-declarations -Wwrite-strings -Wmissing-prototypes -Wno-long-long'
+     AC_SUBST(WARNING_CFLAGS)
+ 
+     dnl Strict warning flags which not every module uses.
+     dnl Should probably be configurable.
+     STRICT_WARNING_CFLAGS=-Wstrict-prototypes
+     AC_SUBST(STRICT_WARNING_CFLAGS)
+ 
+     dnl Whether or not to add -Werror, also not used by all modueles.
+     dnl Can be configured by --disable-Werror
+     ERROR_CFLAGS=
+     if test "x${ENABLE_WERROR}" = xyes; then
+        ERROR_CFLAGS='-Werror'
+     fi
+     AC_SUBST(ERROR_CFLAGS)
+   fi
+ 
+   dnl Check for libxml and libxslt libraries (when xmlj is enabled).
+   if test "x${COMPILE_XMLJ}" = xyes; then
+     PKG_CHECK_MODULES(XML, libxml-2.0 >= 2.6.8)
+     PKG_CHECK_MODULES(XSLT, libxslt >= 1.1.11)
+     AC_SUBST(XML_LIBS)
+     AC_SUBST(XML_CFLAGS)
+     AC_SUBST(XSLT_LIBS)
+     AC_SUBST(XSLT_CFLAGS)
+   fi
+ 
+   dnl Check for AWT related gthread/gtk
+   if test "x${COMPILE_GTK_PEER}" = xyes; then
+     AC_PATH_XTRA
+     if test "$no_x" = yes; then
+         AC_MSG_ERROR([GTK+ peers requested but no X library available])
+     fi
+     dnl We explicitly want the XTest Extension for Robot support.
+     AC_CHECK_LIB([Xtst], [XTestQueryExtension], [true],
+        	  [AC_MSG_ERROR([libXtst NOT found, required for GdkRobot])],
+        	  [${X_LIBS}])
+     PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0)
+ 
+     if test "x${enable_gtk_cairo}" = xyes; then
+       PKG_CHECK_MODULES(CAIRO, cairo >= 0.5.0)
+     fi
+ 
+     PKG_CHECK_MODULES(PANGOFT2, pangoft2)
+   
+     AC_SUBST(GTK_CFLAGS)
+     AC_SUBST(GTK_LIBS)
+     AC_SUBST(CAIRO_LIBS)
+     AC_SUBST(CAIRO_CFLAGS)
+     AC_SUBST(PANGOFT2_LIBS)
+     AC_SUBST(PANGOFT2_CFLAGS)
+   fi
+ 
+   dnl Check for AWT related Qt4
+   if test "x${COMPILE_QT_PEER}" = xyes; then
+     PKG_CHECK_MODULES(QT, QtGui >= 4.0.1, HAVE_QT4="yes", HAVE_QT4="no")
+     if test "x$HAVE_QT4" = "xyes"; then
+       dnl Check needed because in some cases the QtGui includedir
+       dnl doesn't contain the subsystem dir.
+       QT_INCLUDE_DIR=$($PKG_CONFIG --variable=includedir QtGui)
+       EXTRA_QT_INCLUDE_DIR="$QT_INCLUDE_DIR/Qt"
+       AC_CHECK_FILE([$QT_INCLUDE_DIR/QWidget],
+       AC_MSG_NOTICE([No extra QT_INCLUDE_DIR needed]),
+       AC_CHECK_FILE([$EXTRA_QT_INCLUDE_DIR/QWidget],
+ 	QT_CFLAGS="$QT_CFLAGS -I$EXTRA_QT_INCLUDE_DIR",
+ 	AC_MSG_WARN([QWidget not found])))
+ 	AC_CHECK_PROG(MOC, [moc], [moc])
+     fi
+     if test "x$HAVE_QT4" = "xno"; then
+       AC_MSG_NOTICE([Looking for QT_CFLAGS and QT_LIBS without pkg-config])
+       case "$host_os" in
+   	darwin*)
+   	  AC_ARG_WITH([qt4dir],
+   	    [AS_HELP_STRING([--with-qt4dir=DIR],
+   	    [Qt4 installation directory used for OS-X.
+   	    For other systems use pkg-config.])],
+   	    [QT4DIR=$withval]
+   	    )
+   	  if test x"$QT4DIR" = x ; then
+   	    AC_MSG_ERROR([*** No path for Qt4 --with-qt4dir option given])
+   	  fi
+   	  AC_MSG_RESULT([QT4DIR... $QT4DIR])
+   	  AC_CHECK_PROG(MOC, [moc], [$QT4DIR/bin/moc], [], $QT4DIR/bin)
+   	  if test x"$MOC" = x; then
+   	    AC_MSG_ERROR([*** This is not the right Qt installation])
+   	  fi
+   	  QT_CFLAGS="-F$QT4DIR/lib -I$QT4DIR/lib/QtCore.framework/Headers"
+   	  QT_CFLAGS="$QT_CFLAGS -I$QT4DIR/lib/QtGui.framework/Headers"
+   	  QT_LIBS="-Xlinker -F$QT4DIR/lib -Xlinker -framework -Xlinker QtCore"
+   	  QT_LIBS="$QT_LIBS -Xlinker -framework -Xlinker QtGui"
+   	  ;;
+   	*)
+   	  AC_MSG_ERROR([*** Please check PKG_CONFIG_PATH or the version
+   	  of your installed Qt4 installation.])
+   	  ;;
+       esac
+     fi
+     AC_MSG_NOTICE([Set QT_CFLAGS... $QT_CFLAGS])
+     AC_SUBST(QT_CFLAGS)
+     AC_SUBST(QT_LIBS)
+   fi
+ fi
+ 
+ CLASSPATH_WITH_JAVAH
+ 
+ dnl ----------------------------------------------------------- 
+ dnl Add the include files for the native abstraction layer.
+ dnl Used by AM_CPPFLAGS in the different modules.
+ dnl -----------------------------------------------------------
+ CLASSPATH_INCLUDES="-I\$(top_srcdir)/include -I\$(top_srcdir)/native/jni/classpath -I\$(top_srcdir)/native/target/Linux -I\$(top_srcdir)/native/target/generic"
+ AC_SUBST(CLASSPATH_INCLUDES)
+ 
+ dnl -----------------------------------------------------------
+ if test "x${COMPILE_JNI}" = xyes; then
+   AC_MSG_CHECKING(jni_md.h support)
+   if test -f ${srcdir}/include/jni_md-${target_cpu}-${target_os}.h; then
+     AC_MSG_RESULT(yes)
+   else
+     target_cpu=x86
+     target_os=linux-gnu 
+     AC_MSG_WARN(no, using x86-linux-gnu)
+   fi
+   ac_sources="include/jni_md-${target_cpu}-${target_os}.h"
+   ac_dests="include/jni_md.h"
+   while test -n "$ac_sources"; do
+     set $ac_dests; ac_dest=$1; shift; ac_dests=$*
+     set $ac_sources; ac_source=$1; shift; ac_sources=$*
+     ac_config_links_1="$ac_config_links_1 $ac_dest:$ac_source"
+   done
+   AC_CONFIG_LINKS([$ac_config_links_1])
+ fi
+ 
+ CLASSPATH_FIND_JAVAC
+ 
+ CLASSPATH_WITH_CLASSLIB
+ 
+ dnl -----------------------------------------------------------
+ dnl Initialize maintainer mode
+ dnl -----------------------------------------------------------
+ AM_MAINTAINER_MODE
+ 
+ dnl -----------------------------------------------------------
+ dnl Enable debugging statements at compile time.  By default
+ dnl these statements should be optimized out of the bytecode
+ dnl produced by an optimizing Java compiler and not hinder 
+ dnl performance because debugging is turned off by default.
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([debug],
+               [AS_HELP_STRING(--enable-debug,enable runtime debugging code)],
+               [case "${enableval}" in 
+                 yes) 
+               	LIBDEBUG="true"
+                 AC_DEFINE(DEBUG, 1, [Define to 1 if you want native library runtime debugging code enabled]) 
+               	;;
+                 no)   LIBDEBUG="false" ;;
+                 *) 	AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
+               esac],
+               [LIBDEBUG="false"])
+ AC_SUBST(LIBDEBUG)
+ 
+ dnl -----------------------------------------------------------
+ dnl Enable execution of all static initializer loadLibrary() 
+ dnl calls at compile time.  By default most people will not
+ dnl want to disable this, but some VMs (gcj) don't need or want 
+ dnl them.
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([load-library],
+               [AS_HELP_STRING(--enable-load-library,enable to use JNI native methods [default=yes])],
+               [case "${enableval}" in 
+                 yes) INIT_LOAD_LIBRARY="true" ;;
+                 no) INIT_LOAD_LIBRARY="false" ;;
+                 *) AC_MSG_ERROR(bad value ${enableval} for --enable-load-library) ;;
+               esac],
+               [INIT_LOAD_LIBRARY="true"])
+ AC_SUBST(INIT_LOAD_LIBRARY)
+ 
+ 
+ dnl -----------------------------------------------------------
+ dnl Should the VM explicitly run class initialization subfunctions for
+ dnl java.lang.System?   (default is false -- the subfunctions will be run 
+ dnl automatically by the class initializer)
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([java-lang-system-explicit-initialization],
+               [AS_HELP_STRING(--enable-java-lang-system-explicit-initialization,will the VM explicitly invoke java.lang.System's static initialization methods [default=no])],
+               [case "${enableval}" in 
+                 yes|true) JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="true" ;;
+                 no|false) JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="false" ;;
+                 *) AC_MSG_ERROR(bad value ${enableval} for --enable-java-lang-system-explicit-initialization) ;;
+               esac],
+               [JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="false"])
+ AC_SUBST(JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION)
+ 
+ 
+ dnl -----------------------------------------------------------
+ dnl avoiding automake complaints
+ dnl -----------------------------------------------------------
+ REMOVE=""
+ AC_SUBST(REMOVE)
+ 
+ dnl -----------------------------------------------------------
+ dnl This is probably useless.
+ dnl -----------------------------------------------------------
+ AC_PATH_PROG(MKDIR, mkdir)
+ AC_PATH_PROG(CP, cp)
+ AC_PATH_PROG(DATE, date)
+ 
+ dnl -----------------------------------------------------------
+ dnl According to the GNU coding guide, we shouldn't require find, 
+ dnl and zip, however GNU provides both so it should be okay 
+ dnl -----------------------------------------------------------
+ AC_PATH_PROG(FIND, find)
+ 
+ dnl -----------------------------------------------------------
+ dnl Specify what to install (install only glibj.zip by default)
+ dnl -----------------------------------------------------------
+ CLASSPATH_WITH_GLIBJ
+ 
+ dnl -----------------------------------------------------------
+ dnl Enable API documentation generation (disabled by default)
+ dnl -----------------------------------------------------------
+ CLASSPATH_WITH_GJDOC
+ 
+ dnl -----------------------------------------------------------
+ dnl Whether to use jay to regenerate parsers.
+ dnl -----------------------------------------------------------
+ REGEN_WITH_JAY
+ 
+ dnl -----------------------------------------------------------
+ dnl This sets the build-time default, which can now be overridden 
+ dnl by setting the system property gnu.classpath.awt.gtk.portable.native.sync
+ dnl to "true" or "false".
+ dnl -----------------------------------------------------------
+ AC_ARG_ENABLE([portable-native-sync],
+               [AS_HELP_STRING(--enable-portable-native-sync,synchronize VM threads portably)],
+               [case "${enableval}" in 
+                 yes) 
+                      AC_DEFINE(PORTABLE_NATIVE_SYNC, 1, [Define if you want to synchronize VM threads portably by default; undef otherwise])
+                      ;;
+                 no)  ;;
+                 *)   
+                      AC_MSG_ERROR(bad value ${enableval} for --enable-portable-native-sync) 
+                      ;;
+               esac],
+               [])
+ 
+ dnl -----------------------------------------------------------
+ dnl output files
+ dnl -----------------------------------------------------------
+ AC_CONFIG_FILES([Makefile
+ doc/Makefile
+ doc/api/Makefile
+ external/Makefile
+ external/sax/Makefile
+ external/w3c_dom/Makefile
+ gnu/classpath/Configuration.java
+ include/Makefile
+ native/Makefile
+ native/fdlibm/Makefile
+ native/jawt/Makefile
+ native/jni/Makefile
+ native/jni/classpath/Makefile
+ native/jni/java-io/Makefile
+ native/jni/java-lang/Makefile
+ native/jni/java-net/Makefile
+ native/jni/java-nio/Makefile
+ native/jni/java-util/Makefile
+ native/jni/gtk-peer/Makefile
+ native/jni/qt-peer/Makefile
+ native/jni/xmlj/Makefile
+ native/jni/midi-alsa/Makefile
+ native/jni/midi-dssi/Makefile
+ native/target/Makefile
+ native/target/Linux/Makefile
+ native/target/generic/Makefile
+ resource/Makefile
+ scripts/Makefile
+ scripts/classpath.spec
+ lib/Makefile
+ lib/gen-classlist.sh
+ lib/copy-vmresources.sh
+ examples/Makefile
+ examples/Makefile.jawt])
+ AC_CONFIG_COMMANDS([gen-classlist],[chmod 755 lib/gen-classlist.sh])
+ AC_CONFIG_COMMANDS([copy-vmresources],[chmod 755 lib/copy-vmresources.sh])
+ AC_OUTPUT
diff -Nrcpad gcc-4.0.2/libjava/classpath/depcomp gcc-4.1.0/libjava/classpath/depcomp
*** gcc-4.0.2/libjava/classpath/depcomp	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/depcomp	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,423 ----
+ #! /bin/sh
+ 
+ # depcomp - compile a program generating dependencies as side-effects
+ # Copyright 1999, 2000 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program 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 General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ # 02110-1301, USA.
+ 
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+ 
+ # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+ 
+ if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+   echo "depcomp: Variables source, object and depmode must be set" 1>&2
+   exit 1
+ fi
+ # `libtool' can also be set to `yes' or `no'.
+ 
+ if test -z "$depfile"; then
+    base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+    dir=`echo "$object" | sed 's,/.*$,/,'`
+    if test "$dir" = "$object"; then
+       dir=
+    fi
+    # FIXME: should be _deps on DOS.
+    depfile="$dir.deps/$base"
+ fi
+ 
+ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+ 
+ rm -f "$tmpdepfile"
+ 
+ # Some modes work just like other modes, but use different flags.  We
+ # parameterize here, but still list the modes in the big case below,
+ # to make depend.m4 easier to write.  Note that we *cannot* use a case
+ # here, because this file can only contain one case statement.
+ if test "$depmode" = hp; then
+   # HP compiler uses -M and no extra arg.
+   gccflag=-M
+   depmode=gcc
+ fi
+ 
+ if test "$depmode" = dashXmstdout; then
+    # This is just like dashmstdout with a different argument.
+    dashmflag=-xM
+    depmode=dashmstdout
+ fi
+ 
+ case "$depmode" in
+ gcc3)
+ ## gcc 3 implements dependency tracking that does exactly what
+ ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+ ## it if -MD -MP comes after the -MF stuff.  Hmm.
+   "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   mv "$tmpdepfile" "$depfile"
+   ;;
+ 
+ gcc)
+ ## There are various ways to get dependency output from gcc.  Here's
+ ## why we pick this rather obscure method:
+ ## - Don't want to use -MD because we'd like the dependencies to end
+ ##   up in a subdir.  Having to rename by hand is ugly.
+ ##   (We might end up doing this anyway to support other compilers.)
+ ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+ ##   -MM, not -M (despite what the docs say).
+ ## - Using -M directly means running the compiler twice (even worse
+ ##   than renaming).
+   if test -z "$gccflag"; then
+     gccflag=-MD,
+   fi
+   "$@" -Wp,"$gccflag$tmpdepfile"
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   rm -f "$depfile"
+   echo "$object : \\" > "$depfile"
+   alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+ ## The second -e expression handles DOS-style file names with drive letters.
+   sed -e 's/^[^:]*: / /' \
+       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+ ## This next piece of magic avoids the `deleted header file' problem.
+ ## The problem is that when a header file which appears in a .P file
+ ## is deleted, the dependency causes make to die (because there is
+ ## typically no way to rebuild the header).  We avoid this by adding
+ ## dummy dependencies for each header file.  Too bad gcc doesn't do
+ ## this for us directly.
+   tr ' ' '
+ ' < "$tmpdepfile" |
+ ## Some versions of gcc put a space before the `:'.  On the theory
+ ## that the space means something, we add a space to the output as
+ ## well.
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
+ ## correctly.  Breaking it into two sed invocations is a workaround.
+     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ hp)
+   # This case exists only to let depend.m4 do its work.  It works by
+   # looking at the text of this script.  This case will never be run,
+   # since it is checked for above.
+   exit 1
+   ;;
+ 
+ sgi)
+   if test "$libtool" = yes; then
+     "$@" "-Wp,-MDupdate,$tmpdepfile"
+   else
+     "$@" -MDupdate "$tmpdepfile"
+   fi
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   rm -f "$depfile"
+ 
+   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+     echo "$object : \\" > "$depfile"
+ 
+     # Clip off the initial element (the dependent).  Don't try to be
+     # clever and replace this with sed code, as IRIX sed won't handle
+     # lines with more than a fixed number of characters (4096 in
+     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+     # the IRIX cc adds comments like `#:fec' to the end of the
+     # dependency line.
+     tr ' ' '
+ ' < "$tmpdepfile" \
+     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+     tr '
+ ' ' ' >> $depfile
+     echo >> $depfile
+ 
+     # The second pass generates a dummy entry for each header file.
+     tr ' ' '
+ ' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+    >> $depfile
+   else
+     # The sourcefile does not contain any dependencies, so just
+     # store a dummy comment line, to avoid errors with the Makefile
+     # "include basename.Plo" scheme.
+     echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ aix)
+   # The C for AIX Compiler uses -M and outputs the dependencies
+   # in a .u file.  This file always lives in the current directory.
+   # Also, the AIX compiler puts `$object:' at the start of each line;
+   # $object doesn't have directory information.
+   stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
+   tmpdepfile="$stripped.u"
+   outname="$stripped.o"
+   if test "$libtool" = yes; then
+     "$@" -Wc,-M
+   else
+     "$@" -M
+   fi
+ 
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+ 
+   if test -f "$tmpdepfile"; then
+     # Each line is of the form `foo.o: dependent.h'.
+     # Do two passes, one to just change these to
+     # `$object: dependent.h' and one to simply `dependent.h:'.
+     sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+     sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+   else
+     # The sourcefile does not contain any dependencies, so just
+     # store a dummy comment line, to avoid errors with the Makefile
+     # "include basename.Plo" scheme.
+     echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ tru64)
+    # The Tru64 compiler uses -MD to generate dependencies as a side
+    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+    # dependencies in `foo.d' instead, so we check for that too.
+    # Subdirectories are respected.
+    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+    test "x$dir" = "x$object" && dir=
+    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ 
+    if test "$libtool" = yes; then
+       tmpdepfile1="$dir.libs/$base.lo.d"
+       tmpdepfile2="$dir.libs/$base.d"
+       "$@" -Wc,-MD
+    else
+       tmpdepfile1="$dir$base.o.d"
+       tmpdepfile2="$dir$base.d"
+       "$@" -MD
+    fi
+ 
+    stat=$?
+    if test $stat -eq 0; then :
+    else
+       rm -f "$tmpdepfile1" "$tmpdepfile2"
+       exit $stat
+    fi
+ 
+    if test -f "$tmpdepfile1"; then
+       tmpdepfile="$tmpdepfile1"
+    else
+       tmpdepfile="$tmpdepfile2"
+    fi
+    if test -f "$tmpdepfile"; then
+       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+       # That's a space and a tab in the [].
+       sed -e 's,^.*\.[a-z]*:[ 	]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+    else
+       echo "#dummy" > "$depfile"
+    fi
+    rm -f "$tmpdepfile"
+    ;;
+ 
+ #nosideeffect)
+   # This comment above is used by automake to tell side-effect
+   # dependency tracking mechanisms from slower ones.
+ 
+ dashmstdout)
+   # Important note: in order to support this mode, a compiler *must*
+   # always write the proprocessed file to stdout, regardless of -o.
+   "$@" || exit $?
+ 
+   # Remove the call to Libtool.
+   if test "$libtool" = yes; then
+     while test $1 != '--mode=compile'; do
+       shift
+     done
+     shift
+   fi
+ 
+   # Remove `-o $object'.  We will use -o /dev/null later,
+   # however we can't do the remplacement now because
+   # `-o $object' might simply not be used
+   IFS=" "
+   for arg
+   do
+     case $arg in
+     -o)
+       shift
+       ;;
+     $object)
+       shift
+       ;;
+     *)
+       set fnord "$@" "$arg"
+       shift # fnord
+       shift # $arg
+       ;;
+     esac
+   done
+ 
+   test -z "$dashmflag" && dashmflag=-M
+   "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ 	]*:'"$object"'\: :' > "$tmpdepfile"
+   rm -f "$depfile"
+   cat < "$tmpdepfile" > "$depfile"
+   tr ' ' '
+ ' < "$tmpdepfile" | \
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
+ ## correctly.  Breaking it into two sed invocations is a workaround.
+     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ dashXmstdout)
+   # This case only exists to satisfy depend.m4.  It is never actually
+   # run, as this mode is specially recognized in the preamble.
+   exit 1
+   ;;
+ 
+ makedepend)
+   "$@" || exit $?
+   # X makedepend
+   shift
+   cleared=no
+   for arg in "$@"; do
+     case $cleared in
+     no)
+       set ""; shift
+       cleared=yes ;;
+     esac
+     case "$arg" in
+     -D*|-I*)
+       set fnord "$@" "$arg"; shift ;;
+     -*)
+       ;;
+     *)
+       set fnord "$@" "$arg"; shift ;;
+     esac
+   done
+   obj_suffix="`echo $object | sed 's/^.*\././'`"
+   touch "$tmpdepfile"
+   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+   rm -f "$depfile"
+   cat < "$tmpdepfile" > "$depfile"
+   sed '1,2d' "$tmpdepfile" | tr ' ' '
+ ' | \
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
+ ## correctly.  Breaking it into two sed invocations is a workaround.
+     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile" "$tmpdepfile".bak
+   ;;
+ 
+ cpp)
+   # Important note: in order to support this mode, a compiler *must*
+   # always write the proprocessed file to stdout.
+   "$@" || exit $?
+ 
+   # Remove the call to Libtool.
+   if test "$libtool" = yes; then
+     while test $1 != '--mode=compile'; do
+       shift
+     done
+     shift
+   fi
+ 
+   # Remove `-o $object'.
+   IFS=" "
+   for arg
+   do
+     case $arg in
+     -o)
+       shift
+       ;;
+     $object)
+       shift
+       ;;
+     *)
+       set fnord "$@" "$arg"
+       shift # fnord
+       shift # $arg
+       ;;
+     esac
+   done
+ 
+   "$@" -E |
+     sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+     sed '$ s: \\$::' > "$tmpdepfile"
+   rm -f "$depfile"
+   echo "$object : \\" > "$depfile"
+   cat < "$tmpdepfile" >> "$depfile"
+   sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ msvisualcpp)
+   # Important note: in order to support this mode, a compiler *must*
+   # always write the proprocessed file to stdout, regardless of -o,
+   # because we must use -o when running libtool.
+   "$@" || exit $?
+   IFS=" "
+   for arg
+   do
+     case "$arg" in
+     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ 	set fnord "$@"
+ 	shift
+ 	shift
+ 	;;
+     *)
+ 	set fnord "$@" "$arg"
+ 	shift
+ 	shift
+ 	;;
+     esac
+   done
+   "$@" -E |
+   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+   rm -f "$depfile"
+   echo "$object : \\" > "$depfile"
+   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+   echo "	" >> "$depfile"
+   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ none)
+   exec "$@"
+   ;;
+ 
+ *)
+   echo "Unknown depmode $depmode" 1>&2
+   exit 1
+   ;;
+ esac
+ 
+ exit 0
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/Makefile.am gcc-4.1.0/libjava/classpath/doc/Makefile.am
*** gcc-4.0.2/libjava/classpath/doc/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/Makefile.am	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,14 ----
+ SUBDIRS = api
+ 
+ EXTRA_DIST = README.jaxp
+ 
+ ## GCJ LOCAL: we don't want to install Classpath's info files.
+ ## info_TEXINFOS = hacking.texinfo vmintegration.texinfo
+ 
+ %.dvi : %.texinfo
+ 	texi2dvi $<
+ 
+ %.ps : %.dvi
+ 	dvips -o $@ $<
+ 
+ docs: hacking.ps vmintegration.ps
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/Makefile.in gcc-4.1.0/libjava/classpath/doc/Makefile.in
*** gcc-4.0.2/libjava/classpath/doc/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/Makefile.in	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,564 ----
+ # Makefile.in generated by automake 1.9.3 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ # 2003, 2004  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+ INSTALL_HEADER = $(INSTALL_DATA)
+ transform = $(program_transform_name)
+ NORMAL_INSTALL = :
+ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = doc
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in texinfo.tex
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ 	$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ 	$(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/iconv.m4 \
+ 	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ 	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = $(top_builddir)/include/config.h
+ CONFIG_CLEAN_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ 	html-recursive info-recursive install-data-recursive \
+ 	install-exec-recursive install-info-recursive \
+ 	install-recursive installcheck-recursive installdirs-recursive \
+ 	pdf-recursive ps-recursive uninstall-info-recursive \
+ 	uninstall-recursive
+ ETAGS = etags
+ CTAGS = ctags
+ DIST_SUBDIRS = $(SUBDIRS)
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
+ BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
+ CLASSPATH_MODULE = @CLASSPATH_MODULE@
+ CP = @CP@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CREATE_ALSA_LIBRARIES_FALSE = @CREATE_ALSA_LIBRARIES_FALSE@
+ CREATE_ALSA_LIBRARIES_TRUE = @CREATE_ALSA_LIBRARIES_TRUE@
+ CREATE_API_DOCS_FALSE = @CREATE_API_DOCS_FALSE@
+ CREATE_API_DOCS_TRUE = @CREATE_API_DOCS_TRUE@
+ CREATE_CORE_JNI_LIBRARIES_FALSE = @CREATE_CORE_JNI_LIBRARIES_FALSE@
+ CREATE_CORE_JNI_LIBRARIES_TRUE = @CREATE_CORE_JNI_LIBRARIES_TRUE@
+ CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
+ CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
+ CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
+ CREATE_GTK_PEER_LIBRARIES_TRUE = @CREATE_GTK_PEER_LIBRARIES_TRUE@
+ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
+ CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
+ CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
+ CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
+ CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
+ CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
+ CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
+ CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DATE = @DATE@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ ECJ = @ECJ@
+ EGREP = @EGREP@
+ ERROR_CFLAGS = @ERROR_CFLAGS@
+ EXAMPLESDIR = @EXAMPLESDIR@
+ EXEEXT = @EXEEXT@
+ FIND = @FIND@
+ FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+ FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
+ FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
+ FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
+ FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
+ FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
+ FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
+ FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
+ FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
+ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
+ GCJ = @GCJ@
+ GCJX = @GCJX@
+ GJDOC = @GJDOC@
+ GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
+ INSTALL_CLASS_FILES_FALSE = @INSTALL_CLASS_FILES_FALSE@
+ INSTALL_CLASS_FILES_TRUE = @INSTALL_CLASS_FILES_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_GLIBJ_ZIP_FALSE = @INSTALL_GLIBJ_ZIP_FALSE@
+ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
+ JAY = @JAY@
+ JAY_SKELETON = @JAY_SKELETON@
+ JIKES = @JIKES@
+ JIKESENCODING = @JIKESENCODING@
+ KJC = @KJC@
+ LDFLAGS = @LDFLAGS@
+ LIBDEBUG = @LIBDEBUG@
+ LIBICONV = @LIBICONV@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIBVERSION = @LIBVERSION@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MKDIR = @MKDIR@
+ MOC = @MOC@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
+ PANGOFT2_LIBS = @PANGOFT2_LIBS@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ QT_CFLAGS = @QT_CFLAGS@
+ QT_LIBS = @QT_LIBS@
+ RANLIB = @RANLIB@
+ REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
+ REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
+ REMOVE = @REMOVE@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
+ STRIP = @STRIP@
+ USER_CLASSLIB = @USER_CLASSLIB@
+ USER_JAVAH = @USER_JAVAH@
+ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
+ USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
+ USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
+ USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+ VERSION = @VERSION@
+ WARNING_CFLAGS = @WARNING_CFLAGS@
+ XML_CFLAGS = @XML_CFLAGS@
+ XML_LIBS = @XML_LIBS@
+ XSLT_CFLAGS = @XSLT_CFLAGS@
+ XSLT_LIBS = @XSLT_LIBS@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZIP = @ZIP@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
+ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ datadir = @datadir@
+ default_toolkit = @default_toolkit@
+ exec_prefix = @exec_prefix@
+ glibjdir = @glibjdir@
+ host = @host@
+ host_alias = @host_alias@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ nativelibdir = @nativelibdir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ vm_classes = @vm_classes@
+ SUBDIRS = api
+ EXTRA_DIST = README.jaxp
+ all: all-recursive
+ 
+ .SUFFIXES:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ 		&& exit 0; \
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+ 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --gnu  doc/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+ 	  *config.status*) \
+ 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ 	  *) \
+ 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ 	esac;
+ 
+ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ 
+ # This directory's subdirectories are mostly independent; you can cd
+ # into them and run `make' without going through this Makefile.
+ # To change the values of `make' variables: instead of editing Makefiles,
+ # (1) if the variable is set in `config.status', edit `config.status'
+ #     (which will cause the Makefiles to be regenerated when you run `make');
+ # (2) otherwise, pass the desired values on the `make' command line.
+ $(RECURSIVE_TARGETS):
+ 	@set fnord $$MAKEFLAGS; amf=$$2; \
+ 	dot_seen=no; \
+ 	target=`echo $@ | sed s/-recursive//`; \
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  echo "Making $$target in $$subdir"; \
+ 	  if test "$$subdir" = "."; then \
+ 	    dot_seen=yes; \
+ 	    local_target="$$target-am"; \
+ 	  else \
+ 	    local_target="$$target"; \
+ 	  fi; \
+ 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ 	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ 	done; \
+ 	if test "$$dot_seen" = "no"; then \
+ 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ 	fi; test -z "$$fail"
+ 
+ mostlyclean-recursive clean-recursive distclean-recursive \
+ maintainer-clean-recursive:
+ 	@set fnord $$MAKEFLAGS; amf=$$2; \
+ 	dot_seen=no; \
+ 	case "$@" in \
+ 	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ 	  *) list='$(SUBDIRS)' ;; \
+ 	esac; \
+ 	rev=''; for subdir in $$list; do \
+ 	  if test "$$subdir" = "."; then :; else \
+ 	    rev="$$subdir $$rev"; \
+ 	  fi; \
+ 	done; \
+ 	rev="$$rev ."; \
+ 	target=`echo $@ | sed s/-recursive//`; \
+ 	for subdir in $$rev; do \
+ 	  echo "Making $$target in $$subdir"; \
+ 	  if test "$$subdir" = "."; then \
+ 	    local_target="$$target-am"; \
+ 	  else \
+ 	    local_target="$$target"; \
+ 	  fi; \
+ 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ 	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ 	done && test -z "$$fail"
+ tags-recursive:
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ 	done
+ ctags-recursive:
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ 	done
+ 
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '    { files[$$0] = 1; } \
+ 	       END { for (i in files) print i; }'`; \
+ 	mkid -fID $$unique
+ tags: TAGS
+ 
+ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+ 		$(TAGS_FILES) $(LISP)
+ 	tags=; \
+ 	here=`pwd`; \
+ 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ 	  include_option=--etags-include; \
+ 	  empty_fix=.; \
+ 	else \
+ 	  include_option=--include; \
+ 	  empty_fix=; \
+ 	fi; \
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  if test "$$subdir" = .; then :; else \
+ 	    test ! -f $$subdir/TAGS || \
+ 	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ 	  fi; \
+ 	done; \
+ 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '    { files[$$0] = 1; } \
+ 	       END { for (i in files) print i; }'`; \
+ 	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ 	  test -n "$$unique" || unique=$$empty_fix; \
+ 	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ 	    $$tags $$unique; \
+ 	fi
+ ctags: CTAGS
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+ 		$(TAGS_FILES) $(LISP)
+ 	tags=; \
+ 	here=`pwd`; \
+ 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '    { files[$$0] = 1; } \
+ 	       END { for (i in files) print i; }'`; \
+ 	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ 	     $$tags $$unique
+ 
+ GTAGS:
+ 	here=`$(am__cd) $(top_builddir) && pwd` \
+ 	  && cd $(top_srcdir) \
+ 	  && gtags -i $(GTAGS_ARGS) $$here
+ 
+ distclean-tags:
+ 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ 
+ distdir: $(DISTFILES)
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ 	list='$(DISTFILES)'; for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ 	  esac; \
+ 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ 	    dir="/$$dir"; \
+ 	    $(mkdir_p) "$(distdir)$$dir"; \
+ 	  else \
+ 	    dir=''; \
+ 	  fi; \
+ 	  if test -d $$d/$$file; then \
+ 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ 	    fi; \
+ 	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ 	  else \
+ 	    test -f $(distdir)/$$file \
+ 	    || cp -p $$d/$$file $(distdir)/$$file \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+ 	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ 	  if test "$$subdir" = .; then :; else \
+ 	    test -d "$(distdir)/$$subdir" \
+ 	    || $(mkdir_p) "$(distdir)/$$subdir" \
+ 	    || exit 1; \
+ 	    distdir=`$(am__cd) $(distdir) && pwd`; \
+ 	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ 	    (cd $$subdir && \
+ 	      $(MAKE) $(AM_MAKEFLAGS) \
+ 	        top_distdir="$$top_distdir" \
+ 	        distdir="$$distdir/$$subdir" \
+ 	        distdir) \
+ 	      || exit 1; \
+ 	  fi; \
+ 	done
+ check-am: all-am
+ check: check-recursive
+ all-am: Makefile
+ installdirs: installdirs-recursive
+ installdirs-am:
+ install: install-recursive
+ install-exec: install-exec-recursive
+ install-data: install-data-recursive
+ uninstall: uninstall-recursive
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-recursive
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+ 	@echo "it deletes files that may require special tools to rebuild."
+ clean: clean-recursive
+ 
+ clean-am: clean-generic clean-libtool mostlyclean-am
+ 
+ distclean: distclean-recursive
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-generic distclean-libtool \
+ 	distclean-tags
+ 
+ dvi: dvi-recursive
+ 
+ dvi-am:
+ 
+ html: html-recursive
+ 
+ info: info-recursive
+ 
+ info-am:
+ 
+ install-data-am:
+ 
+ install-exec-am:
+ 
+ install-info: install-info-recursive
+ 
+ install-man:
+ 
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-recursive
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-recursive
+ 
+ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+ 
+ pdf: pdf-recursive
+ 
+ pdf-am:
+ 
+ ps: ps-recursive
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am
+ 
+ uninstall-info: uninstall-info-recursive
+ 
+ .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ 	clean clean-generic clean-libtool clean-recursive ctags \
+ 	ctags-recursive distclean distclean-generic distclean-libtool \
+ 	distclean-recursive distclean-tags distdir dvi dvi-am html \
+ 	html-am info info-am install install-am install-data \
+ 	install-data-am install-exec install-exec-am install-info \
+ 	install-info-am install-man install-strip installcheck \
+ 	installcheck-am installdirs installdirs-am maintainer-clean \
+ 	maintainer-clean-generic maintainer-clean-recursive \
+ 	mostlyclean mostlyclean-generic mostlyclean-libtool \
+ 	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ 	uninstall uninstall-am uninstall-info-am
+ 
+ 
+ %.dvi : %.texinfo
+ 	texi2dvi $<
+ 
+ %.ps : %.dvi
+ 	dvips -o $@ $<
+ 
+ docs: hacking.ps vmintegration.ps
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/README.jaxp gcc-4.1.0/libjava/classpath/doc/README.jaxp
*** gcc-4.0.2/libjava/classpath/doc/README.jaxp	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/README.jaxp	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,174 ----
+ This file describes the jaxp (xml processing) implementation of GNU Classpath.
+ GNU Classpath includes interfaces and implementations for basic XML processing
+ in in the java programming language, some general purpose SAX2 utilities, and
+ transformation.
+ 
+ These classes used to be maintained as part of an external project GNU JAXP
+ but are now integrated with the rest of the core class library provided by
+ GNU Classpath.
+ 
+ PACKAGES
+     
+ . javax.xml.* ... JAXP 1.3 interfaces
+ 
+ . gnu.xml.aelfred2.* ... SAX2 parser + validator
+ . gnu.xml.dom.* ... DOM Level 3 Core, Traversal, XPath implementation
+ . gnu.xml.dom.ls.* ... DOM Level 3 Load & Save implementation
+ . gnu.xml.xpath.* ... JAXP XPath implementation
+ . gnu.xml.transform.* ... JAXP XSL transformer implementation
+ . gnu.xml.pipeline.* ... SAX2 event pipeline support
+ . gnu.xml.stream.* ... StAX pull parser implementation
+ . gnu.xml.util.* ... various XML utility classes
+ . gnu.xml.libxmlj.dom.* ... libxmlj DOM Level 3 Core and XPath
+ . gnu.xml.libxmlj.sax.* ... libxmlj SAX parser
+ . gnu.xml.libxmlj.transform.* ... libxmlj XSL transformer
+ . gnu.xml.libxmlj.util.* ... libxmlj utility classes
+ 
+ In the external directory you can find the following packages.
+ They are not maintained as part of GNU Classpath, but are used by the
+ classes in the above packages.
+ 
+ . org.xml.sax.* ... SAX2 interfaces
+ . org.w3c.dom.* ... DOM Level 3 interfaces
+ 
+ CONFORMANCE
+ 
+     The primary test resources are at http://xmlconf.sourceforge.net
+     and include:
+ 
+     SAX2/XML conformance tests
+ 	That the "xml.testing.Driver" addresses the core XML 1.0
+ 	specification requirements, which closely correspond to the
+ 	functionality SAX1 provides.  The driver uses SAX2 APIs to
+ 	test that functionality It is used with a bugfixed version of
+ 	the NIST/OASIS XML conformance test cases.
+ 	
+ 	The AElfred2 parser is highly conformant, though it still takes
+ 	a few implementation shortcuts.  See its package documentation
+ 	for information about known XML conformance issues in AElfred2.
+ 
+ 	The primary issue is using Unicode character tables, rather than
+ 	those in the XML specification, for determining what names are
+ 	valid.  Most applications won't notice the difference, and this
+ 	solution is smaller and faster than the alternative.
+ 
+ 	For validation, a secondary issue is that issues relating to
+ 	entity modularity are not validated; they can't all be cleanly
+ 	layered.  For example, validity constraints related to standalone
+ 	declarations and PE nesting are not checked.
+ 
+         The current implementation has also been tested against Elliotte
+         Rusty Harold's SAXTest test suite (http://www.cafeconleche.org/SAXTest)
+         and achieves approximately 93% conformance to the SAX specification
+         according to these tests, higher than any other current Java parser.
+ 
+     SAX2
+ 	SAX2 API conformance currently has a minimal JUNIT (0.2) test suite,
+ 	which can be accessed at the xmlconf site listed above.  It does
+ 	not cover namespaces or LexicalHandler and Declhandler extensions
+ 	anywhere as exhaustively as the SAX1 level functionality is
+ 	tested by the "xml.testing.Driver".  However:
+ 
+ 	    - Applying the DOM unit tests to this implementation gives
+ 	      the LexicalHandler (comments, and boundaries of DTDs,
+ 	      CDATA sections, and general entities) a workout, and
+ 	      does the same for DeclHandler entity declarations.
+ 	    
+ 	    - The pipeline package's layered validator demands that
+ 	      element and attribute declarations are reported correctly.
+ 	
+ 	By those metrics, SAX2 conformance for AElfred2 is also strong. 
+     
+     DOM Level 3 Core Tests
+         The DOM implementation has been tested against the W3C DOM Level 3
+         Core conformance test suite (http://www.w3.org/DOM/Test/). Current
+         conformance according to these tests is 72.3%. Many of the test
+         failures are due to the fact that GNU JAXP does not currently
+         provide any W3C XML Schema support.
+ 
+     XSL transformation
+         The transformer and XPath implementation have been tested against
+         the OASIS XSLT and XPath TC test suite. Conformance against the
+         Xalan tests is currently 77%.
+ 
+ 
+ libxmlj
+ ========================================================================
+ 
+ libxmlj is an effort to create a 100% JAXP-compatible Java wrapper for
+ libxml2 and libxslt. JAXP is the Java API for XML processing, libxml2
+ is the XML C library for Gnome, and libxslt is the XSLT C library for
+ Gnome.
+ 
+ libxmlj currently supports most of the DOM Level 3 Core, Traversal, and
+ XPath APIs, SAX2, and XSLT transformations. There is no W3C XML Schema
+ support yet.
+ 
+ libxmlj can parse and transform XML documents extremely quickly in
+ comparison to Java-based JAXP implementations. DOM manipulations, however,
+ involve JNI overhead, so the speed of DOM tree construction and traversal
+ can be slower than the Java implementation.
+ 
+ libxmlj is highly experimental, doesn't always conform to the DOM
+ specification correctly, and may leak memory. Production use is not advised.
+ 
+ The implementation can be found in gnu/xml/libxmlj and native/jni/xmlj.
+ See the INSTALL file for the required versions of libxml2 and libxslt.
+ configure --enable-xmlj will build it.
+ 
+ Usage
+ ------------------------------------------------------------------------
+ 
+ To enable the various GNU JAXP factories, set the following system properties
+ (command-line version shown, but they can equally be set programmatically):
+ 
+   AElfred2:
+    -Djavax.xml.parsers.SAXParserFactory=gnu.xml.aelfred2.JAXPFactory
+ 
+   GNU DOM (using DOM Level 3 Load & Save):
+    -Djavax.xml.parsers.DocumentBuilderFactory=gnu.xml.dom.DomDocumentBuilderFactory
+ 
+   GNU DOM (using AElfred-only pipeline classes):
+    -Djavax.xml.parsers.DocumentBuilderFactory=gnu.xml.dom.JAXPFactory
+ 
+   GNU XSL transformer:
+    -Djavax.xml.transform.TransformerFactory=gnu.xml.transform.TransformerFactoryImpl
+ 
+   GNU StAX:
+    -Djavax.xml.stream.XMLEventFactory=gnu.xml.stream.XMLEventFactoryImpl
+    -Djavax.xml.stream.XMLInputFactory=gnu.xml.stream.XMLInputFactoryImpl
+    -Djavax.xml.stream.XMLOutputFactory=gnu.xml.stream.XMLOutputFactoryImpl
+ 
+   libxmlj SAX:
+    -Djavax.xml.parsers.SAXParserFactory=gnu.xml.libxmlj.sax.GnomeSAXParserFactory
+ 
+   libxmlj DOM:
+    -Djavax.xml.parsers.DocumentBuilderFactory=gnu.xml.libxmlj.dom.GnomeDocumentBuilderFactory
+ 
+   libxmlj XSL transformer:
+    -Djavax.xml.transform.TransformerFactory=gnu.xml.libxmlj.transform.GnomeTransformerFactory
+ 
+ When using libxmlj, the libxmlj shared library must be available.
+ In general it is picked up by the runtime using GNU Classpath. If not you
+ might want to try adding the directory where libxmlj.so is installed
+ (by default ${prefix}/lib/classpath/) with ldconfig or specifing in the
+ LD_LIBRARY_PATH environment variable. Additionally, you may need to specify
+ the location of your shared libraries to the runtime environment using the
+ java.library.path system property.
+ 
+ Missing (libxmlj) Features
+ ------------------------------------------------------------------------ 
+ 
+ See BUGS in native/jni/xmlj for known bugs in the libxmlj native bindings.
+ 
+ This implementation should be thread-safe, but currently all
+ transformation requests are queued via Java synchronization, which
+ means that it effectively performs single-threaded. Long story short,
+ both libxml2 and libxslt are not fully reentrant.  
+ 
+ Update: it may be possible to make libxmlj thread-safe nonetheless
+ using thread context variables.
+ 
+ Update: thread context variables have been introduced. This is very
+ untested though, libxmll therefore still has the single thread
+ bottleneck.
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/api/Makefile.am gcc-4.1.0/libjava/classpath/doc/api/Makefile.am
*** gcc-4.0.2/libjava/classpath/doc/api/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/api/Makefile.am	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,52 ----
+ if CREATE_API_DOCS
+ noinst_DATA = html
+ endif
+ 
+ sourcepath = $(top_builddir):$(top_srcdir):$(top_srcdir)/vm/reference:$(top_srcdir)/external/w3c_dom:$(top_srcdir)/external/sax
+ 
+ classpathbox = "<span class='logo'><a href='http://www.gnu.org/software/classpath' target='_top'>GNU Classpath</a> ($(VERSION))"
+ 
+ if CREATE_API_DOCS
+ install-data-local:
+ 	$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/api
+ 	@list='$(htmllist)'; for p in $$list; do \
+ 	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+ 	  if test -f "$$p"; then \
+ 	    echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/api/$$f"; \
+ 	    $(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/api/$$f; \
+ 	  elif test -d "$$p"; then \
+ 	    $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/api/$$f; \
+           fi; \
+         done
+ 
+ uninstall-local:
+ 	@list='$(htmllist)'; for p in $$list; do \
+ 	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+ 	  if test -f "$$p"; then \
+ 	    echo " rm -f $(DESTDIR)$(pkgdatadir)/api/$$f"; \
+ 	    rm -f $(DESTDIR)$(pkgdatadir)/api/$$f; \
+           fi; \
+         done
+ endif
+ 
+ html: create_html
+ 
+ clean-local:
+ 	-rm -rf html create_html gjdoc_rawcomment.cache
+ 
+ create_html:
+ 	-$(MKDIR) html > /dev/null 2>&1
+ 	$(GJDOC) \
+ 	-use \
+ 	-sourcepath "$(sourcepath)" \
+ 	-encoding UTF-8 \
+ 	-breakiterator \
+ 	-licensetext \
+ 	-linksource \
+ 	-splitindex \
+ 	-d html \
+ 	-doctitle "GNU Classpath $(VERSION)" \
+ 	-windowtitle "GNU Classpath $(VERSION) Documentation" \
+ 	-header $(classpathbox) -footer $(classpathbox) \
+ 	-subpackages java:javax:org
+ 	touch create_html
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/api/Makefile.in gcc-4.1.0/libjava/classpath/doc/api/Makefile.in
*** gcc-4.0.2/libjava/classpath/doc/api/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/api/Makefile.in	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,458 ----
+ # Makefile.in generated by automake 1.9.3 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ # 2003, 2004  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ 
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ top_builddir = ../..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+ INSTALL_HEADER = $(INSTALL_DATA)
+ transform = $(program_transform_name)
+ NORMAL_INSTALL = :
+ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = doc/api
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ 	$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ 	$(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/iconv.m4 \
+ 	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ 	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = $(top_builddir)/include/config.h
+ CONFIG_CLEAN_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ DATA = $(noinst_DATA)
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
+ BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
+ CLASSPATH_MODULE = @CLASSPATH_MODULE@
+ CP = @CP@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CREATE_ALSA_LIBRARIES_FALSE = @CREATE_ALSA_LIBRARIES_FALSE@
+ CREATE_ALSA_LIBRARIES_TRUE = @CREATE_ALSA_LIBRARIES_TRUE@
+ CREATE_API_DOCS_FALSE = @CREATE_API_DOCS_FALSE@
+ CREATE_API_DOCS_TRUE = @CREATE_API_DOCS_TRUE@
+ CREATE_CORE_JNI_LIBRARIES_FALSE = @CREATE_CORE_JNI_LIBRARIES_FALSE@
+ CREATE_CORE_JNI_LIBRARIES_TRUE = @CREATE_CORE_JNI_LIBRARIES_TRUE@
+ CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
+ CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
+ CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
+ CREATE_GTK_PEER_LIBRARIES_TRUE = @CREATE_GTK_PEER_LIBRARIES_TRUE@
+ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
+ CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
+ CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
+ CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
+ CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
+ CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
+ CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
+ CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DATE = @DATE@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ ECJ = @ECJ@
+ EGREP = @EGREP@
+ ERROR_CFLAGS = @ERROR_CFLAGS@
+ EXAMPLESDIR = @EXAMPLESDIR@
+ EXEEXT = @EXEEXT@
+ FIND = @FIND@
+ FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+ FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
+ FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
+ FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
+ FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
+ FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
+ FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
+ FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
+ FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
+ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
+ GCJ = @GCJ@
+ GCJX = @GCJX@
+ GJDOC = @GJDOC@
+ GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
+ INSTALL_CLASS_FILES_FALSE = @INSTALL_CLASS_FILES_FALSE@
+ INSTALL_CLASS_FILES_TRUE = @INSTALL_CLASS_FILES_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_GLIBJ_ZIP_FALSE = @INSTALL_GLIBJ_ZIP_FALSE@
+ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
+ JAY = @JAY@
+ JAY_SKELETON = @JAY_SKELETON@
+ JIKES = @JIKES@
+ JIKESENCODING = @JIKESENCODING@
+ KJC = @KJC@
+ LDFLAGS = @LDFLAGS@
+ LIBDEBUG = @LIBDEBUG@
+ LIBICONV = @LIBICONV@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIBVERSION = @LIBVERSION@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MKDIR = @MKDIR@
+ MOC = @MOC@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
+ PANGOFT2_LIBS = @PANGOFT2_LIBS@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ QT_CFLAGS = @QT_CFLAGS@
+ QT_LIBS = @QT_LIBS@
+ RANLIB = @RANLIB@
+ REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
+ REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
+ REMOVE = @REMOVE@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
+ STRIP = @STRIP@
+ USER_CLASSLIB = @USER_CLASSLIB@
+ USER_JAVAH = @USER_JAVAH@
+ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
+ USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
+ USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
+ USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+ VERSION = @VERSION@
+ WARNING_CFLAGS = @WARNING_CFLAGS@
+ XML_CFLAGS = @XML_CFLAGS@
+ XML_LIBS = @XML_LIBS@
+ XSLT_CFLAGS = @XSLT_CFLAGS@
+ XSLT_LIBS = @XSLT_LIBS@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZIP = @ZIP@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
+ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ datadir = @datadir@
+ default_toolkit = @default_toolkit@
+ exec_prefix = @exec_prefix@
+ glibjdir = @glibjdir@
+ host = @host@
+ host_alias = @host_alias@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ nativelibdir = @nativelibdir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ vm_classes = @vm_classes@
+ @CREATE_API_DOCS_TRUE@noinst_DATA = html
+ sourcepath = $(top_builddir):$(top_srcdir):$(top_srcdir)/vm/reference:$(top_srcdir)/external/w3c_dom:$(top_srcdir)/external/sax
+ classpathbox = "<span class='logo'><a href='http://www.gnu.org/software/classpath' target='_top'>GNU Classpath</a> ($(VERSION))"
+ all: all-am
+ 
+ .SUFFIXES:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ 		&& exit 0; \
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+ 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/api/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --gnu  doc/api/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+ 	  *config.status*) \
+ 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ 	  *) \
+ 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ 	esac;
+ 
+ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ tags: TAGS
+ TAGS:
+ 
+ ctags: CTAGS
+ CTAGS:
+ 
+ 
+ distdir: $(DISTFILES)
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ 	list='$(DISTFILES)'; for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ 	  esac; \
+ 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ 	    dir="/$$dir"; \
+ 	    $(mkdir_p) "$(distdir)$$dir"; \
+ 	  else \
+ 	    dir=''; \
+ 	  fi; \
+ 	  if test -d $$d/$$file; then \
+ 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ 	    fi; \
+ 	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ 	  else \
+ 	    test -f $(distdir)/$$file \
+ 	    || cp -p $$d/$$file $(distdir)/$$file \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+ check-am: all-am
+ check: check-am
+ all-am: Makefile $(DATA)
+ installdirs:
+ install: install-am
+ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+ 	@echo "it deletes files that may require special tools to rebuild."
+ @CREATE_API_DOCS_FALSE@uninstall-local:
+ @CREATE_API_DOCS_FALSE@install-data-local:
+ clean: clean-am
+ 
+ clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+ 
+ distclean: distclean-am
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-generic distclean-libtool
+ 
+ dvi: dvi-am
+ 
+ dvi-am:
+ 
+ info: info-am
+ 
+ info-am:
+ 
+ install-data-am: install-data-local
+ 
+ install-exec-am:
+ 
+ install-info: install-info-am
+ 
+ install-man:
+ 
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-am
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-am
+ 
+ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+ 
+ pdf: pdf-am
+ 
+ pdf-am:
+ 
+ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am uninstall-local
+ 
+ .PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ 	clean-local distclean distclean-generic distclean-libtool \
+ 	distdir dvi dvi-am html html-am info info-am install \
+ 	install-am install-data install-data-am install-data-local \
+ 	install-exec install-exec-am install-info install-info-am \
+ 	install-man install-strip installcheck installcheck-am \
+ 	installdirs maintainer-clean maintainer-clean-generic \
+ 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ 	ps ps-am uninstall uninstall-am uninstall-info-am \
+ 	uninstall-local
+ 
+ 
+ @CREATE_API_DOCS_TRUE@install-data-local:
+ @CREATE_API_DOCS_TRUE@	$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/api
+ @CREATE_API_DOCS_TRUE@	@list='$(htmllist)'; for p in $$list; do \
+ @CREATE_API_DOCS_TRUE@	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+ @CREATE_API_DOCS_TRUE@	  if test -f "$$p"; then \
+ @CREATE_API_DOCS_TRUE@	    echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/api/$$f"; \
+ @CREATE_API_DOCS_TRUE@	    $(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/api/$$f; \
+ @CREATE_API_DOCS_TRUE@	  elif test -d "$$p"; then \
+ @CREATE_API_DOCS_TRUE@	    $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/api/$$f; \
+ @CREATE_API_DOCS_TRUE@          fi; \
+ @CREATE_API_DOCS_TRUE@        done
+ 
+ @CREATE_API_DOCS_TRUE@uninstall-local:
+ @CREATE_API_DOCS_TRUE@	@list='$(htmllist)'; for p in $$list; do \
+ @CREATE_API_DOCS_TRUE@	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+ @CREATE_API_DOCS_TRUE@	  if test -f "$$p"; then \
+ @CREATE_API_DOCS_TRUE@	    echo " rm -f $(DESTDIR)$(pkgdatadir)/api/$$f"; \
+ @CREATE_API_DOCS_TRUE@	    rm -f $(DESTDIR)$(pkgdatadir)/api/$$f; \
+ @CREATE_API_DOCS_TRUE@          fi; \
+ @CREATE_API_DOCS_TRUE@        done
+ 
+ html: create_html
+ 
+ clean-local:
+ 	-rm -rf html create_html gjdoc_rawcomment.cache
+ 
+ create_html:
+ 	-$(MKDIR) html > /dev/null 2>&1
+ 	$(GJDOC) \
+ 	-use \
+ 	-sourcepath "$(sourcepath)" \
+ 	-encoding UTF-8 \
+ 	-breakiterator \
+ 	-licensetext \
+ 	-linksource \
+ 	-splitindex \
+ 	-d html \
+ 	-doctitle "GNU Classpath $(VERSION)" \
+ 	-windowtitle "GNU Classpath $(VERSION) Documentation" \
+ 	-header $(classpathbox) -footer $(classpathbox) \
+ 	-subpackages java:javax:org
+ 	touch create_html
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/hacking.texinfo gcc-4.1.0/libjava/classpath/doc/hacking.texinfo
*** gcc-4.0.2/libjava/classpath/doc/hacking.texinfo	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/hacking.texinfo	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1664 ----
+ \input texinfo @c -*-texinfo-*-
+ 
+ @c %**start of header
+ @setfilename hacking.info
+ @settitle GNU Classpath Hacker's Guide
+ @c %**end of header
+ 
+ @setchapternewpage off
+ 
+ @ifinfo
+ This file contains important information you will need to know if you
+ are going to hack on the GNU Classpath project code.
+ 
+ Copyright (C) 1998,1999,2000,2001,2002,2003,2004, 2005 Free Software Foundation, Inc.
+ 
+ @ifnotplaintext
+ @dircategory GNU Libraries
+ @direntry
+ * Classpath Hacking: (hacking).   GNU Classpath Hacker's Guide
+ @end direntry
+ @end ifnotplaintext
+ @end ifinfo
+ 
+ @titlepage
+ @title GNU Classpath Hacker's Guide
+ @author Aaron M. Renn
+ @author Paul N. Fisher
+ @author John Keiser
+ @author C. Brian Jones
+ @author Mark J. Wielaard
+ 
+ @page
+ @vskip 0pt plus 1filll
+ Copyright @copyright{} 1998,1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
+ @sp 2
+ Permission is granted to make and distribute verbatim copies of
+ this document provided the copyright notice and this permission notice
+ are preserved on all copies.
+ 
+ Permission is granted to copy and distribute modified versions of this
+ document under the conditions for verbatim copying, provided that the
+ entire resulting derived work is distributed under the terms of a
+ permission notice identical to this one.
+ 
+ Permission is granted to copy and distribute translations of this manual
+ into another language, under the above conditions for modified versions,
+ except that this permission notice may be stated in a translation
+ approved by the Free Software Foundation.
+ 
+ @end titlepage
+ 
+ @ifinfo
+ @node Top, Introduction, (dir), (dir)
+ @top GNU Classpath Hacker's Guide
+ 
+ This document contains important information you'll want to know if
+ you want to hack on GNU Classpath, Essential Libraries for Java, to
+ help create free core class libraries for use with virtual machines
+ and compilers for the java programming language.
+ @end ifinfo
+ 
+ @menu
+ * Introduction::                An introduction to the GNU Classpath project
+ * Requirements::                Very important rules that must be followed
+ * Volunteering::                So you want to help out
+ * Project Goals::               Goals of the GNU Classpath project
+ * Needed Tools and Libraries::  A list of programs and libraries you will need
+ * Programming Standards::       Standards to use when writing code
+ * Hacking Code::                Working on code, Working with others
+ * Programming Goals::           What to consider when writing code
+ * API Compatibility::           How to handle serialization and deprecated methods
+ * Specification Sources::       Where to find class library specs
+ * Naming Conventions::          How files and directories are named
+ * Character Conversions::       Working on Character conversions
+ * Localization::                How to handle localization/internationalization
+ 
+ @detailmenu
+  --- The Detailed Node Listing ---
+ 
+ Programming Standards
+ 
+ * Source Code Style Guide::     
+ 
+ Working on the code, Working with others
+ 
+ * Writing ChangeLogs::          
+ 
+ Programming Goals
+ 
+ * Portability::                 Writing Portable Software                
+ * Utility Classes::             Reusing Software
+ * Robustness::                  Writing Robust Software               
+ * Java Efficiency::             Writing Efficient Java            
+ * Native Efficiency::           Writing Efficient JNI          
+ * Security::                    Writing Secure Software
+ 
+ API Compatibility
+ 
+ * Serialization::               Serialization
+ * Deprecated Methods::          Deprecated methods
+ 
+ Localization
+ 
+ * String Collation::            Sorting strings in different locales
+ * Break Iteration::             Breaking up text into words, sentences, and lines
+ * Date Formatting and Parsing::  Locale specific date handling
+ * Decimal/Currency Formatting and Parsing::  Local specific number handling
+ 
+ @end detailmenu
+ @end menu
+ 
+ @node Introduction, Requirements, Top, Top
+ @comment node-name, next, previous, up
+ @chapter Introduction
+ 
+ The GNU Classpath Project is a dedicated to providing a 100% free,
+ clean room implementation of the standard core class libraries for
+ compilers and runtime environments for the java programming language.
+ It offers free software developers an alternative core library
+ implementation upon which larger java-like programming environments
+ can be build.  The GNU Classpath Project was started in the Spring of
+ 1998 as an official Free Software Foundation project.  Most of the
+ volunteers working on GNU Classpath do so in their spare time, but a
+ couple of projects based on GNU Classpath have paid programmers to
+ improve the core libraries.  We appreciate everyone's efforts in the
+ past to improve and help the project and look forward to future
+ contributions by old and new members alike.
+ 
+ @node Requirements, Volunteering, Introduction, Top
+ @comment node-name, next, previous, up
+ @chapter Requirements
+ 
+ Although GNU Classpath is following an open development model where input
+ from developers is welcome, there are certain base requirements that
+ need to be met by anyone who wants to contribute code to this project.
+ They are mostly dictated by legal requirements and are not arbitrary
+ restrictions chosen by the GNU Classpath team.
+ 
+ You will need to adhere to the following things if you want to donate
+ code to the GNU Classpath project:
+ 
+ @itemize @bullet
+ @item
+ @strong{Never under any circumstances refer to proprietary code while
+ working on GNU Classpath.}  It is best if you have never looked at
+ alternative proprietary core library code at all.  To reduce
+ temptation, it would be best if you deleted the @file{src.zip} file
+ from your proprietary JDK distribution (note that recent versions of
+ GNU Classpath and the compilers and environments build on it are
+ mature enough to not need any proprietary implementation at all when
+ working on GNU Classpath, except in exceptional cases where you need
+ to test compatibility issues pointed out by users).  If you have
+ signed Sun's non-disclosure statement, then you unfortunately cannot
+ work on Classpath code at all.  If you have any reason to believe that
+ your code might be ``tainted'', please say something on the mailing
+ list before writing anything.  If it turns out that your code was not
+ developed in a clean room environment, we could be very embarrassed
+ someday in court.  Please don't let that happen.
+ 
+ @item
+ @strong{Never decompile proprietary class library implementations.}  While
+ the wording of the license in Sun's Java 2 releases has changed, it is
+ not acceptable, under any circumstances, for a person working on
+ GNU Classpath to decompile Sun's class libraries.  Allowing the use of
+ decompilation in the GNU Classpath project would open up a giant can of
+ legal worms, which we wish to avoid.
+ 
+ @item
+ Classpath is licensed under the terms of the
+ @uref{http://www.fsf.org/copyleft/gpl.html,GNU General Public
+ License}, with a special exception included to allow linking with
+ non-GPL licensed works as long as no other license would restrict such
+ linking.  To preserve freedom for all users and to maintain uniform
+ licensing of Classpath, we will not accept code into the main
+ distribution that is not licensed under these terms.  The exact
+ wording of the license of the current version of GNU Classpath can be
+ found online from the
+ @uref{http://www.gnu.org/software/classpath/license.html, GNU
+ Classpath license page} and is of course distributed with current
+ snapshot release from @uref{ftp://ftp.gnu.org/gnu/classpath/} or by
+ obtaining a copy of the current CVS tree.
+ 
+ @item
+ GNU Classpath is GNU software and this project is being officially sponsored
+ by the @uref{http://www.fsf.org/,Free Software Foundation}.  Because of
+ this, the FSF will hold copyright to all code developed as part of
+ GNU Classpath.  This will allow them to pursue copyright violators in court,
+ something an individual developer may neither have the time nor
+ resources to do.  Everyone contributing code to GNU Classpath will need to
+ sign a copyright assignment statement.  Additionally, if you are
+ employed as a programmer, your employer may need to sign a copyright
+ waiver disclaiming all interest in the software.  This may sound harsh,
+ but unfortunately, it is the only way to ensure that the code you write
+ is legally yours to distribute.
+ @end itemize
+ 
+ @node Volunteering, Project Goals, Requirements, Top
+ @comment node-name, next, previous, up
+ @chapter Volunteering to Help
+ 
+ The GNU Classpath project needs volunteers to help us out.  People are
+ needed to write unimplemented core packages, to test GNU Classpath on
+ free software programs written in the java programming language, to
+ test it on various platforms, and to port it to platforms that are
+ currently unsupported.
+ 
+ While pretty much all contributions are welcome (but see 
+ @pxref{Requirements}) it is always preferable that volunteers do the
+ whole job when volunteering for a task.  So when you volunteer to write
+ a Java package, please be willing to do the following:
+ 
+ @itemize @bullet
+ @item
+ Implement a complete drop-in replacement for the particular package.
+ That means implementing any ``internal'' classes.  For example, in the
+ java.net package, there are non-public classes for implementing sockets.
+ Without those classes, the public socket interface is useless.  But do
+ not feel obligated to completely implement all of the functionality at
+ once.  For example, in the java.net package, there are different types
+ of protocol handlers for different types of URL's.  Not all of these
+ need to be written at once.
+ 
+ @item
+ Please write complete and thorough API documentation comments for
+ every public and protected method and variable.  These should be
+ superior to Sun's and cover everything about the item being
+ documented.
+ 
+ @item
+ Please write a regression test package that can be used to run tests
+ of your package's functionality.  GNU Classpath uses the
+ @uref{http://sources.redhat.com/mauve/,Mauve project} for testing the
+ functionality of the core class libraries.  The Classpath Project is
+ fast approaching the point in time where all modifications to the
+ source code repository will require appropriate test cases in Mauve to
+ ensure correctness and prevent regressions.  
+ @end itemize
+ 
+ Writing good documentation, tests and fixing bugs should be every
+ developer's top priority in order to reach the elusive release of
+ version 1.0.
+ 
+ @node Project Goals, Needed Tools and Libraries, Volunteering, Top
+ @comment node-name, next, previous, up
+ @chapter Project Goals
+ 
+ The goal of the Classpath project is to produce a
+ @uref{http://www.fsf.org/philosophy/free-sw.html,free} implementation of
+ the standard class library for Java.  However, there are other more
+ specific goals as to which platforms should be supported.
+ 
+ Classpath is targeted to support the following operating systems:
+ 
+ @enumerate
+ @item
+ Free operating systems.  This includes GNU/Linux, GNU/Hurd, and the free
+ BSDs.
+ 
+ @item
+ Other Unix-like operating systems.
+ 
+ @item
+ Platforms which currently have no Java support at all.
+ 
+ @item 
+ Other platforms such as MS-Windows.
+ @end enumerate
+ 
+ While free operating systems are the top priority, the other priorities
+ can shift depending on whether or not there is a volunteer to port
+ Classpath to those platforms and to test releases.
+ 
+ Eventually we hope the Classpath will support all JVM's that provide
+ JNI or CNI support.  However, the top priority is free JVM's.  A small
+ list of Compiler/VM environments that are currently actively
+ incorporating GNU Classpath is below.  A more complete overview of
+ projects based on GNU classpath can be found online at
+ @uref{http://www.gnu.org/software/classpath/stories.html,the GNU
+ Classpath stories page}.
+ 
+ @enumerate
+ @item
+ @uref{http://gcc.gnu.org/java/,GCJ}
+ @item 
+ @uref{http://jamvm.sourceforge.net/,jamvm}
+ @item 
+ @uref{http://kissme.sourceforge.net/,Kissme}
+ @item
+ @uref{http://www.ibm.com/developerworks/oss/jikesrvm/,Jikes RVM}
+ @item
+ @uref{http://www.sablevm.org/,SableVM}
+ @item
+ @uref{http://www.kaffe.org/,Kaffe}
+ @end enumerate
+ 
+ As with OS platform support, this priority list could change if a
+ volunteer comes forward to port, maintain, and test releases for a
+ particular JVM.  Since gcj is part of the GNU Compiler Collective it
+ is one of the most important targets.  But since it doesn't currently
+ work out of the box with GNU Classpath it is currently not the easiest
+ target.  When hacking on GNU Classpath the easiest is to use
+ compilers and runtime environments that that work out of the box with
+ it, such as the jikes compiler and the runtime environments jamvm and
+ kissme.  But you can also work directly with targets like gcj and
+ kaffe that have their own copy of GNU Classpath currently.  In that
+ case changes have to be merged back into GNU Classpath proper though,
+ which is sometimes more work.  SableVM is starting to migrate from an
+ integrated GNU Classpath version to being usable with GNU Classpath
+ out of the box.
+ 
+ 
+ The initial target version for Classpath is the 1.1 spec.  Higher
+ versions can be implemented (and have been implemented, including lots
+ of 1.4 functionality) if desired, but please do not create classes
+ that depend on features in those packages unless GNU Classpath already
+ contains those features.  GNU Classpath has been free of any
+ proprietary dependencies for a long time now and we like to keep it
+ that way.  But finishing, polishing up, documenting, testing and
+ debugging current functionality is of higher priority then adding new
+ functionality.
+ 
+ @node Needed Tools and Libraries, Programming Standards, Project Goals, Top
+ @comment node-name, next, previous, up
+ @chapter Needed Tools and Libraries
+ 
+ If you want to hack on Classpath, you should at least download and
+ install the following tools.  And try to familiarize yourself with
+ them.  Although in most cases having these tools installed will be all
+ you really need to know about them.  Also note that when working on
+ (snapshot) releases only GCC 3.3+ (plus a free VM from the list above
+ and the libraries listed below) is needed.  The other tools are only
+ needed when working directly on the CVS version.
+ 
+ @itemize @bullet
+ @item
+ GCC 3.3+
+ @item
+ CVS 1.11+
+ @item
+ automake 1.7+
+ @item
+ autoconf 2.59+
+ @item
+ libtool 1.4.2+
+ @item
+ GNU m4 1.4
+ @item
+ texinfo 4.2+
+ @end itemize
+ 
+ All of these tools are available from
+ @uref{ftp://gnudist.gnu.org/pub/gnu/,gnudist.gnu.org} via anonymous
+ ftp, except CVS which is available from
+ @uref{http://www.cvshome.org/,www.cvshome.org}.  They are fully
+ documented with texinfo manuals.  Texinfo can be browsed with the
+ Emacs editor, or with the text editor of your choice, or transformed
+ into nicely printable Postscript.
+ 
+ Here is a brief description of the purpose of those tools.
+ 
+ @table @b
+ 
+ @item GCC
+ The GNU Compiler Collection. This contains a C compiler (gcc) for
+ compiling the native C code and a compiler for the java programming
+ language (gcj).  You will need at least gcj version 3.3 or higher.  If
+ that version is not available for your platform you can try the
+ @uref{http://www.jikes.org/, jikes compiler}.  We try to keep all code
+ compilable with both gcj and jikes at all times.
+ 
+ @item CVS  
+ A version control system that maintains a centralized Internet
+ repository of all code in the Classpath system.
+ 
+ @item automake  
+ This tool automatically creates Makefile.in files from Makefile.am
+ files.  The Makefile.in is turned into a Makefile by autoconf.  Why
+ use this?  Because it automatically generates every makefile target
+ you would ever want (clean, install, dist, etc) in full compliance
+ with the GNU coding standards.  It also simplifies Makefile creation
+ in a number of ways that cannot be described here.  Read the docs for
+ more info.
+ 
+ @item autoconf  
+ Automatically configures a package for the platform on which it is
+ being built and generates the Makefile for that platform.
+ 
+ @item libtool  
+ Handles all of the zillions of hairy platform specific options needed
+ to build shared libraries.
+ 
+ @item m4
+ The free GNU replacement for the standard Unix macro processor.
+ Proprietary m4 programs are broken and so GNU m4 is required for
+ autoconf to work though knowing a lot about GNU m4 is not required to
+ work with autoconf.
+ 
+ @item perl
+ Larry Wall's scripting language.  It is used internally by automake.
+ 
+ @item texinfo
+ Manuals and documentation (like this guide) are written in texinfo.
+ Texinfo is the official documentation format of the GNU project.
+ Texinfo uses a single source file to produce output in a number of formats,
+ both online and printed (dvi, info, html, xml, etc.). This means that
+ instead of writing different documents for online information and another
+ for a printed manual, you need write only one document. And when the work
+ is revised, you need revise only that one document.
+ 
+ @end table
+ 
+ 
+ For compiling the native AWT libraries you need to have the following
+ libraries installed:
+ 
+ @table @b
+ @item GTK+ 2.2.x
+ @uref{http://www.gtk.org/,GTK+} is a multi-platform toolkit for
+ creating graphical user interfaces.  It is used as the basis of the
+ GNU desktop project GNOME.
+ 
+ @item gdk-pixbuf
+ @uref{http://www.gnome.org/start/,gdk-pixbuf} is a GNOME library for
+ representing images.
+ @end table
+ 
+ 
+ GNU Classpath comes with a couple of libraries included in the source
+ that are not part of GNU Classpath proper, but that have been included
+ to provide certain needed functionality.  All these external libraries
+ should be clearly marked as such.  In general we try to use as much as
+ possible the clean upstream versions of these sources.  That way
+ merging in new versions will be easiest.  You should always try to get
+ bug fixes to these files accepted upstream first.  Currently we
+ include the following 'external' libraries.  Most of these sources are
+ included in the @file{external} directory.  That directory also
+ contains a @file{README} file explaining how to import newer versions.
+ 
+ @table @b
+ 
+ @item GNU jaxp
+ Can be found in @file{external/jaxp}.  Provides javax.xml, org.w3c and
+ org.xml packages.  Upstream is
+ @uref{http://www.gnu.org/software/classpathx/,GNU ClasspathX}.
+ 
+ @item fdlibm
+ Can be found in @file{native/fdlibm}.  Provides native implementations
+ of some of the Float and Double operations.  Upstream is
+ @uref{http://gcc.gnu.org/java/,libgcj}, they sync again with the
+ 'real' upstream @uref{http://www.netlib.org/fdlibm/readme}.  See also
+ java.lang.StrictMath.
+ 
+ @end table
+ 
+ 
+ @node Programming Standards, Hacking Code, Needed Tools and Libraries, Top
+ @comment node-name, next, previous, up
+ @chapter Programming Standards
+ 
+ For C source code, follow the
+ @uref{http://www.gnu.org/prep/standards/,GNU Coding Standards}.
+ The standards also specify various things like the install directory
+ structure.  These should be followed if possible.
+ 
+ For Java source code, please follow the
+ @uref{http://www.gnu.org/prep/standards/,GNU Coding
+ Standards}, as much as possible.  There are a number of exceptions to
+ the GNU Coding Standards that we make for GNU Classpath as documented
+ in this guide.  We will hopefully be providing developers with a code
+ formatting tool that closely matches those rules soon.
+ 
+ For API documentation comments, please follow
+ @uref{http://java.sun.com/products/jdk/javadoc/writingdoccomments.html,How
+ to Write Doc Comments for Javadoc}.  We would like to have a set of
+ guidelines more tailored to GNU Classpath as part of this document.
+ 
+ @menu
+ * Source Code Style Guide::     
+ @end menu
+ 
+ @node Source Code Style Guide,  , Programming Standards, Programming Standards
+ @comment node-name, next, previous, up
+ @section Java source coding style
+ 
+ Here is a list of some specific rules used when hacking on GNU
+ Classpath java source code. We try to follow the standard
+ @uref{http://www.gnu.org/prep/standards/,GNU Coding Standards}
+ for that. There are lots of tools that can automatically generate it
+ (although most tools assume C source, not java source code) and it
+ seems as good a standard as any. There are a couple of exceptions and
+ specific rules when hacking on GNU Classpath java source code however.
+ The following lists how code is formatted (and some other code
+ conventions):
+ 
+ 
+ @itemize
+ 
+ @item
+ Java source files in GNU Classpath are encoded using UTF-8.  However,
+ ordinarily it is considered best practice to use the ASCII subset of
+ UTF-8 and write non-ASCII characters using \u escapes.
+ 
+ @item
+ If possible, generate specific imports (expand) over java.io.* type
+ imports. Order by gnu, java, javax, org. There must be one blank line
+ between each group. The imports themselves are ordered alphabetically by
+ package name. Classes and interfaces occur before sub-packages. The
+ classes/interfaces are then also sorted alphabetical. Note that uppercase
+ characters occur before lowercase characters.
+ 
+ @example
+ import gnu.java.awt.EmbeddedWindow;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ import javax.swing.JFrame;
+ @end example
+ 
+ @item
+ Blank line after package statement, last import statement, classes,
+ interfaces, methods.
+ 
+ @item
+ Opening/closing brace for class and method is at the same level of
+ indent as the declaration.  All other braces are indented and content
+ between braces indented again.
+ 
+ @item
+ Since method definitions don't start in column zero anyway (since they
+ are always inside a class definition), the rational for easy grepping
+ for ``^method_def'' is mostly gone already. Since it is customary for
+ almost everybody who writes java source code to put modifiers, return
+ value and method name on the same line, we do too.
+ 
+ @c fixme Another rational for always indenting the method definition is that itmakes it a bit easier to distinguish methods in inner and anonymousclasses from code in their enclosing context. NEED EXAMPLE.
+ 
+ @item
+ Implements and extends on separate lines, throws too.  Indent extends,
+ implements, throws.  Apply deep indentation for method arguments.
+ 
+ @c fixme Needs example.
+ 
+ @item
+ Don't add a space between a method or constructor call/definition and
+ the open-bracket. This is because often the return value is an object on
+ which you want to apply another method or from which you want to access
+ a field.
+         
+ Don't write:
+ 
+ @example
+   getToolkit ().createWindow (this);
+ @end example
+ 
+ But write:
+ @example
+   getToolkit().createWindow(this);
+ @end example
+ 
+ @item
+ The GNU Coding Standard it gives examples for almost every construct
+ (if, switch, do, while, etc.).  One missing is the try-catch construct
+ which should be formatted as:
+ 
+ @example
+   try
+     @{
+       //
+     @}
+   catch (...)
+     @{
+       //
+     @}
+ @end example
+ 
+ @item
+ Wrap lines at 80 characters after assignments and before operators.
+ Wrap always before extends, implements, throws, and labels.
+ 
+ @item
+ Don't put multiple class definitions in the same file, except for
+ inner classes. File names (plus .java) and class names should be the
+ same.
+ 
+ @item
+ Don't catch a @code{NullPointerException} as an alternative to simply
+ checking for @code{null}.  It is clearer and usually more efficient
+ to simply write an explicit check.
+ 
+ For instance, don't write:
+ 
+ @example
+ try
+   @{
+     return foo.doit();
+   @}
+ catch (NullPointerException _)
+   @{
+     return 7;
+   @}
+ @end example
+ 
+ If your intent above is to check whether @samp{foo} is @code{null},
+ instead write:
+ 
+ @example
+ if (foo == null)
+   return 7;
+ else
+   return foo.doit();
+ @end example
+ 
+ @item
+ Don't use redundant modifiers or other redundant constructs.  Here is
+ some sample code that shows various redundant items in comments:
+ 
+ @example
+ /*import java.lang.Integer;*/
+ /*abstract*/ interface I @{
+    /*public abstract*/ void m();
+    /*public static final*/ int i = 1;
+    /*public static*/ class Inner @{@}
+ @}
+ final class C /*extends Object*/ @{
+    /*final*/ void m() @{@}
+ @}
+ @end example
+ 
+ Note that Jikes will generate warnings for redundant modifiers if you
+ use @code{+Predundant-modifiers} on the command line.
+ 
+ @item
+ Modifiers should be listed in the standard order recommended by the
+ JLS.  Jikes will warn for this when given @code{+Pmodifier-order}.
+ 
+ @item
+ Because the output of different compilers differs, we have
+ standardized on explicitly specifying @code{serialVersionUID} in
+ @code{Serializable} classes in Classpath.  This field should be
+ declared as @code{private static final}.  Note that a class may be
+ @code{Serializable} without being explicitly marked as such, due to
+ inheritance.  For instance, all subclasses of @code{Throwable} need to
+ have @code{serialVersionUID} declared.
+ @c fixme index
+ @c fixme link to the discussion
+ 
+ @item
+ Don't declare unchecked exceptions in the @code{throws} clause of a
+ method.  However, if throwing an unchecked exception is part of the
+ method's API, you should mention it in the Javadoc.
+ 
+ @item
+ When overriding @code{Object.equals}, remember that @code{instanceof}
+ filters out @code{null}, so an explicit check is not needed.
+ 
+ @item
+ When catching an exception and rethrowing a new exception you should
+ ``chain'' the Throwables.  Don't just add the String representation of
+ the caught exception.
+ 
+ @example
+   try
+     @{
+       // Some code that can throw
+     @}
+   catch (IOException ioe)
+     @{
+       throw (SQLException) new SQLException("Database corrupt").setCause(ioe);
+     @}
+ @end example
+ 
+ @item
+ Avoid the use of reserved words for identifiers.  This is obvious with those
+ such as @code{if} and @code{while} which have always been part of the Java
+ programming language, but you should be careful about accidentally using
+ words which have been added in later versions.  Notable examples are
+ @code{assert} (added in 1.4) and @code{enum} (added in 1.5).  Jikes will warn
+ of the use of the word @code{enum}, but, as it doesn't yet support the 1.5
+ version of the language, it will still allow this usage through.  A
+ compiler which supports 1.5 (e.g. the Eclipse compiler, ecj) will simply
+ fail to compile the offending source code.
+ 
+ @c fixme Describe Anonymous classes (example).
+ @c fixme Descibe Naming conventions when different from GNU Coding Standards.
+ @c fixme Describee API doc javadoc tags used.
+ 
+ @end itemize
+ 
+ Some things are the same as in the normal GNU Coding Standards:
+ 
+ @itemize
+ 
+ @item
+ Unnecessary braces can be removed, one line after an if, for, while as
+ examples.
+ 
+ @item
+ Space around operators (assignment, logical, relational, bitwise,
+ mathematical, shift).
+ 
+ @item
+ Blank line before single-line comments, multi-line comments, javadoc
+ comments.
+ 
+ @item
+ If more than 2 blank lines, trim to 2.
+ 
+ @item
+ Don't keep commented out code.  Just remove it or add a real comment
+ describing what it used to do and why it is changed to the current
+ implementation.
+ @end itemize
+ 
+ 
+ @node Hacking Code, Programming Goals, Programming Standards, Top
+ @comment node-name, next, previous, up
+ @chapter Working on the code, Working with others
+ 
+ There are a lot of people helping out with GNU Classpath.  Here are a
+ couple of practical guidelines to make working together on the code
+ smoother.
+ 
+ The main thing is to always discuss what you are up to on the
+ mailinglist.  Making sure that everybody knows who is working on what
+ is the most important thing to make sure we cooperate most
+ effectively.
+ 
+ We maintain a
+ @uref{http://www.gnu.org/software/classpath/tasks.html,Task List}
+ which contains items that you might want to work on.
+ 
+ Before starting to work on something please make sure you read this
+ complete guide.  And discuss it on list to make sure your work does
+ not duplicate or interferes with work someone else is already doing.
+ Always make sure that you submit things that are your own work.  And
+ that you have paperwork on file (as stated in the requirements
+ section) with the FSF authorizing the use of your additions.
+ 
+ Technically the GNU Classpath project is hosted on
+ @uref{http://savannah.gnu.org/,Savannah} a central point for
+ development, distribution and maintenance of GNU Software.  Here you
+ will find the
+ @uref{https://savannah.gnu.org/projects/classpath/,project page}, bug
+ reports, pending patches, links to mailing lists, news items and CVS.
+ 
+ You can find instructions on getting a CVS checkout for classpath at
+ @uref{https://savannah.gnu.org/cvs/?group=classpath}.
+ 
+ You don't have to get CVS commit write access to contribute, but it is
+ sometimes more convenient to be able to add your changes directly to
+ the project CVS. Please contact the GNU Classpath savannah admins to
+ arrange CVS access if you would like to have it.
+ 
+ Make sure to be subscribed to the commit-classpath mailinglist while
+ you are actively hacking on Classpath.  You have to send patches (cvs
+ diff -uN) to this list before committing.
+ 
+ We really want to have a pretty open check-in policy.  But this means
+ that you should be extra careful if you check something in.  If at all
+ in doubt or if you think that something might need extra explaining
+ since it is not completely obvious please make a little announcement
+ about the change on the mailinglist.  And if you do commit something
+ without discussing it first and another GNU Classpath hackers asks for
+ extra explanation or suggests to revert a certain commit then please
+ reply to the request by explaining why something should be so or if
+ you agree to revert it.  (Just reverting immediately is OK without
+ discussion, but then please don't mix it with other changes and please
+ say so on list.)
+ 
+ Patches that are already approved for libgcj or also OK for Classpath.
+ (But you still have to send a patch/diff to the list.)  All other
+ patches require you to think whether or not they are really OK and
+ non-controversial, or if you would like some feedback first on them
+ before committing.  We might get real commit rules in the future, for
+ now use your own judgment, but be a bit conservative.
+ 
+ Always contact the GNU Classpath maintainer before adding anything
+ non-trivial that you didn't write yourself and that does not come from
+ libgcj or from another known GNU Classpath or libgcj hacker.  If you
+ have been assigned to commit changes on behalf of another project or
+ a company always make sure they come from people who have signed the
+ papers for the FSF and/or fall under the arrangement your company made
+ with the FSF for contributions.  Mention in the ChangeLog who actually
+ wrote the patch.
+ 
+ Commits for completely unrelated changes they should be committed
+ separately (especially when doing a formatting change and a logical
+ change, do them in two separate commits). But do try to do a commit of
+ as much things/files that are done at the same time which can
+ logically be seen as part of the same change/cleanup etc.
+ 
+ When the change fixes an important bug or adds nice new functionality
+ please write a short entry for inclusion in the @file{NEWS} file.  If it
+ changes the VM interface you must mention that in both the @file{NEWS} file
+ and the VM Integration Guide.
+ 
+ All the ``rules'' are really meant to make sure that GNU Classpath
+ will be maintainable in the long run and to give all the projects that
+ are now using GNU Classpath an accurate view of the changes we make to
+ the code and to see what changed when.  If you think the requirements
+ are ``unworkable'' please try it first for a couple of weeks.  If you
+ still feel the same after having some more experience with the project
+ please feel free to bring up suggestions for improvements on the list.
+ But don't just ignore the rules!  Other hackers depend on them being
+ followed to be the most productive they can be (given the above
+ constraints).
+ 
+ @menu
+ * Writing ChangeLogs::          
+ @end menu
+ 
+ @node Writing ChangeLogs,  , Hacking Code, Hacking Code
+ @comment node-name, next, previous, up
+ @section Documenting what changed when with ChangeLog entries
+ 
+ To keep track of who did what when we keep an explicit ChangeLog entry
+ together with the code.  This mirrors the CVS commit messages and in
+ general the ChangeLog entry is the same as the CVS commit message.
+ This provides an easy way for people getting a (snapshot) release or
+ without access to the CVS server to see what happened when.  We do not
+ generate the ChangeLog file automatically from the CVS server since
+ that is not reliable.
+ 
+ A good ChangeLog entry guideline can be found in the Guile Manual at
+ @uref{http://www.gnu.org/software/guile/changelogs/guile-changelogs_3.html}.
+ 
+ Here are some example to explain what should or shouldn't be in a
+ ChangeLog entry (and the corresponding commit message):
+ 
+ @itemize
+ 
+ @item
+ The first line of a ChangeLog entry should be:
+ 
+ @example
+ [date] <two spaces> [full name] <two spaces> [email-contact]
+ @end example
+ 
+ The second line should be blank. All other lines should be indented
+ with one tab.
+ 
+ @item
+ Just state what was changed.  Why something is done as it is done in
+ the current code should be either stated in the code itself or be
+ added to one of the documentation files (like this Hacking Guide).
+ 
+ So don't write:
+ 
+ @example
+         * java/awt/font/OpenType.java: Remove 'public static final'
+         from OpenType tags, reverting the change of 2003-08-11.  See
+         Classpath discussion list of 2003-08-11.
+ @end example
+ 
+ Just state:
+ 
+ @example
+         * java/awt/font/OpenType.java: Remove 'public static final' from
+         all member fields.
+ @end example
+ 
+ In this case the reason for the change was added to this guide.
+ 
+ @item
+ Just as with the normal code style guide, don't make lines longer then
+ 80 characters.
+ 
+ @item
+ Just as with comments in the code. The ChangeLog entry should be a
+ full sentence, starting with a captital and ending with a period.
+ 
+ @item
+ Be precise in what changed, not the effect of the change (which should
+ be clear from the code/patch).  So don't write:
+ 
+ @example
+  * java/io/ObjectOutputStream.java : Allow putFields be called more 
+  than once.
+ @end example
+ 
+ But explain what changed and in which methods it was changed:
+ 
+ @example
+  * java/io/ObjectOutputStream.java (putFields): Don't call
+  markFieldsWritten(). Only create new PutField when
+  currentPutField is null.
+  (writeFields): Call markFieldsWritten().
+ @end example
+ 
+ @end itemize
+ 
+ The above are all just guidelines.  We all appreciate the fact that writing
+ ChangeLog entries, using a coding style that is not ``your own'' and the
+ CVS, patch and diff tools do take some time to getting used to.  So don't
+ feel like you have to do it perfect right away or that contributions
+ aren't welcome if they aren't ``perfect''.  We all learn by doing and
+ interacting with each other.
+ 
+ 
+ @node Programming Goals, API Compatibility, Hacking Code, Top
+ @comment node-name, next, previous, up
+ @chapter Programming Goals
+ 
+ When you write code for Classpath, write with three things in mind, and
+ in the following order: portability, robustness, and efficiency.
+ 
+ If efficiency breaks portability or robustness, then don't do it the
+ efficient way.  If robustness breaks portability, then bye-bye robust
+ code.  Of course, as a programmer you would probably like to find sneaky
+ ways to get around the issue so that your code can be all three ... the
+ following chapters will give some hints on how to do this.
+ 
+ @menu
+ * Portability::                 Writing Portable Software                
+ * Utility Classes::             Reusing Software
+ * Robustness::                  Writing Robust Software               
+ * Java Efficiency::             Writing Efficient Java            
+ * Native Efficiency::           Writing Efficient JNI          
+ * Security::                    Writing Secure Software
+ @end menu
+ 
+ @node Portability, Utility Classes, Programming Goals, Programming Goals
+ @comment node-name, next, previous, up
+ @section Portability
+ 
+ The portability goal for Classpath is the following:
+ 
+ @enumerate
+ @item
+ native functions for each platform that work across all VMs on that
+ platform
+ @item
+ a single classfile set that work across all VMs on all platforms that
+ support the native functions.
+ @end enumerate
+ 
+ For almost all of Classpath, this is a very feasible goal, using a
+ combination of JNI and native interfaces.  This is what you should shoot
+ for.  For those few places that require knowledge of the Virtual Machine
+ beyond that provided by the Java standards, the VM Interface was designed.
+ Read the Virtual Machine Integration Guide for more information.
+ 
+ Right now the only supported platform is Linux.  This will change as that
+ version stabilizes and we begin the effort to port to many other
+ platforms.  Jikes RVM runs Classpath on AIX, and generally the Jikes
+ RVM team fixes Classpath to work on that platform. 
+ 
+ @node Utility Classes, Robustness, Portability, Programming Goals
+ @comment  node-name,  next,  previous,  up
+ @section Utility Classes
+ 
+ At the moment, we are not very good at reuse of the JNI code.  There
+ have been some attempts, called @dfn{libclasspath}, to
+ create generally useful utility classes.  The utility classes are in
+ the directory @file{native/jni/classpath} and they are mostly declared
+ in @file{native/jni/classpath/jcl.h}.  These utility classes are
+ currently only discussed in @ref{Robustness} and in @ref{Native
+ Efficiency}.
+ 
+ There are more utility classes available that could be factored out if
+ a volunteer wants something nice to hack on.  The error reporting and
+ exception throwing functions and macros in
+ @file{native/jni/gtk-peer/gthread-jni.c} might be good
+ candidates for reuse.  There are also some generally useful utility
+ functions in @file{gnu_java_awt_peer_gtk_GtkMainThread.c} that could
+ be split out and put into libclasspath.
+ 
+ @node Robustness, Java Efficiency, Utility Classes, Programming Goals
+ @comment node-name, next, previous, up
+ @section Robustness
+ 
+ Native code is very easy to make non-robust.  (That's one reason Java is
+ so much better!)  Here are a few hints to make your native code more
+ robust.
+ 
+ Always check return values for standard functions.  It's sometimes easy
+ to forget to check that malloc() return for an error.  Don't make that
+ mistake.  (In fact, use JCL_malloc() in the jcl library instead--it will
+ check the return value and throw an exception if necessary.)
+ 
+ Always check the return values of JNI functions, or call
+ @code{ExceptionOccurred} to check whether an error occurred.  You must
+ do this after @emph{every} JNI call.  JNI does not work well when an
+ exception has been raised, and can have unpredictable behavior.
+ 
+ Throw exceptions using @code{JCL_ThrowException}.  This guarantees that if
+ something is seriously wrong, the exception text will at least get out
+ somewhere (even if it is stderr).
+ 
+ Check for null values of @code{jclass}es before you send them to JNI functions.
+ JNI does not behave nicely when you pass a null class to it: it
+ terminates Java with a "JNI Panic."
+ 
+ In general, try to use functions in @file{native/jni/classpath/jcl.h}.  They
+ check exceptions and return values and throw appropriate exceptions.
+ 
+ @node Java Efficiency, Native Efficiency, Robustness, Programming Goals
+ @comment node-name, next, previous, up
+ @section Java Efficiency
+ 
+ For methods which explicitly throw a @code{NullPointerException} when an
+ argument is passed which is null, per a Sun specification, do not write
+ code like:
+ 
+ @example
+ int 
+ strlen (String foo) throws NullPointerException
+ @{
+   if (foo == null)
+     throw new NullPointerException ("foo is null");
+   return foo.length ();
+ @}
+ @end example
+ 
+ Instead, the code should be written as:
+ 
+ @example
+ int
+ strlen (String foo) throws NullPointerException
+ @{
+   return foo.length ();
+ @}
+ @end example
+ 
+ Explicitly comparing foo to null is unnecessary, as the virtual machine
+ will throw a NullPointerException when length() is invoked.  Classpath
+ is designed to be as fast as possible -- every optimization, no matter
+ how small, is important.
+ 
+ @node Native Efficiency, Security, Java Efficiency, Programming Goals
+ @comment node-name, next, previous, up
+ @section Native Efficiency
+ 
+ You might think that using native methods all over the place would give
+ our implementation of Java speed, speed, blinding speed.  You'd be
+ thinking wrong.  Would you believe me if I told you that an empty
+ @emph{interpreted} Java method is typically about three and a half times
+ @emph{faster} than the equivalent native method?
+ 
+ Bottom line: JNI is overhead incarnate.  In Sun's implementation, even
+ the JNI functions you use once you get into Java are slow.
+ 
+ A final problem is efficiency of native code when it comes to things
+ like method calls, fields, finding classes, etc.  Generally you should
+ cache things like that in static C variables if you're going to use them
+ over and over again.  GetMethodID(), GetFieldID(), and FindClass() are
+ @emph{slow}.  Classpath provides utility libraries for caching methodIDs
+ and fieldIDs in @file{native/jni/classpath/jnilink.h}.  Other native data can
+ be cached between method calls using functions found in
+ @file{native/jni/classpath/native_state.h}.
+ 
+ Here are a few tips on writing native code efficiently:
+ 
+ Make as few native method calls as possible.  Note that this is not the
+ same thing as doing less in native method calls; it just means that, if
+ given the choice between calling two native methods and writing a single
+ native method that does the job of both, it will usually be better to
+ write the single native method.  You can even call the other two native
+ methods directly from your native code and not incur the overhead of a
+ method call from Java to C.
+ 
+ Cache @code{jmethodID}s and @code{jfieldID}s wherever you can.  String
+ lookups are 
+ expensive.  The best way to do this is to use the 
+ @file{native/jni/classpath/jnilink.h}
+ library.  It will ensure that @code{jmethodID}s are always valid, even if the
+ class is unloaded at some point.  In 1.1, jnilink simply caches a
+ @code{NewGlobalRef()} to the method's underlying class; however, when 1.2 comes
+ along, it will use a weak reference to allow the class to be unloaded
+ and then re-resolve the @code{jmethodID} the next time it is used.
+ 
+ Cache classes that you need to access often.  jnilink will help with
+ this as well.  The issue here is the same as the methodID and fieldID
+ issue--how to make certain the class reference remains valid.
+ 
+ If you need to associate native C data with your class, use Paul
+ Fisher's native_state library (NSA).  It will allow you to get and set
+ state fairly efficiently.  Japhar now supports this library, making
+ native state get and set calls as fast as accessing a C variable
+ directly.
+ 
+ If you are using native libraries defined outside of Classpath, then
+ these should be wrapped by a Classpath function instead and defined
+ within a library of their own.  This makes porting Classpath's native
+ libraries to new platforms easier in the long run.  It would be nice
+ to be able to use Mozilla's NSPR or Apache's APR, as these libraries
+ are already ported to numerous systems and provide all the necessary
+ system functions as well.
+ 
+ @node Security,  , Native Efficiency, Programming Goals
+ @comment  node-name,  next,  previous,  up
+ @section Security
+ 
+ Security is such a huge topic it probably deserves its own chapter.
+ Most of the current code needs to be audited for security to ensure
+ all of the proper security checks are in place within the Java
+ platform, but also to verify that native code is reasonably secure and
+ avoids common pitfalls, buffer overflows, etc.  A good source for
+ information on secure programming is the excellent HOWTO by David
+ Wheeler,
+ @uref{http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/index.html,Secure
+ Programming for Linux and Unix HOWTO}.
+ 
+ @node API Compatibility, Specification Sources, Programming Goals, Top
+ @comment  node-name,  next,  previous,  up
+ @chapter API Compatibility
+ 
+ @menu
+ * Serialization::               Serialization
+ * Deprecated Methods::          Deprecated methods
+ @end menu
+ 
+ @node Serialization, Deprecated Methods, API Compatibility, API Compatibility
+ @comment  node-name,  next,  previous,  up
+ @section Serialization
+ 
+ Sun has produced documentation concerning much of the information
+ needed to make Classpath serializable compatible with Sun
+ implementations.  Part of doing this is to make sure that every class
+ that is Serializable actually defines a field named serialVersionUID
+ with a value that matches the output of serialver on Sun's
+ implementation.  The reason for doing this is below.
+ 
+ If a class has a field (of any accessibility) named serialVersionUID
+ of type long, that is what serialver uses. Otherwise it computes a
+ value using some sort of hash function on the names of all method
+ signatures in the .class file.  The fact that different compilers
+ create different synthetic method signatures, such as access$0() if an
+ inner class needs access to a private member of an enclosing class,
+ make it impossible for two distinct compilers to reliably generate the
+ same serial #, because their .class files differ. However, once you
+ have a .class file, its serial # is unique, and the computation will
+ give the same result no matter what platform you execute on.
+ 
+ Serialization compatibility can be tested using tools provided with
+ @uref{http://www.kaffe.org/~stuart/japi/,Japitools}.  These
+ tools can test binary serialization compatibility and also provide
+ information about unknown serialized formats by writing these in XML
+ instead.  Japitools is also the primary means of checking API
+ compatibility for GNU Classpath with Sun's Java Platform.
+ 
+ @node Deprecated Methods,  , Serialization, API Compatibility
+ @comment  node-name,  next,  previous,  up
+ @section Deprecated Methods
+ 
+ Sun has a practice of creating ``alias'' methods, where a public or
+ protected method is deprecated in favor of a new one that has the same
+ function but a different name.  Sun's reasons for doing this vary; as
+ an example, the original name may contain a spelling error or it may
+ not follow Java naming conventions.
+ 
+ Unfortunately, this practice complicates class library code that calls
+ these aliased methods.  Library code must still call the deprecated
+ method so that old client code that overrides it continues to work.
+ But library code must also call the new version, because new code is
+ expected to override the new method.
+ 
+ The correct way to handle this (and the way Sun does it) may seem
+ counterintuitive because it means that new code is less efficient than
+ old code: the new method must call the deprecated method, and throughout
+ the library code calls to the old method must be replaced with calls to
+ the new one.
+ 
+ Take the example of a newly-written container laying out a component and
+ wanting to know its preferred size.  The Component class has a
+ deprecated preferredSize method and a new method, getPreferredSize. 
+ Assume that the container is laying out an old component that overrides
+ preferredSize and a new component that overrides getPreferredSize.  If
+ the container calls getPreferredSize and the default implementation of
+ getPreferredSize calls preferredSize, then the old component will have
+ its preferredSize method called and new code will have its
+ getPreferredSize method called.
+ 
+ Even using this calling scheme, an old component may still be laid out
+ improperly if it implements a method, getPreferredSize, that has the
+ same signature as the new Component.getPreferredSize.  But that is a
+ general problem -- adding new public or protected methods to a
+ widely-used class that calls those methods internally is risky, because
+ existing client code may have already declared methods with the same
+ signature.
+ 
+ The solution may still seem counterintuitive -- why not have the
+ deprecated method call the new method, then have the library always call
+ the old method?  One problem with that, using the preferred size example
+ again, is that new containers, which will use the non-deprecated
+ getPreferredSize, will not get the preferred size of old components.
+ 
+ @node Specification Sources, Naming Conventions, API Compatibility, Top
+ @comment node-name, next, previous, up
+ @chapter Specification Sources
+ 
+ There are a number of specification sources to use when working on
+ Classpath.  In general, the only place you'll find your classes
+ specified is in the JavaDoc documentation or possibly in the
+ corresponding white paper.  In the case of java.lang, java.io and
+ java.util, you should look at the Java Language Specification.
+ 
+ Here, however, is a list of specs, in order of canonicality:
+ 
+ @enumerate
+ @item
+ @uref{http://java.sun.com/docs/books/jls/clarify.html,Clarifications and Amendments to the JLS - 1.1}
+ @item
+ @uref{http://java.sun.com/docs/books/jls/html/1.1Update.html,JLS Updates
+ - 1.1}
+ @item
+ @uref{http://java.sun.com/docs/books/jls/html/index.html,The 1.0 JLS}
+ @item
+ @uref{http://java.sun.com/docs/books/vmspec/index.html,JVM spec - 1.1}
+ @item
+ @uref{http://java.sun.com/products/jdk/1.1/docs/guide/jni/spec/jniTOC.doc.html,JNI spec - 1.1}
+ @item
+ @uref{http://java.sun.com/products/jdk/1.1/docs/api/packages.html,Sun's javadoc - 1.1}
+ (since Sun's is the reference implementation, the javadoc is
+ documentation for the Java platform itself.)
+ @item
+ @uref{http://java.sun.com/products/jdk/1.2/docs/guide/jvmdi/jvmdi.html,JVMDI spec - 1.2},
+ @uref{http://java.sun.com/products/jdk/1.2/docs/guide/jni/jni-12.html,JNI spec - 1.2}
+ (sometimes gives clues about unspecified things in 1.1; if
+ it was not specified accurately in 1.1, then use the spec
+ for 1.2; also, we are using JVMDI in this project.)
+ @item
+ @uref{http://java.sun.com/products/jdk/1.2/docs/api/frame.html,Sun's javadoc - 1.2}
+ (sometimes gives clues about unspecified things in 1.1; if
+ it was not specified accurately in 1.1, then use the spec
+ for 1.2)
+ @item
+ @uref{http://developer.java.sun.com/developer/bugParade/index.html,The
+ Bug Parade}: I have obtained a ton of useful information about how
+ things do work and how they *should* work from the Bug Parade just by
+ searching for related bugs.  The submitters are very careful about their
+ use of the spec.  And if something is unspecified, usually you can find
+ a request for specification or a response indicating how Sun thinks it
+ should be specified here.
+ @end enumerate
+ 
+ You'll notice that in this document, white papers and specification
+ papers are more canonical than the JavaDoc documentation.  This is true
+ in general.
+ 
+ 
+ @node Naming Conventions, Character Conversions, Specification Sources, Top
+ @comment node-name, next, previous, up
+ @chapter Directory and File Naming Conventions
+ 
+ The Classpath directory structure is laid out in the following manner:
+ 
+ @example
+ classpath
+  |
+  |---->java
+  |       |
+  |       |-->awt
+  |       |-->io
+  |       |-->lang
+  |       |-->util
+  |       |     |
+  |       |     |--->zip
+  |       |     |--->jar
+  |       |-->net
+  |       |-->etc
+  |
+  |---->gnu
+  |       |
+  |       |-->java
+  |             |
+  |             |-->awt
+  |             |-->lang
+  |             |-->util
+  |             |     |
+  |             |     |-->zip
+  |             |-->etc
+  |
+  |---->native
+          |
+          |-->jni
+          |    |-->classpath
+          |    |-->gtk-peer
+          |    |-->java-io
+          |    |-->java-lang
+          |    |-->java-net
+          |    |-->java-util
+          |    |-->etc
+          |-->cni
+   
+ @end example
+ 
+ Here is a brief description of the toplevel directories and their contents.
+ 
+ @table @b
+ 
+ @item java
+ Contains the source code to the Java packages that make up the core
+ class library.  Because this is the public interface to Java, it is
+ important that the public classes, interfaces, methods, and variables
+ are exactly the same as specified in Sun's documentation.  The directory
+ structure is laid out just like the java package names.  For example,
+ the class java.util.zip would be in the directory java-util.
+ 
+ @item gnu/java
+ Internal classes (roughly analogous to Sun's sun.* classes) should go
+ under the @file{gnu/java} directory.  Classes related to a particular public
+ Java package should go in a directory named like that package.  For
+ example, classes related to java.util.zip should go under a directory
+ @file{gnu/java/util/zip}.  Sub-packages under the main package name are
+ allowed.  For classes spanning multiple public Java packages, pick an
+ appropriate name and see what everybody else thinks.
+ 
+ @item native
+ This directory holds native code needed by the public Java packages.
+ Each package has its own subdirectory, which is the ``flattened'' name
+ of the package.  For example, native method implementations for
+ java.util.zip should go in @file{native/classpath/java-util}.  Classpath
+ actually includes an all Java version of the zip classes, so no native
+ code is required.
+ 
+ @end table
+ 
+ Each person working on a package get's his or her own ``directory
+ space'' underneath each of the toplevel directories.  In addition to the
+ general guidelines above, the following standards should be followed:
+ 
+ @itemize @bullet
+ 
+ @item
+ Classes that need to load native code should load a library with the
+ same name as the flattened package name, with all hyphens removed.  For
+ example, the native library name specified in LoadLibrary for
+ java-util would be ``javautil''.
+ 
+ @item
+ Each package has its own shared library for native code (if any).
+ 
+ @item
+ The main native method implementation for a given method in class should
+ go in a file with the same name as the class with a ``.c'' extension.
+ For example, the JNI implementation of the native methods in
+ java.net.InetAddress would go in @file{native/jni/java-net/InetAddress.c}.
+ ``Internal'' native functions called from the main native method can
+ reside in files of any name.
+ @end itemize
+ 
+ @node Character Conversions, Localization, Naming Conventions, Top
+ @comment node-name, next, previous, up
+ @chapter Character Conversions
+ 
+ Java uses the Unicode character encoding system internally.  This is a
+ sixteen bit (two byte) collection of characters encompassing most of the
+ world's written languages.  However, Java programs must often deal with
+ outside interfaces that are byte (eight bit) oriented.  For example, a
+ Unix file, a stream of data from a network socket, etc.  Beginning with
+ Java 1.1, the @code{Reader} and @code{Writer} classes provide functionality
+ for dealing with character oriented streams.  The classes 
+ @code{InputStreamReader} and @code{OutputStreamWriter} bridge the gap
+ between byte streams and character streams by converting bytes to 
+ Unicode characters and vice versa.
+ 
+ In Classpath, @code{InputStreamReader} and @code{OutputStreamWriter}
+ rely on an internal class called @code{gnu.java.io.EncodingManager} to load
+ translaters that perform the actual conversion.  There are two types of
+ converters, encoders and decoders.  Encoders are subclasses of
+ @code{gnu.java.io.encoder.Encoder}.  This type of converter takes a Java
+ (Unicode) character stream or buffer and converts it to bytes using
+ a specified encoding scheme.  Decoders are a subclass of 
+ @code{gnu.java.io.decoder.Decoder}.  This type of converter takes a 
+ byte stream or buffer and converts it to Unicode characters.  The
+ @code{Encoder} and @code{Decoder} classes are subclasses of
+ @code{Writer} and @code{Reader} respectively, and so can be used in
+ contexts that require character streams, but the Classpath implementation
+ currently does not make use of them in this fashion.
+ 
+ The @code{EncodingManager} class searches for requested encoders and
+ decoders by name.  Since encoders and decoders are separate in Classpath,
+ it is possible to have a decoder without an encoder for a particular 
+ encoding scheme, or vice versa.  @code{EncodingManager} searches the
+ package path specified by the @code{file.encoding.pkg} property.  The
+ name of the encoder or decoder is appended to the search path to
+ produce the required class name.  Note that @code{EncodingManager} knows
+ about the default system encoding scheme, which it retrieves from the
+ system property @code{file.encoding}, and it will return the proper
+ translator for the default encoding if no scheme is specified.  Also, the 
+ Classpath standard translator library, which is the @code{gnu.java.io} package, 
+ is automatically appended to the end of the path.
+ 
+ For efficiency, @code{EncodingManager} maintains a cache of translators
+ that it has loaded.  This eliminates the need to search for a commonly
+ used translator each time it is requested.
+ 
+ Finally, @code{EncodingManager} supports aliasing of encoding scheme names.
+ For example, the ISO Latin-1 encoding scheme can be referred to as
+ ''8859_1'' or ''ISO-8859-1''.  @code{EncodingManager} searches for 
+ aliases by looking for the existence of a system property called
+ @code{gnu.java.io.encoding_scheme_alias.<encoding name>}.  If such a
+ property exists.  The value of that property is assumed to be the
+ canonical name of the encoding scheme, and a translator with that name is 
+ looked up instead of one with the original name.
+ 
+ Here is an example of how @code{EncodingManager} works.  A class requests
+ a decoder for the ''UTF-8'' encoding scheme by calling
+ @code{EncodingManager.getDecoder("UTF-8")}.  First, an alias is searched
+ for by looking for the system property 
+ @code{gnu.java.io.encoding_scheme_alias.UTF-8}.  In our example, this
+ property exists and has the value ''UTF8''.  That is the actual
+ decoder that will be searched for.  Next, @code{EncodingManager} looks
+ in its cache for this translator.  Assuming it does not find it, it
+ searches the translator path, which is this example consists only of
+ the default @code{gnu.java.io}.  The ''decoder'' package name is 
+ appended since we are looking for a decoder.  (''encoder'' would be 
+ used if we were looking for an encoder).  Then name name of the translator
+ is appended.  So @code{EncodingManager} attempts to load a translator
+ class called @code{gnu.java.io.decoder.UTF8}.  If that class is found,
+ an instance of it is returned.  If it is not found, a
+ @code{UnsupportedEncodingException}.
+ 
+ To write a new translator, it is only necessary to subclass 
+ @code{Encoder} and/or @code{Decoder}.  Only a handful of abstract
+ methods need to be implemented.  In general, no methods need to be
+ overridden.  The needed methods calculate the number of bytes/chars
+ that the translation will generate, convert buffers to/from bytes,
+ and read/write a requested number of characters to/from a stream.
+ 
+ Many common encoding schemes use only eight bits to encode characters.
+ Writing a translator for these encodings is very easy.  There are 
+ abstract translator classes @code{gnu.java.io.decode.DecoderEightBitLookup}
+ and @code{gnu.java.io.encode.EncoderEightBitLookup}.  These classes
+ implement all of the necessary methods.  All that is necessary to
+ create a lookup table array that maps bytes to Unicode characters and
+ set the class variable @code{lookup_table} equal to it in a static
+ initializer.  Also, a single constructor that takes an appropriate
+ stream as an argument must be supplied.  These translators are
+ exceptionally easy to create and there are several of them supplied
+ in the Classpath distribution.
+ 
+ Writing multi-byte or variable-byte encodings is more difficult, but
+ often not especially challenging.  The Classpath distribution ships with
+ translators for the UTF8 encoding scheme which uses from one to three
+ bytes to encode Unicode characters.  This can serve as an example of
+ how to write such a translator.
+ 
+ Many more translators are needed.  All major character encodings should
+ eventually be supported.
+ 
+ @node Localization,  , Character Conversions, Top
+ @comment node-name, next, previous, up
+ @chapter Localization
+ 
+ There are many parts of the Java standard runtime library that must
+ be customized to the particular locale the program is being run in.
+ These include the parsing and display of dates, times, and numbers;
+ sorting words alphabetically; breaking sentences into words, etc.
+ In general, Classpath uses general classes for performing these tasks,
+ and customizes their behavior with configuration data specific to a
+ given locale.
+ 
+ @menu
+ * String Collation::            Sorting strings in different locales
+ * Break Iteration::             Breaking up text into words, sentences, and lines
+ * Date Formatting and Parsing::  Locale specific date handling
+ * Decimal/Currency Formatting and Parsing::  Local specific number handling
+ @end menu
+ 
+ In Classpath, all locale specific data is stored in a 
+ @code{ListResourceBundle} class in the package @code{gnu/java/locale}.
+ The basename of the bundle is @code{LocaleInformation}.  See the
+ documentation for the @code{java.util.ResourceBundle} class for details
+ on how the specific locale classes should be named.
+ 
+ @code{ListResourceBundle}'s are used instead of 
+ @code{PropertyResourceBundle}'s because data more complex than simple
+ strings need to be provided to configure certain Classpath components.
+ Because @code{ListResourceBundle} allows an arbitrary Java object to
+ be associated with a given configuration option, it provides the
+ needed flexibility to accomodate Classpath's needs.
+ 
+ Each Java library component that can be localized requires that certain
+ configuration options be specified in the resource bundle for it.  It is
+ important that each and every option be supplied for a specific 
+ component or a critical runtime error will most likely result.
+ 
+ As a standard, each option should be assigned a name that is a string.
+ If the value is stored in a class or instance variable, then the option
+ should name should have the name name as the variable.  Also, the value
+ associated with each option should be a Java object with the same name
+ as the option name (unless a simple scalar value is used).  Here is an
+ example:
+ 
+ A class loads a value for the @code{format_string} variable from the
+ resource bundle in the specified locale.  Here is the code in the
+ library class:
+ 
+ @example
+   ListResourceBundle lrb = 
+     ListResourceBundle.getBundle ("gnu/java/locale/LocaleInformation", locale);
+   String format_string = lrb.getString ("format_string");
+ @end example
+ 
+ In the actual resource bundle class, here is how the configuration option
+ gets defined:
+ 
+ @example
+ /**
+   * This is the format string used for displaying values
+   */
+ private static final String format_string = "%s %d %i";
+ 
+ private static final Object[][] contents =
+ @{
+   @{ "format_string", format_string @}
+ @};
+ @end example
+ 
+ Note that each variable should be @code{private}, @code{final}, and
+ @code{static}.  Each variable should also have a description of what it
+ does as a documentation comment.  The @code{getContents()} method returns
+ the @code{contents} array.
+ 
+ There are many functional areas of the standard class library that are
+ configured using this mechanism.  A given locale does not need to support
+ each functional area.  But if a functional area is supported, then all
+ of the specified entries for that area must be supplied.  In order to
+ determine which functional areas are supported, there is a special key
+ that is queried by the affected class or classes.  If this key exists, 
+ and has a value that is a @code{Boolean} object wrappering the
+ @code{true} value, then full support is assumed.  Otherwise it is
+ assumed that no support exists for this functional area.  Every class
+ using resources for configuration must use this scheme and define a special
+ scheme that indicates the functional area is supported.  Simply checking
+ for the resource bundle's existence is not sufficient to ensure that a
+ given functional area is supported.
+ 
+ The following sections define the functional areas that use resources
+ for locale specific configuration in GNU Classpath.  Please refer to the 
+ documentation for the classes mentioned for details on how these values 
+ are used.  You may also wish to look at the source file for 
+ @file{gnu/java/locale/LocaleInformation_en} as an example.
+ 
+ @node String Collation, Break Iteration, Localization, Localization
+ @comment node-name, next, previous, up
+ @section String Collation
+ 
+ Collation involves the sorting of strings.  The Java class library provides
+ a public class called @code{java.text.RuleBasedCollator} that performs
+ sorting based on a set of sorting rules.
+ 
+ @itemize @bullet
+ @item RuleBasedCollator - A @code{Boolean} wrappering @code{true} to indicate
+ that this functional area is supported.
+ @item collation_rules - The rules the specify how string collation is to
+ be performed.
+ @end itemize
+ 
+ Note that some languages might be too complex for @code{RuleBasedCollator}
+ to handle.  In this case an entirely new class might need to be written in
+ lieu of defining this rule string.
+ 
+ @node Break Iteration, Date Formatting and Parsing, String Collation, Localization
+ @comment node-name, next, previous, up
+ @section Break Iteration
+ 
+ The class @code{java.text.BreakIterator} breaks text into words, sentences,
+ and lines.  It is configured with the following resource bundle entries:
+ 
+ @itemize @bullet
+ @item BreakIterator - A @code{Boolean} wrappering @code{true} to indicate
+ that this functional area is supported.
+ @item word_breaks - A @code{String} array of word break character sequences.
+ @item sentence_breaks - A @code{String} array of sentence break character
+ sequences.
+ @item line_breaks - A @code{String} array of line break character sequences.
+ @end itemize
+ 
+ @node Date Formatting and Parsing, Decimal/Currency Formatting and Parsing, Break Iteration, Localization
+ @comment node-name, next, previous, up
+ @section Date Formatting and Parsing
+ 
+ Date formatting and parsing is handled by the 
+ @code{java.text.SimpleDateFormat} class in most locales.  This class is
+ configured by attaching an instance of the @code{java.text.DateFormatSymbols}
+ class.  That class simply reads properties from our locale specific
+ resource bundle.  The following items are required (refer to the 
+ documentation of the @code{java.text.DateFormatSymbols} class for details
+ io what the actual values should be):
+ 
+ @itemize @bullet
+ @item DateFormatSymbols - A @code{Boolean} wrappering @code{true} to indicate
+ that this functional area is supported.
+ @item months - A @code{String} array of month names.
+ @item shortMonths - A @code{String} array of abbreviated month names.
+ @item weekdays - A @code{String} array of weekday names.
+ @item shortWeekdays - A @code{String} array of abbreviated weekday names.
+ @item ampms - A @code{String} array containing AM/PM names.
+ @item eras - A @code{String} array containing era (ie, BC/AD) names.
+ @item zoneStrings - An array of information about valid timezones for this 
+ locale.
+ @item localPatternChars - A @code{String} defining date/time pattern symbols.
+ @item shortDateFormat - The format string for dates used by 
+ @code{DateFormat.SHORT}
+ @item mediumDateFormat - The format string for dates used by 
+ @code{DateFormat.MEDIUM}
+ @item longDateFormat - The format string for dates used by 
+ @code{DateFormat.LONG}
+ @item fullDateFormat - The format string for dates used by 
+ @code{DateFormat.FULL}
+ @item shortTimeFormat - The format string for times used by 
+ @code{DateFormat.SHORT}
+ @item mediumTimeFormat - The format string for times used by 
+ @code{DateFormat.MEDIUM}
+ @item longTimeFormat - The format string for times used by 
+ @code{DateFormat.LONG}
+ @item fullTimeFormat - The format string for times used by 
+ @code{DateFormat.FULL}
+ @end itemize
+ 
+ Note that it may not be possible to use this mechanism for all locales.
+ In those cases a special purpose class may need to be written to handle 
+ date/time processing.
+ 
+ @node Decimal/Currency Formatting and Parsing,  , Date Formatting and Parsing, Localization
+ @comment node-name, next, previous, up
+ @section Decimal/Currency Formatting and Parsing
+ 
+ @code{NumberFormat} is an abstract class for formatting and parsing numbers.
+ The class @code{DecimalFormat} provides a concrete subclass that handles
+ this is in a locale independent manner.  As with @code{SimpleDateFormat},
+ this class gets information on how to format numbers from a class that
+ wrappers a collection of locale specific formatting values.  In this case,
+ the class is @code{DecimalFormatSymbols}.  That class reads its default
+ values for a locale from the resource bundle.  The required entries are:
+ 
+ @itemize @bullet
+ @item DecimalFormatSymbols - A @code{Boolean} wrappering @code{true} to 
+ indicate that this functional area is supported.
+ @item currencySymbol - The string representing the local currency.
+ @item intlCurrencySymbol - The string representing the local currency in an
+ international context.
+ @item decimalSeparator - The character to use as the decimal point as a
+ @code{String}.
+ @item digit - The character used to represent digits in a format string,
+ as a @code{String}.
+ @item exponential - The char used to represent the exponent separator of a 
+ number written in scientific notation, as a @code{String}.
+ @item groupingSeparator - The character used to separate groups of numbers
+ in a large number, such as the ``,'' separator for thousands in the US, as
+ a @code{String}.
+ @item infinity - The string representing infinity.
+ @item NaN - The string representing the Java not a number value.
+ @item minusSign - The character representing the negative sign, as a 
+ @code{String}.
+ @item monetarySeparator - The decimal point used in currency values, as a
+ @code{String}.
+ @item patternSeparator - The character used to separate positive and 
+ negative format patterns, as a @code{String}.
+ @item percent - The percent sign, as a @code{String}.
+ @item perMill - The per mille sign, as a @code{String}.
+ @item zeroDigit - The character representing the digit zero, as a @code{String}.
+ @end itemize
+ 
+ Note that several of these values are an individual character.  These should
+ be wrappered in a @code{String} at character position 0, not in a
+ @code{Character} object.
+ 
+ @bye
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/native.api gcc-4.1.0/libjava/classpath/doc/native.api
*** gcc-4.0.2/libjava/classpath/doc/native.api	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/native.api	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,81 ----
+ GNU Classpath Native State API - Version 0.99.1
+ Written by Paul Fisher (rao@gnu.org)
+ 
+ For all function calls, if an error occurs, such that `NULL' or a
+ negative value is returned, it's very possible that an exception has
+ been thrown from within the function.  The exception is not cleared,
+ and you are responsible for dealing with the thrown exception.
+ 
+ High level API:
+ 
+ For using the highlevel API, in all cases, OBJ must contain a `final
+ int' field called "native_state", which has been previously set to the
+ value of java.lang.System.identityHashCode(OBJ).
+ 
+ Function: struct state_table * init_state_table (JNIEnv *ENV, 
+                                                  jclass CLAZZ)
+ 
+   Creates a state table of default size.  Returns `NULL' on error.
+ 
+ Function: struct state_table * init_state_table_with_size (JNIEnv *ENV,
+                                                            jclass CLAZZ,
+                                                            jint SIZE)
+ 
+   Creates a state table, with a tablesize of SIZE.  SIZE should
+   always be prime.  Returns `NULL' on error.
+ 
+ Function: jint set_state (JNIEnv *ENV, jobject OBJ, 
+                           struct state_table *TABLE, void *STATE)
+ 
+   Associates STATE with OBJ, in TABLE.  Returns 0 on success, and a
+   negative value on failure.  STATE must not be `NULL'.  set_state is
+   reentrant, and calls to set_state/get_state/remove_state_slot may be
+   made at the same time.
+         
+ Function: void * get_state (JNIEnv *ENV, jobject OBJ,
+                             struct state_table *TABLE)
+ 
+   Retrieves the state associated with OBJ, in TABLE.  Returns `NULL'
+   if no value is associated with OBJ, or if a failure occurs.
+   get_state is reentrant, and calls to
+   get_state/set_state/remove_state_slot may be made at the same time.
+ 
+ Function: void * remove_state_slot (JNIEnv *ENV, jobject OBJ,
+                                     struct state_table *TABLE)
+ 
+   Removes the internal slot associated with OBJ, in TABLE.  Returns a
+   pointer to the C state if a state was associated with OBJ,
+   otherwise, `NULL' is returned.  After `remove_state' is called,
+   `get_state' passing OBJ, will result in `NULL' being returned.  This
+   function is generally called in the `finalize' method of a class.
+   remove_state_slot is reentrant, and calls to
+   get_state/set_state/remove_state_slot may be made at the same time.
+ 
+ Low level API:
+ 
+ Function: void set_state_oid (JNIEnv *ENV, jobject LOCK, 
+                               struct state_table *TABLE, 
+                               jint OBJECT_ID, void *STATE)
+ 
+   Associates STATE with OBJECT_ID, in TABLE.  STATE must not be
+   `NULL'.  On entering, a lock is obtained on LOCK.  On exiting, the
+   lock is released.
+ 
+ Function: void * get_state_oid (JNIEnv *ENV, jobject LOCK, 
+                                 struct state_table *TABLE, 
+                                 jint OBJECT_ID)
+ 
+   Retrieves the state associated with OBJECT_ID, in TABLE.  Returns
+   `NULL' if no value is associated with OBJECT_ID.  On entering, a
+   lock is obtained on LOCK.  On exiting, the lock is released.
+ 
+ Function: void * remove_state_oid (JNIEnv *ENV, jobject LOCK, 
+                                    struct state_table *TABLE, 
+                                    jint OBJECT_ID)
+ 
+   Removes the value associated with OBJECT_ID, in TABLE.  Returns a
+   pointer to the C state if a state was associated with OBJECT_ID,
+   otherwise, `NULL' is returned.  After `remove_state_oid' is called,
+   `get_state_oid' passing OBJECT_ID, will result in `NULL' being
+   returned.  On entering, a lock is obtained on LOCK.  On exiting, the
+   lock is released.
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/testing.framework.text gcc-4.1.0/libjava/classpath/doc/testing.framework.text
*** gcc-4.0.2/libjava/classpath/doc/testing.framework.text	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/testing.framework.text	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ Guile Testing Framework for GNU Classpath
+ Written by Paul Fisher (rao@gnu.org)
+ 
+ GNU Classpath tests are written in Java.  Guile is responsible for
+ executing the tests and organizing the results.  Guile and Java
+ communicate through JNI.  If JNI is unavailable, see the section on
+ modifying the framework to allow for an alternate means of
+ communication. [This has not been written. -PF]
+ 
+ All tests must implement gnu.test.Test.  gnu.test.Test contains two
+ methods:
+ 
+ 1. String getName()
+ 2. Result test()
+ 
+ When getName() is called, your test should return the name of the
+ test.  When test() is called, your test should be performed.  Upon
+ completion of the test (either through success or failure), a Result
+ object is returned.  test() may throw runtime exceptions and errors --
+ if this happens, an implicit error result is returned.
+ 
+ There are seven predefined result types, including the POSIX 1003.3
+ result codes.  All result objects may optionally be constructed with a
+ single String argument specifying additional information about the
+ result.
+ 
+ gnu.test.Pass        : Test passed and was excepted to pass.
+ gnu.test.XPass       : Test passed but was expected to fail.
+ gnu.test.Fail        : Test failed but was expected to pass.
+ gnu.test.XFail       : Test failed and was expected to fail.
+ gnu.test.Unresolved  : Test produced indeterminate results.
+ gnu.test.Untested    : Test was not run -- a placeholder.
+ gnu.test.Unsupported : Test does not have the required support to run.
+ 
+ (Error is also a valid result type, but only in Guile/JNI code.)
+ 
+ System.out and System.err are used for directing additional
+ information about the running test.  System.out should be used to send
+ status messages when tests are expected to take large amounts of time.
+ System.err should be used to send messages which are logged to the
+ verbose log.
+ 
+ Example test:
+ 
+ import gnu.test.*;
+ public class StringCharAtZeroTest implements Test
+ {
+   public getName() {
+     return "java.lang.String.charAt(0)";
+   }
+ 
+   public Result test() {
+     char ch = "foobar".charAt(0);
+     if (ch == 'f')
+       return new Pass();
+     else
+       return new Fail("zero index of \"foobar\" is '" + ch + "'");
+   }
+ }
+ 
+ It's often desirable to group multiple tests together into one file.
+ In this case, inner classes should be used.  There's also the added
+ benefit that tests can easily share data through static variables in
+ the parent class.
+ 
+ For example:
+ 
+ import gnu.test.*;
+ public class TestContainer {
+   public static class test1 implements Test {
+      String getName() {
+        return "test1";
+      }
+      Result test() {
+        // test1 ...
+      }
+   }
+   public static class test2 implements Test {
+     String getName() {
+       return "test2";
+     }
+     Result test() {
+       // test2 ...
+     }
+   }
+ }
+ 
+ The testsuite contains a file known as "tests.to.run" which contains a
+ newline delimited listing of all tests to be executed.  Just add the
+ name of the new test to the file and it'll be included in future runs
+ of the testsuite.
+ 
+ Running the testsuite:
+ guile-jvm -s test.scm tests.to.run
+ 
+ (It would be more natural for the testsuite to read from standard in
+ if a file was not specified, but read-line in Guile 1.3a is broken.)
+ 
+ Classes are located via the environmental variable CLASSPATH.
+ 
+ Results are sent to two log files -- one summary (classpath.sum) and
+ one verbose (classpath.log).
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/texinfo.tex gcc-4.1.0/libjava/classpath/doc/texinfo.tex
*** gcc-4.0.2/libjava/classpath/doc/texinfo.tex	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/texinfo.tex	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,6341 ----
+ % texinfo.tex -- TeX macros to handle Texinfo files.
+ %
+ % Load plain if necessary, i.e., if running under initex.
+ \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+ %
+ \def\texinfoversion{2002-06-04.06}
+ %
+ % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ %               2000, 01, 02 Free Software Foundation, Inc.
+ %
+ % This texinfo.tex file is free software; you can redistribute it and/or
+ % modify it under the terms of the GNU General Public License as
+ % published by the Free Software Foundation; either version 2, or (at
+ % your option) any later version.
+ %
+ % This texinfo.tex file 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
+ % General Public License for more details.
+ %
+ % You should have received a copy of the GNU General Public License
+ % along with this texinfo.tex file; see the file COPYING.  If not, write
+ % to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ % Boston, MA 02110-1301, USA.
+ %
+ % In other words, you are welcome to use, share and improve this program.
+ % You are forbidden to forbid anyone else to use, share and improve
+ % what you give them.   Help stamp out software-hoarding!
+ %
+ % Please try the latest version of texinfo.tex before submitting bug
+ % reports; you can get the latest version from:
+ %   ftp://ftp.gnu.org/gnu/texinfo.tex
+ %     (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
+ %   ftp://texinfo.org/texinfo/texinfo.tex
+ %   ftp://tug.org/tex/texinfo.tex
+ %     (and all CTAN mirrors, see http://www.ctan.org),
+ %   and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
+ % 
+ % The texinfo.tex in any given Texinfo distribution could well be out
+ % of date, so if that's what you're using, please check.
+ % 
+ % Texinfo has a small home page at http://texinfo.org/ and also
+ % http://www.gnu.org/software/texinfo.
+ %
+ % Send bug reports to bug-texinfo@gnu.org.  Please include including a
+ % complete document in each bug report with which we can reproduce the
+ % problem.  Patches are, of course, greatly appreciated.
+ %
+ % To process a Texinfo manual with TeX, it's most reliable to use the
+ % texi2dvi shell script that comes with the distribution.  For a simple
+ % manual foo.texi, however, you can get away with this:
+ %   tex foo.texi
+ %   texindex foo.??
+ %   tex foo.texi
+ %   tex foo.texi
+ %   dvips foo.dvi -o  # or whatever; this makes foo.ps.
+ % The extra TeX runs get the cross-reference information correct.
+ % Sometimes one run after texindex suffices, and sometimes you need more
+ % than two; texi2dvi does it as many times as necessary.
+ %
+ % It is possible to adapt texinfo.tex for other languages.  You can get
+ % the existing language-specific files from the full Texinfo distribution.
+ 
+ \message{Loading texinfo [version \texinfoversion]:}
+ 
+ % If in a .fmt file, print the version number
+ % and turn on active characters that we couldn't do earlier because
+ % they might have appeared in the input file name.
+ \everyjob{\message{[Texinfo version \texinfoversion]}%
+   \catcode`+=\active \catcode`\_=\active}
+ 
+ % Save some parts of plain tex whose names we will redefine.
+ \let\ptexb=\b
+ \let\ptexbullet=\bullet
+ \let\ptexc=\c
+ \let\ptexcomma=\,
+ \let\ptexdot=\.
+ \let\ptexdots=\dots
+ \let\ptexend=\end
+ \let\ptexequiv=\equiv
+ \let\ptexexclam=\!
+ \let\ptexi=\i
+ \let\ptexlbrace=\{
+ \let\ptexrbrace=\}
+ \let\ptexstar=\*
+ \let\ptext=\t
+ 
+ % We never want plain's outer \+ definition in Texinfo.
+ % For @tex, we can use \tabalign.
+ \let\+ = \relax
+ 
+ \message{Basics,}
+ \chardef\other=12
+ 
+ % If this character appears in an error message or help string, it
+ % starts a new line in the output.
+ \newlinechar = `^^J
+ 
+ % Set up fixed words for English if not already set.
+ \ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
+ \ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
+ \ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
+ \ifx\putwordin\undefined        \gdef\putwordin{in}\fi
+ \ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+ \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+ \ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
+ \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+ \ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
+ \ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
+ \ifx\putwordof\undefined        \gdef\putwordof{of}\fi
+ \ifx\putwordon\undefined        \gdef\putwordon{on}\fi
+ \ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
+ \ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
+ \ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
+ \ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
+ \ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
+ \ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
+ \ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
+ %
+ \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+ \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+ \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+ \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+ \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+ \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+ \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+ \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+ \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+ \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+ \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+ \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+ %
+ \ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
+ \ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
+ \ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
+ \ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
+ \ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
+ \ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
+ \ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
+ 
+ % Ignore a token.
+ %
+ \def\gobble#1{}
+ 
+ \hyphenation{ap-pen-dix}
+ \hyphenation{mini-buf-fer mini-buf-fers}
+ \hyphenation{eshell}
+ \hyphenation{white-space}
+ 
+ % Margin to add to right of even pages, to left of odd pages.
+ \newdimen \bindingoffset
+ \newdimen \normaloffset
+ \newdimen\pagewidth \newdimen\pageheight
+ 
+ % Sometimes it is convenient to have everything in the transcript file
+ % and nothing on the terminal.  We don't just call \tracingall here,
+ % since that produces some useless output on the terminal.
+ %
+ \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+ \ifx\eTeXversion\undefined
+ \def\loggingall{\tracingcommands2 \tracingstats2
+    \tracingpages1 \tracingoutput1 \tracinglostchars1
+    \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+    \showboxbreadth\maxdimen\showboxdepth\maxdimen
+ }%
+ \else
+ \def\loggingall{\tracingcommands3 \tracingstats2
+    \tracingpages1 \tracingoutput1 \tracinglostchars1
+    \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+    \tracingscantokens1 \tracingassigns1 \tracingifs1
+    \tracinggroups1 \tracingnesting2
+    \showboxbreadth\maxdimen\showboxdepth\maxdimen
+ }%
+ \fi
+ 
+ % add check for \lastpenalty to plain's definitions.  If the last thing
+ % we did was a \nobreak, we don't want to insert more space.
+ % 
+ \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+   \removelastskip\penalty-50\smallskip\fi\fi}
+ \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+   \removelastskip\penalty-100\medskip\fi\fi}
+ \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+   \removelastskip\penalty-200\bigskip\fi\fi}
+ 
+ % For @cropmarks command.
+ % Do @cropmarks to get crop marks.
+ %
+ \newif\ifcropmarks
+ \let\cropmarks = \cropmarkstrue
+ %
+ % Dimensions to add cropmarks at corners.
+ % Added by P. A. MacKay, 12 Nov. 1986
+ %
+ \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+ \newdimen\cornerlong  \cornerlong=1pc
+ \newdimen\cornerthick \cornerthick=.3pt
+ \newdimen\topandbottommargin \topandbottommargin=.75in
+ 
+ % Main output routine.
+ \chardef\PAGE = 255
+ \output = {\onepageout{\pagecontents\PAGE}}
+ 
+ \newbox\headlinebox
+ \newbox\footlinebox
+ 
+ % \onepageout takes a vbox as an argument.  Note that \pagecontents
+ % does insertions, but you have to call it yourself.
+ \def\onepageout#1{%
+   \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+   %
+   \ifodd\pageno  \advance\hoffset by \bindingoffset
+   \else \advance\hoffset by -\bindingoffset\fi
+   %
+   % Do this outside of the \shipout so @code etc. will be expanded in
+   % the headline as they should be, not taken literally (outputting ''code).
+   \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+   \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+   %
+   {%
+     % Have to do this stuff outside the \shipout because we want it to
+     % take effect in \write's, yet the group defined by the \vbox ends
+     % before the \shipout runs.
+     %
+     \escapechar = `\\     % use backslash in output files.
+     \indexdummies         % don't expand commands in the output.
+     \normalturnoffactive  % \ in index entries must not stay \, e.g., if
+                    % the page break happens to be in the middle of an example.
+     \shipout\vbox{%
+       % Do this early so pdf references go to the beginning of the page.
+       \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
+       %
+       \ifcropmarks \vbox to \outervsize\bgroup
+         \hsize = \outerhsize
+         \vskip-\topandbottommargin
+         \vtop to0pt{%
+           \line{\ewtop\hfil\ewtop}%
+           \nointerlineskip
+           \line{%
+             \vbox{\moveleft\cornerthick\nstop}%
+             \hfill
+             \vbox{\moveright\cornerthick\nstop}%
+           }%
+           \vss}%
+         \vskip\topandbottommargin
+         \line\bgroup
+           \hfil % center the page within the outer (page) hsize.
+           \ifodd\pageno\hskip\bindingoffset\fi
+           \vbox\bgroup
+       \fi
+       %
+       \unvbox\headlinebox
+       \pagebody{#1}%
+       \ifdim\ht\footlinebox > 0pt
+         % Only leave this space if the footline is nonempty.
+         % (We lessened \vsize for it in \oddfootingxxx.)
+         % The \baselineskip=24pt in plain's \makefootline has no effect.
+         \vskip 2\baselineskip
+         \unvbox\footlinebox
+       \fi
+       %
+       \ifcropmarks
+           \egroup % end of \vbox\bgroup
+         \hfil\egroup % end of (centering) \line\bgroup
+         \vskip\topandbottommargin plus1fill minus1fill
+         \boxmaxdepth = \cornerthick
+         \vbox to0pt{\vss
+           \line{%
+             \vbox{\moveleft\cornerthick\nsbot}%
+             \hfill
+             \vbox{\moveright\cornerthick\nsbot}%
+           }%
+           \nointerlineskip
+           \line{\ewbot\hfil\ewbot}%
+         }%
+       \egroup % \vbox from first cropmarks clause
+       \fi
+     }% end of \shipout\vbox
+   }% end of group with \turnoffactive
+   \advancepageno
+   \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+ }
+ 
+ \newinsert\margin \dimen\margin=\maxdimen
+ 
+ \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+ {\catcode`\@ =11
+ \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+ % marginal hacks, juha@viisa.uucp (Juha Takala)
+ \ifvoid\margin\else % marginal info is present
+   \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+ \dimen@=\dp#1 \unvbox#1
+ \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+ }
+ 
+ % Here are the rules for the cropmarks.  Note that they are
+ % offset so that the space between them is truly \outerhsize or \outervsize
+ % (P. A. MacKay, 12 November, 1986)
+ %
+ \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+ \def\nstop{\vbox
+   {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+ \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+ \def\nsbot{\vbox
+   {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+ 
+ % Parse an argument, then pass it to #1.  The argument is the rest of
+ % the input line (except we remove a trailing comment).  #1 should be a
+ % macro which expects an ordinary undelimited TeX argument.
+ %
+ \def\parsearg#1{%
+   \let\next = #1%
+   \begingroup
+     \obeylines
+     \futurelet\temp\parseargx
+ }
+ 
+ % If the next token is an obeyed space (from an @example environment or
+ % the like), remove it and recurse.  Otherwise, we're done.
+ \def\parseargx{%
+   % \obeyedspace is defined far below, after the definition of \sepspaces.
+   \ifx\obeyedspace\temp
+     \expandafter\parseargdiscardspace
+   \else
+     \expandafter\parseargline
+   \fi
+ }
+ 
+ % Remove a single space (as the delimiter token to the macro call).
+ {\obeyspaces %
+  \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
+ 
+ {\obeylines %
+   \gdef\parseargline#1^^M{%
+     \endgroup % End of the group started in \parsearg.
+     %
+     % First remove any @c comment, then any @comment.
+     % Result of each macro is put in \toks0.
+     \argremovec #1\c\relax %
+     \expandafter\argremovecomment \the\toks0 \comment\relax %
+     %
+     % Call the caller's macro, saved as \next in \parsearg.
+     \expandafter\next\expandafter{\the\toks0}%
+   }%
+ }
+ 
+ % Since all \c{,omment} does is throw away the argument, we can let TeX
+ % do that for us.  The \relax here is matched by the \relax in the call
+ % in \parseargline; it could be more or less anything, its purpose is
+ % just to delimit the argument to the \c.
+ \def\argremovec#1\c#2\relax{\toks0 = {#1}}
+ \def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
+ 
+ % \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
+ %    @end itemize  @c foo
+ % will have two active spaces as part of the argument with the
+ % `itemize'.  Here we remove all active spaces from #1, and assign the
+ % result to \toks0.
+ %
+ % This loses if there are any *other* active characters besides spaces
+ % in the argument -- _ ^ +, for example -- since they get expanded.
+ % Fortunately, Texinfo does not define any such commands.  (If it ever
+ % does, the catcode of the characters in questionwill have to be changed
+ % here.)  But this means we cannot call \removeactivespaces as part of
+ % \argremovec{,omment}, since @c uses \parsearg, and thus the argument
+ % that \parsearg gets might well have any character at all in it.
+ %
+ \def\removeactivespaces#1{%
+   \begingroup
+     \ignoreactivespaces
+     \edef\temp{#1}%
+     \global\toks0 = \expandafter{\temp}%
+   \endgroup
+ }
+ 
+ % Change the active space to expand to nothing.
+ %
+ \begingroup
+   \obeyspaces
+   \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
+ \endgroup
+ 
+ 
+ \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+ 
+ %% These are used to keep @begin/@end levels from running away
+ %% Call \inENV within environments (after a \begingroup)
+ \newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
+ \def\ENVcheck{%
+ \ifENV\errmessage{Still within an environment; press RETURN to continue}
+ \endgroup\fi} % This is not perfect, but it should reduce lossage
+ 
+ % @begin foo  is the same as @foo, for now.
+ \newhelp\EMsimple{Press RETURN to continue.}
+ 
+ \outer\def\begin{\parsearg\beginxxx}
+ 
+ \def\beginxxx #1{%
+ \expandafter\ifx\csname #1\endcsname\relax
+ {\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
+ \csname #1\endcsname\fi}
+ 
+ % @end foo executes the definition of \Efoo.
+ %
+ \def\end{\parsearg\endxxx}
+ \def\endxxx #1{%
+   \removeactivespaces{#1}%
+   \edef\endthing{\the\toks0}%
+   %
+   \expandafter\ifx\csname E\endthing\endcsname\relax
+     \expandafter\ifx\csname \endthing\endcsname\relax
+       % There's no \foo, i.e., no ``environment'' foo.
+       \errhelp = \EMsimple
+       \errmessage{Undefined command `@end \endthing'}%
+     \else
+       \unmatchedenderror\endthing
+     \fi
+   \else
+     % Everything's ok; the right environment has been started.
+     \csname E\endthing\endcsname
+   \fi
+ }
+ 
+ % There is an environment #1, but it hasn't been started.  Give an error.
+ %
+ \def\unmatchedenderror#1{%
+   \errhelp = \EMsimple
+   \errmessage{This `@end #1' doesn't have a matching `@#1'}%
+ }
+ 
+ % Define the control sequence \E#1 to give an unmatched @end error.
+ %
+ \def\defineunmatchedend#1{%
+   \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
+ }
+ 
+ 
+ % Single-spacing is done by various environments (specifically, in
+ % \nonfillstart and \quotations).
+ \newskip\singlespaceskip \singlespaceskip = 12.5pt
+ \def\singlespace{%
+   % Why was this kern here?  It messes up equalizing space above and below
+   % environments.  --karl, 6may93
+   %{\advance \baselineskip by -\singlespaceskip
+   %\kern \baselineskip}%
+   \setleading\singlespaceskip
+ }
+ 
+ %% Simple single-character @ commands
+ 
+ % @@ prints an @
+ % Kludge this until the fonts are right (grr).
+ \def\@{{\tt\char64}}
+ 
+ % This is turned off because it was never documented
+ % and you can use @w{...} around a quote to suppress ligatures.
+ %% Define @` and @' to be the same as ` and '
+ %% but suppressing ligatures.
+ %\def\`{{`}}
+ %\def\'{{'}}
+ 
+ % Used to generate quoted braces.
+ \def\mylbrace {{\tt\char123}}
+ \def\myrbrace {{\tt\char125}}
+ \let\{=\mylbrace
+ \let\}=\myrbrace
+ \begingroup
+   % Definitions to produce actual \{ & \} command in an index.
+   \catcode`\{ = 12 \catcode`\} = 12
+   \catcode`\[ = 1 \catcode`\] = 2
+   \catcode`\@ = 0 \catcode`\\ = 12
+   @gdef@lbracecmd[\{]%
+   @gdef@rbracecmd[\}]%
+ @endgroup
+ 
+ % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+ % Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
+ \let\, = \c
+ \let\dotaccent = \.
+ \def\ringaccent#1{{\accent23 #1}}
+ \let\tieaccent = \t
+ \let\ubaraccent = \b
+ \let\udotaccent = \d
+ 
+ % Other special characters: @questiondown @exclamdown
+ % Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
+ \def\questiondown{?`}
+ \def\exclamdown{!`}
+ 
+ % Dotless i and dotless j, used for accents.
+ \def\imacro{i}
+ \def\jmacro{j}
+ \def\dotless#1{%
+   \def\temp{#1}%
+   \ifx\temp\imacro \ptexi
+   \else\ifx\temp\jmacro \j
+   \else \errmessage{@dotless can be used only with i or j}%
+   \fi\fi
+ }
+ 
+ % Be sure we're in horizontal mode when doing a tie, since we make space
+ % equivalent to this in @example-like environments. Otherwise, a space
+ % at the beginning of a line will start with \penalty -- and
+ % since \penalty is valid in vertical mode, we'd end up putting the
+ % penalty on the vertical list instead of in the new paragraph.
+ {\catcode`@ = 11
+  % Avoid using \@M directly, because that causes trouble
+  % if the definition is written into an index file.
+  \global\let\tiepenalty = \@M
+  \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+ }
+ 
+ % @: forces normal size whitespace following.
+ \def\:{\spacefactor=1000 }
+ 
+ % @* forces a line break.
+ \def\*{\hfil\break\hbox{}\ignorespaces}
+ 
+ % @. is an end-of-sentence period.
+ \def\.{.\spacefactor=3000 }
+ 
+ % @! is an end-of-sentence bang.
+ \def\!{!\spacefactor=3000 }
+ 
+ % @? is an end-of-sentence query.
+ \def\?{?\spacefactor=3000 }
+ 
+ % @w prevents a word break.  Without the \leavevmode, @w at the
+ % beginning of a paragraph, when TeX is still in vertical mode, would
+ % produce a whole line of output instead of starting the paragraph.
+ \def\w#1{\leavevmode\hbox{#1}}
+ 
+ % @group ... @end group forces ... to be all on one page, by enclosing
+ % it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
+ % to keep its height that of a normal line.  According to the rules for
+ % \topskip (p.114 of the TeXbook), the glue inserted is
+ % max (\topskip - \ht (first item), 0).  If that height is large,
+ % therefore, no glue is inserted, and the space between the headline and
+ % the text is small, which looks bad.
+ %
+ \def\group{\begingroup
+   \ifnum\catcode13=\active \else
+     \errhelp = \groupinvalidhelp
+     \errmessage{@group invalid in context where filling is enabled}%
+   \fi
+   %
+   % The \vtop we start below produces a box with normal height and large
+   % depth; thus, TeX puts \baselineskip glue before it, and (when the
+   % next line of text is done) \lineskip glue after it.  (See p.82 of
+   % the TeXbook.)  Thus, space below is not quite equal to space
+   % above.  But it's pretty close.
+   \def\Egroup{%
+     \egroup           % End the \vtop.
+     \endgroup         % End the \group.
+   }%
+   %
+   \vtop\bgroup
+     % We have to put a strut on the last line in case the @group is in
+     % the midst of an example, rather than completely enclosing it.
+     % Otherwise, the interline space between the last line of the group
+     % and the first line afterwards is too small.  But we can't put the
+     % strut in \Egroup, since there it would be on a line by itself.
+     % Hence this just inserts a strut at the beginning of each line.
+     \everypar = {\strut}%
+     %
+     % Since we have a strut on every line, we don't need any of TeX's
+     % normal interline spacing.
+     \offinterlineskip
+     %
+     % OK, but now we have to do something about blank
+     % lines in the input in @example-like environments, which normally
+     % just turn into \lisppar, which will insert no space now that we've
+     % turned off the interline space.  Simplest is to make them be an
+     % empty paragraph.
+     \ifx\par\lisppar
+       \edef\par{\leavevmode \par}%
+       %
+       % Reset ^^M's definition to new definition of \par.
+       \obeylines
+     \fi
+     %
+     % Do @comment since we are called inside an environment such as
+     % @example, where each end-of-line in the input causes an
+     % end-of-line in the output.  We don't want the end-of-line after
+     % the `@group' to put extra space in the output.  Since @group
+     % should appear on a line by itself (according to the Texinfo
+     % manual), we don't worry about eating any user text.
+     \comment
+ }
+ %
+ % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+ % message, so this ends up printing `@group can only ...'.
+ %
+ \newhelp\groupinvalidhelp{%
+ group can only be used in environments such as @example,^^J%
+ where each line of input produces a line of output.}
+ 
+ % @need space-in-mils
+ % forces a page break if there is not space-in-mils remaining.
+ 
+ \newdimen\mil  \mil=0.001in
+ 
+ \def\need{\parsearg\needx}
+ 
+ % Old definition--didn't work.
+ %\def\needx #1{\par %
+ %% This method tries to make TeX break the page naturally
+ %% if the depth of the box does not fit.
+ %{\baselineskip=0pt%
+ %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
+ %\prevdepth=-1000pt
+ %}}
+ 
+ \def\needx#1{%
+   % Ensure vertical mode, so we don't make a big box in the middle of a
+   % paragraph.
+   \par
+   %
+   % If the @need value is less than one line space, it's useless.
+   \dimen0 = #1\mil
+   \dimen2 = \ht\strutbox
+   \advance\dimen2 by \dp\strutbox
+   \ifdim\dimen0 > \dimen2
+     %
+     % Do a \strut just to make the height of this box be normal, so the
+     % normal leading is inserted relative to the preceding line.
+     % And a page break here is fine.
+     \vtop to #1\mil{\strut\vfil}%
+     %
+     % TeX does not even consider page breaks if a penalty added to the
+     % main vertical list is 10000 or more.  But in order to see if the
+     % empty box we just added fits on the page, we must make it consider
+     % page breaks.  On the other hand, we don't want to actually break the
+     % page after the empty box.  So we use a penalty of 9999.
+     %
+     % There is an extremely small chance that TeX will actually break the
+     % page at this \penalty, if there are no other feasible breakpoints in
+     % sight.  (If the user is using lots of big @group commands, which
+     % almost-but-not-quite fill up a page, TeX will have a hard time doing
+     % good page breaking, for example.)  However, I could not construct an
+     % example where a page broke at this \penalty; if it happens in a real
+     % document, then we can reconsider our strategy.
+     \penalty9999
+     %
+     % Back up by the size of the box, whether we did a page break or not.
+     \kern -#1\mil
+     %
+     % Do not allow a page break right after this kern.
+     \nobreak
+   \fi
+ }
+ 
+ % @br   forces paragraph break
+ 
+ \let\br = \par
+ 
+ % @dots{} output an ellipsis using the current font.
+ % We do .5em per period so that it has the same spacing in a typewriter
+ % font as three actual period characters.
+ %
+ \def\dots{%
+   \leavevmode
+   \hbox to 1.5em{%
+     \hskip 0pt plus 0.25fil minus 0.25fil
+     .\hss.\hss.%
+     \hskip 0pt plus 0.5fil minus 0.5fil
+   }%
+ }
+ 
+ % @enddots{} is an end-of-sentence ellipsis.
+ %
+ \def\enddots{%
+   \leavevmode
+   \hbox to 2em{%
+     \hskip 0pt plus 0.25fil minus 0.25fil
+     .\hss.\hss.\hss.%
+     \hskip 0pt plus 0.5fil minus 0.5fil
+   }%
+   \spacefactor=3000
+ }
+ 
+ 
+ % @page    forces the start of a new page
+ %
+ \def\page{\par\vfill\supereject}
+ 
+ % @exdent text....
+ % outputs text on separate line in roman font, starting at standard page margin
+ 
+ % This records the amount of indent in the innermost environment.
+ % That's how much \exdent should take out.
+ \newskip\exdentamount
+ 
+ % This defn is used inside fill environments such as @defun.
+ \def\exdent{\parsearg\exdentyyy}
+ \def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
+ 
+ % This defn is used inside nofill environments such as @example.
+ \def\nofillexdent{\parsearg\nofillexdentyyy}
+ \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+ 
+ % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+ % paragraph.  For more general purposes, use the \margin insertion
+ % class.  WHICH is `l' or `r'.
+ %
+ \newskip\inmarginspacing \inmarginspacing=1cm
+ \def\strutdepth{\dp\strutbox}
+ %
+ \def\doinmargin#1#2{\strut\vadjust{%
+   \nobreak
+   \kern-\strutdepth
+   \vtop to \strutdepth{%
+     \baselineskip=\strutdepth
+     \vss
+     % if you have multiple lines of stuff to put here, you'll need to
+     % make the vbox yourself of the appropriate size.
+     \ifx#1l%
+       \llap{\ignorespaces #2\hskip\inmarginspacing}%
+     \else
+       \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+     \fi
+     \null
+   }%
+ }}
+ \def\inleftmargin{\doinmargin l}
+ \def\inrightmargin{\doinmargin r}
+ %
+ % @inmargin{TEXT [, RIGHT-TEXT]}
+ % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+ % else use TEXT for both).
+ % 
+ \def\inmargin#1{\parseinmargin #1,,\finish}
+ \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+   \setbox0 = \hbox{\ignorespaces #2}% 
+   \ifdim\wd0 > 0pt
+     \def\lefttext{#1}%  have both texts
+     \def\righttext{#2}%
+   \else
+     \def\lefttext{#1}%  have only one text
+     \def\righttext{#1}%
+   \fi
+   %
+   \ifodd\pageno
+     \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+   \else
+     \def\temp{\inleftmargin\lefttext}%
+   \fi
+   \temp
+ }
+ 
+ % @include file    insert text of that file as input.
+ % Allow normal characters that  we make active in the argument (a file name).
+ \def\include{\begingroup
+   \catcode`\\=12
+   \catcode`~=12
+   \catcode`^=12
+   \catcode`_=12
+   \catcode`|=12
+   \catcode`<=12
+   \catcode`>=12
+   \catcode`+=12
+   \parsearg\includezzz}
+ % Restore active chars for included file.
+ \def\includezzz#1{\endgroup\begingroup
+   % Read the included file in a group so nested @include's work.
+   \def\thisfile{#1}%
+   \input\thisfile
+ \endgroup}
+ 
+ \def\thisfile{}
+ 
+ % @center line   outputs that line, centered
+ 
+ \def\center{\parsearg\centerzzz}
+ \def\centerzzz #1{{\advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \centerline{#1}}}
+ 
+ % @sp n   outputs n lines of vertical space
+ 
+ \def\sp{\parsearg\spxxx}
+ \def\spxxx #1{\vskip #1\baselineskip}
+ 
+ % @comment ...line which is ignored...
+ % @c is the same as @comment
+ % @ignore ... @end ignore  is another way to write a comment
+ 
+ \def\comment{\begingroup \catcode`\^^M=\other%
+ \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+ \commentxxx}
+ {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+ 
+ \let\c=\comment
+ 
+ % @paragraphindent NCHARS
+ % We'll use ems for NCHARS, close enough.
+ % We cannot implement @paragraphindent asis, though.
+ % 
+ \def\asisword{asis} % no translation, these are keywords
+ \def\noneword{none}
+ %
+ \def\paragraphindent{\parsearg\doparagraphindent}
+ \def\doparagraphindent#1{%
+   \def\temp{#1}%
+   \ifx\temp\asisword
+   \else
+     \ifx\temp\noneword
+       \defaultparindent = 0pt
+     \else
+       \defaultparindent = #1em
+     \fi
+   \fi
+   \parindent = \defaultparindent
+ }
+ 
+ % @exampleindent NCHARS
+ % We'll use ems for NCHARS like @paragraphindent.
+ % It seems @exampleindent asis isn't necessary, but
+ % I preserve it to make it similar to @paragraphindent.
+ \def\exampleindent{\parsearg\doexampleindent}
+ \def\doexampleindent#1{%
+   \def\temp{#1}%
+   \ifx\temp\asisword
+   \else
+     \ifx\temp\noneword
+       \lispnarrowing = 0pt
+     \else
+       \lispnarrowing = #1em
+     \fi
+   \fi
+ }
+ 
+ % @asis just yields its argument.  Used with @table, for example.
+ %
+ \def\asis#1{#1}
+ 
+ % @math outputs its argument in math mode.
+ % We don't use $'s directly in the definition of \math because we need
+ % to set catcodes according to plain TeX first, to allow for subscripts,
+ % superscripts, special math chars, etc.
+ % 
+ % @math does not do math typesetting in section titles, index
+ % entries, and other such contexts where the catcodes are set before
+ % @math gets a chance to work.  This could perhaps be fixed, but for now
+ % at least we can have real math in the main text, where it's needed most.
+ %
+ \let\implicitmath = $%$ font-lock fix
+ %
+ % One complication: _ usually means subscripts, but it could also mean
+ % an actual _ character, as in @math{@var{some_variable} + 1}.  So make
+ % _ within @math be active (mathcode "8000), and distinguish by seeing
+ % if the current family is \slfam, which is what @var uses.
+ % 
+ {\catcode95 = \active  % 95 = _
+ \gdef\mathunderscore{%
+   \catcode95=\active
+   \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }}
+ %
+ % Another complication: we want \\ (and @\) to output a \ character.
+ % FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+ % this is not advertised and we don't care.  Texinfo does not
+ % otherwise define @\.
+ % 
+ % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+ \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+ %
+ \def\math{%
+   \tex
+   \mathcode`\_="8000 \mathunderscore
+   \let\\ = \mathbackslash
+   \implicitmath\finishmath}
+ \def\finishmath#1{#1\implicitmath\Etex}
+ 
+ % @bullet and @minus need the same treatment as @math, just above.
+ \def\bullet{\implicitmath\ptexbullet\implicitmath}
+ \def\minus{\implicitmath-\implicitmath}
+ 
+ % @refill is a no-op.
+ \let\refill=\relax
+ 
+ % If working on a large document in chapters, it is convenient to
+ % be able to disable indexing, cross-referencing, and contents, for test runs.
+ % This is done with @novalidate (before @setfilename).
+ %
+ \newif\iflinks \linkstrue % by default we want the aux files.
+ \let\novalidate = \linksfalse
+ 
+ % @setfilename is done at the beginning of every texinfo file.
+ % So open here the files we need to have open while reading the input.
+ % This makes it possible to make a .fmt file for texinfo.
+ \def\setfilename{%
+    \iflinks
+      \readauxfile
+    \fi % \openindices needs to do some work in any case.
+    \openindices
+    \fixbackslash  % Turn off hack to swallow `\input texinfo'.
+    \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+    %
+    % If texinfo.cnf is present on the system, read it.
+    % Useful for site-wide @afourpaper, etc.
+    % Just to be on the safe side, close the input stream before the \input.
+    \openin 1 texinfo.cnf
+    \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
+    \closein1
+    \temp
+    %
+    \comment % Ignore the actual filename.
+ }
+ 
+ % Called from \setfilename.
+ %
+ \def\openindices{%
+   \newindex{cp}%
+   \newcodeindex{fn}%
+   \newcodeindex{vr}%
+   \newcodeindex{tp}%
+   \newcodeindex{ky}%
+   \newcodeindex{pg}%
+ }
+ 
+ % @bye.
+ \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+ 
+ 
+ \message{pdf,}
+ % adobe `portable' document format
+ \newcount\tempnum
+ \newcount\lnkcount
+ \newtoks\filename
+ \newcount\filenamelength
+ \newcount\pgn
+ \newtoks\toksA
+ \newtoks\toksB
+ \newtoks\toksC
+ \newtoks\toksD
+ \newbox\boxA
+ \newcount\countA
+ \newif\ifpdf
+ \newif\ifpdfmakepagedest
+ 
+ \ifx\pdfoutput\undefined
+   \pdffalse
+   \let\pdfmkdest = \gobble
+   \let\pdfurl = \gobble
+   \let\endlink = \relax
+   \let\linkcolor = \relax
+   \let\pdfmakeoutlines = \relax
+ \else
+   \pdftrue
+   \pdfoutput = 1
+   \input pdfcolor
+   \def\dopdfimage#1#2#3{%
+     \def\imagewidth{#2}%
+     \def\imageheight{#3}%
+     % without \immediate, pdftex seg faults when the same image is
+     % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
+     \ifnum\pdftexversion < 14
+       \immediate\pdfimage
+     \else
+       \immediate\pdfximage
+     \fi
+       \ifx\empty\imagewidth\else width \imagewidth \fi
+       \ifx\empty\imageheight\else height \imageheight \fi
+       \ifnum\pdftexversion<13
+ 	 #1.pdf%
+        \else
+          {#1.pdf}%
+        \fi
+     \ifnum\pdftexversion < 14 \else
+       \pdfrefximage \pdflastximage
+     \fi}
+   \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
+   \def\pdfmkpgn#1{#1}
+   \let\linkcolor = \Blue  % was Cyan, but that seems light?
+   \def\endlink{\Black\pdfendlink}
+   % Adding outlines to PDF; macros for calculating structure of outlines
+   % come from Petr Olsak
+   \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+     \else \csname#1\endcsname \fi}
+   \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+     \advance\tempnum by1
+     \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+   \def\pdfmakeoutlines{{%
+     \openin 1 \jobname.toc
+     \ifeof 1\else\begingroup
+       \closein 1 
+       \indexnofonts
+       \def\tt{}
+       \let\_ = \normalunderscore
+       % Thanh's hack / proper braces in bookmarks  
+       \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+       \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+       %
+       \def\chapentry ##1##2##3{}
+       \let\appendixentry = \chapentry
+       \def\unnumbchapentry ##1##2{}
+       \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
+       \def\unnumbsecentry ##1##2##3{\advancenumber{chap##2}}
+       \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
+       \def\unnumbsubsecentry ##1##2##3##4{\advancenumber{sec##2.##3}}
+       \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
+       \def\unnumbsubsubsecentry ##1##2##3##4##5{\advancenumber{subsec##2.##3.##4}}
+       \input \jobname.toc
+       \def\chapentry ##1##2##3{%
+         \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
+       \let\appendixentry = \chapentry
+       \def\unnumbchapentry ##1##2{%
+         \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+       \def\secentry ##1##2##3##4{%
+         \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
+       \def\unnumbsecentry ##1##2##3{%
+         \pdfoutline goto name{\pdfmkpgn{##3}}{##1}}
+       \def\subsecentry ##1##2##3##4##5{%
+         \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
+       \def\unnumbsubsecentry ##1##2##3##4{%
+         \pdfoutline goto name{\pdfmkpgn{##4}}{##1}}
+       \def\subsubsecentry ##1##2##3##4##5##6{%
+         \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
+       \def\unnumbsubsubsecentry ##1##2##3##4##5{%
+         \pdfoutline goto name{\pdfmkpgn{##5}}{##1}}
+       \input \jobname.toc
+     \endgroup\fi
+   }}
+   \def\makelinks #1,{%
+     \def\params{#1}\def\E{END}%
+     \ifx\params\E
+       \let\nextmakelinks=\relax
+     \else
+       \let\nextmakelinks=\makelinks
+       \ifnum\lnkcount>0,\fi
+       \picknum{#1}%
+       \startlink attr{/Border [0 0 0]} 
+         goto name{\pdfmkpgn{\the\pgn}}%
+       \linkcolor #1%
+       \advance\lnkcount by 1%
+       \endlink
+     \fi
+     \nextmakelinks
+   }
+   \def\picknum#1{\expandafter\pn#1}
+   \def\pn#1{%
+     \def\p{#1}%
+     \ifx\p\lbrace
+       \let\nextpn=\ppn
+     \else
+       \let\nextpn=\ppnn
+       \def\first{#1}
+     \fi
+     \nextpn
+   }
+   \def\ppn#1{\pgn=#1\gobble}
+   \def\ppnn{\pgn=\first}
+   \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
+   \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+   \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+     \ifx\PP\D\let\nextsp\relax
+     \else\let\nextsp\skipspaces
+       \ifx\p\space\else\addtokens{\filename}{\PP}%
+         \advance\filenamelength by 1
+       \fi
+     \fi
+     \nextsp}
+   \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+   \ifnum\pdftexversion < 14
+     \let \startlink \pdfannotlink
+   \else
+     \let \startlink \pdfstartlink
+   \fi
+   \def\pdfurl#1{%
+     \begingroup
+       \normalturnoffactive\def\@{@}%
+       \let\value=\expandablevalue
+       \leavevmode\Red
+       \startlink attr{/Border [0 0 0]}%
+         user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+         % #1
+     \endgroup}
+   \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+   \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+   \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+   \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+   \def\maketoks{%
+     \expandafter\poptoks\the\toksA|ENDTOKS|
+     \ifx\first0\adn0
+     \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+     \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+     \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 
+     \else
+       \ifnum0=\countA\else\makelink\fi
+       \ifx\first.\let\next=\done\else
+         \let\next=\maketoks
+         \addtokens{\toksB}{\the\toksD}
+         \ifx\first,\addtokens{\toksB}{\space}\fi
+       \fi
+     \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+     \next}
+   \def\makelink{\addtokens{\toksB}%
+     {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+   \def\pdflink#1{%
+     \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+     \linkcolor #1\endlink}
+   \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+ \fi % \ifx\pdfoutput
+ 
+ 
+ \message{fonts,}
+ % Font-change commands.
+ 
+ % Texinfo sort of supports the sans serif font style, which plain TeX does not.
+ % So we set up a \sf analogous to plain's \rm, etc.
+ \newfam\sffam
+ \def\sf{\fam=\sffam \tensf}
+ \let\li = \sf % Sometimes we call it \li, not \sf.
+ 
+ % We don't need math for this one.
+ \def\ttsl{\tenttsl}
+ 
+ % Default leading.
+ \newdimen\textleading  \textleading = 13.2pt
+ 
+ % Set the baselineskip to #1, and the lineskip and strut size
+ % correspondingly.  There is no deep meaning behind these magic numbers
+ % used as factors; they just match (closely enough) what Knuth defined.
+ %
+ \def\lineskipfactor{.08333}
+ \def\strutheightpercent{.70833}
+ \def\strutdepthpercent {.29167}
+ %
+ \def\setleading#1{%
+   \normalbaselineskip = #1\relax
+   \normallineskip = \lineskipfactor\normalbaselineskip
+   \normalbaselines
+   \setbox\strutbox =\hbox{%
+     \vrule width0pt height\strutheightpercent\baselineskip
+                     depth \strutdepthpercent \baselineskip
+   }%
+ }
+ 
+ % Set the font macro #1 to the font named #2, adding on the
+ % specified font prefix (normally `cm').
+ % #3 is the font's design size, #4 is a scale factor
+ \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+ 
+ % Use cm as the default font prefix.
+ % To specify the font prefix, you must define \fontprefix
+ % before you read in texinfo.tex.
+ \ifx\fontprefix\undefined
+ \def\fontprefix{cm}
+ \fi
+ % Support font families that don't use the same naming scheme as CM.
+ \def\rmshape{r}
+ \def\rmbshape{bx}               %where the normal face is bold
+ \def\bfshape{b}
+ \def\bxshape{bx}
+ \def\ttshape{tt}
+ \def\ttbshape{tt}
+ \def\ttslshape{sltt}
+ \def\itshape{ti}
+ \def\itbshape{bxti}
+ \def\slshape{sl}
+ \def\slbshape{bxsl}
+ \def\sfshape{ss}
+ \def\sfbshape{ss}
+ \def\scshape{csc}
+ \def\scbshape{csc}
+ 
+ \newcount\mainmagstep
+ \ifx\bigger\relax
+   % not really supported.
+   \let\mainmagstep=\magstep1
+   \setfont\textrm\rmshape{12}{1000}
+   \setfont\texttt\ttshape{12}{1000}
+ \else
+   \mainmagstep=\magstephalf
+   \setfont\textrm\rmshape{10}{\mainmagstep}
+   \setfont\texttt\ttshape{10}{\mainmagstep}
+ \fi
+ % Instead of cmb10, you many want to use cmbx10.
+ % cmbx10 is a prettier font on its own, but cmb10
+ % looks better when embedded in a line with cmr10.
+ \setfont\textbf\bfshape{10}{\mainmagstep}
+ \setfont\textit\itshape{10}{\mainmagstep}
+ \setfont\textsl\slshape{10}{\mainmagstep}
+ \setfont\textsf\sfshape{10}{\mainmagstep}
+ \setfont\textsc\scshape{10}{\mainmagstep}
+ \setfont\textttsl\ttslshape{10}{\mainmagstep}
+ \font\texti=cmmi10 scaled \mainmagstep
+ \font\textsy=cmsy10 scaled \mainmagstep
+ 
+ % A few fonts for @defun, etc.
+ \setfont\defbf\bxshape{10}{\magstep1} %was 1314
+ \setfont\deftt\ttshape{10}{\magstep1}
+ \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
+ 
+ % Fonts for indices, footnotes, small examples (9pt).
+ \setfont\smallrm\rmshape{9}{1000}
+ \setfont\smalltt\ttshape{9}{1000}
+ \setfont\smallbf\bfshape{10}{900}
+ \setfont\smallit\itshape{9}{1000}
+ \setfont\smallsl\slshape{9}{1000}
+ \setfont\smallsf\sfshape{9}{1000}
+ \setfont\smallsc\scshape{10}{900}
+ \setfont\smallttsl\ttslshape{10}{900}
+ \font\smalli=cmmi9
+ \font\smallsy=cmsy9
+ 
+ % Fonts for small examples (8pt).
+ \setfont\smallerrm\rmshape{8}{1000}
+ \setfont\smallertt\ttshape{8}{1000}
+ \setfont\smallerbf\bfshape{10}{800}
+ \setfont\smallerit\itshape{8}{1000}
+ \setfont\smallersl\slshape{8}{1000}
+ \setfont\smallersf\sfshape{8}{1000}
+ \setfont\smallersc\scshape{10}{800}
+ \setfont\smallerttsl\ttslshape{10}{800}
+ \font\smalleri=cmmi8
+ \font\smallersy=cmsy8
+ 
+ % Fonts for title page:
+ \setfont\titlerm\rmbshape{12}{\magstep3}
+ \setfont\titleit\itbshape{10}{\magstep4}
+ \setfont\titlesl\slbshape{10}{\magstep4}
+ \setfont\titlett\ttbshape{12}{\magstep3}
+ \setfont\titlettsl\ttslshape{10}{\magstep4}
+ \setfont\titlesf\sfbshape{17}{\magstep1}
+ \let\titlebf=\titlerm
+ \setfont\titlesc\scbshape{10}{\magstep4}
+ \font\titlei=cmmi12 scaled \magstep3
+ \font\titlesy=cmsy10 scaled \magstep4
+ \def\authorrm{\secrm}
+ 
+ % Chapter (and unnumbered) fonts (17.28pt).
+ \setfont\chaprm\rmbshape{12}{\magstep2}
+ \setfont\chapit\itbshape{10}{\magstep3}
+ \setfont\chapsl\slbshape{10}{\magstep3}
+ \setfont\chaptt\ttbshape{12}{\magstep2}
+ \setfont\chapttsl\ttslshape{10}{\magstep3}
+ \setfont\chapsf\sfbshape{17}{1000}
+ \let\chapbf=\chaprm
+ \setfont\chapsc\scbshape{10}{\magstep3}
+ \font\chapi=cmmi12 scaled \magstep2
+ \font\chapsy=cmsy10 scaled \magstep3
+ 
+ % Section fonts (14.4pt).
+ \setfont\secrm\rmbshape{12}{\magstep1}
+ \setfont\secit\itbshape{10}{\magstep2}
+ \setfont\secsl\slbshape{10}{\magstep2}
+ \setfont\sectt\ttbshape{12}{\magstep1}
+ \setfont\secttsl\ttslshape{10}{\magstep2}
+ \setfont\secsf\sfbshape{12}{\magstep1}
+ \let\secbf\secrm
+ \setfont\secsc\scbshape{10}{\magstep2}
+ \font\seci=cmmi12 scaled \magstep1
+ \font\secsy=cmsy10 scaled \magstep2
+ 
+ % Subsection fonts (13.15pt).
+ \setfont\ssecrm\rmbshape{12}{\magstephalf}
+ \setfont\ssecit\itbshape{10}{1315}
+ \setfont\ssecsl\slbshape{10}{1315}
+ \setfont\ssectt\ttbshape{12}{\magstephalf}
+ \setfont\ssecttsl\ttslshape{10}{1315}
+ \setfont\ssecsf\sfbshape{12}{\magstephalf}
+ \let\ssecbf\ssecrm
+ \setfont\ssecsc\scbshape{10}{\magstep1}
+ \font\sseci=cmmi12 scaled \magstephalf
+ \font\ssecsy=cmsy10 scaled 1315
+ % The smallcaps and symbol fonts should actually be scaled \magstep1.5,
+ % but that is not a standard magnification.
+ 
+ % In order for the font changes to affect most math symbols and letters,
+ % we have to define the \textfont of the standard families.  Since
+ % texinfo doesn't allow for producing subscripts and superscripts except
+ % in the main text, we don't bother to reset \scriptfont and
+ % \scriptscriptfont (which would also require loading a lot more fonts).
+ %
+ \def\resetmathfonts{%
+   \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+   \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+   \textfont\ttfam=\tentt \textfont\sffam=\tensf
+ }
+ 
+ % The font-changing commands redefine the meanings of \tenSTYLE, instead
+ % of just \STYLE.  We do this so that font changes will continue to work
+ % in math mode, where it is the current \fam that is relevant in most
+ % cases, not the current font.  Plain TeX does \def\bf{\fam=\bffam
+ % \tenbf}, for example.  By redefining \tenbf, we obviate the need to
+ % redefine \bf itself.
+ \def\textfonts{%
+   \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+   \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+   \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
+   \resetmathfonts \setleading{\textleading}}
+ \def\titlefonts{%
+   \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+   \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+   \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+   \let\tenttsl=\titlettsl
+   \resetmathfonts \setleading{25pt}}
+ \def\titlefont#1{{\titlefonts\rm #1}}
+ \def\chapfonts{%
+   \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+   \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+   \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
+   \resetmathfonts \setleading{19pt}}
+ \def\secfonts{%
+   \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+   \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+   \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
+   \resetmathfonts \setleading{16pt}}
+ \def\subsecfonts{%
+   \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+   \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+   \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
+   \resetmathfonts \setleading{15pt}}
+ \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
+ \def\smallfonts{%
+   \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+   \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+   \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+   \let\tenttsl=\smallttsl
+   \resetmathfonts \setleading{10.5pt}}
+ \def\smallerfonts{%
+   \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+   \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+   \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+   \let\tenttsl=\smallerttsl
+   \resetmathfonts \setleading{9.5pt}}
+ \let\smallexamplefonts = \smallerfonts
+ 
+ % Set up the default fonts, so we can use them for creating boxes.
+ %
+ \textfonts
+ 
+ % Define these so they can be easily changed for other fonts.
+ \def\angleleft{$\langle$}
+ \def\angleright{$\rangle$}
+ 
+ % Count depth in font-changes, for error checks
+ \newcount\fontdepth \fontdepth=0
+ 
+ % Fonts for short table of contents.
+ \setfont\shortcontrm\rmshape{12}{1000}
+ \setfont\shortcontbf\bxshape{12}{1000}
+ \setfont\shortcontsl\slshape{12}{1000}
+ 
+ %% Add scribe-like font environments, plus @l for inline lisp (usually sans
+ %% serif) and @ii for TeX italic
+ 
+ % \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+ % unless the following character is such as not to need one.
+ \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
+ \def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
+ \def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
+ 
+ \let\i=\smartitalic
+ \let\var=\smartslanted
+ \let\dfn=\smartslanted
+ \let\emph=\smartitalic
+ \let\cite=\smartslanted
+ 
+ \def\b#1{{\bf #1}}
+ \let\strong=\b
+ 
+ % We can't just use \exhyphenpenalty, because that only has effect at
+ % the end of a paragraph.  Restore normal hyphenation at the end of the
+ % group within which \nohyphenation is presumably called.
+ %
+ \def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
+ \def\restorehyphenation{\hyphenchar\font = `- }
+ 
+ \def\t#1{%
+   {\tt \rawbackslash \frenchspacing #1}%
+   \null
+ }
+ \let\ttfont=\t
+ \def\samp#1{`\tclose{#1}'\null}
+ \setfont\keyrm\rmshape{8}{1000}
+ \font\keysy=cmsy9
+ \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+   \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+     \vbox{\hrule\kern-0.4pt
+      \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+     \kern-0.4pt\hrule}%
+   \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+ % The old definition, with no lozenge:
+ %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+ \def\ctrl #1{{\tt \rawbackslash \hat}#1}
+ 
+ % @file, @option are the same as @samp.
+ \let\file=\samp
+ \let\option=\samp
+ 
+ % @code is a modification of @t,
+ % which makes spaces the same size as normal in the surrounding text.
+ \def\tclose#1{%
+   {%
+     % Change normal interword space to be same as for the current font.
+     \spaceskip = \fontdimen2\font
+     %
+     % Switch to typewriter.
+     \tt
+     %
+     % But `\ ' produces the large typewriter interword space.
+     \def\ {{\spaceskip = 0pt{} }}%
+     %
+     % Turn off hyphenation.
+     \nohyphenation
+     %
+     \rawbackslash
+     \frenchspacing
+     #1%
+   }%
+   \null
+ }
+ 
+ % We *must* turn on hyphenation at `-' and `_' in \code.
+ % Otherwise, it is too hard to avoid overfull hboxes
+ % in the Emacs manual, the Library manual, etc.
+ 
+ % Unfortunately, TeX uses one parameter (\hyphenchar) to control
+ % both hyphenation at - and hyphenation within words.
+ % We must therefore turn them both off (\tclose does that)
+ % and arrange explicitly to hyphenate at a dash.
+ %  -- rms.
+ {
+   \catcode`\-=\active
+   \catcode`\_=\active
+   %
+   \global\def\code{\begingroup
+     \catcode`\-=\active \let-\codedash
+     \catcode`\_=\active \let_\codeunder
+     \codex
+   }
+   %
+   % If we end up with any active - characters when handling the index,
+   % just treat them as a normal -.
+   \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
+ }
+ 
+ \def\realdash{-}
+ \def\codedash{-\discretionary{}{}{}}
+ \def\codeunder{%
+   % this is all so @math{@code{var_name}+1} can work.  In math mode, _
+   % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+   % will therefore expand the active definition of _, which is us
+   % (inside @code that is), therefore an endless loop.
+   \ifusingtt{\ifmmode
+                \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+              \else\normalunderscore \fi
+              \discretionary{}{}{}}%
+             {\_}%
+ }
+ \def\codex #1{\tclose{#1}\endgroup}
+ 
+ % @kbd is like @code, except that if the argument is just one @key command,
+ % then @kbd has no effect.
+ 
+ % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+ %   `example' (@kbd uses ttsl only inside of @example and friends),
+ %   or `code' (@kbd uses normal tty font always).
+ \def\kbdinputstyle{\parsearg\kbdinputstylexxx}
+ \def\kbdinputstylexxx#1{%
+   \def\arg{#1}%
+   \ifx\arg\worddistinct
+     \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+   \else\ifx\arg\wordexample
+     \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+   \else\ifx\arg\wordcode
+     \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+   \fi\fi\fi
+ }
+ \def\worddistinct{distinct}
+ \def\wordexample{example}
+ \def\wordcode{code}
+ 
+ % Default is kbdinputdistinct.  (Too much of a hassle to call the macro,
+ % the catcodes are wrong for parsearg to work.)
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
+ 
+ \def\xkey{\key}
+ \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+ \ifx\one\xkey\ifx\threex\three \key{#2}%
+ \else{\tclose{\kbdfont\look}}\fi
+ \else{\tclose{\kbdfont\look}}\fi}
+ 
+ % For @url, @env, @command quotes seem unnecessary, so use \code.
+ \let\url=\code
+ \let\env=\code
+ \let\command=\code
+ 
+ % @uref (abbreviation for `urlref') takes an optional (comma-separated)
+ % second argument specifying the text to display and an optional third
+ % arg as text to display instead of (rather than in addition to) the url
+ % itself.  First (mandatory) arg is the url.  Perhaps eventually put in
+ % a hypertex \special here.
+ %
+ \def\uref#1{\douref #1,,,\finish}
+ \def\douref#1,#2,#3,#4\finish{\begingroup
+   \unsepspaces
+   \pdfurl{#1}%
+   \setbox0 = \hbox{\ignorespaces #3}%
+   \ifdim\wd0 > 0pt
+     \unhbox0 % third arg given, show only that
+   \else
+     \setbox0 = \hbox{\ignorespaces #2}%
+     \ifdim\wd0 > 0pt
+       \ifpdf
+         \unhbox0             % PDF: 2nd arg given, show only it
+       \else
+         \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+       \fi
+     \else
+       \code{#1}% only url given, so show it
+     \fi
+   \fi
+   \endlink
+ \endgroup}
+ 
+ % rms does not like angle brackets --karl, 17may97.
+ % So now @email is just like @uref, unless we are pdf.
+ % 
+ %\def\email#1{\angleleft{\tt #1}\angleright}
+ \ifpdf
+   \def\email#1{\doemail#1,,\finish}
+   \def\doemail#1,#2,#3\finish{\begingroup
+     \unsepspaces
+     \pdfurl{mailto:#1}%
+     \setbox0 = \hbox{\ignorespaces #2}%
+     \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+     \endlink
+   \endgroup}
+ \else
+   \let\email=\uref
+ \fi
+ 
+ % Check if we are currently using a typewriter font.  Since all the
+ % Computer Modern typewriter fonts have zero interword stretch (and
+ % shrink), and it is reasonable to expect all typewriter fonts to have
+ % this property, we can check that font parameter.
+ %
+ \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+ 
+ % Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
+ % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+ %
+ \def\dmn#1{\thinspace #1}
+ 
+ \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+ 
+ % @l was never documented to mean ``switch to the Lisp font'',
+ % and it is not used as such in any manual I can find.  We need it for
+ % Polish suppressed-l.  --karl, 22sep96.
+ %\def\l#1{{\li #1}\null}
+ 
+ % Explicit font changes: @r, @sc, undocumented @ii.
+ \def\r#1{{\rm #1}}              % roman font
+ \def\sc#1{{\smallcaps#1}}       % smallcaps font
+ \def\ii#1{{\it #1}}             % italic font
+ 
+ % @acronym downcases the argument and prints in smallcaps.
+ \def\acronym#1{{\smallcaps \lowercase{#1}}}
+ 
+ % @pounds{} is a sterling sign.
+ \def\pounds{{\it\$}}
+ 
+ 
+ \message{page headings,}
+ 
+ \newskip\titlepagetopglue \titlepagetopglue = 1.5in
+ \newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+ 
+ % First the title page.  Must do @settitle before @titlepage.
+ \newif\ifseenauthor
+ \newif\iffinishedtitlepage
+ 
+ % Do an implicit @contents or @shortcontents after @end titlepage if the
+ % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+ %
+ \newif\ifsetcontentsaftertitlepage
+  \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+ \newif\ifsetshortcontentsaftertitlepage
+  \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+ 
+ \def\shorttitlepage{\parsearg\shorttitlepagezzz}
+ \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+         \endgroup\page\hbox{}\page}
+ 
+ \def\titlepage{\begingroup \parindent=0pt \textfonts
+    \let\subtitlerm=\tenrm
+    \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
+    %
+    \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
+    %
+    % Leave some space at the very top of the page.
+    \vglue\titlepagetopglue
+    %
+    % Now you can print the title using @title.
+    \def\title{\parsearg\titlezzz}%
+    \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
+                     % print a rule at the page bottom also.
+                     \finishedtitlepagefalse
+                     \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
+    % No rule at page bottom unless we print one at the top with @title.
+    \finishedtitlepagetrue
+    %
+    % Now you can put text using @subtitle.
+    \def\subtitle{\parsearg\subtitlezzz}%
+    \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
+    %
+    % @author should come last, but may come many times.
+    \def\author{\parsearg\authorzzz}%
+    \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
+       {\authorfont \leftline{##1}}}%
+    %
+    % Most title ``pages'' are actually two pages long, with space
+    % at the top of the second.  We don't want the ragged left on the second.
+    \let\oldpage = \page
+    \def\page{%
+       \iffinishedtitlepage\else
+          \finishtitlepage
+       \fi
+       \oldpage
+       \let\page = \oldpage
+       \hbox{}}%
+ %   \def\page{\oldpage \hbox{}}
+ }
+ 
+ \def\Etitlepage{%
+    \iffinishedtitlepage\else
+       \finishtitlepage
+    \fi
+    % It is important to do the page break before ending the group,
+    % because the headline and footline are only empty inside the group.
+    % If we use the new definition of \page, we always get a blank page
+    % after the title page, which we certainly don't want.
+    \oldpage
+    \endgroup
+    %
+    % Need this before the \...aftertitlepage checks so that if they are
+    % in effect the toc pages will come out with page numbers.
+    \HEADINGSon
+    %
+    % If they want short, they certainly want long too.
+    \ifsetshortcontentsaftertitlepage
+      \shortcontents
+      \contents
+      \global\let\shortcontents = \relax
+      \global\let\contents = \relax
+    \fi
+    %
+    \ifsetcontentsaftertitlepage
+      \contents
+      \global\let\contents = \relax
+      \global\let\shortcontents = \relax
+    \fi
+ }
+ 
+ \def\finishtitlepage{%
+    \vskip4pt \hrule height 2pt width \hsize
+    \vskip\titlepagebottomglue
+    \finishedtitlepagetrue
+ }
+ 
+ %%% Set up page headings and footings.
+ 
+ \let\thispage=\folio
+ 
+ \newtoks\evenheadline    % headline on even pages
+ \newtoks\oddheadline     % headline on odd pages
+ \newtoks\evenfootline    % footline on even pages
+ \newtoks\oddfootline     % footline on odd pages
+ 
+ % Now make Tex use those variables
+ \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+                             \else \the\evenheadline \fi}}
+ \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+                             \else \the\evenfootline \fi}\HEADINGShook}
+ \let\HEADINGShook=\relax
+ 
+ % Commands to set those variables.
+ % For example, this is what  @headings on  does
+ % @evenheading @thistitle|@thispage|@thischapter
+ % @oddheading @thischapter|@thispage|@thistitle
+ % @evenfooting @thisfile||
+ % @oddfooting ||@thisfile
+ 
+ \def\evenheading{\parsearg\evenheadingxxx}
+ \def\oddheading{\parsearg\oddheadingxxx}
+ \def\everyheading{\parsearg\everyheadingxxx}
+ 
+ \def\evenfooting{\parsearg\evenfootingxxx}
+ \def\oddfooting{\parsearg\oddfootingxxx}
+ \def\everyfooting{\parsearg\everyfootingxxx}
+ 
+ {\catcode`\@=0 %
+ 
+ \gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
+ \gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
+ \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+ 
+ \gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
+ \gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
+ \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+ 
+ \gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+ 
+ \gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
+ \gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
+ \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+ 
+ \gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
+ \gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
+   \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+   %
+   % Leave some space for the footline.  Hopefully ok to assume
+   % @evenfooting will not be used by itself.
+   \global\advance\pageheight by -\baselineskip
+   \global\advance\vsize by -\baselineskip
+ }
+ 
+ \gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+ %
+ }% unbind the catcode of @.
+ 
+ % @headings double      turns headings on for double-sided printing.
+ % @headings single      turns headings on for single-sided printing.
+ % @headings off         turns them off.
+ % @headings on          same as @headings double, retained for compatibility.
+ % @headings after       turns on double-sided headings after this page.
+ % @headings doubleafter turns on double-sided headings after this page.
+ % @headings singleafter turns on single-sided headings after this page.
+ % By default, they are off at the start of a document,
+ % and turned `on' after @end titlepage.
+ 
+ \def\headings #1 {\csname HEADINGS#1\endcsname}
+ 
+ \def\HEADINGSoff{
+ \global\evenheadline={\hfil} \global\evenfootline={\hfil}
+ \global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+ \HEADINGSoff
+ % When we turn headings on, set the page number to 1.
+ % For double-sided printing, put current file name in lower left corner,
+ % chapter name on inside top of right hand pages, document
+ % title on inside top of left hand pages, and page numbers on outside top
+ % edge of all pages.
+ \def\HEADINGSdouble{
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\folio\hfil\thistitle}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
+ \global\let\contentsalignmacro = \chapoddpage
+ }
+ \let\contentsalignmacro = \chappager
+ 
+ % For single-sided printing, chapter title goes across top left of page,
+ % page number on top right.
+ \def\HEADINGSsingle{
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\thischapter\hfil\folio}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
+ \global\let\contentsalignmacro = \chappager
+ }
+ \def\HEADINGSon{\HEADINGSdouble}
+ 
+ \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+ \let\HEADINGSdoubleafter=\HEADINGSafter
+ \def\HEADINGSdoublex{%
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\folio\hfil\thistitle}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
+ \global\let\contentsalignmacro = \chapoddpage
+ }
+ 
+ \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+ \def\HEADINGSsinglex{%
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\thischapter\hfil\folio}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
+ \global\let\contentsalignmacro = \chappager
+ }
+ 
+ % Subroutines used in generating headings
+ % This produces Day Month Year style of output.
+ % Only define if not already defined, in case a txi-??.tex file has set
+ % up a different format (e.g., txi-cs.tex does this).
+ \ifx\today\undefined
+ \def\today{%
+   \number\day\space
+   \ifcase\month
+   \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+   \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+   \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+   \fi
+   \space\number\year}
+ \fi
+ 
+ % @settitle line...  specifies the title of the document, for headings.
+ % It generates no output of its own.
+ \def\thistitle{\putwordNoTitle}
+ \def\settitle{\parsearg\settitlezzz}
+ \def\settitlezzz #1{\gdef\thistitle{#1}}
+ 
+ 
+ \message{tables,}
+ % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
+ 
+ % default indentation of table text
+ \newdimen\tableindent \tableindent=.8in
+ % default indentation of @itemize and @enumerate text
+ \newdimen\itemindent  \itemindent=.3in
+ % margin between end of table item and start of table text.
+ \newdimen\itemmargin  \itemmargin=.1in
+ 
+ % used internally for \itemindent minus \itemmargin
+ \newdimen\itemmax
+ 
+ % Note @table, @vtable, and @vtable define @item, @itemx, etc., with
+ % these defs.
+ % They also define \itemindex
+ % to index the item name in whatever manner is desired (perhaps none).
+ 
+ \newif\ifitemxneedsnegativevskip
+ 
+ \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+ 
+ \def\internalBitem{\smallbreak \parsearg\itemzzz}
+ \def\internalBitemx{\itemxpar \parsearg\itemzzz}
+ 
+ \def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
+ \def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
+ 
+ \def\internalBkitem{\smallbreak \parsearg\kitemzzz}
+ \def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
+ 
+ \def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
+                  \itemzzz {#1}}
+ 
+ \def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
+                  \itemzzz {#1}}
+ 
+ \def\itemzzz #1{\begingroup %
+   \advance\hsize by -\rightskip
+   \advance\hsize by -\tableindent
+   \setbox0=\hbox{\itemfont{#1}}%
+   \itemindex{#1}%
+   \nobreak % This prevents a break before @itemx.
+   %
+   % If the item text does not fit in the space we have, put it on a line
+   % by itself, and do not allow a page break either before or after that
+   % line.  We do not start a paragraph here because then if the next
+   % command is, e.g., @kindex, the whatsit would get put into the
+   % horizontal list on a line by itself, resulting in extra blank space.
+   \ifdim \wd0>\itemmax
+     %
+     % Make this a paragraph so we get the \parskip glue and wrapping,
+     % but leave it ragged-right.
+     \begingroup
+       \advance\leftskip by-\tableindent
+       \advance\hsize by\tableindent
+       \advance\rightskip by0pt plus1fil
+       \leavevmode\unhbox0\par
+     \endgroup
+     %
+     % We're going to be starting a paragraph, but we don't want the
+     % \parskip glue -- logically it's part of the @item we just started.
+     \nobreak \vskip-\parskip
+     %
+     % Stop a page break at the \parskip glue coming up.  Unfortunately
+     % we can't prevent a possible page break at the following
+     % \baselineskip glue.
+     \nobreak
+     \endgroup
+     \itemxneedsnegativevskipfalse
+   \else
+     % The item text fits into the space.  Start a paragraph, so that the
+     % following text (if any) will end up on the same line.
+     \noindent
+     % Do this with kerns and \unhbox so that if there is a footnote in
+     % the item text, it can migrate to the main vertical list and
+     % eventually be printed.
+     \nobreak\kern-\tableindent
+     \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+     \unhbox0
+     \nobreak\kern\dimen0
+     \endgroup
+     \itemxneedsnegativevskiptrue
+   \fi
+ }
+ 
+ \def\item{\errmessage{@item while not in a table}}
+ \def\itemx{\errmessage{@itemx while not in a table}}
+ \def\kitem{\errmessage{@kitem while not in a table}}
+ \def\kitemx{\errmessage{@kitemx while not in a table}}
+ \def\xitem{\errmessage{@xitem while not in a table}}
+ \def\xitemx{\errmessage{@xitemx while not in a table}}
+ 
+ % Contains a kludge to get @end[description] to work.
+ \def\description{\tablez{\dontindex}{1}{}{}{}{}}
+ 
+ % @table, @ftable, @vtable.
+ \def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
+ {\obeylines\obeyspaces%
+ \gdef\tablex #1^^M{%
+ \tabley\dontindex#1        \endtabley}}
+ 
+ \def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
+ {\obeylines\obeyspaces%
+ \gdef\ftablex #1^^M{%
+ \tabley\fnitemindex#1        \endtabley
+ \def\Eftable{\endgraf\afterenvbreak\endgroup}%
+ \let\Etable=\relax}}
+ 
+ \def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
+ {\obeylines\obeyspaces%
+ \gdef\vtablex #1^^M{%
+ \tabley\vritemindex#1        \endtabley
+ \def\Evtable{\endgraf\afterenvbreak\endgroup}%
+ \let\Etable=\relax}}
+ 
+ \def\dontindex #1{}
+ \def\fnitemindex #1{\doind {fn}{\code{#1}}}%
+ \def\vritemindex #1{\doind {vr}{\code{#1}}}%
+ 
+ {\obeyspaces %
+ \gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
+ \tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
+ 
+ \def\tablez #1#2#3#4#5#6{%
+ \aboveenvbreak %
+ \begingroup %
+ \def\Edescription{\Etable}% Necessary kludge.
+ \let\itemindex=#1%
+ \ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
+ \ifnum 0#4>0 \tableindent=#4\mil \fi %
+ \ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
+ \def\itemfont{#2}%
+ \itemmax=\tableindent %
+ \advance \itemmax by -\itemmargin %
+ \advance \leftskip by \tableindent %
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi%
+ \def\Etable{\endgraf\afterenvbreak\endgroup}%
+ \let\item = \internalBitem %
+ \let\itemx = \internalBitemx %
+ \let\kitem = \internalBkitem %
+ \let\kitemx = \internalBkitemx %
+ \let\xitem = \internalBxitem %
+ \let\xitemx = \internalBxitemx %
+ }
+ 
+ % This is the counter used by @enumerate, which is really @itemize
+ 
+ \newcount \itemno
+ 
+ \def\itemize{\parsearg\itemizezzz}
+ 
+ \def\itemizezzz #1{%
+   \begingroup % ended by the @end itemize
+   \itemizey {#1}{\Eitemize}
+ }
+ 
+ \def\itemizey #1#2{%
+ \aboveenvbreak %
+ \itemmax=\itemindent %
+ \advance \itemmax by -\itemmargin %
+ \advance \leftskip by \itemindent %
+ \exdentamount=\itemindent
+ \parindent = 0pt %
+ \parskip = \smallskipamount %
+ \ifdim \parskip=0pt \parskip=2pt \fi%
+ \def#2{\endgraf\afterenvbreak\endgroup}%
+ \def\itemcontents{#1}%
+ \let\item=\itemizeitem}
+ 
+ % Set sfcode to normal for the chars that usually have another value.
+ % These are `.?!:;,'
+ \def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
+   \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
+ 
+ % \splitoff TOKENS\endmark defines \first to be the first token in
+ % TOKENS, and \rest to be the remainder.
+ %
+ \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+ 
+ % Allow an optional argument of an uppercase letter, lowercase letter,
+ % or number, to specify the first label in the enumerated list.  No
+ % argument is the same as `1'.
+ %
+ \def\enumerate{\parsearg\enumeratezzz}
+ \def\enumeratezzz #1{\enumeratey #1  \endenumeratey}
+ \def\enumeratey #1 #2\endenumeratey{%
+   \begingroup % ended by the @end enumerate
+   %
+   % If we were given no argument, pretend we were given `1'.
+   \def\thearg{#1}%
+   \ifx\thearg\empty \def\thearg{1}\fi
+   %
+   % Detect if the argument is a single token.  If so, it might be a
+   % letter.  Otherwise, the only valid thing it can be is a number.
+   % (We will always have one token, because of the test we just made.
+   % This is a good thing, since \splitoff doesn't work given nothing at
+   % all -- the first parameter is undelimited.)
+   \expandafter\splitoff\thearg\endmark
+   \ifx\rest\empty
+     % Only one token in the argument.  It could still be anything.
+     % A ``lowercase letter'' is one whose \lccode is nonzero.
+     % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+     %   not equal to itself.
+     % Otherwise, we assume it's a number.
+     %
+     % We need the \relax at the end of the \ifnum lines to stop TeX from
+     % continuing to look for a <number>.
+     %
+     \ifnum\lccode\expandafter`\thearg=0\relax
+       \numericenumerate % a number (we hope)
+     \else
+       % It's a letter.
+       \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+         \lowercaseenumerate % lowercase letter
+       \else
+         \uppercaseenumerate % uppercase letter
+       \fi
+     \fi
+   \else
+     % Multiple tokens in the argument.  We hope it's a number.
+     \numericenumerate
+   \fi
+ }
+ 
+ % An @enumerate whose labels are integers.  The starting integer is
+ % given in \thearg.
+ %
+ \def\numericenumerate{%
+   \itemno = \thearg
+   \startenumeration{\the\itemno}%
+ }
+ 
+ % The starting (lowercase) letter is in \thearg.
+ \def\lowercaseenumerate{%
+   \itemno = \expandafter`\thearg
+   \startenumeration{%
+     % Be sure we're not beyond the end of the alphabet.
+     \ifnum\itemno=0
+       \errmessage{No more lowercase letters in @enumerate; get a bigger
+                   alphabet}%
+     \fi
+     \char\lccode\itemno
+   }%
+ }
+ 
+ % The starting (uppercase) letter is in \thearg.
+ \def\uppercaseenumerate{%
+   \itemno = \expandafter`\thearg
+   \startenumeration{%
+     % Be sure we're not beyond the end of the alphabet.
+     \ifnum\itemno=0
+       \errmessage{No more uppercase letters in @enumerate; get a bigger
+                   alphabet}
+     \fi
+     \char\uccode\itemno
+   }%
+ }
+ 
+ % Call itemizey, adding a period to the first argument and supplying the
+ % common last two arguments.  Also subtract one from the initial value in
+ % \itemno, since @item increments \itemno.
+ %
+ \def\startenumeration#1{%
+   \advance\itemno by -1
+   \itemizey{#1.}\Eenumerate\flushcr
+ }
+ 
+ % @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+ % to @enumerate.
+ %
+ \def\alphaenumerate{\enumerate{a}}
+ \def\capsenumerate{\enumerate{A}}
+ \def\Ealphaenumerate{\Eenumerate}
+ \def\Ecapsenumerate{\Eenumerate}
+ 
+ % Definition of @item while inside @itemize.
+ 
+ \def\itemizeitem{%
+ \advance\itemno by 1
+ {\let\par=\endgraf \smallbreak}%
+ \ifhmode \errmessage{In hmode at itemizeitem}\fi
+ {\parskip=0in \hskip 0pt
+ \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
+ \vadjust{\penalty 1200}}%
+ \flushcr}
+ 
+ % @multitable macros
+ % Amy Hendrickson, 8/18/94, 3/6/96
+ %
+ % @multitable ... @end multitable will make as many columns as desired.
+ % Contents of each column will wrap at width given in preamble.  Width
+ % can be specified either with sample text given in a template line,
+ % or in percent of \hsize, the current width of text on page.
+ 
+ % Table can continue over pages but will only break between lines.
+ 
+ % To make preamble:
+ %
+ % Either define widths of columns in terms of percent of \hsize:
+ %   @multitable @columnfractions .25 .3 .45
+ %   @item ...
+ %
+ %   Numbers following @columnfractions are the percent of the total
+ %   current hsize to be used for each column. You may use as many
+ %   columns as desired.
+ 
+ 
+ % Or use a template:
+ %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+ %   @item ...
+ %   using the widest term desired in each column.
+ %
+ % For those who want to use more than one line's worth of words in
+ % the preamble, break the line within one argument and it
+ % will parse correctly, i.e.,
+ %
+ %     @multitable {Column 1 template} {Column 2 template} {Column 3
+ %      template}
+ % Not:
+ %     @multitable {Column 1 template} {Column 2 template}
+ %      {Column 3 template}
+ 
+ % Each new table line starts with @item, each subsequent new column
+ % starts with @tab. Empty columns may be produced by supplying @tab's
+ % with nothing between them for as many times as empty columns are needed,
+ % ie, @tab@tab@tab will produce two empty columns.
+ 
+ % @item, @tab, @multitable or @end multitable do not need to be on their
+ % own lines, but it will not hurt if they are.
+ 
+ % Sample multitable:
+ 
+ %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+ %   @item first col stuff @tab second col stuff @tab third col
+ %   @item
+ %   first col stuff
+ %   @tab
+ %   second col stuff
+ %   @tab
+ %   third col
+ %   @item first col stuff @tab second col stuff
+ %   @tab Many paragraphs of text may be used in any column.
+ %
+ %         They will wrap at the width determined by the template.
+ %   @item@tab@tab This will be in third column.
+ %   @end multitable
+ 
+ % Default dimensions may be reset by user.
+ % @multitableparskip is vertical space between paragraphs in table.
+ % @multitableparindent is paragraph indent in table.
+ % @multitablecolmargin is horizontal space to be left between columns.
+ % @multitablelinespace is space to leave between table items, baseline
+ %                                                            to baseline.
+ %   0pt means it depends on current normal line spacing.
+ %
+ \newskip\multitableparskip
+ \newskip\multitableparindent
+ \newdimen\multitablecolspace
+ \newskip\multitablelinespace
+ \multitableparskip=0pt
+ \multitableparindent=6pt
+ \multitablecolspace=12pt
+ \multitablelinespace=0pt
+ 
+ % Macros used to set up halign preamble:
+ %
+ \let\endsetuptable\relax
+ \def\xendsetuptable{\endsetuptable}
+ \let\columnfractions\relax
+ \def\xcolumnfractions{\columnfractions}
+ \newif\ifsetpercent
+ 
+ % #1 is the part of the @columnfraction before the decimal point, which
+ % is presumably either 0 or the empty string (but we don't check, we
+ % just throw it away).  #2 is the decimal part, which we use as the
+ % percent of \hsize for this column.
+ \def\pickupwholefraction#1.#2 {%
+   \global\advance\colcount by 1
+   \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
+   \setuptable
+ }
+ 
+ \newcount\colcount
+ \def\setuptable#1{%
+   \def\firstarg{#1}%
+   \ifx\firstarg\xendsetuptable
+     \let\go = \relax
+   \else
+     \ifx\firstarg\xcolumnfractions
+       \global\setpercenttrue
+     \else
+       \ifsetpercent
+          \let\go\pickupwholefraction
+       \else
+          \global\advance\colcount by 1
+          \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
+                             % typically that is always in the input, anyway.
+          \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+       \fi
+     \fi
+     \ifx\go\pickupwholefraction
+       % Put the argument back for the \pickupwholefraction call, so
+       % we'll always have a period there to be parsed.
+       \def\go{\pickupwholefraction#1}%
+     \else
+       \let\go = \setuptable
+     \fi%
+   \fi
+   \go
+ }
+ 
+ % This used to have \hskip1sp.  But then the space in a template line is
+ % not enough.  That is bad.  So let's go back to just & until we
+ % encounter the problem it was intended to solve again.
+ % --karl, nathan@acm.org, 20apr99.
+ \def\tab{&}
+ 
+ % @multitable ... @end multitable definitions:
+ %
+ \def\multitable{\parsearg\dotable}
+ \def\dotable#1{\bgroup
+   \vskip\parskip
+   \let\item\crcr
+   \tolerance=9500
+   \hbadness=9500
+   \setmultitablespacing
+   \parskip=\multitableparskip
+   \parindent=\multitableparindent
+   \overfullrule=0pt
+   \global\colcount=0
+   \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
+   %
+   % To parse everything between @multitable and @item:
+   \setuptable#1 \endsetuptable
+   %
+   % \everycr will reset column counter, \colcount, at the end of
+   % each line. Every column entry will cause \colcount to advance by one.
+   % The table preamble
+   % looks at the current \colcount to find the correct column width.
+   \everycr{\noalign{%
+   %
+   % \filbreak%% keeps underfull box messages off when table breaks over pages.
+   % Maybe so, but it also creates really weird page breaks when the table
+   % breaks over pages. Wouldn't \vfil be better?  Wait until the problem
+   % manifests itself, so it can be fixed for real --karl.
+     \global\colcount=0\relax}}%
+   %
+   % This preamble sets up a generic column definition, which will
+   % be used as many times as user calls for columns.
+   % \vtop will set a single line and will also let text wrap and
+   % continue for many paragraphs if desired.
+   \halign\bgroup&\global\advance\colcount by 1\relax
+     \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
+   %
+   % In order to keep entries from bumping into each other
+   % we will add a \leftskip of \multitablecolspace to all columns after
+   % the first one.
+   %
+   % If a template has been used, we will add \multitablecolspace
+   % to the width of each template entry.
+   %
+   % If the user has set preamble in terms of percent of \hsize we will
+   % use that dimension as the width of the column, and the \leftskip
+   % will keep entries from bumping into each other.  Table will start at
+   % left margin and final column will justify at right margin.
+   %
+   % Make sure we don't inherit \rightskip from the outer environment.
+   \rightskip=0pt
+   \ifnum\colcount=1
+     % The first column will be indented with the surrounding text.
+     \advance\hsize by\leftskip
+   \else
+     \ifsetpercent \else
+       % If user has not set preamble in terms of percent of \hsize
+       % we will advance \hsize by \multitablecolspace.
+       \advance\hsize by \multitablecolspace
+     \fi
+    % In either case we will make \leftskip=\multitablecolspace:
+   \leftskip=\multitablecolspace
+   \fi
+   % Ignoring space at the beginning and end avoids an occasional spurious
+   % blank line, when TeX decides to break the line at the space before the
+   % box from the multistrut, so the strut ends up on a line by itself.
+   % For example:
+   % @multitable @columnfractions .11 .89
+   % @item @code{#}
+   % @tab Legal holiday which is valid in major parts of the whole country.
+   % Is automatically provided with highlighting sequences respectively marking
+   % characters.
+   \noindent\ignorespaces##\unskip\multistrut}\cr
+ }
+ 
+ \def\setmultitablespacing{% test to see if user has set \multitablelinespace.
+ % If so, do nothing. If not, give it an appropriate dimension based on
+ % current baselineskip.
+ \ifdim\multitablelinespace=0pt
+ \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+ \global\advance\multitablelinespace by-\ht0
+ %% strut to put in table in case some entry doesn't have descenders,
+ %% to keep lines equally spaced
+ \let\multistrut = \strut
+ \else
+ %% FIXME: what is \box0 supposed to be?
+ \gdef\multistrut{\vrule height\multitablelinespace depth\dp0
+ width0pt\relax} \fi
+ %% Test to see if parskip is larger than space between lines of
+ %% table. If not, do nothing.
+ %%        If so, set to same dimension as multitablelinespace.
+ \ifdim\multitableparskip>\multitablelinespace
+ \global\multitableparskip=\multitablelinespace
+ \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+                                       %% than skip between lines in the table.
+ \fi%
+ \ifdim\multitableparskip=0pt
+ \global\multitableparskip=\multitablelinespace
+ \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+                                       %% than skip between lines in the table.
+ \fi}
+ 
+ 
+ \message{conditionals,}
+ % Prevent errors for section commands.
+ % Used in @ignore and in failing conditionals.
+ \def\ignoresections{%
+   \let\chapter=\relax
+   \let\unnumbered=\relax
+   \let\top=\relax
+   \let\unnumberedsec=\relax
+   \let\unnumberedsection=\relax
+   \let\unnumberedsubsec=\relax
+   \let\unnumberedsubsection=\relax
+   \let\unnumberedsubsubsec=\relax
+   \let\unnumberedsubsubsection=\relax
+   \let\section=\relax
+   \let\subsec=\relax
+   \let\subsubsec=\relax
+   \let\subsection=\relax
+   \let\subsubsection=\relax
+   \let\appendix=\relax
+   \let\appendixsec=\relax
+   \let\appendixsection=\relax
+   \let\appendixsubsec=\relax
+   \let\appendixsubsection=\relax
+   \let\appendixsubsubsec=\relax
+   \let\appendixsubsubsection=\relax
+   \let\contents=\relax
+   \let\smallbook=\relax
+   \let\titlepage=\relax
+ }
+ 
+ % Used in nested conditionals, where we have to parse the Texinfo source
+ % and so want to turn off most commands, in case they are used
+ % incorrectly.
+ %
+ \def\ignoremorecommands{%
+   \let\defcodeindex = \relax
+   \let\defcv = \relax
+   \let\deffn = \relax
+   \let\deffnx = \relax
+   \let\defindex = \relax
+   \let\defivar = \relax
+   \let\defmac = \relax
+   \let\defmethod = \relax
+   \let\defop = \relax
+   \let\defopt = \relax
+   \let\defspec = \relax
+   \let\deftp = \relax
+   \let\deftypefn = \relax
+   \let\deftypefun = \relax
+   \let\deftypeivar = \relax
+   \let\deftypeop = \relax
+   \let\deftypevar = \relax
+   \let\deftypevr = \relax
+   \let\defun = \relax
+   \let\defvar = \relax
+   \let\defvr = \relax
+   \let\ref = \relax
+   \let\xref = \relax
+   \let\printindex = \relax
+   \let\pxref = \relax
+   \let\settitle = \relax
+   \let\setchapternewpage = \relax
+   \let\setchapterstyle = \relax
+   \let\everyheading = \relax
+   \let\evenheading = \relax
+   \let\oddheading = \relax
+   \let\everyfooting = \relax
+   \let\evenfooting = \relax
+   \let\oddfooting = \relax
+   \let\headings = \relax
+   \let\include = \relax
+   \let\lowersections = \relax
+   \let\down = \relax
+   \let\raisesections = \relax
+   \let\up = \relax
+   \let\set = \relax
+   \let\clear = \relax
+   \let\item = \relax
+ }
+ 
+ % Ignore @ignore, @ifhtml, @ifinfo, @ifplaintext, @ifnottex, @html, @menu,
+ % @direntry, and @documentdescription.
+ %
+ \def\ignore{\doignore{ignore}}
+ \def\ifhtml{\doignore{ifhtml}}
+ \def\ifinfo{\doignore{ifinfo}}
+ \def\ifplaintext{\doignore{ifplaintext}}
+ \def\ifnottex{\doignore{ifnottex}}
+ \def\html{\doignore{html}}
+ \def\menu{\doignore{menu}}
+ \def\direntry{\doignore{direntry}}
+ \def\documentdescription{\doignore{documentdescription}}
+ \def\documentdescriptionword{documentdescription}
+ 
+ % @dircategory CATEGORY  -- specify a category of the dir file
+ % which this file should belong to.  Ignore this in TeX.
+ \let\dircategory = \comment
+ 
+ % Ignore text until a line `@end #1'.
+ %
+ \def\doignore#1{\begingroup
+   % Don't complain about control sequences we have declared \outer.
+   \ignoresections
+   %
+   % Define a command to swallow text until we reach `@end #1'.
+   % This @ is a catcode 12 token (that is the normal catcode of @ in
+   % this texinfo.tex file).  We change the catcode of @ below to match.
+   \long\def\doignoretext##1@end #1{\enddoignore}%
+   %
+   % Make sure that spaces turn into tokens that match what \doignoretext wants.
+   \catcode32 = 10
+   %
+   % Ignore braces, too, so mismatched braces don't cause trouble.
+   \catcode`\{ = 9
+   \catcode`\} = 9
+   %
+   % We must not have @c interpreted as a control sequence.
+   \catcode`\@ = 12
+   %
+   \def\ignoreword{#1}%
+   \ifx\ignoreword\documentdescriptionword
+     % The c kludge breaks documentdescription, since
+     % `documentdescription' contains a `c'.  Means not everything will
+     % be ignored inside @documentdescription, but oh well...
+   \else
+     % Make the letter c a comment character so that the rest of the line
+     % will be ignored. This way, the document can have (for example)
+     %   @c @end ifinfo
+     % and the @end ifinfo will be properly ignored.
+     % (We've just changed @ to catcode 12.)
+     \catcode`\c = 14
+   \fi
+   %
+   % And now expand the command defined above.
+   \doignoretext
+ }
+ 
+ % What we do to finish off ignored text.
+ %
+ \def\enddoignore{\endgroup\ignorespaces}%
+ 
+ \newif\ifwarnedobs\warnedobsfalse
+ \def\obstexwarn{%
+   \ifwarnedobs\relax\else
+   % We need to warn folks that they may have trouble with TeX 3.0.
+   % This uses \immediate\write16 rather than \message to get newlines.
+     \immediate\write16{}
+     \immediate\write16{WARNING: for users of Unix TeX 3.0!}
+     \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
+     \immediate\write16{If you are running another version of TeX, relax.}
+     \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
+     \immediate\write16{  Then upgrade your TeX installation if you can.}
+     \immediate\write16{  (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
+     \immediate\write16{If you are stuck with version 3.0, run the}
+     \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
+     \immediate\write16{  to use a workaround.}
+     \immediate\write16{}
+     \global\warnedobstrue
+     \fi
+ }
+ 
+ % **In TeX 3.0, setting text in \nullfont hangs tex.  For a
+ % workaround (which requires the file ``dummy.tfm'' to be installed),
+ % uncomment the following line:
+ %%%%%\font\nullfont=dummy\let\obstexwarn=\relax
+ 
+ % Ignore text, except that we keep track of conditional commands for
+ % purposes of nesting, up to an `@end #1' command.
+ %
+ \def\nestedignore#1{%
+   \obstexwarn
+   % We must actually expand the ignored text to look for the @end
+   % command, so that nested ignore constructs work.  Thus, we put the
+   % text into a \vbox and then do nothing with the result.  To minimize
+   % the change of memory overflow, we follow the approach outlined on
+   % page 401 of the TeXbook: make the current font be a dummy font.
+   %
+   \setbox0 = \vbox\bgroup
+     % Don't complain about control sequences we have declared \outer.
+     \ignoresections
+     %
+     % Define `@end #1' to end the box, which will in turn undefine the
+     % @end command again.
+     \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
+     %
+     % We are going to be parsing Texinfo commands.  Most cause no
+     % trouble when they are used incorrectly, but some commands do
+     % complicated argument parsing or otherwise get confused, so we
+     % undefine them.
+     %
+     % We can't do anything about stray @-signs, unfortunately;
+     % they'll produce `undefined control sequence' errors.
+     \ignoremorecommands
+     %
+     % Set the current font to be \nullfont, a TeX primitive, and define
+     % all the font commands to also use \nullfont.  We don't use
+     % dummy.tfm, as suggested in the TeXbook, because not all sites
+     % might have that installed.  Therefore, math mode will still
+     % produce output, but that should be an extremely small amount of
+     % stuff compared to the main input.
+     %
+     \nullfont
+     \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
+     \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
+     \let\tensf=\nullfont
+     % Similarly for index fonts.
+     \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
+     \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
+     \let\smallsf=\nullfont
+     % Similarly for smallexample fonts.
+     \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
+     \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
+     \let\smallersf=\nullfont
+     %
+     % Don't complain when characters are missing from the fonts.
+     \tracinglostchars = 0
+     %
+     % Don't bother to do space factor calculations.
+     \frenchspacing
+     %
+     % Don't report underfull hboxes.
+     \hbadness = 10000
+     %
+     % Do minimal line-breaking.
+     \pretolerance = 10000
+     %
+     % Do not execute instructions in @tex
+     \def\tex{\doignore{tex}}%
+     % Do not execute macro definitions.
+     % `c' is a comment character, so the word `macro' will get cut off.
+     \def\macro{\doignore{ma}}%
+ }
+ 
+ % @set VAR sets the variable VAR to an empty value.
+ % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+ %
+ % Since we want to separate VAR from REST-OF-LINE (which might be
+ % empty), we can't just use \parsearg; we have to insert a space of our
+ % own to delimit the rest of the line, and then take it out again if we
+ % didn't need it.  Make sure the catcode of space is correct to avoid
+ % losing inside @example, for instance.
+ %
+ \def\set{\begingroup\catcode` =10
+   \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
+   \parsearg\setxxx}
+ \def\setxxx#1{\setyyy#1 \endsetyyy}
+ \def\setyyy#1 #2\endsetyyy{%
+   \def\temp{#2}%
+   \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
+   \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
+   \fi
+   \endgroup
+ }
+ % Can't use \xdef to pre-expand #2 and save some time, since \temp or
+ % \next or other control sequences that we've defined might get us into
+ % an infinite loop. Consider `@set foo @cite{bar}'.
+ \def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
+ 
+ % @clear VAR clears (i.e., unsets) the variable VAR.
+ %
+ \def\clear{\parsearg\clearxxx}
+ \def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
+ 
+ % @value{foo} gets the text saved in variable foo.
+ {
+   \catcode`\_ = \active
+   %
+   % We might end up with active _ or - characters in the argument if
+   % we're called from @code, as @code{@value{foo-bar_}}.  So \let any
+   % such active characters to their normal equivalents.
+   \gdef\value{\begingroup
+     \catcode`\-=12 \catcode`\_=12
+     \indexbreaks \let_\normalunderscore
+     \valuexxx}
+ }
+ \def\valuexxx#1{\expandablevalue{#1}\endgroup}
+ 
+ % We have this subroutine so that we can handle at least some @value's
+ % properly in indexes (we \let\value to this in \indexdummies).  Ones
+ % whose names contain - or _ still won't work, but we can't do anything
+ % about that.  The command has to be fully expandable, since the result
+ % winds up in the index file.  This means that if the variable's value
+ % contains other Texinfo commands, it's almost certain it will fail
+ % (although perhaps we could fix that with sufficient work to do a
+ % one-level expansion on the result, instead of complete).
+ %
+ \def\expandablevalue#1{%
+   \expandafter\ifx\csname SET#1\endcsname\relax
+     {[No value for ``#1'']}%
+   \else
+     \csname SET#1\endcsname
+   \fi
+ }
+ 
+ % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+ % with @set.
+ %
+ \def\ifset{\parsearg\ifsetxxx}
+ \def\ifsetxxx #1{%
+   \expandafter\ifx\csname SET#1\endcsname\relax
+     \expandafter\ifsetfail
+   \else
+     \expandafter\ifsetsucceed
+   \fi
+ }
+ \def\ifsetsucceed{\conditionalsucceed{ifset}}
+ \def\ifsetfail{\nestedignore{ifset}}
+ \defineunmatchedend{ifset}
+ 
+ % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+ % defined with @set, or has been undefined with @clear.
+ %
+ \def\ifclear{\parsearg\ifclearxxx}
+ \def\ifclearxxx #1{%
+   \expandafter\ifx\csname SET#1\endcsname\relax
+     \expandafter\ifclearsucceed
+   \else
+     \expandafter\ifclearfail
+   \fi
+ }
+ \def\ifclearsucceed{\conditionalsucceed{ifclear}}
+ \def\ifclearfail{\nestedignore{ifclear}}
+ \defineunmatchedend{ifclear}
+ 
+ % @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we
+ % read the text following, through the first @end iftex (etc.).  Make
+ % `@end iftex' (etc.) valid only after an @iftex.
+ %
+ \def\iftex{\conditionalsucceed{iftex}}
+ \def\ifnothtml{\conditionalsucceed{ifnothtml}}
+ \def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
+ \def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}}
+ \defineunmatchedend{iftex}
+ \defineunmatchedend{ifnothtml}
+ \defineunmatchedend{ifnotinfo}
+ \defineunmatchedend{ifnotplaintext}
+ 
+ % We can't just want to start a group at @iftex (etc.) and end it at
+ % @end iftex, since then @set commands inside the conditional have no
+ % effect (they'd get reverted at the end of the group).  So we must
+ % define \Eiftex to redefine itself to be its previous value.  (We can't
+ % just define it to fail again with an ``unmatched end'' error, since
+ % the @ifset might be nested.)
+ %
+ \def\conditionalsucceed#1{%
+   \edef\temp{%
+     % Remember the current value of \E#1.
+     \let\nece{prevE#1} = \nece{E#1}%
+     %
+     % At the `@end #1', redefine \E#1 to be its previous value.
+     \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
+   }%
+   \temp
+ }
+ 
+ % We need to expand lots of \csname's, but we don't want to expand the
+ % control sequences after we've constructed them.
+ %
+ \def\nece#1{\expandafter\noexpand\csname#1\endcsname}
+ 
+ % @defininfoenclose.
+ \let\definfoenclose=\comment
+ 
+ 
+ \message{indexing,}
+ % Index generation facilities
+ 
+ % Define \newwrite to be identical to plain tex's \newwrite
+ % except not \outer, so it can be used within \newindex.
+ {\catcode`\@=11
+ \gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
+ 
+ % \newindex {foo} defines an index named foo.
+ % It automatically defines \fooindex such that
+ % \fooindex ...rest of line... puts an entry in the index foo.
+ % It also defines \fooindfile to be the number of the output channel for
+ % the file that accumulates this index.  The file's extension is foo.
+ % The name of an index should be no more than 2 characters long
+ % for the sake of vms.
+ %
+ \def\newindex#1{%
+   \iflinks
+     \expandafter\newwrite \csname#1indfile\endcsname
+     \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+   \fi
+   \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
+     \noexpand\doindex{#1}}
+ }
+ 
+ % @defindex foo  ==  \newindex{foo}
+ %
+ \def\defindex{\parsearg\newindex}
+ 
+ % Define @defcodeindex, like @defindex except put all entries in @code.
+ %
+ \def\defcodeindex{\parsearg\newcodeindex}
+ %
+ \def\newcodeindex#1{%
+   \iflinks
+     \expandafter\newwrite \csname#1indfile\endcsname
+     \openout \csname#1indfile\endcsname \jobname.#1
+   \fi
+   \expandafter\xdef\csname#1index\endcsname{%
+     \noexpand\docodeindex{#1}}%
+ }
+ 
+ 
+ % @synindex foo bar    makes index foo feed into index bar.
+ % Do this instead of @defindex foo if you don't want it as a separate index.
+ % 
+ % @syncodeindex foo bar   similar, but put all entries made for index foo
+ % inside @code.
+ % 
+ \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+ \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+ 
+ % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+ % #3 the target index (bar).
+ \def\dosynindex#1#2#3{%
+   % Only do \closeout if we haven't already done it, else we'll end up
+   % closing the target index.
+   \expandafter \ifx\csname donesynindex#2\endcsname \undefined
+     % The \closeout helps reduce unnecessary open files; the limit on the
+     % Acorn RISC OS is a mere 16 files.
+     \expandafter\closeout\csname#2indfile\endcsname
+     \expandafter\let\csname\donesynindex#2\endcsname = 1
+   \fi
+   % redefine \fooindfile:
+   \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+   \expandafter\let\csname#2indfile\endcsname=\temp
+   % redefine \fooindex:
+   \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+ }
+ 
+ % Define \doindex, the driver for all \fooindex macros.
+ % Argument #1 is generated by the calling \fooindex macro,
+ %  and it is "foo", the name of the index.
+ 
+ % \doindex just uses \parsearg; it calls \doind for the actual work.
+ % This is because \doind is more useful to call from other macros.
+ 
+ % There is also \dosubind {index}{topic}{subtopic}
+ % which makes an entry in a two-level index such as the operation index.
+ 
+ \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+ \def\singleindexer #1{\doind{\indexname}{#1}}
+ 
+ % like the previous two, but they put @code around the argument.
+ \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+ \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+ 
+ % Take care of texinfo commands likely to appear in an index entry.
+ % (Must be a way to avoid doing expansion at all, and thus not have to
+ % laboriously list every single command here.)
+ % 
+ \def\indexdummies{%
+ \def\ { }%
+ \def\@{@}% change to @@ when we switch to @ as escape char in aux files.
+ % Need these in case \tex is in effect and \{ is a \delimiter again.
+ % But can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters.  
+ \let\{ = \mylbrace
+ \let\} = \myrbrace
+ \def\_{{\realbackslash _}}%
+ \normalturnoffactive
+ %
+ % Take care of the plain tex accent commands.
+ \def\,##1{\realbackslash ,{##1}}%
+ \def\"{\realbackslash "}%
+ \def\`{\realbackslash `}%
+ \def\'{\realbackslash '}%
+ \def\^{\realbackslash ^}%
+ \def\~{\realbackslash ~}%
+ \def\={\realbackslash =}%
+ \def\b{\realbackslash b}%
+ \def\c{\realbackslash c}%
+ \def\d{\realbackslash d}%
+ \def\u{\realbackslash u}%
+ \def\v{\realbackslash v}%
+ \def\H{\realbackslash H}%
+ \def\dotless##1{\realbackslash dotless {##1}}%
+ % Take care of the plain tex special European modified letters.
+ \def\AA{\realbackslash AA}%
+ \def\AE{\realbackslash AE}%
+ \def\L{\realbackslash L}%
+ \def\OE{\realbackslash OE}%
+ \def\O{\realbackslash O}%
+ \def\aa{\realbackslash aa}%
+ \def\ae{\realbackslash ae}%
+ \def\l{\realbackslash l}%
+ \def\oe{\realbackslash oe}%
+ \def\o{\realbackslash o}%
+ \def\ss{\realbackslash ss}%
+ %
+ % Although these internals commands shouldn't show up, sometimes they do.
+ \def\bf{\realbackslash bf }%
+ \def\gtr{\realbackslash gtr}%
+ \def\hat{\realbackslash hat}%
+ \def\less{\realbackslash less}%
+ %\def\rm{\realbackslash rm }%
+ \def\sf{\realbackslash sf}%
+ \def\sl{\realbackslash sl }%
+ \def\tclose##1{\realbackslash tclose {##1}}%
+ \def\tt{\realbackslash tt}%
+ %
+ \def\b##1{\realbackslash b {##1}}%
+ \def\i##1{\realbackslash i {##1}}%
+ \def\sc##1{\realbackslash sc {##1}}%
+ \def\t##1{\realbackslash t {##1}}%
+ \def\r##1{\realbackslash r {##1}}%
+ %
+ \def\TeX{\realbackslash TeX}%
+ \def\acronym##1{\realbackslash acronym {##1}}%
+ \def\cite##1{\realbackslash cite {##1}}%
+ \def\code##1{\realbackslash code {##1}}%
+ \def\command##1{\realbackslash command {##1}}%
+ \def\dfn##1{\realbackslash dfn {##1}}%
+ \def\dots{\realbackslash dots }%
+ \def\emph##1{\realbackslash emph {##1}}%
+ \def\env##1{\realbackslash env {##1}}%
+ \def\file##1{\realbackslash file {##1}}%
+ \def\kbd##1{\realbackslash kbd {##1}}%
+ \def\key##1{\realbackslash key {##1}}%
+ \def\math##1{\realbackslash math {##1}}%
+ \def\option##1{\realbackslash option {##1}}%
+ \def\samp##1{\realbackslash samp {##1}}%
+ \def\strong##1{\realbackslash strong {##1}}%
+ \def\uref##1{\realbackslash uref {##1}}%
+ \def\url##1{\realbackslash url {##1}}%
+ \def\var##1{\realbackslash var {##1}}%
+ \def\w{\realbackslash w }%
+ %
+ % These math commands don't seem likely to be used in index entries.
+ \def\copyright{\realbackslash copyright}%
+ \def\equiv{\realbackslash equiv}%
+ \def\error{\realbackslash error}%
+ \def\expansion{\realbackslash expansion}%
+ \def\point{\realbackslash point}%
+ \def\print{\realbackslash print}%
+ \def\result{\realbackslash result}%
+ %
+ % Handle some cases of @value -- where the variable name does not
+ % contain - or _, and the value does not contain any
+ % (non-fully-expandable) commands.
+ \let\value = \expandablevalue
+ %
+ \unsepspaces
+ % Turn off macro expansion
+ \turnoffmacros
+ }
+ 
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
+ {\obeyspaces
+  \gdef\unsepspaces{\obeyspaces\let =\space}}
+ 
+ % \indexnofonts no-ops all font-change commands.
+ % This is used when outputting the strings to sort the index by.
+ \def\indexdummyfont#1{#1}
+ \def\indexdummytex{TeX}
+ \def\indexdummydots{...}
+ 
+ \def\indexnofonts{%
+ \def\@{@}%
+ % how to handle braces?
+ \def\_{\normalunderscore}%
+ %
+ \let\,=\indexdummyfont
+ \let\"=\indexdummyfont
+ \let\`=\indexdummyfont
+ \let\'=\indexdummyfont
+ \let\^=\indexdummyfont
+ \let\~=\indexdummyfont
+ \let\==\indexdummyfont
+ \let\b=\indexdummyfont
+ \let\c=\indexdummyfont
+ \let\d=\indexdummyfont
+ \let\u=\indexdummyfont
+ \let\v=\indexdummyfont
+ \let\H=\indexdummyfont
+ \let\dotless=\indexdummyfont
+ % Take care of the plain tex special European modified letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\o{o}%
+ \def\ss{ss}%
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\indexdummyfont
+ %
+ \let\b=\indexdummyfont
+ \let\i=\indexdummyfont
+ \let\r=\indexdummyfont
+ \let\sc=\indexdummyfont
+ \let\t=\indexdummyfont
+ %
+ \let\TeX=\indexdummytex
+ \let\acronym=\indexdummyfont
+ \let\cite=\indexdummyfont
+ \let\code=\indexdummyfont
+ \let\command=\indexdummyfont
+ \let\dfn=\indexdummyfont
+ \let\dots=\indexdummydots
+ \let\emph=\indexdummyfont
+ \let\env=\indexdummyfont
+ \let\file=\indexdummyfont
+ \let\kbd=\indexdummyfont
+ \let\key=\indexdummyfont
+ \let\math=\indexdummyfont
+ \let\option=\indexdummyfont
+ \let\samp=\indexdummyfont
+ \let\strong=\indexdummyfont
+ \let\uref=\indexdummyfont
+ \let\url=\indexdummyfont
+ \let\var=\indexdummyfont
+ \let\w=\indexdummyfont
+ }
+ 
+ % To define \realbackslash, we must make \ not be an escape.
+ % We must first make another character (@) an escape
+ % so we do not become unable to do a definition.
+ 
+ {\catcode`\@=0 \catcode`\\=\other
+  @gdef@realbackslash{\}}
+ 
+ \let\indexbackslash=0  %overridden during \printindex.
+ \let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+ 
+ % For \ifx comparisons.
+ \def\emptymacro{\empty}
+ 
+ % Most index entries go through here, but \dosubind is the general case.
+ %
+ \def\doind#1#2{\dosubind{#1}{#2}\empty}
+ 
+ % Workhorse for all \fooindexes.
+ % #1 is name of index, #2 is stuff to put there, #3 is subentry --
+ % \empty if called from \doind, as we usually are.  The main exception
+ % is with defuns, which call us directly.
+ %
+ \def\dosubind#1#2#3{%
+   % Put the index entry in the margin if desired.
+   \ifx\SETmarginindex\relax\else
+     \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
+   \fi
+   {%
+     \count255=\lastpenalty
+     {%
+       \indexdummies % Must do this here, since \bf, etc expand at this stage
+       \escapechar=`\\
+       {%
+         \let\folio = 0% We will expand all macros now EXCEPT \folio.
+         \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+         % so it will be output as is; and it will print as backslash.
+         %
+         \def\thirdarg{#3}%
+         %
+         % If third arg is present, precede it with space in sort key.
+         \ifx\thirdarg\emptymacro
+           \let\subentry = \empty
+         \else
+           \def\subentry{ #3}%
+         \fi
+         %
+         % First process the index entry with all font commands turned
+         % off to get the string to sort by.
+         {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
+         %
+         % Now the real index entry with the fonts.
+         \toks0 = {#2}%
+         %
+         % If the third (subentry) arg is present, add it to the index
+         % line to write.
+         \ifx\thirdarg\emptymacro \else
+           \toks0 = \expandafter{\the\toks0{#3}}%
+         \fi
+         %
+         % Set up the complete index entry, with both the sort key and
+         % the original text, including any font commands.  We write
+         % three arguments to \entry to the .?? file (four in the
+         % subentry case), texindex reduces to two when writing the .??s
+         % sorted result.
+         \edef\temp{%
+           \write\csname#1indfile\endcsname{%
+             \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
+         }%
+         %
+         % If a skip is the last thing on the list now, preserve it
+         % by backing up by \lastskip, doing the \write, then inserting
+         % the skip again.  Otherwise, the whatsit generated by the
+         % \write will make \lastskip zero.  The result is that sequences
+         % like this:
+         % @end defun
+         % @tindex whatever
+         % @defun ...
+         % will have extra space inserted, because the \medbreak in the
+         % start of the @defun won't see the skip inserted by the @end of
+         % the previous defun.
+         %
+         % But don't do any of this if we're not in vertical mode.  We
+         % don't want to do a \vskip and prematurely end a paragraph.
+         %
+         % Avoid page breaks due to these extra skips, too.
+         %
+         \iflinks
+           \ifvmode
+             \skip0 = \lastskip
+             \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
+           \fi
+           %
+           \temp % do the write
+           %
+           %
+           \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
+         \fi
+       }%
+     }%
+     \penalty\count255
+   }%
+ }
+ 
+ % The index entry written in the file actually looks like
+ %  \entry {sortstring}{page}{topic}
+ % or
+ %  \entry {sortstring}{page}{topic}{subtopic}
+ % The texindex program reads in these files and writes files
+ % containing these kinds of lines:
+ %  \initial {c}
+ %     before the first topic whose initial is c
+ %  \entry {topic}{pagelist}
+ %     for a topic that is used without subtopics
+ %  \primary {topic}
+ %     for the beginning of a topic that is used with subtopics
+ %  \secondary {subtopic}{pagelist}
+ %     for each subtopic.
+ 
+ % Define the user-accessible indexing commands
+ % @findex, @vindex, @kindex, @cindex.
+ 
+ \def\findex {\fnindex}
+ \def\kindex {\kyindex}
+ \def\cindex {\cpindex}
+ \def\vindex {\vrindex}
+ \def\tindex {\tpindex}
+ \def\pindex {\pgindex}
+ 
+ \def\cindexsub {\begingroup\obeylines\cindexsub}
+ {\obeylines %
+ \gdef\cindexsub "#1" #2^^M{\endgroup %
+ \dosubind{cp}{#2}{#1}}}
+ 
+ % Define the macros used in formatting output of the sorted index material.
+ 
+ % @printindex causes a particular index (the ??s file) to get printed.
+ % It does not print any chapter heading (usually an @unnumbered).
+ %
+ \def\printindex{\parsearg\doprintindex}
+ \def\doprintindex#1{\begingroup
+   \dobreak \chapheadingskip{10000}%
+   %
+   \smallfonts \rm
+   \tolerance = 9500
+   \indexbreaks
+   %
+   % See if the index file exists and is nonempty.
+   % Change catcode of @ here so that if the index file contains
+   % \initial {@}
+   % as its first line, TeX doesn't complain about mismatched braces
+   % (because it thinks @} is a control sequence).
+   \catcode`\@ = 11
+   \openin 1 \jobname.#1s
+   \ifeof 1
+     % \enddoublecolumns gets confused if there is no text in the index,
+     % and it loses the chapter title and the aux file entries for the
+     % index.  The easiest way to prevent this problem is to make sure
+     % there is some text.
+     \putwordIndexNonexistent
+   \else
+     %
+     % If the index file exists but is empty, then \openin leaves \ifeof
+     % false.  We have to make TeX try to read something from the file, so
+     % it can discover if there is anything in it.
+     \read 1 to \temp
+     \ifeof 1
+       \putwordIndexIsEmpty
+     \else
+       % Index files are almost Texinfo source, but we use \ as the escape
+       % character.  It would be better to use @, but that's too big a change
+       % to make right now.
+       \def\indexbackslash{\rawbackslashxx}%
+       \catcode`\\ = 0
+       \escapechar = `\\
+       \begindoublecolumns
+       \input \jobname.#1s
+       \enddoublecolumns
+     \fi
+   \fi
+   \closein 1
+ \endgroup}
+ 
+ % These macros are used by the sorted index file itself.
+ % Change them to control the appearance of the index.
+ 
+ \def\initial#1{{%
+   % Some minor font changes for the special characters.
+   \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+   %
+   % Remove any glue we may have, we'll be inserting our own.
+   \removelastskip
+   %
+   % We like breaks before the index initials, so insert a bonus.
+   \penalty -300
+   %
+   % Typeset the initial.  Making this add up to a whole number of
+   % baselineskips increases the chance of the dots lining up from column
+   % to column.  It still won't often be perfect, because of the stretch
+   % we need before each entry, but it's better.
+   %
+   % No shrink because it confuses \balancecolumns.
+   \vskip 1.67\baselineskip plus .5\baselineskip
+   \leftline{\secbf #1}%
+   \vskip .33\baselineskip plus .1\baselineskip
+   %
+   % Do our best not to break after the initial.
+   \nobreak
+ }}
+ 
+ % This typesets a paragraph consisting of #1, dot leaders, and then #2
+ % flush to the right margin.  It is used for index and table of contents
+ % entries.  The paragraph is indented by \leftskip.
+ %
+ \def\entry#1#2{\begingroup
+   %
+   % Start a new paragraph if necessary, so our assignments below can't
+   % affect previous text.
+   \par
+   %
+   % Do not fill out the last line with white space.
+   \parfillskip = 0in
+   %
+   % No extra space above this paragraph.
+   \parskip = 0in
+   %
+   % Do not prefer a separate line ending with a hyphen to fewer lines.
+   \finalhyphendemerits = 0
+   %
+   % \hangindent is only relevant when the entry text and page number
+   % don't both fit on one line.  In that case, bob suggests starting the
+   % dots pretty far over on the line.  Unfortunately, a large
+   % indentation looks wrong when the entry text itself is broken across
+   % lines.  So we use a small indentation and put up with long leaders.
+   %
+   % \hangafter is reset to 1 (which is the value we want) at the start
+   % of each paragraph, so we need not do anything with that.
+   \hangindent = 2em
+   %
+   % When the entry text needs to be broken, just fill out the first line
+   % with blank space.
+   \rightskip = 0pt plus1fil
+   %
+   % A bit of stretch before each entry for the benefit of balancing columns.
+   \vskip 0pt plus1pt
+   %
+   % Start a ``paragraph'' for the index entry so the line breaking
+   % parameters we've set above will have an effect.
+   \noindent
+   %
+   % Insert the text of the index entry.  TeX will do line-breaking on it.
+   #1%
+   % The following is kludged to not output a line of dots in the index if
+   % there are no page numbers.  The next person who breaks this will be
+   % cursed by a Unix daemon.
+   \def\tempa{{\rm }}%
+   \def\tempb{#2}%
+   \edef\tempc{\tempa}%
+   \edef\tempd{\tempb}%
+   \ifx\tempc\tempd\ \else%
+     %
+     % If we must, put the page number on a line of its own, and fill out
+     % this line with blank space.  (The \hfil is overwhelmed with the
+     % fill leaders glue in \indexdotfill if the page number does fit.)
+     \hfil\penalty50
+     \null\nobreak\indexdotfill % Have leaders before the page number.
+     %
+     % The `\ ' here is removed by the implicit \unskip that TeX does as
+     % part of (the primitive) \par.  Without it, a spurious underfull
+     % \hbox ensues.
+     \ifpdf
+       \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+     \else
+       \ #2% The page number ends the paragraph.
+     \fi
+   \fi%
+   \par
+ \endgroup}
+ 
+ % Like \dotfill except takes at least 1 em.
+ \def\indexdotfill{\cleaders
+   \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
+ 
+ \def\primary #1{\line{#1\hfil}}
+ 
+ \newskip\secondaryindent \secondaryindent=0.5cm
+ \def\secondary#1#2{{%
+   \parfillskip=0in
+   \parskip=0in
+   \hangindent=1in
+   \hangafter=1
+   \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+   \ifpdf
+     \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+   \else
+     #2
+   \fi
+   \par
+ }}
+ 
+ % Define two-column mode, which we use to typeset indexes.
+ % Adapted from the TeXbook, page 416, which is to say,
+ % the manmac.tex format used to print the TeXbook itself.
+ \catcode`\@=11
+ 
+ \newbox\partialpage
+ \newdimen\doublecolumnhsize
+ 
+ \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+   % Grab any single-column material above us.
+   \output = {%
+     %
+     % Here is a possibility not foreseen in manmac: if we accumulate a
+     % whole lot of material, we might end up calling this \output
+     % routine twice in a row (see the doublecol-lose test, which is
+     % essentially a couple of indexes with @setchapternewpage off).  In
+     % that case we just ship out what is in \partialpage with the normal
+     % output routine.  Generally, \partialpage will be empty when this
+     % runs and this will be a no-op.  See the indexspread.tex test case.
+     \ifvoid\partialpage \else
+       \onepageout{\pagecontents\partialpage}%
+     \fi
+     %
+     \global\setbox\partialpage = \vbox{%
+       % Unvbox the main output page.
+       \unvbox\PAGE
+       \kern-\topskip \kern\baselineskip
+     }%
+   }%
+   \eject % run that output routine to set \partialpage
+   %
+   % Use the double-column output routine for subsequent pages.
+   \output = {\doublecolumnout}%
+   %
+   % Change the page size parameters.  We could do this once outside this
+   % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+   % format, but then we repeat the same computation.  Repeating a couple
+   % of assignments once per index is clearly meaningless for the
+   % execution time, so we may as well do it in one place.
+   %
+   % First we halve the line length, less a little for the gutter between
+   % the columns.  We compute the gutter based on the line length, so it
+   % changes automatically with the paper format.  The magic constant
+   % below is chosen so that the gutter has the same value (well, +-<1pt)
+   % as it did when we hard-coded it.
+   %
+   % We put the result in a separate register, \doublecolumhsize, so we
+   % can restore it in \pagesofar, after \hsize itself has (potentially)
+   % been clobbered.
+   %
+   \doublecolumnhsize = \hsize
+     \advance\doublecolumnhsize by -.04154\hsize
+     \divide\doublecolumnhsize by 2
+   \hsize = \doublecolumnhsize
+   %
+   % Double the \vsize as well.  (We don't need a separate register here,
+   % since nobody clobbers \vsize.)
+   \vsize = 2\vsize
+ }
+ 
+ % The double-column output routine for all double-column pages except
+ % the last.
+ %
+ \def\doublecolumnout{%
+   \splittopskip=\topskip \splitmaxdepth=\maxdepth
+   % Get the available space for the double columns -- the normal
+   % (undoubled) page height minus any material left over from the
+   % previous page.
+   \dimen@ = \vsize
+   \divide\dimen@ by 2
+   \advance\dimen@ by -\ht\partialpage
+   %
+   % box0 will be the left-hand column, box2 the right.
+   \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+   \onepageout\pagesofar
+   \unvbox255
+   \penalty\outputpenalty
+ }
+ %
+ % Re-output the contents of the output page -- any previous material,
+ % followed by the two boxes we just split, in box0 and box2.
+ \def\pagesofar{%
+   \unvbox\partialpage
+   %
+   \hsize = \doublecolumnhsize
+   \wd0=\hsize \wd2=\hsize
+   \hbox to\pagewidth{\box0\hfil\box2}%
+ }
+ % 
+ % All done with double columns.
+ \def\enddoublecolumns{%
+   \output = {%
+     % Split the last of the double-column material.  Leave it on the
+     % current page, no automatic page break.
+     \balancecolumns
+     %
+     % If we end up splitting too much material for the current page,
+     % though, there will be another page break right after this \output
+     % invocation ends.  Having called \balancecolumns once, we do not
+     % want to call it again.  Therefore, reset \output to its normal
+     % definition right away.  (We hope \balancecolumns will never be
+     % called on to balance too much material, but if it is, this makes
+     % the output somewhat more palatable.)
+     \global\output = {\onepageout{\pagecontents\PAGE}}%
+   }%
+   \eject
+   \endgroup % started in \begindoublecolumns
+   %
+   % \pagegoal was set to the doubled \vsize above, since we restarted
+   % the current page.  We're now back to normal single-column
+   % typesetting, so reset \pagegoal to the normal \vsize (after the
+   % \endgroup where \vsize got restored).
+   \pagegoal = \vsize
+ }
+ %
+ % Called at the end of the double column material.
+ \def\balancecolumns{%
+   \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+   \dimen@ = \ht0
+   \advance\dimen@ by \topskip
+   \advance\dimen@ by-\baselineskip
+   \divide\dimen@ by 2 % target to split to
+   %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
+   \splittopskip = \topskip
+   % Loop until we get a decent breakpoint.
+   {%
+     \vbadness = 10000
+     \loop
+       \global\setbox3 = \copy0
+       \global\setbox1 = \vsplit3 to \dimen@
+     \ifdim\ht3>\dimen@
+       \global\advance\dimen@ by 1pt
+     \repeat
+   }%
+   %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+   \setbox0=\vbox to\dimen@{\unvbox1}%
+   \setbox2=\vbox to\dimen@{\unvbox3}%
+   %
+   \pagesofar
+ }
+ \catcode`\@ = \other
+ 
+ 
+ \message{sectioning,}
+ % Chapters, sections, etc.
+ 
+ \newcount\chapno
+ \newcount\secno        \secno=0
+ \newcount\subsecno     \subsecno=0
+ \newcount\subsubsecno  \subsubsecno=0
+ 
+ % This counter is funny since it counts through charcodes of letters A, B, ...
+ \newcount\appendixno  \appendixno = `\@
+ % \def\appendixletter{\char\the\appendixno}
+ % We do the following for the sake of pdftex, which needs the actual
+ % letter in the expansion, not just typeset.
+ \def\appendixletter{%
+   \ifnum\appendixno=`A A%
+   \else\ifnum\appendixno=`B B%
+   \else\ifnum\appendixno=`C C%
+   \else\ifnum\appendixno=`D D%
+   \else\ifnum\appendixno=`E E%
+   \else\ifnum\appendixno=`F F%
+   \else\ifnum\appendixno=`G G%
+   \else\ifnum\appendixno=`H H%
+   \else\ifnum\appendixno=`I I%
+   \else\ifnum\appendixno=`J J%
+   \else\ifnum\appendixno=`K K%
+   \else\ifnum\appendixno=`L L%
+   \else\ifnum\appendixno=`M M%
+   \else\ifnum\appendixno=`N N%
+   \else\ifnum\appendixno=`O O%
+   \else\ifnum\appendixno=`P P%
+   \else\ifnum\appendixno=`Q Q%
+   \else\ifnum\appendixno=`R R%
+   \else\ifnum\appendixno=`S S%
+   \else\ifnum\appendixno=`T T%
+   \else\ifnum\appendixno=`U U%
+   \else\ifnum\appendixno=`V V%
+   \else\ifnum\appendixno=`W W%
+   \else\ifnum\appendixno=`X X%
+   \else\ifnum\appendixno=`Y Y%
+   \else\ifnum\appendixno=`Z Z%
+   % The \the is necessary, despite appearances, because \appendixletter is
+   % expanded while writing the .toc file.  \char\appendixno is not
+   % expandable, thus it is written literally, thus all appendixes come out
+   % with the same letter (or @) in the toc without it.
+   \else\char\the\appendixno
+   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+ 
+ % Each @chapter defines this as the name of the chapter.
+ % page headings and footings can use it.  @section does likewise.
+ \def\thischapter{}
+ \def\thissection{}
+ 
+ \newcount\absseclevel % used to calculate proper heading level
+ \newcount\secbase\secbase=0 % @raise/lowersections modify this count
+ 
+ % @raisesections: treat @section as chapter, @subsection as section, etc.
+ \def\raisesections{\global\advance\secbase by -1}
+ \let\up=\raisesections % original BFox name
+ 
+ % @lowersections: treat @chapter as section, @section as subsection, etc.
+ \def\lowersections{\global\advance\secbase by 1}
+ \let\down=\lowersections % original BFox name
+ 
+ % Choose a numbered-heading macro
+ % #1 is heading level if unmodified by @raisesections or @lowersections
+ % #2 is text for heading
+ \def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+ \ifcase\absseclevel
+   \chapterzzz{#2}
+ \or
+   \seczzz{#2}
+ \or
+   \numberedsubseczzz{#2}
+ \or
+   \numberedsubsubseczzz{#2}
+ \else
+   \ifnum \absseclevel<0
+     \chapterzzz{#2}
+   \else
+     \numberedsubsubseczzz{#2}
+   \fi
+ \fi
+ }
+ 
+ % like \numhead, but chooses appendix heading levels
+ \def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+ \ifcase\absseclevel
+   \appendixzzz{#2}
+ \or
+   \appendixsectionzzz{#2}
+ \or
+   \appendixsubseczzz{#2}
+ \or
+   \appendixsubsubseczzz{#2}
+ \else
+   \ifnum \absseclevel<0
+     \appendixzzz{#2}
+   \else
+     \appendixsubsubseczzz{#2}
+   \fi
+ \fi
+ }
+ 
+ % like \numhead, but chooses numberless heading levels
+ \def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+ \ifcase\absseclevel
+   \unnumberedzzz{#2}
+ \or
+   \unnumberedseczzz{#2}
+ \or
+   \unnumberedsubseczzz{#2}
+ \or
+   \unnumberedsubsubseczzz{#2}
+ \else
+   \ifnum \absseclevel<0
+     \unnumberedzzz{#2}
+   \else
+     \unnumberedsubsubseczzz{#2}
+   \fi
+ \fi
+ }
+ 
+ % @chapter, @appendix, @unnumbered.
+ \def\thischaptername{No Chapter Title}
+ \outer\def\chapter{\parsearg\chapteryyy}
+ \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
+ \def\chapterzzz #1{%
+ \secno=0 \subsecno=0 \subsubsecno=0
+ \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
+ \chapmacro {#1}{\the\chapno}%
+ \gdef\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ % We don't substitute the actual chapter name into \thischapter
+ % because we don't want its macros evaluated now.
+ \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
+                                   {\the\chapno}}}%
+ \temp
+ \donoderef
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+ }
+ 
+ \outer\def\appendix{\parsearg\appendixyyy}
+ \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
+ \def\appendixzzz #1{%
+ \secno=0 \subsecno=0 \subsubsecno=0
+ \global\advance \appendixno by 1
+ \message{\putwordAppendix\space \appendixletter}%
+ \chapmacro {#1}{\putwordAppendix{} \appendixletter}%
+ \gdef\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash appendixentry{\the\toks0}%
+                        {\appendixletter}}}%
+ \temp
+ \appendixnoderef
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+ }
+ 
+ % @centerchap is like @unnumbered, but the heading is centered.
+ \outer\def\centerchap{\parsearg\centerchapyyy}
+ \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
+ 
+ % @top is like @unnumbered.
+ \outer\def\top{\parsearg\unnumberedyyy}
+ 
+ \outer\def\unnumbered{\parsearg\unnumberedyyy}
+ \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+ \def\unnumberedzzz #1{%
+ \secno=0 \subsecno=0 \subsubsecno=0
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message.  Therefore, if #1 contained @-commands, TeX
+ % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself.  We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>.  (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}\message{(\the\toks0)}%
+ %
+ \unnumbchapmacro {#1}%
+ \gdef\thischapter{#1}\gdef\thissection{#1}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
+ \temp
+ \unnumbnoderef
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+ }
+ 
+ % Sections.
+ \outer\def\numberedsec{\parsearg\secyyy}
+ \def\secyyy #1{\numhead1{#1}} % normally calls seczzz
+ \def\seczzz #1{%
+ \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+ \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+                                   {\the\chapno}{\the\secno}}}%
+ \temp
+ \donoderef
+ \nobreak
+ }
+ 
+ \outer\def\appendixsection{\parsearg\appendixsecyyy}
+ \outer\def\appendixsec{\parsearg\appendixsecyyy}
+ \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
+ \def\appendixsectionzzz #1{%
+ \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+ \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+                                   {\appendixletter}{\the\secno}}}%
+ \temp
+ \appendixnoderef
+ \nobreak
+ }
+ 
+ \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
+ \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
+ \def\unnumberedseczzz #1{%
+ \plainsecheading {#1}\gdef\thissection{#1}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry%
+   {\the\toks0}{\the\chapno}}}%
+ \temp
+ \unnumbnoderef
+ \nobreak
+ }
+ 
+ % Subsections.
+ \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
+ \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
+ \def\numberedsubseczzz #1{%
+ \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+ \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+                                     {\the\chapno}{\the\secno}{\the\subsecno}}}%
+ \temp
+ \donoderef
+ \nobreak
+ }
+ 
+ \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
+ \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
+ \def\appendixsubseczzz #1{%
+ \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+ \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+                                 {\appendixletter}{\the\secno}{\the\subsecno}}}%
+ \temp
+ \appendixnoderef
+ \nobreak
+ }
+ 
+ \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
+ \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+ \def\unnumberedsubseczzz #1{%
+ \plainsubsecheading {#1}\gdef\thissection{#1}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
+   {\the\toks0}{\the\chapno}{\the\secno}}}%
+ \temp
+ \unnumbnoderef
+ \nobreak
+ }
+ 
+ % Subsubsections.
+ \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
+ \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
+ \def\numberedsubsubseczzz #1{%
+ \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+ \subsubsecheading {#1}
+   {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+   {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+ \temp
+ \donoderef
+ \nobreak
+ }
+ 
+ \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
+ \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
+ \def\appendixsubsubseczzz #1{%
+ \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+ \subsubsecheading {#1}
+   {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+   {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+ \temp
+ \appendixnoderef
+ \nobreak
+ }
+ 
+ \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
+ \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+ \def\unnumberedsubsubseczzz #1{%
+ \plainsubsubsecheading {#1}\gdef\thissection{#1}%
+ \toks0 = {#1}%
+ \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
+   {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}}}%
+ \temp
+ \unnumbnoderef
+ \nobreak
+ }
+ 
+ % These are variants which are not "outer", so they can appear in @ifinfo.
+ % Actually, they should now be obsolete; ordinary section commands should work.
+ \def\infotop{\parsearg\unnumberedzzz}
+ \def\infounnumbered{\parsearg\unnumberedzzz}
+ \def\infounnumberedsec{\parsearg\unnumberedseczzz}
+ \def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
+ \def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
+ 
+ \def\infoappendix{\parsearg\appendixzzz}
+ \def\infoappendixsec{\parsearg\appendixseczzz}
+ \def\infoappendixsubsec{\parsearg\appendixsubseczzz}
+ \def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
+ 
+ \def\infochapter{\parsearg\chapterzzz}
+ \def\infosection{\parsearg\sectionzzz}
+ \def\infosubsection{\parsearg\subsectionzzz}
+ \def\infosubsubsection{\parsearg\subsubsectionzzz}
+ 
+ % These macros control what the section commands do, according
+ % to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+ % Define them by default for a numbered chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+ 
+ % Define @majorheading, @heading and @subheading
+ 
+ % NOTE on use of \vbox for chapter headings, section headings, and such:
+ %       1) We use \vbox rather than the earlier \line to permit
+ %          overlong headings to fold.
+ %       2) \hyphenpenalty is set to 10000 because hyphenation in a
+ %          heading is obnoxious; this forbids it.
+ %       3) Likewise, headings look best if no \parindent is used, and
+ %          if justification is not attempted.  Hence \raggedright.
+ 
+ 
+ \def\majorheading{\parsearg\majorheadingzzz}
+ \def\majorheadingzzz #1{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                   \parindent=0pt\raggedright
+                   \rm #1\hfill}}\bigskip \par\penalty 200}
+ 
+ \def\chapheading{\parsearg\chapheadingzzz}
+ \def\chapheadingzzz #1{\chapbreak %
+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                   \parindent=0pt\raggedright
+                   \rm #1\hfill}}\bigskip \par\penalty 200}
+ 
+ % @heading, @subheading, @subsubheading.
+ \def\heading{\parsearg\plainsecheading}
+ \def\subheading{\parsearg\plainsubsecheading}
+ \def\subsubheading{\parsearg\plainsubsubsecheading}
+ 
+ % These macros generate a chapter, section, etc. heading only
+ % (including whitespace, linebreaking, etc. around it),
+ % given all the information in convenient, parsed form.
+ 
+ %%% Args are the skip and penalty (usually negative)
+ \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+ 
+ \def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+ 
+ %%% Define plain chapter starts, and page on/off switching for it
+ % Parameter controlling skip before chapter headings (if needed)
+ 
+ \newskip\chapheadingskip
+ 
+ \def\chapbreak{\dobreak \chapheadingskip {-4000}}
+ \def\chappager{\par\vfill\supereject}
+ \def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
+ 
+ \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+ 
+ \def\CHAPPAGoff{%
+ \global\let\contentsalignmacro = \chappager
+ \global\let\pchapsepmacro=\chapbreak
+ \global\let\pagealignmacro=\chappager}
+ 
+ \def\CHAPPAGon{%
+ \global\let\contentsalignmacro = \chappager
+ \global\let\pchapsepmacro=\chappager
+ \global\let\pagealignmacro=\chappager
+ \global\def\HEADINGSon{\HEADINGSsingle}}
+ 
+ \def\CHAPPAGodd{
+ \global\let\contentsalignmacro = \chapoddpage
+ \global\let\pchapsepmacro=\chapoddpage
+ \global\let\pagealignmacro=\chapoddpage
+ \global\def\HEADINGSon{\HEADINGSdouble}}
+ 
+ \CHAPPAGon
+ 
+ \def\CHAPFplain{
+ \global\let\chapmacro=\chfplain
+ \global\let\unnumbchapmacro=\unnchfplain
+ \global\let\centerchapmacro=\centerchfplain}
+ 
+ % Plain chapter opening.
+ % #1 is the text, #2 the chapter number or empty if unnumbered.
+ \def\chfplain#1#2{%
+   \pchapsepmacro
+   {%
+     \chapfonts \rm
+     \def\chapnum{#2}%
+     \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
+     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+           \hangindent = \wd0 \centerparametersmaybe
+           \unhbox0 #1\par}%
+   }%
+   \nobreak\bigskip % no page break after a chapter title
+   \nobreak
+ }
+ 
+ % Plain opening for unnumbered.
+ \def\unnchfplain#1{\chfplain{#1}{}}
+ 
+ % @centerchap -- centered and unnumbered.
+ \let\centerparametersmaybe = \relax
+ \def\centerchfplain#1{{%
+   \def\centerparametersmaybe{%
+     \advance\rightskip by 3\rightskip
+     \leftskip = \rightskip
+     \parfillskip = 0pt
+   }%
+   \chfplain{#1}{}%
+ }}
+ 
+ \CHAPFplain % The default
+ 
+ \def\unnchfopen #1{%
+ \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                        \parindent=0pt\raggedright
+                        \rm #1\hfill}}\bigskip \par\nobreak
+ }
+ 
+ \def\chfopen #1#2{\chapoddpage {\chapfonts
+ \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+ \par\penalty 5000 %
+ }
+ 
+ \def\centerchfopen #1{%
+ \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                        \parindent=0pt
+                        \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+ }
+ 
+ \def\CHAPFopen{
+ \global\let\chapmacro=\chfopen
+ \global\let\unnumbchapmacro=\unnchfopen
+ \global\let\centerchapmacro=\centerchfopen}
+ 
+ 
+ % Section titles.
+ \newskip\secheadingskip
+ \def\secheadingbreak{\dobreak \secheadingskip {-1000}}
+ \def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
+ \def\plainsecheading#1{\sectionheading{sec}{}{#1}}
+ 
+ % Subsection titles.
+ \newskip \subsecheadingskip
+ \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+ \def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
+ \def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
+ 
+ % Subsubsection titles.
+ \let\subsubsecheadingskip = \subsecheadingskip
+ \let\subsubsecheadingbreak = \subsecheadingbreak
+ \def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
+ \def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
+ 
+ 
+ % Print any size section title.
+ %
+ % #1 is the section type (sec/subsec/subsubsec), #2 is the section
+ % number (maybe empty), #3 the text.
+ \def\sectionheading#1#2#3{%
+   {%
+     \expandafter\advance\csname #1headingskip\endcsname by \parskip
+     \csname #1headingbreak\endcsname
+   }%
+   {%
+     % Switch to the right set of fonts.
+     \csname #1fonts\endcsname \rm
+     %
+     % Only insert the separating space if we have a section number.
+     \def\secnum{#2}%
+     \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
+     %
+     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+           \hangindent = \wd0 % zero if no section number
+           \unhbox0 #3}%
+   }%
+   \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
+ }
+ 
+ 
+ \message{toc,}
+ % Table of contents.
+ \newwrite\tocfile
+ 
+ % Write an entry to the toc file, opening it if necessary.
+ % Called from @chapter, etc.  We supply {\folio} at the end of the
+ % argument, which will end up as the last argument to the \...entry macro.
+ %
+ % We open the .toc file here instead of at @setfilename or any other
+ % fixed time so that @contents can be put in the document anywhere.
+ %
+ \newif\iftocfileopened
+ \def\writetocentry#1{%
+   \iftocfileopened\else
+     \immediate\openout\tocfile = \jobname.toc
+     \global\tocfileopenedtrue
+   \fi
+   \iflinks \write\tocfile{#1{\folio}}\fi
+   %
+   % Tell \shipout to create a page destination if we're doing pdf, which
+   % will be the target of the links in the table of contents.  We can't
+   % just do it on every page because the title pages are numbered 1 and
+   % 2 (the page numbers aren't printed), and so are the first two pages
+   % of the document.  Thus, we'd have two destinations named `1', and
+   % two named `2'.
+   \ifpdf \pdfmakepagedesttrue \fi
+ }
+ 
+ \newskip\contentsrightmargin \contentsrightmargin=1in
+ \newcount\savepageno
+ \newcount\lastnegativepageno \lastnegativepageno = -1
+ 
+ % Finish up the main text and prepare to read what we've written
+ % to \tocfile.
+ %
+ \def\startcontents#1{%
+    % If @setchapternewpage on, and @headings double, the contents should
+    % start on an odd page, unlike chapters.  Thus, we maintain
+    % \contentsalignmacro in parallel with \pagealignmacro.
+    % From: Torbjorn Granlund <tege@matematik.su.se>
+    \contentsalignmacro
+    \immediate\closeout\tocfile
+    %
+    % Don't need to put `Contents' or `Short Contents' in the headline.
+    % It is abundantly clear what they are.
+    \unnumbchapmacro{#1}\def\thischapter{}%
+    \savepageno = \pageno
+    \begingroup                  % Set up to handle contents files properly.
+       \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
+       % We can't do this, because then an actual ^ in a section
+       % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97.
+       %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+       \raggedbottom             % Worry more about breakpoints than the bottom.
+       \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+       %
+       % Roman numerals for page numbers.
+       \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
+ }
+ 
+ 
+ % Normal (long) toc.
+ \def\contents{%
+    \startcontents{\putwordTOC}%
+      \openin 1 \jobname.toc
+      \ifeof 1 \else
+        \closein 1
+        \input \jobname.toc
+      \fi
+      \vfill \eject
+      \contentsalignmacro % in case @setchapternewpage odd is in effect
+      \pdfmakeoutlines
+    \endgroup
+    \lastnegativepageno = \pageno
+    \pageno = \savepageno
+ }
+ 
+ % And just the chapters.
+ \def\summarycontents{%
+    \startcontents{\putwordShortTOC}%
+       %
+       \let\chapentry = \shortchapentry
+       \let\appendixentry = \shortappendixentry
+       \let\unnumbchapentry = \shortunnumberedentry
+       % We want a true roman here for the page numbers.
+       \secfonts
+       \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
+       \rm
+       \hyphenpenalty = 10000
+       \advance\baselineskip by 1pt % Open it up a little.
+       \def\secentry ##1##2##3##4{}
+       \def\unnumbsecentry ##1##2##3{}
+       \def\subsecentry ##1##2##3##4##5{}
+       \def\unnumbsubsecentry ##1##2##3##4{}
+       \def\subsubsecentry ##1##2##3##4##5##6{}
+       \def\unnumbsubsubsecentry ##1##2##3##4##5{}
+       \openin 1 \jobname.toc
+       \ifeof 1 \else
+         \closein 1
+         \input \jobname.toc
+       \fi
+      \vfill \eject
+      \contentsalignmacro % in case @setchapternewpage odd is in effect
+    \endgroup
+    \lastnegativepageno = \pageno
+    \pageno = \savepageno
+ }
+ \let\shortcontents = \summarycontents
+ 
+ \ifpdf
+   \pdfcatalog{/PageMode /UseOutlines}%
+ \fi
+ 
+ % These macros generate individual entries in the table of contents.
+ % The first argument is the chapter or section name.
+ % The last argument is the page number.
+ % The arguments in between are the chapter number, section number, ...
+ 
+ % Chapters, in the main contents.
+ \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
+ %
+ % Chapters, in the short toc.
+ % See comments in \dochapentry re vbox and related settings.
+ \def\shortchapentry#1#2#3{%
+   \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
+ }
+ 
+ % Appendices, in the main contents.
+ \def\appendixentry#1#2#3{\dochapentry{\putwordAppendix{} #2\labelspace#1}{#3}}
+ %
+ % Appendices, in the short toc.
+ \let\shortappendixentry = \shortchapentry
+ 
+ % Typeset the label for a chapter or appendix for the short contents.
+ % The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter.
+ % We could simplify the code here by writing out an \appendixentry
+ % command in the toc file for appendices, instead of using \chapentry
+ % for both, but it doesn't seem worth it.
+ %
+ \newdimen\shortappendixwidth
+ %
+ \def\shortchaplabel#1{%
+   % This space should be enough, since a single number is .5em, and the
+   % widest letter (M) is 1em, at least in the Computer Modern fonts.
+   % But use \hss just in case.
+   % (This space doesn't include the extra space that gets added after
+   % the label; that gets put in by \shortchapentry above.)
+   \dimen0 = 1em
+   \hbox to \dimen0{#1\hss}%
+ }
+ 
+ % Unnumbered chapters.
+ \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
+ \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
+ 
+ % Sections.
+ \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
+ \def\unnumbsecentry#1#2#3{\dosecentry{#1}{#3}}
+ 
+ % Subsections.
+ \def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
+ \def\unnumbsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+ 
+ % And subsubsections.
+ \def\subsubsecentry#1#2#3#4#5#6{%
+   \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
+ \def\unnumbsubsubsecentry#1#2#3#4#5{\dosubsubsecentry{#1}{#5}}
+ 
+ % This parameter controls the indentation of the various levels.
+ \newdimen\tocindent \tocindent = 3pc
+ 
+ % Now for the actual typesetting. In all these, #1 is the text and #2 is the
+ % page number.
+ %
+ % If the toc has to be broken over pages, we want it to be at chapters
+ % if at all possible; hence the \penalty.
+ \def\dochapentry#1#2{%
+    \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+    \begingroup
+      \chapentryfonts
+      \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+    \endgroup
+    \nobreak\vskip .25\baselineskip plus.1\baselineskip
+ }
+ 
+ \def\dosecentry#1#2{\begingroup
+   \secentryfonts \leftskip=\tocindent
+   \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup}
+ 
+ \def\dosubsecentry#1#2{\begingroup
+   \subsecentryfonts \leftskip=2\tocindent
+   \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup}
+ 
+ \def\dosubsubsecentry#1#2{\begingroup
+   \subsubsecentryfonts \leftskip=3\tocindent
+   \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup}
+ 
+ % Final typesetting of a toc entry; we use the same \entry macro as for
+ % the index entries, but we want to suppress hyphenation here.  (We
+ % can't do that in the \entry macro, since index entries might consist
+ % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
+ \def\tocentry#1#2{\begingroup
+   \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
+   % Do not use \turnoffactive in these arguments.  Since the toc is
+   % typeset in cmr, characters such as _ would come out wrong; we
+   % have to do the usual translation tricks.
+   \entry{#1}{#2}%
+ \endgroup}
+ 
+ % Space between chapter (or whatever) number and the title.
+ \def\labelspace{\hskip1em \relax}
+ 
+ \def\dopageno#1{{\rm #1}}
+ \def\doshortpageno#1{{\rm #1}}
+ 
+ \def\chapentryfonts{\secfonts \rm}
+ \def\secentryfonts{\textfonts}
+ \let\subsecentryfonts = \textfonts
+ \let\subsubsecentryfonts = \textfonts
+ 
+ 
+ \message{environments,}
+ % @foo ... @end foo.
+ 
+ % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+ % 
+ % Since these characters are used in examples, it should be an even number of
+ % \tt widths. Each \tt character is 1en, so two makes it 1em.
+ %
+ \def\point{$\star$}
+ \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+ \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+ \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+ \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+ 
+ % The @error{} command.
+ % Adapted from the TeXbook's \boxit.
+ % 
+ \newbox\errorbox
+ %
+ {\tentt \global\dimen0 = 3em}% Width of the box.
+ \dimen2 = .55pt % Thickness of rules
+ % The text. (`r' is open on the right, `e' somewhat less so on the left.)
+ \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
+ %
+ \global\setbox\errorbox=\hbox to \dimen0{\hfil
+    \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+    \advance\hsize by -2\dimen2 % Rules.
+    \vbox{
+       \hrule height\dimen2
+       \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
+          \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+          \kern3pt\vrule width\dimen2}% Space to right.
+       \hrule height\dimen2}
+     \hfil}
+ %
+ \def\error{\leavevmode\lower.7ex\copy\errorbox}
+ 
+ % @tex ... @end tex    escapes into raw Tex temporarily.
+ % One exception: @ is still an escape character, so that @end tex works.
+ % But \@ or @@ will get a plain tex @ character.
+ 
+ \def\tex{\begingroup
+   \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+   \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+   \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+   \catcode `\%=14
+   \catcode 43=12 % plus
+   \catcode`\"=12
+   \catcode`\==12
+   \catcode`\|=12
+   \catcode`\<=12
+   \catcode`\>=12
+   \escapechar=`\\
+   %
+   \let\b=\ptexb
+   \let\bullet=\ptexbullet
+   \let\c=\ptexc
+   \let\,=\ptexcomma
+   \let\.=\ptexdot
+   \let\dots=\ptexdots
+   \let\equiv=\ptexequiv
+   \let\!=\ptexexclam
+   \let\i=\ptexi
+   \let\{=\ptexlbrace
+   \let\+=\tabalign
+   \let\}=\ptexrbrace
+   \let\*=\ptexstar
+   \let\t=\ptext
+   %
+   \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+   \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+   \def\@{@}%
+ \let\Etex=\endgroup}
+ 
+ % Define @lisp ... @end lisp.
+ % @lisp does a \begingroup so it can rebind things,
+ % including the definition of @end lisp (which normally is erroneous).
+ 
+ % Amount to narrow the margins by for @lisp.
+ \newskip\lispnarrowing \lispnarrowing=0.4in
+ 
+ % This is the definition that ^^M gets inside @lisp, @example, and other
+ % such environments.  \null is better than a space, since it doesn't
+ % have any width.
+ \def\lisppar{\null\endgraf}
+ 
+ % Make each space character in the input produce a normal interword
+ % space in the output.  Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ {\obeyspaces %
+ \gdef\sepspaces{\obeyspaces\let =\tie}}
+ 
+ % Define \obeyedspace to be our active space, whatever it is.  This is
+ % for use in \parsearg.
+ {\sepspaces%
+ \global\let\obeyedspace= }
+ 
+ % This space is always present above and below environments.
+ \newskip\envskipamount \envskipamount = 0pt
+ 
+ % Make spacing and below environment symmetrical.  We use \parskip here
+ % to help in doing that, since in @example-like environments \parskip
+ % is reset to zero; thus the \afterenvbreak inserts no space -- but the
+ % start of the next paragraph will insert \parskip
+ %
+ \def\aboveenvbreak{{%
+   \ifnum\lastpenalty < 10000
+     \advance\envskipamount by \parskip
+     \endgraf
+     \ifdim\lastskip<\envskipamount
+       \removelastskip
+       \penalty-50
+       \vskip\envskipamount
+     \fi
+   \fi
+ }}
+ 
+ \let\afterenvbreak = \aboveenvbreak
+ 
+ % \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
+ \let\nonarrowing=\relax
+ 
+ % @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+ % environment contents.
+ \font\circle=lcircle10
+ \newdimen\circthick
+ \newdimen\cartouter\newdimen\cartinner
+ \newskip\normbskip\newskip\normpskip\newskip\normlskip
+ \circthick=\fontdimen8\circle
+ %
+ \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+ \def\ctr{{\hskip 6pt\circle\char'010}}
+ \def\cbl{{\circle\char'012\hskip -6pt}}
+ \def\cbr{{\hskip 6pt\circle\char'011}}
+ \def\carttop{\hbox to \cartouter{\hskip\lskip
+         \ctl\leaders\hrule height\circthick\hfil\ctr
+         \hskip\rskip}}
+ \def\cartbot{\hbox to \cartouter{\hskip\lskip
+         \cbl\leaders\hrule height\circthick\hfil\cbr
+         \hskip\rskip}}
+ %
+ \newskip\lskip\newskip\rskip
+ 
+ \long\def\cartouche{%
+ \begingroup
+         \lskip=\leftskip \rskip=\rightskip
+         \leftskip=0pt\rightskip=0pt %we want these *outside*.
+         \cartinner=\hsize \advance\cartinner by-\lskip
+                           \advance\cartinner by-\rskip
+         \cartouter=\hsize
+         \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+ %                                    side, and for 6pt waste from
+ %                                    each corner char, and rule thickness
+         \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+         % Flag to tell @lisp, etc., not to narrow margin.
+         \let\nonarrowing=\comment
+         \vbox\bgroup
+                 \baselineskip=0pt\parskip=0pt\lineskip=0pt
+                 \carttop
+                 \hbox\bgroup
+                         \hskip\lskip
+                         \vrule\kern3pt
+                         \vbox\bgroup
+                                 \hsize=\cartinner
+                                 \kern3pt
+                                 \begingroup
+                                         \baselineskip=\normbskip
+                                         \lineskip=\normlskip
+                                         \parskip=\normpskip
+                                         \vskip -\parskip
+ \def\Ecartouche{%
+                                 \endgroup
+                                 \kern3pt
+                         \egroup
+                         \kern3pt\vrule
+                         \hskip\rskip
+                 \egroup
+                 \cartbot
+         \egroup
+ \endgroup
+ }}
+ 
+ 
+ % This macro is called at the beginning of all the @example variants,
+ % inside a group.
+ \def\nonfillstart{%
+   \aboveenvbreak
+   \inENV % This group ends at the end of the body
+   \hfuzz = 12pt % Don't be fussy
+   \sepspaces % Make spaces be word-separators rather than space tokens.
+   \singlespace
+   \let\par = \lisppar % don't ignore blank lines
+   \obeylines % each line of input is a line of output
+   \parskip = 0pt
+   \parindent = 0pt
+   \emergencystretch = 0pt % don't try to avoid overfull boxes
+   % @cartouche defines \nonarrowing to inhibit narrowing
+   % at next level down.
+   \ifx\nonarrowing\relax
+     \advance \leftskip by \lispnarrowing
+     \exdentamount=\lispnarrowing
+     \let\exdent=\nofillexdent
+     \let\nonarrowing=\relax
+   \fi
+ }
+ 
+ % Define the \E... control sequence only if we are inside the particular
+ % environment, so the error checking in \end will work.
+ %
+ % To end an @example-like environment, we first end the paragraph (via
+ % \afterenvbreak's vertical glue), and then the group.  That way we keep
+ % the zero \parskip that the environments set -- \parskip glue will be
+ % inserted at the beginning of the next paragraph in the document, after
+ % the environment.
+ %
+ \def\nonfillfinish{\afterenvbreak\endgroup}
+ 
+ % @lisp: indented, narrowed, typewriter font.
+ \def\lisp{\begingroup
+   \nonfillstart
+   \let\Elisp = \nonfillfinish
+   \tt
+   \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+   \gobble       % eat return
+ }
+ 
+ % @example: Same as @lisp.
+ \def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
+ 
+ % @small... is usually equivalent to the non-small (@smallbook
+ % redefines).  We must call \example (or whatever) last in the
+ % definition, since it reads the return following the @example (or
+ % whatever) command.
+ %
+ % This actually allows (for example) @end display inside an
+ % @smalldisplay.  Too bad, but makeinfo will catch the error anyway.
+ %
+ \def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
+ \def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
+ \def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
+ \def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
+ 
+ % Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
+ % Originally contributed by Pavel@xerox.
+ \def\smalllispx{\begingroup
+   \def\Esmalllisp{\nonfillfinish\endgroup}%
+   \def\Esmallexample{\nonfillfinish\endgroup}%
+   \smallexamplefonts
+   \lisp
+ }
+ 
+ % @display: same as @lisp except keep current font.
+ %
+ \def\display{\begingroup
+   \nonfillstart
+   \let\Edisplay = \nonfillfinish
+   \gobble
+ }
+ %
+ % @smalldisplay (when @smallbook): @display plus smaller fonts.
+ %
+ \def\smalldisplayx{\begingroup
+   \def\Esmalldisplay{\nonfillfinish\endgroup}%
+   \smallexamplefonts \rm
+   \display
+ }
+ 
+ % @format: same as @display except don't narrow margins.
+ %
+ \def\format{\begingroup
+   \let\nonarrowing = t
+   \nonfillstart
+   \let\Eformat = \nonfillfinish
+   \gobble
+ }
+ %
+ % @smallformat (when @smallbook): @format plus smaller fonts.
+ %
+ \def\smallformatx{\begingroup
+   \def\Esmallformat{\nonfillfinish\endgroup}%
+   \smallexamplefonts \rm
+   \format
+ }
+ 
+ % @flushleft (same as @format).
+ %
+ \def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
+ 
+ % @flushright.
+ %
+ \def\flushright{\begingroup
+   \let\nonarrowing = t
+   \nonfillstart
+   \let\Eflushright = \nonfillfinish
+   \advance\leftskip by 0pt plus 1fill
+   \gobble
+ }
+ 
+ 
+ % @quotation does normal linebreaking (hence we can't use \nonfillstart)
+ % and narrows the margins.
+ %
+ \def\quotation{%
+   \begingroup\inENV %This group ends at the end of the @quotation body
+   {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+   \singlespace
+   \parindent=0pt
+   % We have retained a nonzero parskip for the environment, since we're
+   % doing normal filling. So to avoid extra space below the environment...
+   \def\Equotation{\parskip = 0pt \nonfillfinish}%
+   %
+   % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+   \ifx\nonarrowing\relax
+     \advance\leftskip by \lispnarrowing
+     \advance\rightskip by \lispnarrowing
+     \exdentamount = \lispnarrowing
+     \let\nonarrowing = \relax
+   \fi
+ }
+ 
+ 
+ % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+ % If we want to allow any <char> as delimiter, 
+ % we need the curly braces so that makeinfo sees the @verb command, eg:
+ % `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
+ %
+ % [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
+ %
+ % [Knuth] p. 344; only we need to do '@' too
+ \def\dospecials{%
+   \do\ \do\\\do\@\do\{\do\}\do\$\do\&%
+   \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+ %
+ % [Knuth] p. 380
+ \def\uncatcodespecials{%
+   \def\do##1{\catcode`##1=12}\dospecials}
+ %
+ % [Knuth] pp. 380,381,391
+ % Disable Spanish ligatures ?` and !` of \tt font
+ \begingroup
+   \catcode`\`=\active\gdef`{\relax\lq}
+ \endgroup
+ %
+ % Setup for the @verb command.
+ %
+ % Eight spaces for a tab
+ \begingroup
+   \catcode`\^^I=\active
+   \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+ \endgroup
+ %
+ \def\setupverb{%
+   \tt  % easiest (and conventionally used) font for verbatim
+   \def\par{\leavevmode\endgraf}%
+   \catcode`\`=\active
+   \tabeightspaces
+   % Respect line breaks,
+   % print special symbols as themselves, and
+   % make each space count
+   % must do in this order:
+   \obeylines \uncatcodespecials \sepspaces
+ }
+ 
+ % Setup for the @verbatim environment
+ %
+ % Real tab expansion
+ \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+ %
+ \def\starttabbox{\setbox0=\hbox\bgroup}
+ \begingroup
+   \catcode`\^^I=\active
+   \gdef\tabexpand{%
+     \catcode`\^^I=\active
+     \def^^I{\leavevmode\egroup
+       \dimen0=\wd0 % the width so far, or since the previous tab
+       \divide\dimen0 by\tabw
+       \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+       \advance\dimen0 by\tabw  % advance to next multiple of \tabw
+       \wd0=\dimen0 \box0 \starttabbox
+     }%
+   }
+ \endgroup
+ \def\setupverbatim{%
+   % Easiest (and conventionally used) font for verbatim
+   \tt
+   \def\par{\leavevmode\egroup\box0\endgraf}%
+   \catcode`\`=\active
+   \tabexpand
+   % Respect line breaks,
+   % print special symbols as themselves, and
+   % make each space count
+   % must do in this order:
+   \obeylines \uncatcodespecials \sepspaces
+   \everypar{\starttabbox}%
+ }
+ 
+ % Do the @verb magic: verbatim text is quoted by unique 
+ % delimiter characters.  Before first delimiter expect a 
+ % right brace, after last delimiter expect closing brace:
+ %
+ %    \def\doverb'{'<char>#1<char>'}'{#1}
+ %
+ % [Knuth] p. 382; only eat outer {}
+ \begingroup
+   \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12
+   \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+ \endgroup
+ %
+ \def\verb{\begingroup\setupverb\doverb}
+ %
+ %
+ % Do the @verbatim magic: define the macro \doverbatim so that
+ % the (first) argument ends when '@end verbatim' is reached, ie:
+ %
+ %     \def\doverbatim#1@end verbatim{#1}
+ %
+ % For Texinfo it's a lot easier than for LaTeX, 
+ % because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+ % we need not redefine '\', '{' and '}'
+ %
+ % Inspired by LaTeX's verbatim command set [latex.ltx]
+ %% Include LaTeX hack for completeness -- never know
+ %% \begingroup
+ %% \catcode`|=0 \catcode`[=1
+ %% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active
+ %% \catcode`\\=12|gdef|doverbatim#1@end verbatim[
+ %% #1|endgroup|def|Everbatim[]|end[verbatim]]
+ %% |endgroup
+ \begingroup
+   \catcode`\ =\active
+   \gdef\doverbatim#1@end verbatim{#1\end{verbatim}}
+ \endgroup
+ %
+ \def\verbatim{%
+   \def\Everbatim{\nonfillfinish\endgroup}%
+   \begingroup
+     \nonfillstart
+     \advance\leftskip by -\defbodyindent
+     \begingroup\setupverbatim\doverbatim
+ }
+ 
+ % @verbatiminclude FILE - insert text of file in verbatim environment.
+ %
+ % Allow normal characters that we make active in the argument (a file name).
+ \def\verbatiminclude{%
+   \begingroup
+     \catcode`\\=12
+     \catcode`~=12
+     \catcode`^=12
+     \catcode`_=12
+     \catcode`|=12
+     \catcode`<=12
+     \catcode`>=12
+     \catcode`+=12
+     \parsearg\doverbatiminclude
+ }
+ \def\setupverbatiminclude{%
+   \begingroup
+     \nonfillstart
+     \advance\leftskip by -\defbodyindent
+     \begingroup\setupverbatim
+ }
+ %
+ \def\doverbatiminclude#1{%
+      % Restore active chars for included file.
+   \endgroup
+   \begingroup
+   \def\thisfile{#1}%
+   \expandafter\expandafter\setupverbatiminclude\input\thisfile
+   \endgroup\nonfillfinish\endgroup
+ }
+ 
+ % @copying ... @end copying.
+ % Save the text away for @insertcopying later.
+ % 
+ \newbox\copyingbox
+ %
+ \def\copying{\begingroup
+   \parindent = 0pt  % looks wrong on title page
+   \def\Ecopying{\egroup\endgroup}%
+   \global\setbox\copyingbox = \vbox\bgroup
+ }
+ 
+ % @insertcopying.
+ % 
+ \def\insertcopying{\unvcopy\copyingbox}
+ 
+ 
+ \message{defuns,}
+ % @defun etc.
+ 
+ % Allow user to change definition object font (\df) internally
+ \def\setdeffont #1 {\csname DEF#1\endcsname}
+ 
+ \newskip\defbodyindent \defbodyindent=.4in
+ \newskip\defargsindent \defargsindent=50pt
+ \newskip\deftypemargin \deftypemargin=12pt
+ \newskip\deflastargmargin \deflastargmargin=18pt
+ 
+ \newcount\parencount
+ % define \functionparens, which makes ( and ) and & do special things.
+ % \functionparens affects the group it is contained in.
+ \def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
+ \catcode`\[=\active \catcode`\]=\active}
+ 
+ % Make control sequences which act like normal parenthesis chars.
+ \let\lparen = ( \let\rparen = )
+ 
+ {\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
+ 
+ % Be sure that we always have a definition for `(', etc.  For example,
+ % if the fn name has parens in it, \boldbrax will not be in effect yet,
+ % so TeX would otherwise complain about undefined control sequence.
+ \global\let(=\lparen \global\let)=\rparen
+ \global\let[=\lbrack \global\let]=\rbrack
+ 
+ \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ % This is used to turn on special parens
+ % but make & act ordinary (given that it's active).
+ \gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
+ 
+ % Definitions of (, ) and & used in args for functions.
+ % This is the definition of ( outside of all parentheses.
+ \gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
+   \global\advance\parencount by 1
+ }
+ %
+ % This is the definition of ( when already inside a level of parens.
+ \gdef\opnested{\char`\(\global\advance\parencount by 1 }
+ %
+ \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+   % also in that case restore the outer-level definition of (.
+   \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+   \global\advance \parencount by -1 }
+ % If we encounter &foo, then turn on ()-hacking afterwards
+ \gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
+ %
+ \gdef\normalparens{\boldbrax\let&=\ampnr}
+ } % End of definition inside \activeparens
+ %% These parens (in \boldbrax) actually are a little bolder than the
+ %% contained text.  This is especially needed for [ and ]
+ \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
+ \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
+ \let\ampnr = \&
+ \def\lbrb{{\bf\char`\[}}
+ \def\rbrb{{\bf\char`\]}}
+ 
+ % Active &'s sneak into the index arguments, so make sure it's defined.
+ {
+   \catcode`& = 13
+   \global\let& = \ampnr
+ }
+ 
+ % First, defname, which formats the header line itself.
+ % #1 should be the function name.
+ % #2 should be the type of definition, such as "Function".
+ 
+ \def\defname #1#2{%
+ % Get the values of \leftskip and \rightskip as they were
+ % outside the @def...
+ \dimen2=\leftskip
+ \advance\dimen2 by -\defbodyindent
+ \noindent
+ \setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
+ \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
+ \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
+ \parshape 2 0in \dimen0 \defargsindent \dimen1
+ % Now output arg 2 ("Function" or some such)
+ % ending at \deftypemargin from the right margin,
+ % but stuck inside a box of width 0 so it does not interfere with linebreaking
+ {% Adjust \hsize to exclude the ambient margins,
+ % so that \rightline will obey them.
+ \advance \hsize by -\dimen2
+ \rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
+ % Make all lines underfull and no complaints:
+ \tolerance=10000 \hbadness=10000
+ \advance\leftskip by -\defbodyindent
+ \exdentamount=\defbodyindent
+ {\df #1}\enskip        % Generate function name
+ }
+ 
+ % Common pieces to start any @def...
+ % #1 is the \E... control sequence to end the definition (which we define).
+ % #2 is the \...x control sequence (which our caller defines).
+ % #3 is the control sequence to process the header, such as \defunheader.
+ % 
+ \def\parsebodycommon#1#2#3{%
+   \begingroup\inENV
+   % If there are two @def commands in a row, we'll have a \nobreak,
+   % which is there to keep the function description together with its
+   % header.  But if there's nothing but headers, we want to allow a
+   % break after all.
+   \ifnum\lastpenalty = 10000 \penalty0 \fi
+   \medbreak
+   %
+   % Define the \E... end token that this defining construct specifies
+   % so that it will exit this group.
+   \def#1{\endgraf\endgroup\medbreak}%
+   %
+   \parindent=0in
+   \advance\leftskip by \defbodyindent
+   \exdentamount=\defbodyindent
+ }
+ 
+ % Process body of @defun, @deffn, @defmac, etc.
+ %
+ \def\defparsebody#1#2#3{%
+   \parsebodycommon{#1}{#2}{#3}%
+   \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
+   \catcode61=\active % 61 is `='
+   \begingroup\obeylines\activeparens
+   \spacesplit#3%
+ }
+ 
+ % #1, #2, #3 are the common arguments (see \defparsebody).
+ % #4, delimited by the space, is the class name.
+ %
+ \def\defmethparsebody#1#2#3#4 {%
+   \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
+   \begingroup\obeylines\activeparens
+   \spacesplit{#3{#4}}%
+ }
+ 
+ % Used for @deftypemethod and @deftypeivar.
+ % #1, #2, #3 are the common arguments (see \defparsebody).
+ % #4, delimited by a space, is the class name.
+ % #5 is the method's return type.
+ %
+ \def\deftypemethparsebody#1#2#3#4 #5 {%
+   \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
+   \begingroup\obeylines\activeparens
+   \spacesplit{#3{#4}{#5}}%
+ }
+ 
+ % Used for @deftypeop.  The change from \deftypemethparsebody is an
+ % extra argument at the beginning which is the `category', instead of it
+ % being the hardwired string `Method' or `Instance Variable'.  We have
+ % to account for this both in the \...x definition and in parsing the
+ % input at hand.  Thus also need a control sequence (passed as #5) for
+ % the \E... definition to assign the category name to.
+ % 
+ \def\deftypeopparsebody#1#2#3#4#5 #6 {%
+   \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 ##2 ##3 {%
+     \def#4{##1}%
+     \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
+   \begingroup\obeylines\activeparens
+   \spacesplit{#3{#5}{#6}}%
+ }
+ 
+ % For @defop.
+ \def\defopparsebody #1#2#3#4#5 {%
+   \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 ##2 {\def#4{##1}%
+     \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
+   \begingroup\obeylines\activeparens
+   \spacesplit{#3{#5}}%
+ }
+ 
+ % These parsing functions are similar to the preceding ones
+ % except that they do not make parens into active characters.
+ % These are used for "variables" since they have no arguments.
+ %
+ \def\defvarparsebody #1#2#3{%
+   \parsebodycommon{#1}{#2}{#3}%
+   \def#2{\begingroup\obeylines\spacesplit#3}%
+   \catcode61=\active %
+   \begingroup\obeylines
+   \spacesplit#3%
+ }
+ 
+ % @defopvar.
+ \def\defopvarparsebody #1#2#3#4#5 {%
+   \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 ##2 {\def#4{##1}%
+     \begingroup\obeylines\spacesplit{#3{##2}}}%
+   \begingroup\obeylines
+   \spacesplit{#3{#5}}%
+ }
+ 
+ \def\defvrparsebody#1#2#3#4 {%
+   \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
+   \begingroup\obeylines
+   \spacesplit{#3{#4}}%
+ }
+ 
+ % This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
+ % type is just `struct', because we lose the braces in `{struct
+ % termios}' when \spacesplit reads its undelimited argument.  Sigh.
+ % \let\deftpparsebody=\defvrparsebody
+ %
+ % So, to get around this, we put \empty in with the type name.  That
+ % way, TeX won't find exactly `{...}' as an undelimited argument, and
+ % won't strip off the braces.
+ %
+ \def\deftpparsebody #1#2#3#4 {%
+   \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
+   \begingroup\obeylines
+   \spacesplit{\parsetpheaderline{#3{#4}}}\empty
+ }
+ 
+ % Fine, but then we have to eventually remove the \empty *and* the
+ % braces (if any).  That's what this does.
+ %
+ \def\removeemptybraces\empty#1\relax{#1}
+ 
+ % After \spacesplit has done its work, this is called -- #1 is the final
+ % thing to call, #2 the type name (which starts with \empty), and #3
+ % (which might be empty) the arguments.
+ %
+ \def\parsetpheaderline#1#2#3{%
+   #1{\removeemptybraces#2\relax}{#3}%
+ }%
+ 
+ % Split up #2 at the first space token.
+ % call #1 with two arguments:
+ %  the first is all of #2 before the space token,
+ %  the second is all of #2 after that space token.
+ % If #2 contains no space token, all of it is passed as the first arg
+ % and the second is passed as empty.
+ %
+ {\obeylines
+ \gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
+ \long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
+ \ifx\relax #3%
+ #1{#2}{}\else #1{#2}{#3#4}\fi}}
+ 
+ % Define @defun.
+ 
+ % First, define the processing that is wanted for arguments of \defun
+ % Use this to expand the args and terminate the paragraph they make up
+ 
+ \def\defunargs#1{\functionparens \sl
+ % Expand, preventing hyphenation at `-' chars.
+ % Note that groups don't affect changes in \hyphenchar.
+ % Set the font temporarily and use \font in case \setfont made \tensl a macro.
+ {\tensl\hyphenchar\font=0}%
+ #1%
+ {\tensl\hyphenchar\font=45}%
+ \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
+ \interlinepenalty=10000
+ \advance\rightskip by 0pt plus 1fil
+ \endgraf\nobreak\vskip -\parskip\nobreak
+ }
+ 
+ \def\deftypefunargs #1{%
+ % Expand, preventing hyphenation at `-' chars.
+ % Note that groups don't affect changes in \hyphenchar.
+ % Use \boldbraxnoamp, not \functionparens, so that & is not special.
+ \boldbraxnoamp
+ \tclose{#1}% avoid \code because of side effects on active chars
+ \interlinepenalty=10000
+ \advance\rightskip by 0pt plus 1fil
+ \endgraf\nobreak\vskip -\parskip\nobreak
+ }
+ 
+ % Do complete processing of one @defun or @defunx line already parsed.
+ 
+ % @deffn Command forward-char nchars
+ 
+ \def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
+ 
+ \def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
+ \begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+ 
+ % @defun == @deffn Function
+ 
+ \def\defun{\defparsebody\Edefun\defunx\defunheader}
+ 
+ \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+ \begingroup\defname {#1}{\putwordDeffunc}%
+ \defunargs {#2}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+ 
+ % @deftypefun int foobar (int @var{foo}, float @var{bar})
+ 
+ \def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
+ 
+ % #1 is the data type.  #2 is the name and args.
+ \def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
+ % #1 is the data type, #2 the name, #3 the args.
+ \def\deftypefunheaderx #1#2 #3\relax{%
+ \doind {fn}{\code{#2}}% Make entry in function index
+ \begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}%
+ \deftypefunargs {#3}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+ 
+ % @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
+ 
+ \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+ 
+ % \defheaderxcond#1\relax$.$
+ % puts #1 in @code, followed by a space, but does nothing if #1 is null.
+ \def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi}
+ 
+ % #1 is the classification.  #2 is the data type.  #3 is the name and args.
+ \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
+ % #1 is the classification, #2 the data type, #3 the name, #4 the args.
+ \def\deftypefnheaderx #1#2#3 #4\relax{%
+ \doind {fn}{\code{#3}}% Make entry in function index
+ \begingroup
+ \normalparens % notably, turn off `&' magic, which prevents
+ %               at least some C++ text from working
+ \defname {\defheaderxcond#2\relax$.$#3}{#1}%
+ \deftypefunargs {#4}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+ 
+ % @defmac == @deffn Macro
+ 
+ \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
+ 
+ \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+ \begingroup\defname {#1}{\putwordDefmac}%
+ \defunargs {#2}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+ 
+ % @defspec == @deffn Special Form
+ 
+ \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
+ 
+ \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+ \begingroup\defname {#1}{\putwordDefspec}%
+ \defunargs {#2}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+ 
+ % @defop CATEGORY CLASS OPERATION ARG...
+ %
+ \def\defop #1 {\def\defoptype{#1}%
+ \defopparsebody\Edefop\defopx\defopheader\defoptype}
+ %
+ \def\defopheader#1#2#3{%
+ \dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
+ \begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
+ \defunargs {#3}\endgroup %
+ }
+ 
+ % @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
+ %
+ \def\deftypeop #1 {\def\deftypeopcategory{#1}%
+   \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
+                        \deftypeopcategory}
+ %
+ % #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
+ \def\deftypeopheader#1#2#3#4{%
+   \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+   \begingroup
+     \defname{\defheaderxcond#2\relax$.$#3}
+             {\deftypeopcategory\ \putwordon\ \code{#1}}%
+     \deftypefunargs{#4}%
+   \endgroup
+ }
+ 
+ % @deftypemethod CLASS TYPE METHOD ARG...
+ %
+ \def\deftypemethod{%
+   \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
+ %
+ % #1 is the class name, #2 the data type, #3 the method name, #4 the args.
+ \def\deftypemethodheader#1#2#3#4{%
+   \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+   \begingroup
+     \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}%
+     \deftypefunargs{#4}%
+   \endgroup
+ }
+ 
+ % @deftypeivar CLASS TYPE VARNAME
+ %
+ \def\deftypeivar{%
+   \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
+ %
+ % #1 is the class name, #2 the data type, #3 the variable name.
+ \def\deftypeivarheader#1#2#3{%
+   \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
+   \begingroup
+     \defname{\defheaderxcond#2\relax$.$#3}
+             {\putwordInstanceVariableof\ \code{#1}}%
+     \defvarargs{#3}%
+   \endgroup
+ }
+ 
+ % @defmethod == @defop Method
+ %
+ \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+ %
+ % #1 is the class name, #2 the method name, #3 the args.
+ \def\defmethodheader#1#2#3{%
+   \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
+   \begingroup
+     \defname{#2}{\putwordMethodon\ \code{#1}}%
+     \defunargs{#3}%
+   \endgroup
+ }
+ 
+ % @defcv {Class Option} foo-class foo-flag
+ 
+ \def\defcv #1 {\def\defcvtype{#1}%
+ \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
+ 
+ \def\defcvarheader #1#2#3{%
+ \dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
+ \begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
+ \defvarargs {#3}\endgroup %
+ }
+ 
+ % @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
+ %
+ \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
+ %
+ \def\defivarheader#1#2#3{%
+   \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
+   \begingroup
+     \defname{#2}{\putwordInstanceVariableof\ #1}%
+     \defvarargs{#3}%
+   \endgroup
+ }
+ 
+ % @defvar
+ % First, define the processing that is wanted for arguments of @defvar.
+ % This is actually simple: just print them in roman.
+ % This must expand the args and terminate the paragraph they make up
+ \def\defvarargs #1{\normalparens #1%
+ \interlinepenalty=10000
+ \endgraf\nobreak\vskip -\parskip\nobreak}
+ 
+ % @defvr Counter foo-count
+ 
+ \def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
+ 
+ \def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
+ \begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
+ 
+ % @defvar == @defvr Variable
+ 
+ \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
+ 
+ \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+ \begingroup\defname {#1}{\putwordDefvar}%
+ \defvarargs {#2}\endgroup %
+ }
+ 
+ % @defopt == @defvr {User Option}
+ 
+ \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
+ 
+ \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+ \begingroup\defname {#1}{\putwordDefopt}%
+ \defvarargs {#2}\endgroup %
+ }
+ 
+ % @deftypevar int foobar
+ 
+ \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
+ 
+ % #1 is the data type.  #2 is the name, perhaps followed by text that
+ % is actually part of the data type, which should not be put into the index.
+ \def\deftypevarheader #1#2{%
+ \dovarind#2 \relax% Make entry in variables index
+ \begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}%
+ \interlinepenalty=10000
+ \endgraf\nobreak\vskip -\parskip\nobreak
+ \endgroup}
+ \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
+ 
+ % @deftypevr {Global Flag} int enable
+ 
+ \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+ 
+ \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
+ \begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1}
+ \interlinepenalty=10000
+ \endgraf\nobreak\vskip -\parskip\nobreak
+ \endgroup}
+ 
+ % Now define @deftp
+ % Args are printed in bold, a slight difference from @defvar.
+ 
+ \def\deftpargs #1{\bf \defvarargs{#1}}
+ 
+ % @deftp Class window height width ...
+ 
+ \def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
+ 
+ \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
+ \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
+ 
+ % These definitions are used if you use @defunx (etc.)
+ % anywhere other than immediately after a @defun or @defunx.
+ % 
+ \def\defcvx#1 {\errmessage{@defcvx in invalid context}}
+ \def\deffnx#1 {\errmessage{@deffnx in invalid context}}
+ \def\defivarx#1 {\errmessage{@defivarx in invalid context}}
+ \def\defmacx#1 {\errmessage{@defmacx in invalid context}}
+ \def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
+ \def\defoptx #1 {\errmessage{@defoptx in invalid context}}
+ \def\defopx#1 {\errmessage{@defopx in invalid context}}
+ \def\defspecx#1 {\errmessage{@defspecx in invalid context}}
+ \def\deftpx#1 {\errmessage{@deftpx in invalid context}}
+ \def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
+ \def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
+ \def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
+ \def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
+ \def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
+ \def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
+ \def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
+ \def\defunx#1 {\errmessage{@defunx in invalid context}}
+ \def\defvarx#1 {\errmessage{@defvarx in invalid context}}
+ \def\defvrx#1 {\errmessage{@defvrx in invalid context}}
+ 
+ 
+ \message{macros,}
+ % @macro.
+ 
+ % To do this right we need a feature of e-TeX, \scantokens,
+ % which we arrange to emulate with a temporary file in ordinary TeX.
+ \ifx\eTeXversion\undefined
+  \newwrite\macscribble
+  \def\scanmacro#1{%
+    \begingroup \newlinechar`\^^M
+    % Undo catcode changes of \startcontents and \doprintindex
+    \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
+    % Append \endinput to make sure that TeX does not see the ending newline.
+    \toks0={#1\endinput}%
+    \immediate\openout\macscribble=\jobname.tmp
+    \immediate\write\macscribble{\the\toks0}%
+    \immediate\closeout\macscribble
+    \let\xeatspaces\eatspaces
+    \input \jobname.tmp
+    \endgroup
+ }
+ \else
+ \def\scanmacro#1{%
+ \begingroup \newlinechar`\^^M
+ % Undo catcode changes of \startcontents and \doprintindex
+ \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
+ \let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
+ \fi
+ 
+ \newcount\paramno   % Count of parameters
+ \newtoks\macname    % Macro name
+ \newif\ifrecursive  % Is it recursive?
+ \def\macrolist{}    % List of all defined macros in the form
+                     % \do\macro1\do\macro2...
+ 
+ % Utility routines.
+ % Thisdoes \let #1 = #2, except with \csnames.
+ \def\cslet#1#2{%
+ \expandafter\expandafter
+ \expandafter\let
+ \expandafter\expandafter
+ \csname#1\endcsname
+ \csname#2\endcsname}
+ 
+ % Trim leading and trailing spaces off a string.
+ % Concepts from aro-bend problem 15 (see CTAN).
+ {\catcode`\@=11
+ \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+ \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+ \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+ \def\unbrace#1{#1}
+ \unbrace{\gdef\trim@@@ #1 } #2@{#1}
+ }
+ 
+ % Trim a single trailing ^^M off a string.
+ {\catcode`\^^M=12\catcode`\Q=3%
+ \gdef\eatcr #1{\eatcra #1Q^^MQ}%
+ \gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+ \gdef\eatcrb#1Q#2Q{#1}%
+ }
+ 
+ % Macro bodies are absorbed as an argument in a context where
+ % all characters are catcode 10, 11 or 12, except \ which is active
+ % (as in normal texinfo). It is necessary to change the definition of \.
+ 
+ % It's necessary to have hard CRs when the macro is executed. This is
+ % done by  making ^^M (\endlinechar) catcode 12 when reading the macro
+ % body, and then making it the \newlinechar in \scanmacro.
+ 
+ \def\macrobodyctxt{%
+   \catcode`\~=12
+   \catcode`\^=12
+   \catcode`\_=12
+   \catcode`\|=12
+   \catcode`\<=12
+   \catcode`\>=12
+   \catcode`\+=12
+   \catcode`\{=12
+   \catcode`\}=12
+   \catcode`\@=12
+   \catcode`\^^M=12
+   \usembodybackslash}
+ 
+ \def\macroargctxt{%
+   \catcode`\~=12
+   \catcode`\^=12
+   \catcode`\_=12
+   \catcode`\|=12
+   \catcode`\<=12
+   \catcode`\>=12
+   \catcode`\+=12
+   \catcode`\@=12
+   \catcode`\\=12}
+ 
+ % \mbodybackslash is the definition of \ in @macro bodies.
+ % It maps \foo\ => \csname macarg.foo\endcsname => #N
+ % where N is the macro parameter number.
+ % We define \csname macarg.\endcsname to be \realbackslash, so
+ % \\ in macro replacement text gets you a backslash.
+ 
+ {\catcode`@=0 @catcode`@\=@active
+  @gdef@usembodybackslash{@let\=@mbodybackslash}
+  @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+ }
+ \expandafter\def\csname macarg.\endcsname{\realbackslash}
+ 
+ \def\macro{\recursivefalse\parsearg\macroxxx}
+ \def\rmacro{\recursivetrue\parsearg\macroxxx}
+ 
+ \def\macroxxx#1{%
+   \getargs{#1}%           now \macname is the macname and \argl the arglist
+   \ifx\argl\empty       % no arguments
+      \paramno=0%
+   \else
+      \expandafter\parsemargdef \argl;%
+   \fi
+   \if1\csname ismacro.\the\macname\endcsname
+      \message{Warning: redefining \the\macname}%
+   \else
+      \expandafter\ifx\csname \the\macname\endcsname \relax
+      \else \errmessage{Macro name \the\macname\space already defined}\fi
+      \global\cslet{macsave.\the\macname}{\the\macname}%
+      \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+      % Add the macroname to \macrolist
+      \toks0 = \expandafter{\macrolist\do}%
+      \xdef\macrolist{\the\toks0
+        \expandafter\noexpand\csname\the\macname\endcsname}%
+   \fi
+   \begingroup \macrobodyctxt
+   \ifrecursive \expandafter\parsermacbody
+   \else \expandafter\parsemacbody
+   \fi}
+ 
+ \def\unmacro{\parsearg\unmacroxxx}
+ \def\unmacroxxx#1{%
+   \if1\csname ismacro.#1\endcsname
+     \global\cslet{#1}{macsave.#1}%
+     \global\expandafter\let \csname ismacro.#1\endcsname=0%
+     % Remove the macro name from \macrolist
+     \begingroup
+       \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
+       \def\do##1{%
+         \def\tempb{##1}%
+         \ifx\tempa\tempb
+           % remove this
+         \else
+           \toks0 = \expandafter{\newmacrolist\do}%
+           \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
+         \fi}%
+       \def\newmacrolist{}%
+       % Execute macro list to define \newmacrolist
+       \macrolist
+       \global\let\macrolist\newmacrolist
+     \endgroup
+   \else
+     \errmessage{Macro #1 not defined}%
+   \fi
+ }
+ 
+ % This makes use of the obscure feature that if the last token of a
+ % <parameter list> is #, then the preceding argument is delimited by
+ % an opening brace, and that opening brace is not consumed.
+ \def\getargs#1{\getargsxxx#1{}}
+ \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+ \def\getmacname #1 #2\relax{\macname={#1}}
+ \def\getmacargs#1{\def\argl{#1}}
+ 
+ % Parse the optional {params} list.  Set up \paramno and \paramlist
+ % so \defmacro knows what to do.  Define \macarg.blah for each blah
+ % in the params list, to be ##N where N is the position in that list.
+ % That gets used by \mbodybackslash (above).
+ 
+ % We need to get `macro parameter char #' into several definitions.
+ % The technique used is stolen from LaTeX:  let \hash be something
+ % unexpandable, insert that wherever you need a #, and then redefine
+ % it to # just before using the token list produced.
+ %
+ % The same technique is used to protect \eatspaces till just before
+ % the macro is used.
+ 
+ \def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+         \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+ \def\parsemargdefxxx#1,{%
+   \if#1;\let\next=\relax
+   \else \let\next=\parsemargdefxxx
+     \advance\paramno by 1%
+     \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+         {\xeatspaces{\hash\the\paramno}}%
+     \edef\paramlist{\paramlist\hash\the\paramno,}%
+   \fi\next}
+ 
+ % These two commands read recursive and nonrecursive macro bodies.
+ % (They're different since rec and nonrec macros end differently.)
+ 
+ \long\def\parsemacbody#1@end macro%
+ {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+ \long\def\parsermacbody#1@end rmacro%
+ {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+ 
+ % This defines the macro itself. There are six cases: recursive and
+ % nonrecursive macros of zero, one, and many arguments.
+ % Much magic with \expandafter here.
+ % \xdef is used so that macro definitions will survive the file
+ % they're defined in; @include reads the file inside a group.
+ \def\defmacro{%
+   \let\hash=##% convert placeholders to macro parameter chars
+   \ifrecursive
+     \ifcase\paramno
+     % 0
+       \expandafter\xdef\csname\the\macname\endcsname{%
+         \noexpand\scanmacro{\temp}}%
+     \or % 1
+       \expandafter\xdef\csname\the\macname\endcsname{%
+          \bgroup\noexpand\macroargctxt
+          \noexpand\braceorline
+          \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+       \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+          \egroup\noexpand\scanmacro{\temp}}%
+     \else % many
+       \expandafter\xdef\csname\the\macname\endcsname{%
+          \bgroup\noexpand\macroargctxt
+          \noexpand\csname\the\macname xx\endcsname}%
+       \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+           \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+       \expandafter\expandafter
+       \expandafter\xdef
+       \expandafter\expandafter
+         \csname\the\macname xxx\endcsname
+           \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+     \fi
+   \else
+     \ifcase\paramno
+     % 0
+       \expandafter\xdef\csname\the\macname\endcsname{%
+         \noexpand\norecurse{\the\macname}%
+         \noexpand\scanmacro{\temp}\egroup}%
+     \or % 1
+       \expandafter\xdef\csname\the\macname\endcsname{%
+          \bgroup\noexpand\macroargctxt
+          \noexpand\braceorline
+          \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+       \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+         \egroup
+         \noexpand\norecurse{\the\macname}%
+         \noexpand\scanmacro{\temp}\egroup}%
+     \else % many
+       \expandafter\xdef\csname\the\macname\endcsname{%
+          \bgroup\noexpand\macroargctxt
+          \expandafter\noexpand\csname\the\macname xx\endcsname}%
+       \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+           \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+       \expandafter\expandafter
+       \expandafter\xdef
+       \expandafter\expandafter
+       \csname\the\macname xxx\endcsname
+       \paramlist{%
+           \egroup
+           \noexpand\norecurse{\the\macname}%
+           \noexpand\scanmacro{\temp}\egroup}%
+     \fi
+   \fi}
+ 
+ \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+ 
+ % \braceorline decides whether the next nonwhitespace character is a
+ % {.  If so it reads up to the closing }, if not, it reads the whole
+ % line.  Whatever was read is then fed to the next control sequence
+ % as an argument (by \parsebrace or \parsearg)
+ \def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+ \def\braceorlinexxx{%
+   \ifx\nchar\bgroup\else
+     \expandafter\parsearg
+   \fi \next}
+ 
+ % We mant to disable all macros during \shipout so that they are not
+ % expanded by \write.
+ \def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
+   \edef\next{\macrolist}\expandafter\endgroup\next}
+ 
+ 
+ % @alias.
+ % We need some trickery to remove the optional spaces around the equal
+ % sign.  Just make them active and then expand them all to nothing.
+ \def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
+ \def\aliasxxx #1{\aliasyyy#1\relax}
+ \def\aliasyyy #1=#2\relax{\ignoreactivespaces
+ \edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
+            \expandafter\noexpand\csname#2\endcsname}%
+ \expandafter\endgroup\next}
+ 
+ 
+ \message{cross references,}
+ % @xref etc.
+ 
+ \newwrite\auxfile
+ 
+ \newif\ifhavexrefs    % True if xref values are known.
+ \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
+ 
+ % @inforef is relatively simple.
+ \def\inforef #1{\inforefzzz #1,,,,**}
+ \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+   node \samp{\ignorespaces#1{}}}
+ 
+ % @node's job is to define \lastnode.
+ \def\node{\ENVcheck\parsearg\nodezzz}
+ \def\nodezzz#1{\nodexxx [#1,]}
+ \def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+ \let\nwnode=\node
+ \let\lastnode=\relax
+ 
+ % The sectioning commands (@chapter, etc.) call these.
+ \def\donoderef{%
+   \ifx\lastnode\relax\else
+     \expandafter\expandafter\expandafter\setref{\lastnode}%
+       {Ysectionnumberandtype}%
+     \global\let\lastnode=\relax
+   \fi
+ }
+ \def\unnumbnoderef{%
+   \ifx\lastnode\relax\else
+     \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
+     \global\let\lastnode=\relax
+   \fi
+ }
+ \def\appendixnoderef{%
+   \ifx\lastnode\relax\else
+     \expandafter\expandafter\expandafter\setref{\lastnode}%
+       {Yappendixletterandtype}%
+     \global\let\lastnode=\relax
+   \fi
+ }
+ 
+ 
+ % @anchor{NAME} -- define xref target at arbitrary point.
+ %
+ \newcount\savesfregister
+ \gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+ \gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+ \gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+ 
+ % \setref{NAME}{SNT} defines a cross-reference point NAME, namely
+ % NAME-title, NAME-pg, and NAME-SNT.  Called from \foonoderef.  We have
+ % to set \indexdummies so commands such as @code in a section title
+ % aren't expanded.  It would be nicer not to expand the titles in the
+ % first place, but there's so many layers that that is hard to do.
+ %
+ \def\setref#1#2{{%
+   \indexdummies
+   \pdfmkdest{#1}%
+   \dosetq{#1-title}{Ytitle}%
+   \dosetq{#1-pg}{Ypagenumber}%
+   \dosetq{#1-snt}{#2}%
+ }}
+ 
+ % @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
+ % the node name, #2 the name of the Info cross-reference, #3 the printed
+ % node name, #4 the name of the Info file, #5 the name of the printed
+ % manual.  All but the node name can be omitted.
+ %
+ \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+ \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+ \def\ref#1{\xrefX[#1,,,,,,,]}
+ \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+   \unsepspaces
+   \def\printedmanual{\ignorespaces #5}%
+   \def\printednodename{\ignorespaces #3}%
+   \setbox1=\hbox{\printedmanual}%
+   \setbox0=\hbox{\printednodename}%
+   \ifdim \wd0 = 0pt
+     % No printed node name was explicitly given.
+     \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+       % Use the node name inside the square brackets.
+       \def\printednodename{\ignorespaces #1}%
+     \else
+       % Use the actual chapter/section title appear inside
+       % the square brackets.  Use the real section title if we have it.
+       \ifdim \wd1 > 0pt
+         % It is in another manual, so we don't have it.
+         \def\printednodename{\ignorespaces #1}%
+       \else
+         \ifhavexrefs
+           % We know the real title if we have the xref values.
+           \def\printednodename{\refx{#1-title}{}}%
+         \else
+           % Otherwise just copy the Info node name.
+           \def\printednodename{\ignorespaces #1}%
+         \fi%
+       \fi
+     \fi
+   \fi
+   %
+   % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+   % insert empty discretionaries after hyphens, which means that it will
+   % not find a line break at a hyphen in a node names.  Since some manuals
+   % are best written with fairly long node names, containing hyphens, this
+   % is a loss.  Therefore, we give the text of the node name again, so it
+   % is as if TeX is seeing it for the first time.
+   \ifpdf
+     \leavevmode
+     \getfilename{#4}%
+     {\normalturnoffactive
+      \ifnum\filenamelength>0
+        \startlink attr{/Border [0 0 0]}%
+          goto file{\the\filename.pdf} name{#1}%
+      \else
+        \startlink attr{/Border [0 0 0]}%
+          goto name{#1}%
+      \fi
+     }%
+     \linkcolor
+   \fi
+   %
+   \ifdim \wd1 > 0pt
+     \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
+   \else
+     % _ (for example) has to be the character _ for the purposes of the
+     % control sequence corresponding to the node, but it has to expand
+     % into the usual \leavevmode...\vrule stuff for purposes of
+     % printing. So we \turnoffactive for the \refx-snt, back on for the
+     % printing, back off for the \refx-pg.
+     {\normalturnoffactive
+      % Only output a following space if the -snt ref is nonempty; for
+      % @unnumbered and @anchor, it won't be.
+      \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+      \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+     }%
+     % [mynode],
+     [\printednodename],\space
+     % page 3
+     \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+   \fi
+   \endlink
+ \endgroup}
+ 
+ % \dosetq is the interface for calls from other macros
+ 
+ % Use \normalturnoffactive so that punctuation chars such as underscore
+ % and backslash work in node names.  (\turnoffactive doesn't do \.)
+ \def\dosetq#1#2{%
+   {\let\folio=0%
+    \normalturnoffactive
+    \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
+    \iflinks
+      \next
+    \fi
+   }%
+ }
+ 
+ % \internalsetq {foo}{page} expands into
+ % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
+ % When the aux file is read, ' is the escape character
+ 
+ \def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
+ 
+ % Things to be expanded by \internalsetq
+ 
+ \def\Ypagenumber{\folio}
+ 
+ \def\Ytitle{\thissection}
+ 
+ \def\Ynothing{}
+ 
+ \def\Ysectionnumberandtype{%
+ \ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
+ \else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
+ \else \ifnum \subsubsecno=0 %
+ \putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
+ \else %
+ \putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
+ \fi \fi \fi }
+ 
+ \def\Yappendixletterandtype{%
+ \ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
+ \else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
+ \else \ifnum \subsubsecno=0 %
+ \putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
+ \else %
+ \putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
+ \fi \fi \fi }
+ 
+ \gdef\xreftie{'tie}
+ 
+ % Use TeX 3.0's \inputlineno to get the line number, for better error
+ % messages, but if we're using an old version of TeX, don't do anything.
+ %
+ \ifx\inputlineno\thisisundefined
+   \let\linenumber = \empty % Non-3.0.
+ \else
+   \def\linenumber{\the\inputlineno:\space}
+ \fi
+ 
+ % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+ % If its value is nonempty, SUFFIX is output afterward.
+ 
+ \def\refx#1#2{%
+   \expandafter\ifx\csname X#1\endcsname\relax
+     % If not defined, say something at least.
+     \angleleft un\-de\-fined\angleright
+     \iflinks
+       \ifhavexrefs
+         \message{\linenumber Undefined cross reference `#1'.}%
+       \else
+         \ifwarnedxrefs\else
+           \global\warnedxrefstrue
+           \message{Cross reference values unknown; you must run TeX again.}%
+         \fi
+       \fi
+     \fi
+   \else
+     % It's defined, so just use it.
+     \csname X#1\endcsname
+   \fi
+   #2% Output the suffix in any case.
+ }
+ 
+ % This is the macro invoked by entries in the aux file.
+ %
+ \def\xrdef#1{\begingroup
+   % Reenable \ as an escape while reading the second argument.
+   \catcode`\\ = 0
+   \afterassignment\endgroup
+   \expandafter\gdef\csname X#1\endcsname
+ }
+ 
+ % Read the last existing aux file, if any.  No error if none exists.
+ \def\readauxfile{\begingroup
+   \catcode`\^^@=\other
+   \catcode`\^^A=\other
+   \catcode`\^^B=\other
+   \catcode`\^^C=\other
+   \catcode`\^^D=\other
+   \catcode`\^^E=\other
+   \catcode`\^^F=\other
+   \catcode`\^^G=\other
+   \catcode`\^^H=\other
+   \catcode`\^^K=\other
+   \catcode`\^^L=\other
+   \catcode`\^^N=\other
+   \catcode`\^^P=\other
+   \catcode`\^^Q=\other
+   \catcode`\^^R=\other
+   \catcode`\^^S=\other
+   \catcode`\^^T=\other
+   \catcode`\^^U=\other
+   \catcode`\^^V=\other
+   \catcode`\^^W=\other
+   \catcode`\^^X=\other
+   \catcode`\^^Z=\other
+   \catcode`\^^[=\other
+   \catcode`\^^\=\other
+   \catcode`\^^]=\other
+   \catcode`\^^^=\other
+   \catcode`\^^_=\other
+   \catcode`\@=\other
+   \catcode`\^=\other
+   % It was suggested to define this as 7, which would allow ^^e4 etc.
+   % in xref tags, i.e., node names.  But since ^^e4 notation isn't
+   % supported in the main text, it doesn't seem desirable.  Furthermore,
+   % that is not enough: for node names that actually contain a ^
+   % character, we would end up writing a line like this: 'xrdef {'hat
+   % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+   % argument, and \hat is not an expandable control sequence.  It could
+   % all be worked out, but why?  Either we support ^^ or we don't.
+   %
+   % The other change necessary for this was to define \auxhat:
+   % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+   % and then to call \auxhat in \setq.
+   %
+   \catcode`\~=\other
+   \catcode`\[=\other
+   \catcode`\]=\other
+   \catcode`\"=\other
+   \catcode`\_=\other
+   \catcode`\|=\other
+   \catcode`\<=\other
+   \catcode`\>=\other
+   \catcode`\$=\other
+   \catcode`\#=\other
+   \catcode`\&=\other
+   \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+   % Make the characters 128-255 be printing characters
+   {%
+     \count 1=128
+     \def\loop{%
+       \catcode\count 1=\other
+       \advance\count 1 by 1
+       \ifnum \count 1<256 \loop \fi
+     }%
+   }%
+   % The aux file uses ' as the escape (for now).
+   % Turn off \ as an escape so we do not lose on
+   % entries which were dumped with control sequences in their names.
+   % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
+   % Reference to such entries still does not work the way one would wish,
+   % but at least they do not bomb out when the aux file is read in.
+   \catcode`\{=1
+   \catcode`\}=2
+   \catcode`\%=\other
+   \catcode`\'=0
+   \catcode`\\=\other
+   %
+   \openin 1 \jobname.aux
+   \ifeof 1 \else
+     \closein 1
+     \input \jobname.aux
+     \global\havexrefstrue
+     \global\warnedobstrue
+   \fi
+   % Open the new aux file.  TeX will close it automatically at exit.
+   \openout\auxfile=\jobname.aux
+ \endgroup}
+ 
+ 
+ % Footnotes.
+ 
+ \newcount \footnoteno
+ 
+ % The trailing space in the following definition for supereject is
+ % vital for proper filling; pages come out unaligned when you do a
+ % pagealignmacro call if that space before the closing brace is
+ % removed. (Generally, numeric constants should always be followed by a
+ % space to prevent strange expansion errors.)
+ \def\supereject{\par\penalty -20000\footnoteno =0 }
+ 
+ % @footnotestyle is meaningful for info output only.
+ \let\footnotestyle=\comment
+ 
+ \let\ptexfootnote=\footnote
+ 
+ {\catcode `\@=11
+ %
+ % Auto-number footnotes.  Otherwise like plain.
+ \gdef\footnote{%
+   \global\advance\footnoteno by \@ne
+   \edef\thisfootno{$^{\the\footnoteno}$}%
+   %
+   % In case the footnote comes at the end of a sentence, preserve the
+   % extra spacing after we do the footnote number.
+   \let\@sf\empty
+   \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+   %
+   % Remove inadvertent blank space before typesetting the footnote number.
+   \unskip
+   \thisfootno\@sf
+   \footnotezzz
+ }%
+ 
+ % Don't bother with the trickery in plain.tex to not require the
+ % footnote text as a parameter.  Our footnotes don't need to be so general.
+ %
+ % Oh yes, they do; otherwise, @ifset and anything else that uses
+ % \parseargline fail inside footnotes because the tokens are fixed when
+ % the footnote is read.  --karl, 16nov96.
+ %
+ \long\gdef\footnotezzz{\insert\footins\bgroup
+   % We want to typeset this text as a normal paragraph, even if the
+   % footnote reference occurs in (for example) a display environment.
+   % So reset some parameters.
+   \interlinepenalty\interfootnotelinepenalty
+   \splittopskip\ht\strutbox % top baseline for broken footnotes
+   \splitmaxdepth\dp\strutbox
+   \floatingpenalty\@MM
+   \leftskip\z@skip
+   \rightskip\z@skip
+   \spaceskip\z@skip
+   \xspaceskip\z@skip
+   \parindent\defaultparindent
+   %
+   \smallfonts \rm
+   %
+   % Because we use hanging indentation in footnotes, a @noindent appears
+   % to exdent this text, so make it be a no-op.  makeinfo does not use
+   % hanging indentation so @noindent can still be needed within footnote
+   % text after an @example or the like (not that this is good style).
+   \let\noindent = \relax
+   %
+   % Hang the footnote text off the number.  Use \everypar in case the
+   % footnote extends for more than one paragraph.
+   \everypar = {\hang}%
+   \textindent{\thisfootno}%
+   %
+   % Don't crash into the line above the footnote text.  Since this
+   % expands into a box, it must come within the paragraph, lest it
+   % provide a place where TeX can split the footnote.
+   \footstrut
+   \futurelet\next\fo@t
+ }
+ \def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
+   \else\let\next\f@t\fi \next}
+ \def\f@@t{\bgroup\aftergroup\@foot\let\next}
+ \def\f@t#1{#1\@foot}
+ \def\@foot{\strut\par\egroup}
+ 
+ }%end \catcode `\@=11
+ 
+ % @| inserts a changebar to the left of the current line.  It should
+ % surround any changed text.  This approach does *not* work if the
+ % change spans more than two lines of output.  To handle that, we would
+ % have adopt a much more difficult approach (putting marks into the main
+ % vertical list for the beginning and end of each change).
+ %
+ \def\|{%
+   % \vadjust can only be used in horizontal mode.
+   \leavevmode
+   %
+   % Append this vertical mode material after the current line in the output.
+   \vadjust{%
+     % We want to insert a rule with the height and depth of the current
+     % leading; that is exactly what \strutbox is supposed to record.
+     \vskip-\baselineskip
+     %
+     % \vadjust-items are inserted at the left edge of the type.  So
+     % the \llap here moves out into the left-hand margin.
+     \llap{%
+       %
+       % For a thicker or thinner bar, change the `1pt'.
+       \vrule height\baselineskip width1pt
+       %
+       % This is the space between the bar and the text.
+       \hskip 12pt
+     }%
+   }%
+ }
+ 
+ % For a final copy, take out the rectangles
+ % that mark overfull boxes (in case you have decided
+ % that the text looks ok even though it passes the margin).
+ %
+ \def\finalout{\overfullrule=0pt}
+ 
+ % @image.  We use the macros from epsf.tex to support this.
+ % If epsf.tex is not installed and @image is used, we complain.
+ %
+ % Check for and read epsf.tex up front.  If we read it only at @image
+ % time, we might be inside a group, and then its definitions would get
+ % undone and the next image would fail.
+ \openin 1 = epsf.tex
+ \ifeof 1 \else
+   \closein 1
+   % Do not bother showing banner with post-v2.7 epsf.tex (available in
+   % doc/epsf.tex until it shows up on ctan).
+   \def\epsfannounce{\toks0 = }%
+   \input epsf.tex
+ \fi
+ %
+ % We will only complain once about lack of epsf.tex.
+ \newif\ifwarnednoepsf
+ \newhelp\noepsfhelp{epsf.tex must be installed for images to
+   work.  It is also included in the Texinfo distribution, or you can get
+   it from ftp://tug.org/tex/epsf.tex.}
+ %
+ \def\image#1{%
+   \ifx\epsfbox\undefined
+     \ifwarnednoepsf \else
+       \errhelp = \noepsfhelp
+       \errmessage{epsf.tex not found, images will be ignored}%
+       \global\warnednoepsftrue
+     \fi
+   \else
+     \imagexxx #1,,,,,\finish
+   \fi
+ }
+ %
+ % Arguments to @image:
+ % #1 is (mandatory) image filename; we tack on .eps extension.
+ % #2 is (optional) width, #3 is (optional) height.
+ % #4 is (ignored optional) html alt text.
+ % #5 is (ignored optional) extension.
+ % #6 is just the usual extra ignored arg for parsing this stuff.
+ \newif\ifimagevmode
+ \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+   \catcode`\^^M = 5     % in case we're inside an example
+   \normalturnoffactive  % allow _ et al. in names
+   % If the image is by itself, center it.
+   \ifvmode
+     \imagevmodetrue
+     \nobreak\bigskip
+     % Usually we'll have text after the image which will insert
+     % \parskip glue, so insert it here too to equalize the space
+     % above and below. 
+     \nobreak\vskip\parskip
+     \nobreak
+     \line\bgroup\hss
+   \fi
+   %
+   % Output the image.
+   \ifpdf
+     \dopdfimage{#1}{#2}{#3}%
+   \else
+     % \epsfbox itself resets \epsf?size at each figure.
+     \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+     \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+     \epsfbox{#1.eps}%
+   \fi
+   %
+   \ifimagevmode \hss \egroup \bigbreak \fi  % space after the image
+ \endgroup}
+ 
+ 
+ \message{localization,}
+ % and i18n.
+ 
+ % @documentlanguage is usually given very early, just after
+ % @setfilename.  If done too late, it may not override everything
+ % properly.  Single argument is the language abbreviation.
+ % It would be nice if we could set up a hyphenation file here.
+ %
+ \def\documentlanguage{\parsearg\dodocumentlanguage}
+ \def\dodocumentlanguage#1{%
+   \tex % read txi-??.tex file in plain TeX.
+   % Read the file if it exists.
+   \openin 1 txi-#1.tex
+   \ifeof1
+     \errhelp = \nolanghelp
+     \errmessage{Cannot read language file txi-#1.tex}%
+     \let\temp = \relax
+   \else
+     \def\temp{\input txi-#1.tex }%
+   \fi
+   \temp
+   \endgroup
+ }
+ \newhelp\nolanghelp{The given language definition file cannot be found or
+ is empty.  Maybe you need to install it?  In the current directory
+ should work if nowhere else does.}
+ 
+ 
+ % @documentencoding should change something in TeX eventually, most
+ % likely, but for now just recognize it.
+ \let\documentencoding = \comment
+ 
+ 
+ % Page size parameters.
+ %
+ \newdimen\defaultparindent \defaultparindent = 15pt
+ 
+ \chapheadingskip = 15pt plus 4pt minus 2pt
+ \secheadingskip = 12pt plus 3pt minus 2pt
+ \subsecheadingskip = 9pt plus 2pt minus 2pt
+ 
+ % Prevent underfull vbox error messages.
+ \vbadness = 10000
+ 
+ % Don't be so finicky about underfull hboxes, either.
+ \hbadness = 2000
+ 
+ % Following George Bush, just get rid of widows and orphans.
+ \widowpenalty=10000
+ \clubpenalty=10000
+ 
+ % Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+ % using an old version of TeX, don't do anything.  We want the amount of
+ % stretch added to depend on the line length, hence the dependence on
+ % \hsize.  We call this whenever the paper size is set.
+ %
+ \def\setemergencystretch{%
+   \ifx\emergencystretch\thisisundefined
+     % Allow us to assign to \emergencystretch anyway.
+     \def\emergencystretch{\dimen0}%
+   \else
+     \emergencystretch = .15\hsize
+   \fi
+ }
+ 
+ % Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
+ % 4) hoffset; 5) binding offset; 6) topskip.  We also call
+ % \setleading{\textleading}, so the caller should define \textleading.
+ % The caller should also set \parskip.
+ %
+ \def\internalpagesizes#1#2#3#4#5#6{%
+   \voffset = #3\relax
+   \topskip = #6\relax
+   \splittopskip = \topskip
+   %
+   \vsize = #1\relax
+   \advance\vsize by \topskip
+   \outervsize = \vsize
+   \advance\outervsize by 2\topandbottommargin
+   \pageheight = \vsize
+   %
+   \hsize = #2\relax
+   \outerhsize = \hsize
+   \advance\outerhsize by 0.5in
+   \pagewidth = \hsize
+   %
+   \normaloffset = #4\relax
+   \bindingoffset = #5\relax
+   %
+   \setleading{\textleading}
+   %
+   \parindent = \defaultparindent
+   \setemergencystretch
+ }
+ 
+ % Use `small' versions.
+ % 
+ \def\smallenvironments{%
+   \let\smalldisplay = \smalldisplayx
+   \let\smallexample = \smalllispx
+   \let\smallformat = \smallformatx
+   \let\smalllisp = \smalllispx
+ }
+ 
+ % @letterpaper (the default).
+ \def\letterpaper{{\globaldefs = 1
+   \parskip = 3pt plus 2pt minus 1pt
+   \textleading = 13.2pt
+   %
+   % If page is nothing but text, make it come out even.
+   \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
+ }}
+ 
+ % Use @smallbook to reset parameters for 7x9.5 (or so) format.
+ \def\smallbook{{\globaldefs = 1
+   \parskip = 2pt plus 1pt
+   \textleading = 12pt
+   %
+   \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
+   %
+   \lispnarrowing = 0.3in
+   \tolerance = 700
+   \hfuzz = 1pt
+   \contentsrightmargin = 0pt
+   \deftypemargin = 0pt
+   \defbodyindent = .5cm
+   \smallenvironments
+ }}
+ 
+ % Use @afourpaper to print on European A4 paper.
+ \def\afourpaper{{\globaldefs = 1
+   \parskip = 3pt plus 2pt minus 1pt
+   \textleading = 12pt
+   %
+   \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
+   %
+   \tolerance = 700
+   \hfuzz = 1pt
+ }}
+ 
+ % Use @afivepaper to print on European A5 paper.
+ % From romildo@urano.iceb.ufop.br, 2 July 2000.
+ % He also recommends making @example and @lisp be small.
+ \def\afivepaper{{\globaldefs = 1
+   \parskip = 2pt plus 1pt minus 0.1pt
+   \textleading = 12.5pt
+   %
+   \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}%
+   %
+   \lispnarrowing = 0.2in
+   \tolerance = 800
+   \hfuzz = 1.2pt
+   \contentsrightmargin = 0mm
+   \deftypemargin = 0pt
+   \defbodyindent = 2mm
+   \tableindent = 12mm
+   %
+   \smallenvironments
+ }}
+ 
+ % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
+ % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
+ \def\afourlatex{{\globaldefs = 1
+   \textleading = 13.6pt
+   %
+   \afourpaper
+   \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
+   %
+   % Must explicitly reset to 0 because we call \afourpaper, apparently,
+   % although this does not entirely make sense.
+   \globaldefs = 0
+ }}
+ 
+ % Use @afourwide to print on European A4 paper in wide format.
+ \def\afourwide{%
+   \afourpaper
+   \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
+ }
+ 
+ % @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+ % Perhaps we should allow setting the margins, \topskip, \parskip,
+ % and/or leading, also. Or perhaps we should compute them somehow.
+ %
+ \def\pagesizes{\parsearg\pagesizesxxx}
+ \def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
+ \def\pagesizesyyy#1,#2,#3\finish{{%
+   \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+   \globaldefs = 1
+   %
+   \parskip = 3pt plus 2pt minus 1pt
+   \setleading{\textleading}%
+   %
+   \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
+ }}
+ 
+ % Set default to letter.
+ %
+ \letterpaper
+ 
+ 
+ \message{and turning on texinfo input format.}
+ 
+ % Define macros to output various characters with catcode for normal text.
+ \catcode`\"=\other
+ \catcode`\~=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\+=\other
+ \catcode`\$=\other
+ \def\normaldoublequote{"}
+ \def\normaltilde{~}
+ \def\normalcaret{^}
+ \def\normalunderscore{_}
+ \def\normalverticalbar{|}
+ \def\normalless{<}
+ \def\normalgreater{>}
+ \def\normalplus{+}
+ \def\normaldollar{$}%$ font-lock fix
+ 
+ % This macro is used to make a character print one way in ttfont
+ % where it can probably just be output, and another way in other fonts,
+ % where something hairier probably needs to be done.
+ %
+ % #1 is what to print if we are indeed using \tt; #2 is what to print
+ % otherwise.  Since all the Computer Modern typewriter fonts have zero
+ % interword stretch (and shrink), and it is reasonable to expect all
+ % typewriter fonts to have this, we can check that font parameter.
+ %
+ \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+ 
+ % Same as above, but check for italic font.  Actually this also catches
+ % non-italic slanted fonts since it is impossible to distinguish them from
+ % italic fonts.  But since this is only used by $ and it uses \sl anyway
+ % this is not a problem.
+ \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+ 
+ % Turn off all special characters except @
+ % (and those which the user can use as if they were ordinary).
+ % Most of these we simply print from the \tt font, but for some, we can
+ % use math or other variants that look better in normal text.
+ 
+ \catcode`\"=\active
+ \def\activedoublequote{{\tt\char34}}
+ \let"=\activedoublequote
+ \catcode`\~=\active
+ \def~{{\tt\char126}}
+ \chardef\hat=`\^
+ \catcode`\^=\active
+ \def^{{\tt \hat}}
+ 
+ \catcode`\_=\active
+ \def_{\ifusingtt\normalunderscore\_}
+ % Subroutine for the previous macro.
+ \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
+ 
+ \catcode`\|=\active
+ \def|{{\tt\char124}}
+ \chardef \less=`\<
+ \catcode`\<=\active
+ \def<{{\tt \less}}
+ \chardef \gtr=`\>
+ \catcode`\>=\active
+ \def>{{\tt \gtr}}
+ \catcode`\+=\active
+ \def+{{\tt \char 43}}
+ \catcode`\$=\active
+ \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+ %\catcode 27=\active
+ %\def^^[{$\diamondsuit$}
+ 
+ % Set up an active definition for =, but don't enable it most of the time.
+ {\catcode`\==\active
+ \global\def={{\tt \char 61}}}
+ 
+ \catcode`+=\active
+ \catcode`\_=\active
+ 
+ % If a .fmt file is being used, characters that might appear in a file
+ % name cannot be active until we have parsed the command line.
+ % So turn them off again, and have \everyjob (or @setfilename) turn them on.
+ % \otherifyactive is called near the end of this file.
+ \def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+ 
+ \catcode`\@=0
+ 
+ % \rawbackslashxx output one backslash character in current font
+ \global\chardef\rawbackslashxx=`\\
+ %{\catcode`\\=\other
+ %@gdef@rawbackslashxx{\}}
+ 
+ % \rawbackslash redefines \ as input to do \rawbackslashxx.
+ {\catcode`\\=\active
+ @gdef@rawbackslash{@let\=@rawbackslashxx }}
+ 
+ % \normalbackslash outputs one backslash in fixed width font.
+ \def\normalbackslash{{\tt\rawbackslashxx}}
+ 
+ % \catcode 17=0   % Define control-q
+ \catcode`\\=\active
+ 
+ % Used sometimes to turn off (effectively) the active characters
+ % even after parsing them.
+ @def@turnoffactive{@let"=@normaldoublequote
+ @let\=@realbackslash
+ @let~=@normaltilde
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let<=@normalless
+ @let>=@normalgreater
+ @let+=@normalplus
+ @let$=@normaldollar}%$ font-lock fix
+ 
+ @def@normalturnoffactive{@let"=@normaldoublequote
+ @let\=@normalbackslash
+ @let~=@normaltilde
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let<=@normalless
+ @let>=@normalgreater
+ @let+=@normalplus
+ @let$=@normaldollar}%$ font-lock fix
+ 
+ % Make _ and + \other characters, temporarily.
+ % This is canceled by @fixbackslash.
+ @otherifyactive
+ 
+ % If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+ % That is what \eatinput is for; after that, the `\' should revert to printing
+ % a backslash.
+ %
+ @gdef@eatinput input texinfo{@fixbackslash}
+ @global@let\ = @eatinput
+ 
+ % On the other hand, perhaps the file did not have a `\input texinfo'. Then
+ % the first `\{ in the file would cause an error. This macro tries to fix
+ % that, assuming it is called before the first `\' could plausibly occur.
+ % Also back turn on active characters that might appear in the input
+ % file name, in case not using a pre-dumped format.
+ %
+ @gdef@fixbackslash{%
+   @ifx\@eatinput @let\ = @normalbackslash @fi
+   @catcode`+=@active
+   @catcode`@_=@active
+ }
+ 
+ % Say @foo, not \foo, in error messages.
+ @escapechar = `@@
+ 
+ % These look ok in all fonts, so just make them not special.  
+ @catcode`@& = @other
+ @catcode`@# = @other
+ @catcode`@% = @other
+ 
+ @c Set initial fonts.
+ @textfonts
+ @rm
+ 
+ 
+ @c Local variables:
+ @c eval: (add-hook 'write-file-hooks 'time-stamp)
+ @c page-delimiter: "^\\\\message"
+ @c time-stamp-start: "def\\\\texinfoversion{"
+ @c time-stamp-format: "%:y-%02m-%02d.%02H"
+ @c time-stamp-end: "}"
+ @c End:
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/unicode/BLOCKS.TXT gcc-4.1.0/libjava/classpath/doc/unicode/BLOCKS.TXT
*** gcc-4.0.2/libjava/classpath/doc/unicode/BLOCKS.TXT	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/unicode/BLOCKS.TXT	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ # Start Code; End Code; Block Name
+ 0000; 007F; Basic Latin
+ 0080; 00FF; Latin-1 Supplement
+ 0100; 017F; Latin Extended-A
+ 0180; 024F; Latin Extended-B
+ 0250; 02AF; IPA Extensions
+ 02B0; 02FF; Spacing Modifier Letters
+ 0300; 036F; Combining Diacritical Marks
+ 0370; 03FF; Greek
+ 0400; 04FF; Cyrillic
+ 0530; 058F; Armenian
+ 0590; 05FF; Hebrew
+ 0600; 06FF; Arabic
+ 0700; 074F; Syriac  
+ 0780; 07BF; Thaana
+ 0900; 097F; Devanagari
+ 0980; 09FF; Bengali
+ 0A00; 0A7F; Gurmukhi
+ 0A80; 0AFF; Gujarati
+ 0B00; 0B7F; Oriya
+ 0B80; 0BFF; Tamil
+ 0C00; 0C7F; Telugu
+ 0C80; 0CFF; Kannada
+ 0D00; 0D7F; Malayalam
+ 0D80; 0DFF; Sinhala
+ 0E00; 0E7F; Thai
+ 0E80; 0EFF; Lao
+ 0F00; 0FFF; Tibetan
+ 1000; 109F; Myanmar 
+ 10A0; 10FF; Georgian
+ 1100; 11FF; Hangul Jamo
+ 1200; 137F; Ethiopic
+ 13A0; 13FF; Cherokee
+ 1400; 167F; Unified Canadian Aboriginal Syllabics
+ 1680; 169F; Ogham
+ 16A0; 16FF; Runic
+ 1780; 17FF; Khmer
+ 1800; 18AF; Mongolian
+ 1E00; 1EFF; Latin Extended Additional
+ 1F00; 1FFF; Greek Extended
+ 2000; 206F; General Punctuation
+ 2070; 209F; Superscripts and Subscripts
+ 20A0; 20CF; Currency Symbols
+ 20D0; 20FF; Combining Marks for Symbols
+ 2100; 214F; Letterlike Symbols
+ 2150; 218F; Number Forms
+ 2190; 21FF; Arrows
+ 2200; 22FF; Mathematical Operators
+ 2300; 23FF; Miscellaneous Technical
+ 2400; 243F; Control Pictures
+ 2440; 245F; Optical Character Recognition
+ 2460; 24FF; Enclosed Alphanumerics
+ 2500; 257F; Box Drawing
+ 2580; 259F; Block Elements
+ 25A0; 25FF; Geometric Shapes
+ 2600; 26FF; Miscellaneous Symbols
+ 2700; 27BF; Dingbats
+ 2800; 28FF; Braille Patterns
+ 2E80; 2EFF; CJK Radicals Supplement
+ 2F00; 2FDF; Kangxi Radicals
+ 2FF0; 2FFF; Ideographic Description Characters
+ 3000; 303F; CJK Symbols and Punctuation
+ 3040; 309F; Hiragana
+ 30A0; 30FF; Katakana
+ 3100; 312F; Bopomofo
+ 3130; 318F; Hangul Compatibility Jamo
+ 3190; 319F; Kanbun
+ 31A0; 31BF; Bopomofo Extended
+ 3200; 32FF; Enclosed CJK Letters and Months
+ 3300; 33FF; CJK Compatibility
+ 3400; 4DB5; CJK Unified Ideographs Extension A
+ 4E00; 9FFF; CJK Unified Ideographs
+ A000; A48F; Yi Syllables
+ A490; A4CF; Yi Radicals
+ AC00; D7A3; Hangul Syllables
+ D800; DB7F; High Surrogates
+ DB80; DBFF; High Private Use Surrogates
+ DC00; DFFF; Low Surrogates
+ E000; F8FF; Private Use
+ F900; FAFF; CJK Compatibility Ideographs
+ FB00; FB4F; Alphabetic Presentation Forms
+ FB50; FDFF; Arabic Presentation Forms-A
+ FE20; FE2F; Combining Half Marks
+ FE30; FE4F; CJK Compatibility Forms
+ FE50; FE6F; Small Form Variants
+ FE70; FEFE; Arabic Presentation Forms-B
+ FEFF; FEFF; Specials
+ FF00; FFEF; Halfwidth and Fullwidth Forms
+ FFF0; FFFD; Specials
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/unicode/Blocks-3.txt gcc-4.1.0/libjava/classpath/doc/unicode/Blocks-3.txt
*** gcc-4.0.2/libjava/classpath/doc/unicode/Blocks-3.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/unicode/Blocks-3.txt	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ # Start Code; End Code; Block Name
+ 0000; 007F; Basic Latin
+ 0080; 00FF; Latin-1 Supplement
+ 0100; 017F; Latin Extended-A
+ 0180; 024F; Latin Extended-B
+ 0250; 02AF; IPA Extensions
+ 02B0; 02FF; Spacing Modifier Letters
+ 0300; 036F; Combining Diacritical Marks
+ 0370; 03FF; Greek
+ 0400; 04FF; Cyrillic
+ 0530; 058F; Armenian
+ 0590; 05FF; Hebrew
+ 0600; 06FF; Arabic
+ 0700; 074F; Syriac  
+ 0780; 07BF; Thaana
+ 0900; 097F; Devanagari
+ 0980; 09FF; Bengali
+ 0A00; 0A7F; Gurmukhi
+ 0A80; 0AFF; Gujarati
+ 0B00; 0B7F; Oriya
+ 0B80; 0BFF; Tamil
+ 0C00; 0C7F; Telugu
+ 0C80; 0CFF; Kannada
+ 0D00; 0D7F; Malayalam
+ 0D80; 0DFF; Sinhala
+ 0E00; 0E7F; Thai
+ 0E80; 0EFF; Lao
+ 0F00; 0FFF; Tibetan
+ 1000; 109F; Myanmar 
+ 10A0; 10FF; Georgian
+ 1100; 11FF; Hangul Jamo
+ 1200; 137F; Ethiopic
+ 13A0; 13FF; Cherokee
+ 1400; 167F; Unified Canadian Aboriginal Syllabics
+ 1680; 169F; Ogham
+ 16A0; 16FF; Runic
+ 1780; 17FF; Khmer
+ 1800; 18AF; Mongolian
+ 1E00; 1EFF; Latin Extended Additional
+ 1F00; 1FFF; Greek Extended
+ 2000; 206F; General Punctuation
+ 2070; 209F; Superscripts and Subscripts
+ 20A0; 20CF; Currency Symbols
+ 20D0; 20FF; Combining Marks for Symbols
+ 2100; 214F; Letterlike Symbols
+ 2150; 218F; Number Forms
+ 2190; 21FF; Arrows
+ 2200; 22FF; Mathematical Operators
+ 2300; 23FF; Miscellaneous Technical
+ 2400; 243F; Control Pictures
+ 2440; 245F; Optical Character Recognition
+ 2460; 24FF; Enclosed Alphanumerics
+ 2500; 257F; Box Drawing
+ 2580; 259F; Block Elements
+ 25A0; 25FF; Geometric Shapes
+ 2600; 26FF; Miscellaneous Symbols
+ 2700; 27BF; Dingbats
+ 2800; 28FF; Braille Patterns
+ 2E80; 2EFF; CJK Radicals Supplement
+ 2F00; 2FDF; Kangxi Radicals
+ 2FF0; 2FFF; Ideographic Description Characters
+ 3000; 303F; CJK Symbols and Punctuation
+ 3040; 309F; Hiragana
+ 30A0; 30FF; Katakana
+ 3100; 312F; Bopomofo
+ 3130; 318F; Hangul Compatibility Jamo
+ 3190; 319F; Kanbun
+ 31A0; 31BF; Bopomofo Extended
+ 3200; 32FF; Enclosed CJK Letters and Months
+ 3300; 33FF; CJK Compatibility
+ 3400; 4DB5; CJK Unified Ideographs Extension A
+ 4E00; 9FFF; CJK Unified Ideographs
+ A000; A48F; Yi Syllables
+ A490; A4CF; Yi Radicals
+ AC00; D7A3; Hangul Syllables
+ D800; DB7F; High Surrogates
+ DB80; DBFF; High Private Use Surrogates
+ DC00; DFFF; Low Surrogates
+ E000; F8FF; Private Use
+ F900; FAFF; CJK Compatibility Ideographs
+ FB00; FB4F; Alphabetic Presentation Forms
+ FB50; FDFF; Arabic Presentation Forms-A
+ FE20; FE2F; Combining Half Marks
+ FE30; FE4F; CJK Compatibility Forms
+ FE50; FE6F; Small Form Variants
+ FE70; FEFE; Arabic Presentation Forms-B
+ FEFF; FEFF; Specials
+ FF00; FFEF; Halfwidth and Fullwidth Forms
+ FFF0; FFFD; Specials
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/unicode/ReadMe-2.1.1.txt gcc-4.1.0/libjava/classpath/doc/unicode/ReadMe-2.1.1.txt
*** gcc-4.0.2/libjava/classpath/doc/unicode/ReadMe-2.1.1.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/unicode/ReadMe-2.1.1.txt	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,344 ----
+ 
+ UNICODE 2.1 CHARACTER DATABASE
+ 
+ Copyright (c) 1991-1998 Unicode, Inc.
+ All Rights reserved.
+ 
+ DISCLAIMER
+ 
+ The Unicode Character Database "UNIDAT21.TXT" is provided as-is by
+ Unicode, Inc. (The Unicode Consortium). No claims are made as to fitness for any
+ particular purpose. No warranties of any kind are expressed or implied. The
+ recipient agrees to determine applicability of information provided. If this
+ file has been purchased on magnetic or optical media from Unicode, Inc.,
+ the sole remedy for any claim will be exchange of defective media within
+ 90 days of receipt.
+ 
+ This disclaimer is applicable for all other data files accompanying the
+ Unicode Character Database, some of which have been compiled by the
+ Unicode Consortium, and some of which have been supplied by other vendors.
+ 
+ LIMITATIONS ON RIGHTS TO REDISTRIBUTE THIS DATA
+ 
+ Recipient is granted the right to make copies in any form for internal
+ distribution and to freely use the information supplied in the creation of
+ products supporting the Unicode (TM) Standard. This file can be redistributed
+ to third parties or other organizations (whether for profit or not) as long
+ as this notice and the disclaimer notice are retained.
+ 
+ EXPLANATORY INFORMATION
+ 
+ The Unicode Character Database defines the default Unicode character
+ properties, and internal mappings. Particular implementations may choose to
+ override the properties and mappings that are not normative. If that is done,
+ it is up to the implementer to establish a protocol to convey that
+ information. For more information about character properties and mappings,
+ see "The Unicode Standard, Worldwide Character Encoding, Version 2.0",
+ published by Addison-Wesley. For information about other data files
+ accompanying the Unicode Character Database, see the section of the
+ Unicode Standard they were extracted from, or the explanatory readme
+ files and/or header sections with those files.
+ 
+ The Unicode Character Database has been updated to reflect Version 2.1
+ of the Unicode Standard, with two additional characters added to those
+ published in Version 2.0:
+ 
+    U+20AC EURO SIGN
+    U+FFFC OBJECT REPLACEMENT CHARACTER
+ 
+ A number of corrections have also been made to case mappings or other
+ errors in the database noted since the publication of Version 2.0. And
+ a few normative bidirectional properties have been modified to reflect
+ decisions of the Unicode Technical Committee.
+ 
+ The Unicode Character Database is a plain ASCII text file consisting of lines
+ containing fields terminated by semicolons. Each line represents the data for
+ one encoded character in the Unicode Standard, Version 2.1. Every encoded
+ character has a data entry, with the exception of certain special ranges, as
+ detailed below.
+ 
+ There are five special ranges of characters that are represented only by
+ their start and end characters, since the properties in the file are uniform,
+ except for code values (which are all sequential and assigned). The names of CJK
+ ideograph characters and Hangul syllable characters are algorithmically
+ derivable. (See the Unicode Standard for more information). Surrogate
+ characters and private use characters have no names.
+ 
+ The exact ranges represented by start and end characters are:
+ 
+    The CJK Ideographs Area (U+4E00 - U+9FFF)
+    The Hangul Syllables Area (U+AC00 - U+D7A3)
+    The Surrogates Area (U+D800 - U+DFFF)
+    The Private Use Area (U+E000 - U+F8FF)
+    CJK Compatibility Ideographs (U+F900 - U+FAFF)
+ 
+ The following table describes the format and meaning of each field in a
+ data entry in the Unicode Character Database. Fields which contain
+ normative information are so indicated.
+ 
+ Field	Explanation
+ -----	-----------
+ 
+   0	Code value in 4-digit hexadecimal format.
+   	This field is normative.
+ 
+   1	Unicode 2.1 Character Name. These names match exactly the
+ 	names published in Chapter 7 of the Unicode Standard, Version
+ 	2.0, except for the two additional characters.
+   	This field is normative.
+ 
+   2	General Category. This is a useful breakdown into various "character
+ 	types" which can be used as a default categorization in implementations.
+  	Some of the values are normative, and some are informative.
+  	See below for a brief explanation.
+ 
+   3	Canonical Combining Classes. The classes used for the
+ 	Canonical Ordering Algorithm in the Unicode Standard. These
+ 	classes are also printed in Chapter 4 of the Unicode Standard.
+         This field is normative. See below for a brief explanation.
+ 
+   4	Bidirectional Category. See the list below for an explanation of the
+ 	abbreviations used in this field. These are the categories required
+ 	by the Bidirectional Behavior Algorithm in the Unicode Standard.
+ 	These categories are summarized in Chapter 4 of the Unicode Standard.
+ 	This field is normative.
+ 
+   5	Character Decomposition. In the Unicode Standard, not all of
+ 	the decompositions are full decompositions. Recursive
+ 	application of look-up for decompositions will, in all cases, lead to
+ 	a maximal decomposition. The decompositions match exactly the
+ 	decompositions published with the character names in Chapter 7
+ 	of the Unicode Standard. This field is normative.
+ 
+   6	Decimal digit value. This is a numeric field. If the character
+ 	has the decimal digit property, as specified in Chapter 4 of
+ 	the Unicode Standard, the value of that digit is represented
+ 	with an integer value in this field. This field is normative.
+ 
+   7	Digit value. This is a numeric field. If the character represents a
+ 	digit, not necessarily a decimal digit, the value is here. This
+ 	covers digits which do not form decimal radix forms, such as the
+ 	compatibility superscript digits. This field is informative.
+ 
+   8	Numeric value. This is a numeric field. If the character has the
+ 	numeric property, as specified in Chapter 4 of the Unicode
+ 	Standard, the value of that character is represented with an
+ 	integer or rational number in this field. This includes fractions as,
+ 	e.g., "1/5" for U+2155 VULGAR FRACTION ONE FIFTH.
+ 	Also included are numerical values for compatibility characters
+ 	such as circled numbers. This field is normative.
+ 
+   9	If the characters has been identified as a "mirrored" character in
+         bidirectional text, this field has the value "Y"; otherwise "N".
+ 	The list of mirrored characters is also printed in Chapter 4 of
+ 	the Unicode Standard. This field is normative.
+ 
+  10	Unicode 1.0 Name. This is the old name as published in Unicode 1.0.
+ 	This name is only provided when it is significantly different from
+ 	the Unicode 2.1 name for the character. This field is informative.
+ 
+  11	10646 Comment field. This field is informative.
+ 
+  12	Upper case equivalent mapping. If a character is part of an
+ 	alphabet with case distinctions, and has an upper case equivalent,
+ 	then the upper case equivalent is in this field. See the explanation
+ 	below on case distinctions. These mappings are always one-to-one,
+ 	not one-to-many or many-to-one. This field is informative.
+ 
+  13	Lower case equivalent mapping. Similar to 12. This field is informative.
+ 
+  14	Title case equivalent mapping. Similar to 12. This field is informative.
+ 
+ GENERAL CATEGORY
+ 
+ The values in this field are abbreviations for the following. Some of the
+ values are normative, and some are informative. For more information, see
+ the Unicode Standard. Note: the standard does not assign information to
+ control characters (except for TAB in the Bidirectonal Algorithm).
+ Implementations will generally also assign categories to certain control
+ characters, notably CR and LF, according to platform conventions.
+ 
+ 
+ Normative
+     Mn = Mark, Non-Spacing
+     Mc = Mark, Spacing Combining
+     Me = Mark, Enclosing
+ 
+     Nd = Number, Decimal Digit
+     Nl = Number, Letter
+     No = Number, Other
+ 
+     Zs = Separator, Space
+     Zl = Separator, Line
+     Zp = Separator, Paragraph
+ 
+     Cc = Other, Control
+     Cf = Other, Format
+     Cs = Other, Surrogate
+     Co = Other, Private Use
+     Cn = Other, Not Assigned
+ 
+ Informative
+     Lu = Letter, Uppercase
+     Ll = Letter, Lowercase
+     Lt = Letter, Titlecase
+     Lm = Letter, Modifier
+     Lo = Letter, Other
+ 
+     Pc = Punctuation, Connector
+     Pd = Punctuation, Dash
+     Ps = Punctuation, Open
+     Pe = Punctuation, Close
+     Po = Punctuation, Other
+ 
+     Sm = Symbol, Math
+     Sc = Symbol, Currency
+     Sk = Symbol, Modifier
+     So = Symbol, Other
+ 
+ BIDIRECTIONAL PROPERTIES
+ 
+ Please refer to the Unicode Standard for an explanation of the algorithm for
+ Bidirectional Behavior and an explanation of the sigificance of these categories.
+ These values are normative.
+ 
+ Strong types:
+ 	L	Left-Right; Most alphabetic, syllabic, and logographic
+ 			characters (e.g., CJK ideographs)
+ 	R	Right-Left; Arabic, Hebrew, and
+ 			punctuation specific to those scripts
+ Weak types:
+ 	EN	European Number
+ 	ES	European Number Separator
+ 	ET	European Number Terminator
+ 	AN	Arabic Number
+ 	CS	Common Number Separator
+ 
+ Separators:
+ 	B	Block Separator
+ 	S	Segment Separator
+ 
+ Neutrals:
+ 	WS	Whitespace
+ 	ON	Other Neutrals ; All other characters: punctuation, symbols
+ 
+ CHARACTER DECOMPOSITION TAGS
+ 
+ The decomposition is a normative property of a character. The tags supplied
+ with certain decompositions generally indicate formatting information.
+ Where no such tag is given, the decomposition is designated as canonical.
+ Conversely, the presence of a formatting tag also indicates
+ that the decomposition is a compatibility decomposition and not a canonical
+ decomposition. In the absence of other formatting information in a
+ compatibility decomposition, the tag <compat> is used to distinguish it from
+ canonical decompositions.
+ 
+ In some instances a canonical decomposition or a compatibility decomposition
+ may consist of a single character. For a canonical decomposition, this
+ indicates that the character is a canonical equivalent of another single
+ character. For a compatibility decomposition, this indicates that the
+ character is a compatibility equivalent of another single character.
+ 
+ The compatibility formatting tags used are:
+ 
+ 	<font>		A font variant (e.g. a blackletter form).
+ 	<noBreak>	A no-break version of a space or hyphen.
+ 	<initial>	An initial presentation form (Arabic).
+ 	<medial>	A medial presentation form (Arabic).
+ 	<final>		A final presentation form (Arabic).
+ 	<isolated>	An isolated presentation form (Arabic).
+ 	<circle>	An encircled form.
+ 	<super>		A superscript form.
+ 	<sub>		A subscript form.
+ 	<vertical>	A vertical layout presentation form.
+ 	<wide>		A wide (or zenkaku) compatibility character.
+ 	<narrow>	A narrow (or hankaku) compatibility character.
+ 	<small>		A small variant form (CNS compatibility).
+ 	<square>	A CJK squared font variant.
+ 	<fraction>	A vulgar fraction form.
+ 	<compat>	Otherwise unspecified compatibility character.
+ 
+ CANONICAL COMBINING CLASSES
+ 
+   0: Spacing, enclosing, reordrant, and surrounding
+   1: Overlays and interior
+   6: Tibetan subjoined Letters
+   7: Nuktas
+   8: Hiragana/Katakana voiced marks
+   9: Viramas
+  10: Start of fixed position classes
+ 199: End of fixed position classes
+ 200: Below left attached
+ 202: Below attached
+ 204: Below right attached
+ 208: Left attached (reordrant around single base character)
+ 210: Right attached
+ 212: Above left attached
+ 214: Above attached
+ 216: Above right attached
+ 218: Below left
+ 220: Below
+ 222: Below right
+ 224: Left (reordrant around single base character)
+ 226: Right
+ 228: Above left
+ 230: Above
+ 232: Above right
+ 234: Double above
+ 
+ Note: some of the combining classes in this list do not currently have
+ members but are specified here for completeness.
+ 
+ CASE MAPPINGS
+ 
+ In addition to uppercase and lowercase, because of the inclusion of certain
+ composite characters for compatibility, such as "01F1;LATIN CAPITAL LETTER
+ DZ", there is a third case, called titlecase, which is used where the first
+ character of a word is to be capitalized (e.g. UPPERCASE, Titlecase,
+ lowercase). An example of such a character is "01F2;LATIN CAPITAL LETTER D
+ WITH SMALL LETTER Z".
+ 
+ The uppercase, titlecase and lowercase fields are only included for characters
+ that have a single corresponding character of that type. Composite characters
+ (such as "339D;SQUARE CM") that do not have a single corresponding character
+ of that type can be cased by decomposition.
+ 
+ The case mapping is an informative, default mapping. Certain languages, such
+ as Turkish, German, French, or Greek may have small deviations from the
+ default mappings listed in the Unicode Character Database.
+ 
+ MODIFICATION HISTORY
+ 
+ Modifications made in updating the Unicode Character Database for
+ the Unicode Standard, Version 2.1 (from Version 2.0) are:
+ * Added two characters (U+20AC and U+FFFC).
+ * Amended bidi properties for U+0026, U+002E, U+0040, U+2007.
+ * Corrected case mappings for U+018E, U+019F, U+01DD, U+0258, U+0275,
+ 	U+03C2, U+1E9B.
+ * Changed combining order class for U+0F71.
+ * Corrected canonical decompositions for U+0F73, U+1FBE.
+ * Changed decomposition for U+FB1F from compatibility to canonical.
+ * Added compatibility decompositions for U+FBE8, U+FBE9, U+FBF9..U+FBFB.
+ * Corrected compatibility decompositions for U+2469, U+246A, U+3358.
+ 
+ 
+ Some of the modifications made in updating the Unicode Character Database
+ for the Unicode Standard, Version 2.0 are:
+ * Fixed decompositions with TONOS to use correct NSM: 030D.
+ * Removed old Hangul Syllables; mapping to new characters are
+ 	in a separate table.
+ * Marked compability decompositions with additional tags.
+ * Changed old tag names for clarity.
+ * Revision of decompositions to use first-level decomposition, instead
+ 	of maximal decomposition.
+ * Correction of all known errors in decompositions from earlier versions.
+ * Added control code names (as old Unicode names).
+ * Added Hangul Jamo decompositions.
+ * Added Number category to match properties list in book.
+ * Fixed categories of Koranic Arabic marks.
+ * Fixed categories of precomposed characters to match decomposition where possible.
+ * Added Hebrew cantillation marks and the Tibetan script.
+ * Added place holders for ranges such as CJK Ideographic Area and the
+ 	Private Use Area.
+ * Added categories Me, Sk, Pc, Nl, Cs, Cf, and rectified a number of mistakes in the
+ 	database.
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/unicode/ReadMe-3.0.0.txt gcc-4.1.0/libjava/classpath/doc/unicode/ReadMe-3.0.0.txt
*** gcc-4.0.2/libjava/classpath/doc/unicode/ReadMe-3.0.0.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/unicode/ReadMe-3.0.0.txt	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,13 ----
+ June 23, 1999
+ 
+ This directory contains the initial release for Unicode 3.0.
+ 
+ This release consists of corrections and additions to the
+ Unicode Character Database, to match the publication of
+ The Unicode Standard, Version 3.0.
+ 
+ Detailed documentation of the files constituting the
+ Unicode Character Database (contributory data files for
+ the standard itself) can now be found in
+ UnicodeCharacterDatabase.html.
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/unicode/SpecialCasing-2.txt gcc-4.1.0/libjava/classpath/doc/unicode/SpecialCasing-2.txt
*** gcc-4.0.2/libjava/classpath/doc/unicode/SpecialCasing-2.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/unicode/SpecialCasing-2.txt	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,219 ----
+ # SpecialCasing-2.txt
+ #
+ # Special Casing Properties
+ #
+ # This file is a supplement to the UnicodeData file.
+ # It contains additional information about the casing of Unicode characters.
+ # (For compatibility, the UnicodeData.txt file only contains case mappings for
+ # characters where they are 1-1, and does not have locale-specific mappings.)
+ # These are informative character properties.
+ #
+ # Send comments to mark@unicode.org
+ #
+ # ================================================================================
+ # Format
+ # ================================================================================
+ # The entries in this file are in the following machine-readable format:
+ #
+ # <entry> := <case_mapping> <condition_list>? (<s>* "#" <comment>)?
+ #
+ # <case_mapping> := <source> <sep> <lower> <sep> <title> <sep> <upper> <sep>
+ #
+ # <source> := <code_point>
+ # <sep> := <s>* ";" <s>*
+ # <lower> := <code_point_list>
+ # <title> := <code_point_list>
+ # <upper> := <code_point_list>
+ # <code_point_list> := <code_point> (<s>+ <code_point>)*
+ # <code_point> := <hex><hex><hex><hex>
+ # <hex> := [0-1A-Fa-f]
+ # <s> := <space>
+ #
+ # <condition_list> := <locale>? (<s>+ <context>)*
+ # <locale> := <ISO_3166_code> ( "_" <ISO_639_code> )? ( "_" <variant> )?
+ # <ISO_3166_code> := 2-letter country code,
+ #                    as in http://www.unicode.org/unicode/onlinedat/countries.html
+ # <ISO_639_code> :=  2-letter code,
+ #                    as in http://www.unicode.org/unicode/onlinedat/languages.html
+ # <context> := "FINAL" | "NON_FINAL" | "MODERN" | "NON_MODERN"
+ #
+ #  A condition list overrides the normal behavior if any of the listed conditions is true.
+ #   FINAL:  The letter is not followed by a letter of category L* (e.g. Ll, Lt, Lu, Lm, or Lo).
+ #   MODERN: The mapping is only used for modern text.
+ #  Conditions preceded by "NON_" represent the negation of the condition
+ #
+ # New contexts may be added in the future.
+ # Parsers of this file must be prepared to deal with that situation.
+ # Additional whitespace around elements is optional. Blank lines are ignored in parsing.
+ # On any line, all text following "#" is a comment, and are ignored in parsing.
+ # ================================================================================
+ 
+ # ================================================================================
+ # Unconditional mappings
+ # ================================================================================
+ 
+ # The German es-zed is special--the normal mapping is to SS.
+ # Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))
+ 
+ 00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S
+ 
+ # Ligatures
+ 
+ FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF
+ FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI
+ FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
+ FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI
+ FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL
+ FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T
+ FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST
+ 
+ 0587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN
+ FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW
+ FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH
+ FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI
+ FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW
+ FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
+ 
+ # No corresponding uppercase precomposed character
+ 
+ 0149; 0149; 02BC 006E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+ 0390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+ 03B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+ 01F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON
+ 1E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+ 1E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+ 1E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+ 1E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+ 1E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+ 1F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+ 1F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+ 1F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+ 1F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+ 1FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+ 1FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+ 1FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+ 1FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+ 1FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+ 1FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+ 1FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+ 1FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+ 1FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI
+ 1FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+ 1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+ 1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+ 
+ # IMPORTANT-when capitalizing iota-subscript (0345)
+ #  It MUST be in normalized form--moved to the end of any sequence of combining marks.
+ #  This is because logically it represents a following base character!
+ #  E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
+ # It should never be the first character in a word, so in titlecasing it can be left as is.
+ 
+ # The following cases are already in the UnicodeData file, so are only commented here.
+ 
+ # 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
+ 
+ # All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
+ # have special uppercases.
+ # Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase!
+ 
+ 1F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+ 1F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+ 1F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+ 1F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+ 1F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+ 1F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+ 1F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+ 1F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ 1F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+ 1F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+ 1F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ 1F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ 1F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ 1F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ 1F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ 1F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ 1F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+ 1F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+ 1F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+ 1F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+ 1F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+ 1F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+ 1F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+ 1F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ 1F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+ 1F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+ 1F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ 1F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ 1F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ 1F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ 1F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ 1F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ 1FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+ 1FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+ 1FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+ 1FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+ 1FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+ 1FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+ 1FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+ 1FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ 1FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+ 1FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+ 1FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ 1FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ 1FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ 1FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ 1FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ 1FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ 
+ 1FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+ 1FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+ 1FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+ 1FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+ 1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+ 1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+ 
+ # Some characters with YPOGEGRAMMENI are also have no corresponding titlecases
+ 
+ 1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+ 1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+ 1FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+ 1FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+ 1FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+ 1FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+ 
+ 1FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+ 1FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+ 1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+ 
+ # ================================================================================
+ # Conditional mappings
+ # ================================================================================
+ 
+ # Special case for final form of sigma
+ 
+ 03A3; 03C2; 03A3; 03A3; FINAL; # GREEK CAPITAL LETTER SIGMA
+ 
+ # Note: the following cases for non-final are already in the UnicodeData file.
+ 
+ # 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA
+ # 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA
+ # 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA
+ 
+ # Note: the following cases are not included, since they would normalize in lowercasing
+ 
+ # 03C3; 03C2; 03A3; 03A3; FINAL; # GREEK SMALL LETTER SIGMA
+ # 03C2; 03C3; 03A3; 03A3; NON_FINAL; # GREEK SMALL LETTER FINAL SIGMA
+ 
+ # ================================================================================
+ # Locale-sensitive mappings
+ # ================================================================================
+ 
+ # Turkish
+ 
+ 0049; 0131; 0049; 0049; TR; # LATIN CAPITAL LETTER I
+ 0069; 0069; 0130; 0130; TR; # LATIN SMALL LETTER I
+ 
+ # Note: the following cases are already in the UnicodeData file.
+ 
+ # 0131; 0131; 0049; 0049; TR; # LATIN SMALL LETTER DOTLESS I
+ # 0130; 0069; 0130; 0130; TR; # LATIN CAPITAL LETTER I WITH DOT ABOVE
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/unicode/UnicodeCharacterDatabase-3.0.0.html gcc-4.1.0/libjava/classpath/doc/unicode/UnicodeCharacterDatabase-3.0.0.html
*** gcc-4.0.2/libjava/classpath/doc/unicode/UnicodeCharacterDatabase-3.0.0.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/unicode/UnicodeCharacterDatabase-3.0.0.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,345 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+ 
+        "http://www.w3.org/TR/REC-html40/loose.dtd"> 
+ 
+ <html>
+ 
+ 
+ 
+ <head>
+ 
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ 
+ <meta http-equiv="Content-Language" content="en-us">
+ 
+ <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+ 
+ <meta name="ProgId" content="FrontPage.Editor.Document">
+ 
+ <link rel="stylesheet" href="http://www.unicode.org/unicode.css" type="text/css">
+ 
+ <title>Unicode Character Database</title>
+ 
+ </head>
+ 
+ 
+ 
+ <body>
+ 
+ 
+ 
+ <h1>UNICODE CHARACTER DATABASE<br>  
+ Version 3.0.0</h1>
+ 
+ <table border="1" cellspacing="2" cellpadding="0" height="87" width="100%">
+ 
+   <tr>
+ 
+     <td valign="TOP" width="144">Revision</td>
+ 
+     <td valign="TOP">3.0.0</td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td valign="TOP" width="144">Authors</td>
+ 
+     <td valign="TOP">Mark Davis and Ken Whistler</td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td valign="TOP" width="144">Date</td>
+ 
+     <td valign="TOP">1999-09-11</td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td valign="TOP" width="144">This Version</td>
+ 
+     <td valign="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html</a></td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td valign="TOP" width="144">Previous Version</td>
+ 
+     <td valign="TOP">n/a</td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td valign="TOP" width="144">Latest Version</td>
+ 
+     <td valign="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html</a></td>
+ 
+   </tr>
+ 
+ </table>
+ 
+ <p align="center">Copyright Â© 1995-1999 Unicode, Inc. All Rights reserved.</p>  
+   
+ <h2>Disclaimer</h2>  
+   
+ <p>The Unicode Character Database is provided as is by Unicode, Inc. No claims   
+   
+ are made as to fitness for any particular purpose. No warranties of any kind are   
+   
+ expressed or implied. The recipient agrees to determine applicability of   
+   
+ information provided. If this file has been purchased on magnetic or optical   
+   
+ media from Unicode, Inc., the sole remedy for any claim will be exchange of   
+   
+ defective media within 90 days of receipt.</p>  
+   
+ <p>This disclaimer is applicable for all other data files accompanying the   
+   
+ Unicode Character Database, some of which have been compiled by the Unicode   
+   
+ Consortium, and some of which have been supplied by other sources.</p>  
+   
+ <h2>Limitations on Rights to Redistribute This Data</h2>  
+   
+ <p>Recipient is granted the right to make copies in any form for internal   
+   
+ distribution and to freely use the information supplied in the creation of   
+   
+ products supporting the Unicode<sup>TM</sup> Standard. The files in the Unicode   
+   
+ Character Database can be redistributed to third parties or other organizations   
+   
+ (whether for profit or not) as long as this notice and the disclaimer notice are   
+   
+ retained. Information can be extracted from these files and used in   
+   
+ documentation or programs, as long as there is an accompanying notice indicating   
+   
+ the source.</p>  
+   
+ <h2>Introduction</h2>  
+   
+ <p>The Unicode Character Database is a set of files that define the Unicode   
+   
+ character properties and internal mappings. For more information about character   
+   
+ properties and mappings, see <i><a href="http://www.unicode.org/unicode/uni2book/u2.html">The   
+   
+ Unicode Standard</a></i>.</p>  
+   
+ <p>The Unicode Character Database has been updated to reflect Version 3.0 of the   
+   
+ Unicode Standard, with many characters added to those published in Version 2.0.   
+   
+ A number of corrections have also been made to case mappings or other errors in   
+   
+ the database noted since the publication of Version 2.0. Normative bidirectional   
+   
+ properties have also been modified to reflect decisions of the Unicode Technical   
+   
+ Committee.</p>  
+   
+ <p>For more information on versions of the Unicode Standard and how to reference   
+   
+ them, see <a href="http://www.unicode.org/unicode/standard/versions/">http://www.unicode.org/unicode/standard/versions/</a>.</p>  
+   
+ <h2>Conformance</h2>  
+   
+ <p>Character properties may be either normative or informative. <i>Normative</i>   
+   
+ means that implementations that claim conformance to the Unicode Standard (at a   
+   
+ particular version) and which make use of a particular property or field must   
+   
+ follow the specifications of the standard for that property or field in order to   
+   
+ be conformant. The term <i>normative</i> when applied to a property or field of   
+   
+ the Unicode Character Database, does <i>not</i> mean that the value of that   
+   
+ field will never change. Corrections and extensions to the standard in the   
+   
+ future may require minor changes to normative values, even though the Unicode   
+   
+ Technical Committee strives to minimize such changes. An<i> informative </i>property   
+   
+ or field is strongly recommended, but a conformant implementation is free to use   
+   
+ or change such values as it may require while still being conformant to the   
+   
+ standard. Particular implementations may choose to override the properties and   
+   
+ mappings that are not normative. In that case, it is up to the implementer to   
+   
+ establish a protocol to convey that information.</p>  
+   
+ <h2>Files</h2>  
+   
+ <p>The following summarizes the files in the Unicode Character Database. &nbsp;For   
+   
+ more information about these files, see the referenced technical report or   
+   
+ section of Unicode Standard, Version 3.0.</p>  
+   
+ <p><b>UnicodeData.txt (Chapter 4)</b>  
+   
+ <ul>  
+   
+   <li>The main file in the Unicode Character Database.</li>  
+   
+   <li>For detailed information on the format, see <a href="UnicodeData.html">UnicodeData.html</a>.   
+   
+     This file also characterizes which properties are normative and which are   
+   
+     informative.</li>  
+   
+ </ul>  
+   
+ <p><b>PropList.txt (Chapter 4)</b>  
+   
+ <ul>  
+   
+   <li>Additional informative properties list: <i>Alphabetic, Ideographic,</i>   
+   
+     and <i>Mathematical</i>, among others.</li>  
+   
+ </ul>  
+   
+ <p><b>SpecialCasing.txt (Chapter 4)</b>  
+   
+ <ul>  
+   
+   <li>List of informative special casing properties, including one-to-many   
+   
+     mappings such as SHARP S =&gt; &quot;SS&quot;, and locale-specific mappings,   
+   
+     such as for Turkish <i>dotless i</i>.</li>  
+   
+ </ul>  
+   
+ <p><b>Blocks.txt (Chapter 14)</b>  
+   
+ <ul>  
+   
+   <li>List of normative block names.</li>  
+   
+ </ul>  
+   
+ <p><b>Jamo.txt (Chapter 4)</b>  
+   
+ <ul>  
+   
+   <li>List of normative Jamo short names, used in deriving HANGUL SYLLABLE names   
+   
+     algorithmically.</li>  
+   
+ </ul>  
+   
+ <p><b>ArabicShaping.txt (Section 8.2)</b>  
+   
+ <ul>  
+   
+   <li>Basic Arabic and Syriac character shaping properties, such as initial,   
+   
+     medial and final shapes. These properties are normative for minimal shaping   
+   
+     of Arabic and Syriac. </li>  
+   
+ </ul>  
+   
+ <p><b>NamesList.txt (Chapter 14)</b>  
+   
+ <ul>  
+   
+   <li>This file duplicates some of the material in the UnicodeData file, and   
+   
+     adds informative annotations uses in the character charts, as printed in the   
+   
+     Unicode Standard. </li>  
+   
+   <li><b>Note: </b>The information in NamesList.txt and Index.txt files matches   
+   
+     the appropriate version of the book. Changes in the Unicode Character   
+   
+     Database since then may not be reflected in these files, since they are   
+   
+     primarily of archival interest.</li>  
+   
+ </ul>  
+   
+ <p><b>Index.txt (Chapter 14)</b>  
+   
+ <ul>  
+   
+   <li>Informative index to Unicode characters, as printed in the Unicode   
+   
+     Standard</li>  
+   
+   <li><b>Note: </b>The information in NamesList.txt and Index.txt files matches   
+   
+     the appropriate version of the book. Changes in the Unicode Character   
+   
+     Database since then may not be reflected in these files, since they are   
+   
+     primarily of archival interest.</li>  
+   
+ </ul>  
+   
+ <p><b>CompositionExclusions.txt (<a href="http://www.unicode.org/unicode/reports/tr15/">UTR#15   
+   
+ Unicode Normalization Forms</a>)</b>  
+   
+ <ul>  
+   
+   <li>Normative properties for normalization.</li>  
+   
+ </ul>  
+   
+ <p><b>LineBreak.txt (<a href="http://www.unicode.org/unicode/reports/tr14/">UTR   
+   
+ #14: Line Breaking Properties</a>)</b>  
+   
+ <ul>  
+   
+   <li>Normative and informative properties for line breaking. To see which   
+   
+     properties are informative and which are normative, consult UTR#14.</li>  
+   
+ </ul>  
+   
+ <p><b>EastAsianWidth.txt (<a href="http://www.unicode.org/unicode/reports/tr11/">UTR   
+   
+ #11: East Asian Character Width</a>)</b>  
+   
+ <ul>  
+   
+   <li>Informative properties for determining the choice of wide vs. narrow   
+   
+     glyphs in East Asian contexts.</li>  
+   
+ </ul>  
+   
+ <p><b>diffXvY.txt</b>  
+   
+ <ul>  
+   
+   <li>Mechanically-generated informative files containing accumulated   
+   
+     differences between successive versions of UnicodeData.txt</li>  
+   
+ </ul>  
+   
+   
+   
+ </body>  
+   
+   
+   
+ </html>  
+   
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/unicode/UnicodeData-2.1.2.txt gcc-4.1.0/libjava/classpath/doc/unicode/UnicodeData-2.1.2.txt
*** gcc-4.0.2/libjava/classpath/doc/unicode/UnicodeData-2.1.2.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/unicode/UnicodeData-2.1.2.txt	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,6590 ----
+ 0000;<control>;Cc;0;ON;;;;;N;NULL;;;;
+ 0001;<control>;Cc;0;ON;;;;;N;START OF HEADING;;;;
+ 0002;<control>;Cc;0;ON;;;;;N;START OF TEXT;;;;
+ 0003;<control>;Cc;0;ON;;;;;N;END OF TEXT;;;;
+ 0004;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION;;;;
+ 0005;<control>;Cc;0;ON;;;;;N;ENQUIRY;;;;
+ 0006;<control>;Cc;0;ON;;;;;N;ACKNOWLEDGE;;;;
+ 0007;<control>;Cc;0;ON;;;;;N;BELL;;;;
+ 0008;<control>;Cc;0;ON;;;;;N;BACKSPACE;;;;
+ 0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
+ 000A;<control>;Cc;0;ON;;;;;N;LINE FEED;;;;
+ 000B;<control>;Cc;0;ON;;;;;N;VERTICAL TABULATION;;;;
+ 000C;<control>;Cc;0;ON;;;;;N;FORM FEED;;;;
+ 000D;<control>;Cc;0;ON;;;;;N;CARRIAGE RETURN;;;;
+ 000E;<control>;Cc;0;ON;;;;;N;SHIFT OUT;;;;
+ 000F;<control>;Cc;0;ON;;;;;N;SHIFT IN;;;;
+ 0010;<control>;Cc;0;ON;;;;;N;DATA LINK ESCAPE;;;;
+ 0011;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL ONE;;;;
+ 0012;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL TWO;;;;
+ 0013;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL THREE;;;;
+ 0014;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL FOUR;;;;
+ 0015;<control>;Cc;0;ON;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+ 0016;<control>;Cc;0;ON;;;;;N;SYNCHRONOUS IDLE;;;;
+ 0017;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION BLOCK;;;;
+ 0018;<control>;Cc;0;ON;;;;;N;CANCEL;;;;
+ 0019;<control>;Cc;0;ON;;;;;N;END OF MEDIUM;;;;
+ 001A;<control>;Cc;0;ON;;;;;N;SUBSTITUTE;;;;
+ 001B;<control>;Cc;0;ON;;;;;N;ESCAPE;;;;
+ 001C;<control>;Cc;0;ON;;;;;N;FILE SEPARATOR;;;;
+ 001D;<control>;Cc;0;ON;;;;;N;GROUP SEPARATOR;;;;
+ 001E;<control>;Cc;0;ON;;;;;N;RECORD SEPARATOR;;;;
+ 001F;<control>;Cc;0;ON;;;;;N;UNIT SEPARATOR;;;;
+ 0020;SPACE;Zs;0;WS;;;;;N;;;;;
+ 0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+ 0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+ 0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+ 0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+ 0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+ 0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+ 0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+ 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+ 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+ 002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+ 002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+ 002C;COMMA;Po;0;CS;;;;;N;;;;;
+ 002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
+ 002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+ 002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
+ 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+ 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+ 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+ 0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+ 0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+ 0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+ 0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+ 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+ 0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+ 0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+ 003A;COLON;Po;0;CS;;;;;N;;;;;
+ 003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+ 003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+ 003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+ 003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+ 003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+ 0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+ 0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+ 0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+ 0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+ 0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+ 0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+ 0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+ 0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+ 0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+ 0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+ 004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+ 004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+ 004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+ 004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+ 004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+ 004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+ 0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+ 0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+ 0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+ 0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+ 0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+ 0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+ 0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+ 0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+ 0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+ 0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+ 005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+ 005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+ 005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+ 005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+ 005E;CIRCUMFLEX ACCENT;Sk;0;ON;<compat> 0020 0302;;;;N;SPACING CIRCUMFLEX;;;;
+ 005F;LOW LINE;Pc;0;ON;<compat> 0020 0332;;;;N;SPACING UNDERSCORE;;;;
+ 0060;GRAVE ACCENT;Sk;0;ON;<compat> 0020 0300;;;;N;SPACING GRAVE;;;;
+ 0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+ 0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+ 0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+ 0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+ 0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+ 0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+ 0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+ 0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+ 0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+ 006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+ 006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+ 006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+ 006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+ 006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+ 006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+ 0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+ 0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+ 0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+ 0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+ 0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+ 0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+ 0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+ 0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+ 0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+ 0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+ 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+ 007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+ 007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+ 007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+ 007E;TILDE;Sm;0;ON;;;;;N;;;;;
+ 007F;<control>;Cc;0;ON;;;;;N;DELETE;;;;
+ 0080;<control>;Cc;0;ON;;;;;N;;;;;
+ 0081;<control>;Cc;0;ON;;;;;N;;;;;
+ 0082;<control>;Cc;0;ON;;;;;N;;;;;
+ 0083;<control>;Cc;0;ON;;;;;N;;;;;
+ 0084;<control>;Cc;0;ON;;;;;N;;;;;
+ 0085;<control>;Cc;0;ON;;;;;N;;;;;
+ 0086;<control>;Cc;0;ON;;;;;N;;;;;
+ 0087;<control>;Cc;0;ON;;;;;N;;;;;
+ 0088;<control>;Cc;0;ON;;;;;N;;;;;
+ 0089;<control>;Cc;0;ON;;;;;N;;;;;
+ 008A;<control>;Cc;0;ON;;;;;N;;;;;
+ 008B;<control>;Cc;0;ON;;;;;N;;;;;
+ 008C;<control>;Cc;0;ON;;;;;N;;;;;
+ 008D;<control>;Cc;0;ON;;;;;N;;;;;
+ 008E;<control>;Cc;0;ON;;;;;N;;;;;
+ 008F;<control>;Cc;0;ON;;;;;N;;;;;
+ 0090;<control>;Cc;0;ON;;;;;N;;;;;
+ 0091;<control>;Cc;0;ON;;;;;N;;;;;
+ 0092;<control>;Cc;0;ON;;;;;N;;;;;
+ 0093;<control>;Cc;0;ON;;;;;N;;;;;
+ 0094;<control>;Cc;0;ON;;;;;N;;;;;
+ 0095;<control>;Cc;0;ON;;;;;N;;;;;
+ 0096;<control>;Cc;0;ON;;;;;N;;;;;
+ 0097;<control>;Cc;0;ON;;;;;N;;;;;
+ 0098;<control>;Cc;0;ON;;;;;N;;;;;
+ 0099;<control>;Cc;0;ON;;;;;N;;;;;
+ 009A;<control>;Cc;0;ON;;;;;N;;;;;
+ 009B;<control>;Cc;0;ON;;;;;N;;;;;
+ 009C;<control>;Cc;0;ON;;;;;N;;;;;
+ 009D;<control>;Cc;0;ON;;;;;N;;;;;
+ 009E;<control>;Cc;0;ON;;;;;N;;;;;
+ 009F;<control>;Cc;0;ON;;;;;N;;;;;
+ 00A0;NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+ 00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+ 00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+ 00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+ 00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+ 00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+ 00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+ 00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+ 00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+ 00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+ 00AA;FEMININE ORDINAL INDICATOR;Ll;0;ON;<super> 0061;;;;N;;;;;
+ 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Ps;0;ON;;;;;N;LEFT POINTING GUILLEMET;;;;
+ 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+ 00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+ 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+ 00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+ 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+ 00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+ 00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+ 00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+ 00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+ 00B5;MICRO SIGN;Ll;0;ON;<compat> 03BC;;;;N;;;;;
+ 00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+ 00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+ 00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+ 00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+ 00BA;MASCULINE ORDINAL INDICATOR;Ll;0;ON;<super> 006F;;;;N;;;;;
+ 00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pe;0;ON;;;;;N;RIGHT POINTING GUILLEMET;;;;
+ 00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+ 00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+ 00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+ 00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+ 00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+ 00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+ 00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+ 00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+ 00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+ 00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+ 00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6;
+ 00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+ 00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+ 00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+ 00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+ 00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+ 00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+ 00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+ 00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+ 00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+ 00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+ 00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+ 00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+ 00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+ 00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+ 00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+ 00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+ 00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+ 00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+ 00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+ 00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+ 00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+ 00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+ 00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+ 00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+ 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+ 00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+ 00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+ 00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+ 00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+ 00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+ 00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+ 00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6
+ 00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+ 00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+ 00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+ 00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+ 00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+ 00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+ 00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+ 00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+ 00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+ 00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+ 00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+ 00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+ 00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+ 00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+ 00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+ 00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+ 00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+ 00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+ 00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+ 00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+ 00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+ 00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+ 00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+ 00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+ 00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+ 0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+ 0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+ 0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+ 0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+ 0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+ 0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+ 0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+ 0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+ 0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+ 0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+ 010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+ 010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+ 010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+ 010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+ 010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+ 010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+ 0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+ 0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+ 0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+ 0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+ 0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+ 0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+ 0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+ 0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+ 0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+ 0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+ 011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+ 011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+ 011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+ 011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+ 011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+ 011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+ 0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+ 0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+ 0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+ 0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+ 0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+ 0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+ 0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+ 0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+ 0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+ 0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+ 012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+ 012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+ 012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+ 012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+ 012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+ 012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+ 0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+ 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+ 0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+ 0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+ 0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+ 0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+ 0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+ 0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+ 0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+ 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+ 013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+ 013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+ 013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+ 013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+ 013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+ 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+ 0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+ 0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+ 0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+ 0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+ 0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+ 0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+ 0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+ 0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+ 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+ 0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+ 014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+ 014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+ 014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+ 014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+ 014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+ 014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+ 0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+ 0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+ 0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+ 0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+ 0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+ 0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+ 0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+ 0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+ 0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+ 0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+ 015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+ 015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+ 015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+ 015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+ 015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F;
+ 015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E
+ 0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+ 0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+ 0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163;
+ 0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162
+ 0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+ 0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+ 0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+ 0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+ 0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+ 0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+ 016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+ 016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+ 016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+ 016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+ 016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+ 016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+ 0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+ 0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+ 0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+ 0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+ 0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+ 0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+ 0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+ 0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+ 0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+ 0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+ 017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+ 017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+ 017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+ 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+ 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+ 017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+ 0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+ 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+ 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+ 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+ 0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+ 0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+ 0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+ 0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+ 0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+ 0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256;
+ 018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+ 018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+ 018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+ 018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+ 018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+ 018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+ 0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+ 0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+ 0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+ 0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+ 0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+ 0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;;;
+ 0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+ 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+ 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+ 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+ 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+ 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+ 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+ 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+ 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
+ 019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275;
+ 01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+ 01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+ 01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3;
+ 01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2
+ 01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+ 01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+ 01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;;
+ 01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+ 01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+ 01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+ 01AA;LATIN LETTER REVERSED ESH LOOP;Lo;0;L;;;;;N;;;;;
+ 01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+ 01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+ 01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+ 01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+ 01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+ 01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+ 01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+ 01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+ 01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+ 01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+ 01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+ 01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+ 01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+ 01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+ 01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+ 01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+ 01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+ 01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+ 01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+ 01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+ 01BF;LATIN LETTER WYNN;Lo;0;L;;;;;N;;;;;
+ 01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+ 01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+ 01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+ 01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+ 01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+ 01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
+ 01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+ 01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+ 01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
+ 01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+ 01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+ 01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
+ 01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+ 01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+ 01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+ 01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+ 01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+ 01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+ 01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+ 01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+ 01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+ 01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+ 01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+ 01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+ 01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+ 01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+ 01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+ 01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+ 01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+ 01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+ 01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+ 01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+ 01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0041 0307 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+ 01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0061 0307 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+ 01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3;
+ 01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2
+ 01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+ 01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+ 01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+ 01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+ 01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+ 01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+ 01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+ 01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+ 01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+ 01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+ 01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+ 01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+ 01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+ 01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+ 01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
+ 01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+ 01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+ 01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+ 01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+ 01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+ 01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD;
+ 01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC
+ 01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+ 01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+ 0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+ 0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+ 0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+ 0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+ 0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+ 0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+ 0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+ 0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+ 0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+ 0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+ 020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+ 020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+ 020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+ 020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+ 020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+ 020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+ 0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+ 0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+ 0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+ 0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+ 0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+ 0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+ 0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+ 0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+ 0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+ 0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+ 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+ 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+ 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+ 0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+ 0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+ 0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+ 0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+ 0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+ 025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+ 025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+ 025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+ 025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+ 025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+ 025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+ 0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+ 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+ 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+ 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+ 0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+ 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+ 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+ 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+ 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+ 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+ 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+ 026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+ 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+ 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+ 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+ 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+ 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+ 0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+ 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+ 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+ 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+ 0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;;019F;
+ 0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+ 0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+ 0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+ 0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+ 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+ 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+ 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+ 027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+ 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+ 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+ 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;;;
+ 0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+ 0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+ 0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+ 0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+ 0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+ 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+ 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+ 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+ 0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+ 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+ 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+ 028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+ 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+ 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+ 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+ 0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+ 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+ 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+ 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+ 0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+ 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+ 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+ 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+ 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+ 0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+ 029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+ 029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+ 029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+ 029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+ 029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+ 029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+ 02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+ 02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+ 02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+ 02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+ 02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+ 02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+ 02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+ 02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+ 02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+ 02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+ 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+ 02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+ 02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+ 02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+ 02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+ 02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+ 02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+ 02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+ 02B9;MODIFIER LETTER PRIME;Sk;0;L;;;;;N;;;;;
+ 02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;L;;;;;N;;;;;
+ 02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+ 02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+ 02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+ 02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+ 02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+ 02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+ 02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+ 02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;L;;;;;N;;;;;
+ 02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;L;;;;;N;;;;;
+ 02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;L;;;;;N;;;;;
+ 02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;L;;;;;N;;;;;
+ 02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+ 02C7;CARON;Sk;0;L;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+ 02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;L;;;;;N;;;;;
+ 02C9;MODIFIER LETTER MACRON;Sk;0;L;;;;;N;;Mandarin Chinese first tone;;;
+ 02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+ 02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+ 02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;L;;;;;N;;;;;
+ 02CD;MODIFIER LETTER LOW MACRON;Sk;0;L;;;;;N;;;;;
+ 02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+ 02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+ 02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+ 02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+ 02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;L;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+ 02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;L;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+ 02D4;MODIFIER LETTER UP TACK;Sk;0;L;;;;;N;;;;;
+ 02D5;MODIFIER LETTER DOWN TACK;Sk;0;L;;;;;N;;;;;
+ 02D6;MODIFIER LETTER PLUS SIGN;Sk;0;L;;;;;N;;;;;
+ 02D7;MODIFIER LETTER MINUS SIGN;Sk;0;L;;;;;N;;;;;
+ 02D8;BREVE;Sk;0;L;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+ 02D9;DOT ABOVE;Sk;0;L;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+ 02DA;RING ABOVE;Sk;0;L;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+ 02DB;OGONEK;Sk;0;L;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+ 02DC;SMALL TILDE;Sk;0;L;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+ 02DD;DOUBLE ACUTE ACCENT;Sk;0;L;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+ 02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;L;;;;;N;;;;;
+ 02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+ 02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+ 02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+ 02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+ 02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+ 02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;L;;;;;N;;;;;
+ 02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;L;;;;;N;;;;;
+ 02E7;MODIFIER LETTER MID TONE BAR;Sk;0;L;;;;;N;;;;;
+ 02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;L;;;;;N;;;;;
+ 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;L;;;;;N;;;;;
+ 0300;COMBINING GRAVE ACCENT;Mn;230;L;;;;;N;NON-SPACING GRAVE;Varia;;;
+ 0301;COMBINING ACUTE ACCENT;Mn;230;L;;;;;N;NON-SPACING ACUTE;Oxia;;;
+ 0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;L;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+ 0303;COMBINING TILDE;Mn;230;L;;;;;N;NON-SPACING TILDE;;;;
+ 0304;COMBINING MACRON;Mn;230;L;;;;;N;NON-SPACING MACRON;;;;
+ 0305;COMBINING OVERLINE;Mn;230;L;;;;;N;NON-SPACING OVERSCORE;;;;
+ 0306;COMBINING BREVE;Mn;230;L;;;;;N;NON-SPACING BREVE;Vrachy;;;
+ 0307;COMBINING DOT ABOVE;Mn;230;L;;;;;N;NON-SPACING DOT ABOVE;;;;
+ 0308;COMBINING DIAERESIS;Mn;230;L;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+ 0309;COMBINING HOOK ABOVE;Mn;230;L;;;;;N;NON-SPACING HOOK ABOVE;;;;
+ 030A;COMBINING RING ABOVE;Mn;230;L;;;;;N;NON-SPACING RING ABOVE;;;;
+ 030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;L;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+ 030C;COMBINING CARON;Mn;230;L;;;;;N;NON-SPACING HACEK;;;;
+ 030D;COMBINING VERTICAL LINE ABOVE;Mn;230;L;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
+ 030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;L;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+ 030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;L;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+ 0310;COMBINING CANDRABINDU;Mn;230;L;0306 0307;;;;N;NON-SPACING CANDRABINDU;;;;
+ 0311;COMBINING INVERTED BREVE;Mn;230;L;;;;;N;NON-SPACING INVERTED BREVE;;;;
+ 0312;COMBINING TURNED COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+ 0313;COMBINING COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+ 0314;COMBINING REVERSED COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+ 0315;COMBINING COMMA ABOVE RIGHT;Mn;232;L;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+ 0316;COMBINING GRAVE ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING GRAVE BELOW;;;;
+ 0317;COMBINING ACUTE ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING ACUTE BELOW;;;;
+ 0318;COMBINING LEFT TACK BELOW;Mn;220;L;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+ 0319;COMBINING RIGHT TACK BELOW;Mn;220;L;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+ 031A;COMBINING LEFT ANGLE ABOVE;Mn;232;L;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+ 031B;COMBINING HORN;Mn;216;L;;;;;N;NON-SPACING HORN;;;;
+ 031C;COMBINING LEFT HALF RING BELOW;Mn;220;L;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+ 031D;COMBINING UP TACK BELOW;Mn;220;L;;;;;N;NON-SPACING UP TACK BELOW;;;;
+ 031E;COMBINING DOWN TACK BELOW;Mn;220;L;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+ 031F;COMBINING PLUS SIGN BELOW;Mn;220;L;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+ 0320;COMBINING MINUS SIGN BELOW;Mn;220;L;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+ 0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;L;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+ 0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;L;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+ 0323;COMBINING DOT BELOW;Mn;220;L;;;;;N;NON-SPACING DOT BELOW;;;;
+ 0324;COMBINING DIAERESIS BELOW;Mn;220;L;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+ 0325;COMBINING RING BELOW;Mn;220;L;;;;;N;NON-SPACING RING BELOW;;;;
+ 0326;COMBINING COMMA BELOW;Mn;220;L;;;;;N;NON-SPACING COMMA BELOW;;;;
+ 0327;COMBINING CEDILLA;Mn;202;L;;;;;N;NON-SPACING CEDILLA;;;;
+ 0328;COMBINING OGONEK;Mn;202;L;;;;;N;NON-SPACING OGONEK;;;;
+ 0329;COMBINING VERTICAL LINE BELOW;Mn;220;L;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+ 032A;COMBINING BRIDGE BELOW;Mn;220;L;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+ 032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+ 032C;COMBINING CARON BELOW;Mn;220;L;;;;;N;NON-SPACING HACEK BELOW;;;;
+ 032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+ 032E;COMBINING BREVE BELOW;Mn;220;L;;;;;N;NON-SPACING BREVE BELOW;;;;
+ 032F;COMBINING INVERTED BREVE BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+ 0330;COMBINING TILDE BELOW;Mn;220;L;;;;;N;NON-SPACING TILDE BELOW;;;;
+ 0331;COMBINING MACRON BELOW;Mn;220;L;;;;;N;NON-SPACING MACRON BELOW;;;;
+ 0332;COMBINING LOW LINE;Mn;220;L;;;;;N;NON-SPACING UNDERSCORE;;;;
+ 0333;COMBINING DOUBLE LOW LINE;Mn;220;L;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+ 0334;COMBINING TILDE OVERLAY;Mn;1;L;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+ 0335;COMBINING SHORT STROKE OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+ 0336;COMBINING LONG STROKE OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+ 0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+ 0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+ 0339;COMBINING RIGHT HALF RING BELOW;Mn;220;L;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+ 033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+ 033B;COMBINING SQUARE BELOW;Mn;220;L;;;;;N;NON-SPACING SQUARE BELOW;;;;
+ 033C;COMBINING SEAGULL BELOW;Mn;220;L;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+ 033D;COMBINING X ABOVE;Mn;230;L;;;;;N;NON-SPACING X ABOVE;;;;
+ 033E;COMBINING VERTICAL TILDE;Mn;230;L;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+ 033F;COMBINING DOUBLE OVERLINE;Mn;230;L;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+ 0340;COMBINING GRAVE TONE MARK;Mn;230;L;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+ 0341;COMBINING ACUTE TONE MARK;Mn;230;L;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+ 0342;COMBINING GREEK PERISPOMENI;Mn;230;L;;;;;N;;;;;
+ 0343;COMBINING GREEK KORONIS;Mn;230;L;0313;;;;N;;;;;
+ 0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;L;0308 030D;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+ 0345;COMBINING GREEK YPOGEGRAMMENI;Mn;220;L;;;;;N;GREEK NON-SPACING IOTA BELOW;;;;
+ 0360;COMBINING DOUBLE TILDE;Mn;234;L;;;;;N;;;;;
+ 0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;L;;;;;N;;;;;
+ 0374;GREEK NUMERAL SIGN;Po;0;L;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+ 0375;GREEK LOWER NUMERAL SIGN;Po;0;L;;;;;N;;Aristeri keraia;;;
+ 037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+ 037E;GREEK QUESTION MARK;Po;0;L;003B;;;;N;;Erotimatiko;;;
+ 0384;GREEK TONOS;Sk;0;L;<compat> 0020 030D;;;;N;GREEK SPACING TONOS;;;;
+ 0385;GREEK DIALYTIKA TONOS;Sk;0;L;00A8 030D;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+ 0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 030D;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+ 0387;GREEK ANO TELEIA;Po;0;L;00B7;;;;N;;;;;
+ 0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 030D;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+ 0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 030D;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+ 038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 030D;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+ 038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 030D;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+ 038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 030D;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+ 038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 030D;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+ 0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03B9 0344;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+ 0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+ 0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+ 0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+ 0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+ 0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+ 0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+ 0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+ 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+ 0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+ 039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+ 039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+ 039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+ 039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+ 039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+ 039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+ 03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+ 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+ 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+ 03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+ 03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+ 03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+ 03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+ 03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+ 03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+ 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+ 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+ 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 030D;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+ 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 030D;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+ 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 030D;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+ 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 030D;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+ 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03C5 0344;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+ 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+ 03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+ 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+ 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+ 03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+ 03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+ 03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+ 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+ 03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+ 03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+ 03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+ 03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+ 03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+ 03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+ 03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+ 03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+ 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+ 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+ 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+ 03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+ 03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+ 03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+ 03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+ 03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+ 03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+ 03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+ 03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+ 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 030D;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+ 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 030D;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+ 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 030D;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+ 03D0;GREEK BETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;
+ 03D1;GREEK THETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;
+ 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+ 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 030D;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+ 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+ 03D5;GREEK PHI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;
+ 03D6;GREEK PI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;
+ 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;;
+ 03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;;
+ 03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;;
+ 03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;;
+ 03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+ 03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+ 03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+ 03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+ 03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+ 03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+ 03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+ 03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+ 03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+ 03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+ 03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+ 03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+ 03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+ 03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+ 03F0;GREEK KAPPA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;
+ 03F1;GREEK RHO SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;
+ 03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;;;
+ 03F3;GREEK LETTER YOT;Lo;0;L;;;;;N;;;;;
+ 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+ 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+ 0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+ 0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+ 0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+ 0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+ 0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+ 0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+ 0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+ 040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+ 040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+ 040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+ 040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+ 040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+ 0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+ 0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+ 0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+ 0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+ 0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+ 0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+ 0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+ 0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+ 0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+ 0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+ 041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+ 041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+ 041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+ 041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+ 041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+ 041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+ 0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+ 0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+ 0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+ 0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+ 0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+ 0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+ 0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+ 0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+ 0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+ 0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+ 042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+ 042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+ 042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+ 042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+ 042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+ 042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+ 0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+ 0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+ 0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+ 0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+ 0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+ 0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+ 0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+ 0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+ 0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+ 0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+ 043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+ 043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+ 043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+ 043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+ 043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+ 043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+ 0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+ 0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+ 0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+ 0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+ 0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+ 0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+ 0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+ 0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+ 0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+ 0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+ 044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+ 044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+ 044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+ 044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+ 044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+ 044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+ 0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+ 0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+ 0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+ 0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+ 0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+ 0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+ 0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+ 0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+ 0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+ 045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+ 045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+ 045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+ 045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+ 045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+ 0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+ 0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+ 0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+ 0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+ 0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+ 0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+ 0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+ 0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+ 0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+ 0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+ 046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+ 046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+ 046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+ 046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+ 046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+ 046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+ 0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+ 0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+ 0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+ 0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+ 0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+ 0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+ 0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+ 0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+ 0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+ 0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+ 047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+ 047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+ 047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+ 047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+ 047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+ 047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+ 0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+ 0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+ 0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+ 0483;COMBINING CYRILLIC TITLO;Mn;230;L;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+ 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;L;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+ 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;L;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+ 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;L;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+ 0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+ 0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+ 0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+ 0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+ 0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+ 0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+ 0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+ 0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+ 0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+ 0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+ 049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+ 049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+ 049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+ 049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+ 049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+ 049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+ 04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+ 04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+ 04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+ 04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+ 04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+ 04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+ 04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+ 04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+ 04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+ 04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+ 04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+ 04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+ 04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+ 04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+ 04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+ 04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+ 04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+ 04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+ 04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+ 04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+ 04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+ 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+ 04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+ 04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+ 04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+ 04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+ 04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+ 04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+ 04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+ 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+ 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+ 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+ 04C0;CYRILLIC LETTER PALOCHKA;Lo;0;L;;;;;N;CYRILLIC LETTER I;;;;
+ 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+ 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+ 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+ 04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+ 04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+ 04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+ 04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+ 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+ 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+ 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+ 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+ 04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+ 04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;00C6;;;;N;;;;04D5;
+ 04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;00E6;;;;N;;;04D4;;04D4
+ 04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+ 04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+ 04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;018F;;;;N;;;;04D9;
+ 04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;0259;;;;N;;;04D8;;04D8
+ 04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;018F 0308;;;;N;;;;04DB;
+ 04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;0259 0308;;;;N;;;04DA;;04DA
+ 04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+ 04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+ 04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+ 04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+ 04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;01B7;;;;N;;;;04E1;
+ 04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;0292;;;;N;;;04E0;;04E0
+ 04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+ 04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+ 04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+ 04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+ 04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+ 04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+ 04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;019F;;;;N;;;;04E9;
+ 04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;0275;;;;N;;;04E8;;04E8
+ 04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;019F 0308;;;;N;;;;04EB;
+ 04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;0275 0308;;;;N;;;04EA;;04EA
+ 04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+ 04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+ 04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+ 04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+ 04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+ 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+ 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+ 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+ 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+ 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+ 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+ 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+ 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+ 0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+ 0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+ 0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+ 0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+ 0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+ 0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+ 053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+ 053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+ 053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+ 053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+ 053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+ 053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+ 0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+ 0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+ 0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+ 0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+ 0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+ 0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+ 0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+ 0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+ 0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+ 0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+ 054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+ 054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+ 054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+ 054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+ 054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+ 054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+ 0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+ 0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+ 0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+ 0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+ 0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+ 0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+ 0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+ 0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+ 055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+ 055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+ 055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+ 055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+ 055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+ 055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+ 0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+ 0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+ 0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+ 0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+ 0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+ 0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+ 0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+ 0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+ 0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+ 056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+ 056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+ 056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+ 056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+ 056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+ 056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+ 0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+ 0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+ 0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+ 0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+ 0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+ 0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+ 0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+ 0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+ 0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+ 0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+ 057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+ 057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+ 057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+ 057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+ 057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+ 057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+ 0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+ 0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+ 0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+ 0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+ 0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+ 0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+ 0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+ 0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+ 0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+ 0591;HEBREW ACCENT ETNAHTA;Mn;220;R;;;;;N;;;;;
+ 0592;HEBREW ACCENT SEGOL;Mn;230;R;;;;;N;;;;;
+ 0593;HEBREW ACCENT SHALSHELET;Mn;230;R;;;;;N;;;;;
+ 0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;R;;;;;N;;;;;
+ 0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;R;;;;;N;;;;;
+ 0596;HEBREW ACCENT TIPEHA;Mn;220;R;;;;;N;;;;;
+ 0597;HEBREW ACCENT REVIA;Mn;230;R;;;;;N;;;;;
+ 0598;HEBREW ACCENT ZARQA;Mn;230;R;;;;;N;;;;;
+ 0599;HEBREW ACCENT PASHTA;Mn;230;R;;;;;N;;;;;
+ 059A;HEBREW ACCENT YETIV;Mn;222;R;;;;;N;;;;;
+ 059B;HEBREW ACCENT TEVIR;Mn;220;R;;;;;N;;;;;
+ 059C;HEBREW ACCENT GERESH;Mn;230;R;;;;;N;;;;;
+ 059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;R;;;;;N;;;;;
+ 059E;HEBREW ACCENT GERSHAYIM;Mn;230;R;;;;;N;;;;;
+ 059F;HEBREW ACCENT QARNEY PARA;Mn;230;R;;;;;N;;;;;
+ 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;R;;;;;N;;;;;
+ 05A1;HEBREW ACCENT PAZER;Mn;230;R;;;;;N;;;;;
+ 05A3;HEBREW ACCENT MUNAH;Mn;220;R;;;;;N;;;;;
+ 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;R;;;;;N;;;;;
+ 05A5;HEBREW ACCENT MERKHA;Mn;220;R;;;;;N;;;;;
+ 05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;R;;;;;N;;;;;
+ 05A7;HEBREW ACCENT DARGA;Mn;220;R;;;;;N;;;;;
+ 05A8;HEBREW ACCENT QADMA;Mn;230;R;;;;;N;;;;;
+ 05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;R;;;;;N;;;;;
+ 05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;R;;;;;N;;;;;
+ 05AB;HEBREW ACCENT OLE;Mn;230;R;;;;;N;;;;;
+ 05AC;HEBREW ACCENT ILUY;Mn;230;R;;;;;N;;;;;
+ 05AD;HEBREW ACCENT DEHI;Mn;222;R;;;;;N;;;;;
+ 05AE;HEBREW ACCENT ZINOR;Mn;230;R;;;;;N;;;;;
+ 05AF;HEBREW MARK MASORA CIRCLE;Mn;230;R;;;;;N;;;;;
+ 05B0;HEBREW POINT SHEVA;Mn;10;R;;;;;N;;;;;
+ 05B1;HEBREW POINT HATAF SEGOL;Mn;11;R;;;;;N;;;;;
+ 05B2;HEBREW POINT HATAF PATAH;Mn;12;R;;;;;N;;;;;
+ 05B3;HEBREW POINT HATAF QAMATS;Mn;13;R;;;;;N;;;;;
+ 05B4;HEBREW POINT HIRIQ;Mn;14;R;;;;;N;;;;;
+ 05B5;HEBREW POINT TSERE;Mn;15;R;;;;;N;;;;;
+ 05B6;HEBREW POINT SEGOL;Mn;16;R;;;;;N;;;;;
+ 05B7;HEBREW POINT PATAH;Mn;17;R;;;;;N;;;;;
+ 05B8;HEBREW POINT QAMATS;Mn;18;R;;;;;N;;;;;
+ 05B9;HEBREW POINT HOLAM;Mn;19;R;;;;;N;;;;;
+ 05BB;HEBREW POINT QUBUTS;Mn;20;R;;;;;N;;;;;
+ 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;R;;;;;N;HEBREW POINT DAGESH;;;;
+ 05BD;HEBREW POINT METEG;Mn;22;R;;;;;N;;;;;
+ 05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+ 05BF;HEBREW POINT RAFE;Mn;23;R;;;;;N;;;;;
+ 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;;
+ 05C1;HEBREW POINT SHIN DOT;Mn;24;R;;;;;N;;;;;
+ 05C2;HEBREW POINT SIN DOT;Mn;25;R;;;;;N;;;;;
+ 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;;
+ 05C4;HEBREW MARK UPPER DOT;Mn;230;R;;;;;N;;;;;
+ 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+ 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+ 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+ 05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+ 05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+ 05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+ 05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+ 05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+ 05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+ 05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+ 05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+ 05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+ 05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+ 05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+ 05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+ 05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+ 05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+ 05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+ 05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+ 05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+ 05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+ 05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+ 05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+ 05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+ 05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+ 05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+ 05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+ 05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+ 05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+ 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+ 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+ 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+ 060C;ARABIC COMMA;Po;0;R;;;;;N;;;;;
+ 061B;ARABIC SEMICOLON;Po;0;R;;;;;N;;;;;
+ 061F;ARABIC QUESTION MARK;Po;0;R;;;;;N;;;;;
+ 0621;ARABIC LETTER HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH;;;;
+ 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+ 0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+ 0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+ 0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+ 0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+ 0627;ARABIC LETTER ALEF;Lo;0;R;;;;;N;;;;;
+ 0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;;
+ 0629;ARABIC LETTER TEH MARBUTA;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+ 062A;ARABIC LETTER TEH;Lo;0;R;;;;;N;ARABIC LETTER TAA;;;;
+ 062B;ARABIC LETTER THEH;Lo;0;R;;;;;N;ARABIC LETTER THAA;;;;
+ 062C;ARABIC LETTER JEEM;Lo;0;R;;;;;N;;;;;
+ 062D;ARABIC LETTER HAH;Lo;0;R;;;;;N;ARABIC LETTER HAA;;;;
+ 062E;ARABIC LETTER KHAH;Lo;0;R;;;;;N;ARABIC LETTER KHAA;;;;
+ 062F;ARABIC LETTER DAL;Lo;0;R;;;;;N;;;;;
+ 0630;ARABIC LETTER THAL;Lo;0;R;;;;;N;;;;;
+ 0631;ARABIC LETTER REH;Lo;0;R;;;;;N;ARABIC LETTER RA;;;;
+ 0632;ARABIC LETTER ZAIN;Lo;0;R;;;;;N;;;;;
+ 0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;;
+ 0634;ARABIC LETTER SHEEN;Lo;0;R;;;;;N;;;;;
+ 0635;ARABIC LETTER SAD;Lo;0;R;;;;;N;;;;;
+ 0636;ARABIC LETTER DAD;Lo;0;R;;;;;N;;;;;
+ 0637;ARABIC LETTER TAH;Lo;0;R;;;;;N;;;;;
+ 0638;ARABIC LETTER ZAH;Lo;0;R;;;;;N;ARABIC LETTER DHAH;;;;
+ 0639;ARABIC LETTER AIN;Lo;0;R;;;;;N;;;;;
+ 063A;ARABIC LETTER GHAIN;Lo;0;R;;;;;N;;;;;
+ 0640;ARABIC TATWEEL;Lm;0;R;;;;;N;;;;;
+ 0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;;
+ 0642;ARABIC LETTER QAF;Lo;0;R;;;;;N;;;;;
+ 0643;ARABIC LETTER KAF;Lo;0;R;;;;;N;ARABIC LETTER CAF;;;;
+ 0644;ARABIC LETTER LAM;Lo;0;R;;;;;N;;;;;
+ 0645;ARABIC LETTER MEEM;Lo;0;R;;;;;N;;;;;
+ 0646;ARABIC LETTER NOON;Lo;0;R;;;;;N;;;;;
+ 0647;ARABIC LETTER HEH;Lo;0;R;;;;;N;ARABIC LETTER HA;;;;
+ 0648;ARABIC LETTER WAW;Lo;0;R;;;;;N;;;;;
+ 0649;ARABIC LETTER ALEF MAKSURA;Lo;0;R;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+ 064A;ARABIC LETTER YEH;Lo;0;R;;;;;N;ARABIC LETTER YA;;;;
+ 064B;ARABIC FATHATAN;Mn;27;R;;;;;N;;;;;
+ 064C;ARABIC DAMMATAN;Mn;28;R;;;;;N;;;;;
+ 064D;ARABIC KASRATAN;Mn;29;R;;;;;N;;;;;
+ 064E;ARABIC FATHA;Mn;30;R;;;;;N;ARABIC FATHAH;;;;
+ 064F;ARABIC DAMMA;Mn;31;R;;;;;N;ARABIC DAMMAH;;;;
+ 0650;ARABIC KASRA;Mn;32;R;;;;;N;ARABIC KASRAH;;;;
+ 0651;ARABIC SHADDA;Mn;33;R;;;;;N;ARABIC SHADDAH;;;;
+ 0652;ARABIC SUKUN;Mn;34;R;;;;;N;;;;;
+ 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+ 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+ 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+ 0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+ 0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+ 0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+ 0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+ 0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+ 0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+ 0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+ 066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+ 066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+ 066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+ 066D;ARABIC FIVE POINTED STAR;Po;0;R;;;;;N;;;;;
+ 0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;R;;;;;N;ARABIC ALEF ABOVE;;;;
+ 0671;ARABIC LETTER ALEF WASLA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+ 0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+ 0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+ 0674;ARABIC LETTER HIGH HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+ 0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+ 0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+ 0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+ 0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+ 0679;ARABIC LETTER TTEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+ 067A;ARABIC LETTER TTEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+ 067B;ARABIC LETTER BEEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+ 067C;ARABIC LETTER TEH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+ 067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+ 067E;ARABIC LETTER PEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+ 067F;ARABIC LETTER TEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+ 0680;ARABIC LETTER BEHEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+ 0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+ 0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+ 0683;ARABIC LETTER NYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+ 0684;ARABIC LETTER DYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+ 0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+ 0686;ARABIC LETTER TCHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+ 0687;ARABIC LETTER TCHEHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+ 0688;ARABIC LETTER DDAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+ 0689;ARABIC LETTER DAL WITH RING;Lo;0;R;;;;;N;;;;;
+ 068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;R;;;;;N;;;;;
+ 068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;R;;;;;N;;;;;
+ 068C;ARABIC LETTER DAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+ 068D;ARABIC LETTER DDAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+ 068E;ARABIC LETTER DUL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+ 068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+ 0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 0691;ARABIC LETTER RREH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+ 0692;ARABIC LETTER REH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+ 0693;ARABIC LETTER REH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER RA WITH RING;;;;
+ 0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+ 0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+ 0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+ 0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+ 0698;ARABIC LETTER JEH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+ 0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+ 069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;;;;;
+ 069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;R;;;;;N;;;;;
+ 069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
+ 069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 06A1;ARABIC LETTER DOTLESS FEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+ 06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+ 06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+ 06A4;ARABIC LETTER VEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+ 06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+ 06A6;ARABIC LETTER PEHEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+ 06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+ 06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 06A9;ARABIC LETTER KEHEH;Lo;0;R;;;;;N;ARABIC LETTER OPEN CAF;;;;
+ 06AA;ARABIC LETTER SWASH KAF;Lo;0;R;;;;;N;ARABIC LETTER SWASH CAF;;;;
+ 06AB;ARABIC LETTER KAF WITH RING;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+ 06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+ 06AD;ARABIC LETTER NG;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+ 06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+ 06AF;ARABIC LETTER GAF;Lo;0;R;;;;;N;;;;;
+ 06B0;ARABIC LETTER GAF WITH RING;Lo;0;R;;;;;N;;;;;
+ 06B1;ARABIC LETTER NGOEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+ 06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
+ 06B3;ARABIC LETTER GUEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+ 06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;R;;;;;N;;;;;
+ 06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+ 06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 06BA;ARABIC LETTER NOON GHUNNA;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+ 06BB;ARABIC LETTER RNOON;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+ 06BC;ARABIC LETTER NOON WITH RING;Lo;0;R;;;;;N;;;;;
+ 06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;R;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+ 06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+ 06C1;ARABIC LETTER HEH GOAL;Lo;0;R;;;;;N;ARABIC LETTER HA GOAL;;;;
+ 06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+ 06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+ 06C4;ARABIC LETTER WAW WITH RING;Lo;0;R;;;;;N;;;;;
+ 06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+ 06C6;ARABIC LETTER OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+ 06C7;ARABIC LETTER U;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+ 06C8;ARABIC LETTER YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+ 06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+ 06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+ 06CB;ARABIC LETTER VE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+ 06CC;ARABIC LETTER FARSI YEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+ 06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+ 06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+ 06D0;ARABIC LETTER E;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;;
+ 06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+ 06D2;ARABIC LETTER YEH BARREE;Lo;0;R;;;;;N;ARABIC LETTER YA BARREE;;;;
+ 06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+ 06D4;ARABIC FULL STOP;Po;0;R;;;;;N;ARABIC PERIOD;;;;
+ 06D5;ARABIC LETTER AE;Lo;0;R;;;;;N;;;;;
+ 06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;R;;;;;N;;;;;
+ 06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;R;;;;;N;;;;;
+ 06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;R;;;;;N;;;;;
+ 06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;R;;;;;N;;;;;
+ 06DA;ARABIC SMALL HIGH JEEM;Mn;230;R;;;;;N;;;;;
+ 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;R;;;;;N;;;;;
+ 06DC;ARABIC SMALL HIGH SEEN;Mn;230;R;;;;;N;;;;;
+ 06DD;ARABIC END OF AYAH;Me;0;R;;;;;N;;;;;
+ 06DE;ARABIC START OF RUB EL HIZB;Me;0;R;;;;;N;;;;;
+ 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;R;;;;;N;;;;;
+ 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;R;;;;;N;;;;;
+ 06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;R;;;;;N;;;;;
+ 06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;R;;;;;N;;;;;
+ 06E3;ARABIC SMALL LOW SEEN;Mn;220;R;;;;;N;;;;;
+ 06E4;ARABIC SMALL HIGH MADDA;Mn;230;R;;;;;N;;;;;
+ 06E5;ARABIC SMALL WAW;Lm;0;R;;;;;N;;;;;
+ 06E6;ARABIC SMALL YEH;Lm;0;R;;;;;N;;;;;
+ 06E7;ARABIC SMALL HIGH YEH;Mn;230;R;;;;;N;;;;;
+ 06E8;ARABIC SMALL HIGH NOON;Mn;230;R;;;;;N;;;;;
+ 06E9;ARABIC PLACE OF SAJDAH;So;0;R;;;;;N;;;;;
+ 06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;R;;;;;N;;;;;
+ 06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;R;;;;;N;;;;;
+ 06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;R;;;;;N;;;;;
+ 06ED;ARABIC SMALL LOW MEEM;Mn;220;R;;;;;N;;;;;
+ 06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+ 06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+ 06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+ 06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+ 06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+ 06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+ 06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+ 06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+ 06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+ 06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+ 0901;DEVANAGARI SIGN CANDRABINDU;Mn;37;L;;;;;N;;;;;
+ 0902;DEVANAGARI SIGN ANUSVARA;Mn;36;L;;;;;N;;;;;
+ 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+ 0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+ 0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+ 0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+ 090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+ 090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+ 090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+ 090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+ 0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+ 0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+ 0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+ 0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+ 091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+ 091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+ 092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+ 092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+ 092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+ 092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+ 0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+ 0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+ 093C;DEVANAGARI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+ 093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+ 093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0941;DEVANAGARI VOWEL SIGN U;Mn;38;L;;;;;N;;;;;
+ 0942;DEVANAGARI VOWEL SIGN UU;Mn;39;L;;;;;N;;;;;
+ 0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;40;L;;;;;N;;;;;
+ 0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;41;L;;;;;N;;;;;
+ 0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;42;L;;;;;N;;;;;
+ 0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;43;L;;;;;N;;;;;
+ 0947;DEVANAGARI VOWEL SIGN E;Mn;44;L;;;;;N;;;;;
+ 0948;DEVANAGARI VOWEL SIGN AI;Mn;45;L;;;;;N;;;;;
+ 0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+ 094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+ 094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+ 094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+ 094D;DEVANAGARI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+ 0950;DEVANAGARI OM;So;0;L;;;;;N;;;;;
+ 0951;DEVANAGARI STRESS SIGN UDATTA;Mn;46;L;;;;;N;;;;;
+ 0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;47;L;;;;;N;;;;;
+ 0953;DEVANAGARI GRAVE ACCENT;Mn;230;L;;;;;N;;;;;
+ 0954;DEVANAGARI ACUTE ACCENT;Mn;230;L;;;;;N;;;;;
+ 0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+ 0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+ 095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+ 095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+ 095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+ 095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+ 095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+ 095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+ 0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;48;L;;;;;N;;;;;
+ 0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;49;L;;;;;N;;;;;
+ 0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+ 0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+ 0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+ 0981;BENGALI SIGN CANDRABINDU;Mn;50;L;;;;;N;;;;;
+ 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+ 0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+ 0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+ 0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+ 098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+ 098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+ 0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+ 0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+ 099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+ 099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+ 09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+ 09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+ 09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+ 09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+ 09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+ 09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+ 09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+ 09B0;BENGALI LETTER RA;Lo;0;L;09AC 09BC;;;;N;;;;;
+ 09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+ 09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+ 09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+ 09BC;BENGALI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+ 09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 09C1;BENGALI VOWEL SIGN U;Mn;51;L;;;;;N;;;;;
+ 09C2;BENGALI VOWEL SIGN UU;Mn;52;L;;;;;N;;;;;
+ 09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;53;L;;;;;N;;;;;
+ 09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;54;L;;;;;N;;;;;
+ 09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+ 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+ 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+ 09CD;BENGALI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+ 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+ 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+ 09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+ 09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;55;L;;;;;N;;;;;
+ 09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;56;L;;;;;N;;;;;
+ 09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+ 09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+ 09F2;BENGALI RUPEE MARK;Sc;0;L;;;;;N;;;;;
+ 09F3;BENGALI RUPEE SIGN;Sc;0;L;;;;;N;;;;;
+ 09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+ 09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+ 09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+ 09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+ 09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;-1;N;;;;;
+ 09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+ 09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+ 0A02;GURMUKHI SIGN BINDI;Mn;57;L;;;;;N;;;;;
+ 0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+ 0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+ 0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+ 0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+ 0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0A33;GURMUKHI LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0A36;GURMUKHI LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0A3C;GURMUKHI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+ 0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0A41;GURMUKHI VOWEL SIGN U;Mn;58;L;;;;;N;;;;;
+ 0A42;GURMUKHI VOWEL SIGN UU;Mn;59;L;;;;;N;;;;;
+ 0A47;GURMUKHI VOWEL SIGN EE;Mn;60;L;;;;;N;;;;;
+ 0A48;GURMUKHI VOWEL SIGN AI;Mn;61;L;;;;;N;;;;;
+ 0A4B;GURMUKHI VOWEL SIGN OO;Mn;62;L;;;;;N;;;;;
+ 0A4C;GURMUKHI VOWEL SIGN AU;Mn;63;L;;;;;N;;;;;
+ 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+ 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+ 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+ 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+ 0A5C;GURMUKHI LETTER RRA;Lo;0;L;0A21 0A3C;;;;N;;;;;
+ 0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+ 0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0A70;GURMUKHI TIPPI;Mn;64;L;;;;;N;;;;;
+ 0A71;GURMUKHI ADDAK;Mn;65;L;;;;;N;;;;;
+ 0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+ 0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+ 0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+ 0A81;GUJARATI SIGN CANDRABINDU;Mn;67;L;;;;;N;;;;;
+ 0A82;GUJARATI SIGN ANUSVARA;Mn;66;L;;;;;N;;;;;
+ 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+ 0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+ 0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+ 0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+ 0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+ 0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+ 0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+ 0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+ 0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0ABC;GUJARATI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+ 0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+ 0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0AC1;GUJARATI VOWEL SIGN U;Mn;68;L;;;;;N;;;;;
+ 0AC2;GUJARATI VOWEL SIGN UU;Mn;69;L;;;;;N;;;;;
+ 0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;70;L;;;;;N;;;;;
+ 0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;71;L;;;;;N;;;;;
+ 0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;72;L;;;;;N;;;;;
+ 0AC7;GUJARATI VOWEL SIGN E;Mn;73;L;;;;;N;;;;;
+ 0AC8;GUJARATI VOWEL SIGN AI;Mn;74;L;;;;;N;;;;;
+ 0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+ 0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+ 0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+ 0ACD;GUJARATI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+ 0AD0;GUJARATI OM;So;0;L;;;;;N;;;;;
+ 0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0B01;ORIYA SIGN CANDRABINDU;Mn;75;L;;;;;N;;;;;
+ 0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+ 0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+ 0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+ 0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+ 0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+ 0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+ 0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0B3C;ORIYA SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+ 0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+ 0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0B3F;ORIYA VOWEL SIGN I;Mn;76;L;;;;;N;;;;;
+ 0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0B41;ORIYA VOWEL SIGN U;Mn;77;L;;;;;N;;;;;
+ 0B42;ORIYA VOWEL SIGN UU;Mn;78;L;;;;;N;;;;;
+ 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;79;L;;;;;N;;;;;
+ 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+ 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+ 0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+ 0B4D;ORIYA SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+ 0B56;ORIYA AI LENGTH MARK;Mn;230;L;;;;;N;;;;;
+ 0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+ 0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+ 0B5F;ORIYA LETTER YYA;Lo;0;L;0B2F 0B3C;;;;N;;;;;
+ 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+ 0B82;TAMIL SIGN ANUSVARA;Mn;0;L;;;;;N;;;;;
+ 0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+ 0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+ 0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+ 0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+ 0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+ 0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+ 0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+ 0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+ 0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+ 0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+ 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0BC0;TAMIL VOWEL SIGN II;Mn;80;L;;;;;N;;;;;
+ 0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+ 0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+ 0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+ 0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+ 0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+ 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+ 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+ 0BCD;TAMIL SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+ 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+ 0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+ 0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+ 0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+ 0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+ 0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+ 0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+ 0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+ 0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+ 0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+ 0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+ 0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0C3E;TELUGU VOWEL SIGN AA;Mn;81;L;;;;;N;;;;;
+ 0C3F;TELUGU VOWEL SIGN I;Mn;82;L;;;;;N;;;;;
+ 0C40;TELUGU VOWEL SIGN II;Mn;83;L;;;;;N;;;;;
+ 0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+ 0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+ 0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+ 0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+ 0C46;TELUGU VOWEL SIGN E;Mn;84;L;;;;;N;;;;;
+ 0C47;TELUGU VOWEL SIGN EE;Mn;85;L;;;;;N;;;;;
+ 0C48;TELUGU VOWEL SIGN AI;Mn;86;L;0C46 0C56;;;;N;;;;;
+ 0C4A;TELUGU VOWEL SIGN O;Mn;87;L;;;;;N;;;;;
+ 0C4B;TELUGU VOWEL SIGN OO;Mn;88;L;;;;;N;;;;;
+ 0C4C;TELUGU VOWEL SIGN AU;Mn;89;L;;;;;N;;;;;
+ 0C4D;TELUGU SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+ 0C55;TELUGU LENGTH MARK;Mn;90;L;;;;;N;;;;;
+ 0C56;TELUGU AI LENGTH MARK;Mn;91;L;;;;;N;;;;;
+ 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+ 0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+ 0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+ 0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+ 0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+ 0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+ 0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+ 0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0CBF;KANNADA VOWEL SIGN I;Mn;92;L;;;;;N;;;;;
+ 0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+ 0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+ 0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+ 0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+ 0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+ 0CC6;KANNADA VOWEL SIGN E;Mn;93;L;;;;;N;;;;;
+ 0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+ 0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+ 0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+ 0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CC6 0CC2 0CD5;;;;N;;;;;
+ 0CCC;KANNADA VOWEL SIGN AU;Mn;94;L;;;;;N;;;;;
+ 0CCD;KANNADA SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+ 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+ 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+ 0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+ 0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+ 0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+ 0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+ 0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+ 0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+ 0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+ 0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0D41;MALAYALAM VOWEL SIGN U;Mn;95;L;;;;;N;;;;;
+ 0D42;MALAYALAM VOWEL SIGN UU;Mn;96;L;;;;;N;;;;;
+ 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;97;L;;;;;N;;;;;
+ 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+ 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+ 0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+ 0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+ 0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+ 0D4D;MALAYALAM SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+ 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+ 0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+ 0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+ 0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+ 0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+ 0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+ 0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+ 0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+ 0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+ 0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+ 0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+ 0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+ 0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+ 0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+ 0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+ 0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+ 0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+ 0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+ 0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+ 0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+ 0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+ 0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+ 0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+ 0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+ 0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+ 0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+ 0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+ 0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+ 0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+ 0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+ 0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+ 0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+ 0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+ 0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+ 0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+ 0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+ 0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+ 0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+ 0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+ 0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+ 0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+ 0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+ 0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+ 0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+ 0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+ 0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+ 0E2F;THAI CHARACTER PAIYANNOI;Po;0;L;;;;;N;THAI PAI YAN NOI;;;;
+ 0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+ 0E31;THAI CHARACTER MAI HAN-AKAT;Mn;98;L;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+ 0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+ 0E33;THAI CHARACTER SARA AM;Lo;0;L;0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+ 0E34;THAI CHARACTER SARA I;Mn;99;L;;;;;N;THAI VOWEL SIGN SARA I;;;;
+ 0E35;THAI CHARACTER SARA II;Mn;100;L;;;;;N;THAI VOWEL SIGN SARA II;;;;
+ 0E36;THAI CHARACTER SARA UE;Mn;101;L;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+ 0E37;THAI CHARACTER SARA UEE;Mn;102;L;;;;;N;THAI VOWEL SIGN SARA UEE;;;;
+ 0E38;THAI CHARACTER SARA U;Mn;103;L;;;;;N;THAI VOWEL SIGN SARA U;;;;
+ 0E39;THAI CHARACTER SARA UU;Mn;104;L;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+ 0E3A;THAI CHARACTER PHINTHU;Mn;105;L;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+ 0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;L;;;;;N;THAI BAHT SIGN;;;;
+ 0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+ 0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+ 0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+ 0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;;
+ 0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;;
+ 0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;;
+ 0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;;
+ 0E47;THAI CHARACTER MAITAIKHU;Mn;106;L;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;;
+ 0E48;THAI CHARACTER MAI EK;Mn;107;L;;;;;N;THAI TONE MAI EK;;;;
+ 0E49;THAI CHARACTER MAI THO;Mn;108;L;;;;;N;THAI TONE MAI THO;;;;
+ 0E4A;THAI CHARACTER MAI TRI;Mn;109;L;;;;;N;THAI TONE MAI TRI;;;;
+ 0E4B;THAI CHARACTER MAI CHATTAWA;Mn;110;L;;;;;N;THAI TONE MAI CHATTAWA;;;;
+ 0E4C;THAI CHARACTER THANTHAKHAT;Mn;111;L;;;;;N;THAI THANTHAKHAT;;;;
+ 0E4D;THAI CHARACTER NIKHAHIT;Mn;112;L;;;;;N;THAI NIKKHAHIT;;;;
+ 0E4E;THAI CHARACTER YAMAKKAN;Mn;128;L;;;;;N;THAI YAMAKKAN;;;;
+ 0E4F;THAI CHARACTER FONGMAN;So;0;L;;;;;N;THAI FONGMAN;;;;
+ 0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+ 0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+ 0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+ 0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+ 0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+ 0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+ 0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+ 0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+ 0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+ 0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+ 0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+ 0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+ 0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+ 0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+ 0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+ 0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+ 0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+ 0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+ 0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+ 0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+ 0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+ 0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+ 0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+ 0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+ 0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+ 0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+ 0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+ 0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+ 0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+ 0EAF;LAO ELLIPSIS;Po;0;L;;;;;N;;;;;
+ 0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+ 0EB1;LAO VOWEL SIGN MAI KAN;Mn;113;L;;;;;N;;;;;
+ 0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+ 0EB3;LAO VOWEL SIGN AM;Lo;0;L;0ECD 0EB2;;;;N;;;;;
+ 0EB4;LAO VOWEL SIGN I;Mn;114;L;;;;;N;;;;;
+ 0EB5;LAO VOWEL SIGN II;Mn;115;L;;;;;N;;;;;
+ 0EB6;LAO VOWEL SIGN Y;Mn;116;L;;;;;N;;;;;
+ 0EB7;LAO VOWEL SIGN YY;Mn;117;L;;;;;N;;;;;
+ 0EB8;LAO VOWEL SIGN U;Mn;118;L;;;;;N;;;;;
+ 0EB9;LAO VOWEL SIGN UU;Mn;119;L;;;;;N;;;;;
+ 0EBB;LAO VOWEL SIGN MAI KON;Mn;120;L;;;;;N;;;;;
+ 0EBC;LAO SEMIVOWEL SIGN LO;Mn;121;L;;;;;N;;;;;
+ 0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+ 0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+ 0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+ 0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+ 0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+ 0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+ 0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+ 0EC8;LAO TONE MAI EK;Mn;122;L;;;;;N;;;;;
+ 0EC9;LAO TONE MAI THO;Mn;123;L;;;;;N;;;;;
+ 0ECA;LAO TONE MAI TI;Mn;124;L;;;;;N;;;;;
+ 0ECB;LAO TONE MAI CATAWA;Mn;125;L;;;;;N;;;;;
+ 0ECC;LAO CANCELLATION MARK;Mn;126;L;;;;;N;;;;;
+ 0ECD;LAO NIGGAHITA;Mn;127;L;;;;;N;;;;;
+ 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+ 0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+ 0F00;TIBETAN SYLLABLE OM;So;0;L;;;;;N;;;;;
+ 0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+ 0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+ 0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+ 0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;;yik go dun ma;;;
+ 0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+ 0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+ 0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+ 0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;;drul shey;;;
+ 0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+ 0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+ 0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;;tsek;;;
+ 0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;;;;;N;;tsek tar;;;
+ 0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;;shey;;;
+ 0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;;nyi shey;;;
+ 0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+ 0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+ 0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;;rinchen pung shey;;;
+ 0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+ 0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+ 0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;;ter tsek;;;
+ 0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+ 0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+ 0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+ 0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;L;;;;;N;;kyu pa;;;
+ 0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;L;;;;;N;;dong tsu;;;
+ 0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+ 0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+ 0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+ 0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+ 0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+ 0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+ 0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
+ 0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
+ 0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
+ 0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
+ 0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
+ 0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
+ 0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
+ 0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
+ 0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
+ 0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
+ 0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+ 0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;230;L;;;;;N;;nge zung nyi da;;;
+ 0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+ 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;230;L;;;;;N;;nge zung gor ta;;;
+ 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+ 0F39;TIBETAN MARK TSA -PHRU;Mn;216;L;;;;;N;;tsa tru;;;
+ 0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;L;;;;;N;;gug ta yun;;;
+ 0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;L;;;;;N;;gug ta ye;;;
+ 0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;L;;;;;N;;ang kang yun;;;
+ 0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;L;;;;;N;;ang kang ye;;;
+ 0F3E;TIBETAN SIGN YAR TSHES;Mc;220;L;;;;;N;;yar tse;;;
+ 0F3F;TIBETAN SIGN MAR TSHES;Mc;220;L;;;;;N;;mar tse;;;
+ 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+ 0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+ 0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+ 0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+ 0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+ 0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+ 0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+ 0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+ 0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+ 0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+ 0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+ 0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;;;;;
+ 0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+ 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+ 0F71;TIBETAN VOWEL SIGN AA;Mn;145;L;;;;;N;;;;;
+ 0F72;TIBETAN VOWEL SIGN I;Mn;130;L;;;;;N;;;;;
+ 0F73;TIBETAN VOWEL SIGN II;Mn;131;L;0F72 0F71;;;;N;;;;;
+ 0F74;TIBETAN VOWEL SIGN U;Mn;132;L;;;;;N;;;;;
+ 0F75;TIBETAN VOWEL SIGN UU;Mn;133;L;0F74 0F71;;;;N;;;;;
+ 0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;134;L;0FB2 0F80;;;;N;;;;;
+ 0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;135;L;0F76 0F71;;;;N;;;;;
+ 0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;136;L;0FB3 0F80;;;;N;;;;;
+ 0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;137;L;0F78 0F71;;;;N;;;;;
+ 0F7A;TIBETAN VOWEL SIGN E;Mn;138;L;;;;;N;;;;;
+ 0F7B;TIBETAN VOWEL SIGN EE;Mn;139;L;;;;;N;;;;;
+ 0F7C;TIBETAN VOWEL SIGN O;Mn;140;L;;;;;N;;;;;
+ 0F7D;TIBETAN VOWEL SIGN OO;Mn;141;L;;;;;N;;;;;
+ 0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;142;L;;;;;N;;je su nga ro;;;
+ 0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;;nam chey;;;
+ 0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;143;L;;;;;N;;;;;
+ 0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;144;L;0F80 0F71;;;;N;;;;;
+ 0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;L;;;;;N;;nyi da na da;;;
+ 0F83;TIBETAN SIGN SNA LDAN;Mn;230;L;;;;;N;;nan de;;;
+ 0F84;TIBETAN MARK HALANTA;Mn;9;L;;;;;N;;;;;
+ 0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;;;;;
+ 0F86;TIBETAN SIGN LCI RTAGS;Mn;230;L;;;;;N;;ji ta;;;
+ 0F87;TIBETAN SIGN YANG RTAGS;Mn;230;L;;;;;N;;yang ta;;;
+ 0F88;TIBETAN SIGN LCE TSA CAN;Mn;230;L;;;;;N;;che tsa chen;;;
+ 0F89;TIBETAN SIGN MCHU CAN;Mn;230;L;;;;;N;;chu chen;;;
+ 0F8A;TIBETAN SIGN GRU CAN RGYINGS;Mn;230;L;;;;;N;;tru chen ging;;;
+ 0F8B;TIBETAN SIGN GRU MED RGYINGS;Mn;230;L;;;;;N;;tru me ging;;;
+ 0F90;TIBETAN SUBJOINED LETTER KA;Mn;6;L;;;;;N;;;;;
+ 0F91;TIBETAN SUBJOINED LETTER KHA;Mn;6;L;;;;;N;;;;;
+ 0F92;TIBETAN SUBJOINED LETTER GA;Mn;6;L;;;;;N;;;;;
+ 0F93;TIBETAN SUBJOINED LETTER GHA;Mn;6;L;0F92 0FB7;;;;N;;;;;
+ 0F94;TIBETAN SUBJOINED LETTER NGA;Mn;6;L;;;;;N;;;;;
+ 0F95;TIBETAN SUBJOINED LETTER CA;Mn;6;L;;;;;N;;;;;
+ 0F97;TIBETAN SUBJOINED LETTER JA;Mn;6;L;;;;;N;;;;;
+ 0F99;TIBETAN SUBJOINED LETTER NYA;Mn;6;L;;;;;N;;;;;
+ 0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;6;L;;;;;N;;;;;
+ 0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;6;L;;;;;N;;;;;
+ 0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;6;L;;;;;N;;;;;
+ 0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;6;L;0F9C 0FB7;;;;N;;;;;
+ 0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;6;L;;;;;N;;;;;
+ 0F9F;TIBETAN SUBJOINED LETTER TA;Mn;6;L;;;;;N;;;;;
+ 0FA0;TIBETAN SUBJOINED LETTER THA;Mn;6;L;;;;;N;;;;;
+ 0FA1;TIBETAN SUBJOINED LETTER DA;Mn;6;L;;;;;N;;;;;
+ 0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;6;L;0FA1 0FB7;;;;N;;;;;
+ 0FA3;TIBETAN SUBJOINED LETTER NA;Mn;6;L;;;;;N;;;;;
+ 0FA4;TIBETAN SUBJOINED LETTER PA;Mn;6;L;;;;;N;;;;;
+ 0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;6;L;;;;;N;;;;;
+ 0FA6;TIBETAN SUBJOINED LETTER BA;Mn;6;L;;;;;N;;;;;
+ 0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;6;L;0FA6 0FB7;;;;N;;;;;
+ 0FA8;TIBETAN SUBJOINED LETTER MA;Mn;6;L;;;;;N;;;;;
+ 0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;6;L;;;;;N;;;;;
+ 0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;6;L;;;;;N;;;;;
+ 0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;6;L;;;;;N;;;;;
+ 0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;6;L;0FAB 0FB7;;;;N;;;;;
+ 0FAD;TIBETAN SUBJOINED LETTER WA;Mn;6;L;;;;;N;;;;;
+ 0FB1;TIBETAN SUBJOINED LETTER YA;Mn;6;L;;;;;N;;;;;
+ 0FB2;TIBETAN SUBJOINED LETTER RA;Mn;6;L;;;;;N;;;;;
+ 0FB3;TIBETAN SUBJOINED LETTER LA;Mn;6;L;;;;;N;;;;;
+ 0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;6;L;;;;;N;;;;;
+ 0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;6;L;;;;;N;;;;;
+ 0FB6;TIBETAN SUBJOINED LETTER SA;Mn;6;L;;;;;N;;;;;
+ 0FB7;TIBETAN SUBJOINED LETTER HA;Mn;6;L;;;;;N;;;;;
+ 0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;6;L;0F90 0FB5;;;;N;;;;;
+ 10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;10D0;
+ 10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;10D1;
+ 10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;10D2;
+ 10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;10D3;
+ 10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;10D4;
+ 10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;10D5;
+ 10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;10D6;
+ 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;10D7;
+ 10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;10D8;
+ 10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;10D9;
+ 10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;10DA;
+ 10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;10DB;
+ 10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;10DC;
+ 10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;10DD;
+ 10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;10DE;
+ 10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;10DF;
+ 10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;10E0;
+ 10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;10E1;
+ 10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;10E2;
+ 10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;10E3;
+ 10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;10E4;
+ 10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;10E5;
+ 10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;10E6;
+ 10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;10E7;
+ 10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;10E8;
+ 10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;10E9;
+ 10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;10EA;
+ 10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;10EB;
+ 10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;10EC;
+ 10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;10ED;
+ 10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;10EE;
+ 10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;10EF;
+ 10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;10F0;
+ 10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;10F1;
+ 10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;10F2;
+ 10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;10F3;
+ 10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;10F4;
+ 10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;10F5;
+ 10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+ 10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+ 10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+ 10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+ 10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+ 10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+ 10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+ 10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+ 10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+ 10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+ 10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+ 10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+ 10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+ 10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+ 10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+ 10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+ 10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+ 10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+ 10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+ 10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+ 10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+ 10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+ 10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+ 10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+ 10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+ 10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+ 10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+ 10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+ 10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+ 10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+ 10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+ 10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+ 10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+ 10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+ 10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+ 10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+ 10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+ 10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+ 10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+ 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+ 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+ 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;<compat> 1100 1100;;;;N;;;;;
+ 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+ 1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+ 1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;<compat> 1103 1103;;;;N;;;;;
+ 1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+ 1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+ 1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+ 1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;<compat> 1107 1107;;;;N;;;;;
+ 1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;;
+ 110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;<compat> 1109 1109;;;;N;;;;;
+ 110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+ 110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+ 110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;<compat> 110C 110C;;;;N;;;;;
+ 110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+ 110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+ 1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+ 1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+ 1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+ 1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 1102 1100;;;;N;;;;;
+ 1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;<compat> 1102 1102;;;;N;;;;;
+ 1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 1102 1103;;;;N;;;;;
+ 1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;<compat> 1102 1107;;;;N;;;;;
+ 1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 1103 1100;;;;N;;;;;
+ 1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;<compat> 1105 1102;;;;N;;;;;
+ 1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;<compat> 1105 1105;;;;N;;;;;
+ 111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;<compat> 1105 1112;;;;N;;;;;
+ 111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;<compat> 1105 110B;;;;N;;;;;
+ 111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;<compat> 1106 1107;;;;N;;;;;
+ 111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 1106 110B;;;;N;;;;;
+ 111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;<compat> 1107 1100;;;;N;;;;;
+ 111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;<compat> 1107 1102;;;;N;;;;;
+ 1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;<compat> 1107 1103;;;;N;;;;;
+ 1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;<compat> 1107 1109;;;;N;;;;;
+ 1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1107 1109 1100;;;;N;;;;;
+ 1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1107 1109 1103;;;;N;;;;;
+ 1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;<compat> 1107 1109 1107;;;;N;;;;;
+ 1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;<compat> 1107 1109 1109;;;;N;;;;;
+ 1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;<compat> 1107 1109 110C;;;;N;;;;;
+ 1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;<compat> 1107 110C;;;;N;;;;;
+ 1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;<compat> 1107 110E;;;;N;;;;;
+ 1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;<compat> 1107 1110;;;;N;;;;;
+ 112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 1107 1111;;;;N;;;;;
+ 112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 1107 110B;;;;N;;;;;
+ 112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 1107 1107 110B;;;;N;;;;;
+ 112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;<compat> 1109 1100;;;;N;;;;;
+ 112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;<compat> 1109 1102;;;;N;;;;;
+ 112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;<compat> 1109 1103;;;;N;;;;;
+ 1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;<compat> 1109 1105;;;;N;;;;;
+ 1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;<compat> 1109 1106;;;;N;;;;;
+ 1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;<compat> 1109 1107;;;;N;;;;;
+ 1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;<compat> 1109 1107 1100;;;;N;;;;;
+ 1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;<compat> 1109 1109 1109;;;;N;;;;;
+ 1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;<compat> 1109 110B;;;;N;;;;;
+ 1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;<compat> 1109 110C;;;;N;;;;;
+ 1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;<compat> 1109 110E;;;;N;;;;;
+ 1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;<compat> 1109 110F;;;;N;;;;;
+ 1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;<compat> 1109 1110;;;;N;;;;;
+ 113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;<compat> 1109 1111;;;;N;;;;;
+ 113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;<compat> 1109 1112;;;;N;;;;;
+ 113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+ 113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;<compat> 113C 113C;;;;N;;;;;
+ 113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+ 113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;<compat> 113E 113E;;;;N;;;;;
+ 1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+ 1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 110B 1100;;;;N;;;;;
+ 1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;<compat> 110B 1103;;;;N;;;;;
+ 1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;<compat> 110B 1106;;;;N;;;;;
+ 1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;<compat> 110B 1107;;;;N;;;;;
+ 1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;<compat> 110B 1109;;;;N;;;;;
+ 1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;<compat> 110B 1140;;;;N;;;;;
+ 1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;<compat> 110B 110B;;;;N;;;;;
+ 1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;<compat> 110B 110C;;;;N;;;;;
+ 1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;<compat> 110B 110E;;;;N;;;;;
+ 114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;<compat> 110B 1110;;;;N;;;;;
+ 114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;<compat> 110B 1111;;;;N;;;;;
+ 114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+ 114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;<compat> 110C 110B;;;;N;;;;;
+ 114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+ 114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;<compat> 114E 114E;;;;N;;;;;
+ 1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+ 1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;<compat> 1150 1150;;;;N;;;;;
+ 1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;<compat> 110E 110F;;;;N;;;;;
+ 1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;<compat> 110E 1112;;;;N;;;;;
+ 1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+ 1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+ 1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 1111 1107;;;;N;;;;;
+ 1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1111 110B;;;;N;;;;;
+ 1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;<compat> 1112 1112;;;;N;;;;;
+ 1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+ 115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+ 1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+ 1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+ 1162;HANGUL JUNGSEONG AE;Lo;0;L;<compat> 1161 1175;;;;N;;;;;
+ 1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+ 1164;HANGUL JUNGSEONG YAE;Lo;0;L;<compat> 1163 1175;;;;N;;;;;
+ 1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+ 1166;HANGUL JUNGSEONG E;Lo;0;L;<compat> 1165 1175;;;;N;;;;;
+ 1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+ 1168;HANGUL JUNGSEONG YE;Lo;0;L;<compat> 1167 1175;;;;N;;;;;
+ 1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+ 116A;HANGUL JUNGSEONG WA;Lo;0;L;<compat> 1169 1161;;;;N;;;;;
+ 116B;HANGUL JUNGSEONG WAE;Lo;0;L;<compat> 1169 1161 1175;;;;N;;;;;
+ 116C;HANGUL JUNGSEONG OE;Lo;0;L;<compat> 1169 1175;;;;N;;;;;
+ 116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+ 116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+ 116F;HANGUL JUNGSEONG WEO;Lo;0;L;<compat> 116E 1165;;;;N;;;;;
+ 1170;HANGUL JUNGSEONG WE;Lo;0;L;<compat> 116E 1165 1175;;;;N;;;;;
+ 1171;HANGUL JUNGSEONG WI;Lo;0;L;<compat> 116E 1175;;;;N;;;;;
+ 1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+ 1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+ 1174;HANGUL JUNGSEONG YI;Lo;0;L;<compat> 1173 1175;;;;N;;;;;
+ 1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+ 1176;HANGUL JUNGSEONG A-O;Lo;0;L;<compat> 1161 1169;;;;N;;;;;
+ 1177;HANGUL JUNGSEONG A-U;Lo;0;L;<compat> 1161 116E;;;;N;;;;;
+ 1178;HANGUL JUNGSEONG YA-O;Lo;0;L;<compat> 1163 1169;;;;N;;;;;
+ 1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;<compat> 1163 116D;;;;N;;;;;
+ 117A;HANGUL JUNGSEONG EO-O;Lo;0;L;<compat> 1165 1169;;;;N;;;;;
+ 117B;HANGUL JUNGSEONG EO-U;Lo;0;L;<compat> 1165 116E;;;;N;;;;;
+ 117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;<compat> 1165 1173;;;;N;;;;;
+ 117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;<compat> 1167 1169;;;;N;;;;;
+ 117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;<compat> 1167 116E;;;;N;;;;;
+ 117F;HANGUL JUNGSEONG O-EO;Lo;0;L;<compat> 1169 1165;;;;N;;;;;
+ 1180;HANGUL JUNGSEONG O-E;Lo;0;L;<compat> 1169 1166;;;;N;;;;;
+ 1181;HANGUL JUNGSEONG O-YE;Lo;0;L;<compat> 1169 1168;;;;N;;;;;
+ 1182;HANGUL JUNGSEONG O-O;Lo;0;L;<compat> 1169 1169;;;;N;;;;;
+ 1183;HANGUL JUNGSEONG O-U;Lo;0;L;<compat> 1169 116E;;;;N;;;;;
+ 1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;<compat> 116D 1163;;;;N;;;;;
+ 1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;<compat> 116D 1164;;;;N;;;;;
+ 1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;<compat> 116D 1167;;;;N;;;;;
+ 1187;HANGUL JUNGSEONG YO-O;Lo;0;L;<compat> 116D 1169;;;;N;;;;;
+ 1188;HANGUL JUNGSEONG YO-I;Lo;0;L;<compat> 116D 1175;;;;N;;;;;
+ 1189;HANGUL JUNGSEONG U-A;Lo;0;L;<compat> 116E 1161;;;;N;;;;;
+ 118A;HANGUL JUNGSEONG U-AE;Lo;0;L;<compat> 116E 1162;;;;N;;;;;
+ 118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;<compat> 116E 1165 1173;;;;N;;;;;
+ 118C;HANGUL JUNGSEONG U-YE;Lo;0;L;<compat> 116E 1168;;;;N;;;;;
+ 118D;HANGUL JUNGSEONG U-U;Lo;0;L;<compat> 116E 116E;;;;N;;;;;
+ 118E;HANGUL JUNGSEONG YU-A;Lo;0;L;<compat> 1172 1161;;;;N;;;;;
+ 118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;<compat> 1172 1165;;;;N;;;;;
+ 1190;HANGUL JUNGSEONG YU-E;Lo;0;L;<compat> 1172 1166;;;;N;;;;;
+ 1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;<compat> 1172 1167;;;;N;;;;;
+ 1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;<compat> 1172 1168;;;;N;;;;;
+ 1193;HANGUL JUNGSEONG YU-U;Lo;0;L;<compat> 1172 116E;;;;N;;;;;
+ 1194;HANGUL JUNGSEONG YU-I;Lo;0;L;<compat> 1172 1175;;;;N;;;;;
+ 1195;HANGUL JUNGSEONG EU-U;Lo;0;L;<compat> 1173 116E;;;;N;;;;;
+ 1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;<compat> 1173 1173;;;;N;;;;;
+ 1197;HANGUL JUNGSEONG YI-U;Lo;0;L;<compat> 1174 116E;;;;N;;;;;
+ 1198;HANGUL JUNGSEONG I-A;Lo;0;L;<compat> 1175 1161;;;;N;;;;;
+ 1199;HANGUL JUNGSEONG I-YA;Lo;0;L;<compat> 1175 1163;;;;N;;;;;
+ 119A;HANGUL JUNGSEONG I-O;Lo;0;L;<compat> 1175 1169;;;;N;;;;;
+ 119B;HANGUL JUNGSEONG I-U;Lo;0;L;<compat> 1175 116E;;;;N;;;;;
+ 119C;HANGUL JUNGSEONG I-EU;Lo;0;L;<compat> 1175 1173;;;;N;;;;;
+ 119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;<compat> 1175 119E;;;;N;;;;;
+ 119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+ 119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;<compat> 119E 1165;;;;N;;;;;
+ 11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;<compat> 119E 116E;;;;N;;;;;
+ 11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;<compat> 119E 1175;;;;N;;;;;
+ 11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;<compat> 119E 119E;;;;N;;;;;
+ 11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+ 11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;<compat> 11A8 11A8;;;;N;;;;;
+ 11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;<compat> 11A8 11BA;;;;N;;;;;
+ 11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+ 11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;<compat> 11AB 11BD;;;;N;;;;;
+ 11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;<compat> 11AB 11C2;;;;N;;;;;
+ 11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+ 11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+ 11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;<compat> 11AF 11A8;;;;N;;;;;
+ 11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;<compat> 11AF 11B7;;;;N;;;;;
+ 11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;<compat> 11AF 11B8;;;;N;;;;;
+ 11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;<compat> 11AF 11BA;;;;N;;;;;
+ 11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;<compat> 11AF 11C0;;;;N;;;;;
+ 11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;<compat> 11AF 11C1;;;;N;;;;;
+ 11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;<compat> 11AF 11C2;;;;N;;;;;
+ 11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+ 11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+ 11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;<compat> 11B8 11BA;;;;N;;;;;
+ 11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;;
+ 11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;<compat> 11BA 11BA;;;;N;;;;;
+ 11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+ 11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+ 11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+ 11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+ 11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+ 11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+ 11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+ 11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;<compat> 11A8 11AF;;;;N;;;;;
+ 11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;<compat> 11A8 11BA 11A8;;;;N;;;;;
+ 11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 11AB 11A8;;;;N;;;;;
+ 11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 11AB 11AE;;;;N;;;;;
+ 11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;<compat> 11AB 11BA;;;;N;;;;;
+ 11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;<compat> 11AB 11EB;;;;N;;;;;
+ 11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;<compat> 11AB 11C0;;;;N;;;;;
+ 11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 11AE 11A8;;;;N;;;;;
+ 11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;<compat> 11AE 11AF;;;;N;;;;;
+ 11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11AF 11A8 11BA;;;;N;;;;;
+ 11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;<compat> 11AF 11AB;;;;N;;;;;
+ 11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;<compat> 11AF 11AE;;;;N;;;;;
+ 11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;<compat> 11AF 11AE 11C2;;;;N;;;;;
+ 11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;<compat> 11AF 11AF;;;;N;;;;;
+ 11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;<compat> 11AF 11B7 11A8;;;;N;;;;;
+ 11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;<compat> 11AF 11B7 11BA;;;;N;;;;;
+ 11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11AF 11B8 11BA;;;;N;;;;;
+ 11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;<compat> 11AF 11B8 11C2;;;;N;;;;;
+ 11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;<compat> 11AF 11B8 11BC;;;;N;;;;;
+ 11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;<compat> 11AF 11BA 11BA;;;;N;;;;;
+ 11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;<compat> 11AF 11EB;;;;N;;;;;
+ 11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;<compat> 11AF 11BF;;;;N;;;;;
+ 11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11AF 11F9;;;;N;;;;;
+ 11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;<compat> 11B7 11A8;;;;N;;;;;
+ 11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;<compat> 11B7 11AF;;;;N;;;;;
+ 11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;<compat> 11B7 11B8;;;;N;;;;;
+ 11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;<compat> 11B7 11BA;;;;N;;;;;
+ 11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;<compat> 11B7 11BA 11BA;;;;N;;;;;
+ 11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;<compat> 11B7 11EB;;;;N;;;;;
+ 11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;<compat> 11B7 11BE;;;;N;;;;;
+ 11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;<compat> 11B7 11C2;;;;N;;;;;
+ 11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 11B7 11BC;;;;N;;;;;
+ 11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;<compat> 11B8 11AF;;;;N;;;;;
+ 11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 11B8 11C1;;;;N;;;;;
+ 11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;<compat> 11B8 11C2;;;;N;;;;;
+ 11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 11B8 11BC;;;;N;;;;;
+ 11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;<compat> 11BA 11A8;;;;N;;;;;
+ 11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;<compat> 11BA 11AE;;;;N;;;;;
+ 11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;<compat> 11BA 11AF;;;;N;;;;;
+ 11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;<compat> 11BA 11B8;;;;N;;;;;
+ 11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+ 11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 11BC 11A8;;;;N;;;;;
+ 11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;<compat> 11BC 11A8 11A8;;;;N;;;;;
+ 11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;<compat> 11BC 11BC;;;;N;;;;;
+ 11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;<compat> 11BC 11BF;;;;N;;;;;
+ 11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+ 11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;<compat> 11F0 11BA;;;;N;;;;;
+ 11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F0 11EB;;;;N;;;;;
+ 11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 11C1 11B8;;;;N;;;;;
+ 11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 11C1 11BC;;;;N;;;;;
+ 11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;<compat> 11C2 11AB;;;;N;;;;;
+ 11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;<compat> 11C2 11AF;;;;N;;;;;
+ 11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;<compat> 11C2 11B7;;;;N;;;;;
+ 11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;<compat> 11C2 11B8;;;;N;;;;;
+ 11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+ 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+ 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+ 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+ 1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+ 1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+ 1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+ 1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+ 1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+ 1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+ 1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+ 1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+ 1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+ 1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+ 1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+ 1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+ 1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+ 1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+ 1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+ 1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+ 1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+ 1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+ 1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+ 1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+ 1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+ 1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+ 1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+ 1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+ 1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+ 1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0114 0327;;;;N;;;;1E1D;
+ 1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0115 0327;;;;N;;;1E1C;;1E1C
+ 1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+ 1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+ 1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+ 1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+ 1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+ 1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+ 1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+ 1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+ 1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+ 1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+ 1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+ 1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+ 1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+ 1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+ 1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+ 1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+ 1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+ 1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+ 1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+ 1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+ 1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+ 1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+ 1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+ 1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+ 1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+ 1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+ 1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+ 1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+ 1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+ 1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+ 1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+ 1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+ 1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+ 1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+ 1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+ 1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+ 1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+ 1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+ 1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+ 1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+ 1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+ 1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+ 1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+ 1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+ 1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+ 1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+ 1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+ 1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+ 1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+ 1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+ 1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+ 1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+ 1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+ 1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+ 1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+ 1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+ 1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+ 1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+ 1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+ 1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+ 1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+ 1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+ 1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+ 1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+ 1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+ 1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+ 1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+ 1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+ 1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+ 1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+ 1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+ 1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+ 1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+ 1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+ 1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+ 1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+ 1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+ 1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+ 1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+ 1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+ 1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+ 1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+ 1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+ 1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+ 1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+ 1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+ 1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+ 1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+ 1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+ 1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+ 1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+ 1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+ 1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+ 1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+ 1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+ 1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+ 1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+ 1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+ 1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+ 1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+ 1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+ 1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+ 1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+ 1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+ 1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+ 1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+ 1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+ 1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+ 1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+ 1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+ 1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+ 1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+ 1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+ 1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+ 1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+ 1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+ 1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+ 1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+ 1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+ 1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+ 1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+ 1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+ 1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+ 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+ 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;;;;;N;;;;;
+ 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+ 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+ 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+ 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+ 1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+ 1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+ 1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+ 1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+ 1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+ 1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+ 1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+ 1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+ 1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+ 1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00C2 0323;;;;N;;;;1EAD;
+ 1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00E2 0323;;;;N;;;1EAC;;1EAC
+ 1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+ 1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+ 1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+ 1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+ 1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+ 1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+ 1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+ 1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+ 1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;0102 0323;;;;N;;;;1EB7;
+ 1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;0103 0323;;;;N;;;1EB6;;1EB6
+ 1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+ 1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+ 1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+ 1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+ 1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+ 1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+ 1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+ 1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+ 1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+ 1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+ 1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+ 1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+ 1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+ 1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+ 1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00CA 0323;;;;N;;;;1EC7;
+ 1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00EA 0323;;;;N;;;1EC6;;1EC6
+ 1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+ 1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+ 1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+ 1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+ 1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+ 1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+ 1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+ 1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+ 1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+ 1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+ 1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+ 1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+ 1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+ 1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+ 1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+ 1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+ 1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00D4 0323;;;;N;;;;1ED9;
+ 1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00F4 0323;;;;N;;;1ED8;;1ED8
+ 1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+ 1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+ 1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+ 1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+ 1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+ 1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+ 1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+ 1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+ 1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+ 1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+ 1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+ 1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+ 1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+ 1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+ 1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+ 1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+ 1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+ 1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+ 1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+ 1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+ 1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+ 1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+ 1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+ 1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+ 1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+ 1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+ 1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+ 1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+ 1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+ 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+ 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+ 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+ 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+ 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+ 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+ 1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+ 1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+ 1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+ 1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+ 1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+ 1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+ 1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+ 1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+ 1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+ 1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+ 1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+ 1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+ 1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+ 1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+ 1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+ 1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+ 1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+ 1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+ 1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+ 1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+ 1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+ 1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+ 1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+ 1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+ 1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+ 1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+ 1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+ 1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+ 1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+ 1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+ 1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+ 1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+ 1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+ 1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+ 1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+ 1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+ 1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+ 1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+ 1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+ 1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+ 1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+ 1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+ 1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+ 1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+ 1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+ 1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+ 1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+ 1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+ 1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+ 1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+ 1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+ 1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+ 1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+ 1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+ 1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+ 1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+ 1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+ 1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+ 1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+ 1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+ 1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+ 1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+ 1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+ 1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+ 1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+ 1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+ 1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+ 1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+ 1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+ 1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+ 1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+ 1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+ 1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+ 1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+ 1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+ 1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+ 1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+ 1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+ 1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+ 1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+ 1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+ 1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+ 1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+ 1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+ 1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+ 1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+ 1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+ 1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+ 1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+ 1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+ 1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+ 1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+ 1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+ 1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+ 1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+ 1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+ 1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+ 1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+ 1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03B1 0301;;;;N;;;1FBB;;1FBB
+ 1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+ 1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03B5 0301;;;;N;;;1FC9;;1FC9
+ 1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+ 1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03B7 0301;;;;N;;;1FCB;;1FCB
+ 1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+ 1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03B9 0301;;;;N;;;1FDB;;1FDB
+ 1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+ 1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03BF 0301;;;;N;;;1FF9;;1FF9
+ 1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+ 1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03C5 0301;;;;N;;;1FEB;;1FEB
+ 1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+ 1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03C9 0301;;;;N;;;1FFB;;1FFB
+ 1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+ 1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+ 1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+ 1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+ 1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+ 1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+ 1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+ 1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+ 1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F08 0345;;;;N;;;;1F80;
+ 1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F09 0345;;;;N;;;;1F81;
+ 1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0A 0345;;;;N;;;;1F82;
+ 1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0B 0345;;;;N;;;;1F83;
+ 1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0C 0345;;;;N;;;;1F84;
+ 1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0D 0345;;;;N;;;;1F85;
+ 1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0E 0345;;;;N;;;;1F86;
+ 1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0F 0345;;;;N;;;;1F87;
+ 1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+ 1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+ 1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+ 1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+ 1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+ 1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+ 1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+ 1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+ 1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F28 0345;;;;N;;;;1F90;
+ 1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F29 0345;;;;N;;;;1F91;
+ 1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2A 0345;;;;N;;;;1F92;
+ 1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2B 0345;;;;N;;;;1F93;
+ 1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2C 0345;;;;N;;;;1F94;
+ 1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2D 0345;;;;N;;;;1F95;
+ 1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2E 0345;;;;N;;;;1F96;
+ 1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2F 0345;;;;N;;;;1F97;
+ 1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+ 1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+ 1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+ 1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+ 1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+ 1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+ 1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+ 1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+ 1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F68 0345;;;;N;;;;1FA0;
+ 1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F69 0345;;;;N;;;;1FA1;
+ 1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6A 0345;;;;N;;;;1FA2;
+ 1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6B 0345;;;;N;;;;1FA3;
+ 1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6C 0345;;;;N;;;;1FA4;
+ 1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6D 0345;;;;N;;;;1FA5;
+ 1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6E 0345;;;;N;;;;1FA6;
+ 1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6F 0345;;;;N;;;;1FA7;
+ 1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+ 1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+ 1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+ 1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+ 1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F71 0345;;;;N;;;;;
+ 1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+ 1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+ 1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+ 1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+ 1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+ 1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0391 0301;;;;N;;;;1F71;
+ 1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lu;0;L;0391 0345;;;;N;;;;1FB3;
+ 1FBD;GREEK KORONIS;Sk;0;L;<compat> 0020 0313;;;;N;;;;;
+ 1FBE;GREEK PROSGEGRAMMENI;Lu;0;L;03B9;;;;N;;;;;
+ 1FBF;GREEK PSILI;Sk;0;L;<compat> 0020 0313;;;;N;;;;;
+ 1FC0;GREEK PERISPOMENI;Sk;0;L;<compat> 0020 0342;;;;N;;;;;
+ 1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;L;00A8 0342;;;;N;;;;;
+ 1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+ 1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+ 1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F75 0345;;;;N;;;;;
+ 1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+ 1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+ 1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+ 1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0395 0301;;;;N;;;;1F73;
+ 1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+ 1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0397 0301;;;;N;;;;1F75;
+ 1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lu;0;L;0397 0345;;;;N;;;;1FC3;
+ 1FCD;GREEK PSILI AND VARIA;Sk;0;L;1FBF 0300;;;;N;;;;;
+ 1FCE;GREEK PSILI AND OXIA;Sk;0;L;1FBF 0301;;;;N;;;;;
+ 1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;L;1FBF 0342;;;;N;;;;;
+ 1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+ 1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+ 1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+ 1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;03CA 0301;;;;N;;;;;
+ 1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+ 1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+ 1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+ 1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+ 1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+ 1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;0399 0301;;;;N;;;;1F77;
+ 1FDD;GREEK DASIA AND VARIA;Sk;0;L;1FFE 0300;;;;N;;;;;
+ 1FDE;GREEK DASIA AND OXIA;Sk;0;L;1FFE 0301;;;;N;;;;;
+ 1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;L;1FFE 0342;;;;N;;;;;
+ 1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+ 1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+ 1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+ 1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03CB 0301;;;;N;;;;;
+ 1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+ 1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+ 1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+ 1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+ 1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+ 1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+ 1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+ 1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;03A5 0301;;;;N;;;;1F7B;
+ 1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+ 1FED;GREEK DIALYTIKA AND VARIA;Sk;0;L;00A8 0300;;;;N;;;;;
+ 1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;L;00A8 0301;;;;N;;;;;
+ 1FEF;GREEK VARIA;Sk;0;L;0060;;;;N;;;;;
+ 1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+ 1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+ 1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F79 0345;;;;N;;;;;
+ 1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+ 1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+ 1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+ 1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;039F 0301;;;;N;;;;1F79;
+ 1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+ 1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;03A9 0301;;;;N;;;;1F7D;
+ 1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lu;0;L;03A9 0345;;;;N;;;;1FF3;
+ 1FFD;GREEK OXIA;Sk;0;L;00B4;;;;N;;;;;
+ 1FFE;GREEK DASIA;Sk;0;L;<compat> 0020 0314;;;;N;;;;;
+ 2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+ 2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+ 2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2007;FIGURE SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
+ 2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 200B;ZERO WIDTH SPACE;Zs;0;WS;;;;;N;;;;;
+ 200C;ZERO WIDTH NON-JOINER;Cf;0;ON;;;;;N;;;;;
+ 200D;ZERO WIDTH JOINER;Cf;0;ON;;;;;N;;;;;
+ 200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+ 200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+ 2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+ 2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+ 2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+ 2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+ 2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+ 2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+ 2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+ 2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+ 2018;LEFT SINGLE QUOTATION MARK;Ps;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+ 2019;RIGHT SINGLE QUOTATION MARK;Pe;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+ 201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+ 201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+ 201C;LEFT DOUBLE QUOTATION MARK;Ps;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+ 201D;RIGHT DOUBLE QUOTATION MARK;Pe;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+ 201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+ 201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+ 2020;DAGGER;Po;0;ON;;;;;N;;;;;
+ 2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+ 2022;BULLET;Po;0;ON;;;;;N;;;;;
+ 2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+ 2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+ 2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+ 2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+ 2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+ 2028;LINE SEPARATOR;Zl;0;B;;;;;N;;;;;
+ 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+ 202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;ON;;;;;N;;;;;
+ 202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;ON;;;;;N;;;;;
+ 202C;POP DIRECTIONAL FORMATTING;Cf;0;ON;;;;;N;;;;;
+ 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;ON;;;;;N;;;;;
+ 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;ON;;;;;N;;;;;
+ 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+ 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+ 2032;PRIME;Po;0;ET;;;;;N;;;;;
+ 2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+ 2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+ 2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+ 2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+ 2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+ 2038;CARET;Po;0;ON;;;;;N;;;;;
+ 2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Ps;0;ON;;;;;N;LEFT POINTING SINGLE GUILLEMET;;;;
+ 203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pe;0;ON;;;;;N;RIGHT POINTING SINGLE GUILLEMET;;;;
+ 203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+ 203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+ 203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+ 203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+ 203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+ 2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+ 2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+ 2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+ 2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+ 2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
+ 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+ 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+ 206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
+ 206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
+ 206C;INHIBIT ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
+ 206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
+ 206E;NATIONAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
+ 206F;NOMINAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
+ 2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+ 2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+ 2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+ 2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+ 2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+ 2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+ 2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+ 207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
+ 207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+ 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+ 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+ 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+ 207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;ON;<super> 006E;;;;N;;;;;
+ 2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+ 2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+ 2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+ 2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+ 2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+ 2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+ 2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+ 2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+ 2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+ 2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+ 208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
+ 208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+ 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+ 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+ 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+ 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+ 20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+ 20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+ 20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+ 20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+ 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;L;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+ 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;L;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+ 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+ 20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+ 20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+ 20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+ 20D6;COMBINING LEFT ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+ 20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+ 20D8;COMBINING RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING RING OVERLAY;;;;
+ 20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+ 20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+ 20DB;COMBINING THREE DOTS ABOVE;Mn;230;L;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+ 20DC;COMBINING FOUR DOTS ABOVE;Mn;230;L;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+ 20DD;COMBINING ENCLOSING CIRCLE;Me;0;L;;;;;N;ENCLOSING CIRCLE;;;;
+ 20DE;COMBINING ENCLOSING SQUARE;Me;0;L;;;;;N;ENCLOSING SQUARE;;;;
+ 20DF;COMBINING ENCLOSING DIAMOND;Me;0;L;;;;;N;ENCLOSING DIAMOND;;;;
+ 20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;L;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+ 20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;1;L;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+ 2100;ACCOUNT OF;So;0;ON;;;;;N;;;;;
+ 2101;ADDRESSED TO THE SUBJECT;So;0;ON;;;;;N;;;;;
+ 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;ON;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+ 2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+ 2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+ 2105;CARE OF;So;0;ON;;;;;N;;;;;
+ 2106;CADA UNA;So;0;ON;;;;;N;;;;;
+ 2107;EULER CONSTANT;Lu;0;ON;<compat> 0190;;;;N;EULERS;;;;
+ 2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+ 2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+ 210A;SCRIPT SMALL G;Ll;0;ON;<font> 0067;;;;N;;;;;
+ 210B;SCRIPT CAPITAL H;Lu;0;ON;<font> 0048;;;;N;SCRIPT H;;;;
+ 210C;BLACK-LETTER CAPITAL H;Lu;0;ON;<font> 0048;;;;N;BLACK-LETTER H;;;;
+ 210D;DOUBLE-STRUCK CAPITAL H;Lu;0;ON;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+ 210E;PLANCK CONSTANT;Ll;0;ON;<font> 0068;;;;N;;;;;
+ 210F;PLANCK CONSTANT OVER TWO PI;Ll;0;ON;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+ 2110;SCRIPT CAPITAL I;Lu;0;ON;<font> 0049;;;;N;SCRIPT I;;;;
+ 2111;BLACK-LETTER CAPITAL I;Lu;0;ON;<font> 0049;;;;N;BLACK-LETTER I;;;;
+ 2112;SCRIPT CAPITAL L;Lu;0;ON;<font> 004C;;;;N;SCRIPT L;;;;
+ 2113;SCRIPT SMALL L;Ll;0;ON;<font> 006C;;;;N;;;;;
+ 2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+ 2115;DOUBLE-STRUCK CAPITAL N;Lu;0;ON;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+ 2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+ 2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+ 2118;SCRIPT CAPITAL P;Lu;0;ON;<font> 0050;;;;N;SCRIPT P;;;;
+ 2119;DOUBLE-STRUCK CAPITAL P;Lu;0;ON;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+ 211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;ON;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+ 211B;SCRIPT CAPITAL R;Lu;0;ON;<font> 0052;;;;N;SCRIPT R;;;;
+ 211C;BLACK-LETTER CAPITAL R;Lu;0;ON;<font> 0052;;;;N;BLACK-LETTER R;;;;
+ 211D;DOUBLE-STRUCK CAPITAL R;Lu;0;ON;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+ 211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+ 211F;RESPONSE;So;0;ON;;;;;N;;;;;
+ 2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+ 2121;TELEPHONE SIGN;So;0;ON;<super> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+ 2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+ 2123;VERSICLE;So;0;ON;;;;;N;;;;;
+ 2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;ON;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+ 2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+ 2126;OHM SIGN;Lu;0;ON;03A9;;;;N;OHM;;;;
+ 2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+ 2128;BLACK-LETTER CAPITAL Z;Lu;0;ON;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+ 2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+ 212A;KELVIN SIGN;Lu;0;ON;004B;;;;N;DEGREES KELVIN;;;;
+ 212B;ANGSTROM SIGN;Lu;0;ON;00C5;;;;N;ANGSTROM UNIT;;;;
+ 212C;SCRIPT CAPITAL B;Lu;0;ON;<font> 0042;;;;N;SCRIPT B;;;;
+ 212D;BLACK-LETTER CAPITAL C;Lu;0;ON;<font> 0043;;;;N;BLACK-LETTER C;;;;
+ 212E;ESTIMATED SYMBOL;Ll;0;ON;;;;;N;;;;;
+ 212F;SCRIPT SMALL E;Ll;0;ON;<font> 0065;;;;N;;;;;
+ 2130;SCRIPT CAPITAL E;Lu;0;ON;<font> 0045;;;;N;SCRIPT E;;;;
+ 2131;SCRIPT CAPITAL F;Lu;0;ON;<font> 0046;;;;N;SCRIPT F;;;;
+ 2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+ 2133;SCRIPT CAPITAL M;Lu;0;ON;<font> 004D;;;;N;SCRIPT M;;;;
+ 2134;SCRIPT SMALL O;Ll;0;ON;<font> 006F;;;;N;;;;;
+ 2135;ALEF SYMBOL;Lo;0;ON;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+ 2136;BET SYMBOL;Lo;0;ON;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+ 2137;GIMEL SYMBOL;Lo;0;ON;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+ 2138;DALET SYMBOL;Lo;0;ON;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+ 2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+ 2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+ 2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+ 2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+ 2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+ 2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+ 2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+ 215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+ 215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+ 215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+ 215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+ 215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+ 215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+ 2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+ 2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+ 2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+ 2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+ 2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+ 2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+ 2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+ 2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+ 2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+ 2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+ 216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+ 216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+ 216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+ 216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+ 216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+ 216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+ 2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+ 2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+ 2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+ 2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+ 2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+ 2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+ 2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+ 2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+ 2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+ 2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+ 217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+ 217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+ 217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+ 217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+ 217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+ 217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+ 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+ 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+ 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+ 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+ 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+ 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+ 2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+ 2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+ 2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+ 2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+ 2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+ 2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+ 2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+ 219A;LEFTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;LEFT ARROW WITH STROKE;;;;
+ 219B;RIGHTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT ARROW WITH STROKE;;;;
+ 219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+ 219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+ 219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+ 219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+ 21A0;RIGHTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+ 21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+ 21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+ 21A3;RIGHTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+ 21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+ 21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+ 21A6;RIGHTWARDS ARROW FROM BAR;So;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+ 21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+ 21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+ 21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+ 21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+ 21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+ 21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+ 21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+ 21AE;LEFT RIGHT ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
+ 21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+ 21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+ 21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+ 21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+ 21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+ 21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+ 21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+ 21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+ 21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+ 21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+ 21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+ 21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+ 21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+ 21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+ 21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+ 21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+ 21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+ 21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+ 21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+ 21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+ 21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+ 21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+ 21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+ 21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+ 21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+ 21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+ 21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+ 21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+ 21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+ 21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+ 21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+ 21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
+ 21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+ 21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+ 21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+ 21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+ 21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+ 21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+ 21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+ 21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+ 21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+ 21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+ 21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+ 21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+ 21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+ 21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+ 21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+ 21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+ 21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+ 21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+ 21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+ 21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+ 21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+ 21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+ 21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+ 21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+ 21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+ 21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+ 21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+ 21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+ 2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+ 2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+ 2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+ 2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+ 2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+ 2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+ 2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+ 2207;NABLA;Sm;0;ON;;;;;N;;;;;
+ 2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+ 2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+ 220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+ 220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+ 220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+ 220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+ 220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+ 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+ 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+ 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+ 2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+ 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+ 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+ 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+ 2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+ 2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+ 221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+ 221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+ 221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+ 221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+ 221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+ 2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+ 2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+ 2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+ 2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+ 2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+ 2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+ 2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+ 2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+ 2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+ 2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+ 222A;UNION;Sm;0;ON;;;;;N;;;;;
+ 222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+ 222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+ 222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+ 2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+ 2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+ 2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+ 2236;RATIO;Sm;0;ON;;;;;N;;;;;
+ 2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+ 2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+ 2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+ 223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+ 223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+ 223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+ 223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;;
+ 223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+ 223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+ 2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 2241;NOT TILDE;Sm;0;ON;007E 0338;;;;Y;;;;;
+ 2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+ 2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+ 2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+ 2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+ 224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+ 224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+ 224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+ 224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+ 2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+ 2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+ 2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+ 2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+ 2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+ 2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+ 2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+ 2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+ 2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+ 225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+ 225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+ 225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+ 225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+ 225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+ 225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+ 2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+ 2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+ 2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+ 2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+ 2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+ 2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+ 2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+ 2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+ 2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+ 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+ 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+ 226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+ 226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+ 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+ 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+ 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+ 2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+ 2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+ 2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+ 2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+ 2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+ 2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+ 2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+ 2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+ 2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+ 227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+ 227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+ 227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+ 227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+ 2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+ 2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+ 2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+ 2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+ 2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+ 2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+ 2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+ 2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+ 228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+ 228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+ 228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+ 228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+ 228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+ 228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+ 2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+ 2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+ 2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+ 2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+ 2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+ 2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+ 2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+ 2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+ 229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+ 229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+ 229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+ 22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+ 22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+ 22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+ 22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+ 22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+ 22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+ 22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+ 22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+ 22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+ 22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+ 22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+ 22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+ 22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+ 22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+ 22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+ 22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+ 22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+ 22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+ 22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+ 22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+ 22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+ 22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+ 22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+ 22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+ 22BB;XOR;Sm;0;ON;;;;;N;;;;;
+ 22BC;NAND;Sm;0;ON;;;;;N;;;;;
+ 22BD;NOR;Sm;0;ON;;;;;N;;;;;
+ 22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+ 22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+ 22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+ 22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+ 22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+ 22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+ 22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+ 22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+ 22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+ 22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+ 22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+ 22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+ 22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+ 22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+ 22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+ 22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+ 22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+ 22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+ 22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+ 22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+ 22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+ 22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+ 22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+ 22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+ 22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+ 22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+ 22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+ 22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+ 22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+ 22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+ 22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+ 22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+ 22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+ 22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+ 22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+ 22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+ 22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+ 22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+ 22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+ 22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+ 22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+ 22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+ 22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+ 2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+ 2302;HOUSE;So;0;ON;;;;;N;;;;;
+ 2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+ 2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+ 2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+ 2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+ 2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+ 2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+ 2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+ 230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+ 230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+ 230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+ 230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+ 230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+ 230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+ 2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+ 2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+ 2312;ARC;So;0;ON;;;;;N;;;;;
+ 2313;SEGMENT;So;0;ON;;;;;N;;;;;
+ 2314;SECTOR;So;0;ON;;;;;N;;;;;
+ 2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+ 2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+ 2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+ 2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+ 2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+ 231A;WATCH;So;0;ON;;;;;N;;;;;
+ 231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+ 231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+ 231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+ 231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+ 231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+ 2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2322;FROWN;So;0;ON;;;;;N;;;;;
+ 2323;SMILE;So;0;ON;;;;;N;;;;;
+ 2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+ 2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+ 2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+ 2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+ 2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+ 2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+ 232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+ 232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+ 232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+ 232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+ 232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+ 232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+ 2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+ 2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+ 2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+ 2333;SLOPE;So;0;ON;;;;;N;;;;;
+ 2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+ 2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+ 2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+ 2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+ 2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+ 2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+ 233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+ 233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+ 233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+ 233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+ 233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+ 233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+ 2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+ 2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+ 2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+ 2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+ 2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+ 2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+ 2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+ 2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+ 2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+ 2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+ 234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;;
+ 234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+ 234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+ 234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+ 234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;;
+ 234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+ 2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+ 2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;;
+ 2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+ 2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+ 2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+ 2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;;
+ 2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+ 2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+ 2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+ 2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+ 235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+ 235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+ 235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+ 235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+ 235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+ 235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+ 2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+ 2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;;
+ 2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+ 2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+ 2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+ 2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+ 2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+ 2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+ 2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+ 2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+ 236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+ 236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+ 236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+ 236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+ 236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+ 236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+ 2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+ 2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+ 2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+ 2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+ 2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+ 2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+ 2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+ 2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+ 2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+ 2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+ 237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+ 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+ 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+ 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+ 2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+ 2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+ 2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+ 2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+ 2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+ 2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+ 2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+ 240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+ 240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+ 240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+ 240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+ 240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+ 240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+ 2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+ 2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+ 2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+ 2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+ 2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+ 2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+ 2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+ 2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+ 2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+ 2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+ 241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+ 241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+ 241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+ 241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+ 241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+ 241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+ 2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+ 2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+ 2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+ 2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+ 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+ 2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+ 2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+ 2442;OCR FORK;So;0;ON;;;;;N;;;;;
+ 2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+ 2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+ 2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+ 2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+ 2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+ 2448;OCR DASH;So;0;ON;;;;;N;;;;;
+ 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+ 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+ 2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
+ 2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
+ 2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
+ 2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
+ 2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
+ 2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
+ 2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
+ 2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
+ 2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
+ 2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
+ 246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
+ 246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
+ 246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
+ 246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
+ 246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
+ 246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
+ 2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
+ 2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
+ 2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
+ 2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
+ 2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
+ 2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
+ 2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
+ 2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
+ 2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
+ 2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
+ 247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
+ 247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
+ 247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
+ 247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+ 247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+ 247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+ 2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+ 2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+ 2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+ 2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+ 2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+ 2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+ 2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+ 2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+ 2488;DIGIT ONE FULL STOP;No;0;ON;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+ 2489;DIGIT TWO FULL STOP;No;0;ON;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+ 248A;DIGIT THREE FULL STOP;No;0;ON;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+ 248B;DIGIT FOUR FULL STOP;No;0;ON;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+ 248C;DIGIT FIVE FULL STOP;No;0;ON;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+ 248D;DIGIT SIX FULL STOP;No;0;ON;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+ 248E;DIGIT SEVEN FULL STOP;No;0;ON;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+ 248F;DIGIT EIGHT FULL STOP;No;0;ON;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+ 2490;DIGIT NINE FULL STOP;No;0;ON;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+ 2491;NUMBER TEN FULL STOP;No;0;ON;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+ 2492;NUMBER ELEVEN FULL STOP;No;0;ON;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+ 2493;NUMBER TWELVE FULL STOP;No;0;ON;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+ 2494;NUMBER THIRTEEN FULL STOP;No;0;ON;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+ 2495;NUMBER FOURTEEN FULL STOP;No;0;ON;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+ 2496;NUMBER FIFTEEN FULL STOP;No;0;ON;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+ 2497;NUMBER SIXTEEN FULL STOP;No;0;ON;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+ 2498;NUMBER SEVENTEEN FULL STOP;No;0;ON;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+ 2499;NUMBER EIGHTEEN FULL STOP;No;0;ON;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+ 249A;NUMBER NINETEEN FULL STOP;No;0;ON;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+ 249B;NUMBER TWENTY FULL STOP;No;0;ON;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+ 249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;ON;<compat> 0028 0061 0029;;;;N;;;;;
+ 249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;ON;<compat> 0028 0062 0029;;;;N;;;;;
+ 249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;ON;<compat> 0028 0063 0029;;;;N;;;;;
+ 249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;ON;<compat> 0028 0064 0029;;;;N;;;;;
+ 24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;ON;<compat> 0028 0065 0029;;;;N;;;;;
+ 24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;ON;<compat> 0028 0066 0029;;;;N;;;;;
+ 24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;ON;<compat> 0028 0067 0029;;;;N;;;;;
+ 24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;ON;<compat> 0028 0068 0029;;;;N;;;;;
+ 24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;ON;<compat> 0028 0069 0029;;;;N;;;;;
+ 24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;ON;<compat> 0028 006A 0029;;;;N;;;;;
+ 24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;ON;<compat> 0028 006B 0029;;;;N;;;;;
+ 24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;ON;<compat> 0028 006C 0029;;;;N;;;;;
+ 24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;ON;<compat> 0028 006D 0029;;;;N;;;;;
+ 24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;ON;<compat> 0028 006E 0029;;;;N;;;;;
+ 24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;ON;<compat> 0028 006F 0029;;;;N;;;;;
+ 24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;ON;<compat> 0028 0070 0029;;;;N;;;;;
+ 24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;ON;<compat> 0028 0071 0029;;;;N;;;;;
+ 24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;ON;<compat> 0028 0072 0029;;;;N;;;;;
+ 24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;ON;<compat> 0028 0073 0029;;;;N;;;;;
+ 24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;ON;<compat> 0028 0074 0029;;;;N;;;;;
+ 24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;ON;<compat> 0028 0075 0029;;;;N;;;;;
+ 24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;ON;<compat> 0028 0076 0029;;;;N;;;;;
+ 24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;ON;<compat> 0028 0077 0029;;;;N;;;;;
+ 24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;ON;<compat> 0028 0078 0029;;;;N;;;;;
+ 24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;ON;<compat> 0028 0079 0029;;;;N;;;;;
+ 24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;ON;<compat> 0028 007A 0029;;;;N;;;;;
+ 24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;ON;<circle> 0041;;;;N;;;;24D0;
+ 24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;ON;<circle> 0042;;;;N;;;;24D1;
+ 24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;ON;<circle> 0043;;;;N;;;;24D2;
+ 24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;ON;<circle> 0044;;;;N;;;;24D3;
+ 24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;ON;<circle> 0045;;;;N;;;;24D4;
+ 24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;ON;<circle> 0046;;;;N;;;;24D5;
+ 24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;ON;<circle> 0047;;;;N;;;;24D6;
+ 24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;ON;<circle> 0048;;;;N;;;;24D7;
+ 24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;ON;<circle> 0049;;;;N;;;;24D8;
+ 24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;ON;<circle> 004A;;;;N;;;;24D9;
+ 24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;ON;<circle> 004B;;;;N;;;;24DA;
+ 24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;ON;<circle> 004C;;;;N;;;;24DB;
+ 24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;ON;<circle> 004D;;;;N;;;;24DC;
+ 24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;ON;<circle> 004E;;;;N;;;;24DD;
+ 24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;ON;<circle> 004F;;;;N;;;;24DE;
+ 24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;ON;<circle> 0050;;;;N;;;;24DF;
+ 24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;ON;<circle> 0051;;;;N;;;;24E0;
+ 24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;ON;<circle> 0052;;;;N;;;;24E1;
+ 24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;ON;<circle> 0053;;;;N;;;;24E2;
+ 24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;ON;<circle> 0054;;;;N;;;;24E3;
+ 24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;ON;<circle> 0055;;;;N;;;;24E4;
+ 24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;ON;<circle> 0056;;;;N;;;;24E5;
+ 24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;ON;<circle> 0057;;;;N;;;;24E6;
+ 24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;ON;<circle> 0058;;;;N;;;;24E7;
+ 24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;ON;<circle> 0059;;;;N;;;;24E8;
+ 24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;ON;<circle> 005A;;;;N;;;;24E9;
+ 24D0;CIRCLED LATIN SMALL LETTER A;So;0;ON;<circle> 0061;;;;N;;;24B6;;24B6
+ 24D1;CIRCLED LATIN SMALL LETTER B;So;0;ON;<circle> 0062;;;;N;;;24B7;;24B7
+ 24D2;CIRCLED LATIN SMALL LETTER C;So;0;ON;<circle> 0063;;;;N;;;24B8;;24B8
+ 24D3;CIRCLED LATIN SMALL LETTER D;So;0;ON;<circle> 0064;;;;N;;;24B9;;24B9
+ 24D4;CIRCLED LATIN SMALL LETTER E;So;0;ON;<circle> 0065;;;;N;;;24BA;;24BA
+ 24D5;CIRCLED LATIN SMALL LETTER F;So;0;ON;<circle> 0066;;;;N;;;24BB;;24BB
+ 24D6;CIRCLED LATIN SMALL LETTER G;So;0;ON;<circle> 0067;;;;N;;;24BC;;24BC
+ 24D7;CIRCLED LATIN SMALL LETTER H;So;0;ON;<circle> 0068;;;;N;;;24BD;;24BD
+ 24D8;CIRCLED LATIN SMALL LETTER I;So;0;ON;<circle> 0069;;;;N;;;24BE;;24BE
+ 24D9;CIRCLED LATIN SMALL LETTER J;So;0;ON;<circle> 006A;;;;N;;;24BF;;24BF
+ 24DA;CIRCLED LATIN SMALL LETTER K;So;0;ON;<circle> 006B;;;;N;;;24C0;;24C0
+ 24DB;CIRCLED LATIN SMALL LETTER L;So;0;ON;<circle> 006C;;;;N;;;24C1;;24C1
+ 24DC;CIRCLED LATIN SMALL LETTER M;So;0;ON;<circle> 006D;;;;N;;;24C2;;24C2
+ 24DD;CIRCLED LATIN SMALL LETTER N;So;0;ON;<circle> 006E;;;;N;;;24C3;;24C3
+ 24DE;CIRCLED LATIN SMALL LETTER O;So;0;ON;<circle> 006F;;;;N;;;24C4;;24C4
+ 24DF;CIRCLED LATIN SMALL LETTER P;So;0;ON;<circle> 0070;;;;N;;;24C5;;24C5
+ 24E0;CIRCLED LATIN SMALL LETTER Q;So;0;ON;<circle> 0071;;;;N;;;24C6;;24C6
+ 24E1;CIRCLED LATIN SMALL LETTER R;So;0;ON;<circle> 0072;;;;N;;;24C7;;24C7
+ 24E2;CIRCLED LATIN SMALL LETTER S;So;0;ON;<circle> 0073;;;;N;;;24C8;;24C8
+ 24E3;CIRCLED LATIN SMALL LETTER T;So;0;ON;<circle> 0074;;;;N;;;24C9;;24C9
+ 24E4;CIRCLED LATIN SMALL LETTER U;So;0;ON;<circle> 0075;;;;N;;;24CA;;24CA
+ 24E5;CIRCLED LATIN SMALL LETTER V;So;0;ON;<circle> 0076;;;;N;;;24CB;;24CB
+ 24E6;CIRCLED LATIN SMALL LETTER W;So;0;ON;<circle> 0077;;;;N;;;24CC;;24CC
+ 24E7;CIRCLED LATIN SMALL LETTER X;So;0;ON;<circle> 0078;;;;N;;;24CD;;24CD
+ 24E8;CIRCLED LATIN SMALL LETTER Y;So;0;ON;<circle> 0079;;;;N;;;24CE;;24CE
+ 24E9;CIRCLED LATIN SMALL LETTER Z;So;0;ON;<circle> 007A;;;;N;;;24CF;;24CF
+ 24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
+ 2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+ 2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+ 2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+ 2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+ 2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+ 2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+ 2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+ 2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+ 2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+ 2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+ 250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+ 250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+ 250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+ 250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+ 250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+ 250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+ 2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+ 2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+ 2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+ 2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+ 2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+ 2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+ 2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+ 2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+ 2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+ 2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+ 251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+ 251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+ 251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+ 251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+ 251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+ 251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+ 2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+ 2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+ 2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+ 2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+ 2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+ 2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+ 2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+ 2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+ 2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+ 2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+ 252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+ 252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+ 252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+ 252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+ 252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+ 252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+ 2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+ 2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+ 2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+ 2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+ 2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+ 2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+ 2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+ 2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+ 2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+ 2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+ 253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+ 253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+ 253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+ 253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+ 253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+ 253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+ 2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+ 2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+ 2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+ 2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+ 2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+ 2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+ 2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+ 2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+ 2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+ 2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+ 254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+ 254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+ 254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+ 254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+ 254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+ 254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+ 2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+ 2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+ 2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+ 2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+ 2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+ 2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+ 2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+ 2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+ 2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+ 2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+ 255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+ 255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+ 255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+ 255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+ 255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+ 255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+ 2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+ 2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+ 2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+ 2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+ 2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+ 2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+ 2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+ 2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+ 2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+ 2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+ 256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+ 256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+ 256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+ 256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+ 256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+ 256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+ 2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+ 2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+ 2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+ 2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+ 2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+ 2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+ 2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+ 2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+ 2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+ 2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+ 257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+ 257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+ 257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+ 257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+ 257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+ 257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+ 2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+ 2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+ 2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+ 2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+ 2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+ 2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+ 2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+ 258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+ 258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+ 258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+ 2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+ 2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+ 2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+ 2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+ 2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+ 2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+ 25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+ 25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+ 25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+ 25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+ 25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+ 25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+ 25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+ 25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+ 25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+ 25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+ 25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+ 25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+ 25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+ 25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+ 25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+ 25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+ 25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+ 25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+ 25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+ 25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+ 25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+ 25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+ 25B7;WHITE RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+ 25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+ 25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+ 25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+ 25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+ 25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+ 25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+ 25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+ 25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+ 25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+ 25C1;WHITE LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+ 25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+ 25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+ 25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+ 25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+ 25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+ 25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+ 25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+ 25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+ 25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+ 25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+ 25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+ 25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+ 25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+ 25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+ 25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+ 25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+ 25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+ 25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+ 25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+ 25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+ 25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+ 25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+ 25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+ 25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+ 25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+ 25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+ 25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+ 25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+ 25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+ 25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+ 25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+ 25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+ 25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+ 25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+ 2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+ 2601;CLOUD;So;0;ON;;;;;N;;;;;
+ 2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+ 2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+ 2604;COMET;So;0;ON;;;;;N;;;;;
+ 2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+ 2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+ 2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+ 2609;SUN;So;0;ON;;;;;N;;;;;
+ 260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+ 260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+ 260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+ 260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+ 260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+ 260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+ 2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+ 2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+ 2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+ 2613;SALTIRE;So;0;ON;;;;;N;;;;;
+ 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+ 2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+ 2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+ 2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+ 2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+ 2625;ANKH;So;0;ON;;;;;N;;;;;
+ 2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+ 2627;CHI RHO;So;0;ON;;;;;N;;;;;
+ 2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+ 2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+ 262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+ 262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+ 262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+ 262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+ 262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+ 262F;YIN YANG;So;0;ON;;;;;N;;;;;
+ 2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+ 2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+ 2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+ 2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+ 2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+ 2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+ 2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+ 2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+ 2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+ 2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+ 263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+ 263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+ 263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+ 263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+ 263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+ 263F;MERCURY;So;0;ON;;;;;N;;;;;
+ 2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+ 2641;EARTH;So;0;ON;;;;;N;;;;;
+ 2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+ 2643;JUPITER;So;0;ON;;;;;N;;;;;
+ 2644;SATURN;So;0;ON;;;;;N;;;;;
+ 2645;URANUS;So;0;ON;;;;;N;;;;;
+ 2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+ 2647;PLUTO;So;0;ON;;;;;N;;;;;
+ 2648;ARIES;So;0;ON;;;;;N;;;;;
+ 2649;TAURUS;So;0;ON;;;;;N;;;;;
+ 264A;GEMINI;So;0;ON;;;;;N;;;;;
+ 264B;CANCER;So;0;ON;;;;;N;;;;;
+ 264C;LEO;So;0;ON;;;;;N;;;;;
+ 264D;VIRGO;So;0;ON;;;;;N;;;;;
+ 264E;LIBRA;So;0;ON;;;;;N;;;;;
+ 264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+ 2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+ 2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+ 2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+ 2653;PISCES;So;0;ON;;;;;N;;;;;
+ 2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+ 2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+ 2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+ 2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+ 2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+ 2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+ 265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+ 265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+ 265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+ 265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+ 265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+ 265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+ 2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+ 2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+ 2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+ 2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+ 2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+ 2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+ 2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+ 2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+ 2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+ 2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+ 266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+ 266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+ 266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+ 266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+ 266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+ 266F;MUSIC SHARP SIGN;So;0;ON;;;;;N;SHARP;;;;
+ 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+ 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+ 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+ 2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+ 2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+ 2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+ 2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+ 2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+ 270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+ 270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+ 270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+ 270F;PENCIL;So;0;ON;;;;;N;;;;;
+ 2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+ 2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+ 2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+ 2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+ 2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+ 2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+ 2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+ 2717;BALLOT X;So;0;ON;;;;;N;;;;;
+ 2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+ 2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+ 271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+ 271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+ 271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+ 271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+ 271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+ 271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+ 2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+ 2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+ 2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+ 2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+ 2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+ 272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+ 272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+ 272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+ 272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+ 2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+ 2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+ 2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+ 2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+ 2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+ 273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+ 273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+ 273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+ 2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+ 2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+ 2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+ 2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+ 2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+ 2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+ 2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+ 2747;SPARKLE;So;0;ON;;;;;N;;;;;
+ 2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+ 2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+ 274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+ 274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+ 2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+ 2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+ 275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+ 275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+ 2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+ 2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+ 2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+ 2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+ 2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+ 2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+ 2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+ 2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+ 277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+ 277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+ 277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+ 277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+ 277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+ 277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+ 2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+ 2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+ 2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+ 2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+ 2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+ 2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+ 2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+ 2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+ 2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+ 2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+ 278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+ 278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+ 278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+ 278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+ 278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+ 278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+ 2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+ 2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+ 2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+ 2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+ 2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+ 2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+ 2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+ 279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+ 279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+ 279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+ 279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+ 279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+ 279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+ 27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+ 27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+ 27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+ 27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+ 27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+ 27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+ 27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+ 27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+ 27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+ 27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+ 27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+ 27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+ 27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+ 27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+ 27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+ 27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+ 27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+ 27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+ 27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+ 27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+ 27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+ 27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+ 27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+ 27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+ 27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+ 27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+ 27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+ 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+ 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+ 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+ 3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+ 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+ 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+ 3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+ 3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+ 3005;IDEOGRAPHIC ITERATION MARK;Lm;0;ON;;;;;N;;;;;
+ 3006;IDEOGRAPHIC CLOSING MARK;Po;0;ON;;;;;N;;;;;
+ 3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;ON;;;;0;N;;;;;
+ 3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+ 3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+ 300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+ 300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+ 300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+ 300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+ 300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+ 300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+ 3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+ 3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+ 3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+ 3013;GETA MARK;So;0;ON;;;;;N;;;;;
+ 3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+ 3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+ 3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+ 3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+ 3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+ 3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+ 301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+ 301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+ 301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+ 301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+ 301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+ 301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+ 3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+ 3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+ 3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+ 3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+ 3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+ 3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+ 3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+ 3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+ 3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+ 3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+ 302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;L;;;;;N;;;;;
+ 302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;L;;;;;N;;;;;
+ 302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;L;;;;;N;;;;;
+ 302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;L;;;;;N;;;;;
+ 302E;HANGUL SINGLE DOT TONE MARK;Mn;224;L;;;;;N;;;;;
+ 302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;L;;;;;N;;;;;
+ 3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+ 3031;VERTICAL KANA REPEAT MARK;Lm;0;ON;;;;;N;;;;;
+ 3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;ON;;;;;N;;;;;
+ 3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
+ 3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
+ 3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;ON;;;;;N;;;;;
+ 3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+ 3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+ 303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+ 3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+ 3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+ 3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+ 3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+ 3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+ 3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+ 3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+ 3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+ 3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+ 304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+ 304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+ 304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+ 304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+ 304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+ 304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+ 3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+ 3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+ 3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+ 3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+ 3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+ 3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+ 3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+ 3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+ 3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+ 3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+ 305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+ 305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+ 305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+ 305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+ 305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+ 305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+ 3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+ 3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+ 3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+ 3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+ 3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+ 3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+ 3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+ 3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+ 3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+ 3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+ 306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+ 306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+ 306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+ 306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+ 306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+ 306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+ 3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+ 3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+ 3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+ 3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+ 3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+ 3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+ 3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+ 3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+ 3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+ 3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+ 307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+ 307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+ 307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+ 307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+ 307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+ 307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+ 3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+ 3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+ 3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+ 3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+ 3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+ 3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+ 3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+ 3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+ 3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+ 3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+ 308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+ 308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+ 308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+ 308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+ 308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+ 308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+ 3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+ 3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+ 3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+ 3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+ 3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+ 3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;L;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+ 309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;L;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+ 309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Lm;0;L;<compat> 0020 3099;;;;N;;;;;
+ 309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Lm;0;L;<compat> 0020 309A;;;;N;;;;;
+ 309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+ 309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+ 30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+ 30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+ 30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+ 30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+ 30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+ 30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+ 30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+ 30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+ 30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+ 30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+ 30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+ 30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+ 30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+ 30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+ 30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+ 30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+ 30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+ 30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+ 30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+ 30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+ 30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+ 30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+ 30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+ 30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+ 30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+ 30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+ 30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+ 30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+ 30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+ 30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+ 30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+ 30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+ 30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+ 30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+ 30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+ 30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+ 30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+ 30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+ 30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+ 30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+ 30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+ 30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+ 30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+ 30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+ 30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+ 30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+ 30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+ 30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+ 30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+ 30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+ 30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+ 30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+ 30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+ 30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+ 30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+ 30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+ 30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+ 30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+ 30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+ 30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+ 30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+ 30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+ 30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+ 30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+ 30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+ 30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+ 30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+ 30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+ 30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+ 30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+ 30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+ 30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+ 30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+ 30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+ 30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+ 30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+ 30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+ 30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+ 30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+ 30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+ 30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+ 30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+ 30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+ 30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+ 30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+ 30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+ 30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+ 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+ 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+ 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+ 30FB;KATAKANA MIDDLE DOT;Po;0;L;;;;;N;;;;;
+ 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+ 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+ 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+ 3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+ 3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+ 3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+ 3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+ 3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+ 310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+ 310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+ 310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+ 310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+ 310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+ 310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+ 3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+ 3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+ 3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+ 3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+ 3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+ 3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+ 3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+ 3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+ 3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+ 3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+ 311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+ 311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+ 311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+ 311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+ 311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+ 311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+ 3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+ 3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+ 3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+ 3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+ 3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+ 3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+ 3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+ 3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+ 3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+ 3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+ 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+ 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+ 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+ 3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+ 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+ 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+ 3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+ 3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+ 3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+ 3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+ 3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+ 3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+ 313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+ 313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+ 313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+ 313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+ 313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+ 313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+ 3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+ 3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+ 3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+ 3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+ 3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+ 3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+ 3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+ 3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+ 3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+ 3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+ 314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+ 314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+ 314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+ 314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+ 314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+ 314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+ 3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+ 3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+ 3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+ 3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+ 3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+ 3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+ 3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+ 3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+ 3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+ 3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+ 315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+ 315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+ 315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+ 315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+ 315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+ 315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+ 3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+ 3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+ 3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+ 3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+ 3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+ 3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+ 3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+ 3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+ 3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+ 3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+ 316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+ 316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+ 316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+ 316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+ 316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+ 316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+ 3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+ 3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+ 3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+ 3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+ 3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+ 3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+ 3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+ 3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+ 3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+ 3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+ 317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+ 317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+ 317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+ 317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+ 317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+ 317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+ 3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+ 3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+ 3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+ 3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+ 3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+ 3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+ 3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+ 3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+ 3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+ 3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+ 318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+ 318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+ 318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+ 318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+ 318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+ 3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+ 3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+ 3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
+ 3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
+ 3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
+ 3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
+ 3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+ 3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+ 3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+ 3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+ 319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+ 319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+ 319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+ 319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+ 319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+ 319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+ 3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+ 3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+ 3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+ 3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+ 3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+ 3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+ 3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+ 3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+ 3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+ 3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+ 320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+ 320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+ 320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+ 320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+ 320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+ 320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+ 3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+ 3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+ 3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+ 3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+ 3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+ 3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+ 3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+ 3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+ 3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+ 3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+ 321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+ 321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+ 321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+ 3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
+ 3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
+ 3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
+ 3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
+ 3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
+ 3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
+ 3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
+ 3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
+ 3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
+ 3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
+ 322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+ 322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+ 322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+ 322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+ 322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+ 322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+ 3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+ 3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+ 3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+ 3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+ 3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+ 3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+ 3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+ 3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+ 3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+ 3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+ 323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+ 323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+ 323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+ 323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+ 323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+ 323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+ 3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+ 3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+ 3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+ 3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+ 3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+ 3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+ 3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+ 3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+ 3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+ 3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+ 3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+ 3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+ 3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+ 3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+ 326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+ 326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+ 326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+ 326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+ 326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+ 326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+ 3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+ 3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+ 3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+ 3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+ 3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+ 3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+ 3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+ 3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+ 3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+ 3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+ 327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+ 327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+ 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+ 3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+ 3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+ 3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+ 3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+ 3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+ 3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+ 3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+ 3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+ 3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+ 3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+ 328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+ 328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+ 328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+ 328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+ 328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+ 328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+ 3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+ 3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+ 3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+ 3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+ 3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+ 3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+ 3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+ 3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+ 3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+ 3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+ 329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+ 329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+ 329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+ 329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+ 329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+ 329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+ 32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+ 32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+ 32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+ 32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+ 32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+ 32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+ 32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+ 32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+ 32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+ 32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+ 32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+ 32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+ 32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+ 32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+ 32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+ 32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+ 32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+ 32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+ 32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+ 32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+ 32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+ 32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+ 32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+ 32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+ 32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+ 32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+ 32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+ 32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+ 32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+ 32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+ 32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+ 32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+ 32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+ 32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+ 32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+ 32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+ 32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+ 32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+ 32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+ 32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+ 32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+ 32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+ 32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+ 32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+ 32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+ 32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+ 32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+ 32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+ 32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+ 32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+ 32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+ 32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+ 32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+ 32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+ 32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+ 32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+ 32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+ 32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+ 32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+ 32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+ 32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+ 32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+ 32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+ 32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+ 32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+ 32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+ 32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+ 32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+ 32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+ 32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+ 32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+ 32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+ 32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+ 32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+ 32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+ 32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+ 3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+ 3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+ 3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+ 3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+ 3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+ 3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+ 3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+ 3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+ 3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+ 3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+ 330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+ 330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+ 330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+ 330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+ 330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+ 330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+ 3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+ 3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+ 3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+ 3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+ 3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+ 3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+ 3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+ 3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+ 3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+ 3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+ 331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+ 331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+ 331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+ 331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+ 331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+ 331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+ 3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+ 3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+ 3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+ 3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+ 3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+ 3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+ 3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+ 3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+ 3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+ 3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+ 332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+ 332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+ 332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+ 332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+ 332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+ 332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+ 3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+ 3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+ 3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+ 3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+ 3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+ 3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+ 3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+ 3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+ 3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+ 3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+ 333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+ 333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+ 333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+ 333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+ 333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+ 333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+ 3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+ 3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+ 3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+ 3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+ 3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+ 3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+ 3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+ 3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+ 3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+ 3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+ 334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+ 334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+ 334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+ 334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+ 334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+ 334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+ 3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+ 3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+ 3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+ 3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+ 3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+ 3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+ 3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+ 3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+ 3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+ 3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+ 335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+ 335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+ 335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+ 335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+ 335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+ 335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+ 3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+ 3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+ 3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+ 3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+ 3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+ 3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+ 3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+ 3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+ 3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+ 3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+ 336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+ 336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+ 336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+ 336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+ 336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+ 336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+ 3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+ 3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+ 3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+ 3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+ 3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+ 3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+ 3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+ 337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+ 337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+ 337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+ 337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+ 337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+ 3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+ 3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+ 3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+ 3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+ 3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+ 3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+ 3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+ 3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+ 3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+ 3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+ 338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+ 338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+ 338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+ 338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+ 338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+ 338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+ 3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+ 3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+ 3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+ 3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+ 3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+ 3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+ 3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+ 3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+ 3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+ 3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+ 339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+ 339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+ 339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+ 339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+ 339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+ 339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+ 33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+ 33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+ 33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+ 33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+ 33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+ 33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+ 33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+ 33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+ 33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+ 33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+ 33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+ 33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+ 33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+ 33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+ 33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+ 33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+ 33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+ 33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+ 33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+ 33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+ 33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+ 33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+ 33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+ 33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+ 33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+ 33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+ 33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+ 33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+ 33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+ 33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+ 33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+ 33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+ 33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+ 33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+ 33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+ 33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+ 33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+ 33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+ 33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+ 33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+ 33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+ 33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+ 33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+ 33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+ 33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+ 33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+ 33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+ 33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+ 33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+ 33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+ 33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+ 33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+ 33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+ 33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+ 33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+ 33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+ 33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+ 33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+ 33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+ 33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+ 33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+ 33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+ 33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+ 33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+ 33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+ 33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+ 33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+ 33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+ 33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+ 33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+ 33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+ 33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+ 33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+ 33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+ 33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+ 33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+ 33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+ 33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+ 33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+ 33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+ 33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+ 33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+ 33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+ 33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+ 33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+ 33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+ 33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+ 33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+ 33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+ 33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+ 33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+ 33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+ 33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+ 4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+ 9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+ AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+ D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+ D800;<Unassigned High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+ DB7F;<Unassigned High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+ DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+ DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+ DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+ DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+ E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+ F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+ F900;<CJK Compatibility Ideograph, First>;Lo;0;L;;;;;N;;;;;
+ FA2D;<CJK Compatibility Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+ FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+ FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+ FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+ FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+ FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+ FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+ FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+ FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+ FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+ FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+ FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+ FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+ FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;R;;;;;N;HEBREW POINT VARIKA;;;;
+ FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+ FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+ FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+ FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+ FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+ FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+ FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+ FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+ FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+ FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+ FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;R;<font> 002B;;;;N;;;;;
+ FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+ FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+ FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;05E9 05BC 05C1;;;;N;;;;;
+ FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;05E9 05BC 05C2;;;;N;;;;;
+ FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+ FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+ FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+ FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+ FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+ FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+ FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+ FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+ FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+ FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+ FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+ FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+ FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+ FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+ FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+ FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+ FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+ FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+ FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+ FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+ FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+ FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+ FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+ FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+ FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+ FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+ FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+ FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+ FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+ FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;R;<isolated> 0671;;;;N;;;;;
+ FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;R;<final> 0671;;;;N;;;;;
+ FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;R;<isolated> 067B;;;;N;;;;;
+ FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;R;<final> 067B;;;;N;;;;;
+ FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;R;<initial> 067B;;;;N;;;;;
+ FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;R;<medial> 067B;;;;N;;;;;
+ FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;R;<isolated> 067E;;;;N;;;;;
+ FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;R;<final> 067E;;;;N;;;;;
+ FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;R;<initial> 067E;;;;N;;;;;
+ FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;R;<medial> 067E;;;;N;;;;;
+ FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;R;<isolated> 0680;;;;N;;;;;
+ FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;R;<final> 0680;;;;N;;;;;
+ FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;R;<initial> 0680;;;;N;;;;;
+ FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;R;<medial> 0680;;;;N;;;;;
+ FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;R;<isolated> 067A;;;;N;;;;;
+ FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;R;<final> 067A;;;;N;;;;;
+ FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;R;<initial> 067A;;;;N;;;;;
+ FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;R;<medial> 067A;;;;N;;;;;
+ FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;R;<isolated> 067F;;;;N;;;;;
+ FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;R;<final> 067F;;;;N;;;;;
+ FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;R;<initial> 067F;;;;N;;;;;
+ FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;R;<medial> 067F;;;;N;;;;;
+ FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;R;<isolated> 0679;;;;N;;;;;
+ FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;R;<final> 0679;;;;N;;;;;
+ FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;R;<initial> 0679;;;;N;;;;;
+ FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;R;<medial> 0679;;;;N;;;;;
+ FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;R;<isolated> 06A4;;;;N;;;;;
+ FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;R;<final> 06A4;;;;N;;;;;
+ FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;R;<initial> 06A4;;;;N;;;;;
+ FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;R;<medial> 06A4;;;;N;;;;;
+ FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A6;;;;N;;;;;
+ FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;R;<final> 06A6;;;;N;;;;;
+ FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;R;<initial> 06A6;;;;N;;;;;
+ FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;R;<medial> 06A6;;;;N;;;;;
+ FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;R;<isolated> 0684;;;;N;;;;;
+ FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;R;<final> 0684;;;;N;;;;;
+ FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;R;<initial> 0684;;;;N;;;;;
+ FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;R;<medial> 0684;;;;N;;;;;
+ FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;R;<isolated> 0683;;;;N;;;;;
+ FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;R;<final> 0683;;;;N;;;;;
+ FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;R;<initial> 0683;;;;N;;;;;
+ FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;R;<medial> 0683;;;;N;;;;;
+ FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;R;<isolated> 0686;;;;N;;;;;
+ FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;R;<final> 0686;;;;N;;;;;
+ FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;R;<initial> 0686;;;;N;;;;;
+ FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;R;<medial> 0686;;;;N;;;;;
+ FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;R;<isolated> 0687;;;;N;;;;;
+ FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;R;<final> 0687;;;;N;;;;;
+ FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;R;<initial> 0687;;;;N;;;;;
+ FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;R;<medial> 0687;;;;N;;;;;
+ FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;R;<isolated> 068D;;;;N;;;;;
+ FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;R;<final> 068D;;;;N;;;;;
+ FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;R;<isolated> 068C;;;;N;;;;;
+ FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;R;<final> 068C;;;;N;;;;;
+ FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;R;<isolated> 068E;;;;N;;;;;
+ FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;R;<final> 068E;;;;N;;;;;
+ FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;R;<isolated> 0688;;;;N;;;;;
+ FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;R;<final> 0688;;;;N;;;;;
+ FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;R;<isolated> 0698;;;;N;;;;;
+ FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;R;<final> 0698;;;;N;;;;;
+ FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;R;<isolated> 0691;;;;N;;;;;
+ FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;R;<final> 0691;;;;N;;;;;
+ FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A9;;;;N;;;;;
+ FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;R;<final> 06A9;;;;N;;;;;
+ FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;R;<initial> 06A9;;;;N;;;;;
+ FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;R;<medial> 06A9;;;;N;;;;;
+ FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;R;<isolated> 06AF;;;;N;;;;;
+ FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;R;<final> 06AF;;;;N;;;;;
+ FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;R;<initial> 06AF;;;;N;;;;;
+ FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;R;<medial> 06AF;;;;N;;;;;
+ FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;R;<isolated> 06B3;;;;N;;;;;
+ FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;R;<final> 06B3;;;;N;;;;;
+ FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;R;<initial> 06B3;;;;N;;;;;
+ FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;R;<medial> 06B3;;;;N;;;;;
+ FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;R;<isolated> 06B1;;;;N;;;;;
+ FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;R;<final> 06B1;;;;N;;;;;
+ FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;R;<initial> 06B1;;;;N;;;;;
+ FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;R;<medial> 06B1;;;;N;;;;;
+ FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;R;<isolated> 06BA;;;;N;;;;;
+ FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;R;<final> 06BA;;;;N;;;;;
+ FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;R;<isolated> 06BB;;;;N;;;;;
+ FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;R;<final> 06BB;;;;N;;;;;
+ FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;R;<initial> 06BB;;;;N;;;;;
+ FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;R;<medial> 06BB;;;;N;;;;;
+ FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06C0;;;;N;;;;;
+ FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;R;<final> 06C0;;;;N;;;;;
+ FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;R;<isolated> 06C1;;;;N;;;;;
+ FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;R;<final> 06C1;;;;N;;;;;
+ FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;R;<initial> 06C1;;;;N;;;;;
+ FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;R;<medial> 06C1;;;;N;;;;;
+ FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;R;<isolated> 06BE;;;;N;;;;;
+ FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;R;<final> 06BE;;;;N;;;;;
+ FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;R;<initial> 06BE;;;;N;;;;;
+ FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;R;<medial> 06BE;;;;N;;;;;
+ FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;R;<isolated> 06D2;;;;N;;;;;
+ FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;R;<final> 06D2;;;;N;;;;;
+ FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06D3;;;;N;;;;;
+ FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 06D3;;;;N;;;;;
+ FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;R;<isolated> 06AD;;;;N;;;;;
+ FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;R;<final> 06AD;;;;N;;;;;
+ FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;R;<initial> 06AD;;;;N;;;;;
+ FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;R;<medial> 06AD;;;;N;;;;;
+ FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;R;<isolated> 06C7;;;;N;;;;;
+ FBD8;ARABIC LETTER U FINAL FORM;Lo;0;R;<final> 06C7;;;;N;;;;;
+ FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;R;<isolated> 06C6;;;;N;;;;;
+ FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;R;<final> 06C6;;;;N;;;;;
+ FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;R;<isolated> 06C8;;;;N;;;;;
+ FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;R;<final> 06C8;;;;N;;;;;
+ FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0677;;;;N;;;;;
+ FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;R;<isolated> 06CB;;;;N;;;;;
+ FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;R;<final> 06CB;;;;N;;;;;
+ FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;R;<isolated> 06C5;;;;N;;;;;
+ FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;R;<final> 06C5;;;;N;;;;;
+ FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;R;<isolated> 06C9;;;;N;;;;;
+ FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;R;<final> 06C9;;;;N;;;;;
+ FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;R;<isolated> 06D0;;;;N;;;;;
+ FBE5;ARABIC LETTER E FINAL FORM;Lo;0;R;<final> 06D0;;;;N;;;;;
+ FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;R;<initial> 06D0;;;;N;;;;;
+ FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;R;<medial> 06D0;;;;N;;;;;
+ FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0649;;;;N;;;;;
+ FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;R;<medial> 0649;;;;N;;;;;
+ FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0626 0627;;;;N;;;;;
+ FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;R;<final> 0626 0627;;;;N;;;;;
+ FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;R;<isolated> 0626 06D5;;;;N;;;;;
+ FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;R;<final> 0626 06D5;;;;N;;;;;
+ FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;R;<isolated> 0626 0648;;;;N;;;;;
+ FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;R;<final> 0626 0648;;;;N;;;;;
+ FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;R;<isolated> 0626 06C7;;;;N;;;;;
+ FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;R;<final> 0626 06C7;;;;N;;;;;
+ FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;R;<isolated> 0626 06C6;;;;N;;;;;
+ FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;R;<final> 0626 06C6;;;;N;;;;;
+ FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;R;<isolated> 0626 06C8;;;;N;;;;;
+ FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;R;<final> 0626 06C8;;;;N;;;;;
+ FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;R;<isolated> 0626 06D0;;;;N;;;;;
+ FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;R;<final> 0626 06D0;;;;N;;;;;
+ FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;R;<initial> 0626 06D0;;;;N;;;;;
+ FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
+ FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
+ FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0626 0649;;;;N;;;;;
+ FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;R;<isolated> 06CC;;;;N;;;;;
+ FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;R;<final> 06CC;;;;N;;;;;
+ FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;R;<initial> 06CC;;;;N;;;;;
+ FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;R;<medial> 06CC;;;;N;;;;;
+ FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 062C;;;;N;;;;;
+ FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0626 062D;;;;N;;;;;
+ FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 0645;;;;N;;;;;
+ FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
+ FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0626 064A;;;;N;;;;;
+ FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 062C;;;;N;;;;;
+ FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062D;;;;N;;;;;
+ FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062E;;;;N;;;;;
+ FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 0645;;;;N;;;;;
+ FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0628 0649;;;;N;;;;;
+ FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0628 064A;;;;N;;;;;
+ FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 062C;;;;N;;;;;
+ FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062D;;;;N;;;;;
+ FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062E;;;;N;;;;;
+ FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 0645;;;;N;;;;;
+ FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062A 0649;;;;N;;;;;
+ FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062A 064A;;;;N;;;;;
+ FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 062C;;;;N;;;;;
+ FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 0645;;;;N;;;;;
+ FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062B 0649;;;;N;;;;;
+ FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062B 064A;;;;N;;;;;
+ FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062C 062D;;;;N;;;;;
+ FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062C 0645;;;;N;;;;;
+ FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 062C;;;;N;;;;;
+ FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 0645;;;;N;;;;;
+ FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 062C;;;;N;;;;;
+ FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062E 062D;;;;N;;;;;
+ FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 0645;;;;N;;;;;
+ FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 062C;;;;N;;;;;
+ FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062D;;;;N;;;;;
+ FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062E;;;;N;;;;;
+ FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 0645;;;;N;;;;;
+ FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0635 062D;;;;N;;;;;
+ FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0635 0645;;;;N;;;;;
+ FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 062C;;;;N;;;;;
+ FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062D;;;;N;;;;;
+ FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062E;;;;N;;;;;
+ FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 0645;;;;N;;;;;
+ FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0637 062D;;;;N;;;;;
+ FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0637 0645;;;;N;;;;;
+ FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0638 0645;;;;N;;;;;
+ FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 062C;;;;N;;;;;
+ FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 0645;;;;N;;;;;
+ FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 062C;;;;N;;;;;
+ FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 0645;;;;N;;;;;
+ FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 062C;;;;N;;;;;
+ FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062D;;;;N;;;;;
+ FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062E;;;;N;;;;;
+ FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 0645;;;;N;;;;;
+ FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0641 0649;;;;N;;;;;
+ FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0641 064A;;;;N;;;;;
+ FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0642 062D;;;;N;;;;;
+ FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0642 0645;;;;N;;;;;
+ FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0642 0649;;;;N;;;;;
+ FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0642 064A;;;;N;;;;;
+ FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0643 0627;;;;N;;;;;
+ FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 062C;;;;N;;;;;
+ FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062D;;;;N;;;;;
+ FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062E;;;;N;;;;;
+ FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;R;<isolated> 0643 0644;;;;N;;;;;
+ FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 0645;;;;N;;;;;
+ FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0643 0649;;;;N;;;;;
+ FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0643 064A;;;;N;;;;;
+ FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 062C;;;;N;;;;;
+ FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062D;;;;N;;;;;
+ FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062E;;;;N;;;;;
+ FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 0645;;;;N;;;;;
+ FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0644 0649;;;;N;;;;;
+ FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0644 064A;;;;N;;;;;
+ FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 062C;;;;N;;;;;
+ FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062D;;;;N;;;;;
+ FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062E;;;;N;;;;;
+ FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 0645;;;;N;;;;;
+ FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0645 0649;;;;N;;;;;
+ FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0645 064A;;;;N;;;;;
+ FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 062C;;;;N;;;;;
+ FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062D;;;;N;;;;;
+ FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062E;;;;N;;;;;
+ FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 0645;;;;N;;;;;
+ FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0646 0649;;;;N;;;;;
+ FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0646 064A;;;;N;;;;;
+ FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 062C;;;;N;;;;;
+ FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 0645;;;;N;;;;;
+ FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0647 0649;;;;N;;;;;
+ FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0647 064A;;;;N;;;;;
+ FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 062C;;;;N;;;;;
+ FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062D;;;;N;;;;;
+ FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062E;;;;N;;;;;
+ FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 0645;;;;N;;;;;
+ FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 064A 0649;;;;N;;;;;
+ FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 064A 064A;;;;N;;;;;
+ FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0630 0670;;;;N;;;;;
+ FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0631 0670;;;;N;;;;;
+ FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0649 0670;;;;N;;;;;
+ FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064C;;;;N;;;;;
+ FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064D;;;;N;;;;;
+ FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064E;;;;N;;;;;
+ FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064F;;;;N;;;;;
+ FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0650;;;;N;;;;;
+ FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0670;;;;N;;;;;
+ FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;R;<final> 0626 0631;;;;N;;;;;
+ FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;R;<final> 0626 0632;;;;N;;;;;
+ FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;R;<final> 0626 0645;;;;N;;;;;
+ FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;R;<final> 0626 0646;;;;N;;;;;
+ FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
+ FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;R;<final> 0626 064A;;;;N;;;;;
+ FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;R;<final> 0628 0631;;;;N;;;;;
+ FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 0628 0632;;;;N;;;;;
+ FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;R;<final> 0628 0645;;;;N;;;;;
+ FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;R;<final> 0628 0646;;;;N;;;;;
+ FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0628 0649;;;;N;;;;;
+ FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 064A;;;;N;;;;;
+ FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;R;<final> 062A 0631;;;;N;;;;;
+ FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062A 0632;;;;N;;;;;
+ FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062A 0645;;;;N;;;;;
+ FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;R;<final> 062A 0646;;;;N;;;;;
+ FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0649;;;;N;;;;;
+ FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 064A;;;;N;;;;;
+ FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;R;<final> 062B 0631;;;;N;;;;;
+ FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062B 0632;;;;N;;;;;
+ FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062B 0645;;;;N;;;;;
+ FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;R;<final> 062B 0646;;;;N;;;;;
+ FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062B 0649;;;;N;;;;;
+ FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;R;<final> 062B 064A;;;;N;;;;;
+ FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0641 0649;;;;N;;;;;
+ FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;R;<final> 0641 064A;;;;N;;;;;
+ FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0642 0649;;;;N;;;;;
+ FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;R;<final> 0642 064A;;;;N;;;;;
+ FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;R;<final> 0643 0627;;;;N;;;;;
+ FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;R;<final> 0643 0644;;;;N;;;;;
+ FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645;;;;N;;;;;
+ FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0643 0649;;;;N;;;;;
+ FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;R;<final> 0643 064A;;;;N;;;;;
+ FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 0645;;;;N;;;;;
+ FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 0649;;;;N;;;;;
+ FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 064A;;;;N;;;;;
+ FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;R;<final> 0645 0627;;;;N;;;;;
+ FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0645 0645;;;;N;;;;;
+ FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;R;<final> 0646 0631;;;;N;;;;;
+ FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;R;<final> 0646 0632;;;;N;;;;;
+ FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 0645;;;;N;;;;;
+ FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;R;<final> 0646 0646;;;;N;;;;;
+ FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0649;;;;N;;;;;
+ FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;R;<final> 0646 064A;;;;N;;;;;
+ FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;R;<final> 0649 0670;;;;N;;;;;
+ FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;R;<final> 064A 0631;;;;N;;;;;
+ FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 064A 0632;;;;N;;;;;
+ FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645;;;;N;;;;;
+ FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;R;<final> 064A 0646;;;;N;;;;;
+ FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 064A 0649;;;;N;;;;;
+ FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 064A;;;;N;;;;;
+ FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0626 062C;;;;N;;;;;
+ FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;R;<initial> 0626 062D;;;;N;;;;;
+ FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0626 062E;;;;N;;;;;
+ FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0626 0645;;;;N;;;;;
+ FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;R;<initial> 0626 0647;;;;N;;;;;
+ FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0628 062C;;;;N;;;;;
+ FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0628 062D;;;;N;;;;;
+ FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0628 062E;;;;N;;;;;
+ FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0628 0645;;;;N;;;;;
+ FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 0628 0647;;;;N;;;;;
+ FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C;;;;N;;;;;
+ FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 062D;;;;N;;;;;
+ FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 062E;;;;N;;;;;
+ FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645;;;;N;;;;;
+ FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 062A 0647;;;;N;;;;;
+ FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062B 0645;;;;N;;;;;
+ FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 062D;;;;N;;;;;
+ FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062C 0645;;;;N;;;;;
+ FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062D 062C;;;;N;;;;;
+ FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062D 0645;;;;N;;;;;
+ FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062E 062C;;;;N;;;;;
+ FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062E 0645;;;;N;;;;;
+ FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062C;;;;N;;;;;
+ FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062D;;;;N;;;;;
+ FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0633 062E;;;;N;;;;;
+ FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645;;;;N;;;;;
+ FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D;;;;N;;;;;
+ FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0635 062E;;;;N;;;;;
+ FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645;;;;N;;;;;
+ FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0636 062C;;;;N;;;;;
+ FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0636 062D;;;;N;;;;;
+ FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0636 062E;;;;N;;;;;
+ FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 0645;;;;N;;;;;
+ FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 062D;;;;N;;;;;
+ FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0638 0645;;;;N;;;;;
+ FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C;;;;N;;;;;
+ FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645;;;;N;;;;;
+ FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 063A 062C;;;;N;;;;;
+ FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 063A 0645;;;;N;;;;;
+ FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0641 062C;;;;N;;;;;
+ FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0641 062D;;;;N;;;;;
+ FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0641 062E;;;;N;;;;;
+ FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 0645;;;;N;;;;;
+ FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 062D;;;;N;;;;;
+ FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0642 0645;;;;N;;;;;
+ FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0643 062C;;;;N;;;;;
+ FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0643 062D;;;;N;;;;;
+ FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0643 062E;;;;N;;;;;
+ FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;R;<initial> 0643 0644;;;;N;;;;;
+ FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645;;;;N;;;;;
+ FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C;;;;N;;;;;
+ FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 062D;;;;N;;;;;
+ FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0644 062E;;;;N;;;;;
+ FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 0645;;;;N;;;;;
+ FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;R;<initial> 0644 0647;;;;N;;;;;
+ FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C;;;;N;;;;;
+ FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062D;;;;N;;;;;
+ FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062E;;;;N;;;;;
+ FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 0645;;;;N;;;;;
+ FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C;;;;N;;;;;
+ FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062D;;;;N;;;;;
+ FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0646 062E;;;;N;;;;;
+ FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 0645;;;;N;;;;;
+ FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;R;<initial> 0646 0647;;;;N;;;;;
+ FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 062C;;;;N;;;;;
+ FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645;;;;N;;;;;
+ FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;R;<initial> 0647 0670;;;;N;;;;;
+ FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 064A 062C;;;;N;;;;;
+ FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 064A 062D;;;;N;;;;;
+ FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 064A 062E;;;;N;;;;;
+ FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645;;;;N;;;;;
+ FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 064A 0647;;;;N;;;;;
+ FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0626 0645;;;;N;;;;;
+ FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0626 0647;;;;N;;;;;
+ FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0628 0645;;;;N;;;;;
+ FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0628 0647;;;;N;;;;;
+ FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062A 0645;;;;N;;;;;
+ FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062A 0647;;;;N;;;;;
+ FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062B 0645;;;;N;;;;;
+ FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062B 0647;;;;N;;;;;
+ FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0633 0645;;;;N;;;;;
+ FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0633 0647;;;;N;;;;;
+ FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0634 0645;;;;N;;;;;
+ FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0634 0647;;;;N;;;;;
+ FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;R;<medial> 0643 0644;;;;N;;;;;
+ FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0643 0645;;;;N;;;;;
+ FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0644 0645;;;;N;;;;;
+ FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0646 0645;;;;N;;;;;
+ FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0646 0647;;;;N;;;;;
+ FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 064A 0645;;;;N;;;;;
+ FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 064A 0647;;;;N;;;;;
+ FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064E;;;;N;;;;;
+ FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064F;;;;N;;;;;
+ FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 0650;;;;N;;;;;
+ FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0637 0649;;;;N;;;;;
+ FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0637 064A;;;;N;;;;;
+ FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0639 0649;;;;N;;;;;
+ FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0639 064A;;;;N;;;;;
+ FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 063A 0649;;;;N;;;;;
+ FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 063A 064A;;;;N;;;;;
+ FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0633 0649;;;;N;;;;;
+ FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0633 064A;;;;N;;;;;
+ FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0634 0649;;;;N;;;;;
+ FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0634 064A;;;;N;;;;;
+ FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062D 0649;;;;N;;;;;
+ FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062D 064A;;;;N;;;;;
+ FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062C 0649;;;;N;;;;;
+ FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062C 064A;;;;N;;;;;
+ FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062E 0649;;;;N;;;;;
+ FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062E 064A;;;;N;;;;;
+ FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0635 0649;;;;N;;;;;
+ FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0635 064A;;;;N;;;;;
+ FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0636 0649;;;;N;;;;;
+ FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0636 064A;;;;N;;;;;
+ FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 062C;;;;N;;;;;
+ FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062D;;;;N;;;;;
+ FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062E;;;;N;;;;;
+ FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 0645;;;;N;;;;;
+ FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0634 0631;;;;N;;;;;
+ FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0633 0631;;;;N;;;;;
+ FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0635 0631;;;;N;;;;;
+ FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0636 0631;;;;N;;;;;
+ FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0637 0649;;;;N;;;;;
+ FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;R;<final> 0637 064A;;;;N;;;;;
+ FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0649;;;;N;;;;;
+ FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;R;<final> 0639 064A;;;;N;;;;;
+ FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0649;;;;N;;;;;
+ FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;R;<final> 063A 064A;;;;N;;;;;
+ FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 0649;;;;N;;;;;
+ FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0633 064A;;;;N;;;;;
+ FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0634 0649;;;;N;;;;;
+ FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0634 064A;;;;N;;;;;
+ FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0649;;;;N;;;;;
+ FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062D 064A;;;;N;;;;;
+ FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0649;;;;N;;;;;
+ FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 064A;;;;N;;;;;
+ FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062E 0649;;;;N;;;;;
+ FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062E 064A;;;;N;;;;;
+ FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0635 0649;;;;N;;;;;
+ FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;R;<final> 0635 064A;;;;N;;;;;
+ FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 0649;;;;N;;;;;
+ FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;R;<final> 0636 064A;;;;N;;;;;
+ FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;R;<final> 0634 062C;;;;N;;;;;
+ FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;R;<final> 0634 062D;;;;N;;;;;
+ FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 062E;;;;N;;;;;
+ FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645;;;;N;;;;;
+ FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;R;<final> 0634 0631;;;;N;;;;;
+ FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;R;<final> 0633 0631;;;;N;;;;;
+ FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;R;<final> 0635 0631;;;;N;;;;;
+ FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;R;<final> 0636 0631;;;;N;;;;;
+ FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0634 062C;;;;N;;;;;
+ FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0634 062D;;;;N;;;;;
+ FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 062E;;;;N;;;;;
+ FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645;;;;N;;;;;
+ FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0633 0647;;;;N;;;;;
+ FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0634 0647;;;;N;;;;;
+ FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645;;;;N;;;;;
+ FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0633 062C;;;;N;;;;;
+ FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0633 062D;;;;N;;;;;
+ FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0633 062E;;;;N;;;;;
+ FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0634 062C;;;;N;;;;;
+ FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0634 062D;;;;N;;;;;
+ FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0634 062E;;;;N;;;;;
+ FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0637 0645;;;;N;;;;;
+ FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0638 0645;;;;N;;;;;
+ FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;R;<final> 0627 064B;;;;N;;;;;
+ FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0627 064B;;;;N;;;;;
+ FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+ FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+ FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C 0645;;;;N;;;;;
+ FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;R;<final> 062A 062D 062C;;;;N;;;;;
+ FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 062C;;;;N;;;;;
+ FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 0645;;;;N;;;;;
+ FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062E 0645;;;;N;;;;;
+ FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645 062C;;;;N;;;;;
+ FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062D;;;;N;;;;;
+ FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062E;;;;N;;;;;
+ FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 062C 0645 062D;;;;N;;;;;
+ FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 0645 062D;;;;N;;;;;
+ FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 0645 064A;;;;N;;;;;
+ FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0645 0649;;;;N;;;;;
+ FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062D 062C;;;;N;;;;;
+ FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062C 062D;;;;N;;;;;
+ FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062C 0649;;;;N;;;;;
+ FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0633 0645 062D;;;;N;;;;;
+ FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 0645 062D;;;;N;;;;;
+ FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 062C;;;;N;;;;;
+ FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0633 0645 0645;;;;N;;;;;
+ FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 0645;;;;N;;;;;
+ FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;R;<final> 0635 062D 062D;;;;N;;;;;
+ FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D 062D;;;;N;;;;;
+ FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0635 0645 0645;;;;N;;;;;
+ FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 062D 0645;;;;N;;;;;
+ FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 062D 0645;;;;N;;;;;
+ FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062C 064A;;;;N;;;;;
+ FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 0645 062E;;;;N;;;;;
+ FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 0645 062E;;;;N;;;;;
+ FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645 0645;;;;N;;;;;
+ FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645 0645;;;;N;;;;;
+ FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 062D 0649;;;;N;;;;;
+ FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0636 062E 0645;;;;N;;;;;
+ FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 062E 0645;;;;N;;;;;
+ FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0637 0645 062D;;;;N;;;;;
+ FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 0645 062D;;;;N;;;;;
+ FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645 0645;;;;N;;;;;
+ FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0637 0645 064A;;;;N;;;;;
+ FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 062C 0645;;;;N;;;;;
+ FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 0645 0645;;;;N;;;;;
+ FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645 0645;;;;N;;;;;
+ FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0645 0649;;;;N;;;;;
+ FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 063A 0645 0645;;;;N;;;;;
+ FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 063A 0645 064A;;;;N;;;;;
+ FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0645 0649;;;;N;;;;;
+ FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0641 062E 0645;;;;N;;;;;
+ FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 062E 0645;;;;N;;;;;
+ FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0642 0645 062D;;;;N;;;;;
+ FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0642 0645 0645;;;;N;;;;;
+ FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062D 0645;;;;N;;;;;
+ FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062D 064A;;;;N;;;;;
+ FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 062D 0649;;;;N;;;;;
+ FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 062C;;;;N;;;;;
+ FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;R;<final> 0644 062C 062C;;;;N;;;;;
+ FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062E 0645;;;;N;;;;;
+ FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062E 0645;;;;N;;;;;
+ FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0644 0645 062D;;;;N;;;;;
+ FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 0645 062D;;;;N;;;;;
+ FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 062C;;;;N;;;;;
+ FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 0645;;;;N;;;;;
+ FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062D 064A;;;;N;;;;;
+ FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062D;;;;N;;;;;
+ FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C 0645;;;;N;;;;;
+ FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 062C;;;;N;;;;;
+ FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 0645;;;;N;;;;;
+ FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062E;;;;N;;;;;
+ FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 062C;;;;N;;;;;
+ FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 0645;;;;N;;;;;
+ FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062D 0645;;;;N;;;;;
+ FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062D 0649;;;;N;;;;;
+ FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 062C 0645;;;;N;;;;;
+ FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C 0645;;;;N;;;;;
+ FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062C 0649;;;;N;;;;;
+ FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 0645 064A;;;;N;;;;;
+ FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0645 0649;;;;N;;;;;
+ FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645 0645;;;;N;;;;;
+ FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645 0645;;;;N;;;;;
+ FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062E 064A;;;;N;;;;;
+ FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062C 064A;;;;N;;;;;
+ FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062C 0649;;;;N;;;;;
+ FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062E 064A;;;;N;;;;;
+ FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062E 0649;;;;N;;;;;
+ FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 0645 064A;;;;N;;;;;
+ FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0645 0649;;;;N;;;;;
+ FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 0645 064A;;;;N;;;;;
+ FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 062D 0649;;;;N;;;;;
+ FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0645 0649;;;;N;;;;;
+ FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062E 0649;;;;N;;;;;
+ FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0635 062D 064A;;;;N;;;;;
+ FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062D 064A;;;;N;;;;;
+ FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0636 062D 064A;;;;N;;;;;
+ FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062C 064A;;;;N;;;;;
+ FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 0645 064A;;;;N;;;;;
+ FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062D 064A;;;;N;;;;;
+ FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062C 064A;;;;N;;;;;
+ FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 0645 064A;;;;N;;;;;
+ FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 0645 064A;;;;N;;;;;
+ FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0642 0645 064A;;;;N;;;;;
+ FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062D 064A;;;;N;;;;;
+ FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 0645 062D;;;;N;;;;;
+ FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062D 0645;;;;N;;;;;
+ FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0639 0645 064A;;;;N;;;;;
+ FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0643 0645 064A;;;;N;;;;;
+ FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062C 062D;;;;N;;;;;
+ FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062E 064A;;;;N;;;;;
+ FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 0645;;;;N;;;;;
+ FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645 0645;;;;N;;;;;
+ FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062C 0645;;;;N;;;;;
+ FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0646 062C 062D;;;;N;;;;;
+ FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062C 062D 064A;;;;N;;;;;
+ FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 062C 064A;;;;N;;;;;
+ FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062C 064A;;;;N;;;;;
+ FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0641 0645 064A;;;;N;;;;;
+ FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062D 064A;;;;N;;;;;
+ FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645 0645;;;;N;;;;;
+ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C 0645;;;;N;;;;;
+ FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645 0645;;;;N;;;;;
+ FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0633 062E 064A;;;;N;;;;;
+ FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062C 064A;;;;N;;;;;
+ FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 06D2;;;;N;;;;;
+ FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0642 0644 06D2;;;;N;;;;;
+ FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;R;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+ FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;R;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+ FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;R;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+ FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+ FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;R;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+ FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;R;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+ FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;R;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+ FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0649;;;;N;;;;;
+ FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;R;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+ FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;R;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+ FE20;COMBINING LIGATURE LEFT HALF;Mn;230;ON;;;;;N;;;;;
+ FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
+ FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;ON;;;;;N;;;;;
+ FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
+ FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+ FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+ FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+ FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+ FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+ FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+ FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+ FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+ FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+ FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+ FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+ FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+ FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+ FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+ FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+ FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+ FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+ FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+ FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+ FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+ FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+ FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+ FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+ FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+ FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+ FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+ FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+ FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+ FE50;SMALL COMMA;Po;0;ON;<small> 002C;;;;N;;;;;
+ FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+ FE52;SMALL FULL STOP;Po;0;ON;<small> 002E;;;;N;SMALL PERIOD;;;;
+ FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+ FE55;SMALL COLON;Po;0;ON;<small> 003A;;;;N;;;;;
+ FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+ FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+ FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+ FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+ FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+ FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+ FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+ FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+ FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+ FE5F;SMALL NUMBER SIGN;Po;0;ON;<small> 0023;;;;N;;;;;
+ FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+ FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+ FE62;SMALL PLUS SIGN;Sm;0;ON;<small> 002B;;;;N;;;;;
+ FE63;SMALL HYPHEN-MINUS;Pd;0;ON;<small> 002D;;;;N;;;;;
+ FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+ FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+ FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+ FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+ FE69;SMALL DOLLAR SIGN;Sc;0;ON;<small> 0024;;;;N;;;;;
+ FE6A;SMALL PERCENT SIGN;Po;0;ON;<small> 0025;;;;N;;;;;
+ FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+ FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+ FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;R;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+ FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+ FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+ FE76;ARABIC FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+ FE77;ARABIC FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+ FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+ FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+ FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+ FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+ FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+ FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;R;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+ FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;R;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+ FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;R;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+ FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;R;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+ FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+ FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+ FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+ FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+ FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+ FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+ FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+ FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+ FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+ FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+ FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;R;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+ FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;R;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+ FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;R;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+ FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;R;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+ FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;R;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+ FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;R;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+ FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;R;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+ FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;R;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+ FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;R;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+ FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;R;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+ FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;R;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+ FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;R;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+ FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;R;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+ FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;R;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+ FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;R;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+ FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;R;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+ FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;R;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+ FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;R;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+ FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;R;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+ FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;R;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+ FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;R;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+ FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;R;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+ FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;R;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+ FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;R;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+ FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;R;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+ FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;R;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+ FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;R;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+ FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;R;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+ FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;R;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+ FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;R;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+ FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;R;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+ FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;R;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+ FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;R;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+ FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;R;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+ FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;R;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+ FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;R;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+ FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;R;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+ FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;R;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+ FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;R;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+ FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;R;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+ FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;R;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+ FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;R;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+ FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;R;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+ FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;R;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+ FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;R;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+ FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;R;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+ FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;R;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+ FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;R;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+ FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;R;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+ FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;R;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+ FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;R;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+ FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;R;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+ FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;R;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+ FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;R;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+ FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;R;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+ FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;R;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+ FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;R;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+ FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;R;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+ FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;R;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+ FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;R;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+ FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;R;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+ FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;R;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+ FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;R;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+ FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;R;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+ FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;R;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+ FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;R;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+ FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;R;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+ FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;R;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+ FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;R;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+ FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;R;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+ FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;R;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+ FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;R;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+ FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;R;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+ FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;R;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+ FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;R;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+ FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;R;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+ FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;R;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+ FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;R;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+ FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;R;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+ FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;R;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+ FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;R;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+ FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;R;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+ FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;R;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+ FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;R;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+ FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;R;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+ FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;R;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+ FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+ FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;R;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+ FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;R;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+ FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;R;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+ FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;R;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+ FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;R;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+ FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;R;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+ FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;R;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+ FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;R;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+ FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;R;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+ FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;R;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+ FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;R;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+ FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;R;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+ FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;R;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+ FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+ FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+ FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;R;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+ FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;R;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+ FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;R;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+ FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;R;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+ FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+ FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+ FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+ FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+ FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+ FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+ FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+ FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;R;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+ FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;ON;;;;;N;BYTE ORDER MARK;;;;
+ FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+ FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+ FF03;FULLWIDTH NUMBER SIGN;Po;0;ON;<wide> 0023;;;;N;;;;;
+ FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ON;<wide> 0024;;;;N;;;;;
+ FF05;FULLWIDTH PERCENT SIGN;Po;0;ON;<wide> 0025;;;;N;;;;;
+ FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+ FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+ FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
+ FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
+ FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+ FF0B;FULLWIDTH PLUS SIGN;Sm;0;ON;<wide> 002B;;;;N;;;;;
+ FF0C;FULLWIDTH COMMA;Po;0;ON;<wide> 002C;;;;N;;;;;
+ FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ON;<wide> 002D;;;;N;;;;;
+ FF0E;FULLWIDTH FULL STOP;Po;0;ON;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+ FF0F;FULLWIDTH SOLIDUS;Po;0;ON;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+ FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+ FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+ FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+ FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+ FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+ FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+ FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+ FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+ FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+ FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+ FF1A;FULLWIDTH COLON;Po;0;ON;<wide> 003A;;;;N;;;;;
+ FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+ FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
+ FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+ FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
+ FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+ FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+ FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+ FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+ FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+ FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+ FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+ FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+ FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+ FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+ FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+ FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+ FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+ FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+ FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+ FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+ FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+ FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+ FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+ FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+ FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+ FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+ FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+ FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+ FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+ FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+ FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+ FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+ FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
+ FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+ FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+ FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+ FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+ FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+ FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+ FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+ FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+ FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+ FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+ FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+ FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+ FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+ FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+ FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+ FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+ FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+ FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+ FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+ FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+ FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+ FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+ FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+ FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+ FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+ FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+ FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+ FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+ FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+ FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+ FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+ FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
+ FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+ FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
+ FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+ FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+ FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
+ FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
+ FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+ FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;L;<narrow> 30FB;;;;N;;;;;
+ FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+ FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+ FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+ FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+ FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+ FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+ FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+ FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+ FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+ FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+ FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+ FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+ FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+ FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+ FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+ FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+ FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+ FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+ FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+ FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+ FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+ FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+ FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+ FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+ FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+ FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+ FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+ FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+ FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+ FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+ FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+ FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+ FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+ FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+ FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+ FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+ FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+ FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+ FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+ FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+ FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+ FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+ FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+ FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+ FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+ FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+ FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+ FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+ FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+ FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+ FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+ FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+ FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+ FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+ FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+ FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+ FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 309B;;;;N;;;;;
+ FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309C;;;;N;;;;;
+ FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+ FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+ FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+ FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+ FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+ FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+ FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+ FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+ FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+ FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+ FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+ FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+ FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+ FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+ FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+ FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+ FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+ FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+ FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+ FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+ FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+ FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+ FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+ FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+ FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+ FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+ FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+ FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+ FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+ FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+ FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+ FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+ FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+ FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+ FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+ FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+ FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+ FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+ FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+ FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+ FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+ FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+ FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+ FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+ FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+ FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+ FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+ FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+ FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+ FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+ FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+ FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+ FFE0;FULLWIDTH CENT SIGN;Sc;0;ON;<wide> 00A2;;;;N;;;;;
+ FFE1;FULLWIDTH POUND SIGN;Sc;0;ON;<wide> 00A3;;;;N;;;;;
+ FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+ FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;;;;
+ FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+ FFE5;FULLWIDTH YEN SIGN;Sc;0;ON;<wide> 00A5;;;;N;;;;;
+ FFE6;FULLWIDTH WON SIGN;Sc;0;ON;<wide> 20A9;;;;N;;;;;
+ FFE8;HALFWIDTH FORMS LIGHT VERTICAL;Sm;0;ON;<narrow> 2502;;;;N;;;;;
+ FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+ FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+ FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+ FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+ FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+ FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+ FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/unicode/UnicodeData-3.0.0.html gcc-4.1.0/libjava/classpath/doc/unicode/UnicodeData-3.0.0.html
*** gcc-4.0.2/libjava/classpath/doc/unicode/UnicodeData-3.0.0.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/unicode/UnicodeData-3.0.0.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1988 ----
+ <html>
+ 
+ 
+ 
+ <head>
+ 
+ <meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 4.0">
+ 
+ <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
+ 
+ <link REL="stylesheet" HREF="http://www.unicode.org/unicode.css" TYPE="text/css">
+ 
+ <title>UnicodeData File Format</title>
+ 
+ </head>
+ 
+ 
+ 
+ <body>
+ 
+ 
+ 
+ <h1>UnicodeData File Format<br> 
+ Version 3.0.0</h1>
+ 
+ 
+ 
+ <table BORDER="1" CELLSPACING="2" CELLPADDING="0" HEIGHT="87" WIDTH="100%">
+ 
+   <tr>
+ 
+     <td VALIGN="TOP" width="144">Revision</td>
+ 
+     <td VALIGN="TOP">3.0.0</td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td VALIGN="TOP" width="144">Authors</td>
+ 
+     <td VALIGN="TOP">Mark Davis and Ken Whistler</td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td VALIGN="TOP" width="144">Date</td>
+ 
+     <td VALIGN="TOP">1999-09-12</td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td VALIGN="TOP" width="144">This Version</td>
+ 
+     <td VALIGN="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html</a></td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td VALIGN="TOP" width="144">Previous Version</td>
+ 
+     <td VALIGN="TOP">n/a</td>
+ 
+   </tr>
+ 
+   <tr>
+ 
+     <td VALIGN="TOP" width="144">Latest Version</td>
+ 
+     <td VALIGN="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html</a></td>
+ 
+   </tr>
+ 
+ </table>
+ 
+ 
+ 
+ <p align="center">Copyright Â© 1995-1999 Unicode, Inc. All Rights reserved.<br>    
+     
+ <i>For more information, including Disclamer and Limitations, see <a HREF="UnicodeCharacterDatabase-3.0.0.html">UnicodeCharacterDatabase-3.0.0.html</a> </i></p>   
+    
+    
+    
+ <p>This document describes the format of the UnicodeData.txt file, which is one of the    
+    
+ files in the Unicode Character Database. The document is divided into the following    
+    
+ sections:    
+    
+    
+    
+ <ul>   
+    
+   <li><a HREF="#Field Formats">Field Formats</a> <ul>   
+    
+       <li><a HREF="#General Category">General Category</a> </li>   
+    
+       <li><a HREF="#Bidirectional Category">Bidirectional Category</a> </li>   
+    
+       <li><a HREF="#Character Decomposition">Character Decomposition Mapping</a> </li>  
+   
+       <li><a HREF="#Canonical Combining Classes">Canonical Combining Classes</a> </li>  
+   
+       <li><a HREF="#Decompositions and Normalization">Decompositions and Normalization</a> </li>  
+   
+       <li><a HREF="#Case Mappings">Case Mappings</a> </li>  
+   
+     </ul>  
+   
+   </li>  
+   
+   <li><a HREF="#Property Invariants">Property Invariants</a> </li>  
+   
+   <li><a HREF="#Modification History">Modification History</a> </li>  
+   
+ </ul>  
+   
+   
+   
+ <p><b>Warning: </b>the information in this file does not completely describe the use and   
+   
+ interpretation of Unicode character properties and behavior. It must be used in   
+   
+ conjunction with the data in the other files in the Unicode Character Database, and relies   
+   
+ on the notation and definitions supplied in <i><a href="http://www.unicode.org/unicode/standard/versions/Unicode3.0.html"> The Unicode 
+ Standard</a></i>. All chapter references   
+   
+ are to Version 3.0 of the standard.</p>  
+   
+   
+   
+ <h2><a NAME="Field Formats"></a>Field Formats</h2>    
+     
+     
+     
+ <p>The file consists of lines containing fields terminated by semicolons. Each line     
+     
+ represents the data for one encoded character in the Unicode Standard. Every encoded     
+     
+ character has a data entry, with the exception of certain special ranges, as detailed     
+     
+ below.     
+     
+     
+     
+ <ul>    
+     
+   <li>There are six special ranges of characters that are represented only by their start and     
+     
+     end characters, since the properties in the file are uniform, except for code values     
+     
+     (which are all sequential and assigned). </li>    
+     
+   <li>The names of CJK ideograph characters and the names and decompositions of Hangul     
+     
+     syllable characters are algorithmically derivable. (See the Unicode Standard and <a    
+     
+     HREF="http://www.unicode.org/unicode/reports/tr15/">Unicode Technical Report #15</a> for     
+     
+     more information). </li>    
+     
+   <li>Surrogate code values and private use characters have no names. </li>    
+     
+   <li>The Private Use character outside of the BMP (U+F0000..U+FFFFD, U+100000..U+10FFFD) are     
+     
+     not listed. These correspond to surrogate pairs where the first surrogate is in the High     
+     
+     Surrogate Private Use section. </li>    
+     
+ </ul>    
+     
+     
+     
+ <p>The exact ranges represented by start and end characters are:     
+     
+     
+     
+ <ul>    
+     
+   <li>CJK Ideographs Extension A (U+3400 - U+4DB5) </li>    
+     
+   <li>CJK Ideographs (U+4E00 - U+9FA5) </li>    
+     
+   <li>Hangul Syllables (U+AC00 - U+D7A3) </li>    
+     
+   <li>Non-Private Use High Surrogates (U+D800 - U+DB7F) </li>    
+     
+   <li>Private Use High Surrogates (U+DB80 - U+DBFF) </li>    
+     
+   <li>Low Surrogates (U+DC00 - U+DFFF) </li>    
+     
+   <li>The Private Use Area (U+E000 - U+F8FF) </li>    
+     
+ </ul>    
+     
+     
+     
+ <p>The following table describes the format and meaning of each field in a data entry in     
+     
+ the UnicodeData file. Fields which contain normative information are so indicated.</p>    
+     
+     
+     
+ <table BORDER="1" CELLSPACING="2" CELLPADDING="2">    
+     
+   <tr>    
+     
+     <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Field</th>    
+     
+     <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Name</th>    
+     
+     <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Status</th>    
+     
+     <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Explanation</th>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <th VALIGN="top">0</th>    
+     
+     <td VALIGN="top">Code value</td>    
+     
+     <td VALIGN="top">normative</td>    
+     
+     <td VALIGN="top">Code value in 4-digit hexadecimal format.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <th VALIGN="top">1</th>    
+     
+     <td VALIGN="top">Character name</td>    
+     
+     <td VALIGN="top">normative</td>    
+     
+     <td VALIGN="top">These names match exactly the names published in Chapter 14 of the     
+     
+     Unicode Standard, Version 3.0.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <th VALIGN="top">2</th>    
+     
+     <td VALIGN="top"><a HREF="#General Category">General Category</a> </td>    
+     
+     <td VALIGN="top">normative / informative<br>    
+     
+     (see below)</td>    
+     
+     <td VALIGN="top">This is a useful breakdown into various &quot;character types&quot; which     
+     
+     can be used as a default categorization in implementations. See below for a brief     
+     
+     explanation.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <th VALIGN="top">3</th>    
+     
+     <td VALIGN="top"><a HREF="#Canonical Combining Classes">Canonical Combining Classes</a> </td>    
+     
+     <td VALIGN="top">normative</td>    
+     
+     <td VALIGN="top">The classes used for the Canonical Ordering Algorithm in the Unicode     
+     
+     Standard. These classes are also printed in Chapter 4 of the Unicode Standard.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <th VALIGN="top">4</th>    
+     
+     <td VALIGN="top"><a HREF="#Bidirectional Category">Bidirectional Category</a> </td>    
+     
+     <td VALIGN="top">normative</td>    
+     
+     <td VALIGN="top">See the list below for an explanation of the abbreviations used in this     
+     
+     field. These are the categories required by the Bidirectional Behavior Algorithm in the     
+     
+     Unicode Standard. These categories are summarized in Chapter 3 of the Unicode Standard.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <th VALIGN="top">5</th>    
+     
+     <td VALIGN="top"><a HREF="#Character Decomposition">Character Decomposition  
+       Mapping</a></td>   
+    
+     <td VALIGN="top">normative</td>   
+    
+     <td VALIGN="top">In the Unicode Standard, not all of the mappings are full (maximal)    
+    
+     decompositions. Recursive application of look-up for decompositions will, in all cases,    
+    
+     lead to a maximal decomposition. The decomposition mappings match exactly the    
+    
+     decomposition mappings published with the character names in the Unicode Standard.</td>   
+    
+   </tr>   
+    
+   <tr>   
+    
+     <th VALIGN="top">6</th>   
+    
+     <td VALIGN="top">Decimal digit value</td>   
+    
+     <td VALIGN="top">normative</td>   
+    
+     <td VALIGN="top">This is a numeric field. If the character has the decimal digit property,    
+    
+     as specified in Chapter 4 of the Unicode Standard, the value of that digit is represented    
+    
+     with an integer value in this field</td>   
+    
+   </tr>   
+    
+   <tr>   
+    
+     <th VALIGN="top">7</th>   
+    
+     <td VALIGN="top">Digit value</td>   
+    
+     <td VALIGN="top">normative</td>   
+    
+     <td VALIGN="top">This is a numeric field. If the character represents a digit, not    
+    
+     necessarily a decimal digit, the value is here. This covers digits which do not form    
+    
+     decimal radix forms, such as the compatibility superscript digits</td>   
+    
+   </tr>   
+    
+   <tr>   
+    
+     <th VALIGN="top">8</th>   
+    
+     <td VALIGN="top">Numeric value</td>   
+    
+     <td VALIGN="top">normative</td>   
+    
+     <td VALIGN="top">This is a numeric field. If the character has the numeric property, as    
+    
+     specified in Chapter 4 of the Unicode Standard, the value of that character is represented    
+    
+     with an integer or rational number in this field. This includes fractions as, e.g.,    
+    
+     &quot;1/5&quot; for U+2155 VULGAR FRACTION ONE FIFTH Also included are numerical values    
+    
+     for compatibility characters such as circled numbers.</td>   
+    
+   </tr>   
+    
+   <tr>   
+    
+     <th VALIGN="top">8</th>   
+    
+     <td VALIGN="top">Mirrored</td>   
+    
+     <td VALIGN="top">normative</td>   
+    
+     <td VALIGN="top">If the character has been identified as a &quot;mirrored&quot; character    
+    
+     in bidirectional text, this field has the value &quot;Y&quot;; otherwise &quot;N&quot;.    
+    
+     The list of mirrored characters is also printed in Chapter 4 of the Unicode Standard.</td>   
+    
+   </tr>   
+    
+   <tr>   
+    
+     <th VALIGN="top">10</th>   
+    
+     <td VALIGN="top">Unicode 1.0 Name</td>   
+    
+     <td VALIGN="top">informative</td>   
+    
+     <td VALIGN="top">This is the old name as published in Unicode 1.0. This name is only    
+    
+     provided when it is significantly different from the Unicode 3.0 name for the character.</td>   
+    
+   </tr>   
+    
+   <tr>   
+    
+     <th VALIGN="top">11</th>   
+    
+     <td VALIGN="top">10646 comment field</td>   
+    
+     <td VALIGN="top">informative</td>   
+    
+     <td VALIGN="top">This is the ISO 10646 comment field. It is in parantheses in the 10646    
+    
+     names list.</td>   
+    
+   </tr>   
+    
+   <tr>   
+    
+     <th VALIGN="top">12</th>   
+    
+     <td VALIGN="top"><a HREF="#Case Mappings">Uppercase Mapping</a></td>   
+    
+     <td VALIGN="top">informative</td>   
+    
+     <td VALIGN="top">Upper case equivalent mapping. If a character is part of an alphabet with    
+    
+     case distinctions, and has an upper case equivalent, then the upper case equivalent is in    
+    
+     this field. See the explanation below on case distinctions. These mappings are always    
+    
+     one-to-one, not one-to-many or many-to-one. This field is informative.</td>   
+    
+   </tr>   
+    
+   <tr>   
+    
+     <th VALIGN="top">13</th>   
+    
+     <td VALIGN="top"><a HREF="#Case Mappings">Lowercase Mapping</a></td>   
+    
+     <td VALIGN="top">informative</td>   
+    
+     <td VALIGN="top">Similar to Uppercase mapping</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <th VALIGN="top">14</th>    
+     
+     <td VALIGN="top"><a HREF="#Case Mappings">Titlecase Mapping</a></td>   
+    
+     <td VALIGN="top">informative</td>   
+    
+     <td VALIGN="top">Similar to Uppercase mapping</td>    
+     
+   </tr>    
+     
+ </table>    
+     
+     
+     
+ <h3><a NAME="General Category"></a>General Category</h3>    
+     
+     
+     
+ <p>The values in this field are abbreviations for the following. Some of the values are     
+     
+ normative, and some are informative. For more information, see the Unicode Standard.</p>    
+     
+     
+     
+ <p><b>Note:</b> the standard does not assign information to control characters (except for     
+     
+ certain cases in the Bidirectional Algorithm). Implementations will generally also assign     
+     
+ categories to certain control characters, notably CR and LF, according to platform     
+     
+ conventions.</p>    
+     
+     
+     
+ <h4>Normative Categories</h4>    
+     
+     
+     
+ <table BORDER="0" CELLSPACING="2" CELLPADDING="0">    
+     
+   <tr>    
+     
+     <th><p ALIGN="LEFT">Abbr.</th>    
+     
+     <th><p ALIGN="LEFT">Description</th>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Lu</td>    
+     
+     <td>Letter, Uppercase</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Ll</td>    
+     
+     <td>Letter, Lowercase</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Lt</td>    
+     
+     <td>Letter, Titlecase</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Mn</td>    
+     
+     <td>Mark, Non-Spacing</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Mc</td>    
+     
+     <td>Mark, Spacing Combining</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Me</td>    
+     
+     <td>Mark, Enclosing</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Nd</td>    
+     
+     <td>Number, Decimal Digit</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Nl</td>    
+     
+     <td>Number, Letter</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">No</td>    
+     
+     <td>Number, Other</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Zs</td>    
+     
+     <td>Separator, Space</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Zl</td>    
+     
+     <td>Separator, Line</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Zp</td>    
+     
+     <td>Separator, Paragraph</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Cc</td>    
+     
+     <td>Other, Control</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Cf</td>    
+     
+     <td>Other, Format</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Cs</td>    
+     
+     <td>Other, Surrogate</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Co</td>    
+     
+     <td>Other, Private Use</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Cn</td>    
+     
+     <td>Other, Not Assigned (no characters in the file have this property)</td>    
+     
+   </tr>    
+     
+ </table>    
+     
+     
+     
+ <h4>Informative Categories</h4>    
+     
+     
+     
+ <table BORDER="0" CELLSPACING="2" CELLPADDING="0">    
+     
+   <tr>    
+     
+     <th><p ALIGN="LEFT">Abbr.</th>    
+     
+     <th><p ALIGN="LEFT">Description</th>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Lm</td>    
+     
+     <td>Letter, Modifier</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Lo</td>    
+     
+     <td>Letter, Other</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Pc</td>    
+     
+     <td>Punctuation, Connector</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Pd</td>    
+     
+     <td>Punctuation, Dash</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Ps</td>    
+     
+     <td>Punctuation, Open</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Pe</td>    
+     
+     <td>Punctuation, Close</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Pi</td>    
+     
+     <td>Punctuation, Initial quote (may behave like Ps or Pe depending on usage)</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Pf</td>    
+     
+     <td>Punctuation, Final quote (may behave like Ps or Pe depending on usage)</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Po</td>    
+     
+     <td>Punctuation, Other</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Sm</td>    
+     
+     <td>Symbol, Math</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Sc</td>    
+     
+     <td>Symbol, Currency</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">Sk</td>    
+     
+     <td>Symbol, Modifier</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">So</td>    
+     
+     <td>Symbol, Other</td>    
+     
+   </tr>    
+     
+ </table>    
+     
+     
+     
+ <h3><a NAME="Bidirectional Category"></a>Bidirectional Category</h3>    
+     
+     
+     
+ <p>Please refer to Chapter 3 for an explanation of the algorithm for Bidirectional     
+     
+ Behavior and an explanation of the significance of these categories. An up-to-date version     
+     
+ can be found on <a HREF="http://www.unicode.org/unicode/reports/tr9/">Unicode Technical     
+     
+ Report #9: The Bidirectional Algorithm</a>. These values are normative.</p>    
+     
+     
+     
+ <table BORDER="0" CELLPADDING="2">    
+     
+   <tr>    
+     
+     <th VALIGN="TOP" ALIGN="LEFT"><p ALIGN="LEFT">Type</th>    
+     
+     <th VALIGN="TOP" ALIGN="LEFT"><p ALIGN="LEFT">Description</th>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>L</b></td>    
+     
+     <td VALIGN="TOP">Left-to-Right</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>LRE</b></td>    
+     
+     <td VALIGN="TOP">Left-to-Right Embedding</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>LRO</b></td>    
+     
+     <td VALIGN="TOP">Left-to-Right Override</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>R</b></td>    
+     
+     <td VALIGN="TOP">Right-to-Left</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>AL</b></td>    
+     
+     <td VALIGN="TOP">Right-to-Left Arabic</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>RLE</b></td>    
+     
+     <td VALIGN="TOP">Right-to-Left Embedding</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>RLO</b></td>    
+     
+     <td VALIGN="TOP">Right-to-Left Override</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>PDF</b></td>    
+     
+     <td VALIGN="TOP">Pop Directional Format</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>EN</b></td>    
+     
+     <td VALIGN="TOP">European Number</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>ES</b></td>    
+     
+     <td VALIGN="TOP">European Number Separator</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>ET</b></td>    
+     
+     <td VALIGN="TOP">European Number Terminator</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>AN</b></td>    
+     
+     <td VALIGN="TOP">Arabic Number</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>CS</b></td>    
+     
+     <td VALIGN="TOP">Common Number Separator</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>NSM</b></td>    
+     
+     <td VALIGN="TOP">Non-Spacing Mark</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>BN</b></td>    
+     
+     <td VALIGN="TOP">Boundary Neutral</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>B</b></td>    
+     
+     <td VALIGN="TOP">Paragraph Separator</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>S</b></td>    
+     
+     <td VALIGN="TOP">Segment Separator</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>WS</b></td>    
+     
+     <td VALIGN="TOP">Whitespace</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td VALIGN="TOP"><b>ON</b></td>    
+     
+     <td VALIGN="TOP">Other Neutrals</td>    
+     
+   </tr>    
+     
+ </table>    
+     
+     
+     
+ <h3><a NAME="Character Decomposition"></a>Character Decomposition Mapping</h3>   
+    
+    
+    
+ <p>The decomposition is a normative property of a character. The tags supplied with    
+    
+ certain decomposition mappings generally indicate formatting information. Where no such    
+    
+ tag is given, the mapping is designated as canonical. Conversely, the presence of a    
+    
+ formatting tag also indicates that the mapping is a compatibility mapping and not a    
+    
+ canonical mapping. In the absence of other formatting information in a compatibility    
+    
+ mapping, the tag is used to distinguish it from canonical mappings.</p>   
+    
+    
+    
+ <p>In some instances a canonical mapping or a compatibility mapping may consist of a    
+    
+ single character. For a canonical mapping, this indicates that the character is a    
+    
+ canonical equivalent of another single character. For a compatibility mapping, this    
+    
+ indicates that the character is a compatibility equivalent of another single character.    
+    
+ The compatibility formatting tags used are:</p>   
+    
+    
+    
+ <table BORDER="0" CELLSPACING="2" CELLPADDING="0">   
+    
+   <tr>   
+    
+     <th>Tag</th>   
+    
+     <th><p ALIGN="LEFT">Description</th>   
+    
+   </tr>   
+    
+   <tr>   
+    
+     <td ALIGN="CENTER">&lt;font&gt;&nbsp;&nbsp;</td>   
+    
+     <td>A font variant (e.g. a blackletter form).</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;noBreak&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A no-break version of a space or hyphen.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;initial&gt;&nbsp;&nbsp;</td>    
+     
+     <td>An initial presentation form (Arabic).</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;medial&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A medial presentation form (Arabic).</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;final&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A final presentation form (Arabic).</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;isolated&gt;&nbsp;&nbsp;</td>    
+     
+     <td>An isolated presentation form (Arabic).</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;circle&gt;&nbsp;&nbsp;</td>    
+     
+     <td>An encircled form.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;super&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A superscript form.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;sub&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A subscript form.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;vertical&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A vertical layout presentation form.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;wide&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A wide (or zenkaku) compatibility character.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;narrow&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A narrow (or hankaku) compatibility character.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;small&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A small variant form (CNS compatibility).</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;square&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A CJK squared font variant.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;fraction&gt;&nbsp;&nbsp;</td>    
+     
+     <td>A vulgar fraction form.</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="CENTER">&lt;compat&gt;&nbsp;&nbsp;</td>    
+     
+     <td>Otherwise unspecified compatibility character.</td>    
+     
+   </tr>    
+     
+ </table>    
+     
+     
+     
+ <p><b>Reminder: </b>There is a difference between decomposition and decomposition mapping.     
+     
+ The decomposition mappings are defined in the UnicodeData, while the decomposition (also     
+     
+ termed &quot;full decomposition&quot;) is defined in Chapter 3 to use those mappings  
+ <i>    
+    
+ recursively.</i>    
+    
+    
+    
+ <ul>   
+    
+   <li>The canonical decomposition is formed by recursively applying the canonical mappings,    
+    
+     then applying the canonical reordering algorithm. </li>   
+    
+   <li>The compatibility decomposition is formed by recursively applying the canonical <em>and</em>    
+    
+     compatibility mappings, then applying the canonical reordering algorithm. </li>   
+    
+ </ul>   
+    
+    
+    
+ <h3><a NAME="Canonical Combining Classes"></a>Canonical Combining Classes</h3>    
+     
+     
+     
+ <table BORDER="0" CELLSPACING="2" CELLPADDING="0">    
+     
+   <tr>    
+     
+     <th><p ALIGN="LEFT">Value</th>    
+     
+     <th><p ALIGN="LEFT">Description</th>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">0:</td>    
+     
+     <td>Spacing, split, enclosing, reordrant, and Tibetan subjoined</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">1:</td>    
+     
+     <td>Overlays and interior</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">7:</td>    
+     
+     <td>Nuktas</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">8:</td>    
+     
+     <td>Hiragana/Katakana voicing marks</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">9:</td>    
+     
+     <td>Viramas</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">10:</td>    
+     
+     <td>Start of fixed position classes</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">199:</td>    
+     
+     <td>End of fixed position classes</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">200:</td>    
+     
+     <td>Below left attached</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">202:</td>    
+     
+     <td>Below attached</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">204:</td>    
+     
+     <td>Below right attached</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">208:</td>    
+     
+     <td>Left attached (reordrant around single base character)</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">210:</td>    
+     
+     <td>Right attached</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">212:</td>    
+     
+     <td>Above left attached</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">214:</td>    
+     
+     <td>Above attached</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">216:</td>    
+     
+     <td>Above right attached</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">218:</td>    
+     
+     <td>Below left</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">220:</td>    
+     
+     <td>Below</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">222:</td>    
+     
+     <td>Below right</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">224:</td>    
+     
+     <td>Left (reordrant around single base character)</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">226:</td>    
+     
+     <td>Right</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">228:</td>    
+     
+     <td>Above left</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">230:</td>    
+     
+     <td>Above</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">232:</td>    
+     
+     <td>Above right</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">233:</td>    
+     
+     <td>Double below</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">234:</td>    
+     
+     <td>Double above</td>    
+     
+   </tr>    
+     
+   <tr>    
+     
+     <td ALIGN="RIGHT">240:</td>    
+     
+     <td>Below (iota subscript)</td>    
+     
+   </tr>    
+     
+ </table>    
+     
+     
+     
+ <p><strong>Note: </strong>some of the combining classes in this list do not currently have     
+     
+ members but are specified here for completeness.</p>    
+     
+     
+     
+ <h3><a NAME="Decompositions and Normalization"></a>Decompositions and Normalization</h3>    
+     
+     
+     
+ <p>Decomposition is specified in Chapter 3. <a href="http://www.unicode.org/unicode/reports/tr15/"><i>Unicode Technical Report #15:     
+     
+ Normalization Forms</i></a> specifies the interaction between decomposition and normalization. The     
+     
+ most up-to-date version is found on <a HREF="http://www.unicode.org/unicode/reports/tr15/">http://www.unicode.org/unicode/reports/tr15/</a>.     
+     
+ That report specifies how the decompositions defined in UnicodeData.txt are used to derive     
+     
+ normalized forms of Unicode text.</p>    
+     
+     
+     
+ <p>Note that as of the 2.1.9 update of the Unicode Character Database, the decompositions     
+     
+ in the UnicodeData.txt file can be used to recursively derive the full decomposition in     
+     
+ canonical order, without the need to separately apply canonical reordering. However,     
+     
+ canonical reordering of combining character sequences must still be applied in     
+     
+ decomposition when normalizing source text which contains any combining marks.</p>    
+     
+     
+     
+ <h3><a NAME="Case Mappings"></a>Case Mappings</h3>    
+     
+     
+     
+ <p>The case mapping is an informative, default mapping. Case itself, on the other hand,     
+     
+ has normative status. Thus, for example, 0041 LATIN CAPITAL LETTER A is normatively     
+     
+ uppercase, but its lowercase mapping the 0061 LATIN SMALL LETTER A is informative. The     
+     
+ reason for this is that case can be considered to be an inherent property of a particular     
+     
+ character (and is usually, but not always, derivable from the presence of the terms     
+     
+ &quot;CAPITAL&quot; or &quot;SMALL&quot; in the character name), but case mappings between     
+     
+ characters are occasionally influenced by local conventions. For example, certain     
+     
+ languages, such as Turkish, German, French, or Greek may have small deviations from the     
+     
+ default mappings listed in UnicodeData.</p>    
+     
+     
+     
+ <p>In addition to uppercase and lowercase, because of the inclusion of certain composite     
+     
+ characters for compatibility, such as 01F1 LATIN CAPITAL LETTER DZ, there is a third case,     
+     
+ called <i>titlecase</i>, which is used where the first letter of a word is to be     
+     
+ capitalized (e.g. UPPERCASE, Titlecase, lowercase). An example of such a titlecase letter     
+     
+ is 01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z.</p>    
+     
+     
+     
+ <p>The uppercase, titlecase and lowercase fields are only included for characters that     
+     
+ have a single corresponding character of that type. Composite characters (such as     
+     
+ &quot;339D SQUARE CM&quot;) that do not have a single corresponding character of that type     
+     
+ can be cased by decomposition.</p>    
+     
+     
+     
+ <p>For compatibility with existing parsers, UnicodeData only contains case mappings for     
+     
+ characters where they are one-to-one mappings; it also omits information about     
+     
+ context-sensitive case mappings. Information about these special cases can be found in a     
+     
+ separate data file, SpecialCasing.txt,     
+     
+ which has been added starting with the 2.1.8 update to the Unicode data files.     
+     
+ SpecialCasing.txt contains additional informative case mappings that are either not     
+     
+ one-to-one or which are context-sensitive.</p>    
+     
+     
+     
+ <h2><a NAME="Property Invariants"></a>Property Invariants</h2>    
+     
+     
+     
+ <p>Values in UnicodeData.txt are subject to correction as errors are found; however, some     
+     
+ characteristics of the categories themselves can be considered invariants. Applications     
+     
+ may wish to take these invariants into account when choosing how to implement character     
+     
+ properties. The following is a partial list of known invariants for the Unicode Character     
+     
+ Database.</p>    
+     
+     
+     
+ <h4>Database Fields</h4>    
+     
+     
+     
+ <ul>    
+     
+   <li>The number of fields in UnicodeData.txt is fixed. </li>    
+     
+   <li>The order of the fields is also fixed. <ul>    
+     
+       <li>Any additional information about character properties to be added in the future will     
+     
+         appear in separate data tables, rather than being added on to the existing table or by     
+     
+         subdivision or reinterpretation of existing fields. </li>    
+     
+     </ul>    
+     
+   </li>    
+     
+ </ul>    
+     
+     
+     
+ <h4>General Category</h4>    
+     
+     
+     
+ <ul>    
+     
+   <li>There will never be more than 32 General Category values. <ul>    
+     
+       <li>It is very unlikely that the Unicode Technical Committee will subdivide the General     
+     
+         Category partition any further, since that can cause implementations to misbehave. Because     
+     
+         the General Category is limited to 32 values, 5 bits can be used to represent the     
+     
+         information, and a 32-bit integer can be used as a bitmask to represent arbitrary sets of     
+     
+         categories. </li>    
+     
+     </ul>    
+     
+   </li>    
+     
+ </ul>    
+     
+     
+     
+ <h4>Combining Classes</h4>    
+     
+     
+     
+ <ul>    
+     
+   <li>Combining classes are limited to the values 0 to 255. <ul>    
+     
+       <li>In practice, there are far fewer than 256 values used. Implementations may take     
+     
+         advantage of this fact for compression, since only the ordering of the non-zero values     
+     
+         matters for the Canonical Reordering Algorithm. It is possible for up to 256 values to be     
+     
+         used in the future; however, UTC decisions in the future may restrict the number of values     
+     
+         to 128, since this has implementation advantages. [Signed bytes can be used without     
+     
+         widening to ints in Java, for example.] </li>    
+     
+     </ul>    
+     
+   </li>    
+     
+   <li>All characters other than those of General Category M* have the combining class 0. <ul>    
+     
+       <li>Currently, all characters other than those of General Category Mn have the value 0.     
+     
+         However, some characters of General Category Me or Mc may be given non-zero values in the     
+     
+         future. </li>    
+     
+       <li>The precise values above the value 0 are not invariant--only the relative ordering is     
+     
+         considered normative. For example, it is not guaranteed in future versions that the class     
+     
+         of U+05B4 will be precisely 14. </li>    
+     
+     </ul>    
+     
+   </li>    
+     
+ </ul>    
+     
+     
+     
+ <h4>Case</h4>    
+     
+     
+     
+ <ul>    
+     
+   <li>Characters of type Lu, Lt, or Ll are called <i>cased</i>. All characters with an Upper,     
+     
+     Lower, or Titlecase mapping are cased characters. <ul>    
+     
+       <li>However, characters with the General Categories of Lu, Ll, or Lt may not always have     
+     
+         case mappings, and case mappings may vary by locale. (See     
+     
+         ftp://ftp.unicode.org/Public/UNIDATA/SpecialCasing.txt). </li>    
+     
+     </ul>    
+     
+   </li>    
+     
+ </ul>    
+     
+     
+     
+ <h4>Canonical Decomposition</h4>    
+     
+     
+     
+ <ul>    
+     
+   <li>Canonical mappings are always in canonical order. </li>    
+     
+   <li>Canonical mappings have only the first of a pair possibly further decomposing. </li>    
+     
+   <li>Canonical decompositions are &quot;transparent&quot; to other character data: <ul>    
+     
+       <li><tt>BIDI(a) = BIDI(principal(canonicalDecomposition(a))</tt> </li>    
+     
+       <li><tt>Category(a) = Category(principal(canonicalDecomposition(a))</tt> </li>    
+     
+       <li><tt>CombiningClass(a) = CombiningClass(principal(canonicalDecomposition(a))</tt><br>    
+     
+         where principal(a) is the first character not of type Mn, or the first character if all     
+     
+         characters are of type Mn. </li>    
+     
+     </ul>    
+     
+   </li>    
+     
+   <li>However, because there are sometimes missing case pairs, and because of some legacy     
+     
+     characters, it is only generally true that: <ul>    
+     
+       <li><tt>upper(canonicalDecomposition(a)) = canonicalDecomposition(upper(a))</tt> </li>    
+     
+       <li><tt>lower(canonicalDecomposition(a)) = canonicalDecomposition(lower(a))</tt> </li>    
+     
+       <li><tt>title(canonicalDecomposition(a)) = canonicalDecomposition(title(a))</tt> </li>    
+     
+     </ul>    
+     
+   </li>    
+     
+ </ul>    
+     
+     
+     
+ <h2><a NAME="Modification History"></a>Modification History</h2>    
+     
+     
+     
+ <p>This section provides a summary of the changes between update versions of the Unicode     
+     
+ Standard.</p>    
+     
+     
+     
+ <h3><a href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 3.0.0"> Unicode 3.0.0</a></h3>    
+     
+     
+     
+ <p>Modifications made for Version 3.0.0 of UnicodeData.txt include many new characters and     
+     
+ a number of property changes. These are summarized in Appendex D of <em>The Unicode     
+     
+ Standard, Version 3.0.</em></p>    
+     
+     
+     
+ <h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.9">Unicode 2.1.9</a> </h3>    
+     
+     
+     
+ <p>Modifications made for Version 2.1.9 of UnicodeData.txt include:     
+     
+     
+     
+ <ul>    
+     
+   <li>Corrected combining class for U+05AE HEBREW ACCENT ZINOR. </li>    
+     
+   <li>Corrected combining class for U+20E1 COMBINING LEFT RIGHT ARROW ABOVE </li>    
+     
+   <li>Corrected combining class for U+0F35 and U+0F37 to 220. </li>    
+     
+   <li>Corrected combining class for U+0F71 to 129. </li>    
+     
+   <li>Added a decomposition for U+0F0C TIBETAN MARK DELIMITER TSHEG BSTAR. </li>    
+     
+   <li>Added&nbsp; decompositions for several Greek symbol letters: U+03D0..U+03D2, U+03D5,     
+     
+     U+03D6, U+03F0..U+03F2. </li>    
+     
+   <li>Removed&nbsp; decompositions from the conjoining jamo block: U+1100..U+11F8. </li>    
+     
+   <li>Changes to decomposition mappings for some Tibetan vowels for consistency in     
+     
+     normalization. (U+0F71, U+0F73, U+0F77, U+0F79, U+0F81) </li>    
+     
+   <li>Updated the decomposition mappings for several Vietnamese characters with two diacritics     
+     
+     (U+1EAC, U+1EAD, U+1EB6, U+1EB7, U+1EC6, U+1EC7, U+1ED8, U+1ED9), so that the recursive     
+     
+     decomposition can be generated directly in canonically reordered form (not a normative     
+     
+     change). </li>    
+     
+   <li>Updated the decomposition mappings for several Arabic compatibility characters involving     
+     
+     shadda (U+FC5E..U+FC62, U+FCF2..U+FCF4), and two Latin characters (U+1E1C, U+1E1D), so     
+     
+     that the decompositions are generated directly in canonically reordered form (not a     
+     
+     normative change). </li>    
+     
+   <li>Changed BIDI category for: U+00A0 NO-BREAK SPACE, U+2007 FIGURE SPACE, U+2028 LINE     
+     
+     SEPARATOR. </li>    
+     
+   <li>Changed BIDI category for extenders of General Category Lm: U+3005, U+3021..U+3035,     
+     
+     U+FF9E, U+FF9F. </li>    
+     
+   <li>Changed General Category and BIDI category for the Greek numeral signs: U+0374, U+0375. </li>    
+     
+   <li>Corrected General Category for U+FFE8 HALFWIDTH FORMS LIGHT VERTICAL. </li>    
+     
+   <li>Added Unicode 1.0 names for many Tibetan characters (informative). </li>    
+     
+ </ul>    
+     
+     
+     
+ <h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.8">Unicode 2.1.8</a> </h3>    
+     
+     
+     
+ <p>Modifications made for Version 2.1.8 of UnicodeData.txt include:     
+     
+     
+     
+ <ul>    
+     
+   <li>Added combining class 240 for U+0345 COMBINING GREEK YPOGEGRAMMENI so that     
+     
+     decompositions involving iota subscript are derivable directly in canonically reordered     
+     
+     form; this also has a bearing on simplification of casing of polytonic Greek. </li>    
+     
+   <li>Changes in decompositions related to Greek tonos. These result from the clarification     
+     
+     that monotonic Greek &quot;tonos&quot; should be equated with U+0301 COMBINING ACUTE,     
+     
+     rather than with U+030D COMBINING VERTICAL LINE ABOVE. (All Greek characters in the Greek     
+     
+     block involving &quot;tonos&quot;; some Greek characters in the polytonic Greek in the     
+     
+     1FXX block.) </li>    
+     
+   <li>Changed decompositions involving dialytika tonos. (U+0390, U+03B0) </li>    
+     
+   <li>Changed ternary decompositions to binary. (U+0CCB, U+FB2C, U+FB2D) These changes     
+     
+     simplify normalization. </li>    
+     
+   <li>Removed canonical decomposition for Latin Candrabindu. (U+0310) </li>    
+     
+   <li>Corrected error in canonical decomposition for U+1FF4. </li>    
+     
+   <li>Added compatibility decompositions to clarify collation tables. (U+2100, U+2101, U+2105,     
+     
+     U+2106, U+1E9A) </li>    
+     
+   <li>A series of general category changes to assist the convergence of of Unicode definition     
+     
+     of identifier with ISO TR 10176: <ul>    
+     
+       <li>So &gt; Lo: U+0950, U+0AD0, U+0F00, U+0F88..U+0F8B </li>    
+     
+       <li>Po &gt; Lo: U+0E2F, U+0EAF, U+3006 </li>    
+     
+       <li>Lm &gt; Sk: U+309B, U+309C </li>    
+     
+       <li>Po &gt; Pc: U+30FB, U+FF65 </li>    
+     
+       <li>Ps/Pe &gt; Mn: U+0F3E, U+0F3F </li>    
+     
+     </ul>    
+     
+   </li>    
+     
+   <li>A series of bidi property changes for consistency. <ul>    
+     
+       <li>L &gt; ET: U+09F2, U+09F3 </li>    
+     
+       <li>ON &gt; L: U+3007 </li>    
+     
+       <li>L &gt; ON: U+0F3A..U+0F3D, U+037E, U+0387 </li>    
+     
+     </ul>    
+     
+   </li>    
+     
+   <li>Add case mapping: U+01A6 &lt;-&gt; U+0280 </li>    
+     
+   <li>Updated symmetric swapping value for guillemets: U+00AB, U+00BB, U+2039, U+203A. </li>    
+     
+   <li>Changes to combining class values. Most Indic fixed position class non-spacing marks     
+     
+     were changed to combining class 0. This fixes some inconsistencies in how canonical     
+     
+     reordering would apply to Indic scripts, including Tibetan. Indic interacting top/bottom     
+     
+     fixed position classes were merged into single (non-zero) classes as part of this change.     
+     
+     Tibetan subjoined consonants are changed from combining class 6 to combining class 0. Thai     
+     
+     pinthu (U+0E3A) moved to combining class 9. Moved two Devanagari stress marks into generic     
+     
+     above and below combining classes (U+0951, U+0952). </li>    
+     
+   <li>Corrected placement of semicolon near symmetric swapping field. (U+FA0E, etc., scattered     
+     
+     positions to U+FA29) </li>    
+     
+ </ul>    
+     
+     
+     
+ <h3>Version 2.1.7</h3>    
+     
+     
+     
+ <p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+     
+     
+     
+ <h3>Version 2.1.6</h3>    
+     
+     
+     
+ <p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+     
+     
+     
+ <h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.5">Unicode 2.1.5</a> </h3>    
+     
+     
+     
+ <p>Modifications made for Version 2.1.5 of UnicodeData.txt include:     
+     
+     
+     
+ <ul>    
+     
+   <li>Changed decomposition for U+FF9E and U+FF9F so that correct collation weighting will     
+     
+     automatically result from the canonical equivalences. </li>    
+     
+   <li>Removed canonical decompositions for U+04D4, U+04D5, U+04D8, U+04D9, U+04E0, U+04E1,     
+     
+     U+04E8, U+04E9 (the implication being that no canonical equivalence is claimed between     
+     
+     these 8 characters and similar Latin letters), and updated 4 canonical decompositions for     
+     
+     U+04DB, U+04DC, U+04EA, U+04EB to reflect the implied difference in the base character. </li>    
+     
+   <li>Added Pi, and Pf categories and assigned the relevant quotation marks to those     
+     
+     categories, based on the Unicode Technical Corrigendum on Quotation Characters. </li>    
+     
+   <li>Updating of many bidi properties, following the advice of the ad hoc committee on bidi,     
+     
+     and to make the bidi properties of compatibility characters more consistent. </li>    
+     
+   <li>Changed category of several Tibetan characters: U+0F3E, U+0F3F, U+0F88..U+0F8B to make     
+     
+     them non-combining, reflecting the combined opinion of Tibetan experts. </li>    
+     
+   <li>Added case mapping for U+03F2. </li>    
+     
+   <li>Corrected case mapping for U+0275. </li>    
+     
+   <li>Added titlecase mappings for U+03D0, U+03D1, U+03D5, U+03D6, U+03F0.. U+03F2. </li>    
+     
+   <li>Corrected compatibility label for U+2121. </li>    
+     
+   <li>Add specific entries for all the CJK compatibility ideographs, U+F900..U+FA2D, so the     
+     
+     canonical decomposition for each (the URO character it is equivalent to) can be carried in     
+     
+     the database. </li>    
+     
+ </ul>    
+     
+     
+     
+ <h3>Version 2.1.4</h3>    
+     
+     
+     
+ <p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+     
+     
+     
+ <h3>Version 2.1.3</h3>    
+     
+     
+     
+ <p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+     
+     
+     
+ <h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.2">Unicode 2.1.2</a> </h3>    
+     
+     
+     
+ <p>Modifications made in updating UnicodeData.txt to Version 2.1.2 for the Unicode     
+     
+ Standard, Version 2.1 (from Version 2.0) include:     
+     
+     
+     
+ <ul>    
+     
+   <li>Added two characters (U+20AC and U+FFFC). </li>    
+     
+   <li>Amended bidi properties for U+0026, U+002E, U+0040, U+2007. </li>    
+     
+   <li>Corrected case mappings for U+018E, U+019F, U+01DD, U+0258, U+0275, U+03C2, U+1E9B. </li>    
+     
+   <li>Changed combining order class for U+0F71. </li>    
+     
+   <li>Corrected canonical decompositions for U+0F73, U+1FBE. </li>    
+     
+   <li>Changed decomposition for U+FB1F from compatibility to canonical. </li>    
+     
+   <li>Added compatibility decompositions for U+FBE8, U+FBE9, U+FBF9..U+FBFB. </li>    
+     
+   <li>Corrected compatibility decompositions for U+2469, U+246A, U+3358. </li>    
+     
+ </ul>    
+     
+     
+     
+ <h3>Version 2.1.1</h3>    
+     
+     
+     
+ <p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+     
+     
+     
+ <h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.0.0">Unicode 2.0.0</a> </h3>    
+     
+     
+     
+ <p>The modifications made in updating UnicodeData.txt for the Unicode     
+     
+ Standard, Version 2.0 include:     
+     
+     
+     
+ <ul>    
+     
+   <li>Fixed decompositions with TONOS to use correct NSM: 030D. </li>    
+     
+   <li>Removed old Hangul Syllables; mapping to new characters are in a separate table. </li>    
+     
+   <li>Marked compatibility decompositions with additional tags. </li>    
+     
+   <li>Changed old tag names for clarity. </li>    
+     
+   <li>Revision of decompositions to use first-level decomposition, instead of maximal     
+     
+     decomposition. </li>    
+     
+   <li>Correction of all known errors in decompositions from earlier versions. </li>    
+     
+   <li>Added control code names (as old Unicode names). </li>    
+     
+   <li>Added Hangul Jamo decompositions. </li>    
+     
+   <li>Added Number category to match properties list in book. </li>    
+     
+   <li>Fixed categories of Koranic Arabic marks. </li>    
+     
+   <li>Fixed categories of precomposed characters to match decomposition where possible. </li>    
+     
+   <li>Added Hebrew cantillation marks and the Tibetan script. </li>    
+     
+   <li>Added place holders for ranges such as CJK Ideographic Area and the Private Use Area. </li>    
+     
+   <li>Added categories Me, Sk, Pc, Nl, Cs, Cf, and rectified a number of mistakes in the     
+     
+     database. </li>    
+     
+ </ul>    
+     
+ </body>    
+     
+ </html>    
+     
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/unicode/UnicodeData-3.0.0.txt gcc-4.1.0/libjava/classpath/doc/unicode/UnicodeData-3.0.0.txt
*** gcc-4.0.2/libjava/classpath/doc/unicode/UnicodeData-3.0.0.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/unicode/UnicodeData-3.0.0.txt	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,10617 ----
+ 0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+ 0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+ 0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+ 0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+ 0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+ 0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+ 0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+ 0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+ 0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+ 0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
+ 000A;<control>;Cc;0;B;;;;;N;LINE FEED;;;;
+ 000B;<control>;Cc;0;S;;;;;N;VERTICAL TABULATION;;;;
+ 000C;<control>;Cc;0;WS;;;;;N;FORM FEED;;;;
+ 000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN;;;;
+ 000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+ 000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+ 0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+ 0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+ 0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+ 0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+ 0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+ 0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+ 0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+ 0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+ 0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+ 0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+ 001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+ 001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+ 001C;<control>;Cc;0;B;;;;;N;FILE SEPARATOR;;;;
+ 001D;<control>;Cc;0;B;;;;;N;GROUP SEPARATOR;;;;
+ 001E;<control>;Cc;0;B;;;;;N;RECORD SEPARATOR;;;;
+ 001F;<control>;Cc;0;S;;;;;N;UNIT SEPARATOR;;;;
+ 0020;SPACE;Zs;0;WS;;;;;N;;;;;
+ 0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+ 0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+ 0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+ 0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+ 0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+ 0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+ 0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+ 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+ 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+ 002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+ 002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+ 002C;COMMA;Po;0;CS;;;;;N;;;;;
+ 002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
+ 002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+ 002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
+ 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+ 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+ 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+ 0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+ 0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+ 0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+ 0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+ 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+ 0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+ 0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+ 003A;COLON;Po;0;CS;;;;;N;;;;;
+ 003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+ 003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+ 003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+ 003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+ 003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+ 0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+ 0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+ 0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+ 0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+ 0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+ 0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+ 0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+ 0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+ 0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+ 0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+ 004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+ 004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+ 004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+ 004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+ 004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+ 004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+ 0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+ 0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+ 0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+ 0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+ 0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+ 0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+ 0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+ 0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+ 0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+ 0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+ 005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+ 005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+ 005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+ 005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+ 005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+ 005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+ 0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+ 0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+ 0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+ 0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+ 0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+ 0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+ 0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+ 0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+ 0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+ 0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+ 006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+ 006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+ 006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+ 006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+ 006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+ 006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+ 0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+ 0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+ 0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+ 0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+ 0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+ 0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+ 0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+ 0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+ 0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+ 0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+ 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+ 007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+ 007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+ 007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+ 007E;TILDE;Sm;0;ON;;;;;N;;;;;
+ 007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+ 0080;<control>;Cc;0;BN;;;;;N;;;;;
+ 0081;<control>;Cc;0;BN;;;;;N;;;;;
+ 0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+ 0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+ 0084;<control>;Cc;0;BN;;;;;N;INDEX;;;;
+ 0085;<control>;Cc;0;B;;;;;N;NEXT LINE;;;;
+ 0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+ 0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+ 0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+ 0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+ 008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+ 008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE DOWN;;;;
+ 008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE UP;;;;
+ 008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+ 008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+ 008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+ 0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+ 0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+ 0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+ 0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+ 0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+ 0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+ 0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+ 0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+ 0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+ 0099;<control>;Cc;0;BN;;;;;N;;;;;
+ 009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+ 009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+ 009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+ 009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+ 009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+ 009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+ 00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+ 00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+ 00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+ 00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+ 00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+ 00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+ 00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+ 00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+ 00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+ 00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+ 00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+ 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
+ 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+ 00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+ 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+ 00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+ 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+ 00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+ 00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+ 00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+ 00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+ 00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+ 00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+ 00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+ 00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+ 00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+ 00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+ 00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
+ 00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+ 00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+ 00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+ 00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+ 00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+ 00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+ 00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+ 00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+ 00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+ 00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+ 00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
+ 00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+ 00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+ 00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+ 00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+ 00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+ 00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+ 00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+ 00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+ 00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+ 00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+ 00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+ 00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+ 00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+ 00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+ 00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+ 00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+ 00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+ 00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+ 00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+ 00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+ 00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+ 00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+ 00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+ 00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+ 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+ 00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+ 00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+ 00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+ 00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+ 00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+ 00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+ 00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
+ 00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+ 00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+ 00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+ 00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+ 00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+ 00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+ 00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+ 00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+ 00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+ 00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+ 00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+ 00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+ 00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+ 00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+ 00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+ 00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+ 00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+ 00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+ 00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+ 00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+ 00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+ 00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+ 00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+ 00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+ 00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+ 0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+ 0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+ 0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+ 0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+ 0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+ 0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+ 0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+ 0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+ 0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+ 0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+ 010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+ 010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+ 010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+ 010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+ 010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+ 010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+ 0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+ 0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+ 0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+ 0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+ 0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+ 0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+ 0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+ 0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+ 0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+ 0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+ 011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+ 011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+ 011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+ 011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+ 011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+ 011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+ 0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+ 0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+ 0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+ 0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+ 0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+ 0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+ 0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+ 0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+ 0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+ 0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+ 012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+ 012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+ 012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+ 012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+ 012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+ 012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+ 0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+ 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+ 0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+ 0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+ 0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+ 0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+ 0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+ 0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+ 0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+ 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+ 013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+ 013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+ 013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+ 013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+ 013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+ 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+ 0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+ 0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+ 0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+ 0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+ 0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+ 0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+ 0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+ 0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+ 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+ 0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+ 014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+ 014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+ 014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+ 014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+ 014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+ 014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+ 0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+ 0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+ 0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+ 0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+ 0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+ 0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+ 0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+ 0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+ 0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+ 0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+ 015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+ 015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+ 015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+ 015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+ 015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
+ 015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
+ 0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+ 0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+ 0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
+ 0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
+ 0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+ 0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+ 0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+ 0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+ 0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+ 0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+ 016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+ 016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+ 016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+ 016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+ 016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+ 016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+ 0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+ 0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+ 0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+ 0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+ 0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+ 0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+ 0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+ 0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+ 0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+ 0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+ 017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+ 017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+ 017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+ 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+ 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+ 017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+ 0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+ 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+ 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+ 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+ 0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+ 0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+ 0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+ 0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+ 0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+ 0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
+ 018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+ 018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+ 018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+ 018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+ 018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+ 018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+ 0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+ 0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+ 0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+ 0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+ 0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+ 0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
+ 0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+ 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+ 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+ 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+ 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+ 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+ 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+ 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+ 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
+ 019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
+ 01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+ 01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+ 01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
+ 01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
+ 01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+ 01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+ 01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;
+ 01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+ 01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+ 01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+ 01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+ 01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+ 01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+ 01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+ 01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+ 01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+ 01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+ 01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+ 01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+ 01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+ 01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+ 01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+ 01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+ 01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+ 01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+ 01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+ 01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+ 01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+ 01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+ 01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+ 01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+ 01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+ 01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+ 01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+ 01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+ 01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+ 01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+ 01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
+ 01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+ 01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+ 01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
+ 01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+ 01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+ 01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
+ 01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+ 01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+ 01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+ 01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+ 01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+ 01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+ 01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+ 01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+ 01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+ 01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+ 01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+ 01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+ 01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+ 01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+ 01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+ 01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+ 01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+ 01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+ 01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+ 01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+ 01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+ 01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+ 01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
+ 01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
+ 01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+ 01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+ 01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+ 01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+ 01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+ 01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+ 01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+ 01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+ 01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+ 01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+ 01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+ 01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+ 01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+ 01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+ 01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
+ 01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+ 01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+ 01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+ 01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+ 01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+ 01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+ 01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+ 01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+ 01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+ 01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
+ 01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
+ 01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+ 01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+ 0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+ 0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+ 0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+ 0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+ 0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+ 0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+ 0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+ 0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+ 0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+ 0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+ 020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+ 020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+ 020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+ 020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+ 020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+ 020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+ 0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+ 0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+ 0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+ 0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+ 0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+ 0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+ 0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+ 0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+ 0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
+ 0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
+ 021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
+ 021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
+ 021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+ 021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+ 021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+ 021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+ 0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+ 0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+ 0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+ 0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+ 0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+ 0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+ 0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+ 0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+ 022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+ 022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+ 022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+ 022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+ 022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+ 022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+ 0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+ 0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+ 0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+ 0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+ 0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+ 0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+ 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+ 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+ 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+ 0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+ 0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+ 0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+ 0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+ 0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+ 025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+ 025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+ 025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+ 025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+ 025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+ 025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+ 0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+ 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+ 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+ 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+ 0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+ 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+ 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+ 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+ 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+ 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+ 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+ 026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+ 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+ 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+ 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+ 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+ 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+ 0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+ 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+ 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+ 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+ 0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+ 0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+ 0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+ 0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+ 0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+ 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+ 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+ 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+ 027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+ 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+ 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+ 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6
+ 0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+ 0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+ 0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+ 0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+ 0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+ 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+ 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+ 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+ 0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+ 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+ 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+ 028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+ 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+ 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+ 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+ 0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+ 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+ 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+ 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+ 0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+ 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+ 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+ 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+ 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+ 0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+ 029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+ 029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+ 029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+ 029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+ 029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+ 029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+ 02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+ 02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+ 02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+ 02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+ 02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+ 02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+ 02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+ 02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+ 02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+ 02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+ 02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+ 02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+ 02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+ 02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+ 02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+ 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+ 02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+ 02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+ 02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+ 02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+ 02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+ 02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+ 02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+ 02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;;
+ 02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;;
+ 02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+ 02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+ 02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+ 02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+ 02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+ 02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+ 02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+ 02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+ 02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+ 02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+ 02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+ 02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+ 02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+ 02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+ 02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+ 02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+ 02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+ 02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+ 02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;;
+ 02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+ 02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+ 02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+ 02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+ 02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+ 02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+ 02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+ 02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+ 02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+ 02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+ 02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+ 02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+ 02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+ 02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+ 02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+ 02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+ 02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+ 02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+ 02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+ 02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+ 02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+ 02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+ 02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+ 02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+ 02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+ 02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+ 02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+ 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+ 02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+ 02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+ 02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
+ 02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+ 02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+ 0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
+ 0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia;;;
+ 0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+ 0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+ 0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+ 0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+ 0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
+ 0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+ 0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+ 0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+ 030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+ 030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+ 030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+ 030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
+ 030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+ 030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+ 0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+ 0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+ 0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+ 0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+ 0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+ 0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+ 0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+ 0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+ 0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+ 0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+ 031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+ 031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+ 031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+ 031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+ 031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+ 031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+ 0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+ 0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+ 0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+ 0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+ 0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+ 0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+ 0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+ 0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+ 0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+ 0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+ 032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+ 032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+ 032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+ 032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+ 032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+ 032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+ 0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+ 0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+ 0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+ 0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+ 0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+ 0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+ 0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+ 0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+ 0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+ 0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+ 033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+ 033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+ 033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+ 033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+ 033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+ 033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+ 0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+ 0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+ 0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+ 0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+ 0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+ 0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+ 0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+ 034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+ 034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+ 0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+ 0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+ 0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+ 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
+ 037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+ 037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
+ 0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+ 0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+ 0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+ 0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+ 0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+ 0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+ 038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+ 038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+ 038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+ 038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+ 0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+ 0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+ 0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+ 0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+ 0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+ 0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+ 0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+ 0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+ 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+ 0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+ 039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+ 039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+ 039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+ 039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+ 039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+ 039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+ 03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+ 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+ 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+ 03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+ 03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+ 03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+ 03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+ 03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+ 03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+ 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+ 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+ 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+ 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+ 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+ 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+ 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+ 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+ 03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+ 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+ 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+ 03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+ 03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+ 03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+ 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+ 03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+ 03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+ 03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+ 03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+ 03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+ 03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+ 03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+ 03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+ 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+ 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+ 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+ 03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+ 03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+ 03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+ 03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+ 03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+ 03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+ 03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+ 03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+ 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+ 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+ 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+ 03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+ 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+ 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+ 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+ 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+ 03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+ 03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+ 03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
+ 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+ 03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+ 03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+ 03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+ 03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+ 03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+ 03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+ 03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+ 03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+ 03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+ 03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+ 03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+ 03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+ 03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+ 03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+ 03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+ 03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+ 03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+ 03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+ 03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+ 03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+ 03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+ 03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+ 03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+ 03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3
+ 03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
+ 0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+ 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+ 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+ 0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+ 0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+ 0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+ 0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+ 0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+ 0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+ 0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+ 040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+ 040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+ 040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+ 040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+ 040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+ 040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+ 0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+ 0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+ 0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+ 0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+ 0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+ 0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+ 0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+ 0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+ 0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+ 0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+ 041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+ 041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+ 041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+ 041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+ 041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+ 041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+ 0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+ 0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+ 0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+ 0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+ 0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+ 0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+ 0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+ 0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+ 0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+ 0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+ 042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+ 042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+ 042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+ 042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+ 042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+ 042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+ 0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+ 0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+ 0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+ 0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+ 0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+ 0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+ 0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+ 0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+ 0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+ 0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+ 043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+ 043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+ 043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+ 043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+ 043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+ 043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+ 0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+ 0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+ 0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+ 0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+ 0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+ 0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+ 0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+ 0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+ 0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+ 0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+ 044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+ 044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+ 044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+ 044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+ 044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+ 044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+ 0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+ 0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+ 0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+ 0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+ 0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+ 0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+ 0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+ 0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+ 0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+ 0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+ 045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+ 045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+ 045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+ 045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+ 045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+ 045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+ 0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+ 0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+ 0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+ 0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+ 0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+ 0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+ 0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+ 0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+ 0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+ 0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+ 046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+ 046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+ 046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+ 046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+ 046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+ 046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+ 0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+ 0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+ 0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+ 0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+ 0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+ 0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+ 0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+ 0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+ 0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+ 0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+ 047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+ 047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+ 047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+ 047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+ 047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+ 047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+ 0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+ 0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+ 0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+ 0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+ 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+ 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+ 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+ 0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+ 0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+ 048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+ 048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+ 048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+ 048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+ 0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+ 0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+ 0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+ 0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+ 0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+ 0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+ 0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+ 0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+ 0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+ 0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+ 049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+ 049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+ 049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+ 049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+ 049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+ 049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+ 04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+ 04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+ 04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+ 04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+ 04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+ 04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+ 04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+ 04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+ 04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+ 04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+ 04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+ 04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+ 04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+ 04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+ 04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+ 04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+ 04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+ 04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+ 04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+ 04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+ 04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+ 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+ 04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+ 04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+ 04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+ 04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+ 04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+ 04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+ 04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+ 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+ 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+ 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+ 04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
+ 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+ 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+ 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+ 04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+ 04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+ 04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+ 04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+ 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+ 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+ 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+ 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+ 04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+ 04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+ 04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+ 04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+ 04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+ 04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+ 04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+ 04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+ 04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+ 04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+ 04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+ 04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+ 04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+ 04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+ 04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+ 04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+ 04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+ 04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+ 04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+ 04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+ 04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+ 04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+ 04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+ 04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+ 04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+ 04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+ 04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+ 04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+ 04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+ 04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+ 04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+ 04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+ 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+ 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+ 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+ 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+ 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+ 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+ 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+ 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+ 0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+ 0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+ 0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+ 0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+ 0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+ 0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+ 053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+ 053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+ 053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+ 053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+ 053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+ 053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+ 0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+ 0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+ 0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+ 0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+ 0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+ 0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+ 0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+ 0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+ 0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+ 0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+ 054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+ 054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+ 054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+ 054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+ 054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+ 054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+ 0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+ 0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+ 0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+ 0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+ 0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+ 0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+ 0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+ 0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+ 055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+ 055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+ 055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+ 055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+ 055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+ 055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+ 0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+ 0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+ 0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+ 0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+ 0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+ 0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+ 0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+ 0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+ 0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+ 056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+ 056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+ 056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+ 056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+ 056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+ 056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+ 0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+ 0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+ 0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+ 0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+ 0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+ 0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+ 0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+ 0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+ 0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+ 0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+ 057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+ 057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+ 057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+ 057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+ 057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+ 057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+ 0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+ 0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+ 0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+ 0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+ 0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+ 0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+ 0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+ 0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+ 0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+ 058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+ 0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+ 0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+ 0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+ 0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+ 0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+ 0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
+ 0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+ 0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
+ 0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+ 059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+ 059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+ 059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+ 059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+ 059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+ 059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+ 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+ 05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+ 05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+ 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+ 05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
+ 05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+ 05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+ 05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
+ 05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+ 05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
+ 05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+ 05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+ 05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+ 05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+ 05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+ 05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+ 05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+ 05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+ 05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+ 05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+ 05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+ 05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+ 05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+ 05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+ 05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+ 05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+ 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
+ 05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
+ 05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+ 05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+ 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
+ 05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+ 05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+ 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
+ 05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+ 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+ 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+ 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+ 05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+ 05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+ 05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+ 05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+ 05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+ 05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+ 05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+ 05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+ 05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+ 05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+ 05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+ 05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+ 05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+ 05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+ 05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+ 05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+ 05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+ 05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+ 05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+ 05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+ 05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+ 05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+ 05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+ 05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+ 05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+ 05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+ 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+ 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+ 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+ 060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+ 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+ 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+ 0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+ 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+ 0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+ 0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+ 0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+ 0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+ 0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+ 0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+ 0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+ 062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+ 062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+ 062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+ 062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+ 062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+ 062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+ 0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+ 0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+ 0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+ 0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+ 0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+ 0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+ 0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+ 0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+ 0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+ 0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+ 063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+ 0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+ 0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+ 0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+ 0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+ 0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+ 0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+ 0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+ 0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+ 0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+ 0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+ 064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+ 064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+ 064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+ 064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+ 064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+ 064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+ 0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+ 0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+ 0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+ 0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+ 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+ 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+ 0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+ 0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+ 0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+ 0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+ 0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+ 0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+ 0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+ 066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+ 066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+ 066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+ 066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+ 0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+ 0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+ 0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+ 0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+ 0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+ 0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+ 0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+ 0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+ 0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+ 0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+ 067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+ 067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+ 067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+ 067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+ 067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+ 067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+ 0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+ 0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+ 0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+ 0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+ 0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+ 0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+ 0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+ 0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+ 0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+ 0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+ 068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+ 068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+ 068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+ 068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+ 068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+ 068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+ 0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+ 0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+ 0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+ 0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+ 0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+ 0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+ 0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+ 0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+ 0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+ 069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+ 069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+ 069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+ 069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+ 06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+ 06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+ 06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+ 06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+ 06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+ 06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+ 06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+ 06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+ 06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+ 06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+ 06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+ 06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
+ 06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+ 06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+ 06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+ 06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+ 06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+ 06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+ 06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+ 06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+ 06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+ 06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+ 06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+ 06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+ 06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+ 06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+ 06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+ 06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+ 06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+ 06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+ 06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+ 06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+ 06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+ 06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+ 06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+ 06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+ 06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+ 06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+ 06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
+ 06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+ 06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+ 06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+ 06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+ 06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+ 06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+ 06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+ 06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+ 06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+ 06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+ 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+ 06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+ 06DD;ARABIC END OF AYAH;Me;0;NSM;;;;;N;;;;;
+ 06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
+ 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+ 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+ 06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+ 06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+ 06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+ 06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+ 06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+ 06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+ 06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+ 06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+ 06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+ 06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+ 06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+ 06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+ 06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+ 06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+ 06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+ 06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+ 06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+ 06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+ 06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+ 06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+ 06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+ 06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+ 06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+ 06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+ 06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+ 06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+ 06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+ 06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+ 0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+ 0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+ 0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+ 0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+ 0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+ 0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+ 0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+ 0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+ 0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+ 0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+ 070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+ 070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+ 070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+ 070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+ 070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
+ 0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+ 0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+ 0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+ 0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+ 0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+ 0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+ 0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+ 0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+ 0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+ 0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+ 071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+ 071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+ 071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+ 071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+ 071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+ 071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+ 0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+ 0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+ 0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+ 0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+ 0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+ 0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+ 0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+ 0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+ 0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+ 0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+ 072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+ 072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+ 072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+ 0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+ 0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+ 0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+ 0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+ 073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+ 073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+ 073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+ 073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+ 0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+ 0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+ 0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+ 0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+ 0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+ 0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+ 074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+ 0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+ 0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+ 0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+ 0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+ 0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+ 0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+ 0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+ 0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+ 0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+ 0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+ 078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+ 078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+ 078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+ 078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+ 078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+ 078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+ 0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+ 0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+ 0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+ 0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+ 0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+ 0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+ 0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+ 0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+ 0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+ 0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+ 079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+ 079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+ 079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+ 079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+ 079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+ 079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+ 07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+ 07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+ 07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+ 07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+ 07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+ 07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+ 07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+ 07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+ 07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+ 07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+ 07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+ 07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+ 07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+ 07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+ 07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+ 07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+ 07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+ 0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+ 0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+ 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+ 0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+ 0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+ 0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+ 090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+ 090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+ 090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+ 090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+ 0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+ 0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+ 0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+ 0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+ 091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+ 091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+ 092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+ 092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+ 092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+ 092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+ 0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+ 0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+ 093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+ 093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+ 093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+ 0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+ 0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+ 0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+ 0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+ 0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+ 0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+ 0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+ 0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+ 094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+ 094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+ 094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+ 094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+ 0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+ 0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+ 0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+ 0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+ 0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+ 0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+ 095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+ 095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+ 095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+ 095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+ 095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+ 095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+ 0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+ 0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+ 0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+ 0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+ 0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+ 0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+ 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+ 0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+ 0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+ 0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+ 098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+ 098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+ 0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+ 0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+ 099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+ 099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+ 09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+ 09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+ 09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+ 09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+ 09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+ 09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+ 09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+ 09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+ 09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+ 09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+ 09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+ 09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+ 09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+ 09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+ 09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+ 09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+ 09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+ 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+ 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+ 09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+ 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+ 09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+ 09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+ 09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+ 09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+ 09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+ 09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+ 09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+ 09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+ 09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+ 09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+ 09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+ 09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
+ 09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+ 09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+ 0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+ 0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+ 0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+ 0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+ 0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+ 0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+ 0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+ 0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+ 0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+ 0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+ 0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+ 0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+ 0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+ 0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+ 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+ 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+ 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+ 0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+ 0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+ 0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+ 0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+ 0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+ 0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+ 0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+ 0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+ 0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+ 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+ 0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+ 0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+ 0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+ 0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+ 0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+ 0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+ 0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+ 0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+ 0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+ 0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+ 0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+ 0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+ 0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+ 0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+ 0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+ 0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+ 0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+ 0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+ 0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+ 0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+ 0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+ 0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+ 0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+ 0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+ 0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+ 0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+ 0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+ 0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+ 0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+ 0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+ 0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+ 0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+ 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+ 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+ 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+ 0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+ 0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+ 0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+ 0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+ 0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+ 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+ 0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+ 0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+ 0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+ 0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+ 0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+ 0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+ 0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+ 0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+ 0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+ 0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+ 0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+ 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+ 0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+ 0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+ 0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+ 0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+ 0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+ 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+ 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+ 0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+ 0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+ 0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+ 0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+ 0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+ 0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+ 0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+ 0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+ 0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+ 0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+ 0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+ 0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+ 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+ 0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+ 0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+ 0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+ 0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+ 0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+ 0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+ 0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+ 0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+ 0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+ 0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+ 0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+ 0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+ 0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+ 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+ 0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+ 0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+ 0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+ 0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+ 0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+ 0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+ 0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0CBF;KANNADA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+ 0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+ 0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+ 0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+ 0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+ 0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+ 0CC6;KANNADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+ 0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+ 0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+ 0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+ 0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+ 0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+ 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+ 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+ 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+ 0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+ 0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+ 0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+ 0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+ 0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+ 0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+ 0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+ 0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+ 0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+ 0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+ 0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+ 0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+ 0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+ 0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+ 0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+ 0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+ 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+ 0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+ 0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+ 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+ 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+ 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+ 0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+ 0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+ 0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+ 0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+ 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+ 0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+ 0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+ 0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+ 0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+ 0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+ 0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+ 0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+ 0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+ 0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+ 0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+ 0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+ 0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+ 0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+ 0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+ 0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+ 0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+ 0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+ 0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+ 0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+ 0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+ 0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+ 0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+ 0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+ 0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+ 0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+ 0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+ 0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+ 0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+ 0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+ 0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+ 0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+ 0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+ 0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+ 0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+ 0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+ 0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+ 0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+ 0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+ 0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+ 0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+ 0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+ 0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+ 0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+ 0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+ 0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+ 0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+ 0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+ 0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+ 0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+ 0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+ 0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+ 0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+ 0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+ 0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+ 0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+ 0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+ 0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+ 0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+ 0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+ 0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+ 0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+ 0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+ 0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+ 0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+ 0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+ 0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+ 0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+ 0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+ 0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+ 0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+ 0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+ 0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+ 0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+ 0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+ 0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+ 0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+ 0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+ 0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+ 0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+ 0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+ 0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+ 0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+ 0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+ 0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+ 0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+ 0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+ 0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+ 0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+ 0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+ 0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+ 0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+ 0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+ 0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
+ 0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+ 0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+ 0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+ 0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+ 0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+ 0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+ 0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+ 0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
+ 0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+ 0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+ 0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+ 0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+ 0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+ 0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+ 0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+ 0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
+ 0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
+ 0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
+ 0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
+ 0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
+ 0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+ 0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+ 0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+ 0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+ 0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+ 0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
+ 0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+ 0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+ 0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+ 0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+ 0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+ 0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+ 0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+ 0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+ 0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+ 0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+ 0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+ 0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+ 0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+ 0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+ 0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+ 0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+ 0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+ 0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+ 0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+ 0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+ 0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+ 0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+ 0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+ 0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+ 0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+ 0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+ 0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+ 0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+ 0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+ 0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+ 0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+ 0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+ 0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+ 0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+ 0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+ 0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+ 0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+ 0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+ 0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+ 0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+ 0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+ 0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+ 0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+ 0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+ 0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+ 0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+ 0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+ 0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+ 0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+ 0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+ 0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+ 0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+ 0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+ 0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+ 0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+ 0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+ 0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+ 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+ 0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+ 0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+ 0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+ 0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+ 0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+ 0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
+ 0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+ 0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+ 0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+ 0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
+ 0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+ 0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+ 0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
+ 0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
+ 0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
+ 0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
+ 0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+ 0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+ 0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
+ 0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+ 0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+ 0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
+ 0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+ 0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+ 0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+ 0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
+ 0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
+ 0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+ 0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+ 0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+ 0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+ 0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+ 0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+ 0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
+ 0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
+ 0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
+ 0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
+ 0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
+ 0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
+ 0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
+ 0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
+ 0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
+ 0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
+ 0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+ 0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
+ 0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+ 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
+ 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+ 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
+ 0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
+ 0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
+ 0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
+ 0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
+ 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
+ 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
+ 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+ 0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+ 0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+ 0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+ 0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+ 0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+ 0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+ 0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+ 0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+ 0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+ 0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+ 0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+ 0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+ 0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+ 0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+ 0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+ 0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+ 0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+ 0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+ 0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+ 0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+ 0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+ 0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+ 0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+ 0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+ 0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+ 0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+ 0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+ 0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
+ 0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+ 0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+ 0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+ 0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+ 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+ 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+ 0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
+ 0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+ 0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+ 0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+ 0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+ 0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+ 0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+ 0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+ 0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+ 0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+ 0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+ 0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+ 0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+ 0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+ 0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
+ 0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
+ 0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+ 0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+ 0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
+ 0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
+ 0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+ 0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+ 0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
+ 0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
+ 0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
+ 0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
+ 0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
+ 0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
+ 0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+ 0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+ 0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+ 0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+ 0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+ 0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+ 0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+ 0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+ 0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+ 0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+ 0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+ 0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+ 0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+ 0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+ 0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+ 0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+ 0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+ 0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+ 0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+ 0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+ 0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+ 0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+ 0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+ 0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+ 0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+ 0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+ 0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+ 0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+ 0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
+ 0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+ 0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+ 0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+ 0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
+ 0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
+ 0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+ 0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+ 0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+ 0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+ 0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+ 0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+ 0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+ 0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
+ 0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
+ 0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
+ 0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
+ 0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
+ 0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+ 0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+ 0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
+ 0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
+ 0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
+ 0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
+ 0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
+ 0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
+ 0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
+ 0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
+ 0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
+ 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
+ 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
+ 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;;
+ 1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+ 1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+ 1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+ 1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+ 1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+ 1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+ 1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+ 1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+ 100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+ 100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+ 100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+ 100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+ 100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+ 1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+ 1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+ 1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+ 1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+ 1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+ 1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+ 1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+ 1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+ 1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+ 101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+ 101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+ 101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+ 101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+ 101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+ 101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+ 1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+ 1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+ 1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+ 1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+ 1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+ 1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+ 1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+ 1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+ 102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+ 102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+ 102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+ 102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+ 1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+ 1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+ 1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+ 1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+ 1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+ 1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+ 1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+ 104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+ 104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+ 104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+ 104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+ 104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+ 1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+ 1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+ 1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+ 1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+ 1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+ 1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+ 1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+ 1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+ 1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+ 10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
+ 10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+ 10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+ 10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+ 10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+ 10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+ 10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+ 10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+ 10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+ 10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+ 10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+ 10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+ 10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+ 10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+ 10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+ 10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+ 10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+ 10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+ 10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+ 10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+ 10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+ 10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+ 10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+ 10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+ 10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+ 10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+ 10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+ 10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+ 10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+ 10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+ 10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+ 10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+ 10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+ 10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+ 10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+ 10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+ 10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+ 10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+ 10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+ 10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+ 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+ 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+ 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+ 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+ 1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+ 1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
+ 1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
+ 1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+ 1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+ 1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
+ 1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+ 110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+ 110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+ 110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+ 110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
+ 110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+ 110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+ 1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+ 1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+ 1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+ 1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+ 1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+ 1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+ 1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+ 1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+ 111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+ 111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+ 111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+ 111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+ 111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+ 1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+ 1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+ 1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+ 1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+ 1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+ 1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+ 1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+ 1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+ 1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+ 112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+ 112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+ 112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+ 112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+ 112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+ 1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+ 1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+ 1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+ 1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+ 1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+ 1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+ 1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+ 1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+ 1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+ 113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+ 113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+ 113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+ 113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+ 113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+ 113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+ 1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+ 1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+ 1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+ 1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+ 1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+ 1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+ 1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+ 1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+ 1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+ 114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+ 114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+ 114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+ 114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+ 114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+ 114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+ 1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+ 1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+ 1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+ 1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+ 1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+ 1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+ 1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+ 1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+ 1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+ 1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+ 115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+ 1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+ 1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+ 1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+ 1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+ 1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+ 1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+ 1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+ 1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+ 1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+ 1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+ 116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+ 116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+ 116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+ 116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+ 116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+ 116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+ 1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+ 1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+ 1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+ 1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+ 1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+ 1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+ 1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+ 1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+ 1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+ 1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+ 117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+ 117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+ 117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+ 117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+ 117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+ 117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+ 1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+ 1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+ 1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+ 1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+ 1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+ 1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+ 1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+ 1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+ 1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+ 1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+ 118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+ 118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+ 118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+ 118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+ 118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+ 118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+ 1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+ 1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+ 1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+ 1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+ 1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+ 1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+ 1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+ 1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+ 1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+ 1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+ 119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+ 119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+ 119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+ 119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+ 119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+ 119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+ 11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+ 11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+ 11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+ 11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+ 11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+ 11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
+ 11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+ 11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
+ 11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
+ 11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+ 11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
+ 11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
+ 11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
+ 11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
+ 11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
+ 11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
+ 11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
+ 11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
+ 11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+ 11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+ 11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
+ 11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+ 11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+ 11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
+ 11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+ 11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+ 11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+ 11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+ 11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+ 11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+ 11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+ 11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+ 11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+ 11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+ 11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+ 11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+ 11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+ 11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+ 11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+ 11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+ 11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+ 11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+ 11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+ 11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+ 11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+ 11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+ 11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+ 11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+ 11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+ 11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+ 11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+ 11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+ 11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+ 11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+ 11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+ 11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+ 11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+ 11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+ 11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+ 11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+ 11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+ 11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+ 11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+ 11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+ 11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+ 11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+ 11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+ 11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+ 11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+ 11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+ 11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+ 11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+ 11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+ 11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+ 11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+ 11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+ 11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+ 11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+ 11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+ 1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+ 1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+ 1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+ 1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+ 1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+ 1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+ 1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+ 1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+ 1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+ 120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+ 120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+ 120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+ 120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+ 120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+ 120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+ 1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+ 1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+ 1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+ 1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+ 1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+ 1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+ 1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+ 1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+ 1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+ 1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+ 121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+ 121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+ 121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+ 121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+ 121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+ 121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+ 1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+ 1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+ 1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+ 1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+ 1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+ 1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+ 1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+ 1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+ 1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+ 1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+ 122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+ 122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+ 122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+ 122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+ 122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+ 122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+ 1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+ 1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+ 1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+ 1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+ 1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+ 1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+ 1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+ 1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+ 1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+ 1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+ 123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+ 123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+ 123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+ 123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+ 123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+ 123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+ 1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+ 1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+ 1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+ 1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+ 1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+ 1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+ 1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+ 1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+ 124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+ 124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+ 124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+ 124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+ 1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+ 1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+ 1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+ 1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+ 1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+ 1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+ 1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+ 1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+ 125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+ 125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+ 125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+ 125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+ 1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+ 1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+ 1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+ 1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+ 1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+ 1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+ 1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+ 1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+ 1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+ 1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+ 126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+ 126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+ 126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+ 126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+ 126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+ 126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+ 1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+ 1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+ 1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+ 1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+ 1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+ 1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+ 1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+ 1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+ 1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+ 1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+ 127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+ 127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+ 127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+ 127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+ 127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+ 127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+ 1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+ 1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+ 1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+ 1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+ 1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+ 1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+ 1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+ 1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+ 128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+ 128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+ 128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+ 128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+ 1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+ 1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+ 1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+ 1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+ 1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+ 1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+ 1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+ 1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+ 1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+ 1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+ 129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+ 129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+ 129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+ 129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+ 129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+ 129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+ 12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+ 12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+ 12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+ 12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+ 12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+ 12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+ 12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+ 12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+ 12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+ 12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+ 12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+ 12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+ 12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+ 12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+ 12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+ 12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+ 12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+ 12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+ 12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+ 12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+ 12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+ 12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+ 12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+ 12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+ 12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+ 12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+ 12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+ 12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+ 12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+ 12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+ 12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+ 12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+ 12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+ 12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+ 12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+ 12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+ 12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+ 12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+ 12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+ 12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+ 12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+ 12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+ 12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+ 12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+ 12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+ 12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+ 12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+ 12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+ 12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+ 12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+ 12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+ 12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+ 12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+ 12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+ 12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+ 12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+ 12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+ 12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+ 12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+ 12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+ 12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+ 12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+ 12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+ 12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+ 12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+ 12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+ 12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+ 12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+ 12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+ 12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+ 12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+ 12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+ 12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+ 12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+ 12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+ 12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+ 12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+ 12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+ 12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+ 12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+ 12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+ 12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+ 12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+ 12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+ 12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+ 1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+ 1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+ 1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+ 1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+ 1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+ 1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+ 1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+ 1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+ 1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+ 1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+ 130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+ 130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+ 130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+ 130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+ 130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+ 1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+ 1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+ 1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+ 1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+ 1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+ 1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+ 1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+ 131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+ 131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+ 131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+ 131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+ 131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+ 1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+ 1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+ 1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+ 1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+ 1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+ 1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+ 1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+ 1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+ 1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+ 1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+ 132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+ 132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+ 132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+ 132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+ 132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+ 132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+ 1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+ 1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+ 1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+ 1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+ 1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+ 1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+ 1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+ 1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+ 1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+ 1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+ 133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+ 133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+ 133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+ 133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+ 133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+ 133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+ 1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+ 1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+ 1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+ 1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+ 1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+ 1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+ 1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+ 1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+ 1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+ 134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+ 134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+ 134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+ 134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+ 134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+ 134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+ 1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+ 1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+ 1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+ 1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+ 1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+ 1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+ 1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+ 1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+ 1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+ 1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+ 135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+ 1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+ 1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+ 1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+ 1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+ 1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+ 1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+ 1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+ 1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+ 1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+ 1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+ 1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+ 1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+ 1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+ 1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+ 1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+ 1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+ 137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+ 137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+ 137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+ 13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
+ 13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
+ 13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
+ 13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
+ 13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
+ 13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
+ 13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
+ 13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
+ 13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
+ 13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
+ 13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
+ 13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
+ 13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
+ 13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
+ 13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
+ 13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
+ 13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
+ 13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
+ 13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
+ 13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
+ 13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
+ 13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
+ 13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
+ 13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
+ 13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
+ 13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
+ 13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
+ 13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
+ 13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
+ 13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
+ 13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
+ 13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
+ 13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
+ 13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
+ 13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
+ 13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
+ 13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
+ 13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
+ 13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
+ 13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
+ 13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
+ 13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
+ 13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
+ 13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
+ 13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
+ 13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
+ 13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
+ 13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
+ 13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
+ 13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
+ 13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
+ 13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
+ 13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
+ 13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
+ 13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
+ 13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
+ 13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
+ 13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
+ 13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
+ 13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
+ 13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
+ 13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
+ 13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
+ 13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
+ 13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
+ 13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
+ 13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
+ 13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
+ 13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
+ 13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
+ 13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
+ 13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
+ 13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
+ 13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
+ 13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
+ 13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
+ 13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
+ 13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
+ 13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
+ 13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
+ 13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
+ 13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
+ 13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
+ 13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
+ 13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+ 1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+ 1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+ 1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+ 1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+ 1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+ 1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+ 1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+ 1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+ 1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+ 140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+ 140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+ 140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+ 140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+ 140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+ 140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+ 1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+ 1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+ 1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+ 1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+ 1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+ 1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+ 1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+ 1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+ 1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+ 1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+ 141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+ 141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+ 141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+ 141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+ 141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+ 141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+ 1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+ 1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+ 1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+ 1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+ 1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+ 1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+ 1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+ 1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+ 1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+ 1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+ 142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+ 142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+ 142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+ 142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+ 142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+ 142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+ 1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+ 1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+ 1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+ 1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+ 1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+ 1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+ 1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+ 1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+ 1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+ 1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+ 143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+ 143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+ 143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+ 143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+ 143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+ 143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+ 1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+ 1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+ 1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+ 1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+ 1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+ 1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+ 1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+ 1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+ 1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+ 1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+ 144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+ 144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+ 144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+ 144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+ 144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+ 144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+ 1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+ 1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+ 1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+ 1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+ 1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+ 1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+ 1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+ 1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+ 1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+ 1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+ 145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+ 145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+ 145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+ 145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+ 145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+ 145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+ 1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+ 1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+ 1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+ 1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+ 1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+ 1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+ 1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+ 1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+ 1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+ 1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+ 146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+ 146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+ 146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+ 146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+ 146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+ 146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+ 1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+ 1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+ 1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+ 1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+ 1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+ 1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+ 1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+ 1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+ 1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+ 1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+ 147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+ 147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+ 147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+ 147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+ 147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+ 147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+ 1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+ 1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+ 1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+ 1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+ 1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+ 1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+ 1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+ 1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+ 1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+ 1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+ 148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+ 148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+ 148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+ 148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+ 148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+ 148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+ 1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+ 1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+ 1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+ 1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+ 1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+ 1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+ 1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+ 1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+ 1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+ 1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+ 149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+ 149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+ 149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+ 149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+ 149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+ 149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+ 14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+ 14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+ 14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+ 14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+ 14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+ 14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+ 14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+ 14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+ 14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+ 14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+ 14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+ 14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+ 14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+ 14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+ 14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+ 14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+ 14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+ 14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+ 14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+ 14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+ 14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+ 14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+ 14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+ 14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+ 14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+ 14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+ 14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+ 14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+ 14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+ 14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+ 14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+ 14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+ 14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+ 14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+ 14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+ 14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+ 14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+ 14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+ 14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+ 14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+ 14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+ 14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+ 14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+ 14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+ 14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+ 14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+ 14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+ 14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+ 14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+ 14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+ 14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+ 14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+ 14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+ 14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+ 14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+ 14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+ 14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+ 14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+ 14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+ 14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+ 14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+ 14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+ 14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+ 14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+ 14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+ 14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+ 14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+ 14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+ 14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+ 14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+ 14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+ 14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+ 14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+ 14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+ 14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+ 14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+ 14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+ 14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+ 14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+ 14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+ 14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+ 14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+ 14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+ 14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+ 14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+ 14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+ 14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+ 14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+ 14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+ 14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+ 14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+ 14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+ 14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+ 14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+ 14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+ 14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+ 1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+ 1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+ 1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+ 1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+ 1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+ 1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+ 1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+ 1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+ 1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+ 1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+ 150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+ 150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+ 150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+ 150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+ 150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+ 150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+ 1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+ 1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+ 1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+ 1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+ 1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+ 1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+ 1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+ 1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+ 1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+ 1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+ 151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+ 151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+ 151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+ 151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+ 151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+ 151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+ 1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+ 1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+ 1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+ 1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+ 1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+ 1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+ 1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+ 1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+ 1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+ 1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+ 152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+ 152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+ 152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+ 152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+ 152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+ 152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+ 1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+ 1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+ 1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+ 1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+ 1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+ 1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+ 1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+ 1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+ 1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+ 1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+ 153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+ 153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+ 153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+ 153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+ 153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+ 153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+ 1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+ 1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+ 1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+ 1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+ 1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+ 1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+ 1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+ 1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+ 1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+ 1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+ 154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+ 154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+ 154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+ 154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+ 154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+ 154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+ 1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+ 1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+ 1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+ 1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+ 1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+ 1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+ 1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+ 1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+ 1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+ 1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+ 155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+ 155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+ 155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+ 155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+ 155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+ 155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+ 1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+ 1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+ 1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+ 1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+ 1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+ 1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+ 1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+ 1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+ 1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+ 1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+ 156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+ 156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+ 156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+ 156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+ 156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+ 156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+ 1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+ 1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+ 1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+ 1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+ 1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+ 1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+ 1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+ 1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+ 1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+ 1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+ 157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+ 157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+ 157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+ 157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+ 157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+ 157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+ 1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+ 1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+ 1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+ 1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+ 1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+ 1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+ 1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+ 1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+ 1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+ 1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+ 158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+ 158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+ 158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+ 158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+ 158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+ 158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+ 1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+ 1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+ 1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+ 1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+ 1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+ 1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+ 1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+ 1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+ 1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+ 1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+ 159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+ 159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+ 159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+ 159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+ 159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+ 159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+ 15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+ 15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+ 15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+ 15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+ 15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+ 15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+ 15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+ 15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+ 15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+ 15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+ 15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+ 15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+ 15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+ 15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+ 15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+ 15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+ 15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+ 15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+ 15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+ 15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+ 15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+ 15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+ 15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+ 15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+ 15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+ 15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+ 15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+ 15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+ 15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+ 15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+ 15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+ 15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+ 15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+ 15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+ 15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+ 15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+ 15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+ 15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+ 15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+ 15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+ 15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+ 15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+ 15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+ 15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+ 15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+ 15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+ 15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+ 15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+ 15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+ 15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+ 15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+ 15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+ 15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+ 15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+ 15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+ 15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+ 15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+ 15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+ 15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+ 15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+ 15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+ 15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+ 15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+ 15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+ 15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+ 15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+ 15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+ 15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+ 15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+ 15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+ 15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+ 15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+ 15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+ 15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+ 15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+ 15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+ 15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+ 15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+ 15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+ 15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+ 15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+ 15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+ 15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+ 15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+ 15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+ 15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+ 15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+ 15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+ 15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+ 15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+ 15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+ 15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+ 15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+ 15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+ 15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+ 15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+ 1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+ 1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+ 1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+ 1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+ 1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+ 1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+ 1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+ 1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+ 1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+ 1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+ 160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+ 160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+ 160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+ 160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+ 160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+ 160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+ 1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+ 1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+ 1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+ 1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+ 1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+ 1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+ 1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+ 1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+ 1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+ 1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+ 161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+ 161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+ 161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+ 161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+ 161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+ 161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+ 1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+ 1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+ 1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+ 1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+ 1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+ 1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+ 1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+ 1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+ 1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+ 1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+ 162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+ 162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+ 162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+ 162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+ 162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+ 162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+ 1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+ 1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+ 1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+ 1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+ 1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+ 1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+ 1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+ 1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+ 1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+ 1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+ 163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+ 163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+ 163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+ 163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+ 163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+ 163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+ 1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+ 1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+ 1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+ 1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+ 1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+ 1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+ 1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+ 1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+ 1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+ 1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+ 164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+ 164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+ 164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+ 164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+ 164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+ 164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+ 1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+ 1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+ 1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+ 1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+ 1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+ 1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+ 1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+ 1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+ 1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+ 1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+ 165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+ 165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+ 165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+ 165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+ 165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+ 165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+ 1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+ 1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+ 1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+ 1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+ 1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+ 1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+ 1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+ 1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+ 1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+ 1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+ 166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+ 166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+ 166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+ 166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
+ 166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+ 166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+ 1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+ 1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+ 1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+ 1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+ 1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+ 1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+ 1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+ 1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+ 1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+ 1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+ 1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+ 1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+ 1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+ 1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+ 1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+ 1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+ 1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+ 168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+ 168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+ 168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+ 168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+ 168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+ 168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+ 1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+ 1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+ 1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+ 1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+ 1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+ 1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+ 1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+ 1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+ 1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+ 1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+ 169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+ 169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
+ 169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
+ 16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+ 16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+ 16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+ 16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+ 16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+ 16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+ 16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+ 16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+ 16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+ 16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+ 16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+ 16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+ 16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+ 16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+ 16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+ 16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+ 16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+ 16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+ 16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+ 16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+ 16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+ 16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+ 16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+ 16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+ 16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+ 16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+ 16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+ 16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+ 16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+ 16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+ 16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+ 16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+ 16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+ 16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+ 16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+ 16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+ 16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+ 16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+ 16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+ 16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+ 16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+ 16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+ 16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+ 16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+ 16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+ 16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+ 16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+ 16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+ 16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+ 16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+ 16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+ 16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+ 16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+ 16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+ 16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+ 16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+ 16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+ 16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+ 16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+ 16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+ 16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+ 16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+ 16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+ 16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+ 16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+ 16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+ 16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+ 16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+ 16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+ 16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+ 16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+ 16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+ 16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+ 16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+ 16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+ 16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+ 16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+ 16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+ 16EE;RUNIC ARLAUG SYMBOL;No;0;L;;;;17;N;;golden number 17;;;
+ 16EF;RUNIC TVIMADUR SYMBOL;No;0;L;;;;18;N;;golden number 18;;;
+ 16F0;RUNIC BELGTHOR SYMBOL;No;0;L;;;;19;N;;golden number 19;;;
+ 1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+ 1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+ 1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+ 1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+ 1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+ 1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+ 1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+ 1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+ 178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+ 178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+ 178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+ 178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+ 178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+ 178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+ 1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+ 1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+ 1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+ 1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+ 1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+ 1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+ 1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+ 1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+ 1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+ 1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+ 179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+ 179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+ 179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+ 179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+ 179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+ 17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+ 17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+ 17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+ 17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;
+ 17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;
+ 17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+ 17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+ 17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+ 17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+ 17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+ 17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+ 17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+ 17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+ 17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+ 17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+ 17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+ 17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+ 17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+ 17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+ 17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+ 17B4;KHMER VOWEL INHERENT AQ;Mc;0;L;;;;;N;;;;;
+ 17B5;KHMER VOWEL INHERENT AA;Mc;0;L;;;;;N;;;;;
+ 17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+ 17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+ 17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+ 17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+ 17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+ 17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+ 17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+ 17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+ 17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+ 17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+ 17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+ 17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+ 17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+ 17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+ 17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+ 17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+ 17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+ 17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+ 17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+ 17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+ 17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+ 17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+ 17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+ 17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+ 17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+ 17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+ 17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+ 17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+ 17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+ 17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;
+ 17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+ 17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+ 17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+ 17D7;KHMER SIGN LEK TOO;Po;0;L;;;;;N;;;;;
+ 17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;
+ 17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+ 17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+ 17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+ 17DC;KHMER SIGN AVAKRAHASANYA;Po;0;L;;;;;N;;;;;
+ 17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+ 1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+ 1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+ 1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+ 1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+ 1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+ 1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+ 1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+ 1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+ 1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+ 180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+ 180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Cf;0;BN;;;;;N;;;;;
+ 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Cf;0;BN;;;;;N;;;;;
+ 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Cf;0;BN;;;;;N;;;;;
+ 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
+ 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ 1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ 1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ 1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ 1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ 1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ 1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ 1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+ 1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+ 1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+ 1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+ 1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+ 1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+ 1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+ 1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+ 1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+ 1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+ 1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+ 182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+ 182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+ 182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+ 182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+ 182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+ 182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+ 1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+ 1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+ 1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+ 1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+ 1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+ 1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+ 1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+ 1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+ 1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+ 1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+ 183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+ 183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+ 183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+ 183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+ 183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+ 183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+ 1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+ 1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+ 1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+ 1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+ 1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+ 1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+ 1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+ 1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+ 1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+ 1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+ 184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+ 184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+ 184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+ 184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+ 184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+ 184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+ 1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+ 1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+ 1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+ 1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+ 1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+ 1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+ 1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+ 1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+ 1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+ 1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+ 185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+ 185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+ 185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+ 185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+ 185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+ 185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+ 1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+ 1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+ 1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+ 1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+ 1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+ 1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+ 1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+ 1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+ 1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+ 1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+ 186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+ 186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+ 186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+ 186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+ 186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+ 186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+ 1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+ 1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+ 1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+ 1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+ 1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+ 1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+ 1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+ 1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+ 1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+ 1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+ 1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+ 1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+ 1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+ 1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
+ 1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+ 1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+ 1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+ 1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+ 188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+ 188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+ 188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+ 188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+ 188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+ 188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+ 1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+ 1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+ 1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+ 1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+ 1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+ 1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+ 1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+ 1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+ 1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+ 1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+ 189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+ 189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+ 189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+ 189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+ 189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+ 189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+ 18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+ 18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+ 18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+ 18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+ 18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+ 18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+ 18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+ 18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+ 18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+ 18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+ 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+ 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+ 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+ 1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+ 1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+ 1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+ 1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+ 1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+ 1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+ 1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+ 1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+ 1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+ 1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+ 1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+ 1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+ 1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+ 1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+ 1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+ 1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+ 1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+ 1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+ 1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+ 1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+ 1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+ 1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+ 1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+ 1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+ 1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+ 1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+ 1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+ 1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+ 1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+ 1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+ 1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+ 1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+ 1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+ 1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+ 1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+ 1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+ 1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+ 1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+ 1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+ 1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+ 1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+ 1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+ 1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+ 1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+ 1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+ 1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+ 1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+ 1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+ 1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+ 1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+ 1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+ 1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+ 1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+ 1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+ 1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+ 1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+ 1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+ 1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+ 1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+ 1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+ 1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+ 1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+ 1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+ 1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+ 1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+ 1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+ 1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+ 1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+ 1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+ 1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+ 1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+ 1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+ 1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+ 1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+ 1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+ 1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+ 1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+ 1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+ 1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+ 1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+ 1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+ 1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+ 1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+ 1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+ 1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+ 1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+ 1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+ 1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+ 1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+ 1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+ 1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+ 1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+ 1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+ 1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+ 1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+ 1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+ 1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+ 1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+ 1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+ 1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+ 1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+ 1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+ 1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+ 1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+ 1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+ 1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+ 1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+ 1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+ 1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+ 1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+ 1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+ 1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+ 1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+ 1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+ 1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+ 1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+ 1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+ 1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+ 1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+ 1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+ 1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+ 1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+ 1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+ 1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+ 1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+ 1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+ 1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+ 1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+ 1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+ 1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+ 1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+ 1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+ 1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+ 1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+ 1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+ 1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+ 1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+ 1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+ 1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+ 1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+ 1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+ 1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+ 1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+ 1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+ 1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+ 1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+ 1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+ 1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+ 1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+ 1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+ 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+ 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+ 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+ 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+ 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+ 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+ 1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+ 1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+ 1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+ 1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+ 1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+ 1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+ 1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+ 1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+ 1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+ 1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+ 1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+ 1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+ 1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+ 1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+ 1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+ 1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+ 1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+ 1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+ 1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+ 1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+ 1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+ 1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+ 1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+ 1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+ 1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+ 1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+ 1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+ 1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+ 1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+ 1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+ 1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+ 1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+ 1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+ 1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+ 1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+ 1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+ 1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+ 1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+ 1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+ 1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+ 1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+ 1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+ 1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+ 1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+ 1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+ 1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+ 1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+ 1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+ 1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+ 1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+ 1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+ 1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+ 1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+ 1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+ 1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+ 1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+ 1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+ 1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+ 1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+ 1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+ 1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+ 1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+ 1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+ 1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+ 1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+ 1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+ 1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+ 1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+ 1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+ 1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+ 1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+ 1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+ 1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+ 1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+ 1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+ 1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+ 1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+ 1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+ 1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+ 1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+ 1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+ 1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+ 1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+ 1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+ 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+ 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+ 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+ 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+ 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+ 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+ 1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+ 1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+ 1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+ 1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+ 1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+ 1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+ 1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+ 1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+ 1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+ 1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+ 1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+ 1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+ 1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+ 1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+ 1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+ 1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+ 1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+ 1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+ 1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+ 1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+ 1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+ 1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+ 1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+ 1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+ 1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+ 1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+ 1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+ 1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+ 1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+ 1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+ 1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+ 1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+ 1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+ 1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+ 1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+ 1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+ 1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+ 1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+ 1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+ 1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+ 1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+ 1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+ 1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+ 1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+ 1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+ 1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+ 1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+ 1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+ 1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+ 1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+ 1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+ 1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+ 1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+ 1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+ 1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+ 1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+ 1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+ 1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+ 1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+ 1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+ 1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+ 1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+ 1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+ 1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+ 1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+ 1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+ 1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+ 1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+ 1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+ 1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+ 1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+ 1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+ 1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+ 1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+ 1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+ 1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+ 1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+ 1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+ 1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+ 1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+ 1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+ 1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+ 1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+ 1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+ 1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+ 1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+ 1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+ 1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+ 1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+ 1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+ 1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+ 1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+ 1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+ 1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+ 1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+ 1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+ 1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+ 1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+ 1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+ 1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+ 1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+ 1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+ 1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+ 1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+ 1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+ 1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+ 1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+ 1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+ 1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+ 1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+ 1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+ 1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+ 1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+ 1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+ 1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+ 1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+ 1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+ 1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+ 1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+ 1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+ 1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+ 1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+ 1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+ 1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+ 1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+ 1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+ 1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+ 1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+ 1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+ 1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+ 1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+ 1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+ 1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+ 1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+ 1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+ 1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+ 1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+ 1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+ 1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+ 1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+ 1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+ 1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+ 1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+ 1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+ 1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+ 1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+ 1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+ 1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+ 1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+ 1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+ 1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+ 1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+ 1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+ 1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+ 1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+ 1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+ 1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+ 1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+ 1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+ 1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+ 1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+ 1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+ 1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+ 1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+ 1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+ 1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+ 1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+ 1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+ 1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+ 1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+ 1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+ 1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+ 1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+ 1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+ 1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+ 1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+ 1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+ 1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+ 1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+ 1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+ 1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+ 1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+ 1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+ 1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+ 1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+ 1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+ 1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+ 1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+ 1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+ 1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+ 1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+ 1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+ 1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+ 1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+ 1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+ 1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+ 1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+ 1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+ 1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+ 1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+ 1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+ 1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+ 1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+ 1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+ 1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+ 1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+ 1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+ 1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+ 1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+ 1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+ 1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+ 1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+ 1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+ 1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+ 1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+ 1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+ 1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+ 1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+ 1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+ 1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+ 1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+ 1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+ 1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+ 1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+ 1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+ 1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+ 1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+ 1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+ 1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+ 1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+ 2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+ 2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+ 2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+ 2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+ 200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
+ 200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+ 200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+ 200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+ 200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+ 2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+ 2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+ 2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+ 2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+ 2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+ 2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+ 2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+ 2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+ 2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+ 2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+ 201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+ 201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+ 201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+ 201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+ 201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+ 201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+ 2020;DAGGER;Po;0;ON;;;;;N;;;;;
+ 2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+ 2022;BULLET;Po;0;ON;;;;;N;;;;;
+ 2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+ 2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+ 2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+ 2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+ 2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+ 2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+ 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+ 202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+ 202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+ 202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+ 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+ 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+ 202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+ 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+ 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+ 2032;PRIME;Po;0;ET;;;;;N;;;;;
+ 2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+ 2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+ 2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+ 2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+ 2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+ 2038;CARET;Po;0;ON;;;;;N;;;;;
+ 2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+ 203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+ 203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+ 203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+ 203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+ 203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+ 203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+ 2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+ 2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+ 2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+ 2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+ 2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
+ 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+ 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+ 2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+ 2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+ 204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+ 204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+ 204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+ 204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+ 206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+ 206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+ 206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+ 206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+ 206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+ 206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+ 2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+ 2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+ 2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+ 2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+ 2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+ 2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+ 2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+ 207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
+ 207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+ 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+ 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+ 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+ 207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+ 2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+ 2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+ 2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+ 2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+ 2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+ 2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+ 2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+ 2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+ 2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+ 2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+ 208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
+ 208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+ 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+ 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+ 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+ 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+ 20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+ 20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+ 20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+ 20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+ 20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+ 20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+ 20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+ 20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+ 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+ 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+ 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+ 20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+ 20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+ 20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+ 20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+ 20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+ 20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+ 20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+ 20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+ 20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+ 20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+ 20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+ 20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+ 20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+ 20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+ 20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+ 20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+ 20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+ 2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+ 2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+ 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+ 2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+ 2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+ 2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+ 2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+ 2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+ 2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+ 2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+ 210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+ 210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+ 210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+ 210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+ 210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+ 210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+ 2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+ 2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+ 2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+ 2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+ 2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+ 2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+ 2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+ 2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+ 2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
+ 2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+ 211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+ 211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+ 211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+ 211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+ 211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+ 211F;RESPONSE;So;0;ON;;;;;N;;;;;
+ 2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+ 2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+ 2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+ 2123;VERSICLE;So;0;ON;;;;;N;;;;;
+ 2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+ 2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+ 2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+ 2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+ 2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+ 2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+ 212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+ 212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+ 212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+ 212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+ 212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+ 212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+ 2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+ 2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+ 2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+ 2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+ 2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+ 2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+ 2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+ 2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+ 2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+ 2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+ 213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+ 2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+ 2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+ 2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+ 2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+ 2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+ 2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+ 2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+ 215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+ 215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+ 215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+ 215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+ 215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+ 215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+ 2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+ 2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+ 2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+ 2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+ 2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+ 2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+ 2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+ 2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+ 2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+ 2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+ 216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+ 216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+ 216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+ 216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+ 216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+ 216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+ 2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+ 2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+ 2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+ 2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+ 2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+ 2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+ 2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+ 2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+ 2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+ 2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+ 217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+ 217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+ 217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+ 217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+ 217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+ 217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+ 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+ 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+ 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+ 2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
+ 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+ 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+ 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+ 2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+ 2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+ 2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+ 2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+ 2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+ 2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+ 2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+ 219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+ 219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+ 219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+ 219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+ 219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+ 219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+ 21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+ 21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+ 21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+ 21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+ 21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+ 21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+ 21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+ 21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+ 21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+ 21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+ 21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+ 21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+ 21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+ 21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+ 21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+ 21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+ 21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+ 21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+ 21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+ 21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+ 21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+ 21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+ 21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+ 21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+ 21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+ 21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+ 21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+ 21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+ 21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+ 21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+ 21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+ 21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+ 21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+ 21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+ 21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+ 21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+ 21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+ 21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+ 21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+ 21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+ 21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+ 21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+ 21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+ 21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+ 21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+ 21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+ 21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+ 21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+ 21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+ 21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+ 21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+ 21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+ 21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+ 21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+ 21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+ 21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+ 21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+ 21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+ 21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+ 21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+ 21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+ 21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+ 21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+ 21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+ 21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+ 21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+ 21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+ 21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+ 21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+ 21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+ 21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+ 21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+ 21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+ 21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+ 21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+ 21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+ 21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+ 21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+ 21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+ 21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+ 21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+ 21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+ 21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+ 21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+ 2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+ 2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+ 2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+ 2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+ 2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+ 2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+ 2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+ 2207;NABLA;Sm;0;ON;;;;;N;;;;;
+ 2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+ 2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+ 220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+ 220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+ 220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+ 220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+ 220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+ 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+ 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+ 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+ 2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+ 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+ 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+ 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+ 2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+ 2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+ 221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+ 221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+ 221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+ 221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+ 221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+ 2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+ 2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+ 2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+ 2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+ 2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+ 2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+ 2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+ 2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+ 2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+ 2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+ 222A;UNION;Sm;0;ON;;;;;N;;;;;
+ 222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+ 222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+ 222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+ 2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+ 2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+ 2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+ 2236;RATIO;Sm;0;ON;;;;;N;;;;;
+ 2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+ 2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+ 2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+ 223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+ 223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+ 223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+ 223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
+ 223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+ 223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+ 2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+ 2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+ 2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+ 2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+ 2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+ 224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+ 224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+ 224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+ 224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+ 2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+ 2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+ 2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+ 2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+ 2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+ 2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+ 2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+ 2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+ 2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+ 225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+ 225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+ 225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+ 225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+ 225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+ 225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+ 2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+ 2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+ 2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+ 2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+ 2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+ 2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+ 2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+ 2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+ 2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+ 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+ 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+ 226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+ 226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+ 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+ 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+ 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+ 2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+ 2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+ 2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+ 2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+ 2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+ 2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+ 2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+ 2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+ 2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+ 227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+ 227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+ 227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+ 227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+ 2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+ 2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+ 2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+ 2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+ 2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+ 2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+ 2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+ 2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+ 228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+ 228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+ 228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+ 228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+ 228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+ 228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+ 2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+ 2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+ 2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+ 2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+ 2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+ 2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+ 2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+ 2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+ 229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+ 229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+ 229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+ 22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+ 22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+ 22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+ 22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+ 22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+ 22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+ 22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+ 22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+ 22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+ 22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+ 22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+ 22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+ 22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+ 22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+ 22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+ 22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+ 22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+ 22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+ 22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+ 22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+ 22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+ 22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+ 22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+ 22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+ 22BB;XOR;Sm;0;ON;;;;;N;;;;;
+ 22BC;NAND;Sm;0;ON;;;;;N;;;;;
+ 22BD;NOR;Sm;0;ON;;;;;N;;;;;
+ 22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+ 22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+ 22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+ 22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+ 22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+ 22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+ 22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+ 22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+ 22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+ 22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+ 22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+ 22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+ 22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+ 22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+ 22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+ 22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+ 22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+ 22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+ 22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+ 22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+ 22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+ 22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+ 22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+ 22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+ 22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+ 22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+ 22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+ 22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+ 22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+ 22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+ 22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+ 22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+ 22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+ 22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+ 22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+ 22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+ 22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+ 22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+ 22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+ 22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+ 22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+ 22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+ 22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+ 22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+ 22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+ 22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+ 2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+ 2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+ 2302;HOUSE;So;0;ON;;;;;N;;;;;
+ 2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+ 2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+ 2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+ 2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+ 2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+ 2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+ 2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+ 230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+ 230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+ 230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+ 230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+ 230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+ 230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+ 2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+ 2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+ 2312;ARC;So;0;ON;;;;;N;;;;;
+ 2313;SEGMENT;So;0;ON;;;;;N;;;;;
+ 2314;SECTOR;So;0;ON;;;;;N;;;;;
+ 2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+ 2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+ 2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+ 2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+ 2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+ 231A;WATCH;So;0;ON;;;;;N;;;;;
+ 231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+ 231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+ 231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+ 231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+ 231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+ 2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+ 2322;FROWN;So;0;ON;;;;;N;;;;;
+ 2323;SMILE;So;0;ON;;;;;N;;;;;
+ 2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+ 2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+ 2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+ 2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+ 2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+ 2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+ 232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+ 232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+ 232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+ 232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+ 232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+ 232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+ 2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+ 2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+ 2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+ 2333;SLOPE;So;0;ON;;;;;N;;;;;
+ 2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+ 2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+ 2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+ 2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+ 2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+ 2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+ 233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+ 233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+ 233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+ 233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+ 233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+ 233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+ 2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+ 2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+ 2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+ 2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+ 2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+ 2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+ 2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+ 2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+ 2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+ 2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+ 234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
+ 234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+ 234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+ 234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+ 234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
+ 234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+ 2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+ 2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
+ 2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+ 2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+ 2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+ 2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
+ 2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+ 2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+ 2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+ 2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+ 235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+ 235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+ 235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+ 235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+ 235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+ 235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+ 2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+ 2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
+ 2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+ 2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+ 2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+ 2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+ 2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+ 2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+ 2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+ 2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+ 236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+ 236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+ 236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+ 236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+ 236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+ 236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+ 2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+ 2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+ 2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+ 2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+ 2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+ 2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+ 2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+ 2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+ 2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+ 2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+ 237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+ 237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+ 237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+ 237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+ 237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+ 2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+ 2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+ 2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+ 2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+ 2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+ 2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+ 2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+ 2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+ 2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+ 2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
+ 238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
+ 238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
+ 238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+ 238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+ 238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+ 238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+ 2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+ 2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+ 2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+ 2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+ 2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+ 2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+ 2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+ 2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+ 2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+ 2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+ 239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+ 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+ 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+ 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+ 2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+ 2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+ 2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+ 2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+ 2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+ 2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+ 2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+ 240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+ 240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+ 240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+ 240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+ 240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+ 240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+ 2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+ 2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+ 2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+ 2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+ 2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+ 2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+ 2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+ 2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+ 2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+ 2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+ 241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+ 241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+ 241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+ 241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+ 241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+ 241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+ 2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+ 2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+ 2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+ 2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+ 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+ 2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+ 2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+ 2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+ 2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+ 2442;OCR FORK;So;0;ON;;;;;N;;;;;
+ 2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+ 2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+ 2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+ 2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+ 2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+ 2448;OCR DASH;So;0;ON;;;;;N;;;;;
+ 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+ 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+ 2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
+ 2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
+ 2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
+ 2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
+ 2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
+ 2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
+ 2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
+ 2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
+ 2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
+ 2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
+ 246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
+ 246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
+ 246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
+ 246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
+ 246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
+ 246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
+ 2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
+ 2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
+ 2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
+ 2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
+ 2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
+ 2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
+ 2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
+ 2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
+ 2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
+ 2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
+ 247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
+ 247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
+ 247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
+ 247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+ 247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+ 247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+ 2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+ 2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+ 2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+ 2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+ 2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+ 2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+ 2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+ 2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+ 2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+ 2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+ 248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+ 248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+ 248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+ 248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+ 248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+ 248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+ 2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+ 2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+ 2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+ 2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+ 2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+ 2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+ 2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+ 2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+ 2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+ 2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+ 249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+ 249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+ 249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+ 249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+ 249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+ 249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+ 24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+ 24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+ 24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+ 24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+ 24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+ 24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+ 24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+ 24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+ 24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+ 24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+ 24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+ 24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+ 24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+ 24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+ 24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+ 24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+ 24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+ 24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+ 24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+ 24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+ 24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+ 24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+ 24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+ 24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+ 24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+ 24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+ 24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+ 24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+ 24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+ 24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+ 24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+ 24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+ 24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+ 24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+ 24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+ 24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+ 24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+ 24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+ 24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+ 24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+ 24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+ 24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+ 24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+ 24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+ 24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+ 24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+ 24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+ 24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+ 24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+ 24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+ 24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+ 24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+ 24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+ 24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+ 24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+ 24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+ 24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+ 24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+ 24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+ 24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+ 24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+ 24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+ 24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+ 24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+ 24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+ 24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+ 24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+ 24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+ 24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+ 24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+ 24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+ 24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+ 24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+ 24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+ 24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
+ 2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+ 2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+ 2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+ 2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+ 2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+ 2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+ 2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+ 2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+ 2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+ 2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+ 250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+ 250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+ 250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+ 250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+ 250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+ 250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+ 2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+ 2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+ 2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+ 2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+ 2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+ 2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+ 2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+ 2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+ 2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+ 2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+ 251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+ 251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+ 251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+ 251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+ 251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+ 251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+ 2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+ 2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+ 2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+ 2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+ 2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+ 2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+ 2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+ 2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+ 2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+ 2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+ 252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+ 252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+ 252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+ 252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+ 252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+ 252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+ 2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+ 2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+ 2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+ 2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+ 2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+ 2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+ 2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+ 2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+ 2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+ 2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+ 253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+ 253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+ 253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+ 253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+ 253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+ 253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+ 2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+ 2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+ 2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+ 2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+ 2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+ 2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+ 2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+ 2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+ 2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+ 2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+ 254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+ 254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+ 254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+ 254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+ 254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+ 254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+ 2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+ 2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+ 2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+ 2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+ 2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+ 2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+ 2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+ 2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+ 2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+ 2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+ 255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+ 255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+ 255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+ 255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+ 255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+ 255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+ 2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+ 2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+ 2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+ 2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+ 2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+ 2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+ 2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+ 2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+ 2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+ 2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+ 256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+ 256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+ 256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+ 256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+ 256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+ 256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+ 2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+ 2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+ 2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+ 2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+ 2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+ 2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+ 2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+ 2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+ 2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+ 2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+ 257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+ 257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+ 257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+ 257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+ 257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+ 257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+ 2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+ 2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+ 2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+ 2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+ 2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+ 2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+ 2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+ 258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+ 258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+ 258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+ 258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+ 2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+ 2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+ 2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+ 2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+ 2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+ 2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+ 25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+ 25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+ 25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+ 25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+ 25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+ 25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+ 25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+ 25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+ 25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+ 25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+ 25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+ 25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+ 25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+ 25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+ 25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+ 25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+ 25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+ 25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+ 25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+ 25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+ 25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+ 25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+ 25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+ 25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+ 25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+ 25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+ 25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+ 25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+ 25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+ 25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+ 25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+ 25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+ 25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+ 25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+ 25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+ 25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+ 25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+ 25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+ 25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+ 25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+ 25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+ 25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+ 25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+ 25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+ 25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+ 25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+ 25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+ 25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+ 25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+ 25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+ 25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+ 25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+ 25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+ 25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+ 25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+ 25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+ 25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+ 25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+ 25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+ 25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+ 25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+ 25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+ 25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+ 25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+ 25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+ 25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+ 25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+ 25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+ 25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+ 25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+ 25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+ 25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+ 25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+ 25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+ 25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+ 25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+ 2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+ 2601;CLOUD;So;0;ON;;;;;N;;;;;
+ 2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+ 2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+ 2604;COMET;So;0;ON;;;;;N;;;;;
+ 2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+ 2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+ 2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+ 2609;SUN;So;0;ON;;;;;N;;;;;
+ 260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+ 260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+ 260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+ 260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+ 260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+ 260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+ 2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+ 2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+ 2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+ 2613;SALTIRE;So;0;ON;;;;;N;;;;;
+ 2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+ 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+ 2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+ 2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+ 2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+ 2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+ 2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+ 2625;ANKH;So;0;ON;;;;;N;;;;;
+ 2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+ 2627;CHI RHO;So;0;ON;;;;;N;;;;;
+ 2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+ 2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+ 262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+ 262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+ 262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+ 262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+ 262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+ 262F;YIN YANG;So;0;ON;;;;;N;;;;;
+ 2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+ 2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+ 2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+ 2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+ 2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+ 2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+ 2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+ 2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+ 2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+ 2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+ 263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+ 263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+ 263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+ 263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+ 263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+ 263F;MERCURY;So;0;ON;;;;;N;;;;;
+ 2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+ 2641;EARTH;So;0;ON;;;;;N;;;;;
+ 2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+ 2643;JUPITER;So;0;ON;;;;;N;;;;;
+ 2644;SATURN;So;0;ON;;;;;N;;;;;
+ 2645;URANUS;So;0;ON;;;;;N;;;;;
+ 2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+ 2647;PLUTO;So;0;ON;;;;;N;;;;;
+ 2648;ARIES;So;0;ON;;;;;N;;;;;
+ 2649;TAURUS;So;0;ON;;;;;N;;;;;
+ 264A;GEMINI;So;0;ON;;;;;N;;;;;
+ 264B;CANCER;So;0;ON;;;;;N;;;;;
+ 264C;LEO;So;0;ON;;;;;N;;;;;
+ 264D;VIRGO;So;0;ON;;;;;N;;;;;
+ 264E;LIBRA;So;0;ON;;;;;N;;;;;
+ 264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+ 2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+ 2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+ 2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+ 2653;PISCES;So;0;ON;;;;;N;;;;;
+ 2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+ 2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+ 2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+ 2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+ 2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+ 2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+ 265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+ 265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+ 265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+ 265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+ 265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+ 265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+ 2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+ 2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+ 2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+ 2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+ 2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+ 2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+ 2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+ 2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+ 2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+ 2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+ 266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+ 266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+ 266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+ 266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+ 266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+ 266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+ 2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+ 2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+ 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+ 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+ 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+ 2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+ 2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+ 2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+ 2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+ 2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+ 270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+ 270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+ 270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+ 270F;PENCIL;So;0;ON;;;;;N;;;;;
+ 2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+ 2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+ 2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+ 2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+ 2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+ 2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+ 2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+ 2717;BALLOT X;So;0;ON;;;;;N;;;;;
+ 2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+ 2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+ 271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+ 271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+ 271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+ 271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+ 271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+ 271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+ 2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+ 2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+ 2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+ 2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+ 2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+ 272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+ 272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+ 272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+ 272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+ 2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+ 2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+ 2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+ 2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+ 2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+ 2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+ 273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+ 273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+ 273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+ 273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+ 2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+ 2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+ 2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+ 2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+ 2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+ 2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+ 2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+ 2747;SPARKLE;So;0;ON;;;;;N;;;;;
+ 2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+ 2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+ 274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+ 274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+ 274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+ 274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+ 2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+ 2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+ 2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+ 275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+ 275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+ 2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+ 2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+ 2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+ 2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+ 2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+ 2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+ 2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+ 2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+ 2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+ 277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+ 277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+ 277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+ 277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+ 277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+ 277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+ 2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+ 2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+ 2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+ 2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+ 2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+ 2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+ 2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+ 2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+ 2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+ 2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+ 278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+ 278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+ 278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+ 278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+ 278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+ 278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+ 2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+ 2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+ 2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+ 2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+ 2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+ 2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+ 2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+ 279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+ 279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+ 279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+ 279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+ 279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+ 279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+ 27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+ 27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+ 27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+ 27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+ 27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+ 27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+ 27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+ 27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+ 27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+ 27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+ 27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+ 27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+ 27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+ 27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+ 27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+ 27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+ 27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+ 27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+ 27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+ 27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+ 27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+ 27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+ 27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+ 27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+ 27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+ 27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+ 27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+ 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+ 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+ 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+ 2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
+ 2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
+ 2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
+ 2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
+ 2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
+ 2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
+ 2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
+ 2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
+ 2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
+ 2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
+ 280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
+ 280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
+ 280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
+ 280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
+ 280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
+ 280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
+ 2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
+ 2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
+ 2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
+ 2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
+ 2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
+ 2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
+ 2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
+ 2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
+ 2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
+ 2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
+ 281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
+ 281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
+ 281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
+ 281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
+ 281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
+ 281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
+ 2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
+ 2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
+ 2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
+ 2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
+ 2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
+ 2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
+ 2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
+ 2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
+ 2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
+ 2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
+ 282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
+ 282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
+ 282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
+ 282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
+ 282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
+ 282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
+ 2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
+ 2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
+ 2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
+ 2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
+ 2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
+ 2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
+ 2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
+ 2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
+ 2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
+ 2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
+ 283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
+ 283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
+ 283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
+ 283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
+ 283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
+ 283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
+ 2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
+ 2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
+ 2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
+ 2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
+ 2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
+ 2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
+ 2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
+ 2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
+ 2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
+ 2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
+ 284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
+ 284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
+ 284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
+ 284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
+ 284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
+ 284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
+ 2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
+ 2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
+ 2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
+ 2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
+ 2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
+ 2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
+ 2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
+ 2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
+ 2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
+ 2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
+ 285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
+ 285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
+ 285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
+ 285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
+ 285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
+ 285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
+ 2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
+ 2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
+ 2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
+ 2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
+ 2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
+ 2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
+ 2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
+ 2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
+ 2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
+ 2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
+ 286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
+ 286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
+ 286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
+ 286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
+ 286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
+ 286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
+ 2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
+ 2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
+ 2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
+ 2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
+ 2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
+ 2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
+ 2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
+ 2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
+ 2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
+ 2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
+ 287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
+ 287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
+ 287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
+ 287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
+ 287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
+ 287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
+ 2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
+ 2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
+ 2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
+ 2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
+ 2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
+ 2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
+ 2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
+ 2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
+ 2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
+ 2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
+ 288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
+ 288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
+ 288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
+ 288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
+ 288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
+ 288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
+ 2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
+ 2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
+ 2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
+ 2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
+ 2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
+ 2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
+ 2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
+ 2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
+ 2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
+ 2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
+ 289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
+ 289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
+ 289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
+ 289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
+ 289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
+ 289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
+ 28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
+ 28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
+ 28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
+ 28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
+ 28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
+ 28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
+ 28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
+ 28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
+ 28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
+ 28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
+ 28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
+ 28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
+ 28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
+ 28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
+ 28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
+ 28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
+ 28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
+ 28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
+ 28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
+ 28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
+ 28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
+ 28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
+ 28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
+ 28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
+ 28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
+ 28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
+ 28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
+ 28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
+ 28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
+ 28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
+ 28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
+ 28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
+ 28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
+ 28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
+ 28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
+ 28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
+ 28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
+ 28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
+ 28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
+ 28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
+ 28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
+ 28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
+ 28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
+ 28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
+ 28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
+ 28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
+ 28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
+ 28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
+ 28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
+ 28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
+ 28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
+ 28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
+ 28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
+ 28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
+ 28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
+ 28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
+ 28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
+ 28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
+ 28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
+ 28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
+ 28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
+ 28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
+ 28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
+ 28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
+ 28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
+ 28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
+ 28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
+ 28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
+ 28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
+ 28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
+ 28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
+ 28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
+ 28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
+ 28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
+ 28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
+ 28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
+ 28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
+ 28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
+ 28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
+ 28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
+ 28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
+ 28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
+ 28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
+ 28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
+ 28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
+ 28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
+ 28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
+ 28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
+ 28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
+ 28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
+ 28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
+ 28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
+ 28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
+ 28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
+ 28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
+ 28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
+ 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+ 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+ 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+ 2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+ 2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+ 2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+ 2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+ 2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+ 2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+ 2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+ 2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+ 2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+ 2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+ 2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+ 2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+ 2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+ 2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+ 2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+ 2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+ 2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+ 2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+ 2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+ 2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+ 2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+ 2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+ 2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+ 2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+ 2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+ 2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+ 2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+ 2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+ 2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+ 2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+ 2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+ 2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+ 2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+ 2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+ 2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+ 2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+ 2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+ 2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+ 2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+ 2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+ 2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+ 2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+ 2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+ 2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+ 2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+ 2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+ 2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+ 2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+ 2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+ 2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+ 2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+ 2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+ 2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+ 2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+ 2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+ 2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+ 2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+ 2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+ 2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+ 2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+ 2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+ 2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+ 2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+ 2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+ 2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+ 2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+ 2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+ 2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+ 2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+ 2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+ 2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+ 2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+ 2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+ 2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+ 2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+ 2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+ 2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+ 2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+ 2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+ 2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+ 2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+ 2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+ 2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+ 2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+ 2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+ 2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+ 2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+ 2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+ 2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+ 2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+ 2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+ 2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+ 2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+ 2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+ 2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+ 2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+ 2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+ 2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+ 2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+ 2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+ 2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+ 2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+ 2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+ 2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+ 2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+ 2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+ 2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+ 2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+ 2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+ 2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+ 2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+ 2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+ 2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+ 2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+ 2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+ 2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+ 2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+ 2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+ 2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+ 2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+ 2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+ 2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+ 2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+ 2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+ 2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+ 2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+ 2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+ 2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+ 2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+ 2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+ 2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+ 2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+ 2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+ 2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+ 2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+ 2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+ 2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+ 2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+ 2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+ 2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+ 2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+ 2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+ 2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+ 2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+ 2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+ 2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+ 2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+ 2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+ 2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+ 2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+ 2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+ 2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+ 2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+ 2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+ 2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+ 2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+ 2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+ 2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+ 2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+ 2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+ 2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+ 2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+ 2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+ 2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+ 2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+ 2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+ 2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+ 2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+ 2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+ 2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+ 2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+ 2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+ 2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+ 2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+ 2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+ 2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+ 2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+ 2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+ 2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+ 2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+ 2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+ 2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+ 2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+ 2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+ 2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+ 2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+ 2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+ 2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+ 2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+ 2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+ 2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+ 2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+ 2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+ 2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+ 2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+ 2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+ 2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+ 2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+ 2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+ 2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+ 2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+ 2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+ 2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+ 2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+ 2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+ 2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+ 2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+ 2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+ 2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+ 2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+ 2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+ 2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+ 2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+ 2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+ 2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+ 2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+ 2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+ 2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+ 2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+ 2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+ 2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+ 2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+ 2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+ 2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+ 2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+ 2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+ 2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+ 2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+ 2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+ 2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+ 2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+ 2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+ 2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+ 2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+ 2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+ 2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+ 2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+ 2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+ 2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+ 2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+ 2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+ 2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+ 2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+ 2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+ 2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+ 2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+ 2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+ 2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+ 2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+ 2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+ 2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+ 2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+ 2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+ 2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+ 2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+ 2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+ 2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+ 2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+ 2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+ 2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+ 2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+ 2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+ 2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+ 2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+ 2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+ 2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+ 2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+ 2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+ 2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+ 2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+ 2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+ 2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+ 2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+ 2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+ 2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+ 2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+ 2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+ 2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+ 2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+ 2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+ 2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+ 2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+ 2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+ 2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+ 2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+ 2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+ 2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+ 2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+ 2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+ 2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+ 2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+ 2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+ 2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+ 2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+ 2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+ 2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+ 2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+ 2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+ 2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+ 2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+ 2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+ 2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+ 2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+ 2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+ 2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+ 2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+ 2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+ 2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+ 2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+ 2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+ 2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+ 2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+ 2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+ 2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+ 2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+ 2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+ 2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+ 2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+ 2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+ 2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+ 2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+ 2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+ 2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+ 2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+ 2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+ 2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+ 2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+ 2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+ 2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+ 2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+ 2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+ 2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+ 2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+ 2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+ 2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+ 2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+ 2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+ 2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+ 3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+ 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+ 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+ 3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+ 3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+ 3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+ 3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+ 3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+ 3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+ 3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+ 300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+ 300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+ 300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+ 300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+ 300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+ 300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+ 3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+ 3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+ 3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+ 3013;GETA MARK;So;0;ON;;;;;N;;;;;
+ 3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+ 3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+ 3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+ 3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+ 3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+ 3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+ 301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+ 301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+ 301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+ 301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+ 301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+ 301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+ 3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+ 3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+ 3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+ 3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+ 3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+ 3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+ 3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+ 3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+ 3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+ 3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+ 302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+ 302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+ 302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+ 302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+ 302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+ 302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+ 3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+ 3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+ 3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+ 3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+ 3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+ 3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+ 3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+ 3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+ 3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+ 3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+ 303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+ 303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+ 303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+ 3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+ 3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+ 3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+ 3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+ 3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+ 3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+ 3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+ 3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+ 3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+ 304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+ 304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+ 304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+ 304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+ 304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+ 304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+ 3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+ 3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+ 3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+ 3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+ 3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+ 3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+ 3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+ 3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+ 3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+ 3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+ 305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+ 305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+ 305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+ 305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+ 305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+ 305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+ 3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+ 3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+ 3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+ 3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+ 3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+ 3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+ 3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+ 3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+ 3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+ 3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+ 306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+ 306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+ 306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+ 306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+ 306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+ 306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+ 3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+ 3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+ 3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+ 3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+ 3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+ 3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+ 3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+ 3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+ 3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+ 3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+ 307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+ 307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+ 307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+ 307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+ 307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+ 307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+ 3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+ 3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+ 3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+ 3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+ 3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+ 3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+ 3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+ 3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+ 3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+ 3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+ 308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+ 308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+ 308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+ 308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+ 308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+ 308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+ 3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+ 3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+ 3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+ 3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+ 3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+ 3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+ 309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+ 309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+ 309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+ 309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+ 309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+ 30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+ 30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+ 30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+ 30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+ 30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+ 30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+ 30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+ 30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+ 30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+ 30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+ 30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+ 30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+ 30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+ 30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+ 30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+ 30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+ 30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+ 30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+ 30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+ 30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+ 30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+ 30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+ 30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+ 30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+ 30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+ 30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+ 30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+ 30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+ 30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+ 30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+ 30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+ 30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+ 30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+ 30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+ 30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+ 30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+ 30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+ 30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+ 30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+ 30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+ 30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+ 30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+ 30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+ 30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+ 30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+ 30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+ 30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+ 30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+ 30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+ 30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+ 30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+ 30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+ 30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+ 30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+ 30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+ 30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+ 30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+ 30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+ 30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+ 30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+ 30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+ 30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+ 30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+ 30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+ 30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+ 30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+ 30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+ 30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+ 30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+ 30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+ 30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+ 30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+ 30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+ 30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+ 30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+ 30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+ 30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+ 30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+ 30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+ 30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+ 30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+ 30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+ 30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+ 30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+ 30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+ 30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+ 30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+ 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+ 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+ 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+ 30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
+ 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+ 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+ 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+ 3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+ 3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+ 3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+ 3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+ 3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+ 310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+ 310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+ 310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+ 310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+ 310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+ 310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+ 3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+ 3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+ 3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+ 3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+ 3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+ 3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+ 3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+ 3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+ 3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+ 3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+ 311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+ 311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+ 311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+ 311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+ 311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+ 311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+ 3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+ 3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+ 3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+ 3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+ 3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+ 3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+ 3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+ 3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+ 3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+ 3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+ 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+ 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+ 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+ 3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+ 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+ 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+ 3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+ 3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+ 3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+ 3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+ 3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+ 3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+ 313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+ 313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+ 313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+ 313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+ 313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+ 313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+ 3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+ 3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+ 3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+ 3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+ 3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+ 3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+ 3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+ 3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+ 3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+ 3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+ 314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+ 314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+ 314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+ 314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+ 314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+ 314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+ 3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+ 3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+ 3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+ 3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+ 3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+ 3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+ 3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+ 3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+ 3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+ 3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+ 315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+ 315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+ 315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+ 315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+ 315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+ 315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+ 3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+ 3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+ 3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+ 3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+ 3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+ 3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+ 3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+ 3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+ 3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+ 3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+ 316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+ 316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+ 316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+ 316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+ 316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+ 316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+ 3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+ 3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+ 3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+ 3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+ 3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+ 3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+ 3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+ 3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+ 3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+ 3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+ 317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+ 317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+ 317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+ 317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+ 317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+ 317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+ 3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+ 3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+ 3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+ 3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+ 3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+ 3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+ 3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+ 3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+ 3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+ 3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+ 318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+ 318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+ 318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+ 318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+ 318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+ 3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+ 3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+ 3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
+ 3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
+ 3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
+ 3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
+ 3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+ 3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+ 3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+ 3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+ 319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+ 319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+ 319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+ 319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+ 319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+ 319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+ 31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+ 31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+ 31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+ 31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+ 31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+ 31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+ 31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+ 31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+ 31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+ 31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+ 31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+ 31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+ 31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+ 31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+ 31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+ 31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+ 31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+ 31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+ 31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+ 31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+ 31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+ 31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+ 31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+ 31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+ 3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+ 3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+ 3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+ 3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+ 3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+ 3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+ 3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+ 3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+ 3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+ 3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+ 320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+ 320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+ 320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+ 320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+ 320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+ 320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+ 3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+ 3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+ 3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+ 3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+ 3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+ 3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+ 3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+ 3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+ 3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+ 3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+ 321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+ 321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+ 321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+ 3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
+ 3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
+ 3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
+ 3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
+ 3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
+ 3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
+ 3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
+ 3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
+ 3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
+ 3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
+ 322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+ 322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+ 322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+ 322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+ 322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+ 322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+ 3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+ 3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+ 3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+ 3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+ 3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+ 3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+ 3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+ 3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+ 3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+ 3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+ 323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+ 323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+ 323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+ 323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+ 323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+ 323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+ 3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+ 3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+ 3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+ 3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+ 3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+ 3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+ 3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+ 3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+ 3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+ 3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+ 3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+ 3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+ 3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+ 3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+ 326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+ 326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+ 326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+ 326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+ 326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+ 326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+ 3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+ 3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+ 3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+ 3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+ 3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+ 3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+ 3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+ 3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+ 3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+ 3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+ 327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+ 327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+ 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+ 3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+ 3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+ 3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+ 3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+ 3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+ 3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+ 3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+ 3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+ 3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+ 3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+ 328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+ 328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+ 328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+ 328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+ 328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+ 328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+ 3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+ 3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+ 3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+ 3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+ 3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+ 3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+ 3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+ 3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+ 3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+ 3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+ 329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+ 329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+ 329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+ 329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+ 329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+ 329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+ 32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+ 32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+ 32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+ 32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+ 32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+ 32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+ 32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+ 32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+ 32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+ 32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+ 32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+ 32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+ 32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+ 32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+ 32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+ 32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+ 32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+ 32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+ 32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+ 32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+ 32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+ 32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+ 32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+ 32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+ 32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+ 32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+ 32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+ 32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+ 32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+ 32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+ 32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+ 32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+ 32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+ 32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+ 32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+ 32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+ 32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+ 32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+ 32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+ 32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+ 32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+ 32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+ 32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+ 32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+ 32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+ 32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+ 32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+ 32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+ 32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+ 32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+ 32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+ 32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+ 32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+ 32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+ 32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+ 32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+ 32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+ 32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+ 32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+ 32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+ 32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+ 32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+ 32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+ 32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+ 32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+ 32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+ 32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+ 32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+ 32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+ 32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+ 32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+ 32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+ 32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+ 32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+ 32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+ 32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+ 3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+ 3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+ 3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+ 3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+ 3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+ 3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+ 3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+ 3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+ 3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+ 3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+ 330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+ 330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+ 330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+ 330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+ 330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+ 330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+ 3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+ 3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+ 3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+ 3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+ 3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+ 3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+ 3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+ 3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+ 3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+ 3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+ 331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+ 331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+ 331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+ 331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+ 331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+ 331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+ 3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+ 3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+ 3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+ 3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+ 3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+ 3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+ 3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+ 3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+ 3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+ 3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+ 332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+ 332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+ 332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+ 332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+ 332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+ 332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+ 3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+ 3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+ 3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+ 3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+ 3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+ 3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+ 3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+ 3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+ 3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+ 3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+ 333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+ 333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+ 333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+ 333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+ 333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+ 333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+ 3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+ 3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+ 3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+ 3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+ 3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+ 3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+ 3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+ 3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+ 3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+ 3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+ 334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+ 334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+ 334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+ 334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+ 334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+ 334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+ 3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+ 3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+ 3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+ 3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+ 3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+ 3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+ 3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+ 3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+ 3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+ 3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+ 335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+ 335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+ 335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+ 335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+ 335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+ 335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+ 3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+ 3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+ 3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+ 3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+ 3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+ 3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+ 3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+ 3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+ 3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+ 3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+ 336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+ 336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+ 336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+ 336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+ 336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+ 336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+ 3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+ 3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+ 3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+ 3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+ 3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+ 3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+ 3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+ 337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+ 337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+ 337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+ 337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+ 337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+ 3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+ 3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+ 3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+ 3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+ 3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+ 3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+ 3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+ 3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+ 3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+ 3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+ 338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+ 338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+ 338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+ 338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+ 338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+ 338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+ 3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+ 3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+ 3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+ 3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+ 3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+ 3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+ 3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+ 3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+ 3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+ 3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+ 339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+ 339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+ 339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+ 339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+ 339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+ 339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+ 33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+ 33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+ 33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+ 33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+ 33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+ 33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+ 33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+ 33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+ 33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+ 33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+ 33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+ 33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+ 33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+ 33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+ 33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+ 33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+ 33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+ 33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+ 33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+ 33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+ 33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+ 33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+ 33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+ 33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+ 33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+ 33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+ 33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+ 33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+ 33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+ 33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+ 33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+ 33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+ 33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+ 33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+ 33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+ 33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+ 33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+ 33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+ 33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+ 33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+ 33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+ 33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+ 33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+ 33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+ 33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+ 33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+ 33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+ 33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+ 33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+ 33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+ 33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+ 33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+ 33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+ 33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+ 33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+ 33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+ 33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+ 33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+ 33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+ 33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+ 33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+ 33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+ 33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+ 33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+ 33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+ 33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+ 33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+ 33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+ 33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+ 33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+ 33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+ 33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+ 33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+ 33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+ 33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+ 33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+ 33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+ 33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+ 33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+ 33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+ 33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+ 33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+ 33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+ 33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+ 33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+ 33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+ 33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+ 33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+ 33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+ 33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+ 33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+ 33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+ 33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+ 3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+ 4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+ 4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+ 9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+ A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+ A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+ A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+ A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+ A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+ A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+ A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+ A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+ A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+ A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+ A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+ A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+ A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+ A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+ A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+ A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+ A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+ A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+ A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+ A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+ A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+ A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+ A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+ A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+ A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+ A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+ A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+ A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+ A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+ A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+ A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+ A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+ A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+ A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+ A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+ A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+ A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+ A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+ A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+ A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+ A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+ A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+ A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+ A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+ A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+ A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+ A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+ A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+ A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+ A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+ A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+ A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+ A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+ A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+ A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+ A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+ A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+ A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+ A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+ A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+ A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+ A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+ A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+ A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+ A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+ A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+ A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+ A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+ A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+ A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+ A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+ A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+ A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+ A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+ A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+ A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+ A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+ A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+ A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+ A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+ A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+ A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+ A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+ A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+ A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+ A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+ A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+ A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+ A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+ A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+ A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+ A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+ A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+ A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+ A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+ A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+ A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+ A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+ A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+ A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+ A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+ A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+ A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+ A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+ A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+ A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+ A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+ A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+ A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+ A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+ A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+ A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+ A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+ A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+ A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+ A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+ A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+ A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+ A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+ A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+ A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+ A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+ A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+ A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+ A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+ A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+ A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+ A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+ A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+ A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+ A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+ A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+ A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+ A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+ A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+ A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+ A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+ A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+ A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+ A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+ A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+ A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+ A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+ A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+ A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+ A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+ A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+ A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+ A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+ A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+ A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+ A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+ A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+ A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+ A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+ A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+ A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+ A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+ A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+ A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+ A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+ A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+ A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+ A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+ A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+ A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+ A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+ A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+ A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+ A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+ A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+ A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+ A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+ A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+ A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+ A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+ A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+ A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+ A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+ A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+ A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+ A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+ A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+ A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+ A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+ A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+ A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+ A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+ A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+ A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+ A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+ A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+ A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+ A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+ A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+ A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+ A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+ A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+ A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+ A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+ A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+ A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+ A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+ A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+ A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+ A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+ A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+ A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+ A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+ A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+ A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+ A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+ A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+ A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+ A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+ A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+ A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+ A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+ A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+ A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+ A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+ A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+ A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+ A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+ A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+ A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+ A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+ A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+ A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+ A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+ A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+ A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+ A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+ A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+ A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+ A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+ A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+ A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+ A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+ A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+ A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+ A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+ A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+ A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+ A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+ A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+ A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+ A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+ A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+ A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+ A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+ A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+ A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+ A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+ A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+ A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+ A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+ A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+ A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+ A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+ A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+ A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+ A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+ A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+ A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+ A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+ A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+ A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+ A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+ A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+ A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+ A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+ A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+ A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+ A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+ A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+ A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+ A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+ A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+ A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+ A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+ A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+ A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+ A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+ A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+ A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+ A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+ A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+ A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+ A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+ A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+ A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+ A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+ A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+ A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+ A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+ A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+ A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+ A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+ A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+ A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+ A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+ A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+ A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+ A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+ A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+ A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+ A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+ A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+ A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+ A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+ A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+ A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+ A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+ A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+ A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+ A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+ A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+ A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+ A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+ A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+ A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+ A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+ A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+ A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+ A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+ A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+ A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+ A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+ A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+ A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+ A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+ A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+ A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+ A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+ A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+ A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+ A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+ A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+ A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+ A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+ A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+ A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+ A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+ A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+ A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+ A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+ A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+ A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+ A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+ A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+ A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+ A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+ A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+ A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+ A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+ A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+ A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+ A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+ A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+ A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+ A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+ A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+ A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+ A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+ A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+ A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+ A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+ A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+ A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+ A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+ A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+ A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+ A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+ A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+ A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+ A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+ A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+ A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+ A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+ A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+ A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+ A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+ A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+ A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+ A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+ A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+ A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+ A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+ A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+ A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+ A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+ A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+ A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+ A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+ A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+ A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+ A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+ A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+ A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+ A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+ A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+ A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+ A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+ A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+ A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+ A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+ A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+ A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+ A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+ A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+ A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+ A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+ A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+ A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+ A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+ A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+ A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+ A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+ A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+ A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+ A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+ A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+ A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+ A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+ A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+ A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+ A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+ A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+ A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+ A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+ A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+ A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+ A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+ A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+ A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+ A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+ A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+ A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+ A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+ A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+ A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+ A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+ A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+ A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+ A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+ A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+ A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+ A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+ A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+ A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+ A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+ A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+ A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+ A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+ A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+ A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+ A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+ A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+ A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+ A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+ A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+ A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+ A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+ A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+ A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+ A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+ A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+ A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+ A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+ A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+ A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+ A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+ A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+ A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+ A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+ A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+ A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+ A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+ A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+ A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+ A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+ A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+ A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+ A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+ A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+ A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+ A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+ A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+ A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+ A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+ A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+ A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+ A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+ A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+ A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+ A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+ A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+ A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+ A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+ A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+ A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+ A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+ A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+ A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+ A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+ A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+ A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+ A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+ A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+ A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+ A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+ A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+ A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+ A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+ A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+ A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+ A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+ A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+ A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+ A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+ A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+ A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+ A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+ A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+ A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+ A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+ A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+ A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+ A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+ A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+ A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+ A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+ A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+ A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+ A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+ A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+ A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+ A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+ A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+ A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+ A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+ A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+ A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+ A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+ A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+ A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+ A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+ A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+ A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+ A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+ A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+ A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+ A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+ A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+ A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+ A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+ A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+ A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+ A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+ A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+ A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+ A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+ A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+ A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+ A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+ A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+ A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+ A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+ A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+ A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+ A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+ A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+ A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+ A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+ A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+ A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+ A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+ A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+ A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+ A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+ A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+ A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+ A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+ A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+ A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+ A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+ A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+ A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+ A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+ A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+ A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+ A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+ A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+ A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+ A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+ A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+ A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+ A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+ A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+ A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+ A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+ A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+ A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+ A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+ A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+ A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+ A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+ A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+ A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+ A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+ A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+ A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+ A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+ A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+ A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+ A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+ A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+ A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+ A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+ A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+ A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+ A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+ A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+ A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+ A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+ A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+ A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+ A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+ A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+ A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+ A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+ A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+ A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+ A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+ A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+ A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+ A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+ A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+ A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+ A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+ A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+ A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+ A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+ A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+ A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+ A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+ A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+ A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+ A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+ A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+ A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+ A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+ A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+ A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+ A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+ A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+ A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+ A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+ A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+ A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+ A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+ A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+ A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+ A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+ A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+ A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+ A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+ A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+ A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+ A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+ A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+ A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+ A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+ A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+ A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+ A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+ A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+ A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+ A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+ A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+ A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+ A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+ A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+ A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+ A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+ A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+ A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+ A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+ A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+ A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+ A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+ A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+ A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+ A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+ A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+ A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+ A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+ A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+ A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+ A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+ A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+ A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+ A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+ A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+ A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+ A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+ A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+ A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+ A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+ A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+ A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+ A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+ A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+ A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+ A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+ A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+ A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+ A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+ A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+ A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+ A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+ A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+ A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+ A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+ A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+ A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+ A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+ A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+ A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+ A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+ A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+ A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+ A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+ A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+ A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+ A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+ A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+ A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+ A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+ A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+ A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+ A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+ A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+ A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+ A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+ A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+ A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+ A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+ A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+ A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+ A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+ A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+ A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+ A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+ A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+ A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+ A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+ A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+ A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+ A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+ A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+ A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+ A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+ A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+ A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+ A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+ A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+ A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+ A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+ A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+ A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+ A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+ A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+ A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+ A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+ A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+ A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+ A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+ A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+ A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+ A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+ A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+ A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+ A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+ A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+ A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+ A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+ A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+ A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+ A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+ A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+ A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+ A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+ A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+ A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+ A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+ A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+ A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+ A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+ A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+ A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+ A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+ A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+ A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+ A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+ A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+ A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+ A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+ A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+ A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+ A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+ A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+ A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+ A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+ A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+ A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+ A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+ A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+ A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+ A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+ A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+ A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+ A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+ A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+ A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+ A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+ A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+ A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+ A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+ A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+ A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+ A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+ A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+ A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+ A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+ A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+ A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+ A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+ A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+ A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+ A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+ A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+ A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+ A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+ A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+ A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+ A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+ A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+ A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+ A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+ A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+ A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+ A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+ A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+ A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+ A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+ A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+ A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+ A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+ A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+ A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+ A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+ A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+ A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+ A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+ A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+ A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+ A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+ A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+ A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+ A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+ A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+ A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+ A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+ A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+ A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+ A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+ A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+ A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+ A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+ A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+ A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+ A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+ A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+ A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+ A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+ A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+ A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+ A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+ A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+ A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+ A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+ A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+ A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+ A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+ A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+ A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+ A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+ A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+ A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+ A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+ A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+ A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+ A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+ A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+ A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+ A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+ A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+ A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+ A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+ A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+ A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+ A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+ A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+ A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+ A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+ A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+ A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+ A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+ A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+ A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+ A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+ A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+ A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+ A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+ A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+ A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+ A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+ A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+ A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+ A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+ A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+ A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+ A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+ A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+ A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+ A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+ A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+ A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+ A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+ A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+ A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+ A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+ A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+ A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+ A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+ A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+ A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+ A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+ A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+ A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+ A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+ A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+ A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+ A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+ A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+ A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+ A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+ A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+ A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+ A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+ A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+ A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+ A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+ A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+ A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+ A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+ A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+ A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+ A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+ A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+ A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+ A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+ A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+ A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+ A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+ A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+ A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+ A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+ A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+ A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+ A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+ A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+ A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+ A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+ A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+ A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+ A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+ A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+ A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+ A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+ A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+ A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+ A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+ A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+ A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+ A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+ A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+ A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+ A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+ A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+ A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+ A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+ A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+ A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+ A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+ A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+ A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+ A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+ A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+ A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+ A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+ A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+ A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+ A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+ A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+ A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+ A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+ A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+ A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+ A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+ A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+ A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+ A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+ A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+ A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+ A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+ A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+ A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+ A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+ A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+ A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+ A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+ A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+ A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+ A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+ A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+ A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+ A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+ A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+ A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+ A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+ A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+ A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+ A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+ A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+ A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+ A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+ A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+ A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+ A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+ A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+ A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+ A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+ A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+ A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+ A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+ A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+ A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+ A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+ A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+ A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+ A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+ A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+ A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+ A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+ A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+ A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+ A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+ A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+ A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+ A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+ A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+ A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+ A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+ A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+ A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+ A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+ A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+ A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+ A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+ A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+ A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+ A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+ A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+ A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+ A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+ A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+ A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+ A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+ A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+ A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+ A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+ A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+ A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+ A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+ A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+ A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+ A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+ A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+ A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+ A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+ A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+ A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+ A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+ A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+ A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+ A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+ A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+ A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+ A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+ A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+ A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+ A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+ A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+ A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+ A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+ A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+ A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+ A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+ A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+ A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+ A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+ A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+ A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+ A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+ A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+ A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+ A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+ A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+ A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+ A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+ A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+ A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+ A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+ A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+ A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+ A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+ A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+ A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+ A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+ A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+ A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+ A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+ A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+ A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+ A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+ A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+ A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+ A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+ A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+ A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+ A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+ A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+ A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+ A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+ A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+ A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+ A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+ A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+ A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+ A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+ A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+ A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+ A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+ A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+ A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+ A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+ A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+ A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+ A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+ A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+ A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+ A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+ A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+ A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+ A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+ A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+ A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+ A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+ A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+ A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+ A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+ A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+ A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+ A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+ A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+ A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+ A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+ A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+ A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+ A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+ A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+ A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+ A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+ A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+ A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+ A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+ A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+ A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+ A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+ A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+ A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+ A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+ A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+ A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+ A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+ A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+ A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+ A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+ A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+ A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+ A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+ A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+ AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+ D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+ D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+ DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+ DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+ DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+ DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+ DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+ E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+ F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+ F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+ F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+ F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+ F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+ F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+ F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+ F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+ F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+ F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+ F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+ F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+ F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+ F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+ F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+ F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+ F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+ F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+ F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+ F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+ F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+ F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+ F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+ F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+ F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+ F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+ F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+ F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+ F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+ F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+ F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+ F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+ F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+ F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+ F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+ F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+ F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+ F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+ F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+ F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+ F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+ F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+ F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+ F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+ F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+ F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+ F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+ F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+ F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+ F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+ F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+ F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+ F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+ F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+ F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+ F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+ F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+ F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+ F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+ F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+ F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+ F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+ F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+ F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+ F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+ F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+ F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+ F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+ F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+ F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+ F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+ F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+ F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+ F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+ F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+ F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+ F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+ F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+ F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+ F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+ F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+ F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+ F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;;
+ F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+ F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+ F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+ F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+ F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+ F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+ F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+ F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+ F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+ F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+ F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+ F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+ F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+ F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+ F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+ F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+ F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+ F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+ F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+ F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+ F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+ F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+ F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+ F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+ F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+ F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
+ F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+ F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+ F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+ F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+ F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+ F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+ F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+ F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
+ F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+ F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+ F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+ F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+ F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
+ F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+ F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+ F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+ F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+ F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+ F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+ F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+ F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+ F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+ F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+ F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+ F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+ F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+ F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+ F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+ F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+ F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+ F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+ F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+ F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+ F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+ F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+ F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+ F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+ F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+ F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+ F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+ F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+ F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+ F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+ F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+ F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+ F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+ F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+ F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+ F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+ F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+ F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+ F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+ F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+ F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+ F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+ F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+ F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+ F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+ F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+ F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+ F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+ F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+ F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+ F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+ F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+ F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+ F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+ F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+ F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+ F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+ F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
+ F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+ F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+ F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+ F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+ F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+ F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+ F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+ F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+ F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+ F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+ F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+ F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+ F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+ F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+ F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+ F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+ F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+ F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+ F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+ F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+ F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+ F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+ F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+ F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+ F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+ F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+ F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+ F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+ F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+ F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+ F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
+ F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+ F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
+ F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+ F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+ F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+ F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+ F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+ F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+ F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+ F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+ F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+ F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+ F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+ F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+ F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+ F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+ F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+ F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+ F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+ F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+ F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+ F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+ F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+ F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+ F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+ F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+ F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+ F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+ F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+ F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+ F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+ F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+ F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+ F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+ F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+ F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+ F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+ F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+ F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+ F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+ F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+ F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+ F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+ F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
+ F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+ F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+ FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+ FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+ FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+ FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+ FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+ FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+ FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+ FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+ FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+ FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+ FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+ FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+ FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+ FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+ FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+ FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+ FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+ FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+ FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+ FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+ FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+ FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+ FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+ FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+ FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+ FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+ FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+ FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+ FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+ FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+ FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+ FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
+ FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+ FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+ FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+ FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
+ FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+ FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+ FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+ FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+ FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+ FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+ FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+ FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+ FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+ FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+ FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+ FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+ FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+ FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+ FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+ FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+ FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+ FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+ FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+ FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+ FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+ FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+ FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+ FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+ FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+ FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+ FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+ FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+ FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+ FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+ FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+ FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+ FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+ FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+ FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
+ FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+ FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+ FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+ FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+ FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+ FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+ FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+ FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+ FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+ FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+ FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+ FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+ FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+ FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+ FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+ FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+ FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+ FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+ FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+ FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+ FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+ FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+ FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+ FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+ FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+ FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+ FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+ FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+ FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+ FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+ FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+ FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+ FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+ FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+ FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+ FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+ FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+ FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+ FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+ FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+ FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+ FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+ FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+ FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+ FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+ FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+ FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+ FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+ FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+ FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+ FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+ FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+ FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+ FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+ FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+ FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+ FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+ FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+ FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+ FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+ FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+ FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+ FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+ FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+ FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+ FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+ FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+ FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+ FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+ FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+ FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+ FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+ FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+ FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+ FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+ FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+ FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+ FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+ FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+ FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+ FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+ FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+ FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+ FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+ FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+ FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+ FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+ FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+ FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+ FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+ FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+ FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+ FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+ FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+ FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+ FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+ FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+ FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+ FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+ FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+ FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+ FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+ FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+ FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+ FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+ FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+ FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+ FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+ FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+ FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+ FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+ FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+ FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+ FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+ FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+ FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+ FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+ FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+ FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+ FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+ FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+ FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+ FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+ FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+ FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+ FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+ FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+ FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+ FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+ FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+ FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+ FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+ FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+ FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+ FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+ FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+ FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+ FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+ FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+ FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+ FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+ FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+ FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+ FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+ FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+ FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+ FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+ FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+ FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+ FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+ FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+ FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+ FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+ FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+ FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+ FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+ FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+ FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+ FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+ FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+ FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+ FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+ FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+ FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+ FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+ FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+ FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+ FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+ FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+ FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+ FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+ FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+ FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+ FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+ FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+ FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+ FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+ FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+ FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+ FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+ FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+ FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+ FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+ FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+ FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+ FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+ FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+ FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+ FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+ FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+ FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+ FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+ FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+ FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+ FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+ FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+ FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+ FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+ FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+ FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+ FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+ FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+ FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+ FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+ FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+ FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+ FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+ FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+ FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+ FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+ FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+ FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+ FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+ FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+ FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+ FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+ FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+ FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+ FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+ FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+ FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+ FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+ FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+ FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+ FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+ FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+ FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+ FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+ FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+ FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+ FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+ FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+ FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+ FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+ FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+ FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+ FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+ FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+ FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+ FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+ FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+ FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+ FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+ FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+ FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+ FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+ FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+ FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+ FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+ FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+ FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+ FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+ FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+ FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+ FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+ FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+ FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+ FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+ FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+ FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+ FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+ FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+ FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+ FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+ FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+ FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+ FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+ FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+ FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+ FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+ FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+ FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+ FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+ FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+ FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+ FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+ FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+ FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+ FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+ FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+ FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+ FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+ FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+ FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+ FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+ FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+ FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+ FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+ FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+ FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+ FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+ FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+ FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+ FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+ FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+ FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+ FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+ FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+ FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+ FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+ FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+ FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+ FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+ FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+ FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+ FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+ FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+ FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+ FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+ FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+ FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+ FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+ FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+ FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+ FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+ FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+ FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+ FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+ FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+ FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+ FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+ FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+ FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+ FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+ FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+ FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+ FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+ FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+ FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+ FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+ FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+ FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+ FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+ FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+ FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+ FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+ FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+ FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+ FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+ FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+ FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+ FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+ FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+ FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+ FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+ FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+ FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+ FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+ FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+ FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+ FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+ FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+ FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+ FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+ FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+ FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+ FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+ FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+ FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+ FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+ FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+ FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+ FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+ FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+ FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+ FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+ FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+ FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+ FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+ FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+ FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+ FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+ FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+ FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+ FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+ FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+ FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+ FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+ FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+ FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+ FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+ FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+ FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+ FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+ FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+ FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+ FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+ FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+ FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+ FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+ FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+ FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+ FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+ FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+ FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+ FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+ FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+ FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+ FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+ FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+ FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+ FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+ FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+ FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+ FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+ FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+ FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+ FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+ FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+ FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+ FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+ FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+ FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+ FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+ FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+ FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+ FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+ FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+ FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+ FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+ FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+ FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+ FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+ FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+ FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+ FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+ FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+ FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+ FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+ FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+ FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+ FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+ FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+ FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+ FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+ FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+ FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+ FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+ FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+ FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+ FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+ FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+ FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+ FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+ FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+ FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+ FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+ FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+ FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+ FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+ FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+ FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+ FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+ FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+ FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+ FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+ FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+ FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+ FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+ FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+ FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+ FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+ FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+ FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+ FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+ FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+ FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+ FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+ FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+ FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+ FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+ FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+ FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+ FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+ FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+ FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+ FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+ FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+ FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+ FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+ FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+ FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+ FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+ FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+ FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+ FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+ FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+ FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+ FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+ FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+ FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+ FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+ FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+ FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+ FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+ FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+ FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+ FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+ FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+ FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+ FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+ FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+ FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+ FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+ FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+ FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+ FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+ FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+ FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+ FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+ FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+ FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+ FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+ FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+ FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+ FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+ FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+ FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+ FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+ FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+ FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+ FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+ FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+ FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+ FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+ FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+ FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+ FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+ FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+ FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+ FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+ FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+ FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+ FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+ FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+ FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+ FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+ FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+ FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+ FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+ FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+ FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+ FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+ FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+ FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+ FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+ FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+ FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+ FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+ FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+ FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+ FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+ FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+ FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+ FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+ FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+ FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+ FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+ FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+ FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+ FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+ FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+ FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+ FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+ FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+ FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+ FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+ FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+ FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+ FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+ FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+ FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+ FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+ FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+ FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+ FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+ FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+ FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+ FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+ FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+ FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+ FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+ FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+ FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+ FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+ FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+ FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+ FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+ FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+ FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+ FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+ FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+ FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+ FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+ FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+ FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+ FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+ FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+ FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+ FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+ FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+ FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+ FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+ FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+ FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+ FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+ FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+ FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+ FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+ FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+ FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+ FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+ FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+ FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+ FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+ FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+ FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+ FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+ FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+ FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+ FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+ FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+ FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+ FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+ FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+ FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+ FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+ FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+ FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+ FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+ FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+ FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+ FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+ FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+ FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+ FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+ FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+ FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+ FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+ FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+ FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+ FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+ FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+ FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+ FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+ FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+ FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+ FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+ FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+ FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+ FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+ FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+ FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+ FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+ FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+ FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+ FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+ FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+ FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+ FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+ FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+ FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+ FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+ FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+ FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+ FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+ FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+ FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+ FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+ FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+ FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+ FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+ FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+ FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+ FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
+ FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
+ FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+ FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+ FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+ FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+ FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+ FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+ FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+ FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+ FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+ FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+ FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+ FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+ FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+ FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+ FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+ FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+ FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+ FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+ FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+ FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+ FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+ FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+ FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+ FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+ FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+ FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+ FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+ FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+ FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+ FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+ FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+ FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+ FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+ FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+ FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+ FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+ FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+ FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+ FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+ FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+ FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+ FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+ FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+ FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+ FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+ FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+ FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+ FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+ FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+ FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+ FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+ FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+ FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+ FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+ FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+ FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+ FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+ FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+ FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+ FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+ FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+ FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+ FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+ FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+ FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+ FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+ FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+ FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+ FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+ FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+ FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+ FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+ FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+ FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+ FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+ FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+ FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+ FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+ FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+ FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+ FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+ FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+ FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+ FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+ FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+ FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+ FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+ FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+ FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+ FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+ FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+ FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+ FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+ FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+ FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+ FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+ FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+ FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+ FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+ FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+ FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+ FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+ FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+ FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+ FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+ FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+ FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+ FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+ FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+ FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+ FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+ FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+ FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+ FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+ FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+ FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+ FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+ FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+ FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+ FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+ FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+ FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+ FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+ FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+ FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+ FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+ FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+ FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+ FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+ FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+ FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+ FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+ FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+ FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+ FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+ FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+ FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+ FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+ FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+ FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+ FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+ FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+ FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+ FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+ FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+ FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+ FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+ FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+ FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+ FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+ FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+ FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+ FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+ FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+ FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
+ FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
+ FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+ FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
+ FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+ FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
+ FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+ FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+ FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+ FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+ FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+ FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+ FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+ FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+ FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+ FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+ FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+ FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+ FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+ FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+ FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
+ FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+ FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
+ FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+ FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+ FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+ FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+ FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+ FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+ FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+ FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+ FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+ FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+ FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+ FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+ FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+ FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+ FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+ FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+ FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+ FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+ FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+ FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+ FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+ FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+ FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+ FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+ FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+ FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+ FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+ FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+ FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
+ FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+ FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+ FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+ FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+ FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+ FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+ FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+ FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+ FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+ FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+ FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+ FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+ FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+ FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+ FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+ FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+ FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+ FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+ FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+ FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+ FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+ FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+ FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+ FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+ FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+ FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+ FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+ FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+ FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+ FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+ FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+ FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
+ FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+ FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
+ FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+ FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+ FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
+ FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
+ FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+ FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
+ FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+ FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+ FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+ FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+ FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+ FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+ FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+ FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+ FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+ FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+ FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+ FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+ FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+ FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+ FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+ FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+ FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+ FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+ FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+ FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+ FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+ FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+ FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+ FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+ FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+ FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+ FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+ FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+ FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+ FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+ FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+ FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+ FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+ FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+ FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+ FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+ FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+ FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+ FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+ FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+ FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+ FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+ FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+ FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+ FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+ FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+ FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+ FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+ FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+ FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+ FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+ FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+ FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+ FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+ FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+ FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+ FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
+ FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
+ FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+ FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+ FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+ FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+ FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+ FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+ FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+ FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+ FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+ FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+ FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+ FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+ FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+ FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+ FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+ FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+ FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+ FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+ FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+ FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+ FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+ FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+ FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+ FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+ FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+ FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+ FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+ FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+ FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+ FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+ FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+ FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+ FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+ FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+ FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+ FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+ FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+ FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+ FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+ FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+ FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+ FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+ FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+ FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+ FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+ FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+ FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+ FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+ FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+ FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+ FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+ FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+ FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+ FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+ FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+ FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
+ FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+ FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+ FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+ FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+ FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+ FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+ FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+ FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+ FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+ FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+ FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
+ FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
+ FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
+ FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/vmintegration.texinfo gcc-4.1.0/libjava/classpath/doc/vmintegration.texinfo
*** gcc-4.0.2/libjava/classpath/doc/vmintegration.texinfo	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/vmintegration.texinfo	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1291 ----
+ \input texinfo @c -*-texinfo-*-
+ 
+ @c %**start of header
+ @setfilename vmintegration.info
+ @settitle GNU Classpath VM Integration Guide
+ @c %**end of header
+ 
+ @setchapternewpage off
+ 
+ @ifinfo
+ This file contains important information you will need to know if you
+ are going to write an interface between GNU Classpath and a Virtual
+ Machine.
+ 
+ Copyright (C) 1998-2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ @ifnotplaintext
+ @dircategory GNU Libraries
+ @direntry
+ * VM Integration: (vmintegration).   GNU Classpath VM Integration Guide
+ @end direntry
+ @end ifnotplaintext
+ @end ifinfo
+ 
+ @titlepage
+ @title GNU Classpath VM Integration Guide
+ @author John Keiser
+ @author C. Brian Jones
+ @author Mark Wielaard
+ 
+ @page
+ @vskip 0pt plus 1filll
+ Copyright @copyright{} 1998-2002 Free Software Foundation, Inc.
+ @sp 2
+ Permission is granted to make and distribute verbatim copies of
+ this document provided the copyright notice and this permission notice
+ are preserved on all copies.
+ 
+ Permission is granted to copy and distribute modified versions of this
+ document under the conditions for verbatim copying, provided that the
+ entire resulting derived work is distributed under the terms of a
+ permission notice identical to this one.
+ 
+ Permission is granted to copy and distribute translations of this manual
+ into another language, under the above conditions for modified versions,
+ except that this permission notice may be stated in a translation
+ approved by the Free Software Foundation.
+ 
+ @end titlepage
+ 
+ @ifinfo
+ @node Top, Introduction, (dir), (dir)
+ @top GNU Classpath Hacker's Guide
+ 
+ This file contains important information you will need to know if you
+ are going to write an interface between GNU Classpath and a Virtual
+ Machine.
+ 
+ This document is incomplete, as we are still in alpha with the interface.
+ 
+ @end ifinfo
+ 
+ @menu
+ * Introduction::                An introduction to the Classpath project
+ * Initialization::              Initializing the classes
+ * Classpath Hooks::             Hooks from Classpath to the VM
+ * VM Hooks::                    Hooks from the underlying VM to Classpath
+ * JNI Implementation::		Hooking the VM to jni.h
+ * Miscellaneous VM Requirements::  
+ @end menu
+ 
+ @node Introduction, Initialization, Top, Top
+ @comment node-name, next, previous, up
+ @chapter Introduction
+ 
+ The Classpath Project's ambition to be a 100% clean room implementation
+ of the standard Java class libraries cannot be fulfilled without some
+ level of integration with the Virtual Machine, the underlying machinery
+ that actually runs Java.
+ 
+ There are several VMs out there, here is a small list.
+ 
+ @itemize @bullet
+ @item @uref{http://www.hungry.com/old-hungry/products/japhar/,Japhar}
+ Japhar was the first VM to use GNU Classpath.  Today you can see that
+ sort of relationship in the source tree which denotes several Japhar
+ specific files as a reference implementation of those pieces.  This VM
+ has been primarily tested against Linux and lacks garbage collections, a
+ JIT, and suffers recently from slow development.
+ 
+ @item @uref{http://www.intel.com/research/mrl/orp/,Intel's Open Runtime Platform}
+ Intel surprised us not long ago with the release of this rather advanced
+ VM that uses GNU Classpath for a set of class libraries and works on
+ Linux and Windows 2000.  As of June, 2004, it does not appear that ORP
+ is under active development.
+ 
+ @item @uref{http://www.sablevm.org/,SableVM}
+ SableVM is a robust, extremely portable, efficient, and
+ specifications-compliant Java Virtual Machine that aims to be easy to
+ maintain and to extend. It features a state-of-the-art, efficient
+ interpreter engine. Its source code is very accessible and easy to
+ understand, and has many robustness features that have been the object
+ of careful design.
+ 
+ @item @uref{http://www.kaffe.org,Kaffe}
+ Kaffe is an advanced VM and together with its own class libraries
+ provides a Java 1.1 compatible environment.
+ 
+ @item @uref{http://www.mozilla.org/projects/ef,Electrical Fire}
+ The Electrical File VM continues to be listed as a Mozilla project
+ though development has been somewhat quiet.  A number of concepts from
+ EF were expected at one point to be rolled into Japhar, but that
+ development has not occurred as of yet.
+ 
+ @item @uref{http://latte.snu.ac.kr/,LaTTe}
+ This VM project so far supports only Sun UltraSparc processors using the
+ proprietary Solaris 2.5.1 or higher operating system.  LaTTe was derived
+ from Kaffe but claims a number of improvements.
+ 
+ @item @uref{http://gcc.gnu.org/java/,GNU Compiler for Java (GCJ)}
+ This is a portable, optimizing, ahead-of-time compiler for the Java
+ Programming Language. It can compile Java source code directly to native
+ machine code, Java source code to Java bytecode (class files), and Java
+ bytecode to native machine code. Compiled applications are linked with the
+ GCJ runtime, libgcj which is based on the GNU Classpath code, which provides
+ the core class libraries, a garbage collector, and a bytecode interpreter.
+ libgcj can dynamically load and interpret class files, resulting in mixed
+ compiled/interpreted applications.
+ GCJ is part of the GNU Compiler Collection (@uref{http://gcc.gnu.org/,GCC}).
+ On March 6 2000 the libgcj and GNU Classpath projects were officially merged
+ and there is active work on merging all the classes between the projects.
+ Licensed under GPL+exception, just as GNU Classpath is.
+ 
+ @item @uref{http://kissme.sourceforge.net/,Kissme}
+ This is a free Java Virtual Machine that is being developed on GNU/Linux
+ and can run console Java applications.  Kissme also provides support for
+ orthogonally persistent Java.
+ @c I don't know what ``orthogonally persistent Java'' is, and I bet
+ @c there are other people don't know either. -- Steve Augart, 4 June 2004
+ 
+ @item @uref{http://jamvm.sourceforge.net/,JamVM}
+ A simple, small bytecode interpreter that works out-of-the-box with
+ pure GNU Classpath; it is emerging as the preferred platform for
+ quickly testing a new build of GNU Classpath.  Licensed under the GPL.
+ 
+ @item @uref{http://oss.software.ibm.com/jikesrvm,Jikes RVM}
+ A free runtime environment for Java, written in Java.  Works
+ out-of-the-box with pure GNU Classpath.  Features an optimizing JIT.
+ Runs on the x86 and PowerPC architectures, on the AIX, Linux, and Mac
+ OS/X operating systems.  Licensed under the CPL (Common Public
+ License).  Extensively documented.  Actively developed as of June,
+ 2004.
+ 
+ @end itemize
+ 
+ In the past integration efforts were focused mainly on Japhar with an eye
+ towards getting Electrical Fire to work.  Most information contained in
+ this document is gleaned from these efforts. Recently more work has been
+ done on getting gcj, orp and kissme to work out of the box with GNU Classpath
+ but there is much to do before that becomes a reality.
+ 
+ 
+ @node Initialization, Classpath Hooks, Introduction, Top
+ @comment node-name, next, previous, up
+ @chapter Initialization
+ 
+ The order of initialization, as far as I can tell, doesn't matter just
+ yet.  However, when we move to 1.2 support, it probably will matter, so
+ we'll have a note in here at that time.
+ 
+ The initialization order is currently documented in the
+ @file{Runtime.java} source file.
+ 
+ @node Classpath Hooks, VM Hooks, Initialization, Top
+ @comment node-name, next, previous, up
+ @chapter Classpath Hooks
+ 
+ The primary method of interaction between Classpath and the VM is via
+ the helper classes, which are named after the relevant core library
+ class, but include an additional `VM' prefix.  The library classes from
+ Classpath call out to these to get certain VM-specific dirty work done.
+ A reference copy of each VM class exists.  The majority consist of a
+ series of static methods, some of which are simply declared
+ @code{native}, and some which provide a default implementation.  VMs may
+ either use these as is, or create their own local variations.  When
+ using the default implementations, the VM is responsible for
+ implementing any of the code marked as @code{native} which corresponds
+ to functionality they wish their VM to provide.  When using their own
+ versions of the classes, VM implementors may choose to change the mix of
+ native and non-native methods from that below, so as to best suit their
+ implementation.
+ 
+ @menu
+ * java.lang::
+ * gnu.classpath::
+ * java.util::
+ * java.io::
+ * java.security::
+ * java.net::
+ * java.nio::
+ * java.nio.channels::
+ * gnu.java.nio::
+ * Classpath Callbacks::
+ @end menu
+ 
+ @node java.lang, gnu.classpath, Classpath Hooks, Classpath Hooks
+ @comment  node-name,  next,  previous,  up
+ 
+ @section @code{java.lang}
+ 
+ @code{java.lang} is the core Java package, being imported automatically by all
+ classes.  It includes basic classes as @code{Object} and @code{String}.
+ A VM must implement at least some parts of this package in order to
+ become operable.
+ 
+ @menu
+ * java.lang.VMClass::
+ * java.lang.VMObject::
+ * java.lang.VMClassLoader::
+ * java.lang.VMSystem::
+ * java.lang.VMThrowable::
+ * java.lang.VMCompiler::
+ * java.lang.VMDouble::
+ * java.lang.VMFloat::
+ * java.lang.VMProcess::
+ * java.lang.VMRuntime::
+ * java.lang.VMString::
+ * java.lang.VMThread::
+ @end menu
+ 
+ @node java.lang.VMClass, java.lang.VMObject ,java.lang,java.lang
+ @subsection @code{java.lang.VMClass}
+ 
+ The core class, @code{java.lang.Class}, and the corresponding VM class,
+ @code{java.lang.VMClass}, provide two main functions within GNU Classpath.
+ 
+ @enumerate
+ @item For basic VM operation, @code{java.lang.Class} provides the link between
+ the Java-based representation of a class it embodies and the VM's own
+ internal structure for a class.  @xref{VM Hooks}.
+ 
+ @item As far as the user is concerned, the main function of
+ @code{java.lang.Class} is as an entry point to the reflection
+ facilities, and so it also provides this functionality, backed by the
+ VM class.
+ @end enumerate
+ 
+ This VM class lists the following methods, organized by the version of the
+ Java specification in which they occur.  All are @code{native}, unless
+ otherwise specified, and pertain to reflection.  As a result, the VM only
+ needs to implement these methods in order to provide reflection support,
+ and then only to the degree required.
+ 
+ @itemize @bullet
+ @item 1.0
+ @itemize @bullet
+ @item @code{isInterface(Class)} -- This is simply a property test, and matches
+ the presence of an appropriate flag within the class file.
+ @item @code{getName(Class)} -- Returns the fully-qualified name of the class.
+ @item @code{getSuperclass(Class)} -- Returns a @code{Class} instance which
+ represents the superclass.  Again, the class file contains an element directly
+ relating to this.  @code{null} is returned for primitives, interfaces and
+ @code{Object}.
+ @item @code{getInterfaces(Class)} -- Same as the above, but the implemented
+ or extended interfaces rather than the superclass.  An empty array should
+ be returned, rather than @code{null}.
+ @item @code{getDeclaredClasses(Class,boolean)} -- Returns the internal classes
+ this instance declares directly.  The flag determines whether or not the
+ VM should filter out non-public classes.
+ @item @code{getDeclaredFields(Class,boolean)} -- The same for fields.
+ @item @code{getDeclaredMethods(Class,boolean)} -- And for methods.
+ @item @code{getDeclaredConstructors(Class,boolean)} -- And constructors.
+ @item @code{getClassLoader(Class)} -- Returns the @code{ClassLoader} instance
+ which is responsible for the specified class.
+ @item @code{forName(String)} -- The VM should create a @code{Class} instance
+ corresponding to the named class.  As noted in @ref{VM Hooks}, the internal
+ content of the instance is the responsibility of the VM.
+ @item @code{isArray(Class)} -- Another property test, corresponding to a
+ class file flag.
+ @item @code{initialize(Class)} -- The VM should initialize the class fully,
+ if it has not already done so.
+ @item @code{loadArrayClass(String,ClassLoader)} -- This is called if
+ @code{forName} returns @code{null} and the string specifies an array class.
+ The specified array class should be loaded with the supplied class loader.
+ @item @code{throwException(Throwable)} -- The VM should throw the supplied
+ checked exception, without declaring it.
+ @end itemize
+ @item 1.1
+ @itemize @bullet
+ @item @code{isInstance(Class,Object)} -- This is a reflection-based equivalent
+ of the @code{instanceof} operator.
+ @item @code{isAssignableFrom(Class,Class)} -- Mainly a shorthand for the above,
+ removing the need to create an instance to test assignability.  
+ @item @code{isPrimitive(Class)} -- Returns true if this class is simply
+ a representation of one of the primitive types: @code{boolean}, @code{byte},
+ @code{char}, @code{short}, @code{int}, @code{long}, @code{float},
+ @code{double} and @code{void}.
+ @item @code{getComponentType(Class)} -- Produces a @code{Class} instance which
+ represents the type of the members of the array the class instance represents.
+ Classes which don't represent an array type return @code{null}.
+ @item @code{getModifiers(Class,boolean)} -- Returns an integer which encodes
+ the class' modifiers, such as @code{public}.  Again, this relates to
+ information stored in the class file.
+ @item @code{getDeclaringClass(Class)} -- Returns the class that declared
+ an inner or member class, or @code{null} if the instance refers to a top-level
+ class.
+ @end itemize
+ @end itemize
+ 
+ @node java.lang.VMObject, java.lang.VMClassLoader, java.lang.VMClass, java.lang
+ @subsection @code{java.lang.VMObject}
+ 
+ @code{VMObject} is the bridge between the low level @code{Object} facilities
+ such as making a clone, getting the class of the object and the wait/notify
+ semantics.  This is accomplished using the following @code{native}
+ methods.
+ 
+ @itemize @bullet
+ @item @code{getClass(Object)} -- Returns the @code{Class} instance for the
+ object.  @code{Class} objects are produced by the VM, as described in
+ @ref{VM Hooks}.
+ @item @code{clone(Cloneable)} -- The VM should produce a low-level clone of the
+ specified object, creating a field-by-field shallow copy of the original.
+ The only difference between the two is that the new object should still be
+ @code{finalizable}, even if the original is not.
+ @item @code{notify(Object)} -- The VM should choose one of the threads waiting
+ for a lock on the specified object arbitrarily, and wake it.  If the current
+ thread does not currently hold the lock on the object, then an
+ @code{IllegalMonitorStateException} should be thrown.
+ @item @code{notifyAll(Object)} -- Same as the above, but all threads are
+ awakened.
+ @item @code{wait(Object,long,int)} -- The VM should set the current thread
+ into a waiting state, which persists until it receives a notify signal or the
+ specified time (in milliseconds and nanoseconds) is exceeded.  The nanoseconds
+ restriction may be ignored if such granularity is not available, and a
+ @code{IllegalMonitorStateException} should be thrown if the current thread
+ doesn't own the object.
+ @end itemize
+ 
+ @node java.lang.VMClassLoader, java.lang.VMSystem, java.lang.VMObject, java.lang
+ @subsection @code{java.lang.VMClassLoader}
+ @code{VMClassLoader} provides methods for defining and resolving core and
+ primitive classes, as well as handling resources, packages and assertions.
+ The class is a mixture of @code{native} methods and Java-based
+ implementations, with some of the latter being @emph{stubs}.
+ 
+ @itemize @bullet
+ @item Native Methods
+ @itemize @bullet
+ @item @code{defineClass(ClassLoader,String,byte[],int,int,ProtectionDomain)}
+ -- The VM should create a @code{Class} instance from the supplied byte array.
+ @item @code{resolveClass(Class)} -- Resolve references to other classes in the
+ supplied class.
+ @item @code{loadClass(name,boolean)} -- Load a class using the bootstrap
+ loader.
+ @item @code{getPrimitiveClass(char)} -- The VM should provide a @code{Class}
+ implementation for one of the primitive classes.  The supplied character
+ matches the JNI code for the primitive class e.g. `B' for byte and
+ `Z' for boolean.
+ @end itemize
+ @item Java Methods
+ @itemize @bullet
+ @item @code{getResource(String)} -- The default implementation calls
+ @code{getResources} and returns the first element in the returned enumeration,
+ or @code{null} if there are no elements.
+ @item @code{getResources(String)} -- By default, this compiles a list of
+ URLs via the boot class path.  Any matching files within a zip file are added,
+ and directories on the boot class path are automatically converted to file
+ URLs that refer to join the directory with the resource name (whether or not
+ it actually exists).
+ @item @code{getPackage(String)} -- Always returns null, which may be suitable
+ if the VM does not wish to return a @code{Package} implementation. Otherwise,
+ it may be necessary to make this a @code{native} method.
+ @item @code{getPackages()} -- As with the last, a default stub implementation
+ exists (returning an empty array) which may be replaced if support is
+ required. 
+ @item @code{defaultAssertionStatus()} -- A stub which can be implemented
+ by VMs providing assertion support.  At present, it always returns @code{true}.
+ @item @code{packageAssertionStatus()} -- Much the same status as the above.
+ The method should return a map converting package names to boolean status
+ values.  The stub implementation provides an empty map.
+ @item @code{classAssertionStatus()} -- Same as the last, but for classes.
+ @item @code{getSystemClassLoader()} -- The default calls @code{ClassLoader}
+ to create a new auxillary class loader with a system and extension class
+ loader.  The VM may wish to replace it if it wishes to supply its own custom
+ system class loader.
+ @end itemize
+ @end itemize
+ @node java.lang.VMSystem, java.lang.VMThrowable, java.lang.VMClassLoader, java.lang
+ @subsection @code{java.lang.VMSystem}
+ @code{VMSystem} handles the default I/O streams, provides access to the
+ system clock and environment variables and provides methods for
+ @code{System.arraycopy} and the @code{identityHashCode} of an
+ @code{Object}.  It consists of @code{native} methods, but the default
+ implementation also provides some helper methods to simplify stream
+ creation.  
+ 
+ @itemize @bullet
+ @item Native Methods
+ @itemize @bullet
+ @item @code{arraycopy(Object,int,Object,int,int)} -- The VM should copy
+ a specified number of array objects from one array to another, with 
+ appropriate checks for compatible typing, available elements and space.
+ The VM should be able to perform this more efficiently using native code
+ and direct memory manipulation than would have been achieved by using Java.
+ @item @code{identityHashCode(Object)} -- This is the hashcode for
+ @code{Object}, which relates to the actual location of the object in memory.
+ @item @code{setIn(InputStream)} -- Set the system input stream.
+ @item @code{setOut(PrintStream)} -- Set the system output stream.
+ @item @code{setErr(PrintStream)} -- Set the system error stream.
+ @item @code{currentTimeMillis()} -- Gets the system time in milliseconds.
+ @item @code{getenv(String)} -- Returns the value of the specified environment
+ variable.
+ @end itemize
+ @item Java Methods
+ @itemize @bullet
+ @item @code{makeStandardInputStream()} -- Helps provide the functionality of
+ @code{System.in} by wrapping the appropriate file descriptor in a buffered
+ file input stream.  VMs may choose to create the stream from the descriptor
+ differently rather than using this method.
+ @item @code{makeStandardOutputStream()} -- Helps provide the functionality of
+ @code{System.out} by wrapping the appropriate file descriptor in a buffered
+ file output stream.  VMs may choose to create the stream from the descriptor
+ differently rather than using this method.
+ @item @code{makeStandardErrorStream()} -- Helps provide the functionality of
+ @code{System.err} by wrapping the appropriate file descriptor in a buffered
+ file output stream.  VMs may choose to create the stream from the descriptor
+ differently rather than using this method.
+ @end itemize
+ @end itemize
+ 
+ Classpath also provides native implementations of
+ 
+ @itemize @bullet
+ @item @code{setIn(InputStream)} 
+ @item @code{setOut(PrintStream)} 
+ @item @code{setErr(PrintStream)} 
+ @item @code{currentTimeMillis()} 
+ @item @code{getenv(String)}
+ @end itemize
+ 
+ making a VM implementation optional.
+ 
+ @node java.lang.VMThrowable, java.lang.VMCompiler, java.lang.VMSystem, java.lang
+ @subsection @code{java.lang.VMThrowable}
+ @code{VMThrowable} is used to hold the VM state of a throwable, created either
+ when a @code{Throwable} is created or the @code{fillInStackTrace()} method is
+ called (i.e. when the actual stack trace is needed, as a lot of exceptions are
+ never actually used).  The actual class has two @code{native} methods,
+ one (@code{fillInStackTrace()}) being a method of the class used to obtain
+ instances, and the other an instance method, @code{getStackTrace()}.
+ @itemize @bullet
+ @item @code{fillInStackTrace(Throwable)} -- The VM should return the current
+ execution state of the @code{Throwable} in the form of a @code{VMThrowable}
+ instance.  The VM may also return @code{null} if it does not support this
+ functionality.
+ @item @code{getStackTrace()} -- This is used to create a real
+ @code{StackTraceElement} array for the exception, using the state data
+ stored during creation of the instance.
+ @end itemize
+ 
+ @node java.lang.VMCompiler, java.lang.VMDouble, java.lang.VMThrowable, java.lang
+ @subsection @code{java.lang.VMCompiler}
+ 
+ @code{VMCompiler} provides an interface for VMs which wish to provide
+ JIT compilation support.  The default implementation is simply a series
+ of stubs. The property, @code{java.compiler}, should point to a library
+ containing the function @code{java_lang_Compiler_start()} if such support
+ is to be provided.
+ 
+ @itemize @bullet
+ @item @code{compileClass(Class)} -- Invoke the compiler to compile the specific
+ class, returning @code{true} if successful.
+ @item @code{compileClasses(String)} -- The compiler should compile the classes
+ matching the specified string, again returning @code{true} on success.
+ @item @code{command(Object)} -- The object represents a command given to the
+ compiler, and is specific to the compiler implementation.
+ @item @code{enable} -- Enable the operation of the compiler.
+ @item @code{disable} -- Disable compiler operation.
+ @end itemize
+ 
+ @node java.lang.VMDouble, java.lang.VMFloat, java.lang.VMCompiler, java.lang
+ @subsection @code{java.lang.VMDouble}
+ 
+ @code{VMDouble} provides native support for the conversion and parsing
+ of doubles.
+ 
+ @itemize @bullet
+ @item @code{doubleToLongBits(double)} -- Converts the double to the IEEE 754
+ bit layout, collapsing NaNs to @code{0x7ff8000000000000L}.
+ @item @code{doubleToRawLongBits(double)} -- Same as the above, but preserves
+ NaNs.
+ @item @code{longBitsToDouble(long)} -- This is the inverse of the last method,
+ preserving NaNs so that the output of one can be fed into the other without
+ data loss.
+ @item @code{toString(double,boolean)} -- Converts the double to a string,
+ giving a shorter value if the flag @code{isFloat} is @code{true}, indicating
+ that the conversion was requested by @code{java.lang.Float} rather than
+ @code{java.lang.Double}.
+ @item @code{initIDs} -- Used by JNI-based solutions to initialize the cache
+ of the static field IDs.  The default @code{VMDouble} implementation has a
+ static initializer which loads the JNI library and calls this method.
+ @item @code{parseDouble} -- Turn the string into a usable double value.
+ @end itemize
+ 
+ Classpath provides native implementations of all these, making VM
+ implementation optional.
+ 
+ @node java.lang.VMFloat, java.lang.VMProcess, java.lang.VMDouble, java.lang
+ @subsection @code{java.lang.VMFloat}
+ 
+ @code{VMFloat} provides native support for the conversion of floats.
+ 
+ @itemize @bullet
+ @item @code{floatToIntBits(float)} -- Converts the float to the IEEE 754
+ bit layout, collapsing NaNs to @code{0x7fc00000}.
+ @item @code{floatToRawIntBits(float)} -- Same as the above, but preserves
+ NaNs.
+ @item @code{intBitsToFloat(int)} -- This is the inverse of the last method,
+ preserving NaNs so that the output of one can be fed into the other without
+ data loss.
+ @end itemize
+ 
+ Classpath provides native implementations of all these, making VM
+ implementation optional.
+ 
+ @node java.lang.VMProcess, java.lang.VMRuntime, java.lang.VMFloat, java.lang
+ @subsection @code{java.lang.VMProcess}
+ 
+ @code{VMProcess} handles the execution of external processes.  In the
+ default implementation, threads are spawned and reaped by @code{ProcessThread}.
+ A constructor creates a new @code{VMProcess}, which extends rather than
+ complements @code{Process}, using an array of arguments, an array of
+ environment variables and a working directory.  The instance maintains
+ system input, output and error streams linked to the external process.
+ Three @code{native} methods are used, and implementations are provided
+ for all three by Classpath, making VM implementation optional.  These use
+ the POSIX functions, @code{fork()}, @code{waitpid()} and @code{kill()}.
+ 
+ @itemize @bullet
+ @item @code{nativeSpawn(String[],String[],File)} -- The VM should create a
+ new process which uses the specified command-line arguments, environment
+ variables and working directory.  Unlike the other two methods, this
+ method is linked to an instance, and must call @code{setProcessInfo()} with
+ the results before returning.
+ @item @code{nativeReap()} -- This is called to perform a reap of any
+ zombie processes, and should not block, instead returning a boolean as to
+ whether reaping actually took place.
+ @item @code{nativeKill(long)} -- The VM should terminate the specified PID.
+ @end itemize
+ 
+ @node java.lang.VMRuntime, java.lang.VMString, java.lang.VMProcess, java.lang
+ @subsection @code{java.lang.VMRuntime}
+ 
+ The @code{VMRuntime} class provides a series of native methods
+ which divulge information about the runtime or invoke certain
+ operations.  This includes retrieving the amount of available memory,
+ and scheduling the garbage collector.  There are two exceptions: the
+ @code{enableShutdownHooks} method, which allows the VM to put in its own
+ shutdown hooks when @code{Runtime.addShutdownHook()} is first invoked,
+ and @code{exec(String[],String[],File)} which spawns an external process.
+ These are Java-based static methods instead.  The first is simply a stub by
+ default, while the second simply links to the functionality of
+ @code{VMProcess} (and should be changed if a different @code{Process}
+ implementation is used).
+ 
+ @itemize @bullet
+ @item @code{availableProcessors()} -- Returns the number of processors 
+ available to the VM.
+ @item @code{freeMemory()} -- Returns the amount of memory the VM has available
+ on the heap for allocating.
+ @item @code{totalMemory()} -- Returns the size of the heap.
+ @item @code{maxMemory()} -- Returns the maximum memory block the VM will
+ attempt to allocate.  May be simply @code{Long.MAX_VALUE} (8 exabytes!)
+ @item @code{gc()} -- Allows users to explicitly invoke the garbage collector.
+ This is a suggestion to the VM, rather than a command, and the garbage
+ collector should run anyway @emph{without} it being invoked.
+ @item @code{runFinalization()} -- Like the above, but related to the
+ finalilzation of objects rather than the garbage collector.
+ @item @code{runFinalizationForExit()} -- Called immediately prior to VM
+ shutdown in order to finalize all objects (including `live' ones)
+ @item @code{traceInstructions(boolean)} -- This turns on and off the optional
+ VM functionality of printing a trace of executed bytecode instructions.
+ @item @code{traceMethodCalls(boolean)} -- This turns on and off the optional
+ VM functionality of printing a trace of methods called.
+ @item @code{runFinalizersOnExit(boolean)} -- A toggleable setting for
+ running the finalization process at exit.
+ @item @code{exit(int)} -- The VM should shutdown with the specified exit code.
+ @item @code{nativeLoad(String,ClassLoader)} -- Attempts to load a file,
+ returning an integer which is non-zero for success.  Nothing happens if the
+ file has already been loaded.
+ @item @code{mapLibraryName(String)} -- The VM should map the system-independent
+ library name supplied to the platform-dependent equivalent (e.g. a @code{.so}
+ or @code{.dll} file)
+ @end itemize
+ 
+ @node java.lang.VMString, java.lang.VMThread, java.lang.VMRuntime, java.lang
+ @subsection @code{java.lang.VMString}
+ @code{VMString} is responsible for handling interned strings.  If two strings
+ are equal (using the @code{equals()} method), then the results of calling
+ the @code{intern()} method on each of them makes them equal
+ (using @code{==}).  Thus, the same string object is always returned by
+ @code{intern} if the two strings are equal.  The default implementation
+ is Java-based and implements @code{intern(String)} by maintaining a
+ @code{WeakHashMap} which links the strings to their @code{WeakReference}.
+ A new mapping is created for each new string being @code{intern}ed.  
+ A VM may implement this differently by implementing this method,
+ which is @code{static} and the only one in @code{VMString}.
+ 
+ @node java.lang.VMThread,, java.lang.VMString, java.lang
+ @subsection @code{java.lang.VMThread}
+ 
+ @code{VMThread} provides the link between Java's threads and the platform
+ threading support.  A @code{VMThread} is created via a private constructor
+ and linked to a @code{Thread} instance.  This occurs when the @code{Thread}
+ instance is started by the static @code{create(Thread,long)} method (the second
+ argument requests a certain stack size, usually zero).  The thread itself is
+ executed via the @code{run()} method, which handles any problems with the
+ running of the thread and its eventual death.
+ 
+ @code{VMThread} provides the following accessors and mutators for accessing
+ the thread state via @code{VMThread},
+ 
+ @itemize @bullet
+ @item @code{getName()}
+ @item @code{setName(String)}
+ @item @code{getPriority()}
+ @item @code{setPriotity(int)}
+ @item @code{isDaemon()}
+ @end itemize
+ 
+ all of which refer to the @code{Thread} instance. @code{setPriority(int)} also
+ calls the appropriate native method.  @code{stop(Throwable)} similarly wraps
+ a native method, merely adding in a check for the state of the thread.
+ 
+ The default implementation also provides Java-based implementations of
+ @code{join(long,int)}, @code{sleep(long,int)} and
+ @code{holdsLock(Object)}.  @code{join} and @code{sleep} simply wait for
+ the appropriate amount of time, with @code{join} additionally waiting
+ for the thread instance to become @code{null}.  @code{holdsLock} simply
+ checks if an object is locked by the current thread by trying to invoke
+ the @code{notify} method, and catching the failing exception if this is
+ not the case.
+ 
+ The remainder of the class is a series of @code{native} methods, some of
+ which are mandatory for VM implementation and others which provide optional
+ or deprecated functionality.
+ 
+ @itemize @bullet
+ @item Mandatory Instance Methods
+ @itemize @bullet
+ @item @code{start(long)} -- The VM should create the native thread and start
+ it running using the @code{run} method of the @code{VMThread} instance on
+ which this method is called.
+ @item @code{interrupt()} -- The VM should interrupt the running thread and
+ throw an appropriate exception.
+ @item @code{isInterrupted()} -- Checks the interrupted state of the thread.
+ @item @code{suspend()} -- The thread should be suspended until resumed.
+ @item @code{resume()} -- The thread should be resumed from its suspended state.
+ This pair of methods are deprecated, due to the possibility of a deadlock
+ occuring when a thread with locks is suspended.
+ @item @code{nativeSetPriority(int)} -- Called by @code{setPriority}
+ to allow the setting to flow down to the native thread.
+ @item @code{nativeStop(Throwable)} -- The VM should stop the thread abnormally
+ and throw the specified exception.  This is clearly deprecated, due to the
+ ambiguous state an abruptly-stopped thread may leave.
+ @end itemize
+ @item Mandatory Class Methods
+ @itemize @bullet
+ @item @code{currentThread()} -- Return a reference to the thread currently
+ being executed.
+ @item @code{yield()} -- The VM should allow some other thread to run.
+ The current thread maintains its locks even though it stops executing for
+ the time being.
+ @item @code{interrupted()} -- A shortcut to obtaining the interrupted state
+ of the current thread.
+ @end itemize
+ @item Other Methods
+ @itemize @bullet
+ @item @code{countStackFrames()} -- Returns a count of the number of stack
+ frames in the thread.  This depends on the deprecated method @code{suspend()}
+ having returned true, and is thus deprecated as a result.
+ @end itemize
+ @end itemize
+ 
+ @node gnu.classpath, java.util, java.lang, Classpath Hooks
+ @section @code{gnu.classpath}
+ 
+ The @code{gnu.classpath} package provides Classpath-specific functionality,
+ primarily relating to the features in @code{java.lang}.  At present, this
+ includes the context of a class (the stack) and the system properties.
+ 
+ @menu
+ * gnu.classpath.VMStackWalker::
+ * gnu.classpath.VMSystemProperties::
+ @end menu
+ 
+ @node gnu.classpath.VMStackWalker,gnu.classpath.VMSystemProperties,gnu.classpath,gnu.classpath
+ @subsection @code{gnu.classpath.VMStackWalker}
+ 
+ @code{VMStackWalker} provides access to the class context or stack.  The
+ default implementation consists of a @code{native} @code{static} method,
+ @code{getClassContext()}, which obtains the class context, and two helper
+ methods which obtain the calling class (the 3rd element in the context array)
+ and its class loader, respectively.
+ 
+ @itemize @bullet
+ @item @code{getClassContext()} -- The VM should return an array of
+ @code{Class} objects, each of which relates to the method currently being
+ executed at that point on the stack.  Thus, the first item (index 0) is the
+ class that contains this method.
+ @item @code{getCallingClass()} -- A Java-based helper method which returns
+ the @code{Class} object which contains the method that called the method
+ accessing @code{getCallingClass()}. 
+ @item @code{getCallingClassLoader()} -- Like the last, but returning the class
+ loader of the class.
+ @end itemize
+ 
+ @node gnu.classpath.VMSystemProperties,,gnu.classpath.VMStackWalker,gnu.classpath
+ @subsection @code{gnu.classpath.VMSystemProperties}
+ 
+ @code{VMSystemProperties} allows the VM to hook into the property creation
+ process, both before and after the system properties are added by GNU
+ Classpath.  The default implementation assumes that the VM will add its
+ properties first, by making the pre-initialisation method @code{native},
+ and that the Classpath properties may then be altered by a Java-based
+ post-initialisation method.
+ 
+ As these methods are called as part of the bootstrap process, caution should
+ be used as to what classes are used, and properties should only be set
+ using @code{Properties.setProperty()}.  Specifically, I/O classes should be
+ avoided at this early stage.
+ 
+ @itemize @bullet
+ @item @code{preInit(Properties)} -- Allows the VM to add properties
+ @emph{before} the Classpath properties are added. The default implementation
+ includes a full list of properties that @emph{must} be added by the VM, but
+ additional VM-specific ones may also be added.  
+ @item @code{postInit(Properties)} -- Same as the last, but called after the
+ Classpath properties have been added.  The main purpose of this is to allow
+ the VM to alter the properties added by GNU Classpath to suit it.
+ @end itemize
+ 
+ @node java.util, java.io, gnu.classpath, Classpath Hooks
+ @section java.util
+ 
+ The @code{java.util} VM hooks provide links between the mix of functionality
+ present in that package, which includes collections, date and time handling
+ and parsing.  At present, there is only one hook, which connects GNU Classpath
+ to the timezone information provided by the underlying platform.
+ 
+ @menu
+ * java.util.VMTimeZone::
+ @end menu
+ 
+ @node java.util.VMTimeZone,,java.util,java.util
+ @subsection @code{java.util.VMTimeZone}
+ 
+ @code{VMTimeZone} joins @code{TimeZone} to the platform timezone information
+ via the static method, @code{getDefaultTimeZoneId()}.  The VM hook is
+ expected to return a @code{TimeZone} instance that represents the current
+ timezone in use by the platform.  The default implementation provides
+ this functionality for POSIX or GNU-like systems, and VMs that want this
+ functionality can keep this implementation and implement the native
+ method, @code{getSystemTimeZoneId()}.  This method is only called when
+ obtaining the timezone name from the @code{TZ} environment variable,
+ @code{/etc/timezone} and @code{/etc/localtime} all fail.  This fallback
+ mechanism also means that a system which doesn't provide the above three
+ methods, but does provide a timezone in string form, can still use this
+ implementation.
+ 
+ @node java.io, java.security, java.util, Classpath Hooks
+ @section java.io
+ 
+ The @code{java.io} package is heavily reliant on access to the I/O facilities
+ of the underlying platform.  As far as its VM hooks go, they provide two
+ areas of functionality to GNU Classpath, these being
+ 
+ @itemize @bullet
+ @item File and directory queries and manipulation
+ @item Serialization of objects
+ @end itemize
+ 
+ The first corresponds directly to most of the @code{File} class, while
+ the latter underlies the functionality provided by the
+ @code{ObjectInputStream} and @code{ObjectOutputStream}.  More low-level I/O
+ is provided by @ref{java.nio}.
+ 
+ @menu
+ * java.io.VMFile::
+ * java.io.VMObjectInputStream::
+ * java.io.VMObjectStreamClass::
+ @end menu
+ 
+ @node java.io.VMFile,java.io.VMObjectInputStream,java.io,java.io
+ @subsection @code{java.io.VMFile}
+ 
+ @code{VMFile} allows GNU Classpath's @code{File} representations to
+ probe and modify the file system using the native functions of the
+ platform.  The default implementation (which consists of both a
+ @code{VMFile} class and the native methods) is primarily UNIX-centric,
+ working with POSIX functions and assuming case-sensitive filenames,
+ without the restriction of the 8.3 format.  It consists mainly of
+ @code{static} @code{native} methods, with a few Java helper methods.
+ The native methods represent the file as a string containing its path,
+ rather than using the object itself.
+ 
+ @itemize @bullet
+ @item Native Methods
+ @itemize @bullet
+ @item @code{lastModified(String)} -- The native method should return a
+ @code{long} value that represents the last modified date of the file.
+ @item @code{setReadOnly(String)} -- Sets the file's permissions to read only,
+ in whichever way this is realised by the platform.
+ @item @code{create(String)} -- Create the named file.
+ @item @code{list(String)} -- The native method opens the named directory,
+ reads the contents and returns them as a Java @code{String} array.
+ @item @code{renameTo(String,String)} -- Renames the first file to the second.
+ @item @code{length(String)} -- Returns a @code{long} value representing
+ the file size.
+ @item @code{exists(String)} -- Tests for the existence of the named file
+ or directory.
+ @item @code{delete(String)} -- Deletes the file or directory.
+ @item @code{setLastModified(String,long)} -- Change the last modified time.
+ @item @code{mkdir(String)} -- Creates the named directory.
+ @item @code{isFile(String)} -- Tests that the named path references a file.
+ @item @code{canWrite(String)} -- Tests that the file can be written to.
+ This method is @code{synchronized}, so the object is locked during the check.
+ @item @code{canRead(String)} -- Complement of the last method.
+ @item @code{isDirectory(String)} -- Tests that the named path references
+ a directory.
+ @end itemize
+ @item Java Helper Methods
+ @itemize @bullet
+ @item @code{canWriteDirectory(File)} -- Checks that the directory can be
+ written to, by trying to create a temporary file in it.
+ @item @code{listRoots()} -- Returns the root of a GNU filesystem i.e. `/'
+ in an array.
+ @item @code{isHidden(String)} -- Checks whether the file starts with `.',
+ which is how files are hidden on UNIX-style systems.
+ @item @code{getName(String)} -- Pulls the actual filename from the end of
+ the path, by breaking off the characters after the last occurrence of the
+ platform's file separator.
+ @item @code{getCanonicalForm(String)} -- This converts a UNIX path to
+ its canonical form by removing the `.' and `..' sections that occur within.
+ @end itemize
+ @end itemize
+ 
+ @node java.io.VMObjectInputStream,java.io.VMObjectStreamClass,java.io.VMFile,java.io
+ @subsection @code{java.io.VMObjectInputStream}
+ 
+ This class consists of two methods which provide functionality used in
+ deserializing an object.  @code{currentClassLoader()} provides the first
+ user-defined class loader from the class context
+ (@xref{gnu.classpath.VMStackWalker},) via a @code{PrivilegedAction}.
+ @code{allocateObject(Class,Class,Constructor)} is a @code{native} method
+ (a reference implementation is provided) which creates an object but
+ calls the constructor of another class, which is a superclass of the
+ object's class.
+ 
+ @node java.io.VMObjectStreamClass,,java.io.VMObjectInputStream,java.io
+ @subsection @code{java.io.VMObjectStreamClass}
+ 
+ @code{VMObjectStreamClass} is a series of @code{static} @code{native}
+ methods that provide some of the groundwork for @code{ObjectStreamClass}
+ and @code{ObjectStreamField}.  @code{hasClassInitializer(Class)} works
+ with the former, and checks for the presence of a static initializer.
+ The remaining methods are of the form @code{setXXXNative(Field,Object,XXX)}
+ and support @code{ObjectStreamField}.  One exists for each of the main types
+ (boolean, float, double, long, int, short, char, byte and object) and is used
+ to set the specified field in the supplied instance to the given value.
+ 
+ A default implementation is provided for all of them, so a VM implementation
+ is optional.
+ 
+ @node java.security, java.net, java.io, Classpath Hooks
+ @section java.security
+ 
+ The @code{java.security} package provides support for Java's security
+ architecture.  At present, @code{VMAccessController} represents the sole
+ VM hook for this.
+ 
+ @menu
+ * java.security.VMAccessController::
+ @end menu
+ 
+ @node java.security.VMAccessController,,java.security,java.security
+ @subsection @code{java.security.VMAccessController}
+ 
+ The @code{AccessController} is used to perform privileged actions.  Its
+ hook class, @code{VMAccessController}, maintains the
+ @code{AccessControlContext} and the default implementation is purely
+ Java-based.  The VM may choose to replace this with their own.
+ The methods in the reference version are as follows:
+ 
+ @itemize @bullet
+ @item @code{pushContext(AccessControlContext)} -- Adds a new context to the
+ stack for the current thread.  This is called before a privileged action
+ takes place.
+ @item @code{popContext()} -- Removes the top context from the stack.  This
+ is performed after the privileged action takes place.
+ @item @code{getContext()} -- Either derives a context based on the 
+ @code{ProtectionDomain}s of the call stack (see the next method) or returns
+ the top of the context stack.
+ @item @code{getStack()} -- Provides access to the call stack as a pair of
+ arrays of classes and method names.  The actual implementation returns
+ an empty array, indicating that there are no permissions.
+ @end itemize
+ 
+ @node java.net, java.nio, java.security, Classpath Hooks
+ @section java.net
+ 
+ The @code{java.net} package is heavily reliant on access to the networking
+ facilities of the underlying platform.  The VM hooks provide information
+ about the available network interfaces, and access to lookup facilities
+ for network addresses.
+ 
+ @menu
+ * java.net.VMInetAddress::
+ * java.net.VMNetworkInterface::
+ @end menu
+ 
+ @node java.net.VMInetAddress,java.net.VMNetworkInterface,java.net,java.net
+ @subsection @code{java.net.VMInetAddress}
+ 
+ @code{VMInetAddress} is a series of @code{static} @code{native} methods
+ which provide access to the platform's lookup facilities.  All the methods
+ are implemented by GNU Classpath, making VM implementation optional, and
+ are as follows:
+ 
+ @itemize @bullet
+ @item @code{getLocalHostname()} -- Wraps the @code{gethostname} function, and
+ falls back on `localhost'.
+ @item @code{lookupInaddrAny()} -- Returns the value of @code{INADDR_ANY}.
+ @item @code{getHostByAddr(byte[])} -- Looks up the hostname based on an IP
+ address.
+ @item @code{getHostByName(String)} -- The reverse of the last method, it
+ returns the IP addresses which the given host name resolves to.
+ @end itemize
+ 
+ @node java.net.VMNetworkInterface,,java.net.VMInetAddress,java.net
+ @subsection @code{java.net.VMNetworkInterface}
+ 
+ @code{VMNetworkInterface} currently consists of a single @code{static}
+ @code{native} method, @code{getInterfaces()}, which retrieves the
+ network interfaces available on the underlying platform as a @code{Vector}.
+ The current GNU Classpath implementation is a native stub.
+ 
+ @node java.nio, java.nio.channels, java.net, Classpath Hooks
+ @section java.nio
+ 
+ The @code{java.nio} package is part of the New I/O framework added in
+ Java 1.4.  This splits I/O into the concepts of @emph{buffers},
+ @emph{charsets}, @emph{channels} and @emph{selectors}, and
+ @code{java.nio} defines the buffer classes.  As far as native and VM
+ code is concerned, the new package needs support for low-level efficient
+ buffer operations.
+ 
+ @menu
+ * java.nio.VMDirectByteBuffer::
+ @end menu
+ 
+ @node java.nio.VMDirectByteBuffer,,java.nio,java.nio
+ @subsection @code{java.nio.VMDirectByteBuffer}
+ 
+ A @code{ByteBuffer} maintains a buffer of bytes, and allows it to be
+ manipulated using primitive operations such as @code{get}, @code{put},
+ @code{allocate} and @code{free}.  A direct buffer avoids intermediate
+ copying, and uses native data which shouldn't be manipulated by a
+ garbage collector.  The VM class consists of @code{static} @code{native}
+ methods, all of which are given default implementations by GNU
+ Classpath.
+ 
+ @itemize @bullet
+ @item @code{init()} -- Creates an instance of an appropriate
+ @code{gnu.classpath.RawData} class.  This class is not garbage
+ collected, is created natively and is used in the other methods to reference
+ the buffered data.
+ @item @code{allocate(int)} -- Allocates the memory for the buffer using
+ @code{malloc} and returns a reference to the @code{RawData} class.
+ @item @code{free(RawData)} -- Frees the memory used by the buffer.
+ @item @code{get(RawData,int)}  -- Returns the data at the specified index.
+ @item @code{get(RawData,int,byte[],int,int)} -- Copies a section of the
+ data into a byte array using @code{memcpy}.
+ @item @code{put(RawData,int,byte)} -- Puts the given data in the buffer
+ at the specified index.
+ @item @code{adjustAddress(RawData,int)} -- Adjusts the pointer into the buffer.
+ @item @code{shiftDown(RawData,int,int,int)} -- Moves the content of the buffer
+ at an offset down to a new offset using @code{memmove}.
+ @end itemize
+  
+ @node java.nio.channels, gnu.java.nio, java.nio, Classpath Hooks
+ @section java.nio.channels
+ 
+ Channels provide the data for the buffers with the New I/O packages.
+ For example, a channel may wrap a file or a socket.  The VM hooks,
+ at the moment, simply allow the channels to be accessed by @code{java.io}
+ streams.
+ 
+ @menu
+ * java.nio.channels.VMChannels::
+ @end menu
+ 
+ @node java.nio.channels.VMChannels,,java.nio.channels,java.nio.channels
+ @subsection @code{java.nio.channels.VMChannels}
+ 
+ @code{VMChannels} provides the methods that create the channels or
+ streams.  The default implementation is in pure Java and simply wraps
+ the channels in standard I/O classes from @code{java.io}.
+ 
+ @itemize @bullet
+ @item @code{createStream(Class,Channel)} -- Creates a @code{FileChannel}
+ which wraps an instance of the specified stream class, created by reflection.
+ This method is private, and is used by the other two.
+ @item @code{newInputStream(ReadableByteChannel)} -- Wraps the channel
+ in a @code{FileInputStream}.
+ @item @code{newOutputStream(WritableByteChannel)} -- Wraps the channel
+ in a @code{FileOutputStream}.
+ @end itemize
+ 
+ @node gnu.java.nio, Classpath Callbacks, java.nio.channels, Classpath Hooks
+ @section gnu.java.nio
+ 
+ The @code{gnu.java.nio} class provides Classpath implementations of the
+ interfaces provided by @code{java.nio}.  The VM classes provide the native
+ support necessary to implement @emph{pipes} and @emph{selectors}.
+ 
+ @menu
+ * gnu.java.nio.VMPipe::
+ * gnu.java.nio.VMSelector::
+ @end menu
+ 
+ @node gnu.java.nio.VMPipe,gnu.java.nio.VMSelector,gnu.java.nio,gnu.java.nio
+ @subsection @code{gnu.java.nio.VMPipe}
+ 
+ @code{VMPipe} provides the native functionality for a uni-directional pipe
+ between a source and a destination (sink) channel.  It consists of one 
+ @code{static} @code{native} method, @code{init(PipeImpl,SelectorProvider)},
+ the reference implementation of which is currently a native stub.  Ideally,
+ this should initialise the pipe at the native level.
+ 
+ @node gnu.java.nio.VMSelector,,gnu.java.nio.VMPipe,gnu.java.nio
+ @subsection @code{gnu.java.nio.VMSelector}
+ 
+ A @code{Selector} selects between multiple @code{SelectableChannel}s based
+ on their readiness and a key set.  The VM hook for the Classpath implementation
+ of this is @code{VMSelector}, and this allows the actual @code{select()}
+ operation to be performed.  This is represented by the @code{static}
+ @code{native} method, @code{select(int[],int[],int[],long)}, and a default
+ implementation of this is provided.
+ 
+ @node Classpath Callbacks, , gnu.java.nio, Classpath Hooks
+ Some of the classes you implement for the VM will need to call back to
+ package-private methods in Classpath:
+ 
+ @itemize @bullet
+ @item @code{java.lang.ThreadGroup.addThread(Thread)}
+ Call this method from @code{Thread} when a new @code{Thread} is created, to add it to
+ the group.
+ 
+ @item @code{java.lang.ThreadGroup.removeThread(Thread)}
+ Call this method from @code{Thread} when a @code{Thread} is stopped or destroyed.
+ @end itemize
+ 
+ @node VM Hooks, JNI Implementation, Classpath Hooks, Top
+ @comment node-name, next, previous, up
+ @chapter VM Hooks
+ 
+ VMs need to do some dirty work; there are some things in the VM that
+ unfortunately are dependent on the internal structure of various
+ classes.  This is a guide to all of the things the VM itself needs to
+ know about classes.
+ 
+ Some of the core classes, while being implemented by GNU Classpath,
+ provide space for state (in the form of a @code{vmdata} object) to be
+ stored by the VM, and can not be constructed normally.
+ 
+ @itemize @bullet
+ @item java.lang.Class
+ @item java.lang.ClassLoader
+ @end itemize
+ 
+ The default implementations of some VM classes also follow this methodology,
+ when it is intended that most VMs will keep the default.
+ 
+ @itemize @bullet
+ @item java.lang.VMThread
+ @item java.lang.VMThrowable
+ @end itemize
+ 
+ Several core classes must be completely implemented by the VM for Classpath to
+ work, although reference implementations are provided.  These classes are:
+ 
+ @itemize @bullet
+ @item java.lang.reflect.Constructor
+ @item java.lang.reflect.Method
+ @item java.lang.reflect.Field
+ @end itemize
+ 
+ The following issues are of note;
+ 
+ @itemize @bullet
+ @item @code{java.lang.Class} @*
+ The GNU Classpath implementation of @code{java.lang.Class} provides an
+ object for storing the internal state of the class maintained by the VM.
+ This is the only known place where this matters.  The class is
+ constructed with this data by the VM.  Some VMs do not create the
+ @code{Class} object at the point where the class is defined; instead,
+ they wait until a @code{Class} object is actually used.
+ 
+ @item Array Classes @*
+ When you are creating an array class, you should set the
+ @code{ClassLoader} of the array class to the @code{ClassLoader} of its
+ component type.  Whenever you add a class to a @code{ClassLoader}, you
+ need to notify the @code{ClassLoader} and add the new @code{Class} to
+ its internal cache of classes.  To do this, call
+ @code{ClassLoader.addVMCreatedClass(Class)}.  @emph{Note: this is
+ written in anticipation of 1.2 support and does not apply just yet.}
+ 
+ @item Primordial Class Loader @*
+ When the primordial class loader loads a class, it needs to tell
+ Classpath what it has done in order for security stuff to work right.
+ To do this, call the static method
+ @code{ClassLoader.newPrimordialClass(Class)}.
+ 
+ Even the first few core classes need to do this; in order to do it,
+ simply call this method @emph{after} the initial class loading has been
+ done.  No harm will come, as long as you follow the guidelines in the
+ @pxref{Initialization} section.
+ 
+ @emph{Note: this is written in anticipation of 1.2 support and does not
+ apply just yet.}
+ 
+ @item Top-level Exception Handler @*
+ Exceptions take care of themselves in Classpath; all you need to do in
+ the top-level exception handler is call @code{Throwable.printStackTrace()}.
+ 
+ @item Security and Traces @*
+ There will eventually be a feature in the 1.2 security that keeps the
+ @code{AccessController} from having to evaluate @emph{all} of the
+ @code{ProtectionDomain}s every time a security check is made.  I think a common
+ case is a single method doing a lot of things that require security
+ checks.  However, I don't want to bog down the method stack too much, so
+ this feature of the VM will have the @code{AccessController} for a thread
+ calling out to the VM to tell it how high it was on the stack when it
+ made the last security request.  Every time the stack goes lower than
+ that number, the VM will decrement the number.  The @code{AccessController}
+ will remember what the accumulated protection status was at every stack
+ level (an @code{AccessControlContext}) and use that aggregated information to
+ do the check.  I am not sure, however, whether the savings are
+ substantial enough to outweigh the integer check and set after every
+ method call.  I will investigate.
+ 
+ @item Threading @*
+ I figured I'd put this here because a VM guy might be wondering about it.
+ We implement @code{ThreadGroup}, but that class is almost entirely
+ VM-independent.  The root @code{ThreadGroup}, a static field called
+ @code{ThreadGroup.root}, should be initialized by Classpath, but if you wish to
+ reinitialize it yourself, there should be no harm.
+ 
+ @end itemize
+ 
+ @node JNI Implementation, Miscellaneous VM Requirements, VM Hooks, Top
+ @comment  node-name,  next,  previous,  up
+ @chapter JNI Implementation
+ 
+ Classpath comes with its own implementation of @file{jni.h}.  This
+ file can be customized by the VM in a few ways, by defining macros
+ that affect the interpretation of the file.  These macros are all
+ intended for use by a VM which uses GNU Classpath and which wants to
+ use a single copy of @file{jni.h} for both internal and external use.
+ 
+ @itemize @bullet
+ @item _CLASSPATH_VM_JNI_TYPES_DEFINED
+ Some VMs like to define JNI ``object'' types in a special way.  If
+ this macro is defined, the Classpath @file{jni.h} will avoid defining
+ these types.  By default, these types are defined in @file{jni.h}.
+ The full list of types and macros treated this way is: @samp{jobject},
+ @samp{jclass}, @samp{jstring}, @samp{jthrowable}, @samp{jweak},
+ @samp{jarray}, @samp{jobjectArray}, @samp{jbyteArray},
+ @samp{jshortArray}, @samp{jintArray}, @samp{jlongArray},
+ @samp{jbooleanArray}, @samp{jcharArray}, @samp{jfloatArray},
+ @samp{jdoubleArray}, @samp{JNIEnv}, @samp{JavaVM}, @samp{JNI_TRUE}
+ (macro), @samp{JNI_FALSE} (macro).
+ 
+ @item _CLASSPATH_VM_INTERNAL_TYPES_DEFINED
+ If the VM has its own definitions for @samp{jfieldID} and
+ @samp{jmethodID}, then it should define this macro.  Otherwise,
+ @file{jni.h} will provide definitions for these types.
+ 
+ @item _CLASSPATH_JNIIMPEXP
+ Three functions -- @samp{JNI_GetDefaultJavaVMInitArgs},
+ @samp{JNI_CreateJavaVM}, and @samp{JNI_GetCreatedJavaVMs} -- must be
+ marked as @samp{JNIIMPORT} when seen by user code, but most likely
+ should be marked as @samp{JNIEXPORT} when defined in the VM
+ implementation.  This macro can be defined to one or the other by the
+ VM as appropriate.  If this macro is not defined, it defaults to
+ @samp{JNIIMPORT}.
+ 
+ @item _CLASSPATH_JNIENV_CONTENTS
+ A VM can add fields to the @samp{JNIEnv} structure by defining this to
+ be a sequence of field declarations.
+ 
+ @end itemize
+ 
+ 
+ @node Miscellaneous VM Requirements,  , JNI Implementation, Top
+ @comment  node-name,  next,  previous,  up
+ @chapter Miscellaneous VM Requirements
+ 
+ Classpath places a few requirements on the VM that uses it.
+ 
+ @menu
+ * JNI Version::                 
+ * VM Threading Model::          
+ * Boot Library Path Property::
+ @end menu
+ 
+ @node JNI Version, VM Threading Model, Miscellaneous VM Requirements, Miscellaneous VM Requirements
+ @comment  node-name,  next,  previous,  up
+ @section JNI Version
+ 
+ Classpath currently uses only JNI 1.1, except for one JNI 1.2 function
+ in the JNI Invocation API: GetEnv().  And GetEnv() is only used in the
+ ``portable native sync'' code, so it's only actually used by Jikes RVM
+ and Kaffe.  
+ 
+ A future direction will probably be to require that all VMs provide
+ JNI 1.2.  If this poses problems, please raise them on the classpath
+ mailing list. 
+ 
+ @node VM Threading Model, Boot Library Path Property, JNI Version, Miscellaneous VM Requirements
+ @comment  node-name,  next,  previous,  up
+ @section VM Threading Model
+ 
+ Classpath's AWT peers use GTK+.  GTK+ uses GLIB.  Normally, Classpath
+ will initialize GLIB's @dfn{gthreads} to use
+ the platform's native threading model@footnote{The native threading
+ model is pthreads on Linux and AIX, the two platforms Classpath
+ currently runs on.}
+ 
+ If the Java runtime doesn't use the native threading model, then you
+ will want Classpath to tell GLIB to use the Java threading primitives
+ instead.  Otherwise, GLIB would use the native threading model to
+ perform operations such as creating thread-local data, and that just
+ doesn't work on systems (such as Kaffe in some configurations, and
+ such as Jikes RVM) that use @i{m}:@i{n} threading.
+ 
+ Historically, enabling the Java threading primitives had been done at
+ build time, by configuring classpath with the
+ @option{--portable-native-sync} option.  This had bad consequences,
+ though -- it meant that the prebuild GNU Classpath package distributed
+ with Debian GNU/Linux would not be usable with VMs that could
+ otherwise have used it.  Instead, we encourage
+ the use of the Java system property
+ @code{gnu.classpath.awt.gtk.portable.native.sync}.  A VM that wants
+ GLIB to use the Java threading primitives should modify
+ @code{VMRuntime.insertSystemProperties()} to include code like the
+ following:
+ 
+ @example
+ static void insertSystemProperties(Properties @var{p}) 
+ @end example
+ ...
+ @example
+ @var{p}.put("gnu.classpath.awt.gtk.portable.native.sync", "true");
+ @end example
+ 
+ So, the configure option
+ @option{--portable-native-sync} is deprecated, and should go away in a
+ subsequent release of GNU Classpath.
+ 
+ @node Boot Library Path Property,  , VM Threading Model, Miscellaneous VM Requirements
+ @comment  node-name,  next,  previous,  up
+ @section Boot Library Path Property
+ 
+ As of GNU Classpath 0.15 a system property named @code{gnu.classpath.boot.library.path}
+ can be set by the VM to specify the directories which contain GNU Classpath's native
+ libraries. Usually this value is given at configuration time and is then hardcoded
+ in the VM. However for development purposes it is handy to switch to another installation
+ by overriding the properties' value on the command line.
+ 
+ A VM that does not support this feature can simply ignore the property.
+ 
+ For compatibility reasons we suggest to set the default value of @code{java.library.path}
+ to the value of the @code{LD_LIBRARY_PATH} environment if it exists on your platform.
+ 
+ @bye
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/Makefile gcc-4.1.0/libjava/classpath/doc/www.gnu.org/Makefile
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/Makefile	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/Makefile	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ SUBDIRS 	:= announce downloads docs faq events cp-tools
+ 
+ ifndef WMK
+   export WMK=wmk
+ endif
+ ifndef WML
+   export WML=wml
+ endif
+ 
+ WML_SRC = $(wildcard *.wml)
+ WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
+ 
+ all : $(WML_OBJS) subdirs
+ 
+ %.texinfo :
+ 	cp ../$(notdir $(@)) docs
+ 
+ # home and news html includes newsitems.txt so we list that here explicitly
+ home.html: home.wml include/macros.wml include/layout.wml newsitems.txt
+ 	$(WML) -o $@ $<
+ news.html: news.wml include/macros.wml include/layout.wml newsitems.txt
+ 	$(WML) -o $@ $<
+ 
+ %.html: %.wml include/macros.wml include/layout.wml
+ 	$(WML) -o $@ $<
+ 
+ .PHONY : clean
+ clean :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
+ 	-rm -f *.html
+ 
+ .PHONY : subdirs
+ subdirs :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
+ 
+ .PHONY : publish
+ publish : 
+ 	@sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	@sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	$(foreach dir, $(SUBDIRS), \
+ 	  sh -c "mkdir -p $(CLASSPATH_WEBROOT)/$(dir);\
+ 	         cd $(dir) && $(MAKE) publish";)
+ 	-cp -f *.html $(CLASSPATH_WEBROOT)
+ 	-cp -f *.css $(CLASSPATH_WEBROOT)
+ 	# -cp -f *.jpg $(CLASSPATH_WEBROOT)
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/README gcc-4.1.0/libjava/classpath/doc/www.gnu.org/README
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/README	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/README	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ All HTML files are generated from WML source.
+ 
+ If you wish to generate/view the HTML files locally, you'll need to
+ have wml and texi2html installed.  To make the HTML files, just
+ type "make".
+ 
+ 
+ Quick and dirty "How To"
+ 
+ How to create a webpage:
+ 
+ 1. When working in a subdirectory, begin the page with:
+    #!wml --include=..
+ 
+ 2. Add:
+    #include "include/layout.wml"
+ 
+ 3. Add <subject "page title">
+ 
+    this will set the page title to:
+    "page title - GNU Project -Free Software Foundation (FSF)" 
+ 
+ 4. Write your contents. Use the following pattern:
+ 
+   <box>
+     <boxtitle>...section title...</boxtitle>
+     <boxitem>...section contents...</boxitem>
+ 
+     <boxtitle>...section title...</boxtitle>
+     <boxitem>...section contents...</boxitem>
+   </box>
+ 
+ 5. To change the menu entries, edit include/layout.wml
+ 
+ 6. Call make to build the pages.
+ 
+ 7. Set "CLASSPATH_WEBROOT" to a directory before calling "make publish"
+    to deploy the pages locally
+ 
+ A few useful tags (defined in layout.wml)
+ 
+ * <createlink name="name" url="url>
+ 
+ creates a <a href="url">name</a> entry
+ 
+ Some pages define their own tags (e.g. faq.wml, tools.wml, downloads.wml)
+ to organize their content.
+ 
+ 
+ Guide to the custom-defined tags
+ --------------------------------
+ 
+ Links
+   Description:
+     creates a <a href="url">name</a> entry; if name is missing, uses the url 
+     as name
+   Availability:
+     everywhere (defined in macros.wml)
+   Format:
+     <createlink name="name" url="url>
+     <createlink url="url>
+ 
+ Commented code
+   Description:
+     creates a commented code example
+   Availability:
+     everywhere (defined in macros.wml)
+   Format:
+     <commented-code>
+       <code-line code="1st code-line">comment to 1st line of code</code-line>
+       <code-line code="2nd code-line">comment to 2nd line of code</code-line>
+       <code-line code="3rd code-line" />
+     </commented-code>
+ 
+ 
+ FAQ-Lists
+ 
+   <faq-section name="section name">
+     <faq question="1st question">
+       1st answer
+     </faq>
+     <faq question="2nd question">
+       2nd answer
+     </faq>
+   </faq-section>
+   <faq-section name="section name">
+     <faq question="1st question">
+       1st answer
+     </faq>
+   </faq-section>
+ 
+ Project Tables
+   Description:
+     Define a project in a project table
+   Example: 
+     stories.wml
+   Availability:
+     everywhere (defined in macros.wml)
+   Format:
+     <project-list>
+       <project name="proj name"  url="proj url">
+         project description
+       </project>
+       <project name="proj name"  url="proj url">
+         project description
+       </project>
+     </project-list>
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/19990206.txt gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/19990206.txt
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/19990206.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/19990206.txt	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ I am pleased to announce the first development release of GNU Classpath,
+ a project to create a free software replacement for Sun's proprietary
+ Java class libraries.  The project is initially providing class library
+ support for the Japhar JVM.
+ 
+ Here are the answers to some questions you might have about this project 
+ and this release.
+ 
+ 1).  Where can I get it?
+ 
+ GNU Classpath 0.00 can be downloaded from:
+ 
+ ftp://alpha.gnu.ai.mit.edu/pub/gnu/classpath-0.00.tar.gz
+ 
+ 2).  What is included?
+ 
+ The following java packages are supported:
+    -- java.beans
+    -- java.io
+    -- java.lang
+    -- java.lang.reflect
+    -- java.math
+    -- java.net
+    -- java.security (partial and non-functioning)
+    -- java.security.acl
+    -- java.security.interfaces
+    -- java.util
+ 
+ This is enough to run many non-awt programs.  Not all classes and methods
+ are implemented in this release, but most are.  The major missing piece
+ of core functionality is java.text.  Many of the implemented classes are
+ already up to the Java 1.2 spec.
+ 
+ 3).  What is required to build/install/run?
+ 
+ GNU Classpath requires that Japhar 0.07 be installed.  Information on
+ obtaining Japhar is available from http://www.japhar.org/.  A working
+ C compiler is also required.  You will need the Sun JDK installed if you
+ elect to recompile the Java classes.
+ 
+ 4).  What platforms are supported?
+ 
+ GNU/Linux is the only platform that has been tested.  We plan to 
+ eventually support many others.
+ 
+ 5).  Who should use this software?
+ 
+ This is a development release only.  You should only install it if you
+ are interested in Classpath development or reporting bugs.  We appreciate
+ both.  You might also be interested if you enjoy installing random alpha
+ software.
+ 
+ 6).  Where do I go for more information?
+ 
+ The project has a web page at 
+ 
+ http://www.classpath.org/
+ 
+ and
+ 
+ http://www.gnu.org/software/classpath/classpath.html
+ 
+ Information on our mailing list is available at the web site.
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/19990206.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/19990206.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/19990206.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/19990206.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,130 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:new id=en short>
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="cbj">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="<en>GNU Classpath Annoucement (1999-02-06)</en>">
+ 
+ <p>
+ <en>
+ I am pleased to announce the first development release of GNU Classpath,
+ a project to create a free software replacement for Sun's proprietary
+ Java class libraries.  The project is initially providing class library
+ support for the Japhar JVM.
+ </en>
+ </p>
+ <p>
+ <en>
+ Here are the answers to some questions you might have about this project 
+ and this release.
+ </en>
+ </p>
+ <p>
+ <en>
+ 1).  Where can I get it?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath 0.00 can be downloaded from: 
+ <createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.00.tar.gz"
+       name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.00.tar.gz">
+ </en>
+ </p>
+ <p>
+ <en>
+ 2).  What is included?
+ </en>
+ </p>
+ <p>
+ <en>
+ The following java packages are supported:
+ </en>
+ </p>
+ <UL>
+   <LI>java.beans</LI>
+   <LI>java.io</LI>
+   <LI>java.lang</LI>
+   <LI>java.lang.reflect</LI>
+   <LI>java.math</LI>
+   <LI>java.net</LI>
+   <LI>java.security (partial and non-functioning)</LI>
+   <LI>java.security.acl</LI>
+   <LI>java.security.interfaces</LI>
+   <LI>java.util</LI>
+ </UL>
+ <p>
+ <en>
+ This is enough to run many non-awt programs.  Not all classes and methods
+ are implemented in this release, but most are.  The major missing piece
+ of core functionality is java.text.  Many of the implemented classes are
+ already up to the Java 1.2 spec.
+ </en>
+ </p>
+ <p>
+ <en>
+ 3).  What is required to build/install/run?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath requires that Japhar 0.07 be installed.  Information on
+ obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
+ name="http://www.hungry.com/old-hungry/products/japhar/">.  A working C compiler is also required.  You
+ will need the Sun JDK installed if you elect to recompile the Java
+ classes.
+ </en>
+ </p>
+ <p>
+ <en>
+ 4).  What platforms are supported?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU/Linux is the only platform that has been tested.  We plan to 
+ eventually support many others.
+ </en>
+ </p>
+ <p>
+ <en>
+ 5).  Who should use this software?
+ </en>
+ </p>
+ <p>
+ <en>
+ This is a development release only.  You should only install it if you
+ are interested in Classpath development or reporting bugs.  We appreciate
+ both.  You might also be interested if you enjoy installing random alpha
+ software.
+ </en>
+ </p>
+ <p>
+ <en>
+ 6).  Where do I go for more information?
+ </en>
+ </p>
+ <p>
+ <en>
+ The project has a web page at 
+ <createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
+ 
+ and
+ 
+ <createlink url="http://www.gnu.org/software/classpath/classpath.html"
+       name="http://www.gnu.org/software/classpath/classpath.html">
+ 
+ Information on our mailing list is available at the web site.
+ </en>
+ </p>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20001120.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20001120.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20001120.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20001120.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:new id=en short>
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="cbj">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="<en>GNU Classpath Annoucement (2000-11-20)</en>">
+ 
+ <p>
+ <en>
+ I am pleased to announce a new development release of GNU Classpath,
+ a project to create a free software replacement for Sun's proprietary
+ Java class libraries.  The project is initially providing class library
+ support for the Japhar JVM.  There are a few other JVMs which have taken
+ the project libraries and used them in their own projects as well.
+ </en>
+ </p>
+ <p>
+ <en>
+ Here are the answers to some questions you might have about this project 
+ and this release.
+ </en>
+ </p>
+ <p>
+ <en>
+ 1).  Where can I get it?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath 0.01 can be downloaded from:
+ 
+ <createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.01.tar.gz"
+       name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.01.tar.gz">
+ </en>
+ </p>
+ <p>
+ <en>
+ 2).  What is included?
+ </en>
+ </p>
+ <p>
+ <en>
+ The following java packages are supported:
+ </en>
+ </p>
+ <UL>
+   <LI>java.beans</LI>
+   <LI>java.io</LI>
+   <LI>java.lang</LI>
+   <LI>java.lang.reflect</LI>
+   <LI>java.math</LI>
+   <LI>java.net</LI>
+   <LI>java.security (partial and non-functioning)</LI>
+   <LI>java.security.acl</LI>
+   <LI>java.security.interfaces</LI>
+   <LI>java.util</LI>
+ </UL>
+ <p>
+ <en>
+ This is enough to run many non-awt programs.  Not all classes and
+ methods are implemented in this release, but most are.  Many of the
+ implemented classes are already up to the Java 1.2 spec.
+ </en>
+ </p>
+ <p>
+ <en>
+ 3).  What is required to build/install/run?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath requires that Japhar 0.09 be installed.  Information on
+ obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
+ name="http://www.hungry.com/old-hungry/products/japhar/">.  A working C compiler is also required.  You
+ will need IBM's Jikes Java compiler installed if you elect to
+ recompile the Java classes and Sun's 1.1.8 JDK javah installed to
+ create native header files.  RPMs compatible with Red Hat 7 have been
+ created of Japhar, NSPR, a cross platform thread library Japhar uses,
+ and GNU Classpath.  Installing onto a Gnome workstation should
+ provide the rest of the required libraries automatically.  Otherwise,
+ you may need to install libart and other packages detailed more
+ precisely in the HACKING file.
+ </en>
+ </p>
+ <p>
+ <en>
+ 4).  What platforms are supported?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU/Linux is the only platform that has been tested.  We plan to 
+ eventually support many others.
+ </en>
+ <p>
+ <p>
+ <en>
+ 5).  Who should use this software?
+ </en>
+ </p>
+ <p>
+ <en>
+ This is a development release only.  You should only install it if you
+ are interested in Classpath development or reporting bugs.  We appreciate
+ both.  You might also be interested if you enjoy installing random alpha
+ software.
+ </en>
+ </p>
+ <p>
+ <en>
+ 6).  Where do I go for more information?
+ </en>
+ </p>
+ <p>
+ <en>
+ The project has a web page at 
+ 
+ <createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
+ 
+ and
+ 
+ <createlink url="http://www.gnu.org/software/classpath/classpath.html"
+       name="http://www.gnu.org/software/classpath/classpath.html">
+ 
+ Information on our mailing list is available at the web site.
+ </en>
+ </p>
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20010106.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20010106.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20010106.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20010106.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,141 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:new id=en short>
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="cbj">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="<en>GNU Classpath Annoucement (2001-01-05)</en>"> 
+ 
+ <p>
+ <en>
+ I am pleased to announce a new development
+ release of GNU Classpath, a project to create a free software
+ replacement for Sun's proprietary Java class libraries.  The project
+ is initially providing class library support for the Japhar JVM, but
+ will soon provide out of the box support SableVM, Intel's ORP, and
+ Kaffe.  The major improvements for this release are the addition of a
+ correct security policy file and exception stack traces are now
+ printed when using Japhar.
+ </en>
+ </p>
+ <p>
+ <en>
+ Here are the answers to some questions you might have about this project 
+ and this release.
+ </en>
+ </p>
+ <p>
+ <en>
+ 1).  Where can I get it?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath 0.02 can be downloaded from:
+ 
+ <createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.02.tar.gz"
+       name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.02.tar.gz">
+ </en>
+ </p>
+ <p>
+ <en>
+ 2).  What is included?
+ </en>
+ </p>
+ <p>
+ <en>
+ The following java packages are supported:
+ </en>
+ </p>
+ <UL>
+   <LI>java.beans</LI>
+   <LI>java.io</LI>
+   <LI>java.lang</LI>
+   <LI>java.lang.reflect</LI>
+   <LI>java.math</LI>
+   <LI>java.net</LI>
+   <LI>java.security (partially functioning)</LI>
+   <LI>java.security.acl</LI>
+   <LI>java.security.interfaces</LI>
+   <LI>java.util</LI>
+ </UL>
+ <p>
+ <en>
+ This is enough to run many non-awt programs.  Not all classes and
+ methods are implemented in this release, but most are.  Many of the
+ implemented classes are already up to the Java 1.2 spec.
+ </en>
+ </p>
+ <p>
+ <en>
+ 3).  What is required to build/install/run?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath requires that Japhar 0.09 be installed along with a
+ single patch to Japhar 0.09 included with the release.  Information on
+ obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
+ name="http://www.hungry.com/old-hungry/products/japhar/">.  A working C compiler is also required.  You
+ will need IBM's Jikes Java compiler installed if you elect to
+ recompile the Java classes and Sun's 1.1.8 JDK javah installed to
+ create native header files.  RPMs compatible with Red Hat 7 have been
+ created of Japhar, NSPR, a cross platform thread library Japhar uses,
+ and GNU Classpath.  Installing onto a Gnome workstation should provide
+ the rest of the required libraries automatically.  Otherwise, you may
+ need to install libart and other packages detailed more precisely in
+ the HACKING file.
+ </en>
+ </p>
+ <p>
+ <en>
+ 4).  What platforms are supported?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU/Linux is the only platform that has been tested.  We plan to 
+ eventually support many others.
+ </en>
+ </p>
+ <p>
+ <en>
+ 5).  Who should use this software?
+ </en>
+ </p>
+ <p>
+ <en>
+ This is a development release only.  You should only install it if you
+ are interested in Classpath development or reporting bugs.  We appreciate
+ both.  You might also be interested if you enjoy installing random alpha
+ software.
+ </en>
+ </p>
+ <p>
+ <en>
+ 6).  Where do I go for more information?
+ </en>
+ </p>
+ <p>
+ <en>
+ The project has a web page at 
+ 
+ <createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
+ 
+ and
+ 
+ <createlink url="http://www.gnu.org/software/classpath/classpath.html"
+       name="http://www.gnu.org/software/classpath/classpath.html">
+ 
+ Information on our mailing list is available at the web site.
+ </en>
+ </p>
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20020208.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20020208.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20020208.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20020208.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,166 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:new id=en short>
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="mjw">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="<en>GNU Classpath 0.03 Announcement (2002-02-08)</en>"> 
+ 
+ <p>
+ <en>
+ We are pleased to announce a new development release of GNU Classpath.
+ GNU Classpath, Essential Libraries for Java, is a project to create free
+ core class libraries for use with virtual machines and compilers for the
+ Java language.
+ </en>
+ </p>
+ <p>
+ <en>
+ New in this release are the addition of java.util.zip and java.rmi
+ packages, VM independent jni.h, more flexible build environment to
+ separate class and native code generation, out of the box support for
+ the ORP VM, and lots of bug fixes and updates to make GNU Classpath more
+ compliant with the 1.2, 1.3 and 1.4 API specification.  The copyleft
+ has been clarified and all code in the library is now distributed under
+ the same terms.
+ </en>
+ </p>
+ <p>
+ <en>
+ Here are the answers to some questions you might have about this project 
+ and this release.
+ </en>
+ </p>
+ <p>
+ <en>
+ 1).  Where can I get it?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath 0.03 can be downloaded from:
+ 
+ <createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.03.tar.gz"
+       name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.03.tar.gz">
+ </en>
+ </p>
+ <p>
+ <en>
+ 2).  What is included?
+ </en>
+ </p>
+ <p>
+ <en>
+ The following packages (some with subpackages) are supported:
+ </en>
+ </p>
+ <UL>
+   <LI>java.applet (untested)</LI>
+   <LI>java.awt (very experimental)</LI>
+   <LI>java.beans</LI>
+   <LI>java.io</LI>
+   <LI>java.lang</LI>
+   <LI>java.math</LI>
+   <LI>java.net</LI>
+   <LI>java.rmi</LI>
+   <LI>java.security (partially functioning)</LI>
+   <LI>java.sql</LI>
+   <LI>java.text (untested)</LI>
+   <LI>java.util</LI>
+   <LI>java.util.jar</LI>
+   <LI>java.util.zip</LI>
+ </UL>
+ <p>
+ <en>
+ This is enough to run many non-awt programs.  Not all classes and
+ methods are implemented in this release, but most are.  Many of the
+ implemented classes are already up to the 1.2 API spec. Some are
+ already compliant with the 1.3 and (preliminary) 1.4 API specification.
+ 
+ More information on the current status of each package can be found at
+ <createlink url="http://www.gnu.org/software/classpath/status.html"
+       name="http://www.gnu.org/software/classpath/status.html">
+ </en>
+ </p>
+ <p>
+ <en>
+ 3).  What is required to build/install/run?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc.  When creating native code you will
+ also need a working C compiler and up to date Gnome development libraries
+ (gtk+, libart and gdk-pixbuf).  More information on the precise version
+ numbers for the tools and libraries can be found in the INSTALL file.
+ </en>
+ </p>
+ <p>
+ <en>
+ 4).  What platforms and VMs are supported?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU/Linux is the only platform that has been tested.  We plan to 
+ eventually support many others.
+ </en>
+ </p>
+ <p>
+ <en>
+ This release support ORP 1.0.9 out of the box. But other compilers and
+ virtual machines such as gcj, Kissme, SableVM, Jupiter and Jaos also work
+ with slightly customized versions of GNU Classpath.  Please check if there
+ is a customized version available for the VM you use before trying the bare
+ bones GNU Classpath release.  We are working with the VM creators to keep
+ the differences between the core classes as small as possible.
+ </en>
+ </p>
+ <p>
+ <en>
+ 5).  Who should use this software?
+ </en>
+ </p>
+ <p>
+ <en>
+ Although it is already capable of supporting many Java applications,
+ this is a development release.  As such, there are still many unfinished
+ components, and some problems are to be expected.  You should install it
+ if you are interested in Classpath development or reporting bugs.  We
+ appreciate both.
+ </en>
+ </p>
+ <p>
+ <en>
+ 6).  Where do I go for more information?
+ </en>
+ </p>
+ <p>
+ <en>
+ The project home page with information on our mailing list can be found at 
+ 
+ <createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
+ 
+ or
+ 
+ <createlink url="http://www.gnu.org/software/classpath/classpath.html"
+       name="http://www.gnu.org/software/classpath/classpath.html">
+ </en>
+ </p>
+ <p>
+ <en>
+ The bug database, CVS, task-manager and latest news can be found on Savannah at
+ <createlink url="http://savannah.gnu.org/projects/classpath/"
+       name="http://savannah.gnu.org/projects/classpath/">
+ </en>
+ </p>
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20040313.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20040313.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20040313.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20040313.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,108 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:new id=en short>
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="<en>GNU Classpath 0.08 Announcement (2004-03-15)</en>"> 
+ <pre>
+ We are pleased to announce a new development release of GNU Classpath.
+ 
+ GNU Classpath, Essential Libraries for Java, is a project to create free
+ core class libraries for use with virtual machines and compilers for the
+ java programming language.
+ 
+ GNU Classpath 0.08 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.08.tar.gz<br>
+ MD5sum: 17f200744c31f36fdbe15347745562fb
+ 
+ New in GNU Classpath 0.08:
+ 
+ * java.util.regexp implementation through gnu.regexp wrappers.
+ * java.net.URI implementation.
+ * Working implementation of javax.swing.undo.
+ * java.awt.geom.CubicCurve2D/QuadCurve2D: Can now solve cubic and
+   quadratic equations; implementation adapted from the GNU Scientific
+   Library.
+ * Lots of java.awt and gtk+ peer improvements. Also more Swing work.
+   Start of EmbeddedWindow support.
+ * BufferedReader speed improvements.
+ * Improved useabilty of java.text implementation for several
+   applications.
+ * ObjectInputStream is much faster and more compatible with other
+   implementations.
+ * Fix handling of alias methods, where a method has been deprecated in
+   favour of a new one with the same funtion but a different name.
+   (See Deprecated Methods section in the GNU Classpath Hacking Guide.)
+ * javax.print.attribute.standard added.
+ * Lots of java.nio, java.net, java.io fixes and updates.
+ * Depend on autoconf 2.59+ and automake 1.7+, GCJ 3.3+, jikes 1.18+.
+  
+ VM Interface changes:
+ * Split native methods in java.lang.Runtime into java.lang.VMRuntime.
+ * Resources are now also loaded/needed through the bootstrap classloader
+   (gnu.regexp needs MessageBundle included in glibj.zip
+  
+ Fixed Classpath bugs:
+   #6095 java.awt.geom.QuadCurve2D.solveQuadratic sometimes gives
+         wrong results
+   #7099 EventListenerList.getListenerCount should accept null argument
+   #7104 EventListenerList.add does not work
+   #7105 EventListenerList.remove does not work
+   #7107 DefaultBoundedRangeModel.setValue and friends should not throw
+   And lots more.
+ 
+ Here are answers to some questions you might have about this project and
+ this release.
+ 
+ 1). What is required to build/install/run?
+ 
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc. When creating native code you will
+ also need a working C compiler and up to date Gnome development
+ libraries (gtk+, libart and gdk-pixbuf). More information on the
+ precise version numbers for the tools and libraries can be found in
+ the INSTALL file.
+ 
+ A list of virtual machines and compilers known to work with GNU
+ Classpath can be found at our website:
+ http://www.gnu.org/software/classpath/stories.htm
+ 
+ 2). What platforms are supported?
+ 
+ GNU/Linux is the only platform that has been tested.
+ We plan to eventually support many others.
+ 
+ 3). Who should use this software?
+ 
+ Although GNU Classpath is already capable of supporting many
+ applications written in the java programming language, this is a
+ development release. As such, there are still some unfinished
+ components, and some problems are to be expected. You should install it
+ if you are interested in GNU Classpath development or reporting bugs.
+ We appreciate both.
+ 
+ A good overview of the current status can be found on the GNU Classpath
+ at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
+ It includes reports and presentations on the current status and future
+ plans: http://www.gnu.org/software/classpath/events/fosdem04.html
+ 
+ 4). Where do I go for more information?
+ 
+ The project home page with information on our mailing list can be
+ found http://www.gnu.org/software/classpath/.
+ </pre>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20040502.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20040502.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20040502.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20040502.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,133 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:new id=en short>
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="<en>GNU Classpath 0.09 Announcement (2004-05-02)</en>"> 
+ <pre>
+ We are pleased to announce a new development release of GNU Classpath.
+ 
+ GNU Classpath, Essential Libraries for Java, is a project to create free
+ core class libraries for use with virtual machines and compilers for the
+ java programming language.
+ 
+ GNU Classpath 0.09 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.09.tar.gz
+ MD5sum: 1c4bcf2e6b5201c6496ba55ee8aac04d
+ 
+ New in GNU Classpath 0.09:
+ 
+ * Includes updated GNU JAXP version from 2004-02-01.
+ * Native C code is now -ansi -pedantic (C89) clean and (almost) -Wall clean.
+ * java.io is now implemented by delegating most tasks directly to java.nio.
+ * Reworked/Optimized implementations of java.nio.Buffer and subclasses.
+ * New javax.print, javax.print.attribute[.standard] and javax.print.event
+   packages and classes.
+ * java.text attributed iterators support.
+ * New javax.imageio, javax.imageio.event and javax.imageio.spi packages and
+   classes.
+ * GNU Classpath can now load service providers that are described via
+   META-INF/services/* resources in extension JARs. This is useful for
+   implementing the various APIs that are supposed to be extensible via
+   custom plugins. For details, please see the documentation of
+   gnu.classpath.ServiceFactory.
+   Application developers are strongly discouraged from calling glibj
+   internal packages.  Instead, they might want invoke the newly implemented
+   javax.imageio.spi.ServiceRegistry.lookupProviders, which is a standard
+   method for loading plug-ins.
+ * New developers wanting to help the GNU Classpath project might want to
+   review the greatly expanded Hacker Guide included in the doc directory
+   or online at http://www.gnu.org/software/classpath/docs/hacking.html
+   Also the FAQ has been expanded. And when working from CVS you can now use
+   a simple autogen.sh script to get all autotools magic done automagically.
+ * New configure option --with-glibj which defines how to install the glibj
+   class files as zip, as flat directory files or both (zip|flat|both)
+   [default=zip].  When working with multiple runtimes some of which might
+   not support bootstrap classes in zip files the --with-glibj=both option
+   is recommended (this does take extra disc space).
+ * Two big code drops from the libgcj gui branch updating various java.awt
+   and javax.swing classes.
+ * Multiple java.net.InetAdress fixes and java.rmi fixes.
+ * ServerSocket.accept() now restarts listening when system call interrupted.
+ * Much cleanups to make standard API doc valid XHTML (not completed yet).
+ * A scan for unused variables and non-static invocation of static methods
+   turned up a couple of subtle bugs which have now all been fixed.
+ * The Mauve testsuite has been cleaned up considerable and lots of issues
+   in the GNU Classpath core class implementation have been fixed.
+  
+ VM Interface changes:
+  
+ * java.lang.Class/VMClass interface was changed. The interface now no
+   longer requires an instance of VMClass for each Class instance. Instead
+   the field vmdata in Class is now of type Object.
+ * GNU Classpath now assumes that JNI calls SetXField can modify final
+   fields. This was previously used silently for System.in/out/err and should
+   be considered as a feature now.
+ * A new VMProcess and a sample JNI C implementation are now provided to
+   make Runtime.exec() work out of the box on some systems.  This requires
+   a small change to VMRuntime.exec() when a runtime wants to use it as the
+   default java.lang.Process implementation.
+ * The implementation of most of java.io through java.nio moved serveral
+   runtime specific I/O methods. Most methods do have a generic default native
+   C JNI implementation in native/jni/java-nio.
+ * Runtime support methods for java.io.File have been moved to VMFile which
+   also comes with a default JNI C implementation.
+ * To support the new service provider mechanism runtimes must make sure that
+   extension JARs are made accessible via the default context class loader.
+ 
+ 
+ Here are answers to some questions you might have about this project and
+ this release.
+ 
+ 1). What is required to build/install/run?
+ 
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc. When creating native code you will
+ also need a working C compiler and up to date Gnome development
+ libraries (gtk+, libart and gdk-pixbuf). More information on the
+ precise version numbers for the tools and libraries can be found in
+ the INSTALL file.
+ 
+ A list of virtual machines and compilers known to work with GNU
+ Classpath can be found at our website:
+ http://www.gnu.org/software/classpath/stories.htm
+ 
+ 2). What platforms are supported?
+ 
+ GNU/Linux is the only platform that has been tested.
+ We plan to eventually support many others.
+ 
+ 3). Who should use this software?
+ 
+ Although GNU Classpath is already capable of supporting many
+ applications written in the java programming language, this is a
+ development release. As such, there are still some unfinished
+ components, and some problems are to be expected. You should install it
+ if you are interested in GNU Classpath development or reporting bugs.
+ We appreciate both.
+ 
+ A good overview of the current status can be found on the GNU Classpath
+ at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
+ It includes reports and presentations on the current status and future
+ plans: http://www.gnu.org/software/classpath/events/fosdem04.html
+ 
+ 4). Where do I go for more information?
+ 
+ The project home page with information on our mailing list can be
+ found http://www.gnu.org/software/classpath/.
+ </pre>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20040712.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20040712.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20040712.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20040712.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,159 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath 0.10 Announcement (2004-07-09)"> 
+ <pre>
+ We are pleased to announce a new development release of GNU Classpath.
+ 
+ GNU Classpath, Essential Libraries for Java, is a project to create free
+ core class libraries for use with virtual machines and compilers for the
+ java programming language.
+ 
+ GNU Classpath 0.10 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.10.tar.gz
+ MD5sum: a59a5040f9c1237dbf27bfc668919943
+ 
+ New in release 0.10 (Jul 9, 2004)
+ 
+ * java.net.URL now uses application classloader to load URLStreamHandlers
+   and reuses URLStreamHandlers when URL is reset (but protocol isn't changed).
+ * java.io.File.deleteOnExit() implementation.
+ * java.text multiple new features and bug fixes
+   (only 2 out of the 1000+ java.text Mauve tests now fail).
+ * Better (non-black) default AWT System colors.
+ * AWT lists use GTK treeviews.
+ * Proper AWT focus management has been implemented.
+ * Swing menus and scrollpanes are beginning to work.
+ * Swing splitpanes, dialogs and internal frames were added.
+ * Swing repainting / double buffering was redone.
+ * Font management and Pango DPI conversion fixes.
+ * A lot of AWT imaging and event bugs have been picked out.
+ * More of javax.swing.text has been implemented.
+ * javax.swing.Timer has been reimplemented.
+ * java.security.AccessController has been implemented
+   (see runtime section).
+ * The default java.lang.SecurityManager now uses AccessController.
+ * New java.beans.Statement and Expression implementations.
+ * Small FileChannel implementation speed improvement for traditional
+   JNI based systems.
+ * Regenerated all included JNI header files with gcjh (3.5 CVS),
+   removes extra extern modifier and allows stricter compiler warning.
+ * More C code cleanups (-Wmissing-declarations, -Wmissing-prototypes and
+   -Wstring-prototypes) and jni.h fixes (a few funtion prototype fixes,
+   made it compilable with C++ compilers and jni.h got renamed from jni.h.in).
+ * Double.toString() and Float.toString() now work properly on 64-bit
+   PowerPC systems.
+ * PPC Darwin, arm, x86-64 and s/390 JNI C code compilation fixes.
+ * Build system refactored and removed old Japhar specific support.
+ * The gnu.java.awt.EmbeddedWindow class has been improved, and now
+   supports embedding AWT windows in other top-level X windows.
+   This functionality is required by gcjwebplugin.
+ * gcjwebplugin, an applet viewer that can be embedded into several web
+   browsers, has been extensively tested with this release of classpath.
+   (See http://www.nongnu.org/gcjwebplugin/)
+ * Runtime environments based on GNU Classpath 0.10 should be able to
+   start up Eclipse 3.0 out of the box now.
+ 
+ Runtime interface Changes:
+ 
+ * VMProcess.destroy() default implementation fixes.
+ * Fixed the "portable native sync" code; it had been broken since
+   Classpath release 0.06, when we upgraded to GTK+2.
+   Classpath's AWT peers use GTK+.  GTK+ uses GLIB.  GLIB by default uses
+   the platform's native threading model -- pthreads in most cases.
+   If the Java runtime doesn't use the native threading model, then you should
+   specify --portable-native-sync when configuring Classpath, so that GLIB will
+   use the Java threading primitives instead.  (For a superior alternative,
+   see below.)
+ * The VM can set the system property
+   gnu.classpath.awt.gtk.portable.native.sync instead of using the
+   --portable-native-sync configure-type option.
+   See doc/vmintegration.texinfo for details.
+ * We intend that the next release of GNU Classpath will require the VM
+   to provide JNI 1.2.  Classpath currently uses only JNI 1.1, except for
+   one JNI 1.2 function: GetEnv(), in the JNI Invocation API.
+   If this poses problems, please raise them on the classpath mailing list.
+ * The reference implementation of VMThread.holdsLock(Object) now has
+   a default implementation written in java. For efficiency and to
+   prevent spurious wakeups a real 'native' runtime version can be supplied.
+ * There is a new java.security.VMAccessController class that runtimes need
+   to implement to properly support SecurityManagers. The default
+   implementation that comes with GNU Classpath makes sure that ANY attempt
+   to access a protected resource is denied when a SecurityManager is
+   installed. Which is pretty secure, but also no very useful.
+   Please see the documentation in
+   vm/reference/java/security/VMAccessController.java,
+   and please give feedback on the GNU Classpath mailinglist whether or not
+   the current AccessController framework is flexible enough.
+ 
+ Here are answers to some questions you might have about this project and
+ this release.
+ 
+ 1). What is required to build/install/run?
+ 
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc. When creating native code you will
+ also need a working C compiler and up to date Gnome development
+ libraries (gtk+, libart and gdk-pixbuf). More information on the
+ precise version numbers for the tools and libraries can be found in
+ the INSTALL file.
+ 
+ You will also need a runtime environment. The following environments
+ have been tested to work out of the box with this release:
+ 
+     * JamVM         (http://jamvm.sourceforge.net/)
+     * Jikes RVM     (http://www.ibm.com/developerworks/oss/jikesrvm/)
+     * Kissme        (http://kissme.sourceforge.net/)
+ 
+ For other environments that might need modified version of the current
+ release see the README file.  A complete list of virtual machines and
+ compilers known to be based on GNU Classpath can be found at our
+ website: http://www.gnu.org/software/classpath/stories.html
+ 
+ 2). What platforms are supported?
+ 
+ GNU/Linux is the only platform that has been tested.
+ We plan to eventually support many others.
+ 
+ 3). Who should use this software?
+ 
+ Although GNU Classpath is already capable of supporting many
+ applications written in the java programming language, this is a
+ development release. As such, there are still some unfinished
+ components, and some problems are to be expected. You should install it
+ if you are interested in GNU Classpath development or reporting bugs.
+ We appreciate both.
+ 
+ For end users we recommend to use one of the development environments
+ based on GNU Classpath which combine the core libraries with compilers
+ and other tools needed for creating applications and libraries.
+ 
+     * GCC with GCJ  (http://gcc.gnu.org/java/)
+     * Kaffe         (http://www.kaffe.org/)
+ 
+ 4). Where do I go for more information?
+ 
+ The project home page with information on our mailing list can be
+ found http://www.gnu.org/software/classpath/.
+ 
+ A good overview of the current status can be found on the GNU Classpath
+ at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
+ It includes reports and presentations on the current status and future
+ plans: http://www.gnu.org/software/classpath/events/fosdem04.html
+ </pre>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20040913.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20040913.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20040913.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20040913.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,245 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath 0.11 Announcement (2004-09-13)"> 
+ <pre>
+ We are pleased to announce a new developer snapshot release of GNU Classpath.
+ 
+ GNU Classpath, Essential Libraries for Java, is a project to create free
+ core class libraries for use with runtimes, compilers and tools for the
+ java programming language.
+ 
+ GNU Classpath 0.11 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.11.tar.gz
+ MD5sum: fa0e0f2532b838e67f9d9f93d45556a2
+ 
+ Some highlights of this release (more extensive list below):
+ 
+ Inclusion of full javax.crypto, javax.security, javax.net and
+ subpackages.  Complete implementation of java.awt.geom. GTK+ 2.4 AWT
+ peer implementation for AWT FileDialog, better java.awt.image
+ LookupTable, Kernel and BufferedImage support. AWT 1.0 Event Model
+ implemented, and new Swing classes (Spring, SpringLayout, JMenu,
+ JPopupMenu, JColorChooser, JComboBox, JTextField, internal JFrame
+ support and start of JTable and JTree implementations). The Collection
+ classes have seen extensive documentation updates. GNU Classpath
+ Examples have been added - a GPL demo framework for AWT and Swing.
+ 
+ Included, but not activated by default in this release is a Graphics2D
+ implementation based on the Cairo Graphics framework
+ (http://www.cairographics.org). Enabling this makes programs like
+ JFreeChart work on GNU Classpath based runtimes.
+ 
+ [It is recommended that people wanting to experiment with the
+ Graphics2D implementation follow the instructions for building gcj
+ with jhbuild which automatically builds the latest CVS version of GCJ
+ and Cairo at http://people.redhat.com/fitzsim/gcj-and-jhbuild.html]
+ 
+ Not yet included is an implementation of Generic collection classes
+ and classes for other 1.5 language extensions.  Work on this is being
+ done on a special development branch that will be included in a future
+ GNU Classpath release when free runtimes, compilers and tools have all
+ been upgraded to support these new language features.
+ 
+ GNU Classpath uses the Mauve test suite for Compatibility, Completeness
+ and Correctness checking.  This release passes 16816 of 17102 mauve tests.
+ Free Software programs and libraries tested against this release are
+ Ant, Eclipse 2.1, Eclipse 3.0 (starts up, but does not yet completely
+ run), JFreeChart (see above), the Nice programming language
+ environment (which can now be bootstrapped with any GNU Classpath
+ based runtime and which works out of the box with Kaffe and GCJ for
+ creating native executables), gcjwebplugin and many other programs,
+ libraries and applets.
+ 
+ Here are answers to some questions you might have about this project and
+ this release.
+ 
+ 1). Who should use this software?
+ 
+ Although GNU Classpath is already capable of supporting many
+ applications written in the java programming language, this is a
+ development release. As such, there are still some unfinished
+ components, and some problems are to be expected. You should install it
+ if you are interested in GNU Classpath development or reporting bugs.
+ We appreciate both.
+ 
+ For end users we recommend to use one of the development environments
+ based on GNU Classpath which combine the core libraries with compilers
+ and other tools needed for creating applications and libraries.
+ 
+     * GCC with GCJ  (http://gcc.gnu.org/java/)
+     * Kaffe         (http://www.kaffe.org/)
+ 
+ 2). What is required to build/install/run?
+ 
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc. When creating native code you will
+ also need a working C compiler and up to date Gnome development
+ libraries (gtk+, libart and gdk-pixbuf). More information on the
+ precise version numbers for the tools and libraries can be found in
+ the INSTALL file.
+ 
+ You will also need a runtime environment. The following runtime
+ environments should work out of the box with GNU Classpath
+ 
+     * JamVM         (http://jamvm.sourceforge.net/)
+     * Jikes RVM     (http://www.ibm.com/developerworks/oss/jikesrvm/)
+     * Kissme        (http://kissme.sourceforge.net/)
+ 
+ Note that these are just byte code execution runtimes. For development
+ of programs written in the java programming language you will also
+ need compilers and other tools for creating libraries and/or
+ executables (see question 1).
+ 
+ For other environments that might need modified version of the current
+ release see the README file.  A complete list of virtual machines and
+ compilers known to be based on GNU Classpath can be found at our
+ website: http://www.gnu.org/software/classpath/stories.html
+ 
+ 2). What platforms are supported?
+ 
+ GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
+ developers.  We plan to eventually support many others.
+ 
+ 5). Where do I go for more information?
+ 
+ The project home page with information on our mailing list can be
+ found at http://www.gnu.org/software/classpath/
+ 
+ A good overview of the current status can be found on the GNU Classpath
+ at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
+ It includes reports and presentations on the current status and future
+ plans: http://www.gnu.org/software/classpath/events/fosdem04.html
+ 
+ The following presentation given during the Desktop Developers
+ Conference shows how to integrate GNU Claspath and GCJ more with the
+ Free Desktop environments: http://people.redhat.com/fitzsim/ddc2004/
+ 
+ 6). How do I extend the functionality of the core classes?
+ 
+ Besides combining GNU Classpath with the runtimes and compilers above
+ you might want to add support for additional encryption libraries and
+ algorithms as provided by GNU Crypto
+ (http://www.gnu.org/software/gnu-crypto/).  And for additional
+ extension libraries (mail, xml, activation, infobus, servlet) check
+ out GNU ClasspathX (http://www.gnu.org/software/classpathx).
+ 
+ Additional network protocol support is provided by a sub-project
+ called GNU Classpath Inetlib, an extension library to provide extra
+ network protocol support (ftp, finger, gopher) for GNU Classpath, but
+ it can also standalone to ease adding http, imap, pop3 and smtp client
+ support to applictions. Also distributed from
+ <ftp://ftp.gnu.org/gnu/classpath/>
+ 
+ The following projects extend the functionality of GNU Classpath
+ with additional algorithms, new core packages and tools.
+ All are released under GPL compatible licenses:
+ 
+ * Jessie: A free implementation of the JSSE. Secure Sockets Extension.
+   http://www.nongnu.org/jessie/
+ * Tritonus: A implementation of the javax.sound API.
+   http://www.tritonus.org/
+ * gcjwebplugin: A plugin for the execution of applets in web browsers.
+   http://www.nongnu.org/gcjwebplugin/
+ 
+ Note that the above libraries might already have been included in the
+ various platforms that also integrate GNU Classpath like done by the
+ Kaffe project.
+ 
+ 6). What is new in this release?
+ 
+ New in release 0.11 (Sep 13, 2004)
+ (See the ChangeLog file for a full list of changes.)
+ 
+ * javax.swing.Spring and SpringLayout support.
+ * Added pluggable look and feel support for BasicTextFieldUI and
+   BasicToolBarSeparatorUI.
+ * java.swing.text support for (Default and Layered) Highlighter, FieldView,
+   PlainView, TabExpander and TabableView added.
+ * Start of JTable and JTree implementation.
+ * Internal Swing frames work.
+ * JMenu and JPopupMenu work.
+ * New gtk+ AWT FileDialog peer now based on gtk+2.4 or higher.
+ * java.awt.image LookupTables and kernel support.
+ * Improved java.awt.image.BufferedImage support.
+ * AWT 1.0 event model support.
+ * GNU Classpath now comes with some example programs (see examples/README).
+ * New javax.crypto, javax.crypto.interfaces, javax.crypto.spec, javax.net,
+   javax.net.ssl, javax.security.auth, javax.security.auth.callback,
+   javax.security.auth.login, javax.security.auth.x500, javax.security.sasl
+   and org.ietf.jgss packages are now officially part of GNU Classpath.
+   Extra crypto algorithms can be obtained from the GNU Crypto project,
+   a full TLS implementation is provided by the Jessie project.
+   http://www.gnu.org/software/gnu-crypto/
+   http://www.nongnu.org/jessie/
+ * Frame.setIconImage() support.
+ * AWT GDKGraphics scaling.
+ * New configure flag --enable-gtk-cairo to build Graphics2D implementation
+   build on cairo and pangoft2.  Enabled at runtime by defining the system
+   property gnu.java.awt.peer.gtk.Graphics=Graphics2D.
+ * javax.swing.JSpinner implemented.
+ * Extensive documentation update for java.util collection classes.
+ * java.awt.geom completed. Area, Arc2D, Ellipse2D and Line2D implemented.
+ * GNU JAXP is no longer included with GNU Classpath. Runtime, compiler and
+   tool integrators are encouraged to directly integrate GNU JAXP.
+   This release has been tested against GNU JAXP 1.1.
+   http://www.gnu.org/software/classpathx/jaxp/jaxp.html
+ * JColorChooser, JComboBox and JTextField implemented, including example
+   uses in GNU Classpath Examples swing Demo.
+ 
+ Runtime interface Changes:
+ 
+ * java.lang.Compiler now uses the new java.lang.VMCompiler; there is
+   a reference implementation that most VMs can use.
+ * java.lang.VMSystem has a new getenv(String) method and a reference C/JNI
+   implementation that should work on most Posix like systems.
+ * java.util.TimeZone has been split into a platform independent class and
+   a platform dependent class VMTimeZone.  GNU Classpath comes with a generic
+   way to get at the default time zone for Posix/GNU-like platforms.
+ * [VM]AccessController improvements.  In particular it handles
+   `doPrivileged' calls better, and allows for recursive `doPrivileged'
+   calls in the same Thread. (see vm/reference/java/security/)
+ 
+ The following people helped with this release:
+ 
+ Andreas Tobler (libgcj merging), Andrew Haley (object streams), Andrew
+ John Hughes (documentation, swing and acessibility), Archie Cobbs
+ (freebsd testing and bugfixing), Bryce McKinlay (libgcj merging, image
+ producers, access controller actions), Casey Marshall (crypto,
+ security and access controller implementation), Craig Black (image
+ scaling, round rect support, awt tear-off menus), Dalibor Topic (kaffe
+ merging), David Gilbert (documentation updates, mauve tests, awt and
+ geom bug fixes), David Jee (awt gtk+ image and choice fixes, frame
+ icon support, focus manger), Florian Weimer (bug reporting), Graydon
+ Hoare (lots of Swing and Graphics2D implementation and fixes), Guilhem
+ Lavaux (java.text bug fixing), Jerry Quinn (java.awt.image lookup
+ table and kernel implemented), Jeroen Frijters (Runtime loadlibrary,
+ encoding manager, file and classloader fixes), Ka-Hing Cheung
+ (jspinner implementation), Kim Ho (jcolorchooser, jtooltip, internal
+ jfram implementations, event and repaint manager fixes), Mark Wielaard
+ (packaging and coordination), Michael Koch (javax.swing.text
+ implementation, build environment, embedded window support, libgcj
+ merging, bug fixes), Olga Rodimina (swing combobox, jmenu and popup
+ menu support), Patrik Reali (web master, nio vm class restructuring),
+ Roman Kennke (boxlayout, spring and springlayout), Sven de Marothy
+ (java.awt.geom), Thomas Fitzsimmons (lots of gtk+ peers work, awt 1.0
+ event model), Tom Tromey (bug fixing, libgcj merging, vmcompiler).
+ 
+ 
+ </pre>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20041115.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20041115.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20041115.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20041115.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,237 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath 0.12 Announcement (2004-11-15)"> 
+ <pre>
+ 
+ We are pleased to announce a new developer snapshot release of GNU
+ Classpath.
+ 
+ GNU Classpath, Essential Libraries for Java, is a project to create free
+ core class libraries for use with runtimes, compilers and tools for the
+ java programming language.
+ 
+ GNU Classpath 0.12 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.12.tar.gz
+ MD5sum: ce1f7fbe6f2e3b738bae3b46f01a9670
+ 
+ Some highlights of this release (more extensive list below):
+ 
+ X.509 certificate path checking, signed JAR file support, full
+ java.awt.color implementation, java.beans 1.4 updates, improved
+ build process, better AWT focus management, much faster and better
+ fonts support, AWT Choice fixes, HTTP POST fixes, better collection
+ documentation, Calendar bug fixes, lookahead support for regular
+ expressions, jtree starts working and improved Eclipse 3 support.
+ 
+ Included, but not activated by default in this release is a Graphics2D
+ implementation based on the Cairo Graphics framework
+ (http://www.cairographics.org). Enabling this makes programs like
+ JFreeChart work on GNU Classpath based runtimes.  Note that this release
+ needs a cairo CVS build.
+ 
+ [It is recommended that people wanting to experiment with the
+ Graphics2D implementation follow the instructions for building gcj
+ with jhbuild which automatically builds the latest CVS version of GCJ
+ and Cairo at http://people.redhat.com/fitzsim/gcj-and-jhbuild.html]
+ 
+ Not yet included is an implementation of Generic collection classes
+ and classes for other 1.5 language extensions.  Work on this is being
+ done on a special development branch that will be included in a future
+ GNU Classpath release when free runtimes, compilers and tools have all
+ been upgraded to support these new language features.
+ 
+ GNU Classpath uses the Mauve test suite for Compatibility, Completeness
+ and Correctness checking.  This release passes 21245 of 21593 mauve
+ tests.
+ Free Software programs and libraries tested against this release are
+ Eclipse 3.0, JFreeChart (see above), gcjwebplugin and many other
+ programs,
+ libraries and applets.
+ 
+ Here are answers to some questions you might have about this project and
+ this release.
+ 
+ 1). Who should use this software?
+ 
+ Although GNU Classpath is already capable of supporting many
+ applications written in the java programming language, this is a
+ development release. As such, there are still some unfinished
+ components, and some problems are to be expected. You should install it
+ if you are interested in GNU Classpath development or reporting bugs.
+ We appreciate both.
+ 
+ For end users we recommend to use one of the development environments
+ based on GNU Classpath which combine the core libraries with compilers
+ and other tools needed for creating applications and libraries.
+ 
+     * GCC with GCJ  (http://gcc.gnu.org/java/)
+     * Kaffe         (http://www.kaffe.org/)
+ 
+ 2). What is required to build/install/run?
+ 
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc. When creating native code you will
+ also need a working C compiler and up to date Gnome development
+ libraries (gtk+, libart and gdk-pixbuf). More information on the
+ precise version numbers for the tools and libraries can be found in
+ the INSTALL file.
+ 
+ You will also need a runtime environment. The following runtime
+ environments should work out of the box with GNU Classpath
+ 
+     * JamVM         (http://jamvm.sourceforge.net/)
+     * Jikes RVM     (http://www.ibm.com/developerworks/oss/jikesrvm/)
+     * Kissme        (http://kissme.sourceforge.net/)
+ 
+ Note that these are just byte code execution runtimes. For development
+ of programs written in the java programming language you will also
+ need compilers and other tools for creating libraries and/or
+ executables (see question 1).
+ 
+ For other environments that might need modified version of the current
+ release see the README file.  A complete list of virtual machines and
+ compilers known to be based on GNU Classpath can be found at our
+ website: http://www.gnu.org/software/classpath/stories.html
+ 
+ 2). What platforms are supported?
+ 
+ GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
+ developers.  Since 0.12 there is also support for cygwin.
+ We plan to eventually support many others.
+ 
+ 5). Where do I go for more information?
+ 
+ The project home page with information on our mailing list can be
+ found at http://www.gnu.org/software/classpath/
+ 
+ A good overview of the current status can be found on the GNU Classpath
+ at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
+ It includes reports and presentations on the current status and future
+ plans: http://www.gnu.org/software/classpath/events/fosdem04.html
+ 
+ The following presentation given during the Desktop Developers
+ Conference shows how to integrate GNU Claspath and GCJ more with the
+ Free Desktop environments: http://people.redhat.com/fitzsim/ddc2004/
+ 
+ 6). How do I extend the functionality of the core classes?
+ 
+ Besides combining GNU Classpath with the runtimes and compilers above
+ you might want to add support for additional encryption libraries and
+ algorithms as provided by GNU Crypto
+ (http://www.gnu.org/software/gnu-crypto/).  And for additional
+ extension libraries (mail, xml, activation, infobus, servlet) check
+ out GNU ClasspathX (http://www.gnu.org/software/classpathx).
+ 
+ Additional network protocol support is provided by a sub-project
+ called GNU Classpath Inetlib, an extension library to provide extra
+ network protocol support (ftp, finger, gopher) for GNU Classpath, but
+ it can also standalone to ease adding http, imap, pop3 and smtp client
+ support to applictions. Also distributed from
+ <ftp://ftp.gnu.org/gnu/classpath/>
+ 
+ The following projects extend the functionality of GNU Classpath
+ with additional algorithms, new core packages and tools.
+ All are released under GPL compatible licenses:
+ 
+ * Jessie: A free implementation of the JSSE. Secure Sockets Extension.
+   http://www.nongnu.org/jessie/
+ * Tritonus: A implementation of the javax.sound API.
+   http://www.tritonus.org/
+ * gcjwebplugin: A plugin for the execution of applets in web browsers.
+   http://www.nongnu.org/gcjwebplugin/
+ 
+ Note that the above libraries might already have been included in the
+ various platforms that also integrate GNU Classpath like done by the
+ Kaffe project.
+ 
+ 6). What is new in this release?
+ 
+ New in release 0.12 (Nov 14, 2004)
+ (See the ChangeLog file for a full list of changes.)
+ 
+ * GNU Classpath's JAR implementation now has preliminary support for
+   signed entries, for so called "signed JAR" file support. Signed JAR
+   files are one of the key security features of managed runtimes, and
+   allows code to run privileged given unforgeable proofs of identity.
+ * A much improved version of X.509 certificates has been added,
+   including a robust certificate path checking algorithm. Also
+   included is an implementation of the RSA signature scheme.
+ * Full java.awt.color implementation, with all standard ICC profiles,
+   except for PhotoYCC color space.
+ * java.beans 1.4 updates and bug fixes.
+ * java.awt.image support updated to 1.4.
+ * Improved build process. Uses less memory with gcj and C code is
+   buildable with -Werror on most platform. Please configure with
+   --enable-Werror and report any remaining issues.
+ * Big-endian (PowerPC) fixes for native awt GTK+ peers.
+ * Checkstyle support, see scripts/checkstyle-config.xml.
+ * Better AWT focus management fro GTK+ peers.
+ * Much faster and better fonts support
+   (for both gdk Graphics and cairo Graphics2D)
+ * AWT Choice fixes for hidden components.
+ * HTTP Connection Handler fixes for POST support.
+ * Much fuller collection documentation.
+ * Lots of Calendar bug fixes.
+ * More javax.imageio support.
+ * Better AWT Help MenuBar support.
+ * Lookahead support for regular expressions.
+ * Serialization object stream fixes for multiple ClassLoader scenarios.
+ * Swing TabbedPane, ColorChooser and ComboBox improvements.
+ * Start of JTree functionality.
+ * Improved Eclipse 3 support for GNU Classpath based runtimes.
+ 
+ Runtime interface Changes:
+ 
+ * New --enable-java-lang-system-explicit-initialization configuration
+   option. (Warning, will be replaced in next release, please consult
+   the mailinglist.)
+ * The reference implementation of VMClassLoader has default
+   implementations for getResource(s) and provides support for a new
+   default getSystemClassLoader implementation.
+ 
+ The following people helped with this release:
+ 
+ Andreas Tobler (gtk/c compilation and PPC fixes), Andrew Haley
+ (Object stream serialization fixes), Andrew John Hughes (java.util
+ documentation updates), Bryce McKinlay (Calendar bugfixes), Casey
+ Marshall (X.509 certificate path checking and signed jar file
+ support), Dalibor Topic (AWT Component postevent fix), David Daney
+ (URL bug fixes), David Gilbert (geom documentation updates and mauve
+ checking), David Jee (AWT HelpMenuBar fixes), Graydon Hoare
+ (Graphics2D and Swing work), Ilya Perminov (RMI fixes), Jeroen
+ Frijters (Application Classloader updates and IKVM integration), Jerry
+ Quinn (AWT image work), Kim Ho (Swing TabbedPane and ColorChooser
+ fixes), Mark Wielaard (libgcj merging and packaging), Mattias Rehnberg
+ (Inet6Address and serialization fixes), Michael Koch (Build
+ system/compiler updates, libgcj merging, code cleanups, swing, net,
+ imageio and other fixes and improvements), Noa Resare (Calendar, net,
+ AWT choice and GeneralPath fixes, kaffe integration), Olga Rodimina
+ (Swing ComboBox fixes), Patrik Reali (Website), Paul Jenner (AWT Image
+ raster and Swing JTree fixes), Per Bothner (Collections efficiency),
+ Robert Schuster (java.beans 1.4 updates and bug fixes), Shashank Bapat
+ (Regex lookahead support), Steven Augart (JikesRVM integration), Sven
+ de Marothy (AWT color package implementation, Polygon, GeneralPath,
+ Double parsing and nio fixes), Thomas Fitzsimmons (AWT gtk+ peer
+ work), Tom Tromey (Code cleanups all over), Torsten Rupp (Native
+ java.net cleanups and fixes)
+ 
+ </pre>
+ 
+ <footer>
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050107.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050107.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050107.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050107.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,256 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath 0.13 Announcement (2005-01-07)"> 
+ <pre>
+ We are pleased to announce a new developer snapshot release of GNU Classpath.
+ 
+ GNU Classpath, essential libraries for the java, is a project to create free
+ core class libraries for use with runtimes, compilers and tools for the
+ java programming language.
+ 
+ GNU Classpath 0.13 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.13.tar.gz
+ MD5sum: 9920904c15f2cdb15e38c4a44968c4f9
+ SHA1sum: f431a24d7f25259123ae8a897b4d71be76ac76ea
+ 
+ Some highlights of this release (more extensive list below):
+ 
+ Includes HTTP/1.1 and FTP URL handlers. Added java.beans XMLEncoder and
+ XMLDecoder classes. More than 250 locales are supported now. SAX, DOM,
+ XSL and XPath implementations for javax.xml (JAXP 1.3) have been added.
+ Better AWT on gtk+ and Swing support. An AWT Robot implementation based
+ on the XServer XTest Extension for the gtk+ peers has been added.
+ 
+ GNU Classpath uses the Mauve test suite for Compatibility, Completeness
+ and Correctness checking.  This release passes 23131 of 23729 mauve tests.
+ Conformance reports for the included jaxp support can be found in the
+ doc/README.jaxp file.
+ 
+ 22 people are listed in the ChangeLog file (full list below)
+ and there were 245 commits to CVS since the last release.
+ 
+ Included, but not activated by default in this release is a Graphics2D
+ implementation based on the Cairo Graphics framework
+ (http://www.cairographics.org/). Enabling this makes programs like
+ JFreeChart work on GNU Classpath based runtimes.  Note that this release
+ needs a cairo CVS build.
+ 
+ [It is recommended that people wanting to experiment with the
+ Graphics2D implementation follow the instructions for building gcj
+ with jhbuild which automatically builds the latest CVS version of GCJ
+ and Cairo at http://people.redhat.com/fitzsim/gcj-and-jhbuild.html]
+ 
+ Not yet included is an implementation of Generic collection classes
+ and classes for other 1.5 language extensions.  Work on this is being
+ done on a special development branch that will be included in a future
+ GNU Classpath release when free runtimes, compilers and tools have all
+ been upgraded to support these new language features.
+ 
+ Here are answers to some questions you might have about this project and
+ this release.
+ 
+ 1). Who should use this software?
+ 
+ Although GNU Classpath is already capable of supporting many
+ applications written in the java programming language, this is a
+ development release. As such, there are still some unfinished
+ components, and some problems are to be expected. You should install it
+ if you are interested in GNU Classpath development or reporting bugs.
+ We appreciate both.
+ 
+ For end users we recommend to use one of the development environments
+ based on GNU Classpath which combine the core libraries with compilers
+ and other tools needed for creating applications and libraries.
+ 
+     * GCC with GCJ  (http://gcc.gnu.org/java/)
+     * Kaffe         (http://www.kaffe.org/)
+ 
+ Both projects have CVS versions which track GNU Classpath closely.
+ 
+ 2). What is required to build/install/run?
+ 
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc. When creating native code you will
+ also need a working C compiler and up to date Gnome development
+ libraries (gtk+, libart and gdk-pixbuf). More information on the
+ precise version numbers for the tools and libraries can be found in
+ the INSTALL file.
+ 
+ You will also need a runtime environment. The following runtime
+ environments (which don't include compilers or other tools, see above)
+ work out of the box with GNU Classpath (tested by and recommended for
+ GNU Classpath hackers).
+ 
+     * JamVM (1.2.3) (http://jamvm.sourceforge.net/)
+     * Kissme (CVS)  (http://kissme.sourceforge.net/)
+ 
+ Other runtimes known to work with the latest or a previous release are
+ JikesRVM, IKVM.NET, JC, SableVM (-Xgnuclasspath) and CACAO.
+ (You might need staging, development or CVS versions for support of the
+ latest GNU Classpath release with some of these.)
+ 
+ Note that these are just byte code execution runtimes. For development
+ of programs written in the java programming language you will also
+ need compilers and other tools for creating libraries and/or
+ executables (see question 1).
+ 
+ For other environments that might need modified version of the current
+ release see the README file.  A complete list of virtual machines and
+ compilers known to be based on GNU Classpath can be found at our
+ website: http://www.gnu.org/software/classpath/stories.html
+ 
+ 2). What platforms are supported?
+ 
+ GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
+ developers.  Since 0.12 there is also support for cygwin.
+ We plan to eventually support many others.
+ 
+ 5). Where do I go for more information?
+ 
+ The project home page with information on our mailing list can be
+ found at http://www.gnu.org/software/classpath/
+ 
+ A good overview of the current status can be found on the GNU Classpath
+ at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
+ It includes reports and presentations on the current status and future
+ plans: http://www.gnu.org/software/classpath/events/fosdem04.html
+ 
+ The following presentation given during the Desktop Developers
+ Conference shows how to integrate GNU Claspath and GCJ more with the
+ Free Desktop environments: http://people.redhat.com/fitzsim/ddc2004/
+ 
+ 6). How do I extend the functionality of the core classes?
+ 
+ Besides combining GNU Classpath with the runtimes and compilers above
+ you might want to add support for additional encryption libraries and
+ algorithms as provided by GNU Crypto
+ (http://www.gnu.org/software/gnu-crypto/).  And for additional
+ extension libraries (mail, activation, infobus, servlet, etc.)
+ check out GNU ClasspathX (http://www.gnu.org/software/classpathx).
+ 
+ Additional network protocol support is provided by a sub-project
+ called GNU Classpath Inetlib, an extension library to provide extra
+ network protocol support (ftp, finger, gopher) for GNU Classpath, but
+ it can also standalone to ease adding http, imap, pop3 and smtp client
+ support to applictions. Also distributed from
+ <ftp://ftp.gnu.org/gnu/classpath/>
+ 
+ The following projects extend the functionality of GNU Classpath
+ with additional algorithms, new core packages and tools.
+ All are released under GPL compatible licenses:
+ 
+ * Jessie: A free implementation of the JSSE. Secure Sockets Extension.
+   http://www.nongnu.org/jessie/
+ * Tritonus: A implementation of the javax.sound API.
+   http://www.tritonus.org/
+ * gcjwebplugin: A plugin for the execution of applets in web browsers.
+   http://www.nongnu.org/gcjwebplugin/
+ 
+ Note that the above libraries might already have been included in the
+ various platforms that also integrate GNU Classpath like done by the
+ Kaffe project.
+ 
+ 6). What is new in this release?
+ 
+ New in release 0.13 (Jan 6, 2005)
+ (See the ChangeLog file for a full list of changes.)
+ 
+ * The http url protocol handler has been replaced with a full HTTP/1.1
+   version from GNU inetlib.
+ * A new ftp url protocol handler has been added also from GNU inetlib.
+ * java.beans has been updated to 1.4 including support for XMLEncoder
+   and XMLDecoder.
+ * The java.util.Locale support is now based on the Common Locale Data
+   Repository (CLDR) Project (see http://www.unicode.org/cldr/).
+   GNU Classpath provides support for more than 250 locales now.
+   This new support is experimental and the GNU Classpath hackers are
+   working together with runtime developers and the unicode consortium
+   to improve them in the future.
+   If your runtime misdetects your locale or if the default locale gives
+   problems please try running with -Duser.language=en and -Duser.region=US
+   to fall back on a known good locale.
+ * Added implementations of javax.xml (JAXP 1.3), org.xml.sax (SAX2) and
+   org.w3c.dom (DOM Level 3) interfaces. It is possible to switch between
+   different implementations AElfred2, GNU DOM, GNU XSL, libxmlj SAX,
+   libxmlj DOM and libxmlj XSL by setting different system properties.
+   Also provided is a preliminary XPath 1.0 implementation.
+   The libxmlj versions are build around libxml2 and libxslt and have to
+   be enabled during build time by the --enable-xmlj configure flag.
+   The current support is equal to the last released GNU JAXP 1.3 release.
+   These packages will be maintained as part of the GNU Classpath core classes
+   in the future. For more information, conformance results and documentation
+   on selecting different implementations see doc/README.jaxp.
+ * More AWT accessible support.
+ * AWT gtk+ peers component layout, dialog placement, keyboard focus
+   handling and text positioning have been improved.
+ * ImageIO interfaces are more complete.
+ * JList, JTable and JTree have been hugely improved.
+ * java.awt.Robot support with GdkRobot in the gtk+ awt peers.
+   Needs XTest Extension (libXtst) XServer support.
+ * New --disable-examples configure argument.
+ 
+ Runtime interface changes:
+ 
+ * Added a new method (VMRuntime.enableShutdownHooks) that enables the VM
+   to lazily register an exit handler.
+ * The java.lang.Class constructor now automatically sets the protection
+   domain for array classes, based on the protection domain of the component
+   type class.
+ * New gnu.classpath.VMSystemProperties class. This replaces the
+   system properties initialization in VMRuntime. Note that it is
+   now the VMs responsibility to set one additional property:
+   gnu.cpu.endian should be set to "big" or "little".
+ * VMRuntime.nativeGetLibname() has been renamed to VMRuntime.mapLibraryName()
+   and has only one argument, the name of the library.
+ * String and StringBuffer now call VMSystem.arraycopy() directly and don't
+   go through java.lang.System. Be careful to not initialize java.lang.System
+   early in the bootstrap sequence in your VM runtime interface classes.
+ * Some (wrong) documentation about the behavior of VMThread.sleep(0, 0)
+   has been updated. Also, VMThread.sleep() now has a default non-native
+   implementation, but it is a generic implementation that ignores the
+   nano-seconds argument. Runtime hackers are encouraged to provide a more
+   efficient version.
+ * There is prelimenary support for nio direct byte buffers.
+   See VMDirectByteBuffer. Please contact the GNU Classpath mailinglist when
+   you add support for this to your runtime.
+ 
+ The following people helped with this release:
+ 
+ Andrew John Hughes (Locale, Currency and java.text updates), Archie Cobbs
+ (Thread improvements), Bryce McKinlay (ResourceBundle speedups), Casey
+ Marshall (FileLock fixes), Chris Burdess (locale generator, xml integration,
+ http and ftp handlers), Craig Black (BeanInfoEmbryo improvements), David
+ Gilbert (AWT and geom documentation), Graydon Hoare (Graphics2D and
+ BufferedImage improvements), Guilhem Lavaux (CLDR parser and Object stream
+ serialization improvements), Ito Kazumitsu (nio ByteBuffer fixes), Jeroen
+ Frijters (Runtime interfaces improvements, including shutdown hooks and
+ system properties, nio and zip fixes), Jerry Quinn (AWT accessibility
+ support), Mark Wielaard (packaging and integration), Michael Koch (Locale,
+ Swing, InetAddress, ImageIO, nio improvements and libgcj integration),
+ Olga Rodimina (JTable improvements), Patrik Reali (website maintenance),
+ Paul Jenner (ImageIcon additions), Ranjit Mathew (IdentityHashMap fix),
+ Robert Schuster (java.beans updates, XMLEncode and XMLDecoder
+ implementations and JComboBox improvements), Sven de Marothy (Graphics2D,
+ java.awt.image and java.awt.geom fixes), Thomas Fitzsimmons (GdkRobot,
+ gtk+ peers component layout, dialog placement, keyboard focus handling and
+ text positioning), Tom Tromey (gcjx support, zip and ResourceBundle fixes)
+ </pre>
+ 
+ <footer>
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050226.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050226.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050226.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050226.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,240 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath 0.14 Announcement (2005-02-26)"> 
+ <pre>
+ "GNU Classpath delivers core libraries for upcoming GCC and Kaffe releases"
+ 
+ We are pleased to announce a new developer snapshot release of GNU Classpath.
+ 
+ GNU Classpath, essential libraries for java, is a project to create free
+ core class libraries for use with runtimes, compilers and tools for the
+ java programming language.
+ 
+ The GNU Classpath developer snapshot releases are not directly aimed at
+ the end user but are meant to be integrated into larger development
+ platforms. This 0.14 release snapshot can be seen as the feature complete
+ base library that will be used in the upcoming GCC 4.0 (gcj) and Kaffe
+ 1.1.5 runtimes, compilers and tools collections.
+ 
+ Developers wanting to have a look at the core library classes provided by
+ these upcoming releases can take a look at the new GNU Classpath developers
+ site. http://developer.classpath.org/ provides detailed information
+ on how to start with helping the GNU Classpath project and gives an
+ overview of the core class library packages currently provided.
+ With this release generated documentation is provided through the new
+ GNU Classpath Tools gjdoc 0.7.x series. A large update of the documentation
+ generation framework for java source files used by the GNU project.
+ See http://developer.classpath.org/doc/.
+ 
+ One of the major focusses of the GNU Classpath project is expanding and
+ using the Mauve test suite for Compatibility, Completeness and Correctness
+ checking.  Various groups around GNU Classpath collaborate on the free
+ software Mauve test suite which contains more then 25.000 library tests.
+ Mauve has various modules for testing core class library implementations,
+ byte code verifiers, source to byte code and native code compiler tests.
+ Mauve also contains the Wonka visual test suite and the Jacks Compiler
+ Killer Suite. This release passes 25442 of the mauve core library tests.
+ 
+ The GNU Classpath developer recently held a conference during Fosdem.
+ This was a standing room event and provided lot of communication between
+ the GNU Classpath, Kaffe, GCJ, IKVM, Apache, java-gnome and Cacao hackers
+ and users. The presentations of this event have been publised and should
+ give a good overview of the current status and future plans of the project:
+ http://www.gnu.org/software/classpath/events/escape_fosdem05.html
+ 
+ Some highlights of changes in this release (more extensive list below):
+ 
+ ImageIO support through gdkpixbuf, lots of new nio character encoders
+ and decoders, fully automated class documentation generation, generic
+ VMStackWalker support for runtimes, lots of bug fixes, optimizations and
+ new swing support.
+ 
+ Included, but not activated by default in this release is a Graphics2D
+ implementation based on the Cairo Graphics framework
+ (http://www.cairographics.org). Enabling this makes programs like
+ JFreeChart work and JEdit start up on GNU Classpath based runtimes.
+ To enable this support install the cairo 0.3.0 snapshot, configure
+ GNU Classpath with --enable-gtk-cairo and make sure the system
+ property gnu.java.awt.peer.gtk.Graphics=Graphics2D is set.
+ 
+ Not yet included is an implementation of Generic collection classes
+ and classes for other 1.5 language extensions.  Work on this is being
+ done on a special development branch that will be included in a future
+ GNU Classpath release when free runtimes, compilers and tools have all
+ been upgraded to support these new language features.
+ 
+ 29 people actively contributed code to this release and made 232 CVS
+ commits during the last two months of development. diffstat since 0.13:
+ 1189 files changed, 31388 insertions(+), 13744 deletions(-)
+ More details below.
+ 
+ GNU Classpath 0.14 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.14.tar.gz
+ MD5sum: 227beb20b927c042628539601c867614
+ 
+ Here are answers to some questions you might have about this project and
+ this release.
+ 
+ 1). Who should use this software?
+ 
+ Although GNU Classpath is already capable of supporting many
+ applications written in the java programming language, this is a
+ development release. As such, there are still some unfinished
+ components, and some problems are to be expected. You should install it
+ if you are interested in GNU Classpath development or reporting bugs.
+ We appreciate both.
+ 
+ For end users we recommend to use one of the development environments
+ based on GNU Classpath which combine the core libraries with compilers
+ and other tools needed for creating applications and libraries.
+ 
+     * GCC with GCJ  (http://gcc.gnu.org/java/)
+     * Kaffe         (http://www.kaffe.org/)
+ 
+ 2). What is required to build/install/run?
+ 
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc. When creating native code you will
+ also need a working C compiler and up to date Gnome development
+ libraries (gtk+, libart and gdk-pixbuf). More information on the
+ precise version numbers for the tools and libraries can be found in
+ the INSTALL file.
+ 
+ You will also need a runtime environment. The following runtime
+ environments should work out of the box with GNU Classpath
+ 
+     * JamVM         (http://jamvm.sourceforge.net/)
+     * Jikes RVM     (http://www.ibm.com/developerworks/oss/jikesrvm/)
+     * Kissme        (http://kissme.sourceforge.net/)
+ 
+ Note that these are just byte code execution runtimes. For development
+ of programs written in the java programming language you will also
+ need compilers and other tools for creating libraries and/or
+ executables (see question 1).
+ 
+ For other environments that might need modified version of the current
+ release see the README file.  A complete list of virtual machines and
+ compilers known to be based on GNU Classpath can be found at our
+ website: http://www.gnu.org/software/classpath/stories.html
+ 
+ 2). What platforms are supported?
+ 
+ GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
+ developers.  Many more architectures and platforms are supported.
+ Check the actual runtime you use together with GNU Classpath for
+ detailed information on the supported platforms.
+ 
+ 5). Where do I go for more information?
+ 
+ The project home page with information on our mailing list can be
+ found at http://www.gnu.org/software/classpath/
+ 
+ A good overview of the current status can be found on the GNU Classpath
+ Escape The Java Trap event held at FOSDEM this year.
+ It includes reports and presentations on the current status and future
+ plans: http://www.gnu.org/software/classpath/events/escape-fosdem05.html
+ 
+ 6). How do I extend the functionality of the core classes?
+ 
+ Besides combining GNU Classpath with the runtimes and compilers above
+ you might want to add support for additional encryption libraries and
+ algorithms as provided by GNU Crypto
+ (http://www.gnu.org/software/gnu-crypto/).  And for additional
+ extension libraries (mail, xml, activation, infobus, servlet) check
+ out GNU ClasspathX (http://www.gnu.org/software/classpathx).
+ 
+ Additional network protocol support is provided by a sub-project
+ called GNU Classpath Inetlib, an extension library to provide extra
+ network protocol support (ftp, finger, gopher) for GNU Classpath, but
+ it can also standalone to ease adding http, imap, pop3 and smtp client
+ support to applictions. Also distributed from
+ <ftp://ftp.gnu.org/gnu/classpath/>
+ 
+ The following projects extend the functionality of GNU Classpath
+ with additional algorithms, new core packages and tools.
+ All are released under GPL compatible licenses:
+ 
+ * Jessie: A free implementation of the JSSE. Secure Sockets Extension.
+   http://www.nongnu.org/jessie/
+ * Tritonus: A implementation of the javax.sound API.
+   http://www.tritonus.org/
+ * gcjwebplugin: A plugin for the execution of applets in web browsers.
+   http://www.nongnu.org/gcjwebplugin/
+ 
+ Note that the above libraries may already be available in some platforms
+ that integrate GNU Classpath, such as in the Kaffe project.
+ 
+ 6). What is new in this release?
+ 
+ New in release 0.14 (Feb 25, 2005)
+ (See the ChangeLog file for a full list of changes.)
+ 
+ * Character encoders and decoders have been added for:
+   iso-8859-6 (arabic), iso-8859-7 (greek), iso-8859-8 (hebrew),
+   iso-8859-9 (latin-5), iso-8859-13, iso-8859-15 (latin-9), cp1047 (ebcdic),
+   ebcdic-xml-us,ascii, windows-1250, windows-1252, UTF-16BE (Big Endian),
+   UTF-16LE (Little Endian), UTF-32BE (Big Endian), UTF-32LE (Little Endian).
+ * Full documentation for all classes can be generated (again) by using
+   the --with-gjdoc configure option.
+ * javax.awt.imageio support through gdkpixbuf.
+ 
+ Runtime interface changes:
+ 
+ * VMSecurityManager has been replaced by gnu.classpath.VMStackWalker.
+   currentClassLoader() is no longer needed, and there are also two new
+   methods with non-native implementations. VM implementors are encouraged
+   to provide more efficient versions.
+ * VMRuntime.nativeLoad() now takes an additional ClassLoader parameter.
+ 
+ The following people helped with this release:
+ 
+ Andrew Haley (nio optimizations)
+ Andrew John Hughes (Locale, java.text fixes and generics work)
+ Anthony Green (rmi cleanup)
+ Archie Cobbs (Throwable simplification)
+ Audrius Meskauskas (Swing JComboBox, JTextArea, and Timer fixes)
+ Bryce McKinlay (serialization fixes)
+ C. Brian Jones (rmi cleanups)
+ Chris Burdess (Base64 fix, gnu.xml cleanups, http connection fixes)
+ Craig Black (native state library, and gtk+ awt peer fixes)
+ Dalibor Topic (PropertyAction cleanups, inner class and dead code cleanups)
+ David Gilbert (DefaultListModel, Font text transform fixes and documentation)
+ Graydon Hoare (Lots of GdkGraphics updates)
+ Ito Kazumitsu (nio charset provider, FileChannel and SimpleDateFormat fixes)
+ Jeroen Frijters (Serialization and Collator fixes)
+ Julian Scheid (UTF8 fix and lots of gjdoc work)
+ Mark Wielaard (JarFile, TimeZone, URLClassLoader, serialization and packaging)
+ Michael Koch (AWT Window and Checkbox fixes, code cleanup, LocalInformation
+ maintenance, checkstyle cleanups, swing and nio updates)
+ Olga Rodimina (Jtable updates)
+ Patrik Reali (Website maintenance)
+ Quentin Anciaux (Lots of new character encoders and decoders)
+ Ranjit Mathew (IdentityHashMap bug fix)
+ Robert Schuster (nio charset and ChannelReader implementations)
+ Roman Kennke (Better swing BasicLookAndFeel)
+ Rutger Ovidius (GNU security provider update)
+ Steven Augart (OpenBSD script fixes and stack walker documentation)
+ Sven de Marothy (Lots of Calendar and TimeZone fixes and SpinnerDateModel)
+ Thomas Fitzsimmons (Much awt gtk+ peer and Robot work)
+ Timo Lindfors (regex fixes)
+ Tom Tromey (generics work, classloader and xml fixes)
+ </pre>
+ 
+ <footer>
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050429.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050429.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050429.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050429.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,309 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath 0.15 Announcement (2005-04-29)"> 
+ <pre>
+ We are pleased to announce a new developer snapshot release of GNU Classpath.
+ 
+ GNU Classpath, essential libraries for java, is a project to create free
+ core class libraries for use with runtimes, compilers and tools for the
+ java programming language.
+ 
+ The GNU Classpath developer snapshot releases are not directly aimed
+ at the end user but are meant to be integrated into larger development
+ platforms. For example the GCC (gcj) and Kaffe projects will use the
+ developer snapshots as a base for future versions.
+ 
+ Some highlights of changes in this release (more extensive list below):
+ 
+ Optimized nio and nio.charset plus io streams integration leading to
+ large speedups in character stream performance.  To compliment this
+ new framework a native iconv based charset provider was added.  Better
+ support for free swing metal and pluggable lafs. Some org.omg.CORBA
+ support added. Better java.beans support for the Eclipse Visual Editor
+ Project. Completely lock free ThreadLocal implementation added. More
+ javax.swing.text support for RTF and HTML. More flexible runtime
+ interfaces and build configuration options.
+ 
+ 26 people actively contributed code to this release and made 299 CVS
+ commits during the last two months of development. diffstat since 0.14:
+ 993 files changed, 74259 insertions(+), 15666 deletions(-)
+ More details about the various changes and contributions below.
+ 
+ GNU Classpath 0.15 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.15.tar.gz
+ MD5sum: 036c23aec7cb53a43b7b9dc63a92fbbe
+ SHA1sum: 971bdd436b8010ab30096869f689a44d41e5a01c
+ 
+ Included, but not activated by default in this release is a Graphics2D
+ implementation based on the Cairo Graphics framework
+ (http://www.cairographics.org). Enabling this makes programs like
+ JFreeChart work and JEdit start up on GNU Classpath based runtimes.
+ To enable this support install the cairo 0.3.0 snapshot, configure
+ GNU Classpath with --enable-gtk-cairo and make sure the system
+ property gnu.java.awt.peer.gtk.Graphics=Graphics2D is set.
+ 
+ Not yet included is an implementation of Generic collection classes
+ and classes for other 1.5 language extensions.  Work on this is being
+ done on a special development branch that will be included in a future
+ GNU Classpath release when free runtimes, compilers and tools have all
+ been upgraded to support these new language features.
+ 
+ One of the major focusses of the GNU Classpath project is expanding
+ and using the Mauve test suite for Compatibility, Completeness and
+ Correctness checking.  Various groups around GNU Classpath collaborate
+ on the free software Mauve test suite which contains more then 27.500
+ library tests.  Mauve has various modules for testing core class
+ library implementations, byte code verifiers, source to byte code and
+ native code compiler tests.  Mauve also contains the Wonka visual test
+ suite and the Jacks Compiler Killer Suite. This release passes 27.325
+ of the mauve core library tests.
+ See for more information: http://sources.redhat.com/mauve/ 
+ 
+ Conformance reports for the included jaxp support can be found in the
+ doc/README.jaxp file.
+ 
+ The GNU Classpath developers site http://developer.classpath.org/
+ provides detailed information on how to start with helping the GNU
+ Classpath project and gives an overview of the core class library
+ packages currently provided.  For each snapshot release generated
+ documentation is provided through the GNU Classpath Tools gjdoc
+ project. A documentation generation framework for java source files
+ used by the GNU project. Full documentation on the currently
+ implementated packages and classes can be found at:
+ http://developer.classpath.org/doc/
+ 
+ 
+ Here are answers to some questions you might have about this project and
+ this release.
+ 
+ 1). Who should use this software?
+ 
+ Although GNU Classpath is already capable of supporting many
+ applications written in the java programming language, this is a
+ development release. As such, there are still some unfinished
+ components, and some problems are to be expected. You should install it
+ if you are interested in GNU Classpath development or reporting bugs.
+ We appreciate both.
+ 
+ For end users we recommend to use one of the development environments
+ based on GNU Classpath which combine the core libraries with compilers
+ and other tools needed for creating applications and libraries.
+ 
+     * GCC with GCJ  (http://gcc.gnu.org/java/)
+     * Kaffe         (http://www.kaffe.org/)
+ 
+ Both projects have CVS versions which track GNU Classpath closely.
+ 
+ 2). What is required to build/install/run?
+ 
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc. When creating native code you will
+ also need a working C compiler and up to date Gnome development
+ libraries (gtk+, libart and gdk-pixbuf). More information on the
+ precise version numbers for the tools and libraries can be found in
+ the INSTALL file.
+ 
+ You will also need a runtime environment.  Most active GNU Classpath
+ hackers use JamVM (http://jamvm.sourceforge.net/) and the gcj or Jikes
+ bytecode compiler (http://www.jikes.org) for quick development.  But
+ other environments can certainly be used to hack on the GNU Classpath
+ core libraries.
+ 
+ For other environments that might need modified version of the current
+ release see the README file.  A complete list of virtual machines and
+ compilers known to be based on GNU Classpath can be found at our
+ website: http://www.gnu.org/software/classpath/stories.html
+ 
+ Note that these are just byte code execution compilers and/or
+ runtimes. For development of programs written in the java programming
+ language you will also need compilers and other tools for creating
+ libraries and/or executables (see question 1).
+ 
+ 2). What platforms are supported?
+ 
+ GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
+ developers.  Since 0.12 there is also support for cygwin.  We plan to
+ eventually support many others.  Many more architectures and platforms
+ are supported.  Check the actual runtime you use together with GNU
+ Classpath for detailed information on the supported platforms.
+ 
+ 5). Where do I go for more information?
+ 
+ The project home page with information on our mailing list can be
+ found at http://www.gnu.org/software/classpath/
+ 
+ The GNU Classpath developer recently held a conference during Fosdem.
+ This was a standing room event and provided lot of communication between
+ the GNU Classpath, Kaffe, GCJ, IKVM, Apache, java-gnome and Cacao hackers
+ and users. The presentations of this event have been publised and should
+ give a good overview of the current status and future plans of the project:
+ http://www.gnu.org/software/classpath/events/escape_fosdem05.html
+ 
+ Developers wanting to help out with the project will find more
+ information and tools on http://developer.classpath.org/
+ 
+ 6). How do I extend the functionality of the core classes?
+ 
+ Besides combining GNU Classpath with the runtimes and compilers above
+ you might want to add support for additional encryption libraries and
+ algorithms as provided by GNU Crypto
+ (http://www.gnu.org/software/gnu-crypto/).  And for additional
+ extension libraries (mail, activation, infobus, servlet, etc.) check
+ out GNU ClasspathX (http://www.gnu.org/software/classpathx).
+ 
+ Additional network protocol support is provided by a sub-project
+ called GNU Classpath Inetlib, an extension library to provide extra
+ network protocol support (ftp, finger, gopher) for GNU Classpath, but
+ it can also standalone to ease adding http, imap, pop3 and smtp client
+ support to applictions. Also distributed from
+ <ftp://ftp.gnu.org/gnu/classpath/>
+ 
+ The following projects extend the functionality of GNU Classpath
+ with additional algorithms, new core packages and tools.
+ All are released under GPL compatible licenses:
+ 
+ * Jessie: A free implementation of the JSSE. Secure Sockets Extension.
+   http://www.nongnu.org/jessie/
+ * Tritonus: A implementation of the javax.sound API.
+   http://www.tritonus.org/
+ * gcjwebplugin: A plugin for the execution of applets in web browsers.
+   http://www.nongnu.org/gcjwebplugin/
+ 
+ Note that the above libraries might already have been included in the
+ various platforms that also integrate GNU Classpath like done by the
+ Kaffe project.
+ 
+ 6). What is new in this release?
+ 
+ New in release 0.15 (Apr 29, 2005)
+ (See the ChangeLog file for a full list of changes.)
+ 
+ * The old character encoding framework (gnu.java.io.EncodingManager)
+ has been replaced by a system based completely on nio.charset
+ providers. Many converters have been added, both the io, lang and nio
+ frameworks now use the same set of converters and the whole character
+ stream framework (Readers and Writers) have been optimized. For some
+ workloads this leads to 2x till 20x speedups.
+ 
+ The default charsets supported are:
+ 
+   Cp424, Cp437, Cp737, Cp775, Cp850, Cp852, Cp855, Cp857, Cp860, Cp861,
+   Cp862, Cp863, Cp864, Cp865, Cp866, Cp869, Cp874, ISO_8859_1, ISO_8859_13,
+   ISO_8859_15, ISO_8859_2, ISO_8859_3, ISO_8859_4, ISO_8859_5, ISO_8859_6,
+   ISO_8859_7, ISO_8859_8, ISO_8859_9, KOI_8, MS874, MacCentralEurope,
+   MacCroatian, MacCyrillic, MacDingbat, MacGreek, MacIceland, MacRoman,
+   MacRomania, MacSymbol, MacThai, MacTurkish, US_ASCII, UTF_16, UTF_16BE,
+   UTF_16Decoder, UTF_16Encoder, UTF_16LE, UTF_8, UnicodeLittle, Windows1250,
+   Windows1251, Windows1252, Windows1253, Windows1254, Windows1255,
+   Windows1256, Windows1257, Windows1258.
+ 
+ Many more encoding are supported through the new IconvProvider
+ depending on the platform iconv support. GNU libiconv is recommended.
+ The IconvProvider is currently not enabled by default. To enable it
+ define the system property gnu.classpath.nio.charset.provider.iconv=true.
+ Some runtimes might choose to enable this by default by setting it
+ through VMSystemProperties. We would like to get feedback on whether
+ enabling or disabling the IconvProvider by default results in the
+ highest speedups.
+ 
+ * Free swing metal and pluggable look and feels have been improved.
+ The GNU Classpath free swing example can now be run with different
+ "skins" by setting the system property swing.defaultlaf to the GNU,
+ Basic or Metal look and feel.
+ 
+ * Some of the org.omg.CORBA classes and packages have now been
+ implemented. The Savannah bug tracker contains additional tasks for
+ which we are seeking help.
+ 
+ * Fixed compatibility problems in the java.beans which affected
+ Eclipse's Visual Editor Project.
+ 
+ * New completely lock free (Inheritable)ThreadLocal implementation.
+ 
+ * javax.swing.text.rtf framework added which can handle simple (plain)
+ text tokens.
+ 
+ * Support for parsing html files into Level 2 Document Object Model
+ (org.w3c.dom.html2 and javax.swing.text.html.parser). And a start of
+ javax.swing.text.html framework added.
+ 
+ Runtime interface changes:
+ 
+ * jni.h changed to better support compiling runtimes implementing jni;
+   see VM integration guide for details.
+ * New --enable-default-toolkit option to configure can be used to set
+   the fully qualified class name of the default AWT toolkit to use.
+   If not given, the old default of gnu.java.awt.peerk.gtk.GtkToolkit
+   is used.
+ * New --disable-core-jni option can be used to disable building the
+   "core" JNI libraries.  This is primarily useful if your VM can use the
+   Gtk peers but not the core JNI libraries.
+ * New system property "gnu.classpath.boot.library.path" can be specified
+   to define the location of the JNI libraries. It is by all means meant
+   ONLY for VM implementors and GNU Classpath hackers. See the hacking
+   guide for more information.
+ * The helper methods currentLoader() and allocateObject() for
+   java.io.ObjectInputStream have been moved to a VMObjectInputStream class.
+   Reference implementations are provided.
+ * java.net.InetAddress now uses VMInetAddress for runtime/platform
+   specific methods getLocalHostname(), getHostByAddr() and
+   getHostByName(). java.net.NetworkInterface now uses VMNetworkInterface
+   for runtime/platform specific getInterfaces() support. Default
+   (Posix/GNU JNI) implementations are provided.
+ * VMClass has a new method getModifiers(Class, boolean) which can be
+   used to get the real modifiers for an inner class or the ones
+   specified by the InnerClasses attribute.
+ * All (possible) runtime specific methods of Object and Double are now
+   in VMObject and VMDouble. Where possible generic reference
+   implementations are provided.
+ * The reference implementation of VMClassLoader now handles zip files
+   on the boot loader class path in getResources().
+ 
+ The following people helped with this release:
+ 
+ Andreas Tobler (Security warning fixes, fdlibm merging and cleanups)
+ Andrew Haley (FileChannel optimizations)
+ Andrew John Hughes (URL/URI, rmi.naming, java.text, Currency and generics)
+ Archie Cobbs (RPM spec file, VMClassLoader fixes, jni cleanups)
+ Audrius Meskauskas (Lots of corba work, javax.swing.text.html and dom parser)
+ Casey Marshall (x509 and asn1/der fixes)
+ Chris Burdess (writeUTF optimization, html2 dom support and net protocols)
+ Dalibor Topic (FileChannel fixes, kaffe porting)
+ David Daney (InetAddress fixes)
+ David Gilbert (awt documentation, font fixes)
+ Guilhem Lavaux (VMSelector and IndexColorModel fixes)
+ Ito Kazumitsu (DecimalFormat parse fixes)
+ Jeroen Frijters (nio optimizations, VMClass fixes, ThreadLocal rewrite)
+ Luca Barbieri (FileChannel.tryLock fixes)
+ Mark Wielaard (cleanups and packaging)
+ Michael Franz (OSX testing)
+ Michael Koch (VM interface restructuring, libgcj merging, lots of bug fixing)
+ Mike Stump (fdlibm ppc64 fixes)
+ Olafur Bragason (PipedInputStream bug reporting)
+ Patrik Reali (Website maintenance)
+ Rei Odaira (VMSelector bug reporting)
+ Riccardo Mottola (Darwin6 testing)
+ Robert Schuster (java.beans, boot.library.path, jni fixes, mediation work)
+ Roman Kennke (Lots of free swing work, MediaTracker and RTF work)
+ Sven de Marothy (io, nio and charset optimizations and rewrites)
+ Thomas Fitzsimmons (URL, gtk-peers and free swing work)
+ Tom Tromey (build and code cleanups, jni merging with libgcj and generics)
+ 
+ </pre>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050630.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050630.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050630.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050630.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,329 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath 0.16 Announcement (2005-04-29)"> 
+ <pre>
+ GNU Classpath 0.16 "Harmony!" released.
+ 
+ We are pleased to announce a new developer snapshot of GNU Classpath.
+ 
+ GNU Classpath, essential libraries for java, is a project to create free
+ core class libraries for use with runtimes, compilers and tools for the
+ java programming language.
+ 
+ The GNU Classpath developer snapshot releases are not directly aimed
+ at the end user but are meant to be integrated into larger development
+ platforms. For example the GCC (gcj) and Kaffe projects will use the
+ developer snapshots as a base for future versions.
+ 
+ This is the first release of GNU Classpath since our Harmony
+ collaboration with the Apache group.  Instructions for developers
+ wanting to try out and help with the core library implementation can
+ be found at: http://developer.classpath.org/
+ 
+ New is our wiki with simple steps to setup a quick development
+ environment.  For example developers using cygwin can find examples
+ here: http://developer.classpath.org/mediation/ClasspathOnCygwin
+ 
+ Some highlights of changes in this release (more extensive list below):
+ 
+ AWT GtkScrollBar and GtkImage improvements. All image operations are
+ now working correctly. Graphics2D has been upgraded to use Cairo
+ 0.5.x. Free Swing updates for 1.5 top-level compatibility. JTree
+ interface completed. JFileChooser has been implemented. Completed
+ implementations of BoxLayout, GrayFilter and SplitPane. Upgraded the
+ Corba features to 1.3 and included new CORBA 2.3 features. Start of
+ generic JDWP framework. And lots of bug fixes based on real world
+ application usage.
+ 
+ 31 people actively contributed code to this release and made 389 CVS
+ commits during the last two months of development. diffstat since 0.15:
+ 1248 files changed, 133649 insertions(+), 41802 deletions(-)
+ 
+ More details about the various changes and contributions below.
+ 
+ GNU Classpath 0.16 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.16.tar.gz
+ MD5sum: 220a9c86719a2c6bd7ba9b9877495113
+ SHA1sum: be6d30fbfe4d71015a455a367411a6d55df3484e
+ 
+ This release depends on gtk+ 2.4 for AWT support. But gtk+ 2.6 or
+ higher is recommended. Included, but not activated by default in this
+ release is a Graphics2D implementation based on the Cairo Graphics
+ framework (http://www.cairographics.org). Enabling this makes programs
+ like JEdit start up on GNU Classpath based runtimes.  To enable this
+ support install the cairo 0.5.x snapshot, configure GNU Classpath with
+ --enable-gtk-cairo and make sure the system property
+ gnu.java.awt.peer.gtk.Graphics=Graphics2D is set.
+ 
+ This release was explicitly tested against the last Eclipse 3.1
+ release (thanks to various eclipse hackers for the support).  For end
+ user we do however recommend to use the GCJ4 packaged version of
+ Eclipse 3.1 that have been prepared for the various distributions:
+ 
+ Fedora Core
+  http://overholt.ca/wp/?p=27
+ Debian GNU/Linux
+  http://gnu.wildebeest.org/diary-man-di/index.php?p=19
+ Ubuntu
+  http://www.larvalstage.net/index.php?/archives/2-Introducing-Eclipse-3.1.html
+ 
+ Not yet included is an implementation of Generic collection classes
+ and classes for other 1.5 language extensions.  Work on this is being
+ done on a special development branch that will be included in a future
+ GNU Classpath release when free runtimes, compilers and tools have all
+ been upgraded to support these new language features.
+ 
+ One of the major focuses of the GNU Classpath project is expanding
+ and using the Mauve test suite for Compatibility, Completeness and
+ Correctness checking.  Various groups around GNU Classpath collaborate
+ on the free software Mauve test suite which contains ~30.000 core
+ library tests.  Mauve has various modules for testing core class
+ library implementations, byte code verifiers, source to byte code and
+ native code compiler tests.  Mauve also contains the Wonka visual test
+ suite and the Jacks Compiler Killer Suite. This release passes 28801
+ of the mauve core library tests.  See for more information:
+ http://www.sourceware.org/mauve/
+ 
+ Conformance reports for the included jaxp support can be found in the
+ doc/README.jaxp file.
+ 
+ The GNU Classpath developers site http://developer.classpath.org/
+ provides detailed information on how to start with helping the GNU
+ Classpath project and gives an overview of the core class library
+ packages currently provided.  For each snapshot release generated
+ documentation is provided through the GNU Classpath Tools gjdoc
+ project. A documentation generation framework for java source files
+ used by the GNU project. Full documentation on the currently
+ implementated packages and classes can be found at:
+ http://developer.classpath.org/doc/
+ 
+ Here are answers to some questions you might have about this project and
+ this release.
+ 
+ 1). Who should use this software?
+ 
+ Although GNU Classpath is already capable of supporting many
+ applications written in the java programming language, this is a
+ development release. As such, there are still some unfinished
+ components, and some problems are to be expected. You should install it
+ if you are interested in GNU Classpath development or reporting bugs.
+ We appreciate both.
+ 
+ For end users we recommend to use one of the development environments
+ based on GNU Classpath which combine the core libraries with compilers
+ and other tools needed for creating applications and libraries.
+ 
+     * GCC with GCJ  (http://gcc.gnu.org/java/)
+     * Kaffe         (http://www.kaffe.org/)
+ 
+ Both projects have CVS versions which track GNU Classpath closely.
+ 
+ 2). What is required to build/install/run?
+ 
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc. When creating native code you will
+ also need a working C compiler and up to date Gnome development
+ libraries (gtk+, libart and gdk-pixbuf). More information on the
+ precise version numbers for the tools and libraries can be found in
+ the INSTALL file.
+ 
+ You will also need a runtime environment.  Most active GNU Classpath
+ hackers use JamVM (http://jamvm.sourceforge.net/) and the gcj or Jikes
+ bytecode compiler (http://www.jikes.org) for quick development.  But
+ other environments can certainly be used to hack on the GNU Classpath
+ core libraries.
+ 
+ For other environments that might need modified version of the current
+ release see the README file.  A complete list of virtual machines and
+ compilers known to be based on GNU Classpath can be found at our
+ website: http://www.gnu.org/software/classpath/stories.html
+ 
+ Note that these are just byte code execution compilers and/or
+ runtimes. For development of programs written in the java programming
+ language you will also need compilers and other tools for creating
+ libraries and/or executables (see question 1).
+ 
+ 3). What platforms are supported?
+ 
+ GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
+ developers.  Since 0.12 there is also support for cygwin.  We plan to
+ eventually support many others.  Many more architectures and platforms
+ are supported.  Check the actual runtime you use together with GNU
+ Classpath for detailed information on the supported platforms.
+ 
+ 4). Where do I go for more information?
+ 
+ The project home page with information on our mailing list can be
+ found at http://www.gnu.org/software/classpath/
+ 
+ The GNU Classpath developer recently held a conference during Fosdem.
+ This was a standing room event and provided lot of communication between
+ the GNU Classpath, Kaffe, GCJ, IKVM, Apache, java-gnome and Cacao hackers
+ and users. The presentations of this event have been publised and should
+ give a good overview of the current status and future plans of the project:
+ http://www.gnu.org/software/classpath/events/escape_fosdem05.html
+ 
+ Developers wanting to help out with the project will find more
+ information and tools on http://developer.classpath.org/
+ 
+ 5). How do I extend the functionality of the core classes?
+ 
+ Besides combining GNU Classpath with the runtimes and compilers above
+ you might want to add support for additional encryption libraries and
+ algorithms as provided by GNU Crypto
+ (http://www.gnu.org/software/gnu-crypto/).  And for additional
+ extension libraries (mail, activation, infobus, servlet, etc.) check
+ out GNU ClasspathX (http://www.gnu.org/software/classpathx).
+ 
+ Additional network protocol support is provided by a sub-project
+ called GNU Classpath Inetlib, an extension library to provide extra
+ network protocol support (ftp, finger, gopher) for GNU Classpath, but
+ it can also standalone to ease adding http, imap, pop3 and smtp client
+ support to applictions. Also distributed from
+ <ftp://ftp.gnu.org/gnu/classpath/>
+ 
+ The following projects extend the functionality of GNU Classpath
+ with additional algorithms, new core packages and tools.
+ All are released under GPL compatible licenses:
+ 
+ * Jessie: A free implementation of the JSSE. Secure Sockets Extension.
+   http://www.nongnu.org/jessie/
+ * Tritonus: A implementation of the javax.sound API.
+   http://www.tritonus.org/
+ * gcjwebplugin: A plugin for the execution of applets in web browsers.
+   http://www.nongnu.org/gcjwebplugin/
+ 
+ Note that the above libraries might already have been included in the
+ various platforms that also integrate GNU Classpath like done by the
+ Kaffe project.
+ 
+ 6). What is new in this release?
+ 
+ New in release 0.16 (Jun 30, 2005)
+ (See the ChangeLog file for a full list of changes.)
+ 
+ * Better GTK scrollbar peer implementation when using GTK >= 2.6.
+ * GdkGraphics2D has been updated to use Cairo 0.5.x APIs.
+ * BufferedImage and GtkImage rewrites. All image drawing operations
+   should now work correctly (flipping requires gtk+ >= 2.6)
+ * Future Graphics2D, Image and Text work is documented at:
+   http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
+ * Free Swing Top-Level Compatibility. JFrame, JDialog, JApplet,
+   JInternalFrame, and JWindow are now 1.5 compatible in the sense that you
+   can call add() and setLayout() directly on them, which will have the same
+   effect as calling getContentPane().add() and getContentPane().setLayout().
+ * The JTree interface has been completed. JTrees now recognizes mouse clicks
+   and selections work, but the visual implementation is not yet complete.
+   Work on expansion and collapsing of the tree nodes is being implemented.
+ * BoxLayout works properly now.
+ * Fixed GrayFilter to actually work.
+ * Metal SplitPane implemented.
+ * Lots of free swing text and editor stuff work now.
+ 
+ * When gtk+ 2.6 or higher is installed the default log handler will produce
+   stack traces whenever a WARNING, CRITICAL or ERROR message is produced.
+ 
+ * The CORBA implementation is now a working prototype that should support
+   features up till 1.3 inclusive.
+   We would invite groups writing CORBA dependent applications to
+   try Classpath implementation, reporting any possible bugs.
+ 
+   The CORBA prototype is interoperable with Sun's implementation v 1.4,
+   transferring object references, primitive types, narrow and wide
+   strings, arrays, structures, trees, abstract interfaces and
+   value types (feature of CORBA 2.3) between these two platforms.
+   The remote exceptions are transferred and handled correctly.
+   The stringified object references (IORs) from various sources are
+   parsed as required.
+   The transient (for current session) and permanent (till jre restart)
+   redirections work.
+   Both Little and Big Endian encoded messages are accepted.
+   The implementation is verified using tests from the former cost.omg.org.
+   The current release includes working examples (see the examples directory),
+   demonstrating the client-server communication, using either CORBA Request
+   or IDL-based  stub (usually generated by a IDL to java compiler).
+   These examples also show how to use the Classpath CORBA naming service.
+   The IDL to java compiler is not yet written, but as our library must be
+   compatible, it naturally accepts the output of other idlj implementations.
+ 
+ * New --with-vm-classes configure option, and new 'build' setting
+   for --with-glibj. (Only for integrators.)
+ 
+ Runtime interface changes:
+ 
+ * Start of a generic JDWP framework in gnu/classpath/jdwp.
+   This is unfinished, but feedback (at classpath@gnu.org) from runtime
+   hackers is greatly appreciated. Although most of the work is currently
+   being done around gcj/gij we want this framework to be as VM neutral as
+   possible. Early design is described in:
+   http://gcc.gnu.org/ml/java/2005-05/msg00260.html
+ * Native method VMClass.getModifiers() now takes an additional
+   boolean parameter.
+ * Deprecated native method VMClassLoader.defineClass(ClassLoader,
+   String, byte[], int, int) has been replaced by
+   VMClassLoader.defineClass(ClassLoader, String, byte[], int, int,
+   ProtectionDomain)
+ * VMClassLoader.loadClass(String name, boolean resolve) is now native,
+   replacing the former version which just returned null.
+ * Deprecated native method VMClassLoader.getPrimitiveClass(String) has
+   been replaced by new native method VMClassLoader.getPrimitiveClass(char).
+ * Previously empty implementations of methods VMThread.countStackFrames(),
+   VMThrowable.fillInStackTrace(), and VMThrowable.getStackTrace() have
+   been removed; these methods are now native methods.
+ * Fields "exceptionTypes" and "parameterTypes" have been removed from
+   Contructor.java and getExceptionTypes() and getParameterTypes() are
+   now native methods.
+ 
+ The following people helped with this release:
+ 
+ Andreas Jaeger (mprec updates)
+ Andreas Tobler (Darwin support)
+ Andrew John Hughes (Locale and net fixes, URI RFC2986 updates)
+ Andrew Overholt (File locking)
+ Anthony Balkissoon (JList, Free Swing 1.5 updates  and mouse event fixes)
+ Archie Cobbs (VM interface updates)
+ Audrius Meskauskas (Corba and HTML work)
+ Bryce McKinlay (RMI work)
+ Chris Burdess (XML work)
+ Christian Thalinger (fdlibm updates)
+ Dalibor Topic (SHA1PRNG and GdkPixbugDecoder updates)
+ David Daney (BitSet bugfixes)
+ David Gilbert (Lots and lots of documentation and awt/swing fixes)
+ Gary Benson (MessageFormat fixes)
+ Goffredo Baroncelli (HTTPURLConnection fixes)
+ Jan Roehrich (JTree fixes)
+ Jeroen Frijters (ClassLoader and nio cleanups)
+ Ka-Hing Cheung (TreePath and TreeSelection fixes)
+ Kalle Olavi Niemitalo (Build fixes)
+ Keith Seitz (JDWP work)
+ Kim Ho (JFileChooser implementation)
+ Lillian Angel (JTree implementation and lots of bug fixes)
+ Mark Wielaard (build fixes, GdkPixpufDecoder fixes and packaging)
+ Michael Koch (Locale updates, bug and build fixes)
+ Olga Rodimina (MenuSelectionManager)
+ Robert Schuster (charset and awt fixes)
+ Roman Kennke (BoxLayout, GrayFilter and SplitPane, plus bugfixes all over)
+ Sven de Marothy (GtkImage rewrite, 2D, awt, free swing and date/time fixes)
+ Thomas Fitzsimmons (Lot of upgrades to the gtk+ AWT and cairo 2D support)
+ Tom Tromey (libgcj merging, build infrastructure and bug fixes)
+ Ziga Mahkovec (Graphics2D upgraded to cairo 0.5 and new regex features)
+ 
+ We would also like to thank the numerous bug reporters and testers!
+ </pre>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050715.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050715.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050715.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050715.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,132 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="prr">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpatchy 0.17 Announcement (2005-07-15)"> 
+ <pre>
+ GNU Classpatchy 0.17 released.
+ 
+ We are pleased to announce a new developer snapshot of GNU Classpath.
+ 
+ GNU Classpath, essential libraries for java, is a project to create free
+ core class libraries for use with runtimes, compilers and tools for the
+ java programming language.
+ 
+ The GNU Classpath developer snapshot releases are not directly aimed
+ at the end user but are meant to be integrated into larger development
+ platforms. For example the GCC (gcj) and Kaffe projects will use the
+ developer snapshots as a base for future versions.
+ 
+ This is mainly a bug fix release for issues found with eclipse 3.1 and
+ Free Swing applications just after our 0.16 release. But it also
+ includes some exciting new features.
+ 
+ Some highlights of changes in this release (more extensive list below):
+ 
+ XML DOM, XPATH and XSL fixes. Free Swing is much more responsive.
+ JInternalFram, JTree, JMenu, JTable, JButton and JFileChooser fixes.
+ FileChannel lock and force implementations added. The logging
+ FileHandler now rotates files. Clean locking and namespace for gtkpeer
+ library. System call interrupts and timeouts are now handled correctly
+ for net and nio. Corba bug fixes. Lots of documentation updates. The
+ VM Integration Guide now comes with a full section on the VM/Classpath
+ hooks. GNU Classpath Examples now includes a Tree World demo.
+ 
+ 21 people actively contributed code to this release and made 171 CVS
+ commits during the two weeks of development. diffstat since 0.16:
+ 3638 files changed, 25798 insertions(+), 15596 deletions(-)
+ 
+ More details about the various changes and contributions below.
+ 
+ This release passes 29508 out of 30320 Mauve core library tests.
+ Conformance reports for the included jaxp support can be found in the
+ doc/README.jaxp file.
+ 
+ GNU Classpath 0.17 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.17.tar.gz
+ MD5sum: eb620987422878e05ea889d5e7496c63
+ SHA1sum: 3b47cb37c91803fbc9d0426d97e1faa6a993615a
+ 
+ The GNU Classpath developers site http://developer.classpath.org/
+ provides detailed information on how to start with helping the GNU
+ Classpath project and gives an overview of the core class library
+ packages currently provided.  For each snapshot release generated
+ documentation is provided through the GNU Classpath Tools gjdoc
+ project. A documentation generation framework for java source files
+ used by the GNU project. Full documentation on the currently
+ implementated packages and classes can be found at:
+ http://developer.classpath.org/doc/
+ 
+ New in release 0.17 (Jul 15, 2005)
+ (See the ChangeLog file for a full list of changes.)
+ 
+ * gnu.xml fix for nodes created outside a namespace context.
+ * Add support for output indenting and cdata-section-elements output
+   instruction in xml.transform.
+ * xml.xpath corrections for cases where elements/attributes might have
+   been created in non-namespace-aware mode. Corrections to handling of
+   XSL variables and minor conformance updates.
+ * DefaultMutableTreeNode preorder, postorder, depthFirst and breadthFirst
+   traversal enumerations implemented.
+ * JInternalFrame colors and titlebar draw properly.
+ * JTree is working up to par (icons, selection and keyboard traversal).
+ * JMenus were made more compatible in visual and programmatic behavior.
+ * JTable changeSelection and multiple selections implemented.
+ * JButton and JToggleButton change states work properly now.
+ * JFileChooser fixes.
+ * revalidate and repaint fixes which make Free Swing much more responsive.
+ * Correctly handle system call interrupts and timeouts in native nio
+   and net functions.
+ * MetalIconFactory implemented.
+ * Handle image loading errors correctly for gdkpixbuf and MediaTracker.
+ * Added Tree World to GNU Classpath examples Free Swing demo.
+ * FileChannel.lock() and FileChannel.force() implemented.
+ * java.util.logging.FileHandler now rotates files.
+ * Better handle GDK lock. Properly prefix gtkpeer native functions (cp_gtk).
+ * Corba bug fixes and documentation updates.
+ * Updated gcj build infrastructure.
+ * Documentation fixes all over the place.
+   See http://developer.classpath.org/doc/
+ * VM Integration Guide updates with a full section on VM/Classpath hooks.
+ 
+ The following people helped with this release:
+ 
+ Aaron Luchko (JDWP updates and documentation fixes)
+ Andrew John Hughes (VMIntegration guide update)
+ Anthony Balkissoon (Lots of Free Swing updates)
+ Archie Cobbs (build and URLClassLoader updates)
+ Audrius Meskauskas (Corba and text and html parser fixes)
+ Casey Marshall (FileChannel lock, SystemLogger and FileHandler rotate impl.)
+ Chris Burdess (Lots of gnu.xml and http protocol fixes)
+ Dalibor Topic (Better DEBUG support)
+ Daniel Bonniot (Serialization fixes)
+ David Gilbert (Lots of documentation and MetalIconFactory implementation)
+ Guilhem Lavaux (Logger bug fixes)
+ Jeroen Frijters (Serialization fixes)
+ Lillian Angel (Lots of Free Swing updates)
+ Mark Wielaard (System call interrupts, timeouts and packaging)
+ Robert Schuster (TreeNode enumerations and ActionCommand and various fixes)
+ Roman Kennke (Lots of Free Swing updates)
+ Sven de Marothy (GtkImage fixes)
+ Thomas Fitzsimmons (gtk peer updates and restructuring)
+ Simon Kitching (String cleanups and optimization suggestions)
+ Tom Tromey (gcj build update)
+ Ziga Mahkovec (build fixes)
+ 
+ We would also like to thank the numerous bug reporters and testers!
+ </pre>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050906.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050906.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20050906.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20050906.wml	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,221 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="mjw">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath 0.18 Announcement (2005-09-06)"> 
+ <pre>
+ GNU Classpath 0.18 released.
+ 
+ We are pleased to announce a new developer snapshot of GNU Classpath.
+ 
+ GNU Classpath, essential libraries for java, is a project to create free
+ core class libraries for use with runtimes, compilers and tools for the
+ java programming language.
+ 
+ The GNU Classpath developer snapshot releases are not directly aimed
+ at the end user but are meant to be integrated into larger development
+ platforms. For example the GCC (gcj) and Kaffe projects will use the
+ developer snapshots as a base for future versions.
+ 
+ This is our first release after "The Big Merge" with GCC/GCJ.  GNU
+ Classpath can now be used as a subdirectory of libgcj inside the GCC
+ tree so it will be much easier to keep GCC up-to-date with the latest
+ GNU Classpath developer release snapshots.
+ 
+ Some highlights of changes in this release (more extensive list below):
+ 
+   Added GNU JAWT for awt native interface support. Datatransfer
+   clipboard updated to 1.5 including support for copy/paste of
+   serialized objects, images and files.  Completed the org.omg
+   PortableInterceptor, DynamicAny and Portable Object Adapter
+   packages. Multi plaf support for Free Swing. Editing support for
+   JTree and JTable. Lots of icons and look and feel improvements for
+   Free Swing basic and metal themes. NIO FileChannel.map implemented
+   and DirectByteBuffer put method speedups. Image loading speedups for
+   awt. Support for darwin and solaris out of the box.
+ 
+ 29 people actively contributed to this release and made 535 CVS
+ commits during the two months of development. diffstat since 0.17:
+  994 files changed, 114744 insertions(+), 13663 deletions(-)
+ 
+ More details about the various changes and contributions below.
+ 
+ A full list of bug reports fixed for this release can be found at:
+ http://gcc.gnu.org/bugzilla/buglist.cgi?product=classpath&target_milestone=0.18
+ 
+ This release depends on gtk+ 2.4 for AWT support. But gtk+ 2.6 or
+ higher is recommended. Included, but not activated by default in this
+ release is a Graphics2D implementation based on the Cairo Graphics
+ framework (http://www.cairographics.org). Enabling this makes programs
+ like JFreeChart and JEdit start up on GNU Classpath based runtimes.
+ To enable this support install the cairo 0.5.x snapshot, configure GNU
+ Classpath with --enable-gtk-cairo.
+ 
+ One of the major focuses of the GNU Classpath project is expanding
+ and using the Mauve test suite for Compatibility, Completeness and
+ Correctness checking.  Various groups around GNU Classpath collaborate
+ on the free software Mauve test suite which contains 32.000+ core
+ library tests.  Mauve has various modules for testing core class
+ library implementations, byte code verifiers, source to byte code and
+ native code compiler tests.  Mauve also contains the Wonka visual test
+ suite and the Jacks Compiler Killer Suite.
+ See for more information: http://www.sourceware.org/mauve/
+ This release passes 31194 out of 32253 Mauve core library tests.
+ 
+ Conformance reports for the included jaxp support can be found in the
+ doc/README.jaxp file.
+ 
+ GNU Classpath 0.18 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.18.tar.gz
+ MD5sum: c0650c257aa93eafb709553f172f0bbb
+ SHA1sum: 28061c750244cac4ff0151da6aba183b94b98b25
+ 
+ The GNU Classpath developers site http://developer.classpath.org/
+ provides detailed information on how to start with helping the GNU
+ Classpath project and gives an overview of the core class library
+ packages currently provided.  For each snapshot release generated
+ documentation is provided through the GNU Classpath Tools gjdoc
+ project.  A documentation generation framework for java source
+ files used by the GNU project. Full documentation on the currently
+ implementated packages and classes can be found at:
+ http://developer.classpath.org/doc/
+ 
+ New in release 0.18 (Sep 6, 2005)
+ (See the ChangeLog file for a full list of changes.)
+ 
+ * GNU JAWT implementation, the AWT Native Interface, which allows
+   direct access to native screen resources from within a Canvas's
+   paint method.  GNU Classpath Examples comes with a Demo, see
+   examples/README.
+ * awt.datatransfer updated to 1.5 with supports for FlavorEvents.
+   The gtk+ awt peers now allow copy/paste of text, images, uris/files
+   and serialized objects with other applications and tracking
+   clipboard change events with gtk+ 2.6 (for gtk+ 2.4 only text and
+   serialized objects are supported). A GNU Classpath Examples
+   datatransfer Demo was added to show the new functionality.
+ * org.omg.PortableInterceptor and related functionality in other
+   packages is now implemented:
+     - The sever and client interceptors work as required since 1.4.
+     - The IOR interceptor works as needed for 1.5.
+ * The org.omg.DynamicAny package is completed and passes the prepared
+   tests.
+ * The Portable Object Adapter should now support the output of the
+   recent IDL to java compilers. These compilers now generate servants and 
+   not CORBA objects as before, making the output depended on the existing 
+   POA implementation. Completing POA means that such code can already be 
+   tried to run on Classpath. Our POA is tested for the following usager
+   scenarios:
+     - POA converts servant to the CORBA object.
+     - Servant provides to the CORBA object.
+     - POA activates new CORBA object with the given Object Id
+       (byte array) that is later accessible for the servant.
+     - During the first call, the ServantActivator provides servant for
+       this and all subsequent calls on the current object.
+     - During each call, the ServantLocator provides servant for this call
+       only.
+     - ServantLocator or ServantActivator forwards call to another server.
+     - POA has a single servant, responsible for all objects.
+     - POA has a default servant, but some objects are explicitly
+       connected to they specific servants.
+   The POA is verified using tests from the former cost.omg.org.      
+ * The javax.swing.plaf.multi.* package is now implemented.
+ * Editing and several key actions for JTree and JTable were implemented.
+ * Lots of icons and look and feel improvements for Free Swing basic
+   and metal themes were added.  Try running the GNU Classpath Swing
+   Demo in examples (gnu.classpath.examples.swing.Demo) with:
+   -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFeel
+   -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel
+ * Start of styled text capabilites for java.swing.text.
+ * NIO FileChannel.map implementation, fast bulk put implementation for
+   DirectByteBuffer (speeds up this method 10x).
+ * Split gtk+ awt peers event handling in two threads and improve gdk
+   lock handling (solves several AWT lock ups).
+ * Speed up awt Image loading.
+ * Updated TimeZone data against Olson tzdata2005l.
+ * Make zip and jar UTF-8 "clean".
+ * "native" code builds and compiles (warning free) on Darwin and
+   Solaris.
+ 
+ Runtime interface changes:
+ 
+ * All native resource "pointers" in the VM interface classes are now
+   exposed as gnu.classpath.Pointer objects. This might impact runtimes
+   that optimize and support java.nio.DirectByteBuffers. Creating these
+   classes and accessing the contents as void * pointers for the native
+   reference JNI implementation is done through the
+   JCL_NewRawDataObject and JCL_GetRawData functions.
+ * Simplified the Class/VMClass interface.
+ * Removed loadedClasses map from ClassLoader. It's now the VMs
+   responsibility to manage the list of defined and loaded classes for
+   each class loader.
+ * Moved native methods from java.lang.reflect.Proxy to VMProxy.
+ * Added hook to VMClassLoader to allow VM to do class caching.
+ 
+ New Untested/Disabled Features:
+ 
+   The following new features are included, but not ready for
+   production yet. They are explicitly disabled and not supported. But
+   if you want to help with the development of these new features we
+   are interested in feedback. You will have to explicitly enable them
+   to try them out (and they will most likely contain bugs). If you are
+   interested in any of these then please join the mailing-list and
+   follow development in CVS.
+ 
+ * QT4 AWT peers, enable by giving configure --enable-qt-peer.
+ * JDWP framework, enable by deleting the jdwp references from
+   lib/standard.omit and vm/reference/standard.omit. No default
+   implementation is provided. Work is being done on gcj/gij
+   integration.
+ * StAX java.xml.stream, enable by deleting the gnu.xml.stream and
+   java.xml.stream references in lib/standard.omit.
+ 
+ The following people helped with this release:
+ 
+ Aaron Luchko (Lots of JDWP work)
+ Andreas Tobler (Darwin and Solaris testing and fixing
+ Andrew Haley (gcj build speedups)
+ Anthony Balkissoon (Lots of Free Swing work including JTable editing)
+ Archie Cobbs (Build fixes)
+ Audrius Meskauskas (Lots of omg corba work plus testing and documenting)
+ Bastiaan Huisman (TimeZone bug fixing)
+ Casey Marshall (NIO FileChannel.map support, security and policy updates)
+ Chris Burdess (StAX work and gnu xml fixes)
+ Christian Schlichtherle (Zip fixes and cleanups)
+ Christian Thalinger (64-bit cleanups)
+ Dalibor Topic (Qt4 build infrastructure)
+ David Gilbert (Basic and Metal icon and plaf and lots of documenting)
+ Guilhem Lavaux (JCL native Pointer updates)
+ Ingo Proetel (Image, Logger and URLClassLoader updates)
+ Ito Kazumitsu (NetworkInterfaces implementation and updates)
+ Jan Roehrich (BasicTreeUI updates)
+ Jeroen Frijters (VMProxy and VMClassLoader updates, RMIClassLoader fixes)
+ Keith Seitz (Lots of JDWP work)
+ Kelley Cook (Build fixes)
+ Lillian Angel (Lots of Free Swing work including JTree editing)
+ Mark Wielaard (Clipboard implementation, build and release infrastructure)
+ Rainer Orth (Build fixes)
+ Robert Schuster (Documentation updates and beans fixes)
+ Roman Kennke (Lots of Free Swing work including styled text)
+ Sven de Marothy (Qt4 peers)
+ Thomas Fitzsimmons (Lots of gtk+ awt peer work)
+ Tom Tromey (Lots of fixes including coordinating The Big Merge)
+ Wolfgang Baer (GapContent bug fixes)
+ 
+ We would also like to thank the numerous bug reporters and testers!
+ 
+ </pre>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20051102.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20051102.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/20051102.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/20051102.wml	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,247 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="mjw">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath 0.19 Announcement (2005-11-02)"> 
+ <pre>
+ GNU Classpath "95% and counting" 0.19 released
+ 
+ GNU Classpath, essential libraries for java, is a project to create
+ free core class libraries for use with runtimes, compilers and tools
+ for the java programming language.
+ 
+ The GNU Classpath developer snapshot releases are not directly aimed
+ at the end user but are meant to be integrated into larger development
+ platforms. For example the GCC (gcj) and Kaffe projects will use the
+ developer snapshots as a base for future versions.
+ 
+ Some highlights of changes in this release (more extensive list below):
+ 
+   Much more efficient painting for large Free Swing GUIs. Improved
+   accessibility support. HttpURLConnection rewrite. Official CORBA
+   VMCID assigned. Start of RMI over IIOP support. Qt4 support for
+   OS-X. Much improved Free Swing Metal theme. Free Swing Demo includes
+   theme switcher example (Metal, Ocean, GNU). JBoss now starts up and
+   Jonas testsuite passes for 95%. Support for the javax.sound.midi
+   framework and experimental DSSI and ALSA service providers. Early
+   version of the popular StAX API. Now has 96% coverage of 1.4 API.
+ 
+ This is the first time we also have a pre-release of our 1.5 generics
+ work. classpath-0.19-generics contains a version of the core library
+ that uses the new 1.5 language features such as generics and
+ enumerations. ECJ and JamVM are known to support the generics release
+ out of the box. And you should be able to run Eclipse 3.1 with it to
+ develop programs that use the new 1.5 language and core library
+ additions. classpath-generics is a work in progress and not as
+ extensively tested as our regular releases. But please try it out if
+ you want to help us test the new 1.5 support of the core libraries.
+ 
+ For this release we setup a Free Swing Test Application page
+ http://developer.classpath.org/mediation/FreeSwingTestApps
+ Please see that page for showcases of applications that work with this
+ release and to help test other applications.
+ 
+ It is also the first release that has GNU Classpath promotion banners.
+ http://developer.classpath.org/mediation/ClasspathBanners
+ Please feel free to add them to your project pages if your project is
+ known to work with GNU Classpath or just to promote the project.
+ 
+ 32 people actively contributed to this release and made
+ 787 CVS commits during the last two months of development
+ (excluding the generics branch work). diffstat since 0.18:
+  1158 files changed, 93916 insertions(+), 36407 deletions(-)
+ 
+ More details about the various changes and contributions below.
+ 
+ A full list of bug reports fixed for this release can be found at:
+ http://gcc.gnu.org/bugzilla/buglist.cgi?product=classpath&target_milestone=0.19
+ 
+ This release depends on gtk+ 2.4 for AWT support. But gtk+ 2.6 or
+ higher is recommended. Included, but not activated by default in this
+ release is a Graphics2D implementation based on the Cairo Graphics
+ framework (http://www.cairographics.org). Enabling this makes programs
+ like JFreeChart and JEdit start up on GNU Classpath based runtimes.
+ To enable this support install the cairo 0.5.x snapshot, configure GNU
+ Classpath with --enable-gtk-cairo.
+ 
+ One of the major focuses of the GNU Classpath project is expanding and
+ using the Mauve test suite for Compatibility, Completeness and
+ Correctness checking.  Various groups around GNU Classpath collaborate
+ on the free software Mauve test suite which contains around 34.000
+ core library tests.  Mauve has various modules for testing core class
+ library implementations, byte code verifiers, source to byte code and
+ native code compiler tests.  Mauve also contains the Wonka visual test
+ suite and the Jacks Compiler Killer Suite.
+ See for more information: http://www.sourceware.org/mauve/
+ This release passes 33.381 out of 34.262 Mauve core library tests.
+ 
+ Conformance reports for the included jaxp support can be found in the
+ doc/README.jaxp file.
+ 
+ GNU Classpath 0.19 can be downloaded from
+ ftp://ftp.gnu.org/pub/gnu/classpath/
+ or one of the ftp.gnu.org mirrors
+ http://www.gnu.org/order/ftp.html
+ 
+ File: classpath-0.19.tar.gz
+ MD5sum: 0b93b1c1dd3d33ef7fb6a47dbb29e41d
+ SHA1sum: 43d499e8b83e04a7fc4a1d4d301638c5cec6c679
+ 
+ File: classpath-0.19-generics.tar.gz (EXPERIMENTAL)
+ MD5sum: 4c0ccc91a147af4010d19f48dbf441b3
+ SHA1sum: b2a2b968523b3af35cd7e44bcc4f940621b3ca66
+ 
+ The GNU Classpath developers site http://developer.classpath.org/
+ provides detailed information on how to start with helping the GNU
+ Classpath project and gives an overview of the core class library
+ packages currently provided.  For each snapshot release generated
+ documentation is provided through the GNU Classpath Tools gjdoc
+ project.  A documentation generation framework for java source
+ files used by the GNU project. Full documentation on the currently
+ implementated packages and classes can be found at:
+ http://developer.classpath.org/doc/
+ 
+ New in release 0.19 (Nov 2, 2005)
+ (See the ChangeLog file for a full list of changes.)
+ 
+ * The Swing RepaintManager has been reworked for more efficient
+   painting, especially for large GUIs.
+ 
+ * The Swing layout manager OverlayLayout has been implemented, the
+   BoxLayout has been rewritten to make use of the SizeRequirements
+   utility class and caching for more efficient layout.
+ 
+ * Improved accessibility support for Swing.
+ 
+ * The java.net.HttpURLConnection implementation no longer buffers the
+   entire response body in memory.  This means that response bodies
+   larger than available memory can now be handled.
+ 
+ * The Andrew Watson, Vice President and Technical Director of the
+   Object Management Group, has officially assigned us 20 bit Vendor
+   Minor Code Id: 0x47430 ("GC") that will mark remote Classpath -
+   specific system exceptions.  Obtaining the VMCID means that GNU
+   Classpath now is a recogniseable type of node in a highly
+   interoperable CORBA world.
+ 
+ * Classpath now includes the first working draft to support the RMI
+   over IIOP protocol. The current implementation is capable for remote
+   invocations, transferring various Serializables and Externalizables
+   via RMI-IIOP protocol.  It can flatten graphs and, at least for the
+   simple cases, is interoperable with Sun's jdk 1.5.
+ 
+ * Qt4 configury switches for OS-X. Additional to the --enable-qt-peer,
+   OS-X users with a Qt4 installation can build the qt-peers with the
+   argument --with-qt4dir=<Qt4-installation-dir>.
+ 
+ * Significant progress has been made in the implementation of the
+   javax.swing.plaf.metal.* package, with most UI delegates in a
+   working state now.  Please test this with your own applications and
+   provide feedback that will help us to improve this package.
+ 
+ * The GUI demo (gnu.classpath.examples.swing.Demo) has been extended
+   to highlight various features in our free-swing implementation. And
+   includes a look and feel switcher (Metal default, Ocean or GNU).
+ 
+ Runtime interface changes:
+ 
+ * Changed implementation of VMClassLoader.getPackage(s) : new method
+   VMClassLoader.getBootPackages should be implemented by the vm, and
+   sould return a string array of boot package names ("java.lang",
+   "java.net", ...).  Feedback from vm implementors for usability and
+   relevance of the getBootPackages method would be greatly
+   appreciated.
+ 
+ New Untested/Disabled Features:
+ 
+   The following new features are included, but not ready for
+   production yet. They are explicitly disabled and not supported. But
+   if you want to help with the development of these new features we
+   are interested in feedback. You will have to explicitly enable them
+   to try them out (and they will most likely contain bugs). If you are
+   interested in any of these then please join the mailing-list and
+   follow development in CVS.
+ 
+ * Cairo Gtk+ Graphics2D support, enabled by giving configure
+   --enable-gtk-cairo.
+ * QT4 AWT peers, enable by giving configure --enable-qt-peer.
+ 
+ The following people helped with this release:
+ 
+ Andreas Tobler
+   Qt4 support for Darwin/OSX, Graphics2D support, gtk+ updates.
+ Andrew Haley
+   Serialization and URLClassLoader fixes.
+ Andrew John Hughes
+   Serialization fixes, Properties XML support and generic branch work.
+ Anthony Balkissoon
+   Lots of Free Swing additions.
+ Anthony Green
+   MIDI framework, ALSA and DSSI providers.
+ Audrius Meskauskas
+  Lots of new CORBA and RMI work and bugfixes.
+ Casey Marshall
+   Crypto algorithm fixes.
+ Chris Burdess
+   StAX and dom xml:id support.
+ Christian Thalinger
+   Configuration and VM inteface fixes and CACAO integration.
+ Dalibor Topic
+   Build cleanups and Kaffe integration.
+ David Daney
+   HttpURLConnection rewrite and improvements.
+ David Gilbert
+   Lots of Free Swing and metal theme additions.
+ David Lichteblau
+   JCL support library global/local reference cleanups.
+ Gael Thomas
+   VMClassLoader boot packages support sugestions.
+ Guilhem Lavaux
+   Configuration, thread and channel fixes and Kaffe integration.
+ Jan Roehrich
+   BasicTreeUI fixes.
+ Jeroen Frijters
+   Serialization fixes, better Proxy support, bug fixes and IKVM integration.
+ Julian Scheid
+   Documentation updates and gjdoc support.
+ Keith Seitz
+   JDWP support.
+ Lillian Angel
+   Lots of Free Swing additions.
+ Mark Wielaard
+   Bug fixes, packaging and release management
+ Martin Cordova
+   Suggestions for better SocketTimeoutException.
+ Michael Koch
+   Configuration fixes.
+ Nicolas Geoffray
+   VMClassLoader and AccessController improvements.
+ Paul Jenner
+   Better -Werror support.
+ Robert Schuster
+   XML and URL, AWT and Free Swing bug fixes
+ Roman Kennke
+   Lots of Free Swing additions.
+ Santiago Gala
+   AccessControlContext fixes.
+ Stuart Ballard
+   RMI constant fixes.
+ Sven de Marothy
+   BMP imageio support, CSS and TextLayout fixes.
+ Thomas Fitzsimmons
+   Lots of imageio framework additions, lots of AWT and Free Swing bug fixes.
+ Tom Tromey
+   Eclipse integration, generics work, lots of bug fixes and gcj integration.  
+ 
+ We would also like to thank the numerous bug reporters and testers!
+ </pre>
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/Makefile gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/Makefile
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/Makefile	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/Makefile	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ ifndef WMK
+   export WMK=wmk
+ endif
+ ifndef WML
+   export WML=wml
+ endif
+ 
+ WML_SRC = $(wildcard *.wml)
+ WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
+ 
+ %.html: %.wml ../include/macros.wml
+ 	$(WML) -o $@ $<
+ #	-rm -f $(patsubst %.wml,%.html,$<)
+ 
+ all : $(WML_OBJS) subdirs
+ 
+ .PHONY : clean
+ clean :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
+ 	-rm -f *.html
+ 
+ .PHONY : subdirs
+ subdirs :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
+ 
+ .PHONY : publish
+ publish : 
+ 	@sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	@sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
+ 	-cp -f *.html $(CLASSPATH_WEBROOT)/announce/
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/announcements.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/announcements.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/announce/announcements.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/announce/announcements.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,25 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:new id=en short>
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="cbj">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="<en>GNU Classpath Annoucements</en>">
+ 
+ <H4><en>Announcements</en></H4>
+ <UL>
+ <LI><createlink url="/software/classpath/announce/20020208.html" name="GNU Classpath Version 0.03"> (2002-02-08)</LI>
+ <LI><createlink url="/software/classpath/announce/20010106.html" name="GNU Classpath Version 0.02"> (2001-01-06)</LI>
+ <LI><createlink url="/software/classpath/announce/20001120.html" name="GNU Classpath Version 0.01"> (2000-11-20)</LI>
+ <LI><createlink url="/software/classpath/announce/19990206.html" name="GNU Classpath Version 0.00"> (1999-02-06)</LI>
+ </UL>
+ 
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/benchmarks.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/benchmarks.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/benchmarks.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/benchmarks.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ #include "include/layout.wml"
+ 
+ <set-var last-modified-author="prk">
+ <subject "GNU Classpath Test and Benchmark Page">
+ 
+ <box>
+ <boxtitle><a name="testing">Classpath::Testing</a></boxtitle>
+ <boxitem>
+ <p>
+ The test framework for GNU Classpath is called 
+ <createlink url="http://sources.redhat.com/mauve/" name="Mauve">.  There 
+ are instructions within the Mauve website on how to download and use Mauve.
+ Writing Mauve tests is the most important thing GNU Classpath developers
+ could do for the project at this time.
+ </p>
+ <p>
+ Java API compatibility testing can be performed using 
+ <createlink url="http://www.kaffe.org/~stuart/japi/"
+ name="japitools">.  Japitools already does
+ full API comparisons but it doesn't have the capability to extract
+ APIs from the documentation - instead, the "japize" tool uses the
+ jode.bytecode library to identify the public members of a given set of
+ packages from the binary jars or zips.  But japitools does separate the
+ API-inspection phase ("japize") from the compatibility-testing phase
+ ("japicompat") so it would be easy to offer an alternative to japize
+ that worked on API documentation.
+ </p>
+ <p>
+ Another method of API compatibility testing is to use <createlink
+ url="http://majestix.ucnet.uoc.gr/~jgeorgal/pub/jdiff.sh"
+ name="jdiff.sh">, at least until this functionality is merged into
+ japitools.
+ </boxitem>
+ 
+ 
+ <boxtitle><a name="benchmarks">Classpath::Benchmarks</a></boxtitle>
+ <boxitem>
+ Many free benchmarks are available. Benchmarks are a good way to test the functionality of a VM and at the same time get results that can be compared.
+ 
+ <table border="0">
+ <tr>
+ 	<th>Name</th><th>Description</th>
+ </tr>
+ <tr>
+ 	<td><createlink name="Ashes" url="http://www.sable.mcgill.ca/ashes/"></td>
+ 	<td>The Ashes benchmark</td>
+ </tr>
+ </table>
+ </boxitem>
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/bugs.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/bugs.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/bugs.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/bugs.wml	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,46 ----
+ #include "include/layout.wml"
+ 
+ <subject "GNU Classpath Bug Reports">
+ 
+ <box>
+ 
+ <boxtitle>GNU Classpath::Bugs</boxtitle>
+ <boxitem>
+ Unfortunately GNU Classpath is not bug free yet.
+ <br>
+ But you can help!
+ <br>
+ If you find a bug please report it here.
+ </boxitem>
+ 
+ <boxtitle>Query</boxtitle>
+ <boxitem>
+ Please first check the following lists:
+ <ul>
+ <li><a href="http://gcc.gnu.org/bugzilla/query.cgi?product=classpath">Query bugs</a></li>
+ <li><a href="http://gcc.gnu.org/bugzilla/buglist.cgi?product=classpath&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=SUSPENDED&bug_status=WAITING&bug_status=REOPENED">All open bugs</a></li>
+ <li><a href="http://gcc.gnu.org/bugzilla/duplicates.cgi?sortby=count&product=classpath">Most Frequently Reported Bugs</a></li>
+ </ul>
+ <p>
+ </boxitem>
+ 
+ <boxtitle>Report</boxtitle>
+ <boxitem>
+ If your bug wasn't in any of the above lists, please
+ <ul>
+ <li><a href="http://gcc.gnu.org/bugzilla/enter_bug.cgi?product=classpath">Report it</a></li>
+ <ul>
+ <p>
+ </boxitem>
+ 
+ <boxtitle>Overview</boxtitle>
+ <boxitem>
+ You can also look at some pretty
+ <ul>
+ <li><a href="http://gcc.gnu.org/bugzilla/reports.cgi?product=classpath&datasets=NEW%3A&datasets=ASSIGNED%3A&datasets=REOPENED%3A&datasets=UNCONFIRMED%3A&datasets=RESOLVED%3A&datasets=VERIFIED%3A&datasets=CLOSED%3A&datasets=FIXED%3A&datasets=INVALID%3A&datasets=WONTFIX%3A&datasets=DUPLICATE%3A&datasets=WORKSFORME%3A">Status Counts</a></li>
+ <li><a href="http://gcc.gnu.org/bugzilla/report.cgi?bug_file_loc_type=allwordssubstr&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=SUSPENDED&bug_status=WAITING&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&cumulate=1&gccbuild_type=allwordssubstr&gcchost_type=allwordssubstr&gcctarget_type=allwordssubstr&keywords_type=allwords&known_to_fail_type=allwordssubstr&known_to_work_type=allwordssubstr&long_desc_type=substring&product=classpath&short_desc_type=allwordssubstr&x_axis_field=component&y_axis_field=bug_status&width=600&height=350&action=wrap&format=table">Component/Status Tables</a></li>
+ </ul>
+ <p>
+ </boxitem>
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/corba.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/corba.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/corba.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/corba.wml	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,37 ----
+ #include "include/layout.wml"
+ 
+ <subject "GNU Classpath CORBA interoperability page">
+ 
+ <box>
+ 
+ <boxtitle>GNU Classpath::Object management group</boxtitle>
+ <boxitem>
+ This page is referenced from the official
+ <a href="http://doc.omg.org/vendor-tags">OMG Vendor tag list</a>,
+ maintained by the <a href = "http://www.corba.org/">OMG</a>. 
+ It is is designed to help programmers debugging interoperation
+ with our ORB. 
+ </boxitem>
+ 
+ <boxtitle>GNU Classpath::CORBA interoperability</boxtitle>
+ <boxitem>
+ <ol>
+ <li><a href="http://developer.classpath.org/mediation/CorbaInteroperability">
+ Interoperability information (system exception minor codes, etc).</a></li>
+ <li><a href="http://developer.classpath.org/doc/">GNU Classpath API Specification</a></li>
+ <li><a href="bugs.html">Bug database.</a></li>
+ <li>GNU Classpath CORBA vs:
+ <a href="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk12-classpath.html">JDK 1.2</a>
+ <a href="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk13-classpath.html">JDK 1.3</a>
+ <a href="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath.html">JDK 1.4</a>
+  (updated nightly)</li>
+ <li><a href="http://www.gnu.org/software/classpath/classpath.html">Project home page</a></li>
+ </ol>
+ Registered information
+ <ul>
+ <li>GNU Classpath Vendor Minor Code Id (VMCID) is 0x47430xxx 
+ ("GC\x00\x00" - "GC\x0f\xff").</li>
+ </ul>
+ </boxitem>
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/cp-tools/Makefile gcc-4.1.0/libjava/classpath/doc/www.gnu.org/cp-tools/Makefile
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/cp-tools/Makefile	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/cp-tools/Makefile	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ ifndef WMK
+   export WMK=wmk
+ endif
+ ifndef WML
+   export WML=wml
+ endif
+ 
+ WML_SRC = $(wildcard *.wml)
+ WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
+ 
+ %.html: %.wml ../include/macros.wml  ../include/layout.wml
+ 	$(WML) -o $@ $<
+ #	-rm -f $(patsubst %.wml,%.html,$<)
+ 
+ all : $(WML_OBJS) subdirs
+ 
+ .PHONY : clean
+ clean :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
+ 	-rm -f *.html
+ 
+ .PHONY : subdirs
+ subdirs :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
+ 
+ .PHONY : publish
+ publish : 
+ 	@sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	@sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
+ 	-cp -f *.html $(CLASSPATH_WEBROOT)/cp-tools/
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/cp-tools/cp-tools.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/cp-tools/cp-tools.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/cp-tools/cp-tools.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/cp-tools/cp-tools.wml	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,68 ----
+ #!wml --include=..
+ 
+ #include "include/layout.wml"
+ 
+ <set-var last-modified-author="mjw">
+ <subject "GNU Classpath Tools">
+ 
+ <box>
+ <boxtitle><a name="Tools">GNU Classpath::Tools</a></boxtitle>
+ <boxitem>
+ GNU Classpath Tools is a collection of tools for programmers using the
+ GNU Classpath library including a byte code disassembler, a JNI C header
+ file generator, serial version uid calculator, character converter, remote
+ method invocation tools and a documentation generation framework for java
+ source files. Plus tools specific to GNU Classpath development for generating
+ locale, currency and timezone information.
+ </boxitem>
+ </box>
+ 
+ <box>
+ <boxtitle><a name="Programs">GNU Classpath::Tools::Programs</a></boxtitle>
+ <boxitem>
+ GNU Classpath Tools contains the following tools. Some have their own
+ page describing them in more detail:
+ <ul>
+ <li><b>gjdoc</b>
+     A documentation generation framework for java source files.</li>
+ <li><b><createlink url="cp-tools/texidoclet.html" name="texidoclet"/></b>
+     A "doclet" for converting comments into GNU TexInfo source.</li>
+ <li>RMI tools such as rmic and rmiregistry.</li>
+ <li>Miscellaneous tools such as javap, javah, serialver and native2ascii/</a>
+ <li>GNU Classpath specific tools localgen and currencygen.</li>
+ </lu>
+ </boxitem>
+ </box>
+ 
+ <box>
+ <boxtitle><a name="Development">GNU Classpath::Tools::Downloads</a></boxtitle>
+ <boxitem>
+ At the moment there are only official releases of gjdoc on
+ <createlink url="ftp://ftp.gnu.org/gnu/classpath/" name="ftp.gnu.org"/>.
+ All other tools are available from CVS from the savannah project page below.
+ </boxitem>
+ </box>
+ 
+ <box>
+ <boxtitle><a name="Development">GNU Classpath::Tools::Development</a></boxtitle>
+ <boxitem>
+ GNU Classpath Tools is part of the GNU Classpath project which is hosted at
+ Savannah. The project page is
+ <createlink url="http://savannah.gnu.org/projects/classpath/"/>.
+ From there you can submit bug reports, check the latest news, find tasks
+ yet to be done, and most importantly submit patches!
+ <p>
+ There is one general discussion list for Classpath-tools. You may
+ <createlink url="" name="subscribe"/> to the mailing list via the web.
+ However, you may also just send an email message with a subject of "subscribe"
+ to <createlink url="mailto:cp-tools-discuss-request@gnu.org"/>.
+ You may <createlink url="" name="unsubscribe"/> from the mailing list via the
+ web as well.
+ </boxitem>
+ 
+ <boxtitle><a name="License">GNU Classpath::Tools::Distribution Terms</a></boxtitle>
+ <boxitem>
+ All GNU Classpath Tools are distributed under the terms of the
+ <createlink url="/copyleft/gpl.html" name="GNU General Public License">.
+ </boxitem>
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/cp-tools/texidoclet.html gcc-4.1.0/libjava/classpath/doc/www.gnu.org/cp-tools/texidoclet.html
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/cp-tools/texidoclet.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/cp-tools/texidoclet.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,597 ----
+ <!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+ <HTML>
+ <HEAD>
+ <TITLE>GNU texidoclet - GNU Project - Free Software Foundation (FSF)</TITLE>
+ <A HREF=""></A>
+ </HEAD>
+ <BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
+ <H1>GNU texidoclet</H1>
+ 
+ <h2>Table Of Contents</h2>
+ <ol>
+   </li><li><a href="#Introduction">Introduction</a> 
+ 
+   <ul>
+     <li><a href="#whatis">What is TexiDoclet?</a> 
+     </li><li><a href="#whyuse">Why use the info format?</a> 
+     </li><li><a href="#howstart">How do I get started?</a> 
+   </li></ul>
+ 
+   </li><li><a href="#Requirements">Requirements</a> 
+ 
+   </li><li><a href="#Download">Download</a> 
+ 
+   </li><li><a href="#Installation">Installation</a> 
+ 
+   </li><li><a href="#configure">Configure</a> 
+ 
+   </li><li><a href="#Usage">Usage</a> 
+   </li><li><a href="#Bugs">BUGS</a> 
+   </li><li><a href="#History">History</a> 
+   </li><li><a href="#Todo">TODO</a> 
+   </li>
+ </ol>
+ 
+ <hr>
+ 
+ <a name="Introduction"></a> <h2>1. Introduction</h2> 
+ 
+ <h3><a name="whatis"></a>What is GNU TexiDoclet?</h3>
+ 
+ GNU TexiDoclet is a system for creating <b>info</b> pages from Java
+ source documentation. It is part of the <a
+ href="/software/classpath/">GNU Classpath</a> project, however it can
+ also be used as standalone doclet used with any Java-compatible
+ platform.
+ 
+ <p>You can use TexiDoclet to create API documentation in <b>info</b>
+ format for any set of Java packages (including classpath). The latter
+ will reproduce the full Java API documentation for use on text-only
+ displays, or for integrating it into the GNU Emacs online help
+ facility.  </p><p>TexiDoclet also includes an Elisp package which adds
+ context-sensitive help features to GNU Emacs. 
+ </p>
+ 
+ <table bgcolor="#cccccc" border="0" cols="1" width="100%">
+   <tbody>
+   <tr>
+     <td><b>Note:</b> This is alpha software. You should not use
+       TexiDoclet in a production environment, because it has not yet
+       been tested for reliability. Also, see <a href="#Bugs">Bugs</a>
+       for a list of currently missing
+       features.</td></tr></tbody></table> <h3><a name="whyuse"></a>Why
+       use the <b>info</b> format?</h3>Although the <b>info</b> format
+       is raw text with nearly no formatting or highlighting, using the
+       <b>info</b> version of the Java API documentation can have a
+       number of advantages even on graphical displays - especially if
+       you are using GNU Emacs:
+ 
+ <ul>
+   <li>Because it is text-only, <b>info</b> is pretty fast. 
+   </li><li>You can easily navigate through <b>info</b> pages using only the keyboard 
+   - which doesn't hold true for most HTML browsers available today, where you 
+   always have to grab the mouse or tab the focus. 
+   </li><li>You can use all the powerful Emacs facilities to browse the documentation 
+   (e.g. incremental search, regular expressions, bookmarks). 
+   </li><li>You can copy documentation fragments (like the definition of a method you 
+   want to overload) easily using the keyboard, again having all Emacs facilities 
+   right at hand, such as the ring buffer. 
+   </li><li>You have no frames in <b>info</b>, but you can use the Speedbar contained 
+   in recent Emacs distributions for the same purpose [not tested as yet].
+   </li></ul>
+ 
+ <h3><a name="howstart"></a>How do I get started?</h3>
+ <ul>
+   <li>Check the <a href="#Requirements">Requirements</a> 
+   section and download/install any missing tools. 
+   </li><li><a href="#Download">Download</a> 
+   and <a href="#Installation">unpack</a> 
+   the TexiDoclet package. 
+   </li><li>See section <a href="#configure">Configure</a> 
+   for further instructions. </li></ul>
+ 
+ <h3>Thanks!</h3>
+ <p>TexiDoclet was originally written as a standalone doclet by <a
+ href="http://savannah.gnu.org/users/julian/">Julian Scheid</a> and was
+ contributed to the GNU Project as part of GNU Classpath.</a>
+ </p>
+ 
+ 
+ <hr>
+ 
+ <a name="Requirements"></a>
+ 
+ <h2>2. Requirements</h2>In order to use TexiDoclet, you need the
+ following software installed:
+ 
+ <ul>
+   <li>A Java platform 1.2 or better. The intention is to be able have
+   TexiDoclet work first and foremost with <a
+   href="/software/classpath/">GNU Classpath</a> and other completely
+   free toolchains (<em>with <a href="gjdoc.en.html">gjdoc</a> we are
+   99% there!</em>) although it can be used with non-free VMs.</li>
+ 
+   <li>GNU Make and GNU makeinfo. Note: makeinfo is contained in the GNU
+   texinfo package. </li>
+ 
+   <li>A Unix environment: 
+   <ul>
+     <li><tt>bash</tt> and the standard commands like <tt>cp</tt> are essential 
+     </li><li><tt>which</tt> and <tt>awk</tt> are required for checking the setup 
+     </li><li><tt>gzip</tt> is used to compress the <b>info</b> pages. </li>
+   </ul>
+   
+ <!--
+   </li><li>The Java Community source code, if you want to reproduce
+   documentation for the Java core API. <strong>Note: this is
+   <em>not</em> distributed with TexiDoclet because it is released
+   under a non-free software license, the SCSL, which is incompatible
+   with the GNU GPL.  If you wish to create the Java API documentation
+   you must download and agree to it's terms (we cannot do
+   this).</strong></li>
+ -->
+ 
+   </ul>
+ 
+   Makeinfo is required to convert the texinfo source into the
+   <b>info</b> format. If you only need the texinfo source, you don't
+   need makeinfo. Unix users will probably find a makeinfo preinstalled
+   on their system.  Windows users can find free precompiled binaries
+   on the Internet (look for the Texinfo package). <br> 
+ 
+ <table bgcolor="#cccccc" border="0" cols="1" width="100%">
+   <tbody>
+   <tr>
+     <td><b>Note:</b> There are some 16-bit makeinfo binaries available online, 
+       but they won't work. You need to look for an up-to-date 32-bit 
+   binary.</td></tr></tbody>
+ </table>
+ 
+ <p>GNU Make is required because if you want to generate the full
+ standard Java API documentation, each package must be processed
+ individually. The Makefile works with patterns to process the packages
+ individually and merge the results.</p>
+ 
+ <p>Again, Unix users will find Make preinstalled. Windows users can
+ find precompiled binaries on the Internet for free. <br> 
+ </p>
+ 
+ <table bgcolor="#cccccc" border="0" cols="1" width="100%">
+   <tbody>
+   <tr>
+       <td><b>Note:</b> Use only GNU Make - you will probably get into
+       trouble if you try to use a different Make tool, because the
+       TexiDoclet Makefile uses some GNU-specific
+       features.</td></tr>
+       </tbody>
+ </table>
+ 
+ <!--
+ <p>You need the Java community source code if you want to reproduce the full 
+ core API documentation. Get it from <a href="http://developer.java.sun.com/">Sun's Java Developer Website</a>. Having 
+ the source at hand is generally recommended. <br>  
+ </p>
+ -->
+ 
+ <table bgcolor="#cccccc" border="0" cols="1" width="100%">
+   <tbody>
+   <tr>
+     <td><b>Tip:</b> Configuring TexiDoclet is much easier if you make sure 
+       that all utilities (including the Java tools) are on your system search 
+       path.</td></tr></tbody></table>
+ 
+ <p>
+ TexiDoclet has been tested on the following systems:
+ </p><p>
+ 
+ </p><table border="1" cols="3" width="100%">
+   <tbody>
+   <tr>
+     <td><b>Operating System</b></td>
+     <td><b>JDK</b></td>
+     <td><b>Other</b></td></tr>
+ 
+ <!-- Windows untested at the moment
+   <tr>
+     <td>Windows 98</td>
+     <td>Sun JDK 1.3 RC2</td>
+     <td>Cygwin B-20 (GNU bash 2.02.1) <br>GNU Make 3.78.1 <br>GNU makeinfo 
+       1.68 (GNU texinfo 3.12)  <br>GNU Emacs 20.6.1</td>
+  </tr>
+ -->
+   <tr>
+     <td>Linux kernel 2.2.16 on Intel / Red Hat 7.0 distribution</td> 
+     <td>Sun JDK 1.2.2</td> 
+ 
+     <td>GNU bash 2.04.11 <br>GNU Make 3.79.1 <br>GNU makeinfo 4.0
+     <br>GNU Emacs 20.3.1</td></tr>
+ 
+     <tr>
+     <td>Linux kernel 2.2.9-27mdk / Mandrake distribution 
+     <em>(thanks to Owen Lydiard for the report)</em></td>
+     <td>JDK 1.3</td>
+     <td> GNU make 3.77<br>
+     makeinfo (GNU texinfo) 4.0<br>
+     GNU Emacs 20.3.1</td>
+     </tr>
+ 
+   <tr>
+ 
+     <td colspan="3">As of the date of this document, no other
+       configurations have been tested.  If you install TexiDoclet on a
+       different system, be it successful or not, please contact the <a
+       href="http://savannah.gnu.org/project/memberlist.php?group_id=508">developers</a>
+       so that this list can be extended.</td></tr></tbody>
+ </table>
+ 
+ 
+ <h3>3.1 Tool download locations for Windows users [untested]</h3>
+ 
+ <p>Although the present version of TexiDoclet has not been tested on
+ Windows, a previous incarnation was working using the following:
+ Windows 98 / Sun JDK 1.3 RC2 / Cygwin B-20 (GNU bash 2.02.1) / GNU
+ Make 3.78.1 / GNU makeinfo 1.68 (GNU texinfo 3.12) / GNU Emacs
+ 20.6.1</p>
+ 
+ <p>Here are a few URLs for getting the Windows ports of the required
+ software:</p>
+ 
+ <ul>
+ <li><a href="http://sourceware.cygnus.com/cygwin/">The Cygwin project</a> offers the most
+     sophisticated port of Unix utilities for free download. Their "full" package 
+     includes a Bash and a full-featured Unix environment (including <tt>grep</tt>, <tt>less</tt>, <tt>awk</tt> and other 
+     useful commands.) With regard to TexiDoclet, only GNU <tt>make</tt> and <tt>makeinfo</tt> 
+     are missing.
+ 
+ </li><li><a href="http://www.tertius.com/projects/library/#cygwin32">tertius.com</a> contains a 
+     link to a Windows port of the texinfo package, 
+     including the required <tt>makeinfo</tt> tool. It also includes a standalone <b>info</b> viewer.
+ 
+ </li>
+ 
+ <li>Refer to the <a
+ href="http://www.gnu.org/software/make/make.html">GNU Make
+ homepage</a> and to <a
+ href="http://ftp.gnu.org/pub/gnu/">http://ftp.gnu.org</a> for
+ downloading the GNU Make binaries for Windows.  </li></ul>
+ 
+ <hr> 
+ 
+ <a name="Download"></a>
+ 
+ <a name="Download">
+ <h2>3. Download</a></h2>
+ 
+ The old (pre-GNU) version of TexiDoclet is still located at our old
+ development site on sourceforge and is available from <a
+ href="http://sourceforge.net/project/showfiles.php?group_id=7984">SourceForge</a>.
+ This (old) 0.5 version is provided purely as a convenience, and will
+ soon be replaced by a new version .  Subsequent releases will be made
+ available at via the GNU ftp site (<a
+ href="http://ftp.gnu.org/pub/gnu/">http://ftp.gnu.org/pub/gnu/).</a>
+ 
+ <p>The package includes an autoconfiguration system, the full source
+ code, and additional Emacs add-ons.  It unpacks into a separate
+ directory named "<tt>texidoclet-(version)</tt>".  </p>
+ 
+ <p>If you want to take a look at TexiDoclet's output first, here is a
+ <a
+ href="http://texidoclet.sf.net/texidoclet-api-info-0.5.tar.gz">sample
+ (32 K gzipped tar)</a>.  It's the converted `info' docs for the
+ TexiDoclet API (please note that the package name
+ <tt>gnu.texidoclet</tt> is now obsoleted by
+ <tt>gnu.classpath.tools.doclets.texidoclet</tt>) itself.  [To view run
+ the standalone <tt>info</tt> viewer: <tt>info -f
+ texidoclet.info</tt>.]
+ </p>
+ 
+ <hr> 
+ 
+ <a name="Installation"></a>
+ 
+ <h2>4. Installation</h2>
+ 
+ 
+ <p><strong>Please note the following instructions relate purely to the
+ old 0.5 version of GNU texidoclet, which is currently the only
+ release</strong></p>
+ 
+ <p>In order to install TexiDoclet, you should unpack it to a location
+ of your choice. TexiDoclet will unpack into a separate subdirectory,
+ which contains the following files and directories:</p>
+ 
+ <table>
+   <tbody>
+   <tr>
+     <td><tt>Makefile </tt></td>
+     <td></td>
+     <td>the TexiDoclet main Makefile.</td></tr>
+   <tr>
+     <td><tt>COPYING </tt></td>
+     <td> </td>
+     <td>the GNU public license (Version 2)</td></tr>
+   <tr>
+     <td><tt>etc/ </tt></td> <td></td> 
+ 
+     <td>contains Makefile template for generating the docs for Sun's
+     code.</td></tr>
+   <tr>
+     <td><tt>lisp/ </tt></td>
+     <td></td>
+     <td>contains add-ons for enabling context-sensitive help in Emacs.</td></tr>
+   <tr>
+     <td><tt>source/ </tt></td>
+     <td></td>
+     <td>contains the full Java source code for TexiDoclet</td></tr>
+ </tbody></table>
+ 
+ <p>After you have unpacked the archive, you should configure TexiDoclet as 
+ described in the following section, <a href="#configure">Configure</a>.</p>
+ 
+ <hr>
+ 
+ <a name="configure"></a>
+ 
+ <h2>6. Configure</h2>
+ 
+ <p><strong>Please note the following instructions relate purely to the
+ old 0.5 version of GNU texidoclet, which is currently the only
+ release</strong></p>
+ 
+ [Taken from the <tt>README</tt> file in the distribution]
+ 
+ <pre>
+ Installation:
+ ============
+ 
+ 1. The usual GNU autoconf procedure applies: 
+ 
+    ./configure
+    make
+ 
+    Read the generic INSTALL file for the details.
+ 
+ 2. Extra texidoclet-specific options for `configure':
+ 
+    `--with-jdkdir=DIR'      
+ 
+     DIR specifies the location of the JDK (if it's not on the PATH)
+ 
+    `--with-javadocjar=FILE'  
+ 
+    Use FILE as jar file with javadoc support.  
+ 
+ 3. This will generate the jar file in source/TexiDoclet.jar.  You can
+    choose to run "make install" at this point, although this is not,
+    strictly speaking, necessary.
+ 
+ 4.  To see an example of the invocation of TexiDoclet, type "make
+     check".  This will build the `info' docs for texidoclet itself in
+     the "source" subdirectory.
+ </pre>
+ 
+ <hr>
+ 
+ <a name="Usage"></a>
+ 
+ <h2>8. Usage</h2>
+ 
+ <p><strong>Please note the following instructions relate purely to the
+ old 0.5 version of GNU texidoclet, which is currently the only
+ release</strong></p>
+ 
+ [Taken from the <tt>README</tt> file in the distribution]
+ 
+ <pre>
+ Usage:
+ =====
+ 
+ 1.  TexiDoclet now works like any other doclet [Consult
+     http://java.sun.com/j2se/javadoc/ for further information on
+     Javadoc and the Javadoc API], it can be invoked with default
+     options by merely supplying the path the doclet and the doclet
+     invocation class (which is `gnu.texidoclet.Driver'):
+ 
+ javadoc -docletpath TexiDoclet.jar -doclet gnu.texidoclet.Driver &lt;filename&gt; ...
+ 
+ 2.  It also accepts all the Standard Sun doclet options, in addition
+     to some TexiDoclet-specific ones, which are listed if you invoke
+     javadoc without any Java source files or packages.  Here are those
+     options:
+ 
+ -d &lt;directory&gt;            Destination directory for output files
+ -tocbase         &lt;base&gt;   Prefix for all package-level texi files (default 'packages'
+ -indexbase       &lt;base&gt;   Prefix for package index
+ -allclassesbase  &lt;base&gt;   Prefix for all class list
+ -treebase        &lt;base&gt;   Prefix for tree output
+ -etagsname       &lt;base&gt;   Prefix for package etags
+ -tocheader       &lt;text&gt;   Header for each texi file
+ -tocfooter       &lt;text&gt;   Footer for each texi file
+ -copyrightnotice &lt;text&gt;   Copyright information on each texi page
+ -wordwrappos     &lt;chars&gt;  Number of columns at which to wrap
+ -firstlineindent &lt;chars&gt;  Number of columns to indent
+ -includeauthor            Include author information?
+ -fulltreealignment &lt;type&gt; 'replace' or null
+ -heritagealignment &lt;type&gt; 'replace' or null
+ 
+     Most of these options are self-explanatory and all have
+     `reasonable' defaults, and are in the process of being more fully
+     documented.
+ 
+ 3.  To generate the `info' documentation, invoke `makeinfo' on the
+     resultant `.texi' file.  See the documentation accompanying your
+     texinfo installation for more details.  [Note you can use texinfo
+     to also generate printed and HTML documentation from the `.texi'
+     files, but note that there are more specialised doclets for that
+     purpose].
+ </pre>
+ 
+ <hr>
+ 
+ <a name="Bugs"></a>
+ 
+ <h2>7. Bugs</h2>
+ 
+ <p><strong>Please note the following instructions relate purely to the
+ old 0.5 version of GNU texidoclet, which is currently the only
+ release</strong></p>
+ 
+ [Taken from <tt>BUGS</tt> in the distribution]
+ 
+ <pre>Known Bugs, or "features not yet implemented", in roughly the order
+ they will be attacked. New versions of this software implementing all
+ or part of the missing features can be expected soon.
+ 
+ * No cross-links for parameter types, return types, and thrown exceptions. 
+ 
+ * No support for {@link}. 
+ 
+ * Not very configurable at the time. 
+ 
+ * Various small improvements on Info page layout pending. 
+ 
+ * Elisp scripts for context sensitive help are preliminary. (Can
+   anyone help me out here? I am new to Lisp and would need some
+   advice.)
+ 
+ * Autoconf support for the Cygnus environment (simply untested at the
+   moment).</pre>
+ 
+ <hr>
+ 
+ <a name="History"></a>
+ 
+ <h2>8. History</h2>
+ 
+  [Taken from <tt>NEWS</tt> in the distribution]
+ 
+ <pre>
+ 
+ 2002-01-24 -- CVS
+ 
+ * now a GNU project (part of classpath)
+ * all copyright changed to FSF.
+ * distribution now based at http://savannah.gnu.org/projects/cp-tools/
+ 
+ 2001-04-02 -- 0.5
+ 
+ * complete overhaul of distribution
+ * distribution now based at SourceForge.
+ * rewrote Makefile system to use GNU automake/autoconf
+ * added a new Driver class to generate the .texi in one pass
+ 
+ 2000.04.02 -- 0.4.1  
+ 
+ * features full information - all documentation nodes are implemented 
+ * added "implements" information 
+ * added post-processing to include information about derived and
+   implementing classes.
+ * removed self-reference in heritage tree 
+ * improved node reference formatting ("(package) class" instead of
+   "(package)class")
+ * added switch to control inclusion of author information
+ * added caption to index, all classes, and full tree node 
+ * added "abstract" keyword and class prototype to class node 
+ * added serialization node 
+ * added ability to split the full index into 27 parts (A-Z|_) 
+  (not configurable yet)
+ 
+ 2000.04.01 -- 0.3.3
+ 
+ * index is now sorted case-insensitive 
+ * major revision of configuration file structure 
+ * added preliminary version of inherited fields and methods 
+ * took preparations for adding derivation information after generating
+   the texi files.
+ 
+ 2000.04.01 -- 0.3.2
+ 
+ * improved front page layout 
+ * added copyright messages as requested by Sun Microsystems Inc. so
+   that the core API docs
+ * can be distributed in converted format. 
+ * removed heritage chart from interfaces 
+ * added "extends" line to class node 
+ * added @author tag to all nodes 
+ 
+ 2000.03.30 -- 0.3.1
+ 
+ * added Interfaces, Exceptions and Errors to package node 
+ * fixed bug: bad layout when HTML paragraph ends with &lt;br&gt; 
+ * added @deprecated and @since info to all nodes 
+ * added support for multiple source paths 
+ 
+ 2000.03.29 -- 0.2.1
+ 
+ * fixed bug: class node only displayed first description line. 
+ * added @since tag for all nodes. 
+ * fixed bug: generated text displayed bogus texi tags. 
+ * corrected/finished full tree layout. 
+ * fixed bug: field prototype was missing. 
+ * &lt;sup&gt; is now translated to ^ (caret) for denoting powers. 
+ * Method listing in class node is now sorted. 
+ * added "see also" for classes 
+ 
+ 2000.03.28 -- 0.1.2
+ 
+ * Source code structure significantly improved. 
+ * added "all classes", full index, and full tree. 
+ * added preliminary emacs .el-script for context-sensitive help. 
+ 
+ 2000.03.27 -- 0.1.1
+ 
+ * Initial non-public pre-alpha release. 
+ </pre>
+ 
+ <hr>
+ 
+ <a name="Todo"></a>
+ 
+ <h2>9. TODO</h2>
+ 
+ [Taken from <tt>TODO</tt> in distribution]
+ 
+ <pre>
+ * Check bug list. 
+ 
+ * Improve source code documentation and this page.
+ 
+ * Check Speedbar compatibility.
+ 
+ * Look for a way to add a link to the corresponding Java source code
+   into all Info nodes.
+ 
+ * Same for original HTML documentation (using browse-url)
+ 
+ * Perhaps integrate XML/XSL support when it becomes part of the Java
+   standard. Currently, the user would have had to download a package
+   of some MB and install it, if an XML library would have been
+   employed for TexiDoclet.
+ </pre>
+ 
+ <BR>
+ <HR>
+ 
+ Return to <A HREF="/home.html">GNU's home page</A>.
+ <P>
+ Please send FSF &amp; GNU inquiries &amp; questions to
+ <A HREF="mailto:gnu@gnu.org"><EM>gnu@gnu.org</EM></A>.
+ There are also <A HREF="/home.html#ContactInfo">other ways to
+ contact</A> the FSF.
+ <P>
+ Please send comments on these web pages to
+ <A HREF="mailto:webmasters@www.gnu.org"><EM>webmasters@www.gnu.org</EM></A>,
+ send other questions to
+ <A HREF="mailto:gnu@gnu.org"><EM>gnu@gnu.org</EM></A>.
+ <P>
+ Copyright (C) 1999, 2005 Free Software Foundation, Inc.,
+ 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ <P>
+ Verbatim copying and distribution of this entire article is
+ permitted in any medium, provided this notice is preserved.<P>
+ Updated:
+ 
+ $Date: 2005/07/02 20:32:08 $ by $Author: mark $
+ <HR>
+ </BODY>
+ </HTML>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/docs/Makefile gcc-4.1.0/libjava/classpath/doc/www.gnu.org/docs/Makefile
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/docs/Makefile	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/docs/Makefile	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ SUBDIRS=
+ 
+ ifndef WMK
+   export WMK=wmk
+ endif
+ ifndef WML
+   export WML=wml
+ endif
+ 
+ TEXI_SRC	:= $(wildcard ../../*.texinfo)
+ VPATH = ../..
+ WML_SRC = $(patsubst ../../%, %, $(TEXI_SRC:.texinfo=.html)) $(wildcard *.wml)
+ WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
+ 
+ %.html : %.texinfo
+ 	texi2html -monolithic --ifinfo --ifhtml $<
+ #	texi2html -monolithic $<;
+ #	cp $< $@
+ #	echo '#!wml --include=..' > $@
+ #	sed -e 's/<HTML>/\^\#use wml::std::lang\^\#use wml::fmt::isolatin\^\#use wml::std::case global=upper\^<lang:new id=en short>\^<lang:star:slice:>\^\#include <include\/macros.wml>\^<HTML>/' -e 's/<BODY>/<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">/' -e 's/<\/BODY>/<footer>\^<\/BODY>/' $(subst .wml,.html,$(@)) > $@.sed;
+ #	tr "\\^" "\n" < $@.sed >> $@
+ #	-rm -f $(subst .wml,.html,$(@)) $@.sed
+ 
+ %.html: %.wml ../include/macros.wml  ../include/layout.wml
+ 	$(WML) -o $@ $<
+ #	-rm -f $(patsubst %.wml,%.html,$<)
+ 
+ .PHONY : all
+ all : $(WML_OBJS) subdirs
+ 
+ .PHONY : clean
+ clean :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
+ 	-rm -f *.html
+ 	-rm -f hacking.wml vmintegration.wml
+ 
+ .PHONY : subdirs
+ subdirs :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
+ 
+ .PHONY : publish
+ publish : 
+ 	@sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	@sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
+ 	-cp -f *.html $(CLASSPATH_WEBROOT)/docs/
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/docs/docs.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/docs/docs.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/docs/docs.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/docs/docs.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,37 ----
+ #!wml --include=..
+ 
+ #include "include/layout.wml"
+ 
+ <subject "GNU Classpath Documentation">
+ 
+ <box>
+ <boxtitle>Classpath::Legal Information</boxtitle>
+ 
+ <boxitem>
+ <blockquote>
+   <createlink url="license.html#documentation" name="Documentation Redistribution Policy"><br/>
+   <createlink url="license.html" name="Copyright and License Terms"><br/>
+ </blockquote>
+ 
+ </boxitem>
+ 
+ <boxtitle>Classpath::API & Language Documentation</boxtitle>
+ <boxitem>
+ <blockquote>
+   <createlink url="http://developer.classpath.org/doc/" name="GNU Classpath API Specification"> 
+ </blockquote>
+ 
+ </boxitem>
+ 
+ <boxtitle>Classpath::Developer's Documentation</boxtitle>
+ 
+ <boxitem>
+ <blockquote>
+   <createlink url="docs/hacking.html" name="GNU Classpath Hacker's Guide"><br/>
+   <createlink url="docs/vmintegration.html" name="Virtual Machine Integration Guide"><br/>
+   <createlink url="http://developer.classpath.org/mediation/" name="GNU Classpath Wiki"><br/>
+ </blockquote>
+ </boxitem>
+ 
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/docs/jikesrvm.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/docs/jikesrvm.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/docs/jikesrvm.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/docs/jikesrvm.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:new id=en short>
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="<mjw>">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath and Jikes RVM">
+ <en>
+ <p>
+ </p>
+ 
+ <H4>Steps to use Jikes RVM and GNU Classpath on GNU/Linux</H4>
+ <OL>
+   <LI>
+     Install jikes-1.18 on your machine, if you do not already have it.
+     Jikes can be retrieved from <createlink url="http://oss.software.ibm.com/developerworks/opensource/jikes/" name="http://oss.software.ibm.com/developerworks/opensource/jikes/">
+   </LI>
+   <LI>
+     Check out the GNU Classpath head into some directory (hereinafter 
+     called &lt;classpathdir&gt;)
+     <UL>
+       <LI>CVS root for GNU Classpath is :psevser:anoncvs@subversions.gnu.org:/cvsroot/classpath</LI>
+       <LI>Given that root, in &lt;classpathdir&gt; do `cvs checkout classpath'</LI>
+     </UL>
+   </LI>
+   <LI>
+     Build and configure GNU Classpath
+     <UL>
+       <LI>Do the aclocal; autoheader; automake; autoconf thing in &lt;classpathdir&gt;/classpath (see HACKING for details)</LI>
+       <LI>Make a directory '&lt;classpathdir&gt;i686' (i.e. &lt;classpathdir&gt; now contains a 'classpath' and a 'i686')</LI>
+       <LI>In i686, do a '../classpath/configure --enable-jni --with-jikes'</LI>
+       <LI>In i686, do 'make'</LI>
+     </UL>
+     <p>
+       You can, of course, use your own classpath tree if you have one.
+       But you must make an 'i686' directory parallel to the top of your tree,
+       and do configure there as specified above.
+     </p>
+   </LI>
+   <LI>Download Jikes RVM into some directory (hereinafter &lt;rvmroot&gt;)
+     <UL>
+       <LI>:pserver:anoncvs@www-124.ibm.com:/usr/cvs/jikesrvm</LI>
+       <LI>Given that root, in &lt;rvmroot&gt;, do 'cvs checkout rvm'</LI>
+     </UL>
+   </LI>
+   <LI>
+     Edit &lt;rvmroot&gt;/rvm/config/i686-pc-linux.eb to reflect your system.
+     Everything should be fine, except CLASSPATH_SRC, which should become 
+     &lt;classpathdir&gt;
+   </LI>
+   <LI>
+     Set the following environment variables (bash style below, 
+     mutatis mutandum)<br>
+     <pre>
+       export RVM_ROOT=&lt;rvmroot&gt;
+       export RVM_HOST_CONFIG=&lt;rvmroot&gt;/rvm/config/i686-pc-linux.eb
+       export RVM_TARGET_CONFIG=&lt;rvmroot&gt;/rvm/config/i686-pc-linux.eb
+       export RVM_BUILD=&lt;some directory that can be trashed or created&gt;
+       export PATH=&lt;rvmroot&gt;/rvm/bin:${PATH}
+     </pre>
+   </LI>
+   <LI>
+     Build Jikes RVM
+     <UL>
+       <LI>jconfigure -D RVM_WITH_GNU_CLASSPATH=1 BaseBaseSemiSpace</LI>
+       <LI>cd $RVM_BUILD</LI>
+       <LI>./jbuild</LI>
+     </UL>
+   </LI>
+ </OL>
+ 
+ <p>
+ Many variations are possible.  Be warned that BaseBaseSemiSpace instructs 
+ jconfigure to prepare a version of JikesRVM that is slow to run but quick
+ to build.  After verifying that that works, you may want to try 
+ FastAdaptiveSemiSpace instead (just change the last argument to jconfigure;
+ you will probably want to change RVM_BUILD so that the FastAdaptive image 
+ does not destroy the BaseBase one).  That will prepare a Jikes RVM version 
+ that takes much longer to build (~25 minutes on a fast machine) but will run
+ programs much faster.  Also be warned that you currently need rather a 
+ lot of memory to build the FastAdaptiveSemiSpace image; recommended at least
+ 512MB.
+ </p>
+ <p>
+ If you have problems, refer to specific install documentation for each 
+ project.  Thank you to Julian Dolby for providing these instructions.
+ </p>
+ <ul>
+ <li><createlink url="http://www-124.ibm.com/developerWorks/opensource/jikesrvm/" name="Jikes RVM"></li>
+ </ul>
+ </en>
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/docs/orp.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/docs/orp.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/docs/orp.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/docs/orp.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ #!wml --include=..
+ 
+ #use wml::std::page
+ #use wml::std::lang
+ #use wml::fmt::isolatin
+ #use wml::std::case global=upper
+ 
+ <lang:new id=en short>
+ <lang:star:slice:>
+ 
+ <set-var last-modified-author="<mjw>">
+ 
+ #include <include/macros.wml>
+ 
+ <header title="GNU Classpath and ORP">
+ <en>
+ <p>
+ The Open Runtime Platform (<link
+ url="http://orp.sourceforge.net/" name="ORP">) provides a
+ covenient and simple platform for both using and testing GNU
+ Classpath.  With the release of ORP 1.0.9, GNU Classpath's native
+ libraries are supported out of the box. 
+ </p>
+ 
+ <H4>Steps to use ORP+GNU Classpath on GNU/Linux</H4>
+ <p>
+ Example assumes ORP 1.0.9, see above.  In the example, GNU Classpath sources
+ are in ~/src/classpath/.
+ </p>
+ <UL>
+   <LI>Obtain <createlink url="http://sourceforge.net/projects/orp/" 
+        name="ORP"> from the Sourceforge project page</LI>
+   <OL>
+     <LI><tt>wget
+     http://prdownloads.sourceforge.net/orp/orp-1.0.9.tgz</tt></LI>
+     <LI><tt>tar -xzvf orp-1.0.9.tgz</tt></LI>
+   </OL>
+   <LI>On some systems you might need to apply a patch to work around
+   gcc compile problems</LI>
+   <OL>
+     <LI><tt>cd orp-1.0.9</tt></LI>
+     <LI><tt>patch -p1 < ~/src/classpath/resource/orp-1.0.9.patch</tt></LI>
+   </OL>
+   <LI>Build ORP</LI>
+   <OL>
+     <LI><tt>make NON_ORP_NATIVE_LIBS=-DNON_ORP_NATIVE_LIBS dbg</tt></LI>
+   </OL>
+ </UL>
+ <p>
+ ORP should now be built and ready, orp-1.0.9/mains/orp/Linux/dbg/orp.
+ </p>
+ <H4>Using ORP+GNU Classpath on GNU/Linux</H4>
+ <p>
+ ORP needs to load shared libraries and the class library bytecode.
+ The recommended method is to use the environment variable
+ LD_LIBRARY_PATH to provide a colon separated list of directories in
+ which to look for GNU Classpath's shared libraries.  The example below
+ assumes the user built and installed GNU Classpath without modifing
+ the default prefix.
+ </p>
+ <UL>
+   <LI>Set the LD_LIBRARY_PATH variable (assumes Bash shell)</LI>
+   <OL>
+     <LI><tt>export LD_LIBRARY_PATH=/usr/local/classpath/lib/classpath</tt></LI>
+   </OL>
+ </UL>
+ <UL>
+   <LI>Set the CLASSPATH variable (ORP doesn't yet use this but it
+   makes the command line easier).</LI>
+   <OL>
+     <LI><tt>export CLASSPATH=/usr/local/classpath/share/classpath/:.</tt></LI>
+   </OL>
+ </UL>
+ <UL>
+   <LI>Running HelloWorld with ORP</LI>
+   <OL>
+     <LI>Create a <tt>HelloWorld.java</tt> file and compile to a class file
+     with <tt>jikes</tt> or <tt>gcj -C</tt></LI>
+     <LI><tt>orp-1.0.9/mains/orp/Linux/dbg/orp -swapjit 0 1 -classpath
+     $CLASSPATH HelloWorld</tt></LI>
+   </OL>
+ </UL>
+ <p>
+ ORP contains two JITs at this time.  By default ORP uses a
+ so-called JIT 3 and for some things it appears to have more problems
+ than when using JIT 1.  This is the reasoning behind adding the
+ -swapjit 0 1 argument to ORP.  ORP does not have the ability at this
+ time to execute raw bytecode and must use one of these two JIT
+ compilers.
+ </p>
+ </en>
+ <footer>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/19990206.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/19990206.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/19990206.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/19990206.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,128 ----
+ #!wml --include=..
+ 
+ <set-var last-modified-author="cbj">
+ 
+ ##
+ # Ignore <en> tags without removing them (may be used in future)
+ #
+ <define-tag en endtag=required>
+ %body
+ </define-tag>
+ 
+ #include <include/layout.wml>
+ 
+ <subject "GNU Classpath 0.00 Annoucement (1999-02-06)">
+ <h1>GNU Classpath 0.00 Annoucement (1999-02-06)</h1>
+ 
+ <p>
+ <en>
+ I am pleased to announce the first development release of GNU Classpath,
+ a project to create a free software replacement for Sun's proprietary
+ Java class libraries.  The project is initially providing class library
+ support for the Japhar JVM.
+ </en>
+ </p>
+ <p>
+ <en>
+ Here are the answers to some questions you might have about this project 
+ and this release.
+ </en>
+ </p>
+ <p>
+ <en>
+ 1).  Where can I get it?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath 0.00 can be downloaded from: 
+ <createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.00.tar.gz"
+       name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.00.tar.gz">
+ </en>
+ </p>
+ <p>
+ <en>
+ 2).  What is included?
+ </en>
+ </p>
+ <p>
+ <en>
+ The following java packages are supported:
+ </en>
+ </p>
+ <UL>
+   <LI>java.beans</LI>
+   <LI>java.io</LI>
+   <LI>java.lang</LI>
+   <LI>java.lang.reflect</LI>
+   <LI>java.math</LI>
+   <LI>java.net</LI>
+   <LI>java.security (partial and non-functioning)</LI>
+   <LI>java.security.acl</LI>
+   <LI>java.security.interfaces</LI>
+   <LI>java.util</LI>
+ </UL>
+ <p>
+ <en>
+ This is enough to run many non-awt programs.  Not all classes and methods
+ are implemented in this release, but most are.  The major missing piece
+ of core functionality is java.text.  Many of the implemented classes are
+ already up to the Java 1.2 spec.
+ </en>
+ </p>
+ <p>
+ <en>
+ 3).  What is required to build/install/run?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath requires that Japhar 0.07 be installed.  Information on
+ obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
+ name="http://www.hungry.com/old-hungry/products/japhar/">.  A working C compiler is also required.  You
+ will need the Sun JDK installed if you elect to recompile the Java
+ classes.
+ </en>
+ </p>
+ <p>
+ <en>
+ 4).  What platforms are supported?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU/Linux is the only platform that has been tested.  We plan to 
+ eventually support many others.
+ </en>
+ </p>
+ <p>
+ <en>
+ 5).  Who should use this software?
+ </en>
+ </p>
+ <p>
+ <en>
+ This is a development release only.  You should only install it if you
+ are interested in Classpath development or reporting bugs.  We appreciate
+ both.  You might also be interested if you enjoy installing random alpha
+ software.
+ </en>
+ </p>
+ <p>
+ <en>
+ 6).  Where do I go for more information?
+ </en>
+ </p>
+ <p>
+ <en>
+ The project has a web page at 
+ <createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
+ 
+ and
+ 
+ <createlink url="http://www.gnu.org/software/classpath/classpath.html"
+       name="http://www.gnu.org/software/classpath/classpath.html">
+ 
+ Information on our mailing list is available at the web site.
+ </en>
+ </p>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/20001120.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/20001120.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/20001120.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/20001120.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ #!wml --include=..
+ 
+ 
+ <set-var last-modified-author="cbj">
+ ##
+ # Ignore <en> tags without removing them (may be used in future)
+ #
+ <define-tag en endtag=required>
+ %body
+ </define-tag>
+ 
+ 
+ #include <include/layout.wml>
+ 
+ <subject "GNU Classpath 0.01 Annoucement (2000-11-20)">
+ <h1>GNU Classpath 0.01 Annoucement (2000-11-20)</h1>
+ 
+ <p>
+ <en>
+ I am pleased to announce a new development release of GNU Classpath,
+ a project to create a free software replacement for Sun's proprietary
+ Java class libraries.  The project is initially providing class library
+ support for the Japhar JVM.  There are a few other JVMs which have taken
+ the project libraries and used them in their own projects as well.
+ </en>
+ </p>
+ <p>
+ <en>
+ Here are the answers to some questions you might have about this project 
+ and this release.
+ </en>
+ </p>
+ <p>
+ <en>
+ 1).  Where can I get it?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath 0.01 can be downloaded from:
+ 
+ <createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.01.tar.gz"
+       name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.01.tar.gz">
+ </en>
+ </p>
+ <p>
+ <en>
+ 2).  What is included?
+ </en>
+ </p>
+ <p>
+ <en>
+ The following java packages are supported:
+ </en>
+ </p>
+ <UL>
+   <LI>java.beans</LI>
+   <LI>java.io</LI>
+   <LI>java.lang</LI>
+   <LI>java.lang.reflect</LI>
+   <LI>java.math</LI>
+   <LI>java.net</LI>
+   <LI>java.security (partial and non-functioning)</LI>
+   <LI>java.security.acl</LI>
+   <LI>java.security.interfaces</LI>
+   <LI>java.util</LI>
+ </UL>
+ <p>
+ <en>
+ This is enough to run many non-awt programs.  Not all classes and
+ methods are implemented in this release, but most are.  Many of the
+ implemented classes are already up to the Java 1.2 spec.
+ </en>
+ </p>
+ <p>
+ <en>
+ 3).  What is required to build/install/run?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath requires that Japhar 0.09 be installed.  Information on
+ obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
+ name="http://www.hungry.com/old-hungry/products/japhar/">.  A working C compiler is also required.  You
+ will need IBM's Jikes Java compiler installed if you elect to
+ recompile the Java classes and Sun's 1.1.8 JDK javah installed to
+ create native header files.  RPMs compatible with Red Hat 7 have been
+ created of Japhar, NSPR, a cross platform thread library Japhar uses,
+ and GNU Classpath.  Installing onto a Gnome workstation should
+ provide the rest of the required libraries automatically.  Otherwise,
+ you may need to install libart and other packages detailed more
+ precisely in the HACKING file.
+ </en>
+ </p>
+ <p>
+ <en>
+ 4).  What platforms are supported?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU/Linux is the only platform that has been tested.  We plan to 
+ eventually support many others.
+ </en>
+ <p>
+ <p>
+ <en>
+ 5).  Who should use this software?
+ </en>
+ </p>
+ <p>
+ <en>
+ This is a development release only.  You should only install it if you
+ are interested in Classpath development or reporting bugs.  We appreciate
+ both.  You might also be interested if you enjoy installing random alpha
+ software.
+ </en>
+ </p>
+ <p>
+ <en>
+ 6).  Where do I go for more information?
+ </en>
+ </p>
+ <p>
+ <en>
+ The project has a web page at 
+ 
+ <createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
+ 
+ and
+ 
+ <createlink url="http://www.gnu.org/software/classpath/classpath.html"
+       name="http://www.gnu.org/software/classpath/classpath.html">
+ 
+ Information on our mailing list is available at the web site.
+ </en>
+ </p>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/20010106.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/20010106.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/20010106.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/20010106.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,141 ----
+ #!wml --include=..
+ 
+ <set-var last-modified-author="cbj">
+ 
+ ##
+ # Ignore <en> tags without removing them (may be used in future)
+ #
+ <define-tag en endtag=required>
+ %body
+ </define-tag>
+ 
+ #include <include/layout.wml>
+ 
+ <subject "GNU Classpath 0.02 Annoucement (2001-01-05)">
+ <h1>GNU Classpath 0.02 Annoucement (2001-01-05)</h1>
+ 
+ 
+ <p>
+ <en>
+ I am pleased to announce a new development
+ release of GNU Classpath, a project to create a free software
+ replacement for Sun's proprietary Java class libraries.  The project
+ is initially providing class library support for the Japhar JVM, but
+ will soon provide out of the box support SableVM, Intel's ORP, and
+ Kaffe.  The major improvements for this release are the addition of a
+ correct security policy file and exception stack traces are now
+ printed when using Japhar.
+ </en>
+ </p>
+ <p>
+ <en>
+ Here are the answers to some questions you might have about this project 
+ and this release.
+ </en>
+ </p>
+ <p>
+ <en>
+ 1).  Where can I get it?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath 0.02 can be downloaded from:
+ 
+ <createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.02.tar.gz"
+       name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.02.tar.gz">
+ </en>
+ </p>
+ <p>
+ <en>
+ 2).  What is included?
+ </en>
+ </p>
+ <p>
+ <en>
+ The following java packages are supported:
+ </en>
+ </p>
+ <UL>
+   <LI>java.beans</LI>
+   <LI>java.io</LI>
+   <LI>java.lang</LI>
+   <LI>java.lang.reflect</LI>
+   <LI>java.math</LI>
+   <LI>java.net</LI>
+   <LI>java.security (partially functioning)</LI>
+   <LI>java.security.acl</LI>
+   <LI>java.security.interfaces</LI>
+   <LI>java.util</LI>
+ </UL>
+ <p>
+ <en>
+ This is enough to run many non-awt programs.  Not all classes and
+ methods are implemented in this release, but most are.  Many of the
+ implemented classes are already up to the Java 1.2 spec.
+ </en>
+ </p>
+ <p>
+ <en>
+ 3).  What is required to build/install/run?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath requires that Japhar 0.09 be installed along with a
+ single patch to Japhar 0.09 included with the release.  Information on
+ obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
+ name="http://www.hungry.com/old-hungry/products/japhar/">.  A working C compiler is also required.  You
+ will need IBM's Jikes Java compiler installed if you elect to
+ recompile the Java classes and Sun's 1.1.8 JDK javah installed to
+ create native header files.  RPMs compatible with Red Hat 7 have been
+ created of Japhar, NSPR, a cross platform thread library Japhar uses,
+ and GNU Classpath.  Installing onto a Gnome workstation should provide
+ the rest of the required libraries automatically.  Otherwise, you may
+ need to install libart and other packages detailed more precisely in
+ the HACKING file.
+ </en>
+ </p>
+ <p>
+ <en>
+ 4).  What platforms are supported?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU/Linux is the only platform that has been tested.  We plan to 
+ eventually support many others.
+ </en>
+ </p>
+ <p>
+ <en>
+ 5).  Who should use this software?
+ </en>
+ </p>
+ <p>
+ <en>
+ This is a development release only.  You should only install it if you
+ are interested in Classpath development or reporting bugs.  We appreciate
+ both.  You might also be interested if you enjoy installing random alpha
+ software.
+ </en>
+ </p>
+ <p>
+ <en>
+ 6).  Where do I go for more information?
+ </en>
+ </p>
+ <p>
+ <en>
+ The project has a web page at 
+ 
+ <createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
+ 
+ and
+ 
+ <createlink url="http://www.gnu.org/software/classpath/classpath.html"
+       name="http://www.gnu.org/software/classpath/classpath.html">
+ 
+ Information on our mailing list is available at the web site.
+ </en>
+ </p>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/20020208.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/20020208.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/20020208.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/20020208.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,166 ----
+ #!wml --include=..
+ 
+ <set-var last-modified-author="mjw">
+ 
+ ##
+ # Ignore <en> tags without removing them (may be used in future)
+ #
+ <define-tag en endtag=required>
+ %body
+ </define-tag>
+ 
+ #include <include/layout.wml>
+ 
+ <subject "GNU Classpath 0.03 Announcement (2002-02-08)"> 
+ <h1>GNU Classpath 0.03 Announcement (2002-02-08)</h1>
+ 
+ 
+ <p>
+ <en>
+ We are pleased to announce a new development release of GNU Classpath.
+ GNU Classpath, Essential Libraries for Java, is a project to create free
+ core class libraries for use with virtual machines and compilers for the
+ Java language.
+ </en>
+ </p>
+ <p>
+ <en>
+ New in this release are the addition of java.util.zip and java.rmi
+ packages, VM independent jni.h, more flexible build environment to
+ separate class and native code generation, out of the box support for
+ the ORP VM, and lots of bug fixes and updates to make GNU Classpath more
+ compliant with the 1.2, 1.3 and 1.4 API specification.  The copyleft
+ has been clarified and all code in the library is now distributed under
+ the same terms.
+ </en>
+ </p>
+ <p>
+ <en>
+ Here are the answers to some questions you might have about this project 
+ and this release.
+ </en>
+ </p>
+ <p>
+ <en>
+ 1).  Where can I get it?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath 0.03 can be downloaded from:
+ 
+ <createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.03.tar.gz"
+       name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.03.tar.gz">
+ </en>
+ </p>
+ <p>
+ <en>
+ 2).  What is included?
+ </en>
+ </p>
+ <p>
+ <en>
+ The following packages (some with subpackages) are supported:
+ </en>
+ </p>
+ <UL>
+   <LI>java.applet (untested)</LI>
+   <LI>java.awt (very experimental)</LI>
+   <LI>java.beans</LI>
+   <LI>java.io</LI>
+   <LI>java.lang</LI>
+   <LI>java.math</LI>
+   <LI>java.net</LI>
+   <LI>java.rmi</LI>
+   <LI>java.security (partially functioning)</LI>
+   <LI>java.sql</LI>
+   <LI>java.text (untested)</LI>
+   <LI>java.util</LI>
+   <LI>java.util.jar</LI>
+   <LI>java.util.zip</LI>
+ </UL>
+ <p>
+ <en>
+ This is enough to run many non-awt programs.  Not all classes and
+ methods are implemented in this release, but most are.  Many of the
+ implemented classes are already up to the 1.2 API spec. Some are
+ already compliant with the 1.3 and (preliminary) 1.4 API specification.
+ 
+ More information on the current status of each package can be found at
+ <createlink url="http://www.gnu.org/software/classpath/status.html"
+       name="http://www.gnu.org/software/classpath/status.html">
+ </en>
+ </p>
+ <p>
+ <en>
+ 3).  What is required to build/install/run?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU Classpath requires a working GNU build environment and a byte code
+ compiler such as jikes, gcj or kjc.  When creating native code you will
+ also need a working C compiler and up to date Gnome development libraries
+ (gtk+, libart and gdk-pixbuf).  More information on the precise version
+ numbers for the tools and libraries can be found in the INSTALL file.
+ </en>
+ </p>
+ <p>
+ <en>
+ 4).  What platforms and VMs are supported?
+ </en>
+ </p>
+ <p>
+ <en>
+ GNU/Linux is the only platform that has been tested.  We plan to 
+ eventually support many others.
+ </en>
+ </p>
+ <p>
+ <en>
+ This release support ORP 1.0.9 out of the box. But other compilers and
+ virtual machines such as gcj, Kissme, SableVM, Jupiter and Jaos also work
+ with slightly customized versions of GNU Classpath.  Please check if there
+ is a customized version available for the VM you use before trying the bare
+ bones GNU Classpath release.  We are working with the VM creators to keep
+ the differences between the core classes as small as possible.
+ </en>
+ </p>
+ <p>
+ <en>
+ 5).  Who should use this software?
+ </en>
+ </p>
+ <p>
+ <en>
+ Although it is already capable of supporting many Java applications,
+ this is a development release.  As such, there are still many unfinished
+ components, and some problems are to be expected.  You should install it
+ if you are interested in Classpath development or reporting bugs.  We
+ appreciate both.
+ </en>
+ </p>
+ <p>
+ <en>
+ 6).  Where do I go for more information?
+ </en>
+ </p>
+ <p>
+ <en>
+ The project home page with information on our mailing list can be found at 
+ 
+ <createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
+ 
+ or
+ 
+ <createlink url="http://www.gnu.org/software/classpath/classpath.html"
+       name="http://www.gnu.org/software/classpath/classpath.html">
+ </en>
+ </p>
+ <p>
+ <en>
+ The bug database, CVS, task-manager and latest news can be found on Savannah at
+ <createlink url="http://savannah.gnu.org/projects/classpath/"
+       name="http://savannah.gnu.org/projects/classpath/">
+ </en>
+ </p>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/Makefile gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/Makefile
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/Makefile	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/Makefile	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ ifndef WMK
+   export WMK=wmk
+ endif
+ ifndef WML
+   export WML=wml
+ endif
+ 
+ WML_SRC = $(wildcard *.wml)
+ WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
+ 
+ %.html: %.wml ../include/macros.wml  ../include/layout.wml
+ 	$(WML) -o $@ $<
+ #	-rm -f $(patsubst %.wml,%.html,$<)
+ 
+ all : $(WML_OBJS) subdirs
+ 
+ .PHONY : clean
+ clean :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
+ 	-rm -f *.html
+ 
+ .PHONY : subdirs
+ subdirs :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
+ 
+ .PHONY : publish
+ publish : 
+ 	@sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	@sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
+ 	-cp -f *.html $(CLASSPATH_WEBROOT)/downloads/
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/downloads.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/downloads.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/downloads/downloads.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/downloads/downloads.wml	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,223 ----
+ #!wml --include=..
+ 
+ #include "include/layout.wml"
+ 
+ ##
+ #
+ # Special Tags
+ #
+ 
+ <:
+ sub mylink {
+ 	my ($name, $url) = @_;
+ 
+ 	if ($url eq "") {
+ 		return "not available";
+ 	} else {
+ 		return '<a href="$url">$name</a>';
+ 	}
+ }
+ :>
+ 
+ <define-tag maybelink>
+ 	<preserve name>
+ 	<preserve url>
+ 	<set-var %attributes>
+ 	<:{
+ 		my $name = qq|<get-var name>|;
+ 		my $url  = qq|<get-var url>|;
+ 		
+ 		if ($url eq '') {
+ 			print "not available";
+ 		} else {
+ 			print "<a href=\"$url\">$name</a>";
+ 		}
+ 	}:>
+ 	<restore url>
+ 	<restore name>
+ </define-tag>
+ 
+ <define-tag download-block endtag=required>
+ 	<div align="center">
+ 	<table cellspacing="2" cellpadding="4">
+ 		<tr><th>Version</th><th colspan="2">Links</th></tr>
+ 		%body
+ 	</table>
+ 	</div>
+ </define-tag>
+ 
+ <define-tag download>
+ 	<preserve date>
+ 	<preserve version>
+ 	<preserve url>
+ 	<preserve notes>
+ 	<set-var %attributes>
+ 
+ 	<tr bgcolor="#CCCCCC"> 
+ 		<td align="center"><strong><get-var version></strong> / <get-var date></td>
+ 		<td align="center"><maybelink name="download" url="<get-var url>"></td>
+ 		<td align="center">[ <maybelink name="release notes" url="<get-var notes>"> ]</td>
+ 	</tr>
+ 
+ 	<restore notes>
+ 	<restore url>
+ 	<restore version>
+ 	<restore date>
+ </define-tag>
+ 
+ <set-var last-modified-author="prk">
+ 
+ <subject "GNU Classpath Downloads">
+ 
+ <box>
+ <boxtitle><a name="downloads">Classpath Downloads::Current Version</a></boxtitle>
+ 
+ <boxitem>
+ 
+ <download-block>
+ 
+ <download
+ 	date="02 November 2005"
+ 	version="0.19"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.19.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20051102.html"
+ >
+ 
+ <!-- download
+ 	date="yesterday"
+ 	version="tarball"
+ 	url=""
+ 	notes=""
+ --->
+ 
+ </download-block>
+ </boxitem>
+ 
+ 
+ <boxtitle><a name="downloads">Classpath Downloads::Archive</a></boxtitle>
+ 
+ <boxitem>
+ 
+ <download-block>
+ <download
+ 	date="06 September 2005"
+ 	version="0.18"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.18.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20050906.html"
+ >
+ <download
+ 	date="15 July 2005"
+ 	version="0.17"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.17.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20050715.html"
+ >
+ <download
+ 	date="30 June 2005"
+ 	version="0.16"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.16.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20050630.html"
+ >
+ <download
+ 	date="29 April 2005"
+ 	version="0.15"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.15.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20050429.html"
+ >
+ <download
+ 	date="26 February 2005"
+ 	version="0.14"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.14.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20050226.html"
+ >
+ 
+ <download
+ 	date="6 January 2005"
+ 	version="0.13"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.13.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20050107.html"
+ >
+ 
+ <download
+ 	date="15 November 2004"
+ 	version="0.12"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.12.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20041115.html"
+ >
+ 
+ <download
+ 	date="13 September 2004"
+ 	version="0.11"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.11.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20040913.html"
+ >
+ <download
+ 	date="12 July 2004"
+ 	version="0.10"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.10.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20040712.html"
+ >
+ <download
+ 	date="02 May 2004"
+ 	version="0.09"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.09.tar.gz"
+ 	notes="http://www.gnu.org/software/classpath/announce/20040502.html"
+ >
+ <download
+ 	date="13 Mar. 2004"
+ 	version="0.08"
+ 	url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.08.tar.gz"
+ >
+ <download
+ 	date="05 Dec. 2003"
+ 	version="0.07"
+ 	url="ftp://alpha.gnu.org/gnu/classpath/classpath-0.07.tar.gz"
+ >
+ 
+ <download
+ 	date="09 Sep. 2003"
+ 	version="0.06"
+ 	url="ftp://alpha.gnu.org/gnu/classpath/classpath-0.06.tar.gz"
+ 	notes="http://savannah.gnu.org/forum/forum.php?forum_id=2466"
+ >
+ 
+ <download
+ 	date="16 Feb. 2003"
+ 	version="0.05"
+ 	notes="http://mail.gnu.org/archive/html/classpath/2003-02/msg00043.html"
+ >
+ 
+ <download
+ 	date="06 May. 2002"
+ 	version="0.04"
+ 	notes="http://mail.gnu.org/archive/html/classpath/2002-05/msg00061.html"
+ >
+ 
+ <download
+ 	date="08 Feb. 2002"
+ 	version="0.03"
+ 	notes="downloads/20020208.html"
+ >
+ 
+ <download
+ 	date="06 Jan. 2001"
+ 	version="0.02"
+ 	notes="downloads/20010106.html"
+ >
+ 
+ <download
+ 	date="20 Nov. 2000"
+ 	version="0.01"
+ 	notes="downloads/20001120.html"
+ >
+ 
+ <download
+ 	date="06 Feb. 1999"
+ 	version="0.00"
+ 	notes="downloads/19990206.html"
+ >
+ 
+ 
+ </download-block>
+ </boxitem>
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/events/Makefile gcc-4.1.0/libjava/classpath/doc/www.gnu.org/events/Makefile
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/events/Makefile	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/events/Makefile	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ ifndef WMK
+   export WMK=wmk
+ endif
+ ifndef WML
+   export WML=wml
+ endif
+ 
+ WML_SRC = $(wildcard *.wml)
+ WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
+ 
+ %.html: %.wml ../include/macros.wml  ../include/layout.wml
+ 	$(WML) -o $@ $<
+ #	-rm -f $(patsubst %.wml,%.html,$<)
+ 
+ all : $(WML_OBJS) subdirs
+ 
+ .PHONY : clean
+ clean :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
+ 	-rm -f *.html
+ 
+ .PHONY : subdirs
+ subdirs :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
+ 
+ .PHONY : publish
+ publish : 
+ 	@sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	@sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
+ 	-cp -f *.html $(CLASSPATH_WEBROOT)/events/
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/events/escape_fosdem05.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/events/escape_fosdem05.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/events/escape_fosdem05.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/events/escape_fosdem05.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,149 ----
+ #!wml --include=..
+ 
+ #include "include/layout.wml"
+ 
+ <set-var last-modified-author="mjw">
+ <subject "Escape the Java Trap @ Fosdem 2005">
+ 
+ <box>
+ <boxitem>
+ <h2>Escape the Java Trap! - GNU Classpath Hacker Room</h2>
+ 
+ <i>Fosdem, Saturday/Sunday 26/27 February 2005, Brussels, Belgium</i>
+ <p>
+ <b>UPDATE: Presentations are now linked below!</b>
+ <p>
+ The Fosdem organisation has generously offered the developers of
+ various projects around GNU classpath the opportunity to meet face
+ to face in their own developer room.
+ <p>
+ We have brought together a wide range of different speakers from
+ various projects that together provide a free software alternative to
+ the proprietary java platform. Developers from these various projects
+ will come from all over the world to discuss cooperation and to make
+ development plans to the next year.
+ <p>
+ You are very welcome to join us and learn about the IKVM architecture
+ and how to freely mix and match traditional java and .net applications
+ and libraries, how GNU and Apache developers can and should work
+ together, how you can do rapid GNOME desktop development through
+ java-gnome, how researchers are using GNU Classpath to do cutting edge
+ research into Just In Time compilation, see demonstrations of
+ lightning fast native eclipse, learn what will be possible with GNU
+ Classpath and GCC 4.0, whether Kaffe will ever release their version
+ 1.1.5, what we think about compatibility, freedom vs control and
+ learn how you can create your own GNU Compiler Collection frontend for
+ languages such as the 1.5 java programming language.
+ <p>
+ Full schedule and abstracts at <a
+ href="http://www.fosdem.org/2005/index/dev_room_classpath/schedule">http://www.fosdem.org/2005/index/dev_room_classpath/schedule</a>
+ <p>
+ </boxitem>
+ 
+ <boxitem>
+   <h3>Saturday 14:00 - 17:00 - "Building Bridges"</h3>
+ 
+   <p>
+     Reaching out to other communities.
+     How can GNU Classpath, GCC/GCJ and Kaffe hackers
+     learn from and work together with others?
+   </p>
+     <p>
+     <b>14:00 - 14:50</b> <i>Jeroen Frijters</i>
+     <a href="http://www.frijters.net/fosdem2005.sxi">IKVM.NET -- Motivation and Architecture</a> (sxi)
+     </p>
+     <p>
+     <b>15:00 - 15:50</b> <i>Leo Simons</i>
+     <a href="http://www.apache.org/~leosimons/presentations/fosdem2005/gump@fosdem.pdf">Apache Gump -- Continuous integration on steroids</a> (pdf)
+     </p>
+ 
+     <p>
+     <b>16:00 - 16:50</b> <i>Jeffrey Morgan</i>
+     <a href="http://java-gnome.sourceforge.net/presentations/fosdem05/img0.html">Liberation through Binding! -- Using java-gnome to build desktop applications</a> (html)
+     </p>
+     <p>
+     <b>17:00 - 17:30</b> <i>Christian Thalinger</i>
+     <a href="http://www.complang.tuwien.ac.at/cacaojvm/papers/fosdem2005.ps">CACAO -- From the fastest JIT to a JVM</a> (ps)
+     </p>
+ <p>
+ </boxitem>
+ 
+ <boxitem>
+   <h3>Sunday 10:00 - 13:00 - "Demo Time!"</h3>
+   <p>
+     Public presentations and overviews of the current state of the
+     GNU Classpath library , GCC/GCJ(X) compiler and Kaffe runtime.
+   </p>
+     <p>
+     <b>10:00 - 10:50</b>
+     <i>Thomas Fitzsimmons</i>
+     <a href="http://people.redhat.com/fitzsim/fosdem-2005/html/fosdem-2005-presentation.html">Free AWT and Swing -- The GUI parts of GNU Classpath</a> (html)
+     (<a href="http://people.redhat.com/fitzsim/fosdem-2005/fosdem-2005-presentation.sxi">sxi</a>)
+     </p>
+     <p>
+     <b>11:00 - 11:50</b>
+     <i>Tom Tromey</i>
+     <a href="http://www.peakpeak.com/~tromey/fosdem-2005.sxi">GCJX -- Writing a new GCC front end</a> (sxi)
+     </p>
+     <p>
+     <b>12:00 - 12:50</b>
+     <i>Dalibor Topic</i>
+     <a href="http://www.kaffe.org/~robilad/kaffe-past-present-future-FOSDEM05.pdf">Kaffe -- Past, Present and Future</a> (pdf)
+     </p>
+ <p>
+ <boxitem>
+ 
+ <boxitem>
+   <b>Extra (13h15 - 13h30) GCJ & Native Eclipse</b>
+   <p>
+   <i>Bryce McKinlay</i> -- Lightning Talk.
+   GCJ and the Eclipse IDE: desktop application development with Java-gnome.
+   </p>
+ <p>
+ </boxitem>
+ 
+ <boxitem>
+   <h3>Sunday 14:00 - 17:00 - "The Future"</h3>
+    <p>
+ 
+    Technical Planning Session
+    <p>
+    This 3 hour session for hackers will consist of:
+    <ul>
+    <li> A general part explaining what is needed.
+    <li> Splitting up in groups to discuss specific topics to
+      solve the problems and make development plans.
+    <li> A short present by each group about the ideas discussed.
+    </ul>
+    <p>
+    Please add ideas and suggestions to the WIKI:
+ <a href="http://developer.classpath.org/mediation/Fosdem2005">http://developer.classpath.org/mediation/Fosdem2005</a>
+ <p>
+ </boxitem>
+ 
+ <boxitem>
+ <b>Additional Resources:</b>
+ <ul>
+ <li><createlink name="Free But Shackled - The Java Trap"
+ 	url="http://www.gnu.org/philosophy/java-trap.html">
+ 	(by Richard Stallman)
+ </li>
+ </ul>
+ <p>
+ <boxitem>
+ 
+ <boxitem>
+ <b>Official links:</b>
+ <ul>
+ <li><createlink name="FOSDEM Homepage"
+ 	url="http://www.fosdem.org/">
+ </li>
+ <li><createlink name="GNU Classpath Room"
+ 	url="http://www.fosdem.org/2005/index/dev_room_classpath/">
+ </li>
+ <li><createlink name="GNU Classpath Room Schedule"
+ 	url="http://www.fosdem.org/2005/index/dev_room_classpath/schedule/">
+ </li>
+ </ul>
+ <boxitem>
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/events/events.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/events/events.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/events/events.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/events/events.wml	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,70 ----
+ #!wml --include=..
+ 
+ #include "include/layout.wml"
+ 
+ <set-var last-modified-author="prk">
+ <subject "GNU Classpath Events">
+ 
+ <box>
+ <boxitem>
+ <strong>Upcoming Events:</strong><br>
+ <ul>
+ <li>[1-5 Aug 2005] <a href="http://conferences.oreillynet.com/os2005/">OSCON</a>, Portland, Oregon - USA
+ <ul>
+ <li><a href="http://conferences.oreillynet.com/cs/os2005/view/e_sess/6730">The State of Free JVMs</a>
+ Tom Tromey</li>
+ </ul>
+ </ul>
+ </boxitem>
+ 
+ <boxitem>
+ <strong>Past Events:</strong><br>
+ <ul>
+ 
+ <li>
+ [29-31 May 2005] <a href="http://2005.guadec.org/">Guadec</a>, Stuttgart - Germany
+ <ul>
+ <li><a href="http://2005.guadec.org/schedule/gnometalks.html#eclipseyou">The Eclipse IDE and you</a>
+ Ben Konrath and Andrew Overholt
+ (<a href="http://overholt.ca/eclipse/GUADEC2005-EclipseIDE.pdf">slides</a>)</li>
+ <li><a href="http://2005.guadec.org/schedule/gnometalks.html#javagnome">Eclipse, Java-GNOME, and GCJ</a>
+ Andrew Cowie and Ben Konrath</li>
+ </ul>
+ <p>
+ <li>
+ [1-4 Jun. 2005] <a href="http://fisl.softwarelivre.org/6.0/">6th International Free Software Forum</a> (fisl), Porto Alegre/RS, Brazil
+ <ul>
+ <li><a href="http://fisl.softwarelivre.org/papers/pub/programacao/360">Encontro Javali: Escape the Java Trap: GNU Classpath and Kaffe</a>
+ Dalibor Topic and Mark Wielaard
+ (<a href="http://www.klomp.org/mark/classpath/GNUClasspathKaffe/">slides</a>)</li>
+ </ul>
+ <p>
+ <li>
+ [22-25 Jun 2005] <a href="http://www.linuxtag.org/">LinuxTag</a>, Karlsruhe - Germany
+ <ul>
+ <li><a href="http://www.linuxtag.org/vcc/details.pl?id=162">GNU Classpath</a>
+ Robert Schuster (in German)
+ (<a href="http://www.inf.fu-berlin.de/%7Erschuste/GNUClasspath-LinuxTag2005-English.pdf">slides</a>)</li>
+ <li><a href="http://www.linuxtag.org/vcc/details.pl?id=166">GCJ and Classpath: A Free Implementation of the Java programming language</a>
+ Andrew Haley (in English)
+ (<a href="http://people.redhat.com/~aph/linuxtag.tar.gz">slides</a>)</li>
+ </ul>
+ <p>
+ <li>[26+27 Feb. 2005] FOSDEM'05 in Brussels, Belgium. [<createlink name="Escape The Java Trap!" url="events/escape_fosdem05.html">]
+ <p>
+ <li>[21+22 Feb. 2004] FOSDEM'04 in Brussels, Belgium. [<createlink name="report" url="events/fosdem04.html">]
+ <p>
+ <li>[14+15 Oct. 2003] Linux Kongress '03 in Saarbr&uuml;cken, Germany.
+ <ul>
+ <li>Hacking on the VM Interface: GNU Classpath workshop, Mark Wielaard
+ (<a href="http://www.klomp.org/mark/classpath/slides/gnu_classpath_workshop.html">slides</a>).
+ <li>Agile2D: implementing Graphics2D over OpenGL, Jean-Daniel Fekete
+ (<a href="http://www.klomp.org/mark/classpath/Agile2D.pdf">slides</a>).
+ </ul>
+ 
+ </ul>
+ <br><br><br>
+ </boxitem>
+ 
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/events/fosdem04.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/events/fosdem04.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/events/fosdem04.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/events/fosdem04.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ #!wml --include=..
+ 
+ #include "include/layout.wml"
+ 
+ <set-var last-modified-author="prk">
+ <subject "GNU Classpath: FOSDEM'04">
+ 
+ <box>
+ <boxitem>
+ <h2>GNU Classpath at FOSDEM'04</h2>
+ 
+ Saturday, 21 February 2004
+ 
+ A whole room was devoted to Free Java Developers. The following talks took place:
+ <ul>
+ <li><strong>GNU Classpath -- Core Classes for a Diversity of Free Java Virtual Machines</strong>, Sascha Brawer and Mark Wielaard (GNU Classpath)<br>
+ [<createlink name="slides" url="http://www.dandelis.ch/people/brawer/articles/classpathFeb2004/">]<br>
+ <i>Mark presented an overview of the GNU Classpath project, the current development state, and the problems encountered, in particular the ability to fit so many JVM with different requirements and constraints</i>
+ 
+ <li><strong>SableVM - the Apache of Java Virtual Machines</strong>, Grzegorz B. Prokopski (SableVM)<br>
+ [<createlink name="slides" url="http://gadek.debian.net/FOSDEM/">]<br>
+ <i>Grzegorz presented the SableVM JVM and its technical details; a whole unter the hood tour, including the use of m4 macro expansion for generating the VM code and an overview of interpreter and JIT techniques used.</i><br>
+ 
+ 
+ <li><strong>fbAWT - Direct to your buffer</strong>, Stephane Meslin-Weber<br>
+ <i>Stephane presented his project to map AWT directly to a framebuffer and VNC, and made a short demo of it.</i>
+ 
+ </ul>
+ 
+ Sunday, 22 February 2004
+ 
+ There was a whole track of Java-related presentations:
+ 
+ <ul>
+ <li><strong>JOnAS</strong>, Florent Benoit (WebObjects)
+ <li><strong>GCJ</strong>, Tom Tromey (GCJ, Red Hat)<br>
+ [<createlink name="slides" url="http://www.peakpeak.com/~tromey/FOSDEM/gcj.html">]<br>
+ <i>Tom presented the GCJ project and its goals. Many details on performance and status.</i><br>
+ 
+ <li><strong>NetBeans</strong>, Ian Formanek (Sun)
+ <li><strong>Java Security: How Free Software Is Secured Using the Java Language
+ </strong>, Sascha Brawer (GNU Classpath, Dandelis)<br>
+ Abstract: After a general introduction to why Java seems a reasonable choice for
+ writing large and robust free software packages, the talk discusses the
+ security features of the Java platform. It is shown how several actors
+ play together to ensure type safety, encapsulation and declarative access
+ control. Four concrete denial-of-service attacks illustrate the
+ importance of enhancing the platform by techniques for managing resource
+ consumption.
+ <br>[<createlink name="slides" url="http://www.dandelis.ch/people/brawer/articles/classpathSecurity/">]
+ </ul>
+ 
+ </ul>
+ 
+ In the afternoon, more discussions took place in the Free Java Developers room.
+ 
+ <ul>
+ <li><strong>Packaging Free Java Applications For Free Operating Systems</strong>, Dalibor Topic (Kaffe) and Arnaud Vandyck (Debian)<br>
+ [<createlink name="Wiki" url="http://java.debian.net">]<br>
+ <i>Dalibor and Arnaud explained the problems encountered while packaging Java for Debian.</i>
+ 
+ <li><strong>Free Discussion</strong><br>
+ <i>A proposal by Andrew Haley (GCJ) for the standardization of the JIT interface in the VM was discussed.</i>
+ 
+ </ul>
+ 
+ </boxitem>
+ <boxitem>
+ In Mark Wielaard's words
+ <ul>
+ <li> <i>There were between 20 and 50 people following the different
+ presentations, talks and discussions in our developer room. And Tom
+ Tromey his talk on gcj in the big room got 120 interested people.</li>
+ <li> <i>We could have had more in depth technical discussions. Most of the
+ presentations now were more overviews of what was already there. Which
+ is great for attracting new developers and explaining our goals to
+ outsiders. But for next time we must really appoint people that lead
+ some technical issue. Many thanks to Andrew for just standing up and
+ starting the pluggable JIT interface discussion by telling how gcj would
+ like to support it.
+ </i>
+ 
+ </ul>
+ 
+ See his whole message in the <createlink name="mail archive" url="http://mail.gnu.org/archive/html/classpath/2004-02/msg00051.html">.
+ </boxitem>
+ <boxitem>
+ Additional Resources:
+ <ul>
+ <li><createlink name="GNU Classpath's Flyer" url="http://www.klomp.org/mark/classpath/fosdem/"> (Kudos to Mark Wielaard)
+ <li><createlink name="Group Picture" url="http://adorphuye.com/gallery/FOSDEM2004/IMGP0234"> (thanks to Stephane Meslin-Weber)
+ </ul>
+ 
+ Official links:
+ <ul>
+ <li><createlink name="FOSDEM Homepage" url="http://www.fosdem.org">
+ <li><createlink name="FOSDEM Java Dev Room" url="http://www.fosdem.org/2004/index/dev_room_java/">
+ <li><createlink name="FOSDEM Java Dev Room Schedule" url="http://www.fosdem.org/2004/index/dev_room_java/schedule/">
+ </ul>
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/external.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/external.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/external.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/external.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,86 ----
+ #include "include/layout.wml"
+ 
+ 
+ ##
+ #
+ # Special Tags
+ #
+ 
+ <define-tag tool endtag=required>
+ 	<preserve maintainer>
+ 	<preserve name>
+ 	<preserve url>
+ 	<set-var %attributes>
+ 
+ 	<boxtitle><a name="<get-var name>">Classpath External Tools::<get-var name></a></boxtitle>
+ 	<boxitem>
+ 	<table cellspacing="4">
+ 		<tr><td valign="top"><strong>Maintainer</strong></td><td><get-var maintainer></td></tr>
+ 		<tr><td valign="top"><strong>Link</strong></td><td><createlink name="<get-var url>" url="<get-var url>"></td></tr>
+ 		<tr><td valign="top"><strong>Description</strong></td><td>%body</td></tr>
+ 	</table>
+ 	</boxitem>
+ 	<restore url>
+ 	<restore name>
+ 	<restore maintainer>
+ </define-tag>
+ 
+ 
+ 
+ 
+ <set-var last-modified-author="prk">
+ <subject "GNU Classpath External Tools">
+ 
+ <box>
+ <boxtitle><a name="packages">Classpath::External Packages</a></boxtitle>
+ 
+ <boxitem>
+ <en>
+ <p>Below is a table of providers for free core packages not part of GNU Classpath
+ </p>
+ 
+ <project-list>
+ <project name="GNU ClasspathX" url="http://www.gnu.org/software/classpathx/">
+ <ul>
+ <li>javax.activation
+ <li>javax.infobus
+ <li>javax.xml
+ <li>javax.mail
+ <li>javax.servlet
+ <li>javax.speech
+ </ul>
+ </project>
+ 
+ <project name="GNU Crypto" url="http://www.gnu.org/software/gnu-crypto/">
+ <ul>
+ <li>javax.crypto
+ </ul>
+ </project>
+ 
+ <project name="Jessie" url="http://www.nongnu.org/jessie/">
+ <ul>
+ <li>javax.net.ssl
+ </ul>
+ </project>
+ 
+ <project name="Tritonus" url="http://tritonus.org/">
+ <ul>
+ <li>javax.sound
+ </ul>
+ </project>
+ 
+ </project-list>
+ </en>
+ 
+ </boxitem>
+ 
+ <tool
+ 	name="Jalopy"
+ 	maintainer="Tom Tromey"
+ 	url="ftp://sources.redhat.com/pub/java/jalopy-console-1.0.4.tar.gz"
+ >
+ Jalopy is a pretty-printer to format Java code. To do our coding style you also need this
+ <a href="ftp://sources.redhat.com/pub/java/GNU.xml">style definition file</a>.
+ </tool>
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/faq/Makefile gcc-4.1.0/libjava/classpath/doc/www.gnu.org/faq/Makefile
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/faq/Makefile	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/faq/Makefile	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ ifndef WMK
+   export WMK=wmk
+ endif
+ ifndef WML
+   export WML=wml
+ endif
+ 
+ WML_SRC = $(wildcard *.wml)
+ WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
+ 
+ %.html: %.wml ../include/macros.wml  ../include/layout.wml
+ 	$(WML) -o $@ $<
+ #	-rm -f $(patsubst %.wml,%.html,$<)
+ 
+ all : $(WML_OBJS) subdirs
+ 
+ .PHONY : clean
+ clean :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
+ 	-rm -f *.html
+ 
+ .PHONY : subdirs
+ subdirs :
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
+ 
+ .PHONY : publish
+ publish : 
+ 	@sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	@sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
+ 	$(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
+ 	-cp -f *.html $(CLASSPATH_WEBROOT)/faq/
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/faq/faq.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/faq/faq.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/faq/faq.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/faq/faq.wml	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,607 ----
+ #!wml --include=..
+ 
+ #include "include/layout.wml"
+ 
+ ##
+ #
+ # Special Tags
+ #
+ 
+ 
+ 
+ #
+ # <faq-section name="XYZ>
+ #	<faq question="ABC">answer</faq>
+ #	<faq question="ABC">answer</faq>
+ # </faq-section>	
+ #
+ 
+ # the section counter
+ #
+ <set-var __SECCNT=1>
+ 
+ <define-tag faq-section endtag=required>
+ 	<preserve name>
+ 	<set-var %attributes>
+ {#FAQINDEX#:
+ 		<boxtitle><get-var __SECCNT>. <get-var name></boxtitle>
+ 		<boxitem>
+ :#FAQINDEX#}
+ 	<boxtitle><get-var __SECCNT>. <get-var name></boxtitle>
+ 	<set-var __FAQCNT=1>
+ 	<boxitem>%body</boxitem>
+ {#FAQINDEX#:
+ 		<br>
+ 		</boxitem>
+ :#FAQINDEX#}
+ 	<increment __SECCNT>
+ 	<restore name>
+ </define-tag>
+ 
+ <define-tag faq endtag=required>
+ <preserve question>
+ <set-var %attributes>
+ {#FAQINDEX#:
+ 	<strong><a href="faq/faq.html#faq<get-var __SECCNT>_<get-var __FAQCNT>"><get-var __SECCNT>.<get-var __FAQCNT> <get-var question></a></strong><br>
+ :#FAQINDEX#}
+ 	<h3><a name="faq<get-var __SECCNT>_<get-var __FAQCNT>"><get-var __SECCNT>.<get-var __FAQCNT> <get-var question></a></h3>
+ 	%body
+ 	<br>
+ <increment __FAQCNT>
+ <restore question>
+ </define-tag>
+ 
+ 
+ <set-var last-modified-author="prk">
+ 
+ <subject "GNU Classpath FAQ">
+ 
+ <box>
+ {#FAQINDEX#}
+ 
+ <faq-section name="introduction">
+ <faq question="What is GNU Classpath?">
+ <p>GNU Classpath is a set of essential libraries for supporting
+ the Java programming language.</p>
+ 
+ <p>Classpath serves the same role that <a
+ href="http://www.gnu.org/software/libc/libc.html">libc</a> has for C,
+ but is much richer in functionality. The broadness of the standard
+ library is an important reason why Java has been so successful. For
+ example, the library includes frameworks to convert between character
+ encodings, for accessing relational databases, for building Graphical
+ User Interfaces, for encryption, for logging, and for numerous other
+ tasks that are needed to build complex applications.</p>
+ 
+ </faq>
+ 
+ <faq question="Why Java?">
+ <p>On the GNU operating system, we want to run software independent of
+ the programming language in which it was written. Because Java is
+ widespread, and because Java has some nice features, we want to
+ support Java as well.</p>
+ 
+ </faq>
+ 
+ <faq question="But isn't Java free already?">
+ <p>Sun Microsystems, the company who has created Java, currently
+ distributes the &#x201c;Java Development Kit&#x201d; and &#x201c;Java
+ Runtime Environment&#x201d; at no cost. The former even comes with the
+ source code of the standard class library. However, the &#x201c;Sun
+ Community Source License&#x201d; <a
+ href="http://www.gnu.org/licenses/license-list.html#SunCommunitySourceLicense">does
+ not grant essential freedoms</a>, for example the right to distribute
+ a modified version of the code.</p>
+ 
+ <p>Therefore, Sun&#x2019;s implementation does not qualify as Free
+ Software.</p>
+ 
+ </faq>
+ 
+ <faq question="What do we need to make Java free?">
+ 
+ <p>Though it would be helpful if Sun would open their sources, this is not the
+ most important step toward a free Java. Even more important for a free Java are:
+ <ul>
+ <li>Access to the TCK (Technology Compatibility Kits) on acceptable terms
+ <li>Involvement in the JCP without contamination or other unacceptable
+    constraints
+ <li>Easing of the requirements on subsetting.  The free software
+    community doesn't work well with the "one big perfect release"
+    model that Sun seems to want.  
+ </ul>
+ 
+ <p>There was already a lot of discussions around this topic on other sites:
+ <ul>
+ <li><createlink name="Sys-Con: <i>Let's Bundle Free Java with Linux</i>, Says IBM's Sutor" url="http://sys-con.com/story/print.cfm?storyid=43969">
+ <li><createlink name="Hacking Log 4.0: RE: JCP 2.6 - Are we there yet?" url="http://linuxintegrators.com/blog/acoliver/news/?permalink=0124.html">
+ <li><createlink name="Javalobby: ESR - Open Letter to Sun: Let Java Go" url="http://www.javalobby.org/thread.jspa?forumID=61&threadID=11412">
+ </ul>
+ 
+ 
+ </faq>
+ 
+ <faq question="Is GNU Classpath all that is needed for running Java programs?">
+ <p>GNU Classpath is a free implementation of Java&#x2019;s standard
+ library.  To execute Java programs, it is also necessary to have a
+ Java Virtual Machine (JVM). This component manages memory, enforces
+ security restrictions, compiles Java bytecodes to the instruction set
+ of your computer, and provides other runtime services.  There exist
+ several projects for <createlink name="free JVMs" url="stories.html#jvm">. Most use GNU Classpath as the
+ up-stream source for their library.</p>
+ 
+ <p>Java programs can also be compiled &#x201c;ahead of time,&#x201d;
+ like C++ or other compiled languages. The GNU Compiler Collection
+ (GCC) does this, and its Java library is mostly derived from GNU
+ Classpath.</p>
+ </faq>
+ 
+ </faq-section>
+ 
+ <faq-section name="licensing">
+ 
+ <faq question="Under which licence is GNU Classpath released?">
+ GNU Classpath is licensed under the GPL plus a special exception:
+ 
+ <blockquote>
+ <p>
+ <code>
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ </code>
+ </p>
+ <p>
+ <code>
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version.
+ </code>
+ </p>
+ </blockquote>
+ 
+ </faq>
+ 
+ <faq question="Where can I find more about the GPL?">
+ Please check the FSF FAQ on the GNU GPL: <createlink name="http://www.fsf.org/licenses/gpl-faq.html" url="http://www.fsf.org/licenses/gpl-faq.html">.
+ </faq>
+ 
+ <faq question="What does the exception allow me to do?">
+ <p>If you combine GNU Classpath <em>with independent modules to produce an
+ executable</em> you can <em>copy and distribute the resulting executable under
+ terms of your choice</em>.</p>
+ 
+ <p>So you can use and distribute GNU Classpath as is in your program without changing the license of your software.</p>
+ </faq>
+ 
+ <faq question="I have a question about licensing GNU Classpath. Who can I ask?">
+ Direct such questions to <a href="mailto:licensing@gnu.org">licensing@gnu.org</a>. The FSF is the
+ official copyright holder of Classpath and sets the distribution terms
+ </faq>
+ 
+ <faq question="How can I be sure that my application does not break the license?">
+ The FSF has a GPL-compliance lab which offers consulting services for
+ companies who are working to develop products that incorporate Free
+ Software so that they can do so in ways that comply with the terms of
+ the GPL and other Free Software licenses. If you are interested in this
+ service, please write to <a href="mailto:compliance-lab@fsf.org">compliance-lab@fsf.org</a>.
+ </faq>
+ </faq-section>
+ 
+ <faq-section name="Classpath Development">
+ 
+ <faq question="I would like to contribute, where shall I start?">
+ <p>See the <a
+ href="docs/">documentation page</a>, especially the <a
+ href="docs/hacking.html">GNU
+ Classpath Hacker&#x2019;s Guide</a>, and pick up a <createlink name="task" url="tasks.html"> from the list!
+ </faq>
+ 
+ <faq question="Can I look at source code distributed with other
+ implementations to get inspiration?">
+ If you are going to contribute source code to GNU Classpath we must
+ make sure that you have not studied the source code of the JDK/JRE or
+ decompiled any of its classes. Furthermore you must not have signed
+ any non-disclosure agreements with Sun or other companies in regard
+ with java technology that might cover the core class libaries or
+ tools. The reason for this requirement is that we want to make sure
+ that Sun or any other company cannot rightfully claim that GNU
+ Classpath infringes their copyright. You are therefore questioned
+ about your experience with other implementations of similar source
+ code and any agreements with companies you might have signed when you
+ request to contribute to GNU Classpath.
+ <p>
+ Please note that this does not mean you cannot help GNU Classpath at
+ all in such a case. Here is a list of things you can do instead:
+ <ul>
+   <li>write Mauve test cases</li>
+   <li>write example applications demonstrating the usage of the packages</li>
+   <li>writing/fixing helper programs (like japitools) and scripts</li>
+   <li>report bugs</li>
+   <li>help fixing the documentation</li>
+   <li>help in other related Free software projects
+   (e.g. virtual machine development,
+    <createlink name="GUMP" url="http://gump.apache.org/">)
+ </ul>
+ <p>
+ Here are some rough guidelines for deciding whether or not it would be
+ wise to accept a contribution from someone that studied source code
+ for another implementation of the core libraries or is under contract
+ with some company covering implementations of core library classes.
+ <p>
+ If the developer got access to the source code by signing some
+ contract (like the SCSL) with Sun then it would be best to examine
+ that contract (by FSF legal) before deciding.
+ <p>
+ If the developer just accidentally saw some of the source code and had
+ no intention (and didn't actually) study the implementation (with the
+ intention of contributing to GNU Classpath) there is no problem.
+ <p>
+ Studying a proprietary implementation with the intention of
+ implementing it (better) for GNU Classpath is a clear no-no.
+ <strong>The general rule is that if you have looked at or studied any
+ (proprietary) implementation of a package you should not work on that
+ package for GNU Classpath.</strong> That is because it would be
+ difficult to proof that you really did an independent
+ implementation. Since what you create might look very similar (which
+ is not unlikely). Working on something completely unrelated is OK (as
+ long as there are no contractual obligations with Sun or some other
+ company to not do this of course).
+ <p>
+ The important thing is that we want to be clear on the fact that we
+ created an independent implementation. We don't want to get into
+ tricky legal situations. We want to avoid risking to go to court over
+ reverse engineering or clean room situation questions if not
+ absolutely necessary. That is why we in general just say "please don't
+ contribute if you looked at other implementations". If someone thinks
+ that their actions might be explained as copying directly or
+ indirectly another (proprietary) implementation then that could be a
+ problem that we want to avoid.
+ <p>
+ FSF Legal will always advise not to take any unnecessary risks that
+ might endanger the (perceived) free software status of a GNU
+ project. (If we might need to go to court to proof that what we did
+ was OK, then don't!)
+ <p>
+ This isn't a GNU Classpath project specific issue.
+ See <createlink name="GNU: Reading Non-Free Code"
+ url="http://www.gnu.org/prep/standards/html_node/Reading-Non_002dFree-Code.html">.
+ </faq>
+ 
+ <faq question="I'm tainted by; can I help anyway?">
+ Even if you have seen Sun's source and you cannot contribute code to GNU Classpath, there are still many way you can help us.
+ 
+ Here's a few examples of contributions you can make that would greatly help us:
+ <ul>
+ <li>Mauve test cases
+ <li>Example programs for GNU Classpath
+ <li>Documentation fixes
+ <li>Help programs (e.g. japitools) and scripts
+ </ul>
+ 
+ In general, if you just accidentally saw some of the source code and had no intention (and didn't actually) study the implementation (with the intention of contributing to GNU Classpath), there is no problem.
+ 
+ In case of doubt, please refer to FSF legal.
+ </faq>
+ 
+ <faq question="Why do I have to give the copyright to the FSF?">
+ Some contributors of Classpath might be annoyed if their work was being
+ used under conditions that are not according to the terms of the license.
+ However, enforcing the license in court (if this was ever needed) would
+ be easier if the Free Software Foundation can claim to speak in the name
+ of all authors. For this reason, and for others that are specific to the
+ intellectual property system of the United States, GNU projects tend to
+ be a bit picky about getting signatures from all contributors. Please do
+ not see this as a personal offence.
+ 
+ <p>Giving the copyright to the FSF also gives us a clear paper trail where changes come from, which confirms our clean-room status.
+ </p>
+ 
+ <p>
+ The assignment contract commits the foundation to setting distribution terms
+ that permit free redistribution.
+ </p>
+ 
+ <p>
+ The assignment contract we normally use has a clause that permits you to
+ use your code in proprietary programs, on 30 days' notice.
+ (The 30 days' notice is there because, through a legal technicality,
+ it would improve our position in a suit against a hoarder.)
+ Although we believe that proprietary software is wrong, we include this
+ clause because it would serve no purpose to ask you to promise not to do
+ it. You're giving us a gift in the first place.
+ </p>
+ 
+ <p>
+ You don't need to invoke this clause in order to distribute
+ copies as free software under the GNU GPL, since everyone is
+ allowed to do that.
+ </p>
+ 
+ <p>See also <a href="http://www.gnu.org/licenses/why-assign.html">http://www.gnu.org/licenses/why-assign.html</a>.
+ </p>
+ 
+ <p>For getting the assignment form, please send an e-mail with your name (as
+ it appears in your passport) and your current postal address to the
+ maintainer of GNU Classpath, Mark Wielaard <mark@klomp.org>.
+ </p>
+ </faq>
+ 
+ <faq question="How do I install GNU Classpath?">
+ <p>Follow these steps to install GNU Classpath. Please note that you need this only if you want to work directly with it; usually JVMs contain a pre-packaged version of GNU Classpath.
+ 
+ <bold>Prerequisites</bold>
+ 
+ Please check the exact version of the prerequisites from your release's INSTALL file.
+ 
+ In every case, you need:
+ <ul>
+ <li>GNU gmake
+ <li>GNU autoconf
+ <li>GNU automake
+ <li>GNU libtool
+ </ul>
+ 
+ For building the Java bytecode (.class files), one of these compilers are required.  You can select which compiler using --with-jikes, --with-gcj or --with-kjc as argument to configure; the present default is gcj.
+ 
+ <ul>
+ <li>GCJ (part of GNU GCC)
+ <li>IBM Jikes
+ </ul>
+ 
+ For building the JNI native libraries, the following are required unless --disable-gtk-peer is used as an argument to configure.
+ <ul>
+ <li><createlink name="GTK+ 2" url="http://www.gtk.org/">
+ <li>gdk-pixbuf
+ </ul>
+ 
+ For building the documentation you will need:
+ <ul>
+ <li>texinfo
+ </ul>
+ 
+ <bold>Install from CVS</bold>
+ 
+ <commented-code>
+ <code-line code="cvs checkout" />
+ <code-line code="./autogen.sh" />
+ <code-line code="./configure" />
+ <code-line code="make" />
+ </commented-code>
+ 
+ <bold>Install a release</bold>
+ <commented-code>
+ <code-line code="<createlink url="ftp://ftp.gnu.org/gnu/classpath/">">
+   Download the current release
+ </code-line>
+ <code-line code="tar zxf classpath-<i>version</i>.tar.gz">
+   unpack
+ </code-line>
+ <code-line code="cd classpath-<i>version</i>" />
+ <code-line code="more INSTALL">
+   make sure you have all pre-requirements
+ </code-line>
+ <code-line code="./configure">
+   configure the distribution; use <code>--help</code> to get the list of options: you will usually need <code>--prefix=<i>dest/dir/for/classpath</i>; use <code>--disable-gtk-peer</code> if you don't use gtk+/gnome.
+ </code-line>
+ 
+ <code-line code="make; make install" />
+ </commented-code>
+ 
+ 
+ </faq>
+ 
+ <faq question="How do I install Mauve?">
+ 
+ <commented-code>
+ <code-line code="export CVSROOT=:ext:anoncvs@bogus.example.com:/cvs/mauve" />
+ <code-line code="cvs login">password is anoncvs</code-line>
+ <code-line code="cvs checkout mauve" />
+ <code-line code="cd mauve" />
+ <code-line code="./configure">
+ The main thing this does is creating the gnu/testlet/config.java. You could also do this by hand from the config.java.in file
+ </code-line>
+ <code-line code="vi batch_runner">
+ Edit the script 'batch_runner' to set the variable COMPILER correctly
+   (there are a couple of example settings)
+ </code-line>
+ <code-line code="vi runner">
+ Edit script 'runner' to set the variable RUNTIME correctly
+   (there are a couple of example settings)
+ </code-line>
+ <code-line code="./batch_run">
+ run ./batch_run and look at the results. You can also run individual tests with<br>
+ <code>- echo gnu.testlet.java.lang.String.getBytes | jamvm 
+ gnu.testlet.SimpleTestHarness</code><br>
+ (Option flags are -verbose and -debug)
+ 
+ </code-line>
+ 
+ </commented-code>
+ 
+ 
+ </faq>
+ 
+ <faq question="How can I synchronize my sources with GNU Classpath?">
+ 
+ When developing a JVM that uses GNU Classpath, a copy of GNU Classpath local to the JVM is often used. To keep the Classpath sources synchronized with the main development, a few approaches are possible (we assume here that you are keeping the local copy of Classpath in your JVM revision control software):
+ <ul>
+ <li>Use CVS import and CVS update as explained in <createlink url="http://www.cvshome.org/docs/manual/cvs-1.11.14/cvs_13.html#SEC104" name="Section 13: Tracking Thirdparty sources"> of the CVS manual. This works well for minor changes, but has the disadvantage of a limited control on the update / merge of the sources. In fact, most of the developers prefer merging the changes by hand.
+ 
+ <li>libgcj, which is almost always trying to be
+ as synchronized as possible with GNU Classpath CVS, has a script
+ that runs daily which produces a (colored) differences overview
+ (including patch/diffs). They also put in special markers into the
+ source for gcj specific changes that the script recognizes.
+ <ul>
+ <li>Script can be found at:
+ <createlink url="http://savannah.gnu.org/cgi-bin/viewcvs/gcc/wwwdocs/bin/gen-classpath-compare">
+ 
+ <li>Daily updated result:
+ <createlink url="http://gcc.gnu.org/java/libgcj-classpath-compare.html">
+ </ul>
+ </ul>
+ 
+ </faq>
+ 
+ <faq question="How do I avoid compiling some files or packages?">
+ The file <code>lib/standard.omit</code> controls which files are omitted from the compilation. Add a regex with the files to be omitted and rebuild classpath.
+ </faq>
+ 
+ <faq question="How do I change classpath's web pages?">
+ 
+ <p>To modify and upload GNU Classpath's web pages, you need write access to the CVS. First, checkout the modules "classpath" and "website".
+ 
+ <p>The web pages are stored in doc/www.gnu.org and are written in wml (Web Meta Language, see <createlink url="http://thewml.org/">).
+ 
+ <p>A typical page usually looks like this:
+ <pre>
+ \#include "include/layout.wml"
+ 
+ &lt;subject "here goes the page title">
+ 
+ &lt;box>
+ 
+ &lt;boxtitle>Section 1 Title&lt;\boxtitle>
+ &lt;boxitem>
+   section 1 contents
+ &lt;\boxitem>
+ 
+ ....
+ 
+ &lt;\box>
+ 
+ </pre>
+ 
+ <p>Invoking "make" creates the html pages in the same directory. To copy those pages to another directory, use
+ <pre>
+ > export CLASSPATH_WEBROOT=...destination...
+ > make publish
+ </pre>
+ 
+ <p>The steps to publish the pages are:
+ <ol>
+ <li>Update ChangeLog
+ <li>Commit your changes in module Classpath to the CVS
+ <li>cd doc/www.gnu.org
+ <li>make
+ <li>copy the modified / new pages to the website module
+ <li>commit the changes in the website module
+ </ol>
+ 
+ <p>Note that it takes up to an hour for the pages to appear on the GNU website after an upload.
+ 
+ 
+ </faq>
+ 
+ <faq question="Is it possible to use Classpath in a prorietary VM?">
+ 
+ <p>Only the proprietary VM's vendor can make it work with GNU Classpath, by the nature of the VM being proprietary. GNU Classpath provides well documented and widely used interfaces for interfacing with runtimes. It's up to proprietary VM vendors to make their products work with GNU Classpath, if they wish to do so. If you, as a customer, want the runtime to use GNU Classpath, please talk to your proprietary software vendor. 
+ 
+ <p>You can also try using a free runtime that supports GNU Classpath out-of-the-box instead.
+ 
+ </faq>
+ 
+ </faq-section>
+ 
+ <faq-section name="Classpath Implementation">
+ 
+ <faq question="Why does java.lang.Throwable delay the StackTrace array construction?">
+ 
+ Well consider what happens in a VM.  VMThrowable.fillInStackTrace() is
+ very fast -- it's just a chain of addresses.
+ VMThrowable.getStackTrace() is very slow, because it has to convert
+ all those addresses into StackTraceElements.  I suspect that you can
+ get the trace for the whole stack in less time than it takes to create
+ a single StackTraceElement.  For this reason, the vmState is stored
+ and lazily converted to a StackTraceElement[]. (<i>Andrew Haley</i>)
+ 
+ <p> A particular problem is posed by OutOfMemoryException: throwing it shouldn't require any memory (there's none anyway). Some propose that the VM should preallocate it at bootstrap, but this doesn't solve the problem. In Chris Gray's words <i>"if several threads throw OOME at the same time, the stack traces can get mixed up [...snip...] This situation is less improbable than you might think, since if one thread encounters an OOM situation, all other threads should encounter one too.  With some forms of co-operative multi-threading you may get away with it, but in the general pre-emptive case you could be living dangerously."</i></p>
+ 
+ </faq>
+ </faq-section>
+ 
+ 
+ <faq-section name="Varia">
+ <faq question="How to generate API Documentation with gjdoc/libxmlj?">
+ 
+ Beware: generating the complete API Documentation non-trivial and the generation of a full tree takes more then one and half hour (on a 1.4 Ghz Athlon),
+ 150+ MB of memory, at least 25MB of tmp storage, and at least
+ twice so much in your obj build dir.
+ 
+ <ol>
+ <br><li>set the CVS_RSH environment variable to ssh<br>
+ <br><li>install gcj 3.3.2 (or higher)<br>
+ <code>
+ gjdoc CVS :ext:anoncvs@savannah.gnu.org:/cvsroot/cp-tools module gjdoc
+ </code>
+ <br><li>install libxmlj<br>
+ <code>
+ libxmlj CVS :ext:anoncvs@savannah.gnu.org:/cvsroot/classpathx module libxmlj<br>
+ make && make install
+ </code>
+ 
+ <br><li>For gjdoc add at the start of gnu/classpath/tools/gjdoc/Main.java (main):<br>
+ 
+ <code>
+   System.setProperty("javax.xml.transform.TransformerFactory",
+             "gnu.xml.libxmlj.transform.TransformerFactoryImpl");
+ </code>
+ 
+ <br><li>There is a ant build.xml file, but you can also compile it all by hand together with the external/jaxp/source files from Classpath which can be copied in the src direcrory as follows:<br>
+ 
+ <code>
+   find * -name \*.java | xargs gcj -O2 -g -o gjdoc \<br>
+   --main=gnu.classpath.tools.gjdoc.Main
+ </code>
+ 
+ <br><li>Create a simple gjdoc script and put it in your PATH:<br>
+ 
+ <code>
+   &#35;!/bin/sh<br>
+   CLASSPATH=/home/mark/src/libxmlj:/home/mark/src/gjdoc/src/resources \<br>
+   LD_LIBRARY_PATH=/usr/local/libxmlj/lib \<br>
+   /home/mark/src/gjdoc/src/gjdoc $*
+ </code>
+ 
+ <br><li>Configure classpah with --enable-gjdoc.
+ <br><li>Type make and go get yourself some coffe, take a shower and do some work in the garden.
+ </ol>
+ 
+ <p>There is one catch. The above setup is completely broken for some HTML
+ entities (see [bugs #4823] HTML entities such as auml and nbsp should be
+ put back in the API doc). So if you have  spectacular and mysterious
+ crashes then make sure that your java source files don't contain such
+ entities.
+ 
+ 
+ <p>Alternatively, you may also try the following command (the one used to generate the doc on <createlink url="http://developer.classpath.org/doc/">):<br>
+ <ul>
+ <code>
+ &#36;(GJDOC) -public -use \<br>
+         -sourcepath "$(sourcepath)" \<br>
+         -encoding UTF-8 \<br>
+         -breakiterator \<br>
+         -licensetext \<br>
+         -linksource \<br>
+         -splitindex \<br>
+         -d html \<br>
+         -doctitle "GNU Classpath $(VERSION)" \<br>
+         -windowtitle "GNU Classpath $(VERSION) Documentation" \<br>
+         -header $(classpathbox) -footer $(classpathbox) \<br>
+         -subpackages java:javax:org
+ </code>
+ </ul>
+ 
+ </faq>
+ </faq-section>
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/home.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/home.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/home.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/home.wml	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,65 ----
+ #include "include/layout.wml"
+ 
+ <set-var last-modified-author="prk">
+ <subject "GNU Classpath">
+ 
+ <box>
+ 
+ <boxtitle><a name="news">Classpath::Short News</a></boxtitle>
+ <boxitem>
+ <news newscount="8">
+ #include "newsitems.txt"
+ </news>
+ <p><createlink name="... more news" url="news.html">
+ </boxitem>
+ 
+ <boxtitle><a name="home">Classpath::Home</a></boxtitle>
+ 
+ <boxitem>
+ <p>GNU Classpath, Essential Libraries for Java, is a GNU project to 
+ create free core class libraries for use with virtual machines and compilers 
+ for the java programming language.
+ </P>
+ <P>Classpath is still a work in progress. The first public release 
+ will be version 1.0. There have been no public releases; however, pre-release 
+ source code is available via GNU's anonymous <A href="https://savannah.gnu.org/cvs/?group=classpath">
+ CVS server</A> , and snapshots of the Classpath tree have been released and 
+ are available from <A href="ftp://ftp.gnu.org/gnu/classpath/">ftp://ftp.gnu.org/gnu/classpath/</A>
+ </P>
+ </boxitem>
+ 
+ <boxtitle><a name="status">Classpath::Status</a></boxtitle>
+ <boxitem>
+ <p>
+ An up to date view of the current state of GNU Classpath can be
+ obtained by looking at these resources.
+   <ul>
+     <li><createlink url="tasks.html" name="Task descriptions"></li>
+     <li>GNU Classpath vs: <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk10-classpath.html" name="JDK 1.0"> <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk11-classpath.html" name="JDK 1.1"> <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk12-classpath.html" name="JDK 1.2"> <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk13-classpath.html" name="JDK 1.3"> <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath.html" name="JDK 1.4"> (updated nightly)</li>
+     <li>GNU Classpath <createlink url="http://www.object-refinery.com/classpath/mauve/report/" name="Mauve Results"></li>
+   </ul>
+ </p>
+ </boxitem>
+ 
+ <boxtitle><a name="roadmap">Classpath::Roadmap</a></boxtitle>
+ <boxitem>
+ <p>
+ GNU Classpath 1.0 will be fully compatible with the 1.1 and largely
+ compliant with the 1.2 API specification and will have a stable API
+ for interacting with virtual machines.
+ </p>
+ <p>
+ Current snapshot releases have implementations for the following
+ packages (and some subpackages) <code>java.applet, java.awt,
+ java.beans, java.io, java.lang, java.math, java.net, java.rmi,
+ java.security, java.sql, java.text, java.util, java.util.jar,
+ java.util.zip, org.omg</code>. Not all classes and methods are implemented yet,
+ but most are. many of the implemented classes are already up to the
+ 1.2 API spec. Some are already compliant with the 1.3 and 1.4 API
+ specification (there are preliminary implementations of
+ <code>java.nio</code> and <code>javax.swing</code>).
+ </p>
+ </boxitem>
+ 
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/include/layout.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/include/layout.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/include/layout.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/include/layout.wml	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,165 ----
+ #include "include/macros.wml"
+ 
+ ##
+ # Useful tags
+ #
+ 
+ <define-tag menutitle endtag=required>
+ <br><span class="menutitle">%body</span><br>
+ </define-tag>
+ 
+ <define-tag menuitem endtag=required>
+ <span class="menuitem">%body</span><br>
+ </define-tag>
+ 
+ <define-tag box endtag=required>
+ <table class="boxtable">%body</table>
+ </define-tag>
+ 
+ <define-tag boxtitle endtag=required>
+ <tr><td class="boxtitle">%body</td><tr>
+ </define-tag>
+ 
+ <define-tag boxitem endtag=required>
+ <tr><td class="boxitem">%body</td><tr>
+ </define-tag>
+ 
+ <define-tag boxitemalt endtag=required>
+ <tr><td class="boxitemalt">%body</td><tr>
+ </define-tag>
+ 
+ <define-tag boxhighlight endtag=required>
+ <tr><td class="boxhighlight">%body</td><tr>
+ </define-tag>
+ 
+ ##
+ # Site Layout
+ #
+ # Uses:
+ #	#SUBJECT#
+ #	#BODY#
+ #
+ 
+ <html>
+ <head>
+ 	<base href="http://www.gnu.org/software/classpath/">
+ 	<title>{#SUBJECT#} - GNU Project - Free Software Foundation (FSF)</title>
+       <LINK REV="made" HREF="mailto:webmasters@www.gnu.org">
+       <LINK REL="stylesheet" TYPE="text/css" HREF="http://www.gnu.org/software/classpath/savannah.css">
+ </head>
+ <body>
+ 
+ <table border="0">
+ 
+ <tr>
+ <td>
+ <applet code="Animation.class" CODEBASE="http://www.gnu.org/graphics" WIDTH="130" HEIGHT="86">
+   <param name="base-name" value="drop">
+   <param name="extension" value="jpg">
+   <param name="num-images" value="15">
+   <param name="image-sequence" value="1..10,9,7,5,3,1">
+   <param name="frame-delay" value="30">
+   <param name="inner-loop-repeat" value="2">
+   <param name="loop-delay" value="10000">
+   <param name="outer-loop-repeat" value="0">
+   <a href="http://www.gnu.org/graphics/drop-1.jpg">
+     <img src="http://www.gnu.org/graphics/drop-1.jpg" alt=" [image of the evil water droplet] " 
+     width="130" height="86" border="0">&#32;(jpeg 3k)
+   </a>
+   <a href="http://www.gnu.org/philosophy/gif.html">no gifs due to patent problems</a>
+ </applet>
+ </td><td>
+ <div align="center">
+ 
+ <!--img src="logo5.jpg"-->
+ <h1>GNU Classpath</h1>
+ </div>
+ 
+ </td>
+ </tr>
+ 
+ <tr>
+ <td class="menutable" valign="top">
+ 
+ ##
+ # Menu
+ #
+ 
+ <menutitle>Classpath</menutitle>
+ <menuitem><createlink name="Home" url="home.html"></menuitem>
+ <!--
+ <menuitem><createlink name="Status" url="home.html#status"></menuitem>
+ <menuitem><createlink name="Roadmap" url="home.html#roadmap"></menuitem>
+ -->
+ <menuitem><createlink name="License" url="license.html"></menuitem>
+ <menuitem><createlink name="Team" url="http://savannah.gnu.org/project/memberlist.php?group_id=85"></menuitem>
+ <menuitem><createlink name="Download" url="downloads/downloads.html"></menuitem>
+ <menuitem><createlink name="FAQ" url="faq/faq.html"></menuitem>
+ <menuitem><createlink name="News" url="home.html#news"></menuitem>
+ <menuitem><createlink name="Events" url="events/events.html"></menuitem>
+ <menuitem><createlink name="Planet Classpath" url="http://classpath.wildebeest.org/planet/"></menuitem>
+ 
+ <menutitle>Success Stories</menutitle>
+ <menuitem><createlink name="JVMs" url="stories.html#jvm"></menuitem>
+ <menuitem><createlink name="Research" url="stories.html#research"></menuitem>
+ 
+ <menutitle>Savannah</menutitle>
+ <menuitem><createlink name="Project Home" url="http://savannah.gnu.org/projects/classpath/"></menuitem>
+ <menuitem><createlink name="Bug Reports" url="bugs.html"></menuitem>
+ <!--
+ <menuitem><createlink name="Support" url="http://savannah.gnu.org/support/?group=classpath"></menuitem>
+ <menuitem><createlink name="Patches" url="http://savannah.gnu.org/patch/?group=classpath"></menuitem>
+ <menuitem><createlink name="Tasks" url="http://savannah.gnu.org/pm/?group=classpath"></menuitem>
+ -->
+ <menuitem><createlink name="Mailing Lists" url="http://savannah.gnu.org/mail/?group=classpath"></menuitem>
+ <menuitem><createlink name="News" url="http://savannah.gnu.org/news/?group=classpath"></menuitem>
+ <menuitem><createlink name="CVS" url="http://savannah.gnu.org/cvs/?group=classpath"></menuitem>
+ 
+ <menutitle>Development</menutitle>
+ <menuitem><createlink name="Tasks" url="http://developer.classpath.org/mediation/ClasspathOpenTasks"></menuitem>
+ <menuitem><createlink name="Docs" url="docs/docs.html"></menuitem>
+ <menuitem><createlink name="Testing" url="benchmarks.html#testing"></menuitem>
+ <menuitem><createlink name="Benchmarks" url="benchmarks.html#benchmarks"></menuitem>
+ 
+ <menutitle>Classpath Projects</menutitle>
+ <menuitem><createlink name="Inetlib" url="inetlib.html"></menuitem>
+ <menuitem><createlink name="Classpath Tools" url="cp-tools/"></menuitem>
+ 
+ <menutitle>External Tools</menutitle>
+ <menuitem><createlink name="External Packages" url="external.html#packages"></menuitem>
+ <menuitem><createlink name="ClasspathX" url="http://www.gnu.org/software/classpathx/"></menuitem>
+ <menuitem><createlink name="Mauve" url="http://sources.redhat.com/mauve/"></menuitem>
+ <menuitem><createlink name="Jessie" url="http://www.nongnu.org/jessie/"></menuitem>
+ <menuitem><createlink name="Jalopy" url="external.html#jalopy"></menuitem>
+ 
+ </td>
+ <td valign="top">
+ 
+ {#BODY#}
+ 
+ </td>
+ </tr>
+ 
+ <tr>
+ <td colspan="2">
+ 
+ ##
+ # Footer
+ #
+ 
+ <footer>
+ 
+ </td>
+ </tr>
+ </table>
+ 
+ </body>
+ 
+ # hook into the template
+ #
+ 
+ <define-tag subject>
+ {#SUBJECT#:%0:##}
+ </define-tag>
+ 
+ {#BODY#:
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/include/macros.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/include/macros.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/include/macros.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/include/macros.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,171 ----
+ ##
+ #
+ # Useful macros
+ #
+ # createlink, footer, news, newsitem, PROJECT-LIST, PROJECT
+ #
+ 
+ ##
+ #
+ # commented-code, code-line
+ #
+ # insert a commented code example in the text
+ #
+ # tag
+ #   commented-code
+ # attributes
+ #
+ # body
+ #   a list of code-lines
+ #
+ # tag
+ #   code-line
+ # attributes
+ #   code
+ # body
+ #   comment
+ #
+ <define-tag commented-code endtag=required>
+   <ul>
+   <table cellspacing="0" cellpadding="4">
+   %body
+   </table>
+   </ul>
+ </define-tag>
+ 
+ <define-tag code-line endtag=required>
+   <preserve code>
+   <set-var %attributes>
+   <tr><td valign="top"><code><get-var code></code></td><td style="padding-left: 20px;">%body</td></tr>
+   <tr bgcolor="#999999"><td colspan="2"></td></tr>
+   <restore code>
+ </define-tag>
+ 
+ 
+ ##
+ #
+ # createlink
+ #
+ # create a link (a tag); if no name given, uses url as name
+ #
+ # tag
+ #   createlink
+ # attributes
+ #   name, url
+ #
+ 
+ <define-tag createlink>
+ <preserve name>
+ <preserve url>
+ <set-var %attributes>
+ <ifeq <get-var name> "" <set-var name="<get-var url>">>
+ <a href="<get-var url>"><get-var name></a>
+ <restore url>
+ <restore name>
+ </define-tag>
+ 
+ ##
+ #
+ # Newslines
+ #
+ # Use the news and newsitem to create a table with news entries
+ #
+ <define-tag news endtag=required>
+   <preserve newscount>
+   <preserve __NEWSCNT>
+   <set-var __NEWSCNT=0>
+   <set-var %attributes>
+   <table>
+   %body
+   </table>
+   <restore __NEWSCNT>
+   <restore newscount>
+ </define-tag>
+ 
+ <define-tag newsitem endtag=required>
+   <preserve date>
+   <set-var %attributes>
+   <if <lt <get-var __NEWSCNT> <get-var newscount>>
+     "<tr><td><strong><get-var date></strong></td><td>%body</td></tr>"
+   >
+   <increment __NEWSCNT>
+   <restore date>
+ </define-tag>
+ 
+ 
+ ##
+ #
+ # Project table as custom tag, to ensure consistency and
+ # simplify layout changes in the table
+ #
+ # tag: PROJECT-LIST
+ # attributes:
+ #
+ # tag: PROJECT
+ # attributes: name url
+ #
+ 
+ <define-tag project-list endtag=required>
+   <table border="0" cellpadding="6">
+   %body
+   </table>
+ </define-tag>
+ 
+ <define-tag project endtag=required>
+   <preserve name>
+   <preserve url>
+   <set-var %attributes>
+   <tr>
+     <td valign="top"><a href="<get-var url>"><get-var name></a></td>
+     <td>%body</td>
+   </tr>
+   <restore url>
+   <restore name>
+ </define-tag>
+ 
+ 
+ ##
+ #
+ # Page footer
+ #
+ # tag: footer
+ #
+ 
+ 
+ <define-tag footer>
+ <BR><BR>
+ <HR>
+ <en>
+ Return to <A HREF="/home.html">GNU's home page</A>.
+ <P>
+ 
+ Please send FSF &amp; GNU inquiries &amp; questions to 
+ 
+ <A HREF="mailto:gnu@gnu.org"><EM>gnu@gnu.org</EM></A>.
+ There are also <A HREF="/home.html#ContactInfo">other ways to
+ contact</A> the FSF.
+ <P>
+ 
+ Please send comments on these web pages to
+ 
+ <A HREF="mailto:webmasters@www.gnu.org"><EM>webmasters@www.gnu.org</EM></A>,
+ send other questions to
+ <A HREF="mailto:gnu@gnu.org"><EM>gnu@gnu.org</EM></A>.
+ <P>
+ Copyright (C) 1999-2003 Free Software Foundation, Inc.,
+ 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ <P>
+ Verbatim copying and distribution of this entire article is
+ permitted in any medium, provided this notice is preserved.<P>
+ Updated:
+ </en>
+ $Date: 2005/07/02 20:32:08 $ $Author: mark $
+ <!--
+ <preserve info>
+ <set-var info=<get-file-properties <__file__>>>
+ <date <get-var info[2]>> <get-var last-modified-author>
+ <restore info>
+ -->
+ <HR>
+ </define-tag>
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/inetlib.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/inetlib.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/inetlib.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/inetlib.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,186 ----
+ #include "include/layout.wml"
+ 
+ <set-var last-modified-author="prk">
+ <subject "GNU Classpath inetlib">
+ 
+ <box>
+ <boxtitle><a name="main">Classpath::inetlib</a></boxtitle>
+ <boxitem>
+ <en>
+ 
+ <p>
+ GNU inetlib is a library of clients for common internet protocols.
+ The following protocols are currently supported:
+ </p>
+ 
+ <ul>
+ <li>Hypertext Transfer Protocol (HTTP)</li>
+ <li>File Transfer Protocol (FTP)</li>
+ <li>Simple Mail Transfer Protocol (SMTP)</li>
+ <li>Internet Message Access Protocol (IMAP)</li>
+ <li>Post Office Protocol (POP)</li>
+ <li>Network News Transfer Protocol (NNTP)</li>
+ <li>Lightweight Directory Access Protocol (LDAP) (alpha)</li>
+ <li>Gopher</li>
+ <li>Finger</li>
+ </ul>
+ 
+ <p>
+ The inetlib library is similar in intent to the Python internet protocols
+ library - the API is as close as possible to the intent of the underlying
+ protocol design. This allows for very efficient coding of user agents.
+ </p>
+ 
+ <p>
+ Additionally, inetlib includes URLStreamHandler implementations for some
+ of the protocols. These can be used to add support for the corresponding
+ URL scheme to the java.net.URL class.
+ </p>
+ 
+ </en>
+ </boxitem>
+ 
+ <boxtitle><a name="http">Classpath::inetlib::HTTP</a></boxtitle>
+ <boxitem>
+ <en>
+ 
+ <p>
+ The inetlib HTTP client supports HTTP/1.1 as described in RFC 2616, with
+ the following features:
+ </p>
+ 
+ <ul>
+ <li>Persistent connections</li>
+ <li>Basic and Digest authentication (RFC 2617)</li>
+ <li>HTTPS</li>
+ <li>HTTP proxies</li>
+ <li>HTTP/1.0 compatibility</li>
+ <li>Support for WebDAV methods and other HTTP extensions</li>
+ <li>Automatic decoding of the chunked transfer-coding</li>
+ <li>Parsing of HTTP date headers</li>
+ <li>Support for the 100-continue expectation</li>
+ </ul>
+ 
+ <p>
+ The design of the API is similar to the
+ <createlink url="http://www.webdav.org/neon/" name="neon"> 
+ WebDAV/HTTP library. A logical connection to the server is instantiated,
+ and multiple requests can be issued on this connection. Each request has
+ an atomic <code>dispatch</code> method which returns the response.
+ All I/O, authentication, etc is handled by registering callback objects
+ with the request prior to dispatch, which are notified during the dispatch
+ procedure as necessary. Simple byte-array content callbacks are supplied
+ which can manage any request/response content that fits in available memory.
+ </p>
+ 
+ <p>
+ An URL stream handler is provided, supporting the full HttpURLConnection
+ specification.
+ </p>
+ 
+ </en>
+ </boxitem>
+ 
+ <boxtitle><a name="ftp">Classpath::inetlib::FTP</a></boxtitle>
+ <boxitem>
+ <en>
+ 
+ <p>
+ The inetlib FTP client supports both active and passive mode FTP and all
+ transfer modes and representation types. The client implements RFC 959,
+ with the following exceptions and limitations:
+ </p>
+ 
+ <ul>
+ <li>Only one concurrent transfer connection is supported</li>
+ <li>The STAT, HELP, SITE, SMNT, and ACCT commands are not supported</li>
+ <li>The TYPE command does not allow alternatives to the default bytesize
+ (Non-print), and local bytesize is not supported</li>
+ </ul>
+ 
+ <p>
+ An URL stream handler is provided, which allows the setting of transfer modes
+ and representation types by means of the <code>setRequestProperty</code>
+ method.
+ </p>
+ 
+ </en>
+ </boxitem>
+ 
+ <boxtitle><a name="smtp">Classpath::inetlib::SMTP</a></boxtitle>
+ <boxitem>
+ <en>
+ 
+ <p>
+ The inetlib SMTP client fully implements RFC 2821 including the ESMTP
+ extension standard.
+ </p>
+ 
+ <p>
+ The client also implements TLS negotiation (RFC 3207) and SASL
+ authentication (RFC 2554).
+ </p>
+ 
+ </en>
+ </boxitem>
+ 
+ <boxtitle><a name="imap">Classpath::inetlib::IMAP</a></boxtitle>
+ <boxitem>
+ <en>
+ 
+ <p>
+ The inetlib IMAP client fully implements IMAP4rev1 and includes the
+ following features:
+ </p>
+ 
+ <ul>
+ <li>Extensible authentication using any available SASL mechanism</li>
+ <li>TLS negotiation (RFC 2595)</li>
+ <li>Automatic UTF-7imap folder name decoding/encoding</li>
+ <li>IMAP over SSL</li>
+ </ul>
+ 
+ </en>
+ </boxitem>
+ 
+ <boxtitle><a name="pop3">Classpath::inetlib::POP3</a></boxtitle>
+ <boxitem>
+ <en>
+ 
+ <p>
+ The inetlib POP client implements version 3 only, as specified in RFC 1939,
+ with the exception of the no-arg LIST and UIDL commands (use STAT followed
+ by multiple LIST and/or UIDL instead).
+ It supports the following features:
+ </p>
+ 
+ <ul>
+ <li>The POP3 extension mechanism CAPA</li>
+ <li>Extensible authentication using any available SASL mechanism via
+ the AUTH mechanism (RFC 1734)</li>
+ <li>TLS negotiation (RFC 2595)</li>
+ </ul>
+ 
+ </en>
+ </boxitem>
+ 
+ <boxtitle><a name="nntp">Classpath::inetlib::NNTP</a></boxtitle>
+ <boxitem>
+ <en>
+ 
+ <p>
+ The inetlib NNTP client implements all of RFC 977, and many of the common
+ NNTP extensions specified in RFC 2980. It supports the XOVER and XHDR
+ commands, and simple authentication.
+ </p>
+ 
+ <p>
+ There is also a newsrc mechanism for storing newsgroup subscriptions and read
+ articles in an implementation-independent manner, including a file-based
+ implementation.
+ </p>
+ 
+ </en>
+ </boxitem>
+ </box>
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/license.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/license.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/license.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/license.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ #include "include/layout.wml"
+ <set-var last-modified-author="prk">
+ 
+ <subject "GNU Classpath License">
+ 
+ <box>
+ <boxtitle><a name="license">Classpath::License</a></boxtitle>
+ <boxitem>
+ <en>
+ <p>
+ Classpath is distributed under the terms of the
+ <createlink url="/copyleft/gpl.html" name="GNU General Public License"> with
+ the following clarification and special exception.
+ </p>
+ 
+ <p>
+ <blockquote>
+ <p>
+ <code>
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ </code>
+ </p>
+ <p>
+ <code>
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version.
+ </code>
+ </p>
+ </blockquote>
+ </p>
+ 
+ <p>
+ As such, it can be used to run, create and distribute a large class of
+ applications and applets. When GNU Classpath is used unmodified as the
+ core class library for a virtual machine, compiler for the java languge,
+ or for a program written in the java programming language it does not
+ affect the licensing for distributing those programs directly.
+ </p>
+ 
+ </en>
+ </boxitem>
+ 
+ <boxtitle><a name="documentation">Classpath::Documentation Redistribution Policy</a></boxtitle>
+ <boxitem>
+ 
+ GNU Documentation is unique because of our attitude towards it. We 
+ believe the reader should be free to copy and redistribute it, just 
+ like our software. Originally, all our documentation was released under 
+ a short <createlink url="/licenses/licenses.html#WhatIsCopyleft" name="Copyleft"> 
+ license, or under the <createlink url="/licenses/licenses.html#GPL" 
+ name="GNU General Public License (GPL)"> itself; in 2001 the 
+ <createlink url="/licenses/licenses.html#FDL" 
+ name="Free Documentation License (FDL)"> was created to 
+ address certain needs that were not met by licenses originally designed 
+ for software.
+ </boxitem>
+ 
+ </box>
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/news.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/news.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/news.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/news.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,15 ----
+ #include "include/layout.wml"
+ 
+ <set-var last-modified-author="prk">
+ <subject "GNU Classpath">
+ 
+ <box>
+ 
+ <boxtitle><a name="ShortNews">Classpath::News</a></boxtitle>
+ <boxitem>
+ <news newscount="9999">
+ #include "newsitems.txt"
+ </news>
+ </boxitem>
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/newsitems.txt gcc-4.1.0/libjava/classpath/doc/www.gnu.org/newsitems.txt
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/newsitems.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/newsitems.txt	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,197 ----
+ <newsitem date="02 Nov 2005">
+ <createlink name="GNU Classpath 0.19"
+             url="announce/20051102.html">
+ </newsitem>
+ 
+ <newsitem date="06 Sep 2005">
+ <createlink name="GNU Classpath 0.18"
+             url="announce/20050906.html">
+ </newsitem>
+ 
+ <newsitem date="03 Aug 2005">
+ <createlink name="Generics Branch Merge Announcement"
+             url="http://lists.gnu.org/archive/html/classpath/2005-08/msg00002.html">
+ </newsitem>
+ 
+ <newsitem date="01 Aug 2005">
+ <createlink name="Bugs moved to bugzilla"
+             url="bugs.html">
+ </newsitem>
+ 
+ <newsitem date="15 Jul 2005">
+ <createlink name="GNU Classpath 0.17"
+             url="announce/20050715.html">
+ </newsitem>
+ 
+ <newsitem date="30 Jun 2005">
+ <createlink name="GNU Classpath 0.16"
+             url="announce/20050630.html">
+ </newsitem>
+ 
+ <newsitem date="29 Apr 2005">
+ <createlink name="GNU Classpath 0.15"
+             url="announce/20050429.html">
+ </newsitem>
+ 
+ <newsitem date="25 Feb 2005">
+ <createlink name="GNU Classpath 0.14"
+             url="announce/20050226.html">
+ Base core class libraries for the GCC 4.0 (gcj) and Kaffe 1.1.5 releases.
+ </newsitem>
+ 
+ <newsitem date="18 Feb 2005">
+ <createlink
+  name="The gui branch is dead!"
+  url="http://lists.gnu.org/archive/html/classpath/2005-02/msg00081.html">
+  Long live the gui work.
+ </newsitem>
+ 
+ <newsitem date="18 Feb 2005">
+ <createlink name="Escape the Java Trap @ Fosdem 2005"
+             url="events/escape_fosdem05.html">
+ </newsitem>
+ 
+ <newsitem date="14 Feb 2005">
+ <createlink name="Calientra runs on GNU Classpath" 
+             url="http://lists.gnu.org/archive/html/classpath/2005-02/msg00065.html">
+ </newsitem>
+ 
+ <newsitem date="07 Jan 2005">
+ <createlink name="GNU Classpath 0.13" url="announce/20050107.html">
+ </newsitem>
+ 
+ <newsitem date="15 Nov 2004">
+ <createlink name="GNU Classpath 0.12" url="announce/20041115.html">
+ </newsitem>
+ 
+ <newsitem date="06 Nov 2004">
+ GNU Classpath is full API compatible with JDK 1.0 (<createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk10-classpath.html" name="japi results for 1.0">)
+ </newsitem>
+ 
+ <newsitem date="03 Oct 2004">
+ GNU Classpath Tools (cp-tools) now part of savannah classpath project (<createlink url="http://lists.gnu.org/archive/html/classpath/2004-10/msg00012.html" name="link">)
+ </newsitem>
+ 
+ <newsitem date="13 Sep 2004">
+ <createlink name="GNU Classpath 0.11" url="announce/20040913.html">
+ </newsitem>
+ 
+ <newsitem date="03 Sep 2004">
+ <createlink url="ftp://ftp.gnu.org/gnu/classpath/inetlib-1.1.tar.gz" name="inetlib 1.1"> released.
+ </newsitem>
+ 
+ <newsitem date="15 Aug 2004">
+ <createlink url="http://lists.gnu.org/archive/html/classpath-patches/2004-08/msg00078.html" name="JSpinner"> added to classpath.
+ </newsitem>
+ 
+ <newsitem date="13 Aug 2004">
+ <createlink url="http://lists.gnu.org/archive/html/classpath/2004-08/msg00076.html" name="javax.crypto and javax.security"> implementation added to classpath.
+ </newsitem>
+ 
+ <newsitem date="05 Aug 2004">
+ CVS generics-branch started for java 1.5 related changes. [<createlink name="more..." url="http://lists.gnu.org/archive/html/classpath/2004-08/msg00030.html">]
+ </newsitem>
+ 
+ <newsitem date="02 Aug 2004">
+ Latest <createlink name="AWT" url="http://www.klomp.org/mark/classpath/awtdemo-2004-jul-25.png"> and <createlink name="SWING" url="http://www.klomp.org/mark/classpath/swingdemo-2004-jul-25.png"> screenshots by Mark.
+ </newsitem>
+ 
+ <newsitem date="27 Jul 2004">
+ AWT bug reports are now on <createlink name="GCC Bugzilla" url="http://gcc.gnu.org/bugzilla/">
+ </newsitem>
+ 
+ <newsitem date="23 Jul 2004">
+ HTTP client added to inetlib
+ </newsitem>
+ 
+ <newsitem date="27 Jul 2004">
+ Directory with Examples added to the project.
+ </newsitem>
+ 
+ <newsitem date="22 Jul 2004">
+ Latest "montly-changes" for AWT committed. This now required GTK+ 2.4.
+ </newsitem>
+ 
+ <newsitem date="18 Jul 2004">
+ Roman Kennke's <createlink name="automated mauve reports" url="http://ontographics.com/classpath/mauve/mauvereport.cgi">.
+ </newsitem>
+ 
+ <newsitem date="13 Jul 2004">
+ <createlink name="JC 1.2.1" url="http://lists.gnu.org/archive/html/classpath/2004-07/msg00168.html"> released
+ </newsitem>
+ 
+ <newsitem date="12 Jul 2004">
+ <createlink name="GNU Classpath 0.10" url="announce/20040712.html">
+ </newsitem>
+ 
+ <newsitem date="10 Jul 2004">
+ <createlink name="SableVM 1.1.6" url="http://lists.gnu.org/archive/html/classpath/2004-07/msg00148.html">
+ </newsitem>
+ 
+ <newsitem date="06 Jul 2004">
+ <createlink name="Emacs support for GNU Classpath coding style" url="http://lists.gnu.org/archive/html/classpath/2004-07/msg00077.html">
+ </newsitem>
+ 
+ <newsitem date="14 Jun 2004">
+ <createlink name="Inetlib 1.0 released" url="http://lists.gnu.org/archive/html/classpath/2004-06/msg00077.html">
+ </newsitem>
+ 
+ <newsitem date="14 Jun 2004">
+ <createlink name="Some fresh Swing snapshots" url="http://gadek.debian.net/SableVM-Swing-new/"> from SableVM.
+ </newsitem>
+ 
+ <newsitem date="02 Jun 2004">
+ <createlink name="SableVM 1.1.5" url="http://lists.gnu.org/archive/html/classpath/2004-06/msg00011.html"> released
+ </newsitem>
+ 
+ <newsitem date="22 May 2004">
+ <createlink name="JamVM 1.1.4" url="http://mail.gnu.org/archive/html/classpath/2004-05/msg00090.html"> released
+ </newsitem>
+ 
+ <newsitem date="15 May 2004">
+ <createlink name="SableVM 1.1.4" url="http://mail.gnu.org/archive/html/classpath/2004-05/msg00075.html"> released
+ </newsitem>
+ 
+ <newsitem date="2 May 2004">
+ <createlink name="GNU Classpath 0.09" url="announce/20040502.html"> released
+ </newsitem>
+ 
+ <newsitem date="29 Apr 2004">
+ Use Eclipse to hack GNU Classpath; see the <createlink url="http://mail.gnu.org/archive/html/classpath/2004-04/msg00371.html" name="instructions">
+ </newsitem>
+ 
+ <newsitem date="12 Apr 2004">
+ <createlink url="http://mail.gnu.org/archive/html/classpath/2004-04/msg00228.html" name="SableVM 1.1.3"> released
+ </newsitem>
+ 
+ <newsitem date="12 Apr 2004">
+ <createlink url="http://mail.gnu.org/archive/html/classpath/2004-04/msg00226.html" name="JC 1.1"> released ; upgraded to GNU Classpath 0.08.
+ </newsitem>
+ 
+ <newsitem date="12 Apr 2004">
+ <createlink url="http://mail.gnu.org/archive/html/classpath/2004-04/msg00225.html" name="Jikes RVM 2.3.2"> released ; upgraded to GNU Classpath 0.08 and completely built with free tools!
+ </newsitem>
+ 
+ <newsitem date="8 Apr 2004">
+ The big NIO patch: java.io file operations now rely on java.nio.channels
+ </newsitem>
+ 
+ <newsitem date="29 Mar 2004">
+ <createlink name="JamVM-1.1.2 " url="http://mail.gnu.org/archive/html/classpath/2004-03/msg00267.html"> released 
+ </newsitem>
+ 
+ <newsitem date="26 Mar. 2004">
+ <createlink name="Planet Classpath" url="http://classpath.wildebeest.org/planet/"> launched; it aggregates the blogs of most Classpath's developers
+ </nextitem>
+ 
+ <newsitem date="19 Mar. 2004">
+ Sascha has released <createlink name="ServiceFactory" url="http://mail.gnu.org/archive/html/classpath/2004-03/msg00153.html">
+ </nextitem>
+ 
+ <newsitem date="13 Mar. 2004">
+ <createlink name="GNU Classpath 0.08" url="announce/20040313.html"> released
+ </nextitem>
+ 
+ <newsitem date="21+22 Feb. 2004">
+ GNU Classpath at the <createlink name="FOSDEM'04" url="http://www.fosdem.org/2004/">: see the <createlink name="report" url="events/fosdem04.html">
+ </newsitem>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/savannah.css gcc-4.1.0/libjava/classpath/doc/www.gnu.org/savannah.css
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/savannah.css	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/savannah.css	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /*
+  *
+  * the savannah project
+  * copyright 2002 (c) mathieu roy <yeupou@gnu.org>
+  * see the changelog file for a detailed list of changes
+  *
+  *  http://savannah.gnu.org 
+  *
+  * this program is free software; you can redistribute it and/or
+  * modify it under the terms of the gnu general public license
+  * as published by the free software foundation; either version 2
+  * of the license, or (at your option) any later version.
+  *
+  * this program 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 general public license for more details.
+  *
+  * you should have received a copy of the gnu general public license
+  * along with this program; if not, write to the free software
+  * foundation, inc., 59 temple place - suite 330, boston, ma  02110-1301, usa.
+  *
+  * $id: savannah.css,v 1.33 2002/10/29 10:53:12 yeupou exp $
+  *
+  *
+  * as savannah.theme is the default theme of images, this css
+  * is the default css2 style definition
+  * any valuable changes added that any theme should implement
+  * should be implemented here
+  *
+ */
+ 
+ /* general stuff */
+ body { 
+   margin-top: 0.5%;
+   margin-left: 0.5%;
+   margin-right: 0.5%;
+   margin-bottom: 0.5%;
+   background-color: #ffffff;
+   font-family: arial,helvetica;
+   font-size: small;
+   color: #333333;
+ }
+ 
+ a { text-decoration: none; color: #841212;}
+ a:hover { text-decoration: underline; color: #ff0000; }
+ a:active { color: #ff0000; }
+ 
+ .smaller { font-size: smaller; }
+ .small { font-size: small; }
+ .xsmall { font-size: xx-small; }
+ .center { text-align: center; }
+ .left { text-align: left; }
+ .error { font-weight: bold; color: #ff0000; }
+ .bold { font-weight: bold; }
+ .feedback { color: red; }
+ 
+ pre,tt { font-family: courier,sans-serif; }
+ input {
+         background-color: #fff9e0;
+         color: #841212;
+ }
+ input:hover { color: #ff0000; }
+ select {
+          background-color: #fff9e0;
+          color: #841212;
+ }
+ 
+ /* commented out because of a bug in Mozilla 1.2* and 1.1
+ select:hover { color: #ff0000; }
+ */
+ textarea {
+            background-color: #fff9e0;
+            color: #000000;
+ }
+ textarea:hover { color: #ff0000; }
+ .footer { font-size: x-small; color: #333333; }
+ .standardtable { width: 99%; border-spacing: 0; border: 0; color: #333333; }
+ 
+ /* content frame specific */
+ .contenttable {
+   background-color: #ffffff; 
+   vertical-align: top;
+   width: 99%; 
+   border-spacing: 0; 
+   border-bottom: thin solid #333333; 
+   border-top: thin solid #333333;  
+   border-right: thin solid #333333;
+ }
+ 
+ /* group menu specific (see tabs and tabselect too) */
+ .groupmenutable { background-color: #f9e4a2; width: 100% ; border-top: thin solid #000000; border-bottom: thin solid #000000; }
+ 
+ /* left menu specific */
+ .menutable { vertical-align: top; background-color: #f4d495; width: 150px; border-spacing: 0; border: 0; font-size: small;}
+ .menutitle { vertical-align: top; font-weight: bold; text-align: left; color: #333333; }
+ .menuitem { vertical-align: top; text-align: right; color: #333333; }
+ .menusearch { font-size: xx-small; } 
+ 
+ /* classic box */
+ .boxtable { width: 99%; vertical-align: top; border-spacing: 1px; border: 0; }
+ .boxtitle { background-image: url("/images/savannah.theme/leopard.png"); background-color: #eddb5a; font-weight: bold; text-align: center; text-transform: capitalize; color: #000000; }
+ .boxitem { /*background-image: url("/images/savannah.theme/sand.png");*/ background-color: #fff9e0; text-align: left; color: #333333; }
+ .boxitemalt { background-color: #ffffff; text-align: left; color: #333333; }
+ .boxhighlight { background-color: #ffe0db; text-align: left; color: #333333; }
+ 
+ /* priority  */
+ .priora { background-color: #f9f7f2; }
+ .priorb { background-color: #f4f0e8; }
+ .priorc { background-color: #efeade; }
+ .priord { background-color: #eae3d5; }
+ .priore { background-color: #e2dbcc; }
+ .priorf { background-color: #ddd7c7; }
+ .priorg { background-color: #d8d1be; }
+ .priorh { background-color: #d6ceb8; }
+ .priori { background-color: #d3caaf; }
+ 
+ /* index.php */
+ .indexcenter { vertical-align: top; width: 65%; color: #333333; }
+ .indexright { vertical-align: top; width: 35%; color: #333333; }
+ 
+ /* tabs */
+ .tabselect { color: #000000; font-weight: bold; }
+ .tabselect:visited { font-weight: bold;}
+ .tabselect:hover { color:#ff0000; font-weight: bold; }
+ 
+ .titlebar { text-decoration:none; color:#000000; font-size: small; font-weight: bold; }
+ .develtitle { color:#000000; font-weight: bold; }
+ .legallink { color:#000000; font-weight: bold; }
+ 
+ 
+ 
+ /* this is the original sourceforge css.. we let this stuff here until this savaannah css is fully used */
+ 
+ span.center { text-align: center; }
+ span.boxspace { font-size: 2pt; }
+ span.alignright { text-align: right }
+ span.maintitlebar { font-size: 10pt; color: #ffffff; }
+ span.titlebar { text-align: center; font-size: larger; color: #000000; font-weight: bold; }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/stories.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/stories.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/stories.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/stories.wml	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,225 ----
+ #include "include/layout.wml"
+ 
+ <set-var last-modified-author="prk">
+ 
+ <subject "GNU Classpath Success Stories">
+ 
+ <box>
+ <boxtitle><a name="jvm">Classpath::JVM</a></boxtitle>
+ 
+ <boxitem>
+ <en>
+ <p>
+ The primary target for GNU Classpath was originally <createlink
+ url="http://www.hungry.com/old-hungry/products/japhar/" name="Japhar">.  Japhar-0.07 works out-of-the-box with
+ GNU Classpath-0.00.  Current Japhar versions do not work with current versions
+ of GNU Classpath.
+ </p>
+ 
+ <p>In the meantime, many other JVM have choosen GNU Classpath as their library implementation:</p>
+ 
+ <table border="0" width="100%" cellpadding="6">
+ <!--tr><th>JVM</th><th>Description</th></tr-->
+ 
+ <project url="http://aegisvm.sourceforge.net/" name="AegisVM">
+ The Aegis VM Project is an on-going effort to develop a lightweight,
+ secure virtual machine for executing Java bytecode.  The Aegis VM will
+ eventually feature a modular bytecode verification architecture that
+ allows user-defined static verification procedures to be integrated
+ into the VM's dynamic linking process through pluggable verification
+ modules.
+ </project>
+ 
+ <project url="http://gcc.gnu.org/java/" name="GCJ">
+ Although GNU Classpath cannot be directly compiled for use with
+ GCJ at this time, a lot of work has been done to merge GCJ class
+ library code and GNU Classpath class library code.  This has resulted
+ in a better version of each.  The current merge status between the two
+ projects is <createlink url="http://gcc.gnu.org/java/libgcj-classpath-compare.html"
+ name="located here">.
+ </project>
+ 
+ <project url="http://www.ikvm.net/" name="IKVM.NET">
+ A JVM for the .NET platform.
+ Runs on top of <createlink url="http://www.go-mono.org/" name="Mono">.
+ </project>
+ 
+ <project url="http://sourceforge.net/projects/jamiga" name="JAmiga">
+ A JRE implementation for the Amiga Platform.
+ </project>
+ 
+ <project url="http://jamvm.sourceforge.net/" name="JamVM">
+ JamVM is a Java Virtual Machine which conforms to the JVM specification version 2 (blue book). In comparison to most other VM's (free and commercial) it is extremely small, with a stripped executable on PowerPC of only ~100K, and Intel 80K. However, unlike other small VMs (e.g. KVM) it is designed to support the full specification, and includes support for object finalisation, the Java Native Interface (JNI) and the Reflection API. 
+ </project>
+ 
+ <project url="http://www.oberon.ethz.ch/jaos/" name="Jaos">
+ The Jaos VM is a JVM using GNU Classpath implemented on top of the
+ <createlink url="http://bluebottle.ethz.ch/" name="Aos/Bluebottle"> kernel.
+ This kernel offers many useful features like garbage collected memory
+ management, dynamic module loading, and object-oriented model. This makes the
+ implementation of a JVM particularly attractive and simple.
+ </project>
+ 
+ <project url="http://jcvm.sourceforge.net/" name="JC">
+ JC is a Java virtual machine implementation that converts class 
+ files into C source files using the Soot Java bytecode analysis
+ framework, compiles them with GCC, and loads them using a built-in
+ ELF object file loader. 
+ </project>
+ 
+ <project url="http://www.ibm.com/developerworks/oss/jikesrvm/" name="Jikes RVM">
+ Jikes RVM uses GNU Classpath for all of its libraries.  Instructions for using
+ Classpath are provided in the Jikes RVM user's guide as of the Jikes RVM
+ release 2.2.1 (4/7/03). Nightly regression tests are run against the latest
+ Classpath release and the Classpath CVS head. The results are posted on the
+ jikesrvm-regression mailing list, which is archived and available on the Jikes
+ RVM home page.
+ </project>
+ 
+ <project url="http://jnode.sourceforge.net/" name="JNode">
+ JNode is a <i>Java New Operating System Design Effort</i>. 
+ The goal is to get an simple to use and install Java operating system for personal use. Any java application should run on it, fast &amp; secure! 
+ </project>
+ 
+ <project url="http://www.eecg.toronto.edu/~doylep/jupiter/" name="Jupiter">
+ This VM also uses a modified version of the GNU Classpath libraries.
+ </project>
+ 
+ <project url="http://www.kaffe.org/" name="Kaffe">
+ Kaffe OpenVM is a complete virtual machine, library framework and
+ tools for programming in the java language. It has its own
+ implementation of part of the core libraries, but uses large parts of
+ the GNU Classpath framework.
+ </project>
+ 
+ <project url="http://kissme.sourceforge.net/" name="Kissme">
+ This VM is almost always guaranteed to work with GNU Classpath CVS 
+ source code.
+ </project>
+ 
+ <project url="http://www.intel.com/research/mrl/orp/" name="ORP">
+ Information about ORP
+ can also be found at <createlink url="http://orp.sourceforge.net/"
+ name="http://orp.sourceforge.net/">.  ORP 1.10 does not work with 
+ current GNU Classpath libraries.  Information is available in the
+ mailing list archives.
+ </project>
+ 
+ <project url="http://www.sablevm.org/" name="SableVM">
+ SableVM is a robust, extremely portable, efficient, and
+ specifications-compliant Java Virtual Machine that aims to be easy to
+ maintain and to extend. It features a state-of-the-art, efficient
+ interpreter engine. Its source code is very accessible and easy to
+ understand, and has many robustness features that have been the object
+ of careful design.
+ </project>
+ 
+ <project url="http://www.cacaojvm.org/" name="CACAO">
+ CACAO is a research Java Virtual Machine developed at the Vienna
+ University of Technology. It has a compile-only approach, which means
+ there is no interpreter at all but a JIT compiler ported to different
+ architectures, like Alpha, i386, MIPS, PowerPC, and x86_64. The main
+ aim of CACAO is to keep the JIT compilation time as small as possible
+ while producing quite fast code.
+ </project>
+ 
+ </table>
+ </en>
+ 
+ <H4>Other projects using GNU classpath</H4> 
+ <en>
+ <table border="0" width="100%" cellpadding="6">
+ <!--tr><th>Project</th><th>Description</th></tr-->
+ <project url="http://www.flex-compiler.lcs.mit.edu/" name="Flex Compiler">
+ FLEX is a compiler infrastructure written in Java for Java. Applications 
+ include a program analysis and transformation framework for distributed 
+ and embedded systems. Native backends exist for the StrongARM and MIPS 
+ processors; it can also generate portable C code that can run on any 
+ platform with gcc.
+ </project>
+ </table>
+ </en>
+ 
+ </boxitem>
+ 
+ <!--
+ <boxtitle><a name="applications">Classpath::Applications</a></boxtitle>
+ <boxitem>
+ Having an application running on a JVM using classpath implicitly proves that
+ classpath is fit enough for its purpose.
+ <p>The following free software applications have been run on classpath-based environments:
+ <ul>
+ <li>Eclipse (on gcj)
+ </ul>
+ </boxitem>
+ -->
+ 
+ <boxtitle><a name="research">Classpath::Research</a></boxtitle>
+ <boxitem>
+ <p>Many research projects have choosen GNU Classpath as their implementation of choice for
+ the Java Libraries, mostly because it is free software, which means the freedom to use,
+ analyze, and change the code for one's purposes.</p>
+ 
+ ##
+ # Shortcut for table entries
+ #
+ <define-tag entry endtag=required>
+ <preserve name>
+ <set-var %attributes>
+ <tr>
+ 	<td valign="top"><get-var name></td>
+ 	<td>%body</td>
+ </tr>
+ <restore name>
+ </define-tag>
+ 
+ <p>The following research projects are using GNU Classpath:
+ <table border="0" cellpadding="6">
+ <!--tr><th>Project</th><th>Description</th>
+ </tr-->
+ 
+ <entry name="Intel's ORP">
+ <createlink url="http://orp.sourceforge.net/" name="ORP"> (Open Runtime Platform) is an open source research infrastructure project that provides these features thus enabling the rapid evolution of systems research of dynamic compilation and memory management.
+ 
+ <p>[<createlink name="Publications" url="http://www.intel.com/research/mrl/library/java-pubs.htm">]
+ </entry>
+ 
+ <entry name="IBM's Jikes RVM">
+ <createlink url="http://www-124.ibm.com/developerworks/oss/jikesrvm/" name="Jikes RVM"> (the Jikes Research Virtual Machine) provides the research community with a flexible open testbed to prototype virtual machine technologies and experiment with a large variety of design alternatives. The virtual machine infrastructure in the Jikes RVM release was independently developed as part of the Jalapeño research project at the IBM T.J. Watson Research Center. 
+ 
+ <p>[<createlink name="Publications" url="http://www-124.ibm.com/developerworks/oss/jikesrvm/info/papers.shtml">]
+ </entry>
+ 
+ <entry name="SableVM">
+ <createlink url="http://www.sablevm.org/" name="SableVM"> SableVM is a
+ highly portable and efficient Java virtual machine, using
+ state-of-the-art interpratation techniques. Its goals are to be
+ reasonably small, fast, and compliant with the various specifications
+ (JVM specification, JNI, invocation interface, etc.).
+ 
+ <p> The initial development of SableVM was done as part of the
+ Ph.D. research project of <createlink name="Etienne Gagnon"
+ url="http://www.info.uqam.ca/~egagnon">. Continuing development of
+ SableVM project involves the <createlink name="Sable Research Group"
+ url="http://www.sable.mcgill.ca/"> (McGill University and Universite
+ du Quebec a Montreal), and other generous <createlink name="Free
+ software contributors"
+ url="http://devel.sablevm.org/svn/repository/sablevm/branches/staging/AUTHORS">.
+ 
+ <p>[<createlink name="SableVM Documents" url="http://www.sablevm.org/docs.html">]
+ <br>[<createlink name="Sable Publications (Papers)" url="http://www.sable.mcgill.ca/publications/papers/">]
+ </entry>
+ 
+ <entry name="Jaos">
+ <createlink name="Jaos" url="http://www.oberon.ethz.ch/jaos/"> (Java on Active Object System) is a Java Virtual Machine for the Bluebottle System and a case study in interoperability between the Oberon and Java Languages.
+ 
+ <p>Jaos was developed as part of Patrik Reali's Ph.D research project at the <createlink name="Programming Languages and Run-Time Systems Research Group" url="http://www.cs.inf.ethz.ch/gutknecht/"> at <createlink name="ETH Zurich" url="http://www.ethz.ch">.
+ 
+ <p>[<createlink name="Publications" url="http://www.oberon.ethz.ch/jaos/docs/index.html">]
+ </entry>
+ 
+ </table>
+ 
+ </boxitem>
+ 
+ </box>
diff -Nrcpad gcc-4.0.2/libjava/classpath/doc/www.gnu.org/tasks.wml gcc-4.1.0/libjava/classpath/doc/www.gnu.org/tasks.wml
*** gcc-4.0.2/libjava/classpath/doc/www.gnu.org/tasks.wml	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/doc/www.gnu.org/tasks.wml	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,14 ----
+ <html>
+ <head>
+ <title>GNU Classpath Tasklist - GNU Project - Free Software Foundation (FSF)</title>
+ <META HTTP-EQUIV="Refresh"
+       CONTENT="0; URL=http://developer.classpath.org/mediation/ClasspathOpenTasks">
+ </head>
+ <body>
+ This page has moved. If your browser doesn't automatically redirect to
+ its new location, click
+ <a href="http://developer.classpath.org/mediation/ClasspathOpenTasks">
+ http://developer.classpath.org/mediation/ClasspathOpenTasks</a>.
+ </body>
+ </html>
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/Makefile.am gcc-4.1.0/libjava/classpath/examples/Makefile.am
*** gcc-4.0.2/libjava/classpath/examples/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/Makefile.am	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,103 ----
+ ## Input file for automake to generate the Makefile.in used by configure
+ 
+ # Setup the compiler to use the GNU Classpath library we just build
+ if FOUND_GCJ
+ JCOMPILER = $(GCJ) --bootclasspath '$(top_builddir)/lib' --classpath . -C
+ else
+ if FOUND_JIKES
+ JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
+ else
+ if FOUND_GCJX
+ JCOMPILER = $(GCJX) -bootclasspath '' -sourcepath '' -classpath $(top_builddir)/lib:.
+ else
+ if FOUND_ECJ
+ JCOMPILER = $(ECJ) -bootclasspath '$(top_builddir)/lib' -classpath .
+ else
+ error dunno how to setup the JCOMPILER and compile
+ endif
+ endif
+ endif
+ endif
+ 
+ # All our example java source files
+ EXAMPLE_JAVA_FILES = $(srcdir)/gnu/classpath/examples/*/*.java $(srcdir)/gnu/classpath/examples/*/*/*.java $(srcdir)/gnu/classpath/examples/*/*/*/*.java
+ 
+ # The example C source files
+ EXAMPLE_C_FILES = $(srcdir)/gnu/classpath/examples/*/*.c
+ 
+ # The zip files with classes we want to produce.
+ EXAMPLE_ZIP = examples.zip
+ 
+ # Extra objects that will not exist until configure-time
+ BUILT_SOURCES = $(EXAMPLE_ZIP)
+ 
+ # the png icons we use in some of the examples.
+ EXAMPLE_ICONS = $(srcdir)/gnu/classpath/examples/icons/*.png
+ 
+ # The example specific README files.
+ READMES = $(srcdir)/gnu/classpath/examples/CORBA/swing/README.html
+ 
+ # All the files we find "interesting"
+ ALL_EXAMPLE_FILES = $(EXAMPLE_JAVA_FILES) $(EXAMPLE_C_FILES) $(EXAMPLE_ICONS) $(READMES)
+ 
+ # Some architecture independent data to be installed.
+ example_DATA = $(EXAMPLE_ZIP) README
+ 
+ # Where we want these data files installed.
+ exampledir = $(pkgdatadir)/examples
+ 
+ # Make sure all sources and icons are also installed so users can use them.
+ # (Be careful to strip off the srcdir part of the path when installing.)
+ install-data-local:
+ 	srcdir_cnt=`echo $(srcdir) | wc -c`; \
+ 	for file in $(ALL_EXAMPLE_FILES); do \
+ 	  f=`echo $$file | cut -c$$srcdir_cnt-`; \
+ 	  fdir=`dirname $$f`; \
+ 	  if test ! -d $(DESTDIR)/$(pkgdatadir)/examples/$$fdir; then \
+ 	    echo "$(mkinstalldirs) $(DESTDIR)/$(pkgdatadir)/examples/$$fdir"; \
+ 	    $(mkinstalldirs) $(DESTDIR)/$(pkgdatadir)/examples/$$fdir; \
+ 	  fi; \
+ 	  echo "$(INSTALL_DATA) $$file $(DESTDIR)/$(pkgdatadir)/examples/$$f"; \
+ 	  $(INSTALL_DATA) $$file $(DESTDIR)/$(pkgdatadir)/examples/$$f; \
+ 	done
+ 	echo "$(INSTALL_DATA) Makefile.jawt $(DESTDIR)/$(pkgdatadir)/examples/"
+ 	$(INSTALL_DATA) Makefile.jawt $(DESTDIR)/$(pkgdatadir)/examples/
+ 
+ uninstall-local:
+ 	srcdir_cnt=`echo $(srcdir) | wc -c`; \
+ 	for file in $(ALL_EXAMPLE_FILES); do \
+ 	  f=`echo $$file | cut -c$$srcdir_cnt-`; \
+ 	  echo "rm -f $(DESTDIR)/$(pkgdatadir)/examples/$$f"; \
+ 	  rm -f $(DESTDIR)/$(pkgdatadir)/examples/$$f; \
+ 	done
+ 	echo "rm -f $(DESTDIR)/$(pkgdatadir)/examples/Makefile.jawt"
+ 	rm -f $(DESTDIR)/$(pkgdatadir)/examples/Makefile.jawt
+ 
+ # Make sure everything is included in the distribution.
+ EXTRA_DIST = README Makefile.jawt.in
+ dist-hook:
+ 	srcdir_cnt=`echo $(srcdir) | wc -c`; \
+ 	for file in $(ALL_EXAMPLE_FILES); do \
+ 	  f=`echo $$file | cut -c$$srcdir_cnt-`; \
+ 	  fdir=`dirname $$f`; \
+ 	  if test ! -d $(distdir)/$$fdir; then \
+ 	    echo "$(makeinstalldirs) $(distdir)/$$fdir"; \
+ 	    $(mkinstalldirs) $(distdir)/$$fdir; \
+ 	  fi; \
+ 	  echo "cp -p $$file $(distdir)/$$f"; \
+ 	  cp -p $$file $(distdir)/$$f; \
+ 	done
+ 
+ # To generate the example zip just depend on the sources and ignore the
+ # class files. Always regenerate all .class files and remove them immediatly.
+ # And copy the png icons we use to the classes dir so they get also included.
+ $(EXAMPLE_ZIP): $(EXAMPLE_JAVA_FILES)
+ 	mkdir -p classes/gnu/classpath/examples/icons
+ 	cp $(EXAMPLE_ICONS) classes/gnu/classpath/examples/icons
+ 	$(JCOMPILER) -d classes $(EXAMPLE_JAVA_FILES) 
+ 	cd classes; $(ZIP) -r ../$(EXAMPLE_ZIP) .; cd ..
+ 	rm -rf classes
+ 
+ # Zip file be gone! (and make sure the classes are gone too)
+ clean-local:
+ 	rm -rf $(EXAMPLE_ZIP) classes
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/Makefile.in gcc-4.1.0/libjava/classpath/examples/Makefile.in
*** gcc-4.0.2/libjava/classpath/examples/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/Makefile.in	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,541 ----
+ # Makefile.in generated by automake 1.9.3 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ # 2003, 2004  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ 
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+ INSTALL_HEADER = $(INSTALL_DATA)
+ transform = $(program_transform_name)
+ NORMAL_INSTALL = :
+ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = examples
+ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ 	$(srcdir)/Makefile.jawt.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ 	$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ 	$(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/iconv.m4 \
+ 	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ 	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = $(top_builddir)/include/config.h
+ CONFIG_CLEAN_FILES = Makefile.jawt
+ SOURCES =
+ DIST_SOURCES =
+ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+ am__vpath_adj = case $$p in \
+     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+     *) f=$$p;; \
+   esac;
+ am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+ am__installdirs = "$(DESTDIR)$(exampledir)"
+ exampleDATA_INSTALL = $(INSTALL_DATA)
+ DATA = $(example_DATA)
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
+ BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
+ CLASSPATH_MODULE = @CLASSPATH_MODULE@
+ CP = @CP@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CREATE_ALSA_LIBRARIES_FALSE = @CREATE_ALSA_LIBRARIES_FALSE@
+ CREATE_ALSA_LIBRARIES_TRUE = @CREATE_ALSA_LIBRARIES_TRUE@
+ CREATE_API_DOCS_FALSE = @CREATE_API_DOCS_FALSE@
+ CREATE_API_DOCS_TRUE = @CREATE_API_DOCS_TRUE@
+ CREATE_CORE_JNI_LIBRARIES_FALSE = @CREATE_CORE_JNI_LIBRARIES_FALSE@
+ CREATE_CORE_JNI_LIBRARIES_TRUE = @CREATE_CORE_JNI_LIBRARIES_TRUE@
+ CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
+ CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
+ CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
+ CREATE_GTK_PEER_LIBRARIES_TRUE = @CREATE_GTK_PEER_LIBRARIES_TRUE@
+ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
+ CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
+ CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
+ CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
+ CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
+ CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
+ CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
+ CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DATE = @DATE@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ ECJ = @ECJ@
+ EGREP = @EGREP@
+ ERROR_CFLAGS = @ERROR_CFLAGS@
+ EXAMPLESDIR = @EXAMPLESDIR@
+ EXEEXT = @EXEEXT@
+ FIND = @FIND@
+ FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+ FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
+ FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
+ FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
+ FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
+ FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
+ FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
+ FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
+ FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
+ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
+ GCJ = @GCJ@
+ GCJX = @GCJX@
+ GJDOC = @GJDOC@
+ GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
+ INSTALL_CLASS_FILES_FALSE = @INSTALL_CLASS_FILES_FALSE@
+ INSTALL_CLASS_FILES_TRUE = @INSTALL_CLASS_FILES_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_GLIBJ_ZIP_FALSE = @INSTALL_GLIBJ_ZIP_FALSE@
+ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
+ JAY = @JAY@
+ JAY_SKELETON = @JAY_SKELETON@
+ JIKES = @JIKES@
+ JIKESENCODING = @JIKESENCODING@
+ KJC = @KJC@
+ LDFLAGS = @LDFLAGS@
+ LIBDEBUG = @LIBDEBUG@
+ LIBICONV = @LIBICONV@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIBVERSION = @LIBVERSION@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MKDIR = @MKDIR@
+ MOC = @MOC@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
+ PANGOFT2_LIBS = @PANGOFT2_LIBS@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ QT_CFLAGS = @QT_CFLAGS@
+ QT_LIBS = @QT_LIBS@
+ RANLIB = @RANLIB@
+ REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
+ REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
+ REMOVE = @REMOVE@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
+ STRIP = @STRIP@
+ USER_CLASSLIB = @USER_CLASSLIB@
+ USER_JAVAH = @USER_JAVAH@
+ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
+ USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
+ USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
+ USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+ VERSION = @VERSION@
+ WARNING_CFLAGS = @WARNING_CFLAGS@
+ XML_CFLAGS = @XML_CFLAGS@
+ XML_LIBS = @XML_LIBS@
+ XSLT_CFLAGS = @XSLT_CFLAGS@
+ XSLT_LIBS = @XSLT_LIBS@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZIP = @ZIP@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
+ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ datadir = @datadir@
+ default_toolkit = @default_toolkit@
+ exec_prefix = @exec_prefix@
+ glibjdir = @glibjdir@
+ host = @host@
+ host_alias = @host_alias@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ nativelibdir = @nativelibdir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ vm_classes = @vm_classes@
+ @FOUND_ECJ_TRUE@@FOUND_GCJX_FALSE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(ECJ) -bootclasspath '$(top_builddir)/lib' -classpath .
+ @FOUND_GCJX_TRUE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(GCJX) -bootclasspath '' -sourcepath '' -classpath $(top_builddir)/lib:.
+ @FOUND_GCJ_FALSE@@FOUND_JIKES_TRUE@JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
+ 
+ # Setup the compiler to use the GNU Classpath library we just build
+ @FOUND_GCJ_TRUE@JCOMPILER = $(GCJ) --bootclasspath '$(top_builddir)/lib' --classpath . -C
+ 
+ # All our example java source files
+ EXAMPLE_JAVA_FILES = $(srcdir)/gnu/classpath/examples/*/*.java $(srcdir)/gnu/classpath/examples/*/*/*.java $(srcdir)/gnu/classpath/examples/*/*/*/*.java
+ 
+ # The example C source files
+ EXAMPLE_C_FILES = $(srcdir)/gnu/classpath/examples/*/*.c
+ 
+ # The zip files with classes we want to produce.
+ EXAMPLE_ZIP = examples.zip
+ 
+ # Extra objects that will not exist until configure-time
+ BUILT_SOURCES = $(EXAMPLE_ZIP)
+ 
+ # the png icons we use in some of the examples.
+ EXAMPLE_ICONS = $(srcdir)/gnu/classpath/examples/icons/*.png
+ 
+ # The example specific README files.
+ READMES = $(srcdir)/gnu/classpath/examples/CORBA/swing/README.html
+ 
+ # All the files we find "interesting"
+ ALL_EXAMPLE_FILES = $(EXAMPLE_JAVA_FILES) $(EXAMPLE_C_FILES) $(EXAMPLE_ICONS) $(READMES)
+ 
+ # Some architecture independent data to be installed.
+ example_DATA = $(EXAMPLE_ZIP) README
+ 
+ # Where we want these data files installed.
+ exampledir = $(pkgdatadir)/examples
+ 
+ # Make sure everything is included in the distribution.
+ EXTRA_DIST = README Makefile.jawt.in
+ all: $(BUILT_SOURCES)
+ 	$(MAKE) $(AM_MAKEFLAGS) all-am
+ 
+ .SUFFIXES:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ 		&& exit 0; \
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+ 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  examples/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --gnu  examples/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+ 	  *config.status*) \
+ 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ 	  *) \
+ 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ 	esac;
+ 
+ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ Makefile.jawt: $(top_builddir)/config.status $(srcdir)/Makefile.jawt.in
+ 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ install-exampleDATA: $(example_DATA)
+ 	@$(NORMAL_INSTALL)
+ 	test -z "$(exampledir)" || $(mkdir_p) "$(DESTDIR)$(exampledir)"
+ 	@list='$(example_DATA)'; for p in $$list; do \
+ 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ 	  f=$(am__strip_dir) \
+ 	  echo " $(exampleDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(exampledir)/$$f'"; \
+ 	  $(exampleDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(exampledir)/$$f"; \
+ 	done
+ 
+ uninstall-exampleDATA:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(example_DATA)'; for p in $$list; do \
+ 	  f=$(am__strip_dir) \
+ 	  echo " rm -f '$(DESTDIR)$(exampledir)/$$f'"; \
+ 	  rm -f "$(DESTDIR)$(exampledir)/$$f"; \
+ 	done
+ tags: TAGS
+ TAGS:
+ 
+ ctags: CTAGS
+ CTAGS:
+ 
+ 
+ distdir: $(DISTFILES)
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ 	list='$(DISTFILES)'; for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ 	  esac; \
+ 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ 	    dir="/$$dir"; \
+ 	    $(mkdir_p) "$(distdir)$$dir"; \
+ 	  else \
+ 	    dir=''; \
+ 	  fi; \
+ 	  if test -d $$d/$$file; then \
+ 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ 	    fi; \
+ 	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ 	  else \
+ 	    test -f $(distdir)/$$file \
+ 	    || cp -p $$d/$$file $(distdir)/$$file \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+ 	$(MAKE) $(AM_MAKEFLAGS) \
+ 	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ 	  dist-hook
+ check-am: all-am
+ check: $(BUILT_SOURCES)
+ 	$(MAKE) $(AM_MAKEFLAGS) check-am
+ all-am: Makefile $(DATA)
+ installdirs:
+ 	for dir in "$(DESTDIR)$(exampledir)"; do \
+ 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ 	done
+ install: $(BUILT_SOURCES)
+ 	$(MAKE) $(AM_MAKEFLAGS) install-am
+ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+ 	@echo "it deletes files that may require special tools to rebuild."
+ 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ clean: clean-am
+ 
+ clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+ 
+ distclean: distclean-am
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-generic distclean-libtool
+ 
+ dvi: dvi-am
+ 
+ dvi-am:
+ 
+ html: html-am
+ 
+ info: info-am
+ 
+ info-am:
+ 
+ install-data-am: install-data-local install-exampleDATA
+ 
+ install-exec-am:
+ 
+ install-info: install-info-am
+ 
+ install-man:
+ 
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-am
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-am
+ 
+ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+ 
+ pdf: pdf-am
+ 
+ pdf-am:
+ 
+ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-exampleDATA uninstall-info-am uninstall-local
+ 
+ .PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ 	clean-local dist-hook distclean distclean-generic \
+ 	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ 	install install-am install-data install-data-am \
+ 	install-data-local install-exampleDATA install-exec \
+ 	install-exec-am install-info install-info-am install-man \
+ 	install-strip installcheck installcheck-am installdirs \
+ 	maintainer-clean maintainer-clean-generic mostlyclean \
+ 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ 	uninstall uninstall-am uninstall-exampleDATA uninstall-info-am \
+ 	uninstall-local
+ 
+ @FOUND_ECJ_FALSE@@FOUND_GCJX_FALSE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@error dunno how to setup the JCOMPILER and compile
+ 
+ # Make sure all sources and icons are also installed so users can use them.
+ # (Be careful to strip off the srcdir part of the path when installing.)
+ install-data-local:
+ 	srcdir_cnt=`echo $(srcdir) | wc -c`; \
+ 	for file in $(ALL_EXAMPLE_FILES); do \
+ 	  f=`echo $$file | cut -c$$srcdir_cnt-`; \
+ 	  fdir=`dirname $$f`; \
+ 	  if test ! -d $(DESTDIR)/$(pkgdatadir)/examples/$$fdir; then \
+ 	    echo "$(mkinstalldirs) $(DESTDIR)/$(pkgdatadir)/examples/$$fdir"; \
+ 	    $(mkinstalldirs) $(DESTDIR)/$(pkgdatadir)/examples/$$fdir; \
+ 	  fi; \
+ 	  echo "$(INSTALL_DATA) $$file $(DESTDIR)/$(pkgdatadir)/examples/$$f"; \
+ 	  $(INSTALL_DATA) $$file $(DESTDIR)/$(pkgdatadir)/examples/$$f; \
+ 	done
+ 	echo "$(INSTALL_DATA) Makefile.jawt $(DESTDIR)/$(pkgdatadir)/examples/"
+ 	$(INSTALL_DATA) Makefile.jawt $(DESTDIR)/$(pkgdatadir)/examples/
+ 
+ uninstall-local:
+ 	srcdir_cnt=`echo $(srcdir) | wc -c`; \
+ 	for file in $(ALL_EXAMPLE_FILES); do \
+ 	  f=`echo $$file | cut -c$$srcdir_cnt-`; \
+ 	  echo "rm -f $(DESTDIR)/$(pkgdatadir)/examples/$$f"; \
+ 	  rm -f $(DESTDIR)/$(pkgdatadir)/examples/$$f; \
+ 	done
+ 	echo "rm -f $(DESTDIR)/$(pkgdatadir)/examples/Makefile.jawt"
+ 	rm -f $(DESTDIR)/$(pkgdatadir)/examples/Makefile.jawt
+ dist-hook:
+ 	srcdir_cnt=`echo $(srcdir) | wc -c`; \
+ 	for file in $(ALL_EXAMPLE_FILES); do \
+ 	  f=`echo $$file | cut -c$$srcdir_cnt-`; \
+ 	  fdir=`dirname $$f`; \
+ 	  if test ! -d $(distdir)/$$fdir; then \
+ 	    echo "$(makeinstalldirs) $(distdir)/$$fdir"; \
+ 	    $(mkinstalldirs) $(distdir)/$$fdir; \
+ 	  fi; \
+ 	  echo "cp -p $$file $(distdir)/$$f"; \
+ 	  cp -p $$file $(distdir)/$$f; \
+ 	done
+ 
+ # To generate the example zip just depend on the sources and ignore the
+ # class files. Always regenerate all .class files and remove them immediatly.
+ # And copy the png icons we use to the classes dir so they get also included.
+ $(EXAMPLE_ZIP): $(EXAMPLE_JAVA_FILES)
+ 	mkdir -p classes/gnu/classpath/examples/icons
+ 	cp $(EXAMPLE_ICONS) classes/gnu/classpath/examples/icons
+ 	$(JCOMPILER) -d classes $(EXAMPLE_JAVA_FILES) 
+ 	cd classes; $(ZIP) -r ../$(EXAMPLE_ZIP) .; cd ..
+ 	rm -rf classes
+ 
+ # Zip file be gone! (and make sure the classes are gone too)
+ clean-local:
+ 	rm -rf $(EXAMPLE_ZIP) classes
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/Makefile.jawt.in gcc-4.1.0/libjava/classpath/examples/Makefile.jawt.in
*** gcc-4.0.2/libjava/classpath/examples/Makefile.jawt.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/Makefile.jawt.in	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,29 ----
+ # @configure_input@
+ 
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
+ includedir = @includedir@
+ libdir = @libdir@
+ pkglibdir = $(libdir)/@PACKAGE@
+ 
+ all: gnu/classpath/examples/jawt/DemoJAWT.class libDemoJAWT.so
+ 	@echo "RUN with:"
+ 	@echo "  LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:.:$(pkglibdir) jamvm \\"
+ 	@echo "    gnu.classpath.examples.jawt.DemoJAWT"
+ 
+ gnu/classpath/examples/jawt/DemoJAWT.class: gnu/classpath/examples/jawt/DemoJAWT.java
+ 	gcj -C gnu/classpath/examples/jawt/DemoJAWT.java
+ 
+ DemoJAWT.h: gnu/classpath/examples/jawt/DemoJAWT.class
+ 	gcjh -jni gnu.classpath.examples.jawt.DemoJAWT -o DemoJAWT.h
+ 
+ libDemoJAWT.so: gnu/classpath/examples/jawt/DemoJAWT.c DemoJAWT.h
+ 	gcc -g -O0 -Wall -I. -I/usr/X11R6/include -L. -L/usr/X11R6/lib \
+ 	-I$(includedir) -L$(pkglibdir) \
+ 	-lX11 -ljawtgnu -shared -o libDemoJAWT.so \
+ 	gnu/classpath/examples/jawt/DemoJAWT.c
+ 
+ clean:
+ 	rm -f DemoJAWT.h
+ 	rm -f gnu/classpath/examples/jawt/DemoJAWT*.class
+ 	rm -f libDemoJAWT.so
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/README gcc-4.1.0/libjava/classpath/examples/README
*** gcc-4.0.2/libjava/classpath/examples/README	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/README	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,72 ----
+ This directory contains example programs that show how the GNU Classpath
+ library can be used.
+ 
+ Each example has its own package under gnu.classpath.examples and has a
+ class Demo which contains a main() method to run that particular example.
+ 
+ The examples can be compiled and run with gcj as follows:
+ 
+   gcj -o swingdemo --main=gnu.classpath.examples.swing.Demo \
+       gnu/classpath/examples/swing/Demo.java \
+       gnu/classpath/examples/swing/GNULookAndFeel.java
+   ./swingdemo
+ 
+ Or with a traditional byte code interpreter like:
+ 
+   gcj -C gnu/classpath/examples/awt/Demo.java
+   gij gnu.classpath.examples.awt.Demo
+ 
+ The installation also comes with an examples.zip archive that contains
+ all needed resources and compiled byte code class files that can be
+ run as follows:
+ 
+   kaffe -classpath examples.zip gnu.classpath.examples.awt.Demo
+   kaffe -classpath examples.zip gnu.classpath.examples.swing.Demo
+ 
+ The jawt Demo needs some extra support library that currently needs to be
+ build by hand.  The following assumes GNU Classpath was installed in
+ /usr/local/classpath, if you installed it somewhere else then adjust the
+ -I and -L paths accordingly. The included Makefile.jawt is setup this way.
+ 
+ You can invoke it with:
+ 
+ 	make -f Makefile.jawt
+ 
+ Or you can compile by hand as follows:
+ 
+   gcj -C gnu/classpath/examples/jawt/DemoJAWT.java
+   gcjh -jni gnu.classpath.examples.jawt.DemoJAWT -o DemoJAWT.h
+   gcc -g -O0 -Wall -I. -I/usr/X11R6/include -L. -L/usr/X11R6/lib \
+     -I/usr/local/classpath/include -L/usr/local/classpath/lib/classpath \
+     -lX11 -ljawtgnu -shared -o libDemoJAWT.so \
+     gnu/classpath/examples/jawt/DemoJAWT.c
+ 
+ You can then run the example as follows:
+ 
+   export LD_LIBRARY_PATH=.:/usr/local/classpath/lib/classpath
+   jamvm gnu.classpath.examples.jawt.DemoJAWT
+ 
+ All example code is distributed under the GNU General Public License (GPL).
+ 
+ The example icons used in some of the examples come from gnome-icon-theme
+ version 1.2.3 and are also distributed under the GPL.
+ All these images are stored in the directory gnu/classpath/examples/icons/.
+ 
+ More free icons can be found in the gnome-icon-theme package:
+ http://ftp.gnome.org/pub/GNOME/sources/gnome-icon-theme/
+ 
+ 
+ GNU Classpath examples are free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at
+ your option) any later version.
+ 
+ GNU Classpath examples are distributed in the hope that they will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath examples; see the file COPYING.  If not,
+ write to the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/NamingService/Demo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/NamingService/Demo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/NamingService/Demo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/NamingService/Demo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,201 ----
+ /* Demo.java -- Shows how to use Classpath transient naming service.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.NamingService;
+ 
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.NamingService.NamingServiceTransient;
+ 
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Object;
+ import org.omg.CosNaming.Binding;
+ import org.omg.CosNaming.BindingHolder;
+ import org.omg.CosNaming.BindingIterator;
+ import org.omg.CosNaming.BindingIteratorHolder;
+ import org.omg.CosNaming.BindingListHolder;
+ import org.omg.CosNaming.NameComponent;
+ import org.omg.CosNaming.NamingContext;
+ import org.omg.CosNaming.NamingContextExt;
+ import org.omg.CosNaming.NamingContextExtHelper;
+ import org.omg.CosNaming.NamingContextHelper;
+ 
+ /**
+  * A simple test of the naming service.
+  *
+  * The main class of the GNU Classpath transient naming service is
+  * {@link gnu.CORBA.NamingService}. This class must be started
+  * before starting this example.
+  *
+  * This example should interoperate as with GNU Classpath naming
+  * service, as with Sun Microsystems transient and persistent
+  * naming services, included in releases 1.3 and 1.4 (tnameserv and
+  * orbd). To work with this example, the naming service must
+  * be started on the local host, at the port 900.
+  *
+  * The persistent naming service is currently under development.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Demo
+ {
+   public static void main(String[] an_args)
+   {
+     // We create the following naming graph:
+     // <ROOT CONTEXT>
+     //  |
+     //  +--- <c.d context>
+     //  |     |
+     //  |     +--- obj
+     //  |
+     //  +--- xobj
+     //
+     // Where both obj and xobj are CORBA objects, representing the
+     // default naming service.
+     //
+     System.out.println("Starting the GNU Classpath " +
+                        "built-in transient naming service"
+                       );
+     
+     final String[] args = an_args;
+ 
+     new Thread()
+       {
+         public void run()
+         {
+           NamingServiceTransient.main(args);
+         }
+       }.start();
+ 
+     System.out.println("Waiting for three seconds for naming service to start:");
+     try
+       {
+         Thread.sleep(3000);
+       }
+     catch (InterruptedException ex)
+       {
+       }
+ 
+     try
+       {
+         ORB orb = ORB.init(args, null);
+ 
+         Object no = orb.resolve_initial_references("NameService");
+ 
+         System.out.println("Naming service IOR:" + orb.object_to_string(no));
+ 
+         System.out.println(IOR.parse(orb.object_to_string(no)));
+ 
+         NamingContextExt namer = NamingContextExtHelper.narrow(no);
+ 
+         System.out.println("Naming service: " + namer.getClass().getName());
+ 
+         NamingContext second = namer.new_context();
+ 
+         namer.rebind_context(namer.to_name("c.d"), second);
+         namer.rebind(namer.to_name("xobj"), no);
+ 
+         second.rebind(namer.to_name("obj"), no);
+ 
+         NamingContext nsec =
+           NamingContextHelper.narrow(namer.resolve_str("c.d"));
+ 
+         System.out.println(namer.resolve(namer.to_name("c.d/obj")));
+ 
+         // In all cases, this must be the same object (the naming
+         // service itself).
+         System.out.println(nsec.resolve(new NameComponent[]
+                                         {
+                                           new NameComponent("obj", "")
+                                         }
+                                        )
+                           );
+         System.out.println(namer.resolve_str("xobj"));
+ 
+         // In all cases, this must be the same object (the naming
+         // service itself).
+         System.out.println(namer.resolve(new NameComponent[]
+                                          {
+                                            new NameComponent("c", "d"),
+                                            new NameComponent("obj", "")
+                                          }
+                                         )
+                           );
+ 
+         System.out.println(namer.resolve_str("c.d/obj"));
+ 
+         System.out.println("Test binding list iterator:");
+ 
+         BindingListHolder lh = new BindingListHolder();
+         BindingIteratorHolder lih = new BindingIteratorHolder();
+ 
+         namer.list(0, lh, lih);
+ 
+         BindingIterator iter = lih.value;
+         BindingHolder binding = new BindingHolder();
+ 
+         while (iter.next_one(binding))
+           {
+             Binding b = binding.value;
+             System.out.println("NAME: " + namer.to_string(b.binding_name) +
+                                " TYPE " + b.binding_type.value()
+                               );
+           }
+ 
+         System.out.println("Testing binding list:");
+ 
+         iter.destroy();
+ 
+         namer.list(Integer.MAX_VALUE, lh, lih);
+ 
+         for (int i = 0; i < lh.value.length; i++)
+           {
+             Binding b = lh.value [ i ];
+             System.out.println("NAME: " + namer.to_string(b.binding_name) +
+                                " TYPE " + b.binding_type.value()
+                               );
+           }
+       }
+     catch (Exception ex)
+       {
+         ex.printStackTrace();
+         System.exit(1);
+       }
+ 
+     System.exit(0);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/Demo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/Demo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/Demo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/Demo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,102 ----
+ /* Demo.java -- Demonstrates simple CORBA client-server communications.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication;
+ 
+ import java.io.File;
+ 
+ import gnu.classpath.examples.CORBA.SimpleCommunication.communication.DirectTest;
+ import gnu.classpath.examples.CORBA.SimpleCommunication.communication.RequestTest;
+ 
+ 
+ /**
+  * This sample illustrates the CORBA communication between server
+  * and client. In this simple example both server and client are
+  * started on the same virtual machine. For the real interoperability
+  * tests, however, the server is started on the platform (library+jvm) of
+  * one vendor, and the client on the platform of another vendor.
+  *
+  * The interoperability is currently tested with Sun Microystems
+  * jre 1.4.
+  *
+  * This example required the current folder to be writable to pass
+  * the IOR references via shared file.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Demo
+ {
+   public static void main(final String[] args)
+   {
+     File ior = new File("IOR.txt");
+     if (ior.exists())
+       ior.delete();
+ 
+     // Start the server.
+     new Thread()
+     {
+       public void run()
+       {
+         DemoServer.start_server(args);
+       }
+     }.start();
+ 
+     System.out.print("Waiting for the server to start ");
+     while (!ior.exists())
+       {
+         // Pause some time for the server to start.
+         try
+           {
+             Thread.sleep(200);
+           }
+         catch (InterruptedException ex)
+           {
+           }
+         System.out.print(".");
+       }
+     System.out.println("ok.");
+     System.out.println();    
+ 
+     // Test the stream oriented communication.
+     DirectTest.main(args);
+     // Test the request oriented communication.
+     RequestTest.main(args);
+ 
+     System.exit(0);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/DemoServer.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/DemoServer.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/DemoServer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/DemoServer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,118 ----
+ /* DemoServer.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication;
+ 
+ import gnu.classpath.examples.CORBA.SimpleCommunication.communication.DemoServant;
+ 
+ import org.omg.CORBA.ORB;
+ 
+ import java.io.FileOutputStream;
+ import java.io.PrintStream;
+ 
+ /**
+  * This is the server class that handles the client requests,
+  * delegating the functionality to the {@link DemoServant}.
+  *
+  * When starting, the server writes the IOR.txt file into the current
+  * folder. With the information, stored in this file, the server
+  * should be reachable over Internet, unless blocked by security tools.
+  *
+  * This code is tested for interoperability with Sun Microsystems
+  * java implementation 1.4.2 (08.b03). Server, client of both can
+  * be started either on Sun's or on Classpath CORBA implementation,
+  * in any combinations.
+  *
+  * BE SURE TO START THIS SERVER BEFORE STARTING THE CLIENT.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class DemoServer
+ {
+ 
+   public static void main(String[] args)
+   {
+     start_server(args);
+   }
+ 
+   public static ORB start_server(String[] args)
+   {
+     try
+       {
+         // Create and initialize the ORB.
+         final ORB orb = org.omg.CORBA.ORB.init(args, null);
+ 
+         // Create the servant and register it with the ORB.
+         DemoServant tester = new DemoServant();
+         orb.connect(tester);
+ 
+         // Storing the IOR reference.
+         String ior = orb.object_to_string(tester);
+         System.out.println("IOR: " + ior);
+ 
+         gnu.CORBA.IOR ii = gnu.CORBA.IOR.parse(ior);
+         System.out.println(ii);
+ 
+         // The file IOR.txt in the current folder will be used
+         // to find the object by clients.
+         FileOutputStream f = new FileOutputStream("IOR.txt");
+         PrintStream p = new PrintStream(f);
+         p.print(ior);
+         p.close();
+ 
+         System.out.println("The test server ready and waiting ...");
+ 
+         new Thread()
+           {
+             public void run()
+             {
+               // Start the thread, serving the invocations from clients.
+               orb.run();
+             }
+           }.start();
+ 
+         return orb;
+       }
+     catch (Exception e)
+       {
+         System.err.println("ERROR: " + e);
+         e.printStackTrace(System.out);
+         return null;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoServant.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoServant.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoServant.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoServant.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,230 ----
+ /* DemoServant.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.ByteHolder;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.DoubleHolder;
+ import org.omg.CORBA.ShortHolder;
+ import org.omg.CORBA.StringHolder;
+ 
+ /**
+  * This class handles the actual server functionality in this test
+  * application. When the client calls the remote method, this
+  * finally results calling the method of this class.
+  *
+  * The parameters, passed to the server only, are just parameters of the
+  * java methods. The parameters that shuld be returned to client
+  * are wrapped into holder classes.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class DemoServant
+   extends _DemoTesterImplBase
+ {
+   /**
+    * The field, that can be set and checked by remote client.
+    */
+   private int m_theField = 17;
+ 
+   /**
+    * Passes wide (UTF-16) string and narrow (ISO8859_1) string.
+    * @see gnu.CORBA.GIOP.CharSets_OSF for supported and default
+    * encodings. Returs they generalization as a wide string.
+    */
+   public String passCharacters(String wide, String narrow)
+   {
+     System.out.println("SERVER: **** Wide and narrow string test.");
+     System.out.println("SERVER:   Received '" + narrow + "' and '" + wide +
+                        "'"
+                       );
+ 
+     return "return '" + narrow + "' and '" + wide + "'";
+   }
+ 
+   /**
+    * Accept and return parameters, having various types.
+    */
+   public int passSimple(ByteHolder an_octet, int a_long, ShortHolder a_short,
+                         StringHolder a_string, DoubleHolder a_double
+                        )
+   {
+     System.out.println("SERVER: ***** Test passing multiple parameters");
+     System.out.println("SERVER:   Received:");
+     System.out.println("SERVER:   octet " + an_octet.value);
+     System.out.println("SERVER:   short " + a_short.value);
+     System.out.println("SERVER:   string " + a_string.value);
+ 
+     // Returning incremented values.
+     an_octet.value++;
+     a_short.value++;
+ 
+     // OUT parameter, return only.
+     a_double.value = 1;
+     a_string.value += " [return]";
+     return 452572;
+   }
+ 
+   /**
+    * Accept and return the string arrays.
+    */
+   public String[] passStrings(String[] args)
+   {
+     System.out.println("SERVER: ***** Transferring string arrays");
+ 
+     String[] rt = new String[ args.length ];
+     for (int i = 0; i < args.length; i++)
+       {
+         System.out.println("SERVER:   " + args [ i ]);
+ 
+         // Returning the changed content.
+         rt [ i ] = args [ i ] + ":" + args [ i ];
+       }
+     return rt;
+   }
+ 
+   /**
+    * Accept and return the structures.
+    */
+   public StructureToReturn passStructure(StructureToPass in_structure)
+   {
+     System.out.println("SERVER: ***** Transferring structures");
+     System.out.println("SERVER:   Received " + in_structure.a + ":" +
+                        in_structure.b
+                       );
+ 
+     // Create and send back the returned structure.
+     StructureToReturn r = new StructureToReturn();
+     r.c = in_structure.a + in_structure.b;
+     r.n = 555;
+     r.arra = new int[] { 11, 22, 33 };
+     return r;
+   }
+ 
+   /**
+    * Pass and return the tree structure
+    */
+   public void passTree(TreeNodeHolder tree)
+   {
+     System.out.println("SERVER: ***** Transferring tree");
+ 
+     StringBuffer b = new StringBuffer();
+ 
+     // This both creates the tree string representation
+     // and changes the TreeNode names.
+     getImage(b, tree.value);
+     System.out.println("SERVER:   The tree was: " + b + ", returning changed.");
+   }
+ 
+   /**
+    * Just prints the hello message.
+    */
+   public void sayHello()
+   {
+     System.out.println("SERVER: ***** Hello, world!");
+   }
+ 
+   /**
+    * Get the value of our field.
+    */
+   public int theField()
+   {
+     System.out.println("SERVER: ***** Getting the field value, " + m_theField);
+     return m_theField;
+   }
+ 
+   /**
+    * Set the value of our field.
+    */
+   public void theField(int a_field)
+   {
+     System.out.println("SERVER: ***** Setting the field value to " + a_field);
+     m_theField = a_field;
+   }
+ 
+   /**
+    * Throw an exception.
+    *
+    * @param parameter specifies which exception will be thrown.
+    *
+    * @throws WeThrowThisException for the non negative parameter.
+    * @throws BAD_OPERATION for the negative parameter.
+    */
+   public void throwException(int parameter)
+                       throws WeThrowThisException
+   {
+     System.out.println("SERVER: ***** Testing exceptions");
+     if (parameter > 0)
+       {
+         System.out.println("SERVER:   Throwing the user exception, " +
+                            "specific field = "+parameter
+                           );
+         throw new WeThrowThisException(parameter);
+       }
+     else
+       {
+         System.out.println("SERVER:   Throwing " +
+                            "the BAD_OPERATION, minor 456, completed"
+                           );
+         throw new BAD_OPERATION(456, CompletionStatus.COMPLETED_YES);
+       }
+   }
+ 
+   /**
+    * Visit all tree nodes, getting the string representation
+    * and adding '++' to the TreeNode names.
+    *
+    * @param b the buffer to collect the string representation.
+    * @param n the rott tree TreeNode.
+    */
+   private void getImage(StringBuffer b, TreeNode n)
+   {
+     b.append(n.name);
+     n.name = n.name + "++";
+     b.append(": (");
+ 
+     for (int i = 0; i < n.children.length; i++)
+       {
+         getImage(b, n.children [ i ]);
+         b.append(' ');
+       }
+     b.append(") ");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoTester.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoTester.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoTester.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoTester.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,111 ----
+ /* DemoTester.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.ByteHolder;
+ import org.omg.CORBA.DoubleHolder;
+ import org.omg.CORBA.ShortHolder;
+ import org.omg.CORBA.StringHolder;
+ 
+ /**
+  * The interface of our remote object. Some IDL compiles split it
+  * into "DemoTester" and "comTesterOperations", but we do not see
+  * much sense in doing this here.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public interface DemoTester
+ {
+   /**
+    * Passes wide (UTF-16) string and narrow (ISO8859_1) string.
+    * Both types are mapped into java String.
+    *
+    * @see gnu.CORBA.GIOP.CharSets_OSF for supported and default
+    * encodings.
+    */
+   String passCharacters(String wide, String narrow);
+ 
+   /**
+    * Passes various parameters in both directions.
+    * The parameters that must return the value are wrapped in holders.
+    */
+   int passSimple(ByteHolder an_octet, int a_long, ShortHolder a_short,
+                  StringHolder a_string, DoubleHolder a_double
+                 );
+ 
+   /**
+    * Passes and returns the string sequence (flexible length).
+    */
+   String[] passStrings(String[] arg);
+ 
+   /**
+    * Passes and returns the structures.
+    */
+   StructureToReturn passStructure(StructureToPass in_structure);
+ 
+   /**
+    * Pass and return the tree structure
+    *
+    * @param tree the root TreeNode of the tree.
+    */
+   void passTree(TreeNodeHolder tree);
+ 
+   /**
+    * Just prints the "Hello" message.
+    */
+   void sayHello();
+ 
+   /**
+    * Gets the value of the field in our object.
+    */
+   int theField();
+ 
+   /**
+    * Sets the value for the field in our object.
+    */
+   void theField(int newTheField);
+ 
+   /**
+    *  Throws either 'WeThrowThisException' with the 'ourField' field
+    *  initialised to the passed positive value
+    *  or system exception (if the parameter is zero or negative).
+    */
+   void throwException(int parameter)
+                throws WeThrowThisException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DirectTest.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DirectTest.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DirectTest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DirectTest.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,344 ----
+ /* DirectTest.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.ByteHolder;
+ import org.omg.CORBA.DoubleHolder;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.ShortHolder;
+ import org.omg.CORBA.StringHolder;
+ import org.omg.CORBA.UserException;
+ 
+ import java.io.File;
+ import java.io.FileReader;
+ import java.io.IOException;
+ 
+ /**
+  * This code uses CORBA to call various methods of the remote object,
+  * passing data structures in both directions. It finds the server by
+  * reading the IOR.txt file that must be present in the folder,
+  * where the program has been started.
+  *
+  * The IOR.txt file is written by the server
+  * {@link gnu.classpath.examples.CORBA.SimpleCommunication.DemoServer}.
+  * The server should be reachable over Internet, unless blocked by
+  * security tools.
+  *
+  * This code is tested for interoperability with Sun Microsystems
+  * java implementation 1.4.2 (08.b03). Server, client of both can
+  * be started either on Sun's or on Classpath CORBA implementation,
+  * in any combinations.
+  *
+  * BE SURE TO START THE SERVER BEFORE STARTING THE CLIENT.
+  *
+  * This version uses direct casting. This is the most convenient
+  * method, but it is normally used together with the IDL compiler.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class DirectTest
+ {
+   /*
+   * The IOR.txt file, used to find the server and the object on the server. is written when starting the accompanying
+   */
+   public static final String IOR_FILE = "IOR.txt";
+ 
+   /**
+    * The invocation target.
+    */
+   DemoTester object;
+ 
+   /**
+    * Get the object reference.
+    */
+   public static void main(String[] args)
+   {
+     try
+       {
+         ORB orb = org.omg.CORBA.ORB.init(args, null);
+ 
+         File f = new File(IOR_FILE);
+         char[] c = new char[ (int) f.length() ];
+         FileReader fr = new FileReader(f);
+         fr.read(c);
+         fr.close();
+ 
+         String ior = new String(c);
+         DirectTest we = new DirectTest();
+         we.object = (DemoTester) orb.string_to_object(ior);
+         we.Demo();
+         orb.shutdown(false);
+       }
+     catch (IOException ex)
+       {
+         System.out.println("Cannot find or read the IOR file " +
+                            "in the current folder"
+                           );
+         ex.printStackTrace();
+       }
+   }
+ 
+   /** Run all demos. */
+   public void Demo()
+   {
+     testHello();
+     testField();
+     testParameters();
+     testStringArray();
+     testStructure();
+     testWideNarrowStrings();
+     testTree();
+     testSystemException();
+     testUserException();
+   }
+ 
+   /**
+    * Test the field getter/setter.
+    */
+   public void testField()
+   {
+     System.out.println("***** Test the remote field getter/setter.");
+     System.out.println("The field value is now " + object.theField());
+     System.out.println("Setting it to 555");
+     object.theField(555);
+     System.out.println("The field value is now " + object.theField());
+   }
+ 
+   /** The simple invocation of the parameterless remote method. */
+   public void testHello()
+   {
+     System.out.println("***** Say hello (see the server console).");
+     object.sayHello();
+   }
+ 
+   /**
+    * Test passing multiple parameters in both directions.
+    */
+   public void testParameters()
+   {
+     System.out.println("***** Pass multiple parameters.");
+ 
+     // Holder classes are required to simulate passing
+     // "by reference" (modification is returned back to the server).
+     ByteHolder a_byte = new ByteHolder((byte) 0);
+     ShortHolder a_short = new ShortHolder((short) 3);
+     StringHolder a_string = new StringHolder("[string 4]");
+ 
+     // This is an 'out' parameter; the value must not be passed to servant.
+     DoubleHolder a_double = new DoubleHolder(56.789);
+ 
+     int returned = object.passSimple(a_byte, 2, a_short, a_string, a_double);
+ 
+     System.out.println("  Returned value " + returned);
+     System.out.println("  Returned parameters: ");
+     System.out.println("  octet " + a_byte.value);
+     System.out.println("  short " + a_short.value);
+     System.out.println("  string '" + a_string.value+"'");
+     System.out.println("  double " + a_double.value);
+   }
+ 
+   /**
+    * Test passing the string array, flexible size.
+    */
+   public void testStringArray()
+   {
+     System.out.println("***** Pass string array.");
+ 
+     String[] x = new String[] { "one", "two" };
+ 
+     // The array is passed as CORBA sequence, variable size is supported.
+     String[] y = object.passStrings(x);
+ 
+     for (int i = 0; i < y.length; i++)
+       {
+         System.out.println("  Passed " + x [ i ] + ", returned: " + y [ i ]);
+       }
+   }
+ 
+   /**
+    * Test passing the structures.
+    */
+   public void testStructure()
+   {
+     System.out.println("***** Pass structure");
+ 
+     StructureToPass arg = new StructureToPass();
+     arg.a = "A";
+     arg.b = "B";
+ 
+     StructureToReturn r = object.passStructure(arg);
+ 
+     System.out.println("  Fields of the returned structure:");
+ 
+     System.out.println("  c: " + r.c);
+     System.out.println("  n: " + r.n);
+ 
+     // The field r.arra is declared as the fixed size CORBA array.
+     System.out.println("  r[0]: " + r.arra [ 0 ]);
+     System.out.println("  r[1]: " + r.arra [ 1 ]);
+     System.out.println("  r[3]: " + r.arra [ 2 ]);
+   }
+ 
+   /**
+    * Test catching the system exception, thrown on the remote side.
+    */
+   public void testSystemException()
+   {
+     System.out.println("**** Test system exception:");
+     try
+       {
+         // Negative parameter = system exception.
+         object.throwException(-55);
+       }
+     catch (BAD_OPERATION ex)
+       {
+         System.out.println("  The expected BAD_OPERATION, minor code " +
+                            ex.minor + ", has been thrown on remote side."
+                           );
+       }
+     catch (UserException uex)
+       {
+         throw new InternalError();
+       }
+   }
+ 
+   /**
+    * Test passing the tree structure. Any shape of the tree is
+    * supported without rewriting the code.
+    */
+   public void testTree()
+   {
+     // Manually create the tree of nodes:
+     // Root
+     //  +-- a
+     //  |
+     //  +-- b
+     //      +-- ba
+     //      |   |
+     //      |   +-- bac
+     //      |
+     //      +-- bb
+     System.out.println("***** Pass and return the tree.");
+ 
+     TreeNode n = nod("Root");
+ 
+     n.children = new TreeNode[] { nod("a"), nod("b") };
+     n.children [ 1 ].children = new TreeNode[] { nod("ba"), nod("bb") };
+     n.children [ 1 ].children [ 0 ].children = new TreeNode[] { nod("bac") };
+ 
+     TreeNodeHolder nh = new TreeNodeHolder(n);
+ 
+     // The server should add '++' to each TreeNode name.
+     object.passTree(nh);
+ 
+     // Convert the returned tree to some strig representation.
+     StringBuffer img = new StringBuffer();
+     getImage(img, nh.value);
+ 
+     System.out.println("Returned tree: " + img.toString());
+   }
+ 
+   /**
+    * Test catching the user exception, thrown on the remote side.
+    */
+   public void testUserException()
+   {
+     System.out.println("**** Test user exception:");
+     try
+       {
+         // The user exception contains one user-defined field that will
+         // be initialised to the passed parameter.
+         object.throwException(123);
+         throw new InternalError();
+       }
+     catch (WeThrowThisException uex)
+       {
+         System.out.println("  The user exception with field " + uex.ourField +
+                            ", has been thrown on remote side."
+                           );
+       }
+   }
+ 
+   /**
+    * Passes wide (UTF-16) string and narrow (ISO8859_1) string.
+    * @see gnu.CORBA.GIOP.CharSets_OSF for supported and default
+    * encodings.
+    */
+   public void testWideNarrowStrings()
+   {
+     System.out.println("**** Test 8 bit and 16 bit char strings");
+ 
+     String r = object.passCharacters("wide string", "narrow string");
+     System.out.println("  returned: '" + r + "'");
+   }
+ 
+   /**
+    * Get the string representation of the passed tree.
+    * @param b the string buffer to accumulate the representation.
+    * @param n the tree (root TreeNode).
+    */
+   private void getImage(StringBuffer b, TreeNode n)
+   {
+     b.append(n.name);
+     b.append(": (");
+ 
+     for (int i = 0; i < n.children.length; i++)
+       {
+         getImage(b, n.children [ i ]);
+         b.append(' ');
+       }
+     b.append(") ");
+   }
+ 
+   /**
+    * Create a TreeNode with the given header.
+    *
+    * @param hdr the TreeNode header.
+    * @return the created TreeNode.
+    */
+   private TreeNode nod(String hdr)
+   {
+     TreeNode n = new TreeNode();
+     n.children = new TreeNode[ 0 ];
+     n.name = hdr;
+ 
+     return n;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/RequestTest.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/RequestTest.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/RequestTest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/RequestTest.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,284 ----
+ /* RequestTest.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import java.io.File;
+ import java.io.FileReader;
+ import java.io.IOException;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.ExceptionList;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Request;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.UnknownUserException;
+ 
+ /**
+  * This code uses CORBA to call various methods of the remote object,
+  * passing data structures in both directions. It finds the server by
+  * reading the IOR.txt file that must be present in the folder,
+  * where the program has been started.
+  *
+  * The IOR.txt file is written by the server
+  * {@link gnu.classpath.examples.CORBA.SimpleCommunication.DemoServer}.
+  * The server should be reachable over Internet, unless blocked by
+  * security tools.
+  *
+  * This code is tested for interoperability with Sun Microsystems
+  * java implementation 1.4.2 (08.b03). Server, client of both can
+  * be started either on Sun's or on Classpath CORBA implementation,
+  * in any combinations.
+  *
+  * BE SURE TO START THE SERVER BEFORE STARTING THE CLIENT.
+  *
+  * Test invocations using org.omg.CORBA.Request. The methods are
+  * called by "name", like in java.lang.reflect.
+  * No need to have the local pre-compiled stub classes.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class RequestTest
+ {
+   /*
+   * The IOR.txt file, used to find the server and the object on the server. is written when starting the accompanying
+   */
+   public static final String IOR_FILE = "IOR.txt";
+ 
+   /**
+    * The Object Request Brocker, used for various CORBA operations.
+    */
+   ORB orb;
+ 
+   /**
+    * Our remote object - the invocation target.
+    */
+   org.omg.CORBA.Object object;
+ 
+   /**
+    * Prepare for work. Read the file IOR.txt in the current folder
+    * and find the server using its information.
+    */
+   public static void main(String[] args)
+   {
+     RequestTest we = new RequestTest();
+ 
+     we.orb = org.omg.CORBA.ORB.init(new String[ 0 ], null);
+ 
+     char[] c = null;
+     try
+       {
+         File f = new File(IOR_FILE);
+         c = new char[ (int) f.length() ];
+ 
+         FileReader fr = new FileReader(f);
+         fr.read(c);
+         fr.close();
+       }
+     catch (IOException ex)
+       {
+         System.out.println("Unable to write the IOR.txt into the current folder");
+         ex.printStackTrace();
+       }
+ 
+     String ior = new String(c);
+ 
+     we.object = we.orb.string_to_object(ior);
+     we.Demo();
+     we.orb.shutdown(false);
+   }
+ 
+   /** Run all demos. */
+   public void Demo()
+   {
+     testHello();
+     try
+       {
+         testParameters();
+       }
+     catch (Exception ex)
+       {
+         // Not expected.
+         throw new InternalError();
+       }
+     testSystemException();
+     testWideNarrowStrings();
+   }
+ 
+   /**
+    * Send the hello message, one way.
+    */
+   public void testHello()
+   {
+     System.out.println("***** Test 'HELLO WORLD' (see the server console).");
+ 
+     Request hello =
+       object._create_request(null, "sayHello", orb.create_list(0), null);
+ 
+     // No response expected.
+     hello.send_oneway();
+   }
+ 
+   /**
+    * Test passing various parameters in both directions.
+    */
+   public void testParameters()
+                       throws Exception
+   {
+     System.out.println("***** Test passing multiple parameters:");
+ 
+     Request r =
+       object._create_request(null, "passSimple", orb.create_list(0), null);
+ 
+     r.add_inout_arg().insert_octet((byte) 0);
+     r.add_in_arg().insert_long(2);
+     r.add_inout_arg().insert_short((short) 3);
+     r.add_inout_arg().insert_string("[string 4]");
+     r.add_out_arg().type(orb.get_primitive_tc(TCKind.tk_double));
+ 
+     NVList para = r.arguments();
+ 
+     System.out.println(" --- Parameters before invocation: ");
+ 
+     System.out.println("  octet " + para.item(0).value().extract_octet());
+     System.out.println("  long (in parameter) " +
+                        para.item(1).value().extract_long()
+                       );
+     System.out.println("  short " + para.item(2).value().extract_short());
+     System.out.println("  string " + para.item(3).value().extract_string());
+ 
+     // For the last parameter, the value is not set.
+     r.set_return_type(orb.get_primitive_tc(TCKind.tk_long));
+ 
+     r.invoke();
+ 
+     para = r.arguments();
+ 
+     System.out.println(" --- Parameters after invocation:");
+ 
+     System.out.println("  octet " + para.item(0).value().extract_octet());
+     System.out.println("  long (in parameter, must not be changed) " +
+                        para.item(1).value().extract_long()
+                       );
+     System.out.println("  short " + para.item(2).value().extract_short());
+     System.out.println("  string " + para.item(3).value().extract_string());
+     System.out.println("  double " + para.item(4).value().extract_double());
+ 
+     System.out.println("  Returned value " + r.result().value().extract_long());
+   }
+ 
+   /**
+    * Test catching the system exception, thrown on the remote side.
+    */
+   public void testSystemException()
+   {
+     System.out.println("**** Test system exception:");
+     try
+       {
+         ExceptionList exList = orb.create_exception_list();
+         exList.add(WeThrowThisExceptionHelper.type());
+ 
+         Request rq =
+           object._create_request(null, "throwException", orb.create_list(1),
+                                  null, exList, null
+                                 );
+ 
+         rq.add_in_arg().insert_long(-55);
+ 
+         rq.invoke();
+ 
+         throw new InternalError();
+       }
+     catch (BAD_OPERATION ex)
+       {
+         System.out.println("  The expected BAD_OPERATION, minor code " +
+                            ex.minor + ", has been thrown on remote side."
+                           );
+       }
+   }
+ 
+   /**
+    * Test catching the user exception, thrown on the remote side.
+    */
+   public void testUserException()
+   {
+     System.out.println("**** Test user exception:");
+ 
+     ExceptionList exList = orb.create_exception_list();
+     exList.add(WeThrowThisExceptionHelper.type());
+ 
+     Request rq =
+       object._create_request(null, "throwException", orb.create_list(1), null,
+                              exList, null
+                             );
+ 
+     rq.add_in_arg().insert_long(123);
+     rq.invoke();
+ 
+     UnknownUserException uku = (UnknownUserException) rq.env().exception();
+     WeThrowThisException our_exception = WeThrowThisExceptionHelper.extract(uku.except);
+ 
+     System.out.println("  Our user exception, field " + our_exception.ourField +
+                        ", has been thrown on remote side."
+                       );
+   }
+ 
+   /**
+    * Passes wide (UTF-16) string and narrow (ISO8859_1) string.
+    * @see gnu.CORBA.GIOP.CharSets_OSF for supported and default
+    * encodings.
+    */
+   public void testWideNarrowStrings()
+                              throws BAD_OPERATION
+   {
+     System.out.println("**** Test 8 bit and 16 bit char strings");
+ 
+     Request rq =
+       object._create_request(null, "passCharacters", orb.create_list(0), null);
+ 
+     rq.add_in_arg().insert_wstring("wide string");
+     rq.add_in_arg().insert_string("narrow string");
+ 
+     rq.set_return_type(orb.get_primitive_tc(TCKind.tk_wstring));
+ 
+     rq.invoke();
+ 
+     System.out.println("  Returned ' " + rq.result().value().extract_wstring());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPass.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPass.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPass.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPass.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,66 ----
+ /* StructureToPass.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ 
+ /**
+  * The data structure, passed from to the server from client in our tests.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class StructureToPass
+   implements org.omg.CORBA.portable.IDLEntity
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The first string, stored in this structure (defined as
+    * "narrow string").
+    */
+   public String a;
+ 
+   /**
+    * The second string, stored in this structure (define as
+    * "wide" (usually Unicode) string.
+    */
+   public String b;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHelper.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHelper.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHelper.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,101 ----
+ /* StructureToPassHelper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.StructMember;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ /**
+  * The helper operations for the {@link StructureToPass}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class StructureToPassHelper
+ {
+   /**
+    * The repository ID of the {@link StructureToPass}.
+    */
+   private static String id =
+     "IDL:gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPass:1.0";
+ 
+   /**
+    * Get the repository id.
+    */
+   public static String id()
+   {
+     return id;
+   }
+ 
+   /**
+    * Read the structure from the CDR stram.
+    */
+   public static StructureToPass read(InputStream istream)
+   {
+     StructureToPass value = new StructureToPass();
+     value.a = istream.read_string();
+     value.b = istream.read_wstring();
+     return value;
+   }
+ 
+   /**
+    * Get the type code of this structure.
+    */
+   public static synchronized TypeCode type()
+   {
+     StructMember[] members = new StructMember[ 2 ];
+     TypeCode member = null;
+     member = ORB.init().create_string_tc(0);
+     members [ 0 ] = new StructMember("a", member, null);
+     member = ORB.init().create_string_tc(0);
+     members [ 1 ] = new StructMember("b", member, null);
+     return ORB.init().create_struct_tc(StructureToPassHelper.id(), "StructureToPass", members);
+   }
+ 
+   /**
+    * Write the structure into the CDR stream.
+    */
+   public static void write(OutputStream ostream, StructureToPass value)
+   {
+     ostream.write_string(value.a);
+     ostream.write_wstring(value.b);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHolder.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHolder.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,37 ----
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ public final class StructureToPassHolder
+   implements Streamable
+ {
+   public StructureToPass value;
+ 
+   public StructureToPassHolder()
+   {
+   }
+ 
+   public StructureToPassHolder(StructureToPass initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   public void _read(InputStream i)
+   {
+     value = StructureToPassHelper.read(i);
+   }
+ 
+   public org.omg.CORBA.TypeCode _type()
+   {
+     return StructureToPassHelper.type();
+   }
+ 
+   public void _write(OutputStream o)
+   {
+     StructureToPassHelper.write(o, value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturn.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturn.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturn.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturn.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,71 ----
+ /* StructureToReturn.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.portable.IDLEntity;
+ 
+ /**
+  * This data structure is returned from the server to client in our tests.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class StructureToReturn
+   implements IDLEntity
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The string field.
+    */
+   public String c;
+ 
+   /**
+    * The CORBA array field. This field is handled as the fixed
+    * size CORBA array, but structures can also have the variable
+    * size CORBA sequences.
+    */
+   public int[] arra = new int[3];
+ 
+   /**
+    * The int (CORBA long) field.
+    */
+   public int n;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHelper.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHelper.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHelper.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,114 ----
+ /* StructureToReturnHelper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.StructMember;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ /**
+  * This class defines the helper operations for {@link StructureToReturn}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class StructureToReturnHelper
+ {
+   /**
+    * The repository id.
+    */
+   private static String _id =
+     "IDL:gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturn:1.0";
+ 
+   /**
+    * Return the repository id.
+    */
+   public static String id()
+   {
+     return _id;
+   }
+ 
+   /**
+    * Read the structure from the CDR stream.
+    */
+   public static StructureToReturn read(InputStream istream)
+   {
+     StructureToReturn value = new StructureToReturn();
+     value.n = istream.read_long();
+     value.c = istream.read_wstring();
+     value.arra = new int[ 3 ];
+ 
+     // Read the fixed size array.
+     for (int i = 0; i < 3; i++)
+       value.arra [ i ] = istream.read_long();
+     return value;
+   }
+ 
+   /**
+    * Create the typecode.
+    */
+   public static synchronized TypeCode type()
+   {
+     StructMember[] members = new StructMember[ 3 ];
+     TypeCode member = ORB.init().get_primitive_tc(TCKind.tk_long);
+     members [ 0 ] = new StructMember("n", member, null);
+     member = ORB.init().create_string_tc(0);
+     members [ 1 ] = new StructMember("c", member, null);
+     member = ORB.init().get_primitive_tc(TCKind.tk_long);
+     member = ORB.init().create_array_tc(3, member);
+     members [ 2 ] = new StructMember("arra", member, null);
+     return ORB.init().create_struct_tc(StructureToReturnHelper.id(), "StructureToReturn",
+                                        members
+                                       );
+   }
+ 
+   /**
+    * Write the structure to the CDR stream.
+    */
+   public static void write(OutputStream ostream, StructureToReturn value)
+   {
+     ostream.write_long(value.n);
+     ostream.write_wstring(value.c);
+ 
+     // Write the fixed size array.
+     for (int i = 0; i < 3; i++)
+       ostream.write_long(value.arra [ i ]);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHolder.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHolder.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,60 ----
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ /**
+  * The holder for the structure, returned from the server.
+  */
+ public final class StructureToReturnHolder
+   implements Streamable
+ {
+   /**
+    * The enclosed structure.
+    */
+   public StructureToReturn value = null;
+ 
+   /**
+    * Create the empty holder.
+    */
+   public StructureToReturnHolder()
+   {
+   }
+ 
+   /**
+    * Crate the holder with the defined initial value.
+    */
+   public StructureToReturnHolder(StructureToReturn initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Read the value from the CDR stream.
+    */
+   public void _read(InputStream in)
+   {
+     value = StructureToReturnHelper.read(in);
+   }
+ 
+   /**
+    * Get the typecode of this structure.
+    */
+   public TypeCode _type()
+   {
+     return StructureToReturnHelper.type();
+   }
+ 
+   /**
+    * Write the value from the CDR stream.
+    * @param out
+    */
+   public void _write(OutputStream out)
+   {
+     StructureToReturnHelper.write(out, value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNode.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNode.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNode.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,60 ----
+ /* TreeNode.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ /**
+  * The support for the tree structure, used in the test of
+  * ability to pass and return the tree structure.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class TreeNode
+   implements org.omg.CORBA.portable.IDLEntity
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /** The TreeNode name */
+   public String name = null;
+ 
+   /** The TreeNode children. */
+   public TreeNode[] children = null;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHelper.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHelper.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHelper.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,160 ----
+ /* TreeNodeHelper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.StructMember;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ /**
+  * This class is used for various helper operations around the
+  * tree {@link} structure.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class TreeNodeHelper
+ {
+   /**
+    * The TreeNode repository id, used to identify the structure.
+    */
+   private static String _id =
+     "IDL:gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNode:1.0";
+ 
+   /**
+    * Caches the typecode, allowing to compute it only once.
+    */
+   private static TypeCode typeCode;
+ 
+   /**
+    * This is used to handle the recursive object references in
+    * CORBA - supported way. The tree TreeNode definition is recursive,
+    * as the TreeNode contains the sequence of the nodes as its field.
+    */
+   private static boolean active;
+ 
+   /**
+    * Extract the tree TreeNode from the unversal CORBA wrapper, Any.
+    */
+   public static TreeNode extract(Any a)
+   {
+     return read(a.create_input_stream());
+   }
+ 
+   /**
+    * Get the TreeNode string identifer.
+    */
+   public static String id()
+   {
+     return _id;
+   }
+ 
+   /**
+    * Insert the TreeNode into the universal CORBA wrapper, Any.
+    */
+   public static void insert(Any a, TreeNode that)
+   {
+     OutputStream out = a.create_output_stream();
+     a.type(type());
+     write(out, that);
+     a.read_value(out.create_input_stream(), type());
+   }
+ 
+   /**
+    * Read the TreeNode from the common data reprentation (CDR) stream.
+    */
+   public static TreeNode read(InputStream istream)
+   {
+     TreeNode value = new TreeNode();
+     value.name = istream.read_string();
+ 
+     int _len0 = istream.read_long();
+     value.children = new TreeNode[ _len0 ];
+     for (int i = 0; i < value.children.length; ++i)
+       value.children [ i ] = TreeNodeHelper.read(istream);
+     return value;
+   }
+ 
+   /**
+    * Get the TreeNode type code definition.
+    */
+   public static synchronized TypeCode type()
+   {
+     // Compute the type code only once.
+     if (typeCode == null)
+       {
+         synchronized (TypeCode.class)
+           {
+             if (typeCode == null)
+               {
+                 // To avoid the infinite recursion loop, the
+                 // recursive reference is handled in specific way.
+                 if (active)
+                   return ORB.init().create_recursive_tc(_id);
+                 active = true;
+ 
+                 // List all memebers of the TreeNode structure.
+                 StructMember[] members = new StructMember[ 2 ];
+                 TypeCode memberType;
+                 memberType = ORB.init().create_string_tc(0);
+                 members [ 0 ] = new StructMember("name", memberType, null);
+                 memberType = ORB.init().create_recursive_tc("");
+                 members [ 1 ] = new StructMember("children", memberType, null);
+                 typeCode =
+                   ORB.init().create_struct_tc(TreeNodeHelper.id(), "TreeNode", members);
+                 active = false;
+               }
+           }
+       }
+     return typeCode;
+   }
+ 
+   /**
+    * Write the TreeNode into the common data reprentation (CDR) stream.
+    */
+   public static void write(OutputStream ostream, TreeNode value)
+   {
+     ostream.write_string(value.name);
+     ostream.write_long(value.children.length);
+     for (int i = 0; i < value.children.length; ++i)
+       TreeNodeHelper.write(ostream, value.children [ i ]);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHolder.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHolder.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,100 ----
+ /* TreeNodeHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ /**
+  * The TreeNode holder is a wrapper about the TreeNode data structure. It
+  * can be used where the TreeNode must be passed both to and from
+  * the method being called. The same structure holds the tree,
+  * as it can be represented as a root TreeNode with children.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class TreeNodeHolder
+   implements Streamable
+ {
+   /**
+    * Stores the TreeNode value.
+    */
+   public TreeNode value;
+ 
+   /**
+    * Creates the TreeNode holder with the null initial value.
+    */
+   public TreeNodeHolder()
+   {
+   }
+ 
+   /**
+    * Creates the TreeNode holder with the given initial value.
+    */
+   public TreeNodeHolder(TreeNode initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Reads the TreeNode value from the common data representation (CDR)
+    * stream.
+    */
+   public void _read(InputStream in)
+   {
+     value = TreeNodeHelper.read(in);
+   }
+ 
+   /**
+    * Writes the TreeNode value into common data representation (CDR)
+    * stream.
+    * @return
+    */
+   public TypeCode _type()
+   {
+     return TreeNodeHelper.type();
+   }
+ 
+   public void _write(OutputStream out)
+   {
+     TreeNodeHelper.write(out, value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisException.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisException.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisException.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,75 ----
+ /* WeThrowThisException.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.UserException;
+ import org.omg.CORBA.portable.IDLEntity;
+ 
+ /**
+  * Our user exception, thrown in the tests of handling the exceptions,
+  * thrown on remote side. The exception contains the user - defined
+  * data field that is transferred from client to the server when the
+  * exception is thrown.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class WeThrowThisException
+   extends UserException
+   implements IDLEntity
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * Our specific field, transferred to client.
+    */
+   public int ourField;
+ 
+   /**
+    * Create the exception.
+    *
+    * @param _ourField the value of our specific field.
+    */
+   public WeThrowThisException(int _ourField)
+   {
+     ourField = _ourField;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisExceptionHelper.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisExceptionHelper.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisExceptionHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisExceptionHelper.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,116 ----
+ /* WeThrowThisExceptionHelper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.StructMember;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ 
+ /**
+  * The class, providing various helper operations with our user
+  * exception.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class WeThrowThisExceptionHelper
+ {
+   /**
+    * The exception repository id. This name is also used to find the
+    * mapping local CORBA class.
+    */
+   private static String _id =
+     "IDL:gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisException:1.0";
+ 
+   /**
+    * Get the exception repository id.
+    */
+   public static String id()
+   {
+     return _id;
+   }
+ 
+   /**
+    * Extract the exception from the given Any where it might be
+    * wrapped.
+    */
+   public static WeThrowThisException extract(Any a)
+   {
+     return read(a.create_input_stream());
+   }
+ 
+   /**
+    * Read the exception from the CDR stream.
+    */
+   public static WeThrowThisException read(org.omg.CORBA.portable.InputStream istream)
+   {
+     WeThrowThisException value = new WeThrowThisException(0);
+ 
+     // The repository ID is not used
+     istream.read_string();
+     value.ourField = istream.read_long();
+     return value;
+   }
+ 
+   /**
+    * Create the type code of this exception.
+    */
+   public static synchronized TypeCode type()
+   {
+     StructMember[] members = new StructMember[ 1 ];
+     TypeCode member = null;
+     member = ORB.init().get_primitive_tc(TCKind.tk_long);
+     members [ 0 ] = new StructMember("ourField", member, null);
+     return ORB.init().create_struct_tc(WeThrowThisExceptionHelper.id(),
+                                        "WeThrowThisException", members
+                                       );
+   }
+ 
+   /**
+    * Write the exception into the CDR stream.
+    */
+   public static void write(org.omg.CORBA.portable.OutputStream ostream,
+                            WeThrowThisException value
+                           )
+   {
+     ostream.write_string(id());
+     ostream.write_long(value.ourField);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterImplBase.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterImplBase.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterImplBase.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterImplBase.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,209 ----
+ /* _DemoTesterImplBase.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.ByteHolder;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.DoubleHolder;
+ import org.omg.CORBA.ShortHolder;
+ import org.omg.CORBA.StringHolder;
+ import org.omg.CORBA.StringSeqHelper;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.InvokeHandler;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ResponseHandler;
+ 
+ /**
+  * The base for the class that is actually implementing the functionality
+  * of the object on the server side ({@link DemoServant} of our case).
+  * 
+  * Following CORBA standards, the name of this class must start from
+  * underscore and end by the "ImplBase".
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class _DemoTesterImplBase
+   extends ObjectImpl
+   implements DemoTester, InvokeHandler
+ {
+ /**
+  * When the server receives the request message from client, it
+  * calls this method.
+  *
+  * @param a_method the method name.
+  * @param in the CDR stream, from where the implementing code must
+  * read the method parameters.
+  * @param rh the response handler, used to get the stream where
+  * the returned values must be written.
+  *
+  * @return the stream, obtained from the response handler.
+  */
+   public OutputStream _invoke(String a_method, InputStream in,
+                               ResponseHandler rh
+                              )
+   {
+     OutputStream out;
+ 
+     /* Get the field value. */
+     if (a_method.equals("_get_theField"))
+       {
+         int result = (int) 0;
+         result = theField();
+         out = rh.createReply();
+         out.write_long(result);
+       }
+     else
+     /* Set the field value. */
+     if (a_method.equals("_set_theField"))
+       {
+         int newTheField = in.read_long();
+         theField(newTheField);
+         out = rh.createReply();
+       }
+     else
+     /* Logs calls to the file. */
+     if (a_method.equals("sayHello"))
+       {
+         sayHello();
+         out = rh.createReply();
+       }
+     else
+     /* Passes various parameters in both directions. */
+     if (a_method.equals("passSimple"))
+       {
+         ByteHolder an_octet = new ByteHolder();
+         an_octet.value = in.read_octet();
+ 
+         int a_long = in.read_long();
+         ShortHolder a_short = new ShortHolder();
+         a_short.value = in.read_short();
+ 
+         StringHolder a_string = new StringHolder();
+         a_string.value = in.read_string();
+ 
+         DoubleHolder a_double = new DoubleHolder();
+         int result = passSimple(an_octet, a_long, a_short, a_string, a_double);
+         out = rh.createReply();
+         out.write_long(result);
+         out.write_octet(an_octet.value);
+         out.write_short(a_short.value);
+         out.write_string(a_string.value);
+         out.write_double(a_double.value);
+       }
+     else
+     /* Passes the 'wide' (usually Unicode) string and the ordinary string. */
+     if (a_method.equals("passCharacters"))
+       {
+         String wide = in.read_wstring();
+         String narrow = in.read_string();
+         String result = null;
+         result = passCharacters(wide, narrow);
+         out = rh.createReply();
+         out.write_wstring(result);
+       }
+     else
+     /*
+       Throws either 'WeThrowThisException' with the 'ourField' field
+       initialised to the passed positive value
+       or system exception (if the parameter is zero or negative).
+      */
+     if (a_method.equals("throwException"))
+       {
+         try
+           {
+             int parameter = in.read_long();
+             throwException(parameter);
+             out = rh.createReply();
+           }
+         catch (WeThrowThisException exception)
+           {
+             out = rh.createExceptionReply();
+             WeThrowThisExceptionHelper.write(out, exception);
+           }
+       }
+     else
+     /* Passes and returns the structures. */
+     if (a_method.equals("passStructure"))
+       {
+         StructureToPass in_structure = StructureToPassHelper.read(in);
+         StructureToReturn result = null;
+         result = passStructure(in_structure);
+         out = rh.createReply();
+         StructureToReturnHelper.write(out, result);
+       }
+     else
+     /* Passes and returns the string sequence. */
+     if (a_method.equals("passStrings"))
+       {
+         String[] arg = StringSeqHelper.read(in);
+         String[] result = null;
+         result = passStrings(arg);
+         out = rh.createReply();
+         StringSeqHelper.write(out, result);
+       }
+     else
+     /** Pass and return the tree structure */
+     if (a_method.equals("passTree"))
+       {
+         TreeNodeHolder tree = new TreeNodeHolder();
+         tree.value = TreeNodeHelper.read(in);
+         passTree(tree);
+         out = rh.createReply();
+         TreeNodeHelper.write(out, tree.value);
+       }
+ 
+     else
+       throw new BAD_OPERATION("No method: " + a_method, 0,
+                               CompletionStatus.COMPLETED_MAYBE
+                              );
+ 
+     return out;
+   }
+ 
+   /**
+    * Return an array of this object repository ids.
+    */
+   public String[] _ids()
+   {
+     // They are the same as for the stub.
+     return _DemoTesterStub._ids;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterStub.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterStub.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterStub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterStub.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,429 ----
+ /* _DemoTesterStub.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.SimpleCommunication.communication;
+ 
+ import org.omg.CORBA.ByteHolder;
+ import org.omg.CORBA.DoubleHolder;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ShortHolder;
+ import org.omg.CORBA.StringHolder;
+ import org.omg.CORBA.StringSeqHelper;
+ import org.omg.CORBA.portable.ApplicationException;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.RemarshalException;
+ 
+ /**
+  * The stub (proxy) class, representing the remote object on the client
+  * side. It has all the same methods as the actual implementation
+  * on the server side. These methods contain the code for remote
+  * invocation.
+  * 
+  * Following CORBA standards, the name of this class must start from
+  * underscore and end by the "Stub".
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class _DemoTesterStub
+   extends ObjectImpl
+   implements DemoTester
+ {
+   /**
+    * A string array of DemoTester repository ids.
+    */
+   public static String[] _ids =
+     {
+       "IDL:gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoTester:1.0"
+     };
+ 
+   /**
+    * Return an array of DemoTester repository ids.
+    */
+   public String[] _ids()
+   {
+     return _ids;
+   }
+ 
+   /**
+    * Passes wide (UTF-16) string and narrow (ISO8859_1) string.
+    * @see gnu.CORBA.GIOP.CharSets_OSF for supported and default
+    * encodings.
+    */
+   public String passCharacters(String wide, String narrow)
+   {
+     InputStream in = null;
+     try
+       {
+         // Get the output stream.
+         OutputStream out = _request("passCharacters", true);
+ 
+         // Write the parameters.
+ 
+         // The first string is passed as "wide"
+         // (usually 16 bit UTF-16) string.
+         out.write_wstring(wide);
+ 
+         // The second string is passed as "narrow"
+         // (usually 8 bit ISO8859_1) string.
+         out.write_string(narrow);
+ 
+         // Do the invocation.
+         in = _invoke(out);
+ 
+         // Read the method return value.
+         String result = in.read_wstring();
+         return result;
+       }
+     catch (ApplicationException ex)
+       {
+         // The exception has been throws on remote side, but we
+         // do not expect any. Throw the MARSHAL exception.
+         in = ex.getInputStream();
+         throw new MARSHAL(ex.getId());
+       }
+     catch (RemarshalException _rm)
+       {
+         // This exception means that the parameters must be re-written.
+         return passCharacters(wide, narrow);
+       }
+     finally
+       {
+         // Release the resources, associated with the reply stream.
+         _releaseReply(in);
+       }
+   }
+ 
+   /**
+    * Passes various parameters in both directions. The parameters that
+    * shoud also return the values are wrapped into holders.
+    */
+   public int passSimple(ByteHolder an_octet, int a_long, ShortHolder a_short,
+                         StringHolder a_string, DoubleHolder a_double
+                        )
+   {
+     InputStream in = null;
+     try
+       {
+         // Get the stream where the parameters must be written:
+         OutputStream out = _request("passSimple", true);
+ 
+         // Write the parameters.
+         out.write_octet(an_octet.value);
+         out.write_long(a_long);
+         out.write_short(a_short.value);
+         out.write_string(a_string.value);
+ 
+         // Invoke the method.
+         in = _invoke(out);
+ 
+         // Read the returned values.
+         int result = in.read_long();
+ 
+         // Read the inout and out parameters.
+         an_octet.value = in.read_octet();
+         a_short.value = in.read_short();
+         a_string.value = in.read_string();
+         a_double.value = in.read_double();
+         return result;
+       }
+     catch (ApplicationException ex)
+       {
+         // Handle excepion on remote side.
+         in = ex.getInputStream();
+         throw new MARSHAL(ex.getId());
+       }
+     catch (RemarshalException _rm)
+       {
+         // Handle instruction to resend the parameters.
+         return passSimple(an_octet, a_long, a_short, a_string, a_double);
+       }
+     finally
+       {
+         _releaseReply(in);
+       }
+   }
+ 
+   /**
+     Passes and returns the string sequence.
+     */
+   public String[] passStrings(String[] arg)
+   {
+     InputStream in = null;
+     try
+       {
+         // Get the stream where the parameters must be written:
+         OutputStream out = _request("passStrings", true);
+ 
+         // Wrap the string array using the string sequence helper.
+         StringSeqHelper.write(out, arg);
+ 
+         // Invoke the method.
+         in = _invoke(out);
+ 
+         // Read the returned result using the string sequence helper.
+         String[] result = StringSeqHelper.read(in);
+         return result;
+       }
+     catch (ApplicationException ex)
+       {
+         // Handle the exception, thrown on remote side.
+         in = ex.getInputStream();
+         throw new MARSHAL(ex.getId());
+       }
+     catch (RemarshalException _rm)
+       {
+         return passStrings(arg);
+       }
+     finally
+       {
+         _releaseReply(in);
+       }
+   }
+ 
+   /**
+     Passes and returns the structures.
+     */
+   public StructureToReturn passStructure(StructureToPass in_structure)
+   {
+     InputStream in = null;
+     try
+       {
+         // Get the stream where the parameters must be written.
+         OutputStream out = _request("passStructure", true);
+ 
+         // Write the structure, using its helper.
+         StructureToPassHelper.write(out, in_structure);
+ 
+         // Invoke the method.
+         in = _invoke(out);
+ 
+         // Read the returned structer, using another helper.
+         StructureToReturn result = StructureToReturnHelper.read(in);
+         return result;
+       }
+     catch (ApplicationException ex)
+       {
+         in = ex.getInputStream();
+         throw new MARSHAL(ex.getId());
+       }
+     catch (RemarshalException _rm)
+       {
+         return passStructure(in_structure);
+       }
+     finally
+       {
+         _releaseReply(in);
+       }
+   }
+ 
+   /**
+    * Pass and return the tree structure
+    */
+   public void passTree(TreeNodeHolder tree)
+   {
+     InputStream in = null;
+     try
+       {
+         // Get the stream where the parameters must be written.
+         OutputStream out = _request("passTree", true);
+ 
+         // Write the tree (TreeNode with its chilred, grandchildren and so on),
+         // using the appropriate helper.
+         TreeNodeHelper.write(out, tree.value);
+ 
+         // Call the method.
+         in = _invoke(out);
+ 
+         // Read the returned tree.
+         tree.value = TreeNodeHelper.read(in);
+       }
+     catch (ApplicationException ex)
+       {
+         // Handle eception on remote side.
+         in = ex.getInputStream();
+         throw new MARSHAL(ex.getId());
+       }
+     catch (RemarshalException _rm)
+       {
+         passTree(tree);
+       }
+     finally
+       {
+         _releaseReply(in);
+       }
+   }
+ 
+   /**
+    * One way call of the remote method.
+    */
+   public void sayHello()
+   {
+     InputStream in = null;
+     try
+       {
+         // As we do not expect any response, the second
+         // parameter is 'false'.
+         OutputStream out = _request("sayHello", false);
+         in = _invoke(out);
+       }
+     catch (ApplicationException ex)
+       {
+         in = ex.getInputStream();
+         throw new MARSHAL(ex.getId());
+       }
+     catch (RemarshalException _rm)
+       {
+         sayHello();
+       }
+     finally
+       {
+         _releaseReply(in);
+       }
+   }
+ 
+   /**
+    * Get the field value.
+    */
+   public int theField()
+   {
+     InputStream in = null;
+     try
+       {
+         // The special name of operation instructs just to get
+         // the field value rather than calling the method.
+         OutputStream out = _request("_get_theField", true);
+         in = _invoke(out);
+ 
+         int result = in.read_long();
+         return result;
+       }
+     catch (ApplicationException ex)
+       {
+         in = ex.getInputStream();
+         throw new MARSHAL(ex.getId());
+       }
+     catch (RemarshalException _rm)
+       {
+         return theField();
+       }
+     finally
+       {
+         _releaseReply(in);
+       }
+   }
+ 
+   /**
+    * Set the field value.
+    */
+   public void theField(int newTheField)
+   {
+     InputStream in = null;
+     try
+       {
+         // The special name of operation instructs just to set
+         // the field value rather than calling the method.
+         OutputStream out = _request("_set_theField", true);
+         out.write_long(newTheField);
+         in = _invoke(out);
+       }
+     catch (ApplicationException ex)
+       {
+         in = ex.getInputStream();
+         throw new MARSHAL(ex.getId());
+       }
+     catch (RemarshalException _rm)
+       {
+         theField(newTheField);
+       }
+     finally
+       {
+         _releaseReply(in);
+       }
+   }
+ 
+   /**
+    * The server side exception tests.
+    *
+    * @param parameter the server throws the user exception in the case
+    * of the positive value of this argument, and system
+    * exception otherwise.
+    *
+    * @throws WeThrowThisException
+    */
+   public void throwException(int parameter)
+                       throws WeThrowThisException
+   {
+     InputStream in = null;
+     try
+       {
+         // Get stream.
+         OutputStream out = _request("throwException", true);
+ 
+         // Write parameter.
+         out.write_long(parameter);
+ 
+         // Call method.
+         in = _invoke(out);
+       }
+     catch (ApplicationException ex)
+       {
+         in = ex.getInputStream();
+ 
+         // Get the exception id.
+         String id = ex.getId();
+ 
+         // If this is the user exception we expect to catch, read and throw
+         // it here. The system exception, if thrown, is handled by _invoke.
+         if (id.equals("IDL:gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisException:1.0")
+            )
+           throw WeThrowThisExceptionHelper.read(in);
+         else
+           throw new MARSHAL(id);
+       }
+     catch (RemarshalException _rm)
+       {
+         throwException(parameter);
+       }
+     finally
+       {
+         _releaseReply(in);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/README.html gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/README.html
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/README.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/README.html	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,493 ----
+ <html>
+   <head>
+     <title>Five-in-a-row v 0.0</title>
+   </head>
+   <body LANG="en-US">
+     <h1>
+       <i>Five-in-a-row
+       </i> 0.0 supplementary documentation
+     </h1>
+     <h3>Introduction and rules
+     </h3>
+     <p>
+       <i>Five-in-a-row
+       </i> is a two player strategy game. The players
+       are connected via network using CORBA-based RMI/IIOP protocol and
+       make they moves with the help of the Swing-based
+       interface. While playing, the users can also chat.
+     </p>
+     <p>The system consists of the single server and any number of
+       interconnected players. The person, willing to play, starts the
+       client and connects the server. The server redirects call to the
+       partner that has previously connected the same server, also willing
+       to play.
+     </p>
+     <p>The game desk is a field where it is possible to set O's
+       and X'es, one per move. The goal is to get five O's in a row while
+       preventing your partner from getting five X's in a row. Vertical,
+       horizontal and diagonal rows are allowed. The system detects the
+       loss-victory situation on the desk, but currently does not serve as a
+       playing partner, requiring at least two human players for this game.
+     </p>
+     <p>Both players can at any time reset the game (restarting it with
+       the same player) or leave the game (disconnecting). The disconnected
+       player can contact the game manager again, requesting to find another
+       partner.
+     </p>
+     <p>Simple as it is, the application has some features of the typical
+       role playing game that frequently just has more states, actions,
+       possible moves and also provides far richer graphics environment. The
+       game manger serves as a World-Wide-Pub where you can always find a
+       partner to play.
+ 
+       The players can made both unsynchronized (chatting, game reset and
+       leaving) and synchronized (moves) actions. The game state changes
+       while playing, and the set of the available actions depends on the
+       current state. Finally, the mouse and canvas are involved. However
+       using RMI/IIOP machinery allowed to implement all this functionality
+       with just 13 classes (plus 4 generated), all of them being rather
+       simple.
+       
+       This example refers to the standard classes only and must be buildable
+       from your IDE as long as it has any java 1.4 compiler.       
+     </p>
+     <p>
+       The used IIOP protocol must ensure interoperability, allowing players
+       to use different java virtual machines and operating systems.
+       The processors may have the opposite byte order.
+     </p>
+     <h3>Configuration and run
+     </h3>
+     <p>The game manager server executable class is
+       <i>gnu.classpath.examples.CORBA.swing.x5.X5Server
+       </i>. After start,
+       it will print to console the Internet address that must be entered to
+       the client to reach the manager.
+     </p>
+     <p>The client executable class it
+       <i>gnu.classpath.examples.CORBA.swing.x5.Demo
+       </i>.
+     </p>
+     <p>The game should run with GNU Classpath
+       0.19 and Sun Microsystems java 1.5.0_04. Due later fixed bugs it will
+       not run with the older versions of these two implementations.
+     </p>
+     <p>The game manager HTTP server uses port
+       1500. Hence all firewalls between the server and the player must be
+       configured to allow HTTP on 1500. The ports, used by the RMI/IIOP are
+       not persistent. GNU Classpath is configured to take ports 1501, 1502
+       and 1503 (the firewalls must allow to use them for RMI/IIOP). The
+       CORBA implementation other than Classpath may use different port
+       values. Unfortunately, there is no standard method to configure the
+       used port range in a vendor-independent way.
+     </p>
+     <h3>The game server
+     </h3>
+     <p>The game manager is first reachable via http:// protocol (for
+       instance http://123.456.7.89:1500). The simple server at this port
+       always serves much longer string, representing the CORBA stringified
+       object reference (IOR). The
+       <i>Five-in-a-row&nbsp;
+       </i>client uses
+       this reference to find and access the remote game server object.
+     </p>
+     <p>If the server player queue is empty, it simply queues this player.
+       If the queue is not empty, the server introduces the arrived player
+       and queued player to each other as leaves the them alone. When
+       playing, the two clients communicate with each other directly, so the
+       server is just a &ldquo;meeting point&rdquo; where the players can
+       find each other. The game server is a console-only application.
+     </p>
+     <p>The initial server http:// address must be transferred to players
+       by some other means of communication (web chat, E-mail, link in a web
+       site and so on). The server writes this address to the specified
+       file, and the client can also take the default value from the same
+       file. This is convenient when all applications run on a single
+       machine, but also may be used to transfer the address via shared
+       filesystem.
+     </p>
+     <h3>The game client
+     </h3>
+     <p>The clients are Swing-based GUI applications, capable for remote
+       communication with each other and with the game manager. They have a
+       set of predefined states and switch between these states in
+       accordance to the preprogrammed logic. The client states are defined
+       in the
+       <i>State
+       </i> interface. They are displayed in the bottom left
+       corner of the window and are summarized in the following table:
+     </p>
+     <table BORDER=1 CELLPADDING=4 CELLSPACING=0 WIDTH="100%">
+       <thead>
+         <tr BGCOLOR="#ccccff">
+           <th BGCOLOR="#e6e6ff">
+             Our state
+           </th>
+           <th BGCOLOR="#e6e6ff">
+             Partner state
+           </th>
+           <th BGCOLOR="#e6e6ff">
+             Possible actions
+           </th>
+           <th BGCOLOR="#e6e6ff">
+             Comment
+           </th>
+         </tr>
+       </thead>
+       <tbody>
+         <tr>
+           <td>
+             Disconnected
+           </td>
+           <td>
+             Partner not accessible
+           </td>
+           <td>
+             Connect
+           </td>
+           <td>
+             Initial state.
+           </td>
+         </tr>
+         <tr>
+           <td>
+             Queued
+           </td>
+           <td>
+             Partner not accessible
+           </td>
+           <td>
+             Leave
+           </td>
+           <td>
+             Queued by the game manager.
+           </td>
+         </tr>
+         <tr>
+           <td>
+             I think.
+           </td>
+           <td>
+             I wait for your move
+           </td>
+           <td>
+             Make move, reset game, leave, chat.
+           </td>
+           <td>
+             The person who waited for another player to come starts
+             the game first.
+           </td>
+         </tr>
+         <tr>
+           <td>
+             I wait for your move
+           </td>
+           <td>
+             I think
+           </td>
+           <td>
+             Chat, reset game, leave.
+           </td>
+           <td>
+             After the partner makes the move, the state changes to
+             <i>I think
+             </i>, unless the end of game situation is detected by
+             the desk analyzer.
+           </td>
+         </tr>
+         <tr>
+           <td>
+             I have lost
+           </td>
+           <td>
+             I have won
+           </td>
+           <td>
+             Chat, reset game, leave.
+           </td>
+           <td>
+             Can be entered with the help of the desk analyzer only.
+           </td>
+         </tr>
+         <tr>
+           <td>
+             I have won
+           </td>
+           <td>
+             I have lost
+           </td>
+           <td>
+             Chat, reset game, leave
+           </td>
+           <td>
+             Can be entered with the help of the desk analyzer only.
+           </td>
+         </tr>
+         <tr>
+           <td>
+             Error
+           </td>
+           <td>
+             Any
+           </td>
+           <td>
+             Chat, leave
+           </td>
+           <td>
+             This should never happen under normal work, but the demo
+             program may be modified by the user.
+           </td>
+         </tr>
+       </tbody>
+     </table>
+     <br>
+     <br>
+     As it is seen, being in one of the states, the client expects to
+     be the partner client in a certain defined state, and both clients
+     change they states in a synchronized manner. Each state has its own
+     set of the available actions and each action either preserves the
+     current state (chat, reset) or changes it following the rules. For
+     this simple example, the state change rules are obvious.
+     <h3>The used RMI-IIOP architecture
+     </h3>
+     Both player and game manager servants are derived from the
+     <i>org.omg.PortableServer.Servant
+     </i> and, being servants, are simply
+     connected to the
+     <i>POA
+     </i>with
+     <i>POA.servant_to_reference
+     </i>. The
+     first remote object (game manager) is found using the stringified
+     object reference. No naming service is involved.
+ </p>
+ Where required, the CORBA objects are narrowed into required
+ player and game manager interfaces using method
+ <i>PortableRemoteObject.narrow(org.omg.CORBA.Object object, Class
+   interface_class)
+ </i>, passing the actual interface of the object as
+ the second parameter. After narrowing, the remote side obtains
+ possibility to invoke remote methods, defined in the interface of
+ this object. After the first remote object is found, other objects
+ can be simply passed as the method parameters. For instance, the game
+ manager introduces another player by passing its reference as a
+ parameter to the method
+ <i>Player.start_game.
+ </i>
+ <h3>Class and interface summary
+ </h3>
+ <table BORDER=1 CELLPADDING=3 CELLSPACING=0 WIDTH="100%">
+   <col>
+   <col>
+   <tr>
+     <th COLSPAN=2 BGCOLOR="#e6e6ff">
+       Executables classes
+     </th>
+   </tr>
+   <tr>
+     <td>
+       Demo
+     </td>
+     <td>
+       The main executable class of the game client.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       X5Server
+     </td>
+     <td>
+       The main executable class of the game manager server.
+     </td>
+   </tr>
+ </table>
+ <p></p>
+ <table BORDER=1 CELLPADDING=3 CELLSPACING=0 WIDTH="100%">
+   <tr BGCOLOR="#ccccff">
+     <th COLSPAN=2 BGCOLOR="#e6e6ff">
+       Interface Summary
+     </th>
+   </tr>
+   <tr>
+     <td>
+       GameManager
+     </td>
+     <td>
+       The game manager interface.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       Player
+     </td>
+     <td>
+       Defines remote methods that are invoked by another player or by
+       the challenge server.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       State
+     </td>
+     <td>
+       Defines the states in that the player can be.
+     </td>
+   </tr>
+ </table>
+ &nbsp;
+ <table BORDER=1 CELLPADDING=3 CELLSPACING=0 WIDTH="100%">
+   <col>
+   <col>
+   <tr BGCOLOR="#ccccff">
+     <th COLSPAN=2 BGCOLOR="#e6e6ff">
+       Class Summary
+     </th>
+   </tr>
+   <tr>
+     <td>
+       _GameManager_Stub
+     </td>
+     <td>
+       Normally generated with rmic compiler, this class represents
+       the GameManager Stub on the client side.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       _GameManagerImpl_Tie
+     </td>
+     <td>
+       Normally generated with rmic compiler, this class represents
+       the GameManager Tie on the client side.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       _Player_Stub
+     </td>
+     <td>
+       Generate with rmic, command line rmic -iiop -poa -keep
+       gnu.classpath.examples.CORBA.swing.x5.PlayerImpl (the compiled
+       package must be present in the current folder).
+     </td>
+   </tr>
+   <tr>
+     <td>
+       _PlayerImpl_Tie
+     </td>
+     <td>
+       Generate with rmic, command line rmic -iiop -poa -keep
+       gnu.classpath.examples.CORBA.swing.x5.PlayerImpl (the compiled
+       package must be present in the current folder).
+     </td>
+   </tr>
+   <tr>
+     <td>
+       ChatConstants
+     </td>
+     <td>
+       The chat color code constants, used to indicate who is talking.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       ClientFrame
+     </td>
+     <td>
+       The JFrame of the GUI client.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       GameManagerImpl
+     </td>
+     <td>
+       The manager connects two players into the game.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       IorReader
+     </td>
+     <td>
+       Reads the remote URL.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       OrbStarter
+     </td>
+     <td>
+       Starts the ORBs, involved into this application.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       PlayerImpl
+     </td>
+     <td>
+       The implementation of the PlayerCommunicator, providing the
+       local functionality.
+     </td>
+   </tr>
+   <tr>
+     <td>
+       PlayingDesk
+     </td>
+     <td>
+       Manages actions, related to the game rules and also does all
+       painting.
+     </td>
+   </tr>
+ </table>
+ <h3>See also
+ </h3>
+ <p>
+   <a HREF="http://www.javascripter.net/games/xo/xo.htm">http://www.javascripter.net/games/xo/xo.htm
+   </a>
+ </p>
+ <p>
+   <a HREF="http://www.leepoint.net/notes-java/45examples/55games/five/five.html">http://www.leepoint.net/notes-java/45examples/55games/five/five.html
+   </a>
+ </p>
+ <p>Copyright
+ </p>
+ <p>
+   <font COLOR="#b3b3b3">Copyright (C) 2005 Free Software Foundation,
+     Inc. This file is part of GNU Classpath. GNU Classpath is free
+     software; you can redistribute it and/or modify it under the terms of
+     the GNU General Public License as published by the Free Software
+     Foundation; either version 2, or (at your option) any later version.
+     GNU Classpath 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
+     General Public License for more details. You should have received a
+     copy of the GNU General Public License along with GNU Classpath; see
+     the file COPYING. If not, write to the Free Software Foundation,
+     Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+     Linking this library statically or dynamically with other modules is
+     making a combined work based on this library. Thus, the terms and
+     conditions of the GNU General Public License cover the whole
+     combination. As a special exception, the copyright holders of this
+     library give you permission to link this library with independent
+     modules to produce an executable, regardless of the license terms of
+     these independent modules, and to copy and distribute the resulting
+     executable under terms of your choice, provided that you also meet,
+     for each linked independent module, the terms and conditions of the
+     license of that module. An independent module is a module which is
+     not derived from or based on this library. If you modify this
+     library, you may extend this exception to your version of the
+     library, but you are not obligated to do so. If you do not wish to do
+     so, delete this exception statement from your version.
+   </font>
+ </p>
+ <p>
+   <br>
+   <br>
+ </p>
+ <p>
+ First version written by <a href="http://savannah.gnu.org/users/audriusa">
+ Audrius Me&scaron;kauskas</a>
+ </p>
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/CanvasWorld.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/CanvasWorld.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/CanvasWorld.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/CanvasWorld.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,307 ----
+ /* CanvasWorld.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.awt.Color;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Point;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Iterator;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JFrame;
+ import javax.swing.JScrollPane;
+ 
+ /**
+  * The purpose of this simple example is to check if the mouse events are
+  * correctly received in a scrollable canvas and also if the canvas are
+  * correctly repainted. The similar canvas are used in various games and
+  * interactive demonstrations. 
+  * 
+  * The user can set one of the three possible figures with the different
+  * mouse buttons. The figure must be set where the user have clicked the
+  * mouse.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class CanvasWorld
+   extends JComponent
+   implements MouseListener, State
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * Red oval, set by the left mouse button.
+    */
+   public static final int RED = 0;
+ 
+   /**
+    * Black cross, set by the right mouse button.
+    */
+   public static final int BLACK = 1;
+   
+   /**
+    * Blue and smaller oval, set by the middle mouse button.
+    */
+   public static final int HINT = 2;
+   
+   /**
+    * The message string is displayed at the top of the window.
+    */
+   String message = "Click left, right or middle button in to set the figure";
+   
+   /**
+    * The additinal message, related to the mouse events.
+    */
+   String mouse = "No mouse event so far";
+ 
+   /**
+    * The grid spacing.
+    */
+   static int W = 16;
+ 
+   /**
+    * The radius of the dots being painted.
+    */
+   static int R = W / 3;
+ 
+   /**
+    * The collection of the red dots.
+    */
+   ArrayList reds = new ArrayList();
+ 
+   /**
+    * The collection of the black crosses.
+    */
+   ArrayList blacks = new ArrayList();
+   
+   /**
+    * The collection of the smaller blue crosses.
+    */
+   ArrayList hints = new ArrayList();
+ 
+   public CanvasWorld()
+   {
+     try
+       {
+         addMouseListener(this);
+       }
+     catch (Exception e)
+       {
+         throw new AssertionError(e);
+       }
+   }
+ 
+   /**
+    * Paint this component.
+    */
+   public void paintComponent(Graphics g)
+   {
+     int w = getWidth();
+     int h = getHeight();
+ 
+     g.setColor(Color.white);
+     g.fillRect(0, 0, w, h);
+ 
+     drawGrid(w, h, g);
+     
+     g.setColor(Color.black);
+     
+     g.drawString(message, W, W);
+     g.drawString(mouse, W, 2*W);
+     
+     drawFigures(g);
+   }
+ 
+   /**
+    * Check for the presence of the given point in the collection.
+    */
+   public final boolean pointPresent(int x, int y, Collection in)
+   {
+     Iterator iter = in.iterator();
+     Point p;
+     while (iter.hasNext())
+       {
+         p = (Point) iter.next();
+         if (p.x == x && p.y == y)
+           return true;
+       }
+     return false;
+   }
+ 
+   public void drawGrid(int w, int h, Graphics g)
+   {
+     g.setColor(Color.lightGray);
+ 
+     int xs = 2*W+W/2;
+     
+     // Draw vertical lines:
+     for (int x = 0; x < w; x += W)
+       {
+         g.drawLine(x, xs, x, h);
+       }
+ 
+     // Draw horizontal lines:
+     for (int y = 3*W; y < h; y += W)
+       {
+         g.drawLine(0, y, w, y);
+       }
+       
+     g.setColor(Color.gray);
+   }
+ 
+   public void drawFigures(Graphics g)
+   {
+     g.setColor(Color.red);
+     drawDots(reds, g, RED);
+ 
+     g.setColor(Color.black);
+     drawDots(blacks, g, BLACK);
+     
+     g.setColor(Color.blue);
+     drawDots(hints, g, HINT);
+   }
+ 
+   public Point makePoint(int x, int y)
+   {
+     return new Point(x / W, y / W);
+   }
+ 
+   /**
+    * Draw a collection of dots (the collor must be set before calling the
+    * method).
+    */
+   public void drawDots(Collection dots, Graphics g, int mode)
+   {
+     Iterator iter = dots.iterator();
+     int x;
+     int y;
+ 
+     int hW = W / 2;
+     int RR = R * 2;
+     int hR = R / 2;
+     Point p;
+     while (iter.hasNext())
+       {
+         p = (Point) iter.next();
+         x = p.x * W + hW;
+         y = p.y * W + hW;
+ 
+         if (mode == RED)
+           g.drawOval(x - R, y - R, RR, RR);
+         else if (mode == BLACK)
+           {
+             g.drawLine(x - R, y - R, x + R, y + R);
+             g.drawLine(x - R, y + R, x + R, y - R);
+           }
+         else
+           {
+             // Hint.
+             g.drawOval(x - hR, y - hR, R, R);
+           }
+       }
+   }
+ 
+   public void mouseClicked(MouseEvent e)
+   {
+     int x = e.getX();
+     int y = e.getY();
+ 
+     Point p = makePoint(x, y);
+ 
+     // Ignore clicks on the occupied cells.
+     if (pointPresent(p.x, p.y, reds) || (pointPresent(p.x, p.y, blacks)))
+       {
+         message = "Clicked on the occupied cell.";
+         return;
+       }
+     else
+       message = "Figure set at ["+p.x+","+p.y+"]";
+ 
+     if (e.getButton() == MouseEvent.BUTTON1)
+       reds.add(p);
+     else if (e.getButton() == MouseEvent.BUTTON3)
+       blacks.add(p);
+     else if (e.getButton() == MouseEvent.BUTTON2)
+       hints.add(p);
+     repaint();
+   }
+ 
+   public void mouseEntered(MouseEvent m)
+   {
+     mouse = "Mouse entered.";
+     repaint();  
+   }
+ 
+   public void mousePressed(MouseEvent m)
+   {
+     mouse = "Mouse pressed at "+m.getX()+","+m.getY();
+     repaint();
+   }
+ 
+   public void mouseReleased(MouseEvent m)
+   {
+     mouse = "Mouse released at "+m.getX()+","+m.getY();    
+     repaint();
+   }
+ 
+   public void mouseExited(MouseEvent m)
+   {
+     mouse = "Mouse exited";
+     repaint();
+   }
+   
+   public static void main(String[] args)
+   {
+     JFrame frame = new JFrame();
+     CanvasWorld world = new CanvasWorld();
+     world.setPreferredSize(new Dimension(1000,1000));
+     frame.add(new JScrollPane(world));
+     frame.setSize(400, 200);
+     frame.setVisible(true);
+   }
+ 
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ChatConstants.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ChatConstants.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ChatConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ChatConstants.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,80 ----
+ /* ChatConstants.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.awt.Color;
+ 
+ /**
+  * The chat color code constants, used to indicate who is talking.
+  * Additionally, the red color is reseved for the most important messages,
+  * related to the start and end of the game.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class ChatConstants
+ {
+   /**
+    * Messages from the local system.
+    */
+   public static byte SYSTEM = 0;
+ 
+   /**
+    * Mirrored messsages from the local player.
+    */
+   public static byte SELF = 1;
+ 
+   /**
+    * Messages from the remote player.
+    */
+   public static byte REMOTE_PLAYER = 2;
+ 
+   /**
+    * Messages from the game server/
+    */
+   public static byte GAME_SERVER = 3;
+   
+   /**
+    * The array of the used colors.
+    */
+   public static Color[] colors =
+     new Color[]
+     {
+       Color.black, new Color(0, 80, 0), new Color(0, 0, 128), Color.blue
+     };
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ClientFrame.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ClientFrame.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ClientFrame.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ClientFrame.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,417 ----
+ /* ClientFrame.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.Color;
+ import java.awt.GridLayout;
+ import java.awt.event.*;
+ import java.io.BufferedWriter;
+ import java.io.File;
+ import java.io.FileWriter;
+ 
+ import java.rmi.RemoteException;
+ 
+ import javax.rmi.PortableRemoteObject;
+ 
+ import javax.swing.*;
+ import java.awt.Dimension;
+ 
+ /**
+  * The JFrame of the GUI client.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ClientFrame
+   extends JFrame
+ {
+   /**
+    * The size of the playing field.
+    */
+   public final Dimension DESK_SIZE = 
+ 	new Dimension(624, 352-PlayingDesk.W);
+ 
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   // Define the application components:
+ 
+   /**
+    * Central panel where the main action takes place.
+    */
+   PlayingDesk desk = new PlayingDesk();
+ 
+   /**
+    * The scroll pane for canvas.
+    */
+   JScrollPane scroll = new JScrollPane();
+ 
+   /**
+    * Will remember the manager IOR.
+    */
+   String mior = "";
+ 
+   // The bottom panel contains the area that is used both to enter URL and
+   // for chatting.
+   JPanel pnBottom = new JPanel();
+ 
+   BorderLayout layBottom = new BorderLayout();
+ 
+   JTextField taUrl = new JTextField();
+ 
+   // The top primitive chatting panel, composed from labels.
+   JPanel pnChat = new JPanel();
+ 
+   GridLayout layChat = new GridLayout();
+ 
+   JLabel lbC3 = new JLabel();
+ 
+   JLabel lbC2 = new JLabel();
+ 
+   JLabel lbC1 = new JLabel();
+ 
+   // The button panel.
+   JPanel pnButtons = new JPanel();
+ 
+   GridLayout layButtons = new GridLayout();
+ 
+   JButton bLeave = new JButton();
+ 
+   JButton bConnect = new JButton();
+ 
+   JButton bExit = new JButton();
+ 
+   JButton bReset = new JButton();
+ 
+   JLabel lbState = new JLabel();
+ 
+   JButton bChat = new JButton();
+   
+   JButton bPaste = new JButton();
+ 
+   public ClientFrame()
+   {
+     try
+       {
+         jbInit();
+       }
+     catch (Exception e)
+       {
+         e.printStackTrace();
+       }
+   }
+ 
+   private void jbInit()
+     throws Exception
+   {
+     desk.frame = this;
+ 
+     pnBottom.setLayout(layBottom);
+ 
+     pnChat.setLayout(layChat);
+     layChat.setColumns(1);
+     layChat.setRows(3);
+ 
+     lbC1.setText("This program needs the game server (see README on how to start it).");
+     lbC2.setText("Enter the game server address (host:port)");
+     lbC3.setText("Pressing \'Connect\' with the empty address will start the server on "
+       + "the local machine.");
+     bLeave.setEnabled(true);
+     bLeave.setToolTipText("Leave if either you have lost or do not want longer to play with "
+       + "this partner.");
+     bLeave.setText("Leave game");
+     bLeave.addActionListener(new java.awt.event.ActionListener()
+     {
+       public void actionPerformed(ActionEvent e)
+       {
+         bLeave_actionPerformed(e);
+       }
+     });
+     bConnect.setToolTipText("Connect your playing partner");
+     bConnect.setText("Connect");
+     bConnect.addActionListener(new java.awt.event.ActionListener()
+     {
+       public void actionPerformed(ActionEvent e)
+       {
+         bConnect_actionPerformed(e);
+       }
+     });
+     pnButtons.setLayout(layButtons);
+     bExit.setToolTipText("Exit this program");
+     bExit.setText("Exit");
+     bExit.addActionListener(new java.awt.event.ActionListener()
+     {
+       public void actionPerformed(ActionEvent e)
+       {
+         bExit_actionPerformed(e);
+       }
+     });
+     layButtons.setHgap(2);
+     bReset.setToolTipText("Restart the game. The partner may choose to exit!");
+     bReset.setText("Reset game");
+     bReset.addActionListener(new java.awt.event.ActionListener()
+     {
+       public void actionPerformed(ActionEvent e)
+       {
+         bReset_actionPerformed(e);
+       }
+     });
+     lbState.setText("Disconnected");
+     bChat.setToolTipText("Send message to player. Reuse the address "+
+                          "field to enter the message.");
+     bChat.setText("Chat");
+     bChat.addActionListener(new java.awt.event.ActionListener()
+     {
+       public void actionPerformed(ActionEvent e)
+       {
+         bChat_actionPerformed(e);
+       }
+     });
+     
+     bPaste.setText("Paste");
+     bPaste.setToolTipText("Paste, same as Ctrl-V");
+     bPaste.addActionListener(new java.awt.event.ActionListener()
+     {
+       public void actionPerformed(ActionEvent e)
+       {
+         bPaste_actionPerformed(e);
+       }
+     });
+     
+     desk.setMaximumSize(DESK_SIZE);
+     desk.setPreferredSize(DESK_SIZE);
+     
+     scroll.getViewport().add(desk, null);
+     getContentPane().add(scroll, BorderLayout.CENTER);
+     getContentPane().add(pnBottom, BorderLayout.SOUTH);
+ 
+     pnBottom.add(taUrl, BorderLayout.CENTER);
+     pnBottom.add(pnChat, BorderLayout.NORTH);
+ 
+     pnChat.add(lbC1, null);
+     pnChat.add(lbC2, null);
+     pnChat.add(lbC3, null);
+     pnBottom.add(pnButtons, BorderLayout.SOUTH);
+     pnButtons.add(lbState, null);
+     pnButtons.add(bConnect, null);
+     pnButtons.add(bChat, null);
+     pnButtons.add(bLeave, null);
+     pnButtons.add(bReset, null);
+     pnButtons.add(bExit, null);
+     pnButtons.add(bPaste, null);    
+ 
+     desk.player.set_current_state(State.DISCONNECTED);
+   }
+ 
+   /**
+    * Handles exit procedure.
+    */
+   protected void processWindowEvent(WindowEvent e)
+   {
+     super.processWindowEvent(e);
+     if (e.getID() == WindowEvent.WINDOW_CLOSING)
+       {
+         bExit_actionPerformed(null);
+       }
+   }
+ 
+   /**
+    * Handles the connection procedure.
+    */
+   void bConnect_actionPerformed(ActionEvent e)
+   {
+     try
+       {
+         int state = desk.player.get_current_state();
+ 
+         if (state == State.DISCONNECTED || state == State.ERROR)
+           {
+             talk(ChatConstants.colors[0], "Connecting...");
+ 
+             if (desk.manager == null)
+               {
+                 mior = taUrl.getText().trim();
+ 
+                 // Obtain the manager object:
+                 org.omg.CORBA.Object object = null;
+ 
+                 try
+                   {
+                     object = desk.orb.string_to_object(mior);
+                   }
+                 catch (Exception exc)
+                   {
+                     // Maybe CORBA 3.0.3 is not completely implemented?
+                     if (mior.startsWith("http://") || mior.startsWith("ftp://")
+                       || mior.startsWith("file://"))
+                       object = desk.orb.string_to_object(IorReader.readUrl(mior));
+                     else
+                       throw exc;
+                   }
+ 
+                 desk.manager = (GameManager) PortableRemoteObject.narrow(
+                   object, GameManager.class);
+ 
+                 // Export the desk.player as a remote object.
+                 PortableRemoteObject.exportObject(desk.player);
+               }
+ 
+             desk.player.set_current_state(State.QUEUED);
+             desk.manager.requestTheGame(desk.player);
+           }
+ 
+         // Save the specified IOR for the future use:
+         File gmf = new File(OrbStarter.WRITE_URL_TO_FILE);
+         FileWriter f = new FileWriter(gmf);
+         BufferedWriter b = new BufferedWriter(f);
+ 
+         b.write(mior);
+         b.close();
+       }
+     catch (Exception ex)
+       {
+         talk(Color.red, "The manager is not reachable by this address.");
+         talk(Color.red, ex.getMessage());
+         desk.player.set_current_state(State.DISCONNECTED);
+       }
+   }
+ 
+   /**
+    * Display the new message with the given color. Shift the other messages over
+    * the labels.
+    */
+   public void talk(Color color, String text)
+   {
+     lbC1.setText(lbC2.getText());
+     lbC1.setForeground(lbC2.getForeground());
+ 
+     lbC2.setText(lbC3.getText());
+     lbC2.setForeground(lbC3.getForeground());
+ 
+     lbC3.setText(text);
+     lbC3.setForeground(color);
+   }
+ 
+   /**
+    * Exit this program.
+    */
+   void bExit_actionPerformed(ActionEvent e)
+   {
+     try
+       {
+         if (desk.player.get_current_state() != State.DISCONNECTED
+           && desk.player.partner != null)
+           {
+             desk.player.partner.receive_chat(ChatConstants.REMOTE_PLAYER,
+               "I close the program!");
+             desk.player.partner.disconnect();
+           }
+       }
+     catch (RemoteException ex)
+       {
+         // We will print the exception because this is a demo application that
+         // may be modified for learning purposes.
+         ex.printStackTrace();
+       }
+     System.exit(0);
+   }
+ 
+   void bReset_actionPerformed(ActionEvent e)
+   {
+     if (desk.player.partner != null)
+       {
+         try
+           {
+             desk.player.partner.receive_chat(ChatConstants.REMOTE_PLAYER,
+               "Your partner restarted the game.");
+ 
+             desk.player.start_game(desk.player.partner, false);
+             desk.player.partner.start_game(desk.player, true);
+           }
+         catch (RemoteException ex)
+           {
+             // We will print the exception because this is a demo application
+             // that
+             // may be modified for learning purposes.
+             ex.printStackTrace();
+           }
+       }
+     else
+       talk(Color.black, "You have not started the game yet.");
+   }
+ 
+   void bLeave_actionPerformed(ActionEvent e)
+   {
+     desk.player.leave();
+   }
+ 
+   void bChat_actionPerformed(ActionEvent e)
+   {
+     try
+       {
+         if (desk.player.partner != null)
+           {
+             String message = taUrl.getText();
+             desk.player.partner.receive_chat(ChatConstants.REMOTE_PLAYER, message);
+             talk(ChatConstants.colors[ChatConstants.SELF], message);
+             taUrl.setText("");
+           }
+         else
+           {
+             talk(Color.black, "Sorry, not connected to anybody");
+           }
+       }
+     catch (RemoteException ex)
+       {
+         // We will print the exception because this is a demo application that
+         // may be modified for learning purposes.
+         ex.printStackTrace();
+       }
+   }
+   
+   /**
+    * Work around our keyboard shortcut handling that is still not working
+    * properly.
+    */
+   void bPaste_actionPerformed(ActionEvent e)
+   {
+     taUrl.paste();
+   }  
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Demo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Demo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Demo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Demo.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,99 ----
+ /* Demo.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.awt.Dimension;
+ import java.awt.Toolkit;
+ import java.io.BufferedReader;
+ import java.io.File;
+ import java.io.FileReader;
+ 
+ /**
+  * The main executable class of the game client.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class Demo
+ {
+ 
+   public static void main(String[] args)
+   {
+     ClientFrame frame = new ClientFrame();
+     frame.setSize(new Dimension(640, 480));
+     frame.setTitle("Make vertical, horizontal or diagonal line of 5 dots. "
+       + "Click mouse to set the dot.");
+     frame.validate();
+ 
+     // Center the window
+     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+     Dimension frameSize = frame.getSize();
+     if (frameSize.height > screenSize.height)
+       {
+         frameSize.height = screenSize.height;
+       }
+     if (frameSize.width > screenSize.width)
+       {
+         frameSize.width = screenSize.width;
+       }
+     frame.setLocation((screenSize.width - frameSize.width) / 2,
+       (screenSize.height - frameSize.height) / 2);
+     frame.setVisible(true);
+ 
+     // Set the ior.
+     try
+       {
+         if (OrbStarter.WRITE_URL_TO_FILE != null)
+           {
+             File saved_ior = new File(OrbStarter.WRITE_URL_TO_FILE);
+             if (saved_ior.exists())
+               {
+                 FileReader f = new FileReader(saved_ior);
+                 String s = new BufferedReader(f).readLine();
+                 frame.taUrl.setText(s);
+               }
+           }
+       }
+     catch (Exception e)
+       {
+         // We will print the exception, because this is a demo program -
+         // expected to be modified by user.
+         e.printStackTrace();
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManager.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManager.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManager.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,68 ----
+ /* GameManager.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ /**
+  * The game manager interface.
+  * 
+  * Defines the operations of the game server that connects two players into
+  * the game. The game server does not participate in the game itself.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public interface GameManager extends Remote
+ {
+   /**
+    * Register the newPlayer as the person who is willing to play. When another
+    * player calls this method, the Manager connects them by calling
+    * {@link PlayerCommunicator#start_game}. The manager provides the partner
+    * and sets (randomly) the starting side.
+    */
+   void requestTheGame(Player newPlayer) throws RemoteException;
+ 
+   /**
+    * Unregister the player that left and is no longer waiting for a playing
+    * partner to come.
+    * @throws RemoteException
+    */
+   void unregister(Player player) throws RemoteException;
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManagerImpl.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManagerImpl.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManagerImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManagerImpl.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,135 ----
+ /* GameManagerImpl.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.rmi.RemoteException;
+ 
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Object;
+ 
+ /**
+  * The manager connects two players into the game.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class GameManagerImpl
+   implements GameManager
+ {
+   /**
+    * The game manager IOR.
+    */
+   static String ior;
+ 
+   /**
+    * The game manager ORB.
+    */
+   static ORB orb;
+ 
+   /**
+    * True if the manager started ok.
+    */
+   static boolean ok;
+ 
+   /**
+    * Another player that is already waiting for the game.
+    */
+   Player queuedPlayer = null;
+ 
+   public synchronized void requestTheGame(Player newPlayer)
+     throws RemoteException
+   {
+     System.out.println("Game requested");
+ 
+     if (queuedPlayer == null)
+       {
+         // No other player so far.
+         newPlayer.receive_chat(ChatConstants.GAME_SERVER,
+           "Request registered, waiting for the other player to come...");
+         System.out.println("Player queued.");
+         queuedPlayer = newPlayer;
+       }
+     else if (queuedPlayer.equals(newPlayer))
+       {
+         // The same player applies again.
+         newPlayer.receive_chat(ChatConstants.GAME_SERVER,
+           "No other player so far... Please wait.");
+       }
+     else
+       {
+         // As the queued player waited for the game, we allow him/her
+         // to start the game. This is a reward for waiting.
+         newPlayer.receive_chat(ChatConstants.GAME_SERVER,
+           "The other player is waiting. The game started, your "
+             + "partner begins...");
+         queuedPlayer.receive_chat(ChatConstants.GAME_SERVER,
+           "The other player arrived. Lets play, you begin the game now...");
+ 
+         newPlayer.start_game(queuedPlayer, false);
+         queuedPlayer.start_game(newPlayer, true);
+ 
+         queuedPlayer = null;
+         System.out.println("Players connected.");
+       }
+   }
+ 
+   /**
+    * Unregister the player who left and is no longer waiting for another side.
+    */
+   public void unregister(Player player)
+     throws RemoteException
+   {
+     if (queuedPlayer != null)
+       {
+         // We need to verify the identity of the player being unregistered.
+         // The stubs, being derived from the org.omg.CORBA.Object, have the
+         // method for this. This method compares the player host address,
+         // used port and the object key.
+         if (player instanceof Object && queuedPlayer instanceof Object)
+           {
+             Object a = (Object) player;
+             Object b = (Object) queuedPlayer;
+ 
+             if (a._is_equivalent(b))
+               queuedPlayer = null;
+           }
+         else
+           queuedPlayer = null;
+       }
+     System.out.println("Unregistering player");
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/IorReader.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/IorReader.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/IorReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/IorReader.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,124 ----
+ /* IorReader.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.io.File;
+ import java.io.FileReader;
+ import java.io.IOException;
+ import java.io.InputStreamReader;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.DATA_CONVERSION;
+ 
+ /**
+  * Reads the remote URL. Following formal/04-03-12, CORBA should be able to do 
+  * this without the help of this class. However some popular class libraries
+  * are written using the older CORBA specifications and may not handle 
+  * functionality, require by this game. This class substitutes the functionality,
+  * ensuring that these implementations will also start and we will be able
+  * to test the interoperability.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class IorReader
+ {
+   /**
+    * Read IOR from the remote URL.
+    */
+   public static String readUrl(String url)
+   {
+     URL u;
+     try
+       {
+         u = new URL(url);
+       }
+     catch (MalformedURLException mex)
+       {
+         throw new BAD_PARAM("Malformed URL: '" + url + "'");
+       }
+ 
+     try
+       {
+         InputStreamReader r = new InputStreamReader(u.openStream());
+ 
+         StringBuffer b = new StringBuffer();
+         int c;
+ 
+         while ((c = r.read()) > 0)
+           b.append((char) c);
+ 
+         return b.toString().trim();
+       }
+     catch (Exception exc)
+       {
+         DATA_CONVERSION d = new DATA_CONVERSION("Reading " + url + " failed.");
+         throw d;
+       }
+   }
+   
+   /**
+    * Read IOR from the file in the local file system.
+    */
+   public static String readFile(String file)
+   {
+     File f = new File(file);
+     if (!f.exists())
+       {
+         DATA_CONVERSION err = new DATA_CONVERSION(f.getAbsolutePath()
+           + " does not exist.");
+         throw err;
+       }
+     try
+       {
+         char[] c = new char[(int) f.length()];
+         FileReader fr = new FileReader(f);
+         fr.read(c);
+         fr.close();
+         return new String(c).trim();
+       }
+     catch (IOException ex)
+       {
+         DATA_CONVERSION d = new DATA_CONVERSION();
+         d.initCause(ex);
+         throw (d);
+       }
+   }  
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/OrbStarter.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/OrbStarter.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/OrbStarter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/OrbStarter.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,236 ----
+ /* OrbStarter.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.rmi.RemoteException;
+ import java.util.Properties;
+ 
+ import javax.rmi.PortableRemoteObject;
+ import javax.rmi.CORBA.Tie;
+ 
+ import org.omg.CORBA.ORB;
+ import org.omg.PortableServer.POA;
+ import org.omg.PortableServer.POAHelper;
+ import org.omg.PortableServer.Servant;
+ 
+ /**
+  * Starts the ORBs, involved into this application.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class OrbStarter
+ {
+   /**
+    * The game manager name server port. This server allows to access the game
+    * manager by host (IP) and port rather than by the rather long IOR string.
+    */
+   static int MANAGER_NAMER_PORT = 1500;
+ 	  
+   /**
+    * The used port range (understood and used by GNU Classpath only).
+    */
+   static String USED_PORT_RANGE = "1501-1503";
+ 	  
+   /**
+    * Specify the file where under start the game manager writes its IOR.
+    * You may specify the path if the game manager and player clients have
+    * access to some share file system or if you prefer to write IOR to
+    * floppy and then read from the floppy on the client side. Both clients
+    * and server will use this constant. Set to null not to write the IOR.
+    */
+   static String WRITE_URL_TO_FILE = "game_manager_ior.txt";	
+ 	
+   /**
+    * Start the manager ORB.
+    * @return the manager URL if it starts.
+    */
+   public static String startManager(final String[] args)
+   {
+     GameManagerImpl.ior = null;
+     GameManagerImpl.ok = false;
+ 
+     final Properties p = new Properties();
+     p.put("gnu.CORBA.ListenerPort", USED_PORT_RANGE);
+ 
+     try
+       {
+         new Thread()
+         {
+           public void run()
+           {
+             try
+               {
+                 GameManagerImpl.orb = ORB.init(args, p);
+ 
+                 // Obtain the root poa:
+                 POA rootPOA = POAHelper.narrow(GameManagerImpl.orb.resolve_initial_references("RootPOA"));
+ 
+                 GameManagerImpl impl = new GameManagerImpl();
+ 
+                 PortableRemoteObject.exportObject(impl);
+ 
+                 // Construct the tie that is also the servant.
+                 Tie tie = new _GameManagerImpl_Tie();
+ 
+                 // Set the invocation target for this tie.
+                 tie.setTarget(impl);
+ 
+                 // Obtain the reference to the corresponding CORBA object:
+                 org.omg.CORBA.Object object = rootPOA.servant_to_reference((Servant) tie);
+ 
+                 GameManagerImpl.ok = true;
+ 
+                 // Activate the root POA.
+                 rootPOA.the_POAManager().activate();
+ 
+                 // Get the IOR URL that must be passed to clients.
+                 GameManagerImpl.ior = GameManagerImpl.orb.object_to_string(object);
+ 
+                 GameManagerImpl.orb.run();
+               }
+             catch (Exception exc)
+               {
+                 exc.printStackTrace();
+                 GameManagerImpl.ior = "Unable to start the ORB: " + exc;
+               }
+           }
+         }.start();
+ 
+         // Wait the thread to enter orb.run.
+         long t = System.currentTimeMillis();
+         while (GameManagerImpl.ior == null
+           && System.currentTimeMillis() - t < 20000)
+           {
+             Thread.sleep(100);
+           }
+ 
+         return GameManagerImpl.ior;
+       }
+     catch (Exception e)
+       {
+         e.printStackTrace();
+         return "Exception: " + e;
+       }
+   }
+   
+   /**
+    * Start the client ORB.
+    */
+   public static String startPlayer(final Player player, final PlayingDesk desk)
+   {
+     desk.ior = null;
+     desk.ok = false;
+     
+     final Properties p = new Properties();
+     p.put("gnu.CORBA.ListenerPort", USED_PORT_RANGE);
+     
+     try
+       {
+         new Thread()
+         {
+           public void run()
+           {
+             try
+               {
+                 desk.orb = ORB.init(new String[0], p);
+ 
+                 POA rootPOA = POAHelper.narrow(desk.orb.resolve_initial_references("RootPOA"));
+                 rootPOA.the_POAManager().activate();
+ 
+                 // Construct the tie.
+                 Tie tie = new _PlayerImpl_Tie();
+ 
+                 // Set the implementing class (invocation target).
+                 tie.setTarget(new PlayerImpl());
+ 
+                 // Connect the tie as POA servant.
+                 org.omg.CORBA.Object object = rootPOA.servant_to_reference((Servant) tie);
+ 
+                 // Get the stringified reference.
+                 desk.ior = desk.orb.object_to_string(object);
+ 
+                 // Mark that the object was created OK.
+                 desk.ok = true;
+                 desk.orb.run();
+               }
+             catch (Exception exc)
+               {
+                 exc.printStackTrace();
+                 desk.ior = "Unable to start the ORB: " + exc;
+               }
+           }
+         }.start();
+ 
+         long t = System.currentTimeMillis();
+         while (desk.ior == null && System.currentTimeMillis() - t < 20000)
+           {
+             Thread.sleep(100);
+           }
+       }
+     catch (Exception e)
+       {
+         e.printStackTrace();
+         return "Exception: " + e;
+       }
+ 
+     // Add shutdown hook to unregister from the manager.
+     Runtime.getRuntime().addShutdownHook(new Thread()
+     {
+       public void run()
+       {
+         if (desk.manager != null && player != null)
+           {
+             try
+               {
+                 desk.manager.unregister(player);
+               }
+             catch (RemoteException ex)
+               {
+                 // We will print the exception because this is a demo
+                 // application that
+                 // may be modified for learning purposes.
+                 ex.printStackTrace();
+               }
+             desk.manager = null;
+           }
+       }
+     });
+     return desk.ior;
+   }  
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Player.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Player.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Player.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Player.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,96 ----
+ /* Player.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.awt.Point;
+ 
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ /**
+  * Defines remote methods that are invoked by another player or by the
+  * challenge server.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public interface Player extends Remote
+ {
+   /**
+    * Receive the invitation to play from the patner or the game manager.
+    *
+    * @param address the address (host and port) of the remote partner.
+    * @param youStart if true, the game manager instructs to start
+    * the game first (another side is instructed to start the game second).
+    *
+    * @return true on success.
+    */
+   boolean start_game(Player otherPlayer, boolean youStart)
+     throws RemoteException;
+ 
+   /**
+    * Get the state of the local player (one of the constants, defined
+    * in this interface).
+    */
+   int get_current_state() throws RemoteException;
+ 
+   /**
+    * Receive the chat message from the friend or challenge server (remote).
+    * Possible at any state, always remote.
+    *
+    * @param color the color code, used to highlight the message.
+    * @param text the message text.
+    */
+   void receive_chat(byte color, String test) throws RemoteException;
+ 
+   /**
+    * Indicated that the remote side leaves the game (capitulating).
+    */
+   void disconnect() throws RemoteException;
+ 
+   /**
+    * Receive friends move (possible at I_WAIT_FOR_YOUR_MOVE).
+    *
+    * @param x grid position.
+    * @param y grid position.
+    *
+    * @param sessionId the session id, must match (otherwise the call is ignored).
+    * @param victory if not a null, the friend thinks that it has won, the parameter
+    * containing the ends of the builded line.
+    */
+   void receive_move(int x, int y, Point[] victory) throws RemoteException;
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayerImpl.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayerImpl.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayerImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayerImpl.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,275 ----
+ /* PlayerImpl.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.awt.Color;
+ import java.awt.Point;
+ 
+ import java.rmi.RemoteException;
+ 
+ /**
+  * The implementation of the PlayerCommunicator, providing the local
+  * functionality. Apart remote methods, the class also defines some local
+  * methods, needed for the co-ordinated work with the game user interface.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class PlayerImpl
+   implements Player, State
+ {
+   /**
+    * The playing table.
+    */
+   PlayingDesk desk;
+ 
+   /**
+    * The state of this player (one of the constants, defined in the player
+    * interface.
+    */
+   private int state = DISCONNECTED;
+ 
+   /**
+    * The other player.
+    */
+   Player partner;
+ 
+   /**
+    * Called when the local player refuses to continue the game.
+    */
+   public void leave()
+   {
+     try
+       {
+         if (state == I_THINK || state == I_WAIT_FOR_YOUR_MOVE)
+           {
+             partner.receive_chat(ChatConstants.REMOTE_PLAYER,
+               "Your partner has left the game.");
+             partner.disconnect();
+           }
+         else if (state == State.QUEUED)
+           {
+             if (desk.manager != null)
+               desk.manager.unregister(desk.player);
+             receive_chat(ChatConstants.SYSTEM,
+               "Do not be so pessimistic, try to play first!");
+           }
+         set_current_state(State.DISCONNECTED);
+ 
+         desk.frame.bChat.setEnabled(false);
+         desk.frame.bLeave.setEnabled(false);
+         desk.frame.bConnect.setEnabled(true);
+         desk.frame.taUrl.setText(desk.frame.mior);
+       }
+     catch (RemoteException ex)
+       {
+         // We will print the exception because this is a demo application that
+         // may be modified for learning purposes.
+         ex.printStackTrace();
+       }
+   }
+ 
+   /**
+    * Called when we make the move. The PlayingTable is responsible for checking
+    * the correctness of the move and detecting the victory.
+    * 
+    * @param x x position of the new dot.
+    * @param y y position of the new dot.
+    * 
+    * @param victory array of two memebers, representing the endpoints of the
+    * drawn line (victory detected) or null if no such yet exists.
+    */
+   public void we_move(int x, int y, Point[] victory)
+   {
+     try
+       {
+         set_current_state(I_WAIT_FOR_YOUR_MOVE);
+         partner.receive_move(x, y, victory);
+       }
+     catch (RemoteException ex)
+       {
+         // We will print the exception because this is a demo application that
+         // may be modified for learning purposes.
+         ex.printStackTrace();
+ 
+         state = ERROR;
+       }
+   }
+ 
+   /**
+    * Set the current state.
+    */
+   public void set_current_state(int new_state)
+   {
+     state = new_state;
+ 
+     if (state == DISCONNECTED)
+       {
+         setStatus("Disconnected");
+       }
+     else if (state == I_THINK)
+       {
+         setStatus("Our move");
+       }
+     else if (state == I_WAIT_FOR_YOUR_MOVE)
+       {
+         setStatus("Partner's move");
+       }
+     else if (state == ERROR)
+       {
+         setStatus("Error.");
+       }
+     else if (state == I_HAVE_LOST)
+       {
+         setStatus("We lost");
+       }
+     else if (state == I_HAVE_WON)
+       {
+         setStatus("Victory");
+       }
+     else if (state == QUEUED)
+       {
+         setStatus("Queued");
+       }
+     else
+       {
+         setStatus("State " + state);
+       }
+ 
+     boolean connected = state != State.DISCONNECTED;
+ 
+     desk.frame.bConnect.setEnabled(!connected && state != State.QUEUED);
+     desk.frame.bReset.setEnabled(connected);
+     desk.frame.bLeave.setEnabled(connected);
+     desk.frame.bChat.setEnabled(connected);
+   }
+ 
+   /**
+    * Show the state in the status line.
+    */
+   public void setStatus(String status)
+   {
+     desk.frame.lbState.setText(status);
+   }
+ 
+   /**
+    * Receive the invitation to play from the patner or the game manager.
+    * 
+    * @param address the address (host and port) of the remote partner.
+    * @param youStart if true, the game manager instructs to start the game first
+    * (another side is instructed to start the game second).
+    * 
+    * Game server may also chat a little bit with both players, saying that the
+    * game has started.
+    * 
+    * @return true on success.
+    */
+   public boolean start_game(Player otherPlayer, boolean youStart)
+     throws RemoteException
+   {
+     partner = otherPlayer;
+     desk.reset();
+ 
+     if (youStart)
+       {
+         set_current_state(I_THINK);
+       }
+     else
+       {
+         set_current_state(I_WAIT_FOR_YOUR_MOVE);
+       }
+ 
+     desk.frame.taUrl.setText("");
+ 
+     return true;
+   }
+ 
+   /**
+    * Get the state of the local player (one of the constants, defined in this
+    * interface).
+    */
+   public int get_current_state()
+     throws RemoteException
+   {
+     return state;
+   }
+ 
+   /**
+    * Receive the chat message from the friend or challenge server (remote).
+    * Possible at any state, always remote.
+    * 
+    * @param color the color code, used to highlight the message.
+    * @param text the message text.
+    */
+   public void receive_chat(byte color, String text)
+     throws RemoteException
+   {
+     if (color >= ChatConstants.colors.length)
+       color = ChatConstants.REMOTE_PLAYER;
+ 
+     desk.frame.talk(ChatConstants.colors[color], text);
+   }
+ 
+   /**
+    * Indicated that the remote side leaves the game (capitulating).
+    */
+   public void disconnect()
+     throws RemoteException
+   {
+     desk.frame.talk(Color.red, "The partner leaves the game.");
+     partner = null;
+     set_current_state(DISCONNECTED);
+ 
+     desk.frame.taUrl.setText(desk.frame.mior);
+   }
+ 
+   /**
+    * Receive friends move (possible at I_WAIT_FOR_YOUR_MOVE).
+    * 
+    * @param x grid position.
+    * @param y grid position.
+    * @param victory if not a null, the friend thinks that it has won, the
+    * parameter containing the ends of the builded line.
+    */
+   public void receive_move(int x, int y, Point[] victory)
+     throws RemoteException
+   {
+     // The state changes are handled by the PlayingTable
+     desk.friendsMove(x, y, victory);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayingDesk.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayingDesk.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayingDesk.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayingDesk.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,512 ----
+ /* PlayingDesk.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.awt.Color;
+ import java.awt.Graphics;
+ import java.awt.Point;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.rmi.RemoteException;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Iterator;
+ 
+ import javax.swing.JComponent;
+ 
+ import org.omg.CORBA.ORB;
+ 
+ /**
+  * Manages actions, related to the game rules and also does all painting.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class PlayingDesk
+   extends JComponent
+   implements MouseListener, State
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * Indicates that the field point state is the red oval.
+    */
+   public static final int RED = 0;
+ 
+   /**
+    * Indicates that the field point state is the black cross.
+    */
+   public static final int BLACK = 1;
+ 
+   /**
+    * Indicates that the field point state is the hint, suggested by the fan.
+    */
+   public static final int HINT = 2;
+ 
+   /**
+    * The access to the main frame methods.
+    */
+   ClientFrame frame;
+ 
+   /**
+    * The access to the player communicator.
+    */
+   PlayerImpl player;
+ 
+   /**
+    * The game manager.
+    */
+   GameManager manager;
+ 
+   /**
+    * The player ORB.
+    */
+   ORB orb;
+ 
+   /**
+    * The player IOR.
+    */
+   String ior;
+ 
+   /**
+    * True if the player ORB started ok.
+    */
+   boolean ok;
+ 
+   /**
+    * The grid spacing.
+    */
+   static int W = 16;
+ 
+   /**
+    * The radius of the dots being painted.
+    */
+   static int R = W / 3;
+ 
+   /**
+    * The collection of the red dots.
+    */
+   ArrayList reds = new ArrayList();
+ 
+   /**
+    * The collection of the black dots.
+    */
+   ArrayList blacks = new ArrayList();
+ 
+   /**
+    * The array of hints.
+    */
+   ArrayList hints = new ArrayList();
+ 
+   /**
+    * When the game is completed, obtains the value of the two end points of the
+    * created line.
+    */
+   Point[] endOfGame;
+ 
+   public PlayingDesk()
+   {
+     try
+       {
+         player = new PlayerImpl();
+         player.desk = this;
+ 
+         OrbStarter.startPlayer(player, this);
+ 
+         jbInit();
+       }
+     catch (Exception e)
+       {
+         e.printStackTrace();
+       }
+   }
+ 
+   /**
+    * Paint this component.
+    */
+   public void paintComponent(Graphics g)
+   {
+     int w = getWidth();
+     int h = getHeight();
+ 
+     g.setColor(Color.white);
+     g.fillRect(0, 0, w, h);
+ 
+     drawGrid(w, h, g);
+     drawFigures(g);
+   }
+ 
+   /**
+    * Check maybe a game is finished after setting the point N
+    */
+   public Point[] checkFinished(Collection x, Point N)
+   {
+     Iterator iter = x.iterator();
+     Point p;
+ 
+     // The victory, if happens, must occur inside these boundaries:
+     int ax = N.x - 5;
+     int bx = N.x + 5;
+ 
+     int ay = N.y - 5;
+     int by = N.y + 5;
+ 
+     while (iter.hasNext())
+       {
+         p = (Point) iter.next();
+ 
+         if (p.x > ax && p.x < bx && p.y > ay && p.y < by)
+           {
+             // Check the vertical line down
+             if (pointPresent(p.x, p.y + 1, x))
+               if (pointPresent(p.x, p.y + 2, x))
+                 if (pointPresent(p.x, p.y + 3, x))
+                   if (pointPresent(p.x, p.y + 4, x))
+                     return new Point[] { p, new Point(p.x, p.y + 4) };
+ 
+             // Check the horizontal line left
+             if (pointPresent(p.x + 1, p.y, x))
+               if (pointPresent(p.x + 2, p.y, x))
+                 if (pointPresent(p.x + 3, p.y, x))
+                   if (pointPresent(p.x + 4, p.y, x))
+                     return new Point[] { p, new Point(p.x + 4, p.y) };
+ 
+             // Check the diagonal line right down.
+             if (pointPresent(p.x + 1, p.y + 1, x))
+               if (pointPresent(p.x + 2, p.y + 2, x))
+                 if (pointPresent(p.x + 3, p.y + 3, x))
+                   if (pointPresent(p.x + 4, p.y + 4, x))
+                     return new Point[] { p, new Point(p.x + 4, p.y + 4) };
+ 
+             // Check the diagonal line left down.
+             if (pointPresent(p.x - 1, p.y + 1, x))
+               if (pointPresent(p.x - 2, p.y + 2, x))
+                 if (pointPresent(p.x - 3, p.y + 3, x))
+                   if (pointPresent(p.x - 4, p.y + 4, x))
+                     return new Point[] { p, new Point(p.x - 4, p.y + 4) };
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * Called when the "end of the game" situation is detected.
+    */
+   public void drawFinishLine(int xa, int ya, int xb, int yb, Graphics g)
+   {
+     g.setColor(Color.blue);
+ 
+     int hW = W / 2;
+     g.drawLine(xa * W + hW, ya * W + hW, xb * W + hW, yb * W + hW);
+   }
+ 
+   /**
+    * Check for the presence of the given point in the collection.
+    */
+   public final boolean pointPresent(int x, int y, Collection in)
+   {
+     Iterator iter = in.iterator();
+     Point p;
+     while (iter.hasNext())
+       {
+         p = (Point) iter.next();
+         if (p.x == x && p.y == y)
+           return true;
+       }
+     return false;
+   }
+ 
+   public void drawGrid(int w, int h, Graphics g)
+   {
+     g.setColor(Color.lightGray);
+ 
+     // Draw vertical lines:
+     for (int x = 0; x < w; x += W)
+       {
+         g.drawLine(x, 0, x, h);
+       }
+ 
+     // Draw horizontal lines:
+     for (int y = 0; y < h; y += W)
+       {
+         g.drawLine(0, y, w, y);
+       }
+       
+     g.setColor(Color.gray);
+     g.drawRect(0,0, frame.DESK_SIZE.width, frame.DESK_SIZE.height);
+     g.drawRect(0,0, frame.DESK_SIZE.width+3, frame.DESK_SIZE.height+3);    
+   }
+ 
+   public void drawFigures(Graphics g)
+   {
+     g.setColor(Color.red);
+     drawDots(reds, g, RED);
+ 
+     g.setColor(Color.black);
+     drawDots(blacks, g, BLACK);
+ 
+     g.setColor(Color.lightGray);
+     drawDots(hints, g, HINT);
+ 
+     if (endOfGame != null)
+       drawFinishLine(endOfGame[0].x, endOfGame[0].y, endOfGame[1].x,
+         endOfGame[1].y, g);
+   }
+ 
+   public Point makePoint(int x, int y)
+   {
+     return new Point(x / W, y / W);
+   }
+ 
+   /**
+    * Draw a collection of dots (the collor must be set before calling the
+    * method).
+    */
+   public void drawDots(Collection dots, Graphics g, int mode)
+   {
+     Iterator iter = dots.iterator();
+     int x;
+     int y;
+ 
+     int hW = W / 2;
+     int RR = R * 2;
+     int hR = R / 2;
+     Point p;
+     while (iter.hasNext())
+       {
+         p = (Point) iter.next();
+         x = p.x * W + hW;
+         y = p.y * W + hW;
+ 
+         if (mode == RED)
+           g.drawOval(x - R, y - R, RR, RR);
+         else if (mode == BLACK)
+           {
+             g.drawLine(x - R, y - R, x + R, y + R);
+             g.drawLine(x - R, y + R, x + R, y - R);
+           }
+         else
+           {
+             // Hint.
+             g.drawOval(x - hR, y - hR, R, R);
+           }
+       }
+   }
+ 
+   private void jbInit()
+     throws Exception
+   {
+     addMouseListener(this);
+   }
+ 
+   public void mouseClicked(MouseEvent e)
+   {
+     try
+       {
+         int state = player.get_current_state();
+ 
+         // Check if the state is correct.
+         if (state == I_WAIT_FOR_YOUR_MOVE)
+           {
+             frame.talk(Color.black,
+               "It is now time for our partner's move, not ours. Please wait.");
+           }
+         else if (state == DISCONNECTED)
+           {
+             frame.talk(Color.black,
+               "We are not connected to the playing partner yet.");
+           }
+         else if (state == I_HAVE_LOST)
+           {
+             frame.talk(Color.black,
+               "We have already lost this battle, but why not to try again?");
+           }
+         else if (state == I_HAVE_WON)
+           {
+             frame.talk(Color.black,
+               "The victory is ours, nothing more to do here.");
+           }
+         else if (player.partner == null)
+           frame.talk(Color.black, "No other player so far.");
+         else
+           {
+             int x = e.getX();
+             int y = e.getY();
+ 
+             if (x>frame.DESK_SIZE.width ||
+                 y>frame.DESK_SIZE.height)
+             {
+               frame.talk(Color.black,"Outside the game area.");
+               return;
+             }
+ 
+             Point p = makePoint(x, y);
+ 
+             // Ignore clicks on the occupied cells.
+             if (pointPresent(p.x, p.y, reds)
+               || (pointPresent(p.x, p.y, blacks)))
+               {
+                 frame.talk(Color.black,
+                   "This is against the rules, select the unoccupied cell.");
+                 return;
+               }
+ 
+             reds.add(p);
+ 
+             endOfGame = checkFinished(reds, p);
+             repaint();
+ 
+             if (endOfGame != null)
+               {
+                 frame.talk(Color.red, "Our move " + p.x + "-" + p.y
+                   + " and we win!");
+                 player.set_current_state(I_HAVE_WON);
+               }
+             else
+               {
+                 frame.talk(Color.black, "Our move " + p.x + "-" + p.y
+                   + ". Waiting for the other side move...");
+                 player.set_current_state(I_WAIT_FOR_YOUR_MOVE);
+               }
+ 
+             player.partner.receive_move(p.x, p.y, endOfGame);
+           }
+       }
+     catch (RemoteException ex)
+       {
+         // We will print the exception because this is a demo application
+         // that may be modified for learning purposes.
+         ex.printStackTrace();
+       }
+   }
+ 
+   /**
+    * Handle the move of the other playing side.
+    */
+   public void friendsMove(int x, int y, Point[] victory)
+   {
+     try
+       {
+         int state = player.get_current_state();
+         if (state != I_WAIT_FOR_YOUR_MOVE || pointPresent(x, y, blacks))
+           {
+             stateFailed("Move " + x + "-" + y);
+           }
+         else
+           {
+             blacks.add(new Point(x, y));
+             repaint();
+ 
+             if (victory != null)
+               {
+                 frame.talk(Color.red,
+                   " We have lost this time, unfortunately..");
+                 player.set_current_state(I_HAVE_LOST);
+                 endOfGame = victory;
+               }
+             else
+               {
+                 frame.talk(Color.black, "Partner goes " + x + "-" + y
+                   + ". Your move?");
+                 player.set_current_state(I_THINK);
+               }
+           }
+       }
+     catch (RemoteException rex)
+       {
+         rex.printStackTrace();
+       }
+   }
+ 
+   /**
+    * Prepare for the new game.
+    */
+   public void reset()
+   {
+     blacks.clear();
+     reds.clear();
+     hints.clear();
+     endOfGame = null;
+     repaint();
+   }
+ 
+   public void mouseEntered(MouseEvent m)
+   {
+     // Nothing to do.
+   }
+ 
+   public void mousePressed(MouseEvent m)
+   {
+     // Nothing to do.
+   }
+ 
+   public void mouseReleased(MouseEvent m)
+   {
+     // Nothing to do.
+   }
+ 
+   public void mouseExited(MouseEvent m)
+   {
+     // Nothing to do.
+   }
+ 
+   /**
+    * The systems detected the error conditions. The game cannot continue (the
+    * chat is still possible).
+    */
+   public void stateFailed(String reason)
+   {
+     try
+       {
+         player.receive_chat(ChatConstants.REMOTE_PLAYER,
+           "Wrong move, game cannot continue (our state was "
+             + player.get_current_state() + ")");
+         frame.talk(Color.red, "The remote side violates communicating rules.");
+         player.set_current_state(State.ERROR);
+       }
+     catch (RemoteException ex)
+       {
+         // We will print the exception because this is a demo application
+         // that may be modified for learning purposes.
+         ex.printStackTrace();
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/State.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/State.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/State.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/State.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,82 ----
+ /* State.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ /**
+  * Defines the states in that the player can be.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public interface State {
+   /**
+    * The initial ("disconnected") state.
+    */
+   int DISCONNECTED = 0;
+   
+   /**
+    * The state, indicating that the player has been queued for the game and
+    * waiting for the partner to come.
+    */
+   int QUEUED = 1;
+ 
+   /**
+    * The "my move" state.
+    */
+   int I_THINK = 2;
+ 
+   /**
+    * The "friend's move" state.
+    */
+   int I_WAIT_FOR_YOUR_MOVE = 3;
+ 
+   /**
+    * States that we have won.
+    */
+   int I_HAVE_WON = 4;
+ 
+   /**
+    * States that we have lost.
+    */
+   int I_HAVE_LOST = 5;
+   
+   /**
+    * The "inconsistent" state when it is not possible to continue the game.
+    */
+   int ERROR = -1;
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/X5Server.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/X5Server.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/X5Server.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/X5Server.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,175 ----
+ /* GameManagerAddressServer.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.io.BufferedWriter;
+ import java.io.File;
+ import java.io.FileWriter;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.net.InetAddress;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ 
+ /**
+  * The main executable class of the game manager server.
+  * 
+  * The manager address server returns the IOR address string of the game
+  * manager. Hence the user does not need to enter the rather long IOR address
+  * string and only needs to specify the host and port of the machine where the
+  * game manager is running.
+  * 
+  * The manager address server starts the main game manager as well.
+  * 
+  * This server acts as a HTTP server that always returns the same response. This
+  * primitive functionality is sufficient for its task.
+  * 
+  * The more complex CORBA applications should use the name service instead. We
+  * do not use the name service as this would require to start additional
+  * external application, specific for the different java platforms.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class X5Server
+ {
+   /**
+    * Start the game manager.
+    */
+   public static void main(String[] args)
+   {
+     // Start the game manager, write the IOR to the agreed location.
+     OrbStarter.startManager(args);
+ 
+     if (!GameManagerImpl.ok)
+       {
+         System.out.println("Unable to start the game manager:");
+         System.exit(1);
+       }
+ 
+     // Print the IOR.
+     System.out.println(GameManagerImpl.ior);
+ 
+     String manager_address = null;
+ 
+     // Start the game manager server.
+     ServerSocket nameServer = null;
+     try
+       {
+         nameServer = new ServerSocket(OrbStarter.MANAGER_NAMER_PORT);
+ 
+         System.out.println("The game manager is listening at:");
+         manager_address = "http://"
+           + InetAddress.getLocalHost().getHostAddress() + ":"
+           + nameServer.getLocalPort();
+ 
+         System.out.println(manager_address);
+ 
+         System.out.println("Enter this address to the "
+           + "input field of the game client.");
+ 
+         System.out.println("Use ^C to stop the manager.");
+       }
+     catch (Exception ex)
+       {
+         System.out.println("The port " + OrbStarter.MANAGER_NAMER_PORT
+           + " is not available. The game manager namer will not start.");
+         System.exit(1);
+       }
+ 
+     // Write the IOR to the local file system.
+     if (OrbStarter.WRITE_URL_TO_FILE != null)
+       {
+         try
+           {
+             File gmf = new File(OrbStarter.WRITE_URL_TO_FILE);
+             FileWriter f = new FileWriter(gmf);
+             BufferedWriter b = new BufferedWriter(f);
+ 
+             b.write(manager_address);
+             b.close();
+           }
+         catch (IOException e)
+           {
+             System.out.println("Local filesystem not accessible."
+               + "Read IOR from console.");
+           }
+       }
+ 
+     // Do forever.
+     while (true)
+       {
+         try
+           {
+             Socket socket = nameServer.accept();
+ 
+             System.out.println("Connected.");
+ 
+             // Set the two minutes timeout.
+             socket.setSoTimeout(1000 * 120);
+ 
+             OutputStream out = socket.getOutputStream();
+ 
+             int length = GameManagerImpl.ior.length();
+ 
+             StringBuffer b = new StringBuffer();
+             b.append("HTTP/1.0 200 OK\r\n");
+             b.append("Content-Length: " + length + "\r\n");
+             b.append("Connection: close\r\n");
+             b.append("Content-Type: text/plain; charset=UTF-8\r\n");
+             b.append("\r\n");
+ 
+             b.append(GameManagerImpl.ior);
+ 
+             out.write(b.toString().getBytes("UTF-8"));
+ 
+             socket.shutdownOutput();
+ 
+             if (!socket.isClosed())
+               socket.close();
+ 
+             System.out.println("Completed.");
+           }
+         catch (Exception exc)
+           {
+             exc.printStackTrace();
+             System.out.println("Network problem.");
+           }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManagerImpl_Tie.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManagerImpl_Tie.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManagerImpl_Tie.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManagerImpl_Tie.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,214 ----
+ /* _GameManagerImpl_Tie.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.rmi.Remote;
+ 
+ import javax.rmi.PortableRemoteObject;
+ import javax.rmi.CORBA.Tie;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ResponseHandler;
+ import org.omg.CORBA.portable.UnknownException;
+ import org.omg.PortableServer.Servant;
+ 
+ /**
+  * Normally generated with rmic compiler, this class represents the GameManager
+  * Tie on the client side. The Game Manager methods contain the code for remote
+  * invocation.
+  * 
+  * This class is normally generated with rmic from the {@link GameManagerImpl}:
+  * 
+  * <pre>
+  *   rmic -iiop -poa -keep gnu.classpath.examples.CORBA.swing.x5.GameManagerImpl
+  * </pre>
+  * 
+  * (the compiled package must be present in the current folder).
+  * 
+  * In this example the class was manually edited and commented for better
+  * understanding of functionality.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class _GameManagerImpl_Tie
+   extends Servant
+   implements Tie
+ {
+   /**
+    * The target, where remote invocations are forwarded.
+    */
+   private GameManagerImpl target = null;
+ 
+   /**
+    * The GameManager repository Id.
+    */
+   private static final String[] _type_ids = 
+   { "RMI:gnu.classpath.examples.CORBA.swing.x5.GameManager:0000000000000000" };
+ 
+   /**
+    * Set the target where the remote invocations are forwarded.
+    */
+   public void setTarget(Remote a_target)
+   {
+     this.target = (GameManagerImpl) a_target;
+   }
+ 
+   /**
+    * Get the target where the remote invocations are forwarded.
+    */
+   public Remote getTarget()
+   {
+     return target;
+   }
+ 
+   /**
+    * Get the CORBA object for that this Tie is currently serving the request.
+    * The same tie may serve multiple requests for the different objects in
+    * parallel threads.
+    */
+   public org.omg.CORBA.Object thisObject()
+   {
+     return _this_object();
+   }
+ 
+   /**
+    * Deactivate this object.
+    */
+   public void deactivate()
+   {
+     try
+       {
+         _poa().deactivate_object(_poa().servant_to_id(this));
+       }
+     catch (org.omg.PortableServer.POAPackage.WrongPolicy exception)
+       {
+       }
+     catch (org.omg.PortableServer.POAPackage.ObjectNotActive exception)
+       {
+       }
+     catch (org.omg.PortableServer.POAPackage.ServantNotActive exception)
+       {
+       }
+   }
+ 
+   /**
+    * Get the ORB for this tie.
+    */
+   public ORB orb()
+   {
+     return _orb();
+   }
+ 
+   /**
+    * Set the ORB for this tie.
+    */
+   public void orb(ORB orb)
+   {
+     try
+       {
+         ((org.omg.CORBA_2_3.ORB) orb).set_delegate(this);
+       }
+     catch (ClassCastException e)
+       {
+         throw new org.omg.CORBA.BAD_PARAM(
+           "POA Servant requires an instance of org.omg.CORBA_2_3.ORB");
+       }
+   }
+ 
+   /**
+    * Return all interfaces, supported by this method.
+    */
+   public String[] _all_interfaces(org.omg.PortableServer.POA poa,
+     byte[] objectId)
+   {
+     return _type_ids;
+   }
+ 
+   /**
+    * This method is invoked by CORBA system to handle the remote invocation.
+    * 
+    * @param method the name of the method being invoked.
+    * @param _in the stream to read the method parameters.
+    * @param reply the responsed handler that can create the output stream to
+    * write the parameters being returned.
+    */
+   public OutputStream _invoke(String method, InputStream _in,
+     ResponseHandler reply)
+     throws SystemException
+   {
+     try
+       {
+         org.omg.CORBA_2_3.portable.InputStream in = 
+           (org.omg.CORBA_2_3.portable.InputStream) _in;
+         if (method.equals("requestTheGame"))
+           {
+             Player p = (Player) PortableRemoteObject.narrow(
+               in.read_Object(), Player.class);
+             target.requestTheGame(p);
+ 
+             OutputStream out = reply.createReply();
+             return out;
+           }
+         else if (method.equals("unregister"))
+           {
+             Player p = (Player) PortableRemoteObject.narrow(
+               in.read_Object(), Player.class);
+             target.unregister(p);
+ 
+             OutputStream out = reply.createReply();
+             return out;
+           }
+         else
+           throw new BAD_OPERATION();
+       }
+     catch (SystemException ex)
+       {
+         throw ex;
+       }
+     catch (Throwable ex)
+       {
+         ex.printStackTrace();
+         throw new UnknownException(ex);
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManager_Stub.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManager_Stub.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManager_Stub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManager_Stub.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,207 ----
+ /* _GameManager_Stub.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.rmi.RemoteException;
+ import java.rmi.UnexpectedException;
+ 
+ import javax.rmi.CORBA.Stub;
+ import javax.rmi.CORBA.Util;
+ 
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.portable.ApplicationException;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.RemarshalException;
+ import org.omg.CORBA.portable.ServantObject;
+ 
+ /**
+  * Normally generated with rmic compiler, this class represents the GameManager
+  * Stub on the client side. The Game Manager methods contain the code for
+  * remote invocation.
+  * 
+  * This class is normally generated with rmic from the {@link GameManagerImpl}:
+  * <pre>
+  * rmic -iiop -poa -keep gnu.classpath.examples.CORBA.swing.x5.GameManagerImpl
+  * </pre>
+  * (the compiled package must be present in the current folder).
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class _GameManager_Stub extends Stub implements GameManager
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   private static final String[] _type_ids =
+     { "RMI:gnu.classpath.examples.CORBA.swing.x5.GameManager:0000000000000000" };
+ 
+   public String[] _ids()
+   {
+     return _type_ids;
+   }
+   
+   /**
+    * Notify the manager that the player is no longer willing to play and
+    * should be removed from the queue.
+    */
+   public void unregister(Player p)
+     throws RemoteException
+   {
+     if (!Util.isLocal(this))
+       {
+         try
+           {
+             org.omg.CORBA.portable.InputStream in = null;
+             try
+               {
+                 OutputStream out = _request("unregister", true);
+                 Util.writeRemoteObject(out, p);
+                 _invoke(out);
+               }
+             catch (ApplicationException ex)
+               {
+                 in = ex.getInputStream();
+ 
+                 String id = in.read_string();
+                 throw new UnexpectedException(id);
+               }
+             catch (RemarshalException ex)
+               {
+                 unregister(p);
+               }
+             finally
+               {
+                 _releaseReply(in);
+               }
+           }
+         catch (SystemException ex)
+           {
+             throw Util.mapSystemException(ex);
+           }
+       }
+     else
+       {
+         ServantObject so =
+           _servant_preinvoke("requestTheGame", GameManager.class);
+         if (so == null)
+           {
+             unregister(p);
+             return;
+           }
+         try
+           {
+             ((GameManager) so.servant).unregister(p);
+           }
+         catch (Throwable ex)
+           {
+             Throwable exCopy = (Throwable) Util.copyObject(ex, _orb());
+             throw Util.wrapException(exCopy);
+           }
+         finally
+           {
+             _servant_postinvoke(so);
+           }
+       }
+   }
+   
+   /**
+    * The method that the user should invoke.
+    */
+   public void requestTheGame(Player arg0) throws RemoteException
+   {
+     if (!Util.isLocal(this))
+       {
+         try
+           {
+             org.omg.CORBA.portable.InputStream in = null;
+             try
+               {
+                 OutputStream out = _request("requestTheGame", true);
+                 Util.writeRemoteObject(out, arg0);
+                 _invoke(out);
+               }
+             catch (ApplicationException ex)
+               {
+                 in = ex.getInputStream();
+ 
+                 String id = in.read_string();
+                 throw new UnexpectedException(id);
+               }
+             catch (RemarshalException ex)
+               {
+                 requestTheGame(arg0);
+               }
+             finally
+               {
+                 _releaseReply(in);
+               }
+           }
+         catch (SystemException ex)
+           {
+             throw Util.mapSystemException(ex);
+           }
+       }
+     else
+       {
+         ServantObject so =
+           _servant_preinvoke("requestTheGame", GameManager.class);
+         if (so == null)
+           {
+             requestTheGame(arg0);
+             return;
+           }
+         try
+           {
+             Player arg0Copy = (Player) Util.copyObject(arg0, _orb());
+             ((GameManager) so.servant).requestTheGame(arg0Copy);
+           }
+         catch (Throwable ex)
+           {
+             Throwable exCopy = (Throwable) Util.copyObject(ex, _orb());
+             throw Util.wrapException(exCopy);
+           }
+         finally
+           {
+             _servant_postinvoke(so);
+           }
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_PlayerImpl_Tie.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_PlayerImpl_Tie.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_PlayerImpl_Tie.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_PlayerImpl_Tie.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,212 ----
+ /* _PlayerImpl_Tie.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.awt.Point;
+ import java.rmi.Remote;
+ 
+ import javax.rmi.PortableRemoteObject;
+ import javax.rmi.CORBA.Tie;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ResponseHandler;
+ import org.omg.CORBA.portable.UnknownException;
+ import org.omg.PortableServer.Servant;
+ 
+ /**
+  * Generate with rmic, command line
+  * rmic -iiop -poa -keep gnu.classpath.examples.CORBA.swing.x5.PlayerImpl
+  * (the compiled package must be present in the current folder).
+  * 
+  * This class is normally generated with rmic from the {@link PlayerImpl}:
+  * <pre>
+  * rmic -iiop -poa -keep gnu.classpath.examples.CORBA.swing.x5.PlayerImpl
+  * </pre>
+  * (the compiled package must be present in the current folder).
+  * 
+  * In this example the class was manually edited and commented for better 
+  * understanding of functionality.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class _PlayerImpl_Tie extends Servant implements Tie
+ {
+   private PlayerImpl target = null;
+   private static final String[] _type_ids =
+     { "RMI:gnu.classpath.examples.CORBA.swing.x5.Player:0000000000000000" };
+ 
+   public void setTarget(Remote a_target)
+   {
+     this.target = (PlayerImpl) a_target;
+   }
+ 
+   public Remote getTarget()
+   {
+     return target;
+   }
+ 
+   public org.omg.CORBA.Object thisObject()
+   {
+     return _this_object();
+   }
+ 
+   public void deactivate()
+   {
+     try
+       {
+         _poa().deactivate_object(_poa().servant_to_id(this));
+       }
+     catch (org.omg.PortableServer.POAPackage.WrongPolicy exception)
+       {
+       }
+     catch (org.omg.PortableServer.POAPackage.ObjectNotActive exception)
+       {
+       }
+     catch (org.omg.PortableServer.POAPackage.ServantNotActive exception)
+       {
+       }
+   }
+ 
+   public ORB orb()
+   {
+     return _orb();
+   }
+ 
+   public void orb(ORB orb)
+   {
+     try
+       {
+         ((org.omg.CORBA_2_3.ORB) orb).set_delegate(this);
+       }
+     catch (ClassCastException e)
+       {
+         throw new org.omg.CORBA.BAD_PARAM(
+           "POA Servant requires an instance of org.omg.CORBA_2_3.ORB"
+         );
+       }
+   }
+ 
+   public String[] _all_interfaces(org.omg.PortableServer.POA poa,
+     byte[] objectId
+   )
+   {
+     return _type_ids;
+   }
+ 
+   public OutputStream _invoke(String method, InputStream _in,
+     ResponseHandler reply
+   ) throws SystemException
+   {
+     try
+       {
+         org.omg.CORBA_2_3.portable.InputStream in =
+           (org.omg.CORBA_2_3.portable.InputStream) _in;
+         switch (method.charAt(9))
+           {
+             case 101 :
+               if (method.equals("start_game"))
+                 {
+                   Player arg0 =
+                     (Player) PortableRemoteObject.narrow(in.read_Object(),
+                       Player.class
+                     );
+                   boolean arg1 = in.read_boolean();
+                   boolean result = target.start_game(arg0, arg1);
+                   OutputStream out = reply.createReply();
+                   out.write_boolean(result);
+                   return out;
+                 }
+ 
+             case 104 :
+               if (method.equals("receive_chat"))
+                 {
+                   byte arg0 = in.read_octet();
+                   String arg1 = (String) in.read_value(String.class);
+                   target.receive_chat(arg0, arg1);
+ 
+                   OutputStream out = reply.createReply();
+                   return out;
+                 }
+ 
+             case 111 :
+               if (method.equals("receive_move"))
+                 {
+                   int arg0 = in.read_long();
+                   int arg1 = in.read_long();
+                   Point[] arg2 = (Point[]) in.read_value(Point[].class);
+                   target.receive_move(arg0, arg1, arg2);
+ 
+                   OutputStream out = reply.createReply();
+                   return out;
+                 }
+ 
+             case 114 :
+               if (method.equals("_get_J_current_state"))
+                 {
+                   int result = target.get_current_state();
+                   OutputStream out = reply.createReply();
+                   out.write_long(result);
+                   return out;
+                 }
+ 
+             case 116 :
+               if (method.equals("disconnect"))
+                 {
+                   target.disconnect();
+ 
+                   OutputStream out = reply.createReply();
+                   return out;
+                 }
+           }
+         throw new BAD_OPERATION("No such method: '"+method+"'");
+       }
+     catch (SystemException ex)
+       {
+         throw ex;
+       }
+     catch (Throwable ex)
+       {
+         throw new UnknownException(ex);
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_Player_Stub.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_Player_Stub.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_Player_Stub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_Player_Stub.java	Thu Nov 17 22:21:12 2005
***************
*** 0 ****
--- 1,397 ----
+ /* _Player_Stub.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.CORBA.swing.x5;
+ 
+ import java.awt.Point;
+ import java.io.Serializable;
+ import java.rmi.RemoteException;
+ import java.rmi.UnexpectedException;
+ 
+ import javax.rmi.CORBA.Stub;
+ import javax.rmi.CORBA.Util;
+ 
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.portable.ApplicationException;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.RemarshalException;
+ import org.omg.CORBA.portable.ServantObject;
+ 
+ /**
+  * Generate with rmic, command line
+  * rmic -iiop -poa -keep gnu.classpath.examples.CORBA.swing.x5.PlayerImpl
+  * (the compiled package must be present in the current folder).
+  * 
+  * This class is normally generated with rmic from the {@link GameManagerImpl}:
+  * <pre>
+  * rmic -iiop -poa -keep gnu.classpath.examples.CORBA.swing.x5.GameManagerImpl
+  * </pre>
+  * (the compiled package must be present in the current folder).
+  * 
+  * In this example the class was manually edited and commented for better 
+  * understanding of functionality.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) 
+  */
+ public class _Player_Stub extends Stub implements Player
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   private static final String[] _type_ids =
+     { "RMI:gnu.classpath.examples.CORBA.swing.x5.Player:0000000000000000" };
+ 
+   public String[] _ids()
+   {
+     return _type_ids;
+   }
+   
+   public boolean start_game(Player arg0, boolean arg1)
+     throws RemoteException
+   {
+     if (!Util.isLocal(this))
+       {
+         try
+           {
+             org.omg.CORBA.portable.InputStream in = null;
+             try
+               {
+                 OutputStream out = _request("start_game", true);
+                 Util.writeRemoteObject(out, arg0);
+                 out.write_boolean(arg1);
+                 in = _invoke(out);
+                 return in.read_boolean();
+               }
+             catch (ApplicationException ex)
+               {
+                 in = ex.getInputStream();
+ 
+                 String id = in.read_string();
+                 throw new UnexpectedException(id);
+               }
+             catch (RemarshalException ex)
+               {
+                 return start_game(arg0, arg1);
+               }
+             finally
+               {
+                 _releaseReply(in);
+               }
+           }
+         catch (SystemException ex)
+           {
+             throw Util.mapSystemException(ex);
+           }
+       }
+     else
+       {
+         ServantObject so = _servant_preinvoke("start_game", Player.class);
+         if (so == null)
+           {
+             return start_game(arg0, arg1);
+           }
+         try
+           {
+             Player arg0Copy = (Player) Util.copyObject(arg0, _orb());
+             return ((Player) so.servant).start_game(arg0Copy, arg1);
+           }
+         catch (Throwable ex)
+           {
+             Throwable exCopy = (Throwable) Util.copyObject(ex, _orb());
+             throw Util.wrapException(exCopy);
+           }
+         finally
+           {
+             _servant_postinvoke(so);
+           }
+       }
+   }
+ 
+   public int get_current_state() throws RemoteException
+   {
+     if (!Util.isLocal(this))
+       {
+         try
+           {
+             org.omg.CORBA.portable.InputStream in = null;
+             try
+               {
+                 OutputStream out = _request("_get_J_current_state", true);
+                 in = _invoke(out);
+                 return in.read_long();
+               }
+             catch (ApplicationException ex)
+               {
+                 in = ex.getInputStream();
+ 
+                 String id = in.read_string();
+                 throw new UnexpectedException(id);
+               }
+             catch (RemarshalException ex)
+               {
+                 return get_current_state();
+               }
+             finally
+               {
+                 _releaseReply(in);
+               }
+           }
+         catch (SystemException ex)
+           {
+             throw Util.mapSystemException(ex);
+           }
+       }
+     else
+       {
+         ServantObject so =
+           _servant_preinvoke("_get_J_current_state", Player.class);
+         if (so == null)
+           {
+             return get_current_state();
+           }
+         try
+           {
+             return ((Player) so.servant).get_current_state();
+           }
+         catch (Throwable ex)
+           {
+             Throwable exCopy = (Throwable) Util.copyObject(ex, _orb());
+             throw Util.wrapException(exCopy);
+           }
+         finally
+           {
+             _servant_postinvoke(so);
+           }
+       }
+   }
+ 
+   public void receive_chat(byte arg0, String arg1) throws RemoteException
+   {
+     if (!Util.isLocal(this))
+       {
+         try
+           {
+             org.omg.CORBA_2_3.portable.InputStream in = null;
+             try
+               {
+                 org.omg.CORBA_2_3.portable.OutputStream out =
+                   (org.omg.CORBA_2_3.portable.OutputStream) _request("receive_chat",
+                     true
+                   );
+                 out.write_octet(arg0);
+                 out.write_value(arg1, String.class);
+                 _invoke(out);
+               }
+             catch (ApplicationException ex)
+               {
+                 in =
+                   (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
+ 
+                 String id = in.read_string();
+                 throw new UnexpectedException(id);
+               }
+             catch (RemarshalException ex)
+               {
+                 receive_chat(arg0, arg1);
+               }
+             finally
+               {
+                 _releaseReply(in);
+               }
+           }
+         catch (SystemException ex)
+           {
+             throw Util.mapSystemException(ex);
+           }
+       }
+     else
+       {
+         ServantObject so = _servant_preinvoke("receive_chat", Player.class);
+         if (so == null)
+           {
+             receive_chat(arg0, arg1);
+             return;
+           }
+         try
+           {
+             ((Player) so.servant).receive_chat(arg0, arg1);
+           }
+         catch (Throwable ex)
+           {
+             Throwable exCopy = (Throwable) Util.copyObject(ex, _orb());
+             throw Util.wrapException(exCopy);
+           }
+         finally
+           {
+             _servant_postinvoke(so);
+           }
+       }
+   }
+ 
+   public void disconnect() throws RemoteException
+   {
+     if (!Util.isLocal(this))
+       {
+         try
+           {
+             org.omg.CORBA.portable.InputStream in = null;
+             try
+               {
+                 OutputStream out = _request("disconnect", true);
+                 _invoke(out);
+               }
+             catch (ApplicationException ex)
+               {
+                 in = ex.getInputStream();
+ 
+                 String id = in.read_string();
+                 throw new UnexpectedException(id);
+               }
+             catch (RemarshalException ex)
+               {
+                 disconnect();
+               }
+             finally
+               {
+                 _releaseReply(in);
+               }
+           }
+         catch (SystemException ex)
+           {
+             throw Util.mapSystemException(ex);
+           }
+       }
+     else
+       {
+         ServantObject so = _servant_preinvoke("disconnect", Player.class);
+         if (so == null)
+           {
+             disconnect();
+             return;
+           }
+         try
+           {
+             ((Player) so.servant).disconnect();
+           }
+         catch (Throwable ex)
+           {
+             Throwable exCopy = (Throwable) Util.copyObject(ex, _orb());
+             throw Util.wrapException(exCopy);
+           }
+         finally
+           {
+             _servant_postinvoke(so);
+           }
+       }
+   }
+ 
+   public void receive_move(int arg0, int arg1, Point[] arg2)
+     throws RemoteException
+   {
+     if (!Util.isLocal(this))
+       {
+         try
+           {
+             org.omg.CORBA_2_3.portable.InputStream in = null;
+             try
+               {
+                 org.omg.CORBA_2_3.portable.OutputStream out =
+                   (org.omg.CORBA_2_3.portable.OutputStream) _request("receive_move",
+                     true
+                   );
+                 out.write_long(arg0);
+                 out.write_long(arg1);
+                 out.write_value(cast_array(arg2), Point[].class);
+                 _invoke(out);
+               }
+             catch (ApplicationException ex)
+               {
+                 in =
+                   (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
+ 
+                 String id = in.read_string();
+                 throw new UnexpectedException(id);
+               }
+             catch (RemarshalException ex)
+               {
+                 receive_move(arg0, arg1, arg2);
+               }
+             finally
+               {
+                 _releaseReply(in);
+               }
+           }
+         catch (SystemException ex)
+           {
+             throw Util.mapSystemException(ex);
+           }
+       }
+     else
+       {
+         ServantObject so = _servant_preinvoke("receive_move", Player.class);
+         if (so == null)
+           {
+             receive_move(arg0, arg1, arg2);
+             return;
+           }
+         try
+           {
+             Point[] arg2Copy = (Point[]) Util.copyObject(arg2, _orb());
+             ((Player) so.servant).receive_move(arg0, arg1, arg2Copy);
+           }
+         catch (Throwable ex)
+           {
+             Throwable exCopy = (Throwable) Util.copyObject(ex, _orb());
+             throw Util.wrapException(exCopy);
+           }
+         finally
+           {
+             _servant_postinvoke(so);
+           }
+       }
+   }
+ 
+   // This method is required as a work-around for
+   // a bug in the JDK 1.1.6 verifier.
+   private Serializable cast_array(Object obj)
+   {
+     return (Serializable) obj;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/awt/Demo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/awt/Demo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/awt/Demo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/awt/Demo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,867 ----
+ /* Demo.java -- Shows examples of AWT components
+    Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA. */
+ 
+ package gnu.classpath.examples.awt;
+ 
+ import java.awt.*;
+ import java.awt.List;
+ import java.awt.event.*;
+ import java.net.URL;
+ import java.util.*;
+ 
+ class Demo
+ {
+   public static void main(String args[])
+   {
+     MainWindow f = new MainWindow();
+     f.show();
+   }
+   
+   static interface SubWindow
+   {
+     public void init ();
+   }
+   
+   static class PrettyPanel extends Panel
+   {
+     Insets myInsets;
+     
+     public PrettyPanel ()
+     {
+       myInsets = new Insets (10, 10, 10, 10);
+     }
+     public Insets getInsets ()
+     {
+       return myInsets;
+     }
+   }
+   
+   static abstract class PrettyFrame extends Frame
+   {
+     public PrettyFrame ()
+     {
+       ((BorderLayout) getLayout ()).setHgap (5);
+       ((BorderLayout) getLayout ()).setVgap (5);
+     }
+     
+     public Insets getInsets()
+     {
+       Insets oldInsets = super.getInsets ();
+       return new Insets (oldInsets.top+10,
+ 			 oldInsets.left+10,
+ 			 oldInsets.bottom+10,
+ 			 oldInsets.right+10);
+     }
+   }
+ 
+   static abstract class SubFrame extends PrettyFrame implements SubWindow
+   {
+     boolean initted = false;
+     
+     public void setVisible (boolean visible)
+     {
+       if (!initted && visible)
+ 	init();
+       super.setVisible (visible);
+     } 
+   }
+ 
+   static class MainWindow extends PrettyFrame implements ActionListener 
+   {
+     Button closeButton;
+     
+     Hashtable windows;
+     Vector buttons;
+     
+     void addSubWindow (String name, SubWindow w)
+     {
+       Button b = new Button (name);
+       b.addActionListener (this);
+       
+       buttons.addElement (b);
+       windows.put (b, w);    
+     }
+     
+     MainWindow () 
+     {
+       MenuBar mb = new MenuBar ();
+       Menu menu = new Menu ("File");
+       Menu submenu = new Menu ("Testing", true);
+       submenu.add (new CheckboxMenuItem ("FooBar"));
+       submenu.add (new CheckboxMenuItem ("BarFoo"));
+       menu.add (submenu);
+       menu.add (new MenuItem("Orange"));
+       MenuItem quit = new MenuItem("Quit", new MenuShortcut('Q'));
+       quit.addActionListener(new ActionListener()
+         {
+           public void actionPerformed(ActionEvent e)
+           {
+             System.exit(0);
+           }
+         });
+       menu.add(quit);
+       mb.add (menu);
+ 
+       menu = new Menu("Edit", true);
+       menu.add(new MenuItem("Cut"));
+       menu.add(new MenuItem("Copy"));
+       menu.add(new MenuItem("Paste"));
+       mb.add (menu);
+ 
+       Menu helpMenu = new Menu("Help");
+       helpMenu.add(new MenuItem("About"));
+       mb.add(helpMenu);
+       mb.setHelpMenu(helpMenu);
+       
+       setMenuBar (mb);
+       
+       String version = System.getProperty("gnu.classpath.version");
+       add (new Label ("GNU Classpath " + version), "North");
+       
+       closeButton = new Button ("Close");
+       closeButton.addActionListener (this);
+       closeButton.setFont (new Font ("Serif", Font.BOLD | Font.ITALIC, 18));
+       add (closeButton, "South");
+       
+       windows = new Hashtable ();
+       buttons = new Vector ();
+       
+       addSubWindow ("Buttons", new ButtonsWindow ());
+       addSubWindow ("Cursors", new CursorsWindow ());
+       addSubWindow ("Dialog", new DialogWindow (this));
+       addSubWindow ("File", new FileWindow (this));
+       addSubWindow ("Labels", new LabelWindow ());
+       addSubWindow ("List", new ListWindow ());
+       addSubWindow ("Radio Buttons", new RadioWindow ());
+       addSubWindow ("TextField", new TextFieldWindow ());
+       addSubWindow ("RandomTests", new TestWindow (this));
+       addSubWindow ("RoundRect", new RoundRectWindow ());
+       
+       Panel sp = new Panel();
+       PrettyPanel p = new PrettyPanel();
+       p.setLayout (new GridLayout (windows.size(), 1));
+       
+       for (Enumeration e = buttons.elements (); e.hasMoreElements (); )
+ 	{
+ 	  p.add ((Button) e.nextElement ());
+ 	}
+       
+       sp.add (p);
+       add (sp, "Center");
+       
+       setTitle ("AWT Demo");
+       pack();
+     }
+     
+     public void actionPerformed (ActionEvent evt)
+     {
+       Button source = (Button) evt.getSource ();
+       
+       if (source==closeButton)
+ 	{
+ 	  dispose();
+ 	  System.exit (0);
+ 	}
+       
+       Window w = (Window) windows.get (source);
+       if (w.isVisible ())
+ 	w.dispose ();
+       else 
+ 	{
+ 	  if (w instanceof Dialog)
+ 	    {
+ 	      w.show();
+ 	    }
+ 	  else
+ 	    {
+ 	      w.setVisible (true);
+ 	    }
+ 	}
+     }
+   }
+   
+   static class ButtonsWindow extends SubFrame implements ActionListener
+   {
+     Button b[] = new Button [9];
+     
+     public void init ()
+     {
+       initted = true;
+       Panel p = new Panel ();
+       p.setLayout (new GridLayout (0, 3, 5, 5));
+       
+       for (int i=0; i<9; i++) 
+ 	{
+ 	  b[i]=new Button ("button" + (i+1));
+ 	  b[i].addActionListener (this);
+ 	}
+       
+       p.add (b[0]);
+       p.add (b[6]);
+       p.add (b[4]);
+       p.add (b[8]);
+       p.add (b[1]);
+       p.add (b[7]);
+       p.add (b[3]);
+       p.add (b[5]);
+       p.add (b[2]);
+       
+       add (p, "North");
+       
+       Button cb = new Button ("close");
+       cb.addActionListener(new ActionListener () {
+ 	  public void actionPerformed (ActionEvent e) {
+ 	    dispose();
+ 	  }
+ 	});
+       add (cb, "South");
+       setTitle ("Buttons");
+       pack();
+     }
+     
+     public void actionPerformed (ActionEvent evt)
+     {
+       Button source = (Button) evt.getSource ();
+       
+       for (int i = 0; i < 9; i++)
+ 	{
+ 	  if (source == b[i])
+ 	    {
+ 	      int i2 = ((i + 1) == 9) ? 0 : (i + 1);
+ 	      if (b[i2].isVisible())
+ 		b[i2].setVisible(false);
+ 	      else 
+ 		b[i2].setVisible(true);
+ 	    }
+ 	}
+     }
+   }
+   
+   
+   static class DialogWindow extends Dialog implements SubWindow
+   {
+     Label text;
+     Frame parent;
+     boolean initted = false;
+     
+     public DialogWindow (Frame f)
+     {
+       super (f, true);
+       
+       this.parent = f;
+       
+       addWindowListener (new WindowAdapter ()
+ 	{
+ 	  public void windowClosing (WindowEvent e)
+ 	  {
+ 	    text.setVisible (false);
+ 	    hide ();
+ 	  }
+ 	});
+     }
+     
+     public void setVisible (boolean visible)
+     {
+       if (!initted && visible)
+ 	init();
+       super.setVisible (visible);
+     }
+     
+     public void show ()
+     {
+       if (!initted)
+ 	init();
+       super.show ();
+     }
+     
+     public void init ()
+     {
+       text = new Label ("Dialog Test");
+       text.setAlignment (Label.CENTER);
+       
+       add (text, "North");
+       text.setVisible (false);
+       
+       Panel p = new PrettyPanel();
+       
+       Button cb = new Button ("OK");
+       cb.addActionListener(new ActionListener () {
+ 	  public void actionPerformed (ActionEvent e) 
+ 	  {
+ 	    text.setVisible (false);
+ 	    hide();
+ 	  }
+ 	});
+       
+       p.setLayout (new GridLayout (1, 3));
+       ((GridLayout) p.getLayout ()).setHgap (5);
+       ((GridLayout) p.getLayout ()).setVgap (5);
+       p.add (cb);
+       
+       Button toggle = new Button ("Toggle");
+       p.add (toggle);
+       
+       toggle.addActionListener(new ActionListener () {
+ 	  public void actionPerformed (ActionEvent e) 
+ 	  {
+ 	    if (text.isVisible ())
+ 	      text.setVisible (false);
+ 	    else 
+ 	      text.setVisible (true);
+ 	    doLayout();
+ 	  }
+ 	});
+       
+       Button subdlg = new Button ("SubDialog");
+       p.add (subdlg);
+       
+       subdlg.addActionListener(new ActionListener () {
+ 	  public void actionPerformed (ActionEvent e) 
+ 	  {
+             DialogWindow sw = new DialogWindow (parent);
+             sw.show ();
+ 	  }
+ 	});
+       
+       add (p, "South");
+       setTitle ("Dialog");
+       pack();
+     }
+   }
+   
+   static class CursorsWindow extends SubFrame implements ItemListener
+   {
+     Choice cursorChoice;
+     Canvas cursorCanvas;
+     
+     public void init ()
+     {
+       cursorChoice = new Choice();
+       cursorChoice.add ("Default");
+       cursorChoice.add ("Crosshair");
+       cursorChoice.add ("Text");
+       cursorChoice.add ("Wait");
+       cursorChoice.add ("Southwest Resize");
+       cursorChoice.add ("Southeast Resize");
+       cursorChoice.add ("Northwest Resize");
+       cursorChoice.add ("Northeast Resize");
+       cursorChoice.add ("North Resize");
+       cursorChoice.add ("South Resize");
+       cursorChoice.add ("West Resize");
+       cursorChoice.add ("East Resize");
+       cursorChoice.add ("Hand");
+       cursorChoice.add ("Move");
+       
+       cursorChoice.addItemListener(this);
+       
+       add (cursorChoice, "North");
+       
+       cursorCanvas = new Canvas () 
+ 	{ 
+ 	  public void paint (Graphics g) 
+ 	  {
+ 	    Dimension d = this.getSize();
+ 	    g.setColor(Color.white);
+ 	    g.fillRect(0, 0, d.width, d.height/2);
+ 	    g.setColor(Color.black);
+ 	    g.fillRect(0, d.height/2, d.width, d.height/2);
+ 	    g.setColor(this.getBackground());
+ 	    g.fillRect(d.width/3, d.height/3, d.width/3,
+ 			d.height/3);
+ 	  }
+ 	};
+       
+       cursorCanvas.setSize (80,80);
+       
+       add (cursorCanvas, "Center");
+       
+       Button cb = new Button ("Close");
+       cb.addActionListener(new ActionListener () {
+ 	  public void actionPerformed (ActionEvent e) {
+ 	    dispose();
+ 	  }
+ 	});
+       
+       add (cb, "South");
+       setTitle ("Cursors");
+       pack();
+     }
+     
+     public void itemStateChanged (ItemEvent e)
+     {
+       int index = cursorChoice.getSelectedIndex();
+       cursorCanvas.setCursor(Cursor.getPredefinedCursor(index));
+     }
+   }
+   
+   static class TextFieldWindow extends SubFrame implements ItemListener
+   {
+     Checkbox editable, visible, sensitive;
+     TextField text;
+     
+     public void init ()
+     {
+       initted = true;
+       text = new TextField ("hello world");
+       add (text, "North");
+       
+       Panel p = new Panel();
+       p.setLayout (new GridLayout (3, 1));
+       ((GridLayout) p.getLayout ()).setHgap (5);
+       ((GridLayout) p.getLayout ()).setVgap (5);
+       
+       editable = new Checkbox("Editable", true);
+       p.add (editable);
+       editable.addItemListener (this);
+       
+       visible = new Checkbox("Visible", true);
+       p.add (visible);
+       visible.addItemListener (this);
+       
+       sensitive = new Checkbox("Sensitive", true);
+       p.add (sensitive);
+       sensitive.addItemListener (this);
+       
+       add (p, "Center");
+       
+       Button cb = new Button ("Close");
+       cb.addActionListener(new ActionListener () {
+ 	  public void actionPerformed (ActionEvent e) {
+ 	    dispose();
+ 	  }
+ 	});
+       
+       add (cb, "South");
+       setTitle ("TextField");
+       pack();
+     }
+     
+     public void itemStateChanged (ItemEvent e)
+     {
+       boolean on=true;
+       
+       if (e.getStateChange () == ItemEvent.DESELECTED)
+ 	on=false;
+       if (e.getSource() == editable)
+ 	text.setEditable (on);
+       if (e.getSource() == visible)
+ 	if (on)
+ 	  text.setEchoChar ((char) 0);
+ 	else
+ 	  text.setEchoChar ('*');
+       if (e.getSource() == sensitive)
+ 	text.setEnabled (on);
+       
+     }
+   }
+   
+   static class FileWindow extends FileDialog implements SubWindow
+   {
+     boolean initted = false;
+     
+     public FileWindow (MainWindow mw)
+     {
+       super (mw);
+     }
+     
+     public void setVisible (boolean visible)
+     {
+       if (!initted && visible)
+ 	init();
+       super.setVisible (visible);
+     }
+     
+     public void init() 
+     {
+       initted = true;
+     }
+   }
+   
+   static class LabelWindow extends SubFrame
+   {
+     public void init ()
+     {
+       initted = true;
+       
+       Panel p = new Panel();
+       p.setLayout (new GridLayout (3, 1));
+       ((GridLayout) p.getLayout ()).setHgap (5);
+       ((GridLayout) p.getLayout ()).setVgap (5);
+       
+       p.add (new Label ("left justified label", Label.LEFT));
+       p.add (new Label ("center justified label", Label.CENTER));
+       p.add (new Label ("right justified label", Label.RIGHT));
+       
+       add (p, "Center");
+       
+       Button cb = new Button ("Close");
+       cb.addActionListener(new ActionListener () {
+ 	  public void actionPerformed (ActionEvent e) {
+ 	    dispose();
+ 	  }
+ 	});
+       
+       add (cb, "South");
+       setTitle ("Labels");
+       pack();
+     }
+   }
+   
+   static class ListWindow extends SubFrame
+   {
+     public void init ()
+     {
+       initted = true;
+       
+       Panel p = new Panel ();
+       p.setLayout (new GridLayout (3, 1));
+       
+       List l = new List (5, true);
+       for (int i = 0; i < 10; i++)
+ 	l.add ("List item " + i);
+ 
+       p.add (l);
+ 
+       add (p, "Center");
+       
+       Button cb = new Button ("Close");
+       cb.addActionListener(new ActionListener () {
+ 	  public void actionPerformed (ActionEvent e) {
+ 	    dispose();
+ 	  }
+ 	});
+       
+       add (cb, "South");
+       setTitle ("List");
+       pack();
+     }
+   }    
+   
+   
+   static class RadioWindow extends SubFrame
+   {
+     public void init ()
+     {
+       initted = true;
+       
+       Panel p = new Panel();
+       p.setLayout (new GridLayout (3, 1));
+       ((GridLayout) p.getLayout ()).setHgap (5);
+       ((GridLayout) p.getLayout ()).setVgap (5);
+       
+       final CheckboxGroup cg = new CheckboxGroup();
+       final Checkbox[] boxes = new Checkbox[3];
+       for (int i = 0; i < 3; ++i)
+ 	{
+ 	  boxes[i] = new Checkbox("button" + i, cg, i == 0);
+ 	  p.add(boxes[i]);
+ 	}
+       
+       add (p, "North");
+       
+       p = new Panel();
+       p.setLayout (new GridLayout (1, 3));
+       ((GridLayout) p.getLayout ()).setHgap (5);
+       ((GridLayout) p.getLayout ()).setVgap (5);
+       
+       for (int i = 0; i < 3; ++i)
+ 	{
+ 	  final int val = i;
+ 	  Button tweak = new Button ("Set " + i);
+ 	  tweak.addActionListener(new ActionListener ()
+ 	    {
+ 	      public void actionPerformed (ActionEvent e)
+ 	      {
+ 		cg.setSelectedCheckbox(boxes[val]);
+ 	      }
+ 	    });
+ 	  p.add(tweak);
+ 	}
+       
+       add (p, "Center");
+       
+       Button cb = new Button ("Close");
+       cb.addActionListener(new ActionListener () {
+ 	  public void actionPerformed (ActionEvent e) {
+ 	    dispose();
+ 	  }
+ 	});
+       
+       add (cb, "South");
+       setTitle ("Radio Buttons");
+       pack();
+     }
+   }
+   
+   static class TestWindow extends SubFrame
+   {
+     static int xs = 5, ys = 5;
+     final Frame parent;
+     
+     public TestWindow(Frame f)
+     {
+       parent = f;
+     }
+ 
+     public void init()
+     {
+       initted = true;
+       
+       addWindowListener (new WindowAdapter ()
+         {
+           public void windowClosing (WindowEvent e)
+           {
+             hide ();
+           }
+         });
+ 
+       Panel pan = new Panel();
+       
+       final Label l = new Label ("Pithy Message:");
+       l.setCursor (Cursor.getPredefinedCursor (Cursor.WAIT_CURSOR));
+       pan.add (l);
+       
+       TextField tf = new TextField("Hello world!");
+       pan.add(tf);
+       add(pan,"North");
+       
+       final Image img;
+       URL imageurl;
+       imageurl = this.getClass()
+ 	.getResource("/gnu/classpath/examples/icons/big-warning.png");
+       img = Toolkit.getDefaultToolkit().createImage(imageurl);
+ 
+       final Canvas ch = new Canvas()
+ 	{ 
+ 	  public void paint (Graphics g)
+ 	  {
+ 	    g.drawImage(img, xs + 25, ys + 25, this);
+ 
+ 	    Font font = new Font ("Serif", Font.PLAIN, 18); 
+ 	    g.setFont (font);
+ 	    g.setXORMode (Color.red);
+ 
+ 	    g.drawString("Hi Red!", xs + 15, ys + 10);
+ 	    g.setColor (Color.blue);
+ 	    g.drawLine (xs, ys, xs + 100, ys + 100);
+ 	    
+ 	  }
+ 	};
+       ch.setSize(150, 150);
+       add(ch, "Center");
+ 
+       final ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
+       final Panel p = new Panel();
+       p.add(new Button("Stop"));
+       p.add(new Button("evil"));
+       p.add(new Button("hoarders"));
+       p.add(new Button("use"));
+       p.add(new Button("GNU!"));
+ 
+       sp.add(p);
+       add(sp, "South");
+ 
+       Panel east_panel = new Panel();
+       east_panel.setLayout(new GridLayout (0,1));
+ 
+       CheckboxGroup group = new CheckboxGroup();
+       Checkbox cb = new Checkbox("one", group, true);
+       east_panel.add(cb);
+       cb = new Checkbox("two", group, false);
+       east_panel.add(cb);
+ 
+       add(east_panel,"East");
+ 
+       final Button wb = new Button();
+       wb.setLabel("Hello World!");
+       wb.addActionListener(new ActionListener()
+ 	{
+ 	  public void actionPerformed (ActionEvent e)
+ 	  {
+ 	    l.setText ("Hello World!");
+ 	    
+ 	    final Dialog d = new Dialog(parent);
+ 	    d.setLayout(new FlowLayout());
+ 	    d.setModal(true);
+ 	    Button b = new Button("foobar");
+ 	    b.addMouseListener(new MouseAdapter()
+ 	      {
+ 		public void mousePressed (MouseEvent me)
+ 		{
+ 		  d.hide ();
+ 		}
+ 	      });
+ 	    d.add (b);
+ 
+ 	    List ch = new List();
+ 	    ch.add("Ding");
+ 	    ch.add("September");
+ 	    ch.add("Red");
+ 	    ch.add("Quassia");
+ 	    ch.add("Pterodactyl");
+ 	    d.add(ch);
+ 
+ 	    d.pack ();
+ 	    d.show ();
+ 	  }
+ 	});
+ 
+       wb.addMouseListener(new MouseAdapter()
+ 	{
+ 	  public void mousePressed(MouseEvent e) {
+ 	    xs++;
+ 	    ys++;
+ 	    ch.repaint ();
+ 	  }
+ 	});
+       
+       add(wb,"West");
+       
+       pack();
+       show();
+       
+       sp.setScrollPosition (10,0);
+       
+       Toolkit t = Toolkit.getDefaultToolkit();
+       t.beep();
+     }
+   }
+ 
+   static class RoundRectWindow extends SubFrame
+   {
+     public void init ()
+     {
+       initted = true;
+       setTitle("RoundRect");
+       setLayout(new BorderLayout());
+       add(new DrawRoundRect(), "West");
+       Button cb = new Button ("Close");
+       cb.addActionListener(new ActionListener () {
+           public void actionPerformed (ActionEvent e) {
+             dispose();
+           }
+         });
+       add(cb, "Center");
+       add(new FillRoundRect(), "East");
+       pack();
+     }
+ 
+     static class DrawRoundRect extends Panel 
+     { 
+       
+       public Dimension getPreferredSize() 
+       { 
+ 	return new Dimension(500, 500); 
+       } 
+ 
+       public void paint( Graphics g )  
+       {  
+ 	// left side 
+ 	
+ 	// rectangles should be identical 
+ 	g.setColor(Color.red); 
+ 	g.drawRect(50, 50, 300, 100); 
+ 	g.setColor(Color.black); 
+ 	g.drawRoundRect(50, 50, 300, 100, 0, 0); 
+ 	
+ 	// small round corners 
+ 	g.setColor(Color.red); 
+ 	g.drawRect(50, 200, 300, 100); 
+ 	g.setColor(Color.black); 
+ 	g.drawRoundRect(50, 200, 300, 100, 25, 25); 
+ 	
+ 	// round ends  
+ 	g.setColor(Color.red); 
+ 	g.drawRect(50, 350, 300, 100); 
+ 	g.setColor(Color.black); 
+ 	g.drawRoundRect(50, 350, 300, 100, 25, 100); 
+ 	
+ 	// right side 
+ 	
+ 	// circle only 
+ 	g.setColor(Color.blue); 
+ 	g.drawOval(375, 50, 100, 100); 
+ 	
+ 	// round rectangle should exactly cover circle 
+ 	g.setColor(Color.blue); 
+ 	g.drawOval(375, 200, 100, 100); 
+ 	g.setColor(Color.black); 
+ 	g.drawRoundRect(375, 200, 100, 100, 100, 100); 
+ 	
+ 	// round rectangle should look like a circle 
+ 	g.setColor(Color.red); 
+ 	g.drawRect(375, 350, 100, 100); 
+ 	g.setColor(Color.black); 
+ 	g.drawRoundRect(375, 350, 100, 100, 100, 100); 
+       } 
+     }
+ 
+     static class FillRoundRect extends Panel 
+     { 
+       
+       public Dimension getPreferredSize() 
+       { 
+ 	return new Dimension(500, 500); 
+       } 
+       
+       public void paint( Graphics g )  
+       {  
+ 	// left side 
+ 	
+ 	// rectangles should be identical 
+ 	g.setColor(Color.red); 
+ 	g.fillRect(50, 50, 300, 100); 
+ 	g.setColor(Color.black); 
+ 	g.fillRoundRect(50, 50, 300, 100, 0, 0); 
+ 	
+ 	// small round corners 
+ 	g.setColor(Color.red); 
+ 	g.fillRect(50, 200, 300, 100); 
+ 	g.setColor(Color.black); 
+ 	g.fillRoundRect(50, 200, 300, 100, 25, 25); 
+ 	
+ 	// round ends  
+ 	g.setColor(Color.red); 
+ 	g.fillRect(50, 350, 300, 100); 
+ 	g.setColor(Color.black); 
+ 	g.fillRoundRect(50, 350, 300, 100, 25, 100); 
+ 	
+ 	// right side 
+ 	
+ 	// circle only 
+ 	g.setColor(Color.blue); 
+ 	g.fillOval(375, 50, 100, 100); 
+ 	
+ 	// round rectangle should exactly cover circle 
+ 	g.setColor(Color.blue); 
+ 	g.fillOval(375, 200, 100, 100); 
+ 	g.setColor(Color.black); 
+ 	g.fillRoundRect(375, 200, 100, 100, 100, 100); 
+ 	
+ 	// round rectangle should look like a circle 
+ 	g.setColor(Color.red); 
+ 	g.fillRect(375, 350, 100, 100); 
+ 	g.setColor(Color.black); 
+ 	g.fillRoundRect(375, 350, 100, 100, 100, 100); 
+       } 
+     }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/datatransfer/Demo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/datatransfer/Demo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/datatransfer/Demo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/datatransfer/Demo.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,652 ----
+ /* Demo.java -- And example of copy/paste datatransfer
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA. */
+ 
+ package gnu.classpath.examples.datatransfer;
+ 
+ import java.awt.*;
+ import java.awt.event.*;
+ import java.awt.datatransfer.*;
+ 
+ import java.io.*;
+ import java.net.URL;
+ import java.util.Arrays;
+ import java.util.Iterator;
+ import java.util.Random;
+ 
+ /**
+  * An example how datatransfer works for copying and pasting data to
+  * and from other programs.
+  */
+ class Demo
+   extends Frame
+   implements ActionListener, ItemListener, FlavorListener
+ {
+   public static void main(String args[])
+   {
+     new Demo();
+   }
+ 
+   private TextArea text;
+   private Button copyText;
+   private Button pasteText;
+ 
+   private ImageComponent image;
+   private Button copyImage;
+   private Button pasteImage;
+ 
+   private ObjectComponent object;
+   private Button copyObject;
+   private Button pasteObject;
+ 
+   private FilesComponent files;
+   private Button copyFiles;
+   private Button pasteFiles;
+ 
+   private FlavorsComponent flavors;
+   private FlavorDetailsComponent details;
+ 
+   private Demo()
+   {
+     super("GNU Classpath datatransfer");
+ 
+     /* Add all the different panel to the main window in one row. */
+     setLayout(new GridLayout(5, 1, 10, 10));
+     add(createTextPanel());
+     add(createImagePanel());
+     add(createObjectPanel());
+     add(createFilesPanel());
+     add(createFlavorsPanel());
+ 
+     /* Add listeners for the various buttons and events we are
+        interested in. */
+     addWindowListener(new WindowAdapter ()
+       {
+ 	public void windowClosing (WindowEvent e)
+ 	{
+ 	  dispose();
+ 	}
+       });
+     flavors.addItemListener(this);
+     Toolkit t = Toolkit.getDefaultToolkit();
+     Clipboard c = t.getSystemClipboard();
+     c.addFlavorListener(this);
+ 
+     /* Show time! */
+     pack();
+     show();
+   }
+ 
+   /**
+    * The Text Panel will show simple text that can be copied and pasted.
+    */
+   private Panel createTextPanel()
+   {
+     Panel textPanel = new Panel();
+     textPanel.setLayout(new BorderLayout());
+     text = new TextArea("GNU Everywhere!",
+ 			2, 80,
+ 			TextArea.SCROLLBARS_VERTICAL_ONLY);
+     text.setEditable(false);
+     text.setEnabled(true);
+     Panel textButtons = new Panel();
+     textButtons.setLayout(new FlowLayout());
+     copyText = new Button("Copy text");
+     copyText.addActionListener(this);
+     pasteText = new Button("Paste text");
+     pasteText.addActionListener(this);
+     textButtons.add(copyText);
+     textButtons.add(pasteText);
+     textPanel.add(text, BorderLayout.CENTER);
+     textPanel.add(textButtons, BorderLayout.SOUTH);
+     return textPanel;
+   }
+ 
+   /**
+    * The Image Panel shows an image that can be copied to another
+    * program or be replaced by pasting in an image from another
+    * application.
+    */
+   private Panel createImagePanel()
+   {
+     Panel imagePanel = new Panel();
+     imagePanel.setLayout(new BorderLayout());
+     URL imageurl = this.getClass()
+       .getResource("/gnu/classpath/examples/icons/big-fullscreen.png");
+     Image img = Toolkit.getDefaultToolkit().createImage(imageurl);
+     image = new ImageComponent(img);
+     Panel imageButtons = new Panel();
+     copyImage = new Button("Copy image");
+     copyImage.addActionListener(this);
+     pasteImage = new Button("Paste image");
+     pasteImage.addActionListener(this);
+     imageButtons.add(copyImage);
+     imageButtons.add(pasteImage);
+     imagePanel.add(image, BorderLayout.CENTER);
+     imagePanel.add(imageButtons, BorderLayout.SOUTH);
+     return imagePanel;
+   }
+ 
+   /**
+    * The Object Panel holds a simple (Point) object that can be copied
+    * and pasted to another program that supports exchanging serialized
+    * objects.
+    */
+   private Panel createObjectPanel()
+   {
+     Panel objectPanel = new Panel();
+     objectPanel.setLayout(new BorderLayout());
+     Random random = new Random();
+     int x = (byte) random.nextInt();
+     int y = (byte) random.nextInt();
+     object = new ObjectComponent(new Point(x, y));
+     Panel objectButtons = new Panel();
+     copyObject = new Button("Copy object");
+     copyObject.addActionListener(this);
+     pasteObject = new Button("Paste object");
+     pasteObject.addActionListener(this);
+     objectButtons.add(copyObject);
+     objectButtons.add(pasteObject);
+     objectPanel.add(object, BorderLayout.CENTER);
+     objectPanel.add(objectButtons, BorderLayout.SOUTH);
+     return objectPanel;
+   }
+   
+   /**
+    * The Files Panel shows the files from the current working
+    * directory. They can be copied and pasted between other
+    * applications that support the exchange of file lists.
+    */
+   private Panel createFilesPanel()
+   {
+     Panel filesPanel = new Panel();
+     filesPanel.setLayout(new BorderLayout());
+     files = new FilesComponent(new File(".").listFiles());
+     Panel filesButtons = new Panel();
+     copyFiles = new Button("Copy files");
+     copyFiles.addActionListener(this);
+     pasteFiles = new Button("Paste files");
+     pasteFiles.addActionListener(this);
+     filesButtons.add(copyFiles);
+     filesButtons.add(pasteFiles);
+     filesPanel.add(files, BorderLayout.CENTER);
+     filesPanel.add(filesButtons, BorderLayout.SOUTH);
+     return filesPanel;
+   }
+   
+   /**
+    * The Flavors Panel shows the different formats (mime-types) that
+    * data on the clipboard is available in. By clicking on a flavor
+    * details about the representation class and object is given.
+    */
+   private Panel createFlavorsPanel()
+   {
+     Panel flavorsPanel = new Panel();
+     flavorsPanel.setLayout(new BorderLayout());
+     Label flavorsHeader = new Label("Flavors on clipboard:");
+     Toolkit t = Toolkit.getDefaultToolkit();
+     Clipboard c = t.getSystemClipboard();
+     DataFlavor[] dataflavors = c.getAvailableDataFlavors();
+     flavors = new FlavorsComponent(dataflavors);
+     details = new FlavorDetailsComponent(null);
+     flavorsPanel.add(flavorsHeader, BorderLayout.NORTH);
+     flavorsPanel.add(flavors, BorderLayout.CENTER);
+     flavorsPanel.add(details, BorderLayout.SOUTH);
+     return flavorsPanel;
+   }
+ 
+   /**
+    * FlavorListener implementation that updates the Flavors Panel
+    * whenever a change in the mime-types available has been detected.
+    */
+   public void flavorsChanged(FlavorEvent event)
+   {
+     Toolkit t = Toolkit.getDefaultToolkit();
+     Clipboard c = t.getSystemClipboard();
+     DataFlavor[] dataflavors = c.getAvailableDataFlavors();
+     flavors.setFlavors(dataflavors);
+     details.setDataFlavor(null);
+   }
+ 
+   /**
+    * ItemChangeListener implementation that updates the flavor details
+    * whenever the user selects a different representation of the data
+    * available on the clipboard.
+    */
+   public void itemStateChanged(ItemEvent evt)
+   {
+     DataFlavor df = null;
+     String s = flavors.getSelectedItem();
+     if (s != null)
+       {
+ 	try
+ 	  {
+ 	    df = new DataFlavor(s);
+ 	  }
+ 	catch (ClassNotFoundException cnfe)
+ 	  {
+ 	    cnfe.printStackTrace();
+ 	  }
+       }
+     details.setDataFlavor(df);
+   }
+   
+   /**
+    * ActionListener implementations that will copy or past data
+    * to/from the clipboard when the user requests that for the text,
+    * image, object of file component.
+    */
+   public void actionPerformed (ActionEvent evt)
+   {
+     Button b = (Button) evt.getSource();
+     Toolkit t = Toolkit.getDefaultToolkit();
+     Clipboard c = t.getSystemClipboard();
+     if (b == copyText)
+       c.setContents(new StringSelection(text.getText()), null);
+ 
+     if (b == pasteText)
+       {
+ 	String s = null;
+ 	try
+ 	  {
+ 	    s = (String) c.getData(DataFlavor.stringFlavor);
+ 	  }
+ 	catch (UnsupportedFlavorException dfnse)
+ 	  {
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	  }
+ 	catch (ClassCastException cce)
+ 	  {
+ 	  }
+ 	if (s == null)
+ 	  t.beep();
+ 	else
+ 	  text.setText(s);
+       }
+ 
+     if (b == copyImage)
+       c.setContents(new ImageSelection(image.getImage()), null);
+ 
+     if (b == pasteImage)
+       {
+ 	Image i = null;
+ 	try
+ 	  {
+ 	    i = (Image) c.getData(DataFlavor.imageFlavor);
+ 	  }
+ 	catch (UnsupportedFlavorException dfnse)
+ 	  {
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	  }
+ 	catch (ClassCastException cce)
+ 	  {
+ 	  }
+ 	if (i == null)
+ 	  t.beep();
+ 	else
+ 	  image.setImage(i);
+       }
+ 
+     if (b == copyObject)
+       c.setContents(new ObjectSelection(object.getObject()), null);
+ 
+     if (b == pasteObject)
+       {
+ 	Serializable o = null;
+ 	try
+ 	  {
+ 	    o = (Serializable) c.getData(ObjectSelection.objFlavor);
+ 	  }
+ 	catch (UnsupportedFlavorException dfnse)
+ 	  {
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	  }
+ 	catch (ClassCastException cce)
+ 	  {
+ 	  }
+ 	if (o == null)
+ 	  t.beep();
+ 	else
+ 	  object.setObject(o);
+       }
+ 
+     if (b == copyFiles)
+       c.setContents(new FilesSelection(files.getFiles()), null);
+ 
+     if (b == pasteFiles)
+       {
+ 	java.util.List fs = null;
+ 	try
+ 	  {
+ 	    fs = (java.util.List) c.getData(DataFlavor.javaFileListFlavor);
+ 	  }
+ 	catch (UnsupportedFlavorException dfnse)
+ 	  {
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	  }
+ 	catch (ClassCastException cce)
+ 	  {
+ 	  }
+ 	if (fs == null)
+ 	  t.beep();
+ 	else
+ 	  files.setFiles(fs);
+       }
+   }
+ 
+   /**
+    * Simple awt component that shows an settable image.
+    */
+   static class ImageComponent extends Component
+   {
+     private Image image;
+ 
+     ImageComponent(Image image)
+     {
+       setSize(20, 20);
+       setImage(image);
+     }
+ 
+     Image getImage()
+     {
+       return image;
+     }
+ 
+     void setImage(Image image)
+     {
+       this.image = image;
+       repaint();
+     }
+ 
+     public void paint(Graphics g)
+     {
+       g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
+     }
+   }
+ 
+   /**
+    * Simple awt component that shows a settable Serializable object.
+    */
+   static class ObjectComponent extends TextArea
+   {
+     private Serializable object;
+ 
+     ObjectComponent(Serializable object)
+     {
+       super("", 2, 80, TextArea.SCROLLBARS_NONE);
+       setEditable(false);
+       setEnabled(false);
+       setObject(object);
+     }
+ 
+     Serializable getObject()
+     {
+       return object;
+     }
+ 
+     void setObject(Serializable object)
+     {
+       this.object = object;
+       setText("Class: " + object.getClass().getName()
+ 	      + "\n"
+ 	      + "toString(): " + object.toString());
+       repaint();
+     }
+   }
+ 
+   /**
+    * Simple awt component that shows a settable list of Files.
+    */
+   static class FilesComponent extends List
+   {
+     private File[] files;
+     
+     FilesComponent(File[] files)
+     {
+       super(4, true);
+       setFiles(files);
+     }
+     
+     File[] getFiles()
+     {
+       String[] strings = getSelectedItems();
+       if (strings == null || strings.length == 0)
+ 	return (File[]) files.clone();
+       
+       File[] fs = new File[strings.length];
+       for (int i = 0; i < strings.length; i++)
+ 	fs[i] = new File(strings[i]);
+       return fs;
+     }
+     
+     void setFiles(File[] files)
+     {
+       this.files = files;
+       removeAll();
+       for (int i = 0; i < files.length; i++)
+         {
+ 	  addItem(files[i].toString());
+ 	  select(i);
+         }
+     }
+     
+     void setFiles(java.util.List list)
+     {
+       File[] fs = new File[list.size()];
+       int i = 0;
+       Iterator it = list.iterator();
+       while (it.hasNext())
+ 	fs[i++] = (File) it.next();
+       
+       setFiles(fs);
+     }
+   }
+ 
+   /**
+    * Simple awt component that shows a settable list of DataFlavors.
+    */
+   static class FlavorsComponent extends List
+   {
+     FlavorsComponent(DataFlavor[] flavors)
+     {
+       super(4);
+       setFlavors(flavors);
+     }
+ 
+     void setFlavors(DataFlavor[] flavors)
+     {
+       removeAll();
+       for (int i = 0; i < flavors.length; i++)
+ 	{
+ 	  addItem(flavors[i].getMimeType());
+ 	}
+     }
+   }
+ 
+   /**
+    * Simple awt component that shows the details for and an object as
+    * found on the system clipboard as represented by a given
+    * DataFlavor.
+    */
+   static class FlavorDetailsComponent extends TextArea
+   {
+     private DataFlavor df;
+ 
+     FlavorDetailsComponent(DataFlavor df)
+     {
+       super("", 2, 80, TextArea.SCROLLBARS_NONE);
+       setEditable(false);
+       setEnabled(false);
+       setDataFlavor(df);
+     }
+ 
+     void setDataFlavor(DataFlavor df)
+     {
+       if (df == this.df
+ 	  || (df != null && df.equals(this.df)))
+ 	return;
+ 
+       this.df = df;
+ 
+       if (df == null)
+ 	setText("No flavor selected");
+       else
+ 	{
+ 	  Object o = null;
+ 	  Throwable exception = null;
+ 	  try
+ 	    {
+ 	      Toolkit t = Toolkit.getDefaultToolkit();
+ 	      Clipboard c = t.getSystemClipboard();
+ 	      o = c.getData(df);
+ 	    }
+ 	  catch (Throwable t)
+ 	    {
+ 	      exception = t;
+ 	    }
+ 	  if (o != null)
+ 	    {
+ 	      setText("Data: " + o.getClass().getName()
+ 		      + "\n"
+ 		      + o);
+ 	    }
+ 	  else
+ 	    {
+ 	      setText("Error retrieving: " + df
+ 		      + "\n"
+ 		      + exception != null ? exception.toString() : "");
+ 	    }
+ 	}
+       repaint();
+     }
+   }
+ 
+   /**
+    * Helper class to put an Image on a clipboard as
+    * DataFlavor.imageFlavor.
+    */
+   static class ImageSelection implements Transferable
+   {
+     private final Image img;
+ 
+     ImageSelection(Image img)
+     {
+       this.img = img;
+     }
+ 
+     static DataFlavor[] flavors = new DataFlavor[] { DataFlavor.imageFlavor };
+     public DataFlavor[] getTransferDataFlavors()
+     {
+       return (DataFlavor[]) flavors.clone();
+     }
+ 
+     public boolean isDataFlavorSupported(DataFlavor flavor)
+     {
+       return flavor.equals(DataFlavor.imageFlavor);
+     }
+ 
+     public Object getTransferData(DataFlavor flavor)
+       throws UnsupportedFlavorException
+     {
+       if (!isDataFlavorSupported(flavor))
+ 	throw new UnsupportedFlavorException(flavor);
+ 
+       return img;
+     }
+   }
+ 
+   /**
+    * Helper class to put an Object on a clipboard as Serializable
+    * object.
+    */
+   static class ObjectSelection implements Transferable
+   {
+     private final Serializable obj;
+ 
+     ObjectSelection(Serializable obj)
+     {
+       this.obj = obj;
+     }
+ 
+     static DataFlavor objFlavor = new DataFlavor(Serializable.class,
+ 						 "Serialized Object");
+     static DataFlavor[] flavors = new DataFlavor[] { objFlavor };
+     public DataFlavor[] getTransferDataFlavors()
+     {
+       return (DataFlavor[]) flavors.clone();
+     }
+ 
+     public boolean isDataFlavorSupported(DataFlavor flavor)
+     {
+       return flavor.equals(objFlavor);
+     }
+ 
+     public Object getTransferData(DataFlavor flavor)
+       throws UnsupportedFlavorException
+     {
+       if (!isDataFlavorSupported(flavor))
+ 	throw new UnsupportedFlavorException(flavor);
+ 
+       return obj;
+     }
+   }
+ 
+   /**
+    * Helper class to put a List of Files on the clipboard as
+    * DataFlavor.javaFileListFlavor.
+    */
+   static class FilesSelection implements Transferable
+   {
+     private final File[] files;
+ 
+     FilesSelection(File[] files)
+     {
+       this.files = files;
+     }
+ 
+     static DataFlavor[] flavors = new DataFlavor[]
+       { DataFlavor.javaFileListFlavor };
+     public DataFlavor[] getTransferDataFlavors()
+     {
+       return (DataFlavor[]) flavors.clone();
+     }
+ 
+     public boolean isDataFlavorSupported(DataFlavor flavor)
+     {
+       return flavor.equals(DataFlavor.javaFileListFlavor);
+     }
+ 
+     public Object getTransferData(DataFlavor flavor)
+       throws UnsupportedFlavorException
+     {
+       if (!isDataFlavorSupported(flavor))
+ 	throw new UnsupportedFlavorException(flavor);
+ 
+       return Arrays.asList(files);
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/html/Demo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/html/Demo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/html/Demo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/html/Demo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,131 ----
+ /* Demo.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.classpath.examples.html;
+ 
+ import gnu.javax.swing.text.html.parser.HTML_401F;
+ 
+ import gnu.xml.dom.html2.DomHTMLParser;
+ 
+ import java.io.IOException;
+ import java.io.PrintStream;
+ import java.io.StringReader;
+ 
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.html2.HTMLDocument;
+ 
+ /**
+  * This example demonstrates how to parse HTML input into
+  * org.w3c.dom.html2 document model.
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class Demo
+ {
+   /**
+    * The sample HTML to parse.
+    */
+   static String input = "<!--2-->a<b iD=1>x</b>y<b><i>c</b>d</i>e";  
+   
+   public static void main(String[] args)
+   {
+     try
+       {
+         // Create a parser, using our DTD.
+         DomHTMLParser p = new DomHTMLParser(HTML_401F.getInstance());
+         HTMLDocument d = p.parseDocument(new StringReader(input));
+         
+         // Print the input HTML.
+         System.out.println(input);
+         
+         // Print the parsed data structure.
+         print(System.out, d, 0);
+       }
+     catch (IOException ex)
+       {
+         ex.printStackTrace();
+       }
+   }
+ 
+   /**
+    * Print the parsed data structure.
+    * 
+    * @param stream the output
+    * @param node the node
+    * @param ident the identation
+    */
+   static void print(PrintStream stream, Node node, int ident)
+   {
+     if (node == null)
+       return;
+ 
+     StringBuffer tab = new StringBuffer();
+     stream.println();
+     for (int i = 0; i < ident; i++)
+       {
+         tab.append(' ');
+       }
+ 
+     stream.print(tab + node.getNodeName());
+     if (node.getNodeValue() != null)
+       {
+         stream.println();
+         stream.print(tab + " '" + node.getNodeValue() + "'");
+       }
+ 
+     NamedNodeMap attributes = node.getAttributes();
+     if (attributes != null && attributes.getLength() != 0)
+       {
+         stream.print(' ');
+         for (int i = 0; i < attributes.getLength(); i++)
+           {
+             Node a = attributes.item(i);
+             stream.print(a.getNodeName() + "='" + a.getNodeValue() + "'");
+           }
+       }
+ 
+     ident += 2;
+ 
+     NodeList childs = node.getChildNodes();
+     if (childs != null)
+       for (int i = 0; i < childs.getLength(); i++)
+         {
+           print(stream, childs.item(i), ident);
+         }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/big-fullscreen.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/big-fullscreen.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/big-fullscreen.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/big-fullscreen.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,11 ----
+ ‰PNG
+ 
+ 
IHDR00Wù‡bKGDÿÿÿ ½§“mIDATxÚíš{tUžÇ?õèg:MÄ@d�H”$ÊÈˆa&Ží:Œ{2³‡•,»ì¨³Çutf‘=‡™=(.g\ñ³A‡ÙCdAA^ê®+á�HÈƒW’NºÓÝÕU]u÷«û41`xü±Ì=çvÕ}Ô½¿ïý½«þ\þ\nL	ƒ9�@ ÈrfÎœ™ºO«tttÈÉûÿEN»OÙä,X°Àôz½9Á`0œÖ?p]!D¶â¦@€@ Ðöúë¯—E£ÑvÀ“6v¡ªªêŽkÝëé§Ÿþû5kÖüÛ©S§Ä¼yó¬ÂÂBý‰'ž(=ztû��0~üøœ†††»ÛÛÛë%IšzèÐ¡†@ �»eË–\`êºuëê§^Ã^ÓJKK_RUÕsüøqzzzØ³g¡Ph#0
°nˆéºþ PßÑÑáÎ-\¸ð{ì{À6Àd_å>Î¼¼¼ùÅÅÅ#Ž9Bss3gÏž¥¥¥…ÆÆÆ)o¿ýö-7Ln¿ýöw…�­_¿¾˜¾yóæOl‚ë€§m®e^å>Ì™3gŠªªôööâv»™8q"'NäÄ‰ìÜ¹ó_n˜lÙ²ÅYTTôÎÞ½{êr¹þ×>ñ x¿ªªêq@\Å#EùÉ‚d‡ÃAYYªª’H$8vì555:tè~@ºÊu/«ÄÃÚÛÛŸ«­­}}Ø°aóß}÷ÝpÚ‰Ï[·nÝêÂÂÂ9W±Ç¸I“&yUU÷æ›o²oß¾eŠ¢üüÁäÞ{ïeøðá†Q.^·‹�ç€œP(ôéÎ�;ÿÆV°À“À¸Ï}S)ª®®Î=räk×®=�Çßµ,k¢®ëýýýÌ›7�;vp×]wÝßÐÐ°îzÙ�@à»¹eÅŠ�øýþM‡¾;Ô¥cÆŒY‡+fÎœ¹L1FQ"„(B!ò…¹Bˆ!D–Â/„È�$ie[[Û¾x<.âñ¸Ðu]èº.Âá°8sæŒ¨¯¯·Ür‹˜6mÚo˜9rä‹uuuo„B¡5ªªx�Æ–––å•••OïÞ½;.IÒ\@z�~ÛÑEÝîO–ËåÊ+**šjš&ÑhI’p¹\8�NdY&ã÷ûééé¹û†X¡’’’€ªªë×®]û<ðdsss�0eÊ”ßìÚµëJKK!ÄF!Ä‰òòrKñ'!Dyy¹)„øB™:ujBÑ˜““3ÒöÀX–…®ë) Bòóó1M“X,–}C™,Ëo·¶¶Ž?xðàT`íÒ¥Kç÷ûãÀîýû÷GfÍšõ£ÆÆÆ $I�! G’¤é@ˆH’40�¸$I
+ 
+ 
+ RH’”ªBdYÆ²,n»í6öìÙsÝÁœ"äË—/ˆƒÁ�@ ÕžöYGGÇ�À;C\6çæ›oÞ'„†aˆ¾¾>E__ŸÐ4Mtttˆ††ññÇ‹êêjq½ÀöÝÀm{÷î=,0ïžªªª]@lˆëgßyç�)Jç€¢()Î8�ÎëöÄÉr;pbñâÅU~¿ÿù­[·ÛÊ�£•••5¶s’	-++Ë¸Bd
+ @FF‡ã†8
+ ä�5*,Ëò>|ø
›àuÀ¼êêêS¶UJùÖ}÷Ý§¤w$O?YLÓÄ²,Eaüøñï_¥�€œ_¾|ù,Ã0þöá‡þ;À	ü5ðNMMÍíW ¤¢¢bXº¥ƒ�eI’ˆÇã,^¼·Ûf_—L›6mz]]Ý§š¦-›0aÂyÔ§@ÉöíÛO‘!®ÿ�‰K˜¦iìÛ·ï·Û-ë¯™“&MúÉ™3gvoÜ¸q–iš?ß²eË(›3€žÊÊÊ%W�z/':)dY–éêêB’¤(à».êííýCggg©Ý|eÕªU¿·9ð!ðÃêêêF cˆë)II$X–…aY€q]JKK‡7.[¶l
+ ðÂæÍ›¿kø.°³¦¦æ.À=T?0JVY–3.£—WíJëëëUUý]šbÿ7àÜ¾}»ñMq»©wRnhpB“æ3]„ìAv:�cóo*û²­ýÐµZ¡2 ±¶¶¶ÂëõþãŽ;ÆØý3³²²òE@¹ñ!Ý«QäóùF´ù—È—eašfª­ë:·Þ:Ž®`ðÅÞ¡™ÓÁŠÃX¼qãÆ•6>fUWW¼ñ}EH±|”�×ÿý{î�>îJJ,„À4MTUMY¢Õ«ß_^~Ïý�¹…Š"¤kõmŸþyžªª¿œ={öSiýÙ:0¸œ– 
+@):Ä�'–OeÛ¶mô÷÷ê}Óƒ;EQ°Ãv&OžÌKæ'TÇë!¼3\¨6Ç•¡ ùå—×Æb±%•••Méà¶oßþê §Ÿ‡ôÏQÔÜ<4|ôØ_oÝºÕßÚÚŠeY—èÀ`ú iZ*:½xñ"Ó§OçÙgŸ+>9¬¸nŒi†#Å‰¯‘!~ô¡C‡ºæÏŸÿx"‘øE]]]~šˆÊÊÊç>3Ô¹QÔåÝ<–1¢pyÓ‰æ’`0H<Ç0Œ”¼÷ôô°råÊT;)B–e¥Â	EQ¸páO=õ?òÈ¤Ï‹ïø²ÉÄ9€på²Ž?ÞÒÖÖvOEEÅ9à·K—.ýO{è# bÎœ9ÓDê«ÅðžF‰#ÓÿÊ™¶ö’þþ~t]¿Ddz{{Y²d	sçÎeñâÅ†‘Ë²�$)Å-Ó49þ<¯½ö�üà…ÃK'4_NŒ¾`üøñß1bÄg¯¾úêÝÀ?­Y³¦ÒrÖÔÔ|+Í;¹M�sºÿ«··ï¦H$B$¡®®ŽÎÎÎ€·Þz‹'Ÿ|!^¯—úúzdYÆ4MâñxÊ™%EI’$:;;Y´h³gÏ.(((80àô•A|ðÁí™™™íß¿ÿ_�å===Î´° ëÃ?|9ù¶ÍŽR•Ó&K£ÑØ„H$‚a8ÆŒÃ¹sçR"tîÜ9JJJøä“OÐ4�––Âáp*ÍÔ4-eVÓ¹ÑÒÒÂ¢E‹ÈÊÊú‹áÃ‡ÿêr�¢Ñ(€ÒÜÜ¼uîÜ¹ÿàóùž©­­ý¶=Çô–——ÿÚngÚ\Ét¹ÜßOÚñäÆÅÅÅLž<]×Y¶l/¼ðG�%‹Å8}ú4±XŒœœŠ¢¤¸a†a¤Öûâ‹/˜3gñxü™Ëyb	ÀëõœFùýþiBˆº¦¦¦¤Ò¶söìÙó»í±”ÌÌÌœŠŠŠäó¸\.2227n=ôÝÝÝø|>šššÐ4�X,†$IìØ±ƒéÓ§ãõz±,‹Õ«W³jÕ*’yt$!‘H I�‡¼¼<O8vÚo>Ì$i€(åçwíÚõïŠ¢ÜæoÚ´éMàgv²“iÊàöx\­­­—œŒ¢(444pàÀjjjxÿý÷ÉÏÏgÃ†
8�N‚Á MMMäååár¹8~ü8Š¢‹ÅRAžËå"‹a>ŸÏ9pŽ;ö§ÇŽ{#
+ ­Ô4-ùPpàÑGýÙîÝ»_K†ÊD¨ýÌÄ<îÂ|ÙŒÈñ“åðq“ã&|;ŽjÏÅb1ºººØ¹s'›6mÂçó¡iýäsøða:;;ñx<dggsk^Ûï§f³¿·›�¦Óyö"ÁSaú[5"‹¸}òæ@)—]\\<-‹½1iÒ¤oØ°¡öìÙ³‹ì¡O�¿\±bÅ{É©@Ÿ¦,0b&rÄÀ‘QÓÄï�˜dâèh;L$âÃ¬D{üËSÛäýÕXå·¯V	ËBz_¼/Ôt±õÔ—'›�77]h7.ÄÎÑïè!*C\’Ðã&fÂÄ”Å¥„_6-++[ðÙgŸÕÃXh}�Nž<Y‘Æ±~À�Á”$TÀ2LT,¢ÂÀ£h†aÉ[ß{ë|áHÓùÒ/õ³ç�x|^·‰tõw�?Ù~ñBw{<f\ôÊôd¸‡Ä2ú"&q—DD–ˆ9etÌ¯ƒ,œžh[pTUU}¯±±ñvŸ°asMdC ÅL,Ý$n™„e�ê$„ ñ«Ÿé=ÝÚ}ü‡®?�<¾/ÓåÊôu)$bÑhï…s}=½Ý±ñ^ÂRM‰ )	""ADôk	q‹D·I"ù ýªÚÄXLk’Hgqqñè`ö˜°­A0L�i	L,¯„îÝ)HÈ‚èžO¶µ?ÿŒõÅ}í-Ýn·§WEB$tS343$EÑ2tbNƒpB'âTè‘BÝ1Ë"bZèÉˆ{°ÈS¶«Ã¶ëª�q¥·¥4pº
0y�’_BŒq£ûÈ—…Ëá&»(�æ Ç��#·³ßI†?+jâ¶,dÉBÏ�ˆ˜aLW„ˆÞM¼·‡˜¥G‹jèB�Å‰cµèˆ�§?�ÉSWí7Ëû
\¤H›kÙsvŸé’PtzuDÂ ®*tÜ…"¡0Ùžn¬L?ý^Ñ&Ãí"‘ãBKD±q½½·Ó“ /ÛA°E'î¶Hì¹”øA•X¤%à	ûjÚ÷rñ’ÝŸ\L¶ç˜€¸h!—ZLˆÄ1†90Ý:.·†+ßO¨_žg˜»1ÖKQ°Bˆ¸†îÇÌ•Ýç§?A¿$.ÂÀjÑ¯œäKî/WE1 ’~�áFýNr»À3jê9ÈY>œÓŠ±$*Nä–>œ’ÀÒuÌÛüÄÌ(†Ð0”8†%aÆ°ô³ˆìÖ+çßÒú¤4âûwÙ…Å$ÜHZ²ìE‘œ¨8QL²ä@FBR¾ZÁÂÂJX–NB�|eÜç±Ð@jùæ�~ß˜s^ó_
+ r‘ÂÅ 8‘eÏW22²ä@B±ÄDÄìïQ,O!ú×ÊÿC¶(/y™ñIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/big-home.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/big-home.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/big-home.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/big-home.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,14 ----
+ ‰PNG
+ 
+ 
IHDR00Wù‡gAMA±�üabKGDùC»	pHYsˆˆåŽ)ItIMEÒ®ßWy¤IDATxÚíšy�]U�Ç?çnïÞ·¿×¯—¼—ÞÒIš¬$â˜D…@â "¨¸�3¸0¢h98.ãÎÆ¥pPGAq\*#‘˜RÑ	‚J $:iº³tz{ý^÷ÛßÝÎüÑ·»º"‘�@•xªNÕ«ûêÞûýžß÷û;¿sÎ…¿¶¿¶3jâ~¶”×|@ýyiÊ^4 ôöWnnÀBÁuå/…€8¡‡€7¿ùùëkŠP•�ý‹‹@HæóIâLò]ˆ"ª8`
+ †š2üˆÖO¿sóôðð{Þùt¶µŠþÎ¶A`�
+ ¢¡½€
+ xöÖc÷íþò¿n^½¤yEGÚ½nq«­À½@ò~ø5ïú·^.·nX*Ï_»T>pÏOå…WÈ\&!�M@/�Œ3%¡žæ}a×N=öhû“Å’îøRµe¬éÈÛoýÜMû÷P~ûÐoŸ!ÛÕÅ±ÃƒÜø‰ÏòÐ÷Ñh4ß^mØ?\ÀúiûtÙ;Ë[Ó¼ñ²KüödÂë‰EY�ù;>yÝ²FÝWö?ÁŽÐžëäÒ7¼…�§ó¿?ÛÉçnº‰ŽL’TÔú
�
äôÓÅrºÜãÅ™æÎ{~áT*U9X*×6¿ÿZGÏYâðÀìºÿ1Ú2i:wc7lzVý
ÇŽ�±ó'?áÎþˆÖTbŽDHŸ	‰ÓÖ_ÊÐ‹®ZfD»:&^ýÁwF[;—óøÃ»ù÷ïÜE:™à«·~›z½NOo/3ÓÓl¿êÍ´d»øÊŽ›øúW¿ÈŠÞ,¦®=°ª¯ó %HµF kñB€2Ù°kMSbÓ•¯êÊvõsïÝw±ã[?"•L°å¥/—RúÔëur‹s€ ·(G¼¥�Uçlâãÿò1®½æm\qÑ¹½vEoî£@k�ÁæŒ-^"¡ÐŠ�kÂÎ‹ÖoJ¶d¹óÎð�ïÝE"çs_¸Y–«U!„‚í8´¶´‡I§Ó¤[2D“6]°�Ï|á+\´íbþáuÇðÈÄ›û»ýk@"Ì'§	å9‚×€ÐÝß¿ùÑ×^²õKWnàöïý»~þ í­.¹ôÕ2‰ˆˆAÓ4rÙ†a`Yªª¢©Ë–/§Ü°¹á#gÇo!Ó‘å-¯zGFóWå2‰ßm@|Á¬-žJ`2óG·~æq¡…û·l½„�âSür÷ïÉeÛ¹åëß`zzZxžO__‹w²dÉÖ­[‡¦iø¾O.›C °¢1^ºý•üôî{AÑxÃÅ/ÆqÝH®%ñ0ÐÌæ³™[9EÉè@ø;_ºq¦í9}SSe®¼òõ<ºï /?ÿ\.¸h;®ëÑtlTUA×UZ[[‰ÇãH)ñ}UU)—ËÄãqÃàì³×3S©rí>Ìƒ{öa£òÚ­›IFCaS×ö<Cš}FI)ÏfVÀØyÇ—ßúë»þ£xñeoß»ãN>ôÑÏ06YàU—lç½×�R¹Œã4éîê¦µ½�h4Žªª,Y²)%–eÍ¾LQÐu�®®.ÚÚÚèèè Orñ+/ã‘½L•k¼dãjÖ/]„©k�ôufÿñ„õ'æVž¥š4ïùá-ßÚº}û7²}ëøðõ7pÛí?àÓŸþ�=H)I&âÄbq¢‘0+úW`š&Bb±žç¡(Ê|$|ß§³³)%mmœ}ö:|ÞóþØóÔ0Ã£^¼a-/YÛÃd>ÿÏËºs·,ðÅŸ‚ÊŸoýñá]ÃÛ.Ãë‡†Žó�÷^Ç®_ü±pˆw¿çÝtöôÑ¨×‘Ã ¯¯�ÎÎnt]'™LâyµZ
ÏópÏóˆD"4›M|ß'›Í‰DX¹r¹Î®}ïû9tlœ‡{Š+úyÙú¥LOOokÏ¤v¾ø“BPy&ðwÿàkøÝ®é³ÖŸ›9tà oÿûwðà£ûèìÈpÙWI´ày³ºÖ
�ÖÖv²Ù™L)å¼ö“É$BÂáð|$|ßŸ7t( ­­�µk×’ëîâ¥^Ìd©Ì¯zŒîînÎ]Ýƒ©ÊT,lîÙ²eóësÏ“PžA÷z*™x[$Õ!n¿õ[\pá6FÇ§8óFÚ»—qltÓ¡(ÐÒ’fÍê5¬Y³ÇqhooÇó<2™®ë"„@JIKKŽã�N§q‡d2‰mÛ¸®K£Ñ@Ó4„œµü,–­ZOÃ…ßüþ	TMeeWº*ÄÁ'÷2˜+"�±…x†<Zßrù¶?>ðÐ#ú†UËxÝ;ÿÉ¾ùË·ëé]²„«¯¾š–tEQI¥R”J%LÓdff†x<N¹\Æ0ŠÅ"Ñh”±±1TUEQ�ãããtvvR.—ioo§T*‘N§Ñu�Ûn»
)%ÃÃCål:92$¦+
Â–é
ŽL¾8“@M;™¾»óÞWßú¥Ï½wÕç5¯yÍÓ¥R)œËe{Ãà¼óÎ#�J£(
+ BTUE�ïû³#!"›9ó.¼6gfÇqPUÛ¶©V«�Ïç™ššâÐ¡CÓO›æñÞî®.µYÐG&¿d"c¡N$ ƒúÜj×¼ïÃŸºƒ,�Ò4�H8B4¥ÙlÎ˜3©¢(†�”³¥½ëºH)q]Ïóæ%s"9)%Žãpß}÷áyõz Øh4&ž|jàq ŒøPðy€ÔN/¨ù€­
Lép8Ü�Ršƒƒƒhš†”’r¹Œ”]×±mÏó(‹!Ðu}ž¤ëº„B¡ù¬dÛ6†aP©T°,‹H$ÂÈÈÕjË²<`"�Êq ôñW5À)OŒ€¬”ª�'Ü€uhK§Ó%ÀTU•\.7/Çq�RÎ§Ç®®.B¡RÊù~Ýu×1täÃƒƒ„­žPéíífQ[7Þx#žç1333'+'z
+ ÈÌ}:ÀçþÉ$ÔÈØ@(¶®ëŽa>|˜\.7nn¢2M)%¥R‰��V®\‰”’F£ÁÞýûé^³©kD­0FÈ ¯§‹G|�}ûöÑÛÛ;Ÿ^UUõƒwNÇ‚‘/u Œ¾÷LX¸ù4�9½™š¦¹†a011�ïûlÝº•éò•RyÖ¨ŠB,%»(ËÒ¥KyÓ›Þ4/™Zy†ÊT‘õ«VâÚç�»™öÖV~öß»&�NS(ˆF£H)ýl%õbð{ËF´“”rÁb› "Íx<îNNN’Ïçi4‹EÂ1‹žÖö<u§ÞÀ>1/ÁÈÈK—.�7j(¢01Avóf’É®'9kÅJüàÿŽŽ"‘…BÓ4ç¼hÏ½;øíàO¹õöx<îÖëuŠÅ"º®cYWoØÀŽ+.çWÿùmú»c ÅðŸZ­ÆÄÄããã”ÊU| �pÎ†sGb„L“J¥B½^§^¯3==M*•òìXø'ôÓZH@ÆãññP(D(Â÷}ìF�ÎZ•ÏÞñ}
+ »vrÏíßåì«xì{˜žšfÏž=8p€ƒÎNñªJ"ž ¯¯�–L¡êµ‡âþûïghhÛ¶±,«ºðŸÝrÑN<à‹Å½¥Ré%sé2ŸŸâö½û¸0“Â¯V8~×�©ON ¥DUU6nÜ8Ÿç
]CéÄãQårÄãqtM#‰�ÉdX±báp˜B¡Àððpþ„Ñ?)	í9DÀWÅ_8QišÆ+º³„U•|¥ÆÄc{)×j³G¶=Þ÷}â©¦e²iótM))—Kxž‡”’™™™ùšHUÕ%tF˜'‡í©©)ªÕêlÙ (dÛÚP&&°¨fxþ†™R‰P­VÙ»w/¦–ªðÆ«¯¤0]¥£½$“IFGGyòÉ'qe¶¾œË€îóA`îfß07‘HpèÐ!ÇÁ÷}¦µI¡ ê!ËÄV_†®Ïg¡Õ«WsÙ¶ó(×\F§f˜œÌ3<<Œ‚r¹L¡PÀ÷}Z[[[HÀ[`Ü3–�”R²hÑ"FGGÉçó¨ªÊÁr•%Í1Ó+‚Ýhékv’›“ˆ‘È’ŽK’m9úû}¶lÙÂøø8áp˜]»vÍ/~LÓÄó<y‚öÏXBÒ0·££ƒB¡@±Xàñƒƒ8aƒ
	Ÿ¼í "Xu‹E|ß§Z­R¼áº.¶mÓh4(•J=zÏó(
+ =zt¾Æ:ÁÀg¼­"ÇŽ?�F£4
t]'•Nsé‹6�ŽÅ˜Ç1©j j°VB�FÉd2¤R)2™±XË²È´'Ù°aË—/§cQÑdˆÜò$e<ªêŠ	xº©iÏ›‰7•‰ãéU
+ å14]ç‘‰<-ºAEQ	iŠ¦ah‘p„¦Waª4ÎÀÈãTêeTU!eµÒ°›Œ�‚c1td».që>fÆÂ"Ñ¶å«6·}(Þ.¯6,eTúrç¯îØÿµ3šÖ¼¬ël×öÖ·w¦Ð,�ÞKçÊ${† Nûô/Î¡d³$,ƒT(DUT¹æ]ïÂŠ„QU��e¢h
+ ª!ÐŒY{:Mð|ÕRð*Š1{R%„P=W•	é[	YG‘…U›Ö\.„�À�}»÷î?¥SÊm×¬[íKÿRéÓáº~ÊW�õBSº„ç†Üš‹jhšÄê¸Ï±=”›Z½AÓõ�†‚PTE!Ñ°&ñ´)“-q¡DTô¨‚†Baf*£Ž)´ÙháOj†|Ú÷•ã
+ Êt£æ}äÀïþ˜?ål»fÝ¥>$ý�µ
+ Ï[¢âÇ¥ë…ªu«ŠPˆêÂõ„ëWœf×_”I8ËÖòc""BB	eB¾ô¥�¾VX÷"K‹$L¡³‡B¾çÒ(Ioj¤ÑB:fœ†S*MÕ‡UM™Ðt£ìK}Ú®¸÷yž·{hÿÓ…ç*¡}®é×šõßøB}E.s…>ÜÈ7w»‘+åëÍPRž+‰$�Eör-
…cVWhTJ5ªšZT
ëaUq5@ÃÇ³knþðÞ‰_ŽöªªÎ-kÝâû^-œµG›ÇBa5¬›Ü3ò$cÁJ°T¦Ïí {Û5ëú€. æ¹^MÂÒzÙžÙ÷ë£g&kbËkû?+„HÔËö@yªq8¬4$}é‡áÖÜš¶«¼Zýé©£å?˜Q#©¨"d˜jLÕÕ°f¨i§éæEhžã7fòµC¥Éú¨¢)jþXù˜ïú•`Ý[]°þ=i:}.'õbÁ®�¶`g@X1#Ôµ2“uÏÓtU
Eô„ª)¦ª)!US,UÏõ+Š*ÂNÓ/H)]€ÃOLîË+—€“'”ÏZJœÎ§â$'(gòÙ‚<IÚ–§æ/á»‹Óþvâÿç£).º_%IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/big-warning.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/big-warning.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/big-warning.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/big-warning.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,11 ----
+ ‰PNG
+ 
+ 
IHDR00Wù‡bKGDÿÿÿ ½§“IDATxÚí™{ŒÔWÇ?÷÷˜÷²»³Ë.[X
+ —»€EiÖ*HK# &šÐElJÒFcê#hL�ÆF¢òG“Òø(¶j)jªº-+/AXìÃ](Ê>fgvÞ¿ëÜÙþæ73;3+TþèIn~“{îýý¾ß{Î=çÜ;ð¡|(·„4ûik=ªoý­|·t¡Ö£HÞ2òp‰Àóiÿ¯úá1‚··âVbŒà'çSNªu±éžÙ,™ßŒ”iöþö(Ï¼8Úûžîý ?±Æäñ//å‹V™‚ô0‘¡~NŸ>ÍÓ.ñ“ç.ßâ¿kK�íØÉ~dämdì]HE)%—û“„"i,)Ùò�n^?¹¡$ô±‚ŸTëâÈ¾m¬[³«ÿrà8$®�•P.B^�Kc8nñ¹åã¹p%ÆÙž˜ó­@xõfø9Ðaï˜Rï¥ëùGi¬N ¯þ’}# ó‰ËÔ¨®0H[0}’�öÙ¼p¤ß9ì.àŒj7ŒÀn`‹üëû¡ÚìCt�LÙÞæGTÎFø¦!\AH€L�XÃçÑñº5b	IÀ+èêÎq§våN¡A Øãì|î©i©�!Ofƒ:"¸¸
¡ûf%XÉëne¿"1¡ÆM(œä\o–;U*kï)•€6ŠnŸ³cïŸaq«9Ô­|Ý†¿b&Zå¾öÍ_bÞþUÌY_gÇ÷_Êûâ†k]<ðÉ:‚†SÝQNÆÖGÉ²YQaÅÂF¾»óSÈÁS×]#½Ž6þcìøÖ¯øÑÞÎ‘îÎ3!B‘¹ÍOÀ›ý©ê
+ )s›ýüîP_¾ý°§WÒD�í¦irhß6¼Éÿ@ôBî³Q9—5›š£êüW˜/ÝÓ@À«¡kïGm!U�DR"�;Ég‰=cq¡ó=±}AoîÎŸL¼AN)±„E2•¥LCcÆd/Vt¥ör	4Ûím­M<ô…dh”è¦{¸Ð{¡ º»7J"•?ÌVêƒ&ßÞ:-ŸúåÈZ}Ã0Ø¹õN¬þ£¹~o—tœÆ« zœ_Çe¶Psƒ‡�¶¸£ÅW¶´ÑVÞÌI|vy#Ä¯�RNd�Ž¦&`uÕ&�|~JÙV°È)ow>¸9t¶x,KGAZ,j­ÊQ-¸=€Ç¥aê£—]5ãZ›ýe[A+ä>Sü¬]9âï_ýD?Èís‚9º…³*øtô"„¸MÁ®�MùÔÛ‹hwk›×µ!£«¸R!°¬[15GµjA—Vô‰¤Åø*“é�Þ|VX_Œ@Î€­Ü‰¿UZ:”iäp/íógÑ8Þ•U±Nº¨
+ ¯]¦†ihø=WOÈ7d}É–Î«!èOA:RzY¿ŠLô³íÞæ‘®û>Q‹%)É™@PáÓ™Óì/™€¡¢O–ûlZÛñkåŸ.†{xhm-¯žª!‘”Ü¿²Ž�„(íÜ$„ Âg0«ÉÇÝ‹«ùýáþ’t8;W/kA&Þ)Ÿ€¡³g×\ô¥ñºõ²_Sé×Yµ ‡@†Ä³NÊ
+ Q�ãÝÔÕ!ÑWÞWÍ*Ä¸V´Ú¥¦®¡©u5þ@Å˜Î¹š&XÓ,t:ÌÙYî³|Á$Så®38Ó“àã÷ïÆlÙÆ²û¾Çßþñ.Ã±4–%Ë7¦.øô’ê|9aôbniÛd°âe.™á�ÀW{†WN\Ï‡ÿâÑ§Þ¢»7Ê@8U6! !èÊ‡×°WÑšófbJcÝu”Çïã•ãW²z_;&³H¥å˜\iþÌ€³k‘Ÿ!"r,p¸ëÍœÓVQ±âÈèE–ÌÍ.%Ú[+ˆ'-*ýFÙà#1‹ÁH:ßð*Ðs,ð×Î·‘Ò*ósb—øñ7:X2¯zdõ6ÞUG}µ‰»Ä<�‘h<Í©7#œøwØ©:¸OÆ� X—qèä5dñL¿G+Ë
+ ³,þôÃv.]éc £ªÂ ±Ö]ø�pŠ#§CD¢iþÜ•SÂ_UH+ì–˜À&û¨§_ìÁ¥NK‰¤…iˆ¬ãà(,Ð‰Så×T	aŒZFÛe0œ¢»7Jç™!.÷%ùÙþKœ¿˜LžN¨K(°àþ,Ì¹=Ü½$È†õL®sS[iàuk%gÖ¢5`Zrm0IßPŠË}	:Ïñ›—ßãøÃ…¦lÎªÃþÍh^&Œ->Öt™ÕägñÜqx\ZÑGJI*-‰Æ-¤KB<i�€?!Ê©7"¼||�ƒ]ƒÅø>	¼\UÎ0�©jÀÄRV¯m†�ñU&s¦ù©šXÌžêgJ½]EiËÓx­Ÿ´%Nsèä .Sã��åëÊK®*Š@L>EÀT»ûq`3·†\ö'�>¾O¹Ð Óm‰A¨vøµ8]Yèƒ–óÀ€À;
+ l«¢@Z.EÂPVp©æQ!«X¥®À[nà0p8§n§£ª…ÕfúÕ3d#‘
+ ¸¦HdÂª®FfT¨ß`®*gÕjn“º˜-&ö‚s*ž¶ÝÍ'°”Q€C6"1`HI¡Ø[†DÆ:nµO2ñÛ²¡WÍñ8Š¬Lx¶§´é,ÛõLÛ«ßÕ2–ˆq>‘y±ýcv2.››¹mà3¿u›^·�5òT»¦pæû)ÕêiŸPÀc6}¦XKÛWH8ÀÛû3Q*³Ù3ûÅ­À8Wß°Ô–°lcF2*ïÿýW ã6«ÄmÄ2ääh)U8êp‘¯·ÂNÚæ[ŽRÕºc<
+ ˜´�´?-Çü�%Ÿ5òü¶ÕÒÑç$’o<…;å¿ì"–øîVIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-copy.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-copy.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-copy.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-copy.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,4 ----
+ ‰PNG
+ 
+ 
IHDRóÿabKGDÿÿÿ ½§“ÒIDATxÚµ’=Š„@…¿^7÷b‚FŠ¡ˆf{„‰Œõ^ÀÀ»´ÐÄS¼IÖaížŸetñªú«¸z<Ò4MrÉZ»›œÊ’äk€1f¯=è{OÊ²dÛ6‚ `Gš¦!CÚ¶õ›ÿu~
Ç±¢(ºåï€=€{¬–eQ–eJ’D]×éÌô¬‰“�1I^°÷\d­=¸¿:®K|;ƒêº¾±¹ÿ‚k3/­öËU°®+yž“¦)}ßPUUé&˜ç™OÞ¼`âà
+ jý/ê~¼�9IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-cut.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-cut.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-cut.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-cut.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3 ----
+ ‰PNG
+ 
+ 
IHDRóÿabKGDÿÿÿ ½§“ýIDATxÚµ’±JQE"Icºðòvæ;Þ‚�2_�BÐ¯P++ÁÂ?0�²11(bÄXÈLã!)£åµÙâ±¾Ín§›¹óîÜ;oàBëÔ7R¹Í!·¹ÓGÑ«<Ó4|îùê¿P.•½Ìß_KŠX¸šÏôº×³&ñ˜hôÐÎ³`ƒ Pô6tåê¡­Æ®U‘èóc¬ó³SzyºÕMØÖŠßñ“Üß…ôØeLu²î-4��1F•ÊV´Š<²‰Là"©Ÿ—ÖÌ”]¯ïû{ÛI£u‰S˜Ÿ`6�k³i\óR¶é&‡GÇÕ,öU˜»8¥äÁþ?2ZqNDfO£IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-back.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-back.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-back.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-back.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,7 ----
+ ‰PNG
+ 
+ 
IHDRàw=øbKGDÿÿÿ ½§“ÀIDATxÚå•¿NAÆ·»6ˆ„PÑ�ÁD¡¢ÈC„–––’’Wà B¼4�' ¢H‰À8üÈ#Û·»CÁ`ëä;#Š¬4ÒíÜÎ|ûíî|ÿëˆò.T¯H,@`z
>|�¨Wà7w~&ó! Ð+€ð;?Ê4Z6ñClšµ�š¼ÉÿœU‘Ä¿×%æ#Ðâ¬×ð”üø¢†Ñ
+ A)…Ñ
+ ë<Z=†×1»¥
+ «‹_&�+àð&+ùaùšþ¢¡;Dç-Öùç#ÐŠØ:ŽÊ•Äõ¨v»ƒhbfÖïîŸð«rƒÑŠVl‰­ÃyÁyÁèG£(�Ò&µFÒø…¥6¾¢TöP8/TÏ�rDÀÀòü—û©¹oŒ}šÉ]$�ÚU®g*€FK[k\þÞûgMI;"Üã¥­µ‹)ž™Ô¯O©ß\¦'*sÐji ÛëY›öy
+ -d`x4ùÿh¶�ÉëI‘eIE'HÛ�†búœ¼°Jð7;™dÉE0@˜FÂ	tÕ¢<b×Æ$øZa‡i&¯êLamR}ôFzÒú^¬7€lß½'¿ùxãž³Ê±õÚIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-down.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-down.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-down.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-down.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,6 ----
+ ‰PNG
+ 
+ 
IHDRàw=øbKGDÿÿÿ ½§“ÍIDATxÚí•ÏJÜPÆ÷æŽÓ‚ua_Àqž ûÒ�tÓe·]U@w¾@…úâ¶ˆXZ\)ºh‘.Æ? (è”jÇ™äæ^½BŒ™›�vÕBrÎ÷å;ßÉ	ü�>!ú<—fPò
+ `=N¥D(«|Üipò³E;Ôl~=¤{}	€ŽBÖß½ÁåiGVŠ@„ÚPQ�¤ ì´i_6è´.Ò¢,AÏŸ@
+ tl0Æ UÚÇ¾&ªàOŠ±ƒ)½Å`*G®pÄ=rk-Bˆ¢—LrmÖ•¹Žò¬µHy¯ØfÎxë¬AÉXŽ§3ë<­=!�‚HÇ„Ú |ØúÎÕùq)™¤«³cö6–Æ� ›(IK‹�‚‰÷ÓÏù´»ÏM7BJ‰
+ d®É†GÓà®>N·)­[-àP_š}ÁÊvƒN¨Ñqþ68?ø–€×]]+Ýž,�Bà·ëk}yþ%«;
"÷Æõð¦«³&g�»Còùík¶œpÝ‰Jƒ}…F€ÇÀÞÔÜ"ÆŽ¾¬yƒû¬ò*0L¶þìU2ç“î~Õcå{“Ôx­¸ð$†�‡À�›¯¶ˆJ”;ºhÿÿí_ì¿�[¥ZÁØnY'bIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-forward.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-forward.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-forward.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-go-forward.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,6 ----
+ ‰PNG
+ 
+ 
IHDRàw=øbKGDÿÿÿ ½§“¿IDATxÚå•=LAÇûvO@Ð�ðQÐXb¬ˆÅIO{…-¡¥¤%ÁŽÒÆÒÊÊ˜+iŒCl¡‚hr¡¸HABq�ãc=vgg,ô¸Ì,{(¡p’—™b÷ÿ{_3þÇôò±ô(n€> Ô+¨¨çÆÚˆýSˆfáíç+ÈXˆäx+cúés¯?4€ÇÀƒ<ˆxò¬�¬ËR€Pf¦žðry¥$p³Õ­:‰Ò„…×}h¶bD„v¢ø´UgýÍ<í³ãqàH¬ƒù€wk;”¢•é?aƒ1!
+ •iR•±¹{ÀûÅ
+ €â¬Aœ(´Öh­QÙ¯@D�€ßà�¾åÉ	*¯>xÓ¹_¶÷HÚ1F…ÚKkÍ³™9jÕ0j#I½€Ë‹q«Y¸¿£¶Qx1 #{9:Ä§�ÖÔUœ¨4¡}~âìö‰ŸGÀ¹ø»(Ïã³Kô
»Ä›®.rEðÈjÐÑe_=ž7}÷  �KûÃIW„pÖØ/,ž÷¶žô¥ö\¶¹Î÷¹ãYv­I»ß$Þët
+ €‡¶F©� Wœ[ŒÈZÖÙë÷:“ï|ýšpÄ_6 À€IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-mic.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-mic.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-mic.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-mic.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3 ----
+ ‰PNG
+ 
+ 
IHDRóÿabKGDùC»IDATxÚ�“]O’aÇâBÌ­Z–/ˆØˆ"¾qØ¡‡m¸¶¶V­õ
:h­ÏàQkõA‘´Ò­%£o±É2«y ¾&Ü�<÷ö$Êº·k×vßÿëwm×õ¿¡öxqHxù�ã©TZìíý››[¢T*‹l&+!7]=€H%Sb«°#¾~ÉˆõõßÂ?ñXBÜ»û@BZ´�Ú9Eáç¯
ÚÚN“LdP3s¡0«EJêÊÅ2­­§ø–Écî1ñ~)‚£ßŽÆ/%�@ƒ0Ü–—MÍz¾ç`î1‹%è·_Â?```PÛçphÐg€—@ ¸[¦ÓØN:�£Ïfáíâ2CÃÃ,,¾‘ÅkÀ Ðë€WêC;€¡¹‰ÕÕ5¥›Ï+qF¯ºÍ…p:�Ð­æ) Q§N™‹;EL¦RÉÇEÂïp_óð1•€ª&ïk‡(Ç
ä²y‹‰å¥�\a6`Ðyù�4XÍ¶Ûtv�%ù„Ý~�àl·ÛC49Ô85€ýJ…ØJkïyæÃó¸\.fÓôÚúêZX¨Û¸ˆgOŸ‹Ñ�˜˜¸#¬›ðùÆ¤'ÕéKý±ƒ=à;â3MFà¤ uèžÀ Zö°«T�ðØ^í,Ñù`<Tá-€î/vÊwæàØ¯IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-new.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-new.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-new.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-new.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,5 ----
+ ‰PNG
+ 
+ 
IHDRóÿagAMA±�üabKGDÿÿÿ ½§“	pHYsÒÝ~ütIMEÒ,"o …×ÚIDATxÚµS1
+ „0œ{_cå®ó×ÝÇ|„…">à´DlŽ±É^qDrq£6·0v3³³|#@pC ÈÃBkMÃ0PUUV$
+ ,ËÂ¢®kRJQžç;'ÂÀº®¬½¢(Ð¶-æyÆ8Ž(ËrãJœ!IÄqŒ÷û…®ë~ê;Æ˜ ô}�4M7nä^rÉ–à×ý|ä8’ï"(À]°g7ç�¸Ak}êâÐ�”’íÌåX¡W¸¼!Äaçÿ-±i(¥Ngž¦	žþx�‹ßÙân‰]�Dë~IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-open.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-open.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-open.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-open.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3 ----
+ ‰PNG
+ 
+ 
IHDRóÿabKGDùC»uIDATxÚÍ“K/Q†ŸN§*‘JØ°°¿Ã ]‹X�ÂB„�„Dbo#±‰Äå7°d…Ä%.ÑfhE‡hFUµ:sÚÎXÐq«bçK¾œ““¼Ïyó½çÀª à|êàŸÄ1=â„•G9Ùv–—çñ¼®Næ)ÉìÜ>ŸÛvðWúQÂ*3Ó‹¥t!`õ n¨,,,!ûl¼^!rT˜–…ß_�e	›x¸OÑÕ9èjå"2PÕ@Á6ÑN®Ðõ$ÉÃc*ƒ$I/V=P°ò¹<-­Íž9××ñ�Øßß¢�/°¾¶Åîî6FâK¤Éš_ü‘ãðà”�ÞÉùý4T5JOO7Fâ‚dJÿvpÑˆÎ}"	€T<<=ÓØÜØ£¿¿K¤ËF–ÍšŒ�N„\Àeô’‘á!Ò£¤í÷¥Çn‹ÛUPW_K{Gñ;µ¬8|¬11>SŒò-…Èy!LdO
q#ZR|®]¡(š{ûOÏ¸\ÿÏ|Ò›´ŸÝ»E‹IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-paste.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-paste.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-paste.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-paste.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,6 ----
+ ‰PNG
+ 
+ 
IHDRóÿagAMA±�üabKGDÿÿÿ ½§“	pHYsd_‘tIMEÒ."ŽNÙ°IDATxÚ•“¿K[QÇ?/>‘
+ �@A^LSG!2ä?¨¦,fˆºø)Hæv2
ˆK1C¦nÝ$Ð1‹C¦Bû	
+ U4�•6/?$·ƒ}ùQ_›ø…3œ{ï9|î÷ž+á¬ï€pO e@ôF*•¥RIÄb1ñ÷ÞŸóI€¸¹>£Õø‰äáÅL„ÅÅNOÏ©Y†qÈÊÒ+¦ž?ã×í%o7>ØuÈMë–ã/û¼I|$ß žàà À¤ª’Íæˆ­ÍS½ª>À—$—€×«/I&ß�¿c||ŒZ­�¢<an6„:á¦òãa	³Èñç=T_�Í­$é\�!´"´Ûm¾~» �+ „X-IRZî]ðOûP}ÁNžÏç1M�Çƒ¦id2,Ë"
+ ºÜ¿N—À–¦i}y4u6Ñnð?¯×K¹\Æ4Mt]ïo`_÷ü¢ý“ÀÆv ¸×”oÂ‘èóÁï÷÷{0::6�“2À]ËêôªX,bº®w^AQ"‘Hw�¶·Ö©˜'Xõ:Íz“�ÝOÃÎ�óo|D,ÿŠ¾.Îñ3IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-quit.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-quit.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-quit.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-quit.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,5 ----
+ ‰PNG
+ 
+ 
IHDRóÿabKGDÿÿÿ ½§“°IDATxÚ¥“OKAÆ™ÙÌî&jÅžz
+ öP°-ŠP	"”BOÏÅ`�ÅSñæ'¼å HA±b¡ŒàÍKkÄKac¤5ŽfK’�‡%6kx/ïÌó<ó¼ Ëê�o<otºqœ®[Bk�Öç
+ 'ÌÌ|j{g<D9‰`Yæ½Bânâxz€Z­æÿ1B�e)LÛ4ZÙÿ„�oˆÇ©×ëmŠ–­°l´ÐT¨ëS†.r¬¿M"1ÌööŠÅâ‚¨…”÷¼¬Áþ·½`yÃeGŸ311Éììg'€i›H)Úkð÷ô*G…}Ê÷]©TH&“~A{l"½ö¿O°E†¤pV >>ÄT&K&“æúúùü±P¥ÂA‚‘ÝÃÛÄ|8›ý‰Ö:Øg¯�ÑJðqîí­�Ô—ï^ì89Êe€jµŠë–�a‰2�ŽƒÄT&€çy\^^ñëà€ôNšµÕu^&_ë�a¶´1°†’êé³�jîð�·µµÉò×%–R+Œ½{Eìq/ÊR†$$«þœu»LÝn37ù8–k�ƒMtIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-save-as.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-save-as.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-save-as.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-save-as.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,4 ----
+ ‰PNG
+ 
+ 
IHDRóÿagAMA±�üabKGDÿÿÿ ½§“	pHYsÒÝ~ütIMEÒ6n–(lIDATxÚ�“OH“qÇ?ïö:g.)çæœ
+ ¹9%¢‹!1É‹ûs‚è\Ðaý9Q§ áÁ	#‚6HÌ†QFtÈ%&š0qþm9Ûït{÷î}×a2g£=ð;üày>Ïç{xº€ì¾�M¦Ò|ûG}ÙKY‰HaišÆqÏmž?r0êOñdd…�·ãTÛëèh±!„7’|Ÿ¦YÕÈÆÂ�Íæ†³YNz“‰¹Q¥¼3F�¬ä	9@Ã™ó8�ÎüfQ‘ÛPF®û6x:8…ßïgr]`~nÔìì,Á`QIO°=SÅ¥¾U>§»»·Û�š–IgÔ]ƒÂr8èõz¶§ZÙ/å²o��×3ø|>\.W¾/»³È °jçÚpœ�á<µµµÌÏÏçã	‚Pl`µZ1›Íœî°à:÷¯×Kgg'6›
‡Ã�¢(èt»{÷F'x5ãê�[´=FcS3ë)X_Š¡iá_›{Œ÷£qîô±	SYm'’„È×\¤Œª¢^÷wÀ‘FÚê¨¨¨Àn·#IŸÇÆèyñ†³§Zªçû÷àdYæPÍ~L&oÞçÊÝ‰ñxœúº:Â‘U‚‘Ör]1@VÔ´€ÑhÄj>ˆÓÙÄæf.³Á`@Sdtz†o@_/9…¦il6’´EIY)ªª"Iˆ%EÚz@üòi´Ýf±ð=ò“ª}ªªÒ`1Qc	…B¢Ñ(k«(J’Êò2FÞ@Z[Êƒîíœç4úÇù.Ëÿ®ß~«÷Ûöù%IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-save.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-save.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-save.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-save.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,5 ----
+ ‰PNG
+ 
+ 
IHDRóÿabKGDùC»ÐIDATxÚ�“OkA‡ŸÝü1Kzˆiì6$K‹—ˆæì¹‚Ð«"9x<ùÄoàM
+ ¼‹¯Š 5­‹ -Å` µÄ$$!KÜÕÝÍdv<Db’&9øƒ9Ãóðãe^€m@ýç)i€òüG?úÈ—;±(s£�]×éÞ¼À�këDê¶ÇÞÁ!WeˆêÔA©Zš®K¥ù|tÌÇò.ÀHàC6oÝ¥P(°,B^?‹Á?ÁdªÕêBX)E.—CC9_0Û C|ßÇó¼¹Ò¥
¤”ôûý©÷b±¸X`š&©T
+ ×u	‚Ó4§)åbAùË	y3�þp8·òY§·XpÒîó­ióÛý‰>J¥P¡"Ñ”Rl$5¬�QmÃ0°,‹n·Ë‡ý}ž¼xÃí­ëh™ËcfJçû>V&À��¸ÿð1�N‡^¯‡•ÏSo6øÚtYKêç�ÈÁès$	ÖV/R(\Á¶mâñ8¡Ð#:ñ‰Þ:À³§;Sp6›Åq~3.Œ'ï8DcçjG€ãOïß•Ö3Î-V�°yi…ìJ”Z­F¥R¡ÝnÓjØá‘N¼Ú-ã´NÇ¢Òß�9jKÖ÷ø>qßþòmÚ°[Æ`¦IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-spell-check.png gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-spell-check.png
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/icons/stock-spell-check.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/icons/stock-spell-check.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,5 ----
+ ‰PNG
+ 
+ 
IHDRóÿagAMA±�üabKGDÿÿÿ ½§“	pHYs‡‡“@‡StIMEÒñ¬Ò×óIDATxÚc` pb``ø�„C âÿÑ°.`
+ �ùøÄQ!HâÎ„`Äa²8#>ÈrÁ}'9†�¿ÿVð³2ÿÿõï1#Ã—?ÿJyX˜Þÿþ[)ÈÊÜþú×ßjQ6æ½Šû1¢\Êòú×_qQ6æ—_ÿüãfazõõÏ?1¦W0qdydÍÑ#–æ/ïÆ+J¸¼=1¦F
+ «‚®]¸ÔÌÀÀÀP(¬#ü¿|YºKˆÒ·iÅéeÿsçæÀS"’f%b’wÃÿ×vü�žI’Í(®˜tîÿÉû&‘d3†+È±™$2M�&Ì£IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.c gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.c
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.c	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.c	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,150 ----
+ /* DemoJAWT.c -- native portion of AWT Native Interface demo
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA. */
+ 
+ #include "DemoJAWT.h"
+ #include "jawt_md.h"
+ #include <string.h>
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_classpath_examples_jawt_DemoJAWT_paintIt (JNIEnv* env,
+ 						   jobject canvas,
+ 						   jobject graphics,
+ 						   jboolean on)
+ {
+   JAWT awt;
+   JAWT_DrawingSurface* surface;
+   JAWT_DrawingSurfaceInfo* surface_info;
+   JAWT_X11DrawingSurfaceInfo* surface_info_x11;
+   jint lock;
+   GC gc;
+   int c;
+   char* test_string = "JAWT";
+   XColor orange;
+   XColor yellow;
+   XColor blue;
+   Display* display;
+   Drawable drawable;
+   Status status;
+ 
+   awt.version = JAWT_VERSION_1_3;
+   if (JAWT_GetAWT (env, &awt) == JNI_FALSE)
+     {
+       printf ("couldn't find AWT\n");
+       return;
+     }
+ 
+   surface = awt.GetDrawingSurface (env, canvas);
+   if (surface == NULL)
+     {
+       printf ("drawing surface is NULL\n");
+       return;
+     }
+ 
+   lock = surface->Lock (surface);
+   if ((lock & JAWT_LOCK_ERROR) != 0)
+     {
+       printf ("couldn't lock drawing surface\n");
+       awt.FreeDrawingSurface (surface);
+       return;
+     }
+ 
+   surface_info = surface->GetDrawingSurfaceInfo (surface);
+   if (surface_info == NULL)
+     {
+       printf ("couldn't get surface information\n");
+       surface->Unlock (surface);
+       awt.FreeDrawingSurface (surface);
+       return;
+     }
+ 
+   surface_info_x11 = (JAWT_X11DrawingSurfaceInfo*) surface_info->platformInfo;
+ 
+   display = surface_info_x11->display;
+   drawable = surface_info_x11->drawable;
+ 
+   gc = XCreateGC (display, drawable, 0, 0);
+   XSetBackground (display, gc, 0);
+ 
+   orange.red = 254 * 65535 / 255;
+   orange.green = 90 * 65535 / 255;
+   orange.blue = 16 * 65535 / 255;
+ 
+   /* assume color lookups succeed */
+   status = XAllocColor (display, DefaultColormap (display,
+ 						  DefaultScreen (display)),
+ 			&orange);
+ 
+   if (!status)
+     {
+       printf ("color allocation failed\n");
+       goto cleanup;
+     }
+ 
+   yellow.red = 255 * 65535 / 255;
+   yellow.green = 255 * 65535 / 255;
+   yellow.blue = 0 * 65535 / 255;
+ 
+   XAllocColor (display, DefaultColormap (display,
+ 					 DefaultScreen (display)),
+ 	       &yellow);
+ 
+   if (!status)
+     {
+       printf ("color allocation failed\n");
+       goto cleanup;
+     }
+ 
+   blue.red = 16 * 65535 / 255;
+   blue.green = 30 * 65535 / 255;
+   blue.blue = 137 * 65535 / 255;
+ 
+   XAllocColor (display, DefaultColormap (display,
+ 					 DefaultScreen (display)),
+ 		&blue);
+ 
+   if (!status)
+     {
+       printf ("color allocation failed\n");
+       goto cleanup;
+     }
+ 
+   for (c = 5; c >= 0; c--)
+     {
+       if (c % 2 == on)
+ 	XSetForeground (display, gc, yellow.pixel);
+       else
+ 	XSetForeground (display, gc, orange.pixel);
+ 
+       XFillArc (display, drawable, gc, 140 - c * 15, 140 - c * 15, c * 30, c * 30, 0, 360 * 64);
+     }
+ 
+   XSetForeground (display, gc, blue.pixel);
+   XDrawString (display, drawable,
+ 	       gc, 129, 145, test_string, strlen (test_string));
+ 
+  cleanup:
+   XFreeGC (display, gc);
+ 
+   surface->FreeDrawingSurfaceInfo (surface_info);
+ 
+   surface->Unlock (surface);
+ 
+   awt.FreeDrawingSurface (surface);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,77 ----
+ /* DemoJAWT.java -- AWT Native Interface demo
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA. */
+ 
+ package gnu.classpath.examples.jawt;
+ 
+ import java.awt.*;
+ import java.awt.event.*;
+ 
+ public class DemoJAWT extends Canvas
+ {
+   static
+   {
+     System.loadLibrary ("DemoJAWT");
+   }
+ 
+   public native void paintIt (Graphics g, boolean on);
+ 
+   public void paint (Graphics g)
+   {
+     paintIt (g, on);
+   }
+ 
+   private boolean on;
+ 
+   public static void main (String[] args)
+   {
+     Frame f = new Frame ("GNU Classpath JAWT Demo");
+ 
+     f.setBounds (0, 0, 300, 300);
+ 
+     f.setResizable (false);
+ 
+     DemoJAWT jawtDemo = new DemoJAWT ();
+     f.add (jawtDemo);
+ 
+     f.addWindowListener (new WindowAdapter ()
+       {
+ 	public void windowClosing (WindowEvent evt)
+ 	{
+ 	  System.exit (0);
+ 	}
+       });
+ 
+     f.show ();
+ 
+     while (true)
+     {
+       try
+ 	{
+ 	  Thread.sleep (500);
+ 	}
+       catch (InterruptedException ie)
+ 	{
+ 	  // ignored
+ 	}
+       jawtDemo.on = ! jawtDemo.on;
+       f.repaint();
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/midi/Demo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/midi/Demo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/midi/Demo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/midi/Demo.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,137 ----
+ /* Demo.java -- And example of MIDI support
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA. */
+ 
+ package gnu.classpath.examples.midi;
+ 
+ import java.awt.*;
+ import java.awt.event.*;
+ import java.util.*;
+ import javax.sound.midi.*;
+ 
+ /**
+  * An example how javax.sound.midi facilities work.
+  */
+ public class Demo extends Frame implements ItemListener
+ {
+   Choice midiInChoice = new Choice();
+   Choice midiOutChoice = new Choice();
+ 
+   MidiDevice inDevice = null;
+   MidiDevice outDevice = null;
+   
+   ArrayList inDevices = new ArrayList();
+   ArrayList outDevices = new ArrayList();
+ 
+   public Demo () throws Exception
+   {
+     MenuBar mb = new MenuBar ();
+     Menu menu = new Menu ("File");
+     MenuItem quit = new MenuItem("Quit", new MenuShortcut('Q'));
+     quit.addActionListener(new ActionListener()
+       {
+ 	public void actionPerformed(ActionEvent e)
+ 	{
+ 	  System.exit(0);
+ 	}
+       });
+     menu.add (quit);
+     mb.add(menu);
+     
+     setTitle("synthcity: the GNU Classpath MIDI Demo");
+     setLayout(new FlowLayout());
+     
+     MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
+ 
+     for (int i = 0; i < infos.length; i++)
+       {
+ 	MidiDevice device = MidiSystem.getMidiDevice(infos[i]);
+ 	if (device.getMaxReceivers() > 0)
+ 	  {
+ 	    midiOutChoice.addItem(infos[i].getDescription());
+ 	    outDevices.add(device);
+ 	  }
+ 	if (device.getMaxTransmitters() > 0)
+ 	  {
+ 	    midiInChoice.addItem(infos[i].getDescription());
+ 	    inDevices.add(device);
+ 	  }
+       }
+ 
+     setMenuBar (mb);
+     add(new Label("MIDI IN: "));
+     add(midiInChoice);
+     add(new Label("   MIDI OUT: "));
+     add(midiOutChoice);
+ 
+     midiInChoice.addItemListener(this);
+     midiOutChoice.addItemListener(this);
+ 
+     pack();
+     show();
+   }
+   
+   public void itemStateChanged (ItemEvent e)
+   {
+     try
+       {
+ 	if (e.getItemSelectable() == midiInChoice)
+ 	  {
+ 	    if (inDevice != null)
+ 	      inDevice.close();
+ 	    inDevice =  (MidiDevice) 
+ 	      inDevices.get(midiInChoice.getSelectedIndex());
+ 	  }
+ 	
+ 	if (e.getItemSelectable() == midiOutChoice)
+ 	  {
+ 	    if (outDevice != null)
+ 	      outDevice.close();
+ 	    outDevice = (MidiDevice)
+ 	      outDevices.get(midiOutChoice.getSelectedIndex());
+ 	  }
+ 	
+ 	if (inDevice != null && outDevice != null)
+ 	  {
+ 	    if (! inDevice.isOpen())
+ 	      inDevice.open();
+ 	    if (! outDevice.isOpen())
+ 	      outDevice.open();
+ 	    Transmitter t = inDevice.getTransmitter();
+ 	    if (t == null)
+ 	      System.err.println (inDevice + ".getTransmitter() == null");
+ 	    Receiver r = outDevice.getReceiver();
+ 	    if (r == null)
+ 	      System.err.println (outDevice + ".getReceiver() == null");
+ 	    
+ 	    if (t != null && r != null)
+ 	      t.setReceiver (r);
+ 	  }
+       }
+     catch (Exception ex)
+       {
+ 	ex.printStackTrace();
+       }
+   }
+ 
+   public static void main (String args[]) throws Exception
+     {
+       new Demo();
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,284 ----
+ /* ButtonDemo.java -- An example showing various buttons in Swing.
+    Copyright (C) 2005,  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ */
+ 
+ 
+ package gnu.classpath.examples.swing;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.GridLayout;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ 
+ import javax.swing.BorderFactory;
+ import javax.swing.ButtonGroup;
+ import javax.swing.JButton;
+ import javax.swing.JCheckBox;
+ import javax.swing.JFrame;
+ import javax.swing.JPanel;
+ import javax.swing.JRadioButton;
+ import javax.swing.JToggleButton;
+ import javax.swing.SwingConstants;
+ import javax.swing.plaf.metal.MetalIconFactory;
+ 
+ /**
+  * A simple button demo showing various buttons in different states.
+  */
+ public class ButtonDemo 
+   extends JFrame 
+   implements ActionListener 
+ {
+  
+   private JCheckBox buttonState;  
+   private JButton button1;
+   private JButton button2;
+   private JButton button3;
+   private JButton button4;
+ 
+   private JCheckBox toggleState;    
+   private JToggleButton toggle1;
+   private JToggleButton toggle2;
+   private JToggleButton toggle3;
+   private JToggleButton toggle4;
+     
+   private JCheckBox checkBoxState;
+   private JCheckBox checkBox1;
+   private JCheckBox checkBox2;
+   private JCheckBox checkBox3;
+ 
+   private JCheckBox radioState;
+   private JRadioButton radio1;
+   private JRadioButton radio2;
+   private JRadioButton radio3;
+ 
+   /**
+    * Creates a new demo instance.
+    * 
+    * @param title  the frame title.
+    */
+   public ButtonDemo(String title) 
+   {
+     super(title);
+     JPanel content = createContent();
+     JPanel closePanel = new JPanel();
+     JButton closeButton = new JButton("Close");
+     closeButton.setActionCommand("CLOSE");
+     closeButton.addActionListener(this);
+     closePanel.add(closeButton);
+     content.add(closePanel, BorderLayout.SOUTH);
+     getContentPane().add(content);
+   }
+ 
+   /**
+    * Returns a panel with the demo content.  The panel
+    * uses a BorderLayout(), and the BorderLayout.SOUTH area
+    * is empty, to allow callers to add controls to the 
+    * bottom of the panel if they want to (a close button is
+    * added if this demo is being run as a standalone demo).
+    */       
+   JPanel createContent() 
+   {
+     JPanel content = new JPanel(new BorderLayout());
+     JPanel panel = new JPanel(new GridLayout(4, 1));
+     panel.add(createButtonPanel());
+     panel.add(createTogglePanel());
+     panel.add(createCheckBoxPanel());
+     panel.add(createRadioPanel());
+     content.add(panel);
+     return content;        
+   }
+     
+   private JPanel createButtonPanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     this.buttonState = new JCheckBox("Enabled", true);
+     this.buttonState.setActionCommand("BUTTON_STATE");
+     this.buttonState.addActionListener(this);
+     panel.add(this.buttonState, BorderLayout.EAST);
+         
+     JPanel buttonPanel = new JPanel();
+     buttonPanel.setBorder(BorderFactory.createTitledBorder("JButton"));
+     this.button1 = new JButton("Button 1");
+         
+     this.button2 = new JButton("Button 2");
+     this.button2.setIcon(MetalIconFactory.getInternalFrameDefaultMenuIcon());
+         
+     this.button3 = new JButton("Button 3");
+     this.button3.setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
+     this.button3.setHorizontalTextPosition(SwingConstants.CENTER);
+     this.button3.setVerticalTextPosition(SwingConstants.BOTTOM);
+         
+     this.button4 = new JButton("Button 4");
+     this.button4.setIcon(MetalIconFactory.getFileChooserUpFolderIcon());
+     this.button4.setText(null);
+         
+     buttonPanel.add(button1);
+     buttonPanel.add(button2);
+     buttonPanel.add(button3);
+     buttonPanel.add(button4);
+         
+     panel.add(buttonPanel);
+      
+     return panel;
+   }
+     
+   private JPanel createTogglePanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+        
+     this.toggleState = new JCheckBox("Enabled", true);
+     this.toggleState.setActionCommand("TOGGLE_STATE");
+     this.toggleState.addActionListener(this);
+         
+     panel.add(this.toggleState, BorderLayout.EAST);
+         
+     JPanel buttonPanel = new JPanel();
+     buttonPanel.setBorder(BorderFactory.createTitledBorder("JToggleButton"));
+         
+     this.toggle1 = new JToggleButton("Toggle 1");
+         
+     this.toggle2 = new JToggleButton("Toggle 2");
+     this.toggle2.setIcon(MetalIconFactory.getInternalFrameDefaultMenuIcon());
+         
+     this.toggle3 = new JToggleButton("Toggle 3");
+     this.toggle3.setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
+     this.toggle3.setHorizontalTextPosition(SwingConstants.CENTER);
+     this.toggle3.setVerticalTextPosition(SwingConstants.BOTTOM);
+         
+     this.toggle4 = new JToggleButton("Toggle 4");
+     this.toggle4.setIcon(MetalIconFactory.getFileChooserUpFolderIcon());
+     this.toggle4.setText(null);
+ 
+     ButtonGroup toggleGroup = new ButtonGroup();
+     toggleGroup.add(toggle1);
+     toggleGroup.add(toggle2);
+     toggleGroup.add(toggle3);
+     toggleGroup.add(toggle4);
+         
+     buttonPanel.add(toggle1);
+     buttonPanel.add(toggle2);
+     buttonPanel.add(toggle3);
+     buttonPanel.add(toggle4);
+         
+     panel.add(buttonPanel);
+       
+     return panel;
+   }
+ 
+   private JPanel createCheckBoxPanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+       
+     this.checkBoxState = new JCheckBox("Enabled", true);
+     this.checkBoxState.setActionCommand("CHECKBOX_STATE");
+     this.checkBoxState.addActionListener(this);
+         
+     panel.add(this.checkBoxState, BorderLayout.EAST);
+         
+     JPanel buttonPanel = new JPanel();
+     buttonPanel.setBorder(BorderFactory.createTitledBorder("JCheckBox"));
+     this.checkBox1 = new JCheckBox("CheckBox 1");
+         
+     this.checkBox2 = new JCheckBox("CheckBox 2");
+        
+     this.checkBox3 = new JCheckBox("CheckBox 3");
+                 
+     buttonPanel.add(checkBox1);
+     buttonPanel.add(checkBox2);
+     buttonPanel.add(checkBox3);
+         
+     panel.add(buttonPanel);
+         
+     return panel;
+   }
+ 
+   private JPanel createRadioPanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+         
+     this.radioState = new JCheckBox("Enabled", true);
+     this.radioState.setActionCommand("RADIO_STATE");
+     this.radioState.addActionListener(this);
+     panel.add(this.radioState, BorderLayout.EAST);
+         
+     JPanel buttonPanel = new JPanel();
+     buttonPanel.setBorder(BorderFactory.createTitledBorder("JRadioButton"));
+     this.radio1 = new JRadioButton("Radio 1");
+         
+     this.radio2 = new JRadioButton("Radio 2");
+         
+     this.radio3 = new JRadioButton("Radio 3");
+         
+     ButtonGroup radioGroup = new ButtonGroup();
+     radioGroup.add(radio1);
+     radioGroup.add(radio2);
+     radioGroup.add(radio3);
+         
+     buttonPanel.add(radio1);
+     buttonPanel.add(radio2);
+     buttonPanel.add(radio3);
+         
+     panel.add(buttonPanel);
+        
+     return panel;
+   }
+     
+   public void actionPerformed(ActionEvent e) 
+   {
+     if (e.getActionCommand().equals("BUTTON_STATE")) 
+     {
+       button1.setEnabled(buttonState.isSelected());
+       button2.setEnabled(buttonState.isSelected());
+       button3.setEnabled(buttonState.isSelected());
+       button4.setEnabled(buttonState.isSelected());
+     }
+     else if (e.getActionCommand().equals("TOGGLE_STATE")) 
+     {
+       toggle1.setEnabled(toggleState.isSelected());
+       toggle2.setEnabled(toggleState.isSelected());
+       toggle3.setEnabled(toggleState.isSelected());
+       toggle4.setEnabled(toggleState.isSelected());
+     }
+     else if (e.getActionCommand().equals("CHECKBOX_STATE")) 
+     {
+       checkBox1.setEnabled(checkBoxState.isSelected());
+       checkBox2.setEnabled(checkBoxState.isSelected());
+       checkBox3.setEnabled(checkBoxState.isSelected());
+     }
+     else if (e.getActionCommand().equals("RADIO_STATE")) 
+     {
+       radio1.setEnabled(radioState.isSelected());
+       radio2.setEnabled(radioState.isSelected());
+       radio3.setEnabled(radioState.isSelected());
+     }
+     else if (e.getActionCommand().equals("CLOSE"))
+     {
+       System.exit(0);
+     }
+   }
+ 
+   public static void main(String[] args) 
+   {
+     ButtonDemo app = new ButtonDemo("Button Demo");
+     app.pack();
+     app.setVisible(true);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,19 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <launchConfiguration type="org.eclipse.cdt.launch.localCLaunch">
+ <stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="org.eclipse.cdt.debug.mi.core.CDebugger"/>
+ <stringAttribute key="org.eclipse.cdt.launch.protocol" value="mi"/>
+ <booleanAttribute key="org.eclipse.cdt.debug.mi.core.STOP_ON_SOLIB_EVENTS" value="false"/>
+ <stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/>
+ <listAttribute key="org.eclipse.cdt.debug.mi.core.SOLIB_PATH"/>
+ <booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+ <booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
+ <booleanAttribute key="org.eclipse.cdt.debug.mi.core.AUTO_SOLIB" value="true"/>
+ <booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
+ <booleanAttribute key="org.eclipse.cdt.launch.use_terminal" value="true"/>
+ <stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="jamvm"/>
+ <booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
+ <stringAttribute key="org.eclipse.cdt.debug.mi.core.DEBUG_NAME" value="gdb"/>
+ <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="src/jamvm"/>
+ <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_ARGUMENTS" value="-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel gnu.classpath.examples.swing.Demo"/>
+ <stringAttribute key="org.eclipse.cdt.debug.mi.core.GDB_INIT" value=""/>
+ </launchConfiguration>
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,360 ----
+ /* ComboBoxDemo.java -- An example showing various combo boxes in Swing.
+    Copyright (C) 2005,  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ */
+ 
+ 
+ package gnu.classpath.examples.swing;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.GridLayout;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ 
+ import javax.swing.BorderFactory;
+ import javax.swing.DefaultListCellRenderer;
+ import javax.swing.Icon;
+ import javax.swing.JButton;
+ import javax.swing.JCheckBox;
+ import javax.swing.JComboBox;
+ import javax.swing.JFrame;
+ import javax.swing.JList;
+ import javax.swing.JPanel;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.metal.MetalIconFactory;
+ 
+ /**
+  * A simple demo showing various combo boxes in different states.
+  */
+ public class ComboBoxDemo 
+   extends JFrame 
+   implements ActionListener 
+ {
+  
+   class CustomCellRenderer extends DefaultListCellRenderer
+   {
+     public Component getListCellRendererComponent(JList list,
+                                               Object value,
+                                               int index,
+                                               boolean isSelected,
+                                               boolean cellHasFocus)
+     {
+       DefaultListCellRenderer result = (DefaultListCellRenderer) 
+           super.getListCellRendererComponent(list, value, index, isSelected, 
+ 	  cellHasFocus);
+       Icon icon = (Icon) value;
+       result.setIcon(icon);
+       result.setText("Index = " + index);
+       return result;
+     }
+   }
+ 
+   private JCheckBox comboState1;  
+   private JComboBox combo1;
+   private JComboBox combo2;
+ 
+   private JCheckBox comboState2;    
+   private JComboBox combo3;
+   private JComboBox combo4;
+     
+   private JCheckBox comboState3;    
+   private JComboBox combo5;
+   private JComboBox combo6;
+ 
+   private JCheckBox comboState4;    
+   private JComboBox combo7;
+   private JComboBox combo8;
+ 
+   private JCheckBox comboState5;    
+   private JComboBox combo9;
+   private JComboBox combo10;
+   
+   private JCheckBox comboState6;
+   private JComboBox combo11;
+   private JComboBox combo12;
+   
+   /**
+    * Creates a new demo instance.
+    * 
+    * @param title  the frame title.
+    */
+   public ComboBoxDemo(String title) 
+   {
+     super(title);
+     JPanel content = createContent();
+     JPanel closePanel = new JPanel();
+     JButton closeButton = new JButton("Close");
+     closeButton.setActionCommand("CLOSE");
+     closeButton.addActionListener(this);
+     closePanel.add(closeButton);
+     content.add(closePanel, BorderLayout.SOUTH);
+     getContentPane().add(content);
+   }
+        
+   /**
+    * Returns a panel with the demo content.  The panel
+    * uses a BorderLayout(), and the BorderLayout.SOUTH area
+    * is empty, to allow callers to add controls to the 
+    * bottom of the panel if they want to (a close button is
+    * added if this demo is being run as a standalone demo).
+    */       
+   JPanel createContent() 
+   {
+     JPanel content = new JPanel(new BorderLayout());
+     JPanel panel = new JPanel(new GridLayout(6, 1));
+     panel.add(createPanel1());
+     panel.add(createPanel2());
+     panel.add(createPanel3());
+     panel.add(createPanel4());
+     panel.add(createPanel5());
+     panel.add(createPanel6());
+     content.add(panel);
+     return content;        
+   }
+     
+   private JPanel createPanel1() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     this.comboState1 = new JCheckBox("Enabled", true);
+     this.comboState1.setActionCommand("COMBO_STATE1");
+     this.comboState1.addActionListener(this);
+     panel.add(this.comboState1, BorderLayout.EAST);
+         
+     JPanel controlPanel = new JPanel();
+     controlPanel.setBorder(BorderFactory.createTitledBorder("Regular: "));
+     this.combo1 = new JComboBox(new Object[] {"Australia", "New Zealand", 
+             "England"});
+         
+     this.combo2 = new JComboBox(new Object[] {"Australia", "New Zealand", 
+             "England"});
+     this.combo2.setEditable(true);
+         
+     controlPanel.add(combo1);
+     controlPanel.add(combo2);
+         
+     panel.add(controlPanel);
+      
+     return panel;
+   }
+     
+   private JPanel createPanel2() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     this.comboState2 = new JCheckBox("Enabled", true);
+     this.comboState2.setActionCommand("COMBO_STATE2");
+     this.comboState2.addActionListener(this);
+     panel.add(this.comboState2, BorderLayout.EAST);
+         
+     JPanel controlPanel = new JPanel();
+     controlPanel.setBorder(BorderFactory.createTitledBorder("Large Font: "));
+     this.combo3 = new JComboBox(new Object[] {"Australia", "New Zealand", 
+             "England"});
+     this.combo3.setFont(new Font("Dialog", Font.PLAIN, 20));
+         
+     this.combo4 = new JComboBox(new Object[] {"Australia", "New Zealand", 
+             "England"});
+     this.combo4.setEditable(true);
+     this.combo4.setFont(new Font("Dialog", Font.PLAIN, 20));
+         
+     controlPanel.add(combo3);
+     controlPanel.add(combo4);
+         
+     panel.add(controlPanel);
+      
+     return panel;
+   }
+ 
+   private JPanel createPanel3() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     this.comboState3 = new JCheckBox("Enabled", true);
+     this.comboState3.setActionCommand("COMBO_STATE3");
+     this.comboState3.addActionListener(this);
+     panel.add(this.comboState3, BorderLayout.EAST);
+         
+     JPanel controlPanel = new JPanel();
+     controlPanel.setBorder(BorderFactory.createTitledBorder("Colored Background: "));
+     this.combo5 = new JComboBox(new Object[] {"Australia", "New Zealand", 
+             "England"});
+     this.combo5.setBackground(Color.yellow);
+     
+     this.combo6 = new JComboBox(new Object[] {"Australia", "New Zealand", 
+             "England"});
+     this.combo6.setEditable(true);
+     this.combo6.setBackground(Color.yellow);
+         
+     controlPanel.add(combo5);
+     controlPanel.add(combo6);
+         
+     panel.add(controlPanel);
+      
+     return panel;
+   }
+     
+   /**
+    * This panel contains combo boxes that are empty.
+    * 
+    * @return A panel.
+    */
+   private JPanel createPanel4() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     this.comboState4 = new JCheckBox("Enabled", true);
+     this.comboState4.setActionCommand("COMBO_STATE4");
+     this.comboState4.addActionListener(this);
+     panel.add(this.comboState4, BorderLayout.EAST);
+         
+     JPanel controlPanel = new JPanel();
+     controlPanel.setBorder(BorderFactory.createTitledBorder("Empty: "));
+     this.combo7 = new JComboBox();
+     this.combo8 = new JComboBox();
+     this.combo8.setEditable(true);
+         
+     controlPanel.add(combo7);
+     controlPanel.add(combo8);
+         
+     panel.add(controlPanel);
+      
+     return panel;
+   }
+     
+   /**
+    * This panel contains combo boxes that are narrow but contain long text 
+    * items.
+    * 
+    * @return A panel.
+    */
+   private JPanel createPanel5() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     this.comboState5 = new JCheckBox("Enabled", true);
+     this.comboState5.setActionCommand("COMBO_STATE5");
+     this.comboState5.addActionListener(this);
+     panel.add(this.comboState5, BorderLayout.EAST);
+         
+     JPanel controlPanel = new JPanel();
+     controlPanel.setBorder(BorderFactory.createTitledBorder("Narrow: "));
+     this.combo9 = new JComboBox(new Object[] {
+             "A really long item that will be truncated when displayed"});
+     this.combo9.setPreferredSize(new Dimension(100, 30));
+     this.combo10 = new JComboBox(new Object[] {
+             "A really long item that will be truncated when displayed"});
+     this.combo10.setPreferredSize(new Dimension(100, 30));
+     this.combo10.setEditable(true);
+         
+     controlPanel.add(combo9);
+     controlPanel.add(combo10);
+         
+     panel.add(controlPanel);
+      
+     return panel;
+   }
+ 
+   /**
+    * This panel contains combo boxes with a custom renderer.
+    * 
+    * @return A panel.
+    */
+   private JPanel createPanel6() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     this.comboState6 = new JCheckBox("Enabled", true);
+     this.comboState6.setActionCommand("COMBO_STATE6");
+     this.comboState6.addActionListener(this);
+     panel.add(this.comboState6, BorderLayout.EAST);
+         
+     JPanel controlPanel = new JPanel();
+     controlPanel.setBorder(BorderFactory.createTitledBorder("Custom Renderer: "));
+     this.combo11 = new JComboBox(new Object[] {
+             MetalIconFactory.getFileChooserHomeFolderIcon(),
+             MetalIconFactory.getFileChooserNewFolderIcon()});
+     this.combo11.setPreferredSize(new Dimension(100, 30));
+     this.combo11.setRenderer(new CustomCellRenderer());
+     this.combo12 = new JComboBox(new Object[] {
+             MetalIconFactory.getFileChooserHomeFolderIcon(),
+             MetalIconFactory.getFileChooserNewFolderIcon()});
+     this.combo12.setPreferredSize(new Dimension(100, 30));
+     this.combo12.setRenderer(new CustomCellRenderer());
+     this.combo12.setEditable(true);
+         
+     controlPanel.add(combo11);
+     controlPanel.add(combo12);
+         
+     panel.add(controlPanel);
+      
+     return panel;
+   }
+ 
+   public void actionPerformed(ActionEvent e) 
+   {
+     if (e.getActionCommand().equals("COMBO_STATE1")) 
+     {
+       combo1.setEnabled(comboState1.isSelected());
+       combo2.setEnabled(comboState1.isSelected());
+     }
+     else if (e.getActionCommand().equals("COMBO_STATE2")) 
+     {
+       combo3.setEnabled(comboState2.isSelected());
+       combo4.setEnabled(comboState2.isSelected());
+     }
+     else if (e.getActionCommand().equals("COMBO_STATE3")) 
+     {
+       combo5.setEnabled(comboState3.isSelected());
+       combo6.setEnabled(comboState3.isSelected());
+     }
+     else if (e.getActionCommand().equals("COMBO_STATE4")) 
+     {
+       combo7.setEnabled(comboState4.isSelected());
+       combo8.setEnabled(comboState4.isSelected());
+     }
+     else if (e.getActionCommand().equals("COMBO_STATE5")) 
+     {
+       combo9.setEnabled(comboState5.isSelected());
+       combo10.setEnabled(comboState5.isSelected());
+     }
+     else if (e.getActionCommand().equals("COMBO_STATE6")) 
+     {
+       combo11.setEnabled(comboState6.isSelected());
+       combo12.setEnabled(comboState6.isSelected());
+     }
+     else if (e.getActionCommand().equals("CLOSE"))
+     {
+       System.exit(0);
+     }
+   }
+ 
+   public static void main(String[] args) 
+   {
+     try
+     {
+       UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
+     }
+     catch (Exception e) {
+         e.printStackTrace();
+     }
+     ComboBoxDemo app = new ComboBoxDemo("ComboBox Demo");
+     app.pack();
+     app.setVisible(true);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/Demo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/Demo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/Demo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/Demo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1118 ----
+ /* SwingDemo.java -- An example of using the javax.swing UI.
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ */
+ 
+ 
+ package gnu.classpath.examples.swing;
+ 
+ import java.awt.*;
+ import java.awt.event.*;
+ 
+ import javax.swing.*;
+ import javax.swing.tree.*;
+ import javax.swing.border.*;
+ 
+ import javax.swing.plaf.metal.DefaultMetalTheme;
+ import javax.swing.plaf.metal.MetalLookAndFeel;
+ import javax.swing.plaf.metal.OceanTheme;
+ 
+ import java.net.URL;
+ 
+ public class Demo
+ {
+   JFrame frame;
+   static Color blueGray = new Color(0xdc, 0xda, 0xd5);
+ 
+   static
+   {
+     try
+       {
+         if (System.getProperty("swing.defaultlaf") == null)
+           {
+             StringBuffer text = new StringBuffer();
+             text.append("You may change the Look and Feel of this\n");
+             text.append("Demo by setting the system property\n");
+             text.append("-Dswing.defaultlaf=<LAFClassName>\n");
+ 	    text.append("\n");
+             text.append("Possible values for <LAFClassName> are:\n");
+ 	    text.append("\n");
+             text.append("* javax.swing.plaf.metal.MetalLookAndFeel\n");
+             text.append("  the default GNU Classpath L&F\n");
+ 	    text.append("\n");
+             text.append("* gnu.classpath.examples.swing.GNULookAndFeel\n");
+             text.append("  the GNU Look and Feel\n");
+             text.append("  (derived from javax.swing.plaf.basic.BasicLookAndFeel)\n");
+ 	    text.append("\n");
+             text.append("MetalLookAndFeel supports different Themes.\n");
+ 	    text.append("DefaultMetalTheme (the default) and OceanTheme (in development)\n");
+ 
+ 	    final String DEFAULT = "MetalLookAndFeel (default)";
+ 	    final String OCEAN = "MetalLookAndFeel (Ocean)";
+ 	    final String GNU = "GNULookAndFeel";
+ 	    final String[] lafs = new String[] { DEFAULT, OCEAN, GNU };
+ 
+ 	    int laf = JOptionPane.showOptionDialog(null, text /* textPane */,
+ 						   "Look and Feel choice",
+ 						   JOptionPane.OK_OPTION,
+ 						   JOptionPane.QUESTION_MESSAGE,
+ 						   null, lafs, DEFAULT);
+         if (laf == 0)
+           {
+             MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
+             UIManager.setLookAndFeel(new MetalLookAndFeel());
+           }
+ 	    if (laf == 1)
+ 	      {
+ 	        MetalLookAndFeel.setCurrentTheme(new OceanTheme());
+ 	        UIManager.setLookAndFeel(new MetalLookAndFeel());
+ 	      }
+ 	    else if (laf == 2)
+ 	      UIManager.setLookAndFeel(new GNULookAndFeel());
+           }
+       }
+     catch (UnsupportedLookAndFeelException e)
+       {
+         System.err.println("Cannot install GNULookAndFeel, exiting");
+         System.exit(1);
+       }
+   }
+ 
+   static Icon stockIcon(String s)
+   {
+     return getIcon("/gnu/classpath/examples/icons/stock-" + s + ".png", s);
+   }
+ 
+   static Icon bigStockIcon(String s)
+   {
+     return getIcon("/gnu/classpath/examples/icons/big-" + s + ".png", s);
+   }
+ 
+   static Icon getIcon(String location, String name)
+   {
+     URL url = Demo.class.getResource(location);
+     if (url == null) System.err.println("WARNING " + location + " not found.");
+     return new ImageIcon(url, name);
+   }
+ 
+   static JMenuBar mkMenuBar()
+   {
+     JMenuBar bar = new JMenuBar();
+     
+     JMenu file = new JMenu("File");
+     JMenu edit = new JMenu("Edit");
+     JMenu help = new JMenu("Help");
+ 
+     file.setMnemonic(KeyEvent.VK_F);
+     edit.setMnemonic(KeyEvent.VK_E);
+     help.setMnemonic(KeyEvent.VK_H);
+ 
+     file.add(new JMenuItem("New", stockIcon("new")));
+     file.add(new JMenuItem("Open", stockIcon("open")));
+ 
+     JMenu recent = new JMenu("Recent Files...");
+     recent.add(new JMenuItem("war-and-peace.txt"));
+     recent.add(new JMenuItem("taming-of-shrew.txt"));
+     recent.add(new JMenuItem("sun-also-rises.txt"));
+     file.add(recent);
+     file.add(new JMenuItem("Save", stockIcon("save")));
+     file.add(new JMenuItem("Save as...", stockIcon("save-as")));
+ 
+     JMenuItem exit = new JMenuItem("Exit", stockIcon("quit"));
+     exit.addActionListener(new ActionListener()
+       {
+         public void actionPerformed(ActionEvent e)
+         {
+           System.exit(1);
+         }
+       });
+ 
+     file.add(exit);
+ 
+     edit.add(new JMenuItem("Cut", stockIcon("cut")));
+     edit.add(new JMenuItem("Copy", stockIcon("copy")));
+     edit.add(new JMenuItem("Paste", stockIcon("paste")));
+ 
+     JMenu preferences = new JMenu("Preferences...");
+     preferences.add(new JCheckBoxMenuItem("Microphone Active",
+ 		    stockIcon("mic")));
+     preferences.add(new JCheckBoxMenuItem("Check Spelling",
+ 		    stockIcon("spell-check")));
+     preferences.add(new JCheckBoxMenuItem("World Peace"));
+     preferences.add(new JSeparator());
+     preferences.add(new JRadioButtonMenuItem("Radio Button"));
+     edit.add(preferences);
+ 
+     JMenu examples = new JMenu("Examples");
+     new PopUpAction("Buttons",
+ 		    (new ButtonDemo("Button Demo")).createContent(),
+ 		    examples);
+     
+     new PopUpAction("Toggles",
+ 		    mkToggle("cool and refreshing"),
+ 		    examples);
+ 
+     new PopUpAction("Checkbox",
+ 		    mkCheckbox("ice cold"),
+ 		    examples);
+ 
+     new PopUpAction("Radio",
+ 		    mkRadio("delicious"),
+ 		    examples);
+ 
+     new PopUpAction("Slider",
+ 		    (new SliderDemo("Slider Demo")).createContent(),
+ 		    examples);
+ 
+     new PopUpAction("ProgressBar",
+                     ProgressBarDemo.createContent(),
+                     examples);
+ 
+     new PopUpAction("List",
+ 		    mkListPanel(new String[] { "hello",
+ 					       "this",
+ 					       "is",
+ 					       "a",
+ 					       "list",
+                                                "that",
+                                                "wraps",
+                                                "over"}),
+ 		    examples);
+ 
+     new PopUpAction("Scrollbar",
+ 		    (new ScrollBarDemo("ScrollBarDemo")).createContent(),
+ 		    examples);
+ 
+     new PopUpAction("Viewport",
+ 		    mkViewportBox(mkBigButton("View Me!")),
+ 		    examples);
+ 
+     new PopUpAction("ScrollPane",
+                     mkScrollPane(mkBigButton("Scroll Me!")),
+                     examples);
+ 
+     new PopUpAction("TabPane",
+ 		    mkTabs(new String[] {"happy",
+ 					 "sad",
+ 					 "indifferent"}),
+ 		    examples);
+ 
+     new PopUpAction("Spinner",
+ 		    mkSpinner(),
+ 		    examples);
+ 
+     new PopUpAction("TextField",
+ 		    (new TextFieldDemo("TextField Demo")).createContent(),
+ 		    examples);
+ 
+     new PopUpAction("FileChooser",
+                     (new FileChooserDemo("FileChooser Demo")).createContent(),
+                     examples);
+ 
+     new PopUpAction("ColorChooser",
+ 		    mkColorChooser(),
+ 		    examples);
+ 
+     new PopUpAction("ComboBox",
+ 		    (new ComboBoxDemo("ComboBox Demo")).createContent(),
+ 		    examples);
+ 
+     new PopUpAction("Editor",
+                     mkEditorPane(),
+                     examples);
+     
+     new PopUpAction("Tree",
+                     mkTree(),
+                     examples);
+ 
+     new PopUpAction("Table",
+                     mkTable(),
+                     examples);
+ 
+     help.add(new JMenuItem("just play with the widgets"));
+     help.add(new JMenuItem("and enjoy the sensation of"));
+     help.add(new JMenuItem("your neural connections growing"));
+ 
+     bar.add(file);
+     bar.add(edit);
+     bar.add(examples);
+     bar.add(help);
+     return bar;
+   }
+ 
+   static void triggerDialog(final JButton but, final String dir)
+   {
+     but.addActionListener(new ActionListener()
+       {
+         public void actionPerformed(ActionEvent e)
+         {
+           JOptionPane.showConfirmDialog(but, 
+                                         "Sure you want to go " + dir + "?",
+                                         "Confirm",
+                                         JOptionPane.OK_CANCEL_OPTION, 
+                                         JOptionPane.QUESTION_MESSAGE,
+                                         bigStockIcon("warning"));
+         }
+       });
+   }
+ 
+   static JToolBar mkToolBar()
+   {
+     JToolBar bar = new JToolBar();
+ 
+     JButton b = mkButton(stockIcon("go-back"));
+     triggerDialog(b, "back");
+     bar.add(b);
+ 
+     b = mkButton(stockIcon("go-down"));
+     triggerDialog(b, "down");
+     bar.add(b);
+ 
+     b = mkButton(stockIcon("go-forward"));
+     triggerDialog(b, "forward");
+     bar.add(b);
+     return bar;
+   }
+ 
+   static String valign2str(int a)
+   {
+     switch (a)
+       {
+       case SwingConstants.CENTER:
+         return "Center";
+       case SwingConstants.TOP:
+         return "Top";
+       case SwingConstants.BOTTOM:
+         return "Bottom";
+       default:
+         return "Unknown";
+       }
+   }
+ 
+   static String halign2str(int a)
+   {
+     switch (a)
+       {
+       case SwingConstants.CENTER:
+         return "Center";
+       case SwingConstants.RIGHT:
+         return "Right";
+       case SwingConstants.LEFT:
+         return "Left";
+       default:
+         return "Unknown";
+       }
+   }
+ 
+   static JButton mkButton(String title, Icon icon, 
+                           int hAlign, int vAlign,
+                           int hPos, int vPos)
+   {    
+     JButton b;
+     if (icon == null)
+       b = new JButton(title);
+     else if (title == null)
+       b = new JButton(icon);
+     else
+       b = new JButton(title, icon);
+     
+     b.setToolTipText(title);
+     if (hAlign != -1) b.setHorizontalAlignment(hAlign);
+     if (vAlign != -1) b.setVerticalAlignment(vAlign);
+     if (hPos != -1) b.setHorizontalTextPosition(hPos);
+     if (vPos != -1) b.setVerticalTextPosition(vPos);      
+     return b;
+   }
+ 
+   static JButton mkButton(String title)
+   {
+     return mkButton(title, null, -1, -1, -1, -1);
+   }
+ 
+   static JButton mkButton(Icon i)
+   {
+     return mkButton(null, i, -1, -1, -1, -1);
+   }
+ 
+ 
+   static JPanel mkButtonWorld()
+   {
+     Icon ii = bigStockIcon("home");
+     int CENTER = SwingConstants.CENTER;
+     int TOP = SwingConstants.TOP;
+     int BOTTOM = SwingConstants.BOTTOM;
+ 
+     int[] valigns = new int[] {SwingConstants.CENTER,
+                                SwingConstants.TOP,
+                                SwingConstants.BOTTOM};
+ 
+     int[] haligns = new int[] {SwingConstants.CENTER,
+                                SwingConstants.RIGHT,
+                                SwingConstants.LEFT};
+ 
+     Border[] borders = new Border[] { 
+       new SoftBevelBorder(BevelBorder.RAISED),
+       new SoftBevelBorder(BevelBorder.LOWERED),
+       new BevelBorder(BevelBorder.RAISED),
+       
+       LineBorder.createBlackLineBorder(),
+       new MatteBorder(2, 2, 2, 2, Color.GREEN),
+       LineBorder.createGrayLineBorder(),
+       
+       new BevelBorder(BevelBorder.LOWERED),
+       new EtchedBorder(EtchedBorder.RAISED),
+       new EtchedBorder(EtchedBorder.LOWERED)      
+     };
+ 
+     JComponent[] comps = new JComponent[3*3];
+ 
+     int q = 0;
+ 
+     JPanel panel = new JPanel();
+     panel.setLayout(new GridLayout(3, 3));
+ 
+     for (int i = 0; i < 3; ++i)
+       for (int j = 0; j < 3; ++j)
+         {
+           JButton b = mkButton(halign2str(haligns[i])
+                                + valign2str(valigns[j]),
+                                ii,
+                                -1, -1, haligns[i], valigns[j]);
+           b.setBorder(borders[q++]);
+           JPanel tmp = new JPanel();
+           tmp.setBorder(new MatteBorder(5, 5, 5, 5, blueGray));
+           tmp.add(b);
+           panel.add(tmp);
+         }
+     
+     return panel;
+   }
+ 
+   private static class CheckCellRenderer 
+     extends JCheckBox implements ListCellRenderer
+   {
+     public Component getListCellRendererComponent(JList list,
+                                                   Object value,
+                                                   int index,
+                                                   boolean isSelected,
+                                                   boolean cellHasFocus)
+     {
+       setSelected(isSelected);
+       setText(value.toString());
+       
+       return this;
+     }
+   }
+ 
+   private static class LabelCellRenderer 
+     extends DefaultListCellRenderer
+   {
+     public Component getListCellRendererComponent(JList list,
+                                                   Object value,
+                                                   int index,
+                                                   boolean isSelected,
+                                                   boolean cellHasFocus)
+     {
+       Component c = super.getListCellRendererComponent(list, value, index, 
+                                                        isSelected,
+ 						       cellHasFocus);
+       
+       return c;
+     }
+   }
+ 
+   public static JScrollPane mkScrollPane(JComponent inner)
+   {
+     JScrollPane jsp;
+     jsp = new JScrollPane(inner,
+ 			  JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
+ 			  JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+     
+     return jsp;
+   }
+ 
+   private static JPanel mkTreeWorld()
+   {     
+     // non-leafs
+     DefaultMutableTreeNode root = new DefaultMutableTreeNode("Exotic Subsistence");
+     DefaultMutableTreeNode fruit = new DefaultMutableTreeNode("Interesting Fruit");
+     DefaultMutableTreeNode veg = new DefaultMutableTreeNode("Extraordinary Vegetables");
+     DefaultMutableTreeNode liq = new DefaultMutableTreeNode("Peculiar Liquids");
+     
+     // leafs
+     DefaultMutableTreeNode f1 = new DefaultMutableTreeNode("Abiu");
+     DefaultMutableTreeNode f2 = new DefaultMutableTreeNode("Bamboo Shoots");
+     DefaultMutableTreeNode f3 = new DefaultMutableTreeNode("Breadfruit");
+     DefaultMutableTreeNode f4 = new DefaultMutableTreeNode("Canistel");
+     DefaultMutableTreeNode f5 = new DefaultMutableTreeNode("Duku");
+     DefaultMutableTreeNode f6 = new DefaultMutableTreeNode("Guava");
+     DefaultMutableTreeNode f7 = new DefaultMutableTreeNode("Jakfruit");
+     DefaultMutableTreeNode f8 = new DefaultMutableTreeNode("Quaribea");
+     
+     DefaultMutableTreeNode v1 = new DefaultMutableTreeNode("Amaranth");
+     DefaultMutableTreeNode v2 = new DefaultMutableTreeNode("Kiwano");
+     DefaultMutableTreeNode v3 = new DefaultMutableTreeNode("Leeks");
+     DefaultMutableTreeNode v4 = new DefaultMutableTreeNode("Luffa");
+     DefaultMutableTreeNode v5 = new DefaultMutableTreeNode("Chayote");
+     DefaultMutableTreeNode v6 = new DefaultMutableTreeNode("Jicama");
+     DefaultMutableTreeNode v7 = new DefaultMutableTreeNode("Okra");
+     
+     DefaultMutableTreeNode l1 = new DefaultMutableTreeNode("Alcoholic");
+     DefaultMutableTreeNode l11 = new DefaultMutableTreeNode("Caipirinha");
+     DefaultMutableTreeNode l21 = new DefaultMutableTreeNode("Mojito");
+     DefaultMutableTreeNode l31 = new DefaultMutableTreeNode("Margarita");
+     DefaultMutableTreeNode l41 = new DefaultMutableTreeNode("Martini");
+     DefaultMutableTreeNode l5 = new DefaultMutableTreeNode("Non Alcoholic");
+     DefaultMutableTreeNode l55 = new DefaultMutableTreeNode("Babaji");
+     DefaultMutableTreeNode l65 = new DefaultMutableTreeNode("Chikita");
+     
+     root.add(fruit);
+     root.add(veg);
+     root.add(liq);
+     fruit.add(f1);
+     fruit.add(f2);
+     fruit.add(f3);
+     fruit.add(f4);
+     fruit.add(f5);
+     fruit.add(f6);
+     fruit.add(f7);
+     fruit.add(f8);
+     veg.add(v1);
+     veg.add(v2);
+     veg.add(v3);
+     veg.add(v4);
+     veg.add(v5);
+     veg.add(v6);
+     veg.add(v7);
+     liq.add(l1);
+     l1.add(l11);
+     l1.add(l21);
+     l1.add(l31);
+     l1.add(l41);
+     liq.add(l5);
+     l5.add(l55);
+     l5.add(l65);
+ 
+     final JTree tree = new JTree(root);
+     tree.setLargeModel(true);
+     tree.setEditable(true);
+     DefaultTreeSelectionModel dtsm = new DefaultTreeSelectionModel();
+     dtsm.setSelectionMode(DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);
+     tree.setSelectionModel(dtsm);
+     
+     // buttons to add and delete
+     JButton add = mkButton("add element");
+     add.addActionListener(new ActionListener()
+       {
+         public void actionPerformed(ActionEvent e)
+         {
+            for (int i = 0; i < tree.getRowCount(); i++)
+            {
+               if (tree.isRowSelected(i))
+               {
+                  TreePath p = tree.getPathForRow(i);
+                  DefaultMutableTreeNode n = (DefaultMutableTreeNode) p.
+                                                   getLastPathComponent();
+                  n.add(new DefaultMutableTreeNode("New Element"));
+                  tree.repaint();
+                  break;
+               }
+            }
+         }
+       });
+ 
+ 
+     JPanel p1 = new JPanel(); 
+     p1.setLayout(new BorderLayout());
+     
+     JPanel p2 = new JPanel(); 
+     p2.add(add);
+ 
+     p1.add(p2, BorderLayout.NORTH);
+     p1.add(mkScrollPane(tree), BorderLayout.CENTER);
+     
+     return p1;
+   }
+   
+   public static JPanel mkListWorld()
+   {
+ 
+     String foo[] = new String[] { 
+       "non alcoholic ",
+       "carbonated ",
+       "malted ",
+       "fresh squeezed ",
+       "imported ",
+       "high fructose ",
+       "enriched "
+     };
+     
+     String bar[] = new String[] { 
+       "orange juice",
+       "ginger beer",
+       "yak milk",
+       "corn syrup",
+       "herbal remedy"
+     };
+ 
+     final DefaultListModel mod = new DefaultListModel();
+     final JList list1 = new JList(mod);
+     final JList list2 = new JList(mod);
+ 
+     list2.setSelectionModel(list1.getSelectionModel());
+     for (int i = 0; i < bar.length; ++i)
+       for (int j = 0; j < foo.length; ++j)
+         mod.addElement(foo[j] + bar[i]);
+ 
+     list1.setCellRenderer(new LabelCellRenderer());
+     list2.setCellRenderer(new CheckCellRenderer());
+ 
+     JButton add = mkButton("add element");
+     add.addActionListener(new ActionListener()
+       {
+         int i = 0;
+         public void actionPerformed(ActionEvent e)
+         {
+           mod.addElement("new element " + i);
+           ++i;
+         }
+       });
+ 
+     JButton del = mkButton("delete selected");
+     del.addActionListener(new ActionListener()
+       {
+         public void actionPerformed(ActionEvent e)
+         {
+           for (int i = 0; i < mod.getSize(); ++i)
+             if (list1.isSelectedIndex(i))
+               mod.remove(i);
+         }
+       });
+ 
+ 
+     JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+     splitter.add(mkScrollPane(list1), JSplitPane.LEFT);
+     splitter.add(mkScrollPane(list2), JSplitPane.RIGHT);
+ 
+     JPanel p1 = new JPanel(); 
+     p1.setLayout(new BorderLayout());
+ 
+     JPanel p2 = new JPanel(); 
+     p2.setLayout(new GridLayout(1, 2));
+     p2.add(add);
+     p2.add(del);
+ 
+     p1.add(p2, BorderLayout.NORTH);
+     p1.add(splitter, BorderLayout.CENTER);
+     return p1;
+   }
+ 
+ 
+   static JPanel mkDesktopWorld()
+   {
+     
+     final JDesktopPane desk = new JDesktopPane();
+     desk.setDesktopManager(new DefaultDesktopManager());
+     desk.setPreferredSize(new Dimension(300,300));
+     desk.setMinimumSize(new Dimension(300,300));
+     JButton but = mkButton("add frame");
+     but.addActionListener(new ActionListener()
+       {
+         int i = 10;
+         public void actionPerformed(ActionEvent e)
+         {
+           JInternalFrame f;
+ 	  f = new JInternalFrame("internal", true, true, true, true);
+           f.getContentPane().setLayout(new BorderLayout());
+           f.getContentPane().add(mkToolBar(), BorderLayout.NORTH);
+           f.getContentPane().add(mkButton(bigStockIcon("fullscreen")),
+ 				 BorderLayout.CENTER);
+           desk.add(f);
+           f.setBounds(i, i, 250, 200);
+ 	  f.setVisible(true);
+           i += 30;
+         }
+       });
+     
+     JPanel panel = new JPanel();
+     panel.setLayout(new BorderLayout());
+     panel.add(desk, BorderLayout.CENTER);
+     panel.add(but, BorderLayout.NORTH);
+     but.doClick();
+     but.doClick();
+     JInternalFrame palette = new JInternalFrame("Palette", true, true, true, 
+         true);
+     palette.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
+     desk.add(palette, JDesktopPane.PALETTE_LAYER);
+     JLabel label = new JLabel("This is a floating palette!");
+     palette.getContentPane().add(label);
+     palette.pack();
+     palette.setVisible(true);
+     return panel;
+   }
+ 
+   static JPanel mkTabWorld() 
+   {
+     JPanel panel = new JPanel(new GridLayout(2, 2));
+     panel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+     JTabbedPane tabs1 = new JTabbedPane(SwingConstants.TOP);
+     tabs1.add("Top Item 1", new JButton("Button"));
+     tabs1.add("Top Item 2", new JButton("Button"));
+     JTabbedPane tabs2 = new JTabbedPane(SwingConstants.LEFT);
+     tabs2.add("Left Item 1", new JButton("Button"));
+     tabs2.add("Left Item 2", new JButton("Button"));
+     JTabbedPane tabs3 = new JTabbedPane(SwingConstants.BOTTOM);
+     tabs3.add("Bottom Item 1", new JButton("Button"));
+     tabs3.add("Bottom Item 2", new JButton("Button"));
+     JTabbedPane tabs4 = new JTabbedPane(SwingConstants.RIGHT);
+     tabs4.add("Right Item 1", new JButton("Button"));
+     tabs4.add("Right Item 2", new JButton("Button"));
+     panel.add(tabs1);
+     panel.add(tabs2);
+     panel.add(tabs3);
+     panel.add(tabs4);
+     return panel;        
+   }
+ 
+   static JTabbedPane mkTabbedPane()
+   {
+     JTabbedPane tabs = new JTabbedPane();
+     
+     tabs.add("Button world!", mkButtonWorld());
+     tabs.add("List world!", mkListWorld());
+     tabs.add("Desktop world!", mkDesktopWorld());
+     tabs.add("Tree world!", mkTreeWorld());
+     tabs.add("Tab world!", mkTabWorld());
+     return tabs;
+   }
+ 
+   public Demo()
+   {
+     frame = new JFrame("Swing Activity Board");
+     frame.setJMenuBar(mkMenuBar());
+     JComponent component = (JComponent) frame.getContentPane();
+     component.setLayout(new BorderLayout());
+     component.add(mkToolBar(), BorderLayout.NORTH);
+     JPanel main = new JPanel();
+     main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS));
+     main.add(mkTabbedPane());
+     main.add(mkButtonBar());
+     component.add(main, BorderLayout.CENTER);
+     frame.pack();
+     frame.show();
+   }
+ 
+   public static class LaterMain
+     implements Runnable
+   {
+     public void run()
+     {
+       Demo demo = new Demo();      
+     }
+   }
+ 
+   public static void main(String args[])
+   {
+     SwingUtilities.invokeLater(new LaterMain());
+   }
+ 
+   public static JCheckBox mkCheckbox(String label)
+   {
+     JCheckBox c = new JCheckBox(label);
+     c.setFont(new Font("Luxi", Font.PLAIN, 14));
+     return c;
+   }
+ 
+   public static JPanel mkRadio(String label)
+   {
+     JPanel p = new JPanel();
+     JRadioButton c = new JRadioButton(label);
+     JRadioButton d = new JRadioButton("not " + label);
+     ButtonGroup bg = new ButtonGroup();
+     bg.add(c);
+     bg.add(d);
+     p.add(c);
+     p.add(d);
+     return p;
+   }
+ 
+   public static JList mkList(Object[] elts)
+   {
+     JList list = new JList(elts);
+     list.setFont(new Font("Luxi", Font.PLAIN, 14));
+     return list;
+   }
+ 
+   public static JTabbedPane mkTabs(String[] names)
+   {
+     JTabbedPane tabs = new JTabbedPane();
+     for (int i = 0; i < names.length; ++i)
+       {
+         tabs.addTab(names[i], mkButton(names[i]));
+       }
+     return tabs;
+   }
+ 
+   public static JComboBox mkComboBox(String[] names)
+   {
+     JComboBox box = new JComboBox(names);
+     return box;
+   }
+ 
+   public static JSpinner mkSpinner()
+   {
+     JSpinner spinner = new JSpinner();
+     return spinner;
+   }
+ 
+   public static JButton mkBigButton(String title)
+   {
+     JButton b = new JButton(title);
+     b.setMargin(new Insets(5,5,5,5));
+     //b.setFont(new Font("Luxi", Font.PLAIN, 14));
+     return b;
+   }
+ 
+   public static JToggleButton mkToggle(String title)
+   {
+     JToggleButton b = new JToggleButton(title);
+     b.setMargin(new Insets(5,5,5,5));
+     b.setFont(new Font("Luxi", Font.PLAIN, 14));
+     return b;    
+   }
+ 
+   public static JPanel mkPanel(JComponent[] inners)
+   {
+     JPanel p = new JPanel();
+     for (int i = 0; i < inners.length; ++i)
+       {
+         p.add(inners[i]);
+       }
+     return p;
+   }
+ 
+   public static JScrollBar mkScrollBar()
+   {
+     JScrollBar scrollbar = new JScrollBar();
+     return scrollbar;
+   }
+ 
+   public static JPanel mkViewportBox(final JComponent inner)
+   {
+     final JViewport port = new JViewport();
+     port.setView(inner);
+     JButton left = mkBigButton("left");
+     JButton right = mkBigButton("right");
+     
+     left.addActionListener(new ActionListener()
+       {
+         public void actionPerformed(ActionEvent e)
+         {
+           Point p = port.getViewPosition();
+           port.setViewPosition(new Point(p.x - 10, p.y));
+         }
+       });
+ 
+     right.addActionListener(new ActionListener()
+       {
+         public void actionPerformed(ActionEvent e)
+         {
+           Point p = port.getViewPosition();
+           port.setViewPosition(new Point(p.x + 10, p.y));
+         }
+       });
+  
+     return mkPanel(new JComponent[] {port, left, right});
+   }
+ 
+   public static JPanel mkListPanel(Object[] elts)
+   {
+     final DefaultListModel mod = new DefaultListModel();
+     final JList list1 = new JList(mod);
+     list1.setLayoutOrientation(JList.VERTICAL_WRAP);
+     list1.setVisibleRowCount(4);
+     final JList list2 = new JList(mod);
+     list2.setLayoutOrientation(JList.VERTICAL_WRAP);
+     list2.setVisibleRowCount(4);
+ 
+     list2.setSelectionModel(list1.getSelectionModel());
+     for (int i = 0; i < elts.length; ++i)
+       mod.addElement(elts[i]);
+     list1.setCellRenderer(new LabelCellRenderer());
+     list2.setCellRenderer(new CheckCellRenderer());
+ 
+     JButton add = mkBigButton("add element");
+     add.addActionListener(new ActionListener()
+       {
+         int i = 0;
+         public void actionPerformed(ActionEvent e)
+         {
+           mod.addElement("new element " + i);
+           ++i;
+         }
+       });
+ 
+     JButton del = mkBigButton("delete selected");
+     del.addActionListener(new ActionListener()
+       {
+         public void actionPerformed(ActionEvent e)
+         {
+           for (int i = 0; i < mod.getSize(); ++i)
+             if (list1.isSelectedIndex(i))
+               mod.remove(i);
+         }
+       });
+ 
+     return mkPanel(new JComponent[] {list1, //mkScrollPane(list1), 
+                                      list2, //mkScrollPane(list2), 
+                                      mkPanel(new JComponent[] {add, del})});
+   }
+ 
+ 
+   public static JButton mkDisposerButton(final JFrame c)
+   {
+     JButton close = mkBigButton("Close");
+     close.addActionListener(new ActionListener()
+       {
+         public void actionPerformed(ActionEvent e)
+         {
+           c.dispose();
+         }
+       });
+     return close;
+   }
+ 
+   public static JColorChooser mkColorChooser()
+   {
+     return new JColorChooser();
+   }
+ 
+   private static class PopUpAction
+     implements ActionListener
+   {
+     private JComponent inner;
+     private String name;
+ 
+     PopUpAction(String n, JComponent i, JMenu m)
+     {
+       name = n;
+       inner = i;
+ 
+       JMenuItem item = new JMenuItem(name);
+       item.addActionListener(this);
+       m.add(item);
+     }
+ 
+     PopUpAction(String n, JComponent i, JPanel p)
+     {
+       name = n;
+       inner = i;
+ 
+       JButton b = mkBigButton(name);
+       b.addActionListener(this);
+       p.add(b);
+     }
+ 
+     public void actionPerformed(ActionEvent e)
+     {
+       JFrame frame = new JFrame(name);
+       frame.getContentPane().setLayout(new BorderLayout());
+       frame.getContentPane().add(inner, BorderLayout.CENTER);
+       frame.getContentPane().add(mkDisposerButton(frame), BorderLayout.SOUTH);
+       frame.pack();
+       frame.show();
+     }
+   }
+ 
+   private static JEditorPane mkEditorPane()
+   {
+     JEditorPane editorPane = new JEditorPane();
+     editorPane.setEditable(true);
+     return editorPane;
+   }
+   
+   private static JTree mkTree()
+   {
+     DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root node");
+     DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Child node 1");
+     DefaultMutableTreeNode child11 =
+       new DefaultMutableTreeNode("Child node 1.1");
+     DefaultMutableTreeNode child12 =
+       new DefaultMutableTreeNode("Child node 1.2");
+     DefaultMutableTreeNode child13 =
+       new DefaultMutableTreeNode("Child node 1.3");
+     DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("Child node 2");
+     DefaultMutableTreeNode child21 =
+       new DefaultMutableTreeNode("Child node 2.1");
+     DefaultMutableTreeNode child22 =
+       new DefaultMutableTreeNode("Child node 2.2");
+     DefaultMutableTreeNode child23 =
+       new DefaultMutableTreeNode("Child node 2.3");
+     DefaultMutableTreeNode child24 =
+       new DefaultMutableTreeNode("Child node 2.4");
+ 
+     DefaultMutableTreeNode child3 = new DefaultMutableTreeNode("Child node 3");
+     root.add(child1);
+     root.add(child2);
+     root.add(child3);
+     child1.add(child11);
+     child1.add(child12);
+     child1.add(child13);
+     child2.add(child21);
+     child2.add(child22);
+     child2.add(child23);
+     child2.add(child24);
+ 
+     JTree tree = new JTree(root);
+     tree.setLargeModel(true);
+     DefaultTreeSelectionModel dtsm = new DefaultTreeSelectionModel();
+     dtsm.setSelectionMode(DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);
+     tree.setSelectionModel(dtsm);
+     
+     return tree;
+   }
+ 
+   private static JTable mkTable()
+   {
+     Object[][] tableData = new Object[][] {
+       {
+         "Field 1", "Field 2" , "Field 3"
+       },
+       {
+         "Field 4", "Field 5" , "Field 6"
+       },
+       {
+         "Field 7", "Field 8" , "Field 9"
+       },
+       {
+         "Field 10", "Field 11" , "Field 12"
+       }
+     };
+     Object[] columnNames = new Object[] {"Column 1", "Column 2", "Column 3"};
+ 
+     JTable table = new JTable(tableData, columnNames);
+     return table;
+   }
+   
+   private JPanel mkButtonBar()
+   {    
+     JPanel panel = new JPanel (new GridLayout(2, 1));
+     JPanel panelA = new JPanel(new FlowLayout());
+     JPanel panelB = new JPanel(new FlowLayout());
+ 
+     new PopUpAction("Buttons",
+ 		    (new ButtonDemo("Button Demo")).createContent(),
+ 		    panelA);
+     
+     new PopUpAction("Toggles",
+ 		    mkToggle("cool and refreshing"),
+ 		    panelA);
+ 
+     new PopUpAction("Checkbox",
+ 		    mkCheckbox("ice cold"),
+ 		    panelA);
+ 
+     new PopUpAction("Radio",
+ 		    mkRadio("delicious"),
+ 		    panelA);
+ 
+     new PopUpAction("Slider",
+ 		    (new SliderDemo("Slider Demo")).createContent(),
+ 		    panelA);
+ 
+     new PopUpAction("ProgressBar",
+             ProgressBarDemo.createContent(),
+              panelA);
+ 
+ 
+     new PopUpAction("List",
+ 		    mkListPanel(new String[] { "hello",
+ 					       "this",
+ 					       "is",
+ 					       "a",
+ 					       "list",
+                                                "that",
+                                                "wraps",
+                                                "over"}),
+ 		    panelA);
+ 
+     new PopUpAction("Scrollbar",
+ 		    (new ScrollBarDemo("ScrollBar Demo")).createContent(),
+ 		    panelA);
+ 
+     new PopUpAction("Viewport",
+ 		    mkViewportBox(mkBigButton("View Me!")),
+ 		    panelA);
+ 
+     new PopUpAction("ScrollPane",
+ 		    mkScrollPane(mkBigButton("Scroll Me!")),
+ 		    panelA);
+ 
+     new PopUpAction("TabPane",
+ 		    mkTabs(new String[] {"happy",
+ 					 "sad",
+ 					 "indifferent"}),
+ 		    panelB);
+ 
+     new PopUpAction("Spinner",
+ 		    mkSpinner(),
+ 		    panelB);
+ 
+     new PopUpAction("TextField",
+ 		    (new TextFieldDemo("TextField Demo")).createContent(),
+ 		    panelB);
+ 
+     new PopUpAction("FileChooser",
+                     (new FileChooserDemo("FileChooser Demo")).createContent(),
+                     panelB);
+ 
+     new PopUpAction("ColorChooser",
+ 		    mkColorChooser(),
+ 		    panelB);
+ 
+     new PopUpAction("ComboBox",
+ 		    (new ComboBoxDemo("ComboBox Demo")).createContent(),
+ 		    panelB);
+ 
+     new PopUpAction("Editor",
+                     mkEditorPane(),
+                     panelB);
+     
+     new PopUpAction("Tree",
+                     mkTree(),
+                     panelB);
+     
+     new PopUpAction("Table",
+                     mkTable(),
+                     panelB);
+     
+     JButton exitDisposer = mkDisposerButton(frame);
+     panelB.add(exitDisposer);
+     exitDisposer.addActionListener(new ActionListener()
+       {
+ 	public void actionPerformed(ActionEvent e)
+ 	{
+ 	  System.exit(1);
+ 	}
+       });
+     panel.add(panelA);
+     panel.add(panelB);
+     return panel;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,228 ----
+ /* FileChooserDemo.java -- An example showing file choosers in Swing.
+    Copyright (C) 2005,  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ */
+ 
+ package gnu.classpath.examples.swing;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.GridLayout;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.io.File;
+ 
+ import javax.swing.BorderFactory;
+ import javax.swing.DefaultListModel;
+ import javax.swing.JButton;
+ import javax.swing.JFileChooser;
+ import javax.swing.JFrame;
+ import javax.swing.JLabel;
+ import javax.swing.JList;
+ import javax.swing.JPanel;
+ import javax.swing.JScrollPane;
+ import javax.swing.filechooser.FileFilter;
+ 
+ /**
+  * A simple demo showing the {@link JFileChooser} component used in different
+  * ways.
+  */
+ public class FileChooserDemo extends JFrame implements ActionListener 
+ {
+   /**
+    * A file filter for Java source files.
+    */
+   static class JavaFileFilter extends FileFilter
+   {
+     public String getDescription() 
+     {
+       return "Java Source Files (.java)";
+     }
+     public boolean accept(File f)
+     {
+       if (f != null) 
+       {
+         return f.getName().endsWith(".java") || f.isDirectory();
+       }
+       else 
+         return false;
+     }
+   }
+     
+   /** A label to display the selected file. */
+   JLabel selectedFileLabel;
+     
+   /** 
+    * A list showing the selected files (where multi selections are 
+    * allowed). 
+    */
+   JList selectedFilesList;
+     
+   /** A label to display the return code for the JFileChooser. */
+   JLabel returnCodeLabel;
+     
+   /**
+    * Creates a new demo instance. 
+    * 
+    * @param frameTitle  the frame title.
+    */
+   public FileChooserDemo(String frameTitle) 
+   {
+     super(frameTitle);
+     JPanel content = createContent();
+     JPanel closePanel = new JPanel();
+     JButton closeButton = new JButton("Close");
+     closeButton.setActionCommand("CLOSE");
+     closeButton.addActionListener(this);
+     closePanel.add(closeButton);
+     content.add(closePanel, BorderLayout.SOUTH);
+     getContentPane().add(content);
+   }
+       
+   /**
+    * Returns a panel with the demo content.  The panel
+    * uses a BorderLayout(), and the BorderLayout.SOUTH area
+    * is empty, to allow callers to add controls to the
+    * bottom of the panel if they want to (a close button is
+    * added if this demo is being run as a standalone demo).
+    */
+   JPanel createContent()
+   {      
+     JPanel panel = new JPanel(new BorderLayout());
+      
+     // create a panel of buttons to select the different styles of file 
+     // chooser...
+     JPanel buttonPanel = new JPanel(new GridLayout(5, 1));
+     JButton openButton = new JButton("Open...");
+     openButton.setActionCommand("OPEN");
+     openButton.addActionListener(this);
+     buttonPanel.add(openButton);
+     JButton saveButton = new JButton("Save...");
+     saveButton.setActionCommand("SAVE");
+     saveButton.addActionListener(this);
+     buttonPanel.add(saveButton);
+     JButton queryButton = new JButton("Select Directory...");
+     queryButton.setActionCommand("SELECT_DIRECTORY");
+     queryButton.addActionListener(this);
+     buttonPanel.add(queryButton);
+     JButton openJavaButton = new JButton("Open Java file...");
+     openJavaButton.setActionCommand("OPEN_JAVA");
+     openJavaButton.addActionListener(this);
+     buttonPanel.add(openJavaButton);
+     JButton openMultiButton = new JButton("Open multiple files...");
+     openMultiButton.setActionCommand("OPEN_MULTI");
+     openMultiButton.addActionListener(this);
+     buttonPanel.add(openMultiButton);
+     panel.add(buttonPanel, BorderLayout.WEST);
+     
+     // create a panel to display the selected file(s) and the return code
+     JPanel displayPanel = new JPanel(new BorderLayout());
+      
+     selectedFileLabel = new JLabel("-");
+     selectedFileLabel.setBorder(BorderFactory.createTitledBorder("Selected File/Directory: "));
+     displayPanel.add(selectedFileLabel, BorderLayout.NORTH);
+         
+     selectedFilesList = new JList();
+     JScrollPane sp = new JScrollPane(selectedFilesList);
+     sp.setBorder(BorderFactory.createTitledBorder("Selected Files: "));
+     displayPanel.add(sp);
+ 
+     returnCodeLabel = new JLabel("0");
+     returnCodeLabel.setBorder(BorderFactory.createTitledBorder("Return Code:"));
+     displayPanel.add(returnCodeLabel, BorderLayout.SOUTH);
+         
+     panel.add(displayPanel);
+     return panel;        
+   }
+     
+   /**
+    * When the user clicks on a button, launch the appropriate file chooser
+    * and report the results.
+    * 
+    * @param e  the event.
+    */
+   public void actionPerformed(ActionEvent e)
+   {
+     int option = 0;
+     File selectedFile = null;
+     File[] selectedFiles = new File[0];
+     
+     if (e.getActionCommand().equals("CLOSE"))
+     {
+       System.exit(0);
+     }
+     else if (e.getActionCommand().equals("OPEN"))
+       {
+         JFileChooser chooser = new JFileChooser();
+         option = chooser.showOpenDialog(this);
+         selectedFile = chooser.getSelectedFile();
+         selectedFiles = chooser.getSelectedFiles();
+       }
+     else if (e.getActionCommand().equals("OPEN_MULTI"))
+       {
+         JFileChooser chooser = new JFileChooser();
+         chooser.setMultiSelectionEnabled(true);
+         option = chooser.showOpenDialog(this);
+         selectedFile = chooser.getSelectedFile();
+         selectedFiles = chooser.getSelectedFiles();
+       }
+     else if (e.getActionCommand().equals("OPEN_JAVA"))
+       {
+         JFileChooser chooser = new JFileChooser();
+         chooser.setAcceptAllFileFilterUsed(false);
+         chooser.setFileFilter(new JavaFileFilter());
+         option = chooser.showOpenDialog(this);
+         selectedFile = chooser.getSelectedFile();
+         selectedFiles = chooser.getSelectedFiles();
+       }
+     else if (e.getActionCommand().equals("SAVE"))
+       {
+         JFileChooser chooser = new JFileChooser();
+         option = chooser.showSaveDialog(this);
+         selectedFile = chooser.getSelectedFile();
+         selectedFiles = chooser.getSelectedFiles();
+       }
+     else if (e.getActionCommand().equals("SELECT_DIRECTORY"))
+       {
+         JFileChooser chooser = new JFileChooser();
+         chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+         option = chooser.showDialog(this, "Select");
+         selectedFile = chooser.getSelectedFile();
+         selectedFiles = chooser.getSelectedFiles();
+       }
+      
+     // display the selection and return code
+     if (selectedFile != null)
+       selectedFileLabel.setText(selectedFile.toString());
+     else
+       selectedFileLabel.setText("null");
+     DefaultListModel listModel = new DefaultListModel();
+     for (int i = 0; i < selectedFiles.length; i++)
+       listModel.addElement(selectedFiles[i]);
+     selectedFilesList.setModel(listModel);
+     returnCodeLabel.setText(Integer.toString(option));
+   }
+     
+   public static void main(String[] args) 
+   {
+     FileChooserDemo app = new FileChooserDemo("File Chooser Demo");
+     app.pack();
+     app.setVisible(true);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/GNULookAndFeel.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/GNULookAndFeel.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/GNULookAndFeel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/GNULookAndFeel.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,265 ----
+ /* GNULookAndFeel.java -- An example of using the javax.swing UI.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ */
+ 
+ package gnu.classpath.examples.swing;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Graphics;
+ 
+ import javax.swing.Icon;
+ import javax.swing.ImageIcon;
+ import javax.swing.JCheckBox;
+ import javax.swing.JRadioButton;
+ import javax.swing.UIDefaults;
+ import javax.swing.plaf.ColorUIResource;
+ import javax.swing.plaf.IconUIResource;
+ import javax.swing.plaf.basic.BasicLookAndFeel;
+ 
+ public class GNULookAndFeel extends BasicLookAndFeel
+ {
+ 
+   static Color blueGray = new Color(0xdc, 0xda, 0xd5);
+ 
+   public boolean isNativeLookAndFeel()    { return true; }
+   public boolean isSupportedLookAndFeel() { return true; }
+   public String getDescription()          { return "GNU Look and Feel"; }
+   public String getID()                   { return "GNULookAndFeel"; }
+   public String getName()                 { return "GNU"; }
+ 
+   static UIDefaults LAF_defaults;
+ 
+   private final static String iconspath = "/gnu/javax/swing/plaf/gtk/icons/";
+ 
+   public UIDefaults getDefaults()
+   {
+     if (LAF_defaults == null)
+       {
+         LAF_defaults = super.getDefaults();
+         Object[] myDefaults = new Object[] {
+           "Button.background", new ColorUIResource(blueGray),
+           "CheckBox.background", new ColorUIResource(blueGray),
+           "CheckBoxMenuItem.background", new ColorUIResource(blueGray),
+           "ToolBar.background", new ColorUIResource(blueGray),
+           "Panel.background", new ColorUIResource(blueGray),
+           "Slider.background", new ColorUIResource(blueGray),
+           "OptionPane.background", new ColorUIResource(blueGray),
+           "ProgressBar.background", new ColorUIResource(blueGray),
+           "TabbedPane.background", new ColorUIResource(blueGray),
+           "Label.background", new ColorUIResource(blueGray),
+           "Menu.background", new ColorUIResource(blueGray),
+           "MenuBar.background", new ColorUIResource(blueGray),
+           "MenuItem.background", new ColorUIResource(blueGray),
+           "ScrollBar.background", new ColorUIResource(blueGray),
+           "CheckBox.icon", new CheckBoxIcon(),
+           "RadioButton.icon", new RadioButtonIcon(),
+ 	  
+ 	"Tree.closedIcon",
+ 	  new IconUIResource(new ImageIcon
+ 			     (getClass().getResource
+ 			      (iconspath + "TreeClosed.png"))),
+ 	  "Tree.leafIcon",
+ 	  new IconUIResource(new ImageIcon
+ 			     (getClass().getResource
+ 			      (iconspath + "TreeLeaf.png"))),
+ 	  "Tree.openIcon",
+ 	  new IconUIResource(new ImageIcon
+ 			     (getClass().getResource
+ 			      (iconspath + "TreeOpen.png"))),
+         };
+         LAF_defaults.putDefaults(myDefaults);
+       }
+     return LAF_defaults;
+   }
+   
+   /**
+    * The icon used for CheckBoxes in the BasicLookAndFeel. This is an empty
+    * icon with a size of 13x13 pixels.
+    */
+   static class CheckBoxIcon
+     implements Icon
+   {
+     /**
+      * Returns the height of the icon. The BasicLookAndFeel CheckBox icon
+      * has a height of 13 pixels.
+      *
+      * @return the height of the icon
+      */
+     public int getIconHeight()
+     {
+       return 13;
+     }
+ 
+     /**
+      * Returns the width of the icon. The BasicLookAndFeel CheckBox icon
+      * has a width of 13 pixels.
+      *
+      * @return the height of the icon
+      */
+     public int getIconWidth()
+     {
+       return 13;
+     }
+ 
+     /**
+      * Paints the icon. The BasicLookAndFeel CheckBox icon is empty and does
+      * not need to be painted.
+      *
+      * @param c the component to be painted
+      * @param g the Graphics context to be painted with
+      * @param x the x position of the icon
+      * @param y the y position of the icon
+      */
+     public void paintIcon(Component c, Graphics g, int x, int y)
+     {
+       Color save = g.getColor();
+       g.setColor(c.getForeground());
+       g.drawRect(x, y, getIconWidth(), getIconHeight());    
+       
+       JCheckBox item = (JCheckBox) c;
+       if (item.isSelected()) 
+         {
+           g.drawLine(3 + x, 5 + y, 3 + x, 9 + y);
+           g.drawLine(4 + x, 5 + y, 4 + x, 9 + y);
+           g.drawLine(5 + x, 7 + y, 9 + x, 3 + y);
+           g.drawLine(5 + x, 8 + y, 9 + x, 4 + y);
+         }
+       
+       g.setColor(save);
+     }
+   }
+   
+   /**
+    * The icon used for RadioButtons in the GNULookAndFeel. This is an empty
+    * icon with a size of 13x13 pixels.
+    */
+   static class RadioButtonIcon
+     implements Icon
+   {
+     /**
+      * Returns the height of the icon. The GNULookAndFeel RadioButton icon
+      * has a height of 13 pixels.
+      *
+      * @return the height of the icon
+      */
+     public int getIconHeight()
+     {
+       return 13;
+     }
+ 
+     /**
+      * Returns the width of the icon. The GNULookAndFeel RadioButton icon
+      * has a width of 13 pixels.
+      *
+      * @return the height of the icon
+      */
+     public int getIconWidth()
+     {
+       return 13;
+     }
+ 
+     /**
+      * Paints the icon. The GNULookAndFeel RadioButton icon is empty and does
+      * not need to be painted.
+      *
+      * @param c the component to be painted
+      * @param g the Graphics context to be painted with
+      * @param x the x position of the icon
+      * @param y the y position of the icon
+      */
+     public void paintIcon(Component c, Graphics g, int x, int y)
+     {
+       Color savedColor = g.getColor();
+       JRadioButton b = (JRadioButton) c;
+       
+       // draw outer circle
+       if (b.isEnabled())
+         g.setColor(Color.GRAY);
+       else
+         g.setColor(Color.GRAY);
+       g.drawLine(x + 2, y + 1, x + 3, y + 1);
+       g.drawLine(x + 4, y, x + 7, y);
+       g.drawLine(x + 8, y + 1, x + 9, y + 1);
+       g.drawLine(x + 10, y + 2, x + 10, y + 3);
+       g.drawLine(x + 11, y + 4, x + 11, y + 7);
+       g.drawLine(x + 10, y + 8, x + 10, y + 9);
+       g.drawLine(x + 8, y + 10, x + 9, y + 10);
+       g.drawLine(x + 4, y + 11, x + 7, y + 11);
+       g.drawLine(x + 2, y + 10, x + 3, y + 10);
+       g.drawLine(x + 1, y + 9, x + 1, y + 8);
+       g.drawLine(x, y + 7, x, y + 4);
+       g.drawLine(x + 1, y + 2, x + 1, y + 3);
+ 
+       if (b.getModel().isArmed())
+         {
+           g.setColor(Color.GRAY);
+           g.drawLine(x + 4, y + 1, x + 7, y + 1);
+           g.drawLine(x + 4, y + 10, x + 7, y + 10);
+           g.drawLine(x + 1, y + 4, x + 1, y + 7);
+           g.drawLine(x + 10, y + 4, x + 10, y + 7);
+           g.fillRect(x + 2, y + 2, 8, 8);
+         }
+       else 
+         {
+           // only draw inner highlight if not filled
+           if (b.isEnabled())
+             {
+               g.setColor(Color.WHITE);
+           
+               g.drawLine(x + 2, y + 8, x + 2, y + 9);
+               g.drawLine(x + 1, y + 4, x + 1, y + 7);
+               g.drawLine(x + 2, y + 2, x + 2, y + 3);
+               g.drawLine(x + 3, y + 2, x + 3, y + 2);
+               g.drawLine(x + 4, y + 1, x + 7, y + 1);
+               g.drawLine(x + 8, y + 2, x + 9, y + 2);
+             }
+         }
+ 
+       // draw outer highlight
+       if (b.isEnabled())
+         {
+           g.setColor(Color.WHITE);
+           
+           // outer
+           g.drawLine(x + 10, y + 1, x + 10, y + 1);
+           g.drawLine(x + 11, y + 2, x + 11, y + 3);
+           g.drawLine(x + 12, y + 4, x + 12, y + 7);
+           g.drawLine(x + 11, y + 8, x + 11, y + 9);
+           g.drawLine(x + 10, y + 10, x + 10, y + 10);
+           g.drawLine(x + 8, y + 11, x + 9, y + 11);
+           g.drawLine(x + 4, y + 12, x + 7, y + 12);
+           g.drawLine(x + 2, y + 11, x + 3, y + 11);
+         }
+       
+       if (b.isSelected())
+         {
+           if (b.isEnabled())
+             g.setColor(Color.BLACK);
+           else
+             g.setColor(Color.GRAY);
+           g.drawLine(x + 4, y + 3, x + 7, y + 3);
+           g.fillRect(x + 3, y + 4, 6, 4);
+           g.drawLine(x + 4, y + 8, x + 7, y + 8);
+         }
+       g.setColor(savedColor);
+     }  
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,219 ----
+ /* ProgressBarDemo.java -- A demonstration of JProgressBars
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.examples.swing;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ 
+ import javax.swing.Box;
+ import javax.swing.BoxLayout;
+ import javax.swing.JButton;
+ import javax.swing.JFrame;
+ import javax.swing.JPanel;
+ import javax.swing.JProgressBar;
+ import javax.swing.JSlider;
+ import javax.swing.SwingUtilities;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ 
+ public class ProgressBarDemo
+   extends JFrame
+   implements ActionListener
+ {
+ 
+   /**
+    * Creates a new ProgressBarDemo window with the specified title.
+    *
+    * @param title the title of the program window
+    */
+   ProgressBarDemo(String title)
+   {
+     super(title);
+     JPanel content = createContent();
+     JPanel closePanel = new JPanel();
+     JButton closeButton = new JButton("Close");
+     closeButton.setActionCommand("CLOSE");
+     closeButton.addActionListener(this);
+     closePanel.add(closeButton);
+     getContentPane().add(content);
+     getContentPane().add(closePanel, BorderLayout.SOUTH);
+   }
+ 
+   static JPanel createContent()
+   {
+     JPanel content = new JPanel();
+     content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
+     JPanel horizontalProgressBar = createHorizontalProgressBar();
+     content.add(horizontalProgressBar);
+     content.add(Box.createVerticalStrut(10));
+     JPanel verticalProgressBar = createVerticalProgressBar();
+     content.add(verticalProgressBar);
+     return content;
+   }
+ 
+   private static JPanel createHorizontalProgressBar()
+   {
+     JPanel panel = new JPanel();
+     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+ 
+     // Plain progress bar.
+     final JProgressBar hor1 = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100);
+     panel.add(hor1);
+     final JSlider slider1 = new JSlider(JSlider.HORIZONTAL, 0, 100, 0);
+     slider1.addChangeListener(new ChangeListener()
+       {
+         public void stateChanged(ChangeEvent event)
+         {
+           hor1.setValue(slider1.getValue());
+         }
+       });
+     panel.add(slider1);
+ 
+     panel.add(Box.createVerticalStrut(5));
+ 
+     // Plain progress bar with some text.
+     final JProgressBar hor2 = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100);
+     hor2.setString("ProgressBar Demo");
+     hor2.setStringPainted(true);
+     panel.add(hor2);
+     final JSlider slider2 = new JSlider(JSlider.HORIZONTAL, 0, 100, 0);
+     slider2.addChangeListener(new ChangeListener()
+       {
+         public void stateChanged(ChangeEvent event)
+         {
+           hor2.setValue(slider2.getValue());
+         }
+       });
+     panel.add(slider2);
+ 
+     panel.add(Box.createVerticalStrut(5));
+ 
+     // Indeterminate progress bar.
+     final JProgressBar hor3 = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100);
+     hor3.setIndeterminate(true);
+     panel.add(hor3);
+ 
+     panel.add(Box.createVerticalStrut(5));
+ 
+     // Indeterminate progress bar with text.
+     final JProgressBar hor4 = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100);
+     hor4.setIndeterminate(true);
+     hor4.setString("Indeterminate ProgressBar");
+     hor4.setStringPainted(true);
+     panel.add(hor4);
+ 
+     return panel;
+   }
+ 
+   private static JPanel createVerticalProgressBar()
+   {
+     JPanel panel = new JPanel();
+     panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
+     final JProgressBar vert = new JProgressBar(JProgressBar.VERTICAL, 0, 100);
+     panel.add(vert);
+     final JSlider slider = new JSlider(JSlider.VERTICAL, 0, 100, 0);
+     slider.addChangeListener(new ChangeListener()
+       {
+         public void stateChanged(ChangeEvent event)
+         {
+           vert.setValue(slider.getValue());
+         }
+       });
+     panel.add(slider);
+ 
+     panel.add(Box.createHorizontalStrut(5));
+ 
+     final JProgressBar vert2 = new JProgressBar(JProgressBar.VERTICAL, 0, 100);
+     vert2.setString("ProgressBar Demo");
+     panel.add(vert2);
+     vert2.setStringPainted(true);
+     final JSlider slider2 = new JSlider(JSlider.VERTICAL, 0, 100, 0);
+     slider2.addChangeListener(new ChangeListener()
+       {
+         public void stateChanged(ChangeEvent event)
+         {
+           vert2.setValue(slider2.getValue());
+         }
+       });
+     panel.add(slider2);
+ 
+     panel.add(Box.createHorizontalStrut(5));
+ 
+     // Indeterminate progress bar.
+     final JProgressBar vert3 = new JProgressBar(JProgressBar.VERTICAL, 0, 100);
+     vert3.setIndeterminate(true);
+     panel.add(vert3);
+ 
+     panel.add(Box.createHorizontalStrut(5));
+ 
+     // Indeterminate progress bar with text.
+     final JProgressBar vert4 = new JProgressBar(JProgressBar.VERTICAL, 0, 100);
+     vert4.setIndeterminate(true);
+     vert4.setString("Indeterminate ProgressBar");
+     vert4.setStringPainted(true);
+     panel.add(vert4);
+     return panel;
+   }
+ 
+   public void actionPerformed(ActionEvent event)
+   {
+     // TODO Auto-generated method stub
+     
+   }
+ 
+   /**
+    * The entry point when running as a standalone program.
+    *
+    * @param args command line arguments
+    */
+   public static void main(String[] args)
+   {
+     SwingUtilities.invokeLater(
+       new Runnable()
+         {
+           public void run()
+           {
+             ProgressBarDemo app = new ProgressBarDemo("ProgressBar Demo");
+             app.pack();
+             app.setVisible(true);
+           }
+         });
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,141 ----
+ /* ScrollBarDemo.java -- An example showing scroll bars in Swing.
+    Copyright (C) 2005,  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ */
+ 
+ 
+ package gnu.classpath.examples.swing;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.GridLayout;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ 
+ import javax.swing.JButton;
+ import javax.swing.JFrame;
+ import javax.swing.JPanel;
+ import javax.swing.JScrollBar;
+ 
+ /**
+  * A simple scroll bar demo showing various scroll bars in different states.
+  */
+ public class ScrollBarDemo 
+   extends JFrame 
+   implements ActionListener 
+ {
+ 
+   /**
+    * Creates a new demo instance.
+    * 
+    * @param title  the frame title.
+    */
+   public ScrollBarDemo(String title) 
+   {
+     super(title);
+     JPanel content = createContent();
+     JPanel closePanel = new JPanel();
+     JButton closeButton = new JButton("Close");
+     closeButton.setActionCommand("CLOSE");
+     closeButton.addActionListener(this);
+     closePanel.add(closeButton);
+     content.add(closePanel, BorderLayout.SOUTH);
+     getContentPane().add(content);
+   }
+        
+   /**
+    * Returns a panel with the demo content.  The panel
+    * uses a BorderLayout(), and the BorderLayout.SOUTH area
+    * is empty, to allow callers to add controls to the 
+    * bottom of the panel if they want to (a close button is
+    * added if this demo is being run as a standalone demo).
+    */       
+   JPanel createContent() 
+   {
+     JPanel content = new JPanel(new BorderLayout());
+     JPanel panel = createScrollBarPanel();
+     content.add(panel);
+     return content;        
+   }
+     
+   private JPanel createScrollBarPanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     
+     JPanel horizontalPanel = new JPanel();
+         
+     JScrollBar scroll1a = new JScrollBar(JScrollBar.HORIZONTAL);
+     JScrollBar scroll1b = new JScrollBar(JScrollBar.HORIZONTAL);
+     scroll1b.setEnabled(false);
+     JScrollBar scroll1c = new JScrollBar(JScrollBar.HORIZONTAL);
+     scroll1c.putClientProperty("JScrollBar.isFreeStanding", Boolean.FALSE);
+     JScrollBar scroll1d = new JScrollBar(JScrollBar.HORIZONTAL);
+     scroll1d.putClientProperty("JScrollBar.isFreeStanding", Boolean.FALSE);
+     scroll1d.setEnabled(false);
+     horizontalPanel.add(scroll1a);
+     horizontalPanel.add(scroll1b);
+     horizontalPanel.add(scroll1c);
+     horizontalPanel.add(scroll1d);
+         
+     panel.add(horizontalPanel, BorderLayout.NORTH);
+      
+     JPanel verticalPanel = new JPanel();
+     verticalPanel.setLayout(new GridLayout(1, 7));
+         
+     JScrollBar scroll2a = new JScrollBar(JScrollBar.VERTICAL);
+     JScrollBar scroll2b = new JScrollBar(JScrollBar.VERTICAL);
+     scroll2b.setEnabled(false);
+     JScrollBar scroll2c = new JScrollBar(JScrollBar.VERTICAL);
+     scroll2c.putClientProperty("JScrollBar.isFreeStanding", Boolean.FALSE);
+     JScrollBar scroll2d = new JScrollBar(JScrollBar.VERTICAL);
+     scroll2d.setEnabled(false);
+     scroll2d.putClientProperty("JScrollBar.isFreeStanding", Boolean.FALSE);
+       
+     verticalPanel.add(scroll2a);
+     verticalPanel.add(new JPanel());
+     verticalPanel.add(scroll2b);
+     verticalPanel.add(new JPanel());
+     verticalPanel.add(scroll2c);
+     verticalPanel.add(new JPanel());
+     verticalPanel.add(scroll2d);
+         
+     panel.add(verticalPanel, BorderLayout.EAST);
+         
+     JPanel centerPanel = new JPanel(new GridLayout(1, 2));
+     centerPanel.add(new JScrollBar(JScrollBar.HORIZONTAL));
+     centerPanel.add(new JScrollBar(JScrollBar.VERTICAL));
+     panel.add(centerPanel);
+     return panel;        
+   }
+     
+   public void actionPerformed(ActionEvent e) 
+   {
+     if (e.getActionCommand().equals("CLOSE"))
+     {
+       System.exit(0);
+     }
+   }
+ 
+   public static void main(String[] args) 
+   {
+     ScrollBarDemo app = new ScrollBarDemo("ScrollBar Demo");
+     app.pack();
+     app.setVisible(true);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,249 ----
+ /* SliderDemo.java -- An example showing JSlider in various configurations.
+    Copyright (C) 2005,  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ */
+ 
+ 
+ package gnu.classpath.examples.swing;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.GridLayout;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ 
+ import javax.swing.JButton;
+ import javax.swing.JCheckBox;
+ import javax.swing.JFrame;
+ import javax.swing.JPanel;
+ import javax.swing.JSlider;
+ 
+ public class SliderDemo extends JFrame implements ActionListener 
+ {
+    
+   JSlider hslider1;
+   JSlider hslider2;
+   JSlider hslider3;
+   JSlider hslider4;
+   JSlider hslider5;
+   JSlider hslider6;
+   JSlider hslider7;
+   JSlider hslider8;
+   
+   JSlider vslider1;
+   JSlider vslider2;
+   JSlider vslider3;
+   JSlider vslider4;
+   JSlider vslider5;
+   JSlider vslider6;
+   JSlider vslider7;
+   JSlider vslider8;
+ 
+   JCheckBox enabledCheckBox;
+   
+   public SliderDemo(String frameTitle) 
+   {
+     super(frameTitle);
+     JPanel content = createContent();
+     JPanel closePanel = new JPanel();
+     JButton closeButton = new JButton("Close");
+     closeButton.setActionCommand("CLOSE");
+     closeButton.addActionListener(this);
+     closePanel.add(closeButton);
+     content.add(closePanel, BorderLayout.SOUTH);
+     getContentPane().add(content);
+   }
+        
+   /**
+    * Returns a panel with the demo content.  The panel
+    * uses a BorderLayout(), and the BorderLayout.SOUTH area
+    * is empty, to allow callers to add controls to the 
+    * bottom of the panel if they want to (a close button is
+    * added if this demo is being run as a standalone demo).
+    */       
+   JPanel createContent() 
+   {
+     JPanel content = new JPanel(new BorderLayout());
+     JPanel panel = new JPanel(new GridLayout(1, 2));
+     panel.add(createHorizontalPanel());
+     panel.add(createVerticalPanel());
+     enabledCheckBox = new JCheckBox("Enabled");
+     enabledCheckBox.setSelected(true);
+     enabledCheckBox.setActionCommand("TOGGLE_ENABLED");
+     enabledCheckBox.addActionListener(this);
+     JPanel checkBoxPanel = new JPanel();
+     checkBoxPanel.add(enabledCheckBox);
+     JPanel panel2 = new JPanel(new BorderLayout());
+     panel2.add(panel);
+     panel2.add(checkBoxPanel, BorderLayout.SOUTH);
+     content.add(panel2);
+     return content;        
+   }
+     
+   private JPanel createHorizontalPanel() 
+   {
+     JPanel panel = new JPanel(new GridLayout(8, 1));
+   
+     hslider1 = new JSlider(JSlider.HORIZONTAL, 0, 100, 35);
+     panel.add(hslider1);
+         
+     hslider2 = new JSlider(JSlider.HORIZONTAL, 0, 100, 35);
+     hslider2.setMajorTickSpacing(20);
+     hslider2.setMinorTickSpacing(5);
+     hslider2.setPaintTicks(true);
+     panel.add(hslider2);
+ 
+     hslider3 = new JSlider(JSlider.HORIZONTAL, 0, 100, 35);
+     hslider3.setMajorTickSpacing(20);
+     hslider3.setMinorTickSpacing(5);
+     hslider3.setPaintLabels(true);
+     hslider3.setPaintTicks(true);
+     panel.add(hslider3);
+ 
+     hslider4 = new JSlider(JSlider.HORIZONTAL, 0, 100, 35);
+     hslider4.putClientProperty("JSlider.isFilled", Boolean.TRUE);
+     hslider4.setMajorTickSpacing(20);
+     hslider4.setMinorTickSpacing(5);
+     hslider4.setPaintLabels(true);
+     hslider4.setPaintTicks(true);
+     panel.add(hslider4);
+ 
+     hslider5 = new JSlider(JSlider.HORIZONTAL, 0, 100, 35);
+     hslider5.setInverted(true);
+     panel.add(hslider5);
+         
+     hslider6 = new JSlider(JSlider.HORIZONTAL, 0, 100, 35);
+     hslider6.setInverted(true);
+     hslider6.setMajorTickSpacing(20);
+     hslider6.setMinorTickSpacing(5);
+     hslider6.setPaintTicks(true);
+     panel.add(hslider6);
+ 
+     hslider7 = new JSlider(JSlider.HORIZONTAL, 0, 100, 35);
+     hslider7.setInverted(true);
+     hslider7.setMajorTickSpacing(20);
+     hslider7.setMinorTickSpacing(5);
+     hslider7.setPaintLabels(true);
+     hslider7.setPaintTicks(true);
+     panel.add(hslider7);
+ 
+     hslider8 = new JSlider(JSlider.HORIZONTAL, 0, 100, 35);
+     hslider8.putClientProperty("JSlider.isFilled", Boolean.TRUE);
+     hslider8.setInverted(true);
+     hslider8.setMajorTickSpacing(20);
+     hslider8.setMinorTickSpacing(5);
+     hslider8.setPaintLabels(true);
+     hslider8.setPaintTicks(true);
+     panel.add(hslider8);
+ 
+     return panel;
+   }
+     
+   private JPanel createVerticalPanel() 
+   {
+     JPanel panel = new JPanel(new GridLayout(1, 8));
+   
+     vslider1 = new JSlider(JSlider.VERTICAL, 0, 100, 35);
+     panel.add(vslider1);
+         
+     vslider2 = new JSlider(JSlider.VERTICAL, 0, 100, 35);
+     vslider2.setMajorTickSpacing(20);
+     vslider2.setMinorTickSpacing(5);
+     vslider2.setPaintTicks(true);
+     panel.add(vslider2);
+ 
+     vslider3 = new JSlider(JSlider.VERTICAL, 0, 100, 35);
+     vslider3.setMajorTickSpacing(20);
+     vslider3.setMinorTickSpacing(5);
+     vslider3.setPaintLabels(true);
+     vslider3.setPaintTicks(true);
+     panel.add(vslider3);
+ 
+     vslider4 = new JSlider(JSlider.VERTICAL, 0, 100, 35);
+     vslider4.putClientProperty("JSlider.isFilled", Boolean.TRUE);
+     vslider4.setMajorTickSpacing(20);
+     vslider4.setMinorTickSpacing(5);
+     vslider4.setPaintLabels(true);
+     vslider4.setPaintTicks(true);
+     panel.add(vslider4);
+ 
+     vslider5 = new JSlider(JSlider.VERTICAL, 0, 100, 35);
+     vslider5.setInverted(true);
+     panel.add(vslider5);
+         
+     vslider6 = new JSlider(JSlider.VERTICAL, 0, 100, 35);
+     vslider6.setInverted(true);
+     vslider6.setMajorTickSpacing(20);
+     vslider6.setMinorTickSpacing(5);
+     vslider6.setPaintTicks(true);
+     panel.add(vslider6);
+ 
+     vslider7 = new JSlider(JSlider.VERTICAL, 0, 100, 35);
+     vslider7.setInverted(true);
+     vslider7.setMajorTickSpacing(20);
+     vslider7.setMinorTickSpacing(5);
+     vslider7.setPaintLabels(true);
+     vslider7.setPaintTicks(true);
+     panel.add(vslider7);
+ 
+     vslider8 = new JSlider(JSlider.VERTICAL, 0, 100, 35);
+     vslider8.putClientProperty("JSlider.isFilled", Boolean.TRUE);
+     vslider8.setInverted(true);
+     vslider8.setMajorTickSpacing(20);
+     vslider8.setMinorTickSpacing(5);
+     vslider8.setPaintLabels(true);
+     vslider8.setPaintTicks(true);
+     panel.add(vslider8);
+     return panel;
+   }
+     
+   public void actionPerformed(ActionEvent e) 
+   {
+     if (e.getActionCommand().equals("CLOSE"))
+     {
+       System.exit(0);
+     }
+     else if (e.getActionCommand().equals("TOGGLE_ENABLED"))
+     {
+       boolean enabled = enabledCheckBox.isSelected();
+       hslider1.setEnabled(enabled);
+       hslider2.setEnabled(enabled);
+       hslider3.setEnabled(enabled);
+       hslider4.setEnabled(enabled);
+       hslider5.setEnabled(enabled);
+       hslider6.setEnabled(enabled);
+       hslider7.setEnabled(enabled);
+       hslider8.setEnabled(enabled);
+       vslider1.setEnabled(enabled);
+       vslider2.setEnabled(enabled);
+       vslider3.setEnabled(enabled);
+       vslider4.setEnabled(enabled);
+       vslider5.setEnabled(enabled);
+       vslider6.setEnabled(enabled);
+       vslider7.setEnabled(enabled);
+       vslider8.setEnabled(enabled);
+     }
+   }
+   public static void main(String[] args) 
+   {
+     SliderDemo app = new SliderDemo("Slider Demo");
+     app.pack();
+     app.setVisible(true);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java
*** gcc-4.0.2/libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,488 ----
+ /* TextFieldDemo.java -- An example showing various textfields in Swing.
+    Copyright (C) 2005,  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath examples.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ */
+ 
+ 
+ package gnu.classpath.examples.swing;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.Color;
+ import java.awt.Font;
+ import java.awt.Graphics;
+ import java.awt.GridLayout;
+ import java.awt.Rectangle;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ 
+ import javax.swing.BorderFactory;
+ import javax.swing.Box;
+ import javax.swing.BoxLayout;
+ import javax.swing.JButton;
+ import javax.swing.JCheckBox;
+ import javax.swing.JFrame;
+ import javax.swing.JPanel;
+ import javax.swing.JTextField;
+ import javax.swing.text.BadLocationException;
+ import javax.swing.text.DefaultCaret;
+ import javax.swing.text.JTextComponent;
+ 
+ /**
+  * A simple textfield demo showing various textfields in different states.
+  */
+ public class TextFieldDemo 
+   extends JFrame
+   implements ActionListener
+ {
+ 
+   /**
+    * A custom caret for demonstration purposes. This class is inspired by the
+    * CornerCaret from the OReilly Swing book.
+    *
+    * @author Roman Kennke (kennke@aicas.com)
+    */
+   static class CornerCaret extends DefaultCaret
+   {
+     public CornerCaret()
+     {
+       super();
+       setBlinkRate(500);
+     }
+ 
+     protected synchronized void damage(Rectangle r)
+     {
+       if (r == null) return;
+       x = r.x;
+       y = r.y + (r.height * 4 / 5 - 3);
+       width = 5;
+       height = 5;
+       repaint();
+     }
+ 
+     public void paint(Graphics g)
+     {
+       JTextComponent comp = getComponent();
+       if (comp == null) return;
+       int dot = getDot();
+       Rectangle r = null;
+       try
+         {
+           r = comp.modelToView(dot);
+         }
+       catch (BadLocationException e)
+         {
+           return;
+         }
+       if (r == null) return;
+       int dist = r.height * 4 / 5 - 3;
+       if ((x != r.x) || (y != r.y + dist))
+         {
+           repaint();
+           x = r.x;
+           y = r.y + dist;
+           width = 5;
+           height = 5;
+         }
+       if (isVisible())
+         {
+           g.drawLine(r.x, r.y + dist, r.x, r.y + dist + 4);
+           g.drawLine(r.x, r.y + dist + 4, r.x + 4, r.y + dist + 4);
+         }
+     }
+   }
+ 
+   /**
+    * The left aligned textfields and state buttons.
+    */
+   JTextField textfield1;
+   JTextField textfield2;  
+   JTextField textfield3;
+   JCheckBox enabled1;
+   JCheckBox editable1;
+ JPanel textFieldPanel1;
+   /**
+    * The right aligned textfields and state buttons.
+    */
+   JTextField textfield4;
+   JTextField textfield5;  
+   JTextField textfield6;
+   JCheckBox enabled2;
+   JCheckBox editable2;
+ 
+   /**
+    * The centered textfields and state buttons.
+    */
+   JTextField textfield7;
+   JTextField textfield8;  
+   JTextField textfield9;
+   JCheckBox enabled3;
+   JCheckBox editable3;
+ 
+   /**
+    * The custom colored textfields and state buttons.
+    */
+   JTextField textfield10;
+   JTextField textfield11;  
+   JTextField textfield12;
+   JTextField textfield13;
+   JTextField textfield14;
+   JCheckBox enabled4;
+   JCheckBox editable4;
+ 
+   /**
+    * Some miscallenous textfield demos.
+    */
+   JTextField textfield15;
+   JTextField textfield16;
+   JCheckBox enabled5;
+   JCheckBox editable5;
+ 
+   /**
+    * Creates a new demo instance.
+    * 
+    * @param title  the frame title.
+    */
+   public TextFieldDemo(String title) 
+   {
+     super(title);
+     JPanel content = createContent();
+     JPanel closePanel = new JPanel();
+     JButton closeButton = new JButton("Close");
+     closeButton.setActionCommand("CLOSE");
+     closeButton.addActionListener(this);
+     closePanel.add(closeButton);
+     content.add(closePanel, BorderLayout.SOUTH);
+     getContentPane().add(content);
+   }
+ 
+   /**
+    * Returns a panel with the demo content.  The panel
+    * uses a BorderLayout(), and the BorderLayout.SOUTH area
+    * is empty, to allow callers to add controls to the 
+    * bottom of the panel if they want to (a close button is
+    * added if this demo is being run as a standalone demo).
+    */       
+   JPanel createContent() 
+   {
+     JPanel content = new JPanel(new BorderLayout());
+     JPanel panel = new JPanel(new GridLayout(5, 1));
+     panel.add(createLeftAlignedPanel());
+     panel.add(createRightAlignedPanel());
+     panel.add(createCenteredPanel());
+     panel.add(createCustomColoredPanel());
+     panel.add(createMiscPanel());
+     content.add(panel);
+     //content.setPreferredSize(new Dimension(400, 300));
+     return content;        
+   }
+     
+   private JPanel createLeftAlignedPanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     panel.setBorder(BorderFactory.createTitledBorder("Left aligned"));
+     
+     textFieldPanel1 = new JPanel();
+     textFieldPanel1.setLayout(new BoxLayout(textFieldPanel1, BoxLayout.X_AXIS));
+ 
+     textfield1 = new JTextField("Hello World!");
+     textfield1.setHorizontalAlignment(JTextField.LEFT);
+     textfield1.setFont(new Font("Dialog", Font.PLAIN, 8));
+     textFieldPanel1.add(textfield1);
+ 
+     textfield2 = new JTextField("Hello World!");
+     textfield2.setHorizontalAlignment(JTextField.LEFT);
+     textfield2.setFont(new Font("Dialog", Font.ITALIC, 12));
+     textFieldPanel1.add(textfield2);
+ 
+     textfield3 = new JTextField("Hello World!");
+     textfield3.setHorizontalAlignment(JTextField.LEFT);
+     textfield3.setFont(new Font("Dialog", Font.BOLD, 14));
+     textFieldPanel1.add(textfield3);
+ 
+     panel.add(textFieldPanel1);
+ 
+     JPanel statePanel = new JPanel();
+     statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+     statePanel.add(Box.createVerticalGlue());
+     enabled1 = new JCheckBox("enabled");
+     enabled1.setSelected(true);
+     enabled1.addActionListener(this);
+     enabled1.setActionCommand("ENABLED1");
+     statePanel.add(enabled1);
+     editable1 = new JCheckBox("editable");
+     editable1.setSelected(true);
+     editable1.addActionListener(this);
+     editable1.setActionCommand("EDITABLE1");
+     statePanel.add(editable1);
+     statePanel.add(Box.createVerticalGlue());
+     panel.add(statePanel, BorderLayout.EAST);
+ 
+     return panel;
+   }
+ 
+   private JPanel createRightAlignedPanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     panel.setBorder(BorderFactory.createTitledBorder("Right aligned"));
+     
+     JPanel textFieldPanel = new JPanel();
+     textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
+ 
+     textfield4 = new JTextField("Hello World!");
+     textfield4.setHorizontalAlignment(JTextField.RIGHT);
+     textfield4.setFont(new Font("Dialog", Font.PLAIN, 8));
+     textFieldPanel.add(textfield4);
+ 
+     textfield5 = new JTextField("Hello World!");
+     textfield5.setHorizontalAlignment(JTextField.RIGHT);
+     textfield5.setFont(new Font("Dialog", Font.ITALIC, 12));
+     textFieldPanel.add(textfield5);
+ 
+     textfield6 = new JTextField("Hello World!");
+     textfield6.setHorizontalAlignment(JTextField.RIGHT);
+     textfield6.setFont(new Font("Dialog", Font.BOLD, 14));
+     textFieldPanel.add(textfield6);
+ 
+     panel.add(textFieldPanel);
+ 
+     JPanel statePanel = new JPanel();
+     statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+     statePanel.add(Box.createVerticalGlue());
+     enabled2 = new JCheckBox("enabled");
+     enabled2.setSelected(true);
+     enabled2.addActionListener(this);
+     enabled2.setActionCommand("ENABLED2");
+     statePanel.add(enabled2);
+     editable2 = new JCheckBox("editable");
+     editable2.setSelected(true);
+     editable2.addActionListener(this);
+     editable2.setActionCommand("EDITABLE2");
+     statePanel.add(editable2);
+     statePanel.add(Box.createVerticalGlue());
+     panel.add(statePanel, BorderLayout.EAST);
+ 
+     return panel;
+   }
+ 
+   private JPanel createCenteredPanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     panel.setBorder(BorderFactory.createTitledBorder("Centered"));
+     
+     JPanel textFieldPanel = new JPanel();
+     textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
+ 
+     textfield7 = new JTextField("Hello World!");
+     textfield7.setHorizontalAlignment(JTextField.CENTER);
+     textfield7.setFont(new Font("Dialog", Font.PLAIN, 8));
+     textFieldPanel.add(textfield7);
+ 
+     textfield8 = new JTextField("Hello World!");
+     textfield8.setHorizontalAlignment(JTextField.CENTER);
+     textfield8.setFont(new Font("Dialog", Font.ITALIC, 12));
+     textFieldPanel.add(textfield8);
+ 
+     textfield9 = new JTextField("Hello World!");
+     textfield9.setHorizontalAlignment(JTextField.CENTER);
+     textfield9.setFont(new Font("Dialog", Font.BOLD, 14));
+     textFieldPanel.add(textfield9);
+ 
+     panel.add(textFieldPanel);
+ 
+     JPanel statePanel = new JPanel();
+     statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+     statePanel.add(Box.createVerticalGlue());
+     enabled3 = new JCheckBox("enabled");
+     enabled3.setSelected(true);
+     enabled3.addActionListener(this);
+     enabled3.setActionCommand("ENABLED3");
+     statePanel.add(enabled3);
+     editable3 = new JCheckBox("editable");
+     editable3.setSelected(true);
+     editable3.addActionListener(this);
+     editable3.setActionCommand("EDITABLE3");
+     statePanel.add(editable3);
+     statePanel.add(Box.createVerticalGlue());
+     panel.add(statePanel, BorderLayout.EAST);
+ 
+     return panel;
+   }
+ 
+   private JPanel createCustomColoredPanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     
+     JPanel textFieldPanel = new JPanel();
+     panel.setBorder(BorderFactory.createTitledBorder("Custom colors"));
+     textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
+ 
+     textfield10 = new JTextField("custom foreground");
+     textfield10.setForeground(Color.GREEN);
+     textFieldPanel.add(textfield10);
+ 
+     textfield11 = new JTextField("custom background");
+     textfield11.setForeground(Color.YELLOW);
+     textFieldPanel.add(textfield11);
+ 
+     textfield12 = new JTextField("custom disabled textcolor");
+     textfield12.setDisabledTextColor(Color.BLUE);
+     textFieldPanel.add(textfield12);
+ 
+     textfield13 = new JTextField("custom selected text color");
+     textfield13.setSelectedTextColor(Color.RED);
+     textFieldPanel.add(textfield13);
+ 
+     textfield14 = new JTextField("custom selection color");
+     textfield14.setSelectionColor(Color.CYAN);
+     textFieldPanel.add(textfield14);
+ 
+     panel.add(textFieldPanel);
+ 
+     JPanel statePanel = new JPanel();
+     statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+     statePanel.add(Box.createVerticalGlue());
+     enabled4 = new JCheckBox("enabled");
+     enabled4.setSelected(true);
+     enabled4.addActionListener(this);
+     enabled4.setActionCommand("ENABLED4");
+     statePanel.add(enabled4);
+     editable4 = new JCheckBox("editable");
+     editable4.setSelected(true);
+     editable4.addActionListener(this);
+     editable4.setActionCommand("EDITABLE4");
+     statePanel.add(editable4);
+     statePanel.add(Box.createVerticalGlue());
+     panel.add(statePanel, BorderLayout.EAST);
+ 
+     return panel;
+   }
+ 
+   private JPanel createMiscPanel() 
+   {
+     JPanel panel = new JPanel(new BorderLayout());
+     panel.setBorder(BorderFactory.createTitledBorder("Miscallenous"));
+     
+     JPanel textFieldPanel = new JPanel();
+     textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
+ 
+     textfield15 = new JTextField("Custom Caret");
+     textfield15.setCaret(new CornerCaret());
+     textFieldPanel.add(textfield15);
+ 
+     textfield16 = new JTextField("Custom Caret color");
+     textfield16.setCaretColor(Color.MAGENTA);
+     textFieldPanel.add(textfield16);
+ 
+     panel.add(textFieldPanel);
+ 
+     JPanel statePanel = new JPanel();
+     statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+     statePanel.add(Box.createVerticalGlue());
+     enabled5 = new JCheckBox("enabled");
+     enabled5.setSelected(true);
+     enabled5.addActionListener(this);
+     enabled5.setActionCommand("ENABLED5");
+     statePanel.add(enabled5);
+     editable5 = new JCheckBox("editable");
+     editable5.setSelected(true);
+     editable5.addActionListener(this);
+     editable5.setActionCommand("EDITABLE5");
+     statePanel.add(editable5);
+     statePanel.add(Box.createVerticalGlue());
+     panel.add(statePanel, BorderLayout.EAST);
+ 
+     return panel;
+   }
+ 
+   public void actionPerformed(ActionEvent e) 
+   {
+     if (e.getActionCommand().equals("CLOSE"))
+       {
+         System.exit(0);
+       }
+     else if (e.getActionCommand().equals("ENABLED1"))
+       {
+         boolean enabled = enabled1.isSelected();
+         textfield1.setEnabled(enabled);
+         textfield2.setEnabled(enabled);
+         textfield3.setEnabled(enabled);
+       }
+     else if (e.getActionCommand().equals("EDITABLE1"))
+       {
+         boolean editable = editable1.isSelected();
+         textfield1.setEditable(editable);
+         textfield2.setEditable(editable);
+         textfield3.setEditable(editable);
+       }
+     else if (e.getActionCommand().equals("ENABLED2"))
+       {
+         boolean enabled = enabled2.isSelected();
+         textfield4.setEnabled(enabled);
+         textfield5.setEnabled(enabled);
+         textfield6.setEnabled(enabled);
+       }
+     else if (e.getActionCommand().equals("EDITABLE2"))
+       {
+         boolean editable = editable2.isSelected();
+         textfield4.setEditable(editable);
+         textfield5.setEditable(editable);
+         textfield6.setEditable(editable);
+       }
+     else if (e.getActionCommand().equals("ENABLED3"))
+       {
+         boolean enabled = enabled3.isSelected();
+         textfield7.setEnabled(enabled);
+         textfield8.setEnabled(enabled);
+         textfield9.setEnabled(enabled);
+       }
+     else if (e.getActionCommand().equals("EDITABLE3"))
+       {
+         boolean editable = editable3.isSelected();
+         textfield7.setEditable(editable);
+         textfield8.setEditable(editable);
+         textfield9.setEditable(editable);
+       }
+     else if (e.getActionCommand().equals("ENABLED4"))
+       {
+         boolean enabled = enabled4.isSelected();
+         textfield10.setEnabled(enabled);
+         textfield11.setEnabled(enabled);
+         textfield12.setEnabled(enabled);
+         textfield13.setEnabled(enabled);
+         textfield14.setEnabled(enabled);
+       }
+     else if (e.getActionCommand().equals("EDITABLE4"))
+       {
+         boolean editable = editable4.isSelected();
+         textfield10.setEditable(editable);
+         textfield11.setEditable(editable);
+         textfield12.setEditable(editable);
+         textfield13.setEditable(editable);
+         textfield14.setEditable(editable);
+       }
+   }
+ 
+   public static void main(String[] args) 
+   {
+     TextFieldDemo app = new TextFieldDemo("TextField Demo");
+     app.pack();
+     app.setVisible(true);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/Makefile.am gcc-4.1.0/libjava/classpath/external/Makefile.am
*** gcc-4.0.2/libjava/classpath/external/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/Makefile.am	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,5 ----
+ ## Input file for automake to generate the Makefile.in used by configure
+ 
+ SUBDIRS = sax w3c_dom
+ 
+ EXTRA_DIST = README
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/Makefile.in gcc-4.1.0/libjava/classpath/external/Makefile.in
*** gcc-4.0.2/libjava/classpath/external/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/Makefile.in	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,556 ----
+ # Makefile.in generated by automake 1.9.3 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ # 2003, 2004  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+ INSTALL_HEADER = $(INSTALL_DATA)
+ transform = $(program_transform_name)
+ NORMAL_INSTALL = :
+ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = external
+ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ 	$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ 	$(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/iconv.m4 \
+ 	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ 	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = $(top_builddir)/include/config.h
+ CONFIG_CLEAN_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ 	html-recursive info-recursive install-data-recursive \
+ 	install-exec-recursive install-info-recursive \
+ 	install-recursive installcheck-recursive installdirs-recursive \
+ 	pdf-recursive ps-recursive uninstall-info-recursive \
+ 	uninstall-recursive
+ ETAGS = etags
+ CTAGS = ctags
+ DIST_SUBDIRS = $(SUBDIRS)
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
+ BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
+ CLASSPATH_MODULE = @CLASSPATH_MODULE@
+ CP = @CP@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CREATE_ALSA_LIBRARIES_FALSE = @CREATE_ALSA_LIBRARIES_FALSE@
+ CREATE_ALSA_LIBRARIES_TRUE = @CREATE_ALSA_LIBRARIES_TRUE@
+ CREATE_API_DOCS_FALSE = @CREATE_API_DOCS_FALSE@
+ CREATE_API_DOCS_TRUE = @CREATE_API_DOCS_TRUE@
+ CREATE_CORE_JNI_LIBRARIES_FALSE = @CREATE_CORE_JNI_LIBRARIES_FALSE@
+ CREATE_CORE_JNI_LIBRARIES_TRUE = @CREATE_CORE_JNI_LIBRARIES_TRUE@
+ CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
+ CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
+ CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
+ CREATE_GTK_PEER_LIBRARIES_TRUE = @CREATE_GTK_PEER_LIBRARIES_TRUE@
+ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
+ CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
+ CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
+ CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
+ CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
+ CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
+ CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
+ CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DATE = @DATE@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ ECJ = @ECJ@
+ EGREP = @EGREP@
+ ERROR_CFLAGS = @ERROR_CFLAGS@
+ EXAMPLESDIR = @EXAMPLESDIR@
+ EXEEXT = @EXEEXT@
+ FIND = @FIND@
+ FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+ FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
+ FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
+ FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
+ FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
+ FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
+ FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
+ FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
+ FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
+ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
+ GCJ = @GCJ@
+ GCJX = @GCJX@
+ GJDOC = @GJDOC@
+ GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
+ INSTALL_CLASS_FILES_FALSE = @INSTALL_CLASS_FILES_FALSE@
+ INSTALL_CLASS_FILES_TRUE = @INSTALL_CLASS_FILES_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_GLIBJ_ZIP_FALSE = @INSTALL_GLIBJ_ZIP_FALSE@
+ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
+ JAY = @JAY@
+ JAY_SKELETON = @JAY_SKELETON@
+ JIKES = @JIKES@
+ JIKESENCODING = @JIKESENCODING@
+ KJC = @KJC@
+ LDFLAGS = @LDFLAGS@
+ LIBDEBUG = @LIBDEBUG@
+ LIBICONV = @LIBICONV@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIBVERSION = @LIBVERSION@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MKDIR = @MKDIR@
+ MOC = @MOC@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
+ PANGOFT2_LIBS = @PANGOFT2_LIBS@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ QT_CFLAGS = @QT_CFLAGS@
+ QT_LIBS = @QT_LIBS@
+ RANLIB = @RANLIB@
+ REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
+ REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
+ REMOVE = @REMOVE@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
+ STRIP = @STRIP@
+ USER_CLASSLIB = @USER_CLASSLIB@
+ USER_JAVAH = @USER_JAVAH@
+ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
+ USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
+ USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
+ USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+ VERSION = @VERSION@
+ WARNING_CFLAGS = @WARNING_CFLAGS@
+ XML_CFLAGS = @XML_CFLAGS@
+ XML_LIBS = @XML_LIBS@
+ XSLT_CFLAGS = @XSLT_CFLAGS@
+ XSLT_LIBS = @XSLT_LIBS@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZIP = @ZIP@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
+ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ datadir = @datadir@
+ default_toolkit = @default_toolkit@
+ exec_prefix = @exec_prefix@
+ glibjdir = @glibjdir@
+ host = @host@
+ host_alias = @host_alias@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ nativelibdir = @nativelibdir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ vm_classes = @vm_classes@
+ SUBDIRS = sax w3c_dom
+ EXTRA_DIST = README
+ all: all-recursive
+ 
+ .SUFFIXES:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ 		&& exit 0; \
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+ 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  external/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --gnu  external/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+ 	  *config.status*) \
+ 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ 	  *) \
+ 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ 	esac;
+ 
+ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ 
+ # This directory's subdirectories are mostly independent; you can cd
+ # into them and run `make' without going through this Makefile.
+ # To change the values of `make' variables: instead of editing Makefiles,
+ # (1) if the variable is set in `config.status', edit `config.status'
+ #     (which will cause the Makefiles to be regenerated when you run `make');
+ # (2) otherwise, pass the desired values on the `make' command line.
+ $(RECURSIVE_TARGETS):
+ 	@set fnord $$MAKEFLAGS; amf=$$2; \
+ 	dot_seen=no; \
+ 	target=`echo $@ | sed s/-recursive//`; \
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  echo "Making $$target in $$subdir"; \
+ 	  if test "$$subdir" = "."; then \
+ 	    dot_seen=yes; \
+ 	    local_target="$$target-am"; \
+ 	  else \
+ 	    local_target="$$target"; \
+ 	  fi; \
+ 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ 	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ 	done; \
+ 	if test "$$dot_seen" = "no"; then \
+ 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ 	fi; test -z "$$fail"
+ 
+ mostlyclean-recursive clean-recursive distclean-recursive \
+ maintainer-clean-recursive:
+ 	@set fnord $$MAKEFLAGS; amf=$$2; \
+ 	dot_seen=no; \
+ 	case "$@" in \
+ 	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ 	  *) list='$(SUBDIRS)' ;; \
+ 	esac; \
+ 	rev=''; for subdir in $$list; do \
+ 	  if test "$$subdir" = "."; then :; else \
+ 	    rev="$$subdir $$rev"; \
+ 	  fi; \
+ 	done; \
+ 	rev="$$rev ."; \
+ 	target=`echo $@ | sed s/-recursive//`; \
+ 	for subdir in $$rev; do \
+ 	  echo "Making $$target in $$subdir"; \
+ 	  if test "$$subdir" = "."; then \
+ 	    local_target="$$target-am"; \
+ 	  else \
+ 	    local_target="$$target"; \
+ 	  fi; \
+ 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ 	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ 	done && test -z "$$fail"
+ tags-recursive:
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ 	done
+ ctags-recursive:
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ 	done
+ 
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '    { files[$$0] = 1; } \
+ 	       END { for (i in files) print i; }'`; \
+ 	mkid -fID $$unique
+ tags: TAGS
+ 
+ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+ 		$(TAGS_FILES) $(LISP)
+ 	tags=; \
+ 	here=`pwd`; \
+ 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ 	  include_option=--etags-include; \
+ 	  empty_fix=.; \
+ 	else \
+ 	  include_option=--include; \
+ 	  empty_fix=; \
+ 	fi; \
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  if test "$$subdir" = .; then :; else \
+ 	    test ! -f $$subdir/TAGS || \
+ 	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ 	  fi; \
+ 	done; \
+ 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '    { files[$$0] = 1; } \
+ 	       END { for (i in files) print i; }'`; \
+ 	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ 	  test -n "$$unique" || unique=$$empty_fix; \
+ 	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ 	    $$tags $$unique; \
+ 	fi
+ ctags: CTAGS
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+ 		$(TAGS_FILES) $(LISP)
+ 	tags=; \
+ 	here=`pwd`; \
+ 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '    { files[$$0] = 1; } \
+ 	       END { for (i in files) print i; }'`; \
+ 	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ 	     $$tags $$unique
+ 
+ GTAGS:
+ 	here=`$(am__cd) $(top_builddir) && pwd` \
+ 	  && cd $(top_srcdir) \
+ 	  && gtags -i $(GTAGS_ARGS) $$here
+ 
+ distclean-tags:
+ 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ 
+ distdir: $(DISTFILES)
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ 	list='$(DISTFILES)'; for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ 	  esac; \
+ 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ 	    dir="/$$dir"; \
+ 	    $(mkdir_p) "$(distdir)$$dir"; \
+ 	  else \
+ 	    dir=''; \
+ 	  fi; \
+ 	  if test -d $$d/$$file; then \
+ 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ 	    fi; \
+ 	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ 	  else \
+ 	    test -f $(distdir)/$$file \
+ 	    || cp -p $$d/$$file $(distdir)/$$file \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+ 	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ 	  if test "$$subdir" = .; then :; else \
+ 	    test -d "$(distdir)/$$subdir" \
+ 	    || $(mkdir_p) "$(distdir)/$$subdir" \
+ 	    || exit 1; \
+ 	    distdir=`$(am__cd) $(distdir) && pwd`; \
+ 	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ 	    (cd $$subdir && \
+ 	      $(MAKE) $(AM_MAKEFLAGS) \
+ 	        top_distdir="$$top_distdir" \
+ 	        distdir="$$distdir/$$subdir" \
+ 	        distdir) \
+ 	      || exit 1; \
+ 	  fi; \
+ 	done
+ check-am: all-am
+ check: check-recursive
+ all-am: Makefile
+ installdirs: installdirs-recursive
+ installdirs-am:
+ install: install-recursive
+ install-exec: install-exec-recursive
+ install-data: install-data-recursive
+ uninstall: uninstall-recursive
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-recursive
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+ 	@echo "it deletes files that may require special tools to rebuild."
+ clean: clean-recursive
+ 
+ clean-am: clean-generic clean-libtool mostlyclean-am
+ 
+ distclean: distclean-recursive
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-generic distclean-libtool \
+ 	distclean-tags
+ 
+ dvi: dvi-recursive
+ 
+ dvi-am:
+ 
+ html: html-recursive
+ 
+ info: info-recursive
+ 
+ info-am:
+ 
+ install-data-am:
+ 
+ install-exec-am:
+ 
+ install-info: install-info-recursive
+ 
+ install-man:
+ 
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-recursive
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-recursive
+ 
+ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+ 
+ pdf: pdf-recursive
+ 
+ pdf-am:
+ 
+ ps: ps-recursive
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am
+ 
+ uninstall-info: uninstall-info-recursive
+ 
+ .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ 	clean clean-generic clean-libtool clean-recursive ctags \
+ 	ctags-recursive distclean distclean-generic distclean-libtool \
+ 	distclean-recursive distclean-tags distdir dvi dvi-am html \
+ 	html-am info info-am install install-am install-data \
+ 	install-data-am install-exec install-exec-am install-info \
+ 	install-info-am install-man install-strip installcheck \
+ 	installcheck-am installdirs installdirs-am maintainer-clean \
+ 	maintainer-clean-generic maintainer-clean-recursive \
+ 	mostlyclean mostlyclean-generic mostlyclean-libtool \
+ 	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ 	uninstall uninstall-am uninstall-info-am
+ 
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/README gcc-4.1.0/libjava/classpath/external/README
*** gcc-4.0.2/libjava/classpath/external/README	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/README	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3 ----
+ This directory contains libraries maintained externally to GNU Classpath.
+ 
+ See the README files in the subdirectories for more information.
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/Makefile.am gcc-4.1.0/libjava/classpath/external/sax/Makefile.am
*** gcc-4.0.2/libjava/classpath/external/sax/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/Makefile.am	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,42 ----
+ ## Input file for automake to generate the Makefile.in used by configure
+ 
+ EXTRA_DIST = README \
+ org/xml/sax/ext/Attributes2.java \
+ org/xml/sax/ext/Attributes2Impl.java \
+ org/xml/sax/ext/DeclHandler.java \
+ org/xml/sax/ext/DefaultHandler2.java \
+ org/xml/sax/ext/EntityResolver2.java \
+ org/xml/sax/ext/LexicalHandler.java \
+ org/xml/sax/ext/Locator2.java \
+ org/xml/sax/ext/Locator2Impl.java \
+ org/xml/sax/ext/package.html \
+ org/xml/sax/helpers/AttributeListImpl.java \
+ org/xml/sax/helpers/AttributesImpl.java \
+ org/xml/sax/helpers/DefaultHandler.java \
+ org/xml/sax/helpers/LocatorImpl.java \
+ org/xml/sax/helpers/NamespaceSupport.java \
+ org/xml/sax/helpers/NewInstance.java \
+ org/xml/sax/helpers/ParserAdapter.java \
+ org/xml/sax/helpers/ParserFactory.java \
+ org/xml/sax/helpers/XMLFilterImpl.java \
+ org/xml/sax/helpers/XMLReaderAdapter.java \
+ org/xml/sax/helpers/XMLReaderFactory.java \
+ org/xml/sax/helpers/package.html \
+ org/xml/sax/AttributeList.java \
+ org/xml/sax/Attributes.java \
+ org/xml/sax/ContentHandler.java \
+ org/xml/sax/DTDHandler.java \
+ org/xml/sax/DocumentHandler.java \
+ org/xml/sax/EntityResolver.java \
+ org/xml/sax/ErrorHandler.java \
+ org/xml/sax/HandlerBase.java \
+ org/xml/sax/InputSource.java \
+ org/xml/sax/Locator.java \
+ org/xml/sax/Parser.java \
+ org/xml/sax/SAXException.java \
+ org/xml/sax/SAXNotRecognizedException.java \
+ org/xml/sax/SAXNotSupportedException.java \
+ org/xml/sax/SAXParseException.java \
+ org/xml/sax/XMLFilter.java \
+ org/xml/sax/XMLReader.java \
+ org/xml/sax/package.html
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/Makefile.in gcc-4.1.0/libjava/classpath/external/sax/Makefile.in
*** gcc-4.0.2/libjava/classpath/external/sax/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/Makefile.in	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,451 ----
+ # Makefile.in generated by automake 1.9.3 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ # 2003, 2004  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ top_builddir = ../..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+ INSTALL_HEADER = $(INSTALL_DATA)
+ transform = $(program_transform_name)
+ NORMAL_INSTALL = :
+ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = external/sax
+ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ 	$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ 	$(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/iconv.m4 \
+ 	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ 	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = $(top_builddir)/include/config.h
+ CONFIG_CLEAN_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
+ BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
+ CLASSPATH_MODULE = @CLASSPATH_MODULE@
+ CP = @CP@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CREATE_ALSA_LIBRARIES_FALSE = @CREATE_ALSA_LIBRARIES_FALSE@
+ CREATE_ALSA_LIBRARIES_TRUE = @CREATE_ALSA_LIBRARIES_TRUE@
+ CREATE_API_DOCS_FALSE = @CREATE_API_DOCS_FALSE@
+ CREATE_API_DOCS_TRUE = @CREATE_API_DOCS_TRUE@
+ CREATE_CORE_JNI_LIBRARIES_FALSE = @CREATE_CORE_JNI_LIBRARIES_FALSE@
+ CREATE_CORE_JNI_LIBRARIES_TRUE = @CREATE_CORE_JNI_LIBRARIES_TRUE@
+ CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
+ CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
+ CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
+ CREATE_GTK_PEER_LIBRARIES_TRUE = @CREATE_GTK_PEER_LIBRARIES_TRUE@
+ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
+ CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
+ CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
+ CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
+ CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
+ CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
+ CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
+ CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DATE = @DATE@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ ECJ = @ECJ@
+ EGREP = @EGREP@
+ ERROR_CFLAGS = @ERROR_CFLAGS@
+ EXAMPLESDIR = @EXAMPLESDIR@
+ EXEEXT = @EXEEXT@
+ FIND = @FIND@
+ FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+ FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
+ FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
+ FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
+ FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
+ FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
+ FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
+ FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
+ FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
+ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
+ GCJ = @GCJ@
+ GCJX = @GCJX@
+ GJDOC = @GJDOC@
+ GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
+ INSTALL_CLASS_FILES_FALSE = @INSTALL_CLASS_FILES_FALSE@
+ INSTALL_CLASS_FILES_TRUE = @INSTALL_CLASS_FILES_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_GLIBJ_ZIP_FALSE = @INSTALL_GLIBJ_ZIP_FALSE@
+ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
+ JAY = @JAY@
+ JAY_SKELETON = @JAY_SKELETON@
+ JIKES = @JIKES@
+ JIKESENCODING = @JIKESENCODING@
+ KJC = @KJC@
+ LDFLAGS = @LDFLAGS@
+ LIBDEBUG = @LIBDEBUG@
+ LIBICONV = @LIBICONV@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIBVERSION = @LIBVERSION@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MKDIR = @MKDIR@
+ MOC = @MOC@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
+ PANGOFT2_LIBS = @PANGOFT2_LIBS@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ QT_CFLAGS = @QT_CFLAGS@
+ QT_LIBS = @QT_LIBS@
+ RANLIB = @RANLIB@
+ REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
+ REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
+ REMOVE = @REMOVE@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
+ STRIP = @STRIP@
+ USER_CLASSLIB = @USER_CLASSLIB@
+ USER_JAVAH = @USER_JAVAH@
+ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
+ USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
+ USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
+ USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+ VERSION = @VERSION@
+ WARNING_CFLAGS = @WARNING_CFLAGS@
+ XML_CFLAGS = @XML_CFLAGS@
+ XML_LIBS = @XML_LIBS@
+ XSLT_CFLAGS = @XSLT_CFLAGS@
+ XSLT_LIBS = @XSLT_LIBS@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZIP = @ZIP@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
+ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ datadir = @datadir@
+ default_toolkit = @default_toolkit@
+ exec_prefix = @exec_prefix@
+ glibjdir = @glibjdir@
+ host = @host@
+ host_alias = @host_alias@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ nativelibdir = @nativelibdir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ vm_classes = @vm_classes@
+ EXTRA_DIST = README \
+ org/xml/sax/ext/Attributes2.java \
+ org/xml/sax/ext/Attributes2Impl.java \
+ org/xml/sax/ext/DeclHandler.java \
+ org/xml/sax/ext/DefaultHandler2.java \
+ org/xml/sax/ext/EntityResolver2.java \
+ org/xml/sax/ext/LexicalHandler.java \
+ org/xml/sax/ext/Locator2.java \
+ org/xml/sax/ext/Locator2Impl.java \
+ org/xml/sax/ext/package.html \
+ org/xml/sax/helpers/AttributeListImpl.java \
+ org/xml/sax/helpers/AttributesImpl.java \
+ org/xml/sax/helpers/DefaultHandler.java \
+ org/xml/sax/helpers/LocatorImpl.java \
+ org/xml/sax/helpers/NamespaceSupport.java \
+ org/xml/sax/helpers/NewInstance.java \
+ org/xml/sax/helpers/ParserAdapter.java \
+ org/xml/sax/helpers/ParserFactory.java \
+ org/xml/sax/helpers/XMLFilterImpl.java \
+ org/xml/sax/helpers/XMLReaderAdapter.java \
+ org/xml/sax/helpers/XMLReaderFactory.java \
+ org/xml/sax/helpers/package.html \
+ org/xml/sax/AttributeList.java \
+ org/xml/sax/Attributes.java \
+ org/xml/sax/ContentHandler.java \
+ org/xml/sax/DTDHandler.java \
+ org/xml/sax/DocumentHandler.java \
+ org/xml/sax/EntityResolver.java \
+ org/xml/sax/ErrorHandler.java \
+ org/xml/sax/HandlerBase.java \
+ org/xml/sax/InputSource.java \
+ org/xml/sax/Locator.java \
+ org/xml/sax/Parser.java \
+ org/xml/sax/SAXException.java \
+ org/xml/sax/SAXNotRecognizedException.java \
+ org/xml/sax/SAXNotSupportedException.java \
+ org/xml/sax/SAXParseException.java \
+ org/xml/sax/XMLFilter.java \
+ org/xml/sax/XMLReader.java \
+ org/xml/sax/package.html
+ 
+ all: all-am
+ 
+ .SUFFIXES:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ 		&& exit 0; \
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+ 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  external/sax/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --gnu  external/sax/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+ 	  *config.status*) \
+ 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ 	  *) \
+ 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ 	esac;
+ 
+ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ tags: TAGS
+ TAGS:
+ 
+ ctags: CTAGS
+ CTAGS:
+ 
+ 
+ distdir: $(DISTFILES)
+ 	$(mkdir_p) $(distdir)/org/xml/sax $(distdir)/org/xml/sax/ext $(distdir)/org/xml/sax/helpers
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ 	list='$(DISTFILES)'; for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ 	  esac; \
+ 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ 	    dir="/$$dir"; \
+ 	    $(mkdir_p) "$(distdir)$$dir"; \
+ 	  else \
+ 	    dir=''; \
+ 	  fi; \
+ 	  if test -d $$d/$$file; then \
+ 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ 	    fi; \
+ 	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ 	  else \
+ 	    test -f $(distdir)/$$file \
+ 	    || cp -p $$d/$$file $(distdir)/$$file \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+ check-am: all-am
+ check: check-am
+ all-am: Makefile
+ installdirs:
+ install: install-am
+ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+ 	@echo "it deletes files that may require special tools to rebuild."
+ clean: clean-am
+ 
+ clean-am: clean-generic clean-libtool mostlyclean-am
+ 
+ distclean: distclean-am
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-generic distclean-libtool
+ 
+ dvi: dvi-am
+ 
+ dvi-am:
+ 
+ html: html-am
+ 
+ info: info-am
+ 
+ info-am:
+ 
+ install-data-am:
+ 
+ install-exec-am:
+ 
+ install-info: install-info-am
+ 
+ install-man:
+ 
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-am
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-am
+ 
+ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+ 
+ pdf: pdf-am
+ 
+ pdf-am:
+ 
+ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am
+ 
+ .PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ 	distclean distclean-generic distclean-libtool distdir dvi \
+ 	dvi-am html html-am info info-am install install-am \
+ 	install-data install-data-am install-exec install-exec-am \
+ 	install-info install-info-am install-man install-strip \
+ 	installcheck installcheck-am installdirs maintainer-clean \
+ 	maintainer-clean-generic mostlyclean mostlyclean-generic \
+ 	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ 	uninstall-info-am
+ 
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/README gcc-4.1.0/libjava/classpath/external/sax/README
*** gcc-4.0.2/libjava/classpath/external/sax/README	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/README	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ Simple API for XML (SAX), a standard application interface for processing XML.
+ SAX is not maintained as part of GNU Classpath, but is used with GNU Classpath.
+ 
+ Last imported version sax2r3 final from http://www.saxproject.org/
+ 
+ All files are distributed with the following short notice:
+ 
+   NO WARRANTY!  This class is in the Public Domain.
+ 
+ The www.saxproject.org explains:
+ 
+   Copyright Status
+ 
+   SAX is free!
+ 
+   In fact, it's not possible to own a license to SAX, since it's been
+   placed in the public domain.
+ 
+   No Warranty
+ 
+   Because SAX is released to the public domain, there is no warranty
+   for the design or for the software implementation, to the extent
+   permitted by applicable law. Except when otherwise stated in writing
+   the copyright holders and/or other parties provide SAX "as is" without
+   warranty of any kind, either expressed or implied, including, but not
+   limited to, the implied warranties of merchantability and fitness for
+   a particular purpose. The entire risk as to the quality and
+   performance of SAX is with you. Should SAX prove defective, you assume
+   the cost of all necessary servicing, repair or correction.
+ 
+   In no event unless required by applicable law or agreed to in
+   writing will any copyright holder, or any other party who may modify
+   and/or redistribute SAX, be liable to you for damages, including any
+   general, special, incidental or consequential damages arising out of
+   the use or inability to use SAX (including but not limited to loss of
+   data or data being rendered inaccurate or losses sustained by you or
+   third parties or a failure of the SAX to operate with any other
+   programs), even if such holder or other party has been advised of the
+   possibility of such damages.
+ 
+   Copyright Disclaimers
+ 
+   This page includes statements to that effect by David Megginson, who
+   would have been able to claim copyright for the original work.
+ 
+   SAX 1.0
+ 
+   Version 1.0 of the Simple API for XML (SAX), created collectively by
+   the membership of the XML-DEV mailing list, is hereby released into
+   the public domain.
+ 
+   No one owns SAX: you may use it freely in both commercial and
+   non-commercial applications, bundle it with your software
+   distribution, include it on a CD-ROM, list the source code in a book,
+   mirror the documentation at your own web site, or use it in any other
+   way you see fit.
+ 
+   David Megginson, sax@megginson.com
+   1998-05-11
+ 
+   SAX 2.0
+ 
+   I hereby abandon any property rights to SAX 2.0 (the Simple API for
+   XML), and release all of the SAX 2.0 source code, compiled code, and
+   documentation contained in this distribution into the Public
+   Domain. SAX comes with NO WARRANTY or guarantee of fitness for any
+   purpose.
+ 
+   David Megginson, david@megginson.com
+   2000-05-05
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/AttributeList.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/AttributeList.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/AttributeList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/AttributeList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,193 ----
+ // SAX Attribute List Interface.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: AttributeList.java,v 1.10 2004/12/11 15:41:09 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ /**
+  * Interface for an element's attribute specifications.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This is the original SAX1 interface for reporting an element's
+  * attributes.  Unlike the new {@link org.xml.sax.Attributes Attributes}
+  * interface, it does not support Namespace-related information.</p>
+  *
+  * <p>When an attribute list is supplied as part of a
+  * {@link org.xml.sax.DocumentHandler#startElement startElement}
+  * event, the list will return valid results only during the
+  * scope of the event; once the event handler returns control
+  * to the parser, the attribute list is invalid.  To save a
+  * persistent copy of the attribute list, use the SAX1
+  * {@link org.xml.sax.helpers.AttributeListImpl AttributeListImpl}
+  * helper class.</p>
+  *
+  * <p>An attribute list includes only attributes that have been
+  * specified or defaulted: #IMPLIED attributes will not be included.</p>
+  *
+  * <p>There are two ways for the SAX application to obtain information
+  * from the AttributeList.  First, it can iterate through the entire
+  * list:</p>
+  *
+  * <pre>
+  * public void startElement (String name, AttributeList atts) {
+  *   for (int i = 0; i < atts.getLength(); i++) {
+  *     String name = atts.getName(i);
+  *     String type = atts.getType(i);
+  *     String value = atts.getValue(i);
+  *     [...]
+  *   }
+  * }
+  * </pre>
+  *
+  * <p>(Note that the result of getLength() will be zero if there
+  * are no attributes.)
+  *
+  * <p>As an alternative, the application can request the value or
+  * type of specific attributes:</p>
+  *
+  * <pre>
+  * public void startElement (String name, AttributeList atts) {
+  *   String identifier = atts.getValue("id");
+  *   String label = atts.getValue("label");
+  *   [...]
+  * }
+  * </pre>
+  *
+  * @deprecated This interface has been replaced by the SAX2
+  *             {@link org.xml.sax.Attributes Attributes}
+  *             interface, which includes Namespace support.
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.DocumentHandler#startElement startElement
+  * @see org.xml.sax.helpers.AttributeListImpl AttributeListImpl
+  */
+ public interface AttributeList {
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Iteration methods.
+     ////////////////////////////////////////////////////////////////////
+     
+ 
+     /**
+      * Return the number of attributes in this list.
+      *
+      * <p>The SAX parser may provide attributes in any
+      * arbitrary order, regardless of the order in which they were
+      * declared or specified.  The number of attributes may be
+      * zero.</p>
+      *
+      * @return The number of attributes in the list.  
+      */
+     public abstract int getLength ();
+     
+     
+     /**
+      * Return the name of an attribute in this list (by position).
+      *
+      * <p>The names must be unique: the SAX parser shall not include the
+      * same attribute twice.  Attributes without values (those declared
+      * #IMPLIED without a value specified in the start tag) will be
+      * omitted from the list.</p>
+      *
+      * <p>If the attribute name has a namespace prefix, the prefix
+      * will still be attached.</p>
+      *
+      * @param i The index of the attribute in the list (starting at 0).
+      * @return The name of the indexed attribute, or null
+      *         if the index is out of range.
+      * @see #getLength 
+      */
+     public abstract String getName (int i);
+     
+     
+     /**
+      * Return the type of an attribute in the list (by position).
+      *
+      * <p>The attribute type is one of the strings "CDATA", "ID",
+      * "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY", "ENTITIES",
+      * or "NOTATION" (always in upper case).</p>
+      *
+      * <p>If the parser has not read a declaration for the attribute,
+      * or if the parser does not report attribute types, then it must
+      * return the value "CDATA" as stated in the XML 1.0 Recommentation
+      * (clause 3.3.3, "Attribute-Value Normalization").</p>
+      *
+      * <p>For an enumerated attribute that is not a notation, the
+      * parser will report the type as "NMTOKEN".</p>
+      *
+      * @param i The index of the attribute in the list (starting at 0).
+      * @return The attribute type as a string, or
+      *         null if the index is out of range.
+      * @see #getLength 
+      * @see #getType(java.lang.String)
+      */
+     public abstract String getType (int i);
+     
+     
+     /**
+      * Return the value of an attribute in the list (by position).
+      *
+      * <p>If the attribute value is a list of tokens (IDREFS,
+      * ENTITIES, or NMTOKENS), the tokens will be concatenated
+      * into a single string separated by whitespace.</p>
+      *
+      * @param i The index of the attribute in the list (starting at 0).
+      * @return The attribute value as a string, or
+      *         null if the index is out of range.
+      * @see #getLength
+      * @see #getValue(java.lang.String)
+      */
+     public abstract String getValue (int i);
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Lookup methods.
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Return the type of an attribute in the list (by name).
+      *
+      * <p>The return value is the same as the return value for
+      * getType(int).</p>
+      *
+      * <p>If the attribute name has a namespace prefix in the document,
+      * the application must include the prefix here.</p>
+      *
+      * @param name The name of the attribute.
+      * @return The attribute type as a string, or null if no
+      *         such attribute exists.
+      * @see #getType(int)
+      */
+     public abstract String getType (String name);
+     
+     
+     /**
+      * Return the value of an attribute in the list (by name).
+      *
+      * <p>The return value is the same as the return value for
+      * getValue(int).</p>
+      *
+      * <p>If the attribute name has a namespace prefix in the document,
+      * the application must include the prefix here.</p>
+      *
+      * @param name the name of the attribute to return
+      * @return The attribute value as a string, or null if
+      *         no such attribute exists.
+      * @see #getValue(int)
+      */
+     public abstract String getValue (String name);
+     
+ }
+ 
+ // end of AttributeList.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/Attributes.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/Attributes.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/Attributes.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/Attributes.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,257 ----
+ // Attributes.java - attribute list with Namespace support
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the public domain.
+ // $Id: Attributes.java,v 1.10 2004/12/11 15:41:09 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ 
+ /**
+  * Interface for a list of XML attributes.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This interface allows access to a list of attributes in
+  * three different ways:</p>
+  *
+  * <ol>
+  * <li>by attribute index;</li>
+  * <li>by Namespace-qualified name; or</li>
+  * <li>by qualified (prefixed) name.</li>
+  * </ol>
+  *
+  * <p>The list will not contain attributes that were declared
+  * #IMPLIED but not specified in the start tag.  It will also not
+  * contain attributes used as Namespace declarations (xmlns*) unless
+  * the <code>http://xml.org/sax/features/namespace-prefixes</code> 
+  * feature is set to <var>true</var> (it is <var>false</var> by 
+  * default).
+  * Because SAX2 conforms to the original "Namespaces in XML"
+  * recommendation, it normally does not
+  * give namespace declaration attributes a namespace URI.
+  * </p>
+  *
+  * <p>Some SAX2 parsers may support using an optional feature flag
+  * (<code>http://xml.org/sax/features/xmlns-uris</code>) to request
+  * that those attributes be given URIs, conforming to a later
+  * backwards-incompatible revision of that recommendation.  (The
+  * attribute's "local name" will be the prefix, or "xmlns" when
+  * defining a default element namespace.)  For portability, handler
+  * code should always resolve that conflict, rather than requiring
+  * parsers that can change the setting of that feature flag.  </p>
+  *
+  * <p>If the namespace-prefixes feature (see above) is
+  * <var>false</var>, access by qualified name may not be available; if
+  * the <code>http://xml.org/sax/features/namespaces</code> feature is
+  * <var>false</var>, access by Namespace-qualified names may not be
+  * available.</p>
+  *
+  * <p>This interface replaces the now-deprecated SAX1 {@link
+  * org.xml.sax.AttributeList AttributeList} interface, which does not 
+  * contain Namespace support.  In addition to Namespace support, it 
+  * adds the <var>getIndex</var> methods (below).</p>
+  *
+  * <p>The order of attributes in the list is unspecified, and will
+  * vary from implementation to implementation.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.helpers.AttributesImpl
+  * @see org.xml.sax.ext.DeclHandler#attributeDecl
+  */
+ public interface Attributes
+ {
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Indexed access.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Return the number of attributes in the list.
+      *
+      * <p>Once you know the number of attributes, you can iterate
+      * through the list.</p>
+      *
+      * @return The number of attributes in the list.
+      * @see #getURI(int)
+      * @see #getLocalName(int)
+      * @see #getQName(int)
+      * @see #getType(int)
+      * @see #getValue(int)
+      */
+     public abstract int getLength ();
+ 
+ 
+     /**
+      * Look up an attribute's Namespace URI by index.
+      *
+      * @param index The attribute index (zero-based).
+      * @return The Namespace URI, or the empty string if none
+      *         is available, or null if the index is out of
+      *         range.
+      * @see #getLength
+      */
+     public abstract String getURI (int index);
+ 
+ 
+     /**
+      * Look up an attribute's local name by index.
+      *
+      * @param index The attribute index (zero-based).
+      * @return The local name, or the empty string if Namespace
+      *         processing is not being performed, or null
+      *         if the index is out of range.
+      * @see #getLength
+      */
+     public abstract String getLocalName (int index);
+ 
+ 
+     /**
+      * Look up an attribute's XML qualified (prefixed) name by index.
+      *
+      * @param index The attribute index (zero-based).
+      * @return The XML qualified name, or the empty string
+      *         if none is available, or null if the index
+      *         is out of range.
+      * @see #getLength
+      */
+     public abstract String getQName (int index);
+ 
+ 
+     /**
+      * Look up an attribute's type by index.
+      *
+      * <p>The attribute type is one of the strings "CDATA", "ID",
+      * "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY", "ENTITIES",
+      * or "NOTATION" (always in upper case).</p>
+      *
+      * <p>If the parser has not read a declaration for the attribute,
+      * or if the parser does not report attribute types, then it must
+      * return the value "CDATA" as stated in the XML 1.0 Recommendation
+      * (clause 3.3.3, "Attribute-Value Normalization").</p>
+      *
+      * <p>For an enumerated attribute that is not a notation, the
+      * parser will report the type as "NMTOKEN".</p>
+      *
+      * @param index The attribute index (zero-based).
+      * @return The attribute's type as a string, or null if the
+      *         index is out of range.
+      * @see #getLength
+      */
+     public abstract String getType (int index);
+ 
+ 
+     /**
+      * Look up an attribute's value by index.
+      *
+      * <p>If the attribute value is a list of tokens (IDREFS,
+      * ENTITIES, or NMTOKENS), the tokens will be concatenated
+      * into a single string with each token separated by a
+      * single space.</p>
+      *
+      * @param index The attribute index (zero-based).
+      * @return The attribute's value as a string, or null if the
+      *         index is out of range.
+      * @see #getLength
+      */
+     public abstract String getValue (int index);
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Name-based query.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Look up the index of an attribute by Namespace name.
+      *
+      * @param uri The Namespace URI, or the empty string if
+      *        the name has no Namespace URI.
+      * @param localName The attribute's local name.
+      * @return The index of the attribute, or -1 if it does not
+      *         appear in the list.
+      */
+     public int getIndex (String uri, String localName);
+ 
+ 
+     /**
+      * Look up the index of an attribute by XML qualified (prefixed) name.
+      *
+      * @param qName The qualified (prefixed) name.
+      * @return The index of the attribute, or -1 if it does not
+      *         appear in the list.
+      */
+     public int getIndex (String qName);
+ 
+ 
+     /**
+      * Look up an attribute's type by Namespace name.
+      *
+      * <p>See {@link #getType(int) getType(int)} for a description
+      * of the possible types.</p>
+      *
+      * @param uri The Namespace URI, or the empty String if the
+      *        name has no Namespace URI.
+      * @param localName The local name of the attribute.
+      * @return The attribute type as a string, or null if the
+      *         attribute is not in the list or if Namespace
+      *         processing is not being performed.
+      */
+     public abstract String getType (String uri, String localName);
+ 
+ 
+     /**
+      * Look up an attribute's type by XML qualified (prefixed) name.
+      *
+      * <p>See {@link #getType(int) getType(int)} for a description
+      * of the possible types.</p>
+      *
+      * @param qName The XML qualified name.
+      * @return The attribute type as a string, or null if the
+      *         attribute is not in the list or if qualified names
+      *         are not available.
+      */
+     public abstract String getType (String qName);
+ 
+ 
+     /**
+      * Look up an attribute's value by Namespace name.
+      *
+      * <p>See {@link #getValue(int) getValue(int)} for a description
+      * of the possible values.</p>
+      *
+      * @param uri The Namespace URI, or the empty String if the
+      *        name has no Namespace URI.
+      * @param localName The local name of the attribute.
+      * @return The attribute value as a string, or null if the
+      *         attribute is not in the list.
+      */
+     public abstract String getValue (String uri, String localName);
+ 
+ 
+     /**
+      * Look up an attribute's value by XML qualified (prefixed) name.
+      *
+      * <p>See {@link #getValue(int) getValue(int)} for a description
+      * of the possible values.</p>
+      *
+      * @param qName The XML qualified name.
+      * @return The attribute value as a string, or null if the
+      *         attribute is not in the list or if qualified names
+      *         are not available.
+      */
+     public abstract String getValue (String qName);
+ 
+ }
+ 
+ // end of Attributes.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ContentHandler.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ContentHandler.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ContentHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ContentHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,419 ----
+ // ContentHandler.java - handle main document content.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the public domain.
+ // $Id: ContentHandler.java,v 1.10 2004/12/11 15:41:09 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ 
+ /**
+  * Receive notification of the logical content of a document.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This is the main interface that most SAX applications
+  * implement: if the application needs to be informed of basic parsing 
+  * events, it implements this interface and registers an instance with 
+  * the SAX parser using the {@link org.xml.sax.XMLReader#setContentHandler 
+  * setContentHandler} method.  The parser uses the instance to report 
+  * basic document-related events like the start and end of elements 
+  * and character data.</p>
+  *
+  * <p>The order of events in this interface is very important, and
+  * mirrors the order of information in the document itself.  For
+  * example, all of an element's content (character data, processing
+  * instructions, and/or subelements) will appear, in order, between
+  * the startElement event and the corresponding endElement event.</p>
+  *
+  * <p>This interface is similar to the now-deprecated SAX 1.0
+  * DocumentHandler interface, but it adds support for Namespaces
+  * and for reporting skipped entities (in non-validating XML
+  * processors).</p>
+  *
+  * <p>Implementors should note that there is also a 
+  * <code>ContentHandler</code> class in the <code>java.net</code>
+  * package; that means that it's probably a bad idea to do</p>
+  *
+  * <pre>import java.net.*;
+  * import org.xml.sax.*;
+  * </pre>
+  *
+  * <p>In fact, "import ...*" is usually a sign of sloppy programming
+  * anyway, so the user should consider this a feature rather than a
+  * bug.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1+ (sax2r3pre1)
+  * @see org.xml.sax.XMLReader
+  * @see org.xml.sax.DTDHandler
+  * @see org.xml.sax.ErrorHandler
+  */
+ public interface ContentHandler
+ {
+ 
+     /**
+      * Receive an object for locating the origin of SAX document events.
+      *
+      * <p>SAX parsers are strongly encouraged (though not absolutely
+      * required) to supply a locator: if it does so, it must supply
+      * the locator to the application by invoking this method before
+      * invoking any of the other methods in the ContentHandler
+      * interface.</p>
+      *
+      * <p>The locator allows the application to determine the end
+      * position of any document-related event, even if the parser is
+      * not reporting an error.  Typically, the application will
+      * use this information for reporting its own errors (such as
+      * character content that does not match an application's
+      * business rules).  The information returned by the locator
+      * is probably not sufficient for use with a search engine.</p>
+      *
+      * <p>Note that the locator will return correct information only
+      * during the invocation SAX event callbacks after
+      * {@link #startDocument startDocument} returns and before
+      * {@link #endDocument endDocument} is called.  The
+      * application should not attempt to use it at any other time.</p>
+      *
+      * @param locator an object that can return the location of
+      *                any SAX document event
+      * @see org.xml.sax.Locator
+      */
+     public void setDocumentLocator (Locator locator);
+ 
+ 
+     /**
+      * Receive notification of the beginning of a document.
+      *
+      * <p>The SAX parser will invoke this method only once, before any
+      * other event callbacks (except for {@link #setDocumentLocator 
+      * setDocumentLocator}).</p>
+      *
+      * @throws org.xml.sax.SAXException any SAX exception, possibly
+      *            wrapping another exception
+      * @see #endDocument
+      */
+     public void startDocument ()
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Receive notification of the end of a document.
+      *
+      * <p><strong>There is an apparent contradiction between the
+      * documentation for this method and the documentation for {@link
+      * org.xml.sax.ErrorHandler#fatalError}.  Until this ambiguity is
+      * resolved in a future major release, clients should make no
+      * assumptions about whether endDocument() will or will not be
+      * invoked when the parser has reported a fatalError() or thrown
+      * an exception.</strong></p>
+      *
+      * <p>The SAX parser will invoke this method only once, and it will
+      * be the last method invoked during the parse.  The parser shall
+      * not invoke this method until it has either abandoned parsing
+      * (because of an unrecoverable error) or reached the end of
+      * input.</p>
+      *
+      * @throws org.xml.sax.SAXException any SAX exception, possibly
+      *            wrapping another exception
+      * @see #startDocument
+      */
+     public void endDocument()
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Begin the scope of a prefix-URI Namespace mapping.
+      *
+      * <p>The information from this event is not necessary for
+      * normal Namespace processing: the SAX XML reader will 
+      * automatically replace prefixes for element and attribute
+      * names when the <code>http://xml.org/sax/features/namespaces</code>
+      * feature is <var>true</var> (the default).</p>
+      *
+      * <p>There are cases, however, when applications need to
+      * use prefixes in character data or in attribute values,
+      * where they cannot safely be expanded automatically; the
+      * start/endPrefixMapping event supplies the information
+      * to the application to expand prefixes in those contexts
+      * itself, if necessary.</p>
+      *
+      * <p>Note that start/endPrefixMapping events are not
+      * guaranteed to be properly nested relative to each other:
+      * all startPrefixMapping events will occur immediately before the
+      * corresponding {@link #startElement startElement} event, 
+      * and all {@link #endPrefixMapping endPrefixMapping}
+      * events will occur immediately after the corresponding
+      * {@link #endElement endElement} event,
+      * but their order is not otherwise 
+      * guaranteed.</p>
+      *
+      * <p>There should never be start/endPrefixMapping events for the
+      * "xml" prefix, since it is predeclared and immutable.</p>
+      *
+      * @param prefix the Namespace prefix being declared.
+      *	An empty string is used for the default element namespace,
+      *	which has no prefix.
+      * @param uri the Namespace URI the prefix is mapped to
+      * @throws org.xml.sax.SAXException the client may throw
+      *            an exception during processing
+      * @see #endPrefixMapping
+      * @see #startElement
+      */
+     public void startPrefixMapping (String prefix, String uri)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * End the scope of a prefix-URI mapping.
+      *
+      * <p>See {@link #startPrefixMapping startPrefixMapping} for 
+      * details.  These events will always occur immediately after the
+      * corresponding {@link #endElement endElement} event, but the order of 
+      * {@link #endPrefixMapping endPrefixMapping} events is not otherwise
+      * guaranteed.</p>
+      *
+      * @param prefix the prefix that was being mapped.
+      *	This is the empty string when a default mapping scope ends.
+      * @throws org.xml.sax.SAXException the client may throw
+      *            an exception during processing
+      * @see #startPrefixMapping
+      * @see #endElement
+      */
+     public void endPrefixMapping (String prefix)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Receive notification of the beginning of an element.
+      *
+      * <p>The Parser will invoke this method at the beginning of every
+      * element in the XML document; there will be a corresponding
+      * {@link #endElement endElement} event for every startElement event
+      * (even when the element is empty). All of the element's content will be
+      * reported, in order, before the corresponding endElement
+      * event.</p>
+      *
+      * <p>This event allows up to three name components for each
+      * element:</p>
+      *
+      * <ol>
+      * <li>the Namespace URI;</li>
+      * <li>the local name; and</li>
+      * <li>the qualified (prefixed) name.</li>
+      * </ol>
+      *
+      * <p>Any or all of these may be provided, depending on the
+      * values of the <var>http://xml.org/sax/features/namespaces</var>
+      * and the <var>http://xml.org/sax/features/namespace-prefixes</var>
+      * properties:</p>
+      *
+      * <ul>
+      * <li>the Namespace URI and local name are required when 
+      * the namespaces property is <var>true</var> (the default), and are
+      * optional when the namespaces property is <var>false</var> (if one is
+      * specified, both must be);</li>
+      * <li>the qualified name is required when the namespace-prefixes property
+      * is <var>true</var>, and is optional when the namespace-prefixes property
+      * is <var>false</var> (the default).</li>
+      * </ul>
+      *
+      * <p>Note that the attribute list provided will contain only
+      * attributes with explicit values (specified or defaulted):
+      * #IMPLIED attributes will be omitted.  The attribute list
+      * will contain attributes used for Namespace declarations
+      * (xmlns* attributes) only if the
+      * <code>http://xml.org/sax/features/namespace-prefixes</code>
+      * property is true (it is false by default, and support for a 
+      * true value is optional).</p>
+      *
+      * <p>Like {@link #characters characters()}, attribute values may have
+      * characters that need more than one <code>char</code> value.  </p>
+      *
+      * @param uri the Namespace URI, or the empty string if the
+      *        element has no Namespace URI or if Namespace
+      *        processing is not being performed
+      * @param localName the local name (without prefix), or the
+      *        empty string if Namespace processing is not being
+      *        performed
+      * @param qName the qualified name (with prefix), or the
+      *        empty string if qualified names are not available
+      * @param atts the attributes attached to the element.  If
+      *        there are no attributes, it shall be an empty
+      *        Attributes object.  The value of this object after
+      *        startElement returns is undefined
+      * @throws org.xml.sax.SAXException any SAX exception, possibly
+      *            wrapping another exception
+      * @see #endElement
+      * @see org.xml.sax.Attributes
+      * @see org.xml.sax.helpers.AttributesImpl
+      */
+     public void startElement (String uri, String localName,
+ 			      String qName, Attributes atts)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Receive notification of the end of an element.
+      *
+      * <p>The SAX parser will invoke this method at the end of every
+      * element in the XML document; there will be a corresponding
+      * {@link #startElement startElement} event for every endElement 
+      * event (even when the element is empty).</p>
+      *
+      * <p>For information on the names, see startElement.</p>
+      *
+      * @param uri the Namespace URI, or the empty string if the
+      *        element has no Namespace URI or if Namespace
+      *        processing is not being performed
+      * @param localName the local name (without prefix), or the
+      *        empty string if Namespace processing is not being
+      *        performed
+      * @param qName the qualified XML name (with prefix), or the
+      *        empty string if qualified names are not available
+      * @throws org.xml.sax.SAXException any SAX exception, possibly
+      *            wrapping another exception
+      */
+     public void endElement (String uri, String localName,
+ 			    String qName)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Receive notification of character data.
+      *
+      * <p>The Parser will call this method to report each chunk of
+      * character data.  SAX parsers may return all contiguous character
+      * data in a single chunk, or they may split it into several
+      * chunks; however, all of the characters in any single event
+      * must come from the same external entity so that the Locator
+      * provides useful information.</p>
+      *
+      * <p>The application must not attempt to read from the array
+      * outside of the specified range.</p>
+      *
+      * <p>Individual characters may consist of more than one Java
+      * <code>char</code> value.  There are two important cases where this
+      * happens, because characters can't be represented in just sixteen bits.
+      * In one case, characters are represented in a <em>Surrogate Pair</em>,
+      * using two special Unicode values. Such characters are in the so-called
+      * "Astral Planes", with a code point above U+FFFF.  A second case involves
+      * composite characters, such as a base character combining with one or
+      * more accent characters. </p>
+      *
+      * <p> Your code should not assume that algorithms using
+      * <code>char</code>-at-a-time idioms will be working in character
+      * units; in some cases they will split characters.  This is relevant
+      * wherever XML permits arbitrary characters, such as attribute values,
+      * processing instruction data, and comments as well as in data reported
+      * from this method.  It's also generally relevant whenever Java code
+      * manipulates internationalized text; the issue isn't unique to XML.</p>
+      *
+      * <p>Note that some parsers will report whitespace in element
+      * content using the {@link #ignorableWhitespace ignorableWhitespace}
+      * method rather than this one (validating parsers <em>must</em> 
+      * do so).</p>
+      *
+      * @param ch the characters from the XML document
+      * @param start the start position in the array
+      * @param length the number of characters to read from the array
+      * @throws org.xml.sax.SAXException any SAX exception, possibly
+      *            wrapping another exception
+      * @see #ignorableWhitespace 
+      * @see org.xml.sax.Locator
+      */
+     public void characters (char ch[], int start, int length)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Receive notification of ignorable whitespace in element content.
+      *
+      * <p>Validating Parsers must use this method to report each chunk
+      * of whitespace in element content (see the W3C XML 1.0
+      * recommendation, section 2.10): non-validating parsers may also
+      * use this method if they are capable of parsing and using
+      * content models.</p>
+      *
+      * <p>SAX parsers may return all contiguous whitespace in a single
+      * chunk, or they may split it into several chunks; however, all of
+      * the characters in any single event must come from the same
+      * external entity, so that the Locator provides useful
+      * information.</p>
+      *
+      * <p>The application must not attempt to read from the array
+      * outside of the specified range.</p>
+      *
+      * @param ch the characters from the XML document
+      * @param start the start position in the array
+      * @param length the number of characters to read from the array
+      * @throws org.xml.sax.SAXException any SAX exception, possibly
+      *            wrapping another exception
+      * @see #characters
+      */
+     public void ignorableWhitespace (char ch[], int start, int length)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Receive notification of a processing instruction.
+      *
+      * <p>The Parser will invoke this method once for each processing
+      * instruction found: note that processing instructions may occur
+      * before or after the main document element.</p>
+      *
+      * <p>A SAX parser must never report an XML declaration (XML 1.0,
+      * section 2.8) or a text declaration (XML 1.0, section 4.3.1)
+      * using this method.</p>
+      *
+      * <p>Like {@link #characters characters()}, processing instruction
+      * data may have characters that need more than one <code>char</code>
+      * value. </p>
+      *
+      * @param target the processing instruction target
+      * @param data the processing instruction data, or null if
+      *        none was supplied.  The data does not include any
+      *        whitespace separating it from the target
+      * @throws org.xml.sax.SAXException any SAX exception, possibly
+      *            wrapping another exception
+      */
+     public void processingInstruction (String target, String data)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Receive notification of a skipped entity.
+      * This is not called for entity references within markup constructs
+      * such as element start tags or markup declarations.  (The XML
+      * recommendation requires reporting skipped external entities.
+      * SAX also reports internal entity expansion/non-expansion, except
+      * within markup constructs.)
+      *
+      * <p>The Parser will invoke this method each time the entity is
+      * skipped.  Non-validating processors may skip entities if they
+      * have not seen the declarations (because, for example, the
+      * entity was declared in an external DTD subset).  All processors
+      * may skip external entities, depending on the values of the
+      * <code>http://xml.org/sax/features/external-general-entities</code>
+      * and the
+      * <code>http://xml.org/sax/features/external-parameter-entities</code>
+      * properties.</p>
+      *
+      * @param name the name of the skipped entity.  If it is a 
+      *        parameter entity, the name will begin with '%', and if
+      *        it is the external DTD subset, it will be the string
+      *        "[dtd]"
+      * @throws org.xml.sax.SAXException any SAX exception, possibly
+      *            wrapping another exception
+      */
+     public void skippedEntity (String name)
+ 	throws SAXException;
+ }
+ 
+ // end of ContentHandler.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/DTDHandler.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/DTDHandler.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/DTDHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/DTDHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,117 ----
+ // SAX DTD handler.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: DTDHandler.java,v 1.10 2004/12/11 15:41:09 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ /**
+  * Receive notification of basic DTD-related events.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>If a SAX application needs information about notations and
+  * unparsed entities, then the application implements this 
+  * interface and registers an instance with the SAX parser using 
+  * the parser's setDTDHandler method.  The parser uses the 
+  * instance to report notation and unparsed entity declarations to 
+  * the application.</p>
+  *
+  * <p>Note that this interface includes only those DTD events that
+  * the XML recommendation <em>requires</em> processors to report:
+  * notation and unparsed entity declarations.</p>
+  *
+  * <p>The SAX parser may report these events in any order, regardless
+  * of the order in which the notations and unparsed entities were
+  * declared; however, all DTD events must be reported after the
+  * document handler's startDocument event, and before the first
+  * startElement event.
+  * (If the {@link org.xml.sax.ext.LexicalHandler LexicalHandler} is
+  * used, these events must also be reported before the endDTD event.)
+  * </p>
+  *
+  * <p>It is up to the application to store the information for 
+  * future use (perhaps in a hash table or object tree).
+  * If the application encounters attributes of type "NOTATION",
+  * "ENTITY", or "ENTITIES", it can use the information that it
+  * obtained through this interface to find the entity and/or
+  * notation corresponding with the attribute value.</p>
+  *
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.XMLReader#setDTDHandler
+  */
+ public interface DTDHandler {
+     
+     
+     /**
+      * Receive notification of a notation declaration event.
+      *
+      * <p>It is up to the application to record the notation for later
+      * reference, if necessary;
+      * notations may appear as attribute values and in unparsed entity
+      * declarations, and are sometime used with processing instruction
+      * target names.</p>
+      *
+      * <p>At least one of publicId and systemId must be non-null.
+      * If a system identifier is present, and it is a URL, the SAX
+      * parser must resolve it fully before passing it to the
+      * application through this event.</p>
+      *
+      * <p>There is no guarantee that the notation declaration will be
+      * reported before any unparsed entities that use it.</p>
+      *
+      * @param name The notation name.
+      * @param publicId The notation's public identifier, or null if
+      *        none was given.
+      * @param systemId The notation's system identifier, or null if
+      *        none was given.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see #unparsedEntityDecl
+      * @see org.xml.sax.Attributes
+      */
+     public abstract void notationDecl (String name,
+ 				       String publicId,
+ 				       String systemId)
+ 	throws SAXException;
+     
+     
+     /**
+      * Receive notification of an unparsed entity declaration event.
+      *
+      * <p>Note that the notation name corresponds to a notation
+      * reported by the {@link #notationDecl notationDecl} event.  
+      * It is up to the application to record the entity for later 
+      * reference, if necessary;
+      * unparsed entities may appear as attribute values. 
+      * </p>
+      *
+      * <p>If the system identifier is a URL, the parser must resolve it
+      * fully before passing it to the application.</p>
+      *
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @param name The unparsed entity's name.
+      * @param publicId The entity's public identifier, or null if none
+      *        was given.
+      * @param systemId The entity's system identifier.
+      * @param notationName The name of the associated notation.
+      * @see #notationDecl
+      * @see org.xml.sax.Attributes
+      */
+     public abstract void unparsedEntityDecl (String name,
+ 					     String publicId,
+ 					     String systemId,
+ 					     String notationName)
+ 	throws SAXException;
+     
+ }
+ 
+ // end of DTDHandler.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/DocumentHandler.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/DocumentHandler.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/DocumentHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/DocumentHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,232 ----
+ // SAX document handler.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: DocumentHandler.java,v 1.10 2004/12/11 15:41:09 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ /**
+  * Receive notification of general document events.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This was the main event-handling interface for SAX1; in
+  * SAX2, it has been replaced by {@link org.xml.sax.ContentHandler
+  * ContentHandler}, which provides Namespace support and reporting
+  * of skipped entities.  This interface is included in SAX2 only
+  * to support legacy SAX1 applications.</p>
+  *
+  * <p>The order of events in this interface is very important, and
+  * mirrors the order of information in the document itself.  For
+  * example, all of an element's content (character data, processing
+  * instructions, and/or subelements) will appear, in order, between
+  * the startElement event and the corresponding endElement event.</p>
+  *
+  * <p>Application writers who do not want to implement the entire
+  * interface can derive a class from HandlerBase, which implements
+  * the default functionality; parser writers can instantiate
+  * HandlerBase to obtain a default handler.  The application can find
+  * the location of any document event using the Locator interface
+  * supplied by the Parser through the setDocumentLocator method.</p>
+  *
+  * @deprecated This interface has been replaced by the SAX2
+  *             {@link org.xml.sax.ContentHandler ContentHandler}
+  *             interface, which includes Namespace support.
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.Parser#setDocumentHandler
+  * @see org.xml.sax.Locator
+  * @see org.xml.sax.HandlerBase
+  */
+ public interface DocumentHandler {
+     
+     
+     /**
+      * Receive an object for locating the origin of SAX document events.
+      *
+      * <p>SAX parsers are strongly encouraged (though not absolutely
+      * required) to supply a locator: if it does so, it must supply
+      * the locator to the application by invoking this method before
+      * invoking any of the other methods in the DocumentHandler
+      * interface.</p>
+      *
+      * <p>The locator allows the application to determine the end
+      * position of any document-related event, even if the parser is
+      * not reporting an error.  Typically, the application will
+      * use this information for reporting its own errors (such as
+      * character content that does not match an application's
+      * business rules).  The information returned by the locator
+      * is probably not sufficient for use with a search engine.</p>
+      *
+      * <p>Note that the locator will return correct information only
+      * during the invocation of the events in this interface.  The
+      * application should not attempt to use it at any other time.</p>
+      *
+      * @param locator An object that can return the location of
+      *                any SAX document event.
+      * @see org.xml.sax.Locator
+      */
+     public abstract void setDocumentLocator (Locator locator);
+     
+     
+     /**
+      * Receive notification of the beginning of a document.
+      *
+      * <p>The SAX parser will invoke this method only once, before any
+      * other methods in this interface or in DTDHandler (except for
+      * setDocumentLocator).</p>
+      *
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      */
+     public abstract void startDocument ()
+ 	throws SAXException;
+     
+     
+     /**
+      * Receive notification of the end of a document.
+      *
+      * <p>The SAX parser will invoke this method only once, and it will
+      * be the last method invoked during the parse.  The parser shall
+      * not invoke this method until it has either abandoned parsing
+      * (because of an unrecoverable error) or reached the end of
+      * input.</p>
+      *
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      */
+     public abstract void endDocument ()
+ 	throws SAXException;
+     
+     
+     /**
+      * Receive notification of the beginning of an element.
+      *
+      * <p>The Parser will invoke this method at the beginning of every
+      * element in the XML document; there will be a corresponding
+      * endElement() event for every startElement() event (even when the
+      * element is empty). All of the element's content will be
+      * reported, in order, before the corresponding endElement()
+      * event.</p>
+      *
+      * <p>If the element name has a namespace prefix, the prefix will
+      * still be attached.  Note that the attribute list provided will
+      * contain only attributes with explicit values (specified or
+      * defaulted): #IMPLIED attributes will be omitted.</p>
+      *
+      * @param name The element type name.
+      * @param atts The attributes attached to the element, if any.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see #endElement
+      * @see org.xml.sax.AttributeList 
+      */
+     public abstract void startElement (String name, AttributeList atts)
+ 	throws SAXException;
+     
+     
+     /**
+      * Receive notification of the end of an element.
+      *
+      * <p>The SAX parser will invoke this method at the end of every
+      * element in the XML document; there will be a corresponding
+      * startElement() event for every endElement() event (even when the
+      * element is empty).</p>
+      *
+      * <p>If the element name has a namespace prefix, the prefix will
+      * still be attached to the name.</p>
+      *
+      * @param name The element type name
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      */
+     public abstract void endElement (String name)
+ 	throws SAXException;
+     
+     
+     /**
+      * Receive notification of character data.
+      *
+      * <p>The Parser will call this method to report each chunk of
+      * character data.  SAX parsers may return all contiguous character
+      * data in a single chunk, or they may split it into several
+      * chunks; however, all of the characters in any single event
+      * must come from the same external entity, so that the Locator
+      * provides useful information.</p>
+      *
+      * <p>The application must not attempt to read from the array
+      * outside of the specified range.</p>
+      *
+      * <p>Note that some parsers will report whitespace using the
+      * ignorableWhitespace() method rather than this one (validating
+      * parsers must do so).</p>
+      *
+      * @param ch The characters from the XML document.
+      * @param start The start position in the array.
+      * @param length The number of characters to read from the array.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see #ignorableWhitespace 
+      * @see org.xml.sax.Locator
+      */
+     public abstract void characters (char ch[], int start, int length)
+ 	throws SAXException;
+     
+     
+     /**
+      * Receive notification of ignorable whitespace in element content.
+      *
+      * <p>Validating Parsers must use this method to report each chunk
+      * of ignorable whitespace (see the W3C XML 1.0 recommendation,
+      * section 2.10): non-validating parsers may also use this method
+      * if they are capable of parsing and using content models.</p>
+      *
+      * <p>SAX parsers may return all contiguous whitespace in a single
+      * chunk, or they may split it into several chunks; however, all of
+      * the characters in any single event must come from the same
+      * external entity, so that the Locator provides useful
+      * information.</p>
+      *
+      * <p>The application must not attempt to read from the array
+      * outside of the specified range.</p>
+      *
+      * @param ch The characters from the XML document.
+      * @param start The start position in the array.
+      * @param length The number of characters to read from the array.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see #characters
+      */
+     public abstract void ignorableWhitespace (char ch[], int start, int length)
+ 	throws SAXException;
+     
+     
+     /**
+      * Receive notification of a processing instruction.
+      *
+      * <p>The Parser will invoke this method once for each processing
+      * instruction found: note that processing instructions may occur
+      * before or after the main document element.</p>
+      *
+      * <p>A SAX parser should never report an XML declaration (XML 1.0,
+      * section 2.8) or a text declaration (XML 1.0, section 4.3.1)
+      * using this method.</p>
+      *
+      * @param target The processing instruction target.
+      * @param data The processing instruction data, or null if
+      *        none was supplied.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      */
+     public abstract void processingInstruction (String target, String data)
+ 	throws SAXException;
+     
+ }
+ 
+ // end of DocumentHandler.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/EntityResolver.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/EntityResolver.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/EntityResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/EntityResolver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,119 ----
+ // SAX entity resolver.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: EntityResolver.java,v 1.10 2004/12/11 15:41:09 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * Basic interface for resolving entities.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>If a SAX application needs to implement customized handling
+  * for external entities, it must implement this interface and
+  * register an instance with the SAX driver using the
+  * {@link org.xml.sax.XMLReader#setEntityResolver setEntityResolver}
+  * method.</p>
+  *
+  * <p>The XML reader will then allow the application to intercept any
+  * external entities (including the external DTD subset and external
+  * parameter entities, if any) before including them.</p>
+  *
+  * <p>Many SAX applications will not need to implement this interface,
+  * but it will be especially useful for applications that build
+  * XML documents from databases or other specialised input sources,
+  * or for applications that use URI types other than URLs.</p>
+  *
+  * <p>The following resolver would provide the application
+  * with a special character stream for the entity with the system
+  * identifier "http://www.myhost.com/today":</p>
+  *
+  * <pre>
+  * import org.xml.sax.EntityResolver;
+  * import org.xml.sax.InputSource;
+  *
+  * public class MyResolver implements EntityResolver {
+  *   public InputSource resolveEntity (String publicId, String systemId)
+  *   {
+  *     if (systemId.equals("http://www.myhost.com/today")) {
+  *              // return a special input source
+  *       MyReader reader = new MyReader();
+  *       return new InputSource(reader);
+  *     } else {
+  *              // use the default behaviour
+  *       return null;
+  *     }
+  *   }
+  * }
+  * </pre>
+  *
+  * <p>The application can also use this interface to redirect system
+  * identifiers to local URIs or to look up replacements in a catalog
+  * (possibly by using the public identifier).</p>
+  *
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.XMLReader#setEntityResolver
+  * @see org.xml.sax.InputSource
+  */
+ public interface EntityResolver {
+     
+     
+     /**
+      * Allow the application to resolve external entities.
+      *
+      * <p>The parser will call this method before opening any external
+      * entity except the top-level document entity.  Such entities include
+      * the external DTD subset and external parameter entities referenced
+      * within the DTD (in either case, only if the parser reads external
+      * parameter entities), and external general entities referenced
+      * within the document element (if the parser reads external general
+      * entities).  The application may request that the parser locate
+      * the entity itself, that it use an alternative URI, or that it
+      * use data provided by the application (as a character or byte
+      * input stream).</p>
+      *
+      * <p>Application writers can use this method to redirect external
+      * system identifiers to secure and/or local URIs, to look up
+      * public identifiers in a catalogue, or to read an entity from a
+      * database or other input source (including, for example, a dialog
+      * box).  Neither XML nor SAX specifies a preferred policy for using
+      * public or system IDs to resolve resources.  However, SAX specifies
+      * how to interpret any InputSource returned by this method, and that
+      * if none is returned, then the system ID will be dereferenced as
+      * a URL.  </p>
+      *
+      * <p>If the system identifier is a URL, the SAX parser must
+      * resolve it fully before reporting it to the application.</p>
+      *
+      * @param publicId The public identifier of the external entity
+      *        being referenced, or null if none was supplied.
+      * @param systemId The system identifier of the external entity
+      *        being referenced.
+      * @return An InputSource object describing the new input source,
+      *         or null to request that the parser open a regular
+      *         URI connection to the system identifier.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @exception java.io.IOException A Java-specific IO exception,
+      *            possibly the result of creating a new InputStream
+      *            or Reader for the InputSource.
+      * @see org.xml.sax.InputSource
+      */
+     public abstract InputSource resolveEntity (String publicId,
+ 					       String systemId)
+ 	throws SAXException, IOException;
+     
+ }
+ 
+ // end of EntityResolver.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ErrorHandler.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ErrorHandler.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ErrorHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ErrorHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,139 ----
+ // SAX error handler.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: ErrorHandler.java,v 1.10 2004/12/11 15:41:09 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ 
+ /**
+  * Basic interface for SAX error handlers.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>If a SAX application needs to implement customized error
+  * handling, it must implement this interface and then register an
+  * instance with the XML reader using the
+  * {@link org.xml.sax.XMLReader#setErrorHandler setErrorHandler}
+  * method.  The parser will then report all errors and warnings
+  * through this interface.</p>
+  *
+  * <p><strong>WARNING:</strong> If an application does <em>not</em>
+  * register an ErrorHandler, XML parsing errors will go unreported,
+  * except that <em>SAXParseException</em>s will be thrown for fatal errors.
+  * In order to detect validity errors, an ErrorHandler that does something
+  * with {@link #error error()} calls must be registered.</p>
+  *
+  * <p>For XML processing errors, a SAX driver must use this interface 
+  * in preference to throwing an exception: it is up to the application 
+  * to decide whether to throw an exception for different types of 
+  * errors and warnings.  Note, however, that there is no requirement that 
+  * the parser continue to report additional errors after a call to 
+  * {@link #fatalError fatalError}.  In other words, a SAX driver class 
+  * may throw an exception after reporting any fatalError.
+  * Also parsers may throw appropriate exceptions for non-XML errors.
+  * For example, {@link XMLReader#parse XMLReader.parse()} would throw
+  * an IOException for errors accessing entities or the document.</p>
+  *
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1+ (sax2r3pre1)
+  * @see org.xml.sax.XMLReader#setErrorHandler
+  * @see org.xml.sax.SAXParseException 
+  */
+ public interface ErrorHandler {
+     
+     
+     /**
+      * Receive notification of a warning.
+      *
+      * <p>SAX parsers will use this method to report conditions that
+      * are not errors or fatal errors as defined by the XML
+      * recommendation.  The default behaviour is to take no
+      * action.</p>
+      *
+      * <p>The SAX parser must continue to provide normal parsing events
+      * after invoking this method: it should still be possible for the
+      * application to process the document through to the end.</p>
+      *
+      * <p>Filters may use this method to report other, non-XML warnings
+      * as well.</p>
+      *
+      * @param exception The warning information encapsulated in a
+      *                  SAX parse exception.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.SAXParseException 
+      */
+     public abstract void warning (SAXParseException exception)
+ 	throws SAXException;
+     
+     
+     /**
+      * Receive notification of a recoverable error.
+      *
+      * <p>This corresponds to the definition of "error" in section 1.2
+      * of the W3C XML 1.0 Recommendation.  For example, a validating
+      * parser would use this callback to report the violation of a
+      * validity constraint.  The default behaviour is to take no
+      * action.</p>
+      *
+      * <p>The SAX parser must continue to provide normal parsing
+      * events after invoking this method: it should still be possible
+      * for the application to process the document through to the end.
+      * If the application cannot do so, then the parser should report
+      * a fatal error even if the XML recommendation does not require
+      * it to do so.</p>
+      *
+      * <p>Filters may use this method to report other, non-XML errors
+      * as well.</p>
+      *
+      * @param exception The error information encapsulated in a
+      *                  SAX parse exception.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.SAXParseException 
+      */
+     public abstract void error (SAXParseException exception)
+ 	throws SAXException;
+     
+     
+     /**
+      * Receive notification of a non-recoverable error.
+      *
+      * <p><strong>There is an apparent contradiction between the
+      * documentation for this method and the documentation for {@link
+      * org.xml.sax.ContentHandler#endDocument}.  Until this ambiguity
+      * is resolved in a future major release, clients should make no
+      * assumptions about whether endDocument() will or will not be
+      * invoked when the parser has reported a fatalError() or thrown
+      * an exception.</strong></p>
+      *
+      * <p>This corresponds to the definition of "fatal error" in
+      * section 1.2 of the W3C XML 1.0 Recommendation.  For example, a
+      * parser would use this callback to report the violation of a
+      * well-formedness constraint.</p>
+      *
+      * <p>The application must assume that the document is unusable
+      * after the parser has invoked this method, and should continue
+      * (if at all) only for the sake of collecting additional error
+      * messages: in fact, SAX parsers are free to stop reporting any
+      * other events once this method has been invoked.</p>
+      *
+      * @param exception The error information encapsulated in a
+      *                  SAX parse exception.  
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.SAXParseException
+      */
+     public abstract void fatalError (SAXParseException exception)
+ 	throws SAXException;
+     
+ }
+ 
+ // end of ErrorHandler.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/HandlerBase.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/HandlerBase.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/HandlerBase.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/HandlerBase.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,369 ----
+ // SAX default handler base class.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: HandlerBase.java,v 1.10 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ /**
+  * Default base class for handlers.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class implements the default behaviour for four SAX1
+  * interfaces: EntityResolver, DTDHandler, DocumentHandler,
+  * and ErrorHandler.  It is now obsolete, but is included in SAX2 to
+  * support legacy SAX1 applications.  SAX2 applications should use
+  * the {@link org.xml.sax.helpers.DefaultHandler DefaultHandler}
+  * class instead.</p>
+  *
+  * <p>Application writers can extend this class when they need to
+  * implement only part of an interface; parser writers can
+  * instantiate this class to provide default handlers when the
+  * application has not supplied its own.</p>
+  *
+  * <p>Note that the use of this class is optional.</p>
+  *
+  * @deprecated This class works with the deprecated
+  *             {@link org.xml.sax.DocumentHandler DocumentHandler}
+  *             interface.  It has been replaced by the SAX2
+  *             {@link org.xml.sax.helpers.DefaultHandler DefaultHandler}
+  *             class.
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.EntityResolver
+  * @see org.xml.sax.DTDHandler
+  * @see org.xml.sax.DocumentHandler
+  * @see org.xml.sax.ErrorHandler
+  */
+ public class HandlerBase
+     implements EntityResolver, DTDHandler, DocumentHandler, ErrorHandler
+ {
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Default implementation of the EntityResolver interface.
+     ////////////////////////////////////////////////////////////////////
+     
+     /**
+      * Resolve an external entity.
+      *
+      * <p>Always return null, so that the parser will use the system
+      * identifier provided in the XML document.  This method implements
+      * the SAX default behaviour: application writers can override it
+      * in a subclass to do special translations such as catalog lookups
+      * or URI redirection.</p>
+      *
+      * @param publicId The public identifer, or null if none is
+      *                 available.
+      * @param systemId The system identifier provided in the XML 
+      *                 document.
+      * @return The new input source, or null to require the
+      *         default behaviour.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.EntityResolver#resolveEntity
+      */
+     public InputSource resolveEntity (String publicId, String systemId)
+ 	throws SAXException
+     {
+ 	return null;
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Default implementation of DTDHandler interface.
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Receive notification of a notation declaration.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass if they wish to keep track of the notations
+      * declared in a document.</p>
+      *
+      * @param name The notation name.
+      * @param publicId The notation public identifier, or null if not
+      *                 available.
+      * @param systemId The notation system identifier.
+      * @see org.xml.sax.DTDHandler#notationDecl
+      */
+     public void notationDecl (String name, String publicId, String systemId)
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of an unparsed entity declaration.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to keep track of the unparsed entities
+      * declared in a document.</p>
+      *
+      * @param name The entity name.
+      * @param publicId The entity public identifier, or null if not
+      *                 available.
+      * @param systemId The entity system identifier.
+      * @param notationName The name of the associated notation.
+      * @see org.xml.sax.DTDHandler#unparsedEntityDecl
+      */
+     public void unparsedEntityDecl (String name, String publicId,
+ 				    String systemId, String notationName)
+     {
+ 	// no op
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Default implementation of DocumentHandler interface.
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Receive a Locator object for document events.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass if they wish to store the locator for use
+      * with other document events.</p>
+      *
+      * @param locator A locator for all SAX document events.
+      * @see org.xml.sax.DocumentHandler#setDocumentLocator
+      * @see org.xml.sax.Locator
+      */
+     public void setDocumentLocator (Locator locator)
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of the beginning of the document.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the beginning
+      * of a document (such as allocating the root node of a tree or
+      * creating an output file).</p>
+      *
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.DocumentHandler#startDocument
+      */
+     public void startDocument ()
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of the end of the document.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the beginning
+      * of a document (such as finalising a tree or closing an output
+      * file).</p>
+      *
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.DocumentHandler#endDocument
+      */
+     public void endDocument ()
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of the start of an element.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the start of
+      * each element (such as allocating a new tree node or writing
+      * output to a file).</p>
+      *
+      * @param name The element type name.
+      * @param attributes The specified or defaulted attributes.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.DocumentHandler#startElement
+      */
+     public void startElement (String name, AttributeList attributes)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of the end of an element.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the end of
+      * each element (such as finalising a tree node or writing
+      * output to a file).</p>
+      *
+      * @param name the element name
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.DocumentHandler#endElement
+      */
+     public void endElement (String name)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of character data inside an element.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method to take specific actions for each chunk of character data
+      * (such as adding the data to a node or buffer, or printing it to
+      * a file).</p>
+      *
+      * @param ch The characters.
+      * @param start The start position in the character array.
+      * @param length The number of characters to use from the
+      *               character array.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.DocumentHandler#characters
+      */
+     public void characters (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of ignorable whitespace in element content.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method to take specific actions for each chunk of ignorable
+      * whitespace (such as adding data to a node or buffer, or printing
+      * it to a file).</p>
+      *
+      * @param ch The whitespace characters.
+      * @param start The start position in the character array.
+      * @param length The number of characters to use from the
+      *               character array.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.DocumentHandler#ignorableWhitespace
+      */
+     public void ignorableWhitespace (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of a processing instruction.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions for each
+      * processing instruction, such as setting status variables or
+      * invoking other methods.</p>
+      *
+      * @param target The processing instruction target.
+      * @param data The processing instruction data, or null if
+      *             none is supplied.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.DocumentHandler#processingInstruction
+      */
+     public void processingInstruction (String target, String data)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Default implementation of the ErrorHandler interface.
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Receive notification of a parser warning.
+      *
+      * <p>The default implementation does nothing.  Application writers
+      * may override this method in a subclass to take specific actions
+      * for each warning, such as inserting the message in a log file or
+      * printing it to the console.</p>
+      *
+      * @param e The warning information encoded as an exception.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ErrorHandler#warning
+      * @see org.xml.sax.SAXParseException
+      */
+     public void warning (SAXParseException e)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of a recoverable parser error.
+      *
+      * <p>The default implementation does nothing.  Application writers
+      * may override this method in a subclass to take specific actions
+      * for each error, such as inserting the message in a log file or
+      * printing it to the console.</p>
+      *
+      * @param e The warning information encoded as an exception.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ErrorHandler#warning
+      * @see org.xml.sax.SAXParseException
+      */
+     public void error (SAXParseException e)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Report a fatal XML parsing error.
+      *
+      * <p>The default implementation throws a SAXParseException.
+      * Application writers may override this method in a subclass if
+      * they need to take specific actions for each fatal error (such as
+      * collecting all of the errors into a single report): in any case,
+      * the application must stop all regular processing when this
+      * method is invoked, since the document is no longer reliable, and
+      * the parser may no longer report parsing events.</p>
+      *
+      * @param e The error information encoded as an exception.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ErrorHandler#fatalError
+      * @see org.xml.sax.SAXParseException
+      */
+     public void fatalError (SAXParseException e)
+ 	throws SAXException
+     {
+ 	throw e;
+     }
+     
+ }
+ 
+ // end of HandlerBase.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/InputSource.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/InputSource.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/InputSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/InputSource.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,336 ----
+ // SAX input source.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: InputSource.java,v 1.12 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ import java.io.Reader;
+ import java.io.InputStream;
+ 
+ /**
+  * A single input source for an XML entity.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class allows a SAX application to encapsulate information
+  * about an input source in a single object, which may include
+  * a public identifier, a system identifier, a byte stream (possibly
+  * with a specified encoding), and/or a character stream.</p>
+  *
+  * <p>There are two places that the application can deliver an
+  * input source to the parser: as the argument to the Parser.parse
+  * method, or as the return value of the EntityResolver.resolveEntity
+  * method.</p>
+  *
+  * <p>The SAX parser will use the InputSource object to determine how
+  * to read XML input.  If there is a character stream available, the
+  * parser will read that stream directly, disregarding any text
+  * encoding declaration found in that stream.
+  * If there is no character stream, but there is
+  * a byte stream, the parser will use that byte stream, using the
+  * encoding specified in the InputSource or else (if no encoding is
+  * specified) autodetecting the character encoding using an algorithm
+  * such as the one in the XML specification.  If neither a character
+  * stream nor a
+  * byte stream is available, the parser will attempt to open a URI
+  * connection to the resource identified by the system
+  * identifier.</p>
+  *
+  * <p>An InputSource object belongs to the application: the SAX parser
+  * shall never modify it in any way (it may modify a copy if 
+  * necessary).  However, standard processing of both byte and
+  * character streams is to close them on as part of end-of-parse cleanup,
+  * so applications should not attempt to re-use such streams after they
+  * have been handed to a parser.  </p>
+  *
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.XMLReader#parse(org.xml.sax.InputSource)
+  * @see org.xml.sax.EntityResolver#resolveEntity
+  * @see java.io.InputStream
+  * @see java.io.Reader
+  */
+ public class InputSource {
+     
+     /**
+      * Zero-argument default constructor.
+      *
+      * @see #setPublicId
+      * @see #setSystemId
+      * @see #setByteStream
+      * @see #setCharacterStream
+      * @see #setEncoding
+      */
+     public InputSource ()
+     {
+     }
+     
+     
+     /**
+      * Create a new input source with a system identifier.
+      *
+      * <p>Applications may use setPublicId to include a 
+      * public identifier as well, or setEncoding to specify
+      * the character encoding, if known.</p>
+      *
+      * <p>If the system identifier is a URL, it must be fully
+      * resolved (it may not be a relative URL).</p>
+      *
+      * @param systemId The system identifier (URI).
+      * @see #setPublicId
+      * @see #setSystemId
+      * @see #setByteStream
+      * @see #setEncoding
+      * @see #setCharacterStream
+      */
+     public InputSource (String systemId)
+     {
+ 	setSystemId(systemId);
+     }
+     
+     
+     /**
+      * Create a new input source with a byte stream.
+      *
+      * <p>Application writers should use setSystemId() to provide a base 
+      * for resolving relative URIs, may use setPublicId to include a 
+      * public identifier, and may use setEncoding to specify the object's
+      * character encoding.</p>
+      *
+      * @param byteStream The raw byte stream containing the document.
+      * @see #setPublicId
+      * @see #setSystemId
+      * @see #setEncoding
+      * @see #setByteStream
+      * @see #setCharacterStream
+      */
+     public InputSource (InputStream byteStream)
+     {
+ 	setByteStream(byteStream);
+     }
+     
+     
+     /**
+      * Create a new input source with a character stream.
+      *
+      * <p>Application writers should use setSystemId() to provide a base 
+      * for resolving relative URIs, and may use setPublicId to include a 
+      * public identifier.</p>
+      *
+      * <p>The character stream shall not include a byte order mark.</p>
+      *
+      * @see #setPublicId
+      * @see #setSystemId
+      * @see #setByteStream
+      * @see #setCharacterStream
+      */
+     public InputSource (Reader characterStream)
+     {
+ 	setCharacterStream(characterStream);
+     }
+     
+     
+     /**
+      * Set the public identifier for this input source.
+      *
+      * <p>The public identifier is always optional: if the application
+      * writer includes one, it will be provided as part of the
+      * location information.</p>
+      *
+      * @param publicId The public identifier as a string.
+      * @see #getPublicId
+      * @see org.xml.sax.Locator#getPublicId
+      * @see org.xml.sax.SAXParseException#getPublicId
+      */
+     public void setPublicId (String publicId)
+     {
+ 	this.publicId = publicId;
+     }
+     
+     
+     /**
+      * Get the public identifier for this input source.
+      *
+      * @return The public identifier, or null if none was supplied.
+      * @see #setPublicId
+      */
+     public String getPublicId ()
+     {
+ 	return publicId;
+     }
+     
+     
+     /**
+      * Set the system identifier for this input source.
+      *
+      * <p>The system identifier is optional if there is a byte stream
+      * or a character stream, but it is still useful to provide one,
+      * since the application can use it to resolve relative URIs
+      * and can include it in error messages and warnings (the parser
+      * will attempt to open a connection to the URI only if
+      * there is no byte stream or character stream specified).</p>
+      *
+      * <p>If the application knows the character encoding of the
+      * object pointed to by the system identifier, it can register
+      * the encoding using the setEncoding method.</p>
+      *
+      * <p>If the system identifier is a URL, it must be fully
+      * resolved (it may not be a relative URL).</p>
+      *
+      * @param systemId The system identifier as a string.
+      * @see #setEncoding
+      * @see #getSystemId
+      * @see org.xml.sax.Locator#getSystemId
+      * @see org.xml.sax.SAXParseException#getSystemId
+      */
+     public void setSystemId (String systemId)
+     {
+ 	this.systemId = systemId;
+     }
+     
+     
+     /**
+      * Get the system identifier for this input source.
+      *
+      * <p>The getEncoding method will return the character encoding
+      * of the object pointed to, or null if unknown.</p>
+      *
+      * <p>If the system ID is a URL, it will be fully resolved.</p>
+      *
+      * @return The system identifier, or null if none was supplied.
+      * @see #setSystemId
+      * @see #getEncoding
+      */
+     public String getSystemId ()
+     {
+ 	return systemId;
+     }
+     
+     
+     /**
+      * Set the byte stream for this input source.
+      *
+      * <p>The SAX parser will ignore this if there is also a character
+      * stream specified, but it will use a byte stream in preference
+      * to opening a URI connection itself.</p>
+      *
+      * <p>If the application knows the character encoding of the
+      * byte stream, it should set it with the setEncoding method.</p>
+      *
+      * @param byteStream A byte stream containing an XML document or
+      *        other entity.
+      * @see #setEncoding
+      * @see #getByteStream
+      * @see #getEncoding
+      * @see java.io.InputStream
+      */
+     public void setByteStream (InputStream byteStream)
+     {
+ 	this.byteStream = byteStream;
+     }
+     
+     
+     /**
+      * Get the byte stream for this input source.
+      *
+      * <p>The getEncoding method will return the character
+      * encoding for this byte stream, or null if unknown.</p>
+      *
+      * @return The byte stream, or null if none was supplied.
+      * @see #getEncoding
+      * @see #setByteStream
+      */
+     public InputStream getByteStream ()
+     {
+ 	return byteStream;
+     }
+     
+     
+     /** 
+      * Set the character encoding, if known.
+      *
+      * <p>The encoding must be a string acceptable for an
+      * XML encoding declaration (see section 4.3.3 of the XML 1.0
+      * recommendation).</p>
+      *
+      * <p>This method has no effect when the application provides a
+      * character stream.</p>
+      *
+      * @param encoding A string describing the character encoding.
+      * @see #setSystemId
+      * @see #setByteStream
+      * @see #getEncoding
+      */
+     public void setEncoding (String encoding)
+     {
+ 	this.encoding = encoding;
+     }
+     
+     
+     /**
+      * Get the character encoding for a byte stream or URI.
+      * This value will be ignored when the application provides a
+      * character stream.
+      *
+      * @return The encoding, or null if none was supplied.
+      * @see #setByteStream
+      * @see #getSystemId
+      * @see #getByteStream
+      */
+     public String getEncoding ()
+     {
+ 	return encoding;
+     }
+     
+     
+     /**
+      * Set the character stream for this input source.
+      *
+      * <p>If there is a character stream specified, the SAX parser
+      * will ignore any byte stream and will not attempt to open
+      * a URI connection to the system identifier.</p>
+      *
+      * @param characterStream The character stream containing the
+      *        XML document or other entity.
+      * @see #getCharacterStream
+      * @see java.io.Reader
+      */
+     public void setCharacterStream (Reader characterStream)
+     {
+ 	this.characterStream = characterStream;
+     }
+     
+     
+     /**
+      * Get the character stream for this input source.
+      *
+      * @return The character stream, or null if none was supplied.
+      * @see #setCharacterStream
+      */
+     public Reader getCharacterStream ()
+     {
+ 	return characterStream;
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal state.
+     ////////////////////////////////////////////////////////////////////
+     
+     private String publicId;
+     private String systemId;
+     private InputStream byteStream;
+     private String encoding;
+     private Reader characterStream;
+     
+ }
+ 
+ // end of InputSource.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/Locator.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/Locator.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/Locator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/Locator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,136 ----
+ // SAX locator interface for document events.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: Locator.java,v 1.10 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ 
+ /**
+  * Interface for associating a SAX event with a document location.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>If a SAX parser provides location information to the SAX
+  * application, it does so by implementing this interface and then
+  * passing an instance to the application using the content
+  * handler's {@link org.xml.sax.ContentHandler#setDocumentLocator
+  * setDocumentLocator} method.  The application can use the
+  * object to obtain the location of any other SAX event
+  * in the XML source document.</p>
+  *
+  * <p>Note that the results returned by the object will be valid only
+  * during the scope of each callback method: the application
+  * will receive unpredictable results if it attempts to use the
+  * locator at any other time, or after parsing completes.</p>
+  *
+  * <p>SAX parsers are not required to supply a locator, but they are
+  * very strongly encouraged to do so.  If the parser supplies a
+  * locator, it must do so before reporting any other document events.
+  * If no locator has been set by the time the application receives
+  * the {@link org.xml.sax.ContentHandler#startDocument startDocument}
+  * event, the application should assume that a locator is not 
+  * available.</p>
+  *
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.ContentHandler#setDocumentLocator 
+  */
+ public interface Locator {
+     
+     
+     /**
+      * Return the public identifier for the current document event.
+      *
+      * <p>The return value is the public identifier of the document
+      * entity or of the external parsed entity in which the markup
+      * triggering the event appears.</p>
+      *
+      * @return A string containing the public identifier, or
+      *         null if none is available.
+      * @see #getSystemId
+      */
+     public abstract String getPublicId ();
+     
+     
+     /**
+      * Return the system identifier for the current document event.
+      *
+      * <p>The return value is the system identifier of the document
+      * entity or of the external parsed entity in which the markup
+      * triggering the event appears.</p>
+      *
+      * <p>If the system identifier is a URL, the parser must resolve it
+      * fully before passing it to the application.  For example, a file
+      * name must always be provided as a <em>file:...</em> URL, and other
+      * kinds of relative URI are also resolved against their bases.</p>
+      *
+      * @return A string containing the system identifier, or null
+      *         if none is available.
+      * @see #getPublicId
+      */
+     public abstract String getSystemId ();
+     
+     
+     /**
+      * Return the line number where the current document event ends.
+      * Lines are delimited by line ends, which are defined in
+      * the XML specification.
+      *
+      * <p><strong>Warning:</strong> The return value from the method
+      * is intended only as an approximation for the sake of diagnostics;
+      * it is not intended to provide sufficient information
+      * to edit the character content of the original XML document.
+      * In some cases, these "line" numbers match what would be displayed
+      * as columns, and in others they may not match the source text
+      * due to internal entity expansion.  </p>
+      *
+      * <p>The return value is an approximation of the line number
+      * in the document entity or external parsed entity where the
+      * markup triggering the event appears.</p>
+      *
+      * <p>If possible, the SAX driver should provide the line position 
+      * of the first character after the text associated with the document 
+      * event.  The first line is line 1.</p>
+      *
+      * @return The line number, or -1 if none is available.
+      * @see #getColumnNumber
+      */
+     public abstract int getLineNumber ();
+     
+     
+     /**
+      * Return the column number where the current document event ends.
+      * This is one-based number of Java <code>char</code> values since
+      * the last line end.
+      *
+      * <p><strong>Warning:</strong> The return value from the method
+      * is intended only as an approximation for the sake of diagnostics;
+      * it is not intended to provide sufficient information
+      * to edit the character content of the original XML document.
+      * For example, when lines contain combining character sequences, wide
+      * characters, surrogate pairs, or bi-directional text, the value may
+      * not correspond to the column in a text editor's display. </p>
+      *
+      * <p>The return value is an approximation of the column number
+      * in the document entity or external parsed entity where the
+      * markup triggering the event appears.</p>
+      *
+      * <p>If possible, the SAX driver should provide the line position 
+      * of the first character after the text associated with the document 
+      * event.  The first column in each line is column 1.</p>
+      *
+      * @return The column number, or -1 if none is available.
+      * @see #getLineNumber
+      */
+     public abstract int getColumnNumber ();
+     
+ }
+ 
+ // end of Locator.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/Parser.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/Parser.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/Parser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/Parser.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,209 ----
+ // SAX parser interface.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: Parser.java,v 1.10 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ import java.io.IOException;
+ import java.util.Locale;
+ 
+ 
+ /**
+  * Basic interface for SAX (Simple API for XML) parsers.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This was the main event supplier interface for SAX1; it has
+  * been replaced in SAX2 by {@link org.xml.sax.XMLReader XMLReader},
+  * which includes Namespace support and sophisticated configurability
+  * and extensibility.</p>
+  *
+  * <p>All SAX1 parsers must implement this basic interface: it allows
+  * applications to register handlers for different types of events
+  * and to initiate a parse from a URI, or a character stream.</p>
+  *
+  * <p>All SAX1 parsers must also implement a zero-argument constructor
+  * (though other constructors are also allowed).</p>
+  *
+  * <p>SAX1 parsers are reusable but not re-entrant: the application
+  * may reuse a parser object (possibly with a different input source)
+  * once the first parse has completed successfully, but it may not
+  * invoke the parse() methods recursively within a parse.</p>
+  *
+  * @deprecated This interface has been replaced by the SAX2
+  *             {@link org.xml.sax.XMLReader XMLReader}
+  *             interface, which includes Namespace support.
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.EntityResolver
+  * @see org.xml.sax.DTDHandler
+  * @see org.xml.sax.DocumentHandler
+  * @see org.xml.sax.ErrorHandler
+  * @see org.xml.sax.HandlerBase
+  * @see org.xml.sax.InputSource
+  */
+ public interface Parser 
+ {
+     
+     /**
+      * Allow an application to request a locale for errors and warnings.
+      *
+      * <p>SAX parsers are not required to provide localisation for errors
+      * and warnings; if they cannot support the requested locale,
+      * however, they must throw a SAX exception.  Applications may
+      * not request a locale change in the middle of a parse.</p>
+      *
+      * @param locale A Java Locale object.
+      * @exception org.xml.sax.SAXException Throws an exception
+      *            (using the previous or default locale) if the 
+      *            requested locale is not supported.
+      * @see org.xml.sax.SAXException
+      * @see org.xml.sax.SAXParseException
+      */
+     public abstract void setLocale (Locale locale)
+ 	throws SAXException;
+     
+     
+     /**
+      * Allow an application to register a custom entity resolver.
+      *
+      * <p>If the application does not register an entity resolver, the
+      * SAX parser will resolve system identifiers and open connections
+      * to entities itself (this is the default behaviour implemented in
+      * HandlerBase).</p>
+      *
+      * <p>Applications may register a new or different entity resolver
+      * in the middle of a parse, and the SAX parser must begin using
+      * the new resolver immediately.</p>
+      *
+      * @param resolver The object for resolving entities.
+      * @see EntityResolver
+      * @see HandlerBase
+      */
+     public abstract void setEntityResolver (EntityResolver resolver);
+     
+     
+     /**
+      * Allow an application to register a DTD event handler.
+      *
+      * <p>If the application does not register a DTD handler, all DTD
+      * events reported by the SAX parser will be silently
+      * ignored (this is the default behaviour implemented by
+      * HandlerBase).</p>
+      *
+      * <p>Applications may register a new or different
+      * handler in the middle of a parse, and the SAX parser must
+      * begin using the new handler immediately.</p>
+      *
+      * @param handler The DTD handler.
+      * @see DTDHandler
+      * @see HandlerBase
+      */
+     public abstract void setDTDHandler (DTDHandler handler);
+     
+     
+     /**
+      * Allow an application to register a document event handler.
+      *
+      * <p>If the application does not register a document handler, all
+      * document events reported by the SAX parser will be silently
+      * ignored (this is the default behaviour implemented by
+      * HandlerBase).</p>
+      *
+      * <p>Applications may register a new or different handler in the
+      * middle of a parse, and the SAX parser must begin using the new
+      * handler immediately.</p>
+      *
+      * @param handler The document handler.
+      * @see DocumentHandler
+      * @see HandlerBase
+      */
+     public abstract void setDocumentHandler (DocumentHandler handler);
+     
+     
+     /**
+      * Allow an application to register an error event handler.
+      *
+      * <p>If the application does not register an error event handler,
+      * all error events reported by the SAX parser will be silently
+      * ignored, except for fatalError, which will throw a SAXException
+      * (this is the default behaviour implemented by HandlerBase).</p>
+      *
+      * <p>Applications may register a new or different handler in the
+      * middle of a parse, and the SAX parser must begin using the new
+      * handler immediately.</p>
+      *
+      * @param handler The error handler.
+      * @see ErrorHandler
+      * @see SAXException
+      * @see HandlerBase
+      */
+     public abstract void setErrorHandler (ErrorHandler handler);
+     
+     
+     /**
+      * Parse an XML document.
+      *
+      * <p>The application can use this method to instruct the SAX parser
+      * to begin parsing an XML document from any valid input
+      * source (a character stream, a byte stream, or a URI).</p>
+      *
+      * <p>Applications may not invoke this method while a parse is in
+      * progress (they should create a new Parser instead for each
+      * additional XML document).  Once a parse is complete, an
+      * application may reuse the same Parser object, possibly with a
+      * different input source.</p>
+      *
+      * @param source The input source for the top-level of the
+      *        XML document.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @exception java.io.IOException An IO exception from the parser,
+      *            possibly from a byte stream or character stream
+      *            supplied by the application.
+      * @see org.xml.sax.InputSource
+      * @see #parse(java.lang.String)
+      * @see #setEntityResolver
+      * @see #setDTDHandler
+      * @see #setDocumentHandler
+      * @see #setErrorHandler
+      */
+     public abstract void parse (InputSource source)
+ 	throws SAXException, IOException;
+     
+     
+     /**
+      * Parse an XML document from a system identifier (URI).
+      *
+      * <p>This method is a shortcut for the common case of reading a
+      * document from a system identifier.  It is the exact
+      * equivalent of the following:</p>
+      *
+      * <pre>
+      * parse(new InputSource(systemId));
+      * </pre>
+      *
+      * <p>If the system identifier is a URL, it must be fully resolved
+      * by the application before it is passed to the parser.</p>
+      *
+      * @param systemId The system identifier (URI).
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @exception java.io.IOException An IO exception from the parser,
+      *            possibly from a byte stream or character stream
+      *            supplied by the application.
+      * @see #parse(org.xml.sax.InputSource)
+      */
+     public abstract void parse (String systemId)
+ 	throws SAXException, IOException;
+     
+ }
+ 
+ // end of Parser.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/SAXException.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/SAXException.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/SAXException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/SAXException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,153 ----
+ // SAX exception class.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: SAXException.java,v 1.10 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ /**
+  * Encapsulate a general SAX error or warning.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class can contain basic error or warning information from
+  * either the XML parser or the application: a parser writer or
+  * application writer can subclass it to provide additional
+  * functionality.  SAX handlers may throw this exception or
+  * any exception subclassed from it.</p>
+  *
+  * <p>If the application needs to pass through other types of
+  * exceptions, it must wrap those exceptions in a SAXException
+  * or an exception derived from a SAXException.</p>
+  *
+  * <p>If the parser or application needs to include information about a
+  * specific location in an XML document, it should use the
+  * {@link org.xml.sax.SAXParseException SAXParseException} subclass.</p>
+  *
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.SAXParseException
+  */
+ public class SAXException extends Exception {
+ 
+ 
+     /**
+      * Create a new SAXException.
+      */
+     public SAXException ()
+     {
+ 	super();
+ 	this.exception = null;
+     }
+     
+     
+     /**
+      * Create a new SAXException.
+      *
+      * @param message The error or warning message.
+      */
+     public SAXException (String message) {
+ 	super(message);
+ 	this.exception = null;
+     }
+     
+     
+     /**
+      * Create a new SAXException wrapping an existing exception.
+      *
+      * <p>The existing exception will be embedded in the new
+      * one, and its message will become the default message for
+      * the SAXException.</p>
+      *
+      * @param e The exception to be wrapped in a SAXException.
+      */
+     public SAXException (Exception e)
+     {
+ 	super();
+ 	this.exception = e;
+     }
+     
+     
+     /**
+      * Create a new SAXException from an existing exception.
+      *
+      * <p>The existing exception will be embedded in the new
+      * one, but the new exception will have its own message.</p>
+      *
+      * @param message The detail message.
+      * @param e The exception to be wrapped in a SAXException.
+      */
+     public SAXException (String message, Exception e)
+     {
+ 	super(message);
+ 	this.exception = e;
+     }
+     
+     
+     /**
+      * Return a detail message for this exception.
+      *
+      * <p>If there is an embedded exception, and if the SAXException
+      * has no detail message of its own, this method will return
+      * the detail message from the embedded exception.</p>
+      *
+      * @return The error or warning message.
+      */
+     public String getMessage ()
+     {
+ 	String message = super.getMessage();
+ 	
+ 	if (message == null && exception != null) {
+ 	    return exception.getMessage();
+ 	} else {
+ 	    return message;
+ 	}
+     }
+     
+     
+     /**
+      * Return the embedded exception, if any.
+      *
+      * @return The embedded exception, or null if there is none.
+      */
+     public Exception getException ()
+     {
+ 	return exception;
+     }
+ 
+ 
+     /**
+      * Override toString to pick up any embedded exception.
+      *
+      * @return A string representation of this exception.
+      */
+     public String toString ()
+     {
+ 	if (exception != null) {
+ 	    return exception.toString();
+ 	} else {
+ 	    return super.toString();
+ 	}
+     }
+     
+     
+     
+     //////////////////////////////////////////////////////////////////////
+     // Internal state.
+     //////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * @serial The embedded exception if tunnelling, or null.
+      */    
+     private Exception exception;
+     
+ }
+ 
+ // end of SAXException.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/SAXNotRecognizedException.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/SAXNotRecognizedException.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/SAXNotRecognizedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/SAXNotRecognizedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ // SAXNotRecognizedException.java - unrecognized feature or value.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the Public Domain.
+ // $Id: SAXNotRecognizedException.java,v 1.11 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ 
+ /**
+  * Exception class for an unrecognized identifier.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>An XMLReader will throw this exception when it finds an
+  * unrecognized feature or property identifier; SAX applications and
+  * extensions may use this class for other, similar purposes.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.SAXNotSupportedException
+  */
+ public class SAXNotRecognizedException extends SAXException
+ {
+ 
+     /**
+      * Default constructor.
+      */
+     public SAXNotRecognizedException ()
+     {
+ 	super();
+     }
+ 
+ 
+     /**
+      * Construct a new exception with the given message.
+      *
+      * @param message The text message of the exception.
+      */
+     public SAXNotRecognizedException (String message)
+     {
+ 	super(message);
+     }
+ 
+ }
+ 
+ // end of SAXNotRecognizedException.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/SAXNotSupportedException.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/SAXNotSupportedException.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/SAXNotSupportedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/SAXNotSupportedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ // SAXNotSupportedException.java - unsupported feature or value.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the Public Domain.
+ // $Id: SAXNotSupportedException.java,v 1.11 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ /**
+  * Exception class for an unsupported operation.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>An XMLReader will throw this exception when it recognizes a
+  * feature or property identifier, but cannot perform the requested
+  * operation (setting a state or value).  Other SAX2 applications and
+  * extensions may use this class for similar purposes.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.SAXNotRecognizedException 
+  */
+ public class SAXNotSupportedException extends SAXException
+ {
+ 
+     /**
+      * Construct a new exception with no message.
+      */
+     public SAXNotSupportedException ()
+     {
+ 	super();
+     }
+ 
+ 
+     /**
+      * Construct a new exception with the given message.
+      *
+      * @param message The text message of the exception.
+      */
+     public SAXNotSupportedException (String message)
+     {
+ 	super(message);
+     }
+ 
+ }
+ 
+ // end of SAXNotSupportedException.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/SAXParseException.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/SAXParseException.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/SAXParseException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/SAXParseException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,269 ----
+ // SAX exception class.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: SAXParseException.java,v 1.10 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ /**
+  * Encapsulate an XML parse error or warning.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This exception may include information for locating the error
+  * in the original XML document, as if it came from a {@link Locator}
+  * object.  Note that although the application
+  * will receive a SAXParseException as the argument to the handlers
+  * in the {@link org.xml.sax.ErrorHandler ErrorHandler} interface, 
+  * the application is not actually required to throw the exception; 
+  * instead, it can simply read the information in it and take a 
+  * different action.</p>
+  *
+  * <p>Since this exception is a subclass of {@link org.xml.sax.SAXException 
+  * SAXException}, it inherits the ability to wrap another exception.</p>
+  *
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.SAXException
+  * @see org.xml.sax.Locator
+  * @see org.xml.sax.ErrorHandler
+  */
+ public class SAXParseException extends SAXException {
+     
+     
+     //////////////////////////////////////////////////////////////////////
+     // Constructors.
+     //////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Create a new SAXParseException from a message and a Locator.
+      *
+      * <p>This constructor is especially useful when an application is
+      * creating its own exception from within a {@link org.xml.sax.ContentHandler
+      * ContentHandler} callback.</p>
+      *
+      * @param message The error or warning message.
+      * @param locator The locator object for the error or warning (may be
+      *        null).
+      * @see org.xml.sax.Locator
+      */
+     public SAXParseException (String message, Locator locator) {
+ 	super(message);
+ 	if (locator != null) {
+ 	    init(locator.getPublicId(), locator.getSystemId(),
+ 		 locator.getLineNumber(), locator.getColumnNumber());
+ 	} else {
+ 	    init(null, null, -1, -1);
+ 	}
+     }
+     
+     
+     /**
+      * Wrap an existing exception in a SAXParseException.
+      *
+      * <p>This constructor is especially useful when an application is
+      * creating its own exception from within a {@link org.xml.sax.ContentHandler
+      * ContentHandler} callback, and needs to wrap an existing exception that is not a
+      * subclass of {@link org.xml.sax.SAXException SAXException}.</p>
+      *
+      * @param message The error or warning message, or null to
+      *                use the message from the embedded exception.
+      * @param locator The locator object for the error or warning (may be
+      *        null).
+      * @param e Any exception.
+      * @see org.xml.sax.Locator
+      */
+     public SAXParseException (String message, Locator locator,
+ 			      Exception e) {
+ 	super(message, e);
+ 	if (locator != null) {
+ 	    init(locator.getPublicId(), locator.getSystemId(),
+ 		 locator.getLineNumber(), locator.getColumnNumber());
+ 	} else {
+ 	    init(null, null, -1, -1);
+ 	}
+     }
+     
+     
+     /**
+      * Create a new SAXParseException.
+      *
+      * <p>This constructor is most useful for parser writers.</p>
+      *
+      * <p>All parameters except the message are as if
+      * they were provided by a {@link Locator}.  For example, if the
+      * system identifier is a URL (including relative filename), the
+      * caller must resolve it fully before creating the exception.</p>
+      *
+      *
+      * @param message The error or warning message.
+      * @param publicId The public identifier of the entity that generated
+      *                 the error or warning.
+      * @param systemId The system identifier of the entity that generated
+      *                 the error or warning.
+      * @param lineNumber The line number of the end of the text that
+      *                   caused the error or warning.
+      * @param columnNumber The column number of the end of the text that
+      *                     cause the error or warning.
+      */
+     public SAXParseException (String message, String publicId, String systemId,
+ 			      int lineNumber, int columnNumber)
+     {
+ 	super(message);
+ 	init(publicId, systemId, lineNumber, columnNumber);
+     }
+     
+     
+     /**
+      * Create a new SAXParseException with an embedded exception.
+      *
+      * <p>This constructor is most useful for parser writers who
+      * need to wrap an exception that is not a subclass of
+      * {@link org.xml.sax.SAXException SAXException}.</p>
+      *
+      * <p>All parameters except the message and exception are as if
+      * they were provided by a {@link Locator}.  For example, if the
+      * system identifier is a URL (including relative filename), the
+      * caller must resolve it fully before creating the exception.</p>
+      *
+      * @param message The error or warning message, or null to use
+      *                the message from the embedded exception.
+      * @param publicId The public identifier of the entity that generated
+      *                 the error or warning.
+      * @param systemId The system identifier of the entity that generated
+      *                 the error or warning.
+      * @param lineNumber The line number of the end of the text that
+      *                   caused the error or warning.
+      * @param columnNumber The column number of the end of the text that
+      *                     cause the error or warning.
+      * @param e Another exception to embed in this one.
+      */
+     public SAXParseException (String message, String publicId, String systemId,
+ 			      int lineNumber, int columnNumber, Exception e)
+     {
+ 	super(message, e);
+ 	init(publicId, systemId, lineNumber, columnNumber);
+     }
+ 
+ 
+     /**
+      * Internal initialization method.
+      *
+      * @param publicId The public identifier of the entity which generated the exception,
+      *        or null.
+      * @param systemId The system identifier of the entity which generated the exception,
+      *        or null.
+      * @param lineNumber The line number of the error, or -1.
+      * @param columnNumber The column number of the error, or -1.
+      */
+     private void init (String publicId, String systemId,
+ 		       int lineNumber, int columnNumber)
+     {
+ 	this.publicId = publicId;
+ 	this.systemId = systemId;
+ 	this.lineNumber = lineNumber;
+ 	this.columnNumber = columnNumber;
+     }
+     
+     
+     /**
+      * Get the public identifier of the entity where the exception occurred.
+      *
+      * @return A string containing the public identifier, or null
+      *         if none is available.
+      * @see org.xml.sax.Locator#getPublicId
+      */
+     public String getPublicId ()
+     {
+ 	return this.publicId;
+     }
+     
+     
+     /**
+      * Get the system identifier of the entity where the exception occurred.
+      *
+      * <p>If the system identifier is a URL, it will have been resolved
+      * fully.</p>
+      *
+      * @return A string containing the system identifier, or null
+      *         if none is available.
+      * @see org.xml.sax.Locator#getSystemId
+      */
+     public String getSystemId ()
+     {
+ 	return this.systemId;
+     }
+     
+     
+     /**
+      * The line number of the end of the text where the exception occurred.
+      *
+      * <p>The first line is line 1.</p>
+      *
+      * @return An integer representing the line number, or -1
+      *         if none is available.
+      * @see org.xml.sax.Locator#getLineNumber
+      */
+     public int getLineNumber ()
+     {
+ 	return this.lineNumber;
+     }
+     
+     
+     /**
+      * The column number of the end of the text where the exception occurred.
+      *
+      * <p>The first column in a line is position 1.</p>
+      *
+      * @return An integer representing the column number, or -1
+      *         if none is available.
+      * @see org.xml.sax.Locator#getColumnNumber
+      */
+     public int getColumnNumber ()
+     {
+ 	return this.columnNumber;
+     }
+     
+     
+     //////////////////////////////////////////////////////////////////////
+     // Internal state.
+     //////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * @serial The public identifier, or null.
+      * @see #getPublicId
+      */    
+     private String publicId;
+ 
+ 
+     /**
+      * @serial The system identifier, or null.
+      * @see #getSystemId
+      */
+     private String systemId;
+ 
+ 
+     /**
+      * @serial The line number, or -1.
+      * @see #getLineNumber
+      */
+     private int lineNumber;
+ 
+ 
+     /**
+      * @serial The column number, or -1.
+      * @see #getColumnNumber
+      */
+     private int columnNumber;
+     
+ }
+ 
+ // end of SAXParseException.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/XMLFilter.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/XMLFilter.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/XMLFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/XMLFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ // XMLFilter.java - filter SAX2 events.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the Public Domain.
+ // $Id: XMLFilter.java,v 1.10 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ 
+ /**
+  * Interface for an XML filter.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>An XML filter is like an XML reader, except that it obtains its
+  * events from another XML reader rather than a primary source like
+  * an XML document or database.  Filters can modify a stream of
+  * events as they pass on to the final application.</p>
+  *
+  * <p>The XMLFilterImpl helper class provides a convenient base
+  * for creating SAX2 filters, by passing on all {@link org.xml.sax.EntityResolver
+  * EntityResolver}, {@link org.xml.sax.DTDHandler DTDHandler},
+  * {@link org.xml.sax.ContentHandler ContentHandler} and {@link org.xml.sax.ErrorHandler
+  * ErrorHandler} events automatically.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.helpers.XMLFilterImpl
+  */
+ public interface XMLFilter extends XMLReader
+ {
+ 
+     /**
+      * Set the parent reader.
+      *
+      * <p>This method allows the application to link the filter to
+      * a parent reader (which may be another filter).  The argument
+      * may not be null.</p>
+      *
+      * @param parent The parent reader.
+      */
+     public abstract void setParent (XMLReader parent);
+ 
+ 
+     /**
+      * Get the parent reader.
+      *
+      * <p>This method allows the application to query the parent
+      * reader (which may be another filter).  It is generally a
+      * bad idea to perform any operations on the parent reader
+      * directly: they should all pass through this filter.</p>
+      *
+      * @return The parent filter, or null if none has been set.
+      */
+     public abstract XMLReader getParent ();
+ 
+ }
+ 
+ // end of XMLFilter.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/XMLReader.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/XMLReader.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/XMLReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/XMLReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,404 ----
+ // XMLReader.java - read an XML document.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the Public Domain.
+ // $Id: XMLReader.java,v 1.11 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * Interface for reading an XML document using callbacks.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p><strong>Note:</strong> despite its name, this interface does 
+  * <em>not</em> extend the standard Java {@link java.io.Reader Reader} 
+  * interface, because reading XML is a fundamentally different activity 
+  * than reading character data.</p>
+  *
+  * <p>XMLReader is the interface that an XML parser's SAX2 driver must
+  * implement.  This interface allows an application to set and
+  * query features and properties in the parser, to register
+  * event handlers for document processing, and to initiate
+  * a document parse.</p>
+  *
+  * <p>All SAX interfaces are assumed to be synchronous: the
+  * {@link #parse parse} methods must not return until parsing
+  * is complete, and readers must wait for an event-handler callback
+  * to return before reporting the next event.</p>
+  *
+  * <p>This interface replaces the (now deprecated) SAX 1.0 {@link
+  * org.xml.sax.Parser Parser} interface.  The XMLReader interface
+  * contains two important enhancements over the old Parser
+  * interface (as well as some minor ones):</p>
+  *
+  * <ol>
+  * <li>it adds a standard way to query and set features and 
+  *  properties; and</li>
+  * <li>it adds Namespace support, which is required for many
+  *  higher-level XML standards.</li>
+  * </ol>
+  *
+  * <p>There are adapters available to convert a SAX1 Parser to
+  * a SAX2 XMLReader and vice-versa.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1+ (sax2r3pre1)
+  * @see org.xml.sax.XMLFilter
+  * @see org.xml.sax.helpers.ParserAdapter
+  * @see org.xml.sax.helpers.XMLReaderAdapter 
+  */
+ public interface XMLReader
+ {
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Configuration.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Look up the value of a feature flag.
+      *
+      * <p>The feature name is any fully-qualified URI.  It is
+      * possible for an XMLReader to recognize a feature name but
+      * temporarily be unable to return its value.
+      * Some feature values may be available only in specific
+      * contexts, such as before, during, or after a parse.
+      * Also, some feature values may not be programmatically accessible.
+      * (In the case of an adapter for SAX1 {@link Parser}, there is no
+      * implementation-independent way to expose whether the underlying
+      * parser is performing validation, expanding external entities,
+      * and so forth.) </p>
+      *
+      * <p>All XMLReaders are required to recognize the
+      * http://xml.org/sax/features/namespaces and the
+      * http://xml.org/sax/features/namespace-prefixes feature names.</p>
+      *
+      * <p>Typical usage is something like this:</p>
+      *
+      * <pre>
+      * XMLReader r = new MySAXDriver();
+      *
+      *                         // try to activate validation
+      * try {
+      *   r.setFeature("http://xml.org/sax/features/validation", true);
+      * } catch (SAXException e) {
+      *   System.err.println("Cannot activate validation."); 
+      * }
+      *
+      *                         // register event handlers
+      * r.setContentHandler(new MyContentHandler());
+      * r.setErrorHandler(new MyErrorHandler());
+      *
+      *                         // parse the first document
+      * try {
+      *   r.parse("http://www.foo.com/mydoc.xml");
+      * } catch (IOException e) {
+      *   System.err.println("I/O exception reading XML document");
+      * } catch (SAXException e) {
+      *   System.err.println("XML exception reading document.");
+      * }
+      * </pre>
+      *
+      * <p>Implementors are free (and encouraged) to invent their own features,
+      * using names built on their own URIs.</p>
+      *
+      * @param name The feature name, which is a fully-qualified URI.
+      * @return The current value of the feature (true or false).
+      * @exception org.xml.sax.SAXNotRecognizedException If the feature
+      *            value can't be assigned or retrieved.
+      * @exception org.xml.sax.SAXNotSupportedException When the
+      *            XMLReader recognizes the feature name but 
+      *            cannot determine its value at this time.
+      * @see #setFeature
+      */
+     public boolean getFeature (String name)
+         throws SAXNotRecognizedException, SAXNotSupportedException;
+ 
+ 
+     /**
+      * Set the value of a feature flag.
+      *
+      * <p>The feature name is any fully-qualified URI.  It is
+      * possible for an XMLReader to expose a feature value but
+      * to be unable to change the current value.
+      * Some feature values may be immutable or mutable only 
+      * in specific contexts, such as before, during, or after 
+      * a parse.</p>
+      *
+      * <p>All XMLReaders are required to support setting
+      * http://xml.org/sax/features/namespaces to true and
+      * http://xml.org/sax/features/namespace-prefixes to false.</p>
+      *
+      * @param name The feature name, which is a fully-qualified URI.
+      * @param value The requested value of the feature (true or false).
+      * @exception org.xml.sax.SAXNotRecognizedException If the feature
+      *            value can't be assigned or retrieved.
+      * @exception org.xml.sax.SAXNotSupportedException When the
+      *            XMLReader recognizes the feature name but 
+      *            cannot set the requested value.
+      * @see #getFeature
+      */
+     public void setFeature (String name, boolean value)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException;
+ 
+ 
+     /**
+      * Look up the value of a property.
+      *
+      * <p>The property name is any fully-qualified URI.  It is
+      * possible for an XMLReader to recognize a property name but
+      * temporarily be unable to return its value.
+      * Some property values may be available only in specific
+      * contexts, such as before, during, or after a parse.</p>
+      *
+      * <p>XMLReaders are not required to recognize any specific
+      * property names, though an initial core set is documented for
+      * SAX2.</p>
+      *
+      * <p>Implementors are free (and encouraged) to invent their own properties,
+      * using names built on their own URIs.</p>
+      *
+      * @param name The property name, which is a fully-qualified URI.
+      * @return The current value of the property.
+      * @exception org.xml.sax.SAXNotRecognizedException If the property
+      *            value can't be assigned or retrieved.
+      * @exception org.xml.sax.SAXNotSupportedException When the
+      *            XMLReader recognizes the property name but 
+      *            cannot determine its value at this time.
+      * @see #setProperty
+      */
+     public Object getProperty (String name)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException;
+ 
+ 
+     /**
+      * Set the value of a property.
+      *
+      * <p>The property name is any fully-qualified URI.  It is
+      * possible for an XMLReader to recognize a property name but
+      * to be unable to change the current value.
+      * Some property values may be immutable or mutable only 
+      * in specific contexts, such as before, during, or after 
+      * a parse.</p>
+      *
+      * <p>XMLReaders are not required to recognize setting
+      * any specific property names, though a core set is defined by 
+      * SAX2.</p>
+      *
+      * <p>This method is also the standard mechanism for setting
+      * extended handlers.</p>
+      *
+      * @param name The property name, which is a fully-qualified URI.
+      * @param value The requested value for the property.
+      * @exception org.xml.sax.SAXNotRecognizedException If the property
+      *            value can't be assigned or retrieved.
+      * @exception org.xml.sax.SAXNotSupportedException When the
+      *            XMLReader recognizes the property name but 
+      *            cannot set the requested value.
+      */
+     public void setProperty (String name, Object value)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException;
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Event handlers.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Allow an application to register an entity resolver.
+      *
+      * <p>If the application does not register an entity resolver,
+      * the XMLReader will perform its own default resolution.</p>
+      *
+      * <p>Applications may register a new or different resolver in the
+      * middle of a parse, and the SAX parser must begin using the new
+      * resolver immediately.</p>
+      *
+      * @param resolver The entity resolver.
+      * @see #getEntityResolver
+      */
+     public void setEntityResolver (EntityResolver resolver);
+ 
+ 
+     /**
+      * Return the current entity resolver.
+      *
+      * @return The current entity resolver, or null if none
+      *         has been registered.
+      * @see #setEntityResolver
+      */
+     public EntityResolver getEntityResolver ();
+ 
+ 
+     /**
+      * Allow an application to register a DTD event handler.
+      *
+      * <p>If the application does not register a DTD handler, all DTD
+      * events reported by the SAX parser will be silently ignored.</p>
+      *
+      * <p>Applications may register a new or different handler in the
+      * middle of a parse, and the SAX parser must begin using the new
+      * handler immediately.</p>
+      *
+      * @param handler The DTD handler.
+      * @see #getDTDHandler
+      */
+     public void setDTDHandler (DTDHandler handler);
+ 
+ 
+     /**
+      * Return the current DTD handler.
+      *
+      * @return The current DTD handler, or null if none
+      *         has been registered.
+      * @see #setDTDHandler
+      */
+     public DTDHandler getDTDHandler ();
+ 
+ 
+     /**
+      * Allow an application to register a content event handler.
+      *
+      * <p>If the application does not register a content handler, all
+      * content events reported by the SAX parser will be silently
+      * ignored.</p>
+      *
+      * <p>Applications may register a new or different handler in the
+      * middle of a parse, and the SAX parser must begin using the new
+      * handler immediately.</p>
+      *
+      * @param handler The content handler.
+      * @see #getContentHandler
+      */
+     public void setContentHandler (ContentHandler handler);
+ 
+ 
+     /**
+      * Return the current content handler.
+      *
+      * @return The current content handler, or null if none
+      *         has been registered.
+      * @see #setContentHandler
+      */
+     public ContentHandler getContentHandler ();
+ 
+ 
+     /**
+      * Allow an application to register an error event handler.
+      *
+      * <p>If the application does not register an error handler, all
+      * error events reported by the SAX parser will be silently
+      * ignored; however, normal processing may not continue.  It is
+      * highly recommended that all SAX applications implement an
+      * error handler to avoid unexpected bugs.</p>
+      *
+      * <p>Applications may register a new or different handler in the
+      * middle of a parse, and the SAX parser must begin using the new
+      * handler immediately.</p>
+      *
+      * @param handler The error handler.
+      * @see #getErrorHandler
+      */
+     public void setErrorHandler (ErrorHandler handler);
+ 
+ 
+     /**
+      * Return the current error handler.
+      *
+      * @return The current error handler, or null if none
+      *         has been registered.
+      * @see #setErrorHandler
+      */
+     public ErrorHandler getErrorHandler ();
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Parsing.
+     ////////////////////////////////////////////////////////////////////
+ 
+     /**
+      * Parse an XML document.
+      *
+      * <p>The application can use this method to instruct the XML
+      * reader to begin parsing an XML document from any valid input
+      * source (a character stream, a byte stream, or a URI).</p>
+      *
+      * <p>Applications may not invoke this method while a parse is in
+      * progress (they should create a new XMLReader instead for each
+      * nested XML document).  Once a parse is complete, an
+      * application may reuse the same XMLReader object, possibly with a
+      * different input source.
+      * Configuration of the XMLReader object (such as handler bindings and
+      * values established for feature flags and properties) is unchanged
+      * by completion of a parse, unless the definition of that aspect of
+      * the configuration explicitly specifies other behavior.
+      * (For example, feature flags or properties exposing
+      * characteristics of the document being parsed.)
+      * </p>
+      *
+      * <p>During the parse, the XMLReader will provide information
+      * about the XML document through the registered event
+      * handlers.</p>
+      *
+      * <p>This method is synchronous: it will not return until parsing
+      * has ended.  If a client application wants to terminate 
+      * parsing early, it should throw an exception.</p>
+      *
+      * @param input The input source for the top-level of the
+      *        XML document.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @exception java.io.IOException An IO exception from the parser,
+      *            possibly from a byte stream or character stream
+      *            supplied by the application.
+      * @see org.xml.sax.InputSource
+      * @see #parse(java.lang.String)
+      * @see #setEntityResolver
+      * @see #setDTDHandler
+      * @see #setContentHandler
+      * @see #setErrorHandler 
+      */
+     public void parse (InputSource input)
+ 	throws IOException, SAXException;
+ 
+ 
+     /**
+      * Parse an XML document from a system identifier (URI).
+      *
+      * <p>This method is a shortcut for the common case of reading a
+      * document from a system identifier.  It is the exact
+      * equivalent of the following:</p>
+      *
+      * <pre>
+      * parse(new InputSource(systemId));
+      * </pre>
+      *
+      * <p>If the system identifier is a URL, it must be fully resolved
+      * by the application before it is passed to the parser.</p>
+      *
+      * @param systemId The system identifier (URI).
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @exception java.io.IOException An IO exception from the parser,
+      *            possibly from a byte stream or character stream
+      *            supplied by the application.
+      * @see #parse(org.xml.sax.InputSource)
+      */
+     public void parse (String systemId)
+ 	throws IOException, SAXException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/Attributes2.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/Attributes2.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/Attributes2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/Attributes2.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,132 ----
+ // Attributes2.java - extended Attributes
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: Attributes2.java,v 1.8 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.ext;
+ 
+ import org.xml.sax.Attributes;
+ 
+ 
+ /**
+  * SAX2 extension to augment the per-attribute information
+  * provided though {@link Attributes}.
+  * If an implementation supports this extension, the attributes
+  * provided in {@link org.xml.sax.ContentHandler#startElement
+  * ContentHandler.startElement() } will implement this interface,
+  * and the <em>http://xml.org/sax/features/use-attributes2</em>
+  * feature flag will have the value <em>true</em>.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * </blockquote>
+  *
+  * <p> XMLReader implementations are not required to support this
+  * information, and it is not part of core-only SAX2 distributions.</p>
+  *
+  * <p>Note that if an attribute was defaulted (<em>!isSpecified()</em>)
+  * it will of necessity also have been declared (<em>isDeclared()</em>)
+  * in the DTD.
+  * Similarly if an attribute's type is anything except CDATA, then it
+  * must have been declared.
+  * </p>
+  *
+  * @since SAX 2.0 (extensions 1.1 alpha)
+  * @author David Brownell
+  * @version TBS
+  */
+ public interface Attributes2 extends Attributes
+ {
+     /**
+      * Returns false unless the attribute was declared in the DTD.
+      * This helps distinguish two kinds of attributes that SAX reports
+      * as CDATA:  ones that were declared (and hence are usually valid),
+      * and those that were not (and which are never valid).
+      *
+      * @param index The attribute index (zero-based).
+      * @return true if the attribute was declared in the DTD,
+      *		false otherwise.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not identify an attribute.
+      */
+     public boolean isDeclared (int index);
+ 
+     /**
+      * Returns false unless the attribute was declared in the DTD.
+      * This helps distinguish two kinds of attributes that SAX reports
+      * as CDATA:  ones that were declared (and hence are usually valid),
+      * and those that were not (and which are never valid).
+      *
+      * @param qName The XML qualified (prefixed) name.
+      * @return true if the attribute was declared in the DTD,
+      *		false otherwise.
+      * @exception java.lang.IllegalArgumentException When the
+      *            supplied name does not identify an attribute.
+      */
+     public boolean isDeclared (String qName);
+ 
+     /**
+      * Returns false unless the attribute was declared in the DTD.
+      * This helps distinguish two kinds of attributes that SAX reports
+      * as CDATA:  ones that were declared (and hence are usually valid),
+      * and those that were not (and which are never valid).
+      *
+      * <p>Remember that since DTDs do not "understand" namespaces, the
+      * namespace URI associated with an attribute may not have come from
+      * the DTD.  The declaration will have applied to the attribute's
+      * <em>qName</em>.
+      *
+      * @param uri The Namespace URI, or the empty string if
+      *        the name has no Namespace URI.
+      * @param localName The attribute's local name.
+      * @return true if the attribute was declared in the DTD,
+      *		false otherwise.
+      * @exception java.lang.IllegalArgumentException When the
+      *            supplied names do not identify an attribute.
+      */
+     public boolean isDeclared (String uri, String localName);
+ 
+     /**
+      * Returns true unless the attribute value was provided
+      * by DTD defaulting.
+      *
+      * @param index The attribute index (zero-based).
+      * @return true if the value was found in the XML text,
+      *		false if the value was provided by DTD defaulting.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not identify an attribute.
+      */
+     public boolean isSpecified (int index);
+ 
+     /**
+      * Returns true unless the attribute value was provided
+      * by DTD defaulting.
+      *
+      * <p>Remember that since DTDs do not "understand" namespaces, the
+      * namespace URI associated with an attribute may not have come from
+      * the DTD.  The declaration will have applied to the attribute's
+      * <em>qName</em>.
+      *
+      * @param uri The Namespace URI, or the empty string if
+      *        the name has no Namespace URI.
+      * @param localName The attribute's local name.
+      * @return true if the value was found in the XML text,
+      *		false if the value was provided by DTD defaulting.
+      * @exception java.lang.IllegalArgumentException When the
+      *            supplied names do not identify an attribute.
+      */
+     public boolean isSpecified (String uri, String localName);
+ 
+     /**
+      * Returns true unless the attribute value was provided
+      * by DTD defaulting.
+      *
+      * @param qName The XML qualified (prefixed) name.
+      * @return true if the value was found in the XML text,
+      *		false if the value was provided by DTD defaulting.
+      * @exception java.lang.IllegalArgumentException When the
+      *            supplied name does not identify an attribute.
+      */
+     public boolean isSpecified (String qName);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/Attributes2Impl.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/Attributes2Impl.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/Attributes2Impl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/Attributes2Impl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,301 ----
+ // Attributes2Impl.java - extended AttributesImpl
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: Attributes2Impl.java,v 1.8 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.ext;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.helpers.AttributesImpl;
+ 
+ 
+ /**
+  * SAX2 extension helper for additional Attributes information,
+  * implementing the {@link Attributes2} interface.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * </blockquote>
+  *
+  * <p>This is not part of core-only SAX2 distributions.</p>
+  *
+  * <p>The <em>specified</em> flag for each attribute will always
+  * be true, unless it has been set to false in the copy constructor
+  * or using {@link #setSpecified}.
+  * Similarly, the <em>declared</em> flag for each attribute will
+  * always be false, except for defaulted attributes (<em>specified</em>
+  * is false), non-CDATA attributes, or when it is set to true using
+  * {@link #setDeclared}.
+  * If you change an attribute's type by hand, you may need to modify
+  * its <em>declared</em> flag to match. 
+  * </p>
+  *
+  * @since SAX 2.0 (extensions 1.1 alpha)
+  * @author David Brownell
+  * @version TBS
+  */
+ public class Attributes2Impl extends AttributesImpl implements Attributes2
+ {
+     private boolean	declared [];
+     private boolean	specified [];
+ 
+ 
+     /**
+      * Construct a new, empty Attributes2Impl object.
+      */
+     public Attributes2Impl () { }
+ 
+ 
+     /**
+      * Copy an existing Attributes or Attributes2 object.
+      * If the object implements Attributes2, values of the
+      * <em>specified</em> and <em>declared</em> flags for each
+      * attribute are copied.
+      * Otherwise the flag values are defaulted to assume no DTD was used,
+      * unless there is evidence to the contrary (such as attributes with
+      * type other than CDATA, which must have been <em>declared</em>).
+      *
+      * <p>This constructor is especially useful inside a
+      * {@link org.xml.sax.ContentHandler#startElement startElement} event.</p>
+      *
+      * @param atts The existing Attributes object.
+      */
+     public Attributes2Impl (Attributes atts)
+     {
+ 	super (atts);
+     }
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of Attributes2
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Returns the current value of the attribute's "declared" flag.
+      */
+     // javadoc mostly from interface
+     public boolean isDeclared (int index)
+     {
+ 	if (index < 0 || index >= getLength ())
+ 	    throw new ArrayIndexOutOfBoundsException (
+ 		"No attribute at index: " + index);
+ 	return declared [index];
+     }
+ 
+ 
+     /**
+      * Returns the current value of the attribute's "declared" flag.
+      */
+     // javadoc mostly from interface
+     public boolean isDeclared (String uri, String localName)
+     {
+ 	int index = getIndex (uri, localName);
+ 
+ 	if (index < 0)
+ 	    throw new IllegalArgumentException (
+ 		"No such attribute: local=" + localName
+ 		+ ", namespace=" + uri);
+ 	return declared [index];
+     }
+ 
+ 
+     /**
+      * Returns the current value of the attribute's "declared" flag.
+      */
+     // javadoc mostly from interface
+     public boolean isDeclared (String qName)
+     {
+ 	int index = getIndex (qName);
+ 
+ 	if (index < 0)
+ 	    throw new IllegalArgumentException (
+ 		"No such attribute: " + qName);
+ 	return declared [index];
+     }
+ 
+ 
+     /**
+      * Returns the current value of an attribute's "specified" flag.
+      *
+      * @param index The attribute index (zero-based).
+      * @return current flag value
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not identify an attribute.
+      */
+     public boolean isSpecified (int index)
+     {
+ 	if (index < 0 || index >= getLength ())
+ 	    throw new ArrayIndexOutOfBoundsException (
+ 		"No attribute at index: " + index);
+ 	return specified [index];
+     }
+ 
+ 
+     /**
+      * Returns the current value of an attribute's "specified" flag.
+      *
+      * @param uri The Namespace URI, or the empty string if
+      *        the name has no Namespace URI.
+      * @param localName The attribute's local name.
+      * @return current flag value
+      * @exception java.lang.IllegalArgumentException When the
+      *            supplied names do not identify an attribute.
+      */
+     public boolean isSpecified (String uri, String localName)
+     {
+ 	int index = getIndex (uri, localName);
+ 
+ 	if (index < 0)
+ 	    throw new IllegalArgumentException (
+ 		"No such attribute: local=" + localName
+ 		+ ", namespace=" + uri);
+ 	return specified [index];
+     }
+ 
+ 
+     /**
+      * Returns the current value of an attribute's "specified" flag.
+      *
+      * @param qName The XML qualified (prefixed) name.
+      * @return current flag value
+      * @exception java.lang.IllegalArgumentException When the
+      *            supplied name does not identify an attribute.
+      */
+     public boolean isSpecified (String qName)
+     {
+ 	int index = getIndex (qName);
+ 
+ 	if (index < 0)
+ 	    throw new IllegalArgumentException (
+ 		"No such attribute: " + qName);
+ 	return specified [index];
+     }
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Manipulators
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Copy an entire Attributes object.  The "specified" flags are
+      * assigned as true, and "declared" flags as false (except when
+      * an attribute's type is not CDATA),
+      * unless the object is an Attributes2 object.
+      * In that case those flag values are all copied.
+      *
+      * @see AttributesImpl#setAttributes
+      */
+     public void setAttributes (Attributes atts)
+     {
+ 	int length = atts.getLength ();
+ 
+ 	super.setAttributes (atts);
+ 	declared = new boolean [length];
+ 	specified = new boolean [length];
+ 
+ 	if (atts instanceof Attributes2) {
+ 	    Attributes2	a2 = (Attributes2) atts;
+ 	    for (int i = 0; i < length; i++) {
+ 		declared [i] = a2.isDeclared (i);
+ 		specified [i] = a2.isSpecified (i);
+ 	    }
+ 	} else {
+ 	    for (int i = 0; i < length; i++) {
+ 		declared [i] = !"CDATA".equals (atts.getType (i));
+ 		specified [i] = true;
+ 	    }
+ 	}
+     }
+ 
+ 
+     /**
+      * Add an attribute to the end of the list, setting its
+      * "specified" flag to true.  To set that flag's value
+      * to false, use {@link #setSpecified}.
+      *
+      * <p>Unless the attribute <em>type</em> is CDATA, this attribute
+      * is marked as being declared in the DTD.  To set that flag's value
+      * to true for CDATA attributes, use {@link #setDeclared}.
+      *
+      * @see AttributesImpl#addAttribute
+      */
+     public void addAttribute (String uri, String localName, String qName,
+ 			      String type, String value)
+     {
+ 	super.addAttribute (uri, localName, qName, type, value);
+ 
+ 	int length = getLength ();
+ 
+ 	if (length < specified.length) {
+ 	    boolean	newFlags [];
+ 
+ 	    newFlags = new boolean [length];
+ 	    System.arraycopy (declared, 0, newFlags, 0, declared.length);
+ 	    declared = newFlags;
+ 
+ 	    newFlags = new boolean [length];
+ 	    System.arraycopy (specified, 0, newFlags, 0, specified.length);
+ 	    specified = newFlags;
+ 	}
+ 
+ 	specified [length - 1] = true;
+ 	declared [length - 1] = !"CDATA".equals (type);
+     }
+ 
+ 
+     // javadoc entirely from superclass
+     public void removeAttribute (int index)
+     {
+ 	int origMax = getLength () - 1;
+ 
+ 	super.removeAttribute (index);
+ 	if (index != origMax) {
+ 	    System.arraycopy (declared, index + 1, declared, index,
+ 		    origMax - index);
+ 	    System.arraycopy (specified, index + 1, specified, index,
+ 		    origMax - index);
+ 	}
+     }
+ 
+ 
+     /**
+      * Assign a value to the "declared" flag of a specific attribute.
+      * This is normally needed only for attributes of type CDATA,
+      * including attributes whose type is changed to or from CDATA.
+      *
+      * @param index The index of the attribute (zero-based).
+      * @param value The desired flag value.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not identify an attribute.
+      * @see #setType
+      */
+     public void setDeclared (int index, boolean value)
+     {
+ 	if (index < 0 || index >= getLength ())
+ 	    throw new ArrayIndexOutOfBoundsException (
+ 		"No attribute at index: " + index);
+ 	declared [index] = value;
+     }
+ 
+ 
+     /**
+      * Assign a value to the "specified" flag of a specific attribute.
+      * This is the only way this flag can be cleared, except clearing
+      * by initialization with the copy constructor.
+      *
+      * @param index The index of the attribute (zero-based).
+      * @param value The desired flag value.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not identify an attribute.
+      */
+     public void setSpecified (int index, boolean value)
+     {
+ 	if (index < 0 || index >= getLength ())
+ 	    throw new ArrayIndexOutOfBoundsException (
+ 		"No attribute at index: " + index);
+ 	specified [index] = value;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/DeclHandler.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/DeclHandler.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/DeclHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/DeclHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,146 ----
+ // DeclHandler.java - Optional handler for DTD declaration events.
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: DeclHandler.java,v 1.10 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.ext;
+ 
+ import org.xml.sax.SAXException;
+ 
+ 
+ /**
+  * SAX2 extension handler for DTD declaration events.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This is an optional extension handler for SAX2 to provide more
+  * complete information about DTD declarations in an XML document.
+  * XML readers are not required to recognize this handler, and it
+  * is not part of core-only SAX2 distributions.</p>
+  *
+  * <p>Note that data-related DTD declarations (unparsed entities and
+  * notations) are already reported through the {@link
+  * org.xml.sax.DTDHandler DTDHandler} interface.</p>
+  *
+  * <p>If you are using the declaration handler together with a lexical
+  * handler, all of the events will occur between the
+  * {@link org.xml.sax.ext.LexicalHandler#startDTD startDTD} and the
+  * {@link org.xml.sax.ext.LexicalHandler#endDTD endDTD} events.</p>
+  *
+  * <p>To set the DeclHandler for an XML reader, use the
+  * {@link org.xml.sax.XMLReader#setProperty setProperty} method
+  * with the property name
+  * <code>http://xml.org/sax/properties/declaration-handler</code>
+  * and an object implementing this interface (or null) as the value.
+  * If the reader does not report declaration events, it will throw a
+  * {@link org.xml.sax.SAXNotRecognizedException SAXNotRecognizedException}
+  * when you attempt to register the handler.</p>
+  *
+  * @since SAX 2.0 (extensions 1.0)
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  */
+ public interface DeclHandler
+ {
+ 
+     /**
+      * Report an element type declaration.
+      *
+      * <p>The content model will consist of the string "EMPTY", the
+      * string "ANY", or a parenthesised group, optionally followed
+      * by an occurrence indicator.  The model will be normalized so
+      * that all parameter entities are fully resolved and all whitespace 
+      * is removed,and will include the enclosing parentheses.  Other
+      * normalization (such as removing redundant parentheses or 
+      * simplifying occurrence indicators) is at the discretion of the
+      * parser.</p>
+      *
+      * @param name The element type name.
+      * @param model The content model as a normalized string.
+      * @exception SAXException The application may raise an exception.
+      */
+     public abstract void elementDecl (String name, String model)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Report an attribute type declaration.
+      *
+      * <p>Only the effective (first) declaration for an attribute will
+      * be reported.  The type will be one of the strings "CDATA",
+      * "ID", "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY",
+      * "ENTITIES", a parenthesized token group with 
+      * the separator "|" and all whitespace removed, or the word
+      * "NOTATION" followed by a space followed by a parenthesized
+      * token group with all whitespace removed.</p>
+      *
+      * <p>The value will be the value as reported to applications,
+      * appropriately normalized and with entity and character
+      * references expanded.  </p>
+      *
+      * @param eName The name of the associated element.
+      * @param aName The name of the attribute.
+      * @param type A string representing the attribute type.
+      * @param mode A string representing the attribute defaulting mode
+      *        ("#IMPLIED", "#REQUIRED", or "#FIXED") or null if
+      *        none of these applies.
+      * @param value A string representing the attribute's default value,
+      *        or null if there is none.
+      * @exception SAXException The application may raise an exception.
+      */
+     public abstract void attributeDecl (String eName,
+ 					String aName,
+ 					String type,
+ 					String mode,
+ 					String value)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Report an internal entity declaration.
+      *
+      * <p>Only the effective (first) declaration for each entity
+      * will be reported.  All parameter entities in the value
+      * will be expanded, but general entities will not.</p>
+      *
+      * @param name The name of the entity.  If it is a parameter
+      *        entity, the name will begin with '%'.
+      * @param value The replacement text of the entity.
+      * @exception SAXException The application may raise an exception.
+      * @see #externalEntityDecl
+      * @see org.xml.sax.DTDHandler#unparsedEntityDecl
+      */
+     public abstract void internalEntityDecl (String name, String value)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Report a parsed external entity declaration.
+      *
+      * <p>Only the effective (first) declaration for each entity
+      * will be reported.</p>
+      *
+      * <p>If the system identifier is a URL, the parser must resolve it
+      * fully before passing it to the application.</p>
+      *
+      * @param name The name of the entity.  If it is a parameter
+      *        entity, the name will begin with '%'.
+      * @param publicId The entity's public identifier, or null if none
+      *        was given.
+      * @param systemId The entity's system identifier.
+      * @exception SAXException The application may raise an exception.
+      * @see #internalEntityDecl
+      * @see org.xml.sax.DTDHandler#unparsedEntityDecl
+      */
+     public abstract void externalEntityDecl (String name, String publicId,
+ 					     String systemId)
+ 	throws SAXException;
+ 
+ }
+ 
+ // end of DeclHandler.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/DefaultHandler2.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/DefaultHandler2.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/DefaultHandler2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/DefaultHandler2.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,130 ----
+ // DefaultHandler2.java - extended DefaultHandler
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: DefaultHandler2.java,v 1.8 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.ext;
+ 
+ import java.io.IOException;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.helpers.DefaultHandler;
+ 
+ 
+ /**
+  * This class extends the SAX2 base handler class to support the
+  * SAX2 {@link LexicalHandler}, {@link DeclHandler}, and
+  * {@link EntityResolver2} extensions.  Except for overriding the
+  * original SAX1 {@link DefaultHandler#resolveEntity resolveEntity()}
+  * method the added handler methods just return.  Subclassers may
+  * override everything on a method-by-method basis.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * </blockquote>
+  *
+  * <p> <em>Note:</em> this class might yet learn that the
+  * <em>ContentHandler.setDocumentLocator()</em> call might be passed a
+  * {@link Locator2} object, and that the
+  * <em>ContentHandler.startElement()</em> call might be passed a
+  * {@link Attributes2} object.
+  *
+  * @since SAX 2.0 (extensions 1.1 alpha)
+  * @author David Brownell
+  * @version TBS
+  */
+ public class DefaultHandler2 extends DefaultHandler
+     implements LexicalHandler, DeclHandler, EntityResolver2
+ {
+     /** Constructs a handler which ignores all parsing events. */
+     public DefaultHandler2 () { }
+ 
+ 
+     // SAX2 ext-1.0 LexicalHandler
+ 
+     public void startCDATA ()
+     throws SAXException
+ 	{}
+ 
+     public void endCDATA ()
+     throws SAXException
+ 	{}
+ 
+     public void startDTD (String name, String publicId, String systemId)
+     throws SAXException
+ 	{}
+ 
+     public void endDTD ()
+     throws SAXException
+ 	{}
+ 
+     public void startEntity (String name)
+     throws SAXException
+ 	{}
+ 
+     public void endEntity (String name)
+     throws SAXException
+ 	{}
+ 
+     public void comment (char ch [], int start, int length)
+     throws SAXException
+ 	{ }
+ 
+ 
+     // SAX2 ext-1.0 DeclHandler
+ 
+     public void attributeDecl (String eName, String aName,
+ 	    String type, String mode, String value)
+     throws SAXException
+ 	{}
+ 
+     public void elementDecl (String name, String model)
+     throws SAXException
+ 	{}
+ 
+     public void externalEntityDecl (String name,
+     	String publicId, String systemId)
+     throws SAXException
+ 	{}
+ 
+     public void internalEntityDecl (String name, String value)
+     throws SAXException
+ 	{}
+ 
+     // SAX2 ext-1.1 EntityResolver2
+ 
+     /**
+      * Tells the parser that if no external subset has been declared
+      * in the document text, none should be used.
+      */
+     public InputSource getExternalSubset (String name, String baseURI)
+     throws SAXException, IOException
+ 	{ return null; }
+ 
+     /**
+      * Tells the parser to resolve the systemId against the baseURI
+      * and read the entity text from that resulting absolute URI.
+      * Note that because the older
+      * {@link DefaultHandler#resolveEntity DefaultHandler.resolveEntity()},
+      * method is overridden to call this one, this method may sometimes 
+      * be invoked with null <em>name</em> and <em>baseURI</em>, and
+      * with the <em>systemId</em> already absolutized.
+      */
+     public InputSource resolveEntity (String name, String publicId,
+ 	    String baseURI, String systemId)
+     throws SAXException, IOException
+ 	{ return null; }
+     
+     // SAX1 EntityResolver
+ 
+     /**
+      * Invokes
+      * {@link EntityResolver2#resolveEntity EntityResolver2.resolveEntity()}
+      * with null entity name and base URI.
+      * You only need to override that method to use this class.
+      */
+     public InputSource resolveEntity (String publicId, String systemId)
+     throws SAXException, IOException
+ 	{ return resolveEntity (null, publicId, null, systemId); }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/EntityResolver2.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/EntityResolver2.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/EntityResolver2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/EntityResolver2.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,197 ----
+ // EntityResolver2.java - Extended SAX entity resolver.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: EntityResolver2.java,v 1.1 2004/12/23 22:38:42 mark Exp $
+ 
+ package org.xml.sax.ext;
+ 
+ import java.io.IOException;
+ 
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.SAXException;
+ 
+ 
+ /**
+  * Extended interface for mapping external entity references to input
+  * sources, or providing a missing external subset.  The
+  * {@link XMLReader#setEntityResolver XMLReader.setEntityResolver()} method
+  * is used to provide implementations of this interface to parsers.
+  * When a parser uses the methods in this interface, the
+  * {@link EntityResolver2#resolveEntity EntityResolver2.resolveEntity()}
+  * method (in this interface) is used <em>instead of</em> the older (SAX 1.0)
+  * {@link EntityResolver#resolveEntity EntityResolver.resolveEntity()} method.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * </blockquote>
+  *
+  * <p>If a SAX application requires the customized handling which this
+  * interface defines for external entities, it must ensure that it uses
+  * an XMLReader with the
+  * <em>http://xml.org/sax/features/use-entity-resolver2</em> feature flag
+  * set to <em>true</em> (which is its default value when the feature is
+  * recognized).  If that flag is unrecognized, or its value is false,
+  * or the resolver does not implement this interface, then only the
+  * {@link EntityResolver} method will be used.
+  * </p>
+  *
+  * <p>That supports three categories of application that modify entity
+  * resolution.  <em>Old Style</em> applications won't know about this interface;
+  * they will provide an EntityResolver.
+  * <em>Transitional Mode</em> provide an EntityResolver2 and automatically
+  * get the benefit of its methods in any systems (parsers or other tools)
+  * supporting it, due to polymorphism.
+  * Both <em>Old Style</em> and <em>Transitional Mode</em> applications will
+  * work with any SAX2 parser.
+  * <em>New style</em> applications will fail to run except on SAX2 parsers
+  * that support this particular feature.
+  * They will insist that feature flag have a value of "true", and the
+  * EntityResolver2 implementation they provide  might throw an exception
+  * if the original SAX 1.0 style entity resolution method is invoked.
+  * </p>
+  *
+  * @see org.xml.sax.XMLReader#setEntityResolver
+  *
+  * @since SAX 2.0 (extensions 1.1 alpha)
+  * @author David Brownell
+  * @version TBD
+  */
+ public interface EntityResolver2 extends EntityResolver
+ {
+     /**
+      * Allows applications to provide an external subset for documents
+      * that don't explicitly define one.  Documents with DOCTYPE declarations
+      * that omit an external subset can thus augment the declarations
+      * available for validation, entity processing, and attribute processing
+      * (normalization, defaulting, and reporting types including ID).
+      * This augmentation is reported
+      * through the {@link LexicalHandler#startDTD startDTD()} method as if
+      * the document text had originally included the external subset;
+      * this callback is made before any internal subset data or errors
+      * are reported.</p>
+      *
+      * <p>This method can also be used with documents that have no DOCTYPE
+      * declaration.  When the root element is encountered,
+      * but no DOCTYPE declaration has been seen, this method is
+      * invoked.  If it returns a value for the external subset, that root
+      * element is declared to be the root element, giving the effect of
+      * splicing a DOCTYPE declaration at the end the prolog of a document
+      * that could not otherwise be valid.  The sequence of parser callbacks
+      * in that case logically resembles this:</p>
+      *
+      * <pre>
+      * ... comments and PIs from the prolog (as usual)
+      * startDTD ("rootName", source.getPublicId (), source.getSystemId ());
+      * startEntity ("[dtd]");
+      * ... declarations, comments, and PIs from the external subset
+      * endEntity ("[dtd]");
+      * endDTD ();
+      * ... then the rest of the document (as usual)
+      * startElement (..., "rootName", ...);
+      * </pre>
+      *
+      * <p>Note that the InputSource gets no further resolution.
+      * Implementations of this method may wish to invoke
+      * {@link #resolveEntity resolveEntity()} to gain benefits such as use
+      * of local caches of DTD entities.  Also, this method will never be
+      * used by a (non-validating) processor that is not including external
+      * parameter entities. </p>
+      *
+      * <p>Uses for this method include facilitating data validation when
+      * interoperating with XML processors that would always require
+      * undesirable network accesses for external entities, or which for
+      * other reasons adopt a "no DTDs" policy.
+      * Non-validation motives include forcing documents to include DTDs so
+      * that attributes are handled consistently.
+      * For example, an XPath processor needs to know which attibutes have
+      * type "ID" before it can process a widely used type of reference.</p>
+      * 
+      * <p><strong>Warning:</strong> Returning an external subset modifies
+      * the input document.  By providing definitions for general entities,
+      * it can make a malformed document appear to be well formed.
+      * </p>
+      *
+      * @param name Identifies the document root element.  This name comes
+      *	from a DOCTYPE declaration (where available) or from the actual
+      *	root element. 
+      * @param baseURI The document's base URI, serving as an additional
+      *	hint for selecting the external subset.  This is always an absolute
+      *	URI, unless it is null because the XMLReader was given an InputSource
+      *	without one.
+      *
+      * @return An InputSource object describing the new external subset
+      *	to be used by the parser, or null to indicate that no external
+      *	subset is provided.
+      *
+      * @exception SAXException Any SAX exception, possibly wrapping
+      *	another exception.
+      * @exception IOException Probably indicating a failure to create
+      *	a new InputStream or Reader, or an illegal URL.
+      */
+     public InputSource getExternalSubset (String name, String baseURI)
+     throws SAXException, IOException;
+ 
+     /**
+      * Allows applications to map references to external entities into input
+      * sources, or tell the parser it should use conventional URI resolution.
+      * This method is only called for external entities which have been
+      * properly declared.
+      * This method provides more flexibility than the {@link EntityResolver}
+      * interface, supporting implementations of more complex catalogue
+      * schemes such as the one defined by the <a href=
+ 	"http://www.oasis-open.org/committees/entity/spec-2001-08-06.html"
+ 	>OASIS XML Catalogs</a> specification.</p>
+      *
+      * <p>Parsers configured to use this resolver method will call it
+      * to determine the input source to use for any external entity
+      * being included because of a reference in the XML text.
+      * That excludes the document entity, and any external entity returned
+      * by {@link #getExternalSubset getExternalSubset()}.
+      * When a (non-validating) processor is configured not to include
+      * a class of entities (parameter or general) through use of feature
+      * flags, this method is not invoked for such entities.  </p>
+      *
+      * <p>Note that the entity naming scheme used here is the same one
+      * used in the {@link LexicalHandler}, or in the {@link
+ 	org.xml.sax.ContentHandler#skippedEntity
+ 	ContentHandler.skippedEntity()}
+      * method. </p>
+      *
+      * @param name Identifies the external entity being resolved.
+      *	Either "[dtd]" for the external subset, or a name starting
+      *	with "%" to indicate a parameter entity, or else the name of
+      *	a general entity.  This is never null when invoked by a SAX2
+      *	parser.
+      * @param publicId The public identifier of the external entity being
+      *	referenced (normalized as required by the XML specification), or
+      *	null if none was supplied.
+      * @param baseURI The URI with respect to which relative systemIDs
+      *	are interpreted.  This is always an absolute URI, unless it is
+      *	null (likely because the XMLReader was given an InputSource without
+      *  one).  This URI is defined by the XML specification to be the one
+      *	associated with the "&lt;" starting the relevant declaration.
+      * @param systemId The system identifier of the external entity
+      *	being referenced; either a relative or absolute URI.
+      *  This is never null when invoked by a SAX2 parser; only declared
+      *	entities, and any external subset, are resolved by such parsers.
+      *
+      * @return An InputSource object describing the new input source to
+      *	be used by the parser.  Returning null directs the parser to
+      *	resolve the system ID against the base URI and open a connection
+      *	to resulting URI.
+      *
+      * @exception SAXException Any SAX exception, possibly wrapping
+      *	another exception.
+      * @exception IOException Probably indicating a failure to create
+      *	a new InputStream or Reader, or an illegal URL.
+      */
+     public InputSource resolveEntity (
+ 	    String name,
+ 	    String publicId,
+ 	    String baseURI,
+ 	    String systemId
+     ) throws SAXException, IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/LexicalHandler.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/LexicalHandler.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/LexicalHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/LexicalHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,212 ----
+ // LexicalHandler.java - optional handler for lexical parse events.
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: LexicalHandler.java,v 1.10 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.ext;
+ 
+ import org.xml.sax.SAXException;
+ 
+ /**
+  * SAX2 extension handler for lexical events.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This is an optional extension handler for SAX2 to provide
+  * lexical information about an XML document, such as comments
+  * and CDATA section boundaries.
+  * XML readers are not required to recognize this handler, and it
+  * is not part of core-only SAX2 distributions.</p>
+  *
+  * <p>The events in the lexical handler apply to the entire document,
+  * not just to the document element, and all lexical handler events
+  * must appear between the content handler's startDocument and
+  * endDocument events.</p>
+  *
+  * <p>To set the LexicalHandler for an XML reader, use the
+  * {@link org.xml.sax.XMLReader#setProperty setProperty} method
+  * with the property name
+  * <code>http://xml.org/sax/properties/lexical-handler</code>
+  * and an object implementing this interface (or null) as the value.
+  * If the reader does not report lexical events, it will throw a
+  * {@link org.xml.sax.SAXNotRecognizedException SAXNotRecognizedException}
+  * when you attempt to register the handler.</p>
+  *
+  * @since SAX 2.0 (extensions 1.0)
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  */
+ public interface LexicalHandler
+ {
+ 
+     /**
+      * Report the start of DTD declarations, if any.
+      *
+      * <p>This method is intended to report the beginning of the
+      * DOCTYPE declaration; if the document has no DOCTYPE declaration,
+      * this method will not be invoked.</p>
+      *
+      * <p>All declarations reported through 
+      * {@link org.xml.sax.DTDHandler DTDHandler} or
+      * {@link org.xml.sax.ext.DeclHandler DeclHandler} events must appear
+      * between the startDTD and {@link #endDTD endDTD} events.
+      * Declarations are assumed to belong to the internal DTD subset
+      * unless they appear between {@link #startEntity startEntity}
+      * and {@link #endEntity endEntity} events.  Comments and
+      * processing instructions from the DTD should also be reported
+      * between the startDTD and endDTD events, in their original 
+      * order of (logical) occurrence; they are not required to
+      * appear in their correct locations relative to DTDHandler
+      * or DeclHandler events, however.</p>
+      *
+      * <p>Note that the start/endDTD events will appear within
+      * the start/endDocument events from ContentHandler and
+      * before the first 
+      * {@link org.xml.sax.ContentHandler#startElement startElement}
+      * event.</p>
+      *
+      * @param name The document type name.
+      * @param publicId The declared public identifier for the
+      *        external DTD subset, or null if none was declared.
+      * @param systemId The declared system identifier for the
+      *        external DTD subset, or null if none was declared.
+      *        (Note that this is not resolved against the document
+      *        base URI.)
+      * @exception SAXException The application may raise an
+      *            exception.
+      * @see #endDTD
+      * @see #startEntity
+      */
+     public abstract void startDTD (String name, String publicId,
+ 				   String systemId)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Report the end of DTD declarations.
+      *
+      * <p>This method is intended to report the end of the
+      * DOCTYPE declaration; if the document has no DOCTYPE declaration,
+      * this method will not be invoked.</p>
+      *
+      * @exception SAXException The application may raise an exception.
+      * @see #startDTD
+      */
+     public abstract void endDTD ()
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Report the beginning of some internal and external XML entities.
+      *
+      * <p>The reporting of parameter entities (including
+      * the external DTD subset) is optional, and SAX2 drivers that
+      * report LexicalHandler events may not implement it; you can use the
+      * <code
+      * >http://xml.org/sax/features/lexical-handler/parameter-entities</code>
+      * feature to query or control the reporting of parameter entities.</p>
+      *
+      * <p>General entities are reported with their regular names,
+      * parameter entities have '%' prepended to their names, and 
+      * the external DTD subset has the pseudo-entity name "[dtd]".</p>
+      *
+      * <p>When a SAX2 driver is providing these events, all other 
+      * events must be properly nested within start/end entity 
+      * events.  There is no additional requirement that events from 
+      * {@link org.xml.sax.ext.DeclHandler DeclHandler} or
+      * {@link org.xml.sax.DTDHandler DTDHandler} be properly ordered.</p>
+      *
+      * <p>Note that skipped entities will be reported through the
+      * {@link org.xml.sax.ContentHandler#skippedEntity skippedEntity}
+      * event, which is part of the ContentHandler interface.</p>
+      *
+      * <p>Because of the streaming event model that SAX uses, some
+      * entity boundaries cannot be reported under any 
+      * circumstances:</p>
+      *
+      * <ul>
+      * <li>general entities within attribute values</li>
+      * <li>parameter entities within declarations</li>
+      * </ul>
+      *
+      * <p>These will be silently expanded, with no indication of where
+      * the original entity boundaries were.</p>
+      *
+      * <p>Note also that the boundaries of character references (which
+      * are not really entities anyway) are not reported.</p>
+      *
+      * <p>All start/endEntity events must be properly nested.
+      *
+      * @param name The name of the entity.  If it is a parameter
+      *        entity, the name will begin with '%', and if it is the
+      *        external DTD subset, it will be "[dtd]".
+      * @exception SAXException The application may raise an exception.
+      * @see #endEntity
+      * @see org.xml.sax.ext.DeclHandler#internalEntityDecl
+      * @see org.xml.sax.ext.DeclHandler#externalEntityDecl 
+      */
+     public abstract void startEntity (String name)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Report the end of an entity.
+      *
+      * @param name The name of the entity that is ending.
+      * @exception SAXException The application may raise an exception.
+      * @see #startEntity
+      */
+     public abstract void endEntity (String name)
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Report the start of a CDATA section.
+      *
+      * <p>The contents of the CDATA section will be reported through
+      * the regular {@link org.xml.sax.ContentHandler#characters
+      * characters} event; this event is intended only to report
+      * the boundary.</p>
+      *
+      * @exception SAXException The application may raise an exception.
+      * @see #endCDATA
+      */
+     public abstract void startCDATA ()
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Report the end of a CDATA section.
+      *
+      * @exception SAXException The application may raise an exception.
+      * @see #startCDATA
+      */
+     public abstract void endCDATA ()
+ 	throws SAXException;
+ 
+ 
+     /**
+      * Report an XML comment anywhere in the document.
+      *
+      * <p>This callback will be used for comments inside or outside the
+      * document element, including comments in the external DTD
+      * subset (if read).  Comments in the DTD must be properly
+      * nested inside start/endDTD and start/endEntity events (if
+      * used).</p>
+      *
+      * @param ch An array holding the characters in the comment.
+      * @param start The starting position in the array.
+      * @param length The number of characters to use from the array.
+      * @exception SAXException The application may raise an exception.
+      */
+     public abstract void comment (char ch[], int start, int length)
+ 	throws SAXException;
+ 
+ }
+ 
+ // end of LexicalHandler.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/Locator2.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/Locator2.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/Locator2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/Locator2.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ // Locator2.java - extended Locator
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: Locator2.java,v 1.8 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.ext;
+ 
+ import org.xml.sax.Locator;
+ 
+ 
+ /**
+  * SAX2 extension to augment the entity information provided 
+  * though a {@link Locator}.
+  * If an implementation supports this extension, the Locator
+  * provided in {@link org.xml.sax.ContentHandler#setDocumentLocator
+  * ContentHandler.setDocumentLocator() } will implement this
+  * interface, and the
+  * <em>http://xml.org/sax/features/use-locator2</em> feature
+  * flag will have the value <em>true</em>.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * </blockquote>
+  *
+  * <p> XMLReader implementations are not required to support this
+  * information, and it is not part of core-only SAX2 distributions.</p>
+  *
+  * @since SAX 2.0 (extensions 1.1 alpha)
+  * @author David Brownell
+  * @version TBS
+  */
+ public interface Locator2 extends Locator
+ {
+     /**
+      * Returns the version of XML used for the entity.  This will
+      * normally be the identifier from the current entity's
+      * <em>&lt;?xml&nbsp;version='...'&nbsp;...?&gt;</em> declaration,
+      * or be defaulted by the parser.
+      *
+      * @return Identifier for the XML version being used to interpret
+      * the entity's text, or null if that information is not yet
+      * available in the current parsing state.
+      */
+     public String getXMLVersion ();
+ 
+     /**
+      * Returns the name of the character encoding for the entity.
+      * If the encoding was declared externally (for example, in a MIME
+      * Content-Type header), that will be the name returned.  Else if there
+      * was an <em>&lt;?xml&nbsp;...encoding='...'?&gt;</em> declaration at
+      * the start of the document, that encoding name will be returned.
+      * Otherwise the encoding will been inferred (normally to be UTF-8, or
+      * some UTF-16 variant), and that inferred name will be returned.
+      *
+      * <p>When an {@link org.xml.sax.InputSource InputSource} is used
+      * to provide an entity's character stream, this method returns the
+      * encoding provided in that input stream.
+      *
+      * <p> Note that some recent W3C specifications require that text
+      * in some encodings be normalized, using Unicode Normalization
+      * Form C, before processing.  Such normalization must be performed
+      * by applications, and would normally be triggered based on the
+      * value returned by this method.
+      *
+      * <p> Encoding names may be those used by the underlying JVM,
+      * and comparisons should be case-insensitive.
+      *
+      * @return Name of the character encoding being used to interpret
+      * * the entity's text, or null if this was not provided for a *
+      * character stream passed through an InputSource or is otherwise
+      * not yet available in the current parsing state.
+      */
+     public String getEncoding ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/Locator2Impl.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/Locator2Impl.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/Locator2Impl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/Locator2Impl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ // Locator2Impl.java - extended LocatorImpl
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: Locator2Impl.java,v 1.1 2004/12/23 22:38:42 mark Exp $
+ 
+ package org.xml.sax.ext;
+ 
+ import org.xml.sax.Locator;
+ import org.xml.sax.helpers.LocatorImpl;
+ 
+ 
+ /**
+  * SAX2 extension helper for holding additional Entity information,
+  * implementing the {@link Locator2} interface.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * </blockquote>
+  *
+  * <p> This is not part of core-only SAX2 distributions.</p>
+  *
+  * @since SAX 2.0.2
+  * @author David Brownell
+  * @version TBS
+  */
+ public class Locator2Impl extends LocatorImpl implements Locator2
+ {
+     private String	encoding;
+     private String	version;
+ 
+ 
+     /**
+      * Construct a new, empty Locator2Impl object.
+      * This will not normally be useful, since the main purpose
+      * of this class is to make a snapshot of an existing Locator.
+      */
+     public Locator2Impl () { }
+ 
+     /**
+      * Copy an existing Locator or Locator2 object.
+      * If the object implements Locator2, values of the
+      * <em>encoding</em> and <em>version</em>strings are copied,
+      * otherwise they set to <em>null</em>. 
+      *
+      * @param locator The existing Locator object.
+      */
+     public Locator2Impl (Locator locator)
+     {
+ 	super (locator);
+ 	if (locator instanceof Locator2) {
+ 	    Locator2	l2 = (Locator2) locator;
+ 
+ 	    version = l2.getXMLVersion ();
+ 	    encoding = l2.getEncoding ();
+ 	}
+     }
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Locator2 method implementations
+     ////////////////////////////////////////////////////////////////////
+     
+     /**
+      * Returns the current value of the version property.
+      *
+      * @see #setXMLVersion
+      */
+     public String getXMLVersion ()
+ 	{ return version; }
+ 
+     /**
+      * Returns the current value of the encoding property.
+      *
+      * @see #setEncoding
+      */
+     public String getEncoding ()
+ 	{ return encoding; }
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Setters 
+     ////////////////////////////////////////////////////////////////////
+     
+     /**
+      * Assigns the current value of the version property.
+      *
+      * @param version the new "version" value
+      * @see #getXMLVersion
+      */
+     public void setXMLVersion (String version)
+ 	{ this.version = version; }
+ 
+     /**
+      * Assigns the current value of the encoding property.
+      *
+      * @param encoding the new "encoding" value
+      * @see #getEncoding
+      */
+     public void setEncoding (String encoding)
+ 	{ this.encoding = encoding; }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/package.html gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/package.html
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/ext/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/ext/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <HTML><HEAD>
+ <!-- $Id: package.html,v 1.11 2004/12/11 15:41:10 dog Exp $ -->
+ </HEAD><BODY>
+ 
+ <p>
+ This package contains interfaces to SAX2 facilities that
+ conformant SAX drivers won't necessarily support.
+ 
+ <p>See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+ for more information about SAX.</p>
+ 
+ <p> This package is independent of the SAX2 core, though the functionality
+ exposed generally needs to be implemented within a parser core.
+ That independence has several consequences:</p>
+ 
+ <ul>
+ 
+ <li>SAX2 drivers are <em>not</em> required to recognize these handlers.
+ </li>
+ 
+ <li>You cannot assume that the class files will be present in every SAX2
+ installation.</li>
+ 
+ <li>This package may be updated independently of SAX2 (i.e. new
+ handlers and classes may be added without updating SAX2 itself).</li>
+ 
+ <li>The new handlers are not implemented by the SAX2
+ <code>org.xml.sax.helpers.DefaultHandler</code> or
+ <code>org.xml.sax.helpers.XMLFilterImpl</code> classes.
+ You can subclass these if you need such behavior, or
+ use the helper classes found here.</li>
+ 
+ <li>The handlers need to be registered differently than core SAX2
+ handlers.</li>
+ 
+ </ul>
+ 
+ <p>This package, SAX2-ext, is a standardized extension to SAX2.  It is
+ designed both to allow SAX parsers to pass certain types of information
+ to applications, and to serve as a simple model for other SAX2 parser
+ extension packages.  Not all such extension packages should need to
+ be recognized directly by parsers, however.
+ As an example, most validation systems can be cleanly layered on top
+ of parsers supporting the standardized SAX2 interfaces.  </p>
+ 
+ </BODY></HTML>
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/AttributeListImpl.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/AttributeListImpl.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/AttributeListImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/AttributeListImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,312 ----
+ // SAX default implementation for AttributeList.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: AttributeListImpl.java,v 1.11 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import org.xml.sax.AttributeList;
+ 
+ import java.util.Vector;
+ 
+ 
+ /**
+  * Default implementation for AttributeList.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>AttributeList implements the deprecated SAX1 {@link
+  * org.xml.sax.AttributeList AttributeList} interface, and has been
+  * replaced by the new SAX2 {@link org.xml.sax.helpers.AttributesImpl
+  * AttributesImpl} interface.</p>
+  *
+  * <p>This class provides a convenience implementation of the SAX
+  * {@link org.xml.sax.AttributeList AttributeList} interface.  This 
+  * implementation is useful both for SAX parser writers, who can use 
+  * it to provide attributes to the application, and for SAX application 
+  * writers, who can use it to create a persistent copy of an element's 
+  * attribute specifications:</p>
+  *
+  * <pre>
+  * private AttributeList myatts;
+  *
+  * public void startElement (String name, AttributeList atts)
+  * {
+  *              // create a persistent copy of the attribute list
+  *              // for use outside this method
+  *   myatts = new AttributeListImpl(atts);
+  *   [...]
+  * }
+  * </pre>
+  *
+  * <p>Please note that SAX parsers are not required to use this
+  * class to provide an implementation of AttributeList; it is
+  * supplied only as an optional convenience.  In particular, 
+  * parser writers are encouraged to invent more efficient
+  * implementations.</p>
+  *
+  * @deprecated This class implements a deprecated interface,
+  *             {@link org.xml.sax.AttributeList AttributeList};
+  *             that interface has been replaced by
+  *             {@link org.xml.sax.Attributes Attributes},
+  *             which is implemented in the
+  *             {@link org.xml.sax.helpers.AttributesImpl 
+  *            AttributesImpl} helper class.
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.AttributeList
+  * @see org.xml.sax.DocumentHandler#startElement 
+  */
+ public class AttributeListImpl implements AttributeList
+ {
+     
+     /**
+      * Create an empty attribute list.
+      *
+      * <p>This constructor is most useful for parser writers, who
+      * will use it to create a single, reusable attribute list that
+      * can be reset with the clear method between elements.</p>
+      *
+      * @see #addAttribute
+      * @see #clear
+      */
+     public AttributeListImpl ()
+     {
+     }
+     
+     
+     /**
+      * Construct a persistent copy of an existing attribute list.
+      *
+      * <p>This constructor is most useful for application writers,
+      * who will use it to create a persistent copy of an existing
+      * attribute list.</p>
+      *
+      * @param atts The attribute list to copy
+      * @see org.xml.sax.DocumentHandler#startElement
+      */
+     public AttributeListImpl (AttributeList atts)
+     {
+ 	setAttributeList(atts);
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Methods specific to this class.
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Set the attribute list, discarding previous contents.
+      *
+      * <p>This method allows an application writer to reuse an
+      * attribute list easily.</p>
+      *
+      * @param atts The attribute list to copy.
+      */
+     public void setAttributeList (AttributeList atts)
+     {
+ 	int count = atts.getLength();
+ 	
+ 	clear();
+ 	
+ 	for (int i = 0; i < count; i++) {
+ 	    addAttribute(atts.getName(i), atts.getType(i), atts.getValue(i));
+ 	}
+     }
+     
+     
+     /**
+      * Add an attribute to an attribute list.
+      *
+      * <p>This method is provided for SAX parser writers, to allow them
+      * to build up an attribute list incrementally before delivering
+      * it to the application.</p>
+      *
+      * @param name The attribute name.
+      * @param type The attribute type ("NMTOKEN" for an enumeration).
+      * @param value The attribute value (must not be null).
+      * @see #removeAttribute
+      * @see org.xml.sax.DocumentHandler#startElement
+      */
+     public void addAttribute (String name, String type, String value)
+     {
+ 	names.addElement(name);
+ 	types.addElement(type);
+ 	values.addElement(value);
+     }
+     
+     
+     /**
+      * Remove an attribute from the list.
+      *
+      * <p>SAX application writers can use this method to filter an
+      * attribute out of an AttributeList.  Note that invoking this
+      * method will change the length of the attribute list and
+      * some of the attribute's indices.</p>
+      *
+      * <p>If the requested attribute is not in the list, this is
+      * a no-op.</p>
+      *
+      * @param name The attribute name.
+      * @see #addAttribute
+      */
+     public void removeAttribute (String name)
+     {
+ 	int i = names.indexOf(name);
+ 	
+ 	if (i >= 0) {
+ 	    names.removeElementAt(i);
+ 	    types.removeElementAt(i);
+ 	    values.removeElementAt(i);
+ 	}
+     }
+     
+     
+     /**
+      * Clear the attribute list.
+      *
+      * <p>SAX parser writers can use this method to reset the attribute
+      * list between DocumentHandler.startElement events.  Normally,
+      * it will make sense to reuse the same AttributeListImpl object
+      * rather than allocating a new one each time.</p>
+      *
+      * @see org.xml.sax.DocumentHandler#startElement
+      */
+     public void clear ()
+     {
+ 	names.removeAllElements();
+ 	types.removeAllElements();
+ 	values.removeAllElements();
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.AttributeList
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Return the number of attributes in the list.
+      *
+      * @return The number of attributes in the list.
+      * @see org.xml.sax.AttributeList#getLength
+      */
+     public int getLength ()
+     {
+ 	return names.size();
+     }
+     
+     
+     /**
+      * Get the name of an attribute (by position).
+      *
+      * @param i The position of the attribute in the list.
+      * @return The attribute name as a string, or null if there
+      *         is no attribute at that position.
+      * @see org.xml.sax.AttributeList#getName(int)
+      */
+     public String getName (int i)
+     {
+ 	if (i < 0) {
+ 	    return null;
+ 	}
+ 	try {
+ 	    return (String)names.elementAt(i);
+ 	} catch (ArrayIndexOutOfBoundsException e) {
+ 	    return null;
+ 	}
+     }
+     
+     
+     /**
+      * Get the type of an attribute (by position).
+      *
+      * @param i The position of the attribute in the list.
+      * @return The attribute type as a string ("NMTOKEN" for an
+      *         enumeration, and "CDATA" if no declaration was
+      *         read), or null if there is no attribute at
+      *         that position.
+      * @see org.xml.sax.AttributeList#getType(int)
+      */
+     public String getType (int i)
+     {
+ 	if (i < 0) {
+ 	    return null;
+ 	}
+ 	try {
+ 	    return (String)types.elementAt(i);
+ 	} catch (ArrayIndexOutOfBoundsException e) {
+ 	    return null;
+ 	}
+     }
+     
+     
+     /**
+      * Get the value of an attribute (by position).
+      *
+      * @param i The position of the attribute in the list.
+      * @return The attribute value as a string, or null if
+      *         there is no attribute at that position.
+      * @see org.xml.sax.AttributeList#getValue(int)
+      */
+     public String getValue (int i)
+     {
+ 	if (i < 0) {
+ 	    return null;
+ 	}
+ 	try {
+ 	    return (String)values.elementAt(i);
+ 	} catch (ArrayIndexOutOfBoundsException e) {
+ 	    return null;
+ 	}
+     }
+     
+     
+     /**
+      * Get the type of an attribute (by name).
+      *
+      * @param name The attribute name.
+      * @return The attribute type as a string ("NMTOKEN" for an
+      *         enumeration, and "CDATA" if no declaration was
+      *         read).
+      * @see org.xml.sax.AttributeList#getType(java.lang.String)
+      */
+     public String getType (String name)
+     {
+ 	return getType(names.indexOf(name));
+     }
+     
+     
+     /**
+      * Get the value of an attribute (by name).
+      *
+      * @param name The attribute name.
+      * @see org.xml.sax.AttributeList#getValue(java.lang.String)
+      */
+     public String getValue (String name)
+     {
+ 	return getValue(names.indexOf(name));
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal state.
+     ////////////////////////////////////////////////////////////////////
+ 
+     Vector names = new Vector();
+     Vector types = new Vector();
+     Vector values = new Vector();
+ 
+ }
+ 
+ // end of AttributeListImpl.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/AttributesImpl.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/AttributesImpl.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/AttributesImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/AttributesImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,618 ----
+ // AttributesImpl.java - default implementation of Attributes.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the public domain.
+ // $Id: AttributesImpl.java,v 1.11 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import org.xml.sax.Attributes;
+ 
+ 
+ /**
+  * Default implementation of the Attributes interface.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class provides a default implementation of the SAX2
+  * {@link org.xml.sax.Attributes Attributes} interface, with the 
+  * addition of manipulators so that the list can be modified or 
+  * reused.</p>
+  *
+  * <p>There are two typical uses of this class:</p>
+  *
+  * <ol>
+  * <li>to take a persistent snapshot of an Attributes object
+  *  in a {@link org.xml.sax.ContentHandler#startElement startElement} event; or</li>
+  * <li>to construct or modify an Attributes object in a SAX2 driver or filter.</li>
+  * </ol>
+  *
+  * <p>This class replaces the now-deprecated SAX1 {@link 
+  * org.xml.sax.helpers.AttributeListImpl AttributeListImpl}
+  * class; in addition to supporting the updated Attributes
+  * interface rather than the deprecated {@link org.xml.sax.AttributeList
+  * AttributeList} interface, it also includes a much more efficient 
+  * implementation using a single array rather than a set of Vectors.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  */
+ public class AttributesImpl implements Attributes
+ {
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Constructors.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Construct a new, empty AttributesImpl object.
+      */
+     public AttributesImpl ()
+     {
+ 	length = 0;
+ 	data = null;
+     }
+ 
+ 
+     /**
+      * Copy an existing Attributes object.
+      *
+      * <p>This constructor is especially useful inside a
+      * {@link org.xml.sax.ContentHandler#startElement startElement} event.</p>
+      *
+      * @param atts The existing Attributes object.
+      */
+     public AttributesImpl (Attributes atts)
+     {
+ 	setAttributes(atts);
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.Attributes.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Return the number of attributes in the list.
+      *
+      * @return The number of attributes in the list.
+      * @see org.xml.sax.Attributes#getLength
+      */
+     public int getLength ()
+     {
+ 	return length;
+     }
+ 
+ 
+     /**
+      * Return an attribute's Namespace URI.
+      *
+      * @param index The attribute's index (zero-based).
+      * @return The Namespace URI, the empty string if none is
+      *         available, or null if the index is out of range.
+      * @see org.xml.sax.Attributes#getURI
+      */
+     public String getURI (int index)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    return data[index*5];
+ 	} else {
+ 	    return null;
+ 	}
+     }
+ 
+ 
+     /**
+      * Return an attribute's local name.
+      *
+      * @param index The attribute's index (zero-based).
+      * @return The attribute's local name, the empty string if 
+      *         none is available, or null if the index if out of range.
+      * @see org.xml.sax.Attributes#getLocalName
+      */
+     public String getLocalName (int index)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    return data[index*5+1];
+ 	} else {
+ 	    return null;
+ 	}
+     }
+ 
+ 
+     /**
+      * Return an attribute's qualified (prefixed) name.
+      *
+      * @param index The attribute's index (zero-based).
+      * @return The attribute's qualified name, the empty string if 
+      *         none is available, or null if the index is out of bounds.
+      * @see org.xml.sax.Attributes#getQName
+      */
+     public String getQName (int index)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    return data[index*5+2];
+ 	} else {
+ 	    return null;
+ 	}
+     }
+ 
+ 
+     /**
+      * Return an attribute's type by index.
+      *
+      * @param index The attribute's index (zero-based).
+      * @return The attribute's type, "CDATA" if the type is unknown, or null
+      *         if the index is out of bounds.
+      * @see org.xml.sax.Attributes#getType(int)
+      */
+     public String getType (int index)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    return data[index*5+3];
+ 	} else {
+ 	    return null;
+ 	}
+     }
+ 
+ 
+     /**
+      * Return an attribute's value by index.
+      *
+      * @param index The attribute's index (zero-based).
+      * @return The attribute's value or null if the index is out of bounds.
+      * @see org.xml.sax.Attributes#getValue(int)
+      */
+     public String getValue (int index)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    return data[index*5+4];
+ 	} else {
+ 	    return null;
+ 	}
+     }
+ 
+ 
+     /**
+      * Look up an attribute's index by Namespace name.
+      *
+      * <p>In many cases, it will be more efficient to look up the name once and
+      * use the index query methods rather than using the name query methods
+      * repeatedly.</p>
+      *
+      * @param uri The attribute's Namespace URI, or the empty
+      *        string if none is available.
+      * @param localName The attribute's local name.
+      * @return The attribute's index, or -1 if none matches.
+      * @see org.xml.sax.Attributes#getIndex(java.lang.String,java.lang.String)
+      */
+     public int getIndex (String uri, String localName)
+     {
+ 	int max = length * 5;
+ 	for (int i = 0; i < max; i += 5) {
+ 	    if (data[i].equals(uri) && data[i+1].equals(localName)) {
+ 		return i / 5;
+ 	    }
+ 	} 
+ 	return -1;
+     }
+ 
+ 
+     /**
+      * Look up an attribute's index by qualified (prefixed) name.
+      *
+      * @param qName The qualified name.
+      * @return The attribute's index, or -1 if none matches.
+      * @see org.xml.sax.Attributes#getIndex(java.lang.String)
+      */
+     public int getIndex (String qName)
+     {
+ 	int max = length * 5;
+ 	for (int i = 0; i < max; i += 5) {
+ 	    if (data[i+2].equals(qName)) {
+ 		return i / 5;
+ 	    }
+ 	} 
+ 	return -1;
+     }
+ 
+ 
+     /**
+      * Look up an attribute's type by Namespace-qualified name.
+      *
+      * @param uri The Namespace URI, or the empty string for a name
+      *        with no explicit Namespace URI.
+      * @param localName The local name.
+      * @return The attribute's type, or null if there is no
+      *         matching attribute.
+      * @see org.xml.sax.Attributes#getType(java.lang.String,java.lang.String)
+      */
+     public String getType (String uri, String localName)
+     {
+ 	int max = length * 5;
+ 	for (int i = 0; i < max; i += 5) {
+ 	    if (data[i].equals(uri) && data[i+1].equals(localName)) {
+ 		return data[i+3];
+ 	    }
+ 	} 
+ 	return null;
+     }
+ 
+ 
+     /**
+      * Look up an attribute's type by qualified (prefixed) name.
+      *
+      * @param qName The qualified name.
+      * @return The attribute's type, or null if there is no
+      *         matching attribute.
+      * @see org.xml.sax.Attributes#getType(java.lang.String)
+      */
+     public String getType (String qName)
+     {
+ 	int max = length * 5;
+ 	for (int i = 0; i < max; i += 5) {
+ 	    if (data[i+2].equals(qName)) {
+ 		return data[i+3];
+ 	    }
+ 	}
+ 	return null;
+     }
+ 
+ 
+     /**
+      * Look up an attribute's value by Namespace-qualified name.
+      *
+      * @param uri The Namespace URI, or the empty string for a name
+      *        with no explicit Namespace URI.
+      * @param localName The local name.
+      * @return The attribute's value, or null if there is no
+      *         matching attribute.
+      * @see org.xml.sax.Attributes#getValue(java.lang.String,java.lang.String)
+      */
+     public String getValue (String uri, String localName)
+     {
+ 	int max = length * 5;
+ 	for (int i = 0; i < max; i += 5) {
+ 	    if (data[i].equals(uri) && data[i+1].equals(localName)) {
+ 		return data[i+4];
+ 	    }
+ 	}
+ 	return null;
+     }
+ 
+ 
+     /**
+      * Look up an attribute's value by qualified (prefixed) name.
+      *
+      * @param qName The qualified name.
+      * @return The attribute's value, or null if there is no
+      *         matching attribute.
+      * @see org.xml.sax.Attributes#getValue(java.lang.String)
+      */
+     public String getValue (String qName)
+     {
+ 	int max = length * 5;
+ 	for (int i = 0; i < max; i += 5) {
+ 	    if (data[i+2].equals(qName)) {
+ 		return data[i+4];
+ 	    }
+ 	}
+ 	return null;
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Manipulators.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Clear the attribute list for reuse.
+      *
+      * <p>Note that little memory is freed by this call:
+      * the current array is kept so it can be 
+      * reused.</p>
+      */
+     public void clear ()
+     {
+ 	if (data != null) {
+ 	    for (int i = 0; i < (length * 5); i++)
+ 		data [i] = null;
+ 	}
+ 	length = 0;
+     }
+ 
+ 
+     /**
+      * Copy an entire Attributes object.
+      *
+      * <p>It may be more efficient to reuse an existing object
+      * rather than constantly allocating new ones.</p>
+      * 
+      * @param atts The attributes to copy.
+      */
+     public void setAttributes (Attributes atts)
+     {
+         clear();
+         length = atts.getLength();
+         if (length > 0) {
+             data = new String[length*5];
+             for (int i = 0; i < length; i++) {
+                 data[i*5] = atts.getURI(i);
+                 data[i*5+1] = atts.getLocalName(i);
+                 data[i*5+2] = atts.getQName(i);
+                 data[i*5+3] = atts.getType(i);
+                 data[i*5+4] = atts.getValue(i);
+             }
+ 	}
+     }
+ 
+ 
+     /**
+      * Add an attribute to the end of the list.
+      *
+      * <p>For the sake of speed, this method does no checking
+      * to see if the attribute is already in the list: that is
+      * the responsibility of the application.</p>
+      *
+      * @param uri The Namespace URI, or the empty string if
+      *        none is available or Namespace processing is not
+      *        being performed.
+      * @param localName The local name, or the empty string if
+      *        Namespace processing is not being performed.
+      * @param qName The qualified (prefixed) name, or the empty string
+      *        if qualified names are not available.
+      * @param type The attribute type as a string.
+      * @param value The attribute value.
+      */
+     public void addAttribute (String uri, String localName, String qName,
+ 			      String type, String value)
+     {
+ 	ensureCapacity(length+1);
+ 	data[length*5] = uri;
+ 	data[length*5+1] = localName;
+ 	data[length*5+2] = qName;
+ 	data[length*5+3] = type;
+ 	data[length*5+4] = value;
+ 	length++;
+     }
+ 
+ 
+     /**
+      * Set an attribute in the list.
+      *
+      * <p>For the sake of speed, this method does no checking
+      * for name conflicts or well-formedness: such checks are the
+      * responsibility of the application.</p>
+      *
+      * @param index The index of the attribute (zero-based).
+      * @param uri The Namespace URI, or the empty string if
+      *        none is available or Namespace processing is not
+      *        being performed.
+      * @param localName The local name, or the empty string if
+      *        Namespace processing is not being performed.
+      * @param qName The qualified name, or the empty string
+      *        if qualified names are not available.
+      * @param type The attribute type as a string.
+      * @param value The attribute value.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not point to an attribute
+      *            in the list.
+      */
+     public void setAttribute (int index, String uri, String localName,
+ 			      String qName, String type, String value)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    data[index*5] = uri;
+ 	    data[index*5+1] = localName;
+ 	    data[index*5+2] = qName;
+ 	    data[index*5+3] = type;
+ 	    data[index*5+4] = value;
+ 	} else {
+ 	    badIndex(index);
+ 	}
+     }
+ 
+ 
+     /**
+      * Remove an attribute from the list.
+      *
+      * @param index The index of the attribute (zero-based).
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not point to an attribute
+      *            in the list.
+      */
+     public void removeAttribute (int index)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    if (index < length - 1) {
+ 		System.arraycopy(data, (index+1)*5, data, index*5,
+ 				 (length-index-1)*5);
+ 	    }
+ 	    index = (length - 1) * 5;
+ 	    data [index++] = null;
+ 	    data [index++] = null;
+ 	    data [index++] = null;
+ 	    data [index++] = null;
+ 	    data [index] = null;
+ 	    length--;
+ 	} else {
+ 	    badIndex(index);
+ 	}
+     }
+ 
+ 
+     /**
+      * Set the Namespace URI of a specific attribute.
+      *
+      * @param index The index of the attribute (zero-based).
+      * @param uri The attribute's Namespace URI, or the empty
+      *        string for none.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not point to an attribute
+      *            in the list.
+      */
+     public void setURI (int index, String uri)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    data[index*5] = uri;
+ 	} else {
+ 	    badIndex(index);
+ 	}
+     }
+ 
+ 
+     /**
+      * Set the local name of a specific attribute.
+      *
+      * @param index The index of the attribute (zero-based).
+      * @param localName The attribute's local name, or the empty
+      *        string for none.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not point to an attribute
+      *            in the list.
+      */
+     public void setLocalName (int index, String localName)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    data[index*5+1] = localName;
+ 	} else {
+ 	    badIndex(index);
+ 	}
+     }
+ 
+ 
+     /**
+      * Set the qualified name of a specific attribute.
+      *
+      * @param index The index of the attribute (zero-based).
+      * @param qName The attribute's qualified name, or the empty
+      *        string for none.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not point to an attribute
+      *            in the list.
+      */
+     public void setQName (int index, String qName)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    data[index*5+2] = qName;
+ 	} else {
+ 	    badIndex(index);
+ 	}
+     }
+ 
+ 
+     /**
+      * Set the type of a specific attribute.
+      *
+      * @param index The index of the attribute (zero-based).
+      * @param type The attribute's type.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not point to an attribute
+      *            in the list.
+      */
+     public void setType (int index, String type)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    data[index*5+3] = type;
+ 	} else {
+ 	    badIndex(index);
+ 	}
+     }
+ 
+ 
+     /**
+      * Set the value of a specific attribute.
+      *
+      * @param index The index of the attribute (zero-based).
+      * @param value The attribute's value.
+      * @exception java.lang.ArrayIndexOutOfBoundsException When the
+      *            supplied index does not point to an attribute
+      *            in the list.
+      */
+     public void setValue (int index, String value)
+     {
+ 	if (index >= 0 && index < length) {
+ 	    data[index*5+4] = value;
+ 	} else {
+ 	    badIndex(index);
+ 	}
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal methods.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Ensure the internal array's capacity.
+      *
+      * @param n The minimum number of attributes that the array must
+      *        be able to hold.
+      */
+     private void ensureCapacity (int n)    {
+         if (n <= 0) {
+             return;
+         }
+         int max;
+         if (data == null || data.length == 0) {
+             max = 25;
+         }
+         else if (data.length >= n * 5) {
+             return;
+         }
+         else {
+             max = data.length;
+         }
+         while (max < n * 5) {
+             max *= 2;
+         }
+ 
+         String newData[] = new String[max];
+         if (length > 0) {
+             System.arraycopy(data, 0, newData, 0, length*5);
+         }
+         data = newData;
+     }
+ 
+ 
+     /**
+      * Report a bad array index in a manipulator.
+      *
+      * @param index The index to report.
+      * @exception java.lang.ArrayIndexOutOfBoundsException Always.
+      */
+     private void badIndex (int index)
+ 	throws ArrayIndexOutOfBoundsException
+     {
+ 	String msg =
+ 	    "Attempt to modify attribute at illegal index: " + index;
+ 	throw new ArrayIndexOutOfBoundsException(msg);
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal state.
+     ////////////////////////////////////////////////////////////////////
+ 
+     int length;
+     String data [];
+ 
+ }
+ 
+ // end of AttributesImpl.java
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/DefaultHandler.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/DefaultHandler.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/DefaultHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/DefaultHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,467 ----
+ // DefaultHandler.java - default implementation of the core handlers.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the public domain.
+ // $Id: DefaultHandler.java,v 1.11 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import java.io.IOException;
+ 
+ import org.xml.sax.InputSource;
+ import org.xml.sax.Locator;
+ import org.xml.sax.Attributes;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ 
+ 
+ /**
+  * Default base class for SAX2 event handlers.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class is available as a convenience base class for SAX2
+  * applications: it provides default implementations for all of the
+  * callbacks in the four core SAX2 handler classes:</p>
+  *
+  * <ul>
+  * <li>{@link org.xml.sax.EntityResolver EntityResolver}</li>
+  * <li>{@link org.xml.sax.DTDHandler DTDHandler}</li>
+  * <li>{@link org.xml.sax.ContentHandler ContentHandler}</li>
+  * <li>{@link org.xml.sax.ErrorHandler ErrorHandler}</li>
+  * </ul>
+  *
+  * <p>Application writers can extend this class when they need to
+  * implement only part of an interface; parser writers can
+  * instantiate this class to provide default handlers when the
+  * application has not supplied its own.</p>
+  *
+  * <p>This class replaces the deprecated SAX1
+  * {@link org.xml.sax.HandlerBase HandlerBase} class.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson,
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.EntityResolver
+  * @see org.xml.sax.DTDHandler
+  * @see org.xml.sax.ContentHandler
+  * @see org.xml.sax.ErrorHandler
+  */
+ public class DefaultHandler
+     implements EntityResolver, DTDHandler, ContentHandler, ErrorHandler
+ {
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Default implementation of the EntityResolver interface.
+     ////////////////////////////////////////////////////////////////////
+     
+     /**
+      * Resolve an external entity.
+      *
+      * <p>Always return null, so that the parser will use the system
+      * identifier provided in the XML document.  This method implements
+      * the SAX default behaviour: application writers can override it
+      * in a subclass to do special translations such as catalog lookups
+      * or URI redirection.</p>
+      *
+      * @param publicId The public identifer, or null if none is
+      *                 available.
+      * @param systemId The system identifier provided in the XML 
+      *                 document.
+      * @return The new input source, or null to require the
+      *         default behaviour.
+      * @exception java.io.IOException If there is an error setting
+      *            up the new input source.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.EntityResolver#resolveEntity
+      */
+     public InputSource resolveEntity (String publicId, String systemId)
+ 	throws IOException, SAXException
+     {
+ 	return null;
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Default implementation of DTDHandler interface.
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Receive notification of a notation declaration.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass if they wish to keep track of the notations
+      * declared in a document.</p>
+      *
+      * @param name The notation name.
+      * @param publicId The notation public identifier, or null if not
+      *                 available.
+      * @param systemId The notation system identifier.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.DTDHandler#notationDecl
+      */
+     public void notationDecl (String name, String publicId, String systemId)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of an unparsed entity declaration.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to keep track of the unparsed entities
+      * declared in a document.</p>
+      *
+      * @param name The entity name.
+      * @param publicId The entity public identifier, or null if not
+      *                 available.
+      * @param systemId The entity system identifier.
+      * @param notationName The name of the associated notation.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.DTDHandler#unparsedEntityDecl
+      */
+     public void unparsedEntityDecl (String name, String publicId,
+ 				    String systemId, String notationName)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Default implementation of ContentHandler interface.
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Receive a Locator object for document events.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass if they wish to store the locator for use
+      * with other document events.</p>
+      *
+      * @param locator A locator for all SAX document events.
+      * @see org.xml.sax.ContentHandler#setDocumentLocator
+      * @see org.xml.sax.Locator
+      */
+     public void setDocumentLocator (Locator locator)
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of the beginning of the document.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the beginning
+      * of a document (such as allocating the root node of a tree or
+      * creating an output file).</p>
+      *
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#startDocument
+      */
+     public void startDocument ()
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of the end of the document.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the end
+      * of a document (such as finalising a tree or closing an output
+      * file).</p>
+      *
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#endDocument
+      */
+     public void endDocument ()
+ 	throws SAXException
+     {
+ 	// no op
+     }
+ 
+ 
+     /**
+      * Receive notification of the start of a Namespace mapping.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the start of
+      * each Namespace prefix scope (such as storing the prefix mapping).</p>
+      *
+      * @param prefix The Namespace prefix being declared.
+      * @param uri The Namespace URI mapped to the prefix.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#startPrefixMapping
+      */
+     public void startPrefixMapping (String prefix, String uri)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+ 
+ 
+     /**
+      * Receive notification of the end of a Namespace mapping.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the end of
+      * each prefix mapping.</p>
+      *
+      * @param prefix The Namespace prefix being declared.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#endPrefixMapping
+      */
+     public void endPrefixMapping (String prefix)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of the start of an element.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the start of
+      * each element (such as allocating a new tree node or writing
+      * output to a file).</p>
+      *
+      * @param uri The Namespace URI, or the empty string if the
+      *        element has no Namespace URI or if Namespace
+      *        processing is not being performed.
+      * @param localName The local name (without prefix), or the
+      *        empty string if Namespace processing is not being
+      *        performed.
+      * @param qName The qualified name (with prefix), or the
+      *        empty string if qualified names are not available.
+      * @param attributes The attributes attached to the element.  If
+      *        there are no attributes, it shall be an empty
+      *        Attributes object.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#startElement
+      */
+     public void startElement (String uri, String localName,
+ 			      String qName, Attributes attributes)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of the end of an element.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions at the end of
+      * each element (such as finalising a tree node or writing
+      * output to a file).</p>
+      *
+      * @param uri The Namespace URI, or the empty string if the
+      *        element has no Namespace URI or if Namespace
+      *        processing is not being performed.
+      * @param localName The local name (without prefix), or the
+      *        empty string if Namespace processing is not being
+      *        performed.
+      * @param qName The qualified name (with prefix), or the
+      *        empty string if qualified names are not available.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#endElement
+      */
+     public void endElement (String uri, String localName, String qName)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of character data inside an element.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method to take specific actions for each chunk of character data
+      * (such as adding the data to a node or buffer, or printing it to
+      * a file).</p>
+      *
+      * @param ch The characters.
+      * @param start The start position in the character array.
+      * @param length The number of characters to use from the
+      *               character array.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#characters
+      */
+     public void characters (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of ignorable whitespace in element content.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method to take specific actions for each chunk of ignorable
+      * whitespace (such as adding data to a node or buffer, or printing
+      * it to a file).</p>
+      *
+      * @param ch The whitespace characters.
+      * @param start The start position in the character array.
+      * @param length The number of characters to use from the
+      *               character array.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#ignorableWhitespace
+      */
+     public void ignorableWhitespace (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of a processing instruction.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions for each
+      * processing instruction, such as setting status variables or
+      * invoking other methods.</p>
+      *
+      * @param target The processing instruction target.
+      * @param data The processing instruction data, or null if
+      *             none is supplied.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#processingInstruction
+      */
+     public void processingInstruction (String target, String data)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+ 
+ 
+     /**
+      * Receive notification of a skipped entity.
+      *
+      * <p>By default, do nothing.  Application writers may override this
+      * method in a subclass to take specific actions for each
+      * processing instruction, such as setting status variables or
+      * invoking other methods.</p>
+      *
+      * @param name The name of the skipped entity.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ContentHandler#processingInstruction
+      */
+     public void skippedEntity (String name)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Default implementation of the ErrorHandler interface.
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Receive notification of a parser warning.
+      *
+      * <p>The default implementation does nothing.  Application writers
+      * may override this method in a subclass to take specific actions
+      * for each warning, such as inserting the message in a log file or
+      * printing it to the console.</p>
+      *
+      * @param e The warning information encoded as an exception.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ErrorHandler#warning
+      * @see org.xml.sax.SAXParseException
+      */
+     public void warning (SAXParseException e)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Receive notification of a recoverable parser error.
+      *
+      * <p>The default implementation does nothing.  Application writers
+      * may override this method in a subclass to take specific actions
+      * for each error, such as inserting the message in a log file or
+      * printing it to the console.</p>
+      *
+      * @param e The warning information encoded as an exception.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ErrorHandler#warning
+      * @see org.xml.sax.SAXParseException
+      */
+     public void error (SAXParseException e)
+ 	throws SAXException
+     {
+ 	// no op
+     }
+     
+     
+     /**
+      * Report a fatal XML parsing error.
+      *
+      * <p>The default implementation throws a SAXParseException.
+      * Application writers may override this method in a subclass if
+      * they need to take specific actions for each fatal error (such as
+      * collecting all of the errors into a single report): in any case,
+      * the application must stop all regular processing when this
+      * method is invoked, since the document is no longer reliable, and
+      * the parser may no longer report parsing events.</p>
+      *
+      * @param e The error information encoded as an exception.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @see org.xml.sax.ErrorHandler#fatalError
+      * @see org.xml.sax.SAXParseException
+      */
+     public void fatalError (SAXParseException e)
+ 	throws SAXException
+     {
+ 	throw e;
+     }
+     
+ }
+ 
+ // end of DefaultHandler.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/LocatorImpl.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/LocatorImpl.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/LocatorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/LocatorImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,214 ----
+ // SAX default implementation for Locator.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: LocatorImpl.java,v 1.11 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import org.xml.sax.Locator;
+ 
+ 
+ /**
+  * Provide an optional convenience implementation of Locator.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class is available mainly for application writers, who
+  * can use it to make a persistent snapshot of a locator at any
+  * point during a document parse:</p>
+  *
+  * <pre>
+  * Locator locator;
+  * Locator startloc;
+  *
+  * public void setLocator (Locator locator)
+  * {
+  *         // note the locator
+  *   this.locator = locator;
+  * }
+  *
+  * public void startDocument ()
+  * {
+  *         // save the location of the start of the document
+  *         // for future use.
+  *   Locator startloc = new LocatorImpl(locator);
+  * }
+  *</pre>
+  *
+  * <p>Normally, parser writers will not use this class, since it
+  * is more efficient to provide location information only when
+  * requested, rather than constantly updating a Locator object.</p>
+  *
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.Locator Locator
+  */
+ public class LocatorImpl implements Locator
+ {
+     
+     
+     /**
+      * Zero-argument constructor.
+      *
+      * <p>This will not normally be useful, since the main purpose
+      * of this class is to make a snapshot of an existing Locator.</p>
+      */
+     public LocatorImpl ()
+     {
+     }
+     
+     
+     /**
+      * Copy constructor.
+      *
+      * <p>Create a persistent copy of the current state of a locator.
+      * When the original locator changes, this copy will still keep
+      * the original values (and it can be used outside the scope of
+      * DocumentHandler methods).</p>
+      *
+      * @param locator The locator to copy.
+      */
+     public LocatorImpl (Locator locator)
+     {
+ 	setPublicId(locator.getPublicId());
+ 	setSystemId(locator.getSystemId());
+ 	setLineNumber(locator.getLineNumber());
+ 	setColumnNumber(locator.getColumnNumber());
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.Locator
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Return the saved public identifier.
+      *
+      * @return The public identifier as a string, or null if none
+      *         is available.
+      * @see org.xml.sax.Locator#getPublicId
+      * @see #setPublicId
+      */
+     public String getPublicId ()
+     {
+ 	return publicId;
+     }
+     
+     
+     /**
+      * Return the saved system identifier.
+      *
+      * @return The system identifier as a string, or null if none
+      *         is available.
+      * @see org.xml.sax.Locator#getSystemId
+      * @see #setSystemId
+      */
+     public String getSystemId ()
+     {
+ 	return systemId;
+     }
+     
+     
+     /**
+      * Return the saved line number (1-based).
+      *
+      * @return The line number as an integer, or -1 if none is available.
+      * @see org.xml.sax.Locator#getLineNumber
+      * @see #setLineNumber
+      */
+     public int getLineNumber ()
+     {
+ 	return lineNumber;
+     }
+     
+     
+     /**
+      * Return the saved column number (1-based).
+      *
+      * @return The column number as an integer, or -1 if none is available.
+      * @see org.xml.sax.Locator#getColumnNumber
+      * @see #setColumnNumber
+      */
+     public int getColumnNumber ()
+     {
+ 	return columnNumber;
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Setters for the properties (not in org.xml.sax.Locator)
+     ////////////////////////////////////////////////////////////////////
+     
+     
+     /**
+      * Set the public identifier for this locator.
+      *
+      * @param publicId The new public identifier, or null 
+      *        if none is available.
+      * @see #getPublicId
+      */
+     public void setPublicId (String publicId)
+     {
+ 	this.publicId = publicId;
+     }
+     
+     
+     /**
+      * Set the system identifier for this locator.
+      *
+      * @param systemId The new system identifier, or null 
+      *        if none is available.
+      * @see #getSystemId
+      */
+     public void setSystemId (String systemId)
+     {
+ 	this.systemId = systemId;
+     }
+     
+     
+     /**
+      * Set the line number for this locator (1-based).
+      *
+      * @param lineNumber The line number, or -1 if none is available.
+      * @see #getLineNumber
+      */
+     public void setLineNumber (int lineNumber)
+     {
+ 	this.lineNumber = lineNumber;
+     }
+     
+     
+     /**
+      * Set the column number for this locator (1-based).
+      *
+      * @param columnNumber The column number, or -1 if none is available.
+      * @see #getColumnNumber
+      */
+     public void setColumnNumber (int columnNumber)
+     {
+ 	this.columnNumber = columnNumber;
+     }
+     
+     
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal state.
+     ////////////////////////////////////////////////////////////////////
+     
+     private String publicId;
+     private String systemId;
+     private int lineNumber;
+     private int columnNumber;
+     
+ }
+ 
+ // end of LocatorImpl.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/NamespaceSupport.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/NamespaceSupport.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/NamespaceSupport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/NamespaceSupport.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,835 ----
+ // NamespaceSupport.java - generic Namespace support for SAX.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // This class is in the Public Domain.  NO WARRANTY!
+ // $Id: NamespaceSupport.java,v 1.14 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import java.util.EmptyStackException;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.Vector;
+ 
+ 
+ /**
+  * Encapsulate Namespace logic for use by applications using SAX,
+  * or internally by SAX drivers.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class encapsulates the logic of Namespace processing: it
+  * tracks the declarations currently in force for each context and
+  * automatically processes qualified XML names into their Namespace
+  * parts; it can also be used in reverse for generating XML qnames
+  * from Namespaces.</p>
+  *
+  * <p>Namespace support objects are reusable, but the reset method
+  * must be invoked between each session.</p>
+  *
+  * <p>Here is a simple session:</p>
+  *
+  * <pre>
+  * String parts[] = new String[3];
+  * NamespaceSupport support = new NamespaceSupport();
+  *
+  * support.pushContext();
+  * support.declarePrefix("", "http://www.w3.org/1999/xhtml");
+  * support.declarePrefix("dc", "http://www.purl.org/dc#");
+  *
+  * parts = support.processName("p", parts, false);
+  * System.out.println("Namespace URI: " + parts[0]);
+  * System.out.println("Local name: " + parts[1]);
+  * System.out.println("Raw name: " + parts[2]);
+  *
+  * parts = support.processName("dc:title", parts, false);
+  * System.out.println("Namespace URI: " + parts[0]);
+  * System.out.println("Local name: " + parts[1]);
+  * System.out.println("Raw name: " + parts[2]);
+  *
+  * support.popContext();
+  * </pre>
+  *
+  * <p>Note that this class is optimized for the use case where most
+  * elements do not contain Namespace declarations: if the same
+  * prefix/URI mapping is repeated for each context (for example), this
+  * class will be somewhat less efficient.</p>
+  *
+  * <p>Although SAX drivers (parsers) may choose to use this class to
+  * implement namespace handling, they are not required to do so.
+  * Applications must track namespace information themselves if they
+  * want to use namespace information.
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  */
+ public class NamespaceSupport
+ {
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Constants.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * The XML Namespace URI as a constant.
+      * The value is <code>http://www.w3.org/XML/1998/namespace</code>
+      * as defined in the "Namespaces in XML" * recommendation.
+      *
+      * <p>This is the Namespace URI that is automatically mapped
+      * to the "xml" prefix.</p>
+      */
+     public final static String XMLNS =
+ 	"http://www.w3.org/XML/1998/namespace";
+ 
+ 
+     /**
+      * The namespace declaration URI as a constant.
+      * The value is <code>http://www.w3.org/xmlns/2000/</code>, as defined
+      * in a backwards-incompatible erratum to the "Namespaces in XML"
+      * recommendation.  Because that erratum postdated SAX2, SAX2 defaults 
+      * to the original recommendation, and does not normally use this URI.
+      * 
+      *
+      * <p>This is the Namespace URI that is optionally applied to
+      * <em>xmlns</em> and <em>xmlns:*</em> attributes, which are used to
+      * declare namespaces.  </p>
+      *
+      * @since SAX 2.1alpha
+      * @see #setNamespaceDeclUris
+      * @see #isNamespaceDeclUris
+      */
+     public final static String NSDECL =
+ 	"http://www.w3.org/xmlns/2000/";
+ 
+ 
+     /**
+      * An empty enumeration.
+      */
+     private final static Enumeration EMPTY_ENUMERATION =
+ 	new Vector().elements();
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Constructor.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Create a new Namespace support object.
+      */
+     public NamespaceSupport ()
+     {
+ 	reset();
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Context management.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Reset this Namespace support object for reuse.
+      *
+      * <p>It is necessary to invoke this method before reusing the
+      * Namespace support object for a new session.  If namespace
+      * declaration URIs are to be supported, that flag must also
+      * be set to a non-default value.
+      * </p>
+      *
+      * @see #setNamespaceDeclUris
+      */
+     public void reset ()
+     {
+ 	contexts = new Context[32];
+ 	namespaceDeclUris = false;
+ 	contextPos = 0;
+ 	contexts[contextPos] = currentContext = new Context();
+ 	currentContext.declarePrefix("xml", XMLNS);
+     }
+ 
+ 
+     /**
+      * Start a new Namespace context.
+      * The new context will automatically inherit
+      * the declarations of its parent context, but it will also keep
+      * track of which declarations were made within this context.
+      *
+      * <p>Event callback code should start a new context once per element.
+      * This means being ready to call this in either of two places.
+      * For elements that don't include namespace declarations, the
+      * <em>ContentHandler.startElement()</em> callback is the right place.
+      * For elements with such a declaration, it'd done in the first
+      * <em>ContentHandler.startPrefixMapping()</em> callback.
+      * A boolean flag can be used to
+      * track whether a context has been started yet.  When either of
+      * those methods is called, it checks the flag to see if a new context
+      * needs to be started.  If so, it starts the context and sets the
+      * flag.  After <em>ContentHandler.startElement()</em>
+      * does that, it always clears the flag.
+      *
+      * <p>Normally, SAX drivers would push a new context at the beginning
+      * of each XML element.  Then they perform a first pass over the
+      * attributes to process all namespace declarations, making
+      * <em>ContentHandler.startPrefixMapping()</em> callbacks.
+      * Then a second pass is made, to determine the namespace-qualified
+      * names for all attributes and for the element name.
+      * Finally all the information for the
+      * <em>ContentHandler.startElement()</em> callback is available,
+      * so it can then be made.
+      *
+      * <p>The Namespace support object always starts with a base context
+      * already in force: in this context, only the "xml" prefix is
+      * declared.</p>
+      *
+      * @see org.xml.sax.ContentHandler
+      * @see #popContext
+      */
+     public void pushContext ()
+     {
+ 	int max = contexts.length;
+ 
+ 	contexts [contextPos].declsOK = false;
+ 	contextPos++;
+ 
+ 				// Extend the array if necessary
+ 	if (contextPos >= max) {
+ 	    Context newContexts[] = new Context[max*2];
+ 	    System.arraycopy(contexts, 0, newContexts, 0, max);
+ 	    max *= 2;
+ 	    contexts = newContexts;
+ 	}
+ 
+ 				// Allocate the context if necessary.
+ 	currentContext = contexts[contextPos];
+ 	if (currentContext == null) {
+ 	    contexts[contextPos] = currentContext = new Context();
+ 	}
+ 
+ 				// Set the parent, if any.
+ 	if (contextPos > 0) {
+ 	    currentContext.setParent(contexts[contextPos - 1]);
+ 	}
+     }
+ 
+ 
+     /**
+      * Revert to the previous Namespace context.
+      *
+      * <p>Normally, you should pop the context at the end of each
+      * XML element.  After popping the context, all Namespace prefix
+      * mappings that were previously in force are restored.</p>
+      *
+      * <p>You must not attempt to declare additional Namespace
+      * prefixes after popping a context, unless you push another
+      * context first.</p>
+      *
+      * @see #pushContext
+      */
+     public void popContext ()
+     {
+ 	contexts[contextPos].clear();
+ 	contextPos--;
+ 	if (contextPos < 0) {
+ 	    throw new EmptyStackException();
+ 	}
+ 	currentContext = contexts[contextPos];
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Operations within a context.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Declare a Namespace prefix.  All prefixes must be declared
+      * before they are referenced.  For example, a SAX driver (parser)
+      * would scan an element's attributes
+      * in two passes:  first for namespace declarations,
+      * then a second pass using {@link #processName processName()} to
+      * interpret prefixes against (potentially redefined) prefixes.
+      *
+      * <p>This method declares a prefix in the current Namespace
+      * context; the prefix will remain in force until this context
+      * is popped, unless it is shadowed in a descendant context.</p>
+      *
+      * <p>To declare the default element Namespace, use the empty string as
+      * the prefix.</p>
+      *
+      * <p>Note that you must <em>not</em> declare a prefix after
+      * you've pushed and popped another Namespace context, or
+      * treated the declarations phase as complete by processing
+      * a prefixed name.</p>
+      *
+      * <p>Note that there is an asymmetry in this library: {@link
+      * #getPrefix getPrefix} will not return the "" prefix,
+      * even if you have declared a default element namespace.
+      * To check for a default namespace,
+      * you have to look it up explicitly using {@link #getURI getURI}.
+      * This asymmetry exists to make it easier to look up prefixes
+      * for attribute names, where the default prefix is not allowed.</p>
+      *
+      * @param prefix The prefix to declare, or the empty string to
+      *	indicate the default element namespace.  This may never have
+      *	the value "xml" or "xmlns".
+      * @param uri The Namespace URI to associate with the prefix.
+      * @return true if the prefix was legal, false otherwise
+      *
+      * @see #processName
+      * @see #getURI
+      * @see #getPrefix
+      */
+     public boolean declarePrefix (String prefix, String uri)
+     {
+ 	if (prefix.equals("xml") || prefix.equals("xmlns")) {
+ 	    return false;
+ 	} else {
+ 	    currentContext.declarePrefix(prefix, uri);
+ 	    return true;
+ 	}
+     }
+ 
+ 
+     /**
+      * Process a raw XML qualified name, after all declarations in the
+      * current context have been handled by {@link #declarePrefix
+      * declarePrefix()}.
+      *
+      * <p>This method processes a raw XML qualified name in the
+      * current context by removing the prefix and looking it up among
+      * the prefixes currently declared.  The return value will be the
+      * array supplied by the caller, filled in as follows:</p>
+      *
+      * <dl>
+      * <dt>parts[0]</dt>
+      * <dd>The Namespace URI, or an empty string if none is
+      *  in use.</dd>
+      * <dt>parts[1]</dt>
+      * <dd>The local name (without prefix).</dd>
+      * <dt>parts[2]</dt>
+      * <dd>The original raw name.</dd>
+      * </dl>
+      *
+      * <p>All of the strings in the array will be internalized.  If
+      * the raw name has a prefix that has not been declared, then
+      * the return value will be null.</p>
+      *
+      * <p>Note that attribute names are processed differently than
+      * element names: an unprefixed element name will receive the
+      * default Namespace (if any), while an unprefixed attribute name
+      * will not.</p>
+      *
+      * @param qName The XML qualified name to be processed.
+      * @param parts An array supplied by the caller, capable of
+      *        holding at least three members.
+      * @param isAttribute A flag indicating whether this is an
+      *        attribute name (true) or an element name (false).
+      * @return The supplied array holding three internalized strings 
+      *        representing the Namespace URI (or empty string), the
+      *        local name, and the XML qualified name; or null if there
+      *        is an undeclared prefix.
+      * @see #declarePrefix
+      * @see java.lang.String#intern */
+     public String [] processName (String qName, String parts[],
+ 				  boolean isAttribute)
+     {
+ 	String myParts[] = currentContext.processName(qName, isAttribute);
+ 	if (myParts == null) {
+ 	    return null;
+ 	} else {
+ 	    parts[0] = myParts[0];
+ 	    parts[1] = myParts[1];
+ 	    parts[2] = myParts[2];
+ 	    return parts;
+ 	}
+     }
+ 
+ 
+     /**
+      * Look up a prefix and get the currently-mapped Namespace URI.
+      *
+      * <p>This method looks up the prefix in the current context.
+      * Use the empty string ("") for the default Namespace.</p>
+      *
+      * @param prefix The prefix to look up.
+      * @return The associated Namespace URI, or null if the prefix
+      *         is undeclared in this context.
+      * @see #getPrefix
+      * @see #getPrefixes
+      */
+     public String getURI (String prefix)
+     {
+ 	return currentContext.getURI(prefix);
+     }
+ 
+ 
+     /**
+      * Return an enumeration of all prefixes whose declarations are
+      * active in the current context.
+      * This includes declarations from parent contexts that have
+      * not been overridden.
+      *
+      * <p><strong>Note:</strong> if there is a default prefix, it will not be
+      * returned in this enumeration; check for the default prefix
+      * using the {@link #getURI getURI} with an argument of "".</p>
+      *
+      * @return An enumeration of prefixes (never empty).
+      * @see #getDeclaredPrefixes
+      * @see #getURI
+      */
+     public Enumeration getPrefixes ()
+     {
+ 	return currentContext.getPrefixes();
+     }
+ 
+ 
+     /**
+      * Return one of the prefixes mapped to a Namespace URI.
+      *
+      * <p>If more than one prefix is currently mapped to the same
+      * URI, this method will make an arbitrary selection; if you
+      * want all of the prefixes, use the {@link #getPrefixes}
+      * method instead.</p>
+      *
+      * <p><strong>Note:</strong> this will never return the empty (default) prefix;
+      * to check for a default prefix, use the {@link #getURI getURI}
+      * method with an argument of "".</p>
+      *
+      * @param uri the namespace URI
+      * @return one of the prefixes currently mapped to the URI supplied,
+      *         or null if none is mapped or if the URI is assigned to
+      *         the default namespace
+      * @see #getPrefixes(java.lang.String)
+      * @see #getURI
+      */
+     public String getPrefix (String uri)
+     {
+ 	return currentContext.getPrefix(uri);
+     }
+ 
+ 
+     /**
+      * Return an enumeration of all prefixes for a given URI whose
+      * declarations are active in the current context.
+      * This includes declarations from parent contexts that have
+      * not been overridden.
+      *
+      * <p>This method returns prefixes mapped to a specific Namespace
+      * URI.  The xml: prefix will be included.  If you want only one
+      * prefix that's mapped to the Namespace URI, and you don't care 
+      * which one you get, use the {@link #getPrefix getPrefix}
+      *  method instead.</p>
+      *
+      * <p><strong>Note:</strong> the empty (default) prefix is <em>never</em> included
+      * in this enumeration; to check for the presence of a default
+      * Namespace, use the {@link #getURI getURI} method with an
+      * argument of "".</p>
+      *
+      * @param uri The Namespace URI.
+      * @return An enumeration of prefixes (never empty).
+      * @see #getPrefix
+      * @see #getDeclaredPrefixes
+      * @see #getURI
+      */
+     public Enumeration getPrefixes (String uri)
+     {
+ 	Vector prefixes = new Vector();
+ 	Enumeration allPrefixes = getPrefixes();
+ 	while (allPrefixes.hasMoreElements()) {
+ 	    String prefix = (String)allPrefixes.nextElement();
+ 	    if (uri.equals(getURI(prefix))) {
+ 		prefixes.addElement(prefix);
+ 	    }
+ 	}
+ 	return prefixes.elements();
+     }
+ 
+ 
+     /**
+      * Return an enumeration of all prefixes declared in this context.
+      *
+      * <p>The empty (default) prefix will be included in this 
+      * enumeration; note that this behaviour differs from that of
+      * {@link #getPrefix} and {@link #getPrefixes}.</p>
+      *
+      * @return An enumeration of all prefixes declared in this
+      *         context.
+      * @see #getPrefixes
+      * @see #getURI
+      */
+     public Enumeration getDeclaredPrefixes ()
+     {
+ 	return currentContext.getDeclaredPrefixes();
+     }
+ 
+     /**
+      * Controls whether namespace declaration attributes are placed
+      * into the {@link #NSDECL NSDECL} namespace
+      * by {@link #processName processName()}.  This may only be
+      * changed before any contexts have been pushed.
+      *
+      * @since SAX 2.1alpha
+      *
+      * @exception IllegalStateException when attempting to set this
+      *	after any context has been pushed.
+      */
+     public void setNamespaceDeclUris (boolean value)
+     {
+ 	if (contextPos != 0)
+ 	    throw new IllegalStateException ();
+ 	if (value == namespaceDeclUris)
+ 	    return;
+ 	namespaceDeclUris = value;
+ 	if (value)
+ 	    currentContext.declarePrefix ("xmlns", NSDECL);
+ 	else {
+ 	    contexts[contextPos] = currentContext = new Context();
+ 	    currentContext.declarePrefix("xml", XMLNS);
+ 	}
+     }
+ 
+     /**
+      * Returns true if namespace declaration attributes are placed into
+      * a namespace.  This behavior is not the default.
+      *
+      * @since SAX 2.1alpha
+      */
+     public boolean isNamespaceDeclUris ()
+ 	{ return namespaceDeclUris; }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal state.
+     ////////////////////////////////////////////////////////////////////
+ 
+     private Context contexts[];
+     private Context currentContext;
+     private int contextPos;
+     private boolean namespaceDeclUris;
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal classes.
+     ////////////////////////////////////////////////////////////////////
+ 
+     /**
+      * Internal class for a single Namespace context.
+      *
+      * <p>This module caches and reuses Namespace contexts,
+      * so the number allocated
+      * will be equal to the element depth of the document, not to the total
+      * number of elements (i.e. 5-10 rather than tens of thousands).
+      * Also, data structures used to represent contexts are shared when
+      * possible (child contexts without declarations) to further reduce
+      * the amount of memory that's consumed.
+      * </p>
+      */
+     final class Context {
+ 
+ 	/**
+ 	 * Create the root-level Namespace context.
+ 	 */
+ 	Context ()
+ 	{
+ 	    copyTables();
+ 	}
+ 	
+ 	
+ 	/**
+ 	 * (Re)set the parent of this Namespace context.
+ 	 * The context must either have been freshly constructed,
+ 	 * or must have been cleared.
+ 	 *
+ 	 * @param context The parent Namespace context object.
+ 	 */
+ 	void setParent (Context parent)
+ 	{
+ 	    this.parent = parent;
+ 	    declarations = null;
+ 	    prefixTable = parent.prefixTable;
+ 	    uriTable = parent.uriTable;
+ 	    elementNameTable = parent.elementNameTable;
+ 	    attributeNameTable = parent.attributeNameTable;
+ 	    defaultNS = parent.defaultNS;
+ 	    declSeen = false;
+ 	    declsOK = true;
+ 	}
+ 
+ 	/**
+ 	 * Makes associated state become collectible,
+ 	 * invalidating this context.
+ 	 * {@link #setParent} must be called before
+ 	 * this context may be used again.
+ 	 */
+ 	void clear ()
+ 	{
+ 	    parent = null;
+ 	    prefixTable = null;
+ 	    uriTable = null;
+ 	    elementNameTable = null;
+ 	    attributeNameTable = null;
+ 	    defaultNS = null;
+ 	}
+ 	
+ 	
+ 	/**
+ 	 * Declare a Namespace prefix for this context.
+ 	 *
+ 	 * @param prefix The prefix to declare.
+ 	 * @param uri The associated Namespace URI.
+ 	 * @see org.xml.sax.helpers.NamespaceSupport#declarePrefix
+ 	 */
+ 	void declarePrefix (String prefix, String uri)
+ 	{
+ 				// Lazy processing...
+ 	    if (!declsOK)
+ 		throw new IllegalStateException (
+ 		    "can't declare any more prefixes in this context");
+ 	    if (!declSeen) {
+ 		copyTables();
+ 	    }
+ 	    if (declarations == null) {
+ 		declarations = new Vector();
+ 	    }
+ 	    
+ 	    prefix = prefix.intern();
+ 	    uri = uri.intern();
+ 	    if ("".equals(prefix)) {
+ 		if ("".equals(uri)) {
+ 		    defaultNS = null;
+ 		} else {
+ 		    defaultNS = uri;
+ 		}
+ 	    } else {
+ 		prefixTable.put(prefix, uri);
+ 		uriTable.put(uri, prefix); // may wipe out another prefix
+ 	    }
+ 	    declarations.addElement(prefix);
+ 	}
+ 
+ 
+ 	/**
+ 	 * Process an XML qualified name in this context.
+ 	 *
+ 	 * @param qName The XML qualified name.
+ 	 * @param isAttribute true if this is an attribute name.
+ 	 * @return An array of three strings containing the
+ 	 *         URI part (or empty string), the local part,
+ 	 *         and the raw name, all internalized, or null
+ 	 *         if there is an undeclared prefix.
+ 	 * @see org.xml.sax.helpers.NamespaceSupport#processName
+ 	 */
+ 	String [] processName (String qName, boolean isAttribute)
+ 	{
+ 	    String name[];
+ 	    Hashtable table;
+ 	    
+ 	    			// detect errors in call sequence
+ 	    declsOK = false;
+ 
+ 				// Select the appropriate table.
+ 	    if (isAttribute) {
+ 		table = attributeNameTable;
+ 	    } else {
+ 		table = elementNameTable;
+ 	    }
+ 	    
+ 				// Start by looking in the cache, and
+ 				// return immediately if the name
+ 				// is already known in this content
+ 	    name = (String[])table.get(qName);
+ 	    if (name != null) {
+ 		return name;
+ 	    }
+ 	    
+ 				// We haven't seen this name in this
+ 				// context before.  Maybe in the parent
+ 				// context, but we can't assume prefix
+ 				// bindings are the same.
+ 	    name = new String[3];
+ 	    name[2] = qName.intern();
+ 	    int index = qName.indexOf(':');
+ 	    
+ 	    
+ 				// No prefix.
+ 	    if (index == -1) {
+ 		if (isAttribute) {
+ 		    if (qName == "xmlns" && namespaceDeclUris)
+ 			name[0] = NSDECL;
+ 		    else
+ 			name[0] = "";
+ 		} else if (defaultNS == null) {
+ 		    name[0] = "";
+ 		} else {
+ 		    name[0] = defaultNS;
+ 		}
+ 		name[1] = name[2];
+ 	    }
+ 	    
+ 				// Prefix
+ 	    else {
+ 		String prefix = qName.substring(0, index);
+ 		String local = qName.substring(index+1);
+ 		String uri;
+ 		if ("".equals(prefix)) {
+ 		    uri = defaultNS;
+ 		} else {
+ 		    uri = (String)prefixTable.get(prefix);
+ 		}
+ 		if (uri == null
+ 			|| (!isAttribute && "xmlns".equals (prefix))) {
+ 		    return null;
+ 		}
+ 		name[0] = uri;
+ 		name[1] = local.intern();
+ 	    }
+ 	    
+ 				// Save in the cache for future use.
+ 				// (Could be shared with parent context...)
+ 	    table.put(name[2], name);
+ 	    return name;
+ 	}
+ 	
+ 
+ 	/**
+ 	 * Look up the URI associated with a prefix in this context.
+ 	 *
+ 	 * @param prefix The prefix to look up.
+ 	 * @return The associated Namespace URI, or null if none is
+ 	 *         declared.	
+ 	 * @see org.xml.sax.helpers.NamespaceSupport#getURI
+ 	 */
+ 	String getURI (String prefix)
+ 	{
+ 	    if ("".equals(prefix)) {
+ 		return defaultNS;
+ 	    } else if (prefixTable == null) {
+ 		return null;
+ 	    } else {
+ 		return (String)prefixTable.get(prefix);
+ 	    }
+ 	}
+ 
+ 
+ 	/**
+ 	 * Look up one of the prefixes associated with a URI in this context.
+ 	 *
+ 	 * <p>Since many prefixes may be mapped to the same URI,
+ 	 * the return value may be unreliable.</p>
+ 	 *
+ 	 * @param uri The URI to look up.
+ 	 * @return The associated prefix, or null if none is declared.
+ 	 * @see org.xml.sax.helpers.NamespaceSupport#getPrefix
+ 	 */
+ 	String getPrefix (String uri)
+ 	{
+ 	    if (uriTable == null) {
+ 		return null;
+ 	    } else {
+ 		return (String)uriTable.get(uri);
+ 	    }
+ 	}
+ 	
+ 	
+ 	/**
+ 	 * Return an enumeration of prefixes declared in this context.
+ 	 *
+ 	 * @return An enumeration of prefixes (possibly empty).
+ 	 * @see org.xml.sax.helpers.NamespaceSupport#getDeclaredPrefixes
+ 	 */
+ 	Enumeration getDeclaredPrefixes ()
+ 	{
+ 	    if (declarations == null) {
+ 		return EMPTY_ENUMERATION;
+ 	    } else {
+ 		return declarations.elements();
+ 	    }
+ 	}
+ 	
+ 	
+ 	/**
+ 	 * Return an enumeration of all prefixes currently in force.
+ 	 *
+ 	 * <p>The default prefix, if in force, is <em>not</em>
+ 	 * returned, and will have to be checked for separately.</p>
+ 	 *
+ 	 * @return An enumeration of prefixes (never empty).
+ 	 * @see org.xml.sax.helpers.NamespaceSupport#getPrefixes
+ 	 */
+ 	Enumeration getPrefixes ()
+ 	{
+ 	    if (prefixTable == null) {
+ 		return EMPTY_ENUMERATION;
+ 	    } else {
+ 		return prefixTable.keys();
+ 	    }
+ 	}
+ 	
+ 	
+ 
+ 	////////////////////////////////////////////////////////////////
+ 	// Internal methods.
+ 	////////////////////////////////////////////////////////////////
+ 
+ 
+ 	/**
+ 	 * Copy on write for the internal tables in this context.
+ 	 *
+ 	 * <p>This class is optimized for the normal case where most
+ 	 * elements do not contain Namespace declarations.</p>
+ 	 */	
+ 	private void copyTables ()
+ 	{
+ 	    if (prefixTable != null) {
+ 		prefixTable = (Hashtable)prefixTable.clone();
+ 	    } else {
+ 		prefixTable = new Hashtable();
+ 	    }
+ 	    if (uriTable != null) {
+ 		uriTable = (Hashtable)uriTable.clone();
+ 	    } else {
+ 		uriTable = new Hashtable();
+ 	    }
+ 	    elementNameTable = new Hashtable();
+ 	    attributeNameTable = new Hashtable();
+ 	    declSeen = true;
+ 	}
+ 
+ 
+ 
+ 	////////////////////////////////////////////////////////////////
+ 	// Protected state.
+ 	////////////////////////////////////////////////////////////////
+ 	
+ 	Hashtable prefixTable;
+ 	Hashtable uriTable;
+ 	Hashtable elementNameTable;
+ 	Hashtable attributeNameTable;
+ 	String defaultNS = null;
+ 	boolean declsOK = true;
+ 	
+ 
+ 
+ 	////////////////////////////////////////////////////////////////
+ 	// Internal state.
+ 	////////////////////////////////////////////////////////////////
+ 	
+ 	private Vector declarations = null;
+ 	private boolean declSeen = false;
+ 	private Context parent = null;
+     }
+ }
+ 
+ // end of NamespaceSupport.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/NewInstance.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/NewInstance.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/NewInstance.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/NewInstance.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ // NewInstance.java - create a new instance of a class by name.
+ // http://www.saxproject.org
+ // Written by Edwin Goei, edwingo@apache.org
+ // and by David Brownell, dbrownell@users.sourceforge.net
+ // NO WARRANTY!  This class is in the Public Domain.
+ // $Id: NewInstance.java,v 1.9 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import java.lang.reflect.Method;
+ import java.lang.reflect.InvocationTargetException;
+ 
+ /**
+  * Create a new instance of a class by name.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class contains a static method for creating an instance of a
+  * class from an explicit class name.  It tries to use the thread's context
+  * ClassLoader if possible and falls back to using
+  * Class.forName(String).</p>
+  *
+  * <p>This code is designed to compile and run on JDK version 1.1 and later
+  * including versions of Java 2.</p>
+  *
+  * @author Edwin Goei, David Brownell
+  * @version 2.0.1 (sax2r2)
+  */
+ class NewInstance {
+ 
+     /**
+      * Creates a new instance of the specified class name
+      *
+      * Package private so this code is not exposed at the API level.
+      */
+     static Object newInstance (ClassLoader classLoader, String className)
+         throws ClassNotFoundException, IllegalAccessException,
+             InstantiationException
+     {
+         Class driverClass;
+         if (classLoader == null) {
+             driverClass = Class.forName(className);
+         } else {
+             driverClass = classLoader.loadClass(className);
+         }
+         return driverClass.newInstance();
+     }
+ 
+     /**
+      * Figure out which ClassLoader to use.  For JDK 1.2 and later use
+      * the context ClassLoader.
+      */           
+     static ClassLoader getClassLoader ()
+     {
+         Method m = null;
+ 
+         try {
+             m = Thread.class.getMethod("getContextClassLoader", null);
+         } catch (NoSuchMethodException e) {
+             // Assume that we are running JDK 1.1, use the current ClassLoader
+             return NewInstance.class.getClassLoader();
+         }
+ 
+         try {
+             return (ClassLoader) m.invoke(Thread.currentThread(), null);
+         } catch (IllegalAccessException e) {
+             // assert(false)
+             throw new UnknownError(e.getMessage());
+         } catch (InvocationTargetException e) {
+             // assert(e.getTargetException() instanceof SecurityException)
+             throw new UnknownError(e.getMessage());
+         }
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/ParserAdapter.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/ParserAdapter.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/ParserAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/ParserAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1046 ----
+ // ParserAdapter.java - adapt a SAX1 Parser to a SAX2 XMLReader.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the public domain.
+ // $Id: ParserAdapter.java,v 1.12 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import java.io.IOException;
+ import java.util.Enumeration;
+ import java.util.Vector;
+ 
+ import org.xml.sax.Parser;	// deprecated
+ import org.xml.sax.InputSource;
+ import org.xml.sax.Locator;
+ import org.xml.sax.AttributeList; // deprecated
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.DocumentHandler; // deprecated
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ 
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXNotSupportedException;
+ 
+ 
+ /**
+  * Adapt a SAX1 Parser as a SAX2 XMLReader.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class wraps a SAX1 {@link org.xml.sax.Parser Parser}
+  * and makes it act as a SAX2 {@link org.xml.sax.XMLReader XMLReader},
+  * with feature, property, and Namespace support.  Note
+  * that it is not possible to report {@link org.xml.sax.ContentHandler#skippedEntity
+  * skippedEntity} events, since SAX1 does not make that information available.</p>
+  *
+  * <p>This adapter does not test for duplicate Namespace-qualified
+  * attribute names.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.helpers.XMLReaderAdapter
+  * @see org.xml.sax.XMLReader
+  * @see org.xml.sax.Parser
+  */
+ public class ParserAdapter implements XMLReader, DocumentHandler
+ {
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Constructors.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Construct a new parser adapter.
+      *
+      * <p>Use the "org.xml.sax.parser" property to locate the
+      * embedded SAX1 driver.</p>
+      *
+      * @exception SAXException If the embedded driver
+      *            cannot be instantiated or if the
+      *            org.xml.sax.parser property is not specified.
+      */
+     public ParserAdapter ()
+       throws SAXException
+     {
+ 	super();
+ 
+ 	String driver = System.getProperty("org.xml.sax.parser");
+ 
+ 	try {
+ 	    setup(ParserFactory.makeParser());
+ 	} catch (ClassNotFoundException e1) {
+ 	    throw new
+ 		SAXException("Cannot find SAX1 driver class " +
+ 			     driver, e1);
+ 	} catch (IllegalAccessException e2) {
+ 	    throw new
+ 		SAXException("SAX1 driver class " +
+ 			     driver +
+ 			     " found but cannot be loaded", e2);
+ 	} catch (InstantiationException e3) {
+ 	    throw new
+ 		SAXException("SAX1 driver class " +
+ 			     driver +
+ 			     " loaded but cannot be instantiated", e3);
+ 	} catch (ClassCastException e4) {
+ 	    throw new
+ 		SAXException("SAX1 driver class " +
+ 			     driver +
+ 			     " does not implement org.xml.sax.Parser");
+ 	} catch (NullPointerException e5) {
+ 	    throw new 
+ 		SAXException("System property org.xml.sax.parser not specified");
+ 	}
+     }
+ 
+ 
+     /**
+      * Construct a new parser adapter.
+      *
+      * <p>Note that the embedded parser cannot be changed once the
+      * adapter is created; to embed a different parser, allocate
+      * a new ParserAdapter.</p>
+      *
+      * @param parser The SAX1 parser to embed.
+      * @exception java.lang.NullPointerException If the parser parameter
+      *            is null.
+      */
+     public ParserAdapter (Parser parser)
+     {
+ 	super();
+ 	setup(parser);
+     }
+ 
+ 
+     /**
+      * Internal setup method.
+      *
+      * @param parser The embedded parser.
+      * @exception java.lang.NullPointerException If the parser parameter
+      *            is null.
+      */
+     private void setup (Parser parser)
+     {
+ 	if (parser == null) {
+ 	    throw new
+ 		NullPointerException("Parser argument must not be null");
+ 	}
+ 	this.parser = parser;
+ 	atts = new AttributesImpl();
+ 	nsSupport = new NamespaceSupport();
+ 	attAdapter = new AttributeListAdapter();
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.XMLReader.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     //
+     // Internal constants for the sake of convenience.
+     //
+     private final static String FEATURES = "http://xml.org/sax/features/";
+     private final static String NAMESPACES = FEATURES + "namespaces";
+     private final static String NAMESPACE_PREFIXES = FEATURES + "namespace-prefixes";
+     private final static String XMLNS_URIs = FEATURES + "xmlns-uris";
+ 
+ 
+     /**
+      * Set a feature flag for the parser.
+      *
+      * <p>The only features recognized are namespaces and 
+      * namespace-prefixes.</p>
+      *
+      * @param name The feature name, as a complete URI.
+      * @param value The requested feature value.
+      * @exception SAXNotRecognizedException If the feature
+      *            can't be assigned or retrieved.
+      * @exception SAXNotSupportedException If the feature
+      *            can't be assigned that value.
+      * @see org.xml.sax.XMLReader#setFeature
+      */
+     public void setFeature (String name, boolean value)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	if (name.equals(NAMESPACES)) {
+ 	    checkNotParsing("feature", name);
+ 	    namespaces = value;
+ 	    if (!namespaces && !prefixes) {
+ 		prefixes = true;
+ 	    }
+ 	} else if (name.equals(NAMESPACE_PREFIXES)) {
+ 	    checkNotParsing("feature", name);
+ 	    prefixes = value;
+ 	    if (!prefixes && !namespaces) {
+ 		namespaces = true;
+ 	    }
+ 	} else if (name.equals(XMLNS_URIs)) {
+ 	    checkNotParsing("feature", name);
+ 	    uris = value;
+ 	} else {
+ 	    throw new SAXNotRecognizedException("Feature: " + name);
+ 	}
+     }
+ 
+ 
+     /**
+      * Check a parser feature flag.
+      *
+      * <p>The only features recognized are namespaces and 
+      * namespace-prefixes.</p>
+      *
+      * @param name The feature name, as a complete URI.
+      * @return The current feature value.
+      * @exception SAXNotRecognizedException If the feature
+      *            value can't be assigned or retrieved.
+      * @exception SAXNotSupportedException If the
+      *            feature is not currently readable.
+      * @see org.xml.sax.XMLReader#setFeature
+      */
+     public boolean getFeature (String name)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	if (name.equals(NAMESPACES)) {
+ 	    return namespaces;
+ 	} else if (name.equals(NAMESPACE_PREFIXES)) {
+ 	    return prefixes;
+ 	} else if (name.equals(XMLNS_URIs)) {
+ 	    return uris;
+ 	} else {
+ 	    throw new SAXNotRecognizedException("Feature: " + name);
+ 	}
+     }
+ 
+ 
+     /**
+      * Set a parser property.
+      *
+      * <p>No properties are currently recognized.</p>
+      *
+      * @param name The property name.
+      * @param value The property value.
+      * @exception SAXNotRecognizedException If the property
+      *            value can't be assigned or retrieved.
+      * @exception SAXNotSupportedException If the property
+      *            can't be assigned that value.
+      * @see org.xml.sax.XMLReader#setProperty
+      */
+     public void setProperty (String name, Object value)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	throw new SAXNotRecognizedException("Property: " + name);
+     }
+ 
+ 
+     /**
+      * Get a parser property.
+      *
+      * <p>No properties are currently recognized.</p>
+      *
+      * @param name The property name.
+      * @return The property value.
+      * @exception SAXNotRecognizedException If the property
+      *            value can't be assigned or retrieved.
+      * @exception SAXNotSupportedException If the property
+      *            value is not currently readable.
+      * @see org.xml.sax.XMLReader#getProperty
+      */
+     public Object getProperty (String name)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	throw new SAXNotRecognizedException("Property: " + name);
+     }
+ 
+ 
+     /**
+      * Set the entity resolver.
+      *
+      * @param resolver The new entity resolver.
+      * @see org.xml.sax.XMLReader#setEntityResolver
+      */
+     public void setEntityResolver (EntityResolver resolver)
+     {
+ 	entityResolver = resolver;
+     }
+ 
+ 
+     /**
+      * Return the current entity resolver.
+      *
+      * @return The current entity resolver, or null if none was supplied.
+      * @see org.xml.sax.XMLReader#getEntityResolver
+      */
+     public EntityResolver getEntityResolver ()
+     {
+ 	return entityResolver;
+     }
+ 
+ 
+     /**
+      * Set the DTD handler.
+      *
+      * @param handler the new DTD handler
+      * @see org.xml.sax.XMLReader#setEntityResolver
+      */
+     public void setDTDHandler (DTDHandler handler)
+     {
+ 	dtdHandler = handler;
+     }
+ 
+ 
+     /**
+      * Return the current DTD handler.
+      *
+      * @return the current DTD handler, or null if none was supplied
+      * @see org.xml.sax.XMLReader#getEntityResolver
+      */
+     public DTDHandler getDTDHandler ()
+     {
+ 	return dtdHandler;
+     }
+ 
+ 
+     /**
+      * Set the content handler.
+      *
+      * @param handler the new content handler
+      * @see org.xml.sax.XMLReader#setEntityResolver
+      */
+     public void setContentHandler (ContentHandler handler)
+     {
+ 	contentHandler = handler;
+     }
+ 
+ 
+     /**
+      * Return the current content handler.
+      *
+      * @return The current content handler, or null if none was supplied.
+      * @see org.xml.sax.XMLReader#getEntityResolver
+      */
+     public ContentHandler getContentHandler ()
+     {
+ 	return contentHandler;
+     }
+ 
+ 
+     /**
+      * Set the error handler.
+      *
+      * @param handler The new error handler.
+      * @see org.xml.sax.XMLReader#setEntityResolver
+      */
+     public void setErrorHandler (ErrorHandler handler)
+     {
+ 	errorHandler = handler;
+     }
+ 
+ 
+     /**
+      * Return the current error handler.
+      *
+      * @return The current error handler, or null if none was supplied.
+      * @see org.xml.sax.XMLReader#getEntityResolver
+      */
+     public ErrorHandler getErrorHandler ()
+     {
+ 	return errorHandler;
+     }
+ 
+ 
+     /**
+      * Parse an XML document.
+      *
+      * @param systemId The absolute URL of the document.
+      * @exception java.io.IOException If there is a problem reading
+      *            the raw content of the document.
+      * @exception SAXException If there is a problem
+      *            processing the document.
+      * @see #parse(org.xml.sax.InputSource)
+      * @see org.xml.sax.Parser#parse(java.lang.String)
+      */
+     public void parse (String systemId)
+ 	throws IOException, SAXException
+     {
+ 	parse(new InputSource(systemId));
+     }
+ 
+ 
+     /**
+      * Parse an XML document.
+      *
+      * @param input An input source for the document.
+      * @exception java.io.IOException If there is a problem reading
+      *            the raw content of the document.
+      * @exception SAXException If there is a problem
+      *            processing the document.
+      * @see #parse(java.lang.String)
+      * @see org.xml.sax.Parser#parse(org.xml.sax.InputSource)
+      */
+     public void parse (InputSource input)
+ 	throws IOException, SAXException
+     {
+ 	if (parsing) {
+ 	    throw new SAXException("Parser is already in use");
+ 	}
+ 	setupParser();
+ 	parsing = true;
+ 	try {
+ 	    parser.parse(input);
+ 	} finally {
+ 	    parsing = false;
+ 	}
+ 	parsing = false;
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.DocumentHandler.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Adapter implementation method; do not call.
+      * Adapt a SAX1 document locator event.
+      *
+      * @param locator A document locator.
+      * @see org.xml.sax.ContentHandler#setDocumentLocator
+      */
+     public void setDocumentLocator (Locator locator)
+     {
+ 	this.locator = locator;
+ 	if (contentHandler != null) {
+ 	    contentHandler.setDocumentLocator(locator);
+ 	}
+     }
+ 
+ 
+     /**
+      * Adapter implementation method; do not call.
+      * Adapt a SAX1 start document event.
+      *
+      * @exception SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.DocumentHandler#startDocument
+      */
+     public void startDocument ()
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.startDocument();
+ 	}
+     }
+ 
+ 
+     /**
+      * Adapter implementation method; do not call.
+      * Adapt a SAX1 end document event.
+      *
+      * @exception SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.DocumentHandler#endDocument
+      */
+     public void endDocument ()
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.endDocument();
+ 	}
+     }
+ 
+ 
+     /**
+      * Adapter implementation method; do not call.
+      * Adapt a SAX1 startElement event.
+      *
+      * <p>If necessary, perform Namespace processing.</p>
+      *
+      * @param qName The qualified (prefixed) name.
+      * @param qAtts The XML attribute list (with qnames).
+      * @exception SAXException The client may raise a
+      *            processing exception.
+      */
+     public void startElement (String qName, AttributeList qAtts)
+ 	throws SAXException
+     {
+ 				// These are exceptions from the
+ 				// first pass; they should be
+ 				// ignored if there's a second pass,
+ 				// but reported otherwise.
+ 	Vector exceptions = null;
+ 
+ 				// If we're not doing Namespace
+ 				// processing, dispatch this quickly.
+ 	if (!namespaces) {
+ 	    if (contentHandler != null) {
+ 		attAdapter.setAttributeList(qAtts);
+ 		contentHandler.startElement("", "", qName.intern(),
+ 					    attAdapter);
+ 	    }
+ 	    return;
+ 	}
+ 
+ 
+ 				// OK, we're doing Namespace processing.
+ 	nsSupport.pushContext();
+ 	int length = qAtts.getLength();
+ 	
+ 				// First pass:  handle NS decls
+ 	for (int i = 0; i < length; i++) {
+ 	    String attQName = qAtts.getName(i);
+ 
+ 	    if (!attQName.startsWith("xmlns"))
+ 		continue;
+ 				// Could be a declaration...
+ 	    String prefix;
+ 	    int n = attQName.indexOf(':');
+ 
+ 	    			// xmlns=...
+ 	    if (n == -1 && attQName.length () == 5) {
+ 		prefix = "";
+ 	    } else if (n != 5) {
+ 		// XML namespaces spec doesn't discuss "xmlnsf:oo"
+ 		// (and similarly named) attributes ... at most, warn
+ 		continue;
+ 	    } else 		// xmlns:foo=...
+ 		prefix = attQName.substring(n+1);
+ 
+ 	    String value = qAtts.getValue(i);
+ 	    if (!nsSupport.declarePrefix(prefix, value)) {
+ 		reportError("Illegal Namespace prefix: " + prefix);
+ 		continue;
+ 	    }
+ 	    if (contentHandler != null)
+ 		contentHandler.startPrefixMapping(prefix, value);
+ 	}
+ 	
+ 				// Second pass: copy all relevant
+ 				// attributes into the SAX2 AttributeList
+ 				// using updated prefix bindings
+ 	atts.clear();
+ 	for (int i = 0; i < length; i++) {
+ 	    String attQName = qAtts.getName(i);
+ 	    String type = qAtts.getType(i);
+ 	    String value = qAtts.getValue(i);
+ 
+ 				// Declaration?
+ 	    if (attQName.startsWith("xmlns")) {
+ 		String prefix;
+ 		int n = attQName.indexOf(':');
+ 
+ 		if (n == -1 && attQName.length () == 5) {
+ 		    prefix = "";
+ 		} else if (n != 5) {
+ 		    // XML namespaces spec doesn't discuss "xmlnsf:oo"
+ 		    // (and similarly named) attributes ... ignore
+ 		    prefix = null;
+ 		} else {
+ 		    prefix = attQName.substring(6);
+ 		}
+ 				// Yes, decl:  report or prune
+ 		if (prefix != null) {
+ 		    if (prefixes) {
+ 			if (uris)
+ 			    // note funky case:  localname can be null
+ 			    // when declaring the default prefix, and
+ 			    // yet the uri isn't null.
+ 			    atts.addAttribute (nsSupport.XMLNS, prefix,
+ 				    attQName.intern(), type, value);
+ 			else
+ 			    atts.addAttribute ("", "",
+ 				    attQName.intern(), type, value);
+ 		    }
+ 		    continue;
+ 		}
+ 	    } 
+ 
+ 				// Not a declaration -- report
+ 	    try {
+ 		String attName[] = processName(attQName, true, true);
+ 		atts.addAttribute(attName[0], attName[1], attName[2],
+ 				  type, value);
+ 	    } catch (SAXException e) {
+ 		if (exceptions == null)
+ 		    exceptions = new Vector();
+ 		exceptions.addElement(e);
+ 		atts.addAttribute("", attQName, attQName, type, value);
+ 	    }
+ 	}
+ 	
+ 	// now handle the deferred exception reports
+ 	if (exceptions != null && errorHandler != null) {
+ 	    for (int i = 0; i < exceptions.size(); i++)
+ 		errorHandler.error((SAXParseException)
+ 				(exceptions.elementAt(i)));
+ 	}
+ 
+ 				// OK, finally report the event.
+ 	if (contentHandler != null) {
+ 	    String name[] = processName(qName, false, false);
+ 	    contentHandler.startElement(name[0], name[1], name[2], atts);
+ 	}
+     }
+ 
+ 
+     /**
+      * Adapter implementation method; do not call.
+      * Adapt a SAX1 end element event.
+      *
+      * @param qName The qualified (prefixed) name.
+      * @exception SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.DocumentHandler#endElement
+      */
+     public void endElement (String qName)
+ 	throws SAXException
+     {
+ 				// If we're not doing Namespace
+ 				// processing, dispatch this quickly.
+ 	if (!namespaces) {
+ 	    if (contentHandler != null) {
+ 		contentHandler.endElement("", "", qName.intern());
+ 	    }
+ 	    return;
+ 	}
+ 
+ 				// Split the name.
+ 	String names[] = processName(qName, false, false);
+ 	if (contentHandler != null) {
+ 	    contentHandler.endElement(names[0], names[1], names[2]);
+ 	    Enumeration prefixes = nsSupport.getDeclaredPrefixes();
+ 	    while (prefixes.hasMoreElements()) {
+ 		String prefix = (String)prefixes.nextElement();
+ 		contentHandler.endPrefixMapping(prefix);
+ 	    }
+ 	}
+ 	nsSupport.popContext();
+     }
+ 
+ 
+     /**
+      * Adapter implementation method; do not call.
+      * Adapt a SAX1 characters event.
+      *
+      * @param ch An array of characters.
+      * @param start The starting position in the array.
+      * @param length The number of characters to use.
+      * @exception SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.DocumentHandler#characters
+      */
+     public void characters (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.characters(ch, start, length);
+ 	}
+     }
+ 
+ 
+     /**
+      * Adapter implementation method; do not call.
+      * Adapt a SAX1 ignorable whitespace event.
+      *
+      * @param ch An array of characters.
+      * @param start The starting position in the array.
+      * @param length The number of characters to use.
+      * @exception SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.DocumentHandler#ignorableWhitespace
+      */
+     public void ignorableWhitespace (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.ignorableWhitespace(ch, start, length);
+ 	}
+     }
+ 
+ 
+     /**
+      * Adapter implementation method; do not call.
+      * Adapt a SAX1 processing instruction event.
+      *
+      * @param target The processing instruction target.
+      * @param data The remainder of the processing instruction
+      * @exception SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.DocumentHandler#processingInstruction
+      */
+     public void processingInstruction (String target, String data)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.processingInstruction(target, data);
+ 	}
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal utility methods.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Initialize the parser before each run.
+      */
+     private void setupParser ()
+     {
+ 	// catch an illegal "nonsense" state.
+ 	if (!prefixes && !namespaces)
+ 	    throw new IllegalStateException ();
+ 
+ 	nsSupport.reset();
+ 	if (uris)
+ 	    nsSupport.setNamespaceDeclUris (true);
+ 
+ 	if (entityResolver != null) {
+ 	    parser.setEntityResolver(entityResolver);
+ 	}
+ 	if (dtdHandler != null) {
+ 	    parser.setDTDHandler(dtdHandler);
+ 	}
+ 	if (errorHandler != null) {
+ 	    parser.setErrorHandler(errorHandler);
+ 	}
+ 	parser.setDocumentHandler(this);
+ 	locator = null;
+     }
+ 
+ 
+     /**
+      * Process a qualified (prefixed) name.
+      *
+      * <p>If the name has an undeclared prefix, use only the qname
+      * and make an ErrorHandler.error callback in case the app is
+      * interested.</p>
+      *
+      * @param qName The qualified (prefixed) name.
+      * @param isAttribute true if this is an attribute name.
+      * @return The name split into three parts.
+      * @exception SAXException The client may throw
+      *            an exception if there is an error callback.
+      */
+     private String [] processName (String qName, boolean isAttribute,
+ 				   boolean useException)
+ 	throws SAXException
+     {
+ 	String parts[] = nsSupport.processName(qName, nameParts,
+ 					       isAttribute);
+ 	if (parts == null) {
+ 	    if (useException)
+ 		throw makeException("Undeclared prefix: " + qName);
+ 	    reportError("Undeclared prefix: " + qName);
+ 	    parts = new String[3];
+ 	    parts[0] = parts[1] = "";
+ 	    parts[2] = qName.intern();
+ 	}
+ 	return parts;
+     }
+ 
+ 
+     /**
+      * Report a non-fatal error.
+      *
+      * @param message The error message.
+      * @exception SAXException The client may throw
+      *            an exception.
+      */
+     void reportError (String message)
+ 	throws SAXException
+     {
+ 	if (errorHandler != null)
+ 	    errorHandler.error(makeException(message));
+     }
+ 
+     
+     /**
+      * Construct an exception for the current context.
+      *
+      * @param message The error message.
+      */
+     private SAXParseException makeException (String message)
+     {
+ 	if (locator != null) {
+ 	    return new SAXParseException(message, locator);
+ 	} else {
+ 	    return new SAXParseException(message, null, null, -1, -1);
+ 	}
+     }
+ 
+ 
+     /**
+      * Throw an exception if we are parsing.
+      *
+      * <p>Use this method to detect illegal feature or
+      * property changes.</p>
+      *
+      * @param type The type of thing (feature or property).
+      * @param name The feature or property name.
+      * @exception SAXNotSupportedException If a
+      *            document is currently being parsed.
+      */
+     private void checkNotParsing (String type, String name)
+ 	throws SAXNotSupportedException
+     {
+ 	if (parsing) {
+ 	    throw new SAXNotSupportedException("Cannot change " +
+ 					       type + ' ' +
+ 					       name + " while parsing");
+ 					       
+ 	}
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal state.
+     ////////////////////////////////////////////////////////////////////
+ 
+     private NamespaceSupport nsSupport;
+     private AttributeListAdapter attAdapter;
+ 
+     private boolean parsing = false;
+     private String nameParts[] = new String[3];
+ 
+     private Parser parser = null;
+ 
+     private AttributesImpl atts = null;
+ 
+ 				// Features
+     private boolean namespaces = true;
+     private boolean prefixes = false;
+     private boolean uris = false;
+ 
+ 				// Properties
+ 
+ 				// Handlers
+     Locator locator;
+ 
+     EntityResolver entityResolver = null;
+     DTDHandler dtdHandler = null;
+     ContentHandler contentHandler = null;
+     ErrorHandler errorHandler = null;
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Inner class to wrap an AttributeList when not doing NS proc.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Adapt a SAX1 AttributeList as a SAX2 Attributes object.
+      *
+      * <p>This class is in the Public Domain, and comes with NO
+      * WARRANTY of any kind.</p>
+      *
+      * <p>This wrapper class is used only when Namespace support
+      * is disabled -- it provides pretty much a direct mapping
+      * from SAX1 to SAX2, except that names and types are 
+      * interned whenever requested.</p>
+      */
+     final class AttributeListAdapter implements Attributes
+     {
+ 
+ 	/**
+ 	 * Construct a new adapter.
+ 	 */
+ 	AttributeListAdapter ()
+ 	{
+ 	}
+ 
+ 
+ 	/**
+ 	 * Set the embedded AttributeList.
+ 	 *
+ 	 * <p>This method must be invoked before any of the others
+ 	 * can be used.</p>
+ 	 *
+ 	 * @param The SAX1 attribute list (with qnames).
+ 	 */
+ 	void setAttributeList (AttributeList qAtts)
+ 	{
+ 	    this.qAtts = qAtts;
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the length of the attribute list.
+ 	 *
+ 	 * @return The number of attributes in the list.
+ 	 * @see org.xml.sax.Attributes#getLength
+ 	 */
+ 	public int getLength ()
+ 	{
+ 	    return qAtts.getLength();
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the Namespace URI of the specified attribute.
+ 	 *
+ 	 * @param The attribute's index.
+ 	 * @return Always the empty string.
+ 	 * @see org.xml.sax.Attributes#getURI
+ 	 */
+ 	public String getURI (int i)
+ 	{
+ 	    return "";
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the local name of the specified attribute.
+ 	 *
+ 	 * @param The attribute's index.
+ 	 * @return Always the empty string.
+ 	 * @see org.xml.sax.Attributes#getLocalName
+ 	 */
+ 	public String getLocalName (int i)
+ 	{
+ 	    return "";
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the qualified (prefixed) name of the specified attribute.
+ 	 *
+ 	 * @param The attribute's index.
+ 	 * @return The attribute's qualified name, internalized.
+ 	 */
+ 	public String getQName (int i)
+ 	{
+ 	    return qAtts.getName(i).intern();
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the type of the specified attribute.
+ 	 *
+ 	 * @param The attribute's index.
+ 	 * @return The attribute's type as an internalized string.
+ 	 */
+ 	public String getType (int i)
+ 	{
+ 	    return qAtts.getType(i).intern();
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the value of the specified attribute.
+ 	 *
+ 	 * @param The attribute's index.
+ 	 * @return The attribute's value.
+ 	 */
+ 	public String getValue (int i)
+ 	{
+ 	    return qAtts.getValue(i);
+ 	}
+ 
+ 
+ 	/**
+ 	 * Look up an attribute index by Namespace name.
+ 	 *
+ 	 * @param uri The Namespace URI or the empty string.
+ 	 * @param localName The local name.
+ 	 * @return The attributes index, or -1 if none was found.
+ 	 * @see org.xml.sax.Attributes#getIndex(java.lang.String,java.lang.String)
+ 	 */
+ 	public int getIndex (String uri, String localName)
+ 	{
+ 	    return -1;
+ 	}
+ 
+ 
+ 	/**
+ 	 * Look up an attribute index by qualified (prefixed) name.
+ 	 *
+ 	 * @param qName The qualified name.
+ 	 * @return The attributes index, or -1 if none was found.
+ 	 * @see org.xml.sax.Attributes#getIndex(java.lang.String)
+ 	 */
+ 	public int getIndex (String qName)
+ 	{
+ 	    int max = atts.getLength();
+ 	    for (int i = 0; i < max; i++) {
+ 		if (qAtts.getName(i).equals(qName)) {
+ 		    return i;
+ 		}
+ 	    }
+ 	    return -1;
+ 	}
+ 
+ 
+ 	/**
+ 	 * Look up the type of an attribute by Namespace name.
+ 	 *
+ 	 * @param uri The Namespace URI
+ 	 * @param localName The local name.
+ 	 * @return The attribute's type as an internalized string.
+ 	 */
+ 	public String getType (String uri, String localName)
+ 	{
+ 	    return null;
+ 	}
+ 
+ 
+ 	/**
+ 	 * Look up the type of an attribute by qualified (prefixed) name.
+ 	 *
+ 	 * @param qName The qualified name.
+ 	 * @return The attribute's type as an internalized string.
+ 	 */
+ 	public String getType (String qName)
+ 	{
+ 	    return qAtts.getType(qName).intern();
+ 	}
+ 
+ 
+ 	/**
+ 	 * Look up the value of an attribute by Namespace name.
+ 	 *
+ 	 * @param uri The Namespace URI
+ 	 * @param localName The local name.
+ 	 * @return The attribute's value.
+ 	 */
+ 	public String getValue (String uri, String localName)
+ 	{
+ 	    return null;
+ 	}
+ 
+ 
+ 	/**
+ 	 * Look up the value of an attribute by qualified (prefixed) name.
+ 	 *
+ 	 * @param qName The qualified name.
+ 	 * @return The attribute's value.
+ 	 */
+ 	public String getValue (String qName)
+ 	{
+ 	    return qAtts.getValue(qName);
+ 	}
+ 
+ 	private AttributeList qAtts;
+     }
+ }
+ 
+ // end of ParserAdapter.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/ParserFactory.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/ParserFactory.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/ParserFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/ParserFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,129 ----
+ // SAX parser factory.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+ // $Id: ParserFactory.java,v 1.11 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import java.lang.ClassNotFoundException;
+ import java.lang.IllegalAccessException;
+ import java.lang.InstantiationException;
+ import java.lang.SecurityException;
+ import java.lang.ClassCastException;
+ 
+ import org.xml.sax.Parser;
+ 
+ 
+ /**
+  * Java-specific class for dynamically loading SAX parsers.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p><strong>Note:</strong> This class is designed to work with the now-deprecated
+  * SAX1 {@link org.xml.sax.Parser Parser} class.  SAX2 applications should use
+  * {@link org.xml.sax.helpers.XMLReaderFactory XMLReaderFactory} instead.</p>
+  *
+  * <p>ParserFactory is not part of the platform-independent definition
+  * of SAX; it is an additional convenience class designed
+  * specifically for Java XML application writers.  SAX applications
+  * can use the static methods in this class to allocate a SAX parser
+  * dynamically at run-time based either on the value of the
+  * `org.xml.sax.parser' system property or on a string containing the class
+  * name.</p>
+  *
+  * <p>Note that the application still requires an XML parser that
+  * implements SAX1.</p>
+  *
+  * @deprecated This class works with the deprecated
+  *             {@link org.xml.sax.Parser Parser}
+  *             interface.
+  * @since SAX 1.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  */
+ public class ParserFactory {
+     
+     
+     /**
+      * Private null constructor.
+      */
+     private ParserFactory ()
+     {
+     }
+     
+     
+     /**
+      * Create a new SAX parser using the `org.xml.sax.parser' system property.
+      *
+      * <p>The named class must exist and must implement the
+      * {@link org.xml.sax.Parser Parser} interface.</p>
+      *
+      * @exception java.lang.NullPointerException There is no value
+      *            for the `org.xml.sax.parser' system property.
+      * @exception java.lang.ClassNotFoundException The SAX parser
+      *            class was not found (check your CLASSPATH).
+      * @exception IllegalAccessException The SAX parser class was
+      *            found, but you do not have permission to load
+      *            it.
+      * @exception InstantiationException The SAX parser class was
+      *            found but could not be instantiated.
+      * @exception java.lang.ClassCastException The SAX parser class
+      *            was found and instantiated, but does not implement
+      *            org.xml.sax.Parser.
+      * @see #makeParser(java.lang.String)
+      * @see org.xml.sax.Parser
+      */
+     public static Parser makeParser ()
+ 	throws ClassNotFoundException,
+ 	IllegalAccessException, 
+ 	InstantiationException,
+ 	NullPointerException,
+ 	ClassCastException
+     {
+ 	String className = System.getProperty("org.xml.sax.parser");
+ 	if (className == null) {
+ 	    throw new NullPointerException("No value for sax.parser property");
+ 	} else {
+ 	    return makeParser(className);
+ 	}
+     }
+     
+     
+     /**
+      * Create a new SAX parser object using the class name provided.
+      *
+      * <p>The named class must exist and must implement the
+      * {@link org.xml.sax.Parser Parser} interface.</p>
+      *
+      * @param className A string containing the name of the
+      *                  SAX parser class.
+      * @exception java.lang.ClassNotFoundException The SAX parser
+      *            class was not found (check your CLASSPATH).
+      * @exception IllegalAccessException The SAX parser class was
+      *            found, but you do not have permission to load
+      *            it.
+      * @exception InstantiationException The SAX parser class was
+      *            found but could not be instantiated.
+      * @exception java.lang.ClassCastException The SAX parser class
+      *            was found and instantiated, but does not implement
+      *            org.xml.sax.Parser.
+      * @see #makeParser()
+      * @see org.xml.sax.Parser
+      */
+     public static Parser makeParser (String className)
+ 	throws ClassNotFoundException,
+ 	IllegalAccessException, 
+ 	InstantiationException,
+ 	ClassCastException
+     {
+ 	return (Parser) NewInstance.newInstance (
+ 		NewInstance.getClassLoader (), className);
+     }
+     
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/XMLFilterImpl.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/XMLFilterImpl.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/XMLFilterImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/XMLFilterImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,713 ----
+ // XMLFilterImpl.java - base SAX2 filter implementation.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the Public Domain.
+ // $Id: XMLFilterImpl.java,v 1.12 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import java.io.IOException;
+ 
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.XMLFilter;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.Locator;
+ import org.xml.sax.Attributes;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.SAXNotSupportedException;
+ import org.xml.sax.SAXNotRecognizedException;
+ 
+ 
+ /**
+  * Base class for deriving an XML filter.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class is designed to sit between an {@link org.xml.sax.XMLReader
+  * XMLReader} and the client application's event handlers.  By default, it
+  * does nothing but pass requests up to the reader and events
+  * on to the handlers unmodified, but subclasses can override
+  * specific methods to modify the event stream or the configuration
+  * requests as they pass through.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.XMLFilter
+  * @see org.xml.sax.XMLReader
+  * @see org.xml.sax.EntityResolver
+  * @see org.xml.sax.DTDHandler
+  * @see org.xml.sax.ContentHandler
+  * @see org.xml.sax.ErrorHandler
+  */
+ public class XMLFilterImpl
+     implements XMLFilter, EntityResolver, DTDHandler, ContentHandler, ErrorHandler
+ {
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Constructors.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Construct an empty XML filter, with no parent.
+      *
+      * <p>This filter will have no parent: you must assign a parent
+      * before you start a parse or do any configuration with
+      * setFeature or setProperty, unless you use this as a pure event
+      * consumer rather than as an {@link XMLReader}.</p>
+      *
+      * @see org.xml.sax.XMLReader#setFeature
+      * @see org.xml.sax.XMLReader#setProperty
+      * @see #setParent
+      */
+     public XMLFilterImpl ()
+     {
+ 	super();
+     }
+ 
+ 
+     /**
+      * Construct an XML filter with the specified parent.
+      *
+      * @see #setParent
+      * @see #getParent
+      */
+     public XMLFilterImpl (XMLReader parent)
+     {
+         super();
+ 	setParent(parent);
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.XMLFilter.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Set the parent reader.
+      *
+      * <p>This is the {@link org.xml.sax.XMLReader XMLReader} from which 
+      * this filter will obtain its events and to which it will pass its 
+      * configuration requests.  The parent may itself be another filter.</p>
+      *
+      * <p>If there is no parent reader set, any attempt to parse
+      * or to set or get a feature or property will fail.</p>
+      *
+      * @param parent The parent XML reader.
+      * @see #getParent
+      */
+     public void setParent (XMLReader parent)
+     {
+ 	this.parent = parent;
+     }
+ 
+ 
+     /**
+      * Get the parent reader.
+      *
+      * @return The parent XML reader, or null if none is set.
+      * @see #setParent
+      */
+     public XMLReader getParent ()
+     {
+ 	return parent;
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.XMLReader.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Set the value of a feature.
+      *
+      * <p>This will always fail if the parent is null.</p>
+      *
+      * @param name The feature name.
+      * @param value The requested feature value.
+      * @exception org.xml.sax.SAXNotRecognizedException If the feature
+      *            value can't be assigned or retrieved from the parent.
+      * @exception org.xml.sax.SAXNotSupportedException When the
+      *            parent recognizes the feature name but 
+      *            cannot set the requested value.
+      */
+     public void setFeature (String name, boolean value)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	if (parent != null) {
+ 	    parent.setFeature(name, value);
+ 	} else {
+ 	    throw new SAXNotRecognizedException("Feature: " + name);
+ 	}
+     }
+ 
+ 
+     /**
+      * Look up the value of a feature.
+      *
+      * <p>This will always fail if the parent is null.</p>
+      *
+      * @param name The feature name.
+      * @return The current value of the feature.
+      * @exception org.xml.sax.SAXNotRecognizedException If the feature
+      *            value can't be assigned or retrieved from the parent.
+      * @exception org.xml.sax.SAXNotSupportedException When the
+      *            parent recognizes the feature name but 
+      *            cannot determine its value at this time.
+      */
+     public boolean getFeature (String name)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	if (parent != null) {
+ 	    return parent.getFeature(name);
+ 	} else {
+ 	    throw new SAXNotRecognizedException("Feature: " + name);
+ 	}
+     }
+ 
+ 
+     /**
+      * Set the value of a property.
+      *
+      * <p>This will always fail if the parent is null.</p>
+      *
+      * @param name The property name.
+      * @param value The requested property value.
+      * @exception org.xml.sax.SAXNotRecognizedException If the property
+      *            value can't be assigned or retrieved from the parent.
+      * @exception org.xml.sax.SAXNotSupportedException When the
+      *            parent recognizes the property name but 
+      *            cannot set the requested value.
+      */
+     public void setProperty (String name, Object value)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	if (parent != null) {
+ 	    parent.setProperty(name, value);
+ 	} else {
+ 	    throw new SAXNotRecognizedException("Property: " + name);
+ 	}
+     }
+ 
+ 
+     /**
+      * Look up the value of a property.
+      *
+      * @param name The property name.
+      * @return The current value of the property.
+      * @exception org.xml.sax.SAXNotRecognizedException If the property
+      *            value can't be assigned or retrieved from the parent.
+      * @exception org.xml.sax.SAXNotSupportedException When the
+      *            parent recognizes the property name but 
+      *            cannot determine its value at this time.
+      */
+     public Object getProperty (String name)
+ 	throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	if (parent != null) {
+ 	    return parent.getProperty(name);
+ 	} else {
+ 	    throw new SAXNotRecognizedException("Property: " + name);
+ 	}
+     }
+ 
+ 
+     /**
+      * Set the entity resolver.
+      *
+      * @param resolver The new entity resolver.
+      */
+     public void setEntityResolver (EntityResolver resolver)
+     {
+ 	entityResolver = resolver;
+     }
+ 
+ 
+     /**
+      * Get the current entity resolver.
+      *
+      * @return The current entity resolver, or null if none was set.
+      */
+     public EntityResolver getEntityResolver ()
+     {
+ 	return entityResolver;
+     }
+ 
+ 
+     /**
+      * Set the DTD event handler.
+      *
+      * @param handler the new DTD handler
+      */
+     public void setDTDHandler (DTDHandler handler)
+     {
+ 	dtdHandler = handler;
+     }
+ 
+ 
+     /**
+      * Get the current DTD event handler.
+      *
+      * @return The current DTD handler, or null if none was set.
+      */
+     public DTDHandler getDTDHandler ()
+     {
+ 	return dtdHandler;
+     }
+ 
+ 
+     /**
+      * Set the content event handler.
+      *
+      * @param handler the new content handler
+      */
+     public void setContentHandler (ContentHandler handler)
+     {
+ 	contentHandler = handler;
+     }
+ 
+ 
+     /**
+      * Get the content event handler.
+      *
+      * @return The current content handler, or null if none was set.
+      */
+     public ContentHandler getContentHandler ()
+     {
+ 	return contentHandler;
+     }
+ 
+ 
+     /**
+      * Set the error event handler.
+      *
+      * @param handler the new error handler
+      */
+     public void setErrorHandler (ErrorHandler handler)
+     {
+ 	errorHandler = handler;
+     }
+ 
+ 
+     /**
+      * Get the current error event handler.
+      *
+      * @return The current error handler, or null if none was set.
+      */
+     public ErrorHandler getErrorHandler ()
+     {
+ 	return errorHandler;
+     }
+ 
+ 
+     /**
+      * Parse a document.
+      *
+      * @param input The input source for the document entity.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @exception java.io.IOException An IO exception from the parser,
+      *            possibly from a byte stream or character stream
+      *            supplied by the application.
+      */
+     public void parse (InputSource input)
+ 	throws SAXException, IOException
+     {
+ 	setupParse();
+ 	parent.parse(input);
+     }
+ 
+ 
+     /**
+      * Parse a document.
+      *
+      * @param systemId The system identifier as a fully-qualified URI.
+      * @exception org.xml.sax.SAXException Any SAX exception, possibly
+      *            wrapping another exception.
+      * @exception java.io.IOException An IO exception from the parser,
+      *            possibly from a byte stream or character stream
+      *            supplied by the application.
+      */
+     public void parse (String systemId)
+ 	throws SAXException, IOException
+     {
+ 	parse(new InputSource(systemId));
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.EntityResolver.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Filter an external entity resolution.
+      *
+      * @param publicId The entity's public identifier, or null.
+      * @param systemId The entity's system identifier.
+      * @return A new InputSource or null for the default.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      * @exception java.io.IOException The client may throw an
+      *            I/O-related exception while obtaining the
+      *            new InputSource.
+      */
+     public InputSource resolveEntity (String publicId, String systemId)
+ 	throws SAXException, IOException
+     {
+ 	if (entityResolver != null) {
+ 	    return entityResolver.resolveEntity(publicId, systemId);
+ 	} else {
+ 	    return null;
+ 	}
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.DTDHandler.
+     ////////////////////////////////////////////////////////////////////
+ 
+     
+     /**
+      * Filter a notation declaration event.
+      *
+      * @param name The notation name.
+      * @param publicId The notation's public identifier, or null.
+      * @param systemId The notation's system identifier, or null.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void notationDecl (String name, String publicId, String systemId)
+ 	throws SAXException
+     {
+ 	if (dtdHandler != null) {
+ 	    dtdHandler.notationDecl(name, publicId, systemId);
+ 	}
+     }
+ 
+     
+     /**
+      * Filter an unparsed entity declaration event.
+      *
+      * @param name The entity name.
+      * @param publicId The entity's public identifier, or null.
+      * @param systemId The entity's system identifier, or null.
+      * @param notationName The name of the associated notation.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void unparsedEntityDecl (String name, String publicId,
+ 				    String systemId, String notationName)
+ 	throws SAXException
+     {
+ 	if (dtdHandler != null) {
+ 	    dtdHandler.unparsedEntityDecl(name, publicId, systemId,
+ 					  notationName);
+ 	}
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.ContentHandler.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Filter a new document locator event.
+      *
+      * @param locator The document locator.
+      */
+     public void setDocumentLocator (Locator locator)
+     {
+ 	this.locator = locator;
+ 	if (contentHandler != null) {
+ 	    contentHandler.setDocumentLocator(locator);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter a start document event.
+      *
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void startDocument ()
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.startDocument();
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter an end document event.
+      *
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void endDocument ()
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.endDocument();
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter a start Namespace prefix mapping event.
+      *
+      * @param prefix The Namespace prefix.
+      * @param uri The Namespace URI.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void startPrefixMapping (String prefix, String uri)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.startPrefixMapping(prefix, uri);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter an end Namespace prefix mapping event.
+      *
+      * @param prefix The Namespace prefix.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void endPrefixMapping (String prefix)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.endPrefixMapping(prefix);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter a start element event.
+      *
+      * @param uri The element's Namespace URI, or the empty string.
+      * @param localName The element's local name, or the empty string.
+      * @param qName The element's qualified (prefixed) name, or the empty
+      *        string.
+      * @param atts The element's attributes.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void startElement (String uri, String localName, String qName,
+ 			      Attributes atts)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.startElement(uri, localName, qName, atts);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter an end element event.
+      *
+      * @param uri The element's Namespace URI, or the empty string.
+      * @param localName The element's local name, or the empty string.
+      * @param qName The element's qualified (prefixed) name, or the empty
+      *        string.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void endElement (String uri, String localName, String qName)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.endElement(uri, localName, qName);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter a character data event.
+      *
+      * @param ch An array of characters.
+      * @param start The starting position in the array.
+      * @param length The number of characters to use from the array.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void characters (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.characters(ch, start, length);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter an ignorable whitespace event.
+      *
+      * @param ch An array of characters.
+      * @param start The starting position in the array.
+      * @param length The number of characters to use from the array.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void ignorableWhitespace (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.ignorableWhitespace(ch, start, length);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter a processing instruction event.
+      *
+      * @param target The processing instruction target.
+      * @param data The text following the target.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void processingInstruction (String target, String data)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.processingInstruction(target, data);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter a skipped entity event.
+      *
+      * @param name The name of the skipped entity.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void skippedEntity (String name)
+ 	throws SAXException
+     {
+ 	if (contentHandler != null) {
+ 	    contentHandler.skippedEntity(name);
+ 	}
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.ErrorHandler.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Filter a warning event.
+      *
+      * @param e The warning as an exception.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void warning (SAXParseException e)
+ 	throws SAXException
+     {
+ 	if (errorHandler != null) {
+ 	    errorHandler.warning(e);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter an error event.
+      *
+      * @param e The error as an exception.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void error (SAXParseException e)
+ 	throws SAXException
+     {
+ 	if (errorHandler != null) {
+ 	    errorHandler.error(e);
+ 	}
+     }
+ 
+ 
+     /**
+      * Filter a fatal error event.
+      *
+      * @param e The error as an exception.
+      * @exception org.xml.sax.SAXException The client may throw
+      *            an exception during processing.
+      */
+     public void fatalError (SAXParseException e)
+ 	throws SAXException
+     {
+ 	if (errorHandler != null) {
+ 	    errorHandler.fatalError(e);
+ 	}
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal methods.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Set up before a parse.
+      *
+      * <p>Before every parse, check whether the parent is
+      * non-null, and re-register the filter for all of the 
+      * events.</p>
+      */
+     private void setupParse ()
+     {
+ 	if (parent == null) {
+ 	    throw new NullPointerException("No parent for filter");
+ 	}
+ 	parent.setEntityResolver(this);
+ 	parent.setDTDHandler(this);
+ 	parent.setContentHandler(this);
+ 	parent.setErrorHandler(this);
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal state.
+     ////////////////////////////////////////////////////////////////////
+ 
+     private XMLReader parent = null;
+     private Locator locator = null;
+     private EntityResolver entityResolver = null;
+     private DTDHandler dtdHandler = null;
+     private ContentHandler contentHandler = null;
+     private ErrorHandler errorHandler = null;
+ 
+ }
+ 
+ // end of XMLFilterImpl.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,538 ----
+ // XMLReaderAdapter.java - adapt an SAX2 XMLReader to a SAX1 Parser
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY!  This class is in the public domain.
+ // $Id: XMLReaderAdapter.java,v 1.1 2004/12/23 22:38:42 mark Exp $
+ 
+ package org.xml.sax.helpers;
+ 
+ import java.io.IOException;
+ import java.util.Locale;
+ 
+ import org.xml.sax.Parser;	// deprecated
+ import org.xml.sax.Locator;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.AttributeList; // deprecated
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.DocumentHandler; // deprecated
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ 
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.SAXNotSupportedException;
+ 
+ 
+ /**
+  * Adapt a SAX2 XMLReader as a SAX1 Parser.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class wraps a SAX2 {@link org.xml.sax.XMLReader XMLReader}
+  * and makes it act as a SAX1 {@link org.xml.sax.Parser Parser}.  The XMLReader 
+  * must support a true value for the 
+  * http://xml.org/sax/features/namespace-prefixes property or parsing will fail
+  * with a {@link org.xml.sax.SAXException SAXException}; if the XMLReader 
+  * supports a false value for the http://xml.org/sax/features/namespaces 
+  * property, that will also be used to improve efficiency.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson
+  * @version 2.0.1 (sax2r2)
+  * @see org.xml.sax.Parser
+  * @see org.xml.sax.XMLReader
+  */
+ public class XMLReaderAdapter implements Parser, ContentHandler
+ {
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Constructor.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Create a new adapter.
+      *
+      * <p>Use the "org.xml.sax.driver" property to locate the SAX2
+      * driver to embed.</p>
+      *
+      * @exception org.xml.sax.SAXException If the embedded driver
+      *            cannot be instantiated or if the
+      *            org.xml.sax.driver property is not specified.
+      */
+     public XMLReaderAdapter ()
+       throws SAXException
+     {
+ 	setup(XMLReaderFactory.createXMLReader());
+     }
+ 
+ 
+     /**
+      * Create a new adapter.
+      *
+      * <p>Create a new adapter, wrapped around a SAX2 XMLReader.
+      * The adapter will make the XMLReader act like a SAX1
+      * Parser.</p>
+      *
+      * @param xmlReader The SAX2 XMLReader to wrap.
+      * @exception java.lang.NullPointerException If the argument is null.
+      */
+     public XMLReaderAdapter (XMLReader xmlReader)
+     {
+ 	setup(xmlReader);
+     }
+ 
+ 
+ 
+     /**
+      * Internal setup.
+      *
+      * @param xmlReader The embedded XMLReader.
+      */
+     private void setup (XMLReader xmlReader)
+     {
+ 	if (xmlReader == null) {
+ 	    throw new NullPointerException("XMLReader must not be null");
+ 	}
+ 	this.xmlReader = xmlReader;
+ 	qAtts = new AttributesAdapter();
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.Parser.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Set the locale for error reporting.
+      *
+      * <p>This is not supported in SAX2, and will always throw
+      * an exception.</p>
+      *
+      * @param locale the locale for error reporting.
+      * @see org.xml.sax.Parser#setLocale
+      * @exception org.xml.sax.SAXException Thrown unless overridden.
+      */
+     public void setLocale (Locale locale)
+ 	throws SAXException
+     {
+ 	throw new SAXNotSupportedException("setLocale not supported");
+     }
+ 
+ 
+     /**
+      * Register the entity resolver.
+      *
+      * @param resolver The new resolver.
+      * @see org.xml.sax.Parser#setEntityResolver
+      */
+     public void setEntityResolver (EntityResolver resolver)
+     {
+ 	xmlReader.setEntityResolver(resolver);
+     }
+ 
+ 
+     /**
+      * Register the DTD event handler.
+      *
+      * @param handler The new DTD event handler.
+      * @see org.xml.sax.Parser#setDTDHandler
+      */
+     public void setDTDHandler (DTDHandler handler)
+     {
+ 	xmlReader.setDTDHandler(handler);
+     }
+ 
+ 
+     /**
+      * Register the SAX1 document event handler.
+      *
+      * <p>Note that the SAX1 document handler has no Namespace
+      * support.</p>
+      *
+      * @param handler The new SAX1 document event handler.
+      * @see org.xml.sax.Parser#setDocumentHandler
+      */
+     public void setDocumentHandler (DocumentHandler handler)
+     {
+ 	documentHandler = handler;
+     }
+ 
+ 
+     /**
+      * Register the error event handler.
+      *
+      * @param handler The new error event handler.
+      * @see org.xml.sax.Parser#setErrorHandler
+      */
+     public void setErrorHandler (ErrorHandler handler)
+     {
+ 	xmlReader.setErrorHandler(handler);
+     }
+ 
+ 
+     /**
+      * Parse the document.
+      *
+      * <p>This method will throw an exception if the embedded
+      * XMLReader does not support the 
+      * http://xml.org/sax/features/namespace-prefixes property.</p>
+      *
+      * @param systemId The absolute URL of the document.
+      * @exception java.io.IOException If there is a problem reading
+      *            the raw content of the document.
+      * @exception org.xml.sax.SAXException If there is a problem
+      *            processing the document.
+      * @see #parse(org.xml.sax.InputSource)
+      * @see org.xml.sax.Parser#parse(java.lang.String)
+      */
+     public void parse (String systemId)
+ 	throws IOException, SAXException
+     {
+ 	parse(new InputSource(systemId));
+     }
+ 
+ 
+     /**
+      * Parse the document.
+      *
+      * <p>This method will throw an exception if the embedded
+      * XMLReader does not support the 
+      * http://xml.org/sax/features/namespace-prefixes property.</p>
+      *
+      * @param input An input source for the document.
+      * @exception java.io.IOException If there is a problem reading
+      *            the raw content of the document.
+      * @exception org.xml.sax.SAXException If there is a problem
+      *            processing the document.
+      * @see #parse(java.lang.String)
+      * @see org.xml.sax.Parser#parse(org.xml.sax.InputSource)
+      */
+     public void parse (InputSource input)
+ 	throws IOException, SAXException
+     {
+ 	setupXMLReader();
+ 	xmlReader.parse(input);
+     }
+ 
+ 
+     /**
+      * Set up the XML reader.
+      */
+     private void setupXMLReader ()
+ 	throws SAXException
+     {
+ 	xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
+ 	try {
+ 	    xmlReader.setFeature("http://xml.org/sax/features/namespaces",
+ 	                         false);
+ 	} catch (SAXException e) {
+ 	    // NO OP: it's just extra information, and we can ignore it
+ 	}
+ 	xmlReader.setContentHandler(this);
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Implementation of org.xml.sax.ContentHandler.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Set a document locator.
+      *
+      * @param locator The document locator.
+      * @see org.xml.sax.ContentHandler#setDocumentLocator
+      */
+     public void setDocumentLocator (Locator locator)
+     {
+ 	if (documentHandler != null)
+ 	    documentHandler.setDocumentLocator(locator);
+     }
+ 
+ 
+     /**
+      * Start document event.
+      *
+      * @exception org.xml.sax.SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.ContentHandler#startDocument
+      */
+     public void startDocument ()
+ 	throws SAXException
+     {
+ 	if (documentHandler != null)
+ 	    documentHandler.startDocument();
+     }
+ 
+ 
+     /**
+      * End document event.
+      *
+      * @exception org.xml.sax.SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.ContentHandler#endDocument
+      */
+     public void endDocument ()
+ 	throws SAXException
+     {
+ 	if (documentHandler != null)
+ 	    documentHandler.endDocument();
+     }
+ 
+ 
+     /**
+      * Adapt a SAX2 start prefix mapping event.
+      *
+      * @param prefix The prefix being mapped.
+      * @param uri The Namespace URI being mapped to.
+      * @see org.xml.sax.ContentHandler#startPrefixMapping
+      */
+     public void startPrefixMapping (String prefix, String uri)
+     {
+     }
+ 
+ 
+     /**
+      * Adapt a SAX2 end prefix mapping event.
+      *
+      * @param prefix The prefix being mapped.
+      * @see org.xml.sax.ContentHandler#endPrefixMapping
+      */
+     public void endPrefixMapping (String prefix)
+     {
+     }
+ 
+ 
+     /**
+      * Adapt a SAX2 start element event.
+      *
+      * @param uri The Namespace URI.
+      * @param localName The Namespace local name.
+      * @param qName The qualified (prefixed) name.
+      * @param atts The SAX2 attributes.
+      * @exception org.xml.sax.SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.ContentHandler#endDocument
+      */
+     public void startElement (String uri, String localName,
+ 			      String qName, Attributes atts)
+ 	throws SAXException
+     {
+ 	if (documentHandler != null) {
+ 	    qAtts.setAttributes(atts);
+ 	    documentHandler.startElement(qName, qAtts);
+ 	}
+     }
+ 
+ 
+     /**
+      * Adapt a SAX2 end element event.
+      *
+      * @param uri The Namespace URI.
+      * @param localName The Namespace local name.
+      * @param qName The qualified (prefixed) name.
+      * @exception org.xml.sax.SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.ContentHandler#endElement
+      */
+     public void endElement (String uri, String localName,
+ 			    String qName)
+ 	throws SAXException
+     {
+ 	if (documentHandler != null)
+ 	    documentHandler.endElement(qName);
+     }
+ 
+ 
+     /**
+      * Adapt a SAX2 characters event.
+      *
+      * @param ch An array of characters.
+      * @param start The starting position in the array.
+      * @param length The number of characters to use.
+      * @exception org.xml.sax.SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.ContentHandler#characters
+      */
+     public void characters (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	if (documentHandler != null)
+ 	    documentHandler.characters(ch, start, length);
+     }
+ 
+ 
+     /**
+      * Adapt a SAX2 ignorable whitespace event.
+      *
+      * @param ch An array of characters.
+      * @param start The starting position in the array.
+      * @param length The number of characters to use.
+      * @exception org.xml.sax.SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.ContentHandler#ignorableWhitespace
+      */
+     public void ignorableWhitespace (char ch[], int start, int length)
+ 	throws SAXException
+     {
+ 	if (documentHandler != null)
+ 	    documentHandler.ignorableWhitespace(ch, start, length);
+     }
+ 
+ 
+     /**
+      * Adapt a SAX2 processing instruction event.
+      *
+      * @param target The processing instruction target.
+      * @param data The remainder of the processing instruction
+      * @exception org.xml.sax.SAXException The client may raise a
+      *            processing exception.
+      * @see org.xml.sax.ContentHandler#processingInstruction
+      */
+     public void processingInstruction (String target, String data)
+ 	throws SAXException
+     {
+ 	if (documentHandler != null)
+ 	    documentHandler.processingInstruction(target, data);
+     }
+ 
+ 
+     /**
+      * Adapt a SAX2 skipped entity event.
+      *
+      * @param name The name of the skipped entity.
+      * @see org.xml.sax.ContentHandler#skippedEntity
+      * @exception org.xml.sax.SAXException Throwable by subclasses.
+      */
+     public void skippedEntity (String name)
+ 	throws SAXException
+     {
+     }
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal state.
+     ////////////////////////////////////////////////////////////////////
+ 
+     XMLReader xmlReader;
+     DocumentHandler documentHandler;
+     AttributesAdapter qAtts;
+ 
+ 
+ 
+     ////////////////////////////////////////////////////////////////////
+     // Internal class.
+     ////////////////////////////////////////////////////////////////////
+ 
+ 
+     /**
+      * Internal class to wrap a SAX2 Attributes object for SAX1.
+      */
+     final class AttributesAdapter implements AttributeList
+     {
+ 	AttributesAdapter ()
+ 	{
+ 	}
+ 
+ 
+ 	/**
+ 	 * Set the embedded Attributes object.
+ 	 *
+ 	 * @param The embedded SAX2 Attributes.
+ 	 */ 
+ 	void setAttributes (Attributes attributes)
+ 	{
+ 	    this.attributes = attributes;
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the number of attributes.
+ 	 *
+ 	 * @return The length of the attribute list.
+ 	 * @see org.xml.sax.AttributeList#getLength
+ 	 */
+ 	public int getLength ()
+ 	{
+ 	    return attributes.getLength();
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the qualified (prefixed) name of an attribute by position.
+ 	 *
+ 	 * @return The qualified name.
+ 	 * @see org.xml.sax.AttributeList#getName
+ 	 */
+ 	public String getName (int i)
+ 	{
+ 	    return attributes.getQName(i);
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the type of an attribute by position.
+ 	 *
+ 	 * @return The type.
+ 	 * @see org.xml.sax.AttributeList#getType(int)
+ 	 */
+ 	public String getType (int i)
+ 	{
+ 	    return attributes.getType(i);
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the value of an attribute by position.
+ 	 *
+ 	 * @return The value.
+ 	 * @see org.xml.sax.AttributeList#getValue(int)
+ 	 */
+ 	public String getValue (int i)
+ 	{
+ 	    return attributes.getValue(i);
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the type of an attribute by qualified (prefixed) name.
+ 	 *
+ 	 * @return The type.
+ 	 * @see org.xml.sax.AttributeList#getType(java.lang.String)
+ 	 */
+ 	public String getType (String qName)
+ 	{
+ 	    return attributes.getType(qName);
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return the value of an attribute by qualified (prefixed) name.
+ 	 *
+ 	 * @return The value.
+ 	 * @see org.xml.sax.AttributeList#getValue(java.lang.String)
+ 	 */
+ 	public String getValue (String qName)
+ 	{
+ 	    return attributes.getValue(qName);
+ 	}
+ 
+ 	private Attributes attributes;
+     }
+ 
+ }
+ 
+ // end of XMLReaderAdapter.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/XMLReaderFactory.java gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/XMLReaderFactory.java
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/XMLReaderFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/XMLReaderFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,202 ----
+ // XMLReaderFactory.java - factory for creating a new reader.
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // and by David Brownell
+ // NO WARRANTY!  This class is in the Public Domain.
+ // $Id: XMLReaderFactory.java,v 1.14 2004/12/11 15:41:10 dog Exp $
+ 
+ package org.xml.sax.helpers;
+ import java.io.BufferedReader;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.SAXException;
+ 
+ 
+ /**
+  * Factory for creating an XML reader.
+  *
+  * <blockquote>
+  * <em>This module, both source code and documentation, is in the
+  * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
+  * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+  * for further information.
+  * </blockquote>
+  *
+  * <p>This class contains static methods for creating an XML reader
+  * from an explicit class name, or based on runtime defaults:</p>
+  *
+  * <pre>
+  * try {
+  *   XMLReader myReader = XMLReaderFactory.createXMLReader();
+  * } catch (SAXException e) {
+  *   System.err.println(e.getMessage());
+  * }
+  * </pre>
+  *
+  * <p><strong>Note to Distributions bundled with parsers:</strong>
+  * You should modify the implementation of the no-arguments
+  * <em>createXMLReader</em> to handle cases where the external
+  * configuration mechanisms aren't set up.  That method should do its
+  * best to return a parser when one is in the class path, even when
+  * nothing bound its class name to <code>org.xml.sax.driver</code> so
+  * those configuration mechanisms would see it.</p>
+  *
+  * @since SAX 2.0
+  * @author David Megginson, David Brownell
+  * @version 2.0.1 (sax2r2)
+  */
+ final public class XMLReaderFactory
+ {
+     /**
+      * Private constructor.
+      *
+      * <p>This constructor prevents the class from being instantiated.</p>
+      */
+     private XMLReaderFactory ()
+     {
+     }
+ 
+     private static final String property = "org.xml.sax.driver";
+ 
+     /**
+      * Attempt to create an XMLReader from system defaults.
+      * In environments which can support it, the name of the XMLReader
+      * class is determined by trying each these options in order, and
+      * using the first one which succeeds:</p> <ul>
+      *
+      * <li>If the system property <code>org.xml.sax.driver</code>
+      * has a value, that is used as an XMLReader class name. </li>
+      *
+      * <li>The JAR "Services API" is used to look for a class name
+      * in the <em>META-INF/services/org.xml.sax.driver</em> file in
+      * jarfiles available to the runtime.</li>
+      *
+      * <li> SAX parser distributions are strongly encouraged to provide
+      * a default XMLReader class name that will take effect only when
+      * previous options (on this list) are not successful.</li>
+      *
+      * <li>Finally, if {@link ParserFactory#makeParser()} can
+      * return a system default SAX1 parser, that parser is wrapped in
+      * a {@link ParserAdapter}.  (This is a migration aid for SAX1
+      * environments, where the <code>org.xml.sax.parser</code> system
+      * property will often be usable.) </li>
+      *
+      * </ul>
+      *
+      * <p> In environments such as small embedded systems, which can not
+      * support that flexibility, other mechanisms to determine the default
+      * may be used. </p>
+      *
+      * <p>Note that many Java environments allow system properties to be
+      * initialized on a command line.  This means that <em>in most cases</em>
+      * setting a good value for that property ensures that calls to this
+      * method will succeed, except when security policies intervene.
+      * This will also maximize application portability to older SAX
+      * environments, with less robust implementations of this method.
+      * </p>
+      *
+      * @return A new XMLReader.
+      * @exception org.xml.sax.SAXException If no default XMLReader class
+      *            can be identified and instantiated.
+      * @see #createXMLReader(java.lang.String)
+      */
+     public static XMLReader createXMLReader ()
+ 	throws SAXException
+     {
+ 	String		className = null;
+ 	ClassLoader	loader = NewInstance.getClassLoader ();
+ 	
+ 	// 1. try the JVM-instance-wide system property
+ 	try { className = System.getProperty (property); }
+ 	catch (RuntimeException e) { /* normally fails for applets */ }
+ 
+ 	// 2. if that fails, try META-INF/services/
+ 	if (className == null) {
+ 	    try {
+ 		String		service = "META-INF/services/" + property;
+ 		InputStream	in;
+ 		BufferedReader	reader;
+ 
+ 		if (loader == null)
+ 		    in = ClassLoader.getSystemResourceAsStream (service);
+ 		else
+ 		    in = loader.getResourceAsStream (service);
+ 
+ 		if (in != null) {
+ 		    reader = new BufferedReader (
+ 			    new InputStreamReader (in, "UTF8"));
+ 		    className = reader.readLine ();
+ 		    in.close ();
+ 		}
+ 	    } catch (Exception e) {
+ 	    }
+ 	}
+ 
+ 	// 3. Distro-specific fallback
+ 	if (className == null) {
+ // BEGIN DISTRIBUTION-SPECIFIC
+ 
+ 	    // EXAMPLE:
+ 	    // className = "com.example.sax.XmlReader";
+ 	    // or a $JAVA_HOME/jre/lib/*properties setting...
+ 
+ // END DISTRIBUTION-SPECIFIC
+ 	}
+ 	
+ 	// do we know the XMLReader implementation class yet?
+ 	if (className != null)
+ 	    return loadClass (loader, className);
+ 
+ 	// 4. panic -- adapt any SAX1 parser
+ 	try {
+ 	    return new ParserAdapter (ParserFactory.makeParser ());
+ 	} catch (Exception e) {
+ 	    throw new SAXException ("Can't create default XMLReader; "
+ 		    + "is system property org.xml.sax.driver set?");
+ 	}
+     }
+ 
+ 
+     /**
+      * Attempt to create an XML reader from a class name.
+      *
+      * <p>Given a class name, this method attempts to load
+      * and instantiate the class as an XML reader.</p>
+      *
+      * <p>Note that this method will not be usable in environments where
+      * the caller (perhaps an applet) is not permitted to load classes
+      * dynamically.</p>
+      *
+      * @return A new XML reader.
+      * @exception org.xml.sax.SAXException If the class cannot be
+      *            loaded, instantiated, and cast to XMLReader.
+      * @see #createXMLReader()
+      */
+     public static XMLReader createXMLReader (String className)
+ 	throws SAXException
+     {
+ 	return loadClass (NewInstance.getClassLoader (), className);
+     }
+ 
+     private static XMLReader loadClass (ClassLoader loader, String className)
+     throws SAXException
+     {
+ 	try {
+ 	    return (XMLReader) NewInstance.newInstance (loader, className);
+ 	} catch (ClassNotFoundException e1) {
+ 	    throw new SAXException("SAX2 driver class " + className +
+ 				   " not found", e1);
+ 	} catch (IllegalAccessException e2) {
+ 	    throw new SAXException("SAX2 driver class " + className +
+ 				   " found but cannot be loaded", e2);
+ 	} catch (InstantiationException e3) {
+ 	    throw new SAXException("SAX2 driver class " + className +
+ 	   " loaded but cannot be instantiated (no empty public constructor?)",
+ 				   e3);
+ 	} catch (ClassCastException e4) {
+ 	    throw new SAXException("SAX2 driver class " + className +
+ 				   " does not implement XMLReader", e4);
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/package.html gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/package.html
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/helpers/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/helpers/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,11 ----
+ <HTML><HEAD>
+ <!-- $Id: package.html,v 1.12 2004/12/11 15:41:10 dog Exp $ -->
+ </HEAD><BODY>
+ 
+ <p>This package contains "helper" classes, including
+ support for bootstrapping SAX-based applications.
+ 
+ <p>See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+ for more information about SAX.</p>
+ 
+ </BODY></HTML>
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/package.html gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/package.html
*** gcc-4.0.2/libjava/classpath/external/sax/org/xml/sax/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/sax/org/xml/sax/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,297 ----
+ <html><head>
+ <!-- $Id: package.html,v 1.14 2004/12/11 15:41:10 dog Exp $ -->
+ </head><body>
+ 
+ <p> This package provides the core SAX APIs.
+ Some SAX1 APIs are deprecated to encourage integration of
+ namespace-awareness into designs of new applications
+ and into maintenance of existing infrastructure. </p>
+ 
+ <p>See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
+ for more information about SAX.</p>
+ 
+ 
+ <h2> SAX2 Standard Feature Flags </h2>
+ 
+ <p> One of the essential characteristics of SAX2 is that it added
+ feature flags which can be used to examine and perhaps modify
+ parser modes, in particular modes such as validation.
+ Since features are identified by (absolute) URIs, anyone
+ can define such features.   
+ Currently defined standard feature URIs have the prefix
+ <code>http://xml.org/sax/features/</code> before an identifier such as
+ <code>validation</code>.  Turn features on or off using
+ <em>setFeature</em>.  Those standard identifiers are: </p>
+ 
+ 
+ <table border="1" cellpadding="3" cellspacing="0" width="100%">
+     <tr align="center" bgcolor="#ccccff">
+ 	<th>Feature ID</th>
+ 	<th>Access</th>
+ 	<th>Default</th>
+ 	<th>Description</th>
+ 	</tr>
+ 
+     <tr>
+ 	<td>external-general-entities</td>
+ 	<td><em>read/write</em></td>
+ 	<td><em>unspecified</em></td>
+ 	<td> Reports whether this parser processes external
+ 	    general entities; always true if validating.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>external-parameter-entities</td>
+ 	<td><em>read/write</em></td>
+ 	<td><em>unspecified</em></td>
+ 	<td> Reports whether this parser processes external
+ 	    parameter entities; always true if validating.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>is-standalone</td>
+ 	<td>(parsing) <em>read-only</em>, (not parsing) <em>none</em></td>
+ 	<td>not applicable</td>
+ 	<td> May be examined only during a parse, after the
+ 	    <em>startDocument()</em> callback has been completed; read-only.
+ 	    The value is true if the document specified standalone="yes" in 
+ 	    its XML declaration, and otherwise is false.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>lexical-handler/parameter-entities</td>
+ 	<td><em>read/write</em></td>
+ 	<td><em>unspecified</em></td>
+ 	<td> A value of "true" indicates that the LexicalHandler will report
+ 	    the beginning and end of parameter entities.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>namespaces</td>
+ 	<td><em>read/write</em></td>
+ 	<td>true</td>
+ 	<td> A value of "true" indicates namespace URIs and unprefixed local names
+ 	    for element and attribute names will be available.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>namespace-prefixes</td>
+ 	<td><em>read/write</em></td>
+ 	<td>false</td>
+ 	<td> A value of "true" indicates that XML qualified names (with prefixes) and
+ 	    attributes (including <em>xmlns*</em> attributes) will be available.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>resolve-dtd-uris</td>
+ 	<td><em>read/write</em></td>
+ 	<td><em>true</em></td>
+ 	<td> A value of "true" indicates that system IDs in declarations will
+ 	    be absolutized (relative to their base URIs) before reporting.
+ 	    (That is the default behavior for all SAX2 XML parsers.)
+ 	    A value of "false" indicates those IDs will not be absolutized;
+ 	    parsers will provide the base URI from
+ 	    <em>Locator.getSystemId()</em>.
+ 	    This applies to system IDs passed in <ul>
+ 		<li><em>DTDHandler.notationDecl()</em>,
+ 		<li><em>DTDHandler.unparsedEntityDecl()</em>, and
+ 		<li><em>DeclHandler.externalEntityDecl()</em>.
+ 	    </ul>
+ 	    It does not apply to <em>EntityResolver.resolveEntity()</em>,
+ 	    which is not used to report declarations, or to
+ 	    <em>LexicalHandler.startDTD()</em>, which already provides
+ 	    the non-absolutized URI.
+ 	    </td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>string-interning</td>
+ 	<td><em>read/write</em></td>
+ 	<td><em>unspecified</em></td>
+ 	<td> Has a value of "true" if all XML names (for elements, prefixes,
+ 	    attributes, entities, notations, and local names),
+ 	    as well as Namespace URIs, will have been interned
+ 	    using <em>java.lang.String.intern</em>. This supports fast
+ 	    testing of equality/inequality against string constants,
+ 	    rather than forcing slower calls to <em>String.equals()</em>.
+ 	    </td>
+ 	</tr>
+ 
+     <tr>
+     <td>unicode-normalization-checking</td>
+     <td><em>read/write</em></td>
+     <td><em>false</em></td>
+     <td> Controls whether the parser reports Unicode normalization 
+         errors as described in section 2.13 and Appendix B of the 
+         XML 1.1 Recommendation. If true, Unicode normalization
+         errors are reported using the ErrorHandler.error() callback.
+         Such errors are not fatal in themselves (though, obviously,
+         other Unicode-related encoding errors may be).
+ 		</td>
+     </tr>
+     
+     <tr>
+ 	<td>use-attributes2</td>
+ 	<td><em>read-only</em></td>
+ 	<td>not applicable</td>
+ 	<td> Returns "true" if the <em>Attributes</em> objects passed by
+ 	    this parser in <em>ContentHandler.startElement()</em>
+ 	    implement the <a href="ext/Attributes2.html"
+ 	    ><em>org.xml.sax.ext.Attributes2</em></a> interface.
+ 	    That interface exposes additional DTD-related information,
+ 	    such as whether the attribute was specified in the
+ 	    source text rather than defaulted.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>use-locator2</td>
+ 	<td><em>read-only</em></td>
+ 	<td>not applicable</td>
+ 	<td> Returns "true" if the <em>Locator</em> objects passed by
+ 	    this parser in <em>ContentHandler.setDocumentLocator()</em>
+ 	    implement the <a href="ext/Locator2.html"
+ 	    ><em>org.xml.sax.ext.Locator2</em></a> interface.
+ 	    That interface exposes additional entity information,
+ 	    such as the character encoding and XML version used.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>use-entity-resolver2</td>
+ 	<td><em>read/write</em></td>
+ 	<td><em>true</em></td>
+ 	<td> Returns "true" if, when <em>setEntityResolver</em> is given
+ 	    an object implementing the <a href="ext/EntityResolver2.html"
+ 	    ><em>org.xml.sax.ext.EntityResolver2</em></a> interface,
+ 	    those new methods will be used.
+ 	    Returns "false" to indicate that those methods will not be used.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>validation</td>
+ 	<td><em>read/write</em></td>
+ 	<td><em>unspecified</em></td>
+ 	<td> Controls whether the parser is reporting all validity
+ 	    errors; if true, all external entities will be read.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>xmlns-uris</td>
+ 	<td><em>read/write</em></td>
+ 	<td><em>false</em></td>
+ 	<td> Controls whether, when the <em>namespace-prefixes</em> feature
+ 	    is set, the parser treats namespace declaration attributes as
+ 	    being in the <em>http://www.w3.org/2000/xmlns/</em> namespace.
+ 	    By default, SAX2 conforms to the original "Namespaces in XML"
+ 	    Recommendation, which explicitly states that such attributes are
+ 	    not in any namespace.
+ 	    Setting this optional flag to "true" makes the SAX2 events conform to
+ 	    a later backwards-incompatible revision of that recommendation,
+ 	    placing those attributes in a namespace.
+ 		</td>
+ 	</tr>
+ 
+     <tr>
+     <td>xml-1.1</td>
+     <td><em>read-only</em></td>
+     <td>not applicable</td>
+     <td> Returns "true" if the parser supports both XML 1.1 and XML 1.0.
+         Returns "false" if the parser supports only XML 1.0.
+ 		</td>
+     </tr>
+ 
+ </table>
+ 
+ <p> Support for the default values of the
+ <em>namespaces</em> and <em>namespace-prefixes</em>
+ properties is required.
+ Support for any other feature flags is entirely optional.
+ </p>
+ 
+ <p> For default values not specified by SAX2,
+ each XMLReader implementation specifies its default,
+ or may choose not to expose the feature flag.
+ Unless otherwise specified here,
+ implementations may support changing current values
+ of these standard feature flags, but not while parsing.
+ </p>
+ 
+ <h2> SAX2 Standard Handler and Property IDs </h2>
+ 
+ <p> For parser interface characteristics that are described
+ as objects, a separate namespace is defined.  The
+ objects in this namespace are again identified by URI, and
+ the standard property URIs have the prefix
+ <code>http://xml.org/sax/properties/</code> before an identifier such as
+ <code>lexical-handler</code> or
+ <code>dom-node</code>.  Manage those properties using
+ <em>setProperty()</em>.  Those identifiers are: </p>
+ 
+ <table border="1" cellpadding="3" cellspacing="0" width="100%">
+     <tr align="center" bgcolor="#ccccff">
+ 	<th>Property ID</th>
+ 	<th>Description</th>
+ 	</tr>
+ 
+     <tr>
+ 	<td>declaration-handler</td>
+ 	<td> Used to see most DTD declarations except those treated
+ 	    as lexical ("document element name is ...") or which are
+ 	    mandatory for all SAX parsers (<em>DTDHandler</em>).
+ 	    The Object must implement <a href="ext/DeclHandler.html"
+ 	    ><em>org.xml.sax.ext.DeclHandler</em></a>.
+ 	    </td>
+ 	</tr>
+ 
+     <tr>
+         <td>document-xml-version</td>
+         <td> May be examined only during a parse, after the startDocument()
+             callback has been completed; read-only. This property is a 
+             literal string describing the actual XML version of the document, 
+             such as "1.0" or "1.1".
+             </td>
+         </tr>
+     
+     <tr>
+ 	<td>dom-node</td>
+ 	<td> For "DOM Walker" style parsers, which ignore their
+ 	    <em>parser.parse()</em> parameters, this is used to
+ 	    specify the DOM (sub)tree being walked by the parser.
+ 	    The Object must implement the
+ 	    <em>org.w3c.dom.Node</em> interface.
+ 	    </td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>lexical-handler</td>
+ 	<td> Used to see some syntax events that are essential in some
+ 	    applications:  comments, CDATA delimiters, selected general
+ 	    entity inclusions, and the start and end of the DTD
+ 	    (and declaration of document element name).
+ 	    The Object must implement <a href="ext/LexicalHandler.html"
+ 	    ><em>org.xml.sax.ext.LexicalHandler</em></a>.
+ 	    </td>
+ 	</tr>
+ 
+     <tr>
+ 	<td>xml-string</td>
+ 	<td> Readable only during a parser callback, this exposes a <b>TBS</b>
+ 	    chunk of characters responsible for the current event. </td>
+ 	</tr>
+ 
+ </table>
+ 
+ <p> All of these standard properties are optional;
+ XMLReader implementations need not support them.
+ </p>
+ 
+ </body></html>
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/COPYRIGHT.html gcc-4.1.0/libjava/classpath/external/w3c_dom/COPYRIGHT.html
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/COPYRIGHT.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/COPYRIGHT.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,106 ----
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+   <head>
+     <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+     <title>W3C IPR SOFTWARE NOTICE</title>
+ <style type="text/css">
+ <!--
+ html, body { background: #fff; color: #000; } /* body for Windows IE3 */
+ -->
+ </style>
+   </head>
+   <body>
+     <h1>
+       W3C IPR SOFTWARE NOTICE
+     </h1>
+     <h3>
+       Copyright &copy; 2002 <a href="http://www.w3.org/">World Wide Web
+       Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
+       Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
+       National de Recherche en Informatique et en Automatique</a>, <a
+       href="http://www.keio.ac.jp/">Keio University</a>). All Rights
+       Reserved.
+     </h3>
+     <p>
+       The DOM bindings are published under the W3C Software Copyright Notice
+       and License. The software license requires "Notice of any changes or
+       modifications to the W3C files, including the date changes were made."
+       Consequently, modified versions of the DOM bindings must document that
+       they do not conform to the W3C standard; in the case of the IDL
+       definitions, the pragma prefix can no longer be 'w3c.org'; in the case of
+       the Java language binding, the package names can no longer be in the
+       'org.w3c' package.
+     </p>
+     <p>
+       <b>Note:</b> The original version of the W3C Software Copyright Notice
+       and License could be found at <a
+       href='http://www.w3.org/Consortium/Legal/copyright-software-19980720'>http://www.w3.org/Consortium/Legal/copyright-software-19980720</a>
+     </p>
+     <h3>
+       Copyright &copy; 1994-2002 <a href="http://www.w3.org/">World Wide Web
+       Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
+       Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
+       National de Recherche en Informatique et en Automatique</a>, <a
+       href="http://www.keio.ac.jp/">Keio University</a>). All Rights
+       Reserved. http://www.w3.org/Consortium/Legal/
+     </h3>
+     <p>
+       This W3C work (including software, documents, or other related items) is
+       being provided by the copyright holders under the following license. By
+       obtaining, using and/or copying this work, you (the licensee) agree that
+       you have read, understood, and will comply with the following terms and
+       conditions:
+     </p>
+     <p>
+       Permission to use, copy, and modify this software and its documentation,
+       with or without modification,&nbsp; for any purpose and without fee or
+       royalty is hereby granted, provided that you include the following on ALL
+       copies of the software and documentation or portions thereof, including
+       modifications, that you make:
+     </p>
+     <ol>
+       <li>
+ 	The full text of this NOTICE in a location viewable to users of the
+ 	redistributed or derivative work.
+       </li>
+       <li>
+ 	Any pre-existing intellectual property disclaimers, notices, or terms
+ 	and conditions. If none exist, a short notice of the following form
+ 	(hypertext is preferred, text is permitted) should be used within the
+ 	body of any redistributed or derivative code: "Copyright &copy;
+ 	[$date-of-software] <a href="http://www.w3.org/">World Wide Web
+ 	Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
+ 	Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
+ 	National de Recherche en Informatique et en Automatique</a>, <a
+ 	href="http://www.keio.ac.jp/">Keio University</a>).  All Rights
+ 	Reserved. http://www.w3.org/Consortium/Legal/"
+       </li>
+       <li>
+ 	Notice of any changes or modifications to the W3C files, including the
+ 	date changes were made. (We recommend you provide URIs to the location
+ 	from which the code is derived.)
+       </li>
+     </ol>
+     <p>
+       THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
+       HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
+       INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS
+       FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
+       DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
+       TRADEMARKS OR OTHER RIGHTS.
+     </p>
+     <p>
+       COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+       CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
+       DOCUMENTATION.
+     </p>
+     <p>
+       The name and trademarks of copyright holders may NOT be used in
+       advertising or publicity pertaining to the software without specific,
+       written prior permission. Title to copyright in this software and any
+       associated documentation will at all times remain with copyright
+       holders.
+     </p>
+   </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/Makefile.am gcc-4.1.0/libjava/classpath/external/w3c_dom/Makefile.am
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/Makefile.am	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,149 ----
+ ## Input file for automake to generate the Makefile.in used by configure
+ 
+ EXTRA_DIST = README \
+ org/w3c/dom/Attr.java \
+ org/w3c/dom/CDATASection.java \
+ org/w3c/dom/CharacterData.java \
+ org/w3c/dom/Comment.java \
+ org/w3c/dom/DOMConfiguration.java \
+ org/w3c/dom/DOMError.java \
+ org/w3c/dom/DOMErrorHandler.java \
+ org/w3c/dom/DOMException.java \
+ org/w3c/dom/DOMImplementation.java \
+ org/w3c/dom/DOMImplementationList.java \
+ org/w3c/dom/DOMImplementationSource.java \
+ org/w3c/dom/DOMLocator.java \
+ org/w3c/dom/DOMStringList.java \
+ org/w3c/dom/Document.java \
+ org/w3c/dom/DocumentFragment.java \
+ org/w3c/dom/DocumentType.java \
+ org/w3c/dom/Element.java \
+ org/w3c/dom/Entity.java \
+ org/w3c/dom/EntityReference.java \
+ org/w3c/dom/NameList.java \
+ org/w3c/dom/NamedNodeMap.java \
+ org/w3c/dom/Node.java \
+ org/w3c/dom/NodeList.java \
+ org/w3c/dom/Notation.java \
+ org/w3c/dom/ProcessingInstruction.java \
+ org/w3c/dom/Text.java \
+ org/w3c/dom/TypeInfo.java \
+ org/w3c/dom/UserDataHandler.java \
+ org/w3c/dom/bootstrap/DOMImplementationRegistry.java \
+ org/w3c/dom/css/CSS2Properties.java \
+ org/w3c/dom/css/CSSCharsetRule.java \
+ org/w3c/dom/css/CSSFontFaceRule.java \
+ org/w3c/dom/css/CSSImportRule.java \
+ org/w3c/dom/css/CSSMediaRule.java \
+ org/w3c/dom/css/CSSPageRule.java \
+ org/w3c/dom/css/CSSPrimitiveValue.java \
+ org/w3c/dom/css/CSSRule.java \
+ org/w3c/dom/css/CSSRuleList.java \
+ org/w3c/dom/css/CSSStyleDeclaration.java \
+ org/w3c/dom/css/CSSStyleRule.java \
+ org/w3c/dom/css/CSSStyleSheet.java \
+ org/w3c/dom/css/CSSUnknownRule.java \
+ org/w3c/dom/css/CSSValue.java \
+ org/w3c/dom/css/CSSValueList.java \
+ org/w3c/dom/css/Counter.java \
+ org/w3c/dom/css/DOMImplementationCSS.java \
+ org/w3c/dom/css/DocumentCSS.java \
+ org/w3c/dom/css/ElementCSSInlineStyle.java \
+ org/w3c/dom/css/RGBColor.java \
+ org/w3c/dom/css/Rect.java \
+ org/w3c/dom/css/ViewCSS.java \
+ org/w3c/dom/events/DocumentEvent.java \
+ org/w3c/dom/events/Event.java \
+ org/w3c/dom/events/EventException.java \
+ org/w3c/dom/events/EventListener.java \
+ org/w3c/dom/events/EventTarget.java \
+ org/w3c/dom/events/MouseEvent.java \
+ org/w3c/dom/events/MutationEvent.java \
+ org/w3c/dom/events/UIEvent.java \
+ org/w3c/dom/html2/HTMLAnchorElement.java \
+ org/w3c/dom/html2/HTMLAppletElement.java \
+ org/w3c/dom/html2/HTMLAreaElement.java \
+ org/w3c/dom/html2/HTMLBRElement.java \
+ org/w3c/dom/html2/HTMLBaseElement.java \
+ org/w3c/dom/html2/HTMLBaseFontElement.java \
+ org/w3c/dom/html2/HTMLBodyElement.java \
+ org/w3c/dom/html2/HTMLButtonElement.java \
+ org/w3c/dom/html2/HTMLCollection.java \
+ org/w3c/dom/html2/HTMLDListElement.java \
+ org/w3c/dom/html2/HTMLDirectoryElement.java \
+ org/w3c/dom/html2/HTMLDivElement.java \
+ org/w3c/dom/html2/HTMLDocument.java \
+ org/w3c/dom/html2/HTMLElement.java \
+ org/w3c/dom/html2/HTMLFieldSetElement.java \
+ org/w3c/dom/html2/HTMLFontElement.java \
+ org/w3c/dom/html2/HTMLFormElement.java \
+ org/w3c/dom/html2/HTMLFrameElement.java \
+ org/w3c/dom/html2/HTMLFrameSetElement.java \
+ org/w3c/dom/html2/HTMLHRElement.java \
+ org/w3c/dom/html2/HTMLHeadElement.java \
+ org/w3c/dom/html2/HTMLHeadingElement.java \
+ org/w3c/dom/html2/HTMLHtmlElement.java \
+ org/w3c/dom/html2/HTMLIFrameElement.java \
+ org/w3c/dom/html2/HTMLImageElement.java \
+ org/w3c/dom/html2/HTMLInputElement.java \
+ org/w3c/dom/html2/HTMLIsIndexElement.java \
+ org/w3c/dom/html2/HTMLLIElement.java \
+ org/w3c/dom/html2/HTMLLabelElement.java \
+ org/w3c/dom/html2/HTMLLegendElement.java \
+ org/w3c/dom/html2/HTMLLinkElement.java \
+ org/w3c/dom/html2/HTMLMapElement.java \
+ org/w3c/dom/html2/HTMLMenuElement.java \
+ org/w3c/dom/html2/HTMLMetaElement.java \
+ org/w3c/dom/html2/HTMLModElement.java \
+ org/w3c/dom/html2/HTMLOListElement.java \
+ org/w3c/dom/html2/HTMLObjectElement.java \
+ org/w3c/dom/html2/HTMLOptGroupElement.java \
+ org/w3c/dom/html2/HTMLOptionElement.java \
+ org/w3c/dom/html2/HTMLOptionsCollection.java \
+ org/w3c/dom/html2/HTMLParagraphElement.java \
+ org/w3c/dom/html2/HTMLParamElement.java \
+ org/w3c/dom/html2/HTMLPreElement.java \
+ org/w3c/dom/html2/HTMLQuoteElement.java \
+ org/w3c/dom/html2/HTMLScriptElement.java \
+ org/w3c/dom/html2/HTMLSelectElement.java \
+ org/w3c/dom/html2/HTMLStyleElement.java \
+ org/w3c/dom/html2/HTMLTableCaptionElement.java \
+ org/w3c/dom/html2/HTMLTableCellElement.java \
+ org/w3c/dom/html2/HTMLTableColElement.java \
+ org/w3c/dom/html2/HTMLTableElement.java \
+ org/w3c/dom/html2/HTMLTableRowElement.java \
+ org/w3c/dom/html2/HTMLTableSectionElement.java \
+ org/w3c/dom/html2/HTMLTextAreaElement.java \
+ org/w3c/dom/html2/HTMLTitleElement.java \
+ org/w3c/dom/html2/HTMLUListElement.java \
+ org/w3c/dom/ls/DOMImplementationLS.java \
+ org/w3c/dom/ls/LSException.java \
+ org/w3c/dom/ls/LSInput.java \
+ org/w3c/dom/ls/LSLoadEvent.java \
+ org/w3c/dom/ls/LSOutput.java \
+ org/w3c/dom/ls/LSParser.java \
+ org/w3c/dom/ls/LSParserFilter.java \
+ org/w3c/dom/ls/LSProgressEvent.java \
+ org/w3c/dom/ls/LSResourceResolver.java \
+ org/w3c/dom/ls/LSSerializer.java \
+ org/w3c/dom/ls/LSSerializerFilter.java \
+ org/w3c/dom/ranges/DocumentRange.java \
+ org/w3c/dom/ranges/Range.java \
+ org/w3c/dom/ranges/RangeException.java \
+ org/w3c/dom/stylesheets/DocumentStyle.java \
+ org/w3c/dom/stylesheets/LinkStyle.java \
+ org/w3c/dom/stylesheets/MediaList.java \
+ org/w3c/dom/stylesheets/StyleSheet.java \
+ org/w3c/dom/stylesheets/StyleSheetList.java \
+ org/w3c/dom/traversal/DocumentTraversal.java \
+ org/w3c/dom/traversal/NodeFilter.java \
+ org/w3c/dom/traversal/NodeIterator.java \
+ org/w3c/dom/traversal/TreeWalker.java \
+ org/w3c/dom/views/AbstractView.java \
+ org/w3c/dom/views/DocumentView.java \
+ org/w3c/dom/xpath/XPathEvaluator.java \
+ org/w3c/dom/xpath/XPathException.java \
+ org/w3c/dom/xpath/XPathExpression.java \
+ org/w3c/dom/xpath/XPathNSResolver.java \
+ org/w3c/dom/xpath/XPathNamespace.java \
+ org/w3c/dom/xpath/XPathResult.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/Makefile.in gcc-4.1.0/libjava/classpath/external/w3c_dom/Makefile.in
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/Makefile.in	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,558 ----
+ # Makefile.in generated by automake 1.9.3 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ # 2003, 2004  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ top_builddir = ../..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+ INSTALL_HEADER = $(INSTALL_DATA)
+ transform = $(program_transform_name)
+ NORMAL_INSTALL = :
+ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = external/w3c_dom
+ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ 	$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ 	$(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/iconv.m4 \
+ 	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ 	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = $(top_builddir)/include/config.h
+ CONFIG_CLEAN_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
+ BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
+ CLASSPATH_MODULE = @CLASSPATH_MODULE@
+ CP = @CP@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CREATE_ALSA_LIBRARIES_FALSE = @CREATE_ALSA_LIBRARIES_FALSE@
+ CREATE_ALSA_LIBRARIES_TRUE = @CREATE_ALSA_LIBRARIES_TRUE@
+ CREATE_API_DOCS_FALSE = @CREATE_API_DOCS_FALSE@
+ CREATE_API_DOCS_TRUE = @CREATE_API_DOCS_TRUE@
+ CREATE_CORE_JNI_LIBRARIES_FALSE = @CREATE_CORE_JNI_LIBRARIES_FALSE@
+ CREATE_CORE_JNI_LIBRARIES_TRUE = @CREATE_CORE_JNI_LIBRARIES_TRUE@
+ CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
+ CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
+ CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
+ CREATE_GTK_PEER_LIBRARIES_TRUE = @CREATE_GTK_PEER_LIBRARIES_TRUE@
+ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
+ CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
+ CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
+ CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
+ CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
+ CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
+ CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
+ CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DATE = @DATE@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ ECJ = @ECJ@
+ EGREP = @EGREP@
+ ERROR_CFLAGS = @ERROR_CFLAGS@
+ EXAMPLESDIR = @EXAMPLESDIR@
+ EXEEXT = @EXEEXT@
+ FIND = @FIND@
+ FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+ FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
+ FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
+ FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
+ FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
+ FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
+ FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
+ FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
+ FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
+ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
+ GCJ = @GCJ@
+ GCJX = @GCJX@
+ GJDOC = @GJDOC@
+ GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
+ INSTALL_CLASS_FILES_FALSE = @INSTALL_CLASS_FILES_FALSE@
+ INSTALL_CLASS_FILES_TRUE = @INSTALL_CLASS_FILES_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_GLIBJ_ZIP_FALSE = @INSTALL_GLIBJ_ZIP_FALSE@
+ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
+ JAY = @JAY@
+ JAY_SKELETON = @JAY_SKELETON@
+ JIKES = @JIKES@
+ JIKESENCODING = @JIKESENCODING@
+ KJC = @KJC@
+ LDFLAGS = @LDFLAGS@
+ LIBDEBUG = @LIBDEBUG@
+ LIBICONV = @LIBICONV@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIBVERSION = @LIBVERSION@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MKDIR = @MKDIR@
+ MOC = @MOC@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
+ PANGOFT2_LIBS = @PANGOFT2_LIBS@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ QT_CFLAGS = @QT_CFLAGS@
+ QT_LIBS = @QT_LIBS@
+ RANLIB = @RANLIB@
+ REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
+ REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
+ REMOVE = @REMOVE@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
+ STRIP = @STRIP@
+ USER_CLASSLIB = @USER_CLASSLIB@
+ USER_JAVAH = @USER_JAVAH@
+ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
+ USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
+ USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
+ USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+ VERSION = @VERSION@
+ WARNING_CFLAGS = @WARNING_CFLAGS@
+ XML_CFLAGS = @XML_CFLAGS@
+ XML_LIBS = @XML_LIBS@
+ XSLT_CFLAGS = @XSLT_CFLAGS@
+ XSLT_LIBS = @XSLT_LIBS@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZIP = @ZIP@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
+ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ datadir = @datadir@
+ default_toolkit = @default_toolkit@
+ exec_prefix = @exec_prefix@
+ glibjdir = @glibjdir@
+ host = @host@
+ host_alias = @host_alias@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ nativelibdir = @nativelibdir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ vm_classes = @vm_classes@
+ EXTRA_DIST = README \
+ org/w3c/dom/Attr.java \
+ org/w3c/dom/CDATASection.java \
+ org/w3c/dom/CharacterData.java \
+ org/w3c/dom/Comment.java \
+ org/w3c/dom/DOMConfiguration.java \
+ org/w3c/dom/DOMError.java \
+ org/w3c/dom/DOMErrorHandler.java \
+ org/w3c/dom/DOMException.java \
+ org/w3c/dom/DOMImplementation.java \
+ org/w3c/dom/DOMImplementationList.java \
+ org/w3c/dom/DOMImplementationSource.java \
+ org/w3c/dom/DOMLocator.java \
+ org/w3c/dom/DOMStringList.java \
+ org/w3c/dom/Document.java \
+ org/w3c/dom/DocumentFragment.java \
+ org/w3c/dom/DocumentType.java \
+ org/w3c/dom/Element.java \
+ org/w3c/dom/Entity.java \
+ org/w3c/dom/EntityReference.java \
+ org/w3c/dom/NameList.java \
+ org/w3c/dom/NamedNodeMap.java \
+ org/w3c/dom/Node.java \
+ org/w3c/dom/NodeList.java \
+ org/w3c/dom/Notation.java \
+ org/w3c/dom/ProcessingInstruction.java \
+ org/w3c/dom/Text.java \
+ org/w3c/dom/TypeInfo.java \
+ org/w3c/dom/UserDataHandler.java \
+ org/w3c/dom/bootstrap/DOMImplementationRegistry.java \
+ org/w3c/dom/css/CSS2Properties.java \
+ org/w3c/dom/css/CSSCharsetRule.java \
+ org/w3c/dom/css/CSSFontFaceRule.java \
+ org/w3c/dom/css/CSSImportRule.java \
+ org/w3c/dom/css/CSSMediaRule.java \
+ org/w3c/dom/css/CSSPageRule.java \
+ org/w3c/dom/css/CSSPrimitiveValue.java \
+ org/w3c/dom/css/CSSRule.java \
+ org/w3c/dom/css/CSSRuleList.java \
+ org/w3c/dom/css/CSSStyleDeclaration.java \
+ org/w3c/dom/css/CSSStyleRule.java \
+ org/w3c/dom/css/CSSStyleSheet.java \
+ org/w3c/dom/css/CSSUnknownRule.java \
+ org/w3c/dom/css/CSSValue.java \
+ org/w3c/dom/css/CSSValueList.java \
+ org/w3c/dom/css/Counter.java \
+ org/w3c/dom/css/DOMImplementationCSS.java \
+ org/w3c/dom/css/DocumentCSS.java \
+ org/w3c/dom/css/ElementCSSInlineStyle.java \
+ org/w3c/dom/css/RGBColor.java \
+ org/w3c/dom/css/Rect.java \
+ org/w3c/dom/css/ViewCSS.java \
+ org/w3c/dom/events/DocumentEvent.java \
+ org/w3c/dom/events/Event.java \
+ org/w3c/dom/events/EventException.java \
+ org/w3c/dom/events/EventListener.java \
+ org/w3c/dom/events/EventTarget.java \
+ org/w3c/dom/events/MouseEvent.java \
+ org/w3c/dom/events/MutationEvent.java \
+ org/w3c/dom/events/UIEvent.java \
+ org/w3c/dom/html2/HTMLAnchorElement.java \
+ org/w3c/dom/html2/HTMLAppletElement.java \
+ org/w3c/dom/html2/HTMLAreaElement.java \
+ org/w3c/dom/html2/HTMLBRElement.java \
+ org/w3c/dom/html2/HTMLBaseElement.java \
+ org/w3c/dom/html2/HTMLBaseFontElement.java \
+ org/w3c/dom/html2/HTMLBodyElement.java \
+ org/w3c/dom/html2/HTMLButtonElement.java \
+ org/w3c/dom/html2/HTMLCollection.java \
+ org/w3c/dom/html2/HTMLDListElement.java \
+ org/w3c/dom/html2/HTMLDirectoryElement.java \
+ org/w3c/dom/html2/HTMLDivElement.java \
+ org/w3c/dom/html2/HTMLDocument.java \
+ org/w3c/dom/html2/HTMLElement.java \
+ org/w3c/dom/html2/HTMLFieldSetElement.java \
+ org/w3c/dom/html2/HTMLFontElement.java \
+ org/w3c/dom/html2/HTMLFormElement.java \
+ org/w3c/dom/html2/HTMLFrameElement.java \
+ org/w3c/dom/html2/HTMLFrameSetElement.java \
+ org/w3c/dom/html2/HTMLHRElement.java \
+ org/w3c/dom/html2/HTMLHeadElement.java \
+ org/w3c/dom/html2/HTMLHeadingElement.java \
+ org/w3c/dom/html2/HTMLHtmlElement.java \
+ org/w3c/dom/html2/HTMLIFrameElement.java \
+ org/w3c/dom/html2/HTMLImageElement.java \
+ org/w3c/dom/html2/HTMLInputElement.java \
+ org/w3c/dom/html2/HTMLIsIndexElement.java \
+ org/w3c/dom/html2/HTMLLIElement.java \
+ org/w3c/dom/html2/HTMLLabelElement.java \
+ org/w3c/dom/html2/HTMLLegendElement.java \
+ org/w3c/dom/html2/HTMLLinkElement.java \
+ org/w3c/dom/html2/HTMLMapElement.java \
+ org/w3c/dom/html2/HTMLMenuElement.java \
+ org/w3c/dom/html2/HTMLMetaElement.java \
+ org/w3c/dom/html2/HTMLModElement.java \
+ org/w3c/dom/html2/HTMLOListElement.java \
+ org/w3c/dom/html2/HTMLObjectElement.java \
+ org/w3c/dom/html2/HTMLOptGroupElement.java \
+ org/w3c/dom/html2/HTMLOptionElement.java \
+ org/w3c/dom/html2/HTMLOptionsCollection.java \
+ org/w3c/dom/html2/HTMLParagraphElement.java \
+ org/w3c/dom/html2/HTMLParamElement.java \
+ org/w3c/dom/html2/HTMLPreElement.java \
+ org/w3c/dom/html2/HTMLQuoteElement.java \
+ org/w3c/dom/html2/HTMLScriptElement.java \
+ org/w3c/dom/html2/HTMLSelectElement.java \
+ org/w3c/dom/html2/HTMLStyleElement.java \
+ org/w3c/dom/html2/HTMLTableCaptionElement.java \
+ org/w3c/dom/html2/HTMLTableCellElement.java \
+ org/w3c/dom/html2/HTMLTableColElement.java \
+ org/w3c/dom/html2/HTMLTableElement.java \
+ org/w3c/dom/html2/HTMLTableRowElement.java \
+ org/w3c/dom/html2/HTMLTableSectionElement.java \
+ org/w3c/dom/html2/HTMLTextAreaElement.java \
+ org/w3c/dom/html2/HTMLTitleElement.java \
+ org/w3c/dom/html2/HTMLUListElement.java \
+ org/w3c/dom/ls/DOMImplementationLS.java \
+ org/w3c/dom/ls/LSException.java \
+ org/w3c/dom/ls/LSInput.java \
+ org/w3c/dom/ls/LSLoadEvent.java \
+ org/w3c/dom/ls/LSOutput.java \
+ org/w3c/dom/ls/LSParser.java \
+ org/w3c/dom/ls/LSParserFilter.java \
+ org/w3c/dom/ls/LSProgressEvent.java \
+ org/w3c/dom/ls/LSResourceResolver.java \
+ org/w3c/dom/ls/LSSerializer.java \
+ org/w3c/dom/ls/LSSerializerFilter.java \
+ org/w3c/dom/ranges/DocumentRange.java \
+ org/w3c/dom/ranges/Range.java \
+ org/w3c/dom/ranges/RangeException.java \
+ org/w3c/dom/stylesheets/DocumentStyle.java \
+ org/w3c/dom/stylesheets/LinkStyle.java \
+ org/w3c/dom/stylesheets/MediaList.java \
+ org/w3c/dom/stylesheets/StyleSheet.java \
+ org/w3c/dom/stylesheets/StyleSheetList.java \
+ org/w3c/dom/traversal/DocumentTraversal.java \
+ org/w3c/dom/traversal/NodeFilter.java \
+ org/w3c/dom/traversal/NodeIterator.java \
+ org/w3c/dom/traversal/TreeWalker.java \
+ org/w3c/dom/views/AbstractView.java \
+ org/w3c/dom/views/DocumentView.java \
+ org/w3c/dom/xpath/XPathEvaluator.java \
+ org/w3c/dom/xpath/XPathException.java \
+ org/w3c/dom/xpath/XPathExpression.java \
+ org/w3c/dom/xpath/XPathNSResolver.java \
+ org/w3c/dom/xpath/XPathNamespace.java \
+ org/w3c/dom/xpath/XPathResult.java
+ 
+ all: all-am
+ 
+ .SUFFIXES:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ 		&& exit 0; \
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+ 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  external/w3c_dom/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --gnu  external/w3c_dom/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+ 	  *config.status*) \
+ 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ 	  *) \
+ 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ 	esac;
+ 
+ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ tags: TAGS
+ TAGS:
+ 
+ ctags: CTAGS
+ CTAGS:
+ 
+ 
+ distdir: $(DISTFILES)
+ 	$(mkdir_p) $(distdir)/org/w3c/dom $(distdir)/org/w3c/dom/bootstrap $(distdir)/org/w3c/dom/css $(distdir)/org/w3c/dom/events $(distdir)/org/w3c/dom/html2 $(distdir)/org/w3c/dom/ls $(distdir)/org/w3c/dom/ranges $(distdir)/org/w3c/dom/stylesheets $(distdir)/org/w3c/dom/traversal $(distdir)/org/w3c/dom/views $(distdir)/org/w3c/dom/xpath
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ 	list='$(DISTFILES)'; for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ 	  esac; \
+ 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ 	    dir="/$$dir"; \
+ 	    $(mkdir_p) "$(distdir)$$dir"; \
+ 	  else \
+ 	    dir=''; \
+ 	  fi; \
+ 	  if test -d $$d/$$file; then \
+ 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ 	    fi; \
+ 	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ 	  else \
+ 	    test -f $(distdir)/$$file \
+ 	    || cp -p $$d/$$file $(distdir)/$$file \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+ check-am: all-am
+ check: check-am
+ all-am: Makefile
+ installdirs:
+ install: install-am
+ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+ 	@echo "it deletes files that may require special tools to rebuild."
+ clean: clean-am
+ 
+ clean-am: clean-generic clean-libtool mostlyclean-am
+ 
+ distclean: distclean-am
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-generic distclean-libtool
+ 
+ dvi: dvi-am
+ 
+ dvi-am:
+ 
+ html: html-am
+ 
+ info: info-am
+ 
+ info-am:
+ 
+ install-data-am:
+ 
+ install-exec-am:
+ 
+ install-info: install-info-am
+ 
+ install-man:
+ 
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-am
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-am
+ 
+ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+ 
+ pdf: pdf-am
+ 
+ pdf-am:
+ 
+ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am
+ 
+ .PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ 	distclean distclean-generic distclean-libtool distdir dvi \
+ 	dvi-am html html-am info info-am install install-am \
+ 	install-data install-data-am install-exec install-exec-am \
+ 	install-info install-info-am install-man install-strip \
+ 	installcheck installcheck-am installdirs maintainer-clean \
+ 	maintainer-clean-generic mostlyclean mostlyclean-generic \
+ 	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ 	uninstall-info-am
+ 
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/README gcc-4.1.0/libjava/classpath/external/w3c_dom/README
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/README	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/README	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ Bindings for the Document Object Model (DOM).
+ DOM is not maintained as part of GNU Classpath, but is used with GNU Classpath.
+ 
+ The packages includes are:
+ 
+ Document Object Model (DOM) Level 3 Core Specification
+ http://www.w3.org/TR/DOM-Level-3-Core/
+ (07 April 2004)
+ 
+ Document Object Model (DOM) Level 3 Load and Save Specification
+ http://www.w3.org/TR/DOM-Level-3-LS/
+ (07 April 2004)
+ 
+ Document Object Model (DOM) Level 2 Events Specification
+ http://www.w3.org/TR/DOM-Level-2-Events/
+ (13 November 2000)
+ Latest errata: 20021016
+ 
+ Document Object Model (DOM) Level 2 Views Specification
+ http://www.w3.org/TR/DOM-Level-2-Views/
+ (13 November 2000)
+ Latest errata: 20021016
+ 
+ Document Object Model (DOM) Level 2 Style Specification
+ http://www.w3.org/TR/DOM-Level-2-Style/
+ (13 November 2000)
+ Latest errata: 20021016
+ 
+ Document Object Model (DOM) Level 2 Traversal and Range Specification
+ http://www.w3.org/TR/DOM-Level-2-Traversal-Range/
+ (13 November 2000)
+ Latest errata: 20021016
+ 
+ Document Object Model (DOM) Level 2 HTML Specification
+ http://www.w3.org/TR/DOM-Level-2-HTML/
+ (09 January 2003)
+ 
+ Document Object Model (DOM) Level 3 XPath Specification
+ http://www.w3.org/TR/DOM-Level-3-XPath/
+ (26 February 2004)
+ 
+ Errata can be found at:
+ http://www.w3.org/2000/11/DOM-Level-2-errata
+ http://www.w3.org/2004/01/DOM-Level-3-errata
+ 
+ The only change to the sources is setting the additional fallback for
+ org.w3c.dom.bootstrap.DOMImplementationRegistry.newInstance() to
+ gnu.xml.dom.ImplementationSource.
+ 
+ When importing new versions don't forget to update the Makefile.am
+ to list any new files (or to remove old ones).
+ 
+ All files are distributed under the following
+ W3C Software Short Notice:
+ 
+   Copyright (c) 2004 World Wide Web Consortium,
+ 
+   (Massachusetts Institute of Technology, European Research Consortium for
+   Informatics and Mathematics, Keio University). All Rights Reserved. This
+   work is distributed under the W3C(r) Software License [1] 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.
+ 
+   [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+ 
+   Permission to copy, modify, and distribute this software and its
+   documentation, with or without modification, for any purpose and
+   without fee or royalty is hereby granted, provided that you include
+   the following on ALL copies of the software and documentation or
+   portions thereof, including modifications:
+ 
+   1. The full text of this NOTICE in a location viewable to users of
+   the redistributed or derivative work.
+   2. Any pre-existing intellectual property disclaimers, notices, or
+   terms and conditions. If none exist, the W3C Software Short Notice
+   should be included (hypertext is preferred, text is permitted) within
+   the body of any redistributed or derivative code.
+   3. Notice of any changes or modifications to the files, including
+   the date changes were made. (We recommend you provide URIs to the
+   location from which the code is derived.)
+ 
+   THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
+   HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
+   INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS
+   FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
+   DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
+   TRADEMARKS OR OTHER RIGHTS.
+ 
+   COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL
+   OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
+   DOCUMENTATION.
+ 
+   The name and trademarks of copyright holders may NOT be used in
+   advertising or publicity pertaining to the software without specific,
+   written prior permission. Title to copyright in this software and any
+   associated documentation will at all times remain with copyright
+   holders.
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Attr.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Attr.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Attr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Attr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,275 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * The <code>Attr</code> interface represents an attribute in an 
+  * <code>Element</code> object. Typically the allowable values for the 
+  * attribute are defined in a schema associated with the document.
+  * <p><code>Attr</code> objects inherit the <code>Node</code> interface, but 
+  * since they are not actually child nodes of the element they describe, the 
+  * DOM does not consider them part of the document tree. Thus, the 
+  * <code>Node</code> attributes <code>parentNode</code>, 
+  * <code>previousSibling</code>, and <code>nextSibling</code> have a 
+  * <code>null</code> value for <code>Attr</code> objects. The DOM takes the 
+  * view that attributes are properties of elements rather than having a 
+  * separate identity from the elements they are associated with; this should 
+  * make it more efficient to implement such features as default attributes 
+  * associated with all elements of a given type. Furthermore, 
+  * <code>Attr</code> nodes may not be immediate children of a 
+  * <code>DocumentFragment</code>. However, they can be associated with 
+  * <code>Element</code> nodes contained within a 
+  * <code>DocumentFragment</code>. In short, users and implementors of the 
+  * DOM need to be aware that <code>Attr</code> nodes have some things in 
+  * common with other objects inheriting the <code>Node</code> interface, but 
+  * they also are quite distinct.
+  * <p>The attribute's effective value is determined as follows: if this 
+  * attribute has been explicitly assigned any value, that value is the 
+  * attribute's effective value; otherwise, if there is a declaration for 
+  * this attribute, and that declaration includes a default value, then that 
+  * default value is the attribute's effective value; otherwise, the 
+  * attribute does not exist on this element in the structure model until it 
+  * has been explicitly added. Note that the <code>Node.nodeValue</code> 
+  * attribute on the <code>Attr</code> instance can also be used to retrieve 
+  * the string version of the attribute's value(s).
+  * <p> If the attribute was not explicitly given a value in the instance 
+  * document but has a default value provided by the schema associated with 
+  * the document, an attribute node will be created with 
+  * <code>specified</code> set to <code>false</code>. Removing attribute 
+  * nodes for which a default value is defined in the schema generates a new 
+  * attribute node with the default value and <code>specified</code> set to 
+  * <code>false</code>. If validation occurred while invoking 
+  * <code>Document.normalizeDocument()</code>, attribute nodes with 
+  * <code>specified</code> equals to <code>false</code> are recomputed 
+  * according to the default attribute values provided by the schema. If no 
+  * default value is associate with this attribute in the schema, the 
+  * attribute node is discarded. 
+  * <p>In XML, where the value of an attribute can contain entity references, 
+  * the child nodes of the <code>Attr</code> node may be either 
+  * <code>Text</code> or <code>EntityReference</code> nodes (when these are 
+  * in use; see the description of <code>EntityReference</code> for 
+  * discussion). 
+  * <p>The DOM Core represents all attribute values as simple strings, even if 
+  * the DTD or schema associated with the document declares them of some 
+  * specific type such as tokenized. 
+  * <p>The way attribute value normalization is performed by the DOM 
+  * implementation depends on how much the implementation knows about the 
+  * schema in use. Typically, the <code>value</code> and 
+  * <code>nodeValue</code> attributes of an <code>Attr</code> node initially 
+  * returns the normalized value given by the parser. It is also the case 
+  * after <code>Document.normalizeDocument()</code> is called (assuming the 
+  * right options have been set). But this may not be the case after 
+  * mutation, independently of whether the mutation is performed by setting 
+  * the string value directly or by changing the <code>Attr</code> child 
+  * nodes. In particular, this is true when <a href='http://www.w3.org/TR/2004/REC-xml-20040204#dt-charref'>character 
+  * references</a> are involved, given that they are not represented in the DOM and they 
+  * impact attribute value normalization. On the other hand, if the 
+  * implementation knows about the schema in use when the attribute value is 
+  * changed, and it is of a different type than CDATA, it may normalize it 
+  * again at that time. This is especially true of specialized DOM 
+  * implementations, such as SVG DOM implementations, which store attribute 
+  * values in an internal form different from a string.
+  * <p>The following table gives some examples of the relations between the 
+  * attribute value in the original document (parsed attribute), the value as 
+  * exposed in the DOM, and the serialization of the value: 
+  * <table border='1' cellpadding='3'>
+  * <tr>
+  * <th>Examples</th>
+  * <th>Parsed 
+  * attribute value</th>
+  * <th>Initial <code>Attr.value</code></th>
+  * <th>Serialized attribute value</th>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * Character reference</td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"x&amp;#178;=5"</pre>
+  * </td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"x\u00b2=5"</pre>
+  * </td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"x&amp;#178;=5"</pre>
+  * </td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'>Built-in 
+  * character entity</td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"y&amp;lt;6"</pre>
+  * </td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"y&lt;6"</pre>
+  * </td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"y&amp;lt;6"</pre>
+  * </td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'>Literal newline between</td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>
+  * "x=5&amp;#10;y=6"</pre>
+  * </td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"x=5 y=6"</pre>
+  * </td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"x=5&amp;#10;y=6"</pre>
+  * </td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'>Normalized newline between</td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"x=5 
+  * y=6"</pre>
+  * </td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"x=5 y=6"</pre>
+  * </td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>"x=5 y=6"</pre>
+  * </td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'>Entity <code>e</code> with literal newline</td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <pre>
+  * &lt;!ENTITY e '...&amp;#10;...'&gt; [...]&gt; "x=5&amp;e;y=6"</pre>
+  * </td>
+  * <td valign='top' rowspan='1' colspan='1'><em>Dependent on Implementation and Load Options</em></td>
+  * <td valign='top' rowspan='1' colspan='1'><em>Dependent on Implementation and Load/Save Options</em></td>
+  * </tr>
+  * </table>
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface Attr extends Node {
+     /**
+      * Returns the name of this attribute. If <code>Node.localName</code> is 
+      * different from <code>null</code>, this attribute is a qualified name.
+      */
+     public String getName();
+ 
+     /**
+      *  <code>True</code> if this attribute was explicitly given a value in 
+      * the instance document, <code>false</code> otherwise. If the 
+      * application changed the value of this attribute node (even if it ends 
+      * up having the same value as the default value) then it is set to 
+      * <code>true</code>. The implementation may handle attributes with 
+      * default values from other schemas similarly but applications should 
+      * use <code>Document.normalizeDocument()</code> to guarantee this 
+      * information is up-to-date. 
+      */
+     public boolean getSpecified();
+ 
+     /**
+      * On retrieval, the value of the attribute is returned as a string. 
+      * Character and general entity references are replaced with their 
+      * values. See also the method <code>getAttribute</code> on the 
+      * <code>Element</code> interface.
+      * <br>On setting, this creates a <code>Text</code> node with the unparsed 
+      * contents of the string, i.e. any characters that an XML processor 
+      * would recognize as markup are instead treated as literal text. See 
+      * also the method <code>Element.setAttribute()</code>.
+      * <br> Some specialized implementations, such as some [<a href='http://www.w3.org/TR/2003/REC-SVG11-20030114/'>SVG 1.1</a>] 
+      * implementations, may do normalization automatically, even after 
+      * mutation; in such case, the value on retrieval may differ from the 
+      * value on setting. 
+      */
+     public String getValue();
+     /**
+      * On retrieval, the value of the attribute is returned as a string. 
+      * Character and general entity references are replaced with their 
+      * values. See also the method <code>getAttribute</code> on the 
+      * <code>Element</code> interface.
+      * <br>On setting, this creates a <code>Text</code> node with the unparsed 
+      * contents of the string, i.e. any characters that an XML processor 
+      * would recognize as markup are instead treated as literal text. See 
+      * also the method <code>Element.setAttribute()</code>.
+      * <br> Some specialized implementations, such as some [<a href='http://www.w3.org/TR/2003/REC-SVG11-20030114/'>SVG 1.1</a>] 
+      * implementations, may do normalization automatically, even after 
+      * mutation; in such case, the value on retrieval may differ from the 
+      * value on setting. 
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
+      */
+     public void setValue(String value)
+                             throws DOMException;
+ 
+     /**
+      * The <code>Element</code> node this attribute is attached to or 
+      * <code>null</code> if this attribute is not in use.
+      * @since DOM Level 2
+      */
+     public Element getOwnerElement();
+ 
+     /**
+      *  The type information associated with this attribute. While the type 
+      * information contained in this attribute is guarantee to be correct 
+      * after loading the document or invoking 
+      * <code>Document.normalizeDocument()</code>, <code>schemaTypeInfo</code>
+      *  may not be reliable if the node was moved. 
+      * @since DOM Level 3
+      */
+     public TypeInfo getSchemaTypeInfo();
+ 
+     /**
+      *  Returns whether this attribute is known to be of type ID (i.e. to 
+      * contain an identifier for its owner element) or not. When it is and 
+      * its value is unique, the <code>ownerElement</code> of this attribute 
+      * can be retrieved using the method <code>Document.getElementById</code>
+      * . The implementation could use several ways to determine if an 
+      * attribute node is known to contain an identifier: 
+      * <ul>
+      * <li> If validation 
+      * occurred using an XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+      *  while loading the document or while invoking 
+      * <code>Document.normalizeDocument()</code>, the post-schema-validation 
+      * infoset contributions (PSVI contributions) values are used to 
+      * determine if this attribute is a schema-determined ID attribute using 
+      * the <a href='http://www.w3.org/TR/2003/REC-xptr-framework-20030325/#term-sdi'>
+      * schema-determined ID</a> definition in [<a href='http://www.w3.org/TR/2003/REC-xptr-framework-20030325/'>XPointer</a>]
+      * . 
+      * </li>
+      * <li> If validation occurred using a DTD while loading the document or 
+      * while invoking <code>Document.normalizeDocument()</code>, the infoset <b>[type definition]</b> value is used to determine if this attribute is a DTD-determined ID 
+      * attribute using the <a href='http://www.w3.org/TR/2003/REC-xptr-framework-20030325/#term-ddi'>
+      * DTD-determined ID</a> definition in [<a href='http://www.w3.org/TR/2003/REC-xptr-framework-20030325/'>XPointer</a>]
+      * . 
+      * </li>
+      * <li> from the use of the methods <code>Element.setIdAttribute()</code>, 
+      * <code>Element.setIdAttributeNS()</code>, or 
+      * <code>Element.setIdAttributeNode()</code>, i.e. it is an 
+      * user-determined ID attribute; 
+      * <p ><b>Note:</b>  XPointer framework (see section 3.2 in [<a href='http://www.w3.org/TR/2003/REC-xptr-framework-20030325/'>XPointer</a>]
+      * ) consider the DOM user-determined ID attribute as being part of the 
+      * XPointer externally-determined ID definition. 
+      * </li>
+      * <li> using mechanisms that 
+      * are outside the scope of this specification, it is then an 
+      * externally-determined ID attribute. This includes using schema 
+      * languages different from XML schema and DTD. 
+      * </li>
+      * </ul>
+      * <br> If validation occurred while invoking 
+      * <code>Document.normalizeDocument()</code>, all user-determined ID 
+      * attributes are reset and all attribute nodes ID information are then 
+      * reevaluated in accordance to the schema used. As a consequence, if 
+      * the <code>Attr.schemaTypeInfo</code> attribute contains an ID type, 
+      * <code>isId</code> will always return true. 
+      * @since DOM Level 3
+      */
+     public boolean isId();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/CDATASection.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/CDATASection.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/CDATASection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/CDATASection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * CDATA sections are used to escape blocks of text containing characters that 
+  * would otherwise be regarded as markup. The only delimiter that is 
+  * recognized in a CDATA section is the "]]&gt;" string that ends the CDATA 
+  * section. CDATA sections cannot be nested. Their primary purpose is for 
+  * including material such as XML fragments, without needing to escape all 
+  * the delimiters.
+  * <p>The <code>CharacterData.data</code> attribute holds the text that is 
+  * contained by the CDATA section. Note that this <em>may</em> contain characters that need to be escaped outside of CDATA sections and 
+  * that, depending on the character encoding ("charset") chosen for 
+  * serialization, it may be impossible to write out some characters as part 
+  * of a CDATA section.
+  * <p>The <code>CDATASection</code> interface inherits from the 
+  * <code>CharacterData</code> interface through the <code>Text</code> 
+  * interface. Adjacent <code>CDATASection</code> nodes are not merged by use 
+  * of the <code>normalize</code> method of the <code>Node</code> interface.
+  * <p> No lexical check is done on the content of a CDATA section and it is 
+  * therefore possible to have the character sequence <code>"]]&gt;"</code> 
+  * in the content, which is illegal in a CDATA section per section 2.7 of [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. The 
+  * presence of this character sequence must generate a fatal error during 
+  * serialization or the cdata section must be splitted before the 
+  * serialization (see also the parameter <code>"split-cdata-sections"</code> 
+  * in the <code>DOMConfiguration</code> interface). 
+  * <p ><b>Note:</b> Because no markup is recognized within a 
+  * <code>CDATASection</code>, character numeric references cannot be used as 
+  * an escape mechanism when serializing. Therefore, action needs to be taken 
+  * when serializing a <code>CDATASection</code> with a character encoding 
+  * where some of the contained characters cannot be represented. Failure to 
+  * do so would not produce well-formed XML.
+  * <p ><b>Note:</b> One potential solution in the serialization process is to 
+  * end the CDATA section before the character, output the character using a 
+  * character reference or entity reference, and open a new CDATA section for 
+  * any further characters in the text node. Note, however, that some code 
+  * conversion libraries at the time of writing do not return an error or 
+  * exception when a character is missing from the encoding, making the task 
+  * of ensuring that data is not corrupted on serialization more difficult.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface CDATASection extends Text {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/CharacterData.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/CharacterData.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/CharacterData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/CharacterData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,153 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * The <code>CharacterData</code> interface extends Node with a set of 
+  * attributes and methods for accessing character data in the DOM. For 
+  * clarity this set is defined here rather than on each object that uses 
+  * these attributes and methods. No DOM objects correspond directly to 
+  * <code>CharacterData</code>, though <code>Text</code> and others do 
+  * inherit the interface from it. All <code>offsets</code> in this interface 
+  * start from <code>0</code>.
+  * <p>As explained in the <code>DOMString</code> interface, text strings in 
+  * the DOM are represented in UTF-16, i.e. as a sequence of 16-bit units. In 
+  * the following, the term 16-bit units is used whenever necessary to 
+  * indicate that indexing on CharacterData is done in 16-bit units.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface CharacterData extends Node {
+     /**
+      * The character data of the node that implements this interface. The DOM 
+      * implementation may not put arbitrary limits on the amount of data 
+      * that may be stored in a <code>CharacterData</code> node. However, 
+      * implementation limits may mean that the entirety of a node's data may 
+      * not fit into a single <code>DOMString</code>. In such cases, the user 
+      * may call <code>substringData</code> to retrieve the data in 
+      * appropriately sized pieces.
+      * @exception DOMException
+      *   DOMSTRING_SIZE_ERR: Raised when it would return more characters than 
+      *   fit in a <code>DOMString</code> variable on the implementation 
+      *   platform.
+      */
+     public String getData()
+                             throws DOMException;
+     /**
+      * The character data of the node that implements this interface. The DOM 
+      * implementation may not put arbitrary limits on the amount of data 
+      * that may be stored in a <code>CharacterData</code> node. However, 
+      * implementation limits may mean that the entirety of a node's data may 
+      * not fit into a single <code>DOMString</code>. In such cases, the user 
+      * may call <code>substringData</code> to retrieve the data in 
+      * appropriately sized pieces.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
+      */
+     public void setData(String data)
+                             throws DOMException;
+ 
+     /**
+      * The number of 16-bit units that are available through <code>data</code> 
+      * and the <code>substringData</code> method below. This may have the 
+      * value zero, i.e., <code>CharacterData</code> nodes may be empty.
+      */
+     public int getLength();
+ 
+     /**
+      * Extracts a range of data from the node.
+      * @param offset Start offset of substring to extract.
+      * @param count The number of 16-bit units to extract.
+      * @return The specified substring. If the sum of <code>offset</code> and 
+      *   <code>count</code> exceeds the <code>length</code>, then all 16-bit 
+      *   units to the end of the data are returned.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is 
+      *   negative or greater than the number of 16-bit units in 
+      *   <code>data</code>, or if the specified <code>count</code> is 
+      *   negative.
+      *   <br>DOMSTRING_SIZE_ERR: Raised if the specified range of text does 
+      *   not fit into a <code>DOMString</code>.
+      */
+     public String substringData(int offset, 
+                                 int count)
+                                 throws DOMException;
+ 
+     /**
+      * Append the string to the end of the character data of the node. Upon 
+      * success, <code>data</code> provides access to the concatenation of 
+      * <code>data</code> and the <code>DOMString</code> specified.
+      * @param arg The <code>DOMString</code> to append.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      */
+     public void appendData(String arg)
+                            throws DOMException;
+ 
+     /**
+      * Insert a string at the specified 16-bit unit offset.
+      * @param offset The character offset at which to insert.
+      * @param arg The <code>DOMString</code> to insert.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is 
+      *   negative or greater than the number of 16-bit units in 
+      *   <code>data</code>.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      */
+     public void insertData(int offset, 
+                            String arg)
+                            throws DOMException;
+ 
+     /**
+      * Remove a range of 16-bit units from the node. Upon success, 
+      * <code>data</code> and <code>length</code> reflect the change.
+      * @param offset The offset from which to start removing.
+      * @param count The number of 16-bit units to delete. If the sum of 
+      *   <code>offset</code> and <code>count</code> exceeds 
+      *   <code>length</code> then all 16-bit units from <code>offset</code> 
+      *   to the end of the data are deleted.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is 
+      *   negative or greater than the number of 16-bit units in 
+      *   <code>data</code>, or if the specified <code>count</code> is 
+      *   negative.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      */
+     public void deleteData(int offset, 
+                            int count)
+                            throws DOMException;
+ 
+     /**
+      * Replace the characters starting at the specified 16-bit unit offset 
+      * with the specified string.
+      * @param offset The offset from which to start replacing.
+      * @param count The number of 16-bit units to replace. If the sum of 
+      *   <code>offset</code> and <code>count</code> exceeds 
+      *   <code>length</code>, then all 16-bit units to the end of the data 
+      *   are replaced; (i.e., the effect is the same as a <code>remove</code>
+      *    method call with the same range, followed by an <code>append</code>
+      *    method invocation).
+      * @param arg The <code>DOMString</code> with which the range must be 
+      *   replaced.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is 
+      *   negative or greater than the number of 16-bit units in 
+      *   <code>data</code>, or if the specified <code>count</code> is 
+      *   negative.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      */
+     public void replaceData(int offset, 
+                             int count, 
+                             String arg)
+                             throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Comment.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Comment.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Comment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Comment.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,30 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * This interface inherits from <code>CharacterData</code> and represents the 
+  * content of a comment, i.e., all the characters between the starting '
+  * <code>&lt;!--</code>' and ending '<code>--&gt;</code>'. Note that this is 
+  * the definition of a comment in XML, and, in practice, HTML, although some 
+  * HTML tools may implement the full SGML comment structure. 
+  * <p> No lexical check is done on the content of a comment and it is 
+  * therefore possible to have the character sequence <code>"--"</code> 
+  * (double-hyphen) in the content, which is illegal in a comment per section 
+  * 2.5 of [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. The 
+  * presence of this character sequence must generate a fatal error during 
+  * serialization. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface Comment extends CharacterData {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMConfiguration.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMConfiguration.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMConfiguration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMConfiguration.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,413 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  *  The <code>DOMConfiguration</code> interface represents the configuration 
+  * of a document and maintains a table of recognized parameters. Using the 
+  * configuration, it is possible to change 
+  * <code>Document.normalizeDocument()</code> behavior, such as replacing the 
+  * <code>CDATASection</code> nodes with <code>Text</code> nodes or 
+  * specifying the type of the schema that must be used when the validation 
+  * of the <code>Document</code> is requested. <code>DOMConfiguration</code> 
+  * objects are also used in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>DOM Level 3 Load and Save</a>]
+  *  in the <code>DOMParser</code> and <code>DOMSerializer</code> interfaces. 
+  * <p> The parameter names used by the <code>DOMConfiguration</code> object 
+  * are defined throughout the DOM Level 3 specifications. Names are 
+  * case-insensitive. To avoid possible conflicts, as a convention, names 
+  * referring to parameters defined outside the DOM specification should be 
+  * made unique. Because parameters are exposed as properties in the , names 
+  * are recommended to follow the section 5.16 Identifiers of [Unicode] with the addition of the character '-' (HYPHEN-MINUS) but it is not 
+  * enforced by the DOM implementation. DOM Level 3 Core Implementations are 
+  * required to recognize all parameters defined in this specification. Some 
+  * parameter values may also be required to be supported by the 
+  * implementation. Refer to the definition of the parameter to know if a 
+  * value must be supported or not. 
+  * <p ><b>Note:</b>  Parameters are similar to features and properties used in 
+  * SAX2 [<a href='http://www.saxproject.org/'>SAX</a>]. 
+  * <p> The following list of parameters defined in the DOM: 
+  * <dl>
+  * <dt>
+  * <code>"canonical-form"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt><code>true</code></dt>
+  * <dd>[<em>optional</em>] Canonicalize the document according to the rules specified in [<a href='http://www.w3.org/TR/2001/REC-xml-c14n-20010315'>Canonical XML</a>], 
+  * such as removing the <code>DocumentType</code> node (if any) from the 
+  * tree, or removing superfluous namespace declarations from each element. 
+  * Note that this is limited to what can be represented in the DOM; in 
+  * particular, there is no way to specify the order of the attributes in the 
+  * DOM. In addition,  Setting this parameter to <code>true</code> will also 
+  * set the state of the parameters listed below. Later changes to the state 
+  * of one of those parameters will revert "canonical-form" back to 
+  * <code>false</code>. Parameters set to <code>false</code>: "entities", "
+  * normalize-characters", "cdata-sections". Parameters set to 
+  * <code>true</code>: "namespaces", "namespace-declarations", "well-formed", 
+  * "element-content-whitespace". Other parameters are not changed unless 
+  * explicitly specified in the description of the parameters.</dd>
+  * <dt>
+  * <code>false</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>)Do not canonicalize the document.</dd>
+  * </dl></dd>
+  * <dt><code>"cdata-sections"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt>
+  * <code>true</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>)Keep <code>CDATASection</code> nodes in the document.</dd>
+  * <dt><code>false</code></dt>
+  * <dd>[<em>required</em>]Transform <code>CDATASection</code> nodes in the document into 
+  * <code>Text</code> nodes. The new <code>Text</code> node is then combined 
+  * with any adjacent <code>Text</code> node.</dd>
+  * </dl></dd>
+  * <dt>
+  * <code>"check-character-normalization"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt><code>true</code></dt>
+  * <dd>[<em>optional</em>] Check if the characters in the document are <a href='http://www.w3.org/TR/2004/REC-xml11-20040204/#dt-fullnorm'>fully 
+  * normalized</a>, as defined in appendix B of [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]. When a 
+  * sequence of characters is encountered that fails normalization checking, 
+  * an error with the <code>DOMError.type</code> equals to 
+  * "check-character-normalization-failure" is issued. </dd>
+  * <dt><code>false</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>)Do not check if characters are normalized.</dd>
+  * </dl></dd>
+  * <dt><code>"comments"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt>
+  * <code>true</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>)Keep <code>Comment</code> nodes in the document.</dd>
+  * <dt><code>false</code></dt>
+  * <dd>[<em>required</em>]Discard <code>Comment</code> nodes in the document.</dd>
+  * </dl></dd>
+  * <dt>
+  * <code>"datatype-normalization"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt><code>true</code></dt>
+  * <dd>[<em>optional</em>] Expose schema normalized values in the tree, such as <a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#key-nv'>XML 
+  * Schema normalized values</a> in the case of XML Schema. Since this parameter requires to have schema 
+  * information, the "validate" parameter will also be set to 
+  * <code>true</code>. Having this parameter activated when "validate" is 
+  * <code>false</code> has no effect and no schema-normalization will happen. 
+  * <p ><b>Note:</b>  Since the document contains the result of the XML 1.0 
+  * processing, this parameter does not apply to attribute value 
+  * normalization as defined in section 3.3.3 of [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>] and is only 
+  * meant for schema languages other than Document Type Definition (DTD). </dd>
+  * <dt>
+  * <code>false</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>) Do not perform schema normalization on the tree. </dd>
+  * </dl></dd>
+  * <dt>
+  * <code>"element-content-whitespace"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt><code>true</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>)Keep all whitespaces in the document.</dd>
+  * <dt><code>false</code></dt>
+  * <dd>[<em>optional</em>] Discard all <code>Text</code> nodes that contain whitespaces in element 
+  * content, as described in <a href='http://www.w3.org/TR/2004/REC-xml-infoset-20040204#infoitem.character'>
+  * [element content whitespace]</a>. The implementation is expected to use the attribute 
+  * <code>Text.isElementContentWhitespace</code> to determine if a 
+  * <code>Text</code> node should be discarded or not.</dd>
+  * </dl></dd>
+  * <dt><code>"entities"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt>
+  * <code>true</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>)Keep <code>EntityReference</code> nodes in the document.</dd>
+  * <dt>
+  * <code>false</code></dt>
+  * <dd>[<em>required</em>] Remove all <code>EntityReference</code> nodes from the document, 
+  * putting the entity expansions directly in their place. <code>Text</code> 
+  * nodes are normalized, as defined in <code>Node.normalize</code>. Only <a href='http://www.w3.org/TR/2004/REC-xml-infoset-20040204/#infoitem.rse'>
+  * unexpanded entity references</a> are kept in the document. </dd>
+  * </dl>
+  * <p ><b>Note:</b>  This parameter does not affect <code>Entity</code> nodes. </dd>
+  * <dt>
+  * <code>"error-handler"</code></dt>
+  * <dd>[<em>required</em>] Contains a <code>DOMErrorHandler</code> object. If an error is 
+  * encountered in the document, the implementation will call back the 
+  * <code>DOMErrorHandler</code> registered using this parameter. The 
+  * implementation may provide a default <code>DOMErrorHandler</code> object. 
+  *  When called, <code>DOMError.relatedData</code> will contain the closest 
+  * node to where the error occurred. If the implementation is unable to 
+  * determine the node where the error occurs, 
+  * <code>DOMError.relatedData</code> will contain the <code>Document</code> 
+  * node. Mutations to the document from within an error handler will result 
+  * in implementation dependent behavior. </dd>
+  * <dt><code>"infoset"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt>
+  * <code>true</code></dt>
+  * <dd>[<em>required</em>]Keep in the document the information defined in the XML Information Set [<a href='http://www.w3.org/TR/2004/REC-xml-infoset-20040204/'>XML Information Set</a>]
+  * .This forces the following parameters to <code>false</code>: "
+  * validate-if-schema", "entities", "datatype-normalization", "cdata-sections
+  * ".This forces the following parameters to <code>true</code>: "
+  * namespace-declarations", "well-formed", "element-content-whitespace", "
+  * comments", "namespaces".Other parameters are not changed unless 
+  * explicitly specified in the description of the parameters. Note that 
+  * querying this parameter with <code>getParameter</code> returns 
+  * <code>true</code> only if the individual parameters specified above are 
+  * appropriately set.</dd>
+  * <dt><code>false</code></dt>
+  * <dd>Setting <code>infoset</code> to 
+  * <code>false</code> has no effect.</dd>
+  * </dl></dd>
+  * <dt><code>"namespaces"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt>
+  * <code>true</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>) Perform the namespace processing as defined in . </dd>
+  * <dt><code>false</code></dt>
+  * <dd>[<em>optional</em>] Do not perform the namespace processing. </dd>
+  * </dl></dd>
+  * <dt>
+  * <code>"namespace-declarations"</code></dt>
+  * <dd> This parameter has no effect if the 
+  * parameter "namespaces" is set to <code>false</code>. 
+  * <dl>
+  * <dt><code>true</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>) Include namespace declaration attributes, specified or defaulted from 
+  * the schema, in the document. See also the sections "Declaring Namespaces" 
+  * in [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+  *  and [<a href='http://www.w3.org/TR/2004/REC-xml-names11-20040204/'>XML Namespaces 1.1</a>]
+  * .</dd>
+  * <dt><code>false</code></dt>
+  * <dd>[<em>required</em>]Discard all namespace declaration attributes. The namespace prefixes (
+  * <code>Node.prefix</code>) are retained even if this parameter is set to 
+  * <code>false</code>.</dd>
+  * </dl></dd>
+  * <dt><code>"normalize-characters"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt><code>true</code></dt>
+  * <dd>[<em>optional</em>] <a href='http://www.w3.org/TR/2004/REC-xml11-20040204/#dt-fullnorm'>Fully 
+  * normalized</a> the characters in the document as defined in appendix B of [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]. </dd>
+  * <dt>
+  * <code>false</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>)Do not perform character normalization.</dd>
+  * </dl></dd>
+  * <dt><code>"schema-location"</code></dt>
+  * <dd>[<em>optional</em>] Represent a <code>DOMString</code> object containing a list of URIs, 
+  * separated by whitespaces (characters matching the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-S'>nonterminal 
+  * production S</a> defined in section 2.3 [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]), that 
+  * represents the schemas against which validation should occur, i.e. the 
+  * current schema. The types of schemas referenced in this list must match 
+  * the type specified with <code>schema-type</code>, otherwise the behavior 
+  * of an implementation is undefined.  The schemas specified using this 
+  * property take precedence to the schema information specified in the 
+  * document itself. For namespace aware schema, if a schema specified using 
+  * this property and a schema specified in the document instance (i.e. using 
+  * the <code>schemaLocation</code> attribute) in a schema document (i.e. 
+  * using schema <code>import</code> mechanisms) share the same 
+  * <code>targetNamespace</code>, the schema specified by the user using this 
+  * property will be used. If two schemas specified using this property share 
+  * the same <code>targetNamespace</code> or have no namespace, the behavior 
+  * is implementation dependent.  If no location has been provided, this 
+  * parameter is <code>null</code>. 
+  * <p ><b>Note:</b>  The <code>"schema-location"</code> parameter is ignored 
+  * unless the "schema-type" parameter value is set. It is strongly 
+  * recommended that <code>Document.documentURI</code> will be set so that an 
+  * implementation can successfully resolve any external entities referenced. </dd>
+  * <dt>
+  * <code>"schema-type"</code></dt>
+  * <dd>[<em>optional</em>] Represent a <code>DOMString</code> object containing an absolute URI 
+  * and representing the type of the schema language used to validate a 
+  * document against. Note that no lexical checking is done on the absolute 
+  * URI.  If this parameter is not set, a default value may be provided by 
+  * the implementation, based on the schema languages supported and on the 
+  * schema language used at load time. If no value is provided, this 
+  * parameter is <code>null</code>. 
+  * <p ><b>Note:</b>  For XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+  * , applications must use the value 
+  * <code>"http://www.w3.org/2001/XMLSchema"</code>. For XML DTD [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>], 
+  * applications must use the value 
+  * <code>"http://www.w3.org/TR/REC-xml"</code>. Other schema languages are 
+  * outside the scope of the W3C and therefore should recommend an absolute 
+  * URI in order to use this method. </dd>
+  * <dt><code>"split-cdata-sections"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt>
+  * <code>true</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>)Split CDATA sections containing the CDATA section termination marker 
+  * ']]&gt;'. When a CDATA section is split a warning is issued with a 
+  * <code>DOMError.type</code> equals to 
+  * <code>"cdata-sections-splitted"</code> and 
+  * <code>DOMError.relatedData</code> equals to the first 
+  * <code>CDATASection</code> node in document order resulting from the split.</dd>
+  * <dt>
+  * <code>false</code></dt>
+  * <dd>[<em>required</em>]Signal an error if a <code>CDATASection</code> contains an 
+  * unrepresentable character.</dd>
+  * </dl></dd>
+  * <dt><code>"validate"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt><code>true</code></dt>
+  * <dd>[<em>optional</em>] Require the validation against a schema (i.e. XML schema, DTD, any 
+  * other type or representation of schema) of the document as it is being 
+  * normalized as defined by [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. If 
+  * validation errors are found, or no schema was found, the error handler is 
+  * notified. Schema-normalized values will not be exposed according to the 
+  * schema in used unless the parameter "datatype-normalization" is 
+  * <code>true</code>.  This parameter will reevaluate: 
+  * <ul>
+  * <li> Attribute nodes with 
+  * <code>Attr.specified</code> equals to <code>false</code>, as specified in 
+  * the description of the <code>Attr</code> interface; 
+  * </li>
+  * <li> The value of the 
+  * attribute <code>Text.isElementContentWhitespace</code> for all 
+  * <code>Text</code> nodes; 
+  * </li>
+  * <li> The value of the attribute 
+  * <code>Attr.isId</code> for all <code>Attr</code> nodes; 
+  * </li>
+  * <li> The attributes 
+  * <code>Element.schemaTypeInfo</code> and <code>Attr.schemaTypeInfo</code>. 
+  * </li>
+  * </ul>
+  * <p ><b>Note:</b>  "validate-if-schema" and "validate" are mutually 
+  * exclusive, setting one of them to <code>true</code> will set the other 
+  * one to <code>false</code>. Applications should also consider setting the 
+  * parameter "well-formed" to <code>true</code>, which is the default for 
+  * that option, when validating the document. </dd>
+  * <dt><code>false</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>) Do not accomplish schema processing, including the internal subset 
+  * processing. Default attribute values information are kept. Note that 
+  * validation might still happen if "validate-if-schema" is <code>true</code>
+  * . </dd>
+  * </dl></dd>
+  * <dt><code>"validate-if-schema"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt><code>true</code></dt>
+  * <dd>[<em>optional</em>]Enable validation only if a declaration for the document element can be 
+  * found in a schema (independently of where it is found, i.e. XML schema, 
+  * DTD, or any other type or representation of schema). If validation is 
+  * enabled, this parameter has the same behavior as the parameter "validate" 
+  * set to <code>true</code>. 
+  * <p ><b>Note:</b>  "validate-if-schema" and "validate" are mutually 
+  * exclusive, setting one of them to <code>true</code> will set the other 
+  * one to <code>false</code>. </dd>
+  * <dt><code>false</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>) No schema processing should be performed if the document has a schema, 
+  * including internal subset processing. Default attribute values 
+  * information are kept. Note that validation must still happen if "validate
+  * " is <code>true</code>. </dd>
+  * </dl></dd>
+  * <dt><code>"well-formed"</code></dt>
+  * <dd>
+  * <dl>
+  * <dt><code>true</code></dt>
+  * <dd>[<em>required</em>] (<em>default</em>) Check if all nodes are XML well formed according to the XML version in 
+  * use in <code>Document.xmlVersion</code>: 
+  * <ul>
+  * <li> check if the attribute 
+  * <code>Node.nodeName</code> contains invalid characters according to its 
+  * node type and generate a <code>DOMError</code> of type 
+  * <code>"wf-invalid-character-in-node-name"</code>, with a 
+  * <code>DOMError.SEVERITY_ERROR</code> severity, if necessary; 
+  * </li>
+  * <li> check if 
+  * the text content inside <code>Attr</code>, <code>Element</code>, 
+  * <code>Comment</code>, <code>Text</code>, <code>CDATASection</code> nodes 
+  * for invalid characters and generate a <code>DOMError</code> of type 
+  * <code>"wf-invalid-character"</code>, with a 
+  * <code>DOMError.SEVERITY_ERROR</code> severity, if necessary; 
+  * </li>
+  * <li> check if 
+  * the data inside <code>ProcessingInstruction</code> nodes for invalid 
+  * characters and generate a <code>DOMError</code> of type 
+  * <code>"wf-invalid-character"</code>, with a 
+  * <code>DOMError.SEVERITY_ERROR</code> severity, if necessary; 
+  * </li>
+  * </ul></dd>
+  * <dt>
+  * <code>false</code></dt>
+  * <dd>[<em>optional</em>] Do not check for XML well-formedness. </dd>
+  * </dl></dd>
+  * </dl>
+  * <p> The resolution of the system identifiers associated with entities is 
+  * done using <code>Document.documentURI</code>. However, when the feature 
+  * "LS" defined in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>DOM Level 3 Load and Save</a>]
+  *  is supported by the DOM implementation, the parameter 
+  * "resource-resolver" can also be used on <code>DOMConfiguration</code> 
+  * objects attached to <code>Document</code> nodes. If this parameter is 
+  * set, <code>Document.normalizeDocument()</code> will invoke the resource 
+  * resolver instead of using <code>Document.documentURI</code>. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface DOMConfiguration {
+     /**
+      * Set the value of a parameter.
+      * @param name The name of the parameter to set.
+      * @param value  The new value or <code>null</code> if the user wishes to 
+      *   unset the parameter. While the type of the value parameter is 
+      *   defined as <code>DOMUserData</code>, the object type must match the 
+      *   type defined by the definition of the parameter. For example, if 
+      *   the parameter is "error-handler", the value must be of type 
+      *   <code>DOMErrorHandler</code>. 
+      * @exception DOMException
+      *    NOT_FOUND_ERR: Raised when the parameter name is not recognized. 
+      *   <br> NOT_SUPPORTED_ERR: Raised when the parameter name is recognized 
+      *   but the requested value cannot be set. 
+      *   <br> TYPE_MISMATCH_ERR: Raised if the value type for this parameter 
+      *   name is incompatible with the expected value type. 
+      */
+     public void setParameter(String name, 
+                              Object value)
+                              throws DOMException;
+ 
+     /**
+      *  Return the value of a parameter if known. 
+      * @param name  The name of the parameter. 
+      * @return  The current object associated with the specified parameter or 
+      *   <code>null</code> if no object has been associated or if the 
+      *   parameter is not supported. 
+      * @exception DOMException
+      *    NOT_FOUND_ERR: Raised when the parameter name is not recognized. 
+      */
+     public Object getParameter(String name)
+                                throws DOMException;
+ 
+     /**
+      * Check if setting a parameter to a specific value is supported.
+      * @param name The name of the parameter to check.
+      * @param value  An object. if <code>null</code>, the returned value is 
+      *   <code>true</code>. 
+      * @return  <code>true</code> if the parameter could be successfully set 
+      *   to the specified value, or <code>false</code> if the parameter is 
+      *   not recognized or the requested value is not supported. This does 
+      *   not change the current value of the parameter itself. 
+      */
+     public boolean canSetParameter(String name, 
+                                    Object value);
+ 
+     /**
+      *  The list of the parameters supported by this 
+      * <code>DOMConfiguration</code> object and for which at least one value 
+      * can be set by the application. Note that this list can also contain 
+      * parameter names defined outside this specification. 
+      */
+     public DOMStringList getParameterNames();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMError.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMError.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * <code>DOMError</code> is an interface that describes an error.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface DOMError {
+     // ErrorSeverity
+     /**
+      * The severity of the error described by the <code>DOMError</code> is 
+      * warning. A <code>SEVERITY_WARNING</code> will not cause the 
+      * processing to stop, unless <code>DOMErrorHandler.handleError()</code> 
+      * returns <code>false</code>.
+      */
+     public static final short SEVERITY_WARNING          = 1;
+     /**
+      * The severity of the error described by the <code>DOMError</code> is 
+      * error. A <code>SEVERITY_ERROR</code> may not cause the processing to 
+      * stop if the error can be recovered, unless 
+      * <code>DOMErrorHandler.handleError()</code> returns <code>false</code>.
+      */
+     public static final short SEVERITY_ERROR            = 2;
+     /**
+      * The severity of the error described by the <code>DOMError</code> is 
+      * fatal error. A <code>SEVERITY_FATAL_ERROR</code> will cause the 
+      * normal processing to stop. The return value of 
+      * <code>DOMErrorHandler.handleError()</code> is ignored unless the 
+      * implementation chooses to continue, in which case the behavior 
+      * becomes undefined.
+      */
+     public static final short SEVERITY_FATAL_ERROR      = 3;
+ 
+     /**
+      * The severity of the error, either <code>SEVERITY_WARNING</code>, 
+      * <code>SEVERITY_ERROR</code>, or <code>SEVERITY_FATAL_ERROR</code>.
+      */
+     public short getSeverity();
+ 
+     /**
+      * An implementation specific string describing the error that occurred.
+      */
+     public String getMessage();
+ 
+     /**
+      *  A <code>DOMString</code> indicating which related data is expected in 
+      * <code>relatedData</code>. Users should refer to the specification of 
+      * the error in order to find its <code>DOMString</code> type and 
+      * <code>relatedData</code> definitions if any. 
+      * <p ><b>Note:</b>  As an example, 
+      * <code>Document.normalizeDocument()</code> does generate warnings when 
+      * the "split-cdata-sections" parameter is in use. Therefore, the method 
+      * generates a <code>SEVERITY_WARNING</code> with <code>type</code> 
+      * <code>"cdata-sections-splitted"</code> and the first 
+      * <code>CDATASection</code> node in document order resulting from the 
+      * split is returned by the <code>relatedData</code> attribute. 
+      */
+     public String getType();
+ 
+     /**
+      * The related platform dependent exception if any.
+      */
+     public Object getRelatedException();
+ 
+     /**
+      *  The related <code>DOMError.type</code> dependent data if any. 
+      */
+     public Object getRelatedData();
+ 
+     /**
+      * The location of the error.
+      */
+     public DOMLocator getLocation();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,45 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  *  <code>DOMErrorHandler</code> is a callback interface that the DOM 
+  * implementation can call when reporting errors that happens while 
+  * processing XML data, or when doing some other processing (e.g. validating 
+  * a document). A <code>DOMErrorHandler</code> object can be attached to a 
+  * <code>Document</code> using the "error-handler" on the 
+  * <code>DOMConfiguration</code> interface. If more than one error needs to 
+  * be reported during an operation, the sequence and numbers of the errors 
+  * passed to the error handler are implementation dependent. 
+  * <p> The application that is using the DOM implementation is expected to 
+  * implement this interface. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface DOMErrorHandler {
+     /**
+      * This method is called on the error handler when an error occurs.
+      * <br> If an exception is thrown from this method, it is considered to be 
+      * equivalent of returning <code>true</code>. 
+      * @param error  The error object that describes the error. This object 
+      *   may be reused by the DOM implementation across multiple calls to 
+      *   the <code>handleError</code> method. 
+      * @return  If the <code>handleError</code> method returns 
+      *   <code>false</code>, the DOM implementation should stop the current 
+      *   processing when possible. If the method returns <code>true</code>, 
+      *   the processing may continue depending on 
+      *   <code>DOMError.severity</code>. 
+      */
+     public boolean handleError(DOMError error);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMException.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMException.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,131 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * DOM operations only raise exceptions in "exceptional" circumstances, i.e., 
+  * when an operation is impossible to perform (either for logical reasons, 
+  * because data is lost, or because the implementation has become unstable). 
+  * In general, DOM methods return specific error values in ordinary 
+  * processing situations, such as out-of-bound errors when using 
+  * <code>NodeList</code>.
+  * <p>Implementations should raise other exceptions under other circumstances. 
+  * For example, implementations should raise an implementation-dependent 
+  * exception if a <code>null</code> argument is passed when <code>null</code>
+  *  was not expected.
+  * <p>Some languages and object systems do not support the concept of 
+  * exceptions. For such systems, error conditions may be indicated using 
+  * native error reporting mechanisms. For some bindings, for example, 
+  * methods may return error codes similar to those listed in the 
+  * corresponding method descriptions.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public class DOMException extends RuntimeException {
+     public DOMException(short code, String message) {
+        super(message);
+        this.code = code;
+     }
+     public short   code;
+     // ExceptionCode
+     /**
+      * If index or size is negative, or greater than the allowed value.
+      */
+     public static final short INDEX_SIZE_ERR            = 1;
+     /**
+      * If the specified range of text does not fit into a 
+      * <code>DOMString</code>.
+      */
+     public static final short DOMSTRING_SIZE_ERR        = 2;
+     /**
+      * If any <code>Node</code> is inserted somewhere it doesn't belong.
+      */
+     public static final short HIERARCHY_REQUEST_ERR     = 3;
+     /**
+      * If a <code>Node</code> is used in a different document than the one 
+      * that created it (that doesn't support it).
+      */
+     public static final short WRONG_DOCUMENT_ERR        = 4;
+     /**
+      * If an invalid or illegal character is specified, such as in an XML name.
+      */
+     public static final short INVALID_CHARACTER_ERR     = 5;
+     /**
+      * If data is specified for a <code>Node</code> which does not support 
+      * data.
+      */
+     public static final short NO_DATA_ALLOWED_ERR       = 6;
+     /**
+      * If an attempt is made to modify an object where modifications are not 
+      * allowed.
+      */
+     public static final short NO_MODIFICATION_ALLOWED_ERR = 7;
+     /**
+      * If an attempt is made to reference a <code>Node</code> in a context 
+      * where it does not exist.
+      */
+     public static final short NOT_FOUND_ERR             = 8;
+     /**
+      * If the implementation does not support the requested type of object or 
+      * operation.
+      */
+     public static final short NOT_SUPPORTED_ERR         = 9;
+     /**
+      * If an attempt is made to add an attribute that is already in use 
+      * elsewhere.
+      */
+     public static final short INUSE_ATTRIBUTE_ERR       = 10;
+     /**
+      * If an attempt is made to use an object that is not, or is no longer, 
+      * usable.
+      * @since DOM Level 2
+      */
+     public static final short INVALID_STATE_ERR         = 11;
+     /**
+      * If an invalid or illegal string is specified.
+      * @since DOM Level 2
+      */
+     public static final short SYNTAX_ERR                = 12;
+     /**
+      * If an attempt is made to modify the type of the underlying object.
+      * @since DOM Level 2
+      */
+     public static final short INVALID_MODIFICATION_ERR  = 13;
+     /**
+      * If an attempt is made to create or change an object in a way which is 
+      * incorrect with regard to namespaces.
+      * @since DOM Level 2
+      */
+     public static final short NAMESPACE_ERR             = 14;
+     /**
+      * If a parameter or an operation is not supported by the underlying 
+      * object.
+      * @since DOM Level 2
+      */
+     public static final short INVALID_ACCESS_ERR        = 15;
+     /**
+      * If a call to a method such as <code>insertBefore</code> or 
+      * <code>removeChild</code> would make the <code>Node</code> invalid 
+      * with respect to "partial validity", this exception would be raised 
+      * and the operation would not be done. This code is used in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Val-20040127/'>DOM Level 3 Validation</a>]
+      * . Refer to this specification for further information.
+      * @since DOM Level 3
+      */
+     public static final short VALIDATION_ERR            = 16;
+     /**
+      *  If the type of an object is incompatible with the expected type of the 
+      * parameter associated to the object. 
+      * @since DOM Level 3
+      */
+     public static final short TYPE_MISMATCH_ERR         = 17;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementation.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementation.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,136 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * The <code>DOMImplementation</code> interface provides a number of methods 
+  * for performing operations that are independent of any particular instance 
+  * of the document object model.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface DOMImplementation {
+     /**
+      * Test if the DOM implementation implements a specific feature and 
+      * version, as specified in .
+      * @param feature  The name of the feature to test. 
+      * @param version  This is the version number of the feature to test. 
+      * @return <code>true</code> if the feature is implemented in the 
+      *   specified version, <code>false</code> otherwise.
+      */
+     public boolean hasFeature(String feature, 
+                               String version);
+ 
+     /**
+      * Creates an empty <code>DocumentType</code> node. Entity declarations 
+      * and notations are not made available. Entity reference expansions and 
+      * default attribute additions do not occur..
+      * @param qualifiedName The qualified name of the document type to be 
+      *   created.
+      * @param publicId The external subset public identifier.
+      * @param systemId The external subset system identifier.
+      * @return A new <code>DocumentType</code> node with 
+      *   <code>Node.ownerDocument</code> set to <code>null</code>.
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified qualified name is not 
+      *   an XML name according to [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>].
+      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is 
+      *   malformed.
+      *   <br>NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature "XML" and the language exposed through the 
+      *   Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public DocumentType createDocumentType(String qualifiedName, 
+                                            String publicId, 
+                                            String systemId)
+                                            throws DOMException;
+ 
+     /**
+      * Creates a DOM Document object of the specified type with its document 
+      * element.
+      * <br>Note that based on the <code>DocumentType</code> given to create 
+      * the document, the implementation may instantiate specialized 
+      * <code>Document</code> objects that support additional features than 
+      * the "Core", such as "HTML" [<a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>DOM Level 2 HTML</a>]
+      * . On the other hand, setting the <code>DocumentType</code> after the 
+      * document was created makes this very unlikely to happen. 
+      * Alternatively, specialized <code>Document</code> creation methods, 
+      * such as <code>createHTMLDocument</code> [<a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>DOM Level 2 HTML</a>]
+      * , can be used to obtain specific types of <code>Document</code> 
+      * objects.
+      * @param namespaceURI The namespace URI of the document element to 
+      *   create or <code>null</code>.
+      * @param qualifiedName The qualified name of the document element to be 
+      *   created or <code>null</code>.
+      * @param doctype The type of document to be created or <code>null</code>.
+      *   When <code>doctype</code> is not <code>null</code>, its 
+      *   <code>Node.ownerDocument</code> attribute is set to the document 
+      *   being created.
+      * @return A new <code>Document</code> object with its document element. 
+      *   If the <code>NamespaceURI</code>, <code>qualifiedName</code>, and 
+      *   <code>doctype</code> are <code>null</code>, the returned 
+      *   <code>Document</code> is empty with no document element.
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified qualified name is not 
+      *   an XML name according to [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>].
+      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is 
+      *   malformed, if the <code>qualifiedName</code> has a prefix and the 
+      *   <code>namespaceURI</code> is <code>null</code>, or if the 
+      *   <code>qualifiedName</code> is <code>null</code> and the 
+      *   <code>namespaceURI</code> is different from <code>null</code>, or 
+      *   if the <code>qualifiedName</code> has a prefix that is "xml" and 
+      *   the <code>namespaceURI</code> is different from "<a href='http://www.w3.org/XML/1998/namespace'>
+      *   http://www.w3.org/XML/1998/namespace</a>" [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      *   , or if the DOM implementation does not support the 
+      *   <code>"XML"</code> feature but a non-null namespace URI was 
+      *   provided, since namespaces were defined by XML.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>doctype</code> has already 
+      *   been used with a different document or was created from a different 
+      *   implementation.
+      *   <br>NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature "XML" and the language exposed through the 
+      *   Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public Document createDocument(String namespaceURI, 
+                                    String qualifiedName, 
+                                    DocumentType doctype)
+                                    throws DOMException;
+ 
+     /**
+      *  This method returns a specialized object which implements the 
+      * specialized APIs of the specified feature and version, as specified 
+      * in . The specialized object may also be obtained by using 
+      * binding-specific casting methods but is not necessarily expected to, 
+      * as discussed in . This method also allow the implementation to 
+      * provide specialized objects which do not support the 
+      * <code>DOMImplementation</code> interface. 
+      * @param feature  The name of the feature requested. Note that any plus 
+      *   sign "+" prepended to the name of the feature will be ignored since 
+      *   it is not significant in the context of this method. 
+      * @param version  This is the version number of the feature to test. 
+      * @return  Returns an object which implements the specialized APIs of 
+      *   the specified feature and version, if any, or <code>null</code> if 
+      *   there is no object which implements interfaces associated with that 
+      *   feature. If the <code>DOMObject</code> returned by this method 
+      *   implements the <code>DOMImplementation</code> interface, it must 
+      *   delegate to the primary core <code>DOMImplementation</code> and not 
+      *   return results inconsistent with the primary core 
+      *   <code>DOMImplementation</code> such as <code>hasFeature</code>, 
+      *   <code>getFeature</code>, etc. 
+      * @since DOM Level 3
+      */
+     public Object getFeature(String feature, 
+                              String version);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementationList.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementationList.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementationList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementationList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,43 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  *  The <code>DOMImplementationList</code> interface provides the abstraction 
+  * of an ordered collection of DOM implementations, without defining or 
+  * constraining how this collection is implemented. The items in the 
+  * <code>DOMImplementationList</code> are accessible via an integral index, 
+  * starting from 0. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface DOMImplementationList {
+     /**
+      *  Returns the <code>index</code>th item in the collection. If 
+      * <code>index</code> is greater than or equal to the number of 
+      * <code>DOMImplementation</code>s in the list, this returns 
+      * <code>null</code>. 
+      * @param index Index into the collection.
+      * @return  The <code>DOMImplementation</code> at the <code>index</code>
+      *   th position in the <code>DOMImplementationList</code>, or 
+      *   <code>null</code> if that is not a valid index. 
+      */
+     public DOMImplementation item(int index);
+ 
+     /**
+      *  The number of <code>DOMImplementation</code>s in the list. The range 
+      * of valid child node indices is 0 to <code>length-1</code> inclusive. 
+      */
+     public int getLength();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * This interface permits a DOM implementer to supply one or more 
+  * implementations, based upon requested features and versions, as specified 
+  * in . Each implemented <code>DOMImplementationSource</code> object is 
+  * listed in the binding-specific list of available sources so that its 
+  * <code>DOMImplementation</code> objects are made available.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface DOMImplementationSource {
+     /**
+      *  A method to request the first DOM implementation that supports the 
+      * specified features. 
+      * @param features  A string that specifies which features and versions 
+      *   are required. This is a space separated list in which each feature 
+      *   is specified by its name optionally followed by a space and a 
+      *   version number.  This method returns the first item of the list 
+      *   returned by <code>getDOMImplementationList</code>.  As an example, 
+      *   the string <code>"XML 3.0 Traversal +Events 2.0"</code> will 
+      *   request a DOM implementation that supports the module "XML" for its 
+      *   3.0 version, a module that support of the "Traversal" module for 
+      *   any version, and the module "Events" for its 2.0 version. The 
+      *   module "Events" must be accessible using the method 
+      *   <code>Node.getFeature()</code> and 
+      *   <code>DOMImplementation.getFeature()</code>. 
+      * @return The first DOM implementation that support the desired 
+      *   features, or <code>null</code> if this source has none.
+      */
+     public DOMImplementation getDOMImplementation(String features);
+ 
+     /**
+      * A method to request a list of DOM implementations that support the 
+      * specified features and versions, as specified in .
+      * @param features A string that specifies which features and versions 
+      *   are required. This is a space separated list in which each feature 
+      *   is specified by its name optionally followed by a space and a 
+      *   version number. This is something like: "XML 3.0 Traversal +Events 
+      *   2.0"
+      * @return A list of DOM implementations that support the desired 
+      *   features.
+      */
+     public DOMImplementationList getDOMImplementationList(String features);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMLocator.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMLocator.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMLocator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * <code>DOMLocator</code> is an interface that describes a location (e.g. 
+  * where an error occurred).
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface DOMLocator {
+     /**
+      * The line number this locator is pointing to, or <code>-1</code> if 
+      * there is no column number available.
+      */
+     public int getLineNumber();
+ 
+     /**
+      * The column number this locator is pointing to, or <code>-1</code> if 
+      * there is no column number available.
+      */
+     public int getColumnNumber();
+ 
+     /**
+      * The byte offset into the input source this locator is pointing to or 
+      * <code>-1</code> if there is no byte offset available.
+      */
+     public int getByteOffset();
+ 
+     /**
+      * The UTF-16, as defined in [Unicode] and Amendment 1 of [ISO/IEC 10646], offset into the input source this locator is pointing to or 
+      * <code>-1</code> if there is no UTF-16 offset available.
+      */
+     public int getUtf16Offset();
+ 
+     /**
+      * The node this locator is pointing to, or <code>null</code> if no node 
+      * is available.
+      */
+     public Node getRelatedNode();
+ 
+     /**
+      * The URI this locator is pointing to, or <code>null</code> if no URI is 
+      * available.
+      */
+     public String getUri();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMStringList.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMStringList.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMStringList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DOMStringList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,50 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  *  The <code>DOMStringList</code> interface provides the abstraction of an 
+  * ordered collection of <code>DOMString</code> values, without defining or 
+  * constraining how this collection is implemented. The items in the 
+  * <code>DOMStringList</code> are accessible via an integral index, starting 
+  * from 0. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface DOMStringList {
+     /**
+      *  Returns the <code>index</code>th item in the collection. If 
+      * <code>index</code> is greater than or equal to the number of 
+      * <code>DOMString</code>s in the list, this returns <code>null</code>. 
+      * @param index Index into the collection.
+      * @return  The <code>DOMString</code> at the <code>index</code>th 
+      *   position in the <code>DOMStringList</code>, or <code>null</code> if 
+      *   that is not a valid index. 
+      */
+     public String item(int index);
+ 
+     /**
+      * The number of <code>DOMString</code>s in the list. The range of valid 
+      * child node indices is 0 to <code>length-1</code> inclusive.
+      */
+     public int getLength();
+ 
+     /**
+      *  Test if a string is part of this <code>DOMStringList</code>. 
+      * @param str  The string to look for. 
+      * @return  <code>true</code> if the string has been found, 
+      *   <code>false</code> otherwise. 
+      */
+     public boolean contains(String str);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Document.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Document.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Document.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Document.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,814 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * The <code>Document</code> interface represents the entire HTML or XML 
+  * document. Conceptually, it is the root of the document tree, and provides 
+  * the primary access to the document's data.
+  * <p>Since elements, text nodes, comments, processing instructions, etc. 
+  * cannot exist outside the context of a <code>Document</code>, the 
+  * <code>Document</code> interface also contains the factory methods needed 
+  * to create these objects. The <code>Node</code> objects created have a 
+  * <code>ownerDocument</code> attribute which associates them with the 
+  * <code>Document</code> within whose context they were created.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface Document extends Node {
+     /**
+      * The Document Type Declaration (see <code>DocumentType</code>) 
+      * associated with this document. For XML documents without a document 
+      * type declaration this returns <code>null</code>. For HTML documents, 
+      * a <code>DocumentType</code> object may be returned, independently of 
+      * the presence or absence of document type declaration in the HTML 
+      * document.
+      * <br>This provides direct access to the <code>DocumentType</code> node, 
+      * child node of this <code>Document</code>. This node can be set at 
+      * document creation time and later changed through the use of child 
+      * nodes manipulation methods, such as <code>Node.insertBefore</code>, 
+      * or <code>Node.replaceChild</code>. Note, however, that while some 
+      * implementations may instantiate different types of 
+      * <code>Document</code> objects supporting additional features than the 
+      * "Core", such as "HTML" [<a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>DOM Level 2 HTML</a>]
+      * , based on the <code>DocumentType</code> specified at creation time, 
+      * changing it afterwards is very unlikely to result in a change of the 
+      * features supported.
+      * @version DOM Level 3
+      */
+     public DocumentType getDoctype();
+ 
+     /**
+      * The <code>DOMImplementation</code> object that handles this document. A 
+      * DOM application may use objects from multiple implementations.
+      */
+     public DOMImplementation getImplementation();
+ 
+     /**
+      * This is a convenience attribute that allows direct access to the child 
+      * node that is the document element of the document.
+      */
+     public Element getDocumentElement();
+ 
+     /**
+      * Creates an element of the type specified. Note that the instance 
+      * returned implements the <code>Element</code> interface, so attributes 
+      * can be specified directly on the returned object.
+      * <br>In addition, if there are known attributes with default values, 
+      * <code>Attr</code> nodes representing them are automatically created 
+      * and attached to the element.
+      * <br>To create an element with a qualified name and namespace URI, use 
+      * the <code>createElementNS</code> method.
+      * @param tagName The name of the element type to instantiate. For XML, 
+      *   this is case-sensitive, otherwise it depends on the 
+      *   case-sensitivity of the markup language in use. In that case, the 
+      *   name is mapped to the canonical form of that markup by the DOM 
+      *   implementation.
+      * @return A new <code>Element</code> object with the 
+      *   <code>nodeName</code> attribute set to <code>tagName</code>, and 
+      *   <code>localName</code>, <code>prefix</code>, and 
+      *   <code>namespaceURI</code> set to <code>null</code>.
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified name is not an XML 
+      *   name according to the XML version in use specified in the 
+      *   <code>Document.xmlVersion</code> attribute.
+      */
+     public Element createElement(String tagName)
+                                  throws DOMException;
+ 
+     /**
+      * Creates an empty <code>DocumentFragment</code> object.
+      * @return A new <code>DocumentFragment</code>.
+      */
+     public DocumentFragment createDocumentFragment();
+ 
+     /**
+      * Creates a <code>Text</code> node given the specified string.
+      * @param data The data for the node.
+      * @return The new <code>Text</code> object.
+      */
+     public Text createTextNode(String data);
+ 
+     /**
+      * Creates a <code>Comment</code> node given the specified string.
+      * @param data The data for the node.
+      * @return The new <code>Comment</code> object.
+      */
+     public Comment createComment(String data);
+ 
+     /**
+      * Creates a <code>CDATASection</code> node whose value is the specified 
+      * string.
+      * @param data The data for the <code>CDATASection</code> contents.
+      * @return The new <code>CDATASection</code> object.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
+      */
+     public CDATASection createCDATASection(String data)
+                                            throws DOMException;
+ 
+     /**
+      * Creates a <code>ProcessingInstruction</code> node given the specified 
+      * name and data strings.
+      * @param target The target part of the processing instruction.Unlike 
+      *   <code>Document.createElementNS</code> or 
+      *   <code>Document.createAttributeNS</code>, no namespace well-formed 
+      *   checking is done on the target name. Applications should invoke 
+      *   <code>Document.normalizeDocument()</code> with the parameter "
+      *   namespaces" set to <code>true</code> in order to ensure that the 
+      *   target name is namespace well-formed. 
+      * @param data The data for the node.
+      * @return The new <code>ProcessingInstruction</code> object.
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified target is not an XML 
+      *   name according to the XML version in use specified in the 
+      *   <code>Document.xmlVersion</code> attribute.
+      *   <br>NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
+      */
+     public ProcessingInstruction createProcessingInstruction(String target, 
+                                                              String data)
+                                                              throws DOMException;
+ 
+     /**
+      * Creates an <code>Attr</code> of the given name. Note that the 
+      * <code>Attr</code> instance can then be set on an <code>Element</code> 
+      * using the <code>setAttributeNode</code> method. 
+      * <br>To create an attribute with a qualified name and namespace URI, use 
+      * the <code>createAttributeNS</code> method.
+      * @param name The name of the attribute.
+      * @return A new <code>Attr</code> object with the <code>nodeName</code> 
+      *   attribute set to <code>name</code>, and <code>localName</code>, 
+      *   <code>prefix</code>, and <code>namespaceURI</code> set to 
+      *   <code>null</code>. The value of the attribute is the empty string.
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified name is not an XML 
+      *   name according to the XML version in use specified in the 
+      *   <code>Document.xmlVersion</code> attribute.
+      */
+     public Attr createAttribute(String name)
+                                 throws DOMException;
+ 
+     /**
+      * Creates an <code>EntityReference</code> object. In addition, if the 
+      * referenced entity is known, the child list of the 
+      * <code>EntityReference</code> node is made the same as that of the 
+      * corresponding <code>Entity</code> node.
+      * <p ><b>Note:</b> If any descendant of the <code>Entity</code> node has 
+      * an unbound namespace prefix, the corresponding descendant of the 
+      * created <code>EntityReference</code> node is also unbound; (its 
+      * <code>namespaceURI</code> is <code>null</code>). The DOM Level 2 and 
+      * 3 do not support any mechanism to resolve namespace prefixes in this 
+      * case.
+      * @param name The name of the entity to reference.Unlike 
+      *   <code>Document.createElementNS</code> or 
+      *   <code>Document.createAttributeNS</code>, no namespace well-formed 
+      *   checking is done on the entity name. Applications should invoke 
+      *   <code>Document.normalizeDocument()</code> with the parameter "
+      *   namespaces" set to <code>true</code> in order to ensure that the 
+      *   entity name is namespace well-formed. 
+      * @return The new <code>EntityReference</code> object.
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified name is not an XML 
+      *   name according to the XML version in use specified in the 
+      *   <code>Document.xmlVersion</code> attribute.
+      *   <br>NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
+      */
+     public EntityReference createEntityReference(String name)
+                                                  throws DOMException;
+ 
+     /**
+      * Returns a <code>NodeList</code> of all the <code>Elements</code> in 
+      * document order with a given tag name and are contained in the 
+      * document.
+      * @param tagname  The name of the tag to match on. The special value "*" 
+      *   matches all tags. For XML, the <code>tagname</code> parameter is 
+      *   case-sensitive, otherwise it depends on the case-sensitivity of the 
+      *   markup language in use. 
+      * @return A new <code>NodeList</code> object containing all the matched 
+      *   <code>Elements</code>.
+      */
+     public NodeList getElementsByTagName(String tagname);
+ 
+     /**
+      * Imports a node from another document to this document, without altering 
+      * or removing the source node from the original document; this method 
+      * creates a new copy of the source node. The returned node has no 
+      * parent; (<code>parentNode</code> is <code>null</code>).
+      * <br>For all nodes, importing a node creates a node object owned by the 
+      * importing document, with attribute values identical to the source 
+      * node's <code>nodeName</code> and <code>nodeType</code>, plus the 
+      * attributes related to namespaces (<code>prefix</code>, 
+      * <code>localName</code>, and <code>namespaceURI</code>). As in the 
+      * <code>cloneNode</code> operation, the source node is not altered. 
+      * User data associated to the imported node is not carried over. 
+      * However, if any <code>UserDataHandlers</code> has been specified 
+      * along with the associated data these handlers will be called with the 
+      * appropriate parameters before this method returns.
+      * <br>Additional information is copied as appropriate to the 
+      * <code>nodeType</code>, attempting to mirror the behavior expected if 
+      * a fragment of XML or HTML source was copied from one document to 
+      * another, recognizing that the two documents may have different DTDs 
+      * in the XML case. The following list describes the specifics for each 
+      * type of node. 
+      * <dl>
+      * <dt>ATTRIBUTE_NODE</dt>
+      * <dd>The <code>ownerElement</code> attribute 
+      * is set to <code>null</code> and the <code>specified</code> flag is 
+      * set to <code>true</code> on the generated <code>Attr</code>. The 
+      * descendants of the source <code>Attr</code> are recursively imported 
+      * and the resulting nodes reassembled to form the corresponding subtree.
+      * Note that the <code>deep</code> parameter has no effect on 
+      * <code>Attr</code> nodes; they always carry their children with them 
+      * when imported.</dd>
+      * <dt>DOCUMENT_FRAGMENT_NODE</dt>
+      * <dd>If the <code>deep</code> option 
+      * was set to <code>true</code>, the descendants of the source 
+      * <code>DocumentFragment</code> are recursively imported and the 
+      * resulting nodes reassembled under the imported 
+      * <code>DocumentFragment</code> to form the corresponding subtree. 
+      * Otherwise, this simply generates an empty 
+      * <code>DocumentFragment</code>.</dd>
+      * <dt>DOCUMENT_NODE</dt>
+      * <dd><code>Document</code> 
+      * nodes cannot be imported.</dd>
+      * <dt>DOCUMENT_TYPE_NODE</dt>
+      * <dd><code>DocumentType</code> 
+      * nodes cannot be imported.</dd>
+      * <dt>ELEMENT_NODE</dt>
+      * <dd><em>Specified</em> attribute nodes of the source element are imported, and the generated 
+      * <code>Attr</code> nodes are attached to the generated 
+      * <code>Element</code>. Default attributes are <em>not</em> copied, though if the document being imported into defines default 
+      * attributes for this element name, those are assigned. If the 
+      * <code>importNode</code> <code>deep</code> parameter was set to 
+      * <code>true</code>, the descendants of the source element are 
+      * recursively imported and the resulting nodes reassembled to form the 
+      * corresponding subtree.</dd>
+      * <dt>ENTITY_NODE</dt>
+      * <dd><code>Entity</code> nodes can be 
+      * imported, however in the current release of the DOM the 
+      * <code>DocumentType</code> is readonly. Ability to add these imported 
+      * nodes to a <code>DocumentType</code> will be considered for addition 
+      * to a future release of the DOM.On import, the <code>publicId</code>, 
+      * <code>systemId</code>, and <code>notationName</code> attributes are 
+      * copied. If a <code>deep</code> import is requested, the descendants 
+      * of the the source <code>Entity</code> are recursively imported and 
+      * the resulting nodes reassembled to form the corresponding subtree.</dd>
+      * <dt>
+      * ENTITY_REFERENCE_NODE</dt>
+      * <dd>Only the <code>EntityReference</code> itself is 
+      * copied, even if a <code>deep</code> import is requested, since the 
+      * source and destination documents might have defined the entity 
+      * differently. If the document being imported into provides a 
+      * definition for this entity name, its value is assigned.</dd>
+      * <dt>NOTATION_NODE</dt>
+      * <dd>
+      * <code>Notation</code> nodes can be imported, however in the current 
+      * release of the DOM the <code>DocumentType</code> is readonly. Ability 
+      * to add these imported nodes to a <code>DocumentType</code> will be 
+      * considered for addition to a future release of the DOM.On import, the 
+      * <code>publicId</code> and <code>systemId</code> attributes are copied.
+      * Note that the <code>deep</code> parameter has no effect on this type 
+      * of nodes since they cannot have any children.</dd>
+      * <dt>
+      * PROCESSING_INSTRUCTION_NODE</dt>
+      * <dd>The imported node copies its 
+      * <code>target</code> and <code>data</code> values from those of the 
+      * source node.Note that the <code>deep</code> parameter has no effect 
+      * on this type of nodes since they cannot have any children.</dd>
+      * <dt>TEXT_NODE, 
+      * CDATA_SECTION_NODE, COMMENT_NODE</dt>
+      * <dd>These three types of nodes inheriting 
+      * from <code>CharacterData</code> copy their <code>data</code> and 
+      * <code>length</code> attributes from those of the source node.Note 
+      * that the <code>deep</code> parameter has no effect on these types of 
+      * nodes since they cannot have any children.</dd>
+      * </dl> 
+      * @param importedNode The node to import.
+      * @param deep If <code>true</code>, recursively import the subtree under 
+      *   the specified node; if <code>false</code>, import only the node 
+      *   itself, as explained above. This has no effect on nodes that cannot 
+      *   have any children, and on <code>Attr</code>, and 
+      *   <code>EntityReference</code> nodes.
+      * @return The imported node that belongs to this <code>Document</code>.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: Raised if the type of node being imported is not 
+      *   supported.
+      *   <br>INVALID_CHARACTER_ERR: Raised if one of the imported names is not 
+      *   an XML name according to the XML version in use specified in the 
+      *   <code>Document.xmlVersion</code> attribute. This may happen when 
+      *   importing an XML 1.1 [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>] element 
+      *   into an XML 1.0 document, for instance.
+      * @since DOM Level 2
+      */
+     public Node importNode(Node importedNode, 
+                            boolean deep)
+                            throws DOMException;
+ 
+     /**
+      * Creates an element of the given qualified name and namespace URI.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value <code>null</code> as the 
+      * namespaceURI parameter for methods if they wish to have no namespace.
+      * @param namespaceURI The namespace URI of the element to create.
+      * @param qualifiedName The qualified name of the element type to 
+      *   instantiate.
+      * @return A new <code>Element</code> object with the following 
+      *   attributes:
+      * <table border='1' cellpadding='3'>
+      * <tr>
+      * <th>Attribute</th>
+      * <th>Value</th>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'><code>Node.nodeName</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>
+      *   <code>qualifiedName</code></td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'><code>Node.namespaceURI</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>
+      *   <code>namespaceURI</code></td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'><code>Node.prefix</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>prefix, extracted 
+      *   from <code>qualifiedName</code>, or <code>null</code> if there is 
+      *   no prefix</td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'><code>Node.localName</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>local name, extracted from 
+      *   <code>qualifiedName</code></td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'><code>Element.tagName</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>
+      *   <code>qualifiedName</code></td>
+      * </tr>
+      * </table>
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified 
+      *   <code>qualifiedName</code> is not an XML name according to the XML 
+      *   version in use specified in the <code>Document.xmlVersion</code> 
+      *   attribute.
+      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is a 
+      *   malformed qualified name, if the <code>qualifiedName</code> has a 
+      *   prefix and the <code>namespaceURI</code> is <code>null</code>, or 
+      *   if the <code>qualifiedName</code> has a prefix that is "xml" and 
+      *   the <code>namespaceURI</code> is different from "<a href='http://www.w3.org/XML/1998/namespace'>
+      *   http://www.w3.org/XML/1998/namespace</a>" [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      *   , or if the <code>qualifiedName</code> or its prefix is "xmlns" and 
+      *   the <code>namespaceURI</code> is different from "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>", or if the <code>namespaceURI</code> is "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>" and neither the <code>qualifiedName</code> nor its prefix is "xmlns".
+      *   <br>NOT_SUPPORTED_ERR: Always thrown if the current document does not 
+      *   support the <code>"XML"</code> feature, since namespaces were 
+      *   defined by XML.
+      * @since DOM Level 2
+      */
+     public Element createElementNS(String namespaceURI, 
+                                    String qualifiedName)
+                                    throws DOMException;
+ 
+     /**
+      * Creates an attribute of the given qualified name and namespace URI.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value <code>null</code> as the 
+      * <code>namespaceURI</code> parameter for methods if they wish to have 
+      * no namespace.
+      * @param namespaceURI The namespace URI of the attribute to create.
+      * @param qualifiedName The qualified name of the attribute to 
+      *   instantiate.
+      * @return A new <code>Attr</code> object with the following attributes:
+      * <table border='1' cellpadding='3'>
+      * <tr>
+      * <th>
+      *   Attribute</th>
+      * <th>Value</th>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'><code>Node.nodeName</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>qualifiedName</td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'>
+      *   <code>Node.namespaceURI</code></td>
+      * <td valign='top' rowspan='1' colspan='1'><code>namespaceURI</code></td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'>
+      *   <code>Node.prefix</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>prefix, extracted from 
+      *   <code>qualifiedName</code>, or <code>null</code> if there is no 
+      *   prefix</td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'><code>Node.localName</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>local name, extracted from 
+      *   <code>qualifiedName</code></td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'><code>Attr.name</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>
+      *   <code>qualifiedName</code></td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'><code>Node.nodeValue</code></td>
+      * <td valign='top' rowspan='1' colspan='1'>the empty 
+      *   string</td>
+      * </tr>
+      * </table>
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified 
+      *   <code>qualifiedName</code> is not an XML name according to the XML 
+      *   version in use specified in the <code>Document.xmlVersion</code> 
+      *   attribute.
+      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is a 
+      *   malformed qualified name, if the <code>qualifiedName</code> has a 
+      *   prefix and the <code>namespaceURI</code> is <code>null</code>, if 
+      *   the <code>qualifiedName</code> has a prefix that is "xml" and the 
+      *   <code>namespaceURI</code> is different from "<a href='http://www.w3.org/XML/1998/namespace'>
+      *   http://www.w3.org/XML/1998/namespace</a>", if the <code>qualifiedName</code> or its prefix is "xmlns" and the 
+      *   <code>namespaceURI</code> is different from "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>", or if the <code>namespaceURI</code> is "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>" and neither the <code>qualifiedName</code> nor its prefix is "xmlns".
+      *   <br>NOT_SUPPORTED_ERR: Always thrown if the current document does not 
+      *   support the <code>"XML"</code> feature, since namespaces were 
+      *   defined by XML.
+      * @since DOM Level 2
+      */
+     public Attr createAttributeNS(String namespaceURI, 
+                                   String qualifiedName)
+                                   throws DOMException;
+ 
+     /**
+      * Returns a <code>NodeList</code> of all the <code>Elements</code> with a 
+      * given local name and namespace URI in document order.
+      * @param namespaceURI The namespace URI of the elements to match on. The 
+      *   special value <code>"*"</code> matches all namespaces.
+      * @param localName The local name of the elements to match on. The 
+      *   special value "*" matches all local names.
+      * @return A new <code>NodeList</code> object containing all the matched 
+      *   <code>Elements</code>.
+      * @since DOM Level 2
+      */
+     public NodeList getElementsByTagNameNS(String namespaceURI, 
+                                            String localName);
+ 
+     /**
+      * Returns the <code>Element</code> that has an ID attribute with the 
+      * given value. If no such element exists, this returns <code>null</code>
+      * . If more than one element has an ID attribute with that value, what 
+      * is returned is undefined. 
+      * <br> The DOM implementation is expected to use the attribute 
+      * <code>Attr.isId</code> to determine if an attribute is of type ID. 
+      * <p ><b>Note:</b> Attributes with the name "ID" or "id" are not of type 
+      * ID unless so defined.
+      * @param elementId The unique <code>id</code> value for an element.
+      * @return The matching element or <code>null</code> if there is none.
+      * @since DOM Level 2
+      */
+     public Element getElementById(String elementId);
+ 
+     /**
+      * An attribute specifying the encoding used for this document at the time 
+      * of the parsing. This is <code>null</code> when it is not known, such 
+      * as when the <code>Document</code> was created in memory.
+      * @since DOM Level 3
+      */
+     public String getInputEncoding();
+ 
+     /**
+      * An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, the encoding of this document. This is <code>null</code> when 
+      * unspecified or when it is not known, such as when the 
+      * <code>Document</code> was created in memory.
+      * @since DOM Level 3
+      */
+     public String getXmlEncoding();
+ 
+     /**
+      * An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, whether this document is standalone. This is <code>false</code> when 
+      * unspecified.
+      * <p ><b>Note:</b>  No verification is done on the value when setting 
+      * this attribute. Applications should use 
+      * <code>Document.normalizeDocument()</code> with the "validate" 
+      * parameter to verify if the value matches the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#sec-rmd'>validity 
+      * constraint for standalone document declaration</a> as defined in [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. 
+      * @since DOM Level 3
+      */
+     public boolean getXmlStandalone();
+     /**
+      * An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, whether this document is standalone. This is <code>false</code> when 
+      * unspecified.
+      * <p ><b>Note:</b>  No verification is done on the value when setting 
+      * this attribute. Applications should use 
+      * <code>Document.normalizeDocument()</code> with the "validate" 
+      * parameter to verify if the value matches the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#sec-rmd'>validity 
+      * constraint for standalone document declaration</a> as defined in [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. 
+      * @exception DOMException
+      *    NOT_SUPPORTED_ERR: Raised if this document does not support the 
+      *   "XML" feature. 
+      * @since DOM Level 3
+      */
+     public void setXmlStandalone(boolean xmlStandalone)
+                                   throws DOMException;
+ 
+     /**
+      *  An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, the version number of this document. If there is no declaration and if 
+      * this document supports the "XML" feature, the value is 
+      * <code>"1.0"</code>. If this document does not support the "XML" 
+      * feature, the value is always <code>null</code>. Changing this 
+      * attribute will affect methods that check for invalid characters in 
+      * XML names. Application should invoke 
+      * <code>Document.normalizeDocument()</code> in order to check for 
+      * invalid characters in the <code>Node</code>s that are already part of 
+      * this <code>Document</code>. 
+      * <br> DOM applications may use the 
+      * <code>DOMImplementation.hasFeature(feature, version)</code> method 
+      * with parameter values "XMLVersion" and "1.0" (respectively) to 
+      * determine if an implementation supports [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. DOM 
+      * applications may use the same method with parameter values 
+      * "XMLVersion" and "1.1" (respectively) to determine if an 
+      * implementation supports [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]. In both 
+      * cases, in order to support XML, an implementation must also support 
+      * the "XML" feature defined in this specification. <code>Document</code>
+      *  objects supporting a version of the "XMLVersion" feature must not 
+      * raise a <code>NOT_SUPPORTED_ERR</code> exception for the same version 
+      * number when using <code>Document.xmlVersion</code>. 
+      * @since DOM Level 3
+      */
+     public String getXmlVersion();
+     /**
+      *  An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, the version number of this document. If there is no declaration and if 
+      * this document supports the "XML" feature, the value is 
+      * <code>"1.0"</code>. If this document does not support the "XML" 
+      * feature, the value is always <code>null</code>. Changing this 
+      * attribute will affect methods that check for invalid characters in 
+      * XML names. Application should invoke 
+      * <code>Document.normalizeDocument()</code> in order to check for 
+      * invalid characters in the <code>Node</code>s that are already part of 
+      * this <code>Document</code>. 
+      * <br> DOM applications may use the 
+      * <code>DOMImplementation.hasFeature(feature, version)</code> method 
+      * with parameter values "XMLVersion" and "1.0" (respectively) to 
+      * determine if an implementation supports [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. DOM 
+      * applications may use the same method with parameter values 
+      * "XMLVersion" and "1.1" (respectively) to determine if an 
+      * implementation supports [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]. In both 
+      * cases, in order to support XML, an implementation must also support 
+      * the "XML" feature defined in this specification. <code>Document</code>
+      *  objects supporting a version of the "XMLVersion" feature must not 
+      * raise a <code>NOT_SUPPORTED_ERR</code> exception for the same version 
+      * number when using <code>Document.xmlVersion</code>. 
+      * @exception DOMException
+      *    NOT_SUPPORTED_ERR: Raised if the version is set to a value that is 
+      *   not supported by this <code>Document</code> or if this document 
+      *   does not support the "XML" feature. 
+      * @since DOM Level 3
+      */
+     public void setXmlVersion(String xmlVersion)
+                                   throws DOMException;
+ 
+     /**
+      * An attribute specifying whether error checking is enforced or not. When 
+      * set to <code>false</code>, the implementation is free to not test 
+      * every possible error case normally defined on DOM operations, and not 
+      * raise any <code>DOMException</code> on DOM operations or report 
+      * errors while using <code>Document.normalizeDocument()</code>. In case 
+      * of error, the behavior is undefined. This attribute is 
+      * <code>true</code> by default.
+      * @since DOM Level 3
+      */
+     public boolean getStrictErrorChecking();
+     /**
+      * An attribute specifying whether error checking is enforced or not. When 
+      * set to <code>false</code>, the implementation is free to not test 
+      * every possible error case normally defined on DOM operations, and not 
+      * raise any <code>DOMException</code> on DOM operations or report 
+      * errors while using <code>Document.normalizeDocument()</code>. In case 
+      * of error, the behavior is undefined. This attribute is 
+      * <code>true</code> by default.
+      * @since DOM Level 3
+      */
+     public void setStrictErrorChecking(boolean strictErrorChecking);
+ 
+     /**
+      *  The location of the document or <code>null</code> if undefined or if 
+      * the <code>Document</code> was created using 
+      * <code>DOMImplementation.createDocument</code>. No lexical checking is 
+      * performed when setting this attribute; this could result in a 
+      * <code>null</code> value returned when using <code>Node.baseURI</code>
+      * . 
+      * <br> Beware that when the <code>Document</code> supports the feature 
+      * "HTML" [<a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>DOM Level 2 HTML</a>]
+      * , the href attribute of the HTML BASE element takes precedence over 
+      * this attribute when computing <code>Node.baseURI</code>. 
+      * @since DOM Level 3
+      */
+     public String getDocumentURI();
+     /**
+      *  The location of the document or <code>null</code> if undefined or if 
+      * the <code>Document</code> was created using 
+      * <code>DOMImplementation.createDocument</code>. No lexical checking is 
+      * performed when setting this attribute; this could result in a 
+      * <code>null</code> value returned when using <code>Node.baseURI</code>
+      * . 
+      * <br> Beware that when the <code>Document</code> supports the feature 
+      * "HTML" [<a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>DOM Level 2 HTML</a>]
+      * , the href attribute of the HTML BASE element takes precedence over 
+      * this attribute when computing <code>Node.baseURI</code>. 
+      * @since DOM Level 3
+      */
+     public void setDocumentURI(String documentURI);
+ 
+     /**
+      *  Attempts to adopt a node from another document to this document. If 
+      * supported, it changes the <code>ownerDocument</code> of the source 
+      * node, its children, as well as the attached attribute nodes if there 
+      * are any. If the source node has a parent it is first removed from the 
+      * child list of its parent. This effectively allows moving a subtree 
+      * from one document to another (unlike <code>importNode()</code> which 
+      * create a copy of the source node instead of moving it). When it 
+      * fails, applications should use <code>Document.importNode()</code> 
+      * instead. Note that if the adopted node is already part of this 
+      * document (i.e. the source and target document are the same), this 
+      * method still has the effect of removing the source node from the 
+      * child list of its parent, if any. The following list describes the 
+      * specifics for each type of node. 
+      * <dl>
+      * <dt>ATTRIBUTE_NODE</dt>
+      * <dd>The 
+      * <code>ownerElement</code> attribute is set to <code>null</code> and 
+      * the <code>specified</code> flag is set to <code>true</code> on the 
+      * adopted <code>Attr</code>. The descendants of the source 
+      * <code>Attr</code> are recursively adopted.</dd>
+      * <dt>DOCUMENT_FRAGMENT_NODE</dt>
+      * <dd>The 
+      * descendants of the source node are recursively adopted.</dd>
+      * <dt>DOCUMENT_NODE</dt>
+      * <dd>
+      * <code>Document</code> nodes cannot be adopted.</dd>
+      * <dt>DOCUMENT_TYPE_NODE</dt>
+      * <dd>
+      * <code>DocumentType</code> nodes cannot be adopted.</dd>
+      * <dt>ELEMENT_NODE</dt>
+      * <dd><em>Specified</em> attribute nodes of the source element are adopted. Default attributes 
+      * are discarded, though if the document being adopted into defines 
+      * default attributes for this element name, those are assigned. The 
+      * descendants of the source element are recursively adopted.</dd>
+      * <dt>ENTITY_NODE</dt>
+      * <dd>
+      * <code>Entity</code> nodes cannot be adopted.</dd>
+      * <dt>ENTITY_REFERENCE_NODE</dt>
+      * <dd>Only 
+      * the <code>EntityReference</code> node itself is adopted, the 
+      * descendants are discarded, since the source and destination documents 
+      * might have defined the entity differently. If the document being 
+      * imported into provides a definition for this entity name, its value 
+      * is assigned.</dd>
+      * <dt>NOTATION_NODE</dt>
+      * <dd><code>Notation</code> nodes cannot be 
+      * adopted.</dd>
+      * <dt>PROCESSING_INSTRUCTION_NODE, TEXT_NODE, CDATA_SECTION_NODE, 
+      * COMMENT_NODE</dt>
+      * <dd>These nodes can all be adopted. No specifics.</dd>
+      * </dl> 
+      * <p ><b>Note:</b>  Since it does not create new nodes unlike the 
+      * <code>Document.importNode()</code> method, this method does not raise 
+      * an <code>INVALID_CHARACTER_ERR</code> exception, and applications 
+      * should use the <code>Document.normalizeDocument()</code> method to 
+      * check if an imported name is not an XML name according to the XML 
+      * version in use. 
+      * @param source The node to move into this document.
+      * @return The adopted node, or <code>null</code> if this operation 
+      *   fails, such as when the source node comes from a different 
+      *   implementation.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: Raised if the source node is of type 
+      *   <code>DOCUMENT</code>, <code>DOCUMENT_TYPE</code>.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised when the source node is 
+      *   readonly.
+      * @since DOM Level 3
+      */
+     public Node adoptNode(Node source)
+                           throws DOMException;
+ 
+     /**
+      *  The configuration used when <code>Document.normalizeDocument()</code> 
+      * is invoked. 
+      * @since DOM Level 3
+      */
+     public DOMConfiguration getDomConfig();
+ 
+     /**
+      *  This method acts as if the document was going through a save and load 
+      * cycle, putting the document in a "normal" form. As a consequence, 
+      * this method updates the replacement tree of 
+      * <code>EntityReference</code> nodes and normalizes <code>Text</code> 
+      * nodes, as defined in the method <code>Node.normalize()</code>. 
+      * <br> Otherwise, the actual result depends on the features being set on 
+      * the <code>Document.domConfig</code> object and governing what 
+      * operations actually take place. Noticeably this method could also 
+      * make the document namespace well-formed according to the algorithm 
+      * described in , check the character normalization, remove the 
+      * <code>CDATASection</code> nodes, etc. See 
+      * <code>DOMConfiguration</code> for details. 
+      * <pre>// Keep in the document 
+      * the information defined // in the XML Information Set (Java example) 
+      * DOMConfiguration docConfig = myDocument.getDomConfig(); 
+      * docConfig.setParameter("infoset", Boolean.TRUE); 
+      * myDocument.normalizeDocument();</pre>
+      * 
+      * <br>Mutation events, when supported, are generated to reflect the 
+      * changes occurring on the document.
+      * <br> If errors occur during the invocation of this method, such as an 
+      * attempt to update a read-only node or a <code>Node.nodeName</code> 
+      * contains an invalid character according to the XML version in use, 
+      * errors or warnings (<code>DOMError.SEVERITY_ERROR</code> or 
+      * <code>DOMError.SEVERITY_WARNING</code>) will be reported using the 
+      * <code>DOMErrorHandler</code> object associated with the "error-handler
+      * " parameter. Note this method might also report fatal errors (
+      * <code>DOMError.SEVERITY_FATAL_ERROR</code>) if an implementation 
+      * cannot recover from an error. 
+      * @since DOM Level 3
+      */
+     public void normalizeDocument();
+ 
+     /**
+      * Rename an existing node of type <code>ELEMENT_NODE</code> or 
+      * <code>ATTRIBUTE_NODE</code>.
+      * <br>When possible this simply changes the name of the given node, 
+      * otherwise this creates a new node with the specified name and 
+      * replaces the existing node with the new node as described below.
+      * <br>If simply changing the name of the given node is not possible, the 
+      * following operations are performed: a new node is created, any 
+      * registered event listener is registered on the new node, any user 
+      * data attached to the old node is removed from that node, the old node 
+      * is removed from its parent if it has one, the children are moved to 
+      * the new node, if the renamed node is an <code>Element</code> its 
+      * attributes are moved to the new node, the new node is inserted at the 
+      * position the old node used to have in its parent's child nodes list 
+      * if it has one, the user data that was attached to the old node is 
+      * attached to the new node.
+      * <br>When the node being renamed is an <code>Element</code> only the 
+      * specified attributes are moved, default attributes originated from 
+      * the DTD are updated according to the new element name. In addition, 
+      * the implementation may update default attributes from other schemas. 
+      * Applications should use <code>Document.normalizeDocument()</code> to 
+      * guarantee these attributes are up-to-date.
+      * <br>When the node being renamed is an <code>Attr</code> that is 
+      * attached to an <code>Element</code>, the node is first removed from 
+      * the <code>Element</code> attributes map. Then, once renamed, either 
+      * by modifying the existing node or creating a new one as described 
+      * above, it is put back.
+      * <br>In addition,
+      * <ul>
+      * <li> a user data event <code>NODE_RENAMED</code> is fired, 
+      * </li>
+      * <li> 
+      * when the implementation supports the feature "MutationNameEvents", 
+      * each mutation operation involved in this method fires the appropriate 
+      * event, and in the end the event {
+      * <code>http://www.w3.org/2001/xml-events</code>, 
+      * <code>DOMElementNameChanged</code>} or {
+      * <code>http://www.w3.org/2001/xml-events</code>, 
+      * <code>DOMAttributeNameChanged</code>} is fired. 
+      * </li>
+      * </ul>
+      * @param n The node to rename.
+      * @param namespaceURI The new namespace URI.
+      * @param qualifiedName The new qualified name.
+      * @return The renamed node. This is either the specified node or the new 
+      *   node that was created to replace the specified node.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: Raised when the type of the specified node is 
+      *   neither <code>ELEMENT_NODE</code> nor <code>ATTRIBUTE_NODE</code>, 
+      *   or if the implementation does not support the renaming of the 
+      *   document element.
+      *   <br>INVALID_CHARACTER_ERR: Raised if the new qualified name is not an 
+      *   XML name according to the XML version in use specified in the 
+      *   <code>Document.xmlVersion</code> attribute.
+      *   <br>WRONG_DOCUMENT_ERR: Raised when the specified node was created 
+      *   from a different document than this document.
+      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is a 
+      *   malformed qualified name, if the <code>qualifiedName</code> has a 
+      *   prefix and the <code>namespaceURI</code> is <code>null</code>, or 
+      *   if the <code>qualifiedName</code> has a prefix that is "xml" and 
+      *   the <code>namespaceURI</code> is different from "<a href='http://www.w3.org/XML/1998/namespace'>
+      *   http://www.w3.org/XML/1998/namespace</a>" [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      *   . Also raised, when the node being renamed is an attribute, if the 
+      *   <code>qualifiedName</code>, or its prefix, is "xmlns" and the 
+      *   <code>namespaceURI</code> is different from "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>".
+      * @since DOM Level 3
+      */
+     public Node renameNode(Node n, 
+                            String namespaceURI, 
+                            String qualifiedName)
+                            throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DocumentFragment.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DocumentFragment.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DocumentFragment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DocumentFragment.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * <code>DocumentFragment</code> is a "lightweight" or "minimal" 
+  * <code>Document</code> object. It is very common to want to be able to 
+  * extract a portion of a document's tree or to create a new fragment of a 
+  * document. Imagine implementing a user command like cut or rearranging a 
+  * document by moving fragments around. It is desirable to have an object 
+  * which can hold such fragments and it is quite natural to use a Node for 
+  * this purpose. While it is true that a <code>Document</code> object could 
+  * fulfill this role, a <code>Document</code> object can potentially be a 
+  * heavyweight object, depending on the underlying implementation. What is 
+  * really needed for this is a very lightweight object. 
+  * <code>DocumentFragment</code> is such an object.
+  * <p>Furthermore, various operations -- such as inserting nodes as children 
+  * of another <code>Node</code> -- may take <code>DocumentFragment</code> 
+  * objects as arguments; this results in all the child nodes of the 
+  * <code>DocumentFragment</code> being moved to the child list of this node.
+  * <p>The children of a <code>DocumentFragment</code> node are zero or more 
+  * nodes representing the tops of any sub-trees defining the structure of 
+  * the document. <code>DocumentFragment</code> nodes do not need to be 
+  * well-formed XML documents (although they do need to follow the rules 
+  * imposed upon well-formed XML parsed entities, which can have multiple top 
+  * nodes). For example, a <code>DocumentFragment</code> might have only one 
+  * child and that child node could be a <code>Text</code> node. Such a 
+  * structure model represents neither an HTML document nor a well-formed XML 
+  * document.
+  * <p>When a <code>DocumentFragment</code> is inserted into a 
+  * <code>Document</code> (or indeed any other <code>Node</code> that may 
+  * take children) the children of the <code>DocumentFragment</code> and not 
+  * the <code>DocumentFragment</code> itself are inserted into the 
+  * <code>Node</code>. This makes the <code>DocumentFragment</code> very 
+  * useful when the user wishes to create nodes that are siblings; the 
+  * <code>DocumentFragment</code> acts as the parent of these nodes so that 
+  * the user can use the standard methods from the <code>Node</code> 
+  * interface, such as <code>Node.insertBefore</code> and 
+  * <code>Node.appendChild</code>.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface DocumentFragment extends Node {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DocumentType.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DocumentType.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/DocumentType.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/DocumentType.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,83 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * Each <code>Document</code> has a <code>doctype</code> attribute whose value 
+  * is either <code>null</code> or a <code>DocumentType</code> object. The 
+  * <code>DocumentType</code> interface in the DOM Core provides an interface 
+  * to the list of entities that are defined for the document, and little 
+  * else because the effect of namespaces and the various XML schema efforts 
+  * on DTD representation are not clearly understood as of this writing.
+  * <p>DOM Level 3 doesn't support editing <code>DocumentType</code> nodes. 
+  * <code>DocumentType</code> nodes are read-only.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface DocumentType extends Node {
+     /**
+      * The name of DTD; i.e., the name immediately following the 
+      * <code>DOCTYPE</code> keyword.
+      */
+     public String getName();
+ 
+     /**
+      * A <code>NamedNodeMap</code> containing the general entities, both 
+      * external and internal, declared in the DTD. Parameter entities are 
+      * not contained. Duplicates are discarded. For example in: 
+      * <pre>&lt;!DOCTYPE 
+      * ex SYSTEM "ex.dtd" [ &lt;!ENTITY foo "foo"&gt; &lt;!ENTITY bar 
+      * "bar"&gt; &lt;!ENTITY bar "bar2"&gt; &lt;!ENTITY % baz "baz"&gt; 
+      * ]&gt; &lt;ex/&gt;</pre>
+      *  the interface provides access to <code>foo</code> 
+      * and the first declaration of <code>bar</code> but not the second 
+      * declaration of <code>bar</code> or <code>baz</code>. Every node in 
+      * this map also implements the <code>Entity</code> interface.
+      * <br>The DOM Level 2 does not support editing entities, therefore 
+      * <code>entities</code> cannot be altered in any way.
+      */
+     public NamedNodeMap getEntities();
+ 
+     /**
+      * A <code>NamedNodeMap</code> containing the notations declared in the 
+      * DTD. Duplicates are discarded. Every node in this map also implements 
+      * the <code>Notation</code> interface.
+      * <br>The DOM Level 2 does not support editing notations, therefore 
+      * <code>notations</code> cannot be altered in any way.
+      */
+     public NamedNodeMap getNotations();
+ 
+     /**
+      * The public identifier of the external subset.
+      * @since DOM Level 2
+      */
+     public String getPublicId();
+ 
+     /**
+      * The system identifier of the external subset. This may be an absolute 
+      * URI or not.
+      * @since DOM Level 2
+      */
+     public String getSystemId();
+ 
+     /**
+      * The internal subset as a string, or <code>null</code> if there is none. 
+      * This is does not contain the delimiting square brackets.
+      * <p ><b>Note:</b> The actual content returned depends on how much 
+      * information is available to the implementation. This may vary 
+      * depending on various parameters, including the XML processor used to 
+      * build the document.
+      * @since DOM Level 2
+      */
+     public String getInternalSubset();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Element.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Element.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Element.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Element.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,439 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * The <code>Element</code> interface represents an element in an HTML or XML 
+  * document. Elements may have attributes associated with them; since the 
+  * <code>Element</code> interface inherits from <code>Node</code>, the 
+  * generic <code>Node</code> interface attribute <code>attributes</code> may 
+  * be used to retrieve the set of all attributes for an element. There are 
+  * methods on the <code>Element</code> interface to retrieve either an 
+  * <code>Attr</code> object by name or an attribute value by name. In XML, 
+  * where an attribute value may contain entity references, an 
+  * <code>Attr</code> object should be retrieved to examine the possibly 
+  * fairly complex sub-tree representing the attribute value. On the other 
+  * hand, in HTML, where all attributes have simple string values, methods to 
+  * directly access an attribute value can safely be used as a convenience.
+  * <p ><b>Note:</b> In DOM Level 2, the method <code>normalize</code> is 
+  * inherited from the <code>Node</code> interface where it was moved.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface Element extends Node {
+     /**
+      * The name of the element. If <code>Node.localName</code> is different 
+      * from <code>null</code>, this attribute is a qualified name. For 
+      * example, in: 
+      * <pre> &lt;elementExample id="demo"&gt; ... 
+      * &lt;/elementExample&gt; , </pre>
+      *  <code>tagName</code> has the value 
+      * <code>"elementExample"</code>. Note that this is case-preserving in 
+      * XML, as are all of the operations of the DOM. The HTML DOM returns 
+      * the <code>tagName</code> of an HTML element in the canonical 
+      * uppercase form, regardless of the case in the source HTML document.
+      */
+     public String getTagName();
+ 
+     /**
+      * Retrieves an attribute value by name.
+      * @param name The name of the attribute to retrieve.
+      * @return The <code>Attr</code> value as a string, or the empty string 
+      *   if that attribute does not have a specified or default value.
+      */
+     public String getAttribute(String name);
+ 
+     /**
+      * Adds a new attribute. If an attribute with that name is already present 
+      * in the element, its value is changed to be that of the value 
+      * parameter. This value is a simple string; it is not parsed as it is 
+      * being set. So any markup (such as syntax to be recognized as an 
+      * entity reference) is treated as literal text, and needs to be 
+      * appropriately escaped by the implementation when it is written out. 
+      * In order to assign an attribute value that contains entity 
+      * references, the user must create an <code>Attr</code> node plus any 
+      * <code>Text</code> and <code>EntityReference</code> nodes, build the 
+      * appropriate subtree, and use <code>setAttributeNode</code> to assign 
+      * it as the value of an attribute.
+      * <br>To set an attribute with a qualified name and namespace URI, use 
+      * the <code>setAttributeNS</code> method.
+      * @param name The name of the attribute to create or alter.
+      * @param value Value to set in string form.
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified name is not an XML 
+      *   name according to the XML version in use specified in the 
+      *   <code>Document.xmlVersion</code> attribute.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      */
+     public void setAttribute(String name, 
+                              String value)
+                              throws DOMException;
+ 
+     /**
+      * Removes an attribute by name. If a default value for the removed 
+      * attribute is defined in the DTD, a new attribute immediately appears 
+      * with the default value as well as the corresponding namespace URI, 
+      * local name, and prefix when applicable. The implementation may handle 
+      * default values from other schemas similarly but applications should 
+      * use <code>Document.normalizeDocument()</code> to guarantee this 
+      * information is up-to-date.
+      * <br>If no attribute with this name is found, this method has no effect.
+      * <br>To remove an attribute by local name and namespace URI, use the 
+      * <code>removeAttributeNS</code> method.
+      * @param name The name of the attribute to remove.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      */
+     public void removeAttribute(String name)
+                                 throws DOMException;
+ 
+     /**
+      * Retrieves an attribute node by name.
+      * <br>To retrieve an attribute node by qualified name and namespace URI, 
+      * use the <code>getAttributeNodeNS</code> method.
+      * @param name The name (<code>nodeName</code>) of the attribute to 
+      *   retrieve.
+      * @return The <code>Attr</code> node with the specified name (
+      *   <code>nodeName</code>) or <code>null</code> if there is no such 
+      *   attribute.
+      */
+     public Attr getAttributeNode(String name);
+ 
+     /**
+      * Adds a new attribute node. If an attribute with that name (
+      * <code>nodeName</code>) is already present in the element, it is 
+      * replaced by the new one. Replacing an attribute node by itself has no 
+      * effect.
+      * <br>To add a new attribute node with a qualified name and namespace 
+      * URI, use the <code>setAttributeNodeNS</code> method.
+      * @param newAttr The <code>Attr</code> node to add to the attribute list.
+      * @return If the <code>newAttr</code> attribute replaces an existing 
+      *   attribute, the replaced <code>Attr</code> node is returned, 
+      *   otherwise <code>null</code> is returned.
+      * @exception DOMException
+      *   WRONG_DOCUMENT_ERR: Raised if <code>newAttr</code> was created from a 
+      *   different document than the one that created the element.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>INUSE_ATTRIBUTE_ERR: Raised if <code>newAttr</code> is already an 
+      *   attribute of another <code>Element</code> object. The DOM user must 
+      *   explicitly clone <code>Attr</code> nodes to re-use them in other 
+      *   elements.
+      */
+     public Attr setAttributeNode(Attr newAttr)
+                                  throws DOMException;
+ 
+     /**
+      * Removes the specified attribute node. If a default value for the 
+      * removed <code>Attr</code> node is defined in the DTD, a new node 
+      * immediately appears with the default value as well as the 
+      * corresponding namespace URI, local name, and prefix when applicable. 
+      * The implementation may handle default values from other schemas 
+      * similarly but applications should use 
+      * <code>Document.normalizeDocument()</code> to guarantee this 
+      * information is up-to-date.
+      * @param oldAttr The <code>Attr</code> node to remove from the attribute 
+      *   list.
+      * @return The <code>Attr</code> node that was removed.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>NOT_FOUND_ERR: Raised if <code>oldAttr</code> is not an attribute 
+      *   of the element.
+      */
+     public Attr removeAttributeNode(Attr oldAttr)
+                                     throws DOMException;
+ 
+     /**
+      * Returns a <code>NodeList</code> of all descendant <code>Elements</code> 
+      * with a given tag name, in document order.
+      * @param name The name of the tag to match on. The special value "*" 
+      *   matches all tags.
+      * @return A list of matching <code>Element</code> nodes.
+      */
+     public NodeList getElementsByTagName(String name);
+ 
+     /**
+      * Retrieves an attribute value by local name and namespace URI.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value <code>null</code> as the 
+      * <code>namespaceURI</code> parameter for methods if they wish to have 
+      * no namespace.
+      * @param namespaceURI The namespace URI of the attribute to retrieve.
+      * @param localName The local name of the attribute to retrieve.
+      * @return The <code>Attr</code> value as a string, or the empty string 
+      *   if that attribute does not have a specified or default value.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature <code>"XML"</code> and the language exposed 
+      *   through the Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public String getAttributeNS(String namespaceURI, 
+                                  String localName)
+                                  throws DOMException;
+ 
+     /**
+      * Adds a new attribute. If an attribute with the same local name and 
+      * namespace URI is already present on the element, its prefix is 
+      * changed to be the prefix part of the <code>qualifiedName</code>, and 
+      * its value is changed to be the <code>value</code> parameter. This 
+      * value is a simple string; it is not parsed as it is being set. So any 
+      * markup (such as syntax to be recognized as an entity reference) is 
+      * treated as literal text, and needs to be appropriately escaped by the 
+      * implementation when it is written out. In order to assign an 
+      * attribute value that contains entity references, the user must create 
+      * an <code>Attr</code> node plus any <code>Text</code> and 
+      * <code>EntityReference</code> nodes, build the appropriate subtree, 
+      * and use <code>setAttributeNodeNS</code> or 
+      * <code>setAttributeNode</code> to assign it as the value of an 
+      * attribute.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value <code>null</code> as the 
+      * <code>namespaceURI</code> parameter for methods if they wish to have 
+      * no namespace.
+      * @param namespaceURI The namespace URI of the attribute to create or 
+      *   alter.
+      * @param qualifiedName The qualified name of the attribute to create or 
+      *   alter.
+      * @param value The value to set in string form.
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified qualified name is not 
+      *   an XML name according to the XML version in use specified in the 
+      *   <code>Document.xmlVersion</code> attribute.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is 
+      *   malformed per the Namespaces in XML specification, if the 
+      *   <code>qualifiedName</code> has a prefix and the 
+      *   <code>namespaceURI</code> is <code>null</code>, if the 
+      *   <code>qualifiedName</code> has a prefix that is "xml" and the 
+      *   <code>namespaceURI</code> is different from "<a href='http://www.w3.org/XML/1998/namespace'>
+      *   http://www.w3.org/XML/1998/namespace</a>", if the <code>qualifiedName</code> or its prefix is "xmlns" and the 
+      *   <code>namespaceURI</code> is different from "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>", or if the <code>namespaceURI</code> is "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>" and neither the <code>qualifiedName</code> nor its prefix is "xmlns".
+      *   <br>NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature <code>"XML"</code> and the language exposed 
+      *   through the Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public void setAttributeNS(String namespaceURI, 
+                                String qualifiedName, 
+                                String value)
+                                throws DOMException;
+ 
+     /**
+      * Removes an attribute by local name and namespace URI. If a default 
+      * value for the removed attribute is defined in the DTD, a new 
+      * attribute immediately appears with the default value as well as the 
+      * corresponding namespace URI, local name, and prefix when applicable. 
+      * The implementation may handle default values from other schemas 
+      * similarly but applications should use 
+      * <code>Document.normalizeDocument()</code> to guarantee this 
+      * information is up-to-date.
+      * <br>If no attribute with this local name and namespace URI is found, 
+      * this method has no effect.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value <code>null</code> as the 
+      * <code>namespaceURI</code> parameter for methods if they wish to have 
+      * no namespace.
+      * @param namespaceURI The namespace URI of the attribute to remove.
+      * @param localName The local name of the attribute to remove.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature <code>"XML"</code> and the language exposed 
+      *   through the Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public void removeAttributeNS(String namespaceURI, 
+                                   String localName)
+                                   throws DOMException;
+ 
+     /**
+      * Retrieves an <code>Attr</code> node by local name and namespace URI.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value <code>null</code> as the 
+      * <code>namespaceURI</code> parameter for methods if they wish to have 
+      * no namespace.
+      * @param namespaceURI The namespace URI of the attribute to retrieve.
+      * @param localName The local name of the attribute to retrieve.
+      * @return The <code>Attr</code> node with the specified attribute local 
+      *   name and namespace URI or <code>null</code> if there is no such 
+      *   attribute.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature <code>"XML"</code> and the language exposed 
+      *   through the Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public Attr getAttributeNodeNS(String namespaceURI, 
+                                    String localName)
+                                    throws DOMException;
+ 
+     /**
+      * Adds a new attribute. If an attribute with that local name and that 
+      * namespace URI is already present in the element, it is replaced by 
+      * the new one. Replacing an attribute node by itself has no effect.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value <code>null</code> as the 
+      * <code>namespaceURI</code> parameter for methods if they wish to have 
+      * no namespace.
+      * @param newAttr The <code>Attr</code> node to add to the attribute list.
+      * @return If the <code>newAttr</code> attribute replaces an existing 
+      *   attribute with the same local name and namespace URI, the replaced 
+      *   <code>Attr</code> node is returned, otherwise <code>null</code> is 
+      *   returned.
+      * @exception DOMException
+      *   WRONG_DOCUMENT_ERR: Raised if <code>newAttr</code> was created from a 
+      *   different document than the one that created the element.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>INUSE_ATTRIBUTE_ERR: Raised if <code>newAttr</code> is already an 
+      *   attribute of another <code>Element</code> object. The DOM user must 
+      *   explicitly clone <code>Attr</code> nodes to re-use them in other 
+      *   elements.
+      *   <br>NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature <code>"XML"</code> and the language exposed 
+      *   through the Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public Attr setAttributeNodeNS(Attr newAttr)
+                                    throws DOMException;
+ 
+     /**
+      * Returns a <code>NodeList</code> of all the descendant 
+      * <code>Elements</code> with a given local name and namespace URI in 
+      * document order.
+      * @param namespaceURI The namespace URI of the elements to match on. The 
+      *   special value "*" matches all namespaces.
+      * @param localName The local name of the elements to match on. The 
+      *   special value "*" matches all local names.
+      * @return A new <code>NodeList</code> object containing all the matched 
+      *   <code>Elements</code>.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature <code>"XML"</code> and the language exposed 
+      *   through the Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public NodeList getElementsByTagNameNS(String namespaceURI, 
+                                            String localName)
+                                            throws DOMException;
+ 
+     /**
+      * Returns <code>true</code> when an attribute with a given name is 
+      * specified on this element or has a default value, <code>false</code> 
+      * otherwise.
+      * @param name The name of the attribute to look for.
+      * @return <code>true</code> if an attribute with the given name is 
+      *   specified on this element or has a default value, <code>false</code>
+      *    otherwise.
+      * @since DOM Level 2
+      */
+     public boolean hasAttribute(String name);
+ 
+     /**
+      * Returns <code>true</code> when an attribute with a given local name and 
+      * namespace URI is specified on this element or has a default value, 
+      * <code>false</code> otherwise.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value <code>null</code> as the 
+      * <code>namespaceURI</code> parameter for methods if they wish to have 
+      * no namespace.
+      * @param namespaceURI The namespace URI of the attribute to look for.
+      * @param localName The local name of the attribute to look for.
+      * @return <code>true</code> if an attribute with the given local name 
+      *   and namespace URI is specified or has a default value on this 
+      *   element, <code>false</code> otherwise.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature <code>"XML"</code> and the language exposed 
+      *   through the Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public boolean hasAttributeNS(String namespaceURI, 
+                                   String localName)
+                                   throws DOMException;
+ 
+     /**
+      *  The type information associated with this element. 
+      * @since DOM Level 3
+      */
+     public TypeInfo getSchemaTypeInfo();
+ 
+     /**
+      *  If the parameter <code>isId</code> is <code>true</code>, this method 
+      * declares the specified attribute to be a user-determined ID attribute
+      * . This affects the value of <code>Attr.isId</code> and the behavior 
+      * of <code>Document.getElementById</code>, but does not change any 
+      * schema that may be in use, in particular this does not affect the 
+      * <code>Attr.schemaTypeInfo</code> of the specified <code>Attr</code> 
+      * node. Use the value <code>false</code> for the parameter 
+      * <code>isId</code> to undeclare an attribute for being a 
+      * user-determined ID attribute. 
+      * <br> To specify an attribute by local name and namespace URI, use the 
+      * <code>setIdAttributeNS</code> method. 
+      * @param name The name of the attribute.
+      * @param isId Whether the attribute is a of type ID.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>NOT_FOUND_ERR: Raised if the specified node is not an attribute 
+      *   of this element.
+      * @since DOM Level 3
+      */
+     public void setIdAttribute(String name, 
+                                boolean isId)
+                                throws DOMException;
+ 
+     /**
+      *  If the parameter <code>isId</code> is <code>true</code>, this method 
+      * declares the specified attribute to be a user-determined ID attribute
+      * . This affects the value of <code>Attr.isId</code> and the behavior 
+      * of <code>Document.getElementById</code>, but does not change any 
+      * schema that may be in use, in particular this does not affect the 
+      * <code>Attr.schemaTypeInfo</code> of the specified <code>Attr</code> 
+      * node. Use the value <code>false</code> for the parameter 
+      * <code>isId</code> to undeclare an attribute for being a 
+      * user-determined ID attribute. 
+      * @param namespaceURI The namespace URI of the attribute.
+      * @param localName The local name of the attribute.
+      * @param isId Whether the attribute is a of type ID.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>NOT_FOUND_ERR: Raised if the specified node is not an attribute 
+      *   of this element.
+      * @since DOM Level 3
+      */
+     public void setIdAttributeNS(String namespaceURI, 
+                                  String localName, 
+                                  boolean isId)
+                                  throws DOMException;
+ 
+     /**
+      *  If the parameter <code>isId</code> is <code>true</code>, this method 
+      * declares the specified attribute to be a user-determined ID attribute
+      * . This affects the value of <code>Attr.isId</code> and the behavior 
+      * of <code>Document.getElementById</code>, but does not change any 
+      * schema that may be in use, in particular this does not affect the 
+      * <code>Attr.schemaTypeInfo</code> of the specified <code>Attr</code> 
+      * node. Use the value <code>false</code> for the parameter 
+      * <code>isId</code> to undeclare an attribute for being a 
+      * user-determined ID attribute. 
+      * @param idAttr The attribute node.
+      * @param isId Whether the attribute is a of type ID.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>NOT_FOUND_ERR: Raised if the specified node is not an attribute 
+      *   of this element.
+      * @since DOM Level 3
+      */
+     public void setIdAttributeNode(Attr idAttr, 
+                                    boolean isId)
+                                    throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Entity.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Entity.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Entity.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Entity.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * This interface represents a known entity, either parsed or unparsed, in an 
+  * XML document. Note that this models the entity itself <em>not</em> the entity declaration.
+  * <p>The <code>nodeName</code> attribute that is inherited from 
+  * <code>Node</code> contains the name of the entity.
+  * <p>An XML processor may choose to completely expand entities before the 
+  * structure model is passed to the DOM; in this case there will be no 
+  * <code>EntityReference</code> nodes in the document tree.
+  * <p>XML does not mandate that a non-validating XML processor read and 
+  * process entity declarations made in the external subset or declared in 
+  * parameter entities. This means that parsed entities declared in the 
+  * external subset need not be expanded by some classes of applications, and 
+  * that the replacement text of the entity may not be available. When the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#intern-replacement'>
+  * replacement text</a> is available, the corresponding <code>Entity</code> node's child list 
+  * represents the structure of that replacement value. Otherwise, the child 
+  * list is empty.
+  * <p>DOM Level 3 does not support editing <code>Entity</code> nodes; if a 
+  * user wants to make changes to the contents of an <code>Entity</code>, 
+  * every related <code>EntityReference</code> node has to be replaced in the 
+  * structure model by a clone of the <code>Entity</code>'s contents, and 
+  * then the desired changes must be made to each of those clones instead. 
+  * <code>Entity</code> nodes and all their descendants are readonly.
+  * <p>An <code>Entity</code> node does not have any parent.
+  * <p ><b>Note:</b> If the entity contains an unbound namespace prefix, the 
+  * <code>namespaceURI</code> of the corresponding node in the 
+  * <code>Entity</code> node subtree is <code>null</code>. The same is true 
+  * for <code>EntityReference</code> nodes that refer to this entity, when 
+  * they are created using the <code>createEntityReference</code> method of 
+  * the <code>Document</code> interface.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface Entity extends Node {
+     /**
+      * The public identifier associated with the entity if specified, and 
+      * <code>null</code> otherwise.
+      */
+     public String getPublicId();
+ 
+     /**
+      * The system identifier associated with the entity if specified, and 
+      * <code>null</code> otherwise. This may be an absolute URI or not.
+      */
+     public String getSystemId();
+ 
+     /**
+      * For unparsed entities, the name of the notation for the entity. For 
+      * parsed entities, this is <code>null</code>.
+      */
+     public String getNotationName();
+ 
+     /**
+      * An attribute specifying the encoding used for this entity at the time 
+      * of parsing, when it is an external parsed entity. This is 
+      * <code>null</code> if it an entity from the internal subset or if it 
+      * is not known.
+      * @since DOM Level 3
+      */
+     public String getInputEncoding();
+ 
+     /**
+      * An attribute specifying, as part of the text declaration, the encoding 
+      * of this entity, when it is an external parsed entity. This is 
+      * <code>null</code> otherwise.
+      * @since DOM Level 3
+      */
+     public String getXmlEncoding();
+ 
+     /**
+      * An attribute specifying, as part of the text declaration, the version 
+      * number of this entity, when it is an external parsed entity. This is 
+      * <code>null</code> otherwise.
+      * @since DOM Level 3
+      */
+     public String getXmlVersion();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/EntityReference.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/EntityReference.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/EntityReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/EntityReference.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,43 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * <code>EntityReference</code> nodes may be used to represent an entity 
+  * reference in the tree. Note that character references and references to 
+  * predefined entities are considered to be expanded by the HTML or XML 
+  * processor so that characters are represented by their Unicode equivalent 
+  * rather than by an entity reference. Moreover, the XML processor may 
+  * completely expand references to entities while building the 
+  * <code>Document</code>, instead of providing <code>EntityReference</code> 
+  * nodes. If it does provide such nodes, then for an 
+  * <code>EntityReference</code> node that represents a reference to a known 
+  * entity an <code>Entity</code> exists, and the subtree of the 
+  * <code>EntityReference</code> node is a copy of the <code>Entity</code> 
+  * node subtree. However, the latter may not be true when an entity contains 
+  * an unbound namespace prefix. In such a case, because the namespace prefix 
+  * resolution depends on where the entity reference is, the descendants of 
+  * the <code>EntityReference</code> node may be bound to different namespace 
+  * URIs. When an <code>EntityReference</code> node represents a reference to 
+  * an unknown entity, the node has no children and its replacement value, 
+  * when used by <code>Attr.value</code> for example, is empty.
+  * <p>As for <code>Entity</code> nodes, <code>EntityReference</code> nodes and 
+  * all their descendants are readonly.
+  * <p ><b>Note:</b> <code>EntityReference</code> nodes may cause element 
+  * content and attribute value normalization problems when, such as in XML 
+  * 1.0 and XML Schema, the normalization is performed after entity reference 
+  * are expanded.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface EntityReference extends Node {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/NameList.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/NameList.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/NameList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/NameList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  *  The <code>NameList</code> interface provides the abstraction of an ordered 
+  * collection of parallel pairs of name and namespace values (which could be 
+  * null values), without defining or constraining how this collection is 
+  * implemented. The items in the <code>NameList</code> are accessible via an 
+  * integral index, starting from 0. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface NameList {
+     /**
+      *  Returns the <code>index</code>th name item in the collection. 
+      * @param index Index into the collection.
+      * @return  The name at the <code>index</code>th position in the 
+      *   <code>NameList</code>, or <code>null</code> if there is no name for 
+      *   the specified index or if the index is out of range. 
+      */
+     public String getName(int index);
+ 
+     /**
+      *  Returns the <code>index</code>th namespaceURI item in the collection. 
+      * @param index Index into the collection.
+      * @return  The namespace URI at the <code>index</code>th position in the 
+      *   <code>NameList</code>, or <code>null</code> if there is no name for 
+      *   the specified index or if the index is out of range. 
+      */
+     public String getNamespaceURI(int index);
+ 
+     /**
+      *  The number of pairs (name and namespaceURI) in the list. The range of 
+      * valid child node indices is 0 to <code>length-1</code> inclusive. 
+      */
+     public int getLength();
+ 
+     /**
+      *  Test if a name is part of this <code>NameList</code>. 
+      * @param str  The name to look for. 
+      * @return  <code>true</code> if the name has been found, 
+      *   <code>false</code> otherwise. 
+      */
+     public boolean contains(String str);
+ 
+     /**
+      *  Test if the pair namespaceURI/name is part of this 
+      * <code>NameList</code>. 
+      * @param namespaceURI  The namespace URI to look for. 
+      * @param name  The name to look for. 
+      * @return  <code>true</code> if the pair namespaceURI/name has been 
+      *   found, <code>false</code> otherwise. 
+      */
+     public boolean containsNS(String namespaceURI, 
+                               String name);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/NamedNodeMap.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/NamedNodeMap.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/NamedNodeMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/NamedNodeMap.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,183 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * Objects implementing the <code>NamedNodeMap</code> interface are used to 
+  * represent collections of nodes that can be accessed by name. Note that 
+  * <code>NamedNodeMap</code> does not inherit from <code>NodeList</code>; 
+  * <code>NamedNodeMaps</code> are not maintained in any particular order. 
+  * Objects contained in an object implementing <code>NamedNodeMap</code> may 
+  * also be accessed by an ordinal index, but this is simply to allow 
+  * convenient enumeration of the contents of a <code>NamedNodeMap</code>, 
+  * and does not imply that the DOM specifies an order to these Nodes. 
+  * <p><code>NamedNodeMap</code> objects in the DOM are live.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface NamedNodeMap {
+     /**
+      * Retrieves a node specified by name.
+      * @param name The <code>nodeName</code> of a node to retrieve.
+      * @return A <code>Node</code> (of any type) with the specified 
+      *   <code>nodeName</code>, or <code>null</code> if it does not identify 
+      *   any node in this map.
+      */
+     public Node getNamedItem(String name);
+ 
+     /**
+      * Adds a node using its <code>nodeName</code> attribute. If a node with 
+      * that name is already present in this map, it is replaced by the new 
+      * one. Replacing a node by itself has no effect.
+      * <br>As the <code>nodeName</code> attribute is used to derive the name 
+      * which the node must be stored under, multiple nodes of certain types 
+      * (those that have a "special" string value) cannot be stored as the 
+      * names would clash. This is seen as preferable to allowing nodes to be 
+      * aliased.
+      * @param arg A node to store in this map. The node will later be 
+      *   accessible using the value of its <code>nodeName</code> attribute.
+      * @return If the new <code>Node</code> replaces an existing node the 
+      *   replaced <code>Node</code> is returned, otherwise <code>null</code> 
+      *   is returned.
+      * @exception DOMException
+      *   WRONG_DOCUMENT_ERR: Raised if <code>arg</code> was created from a 
+      *   different document than the one that created this map.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly.
+      *   <br>INUSE_ATTRIBUTE_ERR: Raised if <code>arg</code> is an 
+      *   <code>Attr</code> that is already an attribute of another 
+      *   <code>Element</code> object. The DOM user must explicitly clone 
+      *   <code>Attr</code> nodes to re-use them in other elements.
+      *   <br>HIERARCHY_REQUEST_ERR: Raised if an attempt is made to add a node 
+      *   doesn't belong in this NamedNodeMap. Examples would include trying 
+      *   to insert something other than an Attr node into an Element's map 
+      *   of attributes, or a non-Entity node into the DocumentType's map of 
+      *   Entities.
+      */
+     public Node setNamedItem(Node arg)
+                              throws DOMException;
+ 
+     /**
+      * Removes a node specified by name. When this map contains the attributes 
+      * attached to an element, if the removed attribute is known to have a 
+      * default value, an attribute immediately appears containing the 
+      * default value as well as the corresponding namespace URI, local name, 
+      * and prefix when applicable.
+      * @param name The <code>nodeName</code> of the node to remove.
+      * @return The node removed from this map if a node with such a name 
+      *   exists.
+      * @exception DOMException
+      *   NOT_FOUND_ERR: Raised if there is no node named <code>name</code> in 
+      *   this map.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly.
+      */
+     public Node removeNamedItem(String name)
+                                 throws DOMException;
+ 
+     /**
+      * Returns the <code>index</code>th item in the map. If <code>index</code> 
+      * is greater than or equal to the number of nodes in this map, this 
+      * returns <code>null</code>.
+      * @param index Index into this map.
+      * @return The node at the <code>index</code>th position in the map, or 
+      *   <code>null</code> if that is not a valid index.
+      */
+     public Node item(int index);
+ 
+     /**
+      * The number of nodes in this map. The range of valid child node indices 
+      * is <code>0</code> to <code>length-1</code> inclusive.
+      */
+     public int getLength();
+ 
+     /**
+      * Retrieves a node specified by local name and namespace URI.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value null as the namespaceURI parameter 
+      * for methods if they wish to have no namespace.
+      * @param namespaceURI The namespace URI of the node to retrieve.
+      * @param localName The local name of the node to retrieve.
+      * @return A <code>Node</code> (of any type) with the specified local 
+      *   name and namespace URI, or <code>null</code> if they do not 
+      *   identify any node in this map.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature "XML" and the language exposed through the 
+      *   Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public Node getNamedItemNS(String namespaceURI, 
+                                String localName)
+                                throws DOMException;
+ 
+     /**
+      * Adds a node using its <code>namespaceURI</code> and 
+      * <code>localName</code>. If a node with that namespace URI and that 
+      * local name is already present in this map, it is replaced by the new 
+      * one. Replacing a node by itself has no effect.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value null as the namespaceURI parameter 
+      * for methods if they wish to have no namespace.
+      * @param arg A node to store in this map. The node will later be 
+      *   accessible using the value of its <code>namespaceURI</code> and 
+      *   <code>localName</code> attributes.
+      * @return If the new <code>Node</code> replaces an existing node the 
+      *   replaced <code>Node</code> is returned, otherwise <code>null</code> 
+      *   is returned.
+      * @exception DOMException
+      *   WRONG_DOCUMENT_ERR: Raised if <code>arg</code> was created from a 
+      *   different document than the one that created this map.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly.
+      *   <br>INUSE_ATTRIBUTE_ERR: Raised if <code>arg</code> is an 
+      *   <code>Attr</code> that is already an attribute of another 
+      *   <code>Element</code> object. The DOM user must explicitly clone 
+      *   <code>Attr</code> nodes to re-use them in other elements.
+      *   <br>HIERARCHY_REQUEST_ERR: Raised if an attempt is made to add a node 
+      *   doesn't belong in this NamedNodeMap. Examples would include trying 
+      *   to insert something other than an Attr node into an Element's map 
+      *   of attributes, or a non-Entity node into the DocumentType's map of 
+      *   Entities.
+      *   <br>NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature "XML" and the language exposed through the 
+      *   Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public Node setNamedItemNS(Node arg)
+                                throws DOMException;
+ 
+     /**
+      * Removes a node specified by local name and namespace URI. A removed 
+      * attribute may be known to have a default value when this map contains 
+      * the attributes attached to an element, as returned by the attributes 
+      * attribute of the <code>Node</code> interface. If so, an attribute 
+      * immediately appears containing the default value as well as the 
+      * corresponding namespace URI, local name, and prefix when applicable.
+      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      * , applications must use the value null as the namespaceURI parameter 
+      * for methods if they wish to have no namespace.
+      * @param namespaceURI The namespace URI of the node to remove.
+      * @param localName The local name of the node to remove.
+      * @return The node removed from this map if a node with such a local 
+      *   name and namespace URI exists.
+      * @exception DOMException
+      *   NOT_FOUND_ERR: Raised if there is no node with the specified 
+      *   <code>namespaceURI</code> and <code>localName</code> in this map.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly.
+      *   <br>NOT_SUPPORTED_ERR: May be raised if the implementation does not 
+      *   support the feature "XML" and the language exposed through the 
+      *   Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 
+      * @since DOM Level 2
+      */
+     public Node removeNamedItemNS(String namespaceURI, 
+                                   String localName)
+                                   throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Node.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Node.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Node.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Node.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,900 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * The <code>Node</code> interface is the primary datatype for the entire 
+  * Document Object Model. It represents a single node in the document tree. 
+  * While all objects implementing the <code>Node</code> interface expose 
+  * methods for dealing with children, not all objects implementing the 
+  * <code>Node</code> interface may have children. For example, 
+  * <code>Text</code> nodes may not have children, and adding children to 
+  * such nodes results in a <code>DOMException</code> being raised.
+  * <p>The attributes <code>nodeName</code>, <code>nodeValue</code> and 
+  * <code>attributes</code> are included as a mechanism to get at node 
+  * information without casting down to the specific derived interface. In 
+  * cases where there is no obvious mapping of these attributes for a 
+  * specific <code>nodeType</code> (e.g., <code>nodeValue</code> for an 
+  * <code>Element</code> or <code>attributes</code> for a <code>Comment</code>
+  * ), this returns <code>null</code>. Note that the specialized interfaces 
+  * may contain additional and more convenient mechanisms to get and set the 
+  * relevant information.
+  * <p>The values of <code>nodeName</code>, 
+  * <code>nodeValue</code>, and <code>attributes</code> vary according to the 
+  * node type as follows: 
+  * <table border='1' cellpadding='3'>
+  * <tr>
+  * <th>Interface</th>
+  * <th>nodeName</th>
+  * <th>nodeValue</th>
+  * <th>attributes</th>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>Attr</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>same as <code>Attr.name</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>same as 
+  * <code>Attr.value</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'><code>CDATASection</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>"#cdata-section"</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>same as <code>CharacterData.data</code>, the 
+  * content of the CDATA Section</td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'><code>Comment</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>"#comment"</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>same as <code>CharacterData.data</code>, the 
+  * content of the comment</td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'><code>Document</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>"#document"</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>DocumentFragment</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>"#document-fragment"</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>null</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'><code>DocumentType</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>same as 
+  * <code>DocumentType.name</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>Element</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>same as <code>Element.tagName</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>NamedNodeMap</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'><code>Entity</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>entity name</td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'><code>EntityReference</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>name of entity referenced</td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>null</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'><code>Notation</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>notation name</td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>null</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'><code>ProcessingInstruction</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>same 
+  * as <code>ProcessingInstruction.target</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>same as 
+  * <code>ProcessingInstruction.data</code></td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * <tr>
+  * <td valign='top' rowspan='1' colspan='1'><code>Text</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>
+  * <code>"#text"</code></td>
+  * <td valign='top' rowspan='1' colspan='1'>same as <code>CharacterData.data</code>, the content 
+  * of the text node</td>
+  * <td valign='top' rowspan='1' colspan='1'><code>null</code></td>
+  * </tr>
+  * </table> 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface Node {
+     // NodeType
+     /**
+      * The node is an <code>Element</code>.
+      */
+     public static final short ELEMENT_NODE              = 1;
+     /**
+      * The node is an <code>Attr</code>.
+      */
+     public static final short ATTRIBUTE_NODE            = 2;
+     /**
+      * The node is a <code>Text</code> node.
+      */
+     public static final short TEXT_NODE                 = 3;
+     /**
+      * The node is a <code>CDATASection</code>.
+      */
+     public static final short CDATA_SECTION_NODE        = 4;
+     /**
+      * The node is an <code>EntityReference</code>.
+      */
+     public static final short ENTITY_REFERENCE_NODE     = 5;
+     /**
+      * The node is an <code>Entity</code>.
+      */
+     public static final short ENTITY_NODE               = 6;
+     /**
+      * The node is a <code>ProcessingInstruction</code>.
+      */
+     public static final short PROCESSING_INSTRUCTION_NODE = 7;
+     /**
+      * The node is a <code>Comment</code>.
+      */
+     public static final short COMMENT_NODE              = 8;
+     /**
+      * The node is a <code>Document</code>.
+      */
+     public static final short DOCUMENT_NODE             = 9;
+     /**
+      * The node is a <code>DocumentType</code>.
+      */
+     public static final short DOCUMENT_TYPE_NODE        = 10;
+     /**
+      * The node is a <code>DocumentFragment</code>.
+      */
+     public static final short DOCUMENT_FRAGMENT_NODE    = 11;
+     /**
+      * The node is a <code>Notation</code>.
+      */
+     public static final short NOTATION_NODE             = 12;
+ 
+     /**
+      * The name of this node, depending on its type; see the table above.
+      */
+     public String getNodeName();
+ 
+     /**
+      * The value of this node, depending on its type; see the table above. 
+      * When it is defined to be <code>null</code>, setting it has no effect, 
+      * including if the node is read-only.
+      * @exception DOMException
+      *   DOMSTRING_SIZE_ERR: Raised when it would return more characters than 
+      *   fit in a <code>DOMString</code> variable on the implementation 
+      *   platform.
+      */
+     public String getNodeValue()
+                               throws DOMException;
+     /**
+      * The value of this node, depending on its type; see the table above. 
+      * When it is defined to be <code>null</code>, setting it has no effect, 
+      * including if the node is read-only.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly and if 
+      *   it is not defined to be <code>null</code>.
+      */
+     public void setNodeValue(String nodeValue)
+                               throws DOMException;
+ 
+     /**
+      * A code representing the type of the underlying object, as defined above.
+      */
+     public short getNodeType();
+ 
+     /**
+      * The parent of this node. All nodes, except <code>Attr</code>, 
+      * <code>Document</code>, <code>DocumentFragment</code>, 
+      * <code>Entity</code>, and <code>Notation</code> may have a parent. 
+      * However, if a node has just been created and not yet added to the 
+      * tree, or if it has been removed from the tree, this is 
+      * <code>null</code>. 
+      */
+     public Node getParentNode();
+ 
+     /**
+      * A <code>NodeList</code> that contains all children of this node. If 
+      * there are no children, this is a <code>NodeList</code> containing no 
+      * nodes.
+      */
+     public NodeList getChildNodes();
+ 
+     /**
+      * The first child of this node. If there is no such node, this returns 
+      * <code>null</code>.
+      */
+     public Node getFirstChild();
+ 
+     /**
+      * The last child of this node. If there is no such node, this returns 
+      * <code>null</code>.
+      */
+     public Node getLastChild();
+ 
+     /**
+      * The node immediately preceding this node. If there is no such node, 
+      * this returns <code>null</code>.
+      */
+     public Node getPreviousSibling();
+ 
+     /**
+      * The node immediately following this node. If there is no such node, 
+      * this returns <code>null</code>.
+      */
+     public Node getNextSibling();
+ 
+     /**
+      * A <code>NamedNodeMap</code> containing the attributes of this node (if 
+      * it is an <code>Element</code>) or <code>null</code> otherwise.
+      */
+     public NamedNodeMap getAttributes();
+ 
+     /**
+      * The <code>Document</code> object associated with this node. This is 
+      * also the <code>Document</code> object used to create new nodes. When 
+      * this node is a <code>Document</code> or a <code>DocumentType</code> 
+      * which is not used with any <code>Document</code> yet, this is 
+      * <code>null</code>.
+      * @version DOM Level 2
+      */
+     public Document getOwnerDocument();
+ 
+     /**
+      * Inserts the node <code>newChild</code> before the existing child node 
+      * <code>refChild</code>. If <code>refChild</code> is <code>null</code>, 
+      * insert <code>newChild</code> at the end of the list of children.
+      * <br>If <code>newChild</code> is a <code>DocumentFragment</code> object, 
+      * all of its children are inserted, in the same order, before 
+      * <code>refChild</code>. If the <code>newChild</code> is already in the 
+      * tree, it is first removed.
+      * <p ><b>Note:</b>  Inserting a node before itself is implementation 
+      * dependent. 
+      * @param newChild The node to insert.
+      * @param refChild The reference node, i.e., the node before which the 
+      *   new node must be inserted.
+      * @return The node being inserted.
+      * @exception DOMException
+      *   HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not 
+      *   allow children of the type of the <code>newChild</code> node, or if 
+      *   the node to insert is one of this node's ancestors or this node 
+      *   itself, or if this node is of type <code>Document</code> and the 
+      *   DOM application attempts to insert a second 
+      *   <code>DocumentType</code> or <code>Element</code> node.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>newChild</code> was created 
+      *   from a different document than the one that created this node.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly or 
+      *   if the parent of the node being inserted is readonly.
+      *   <br>NOT_FOUND_ERR: Raised if <code>refChild</code> is not a child of 
+      *   this node.
+      *   <br>NOT_SUPPORTED_ERR: if this node is of type <code>Document</code>, 
+      *   this exception might be raised if the DOM implementation doesn't 
+      *   support the insertion of a <code>DocumentType</code> or 
+      *   <code>Element</code> node.
+      * @version DOM Level 3
+      */
+     public Node insertBefore(Node newChild, 
+                              Node refChild)
+                              throws DOMException;
+ 
+     /**
+      * Replaces the child node <code>oldChild</code> with <code>newChild</code>
+      *  in the list of children, and returns the <code>oldChild</code> node.
+      * <br>If <code>newChild</code> is a <code>DocumentFragment</code> object, 
+      * <code>oldChild</code> is replaced by all of the 
+      * <code>DocumentFragment</code> children, which are inserted in the 
+      * same order. If the <code>newChild</code> is already in the tree, it 
+      * is first removed.
+      * <p ><b>Note:</b>  Replacing a node with itself is implementation 
+      * dependent. 
+      * @param newChild The new node to put in the child list.
+      * @param oldChild The node being replaced in the list.
+      * @return The node replaced.
+      * @exception DOMException
+      *   HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not 
+      *   allow children of the type of the <code>newChild</code> node, or if 
+      *   the node to put in is one of this node's ancestors or this node 
+      *   itself, or if this node is of type <code>Document</code> and the 
+      *   result of the replacement operation would add a second 
+      *   <code>DocumentType</code> or <code>Element</code> on the 
+      *   <code>Document</code> node.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>newChild</code> was created 
+      *   from a different document than the one that created this node.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node or the parent of 
+      *   the new node is readonly.
+      *   <br>NOT_FOUND_ERR: Raised if <code>oldChild</code> is not a child of 
+      *   this node.
+      *   <br>NOT_SUPPORTED_ERR: if this node is of type <code>Document</code>, 
+      *   this exception might be raised if the DOM implementation doesn't 
+      *   support the replacement of the <code>DocumentType</code> child or 
+      *   <code>Element</code> child.
+      * @version DOM Level 3
+      */
+     public Node replaceChild(Node newChild, 
+                              Node oldChild)
+                              throws DOMException;
+ 
+     /**
+      * Removes the child node indicated by <code>oldChild</code> from the list 
+      * of children, and returns it.
+      * @param oldChild The node being removed.
+      * @return The node removed.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>NOT_FOUND_ERR: Raised if <code>oldChild</code> is not a child of 
+      *   this node.
+      *   <br>NOT_SUPPORTED_ERR: if this node is of type <code>Document</code>, 
+      *   this exception might be raised if the DOM implementation doesn't 
+      *   support the removal of the <code>DocumentType</code> child or the 
+      *   <code>Element</code> child.
+      * @version DOM Level 3
+      */
+     public Node removeChild(Node oldChild)
+                             throws DOMException;
+ 
+     /**
+      * Adds the node <code>newChild</code> to the end of the list of children 
+      * of this node. If the <code>newChild</code> is already in the tree, it 
+      * is first removed.
+      * @param newChild The node to add.If it is a 
+      *   <code>DocumentFragment</code> object, the entire contents of the 
+      *   document fragment are moved into the child list of this node
+      * @return The node added.
+      * @exception DOMException
+      *   HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not 
+      *   allow children of the type of the <code>newChild</code> node, or if 
+      *   the node to append is one of this node's ancestors or this node 
+      *   itself, or if this node is of type <code>Document</code> and the 
+      *   DOM application attempts to append a second 
+      *   <code>DocumentType</code> or <code>Element</code> node.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>newChild</code> was created 
+      *   from a different document than the one that created this node.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly or 
+      *   if the previous parent of the node being inserted is readonly.
+      *   <br>NOT_SUPPORTED_ERR: if the <code>newChild</code> node is a child 
+      *   of the <code>Document</code> node, this exception might be raised 
+      *   if the DOM implementation doesn't support the removal of the 
+      *   <code>DocumentType</code> child or <code>Element</code> child.
+      * @version DOM Level 3
+      */
+     public Node appendChild(Node newChild)
+                             throws DOMException;
+ 
+     /**
+      * Returns whether this node has any children.
+      * @return Returns <code>true</code> if this node has any children, 
+      *   <code>false</code> otherwise.
+      */
+     public boolean hasChildNodes();
+ 
+     /**
+      * Returns a duplicate of this node, i.e., serves as a generic copy 
+      * constructor for nodes. The duplicate node has no parent (
+      * <code>parentNode</code> is <code>null</code>) and no user data. User 
+      * data associated to the imported node is not carried over. However, if 
+      * any <code>UserDataHandlers</code> has been specified along with the 
+      * associated data these handlers will be called with the appropriate 
+      * parameters before this method returns.
+      * <br>Cloning an <code>Element</code> copies all attributes and their 
+      * values, including those generated by the XML processor to represent 
+      * defaulted attributes, but this method does not copy any children it 
+      * contains unless it is a deep clone. This includes text contained in 
+      * an the <code>Element</code> since the text is contained in a child 
+      * <code>Text</code> node. Cloning an <code>Attr</code> directly, as 
+      * opposed to be cloned as part of an <code>Element</code> cloning 
+      * operation, returns a specified attribute (<code>specified</code> is 
+      * <code>true</code>). Cloning an <code>Attr</code> always clones its 
+      * children, since they represent its value, no matter whether this is a 
+      * deep clone or not. Cloning an <code>EntityReference</code> 
+      * automatically constructs its subtree if a corresponding 
+      * <code>Entity</code> is available, no matter whether this is a deep 
+      * clone or not. Cloning any other type of node simply returns a copy of 
+      * this node.
+      * <br>Note that cloning an immutable subtree results in a mutable copy, 
+      * but the children of an <code>EntityReference</code> clone are readonly
+      * . In addition, clones of unspecified <code>Attr</code> nodes are 
+      * specified. And, cloning <code>Document</code>, 
+      * <code>DocumentType</code>, <code>Entity</code>, and 
+      * <code>Notation</code> nodes is implementation dependent.
+      * @param deep If <code>true</code>, recursively clone the subtree under 
+      *   the specified node; if <code>false</code>, clone only the node 
+      *   itself (and its attributes, if it is an <code>Element</code>).
+      * @return The duplicate node.
+      */
+     public Node cloneNode(boolean deep);
+ 
+     /**
+      *  Puts all <code>Text</code> nodes in the full depth of the sub-tree 
+      * underneath this <code>Node</code>, including attribute nodes, into a 
+      * "normal" form where only structure (e.g., elements, comments, 
+      * processing instructions, CDATA sections, and entity references) 
+      * separates <code>Text</code> nodes, i.e., there are neither adjacent 
+      * <code>Text</code> nodes nor empty <code>Text</code> nodes. This can 
+      * be used to ensure that the DOM view of a document is the same as if 
+      * it were saved and re-loaded, and is useful when operations (such as 
+      * XPointer [<a href='http://www.w3.org/TR/2003/REC-xptr-framework-20030325/'>XPointer</a>]
+      *  lookups) that depend on a particular document tree structure are to 
+      * be used. If the parameter "normalize-characters" of the 
+      * <code>DOMConfiguration</code> object attached to the 
+      * <code>Node.ownerDocument</code> is <code>true</code>, this method 
+      * will also fully normalize the characters of the <code>Text</code> 
+      * nodes. 
+      * <p ><b>Note:</b> In cases where the document contains 
+      * <code>CDATASections</code>, the normalize operation alone may not be 
+      * sufficient, since XPointers do not differentiate between 
+      * <code>Text</code> nodes and <code>CDATASection</code> nodes.
+      * @version DOM Level 3
+      */
+     public void normalize();
+ 
+     /**
+      *  Tests whether the DOM implementation implements a specific feature and 
+      * that feature is supported by this node, as specified in . 
+      * @param feature  The name of the feature to test. 
+      * @param version  This is the version number of the feature to test. 
+      * @return Returns <code>true</code> if the specified feature is 
+      *   supported on this node, <code>false</code> otherwise.
+      * @since DOM Level 2
+      */
+     public boolean isSupported(String feature, 
+                                String version);
+ 
+     /**
+      * The namespace URI of this node, or <code>null</code> if it is 
+      * unspecified (see ).
+      * <br>This is not a computed value that is the result of a namespace 
+      * lookup based on an examination of the namespace declarations in 
+      * scope. It is merely the namespace URI given at creation time.
+      * <br>For nodes of any type other than <code>ELEMENT_NODE</code> and 
+      * <code>ATTRIBUTE_NODE</code> and nodes created with a DOM Level 1 
+      * method, such as <code>Document.createElement()</code>, this is always 
+      * <code>null</code>.
+      * <p ><b>Note:</b> Per the <em>Namespaces in XML</em> Specification [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      *  an attribute does not inherit its namespace from the element it is 
+      * attached to. If an attribute is not explicitly given a namespace, it 
+      * simply has no namespace.
+      * @since DOM Level 2
+      */
+     public String getNamespaceURI();
+ 
+     /**
+      * The namespace prefix of this node, or <code>null</code> if it is 
+      * unspecified. When it is defined to be <code>null</code>, setting it 
+      * has no effect, including if the node is read-only.
+      * <br>Note that setting this attribute, when permitted, changes the 
+      * <code>nodeName</code> attribute, which holds the qualified name, as 
+      * well as the <code>tagName</code> and <code>name</code> attributes of 
+      * the <code>Element</code> and <code>Attr</code> interfaces, when 
+      * applicable.
+      * <br>Setting the prefix to <code>null</code> makes it unspecified, 
+      * setting it to an empty string is implementation dependent.
+      * <br>Note also that changing the prefix of an attribute that is known to 
+      * have a default value, does not make a new attribute with the default 
+      * value and the original prefix appear, since the 
+      * <code>namespaceURI</code> and <code>localName</code> do not change.
+      * <br>For nodes of any type other than <code>ELEMENT_NODE</code> and 
+      * <code>ATTRIBUTE_NODE</code> and nodes created with a DOM Level 1 
+      * method, such as <code>createElement</code> from the 
+      * <code>Document</code> interface, this is always <code>null</code>.
+      * @since DOM Level 2
+      */
+     public String getPrefix();
+     /**
+      * The namespace prefix of this node, or <code>null</code> if it is 
+      * unspecified. When it is defined to be <code>null</code>, setting it 
+      * has no effect, including if the node is read-only.
+      * <br>Note that setting this attribute, when permitted, changes the 
+      * <code>nodeName</code> attribute, which holds the qualified name, as 
+      * well as the <code>tagName</code> and <code>name</code> attributes of 
+      * the <code>Element</code> and <code>Attr</code> interfaces, when 
+      * applicable.
+      * <br>Setting the prefix to <code>null</code> makes it unspecified, 
+      * setting it to an empty string is implementation dependent.
+      * <br>Note also that changing the prefix of an attribute that is known to 
+      * have a default value, does not make a new attribute with the default 
+      * value and the original prefix appear, since the 
+      * <code>namespaceURI</code> and <code>localName</code> do not change.
+      * <br>For nodes of any type other than <code>ELEMENT_NODE</code> and 
+      * <code>ATTRIBUTE_NODE</code> and nodes created with a DOM Level 1 
+      * method, such as <code>createElement</code> from the 
+      * <code>Document</code> interface, this is always <code>null</code>.
+      * @exception DOMException
+      *   INVALID_CHARACTER_ERR: Raised if the specified prefix contains an 
+      *   illegal character according to the XML version in use specified in 
+      *   the <code>Document.xmlVersion</code> attribute.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      *   <br>NAMESPACE_ERR: Raised if the specified <code>prefix</code> is 
+      *   malformed per the Namespaces in XML specification, if the 
+      *   <code>namespaceURI</code> of this node is <code>null</code>, if the 
+      *   specified prefix is "xml" and the <code>namespaceURI</code> of this 
+      *   node is different from "<a href='http://www.w3.org/XML/1998/namespace'>
+      *   http://www.w3.org/XML/1998/namespace</a>", if this node is an attribute and the specified prefix is "xmlns" and 
+      *   the <code>namespaceURI</code> of this node is different from "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>", or if this node is an attribute and the <code>qualifiedName</code> of 
+      *   this node is "xmlns" [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      *   .
+      * @since DOM Level 2
+      */
+     public void setPrefix(String prefix)
+                                throws DOMException;
+ 
+     /**
+      * Returns the local part of the qualified name of this node.
+      * <br>For nodes of any type other than <code>ELEMENT_NODE</code> and 
+      * <code>ATTRIBUTE_NODE</code> and nodes created with a DOM Level 1 
+      * method, such as <code>Document.createElement()</code>, this is always 
+      * <code>null</code>.
+      * @since DOM Level 2
+      */
+     public String getLocalName();
+ 
+     /**
+      * Returns whether this node (if it is an element) has any attributes.
+      * @return Returns <code>true</code> if this node has any attributes, 
+      *   <code>false</code> otherwise.
+      * @since DOM Level 2
+      */
+     public boolean hasAttributes();
+ 
+     /**
+      * The absolute base URI of this node or <code>null</code> if the 
+      * implementation wasn't able to obtain an absolute URI. This value is 
+      * computed as described in . However, when the <code>Document</code> 
+      * supports the feature "HTML" [<a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>DOM Level 2 HTML</a>]
+      * , the base URI is computed using first the value of the href 
+      * attribute of the HTML BASE element if any, and the value of the 
+      * <code>documentURI</code> attribute from the <code>Document</code> 
+      * interface otherwise.
+      * @since DOM Level 3
+      */
+     public String getBaseURI();
+ 
+     // DocumentPosition
+     /**
+      * The two nodes are disconnected. Order between disconnected nodes is 
+      * always implementation-specific.
+      */
+     public static final short DOCUMENT_POSITION_DISCONNECTED = 0x01;
+     /**
+      * The second node precedes the reference node.
+      */
+     public static final short DOCUMENT_POSITION_PRECEDING = 0x02;
+     /**
+      * The node follows the reference node.
+      */
+     public static final short DOCUMENT_POSITION_FOLLOWING = 0x04;
+     /**
+      * The node contains the reference node. A node which contains is always 
+      * preceding, too.
+      */
+     public static final short DOCUMENT_POSITION_CONTAINS = 0x08;
+     /**
+      * The node is contained by the reference node. A node which is contained 
+      * is always following, too.
+      */
+     public static final short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
+     /**
+      * The determination of preceding versus following is 
+      * implementation-specific.
+      */
+     public static final short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
+ 
+     /**
+      * Compares the reference node, i.e. the node on which this method is 
+      * being called, with a node, i.e. the one passed as a parameter, with 
+      * regard to their position in the document and according to the 
+      * document order.
+      * @param other The node to compare against the reference node.
+      * @return Returns how the node is positioned relatively to the reference 
+      *   node.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: when the compared nodes are from different DOM 
+      *   implementations that do not coordinate to return consistent 
+      *   implementation-specific results.
+      * @since DOM Level 3
+      */
+     public short compareDocumentPosition(Node other)
+                                          throws DOMException;
+ 
+     /**
+      * This attribute returns the text content of this node and its 
+      * descendants. When it is defined to be <code>null</code>, setting it 
+      * has no effect. On setting, any possible children this node may have 
+      * are removed and, if it the new string is not empty or 
+      * <code>null</code>, replaced by a single <code>Text</code> node 
+      * containing the string this attribute is set to. 
+      * <br> On getting, no serialization is performed, the returned string 
+      * does not contain any markup. No whitespace normalization is performed 
+      * and the returned string does not contain the white spaces in element 
+      * content (see the attribute 
+      * <code>Text.isElementContentWhitespace</code>). Similarly, on setting, 
+      * no parsing is performed either, the input string is taken as pure 
+      * textual content. 
+      * <br>The string returned is made of the text content of this node 
+      * depending on its type, as defined below: 
+      * <table border='1' cellpadding='3'>
+      * <tr>
+      * <th>Node type</th>
+      * <th>Content</th>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'>
+      * ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, 
+      * DOCUMENT_FRAGMENT_NODE</td>
+      * <td valign='top' rowspan='1' colspan='1'>concatenation of the <code>textContent</code> 
+      * attribute value of every child node, excluding COMMENT_NODE and 
+      * PROCESSING_INSTRUCTION_NODE nodes. This is the empty string if the 
+      * node has no children.</td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'>TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE, 
+      * PROCESSING_INSTRUCTION_NODE</td>
+      * <td valign='top' rowspan='1' colspan='1'><code>nodeValue</code></td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'>DOCUMENT_NODE, 
+      * DOCUMENT_TYPE_NODE, NOTATION_NODE</td>
+      * <td valign='top' rowspan='1' colspan='1'><em>null</em></td>
+      * </tr>
+      * </table>
+      * @exception DOMException
+      *   DOMSTRING_SIZE_ERR: Raised when it would return more characters than 
+      *   fit in a <code>DOMString</code> variable on the implementation 
+      *   platform.
+      * @since DOM Level 3
+      */
+     public String getTextContent()
+                                          throws DOMException;
+     /**
+      * This attribute returns the text content of this node and its 
+      * descendants. When it is defined to be <code>null</code>, setting it 
+      * has no effect. On setting, any possible children this node may have 
+      * are removed and, if it the new string is not empty or 
+      * <code>null</code>, replaced by a single <code>Text</code> node 
+      * containing the string this attribute is set to. 
+      * <br> On getting, no serialization is performed, the returned string 
+      * does not contain any markup. No whitespace normalization is performed 
+      * and the returned string does not contain the white spaces in element 
+      * content (see the attribute 
+      * <code>Text.isElementContentWhitespace</code>). Similarly, on setting, 
+      * no parsing is performed either, the input string is taken as pure 
+      * textual content. 
+      * <br>The string returned is made of the text content of this node 
+      * depending on its type, as defined below: 
+      * <table border='1' cellpadding='3'>
+      * <tr>
+      * <th>Node type</th>
+      * <th>Content</th>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'>
+      * ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, 
+      * DOCUMENT_FRAGMENT_NODE</td>
+      * <td valign='top' rowspan='1' colspan='1'>concatenation of the <code>textContent</code> 
+      * attribute value of every child node, excluding COMMENT_NODE and 
+      * PROCESSING_INSTRUCTION_NODE nodes. This is the empty string if the 
+      * node has no children.</td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'>TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE, 
+      * PROCESSING_INSTRUCTION_NODE</td>
+      * <td valign='top' rowspan='1' colspan='1'><code>nodeValue</code></td>
+      * </tr>
+      * <tr>
+      * <td valign='top' rowspan='1' colspan='1'>DOCUMENT_NODE, 
+      * DOCUMENT_TYPE_NODE, NOTATION_NODE</td>
+      * <td valign='top' rowspan='1' colspan='1'><em>null</em></td>
+      * </tr>
+      * </table>
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
+      * @since DOM Level 3
+      */
+     public void setTextContent(String textContent)
+                                          throws DOMException;
+ 
+     /**
+      * Returns whether this node is the same node as the given one.
+      * <br>This method provides a way to determine whether two 
+      * <code>Node</code> references returned by the implementation reference 
+      * the same object. When two <code>Node</code> references are references 
+      * to the same object, even if through a proxy, the references may be 
+      * used completely interchangeably, such that all attributes have the 
+      * same values and calling the same DOM method on either reference 
+      * always has exactly the same effect.
+      * @param other The node to test against.
+      * @return Returns <code>true</code> if the nodes are the same, 
+      *   <code>false</code> otherwise.
+      * @since DOM Level 3
+      */
+     public boolean isSameNode(Node other);
+ 
+     /**
+      * Look up the prefix associated to the given namespace URI, starting from 
+      * this node. The default namespace declarations are ignored by this 
+      * method.
+      * <br>See  for details on the algorithm used by this method.
+      * @param namespaceURI The namespace URI to look for.
+      * @return Returns an associated namespace prefix if found or 
+      *   <code>null</code> if none is found. If more than one prefix are 
+      *   associated to the namespace prefix, the returned namespace prefix 
+      *   is implementation dependent.
+      * @since DOM Level 3
+      */
+     public String lookupPrefix(String namespaceURI);
+ 
+     /**
+      *  This method checks if the specified <code>namespaceURI</code> is the 
+      * default namespace or not. 
+      * @param namespaceURI The namespace URI to look for.
+      * @return Returns <code>true</code> if the specified 
+      *   <code>namespaceURI</code> is the default namespace, 
+      *   <code>false</code> otherwise. 
+      * @since DOM Level 3
+      */
+     public boolean isDefaultNamespace(String namespaceURI);
+ 
+     /**
+      * Look up the namespace URI associated to the given prefix, starting from 
+      * this node.
+      * <br>See  for details on the algorithm used by this method.
+      * @param prefix The prefix to look for. If this parameter is 
+      *   <code>null</code>, the method will return the default namespace URI 
+      *   if any.
+      * @return Returns the associated namespace URI or <code>null</code> if 
+      *   none is found.
+      * @since DOM Level 3
+      */
+     public String lookupNamespaceURI(String prefix);
+ 
+     /**
+      * Tests whether two nodes are equal.
+      * <br>This method tests for equality of nodes, not sameness (i.e., 
+      * whether the two nodes are references to the same object) which can be 
+      * tested with <code>Node.isSameNode()</code>. All nodes that are the 
+      * same will also be equal, though the reverse may not be true.
+      * <br>Two nodes are equal if and only if the following conditions are 
+      * satisfied: 
+      * <ul>
+      * <li>The two nodes are of the same type.
+      * </li>
+      * <li>The following string 
+      * attributes are equal: <code>nodeName</code>, <code>localName</code>, 
+      * <code>namespaceURI</code>, <code>prefix</code>, <code>nodeValue</code>
+      * . This is: they are both <code>null</code>, or they have the same 
+      * length and are character for character identical.
+      * </li>
+      * <li>The 
+      * <code>attributes</code> <code>NamedNodeMaps</code> are equal. This 
+      * is: they are both <code>null</code>, or they have the same length and 
+      * for each node that exists in one map there is a node that exists in 
+      * the other map and is equal, although not necessarily at the same 
+      * index.
+      * </li>
+      * <li>The <code>childNodes</code> <code>NodeLists</code> are equal. 
+      * This is: they are both <code>null</code>, or they have the same 
+      * length and contain equal nodes at the same index. Note that 
+      * normalization can affect equality; to avoid this, nodes should be 
+      * normalized before being compared.
+      * </li>
+      * </ul> 
+      * <br>For two <code>DocumentType</code> nodes to be equal, the following 
+      * conditions must also be satisfied: 
+      * <ul>
+      * <li>The following string attributes 
+      * are equal: <code>publicId</code>, <code>systemId</code>, 
+      * <code>internalSubset</code>.
+      * </li>
+      * <li>The <code>entities</code> 
+      * <code>NamedNodeMaps</code> are equal.
+      * </li>
+      * <li>The <code>notations</code> 
+      * <code>NamedNodeMaps</code> are equal.
+      * </li>
+      * </ul> 
+      * <br>On the other hand, the following do not affect equality: the 
+      * <code>ownerDocument</code>, <code>baseURI</code>, and 
+      * <code>parentNode</code> attributes, the <code>specified</code> 
+      * attribute for <code>Attr</code> nodes, the <code>schemaTypeInfo</code>
+      *  attribute for <code>Attr</code> and <code>Element</code> nodes, the 
+      * <code>Text.isElementContentWhitespace</code> attribute for 
+      * <code>Text</code> nodes, as well as any user data or event listeners 
+      * registered on the nodes. 
+      * <p ><b>Note:</b>  As a general rule, anything not mentioned in the 
+      * description above is not significant in consideration of equality 
+      * checking. Note that future versions of this specification may take 
+      * into account more attributes and implementations conform to this 
+      * specification are expected to be updated accordingly. 
+      * @param arg The node to compare equality with.
+      * @return Returns <code>true</code> if the nodes are equal, 
+      *   <code>false</code> otherwise.
+      * @since DOM Level 3
+      */
+     public boolean isEqualNode(Node arg);
+ 
+     /**
+      *  This method returns a specialized object which implements the 
+      * specialized APIs of the specified feature and version, as specified 
+      * in . The specialized object may also be obtained by using 
+      * binding-specific casting methods but is not necessarily expected to, 
+      * as discussed in . This method also allow the implementation to 
+      * provide specialized objects which do not support the <code>Node</code>
+      *  interface. 
+      * @param feature  The name of the feature requested. Note that any plus 
+      *   sign "+" prepended to the name of the feature will be ignored since 
+      *   it is not significant in the context of this method. 
+      * @param version  This is the version number of the feature to test. 
+      * @return  Returns an object which implements the specialized APIs of 
+      *   the specified feature and version, if any, or <code>null</code> if 
+      *   there is no object which implements interfaces associated with that 
+      *   feature. If the <code>DOMObject</code> returned by this method 
+      *   implements the <code>Node</code> interface, it must delegate to the 
+      *   primary core <code>Node</code> and not return results inconsistent 
+      *   with the primary core <code>Node</code> such as attributes, 
+      *   childNodes, etc. 
+      * @since DOM Level 3
+      */
+     public Object getFeature(String feature, 
+                              String version);
+ 
+     /**
+      * Associate an object to a key on this node. The object can later be 
+      * retrieved from this node by calling <code>getUserData</code> with the 
+      * same key.
+      * @param key The key to associate the object to.
+      * @param data The object to associate to the given key, or 
+      *   <code>null</code> to remove any existing association to that key.
+      * @param handler The handler to associate to that key, or 
+      *   <code>null</code>.
+      * @return Returns the <code>DOMUserData</code> previously associated to 
+      *   the given key on this node, or <code>null</code> if there was none.
+      * @since DOM Level 3
+      */
+     public Object setUserData(String key, 
+                               Object data, 
+                               UserDataHandler handler);
+ 
+     /**
+      * Retrieves the object associated to a key on a this node. The object 
+      * must first have been set to this node by calling 
+      * <code>setUserData</code> with the same key.
+      * @param key The key the object is associated to.
+      * @return Returns the <code>DOMUserData</code> associated to the given 
+      *   key on this node, or <code>null</code> if there was none.
+      * @since DOM Level 3
+      */
+     public Object getUserData(String key);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/NodeList.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/NodeList.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/NodeList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/NodeList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,41 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * The <code>NodeList</code> interface provides the abstraction of an ordered 
+  * collection of nodes, without defining or constraining how this collection 
+  * is implemented. <code>NodeList</code> objects in the DOM are live.
+  * <p>The items in the <code>NodeList</code> are accessible via an integral 
+  * index, starting from 0.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface NodeList {
+     /**
+      * Returns the <code>index</code>th item in the collection. If 
+      * <code>index</code> is greater than or equal to the number of nodes in 
+      * the list, this returns <code>null</code>.
+      * @param index Index into the collection.
+      * @return The node at the <code>index</code>th position in the 
+      *   <code>NodeList</code>, or <code>null</code> if that is not a valid 
+      *   index.
+      */
+     public Node item(int index);
+ 
+     /**
+      * The number of nodes in the list. The range of valid child node indices 
+      * is 0 to <code>length-1</code> inclusive.
+      */
+     public int getLength();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Notation.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Notation.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Notation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Notation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,40 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * This interface represents a notation declared in the DTD. A notation either 
+  * declares, by name, the format of an unparsed entity (see <a href='http://www.w3.org/TR/2004/REC-xml-20040204#Notations'>section 4.7</a> of the XML 1.0 specification [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]), or is 
+  * used for formal declaration of processing instruction targets (see <a href='http://www.w3.org/TR/2004/REC-xml-20040204#sec-pi'>section 2.6</a> of the XML 1.0 specification [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]). The 
+  * <code>nodeName</code> attribute inherited from <code>Node</code> is set 
+  * to the declared name of the notation.
+  * <p>The DOM Core does not support editing <code>Notation</code> nodes; they 
+  * are therefore readonly.
+  * <p>A <code>Notation</code> node does not have any parent.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface Notation extends Node {
+     /**
+      * The public identifier of this notation. If the public identifier was 
+      * not specified, this is <code>null</code>.
+      */
+     public String getPublicId();
+ 
+     /**
+      * The system identifier of this notation. If the system identifier was 
+      * not specified, this is <code>null</code>. This may be an absolute URI 
+      * or not.
+      */
+     public String getSystemId();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * The <code>ProcessingInstruction</code> interface represents a "processing 
+  * instruction", used in XML as a way to keep processor-specific information 
+  * in the text of the document.
+  * <p> No lexical check is done on the content of a processing instruction and 
+  * it is therefore possible to have the character sequence 
+  * <code>"?&gt;"</code> in the content, which is illegal a processing 
+  * instruction per section 2.6 of [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. The 
+  * presence of this character sequence must generate a fatal error during 
+  * serialization. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface ProcessingInstruction extends Node {
+     /**
+      * The target of this processing instruction. XML defines this as being 
+      * the first token following the markup that begins the processing 
+      * instruction.
+      */
+     public String getTarget();
+ 
+     /**
+      * The content of this processing instruction. This is from the first non 
+      * white space character after the target to the character immediately 
+      * preceding the <code>?&gt;</code>.
+      */
+     public String getData();
+     /**
+      * The content of this processing instruction. This is from the first non 
+      * white space character after the target to the character immediately 
+      * preceding the <code>?&gt;</code>.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
+      */
+     public void setData(String data)
+                                    throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Text.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Text.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/Text.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/Text.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,126 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * The <code>Text</code> interface inherits from <code>CharacterData</code> 
+  * and represents the textual content (termed <a href='http://www.w3.org/TR/2004/REC-xml-20040204#syntax'>character data</a> in XML) of an <code>Element</code> or <code>Attr</code>. If there is no 
+  * markup inside an element's content, the text is contained in a single 
+  * object implementing the <code>Text</code> interface that is the only 
+  * child of the element. If there is markup, it is parsed into the 
+  * information items (elements, comments, etc.) and <code>Text</code> nodes 
+  * that form the list of children of the element.
+  * <p>When a document is first made available via the DOM, there is only one 
+  * <code>Text</code> node for each block of text. Users may create adjacent 
+  * <code>Text</code> nodes that represent the contents of a given element 
+  * without any intervening markup, but should be aware that there is no way 
+  * to represent the separations between these nodes in XML or HTML, so they 
+  * will not (in general) persist between DOM editing sessions. The 
+  * <code>Node.normalize()</code> method merges any such adjacent 
+  * <code>Text</code> objects into a single node for each block of text.
+  * <p> No lexical check is done on the content of a <code>Text</code> node 
+  * and, depending on its position in the document, some characters must be 
+  * escaped during serialization using character references; e.g. the 
+  * characters "&lt;&amp;" if the textual content is part of an element or of 
+  * an attribute, the character sequence "]]&gt;" when part of an element, 
+  * the quotation mark character " or the apostrophe character ' when part of 
+  * an attribute. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  */
+ public interface Text extends CharacterData {
+     /**
+      * Breaks this node into two nodes at the specified <code>offset</code>, 
+      * keeping both in the tree as siblings. After being split, this node 
+      * will contain all the content up to the <code>offset</code> point. A 
+      * new node of the same type, which contains all the content at and 
+      * after the <code>offset</code> point, is returned. If the original 
+      * node had a parent node, the new node is inserted as the next sibling 
+      * of the original node. When the <code>offset</code> is equal to the 
+      * length of this node, the new node has no data.
+      * @param offset The 16-bit unit offset at which to split, starting from 
+      *   <code>0</code>.
+      * @return The new node, of the same type as this node.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified offset is negative or greater 
+      *   than the number of 16-bit units in <code>data</code>.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+      */
+     public Text splitText(int offset)
+                           throws DOMException;
+ 
+     /**
+      * Returns whether this text node contains <a href='http://www.w3.org/TR/2004/REC-xml-infoset-20040204#infoitem.character'>
+      * element content whitespace</a>, often abusively called "ignorable whitespace". The text node is 
+      * determined to contain whitespace in element content during the load 
+      * of the document or if validation occurs while using 
+      * <code>Document.normalizeDocument()</code>.
+      * @since DOM Level 3
+      */
+     public boolean isElementContentWhitespace();
+ 
+     /**
+      * Returns all text of <code>Text</code> nodes logically-adjacent text 
+      * nodes to this node, concatenated in document order.
+      * <br>For instance, in the example below <code>wholeText</code> on the 
+      * <code>Text</code> node that contains "bar" returns "barfoo", while on 
+      * the <code>Text</code> node that contains "foo" it returns "barfoo". 
+      * @since DOM Level 3
+      */
+     public String getWholeText();
+ 
+     /**
+      * Replaces the text of the current node and all logically-adjacent text 
+      * nodes with the specified text. All logically-adjacent text nodes are 
+      * removed including the current node unless it was the recipient of the 
+      * replacement text.
+      * <br>This method returns the node which received the replacement text. 
+      * The returned node is: 
+      * <ul>
+      * <li><code>null</code>, when the replacement text is 
+      * the empty string;
+      * </li>
+      * <li>the current node, except when the current node is 
+      * read-only;
+      * </li>
+      * <li> a new <code>Text</code> node of the same type (
+      * <code>Text</code> or <code>CDATASection</code>) as the current node 
+      * inserted at the location of the replacement.
+      * </li>
+      * </ul>
+      * <br>For instance, in the above example calling 
+      * <code>replaceWholeText</code> on the <code>Text</code> node that 
+      * contains "bar" with "yo" in argument results in the following: 
+      * <br>Where the nodes to be removed are read-only descendants of an 
+      * <code>EntityReference</code>, the <code>EntityReference</code> must 
+      * be removed instead of the read-only nodes. If any 
+      * <code>EntityReference</code> to be removed has descendants that are 
+      * not <code>EntityReference</code>, <code>Text</code>, or 
+      * <code>CDATASection</code> nodes, the <code>replaceWholeText</code> 
+      * method must fail before performing any modification of the document, 
+      * raising a <code>DOMException</code> with the code 
+      * <code>NO_MODIFICATION_ALLOWED_ERR</code>.
+      * <br>For instance, in the example below calling 
+      * <code>replaceWholeText</code> on the <code>Text</code> node that 
+      * contains "bar" fails, because the <code>EntityReference</code> node 
+      * "ent" contains an <code>Element</code> node which cannot be removed.
+      * @param content The content of the replacing <code>Text</code> node.
+      * @return The <code>Text</code> node created with the specified content.
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if one of the <code>Text</code> 
+      *   nodes being replaced is readonly.
+      * @since DOM Level 3
+      */
+     public Text replaceWholeText(String content)
+                                  throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/TypeInfo.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/TypeInfo.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/TypeInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/TypeInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,185 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  *  The <code>TypeInfo</code> interface represents a type referenced from 
+  * <code>Element</code> or <code>Attr</code> nodes, specified in the schemas 
+  * associated with the document. The type is a pair of a namespace URI and 
+  * name properties, and depends on the document's schema. 
+  * <p> If the document's schema is an XML DTD [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>], the values 
+  * are computed as follows: 
+  * <ul>
+  * <li> If this type is referenced from an 
+  * <code>Attr</code> node, <code>typeNamespace</code> is 
+  * <code>"http://www.w3.org/TR/REC-xml"</code> and <code>typeName</code> 
+  * represents the <b>[attribute type]</b> property in the [<a href='http://www.w3.org/TR/2004/REC-xml-infoset-20040204/'>XML Information Set</a>]
+  * . If there is no declaration for the attribute, <code>typeNamespace</code>
+  *  and <code>typeName</code> are <code>null</code>. 
+  * </li>
+  * <li> If this type is 
+  * referenced from an <code>Element</code> node, <code>typeNamespace</code> 
+  * and <code>typeName</code> are <code>null</code>. 
+  * </li>
+  * </ul>
+  * <p> If the document's schema is an XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+  * , the values are computed as follows using the post-schema-validation 
+  * infoset contributions (also called PSVI contributions): 
+  * <ul>
+  * <li> If the <b>[validity]</b> property exists AND is <em>"invalid"</em> or <em>"notKnown"</em>: the {target namespace} and {name} properties of the declared type if 
+  * available, otherwise <code>null</code>. 
+  * <p ><b>Note:</b>  At the time of writing, the XML Schema specification does 
+  * not require exposing the declared type. Thus, DOM implementations might 
+  * choose not to provide type information if validity is not valid. 
+  * </li>
+  * <li> If the <b>[validity]</b> property exists and is <em>"valid"</em>: 
+  * <ol>
+  * <li> If <b>[member type definition]</b> exists: 
+  * <ol>
+  * <li>If {name} is not absent, then expose {name} and {target 
+  * namespace} properties of the <b>[member type definition]</b> property;
+  * </li>
+  * <li>Otherwise, expose the namespace and local name of the 
+  * corresponding anonymous type name.
+  * </li>
+  * </ol>
+  * </li>
+  * <li> If the <b>[type definition]</b> property exists: 
+  * <ol>
+  * <li>If {name} is not absent, then expose {name} and {target 
+  * namespace} properties of the <b>[type definition]</b> property;
+  * </li>
+  * <li>Otherwise, expose the namespace and local name of the 
+  * corresponding anonymous type name.
+  * </li>
+  * </ol> 
+  * </li>
+  * <li> If the <b>[member type definition anonymous]</b> exists: 
+  * <ol>
+  * <li>If it is false, then expose <b>[member type definition name]</b> and <b>[member type definition namespace]</b> properties;
+  * </li>
+  * <li>Otherwise, expose the namespace and local name of the 
+  * corresponding anonymous type name.
+  * </li>
+  * </ol> 
+  * </li>
+  * <li> If the <b>[type definition anonymous]</b> exists: 
+  * <ol>
+  * <li>If it is false, then expose <b>[type definition name]</b> and <b>[type definition namespace]</b> properties;
+  * </li>
+  * <li>Otherwise, expose the namespace and local name of the 
+  * corresponding anonymous type name.
+  * </li>
+  * </ol> 
+  * </li>
+  * </ol>
+  * </li>
+  * </ul>
+  * <p ><b>Note:</b>  Other schema languages are outside the scope of the W3C 
+  * and therefore should define how to represent their type systems using 
+  * <code>TypeInfo</code>. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface TypeInfo {
+     /**
+      *  The name of a type declared for the associated element or attribute, 
+      * or <code>null</code> if unknown. 
+      */
+     public String getTypeName();
+ 
+     /**
+      *  The namespace of the type declared for the associated element or 
+      * attribute or <code>null</code> if the element does not have 
+      * declaration or if no namespace information is available. 
+      */
+     public String getTypeNamespace();
+ 
+     // DerivationMethods
+     /**
+      *  If the document's schema is an XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+      * , this constant represents the derivation by <a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#key-typeRestriction'>
+      * restriction</a> if complex types are involved, or a <a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#element-restriction'>
+      * restriction</a> if simple types are involved. 
+      * <br>  The reference type definition is derived by restriction from the 
+      * other type definition if the other type definition is the same as the 
+      * reference type definition, or if the other type definition can be 
+      * reached recursively following the {base type definition} property 
+      * from the reference type definition, and all the <em>derivation methods</em> involved are restriction. 
+      */
+     public static final int DERIVATION_RESTRICTION    = 0x00000001;
+     /**
+      *  If the document's schema is an XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+      * , this constant represents the derivation by <a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#key-typeExtension'>
+      * extension</a>. 
+      * <br>  The reference type definition is derived by extension from the 
+      * other type definition if the other type definition can be reached 
+      * recursively following the {base type definition} property from the 
+      * reference type definition, and at least one of the <em>derivation methods</em> involved is an extension. 
+      */
+     public static final int DERIVATION_EXTENSION      = 0x00000002;
+     /**
+      *  If the document's schema is an XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+      * , this constant represents the <a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#element-union'>
+      * union</a> if simple types are involved. 
+      * <br> The reference type definition is derived by union from the other 
+      * type definition if there exists two type definitions T1 and T2 such 
+      * as the reference type definition is derived from T1 by 
+      * <code>DERIVATION_RESTRICTION</code> or 
+      * <code>DERIVATION_EXTENSION</code>, T2 is derived from the other type 
+      * definition by <code>DERIVATION_RESTRICTION</code>, T1 has {variety} <em>union</em>, and one of the {member type definitions} is T2. Note that T1 could be 
+      * the same as the reference type definition, and T2 could be the same 
+      * as the other type definition. 
+      */
+     public static final int DERIVATION_UNION          = 0x00000004;
+     /**
+      *  If the document's schema is an XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+      * , this constant represents the <a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#element-list'>list</a>. 
+      * <br> The reference type definition is derived by list from the other 
+      * type definition if there exists two type definitions T1 and T2 such 
+      * as the reference type definition is derived from T1 by 
+      * <code>DERIVATION_RESTRICTION</code> or 
+      * <code>DERIVATION_EXTENSION</code>, T2 is derived from the other type 
+      * definition by <code>DERIVATION_RESTRICTION</code>, T1 has {variety} <em>list</em>, and T2 is the {item type definition}. Note that T1 could be the same as 
+      * the reference type definition, and T2 could be the same as the other 
+      * type definition. 
+      */
+     public static final int DERIVATION_LIST           = 0x00000008;
+ 
+     /**
+      *  This method returns if there is a derivation between the reference 
+      * type definition, i.e. the <code>TypeInfo</code> on which the method 
+      * is being called, and the other type definition, i.e. the one passed 
+      * as parameters. 
+      * @param typeNamespaceArg  the namespace of the other type definition. 
+      * @param typeNameArg  the name of the other type definition. 
+      * @param derivationMethod  the type of derivation and conditions applied 
+      *   between two types, as described in the list of constants provided 
+      *   in this interface. 
+      * @return  If the document's schema is a DTD or no schema is associated 
+      *   with the document, this method will always return <code>false</code>
+      *   .  If the document's schema is an XML Schema, the method will 
+      *   <code>true</code> if the reference type definition is derived from 
+      *   the other type definition according to the derivation parameter. If 
+      *   the value of the parameter is <code>0</code> (no bit is set to 
+      *   <code>1</code> for the <code>derivationMethod</code> parameter), 
+      *   the method will return <code>true</code> if the other type 
+      *   definition can be reached by recursing any combination of {base 
+      *   type definition}, {item type definition}, or {member type 
+      *   definitions} from the reference type definition. 
+      */
+     public boolean isDerivedFrom(String typeNamespaceArg, 
+                                  String typeNameArg, 
+                                  int derivationMethod);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/UserDataHandler.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/UserDataHandler.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/UserDataHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/UserDataHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom;
+ 
+ /**
+  * When associating an object to a key on a node using 
+  * <code>Node.setUserData()</code> the application can provide a handler 
+  * that gets called when the node the object is associated to is being 
+  * cloned, imported, or renamed. This can be used by the application to 
+  * implement various behaviors regarding the data it associates to the DOM 
+  * nodes. This interface defines that handler. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
+  * @since DOM Level 3
+  */
+ public interface UserDataHandler {
+     // OperationType
+     /**
+      * The node is cloned, using <code>Node.cloneNode()</code>.
+      */
+     public static final short NODE_CLONED               = 1;
+     /**
+      * The node is imported, using <code>Document.importNode()</code>.
+      */
+     public static final short NODE_IMPORTED             = 2;
+     /**
+      * The node is deleted.
+      * <p ><b>Note:</b> This may not be supported or may not be reliable in 
+      * certain environments, such as Java, where the implementation has no 
+      * real control over when objects are actually deleted.
+      */
+     public static final short NODE_DELETED              = 3;
+     /**
+      * The node is renamed, using <code>Document.renameNode()</code>.
+      */
+     public static final short NODE_RENAMED              = 4;
+     /**
+      * The node is adopted, using <code>Document.adoptNode()</code>.
+      */
+     public static final short NODE_ADOPTED              = 5;
+ 
+     /**
+      * This method is called whenever the node for which this handler is 
+      * registered is imported or cloned.
+      * <br> DOM applications must not raise exceptions in a 
+      * <code>UserDataHandler</code>. The effect of throwing exceptions from 
+      * the handler is DOM implementation dependent. 
+      * @param operation Specifies the type of operation that is being 
+      *   performed on the node.
+      * @param key Specifies the key for which this handler is being called. 
+      * @param data Specifies the data for which this handler is being called. 
+      * @param src Specifies the node being cloned, adopted, imported, or 
+      *   renamed. This is <code>null</code> when the node is being deleted.
+      * @param dst Specifies the node newly created if any, or 
+      *   <code>null</code>.
+      */
+     public void handle(short operation, 
+                        String key, 
+                        Object data, 
+                        Node src, 
+                        Node dst);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,387 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ 
+ package org.w3c.dom.bootstrap;
+ 
+ import java.util.StringTokenizer;
+ import java.util.Vector;
+ import org.w3c.dom.DOMImplementationSource;
+ import org.w3c.dom.DOMImplementationList;
+ import org.w3c.dom.DOMImplementation;
+ import java.io.InputStream;
+ import java.io.BufferedReader;
+ import java.io.InputStreamReader;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ 
+ /**
+  * A factory that enables applications to obtain instances of
+  * <code>DOMImplementation</code>.
+  *
+  * <p>
+  * Example:
+  * </p>
+  *
+  * <pre class='example'>
+  *  // get an instance of the DOMImplementation registry
+  *  DOMImplementationRegistry registry =
+  *       DOMImplementationRegistry.newInstance();
+  *  // get a DOM implementation the Level 3 XML module
+  *  DOMImplementation domImpl =
+  *       registry.getDOMImplementation("XML 3.0");
+  * </pre>
+  *
+  * <p>
+  * This provides an application with an implementation-independent starting
+  * point. DOM implementations may modify this class to meet new security
+  * standards or to provide *additional* fallbacks for the list of
+  * DOMImplementationSources.
+  * </p>
+  *
+  * @see DOMImplementation
+  * @see DOMImplementationSource
+  * @since DOM Level 3
+  */
+ public final class DOMImplementationRegistry {
+     /**
+      * The system property to specify the
+      * DOMImplementationSource class names.
+      */
+     public static final String PROPERTY =
+ 	"org.w3c.dom.DOMImplementationSourceList";
+     
+     /**
+      * Default columns per line.
+      */
+     private static final int DEFAULT_LINE_LENGTH = 80;
+     
+     /**
+      * The list of DOMImplementationSources.
+      */
+     private Vector sources;
+     
+     /**
+      * Private constructor.
+      * @param srcs Vector List of DOMImplementationSources
+      */
+     private DOMImplementationRegistry(final Vector srcs) {
+ 	sources = srcs;
+     }
+     
+     /**
+      * Obtain a new instance of a <code>DOMImplementationRegistry</code>.
+      *
+ 
+      * The <code>DOMImplementationRegistry</code> is initialized by the
+      * application or the implementation, depending on the context, by
+      * first checking the value of the Java system property
+      * <code>org.w3c.dom.DOMImplementationSourceList</code> and
+      * the the service provider whose contents are at
+      * "<code>META_INF/services/org.w3c.dom.DOMImplementationSourceList</code>"
+      * The value of this property is a white-space separated list of
+      * names of availables classes implementing the
+      * <code>DOMImplementationSource</code> interface. Each class listed
+      * in the class name list is instantiated and any exceptions
+      * encountered are thrown to the application.
+      *
+      * @return an initialized instance of DOMImplementationRegistry
+      * @throws ClassNotFoundException
+      *     If any specified class can not be found
+      * @throws InstantiationException
+      *     If any specified class is an interface or abstract class
+      * @throws IllegalAccessException
+      *     If the default constructor of a specified class is not accessible
+      * @throws ClassCastException
+      *     If any specified class does not implement
+      * <code>DOMImplementationSource</code>
+      */
+     public static DOMImplementationRegistry newInstance()
+ 	throws
+ 	ClassNotFoundException,
+ 	InstantiationException,
+ 	IllegalAccessException,
+ 	ClassCastException {
+ 	Vector sources = new Vector();
+ 	
+ 	ClassLoader classLoader = getClassLoader();
+ 	// fetch system property:
+ 	String p = getSystemProperty(PROPERTY);
+ 	
+ 	//
+ 	// if property is not specified then use contents of
+         // META_INF/org.w3c.dom.DOMImplementationSourceList from classpath
+ 	if (p == null) {
+ 	    p = getServiceValue(classLoader);
+ 	} 
+         if (p == null) {
+ 	    //
+ 	    // DOM Implementations can modify here to add *additional* fallback
+ 	    // mechanisms to access a list of default DOMImplementationSources.
+ 	    p = "gnu.xml.dom.ImplementationSource";
+ 	}
+ 	if (p != null) {
+ 	    StringTokenizer st = new StringTokenizer(p);
+ 	    while (st.hasMoreTokens()) {
+ 		String sourceName = st.nextToken();
+ 		// Use context class loader, falling back to Class.forName
+ 		// if and only if this fails...
+ 		Class sourceClass = null;
+ 		if (classLoader != null) {
+ 		    sourceClass = classLoader.loadClass(sourceName);
+ 		} else {
+ 		    sourceClass = Class.forName(sourceName);
+ 		}
+ 		DOMImplementationSource source =
+ 		    (DOMImplementationSource) sourceClass.newInstance();
+ 		sources.addElement(source);
+ 	    }
+ 	}
+ 	return new DOMImplementationRegistry(sources);
+     }
+     
+     /**
+      * Return the first implementation that has the desired
+      * features, or <code>null</code> if none is found.
+      *
+      * @param features
+      *            A string that specifies which features are required. This is
+      *            a space separated list in which each feature is specified by
+      *            its name optionally followed by a space and a version number.
+      *            This is something like: "XML 1.0 Traversal +Events 2.0"
+      * @return An implementation that has the desired features,
+      *         or <code>null</code> if none found.
+      */
+     public DOMImplementation getDOMImplementation(final String features) {
+ 	int size = sources.size();
+ 	String name = null;
+ 	for (int i = 0; i < size; i++) {
+ 	    DOMImplementationSource source =
+ 		(DOMImplementationSource) sources.elementAt(i);
+ 	    DOMImplementation impl = source.getDOMImplementation(features);
+ 	    if (impl != null) {
+ 		return impl;
+ 	    }
+ 	}
+ 	return null;
+     }
+     
+     /**
+      * Return a list of implementations that support the
+      * desired features.
+      *
+      * @param features
+      *            A string that specifies which features are required. This is
+      *            a space separated list in which each feature is specified by
+      *            its name optionally followed by a space and a version number.
+      *            This is something like: "XML 1.0 Traversal +Events 2.0"
+      * @return A list of DOMImplementations that support the desired features.
+      */
+     public DOMImplementationList getDOMImplementationList(final String features) {
+ 	final Vector implementations = new Vector();
+ 	int size = sources.size();
+ 	for (int i = 0; i < size; i++) {
+ 	    DOMImplementationSource source =
+ 		(DOMImplementationSource) sources.elementAt(i);
+ 	    DOMImplementationList impls =
+ 		source.getDOMImplementationList(features);
+ 	    for (int j = 0; j < impls.getLength(); j++) {
+ 		DOMImplementation impl = impls.item(j);
+ 		implementations.addElement(impl);
+ 	    }
+ 	}
+ 	return new DOMImplementationList() {
+ 		public DOMImplementation item(final int index) {
+ 		    if (index >= 0 && index < implementations.size()) {
+ 			try {
+ 			    return (DOMImplementation)
+ 				implementations.elementAt(index);
+ 			} catch (ArrayIndexOutOfBoundsException e) {
+ 			    return null;
+ 			}
+ 		    }
+ 		    return null;
+ 		}
+ 		
+ 		public int getLength() {
+ 		    return implementations.size();
+ 		}
+ 	    };
+     }
+     
+     /**
+      * Register an implementation.
+      *
+      * @param s The source to be registered, may not be <code>null</code>
+      */
+     public void addSource(final DOMImplementationSource s) {
+ 	if (s == null) {
+ 	    throw new NullPointerException();
+ 	}
+ 	if (!sources.contains(s)) {
+ 	    sources.addElement(s);
+ 	}
+     }
+     
+     /**
+      *
+      * Gets a class loader.
+      *
+      * @return A class loader, possibly <code>null</code>
+      */
+     private static ClassLoader getClassLoader() {
+ 	try {
+ 	    ClassLoader contextClassLoader = getContextClassLoader();
+ 	    
+ 	    if (contextClassLoader != null) {
+ 		return contextClassLoader;
+ 	    }
+ 	} catch (Exception e) {
+ 	    // Assume that the DOM application is in a JRE 1.1, use the
+ 	    // current ClassLoader
+ 	    return DOMImplementationRegistry.class.getClassLoader();
+ 	}
+ 	return DOMImplementationRegistry.class.getClassLoader();
+     }
+     
+     /**
+      * This method attempts to return the first line of the resource
+      * META_INF/services/org.w3c.dom.DOMImplementationSourceList
+      * from the provided ClassLoader.
+      *
+      * @param classLoader classLoader, may not be <code>null</code>.
+      * @return first line of resource, or <code>null</code>
+      */
+     private static String getServiceValue(final ClassLoader classLoader) {
+ 	String serviceId = "META-INF/services/" + PROPERTY;
+ 	// try to find services in CLASSPATH
+ 	try {
+ 	    InputStream is = getResourceAsStream(classLoader, serviceId);
+ 	    
+ 	    if (is != null) {
+ 		BufferedReader rd;
+ 		try {
+ 		    rd =
+ 			new BufferedReader(new InputStreamReader(is, "UTF-8"),
+ 					   DEFAULT_LINE_LENGTH);
+ 		} catch (java.io.UnsupportedEncodingException e) {
+ 		    rd =
+ 			new BufferedReader(new InputStreamReader(is),
+ 					   DEFAULT_LINE_LENGTH);
+ 		}		
+ 		String serviceValue = rd.readLine();
+ 		rd.close();
+ 		if (serviceValue != null && serviceValue.length() > 0) {
+ 		    return serviceValue;
+ 		}
+ 	    }
+ 	} catch (Exception ex) {
+ 	    return null;
+ 	}
+ 	return null;
+     }
+     
+     /**
+      * A simple JRE (Java Runtime Environment) 1.1 test
+      *
+      * @return <code>true</code> if JRE 1.1 
+      */
+     private static boolean isJRE11() {
+ 	try {
+ 	    Class c = Class.forName("java.security.AccessController");
+ 	    // java.security.AccessController existed since 1.2 so, if no
+ 	    // exception was thrown, the DOM application is running in a JRE
+ 	    // 1.2 or higher
+ 	    return false;
+ 	} catch (Exception ex) {
+ 	    // ignore 
+ 	}
+ 	return true;
+     }
+     
+     /**
+      * This method returns the ContextClassLoader or <code>null</code> if
+      * running in a JRE 1.1
+      *
+      * @return The Context Classloader
+      */
+     private static ClassLoader getContextClassLoader() {
+ 	return isJRE11()
+ 	    ? null
+ 	    : (ClassLoader)
+  	      AccessController.doPrivileged(new PrivilegedAction() {
+ 		    public Object run() {
+ 			ClassLoader classLoader = null;
+ 			try {
+ 			    classLoader =
+ 				Thread.currentThread().getContextClassLoader();
+ 			} catch (SecurityException ex) {
+ 			}
+ 			return classLoader;
+ 		    }
+ 		});
+     }
+     
+     /**
+      * This method returns the system property indicated by the specified name
+      * after checking access control privileges. For a JRE 1.1, this check is
+      * not done.
+      * 	 
+      * @param name the name of the system property	 
+      * @return the system property
+      */
+     private static String getSystemProperty(final String name) {
+ 	return isJRE11()
+ 	    ? (String) System.getProperty(name)
+ 	    : (String) AccessController.doPrivileged(new PrivilegedAction() {
+ 		    public Object run() {
+ 			return System.getProperty(name);
+ 		    }
+ 		});
+     }
+     
+     /**
+      * This method returns an Inputstream for the reading resource
+      * META_INF/services/org.w3c.dom.DOMImplementationSourceList after checking
+      * access control privileges. For a JRE 1.1, this check is not done.
+      *
+      * @param classLoader classLoader	 
+      * @param name the resource 	 
+      * @return an Inputstream for the resource specified
+      */
+     private static InputStream getResourceAsStream(final ClassLoader classLoader,
+ 						   final String name) {
+ 	if (isJRE11()) {
+ 	    InputStream ris;
+ 	    if (classLoader == null) {
+ 		ris = ClassLoader.getSystemResourceAsStream(name);
+ 	    } else {
+ 		ris = classLoader.getResourceAsStream(name);
+ 	    }    
+ 	    return ris;
+ 	} else {
+ 	    return (InputStream)
+ 		AccessController.doPrivileged(new PrivilegedAction() {
+ 			public Object run() {
+ 			    InputStream ris;
+ 			    if (classLoader == null) {
+ 				ris =
+ 				    ClassLoader.getSystemResourceAsStream(name);
+ 			    } else {
+ 				ris = classLoader.getResourceAsStream(name);
+ 			    }
+ 			    return ris;
+ 			}
+ 		    });
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1777 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>CSS2Properties</code> interface represents a convenience 
+  * mechanism for retrieving and setting properties within a 
+  * <code>CSSStyleDeclaration</code>. The attributes of this interface 
+  * correspond to all the properties specified in CSS2. Getting an attribute 
+  * of this interface is equivalent to calling the 
+  * <code>getPropertyValue</code> method of the 
+  * <code>CSSStyleDeclaration</code> interface. Setting an attribute of this 
+  * interface is equivalent to calling the <code>setProperty</code> method of 
+  * the <code>CSSStyleDeclaration</code> interface. 
+  * <p> A conformant implementation of the CSS module is not required to 
+  * implement the <code>CSS2Properties</code> interface. If an implementation 
+  * does implement this interface, the expectation is that language-specific 
+  * methods can be used to cast from an instance of the 
+  * <code>CSSStyleDeclaration</code> interface to the 
+  * <code>CSS2Properties</code> interface. 
+  * <p> If an implementation does implement this interface, it is expected to 
+  * understand the specific syntax of the shorthand properties, and apply 
+  * their semantics; when the <code>margin</code> property is set, for 
+  * example, the <code>marginTop</code>, <code>marginRight</code>, 
+  * <code>marginBottom</code> and <code>marginLeft</code> properties are 
+  * actually being set by the underlying implementation. 
+  * <p> When dealing with CSS "shorthand" properties, the shorthand properties 
+  * should be decomposed into their component longhand properties as 
+  * appropriate, and when querying for their value, the form returned should 
+  * be the shortest form exactly equivalent to the declarations made in the 
+  * ruleset. However, if there is no shorthand declaration that could be 
+  * added to the ruleset without changing in any way the rules already 
+  * declared in the ruleset (i.e., by adding longhand rules that were 
+  * previously not declared in the ruleset), then the empty string should be 
+  * returned for the shorthand property. 
+  * <p> For example, querying for the <code>font</code> property should not 
+  * return "normal normal normal 14pt/normal Arial, sans-serif", when "14pt 
+  * Arial, sans-serif" suffices. (The normals are initial values, and are 
+  * implied by use of the longhand property.) 
+  * <p> If the values for all the longhand properties that compose a particular 
+  * string are the initial values, then a string consisting of all the 
+  * initial values should be returned (e.g. a <code>border-width</code> value 
+  * of "medium" should be returned as such, not as ""). 
+  * <p> For some shorthand properties that take missing values from other 
+  * sides, such as the <code>margin</code>, <code>padding</code>, and 
+  * <code>border-[width|style|color]</code> properties, the minimum number of 
+  * sides possible should be used; i.e., "0px 10px" will be returned instead 
+  * of "0px 10px 0px 10px". 
+  * <p> If the value of a shorthand property can not be decomposed into its 
+  * component longhand properties, as is the case for the <code>font</code> 
+  * property with a value of "menu", querying for the values of the component 
+  * longhand properties should return the empty string. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSS2Properties {
+     /**
+      *  See the azimuth property definition in CSS2. 
+      */
+     public String getAzimuth();
+     /**
+      *  See the azimuth property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setAzimuth(String azimuth)
+                                              throws DOMException;
+ 
+     /**
+      *  See the background property definition in CSS2. 
+      */
+     public String getBackground();
+     /**
+      *  See the background property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBackground(String background)
+                                              throws DOMException;
+ 
+     /**
+      *  See the background-attachment property definition in CSS2. 
+      */
+     public String getBackgroundAttachment();
+     /**
+      *  See the background-attachment property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBackgroundAttachment(String backgroundAttachment)
+                                              throws DOMException;
+ 
+     /**
+      *  See the background-color property definition in CSS2. 
+      */
+     public String getBackgroundColor();
+     /**
+      *  See the background-color property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBackgroundColor(String backgroundColor)
+                                              throws DOMException;
+ 
+     /**
+      *  See the background-image property definition in CSS2. 
+      */
+     public String getBackgroundImage();
+     /**
+      *  See the background-image property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBackgroundImage(String backgroundImage)
+                                              throws DOMException;
+ 
+     /**
+      *  See the background-position property definition in CSS2. 
+      */
+     public String getBackgroundPosition();
+     /**
+      *  See the background-position property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBackgroundPosition(String backgroundPosition)
+                                              throws DOMException;
+ 
+     /**
+      *  See the background-repeat property definition in CSS2. 
+      */
+     public String getBackgroundRepeat();
+     /**
+      *  See the background-repeat property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBackgroundRepeat(String backgroundRepeat)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border property definition in CSS2. 
+      */
+     public String getBorder();
+     /**
+      *  See the border property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorder(String border)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-collapse property definition in CSS2. 
+      */
+     public String getBorderCollapse();
+     /**
+      *  See the border-collapse property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderCollapse(String borderCollapse)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-color property definition in CSS2. 
+      */
+     public String getBorderColor();
+     /**
+      *  See the border-color property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderColor(String borderColor)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-spacing property definition in CSS2. 
+      */
+     public String getBorderSpacing();
+     /**
+      *  See the border-spacing property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderSpacing(String borderSpacing)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-style property definition in CSS2. 
+      */
+     public String getBorderStyle();
+     /**
+      *  See the border-style property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderStyle(String borderStyle)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-top property definition in CSS2. 
+      */
+     public String getBorderTop();
+     /**
+      *  See the border-top property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderTop(String borderTop)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-right property definition in CSS2. 
+      */
+     public String getBorderRight();
+     /**
+      *  See the border-right property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderRight(String borderRight)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-bottom property definition in CSS2. 
+      */
+     public String getBorderBottom();
+     /**
+      *  See the border-bottom property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderBottom(String borderBottom)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-left property definition in CSS2. 
+      */
+     public String getBorderLeft();
+     /**
+      *  See the border-left property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderLeft(String borderLeft)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-top-color property definition in CSS2. 
+      */
+     public String getBorderTopColor();
+     /**
+      *  See the border-top-color property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderTopColor(String borderTopColor)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-right-color property definition in CSS2. 
+      */
+     public String getBorderRightColor();
+     /**
+      *  See the border-right-color property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderRightColor(String borderRightColor)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-bottom-color property definition in CSS2. 
+      */
+     public String getBorderBottomColor();
+     /**
+      *  See the border-bottom-color property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderBottomColor(String borderBottomColor)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-left-color property definition in CSS2. 
+      */
+     public String getBorderLeftColor();
+     /**
+      *  See the border-left-color property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderLeftColor(String borderLeftColor)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-top-style property definition in CSS2. 
+      */
+     public String getBorderTopStyle();
+     /**
+      *  See the border-top-style property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderTopStyle(String borderTopStyle)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-right-style property definition in CSS2. 
+      */
+     public String getBorderRightStyle();
+     /**
+      *  See the border-right-style property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderRightStyle(String borderRightStyle)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-bottom-style property definition in CSS2. 
+      */
+     public String getBorderBottomStyle();
+     /**
+      *  See the border-bottom-style property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderBottomStyle(String borderBottomStyle)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-left-style property definition in CSS2. 
+      */
+     public String getBorderLeftStyle();
+     /**
+      *  See the border-left-style property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderLeftStyle(String borderLeftStyle)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-top-width property definition in CSS2. 
+      */
+     public String getBorderTopWidth();
+     /**
+      *  See the border-top-width property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderTopWidth(String borderTopWidth)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-right-width property definition in CSS2. 
+      */
+     public String getBorderRightWidth();
+     /**
+      *  See the border-right-width property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderRightWidth(String borderRightWidth)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-bottom-width property definition in CSS2. 
+      */
+     public String getBorderBottomWidth();
+     /**
+      *  See the border-bottom-width property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderBottomWidth(String borderBottomWidth)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-left-width property definition in CSS2. 
+      */
+     public String getBorderLeftWidth();
+     /**
+      *  See the border-left-width property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderLeftWidth(String borderLeftWidth)
+                                              throws DOMException;
+ 
+     /**
+      *  See the border-width property definition in CSS2. 
+      */
+     public String getBorderWidth();
+     /**
+      *  See the border-width property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBorderWidth(String borderWidth)
+                                              throws DOMException;
+ 
+     /**
+      *  See the bottom property definition in CSS2. 
+      */
+     public String getBottom();
+     /**
+      *  See the bottom property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setBottom(String bottom)
+                                              throws DOMException;
+ 
+     /**
+      *  See the caption-side property definition in CSS2. 
+      */
+     public String getCaptionSide();
+     /**
+      *  See the caption-side property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setCaptionSide(String captionSide)
+                                              throws DOMException;
+ 
+     /**
+      *  See the clear property definition in CSS2. 
+      */
+     public String getClear();
+     /**
+      *  See the clear property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setClear(String clear)
+                                              throws DOMException;
+ 
+     /**
+      *  See the clip property definition in CSS2. 
+      */
+     public String getClip();
+     /**
+      *  See the clip property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setClip(String clip)
+                                              throws DOMException;
+ 
+     /**
+      *  See the color property definition in CSS2. 
+      */
+     public String getColor();
+     /**
+      *  See the color property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setColor(String color)
+                                              throws DOMException;
+ 
+     /**
+      *  See the content property definition in CSS2. 
+      */
+     public String getContent();
+     /**
+      *  See the content property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setContent(String content)
+                                              throws DOMException;
+ 
+     /**
+      *  See the counter-increment property definition in CSS2. 
+      */
+     public String getCounterIncrement();
+     /**
+      *  See the counter-increment property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setCounterIncrement(String counterIncrement)
+                                              throws DOMException;
+ 
+     /**
+      *  See the counter-reset property definition in CSS2. 
+      */
+     public String getCounterReset();
+     /**
+      *  See the counter-reset property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setCounterReset(String counterReset)
+                                              throws DOMException;
+ 
+     /**
+      *  See the cue property definition in CSS2. 
+      */
+     public String getCue();
+     /**
+      *  See the cue property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setCue(String cue)
+                                              throws DOMException;
+ 
+     /**
+      *  See the cue-after property definition in CSS2. 
+      */
+     public String getCueAfter();
+     /**
+      *  See the cue-after property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setCueAfter(String cueAfter)
+                                              throws DOMException;
+ 
+     /**
+      *  See the cue-before property definition in CSS2. 
+      */
+     public String getCueBefore();
+     /**
+      *  See the cue-before property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setCueBefore(String cueBefore)
+                                              throws DOMException;
+ 
+     /**
+      *  See the cursor property definition in CSS2. 
+      */
+     public String getCursor();
+     /**
+      *  See the cursor property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setCursor(String cursor)
+                                              throws DOMException;
+ 
+     /**
+      *  See the direction property definition in CSS2. 
+      */
+     public String getDirection();
+     /**
+      *  See the direction property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setDirection(String direction)
+                                              throws DOMException;
+ 
+     /**
+      *  See the display property definition in CSS2. 
+      */
+     public String getDisplay();
+     /**
+      *  See the display property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setDisplay(String display)
+                                              throws DOMException;
+ 
+     /**
+      *  See the elevation property definition in CSS2. 
+      */
+     public String getElevation();
+     /**
+      *  See the elevation property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setElevation(String elevation)
+                                              throws DOMException;
+ 
+     /**
+      *  See the empty-cells property definition in CSS2. 
+      */
+     public String getEmptyCells();
+     /**
+      *  See the empty-cells property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setEmptyCells(String emptyCells)
+                                              throws DOMException;
+ 
+     /**
+      *  See the float property definition in CSS2. 
+      */
+     public String getCssFloat();
+     /**
+      *  See the float property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setCssFloat(String cssFloat)
+                                              throws DOMException;
+ 
+     /**
+      *  See the font property definition in CSS2. 
+      */
+     public String getFont();
+     /**
+      *  See the font property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setFont(String font)
+                                              throws DOMException;
+ 
+     /**
+      *  See the font-family property definition in CSS2. 
+      */
+     public String getFontFamily();
+     /**
+      *  See the font-family property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setFontFamily(String fontFamily)
+                                              throws DOMException;
+ 
+     /**
+      *  See the font-size property definition in CSS2. 
+      */
+     public String getFontSize();
+     /**
+      *  See the font-size property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setFontSize(String fontSize)
+                                              throws DOMException;
+ 
+     /**
+      *  See the font-size-adjust property definition in CSS2. 
+      */
+     public String getFontSizeAdjust();
+     /**
+      *  See the font-size-adjust property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setFontSizeAdjust(String fontSizeAdjust)
+                                              throws DOMException;
+ 
+     /**
+      *  See the font-stretch property definition in CSS2. 
+      */
+     public String getFontStretch();
+     /**
+      *  See the font-stretch property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setFontStretch(String fontStretch)
+                                              throws DOMException;
+ 
+     /**
+      *  See the font-style property definition in CSS2. 
+      */
+     public String getFontStyle();
+     /**
+      *  See the font-style property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setFontStyle(String fontStyle)
+                                              throws DOMException;
+ 
+     /**
+      *  See the font-variant property definition in CSS2. 
+      */
+     public String getFontVariant();
+     /**
+      *  See the font-variant property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setFontVariant(String fontVariant)
+                                              throws DOMException;
+ 
+     /**
+      *  See the font-weight property definition in CSS2. 
+      */
+     public String getFontWeight();
+     /**
+      *  See the font-weight property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setFontWeight(String fontWeight)
+                                              throws DOMException;
+ 
+     /**
+      *  See the height property definition in CSS2. 
+      */
+     public String getHeight();
+     /**
+      *  See the height property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setHeight(String height)
+                                              throws DOMException;
+ 
+     /**
+      *  See the left property definition in CSS2. 
+      */
+     public String getLeft();
+     /**
+      *  See the left property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setLeft(String left)
+                                              throws DOMException;
+ 
+     /**
+      *  See the letter-spacing property definition in CSS2. 
+      */
+     public String getLetterSpacing();
+     /**
+      *  See the letter-spacing property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setLetterSpacing(String letterSpacing)
+                                              throws DOMException;
+ 
+     /**
+      *  See the line-height property definition in CSS2. 
+      */
+     public String getLineHeight();
+     /**
+      *  See the line-height property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setLineHeight(String lineHeight)
+                                              throws DOMException;
+ 
+     /**
+      *  See the list-style property definition in CSS2. 
+      */
+     public String getListStyle();
+     /**
+      *  See the list-style property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setListStyle(String listStyle)
+                                              throws DOMException;
+ 
+     /**
+      *  See the list-style-image property definition in CSS2. 
+      */
+     public String getListStyleImage();
+     /**
+      *  See the list-style-image property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setListStyleImage(String listStyleImage)
+                                              throws DOMException;
+ 
+     /**
+      *  See the list-style-position property definition in CSS2. 
+      */
+     public String getListStylePosition();
+     /**
+      *  See the list-style-position property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setListStylePosition(String listStylePosition)
+                                              throws DOMException;
+ 
+     /**
+      *  See the list-style-type property definition in CSS2. 
+      */
+     public String getListStyleType();
+     /**
+      *  See the list-style-type property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setListStyleType(String listStyleType)
+                                              throws DOMException;
+ 
+     /**
+      *  See the margin property definition in CSS2. 
+      */
+     public String getMargin();
+     /**
+      *  See the margin property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMargin(String margin)
+                                              throws DOMException;
+ 
+     /**
+      *  See the margin-top property definition in CSS2. 
+      */
+     public String getMarginTop();
+     /**
+      *  See the margin-top property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMarginTop(String marginTop)
+                                              throws DOMException;
+ 
+     /**
+      *  See the margin-right property definition in CSS2. 
+      */
+     public String getMarginRight();
+     /**
+      *  See the margin-right property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMarginRight(String marginRight)
+                                              throws DOMException;
+ 
+     /**
+      *  See the margin-bottom property definition in CSS2. 
+      */
+     public String getMarginBottom();
+     /**
+      *  See the margin-bottom property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMarginBottom(String marginBottom)
+                                              throws DOMException;
+ 
+     /**
+      *  See the margin-left property definition in CSS2. 
+      */
+     public String getMarginLeft();
+     /**
+      *  See the margin-left property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMarginLeft(String marginLeft)
+                                              throws DOMException;
+ 
+     /**
+      *  See the marker-offset property definition in CSS2. 
+      */
+     public String getMarkerOffset();
+     /**
+      *  See the marker-offset property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMarkerOffset(String markerOffset)
+                                              throws DOMException;
+ 
+     /**
+      *  See the marks property definition in CSS2. 
+      */
+     public String getMarks();
+     /**
+      *  See the marks property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMarks(String marks)
+                                              throws DOMException;
+ 
+     /**
+      *  See the max-height property definition in CSS2. 
+      */
+     public String getMaxHeight();
+     /**
+      *  See the max-height property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMaxHeight(String maxHeight)
+                                              throws DOMException;
+ 
+     /**
+      *  See the max-width property definition in CSS2. 
+      */
+     public String getMaxWidth();
+     /**
+      *  See the max-width property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMaxWidth(String maxWidth)
+                                              throws DOMException;
+ 
+     /**
+      *  See the min-height property definition in CSS2. 
+      */
+     public String getMinHeight();
+     /**
+      *  See the min-height property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMinHeight(String minHeight)
+                                              throws DOMException;
+ 
+     /**
+      *  See the min-width property definition in CSS2. 
+      */
+     public String getMinWidth();
+     /**
+      *  See the min-width property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setMinWidth(String minWidth)
+                                              throws DOMException;
+ 
+     /**
+      *  See the orphans property definition in CSS2. 
+      */
+     public String getOrphans();
+     /**
+      *  See the orphans property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setOrphans(String orphans)
+                                              throws DOMException;
+ 
+     /**
+      *  See the outline property definition in CSS2. 
+      */
+     public String getOutline();
+     /**
+      *  See the outline property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setOutline(String outline)
+                                              throws DOMException;
+ 
+     /**
+      *  See the outline-color property definition in CSS2. 
+      */
+     public String getOutlineColor();
+     /**
+      *  See the outline-color property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setOutlineColor(String outlineColor)
+                                              throws DOMException;
+ 
+     /**
+      *  See the outline-style property definition in CSS2. 
+      */
+     public String getOutlineStyle();
+     /**
+      *  See the outline-style property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setOutlineStyle(String outlineStyle)
+                                              throws DOMException;
+ 
+     /**
+      *  See the outline-width property definition in CSS2. 
+      */
+     public String getOutlineWidth();
+     /**
+      *  See the outline-width property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setOutlineWidth(String outlineWidth)
+                                              throws DOMException;
+ 
+     /**
+      *  See the overflow property definition in CSS2. 
+      */
+     public String getOverflow();
+     /**
+      *  See the overflow property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setOverflow(String overflow)
+                                              throws DOMException;
+ 
+     /**
+      *  See the padding property definition in CSS2. 
+      */
+     public String getPadding();
+     /**
+      *  See the padding property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPadding(String padding)
+                                              throws DOMException;
+ 
+     /**
+      *  See the padding-top property definition in CSS2. 
+      */
+     public String getPaddingTop();
+     /**
+      *  See the padding-top property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPaddingTop(String paddingTop)
+                                              throws DOMException;
+ 
+     /**
+      *  See the padding-right property definition in CSS2. 
+      */
+     public String getPaddingRight();
+     /**
+      *  See the padding-right property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPaddingRight(String paddingRight)
+                                              throws DOMException;
+ 
+     /**
+      *  See the padding-bottom property definition in CSS2. 
+      */
+     public String getPaddingBottom();
+     /**
+      *  See the padding-bottom property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPaddingBottom(String paddingBottom)
+                                              throws DOMException;
+ 
+     /**
+      *  See the padding-left property definition in CSS2. 
+      */
+     public String getPaddingLeft();
+     /**
+      *  See the padding-left property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPaddingLeft(String paddingLeft)
+                                              throws DOMException;
+ 
+     /**
+      *  See the page property definition in CSS2. 
+      */
+     public String getPage();
+     /**
+      *  See the page property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPage(String page)
+                                              throws DOMException;
+ 
+     /**
+      *  See the page-break-after property definition in CSS2. 
+      */
+     public String getPageBreakAfter();
+     /**
+      *  See the page-break-after property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPageBreakAfter(String pageBreakAfter)
+                                              throws DOMException;
+ 
+     /**
+      *  See the page-break-before property definition in CSS2. 
+      */
+     public String getPageBreakBefore();
+     /**
+      *  See the page-break-before property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPageBreakBefore(String pageBreakBefore)
+                                              throws DOMException;
+ 
+     /**
+      *  See the page-break-inside property definition in CSS2. 
+      */
+     public String getPageBreakInside();
+     /**
+      *  See the page-break-inside property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPageBreakInside(String pageBreakInside)
+                                              throws DOMException;
+ 
+     /**
+      *  See the pause property definition in CSS2. 
+      */
+     public String getPause();
+     /**
+      *  See the pause property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPause(String pause)
+                                              throws DOMException;
+ 
+     /**
+      *  See the pause-after property definition in CSS2. 
+      */
+     public String getPauseAfter();
+     /**
+      *  See the pause-after property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPauseAfter(String pauseAfter)
+                                              throws DOMException;
+ 
+     /**
+      *  See the pause-before property definition in CSS2. 
+      */
+     public String getPauseBefore();
+     /**
+      *  See the pause-before property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPauseBefore(String pauseBefore)
+                                              throws DOMException;
+ 
+     /**
+      *  See the pitch property definition in CSS2. 
+      */
+     public String getPitch();
+     /**
+      *  See the pitch property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPitch(String pitch)
+                                              throws DOMException;
+ 
+     /**
+      *  See the pitch-range property definition in CSS2. 
+      */
+     public String getPitchRange();
+     /**
+      *  See the pitch-range property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPitchRange(String pitchRange)
+                                              throws DOMException;
+ 
+     /**
+      *  See the play-during property definition in CSS2. 
+      */
+     public String getPlayDuring();
+     /**
+      *  See the play-during property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPlayDuring(String playDuring)
+                                              throws DOMException;
+ 
+     /**
+      *  See the position property definition in CSS2. 
+      */
+     public String getPosition();
+     /**
+      *  See the position property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setPosition(String position)
+                                              throws DOMException;
+ 
+     /**
+      *  See the quotes property definition in CSS2. 
+      */
+     public String getQuotes();
+     /**
+      *  See the quotes property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setQuotes(String quotes)
+                                              throws DOMException;
+ 
+     /**
+      *  See the richness property definition in CSS2. 
+      */
+     public String getRichness();
+     /**
+      *  See the richness property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setRichness(String richness)
+                                              throws DOMException;
+ 
+     /**
+      *  See the right property definition in CSS2. 
+      */
+     public String getRight();
+     /**
+      *  See the right property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setRight(String right)
+                                              throws DOMException;
+ 
+     /**
+      *  See the size property definition in CSS2. 
+      */
+     public String getSize();
+     /**
+      *  See the size property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setSize(String size)
+                                              throws DOMException;
+ 
+     /**
+      *  See the speak property definition in CSS2. 
+      */
+     public String getSpeak();
+     /**
+      *  See the speak property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setSpeak(String speak)
+                                              throws DOMException;
+ 
+     /**
+      *  See the speak-header property definition in CSS2. 
+      */
+     public String getSpeakHeader();
+     /**
+      *  See the speak-header property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setSpeakHeader(String speakHeader)
+                                              throws DOMException;
+ 
+     /**
+      *  See the speak-numeral property definition in CSS2. 
+      */
+     public String getSpeakNumeral();
+     /**
+      *  See the speak-numeral property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setSpeakNumeral(String speakNumeral)
+                                              throws DOMException;
+ 
+     /**
+      *  See the speak-punctuation property definition in CSS2. 
+      */
+     public String getSpeakPunctuation();
+     /**
+      *  See the speak-punctuation property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setSpeakPunctuation(String speakPunctuation)
+                                              throws DOMException;
+ 
+     /**
+      *  See the speech-rate property definition in CSS2. 
+      */
+     public String getSpeechRate();
+     /**
+      *  See the speech-rate property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setSpeechRate(String speechRate)
+                                              throws DOMException;
+ 
+     /**
+      *  See the stress property definition in CSS2. 
+      */
+     public String getStress();
+     /**
+      *  See the stress property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setStress(String stress)
+                                              throws DOMException;
+ 
+     /**
+      *  See the table-layout property definition in CSS2. 
+      */
+     public String getTableLayout();
+     /**
+      *  See the table-layout property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setTableLayout(String tableLayout)
+                                              throws DOMException;
+ 
+     /**
+      *  See the text-align property definition in CSS2. 
+      */
+     public String getTextAlign();
+     /**
+      *  See the text-align property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setTextAlign(String textAlign)
+                                              throws DOMException;
+ 
+     /**
+      *  See the text-decoration property definition in CSS2. 
+      */
+     public String getTextDecoration();
+     /**
+      *  See the text-decoration property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setTextDecoration(String textDecoration)
+                                              throws DOMException;
+ 
+     /**
+      *  See the text-indent property definition in CSS2. 
+      */
+     public String getTextIndent();
+     /**
+      *  See the text-indent property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setTextIndent(String textIndent)
+                                              throws DOMException;
+ 
+     /**
+      *  See the text-shadow property definition in CSS2. 
+      */
+     public String getTextShadow();
+     /**
+      *  See the text-shadow property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setTextShadow(String textShadow)
+                                              throws DOMException;
+ 
+     /**
+      *  See the text-transform property definition in CSS2. 
+      */
+     public String getTextTransform();
+     /**
+      *  See the text-transform property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setTextTransform(String textTransform)
+                                              throws DOMException;
+ 
+     /**
+      *  See the top property definition in CSS2. 
+      */
+     public String getTop();
+     /**
+      *  See the top property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setTop(String top)
+                                              throws DOMException;
+ 
+     /**
+      *  See the unicode-bidi property definition in CSS2. 
+      */
+     public String getUnicodeBidi();
+     /**
+      *  See the unicode-bidi property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setUnicodeBidi(String unicodeBidi)
+                                              throws DOMException;
+ 
+     /**
+      *  See the vertical-align property definition in CSS2. 
+      */
+     public String getVerticalAlign();
+     /**
+      *  See the vertical-align property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setVerticalAlign(String verticalAlign)
+                                              throws DOMException;
+ 
+     /**
+      *  See the visibility property definition in CSS2. 
+      */
+     public String getVisibility();
+     /**
+      *  See the visibility property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setVisibility(String visibility)
+                                              throws DOMException;
+ 
+     /**
+      *  See the voice-family property definition in CSS2. 
+      */
+     public String getVoiceFamily();
+     /**
+      *  See the voice-family property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setVoiceFamily(String voiceFamily)
+                                              throws DOMException;
+ 
+     /**
+      *  See the volume property definition in CSS2. 
+      */
+     public String getVolume();
+     /**
+      *  See the volume property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setVolume(String volume)
+                                              throws DOMException;
+ 
+     /**
+      *  See the white-space property definition in CSS2. 
+      */
+     public String getWhiteSpace();
+     /**
+      *  See the white-space property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setWhiteSpace(String whiteSpace)
+                                              throws DOMException;
+ 
+     /**
+      *  See the widows property definition in CSS2. 
+      */
+     public String getWidows();
+     /**
+      *  See the widows property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setWidows(String widows)
+                                              throws DOMException;
+ 
+     /**
+      *  See the width property definition in CSS2. 
+      */
+     public String getWidth();
+     /**
+      *  See the width property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setWidth(String width)
+                                              throws DOMException;
+ 
+     /**
+      *  See the word-spacing property definition in CSS2. 
+      */
+     public String getWordSpacing();
+     /**
+      *  See the word-spacing property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setWordSpacing(String wordSpacing)
+                                              throws DOMException;
+ 
+     /**
+      *  See the z-index property definition in CSS2. 
+      */
+     public String getZIndex();
+     /**
+      *  See the z-index property definition in CSS2. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the new value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setZIndex(String zIndex)
+                                              throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>CSSCharsetRule</code> interface represents a @charset rule in a 
+  * CSS style sheet. The value of the <code>encoding</code> attribute does 
+  * not affect the encoding of text data in the DOM objects; this encoding is 
+  * always UTF-16. After a stylesheet is loaded, the value of the 
+  * <code>encoding</code> attribute is the value found in the 
+  * <code>@charset</code> rule. If there was no <code>@charset</code> in the 
+  * original document, then no <code>CSSCharsetRule</code> is created. The 
+  * value of the <code>encoding</code> attribute may also be used as a hint 
+  * for the encoding used on serialization of the style sheet. 
+  * <p> The value of the @charset rule (and therefore of the 
+  * <code>CSSCharsetRule</code>) may not correspond to the encoding the 
+  * document actually came in; character encoding information e.g. in an HTTP 
+  * header, has priority (see CSS document representation) but this is not 
+  * reflected in the <code>CSSCharsetRule</code>. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSCharsetRule extends CSSRule {
+     /**
+      *  The encoding information used in this <code>@charset</code> rule. 
+      */
+     public String getEncoding();
+     /**
+      *  The encoding information used in this <code>@charset</code> rule. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the specified encoding value has a syntax error 
+      *   and is unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this encoding rule is 
+      *   readonly.
+      */
+     public void setEncoding(String encoding)
+                            throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,28 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ /**
+  *  The <code>CSSFontFaceRule</code> interface represents a @font-face rule in 
+  * a CSS style sheet. The <code>@font-face</code> rule is used to hold a set 
+  * of font descriptions. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSFontFaceRule extends CSSRule {
+     /**
+      *  The declaration-block of this rule. 
+      */
+     public CSSStyleDeclaration getStyle();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,44 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.stylesheets.MediaList;
+ 
+ /**
+  *  The <code>CSSImportRule</code> interface represents a @import rule within 
+  * a CSS style sheet. The <code>@import</code> rule is used to import style 
+  * rules from other style sheets. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSImportRule extends CSSRule {
+     /**
+      *  The location of the style sheet to be imported. The attribute will not 
+      * contain the <code>"url(...)"</code> specifier around the URI. 
+      */
+     public String getHref();
+ 
+     /**
+      *  A list of media types for which this style sheet may be used. 
+      */
+     public MediaList getMedia();
+ 
+     /**
+      * The style sheet referred to by this rule, if it has been loaded. The 
+      * value of this attribute is <code>null</code> if the style sheet has 
+      * not yet been loaded or if it will not be loaded (e.g. if the style 
+      * sheet is for a media type not supported by the user agent). 
+      */
+     public CSSStyleSheet getStyleSheet();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.stylesheets.MediaList;
+ 
+ /**
+  *  The <code>CSSMediaRule</code> interface represents a @media rule in a CSS 
+  * style sheet. A <code>@media</code> rule can be used to delimit style 
+  * rules for specific media types. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSMediaRule extends CSSRule {
+     /**
+      *  A list of media types for this rule. 
+      */
+     public MediaList getMedia();
+ 
+     /**
+      *  A list of all CSS rules contained within the media block. 
+      */
+     public CSSRuleList getCssRules();
+ 
+     /**
+      *  Used to insert a new rule into the media block. 
+      * @param rule  The parsable text representing the rule. For rule sets 
+      *   this contains both the selector and the style declaration. For 
+      *   at-rules, this specifies both the at-identifier and the rule 
+      *   content. 
+      * @param index  The index within the media block's rule collection of 
+      *   the rule before which to insert the specified rule. If the 
+      *   specified index is equal to the length of the media blocks's rule 
+      *   collection, the rule will be added to the end of the media block. 
+      * @return  The index within the media block's rule collection of the 
+      *   newly inserted rule. 
+      * @exception DOMException
+      *   HIERARCHY_REQUEST_ERR: Raised if the rule cannot be inserted at the 
+      *   specified index, e.g., if an <code>@import</code> rule is inserted 
+      *   after a standard rule set or other at-rule.
+      *   <br>INDEX_SIZE_ERR: Raised if the specified index is not a valid 
+      *   insertion point.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this media rule is 
+      *   readonly.
+      *   <br>SYNTAX_ERR: Raised if the specified rule has a syntax error and 
+      *   is unparsable.
+      */
+     public int insertRule(String rule, 
+                           int index)
+                           throws DOMException;
+ 
+     /**
+      *  Used to delete a rule from the media block. 
+      * @param index  The index within the media block's rule collection of 
+      *   the rule to remove. 
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified index does not correspond to 
+      *   a rule in the media rule list.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this media rule is 
+      *   readonly.
+      */
+     public void deleteRule(int index)
+                            throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,44 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>CSSPageRule</code> interface represents a @page rule within a 
+  * CSS style sheet. The <code>@page</code> rule is used to specify the 
+  * dimensions, orientation, margins, etc. of a page box for paged media. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSPageRule extends CSSRule {
+     /**
+      *  The parsable textual representation of the page selector for the rule. 
+      */
+     public String getSelectorText();
+     /**
+      *  The parsable textual representation of the page selector for the rule. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the specified CSS string value has a syntax 
+      *   error and is unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this rule is readonly.
+      */
+     public void setSelectorText(String selectorText)
+                            throws DOMException;
+ 
+     /**
+      *  The declaration-block of this rule. 
+      */
+     public CSSStyleDeclaration getStyle();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,296 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>CSSPrimitiveValue</code> interface represents a single CSS value
+  * . This interface may be used to determine the value of a specific style 
+  * property currently set in a block or to set a specific style property 
+  * explicitly within the block. An instance of this interface might be 
+  * obtained from the <code>getPropertyCSSValue</code> method of the 
+  * <code>CSSStyleDeclaration</code> interface. A 
+  * <code>CSSPrimitiveValue</code> object only occurs in a context of a CSS 
+  * property. 
+  * <p> Conversions are allowed between absolute values (from millimeters to 
+  * centimeters, from degrees to radians, and so on) but not between relative 
+  * values. (For example, a pixel value cannot be converted to a centimeter 
+  * value.) Percentage values can't be converted since they are relative to 
+  * the parent value (or another property value). There is one exception for 
+  * color percentage values: since a color percentage value is relative to 
+  * the range 0-255, a color percentage value can be converted to a number; 
+  * (see also the <code>RGBColor</code> interface). 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSPrimitiveValue extends CSSValue {
+     // UnitTypes
+     /**
+      * The value is not a recognized CSS2 value. The value can only be 
+      * obtained by using the <code>cssText</code> attribute.
+      */
+     public static final short CSS_UNKNOWN               = 0;
+     /**
+      * The value is a simple number. The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_NUMBER                = 1;
+     /**
+      * The value is a percentage. The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_PERCENTAGE            = 2;
+     /**
+      * The value is a length (ems). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_EMS                   = 3;
+     /**
+      * The value is a length (exs). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_EXS                   = 4;
+     /**
+      * The value is a length (px). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_PX                    = 5;
+     /**
+      * The value is a length (cm). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_CM                    = 6;
+     /**
+      * The value is a length (mm). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_MM                    = 7;
+     /**
+      * The value is a length (in). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_IN                    = 8;
+     /**
+      * The value is a length (pt). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_PT                    = 9;
+     /**
+      * The value is a length (pc). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_PC                    = 10;
+     /**
+      * The value is an angle (deg). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_DEG                   = 11;
+     /**
+      * The value is an angle (rad). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_RAD                   = 12;
+     /**
+      * The value is an angle (grad). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_GRAD                  = 13;
+     /**
+      * The value is a time (ms). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_MS                    = 14;
+     /**
+      * The value is a time (s). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_S                     = 15;
+     /**
+      * The value is a frequency (Hz). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_HZ                    = 16;
+     /**
+      * The value is a frequency (kHz). The value can be obtained by using the 
+      * <code>getFloatValue</code> method.
+      */
+     public static final short CSS_KHZ                   = 17;
+     /**
+      * The value is a number with an unknown dimension. The value can be 
+      * obtained by using the <code>getFloatValue</code> method.
+      */
+     public static final short CSS_DIMENSION             = 18;
+     /**
+      * The value is a STRING. The value can be obtained by using the 
+      * <code>getStringValue</code> method.
+      */
+     public static final short CSS_STRING                = 19;
+     /**
+      * The value is a URI. The value can be obtained by using the 
+      * <code>getStringValue</code> method.
+      */
+     public static final short CSS_URI                   = 20;
+     /**
+      * The value is an identifier. The value can be obtained by using the 
+      * <code>getStringValue</code> method.
+      */
+     public static final short CSS_IDENT                 = 21;
+     /**
+      * The value is a attribute function. The value can be obtained by using 
+      * the <code>getStringValue</code> method.
+      */
+     public static final short CSS_ATTR                  = 22;
+     /**
+      * The value is a counter or counters function. The value can be obtained 
+      * by using the <code>getCounterValue</code> method.
+      */
+     public static final short CSS_COUNTER               = 23;
+     /**
+      * The value is a rect function. The value can be obtained by using the 
+      * <code>getRectValue</code> method.
+      */
+     public static final short CSS_RECT                  = 24;
+     /**
+      * The value is a RGB color. The value can be obtained by using the 
+      * <code>getRGBColorValue</code> method.
+      */
+     public static final short CSS_RGBCOLOR              = 25;
+ 
+     /**
+      * The type of the value as defined by the constants specified above.
+      */
+     public short getPrimitiveType();
+ 
+     /**
+      *  A method to set the float value with a specified unit. If the property 
+      * attached with this value can not accept the specified unit or the 
+      * float value, the value will be unchanged and a 
+      * <code>DOMException</code> will be raised. 
+      * @param unitType  A unit code as defined above. The unit code can only 
+      *   be a float unit type (i.e. <code>CSS_NUMBER</code>, 
+      *   <code>CSS_PERCENTAGE</code>, <code>CSS_EMS</code>, 
+      *   <code>CSS_EXS</code>, <code>CSS_PX</code>, <code>CSS_CM</code>, 
+      *   <code>CSS_MM</code>, <code>CSS_IN</code>, <code>CSS_PT</code>, 
+      *   <code>CSS_PC</code>, <code>CSS_DEG</code>, <code>CSS_RAD</code>, 
+      *   <code>CSS_GRAD</code>, <code>CSS_MS</code>, <code>CSS_S</code>, 
+      *   <code>CSS_HZ</code>, <code>CSS_KHZ</code>, 
+      *   <code>CSS_DIMENSION</code>). 
+      * @param floatValue  The new float value. 
+      * @exception DOMException
+      *    INVALID_ACCESS_ERR: Raised if the attached property doesn't support 
+      *   the float value or the unit type.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setFloatValue(short unitType, 
+                               float floatValue)
+                               throws DOMException;
+ 
+     /**
+      *  This method is used to get a float value in a specified unit. If this 
+      * CSS value doesn't contain a float value or can't be converted into 
+      * the specified unit, a <code>DOMException</code> is raised. 
+      * @param unitType  A unit code to get the float value. The unit code can 
+      *   only be a float unit type (i.e. <code>CSS_NUMBER</code>, 
+      *   <code>CSS_PERCENTAGE</code>, <code>CSS_EMS</code>, 
+      *   <code>CSS_EXS</code>, <code>CSS_PX</code>, <code>CSS_CM</code>, 
+      *   <code>CSS_MM</code>, <code>CSS_IN</code>, <code>CSS_PT</code>, 
+      *   <code>CSS_PC</code>, <code>CSS_DEG</code>, <code>CSS_RAD</code>, 
+      *   <code>CSS_GRAD</code>, <code>CSS_MS</code>, <code>CSS_S</code>, 
+      *   <code>CSS_HZ</code>, <code>CSS_KHZ</code>, 
+      *   <code>CSS_DIMENSION</code>). 
+      * @return  The float value in the specified unit. 
+      * @exception DOMException
+      *    INVALID_ACCESS_ERR: Raised if the CSS value doesn't contain a float 
+      *   value or if the float value can't be converted into the specified 
+      *   unit. 
+      */
+     public float getFloatValue(short unitType)
+                                throws DOMException;
+ 
+     /**
+      *  A method to set the string value with the specified unit. If the 
+      * property attached to this value can't accept the specified unit or 
+      * the string value, the value will be unchanged and a 
+      * <code>DOMException</code> will be raised. 
+      * @param stringType  A string code as defined above. The string code can 
+      *   only be a string unit type (i.e. <code>CSS_STRING</code>, 
+      *   <code>CSS_URI</code>, <code>CSS_IDENT</code>, and 
+      *   <code>CSS_ATTR</code>). 
+      * @param stringValue  The new string value. 
+      * @exception DOMException
+      *    INVALID_ACCESS_ERR: Raised if the CSS value doesn't contain a string 
+      *   value or if the string value can't be converted into the specified 
+      *   unit.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
+      */
+     public void setStringValue(short stringType, 
+                                String stringValue)
+                                throws DOMException;
+ 
+     /**
+      *  This method is used to get the string value. If the CSS value doesn't 
+      * contain a string value, a <code>DOMException</code> is raised.  Some 
+      * properties (like 'font-family' or 'voice-family') convert a 
+      * whitespace separated list of idents to a string. 
+      * @return  The string value in the current unit. The current 
+      *   <code>primitiveType</code> can only be a string unit type (i.e. 
+      *   <code>CSS_STRING</code>, <code>CSS_URI</code>, 
+      *   <code>CSS_IDENT</code> and <code>CSS_ATTR</code>). 
+      * @exception DOMException
+      *    INVALID_ACCESS_ERR: Raised if the CSS value doesn't contain a string 
+      *   value. 
+      */
+     public String getStringValue()
+                                  throws DOMException;
+ 
+     /**
+      *  This method is used to get the Counter value. If this CSS value 
+      * doesn't contain a counter value, a <code>DOMException</code> is 
+      * raised. Modification to the corresponding style property can be 
+      * achieved using the <code>Counter</code> interface. 
+      * @return The Counter value.
+      * @exception DOMException
+      *    INVALID_ACCESS_ERR: Raised if the CSS value doesn't contain a 
+      *   Counter value (e.g. this is not <code>CSS_COUNTER</code>). 
+      */
+     public Counter getCounterValue()
+                                    throws DOMException;
+ 
+     /**
+      *  This method is used to get the Rect value. If this CSS value doesn't 
+      * contain a rect value, a <code>DOMException</code> is raised. 
+      * Modification to the corresponding style property can be achieved 
+      * using the <code>Rect</code> interface. 
+      * @return The Rect value.
+      * @exception DOMException
+      *    INVALID_ACCESS_ERR: Raised if the CSS value doesn't contain a Rect 
+      *   value. (e.g. this is not <code>CSS_RECT</code>). 
+      */
+     public Rect getRectValue()
+                              throws DOMException;
+ 
+     /**
+      *  This method is used to get the RGB color. If this CSS value doesn't 
+      * contain a RGB color value, a <code>DOMException</code> is raised. 
+      * Modification to the corresponding style property can be achieved 
+      * using the <code>RGBColor</code> interface. 
+      * @return the RGB color value.
+      * @exception DOMException
+      *    INVALID_ACCESS_ERR: Raised if the attached property can't return a 
+      *   RGB color value (e.g. this is not <code>CSS_RGBCOLOR</code>). 
+      */
+     public RGBColor getRGBColorValue()
+                                      throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSRule.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSRule.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSRule.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>CSSRule</code> interface is the abstract base interface for any 
+  * type of CSS statement. This includes both rule sets and at-rules. An 
+  * implementation is expected to preserve all rules specified in a CSS style 
+  * sheet, even if the rule is not recognized by the parser. Unrecognized 
+  * rules are represented using the <code>CSSUnknownRule</code> interface. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSRule {
+     // RuleType
+     /**
+      * The rule is a <code>CSSUnknownRule</code>.
+      */
+     public static final short UNKNOWN_RULE              = 0;
+     /**
+      * The rule is a <code>CSSStyleRule</code>.
+      */
+     public static final short STYLE_RULE                = 1;
+     /**
+      * The rule is a <code>CSSCharsetRule</code>.
+      */
+     public static final short CHARSET_RULE              = 2;
+     /**
+      * The rule is a <code>CSSImportRule</code>.
+      */
+     public static final short IMPORT_RULE               = 3;
+     /**
+      * The rule is a <code>CSSMediaRule</code>.
+      */
+     public static final short MEDIA_RULE                = 4;
+     /**
+      * The rule is a <code>CSSFontFaceRule</code>.
+      */
+     public static final short FONT_FACE_RULE            = 5;
+     /**
+      * The rule is a <code>CSSPageRule</code>.
+      */
+     public static final short PAGE_RULE                 = 6;
+ 
+     /**
+      *  The type of the rule, as defined above. The expectation is that 
+      * binding-specific casting methods can be used to cast down from an 
+      * instance of the <code>CSSRule</code> interface to the specific 
+      * derived interface implied by the <code>type</code>. 
+      */
+     public short getType();
+ 
+     /**
+      *  The parsable textual representation of the rule. This reflects the 
+      * current state of the rule and not its initial value. 
+      */
+     public String getCssText();
+     /**
+      *  The parsable textual representation of the rule. This reflects the 
+      * current state of the rule and not its initial value. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the specified CSS string value has a syntax 
+      *   error and is unparsable.
+      *   <br>INVALID_MODIFICATION_ERR: Raised if the specified CSS string 
+      *   value represents a different type of rule than the current one.
+      *   <br>HIERARCHY_REQUEST_ERR: Raised if the rule cannot be inserted at 
+      *   this point in the style sheet.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if the rule is readonly.
+      */
+     public void setCssText(String cssText)
+                         throws DOMException;
+ 
+     /**
+      *  The style sheet that contains this rule. 
+      */
+     public CSSStyleSheet getParentStyleSheet();
+ 
+     /**
+      *  If this rule is contained inside another rule (e.g. a style rule 
+      * inside an @media block), this is the containing rule. If this rule is 
+      * not nested inside any other rules, this returns <code>null</code>. 
+      */
+     public CSSRule getParentRule();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,43 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ /**
+  *  The <code>CSSRuleList</code> interface provides the abstraction of an 
+  * ordered collection of CSS rules. 
+  * <p> The items in the <code>CSSRuleList</code> are accessible via an 
+  * integral index, starting from 0. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSRuleList {
+     /**
+      *  The number of <code>CSSRules</code> in the list. The range of valid 
+      * child rule indices is <code>0</code> to <code>length-1</code> 
+      * inclusive. 
+      */
+     public int getLength();
+ 
+     /**
+      *  Used to retrieve a CSS rule by ordinal index. The order in this 
+      * collection represents the order of the rules in the CSS style sheet. 
+      * If index is greater than or equal to the number of rules in the list, 
+      * this returns <code>null</code>. 
+      * @param index Index into the collection
+      * @return The style rule at the <code>index</code> position in the 
+      *   <code>CSSRuleList</code>, or <code>null</code> if that is not a 
+      *   valid index. 
+      */
+     public CSSRule item(int index);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,162 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>CSSStyleDeclaration</code> interface represents a single CSS 
+  * declaration block. This interface may be used to determine the style 
+  * properties currently set in a block or to set style properties explicitly 
+  * within the block. 
+  * <p> While an implementation may not recognize all CSS properties within a 
+  * CSS declaration block, it is expected to provide access to all specified 
+  * properties in the style sheet through the <code>CSSStyleDeclaration</code>
+  *  interface. Furthermore, implementations that support a specific level of 
+  * CSS should correctly handle CSS shorthand properties for that level. For 
+  * a further discussion of shorthand properties, see the 
+  * <code>CSS2Properties</code> interface. 
+  * <p> This interface is also used to provide a read-only access to the 
+  * computed values of an element. See also the <code>ViewCSS</code> 
+  * interface.  The CSS Object Model doesn't provide an access to the 
+  * specified or actual values of the CSS cascade. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSStyleDeclaration {
+     /**
+      *  The parsable textual representation of the declaration block 
+      * (excluding the surrounding curly braces). Setting this attribute will 
+      * result in the parsing of the new value and resetting of all the 
+      * properties in the declaration block including the removal or addition 
+      * of properties. 
+      */
+     public String getCssText();
+     /**
+      *  The parsable textual representation of the declaration block 
+      * (excluding the surrounding curly braces). Setting this attribute will 
+      * result in the parsing of the new value and resetting of all the 
+      * properties in the declaration block including the removal or addition 
+      * of properties. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the specified CSS string value has a syntax 
+      *   error and is unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this declaration is 
+      *   readonly or a property is readonly.
+      */
+     public void setCssText(String cssText)
+                        throws DOMException;
+ 
+     /**
+      *  Used to retrieve the value of a CSS property if it has been explicitly 
+      * set within this declaration block. 
+      * @param propertyName  The name of the CSS property. See the CSS 
+      *   property index. 
+      * @return  Returns the value of the property if it has been explicitly 
+      *   set for this declaration block. Returns the empty string if the 
+      *   property has not been set. 
+      */
+     public String getPropertyValue(String propertyName);
+ 
+     /**
+      *  Used to retrieve the object representation of the value of a CSS 
+      * property if it has been explicitly set within this declaration block. 
+      * This method returns <code>null</code> if the property is a shorthand 
+      * property. Shorthand property values can only be accessed and modified 
+      * as strings, using the <code>getPropertyValue</code> and 
+      * <code>setProperty</code> methods. 
+      * @param propertyName  The name of the CSS property. See the CSS 
+      *   property index. 
+      * @return  Returns the value of the property if it has been explicitly 
+      *   set for this declaration block. Returns <code>null</code> if the 
+      *   property has not been set. 
+      */
+     public CSSValue getPropertyCSSValue(String propertyName);
+ 
+     /**
+      *  Used to remove a CSS property if it has been explicitly set within 
+      * this declaration block. 
+      * @param propertyName  The name of the CSS property. See the CSS 
+      *   property index. 
+      * @return  Returns the value of the property if it has been explicitly 
+      *   set for this declaration block. Returns the empty string if the 
+      *   property has not been set or the property name does not correspond 
+      *   to a known CSS property. 
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this declaration is readonly 
+      *   or the property is readonly.
+      */
+     public String removeProperty(String propertyName)
+                                  throws DOMException;
+ 
+     /**
+      *  Used to retrieve the priority of a CSS property (e.g. the 
+      * <code>"important"</code> qualifier) if the priority has been 
+      * explicitly set in this declaration block. 
+      * @param propertyName  The name of the CSS property. See the CSS 
+      *   property index. 
+      * @return  A string representing the priority (e.g. 
+      *   <code>"important"</code>) if the property has been explicitly set 
+      *   in this declaration block and has a priority specified. The empty 
+      *   string otherwise. 
+      */
+     public String getPropertyPriority(String propertyName);
+ 
+     /**
+      *  Used to set a property value and priority within this declaration 
+      * block. <code>setProperty</code> permits to modify a property or add a 
+      * new one in the declaration block. Any call to this method may modify 
+      * the order of properties in the <code>item</code> method.
+      * @param propertyName  The name of the CSS property. See the CSS 
+      *   property index. 
+      * @param value  The new value of the property. 
+      * @param priority  The new priority of the property (e.g. 
+      *   <code>"important"</code>) or the empty string if none.  
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the specified value has a syntax error and is 
+      *   unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this declaration is 
+      *   readonly or the property is readonly.
+      */
+     public void setProperty(String propertyName, 
+                             String value, 
+                             String priority)
+                             throws DOMException;
+ 
+     /**
+      *  The number of properties that have been explicitly set in this 
+      * declaration block. The range of valid indices is 0 to length-1 
+      * inclusive. 
+      */
+     public int getLength();
+ 
+     /**
+      *  Used to retrieve the properties that have been explicitly set in this 
+      * declaration block. The order of the properties retrieved using this 
+      * method does not have to be the order in which they were set. This 
+      * method can be used to iterate over all properties in this declaration 
+      * block. 
+      * @param index  Index of the property name to retrieve. 
+      * @return  The name of the property at this ordinal position. The empty 
+      *   string if no property exists at this position. 
+      */
+     public String item(int index);
+ 
+     /**
+      *  The CSS rule that contains this declaration block or <code>null</code> 
+      * if this <code>CSSStyleDeclaration</code> is not attached to a 
+      * <code>CSSRule</code>. 
+      */
+     public CSSRule getParentRule();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>CSSStyleRule</code> interface represents a single rule set in a 
+  * CSS style sheet. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSStyleRule extends CSSRule {
+     /**
+      *  The textual representation of the selector for the rule set. The 
+      * implementation may have stripped out insignificant whitespace while 
+      * parsing the selector. 
+      */
+     public String getSelectorText();
+     /**
+      *  The textual representation of the selector for the rule set. The 
+      * implementation may have stripped out insignificant whitespace while 
+      * parsing the selector. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the specified CSS string value has a syntax 
+      *   error and is unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this rule is readonly.
+      */
+     public void setSelectorText(String selectorText)
+                         throws DOMException;
+ 
+     /**
+      *  The declaration-block of this rule set. 
+      */
+     public CSSStyleDeclaration getStyle();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.stylesheets.StyleSheet;
+ 
+ /**
+  *  The <code>CSSStyleSheet</code> interface is a concrete interface used to 
+  * represent a CSS style sheet i.e., a style sheet whose content type is 
+  * "text/css". 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSStyleSheet extends StyleSheet {
+     /**
+      *  If this style sheet comes from an <code>@import</code> rule, the 
+      * <code>ownerRule</code> attribute will contain the 
+      * <code>CSSImportRule</code>. In that case, the <code>ownerNode</code> 
+      * attribute in the <code>StyleSheet</code> interface will be 
+      * <code>null</code>. If the style sheet comes from an element or a 
+      * processing instruction, the <code>ownerRule</code> attribute will be 
+      * <code>null</code> and the <code>ownerNode</code> attribute will 
+      * contain the <code>Node</code>. 
+      */
+     public CSSRule getOwnerRule();
+ 
+     /**
+      *  The list of all CSS rules contained within the style sheet. This 
+      * includes both rule sets and at-rules. 
+      */
+     public CSSRuleList getCssRules();
+ 
+     /**
+      *  Used to insert a new rule into the style sheet. The new rule now 
+      * becomes part of the cascade. 
+      * @param rule  The parsable text representing the rule. For rule sets 
+      *   this contains both the selector and the style declaration. For 
+      *   at-rules, this specifies both the at-identifier and the rule 
+      *   content. 
+      * @param index  The index within the style sheet's rule list of the rule 
+      *   before which to insert the specified rule. If the specified index 
+      *   is equal to the length of the style sheet's rule collection, the 
+      *   rule will be added to the end of the style sheet. 
+      * @return  The index within the style sheet's rule collection of the 
+      *   newly inserted rule. 
+      * @exception DOMException
+      *   HIERARCHY_REQUEST_ERR: Raised if the rule cannot be inserted at the 
+      *   specified index e.g. if an <code>@import</code> rule is inserted 
+      *   after a standard rule set or other at-rule.
+      *   <br>INDEX_SIZE_ERR: Raised if the specified index is not a valid 
+      *   insertion point.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this style sheet is 
+      *   readonly.
+      *   <br>SYNTAX_ERR: Raised if the specified rule has a syntax error and 
+      *   is unparsable.
+      */
+     public int insertRule(String rule, 
+                           int index)
+                           throws DOMException;
+ 
+     /**
+      *  Used to delete a rule from the style sheet. 
+      * @param index  The index within the style sheet's rule list of the rule 
+      *   to remove. 
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified index does not correspond to 
+      *   a rule in the style sheet's rule list.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this style sheet is 
+      *   readonly.
+      */
+     public void deleteRule(int index)
+                            throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,22 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ /**
+  *  The <code>CSSUnknownRule</code> interface represents an at-rule not 
+  * supported by this user agent. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSUnknownRule extends CSSRule {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSValue.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSValue.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSValue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>CSSValue</code> interface represents a simple or a complex 
+  * value. A <code>CSSValue</code> object only occurs in a context of a CSS 
+  * property. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSValue {
+     // UnitTypes
+     /**
+      * The value is inherited and the <code>cssText</code> contains "inherit".
+      */
+     public static final short CSS_INHERIT               = 0;
+     /**
+      * The value is a primitive value and an instance of the 
+      * <code>CSSPrimitiveValue</code> interface can be obtained by using 
+      * binding-specific casting methods on this instance of the 
+      * <code>CSSValue</code> interface.
+      */
+     public static final short CSS_PRIMITIVE_VALUE       = 1;
+     /**
+      * The value is a <code>CSSValue</code> list and an instance of the 
+      * <code>CSSValueList</code> interface can be obtained by using 
+      * binding-specific casting methods on this instance of the 
+      * <code>CSSValue</code> interface.
+      */
+     public static final short CSS_VALUE_LIST            = 2;
+     /**
+      * The value is a custom value.
+      */
+     public static final short CSS_CUSTOM                = 3;
+ 
+     /**
+      *  A string representation of the current value. 
+      */
+     public String getCssText();
+     /**
+      *  A string representation of the current value. 
+      * @exception DOMException
+      *    SYNTAX_ERR: Raised if the specified CSS string value has a syntax 
+      *   error (according to the attached property) or is unparsable. 
+      *   <br>INVALID_MODIFICATION_ERR: Raised if the specified CSS string 
+      *   value represents a different type of values than the values allowed 
+      *   by the CSS property.
+      *   <br> NO_MODIFICATION_ALLOWED_ERR: Raised if this value is readonly. 
+      */
+     public void setCssText(String cssText)
+                        throws DOMException;
+ 
+     /**
+      *  A code defining the type of the value as defined above. 
+      */
+     public short getCssValueType();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSValueList.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSValueList.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSValueList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/CSSValueList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ /**
+  * The <code>CSSValueList</code> interface provides the abstraction of an 
+  * ordered collection of CSS values.
+  * <p> Some properties allow an empty list into their syntax. In that case, 
+  * these properties take the <code>none</code> identifier. So, an empty list 
+  * means that the property has the value <code>none</code>. 
+  * <p> The items in the <code>CSSValueList</code> are accessible via an 
+  * integral index, starting from 0. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface CSSValueList extends CSSValue {
+     /**
+      * The number of <code>CSSValues</code> in the list. The range of valid 
+      * values of the indices is <code>0</code> to <code>length-1</code> 
+      * inclusive.
+      */
+     public int getLength();
+ 
+     /**
+      * Used to retrieve a <code>CSSValue</code> by ordinal index. The order in 
+      * this collection represents the order of the values in the CSS style 
+      * property. If index is greater than or equal to the number of values 
+      * in the list, this returns <code>null</code>.
+      * @param index Index into the collection.
+      * @return The <code>CSSValue</code> at the <code>index</code> position 
+      *   in the <code>CSSValueList</code>, or <code>null</code> if that is 
+      *   not a valid index.
+      */
+     public CSSValue item(int index);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/Counter.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/Counter.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/Counter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/Counter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,38 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ /**
+  *  The <code>Counter</code> interface is used to represent any counter or 
+  * counters function value. This interface reflects the values in the 
+  * underlying style property. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface Counter {
+     /**
+      *  This attribute is used for the identifier of the counter. 
+      */
+     public String getIdentifier();
+ 
+     /**
+      *  This attribute is used for the style of the list. 
+      */
+     public String getListStyle();
+ 
+     /**
+      *  This attribute is used for the separator of the nested counters. 
+      */
+     public String getSeparator();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,40 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  This interface allows the DOM user to create a <code>CSSStyleSheet</code> 
+  * outside the context of a document. There is no way to associate the new 
+  * <code>CSSStyleSheet</code> with a document in DOM Level 2. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM   Level 2
+  */
+ public interface DOMImplementationCSS extends DOMImplementation {
+     /**
+      * Creates a new <code>CSSStyleSheet</code>.
+      * @param title  The advisory title. See also the  section. 
+      * @param media  The comma-separated list of media associated with the 
+      *   new style sheet. See also the  section. 
+      * @return A new CSS style sheet.
+      * @exception DOMException
+      *    SYNTAX_ERR: Raised if the specified media string value has a syntax 
+      *   error and is unparsable. 
+      */
+     public CSSStyleSheet createCSSStyleSheet(String title, 
+                                              String media)
+                                              throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,50 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.Element;
+ import org.w3c.dom.stylesheets.DocumentStyle;
+ 
+ /**
+  * This interface represents a document with a CSS view.
+  * <p> The <code>getOverrideStyle</code> method provides a mechanism through 
+  * which a DOM author could effect immediate change to the style of an 
+  * element without modifying the explicitly linked style sheets of a 
+  * document or the inline style of elements in the style sheets. This style 
+  * sheet comes after the author style sheet in the cascade algorithm and is 
+  * called override style sheet. The override style sheet takes precedence 
+  * over author style sheets. An "!important" declaration still takes 
+  * precedence over a normal declaration. Override, author, and user style 
+  * sheets all may contain "!important" declarations. User "!important" rules 
+  * take precedence over both override and author "!important" rules, and 
+  * override "!important" rules take precedence over author "!important" 
+  * rules. 
+  * <p> The expectation is that an instance of the <code>DocumentCSS</code> 
+  * interface can be obtained by using binding-specific casting methods on an 
+  * instance of the <code>Document</code> interface. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface DocumentCSS extends DocumentStyle {
+     /**
+      *  This method is used to retrieve the override style declaration for a 
+      * specified element and a specified pseudo-element. 
+      * @param elt  The element whose style is to be modified. This parameter 
+      *   cannot be null. 
+      * @param pseudoElt  The pseudo-element or <code>null</code> if none. 
+      * @return  The override style declaration. 
+      */
+     public CSSStyleDeclaration getOverrideStyle(Element elt, 
+                                                 String pseudoElt);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ /**
+  *  Inline style information attached to elements is exposed through the 
+  * <code>style</code> attribute. This represents the contents of the STYLE 
+  * attribute for HTML elements (or elements in other schemas or DTDs which 
+  * use the STYLE attribute in the same way). The expectation is that an 
+  * instance of the ElementCSSInlineStyle interface can be obtained by using 
+  * binding-specific casting methods on an instance of the Element interface 
+  * when the element supports inline CSS style informations. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface ElementCSSInlineStyle {
+     /**
+      *  The style attribute. 
+      */
+     public CSSStyleDeclaration getStyle();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/RGBColor.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/RGBColor.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/RGBColor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/RGBColor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ /**
+  *  The <code>RGBColor</code> interface is used to represent any RGB color 
+  * value. This interface reflects the values in the underlying style 
+  * property. Hence, modifications made to the <code>CSSPrimitiveValue</code> 
+  * objects modify the style property. 
+  * <p> A specified RGB color is not clipped (even if the number is outside the 
+  * range 0-255 or 0%-100%). A computed RGB color is clipped depending on the 
+  * device. 
+  * <p> Even if a style sheet can only contain an integer for a color value, 
+  * the internal storage of this integer is a float, and this can be used as 
+  * a float in the specified or the computed style. 
+  * <p> A color percentage value can always be converted to a number and vice 
+  * versa. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface RGBColor {
+     /**
+      *  This attribute is used for the red value of the RGB color. 
+      */
+     public CSSPrimitiveValue getRed();
+ 
+     /**
+      *  This attribute is used for the green value of the RGB color. 
+      */
+     public CSSPrimitiveValue getGreen();
+ 
+     /**
+      *  This attribute is used for the blue value of the RGB color. 
+      */
+     public CSSPrimitiveValue getBlue();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/Rect.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/Rect.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/Rect.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/Rect.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,44 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ /**
+  *  The <code>Rect</code> interface is used to represent any rect value. This 
+  * interface reflects the values in the underlying style property. Hence, 
+  * modifications made to the <code>CSSPrimitiveValue</code> objects modify 
+  * the style property. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface Rect {
+     /**
+      *  This attribute is used for the top of the rect. 
+      */
+     public CSSPrimitiveValue getTop();
+ 
+     /**
+      *  This attribute is used for the right of the rect. 
+      */
+     public CSSPrimitiveValue getRight();
+ 
+     /**
+      *  This attribute is used for the bottom of the rect. 
+      */
+     public CSSPrimitiveValue getBottom();
+ 
+     /**
+      *  This attribute is used for the left of the rect. 
+      */
+     public CSSPrimitiveValue getLeft();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/ViewCSS.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/ViewCSS.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/css/ViewCSS.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/css/ViewCSS.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,43 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.css;
+ 
+ import org.w3c.dom.Element;
+ import org.w3c.dom.views.AbstractView;
+ 
+ /**
+  *  This interface represents a CSS view. The <code>getComputedStyle</code> 
+  * method provides a read only access to the computed values of an element. 
+  * <p> The expectation is that an instance of the <code>ViewCSS</code> 
+  * interface can be obtained by using binding-specific casting methods on an 
+  * instance of the <code>AbstractView</code> interface. 
+  * <p> Since a computed style is related to an <code>Element</code> node, if 
+  * this element is removed from the document, the associated 
+  * <code>CSSStyleDeclaration</code> and <code>CSSValue</code> related to 
+  * this declaration are no longer valid. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface ViewCSS extends AbstractView {
+     /**
+      *  This method is used to get the computed style as it is defined in [<a href='http://www.w3.org/TR/1998/REC-CSS2-19980512'>CSS2</a>]. 
+      * @param elt  The element whose style is to be computed. This parameter 
+      *   cannot be null. 
+      * @param pseudoElt  The pseudo-element or <code>null</code> if none. 
+      * @return  The computed style. The <code>CSSStyleDeclaration</code> is 
+      *   read-only and contains only absolute values. 
+      */
+     public CSSStyleDeclaration getComputedStyle(Element elt, 
+                                                 String pseudoElt);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.events;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>DocumentEvent</code> interface provides a mechanism by which the 
+  * user can create an Event of a type supported by the implementation. It is 
+  * expected that the <code>DocumentEvent</code> interface will be 
+  * implemented on the same object which implements the <code>Document</code> 
+  * interface in an implementation which supports the Event model. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113'>Document Object Model (DOM) Level 2 Events Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface DocumentEvent {
+     /**
+      * 
+      * @param eventType The <code>eventType</code> parameter specifies the 
+      *   type of <code>Event</code> interface to be created. If the 
+      *   <code>Event</code> interface specified is supported by the 
+      *   implementation this method will return a new <code>Event</code> of 
+      *   the interface type requested. If the <code>Event</code> is to be 
+      *   dispatched via the <code>dispatchEvent</code> method the 
+      *   appropriate event init method must be called after creation in 
+      *   order to initialize the <code>Event</code>'s values. As an example, 
+      *   a user wishing to synthesize some kind of <code>UIEvent</code> 
+      *   would call <code>createEvent</code> with the parameter "UIEvents". 
+      *   The <code>initUIEvent</code> method could then be called on the 
+      *   newly created <code>UIEvent</code> to set the specific type of 
+      *   UIEvent to be dispatched and set its context information.The 
+      *   <code>createEvent</code> method is used in creating 
+      *   <code>Event</code>s when it is either inconvenient or unnecessary 
+      *   for the user to create an <code>Event</code> themselves. In cases 
+      *   where the implementation provided <code>Event</code> is 
+      *   insufficient, users may supply their own <code>Event</code> 
+      *   implementations for use with the <code>dispatchEvent</code> method.
+      * @return The newly created <code>Event</code>
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: Raised if the implementation does not support the 
+      *   type of <code>Event</code> interface requested
+      */
+     public Event createEvent(String eventType)
+                              throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/Event.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/Event.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/Event.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/Event.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,141 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.events;
+ 
+ /**
+  * The <code>Event</code> interface is used to provide contextual information 
+  * about an event to the handler processing the event. An object which 
+  * implements the <code>Event</code> interface is generally passed as the 
+  * first parameter to an event handler. More specific context information is 
+  * passed to event handlers by deriving additional interfaces from 
+  * <code>Event</code> which contain information directly relating to the 
+  * type of event they accompany. These derived interfaces are also 
+  * implemented by the object passed to the event listener. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113'>Document Object Model (DOM) Level 2 Events Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface Event {
+     // PhaseType
+     /**
+      * The current event phase is the capturing phase.
+      */
+     public static final short CAPTURING_PHASE           = 1;
+     /**
+      * The event is currently being evaluated at the target 
+      * <code>EventTarget</code>.
+      */
+     public static final short AT_TARGET                 = 2;
+     /**
+      * The current event phase is the bubbling phase.
+      */
+     public static final short BUBBLING_PHASE            = 3;
+ 
+     /**
+      * The name of the event (case-insensitive). The name must be an XML name.
+      */
+     public String getType();
+ 
+     /**
+      * Used to indicate the <code>EventTarget</code> to which the event was 
+      * originally dispatched. 
+      */
+     public EventTarget getTarget();
+ 
+     /**
+      * Used to indicate the <code>EventTarget</code> whose 
+      * <code>EventListeners</code> are currently being processed. This is 
+      * particularly useful during capturing and bubbling. 
+      */
+     public EventTarget getCurrentTarget();
+ 
+     /**
+      * Used to indicate which phase of event flow is currently being 
+      * evaluated. 
+      */
+     public short getEventPhase();
+ 
+     /**
+      * Used to indicate whether or not an event is a bubbling event. If the 
+      * event can bubble the value is true, else the value is false. 
+      */
+     public boolean getBubbles();
+ 
+     /**
+      * Used to indicate whether or not an event can have its default action 
+      * prevented. If the default action can be prevented the value is true, 
+      * else the value is false. 
+      */
+     public boolean getCancelable();
+ 
+     /**
+      *  Used to specify the time (in milliseconds relative to the epoch) at 
+      * which the event was created. Due to the fact that some systems may 
+      * not provide this information the value of <code>timeStamp</code> may 
+      * be not available for all events. When not available, a value of 0 
+      * will be returned. Examples of epoch time are the time of the system 
+      * start or 0:0:0 UTC 1st January 1970. 
+      */
+     public long getTimeStamp();
+ 
+     /**
+      * The <code>stopPropagation</code> method is used prevent further 
+      * propagation of an event during event flow. If this method is called 
+      * by any <code>EventListener</code> the event will cease propagating 
+      * through the tree. The event will complete dispatch to all listeners 
+      * on the current <code>EventTarget</code> before event flow stops. This 
+      * method may be used during any stage of event flow.
+      */
+     public void stopPropagation();
+ 
+     /**
+      * If an event is cancelable, the <code>preventDefault</code> method is 
+      * used to signify that the event is to be canceled, meaning any default 
+      * action normally taken by the implementation as a result of the event 
+      * will not occur. If, during any stage of event flow, the 
+      * <code>preventDefault</code> method is called the event is canceled. 
+      * Any default action associated with the event will not occur. Calling 
+      * this method for a non-cancelable event has no effect. Once 
+      * <code>preventDefault</code> has been called it will remain in effect 
+      * throughout the remainder of the event's propagation. This method may 
+      * be used during any stage of event flow. 
+      */
+     public void preventDefault();
+ 
+     /**
+      * The <code>initEvent</code> method is used to initialize the value of an 
+      * <code>Event</code> created through the <code>DocumentEvent</code> 
+      * interface. This method may only be called before the 
+      * <code>Event</code> has been dispatched via the 
+      * <code>dispatchEvent</code> method, though it may be called multiple 
+      * times during that phase if necessary. If called multiple times the 
+      * final invocation takes precedence. If called from a subclass of 
+      * <code>Event</code> interface only the values specified in the 
+      * <code>initEvent</code> method are modified, all other attributes are 
+      * left unchanged.
+      * @param eventTypeArg Specifies the event type. This type may be any 
+      *   event type currently defined in this specification or a new event 
+      *   type.. The string must be an XML name. Any new event type must not 
+      *   begin with any upper, lower, or mixed case version of the string 
+      *   "DOM". This prefix is reserved for future DOM event sets. It is 
+      *   also strongly recommended that third parties adding their own 
+      *   events use their own prefix to avoid confusion and lessen the 
+      *   probability of conflicts with other new events.
+      * @param canBubbleArg Specifies whether or not the event can bubble.
+      * @param cancelableArg Specifies whether or not the event's default 
+      *   action can be prevented.
+      */
+     public void initEvent(String eventTypeArg, 
+                           boolean canBubbleArg, 
+                           boolean cancelableArg);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventException.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventException.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,36 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.events;
+ 
+ /**
+  *  Event operations may throw an <code>EventException</code> as specified in 
+  * their method descriptions. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113'>Document Object Model (DOM) Level 2 Events Specification</a>.
+  * @since DOM Level 2
+  */
+ public class EventException extends RuntimeException {
+     public EventException(short code, String message) {
+        super(message);
+        this.code = code;
+     }
+     public short   code;
+     // EventExceptionCode
+     /**
+      *  If the <code>Event</code>'s type was not specified by initializing the 
+      * event before the method was called. Specification of the Event's type 
+      * as <code>null</code> or an empty string will also trigger this 
+      * exception. 
+      */
+     public static final short UNSPECIFIED_EVENT_TYPE_ERR = 0;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventListener.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventListener.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,41 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.events;
+ 
+ /**
+  *  The <code>EventListener</code> interface is the primary method for 
+  * handling events. Users implement the <code>EventListener</code> interface 
+  * and register their listener on an <code>EventTarget</code> using the 
+  * <code>AddEventListener</code> method. The users should also remove their 
+  * <code>EventListener</code> from its <code>EventTarget</code> after they 
+  * have completed using the listener. 
+  * <p> When a <code>Node</code> is copied using the <code>cloneNode</code> 
+  * method the <code>EventListener</code>s attached to the source 
+  * <code>Node</code> are not attached to the copied <code>Node</code>. If 
+  * the user wishes the same <code>EventListener</code>s to be added to the 
+  * newly created copy the user must add them manually. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113'>Document Object Model (DOM) Level 2 Events Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface EventListener {
+     /**
+      *  This method is called whenever an event occurs of the type for which 
+      * the <code> EventListener</code> interface was registered. 
+      * @param evt  The <code>Event</code> contains contextual information 
+      *   about the event. It also contains the <code>stopPropagation</code> 
+      *   and <code>preventDefault</code> methods which are used in 
+      *   determining the event's flow and default action. 
+      */
+     public void handleEvent(Event evt);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventTarget.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventTarget.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventTarget.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/EventTarget.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.events;
+ 
+ /**
+  *  The <code>EventTarget</code> interface is implemented by all 
+  * <code>Nodes</code> in an implementation which supports the DOM Event 
+  * Model. Therefore, this interface can be obtained by using 
+  * binding-specific casting methods on an instance of the <code>Node</code> 
+  * interface. The interface allows registration and removal of 
+  * <code>EventListeners</code> on an <code>EventTarget</code> and dispatch 
+  * of events to that <code>EventTarget</code>.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113'>Document Object Model (DOM) Level 2 Events Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface EventTarget {
+     /**
+      * This method allows the registration of event listeners on the event 
+      * target. If an <code>EventListener</code> is added to an 
+      * <code>EventTarget</code> while it is processing an event, it will not 
+      * be triggered by the current actions but may be triggered during a 
+      * later stage of event flow, such as the bubbling phase. 
+      * <br> If multiple identical <code>EventListener</code>s are registered 
+      * on the same <code>EventTarget</code> with the same parameters the 
+      * duplicate instances are discarded. They do not cause the 
+      * <code>EventListener</code> to be called twice and since they are 
+      * discarded they do not need to be removed with the 
+      * <code>removeEventListener</code> method. 
+      * @param type The event type for which the user is registering
+      * @param listener The <code>listener</code> parameter takes an interface 
+      *   implemented by the user which contains the methods to be called 
+      *   when the event occurs.
+      * @param useCapture If true, <code>useCapture</code> indicates that the 
+      *   user wishes to initiate capture. After initiating capture, all 
+      *   events of the specified type will be dispatched to the registered 
+      *   <code>EventListener</code> before being dispatched to any 
+      *   <code>EventTargets</code> beneath them in the tree. Events which 
+      *   are bubbling upward through the tree will not trigger an 
+      *   <code>EventListener</code> designated to use capture.
+      */
+     public void addEventListener(String type, 
+                                  EventListener listener, 
+                                  boolean useCapture);
+ 
+     /**
+      * This method allows the removal of event listeners from the event 
+      * target. If an <code>EventListener</code> is removed from an 
+      * <code>EventTarget</code> while it is processing an event, it will not 
+      * be triggered by the current actions. <code>EventListener</code>s can 
+      * never be invoked after being removed.
+      * <br>Calling <code>removeEventListener</code> with arguments which do 
+      * not identify any currently registered <code>EventListener</code> on 
+      * the <code>EventTarget</code> has no effect.
+      * @param type Specifies the event type of the <code>EventListener</code> 
+      *   being removed. 
+      * @param listener The <code>EventListener</code> parameter indicates the 
+      *   <code>EventListener </code> to be removed. 
+      * @param useCapture Specifies whether the <code>EventListener</code> 
+      *   being removed was registered as a capturing listener or not. If a 
+      *   listener was registered twice, one with capture and one without, 
+      *   each must be removed separately. Removal of a capturing listener 
+      *   does not affect a non-capturing version of the same listener, and 
+      *   vice versa. 
+      */
+     public void removeEventListener(String type, 
+                                     EventListener listener, 
+                                     boolean useCapture);
+ 
+     /**
+      * This method allows the dispatch of events into the implementations 
+      * event model. Events dispatched in this manner will have the same 
+      * capturing and bubbling behavior as events dispatched directly by the 
+      * implementation. The target of the event is the 
+      * <code> EventTarget</code> on which <code>dispatchEvent</code> is 
+      * called. 
+      * @param evt Specifies the event type, behavior, and contextual 
+      *   information to be used in processing the event.
+      * @return The return value of <code>dispatchEvent</code> indicates 
+      *   whether any of the listeners which handled the event called 
+      *   <code>preventDefault</code>. If <code>preventDefault</code> was 
+      *   called the value is false, else the value is true. 
+      * @exception EventException
+      *   UNSPECIFIED_EVENT_TYPE_ERR: Raised if the <code>Event</code>'s type 
+      *   was not specified by initializing the event before 
+      *   <code>dispatchEvent</code> was called. Specification of the 
+      *   <code>Event</code>'s type as <code>null</code> or an empty string 
+      *   will also trigger this exception.
+      */
+     public boolean dispatchEvent(Event evt)
+                                  throws EventException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/MouseEvent.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/MouseEvent.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/MouseEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/MouseEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,156 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.events;
+ 
+ import org.w3c.dom.views.AbstractView;
+ 
+ /**
+  * The <code>MouseEvent</code> interface provides specific contextual 
+  * information associated with Mouse events.
+  * <p>The <code>detail</code> attribute inherited from <code>UIEvent</code> 
+  * indicates the number of times a mouse button has been pressed and 
+  * released over the same screen location during a user action. The 
+  * attribute value is 1 when the user begins this action and increments by 1 
+  * for each full sequence of pressing and releasing. If the user moves the 
+  * mouse between the mousedown and mouseup the value will be set to 0, 
+  * indicating that no click is occurring.
+  * <p>In the case of nested elements mouse events are always targeted at the 
+  * most deeply nested element. Ancestors of the targeted element may use 
+  * bubbling to obtain notification of mouse events which occur within its 
+  * descendent elements.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113'>Document Object Model (DOM) Level 2 Events Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface MouseEvent extends UIEvent {
+     /**
+      * The horizontal coordinate at which the event occurred relative to the 
+      * origin of the screen coordinate system.
+      */
+     public int getScreenX();
+ 
+     /**
+      * The vertical coordinate at which the event occurred relative to the 
+      * origin of the screen coordinate system.
+      */
+     public int getScreenY();
+ 
+     /**
+      * The horizontal coordinate at which the event occurred relative to the 
+      * DOM implementation's client area.
+      */
+     public int getClientX();
+ 
+     /**
+      * The vertical coordinate at which the event occurred relative to the DOM 
+      * implementation's client area.
+      */
+     public int getClientY();
+ 
+     /**
+      * Used to indicate whether the 'ctrl' key was depressed during the firing 
+      * of the event.
+      */
+     public boolean getCtrlKey();
+ 
+     /**
+      * Used to indicate whether the 'shift' key was depressed during the 
+      * firing of the event.
+      */
+     public boolean getShiftKey();
+ 
+     /**
+      * Used to indicate whether the 'alt' key was depressed during the firing 
+      * of the event. On some platforms this key may map to an alternative 
+      * key name.
+      */
+     public boolean getAltKey();
+ 
+     /**
+      * Used to indicate whether the 'meta' key was depressed during the firing 
+      * of the event. On some platforms this key may map to an alternative 
+      * key name.
+      */
+     public boolean getMetaKey();
+ 
+     /**
+      * During mouse events caused by the depression or release of a mouse 
+      * button, <code>button</code> is used to indicate which mouse button 
+      * changed state. The values for <code>button</code> range from zero to 
+      * indicate the left button of the mouse, one to indicate the middle 
+      * button if present, and two to indicate the right button. For mice 
+      * configured for left handed use in which the button actions are 
+      * reversed the values are instead read from right to left.
+      */
+     public short getButton();
+ 
+     /**
+      * Used to identify a secondary <code>EventTarget</code> related to a UI 
+      * event. Currently this attribute is used with the mouseover event to 
+      * indicate the <code>EventTarget</code> which the pointing device 
+      * exited and with the mouseout event to indicate the 
+      * <code>EventTarget</code> which the pointing device entered.
+      */
+     public EventTarget getRelatedTarget();
+ 
+     /**
+      * The <code>initMouseEvent</code> method is used to initialize the value 
+      * of a <code>MouseEvent</code> created through the 
+      * <code>DocumentEvent</code> interface. This method may only be called 
+      * before the <code>MouseEvent</code> has been dispatched via the 
+      * <code>dispatchEvent</code> method, though it may be called multiple 
+      * times during that phase if necessary. If called multiple times, the 
+      * final invocation takes precedence.
+      * @param typeArg Specifies the event type.
+      * @param canBubbleArg Specifies whether or not the event can bubble.
+      * @param cancelableArg Specifies whether or not the event's default 
+      *   action can be prevented.
+      * @param viewArg Specifies the <code>Event</code>'s 
+      *   <code>AbstractView</code>.
+      * @param detailArg Specifies the <code>Event</code>'s mouse click count.
+      * @param screenXArg Specifies the <code>Event</code>'s screen x 
+      *   coordinate
+      * @param screenYArg Specifies the <code>Event</code>'s screen y 
+      *   coordinate
+      * @param clientXArg Specifies the <code>Event</code>'s client x 
+      *   coordinate
+      * @param clientYArg Specifies the <code>Event</code>'s client y 
+      *   coordinate
+      * @param ctrlKeyArg Specifies whether or not control key was depressed 
+      *   during the <code>Event</code>.
+      * @param altKeyArg Specifies whether or not alt key was depressed during 
+      *   the <code>Event</code>.
+      * @param shiftKeyArg Specifies whether or not shift key was depressed 
+      *   during the <code>Event</code>.
+      * @param metaKeyArg Specifies whether or not meta key was depressed 
+      *   during the <code>Event</code>.
+      * @param buttonArg Specifies the <code>Event</code>'s mouse button.
+      * @param relatedTargetArg Specifies the <code>Event</code>'s related 
+      *   <code>EventTarget</code>.
+      */
+     public void initMouseEvent(String typeArg, 
+                                boolean canBubbleArg, 
+                                boolean cancelableArg, 
+                                AbstractView viewArg, 
+                                int detailArg, 
+                                int screenXArg, 
+                                int screenYArg, 
+                                int clientXArg, 
+                                int clientYArg, 
+                                boolean ctrlKeyArg, 
+                                boolean altKeyArg, 
+                                boolean shiftKeyArg, 
+                                boolean metaKeyArg, 
+                                short buttonArg, 
+                                EventTarget relatedTargetArg);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/MutationEvent.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/MutationEvent.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/MutationEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/MutationEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,108 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.events;
+ 
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>MutationEvent</code> interface provides specific contextual 
+  * information associated with Mutation events. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113'>Document Object Model (DOM) Level 2 Events Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface MutationEvent extends Event {
+     // attrChangeType
+     /**
+      * The <code>Attr</code> was modified in place.
+      */
+     public static final short MODIFICATION              = 1;
+     /**
+      * The <code>Attr</code> was just added.
+      */
+     public static final short ADDITION                  = 2;
+     /**
+      * The <code>Attr</code> was just removed.
+      */
+     public static final short REMOVAL                   = 3;
+ 
+     /**
+      *  <code>relatedNode</code> is used to identify a secondary node related 
+      * to a mutation event. For example, if a mutation event is dispatched 
+      * to a node indicating that its parent has changed, the 
+      * <code>relatedNode</code> is the changed parent. If an event is 
+      * instead dispatched to a subtree indicating a node was changed within 
+      * it, the <code>relatedNode</code> is the changed node. In the case of 
+      * the DOMAttrModified event it indicates the <code>Attr</code> node 
+      * which was modified, added, or removed. 
+      */
+     public Node getRelatedNode();
+ 
+     /**
+      *  <code>prevValue</code> indicates the previous value of the 
+      * <code>Attr</code> node in DOMAttrModified events, and of the 
+      * <code>CharacterData</code> node in DOMCharacterDataModified events. 
+      */
+     public String getPrevValue();
+ 
+     /**
+      *  <code>newValue</code> indicates the new value of the <code>Attr</code> 
+      * node in DOMAttrModified events, and of the <code>CharacterData</code> 
+      * node in DOMCharacterDataModified events. 
+      */
+     public String getNewValue();
+ 
+     /**
+      *  <code>attrName</code> indicates the name of the changed 
+      * <code>Attr</code> node in a DOMAttrModified event. 
+      */
+     public String getAttrName();
+ 
+     /**
+      *  <code>attrChange</code> indicates the type of change which triggered 
+      * the DOMAttrModified event. The values can be <code>MODIFICATION</code>
+      * , <code>ADDITION</code>, or <code>REMOVAL</code>. 
+      */
+     public short getAttrChange();
+ 
+     /**
+      * The <code>initMutationEvent</code> method is used to initialize the 
+      * value of a <code>MutationEvent</code> created through the 
+      * <code>DocumentEvent</code> interface. This method may only be called 
+      * before the <code>MutationEvent</code> has been dispatched via the 
+      * <code>dispatchEvent</code> method, though it may be called multiple 
+      * times during that phase if necessary. If called multiple times, the 
+      * final invocation takes precedence.
+      * @param typeArg Specifies the event type.
+      * @param canBubbleArg Specifies whether or not the event can bubble.
+      * @param cancelableArg Specifies whether or not the event's default 
+      *   action can be prevented.
+      * @param relatedNodeArg Specifies the <code>Event</code>'s related Node.
+      * @param prevValueArg Specifies the <code>Event</code>'s 
+      *   <code>prevValue</code> attribute. This value may be null.
+      * @param newValueArg Specifies the <code>Event</code>'s 
+      *   <code>newValue</code> attribute. This value may be null.
+      * @param attrNameArg Specifies the <code>Event</code>'s 
+      *   <code>attrName</code> attribute. This value may be null.
+      * @param attrChangeArg Specifies the <code>Event</code>'s 
+      *   <code>attrChange</code> attribute
+      */
+     public void initMutationEvent(String typeArg, 
+                                   boolean canBubbleArg, 
+                                   boolean cancelableArg, 
+                                   Node relatedNodeArg, 
+                                   String prevValueArg, 
+                                   String newValueArg, 
+                                   String attrNameArg, 
+                                   short attrChangeArg);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/UIEvent.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/UIEvent.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/events/UIEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/events/UIEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.events;
+ 
+ import org.w3c.dom.views.AbstractView;
+ 
+ /**
+  * The <code>UIEvent</code> interface provides specific contextual information 
+  * associated with User Interface events.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113'>Document Object Model (DOM) Level 2 Events Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface UIEvent extends Event {
+     /**
+      * The <code>view</code> attribute identifies the <code>AbstractView</code>
+      *  from which the event was generated.
+      */
+     public AbstractView getView();
+ 
+     /**
+      * Specifies some detail information about the <code>Event</code>, 
+      * depending on the type of event.
+      */
+     public int getDetail();
+ 
+     /**
+      * The <code>initUIEvent</code> method is used to initialize the value of 
+      * a <code>UIEvent</code> created through the <code>DocumentEvent</code> 
+      * interface. This method may only be called before the 
+      * <code>UIEvent</code> has been dispatched via the 
+      * <code>dispatchEvent</code> method, though it may be called multiple 
+      * times during that phase if necessary. If called multiple times, the 
+      * final invocation takes precedence.
+      * @param typeArg Specifies the event type.
+      * @param canBubbleArg Specifies whether or not the event can bubble.
+      * @param cancelableArg Specifies whether or not the event's default 
+      *   action can be prevented.
+      * @param viewArg Specifies the <code>Event</code>'s 
+      *   <code>AbstractView</code>.
+      * @param detailArg Specifies the <code>Event</code>'s detail.
+      */
+     public void initUIEvent(String typeArg, 
+                             boolean canBubbleArg, 
+                             boolean cancelableArg, 
+                             AbstractView viewArg, 
+                             int detailArg);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,156 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * The anchor element. See the A element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLAnchorElement extends HTMLElement {
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public String getAccessKey();
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public void setAccessKey(String accessKey);
+ 
+     /**
+      * The character encoding of the linked resource. See the charset 
+      * attribute definition in HTML 4.01.
+      */
+     public String getCharset();
+     /**
+      * The character encoding of the linked resource. See the charset 
+      * attribute definition in HTML 4.01.
+      */
+     public void setCharset(String charset);
+ 
+     /**
+      * Comma-separated list of lengths, defining an active region geometry. 
+      * See also <code>shape</code> for the shape of the region. See the 
+      * coords attribute definition in HTML 4.01.
+      */
+     public String getCoords();
+     /**
+      * Comma-separated list of lengths, defining an active region geometry. 
+      * See also <code>shape</code> for the shape of the region. See the 
+      * coords attribute definition in HTML 4.01.
+      */
+     public void setCoords(String coords);
+ 
+     /**
+      * The absolute URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the linked resource. See the href attribute 
+      * definition in HTML 4.01.
+      */
+     public String getHref();
+     /**
+      * The absolute URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the linked resource. See the href attribute 
+      * definition in HTML 4.01.
+      */
+     public void setHref(String href);
+ 
+     /**
+      * Language code of the linked resource. See the hreflang attribute 
+      * definition in HTML 4.01.
+      */
+     public String getHreflang();
+     /**
+      * Language code of the linked resource. See the hreflang attribute 
+      * definition in HTML 4.01.
+      */
+     public void setHreflang(String hreflang);
+ 
+     /**
+      * Anchor name. See the name attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * Anchor name. See the name attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * Forward link type. See the rel attribute definition in HTML 4.01.
+      */
+     public String getRel();
+     /**
+      * Forward link type. See the rel attribute definition in HTML 4.01.
+      */
+     public void setRel(String rel);
+ 
+     /**
+      * Reverse link type. See the rev attribute definition in HTML 4.01.
+      */
+     public String getRev();
+     /**
+      * Reverse link type. See the rev attribute definition in HTML 4.01.
+      */
+     public void setRev(String rev);
+ 
+     /**
+      * The shape of the active area. The coordinates are given by 
+      * <code>coords</code>. See the shape attribute definition in HTML 4.01.
+      */
+     public String getShape();
+     /**
+      * The shape of the active area. The coordinates are given by 
+      * <code>coords</code>. See the shape attribute definition in HTML 4.01.
+      */
+     public void setShape(String shape);
+ 
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public int getTabIndex();
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public void setTabIndex(int tabIndex);
+ 
+     /**
+      * Frame to render the resource in. See the target attribute definition in 
+      * HTML 4.01.
+      */
+     public String getTarget();
+     /**
+      * Frame to render the resource in. See the target attribute definition in 
+      * HTML 4.01.
+      */
+     public void setTarget(String target);
+ 
+     /**
+      * Advisory content type. See the type attribute definition in HTML 4.01.
+      */
+     public String getType();
+     /**
+      * Advisory content type. See the type attribute definition in HTML 4.01.
+      */
+     public void setType(String type);
+ 
+     /**
+      * Removes keyboard focus from this element.
+      */
+     public void blur();
+ 
+     /**
+      * Gives keyboard focus to this element.
+      */
+     public void focus();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,156 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * An embedded Java applet. See the APPLET element definition in HTML 4.01. 
+  * This element is deprecated in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLAppletElement extends HTMLElement {
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Alternate text for user agents not rendering the normal content of this 
+      * element. See the alt attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getAlt();
+     /**
+      * Alternate text for user agents not rendering the normal content of this 
+      * element. See the alt attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setAlt(String alt);
+ 
+     /**
+      * Comma-separated archive list. See the archive attribute definition in 
+      * HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getArchive();
+     /**
+      * Comma-separated archive list. See the archive attribute definition in 
+      * HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setArchive(String archive);
+ 
+     /**
+      * Applet class file. See the code attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getCode();
+     /**
+      * Applet class file. See the code attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setCode(String code);
+ 
+     /**
+      * Optional base URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] for applet. See the codebase attribute definition in 
+      * HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getCodeBase();
+     /**
+      * Optional base URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] for applet. See the codebase attribute definition in 
+      * HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setCodeBase(String codeBase);
+ 
+     /**
+      * Override height. See the height attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getHeight();
+     /**
+      * Override height. See the height attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setHeight(String height);
+ 
+     /**
+      * Horizontal space, in pixels, to the left and right of this image, 
+      * applet, or object. See the hspace attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public int getHspace();
+     /**
+      * Horizontal space, in pixels, to the left and right of this image, 
+      * applet, or object. See the hspace attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public void setHspace(int hspace);
+ 
+     /**
+      * The name of the applet. See the name attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * The name of the applet. See the name attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * The value of the "object" attribute. See the object attribute definition
+      *  in HTML 4.01. This attribute is deprecated in HTML 4.01. 
+      * @version DOM Level 2
+      */
+     public String getObject();
+     /**
+      * The value of the "object" attribute. See the object attribute definition
+      *  in HTML 4.01. This attribute is deprecated in HTML 4.01. 
+      * @version DOM Level 2
+      */
+     public void setObject(String object);
+ 
+     /**
+      * Vertical space, in pixels, above and below this image, applet, or 
+      * object. See the vspace attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public int getVspace();
+     /**
+      * Vertical space, in pixels, above and below this image, applet, or 
+      * object. See the vspace attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public void setVspace(int vspace);
+ 
+     /**
+      * Override width. See the width attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getWidth();
+     /**
+      * Override width. See the width attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setWidth(String width);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Client-side image map area definition. See the AREA element definition in 
+  * HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLAreaElement extends HTMLElement {
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public String getAccessKey();
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public void setAccessKey(String accessKey);
+ 
+     /**
+      * Alternate text for user agents not rendering the normal content of this 
+      * element. See the alt attribute definition in HTML 4.01.
+      */
+     public String getAlt();
+     /**
+      * Alternate text for user agents not rendering the normal content of this 
+      * element. See the alt attribute definition in HTML 4.01.
+      */
+     public void setAlt(String alt);
+ 
+     /**
+      * Comma-separated list of lengths, defining an active region geometry. 
+      * See also <code>shape</code> for the shape of the region. See the 
+      * coords attribute definition in HTML 4.01.
+      */
+     public String getCoords();
+     /**
+      * Comma-separated list of lengths, defining an active region geometry. 
+      * See also <code>shape</code> for the shape of the region. See the 
+      * coords attribute definition in HTML 4.01.
+      */
+     public void setCoords(String coords);
+ 
+     /**
+      * The URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the linked resource. See the href attribute definition in 
+      * HTML 4.01.
+      */
+     public String getHref();
+     /**
+      * The URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the linked resource. See the href attribute definition in 
+      * HTML 4.01.
+      */
+     public void setHref(String href);
+ 
+     /**
+      * Specifies that this area is inactive, i.e., has no associated action. 
+      * See the nohref attribute definition in HTML 4.01.
+      */
+     public boolean getNoHref();
+     /**
+      * Specifies that this area is inactive, i.e., has no associated action. 
+      * See the nohref attribute definition in HTML 4.01.
+      */
+     public void setNoHref(boolean noHref);
+ 
+     /**
+      * The shape of the active area. The coordinates are given by 
+      * <code>coords</code>. See the shape attribute definition in HTML 4.01.
+      */
+     public String getShape();
+     /**
+      * The shape of the active area. The coordinates are given by 
+      * <code>coords</code>. See the shape attribute definition in HTML 4.01.
+      */
+     public void setShape(String shape);
+ 
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public int getTabIndex();
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public void setTabIndex(int tabIndex);
+ 
+     /**
+      * Frame to render the resource in. See the target attribute definition in 
+      * HTML 4.01.
+      */
+     public String getTarget();
+     /**
+      * Frame to render the resource in. See the target attribute definition in 
+      * HTML 4.01.
+      */
+     public void setTarget(String target);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Force a line break. See the BR element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLBRElement extends HTMLElement {
+     /**
+      * Control flow of text around floats. See the clear attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getClear();
+     /**
+      * Control flow of text around floats. See the clear attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setClear(String clear);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,40 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Document base URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]. See the BASE element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLBaseElement extends HTMLElement {
+     /**
+      * The base URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]. See the href attribute definition in HTML 4.01.
+      */
+     public String getHref();
+     /**
+      * The base URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]. See the href attribute definition in HTML 4.01.
+      */
+     public void setHref(String href);
+ 
+     /**
+      * The default target frame. See the target attribute definition in HTML 
+      * 4.01.
+      */
+     public String getTarget();
+     /**
+      * The default target frame. See the target attribute definition in HTML 
+      * 4.01.
+      */
+     public void setTarget(String target);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Base font. See the BASEFONT element definition in HTML 4.01. This element 
+  * is deprecated in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLBaseFontElement extends HTMLElement {
+     /**
+      * Font color. See the color attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getColor();
+     /**
+      * Font color. See the color attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setColor(String color);
+ 
+     /**
+      * Font face identifier. See the face attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getFace();
+     /**
+      * Font face identifier. See the face attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setFace(String face);
+ 
+     /**
+      * Computed font size. See the size attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public int getSize();
+     /**
+      * Computed font size. See the size attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public void setSize(int size);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * The HTML document body. This element is always present in the DOM API, even 
+  * if the tags are not present in the source document. See the BODY element 
+  * definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLBodyElement extends HTMLElement {
+     /**
+      * Color of active links (after mouse-button down, but before mouse-button 
+      * up). See the alink attribute definition in HTML 4.01. This attribute 
+      * is deprecated in HTML 4.01.
+      */
+     public String getALink();
+     /**
+      * Color of active links (after mouse-button down, but before mouse-button 
+      * up). See the alink attribute definition in HTML 4.01. This attribute 
+      * is deprecated in HTML 4.01.
+      */
+     public void setALink(String aLink);
+ 
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the background texture tile image. See the background attribute 
+      * definition in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getBackground();
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the background texture tile image. See the background attribute 
+      * definition in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setBackground(String background);
+ 
+     /**
+      * Document background color. See the bgcolor attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getBgColor();
+     /**
+      * Document background color. See the bgcolor attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setBgColor(String bgColor);
+ 
+     /**
+      * Color of links that are not active and unvisited. See the link 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01.
+      */
+     public String getLink();
+     /**
+      * Color of links that are not active and unvisited. See the link 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01.
+      */
+     public void setLink(String link);
+ 
+     /**
+      * Document text color. See the text attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getText();
+     /**
+      * Document text color. See the text attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setText(String text);
+ 
+     /**
+      * Color of links that have been visited by the user. See the vlink 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01.
+      */
+     public String getVLink();
+     /**
+      * Color of links that have been visited by the user. See the vlink 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01.
+      */
+     public void setVLink(String vLink);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Push button. See the BUTTON element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLButtonElement extends HTMLElement {
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public String getAccessKey();
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public void setAccessKey(String accessKey);
+ 
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public boolean getDisabled();
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public void setDisabled(boolean disabled);
+ 
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public int getTabIndex();
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public void setTabIndex(int tabIndex);
+ 
+     /**
+      * The type of button (all lower case). See the type attribute definition 
+      * in HTML 4.01.
+      */
+     public String getType();
+ 
+     /**
+      * The current form control value. See the value attribute definition in 
+      * HTML 4.01.
+      */
+     public String getValue();
+     /**
+      * The current form control value. See the value attribute definition in 
+      * HTML 4.01.
+      */
+     public void setValue(String value);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.Node;
+ 
+ /**
+  * An <code>HTMLCollection</code> is a list of nodes. An individual node may 
+  * be accessed by either ordinal index or the node's <code>name</code> or 
+  * <code>id</code> attributes. Collections in the HTML DOM are assumed to be 
+  * live meaning that they are automatically updated when the underlying 
+  * document is changed. 
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLCollection {
+     /**
+      * This attribute specifies the length or size of the list. 
+      */
+     public int getLength();
+ 
+     /**
+      * This method retrieves a node specified by ordinal index. Nodes are 
+      * numbered in tree order (depth-first traversal order).
+      * @param index The index of the node to be fetched. The index origin is 
+      *   <code>0</code>.
+      * @return The <code>Node</code> at the corresponding position upon 
+      *   success. A value of <code>null</code> is returned if the index is 
+      *   out of range. 
+      */
+     public Node item(int index);
+ 
+     /**
+      * This method retrieves a <code>Node</code> using a name. With [<a href='http://www.w3.org/TR/1999/REC-html401-19991224'>HTML 4.01</a>] 
+      * documents, it first searches for a <code>Node</code> with a matching 
+      * <code>id</code> attribute. If it doesn't find one, it then searches 
+      * for a <code>Node</code> with a matching <code>name</code> attribute, 
+      * but only on those elements that are allowed a name attribute. With [<a href='http://www.w3.org/TR/2002/REC-xhtml1-20020801'>XHTML 1.0</a>] 
+      * documents, this method only searches for <code>Nodes</code> with a 
+      * matching <code>id</code> attribute. This method is case insensitive 
+      * in HTML documents and case sensitive in XHTML documents.
+      * @param name The name of the <code>Node</code> to be fetched.
+      * @return The <code>Node</code> with a <code>name</code> or 
+      *   <code>id</code> attribute whose value corresponds to the specified 
+      *   string. Upon failure (e.g., no node with this name exists), returns 
+      *   <code>null</code>.
+      */
+     public Node namedItem(String name);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Definition list. See the DL element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLDListElement extends HTMLElement {
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public boolean getCompact();
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setCompact(boolean compact);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Directory list. See the DIR element definition in HTML 4.01. This element 
+  * is deprecated in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLDirectoryElement extends HTMLElement {
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public boolean getCompact();
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setCompact(boolean compact);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Generic block container. See the DIV element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLDivElement extends HTMLElement {
+     /**
+      * Horizontal text alignment. See the align attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Horizontal text alignment. See the align attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,237 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * An <code>HTMLDocument</code> is the root of the HTML hierarchy and holds 
+  * the entire content. Besides providing access to the hierarchy, it also 
+  * provides some convenience methods for accessing certain sets of 
+  * information from the document.
+  * <p>The following properties have been deprecated in favor of the 
+  * corresponding ones for the <code>BODY</code> element:alinkColorbackground
+  * bgColorfgColorlinkColorvlinkColorIn DOM Level 2, the method 
+  * <code>getElementById</code> is inherited from the <code>Document</code> 
+  * interface where it was moved to.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLDocument extends Document {
+     /**
+      * The title of a document as specified by the <code>TITLE</code> element 
+      * in the head of the document. 
+      */
+     public String getTitle();
+     /**
+      * The title of a document as specified by the <code>TITLE</code> element 
+      * in the head of the document. 
+      */
+     public void setTitle(String title);
+ 
+     /**
+      * Returns the URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the page that linked to this page. The value is an 
+      * empty string if the user navigated to the page directly (not through 
+      * a link, but, for example, via a bookmark). 
+      */
+     public String getReferrer();
+ 
+     /**
+      * The domain name of the server that served the document, or 
+      * <code>null</code> if the server cannot be identified by a domain 
+      * name. 
+      */
+     public String getDomain();
+ 
+     /**
+      * The absolute URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the document. 
+      */
+     public String getURL();
+ 
+     /**
+      * The element that contains the content for the document. In documents 
+      * with <code>BODY</code> contents, returns the <code>BODY</code> 
+      * element. In frameset documents, this returns the outermost 
+      * <code>FRAMESET</code> element. 
+      */
+     public HTMLElement getBody();
+     /**
+      * The element that contains the content for the document. In documents 
+      * with <code>BODY</code> contents, returns the <code>BODY</code> 
+      * element. In frameset documents, this returns the outermost 
+      * <code>FRAMESET</code> element. 
+      */
+     public void setBody(HTMLElement body);
+ 
+     /**
+      * A collection of all the <code>IMG</code> elements in a document. The 
+      * behavior is limited to <code>IMG</code> elements for backwards 
+      * compatibility. As suggested by [<a href='http://www.w3.org/TR/1999/REC-html401-19991224'>HTML 4.01</a>], to include images, authors may use 
+      * the <code>OBJECT</code> element or the <code>IMG</code> element. 
+      * Therefore, it is recommended not to use this attribute to find the 
+      * images in the document but <code>getElementsByTagName</code> with 
+      * HTML 4.01 or <code>getElementsByTagNameNS</code> with XHTML 1.0.
+      */
+     public HTMLCollection getImages();
+ 
+     /**
+      * A collection of all the <code>OBJECT</code> elements that include 
+      * applets and <code>APPLET</code> (deprecated) elements in a document. 
+      */
+     public HTMLCollection getApplets();
+ 
+     /**
+      * A collection of all <code>AREA</code> elements and anchor (
+      * <code>A</code>) elements in a document with a value for the 
+      * <code>href</code> attribute. 
+      */
+     public HTMLCollection getLinks();
+ 
+     /**
+      * A collection of all the forms of a document. 
+      */
+     public HTMLCollection getForms();
+ 
+     /**
+      *  A collection of all the anchor (<code>A</code>) elements in a document 
+      * with a value for the <code>name</code> attribute. For reasons of 
+      * backward compatibility, the returned set of anchors only contains 
+      * those anchors created with the <code>name</code> attribute, not those 
+      * created with the <code>id</code> attribute. Note that in [<a href='http://www.w3.org/TR/2002/REC-xhtml1-20020801'>XHTML 1.0</a>], the 
+      * <code>name</code> attribute (see section 4.10) has no semantics and 
+      * is only present for legacy user agents: the <code>id</code> attribute 
+      * is used instead. Users should prefer the iterator mechanisms provided 
+      * by [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>DOM Level 2 Traversal</a>] instead. 
+      */
+     public HTMLCollection getAnchors();
+ 
+     /**
+      *  This mutable string attribute denotes persistent state information 
+      * that (1) is associated with the current frame or document and (2) is 
+      * composed of information described by the <code>cookies</code> 
+      * non-terminal of [<a href='http://www.ietf.org/rfc/rfc2965.txt'>IETF RFC 2965</a>], Section 4.2.2. 
+      * <br> If no persistent state information is available for the current 
+      * frame or document document, then this property's value is an empty 
+      * string. 
+      * <br> When this attribute is read, all cookies are returned as a single 
+      * string, with each cookie's name-value pair concatenated into a list 
+      * of name-value pairs, each list item being separated by a ';' 
+      * (semicolon). 
+      * <br> When this attribute is set, the value it is set to should be a 
+      * string that adheres to the <code>cookie</code> non-terminal of [<a href='http://www.ietf.org/rfc/rfc2965.txt'>IETF RFC 2965</a>]; that 
+      * is, it should be a single name-value pair followed by zero or more 
+      * cookie attribute values. If no domain attribute is specified, then 
+      * the domain attribute for the new value defaults to the host portion 
+      * of an absolute URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the current frame or document. If no path 
+      * attribute is specified, then the path attribute for the new value 
+      * defaults to the absolute path portion of the URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the current 
+      * frame or document. If no max-age attribute is specified, then the 
+      * max-age attribute for the new value defaults to a user agent defined 
+      * value. If a cookie with the specified name is already associated with 
+      * the current frame or document, then the new value as well as the new 
+      * attributes replace the old value and attributes. If a max-age 
+      * attribute of 0 is specified for the new value, then any existing 
+      * cookies of the specified name are removed from the cookie storage.  
+      * See [<a href='http://www.ietf.org/rfc/rfc2965.txt'>IETF RFC 2965</a>] for the semantics of persistent state item attribute value 
+      * pairs.  The precise nature of a user agent session is not defined by 
+      * this specification. 
+      */
+     public String getCookie();
+     /**
+      *  This mutable string attribute denotes persistent state information 
+      * that (1) is associated with the current frame or document and (2) is 
+      * composed of information described by the <code>cookies</code> 
+      * non-terminal of [<a href='http://www.ietf.org/rfc/rfc2965.txt'>IETF RFC 2965</a>], Section 4.2.2. 
+      * <br> If no persistent state information is available for the current 
+      * frame or document document, then this property's value is an empty 
+      * string. 
+      * <br> When this attribute is read, all cookies are returned as a single 
+      * string, with each cookie's name-value pair concatenated into a list 
+      * of name-value pairs, each list item being separated by a ';' 
+      * (semicolon). 
+      * <br> When this attribute is set, the value it is set to should be a 
+      * string that adheres to the <code>cookie</code> non-terminal of [<a href='http://www.ietf.org/rfc/rfc2965.txt'>IETF RFC 2965</a>]; that 
+      * is, it should be a single name-value pair followed by zero or more 
+      * cookie attribute values. If no domain attribute is specified, then 
+      * the domain attribute for the new value defaults to the host portion 
+      * of an absolute URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the current frame or document. If no path 
+      * attribute is specified, then the path attribute for the new value 
+      * defaults to the absolute path portion of the URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the current 
+      * frame or document. If no max-age attribute is specified, then the 
+      * max-age attribute for the new value defaults to a user agent defined 
+      * value. If a cookie with the specified name is already associated with 
+      * the current frame or document, then the new value as well as the new 
+      * attributes replace the old value and attributes. If a max-age 
+      * attribute of 0 is specified for the new value, then any existing 
+      * cookies of the specified name are removed from the cookie storage.  
+      * See [<a href='http://www.ietf.org/rfc/rfc2965.txt'>IETF RFC 2965</a>] for the semantics of persistent state item attribute value 
+      * pairs.  The precise nature of a user agent session is not defined by 
+      * this specification. 
+      * @exception DOMException
+      *    SYNTAX_ERR: If the new value does not adhere to the cookie syntax 
+      *   specified by [<a href='http://www.ietf.org/rfc/rfc2965.txt'>IETF RFC 2965</a>]. 
+      */
+     public void setCookie(String cookie)
+                                       throws DOMException;
+ 
+     /**
+      * Open a document stream for writing. If a document exists in the target, 
+      * this method clears it. This method and the ones following allow a 
+      * user to add to or replace the structure model of a document using 
+      * strings of unparsed HTML. At the time of writing alternate methods 
+      * for providing similar functionality for both HTML and XML documents 
+      * were being considered (see [<a href='http://www.w3.org/TR/2002/WD-DOM-Level-3-LS-20020725'>DOM Level 3 Load and Save</a>]).
+      */
+     public void open();
+ 
+     /**
+      * Closes a document stream opened by <code>open()</code> and forces 
+      * rendering.
+      */
+     public void close();
+ 
+     /**
+      * Write a string of text to a document stream opened by 
+      * <code>open()</code>. Note that the function will produce a document 
+      * which is not necessarily driven by a DTD and therefore might be 
+      * produce an invalid result in the context of the document.
+      * @param text The string to be parsed into some structure in the 
+      *   document structure model.
+      */
+     public void write(String text);
+ 
+     /**
+      * Write a string of text followed by a newline character to a document 
+      * stream opened by <code>open()</code>. Note that the function will 
+      * produce a document which is not necessarily driven by a DTD and 
+      * therefore might be produce an invalid result in the context of the 
+      * document
+      * @param text The string to be parsed into some structure in the 
+      *   document structure model.
+      */
+     public void writeln(String text);
+ 
+     /**
+      *  With [<a href='http://www.w3.org/TR/1999/REC-html401-19991224'>HTML 4.01</a>] documents, this method returns the (possibly empty) collection 
+      * of elements whose <code>name</code> value is given by 
+      * <code>elementName</code>. In [<a href='http://www.w3.org/TR/2002/REC-xhtml1-20020801'>XHTML 1.0</a>] documents, this methods only return the 
+      * (possibly empty) collection of form controls with matching name. This 
+      * method is case sensitive. 
+      * @param elementName The <code>name</code> attribute value for an 
+      *   element.
+      * @return The matching elements.
+      */
+     public NodeList getElementsByName(String elementName);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.Element;
+ 
+ /**
+  *  All HTML element interfaces derive from this class. Elements that only 
+  * expose the HTML core attributes are represented by the base 
+  * <code>HTMLElement</code> interface. These elements are as follows: 
+  * special: SUB, SUP, SPAN, BDOfont: TT, I, B, U, S, STRIKE, BIG, SMALL
+  * phrase: EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ACRONYM, ABBRlist: 
+  * DD, DTNOFRAMES, NOSCRIPTADDRESS, CENTERThe <code>style</code> attribute 
+  * of an HTML element is accessible through the 
+  * <code>ElementCSSInlineStyle</code> interface which is defined in the CSS 
+  * module [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>DOM Level 2 Style Sheets and CSS</a>]. 
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLElement extends Element {
+     /**
+      * The element's identifier. See the id attribute definition in HTML 4.01.
+      */
+     public String getId();
+     /**
+      * The element's identifier. See the id attribute definition in HTML 4.01.
+      */
+     public void setId(String id);
+ 
+     /**
+      * The element's advisory title. See the title attribute definition in 
+      * HTML 4.01.
+      */
+     public String getTitle();
+     /**
+      * The element's advisory title. See the title attribute definition in 
+      * HTML 4.01.
+      */
+     public void setTitle(String title);
+ 
+     /**
+      * Language code defined in RFC 1766. See the lang attribute definition in 
+      * HTML 4.01.
+      */
+     public String getLang();
+     /**
+      * Language code defined in RFC 1766. See the lang attribute definition in 
+      * HTML 4.01.
+      */
+     public void setLang(String lang);
+ 
+     /**
+      * Specifies the base direction of directionally neutral text and the 
+      * directionality of tables. See the dir attribute definition in HTML 
+      * 4.01.
+      */
+     public String getDir();
+     /**
+      * Specifies the base direction of directionally neutral text and the 
+      * directionality of tables. See the dir attribute definition in HTML 
+      * 4.01.
+      */
+     public void setDir(String dir);
+ 
+     /**
+      * The class attribute of the element. This attribute has been renamed due 
+      * to conflicts with the "class" keyword exposed by many languages. See 
+      * the class attribute definition in HTML 4.01.
+      */
+     public String getClassName();
+     /**
+      * The class attribute of the element. This attribute has been renamed due 
+      * to conflicts with the "class" keyword exposed by many languages. See 
+      * the class attribute definition in HTML 4.01.
+      */
+     public void setClassName(String className);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,28 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Organizes form controls into logical groups. See the FIELDSET element 
+  * definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLFieldSetElement extends HTMLElement {
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Local change to font. See the FONT element definition in HTML 4.01. This 
+  * element is deprecated in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLFontElement extends HTMLElement {
+     /**
+      * Font color. See the color attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getColor();
+     /**
+      * Font color. See the color attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setColor(String color);
+ 
+     /**
+      * Font face identifier. See the face attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getFace();
+     /**
+      * Font face identifier. See the face attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setFace(String face);
+ 
+     /**
+      * Font size. See the size attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getSize();
+     /**
+      * Font size. See the size attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setSize(String size);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,116 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * The <code>FORM</code> element encompasses behavior similar to a collection 
+  * and an element. It provides direct access to the contained form controls 
+  * as well as the attributes of the form element. See the FORM element 
+  * definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLFormElement extends HTMLElement {
+     /**
+      * Returns a collection of all form control elements in the form. 
+      */
+     public HTMLCollection getElements();
+ 
+     /**
+      * The number of form controls in the form.
+      */
+     public int getLength();
+ 
+     /**
+      * Names the form. 
+      */
+     public String getName();
+     /**
+      * Names the form. 
+      */
+     public void setName(String name);
+ 
+     /**
+      * List of character sets supported by the server. See the accept-charset 
+      * attribute definition in HTML 4.01.
+      */
+     public String getAcceptCharset();
+     /**
+      * List of character sets supported by the server. See the accept-charset 
+      * attribute definition in HTML 4.01.
+      */
+     public void setAcceptCharset(String acceptCharset);
+ 
+     /**
+      * Server-side form handler. See the action attribute definition in HTML 
+      * 4.01.
+      */
+     public String getAction();
+     /**
+      * Server-side form handler. See the action attribute definition in HTML 
+      * 4.01.
+      */
+     public void setAction(String action);
+ 
+     /**
+      * The content type of the submitted form, generally 
+      * "application/x-www-form-urlencoded". See the enctype attribute 
+      * definition in HTML 4.01. The onsubmit even handler is not guaranteed 
+      * to be triggered when invoking this method. The behavior is 
+      * inconsistent for historical reasons and authors should not rely on a 
+      * particular one. 
+      */
+     public String getEnctype();
+     /**
+      * The content type of the submitted form, generally 
+      * "application/x-www-form-urlencoded". See the enctype attribute 
+      * definition in HTML 4.01. The onsubmit even handler is not guaranteed 
+      * to be triggered when invoking this method. The behavior is 
+      * inconsistent for historical reasons and authors should not rely on a 
+      * particular one. 
+      */
+     public void setEnctype(String enctype);
+ 
+     /**
+      * HTTP method [<a href='http://www.ietf.org/rfc/rfc2616.txt'>IETF RFC 2616</a>] used to submit form. See the method attribute definition 
+      * in HTML 4.01.
+      */
+     public String getMethod();
+     /**
+      * HTTP method [<a href='http://www.ietf.org/rfc/rfc2616.txt'>IETF RFC 2616</a>] used to submit form. See the method attribute definition 
+      * in HTML 4.01.
+      */
+     public void setMethod(String method);
+ 
+     /**
+      * Frame to render the resource in. See the target attribute definition in 
+      * HTML 4.01.
+      */
+     public String getTarget();
+     /**
+      * Frame to render the resource in. See the target attribute definition in 
+      * HTML 4.01.
+      */
+     public void setTarget(String target);
+ 
+     /**
+      * Submits the form. It performs the same action as a submit button.
+      */
+     public void submit();
+ 
+     /**
+      * Restores a form element's default values. It performs the same action 
+      * as a reset button.
+      */
+     public void reset();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,117 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.Document;
+ 
+ /**
+  * Create a frame. See the FRAME element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLFrameElement extends HTMLElement {
+     /**
+      * Request frame borders. See the frameborder attribute definition in HTML 
+      * 4.01.
+      */
+     public String getFrameBorder();
+     /**
+      * Request frame borders. See the frameborder attribute definition in HTML 
+      * 4.01.
+      */
+     public void setFrameBorder(String frameBorder);
+ 
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a long description of this image or frame. See the 
+      * longdesc attribute definition in HTML 4.01.
+      */
+     public String getLongDesc();
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a long description of this image or frame. See the 
+      * longdesc attribute definition in HTML 4.01.
+      */
+     public void setLongDesc(String longDesc);
+ 
+     /**
+      * Frame margin height, in pixels. See the marginheight attribute 
+      * definition in HTML 4.01.
+      */
+     public String getMarginHeight();
+     /**
+      * Frame margin height, in pixels. See the marginheight attribute 
+      * definition in HTML 4.01.
+      */
+     public void setMarginHeight(String marginHeight);
+ 
+     /**
+      * Frame margin width, in pixels. See the marginwidth attribute definition 
+      * in HTML 4.01.
+      */
+     public String getMarginWidth();
+     /**
+      * Frame margin width, in pixels. See the marginwidth attribute definition 
+      * in HTML 4.01.
+      */
+     public void setMarginWidth(String marginWidth);
+ 
+     /**
+      * The frame name (object of the <code>target</code> attribute). See the 
+      * name attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * The frame name (object of the <code>target</code> attribute). See the 
+      * name attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * When true, forbid user from resizing frame. See the noresize attribute 
+      * definition in HTML 4.01.
+      */
+     public boolean getNoResize();
+     /**
+      * When true, forbid user from resizing frame. See the noresize attribute 
+      * definition in HTML 4.01.
+      */
+     public void setNoResize(boolean noResize);
+ 
+     /**
+      * Specify whether or not the frame should have scrollbars. See the 
+      * scrolling attribute definition in HTML 4.01.
+      */
+     public String getScrolling();
+     /**
+      * Specify whether or not the frame should have scrollbars. See the 
+      * scrolling attribute definition in HTML 4.01.
+      */
+     public void setScrolling(String scrolling);
+ 
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating the initial frame contents. See the src attribute 
+      * definition in HTML 4.01.
+      */
+     public String getSrc();
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating the initial frame contents. See the src attribute 
+      * definition in HTML 4.01.
+      */
+     public void setSrc(String src);
+ 
+     /**
+      * The document this frame contains, if there is any and it is available, 
+      * or <code>null</code> otherwise.
+      * @since DOM Level 2
+      */
+     public Document getContentDocument();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,42 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Create a grid of frames. See the FRAMESET element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLFrameSetElement extends HTMLElement {
+     /**
+      * The number of columns of frames in the frameset. See the cols attribute 
+      * definition in HTML 4.01.
+      */
+     public String getCols();
+     /**
+      * The number of columns of frames in the frameset. See the cols attribute 
+      * definition in HTML 4.01.
+      */
+     public void setCols(String cols);
+ 
+     /**
+      * The number of rows of frames in the frameset. See the rows attribute 
+      * definition in HTML 4.01.
+      */
+     public String getRows();
+     /**
+      * The number of rows of frames in the frameset. See the rows attribute 
+      * definition in HTML 4.01.
+      */
+     public void setRows(String rows);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,66 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Create a horizontal rule. See the HR element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLHRElement extends HTMLElement {
+     /**
+      * Align the rule on the page. See the align attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Align the rule on the page. See the align attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Indicates to the user agent that there should be no shading in the 
+      * rendering of this element. See the noshade attribute definition in 
+      * HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public boolean getNoShade();
+     /**
+      * Indicates to the user agent that there should be no shading in the 
+      * rendering of this element. See the noshade attribute definition in 
+      * HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setNoShade(boolean noShade);
+ 
+     /**
+      * The height of the rule. See the size attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getSize();
+     /**
+      * The height of the rule. See the size attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setSize(String size);
+ 
+     /**
+      * The width of the rule. See the width attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getWidth();
+     /**
+      * The width of the rule. See the width attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setWidth(String width);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Document head information. See the HEAD element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLHeadElement extends HTMLElement {
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a metadata profile. See the profile attribute 
+      * definition in HTML 4.01.
+      */
+     public String getProfile();
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a metadata profile. See the profile attribute 
+      * definition in HTML 4.01.
+      */
+     public void setProfile(String profile);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * For the <code>H1</code> to <code>H6</code> elements. See the H1 element 
+  * definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLHeadingElement extends HTMLElement {
+     /**
+      * Horizontal text alignment. See the align attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Horizontal text alignment. See the align attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Root of an HTML document. See the HTML element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLHtmlElement extends HTMLElement {
+     /**
+      * Version information about the document's DTD. See the version attribute 
+      * definition in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getVersion();
+     /**
+      * Version information about the document's DTD. See the version attribute 
+      * definition in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setVersion(String version);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.Document;
+ 
+ /**
+  * Inline subwindows. See the IFRAME element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLIFrameElement extends HTMLElement {
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Request frame borders. See the frameborder attribute definition in HTML 
+      * 4.01.
+      */
+     public String getFrameBorder();
+     /**
+      * Request frame borders. See the frameborder attribute definition in HTML 
+      * 4.01.
+      */
+     public void setFrameBorder(String frameBorder);
+ 
+     /**
+      * Frame height. See the height attribute definition in HTML 4.01.
+      */
+     public String getHeight();
+     /**
+      * Frame height. See the height attribute definition in HTML 4.01.
+      */
+     public void setHeight(String height);
+ 
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a long description of this image or frame. See the 
+      * longdesc attribute definition in HTML 4.01.
+      */
+     public String getLongDesc();
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a long description of this image or frame. See the 
+      * longdesc attribute definition in HTML 4.01.
+      */
+     public void setLongDesc(String longDesc);
+ 
+     /**
+      * Frame margin height, in pixels. See the marginheight attribute 
+      * definition in HTML 4.01.
+      */
+     public String getMarginHeight();
+     /**
+      * Frame margin height, in pixels. See the marginheight attribute 
+      * definition in HTML 4.01.
+      */
+     public void setMarginHeight(String marginHeight);
+ 
+     /**
+      * Frame margin width, in pixels. See the marginwidth attribute definition 
+      * in HTML 4.01.
+      */
+     public String getMarginWidth();
+     /**
+      * Frame margin width, in pixels. See the marginwidth attribute definition 
+      * in HTML 4.01.
+      */
+     public void setMarginWidth(String marginWidth);
+ 
+     /**
+      * The frame name (object of the <code>target</code> attribute). See the 
+      * name attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * The frame name (object of the <code>target</code> attribute). See the 
+      * name attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * Specify whether or not the frame should have scrollbars. See the 
+      * scrolling attribute definition in HTML 4.01.
+      */
+     public String getScrolling();
+     /**
+      * Specify whether or not the frame should have scrollbars. See the 
+      * scrolling attribute definition in HTML 4.01.
+      */
+     public void setScrolling(String scrolling);
+ 
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating the initial frame contents. See the src attribute 
+      * definition in HTML 4.01.
+      */
+     public String getSrc();
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating the initial frame contents. See the src attribute 
+      * definition in HTML 4.01.
+      */
+     public void setSrc(String src);
+ 
+     /**
+      * Frame width. See the width attribute definition in HTML 4.01.
+      */
+     public String getWidth();
+     /**
+      * Frame width. See the width attribute definition in HTML 4.01.
+      */
+     public void setWidth(String width);
+ 
+     /**
+      * The document this frame contains, if there is any and it is available, 
+      * or <code>null</code> otherwise.
+      * @since DOM Level 2
+      */
+     public Document getContentDocument();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,176 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Embedded image. See the IMG element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLImageElement extends HTMLElement {
+     /**
+      * The name of the element (for backwards compatibility). 
+      */
+     public String getName();
+     /**
+      * The name of the element (for backwards compatibility). 
+      */
+     public void setName(String name);
+ 
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Alternate text for user agents not rendering the normal content of this 
+      * element. See the alt attribute definition in HTML 4.01.
+      */
+     public String getAlt();
+     /**
+      * Alternate text for user agents not rendering the normal content of this 
+      * element. See the alt attribute definition in HTML 4.01.
+      */
+     public void setAlt(String alt);
+ 
+     /**
+      * Width of border around image. See the  border attribute definition in 
+      * HTML 4.01. This attribute is deprecated in HTML 4.01. Note that the 
+      * type of this attribute was <code>DOMString</code> in DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>]
+      * .
+      */
+     public String getBorder();
+     /**
+      * Width of border around image. See the  border attribute definition in 
+      * HTML 4.01. This attribute is deprecated in HTML 4.01. Note that the 
+      * type of this attribute was <code>DOMString</code> in DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>]
+      * .
+      */
+     public void setBorder(String border);
+ 
+     /**
+      * Height of the image in pixels. See the height attribute definition in 
+      * HTML 4.01. Note that the type of this attribute was 
+      * <code>DOMString</code> in DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>].
+      * @version DOM Level 2
+      */
+     public int getHeight();
+     /**
+      * Height of the image in pixels. See the height attribute definition in 
+      * HTML 4.01. Note that the type of this attribute was 
+      * <code>DOMString</code> in DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>].
+      * @version DOM Level 2
+      */
+     public void setHeight(int height);
+ 
+     /**
+      * Horizontal space to the left and right of this image in pixels. See the 
+      * hspace attribute definition in HTML 4.01. This attribute is 
+      * deprecated in HTML 4.01. Note that the type of this attribute was 
+      * <code>DOMString</code> in DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>].
+      * @version DOM Level 2
+      */
+     public int getHspace();
+     /**
+      * Horizontal space to the left and right of this image in pixels. See the 
+      * hspace attribute definition in HTML 4.01. This attribute is 
+      * deprecated in HTML 4.01. Note that the type of this attribute was 
+      * <code>DOMString</code> in DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>].
+      * @version DOM Level 2
+      */
+     public void setHspace(int hspace);
+ 
+     /**
+      * Use server-side image map. See the ismap attribute definition in HTML 
+      * 4.01.
+      */
+     public boolean getIsMap();
+     /**
+      * Use server-side image map. See the ismap attribute definition in HTML 
+      * 4.01.
+      */
+     public void setIsMap(boolean isMap);
+ 
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a long description of this image or frame. See the 
+      * longdesc attribute definition in HTML 4.01.
+      */
+     public String getLongDesc();
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a long description of this image or frame. See the 
+      * longdesc attribute definition in HTML 4.01.
+      */
+     public void setLongDesc(String longDesc);
+ 
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating the source of this image. See the src attribute 
+      * definition in HTML 4.01.
+      */
+     public String getSrc();
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating the source of this image. See the src attribute 
+      * definition in HTML 4.01.
+      */
+     public void setSrc(String src);
+ 
+     /**
+      * Use client-side image map. See the usemap attribute definition in HTML 
+      * 4.01.
+      */
+     public String getUseMap();
+     /**
+      * Use client-side image map. See the usemap attribute definition in HTML 
+      * 4.01.
+      */
+     public void setUseMap(String useMap);
+ 
+     /**
+      * Vertical space above and below this image in pixels. See the vspace 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01. Note that the type of this attribute was "DOMString" in 
+      * DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>].
+      * @version DOM Level 2
+      */
+     public int getVspace();
+     /**
+      * Vertical space above and below this image in pixels. See the vspace 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01. Note that the type of this attribute was "DOMString" in 
+      * DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>].
+      * @version DOM Level 2
+      */
+     public void setVspace(int vspace);
+ 
+     /**
+      * The width of the image in pixels. See the width attribute definition in 
+      * HTML 4.01. Note that the type of this attribute was 
+      * <code>DOMString</code> in DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>].
+      * @version DOM Level 2
+      */
+     public int getWidth();
+     /**
+      * The width of the image in pixels. See the width attribute definition in 
+      * HTML 4.01. Note that the type of this attribute was 
+      * <code>DOMString</code> in DOM Level 1 HTML [<a href='http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001'>DOM Level 1</a>].
+      * @version DOM Level 2
+      */
+     public void setWidth(int width);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,303 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Form control.Depending upon the environment in which the page is being 
+  * viewed, the value property may be read-only for the file upload input 
+  * type. For the "password" input type, the actual value returned may be 
+  * masked to prevent unauthorized use. See the INPUT element definition in [<a href='http://www.w3.org/TR/1999/REC-html401-19991224'>HTML 4.01</a>].
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLInputElement extends HTMLElement {
+     /**
+      * When the <code>type</code> attribute of the element has the value 
+      * "text", "file" or "password", this represents the HTML value 
+      * attribute of the element. The value of this attribute does not change 
+      * if the contents of the corresponding form control, in an interactive 
+      * user agent, changes. See the value attribute definition in HTML 4.01.
+      */
+     public String getDefaultValue();
+     /**
+      * When the <code>type</code> attribute of the element has the value 
+      * "text", "file" or "password", this represents the HTML value 
+      * attribute of the element. The value of this attribute does not change 
+      * if the contents of the corresponding form control, in an interactive 
+      * user agent, changes. See the value attribute definition in HTML 4.01.
+      */
+     public void setDefaultValue(String defaultValue);
+ 
+     /**
+      * When <code>type</code> has the value "radio" or "checkbox", this 
+      * represents the HTML checked attribute of the element. The value of 
+      * this attribute does not change if the state of the corresponding form 
+      * control, in an interactive user agent, changes. See the checked 
+      * attribute definition in HTML 4.01.
+      */
+     public boolean getDefaultChecked();
+     /**
+      * When <code>type</code> has the value "radio" or "checkbox", this 
+      * represents the HTML checked attribute of the element. The value of 
+      * this attribute does not change if the state of the corresponding form 
+      * control, in an interactive user agent, changes. See the checked 
+      * attribute definition in HTML 4.01.
+      */
+     public void setDefaultChecked(boolean defaultChecked);
+ 
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+     /**
+      * A comma-separated list of content types that a server processing this 
+      * form will handle correctly. See the accept attribute definition in 
+      * HTML 4.01.
+      */
+     public String getAccept();
+     /**
+      * A comma-separated list of content types that a server processing this 
+      * form will handle correctly. See the accept attribute definition in 
+      * HTML 4.01.
+      */
+     public void setAccept(String accept);
+ 
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public String getAccessKey();
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public void setAccessKey(String accessKey);
+ 
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Alternate text for user agents not rendering the normal content of this 
+      * element. See the alt attribute definition in HTML 4.01.
+      */
+     public String getAlt();
+     /**
+      * Alternate text for user agents not rendering the normal content of this 
+      * element. See the alt attribute definition in HTML 4.01.
+      */
+     public void setAlt(String alt);
+ 
+     /**
+      * When the <code>type</code> attribute of the element has the value 
+      * "radio" or "checkbox", this represents the current state of the form 
+      * control, in an interactive user agent. Changes to this attribute 
+      * change the state of the form control, but do not change the value of 
+      * the HTML checked attribute of the INPUT element.During the handling 
+      * of a click event on an input element with a type attribute that has 
+      * the value "radio" or "checkbox", some implementations may change the 
+      * value of this property before the event is being dispatched in the 
+      * document. If the default action of the event is canceled, the value 
+      * of the property may be changed back to its original value. This means 
+      * that the value of this property during the handling of click events 
+      * is implementation dependent.
+      */
+     public boolean getChecked();
+     /**
+      * When the <code>type</code> attribute of the element has the value 
+      * "radio" or "checkbox", this represents the current state of the form 
+      * control, in an interactive user agent. Changes to this attribute 
+      * change the state of the form control, but do not change the value of 
+      * the HTML checked attribute of the INPUT element.During the handling 
+      * of a click event on an input element with a type attribute that has 
+      * the value "radio" or "checkbox", some implementations may change the 
+      * value of this property before the event is being dispatched in the 
+      * document. If the default action of the event is canceled, the value 
+      * of the property may be changed back to its original value. This means 
+      * that the value of this property during the handling of click events 
+      * is implementation dependent.
+      */
+     public void setChecked(boolean checked);
+ 
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public boolean getDisabled();
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public void setDisabled(boolean disabled);
+ 
+     /**
+      * Maximum number of characters for text fields, when <code>type</code> 
+      * has the value "text" or "password". See the maxlength attribute 
+      * definition in HTML 4.01.
+      */
+     public int getMaxLength();
+     /**
+      * Maximum number of characters for text fields, when <code>type</code> 
+      * has the value "text" or "password". See the maxlength attribute 
+      * definition in HTML 4.01.
+      */
+     public void setMaxLength(int maxLength);
+ 
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * This control is read-only. Relevant only when <code>type</code> has the 
+      * value "text" or "password". See the readonly attribute definition in 
+      * HTML 4.01.
+      */
+     public boolean getReadOnly();
+     /**
+      * This control is read-only. Relevant only when <code>type</code> has the 
+      * value "text" or "password". See the readonly attribute definition in 
+      * HTML 4.01.
+      */
+     public void setReadOnly(boolean readOnly);
+ 
+     /**
+      * Size information. The precise meaning is specific to each type of 
+      * field. See the size attribute definition in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public int getSize();
+     /**
+      * Size information. The precise meaning is specific to each type of 
+      * field. See the size attribute definition in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public void setSize(int size);
+ 
+     /**
+      * When the <code>type</code> attribute has the value "image", this 
+      * attribute specifies the location of the image to be used to decorate 
+      * the graphical submit button. See the src attribute definition in HTML 
+      * 4.01.
+      */
+     public String getSrc();
+     /**
+      * When the <code>type</code> attribute has the value "image", this 
+      * attribute specifies the location of the image to be used to decorate 
+      * the graphical submit button. See the src attribute definition in HTML 
+      * 4.01.
+      */
+     public void setSrc(String src);
+ 
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public int getTabIndex();
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public void setTabIndex(int tabIndex);
+ 
+     /**
+      * The type of control created (all lower case). See the type attribute 
+      * definition in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public String getType();
+     /**
+      * The type of control created (all lower case). See the type attribute 
+      * definition in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public void setType(String type);
+ 
+     /**
+      * Use client-side image map. See the usemap attribute definition in HTML 
+      * 4.01.
+      */
+     public String getUseMap();
+     /**
+      * Use client-side image map. See the usemap attribute definition in HTML 
+      * 4.01.
+      */
+     public void setUseMap(String useMap);
+ 
+     /**
+      * When the <code>type</code> attribute of the element has the value 
+      * "text", "file" or "password", this represents the current contents of 
+      * the corresponding form control, in an interactive user agent. 
+      * Changing this attribute changes the contents of the form control, but 
+      * does not change the value of the HTML value attribute of the element. 
+      * When the <code>type</code> attribute of the element has the value 
+      * "button", "hidden", "submit", "reset", "image", "checkbox" or 
+      * "radio", this represents the HTML value attribute of the element. See 
+      * the value attribute definition in HTML 4.01.
+      */
+     public String getValue();
+     /**
+      * When the <code>type</code> attribute of the element has the value 
+      * "text", "file" or "password", this represents the current contents of 
+      * the corresponding form control, in an interactive user agent. 
+      * Changing this attribute changes the contents of the form control, but 
+      * does not change the value of the HTML value attribute of the element. 
+      * When the <code>type</code> attribute of the element has the value 
+      * "button", "hidden", "submit", "reset", "image", "checkbox" or 
+      * "radio", this represents the HTML value attribute of the element. See 
+      * the value attribute definition in HTML 4.01.
+      */
+     public void setValue(String value);
+ 
+     /**
+      * Removes keyboard focus from this element.
+      */
+     public void blur();
+ 
+     /**
+      * Gives keyboard focus to this element.
+      */
+     public void focus();
+ 
+     /**
+      * Select the contents of the text area. For <code>INPUT</code> elements 
+      * whose <code>type</code> attribute has one of the following values: 
+      * "text", "file", or "password".
+      */
+     public void select();
+ 
+     /**
+      * Simulate a mouse-click. For <code>INPUT</code> elements whose 
+      * <code>type</code> attribute has one of the following values: 
+      * "button", "checkbox", "radio", "reset", or "submit".
+      */
+     public void click();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,39 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * This element is used for single-line text input. See the ISINDEX element 
+  * definition in HTML 4.01. This element is deprecated in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLIsIndexElement extends HTMLElement {
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+     /**
+      * The prompt message. See the prompt attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getPrompt();
+     /**
+      * The prompt message. See the prompt attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setPrompt(String prompt);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,44 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * List item. See the LI element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLLIElement extends HTMLElement {
+     /**
+      * List item bullet style. See the type attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getType();
+     /**
+      * List item bullet style. See the type attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setType(String type);
+ 
+     /**
+      * Reset sequence number when used in <code>OL</code>. See the value 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01.
+      */
+     public int getValue();
+     /**
+      * Reset sequence number when used in <code>OL</code>. See the value 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01.
+      */
+     public void setValue(int value);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Form field label text. See the LABEL element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLLabelElement extends HTMLElement {
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public String getAccessKey();
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public void setAccessKey(String accessKey);
+ 
+     /**
+      * This attribute links this label with another form control by 
+      * <code>id</code> attribute. See the for attribute definition in HTML 
+      * 4.01.
+      */
+     public String getHtmlFor();
+     /**
+      * This attribute links this label with another form control by 
+      * <code>id</code> attribute. See the for attribute definition in HTML 
+      * 4.01.
+      */
+     public void setHtmlFor(String htmlFor);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Provides a caption for a <code>FIELDSET</code> grouping. See the LEGEND 
+  * element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLLegendElement extends HTMLElement {
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public String getAccessKey();
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public void setAccessKey(String accessKey);
+ 
+     /**
+      * Text alignment relative to <code>FIELDSET</code>. See the align 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Text alignment relative to <code>FIELDSET</code>. See the align 
+      * attribute definition in HTML 4.01. This attribute is deprecated in 
+      * HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,116 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * The <code>LINK</code> element specifies a link to an external resource, and 
+  * defines this document's relationship to that resource (or vice versa). 
+  * See the LINK element definition in HTML 4.01 (see also the 
+  * <code>LinkStyle</code> interface in the StyleSheet module [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>DOM Level 2 Style Sheets and CSS</a>]).
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLLinkElement extends HTMLElement {
+     /**
+      * Enables/disables the link. This is currently only used for style sheet 
+      * links, and may be used to activate or deactivate style sheets. 
+      */
+     public boolean getDisabled();
+     /**
+      * Enables/disables the link. This is currently only used for style sheet 
+      * links, and may be used to activate or deactivate style sheets. 
+      */
+     public void setDisabled(boolean disabled);
+ 
+     /**
+      * The character encoding of the resource being linked to. See the charset 
+      * attribute definition in HTML 4.01.
+      */
+     public String getCharset();
+     /**
+      * The character encoding of the resource being linked to. See the charset 
+      * attribute definition in HTML 4.01.
+      */
+     public void setCharset(String charset);
+ 
+     /**
+      * The URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the linked resource. See the href attribute definition in 
+      * HTML 4.01.
+      */
+     public String getHref();
+     /**
+      * The URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] of the linked resource. See the href attribute definition in 
+      * HTML 4.01.
+      */
+     public void setHref(String href);
+ 
+     /**
+      * Language code of the linked resource. See the hreflang attribute 
+      * definition in HTML 4.01.
+      */
+     public String getHreflang();
+     /**
+      * Language code of the linked resource. See the hreflang attribute 
+      * definition in HTML 4.01.
+      */
+     public void setHreflang(String hreflang);
+ 
+     /**
+      * Designed for use with one or more target media. See the media attribute 
+      * definition in HTML 4.01.
+      */
+     public String getMedia();
+     /**
+      * Designed for use with one or more target media. See the media attribute 
+      * definition in HTML 4.01.
+      */
+     public void setMedia(String media);
+ 
+     /**
+      * Forward link type. See the rel attribute definition in HTML 4.01.
+      */
+     public String getRel();
+     /**
+      * Forward link type. See the rel attribute definition in HTML 4.01.
+      */
+     public void setRel(String rel);
+ 
+     /**
+      * Reverse link type. See the rev attribute definition in HTML 4.01.
+      */
+     public String getRev();
+     /**
+      * Reverse link type. See the rev attribute definition in HTML 4.01.
+      */
+     public void setRev(String rev);
+ 
+     /**
+      * Frame to render the resource in. See the target attribute definition in 
+      * HTML 4.01.
+      */
+     public String getTarget();
+     /**
+      * Frame to render the resource in. See the target attribute definition in 
+      * HTML 4.01.
+      */
+     public void setTarget(String target);
+ 
+     /**
+      * Advisory content type. See the type attribute definition in HTML 4.01.
+      */
+     public String getType();
+     /**
+      * Advisory content type. See the type attribute definition in HTML 4.01.
+      */
+     public void setType(String type);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,36 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Client-side image map. See the MAP element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLMapElement extends HTMLElement {
+     /**
+      * The list of areas defined for the image map. 
+      */
+     public HTMLCollection getAreas();
+ 
+     /**
+      * Names the map (for use with <code>usemap</code>). See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * Names the map (for use with <code>usemap</code>). See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Menu list. See the MENU element definition in HTML 4.01. This element is 
+  * deprecated in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLMenuElement extends HTMLElement {
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public boolean getCompact();
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setCompact(boolean compact);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * This contains generic meta-information about the document. See the META 
+  * element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLMetaElement extends HTMLElement {
+     /**
+      * Associated information. See the content attribute definition in HTML 
+      * 4.01.
+      */
+     public String getContent();
+     /**
+      * Associated information. See the content attribute definition in HTML 
+      * 4.01.
+      */
+     public void setContent(String content);
+ 
+     /**
+      * HTTP response header name [<a href='http://www.ietf.org/rfc/rfc2616.txt'>IETF RFC 2616</a>]. See the http-equiv attribute definition in 
+      * HTML 4.01.
+      */
+     public String getHttpEquiv();
+     /**
+      * HTTP response header name [<a href='http://www.ietf.org/rfc/rfc2616.txt'>IETF RFC 2616</a>]. See the http-equiv attribute definition in 
+      * HTML 4.01.
+      */
+     public void setHttpEquiv(String httpEquiv);
+ 
+     /**
+      * Meta information name. See the name attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * Meta information name. See the name attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * Select form of content. See the scheme attribute definition in HTML 
+      * 4.01.
+      */
+     public String getScheme();
+     /**
+      * Select form of content. See the scheme attribute definition in HTML 
+      * 4.01.
+      */
+     public void setScheme(String scheme);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,43 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Notice of modification to part of a document. See the INS and DEL element 
+  * definitions in HTML 4.01. 
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLModElement extends HTMLElement {
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a document that describes the reason for the change. 
+      * See the cite attribute definition in HTML 4.01.
+      */
+     public String getCite();
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a document that describes the reason for the change. 
+      * See the cite attribute definition in HTML 4.01.
+      */
+     public void setCite(String cite);
+ 
+     /**
+      * The date and time of the change. See the datetime attribute definition 
+      * in HTML 4.01.
+      */
+     public String getDateTime();
+     /**
+      * The date and time of the change. See the datetime attribute definition 
+      * in HTML 4.01.
+      */
+     public void setDateTime(String dateTime);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Ordered list. See the OL element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLOListElement extends HTMLElement {
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public boolean getCompact();
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setCompact(boolean compact);
+ 
+     /**
+      * Starting sequence number. See the start attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public int getStart();
+     /**
+      * Starting sequence number. See the start attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setStart(int start);
+ 
+     /**
+      * Numbering style. See the type attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getType();
+     /**
+      * Numbering style. See the type attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setType(String type);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,230 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.Document;
+ 
+ /**
+  * Generic embedded object.In principle, all properties on the object element 
+  * are read-write but in some environments some properties may be read-only 
+  * once the underlying object is instantiated. See the OBJECT element 
+  * definition in [<a href='http://www.w3.org/TR/1999/REC-html401-19991224'>HTML 4.01</a>].
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLObjectElement extends HTMLElement {
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+     /**
+      * Applet class file. See the <code>code</code> attribute for 
+      * HTMLAppletElement. 
+      */
+     public String getCode();
+     /**
+      * Applet class file. See the <code>code</code> attribute for 
+      * HTMLAppletElement. 
+      */
+     public void setCode(String code);
+ 
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Aligns this object (vertically or horizontally) with respect to its 
+      * surrounding text. See the align attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Space-separated list of archives. See the archive attribute definition 
+      * in HTML 4.01.
+      */
+     public String getArchive();
+     /**
+      * Space-separated list of archives. See the archive attribute definition 
+      * in HTML 4.01.
+      */
+     public void setArchive(String archive);
+ 
+     /**
+      * Width of border around the object. See the border attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getBorder();
+     /**
+      * Width of border around the object. See the border attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setBorder(String border);
+ 
+     /**
+      * Base URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] for <code>classid</code>, <code>data</code>, and 
+      * <code>archive</code> attributes. See the codebase attribute definition
+      *  in HTML 4.01.
+      */
+     public String getCodeBase();
+     /**
+      * Base URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] for <code>classid</code>, <code>data</code>, and 
+      * <code>archive</code> attributes. See the codebase attribute definition
+      *  in HTML 4.01.
+      */
+     public void setCodeBase(String codeBase);
+ 
+     /**
+      * Content type for data downloaded via <code>classid</code> attribute. 
+      * See the codetype attribute definition in HTML 4.01.
+      */
+     public String getCodeType();
+     /**
+      * Content type for data downloaded via <code>classid</code> attribute. 
+      * See the codetype attribute definition in HTML 4.01.
+      */
+     public void setCodeType(String codeType);
+ 
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] specifying the location of the object's data. See the data 
+      * attribute definition in HTML 4.01.
+      */
+     public String getData();
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] specifying the location of the object's data. See the data 
+      * attribute definition in HTML 4.01.
+      */
+     public void setData(String data);
+ 
+     /**
+      * Declare (for future reference), but do not instantiate, this object. 
+      * See the declare attribute definition in HTML 4.01.
+      */
+     public boolean getDeclare();
+     /**
+      * Declare (for future reference), but do not instantiate, this object. 
+      * See the declare attribute definition in HTML 4.01.
+      */
+     public void setDeclare(boolean declare);
+ 
+     /**
+      * Override height. See the height attribute definition in HTML 4.01.
+      */
+     public String getHeight();
+     /**
+      * Override height. See the height attribute definition in HTML 4.01.
+      */
+     public void setHeight(String height);
+ 
+     /**
+      * Horizontal space, in pixels, to the left and right of this image, 
+      * applet, or object. See the hspace attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public int getHspace();
+     /**
+      * Horizontal space, in pixels, to the left and right of this image, 
+      * applet, or object. See the hspace attribute definition in HTML 4.01. 
+      * This attribute is deprecated in HTML 4.01.
+      */
+     public void setHspace(int hspace);
+ 
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * Message to render while loading the object. See the standby attribute 
+      * definition in HTML 4.01.
+      */
+     public String getStandby();
+     /**
+      * Message to render while loading the object. See the standby attribute 
+      * definition in HTML 4.01.
+      */
+     public void setStandby(String standby);
+ 
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public int getTabIndex();
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public void setTabIndex(int tabIndex);
+ 
+     /**
+      * Content type for data downloaded via <code>data</code> attribute. See 
+      * the type attribute definition in HTML 4.01.
+      */
+     public String getType();
+     /**
+      * Content type for data downloaded via <code>data</code> attribute. See 
+      * the type attribute definition in HTML 4.01.
+      */
+     public void setType(String type);
+ 
+     /**
+      * Use client-side image map. See the usemap attribute definition in HTML 
+      * 4.01.
+      */
+     public String getUseMap();
+     /**
+      * Use client-side image map. See the usemap attribute definition in HTML 
+      * 4.01.
+      */
+     public void setUseMap(String useMap);
+ 
+     /**
+      * Vertical space, in pixels, above and below this image, applet, or 
+      * object. See the vspace attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public int getVspace();
+     /**
+      * Vertical space, in pixels, above and below this image, applet, or 
+      * object. See the vspace attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setVspace(int vspace);
+ 
+     /**
+      * Override width. See the width attribute definition in HTML 4.01.
+      */
+     public String getWidth();
+     /**
+      * Override width. See the width attribute definition in HTML 4.01.
+      */
+     public void setWidth(String width);
+ 
+     /**
+      * The document this object contains, if there is any and it is available, 
+      * or <code>null</code> otherwise.
+      * @since DOM Level 2
+      */
+     public Document getContentDocument();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,43 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Group options together in logical subdivisions. See the OPTGROUP element 
+  * definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLOptGroupElement extends HTMLElement {
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public boolean getDisabled();
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public void setDisabled(boolean disabled);
+ 
+     /**
+      * Assigns a label to this option group. See the label attribute definition
+      *  in HTML 4.01.
+      */
+     public String getLabel();
+     /**
+      * Assigns a label to this option group. See the label attribute definition
+      *  in HTML 4.01.
+      */
+     public void setLabel(String label);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * A selectable choice. See the OPTION element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLOptionElement extends HTMLElement {
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+     /**
+      * Represents the value of the HTML selected attribute. The value of this 
+      * attribute does not change if the state of the corresponding form 
+      * control, in an interactive user agent, changes. See the selected 
+      * attribute definition in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public boolean getDefaultSelected();
+     /**
+      * Represents the value of the HTML selected attribute. The value of this 
+      * attribute does not change if the state of the corresponding form 
+      * control, in an interactive user agent, changes. See the selected 
+      * attribute definition in HTML 4.01.
+      * @version DOM Level 2
+      */
+     public void setDefaultSelected(boolean defaultSelected);
+ 
+     /**
+      * The text contained within the option element. 
+      */
+     public String getText();
+ 
+     /**
+      * The index of this <code>OPTION</code> in its parent <code>SELECT</code>
+      * , starting from 0.
+      * @version DOM Level 2
+      */
+     public int getIndex();
+ 
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public boolean getDisabled();
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public void setDisabled(boolean disabled);
+ 
+     /**
+      * Option label for use in hierarchical menus. See the label attribute 
+      * definition in HTML 4.01.
+      */
+     public String getLabel();
+     /**
+      * Option label for use in hierarchical menus. See the label attribute 
+      * definition in HTML 4.01.
+      */
+     public void setLabel(String label);
+ 
+     /**
+      * Represents the current state of the corresponding form control, in an 
+      * interactive user agent. Changing this attribute changes the state of 
+      * the form control, but does not change the value of the HTML selected 
+      * attribute of the element.
+      */
+     public boolean getSelected();
+     /**
+      * Represents the current state of the corresponding form control, in an 
+      * interactive user agent. Changing this attribute changes the state of 
+      * the form control, but does not change the value of the HTML selected 
+      * attribute of the element.
+      */
+     public void setSelected(boolean selected);
+ 
+     /**
+      * The current form control value. See the value attribute definition in 
+      * HTML 4.01.
+      */
+     public String getValue();
+     /**
+      * The current form control value. See the value attribute definition in 
+      * HTML 4.01.
+      */
+     public void setValue(String value);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  An <code>HTMLOptionsCollection</code> is a list of nodes representing HTML 
+  * option element. An individual node may be accessed by either ordinal 
+  * index or the node's <code>name</code> or <code>id</code> attributes.  
+  * Collections in the HTML DOM are assumed to be live meaning that they are 
+  * automatically updated when the underlying document is changed. 
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface HTMLOptionsCollection {
+     /**
+      *  This attribute specifies the length or size of the list. 
+      */
+     public int getLength();
+     /**
+      *  This attribute specifies the length or size of the list. 
+      * @exception DOMException
+      *    NOT_SUPPORTED_ERR: if setting the length is not allowed by the 
+      *   implementation. 
+      */
+     public void setLength(int length)
+                           throws DOMException;
+ 
+     /**
+      *  This method retrieves a node specified by ordinal index. Nodes are 
+      * numbered in tree order (depth-first traversal order). 
+      * @param index The index of the node to be fetched. The index origin is 
+      *   0.
+      * @return The <code>Node</code> at the corresponding position upon 
+      *   success. A value of <code>null</code> is returned if the index is 
+      *   out of range. 
+      */
+     public Node item(int index);
+ 
+     /**
+      * This method retrieves a <code>Node</code> using a name. It first 
+      * searches for a <code>Node</code> with a matching <code>id</code> 
+      * attribute. If it doesn't find one, it then searches for a 
+      * <code>Node</code> with a matching <code>name</code> attribute, but 
+      * only on those elements that are allowed a name attribute. This method 
+      * is case insensitive in HTML documents and case sensitive in XHTML 
+      * documents.
+      * @param name The name of the <code>Node</code> to be fetched.
+      * @return The <code>Node</code> with a <code>name</code> or 
+      *   <code>id</code> attribute whose value corresponds to the specified 
+      *   string. Upon failure (e.g., no node with this name exists), returns 
+      *   <code>null</code>.
+      */
+     public Node namedItem(String name);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Paragraphs. See the P element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLParagraphElement extends HTMLElement {
+     /**
+      * Horizontal text alignment. See the align attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Horizontal text alignment. See the align attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Parameters fed to the <code>OBJECT</code> element. See the PARAM element 
+  * definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLParamElement extends HTMLElement {
+     /**
+      * The name of a run-time parameter. See the name attribute definition in 
+      * HTML 4.01.
+      */
+     public String getName();
+     /**
+      * The name of a run-time parameter. See the name attribute definition in 
+      * HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * Content type for the <code>value</code> attribute when 
+      * <code>valuetype</code> has the value "ref". See the type attribute 
+      * definition in HTML 4.01.
+      */
+     public String getType();
+     /**
+      * Content type for the <code>value</code> attribute when 
+      * <code>valuetype</code> has the value "ref". See the type attribute 
+      * definition in HTML 4.01.
+      */
+     public void setType(String type);
+ 
+     /**
+      * The value of a run-time parameter. See the value attribute definition 
+      * in HTML 4.01.
+      */
+     public String getValue();
+     /**
+      * The value of a run-time parameter. See the value attribute definition 
+      * in HTML 4.01.
+      */
+     public void setValue(String value);
+ 
+     /**
+      * Information about the meaning of the <code>value</code> attribute 
+      * value. See the valuetype attribute definition in HTML 4.01.
+      */
+     public String getValueType();
+     /**
+      * Information about the meaning of the <code>value</code> attribute 
+      * value. See the valuetype attribute definition in HTML 4.01.
+      */
+     public void setValueType(String valueType);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Preformatted text. See the PRE element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLPreElement extends HTMLElement {
+     /**
+      * Fixed width for content. See the width attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public int getWidth();
+     /**
+      * Fixed width for content. See the width attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setWidth(int width);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,32 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * For the <code>Q</code> and <code>BLOCKQUOTE</code> elements. See the Q 
+  * element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLQuoteElement extends HTMLElement {
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a source document or message. See the cite attribute 
+      * definition in HTML 4.01.
+      */
+     public String getCite();
+     /**
+      * A URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating a source document or message. See the cite attribute 
+      * definition in HTML 4.01.
+      */
+     public void setCite(String cite);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Script statements. See the SCRIPT element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLScriptElement extends HTMLElement {
+     /**
+      * The script content of the element. 
+      */
+     public String getText();
+     /**
+      * The script content of the element. 
+      */
+     public void setText(String text);
+ 
+     /**
+      * Reserved for future use. 
+      */
+     public String getHtmlFor();
+     /**
+      * Reserved for future use. 
+      */
+     public void setHtmlFor(String htmlFor);
+ 
+     /**
+      * Reserved for future use. 
+      */
+     public String getEvent();
+     /**
+      * Reserved for future use. 
+      */
+     public void setEvent(String event);
+ 
+     /**
+      * The character encoding of the linked resource. See the charset 
+      * attribute definition in HTML 4.01.
+      */
+     public String getCharset();
+     /**
+      * The character encoding of the linked resource. See the charset 
+      * attribute definition in HTML 4.01.
+      */
+     public void setCharset(String charset);
+ 
+     /**
+      * Indicates that the user agent can defer processing of the script. See 
+      * the defer attribute definition in HTML 4.01.
+      */
+     public boolean getDefer();
+     /**
+      * Indicates that the user agent can defer processing of the script. See 
+      * the defer attribute definition in HTML 4.01.
+      */
+     public void setDefer(boolean defer);
+ 
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating an external script. See the src attribute definition 
+      * in HTML 4.01.
+      */
+     public String getSrc();
+     /**
+      * URI [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>] designating an external script. See the src attribute definition 
+      * in HTML 4.01.
+      */
+     public void setSrc(String src);
+ 
+     /**
+      * The content type of the script language. See the type attribute 
+      * definition in HTML 4.01.
+      */
+     public String getType();
+     /**
+      * The content type of the script language. See the type attribute 
+      * definition in HTML 4.01.
+      */
+     public void setType(String type);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,179 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * The select element allows the selection of an option. The contained options 
+  * can be directly accessed through the select element as a collection. See 
+  * the SELECT element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLSelectElement extends HTMLElement {
+     /**
+      * The type of this form control. This is the string "select-multiple" 
+      * when the multiple attribute is <code>true</code> and the string 
+      * "select-one" when <code>false</code>.
+      */
+     public String getType();
+ 
+     /**
+      * The ordinal index of the selected option, starting from 0. The value -1 
+      * is returned if no element is selected. If multiple options are 
+      * selected, the index of the first selected option is returned. 
+      */
+     public int getSelectedIndex();
+     /**
+      * The ordinal index of the selected option, starting from 0. The value -1 
+      * is returned if no element is selected. If multiple options are 
+      * selected, the index of the first selected option is returned. 
+      */
+     public void setSelectedIndex(int selectedIndex);
+ 
+     /**
+      *  The current form control value (i.e. the value of the currently 
+      * selected option), if multiple options are selected this is the value 
+      * of the first selected option. 
+      */
+     public String getValue();
+     /**
+      *  The current form control value (i.e. the value of the currently 
+      * selected option), if multiple options are selected this is the value 
+      * of the first selected option. 
+      */
+     public void setValue(String value);
+ 
+     /**
+      *  The number of options in this <code>SELECT</code>. 
+      * @version DOM Level 2
+      */
+     public int getLength();
+     /**
+      *  The number of options in this <code>SELECT</code>. 
+      * @exception DOMException
+      *    NOT_SUPPORTED_ERR: if setting the length is not allowed by the 
+      *   implementation. 
+      * @version DOM Level 2
+      */
+     public void setLength(int length)
+                       throws DOMException;
+ 
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+     /**
+      * The collection of <code>OPTION</code> elements contained by this 
+      * element. 
+      * @version DOM Level 2
+      */
+     public HTMLOptionsCollection getOptions();
+ 
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public boolean getDisabled();
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public void setDisabled(boolean disabled);
+ 
+     /**
+      * If true, multiple <code>OPTION</code> elements may be selected in this 
+      * <code>SELECT</code>. See the multiple attribute definition in HTML 
+      * 4.01.
+      */
+     public boolean getMultiple();
+     /**
+      * If true, multiple <code>OPTION</code> elements may be selected in this 
+      * <code>SELECT</code>. See the multiple attribute definition in HTML 
+      * 4.01.
+      */
+     public void setMultiple(boolean multiple);
+ 
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * Number of visible rows. See the size attribute definition in HTML 4.01.
+      */
+     public int getSize();
+     /**
+      * Number of visible rows. See the size attribute definition in HTML 4.01.
+      */
+     public void setSize(int size);
+ 
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public int getTabIndex();
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public void setTabIndex(int tabIndex);
+ 
+     /**
+      * Add a new element to the collection of <code>OPTION</code> elements for 
+      * this <code>SELECT</code>. This method is the equivalent of the 
+      * <code>appendChild</code> method of the <code>Node</code> interface if 
+      * the <code>before</code> parameter is <code>null</code>. It is 
+      * equivalent to the <code>insertBefore</code> method on the parent of 
+      * <code>before</code> in all other cases. This method may have no 
+      * effect if the new element is not an <code>OPTION</code> or an 
+      * <code>OPTGROUP</code>.
+      * @param element The element to add.
+      * @param before The element to insert before, or <code>null</code> for 
+      *   the tail of the list.
+      * @exception DOMException
+      *   NOT_FOUND_ERR: Raised if <code>before</code> is not a descendant of 
+      *   the <code>SELECT</code> element. 
+      */
+     public void add(HTMLElement element, 
+                     HTMLElement before)
+                     throws DOMException;
+ 
+     /**
+      * Remove an element from the collection of <code>OPTION</code> elements 
+      * for this <code>SELECT</code>. Does nothing if no element has the 
+      * given index.
+      * @param index The index of the item to remove, starting from 0.
+      */
+     public void remove(int index);
+ 
+     /**
+      * Removes keyboard focus from this element.
+      */
+     public void blur();
+ 
+     /**
+      * Gives keyboard focus to this element.
+      */
+     public void focus();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  *  Style information. See the STYLE element definition in HTML 4.01, the CSS 
+  * module [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>DOM Level 2 Style Sheets and CSS</a>] and the <code>LinkStyle</code> interface in the StyleSheets 
+  * module [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>DOM Level 2 Style Sheets and CSS</a>]. 
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLStyleElement extends HTMLElement {
+     /**
+      * Enables/disables the style sheet. 
+      */
+     public boolean getDisabled();
+     /**
+      * Enables/disables the style sheet. 
+      */
+     public void setDisabled(boolean disabled);
+ 
+     /**
+      * Designed for use with one or more target media. See the media attribute 
+      * definition in HTML 4.01.
+      */
+     public String getMedia();
+     /**
+      * Designed for use with one or more target media. See the media attribute 
+      * definition in HTML 4.01.
+      */
+     public void setMedia(String media);
+ 
+     /**
+      * The content type of the style sheet language. See the type attribute 
+      * definition in HTML 4.01.
+      */
+     public String getType();
+     /**
+      * The content type of the style sheet language. See the type attribute 
+      * definition in HTML 4.01.
+      */
+     public void setType(String type);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Table caption See the CAPTION element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLTableCaptionElement extends HTMLElement {
+     /**
+      * Caption alignment with respect to the table. See the align attribute 
+      * definition in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Caption alignment with respect to the table. See the align attribute 
+      * definition in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,181 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * The object used to represent the <code>TH</code> and <code>TD</code> 
+  * elements. See the TD element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLTableCellElement extends HTMLElement {
+     /**
+      * The index of this cell in the row, starting from 0. This index is in 
+      * document tree order and not display order.
+      */
+     public int getCellIndex();
+ 
+     /**
+      * Abbreviation for header cells. See the abbr attribute definition in 
+      * HTML 4.01.
+      */
+     public String getAbbr();
+     /**
+      * Abbreviation for header cells. See the abbr attribute definition in 
+      * HTML 4.01.
+      */
+     public void setAbbr(String abbr);
+ 
+     /**
+      * Horizontal alignment of data in cell. See the align attribute definition
+      *  in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Horizontal alignment of data in cell. See the align attribute definition
+      *  in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Names group of related headers. See the axis attribute definition in 
+      * HTML 4.01.
+      */
+     public String getAxis();
+     /**
+      * Names group of related headers. See the axis attribute definition in 
+      * HTML 4.01.
+      */
+     public void setAxis(String axis);
+ 
+     /**
+      * Cell background color. See the bgcolor attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getBgColor();
+     /**
+      * Cell background color. See the bgcolor attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setBgColor(String bgColor);
+ 
+     /**
+      * Alignment character for cells in a column. See the char attribute 
+      * definition in HTML 4.01.
+      */
+     public String getCh();
+     /**
+      * Alignment character for cells in a column. See the char attribute 
+      * definition in HTML 4.01.
+      */
+     public void setCh(String ch);
+ 
+     /**
+      * Offset of alignment character. See the charoff attribute definition in 
+      * HTML 4.01.
+      */
+     public String getChOff();
+     /**
+      * Offset of alignment character. See the charoff attribute definition in 
+      * HTML 4.01.
+      */
+     public void setChOff(String chOff);
+ 
+     /**
+      * Number of columns spanned by cell. See the colspan attribute definition 
+      * in HTML 4.01.
+      */
+     public int getColSpan();
+     /**
+      * Number of columns spanned by cell. See the colspan attribute definition 
+      * in HTML 4.01.
+      */
+     public void setColSpan(int colSpan);
+ 
+     /**
+      * List of <code>id</code> attribute values for header cells. See the 
+      * headers attribute definition in HTML 4.01.
+      */
+     public String getHeaders();
+     /**
+      * List of <code>id</code> attribute values for header cells. See the 
+      * headers attribute definition in HTML 4.01.
+      */
+     public void setHeaders(String headers);
+ 
+     /**
+      * Cell height. See the height attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getHeight();
+     /**
+      * Cell height. See the height attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setHeight(String height);
+ 
+     /**
+      * Suppress word wrapping. See the nowrap attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public boolean getNoWrap();
+     /**
+      * Suppress word wrapping. See the nowrap attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setNoWrap(boolean noWrap);
+ 
+     /**
+      * Number of rows spanned by cell. See the rowspan attribute definition in 
+      * HTML 4.01.
+      */
+     public int getRowSpan();
+     /**
+      * Number of rows spanned by cell. See the rowspan attribute definition in 
+      * HTML 4.01.
+      */
+     public void setRowSpan(int rowSpan);
+ 
+     /**
+      * Scope covered by header cells. See the scope attribute definition in 
+      * HTML 4.01.
+      */
+     public String getScope();
+     /**
+      * Scope covered by header cells. See the scope attribute definition in 
+      * HTML 4.01.
+      */
+     public void setScope(String scope);
+ 
+     /**
+      * Vertical alignment of data in cell. See the valign attribute definition 
+      * in HTML 4.01.
+      */
+     public String getVAlign();
+     /**
+      * Vertical alignment of data in cell. See the valign attribute definition 
+      * in HTML 4.01.
+      */
+     public void setVAlign(String vAlign);
+ 
+     /**
+      * Cell width. See the width attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getWidth();
+     /**
+      * Cell width. See the width attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setWidth(String width);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Regroups the <code>COL</code> and <code>COLGROUP</code> elements. See the 
+  * COL element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLTableColElement extends HTMLElement {
+     /**
+      * Horizontal alignment of cell data in column. See the align attribute 
+      * definition in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Horizontal alignment of cell data in column. See the align attribute 
+      * definition in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Alignment character for cells in a column. See the char attribute 
+      * definition in HTML 4.01.
+      */
+     public String getCh();
+     /**
+      * Alignment character for cells in a column. See the char attribute 
+      * definition in HTML 4.01.
+      */
+     public void setCh(String ch);
+ 
+     /**
+      * Offset of alignment character. See the charoff attribute definition in 
+      * HTML 4.01.
+      */
+     public String getChOff();
+     /**
+      * Offset of alignment character. See the charoff attribute definition in 
+      * HTML 4.01.
+      */
+     public void setChOff(String chOff);
+ 
+     /**
+      * Indicates the number of columns in a group or affected by a grouping. 
+      * See the span attribute definition in HTML 4.01.
+      */
+     public int getSpan();
+     /**
+      * Indicates the number of columns in a group or affected by a grouping. 
+      * See the span attribute definition in HTML 4.01.
+      */
+     public void setSpan(int span);
+ 
+     /**
+      * Vertical alignment of cell data in column. See the valign attribute 
+      * definition in HTML 4.01.
+      */
+     public String getVAlign();
+     /**
+      * Vertical alignment of cell data in column. See the valign attribute 
+      * definition in HTML 4.01.
+      */
+     public void setVAlign(String vAlign);
+ 
+     /**
+      * Default column width. See the width attribute definition in HTML 4.01.
+      */
+     public String getWidth();
+     /**
+      * Default column width. See the width attribute definition in HTML 4.01.
+      */
+     public void setWidth(String width);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,254 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * The create* and delete* methods on the table allow authors to construct and 
+  * modify tables. [<a href='http://www.w3.org/TR/1999/REC-html401-19991224'>HTML 4.01</a>] specifies that only one of each of the 
+  * <code>CAPTION</code>, <code>THEAD</code>, and <code>TFOOT</code> elements 
+  * may exist in a table. Therefore, if one exists, and the createTHead() or 
+  * createTFoot() method is called, the method returns the existing THead or 
+  * TFoot element. See the TABLE element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLTableElement extends HTMLElement {
+     /**
+      * Returns the table's <code>CAPTION</code>, or void if none exists. 
+      * @version DOM Level 2
+      */
+     public HTMLTableCaptionElement getCaption();
+     /**
+      * Returns the table's <code>CAPTION</code>, or void if none exists. 
+      * @exception DOMException
+      *    HIERARCHY_REQUEST_ERR: if the element is not a <code>CAPTION</code>. 
+      * @version DOM Level 2
+      */
+     public void setCaption(HTMLTableCaptionElement caption)
+                           throws DOMException;
+ 
+     /**
+      * Returns the table's <code>THEAD</code>, or <code>null</code> if none 
+      * exists. 
+      * @version DOM Level 2
+      */
+     public HTMLTableSectionElement getTHead();
+     /**
+      * Returns the table's <code>THEAD</code>, or <code>null</code> if none 
+      * exists. 
+      * @exception DOMException
+      *    HIERARCHY_REQUEST_ERR: if the element is not a <code>THEAD</code>. 
+      * @version DOM Level 2
+      */
+     public void setTHead(HTMLTableSectionElement tHead)
+                           throws DOMException;
+ 
+     /**
+      * Returns the table's <code>TFOOT</code>, or <code>null</code> if none 
+      * exists. 
+      * @version DOM Level 2
+      */
+     public HTMLTableSectionElement getTFoot();
+     /**
+      * Returns the table's <code>TFOOT</code>, or <code>null</code> if none 
+      * exists. 
+      * @exception DOMException
+      *    HIERARCHY_REQUEST_ERR: if the element is not a <code>TFOOT</code>. 
+      * @version DOM Level 2
+      */
+     public void setTFoot(HTMLTableSectionElement tFoot)
+                           throws DOMException;
+ 
+     /**
+      * Returns a collection of all the rows in the table, including all in 
+      * <code>THEAD</code>, <code>TFOOT</code>, all <code>TBODY</code> 
+      * elements. 
+      */
+     public HTMLCollection getRows();
+ 
+     /**
+      * Returns a collection of the table bodies (including implicit ones).
+      */
+     public HTMLCollection getTBodies();
+ 
+     /**
+      * Specifies the table's position with respect to the rest of the 
+      * document. See the align attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Specifies the table's position with respect to the rest of the 
+      * document. See the align attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Cell background color. See the bgcolor attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getBgColor();
+     /**
+      * Cell background color. See the bgcolor attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setBgColor(String bgColor);
+ 
+     /**
+      * The width of the border around the table. See the border attribute 
+      * definition in HTML 4.01.
+      */
+     public String getBorder();
+     /**
+      * The width of the border around the table. See the border attribute 
+      * definition in HTML 4.01.
+      */
+     public void setBorder(String border);
+ 
+     /**
+      * Specifies the horizontal and vertical space between cell content and 
+      * cell borders. See the cellpadding attribute definition in HTML 4.01.
+      */
+     public String getCellPadding();
+     /**
+      * Specifies the horizontal and vertical space between cell content and 
+      * cell borders. See the cellpadding attribute definition in HTML 4.01.
+      */
+     public void setCellPadding(String cellPadding);
+ 
+     /**
+      * Specifies the horizontal and vertical separation between cells. See the 
+      * cellspacing attribute definition in HTML 4.01.
+      */
+     public String getCellSpacing();
+     /**
+      * Specifies the horizontal and vertical separation between cells. See the 
+      * cellspacing attribute definition in HTML 4.01.
+      */
+     public void setCellSpacing(String cellSpacing);
+ 
+     /**
+      * Specifies which external table borders to render. See the frame 
+      * attribute definition in HTML 4.01.
+      */
+     public String getFrame();
+     /**
+      * Specifies which external table borders to render. See the frame 
+      * attribute definition in HTML 4.01.
+      */
+     public void setFrame(String frame);
+ 
+     /**
+      * Specifies which internal table borders to render. See the rules 
+      * attribute definition in HTML 4.01.
+      */
+     public String getRules();
+     /**
+      * Specifies which internal table borders to render. See the rules 
+      * attribute definition in HTML 4.01.
+      */
+     public void setRules(String rules);
+ 
+     /**
+      * Description about the purpose or structure of a table. See the summary 
+      * attribute definition in HTML 4.01.
+      */
+     public String getSummary();
+     /**
+      * Description about the purpose or structure of a table. See the summary 
+      * attribute definition in HTML 4.01.
+      */
+     public void setSummary(String summary);
+ 
+     /**
+      * Specifies the desired table width. See the width attribute definition 
+      * in HTML 4.01.
+      */
+     public String getWidth();
+     /**
+      * Specifies the desired table width. See the width attribute definition 
+      * in HTML 4.01.
+      */
+     public void setWidth(String width);
+ 
+     /**
+      * Create a table header row or return an existing one.
+      * @return A new table header element (<code>THEAD</code>).
+      */
+     public HTMLElement createTHead();
+ 
+     /**
+      * Delete the header from the table, if one exists.
+      */
+     public void deleteTHead();
+ 
+     /**
+      * Create a table footer row or return an existing one.
+      * @return A footer element (<code>TFOOT</code>).
+      */
+     public HTMLElement createTFoot();
+ 
+     /**
+      * Delete the footer from the table, if one exists.
+      */
+     public void deleteTFoot();
+ 
+     /**
+      * Create a new table caption object or return an existing one.
+      * @return A <code>CAPTION</code> element.
+      */
+     public HTMLElement createCaption();
+ 
+     /**
+      * Delete the table caption, if one exists.
+      */
+     public void deleteCaption();
+ 
+     /**
+      * Insert a new empty row in the table. The new row is inserted 
+      * immediately before and in the same section as the current 
+      * <code>index</code>th row in the table. If <code>index</code> is -1 or 
+      * equal to the number of rows, the new row is appended. In addition, 
+      * when the table is empty the row is inserted into a <code>TBODY</code> 
+      * which is created and inserted into the table.A table row cannot be 
+      * empty according to [<a href='http://www.w3.org/TR/1999/REC-html401-19991224'>HTML 4.01</a>].
+      * @param index The row number where to insert a new row. This index 
+      *   starts from 0 and is relative to the logical order (not document 
+      *   order) of all the rows contained inside the table.
+      * @return The newly created row.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified index is greater than the 
+      *   number of rows or if the index is a negative number other than -1.
+      * @version DOM Level 2
+      */
+     public HTMLElement insertRow(int index)
+                                  throws DOMException;
+ 
+     /**
+      * Delete a table row.
+      * @param index The index of the row to be deleted. This index starts 
+      *   from 0 and is relative to the logical order (not document order) of 
+      *   all the rows contained inside the table. If the index is -1 the 
+      *   last row in the table is deleted.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified index is greater than or 
+      *   equal to the number of rows or if the index is a negative number 
+      *   other than -1.
+      * @version DOM Level 2
+      */
+     public void deleteRow(int index)
+                           throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,130 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * A row in a table. See the TR element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLTableRowElement extends HTMLElement {
+     /**
+      * This is in logical order and not in document order. The 
+      * <code>rowIndex</code> does take into account sections (
+      * <code>THEAD</code>, <code>TFOOT</code>, or <code>TBODY</code>) within 
+      * the table, placing <code>THEAD</code> rows first in the index, 
+      * followed by <code>TBODY</code> rows, followed by <code>TFOOT</code> 
+      * rows.
+      * @version DOM Level 2
+      */
+     public int getRowIndex();
+ 
+     /**
+      * The index of this row, relative to the current section (
+      * <code>THEAD</code>, <code>TFOOT</code>, or <code>TBODY</code>), 
+      * starting from 0.
+      * @version DOM Level 2
+      */
+     public int getSectionRowIndex();
+ 
+     /**
+      * The collection of cells in this row. 
+      * @version DOM Level 2
+      */
+     public HTMLCollection getCells();
+ 
+     /**
+      * Horizontal alignment of data within cells of this row. See the align 
+      * attribute definition in HTML 4.01.
+      */
+     public String getAlign();
+     /**
+      * Horizontal alignment of data within cells of this row. See the align 
+      * attribute definition in HTML 4.01.
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Background color for rows. See the bgcolor attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public String getBgColor();
+     /**
+      * Background color for rows. See the bgcolor attribute definition in HTML 
+      * 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setBgColor(String bgColor);
+ 
+     /**
+      * Alignment character for cells in a column. See the char attribute 
+      * definition in HTML 4.01.
+      */
+     public String getCh();
+     /**
+      * Alignment character for cells in a column. See the char attribute 
+      * definition in HTML 4.01.
+      */
+     public void setCh(String ch);
+ 
+     /**
+      * Offset of alignment character. See the charoff attribute definition in 
+      * HTML 4.01.
+      */
+     public String getChOff();
+     /**
+      * Offset of alignment character. See the charoff attribute definition in 
+      * HTML 4.01.
+      */
+     public void setChOff(String chOff);
+ 
+     /**
+      * Vertical alignment of data within cells of this row. See the valign 
+      * attribute definition in HTML 4.01.
+      */
+     public String getVAlign();
+     /**
+      * Vertical alignment of data within cells of this row. See the valign 
+      * attribute definition in HTML 4.01.
+      */
+     public void setVAlign(String vAlign);
+ 
+     /**
+      * Insert an empty <code>TD</code> cell into this row. If 
+      * <code>index</code> is -1 or equal to the number of cells, the new 
+      * cell is appended.
+      * @param index The place to insert the cell, starting from 0.
+      * @return The newly created cell.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified <code>index</code> is greater 
+      *   than the number of cells or if the index is a negative number other 
+      *   than -1.
+      * @version DOM Level 2
+      */
+     public HTMLElement insertCell(int index)
+                                   throws DOMException;
+ 
+     /**
+      * Delete a cell from the current row.
+      * @param index The index of the cell to delete, starting from 0. If the 
+      *   index is -1 the last cell in the row is deleted.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified <code>index</code> is greater 
+      *   than or equal to the number of cells or if the index is a negative 
+      *   number other than -1.
+      * @version DOM Level 2
+      */
+     public void deleteCell(int index)
+                            throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,103 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * The <code>THEAD</code>, <code>TFOOT</code>, and <code>TBODY</code> 
+  * elements. 
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLTableSectionElement extends HTMLElement {
+     /**
+      * Horizontal alignment of data in cells. See the <code>align</code> 
+      * attribute for HTMLTheadElement for details. 
+      */
+     public String getAlign();
+     /**
+      * Horizontal alignment of data in cells. See the <code>align</code> 
+      * attribute for HTMLTheadElement for details. 
+      */
+     public void setAlign(String align);
+ 
+     /**
+      * Alignment character for cells in a column. See the char attribute 
+      * definition in HTML 4.01.
+      */
+     public String getCh();
+     /**
+      * Alignment character for cells in a column. See the char attribute 
+      * definition in HTML 4.01.
+      */
+     public void setCh(String ch);
+ 
+     /**
+      * Offset of alignment character. See the charoff attribute definition in 
+      * HTML 4.01.
+      */
+     public String getChOff();
+     /**
+      * Offset of alignment character. See the charoff attribute definition in 
+      * HTML 4.01.
+      */
+     public void setChOff(String chOff);
+ 
+     /**
+      * Vertical alignment of data in cells. See the <code>valign</code> 
+      * attribute for HTMLTheadElement for details. 
+      */
+     public String getVAlign();
+     /**
+      * Vertical alignment of data in cells. See the <code>valign</code> 
+      * attribute for HTMLTheadElement for details. 
+      */
+     public void setVAlign(String vAlign);
+ 
+     /**
+      * The collection of rows in this table section. 
+      */
+     public HTMLCollection getRows();
+ 
+     /**
+      * Insert a row into this section. The new row is inserted immediately 
+      * before the current <code>index</code>th row in this section. If 
+      * <code>index</code> is -1 or equal to the number of rows in this 
+      * section, the new row is appended.
+      * @param index The row number where to insert a new row. This index 
+      *   starts from 0 and is relative only to the rows contained inside 
+      *   this section, not all the rows in the table.
+      * @return The newly created row.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified index is greater than the 
+      *   number of rows of if the index is a negative number other than -1.
+      * @version DOM Level 2
+      */
+     public HTMLElement insertRow(int index)
+                                  throws DOMException;
+ 
+     /**
+      * Delete a row from this section.
+      * @param index The index of the row to be deleted, or -1 to delete the 
+      *   last row. This index starts from 0 and is relative only to the rows 
+      *   contained inside this section, not all the rows in the table.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if the specified index is greater than or 
+      *   equal to the number of rows or if the index is a negative number 
+      *   other than -1.
+      * @version DOM Level 2
+      */
+     public void deleteRow(int index)
+                           throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,154 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Multi-line text field. See the TEXTAREA element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLTextAreaElement extends HTMLElement {
+     /**
+      * Represents the contents of the element. The value of this attribute 
+      * does not change if the contents of the corresponding form control, in 
+      * an interactive user agent, changes.
+      * @version DOM Level 2
+      */
+     public String getDefaultValue();
+     /**
+      * Represents the contents of the element. The value of this attribute 
+      * does not change if the contents of the corresponding form control, in 
+      * an interactive user agent, changes.
+      * @version DOM Level 2
+      */
+     public void setDefaultValue(String defaultValue);
+ 
+     /**
+      * Returns the <code>FORM</code> element containing this control. Returns 
+      * <code>null</code> if this control is not within the context of a 
+      * form. 
+      */
+     public HTMLFormElement getForm();
+ 
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public String getAccessKey();
+     /**
+      * A single character access key to give access to the form control. See 
+      * the accesskey attribute definition in HTML 4.01.
+      */
+     public void setAccessKey(String accessKey);
+ 
+     /**
+      * Width of control (in characters). See the cols attribute definition in 
+      * HTML 4.01.
+      */
+     public int getCols();
+     /**
+      * Width of control (in characters). See the cols attribute definition in 
+      * HTML 4.01.
+      */
+     public void setCols(int cols);
+ 
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public boolean getDisabled();
+     /**
+      * The control is unavailable in this context. See the disabled attribute 
+      * definition in HTML 4.01.
+      */
+     public void setDisabled(boolean disabled);
+ 
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public String getName();
+     /**
+      * Form control or object name when submitted with a form. See the name 
+      * attribute definition in HTML 4.01.
+      */
+     public void setName(String name);
+ 
+     /**
+      * This control is read-only. See the readonly attribute definition in 
+      * HTML 4.01.
+      */
+     public boolean getReadOnly();
+     /**
+      * This control is read-only. See the readonly attribute definition in 
+      * HTML 4.01.
+      */
+     public void setReadOnly(boolean readOnly);
+ 
+     /**
+      * Number of text rows. See the rows attribute definition in HTML 4.01.
+      */
+     public int getRows();
+     /**
+      * Number of text rows. See the rows attribute definition in HTML 4.01.
+      */
+     public void setRows(int rows);
+ 
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public int getTabIndex();
+     /**
+      * Index that represents the element's position in the tabbing order. See 
+      * the tabindex attribute definition in HTML 4.01.
+      */
+     public void setTabIndex(int tabIndex);
+ 
+     /**
+      * The type of this form control. This the string "textarea".
+      */
+     public String getType();
+ 
+     /**
+      * Represents the current contents of the corresponding form control, in 
+      * an interactive user agent. Changing this attribute changes the 
+      * contents of the form control, but does not change the contents of the 
+      * element. If the entirety of the data can not fit into a single 
+      * <code>DOMString</code>, the implementation may truncate the data.
+      */
+     public String getValue();
+     /**
+      * Represents the current contents of the corresponding form control, in 
+      * an interactive user agent. Changing this attribute changes the 
+      * contents of the form control, but does not change the contents of the 
+      * element. If the entirety of the data can not fit into a single 
+      * <code>DOMString</code>, the implementation may truncate the data.
+      */
+     public void setValue(String value);
+ 
+     /**
+      * Removes keyboard focus from this element.
+      */
+     public void blur();
+ 
+     /**
+      * Gives keyboard focus to this element.
+      */
+     public void focus();
+ 
+     /**
+      * Select the contents of the <code>TEXTAREA</code>.
+      */
+     public void select();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,29 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * The document title. See the TITLE element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLTitleElement extends HTMLElement {
+     /**
+      * The specified title as a string. 
+      */
+     public String getText();
+     /**
+      * The specified title as a string. 
+      */
+     public void setText(String text);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,42 ----
+ /*
+  * Copyright (c) 2003 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.html2;
+ 
+ /**
+  * Unordered list. See the UL element definition in HTML 4.01.
+  * <p>See also the <a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>Document Object Model (DOM) Level 2 HTML Specification</a>.
+  */
+ public interface HTMLUListElement extends HTMLElement {
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public boolean getCompact();
+     /**
+      * Reduce spacing between list items. See the compact attribute definition 
+      * in HTML 4.01. This attribute is deprecated in HTML 4.01.
+      */
+     public void setCompact(boolean compact);
+ 
+     /**
+      * Bullet style. See the type attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public String getType();
+     /**
+      * Bullet style. See the type attribute definition in HTML 4.01. This 
+      * attribute is deprecated in HTML 4.01.
+      */
+     public void setType(String type);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,122 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  <code>DOMImplementationLS</code> contains the factory methods for creating 
+  * Load and Save objects. 
+  * <p> The expectation is that an instance of the 
+  * <code>DOMImplementationLS</code> interface can be obtained by using 
+  * binding-specific casting methods on an instance of the 
+  * <code>DOMImplementation</code> interface or, if the <code>Document</code> 
+  * supports the feature <code>"Core"</code> version <code>"3.0"</code> 
+  * defined in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+  * , by using the method <code>DOMImplementation.getFeature</code> with 
+  * parameter values <code>"LS"</code> (or <code>"LS-Async"</code>) and 
+  * <code>"3.0"</code> (respectively). 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface DOMImplementationLS {
+     // DOMImplementationLSMode
+     /**
+      * Create a synchronous <code>LSParser</code>.
+      */
+     public static final short MODE_SYNCHRONOUS          = 1;
+     /**
+      * Create an asynchronous <code>LSParser</code>.
+      */
+     public static final short MODE_ASYNCHRONOUS         = 2;
+ 
+     /**
+      * Create a new <code>LSParser</code>. The newly constructed parser may 
+      * then be configured by means of its <code>DOMConfiguration</code> 
+      * object, and used to parse documents by means of its <code>parse</code>
+      *  method. 
+      * @param mode  The <code>mode</code> argument is either 
+      *   <code>MODE_SYNCHRONOUS</code> or <code>MODE_ASYNCHRONOUS</code>, if 
+      *   <code>mode</code> is <code>MODE_SYNCHRONOUS</code> then the 
+      *   <code>LSParser</code> that is created will operate in synchronous 
+      *   mode, if it's <code>MODE_ASYNCHRONOUS</code> then the 
+      *   <code>LSParser</code> that is created will operate in asynchronous 
+      *   mode. 
+      * @param schemaType  An absolute URI representing the type of the schema 
+      *   language used during the load of a <code>Document</code> using the 
+      *   newly created <code>LSParser</code>. Note that no lexical checking 
+      *   is done on the absolute URI. In order to create a 
+      *   <code>LSParser</code> for any kind of schema types (i.e. the 
+      *   LSParser will be free to use any schema found), use the value 
+      *   <code>null</code>. 
+      * <p ><b>Note:</b>    For W3C XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+      *   , applications must use the value 
+      *   <code>"http://www.w3.org/2001/XMLSchema"</code>. For XML DTD [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>], 
+      *   applications must use the value 
+      *   <code>"http://www.w3.org/TR/REC-xml"</code>. Other Schema languages 
+      *   are outside the scope of the W3C and therefore should recommend an 
+      *   absolute URI in order to use this method. 
+      * @return  The newly created <code>LSParser</code> object. This 
+      *   <code>LSParser</code> is either synchronous or asynchronous 
+      *   depending on the value of the <code>mode</code> argument. 
+      * <p ><b>Note:</b>    By default, the newly created <code>LSParser</code> 
+      *   does not contain a <code>DOMErrorHandler</code>, i.e. the value of 
+      *   the "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+      *   error-handler</a>" configuration parameter is <code>null</code>. However, implementations 
+      *   may provide a default error handler at creation time. In that case, 
+      *   the initial value of the <code>"error-handler"</code> configuration 
+      *   parameter on the new <code>LSParser</code> object contains a 
+      *   reference to the default error handler. 
+      * @exception DOMException
+      *    NOT_SUPPORTED_ERR: Raised if the requested mode or schema type is 
+      *   not supported. 
+      */
+     public LSParser createLSParser(short mode, 
+                                    String schemaType)
+                                    throws DOMException;
+ 
+     /**
+      *  Create a new <code>LSSerializer</code> object. 
+      * @return The newly created <code>LSSerializer</code> object.
+      * <p ><b>Note:</b>    By default, the newly created 
+      *   <code>LSSerializer</code> has no <code>DOMErrorHandler</code>, i.e. 
+      *   the value of the <code>"error-handler"</code> configuration 
+      *   parameter is <code>null</code>. However, implementations may 
+      *   provide a default error handler at creation time. In that case, the 
+      *   initial value of the <code>"error-handler"</code> configuration 
+      *   parameter on the new <code>LSSerializer</code> object contains a 
+      *   reference to the default error handler. 
+      */
+     public LSSerializer createLSSerializer();
+ 
+     /**
+      *  Create a new empty input source object where 
+      * <code>LSInput.characterStream</code>, <code>LSInput.byteStream</code>
+      * , <code>LSInput.stringData</code> <code>LSInput.systemId</code>, 
+      * <code>LSInput.publicId</code>, <code>LSInput.baseURI</code>, and 
+      * <code>LSInput.encoding</code> are null, and 
+      * <code>LSInput.certifiedText</code> is false. 
+      * @return  The newly created input object. 
+      */
+     public LSInput createLSInput();
+ 
+     /**
+      *  Create a new empty output destination object where 
+      * <code>LSOutput.characterStream</code>, 
+      * <code>LSOutput.byteStream</code>, <code>LSOutput.systemId</code>, 
+      * <code>LSOutput.encoding</code> are null. 
+      * @return  The newly created output object. 
+      */
+     public LSOutput createLSOutput();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSException.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSException.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ /**
+  *  Parser or write operations may throw an <code>LSException</code> if the 
+  * processing is stopped. The processing can be stopped due to a 
+  * <code>DOMError</code> with a severity of 
+  * <code>DOMError.SEVERITY_FATAL_ERROR</code> or a non recovered 
+  * <code>DOMError.SEVERITY_ERROR</code>, or if 
+  * <code>DOMErrorHandler.handleError()</code> returned <code>false</code>. 
+  * <p ><b>Note:</b>  As suggested in the definition of the constants in the 
+  * <code>DOMError</code> interface, a DOM implementation may choose to 
+  * continue after a fatal error, but the resulting DOM tree is then 
+  * implementation dependent. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public class LSException extends RuntimeException {
+     public LSException(short code, String message) {
+        super(message);
+        this.code = code;
+     }
+     public short   code;
+     // LSExceptionCode
+     /**
+      *  If an attempt was made to load a document, or an XML Fragment, using 
+      * <code>LSParser</code> and the processing has been stopped. 
+      */
+     public static final short PARSE_ERR                 = 81;
+     /**
+      *  If an attempt was made to serialize a <code>Node</code> using 
+      * <code>LSSerializer</code> and the processing has been stopped. 
+      */
+     public static final short SERIALIZE_ERR             = 82;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSInput.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSInput.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSInput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,218 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ /**
+  *  This interface represents an input source for data. 
+  * <p> This interface allows an application to encapsulate information about 
+  * an input source in a single object, which may include a public 
+  * identifier, a system identifier, a byte stream (possibly with a specified 
+  * encoding), a base URI, and/or a character stream. 
+  * <p> The exact definitions of a byte stream and a character stream are 
+  * binding dependent. 
+  * <p> The application is expected to provide objects that implement this 
+  * interface whenever such objects are needed. The application can either 
+  * provide its own objects that implement this interface, or it can use the 
+  * generic factory method <code>DOMImplementationLS.createLSInput()</code> 
+  * to create objects that implement this interface. 
+  * <p> The <code>LSParser</code> will use the <code>LSInput</code> object to 
+  * determine how to read data. The <code>LSParser</code> will look at the 
+  * different inputs specified in the <code>LSInput</code> in the following 
+  * order to know which one to read from, the first one that is not null and 
+  * not an empty string will be used: 
+  * <ol>
+  * <li> <code>LSInput.characterStream</code> 
+  * </li>
+  * <li> 
+  * <code>LSInput.byteStream</code> 
+  * </li>
+  * <li> <code>LSInput.stringData</code> 
+  * </li>
+  * <li> 
+  * <code>LSInput.systemId</code> 
+  * </li>
+  * <li> <code>LSInput.publicId</code> 
+  * </li>
+  * </ol> 
+  * <p> If all inputs are null, the <code>LSParser</code> will report a 
+  * <code>DOMError</code> with its <code>DOMError.type</code> set to 
+  * <code>"no-input-specified"</code> and its <code>DOMError.severity</code> 
+  * set to <code>DOMError.SEVERITY_FATAL_ERROR</code>. 
+  * <p> <code>LSInput</code> objects belong to the application. The DOM 
+  * implementation will never modify them (though it may make copies and 
+  * modify the copies, if necessary). 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface LSInput {
+     /**
+      *  An attribute of a language and binding dependent type that represents 
+      * a stream of 16-bit units. The application must encode the stream 
+      * using UTF-16 (defined in [Unicode] and in [ISO/IEC 10646]). It is not a requirement to have an XML declaration when 
+      * using character streams. If an XML declaration is present, the value 
+      * of the encoding attribute will be ignored. 
+      */
+     public java.io.Reader getCharacterStream();
+     /**
+      *  An attribute of a language and binding dependent type that represents 
+      * a stream of 16-bit units. The application must encode the stream 
+      * using UTF-16 (defined in [Unicode] and in [ISO/IEC 10646]). It is not a requirement to have an XML declaration when 
+      * using character streams. If an XML declaration is present, the value 
+      * of the encoding attribute will be ignored. 
+      */
+     public void setCharacterStream(java.io.Reader characterStream);
+ 
+     /**
+      *  An attribute of a language and binding dependent type that represents 
+      * a stream of bytes. 
+      * <br> If the application knows the character encoding of the byte 
+      * stream, it should set the encoding attribute. Setting the encoding in 
+      * this way will override any encoding specified in an XML declaration 
+      * in the data. 
+      */
+     public java.io.InputStream getByteStream();
+     /**
+      *  An attribute of a language and binding dependent type that represents 
+      * a stream of bytes. 
+      * <br> If the application knows the character encoding of the byte 
+      * stream, it should set the encoding attribute. Setting the encoding in 
+      * this way will override any encoding specified in an XML declaration 
+      * in the data. 
+      */
+     public void setByteStream(java.io.InputStream byteStream);
+ 
+     /**
+      *  String data to parse. If provided, this will always be treated as a 
+      * sequence of 16-bit units (UTF-16 encoded characters). It is not a 
+      * requirement to have an XML declaration when using 
+      * <code>stringData</code>. If an XML declaration is present, the value 
+      * of the encoding attribute will be ignored. 
+      */
+     public String getStringData();
+     /**
+      *  String data to parse. If provided, this will always be treated as a 
+      * sequence of 16-bit units (UTF-16 encoded characters). It is not a 
+      * requirement to have an XML declaration when using 
+      * <code>stringData</code>. If an XML declaration is present, the value 
+      * of the encoding attribute will be ignored. 
+      */
+     public void setStringData(String stringData);
+ 
+     /**
+      *  The system identifier, a URI reference [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>], for this 
+      * input source. The system identifier is optional if there is a byte 
+      * stream, a character stream, or string data. It is still useful to 
+      * provide one, since the application will use it to resolve any 
+      * relative URIs and can include it in error messages and warnings. (The 
+      * LSParser will only attempt to fetch the resource identified by the 
+      * URI reference if there is no other input available in the input 
+      * source.) 
+      * <br> If the application knows the character encoding of the object 
+      * pointed to by the system identifier, it can set the encoding using 
+      * the <code>encoding</code> attribute. 
+      * <br> If the specified system ID is a relative URI reference (see 
+      * section 5 in [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]), the DOM 
+      * implementation will attempt to resolve the relative URI with the 
+      * <code>baseURI</code> as the base, if that fails, the behavior is 
+      * implementation dependent. 
+      */
+     public String getSystemId();
+     /**
+      *  The system identifier, a URI reference [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>], for this 
+      * input source. The system identifier is optional if there is a byte 
+      * stream, a character stream, or string data. It is still useful to 
+      * provide one, since the application will use it to resolve any 
+      * relative URIs and can include it in error messages and warnings. (The 
+      * LSParser will only attempt to fetch the resource identified by the 
+      * URI reference if there is no other input available in the input 
+      * source.) 
+      * <br> If the application knows the character encoding of the object 
+      * pointed to by the system identifier, it can set the encoding using 
+      * the <code>encoding</code> attribute. 
+      * <br> If the specified system ID is a relative URI reference (see 
+      * section 5 in [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]), the DOM 
+      * implementation will attempt to resolve the relative URI with the 
+      * <code>baseURI</code> as the base, if that fails, the behavior is 
+      * implementation dependent. 
+      */
+     public void setSystemId(String systemId);
+ 
+     /**
+      *  The public identifier for this input source. This may be mapped to an 
+      * input source using an implementation dependent mechanism (such as 
+      * catalogues or other mappings). The public identifier, if specified, 
+      * may also be reported as part of the location information when errors 
+      * are reported. 
+      */
+     public String getPublicId();
+     /**
+      *  The public identifier for this input source. This may be mapped to an 
+      * input source using an implementation dependent mechanism (such as 
+      * catalogues or other mappings). The public identifier, if specified, 
+      * may also be reported as part of the location information when errors 
+      * are reported. 
+      */
+     public void setPublicId(String publicId);
+ 
+     /**
+      *  The base URI to be used (see section 5.1.4 in [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]) for 
+      * resolving a relative <code>systemId</code> to an absolute URI. 
+      * <br> If, when used, the base URI is itself a relative URI, an empty 
+      * string, or null, the behavior is implementation dependent. 
+      */
+     public String getBaseURI();
+     /**
+      *  The base URI to be used (see section 5.1.4 in [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]) for 
+      * resolving a relative <code>systemId</code> to an absolute URI. 
+      * <br> If, when used, the base URI is itself a relative URI, an empty 
+      * string, or null, the behavior is implementation dependent. 
+      */
+     public void setBaseURI(String baseURI);
+ 
+     /**
+      *  The character encoding, if known. The encoding must be a string 
+      * acceptable for an XML encoding declaration ([<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>] section 
+      * 4.3.3 "Character Encoding in Entities"). 
+      * <br> This attribute has no effect when the application provides a 
+      * character stream or string data. For other sources of input, an 
+      * encoding specified by means of this attribute will override any 
+      * encoding specified in the XML declaration or the Text declaration, or 
+      * an encoding obtained from a higher level protocol, such as HTTP [<a href='http://www.ietf.org/rfc/rfc2616.txt'>IETF RFC 2616</a>]. 
+      */
+     public String getEncoding();
+     /**
+      *  The character encoding, if known. The encoding must be a string 
+      * acceptable for an XML encoding declaration ([<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>] section 
+      * 4.3.3 "Character Encoding in Entities"). 
+      * <br> This attribute has no effect when the application provides a 
+      * character stream or string data. For other sources of input, an 
+      * encoding specified by means of this attribute will override any 
+      * encoding specified in the XML declaration or the Text declaration, or 
+      * an encoding obtained from a higher level protocol, such as HTTP [<a href='http://www.ietf.org/rfc/rfc2616.txt'>IETF RFC 2616</a>]. 
+      */
+     public void setEncoding(String encoding);
+ 
+     /**
+      *  If set to true, assume that the input is certified (see section 2.13 
+      * in [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]) when 
+      * parsing [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]. 
+      */
+     public boolean getCertifiedText();
+     /**
+      *  If set to true, assume that the input is certified (see section 2.13 
+      * in [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]) when 
+      * parsing [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]. 
+      */
+     public void setCertifiedText(boolean certifiedText);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,35 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.events.Event;
+ 
+ /**
+  *  This interface represents a load event object that signals the completion 
+  * of a document load. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface LSLoadEvent extends Event {
+     /**
+      * The document that finished loading.
+      */
+     public Document getNewDocument();
+ 
+     /**
+      * The input source that was parsed.
+      */
+     public LSInput getInput();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSOutput.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSOutput.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSOutput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,106 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ /**
+  *  This interface represents an output destination for data. 
+  * <p> This interface allows an application to encapsulate information about 
+  * an output destination in a single object, which may include a URI, a byte 
+  * stream (possibly with a specified encoding), a base URI, and/or a 
+  * character stream. 
+  * <p> The exact definitions of a byte stream and a character stream are 
+  * binding dependent. 
+  * <p> The application is expected to provide objects that implement this 
+  * interface whenever such objects are needed. The application can either 
+  * provide its own objects that implement this interface, or it can use the 
+  * generic factory method <code>DOMImplementationLS.createLSOutput()</code> 
+  * to create objects that implement this interface. 
+  * <p> The <code>LSSerializer</code> will use the <code>LSOutput</code> object 
+  * to determine where to serialize the output to. The 
+  * <code>LSSerializer</code> will look at the different outputs specified in 
+  * the <code>LSOutput</code> in the following order to know which one to 
+  * output to, the first one that is not null and not an empty string will be 
+  * used: 
+  * <ol>
+  * <li> <code>LSOutput.characterStream</code> 
+  * </li>
+  * <li> 
+  * <code>LSOutput.byteStream</code> 
+  * </li>
+  * <li> <code>LSOutput.systemId</code> 
+  * </li>
+  * </ol> 
+  * <p> <code>LSOutput</code> objects belong to the application. The DOM 
+  * implementation will never modify them (though it may make copies and 
+  * modify the copies, if necessary). 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface LSOutput {
+     /**
+      *  An attribute of a language and binding dependent type that represents 
+      * a writable stream to which 16-bit units can be output. 
+      */
+     public java.io.Writer getCharacterStream();
+     /**
+      *  An attribute of a language and binding dependent type that represents 
+      * a writable stream to which 16-bit units can be output. 
+      */
+     public void setCharacterStream(java.io.Writer characterStream);
+ 
+     /**
+      *  An attribute of a language and binding dependent type that represents 
+      * a writable stream of bytes. 
+      */
+     public java.io.OutputStream getByteStream();
+     /**
+      *  An attribute of a language and binding dependent type that represents 
+      * a writable stream of bytes. 
+      */
+     public void setByteStream(java.io.OutputStream byteStream);
+ 
+     /**
+      *  The system identifier, a URI reference [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>], for this 
+      * output destination. 
+      * <br> If the system ID is a relative URI reference (see section 5 in [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]), the 
+      * behavior is implementation dependent. 
+      */
+     public String getSystemId();
+     /**
+      *  The system identifier, a URI reference [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>], for this 
+      * output destination. 
+      * <br> If the system ID is a relative URI reference (see section 5 in [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]), the 
+      * behavior is implementation dependent. 
+      */
+     public void setSystemId(String systemId);
+ 
+     /**
+      *  The character encoding to use for the output. The encoding must be a 
+      * string acceptable for an XML encoding declaration ([<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>] section 
+      * 4.3.3 "Character Encoding in Entities"), it is recommended that 
+      * character encodings registered (as charsets) with the Internet 
+      * Assigned Numbers Authority [<a href='ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets'>IANA-CHARSETS</a>]
+      *  should be referred to using their registered names. 
+      */
+     public String getEncoding();
+     /**
+      *  The character encoding to use for the output. The encoding must be a 
+      * string acceptable for an XML encoding declaration ([<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>] section 
+      * 4.3.3 "Character Encoding in Entities"), it is recommended that 
+      * character encodings registered (as charsets) with the Internet 
+      * Assigned Numbers Authority [<a href='ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets'>IANA-CHARSETS</a>]
+      *  should be referred to using their registered names. 
+      */
+     public void setEncoding(String encoding);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSParser.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSParser.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSParser.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,466 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DOMConfiguration;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  An interface to an object that is able to build, or augment, a DOM tree 
+  * from various input sources. 
+  * <p> <code>LSParser</code> provides an API for parsing XML and building the 
+  * corresponding DOM document structure. A <code>LSParser</code> instance 
+  * can be obtained by invoking the 
+  * <code>DOMImplementationLS.createLSParser()</code> method. 
+  * <p> As specified in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+  * , when a document is first made available via the LSParser: 
+  * <ul>
+  * <li> there will 
+  * never be two adjacent nodes of type NODE_TEXT, and there will never be 
+  * empty text nodes. 
+  * </li>
+  * <li> it is expected that the <code>value</code> and 
+  * <code>nodeValue</code> attributes of an <code>Attr</code> node initially 
+  * return the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#AVNormalize'>XML 1.0 
+  * normalized value</a>. However, if the parameters "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-validate-if-schema'>
+  * validate-if-schema</a>" and "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-datatype-normalization'>
+  * datatype-normalization</a>" are set to <code>true</code>, depending on the attribute normalization 
+  * used, the attribute values may differ from the ones obtained by the XML 
+  * 1.0 attribute normalization. If the parameters "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-datatype-normalization'>
+  * datatype-normalization</a>" is set to <code>false</code>, the XML 1.0 attribute normalization is 
+  * guaranteed to occur, and if the attributes list does not contain 
+  * namespace declarations, the <code>attributes</code> attribute on 
+  * <code>Element</code> node represents the property <b>[attributes]</b> defined in [<a href='http://www.w3.org/TR/2004/REC-xml-infoset-20040204/'>XML Information Set</a>]
+  * . 
+  * </li>
+  * </ul>
+  * <p> Asynchronous <code>LSParser</code> objects are expected to also 
+  * implement the <code>events::EventTarget</code> interface so that event 
+  * listeners can be registered on asynchronous <code>LSParser</code> 
+  * objects. 
+  * <p> Events supported by asynchronous <code>LSParser</code> objects are: 
+  * <dl>
+  * <dt>load</dt>
+  * <dd>
+  *  The <code>LSParser</code> finishes to load the document. See also the 
+  * definition of the <code>LSLoadEvent</code> interface. </dd>
+  * <dt>progress</dt>
+  * <dd> The 
+  * <code>LSParser</code> signals progress as data is parsed.  This 
+  * specification does not attempt to define exactly when progress events 
+  * should be dispatched. That is intentionally left as 
+  * implementation-dependent. Here is one example of how an application might 
+  * dispatch progress events: Once the parser starts receiving data, a 
+  * progress event is dispatched to indicate that the parsing starts. From 
+  * there on, a progress event is dispatched for every 4096 bytes of data 
+  * that is received and processed. This is only one example, though, and 
+  * implementations can choose to dispatch progress events at any time while 
+  * parsing, or not dispatch them at all.  See also the definition of the 
+  * <code>LSProgressEvent</code> interface. </dd>
+  * </dl>
+  * <p ><b>Note:</b>  All events defined in this specification use the 
+  * namespace URI <code>"http://www.w3.org/2002/DOMLS"</code>. 
+  * <p> While parsing an input source, errors are reported to the application 
+  * through the error handler (<code>LSParser.domConfig</code>'s "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+  * error-handler</a>" parameter). This specification does in no way try to define all possible 
+  * errors that can occur while parsing XML, or any other markup, but some 
+  * common error cases are defined. The types (<code>DOMError.type</code>) of 
+  * errors and warnings defined by this specification are: 
+  * <dl>
+  * <dt> 
+  * <code>"check-character-normalization-failure" [error]</code> </dt>
+  * <dd> Raised if 
+  * the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-check-character-normalization'>
+  * check-character-normalization</a>" is set to true and a string is encountered that fails normalization 
+  * checking. </dd>
+  * <dt><code>"doctype-not-allowed" [fatal]</code></dt>
+  * <dd> Raised if the 
+  * configuration parameter "disallow-doctype" is set to <code>true</code> 
+  * and a doctype is encountered. </dd>
+  * <dt><code>"no-input-specified" [fatal]</code></dt>
+  * <dd> 
+  * Raised when loading a document and no input is specified in the 
+  * <code>LSInput</code> object. </dd>
+  * <dt>
+  * <code>"pi-base-uri-not-preserved" [warning]</code></dt>
+  * <dd> Raised if a processing 
+  * instruction is encountered in a location where the base URI of the 
+  * processing instruction can not be preserved.  One example of a case where 
+  * this warning will be raised is if the configuration parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-entities'>
+  * entities</a>" is set to <code>false</code> and the following XML file is parsed: 
+  * <pre>
+  * &lt;!DOCTYPE root [ &lt;!ENTITY e SYSTEM 'subdir/myentity.ent' ]&gt; 
+  * &lt;root&gt; &amp;e; &lt;/root&gt;</pre>
+  *  And <code>subdir/myentity.ent</code> 
+  * contains: 
+  * <pre>&lt;one&gt; &lt;two/&gt; &lt;/one&gt; &lt;?pi 3.14159?&gt; 
+  * &lt;more/&gt;</pre>
+  * </dd>
+  * <dt><code>"unbound-prefix-in-entity" [warning]</code></dt>
+  * <dd> An 
+  * implementation dependent warning that may be raised if the configuration 
+  * parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-namespaces'>
+  * namespaces</a>" is set to <code>true</code> and an unbound namespace prefix is 
+  * encountered in an entity's replacement text. Raising this warning is not 
+  * enforced since some existing parsers may not recognize unbound namespace 
+  * prefixes in the replacement text of entities. </dd>
+  * <dt>
+  * <code>"unknown-character-denormalization" [fatal]</code></dt>
+  * <dd> Raised if the 
+  * configuration parameter "ignore-unknown-character-denormalizations" is 
+  * set to <code>false</code> and a character is encountered for which the 
+  * processor cannot determine the normalization properties. </dd>
+  * <dt>
+  * <code>"unsupported-encoding" [fatal]</code></dt>
+  * <dd> Raised if an unsupported 
+  * encoding is encountered. </dd>
+  * <dt><code>"unsupported-media-type" [fatal]</code></dt>
+  * <dd> 
+  * Raised if the configuration parameter "supported-media-types-only" is set 
+  * to <code>true</code> and an unsupported media type is encountered. </dd>
+  * </dl> 
+  * <p> In addition to raising the defined errors and warnings, implementations 
+  * are expected to raise implementation specific errors and warnings for any 
+  * other error and warning cases such as IO errors (file not found, 
+  * permission denied,...), XML well-formedness errors, and so on. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface LSParser {
+     /**
+      *  The <code>DOMConfiguration</code> object used when parsing an input 
+      * source. This <code>DOMConfiguration</code> is specific to the parse 
+      * operation. No parameter values from this <code>DOMConfiguration</code>
+      *  object are passed automatically to the <code>DOMConfiguration</code> 
+      * object on the <code>Document</code> that is created, or used, by the 
+      * parse operation. The DOM application is responsible for passing any 
+      * needed parameter values from this <code>DOMConfiguration</code> 
+      * object to the <code>DOMConfiguration</code> object referenced by the 
+      * <code>Document</code> object. 
+      * <br> In addition to the parameters recognized in on the <a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration'>
+      * DOMConfiguration</a> interface defined in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+      * , the <code>DOMConfiguration</code> objects for <code>LSParser</code> 
+      * add or modify the following parameters: 
+      * <dl>
+      * <dt>
+      * <code>"charset-overrides-xml-encoding"</code></dt>
+      * <dd>
+      * <dl>
+      * <dt><code>true</code></dt>
+      * <dd>[<em>optional</em>] (<em>default</em>) If a higher level protocol such as HTTP [<a href='http://www.ietf.org/rfc/rfc2616.txt'>IETF RFC 2616</a>] provides an 
+      * indication of the character encoding of the input stream being 
+      * processed, that will override any encoding specified in the XML 
+      * declaration or the Text declaration (see also section 4.3.3, 
+      * "Character Encoding in Entities", in [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]). 
+      * Explicitly setting an encoding in the <code>LSInput</code> overrides 
+      * any encoding from the protocol. </dd>
+      * <dt><code>false</code></dt>
+      * <dd>[<em>required</em>] The parser ignores any character set encoding information from 
+      * higher-level protocols. </dd>
+      * </dl></dd>
+      * <dt><code>"disallow-doctype"</code></dt>
+      * <dd>
+      * <dl>
+      * <dt>
+      * <code>true</code></dt>
+      * <dd>[<em>optional</em>] Throw a fatal <b>"doctype-not-allowed"</b> error if a doctype node is found while parsing the document. This is 
+      * useful when dealing with things like SOAP envelopes where doctype 
+      * nodes are not allowed. </dd>
+      * <dt><code>false</code></dt>
+      * <dd>[<em>required</em>] (<em>default</em>) Allow doctype nodes in the document. </dd>
+      * </dl></dd>
+      * <dt>
+      * <code>"ignore-unknown-character-denormalizations"</code></dt>
+      * <dd>
+      * <dl>
+      * <dt>
+      * <code>true</code></dt>
+      * <dd>[<em>required</em>] (<em>default</em>) If, while verifying full normalization when [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>] is 
+      * supported, a processor encounters characters for which it cannot 
+      * determine the normalization properties, then the processor will 
+      * ignore any possible denormalizations caused by these characters.  
+      * This parameter is ignored for [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. </dd>
+      * <dt>
+      * <code>false</code></dt>
+      * <dd>[<em>optional</em>] Report an fatal <b>"unknown-character-denormalization"</b> error if a character is encountered for which the processor cannot 
+      * determine the normalization properties. </dd>
+      * </dl></dd>
+      * <dt><code>"infoset"</code></dt>
+      * <dd> See 
+      * the definition of <code>DOMConfiguration</code> for a description of 
+      * this parameter. Unlike in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+      * , this parameter will default to <code>true</code> for 
+      * <code>LSParser</code>. </dd>
+      * <dt><code>"namespaces"</code></dt>
+      * <dd>
+      * <dl>
+      * <dt><code>true</code></dt>
+      * <dd>[<em>required</em>] (<em>default</em>) Perform the namespace processing as defined in [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
+      *  and [<a href='http://www.w3.org/TR/2004/REC-xml-names11-20040204/'>XML Namespaces 1.1</a>]
+      * . </dd>
+      * <dt><code>false</code></dt>
+      * <dd>[<em>optional</em>] Do not perform the namespace processing. </dd>
+      * </dl></dd>
+      * <dt>
+      * <code>"resource-resolver"</code></dt>
+      * <dd>[<em>required</em>] A reference to a <code>LSResourceResolver</code> object, or null. If 
+      * the value of this parameter is not null when an external resource 
+      * (such as an external XML entity or an XML schema location) is 
+      * encountered, the implementation will request that the 
+      * <code>LSResourceResolver</code> referenced in this parameter resolves 
+      * the resource. </dd>
+      * <dt><code>"supported-media-types-only"</code></dt>
+      * <dd>
+      * <dl>
+      * <dt>
+      * <code>true</code></dt>
+      * <dd>[<em>optional</em>] Check that the media type of the parsed resource is a supported media 
+      * type. If an unsupported media type is encountered, a fatal error of 
+      * type <b>"unsupported-media-type"</b> will be raised. The media types defined in [<a href='http://www.ietf.org/rfc/rfc3023.txt'>IETF RFC 3023</a>] must always 
+      * be accepted. </dd>
+      * <dt><code>false</code></dt>
+      * <dd>[<em>required</em>] (<em>default</em>) Accept any media type. </dd>
+      * </dl></dd>
+      * <dt><code>"validate"</code></dt>
+      * <dd> See the definition of 
+      * <code>DOMConfiguration</code> for a description of this parameter. 
+      * Unlike in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+      * , the processing of the internal subset is always accomplished, even 
+      * if this parameter is set to <code>false</code>. </dd>
+      * <dt>
+      * <code>"validate-if-schema"</code></dt>
+      * <dd> See the definition of 
+      * <code>DOMConfiguration</code> for a description of this parameter. 
+      * Unlike in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+      * , the processing of the internal subset is always accomplished, even 
+      * if this parameter is set to <code>false</code>. </dd>
+      * <dt>
+      * <code>"well-formed"</code></dt>
+      * <dd> See the definition of 
+      * <code>DOMConfiguration</code> for a description of this parameter. 
+      * Unlike in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+      * , this parameter cannot be set to <code>false</code>. </dd>
+      * </dl>
+      */
+     public DOMConfiguration getDomConfig();
+ 
+     /**
+      *  When a filter is provided, the implementation will call out to the 
+      * filter as it is constructing the DOM tree structure. The filter can 
+      * choose to remove elements from the document being constructed, or to 
+      * terminate the parsing early. 
+      * <br> The filter is invoked after the operations requested by the 
+      * <code>DOMConfiguration</code> parameters have been applied. For 
+      * example, if "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-validate'>
+      * validate</a>" is set to <code>true</code>, the validation is done before invoking the 
+      * filter. 
+      */
+     public LSParserFilter getFilter();
+     /**
+      *  When a filter is provided, the implementation will call out to the 
+      * filter as it is constructing the DOM tree structure. The filter can 
+      * choose to remove elements from the document being constructed, or to 
+      * terminate the parsing early. 
+      * <br> The filter is invoked after the operations requested by the 
+      * <code>DOMConfiguration</code> parameters have been applied. For 
+      * example, if "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-validate'>
+      * validate</a>" is set to <code>true</code>, the validation is done before invoking the 
+      * filter. 
+      */
+     public void setFilter(LSParserFilter filter);
+ 
+     /**
+      *  <code>true</code> if the <code>LSParser</code> is asynchronous, 
+      * <code>false</code> if it is synchronous. 
+      */
+     public boolean getAsync();
+ 
+     /**
+      *  <code>true</code> if the <code>LSParser</code> is currently busy 
+      * loading a document, otherwise <code>false</code>. 
+      */
+     public boolean getBusy();
+ 
+     /**
+      * Parse an XML document from a resource identified by a 
+      * <code>LSInput</code>.
+      * @param input  The <code>LSInput</code> from which the source of the 
+      *   document is to be read. 
+      * @return  If the <code>LSParser</code> is a synchronous 
+      *   <code>LSParser</code>, the newly created and populated 
+      *   <code>Document</code> is returned. If the <code>LSParser</code> is 
+      *   asynchronous, <code>null</code> is returned since the document 
+      *   object may not yet be constructed when this method returns. 
+      * @exception DOMException
+      *    INVALID_STATE_ERR: Raised if the <code>LSParser</code>'s 
+      *   <code>LSParser.busy</code> attribute is <code>true</code>. 
+      * @exception LSException
+      *    PARSE_ERR: Raised if the <code>LSParser</code> was unable to load 
+      *   the XML document. DOM applications should attach a 
+      *   <code>DOMErrorHandler</code> using the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+      *   error-handler</a>" if they wish to get details on the error. 
+      */
+     public Document parse(LSInput input)
+                           throws DOMException, LSException;
+ 
+     /**
+      *  Parse an XML document from a location identified by a URI reference [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]. If the URI 
+      * contains a fragment identifier (see section 4.1 in [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>]), the 
+      * behavior is not defined by this specification, future versions of 
+      * this specification may define the behavior. 
+      * @param uri The location of the XML document to be read.
+      * @return  If the <code>LSParser</code> is a synchronous 
+      *   <code>LSParser</code>, the newly created and populated 
+      *   <code>Document</code> is returned, or <code>null</code> if an error 
+      *   occured. If the <code>LSParser</code> is asynchronous, 
+      *   <code>null</code> is returned since the document object may not yet 
+      *   be constructed when this method returns. 
+      * @exception DOMException
+      *    INVALID_STATE_ERR: Raised if the <code>LSParser.busy</code> 
+      *   attribute is <code>true</code>. 
+      * @exception LSException
+      *    PARSE_ERR: Raised if the <code>LSParser</code> was unable to load 
+      *   the XML document. DOM applications should attach a 
+      *   <code>DOMErrorHandler</code> using the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+      *   error-handler</a>" if they wish to get details on the error. 
+      */
+     public Document parseURI(String uri)
+                              throws DOMException, LSException;
+ 
+     // ACTION_TYPES
+     /**
+      *  Append the result of the parse operation as children of the context 
+      * node. For this action to work, the context node must be an 
+      * <code>Element</code> or a <code>DocumentFragment</code>. 
+      */
+     public static final short ACTION_APPEND_AS_CHILDREN = 1;
+     /**
+      *  Replace all the children of the context node with the result of the 
+      * parse operation. For this action to work, the context node must be an 
+      * <code>Element</code>, a <code>Document</code>, or a 
+      * <code>DocumentFragment</code>. 
+      */
+     public static final short ACTION_REPLACE_CHILDREN   = 2;
+     /**
+      *  Insert the result of the parse operation as the immediately preceding 
+      * sibling of the context node. For this action to work the context 
+      * node's parent must be an <code>Element</code> or a 
+      * <code>DocumentFragment</code>. 
+      */
+     public static final short ACTION_INSERT_BEFORE      = 3;
+     /**
+      *  Insert the result of the parse operation as the immediately following 
+      * sibling of the context node. For this action to work the context 
+      * node's parent must be an <code>Element</code> or a 
+      * <code>DocumentFragment</code>. 
+      */
+     public static final short ACTION_INSERT_AFTER       = 4;
+     /**
+      *  Replace the context node with the result of the parse operation. For 
+      * this action to work, the context node must have a parent, and the 
+      * parent must be an <code>Element</code> or a 
+      * <code>DocumentFragment</code>. 
+      */
+     public static final short ACTION_REPLACE            = 5;
+ 
+     /**
+      *  Parse an XML fragment from a resource identified by a 
+      * <code>LSInput</code> and insert the content into an existing document 
+      * at the position specified with the <code>context</code> and 
+      * <code>action</code> arguments. When parsing the input stream, the 
+      * context node (or its parent, depending on where the result will be 
+      * inserted) is used for resolving unbound namespace prefixes. The 
+      * context node's <code>ownerDocument</code> node (or the node itself if 
+      * the node of type <code>DOCUMENT_NODE</code>) is used to resolve 
+      * default attributes and entity references. 
+      * <br> As the new data is inserted into the document, at least one 
+      * mutation event is fired per new immediate child or sibling of the 
+      * context node. 
+      * <br> If the context node is a <code>Document</code> node and the action 
+      * is <code>ACTION_REPLACE_CHILDREN</code>, then the document that is 
+      * passed as the context node will be changed such that its 
+      * <code>xmlEncoding</code>, <code>documentURI</code>, 
+      * <code>xmlVersion</code>, <code>inputEncoding</code>, 
+      * <code>xmlStandalone</code>, and all other such attributes are set to 
+      * what they would be set to if the input source was parsed using 
+      * <code>LSParser.parse()</code>. 
+      * <br> This method is always synchronous, even if the 
+      * <code>LSParser</code> is asynchronous (<code>LSParser.async</code> is 
+      * <code>true</code>). 
+      * <br> If an error occurs while parsing, the caller is notified through 
+      * the <code>ErrorHandler</code> instance associated with the "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+      * error-handler</a>" parameter of the <code>DOMConfiguration</code>. 
+      * <br> When calling <code>parseWithContext</code>, the values of the 
+      * following configuration parameters will be ignored and their default 
+      * values will always be used instead: "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-validate'>
+      * validate</a>", "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-validate-if-schema'>
+      * validate-if-schema</a>", and "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-element-content-whitespace'>
+      * element-content-whitespace</a>". Other parameters will be treated normally, and the parser is expected 
+      * to call the <code>LSParserFilter</code> just as if a whole document 
+      * was parsed. 
+      * @param input  The <code>LSInput</code> from which the source document 
+      *   is to be read. The source document must be an XML fragment, i.e. 
+      *   anything except a complete XML document (except in the case where 
+      *   the context node of type <code>DOCUMENT_NODE</code>, and the action 
+      *   is <code>ACTION_REPLACE_CHILDREN</code>), a DOCTYPE (internal 
+      *   subset), entity declaration(s), notation declaration(s), or XML or 
+      *   text declaration(s). 
+      * @param contextArg  The node that is used as the context for the data 
+      *   that is being parsed. This node must be a <code>Document</code> 
+      *   node, a <code>DocumentFragment</code> node, or a node of a type 
+      *   that is allowed as a child of an <code>Element</code> node, e.g. it 
+      *   cannot be an <code>Attribute</code> node. 
+      * @param action  This parameter describes which action should be taken 
+      *   between the new set of nodes being inserted and the existing 
+      *   children of the context node. The set of possible actions is 
+      *   defined in <code>ACTION_TYPES</code> above. 
+      * @return  Return the node that is the result of the parse operation. If 
+      *   the result is more than one top-level node, the first one is 
+      *   returned. 
+      * @exception DOMException
+      *   HIERARCHY_REQUEST_ERR: Raised if the content cannot replace, be 
+      *   inserted before, after, or as a child of the context node (see also 
+      *   <code>Node.insertBefore</code> or <code>Node.replaceChild</code> in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+      *   ).
+      *   <br> NOT_SUPPORTED_ERR: Raised if the <code>LSParser</code> doesn't 
+      *   support this method, or if the context node is of type 
+      *   <code>Document</code> and the DOM implementation doesn't support 
+      *   the replacement of the <code>DocumentType</code> child or 
+      *   <code>Element</code> child. 
+      *   <br> NO_MODIFICATION_ALLOWED_ERR: Raised if the context node is a 
+      *   read only node and the content is being appended to its child list, 
+      *   or if the parent node of the context node is read only node and the 
+      *   content is being inserted in its child list.
+      *   <br> INVALID_STATE_ERR: Raised if the <code>LSParser.busy</code> 
+      *   attribute is <code>true</code>. 
+      * @exception LSException
+      *    PARSE_ERR: Raised if the <code>LSParser</code> was unable to load 
+      *   the XML fragment. DOM applications should attach a 
+      *   <code>DOMErrorHandler</code> using the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+      *   error-handler</a>" if they wish to get details on the error. 
+      */
+     public Node parseWithContext(LSInput input, 
+                                  Node contextArg, 
+                                  short action)
+                                  throws DOMException, LSException;
+ 
+     /**
+      *  Abort the loading of the document that is currently being loaded by 
+      * the <code>LSParser</code>. If the <code>LSParser</code> is currently 
+      * not busy, a call to this method does nothing. 
+      */
+     public void abort();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,172 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Element;
+ 
+ /**
+  *  <code>LSParserFilter</code>s provide applications the ability to examine 
+  * nodes as they are being constructed while parsing. As each node is 
+  * examined, it may be modified or removed, or the entire parse may be 
+  * terminated early. 
+  * <p> At the time any of the filter methods are called by the parser, the 
+  * owner Document and DOMImplementation objects exist and are accessible. 
+  * The document element is never passed to the <code>LSParserFilter</code> 
+  * methods, i.e. it is not possible to filter out the document element. 
+  * <code>Document</code>, <code>DocumentType</code>, <code>Notation</code>, 
+  * <code>Entity</code>, and <code>Attr</code> nodes are never passed to the 
+  * <code>acceptNode</code> method on the filter. The child nodes of an 
+  * <code>EntityReference</code> node are passed to the filter if the 
+  * parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-entities'>
+  * entities</a>" is set to <code>false</code>. Note that, as described by the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-entities'>
+  * entities</a>", unexpanded entity reference nodes are never discarded and are always 
+  * passed to the filter. 
+  * <p> All validity checking while parsing a document occurs on the source 
+  * document as it appears on the input stream, not on the DOM document as it 
+  * is built in memory. With filters, the document in memory may be a subset 
+  * of the document on the stream, and its validity may have been affected by 
+  * the filtering. 
+  * <p> All default attributes must be present on elements when the elements 
+  * are passed to the filter methods. All other default content must be 
+  * passed to the filter methods. 
+  * <p> DOM applications must not raise exceptions in a filter. The effect of 
+  * throwing exceptions from a filter is DOM implementation dependent. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface LSParserFilter {
+     // Constants returned by startElement and acceptNode
+     /**
+      * Accept the node.
+      */
+     public static final short FILTER_ACCEPT             = 1;
+     /**
+      * Reject the node and its children.
+      */
+     public static final short FILTER_REJECT             = 2;
+     /**
+      * Skip this single node. The children of this node will still be 
+      * considered. 
+      */
+     public static final short FILTER_SKIP               = 3;
+     /**
+      *  Interrupt the normal processing of the document. 
+      */
+     public static final short FILTER_INTERRUPT          = 4;
+ 
+     /**
+      *  The parser will call this method after each <code>Element</code> start 
+      * tag has been scanned, but before the remainder of the 
+      * <code>Element</code> is processed. The intent is to allow the 
+      * element, including any children, to be efficiently skipped. Note that 
+      * only element nodes are passed to the <code>startElement</code> 
+      * function. 
+      * <br>The element node passed to <code>startElement</code> for filtering 
+      * will include all of the Element's attributes, but none of the 
+      * children nodes. The Element may not yet be in place in the document 
+      * being constructed (it may not have a parent node.) 
+      * <br>A <code>startElement</code> filter function may access or change 
+      * the attributes for the Element. Changing Namespace declarations will 
+      * have no effect on namespace resolution by the parser.
+      * <br>For efficiency, the Element node passed to the filter may not be 
+      * the same one as is actually placed in the tree if the node is 
+      * accepted. And the actual node (node object identity) may be reused 
+      * during the process of reading in and filtering a document.
+      * @param elementArg The newly encountered element. At the time this 
+      *   method is called, the element is incomplete - it will have its 
+      *   attributes, but no children. 
+      * @return 
+      * <ul>
+      * <li> <code>FILTER_ACCEPT</code> if the <code>Element</code> should 
+      *   be included in the DOM document being built. 
+      * </li>
+      * <li> 
+      *   <code>FILTER_REJECT</code> if the <code>Element</code> and all of 
+      *   its children should be rejected. 
+      * </li>
+      * <li> <code>FILTER_SKIP</code> if the 
+      *   <code>Element</code> should be skipped. All of its children are 
+      *   inserted in place of the skipped <code>Element</code> node. 
+      * </li>
+      * <li> 
+      *   <code>FILTER_INTERRUPT</code> if the filter wants to stop the 
+      *   processing of the document. Interrupting the processing of the 
+      *   document does no longer guarantee that the resulting DOM tree is 
+      *   XML well-formed. The <code>Element</code> is rejected. 
+      * </li>
+      * </ul> Returning 
+      *   any other values will result in unspecified behavior. 
+      */
+     public short startElement(Element elementArg);
+ 
+     /**
+      * This method will be called by the parser at the completion of the 
+      * parsing of each node. The node and all of its descendants will exist 
+      * and be complete. The parent node will also exist, although it may be 
+      * incomplete, i.e. it may have additional children that have not yet 
+      * been parsed. Attribute nodes are never passed to this function.
+      * <br>From within this method, the new node may be freely modified - 
+      * children may be added or removed, text nodes modified, etc. The state 
+      * of the rest of the document outside this node is not defined, and the 
+      * affect of any attempt to navigate to, or to modify any other part of 
+      * the document is undefined. 
+      * <br>For validating parsers, the checks are made on the original 
+      * document, before any modification by the filter. No validity checks 
+      * are made on any document modifications made by the filter.
+      * <br>If this new node is rejected, the parser might reuse the new node 
+      * and any of its descendants.
+      * @param nodeArg The newly constructed element. At the time this method 
+      *   is called, the element is complete - it has all of its children 
+      *   (and their children, recursively) and attributes, and is attached 
+      *   as a child to its parent. 
+      * @return 
+      * <ul>
+      * <li> <code>FILTER_ACCEPT</code> if this <code>Node</code> should 
+      *   be included in the DOM document being built. 
+      * </li>
+      * <li> 
+      *   <code>FILTER_REJECT</code> if the <code>Node</code> and all of its 
+      *   children should be rejected. 
+      * </li>
+      * <li> <code>FILTER_SKIP</code> if the 
+      *   <code>Node</code> should be skipped and the <code>Node</code> 
+      *   should be replaced by all the children of the <code>Node</code>. 
+      * </li>
+      * <li> 
+      *   <code>FILTER_INTERRUPT</code> if the filter wants to stop the 
+      *   processing of the document. Interrupting the processing of the 
+      *   document does no longer guarantee that the resulting DOM tree is 
+      *   XML well-formed. The <code>Node</code> is accepted and will be the 
+      *   last completely parsed node. 
+      * </li>
+      * </ul>
+      */
+     public short acceptNode(Node nodeArg);
+ 
+     /**
+      *  Tells the <code>LSParser</code> what types of nodes to show to the 
+      * method <code>LSParserFilter.acceptNode</code>. If a node is not shown 
+      * to the filter using this attribute, it is automatically included in 
+      * the DOM document being built. See <code>NodeFilter</code> for 
+      * definition of the constants. The constants <code>SHOW_ATTRIBUTE</code>
+      * , <code>SHOW_DOCUMENT</code>, <code>SHOW_DOCUMENT_TYPE</code>, 
+      * <code>SHOW_NOTATION</code>, <code>SHOW_ENTITY</code>, and 
+      * <code>SHOW_DOCUMENT_FRAGMENT</code> are meaningless here. Those nodes 
+      * will never be passed to <code>LSParserFilter.acceptNode</code>. 
+      * <br> The constants used here are defined in [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>DOM Level 2 Traversal and      Range</a>]
+      * . 
+      */
+     public int getWhatToShow();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,48 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ import org.w3c.dom.events.Event;
+ 
+ /**
+  *  This interface represents a progress event object that notifies the 
+  * application about progress as a document is parsed. It extends the 
+  * <code>Event</code> interface defined in [<a href='http://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107'>DOM Level 3 Events</a>]
+  * . 
+  * <p> The units used for the attributes <code>position</code> and 
+  * <code>totalSize</code> are not specified and can be implementation and 
+  * input dependent. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface LSProgressEvent extends Event {
+     /**
+      * The input source that is being parsed.
+      */
+     public LSInput getInput();
+ 
+     /**
+      * The current position in the input source, including all external 
+      * entities and other resources that have been read.
+      */
+     public int getPosition();
+ 
+     /**
+      * The total size of the document including all external resources, this 
+      * number might change as a document is being parsed if references to 
+      * more external resources are seen. A value of <code>0</code> is 
+      * returned if the total size cannot be determined or estimated.
+      */
+     public int getTotalSize();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,81 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ /**
+  *  <code>LSResourceResolver</code> provides a way for applications to 
+  * redirect references to external resources. 
+  * <p> Applications needing to implement custom handling for external 
+  * resources can implement this interface and register their implementation 
+  * by setting the "resource-resolver" parameter of 
+  * <code>DOMConfiguration</code> objects attached to <code>LSParser</code> 
+  * and <code>LSSerializer</code>. It can also be register on 
+  * <code>DOMConfiguration</code> objects attached to <code>Document</code> 
+  * if the "LS" feature is supported. 
+  * <p> The <code>LSParser</code> will then allow the application to intercept 
+  * any external entities, including the external DTD subset and external 
+  * parameter entities, before including them. The top-level document entity 
+  * is never passed to the <code>resolveResource</code> method. 
+  * <p> Many DOM applications will not need to implement this interface, but it 
+  * will be especially useful for applications that build XML documents from 
+  * databases or other specialized input sources, or for applications that 
+  * use URNs. 
+  * <p ><b>Note:</b>  <code>LSResourceResolver</code> is based on the SAX2 [<a href='http://www.saxproject.org/'>SAX</a>] <code>EntityResolver</code> 
+  * interface. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface LSResourceResolver {
+     /**
+      *  Allow the application to resolve external resources. 
+      * <br> The <code>LSParser</code> will call this method before opening any 
+      * external resource, including the external DTD subset, external 
+      * entities referenced within the DTD, and external entities referenced 
+      * within the document element (however, the top-level document entity 
+      * is not passed to this method). The application may then request that 
+      * the <code>LSParser</code> resolve the external resource itself, that 
+      * it use an alternative URI, or that it use an entirely different input 
+      * source. 
+      * <br> Application writers can use this method to redirect external 
+      * system identifiers to secure and/or local URI, to look up public 
+      * identifiers in a catalogue, or to read an entity from a database or 
+      * other input source (including, for example, a dialog box). 
+      * @param type  The type of the resource being resolved. For XML [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>] resources 
+      *   (i.e. entities), applications must use the value 
+      *   <code>"http://www.w3.org/TR/REC-xml"</code>. For XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+      *   , applications must use the value 
+      *   <code>"http://www.w3.org/2001/XMLSchema"</code>. Other types of 
+      *   resources are outside the scope of this specification and therefore 
+      *   should recommend an absolute URI in order to use this method. 
+      * @param namespaceURI  The namespace of the resource being resolved, 
+      *   e.g. the target namespace of the XML Schema [<a href='http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/'>XML Schema Part 1</a>]
+      *    when resolving XML Schema resources. 
+      * @param publicId  The public identifier of the external entity being 
+      *   referenced, or <code>null</code> if no public identifier was 
+      *   supplied or if the resource is not an entity. 
+      * @param systemId  The system identifier, a URI reference [<a href='http://www.ietf.org/rfc/rfc2396.txt'>IETF RFC 2396</a>], of the 
+      *   external resource being referenced, or <code>null</code> if no 
+      *   system identifier was supplied. 
+      * @param baseURI  The absolute base URI of the resource being parsed, or 
+      *   <code>null</code> if there is no base URI. 
+      * @return  A <code>LSInput</code> object describing the new input 
+      *   source, or <code>null</code> to request that the parser open a 
+      *   regular URI connection to the resource. 
+      */
+     public LSInput resolveResource(String type, 
+                                    String namespaceURI, 
+                                    String publicId, 
+                                    String systemId, 
+                                    String baseURI);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,436 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ import org.w3c.dom.DOMConfiguration;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  A <code>LSSerializer</code> provides an API for serializing (writing) a 
+  * DOM document out into XML. The XML data is written to a string or an 
+  * output stream. Any changes or fixups made during the serialization affect 
+  * only the serialized data. The <code>Document</code> object and its 
+  * children are never altered by the serialization operation. 
+  * <p> During serialization of XML data, namespace fixup is done as defined in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+  * , Appendix B. [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>DOM Level 2 Core</a>]
+  *  allows empty strings as a real namespace URI. If the 
+  * <code>namespaceURI</code> of a <code>Node</code> is empty string, the 
+  * serialization will treat them as <code>null</code>, ignoring the prefix 
+  * if any. 
+  * <p> <code>LSSerializer</code> accepts any node type for serialization. For 
+  * nodes of type <code>Document</code> or <code>Entity</code>, well-formed 
+  * XML will be created when possible (well-formedness is guaranteed if the 
+  * document or entity comes from a parse operation and is unchanged since it 
+  * was created). The serialized output for these node types is either as a 
+  * XML document or an External XML Entity, respectively, and is acceptable 
+  * input for an XML parser. For all other types of nodes the serialized form 
+  * is implementation dependent. 
+  * <p>Within a <code>Document</code>, <code>DocumentFragment</code>, or 
+  * <code>Entity</code> being serialized, <code>Nodes</code> are processed as 
+  * follows
+  * <ul>
+  * <li> <code>Document</code> nodes are written, including the XML 
+  * declaration (unless the parameter "xml-declaration" is set to 
+  * <code>false</code>) and a DTD subset, if one exists in the DOM. Writing a 
+  * <code>Document</code> node serializes the entire document. 
+  * </li>
+  * <li> 
+  * <code>Entity</code> nodes, when written directly by 
+  * <code>LSSerializer.write</code>, outputs the entity expansion but no 
+  * namespace fixup is done. The resulting output will be valid as an 
+  * external entity. 
+  * </li>
+  * <li> If the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-entities'>
+  * entities</a>" is set to <code>true</code>, <code>EntityReference</code> nodes are 
+  * serialized as an entity reference of the form "
+  * <code>&amp;entityName;</code>" in the output. Child nodes (the expansion) 
+  * of the entity reference are ignored. If the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-entities'>
+  * entities</a>" is set to <code>false</code>, only the children of the entity reference 
+  * are serialized. <code>EntityReference</code> nodes with no children (no 
+  * corresponding <code>Entity</code> node or the corresponding 
+  * <code>Entity</code> nodes have no children) are always serialized. 
+  * </li>
+  * <li> 
+  * <code>CDATAsections</code> containing content characters that cannot be 
+  * represented in the specified output encoding are handled according to the 
+  * "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-split-cdata-sections'>
+  * split-cdata-sections</a>" parameter.  If the parameter is set to <code>true</code>, 
+  * <code>CDATAsections</code> are split, and the unrepresentable characters 
+  * are serialized as numeric character references in ordinary content. The 
+  * exact position and number of splits is not specified.  If the parameter 
+  * is set to <code>false</code>, unrepresentable characters in a 
+  * <code>CDATAsection</code> are reported as 
+  * <code>"wf-invalid-character"</code> errors if the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-well-formed'>
+  * well-formed</a>" is set to <code>true</code>. The error is not recoverable - there is no 
+  * mechanism for supplying alternative characters and continuing with the 
+  * serialization. 
+  * </li>
+  * <li> <code>DocumentFragment</code> nodes are serialized by 
+  * serializing the children of the document fragment in the order they 
+  * appear in the document fragment. 
+  * </li>
+  * <li> All other node types (Element, Text, 
+  * etc.) are serialized to their corresponding XML source form. 
+  * </li>
+  * </ul>
+  * <p ><b>Note:</b>  The serialization of a <code>Node</code> does not always 
+  * generate a well-formed XML document, i.e. a <code>LSParser</code> might 
+  * throw fatal errors when parsing the resulting serialization. 
+  * <p> Within the character data of a document (outside of markup), any 
+  * characters that cannot be represented directly are replaced with 
+  * character references. Occurrences of '&lt;' and '&amp;' are replaced by 
+  * the predefined entities &amp;lt; and &amp;amp;. The other predefined 
+  * entities (&amp;gt;, &amp;apos;, and &amp;quot;) might not be used, except 
+  * where needed (e.g. using &amp;gt; in cases such as ']]&gt;'). Any 
+  * characters that cannot be represented directly in the output character 
+  * encoding are serialized as numeric character references (and since 
+  * character encoding standards commonly use hexadecimal representations of 
+  * characters, using the hexadecimal representation when serializing 
+  * character references is encouraged). 
+  * <p> To allow attribute values to contain both single and double quotes, the 
+  * apostrophe or single-quote character (') may be represented as 
+  * "&amp;apos;", and the double-quote character (")  as "&amp;quot;". New 
+  * line characters and other characters that cannot be represented directly 
+  * in attribute values in the output character encoding are serialized as a 
+  * numeric character reference. 
+  * <p> Within markup, but outside of attributes, any occurrence of a character 
+  * that cannot be represented in the output character encoding is reported 
+  * as a <code>DOMError</code> fatal error. An example would be serializing 
+  * the element &lt;LaCa\u00f1ada/&gt; with <code>encoding="us-ascii"</code>. 
+  * This will result with a generation of a <code>DOMError</code> 
+  * "wf-invalid-character-in-node-name" (as proposed in "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-well-formed'>
+  * well-formed</a>"). 
+  * <p> When requested by setting the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-normalize-characters'>
+  * normalize-characters</a>" on <code>LSSerializer</code> to true, character normalization is 
+  * performed according to the definition of <a href='http://www.w3.org/TR/2004/REC-xml11-20040204/#dt-fullnorm'>fully 
+  * normalized</a> characters included in appendix E of [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>] on all 
+  * data to be serialized, both markup and character data. The character 
+  * normalization process affects only the data as it is being written; it 
+  * does not alter the DOM's view of the document after serialization has 
+  * completed. 
+  * <p> Implementations are required to support the encodings "UTF-8", 
+  * "UTF-16", "UTF-16BE", and "UTF-16LE" to guarantee that data is 
+  * serializable in all encodings that are required to be supported by all 
+  * XML parsers. When the encoding is UTF-8, whether or not a byte order mark 
+  * is serialized, or if the output is big-endian or little-endian, is 
+  * implementation dependent. When the encoding is UTF-16, whether or not the 
+  * output is big-endian or little-endian is implementation dependent, but a 
+  * Byte Order Mark must be generated for non-character outputs, such as 
+  * <code>LSOutput.byteStream</code> or <code>LSOutput.systemId</code>. If 
+  * the Byte Order Mark is not generated, a "byte-order-mark-needed" warning 
+  * is reported. When the encoding is UTF-16LE or UTF-16BE, the output is 
+  * big-endian (UTF-16BE) or little-endian (UTF-16LE) and the Byte Order Mark 
+  * is not be generated. In all cases, the encoding declaration, if 
+  * generated, will correspond to the encoding used during the serialization 
+  * (e.g. <code>encoding="UTF-16"</code> will appear if UTF-16 was 
+  * requested). 
+  * <p> Namespaces are fixed up during serialization, the serialization process 
+  * will verify that namespace declarations, namespace prefixes and the 
+  * namespace URI associated with elements and attributes are consistent. If 
+  * inconsistencies are found, the serialized form of the document will be 
+  * altered to remove them. The method used for doing the namespace fixup 
+  * while serializing a document is the algorithm defined in Appendix B.1, 
+  * "Namespace normalization", of [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+  * . 
+  * <p> While serializing a document, the parameter "discard-default-content" 
+  * controls whether or not non-specified data is serialized. 
+  * <p> While serializing, errors and warnings are reported to the application 
+  * through the error handler (<code>LSSerializer.domConfig</code>'s "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+  * error-handler</a>" parameter). This specification does in no way try to define all possible 
+  * errors and warnings that can occur while serializing a DOM node, but some 
+  * common error and warning cases are defined. The types (
+  * <code>DOMError.type</code>) of errors and warnings defined by this 
+  * specification are: 
+  * <dl>
+  * <dt><code>"no-output-specified" [fatal]</code></dt>
+  * <dd> Raised when 
+  * writing to a <code>LSOutput</code> if no output is specified in the 
+  * <code>LSOutput</code>. </dd>
+  * <dt> 
+  * <code>"unbound-prefix-in-entity-reference" [fatal]</code> </dt>
+  * <dd> Raised if the 
+  * configuration parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-namespaces'>
+  * namespaces</a>" is set to <code>true</code> and an entity whose replacement text 
+  * contains unbound namespace prefixes is referenced in a location where 
+  * there are no bindings for the namespace prefixes. </dd>
+  * <dt>
+  * <code>"unsupported-encoding" [fatal]</code></dt>
+  * <dd> Raised if an unsupported 
+  * encoding is encountered. </dd>
+  * </dl> 
+  * <p> In addition to raising the defined errors and warnings, implementations 
+  * are expected to raise implementation specific errors and warnings for any 
+  * other error and warning cases such as IO errors (file not found, 
+  * permission denied,...) and so on. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface LSSerializer {
+     /**
+      *  The <code>DOMConfiguration</code> object used by the 
+      * <code>LSSerializer</code> when serializing a DOM node. 
+      * <br> In addition to the parameters recognized by the <a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration'>
+      * DOMConfiguration</a> interface defined in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+      * , the <code>DOMConfiguration</code> objects for 
+      * <code>LSSerializer</code> adds, or modifies, the following 
+      * parameters: 
+      * <dl>
+      * <dt><code>"canonical-form"</code></dt>
+      * <dd>
+      * <dl>
+      * <dt><code>true</code></dt>
+      * <dd>[<em>optional</em>] Writes the document according to the rules specified in [<a href='http://www.w3.org/TR/2001/REC-xml-c14n-20010315'>Canonical XML</a>]. 
+      * In addition to the behavior described in "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-canonical-form'>
+      * canonical-form</a>" [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+      * , setting this parameter to <code>true</code> will set the parameters 
+      * "format-pretty-print", "discard-default-content", and "xml-declaration
+      * ", to <code>false</code>. Setting one of those parameters to 
+      * <code>true</code> will set this parameter to <code>false</code>. 
+      * Serializing an XML 1.1 document when "canonical-form" is 
+      * <code>true</code> will generate a fatal error. </dd>
+      * <dt><code>false</code></dt>
+      * <dd>[<em>required</em>] (<em>default</em>) Do not canonicalize the output. </dd>
+      * </dl></dd>
+      * <dt><code>"discard-default-content"</code></dt>
+      * <dd>
+      * <dl>
+      * <dt>
+      * <code>true</code></dt>
+      * <dd>[<em>required</em>] (<em>default</em>) Use the <code>Attr.specified</code> attribute to decide what attributes 
+      * should be discarded. Note that some implementations might use 
+      * whatever information available to the implementation (i.e. XML 
+      * schema, DTD, the <code>Attr.specified</code> attribute, and so on) to 
+      * determine what attributes and content to discard if this parameter is 
+      * set to <code>true</code>. </dd>
+      * <dt><code>false</code></dt>
+      * <dd>[<em>required</em>]Keep all attributes and all content.</dd>
+      * </dl></dd>
+      * <dt><code>"format-pretty-print"</code></dt>
+      * <dd>
+      * <dl>
+      * <dt>
+      * <code>true</code></dt>
+      * <dd>[<em>optional</em>] Formatting the output by adding whitespace to produce a pretty-printed, 
+      * indented, human-readable form. The exact form of the transformations 
+      * is not specified by this specification. Pretty-printing changes the 
+      * content of the document and may affect the validity of the document, 
+      * validating implementations should preserve validity. </dd>
+      * <dt>
+      * <code>false</code></dt>
+      * <dd>[<em>required</em>] (<em>default</em>) Don't pretty-print the result. </dd>
+      * </dl></dd>
+      * <dt> 
+      * <code>"ignore-unknown-character-denormalizations"</code> </dt>
+      * <dd>
+      * <dl>
+      * <dt>
+      * <code>true</code></dt>
+      * <dd>[<em>required</em>] (<em>default</em>) If, while verifying full normalization when [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>] is 
+      * supported, a character is encountered for which the normalization 
+      * properties cannot be determined, then raise a 
+      * <code>"unknown-character-denormalization"</code> warning (instead of 
+      * raising an error, if this parameter is not set) and ignore any 
+      * possible denormalizations caused by these characters. </dd>
+      * <dt>
+      * <code>false</code></dt>
+      * <dd>[<em>optional</em>] Report a fatal error if a character is encountered for which the 
+      * processor cannot determine the normalization properties. </dd>
+      * </dl></dd>
+      * <dt>
+      * <code>"normalize-characters"</code></dt>
+      * <dd> This parameter is equivalent to 
+      * the one defined by <code>DOMConfiguration</code> in [<a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>DOM Level 3 Core</a>]
+      * . Unlike in the Core, the default value for this parameter is 
+      * <code>true</code>. While DOM implementations are not required to 
+      * support <a href='http://www.w3.org/TR/2004/REC-xml11-20040204/#dt-fullnorm'>fully 
+      * normalizing</a> the characters in the document according to appendix E of [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>], this 
+      * parameter must be activated by default if supported. </dd>
+      * <dt>
+      * <code>"xml-declaration"</code></dt>
+      * <dd>
+      * <dl>
+      * <dt><code>true</code></dt>
+      * <dd>[<em>required</em>] (<em>default</em>) If a <code>Document</code>, <code>Element</code>, or <code>Entity</code>
+      *  node is serialized, the XML declaration, or text declaration, should 
+      * be included. The version (<code>Document.xmlVersion</code> if the 
+      * document is a Level 3 document and the version is non-null, otherwise 
+      * use the value "1.0"), and the output encoding (see 
+      * <code>LSSerializer.write</code> for details on how to find the output 
+      * encoding) are specified in the serialized XML declaration. </dd>
+      * <dt>
+      * <code>false</code></dt>
+      * <dd>[<em>required</em>] Do not serialize the XML and text declarations. Report a 
+      * <code>"xml-declaration-needed"</code> warning if this will cause 
+      * problems (i.e. the serialized data is of an XML version other than [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>], or an 
+      * encoding would be needed to be able to re-parse the serialized data). </dd>
+      * </dl></dd>
+      * </dl>
+      */
+     public DOMConfiguration getDomConfig();
+ 
+     /**
+      *  The end-of-line sequence of characters to be used in the XML being 
+      * written out. Any string is supported, but XML treats only a certain 
+      * set of characters sequence as end-of-line (See section 2.11, 
+      * "End-of-Line Handling" in [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>], if the 
+      * serialized content is XML 1.0 or section 2.11, "End-of-Line Handling" 
+      * in [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>], if the 
+      * serialized content is XML 1.1). Using other character sequences than 
+      * the recommended ones can result in a document that is either not 
+      * serializable or not well-formed). 
+      * <br> On retrieval, the default value of this attribute is the 
+      * implementation specific default end-of-line sequence. DOM 
+      * implementations should choose the default to match the usual 
+      * convention for text files in the environment being used. 
+      * Implementations must choose a default sequence that matches one of 
+      * those allowed by XML 1.0 or XML 1.1, depending on the serialized 
+      * content. Setting this attribute to <code>null</code> will reset its 
+      * value to the default value. 
+      * <br> 
+      */
+     public String getNewLine();
+     /**
+      *  The end-of-line sequence of characters to be used in the XML being 
+      * written out. Any string is supported, but XML treats only a certain 
+      * set of characters sequence as end-of-line (See section 2.11, 
+      * "End-of-Line Handling" in [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>], if the 
+      * serialized content is XML 1.0 or section 2.11, "End-of-Line Handling" 
+      * in [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>], if the 
+      * serialized content is XML 1.1). Using other character sequences than 
+      * the recommended ones can result in a document that is either not 
+      * serializable or not well-formed). 
+      * <br> On retrieval, the default value of this attribute is the 
+      * implementation specific default end-of-line sequence. DOM 
+      * implementations should choose the default to match the usual 
+      * convention for text files in the environment being used. 
+      * Implementations must choose a default sequence that matches one of 
+      * those allowed by XML 1.0 or XML 1.1, depending on the serialized 
+      * content. Setting this attribute to <code>null</code> will reset its 
+      * value to the default value. 
+      * <br> 
+      */
+     public void setNewLine(String newLine);
+ 
+     /**
+      *  When the application provides a filter, the serializer will call out 
+      * to the filter before serializing each Node. The filter implementation 
+      * can choose to remove the node from the stream or to terminate the 
+      * serialization early. 
+      * <br> The filter is invoked after the operations requested by the 
+      * <code>DOMConfiguration</code> parameters have been applied. For 
+      * example, CDATA sections won't be passed to the filter if "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-cdata-sections'>
+      * cdata-sections</a>" is set to <code>false</code>. 
+      */
+     public LSSerializerFilter getFilter();
+     /**
+      *  When the application provides a filter, the serializer will call out 
+      * to the filter before serializing each Node. The filter implementation 
+      * can choose to remove the node from the stream or to terminate the 
+      * serialization early. 
+      * <br> The filter is invoked after the operations requested by the 
+      * <code>DOMConfiguration</code> parameters have been applied. For 
+      * example, CDATA sections won't be passed to the filter if "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-cdata-sections'>
+      * cdata-sections</a>" is set to <code>false</code>. 
+      */
+     public void setFilter(LSSerializerFilter filter);
+ 
+     /**
+      *  Serialize the specified node as described above in the general 
+      * description of the <code>LSSerializer</code> interface. The output is 
+      * written to the supplied <code>LSOutput</code>. 
+      * <br> When writing to a <code>LSOutput</code>, the encoding is found by 
+      * looking at the encoding information that is reachable through the 
+      * <code>LSOutput</code> and the item to be written (or its owner 
+      * document) in this order: 
+      * <ol>
+      * <li> <code>LSOutput.encoding</code>, 
+      * </li>
+      * <li> 
+      * <code>Document.inputEncoding</code>, 
+      * </li>
+      * <li> 
+      * <code>Document.xmlEncoding</code>. 
+      * </li>
+      * </ol>
+      * <br> If no encoding is reachable through the above properties, a 
+      * default encoding of "UTF-8" will be used. If the specified encoding 
+      * is not supported an "unsupported-encoding" fatal error is raised. 
+      * <br> If no output is specified in the <code>LSOutput</code>, a 
+      * "no-output-specified" fatal error is raised. 
+      * <br> The implementation is responsible of associating the appropriate 
+      * media type with the serialized data. 
+      * <br> When writing to a HTTP URI, a HTTP PUT is performed. When writing 
+      * to other types of URIs, the mechanism for writing the data to the URI 
+      * is implementation dependent. 
+      * @param nodeArg  The node to serialize. 
+      * @param destination The destination for the serialized DOM.
+      * @return  Returns <code>true</code> if <code>node</code> was 
+      *   successfully serialized. Return <code>false</code> in case the 
+      *   normal processing stopped but the implementation kept serializing 
+      *   the document; the result of the serialization being implementation 
+      *   dependent then. 
+      * @exception LSException
+      *    SERIALIZE_ERR: Raised if the <code>LSSerializer</code> was unable to 
+      *   serialize the node. DOM applications should attach a 
+      *   <code>DOMErrorHandler</code> using the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+      *   error-handler</a>" if they wish to get details on the error. 
+      */
+     public boolean write(Node nodeArg, 
+                          LSOutput destination)
+                          throws LSException;
+ 
+     /**
+      *  A convenience method that acts as if <code>LSSerializer.write</code> 
+      * was called with a <code>LSOutput</code> with no encoding specified 
+      * and <code>LSOutput.systemId</code> set to the <code>uri</code> 
+      * argument. 
+      * @param nodeArg  The node to serialize. 
+      * @param uri The URI to write to.
+      * @return  Returns <code>true</code> if <code>node</code> was 
+      *   successfully serialized. Return <code>false</code> in case the 
+      *   normal processing stopped but the implementation kept serializing 
+      *   the document; the result of the serialization being implementation 
+      *   dependent then. 
+      * @exception LSException
+      *    SERIALIZE_ERR: Raised if the <code>LSSerializer</code> was unable to 
+      *   serialize the node. DOM applications should attach a 
+      *   <code>DOMErrorHandler</code> using the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+      *   error-handler</a>" if they wish to get details on the error. 
+      */
+     public boolean writeToURI(Node nodeArg, 
+                               String uri)
+                               throws LSException;
+ 
+     /**
+      *  Serialize the specified node as described above in the general 
+      * description of the <code>LSSerializer</code> interface. The output is 
+      * written to a <code>DOMString</code> that is returned to the caller. 
+      * The encoding used is the encoding of the <code>DOMString</code> type, 
+      * i.e. UTF-16. Note that no Byte Order Mark is generated in a 
+      * <code>DOMString</code> object. 
+      * @param nodeArg  The node to serialize. 
+      * @return  Returns the serialized data. 
+      * @exception DOMException
+      *    DOMSTRING_SIZE_ERR: Raised if the resulting string is too long to 
+      *   fit in a <code>DOMString</code>. 
+      * @exception LSException
+      *    SERIALIZE_ERR: Raised if the <code>LSSerializer</code> was unable to 
+      *   serialize the node. DOM applications should attach a 
+      *   <code>DOMErrorHandler</code> using the parameter "<a href='http://www.w3.org/TR/DOM-Level-3-Core/core.html#parameter-error-handler'>
+      *   error-handler</a>" if they wish to get details on the error. 
+      */
+     public String writeToString(Node nodeArg)
+                                 throws DOMException, LSException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.ls;
+ 
+ import org.w3c.dom.traversal.NodeFilter;
+ 
+ /**
+  *  <code>LSSerializerFilter</code>s provide applications the ability to 
+  * examine nodes as they are being serialized and decide what nodes should 
+  * be serialized or not. The <code>LSSerializerFilter</code> interface is 
+  * based on the <code>NodeFilter</code> interface defined in [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>DOM Level 2 Traversal and      Range</a>]
+  * . 
+  * <p> <code>Document</code>, <code>DocumentType</code>, 
+  * <code>DocumentFragment</code>, <code>Notation</code>, <code>Entity</code>
+  * , and children of <code>Attr</code> nodes are not passed to the filter. 
+  * The child nodes of an <code>EntityReference</code> node are only passed 
+  * to the filter if the <code>EntityReference</code> node is skipped by the 
+  * method <code>LSParserFilter.acceptNode()</code>. 
+  * <p> When serializing an <code>Element</code>, the element is passed to the 
+  * filter before any of its attributes are passed to the filter. Namespace 
+  * declaration attributes, and default attributes (except in the case when "
+  * discard-default-content" is set to <code>false</code>), are never passed 
+  * to the filter. 
+  * <p> The result of any attempt to modify a node passed to a 
+  * <code>LSSerializerFilter</code> is implementation dependent. 
+  * <p> DOM applications must not raise exceptions in a filter. The effect of 
+  * throwing exceptions from a filter is DOM implementation dependent. 
+  * <p> For efficiency, a node passed to the filter may not be the same as the 
+  * one that is actually in the tree. And the actual node (node object 
+  * identity) may be reused during the process of filtering and serializing a 
+  * document. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407'>Document Object Model (DOM) Level 3 Load
+ and Save Specification</a>.
+  */
+ public interface LSSerializerFilter extends NodeFilter {
+     /**
+      *  Tells the <code>LSSerializer</code> what types of nodes to show to the 
+      * filter. If a node is not shown to the filter using this attribute, it 
+      * is automatically serialized. See <code>NodeFilter</code> for 
+      * definition of the constants. The constants <code>SHOW_DOCUMENT</code>
+      * , <code>SHOW_DOCUMENT_TYPE</code>, <code>SHOW_DOCUMENT_FRAGMENT</code>
+      * , <code>SHOW_NOTATION</code>, and <code>SHOW_ENTITY</code> are 
+      * meaningless here, such nodes will never be passed to a 
+      * <code>LSSerializerFilter</code>. 
+      * <br> Unlike [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>DOM Level 2 Traversal and      Range</a>]
+      * , the <code>SHOW_ATTRIBUTE</code> constant indicates that the 
+      * <code>Attr</code> nodes are shown and passed to the filter. 
+      * <br> The constants used here are defined in [<a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>DOM Level 2 Traversal and      Range</a>]
+      * . 
+      */
+     public int getWhatToShow();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,33 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.ranges;
+ 
+ /**
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface DocumentRange {
+     /**
+      * This interface can be obtained from the object implementing the 
+      * <code>Document</code> interface using binding-specific casting 
+      * methods.
+      * @return The initial state of the Range returned from this method is 
+      *   such that both of its boundary-points are positioned at the 
+      *   beginning of the corresponding Document, before any content. The 
+      *   Range returned can only be used to select content associated with 
+      *   this Document, or with DocumentFragments and Attrs for which this 
+      *   Document is the <code>ownerDocument</code>.
+      */
+     public Range createRange();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/Range.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/Range.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/Range.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/Range.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,416 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.ranges;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.DocumentFragment;
+ 
+ /**
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface Range {
+     /**
+      * Node within which the Range begins 
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public Node getStartContainer()
+                        throws DOMException;
+ 
+     /**
+      * Offset within the starting node of the Range. 
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public int getStartOffset()
+                        throws DOMException;
+ 
+     /**
+      * Node within which the Range ends 
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public Node getEndContainer()
+                        throws DOMException;
+ 
+     /**
+      * Offset within the ending node of the Range. 
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public int getEndOffset()
+                        throws DOMException;
+ 
+     /**
+      * TRUE if the Range is collapsed 
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public boolean getCollapsed()
+                        throws DOMException;
+ 
+     /**
+      * The deepest common ancestor container of the Range's two 
+      * boundary-points.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public Node getCommonAncestorContainer()
+                        throws DOMException;
+ 
+     /**
+      * Sets the attributes describing the start of the Range. 
+      * @param refNode The <code>refNode</code> value. This parameter must be 
+      *   different from <code>null</code>.
+      * @param offset The <code>startOffset</code> value. 
+      * @exception RangeException
+      *   INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor 
+      *   of <code>refNode</code> is an Entity, Notation, or DocumentType 
+      *   node.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if <code>offset</code> is negative or greater 
+      *   than the number of child units in <code>refNode</code>. Child units 
+      *   are 16-bit units if <code>refNode</code> is a type of CharacterData 
+      *   node (e.g., a Text or Comment node) or a ProcessingInstruction 
+      *   node. Child units are Nodes in all other cases.
+      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already 
+      *   been invoked on this object.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created 
+      *   from a different document than the one that created this range.
+      */
+     public void setStart(Node refNode, 
+                          int offset)
+                          throws RangeException, DOMException;
+ 
+     /**
+      * Sets the attributes describing the end of a Range.
+      * @param refNode The <code>refNode</code> value. This parameter must be 
+      *   different from <code>null</code>.
+      * @param offset The <code>endOffset</code> value. 
+      * @exception RangeException
+      *   INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor 
+      *   of <code>refNode</code> is an Entity, Notation, or DocumentType 
+      *   node.
+      * @exception DOMException
+      *   INDEX_SIZE_ERR: Raised if <code>offset</code> is negative or greater 
+      *   than the number of child units in <code>refNode</code>. Child units 
+      *   are 16-bit units if <code>refNode</code> is a type of CharacterData 
+      *   node (e.g., a Text or Comment node) or a ProcessingInstruction 
+      *   node. Child units are Nodes in all other cases.
+      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already 
+      *   been invoked on this object.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created 
+      *   from a different document than the one that created this range.
+      */
+     public void setEnd(Node refNode, 
+                        int offset)
+                        throws RangeException, DOMException;
+ 
+     /**
+      * Sets the start position to be before a node
+      * @param refNode Range starts before <code>refNode</code> 
+      * @exception RangeException
+      *   INVALID_NODE_TYPE_ERR: Raised if the root container of 
+      *   <code>refNode</code> is not an Attr, Document, or DocumentFragment 
+      *   node or if <code>refNode</code> is a Document, DocumentFragment, 
+      *   Attr, Entity, or Notation node.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created 
+      *   from a different document than the one that created this range.
+      */
+     public void setStartBefore(Node refNode)
+                                throws RangeException, DOMException;
+ 
+     /**
+      * Sets the start position to be after a node
+      * @param refNode Range starts after <code>refNode</code> 
+      * @exception RangeException
+      *   INVALID_NODE_TYPE_ERR: Raised if the root container of 
+      *   <code>refNode</code> is not an Attr, Document, or DocumentFragment 
+      *   node or if <code>refNode</code> is a Document, DocumentFragment, 
+      *   Attr, Entity, or Notation node.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created 
+      *   from a different document than the one that created this range.
+      */
+     public void setStartAfter(Node refNode)
+                               throws RangeException, DOMException;
+ 
+     /**
+      * Sets the end position to be before a node. 
+      * @param refNode Range ends before <code>refNode</code> 
+      * @exception RangeException
+      *   INVALID_NODE_TYPE_ERR: Raised if the root container of 
+      *   <code>refNode</code> is not an Attr, Document, or DocumentFragment 
+      *   node or if <code>refNode</code> is a Document, DocumentFragment, 
+      *   Attr, Entity, or Notation node.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created 
+      *   from a different document than the one that created this range.
+      */
+     public void setEndBefore(Node refNode)
+                              throws RangeException, DOMException;
+ 
+     /**
+      * Sets the end of a Range to be after a node 
+      * @param refNode Range ends after <code>refNode</code>. 
+      * @exception RangeException
+      *   INVALID_NODE_TYPE_ERR: Raised if the root container of 
+      *   <code>refNode</code> is not an Attr, Document or DocumentFragment 
+      *   node or if <code>refNode</code> is a Document, DocumentFragment, 
+      *   Attr, Entity, or Notation node.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created 
+      *   from a different document than the one that created this range.
+      */
+     public void setEndAfter(Node refNode)
+                             throws RangeException, DOMException;
+ 
+     /**
+      * Collapse a Range onto one of its boundary-points 
+      * @param toStart If TRUE, collapses the Range onto its start; if FALSE, 
+      *   collapses it onto its end. 
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public void collapse(boolean toStart)
+                          throws DOMException;
+ 
+     /**
+      * Select a node and its contents 
+      * @param refNode The node to select. 
+      * @exception RangeException
+      *   INVALID_NODE_TYPE_ERR: Raised if an ancestor of <code>refNode</code> 
+      *   is an Entity, Notation or DocumentType node or if 
+      *   <code>refNode</code> is a Document, DocumentFragment, Attr, Entity, 
+      *   or Notation node.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created 
+      *   from a different document than the one that created this range.
+      */
+     public void selectNode(Node refNode)
+                            throws RangeException, DOMException;
+ 
+     /**
+      * Select the contents within a node 
+      * @param refNode Node to select from 
+      * @exception RangeException
+      *   INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor 
+      *   of <code>refNode</code> is an Entity, Notation or DocumentType node.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created 
+      *   from a different document than the one that created this range.
+      */
+     public void selectNodeContents(Node refNode)
+                                    throws RangeException, DOMException;
+ 
+     // CompareHow
+     /**
+      * Compare start boundary-point of <code>sourceRange</code> to start 
+      * boundary-point of Range on which <code>compareBoundaryPoints</code> 
+      * is invoked.
+      */
+     public static final short START_TO_START            = 0;
+     /**
+      * Compare start boundary-point of <code>sourceRange</code> to end 
+      * boundary-point of Range on which <code>compareBoundaryPoints</code> 
+      * is invoked.
+      */
+     public static final short START_TO_END              = 1;
+     /**
+      * Compare end boundary-point of <code>sourceRange</code> to end 
+      * boundary-point of Range on which <code>compareBoundaryPoints</code> 
+      * is invoked.
+      */
+     public static final short END_TO_END                = 2;
+     /**
+      * Compare end boundary-point of <code>sourceRange</code> to start 
+      * boundary-point of Range on which <code>compareBoundaryPoints</code> 
+      * is invoked.
+      */
+     public static final short END_TO_START              = 3;
+ 
+     /**
+      * Compare the boundary-points of two Ranges in a document.
+      * @param how A code representing the type of comparison, as defined 
+      *   above.
+      * @param sourceRange The <code>Range</code> on which this current 
+      *   <code>Range</code> is compared to.
+      * @return  -1, 0 or 1 depending on whether the corresponding 
+      *   boundary-point of the Range is respectively before, equal to, or 
+      *   after the corresponding boundary-point of <code>sourceRange</code>. 
+      * @exception DOMException
+      *   WRONG_DOCUMENT_ERR: Raised if the two Ranges are not in the same 
+      *   Document or DocumentFragment.
+      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already 
+      *   been invoked on this object.
+      */
+     public short compareBoundaryPoints(short how, 
+                                        Range sourceRange)
+                                        throws DOMException;
+ 
+     /**
+      * Removes the contents of a Range from the containing document or 
+      * document fragment without returning a reference to the removed 
+      * content.  
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the content of 
+      *   the Range is read-only or any of the nodes that contain any of the 
+      *   content of the Range are read-only.
+      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already 
+      *   been invoked on this object.
+      */
+     public void deleteContents()
+                                throws DOMException;
+ 
+     /**
+      * Moves the contents of a Range from the containing document or document 
+      * fragment to a new DocumentFragment. 
+      * @return A DocumentFragment containing the extracted contents. 
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the content of 
+      *   the Range is read-only or any of the nodes which contain any of the 
+      *   content of the Range are read-only.
+      *   <br>HIERARCHY_REQUEST_ERR: Raised if a DocumentType node would be 
+      *   extracted into the new DocumentFragment.
+      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already 
+      *   been invoked on this object.
+      */
+     public DocumentFragment extractContents()
+                                             throws DOMException;
+ 
+     /**
+      * Duplicates the contents of a Range 
+      * @return A DocumentFragment that contains content equivalent to this 
+      *   Range.
+      * @exception DOMException
+      *   HIERARCHY_REQUEST_ERR: Raised if a DocumentType node would be 
+      *   extracted into the new DocumentFragment.
+      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already 
+      *   been invoked on this object.
+      */
+     public DocumentFragment cloneContents()
+                                           throws DOMException;
+ 
+     /**
+      * Inserts a node into the Document or DocumentFragment at the start of 
+      * the Range. If the container is a Text node, this will be split at the 
+      * start of the Range (as if the Text node's splitText method was 
+      * performed at the insertion point) and the insertion will occur 
+      * between the two resulting Text nodes. Adjacent Text nodes will not be 
+      * automatically merged. If the node to be inserted is a 
+      * DocumentFragment node, the children will be inserted rather than the 
+      * DocumentFragment node itself.
+      * @param newNode The node to insert at the start of the Range 
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if an ancestor container of the 
+      *   start of the Range is read-only.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>newNode</code> and the 
+      *   container of the start of the Range were not created from the same 
+      *   document.
+      *   <br>HIERARCHY_REQUEST_ERR: Raised if the container of the start of 
+      *   the Range is of a type that does not allow children of the type of 
+      *   <code>newNode</code> or if <code>newNode</code> is an ancestor of 
+      *   the container.
+      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already 
+      *   been invoked on this object.
+      * @exception RangeException
+      *   INVALID_NODE_TYPE_ERR: Raised if <code>newNode</code> is an Attr, 
+      *   Entity, Notation, or Document node.
+      */
+     public void insertNode(Node newNode)
+                            throws DOMException, RangeException;
+ 
+     /**
+      * Reparents the contents of the Range to the given node and inserts the 
+      * node at the position of the start of the Range. 
+      * @param newParent The node to surround the contents with. 
+      * @exception DOMException
+      *   NO_MODIFICATION_ALLOWED_ERR: Raised if an ancestor container of 
+      *   either boundary-point of the Range is read-only.
+      *   <br>WRONG_DOCUMENT_ERR: Raised if <code> newParent</code> and the 
+      *   container of the start of the Range were not created from the same 
+      *   document.
+      *   <br>HIERARCHY_REQUEST_ERR: Raised if the container of the start of 
+      *   the Range is of a type that does not allow children of the type of 
+      *   <code>newParent</code> or if <code>newParent</code> is an ancestor 
+      *   of the container or if <code>node</code> would end up with a child 
+      *   node of a type not allowed by the type of <code>node</code>.
+      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already 
+      *   been invoked on this object.
+      * @exception RangeException
+      *   BAD_BOUNDARYPOINTS_ERR: Raised if the Range partially selects a 
+      *   non-text node.
+      *   <br>INVALID_NODE_TYPE_ERR: Raised if <code> node</code> is an Attr, 
+      *   Entity, DocumentType, Notation, Document, or DocumentFragment node.
+      */
+     public void surroundContents(Node newParent)
+                                  throws DOMException, RangeException;
+ 
+     /**
+      * Produces a new Range whose boundary-points are equal to the 
+      * boundary-points of the Range. 
+      * @return The duplicated Range. 
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public Range cloneRange()
+                             throws DOMException;
+ 
+     /**
+      * Returns the contents of a Range as a string. This string contains only 
+      * the data characters, not any markup. 
+      * @return The contents of the Range.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public String toString()
+                            throws DOMException;
+ 
+     /**
+      * Called to indicate that the Range is no longer in use and that the 
+      * implementation may relinquish any resources associated with this 
+      * Range. Subsequent calls to any methods or attribute getters on this 
+      * Range will result in a <code>DOMException</code> being thrown with an 
+      * error code of <code>INVALID_STATE_ERR</code>.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been 
+      *   invoked on this object.
+      */
+     public void detach()
+                        throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/RangeException.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/RangeException.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/RangeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/ranges/RangeException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,39 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.ranges;
+ 
+ /**
+  * Range operations may throw a <code>RangeException</code> as specified in 
+  * their method descriptions.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>.
+  * @since DOM Level 2
+  */
+ public class RangeException extends RuntimeException {
+     public RangeException(short code, String message) {
+        super(message);
+        this.code = code;
+     }
+     public short   code;
+     // RangeExceptionCode
+     /**
+      * If the boundary-points of a Range do not meet specific requirements.
+      */
+     public static final short BAD_BOUNDARYPOINTS_ERR    = 1;
+     /**
+      * If the container of an boundary-point of a Range is being set to either 
+      * a node of an invalid type or a node with an ancestor of an invalid 
+      * type.
+      */
+     public static final short INVALID_NODE_TYPE_ERR     = 2;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,34 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.stylesheets;
+ 
+ /**
+  *  The <code>DocumentStyle</code> interface provides a mechanism by which the 
+  * style sheets embedded in a document can be retrieved. The expectation is 
+  * that an instance of the <code>DocumentStyle</code> interface can be 
+  * obtained by using binding-specific casting methods on an instance of the 
+  * <code>Document</code> interface. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface DocumentStyle {
+     /**
+      *  A list containing all the style sheets explicitly linked into or 
+      * embedded in a document. For HTML documents, this includes external 
+      * style sheets, included via the HTML  LINK element, and inline  STYLE 
+      * elements. In XML, this includes external style sheets, included via 
+      * style sheet processing instructions (see [XML StyleSheet]). 
+      */
+     public StyleSheetList getStyleSheets();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.stylesheets;
+ 
+ /**
+  *  The <code>LinkStyle</code> interface provides a mechanism by which a style 
+  * sheet can be retrieved from the node responsible for linking it into a 
+  * document. An instance of the <code>LinkStyle</code> interface can be 
+  * obtained using binding-specific casting methods on an instance of a 
+  * linking node (<code>HTMLLinkElement</code>, <code>HTMLStyleElement</code> 
+  * or <code>ProcessingInstruction</code> in DOM Level 2). 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface LinkStyle {
+     /**
+      *  The style sheet. 
+      */
+     public StyleSheet getSheet();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.stylesheets;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The <code>MediaList</code> interface provides the abstraction of an 
+  * ordered collection of media, without defining or constraining how this 
+  * collection is implemented. An empty list is the same as a list that 
+  * contains the medium <code>"all"</code>. 
+  * <p> The items in the <code>MediaList</code> are accessible via an integral 
+  * index, starting from 0. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface MediaList {
+     /**
+      *  The parsable textual representation of the media list. This is a 
+      * comma-separated list of media. 
+      */
+     public String getMediaText();
+     /**
+      *  The parsable textual representation of the media list. This is a 
+      * comma-separated list of media. 
+      * @exception DOMException
+      *   SYNTAX_ERR: Raised if the specified string value has a syntax error 
+      *   and is unparsable.
+      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this media list is 
+      *   readonly.
+      */
+     public void setMediaText(String mediaText)
+                              throws DOMException;
+ 
+     /**
+      *  The number of media in the list. The range of valid media is 
+      * <code>0</code> to <code>length-1</code> inclusive. 
+      */
+     public int getLength();
+ 
+     /**
+      *  Returns the <code>index</code>th in the list. If <code>index</code> is 
+      * greater than or equal to the number of media in the list, this 
+      * returns <code>null</code>. 
+      * @param index  Index into the collection. 
+      * @return  The medium at the <code>index</code>th position in the 
+      *   <code>MediaList</code>, or <code>null</code> if that is not a valid 
+      *   index. 
+      */
+     public String item(int index);
+ 
+     /**
+      *  Deletes the medium indicated by <code>oldMedium</code> from the list. 
+      * @param oldMedium The medium to delete in the media list.
+      * @exception DOMException
+      *    NO_MODIFICATION_ALLOWED_ERR: Raised if this list is readonly. 
+      *   <br> NOT_FOUND_ERR: Raised if <code>oldMedium</code> is not in the 
+      *   list. 
+      */
+     public void deleteMedium(String oldMedium)
+                              throws DOMException;
+ 
+     /**
+      *  Adds the medium <code>newMedium</code> to the end of the list. If the 
+      * <code>newMedium</code> is already used, it is first removed. 
+      * @param newMedium The new medium to add.
+      * @exception DOMException
+      *    INVALID_CHARACTER_ERR: If the medium contains characters that are 
+      *   invalid in the underlying style language. 
+      *   <br> NO_MODIFICATION_ALLOWED_ERR: Raised if this list is readonly. 
+      */
+     public void appendMedium(String newMedium)
+                              throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,103 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.stylesheets;
+ 
+ import org.w3c.dom.Node;
+ 
+ /**
+  *  The <code>StyleSheet</code> interface is the abstract base interface for 
+  * any type of style sheet. It represents a single style sheet associated 
+  * with a structured document. In HTML, the StyleSheet interface represents 
+  * either an external style sheet, included via the HTML  LINK element, or 
+  * an inline  STYLE element. In XML, this interface represents an external 
+  * style sheet, included via a style sheet processing instruction. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface StyleSheet {
+     /**
+      *  This specifies the style sheet language for this style sheet. The 
+      * style sheet language is specified as a content type (e.g. 
+      * "text/css"). The content type is often specified in the 
+      * <code>ownerNode</code>. Also see the type attribute definition for 
+      * the <code>LINK</code> element in HTML 4.0, and the type 
+      * pseudo-attribute for the XML style sheet processing instruction. 
+      */
+     public String getType();
+ 
+     /**
+      *  <code>false</code> if the style sheet is applied to the document. 
+      * <code>true</code> if it is not. Modifying this attribute may cause a 
+      * new resolution of style for the document. A stylesheet only applies 
+      * if both an appropriate medium definition is present and the disabled 
+      * attribute is false. So, if the media doesn't apply to the current 
+      * user agent, the <code>disabled</code> attribute is ignored. 
+      */
+     public boolean getDisabled();
+     /**
+      *  <code>false</code> if the style sheet is applied to the document. 
+      * <code>true</code> if it is not. Modifying this attribute may cause a 
+      * new resolution of style for the document. A stylesheet only applies 
+      * if both an appropriate medium definition is present and the disabled 
+      * attribute is false. So, if the media doesn't apply to the current 
+      * user agent, the <code>disabled</code> attribute is ignored. 
+      */
+     public void setDisabled(boolean disabled);
+ 
+     /**
+      *  The node that associates this style sheet with the document. For HTML, 
+      * this may be the corresponding <code>LINK</code> or <code>STYLE</code> 
+      * element. For XML, it may be the linking processing instruction. For 
+      * style sheets that are included by other style sheets, the value of 
+      * this attribute is <code>null</code>. 
+      */
+     public Node getOwnerNode();
+ 
+     /**
+      *  For style sheet languages that support the concept of style sheet 
+      * inclusion, this attribute represents the including style sheet, if 
+      * one exists. If the style sheet is a top-level style sheet, or the 
+      * style sheet language does not support inclusion, the value of this 
+      * attribute is <code>null</code>. 
+      */
+     public StyleSheet getParentStyleSheet();
+ 
+     /**
+      *  If the style sheet is a linked style sheet, the value of its attribute 
+      * is its location. For inline style sheets, the value of this attribute 
+      * is <code>null</code>. See the href attribute definition for the 
+      * <code>LINK</code> element in HTML 4.0, and the href pseudo-attribute 
+      * for the XML style sheet processing instruction. 
+      */
+     public String getHref();
+ 
+     /**
+      *  The advisory title. The title is often specified in the 
+      * <code>ownerNode</code>. See the title attribute definition for the 
+      * <code>LINK</code> element in HTML 4.0, and the title pseudo-attribute 
+      * for the XML style sheet processing instruction. 
+      */
+     public String getTitle();
+ 
+     /**
+      *  The intended destination media for style information. The media is 
+      * often specified in the <code>ownerNode</code>. If no media has been 
+      * specified, the <code>MediaList</code> will be empty. See the media 
+      * attribute definition for the <code>LINK</code> element in HTML 4.0, 
+      * and the media pseudo-attribute for the XML style sheet processing 
+      * instruction . Modifying the media list may cause a change to the 
+      * attribute <code>disabled</code>. 
+      */
+     public MediaList getMedia();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,42 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.stylesheets;
+ 
+ /**
+  * The <code>StyleSheetList</code> interface provides the abstraction of an 
+  * ordered collection of style sheets. 
+  * <p> The items in the <code>StyleSheetList</code> are accessible via an 
+  * integral index, starting from 0. 
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113'>Document Object Model (DOM) Level 2 Style Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface StyleSheetList {
+     /**
+      *  The number of <code>StyleSheets</code> in the list. The range of valid 
+      * child stylesheet indices is <code>0</code> to <code>length-1</code> 
+      * inclusive. 
+      */
+     public int getLength();
+ 
+     /**
+      *  Used to retrieve a style sheet by ordinal index. If index is greater 
+      * than or equal to the number of style sheets in the list, this returns 
+      * <code>null</code>. 
+      * @param index Index into the collection
+      * @return The style sheet at the <code>index</code> position in the 
+      *   <code>StyleSheetList</code>, or <code>null</code> if that is not a 
+      *   valid index. 
+      */
+     public StyleSheet item(int index);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,93 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.traversal;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * <code>DocumentTraversal</code> contains methods that create 
+  * <code>NodeIterators</code> and <code>TreeWalkers</code> to traverse a 
+  * node and its children in document order (depth first, pre-order 
+  * traversal, which is equivalent to the order in which the start tags occur 
+  * in the text representation of the document). In DOMs which support the 
+  * Traversal feature, <code>DocumentTraversal</code> will be implemented by 
+  * the same objects that implement the Document interface.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface DocumentTraversal {
+     /**
+      * Create a new <code>NodeIterator</code> over the subtree rooted at the 
+      * specified node.
+      * @param root The node which will be iterated together with its 
+      *   children. The <code>NodeIterator</code> is initially positioned 
+      *   just before this node. The <code>whatToShow</code> flags and the 
+      *   filter, if any, are not considered when setting this position. The 
+      *   root must not be <code>null</code>.
+      * @param whatToShow This flag specifies which node types may appear in 
+      *   the logical view of the tree presented by the 
+      *   <code>NodeIterator</code>. See the description of 
+      *   <code>NodeFilter</code> for the set of possible <code>SHOW_</code> 
+      *   values.These flags can be combined using <code>OR</code>.
+      * @param filter The <code>NodeFilter</code> to be used with this 
+      *   <code>NodeIterator</code>, or <code>null</code> to indicate no 
+      *   filter.
+      * @param entityReferenceExpansion The value of this flag determines 
+      *   whether entity reference nodes are expanded.
+      * @return The newly created <code>NodeIterator</code>.
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: Raised if the specified <code>root</code> is 
+      *   <code>null</code>.
+      */
+     public NodeIterator createNodeIterator(Node root, 
+                                            int whatToShow, 
+                                            NodeFilter filter, 
+                                            boolean entityReferenceExpansion)
+                                            throws DOMException;
+ 
+     /**
+      * Create a new <code>TreeWalker</code> over the subtree rooted at the 
+      * specified node.
+      * @param root The node which will serve as the <code>root</code> for the 
+      *   <code>TreeWalker</code>. The <code>whatToShow</code> flags and the 
+      *   <code>NodeFilter</code> are not considered when setting this value; 
+      *   any node type will be accepted as the <code>root</code>. The 
+      *   <code>currentNode</code> of the <code>TreeWalker</code> is 
+      *   initialized to this node, whether or not it is visible. The 
+      *   <code>root</code> functions as a stopping point for traversal 
+      *   methods that look upward in the document structure, such as 
+      *   <code>parentNode</code> and nextNode. The <code>root</code> must 
+      *   not be <code>null</code>.
+      * @param whatToShow This flag specifies which node types may appear in 
+      *   the logical view of the tree presented by the 
+      *   <code>TreeWalker</code>. See the description of 
+      *   <code>NodeFilter</code> for the set of possible <code>SHOW_</code> 
+      *   values.These flags can be combined using <code>OR</code>.
+      * @param filter The <code>NodeFilter</code> to be used with this 
+      *   <code>TreeWalker</code>, or <code>null</code> to indicate no filter.
+      * @param entityReferenceExpansion If this flag is false, the contents of 
+      *   <code>EntityReference</code> nodes are not presented in the logical 
+      *   view.
+      * @return The newly created <code>TreeWalker</code>.
+      * @exception DOMException
+      *    NOT_SUPPORTED_ERR: Raised if the specified <code>root</code> is 
+      *   <code>null</code>.
+      */
+     public TreeWalker createTreeWalker(Node root, 
+                                        int whatToShow, 
+                                        NodeFilter filter, 
+                                        boolean entityReferenceExpansion)
+                                        throws DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,144 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.traversal;
+ 
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Filters are objects that know how to "filter out" nodes. If a 
+  * <code>NodeIterator</code> or <code>TreeWalker</code> is given a 
+  * <code>NodeFilter</code>, it applies the filter before it returns the next 
+  * node. If the filter says to accept the node, the traversal logic returns 
+  * it; otherwise, traversal looks for the next node and pretends that the 
+  * node that was rejected was not there.
+  * <p>The DOM does not provide any filters. <code>NodeFilter</code> is just an 
+  * interface that users can implement to provide their own filters. 
+  * <p><code>NodeFilters</code> do not need to know how to traverse from node 
+  * to node, nor do they need to know anything about the data structure that 
+  * is being traversed. This makes it very easy to write filters, since the 
+  * only thing they have to know how to do is evaluate a single node. One 
+  * filter may be used with a number of different kinds of traversals, 
+  * encouraging code reuse.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface NodeFilter {
+     // Constants returned by acceptNode
+     /**
+      * Accept the node. Navigation methods defined for 
+      * <code>NodeIterator</code> or <code>TreeWalker</code> will return this 
+      * node.
+      */
+     public static final short FILTER_ACCEPT             = 1;
+     /**
+      * Reject the node. Navigation methods defined for 
+      * <code>NodeIterator</code> or <code>TreeWalker</code> will not return 
+      * this node. For <code>TreeWalker</code>, the children of this node 
+      * will also be rejected. <code>NodeIterators</code> treat this as a 
+      * synonym for <code>FILTER_SKIP</code>.
+      */
+     public static final short FILTER_REJECT             = 2;
+     /**
+      * Skip this single node. Navigation methods defined for 
+      * <code>NodeIterator</code> or <code>TreeWalker</code> will not return 
+      * this node. For both <code>NodeIterator</code> and 
+      * <code>TreeWalker</code>, the children of this node will still be 
+      * considered. 
+      */
+     public static final short FILTER_SKIP               = 3;
+ 
+     // Constants for whatToShow
+     /**
+      * Show all <code>Nodes</code>.
+      */
+     public static final int SHOW_ALL                  = 0xFFFFFFFF;
+     /**
+      * Show <code>Element</code> nodes.
+      */
+     public static final int SHOW_ELEMENT              = 0x00000001;
+     /**
+      * Show <code>Attr</code> nodes. This is meaningful only when creating an 
+      * <code>NodeIterator</code> or <code>TreeWalker</code> with an 
+      * attribute node as its <code>root</code>; in this case, it means that 
+      * the attribute node will appear in the first position of the iteration 
+      * or traversal. Since attributes are never children of other nodes, 
+      * they do not appear when traversing over the document tree.
+      */
+     public static final int SHOW_ATTRIBUTE            = 0x00000002;
+     /**
+      * Show <code>Text</code> nodes.
+      */
+     public static final int SHOW_TEXT                 = 0x00000004;
+     /**
+      * Show <code>CDATASection</code> nodes.
+      */
+     public static final int SHOW_CDATA_SECTION        = 0x00000008;
+     /**
+      * Show <code>EntityReference</code> nodes.
+      */
+     public static final int SHOW_ENTITY_REFERENCE     = 0x00000010;
+     /**
+      * Show <code>Entity</code> nodes. This is meaningful only when creating 
+      * an <code>NodeIterator</code> or <code>TreeWalker</code> with an 
+      * <code>Entity</code> node as its <code>root</code>; in this case, it 
+      * means that the <code>Entity</code> node will appear in the first 
+      * position of the traversal. Since entities are not part of the 
+      * document tree, they do not appear when traversing over the document 
+      * tree.
+      */
+     public static final int SHOW_ENTITY               = 0x00000020;
+     /**
+      * Show <code>ProcessingInstruction</code> nodes.
+      */
+     public static final int SHOW_PROCESSING_INSTRUCTION = 0x00000040;
+     /**
+      * Show <code>Comment</code> nodes.
+      */
+     public static final int SHOW_COMMENT              = 0x00000080;
+     /**
+      * Show <code>Document</code> nodes.
+      */
+     public static final int SHOW_DOCUMENT             = 0x00000100;
+     /**
+      * Show <code>DocumentType</code> nodes.
+      */
+     public static final int SHOW_DOCUMENT_TYPE        = 0x00000200;
+     /**
+      * Show <code>DocumentFragment</code> nodes.
+      */
+     public static final int SHOW_DOCUMENT_FRAGMENT    = 0x00000400;
+     /**
+      * Show <code>Notation</code> nodes. This is meaningful only when creating 
+      * an <code>NodeIterator</code> or <code>TreeWalker</code> with a 
+      * <code>Notation</code> node as its <code>root</code>; in this case, it 
+      * means that the <code>Notation</code> node will appear in the first 
+      * position of the traversal. Since notations are not part of the 
+      * document tree, they do not appear when traversing over the document 
+      * tree.
+      */
+     public static final int SHOW_NOTATION             = 0x00000800;
+ 
+     /**
+      * Test whether a specified node is visible in the logical view of a 
+      * <code>TreeWalker</code> or <code>NodeIterator</code>. This function 
+      * will be called by the implementation of <code>TreeWalker</code> and 
+      * <code>NodeIterator</code>; it is not normally called directly from 
+      * user code. (Though you could do so if you wanted to use the same 
+      * filter to guide your own application logic.)
+      * @param n The node to check to see if it passes the filter or not.
+      * @return A constant to determine whether the node is accepted, 
+      *   rejected, or skipped, as defined above.
+      */
+     public short acceptNode(Node n);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.traversal;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * <code>NodeIterators</code> are used to step through a set of nodes, e.g. 
+  * the set of nodes in a <code>NodeList</code>, the document subtree 
+  * governed by a particular <code>Node</code>, the results of a query, or 
+  * any other set of nodes. The set of nodes to be iterated is determined by 
+  * the implementation of the <code>NodeIterator</code>. DOM Level 2 
+  * specifies a single <code>NodeIterator</code> implementation for 
+  * document-order traversal of a document subtree. Instances of these 
+  * <code>NodeIterators</code> are created by calling 
+  * <code>DocumentTraversal</code><code>.createNodeIterator()</code>.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface NodeIterator {
+     /**
+      * The root node of the <code>NodeIterator</code>, as specified when it 
+      * was created.
+      */
+     public Node getRoot();
+ 
+     /**
+      * This attribute determines which node types are presented via the 
+      * <code>NodeIterator</code>. The available set of constants is defined 
+      * in the <code>NodeFilter</code> interface.  Nodes not accepted by 
+      * <code>whatToShow</code> will be skipped, but their children may still 
+      * be considered. Note that this skip takes precedence over the filter, 
+      * if any. 
+      */
+     public int getWhatToShow();
+ 
+     /**
+      * The <code>NodeFilter</code> used to screen nodes.
+      */
+     public NodeFilter getFilter();
+ 
+     /**
+      *  The value of this flag determines whether the children of entity 
+      * reference nodes are visible to the <code>NodeIterator</code>. If 
+      * false, these children  and their descendants will be rejected. Note 
+      * that this rejection takes precedence over <code>whatToShow</code> and 
+      * the filter. Also note that this is currently the only situation where 
+      * <code>NodeIterators</code> may reject a complete subtree rather than 
+      * skipping individual nodes. 
+      * <br>
+      * <br> To produce a view of the document that has entity references 
+      * expanded and does not expose the entity reference node itself, use 
+      * the <code>whatToShow</code> flags to hide the entity reference node 
+      * and set <code>expandEntityReferences</code> to true when creating the 
+      * <code>NodeIterator</code>. To produce a view of the document that has 
+      * entity reference nodes but no entity expansion, use the 
+      * <code>whatToShow</code> flags to show the entity reference node and 
+      * set <code>expandEntityReferences</code> to false.
+      */
+     public boolean getExpandEntityReferences();
+ 
+     /**
+      * Returns the next node in the set and advances the position of the 
+      * <code>NodeIterator</code> in the set. After a 
+      * <code>NodeIterator</code> is created, the first call to 
+      * <code>nextNode()</code> returns the first node in the set.
+      * @return The next <code>Node</code> in the set being iterated over, or 
+      *   <code>null</code> if there are no more members in that set.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if this method is called after the 
+      *   <code>detach</code> method was invoked.
+      */
+     public Node nextNode()
+                          throws DOMException;
+ 
+     /**
+      * Returns the previous node in the set and moves the position of the 
+      * <code>NodeIterator</code> backwards in the set.
+      * @return The previous <code>Node</code> in the set being iterated over, 
+      *   or <code>null</code> if there are no more members in that set. 
+      * @exception DOMException
+      *   INVALID_STATE_ERR: Raised if this method is called after the 
+      *   <code>detach</code> method was invoked.
+      */
+     public Node previousNode()
+                              throws DOMException;
+ 
+     /**
+      * Detaches the <code>NodeIterator</code> from the set which it iterated 
+      * over, releasing any computational resources and placing the 
+      * <code>NodeIterator</code> in the INVALID state. After 
+      * <code>detach</code> has been invoked, calls to <code>nextNode</code> 
+      * or <code>previousNode</code> will raise the exception 
+      * INVALID_STATE_ERR.
+      */
+     public void detach();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,179 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.traversal;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * <code>TreeWalker</code> objects are used to navigate a document tree or 
+  * subtree using the view of the document defined by their 
+  * <code>whatToShow</code> flags and filter (if any). Any function which 
+  * performs navigation using a <code>TreeWalker</code> will automatically 
+  * support any view defined by a <code>TreeWalker</code>.
+  * <p>Omitting nodes from the logical view of a subtree can result in a 
+  * structure that is substantially different from the same subtree in the 
+  * complete, unfiltered document. Nodes that are siblings in the 
+  * <code>TreeWalker</code> view may be children of different, widely 
+  * separated nodes in the original view. For instance, consider a 
+  * <code>NodeFilter</code> that skips all nodes except for Text nodes and 
+  * the root node of a document. In the logical view that results, all text 
+  * nodes will be siblings and appear as direct children of the root node, no 
+  * matter how deeply nested the structure of the original document.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface TreeWalker {
+     /**
+      * The <code>root</code> node of the <code>TreeWalker</code>, as specified 
+      * when it was created.
+      */
+     public Node getRoot();
+ 
+     /**
+      * This attribute determines which node types are presented via the 
+      * <code>TreeWalker</code>. The available set of constants is defined in 
+      * the <code>NodeFilter</code> interface.  Nodes not accepted by 
+      * <code>whatToShow</code> will be skipped, but their children may still 
+      * be considered. Note that this skip takes precedence over the filter, 
+      * if any. 
+      */
+     public int getWhatToShow();
+ 
+     /**
+      * The filter used to screen nodes.
+      */
+     public NodeFilter getFilter();
+ 
+     /**
+      * The value of this flag determines whether the children of entity 
+      * reference nodes are visible to the <code>TreeWalker</code>. If false, 
+      * these children  and their descendants will be rejected. Note that 
+      * this rejection takes precedence over <code>whatToShow</code> and the 
+      * filter, if any. 
+      * <br> To produce a view of the document that has entity references 
+      * expanded and does not expose the entity reference node itself, use 
+      * the <code>whatToShow</code> flags to hide the entity reference node 
+      * and set <code>expandEntityReferences</code> to true when creating the 
+      * <code>TreeWalker</code>. To produce a view of the document that has 
+      * entity reference nodes but no entity expansion, use the 
+      * <code>whatToShow</code> flags to show the entity reference node and 
+      * set <code>expandEntityReferences</code> to false.
+      */
+     public boolean getExpandEntityReferences();
+ 
+     /**
+      * The node at which the <code>TreeWalker</code> is currently positioned.
+      * <br>Alterations to the DOM tree may cause the current node to no longer 
+      * be accepted by the <code>TreeWalker</code>'s associated filter. 
+      * <code>currentNode</code> may also be explicitly set to any node, 
+      * whether or not it is within the subtree specified by the 
+      * <code>root</code> node or would be accepted by the filter and 
+      * <code>whatToShow</code> flags. Further traversal occurs relative to 
+      * <code>currentNode</code> even if it is not part of the current view, 
+      * by applying the filters in the requested direction; if no traversal 
+      * is possible, <code>currentNode</code> is not changed. 
+      */
+     public Node getCurrentNode();
+     /**
+      * The node at which the <code>TreeWalker</code> is currently positioned.
+      * <br>Alterations to the DOM tree may cause the current node to no longer 
+      * be accepted by the <code>TreeWalker</code>'s associated filter. 
+      * <code>currentNode</code> may also be explicitly set to any node, 
+      * whether or not it is within the subtree specified by the 
+      * <code>root</code> node or would be accepted by the filter and 
+      * <code>whatToShow</code> flags. Further traversal occurs relative to 
+      * <code>currentNode</code> even if it is not part of the current view, 
+      * by applying the filters in the requested direction; if no traversal 
+      * is possible, <code>currentNode</code> is not changed. 
+      * @exception DOMException
+      *   NOT_SUPPORTED_ERR: Raised if an attempt is made to set 
+      *   <code>currentNode</code> to <code>null</code>.
+      */
+     public void setCurrentNode(Node currentNode)
+                          throws DOMException;
+ 
+     /**
+      * Moves to and returns the closest visible ancestor node of the current 
+      * node. If the search for <code>parentNode</code> attempts to step 
+      * upward from the <code>TreeWalker</code>'s <code>root</code> node, or 
+      * if it fails to find a visible ancestor node, this method retains the 
+      * current position and returns <code>null</code>.
+      * @return The new parent node, or <code>null</code> if the current node 
+      *   has no parent  in the <code>TreeWalker</code>'s logical view.  
+      */
+     public Node parentNode();
+ 
+     /**
+      * Moves the <code>TreeWalker</code> to the first visible child of the 
+      * current node, and returns the new node. If the current node has no 
+      * visible children, returns <code>null</code>, and retains the current 
+      * node.
+      * @return The new node, or <code>null</code> if the current node has no 
+      *   visible children  in the <code>TreeWalker</code>'s logical view.  
+      */
+     public Node firstChild();
+ 
+     /**
+      * Moves the <code>TreeWalker</code> to the last visible child of the 
+      * current node, and returns the new node. If the current node has no 
+      * visible children, returns <code>null</code>, and retains the current 
+      * node.
+      * @return The new node, or <code>null</code> if the current node has no 
+      *   children  in the <code>TreeWalker</code>'s logical view.  
+      */
+     public Node lastChild();
+ 
+     /**
+      * Moves the <code>TreeWalker</code> to the previous sibling of the 
+      * current node, and returns the new node. If the current node has no 
+      * visible previous sibling, returns <code>null</code>, and retains the 
+      * current node.
+      * @return The new node, or <code>null</code> if the current node has no 
+      *   previous sibling.  in the <code>TreeWalker</code>'s logical view.  
+      */
+     public Node previousSibling();
+ 
+     /**
+      * Moves the <code>TreeWalker</code> to the next sibling of the current 
+      * node, and returns the new node. If the current node has no visible 
+      * next sibling, returns <code>null</code>, and retains the current node.
+      * @return The new node, or <code>null</code> if the current node has no 
+      *   next sibling.  in the <code>TreeWalker</code>'s logical view.  
+      */
+     public Node nextSibling();
+ 
+     /**
+      * Moves the <code>TreeWalker</code> to the previous visible node in 
+      * document order relative to the current node, and returns the new 
+      * node. If the current node has no previous node,  or if the search for 
+      * <code>previousNode</code> attempts to step upward from the 
+      * <code>TreeWalker</code>'s <code>root</code> node,  returns 
+      * <code>null</code>, and retains the current node. 
+      * @return The new node, or <code>null</code> if the current node has no 
+      *   previous node  in the <code>TreeWalker</code>'s logical view.  
+      */
+     public Node previousNode();
+ 
+     /**
+      * Moves the <code>TreeWalker</code> to the next visible node in document 
+      * order relative to the current node, and returns the new node. If the 
+      * current node has no next node, or if the search for nextNode attempts 
+      * to step upward from the <code>TreeWalker</code>'s <code>root</code> 
+      * node, returns <code>null</code>, and retains the current node.
+      * @return The new node, or <code>null</code> if the current node has no 
+      *   next node  in the <code>TreeWalker</code>'s logical view.  
+      */
+     public Node nextNode();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/views/AbstractView.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/views/AbstractView.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/views/AbstractView.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/views/AbstractView.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,27 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.views;
+ 
+ /**
+  * A base interface that all views shall derive from.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Views-20001113'>Document Object Model (DOM) Level 2 Views Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface AbstractView {
+     /**
+      * The source <code>DocumentView</code> of which this is an 
+      * <code>AbstractView</code>.
+      */
+     public DocumentView getDocument();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/views/DocumentView.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/views/DocumentView.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/views/DocumentView.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/views/DocumentView.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,30 ----
+ /*
+  * Copyright (c) 2000 World Wide Web Consortium,
+  * (Massachusetts Institute of Technology, Institut National de
+  * Recherche en Informatique et en Automatique, Keio University). All
+  * Rights Reserved. This program is distributed under the W3C's Software
+  * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
+  */
+ 
+ package org.w3c.dom.views;
+ 
+ /**
+  * The <code>DocumentView</code> interface is implemented by 
+  * <code>Document</code> objects in DOM implementations supporting DOM 
+  * Views. It provides an attribute to retrieve the default view of a 
+  * document.
+  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Views-20001113'>Document Object Model (DOM) Level 2 Views Specification</a>.
+  * @since DOM Level 2
+  */
+ public interface DocumentView {
+     /**
+      * The default <code>AbstractView</code> for this <code>Document</code>, 
+      * or <code>null</code> if none available.
+      */
+     public AbstractView getDefaultView();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,134 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.xpath;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  *  The evaluation of XPath expressions is provided by 
+  * <code>XPathEvaluator</code>. In a DOM implementation which supports the 
+  * XPath 3.0 feature, as described above, the <code>XPathEvaluator</code> 
+  * interface will be implemented on the same object which implements the 
+  * <code>Document</code> interface permitting it to be obtained by the usual 
+  * binding-specific method such as casting or by using the DOM Level 3 
+  * getInterface method. In this case the implementation obtained from the 
+  * Document supports the XPath DOM module and is compatible with the XPath 
+  * 1.0 specification. 
+  * <p>Evaluation of expressions with specialized extension functions or 
+  * variables may not work in all implementations and is, therefore, not 
+  * portable. <code>XPathEvaluator</code> implementations may be available 
+  * from other sources that could provide specific support for specialized 
+  * extension functions or variables as would be defined by other 
+  * specifications. 
+  * <p>See also the <a href='http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226'>Document Object Model (DOM) Level 3 XPath Specification</a>.
+  */
+ public interface XPathEvaluator {
+     /**
+      * Creates a parsed XPath expression with resolved namespaces. This is 
+      * useful when an expression will be reused in an application since it 
+      * makes it possible to compile the expression string into a more 
+      * efficient internal form and preresolve all namespace prefixes which 
+      * occur within the expression.
+      * @param expression The XPath expression string to be parsed.
+      * @param resolver The <code>resolver</code> permits translation of all 
+      *   prefixes, including the <code>xml</code> namespace prefix, within 
+      *   the XPath expression into appropriate namespace URIs. If this is 
+      *   specified as <code>null</code>, any namespace prefix within the 
+      *   expression will result in <code>DOMException</code> being thrown 
+      *   with the code <code>NAMESPACE_ERR</code>.
+      * @return The compiled form of the XPath expression.
+      * @exception XPathException
+      *   INVALID_EXPRESSION_ERR: Raised if the expression is not legal 
+      *   according to the rules of the <code>XPathEvaluator</code>.
+      * @exception DOMException
+      *   NAMESPACE_ERR: Raised if the expression contains namespace prefixes 
+      *   which cannot be resolved by the specified 
+      *   <code>XPathNSResolver</code>.
+      */
+     public XPathExpression createExpression(String expression, 
+                                             XPathNSResolver resolver)
+                                             throws XPathException, DOMException;
+ 
+     /**
+      * Adapts any DOM node to resolve namespaces so that an XPath expression 
+      * can be easily evaluated relative to the context of the node where it 
+      * appeared within the document. This adapter works like the DOM Level 3 
+      * method <code>lookupNamespaceURI</code> on nodes in resolving the 
+      * namespaceURI from a given prefix using the current information 
+      * available in the node's hierarchy at the time lookupNamespaceURI is 
+      * called. also correctly resolving the implicit xml prefix.
+      * @param nodeResolver The node to be used as a context for namespace 
+      *   resolution.
+      * @return <code>XPathNSResolver</code> which resolves namespaces with 
+      *   respect to the definitions in scope for a specified node.
+      */
+     public XPathNSResolver createNSResolver(Node nodeResolver);
+ 
+     /**
+      * Evaluates an XPath expression string and returns a result of the 
+      * specified type if possible.
+      * @param expression The XPath expression string to be parsed and 
+      *   evaluated.
+      * @param contextNode The <code>context</code> is context node for the 
+      *   evaluation of this XPath expression. If the XPathEvaluator was 
+      *   obtained by casting the <code>Document</code> then this must be 
+      *   owned by the same document and must be a <code>Document</code>, 
+      *   <code>Element</code>, <code>Attribute</code>, <code>Text</code>, 
+      *   <code>CDATASection</code>, <code>Comment</code>, 
+      *   <code>ProcessingInstruction</code>, or <code>XPathNamespace</code> 
+      *   node. If the context node is a <code>Text</code> or a 
+      *   <code>CDATASection</code>, then the context is interpreted as the 
+      *   whole logical text node as seen by XPath, unless the node is empty 
+      *   in which case it may not serve as the XPath context.
+      * @param resolver The <code>resolver</code> permits translation of all 
+      *   prefixes, including the <code>xml</code> namespace prefix, within 
+      *   the XPath expression into appropriate namespace URIs. If this is 
+      *   specified as <code>null</code>, any namespace prefix within the 
+      *   expression will result in <code>DOMException</code> being thrown 
+      *   with the code <code>NAMESPACE_ERR</code>.
+      * @param type If a specific <code>type</code> is specified, then the 
+      *   result will be returned as the corresponding type.For XPath 1.0 
+      *   results, this must be one of the codes of the 
+      *   <code>XPathResult</code> interface.
+      * @param result The <code>result</code> specifies a specific result 
+      *   object which may be reused and returned by this method. If this is 
+      *   specified as <code>null</code>or the implementation does not reuse 
+      *   the specified result, a new result object will be constructed and 
+      *   returned.For XPath 1.0 results, this object will be of type 
+      *   <code>XPathResult</code>.
+      * @return The result of the evaluation of the XPath expression.For XPath 
+      *   1.0 results, this object will be of type <code>XPathResult</code>.
+      * @exception XPathException
+      *   INVALID_EXPRESSION_ERR: Raised if the expression is not legal 
+      *   according to the rules of the <code>XPathEvaluator</code>i
+      *   <br>TYPE_ERR: Raised if the result cannot be converted to return the 
+      *   specified type.
+      * @exception DOMException
+      *   NAMESPACE_ERR: Raised if the expression contains namespace prefixes 
+      *   which cannot be resolved by the specified 
+      *   <code>XPathNSResolver</code>.
+      *   <br>WRONG_DOCUMENT_ERR: The Node is from a document that is not 
+      *   supported by this <code>XPathEvaluator</code>.
+      *   <br>NOT_SUPPORTED_ERR: The Node is not a type permitted as an XPath 
+      *   context node or the request type is not permitted by this 
+      *   <code>XPathEvaluator</code>.
+      */
+     public Object evaluate(String expression, 
+                            Node contextNode, 
+                            XPathNSResolver resolver, 
+                            short type, 
+                            Object result)
+                            throws XPathException, DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathException.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathException.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,39 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.xpath;
+ 
+ /**
+  * A new exception has been created for exceptions specific to these XPath 
+  * interfaces.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226'>Document Object Model (DOM) Level 3 XPath Specification</a>.
+  */
+ public class XPathException extends RuntimeException {
+     public XPathException(short code, String message) {
+        super(message);
+        this.code = code;
+     }
+     public short   code;
+     // XPathExceptionCode
+     /**
+      * If the expression has a syntax error or otherwise is not a legal 
+      * expression according to the rules of the specific 
+      * <code>XPathEvaluator</code> or contains specialized extension 
+      * functions or variables not supported by this implementation.
+      */
+     public static final short INVALID_EXPRESSION_ERR    = 51;
+     /**
+      * If the expression cannot be converted to return the specified type.
+      */
+     public static final short TYPE_ERR                  = 52;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.xpath;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * The <code>XPathExpression</code> interface represents a parsed and resolved 
+  * XPath expression.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226'>Document Object Model (DOM) Level 3 XPath Specification</a>.
+  */
+ public interface XPathExpression {
+     /**
+      * Evaluates this XPath expression and returns a result.
+      * @param contextNode The <code>context</code> is context node for the 
+      *   evaluation of this XPath expression.If the XPathEvaluator was 
+      *   obtained by casting the <code>Document</code> then this must be 
+      *   owned by the same document and must be a <code>Document</code>, 
+      *   <code>Element</code>, <code>Attribute</code>, <code>Text</code>, 
+      *   <code>CDATASection</code>, <code>Comment</code>, 
+      *   <code>ProcessingInstruction</code>, or <code>XPathNamespace</code> 
+      *   node.If the context node is a <code>Text</code> or a 
+      *   <code>CDATASection</code>, then the context is interpreted as the 
+      *   whole logical text node as seen by XPath, unless the node is empty 
+      *   in which case it may not serve as the XPath context.
+      * @param type If a specific <code>type</code> is specified, then the 
+      *   result will be coerced to return the specified type relying on 
+      *   XPath conversions and fail if the desired coercion is not possible. 
+      *   This must be one of the type codes of <code>XPathResult</code>.
+      * @param result The <code>result</code> specifies a specific result 
+      *   object which may be reused and returned by this method. If this is 
+      *   specified as <code>null</code>or the implementation does not reuse 
+      *   the specified result, a new result object will be constructed and 
+      *   returned.For XPath 1.0 results, this object will be of type 
+      *   <code>XPathResult</code>.
+      * @return The result of the evaluation of the XPath expression.For XPath 
+      *   1.0 results, this object will be of type <code>XPathResult</code>.
+      * @exception XPathException
+      *   TYPE_ERR: Raised if the result cannot be converted to return the 
+      *   specified type.
+      * @exception DOMException
+      *   WRONG_DOCUMENT_ERR: The Node is from a document that is not supported 
+      *   by the XPathEvaluator that created this <code>XPathExpression</code>
+      *   .
+      *   <br>NOT_SUPPORTED_ERR: The Node is not a type permitted as an XPath 
+      *   context node or the request type is not permitted by this 
+      *   <code>XPathExpression</code>.
+      */
+     public Object evaluate(Node contextNode, 
+                            short type, 
+                            Object result)
+                            throws XPathException, DOMException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,34 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.xpath;
+ 
+ /**
+  * The <code>XPathNSResolver</code> interface permit <code>prefix</code> 
+  * strings in the expression to be properly bound to 
+  * <code>namespaceURI</code> strings. <code>XPathEvaluator</code> can 
+  * construct an implementation of <code>XPathNSResolver</code> from a node, 
+  * or the interface may be implemented by any application.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226'>Document Object Model (DOM) Level 3 XPath Specification</a>.
+  */
+ public interface XPathNSResolver {
+     /**
+      * Look up the namespace URI associated to the given namespace prefix. The 
+      * XPath evaluator must never call this with a <code>null</code> or 
+      * empty argument, because the result of doing this is undefined.
+      * @param prefix The prefix to look for.
+      * @return Returns the associated namespace URI or <code>null</code> if 
+      *   none is found.
+      */
+     public String lookupNamespaceURI(String prefix);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.xpath;
+ 
+ import org.w3c.dom.Element;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>XPathNamespace</code> interface is returned by 
+  * <code>XPathResult</code> interfaces to represent the XPath namespace node 
+  * type that DOM lacks. There is no public constructor for this node type. 
+  * Attempts to place it into a hierarchy or a NamedNodeMap result in a 
+  * <code>DOMException</code> with the code <code>HIERARCHY_REQUEST_ERR</code>
+  * . This node is read only, so methods or setting of attributes that would 
+  * mutate the node result in a DOMException with the code 
+  * <code>NO_MODIFICATION_ALLOWED_ERR</code>.
+  * <p>The core specification describes attributes of the <code>Node</code> 
+  * interface that are different for different node types but does not 
+  * describe <code>XPATH_NAMESPACE_NODE</code>, so here is a description of 
+  * those attributes for this node type. All attributes of <code>Node</code> 
+  * not described in this section have a <code>null</code> or 
+  * <code>false</code> value.
+  * <p><code>ownerDocument</code> matches the <code>ownerDocument</code> of the 
+  * <code>ownerElement</code> even if the element is later adopted.
+  * <p><code>nodeName</code> is always the string "<code>#namespace</code>".
+  * <p><code>prefix</code> is the prefix of the namespace represented by the 
+  * node.
+  * <p><code>localName</code> is the same as <code>prefix</code>.
+  * <p><code>nodeType</code> is equal to <code>XPATH_NAMESPACE_NODE</code>.
+  * <p><code>namespaceURI</code> is the namespace URI of the namespace 
+  * represented by the node.
+  * <p><code>nodeValue</code> is the same as <code>namespaceURI</code>.
+  * <p><code>adoptNode</code>, <code>cloneNode</code>, and 
+  * <code>importNode</code> fail on this node type by raising a 
+  * <code>DOMException</code> with the code <code>NOT_SUPPORTED_ERR</code>.
+  * <p ><b>Note:</b> In future versions of the XPath specification, the 
+  * definition of a namespace node may be changed incomatibly, in which case 
+  * incompatible changes to field values may be required to implement 
+  * versions beyond XPath 1.0.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226'>Document Object Model (DOM) Level 3 XPath Specification</a>.
+  */
+ public interface XPathNamespace extends Node {
+     // XPathNodeType
+     /**
+      * The node is a <code>Namespace</code>.
+      */
+     public static final short XPATH_NAMESPACE_NODE      = 13;
+ 
+     /**
+      * The <code>Element</code> on which the namespace was in scope when it 
+      * was requested. This does not change on a returned namespace node even 
+      * if the document changes such that the namespace goes out of scope on 
+      * that element and this node is no longer found there by XPath.
+      */
+     public Element getOwnerElement();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java
*** gcc-4.0.2/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,214 ----
+ /*
+  * Copyright (c) 2004 World Wide Web Consortium,
+  *
+  * (Massachusetts Institute of Technology, European Research Consortium for
+  * Informatics and Mathematics, Keio University). All Rights Reserved. This
+  * work is distributed under the W3C(r) Software License [1] 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.
+  *
+  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+  */
+ 
+ package org.w3c.dom.xpath;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * The <code>XPathResult</code> interface represents the result of the 
+  * evaluation of an XPath 1.0 expression within the context of a particular 
+  * node. Since evaluation of an XPath expression can result in various 
+  * result types, this object makes it possible to discover and manipulate 
+  * the type and value of the result.
+  * <p>See also the <a href='http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226'>Document Object Model (DOM) Level 3 XPath Specification</a>.
+  */
+ public interface XPathResult {
+     // XPathResultType
+     /**
+      * This code does not represent a specific type. An evaluation of an XPath 
+      * expression will never produce this type. If this type is requested, 
+      * then the evaluation returns whatever type naturally results from 
+      * evaluation of the expression. 
+      * <br>If the natural result is a node set when <code>ANY_TYPE</code> was 
+      * requested, then <code>UNORDERED_NODE_ITERATOR_TYPE</code> is always 
+      * the resulting type. Any other representation of a node set must be 
+      * explicitly requested.
+      */
+     public static final short ANY_TYPE                  = 0;
+     /**
+      * The result is a <a href='http://www.w3.org/TR/1999/REC-xpath-19991116#numbers'>number</a> as defined by [<a href='http://www.w3.org/TR/1999/REC-xpath-19991116'>XPath 1.0</a>]. 
+      * Document modification does not invalidate the number, but may mean 
+      * that reevaluation would not yield the same number.
+      */
+     public static final short NUMBER_TYPE               = 1;
+     /**
+      * The result is a <a href='http://www.w3.org/TR/1999/REC-xpath-19991116#strings'>string</a> as defined by [<a href='http://www.w3.org/TR/1999/REC-xpath-19991116'>XPath 1.0</a>]. 
+      * Document modification does not invalidate the string, but may mean 
+      * that the string no longer corresponds to the current document.
+      */
+     public static final short STRING_TYPE               = 2;
+     /**
+      * The result is a <a href='http://www.w3.org/TR/1999/REC-xpath-19991116#booleans'>boolean</a> as defined by [<a href='http://www.w3.org/TR/1999/REC-xpath-19991116'>XPath 1.0</a>]. 
+      * Document modification does not invalidate the boolean, but may mean 
+      * that reevaluation would not yield the same boolean.
+      */
+     public static final short BOOLEAN_TYPE              = 3;
+     /**
+      * The result is a <a href='http://www.w3.org/TR/1999/REC-xpath-19991116#node-sets'>node set</a> as defined by [<a href='http://www.w3.org/TR/1999/REC-xpath-19991116'>XPath 1.0</a>] that 
+      * will be accessed iteratively, which may not produce nodes in a 
+      * particular order. Document modification invalidates the iteration.
+      * <br>This is the default type returned if the result is a node set and 
+      * <code>ANY_TYPE</code> is requested.
+      */
+     public static final short UNORDERED_NODE_ITERATOR_TYPE = 4;
+     /**
+      * The result is a node set as defined by [<a href='http://www.w3.org/TR/1999/REC-xpath-19991116'>XPath 1.0</a>] that 
+      * will be accessed iteratively, which will produce document-ordered 
+      * nodes. Document modification invalidates the iteration.
+      */
+     public static final short ORDERED_NODE_ITERATOR_TYPE = 5;
+     /**
+      * The result is a <a href='http://www.w3.org/TR/1999/REC-xpath-19991116#node-sets'>node set</a> as defined by [<a href='http://www.w3.org/TR/1999/REC-xpath-19991116'>XPath 1.0</a>] that 
+      * will be accessed as a snapshot list of nodes that may not be in a 
+      * particular order. Document modification does not invalidate the 
+      * snapshot but may mean that reevaluation would not yield the same 
+      * snapshot and nodes in the snapshot may have been altered, moved, or 
+      * removed from the document.
+      */
+     public static final short UNORDERED_NODE_SNAPSHOT_TYPE = 6;
+     /**
+      * The result is a <a href='http://www.w3.org/TR/1999/REC-xpath-19991116#node-sets'>node set</a> as defined by [<a href='http://www.w3.org/TR/1999/REC-xpath-19991116'>XPath 1.0</a>] that 
+      * will be accessed as a snapshot list of nodes that will be in original 
+      * document order. Document modification does not invalidate the 
+      * snapshot but may mean that reevaluation would not yield the same 
+      * snapshot and nodes in the snapshot may have been altered, moved, or 
+      * removed from the document.
+      */
+     public static final short ORDERED_NODE_SNAPSHOT_TYPE = 7;
+     /**
+      * The result is a <a href='http://www.w3.org/TR/1999/REC-xpath-19991116#node-sets'>node set</a> as defined by [<a href='http://www.w3.org/TR/1999/REC-xpath-19991116'>XPath 1.0</a>] and 
+      * will be accessed as a single node, which may be <code>null</code>if 
+      * the node set is empty. Document modification does not invalidate the 
+      * node, but may mean that the result node no longer corresponds to the 
+      * current document. This is a convenience that permits optimization 
+      * since the implementation can stop once any node in the resulting set 
+      * has been found.
+      * <br>If there is more than one node in the actual result, the single 
+      * node returned might not be the first in document order.
+      */
+     public static final short ANY_UNORDERED_NODE_TYPE   = 8;
+     /**
+      * The result is a <a href='http://www.w3.org/TR/1999/REC-xpath-19991116#node-sets'>node set</a> as defined by [<a href='http://www.w3.org/TR/1999/REC-xpath-19991116'>XPath 1.0</a>] and 
+      * will be accessed as a single node, which may be <code>null</code> if 
+      * the node set is empty. Document modification does not invalidate the 
+      * node, but may mean that the result node no longer corresponds to the 
+      * current document. This is a convenience that permits optimization 
+      * since the implementation can stop once the first node in document 
+      * order of the resulting set has been found.
+      * <br>If there are more than one node in the actual result, the single 
+      * node returned will be the first in document order.
+      */
+     public static final short FIRST_ORDERED_NODE_TYPE   = 9;
+ 
+     /**
+      * A code representing the type of this result, as defined by the type 
+      * constants.
+      */
+     public short getResultType();
+ 
+     /**
+      * The value of this number result. If the native double type of the DOM 
+      * binding does not directly support the exact IEEE 754 result of the 
+      * XPath expression, then it is up to the definition of the binding to 
+      * specify how the XPath number is converted to the native binding 
+      * number.
+      * @exception XPathException
+      *   TYPE_ERR: raised if <code>resultType</code> is not 
+      *   <code>NUMBER_TYPE</code>.
+      */
+     public double getNumberValue()
+                              throws XPathException;
+ 
+     /**
+      * The value of this string result.
+      * @exception XPathException
+      *   TYPE_ERR: raised if <code>resultType</code> is not 
+      *   <code>STRING_TYPE</code>.
+      */
+     public String getStringValue()
+                              throws XPathException;
+ 
+     /**
+      * The value of this boolean result.
+      * @exception XPathException
+      *   TYPE_ERR: raised if <code>resultType</code> is not 
+      *   <code>BOOLEAN_TYPE</code>.
+      */
+     public boolean getBooleanValue()
+                              throws XPathException;
+ 
+     /**
+      * The value of this single node result, which may be <code>null</code>.
+      * @exception XPathException
+      *   TYPE_ERR: raised if <code>resultType</code> is not 
+      *   <code>ANY_UNORDERED_NODE_TYPE</code> or 
+      *   <code>FIRST_ORDERED_NODE_TYPE</code>.
+      */
+     public Node getSingleNodeValue()
+                              throws XPathException;
+ 
+     /**
+      * Signifies that the iterator has become invalid. True if 
+      * <code>resultType</code> is <code>UNORDERED_NODE_ITERATOR_TYPE</code> 
+      * or <code>ORDERED_NODE_ITERATOR_TYPE</code> and the document has been 
+      * modified since this result was returned.
+      */
+     public boolean getInvalidIteratorState();
+ 
+     /**
+      * The number of nodes in the result snapshot. Valid values for 
+      * snapshotItem indices are <code>0</code> to 
+      * <code>snapshotLength-1</code> inclusive.
+      * @exception XPathException
+      *   TYPE_ERR: raised if <code>resultType</code> is not 
+      *   <code>UNORDERED_NODE_SNAPSHOT_TYPE</code> or 
+      *   <code>ORDERED_NODE_SNAPSHOT_TYPE</code>.
+      */
+     public int getSnapshotLength()
+                              throws XPathException;
+ 
+     /**
+      * Iterates and returns the next node from the node set or 
+      * <code>null</code>if there are no more nodes.
+      * @return Returns the next node.
+      * @exception XPathException
+      *   TYPE_ERR: raised if <code>resultType</code> is not 
+      *   <code>UNORDERED_NODE_ITERATOR_TYPE</code> or 
+      *   <code>ORDERED_NODE_ITERATOR_TYPE</code>.
+      * @exception DOMException
+      *   INVALID_STATE_ERR: The document has been mutated since the result was 
+      *   returned.
+      */
+     public Node iterateNext()
+                             throws XPathException, DOMException;
+ 
+     /**
+      * Returns the <code>index</code>th item in the snapshot collection. If 
+      * <code>index</code> is greater than or equal to the number of nodes in 
+      * the list, this method returns <code>null</code>. Unlike the iterator 
+      * result, the snapshot does not become invalid, but may not correspond 
+      * to the current document if it is mutated.
+      * @param index Index into the snapshot collection.
+      * @return The node at the <code>index</code>th position in the 
+      *   <code>NodeList</code>, or <code>null</code> if that is not a valid 
+      *   index.
+      * @exception XPathException
+      *   TYPE_ERR: raised if <code>resultType</code> is not 
+      *   <code>UNORDERED_NODE_SNAPSHOT_TYPE</code> or 
+      *   <code>ORDERED_NODE_SNAPSHOT_TYPE</code>.
+      */
+     public Node snapshotItem(int index)
+                              throws XPathException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Asynchron.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Asynchron.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Asynchron.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Asynchron.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,185 ----
+ /* Asynchron.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.Request;
+ import org.omg.CORBA.WrongTransaction;
+ 
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ 
+ /**
+  * Handles the asynchronous dynamic invocations.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Asynchron
+ {
+   LinkedList sent = new LinkedList();
+ 
+   /**
+    * Send multiple prepared requests one way, do not caring about the answer.
+    * The messages, containing requests, will be marked, indicating that
+    * the sender is not expecting to get a reply.
+    *
+    * @param requests the prepared array of requests.
+    *
+    * @see Request#send_oneway()
+    */
+   public void send_multiple_requests_oneway(Request[] requests)
+   {
+     for (int i = 0; i < requests.length; i++)
+       {
+         requests [ i ].send_oneway();
+       }
+   }
+ 
+   /**
+    * Send multiple prepared requests expecting to get a reply. All requests
+    * are send in parallel, each in its own separate thread. When the
+    * reply arrives, it is stored in the agreed fields of the corresponing
+    * request data structure. If this method is called repeatedly,
+    * the new requests are added to the set of the currently sent requests,
+    * but the old set is not discarded.
+    *
+    * @param requests the prepared array of requests.
+    *
+    * @see #poll_next_response()
+    * @see #get_next_response()
+    * @see Request#send_deferred()
+    */
+   public void send_multiple_requests_deferred(Request[] requests)
+   {
+     synchronized (sent)
+       {
+         for (int i = 0; i < requests.length; i++)
+           {
+             sent.add(requests [ i ]);
+ 
+             // TODO Reuse threads that are instantiated in the method below,
+             // one thread per call.
+             requests [ i ].send_deferred();
+           }
+       }
+   }
+ 
+   /**
+    * Find if any of the requests that have been previously sent with
+    * {@link #send_multiple_requests_deferred}, have a response yet.
+    *
+    * @return true if there is at least one response to the previously
+    * sent request, false otherwise.
+    */
+   public boolean poll_next_response()
+   {
+     synchronized (sent)
+       {
+         Iterator iter = sent.iterator();
+         Request r;
+         while (iter.hasNext())
+           {
+             r = (Request) iter.next();
+             if (r.poll_response())
+               return true;
+           }
+       }
+     return false;
+   }
+ 
+   /**
+    * Get the next instance with a response being received. If all currently
+    * sent responses not yet processed, this method pauses till at least one of
+    * them is complete. If there are no requests currently sent, the method
+    * pauses till some request is submitted and the response is received.
+    * This strategy is identical to the one accepted by Suns 1.4 ORB
+    * implementation.
+    *
+    * The returned response is removed from the list of the currently
+    * submitted responses and is never returned again.
+    *
+    * @return the previously sent request that now contains the received
+    * response.
+    *
+    * @throws WrongTransaction If the method was called from the transaction
+    * scope different than the one, used to send the request. The exception
+    * can be raised only if the request is implicitly associated with some
+    * particular transaction.
+    */
+   public Request get_next_response()
+                             throws WrongTransaction
+   {
+     // The hard-coded waiting times for the incremental waiter.
+     // TODO it is possible to write more tricky system where the
+     // requests notify the Asynchron when they are complete.
+     // Wait for 5 ms intially.
+     int wait = 8;
+ 
+     // Double the waiting time
+     int INC = 2;
+ 
+     // Do not increase if the waiting time is already over 500 ms.
+     int MAX = 500;
+     while (true)
+       {
+         synchronized (sent)
+           {
+             Iterator iter = sent.iterator();
+             Request r;
+             while (iter.hasNext())
+               {
+                 r = (Request) iter.next();
+                 if (r.poll_response())
+                 {
+                   sent.remove(r);
+                   return r;
+                 }
+               }
+           }
+         try
+           {
+             Thread.sleep(wait);
+             if (wait < MAX)
+               wait = wait * INC;
+           }
+         catch (InterruptedException ex)
+           {
+           }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/BigDecimalHelper.java gcc-4.1.0/libjava/classpath/gnu/CORBA/BigDecimalHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/BigDecimalHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/BigDecimalHelper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,193 ----
+ /* BigDecimalHelper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ 
+ import java.math.BigDecimal;
+ import java.math.BigInteger;
+ 
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ 
+ /**
+  * Reads and writes BigDecimal as CORBA <code>fixed</code>.
+  * The format, described in CORBA specification, requires to store
+  * data in hexadecimal format, two digits per byte (oceted), most
+  * significant digit first. The last half-byte in the representation
+  * stores the sign, being 0xD for negative numbers and 0xC for
+  * zero and positive numbers. To have the even number of half bytes,
+  * 0x0 is appended to the beginning, if required. The position of the
+  * decimal point is not stored.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class BigDecimalHelper
+ {
+   {
+   }
+ 
+   /**
+    * @todo remove from the release version.
+    */
+   public static void main(String[] args)
+   {
+     try
+       {
+         ByteArrayOutputStream b = new ByteArrayOutputStream();
+         BigDecimal d = new BigDecimal("12234.54689");
+ 
+         write(b, d);
+ 
+         byte[] a = b.toByteArray();
+ 
+         for (int i = 0; i < a.length; i++)
+           {
+             int k = a [ i ] & 0xFF;
+             System.out.print(Integer.toHexString(k) + " ");
+           }
+ 
+         System.out.println("Now reading");
+ 
+         ByteArrayInputStream bin = new ByteArrayInputStream(a);
+ 
+         BigDecimal r = read(bin, d.scale());
+ 
+         System.out.println(r);
+       }
+     catch (Exception ex)
+       {
+         ex.printStackTrace();
+       }
+   }
+ 
+   /**
+    * Read the CORBA fixed, autodetecting the number of bytes
+    * and assuming the given scale.
+    */
+   public static BigDecimal read(java.io.InputStream in, int scale)
+                          throws IOException
+   {
+     ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ 
+     int f;
+ 
+     do
+       {
+         f = in.read();
+         if (f >= 0)
+           bout.write(f);
+       }
+     // The last byte has 0xC or 0xD in the last halfbyte.  
+     while ((f & 0xF) <= 0x9);
+ 
+     return createFixed(scale, bout.toByteArray());
+   }
+ 
+   /**
+    * Write the big decimal as CORBA <code>fixed<.code>.
+    * The scale will not be stored.
+    * 
+    * @param out a stream to write into.
+    * @param x a big decimal to write.
+    * @param digits a number of the decimal digits in the record
+    * being written. For the smaller
+    * numbers, zeroes are added to the left.
+    *
+    * @throws IOException if the stream write method throws one.
+    * @throws BadKind if this BigDecimal has more digits than
+    * specified.
+    */
+   public static void write(java.io.OutputStream out, BigDecimal x)
+                     throws IOException, BadKind
+   {
+     StringBuffer v = new StringBuffer(x.unscaledValue().toString());
+ 
+     boolean negative = v.charAt(0) == '-';
+ 
+     if (negative)
+       v = v.deleteCharAt(0);
+ 
+     if ( (v.length() & 1) == 0)
+       v.insert(0, '0');
+ 
+     int c;
+ 
+     for (int i = 0; i < v.length() - 1; i = i + 2)
+       {
+         c = ((v.charAt(i) - '0') << 4) | (v.charAt(i + 1) - '0');
+         out.write(c);
+       }
+ 
+     c = ((v.charAt(v.length() - 1) - '0') << 4) | (negative ? 0xD : 0xC);
+ 
+     out.write(c);
+   }
+ 
+   /**
+    * Convert the loaded byte array, representing
+    * CORBA <code>fixed</code>, into an instance of
+    * the {@link BigDecimal}
+    */
+   private static BigDecimal createFixed(int scale, byte[] d)
+   {
+     StringBuffer s = new StringBuffer(2 * d.length);
+ 
+     int last = d.length - 1;
+ 
+     if ((d [ last ] & 0xF) == 0xD)
+       s.append('-');
+ 
+     if (last > 0)
+       for (int i = 0; i < last; i++)
+         {
+           s.append((char) (((d [ i ] >> 4) & 0xF) + '0'));
+           s.append((char) (((d [ i ]) & 0xF) + '0'));
+         }
+ 
+     s.append((char) (((d [ last ] >> 4) & 0xF) + '0'));
+ 
+     BigInteger b = new BigInteger(s.toString());
+     BigDecimal dec = new BigDecimal(b, scale);
+ 
+     return dec;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/ByteArrayComparator.java gcc-4.1.0/libjava/classpath/gnu/CORBA/ByteArrayComparator.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/ByteArrayComparator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/ByteArrayComparator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* ByteArrayComparator.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import java.util.Arrays;
+ import java.util.Comparator;
+ 
+ /**
+  * A byte array comparator for mapping with CORBA object keys.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ByteArrayComparator
+   implements Comparator
+ {
+   /**
+    * Compare arrays first by absolute equality, then by length
+    * and then (byte to byte) by content.
+    *
+    * @return 0 if arrays are equal, some comparison value otherwise.
+    */
+   public int compare(Object an_a, Object a_b)
+   {
+     if (an_a == a_b)
+       return 0;
+ 
+     byte[] a = null;
+     byte[] b = null;
+     try
+       {
+         a = (byte[]) an_a;
+         b = (byte[]) a_b;
+       }
+     catch (Exception ex)
+       {
+         throw new InternalError(an_a.getClass().getName() + "," +
+                                 a_b.getClass().getName()
+                                );
+       }
+ 
+     if (a.length != b.length)
+       return a.length - b.length;
+     else
+       {
+         // The array sizes must be equal.
+         for (int i = 0; i < b.length; i++)
+           {
+             if (a [ i ] != b [ i ])
+               return a [ i ] - b [ i ];
+           }
+       }
+ 
+     return 0;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AbstractCdrInput.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AbstractCdrInput.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AbstractCdrInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AbstractCdrInput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1768 ----
+ /* AbstractCdrInput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import gnu.CORBA.BigDecimalHelper;
+ import gnu.CORBA.OrbFunctional;
+ import gnu.CORBA.GIOP.CharSets_OSF;
+ import gnu.CORBA.GIOP.CodeSetServiceContext;
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.IorDelegate;
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.TypeCodeHelper;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.Version;
+ import gnu.CORBA.gnuAny;
+ import gnu.CORBA.StubLocator;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.AnySeqHolder;
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.BooleanSeqHolder;
+ import org.omg.CORBA.CharSeqHolder;
+ import org.omg.CORBA.DoubleSeqHolder;
+ import org.omg.CORBA.FloatSeqHolder;
+ import org.omg.CORBA.LongLongSeqHolder;
+ import org.omg.CORBA.LongSeqHolder;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.OctetSeqHolder;
+ import org.omg.CORBA.ShortSeqHolder;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.TypeCodePackage.Bounds;
+ import org.omg.CORBA.ULongLongSeqHolder;
+ import org.omg.CORBA.ULongSeqHolder;
+ import org.omg.CORBA.UShortSeqHolder;
+ import org.omg.CORBA.WCharSeqHolder;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.ObjectImpl;
+ 
+ import java.io.EOFException;
+ import java.io.IOException;
+ import java.io.InputStreamReader;
+ import java.io.Serializable;
+ 
+ import java.math.BigDecimal;
+ 
+ /**
+  * A simple CORBA CDR (common data representation) input stream, reading data
+  * from the given {@link java.io.InputStream}. The primitive types are aligned
+  * on they natural boundaries by implementing the abstract method
+  * {@link #align(int boundary)}.
+  * 
+  * The same class also implements {@link org.omg.CORBA.DataInputStream} to read
+  * the object content in a user defined way.
+  * 
+  * TODO This class uses 16 bits per Unicode character only, as it was until jdk
+  * 1.4 inclusive.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public abstract class AbstractCdrInput
+   extends org.omg.CORBA_2_3.portable.InputStream
+   implements org.omg.CORBA.DataInputStream
+ {
+   /**
+    * The runtime, associated with this stream. This field is only used when
+    * reading and writing value types and filled-in in gnu.CORBA.CDR.Vio.
+    */
+   public transient gnuRuntime runtime;
+ 
+   /**
+    * The message, explaining that the exception has been thrown due unexpected
+    * end of the input stream. This usually happens the server and client
+    * disagree on communication or data representation rules.
+    */
+   protected static final String UNEXP_EOF = "Unexpected end of stream";
+ 
+   /**
+    * This instance is used to convert primitive data types into the byte
+    * sequences.
+    */
+   protected AbstractDataInput b;
+ 
+   /**
+    * The input stream, from where the data are actually being read.
+    */
+   protected java.io.InputStream actual_stream;
+ 
+   /**
+    * The associated orb, if any.
+    */
+   protected ORB orb;
+ 
+   /**
+    * The GIOP version.
+    */
+   protected Version giop = new Version(1, 2);
+ 
+   /**
+    * The code set information.
+    */
+   protected CodeSetServiceContext codeset = CodeSetServiceContext.STANDARD;
+ 
+   /**
+    * The name of the currently used narrow charset, null if the native narrow
+    * charset is used.
+    */
+   private String narrow_charset = null;
+ 
+   /**
+    * The name of the currently used wide charset, null if the native wide
+    * charset is used.
+    */
+   private String wide_charset = null;
+ 
+   /**
+    * True if the native code set is used for narrow characters. If the set is
+    * native, no the intermediate Reader object is instantiated when writing
+    * characters.
+    */
+   private boolean narrow_native;
+ 
+   /**
+    * True if the native code set is used for wide characters. If the set is
+    * native, no the intermediate Reader object is instantiated when writing
+    * characters.
+    */
+   private boolean wide_native;
+ 
+   /**
+    * If true, the stream expect the multi-byte data in the form "less
+    * significant byte first" (Little Endian). This is the opposite to the java
+    * standard (Big Endian).
+    */
+   private boolean little_endian;
+ 
+   /**
+    * Creates the stream. The stream reads Big Endian by default.
+    * 
+    * @param readFrom a stream to read CORBA input from.
+    */
+   public AbstractCdrInput(java.io.InputStream readFrom)
+   {
+     setInputStream(readFrom);
+     setCodeSet(CodeSetServiceContext.STANDARD);
+   }
+ 
+   /**
+    * Creates the stream, requiring the subsequent call of
+    * {@link #setInputStream(java.io.InputStream)}.
+    */
+   public AbstractCdrInput()
+   {
+     setCodeSet(CodeSetServiceContext.STANDARD);
+   }
+ 
+   /**
+    * Set the Big Endian or Little Endian encoding. The stream reads Big Endian
+    * by default.
+    * 
+    * @param use_little_endian if true, the stream expect the multi-byte data in
+    * the form "less significant byte first" (Little Endian). This is the
+    * opposite to the java standard (Big Endian).
+    */
+   public void setBigEndian(boolean use_big_endian)
+   {
+     little_endian = !use_big_endian;
+     setInputStream(actual_stream);
+   }
+ 
+   /**
+    * Get the used encoding.
+    * 
+    * @param true for Big Endian, false for Little Endian.
+    */
+   public boolean isBigEndian()
+   {
+     return !little_endian;
+   }
+ 
+   /**
+    * Clone all important settings to another stream.
+    */
+   public void cloneSettings(AbstractCdrInput stream)
+   {
+     stream.setBigEndian(isBigEndian());
+     stream.setCodeSet(getCodeSet());
+     stream.setVersion(giop);
+     stream.setOrb(orb);
+   }
+ 
+   /**
+    * Set the input stream that receives the CORBA input.
+    * 
+    * @param readFrom the stream.
+    */
+   public void setInputStream(java.io.InputStream readFrom)
+   {
+     if (little_endian)
+       b = new LittleEndianInputStream(readFrom);
+     else
+       b = new BigEndianInputStream(readFrom);
+ 
+     actual_stream = readFrom;
+   }
+ 
+   /**
+    * Set the alignment offset, if the index of the first byte in the stream is
+    * different from 0.
+    */
+   public abstract void setOffset(int offset);
+ 
+   /**
+    * Set the orb, associated with this stream.
+    * 
+    * @param an_orb
+    */
+   public void setOrb(ORB an_orb)
+   {
+     orb = an_orb;
+   }
+ 
+   /**
+    * Set the GIOP version. Some data types are written differently for the
+    * different versions. The default version is 1.0 .
+    */
+   public void setVersion(Version giop_version)
+   {
+     giop = giop_version;
+   }
+ 
+   /**
+    * Align the curretn position at the given natural boundary.
+    */
+   public abstract void align(int boundary);
+ 
+   /**
+    * Reads the CORBA unsigned long (java int), returning the value in the
+    * sufficiently large java long.
+    */
+   public long gnu_read_ulong()
+   {
+     try
+       {
+         long l = b.readInt();
+         l &= 0xFFFFFFF;
+         return l;
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the unsigned short integer value and return it as java int,
+    * sufficiently large to hold all values.
+    */
+   public int gnu_read_ushort()
+   {
+     try
+       {
+         align(2);
+         return b.readUnsignedShort();
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Return the associated {@link ORB}.
+    * 
+    * @return the associated {@link ORB} or null is no such is set.
+    */
+   public ORB orb()
+   {
+     return orb;
+   }
+ 
+   /**
+    * Read a single byte directly from the buffer.
+    */
+   public int read()
+     throws java.io.IOException
+   {
+     try
+       {
+         return b.read();
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Read bytes directly from the buffer.
+    */
+   public int read(byte[] x, int ofs, int len)
+     throws java.io.IOException
+   {
+     try
+       {
+         return b.read(x, ofs, len);
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Read bytes directly from the buffer.
+    */
+   public int read(byte[] x)
+     throws java.io.IOException
+   {
+     try
+       {
+         return b.read(x);
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Read the CORBA object. The object to read is represented in the form of the
+    * plain (not a string-encoded) IOR profile without the heading endian
+    * indicator. The responsible method for reading such data is
+    * {@link IOR.read_no_endian}.
+    * 
+    * The returned object is usually casted into the given type using the .narrow
+    * method of its helper, despite in some cases the direct cast would also
+    * work.
+    * 
+    * The null objects are recognised from the empty profile set. For such
+    * objects, null is returned.
+    * 
+    * @return the loaded and constructed object.
+    */
+   public org.omg.CORBA.Object read_Object()
+   {
+     try
+       {
+         IOR ior = new IOR();
+         ior._read_no_endian(this);
+ 
+         if (ior.Id == null)
+           return null;
+ 
+         // Check maybe this is a remote reference to the local object.
+         // This is only possible if we access the repository of the
+         // connected object.
+         if (orb instanceof OrbFunctional)
+           {
+             OrbFunctional forb = (OrbFunctional) orb;
+             org.omg.CORBA.Object local = forb.find_local_object(ior);
+             if (local != null)
+               return local;
+           }
+ 
+         // Search for the available stubs.
+         ObjectImpl impl = StubLocator.search(orb, ior);
+         try
+           {
+             if (impl._get_delegate() == null)
+               impl._set_delegate(new IorDelegate(orb, ior));
+           }
+         catch (BAD_OPERATION ex)
+           {
+             // Some colaborants may throw this exception
+             // in response to the attempt to get the unset delegate.
+             impl._set_delegate(new IorDelegate(orb, ior));
+           }
+ 
+         return impl;
+       }
+     catch (IOException ex)
+       {
+         MARSHAL bad = new MARSHAL();
+         bad.minor = Minor.IOR;
+         bad.initCause(ex);
+         throw bad;
+       }
+   }
+ 
+   /**
+    * Read the type code. The type code format is defined in the CORBA
+    * documenation.
+    */
+   public TypeCode read_TypeCode()
+   {
+     try
+       {
+         return TypeCodeHelper.read(this);
+       }
+ 
+     catch (Bounds ex)
+       {
+         throw new Unexpected();
+       }
+     catch (BadKind ex)
+       {
+         throw new Unexpected();
+       }
+   }
+ 
+   /**
+    * Read the CORBA {@link Any}. This method first reads the type code, then
+    * delegates the functionality to {@link Any#read_value}.
+    */
+   public Any read_any()
+   {
+     TypeCode ty = read_TypeCode();
+     gnuAny any = new gnuAny();
+     any.read_value(this, ty);
+     return any;
+   }
+ 
+   /**
+    * Read the boolean, treating any non zero byte as true, zero byte as false.
+    */
+   public boolean read_boolean()
+   {
+     try
+       {
+         return b.read() == 0 ? false : true;
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the array of boolean.
+    */
+   public void read_boolean_array(boolean[] x, int offs, int len)
+   {
+     try
+       {
+         for (int i = offs; i < offs + len; i++)
+           {
+             x[i] = b.read() == 0 ? false : true;
+           }
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read a character using narrow charset encoding. Depending form which
+    * encoding is set, this still can be Unicode or ever wider.
+    */
+   public char read_char()
+   {
+     try
+       {
+         if (narrow_native)
+           return (char) b.read();
+         else
+           return (char) new InputStreamReader((InputStream) b, narrow_charset).read();
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read a character array, using narrow charset encoding.
+    */
+   public void read_char_array(char[] x, int offset, int length)
+   {
+     try
+       {
+         if (narrow_native)
+           {
+             for (int i = offset; i < offset + length; i++)
+               x[i] = (char) b.read();
+           }
+         else
+           {
+             InputStreamReader reader = new InputStreamReader((InputStream) b,
+               narrow_charset);
+             reader.read(x, offset, length);
+           }
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the double value, IEEE 754 format.
+    */
+   public double read_double()
+   {
+     try
+       {
+         align(8);
+         return b.readDouble();
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected();
+       }
+   }
+ 
+   /**
+    * Read the array of double values, IEEE 754 format.
+    */
+   public void read_double_array(double[] x, int offs, int len)
+   {
+     try
+       {
+         align(8);
+         for (int i = offs; i < offs + len; i++)
+           {
+             x[i] = b.readDouble();
+           }
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the encapsulated stream. If the encapsulated sequence appears to be in
+    * the Little endian format, the flag of the returned stream is set to read
+    * Little endian.
+    */
+   public BufferredCdrInput read_encapsulation()
+   {
+     try
+       {
+         int l = read_long();
+ 
+         byte[] r = new byte[l];
+         int n = 0;
+         reading: while (n < r.length)
+           {
+             n += read(r, n, r.length - n);
+           }
+ 
+         BufferredCdrInput capsule = new BufferredCdrInput(r);
+         capsule.setOrb(orb);
+ 
+         int endian = capsule.read_octet();
+ 
+         if (endian != 0)
+           {
+             capsule.setBigEndian(false);
+           }
+ 
+         return capsule;
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the CORBA fixed (the end of the <code>fixed</code> can be determined
+    * by its last byte). The scale is always assumed to be zero.
+    */
+   public BigDecimal read_fixed()
+   {
+     try
+       {
+         return BigDecimalHelper.read(this, 0);
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the float value, IEEE 754 format.
+    */
+   public float read_float()
+   {
+     try
+       {
+         align(4);
+         return b.readFloat();
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read an array of float values, IEEE 754 format.
+    */
+   public void read_float_array(float[] x, int offs, int len)
+   {
+     try
+       {
+         align(4);
+         for (int i = offs; i < offs + len; i++)
+           {
+             x[i] = b.readFloat();
+           }
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the CORBA long (java int), high byte first.
+    */
+   public int read_long()
+   {
+     try
+       {
+         align(4);
+         return b.readInt();
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read an array of CORBA longs (java ints).
+    */
+   public void read_long_array(int[] x, int offs, int len)
+   {
+     try
+       {
+         align(4);
+         for (int i = offs; i < offs + len; i++)
+           {
+             x[i] = b.readInt();
+           }
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the CORBA long long (java long).
+    */
+   public long read_longlong()
+   {
+     try
+       {
+         align(8);
+         return b.readLong();
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read an array of CORBA long longs (java longs).
+    */
+   public void read_longlong_array(long[] x, int offs, int len)
+   {
+     try
+       {
+         align(8);
+         for (int i = offs; i < offs + len; i++)
+           {
+             x[i] = b.readLong();
+           }
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read a single byte.
+    */
+   public byte read_octet()
+   {
+     try
+       {
+         return b.readByte();
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the byte array.
+    */
+   public void read_octet_array(byte[] x, int offs, int len)
+   {
+     try
+       {
+         b.read(x, offs, len);
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the length of the byte array as CORBA long and then the array itseld.
+    */
+   public byte[] read_sequence()
+   {
+     try
+       {
+         int l = read_long();
+         byte[] buf = new byte[l];
+         if (l > 0)
+           {
+             b.readFully(buf);
+           }
+         return buf;
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the CORBA short integer.
+    */
+   public short read_short()
+   {
+     try
+       {
+         align(2);
+         return b.readShort();
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read the array of CORBA short integer values.
+    */
+   public void read_short_array(short[] x, int offs, int len)
+   {
+     try
+       {
+         align(2);
+         for (int i = offs; i < offs + len; i++)
+           {
+             x[i] = b.readShort();
+           }
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Read a singe byte string. The method firs reads the byte array and then
+    * calls a constructor to create a string from this array. The character
+    * encoding, if previously set, is taken into consideration.
+    * 
+    * @return a loaded string.
+    */
+   public String read_string()
+   {
+     int n = 0;
+     try
+       {
+         align(4);
+ 
+         n = b.readInt();
+         byte[] s = new byte[n];
+         b.read(s);
+ 
+         // Discard the null terminator.
+         if (narrow_charset == null)
+           return new String(s, 0, n - 1);
+         else
+           return new String(s, 0, n - 1, narrow_charset);
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+     catch (IOException ex)
+       {
+         throw new Unexpected();
+       }
+     catch (NegativeArraySizeException nex)
+       {
+         MARSHAL m = new MARSHAL("Input stream broken, got " + n + "(0x"
+           + Integer.toHexString(n) + ") as a string size");
+         m.minor = Minor.Negative;
+         throw m;
+       }
+   }
+ 
+   /**
+    * Reads the CORBA unsigned long (java int), delegating functionality to
+    * {@link #read_long}.
+    */
+   public int read_ulong()
+   {
+     return read_long();
+   }
+ 
+   /**
+    * Reads the array of CORBA unsigned long (java integer) values, delegating
+    * functionality to {@link #real_long_array}.
+    */
+   public void read_ulong_array(int[] x, int offs, int len)
+   {
+     read_long_array(x, offs, len);
+   }
+ 
+   /**
+    * Read the CORBA unsigned long long value, delegating functionality to
+    * {@link #read_longlong}. There is no way to return values over the limit of
+    * the java signed long in other way than returning the negative value.
+    */
+   public long read_ulonglong()
+   {
+     return read_longlong();
+   }
+ 
+   /**
+    * Reads the array of CORBA long long (java long) values, delegating
+    * functionality to {@link #real_longlong_array}.
+    */
+   public void read_ulonglong_array(long[] x, int offs, int len)
+   {
+     read_longlong_array(x, offs, len);
+   }
+ 
+   /**
+    * Read the unsigned short integer value. Due strange specification, the
+    * returned value must be the short type as well, so the the best solution
+    * seems just to delegete functionality to read_short.
+    */
+   public short read_ushort()
+   {
+     return read_short();
+   }
+ 
+   /**
+    * Read an array of unsigned short values, delegating the functionality to
+    * {@link read_short_array}.
+    */
+   public void read_ushort_array(short[] x, int offs, int len)
+   {
+     read_short_array(x, offs, len);
+   }
+ 
+   /**
+    * Reads the wide character using the encoding, specified in the wide_charset.
+    */
+   public char read_wchar()
+   {
+     try
+       {
+         if (giop.until_inclusive(1, 1))
+           {
+             align(2);
+ 
+             if (wide_native)
+               return (char) b.readShort();
+             else
+               return (char) new InputStreamReader((InputStream) b, wide_charset).read();
+           }
+         else
+           {
+             int l = b.read();
+             if (l == 2 && wide_native)
+               return b.readChar();
+             else if (l <= 0)
+               {
+                  MARSHAL m = new MARSHAL("wchar size " + l);
+                  m.minor = Minor.Negative;
+                  throw m;
+               }
+             else
+               {
+                 byte[] bytes = new byte[l];
+                 b.readFully(bytes);
+                 String cs;
+ 
+                 if (bytes.length > 2 && bytes[0] == 0xFE && bytes[1] == 0xFF)
+                   cs = new String(bytes, 2, bytes.length - 2, wide_charset);
+                 else if (bytes.length > 2 && bytes[0] == 0xFF
+                   && bytes[1] == 0xFE)
+                   {
+                     // Litle endian detected - swap bytes.
+                     byte t;
+                     for (int i = 3; i < bytes.length; i = i + 2)
+                       {
+                         t = bytes[i];
+                         bytes[i - 1] = bytes[i];
+                         bytes[i] = t;
+                       }
+                     cs = new String(bytes, 2, bytes.length - 2, wide_charset);
+                   }
+                 else
+                   cs = new String(bytes, wide_charset);
+ 
+                 return cs.charAt(0);
+               }
+           }
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+     catch (IOException ex)
+       {
+         throw new Unexpected();
+       }
+   }
+ 
+   /**
+    * Read an array of "wide chars", each representing a two byte Unicode
+    * character, high byte first.
+    */
+   public void read_wchar_array(char[] x, int offset, int length)
+   {
+     try
+       {
+         if (giop.until_inclusive(1, 1))
+           align(2);
+ 
+         if (wide_native)
+           {
+             for (int i = offset; i < offset + length; i++)
+               x[i] = (char) b.readShort();
+           }
+         else
+           {
+             InputStreamReader reader = new InputStreamReader((InputStream) b,
+               wide_charset);
+             reader.read(x, offset, length);
+           }
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Reads the string in wide character format (ussually UTF-16, Unicode). Takes
+    * the currently set charset into consideration.
+    * 
+    * If the native (UTF-16) encoding is used of the GIOP protocol is before 1.2,
+    * delegates functionality to "plain" {@link #read_wstring_UTF_16}.
+    */
+   public String read_wstring()
+   {
+     // Native encoding or word oriented data.
+     if (wide_native || giop.until_inclusive(1, 1))
+       return read_wstring_UTF_16();
+     try
+       {
+         align(4);
+ 
+         int n = b.readInt();
+         byte[] s = new byte[n];
+         b.read(s);
+ 
+         return new String(s, 0, n, wide_charset);
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Reads first length of the string and the all characters as an Unicode
+    * (UTF-16) characters. Mind that GIOP 1.1 has the extra null character at the
+    * end that must be discarded.
+    */
+   public String read_wstring_UTF_16()
+   {
+     try
+       {
+         int p = 0;
+         int n = read_long();
+         
+         if (n<0)
+           {
+             MARSHAL m = new MARSHAL("Negative string size");
+             m.minor = Minor.Negative;
+             throw m;
+           }
+ 
+         // The null terminator that is no longer present since 1.2 .
+         int nt = giop.since_inclusive(1, 2) ? 0 : 1;
+ 
+         // Convert bytes to shorts.
+         n = n / 2;
+ 
+         // Empty string.
+         if (n == 0)
+           return "";
+ 
+         char[] s = new char[n];
+ 
+         for (int i = 0; i < s.length; i++)
+           s[i] = (char) b.readShort();
+ 
+         // Check for the byte order marker here.
+         if (s[0] == 0xFEFF)
+           {
+             // Big endian encoding - do nothing, but move the pointer
+             // one position forward.
+             p = 1;
+           }
+         else if (s[0] == 0xFFFE)
+           {
+             // Little endian encoding, swap the bytes and move one
+             // position forward.
+             p = 1;
+ 
+             for (int i = p; i < s.length; i++)
+               s[i] = swap(s[i]);
+           }
+ 
+         // Discard the null terminator and, if needed, the endian marker.
+         String r = new String(s, p, n - nt - p);
+         return r;
+       }
+     catch (EOFException ex)
+       {
+         MARSHAL t = new MARSHAL(UNEXP_EOF);
+         t.minor = Minor.EOF;
+         t.initCause(ex);
+         throw t;
+       }
+ 
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Swap bytes in the character.
+    */
+   public static char swap(char x)
+   {
+     int hi;
+     int lo;
+ 
+     lo = x & 0xFF;
+     hi = (x >> 8) & 0xFF;
+ 
+     return (char) ((lo << 8) | hi);
+   }
+ 
+   /**
+    * Set the current code set context.
+    */
+   public void setCodeSet(CodeSetServiceContext a_codeset)
+   {
+     this.codeset = a_codeset;
+     narrow_charset = CharSets_OSF.getName(codeset.char_data);
+     wide_charset = CharSets_OSF.getName(codeset.wide_char_data);
+ 
+     narrow_native = CharSets_OSF.NATIVE_CHARACTER == codeset.char_data;
+     wide_native = CharSets_OSF.NATIVE_WIDE_CHARACTER == codeset.wide_char_data;
+   }
+ 
+   /**
+    * Get the current code set context.
+    */
+   public CodeSetServiceContext getCodeSet()
+   {
+     return codeset;
+   }
+ 
+   /**
+    * Read the object that is an instance of the given class. The current
+    * implementation delegates functionality to the parameterless
+    * {@link readObject()}.
+    * 
+    * @param klass a class of that this object the instance is.
+    * 
+    * @return the returned object.
+    */
+   public org.omg.CORBA.Object read_Object(Class klass)
+   {
+     return read_Object();
+   }
+ 
+   /**
+    * Read a value type structure from the stream.
+    * 
+    * OMG specification states the writing format is outside the scope of GIOP
+    * definition. This implementation uses java serialization mechanism, calling
+    * {@link ObjectInputStream#readObject}
+    * 
+    * @return an value type structure, unmarshaled from the stream
+    */
+   public Serializable read_Value()
+   {
+     return read_value();
+   }
+ 
+   /**
+    * Read the abstract interface. An abstract interface can be either CORBA
+    * value type or CORBA object and is returned as an abstract java.lang.Object.
+    * 
+    * As specified in OMG specification, this reads a single boolean and then
+    * delegates either to {@link #read_Object()} (for false) or to
+    * {@link #read_Value()} (for true).
+    * 
+    * @return an abstract interface, unmarshaled from the stream
+    */
+   public java.lang.Object read_Abstract()
+   {
+     return read_abstract_interface();
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_char_array(CharSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_char_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_wchar_array(WCharSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_wchar_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * If required, allocate or resize the char array to fit the newly read
+    * values.
+    * 
+    * @param holder_value the existing char array, may be null.
+    * @param offset the required offset to read.
+    * @param length the length of the new sequence.
+    * 
+    * @return the allocated or resized array, same array if no such operations
+    * are required.
+    */
+   private char[] ensureArray(char[] holder_value, int offset, int length)
+   {
+     if (holder_value == null)
+       return new char[offset + length];
+     else if (holder_value.length < offset + length)
+       {
+         char[] value = new char[offset + length];
+         System.arraycopy(holder_value, 0, value, 0, holder_value.length);
+         return value;
+       }
+     else
+       return holder_value;
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_ulong_array(ULongSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_ulong_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_long_array(LongSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_ulong_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * If required, allocate or resize the int array to fit the newly read values.
+    * 
+    * @param holder_value the existing int array, may be null.
+    * @param offset the required offset to read.
+    * @param length the length of the new sequence.
+    * 
+    * @return the allocated or resized array, same array if no such operations
+    * are required.
+    */
+   private int[] ensureArray(int[] holder_value, int offset, int length)
+   {
+     if (holder_value == null)
+       return new int[offset + length];
+     else if (holder_value.length < offset + length)
+       {
+         int[] value = new int[offset + length];
+         System.arraycopy(holder_value, 0, value, 0, holder_value.length);
+         return value;
+       }
+     else
+       return holder_value;
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_float_array(FloatSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_float_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * If required, allocate or resize the float array to fit the newly read
+    * values.
+    * 
+    * @param holder_value the existing float array, may be null.
+    * @param offset the required offset to read.
+    * @param length the length of the new sequence.
+    * 
+    * @return the allocated or resized array, same array if no such operations
+    * are required.
+    */
+   private float[] ensureArray(float[] holder_value, int offset, int length)
+   {
+     if (holder_value == null)
+       return new float[offset + length];
+     else if (holder_value.length < offset + length)
+       {
+         float[] value = new float[offset + length];
+         System.arraycopy(holder_value, 0, value, 0, holder_value.length);
+         return value;
+       }
+     else
+       return holder_value;
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_double_array(DoubleSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_double_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * If required, allocate or resize the double array to fit the newly read
+    * values.
+    * 
+    * @param holder_value the existing double array, may be null.
+    * @param offset the required offset to read.
+    * @param length the length of the new sequence.
+    * 
+    * @return the allocated or resized array, same array if no such operations
+    * are required.
+    */
+   private double[] ensureArray(double[] holder_value, int offset, int length)
+   {
+     if (holder_value == null)
+       return new double[offset + length];
+     else if (holder_value.length < offset + length)
+       {
+         double[] value = new double[offset + length];
+         System.arraycopy(holder_value, 0, value, 0, holder_value.length);
+         return value;
+       }
+     else
+       return holder_value;
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_short_array(ShortSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_short_array(holder.value, offset, length);
+   }
+ 
+   /** {@inheritDoc} */
+   public void read_ushort_array(UShortSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_ushort_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * If required, allocate or resize the short array to fit the newly read
+    * values.
+    * 
+    * @param holder_value the existing short array, may be null.
+    * @param offset the required offset to read.
+    * @param length the length of the new sequence.
+    * 
+    * @return the allocated or resized array, same array if no such operations
+    * are required.
+    */
+   private short[] ensureArray(short[] holder_value, int offset, int length)
+   {
+     if (holder_value == null)
+       return new short[offset + length];
+     else if (holder_value.length < offset + length)
+       {
+         short[] value = new short[offset + length];
+         System.arraycopy(holder_value, 0, value, 0, holder_value.length);
+         return value;
+       }
+     else
+       return holder_value;
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_octet_array(OctetSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_octet_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * If required, allocate or resize the byte array to fit the newly read
+    * values.
+    * 
+    * @param holder_value the existing byte array, may be null.
+    * @param offset the required offset to read.
+    * @param length the length of the new sequence.
+    * 
+    * @return the allocated or resized array, same array if no such operations
+    * are required.
+    */
+   private byte[] ensureArray(byte[] holder_value, int offset, int length)
+   {
+     if (holder_value == null)
+       return new byte[offset + length];
+     else if (holder_value.length < offset + length)
+       {
+         byte[] value = new byte[offset + length];
+         System.arraycopy(holder_value, 0, value, 0, holder_value.length);
+         return value;
+       }
+     else
+       return holder_value;
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_longlong_array(LongLongSeqHolder holder, int offset,
+     int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_longlong_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_ulonglong_array(ULongLongSeqHolder holder, int offset,
+     int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_ulonglong_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * If required, allocate or resize the array of longs to fit the newly read
+    * values.
+    * 
+    * @param holder_value the existing array, may be null.
+    * @param offset the required offset to read.
+    * @param length the length of the new sequence.
+    * 
+    * @return the allocated or resized array, same array if no such operations
+    * are required.
+    */
+   private long[] ensureArray(long[] holder_value, int offset, int length)
+   {
+     if (holder_value == null)
+       return new long[offset + length];
+     else if (holder_value.length < offset + length)
+       {
+         long[] value = new long[offset + length];
+         System.arraycopy(holder_value, 0, value, 0, holder_value.length);
+         return value;
+       }
+     else
+       return holder_value;
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_boolean_array(BooleanSeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     read_boolean_array(holder.value, offset, length);
+   }
+ 
+   /**
+    * If required, allocate or resize the array of booleans to fit the newly read
+    * values.
+    * 
+    * @param holder_value the existing array of booleans, may be null.
+    * @param offset the required offset to read.
+    * @param length the length of the new sequence.
+    * 
+    * @return the allocated or resized array, same array if no such operations
+    * are required.
+    */
+   private boolean[] ensureArray(boolean[] holder_value, int offset, int length)
+   {
+     if (holder_value == null)
+       return new boolean[offset + length];
+     else if (holder_value.length < offset + length)
+       {
+         boolean[] value = new boolean[offset + length];
+         System.arraycopy(holder_value, 0, value, 0, holder_value.length);
+         return value;
+       }
+     else
+       return holder_value;
+   }
+ 
+   /**
+    * Read an array. In OMG specification is written that if the data does not
+    * fit into the holder value field, that array must be resized. The
+    * implementation follows this rule. If the holder value field contains null,
+    * it is newly instantiated.
+    */
+   public void read_any_array(AnySeqHolder holder, int offset, int length)
+   {
+     holder.value = ensureArray(holder.value, offset, length);
+     for (int i = offset; i < offset + length; i++)
+       {
+         holder.value[i] = read_any();
+       }
+   }
+ 
+   /**
+    * If required, allocate or resize the array of Anys to fit the newly read
+    * values.
+    * 
+    * @param holder_value the existing array of Anys, may be null.
+    * @param offset the required offset to read.
+    * @param length the length of the new sequence.
+    * 
+    * @return the allocated or resized array, same array if no such operations
+    * are required.
+    */
+   private Any[] ensureArray(Any[] holder_value, int offset, int length)
+   {
+     if (holder_value == null)
+       return new Any[offset + length];
+     else if (holder_value.length < offset + length)
+       {
+         Any[] value = new Any[offset + length];
+         System.arraycopy(holder_value, 0, value, 0, holder_value.length);
+         return value;
+       }
+     else
+       return holder_value;
+   }
+ 
+   /**
+    * This method is required to represent the DataInputStream as a value type
+    * object.
+    * 
+    * @return a single entity "IDL:omg.org/CORBA/DataInputStream:1.0", always.
+    */
+   public String[] _truncatable_ids()
+   {
+     return new String[] { "IDL:omg.org/CORBA/DataInputStream:1.0" };
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AbstractCdrOutput.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AbstractCdrOutput.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AbstractCdrOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AbstractCdrOutput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1047 ----
+ /* AbstractCdrOutput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import gnu.CORBA.BigDecimalHelper;
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.IorProvider;
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.TypeCodeHelper;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.Version;
+ import gnu.CORBA.GIOP.CharSets_OSF;
+ import gnu.CORBA.GIOP.CodeSetServiceContext;
+ import gnu.CORBA.typecodes.PrimitiveTypeCode;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.Context;
+ import org.omg.CORBA.ContextList;
+ import org.omg.CORBA.DataInputStream;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.UserException;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.portable.Delegate;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ import java.io.IOException;
+ import java.io.OutputStreamWriter;
+ import java.io.Serializable;
+ import java.math.BigDecimal;
+ 
+ /**
+  * A simple CORBA CDR (common data representation)
+  * output stream, writing data into the
+  * given {@link java.io.OutputStream}.
+  *
+  * The same class also implements the {@link DataInputStream},
+  * providing support for writing the value type objects
+  * in a user defined way.
+  * 
+  * TODO This class uses 16 bits per Unicode character only, as it was until
+  * jdk 1.4 inclusive.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public abstract class AbstractCdrOutput
+   extends org.omg.CORBA_2_3.portable.OutputStream
+   implements org.omg.CORBA.DataOutputStream
+ {
+   /**
+    * The runtime, associated with this stream. This field is only used when 
+    * reading and writing value types and filled-in in gnu.CORBA.CDR.Vio.
+    */
+   public transient gnuRuntime runtime;  
+   
+   /**
+    * This instance is used to convert primitive data types into the
+    * byte sequences.
+    */
+   protected AbstractDataOutput b;
+ 
+   /**
+    * The associated orb, if any.
+    */
+   protected ORB orb;
+ 
+   /**
+    * The GIOP version.
+    */
+   protected Version giop = new Version(1, 2);
+ 
+   /**
+    * The code set information.
+    */
+   protected CodeSetServiceContext codeset;
+ 
+   /**
+    * The name of the currently used narrow charset.
+    */
+   private String narrow_charset;
+ 
+   /**
+    * The name of the currently used wide charset, null if
+    * the native wide charset is used.
+    */
+   private String wide_charset;
+ 
+   /**
+    * True if the native code set is used for narrow characters.
+    * If the set is native, no the intermediate Reader object
+    * is instantiated when writing characters.
+    */
+   private boolean narrow_native;
+ 
+   /**
+    * True if the native code set is used for wide characters.
+    * If the set is native, no the intermediate Reader object
+    * is instantiated when writing characters.
+    */
+   private boolean wide_native;
+ 
+   /**
+    * If true, the Little Endian encoding is used to write the
+    * data. Otherwise, the Big Endian encoding is used.
+    */
+   private boolean little_endian;
+ 
+   /**
+    * The stream whre the data are actually written.
+    */
+   private java.io.OutputStream actual_stream;
+ 
+   /**
+    * Creates the stream.
+    *
+    * @param writeTo a stream to write CORBA output to.
+    */
+   public AbstractCdrOutput(java.io.OutputStream writeTo)
+   {
+     setOutputStream(writeTo);
+     setCodeSet(CodeSetServiceContext.STANDARD);
+   }
+ 
+   /**
+    * Creates the stream, requiring the subsequent call
+    * of {@link #setOutputStream(java.io.OutputStream)}.
+    */
+   public AbstractCdrOutput()
+   {
+     setCodeSet(CodeSetServiceContext.STANDARD);
+   }
+ 
+   /**
+    * Set the alignment offset, if the index of the first byte in the
+    * stream is different from 0.
+    */
+   public abstract void setOffset(int an_offset);
+   
+   /**
+    * Clone all important settings to another stream.
+    */
+   public void cloneSettings(AbstractCdrOutput stream)
+   {
+     stream.setBigEndian(!little_endian);
+     stream.setCodeSet(getCodeSet());
+     stream.setVersion(giop);
+     stream.setOrb(orb);
+   }  
+ 
+   /**
+    * Set the current code set context.
+    */
+   public void setCodeSet(CodeSetServiceContext a_codeset)
+   {
+     this.codeset = a_codeset;
+     narrow_charset = CharSets_OSF.getName(codeset.char_data);
+     wide_charset = CharSets_OSF.getName(codeset.wide_char_data);
+ 
+     narrow_native = CharSets_OSF.NATIVE_CHARACTER == codeset.char_data;
+     wide_native = CharSets_OSF.NATIVE_WIDE_CHARACTER == codeset.wide_char_data;
+   }
+ 
+   /**
+    * Get the current code set context.
+    */
+   public CodeSetServiceContext getCodeSet()
+   {
+     return codeset;
+   }
+ 
+   /**
+    * Set the orb, associated with this stream.
+    * @param an_orb
+    */
+   public void setOrb(ORB an_orb)
+   {
+     orb = an_orb;
+   }
+ 
+   /**
+    * Set the output stream that receives the CORBA output.
+    *
+    * @param writeTo the stream.
+    */
+   public void setOutputStream(java.io.OutputStream writeTo)
+   {
+     if (little_endian)
+       b = new LittleEndianOutputStream(writeTo);
+     else
+       b = new BigEndianOutputStream(writeTo);
+ 
+     actual_stream = writeTo;
+   }
+ 
+   /**
+    * Set the GIOP version. Some data types are written differently
+    * for the different versions. The default version is 1.0 .
+    */
+   public void setVersion(Version giop_version)
+   {
+     giop = giop_version;
+   }
+ 
+   /**
+    * Specify if the stream should use the Big Endian (usual for java)
+    * or Little Encoding. The default is Big Endian.
+    *
+    * @param use_big_endian if true, use Big Endian, if false,
+    * use Little Endian.
+    */
+   public void setBigEndian(boolean use_big_endian)
+   {
+     little_endian = !use_big_endian;
+     setOutputStream(actual_stream);
+   }
+ 
+   /**
+    * Align the curretn position at the given natural boundary.
+    */
+   public abstract void align(int boundary);
+ 
+   /**
+    * Create the encapsulation stream, associated with the current
+    * stream. The encapsulated stream must be closed. When being
+    * closed, the encapsulation stream writes its buffer into
+    * this stream using the CORBA CDR encapsulation rules.
+    *
+    * It is not allowed to write to the current stream directly
+    * before the encapsulation stream is closed.
+    *
+    * The encoding (Big/Little Endian) inside the encapsulated
+    * sequence is the same as used into the parent stream.
+    *
+    * @return the encapsulated stream.
+    */
+   public AbstractCdrOutput createEncapsulation()
+   {
+     return new EncapsulationStream(this, !little_endian);
+   }
+ 
+   /**
+    * Return the associated {@link ORB}.
+    * @return the associated {@link ORB} or null is no such is set.
+    */
+   public ORB orb()
+   {
+     return orb;
+   }
+ 
+   /**
+    * Write a single byte.
+    * @param a byte to write (low 8 bits are written).
+    */
+   public void write(int n)
+   {
+     try
+       {
+         b.write(n);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Write bytes directly into the underlying stream.
+    */
+   public void write(byte[] x)
+              throws java.io.IOException
+   {
+     b.write(x);
+   }
+ 
+   /**
+    * Write bytes directly into the underlying stream.
+    */
+   public void write(byte[] x, int ofs, int len)
+              throws java.io.IOException
+   {
+     b.write(x, ofs, len);
+   }
+ 
+   /**
+    * Following the specification, this is not implemented.
+    * Override to get the functionality.
+    */
+   public void write_Context(Context context, ContextList contexts)
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /**
+    * Read the CORBA object. The object is written form of the plain (not a
+    * string-encoded) IOR profile without the heading endian indicator. The
+    * responsible method for reading such data is {@link IOR.write_no_endian}.
+    * 
+    * The null value is written as defined in OMG specification (zero length
+    * string, followed by an empty set of profiles).
+    */
+   public void write_Object(org.omg.CORBA.Object x)
+   {
+     ORB w_orb = orb;
+     if (x instanceof IorProvider)
+       {
+         ((IorProvider) x).getIor()._write_no_endian(this);
+         return;
+       }
+     else if (x == null)
+       {
+         IOR.write_null(this);
+         return;
+       }
+     else if (x instanceof ObjectImpl)
+       {
+         Delegate d = ((ObjectImpl) x)._get_delegate();
+ 
+         if (d instanceof IorProvider)
+           {
+             ((IorProvider) d).getIor()._write_no_endian(this);
+             return;
+           }
+         else
+           {
+             ORB d_orb = d.orb(x);
+             if (d_orb != null)
+               w_orb = d_orb;
+           }
+       }
+ 
+     // Either this is not an ObjectImpl or it has the
+     // unexpected delegate. Try to convert via ORBs
+     // object_to_string().
+     if (w_orb != null)
+       {
+         IOR ior = IOR.parse(w_orb.object_to_string(x));
+         ior._write_no_endian(this);
+         return;
+       }
+     else
+       throw new BAD_OPERATION(
+         "Please set the ORB for this stream, cannot write "
+           + x.getClass().getName());
+   }
+ 
+   /**
+    * Write the TypeCode. This implementation delegates functionality
+    * to {@link cdrTypeCode}.
+    *
+    * @param x a TypeCode to write.
+    */
+   public void write_TypeCode(TypeCode x)
+   {
+     try
+       {
+         TypeCodeHelper.write(this, x);
+       }
+     catch (UserException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes an instance of the CORBA {@link Any}.
+    * This method writes the typecode, followed
+    * by value itself. In Any contains null
+    * (value not set), the {@link TCKind#tk_null}
+    * is written.
+    *
+    * @param x the {@link Any} to write.
+    */
+   public void write_any(Any x)
+   {
+     Streamable value = x.extract_Streamable();
+     if (value != null)
+       {
+         write_TypeCode(x.type());
+         value._write(this);
+       }
+     else
+       {
+         PrimitiveTypeCode p = new PrimitiveTypeCode(TCKind.tk_null);
+         write_TypeCode(p);
+       }
+   }
+ 
+   /**
+    * Writes a single byte, 0 for <code>false</code>,
+    * 1 for <code>true</code>.
+    *
+    * @param x the value to write
+    */
+   public void write_boolean(boolean x)
+   {
+     try
+       {
+         b.write(x ? 1 : 0);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the boolean array.
+    *
+    * @param x array
+    * @param ofs offset
+    * @param len length.
+    */
+   public void write_boolean_array(boolean[] x, int ofs, int len)
+   {
+     try
+       {
+         for (int i = ofs; i < ofs + len; i++)
+           {
+             b.write(x [ i ] ? 1 : 0);
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the lower byte of the passed parameter.
+    * @param x the char to write
+    *
+    * It is effective to write more characters at once.
+    */
+   public void write_char(char x)
+   {
+     try
+       {
+         if (narrow_native)
+           b.write(x);
+         else
+           {
+             OutputStreamWriter ow =
+               new OutputStreamWriter((OutputStream) b, narrow_charset);
+             ow.write(x);
+             ow.flush();
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the lower bytes of the passed array members.
+    *
+    * @param chars an array
+    * @param offsets offset
+    * @param length length
+    */
+   public void write_char_array(char[] chars, int offset, int length)
+   {
+     try
+       {
+         if (narrow_native)
+           {
+             for (int i = offset; i < offset + length; i++)
+               {
+                 b.write(chars [ i ]);
+               }
+           }
+         else
+           {
+             OutputStreamWriter ow =
+               new OutputStreamWriter((OutputStream) b, narrow_charset);
+             ow.write(chars, offset, length);
+             ow.flush();
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the double value (IEEE 754 format).
+    */
+   public void write_double(double x)
+   {
+     try
+       {
+         align(8);
+         b.writeDouble(x);
+       }
+     catch (Exception ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the array of double values.
+    */
+   public void write_double_array(double[] x, int ofs, int len)
+   {
+     try
+       {
+         align(8);
+         for (int i = ofs; i < ofs + len; i++)
+           {
+             b.writeDouble(x [ i ]);
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes CORBA fixed, storing all digits but not the scale.
+    * The end of the record on <code>fixed</code> can
+    * be determined from its last byte.
+    */
+   public void write_fixed(BigDecimal fixed)
+   {
+     try
+       {
+         BigDecimalHelper.write(this, fixed);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+     catch (BadKind ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Write the float value (IEEE 754 format).
+    */
+   public void write_float(float x)
+   {
+     try
+       {
+         align(4);
+         b.writeFloat(x);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    *  Writes an array of the float values.
+    */
+   public void write_float_array(float[] x, int ofs, int len)
+   {
+     try
+       {
+         align(4);
+         for (int i = ofs; i < ofs + len; i++)
+           {
+             b.writeFloat(x [ i ]);
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the integer value (CORBA long, four bytes, high byte first).
+    * @param x the value to write.
+    */
+   public void write_long(int x)
+   {
+     try
+       {
+         align(4);
+         b.writeInt(x);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the array of integer (CORBA long) values.
+    *
+    * @param x value
+    * @param ofs offset
+    * @param len length
+    */
+   public void write_long_array(int[] x, int ofs, int len)
+   {
+     try
+       {
+         align(4);
+         for (int i = ofs; i < ofs + len; i++)
+           {
+             b.writeInt(x [ i ]);
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the long (CORBA long long) value, 8 bytes,
+    * high byte first.
+    *
+    * @param x the value to write.
+    */
+   public void write_longlong(long x)
+   {
+     try
+       {
+         align(8);
+         b.writeLong(x);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the array of longs (CORBA long longs) values.
+    *
+    * @param x value
+    * @param ofs offset
+    * @param len length
+    */
+   public void write_longlong_array(long[] x, int ofs, int len)
+   {
+     try
+       {
+         align(8);
+         for (int i = ofs; i < ofs + len; i++)
+           {
+             b.writeLong(x [ i ]);
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes this byte.
+    * @param x
+    */
+   public void write_octet(byte x)
+   {
+     try
+       {
+         b.writeByte(x);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the array of bytes (CORBA octets) values.
+    *
+    * @param x value
+    * @param ofs offset
+    * @param len length
+    */
+   public void write_octet_array(byte[] x, int ofs, int len)
+   {
+     try
+       {
+         b.write(x, ofs, len);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes first the size of array, and then the byte array using
+    * the {@link java.io.OutputStream#write(byte[]) }. The sequence
+    * being written is preceeded by the int, representing the array
+    * length.
+    */
+   public void write_sequence(byte[] buf)
+   {
+     try
+       {
+         write_long(buf.length);
+         write(buf);
+       }
+     catch (IOException ex)
+       {
+         MARSHAL t = new MARSHAL();
+         t.minor = Minor.CDR;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Writes the contents of the provided stream.
+    * The sequence being written is preceeded by the int,
+    * representing the stream buffer length (the number of
+    * bytes being subsequently written).
+    */
+   public void write_sequence(BufferedCdrOutput from)
+   {
+     try
+       {
+         write_long(from.buffer.size());
+         from.buffer.writeTo(this);
+       }
+     catch (IOException ex)
+       {
+         MARSHAL t = new MARSHAL();
+         t.minor = Minor.CDR;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Writes the two byte integer (short), high byte first.
+    *
+    * @param x the integer to write.
+    */
+   public void write_short(short x)
+   {
+     try
+       {
+         align(2);
+         b.writeShort(x);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the array of short (two byte integer) values.
+    *
+    * @param x value
+    * @param ofs offset
+    * @param len length
+    */
+   public void write_short_array(short[] x, int ofs, int len)
+   {
+     try
+       {
+         align(2);
+         for (int i = ofs; i < ofs + len; i++)
+           {
+             b.writeShort(x [ i ]);
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the string. This implementation first calls
+    * String.getBytes() and then writes the length of the returned
+    * array (as CORBA ulong) and the returned array itself.
+    *
+    * The encoding information, if previously set, is taken
+    * into consideration.
+    *
+    * @param x the string to write.
+    */
+   public void write_string(String x)
+   {
+     try
+       {
+         byte[] ab = x.getBytes(narrow_charset);
+         write_long(ab.length + 1);
+         write(ab);
+ 
+         // write null terminator.
+         write(0);
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the CORBA unsigned long in the same way as CORBA long.
+    */
+   public void write_ulong(int x)
+   {
+     write_long(x);
+   }
+ 
+   /**
+    * Writes the array of CORBA unsigned longs in the same way as
+    * array of ordinary longs.
+    */
+   public void write_ulong_array(int[] x, int ofs, int len)
+   {
+     write_long_array(x, ofs, len);
+   }
+ 
+   /**
+    * Write the unsigned long long in the same way as an ordinary long long.
+    *
+    * @param x a value to write.
+    */
+   public void write_ulonglong(long x)
+   {
+     write_longlong(x);
+   }
+ 
+   /**
+    * Write the array of unsingel long longs in the same way
+    * an an array of the ordinary long longs.
+    */
+   public void write_ulonglong_array(long[] x, int ofs, int len)
+   {
+     write_longlong_array(x, ofs, len);
+   }
+ 
+   /**
+    * Write the unsigned short in the same way as an ordinary short.
+    */
+   public void write_ushort(short x)
+   {
+     write_short(x);
+   }
+ 
+   /**
+    * Write an array of unsigned short integersin the same way
+    * as an array of ordinary short integers.
+    */
+   public void write_ushort_array(short[] x, int ofs, int len)
+   {
+     write_short_array(x, ofs, len);
+   }
+ 
+   /**
+    * Writes the character as two byte short integer (Unicode value), high byte
+    * first. Writes in Big Endian, but never writes the endian indicator.
+    * 
+    * The character is always written using the native UTF-16BE charset because
+    * its size under arbitrary encoding is not evident.
+    */
+   public void write_wchar(char x)
+   {
+     try
+       {
+         if (giop.until_inclusive(1, 1))
+           {
+             align(2);
+ 
+             if (wide_native)
+               b.writeShort(x);
+             else
+               {
+                 OutputStreamWriter ow = new OutputStreamWriter(
+                   (OutputStream) b, wide_charset);
+                 ow.write(x);
+                 ow.flush();
+               }
+           }
+         else if (wide_native)
+           {
+             b.writeByte(2);
+             b.writeChar(x);
+           }
+         else
+           {
+             String encoded = new String(new char[] { x });
+             byte[] bytes = encoded.getBytes(wide_charset);
+             b.write(bytes.length + 2);
+             b.write(bytes);
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Write the array of wide chars.
+    * 
+    * @param chars the array of wide chars
+    * @param offset offset
+    * @param length length
+    * 
+    * The char array is always written using the native UTF-16BE charset because
+    * the character size under arbitrary encoding is not evident.
+    */
+   public void write_wchar_array(char[] chars, int offset, int length)
+   {
+     try
+       {
+         if (giop.until_inclusive(1, 1))
+           align(2);
+ 
+         if (wide_native)
+           {
+             for (int i = offset; i < offset + length; i++)
+               {
+                 b.writeShort(chars [ i ]);
+               }
+           }
+         else
+           {
+             OutputStreamWriter ow =
+               new OutputStreamWriter((OutputStream) b, wide_charset);
+             ow.write(chars, offset, length);
+             ow.flush();
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /**
+    * Writes the length of the string in bytes (not characters) and
+    * then all characters as two byte unicode chars. Adds the
+    * Big Endian indicator, 0xFFFE, at the beginning and null wide char at
+    * the end.
+    *
+    * @param x the string to write.
+    */
+   public void write_wstring(String x)
+   {
+     try
+       {
+         if (giop.since_inclusive(1, 2))
+           {
+             byte[] bytes = x.getBytes(wide_charset);
+             write_sequence(bytes);
+           }
+         else
+           {
+             // Encoding with null terminator always in UTF-16.
+             // The wide null terminator needs extra two bytes.
+             write_long(2 * x.length() + 2);
+ 
+             for (int i = 0; i < x.length(); i++)
+               {
+                 b.writeShort(x.charAt(i));
+               }
+ 
+             // Write null terminator.
+             b.writeShort(0);
+           }
+       }
+     catch (IOException ex)
+       {
+         Unexpected.error(ex);
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void write_any_array(Any[] anys, int offset, int length)
+   {
+     for (int i = offset; i < offset + length; i++)
+       {
+         write_any(anys [ i ]);
+       }
+   }
+ 
+   public String[] _truncatable_ids()
+   {
+     /**@todo Implement this org.omg.CORBA.portable.ValueBase abstract method*/
+     throw new java.lang.UnsupportedOperationException("Method _truncatable_ids() not yet implemented.");
+   }
+ 
+   /** {@inheritDoc} */
+   public void write_Abstract(java.lang.Object value)
+   {
+     write_abstract_interface(value);
+   }
+ 
+   /** {@inheritDoc} */
+   public void write_Value(Serializable value)
+   {
+     write_value(value);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AbstractDataInput.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AbstractDataInput.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AbstractDataInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AbstractDataInput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,392 ----
+ /* AbstractDataInput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * Some data input stream that can be either Big or
+  * Little Endian.
+  *
+  * This class reuses code from GNU Classpath DataInputStream.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface AbstractDataInput
+ {
+   /**
+    * This method reads bytes from the underlying stream into the specified
+    * byte array buffer.  It will attempt to fill the buffer completely, but
+    * may return a short count if there is insufficient data remaining to be
+    * read to fill the buffer.
+    *
+    * @param b The buffer into which bytes will be read.
+    *
+    * @return The actual number of bytes read, or -1 if end of stream reached
+    * before reading any bytes.
+    *
+    * @exception IOException If an error occurs.
+    */
+   int read(byte[] b)
+     throws IOException;
+ 
+   /**
+    * This method reads bytes from the underlying stream into the specified
+    * byte array buffer.  It will attempt to read <code>len</code> bytes and
+    * will start storing them at position <code>off</code> into the buffer.
+    * This method can return a short count if there is insufficient data
+    * remaining to be read to complete the desired read length.
+    *
+    * @param b The buffer into which bytes will be read.
+    * @param off The offset into the buffer to start storing bytes.
+    * @param len The requested number of bytes to read.
+    *
+    * @return The actual number of bytes read, or -1 if end of stream reached
+    * before reading any bytes.
+    *
+    * @exception IOException If an error occurs.
+    */
+   int read(byte[] b, int off, int len)
+     throws IOException;
+ 
+   /**
+    * This method reads a Java boolean value from an input stream.  It does
+    * so by reading a single byte of data.  If that byte is zero, then the
+    * value returned is <code>false</code>.  If the byte is non-zero, then
+    * the value returned is <code>true</code>.
+    * <p>
+    * This method can read a <code>boolean</code> written by an object
+    * implementing the <code>writeBoolean()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>boolean</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading
+    * the boolean
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeBoolean
+    */
+   boolean readBoolean()
+                throws IOException;
+ 
+   /**
+    * This method reads a Java byte value from an input stream.  The value
+    * is in the range of -128 to 127.
+    * <p>
+    * This method can read a <code>byte</code> written by an object
+    * implementing the <code>writeByte()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>byte</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the byte
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeByte
+    */
+   byte readByte()
+          throws IOException;
+ 
+   /**
+    * This method reads a Java <code>char</code> value from an input stream.
+    * It operates by reading two bytes from the stream and converting them to
+    * a single 16-bit Java <code>char</code>.  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code>
+    * represent the first and second byte read from the stream
+    * respectively, they will be transformed to a <code>char</code> in
+    * the following manner:
+    * <p>
+    * <code>(char)(((byte1 &amp; 0xFF) &lt;&lt; 8) | (byte2 &amp; 0xFF)</code>
+    * <p>
+    * This method can read a <code>char</code> written by an object
+    * implementing the <code>writeChar()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>char</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the char
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeChar
+    */
+   char readChar()
+          throws IOException;
+ 
+   /**
+    * This method reads a Java double value from an input stream.  It operates
+    * by first reading a <code>long</code> value from the stream by calling the
+    * <code>readLong()</code> method in this interface, then converts
+    * that <code>long</code> to a <code>double</code> using the
+    * <code>longBitsToDouble</code> method in the class
+    * <code>java.lang.Double</code>
+    * <p>
+    * This method can read a <code>double</code> written by an object
+    * implementing the <code>writeDouble()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>double</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading
+    * the double
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeDouble
+    * @see java.lang.Double#longBitsToDouble
+    */
+   double readDouble()
+              throws IOException;
+ 
+   /**
+    * This method reads a Java float value from an input stream.  It
+    * operates by first reading an <code>int</code> value from the
+    * stream by calling the <code>readInt()</code> method in this
+    * interface, then converts that <code>int</code> to a
+    * <code>float</code> using the <code>intBitsToFloat</code> method
+    * in the class <code>java.lang.Float</code>
+    * <p>
+    * This method can read a <code>float</code> written by an object
+    * implementing the <code>writeFloat()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>float</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the float
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeFloat
+    * @see java.lang.Float#intBitsToFloat
+    */
+   float readFloat()
+            throws IOException;
+ 
+   /**
+    * This method reads raw bytes into the passed array until the array is
+    * full.  Note that this method blocks until the data is available and
+    * throws an exception if there is not enough data left in the stream to
+    * fill the buffer.  Note also that zero length buffers are permitted.
+    * In this case, the method will return immediately without reading any
+    * bytes from the stream.
+    *
+    * @param b The buffer into which to read the data
+    *
+    * @exception EOFException If end of file is reached before filling the
+    * buffer
+    * @exception IOException If any other error occurs
+    */
+   void readFully(byte[] b)
+           throws IOException;
+ 
+   /**
+    * This method reads a Java <code>int</code> value from an input stream
+    * It operates by reading four bytes from the stream and converting them to
+    * a single Java <code>int</code>.  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte4</code> represent
+    * the first four bytes read from the stream, they will be
+    * transformed to an <code>int</code> in the following manner:
+    * <p>
+    * <code>(int)(((byte1 &amp; 0xFF) &lt;&lt; 24) + ((byte2 &amp; 0xFF) &lt;&lt; 16) +
+    * ((byte3 &amp; 0xFF)&lt;&lt; 8) + (byte4 &amp; 0xFF)))</code>
+    * <p>
+    * The value returned is in the range of -2147483648 to 2147483647.
+    * <p>
+    * This method can read an <code>int</code> written by an object
+    * implementing the <code>writeInt()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>int</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the int
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeInt
+    */
+   int readInt()
+        throws IOException;
+ 
+   /**
+    * This method reads a Java <code>long</code> value from an input stream
+    * It operates by reading eight bytes from the stream and converting them to
+    * a single Java <code>long</code>.  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte8</code> represent
+    * the first eight bytes read from the stream, they will be
+    * transformed to an <code>long</code> in the following manner:
+    * <p>
+    * <code>(long)(((byte1 &amp; 0xFF) &lt;&lt; 56) + ((byte2 &amp; 0xFF) &lt;&lt; 48) +
+    * ((byte3 &amp; 0xFF) &lt;&lt; 40) + ((byte4 &amp; 0xFF) &lt;&lt; 32) +
+    * ((byte5 &amp; 0xFF) &lt;&lt; 24) + ((byte6 &amp; 0xFF) &lt;&lt; 16) +
+    * ((byte7 &amp; 0xFF) &lt;&lt; 8) + (byte8 &amp; 0xFF)))
+    * </code>
+    * <p>
+    * The value returned is in the range of -9223372036854775808 to
+    * 9223372036854775807.
+    * <p>
+    * This method can read an <code>long</code> written by an object
+    * implementing the <code>writeLong()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>long</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the long
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeLong
+    */
+   long readLong()
+          throws IOException;
+ 
+   /**
+    * This method reads a signed 16-bit value into a Java in from the
+    * stream.  It operates by reading two bytes from the stream and
+    * converting them to a single 16-bit Java <code>short</code>.  The
+    * two bytes are stored most significant byte first (i.e., "big
+    * endian") regardless of the native host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code>
+    * represent the first and second byte read from the stream
+    * respectively, they will be transformed to a <code>short</code>. in
+    * the following manner:
+    * <p>
+    * <code>(short)(((byte1 &amp; 0xFF) &lt;&lt; 8) | (byte2 &amp; 0xFF))</code>
+    * <p>
+    * The value returned is in the range of -32768 to 32767.
+    * <p>
+    * This method can read a <code>short</code> written by an object
+    * implementing the <code>writeShort()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>short</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeShort
+    */
+   short readShort()
+            throws IOException;
+ 
+   /**
+    * This method reads 8 unsigned bits into a Java <code>int</code>
+    * value from the stream. The value returned is in the range of 0 to
+    * 255.
+    * <p>
+    * This method can read an unsigned byte written by an object
+    * implementing the <code>writeUnsignedByte()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The unsigned bytes value read as a Java <code>int</code>.
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeByte
+    */
+   int readUnsignedByte()
+                 throws IOException;
+ 
+   /**
+    * This method reads 16 unsigned bits into a Java int value from the stream.
+    * It operates by reading two bytes from the stream and converting them to
+    * a single Java <code>int</code>  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code>
+    * represent the first and second byte read from the stream
+    * respectively, they will be transformed to an <code>int</code> in
+    * the following manner:
+    * <p>
+    * <code>(int)(((byte1 &amp; 0xFF) &lt;&lt; 8) + (byte2 &amp; 0xFF))</code>
+    * <p>
+    * The value returned is in the range of 0 to 65535.
+    * <p>
+    * This method can read an unsigned short written by an object
+    * implementing the <code>writeUnsignedShort()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The unsigned short value read as a Java <code>int</code>
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeShort
+    */
+   int readUnsignedShort()
+                  throws IOException;
+ 
+   /**
+    * Read a single byte.
+    *
+    * @return a byte, extracted from the stream or -1 if
+    * EOF has been reached.
+    * @throws IOException
+    */
+   public int read()
+            throws IOException;
+ 
+   /**
+    * This method attempts to skip and discard the specified number of bytes
+    * in the input stream.  It may actually skip fewer bytes than requested.
+    * This method will not skip any bytes if passed a negative number of bytes
+    * to skip.
+    *
+    * @param n The requested number of bytes to skip.
+    *
+    * @return The requested number of bytes to skip.
+    *
+    * @exception IOException If an error occurs.
+    * @specnote The JDK docs claim that this returns the number of bytes
+    *  actually skipped. The JCL claims that this method can throw an
+    *  EOFException. Neither of these appear to be true in the JDK 1.3's
+    *  implementation. This tries to implement the actual JDK behaviour.
+    */
+   int skipBytes(int n)
+          throws IOException;
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AbstractDataOutput.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AbstractDataOutput.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AbstractDataOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AbstractDataOutput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,185 ----
+ /* AbstractDataOutput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * An abstract data output stream that could write data in either
+  * Big Endian or Little Endian format.
+  *
+  * This class reuses code from GNU Classpath DataOutputStream.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface AbstractDataOutput
+ {
+   /**
+    * This method flushes any unwritten bytes to the underlying stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   void flush()
+       throws IOException;
+ 
+   /**
+    * This method writes the specified byte (passed as an <code>int</code>)
+    * to the underlying output stream.
+    *
+    * @param value The <code>byte</code> to write, passed as an <code>int</code>.
+    *
+    * @exception IOException If an error occurs.
+    */
+   void write(int value)
+       throws IOException;
+ 
+   /**
+    * This method writes <code>len</code> bytes from the specified byte array
+    * <code>buf</code> starting at position <code>offset</code> into the
+    * buffer to the underlying output stream.
+    *
+    * @param buf The byte array to write from.
+    * @param offset The index into the byte array to start writing from.
+    * @param len The number of bytes to write.
+    *
+    * @exception IOException If an error occurs.
+    */
+   void write(byte[] buf, int offset, int len)
+       throws IOException;
+ 
+   /**
+    * Write the complete byte array.
+    * @throws IOException
+    */
+   void write(byte[] buf)
+       throws IOException;
+ 
+   /**
+    * This method writes a Java boolean value to an output stream.  If
+    * <code>value</code> is <code>true</code>, a byte with the value of
+    * 1 will be written, otherwise a byte with the value of 0 will be
+    * written.
+    *
+    * The value written can be read using the <code>readBoolean</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>boolean</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeBoolean(boolean value)
+              throws IOException;
+ 
+   /**
+    * This method writes a Java byte value to an output stream.  The
+    * byte to be written will be in the lowest 8 bits of the
+    * <code>int</code> value passed.
+    *
+    * The value written can be read using the <code>readByte</code> or
+    * <code>readUnsignedByte</code> methods in <code>DataInput</code>.
+    *
+    * @param value The <code>byte</code> to write to the stream, passed as
+    * the low eight bits of an <code>int</code>.
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeByte(int value)
+           throws IOException;
+ 
+   /**
+    * This method writes a Java short value to an output stream.  The
+    * char to be written will be in the lowest 16 bits of the <code>int</code>
+    * value passed.
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeShort(int value)
+            throws IOException;
+ 
+   /**
+    * This method writes a Java char value to an output stream.  The
+    * char to be written will be in the lowest 16 bits of the <code>int</code>
+    * value passed.
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeChar(int value)
+           throws IOException;
+ 
+   /**
+    * This method writes a Java int value to an output stream.
+    *
+    * @param value The <code>int</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeInt(int value)
+          throws IOException;
+ 
+   /**
+    * This method writes a Java long value to an output stream.
+    *
+    * @param value The <code>long</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeLong(long value)
+           throws IOException;
+ 
+   /**
+    * This method writes a Java <code>float</code> value to the stream.
+    * @param value The <code>float</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeFloat(float value)
+            throws IOException;
+ 
+   /**
+    * This method writes a Java <code>double</code> value to the stream.
+    *
+    * @param value The <code>double</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeDouble(double value)
+             throws IOException;
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AligningInput.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AligningInput.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AligningInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AligningInput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,131 ----
+ /* AligningInput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.ByteArrayInputStream;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ 
+ /**
+  * The input stream with the possibility to align on the
+  * word (arbitrary size) boundary.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class AligningInput
+   extends ByteArrayInputStream
+ {
+   /**
+    * The alignment offset.
+    */
+   private int offset = 0;
+ 
+   /**
+    * Create a stream, reading form the given buffer.
+    *
+    * @param a_buffer a buffer to read from.
+    */
+   public AligningInput(byte[] a_buffer)
+   {
+     super(a_buffer);
+   }
+ 
+   /**
+    * Set the alignment offset, if the index of the first byte in the
+    * stream is different from 0.
+    */
+   public void setOffset(int an_offset)
+   {
+     offset = an_offset;
+   }
+ 
+   /**
+    * Skip several bytes, aligning the internal pointer on the
+    * selected boundary.
+    *
+    * @throws BAD_PARAM, minor code 0, the alignment is not possible,
+    * usually due the wrong parameter value.
+    */
+   public void align(int alignment)
+   {
+     try
+       {
+         int d = (pos + offset) % alignment;
+         if (d > 0)
+           {
+             skip(alignment - d);
+           }
+       }
+     catch (Exception ex)
+       {
+         BAD_PARAM p = new BAD_PARAM("Unable to align at " + alignment);
+         p.initCause(ex);
+         throw p;
+       }
+   }
+ 
+   /**
+    * Get the byte buffer, from where the data are read.
+    */
+   public byte[] getBuffer()
+   {
+     return buf;
+   }
+   
+   /**
+    * Get the current position in the buffer.
+    * 
+    * @return The position in the buffer, taking offset into consideration.
+    */
+   public int getPosition()
+   {
+     return pos + offset;
+   }  
+   
+   /**
+    * Jump to the given position, taking offset into consideration.
+    */
+   public void seek(int position)
+   {
+     if (position < offset || position > (count+offset))
+       throw new ArrayIndexOutOfBoundsException(position
+         + " is out of valid ["+offset+".." + (count+offset) + "[ range");
+     pos = position - offset;
+   }  
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AligningOutput.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AligningOutput.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/AligningOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/AligningOutput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,148 ----
+ /* AligningOutput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.ByteArrayOutputStream;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ 
+ /**
+  * The input stream with the possibility to align on the
+  * word (arbitrary size) boundary.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class AligningOutput
+   extends ByteArrayOutputStream
+ {
+   /**
+    * The alignment offset.
+    */
+   private int offset = 0;
+ 
+   /**
+    * Create a stream with the default intial buffer size.
+    */
+   public AligningOutput()
+   {
+   }
+ 
+   /**
+    * Create a stream with the given intial buffer size.
+    */
+   public AligningOutput(int initial_size)
+   {
+     super(initial_size);
+   }
+ 
+   /**
+    * Set the alignment offset, if the index of the first byte in the
+    * stream is different from 0.
+    */
+   public void setOffset(int an_offset)
+   {
+     offset = an_offset;
+   }
+ 
+   /**
+    * Skip several bytes, aligning the internal pointer on the
+    * selected boundary.
+    *
+    * @throws BAD_PARAM, minor code 0, the alignment is not possible,
+    * usually due the wrong parameter value.
+    */
+   public void align(int alignment)
+   {
+     try
+       {
+         int d = (count + offset) % alignment;
+         if (d > 0)
+           {
+             skip(alignment - d);
+           }
+       }
+     catch (Exception ex)
+       {
+         BAD_PARAM p = new BAD_PARAM("Unable to align at " + alignment);
+         p.initCause(ex);
+         throw p;
+       }
+   }
+ 
+   /**
+    * Write the specified number of zero bytes.
+    *
+    * @param bytes the number of zero bytes to write.
+    */
+   public void skip(int bytes)
+   {
+     for (int i = 0; i < bytes; i++)
+       {
+         write(0);
+       }
+   }
+   
+   /**
+    * Get the current position in the buffer.
+    * 
+    * @return The position in the buffer, taking offset into consideration.
+    */
+   public int getPosition()
+   {
+     return size()+offset;
+   }
+   
+   /**
+    * Seek to the given position (not in use).
+    */
+   public void seek(int position)
+   {
+     count = position - offset;
+   }
+   
+   /**
+    * Get the buffer without copying it. Use with care.
+    */
+   public byte[] getBuffer()
+   {
+     return buf;
+   }
+   
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/ArrayValueHelper.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/ArrayValueHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/ArrayValueHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/ArrayValueHelper.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,254 ----
+ /* ArrayValueHelper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import gnu.CORBA.ObjectCreator;
+ 
+ import org.omg.CORBA.BooleanSeqHelper;
+ import org.omg.CORBA.CharSeqHelper;
+ import org.omg.CORBA.DoubleSeqHelper;
+ import org.omg.CORBA.FloatSeqHelper;
+ import org.omg.CORBA.LongLongSeqHelper;
+ import org.omg.CORBA.LongSeqHelper;
+ import org.omg.CORBA.OctetSeqHelper;
+ import org.omg.CORBA.ShortSeqHelper;
+ import org.omg.CORBA.portable.BoxedValueHelper;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ import java.io.Serializable;
+ import java.lang.reflect.Array;
+ import java.rmi.Remote;
+ 
+ import javax.rmi.CORBA.Util;
+ import javax.rmi.CORBA.ValueHandler;
+ 
+ /**
+  * Writes arrays as a boxed value types. A single instance is used to write a
+  * single array. This class is only used with RMI/IIOP, to handle array boxed
+  * values.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ class ArrayValueHelper
+   implements BoxedValueHelper
+ {
+   /**
+    * The value handler (one for all instances).
+    */
+   static ValueHandler handler = Util.createValueHandler();
+ 
+   /**
+    * A class of the array being written.
+    */
+   Class arrayClass;
+ 
+   /**
+    * The array component class.
+    */
+   Class component;
+ 
+   /**
+    * The array component repository Id.
+    */
+   String componentId;
+ 
+   /**
+    * If true, the array members are written as objects rather than as values.
+    * True for Remotes and CORBA objects.
+    */
+   boolean written_as_object()
+   {
+     return org.omg.CORBA.Object.class.isAssignableFrom(component)
+       || Remote.class.isAssignableFrom(component);
+   }
+ 
+   /**
+    * Creates the instance of the helper to write this specific array class.
+    */
+   ArrayValueHelper(Class an_arrayClass)
+   {
+     arrayClass = an_arrayClass;
+   }
+ 
+   /**
+    * Get the array repository Id that will be the RMI repository id.
+    */
+   public String get_id()
+   {
+     return ObjectCreator.getRepositoryId(arrayClass);
+   }
+ 
+   /**
+    * Read the array from the input stream.
+    */
+   public Serializable read_value(InputStream input)
+   {
+     if (input instanceof HeadlessInput)
+       {
+         ((HeadlessInput) input).subsequentCalls = true;
+       }
+ 
+     component = arrayClass.getComponentType();
+ 
+     if (component.equals(byte.class))
+       return OctetSeqHelper.read(input);
+     else if (component.equals(String.class))
+       {
+         // String array is optimized because this may be frequent.
+         String[] s = new String[input.read_long()];
+ 
+         for (int i = 0; i < s.length; i++)
+           s[i] = (String) Vio.read(input, Vio.m_StringValueHelper);
+         return s;
+       }
+     else if (component.equals(int.class))
+       return LongSeqHelper.read(input);
+     else if (component.equals(long.class))
+       return LongLongSeqHelper.read(input);
+     else if (component.equals(double.class))
+       return DoubleSeqHelper.read(input);
+     else if (component.equals(float.class))
+       return FloatSeqHelper.read(input);
+     else if (component.equals(boolean.class))
+       return BooleanSeqHelper.read(input);
+     else if (component.equals(short.class))
+       return ShortSeqHelper.read(input);
+     else if (component.equals(char.class))
+       return CharSeqHelper.read(input);
+     else
+       {
+         // Read others, use reflection.
+         int n = input.read_long();
+ 
+         gnuValueStream s = null;
+ 
+         Serializable array = (Serializable) Array.newInstance(component, n);
+         if (written_as_object())
+           for (int i = 0; i < n; i++)
+             {
+               gnuRuntime g;
+               int position;
+               if (input instanceof gnuValueStream)
+                 {
+                   s = (gnuValueStream) input;
+                   g = s.getRunTime();
+                   position = s.getPosition();
+                 }
+               else
+                 {
+                   g = null;
+                   position = -1;
+                 }
+ 
+               if (input instanceof HeadlessInput)
+                 ((HeadlessInput) input).subsequentCalls = true;
+ 
+               Object o = handler.readValue(input, position, component, null, g);
+               Array.set(array, i, o);
+             }
+         else
+           for (int i = 0; i < n; i++)
+             Array.set(array, i, Vio.read(input, component));
+         return array;
+       }
+   }
+ 
+   /**
+    * Write the array to the input stream.
+    */
+   public void write_value(OutputStream output, Serializable value)
+   {
+     if (output instanceof gnuValueStream)
+       {
+         gnuRuntime r = ((gnuValueStream) output).getRunTime();
+         if (r != null)
+           r.target = null;
+       }
+ 
+     if (value instanceof byte[])
+       OctetSeqHelper.write(output, (byte[]) value);
+     else if (value instanceof String[])
+       {
+         String[] s = (String[]) value;
+         output.write_long(s.length);
+         for (int i = 0; i < s.length; i++)
+           Vio.write(output, s[i], Vio.m_StringValueHelper);
+       }
+     else if (value instanceof int[])
+       LongSeqHelper.write(output, (int[]) value);
+     else if (value instanceof long[])
+       LongLongSeqHelper.write(output, (long[]) value);
+     else if (value instanceof double[])
+       DoubleSeqHelper.write(output, (double[]) value);
+     else if (value instanceof float[])
+       FloatSeqHelper.write(output, (float[]) value);
+     else if (value instanceof boolean[])
+       BooleanSeqHelper.write(output, (boolean[]) value);
+     else if (value instanceof short[])
+       ShortSeqHelper.write(output, (short[]) value);
+     else if (value instanceof char[])
+       CharSeqHelper.write(output, (char[]) value);
+     else
+       {
+         // Write others, use reflection.
+         component = arrayClass.getComponentType();
+ 
+         int n = Array.getLength(value);
+         output.write_long(n);
+         if (written_as_object())
+           for (int i = 0; i < n; i++)
+             {
+               Object o = Array.get(value, i);
+               if (o == null)
+                 output.write_Object(null);
+               else
+                 // CORBA objects have another notation.
+                 handler.writeValue(output, (Serializable) o);
+             }
+         else
+           {
+             for (int i = 0; i < n; i++)
+               Vio.write(output, (Serializable) Array.get(value, i),
+                 component);
+           }
+ 
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/BigEndianInputStream.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/BigEndianInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/BigEndianInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/BigEndianInputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,61 ----
+ /* BigEndianInputStream.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.DataInputStream;
+ import java.io.InputStream;
+ 
+ /**
+  * As java uses Big Endian by default, this class is directly derived
+  * form DataInputStream.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class BigEndianInputStream
+   extends DataInputStream
+   implements AbstractDataInput
+ {
+   /**
+    * Delegates to the parent constructor.
+    */
+   public BigEndianInputStream(InputStream in)
+   {
+     super(in);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/BigEndianOutputStream.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/BigEndianOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/BigEndianOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/BigEndianOutputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,62 ----
+ /* BigEndianOutputStream.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.DataOutputStream;
+ import java.io.OutputStream;
+ 
+ /**
+  * A stream to read the data in Big Endian format. This class is
+  * directly derived from DataOutputStream that uses the Big
+  * Endian.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class BigEndianOutputStream
+   extends DataOutputStream
+   implements AbstractDataOutput
+ {
+   /**
+    * Delegate functionality to the parent constructor.
+    */
+   public BigEndianOutputStream(OutputStream out)
+   {
+     super(out);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/BufferedCdrOutput.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/BufferedCdrOutput.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/BufferedCdrOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/BufferedCdrOutput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,156 ----
+ /* BufferedCdrOutput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.ByteArrayOutputStream;
+ 
+ /**
+  * A CORBA output stream, writing data into the internal buffer ({@link ByteArrayOutputStream}).
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class BufferedCdrOutput
+   extends AbstractCdrOutput
+   implements gnuValueStream
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The byte buffer.
+    */
+   public final AligningOutput buffer;
+ 
+   /**
+    * Creates the instance with the given initial buffer size.
+    * 
+    * @param bufSize the buffer size.
+    */
+   public BufferedCdrOutput(int bufSize)
+   {
+     buffer = new AligningOutput(bufSize);
+     setOutputStream(buffer);
+   }
+ 
+   /**
+    * Creates the instance with the default buffer size.
+    */
+   public BufferedCdrOutput()
+   {
+     buffer = new AligningOutput();
+     setOutputStream(buffer);
+   }
+ 
+   /**
+    * Set the alignment offset, if the index of the first byte in the stream is
+    * different from 0.
+    */
+   public void setOffset(int an_offset)
+   {
+     buffer.setOffset(an_offset);
+   }
+ 
+   /**
+    * Align the curretn position at the given natural boundary.
+    */
+   public void align(int boundary)
+   {
+     buffer.align(boundary);
+   }
+ 
+   /**
+    * Return the input stream that reads the previously written values.
+    */
+   public org.omg.CORBA.portable.InputStream create_input_stream()
+   {
+     BufferredCdrInput in = new BufferredCdrInput(buffer.toByteArray());
+     in.setOrb(orb);
+ 
+     in.setVersion(giop);
+     in.setCodeSet(getCodeSet());
+ 
+     return in;
+   }
+ 
+   /**
+    * Resets (clears) the buffer.
+    */
+   public void reset()
+   {
+     buffer.reset();
+     setOutputStream(buffer);
+   }
+ 
+   /**
+    * Get the current position in the buffer.
+    * 
+    * @return The position in the buffer, taking offset into consideration.
+    */
+   public int getPosition()
+   {
+     return buffer.getPosition();
+   }
+ 
+   /**
+    * Get the associated RunTime.
+    */
+   public gnuRuntime getRunTime()
+   {
+     return runtime;
+   }
+ 
+   /**
+    * Replace the instance of RunTime.
+    */
+   public void setRunTime(gnuRuntime a_runtime)
+   {
+     runtime = a_runtime;
+   }
+ 
+   /**
+    * Seek to the given position.
+    */
+   public void seek(int position)
+   {
+     buffer.seek(position);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/BufferredCdrInput.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/BufferredCdrInput.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/BufferredCdrInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/BufferredCdrInput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,153 ----
+ /* BufferredCdrInput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ 
+ /**
+  * The CDR input stream that reads data from the byte buffer.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class BufferredCdrInput
+   extends AbstractCdrInput 
+   implements gnuValueStream
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The byte array input stream to read data from.
+    */
+   public final AligningInput buffer;
+ 
+   /**
+    * Creates the CDR input stream that reads from the given buffer
+    * array.
+    *
+    * @param a_buffer an array to read from.
+    */
+   public BufferredCdrInput(byte[] a_buffer)
+   {
+     buffer = new AligningInput(a_buffer);
+     setInputStream(buffer);
+   }
+ 
+   /**
+    * Set the alignment offset, if the index of the first byte in the
+    * stream is different from 0.
+    */
+   public void setOffset(int offset)
+   {
+     buffer.setOffset(offset);
+   }
+ 
+   /**
+    * Skip several bytes, aligning the internal pointer on the
+    * selected boundary.
+    */
+   public void align(int alignment)
+   {
+     buffer.align(alignment);
+   }
+ 
+   /**
+    * Mark the current position.
+    * @param ahead
+    */
+   public synchronized void mark(int ahead)
+   {
+     buffer.mark(ahead);
+   }
+ 
+   /**
+    * Checks if marking is supported.
+    * @return
+    */
+   public boolean markSupported()
+   {
+     return buffer.markSupported();
+   }
+ 
+   /**
+    * Resets the stream to the previously marked position.
+    */
+   public void reset()
+   {
+     buffer.reset();
+     setInputStream(buffer);
+   }
+   
+   /**
+    * Get the current position in the buffer.
+    * 
+    * @return The position in the buffer, taking offset into consideration.
+    */
+   public int getPosition()
+   {
+     return buffer.getPosition();
+   }
+   
+   /**
+    * Jump to the given position, taking offset into consideration.
+    */
+   public void seek(int position)
+   {
+     buffer.seek(position);
+     setInputStream(buffer);
+   }
+   
+   /**
+    * Get the associated RunTime.
+    */
+   public gnuRuntime getRunTime()
+   {
+     return runtime;
+   }  
+   
+   /**
+    * Replace the instance of RunTime.
+    */
+   public void setRunTime(gnuRuntime a_runtime)
+   {
+     runtime = a_runtime;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,146 ----
+ /* EncapsulationOutput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * The encapsulated data, as they are defined by CORBA specification.
+  * This includes the extra 0 byte (Big endian) in the beginning.
+  * When written to the parent steam, the encapsulated data are preceeded
+  * by the data length in bytes.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class EncapsulationStream
+   extends AbstractCdrOutput
+ {
+   /**
+    * The Big Endian (most siginificant byte first flag).
+    */
+   public static final byte BIG_ENDIAN = 0;
+ 
+   /**
+    * The Little Endian (least siginificant byte first flag).
+    */
+   public static final byte LITTLE_ENDIAN = 1;
+ 
+   /**
+    * The byte buffer.
+    */
+   public final AligningOutput buffer;
+ 
+   /**
+    * The stream, where the data are being encapsulated.
+    */
+   public final org.omg.CORBA.portable.OutputStream parent;
+ 
+   /**
+    * Create the EncapsulationOutput with the given parent stream
+    * and the specified encoding.
+    */
+   public EncapsulationStream(org.omg.CORBA.portable.OutputStream _parent,
+                             boolean use_big_endian)
+   {
+     super();
+     buffer = new AligningOutput();
+     setOutputStream(buffer);
+     parent = _parent;
+     write(use_big_endian?BIG_ENDIAN:LITTLE_ENDIAN);
+   }
+ 
+   /**
+    * Set the alignment offset, if the index of the first byte in the
+    * stream is different from 0.
+    */
+   public void setOffset(int an_offset)
+   {
+     buffer.setOffset(an_offset);
+   }
+ 
+   /**
+    * Align the curretn position at the given natural boundary.
+    */
+   public void align(int boundary)
+   {
+     buffer.align(boundary);
+   }
+ 
+   /**
+    * Writes the content of the encapsulated output into the parent
+    * buffer.
+    */
+   public void close()
+   {
+     try
+       {
+         parent.write_long(buffer.size());
+         buffer.writeTo(parent);
+       }
+     catch (IOException ex)
+       {
+         InternalError err = new InternalError();
+         err.initCause(ex);
+         throw err;
+       }
+   }
+ 
+   /**
+    * Return the input stream that reads the previously written values.
+    */
+   public org.omg.CORBA.portable.InputStream create_input_stream()
+   {
+     BufferredCdrInput in = new BufferredCdrInput(buffer.toByteArray());
+     in.setOrb(orb);
+ 
+     in.setVersion(giop);
+     in.setCodeSet(getCodeSet());
+ 
+     return in;
+   }
+ 
+   /**
+    * Resets (clears) the buffer.
+    */
+   public void reset()
+   {
+     buffer.reset();
+     setOutputStream(buffer);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/HeadlessInput.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/HeadlessInput.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/HeadlessInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/HeadlessInput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,749 ----
+ /* HeadlessInput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import gnu.CORBA.Minor;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.AnySeqHolder;
+ import org.omg.CORBA.BooleanSeqHolder;
+ import org.omg.CORBA.CharSeqHolder;
+ import org.omg.CORBA.Context;
+ import org.omg.CORBA.DataInputStream;
+ import org.omg.CORBA.DoubleSeqHolder;
+ import org.omg.CORBA.FloatSeqHolder;
+ import org.omg.CORBA.LongLongSeqHolder;
+ import org.omg.CORBA.LongSeqHolder;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.OctetSeqHolder;
+ import org.omg.CORBA.Principal;
+ import org.omg.CORBA.ShortSeqHolder;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.ULongLongSeqHolder;
+ import org.omg.CORBA.ULongSeqHolder;
+ import org.omg.CORBA.UShortSeqHolder;
+ import org.omg.CORBA.WCharSeqHolder;
+ import org.omg.CORBA.portable.BoxedValueHelper;
+ import org.omg.CORBA.portable.InputStream;
+ 
+ import java.io.IOException;
+ import java.io.Serializable;
+ import java.math.BigDecimal;
+ 
+ /**
+  * Substitutes the main stream in factories when the header is already behind.
+  * Overrides methods that may be invoked from the factory, forcing not to read
+  * the header if called first time on this stream.
+  * 
+  * This stream reverts to default behavior if one or more call are made (reading
+  * value types that are nested fields of the value type).
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class HeadlessInput
+   extends org.omg.CORBA_2_3.portable.InputStream
+   implements DataInputStream, gnuValueStream
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * Indicates that no positional information is available.
+    */
+   static final int NONE = -1;
+ 
+   /**
+    * If true, this is not the first call.
+    */
+   public boolean subsequentCalls;
+ 
+   /**
+    * The enclosed stream.
+    */
+   final BufferredCdrInput stream;
+ 
+   /**
+    * Create an instance, reading from the given buffer.
+    * 
+    * @param a_stram a stream from where the data will be read.
+    * @param inheritSettings a stream from that endian and other settings are
+    * inherited.
+    */
+   public HeadlessInput(BufferredCdrInput a_stream, InputStream inheritSettings)
+   {
+     stream = a_stream;
+ 
+     if (inheritSettings instanceof AbstractCdrInput)
+       {
+         AbstractCdrInput t = (AbstractCdrInput) inheritSettings;
+         t.cloneSettings(stream);
+       }
+     else if (stream.orb() == null)
+       stream.setOrb(inheritSettings.orb());
+ 
+     if (inheritSettings instanceof gnuValueStream
+       && stream.getRunTime() == null)
+       {
+         stream.setRunTime(((gnuValueStream) inheritSettings).getRunTime());
+       }
+   }
+ 
+   /**
+    * Tries to read using boxed value helper.
+    */
+   public Serializable read_value(BoxedValueHelper helper)
+   {
+     if (subsequentCalls)
+       return stream.read_value(helper);
+     else
+       {
+         subsequentCalls = true;
+         return helper.read_value(this);
+       }
+   }
+ 
+   /**
+    * Tries to locate a factory using repository id.
+    */
+   public Serializable read_value(String repository_id)
+   {
+     if (subsequentCalls)
+       return stream.read_value(repository_id);
+     else
+       {
+         subsequentCalls = true;
+         Serializable value = (Serializable) Vio.readValue(this, NONE, null,
+           null, repository_id, null, null);
+         return value;
+       }
+   }
+ 
+   /**
+    * Try to read when having an unitialised value.
+    */
+   public Serializable read_value(Serializable value)
+   {
+     if (subsequentCalls)
+       return stream.read_value(value);
+     else
+       {
+         subsequentCalls = true;
+         value = (Serializable) Vio.readValue(this, NONE, value, null, null,
+           null, null);
+         return value;
+       }
+   }
+ 
+   /**
+    * Try to read when having an unitialised value.
+    */
+   public Serializable read_value(Class clz)
+   {
+     if (subsequentCalls)
+       return stream.read_value(clz);
+     else
+       {
+         try
+           {
+             subsequentCalls = true;
+             Serializable value = (Serializable) Vio.instantiateAnyWay(clz);
+             value = (Serializable) Vio.readValue(this, NONE, value, null, null,
+               null, null);
+             return value;
+           }
+         catch (Exception ex)
+           {
+             MARSHAL m = new MARSHAL("Can't read an instance of "
+               + clz.getName());
+             m.minor = Minor.Value;
+             m.initCause(ex);
+             throw m;
+           }
+       }
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public int available()
+     throws IOException
+   {
+     return stream.available();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void close()
+     throws IOException
+   {
+     stream.close();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void mark(int readlimit)
+   {
+     stream.mark(readlimit);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public boolean markSupported()
+   {
+     return stream.markSupported();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public ORB orb()
+   {
+     return stream.orb();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public Object read_abstract_interface()
+   {
+     return stream.read_abstract_interface();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public Object read_abstract_interface(Class clz)
+   {
+     return stream.read_abstract_interface(clz);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public Any read_any()
+   {
+     return stream.read_any();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_boolean_array(boolean[] value, int offset, int length)
+   {
+     stream.read_boolean_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public boolean read_boolean()
+   {
+     return stream.read_boolean();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_char_array(char[] value, int offset, int length)
+   {
+     stream.read_char_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public char read_char()
+   {
+     return stream.read_char();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public Context read_Context()
+   {
+     return stream.read_Context();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_double_array(double[] value, int offset, int length)
+   {
+     stream.read_double_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public double read_double()
+   {
+     return stream.read_double();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public BigDecimal read_fixed()
+   {
+     return stream.read_fixed();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_float_array(float[] value, int offset, int length)
+   {
+     stream.read_float_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public float read_float()
+   {
+     return stream.read_float();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_long_array(int[] value, int offset, int length)
+   {
+     stream.read_long_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public int read_long()
+   {
+     return stream.read_long();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_longlong_array(long[] value, int offset, int length)
+   {
+     stream.read_longlong_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public long read_longlong()
+   {
+     return stream.read_longlong();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public org.omg.CORBA.Object read_Object()
+   {
+     return stream.read_Object();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public org.omg.CORBA.Object read_Object(Class klass)
+   {
+     return stream.read_Object(klass);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_octet_array(byte[] value, int offset, int length)
+   {
+     stream.read_octet_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public byte read_octet()
+   {
+     return stream.read_octet();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public Principal read_Principal()
+   {
+     return stream.read_Principal();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_short_array(short[] value, int offset, int length)
+   {
+     stream.read_short_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public short read_short()
+   {
+     return stream.read_short();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public String read_string()
+   {
+     return stream.read_string();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public TypeCode read_TypeCode()
+   {
+     return stream.read_TypeCode();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_ulong_array(int[] value, int offset, int length)
+   {
+     stream.read_ulong_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public int read_ulong()
+   {
+     return stream.read_ulong();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_ulonglong_array(long[] value, int offset, int length)
+   {
+     stream.read_ulonglong_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public long read_ulonglong()
+   {
+     return stream.read_ulonglong();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_ushort_array(short[] value, int offset, int length)
+   {
+     stream.read_ushort_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public short read_ushort()
+   {
+     return stream.read_ushort();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public Serializable read_value()
+   {
+     return read_value((Serializable) null);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_wchar_array(char[] value, int offset, int length)
+   {
+     stream.read_wchar_array(value, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public char read_wchar()
+   {
+     return stream.read_wchar();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public String read_wstring()
+   {
+     return stream.read_wstring();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public int read()
+     throws IOException
+   {
+     return stream.read();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public int read(byte[] b, int off, int len)
+     throws IOException
+   {
+     return stream.read(b, off, len);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public int read(byte[] b)
+     throws IOException
+   {
+     return stream.read(b);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void reset()
+     throws IOException
+   {
+     stream.reset();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public long skip(long n)
+     throws IOException
+   {
+     return stream.skip(n);
+   }
+ 
+   /**
+    * Get a string representation.
+    */
+   public String toString()
+   {
+     return "HeadlessInput+" + stream.toString();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public String[] _truncatable_ids()
+   {
+     return stream._truncatable_ids();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public Object read_Abstract()
+   {
+     return stream.read_Abstract();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_any_array(AnySeqHolder holder, int offset, int length)
+   {
+     stream.read_any_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_boolean_array(BooleanSeqHolder holder, int offset, int length)
+   {
+     stream.read_boolean_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_char_array(CharSeqHolder holder, int offset, int length)
+   {
+     stream.read_char_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_double_array(DoubleSeqHolder holder, int offset, int length)
+   {
+     stream.read_double_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_float_array(FloatSeqHolder holder, int offset, int length)
+   {
+     stream.read_float_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_long_array(LongSeqHolder holder, int offset, int length)
+   {
+     stream.read_long_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_longlong_array(LongLongSeqHolder holder, int offset,
+     int length)
+   {
+     stream.read_longlong_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_octet_array(OctetSeqHolder holder, int offset, int length)
+   {
+     stream.read_octet_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_short_array(ShortSeqHolder holder, int offset, int length)
+   {
+     stream.read_short_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_ulong_array(ULongSeqHolder holder, int offset, int length)
+   {
+     stream.read_ulong_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_ulonglong_array(ULongLongSeqHolder holder, int offset,
+     int length)
+   {
+     stream.read_ulonglong_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_ushort_array(UShortSeqHolder holder, int offset, int length)
+   {
+     stream.read_ushort_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to read_value.
+    */
+   public Serializable read_Value()
+   {
+     return read_value();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void read_wchar_array(WCharSeqHolder holder, int offset, int length)
+   {
+     stream.read_wchar_array(holder, offset, length);
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public int getPosition()
+   {
+     return stream.getPosition();
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public gnuRuntime getRunTime()
+   {
+     return stream.runtime;
+   }
+ 
+   /**
+    * Replace the instance of RunTime.
+    */
+   public void setRunTime(gnuRuntime a_runtime)
+   {
+     stream.runtime = a_runtime;
+   }
+ 
+   /**
+    * Delegates functionality to the underlying stream.
+    */
+   public void seek(int position)
+   {
+     stream.seek(position);
+   }
+ 
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/IDLTypeHelper.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/IDLTypeHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/IDLTypeHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/IDLTypeHelper.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,169 ----
+ /* IDLTypeHelper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import gnu.CORBA.Minor;
+ 
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.portable.BoxedValueHelper;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ import java.io.Serializable;
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Modifier;
+ 
+ /**
+  * Handles case when the CORBA IDL type with the known helper is wrapped into
+  * Value type.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class IDLTypeHelper
+   implements BoxedValueHelper
+ {
+   /**
+    * A helper class.
+    */
+   protected Class helper;
+ 
+   /**
+    * Argument values for Helper.id().
+    */
+   static final Object[] ARGS_ID_V = new Object[0];
+ 
+   /**
+    * Argument types for Helper.id()).
+    */
+   static final Class[] ARGS_ID = new Class[0];
+ 
+   /**
+    * Argument types for Helper.read.
+    */
+   static final Class[] ARGS_READ = new Class[] { org.omg.CORBA.portable.InputStream.class };
+ 
+   /**
+    * Create an IDLTypeHelper that works via given helper class.
+    */
+   public IDLTypeHelper(Class a_helperClass)
+   {
+     helper = a_helperClass;
+   }
+ 
+   /**
+    * Get the Id, returned by this helper (use reflection).
+    */
+   public String get_id()
+   {
+     try
+       {
+         Method m = helper.getMethod("id", ARGS_ID);
+         return (String) m.invoke(null, ARGS_ID_V);
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL(msg() + " id()");
+         m.minor = Minor.Boxed;
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ 
+   /**
+    * Read an instance from the stream.
+    */
+   public Serializable read_value(InputStream input)
+   {
+     try
+       {
+         Method m = helper.getMethod("read", ARGS_READ);
+         return (Serializable) m.invoke(null, new Object[] { input });
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL(msg() + " read(..)");
+         m.minor = Minor.Boxed;        
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ 
+   /**
+    * Write the instance to the stream.
+    */
+   public void write_value(OutputStream output, Serializable value)
+   {
+     try
+       {
+         Method[] m = helper.getMethods();
+ 
+         for (int i = 0; i < m.length; i++)
+           {
+             if (m[i].getName().equals("write")
+               && ((m[i].getModifiers() & Modifier.STATIC) != 0))
+               {
+                 Class[] p = m[i].getParameterTypes();
+ 
+                 if (p.length == 2 && OutputStream.class.isAssignableFrom(p[0])
+                   && p[1].isAssignableFrom(value.getClass()))
+                   {
+                     m[i].invoke(null, new Object[] { output, value });
+                     return;
+                   }
+               }
+           }
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL(msg() + " write(..)");
+         m.minor = Minor.Boxed;        
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ 
+   /**
+    * Create the start of message for exceptions.
+    */
+   String msg()
+   {
+     return "Failed calling " + helper.getName() + " method: ";
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/LittleEndianInputStream.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/LittleEndianInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/LittleEndianInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/LittleEndianInputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,633 ----
+ /* LittleEndianInputStream.java --
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.DataInput;
+ import java.io.EOFException;
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.PushbackInputStream;
+ 
+ /**
+  * This class reads data in the Little Endian format. It reuses
+  * code from GNU Classpath DataInputStream.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class LittleEndianInputStream
+   extends FilterInputStream
+   implements AbstractDataInput
+ {
+   // Byte buffer, used to make primitive read calls more efficient.
+   byte[] buf = new byte[ 8 ];
+ 
+   /**
+    * This constructor initializes a new <code>DataInputStream</code>
+    * to read from the specified subordinate stream.
+    *
+    * @param in The subordinate <code>InputStream</code> to read from
+    */
+   public LittleEndianInputStream(InputStream in)
+   {
+     super(in);
+   }
+ 
+   /**
+    * This method reads bytes from the underlying stream into the specified
+    * byte array buffer.  It will attempt to fill the buffer completely, but
+    * may return a short count if there is insufficient data remaining to be
+    * read to fill the buffer.
+    *
+    * @param b The buffer into which bytes will be read.
+    *
+    * @return The actual number of bytes read, or -1 if end of stream reached
+    * before reading any bytes.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public int read(byte[] b)
+            throws IOException
+   {
+     return in.read(b, 0, b.length);
+   }
+ 
+   /**
+    * This method reads bytes from the underlying stream into the specified
+    * byte array buffer.  It will attempt to read <code>len</code> bytes and
+    * will start storing them at position <code>off</code> into the buffer.
+    * This method can return a short count if there is insufficient data
+    * remaining to be read to complete the desired read length.
+    *
+    * @param b The buffer into which bytes will be read.
+    * @param off The offset into the buffer to start storing bytes.
+    * @param len The requested number of bytes to read.
+    *
+    * @return The actual number of bytes read, or -1 if end of stream reached
+    * before reading any bytes.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public int read(byte[] b, int off, int len)
+            throws IOException
+   {
+     return in.read(b, off, len);
+   }
+ 
+   /**
+    * This method reads a Java boolean value from an input stream.  It does
+    * so by reading a single byte of data.  If that byte is zero, then the
+    * value returned is <code>false</code>.  If the byte is non-zero, then
+    * the value returned is <code>true</code>.
+    * <p>
+    * This method can read a <code>boolean</code> written by an object
+    * implementing the <code>writeBoolean()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>boolean</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading
+    * the boolean
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeBoolean
+    */
+   public boolean readBoolean()
+                       throws IOException
+   {
+     return convertToBoolean(in.read());
+   }
+ 
+   /**
+    * This method reads a Java byte value from an input stream.  The value
+    * is in the range of -128 to 127.
+    * <p>
+    * This method can read a <code>byte</code> written by an object
+    * implementing the <code>writeByte()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>byte</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the byte
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeByte
+    */
+   public byte readByte()
+                 throws IOException
+   {
+     return convertToByte(in.read());
+   }
+ 
+   /**
+    * This method reads a Java <code>char</code> value from an input stream.
+    * It operates by reading two bytes from the stream and converting them to
+    * a single 16-bit Java <code>char</code>.  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code>
+    * represent the first and second byte read from the stream
+    * respectively, they will be transformed to a <code>char</code> in
+    * the following manner:
+    * <p>
+    * <code>(char)(((byte1 &amp; 0xFF) &lt;&lt; 8) | (byte2 &amp; 0xFF)</code>
+    * <p>
+    * This method can read a <code>char</code> written by an object
+    * implementing the <code>writeChar()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>char</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the char
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeChar
+    */
+   public char readChar()
+                 throws IOException
+   {
+     readFully(buf, 0, 2);
+     return convertToChar(buf);
+   }
+ 
+   /**
+    * This method reads a Java double value from an input stream.  It operates
+    * by first reading a <code>long</code> value from the stream by calling the
+    * <code>readLong()</code> method in this interface, then converts
+    * that <code>long</code> to a <code>double</code> using the
+    * <code>longBitsToDouble</code> method in the class
+    * <code>java.lang.Double</code>
+    * <p>
+    * This method can read a <code>double</code> written by an object
+    * implementing the <code>writeDouble()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>double</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading
+    * the double
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeDouble
+    * @see java.lang.Double#longBitsToDouble
+    */
+   public double readDouble()
+                     throws IOException
+   {
+     return Double.longBitsToDouble(readLong());
+   }
+ 
+   /**
+    * This method reads a Java float value from an input stream.  It
+    * operates by first reading an <code>int</code> value from the
+    * stream by calling the <code>readInt()</code> method in this
+    * interface, then converts that <code>int</code> to a
+    * <code>float</code> using the <code>intBitsToFloat</code> method
+    * in the class <code>java.lang.Float</code>
+    * <p>
+    * This method can read a <code>float</code> written by an object
+    * implementing the <code>writeFloat()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>float</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the float
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeFloat
+    * @see java.lang.Float#intBitsToFloat
+    */
+   public float readFloat()
+                   throws IOException
+   {
+     return Float.intBitsToFloat(readInt());
+   }
+ 
+   /**
+    * This method reads raw bytes into the passed array until the array is
+    * full.  Note that this method blocks until the data is available and
+    * throws an exception if there is not enough data left in the stream to
+    * fill the buffer.  Note also that zero length buffers are permitted.
+    * In this case, the method will return immediately without reading any
+    * bytes from the stream.
+    *
+    * @param b The buffer into which to read the data
+    *
+    * @exception EOFException If end of file is reached before filling the
+    * buffer
+    * @exception IOException If any other error occurs
+    */
+   public void readFully(byte[] b)
+                  throws IOException
+   {
+     readFully(b, 0, b.length);
+   }
+ 
+   /**
+    * This method reads raw bytes into the passed array <code>buf</code>
+    * starting
+    * <code>offset</code> bytes into the buffer.  The number of bytes read
+    * will be
+    * exactly <code>len</code>.  Note that this method blocks until the data is
+    * available and throws an exception if there is not enough data left in
+    * the stream to read <code>len</code> bytes.  Note also that zero length
+    * buffers are permitted.  In this case, the method will return immediately
+    * without reading any bytes from the stream.
+    *
+    * @param buf The buffer into which to read the data
+    * @param offset The offset into the buffer to start storing data
+    * @param len The number of bytes to read into the buffer
+    *
+    * @exception EOFException If end of file is reached before filling the
+    * buffer
+    * @exception IOException If any other error occurs
+    */
+   public void readFully(byte[] buf, int offset, int len)
+                  throws IOException
+   {
+     if (len < 0)
+       throw new IndexOutOfBoundsException("Negative length: " + len);
+ 
+     while (len > 0)
+       {
+         // in.read will block until some data is available.
+         int numread = in.read(buf, offset, len);
+         if (numread < 0)
+           throw new EOFException();
+         len -= numread;
+         offset += numread;
+       }
+   }
+ 
+   /**
+    * This method reads a Java <code>int</code> value from an input stream
+    * It operates by reading four bytes from the stream and converting them to
+    * a single Java <code>int</code>.  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte4</code> represent
+    * the first four bytes read from the stream, they will be
+    * transformed to an <code>int</code> in the following manner:
+    * <p>
+    * <code>(int)(((byte1 &amp; 0xFF) &lt;&lt; 24) + ((byte2 &amp; 0xFF) &lt;&lt; 16) +
+    * ((byte3 &amp; 0xFF)&lt;&lt; 8) + (byte4 &amp; 0xFF)))</code>
+    * <p>
+    * The value returned is in the range of -2147483648 to 2147483647.
+    * <p>
+    * This method can read an <code>int</code> written by an object
+    * implementing the <code>writeInt()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>int</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the int
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeInt
+    */
+   public int readInt()
+               throws IOException
+   {
+     readFully(buf, 0, 4);
+     return convertToInt(buf);
+   }
+ 
+   /**
+    * This method reads the next line of text data from an input
+    * stream.  It operates by reading bytes and converting those bytes
+    * to <code>char</code> values by treating the byte read as the low
+    * eight bits of the <code>char</code> and using 0 as the high eight
+    * bits.  Because of this, it does not support the full 16-bit
+    * Unicode character set.
+    * <p>
+    * The reading of bytes ends when either the end of file or a line
+    * terminator is encountered.  The bytes read are then returned as a
+    * <code>String</code> A line terminator is a byte sequence
+    * consisting of either <code>\r</code>, <code>\n</code> or
+    * <code>\r\n</code>.  These termination charaters are discarded and
+    * are not returned as part of the string.
+    * <p>
+    * This method can read data that was written by an object implementing the
+    * <code>writeLine()</code> method in <code>DataOutput</code>.
+    *
+    * @return The line read as a <code>String</code>
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataOutput
+    *
+    * @deprecated
+    */
+   public String readLine()
+                   throws IOException
+   {
+     StringBuffer strb = new StringBuffer();
+ 
+     while (true)
+       {
+         int c = in.read();
+         if (c == -1) // got an EOF
+           return strb.length() > 0 ? strb.toString() : null;
+         if (c == '\r')
+           {
+             int next_c = in.read();
+             if (next_c != '\n' && next_c != -1)
+               {
+                 if (!(in instanceof PushbackInputStream))
+                   in = new PushbackInputStream(in);
+                 ((PushbackInputStream) in).unread(next_c);
+               }
+             break;
+           }
+         if (c == '\n')
+           break;
+         strb.append((char) c);
+       }
+ 
+     return strb.length() > 0 ? strb.toString() : "";
+   }
+ 
+   /**
+    * This method reads a Java <code>long</code> value from an input stream
+    * It operates by reading eight bytes from the stream and converting them to
+    * a single Java <code>long</code>.  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte8</code> represent
+    * the first eight bytes read from the stream, they will be
+    * transformed to an <code>long</code> in the following manner:
+    * <p>
+    * <code>(long)(((byte1 &amp; 0xFF) &lt;&lt; 56) + ((byte2 &amp; 0xFF) &lt;&lt; 48) +
+    * ((byte3 &amp; 0xFF) &lt;&lt; 40) + ((byte4 &amp; 0xFF) &lt;&lt; 32) +
+    * ((byte5 &amp; 0xFF) &lt;&lt; 24) + ((byte6 &amp; 0xFF) &lt;&lt; 16) +
+    * ((byte7 &amp; 0xFF) &lt;&lt; 8) + (byte8 &amp; 0xFF)))
+    * </code>
+    * <p>
+    * The value returned is in the range of -9223372036854775808 to
+    * 9223372036854775807.
+    * <p>
+    * This method can read an <code>long</code> written by an object
+    * implementing the <code>writeLong()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>long</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the long
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeLong
+    */
+   public long readLong()
+                 throws IOException
+   {
+     readFully(buf, 0, 8);
+     return convertToLong(buf);
+   }
+ 
+   /**
+    * This method reads a signed 16-bit value into a Java in from the
+    * stream.  It operates by reading two bytes from the stream and
+    * converting them to a single 16-bit Java <code>short</code>.  The
+    * two bytes are stored most significant byte first (i.e., "big
+    * endian") regardless of the native host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code>
+    * represent the first and second byte read from the stream
+    * respectively, they will be transformed to a <code>short</code>. in
+    * the following manner:
+    * <p>
+    * <code>(short)(((byte1 &amp; 0xFF) &lt;&lt; 8) | (byte2 &amp; 0xFF))</code>
+    * <p>
+    * The value returned is in the range of -32768 to 32767.
+    * <p>
+    * This method can read a <code>short</code> written by an object
+    * implementing the <code>writeShort()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>short</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeShort
+    */
+   public short readShort()
+                   throws IOException
+   {
+     readFully(buf, 0, 2);
+     return convertToShort(buf);
+   }
+ 
+   /**
+    * This method reads 8 unsigned bits into a Java <code>int</code>
+    * value from the stream. The value returned is in the range of 0 to
+    * 255.
+    * <p>
+    * This method can read an unsigned byte written by an object
+    * implementing the <code>writeUnsignedByte()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The unsigned bytes value read as a Java <code>int</code>.
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeByte
+    */
+   public int readUnsignedByte()
+                        throws IOException
+   {
+     return convertToUnsignedByte(in.read());
+   }
+ 
+   /**
+    * This method reads 16 unsigned bits into a Java int value from the stream.
+    * It operates by reading two bytes from the stream and converting them to
+    * a single Java <code>int</code>  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code>
+    * represent the first and second byte read from the stream
+    * respectively, they will be transformed to an <code>int</code> in
+    * the following manner:
+    * <p>
+    * <code>(int)(((byte1 &amp; 0xFF) &lt;&lt; 8) + (byte2 &amp; 0xFF))</code>
+    * <p>
+    * The value returned is in the range of 0 to 65535.
+    * <p>
+    * This method can read an unsigned short written by an object
+    * implementing the <code>writeUnsignedShort()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The unsigned short value read as a Java <code>int</code>
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeShort
+    */
+   public int readUnsignedShort()
+                         throws IOException
+   {
+     readFully(buf, 0, 2);
+     return convertToUnsignedShort(buf);
+   }
+ 
+   /**
+    * This method attempts to skip and discard the specified number of bytes
+    * in the input stream.  It may actually skip fewer bytes than requested.
+    * This method will not skip any bytes if passed a negative number of bytes
+    * to skip.
+    *
+    * @param n The requested number of bytes to skip.
+    *
+    * @return The requested number of bytes to skip.
+    *
+    * @exception IOException If an error occurs.
+    * @specnote The JDK docs claim that this returns the number of bytes
+    *  actually skipped. The JCL claims that this method can throw an
+    *  EOFException. Neither of these appear to be true in the JDK 1.3's
+    *  implementation. This tries to implement the actual JDK behaviour.
+    */
+   public int skipBytes(int n)
+                 throws IOException
+   {
+     if (n <= 0)
+       return 0;
+     try
+       {
+         return (int) in.skip(n);
+       }
+     catch (EOFException x)
+       {
+         // do nothing.
+       }
+     return n;
+   }
+ 
+   protected boolean convertToBoolean(int b)
+                               throws EOFException
+   {
+     if (b < 0)
+       throw new EOFException();
+ 
+     return (b != 0);
+   }
+ 
+   protected byte convertToByte(int i)
+                         throws EOFException
+   {
+     if (i < 0)
+       throw new EOFException();
+ 
+     return (byte) i;
+   }
+ 
+   protected int convertToUnsignedByte(int i)
+                                throws EOFException
+   {
+     if (i < 0)
+       throw new EOFException();
+ 
+     return (i & 0xFF);
+   }
+ 
+   /**
+    * Less significant byte first.
+    */
+   protected char convertToChar(byte[] buf)
+   {
+     return (char) ((buf [ 1 ] << 8) | (buf [ 0 ] & 0xff));
+   }
+ 
+   /**
+    * Less significant byte first.
+    */
+   protected short convertToShort(byte[] buf)
+   {
+     return (short) ((buf [ 1 ] << 8) | (buf [ 0 ] & 0xff));
+   }
+ 
+   /**
+    * Less significant byte first.
+    */
+   protected int convertToUnsignedShort(byte[] buf)
+   {
+     return (((buf [ 1 ] & 0xff) << 8) | (buf [ 0 ] & 0xff));
+   }
+ 
+   /**
+    * Less significant byte first.
+    */
+   protected int convertToInt(byte[] buf)
+   {
+     return (((buf [ 3 ] & 0xff) << 24) | ((buf [ 2 ] & 0xff) << 16) |
+            ((buf [ 1 ] & 0xff) << 8) | (buf [ 0 ] & 0xff));
+   }
+ 
+   /**
+    * Less significant byte first.
+    */
+   protected long convertToLong(byte[] buf)
+   {
+     return (((long) (buf [ 7 ] & 0xff) << 56) |
+            ((long) (buf [ 6 ] & 0xff) << 48) |
+            ((long) (buf [ 5 ] & 0xff) << 40) |
+            ((long) (buf [ 4 ] & 0xff) << 32) |
+            ((long) (buf [ 3 ] & 0xff) << 24) |
+            ((long) (buf [ 2 ] & 0xff) << 16) |
+            ((long) (buf [ 1 ] & 0xff) << 8) | ((long) (buf [ 0 ] & 0xff)));
+   }
+ 
+   /**
+    * This should never be called.
+    *
+    * @throws InternalError, always.
+    */
+   public String readUTF()
+   {
+     throw new InternalError();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/LittleEndianOutputStream.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/LittleEndianOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/LittleEndianOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/LittleEndianOutputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,253 ----
+ /* LittleEndianOutputStream.java --
+    Copyright (C) 1998, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.io.FilterOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * This stream writes data in the Little Endian format
+  * (less significant byte first). This is opposite to the
+  * usual data presentation in java platform.
+  *
+  * This class reuses code from DataOutputStream.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  */
+ public class LittleEndianOutputStream
+   extends FilterOutputStream
+   implements AbstractDataOutput
+ {
+   /**
+    * This method initializes an instance of <code>DataOutputStream</code> to
+    * write its data to the specified underlying <code>OutputStream</code>
+    *
+    * @param out The subordinate <code>OutputStream</code> to which this
+    * object will write
+    */
+   public LittleEndianOutputStream(OutputStream out)
+   {
+     super(out);
+   }
+ 
+   /**
+    * This method flushes any unwritten bytes to the underlying stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public void flush()
+              throws IOException
+   {
+     out.flush();
+   }
+ 
+   /**
+    * This method writes the specified byte (passed as an <code>int</code>)
+    * to the underlying output stream.
+    *
+    * @param value The <code>byte</code> to write, passed as an <code>int</code>.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public synchronized void write(int value)
+                           throws IOException
+   {
+     out.write(value);
+   }
+ 
+   /**
+    * This method writes <code>len</code> bytes from the specified byte array
+    * <code>buf</code> starting at position <code>offset</code> into the
+    * buffer to the underlying output stream.
+    *
+    * @param buf The byte array to write from.
+    * @param offset The index into the byte array to start writing from.
+    * @param len The number of bytes to write.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public synchronized void write(byte[] buf, int offset, int len)
+                           throws IOException
+   {
+     out.write(buf, offset, len);
+   }
+ 
+   /**
+    * This method writes a Java boolean value to an output stream.  If
+    * <code>value</code> is <code>true</code>, a byte with the value of
+    * 1 will be written, otherwise a byte with the value of 0 will be
+    * written.
+    *
+    * The value written can be read using the <code>readBoolean</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>boolean</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readBoolean
+    */
+   public void writeBoolean(boolean value)
+                     throws IOException
+   {
+     write(value ? 1 : 0);
+   }
+ 
+   /**
+    * This method writes a Java byte value to an output stream.  The
+    * byte to be written will be in the lowest 8 bits of the
+    * <code>int</code> value passed.
+    *
+    * The value written can be read using the <code>readByte</code> or
+    * <code>readUnsignedByte</code> methods in <code>DataInput</code>.
+    *
+    * @param value The <code>byte</code> to write to the stream, passed as
+    * the low eight bits of an <code>int</code>.
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readByte
+    * @see DataInput#readUnsignedByte
+    */
+   public void writeByte(int value)
+                  throws IOException
+   {
+     write(value & 0xff);
+   }
+ 
+   /**
+    * This method writes a Java short value to an output stream.
+    *
+    * @param value The <code>short</code> value to write to the stream,
+    * passed as an <code>int</code>.
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized void writeShort(int value)
+                                throws IOException
+   {
+     write((byte) (0xff & value));
+     write((byte) (0xff & (value >> 8)));
+   }
+ 
+   /**
+    * Writes char in Little Endian.
+    */
+   public synchronized void writeChar(int value)
+                               throws IOException
+   {
+     write((byte) (0xff & value));
+     write((byte) (0xff & (value >> 8)));
+   }
+ 
+   /**
+    * Writes int in Little Endian.
+    */
+   public synchronized void writeInt(int value)
+                              throws IOException
+   {
+     write((byte) (0xff & value));
+     write((byte) (0xff & (value >> 8)));
+     write((byte) (0xff & (value >> 16)));
+     write((byte) (0xff & (value >> 24)));
+   }
+ 
+   /**
+    * Writes long in Little Endian.
+    */
+   public synchronized void writeLong(long value)
+                               throws IOException
+   {
+     write((byte) (0xff & value));
+     write((byte) (0xff & (value >> 8)));
+     write((byte) (0xff & (value >> 16)));
+     write((byte) (0xff & (value >> 24)));
+     write((byte) (0xff & (value >> 32)));
+     write((byte) (0xff & (value >> 40)));
+     write((byte) (0xff & (value >> 48)));
+     write((byte) (0xff & (value >> 56)));
+   }
+ 
+   /**
+    * This method writes a Java <code>float</code> value to the stream.  This
+    * value is written by first calling the method
+    * <code>Float.floatToIntBits</code>
+    * to retrieve an <code>int</code> representing the floating point number,
+    * then writing this <code>int</code> value to the stream exactly the same
+    * as the <code>writeInt()</code> method does.
+    *
+    * @param value The <code>float</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see writeInt
+    * @see DataInput#readFloat
+    * @see Float#floatToIntBits
+    */
+   public void writeFloat(float value)
+                   throws IOException
+   {
+     writeInt(Float.floatToIntBits(value));
+   }
+ 
+   /**
+    * This method writes a Java <code>double</code> value to the stream.  This
+    * value is written by first calling the method
+    * <code>Double.doubleToLongBits</code>
+    * to retrieve an <code>long</code> representing the floating point number,
+    * then writing this <code>long</code> value to the stream exactly the same
+    * as the <code>writeLong()</code> method does.
+    *
+    * @param value The <code>double</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see writeLong
+    * @see DataInput#readDouble
+    * @see Double#doubleToLongBits
+    */
+   public void writeDouble(double value)
+                    throws IOException
+   {
+     writeLong(Double.doubleToLongBits(value));
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/UnknownExceptionCtxHandler.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/UnknownExceptionCtxHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/UnknownExceptionCtxHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/UnknownExceptionCtxHandler.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,292 ----
+ /* UnknownExceptionCtxHandler.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.ObjectCreator;
+ import gnu.CORBA.GIOP.ServiceContext;
+ 
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.StringValueHelper;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ import java.lang.reflect.Constructor;
+ import java.util.StringTokenizer;
+ 
+ import javax.rmi.CORBA.Util;
+ 
+ /**
+  * Reads the data about an unknown exception from the UnknownExceptionInfo.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class UnknownExceptionCtxHandler
+   extends Vio
+ {
+   /**
+    * Encode exception and add its recored to the message service contexts.
+    */
+   public static ServiceContext[] addExceptionContext(ServiceContext[] current,
+     Throwable exception, Object details)
+   {
+     try
+       {
+         ServiceContext[] c = new ServiceContext[current.length + 1];
+         if (current.length > 0)
+           System.arraycopy(current, 0, c, 0, current.length);
+ 
+         BufferedCdrOutput output = new BufferedCdrOutput();
+ 
+         if (details instanceof OutputStream)
+           output.setOrb(((OutputStream) output).orb());
+ 
+         if (details instanceof AbstractCdrOutput)
+           ((AbstractCdrOutput) details).cloneSettings(output);
+ 
+         write(output, exception);
+ 
+         ServiceContext xc = new ServiceContext();
+         xc.context_id = ServiceContext.UnknownExceptionInfo;
+         xc.context_data = output.buffer.toByteArray();
+         c[current.length] = xc;
+         return c;
+       }
+     catch (Exception ex)
+       {
+         ex.printStackTrace();
+         return current;
+       }
+   }
+ 
+   /**
+    * Write data about unknown exception.
+    */
+   public static void write(BufferedCdrOutput output, Throwable t)
+   {
+     t.fillInStackTrace();
+     output.write_Value(t);
+   }
+ 
+   /**
+    * Read the data about an unknown exception from the UnknownExceptionInfo.
+    * Following the documentation, this must be just value type, but it seems
+    * that in Sun's implementation is is not, as starts from 0x0. For value type,
+    * this would be null.
+    * 
+    * TODO Implement reading and writing in Sun format, making Classpath IIOP
+    * interoperable with Sun's implementation. Current inmplementation reads and
+    * reproduces the exception class type only.
+    * 
+    * @param input the input stream to read the context (orb and other settings
+    * are inherited from the main stream that received the message).
+    * 
+    * @param contexts all service contexts that were present in the message.
+    * 
+    * @return the Throwable, extracted from context, on null, if this has failed.
+    */
+   public static Throwable read(BufferredCdrInput input, ServiceContext[] contexts)
+   {
+     input.mark(Integer.MAX_VALUE);
+ 
+     int h = input.read_long();
+     if (h == 0)
+       {
+         // This block reads exception info in the Sun specific format.
+         // (currently we read the exception name only).
+         try
+           {
+             // We may need to jump back if the value is read via value
+             // factory.
+             input.mark(512);
+ 
+             int value_tag = input.read_long();
+             checkTag(value_tag);
+ 
+             String codebase = null;
+             String[] ids = null;
+             String id = null;
+ 
+             // Check for the agreed null value.
+             if (value_tag == vt_NULL)
+               return null;
+             else if (value_tag == vt_INDIRECTION)
+               return (Throwable) readIndirection(input);
+             else
+               {
+                 // Read the value.
+                 if ((value_tag & vf_CODEBASE) != 0)
+                   {
+                     // The codebase is present. The codebase is a space
+                     // separated list of URLs from where the implementing
+                     // code can be downloaded.
+                     codebase = read_string(input);
+                   }
+ 
+                 if ((value_tag & vf_MULTIPLE_IDS) != 0)
+                   {
+                     // Multiple supported repository ids are present.
+                     ids = read_string_array(input);
+                   }
+                 else if ((value_tag & vf_ID) != 0)
+                   {
+                     // Single supported repository id is present.
+                     id = read_string(input);
+                   }
+               }
+ 
+             java.lang.Object ox = createInstance(id, ids, codebase);
+ 
+             return (Throwable) ox;
+           }
+         catch (Exception ex)
+           {
+             ex.printStackTrace();
+             return null;
+           }
+       }
+     else
+       {
+         input.reset();
+         // Read as defined in OMG documentation.
+         return (Throwable) input.read_Value();
+       }
+   }
+ 
+   /**
+    * Load exception by name and create the instance. The reason why this is
+    * different from Vio is because some exceptions have no parameterless
+    * constructor, but have a constructor with the string parameter instead.
+    */
+   static Object createInstance(String id, String[] ids, String codebase)
+   {
+     Object o = _createInstance(id, codebase);
+ 
+     if (ids != null)
+       for (int i = 0; i < ids.length && o == null; i++)
+         o = _createInstance(ids[i], codebase);
+     return o;
+   }
+ 
+   static Object _createInstance(String id, String codebase)
+   {
+     if (id == null)
+       return null;
+     if (id.equals(StringValueHelper.id()))
+       return "";
+     StringTokenizer st = new StringTokenizer(id, ":");
+ 
+     String prefix = st.nextToken();
+     if (prefix.equalsIgnoreCase("IDL"))
+       return ObjectCreator.Idl2Object(id);
+     else if (prefix.equalsIgnoreCase("RMI"))
+       {
+         String className = st.nextToken();
+         String hashCode = st.nextToken();
+         String sid = null;
+         if (st.hasMoreElements())
+           sid = st.nextToken();
+ 
+         try
+           {
+             Class objectClass = Util.loadClass(className, codebase,
+               Vio.class.getClassLoader());
+ 
+             String rid = ObjectCreator.getRepositoryId(objectClass);
+ 
+             if (!rid.equals(id))
+               {
+                 // If direct string comparison fails, compare by meaning.
+                 StringTokenizer st2 = new StringTokenizer(rid, ":");
+                 if (!st2.nextToken().equals("RMI"))
+                   throw new InternalError("RMI format expected: '" + rid + "'");
+                 if (!st2.nextToken().equals(className))
+                   throwIt("Class name mismatch", id, rid, null);
+ 
+                 try
+                   {
+                     long h1 = Long.parseLong(hashCode, 16);
+                     long h2 = Long.parseLong(st2.nextToken(), 16);
+                     if (h1 != h2)
+                       throwIt("Hashcode mismatch", id, rid, null);
+ 
+                     if (sid != null && st2.hasMoreTokens())
+                       {
+                         long s1 = Long.parseLong(hashCode, 16);
+                         long s2 = Long.parseLong(st2.nextToken(), 16);
+                         if (s1 != s2)
+                           throwIt("serialVersionUID mismatch", id, rid, null);
+                       }
+                   }
+                 catch (NumberFormatException e)
+                   {
+                     throwIt("Invalid hashcode or svuid format: ", id, rid, e);
+                   }
+               }
+ 
+             // Some RemoteExceptions have no public parameterless constructor,
+             // but they have constructor taking string as parameter.
+             try
+               {
+                 return objectClass.newInstance();
+               }
+             catch (Exception ex)
+               {
+                 // Try instantiate passing string as parameter.
+                 Constructor c = objectClass.getConstructor(new Class[] { String.class });
+                 return c.newInstance(new Object[] { "<message unavailable>" });
+               }
+           }
+         catch (MARSHAL m)
+           {
+             m.minor = Minor.Instantiation;
+             throw m;
+           }
+         catch (Exception ex)
+           {
+             MARSHAL m = new MARSHAL("Unable to instantiate " + id);
+             m.minor = Minor.Instantiation;
+             m.initCause(ex);
+             throw m;
+           }
+       }
+     else
+       throw new NO_IMPLEMENT("Unsupported prefix " + prefix + ":");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/VMVio.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/VMVio.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/VMVio.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/VMVio.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,101 ----
+ /* VMVio.java -- Native operations, required by value IO.
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ /**
+  * This is a temporary replacement for the native call that would allocate 
+  * objects without public constructors. The replacement only allocates
+  * objects with public parameterless constructor and objects with public
+  * constructor taking string (like some Throwables).
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  * 
+  * TODO FIXME replace by native call like in VMObjectInputStream.
+  * Required modification of Classpath the build system.
+  */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import java.lang.reflect.Constructor;
+ 
+ public class VMVio
+ {
+   /**
+    * Allocates a new Object of type clazz but without running the default
+    * constructor on it. It then calls the given constructor on it. The given
+    * constructor method comes from the constr_clazz which is a super class of
+    * the given clazz.
+    */
+   public static Object allocateObject(Class clazz, Class constr_clazz,
+     Constructor constructor)
+     throws InstantiationException
+   {
+     try
+       {
+         Constructor c = clazz.getConstructor(new Class[0]);
+         c.setAccessible(true);
+         return c.newInstance(new Object[0]);
+       }
+     catch (Exception ex)
+       {
+         try
+           {
+             Constructor c = clazz.getConstructor(new Class[] { String.class });
+             return c.newInstance(new Object[] { "" });
+           }
+         catch (Exception ex2)
+           {
+             Constructor c[] = clazz.getConstructors();
+ 
+             for (int i = 0; i < c.length; i++)
+               {
+                 try
+                   {
+                     c[i].setAccessible(true);
+                     Class[] args = c[i].getParameterTypes();
+                     return c[i].newInstance(new Object[args.length]);
+                   }
+                 catch (Exception ex3)
+                   {
+                     // Try another one.
+                   }
+               }
+           }
+         throw new InstantiationException(clazz.getName());
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/Vio.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/Vio.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/Vio.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/Vio.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1473 ----
+ /* Vio.java -- Value type IO operations.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.ObjectCreator;
+ 
+ import org.omg.CORBA.CustomMarshal;
+ import org.omg.CORBA.DataInputStream;
+ import org.omg.CORBA.DataOutputStream;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.StringSeqHelper;
+ import org.omg.CORBA.StringValueHelper;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.WStringValueHelper;
+ import org.omg.CORBA.portable.BoxedValueHelper;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.CORBA.portable.ValueFactory;
+ 
+ import java.io.IOException;
+ import java.io.Serializable;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Modifier;
+ import java.util.StringTokenizer;
+ 
+ import javax.rmi.CORBA.Util;
+ import javax.rmi.CORBA.ValueHandler;
+ 
+ /**
+  * A specialised class for reading and writing the value types.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public abstract class Vio
+ {
+   /**
+    * If true, wrap value type data into chunks. This decrease the performance,
+    * and is not required for interoperability with jdk 1.5, but is left in the
+    * implementation as the optional mode for solving possible interoperability
+    * problems with non-Sun CORBA implementations.
+    * 
+    * The current implementation would accept both single chunk or multiple
+    * chunks, but will always send a single chunk (if true) or unchunked data (if
+    * false).
+    */
+   public static boolean USE_CHUNKING = false;
+ 
+   /**
+    * The first field in the value record. The last octet may contain additional
+    * flags (vf_CODEBASE, vf_ID and vf_MULTIPLE_IDS). The tag value is different
+    * for the indirections (vt_INDIRECTION) and nulls (vt_NULL).
+    */
+   public static final int vt_VALUE_TAG = 0x7fffff00;
+ 
+   /**
+    * The value tag flag, indicating that the codebase URL is present in the
+    * value tag record.
+    */
+   public static final int vf_CODEBASE = 0x1;
+ 
+   /**
+    * The value tag flag, indicating that a single repository id is present in
+    * the value tag record.
+    */
+   public static final int vf_ID = 0x2;
+ 
+   /**
+    * The value tag flag, indicating, that there are multiple repository ids
+    * present in the record. If this flag is set, the flag vf_ID must also be
+    * set, resulting the value of the least significant byte 0x6.
+    */
+   public static final int vf_MULTIPLE_IDS = 0x4;
+ 
+   /**
+    * The value tag flag, indicating the presence of chunking. Each chunk is
+    * preceeded by a positive int, indicating the number of bytes in the chunk. A
+    * sequence of chunks is terminated by a non positive int.
+    */
+   public static final int vf_CHUNKING = 0x8;
+ 
+   /**
+    * The indirection tag value. Such tag must be followed by the CORBA long,
+    * indicating the offset in the CORBA message, where the indirected
+    * information is present. This offset is assumed zero at the position where
+    * the mentioned CORBA long starts and can refer both forward (positive
+    * values) and backward (negative values).
+    */
+   public static final int vt_INDIRECTION = 0xffffffff;
+ 
+   /**
+    * This tag value means that the value object being transferred is equal to
+    * null.
+    */
+   public static final int vt_NULL = 0x0;
+ 
+   /**
+    * The size of CORBA long (java int).
+    */
+   static final int INT_SIZE = 4;
+ 
+   /**
+    * The String value helper (one instance is sufficient).
+    */
+   public static final WStringValueHelper m_StringValueHelper = new WStringValueHelper();
+ 
+   /**
+    * An instance of the value handler.
+    */
+   static ValueHandler handler = Util.createValueHandler();
+ 
+   /**
+    * Read the value base from the given input stream. Determines the required
+    * class from the repository id. This includes operations that are not
+    * required when an unitialised instance or at least class of the value type
+    * is known. Hence it may be faster to use the alternative methods,
+    * read(InputStream, Class) or read(InputStream, Serializable).
+    * 
+    * @param input a stream to read from.
+    * @param repository_id a repository id of the object being read, may be null.
+    * 
+    * @return the loaded value.
+    * 
+    * @throws MARSHAL if the reading has failed due any reason.
+    */
+   public static Serializable read(InputStream input)
+   {
+     return read(input, (String) null);
+   }
+ 
+   /**
+    * Read the value base from the given input stream. Determines the required
+    * class from the repository id. This includes operations that are not
+    * required when an unitialised instance or at least class of the value type
+    * is known. Hence it may be faster to use the alternative methods,
+    * read(InputStream, Class) or read(InputStream, Serializable).
+    * 
+    * @param an_input a stream to read from.
+    * @param repository_id a repository id of the object being read, may be null.
+    * 
+    * @return the loaded value.
+    * 
+    * @throws MARSHAL if the reading has failed due any reason.
+    */
+   public static Serializable read(InputStream input, String repository_id)
+   {
+     try
+       {
+         final int position = getCurrentPosition(input);
+         // We may need to jump back if the value is read via value factory.
+         input.mark(512);
+ 
+         int value_tag = input.read_long();
+         checkTag(value_tag);
+ 
+         String codebase = null;
+         String[] ids = null;
+         String id = repository_id;
+ 
+         // Check for the agreed null value.
+         if (value_tag == vt_NULL)
+           return null;
+         else if (value_tag == vt_INDIRECTION)
+           return readIndirection(input);
+         else
+           {
+             // Read the value.
+             if ((value_tag & vf_CODEBASE) != 0)
+               {
+                 // The codebase is present. The codebase is a space
+                 // separated list of URLs from where the implementing
+                 // code can be downloaded.
+                 codebase = read_string(input);
+               }
+ 
+             if ((value_tag & vf_MULTIPLE_IDS) != 0)
+               {
+                 // Multiple supported repository ids are present.
+                 ids = read_string_array(input);
+               }
+             else if ((value_tag & vf_ID) != 0)
+               {
+                 // Single supported repository id is present.
+                 id = read_string(input);
+               }
+           }
+ 
+         BoxedValueHelper helper = getHelper(null, id);
+         // The existing implementing object.
+         java.lang.Object ox = null;
+ 
+         if (helper != null)
+           ox = null; // Helper will care about the instantiating.
+         else if (id.equals(WStringValueHelper.id()))
+           helper = m_StringValueHelper;
+         else
+           ox = createInstance(id, ids, codebase);
+         return (Serializable) read_instance(input, position, ox, value_tag,
+           helper, id, ids, codebase);
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL();
+         m.minor = Minor.Value;        
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ 
+   /**
+    * Read the value base from the given input stream when the value base class
+    * is available. Hence there is no need to guess it from the repository id.
+    * 
+    * @param input a stream to read from.
+    * @param value_class the class of the value being read.
+    * 
+    * @return the loaded value.
+    * 
+    * @throws MARSHAL if the reading has failed due any reason.
+    */
+   public static Serializable read(InputStream input, Class value_class)
+   {
+     final int position = getCurrentPosition(input);
+ 
+     String id = null;
+     String[] ids = null;
+     String codebase = null;
+ 
+     try
+       {
+         int value_tag = input.read_long();
+         checkTag(value_tag);
+ 
+         // Check for the agreed null value.
+         if (value_tag == vt_NULL)
+           return null;
+         else if (value_tag == vt_INDIRECTION)
+           return readIndirection(input);
+         else
+           {
+             // Read the value.
+             if ((value_tag & vf_CODEBASE) != 0)
+               {
+                 // The codebase is present.
+                 codebase = read_string(input);
+               }
+ 
+             if ((value_tag & vf_MULTIPLE_IDS) != 0)
+               {
+                 // Multiple supported repository ids are present.
+                 ids = read_string_array(input);
+               }
+             else if ((value_tag & vf_ID) != 0)
+               {
+                 // Single supported repository id is present.
+                 id = read_string(input);
+               }
+           }
+ 
+         BoxedValueHelper vHelper = id != null ? getHelper(value_class, id)
+           : getHelper(value_class, ids);
+ 
+         java.lang.Object ox;
+ 
+         if (vHelper == null)
+           {
+             try
+               {
+                 ox = createInstance(id, ids, codebase);
+               }
+             catch (Exception e)
+               {
+                 ox = null;
+               }
+ 
+             if (ox != null)
+               {
+                 if (value_class != null
+                   && !value_class.isAssignableFrom(ox.getClass()))
+                   {
+                     MARSHAL m = new MARSHAL(ox.getClass() + " is not a "
+                     + value_class.getName());
+                     m.minor = Minor.ClassCast;
+                     throw m;
+                   }
+               }
+           }
+         else
+           ox = null;
+ 
+         ox = read_instance(input, position, ox, value_tag, vHelper, id, ids,
+           codebase);
+         return (Serializable) ox;
+       }
+     catch (MARSHAL m)
+       {
+         throw m;
+       }
+     catch (SystemException sysEx)
+       {
+         // OK.
+         throw sysEx;
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL("Cant read " + value_class);
+         m.minor = Minor.Value;
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ 
+   /**
+    * Read the value base from the given input stream when the unitialised
+    * instance is available. Hence there is no need to guess the class from the
+    * repository id and then to instantiate an instance.
+    * 
+    * @param input a stream to read from.
+    * 
+    * @param value_instance an pre-created instance of the value. If the helper
+    * is not null, this parameter is ignored an should be null.
+    * 
+    * @param helper a helper to create an instance and read the object- specific
+    * part of the record. If the value_instance is used instead, this parameter
+    * should be null.
+    * 
+    * @return the loaded value.
+    * 
+    * @throws MARSHAL if the reading has failed due any reason.
+    */
+   public static Object read(InputStream input, Object value_instance,
+     BoxedValueHelper helper)
+   {
+     final int position = getCurrentPosition(input);
+ 
+     String id = null;
+     String[] ids = null;
+     String codebase = null;
+ 
+     try
+       {
+         int value_tag = input.read_long();
+         checkTag(value_tag);
+ 
+         // Check for the agreed null value.
+         if (value_tag == vt_NULL)
+           return null;
+         else if (value_tag == vt_INDIRECTION)
+           return readIndirection(input);
+         else
+           {
+             // Read the value.
+             if ((value_tag & vf_CODEBASE) != 0)
+               {
+                 // The codebase is present.
+                 codebase = read_string(input);
+               }
+ 
+             if ((value_tag & vf_MULTIPLE_IDS) != 0)
+               {
+                 // Multiple supported repository ids are present.
+                 ids = read_string_array(input);
+               }
+             else if ((value_tag & vf_ID) != 0)
+               {
+                 // Single supported repository id is present.
+                 id = read_string(input);
+               }
+           }
+ 
+         Class value_class = value_instance == null ? null
+           : value_instance.getClass();
+ 
+         if (helper == null)
+           helper = id != null ? getHelper(value_class, id) : getHelper(
+             value_class, ids);
+ 
+         value_instance = read_instance(input, position, value_instance,
+           value_tag, helper, id, ids, codebase);
+         return value_instance;
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL();
+         m.minor = Minor.Value;
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ 
+   /**
+    * Read using provided boxed value helper. This method expects the full value
+    * type header, followed by contents, that are delegated to the provided
+    * helper. It handles null.
+    * 
+    * @param input the stream to read from.
+    * @param helper the helper that reads the type-specific part of the content.
+    * 
+    * @return the value, created by the helper, or null if the header indicates
+    * that null was previously written.
+    */
+   public static Serializable read(InputStream input, BoxedValueHelper helper)
+   {
+     return (Serializable) read(input, null, helper);
+   }
+ 
+   /**
+    * Fill in the instance fields by the data from the input stream. The method
+    * assumes that the value header, if any, is already behind. The information
+    * from the stream is stored into the passed ox parameter.
+    * 
+    * @param input an input stream to read from.
+    * 
+    * @param value a pre-instantiated value type object, must be either
+    * Streamable or CustomMarshal. If the helper is used, this parameter is
+    * ignored and should be null.
+    * 
+    * @param value_tag the tag that must be read previously.
+    * @param helper the helper for read object specific part; may be null to read
+    * in using other methods.
+    * 
+    * @return the value that was read.
+    */
+   static Object read_instance(InputStream input, final int position,
+     Object value, int value_tag, BoxedValueHelper helper, String id,
+     String[] ids, String codebase)
+   {
+     if (helper != m_StringValueHelper && id != null)
+       if (id.equals(StringValueHelper.id()))
+         {
+           value = null;
+           helper = m_StringValueHelper;
+         }
+ 
+     try
+       {
+         if ((value_tag & vf_CHUNKING) != 0)
+           {
+             BufferedCdrOutput output = createBuffer(input, 1024);
+             // Read the current (not a nested one) value in this spec case.
+             readNestedValue(value_tag, input, output, -1);
+             BufferredCdrInput ci = new BufferredCdrInput(output.buffer.getBuffer());
+             ci.setRunTime(output.getRunTime());
+ 
+             input = new HeadlessInput(ci, input);
+           }
+         else
+           {
+             if (input instanceof BufferredCdrInput)
+               {
+                 // Highly probable case.
+                 input = new HeadlessInput((BufferredCdrInput) input, null);
+               }
+             else if (input instanceof HeadlessInput)
+               {
+                 // There is no need to instantiate one more HeadlessInput
+                 // as we can just reset.
+                 ((HeadlessInput) input).subsequentCalls = false;
+               }
+             else
+               {
+                 BufferedCdrOutput bout = new BufferedCdrOutput();
+                 int c;
+                 while ((c = input.read()) >= 0)
+                   bout.write((byte) c);
+                 input = new HeadlessInput(
+                   (BufferredCdrInput) bout.create_input_stream(), input);
+               }
+           }
+       }
+     catch (IOException ex)
+       {
+         MARSHAL m = new MARSHAL("Unable to read chunks");
+         m.minor = Minor.Value;
+         m.initCause(ex);
+         throw m;
+       }
+ 
+     return readValue(input, position, value, helper, id, ids, codebase);
+   }
+ 
+   /**
+    * Create a buffer, inheriting critical settings from the passed input stream.
+    */
+   private static BufferedCdrOutput createBuffer(InputStream input, int proposed_size)
+   {
+     BufferedCdrOutput bout;
+     bout = new BufferedCdrOutput(2 * proposed_size + 256);
+ 
+     if (input instanceof BufferredCdrInput)
+       {
+         BufferredCdrInput in = (BufferredCdrInput) input;
+         bout.setBigEndian(in.isBigEndian());
+       }
+ 
+     if (input instanceof gnuValueStream)
+       bout.setRunTime(((gnuValueStream) input).getRunTime());
+     else
+       bout.setRunTime(new gnuRuntime(null, null));
+     return bout;
+   }
+ 
+   /**
+    * Read the chunked nested value from the given input stream, transferring the
+    * contents to the given output stream.
+    * 
+    * @param value_tag the value tag of the value being read.
+    * @param input the input stream from where the remainder of the nested value
+    * must be read.
+    * @param output the output stream where the unchunked nested value must be
+    * copied.
+    * 
+    * @return the tag that ended the nested value.
+    */
+   public static int readNestedValue(int value_tag, InputStream input,
+     BufferedCdrOutput output, int level)
+     throws IOException
+   {
+     String id = null;
+     if (level < -1)
+       {
+         // For the first level, this information is already behind.
+         output.write_long(value_tag - vf_CHUNKING);
+ 
+         // The nested value should be aways chunked.
+         if ((value_tag & vf_CHUNKING) == 0)
+           {
+             MARSHAL m = new MARSHAL("readNestedValue: must be chunked");
+             m.minor = Minor.Chunks;
+             throw m;
+           }
+         else if (value_tag == vt_NULL)
+           {
+             MARSHAL m = new MARSHAL("readNestedValue: nul");
+             m.minor = Minor.Chunks;
+             throw m;
+           }
+         else if (value_tag == vt_INDIRECTION)
+           {
+             MARSHAL m = new MARSHAL("readNestedValue: indirection");
+             m.minor = Minor.Chunks;
+             throw m;
+           }
+         else
+           {
+             // Read the value.
+             if ((value_tag & vf_CODEBASE) != 0)
+               {
+                 String codebase = read_string(input);
+                 write_string(output, codebase);
+               }
+ 
+             if ((value_tag & vf_MULTIPLE_IDS) != 0)
+               {
+                 // Multiple supported repository ids are present.
+                 String[] ids = read_string_array(input);
+                 id = ids[0];
+                 write_string_array(output, ids);
+               }
+             else if ((value_tag & vf_ID) != 0)
+               {
+                 id = read_string(input);
+                 write_string(output, id);
+               }
+           }
+       }
+ 
+     int n = -1;
+ 
+     // Read all chunks.
+     int chunk_size;
+ 
+     byte[] r = null;
+ 
+     while (true)
+       {
+         // Read the size of the next chunk or it may also be the
+         // header of the nested value.
+         chunk_size = input.read_long();
+ 
+         // End of chunk terminator.
+         if (chunk_size < 0 && chunk_size >= level)
+           return chunk_size;
+         else if (chunk_size >= 0x7FFFFF00)
+           {
+             int onInput = getCurrentPosition(input) - 4;
+             int onOutput = output.getPosition();
+             output.getRunTime().redirect(onInput, onOutput);
+             // Value over 0x7FFFFF00 indicates that the nested value
+             // starts here. Read the nested value, storing it into the output.
+             // First parameter is actually the value tag.
+             chunk_size = readNestedValue(chunk_size, input, output, level - 1);
+             if (chunk_size < 0 && chunk_size >= level)
+               return chunk_size;
+           }
+         else
+           {
+             // The chunk follows.
+             if (r == null || r.length < chunk_size)
+               r = new byte[chunk_size + 256];
+ 
+             n = 0;
+             reading: while (n < chunk_size)
+               n += input.read(r, n, chunk_size - n);
+             output.write(r, 0, n);
+           }
+       }
+   }
+ 
+   /**
+    * Read the value (the header must be behind).
+    */
+   public static Serializable readValue(InputStream input, final int position,
+     Object value, BoxedValueHelper helper, String id, String[] ids,
+     String codebase)
+   {
+     gnuRuntime g;
+     gnuValueStream c = ((gnuValueStream) input);
+     if (c.getRunTime() == null)
+       {
+         g = new gnuRuntime(codebase, value);
+         c.setRunTime(g);
+       }
+     else
+       {
+         g = c.getRunTime();
+         g.addCodeBase(codebase);
+         g.target = (Serializable) value;
+       }
+     if (value != null)
+       g.objectWritten(value, position);
+ 
+     if (input instanceof HeadlessInput)
+       ((HeadlessInput) input).subsequentCalls = false;
+ 
+     boolean ok = true;
+ 
+     // The user-defined io operations are implemented.
+     if (value instanceof CustomMarshal)
+       {
+         CustomMarshal marsh = (CustomMarshal) value;
+         marsh.unmarshal((DataInputStream) input);
+       }
+     else
+     // The IDL-generated io operations are implemented.
+     if (value instanceof Streamable)
+       {
+         ((Streamable) value)._read(input);
+       }
+     else if (helper != null)
+       {
+         // If helper is non-null the value should normally be null.
+         value = helper.read_value(input);
+         g.objectWritten(value, position);
+       }
+     else
+       {
+         ok = false;
+         ValueFactory factory = null;
+         org.omg.CORBA_2_3.ORB orb = (org.omg.CORBA_2_3.ORB) input.orb();
+ 
+         if (id != null)
+           factory = orb.lookup_value_factory(id);
+ 
+         if (factory == null && ids != null)
+           {
+             for (int i = 0; i < ids.length && factory == null; i++)
+               {
+                 factory = orb.lookup_value_factory(ids[i]);
+               }
+           }
+ 
+         if (factory != null)
+           {
+             value = factory.read_value((org.omg.CORBA_2_3.portable.InputStream) input);
+             ok = true;
+           }
+       }
+ 
+     if (!ok && value instanceof Serializable)
+     // Delegate to ValueHandler
+       {
+         if (ids != null && ids.length > 0)
+           id = ids[0];
+ 
+         value = handler.readValue(input, position, value.getClass(), id, g);
+         ok = true;
+       }
+ 
+     if (!ok)
+       {
+         if (value != null)
+           {
+             MARSHAL m = new MARSHAL(value.getClass().getName()
+             + " must be Streamable, CustomMarshal or Serializable");
+             m.minor = Minor.UnsupportedValue;
+             throw m;
+           }
+         else
+           {
+             MARSHAL m = new MARSHAL("Unable to instantiate " + id + ":" + list(ids)
+             + " helper " + helper);
+             m.minor = Minor.UnsupportedValue;
+             throw m;
+           }
+       }
+     else
+       return (Serializable) value;
+   }
+ 
+   /**
+    * Conveniency method to list ids in exception reports.
+    */
+   static String list(String[] s)
+   {
+     if (s == null)
+       return "null";
+     else
+       {
+         StringBuffer b = new StringBuffer("{");
+         for (int i = 0; i < s.length; i++)
+           {
+             b.append(s[i]);
+             b.append(" ");
+           }
+         b.append("}");
+         return b.toString();
+       }
+   }
+ 
+   /**
+    * Write the value base into the given stream.
+    * 
+    * @param output a stream to write to.
+    * 
+    * @param value a value type object, must be either Streamable or
+    * CustomMarshal.
+    * 
+    * @throws MARSHAL if the writing failed due any reason.
+    */
+   public static void write(OutputStream output, Serializable value)
+   {
+     // Write null if this is a null value.
+     if (value == null)
+       output.write_long(vt_NULL);
+     else if (value instanceof String)
+       write(output, value, m_StringValueHelper);
+     else
+       write(output, value, value.getClass());
+   }
+ 
+   /**
+    * Write the value base into the given stream, stating that it is an instance
+    * of the given class.
+    * 
+    * @param output a stream to write to.
+    * 
+    * @param value a value to write.
+    * 
+    * @throws MARSHAL if the writing failed due any reason.
+    */
+   public static void write(OutputStream output, Serializable value,
+     Class substitute)
+   {
+     // Write null if this is a null value.
+     if (value == null)
+       output.write_long(vt_NULL);
+     else if (value instanceof String || substitute == String.class)
+       writeString(output, value);
+     else
+       {
+         String vId = ObjectCreator.getRepositoryId(value.getClass());
+         if (substitute == null || value.getClass().equals(substitute))
+           write_instance(output, value, vId, getHelper(value.getClass(), vId));
+         else
+           {
+             String vC = ObjectCreator.getRepositoryId(substitute);
+             String[] ids = new String[] { vId, vC };
+             BoxedValueHelper h = getHelper(substitute.getClass(), ids);
+             // If the helper is available, it is also responsible for
+             // providing the repository Id. Otherwise, write both
+             // ids.
+             if (h == null)
+               write_instance(output, value, ids, null);
+             else
+               write_instance(output, value, h.get_id(), null);
+           }
+       }
+   }
+ 
+   /**
+    * Write the value base into the given stream, supplementing it with an array
+    * of the provided repository ids plus the repository id, derived from the
+    * passed value.
+    * 
+    * @param output a stream to write to.
+    * 
+    * @param value a value to write.
+    * 
+    * @throws MARSHAL if the writing failed due any reason.
+    */
+   public static void write(OutputStream output, Serializable value,
+     String[] multiple_ids)
+   {
+     // Write null if this is a null value.
+     if (value == null)
+       output.write_long(vt_NULL);
+     else
+       {
+         String[] ids = new String[multiple_ids.length + 1];
+         ids[0] = ObjectCreator.getRepositoryId(value.getClass());
+         System.arraycopy(multiple_ids, 0, ids, 1, multiple_ids.length);
+         BoxedValueHelper h = getHelper(value.getClass(), ids);
+         write_instance(output, value, ids, h);
+       }
+   }
+ 
+   /**
+    * Write value when its repository Id is explicitly given. Only this Id is
+    * written, the type of value is not taken into consideration.
+    * 
+    * @param output an output stream to write into.
+    * @param value a value to write.
+    * @param id a value repository id.
+    */
+   public static void write(OutputStream output, Serializable value, String id)
+   {
+     if (value == null)
+       output.write_long(vt_NULL);
+     else
+       write_instance(output, value, id, getHelper(value.getClass(), id));
+   }
+ 
+   /**
+    * Write standard value type header, followed by contents, produced by the
+    * boxed value helper.
+    * 
+    * @param output the stream to write to.
+    * @param value the value to write, can be null.
+    * @param helper the helper that writes the value content if it is not null
+    * (must be provided for this method).
+    */
+   public static void write(OutputStream output, Serializable value,
+     BoxedValueHelper helper)
+   {
+     if (helper == null)
+       throw new AssertionError("Helper must be provided");
+     if (value == null)
+       output.write_long(vt_NULL);
+     else
+       write_instance(output, value, helper.get_id(), helper);
+   }
+ 
+   /**
+    * Write the parameter that is surely a string and not null.
+    */
+   private static void writeString(OutputStream output, Serializable string)
+   {
+     write_instance(output, string, m_StringValueHelper.get_id(),
+       m_StringValueHelper);
+   }
+ 
+   /**
+    * Write value when its repository Id is explicitly given. Does not handle
+    * null.
+    * 
+    * @param output an output stream to write into.
+    * @param value a value to write.
+    * @param id a value repository id (can be either single string or string
+    * array).
+    * @param helper a helper, writing object - specifical part. Can be null if
+    * the value should be written using other methods.
+    */
+   static void write_instance(OutputStream output, Serializable value,
+     Object ids, BoxedValueHelper helper)
+   {
+     gnuValueStream rout = null;
+     gnuRuntime runtime = null;
+ 
+     try
+       {
+         if (output instanceof gnuValueStream)
+           {
+             int position;
+             rout = (gnuValueStream) output;
+             runtime = rout.getRunTime();
+ 
+             if (runtime == null)
+               {
+                 runtime = new gnuRuntime(null, value);
+                 rout.setRunTime(runtime);
+                 rout.getRunTime().objectWritten(value,
+                   position = rout.getPosition());
+               }
+             else if (runtime.target == value)
+               {
+                 if (!writeSelf(output, value))
+                   throw new InternalError("Recursive helper call for "
+                     + value.getClass().getName());
+                 return;
+               }
+             else
+               {
+                 position = runtime.isWrittenAt(value);
+                 if (position >= 0)
+                   {
+                     // The object was already written.
+                     output.write_long(vt_INDIRECTION);
+                     output.write_long(position - rout.getPosition());
+                     // Replacing object write data by indirection reference.
+                     return;
+                   }
+                 else
+                   {
+                     runtime.objectWritten(value, position = rout.getPosition());
+                   }
+               }
+           }
+ 
+         int value_tag = vt_VALUE_TAG;
+ 
+         if (ids instanceof String)
+           value_tag |= vf_ID;
+         else if (ids instanceof String[])
+           // OMG standard requires to set both flags.
+           value_tag |= vf_MULTIPLE_IDS | vf_ID;
+ 
+         int chunkSizeLocation;
+ 
+         OutputStream outObj;
+ 
+         if (USE_CHUNKING)
+           {
+             // Wrap the value being written into one chunk (makes sense only for
+             // compatibility reasons).
+             outObj = output;
+             value_tag |= vf_CHUNKING;
+           }
+         else
+           outObj = output;
+ 
+         output.write_long(value_tag);
+ 
+         if ((value_tag & vf_MULTIPLE_IDS) != 0)
+           write_string_array(output, (String[]) ids);
+         else if ((value_tag & vf_ID) != 0)
+           write_string(output, (String) ids);
+ 
+         if (USE_CHUNKING)
+           {
+             // So far, write 0x55555555 instead of the chunk size (alignment may
+             // take place).
+             output.write_long(0x55555555);
+             // If the chunking is involved, the chunk size must be written here.
+             chunkSizeLocation = rout.getPosition() - INT_SIZE;
+           }
+         else
+           // Not in use for this case.
+           chunkSizeLocation = -1;
+ 
+         writeValue(outObj, value, helper);
+ 
+         if (USE_CHUNKING)
+           {
+             // Write the chunk size where the place for it was reserved.
+             int chunkSize = rout.getPosition() - chunkSizeLocation - INT_SIZE;
+             int current = rout.getPosition();
+             rout.seek(chunkSizeLocation);
+             output.write_long(chunkSize);
+             rout.seek(current);
+ 
+             // The end of record marker.
+             output.write_long(-1);
+           }
+       }
+     finally
+       {
+         if (runtime != null)
+           runtime.target = null;
+       }
+   }
+ 
+   /**
+    * Write value (after header).
+    */
+   static void writeValue(OutputStream output, Serializable value,
+     BoxedValueHelper helper)
+   {
+     ((gnuValueStream) output).getRunTime().target = value;
+     if (helper != null)
+       helper.write_value(output, value);
+     else if (!writeSelf(output, value))
+       {
+         // Try to find helper via class loader.
+         boolean ok = false;
+ 
+         if (!ok)
+           {
+             if (output instanceof BufferedCdrOutput)
+               {
+                 BufferedCdrOutput b = (BufferedCdrOutput) output;
+                 if (b.runtime == null)
+                   b.runtime = new gnuRuntime(null, value);
+               }
+ 
+             handler.writeValue(output, value);
+           }
+       }
+   }
+ 
+   /**
+    * Try to write value supposing that it implements self-streamable interfaces.
+    * Return false if it does not or true on success.
+    */
+   static boolean writeSelf(OutputStream output, Serializable value)
+   {
+     // User defined write method is present.
+     if (value instanceof CustomMarshal)
+       {
+         ((CustomMarshal) value).marshal((DataOutputStream) output);
+         return true;
+       }
+     else if (value instanceof Streamable)
+       {
+         ((Streamable) value)._write(output);
+         return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Read the indirection data and return the object that was already written to
+    * this stream.
+    * 
+    * @param an_input the input stream, must be BufferredCdrInput.
+    */
+   static Serializable readIndirection(InputStream an_input)
+   {
+     if (!(an_input instanceof gnuValueStream))
+       throw new NO_IMPLEMENT(gnuValueStream.class.getName()
+         + " expected as parameter");
+ 
+     gnuValueStream in = (gnuValueStream) an_input;
+ 
+     int current_pos = in.getPosition();
+ 
+     int offset = an_input.read_long();
+     if (offset > -INT_SIZE)
+       {
+         MARSHAL m = new MARSHAL("Indirection tag refers to " + offset
+         + " (must be less than -" + INT_SIZE + ")");
+         m.minor = Minor.Offset;
+         throw m;
+       }
+ 
+     int stored_at = current_pos + offset;
+ 
+     if (in.getRunTime() == null)
+       {
+         MARSHAL m = new MARSHAL(stored_at + " offset " + offset + ": not written");
+         m.minor = Minor.Value;
+         throw m;
+       }
+ 
+     return (Serializable) in.getRunTime().isObjectWrittenAt(stored_at, offset);
+   }
+ 
+   /**
+    * Check the passed value tag for correctness.
+    * 
+    * @param value_tag a tag to check, must be between 0x7fffff00 and 0x7fffffff
+    * 
+    * @throws MARSHAL if the tag is outside this interval.
+    */
+   static void checkTag(int value_tag)
+   {
+     if ((value_tag < 0x7fffff00 || value_tag > 0x7fffffff)
+       && value_tag != vt_NULL && value_tag != vt_INDIRECTION)
+       {
+         MARSHAL m = new MARSHAL("Invalid value record, unsupported header tag: "
+         + value_tag + " (0x" + Integer.toHexString(value_tag) + ")");
+         m.minor = Minor.ValueHeaderTag;
+         throw m;
+       }
+ 
+     if ((value_tag & vf_MULTIPLE_IDS) != 0 && (value_tag & vf_ID) == 0)
+       {
+         MARSHAL m = new MARSHAL("Invalid value record header flag combination (0x"
+         + Integer.toHexString(value_tag) + ")");
+         m.minor = Minor.ValueHeaderFlags;
+         throw m;
+       }
+   }
+ 
+   /**
+    * Throw MARSHAL.
+    */
+   static void throwIt(String msg, String id1, String id2, Throwable e)
+     throws MARSHAL
+   {
+     MARSHAL m = new MARSHAL(msg + ":'" + id1 + "' versus '" + id2 + "'");
+     if (e != null)
+       m.initCause(e);
+     m.minor = Minor.Value;
+     throw m;
+   }
+ 
+   /**
+    * Load class by name and create the instance.
+    */
+   static Object createInstance(String id, String[] ids, String codebase)
+   {
+     Object o = null;
+ 
+     if (id != null)
+       o = _createInstance(id, codebase);
+ 
+     if (ids != null)
+       for (int i = 0; i < ids.length && o == null; i++)
+         o = _createInstance(ids[i], codebase);
+     return o;
+   }
+ 
+   static Object _createInstance(String id, String codebase)
+   {
+     if (id == null)
+       return null;
+     if (id.equals(StringValueHelper.id()))
+       return "";
+     StringTokenizer st = new StringTokenizer(id, ":");
+ 
+     String prefix = st.nextToken();
+     if (prefix.equalsIgnoreCase("IDL"))
+       return ObjectCreator.Idl2Object(id);
+     else if (prefix.equalsIgnoreCase("RMI"))
+       {
+         String className = st.nextToken();
+         String hashCode = st.nextToken();
+         String sid = null;
+         if (st.hasMoreElements())
+           sid = st.nextToken();
+ 
+         try
+           {
+             Class objectClass = Util.loadClass(className, codebase,
+               Vio.class.getClassLoader());
+ 
+             String rid = ObjectCreator.getRepositoryId(objectClass);
+ 
+             if (!rid.equals(id))
+               {
+                 // If direct string comparison fails, compare by meaning.
+                 StringTokenizer st2 = new StringTokenizer(rid, ":");
+                 if (!st2.nextToken().equals("RMI"))
+                   throw new InternalError("RMI format expected: '" + rid + "'");
+                 if (!st2.nextToken().equals(className))
+                   throwIt("Class name mismatch", id, rid, null);
+ 
+                 try
+                   {
+                     long h1 = Long.parseLong(hashCode, 16);
+                     long h2 = Long.parseLong(st2.nextToken(), 16);
+                     if (h1 != h2)
+                       throwIt("Hashcode mismatch", id, rid, null);
+ 
+                     if (sid != null && st2.hasMoreTokens())
+                       {
+                         long s1 = Long.parseLong(hashCode, 16);
+                         long s2 = Long.parseLong(st2.nextToken(), 16);
+                         if (s1 != s2)
+                           throwIt("serialVersionUID mismatch", id, rid, null);
+                       }
+                   }
+                 catch (NumberFormatException e)
+                   {
+                     throwIt("Invalid hashcode or svuid format: ", id, rid, e);
+                   }
+               }
+ 
+             // Low - level instantiation required here.
+             return instantiateAnyWay(objectClass);
+           }
+         catch (Exception ex)
+           {
+             MARSHAL m = new MARSHAL("Unable to instantiate " + id);
+             m.minor = Minor.Instantiation;
+             m.initCause(ex);
+             throw m;
+           }
+       }
+     else
+       throw new NO_IMPLEMENT("Unsupported prefix " + prefix + ":");
+   }
+ 
+   /**
+    * Read string, expecting the probable indirection.
+    */
+   static String read_string(InputStream input)
+   {
+     gnuValueStream g = (gnuValueStream) input;
+     int previous = g.getPosition();
+     int l = input.read_long();
+     if (l != vt_INDIRECTION)
+       {
+         g.seek(previous);
+         String s = input.read_string();
+         if (g.getRunTime() == null)
+           g.setRunTime(new gnuRuntime(null, null));
+         g.getRunTime().singleIdWritten(s, previous);
+         return s;
+       }
+     else
+       {
+         gnuRuntime r = g.getRunTime();
+         int base = g.getPosition();
+         int delta = input.read_long();
+         if (r == null)
+           {
+             previous = g.getPosition();
+             g.seek(base + delta);
+             String indir = input.read_string();
+             g.seek(previous);
+             return indir;
+           }
+         else
+           {
+             return (String) r.isObjectWrittenAt(base + delta, delta);
+           }
+       }
+   }
+ 
+   /**
+    * Read string array, expecting the probable indirection.
+    */
+   static String[] read_string_array(InputStream input)
+   {
+     gnuValueStream g = (gnuValueStream) input;
+     int previous = g.getPosition();
+     int l = input.read_long();
+     if (l != vt_INDIRECTION)
+       {
+         g.seek(previous);
+         String[] s = StringSeqHelper.read(input);
+         if (g.getRunTime() == null)
+           g.setRunTime(new gnuRuntime(null, null));
+         g.getRunTime().objectWritten(s, previous);
+         return s;
+       }
+     else
+       {
+         gnuRuntime r = g.getRunTime();
+         int base = g.getPosition();
+         int delta = input.read_long();
+         if (r == null)
+           {
+             previous = g.getPosition();
+             g.seek(base + delta);
+             String[] indir = StringSeqHelper.read(input);
+             g.seek(previous);
+             return indir;
+           }
+         else
+           {
+             return (String[]) r.isObjectWrittenAt(base + delta, delta);
+           }
+       }
+   }
+ 
+   /**
+    * Write repository Id, probably shared.
+    */
+   static void write_string(OutputStream output, String id)
+   {
+     if (output instanceof gnuValueStream)
+       {
+         gnuValueStream b = (gnuValueStream) output;
+         if (b != null)
+           {
+             int written = b.getRunTime().idWrittenAt(id);
+             if (written >= 0)
+               {
+                 // Reuse existing id record.
+                 output.write_long(vt_INDIRECTION);
+                 int p = b.getPosition();
+                 output.write_long(written - p);
+               }
+             else
+               {
+                 b.getRunTime().singleIdWritten(id, b.getPosition());
+                 output.write_string(id);
+               }
+           }
+       }
+     else
+       output.write_string(id);
+   }
+ 
+   /**
+    * Write repository Id, probably shared.
+    */
+   static void write_string_array(OutputStream output, String[] ids)
+   {
+     if (output instanceof gnuValueStream)
+       {
+         gnuValueStream b = (gnuValueStream) output;
+         if (b != null)
+           {
+             int written = b.getRunTime().idWrittenAt(ids);
+             if (written >= 0)
+               {
+                 // Reuse existing id record.
+                 output.write_long(vt_INDIRECTION);
+                 int p = b.getPosition();
+                 output.write_long(written - p);
+               }
+             else
+               {
+                 b.getRunTime().multipleIdsWritten(ids, b.getPosition());
+                 StringSeqHelper.write(output, ids);
+               }
+           }
+       }
+     else
+       StringSeqHelper.write(output, ids);
+   }
+ 
+   /**
+    * Get the helper that could write the given object, or null if no pre-defined
+    * helper available for this object.
+    */
+   public static BoxedValueHelper getHelper(Class x, Object ids)
+   {
+     if (x != null && x.equals(String.class))
+       return m_StringValueHelper;
+     else if (x != null && x.isArray())
+       return new ArrayValueHelper(x);
+     else if (ids instanceof String)
+       return locateHelper((String) ids);
+     else if (ids instanceof String[])
+       {
+         String[] ia = (String[]) ids;
+         BoxedValueHelper h;
+         for (int i = 0; i < ia.length; i++)
+           {
+             h = locateHelper(ia[i]);
+             if (h != null)
+               return h;
+           }
+         return null;
+       }
+     else
+       return null;
+   }
+ 
+   /**
+    * Get the helper that could write the given object, or null if no pre-defined
+    * helper available for this object.
+    */
+   public static BoxedValueHelper getHelper(Class x, String id)
+   {
+     if (x != null && x.equals(String.class))
+       return m_StringValueHelper;
+     else if (x != null && x.isArray())
+       return new ArrayValueHelper(x);
+     else
+       return locateHelper(id);
+   }
+ 
+   /**
+    * Try to locate helper from the repository id.
+    */
+   static BoxedValueHelper locateHelper(String id)
+   {
+     if (id != null)
+       {
+         if (id.equals(m_StringValueHelper.get_id()))
+           return m_StringValueHelper;
+         else
+         // Try to locate helper for IDL type.
+         if (id.startsWith("IDL:"))
+           {
+             try
+               {
+                 Class helperClass = ObjectCreator.findHelper(id);
+                 if (BoxedValueHelper.class.isAssignableFrom(helperClass))
+                   return (BoxedValueHelper) helperClass.newInstance();
+                 else if (helperClass != null)
+                   return new IDLTypeHelper(helperClass);
+                 else
+                   return null;
+               }
+             catch (Exception ex)
+               {
+                 return null;
+               }
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * Get the current position.
+    */
+   static int getCurrentPosition(InputStream x)
+   {
+     if (x instanceof gnuValueStream)
+       return ((gnuValueStream) x).getPosition();
+     else
+       return 0;
+   }
+ 
+   /**
+    * Instantiate an instance of this class anyway; also in the case when it has
+    * no parameterless or any other constructor. The fields will be assigned
+    * while reading the class from the stream.
+    * 
+    * @param clazz a class for that the instance should be instantiated.
+    */
+   public static Object instantiateAnyWay(Class clazz)
+     throws Exception
+   {
+     Class first_nonserial = clazz;
+ 
+     while (Serializable.class.isAssignableFrom(first_nonserial)
+       || Modifier.isAbstract(first_nonserial.getModifiers()))
+       first_nonserial = first_nonserial.getSuperclass();
+ 
+     final Class local_constructor_class = first_nonserial;
+ 
+     Constructor constructor = local_constructor_class.getDeclaredConstructor(new Class[0]);
+ 
+     return VMVio.allocateObject(clazz, constructor.getDeclaringClass(),
+       constructor);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/gnuRuntime.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/gnuRuntime.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/gnuRuntime.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/gnuRuntime.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,336 ----
+ /* gnuRuntime.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ import gnu.CORBA.Minor;
+ 
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.MARSHAL;
+ 
+ import java.io.Serializable;
+ import java.util.Comparator;
+ import java.util.HashMap;
+ import java.util.IdentityHashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.TreeMap;
+ import java.util.TreeSet;
+ 
+ /**
+  * Our implementation of the sending context runtime.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuRuntime
+   extends LocalObject
+   implements org.omg.SendingContext.RunTime
+ {
+   /**
+    * The data entry about the object that was written.
+    */
+   static class Entry
+   {
+     /**
+      * The stream position, where the object was written.
+      */
+     int at;
+ 
+     /**
+      * The object that was written.
+      */
+     Object object;
+ 
+     public String toString()
+     {
+       return object + "[" + at + "] "+object.getClass().getName();
+     }
+   }
+ 
+   /**
+    * The instruction that the actual object is stored at different location.
+    * Used when processing chunked data where positions shifts due removing the
+    * chunking tags.
+    */
+   static class Redirection
+     extends Entry
+   {
+     public String toString()
+     {
+       return "->" + at;
+     }
+   }
+ 
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The history of the written objects, maps object to records. The different
+    * objects must be treated as different regardless that .equals returns.
+    */
+   private Map sh_objects = new IdentityHashMap();
+ 
+   /**
+    * The written repository Ids that can be shared.
+    */
+   private Map sh_ids = new TreeMap(new Comparator()
+   {
+     public int compare(Object a, Object b)
+     {
+       if (a instanceof String && b instanceof String)
+         // Comparing string with string.
+         return ((String) a).compareTo((String) b);
+       else if (a instanceof String[] && b instanceof String[])
+         {
+           // Comparing array with array.
+           String[] sa = (String[]) a;
+           String[] sb = (String[]) b;
+ 
+           if (sa.length != sb.length)
+             return sa.length - sb.length;
+           else
+             {
+               int c;
+               for (int i = 0; i < sa.length; i++)
+                 {
+                   c = sa[i].compareTo(sb[i]);
+                   if (c != 0)
+                     return c;
+                 }
+               return 0;
+             }
+         }
+       else
+         // Comparing string with array.
+         return a instanceof String ? 1 : -1;
+     }
+   });
+ 
+   /**
+    * The history of the written objects, maps positions to records. The
+    * different objects must be treated as different regardless that .equals
+    * returns.
+    */
+   private Map positions = new HashMap();
+ 
+   /**
+    * The Codebase.
+    */
+   private String codebase;
+ 
+   /**
+    * The pre-created instance of the object being written (avoid
+    * re-instantiation).
+    */
+   public Serializable target;
+ 
+   /**
+    * Create Runtime.
+    * 
+    * @param a_id a repository Id, if only one Id was specified in the stream.
+    * @param a_ids a repository Ids, if the multiple Ids were specified in te
+    * stream.
+    * @param a_codabase a codebase, if it was specified in the stream.
+    */
+   public gnuRuntime(String a_codebase, Object a_target)
+   {
+     if (a_target instanceof Serializable)
+       target = (Serializable) a_target;
+ 
+     codebase = a_codebase;
+   }
+ 
+   /**
+    * Mark the given object as written at the given position.
+    */
+   public void objectWritten(Object object, int at)
+   {
+     if (object == null || at < 0)
+       return; // No positional information provided.
+     if (sh_objects.containsKey(object))
+       throw new AssertionError("Repetetive writing of the same object "
+         + object + " at " + at + dump());
+ 
+     Entry e = new Entry();
+     e.at = at;
+     e.object = object;
+ 
+     sh_objects.put(object, e);
+     positions.put(new Integer(at), e);
+   }
+ 
+   /**
+    * Check if the object is already written.
+    * 
+    * @return the position, at that the object is allready written or -1 if it is
+    * not yet written.
+    */
+   public int isWrittenAt(Object x)
+   {
+     Entry e = (Entry) sh_objects.get(x);
+     return e == null ? -1 : e.at;
+   }
+ 
+   /**
+    * Set redirection, indicating that the object, searched at the p_searched
+    * position can be actually found at the p_present position.
+    */
+   public void redirect(int p_searched, int p_present)
+   {
+     Redirection redirection = new Redirection();
+     redirection.at = p_present;
+     positions.put(new Integer(p_searched), redirection);
+   }
+ 
+   /**
+    * Get the object, written at the given position. This returs both shared
+    * objects and repository Ids.
+    * 
+    * @return the position, at that the object is allready written.
+    * 
+    * @throws MARSHAL if there is no object written at that position.
+    */
+   public Object isObjectWrittenAt(int x, int offset)
+   {
+     Entry e = (Entry) positions.get(new Integer(x));
+     if (e instanceof Redirection)
+       return isObjectWrittenAt(e.at, offset);
+     else if (e != null)
+       return e.object;
+     else
+       {
+         MARSHAL m = new MARSHAL("No object was written at " + x + 
+           " (offset " + offset + ") r " + this + dump());
+         m.minor = Minor.Graph;
+         throw m;
+       }
+   }
+ 
+   /**
+    * Mark the given object as written at the given position.
+    */
+   public void singleIdWritten(String id, int at)
+   {
+     if (sh_ids.containsKey(id))
+       throw new InternalError("Repetetive writing of the same string " +
+         id + dump());
+ 
+     Entry e = new Entry();
+     e.at = at;
+     e.object = id;
+ 
+     sh_ids.put(id, e);
+     positions.put(new Integer(at), e);
+   }
+ 
+   /**
+    * Mark the given object as written at the given position.
+    */
+   public void multipleIdsWritten(String[] ids, int at)
+   {
+     if (sh_ids.containsKey(ids))
+       throw new InternalError("Repetetive writing of the same string " + 
+         ids + dump());
+ 
+     Entry e = new Entry();
+     e.at = at;
+     e.object = ids;
+ 
+     sh_ids.put(ids, e);
+     positions.put(new Integer(at), e);
+   }
+ 
+   /**
+    * Check if the object is already written.
+    * 
+    * @return the position, at that the object is allready written or -1 if it is
+    * not yet written.
+    */
+   public int idWrittenAt(Object x)
+   {
+     Entry e = (Entry) sh_ids.get(x);
+     return e == null ? -1 : e.at;
+   }
+ 
+   /**
+    * Get the codebase.
+    */
+   public String getCodeBase()
+   {
+     return codebase;
+   }
+ 
+   /**
+    * Set the codebase, preserving the old value if the passed parameter is null
+    * and forming the space delimited list if both new and old values are not
+    * null.
+    */
+   public void addCodeBase(String base)
+   {
+     if (base != null)
+       {
+         if (codebase == null)
+           codebase = base;
+         else
+           codebase = codebase + " " + base;
+       }
+   }
+ 
+   /**
+    * Dump all objects that are currently stored.
+    */
+   public String dump()
+   {
+     StringBuffer b = new StringBuffer(" Stream content: \n");
+ 
+     // Sort by position.
+     TreeSet t = new TreeSet(positions.keySet());
+     Iterator p = t.iterator();
+ 
+     while (p.hasNext())
+       {
+         Object k = p.next();
+         b.append("     " + k + ": " + ((Entry) positions.get(k)).toString()
+           + "\n");
+       }
+     return b.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/gnuValueStream.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/gnuValueStream.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CDR/gnuValueStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CDR/gnuValueStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,71 ----
+ /* gnuValueStream.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.CDR;
+ 
+ /**
+  * A stream, implementing this interface, provides methods to get/set a position
+  * and get the RunTime.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public interface gnuValueStream
+ {
+   /**
+    * Get the current position in the buffer.
+    * 
+    * @return The position in the buffer, taking offset into consideration.
+    */
+   public int getPosition();
+   
+   /**
+    * Jump to the given position, taking offset into consideration.
+    */
+   public void seek(int position);
+   
+   /**
+    * Get the RunTime information. 
+    */
+   public gnuRuntime getRunTime();
+   
+   /**
+    * Replace the instance of RunTime. 
+    */
+   public void setRunTime(gnuRuntime a_runtime);
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CdrEncapsCodecImpl.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CdrEncapsCodecImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CdrEncapsCodecImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CdrEncapsCodecImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,358 ----
+ /* CdrEncapsCodecImpl.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.UserException;
+ import org.omg.IOP.Codec;
+ import org.omg.IOP.CodecPackage.FormatMismatch;
+ import org.omg.IOP.CodecPackage.InvalidTypeForEncoding;
+ import org.omg.IOP.CodecPackage.TypeMismatch;
+ 
+ /**
+  * The local {@link Codec} implementation for ENCODING_CDR_ENCAPS
+  * encoding. This is a local implementation; the remote side should
+  * have its own Codec of this kind. 
+  *
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class CdrEncapsCodecImpl
+   extends LocalObject
+   implements Codec
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * If set to true, no wide string or wide character is allowed (GIOP 1.0).
+    */
+   private final boolean noWide;
+ 
+   /**
+    * The version of this encoding.
+    */
+   private final Version version;
+ 
+   /**
+    * The associated ORB.
+    */
+   protected final ORB orb;
+ 
+   /**
+    * If true, this Codec writes the record length (as int) in the beginning
+    * of the record. This indicator is part of the formal OMG standard, but it is
+    * missing in Sun's implementation. Both Suns's and this Codec detects
+    * the indicator, if present, but can also decode data where this information
+    * is missing. If the length indicator is missing, the first four bytes in
+    * Suns encoding are equal to 0 (Big Endian marker).
+    */
+   private boolean lengthIndicator = true;
+ 
+   /**
+    * Create an instance of this Codec, encoding following the given version.
+    */
+   public CdrEncapsCodecImpl(ORB _orb, Version _version)
+   {
+     orb = _orb;
+     version = _version;
+     noWide = version.until_inclusive(1, 0);
+   }
+ 
+   /**
+    * Return the array of repository ids for this object.
+    *
+    * @return { "IDL:gnu/CORBA/cdrEnapsCodec:1.0" }, always.
+    */
+   public String[] _ids()
+   {
+     return new String[] { "IDL:gnu/CORBA/cdrEnapsCodec:1.0" };
+   }
+ 
+   /**
+    * Decode the contents of the byte array into Any.
+    * The byte array may have the optional four byte length indicator
+    * in the beginning. If these four bytes are zero, it is assumed,
+    * that no length indicator is present.
+    */
+   public Any decode(byte[] them)
+              throws FormatMismatch
+   {
+     BufferredCdrInput input = createInput(them);
+     BufferredCdrInput encapsulation = createEncapsulation(them, input);
+ 
+     TypeCode type = encapsulation.read_TypeCode();
+ 
+     try
+       {
+         checkTypePossibility("", type);
+       }
+     catch (InvalidTypeForEncoding ex)
+       {
+         throw new FormatMismatch(ex.getMessage());
+       }
+ 
+     return readAny(type, encapsulation);
+   }
+ 
+   private BufferredCdrInput createEncapsulation(byte[] them, BufferredCdrInput input)
+   {
+     BufferredCdrInput encapsulation;
+ 
+     if ((them [ 0 ] | them [ 1 ] | them [ 2 ] | them [ 3 ]) == 0)
+       {
+         // Skip that appears to be the always present Big Endian marker.
+         encapsulation = input;
+         input.read_short();
+       }
+     else
+       encapsulation = input.read_encapsulation();
+     return encapsulation;
+   }
+ 
+   /** {@inheritDoc} */
+   public byte[] encode(Any that)
+                 throws InvalidTypeForEncoding
+   {
+     checkTypePossibility("", that.type());
+ 
+     BufferedCdrOutput output = createOutput(that);
+ 
+     // BufferedCdrOutput has internal support for this encoding.
+     AbstractCdrOutput encapsulation = output.createEncapsulation();
+ 
+     try
+       {
+         TypeCodeHelper.write(encapsulation, that.type());
+         that.write_value(encapsulation);
+ 
+         encapsulation.close();
+         output.close();
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL();
+         m.minor = Minor.Encapsulation;
+         m.initCause(ex);
+         throw m;
+       }
+     return output.buffer.toByteArray();
+   }
+ 
+   /**
+    * Decode the value, stored in the byte array, into Any, assuming,
+    * that the byte array holds the data structure, defined by the
+    * given typecode.
+    *
+    * The byte array may have the optional four byte length indicator
+    * in the beginning. If these four bytes are zero, it is assumed,
+    * that no length indicator is present.
+    */
+   public Any decode_value(byte[] them, TypeCode type)
+                    throws FormatMismatch, TypeMismatch
+   {
+     try
+       {
+         checkTypePossibility("", type);
+       }
+     catch (InvalidTypeForEncoding ex)
+       {
+         throw new TypeMismatch(ex.getMessage());
+       }
+ 
+     BufferredCdrInput input = createInput(them);
+     BufferredCdrInput encapsulation = createEncapsulation(them, input);
+     return readAny(type, encapsulation);
+   }
+ 
+   /**
+    * Read an Any from the given stream.
+    *
+    * @param type a type of the Any to read.
+    * @param input the encapsulation stream.
+    */
+   private Any readAny(TypeCode type, BufferredCdrInput encapsulation)
+                throws MARSHAL
+   {
+     gnuAny a = new gnuAny();
+     a.setOrb(orb);
+ 
+     // BufferredCdrInput has internal support for this encoding.
+     a.read_value(encapsulation, type);
+     return a;
+   }
+ 
+   /** {@inheritDoc} */
+   public byte[] encode_value(Any that)
+                       throws InvalidTypeForEncoding
+   {
+     checkTypePossibility("", that.type());
+ 
+     BufferedCdrOutput output = createOutput(that);
+ 
+     AbstractCdrOutput encapsulation = output.createEncapsulation();
+ 
+     try
+       {
+         that.write_value(encapsulation);
+ 
+         encapsulation.close();
+         output.close();
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL();
+         m.minor = Minor.Encapsulation;
+         m.initCause(ex);
+         throw m;
+       }
+     return output.buffer.toByteArray();
+   }
+ 
+   /**
+    * Create the CDR output stream for writing the given Any.
+    * The BufferedCdrOutput has internal support for encapsulation encodings.
+    *
+    * @param that the Any that will be written.
+    *
+    * @return the stream.
+    *
+    * @throws InvalidTypeForEncoding if that Any cannot be written under the
+    * given version.
+    */
+   private BufferedCdrOutput createOutput(Any that)
+                              throws InvalidTypeForEncoding
+   {
+     BufferedCdrOutput output = new BufferedCdrOutput();
+     output.setOrb(orb);
+     output.setVersion(version);
+     return output;
+   }
+ 
+   /**
+    * Checks if the given type can be encoded. Currently only checks for wide
+    * strings and wide chars for GIOP 1.0.
+    *
+    * @param t a typecode to chek.
+    *
+    * @throws InvalidTypeForEncoding if the typecode is not valid for the given
+    * version.
+    */
+   private void checkTypePossibility(String name, TypeCode t)
+                              throws InvalidTypeForEncoding
+   {
+     if (noWide)
+       {
+         try
+           {
+             int kind = t.kind().value();
+ 
+             if (kind == TCKind._tk_wchar || kind == TCKind._tk_wstring)
+               throw new InvalidTypeForEncoding(name + " wide char in " +
+                                                version
+                                               );
+             else if (kind == TCKind._tk_alias || kind == TCKind._tk_array ||
+                      kind == TCKind._tk_sequence
+                     )
+               checkTypePossibility("Array member", t.content_type());
+ 
+             else if (kind == TCKind._tk_struct || kind == TCKind._tk_union)
+               {
+                 for (int i = 0; i < t.member_count(); i++)
+                   {
+                     checkTypePossibility(t.member_name(i), t.member_type(i));
+                   }
+               }
+           }
+         catch (UserException ex)
+           {
+             InternalError ierr = new InternalError();
+             ierr.initCause(ex);
+             throw ierr;
+           }
+       }
+   }
+ 
+   /**
+    * Create the CDR input stream for reading the given byte array.
+    *
+    * @param them a byte array to read.
+    *
+    * @return the stream.
+    */
+   private BufferredCdrInput createInput(byte[] them)
+   {
+     BufferredCdrInput input = new BufferredCdrInput(them);
+     input.setOrb(orb);
+     input.setVersion(version);
+     return input;
+   }
+ 
+   /**
+    * Check if the Codec writes the length indicator.
+    */
+   public boolean hasLengthIndicator()
+   {
+     return lengthIndicator;
+   }
+ 
+   /**
+    * Sets if the Codec must write the record length in the beginning of the
+    * array. Encodings both with and without that indicator are understood
+    * both by Suns and this codec, but the OMG specification seems requiring
+    * it. The default behavior is to use the length indicator.
+    *
+    * @param use_lengthIndicator
+    */
+   public void setUseLengthIndicator(boolean use_lengthIndicator)
+   {
+     lengthIndicator = use_lengthIndicator;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Connected_objects.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Connected_objects.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Connected_objects.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Connected_objects.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,245 ----
+ /* Connected_objects.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.TreeMap;
+ 
+ /**
+  * The repository of objects, that have been connected to the
+  * {@link FunctionalORB} by the method
+  * {@link ORB.connect(org.omg.CORBA.Object)}.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class Connected_objects
+ {
+   /**
+    * The reference data about the connected object.
+    */
+   public class cObject
+   {
+     /**
+      * Create an initialised instance.
+      */
+     cObject(org.omg.CORBA.Object _object, int _port, byte[] _key,
+             java.lang.Object an_identity
+            )
+     {
+       object = _object;
+       port = _port;
+       key = _key;
+       identity = an_identity;
+     }
+ 
+     /**
+      * The object.
+      */
+     public final org.omg.CORBA.Object object;
+ 
+     /**
+      * The port on that the object is connected.
+      */
+     public final int port;
+ 
+     /**
+      * The object key.
+      */
+     public final byte[] key;
+ 
+     /**
+      * The shared serving identity (usually POA) or null if no such
+      * applicable.
+      */
+     public final java.lang.Object identity;
+   }
+ 
+   /**
+    * The free number to give for the next instance.
+    * This field is incremented each time the
+    * new collection of the connected objects is created.
+    * Each collection has its own unique instance number.
+    */
+   private static long free_object_number;
+ 
+   /**
+    * The map of the all connected objects, maps the object key to the
+    * object.
+    */
+   private Map objects = new TreeMap(new ByteArrayComparator());
+ 
+   /**
+    * Get the record of the stored object.
+    *
+    * @param object the stored object
+    *
+    * @return the record about the stored object, null if
+    * this object is not stored here.
+    */
+   public cObject getKey(org.omg.CORBA.Object stored_object)
+   {
+     synchronized (objects)
+       {
+         Map.Entry item;
+         Iterator iter = objects.entrySet().iterator();
+         cObject ref;
+ 
+         while (iter.hasNext())
+           {
+             item = (Map.Entry) iter.next();
+             ref = (cObject) item.getValue();
+             if (stored_object.equals(ref.object) ||
+                 stored_object._is_equivalent(ref.object)
+                )
+               return ref;
+           }
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Add the new object to the repository. The object key is
+    * generated automatically.
+    *
+    * @param object the object to add.
+    * @param port, on that the ORB will be listening to the remote
+    * invocations.
+    *
+    * @return the newly created object record.
+    */
+   public cObject add(org.omg.CORBA.Object object, int port)
+   {
+     return add(generateObjectKey(object), object, port, null);
+   }
+ 
+   /**
+    * Add the new object to the repository.
+    *
+    * @param key the object key.
+    * @param object the object to add.
+    * @param port the port, on that the ORB will be listening on the
+    * remote invocations.
+    */
+   public cObject add(byte[] key, org.omg.CORBA.Object object, int port,
+                      java.lang.Object identity
+                     )
+   {
+     cObject rec = new cObject(object, port, key, identity);
+     synchronized (objects)
+       {
+         objects.put(key, rec);
+       }
+     return rec;
+   }
+ 
+   /**
+    * Get the stored object.
+    *
+    * @param key the key (in the byte array form).
+    *
+    * @return the matching object, null if none is matching.
+    */
+   public cObject get(byte[] key)
+   {
+     synchronized (objects)
+       {
+         return (cObject) objects.get(key);
+       }
+   }
+ 
+   /**
+    * Get the map entry set.
+    */
+   public Set entrySet()
+   {
+     return objects.entrySet();
+   }
+ 
+   /**
+    * Remove the given object.
+    *
+    * @param object the object to remove.
+    */
+   public void remove(org.omg.CORBA.Object object)
+   {
+     synchronized (objects)
+       {
+         cObject ref = getKey(object);
+         if (ref != null)
+           objects.remove(ref.key);
+       }
+   }
+ 
+   /**
+    * Remove the given object, indiciating it by the key.
+    *
+    * @param object the object to remove.
+    */
+   public void remove(byte[] key)
+   {
+     objects.remove(key);
+   }
+ 
+   /**
+    * Generate the object key, unique in the currently
+    * running java virtual machine.
+    *
+    * The generated key includes the object class name
+    * and the absolute instance number.
+    *
+    * @return the generated key.
+    */
+   protected byte[] generateObjectKey(org.omg.CORBA.Object object)
+   {
+     return (object.getClass().getName() + ":" + getFreeInstanceNumber()).getBytes();
+   }
+ 
+   /**
+    * Get next free instance number.
+    */
+   private static synchronized long getFreeInstanceNumber()
+   {
+     long instance_number = free_object_number;
+     free_object_number++;
+     return instance_number;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/CorbaList.java gcc-4.1.0/libjava/classpath/gnu/CORBA/CorbaList.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/CorbaList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/CorbaList.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,115 ----
+ /* CorbaList.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import java.io.Serializable;
+ 
+ import java.util.ArrayList;
+ 
+ import org.omg.CORBA.Bounds;
+ 
+ /**
+  * This class is used to store array lists. Differently from
+  * the java.util lists,
+  * it throws {@link org.omg.CORBA.Bounds} rather than
+  * {@link IndexOutOfBoundsException}.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class CorbaList
+   extends ArrayList
+   implements Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * Creates the list with the given initial size.
+    */
+   public CorbaList(int initial_size)
+   {
+     super(initial_size);
+   }
+ 
+   /**
+    * Creates the list with the default size.
+    */
+   public CorbaList()
+   {
+   }
+ 
+   /**
+    * Remove the item at the given index.
+    * @param at the index
+    * @throws org.omg.CORBA.Bounds if the index is out of bounds.
+    */
+   public void drop(int at)
+             throws Bounds
+   {
+     try
+       {
+         super.remove(at);
+       }
+     catch (IndexOutOfBoundsException ex)
+       {
+         throw new Bounds("[" + at + "], valid [0.." + size() + "]");
+       }
+   }
+ 
+   /**
+    * Get the item at the given index.
+    * @param at the index
+    * @return the item at the index
+    * @throws org.omg.CORBA.Bounds if the index is out of bounds.
+    */
+   public Object item(int at)
+               throws Bounds
+   {
+     try
+       {
+         return super.get(at);
+       }
+     catch (IndexOutOfBoundsException ex)
+       {
+         throw new Bounds("[" + at + "], valid [0.." + size() + "]");
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DefaultSocketFactory.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DefaultSocketFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DefaultSocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DefaultSocketFactory.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,79 ----
+ /* DefaultSocketFactory.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.interfaces.SocketFactory;
+ 
+ import java.io.IOException;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ 
+ /**
+  * The default socket factory that forges "plain" server and client sockets. The
+  * class can be replaced by setting the gnu.CORBA.SocketFactory property.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class DefaultSocketFactory
+   implements SocketFactory
+ {
+   /**
+    * It is enough to have one instance of this class for all ORBs.
+    */
+   public static final DefaultSocketFactory Singleton = new DefaultSocketFactory();
+ 
+   /**
+    * Create a client socket.
+    */
+   public Socket createClientSocket(String host, int port)
+     throws IOException
+   {
+     return new Socket(host, port);
+   }
+ 
+   /**
+    * Create a server socket.
+    */
+   public ServerSocket createServerSocket(int port)
+     throws IOException
+   {
+     return new ServerSocket(port);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DefinitionKindHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DefinitionKindHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DefinitionKindHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DefinitionKindHolder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* DefinitionKindHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.DefinitionKind;
+ import org.omg.CORBA.DefinitionKindHelper;
+ 
+ 
+ /**
+  * The definition kind holder. This class is not included in the original
+  * API specification, so we place it outside the org.omg namespace.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class DefinitionKindHolder
+   implements org.omg.CORBA.portable.Streamable
+ {
+   /**
+    * The stored value.
+    */
+   public DefinitionKind value;
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue
+    */
+   public DefinitionKindHolder(DefinitionKind initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Read from the CDR stream.
+    */
+   public void _read(org.omg.CORBA.portable.InputStream in)
+   {
+     value = DefinitionKindHelper.read(in);
+   }
+ 
+   /**
+    * Get the typecode.
+    */
+   public org.omg.CORBA.TypeCode _type()
+   {
+     return DefinitionKindHelper.type();
+   }
+ 
+   /**
+    * Write into the CDR stream.
+    */
+   public void _write(org.omg.CORBA.portable.OutputStream out)
+   {
+     DefinitionKindHelper.write(out, value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DuplicateNameHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DuplicateNameHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DuplicateNameHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DuplicateNameHolder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,106 ----
+ /* DuplicateNameHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName;
+ import org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateNameHelper;
+ 
+ /**
+ * A holder for the exception {@link DuplicateName}.
+ 
+ * @author Audrius Meskauskas, Lithiania (AudriusA@Bioinformatics.org)
+ */
+ public class DuplicateNameHolder
+   implements Streamable
+ {
+   /**
+    * The stored DuplicateName value.
+    */
+   public DuplicateName value;
+ 
+   /**
+    * Create the unitialised instance, leaving the value field
+    * with default <code>null</code> value.
+    */
+   public DuplicateNameHolder()
+   {
+   }
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue the value that will be assigned to
+    * the <code>value</code> field.
+    */
+   public DuplicateNameHolder(DuplicateName initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Fill in the {@link value} by data from the CDR stream.
+    *
+    * @param input the org.omg.CORBA.portable stream to read.
+    */
+   public void _read(InputStream input)
+   {
+     value = DuplicateNameHelper.read(input);
+   }
+ 
+   /**
+    * Write the stored value into the CDR stream.
+    *
+    * @param output the org.omg.CORBA.portable stream to write.
+    */
+   public void _write(OutputStream output)
+   {
+     DuplicateNameHelper.write(output, value);
+   }
+ 
+   /**
+    * Get the typecode of the DuplicateName.
+    */
+   public TypeCode _type()
+   {
+     return DuplicateNameHelper.type();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/AbstractAny.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/AbstractAny.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/AbstractAny.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/AbstractAny.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,177 ----
+ /* AbstractAny.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.TypeKindNamer;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * The top of our DynAny implementation, this class provides ORB that is
+  * required to create anys and factory that is required to initialise DynAnys.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class AbstractAny
+   extends LocalObject
+   implements Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The "initial final_type" that can be an alias of the known final_type.
+    */
+   public TypeCode official_type;
+ 
+   /**
+    * The "basic" final_type to that the final_type finally evaluates.
+    */
+   public final TypeCode final_type;
+ 
+   /**
+    * The DynAny factory, required in initializations.
+    */
+   public final gnuDynAnyFactory factory;
+ 
+   /**
+    * The ORB, to that this DynAny belongs.
+    */
+   public final ORB orb;
+ 
+   /**
+    * The minor code, indicating the error, related to work with non - GNU
+    * Classpath DynAny.
+    */
+   short MINOR = 8148;
+ 
+   /**
+    * The message about the empty structure or exception.
+    */
+   static final String EMPTY = "Empty structure with no fields.";
+ 
+   /**
+    * The message about the structure or exception size mismatch.
+    */
+   static final String SIZE = "Size mismatch.";
+ 
+   /**
+    * The message about the content of this DynAny being equal to
+    * <code>null</code>
+    */
+   static final String ISNULL = "The content is null";
+ 
+   /**
+    * The change value listener.
+    */
+   ValueChangeListener listener;
+ 
+   /**
+    * Create the abstract dyn any.
+    */
+   public AbstractAny(TypeCode oType, TypeCode aType,
+                         gnuDynAnyFactory aFactory, ORB anOrb
+                        )
+   {
+     official_type = oType;
+     final_type = aType;
+     factory = aFactory;
+     orb = anOrb;
+   }
+ 
+   /**
+    * Get the typecode.
+    */
+   public TypeCode type()
+   {
+     return official_type;
+   }
+ 
+   /**
+    * Create the Any.
+    */
+   public Any createAny()
+   {
+     return orb.create_any();
+   }
+ 
+   /**
+    * The "value changed" listener.
+    */
+   protected void valueChanged()
+   {
+     if (listener != null)
+       listener.changed();
+   }
+ 
+   /**
+    * Check the type.
+    */
+   void checkType(TypeCode expected, TypeCode actual)
+           throws TypeMismatch
+   {
+     if (!expected.equal(actual))
+       throw new TypeMismatch(typeMismatch(expected, actual));
+   }
+ 
+   /**
+    * Format "Type mismatch" string.
+    */
+   String typeMismatch(TypeCode expected, TypeCode actual)
+   {
+     return TypeKindNamer.nameIt(expected) + " expected " +
+            TypeKindNamer.nameIt(actual);
+   }
+ 
+   /**
+    * Format "size mismatch" string.
+    */
+   String sizeMismatch(int here, int other)
+   {
+     return "Size mismatch, " + other + " (expected " + here + ")";
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/DivideableAny.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/DivideableAny.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/DivideableAny.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/DivideableAny.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,514 ----
+ /* DivideableAny.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.TypeKindNamer;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Object;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.UNKNOWN;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ import org.omg.DynamicAny.DynValueCommon;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Provides a base for DynAnys, having multiple components.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class DivideableAny
+   extends AbstractAny
+   implements Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The array of the components that in general case may have different
+    * final_type.
+    */
+   protected DynAny[] array;
+ 
+   /**
+    * The internal pointer.
+    */
+   protected int pos = 0;
+ 
+   public DivideableAny(TypeCode oType, TypeCode aType,
+                        gnuDynAnyFactory aFactory, ORB anOrb
+                       )
+   {
+     super(oType, aType, aFactory, anOrb);
+   }
+ 
+   /**
+    * Advance forward.
+    */
+   public boolean next()
+   {
+     pos++;
+     return array.length > pos;
+   }
+ 
+   /**
+    * Set zero position.
+    */
+   public void rewind()
+   {
+     pos = 0;
+   }
+ 
+   /**
+    * Set a position.
+    */
+   public boolean seek(int p)
+   {
+     pos = p;
+     return pos >= 0 && array.length > pos;
+   }
+ 
+   /**
+    * Get the insertion point as DynAny. This method may throw exceptions if the
+    * current insertion point does not support reading or insertion of the
+    * primitive types.
+    *
+    * @return the focused component, from where the primitve value can be read or
+    * where it can be inserted.
+    * @throws InvalidValue if the primitive value cannot be inserted at the given
+    * point.
+    */
+   protected DynAny focused()
+                     throws InvalidValue, TypeMismatch
+   {
+     if (pos >= 0 && pos < array.length)
+       {
+         if (array [ pos ].component_count() == 0)
+           return array [ pos ];
+         else
+           throw new TypeMismatch("Multiple coponents at " + pos);
+       }
+     else
+       throw new InvalidValue("Out of bounds at " + pos + " valid 0.." +
+                              (array.length - 1)
+                             );
+   }
+ 
+   /** {@inheritDoc} */
+   public int component_count()
+   {
+     return array.length;
+   }
+ 
+   /**
+    * Return the second (enclosed any) that is stored in the wrapped Any.
+    */
+   public Any get_any()
+               throws TypeMismatch, InvalidValue
+   {
+     return focused().get_any();
+   }
+ 
+   /** {@inheritDoc} */
+   public boolean get_boolean()
+                       throws TypeMismatch, InvalidValue
+   {
+     return focused().get_boolean();
+   }
+ 
+   /** {@inheritDoc} */
+   public char get_char()
+                 throws TypeMismatch, InvalidValue
+   {
+     return focused().get_char();
+   }
+ 
+   /** {@inheritDoc} */
+   public double get_double()
+                     throws TypeMismatch, InvalidValue
+   {
+     return focused().get_double();
+   }
+ 
+   /** {@inheritDoc} */
+   public float get_float()
+                   throws TypeMismatch, InvalidValue
+   {
+     return focused().get_float();
+   }
+ 
+   /** {@inheritDoc} */
+   public int get_long()
+                throws TypeMismatch, InvalidValue
+   {
+     return focused().get_long();
+   }
+ 
+   /** {@inheritDoc} */
+   public long get_longlong()
+                     throws TypeMismatch, InvalidValue
+   {
+     return focused().get_longlong();
+   }
+ 
+   /** {@inheritDoc} */
+   public byte get_octet()
+                  throws TypeMismatch, InvalidValue
+   {
+     return focused().get_octet();
+   }
+ 
+   /** {@inheritDoc} */
+   public Object get_reference()
+                        throws TypeMismatch, InvalidValue
+   {
+     return focused().get_reference();
+   }
+ 
+   /** {@inheritDoc} */
+   public short get_short()
+                   throws TypeMismatch, InvalidValue
+   {
+     return focused().get_short();
+   }
+ 
+   /** {@inheritDoc} */
+   public String get_string()
+                     throws TypeMismatch, InvalidValue
+   {
+     return focused().get_string();
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode get_typecode()
+                         throws TypeMismatch, InvalidValue
+   {
+     return focused().get_typecode();
+   }
+ 
+   /** {@inheritDoc} */
+   public int get_ulong()
+                 throws TypeMismatch, InvalidValue
+   {
+     return focused().get_ulong();
+   }
+ 
+   /** {@inheritDoc} */
+   public long get_ulonglong()
+                      throws TypeMismatch, InvalidValue
+   {
+     return focused().get_ulonglong();
+   }
+ 
+   /** {@inheritDoc} */
+   public short get_ushort()
+                    throws TypeMismatch, InvalidValue
+   {
+     return focused().get_ushort();
+   }
+ 
+   /** {@inheritDoc} */
+   public Serializable get_val()
+                        throws TypeMismatch, InvalidValue
+   {
+     if (pos >= 0 && pos < array.length)
+       {
+         if (array [ pos ] instanceof DynValueCommon)
+           return array [ pos ].get_val();
+         else
+           throw new TypeMismatch();
+       }
+     else
+       throw new InvalidValue("Out of bounds at " + pos + " valid 0.." +
+                              (array.length - 1)
+                             );
+   }
+ 
+   /** {@inheritDoc} */
+   public char get_wchar()
+                  throws TypeMismatch, InvalidValue
+   {
+     return focused().get_wchar();
+   }
+ 
+   /** {@inheritDoc} */
+   public String get_wstring()
+                      throws TypeMismatch, InvalidValue
+   {
+     return focused().get_wstring();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_any(Any a_x)
+                   throws TypeMismatch, InvalidValue
+   {
+     focused().insert_any(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_boolean(boolean a_x)
+                       throws InvalidValue, TypeMismatch
+   {
+     focused().insert_boolean(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_char(char a_x)
+                    throws InvalidValue, TypeMismatch
+   {
+     focused().insert_char(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_double(double a_x)
+                      throws InvalidValue, TypeMismatch
+   {
+     focused().insert_double(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_float(float a_x)
+                     throws InvalidValue, TypeMismatch
+   {
+     focused().insert_float(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_long(int a_x)
+                    throws InvalidValue, TypeMismatch
+   {
+     focused().insert_long(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_longlong(long a_x)
+                        throws InvalidValue, TypeMismatch
+   {
+     focused().insert_longlong(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_octet(byte a_x)
+                     throws InvalidValue, TypeMismatch
+   {
+     focused().insert_octet(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_reference(Object a_x)
+                         throws InvalidValue, TypeMismatch
+   {
+     focused().insert_reference(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_short(short a_x)
+                     throws InvalidValue, TypeMismatch
+   {
+     focused().insert_short(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_string(String a_x)
+                      throws InvalidValue, TypeMismatch
+   {
+     focused().insert_string(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_typecode(TypeCode a_x)
+                        throws InvalidValue, TypeMismatch
+   {
+     focused().insert_typecode(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_ulong(int a_x)
+                     throws InvalidValue, TypeMismatch
+   {
+     focused().insert_ulong(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_ulonglong(long a_x)
+                         throws InvalidValue, TypeMismatch
+   {
+     focused().insert_ulonglong(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_ushort(short a_x)
+                      throws InvalidValue, TypeMismatch
+   {
+     focused().insert_ushort(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_val(Serializable a_x)
+                   throws InvalidValue, TypeMismatch
+   {
+     if (pos >= 0 && pos < array.length)
+       {
+         if (array [ pos ] instanceof DynValueCommon)
+           array [ pos ].insert_val(a_x);
+         else
+           throw new TypeMismatch();
+       }
+     else
+       throw new InvalidValue("Out of bounds at " + pos + " valid 0.." +
+                              (array.length - 1)
+                             );
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_wchar(char a_x)
+                     throws InvalidValue, TypeMismatch
+   {
+     focused().insert_wchar(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_wstring(String a_x)
+                       throws InvalidValue, TypeMismatch
+   {
+     focused().insert_wstring(a_x);
+     valueChanged();
+   }
+ 
+   /** {@inheritDoc} */
+   public DynAny get_dyn_any()
+                      throws TypeMismatch, InvalidValue
+   {
+     return focused().get_dyn_any();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_dyn_any(DynAny insert_it)
+                       throws TypeMismatch, InvalidValue
+   {
+     focused().insert_dyn_any(insert_it);
+   }
+ 
+   /**
+    * Get current component.
+    *
+    * @return current component or <code>null</code> if the pointer is out of
+    * bounds.
+    */
+   public DynAny current_component()
+                            throws TypeMismatch
+   {
+     if (array.length == 0)
+       throw new TypeMismatch("empty");
+     return (pos >= 0 && pos < array.length) ? array [ pos ] : null;
+   }
+ 
+   /**
+    * No action, cleanup is done by garbage collector in java.
+    */
+   public void destroy()
+   {
+   }
+ 
+   /**
+    * Involved in equal(DynAny).
+    */
+   public abstract Any to_any()
+                       throws TypeMismatch;
+ 
+   /**
+    * Compares with other DynAny for equality. The final_type, array size and
+    * array members must match.
+    */
+   public boolean equal(DynAny other)
+   {
+     try
+       {
+         if (!official_type.equal(other.type()))
+           return false;
+         else if (other instanceof DivideableAny)
+           {
+             DivideableAny x = (DivideableAny) other;
+             if (x.array.length != array.length)
+               return false;
+ 
+             for (int i = 0; i < array.length; i++)
+               {
+                 if (!array [ i ].equal(x.array [ i ]))
+                   return false;
+               }
+             return true;
+           }
+         else if (other == null || other instanceof AbstractAny)
+           return false;
+         else
+           return other.to_any().equal(to_any());
+       }
+     catch (TypeMismatch e)
+       {
+         UNKNOWN u = new UNKNOWN(MINOR, CompletionStatus.COMPLETED_NO);
+         u.initCause(e);
+         throw u;
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/NameValuePairHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/NameValuePairHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/NameValuePairHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/NameValuePairHolder.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,94 ----
+ /* NameValuePairHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import org.omg.CORBA.NameValuePair;
+ import org.omg.CORBA.NameValuePairHelper;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ /**
+  * The name-value pair holder. The {@link NameValuePair} has no standard holder
+  * defined, but it is needed to store the {@link NameValuePair} into {@link Any}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NameValuePairHolder
+   implements Streamable
+ {
+   /**
+    * The stored value of the name value pair.
+    */
+   public NameValuePair value;
+ 
+   public NameValuePairHolder()
+   {
+   }
+ 
+   public NameValuePairHolder(NameValuePair a_value)
+   {
+     value = a_value;
+   }
+ 
+   /**
+    * Read the name value pair.
+    */
+   public void _read(InputStream input)
+   {
+     value = NameValuePairHelper.read(input);
+   }
+ 
+   /**
+    * Return the typecode of the name value pair.
+    */
+   public TypeCode _type()
+   {
+     return NameValuePairHelper.type();
+   }
+ 
+   /**
+    * Write the name value pair.
+    */
+   public void _write(OutputStream output)
+   {
+     NameValuePairHelper.write(output, value);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/RecordAny.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/RecordAny.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/RecordAny.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/RecordAny.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,405 ----
+ /* RecordAny.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.HolderLocator;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.TypeCodePackage.Bounds;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ import org.omg.DynamicAny.DynStruct;
+ import org.omg.DynamicAny.DynValueCommonOperations;
+ import org.omg.DynamicAny.NameDynAnyPair;
+ import org.omg.DynamicAny.NameValuePair;
+ 
+ import java.io.Serializable;
+ 
+ import java.lang.reflect.Field;
+ 
+ /**
+  * A shared base for both dynamic structure an dynamic value final_type.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class RecordAny
+   extends DivideableAny
+   implements DynAny, Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+   String[] fNames;
+ 
+   /**
+    * Creates the structure with the given typecode.
+    *
+    * @param fields The DynAny's, representing the fields of the structure.
+    */
+   public RecordAny(TypeCode oType, TypeCode aType,
+                         gnuDynAnyFactory aFactory, ORB anOrb
+                        )
+   {
+     super(oType, aType, aFactory, anOrb);
+   }
+ 
+   /** @inheritDoc */
+   public TCKind current_member_kind()
+                              throws TypeMismatch, InvalidValue
+   {
+     if (array.length == 0)
+       throw new TypeMismatch(EMPTY);
+     try
+       {
+         return final_type.member_type(pos).kind();
+       }
+     catch (BadKind e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+     catch (Bounds e)
+       {
+         InvalidValue t = new InvalidValue();
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /** @inheritDoc */
+   public String current_member_name()
+                              throws TypeMismatch, InvalidValue
+   {
+     if (array.length == 0)
+       throw new TypeMismatch(EMPTY);
+     try
+       {
+         return final_type.member_name(pos);
+       }
+     catch (BadKind e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+     catch (Bounds e)
+       {
+         InvalidValue t = new InvalidValue();
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Get content of the structure. This method must be defined on a different
+    * name because get_members_as_dyn_any() throws exception only in some of the
+    * supported interfaces.
+    */
+   public NameDynAnyPair[] gnu_get_members_as_dyn_any()
+   {
+     NameDynAnyPair[] r = new NameDynAnyPair[ array.length ];
+     for (int i = 0; i < r.length; i++)
+       {
+         try
+           {
+             r [ i ] = new NameDynAnyPair(fNames [ i ], array [ i ]);
+           }
+         catch (Exception ex)
+           {
+             throw new Unexpected(ex);
+           }
+       }
+     return r;
+   }
+ 
+   /**
+    * Get content of the structure. This method must be defined on a different
+    * name because get_members_as_dyn_any() throws exception only in some of the
+    * supported interfaces.
+    */
+   public NameValuePair[] gnu_get_members()
+   {
+     NameValuePair[] r = new NameValuePair[ array.length ];
+     for (int i = 0; i < r.length; i++)
+       {
+         try
+           {
+             r [ i ] = new NameValuePair(fNames [ i ], array [ i ].to_any());
+           }
+         catch (Exception ex)
+           {
+             throw new Unexpected(ex);
+           }
+       }
+     return r;
+   }
+ 
+   /**
+    * Set members from the provided array.
+    */
+   public void set_members_as_dyn_any(NameDynAnyPair[] value)
+                               throws TypeMismatch, InvalidValue
+   {
+     if (value.length != array.length)
+       throw new InvalidValue(sizeMismatch(array.length, value.length));
+ 
+     for (int i = 0; i < value.length; i++)
+       {
+         DynAny dynAny = value [ i ].value;
+         checkType(dynAny.type(), i);
+         checkName(value [ i ].id, i);
+ 
+         array [ i ] = dynAny;
+       }
+     pos = 0;
+   }
+ 
+   /**
+    * Check the name at the given position ("" matches everything).
+    */
+   private void checkName(String xName, int i)
+                   throws TypeMismatch
+   {
+     if (xName.length() > 0 && fNames [ i ].length() > 0)
+       if (!xName.equals(fNames [ i ]))
+         throw new TypeMismatch("Field name mismatch " + xName + " expected " +
+                                fNames [ i ]
+                               );
+   }
+ 
+   /**
+    * Check the type at the given position.
+    */
+   private void checkType(TypeCode t, int i)
+                   throws TypeMismatch
+   {
+     if (!array [ i ].type().equal(t))
+       throw new TypeMismatch(typeMismatch(array [ i ].type(), t) + " field " +
+                              i
+                             );
+   }
+ 
+   /**
+    * Set members from the provided array.
+    */
+   public void set_members(NameValuePair[] value)
+                    throws TypeMismatch, InvalidValue
+   {
+     if (value.length != array.length)
+       throw new InvalidValue(sizeMismatch(array.length, value.length));
+ 
+     for (int i = 0; i < value.length; i++)
+       {
+         Any any = value [ i ].value;
+         checkType(any.type(), i);
+         checkName(value [ i ].id, i);
+ 
+         array [ i ].from_any(any);
+       }
+     pos = 0;
+   }
+ 
+   /** @inheritDoc */
+   public void assign(DynAny from)
+               throws TypeMismatch
+   {
+     checkType(official_type, from.type());
+     if (from instanceof DynStruct)
+       {
+         try
+           {
+             set_members_as_dyn_any(((DynStruct) from).get_members_as_dyn_any());
+           }
+         catch (InvalidValue e)
+           {
+             TypeMismatch t = new TypeMismatch("Invalid value");
+             t.initCause(e);
+             throw t;
+           }
+       }
+     else
+       throw new TypeMismatch("Not a DynStruct");
+   }
+ 
+   /**
+    * Create a copy.
+    */
+   public DynAny copy()
+   {
+     DynAny[] c = new DynAny[ array.length ];
+     for (int i = 0; i < c.length; i++)
+       {
+         c [ i ] = array [ i ].copy();
+       }
+ 
+     RecordAny d = newInstance(official_type, final_type, factory, orb);
+     d.array = c;
+     return d;
+   }
+ 
+   /**
+    * Create a new instance when copying.
+    */
+   protected abstract RecordAny newInstance(TypeCode oType, TypeCode aType,
+                                                 gnuDynAnyFactory aFactory,
+                                                 ORB anOrb
+                                                );
+ 
+   /**
+    * Done via reflection.
+    */
+   public Any to_any()
+   {
+     try
+       {
+         Streamable sHolder = HolderLocator.createHolder(official_type);
+ 
+         Class sHolderClass = sHolder.getClass();
+         Field sHolderValue = sHolderClass.getField("value");
+         Class sClass = sHolderValue.getType();
+ 
+         Object structure = sClass.newInstance();
+         Object member;
+         Any am;
+         Field vread;
+         Field vwrite;
+         Streamable memberHolder;
+ 
+         for (int i = 0; i < array.length; i++)
+           {
+             am = array [ i ].to_any();
+             memberHolder = am.extract_Streamable();
+             vwrite = structure.getClass().getField(final_type.member_name(i));
+             vread = memberHolder.getClass().getField("value");
+             member = vread.get(memberHolder);
+             vwrite.set(structure, member);
+           }
+ 
+         Any g = createAny();
+         sHolderValue.set(sHolder, structure);
+         g.insert_Streamable(sHolder);
+         g.type(official_type);
+         return g;
+       }
+     catch (Exception e)
+       {
+         throw new Unexpected(e);
+       }
+   }
+ 
+   /**
+    * Done via reflection.
+    */
+   public void from_any(Any an_any)
+                 throws TypeMismatch, InvalidValue
+   {
+     checkType(official_type, an_any.type());
+     try
+       {
+         Streamable s = an_any.extract_Streamable();
+         if (s == null)
+           {
+             if (this instanceof DynValueCommonOperations)
+               {
+                 ((DynValueCommonOperations) this).set_to_null();
+                 return;
+               }
+             else
+               throw new InvalidValue(ISNULL);
+           }
+ 
+         Object structure = s.getClass().getField("value").get(s);
+         if (structure == null && (this instanceof DynValueCommonOperations))
+           {
+             ((DynValueCommonOperations) this).set_to_null();
+             return;
+           }
+ 
+         Any member;
+         Streamable holder;
+         Object field;
+         TypeCode fType;
+         Field fField;
+ 
+         for (int i = 0; i < array.length; i++)
+           {
+             fField = structure.getClass().getField(fNames [ i ]);
+             field = fField.get(structure);
+             fType = array [ i ].type();
+             holder = HolderLocator.createHolder(fType);
+ 
+             member = createAny();
+             holder.getClass().getField("value").set(holder, field);
+             member.insert_Streamable(holder);
+             member.type(fType);
+ 
+             array [ i ].from_any(member);
+           }
+ 
+         if (this instanceof DynValueCommonOperations)
+           ((DynValueCommonOperations) this).set_to_value();
+       }
+     catch (InvalidValue v)
+       {
+         throw v;
+       }
+     catch (NoSuchFieldException ex)
+       {
+         TypeMismatch v =
+           new TypeMismatch("holder value does not match typecode");
+         v.initCause(ex);
+         throw v;
+       }
+     catch (Exception ex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/UndivideableAny.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/UndivideableAny.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/UndivideableAny.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/UndivideableAny.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,493 ----
+ /* Undivideable.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import java.io.Serializable;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Object;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ 
+ /**
+  * Represent DynAny that has no internal components (DynEnum and so on). The
+  * methods, related to internal components, throw exceptions or return agreed
+  * values like null.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class UndivideableAny
+   extends AbstractAny
+   implements Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * Create a new instance with the given typecode.
+    */
+   public UndivideableAny(TypeCode oType, TypeCode aType,
+                          gnuDynAnyFactory aFactory, ORB anOrb)
+   {
+     super(oType, aType, aFactory, anOrb);
+   }
+ 
+   /**
+    * There are no components.
+    *
+    * @return 0, always.
+    */
+   public int component_count()
+   {
+     return 0;
+   }
+ 
+   /**
+    * There is no current component.
+    *
+    * @throws TypeMismatch, always.
+    */
+   public DynAny current_component()
+     throws TypeMismatch
+   {
+     throw new TypeMismatch("Not applicable");
+   }
+ 
+   /**
+    * Returns without action.
+    */
+   public void destroy()
+   {
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public Any get_any()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public boolean get_boolean()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public char get_char()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public double get_double()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public DynAny get_dyn_any()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public float get_float()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public int get_long()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public long get_longlong()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public byte get_octet()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public Object get_reference()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public short get_short()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public String get_string()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public TypeCode get_typecode()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public int get_ulong()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public long get_ulonglong()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public short get_ushort()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public Serializable get_val()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public char get_wchar()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public String get_wstring()
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_any(Any an_any)
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_boolean(boolean a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_char(char a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_double(double a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_dyn_any(DynAny insert_it)
+     throws TypeMismatch, InvalidValue
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_float(float a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_long(int a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_longlong(long a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_octet(byte a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_reference(Object a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_short(short a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_string(String a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_typecode(TypeCode a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_ulong(int a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_ulonglong(long a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_ushort(short a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_val(Serializable a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_wchar(char a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void insert_wstring(String a_x)
+     throws InvalidValue, TypeMismatch
+   {
+     throw new TypeMismatch();
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public boolean next()
+   {
+     return false;
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public void rewind()
+   {
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public boolean seek(int p)
+   {
+     return false;
+   }
+ 
+   /**
+    * Get the typecode of this enumeration.
+    */
+   public TypeCode type()
+   {
+     return official_type;
+   }
+ 
+   /**
+    * Compares with other DynAny for equality.
+    */
+   public boolean equals(java.lang.Object other)
+   {
+     if (other instanceof DynAny)
+       return equal((DynAny) other);
+     else
+       return false;
+   }
+ 
+   /**
+    * This depends on an object.
+    */
+   public abstract boolean equal(DynAny other);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/ValueChangeListener.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/ValueChangeListener.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/ValueChangeListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/ValueChangeListener.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,50 ----
+ /* ValueChangeListener.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ /**
+  * An interface, able to receive notification about the change of value
+  * of some DynAny.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public interface ValueChangeListener
+ {
+   void changed();
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynAny.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynAny.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynAny.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynAny.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,945 ----
+ /* gnuDynAny.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.OctetHolder;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.WCharHolder;
+ import gnu.CORBA.WStringHolder;
+ import gnu.CORBA.HolderLocator;
+ import gnu.CORBA.TypeKindNamer;
+ import gnu.CORBA.GeneralHolder;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.AnyHolder;
+ import org.omg.CORBA.BooleanHolder;
+ import org.omg.CORBA.CharHolder;
+ import org.omg.CORBA.DoubleHolder;
+ import org.omg.CORBA.FloatHolder;
+ import org.omg.CORBA.IntHolder;
+ import org.omg.CORBA.LongHolder;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Object;
+ import org.omg.CORBA.ObjectHolder;
+ import org.omg.CORBA.ShortHolder;
+ import org.omg.CORBA.StringHolder;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodeHolder;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.ValueBaseHolder;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ 
+ import java.io.IOException;
+ import java.io.Serializable;
+ 
+ import java.util.Arrays;
+ 
+ /**
+  * The primitive dynamic Any holds the value basic final_type that cannot be
+  * traversed.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDynAny extends AbstractAny implements DynAny, Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The enclosed Streamable, holding the actual value.
+    */
+   protected Streamable holder;
+ 
+   /**
+    * Create DynAny providing the holder.
+    *
+    * @param a_holder
+    */
+   public gnuDynAny(Streamable aHolder, TypeCode oType, TypeCode aType,
+     gnuDynAnyFactory aFactory, ORB anOrb
+   )
+   {
+     super(oType, aType, aFactory, anOrb);
+     holder = aHolder;
+   }
+ 
+   /**
+    * Assign the contents of the given {@link DynAny} to this DynAny.
+    *
+    * @param from the source to assign from.
+    */
+   public void assign(DynAny from) throws TypeMismatch
+   {
+     checkType(official_type, from.type());
+ 
+     if (from instanceof gnuDynAny)
+       holder = ((gnuDynAny) from).holder;
+     else
+       holder = from.to_any().extract_Streamable();
+     valueChanged();
+   }
+ 
+   /**
+    * Create a copy of this {@link DynAny} via buffer read/write.
+    */
+   public DynAny copy()
+   {
+     if (holder != null)
+       {
+         BufferedCdrOutput buffer = new BufferedCdrOutput();
+         holder._write(buffer);
+ 
+         gnuDynAny other;
+         try
+           {
+             other =
+               new gnuDynAny((Streamable) (holder.getClass().newInstance()),
+                 official_type, final_type, factory, orb
+               );
+           }
+         catch (Exception e)
+           {
+             // Holder must have parameterless constructor.
+             throw new Unexpected(e);
+           }
+         other.holder._read(buffer.create_input_stream());
+         return other;
+       }
+     else
+       {
+         return new gnuDynAny(null, official_type, final_type, factory, orb);
+       }
+   }
+ 
+   /**
+    * Always returns <code>null</code>.
+    *
+    * @return <code>null</code>, always.
+    */
+   public DynAny current_component() throws TypeMismatch
+   {
+     throw new TypeMismatch("Not applicable for " +
+       TypeKindNamer.nameIt(final_type)
+     );
+   }
+ 
+   /**
+    * Returns without action, leaving all work to the garbage collector.
+    */
+   public void destroy()
+   {
+   }
+ 
+   /**
+    * Takes the passed parameter as the enclosed {@link Any} reference.
+    *
+    * @param an_any the {@link Any} that will be used as an enclosed reference.
+    *
+    * @throws TypeMismatch if the final_type of the passed Any is not the same as
+    * the final_type, currently stored in this Any.
+    */
+   public void from_any(Any an_any) throws TypeMismatch, InvalidValue
+   {
+     checkType(official_type, an_any.type());
+ 
+     Streamable a_holder = an_any.extract_Streamable();
+     if (a_holder == null)
+       {
+         throw new InvalidValue(ISNULL);
+       }
+     else if (a_holder instanceof GeneralHolder)
+       {
+         holder = HolderLocator.createHolder(official_type);
+         if (holder == null)
+           holder = HolderLocator.createHolder(final_type);
+ 
+         if (holder == null)
+           holder = ((GeneralHolder) a_holder).Clone();
+         else
+           {
+             InputStream in = an_any.create_input_stream();
+             holder._read(in);
+             try
+               {
+                 in.close();
+               }
+             catch (IOException ex)
+               {
+                 throw new Unexpected(ex);
+               }
+           }
+       }
+     else
+       {
+         try
+           {
+             InputStream in = an_any.create_input_stream();
+             holder = (Streamable) a_holder.getClass().newInstance();
+             holder._read(in);
+             in.close();
+           }
+         catch (Exception ex)
+           {
+             TypeMismatch t = new TypeMismatch();
+             t.initCause(ex);
+             throw t;
+           }
+       }
+     valueChanged();
+   }
+ 
+   /**
+    * Return the second (enclosed any) that is stored in the wrapped Any.
+    */
+   public Any get_any() throws TypeMismatch
+   {
+     try
+       {
+         return ((AnyHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public boolean get_boolean() throws TypeMismatch
+   {
+     try
+       {
+         return ((BooleanHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public char get_char() throws TypeMismatch
+   {
+     try
+       {
+         return ((CharHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public double get_double() throws TypeMismatch
+   {
+     try
+       {
+         return ((DoubleHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public float get_float() throws TypeMismatch
+   {
+     try
+       {
+         return ((FloatHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public int get_long() throws TypeMismatch
+   {
+     try
+       {
+         return ((IntHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public long get_longlong() throws TypeMismatch
+   {
+     try
+       {
+         return ((LongHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public byte get_octet() throws TypeMismatch
+   {
+     try
+       {
+         return ((OctetHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public Object get_reference() throws TypeMismatch
+   {
+     try
+       {
+         return ((ObjectHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public short get_short() throws TypeMismatch
+   {
+     try
+       {
+         return ((ShortHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public String get_string() throws TypeMismatch
+   {
+     try
+       {
+         return ((StringHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode get_typecode() throws TypeMismatch
+   {
+     try
+       {
+         return ((TypeCodeHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public int get_ulong() throws TypeMismatch
+   {
+     check(TCKind.tk_ulong);
+     return get_long();
+   }
+ 
+   /** {@inheritDoc} */
+   public long get_ulonglong() throws TypeMismatch
+   {
+     check(TCKind.tk_ulonglong);
+     return get_longlong();
+   }
+ 
+   /** {@inheritDoc} */
+   public short get_ushort() throws TypeMismatch
+   {
+     check(TCKind.tk_ushort);
+     return get_short();
+   }
+ 
+   /** {@inheritDoc} */
+   public Serializable get_val() throws TypeMismatch
+   {
+     try
+       {
+         return ((ValueBaseHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public char get_wchar() throws TypeMismatch
+   {
+     try
+       {
+         return ((WCharHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public String get_wstring() throws TypeMismatch
+   {
+     try
+       {
+         return ((WStringHolder) holder).value;
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch m = new TypeMismatch();
+         m.initCause(cex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_any(Any a_x) throws TypeMismatch, InvalidValue
+   {
+     try
+       {
+         if (a_x.type().kind().value() == TCKind._tk_null)
+           ((AnyHolder) holder).value = a_x;
+         else
+           {
+             OutputStream buf = a_x.create_output_stream();
+             buf.write_any(a_x);
+             holder._read(buf.create_input_stream());
+             buf.close();
+           }
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+     catch (MARSHAL m)
+       {
+         InvalidValue v = new InvalidValue();
+         v.initCause(m);
+         throw v;
+       }
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_boolean(boolean a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((BooleanHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_char(char a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((CharHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_double(double a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((DoubleHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_float(float a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((FloatHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_long(int a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((IntHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_longlong(long a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((LongHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_octet(byte a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((OctetHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_reference(Object a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((ObjectHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_short(short a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((ShortHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_string(String a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         if (a_x != null &&
+           final_type.length() > 0 &&
+           a_x.length() > final_type.length()
+         )
+           throw new InvalidValue(a_x.length() + " exceeds bound, " +
+             final_type.length()
+           );
+         ((StringHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+     catch (BadKind e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_typecode(TypeCode a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((TypeCodeHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_ulong(int a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((IntHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_ulonglong(long a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((LongHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_ushort(short a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((ShortHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_val(Serializable a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((ValueBaseHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_wchar(char a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         ((WCharHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_wstring(String a_x) throws InvalidValue, TypeMismatch
+   {
+     try
+       {
+         if (a_x != null &&
+           final_type.length() > 0 &&
+           a_x.length() > type().length()
+         )
+           throw new InvalidValue(a_x.length() + " exceeds bound, " +
+             final_type.length()
+           );
+         ((WStringHolder) holder).value = a_x;
+         valueChanged();
+       }
+     catch (ClassCastException cex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(cex);
+         throw t;
+       }
+     catch (BadKind e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /**
+    * The objects, enclosed inside this class, have only one component (self).
+    *
+    * @return false, always (no other action).
+    */
+   public boolean next()
+   {
+     return false;
+   }
+ 
+   /**
+    * Returns without action.
+    */
+   public void rewind()
+   {
+   }
+ 
+   /**
+    * This objects, stored in this wrapper, never have multiple internal
+    * components to seek.
+    *
+    * @return false, always (no other action).
+    */
+   public boolean seek(int p)
+   {
+     return false;
+   }
+ 
+   /**
+    * Returns the enclosed {@link Any}.
+    *
+    * @return the enclosed {@link Any}.
+    */
+   public Any to_any()
+   {
+     Any a = createAny();
+     a.insert_Streamable(holder);
+     a.type(official_type);
+     return a;
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode type()
+   {
+     return official_type;
+   }
+ 
+   /**
+    * Compute hashcode in a trivial way.
+    */
+   protected int getHashCodeSimple(int maximum)
+   {
+     int h = super.hashCode() / 2;
+     if (h < 0)
+       h = -h;
+     return h % maximum;
+   }
+ 
+   /**
+    * Inserts Any, contained in the parameter, into Any, contained in this
+    * DynAny.
+    */
+   public void insert_dyn_any(DynAny d) throws TypeMismatch, InvalidValue
+   {
+     check(d.type().kind());
+ 
+     Any a = d.to_any();
+     holder = a.extract_Streamable();
+     valueChanged();
+   }
+ 
+   /**
+    * Checks for equality. The DynAnys are equal if the stored Anys are equal.
+    */
+   public boolean equal(DynAny other)
+   {
+     if (other instanceof AbstractAny)
+       {
+         if (other instanceof gnuDynAny)
+           {
+             gnuDynAny x = (gnuDynAny) other;
+ 
+             if (!x.holder.getClass().equals(holder.getClass()))
+               return false;
+ 
+             BufferedCdrOutput b1 = new BufferedCdrOutput();
+             x.holder._write(b1);
+ 
+             BufferedCdrOutput b2 = new BufferedCdrOutput(b1.buffer.size() + 10);
+             holder._write(b2);
+ 
+             return Arrays.equals(b1.buffer.toByteArray(),
+               b2.buffer.toByteArray()
+             );
+           }
+         else
+           return false;
+       }
+     if (other == null)
+       return false;
+     else if (other.component_count() != component_count() ||
+       !official_type.equal(other.type())
+     )
+       return false;
+     else
+       return other.to_any().equal(to_any());
+   }
+ 
+   /**
+    * This final_type has no components.
+    *
+    * @return 0, always.
+    */
+   public int component_count()
+   {
+     return 0;
+   }
+ 
+   public DynAny get_dyn_any() throws TypeMismatch, InvalidValue
+   {
+     return new gnuDynAny(holder, official_type, final_type, factory, orb);
+   }
+ 
+   private void check(TCKind t) throws TypeMismatch
+   {
+     if (t.value() != final_type.kind().value())
+       throw new TypeMismatch(t.value() + "!=" + final_type.kind().value());
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynAnyFactory.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynAnyFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynAnyFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynAnyFactory.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,356 ----
+ /* gnuDynAnyFactory.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.Poa.ORB_1_4;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.HolderLocator;
+ import gnu.CORBA.TypeKindNamer;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.UserException;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyFactory;
+ import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;
+ import org.omg.DynamicAny.DynArray;
+ import org.omg.DynamicAny.DynEnum;
+ import org.omg.DynamicAny.DynFixed;
+ import org.omg.DynamicAny.DynSequence;
+ import org.omg.DynamicAny.DynStruct;
+ import org.omg.DynamicAny.DynUnion;
+ import org.omg.DynamicAny.DynValue;
+ import org.omg.DynamicAny.DynValueBox;
+ 
+ /**
+  * This class is returned by ORB when resolving
+  * initial reference "DynAnyFactory".
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDynAnyFactory
+   extends LocalObject
+   implements DynAnyFactory
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The ORB, to that the factory belongs.
+    */
+   final ORB_1_4 orb;
+ 
+   /**
+    * Create a new factory, specifying the ORB to that the factory belongs.
+    *
+    * @param anOrb
+    */
+   public gnuDynAnyFactory(ORB_1_4 anOrb)
+   {
+     orb = anOrb;
+   }
+ 
+   /**
+    * Get the orb.
+    */
+   public ORB_1_4 getOrb()
+   {
+     return orb;
+   }
+ 
+   /**
+    * Create an initialised array.
+    */
+   public DynArray create_array(TypeCode official, TypeCode type)
+   {
+     return new gnuDynArray(official, type, this, orb, true);
+   }
+ 
+   /**
+    * Create an empty sequence.
+    */
+   public DynSequence create_sequence(TypeCode official, TypeCode type)
+   {
+     return new gnuDynSequence(official, type, this, orb);
+   }
+ 
+   /**
+    * Create structure.
+    *
+    * @param official the type that was originally passed as a parameter by user.
+    * May be alias of some other type.
+    * @param type the type into that the "official type" evaluates during alias
+    * resolving. Initially equal to "official type".
+    */
+   public DynStruct create_structure(TypeCode official, TypeCode type)
+   {
+     return new gnuDynStruct(official, type, this, orb);
+   }
+ 
+   /**
+    * Create union.
+    *
+    * @param official the type that was originally passed as a parameter by user.
+    * May be alias of some other type.
+    * @param type the type into that the "official type" evaluates during alias
+    * resolving. Initially equal to "official type".
+    */
+   public DynUnion create_union(TypeCode official, TypeCode type)
+   {
+     try
+       {
+         return new gnuDynUnion(official, type, this, orb);
+       }
+     catch (Exception ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Create value.
+    *
+    * @param official the type that was originally passed as a parameter by user.
+    * May be alias of some other type.
+    * @param type the type into that the "official type" evaluates during alias
+    * resolving. Initially equal to "official type".
+    */
+   public DynValue create_value(TypeCode official, TypeCode type)
+   {
+     return new gnuDynValue(official, type, this, orb);
+   }
+ 
+   /**
+    * Create value box.
+    *
+    * @param official the type that was originally passed as a parameter by user.
+    * May be alias of some other type.
+    * @param type the type into that the "official type" evaluates during alias
+    * resolving. Initially equal to "official type".
+    */
+   public DynValueBox create_value_box(TypeCode official, TypeCode type)
+   {
+     return new gnuDynValueBox(official, type, this, orb);
+   }
+ 
+   /**
+    * Create enumeration.
+    *
+    * @param official the type that was originally passed as a parameter by user.
+    * May be alias of some other type.
+    * @param type the type into that the "official type" evaluates during alias
+    * resolving. Initially equal to "official type".
+    */
+   public DynEnum create_enumeration(TypeCode official, TypeCode type)
+   {
+     return new gnuDynEnum(official, type, this, orb);
+   }
+ 
+   /**
+    * Create fixed.
+    *
+    * @param official the type that was originally passed as a parameter by user.
+    * May be alias of some other type.
+    * @param type the type into that the "official type" evaluates during alias
+    * resolving. Initially equal to "official type".
+    */
+   public DynFixed create_fixed(TypeCode official, TypeCode type)
+   {
+     return new gnuDynFixed(official, type, this, orb);
+   }
+ 
+   /**
+    * Create alias.
+    *
+    * @param official the type that was originally passed as a parameter by user.
+    * May be alias of some other type.
+    * @param type the type into that the "official type" evaluates during alias
+    * resolving. Initially equal to "official type".
+    */
+   public DynAny create_alias(TypeCode official, TypeCode type)
+                       throws InconsistentTypeCode
+   {
+     try
+       {
+         return create_dyn_any_from_type_code(official, type.content_type());
+       }
+     catch (BadKind e)
+       {
+         throw new Unexpected(e);
+       }
+   }
+ 
+   /**
+    * Create the undivideable DynAny.
+    */
+   public DynAny create_simple(TypeCode official, TypeCode type)
+   {
+     Streamable holder = HolderLocator.createHolder(type);
+     return new gnuDynAny(holder, official, type, this, orb);
+   }
+ 
+   /**
+    * Create the DynAny from typecode.
+    */
+   public DynAny create_dyn_any_from_type_code(TypeCode type)
+                                        throws InconsistentTypeCode
+   {
+     return create_dyn_any_from_type_code(type, type);
+   }
+ 
+   /**
+    * Create the DynAny from typecode.
+    *
+    * @param official the type that was originally passed as a parameter by user.
+    * May be alias of some other type.
+    * @param type the type into that the "official type" evaluates during alias
+    * resolving. Initially equal to "official type".
+    */
+   public DynAny create_dyn_any_from_type_code(TypeCode official, TypeCode type)
+                                        throws InconsistentTypeCode
+   {
+     DynAny d;
+     try
+       {
+         switch (type.kind().value())
+           {
+             case TCKind._tk_array :
+               return create_array(official, type);
+ 
+             case TCKind._tk_sequence :
+               return create_sequence(official, type);
+ 
+             case TCKind._tk_struct :
+             case TCKind._tk_except :
+               return create_structure(official, type);
+ 
+             case TCKind._tk_union :
+               return create_union(official, type);
+ 
+             case TCKind._tk_value :
+               return create_value(official, type);
+ 
+             case TCKind._tk_value_box :
+               return create_value_box(official, type);
+ 
+             case TCKind._tk_enum :
+               return create_enumeration(official, type);
+ 
+             case TCKind._tk_fixed :
+               return create_fixed(official, type);
+ 
+             case TCKind._tk_alias :
+               return create_alias(official, type);
+ 
+             case TCKind._tk_null :
+               return new gnuDynAny(null, official, type, this, orb);
+ 
+             case TCKind._tk_TypeCode :
+               d = create_simple(official, type);
+               d.insert_typecode(orb.get_primitive_tc(TCKind.tk_null));
+               return d;
+ 
+             case TCKind._tk_any :
+               d = create_simple(official, type);
+ 
+               Any empty_any = orb.create_any();
+               empty_any.type(orb.get_primitive_tc(TCKind.tk_null));
+               d.insert_any(empty_any);
+               return d;
+ 
+             case TCKind._tk_wstring :
+               d = create_simple(official, type);
+               d.insert_wstring("");
+               return d;
+ 
+             case TCKind._tk_string :
+               d = create_simple(official, type);
+               d.insert_string("");
+               return d;
+ 
+             case TCKind._tk_native :
+             case TCKind._tk_Principal :
+             case TCKind._tk_abstract_interface :
+               throw new InconsistentTypeCode("Following API, the " +
+                                              TypeKindNamer.nameIt(type) +
+                                              " must not be supported."
+                                             );
+ 
+             default :
+               return create_simple(official, type);
+           }
+       }
+     catch (UserException uex)
+       {
+         InconsistentTypeCode it = new InconsistentTypeCode();
+         it.initCause(uex);
+         throw it;
+       }
+   }
+ 
+   /**
+    * Create the DynAny using the passed value as template and assign this value.
+    */
+   public DynAny create_dyn_any(Any value)
+                         throws InconsistentTypeCode
+   {
+     DynAny created = create_dyn_any_from_type_code(value.type());
+     try
+       {
+         created.from_any(value);
+       }
+     catch (UserException uex)
+       {
+         InconsistentTypeCode t = new InconsistentTypeCode("Inconsistent Any");
+         t.initCause(uex);
+         throw t;
+       }
+     catch (Exception e)
+       {
+         throw new Unexpected(e);
+       }
+     return created;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynArray.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynArray.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynArray.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynArray.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,338 ----
+ /* gnuDynArray.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.HolderLocator;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ import org.omg.DynamicAny.DynArray;
+ 
+ import java.io.Serializable;
+ 
+ import java.lang.reflect.Array;
+ import java.lang.reflect.Field;
+ 
+ /**
+  * Provides support for dynamic array or sequence, where all members have the
+  * same final_type.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDynArray
+   extends DivideableAny
+   implements DynArray, Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The component "official" type (may be alias).
+    */
+   final TypeCode official_components;
+ 
+   /**
+    * The component "final" type, after resolving any aliases.
+    */
+   final TypeCode final_components;
+ 
+   /**
+    * Creates new array.
+    *
+    * @param aType the final_type of array.
+    * @param aFactory the factory, used to initialise default values.
+    * @param orb the ORB to that this DynAny belongs.
+    * @param initialise_array if false, the array is not initialised in
+    * constructor.
+    *
+    *
+    * @throws BAD_PARAM if the passed typecode does not provide the length().
+    */
+   public gnuDynArray(TypeCode oType, TypeCode aType, gnuDynAnyFactory aFactory,
+                      ORB anOrb, boolean initialise_array
+                     )
+               throws BAD_PARAM
+   {
+     super(oType, aType, aFactory, anOrb);
+ 
+     try
+       {
+         official_components = final_type.content_type();
+ 
+         TypeCode component = official_components;
+         while (component.kind().value() == TCKind._tk_alias)
+           component = component.content_type();
+         final_components = component;
+ 
+         if (initialise_array)
+           {
+             array = new DynAny[ aType.length() ];
+             for (int i = 0; i < array.length; i++)
+               {
+                 array [ i ] =
+                   factory.create_dyn_any_from_type_code(official_components);
+               }
+           }
+       }
+     catch (Exception e)
+       {
+         BAD_PARAM bad = new BAD_PARAM("Unable to initialise array");
+         bad.initCause(e);
+         throw bad;
+       }
+   }
+ 
+   /**
+    * Copy one DynAny into another.
+    */
+   public void assign(DynAny from)
+               throws TypeMismatch
+   {
+     checkType(official_type, from.type());
+     if (from instanceof DynArray && from.component_count() == array.length)
+       {
+         DynArray dyn = (DynArray) from;
+         array = dyn.get_elements_as_dyn_any();
+       }
+     else
+       throw new TypeMismatch();
+   }
+ 
+   /**
+    * Create a copy.
+    */
+   public DynAny copy()
+   {
+     DynAny[] c = new DynAny[ array.length ];
+     for (int i = 0; i < c.length; i++)
+       {
+         c [ i ] = array [ i ].copy();
+       }
+ 
+     gnuDynArray d =
+       new gnuDynArray(official_type, final_type, factory, orb, false);
+     d.array = c;
+     return d;
+   }
+ 
+   /**
+    * Get elements as array of anys.
+    */
+   public Any[] get_elements()
+   {
+     Any[] r = new Any[ array.length ];
+     for (int i = 0; i < r.length; i++)
+       r [ i ] = array [ i ].to_any();
+     return r;
+   }
+ 
+   /** {@inheritDoc} */
+   public DynAny[] get_elements_as_dyn_any()
+   {
+     DynAny[] a = new DynAny[ array.length ];
+     for (int i = 0; i < a.length; i++)
+       {
+         a [ i ] = array [ i ].copy();
+       }
+     return a;
+   }
+ 
+   /**
+    * Set elements when array of dyn anys is provided. This method can set nested
+    * data structures as an array components.
+    */
+   public void set_elements_as_dyn_any(DynAny[] value)
+                                throws InvalidValue, TypeMismatch
+   {
+     if (value.length != array.length)
+       throw new InvalidValue(sizeMismatch(array.length, value.length));
+     for (int i = 0; i < value.length; i++)
+       {
+         checkType(official_components, value [ i ].type());
+         array [ i ].assign(value [ i ]);
+       }
+     pos = 0;
+     valueChanged();
+   }
+ 
+   /**
+    * Set elements when array of ordinary anys is provided.
+    */
+   public void set_elements(Any[] value)
+                     throws InvalidValue, TypeMismatch
+   {
+     if (value.length != array.length)
+       throw new InvalidValue(sizeMismatch(array.length, value.length));
+ 
+     for (int i = 0; i < value.length; i++)
+       {
+         checkType(official_components, value [ i ].type());
+         try
+           {
+             array [ i ] = factory.create_dyn_any(value [ i ]);
+           }
+         catch (InconsistentTypeCode e)
+           {
+             TypeMismatch t = new TypeMismatch();
+             t.initCause(e);
+             throw t;
+           }
+       }
+     pos = 0;
+     valueChanged();
+   }
+ 
+   /**
+    * Done via reflection.
+    */
+   public Any to_any()
+   {
+     try
+       {
+         Streamable memberHolder =
+           HolderLocator.createHolder(official_components);
+ 
+         if (memberHolder == null)
+           memberHolder = HolderLocator.createHolder(final_components);
+ 
+         Class memberHolderClass = memberHolder.getClass();
+         Class memberClass = memberHolderClass.getField("value").getType();
+ 
+         Object members = Array.newInstance(memberClass, array.length);
+         Object member;
+         Any am;
+         Field value = memberHolder.getClass().getField("value");
+ 
+         for (int i = 0; i < array.length; i++)
+           {
+             // Recursive call should support multidimensional arrays.
+             am = array [ i ].to_any();
+             memberHolder = am.extract_Streamable();
+             member = value.get(memberHolder);
+             Array.set(members, i, member);
+           }
+ 
+         Streamable arrayHolder = HolderLocator.createHolder(official_type);
+         arrayHolder.getClass().getField("value").set(arrayHolder, members);
+ 
+         Any g = createAny();
+         g.insert_Streamable(arrayHolder);
+         g.type(official_type);
+         return g;
+       }
+     catch (Exception e)
+       {
+         throw new Unexpected(e);
+       }
+   }
+ 
+   /**
+    * Done via reflection.
+    */
+   public void from_any(Any an_any)
+                 throws TypeMismatch, InvalidValue
+   {
+     checkType(official_type, an_any.type());
+     try
+       {
+         Streamable s = an_any.extract_Streamable();
+         Object members = s.getClass().getField("value").get(s);
+ 
+         checkArrayValid(members);
+ 
+         Any member;
+         Streamable holder;
+         Class holderClass = null;
+ 
+         for (int i = 0; i < array.length; i++)
+           {
+             if (holderClass == null)
+               {
+                 holder = HolderLocator.createHolder(official_components);
+                 if (holder == null)
+                   holder = HolderLocator.createHolder(final_components);
+                 holderClass = holder.getClass();
+               }
+             else
+               holder = (Streamable) holderClass.newInstance();
+ 
+             member = createAny();
+             holder.getClass().getField("value").set(holder,
+                                                     Array.get(members, i)
+                                                    );
+             member.insert_Streamable(holder);
+             member.type(official_components);
+ 
+             // This may lead to recursion, supporting multidimensional
+             // arrays.
+             array [ i ].from_any(member);
+           }
+       }
+     catch (Exception ex)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(ex);
+         throw t;
+       }
+     valueChanged();
+   }
+ 
+   /**
+    * Check if array size is valid and (for sequences) resized
+    * if required. Called from from_any.
+    */
+   protected void checkArrayValid(Object members)
+                           throws TypeMismatch, InvalidValue
+   {
+     if (array.length != Array.getLength(members))
+       throw new InvalidValue(sizeMismatch(array.length, Array.getLength(members)));
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynEnum.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynEnum.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynEnum.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynEnum.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,244 ----
+ /* gnuDynEnum.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.Unexpected;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ import org.omg.DynamicAny.DynEnum;
+ 
+ import java.io.IOException;
+ 
+ import java.util.Arrays;
+ 
+ /**
+  * Our implementation of dynamic enumeration.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDynEnum extends UndivideableAny implements DynEnum
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The valid string values of the enumeration. Most of enumerations are short,
+    * counting 2-5 memebers. With so small number of memebers, it seems not
+    * reasonable to use hashtables.
+    */
+   final String[] values;
+ 
+   /**
+    * The current value of enum.
+    */
+   int current;
+ 
+   /**
+    * Create a new dyn enum from the given typecode.
+    */
+   public gnuDynEnum(TypeCode oType, TypeCode aType, gnuDynAnyFactory aFactory,
+     ORB anOrb
+   )
+   {
+     super(oType, aType, aFactory, anOrb);
+     try
+       {
+         values = new String[ final_type.member_count() ];
+ 
+         for (int i = 0; i < values.length; i++)
+           {
+             values [ i ] = final_type.member_name(i);
+           }
+       }
+     catch (Exception e)
+       {
+         throw new BAD_PARAM("Not enum");
+       }
+   }
+ 
+   /**
+    * Create a clone of the given enum, sharing values and final_type.
+    */
+   public gnuDynEnum(gnuDynEnum from)
+   {
+     super(from.official_type, from.final_type, from.factory, from.orb);
+     values = from.values;
+   }
+ 
+   /**
+    * Assign the Enum from the passed value. The passed DynAny must hold the
+    * enumeration of exactly the same final_type.
+    */
+   public void assign(DynAny from) throws TypeMismatch
+   {
+     checkType(official_type, from.type());
+     if (!(from instanceof DynEnum))
+       throw new TypeMismatch("Not a DynEnum");
+     try
+       {
+         set_as_ulong(((DynEnum) from).get_as_ulong());
+       }
+     catch (InvalidValue e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Copy this DynEnum.
+    */
+   public DynAny copy()
+   {
+     gnuDynEnum other = new gnuDynEnum(this);
+     other.current = current;
+     return other;
+   }
+ 
+   /**
+    * Compares for equality.
+    */
+   public boolean equal(DynAny other)
+   {
+     if (other instanceof gnuDynEnum)
+       {
+         gnuDynEnum oe = (gnuDynEnum) other;
+         return current == oe.current &&
+         (oe.values == values || Arrays.equals(values, oe.values));
+       }
+     else if (other instanceof DynEnum)
+       {
+         DynEnum oe = (DynEnum) other;
+         return current == oe.get_as_ulong() && official_type.equal(oe.type());
+       }
+     else
+       return false;
+   }
+ 
+   /**
+    * Set value from any that must contain enumeration.
+    */
+   public void from_any(Any an_any) throws TypeMismatch, InvalidValue
+   {
+     checkType(official_type, an_any.type());
+     try
+       {
+         InputStream in = an_any.create_input_stream();
+         set_as_ulong(in.read_long());
+         in.close();
+       }
+     catch (MARSHAL eof)
+       {
+         throw new InvalidValue();
+       }
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Get the value of this enumeration as string.
+    */
+   public String get_as_string()
+   {
+     return values [ current ];
+   }
+ 
+   /**
+    * Get the value of this enumeration as int.
+    */
+   public int get_as_ulong()
+   {
+     return current;
+   }
+ 
+   /**
+    * Set the value of this enumeration as string.
+    */
+   public void set_as_string(String value) throws InvalidValue
+   {
+     for (int i = 0; i < values.length; i++)
+       {
+         if (values [ i ].equals(value))
+           {
+             current = i;
+             valueChanged();
+             return;
+           }
+       }
+     throw new InvalidValue(value);
+   }
+ 
+   /**
+    * Set the value of this enumeration as int.
+    */
+   public void set_as_ulong(int value) throws InvalidValue
+   {
+     if (value < 0 || value >= values.length)
+       throw new InvalidValue(value + " not in [0.." + values.length);
+     else
+       {
+         current = value;
+         valueChanged();
+       }
+   }
+ 
+   /**
+    * Wrap the enumeration value into any.
+    */
+   public Any to_any()
+   {
+     Any a = createAny();
+     a.insert_long(current);
+     a.type(official_type);
+     return a;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynFixed.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynFixed.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynFixed.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynFixed.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,252 ----
+ /* gnuDynFixed.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ import org.omg.DynamicAny.DynFixed;
+ import org.omg.DynamicAny.DynFixedOperations;
+ 
+ import java.math.BigDecimal;
+ 
+ /**
+  * Implements DynAny, holding CORBA <code>fixed</code>. This class is derived
+  * from gnuDynEnm to avoid repetetive inclusion of unused DynAny methods.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDynFixed extends UndivideableAny implements DynFixed
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The default value, assigned in the new instance.
+    */
+   static final BigDecimal ZERO = new BigDecimal("0.0");
+ 
+   /**
+    * The content of the dyn fixed, wrapped in this DynAny.
+    */
+   BigDecimal value;
+ 
+   /**
+    * The number of digits after the decimal point.
+    */
+   final int scale;
+ 
+   /**
+    * The number of digits.
+    */
+   final int digits;
+ 
+   /**
+    * Create a new instance of the dyn fixed.
+    */
+   public gnuDynFixed(TypeCode oType, TypeCode aType,
+     gnuDynAnyFactory aFactory, ORB anOrb
+   )
+   {
+     super(oType, aType, aFactory, anOrb);
+     try
+       {
+         digits = final_type.fixed_digits();
+         scale = final_type.fixed_scale();
+       }
+     catch (Exception e)
+       {
+         throw new BAD_PARAM("Not a fixed");
+       }
+     value = ZERO;
+   }
+ 
+   /**
+    * Clone the current instance.
+    */
+   public gnuDynFixed(gnuDynFixed from)
+   {
+     super(from.official_type, from.final_type, from.factory, from.orb);
+     digits = from.digits;
+     scale = from.scale;
+     value = from.value;
+   }
+ 
+   /**
+    * Get the value of the wrapped dyn fixed, as string.
+    */
+   public String get_value()
+   {
+     return value.toString();
+   }
+ 
+   /**
+    * Set the value.
+    */
+   public boolean set_value(String fixed_value)
+     throws TypeMismatch, InvalidValue
+   {
+     // Count the digits till decimal point.
+     int digs = 0;
+     char c;
+     boolean leading0 = true;
+     Digs:
+     for (int i = 0; i < fixed_value.length(); i++)
+       {
+         c = fixed_value.charAt(i);
+         if (Character.isDigit(c))
+           {
+             if (!(c == '0' && leading0))
+               digs++;
+             if (c != '0')
+               leading0 = false;
+           }
+         else if (c == '.')
+           break Digs;
+       }
+     if (digs > (digits - scale))
+       throw new InvalidValue("Too many digits: " + digs + " for " + digits +
+         "." + scale
+       );
+ 
+     try
+       {
+         value = new BigDecimal(fixed_value);
+       }
+     catch (NumberFormatException ex)
+       {
+         if (fixed_value.trim().length() == 0)
+           throw new InvalidValue("Empty string passed");
+ 
+         TypeMismatch inva =
+           new TypeMismatch("Not a number: '" + fixed_value + "'");
+         inva.initCause(ex);
+         throw inva;
+       }
+ 
+     valueChanged();
+     return value.scale() <= scale;
+   }
+ 
+   /**
+    * Assign the value from another BigDecimal.
+    */
+   public void assign(DynAny from) throws TypeMismatch
+   {
+     checkType(official_type, from.type());
+ 
+     if (from instanceof gnuDynFixed)
+       {
+         gnuDynFixed other = (gnuDynFixed) from;
+         value = other.value;
+       }
+     else if (from instanceof DynFixedOperations)
+       {
+         value = new BigDecimal(((DynFixedOperations) from).get_value());
+       }
+     else
+       throw new TypeMismatch("Not a DynFixed");
+     valueChanged();
+   }
+ 
+   /**
+    * Create a copy.
+    */
+   public DynAny copy()
+   {
+     return new gnuDynFixed(this);
+   }
+ 
+   /**
+    * Compare for equality.
+    */
+   public boolean equal(DynAny other)
+   {
+     if (other instanceof gnuDynFixed)
+       {
+         // Normally, this code would be executed.
+         return value.equals(((gnuDynFixed) other).value);
+       }
+     if (other instanceof DynFixedOperations)
+       {
+         // This may be involved when mixing implementations.
+         return ((DynFixedOperations) other).get_value().equals(get_value());
+       }
+     else
+       return false;
+   }
+ 
+   /**
+    * Set the value from Any (must hold <code>fixed</code> with the matching
+    * typecode.).
+    */
+   public void from_any(Any an_any) throws TypeMismatch, InvalidValue
+   {
+     try
+       {
+         checkType(official_type, an_any.type());
+ 
+         value = an_any.extract_fixed();
+         valueChanged();
+       }
+     catch (BAD_OPERATION e)
+       {
+         InvalidValue t = new InvalidValue();
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Create and return Any, holding this DynFixed value.
+    */
+   public Any to_any()
+   {
+     Any g = createAny();
+     g.insert_fixed(value, official_type);
+     return g;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynSequence.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynSequence.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynSequence.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynSequence.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,254 ----
+ /* gnuDynSequence.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.Unexpected;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ import org.omg.DynamicAny.DynSequence;
+ 
+ import java.io.Serializable;
+ 
+ import java.lang.reflect.*;
+ 
+ public class gnuDynSequence
+   extends gnuDynArray
+   implements DynSequence, Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The bound of the sequence, as defined in typecode.
+    */
+   final int bound;
+ 
+   /**
+    * Create a new gnuDynSequence with the given typecode.
+    *
+    * @throws BAD_PARAM if the passed typecode is probably not a sequence
+    * typecode.
+    */
+   public gnuDynSequence(TypeCode oType, TypeCode aType,
+                         gnuDynAnyFactory aFactory, ORB anOrb
+                        )
+                  throws BAD_PARAM
+   {
+     super(oType, aType, aFactory, anOrb, false);
+     array = new DynAny[ 0 ];
+     try
+       {
+         bound = final_type.length();
+       }
+     catch (BadKind ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Get the length of the sequence.
+    */
+   public int get_length()
+   {
+     return array.length;
+   }
+ 
+   /**
+    * Resize the sequence, preserving components.
+    */
+   public void set_length(int length)
+                   throws InvalidValue
+   {
+     checkBound(length);
+     if (length == array.length)
+       return; // Nothing to do.
+     else if (length < array.length)
+       {
+         // Truncate.
+         DynAny[] d = new DynAny[ length ];
+         for (int i = 0; i < d.length; i++)
+           d [ i ] = array [ i ];
+         array = d;
+       }
+     else
+       {
+         // Expand.
+         DynAny[] d = new DynAny[ length ];
+         for (int i = 0; i < array.length; i++)
+           d [ i ] = array [ i ];
+ 
+         for (int i = array.length; i < d.length; i++)
+           {
+             try
+               {
+                 d [ i ] =
+                   factory.create_dyn_any_from_type_code(official_components);
+               }
+             catch (InconsistentTypeCode e)
+               {
+                 throw new Unexpected(e);
+               }
+           }
+         array = d;
+       }
+     valueChanged();
+   }
+ 
+   /**
+    * Copy one DynAny into another.
+    */
+   public void assign(DynAny from)
+               throws TypeMismatch
+   {
+     checkType(official_type, from.type());
+     if (from instanceof DynSequence)
+       {
+         DynSequence dyn = (DynSequence) from;
+         array = dyn.get_elements_as_dyn_any();
+       }
+     else
+       throw new TypeMismatch();
+   }
+ 
+   /*
+    * Set the contenst of the sequence, resizing if required.
+    */
+   public void set_elements_as_dyn_any(DynAny[] value)
+                                throws InvalidValue, TypeMismatch
+   {
+     checkBound(value.length);
+     if (array.length != value.length)
+       set_length(value.length);
+ 
+     for (int i = 0; i < value.length; i++)
+       {
+         checkType(official_components, value [ i ].type());
+         array [ i ].assign(value [ i ]);
+       }
+     valueChanged();
+   }
+ 
+   /**
+    * Set the elements from array of Any's.
+    */
+   public void set_elements(Any[] value)
+                     throws InvalidValue, TypeMismatch
+   {
+     checkBound(value.length);
+ 
+     DynAny[] prev = array;
+ 
+     array = new DynAny[ value.length ];
+     try
+       {
+         super.set_elements(value);
+ 
+         // valueChanged() is called in super.set_elements(value).
+       }
+ 
+     // On the problem, value does not change.
+     catch (TypeMismatch ex)
+       {
+         array = prev;
+         throw ex;
+       }
+     catch (InvalidValue ex)
+       {
+         array = prev;
+         throw ex;
+       }
+     catch (RuntimeException rex)
+       {
+         array = prev;
+         throw rex;
+       }
+   }
+ 
+   /**
+    * Create a copy.
+    */
+   public DynAny copy()
+   {
+     DynAny[] c = new DynAny[ array.length ];
+     for (int i = 0; i < c.length; i++)
+       {
+         c [ i ] = array [ i ].copy();
+       }
+ 
+     gnuDynSequence d =
+       new gnuDynSequence(official_type, final_type, factory, orb);
+     d.array = c;
+     return d;
+   }
+ 
+   /**
+    * Check the bound.
+    *
+    * @param x the value to check.
+    */
+   void checkBound(int x)
+            throws InvalidValue
+   {
+     if (bound != 0)
+       if (x < 0 || x > bound)
+         throw new InvalidValue(x + " out of bounds, valid [0.." + bound + "]");
+   }
+ 
+   /**
+    * Check if array size is valid. Called from from_any.
+    */
+   protected void checkArrayValid(Object members)
+                           throws TypeMismatch, InvalidValue
+   {
+     checkBound(Array.getLength(members));
+     if (get_length() != Array.getLength(members))
+       set_length(Array.getLength(members));
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynStruct.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynStruct.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynStruct.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynStruct.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,109 ----
+ /* gnuDynStruct.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import java.io.Serializable;
+ 
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.DynamicAny.DynStruct;
+ import org.omg.DynamicAny.NameDynAnyPair;
+ import org.omg.DynamicAny.NameValuePair;
+ import gnu.CORBA.Unexpected;
+ import org.omg.DynamicAny.DynAny;
+ 
+ /**
+  * Implementation of the DynStruct.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDynStruct
+   extends RecordAny
+   implements DynStruct, Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * Create an instance.
+    */
+   public gnuDynStruct(TypeCode oType, TypeCode aType,
+                       gnuDynAnyFactory aFactory, ORB anOrb)
+   {
+     super(oType, aType, aFactory, anOrb);
+ 
+     // Initialise fields.
+     try
+       {
+         array = new DynAny[ final_type.member_count() ];
+         fNames = new String[ array.length ];
+         for (int i = 0; i < array.length; i++)
+           {
+             array [ i ] =
+               factory.create_dyn_any_from_type_code(final_type.member_type(i));
+             fNames [ i ] = final_type.member_name(i);
+           }
+       }
+     catch (Exception e)
+       {
+         throw new Unexpected(e);
+       }
+   }
+ 
+   /** @inheritDoc */
+   protected RecordAny newInstance(TypeCode oType, TypeCode aType,
+                                        gnuDynAnyFactory aFactory, ORB anOrb)
+   {
+     return new gnuDynStruct(oType, aType, aFactory, anOrb);
+   }
+ 
+   /** @inheritDoc */
+   public NameDynAnyPair[] get_members_as_dyn_any()
+   {
+     return super.gnu_get_members_as_dyn_any();
+   }
+ 
+   /** @inheritDoc */
+   public NameValuePair[] get_members()
+   {
+     return super.gnu_get_members();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynUnion.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynUnion.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynUnion.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynUnion.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,439 ----
+ /* gnuDynUnion.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.Unexpected;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ import org.omg.DynamicAny.DynUnion;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Implementation of DynUnion.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDynUnion
+   extends DivideableAny
+   implements DynUnion, Serializable, ValueChangeListener
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The discrimintor of this union.
+    */
+   DynAny discriminator;
+ 
+   /**
+    * The message string that occurs several times throwing exception.
+    */
+   static String NOAM = "No active member";
+ 
+   /**
+    * Create a new instance with the given typecode.
+    *
+    * @param aType the final_type, must be final_type of the union.
+    */
+   public gnuDynUnion(TypeCode oType, TypeCode aType, gnuDynAnyFactory aFactory,
+                      ORB anOrb
+                     )
+               throws InconsistentTypeCode
+   {
+     super(oType, aType, aFactory, anOrb);
+     try
+       {
+         discriminator =
+           factory.create_dyn_any_from_type_code(final_type.discriminator_type());
+ 
+         ((AbstractAny) discriminator).listener = this;
+ 
+         if (final_type.default_index() >= 0)
+           set_to_default_member();
+         else
+           set_to_no_active_member();
+       }
+     catch (Exception ex)
+       {
+         InconsistentTypeCode inc = new InconsistentTypeCode("discriminator");
+         inc.initCause(ex);
+         throw inc;
+       }
+   }
+ 
+   /*
+    * (non-Javadoc)
+    *
+    * @see gnu.CORBA.DynAn.DivideableAny#to_any()
+    */
+   public Any to_any()
+   {
+     Any a = createAny();
+     OutputStream ou = a.create_output_stream();
+     discriminator.to_any().write_value(ou);
+     if (array.length == 2)
+       array [ 1 ].to_any().write_value(ou);
+     a.read_value(ou.create_input_stream(), final_type);
+     return a;
+   }
+ 
+   /**
+    * Assign from another identical structure.
+    */
+   public void assign(DynAny from)
+               throws TypeMismatch
+   {
+     checkType(official_type, from.type());
+     if (!(from instanceof DynUnion))
+       throw new TypeMismatch("DynUnion required");
+     else
+       {
+         try
+           {
+             DynUnion u = (DynUnion) from;
+             discriminator.assign(u.get_discriminator());
+             if (u.has_no_active_member())
+               {
+                 if (array.length != 1)
+                   array = new DynAny[] { discriminator };
+               }
+             else
+               {
+                 if (array.length != 2)
+                   array = new DynAny[] { discriminator, u.member().copy() };
+                 else
+                   array [ 1 ] = u.member().copy();
+               }
+           }
+         catch (InvalidValue e)
+           {
+             throw new Unexpected(e);
+           }
+       }
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public DynAny copy()
+   {
+     try
+       {
+         gnuDynUnion other =
+           new gnuDynUnion(official_type, final_type, factory, orb);
+         other.discriminator = discriminator.copy();
+         ((AbstractAny) other.discriminator).listener = other;
+         if (array.length == 1)
+           {
+             other.array = new DynAny[] { other.discriminator };
+           }
+         else
+           {
+             other.array =
+               new DynAny[] { other.discriminator, array [ 1 ].copy() };
+           }
+         return other;
+       }
+     catch (InconsistentTypeCode ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Done via reading from stream.
+    */
+   public void from_any(Any an_any)
+                 throws TypeMismatch, InvalidValue
+   {
+     checkType(official_type, an_any.type());
+ 
+     Any adis = createAny();
+     try
+       {
+         InputStream stream = an_any.create_input_stream();
+         adis.read_value(stream, final_type.discriminator_type());
+ 
+         DynAny nd = factory.create_dyn_any(adis);
+ 
+         set_discriminator(nd);
+         if (array.length == 2)
+           {
+             // Reusing the same Any <code>adis</code>.
+             adis.read_value(stream, array [ 1 ].type());
+             array [ 1 ].from_any(adis);
+           }
+       }
+     catch (InconsistentTypeCode it)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(it);
+         throw t;
+       }
+     catch (MARSHAL m)
+       {
+         InvalidValue t = new InvalidValue();
+         t.initCause(m);
+         throw t;
+       }
+     catch (BadKind b)
+       {
+         throw new Unexpected(b);
+       }
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public TCKind discriminator_kind()
+   {
+     return discriminator.type().kind();
+   }
+ 
+   /** @inheritDoc */
+   public DynAny get_discriminator()
+   {
+     return discriminator;
+   }
+ 
+   /** @inheritDoc */
+   public boolean has_no_active_member()
+   {
+     return array.length == 1;
+   }
+ 
+   /** @inheritDoc */
+   public TCKind member_kind()
+                      throws InvalidValue
+   {
+     return member().type().kind();
+   }
+ 
+   /**
+    * Get the name of the current variant of the union.
+    */
+   public String member_name()
+                      throws InvalidValue
+   {
+     if (array.length == 1)
+       throw new InvalidValue(NOAM);
+     try
+       {
+         Any da = discriminator.to_any();
+ 
+ 
+         // Get the discriminator variant.
+         Variants:
+         for (int i = 0; i < final_type.member_count(); i++)
+           {
+             if (final_type.member_label(i).equal(da))
+               return final_type.member_name(i);
+           }
+         throw new InvalidValue(NOAM);
+       }
+     catch (Exception e)
+       {
+         InvalidValue t = new InvalidValue("Err");
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /** @inheritDoc */
+   public DynAny member()
+                 throws InvalidValue
+   {
+     if (array.length < 2)
+       throw new InvalidValue(NOAM);
+     else
+       return array [ 1 ];
+   }
+ 
+   /**
+    * Set the union discriminator.
+    */
+   public void set_discriminator(DynAny aDiscriminator)
+                          throws TypeMismatch
+   {
+     try
+       {
+         if (!aDiscriminator.type().equal(final_type.discriminator_type()))
+           throw new TypeMismatch("Wrong discriminator final_type for " +
+                                  final_type.name()
+                                 );
+ 
+         // Seting the same discriminator value again should not change
+         // the fields of the current member.
+         if (!discriminator.equal(aDiscriminator))
+           {
+             discriminator.assign(aDiscriminator);
+             updateMember();
+           }
+         else
+           {
+             pos = array.length == 2 ? 1 : 0;
+           }
+       }
+     catch (Exception e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Set to default member, if one exists.
+    */
+   public void set_to_default_member()
+                              throws TypeMismatch
+   {
+     try
+       {
+         int di = final_type.default_index();
+         if (di < 0)
+           throw new TypeMismatch("Union " + final_type.name() +
+                                  "has no default index"
+                                 );
+ 
+         Any da = final_type.member_label(di);
+         discriminator.from_any(da);
+         updateMember();
+       }
+     catch (TypeMismatch m)
+       {
+         // This one OK.
+         throw m;
+       }
+     catch (Exception e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void set_to_no_active_member()
+                                throws TypeMismatch
+   {
+     try
+       {
+         if (final_type.default_index() >= 0)
+           {
+             throw new TypeMismatch("Explicit default case defined.");
+           }
+       }
+     catch (BadKind ex)
+       {
+         // The default index is not set.
+       }
+     array = new DynAny[] { discriminator };
+     valueChanged();
+   }
+ 
+   /**
+    * Update member, in accordance with discriminator value.
+    */
+   public void updateMember()
+                     throws TypeMismatch
+   {
+     try
+       {
+         Any da = discriminator.to_any();
+ 
+ 
+         // Get the discriminator variant.
+         Variants:
+         for (int i = 0; i < final_type.member_count(); i++)
+           {
+             if (final_type.member_label(i).equal(da))
+               {
+                 array =
+                   new DynAny[]
+                   {
+                     discriminator,
+                     factory.create_dyn_any_from_type_code(final_type.member_type(i))
+                   };
+                 pos = 1;
+                 valueChanged();
+                 return;
+               }
+           }
+       }
+     catch (Exception e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+ 
+     // Discrimintator does not point to valid member.
+     array = new DynAny[] { discriminator };
+     pos = 0;
+     valueChanged();
+   }
+ 
+   /**
+    * Called when the discriminator is changed.
+    */
+   public void changed()
+   {
+     try
+       {
+         updateMember();
+       }
+     catch (TypeMismatch ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynValue.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynValue.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynValue.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,386 ----
+ /* gnuDynValue.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.Unexpected;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.VM_TRUNCATABLE;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ValueFactory;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ import org.omg.DynamicAny.DynStruct;
+ import org.omg.DynamicAny.DynValue;
+ import org.omg.DynamicAny.DynValueCommon;
+ import org.omg.DynamicAny.DynValueOperations;
+ import org.omg.DynamicAny.NameDynAnyPair;
+ import org.omg.DynamicAny.NameValuePair;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Implementation of DynValue.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDynValue extends RecordAny implements DynValue,
+   Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * If true, the value of this ValueType is set to null.
+    */
+   boolean isNull;
+ 
+   /**
+    * Create an instance.
+    */
+   public gnuDynValue(TypeCode oType, TypeCode aType,
+     gnuDynAnyFactory aFactory, ORB anOrb
+   )
+   {
+     super(oType, aType, aFactory, anOrb);
+ 
+     // Initialise fields. The array of fields also includes all inherited
+     // fields.
+     try
+       {
+         array = new DynAny[ final_type.member_count() ];
+         fNames = new String[ array.length ];
+         for (int i = 0; i < array.length; i++)
+           {
+             array [ i ] =
+               factory.create_dyn_any_from_type_code(final_type.member_type(i));
+             fNames [ i ] = final_type.member_name(i);
+           }
+ 
+         // Search of inherited members.
+         if (final_type.type_modifier() == VM_TRUNCATABLE.value)
+           {
+             TypeCode parent = final_type.concrete_base_type();
+             DynAny ancestor = factory.create_dyn_any_from_type_code(parent);
+ 
+             if (ancestor instanceof DynValue)
+               {
+                 // Add members of ancestor in front of the curren members.
+                 DynValue anc = (DynValue) ancestor;
+                 anc.set_to_value();
+ 
+                 NameDynAnyPair[] aar = anc.get_members_as_dyn_any();
+                 inheritFields(aar);
+               }
+             else if (ancestor instanceof DynStruct)
+               {
+                 // Add members of ancestor in front of the curren members.
+                 DynStruct anc = (DynStruct) ancestor;
+                 NameDynAnyPair[] aar = anc.get_members_as_dyn_any();
+                 inheritFields(aar);
+               }
+             else
+               throw new BAD_PARAM("The parent of " + final_type.id() + ", " +
+                 parent.id() + ", is not structure nor value."
+               );
+           }
+       }
+     catch (Exception e)
+       {
+         throw new Unexpected(e);
+       }
+ 
+     set_to_null();
+   }
+ 
+   /**
+    * Inherit the provided fields.
+    */
+   private void inheritFields(NameDynAnyPair[] aar)
+   {
+     DynAny[] nArray = new DynAny[ array.length + aar.length ];
+     String[] nNames = new String[ array.length + aar.length ];
+     int p = 0;
+     for (int i = 0; i < aar.length; i++)
+       {
+         nArray [ p ] = aar [ i ].value;
+         nNames [ p ] = aar [ i ].id;
+         p++;
+       }
+ 
+     for (int i = 0; i < array.length; i++)
+       {
+         nArray [ p ] = array [ i ];
+         nNames [ p ] = fNames [ i ];
+         p++;
+       }
+ 
+     array = nArray;
+     fNames = nNames;
+   }
+ 
+   /** @inheritDoc */
+   public TCKind current_member_kind() throws TypeMismatch, InvalidValue
+   {
+     if (isNull)
+       throw new TypeMismatch(ISNULL);
+     else
+       return super.current_member_kind();
+   }
+   ;
+ 
+   /** @inheritDoc */
+   public String current_member_name() throws TypeMismatch, InvalidValue
+   {
+     if (isNull)
+       throw new TypeMismatch(ISNULL);
+     else
+       return super.current_member_name();
+   }
+   ;
+ 
+   /** @inheritDoc */
+   public NameDynAnyPair[] get_members_as_dyn_any() throws InvalidValue
+   {
+     if (isNull)
+       throw new InvalidValue(ISNULL);
+     return super.gnu_get_members_as_dyn_any();
+   }
+   ;
+ 
+   /** @inheritDoc */
+   public NameValuePair[] get_members() throws InvalidValue
+   {
+     if (isNull)
+       throw new InvalidValue(ISNULL);
+     else
+       return super.gnu_get_members();
+   }
+   ;
+ 
+   /** @inheritDoc */
+   public void set_members_as_dyn_any(NameDynAnyPair[] value)
+     throws TypeMismatch, InvalidValue
+   {
+     super.set_members_as_dyn_any(value);
+     isNull = false;
+   }
+   ;
+ 
+   /** @inheritDoc */
+   public void set_members(NameValuePair[] value)
+     throws TypeMismatch, InvalidValue
+   {
+     super.set_members(value);
+     isNull = false;
+   }
+   ;
+ 
+   /** @inheritDoc */
+   public boolean is_null()
+   {
+     return isNull;
+   }
+ 
+   /** @inheritDoc */
+   public void set_to_null()
+   {
+     isNull = true;
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public void set_to_value()
+   {
+     isNull = false;
+     valueChanged();
+   }
+ 
+   /**
+    * Create a new instance.
+    */
+   protected RecordAny newInstance(TypeCode oType, TypeCode aType,
+     gnuDynAnyFactory aFactory, ORB anOrb
+   )
+   {
+     gnuDynValue v = new gnuDynValue(oType, aType, aFactory, anOrb);
+     if (isNull)
+       v.set_to_null();
+     else
+       v.set_to_value();
+     return v;
+   }
+ 
+   /**
+    * Compare for equality, minding null values.
+    */
+   public boolean equal(DynAny other)
+   {
+     if (other instanceof DynValueOperations)
+       {
+         DynValueCommon o = (DynValueCommon) other;
+         if (isNull)
+           return o.is_null() && o.type().equal(official_type);
+         else
+           return !o.is_null() && super.equal(other);
+       }
+     else
+       return false;
+   }
+ 
+   /**
+    * Get the focused component, throwing exception if the current value is null.
+    */
+   protected DynAny focused() throws InvalidValue, TypeMismatch
+   {
+     if (isNull)
+       throw new TypeMismatch(ISNULL);
+     else
+       return super.focused();
+   }
+ 
+   /**
+    * Convert into Any.
+    */
+   public Any to_any()
+   {
+     if (isNull)
+       {
+         Any a0 = createAny();
+         a0.type(orb.get_primitive_tc(TCKind.tk_null));
+         return a0;
+       }
+     else
+       {
+         try
+           {
+             ValueFactory factory =
+               ((org.omg.CORBA_2_3.ORB) orb).lookup_value_factory(official_type.id());
+             if (factory == null)
+               {
+                 MARSHAL m = new MARSHAL("Factory for " + official_type.id() +
+                 " not registered.");
+                 m.minor = Minor.Factory;
+                 throw m;
+               }
+ 
+             OutputStream out = orb.create_output_stream();
+ 
+             for (int i = 0; i < array.length; i++)
+               array [ i ].to_any().write_value(out);
+ 
+             org.omg.CORBA_2_3.portable.InputStream in =
+               (org.omg.CORBA_2_3.portable.InputStream) out.create_input_stream();
+             Serializable v = factory.read_value(in);
+ 
+             Any g = createAny();
+             g.type(official_type);
+             g.insert_Value(v, official_type);
+ 
+             return g;
+           }
+         catch (Exception e)
+           {
+             throw new Unexpected(e);
+           }
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void assign(DynAny from) throws TypeMismatch
+   {
+     checkType(official_type, from.type());
+ 
+     if (from instanceof DynValue)
+       {
+         DynValue other = (DynValue) from;
+         if (other.is_null())
+           set_to_null();
+         else
+           {
+             set_to_value();
+             try
+               {
+                 DynValueOperations src = (DynValueOperations) from;
+                 set_members_as_dyn_any(src.get_members_as_dyn_any());
+               }
+             catch (InvalidValue e)
+               {
+                 TypeMismatch t = new TypeMismatch("Invalid value");
+                 t.initCause(e);
+                 throw t;
+               }
+           }
+       }
+     else
+       throw new TypeMismatch("Not a DynValue");
+   }
+ 
+   /**
+    * Get the number of components.
+    */
+   public int component_count()
+   {
+     return isNull ? 0 : super.component_count();
+   }
+ 
+   /** {@inheritDoc} */
+   public Serializable get_val() throws TypeMismatch, InvalidValue
+   {
+     return to_any().extract_Value();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_val(Serializable a_x) throws InvalidValue, TypeMismatch
+   {
+     Any a = to_any();
+     a.insert_Value(a_x);
+     from_any(a);
+     valueChanged();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynValueBox.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynValueBox.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAn/gnuDynValueBox.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAn/gnuDynValueBox.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,389 ----
+ /* gnuDynValueBox.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.DynAn;
+ 
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.HolderLocator;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;
+ import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
+ import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
+ import org.omg.DynamicAny.DynValueBox;
+ import org.omg.DynamicAny.DynValueBoxOperations;
+ import org.omg.DynamicAny.DynValueCommon;
+ 
+ import java.io.Serializable;
+ 
+ import java.lang.reflect.Field;
+ 
+ /**
+  * Implementation of the DynValueBox.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDynValueBox
+   extends DivideableAny
+   implements DynValueBox, Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The final_type of contents of this value box.
+    */
+   final TypeCode content;
+ 
+   /**
+    * The string for some TypeMismatch exceptions.
+    */
+   String CONTENT = "Box content final_type mismatch";
+ 
+   /**
+    * Create a new instance of gnuDynValueBox.
+    */
+   public gnuDynValueBox(TypeCode oType, TypeCode aType,
+                         gnuDynAnyFactory aFactory, ORB anOrb
+                        )
+   {
+     super(oType, aType, aFactory, anOrb);
+     try
+       {
+         content = final_type.content_type();
+         array = new DynAny[] { factory.create_dyn_any_from_type_code(content) };
+         set_to_null();
+       }
+     catch (Exception e)
+       {
+         throw new Unexpected(e);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void assign(DynAny from)
+               throws TypeMismatch
+   {
+     checkType(official_type, from.type());
+     if (from instanceof DynValueBoxOperations)
+       {
+         DynValueBoxOperations other = (DynValueBoxOperations) from;
+         if (other.is_null())
+           set_to_null();
+         else
+           {
+             DynAny inBox;
+             try
+               {
+                 inBox = other.get_boxed_value_as_dyn_any();
+               }
+             catch (InvalidValue e)
+               {
+                 TypeMismatch t = new TypeMismatch("Invalid value");
+                 t.initCause(e);
+                 throw t;
+               }
+             if (!content.equal(inBox.type()))
+               throw new TypeMismatch(CONTENT);
+             array = new DynAny[] { inBox.copy() };
+           }
+       }
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public DynAny copy()
+   {
+     gnuDynValueBox other =
+       new gnuDynValueBox(official_type, final_type, factory, orb);
+     if (is_null())
+       other.set_to_null();
+     else
+       {
+         try
+           {
+             other.array = new DynAny[] { array [ 0 ].copy() };
+           }
+         catch (Exception e)
+           {
+             throw new Unexpected(e);
+           }
+       }
+     return other;
+   }
+ 
+   /**
+    * Returns null for null value, delegates to super. otherwise.
+    */
+   public DynAny current_component()
+                            throws TypeMismatch
+   {
+     if (is_null())
+       return null;
+     else
+       return super.current_component();
+   }
+ 
+   /**
+    * Compare for equality, minding null values.
+    */
+   public boolean equal(DynAny other)
+   {
+     if (other instanceof DynValueCommon)
+       {
+         DynValueCommon o = (DynValueCommon) other;
+         if (is_null())
+           return o.is_null() && o.type().equal(official_type);
+         else
+           return !o.is_null() && super.equal(other);
+       }
+     else
+       return false;
+   }
+ 
+   /** @inheritDoc */
+   public void from_any(Any an_any)
+                 throws TypeMismatch, InvalidValue
+   {
+     checkType(official_type, an_any.type());
+     try
+       {
+         if (!an_any.type().content_type().equal(content))
+           throw new InvalidValue(CONTENT);
+       }
+     catch (BadKind e)
+       {
+         TypeMismatch t = new TypeMismatch("Not a box");
+         t.initCause(e);
+         throw t;
+       }
+ 
+     Serializable s = an_any.extract_Value();
+     if (s == null)
+       set_to_null();
+     else
+       {
+         try
+           {
+             Streamable holder = HolderLocator.createHolder(content);
+             Field v = holder.getClass().getField("value");
+             v.set(holder, s);
+ 
+             Any cont = createAny();
+             cont.insert_Streamable(holder);
+ 
+             array = new DynAny[] { factory.create_dyn_any(cont) };
+           }
+         catch (Exception ex)
+           {
+             throw new Unexpected(ex);
+           }
+       }
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public Any get_boxed_value()
+                       throws InvalidValue
+   {
+     try
+       {
+         if (is_null())
+           throw new InvalidValue(ISNULL);
+         else
+           return array [ 0 ].to_any();
+       }
+     catch (Exception e)
+       {
+         InvalidValue t = new InvalidValue();
+         t.initCause(e);
+         throw t;
+       }
+   }
+ 
+   /** @inheritDoc */
+   public DynAny get_boxed_value_as_dyn_any()
+                                     throws InvalidValue
+   {
+     if (is_null())
+       throw new InvalidValue(ISNULL);
+     else
+       return array [ 0 ].copy();
+   }
+ 
+   /** {@inheritDoc} */
+   public Serializable get_val()
+                        throws TypeMismatch, InvalidValue
+   {
+     return to_any().extract_Value();
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_val(Serializable a_x)
+                   throws InvalidValue, TypeMismatch
+   {
+     Any a = to_any();
+     a.insert_Value(a_x);
+     from_any(a);
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public boolean is_null()
+   {
+     return array.length == 0;
+   }
+ 
+   /** @inheritDoc */
+   public void set_boxed_value(Any boxIt)
+                        throws TypeMismatch
+   {
+     if (!content.equal(boxIt.type()))
+       throw new TypeMismatch(CONTENT);
+     try
+       {
+         if (is_null())
+           {
+             array = new DynAny[] { factory.create_dyn_any(boxIt) };
+           }
+         else
+           {
+             array [ 0 ].from_any(boxIt);
+           }
+       }
+     catch (Exception e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public void set_boxed_value_as_dyn_any(DynAny boxIt)
+                                   throws TypeMismatch
+   {
+     if (!content.equal(boxIt.type()))
+       throw new TypeMismatch(CONTENT);
+     try
+       {
+         if (is_null())
+           {
+             array = new DynAny[] { boxIt.copy() };
+           }
+         else
+           {
+             array [ 0 ].assign(boxIt);
+           }
+       }
+     catch (Exception e)
+       {
+         TypeMismatch t = new TypeMismatch();
+         t.initCause(e);
+         throw t;
+       }
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public void set_to_null()
+   {
+     array = new DynAny[ 0 ];
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public void set_to_value()
+   {
+     try
+       {
+         if (array.length == 0)
+           {
+             array =
+               new DynAny[] { factory.create_dyn_any_from_type_code(content) };
+           }
+       }
+     catch (InconsistentTypeCode e)
+       {
+         throw new Unexpected(e);
+       }
+     valueChanged();
+   }
+ 
+   /** @inheritDoc */
+   public Any to_any()
+   {
+     Any a = createAny();
+ 
+     if (!is_null())
+       {
+         try
+           {
+             Streamable holder;
+             if (array [ 0 ] instanceof gnuDynAny)
+               holder = ((gnuDynAny) array [ 0 ]).holder;
+             else
+               {
+                 Any uan = array [ 0 ].to_any();
+                 holder = uan.extract_Streamable();
+               }
+ 
+             Field v = holder.getClass().getField("value");
+             Serializable value = (Serializable) v.get(holder);
+             a.type(official_type);
+             a.insert_Value(value, content);
+           }
+         catch (Exception ex)
+           {
+             throw new Unexpected(ex);
+           }
+       }
+     else
+       a.type(orb.get_primitive_tc(TCKind.tk_null));
+     return a;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAnySeqHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAnySeqHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/DynAnySeqHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/DynAnySeqHolder.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,116 ----
+ /* DynAnySeqHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.DynAny;
+ import org.omg.DynamicAny.DynAnySeqHelper;
+ 
+ /**
+  * A holder for the sequence of {@link DynAny}
+  * ({@link DynAnySeq}).
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class DynAnySeqHolder
+   implements Streamable
+ {
+   /**
+    * The stored array of <code>DynAny</code>.
+    */
+   public DynAny[] value;
+ 
+   /**
+    * Create the unitialised instance, leaving the value array
+    * with default <code>null</code> value.
+    */
+   public DynAnySeqHolder()
+   {
+   }
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue the array that will be assigned to
+    * the <code>value</code> array.
+    */
+   public DynAnySeqHolder(DynAny[] initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * The method should read this object from the CDR input stream, but
+    * (following the JDK 1.5 API) it does not.
+    *
+    * @param input a org.omg.CORBA.portable stream to read from.
+    *
+    * @specenote Sun throws the same exception.
+    *
+    * @throws MARSHAL always.
+    */
+   public void _read(InputStream input)
+   {
+     value = DynAnySeqHelper.read(input);
+   }
+ 
+   /**
+    * The method should write this object to the CDR input stream, but
+    * (following the JDK 1.5 API) it does not.
+    *
+    * @param input a org.omg.CORBA.portable stream to read from.
+    *
+    * @specenote Sun throws the same exception.
+    *
+    * @throws MARSHAL always.
+    */
+   public void _write(OutputStream output)
+   {
+     DynAnySeqHelper.write(output, value);
+   }
+ 
+   /**
+    * Get the typecode of the DynAny.
+    */
+   public org.omg.CORBA.TypeCode _type()
+   {
+     return DynAnySeqHelper.type();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/EmptyExceptionHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/EmptyExceptionHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/EmptyExceptionHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/EmptyExceptionHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,133 ----
+ /* EmptyStructHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.UNKNOWN;
+ import org.omg.CORBA.UnknownUserException;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ /**
+  * This holder can store any CORBA exception that has no user defined fields.
+  * Only the repository ID is written when the method {@link #_write} is called.
+  * The _read method is not supported for this holder.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class EmptyExceptionHolder
+   implements Streamable
+ {
+   /**
+    * The wrapped exception.
+    */
+   public Throwable value;
+ 
+   /**
+    * The typecode of the wrapped exception.
+    */
+   public TypeCode typecode;
+ 
+   /**
+    * Create the exception holder, initialised to the given values.
+    *
+    * @param an_exception the wrapped exception.
+    * @param an_id the exception repository id.
+    */
+   public EmptyExceptionHolder(Throwable an_exception, TypeCode a_typecode)
+   {
+     value = an_exception;
+     typecode = a_typecode;
+   }
+ 
+   /**
+    * Reads the exception from the input stream.
+    *
+    * The value field obtains the value of either the read exception or
+    * the UNKNOWN if the repository ID does not match
+    * the exception from the reachable code.
+    */
+   public void _read(InputStream input)
+   {
+     String id = input.read_string();
+     Object ex = ObjectCreator.Idl2Object(id);
+     if (ex == null)
+       value = new UNKNOWN(id);
+     else
+       value = (Throwable) ex;
+   }
+ 
+   /**
+    * Return the typecode of the stored exception.
+    *
+    * @return the value, passed as a_typecode in constructor.
+    */
+   public TypeCode _type()
+   {
+     return typecode;
+   }
+ 
+   /**
+    * Write the exception into the give output stream. Writes the
+    * repository id that is taken from the typecode. This method also
+    * works when no helper class is available.
+    *
+    * @param output a stream to write into.
+    *
+    * @throws BAD_OPERATION if the value for the holder is not set or
+    * the typecode cannot provide repository id.
+    */
+   public void _write(OutputStream output)
+   {
+     try
+       {
+         output.write_string(typecode.id());
+       }
+     catch (Exception ex)
+       {
+         BAD_OPERATION bad = new BAD_OPERATION();
+         bad.minor = Minor.CDR;
+         bad.initCause(ex);
+         throw bad;
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/ForwardRequestHelper.java gcc-4.1.0/libjava/classpath/gnu/CORBA/ForwardRequestHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/ForwardRequestHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/ForwardRequestHelper.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,161 ----
+ /* ForwardRequestHelper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.Poa.ForwardRequestHolder;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.ObjectHelper;
+ import org.omg.CORBA.StructMember;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.PortableServer.ForwardRequest;
+ 
+ /**
+  * The helper operations for the exception {@link ForwardRequest}.
+  *
+  * @specnote The helper must be here and not in POA subpackage as it must
+  * be discovered by the {@link ObjectCreator} when reading this remote
+  * exception.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class ForwardRequestHelper
+ {
+   /**
+    * The cached typecode value, computed only once.
+    */
+   private static TypeCode typeCode;
+ 
+   /**
+    * Extract the ForwardRequest from given Any.
+    * This method uses the ForwardRequestHolder.
+    *
+    * @throws BAD_OPERATION if the passed Any does not contain ForwardRequest.
+    */
+   public static ForwardRequest extract(Any any)
+   {
+     try
+       {
+         return ((ForwardRequestHolder) any.extract_Streamable()).value;
+       }
+     catch (ClassCastException cex)
+       {
+         BAD_OPERATION bad = new BAD_OPERATION("ForwardRequest expected");
+         bad.minor = Minor.Any;
+         bad.initCause(cex);
+         throw bad;
+       }
+   }
+ 
+   /**
+    * Get the ForwardRequest repository id.
+    *
+    * @return "ForwardRequest", always.
+    */
+   public static String id()
+   {
+     return "ForwardRequest";
+   }
+ 
+   /**
+   * Insert the ForwardRequest into the given Any.
+   * This method uses the ForwardRequestHolder.
+   *
+   * @param any the Any to insert into.
+   * @param that the ForwardRequest to insert.
+   */
+   public static void insert(Any any, ForwardRequest that)
+   {
+     any.insert_Streamable(new ForwardRequestHolder(that));
+   }
+ 
+   /**
+    * Read the exception from the CDR intput stream.
+    *
+    * @param input a org.omg.CORBA.portable stream to read from.
+    */
+   public static ForwardRequest read(InputStream input)
+   {
+     // Read the exception repository id.
+     String id = input.read_string();
+     ForwardRequest value = new ForwardRequest();
+ 
+     value.forward_reference = input.read_Object();
+     return value;
+   }
+ 
+   /**
+    * Create the ForwardRequest typecode (structure,
+    * named "ForwardRequest").
+    * The typecode states that the structure contains the
+    * following fields: forward_reference.
+    */
+   public static TypeCode type()
+   {
+     if (typeCode == null)
+       {
+         ORB orb = ORB.init();
+         StructMember[] members = new StructMember[ 1 ];
+ 
+         TypeCode field;
+ 
+         field = ObjectHelper.type();
+         members [ 0 ] = new StructMember("forward_reference", field, null);
+         typeCode = orb.create_exception_tc(id(), "ForwardRequest", members);
+       }
+     return typeCode;
+   }
+ 
+   /**
+    * Write the exception to the CDR output stream.
+    *
+    * @param output a org.omg.CORBA.portable stream stream to write into.
+    * @param value a value to write.
+    */
+   public static void write(OutputStream output, ForwardRequest value)
+   {
+     // Write the exception repository id.
+     output.write_string(id());
+     output.write_Object(value.forward_reference);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/CancelHeader.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/CancelHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/CancelHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/CancelHeader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* CancelHeader.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ /**
+  * The message header for cancelling the request.
+  *
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public abstract class CancelHeader
+ {
+   /**
+    * The Id of request being cancelled.
+    */
+   public int request_id;
+ 
+   /**
+    * Write the header.
+    *
+    * @param out a stream to write to.
+    */
+   public abstract void read(InputStream input);
+ 
+   /**
+    * Write the header.
+    *
+    * @param out a stream to write to.
+    */
+   public abstract void write(OutputStream output);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/CharSets_OSF.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/CharSets_OSF.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/CharSets_OSF.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/CharSets_OSF.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,238 ----
+ /* CharSets_OSF.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import java.nio.charset.Charset;
+ 
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Set;
+ 
+ /**
+  * This class contains the codes, used to identify character sets
+  * in CORBA. These codes are defined in Open Software Foundation (OSF)
+  * code set registry.
+  * 
+  * The name of this class specially sets "OSF" apart if somebody would start
+  * searching Open Software Foundation abbreviation.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class CharSets_OSF
+ {
+   public static final int ASCII = 0x00010020;
+   public static final int ISO8859_1 = 0x00010001;
+   public static final int ISO8859_2 = 0x00010002;
+   public static final int ISO8859_3 = 0x00010003;
+   public static final int ISO8859_4 = 0x00010004;
+   public static final int ISO8859_5 = 0x00010005;
+   public static final int ISO8859_6 = 0x00010006;
+   public static final int ISO8859_7 = 0x00010007;
+   public static final int ISO8859_8 = 0x00010008;
+   public static final int ISO8859_9 = 0x00010009;
+   public static final int ISO8859_15_FDIS = 0x0001000F;
+   public static final int UTF8 = 0x05010001;
+   public static final int UTF16 = 0x00010109;
+   public static final int UCS2 = 0x00010100;
+   public static final int Cp1047 = 0x10020417;
+   public static final int Cp1250 = 0x100204E2;
+   public static final int Cp1251 = 0x100204E3;
+   public static final int Cp1252 = 0x100204E4;
+   public static final int Cp1253 = 0x100204E5;
+   public static final int Cp1254 = 0x100204E6;
+   public static final int Cp1255 = 0x100204E7;
+   public static final int Cp1256 = 0x100204E8;
+   public static final int Cp1257 = 0x100204E9;
+   public static final int Cp1363 = 0x10020553;
+   public static final int Cp1363C = 0x10020553;
+   public static final int Cp1381 = 0x10020565;
+   public static final int Cp1383 = 0x10020567;
+   public static final int Cp1386 = 0x1002056A;
+   public static final int Cp33722 = 0x100283BA;
+   public static final int Cp33722C = 0x100283BA;
+   public static final int Cp930 = 0x100203A2;
+   public static final int Cp943 = 0x100203AF;
+   public static final int Cp943C = 0x100203AF;
+   public static final int Cp949 = 0x100203B5;
+   public static final int Cp949C = 0x100203B5;
+   public static final int Cp950 = 0x100203B6;
+   public static final int Cp964 = 0x100203C4;
+   public static final int Cp970 = 0x100203CA;
+   public static final int EUC_JP = 0x00030010;
+   public static final int EUC_KR = 0x0004000A;
+   public static final int EUC_TW = 0x00050010;
+ 
+   /**
+    * The native character set for the narrow character.
+    */
+   public static final int NATIVE_CHARACTER = ISO8859_1;
+ 
+   /**
+    * The native character set for the wide character.
+    */
+   public static final int NATIVE_WIDE_CHARACTER = UTF16;
+ 
+   /**
+    * Table to convert from the code to string name.
+    */
+   private static Hashtable code_to_string;
+ 
+   /**
+    * Table to convert from the string name to code.
+    */
+   private static Hashtable string_to_code;
+ 
+   /**
+    * Get the charset code from its name.
+    *
+    * @return the charset code of 0 if not defined.
+    */
+   public static int getCode(String name)
+   {
+     if (string_to_code == null)
+       makeMap();
+ 
+     Integer code = (Integer) string_to_code.get(name);
+     return code == null ? 0 : code.intValue();
+   }
+ 
+   /**
+    * Get the charset name from its code.
+    *
+    * @return the code set name or nullfor the unknown code set.
+    */
+   public static String getName(int code)
+   {
+     if (code_to_string == null)
+       makeMap();
+     return (String) code_to_string.get(new Integer(code));
+   }
+ 
+   /**
+    * Get the list of supported char sets for that the CORBA codes are
+    * also known.
+    */
+   public static int[] getSupportedCharSets()
+   {
+     Set supported_sets = Charset.availableCharsets().keySet();
+     int[] supported = new int[ supported_sets.size() ];
+     Iterator iter = supported_sets.iterator();
+ 
+     int i = 0;
+     int code;
+     while (iter.hasNext())
+       {
+         code = getCode(iter.next().toString());
+         if (code > 0)
+           supported [ i++ ] = code;
+       }
+ 
+     // Truncate the unused part.
+     int[] f = new int[ i ];
+     System.arraycopy(supported, 0, f, 0, f.length);
+ 
+     return f;
+   }
+ 
+   /**
+    * Create a convertion map.
+    */
+   private static void makeMap()
+   {
+     code_to_string = new Hashtable();
+     string_to_code = new Hashtable();
+ 
+     // Put standard char sets.
+     put(ASCII, "US-ASCII");
+     put(ISO8859_1, "ISO-8859-1");
+     put(UTF16, "UTF-16");
+ 
+     // Put other known char sets.
+     put(ISO8859_2, "ISO-8859-2");
+     put(ISO8859_3, "ISO-8859-3");
+     put(ISO8859_4, "ISO-8859-4");
+     put(ISO8859_5, "ISO-8859-5");
+     put(ISO8859_6, "ISO-8859-6");
+     put(ISO8859_7, "ISO-8859-7");
+     put(ISO8859_8, "ISO-8859-8");
+     put(ISO8859_9, "ISO-8859-9");
+ 
+     put(UTF8, "UTF-8");
+     put(UCS2, "UCS-2");
+ 
+     put(ISO8859_15_FDIS, "ISO8859-15-FDIS");
+ 
+     put(Cp1047, "Cp1047");
+     put(Cp1250, "Cp1250");
+     put(Cp1251, "Cp1251");
+     put(Cp1252, "Cp1252");
+     put(Cp1253, "Cp1253");
+     put(Cp1254, "Cp1254");
+     put(Cp1255, "Cp1255");
+     put(Cp1256, "Cp1256");
+     put(Cp1257, "Cp1257");
+     put(Cp1363, "Cp1363");
+     put(Cp1363C, "Cp1363C");
+     put(Cp1381, "Cp1381");
+     put(Cp1383, "Cp1383");
+     put(Cp1386, "Cp1386");
+     put(Cp33722, "Cp33722");
+     put(Cp33722C, "Cp33722C");
+     put(Cp930, "Cp930");
+     put(Cp943, "Cp943");
+     put(Cp943C, "Cp943C");
+     put(Cp949, "Cp949");
+     put(Cp949C, "Cp949C");
+     put(Cp950, "Cp950");
+     put(Cp964, "Cp964");
+     put(Cp970, "Cp970");
+ 
+     put(EUC_JP, "EUC-JP");
+     put(EUC_KR, "EUC-KR");
+     put(EUC_TW, "EUC-TW");
+   }
+ 
+   private static void put(int code, String name)
+   {
+     Integer ic = new Integer(code);
+ 
+     code_to_string.put(ic, name);
+     string_to_code.put(name, ic);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/CloseMessage.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/CloseMessage.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/CloseMessage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/CloseMessage.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,106 ----
+ /* CloseMessage.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import gnu.CORBA.Minor;
+ 
+ import org.omg.CORBA.MARSHAL;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * The explicit command to close the connection.
+  *
+  *
+  * The close message consists from the message header only and
+  * is the same for GIOP 1.0, 1.1, 1.2 and 1.3. The CloseMessage
+  * uses the default value from the {@link MessageHeader}.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class CloseMessage
+   extends MessageHeader
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The singleton close message is typically enough, despite new
+    * instances may be instantiated if the specific version field
+    * value is mandatory.
+    */
+   private static final CloseMessage Singleton = new CloseMessage();
+ 
+   /**
+    * Create a new error message, setting the message field
+    * to the {@link MESSAGE_CLOSE} and the version number to
+    * the given major and minor values.
+    */
+   public CloseMessage()
+   {
+     message_type = CLOSE_CONNECTION;
+   }
+ 
+   /**
+    * Send the close message to the given output stream. The method,
+    * however, does not close the socket itself, this must be done
+    * explicitly in the calling code.
+    *
+    * @param socketStream a stream, where the close message is
+    * written.
+    */
+   public static void close(OutputStream socketStream)
+   {
+     try
+       {
+         Singleton.write(socketStream);
+         socketStream.flush();
+       }
+     catch (IOException ex)
+       {
+         MARSHAL m = new MARSHAL("Unable to flush the stream");
+         m.minor = Minor.Header;
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/CodeSetServiceContext.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/CodeSetServiceContext.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/CodeSetServiceContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/CodeSetServiceContext.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,224 ----
+ /* CodeSet_sctx.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.IOR.CodeSets_profile;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * The code set service context. This context must be included in all
+  * messages that use wide characters.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class CodeSetServiceContext
+   extends ServiceContext
+ {
+   /**
+    * The context code sets id.
+    */
+   public static final int ID = 1;
+ 
+   /**
+    * The standard component to include in the messages.
+    */
+   public static final CodeSetServiceContext STANDARD = new CodeSetServiceContext();
+ 
+   /**
+    * The encoding, used to transfer the narrow (1 byte) character data.
+    * The default value is taken from {@link CharSets_OSF#NATIVE_CHARACTER}.
+    */
+   public int char_data = CharSets_OSF.NATIVE_CHARACTER;
+ 
+   /**
+    * The encoding, used to transfer the wide character data.
+    * The default value is taken from
+    * {@link CharSets_OSF#NATIVE_WIDE_CHARACTER}.
+    */
+   public int wide_char_data = CharSets_OSF.NATIVE_WIDE_CHARACTER;
+ 
+   /**
+    * Find and return the code set service context in the give
+    * contexts array. Returns {@link #STANDARD} if no code set
+    * context is present.
+    *
+    * @param contexts the array of contexts, can be null.
+    */
+   public static CodeSetServiceContext find(ServiceContext[] contexts)
+   {
+     if (contexts != null)
+       for (int i = 0; i < contexts.length; i++)
+         {
+           if (contexts [ i ] instanceof CodeSetServiceContext)
+             return (CodeSetServiceContext) contexts [ i ];
+         }
+     return STANDARD;
+   }
+ 
+   /**
+    * Select the suitable encoding that is defined in the provided profile.
+    *
+    * TODO character encoding. Now the encoding can be set, but it is ignored.
+    * If you take this task, scan 'TODO character encoding' for
+    * relevant places.
+    */
+   public static CodeSetServiceContext negotiate(IOR.CodeSets_profile profile)
+   {
+     if (profile.negotiated != null)
+       return profile.negotiated;
+ 
+     CodeSetServiceContext use = new CodeSetServiceContext();
+ 
+     use.char_data =
+       negotiate(profile.narrow, STANDARD.char_data, CharSets_OSF.ISO8859_1);
+ 
+     use.wide_char_data =
+       negotiate(profile.wide, STANDARD.wide_char_data, CharSets_OSF.UTF16);
+ 
+     profile.negotiated = use;
+ 
+     return use;
+   }
+ 
+   /**
+    * Read the context from the given stream. Does not read the
+    * code sets id.
+    */
+   public void readContext(AbstractCdrInput input)
+   {
+     AbstractCdrInput encap = input.read_encapsulation();
+ 
+     char_data = encap.read_ulong();
+     wide_char_data = encap.read_ulong();
+   }
+ 
+   /**
+    * Return a string representation.
+    */
+   public String toString()
+   {
+     return " Encoding: narrow " + name(char_data) + ", wide " +
+            name(wide_char_data) + ". ";
+   }
+ 
+   /**
+    * Write the context to the given stream, including the code
+    * sets id.
+    */
+   public void write(AbstractCdrOutput output)
+   {
+     output.write_ulong(ID);
+ 
+     AbstractCdrOutput enout = output.createEncapsulation();
+ 
+     enout.write_long(char_data);
+     enout.write_ulong(wide_char_data);
+ 
+     try
+       {
+         enout.close();
+       }
+     catch (IOException ex)
+       {
+         InternalError t = new InternalError();
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Negotiate about the character encoding. Prefer our native encoding,
+    * if no, prefer IORs native encoding, if no, find any encoding,
+    * supported by both sides, if no, return the specified final decission.
+    *
+    * @param profile the component profile in IOR.
+    * @param our_native our native encoding
+    * @param final_decission the encoding that must be returned if no
+    * compromise is found.
+    *
+    * @return the resulted encoding.
+    */
+   protected static int negotiate(IOR.CodeSets_profile.CodeSet_component profile,
+                                  int our_native, int final_decission
+                                 )
+   {
+     // If our and IORs native sets match, use the native set.
+     if (profile.native_set == our_native)
+       return our_native;
+ 
+     // If the native sets do not match, but the IOR says it
+     // supports our native set, use our native set.
+     if (profile.conversion != null)
+       for (int i = 0; i < profile.conversion.length; i++)
+         {
+           if (our_native == profile.conversion [ i ])
+             return our_native;
+         }
+ 
+     // At this point, we suggest to use the IORs native set.
+     int[] allSupported = CharSets_OSF.getSupportedCharSets();
+ 
+     for (int s = 0; s < allSupported.length; s++)
+       if (allSupported [ s ] == profile.native_set)
+         return profile.native_set;
+ 
+     // Any compromise left?
+     if (profile.conversion != null)
+       for (int s = 0; s < allSupported.length; s++)
+         for (int i = 0; i < profile.conversion.length; i++)
+           if (allSupported [ s ] == profile.conversion [ i ])
+             return allSupported [ s ];
+ 
+     // Return the CORBA default char encoding.
+     return final_decission;
+   }
+ 
+   /**
+    * Conveniency method, used in toString()
+    */
+   private String name(int set)
+   {
+     return "0x" + Integer.toHexString(set) + " (" + CharSets_OSF.getName(set) +
+            ") ";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/ContextHandler.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/ContextHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/ContextHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/ContextHandler.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,76 ----
+ /* ContextHandler.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import org.omg.CORBA.BAD_INV_ORDER;
+ 
+ /**
+  * A header, supporting the service contexts. Such header has a context field
+  * and methods for adding the new contexts.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class ContextHandler
+ {
+ 
+   /**
+    * Empty array, indicating that no service context is available.
+    */
+   protected static final ServiceContext[] NO_CONTEXT = new ServiceContext[0];
+ 
+   /**
+    * The context data.
+    */
+   public ServiceContext[] service_context = NO_CONTEXT;
+ 
+   /**
+    * Add service context to this header.
+    *
+    * @param context_to_add context to add.
+    * @param replace if true, the existing context with this ID is replaced.
+    * Otherwise, BAD_INV_ORDER is throwsn.
+    */
+   public void addContext(org.omg.IOP.ServiceContext context_to_add,
+     boolean replace)
+     throws BAD_INV_ORDER
+   {
+     service_context = ServiceContext.add(service_context, context_to_add,
+       replace);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/ErrorMessage.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/ErrorMessage.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/ErrorMessage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/ErrorMessage.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,114 ----
+ /* ErrorMessage.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import gnu.CORBA.OrbFunctional;
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.Minor;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ import java.net.Socket;
+ 
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ 
+ /**
+  * The error message is sent in response to the message, encoded
+  * in the unsupported version of the format or otherwise invalid.
+  *
+  * The error message consists from the message header only and
+  * is the same for GIOP 1.0, 1.1, 1.2 and 1.3.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ErrorMessage
+   extends MessageHeader
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * Create a new error message, setting the message field
+    * to the {@link MESSAGE_ERROR} and the version number to
+    * the given major and minor values.
+    */
+   public ErrorMessage(gnu.CORBA.Version msg_version)
+   {
+     version = msg_version;
+     message_type = MESSAGE_ERROR;
+   }
+ 
+   /**
+    * Send the error message to the given IOR address.
+    *
+    * @param ior the IOR address (host and port, other fields
+    * are not used).
+    * 
+    * @param orb the ORB, sending the error message.
+    */
+   public void send(IOR ior, ORB orb)
+   {
+     try
+       {
+         Socket socket;
+         
+         if (orb instanceof OrbFunctional)
+           socket = ((OrbFunctional) orb).socketFactory.createClientSocket(
+             ior.Internet.host, ior.Internet.port);
+         else
+           socket = new Socket(ior.Internet.host, ior.Internet.port);
+ 
+         OutputStream socketOutput = socket.getOutputStream();
+         write(socketOutput);
+         socketOutput.close();
+         socket.close();
+       }
+     catch (IOException ex)
+       {
+         MARSHAL t = new MARSHAL();
+         t.minor = Minor.Header;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/MessageHeader.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/MessageHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/MessageHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/MessageHeader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,446 ----
+ /* MessageHeader.java -- GIOP message header.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.Version;
+ import gnu.CORBA.CDR.BigEndianInputStream;
+ import gnu.CORBA.CDR.BigEndianOutputStream;
+ import gnu.CORBA.CDR.LittleEndianInputStream;
+ import gnu.CORBA.CDR.LittleEndianOutputStream;
+ import gnu.CORBA.CDR.AbstractDataInput;
+ import gnu.CORBA.CDR.AbstractDataOutput;
+ 
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.portable.IDLEntity;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.Socket;
+ import java.util.Arrays;
+ 
+ /**
+  * The GIOP message header.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class MessageHeader
+   implements IDLEntity
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * Request message.
+    */
+   public static final byte REQUEST = 0;
+ 
+   /**
+    * Reply message
+    */
+   public static final byte REPLY = 1;
+ 
+   /**
+    * Cancel request message.
+    */
+   public static final byte CANCEL_REQUEST = 2;
+ 
+   /**
+    * Locate request message, used to check the server ability to process
+    * requests for the object reference. This message is also used to get the
+    * address where the object reference should be sent.
+    */
+   public static final byte LOCATE_REQUEST = 3;
+ 
+   /**
+    * Locate reply message, sent in response to the {@link #LocateRequest}
+    * message.
+    */
+   public static final byte LOCATE_REPLY = 4;
+ 
+   /**
+    * Instruction to close the connection.
+    */
+   public static final byte CLOSE_CONNECTION = 5;
+ 
+   /**
+    * Error report.
+    */
+   public static final byte MESSAGE_ERROR = 6;
+ 
+   /**
+    * The fragment messge, following the previous message that has more fragments
+    * flag set. Added in GIOP 1.1
+    */
+   public static final byte FRAGMENT = 7;
+ 
+   /**
+    * This must always be "GIOP".
+    */
+   public static final byte[] MAGIC = new byte[] { 'G', 'I', 'O', 'P' };
+ 
+   /**
+    * The message type names.
+    */
+   protected static String[] types = new String[] { "Request", "Reply",
+     "Cancel", "Locate request", "Locate reply", "Close connection", "Error",
+     "Fragment" };
+ 
+   /**
+    * The GIOP version. Initialised to 1.0 .
+    */
+   public Version version;
+ 
+   /**
+    * The flags field, introduced since GIOP 1.1.
+    */
+   public byte flags = 0;
+ 
+   /**
+    * The message type.
+    */
+   public byte message_type = REQUEST;
+ 
+   /**
+    * The message size, excluding the message header.
+    */
+   public int message_size = 0;
+ 
+   /**
+    * Create an empty message header, corresponding version 1.0.
+    */
+   public MessageHeader()
+   {
+     version = new Version(1, 0);
+   }
+ 
+   /**
+    * Create an empty message header, corresponding the given version.
+    * 
+    * @param major the major message header version.
+    * @param minor the minot message header version.
+    */
+   public MessageHeader(int major, int minor)
+   {
+     version = new Version(major, minor);
+   }
+ 
+   /**
+    * Checks if the message is encoded in the Big Endian, most significant byte
+    * first.
+    */
+   public boolean isBigEndian()
+   {
+     return (flags & 0x1) == 0;
+   }
+ 
+   /**
+    * Checks if the message is partial, and more subsequent fragments follow.
+    */
+   public boolean moreFragmentsFollow()
+   {
+     return (flags & 0x2) != 0;
+   }
+ 
+   /**
+    * Set the encoding to use.
+    * 
+    * @param use_big_endian if true (default), the Big Endian encoding is used.
+    * If false, the Little Endian encoding is used.
+    */
+   public void setBigEndian(boolean use_big_endian)
+   {
+     if (use_big_endian)
+       flags = (byte) (flags & ~1);
+     else
+       flags = (byte) (flags | 1);
+   }
+ 
+   /**
+    * Get the size of the message header itself. So far, it is always 12 bytes.
+    */
+   public int getHeaderSize()
+   {
+     return 12;
+   }
+ 
+   /**
+    * Get the message type as string.
+    * 
+    * @param type the message type as int (the field {@link message_type}).
+    * 
+    * @return the message type as string.
+    */
+   public String getTypeString(int type)
+   {
+     try
+       {
+         return types[type];
+       }
+     catch (ArrayIndexOutOfBoundsException ex)
+       {
+         return "unknown type (" + type + ")";
+       }
+   }
+ 
+   /**
+    * Creates reply header, matching the message header version number.
+    * 
+    * @return one of {@link gnu.CORBA.GIOP.v1_0.ReplyHeader},
+    * {@link gnu.CORBA.GIOP.v1_2.ReplyHeader}, etc - depending on the version
+    * number in this header.
+    */
+   public ReplyHeader create_reply_header()
+   {
+     if (version.since_inclusive(1, 2))
+       return new gnu.CORBA.GIOP.v1_2.ReplyHeader();
+     else
+       return new gnu.CORBA.GIOP.v1_0.ReplyHeader();
+   }
+ 
+   /**
+    * Creates request header, matching the message header version number.
+    * 
+    * @return one of {@link gnu.CORBA.GIOP.v1_0.RequestHeader},
+    * {@link gnu.CORBA.GIOP.v1_2.RequestHeader}, etc - depending on the version
+    * number in this header.
+    */
+   public RequestHeader create_request_header()
+   {
+     if (version.since_inclusive(1, 2))
+       return new gnu.CORBA.GIOP.v1_2.RequestHeader();
+     else
+       return new gnu.CORBA.GIOP.v1_0.RequestHeader();
+   }
+ 
+   /**
+    * Create the cancel header, matching the message header version number.
+    */
+   public CancelHeader create_cancel_header()
+   {
+     return new gnu.CORBA.GIOP.v1_0.CancelHeader();
+   }
+ 
+   /**
+    * Create the error message.
+    */
+   public ErrorMessage create_error_message()
+   {
+     return new ErrorMessage(version);
+   }
+ 
+   /**
+    * Read the header from the stream.
+    * 
+    * @param istream a stream to read from.
+    * 
+    * @throws MARSHAL if this is not a GIOP 1.0 header.
+    */
+   public void read(java.io.InputStream istream)
+     throws MARSHAL
+   {
+     try
+       {
+         byte[] xMagic = new byte[MAGIC.length];
+         istream.read(xMagic);
+         if (!Arrays.equals(xMagic, MAGIC))
+           {
+             MARSHAL m = new MARSHAL("Not a GIOP message");
+             m.minor = Minor.Giop;
+             throw m;
+           }
+ 
+         version = Version.read_version(istream);
+ 
+         AbstractDataInput din;
+ 
+         flags = (byte) istream.read();
+ 
+         // This checks the bit in the byte we have just received.
+         if (isBigEndian())
+           din = new BigEndianInputStream(istream);
+         else
+           din = new LittleEndianInputStream(istream);
+ 
+         message_type = (byte) din.read();
+ 
+         message_size = din.readInt();
+       }
+     catch (IOException ex)
+       {
+         MARSHAL t = new MARSHAL();
+         t.minor = Minor.Header;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Get the short string summary of the message.
+    * 
+    * @return a short message summary.
+    */
+   public String toString()
+   {
+     return "GIOP " + version + ", " + (isBigEndian() ? "Big" : "Little")
+       + " endian, " + getTypeString(message_type) + ", " + message_size
+       + " bytes. ";
+   }
+ 
+   /**
+    * Write the header to stream.
+    * 
+    * @param out a stream to write into.
+    */
+   public void write(java.io.OutputStream out)
+   {
+     try
+       {
+         AbstractDataOutput dout;
+ 
+         if (isBigEndian())
+           dout = new BigEndianOutputStream(out);
+         else
+           dout = new LittleEndianOutputStream(out);
+ 
+         // Write magic sequence.
+         dout.write(MAGIC);
+ 
+         // Write version number.
+         version.write((OutputStream) dout);
+         dout.write(flags);
+         dout.write(message_type);
+         dout.writeInt(message_size);
+       }
+     catch (IOException ex)
+       {
+         MARSHAL t = new MARSHAL();
+         t.minor = Minor.Header;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Read data, followed by the message header. Handle fragmented messages.
+    * 
+    * @param source the data source to read from.
+    * @param service the socket on that the time outs are set. Can be null (no
+    * timeouts are set).
+    * @param to_read the timeout while reading the message.
+    * @param to_pause the timeout for pauses between the message parts.
+    */
+   public byte[] readMessage(InputStream source, Socket service, int to_read,
+     int to_pause)
+   {
+     try
+       {
+         byte[] r = new byte[message_size];
+ 
+         int n = 0;
+         if (service != null)
+           service.setSoTimeout(to_read);
+ 
+         reading: while (n < r.length)
+           {
+             n += source.read(r, n, r.length - n);
+           }
+         if (service != null)
+           service.setSoTimeout(to_pause);
+ 
+         // Read the message remainder if the message is fragmented.
+         if (moreFragmentsFollow())
+           {
+             ByteArrayOutputStream buffer = new ByteArrayOutputStream(
+               2 * r.length);
+             buffer.write(r);
+ 
+             if (r.length < 10)
+               // Increase the buffer size if the default value (size of the
+               // previous message) is really too small.
+               r = new byte[1024];
+ 
+             MessageHeader h2 = new MessageHeader();
+ 
+             do
+               {
+                 h2.read(source);
+ 
+                 int dn;
+ 
+                 n = 0;
+                 reading: while (n < h2.message_size)
+                   {
+                     dn = source.read(r, 0, h2.message_size - n);
+ 
+                     if (n == 0 && service != null)
+                       service.setSoTimeout(to_read);
+ 
+                     if (n == 0 && version.since_inclusive(1, 2))
+                       {
+                         // Skip the four byte request id.
+                         buffer.write(r, 4, dn - 4);
+                       }
+                     else
+                       buffer.write(r, 0, dn);
+                     n = +dn;
+                   }
+ 
+                 if (service != null)
+                   service.setSoTimeout(to_pause);
+               }
+             while (h2.moreFragmentsFollow());
+             return buffer.toByteArray();
+           }
+         else
+           return r;
+       }
+     catch (IOException ioex)
+       {
+         MARSHAL m = new MARSHAL("Unable to read the message continuation.");
+         m.minor = Minor.Header;
+         m.initCause(ioex);
+         throw m;
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/ReplyHeader.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/ReplyHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/ReplyHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/ReplyHeader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,145 ----
+ /* ReplyHeader.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ 
+ /**
+  * The header of the standard reply.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public abstract class ReplyHeader
+   extends ContextHandler
+ {
+   /**
+    * Reply status, if no exception occured.
+    */
+   public static final int NO_EXCEPTION = 0;
+ 
+   /**
+    * Reply status, user exception.
+    */
+   public static final int USER_EXCEPTION = 1;
+ 
+   /**
+    * Reply status, system exception.
+    */
+   public static final int SYSTEM_EXCEPTION = 2;
+ 
+   /**
+    * Reply status, if the client ORB must re - send the request to another
+    * destination. The body contains IOR.
+    */
+   public static final int LOCATION_FORWARD = 3;
+ 
+   /**
+    * Reply status, indicating that the target has permanently changed the
+    * address to the supplied IOR.
+    */
+   public static final int LOCATION_FORWARD_PERM = 4;
+ 
+   /**
+    * Reply status, indicating, that the ORB requires to resend the object
+    * address in the required addressing mode, contained as the reply body.
+    */
+   public static final int NEEDS_ADDRESSING_MODE = 5;
+ 
+   /**
+    * The status of this reply, holds one of the reply status constants.
+    */
+   public int reply_status;
+ 
+   /**
+    * The Id of request into response of which this reply has been sent.
+    */
+   public int request_id;
+ 
+   /**
+    * Return the message status as a string.
+    */
+   public String getStatusString()
+   {
+     switch (reply_status)
+       {
+         case NO_EXCEPTION:
+           return "ok";
+ 
+         case USER_EXCEPTION:
+           return "user exception";
+ 
+         case SYSTEM_EXCEPTION:
+           return "system exception";
+ 
+         case LOCATION_FORWARD:
+           return "moved";
+ 
+         default:
+           return null;
+       }
+   }
+ 
+   /**
+    * Reads the header from the stream.
+    *
+    * @param in a stream to read from.
+    */
+   public abstract void read(AbstractCdrInput in);
+ 
+   /**
+    * Returns a short string representation.
+    *
+    * @return a string representation.
+    */
+   public String toString()
+   {
+     String status = getStatusString();
+     if (status == null)
+       status = "status " + reply_status;
+     return request_id + ", " + status;
+   }
+ 
+   /**
+    * Writes the header to the stream.
+    *
+    * @param out a stream to write into.
+    */
+   public abstract void write(AbstractCdrOutput out);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/RequestHeader.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/RequestHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/RequestHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/RequestHeader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,154 ----
+ /* RequestHeader.java -- The GIOP 1.0 request message.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ 
+ import org.omg.CORBA.portable.IDLEntity;
+ 
+ /**
+  * The GIOP request message.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public abstract class RequestHeader
+   extends ContextHandler
+   implements IDLEntity
+ {
+   /**
+    * The currently free request id. This field is incremented each time the new
+    * request header is constructed. To facilitate error detection, the first
+    * free id is equal to 0x01234567 (19088743).
+    */
+   private static int freeId = 0x01234567;
+ 
+   /**
+    * The operation being invoked (IDL scope name).
+    */
+   public String operation;
+ 
+   /**
+    * Identifies the object that is the target of the invocation.
+    */
+   public byte[] object_key;
+ 
+   /**
+    * A value identifying the requesting principal. Initialised into a single
+    * zero byte.
+    *
+    * @deprecated by CORBA 2.2.
+    */
+   public byte[] requesting_principal;
+ 
+   /**
+    * This is used to associate the reply message with the previous request
+    * message. Initialised each time by the different value, increasing form 1 to
+    * Integer.MAX_VALUE.
+    */
+   public int request_id = getNextId();
+ 
+   /**
+    * If true, the response from the server is expected.
+    */
+   protected boolean response_expected = true;
+ 
+   /**
+    * Get next free request id. The value of the free request id starts from
+    * 0x02345678, it is incremented each time this function is called and is
+    * reset to 1 after reaching Integer.MAX_VALUE.
+    *
+    * @return the next free request id.
+    */
+   public static synchronized int getNextId()
+   {
+     int f = freeId;
+     if (freeId == Integer.MAX_VALUE)
+       freeId = 1;
+     else
+       freeId++;
+ 
+     return f;
+   }
+ 
+   /**
+    * Set if the sender expects any response to this message.
+    */
+   public abstract void setResponseExpected(boolean expected);
+ 
+   /**
+    * Return true if response is expected.
+    */
+   public abstract boolean isResponseExpected();
+ 
+   /**
+    * Converts an byte array into hexadecimal string values. Used in various
+    * toString() methods.
+    */
+   public String bytes(byte[] array)
+   {
+     StringBuffer b = new StringBuffer();
+     for (int i = 0; i < array.length; i++)
+       {
+         b.append(Integer.toHexString(array[i] & 0xFF));
+         b.append(" ");
+       }
+     return b.toString();
+   }
+ 
+   /**
+    * Reads the header from the stream.
+    *
+    * @param in a stream to read from.
+    */
+   public abstract void read(AbstractCdrInput in);
+ 
+   /**
+    * Return a string representation.
+    */
+   public abstract String toString();
+ 
+   /**
+    * Writes the header to the stream.
+    *
+    * @param out a stream to write into.
+    */
+   public abstract void write(AbstractCdrOutput out);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/ServiceContext.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/ServiceContext.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/ServiceContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/ServiceContext.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,301 ----
+ /* ServiceContext.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP;
+ 
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ 
+ import org.omg.CORBA.BAD_INV_ORDER;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.portable.IDLEntity;
+ 
+ /**
+  * Contains the ORB service data being passed.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ServiceContext
+   implements IDLEntity
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /* Standard values for the context_id. */
+   public static final int TransactionService = 0;
+ 
+   /**
+    * Defines code sets, used to encode wide and narrow characters. Required for
+    * messages with data structures, involving wide characters.
+    */
+   public static final int CodeSets = 1;
+ 
+   public static final int ChainBypassCheck = 2;
+ 
+   public static final int ChainBypassInfo = 3;
+ 
+   public static final int LogicalThreadId = 4;
+ 
+   public static final int BI_DIR_IIOP = 5;
+ 
+   public static final int SendingContextRunTime = 6;
+ 
+   public static final int INVOCATION_POLICIES = 7;
+ 
+   public static final int FORWARDED_IDENTITY = 8;
+ 
+   /**
+    * Contains exception details if exception being transferred is other than
+    * System or User exception. javax.rmi uses this context to transfer arbitrary
+    * java exceptions as CORBA value types.
+    */
+   public static final int UnknownExceptionInfo = 9;
+ 
+   public static final int RTCorbaPriority = 10;
+ 
+   public static final int RTCorbaPriorityRange = 11;
+ 
+   public static final int FT_GROUP_VERSION = 12;
+ 
+   public static final int FT_REQUEST = 13;
+ 
+   public static final int ExceptionDetailMessage = 14;
+ 
+   public static final int SecurityAttributeService = 15;
+ 
+   public static final int ActivityService = 16;
+ 
+   /**
+    * The context id (for instance, 0x1 for code sets context). At the moment of
+    * writing, the OMG defines 16 standard values and provides rules to register
+    * the vendor specific context ids. The range 0-4095 is reserved for the
+    * future standard OMG contexts.
+    */
+   public int context_id;
+ 
+   /**
+    * The context_data.
+    */
+   public byte[] context_data;
+ 
+   /**
+    * Crete unitialised instance.
+    */
+   public ServiceContext()
+   {
+   }
+ 
+   /**
+    * Create from omg context.
+    */
+   public ServiceContext(org.omg.IOP.ServiceContext from)
+   {
+     context_id = from.context_id;
+     context_data = from.context_data;
+   }
+ 
+   /**
+    * Read the context values from the stream.
+    * 
+    * @param istream a stream to read from.
+    */
+   public static ServiceContext read(AbstractCdrInput istream)
+   {
+     int id = istream.read_ulong();
+ 
+     switch (id)
+       {
+         case CodeSetServiceContext.ID:
+ 
+           CodeSetServiceContext codeset = new CodeSetServiceContext();
+           codeset.readContext(istream);
+           return codeset;
+ 
+         default:
+ 
+           ServiceContext ctx = new ServiceContext();
+           ctx.context_id = id;
+           ctx.context_data = istream.read_sequence();
+           return ctx;
+       }
+   }
+ 
+   /**
+    * Read a sequence of contexts from the input stream.
+    */
+   public static ServiceContext[] readSequence(AbstractCdrInput istream)
+   {
+     int size = istream.read_long();
+     ServiceContext[] value = new gnu.CORBA.GIOP.ServiceContext[size];
+     for (int i = 0; i < value.length; i++)
+       value[i] = read(istream);
+     return value;
+   }
+ 
+   /**
+    * Write the context values into the stream.
+    * 
+    * @param ostream a stream to write the data to.
+    */
+   public void write(AbstractCdrOutput ostream)
+   {
+     ostream.write_ulong(context_id);
+     ostream.write_sequence(context_data);
+   }
+ 
+   /**
+    * Write the sequence of contexts into the input stream.
+    */
+   public static void writeSequence(AbstractCdrOutput ostream, ServiceContext[] value)
+   {
+     ostream.write_long(value.length);
+     for (int i = 0; i < value.length; i++)
+       value[i].write(ostream);
+   }
+ 
+   /**
+    * Add context to the given array of contexts.
+    */
+   public static void add(org.omg.IOP.ServiceContext[] cx,
+     org.omg.IOP.ServiceContext service_context, boolean replace)
+   {
+     int exists = -1;
+ 
+     for (int i = 0; i < cx.length; i++)
+       if (cx[i].context_id == service_context.context_id)
+         exists = i;
+ 
+     if (exists < 0)
+       {
+         // Add context.
+         org.omg.IOP.ServiceContext[] n = new org.omg.IOP.ServiceContext[cx.length + 1];
+         for (int i = 0; i < cx.length; i++)
+           n[i] = cx[i];
+         n[cx.length] = service_context;
+       }
+     else
+       {
+         // Replace context.
+         if (!replace)
+           throw new BAD_INV_ORDER("Repetetive setting of the context "
+             + service_context.context_id, 15, CompletionStatus.COMPLETED_NO);
+         else
+           cx[exists] = service_context;
+       }
+   }
+ 
+   /**
+    * Add context to the given array of contexts.
+    */
+   public static ServiceContext[] add(ServiceContext[] cx,
+     org.omg.IOP.ServiceContext service_context, boolean replace)
+   {
+     int exists = -1;
+ 
+     for (int i = 0; i < cx.length; i++)
+       if (cx[i].context_id == service_context.context_id)
+         exists = i;
+ 
+     if (exists < 0)
+       {
+         // Add context.
+         ServiceContext[] n = new ServiceContext[cx.length + 1];
+         for (int i = 0; i < cx.length; i++)
+           n[i] = cx[i];
+         n[cx.length] = new ServiceContext(service_context);
+         return n;
+       }
+     else
+       {
+         // Replace context.
+         if (!replace)
+           throw new BAD_INV_ORDER("Repetetive setting of the context "
+             + service_context.context_id, 15, CompletionStatus.COMPLETED_NO);
+         else
+           cx[exists] = new ServiceContext(service_context);
+         return cx;
+       }
+   }
+ 
+   /**
+    * Find context with the given name in the context array.
+    */
+   public static org.omg.IOP.ServiceContext findContext(int ctx_name,
+     org.omg.IOP.ServiceContext[] cx)
+   {
+     for (int i = 0; i < cx.length; i++)
+       if (cx[i].context_id == ctx_name)
+         return cx[i];
+     throw new BAD_PARAM("No context with id " + ctx_name);
+   }
+ 
+   /**
+    * Find context with the given name in the context array, converting into
+    * org.omg.IOP.ServiceContext.
+    */
+   public static org.omg.IOP.ServiceContext findContext(int ctx_name,
+     ServiceContext[] cx)
+   {
+     for (int i = 0; i < cx.length; i++)
+       if (cx[i].context_id == ctx_name)
+         return new org.omg.IOP.ServiceContext(ctx_name, cx[i].context_data);
+     throw new BAD_PARAM("No context with id " + ctx_name);
+   }
+ 
+   /**
+    * Find context with the given name in the context array without conversions.
+    */
+   public static ServiceContext find(int ctx_name, ServiceContext[] cx)
+   {
+     for (int i = 0; i < cx.length; i++)
+       if (cx[i].context_id == ctx_name)
+         return cx[i];
+     return null;
+   }
+ 
+   /**
+    * Return a string representation.
+    */
+   public String toString()
+   {
+     return "ctx " + context_id + ", size " + context_data.length;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_0/CancelHeader.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_0/CancelHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_0/CancelHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_0/CancelHeader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* CancelHeader.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP.v1_0;
+ 
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ /**
+  * The message header for cancelling the request.
+  *
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class CancelHeader
+   extends gnu.CORBA.GIOP.CancelHeader
+ {
+   /**
+    * Write the header.
+    *
+    * @param out a stream to write to.
+    */
+   public void read(InputStream input)
+   {
+     request_id = input.read_ulong();
+   }
+ 
+   /**
+    * Write the header.
+    *
+    * @param out a stream to write to.
+    */
+   public void write(OutputStream output)
+   {
+     output.write_ulong(request_id);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_0/ReplyHeader.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_0/ReplyHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_0/ReplyHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_0/ReplyHeader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,139 ----
+ /* ReplyHeader.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP.v1_0;
+ 
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ import gnu.CORBA.GIOP.ServiceContext;
+ import gnu.CORBA.GIOP.CodeSetServiceContext;
+ 
+ /**
+  * The header of the standard reply.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ReplyHeader
+   extends gnu.CORBA.GIOP.ReplyHeader
+ {
+   /**
+    * Return the message status as a string.
+    */
+   public String getStatusString()
+   {
+     switch (reply_status)
+       {
+         case NO_EXCEPTION :
+           return "ok";
+ 
+         case USER_EXCEPTION :
+           return "user exception";
+ 
+         case SYSTEM_EXCEPTION :
+           return "system exception";
+ 
+         case LOCATION_FORWARD :
+           return "moved";
+ 
+         default :
+           return null;
+       }
+   }
+ 
+   /**
+    * Get the string representation of all included contexts.
+    */
+   public String contexts()
+   {
+     StringBuffer b = new StringBuffer();
+     for (int i = 0; i < service_context.length; i++)
+       {
+         b.append(service_context [ i ].toString());
+         b.append(' ');
+       }
+     return b.toString();
+   }
+ 
+   /**
+    * Reads the header from the stream.
+    *
+    * Sets the code set of this stream to
+    * the code set, specfied in the header.
+    *
+    * @param in a stream to read from.
+    */
+ 
+   public void read(AbstractCdrInput in)
+   {
+     service_context = ServiceContext.readSequence(in);
+     request_id = in.read_ulong();
+     reply_status = in.read_ulong();
+ 
+     in.setCodeSet(CodeSetServiceContext.find(service_context));
+   }
+ 
+   /**
+    * Returns a short string representation.
+    *
+    * @return a string representation.
+    */
+   public String toString()
+   {
+     String status = getStatusString();
+     if (status == null)
+       status = "status " + reply_status;
+     return request_id + ", " + status + " " + contexts();
+   }
+ 
+   /**
+    * Writes the header to the stream.
+    *
+    * Sets the code set of this stream to
+    * the code set, specfied in the header.
+    *
+    * @param out a stream to write into.
+    */
+   public void write(AbstractCdrOutput out)
+   {
+     ServiceContext.writeSequence(out, service_context);
+     out.write_ulong(request_id);
+     out.write_ulong(reply_status);
+ 
+     out.setCodeSet(CodeSetServiceContext.find(service_context));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_0/RequestHeader.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_0/RequestHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_0/RequestHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_0/RequestHeader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,157 ----
+ /* RequestHeader.java -- The GIOP 1.0 request message.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP.v1_0;
+ 
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ import gnu.CORBA.GIOP.ServiceContext;
+ import gnu.CORBA.GIOP.CodeSetServiceContext;
+ 
+ import org.omg.CORBA.portable.IDLEntity;
+ 
+ /**
+  * The GIOP 1.0 request message.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class RequestHeader
+   extends gnu.CORBA.GIOP.RequestHeader
+   implements IDLEntity
+ {
+   /**
+    * Creates an empty request header, setting requesting principal
+    * to byte[] { 'P' }.
+    */
+   public RequestHeader()
+   {
+     requesting_principal = new byte[] { 'P' };
+   }
+ 
+   /**
+    * Set if the sender expects any response to this message.
+    */
+   public void setResponseExpected(boolean expected)
+   {
+     response_expected = expected;
+   }
+ 
+   /**
+    * Return true if response is expected.
+    */
+   public boolean isResponseExpected()
+   {
+     return response_expected;
+   }
+ 
+   public String bytes(byte[] array)
+   {
+     StringBuffer b = new StringBuffer();
+     for (int i = 0; i < array.length; i++)
+       {
+         b.append(Integer.toHexString(array [ i ] & 0xFF));
+         b.append(" ");
+       }
+     return b.toString();
+   }
+ 
+   /**
+    * Get the string representation of all included contexts.
+    */
+   public String contexts()
+   {
+     StringBuffer b = new StringBuffer();
+     for (int i = 0; i < service_context.length; i++)
+       {
+         b.append(service_context [ i ].toString());
+         b.append(' ');
+       }
+     return b.toString();
+   }
+ 
+   /**
+    * Reads the header from the stream.
+    *
+    * Sets the code set of this stream to
+    * the code set, specfied in the header.
+    *
+    * @param in a stream to read from.
+    */
+   public void read(AbstractCdrInput in)
+   {
+     service_context = ServiceContext.readSequence(in);
+     request_id = in.read_ulong();
+     response_expected = in.read_boolean();
+     object_key = in.read_sequence();
+     operation = in.read_string();
+     requesting_principal = in.read_sequence();
+ 
+     in.setCodeSet(CodeSetServiceContext.find(service_context));
+   }
+ 
+   /**
+    * Return a string representation.
+    */
+   public String toString()
+   {
+     return "Request " + request_id + ", call '" + operation + "' on " +
+            bytes(object_key) + ", " +
+            (response_expected ? "wait response" : "one way") + ", from " +
+            bytes(requesting_principal) + contexts();
+   }
+ 
+   /**
+    * Writes the header to the stream.
+    *
+    * Sets the code set of this stream to
+    * the code set, specfied in the header.
+    *
+    * @param out a stream to write into.
+    */
+   public void write(AbstractCdrOutput out)
+   {
+     ServiceContext.writeSequence(out, service_context);
+     out.write_ulong(request_id);
+     out.write_boolean(response_expected);
+     out.write_sequence(object_key);
+     out.write_string(operation);
+     out.write_sequence(requesting_principal);
+ 
+     out.setCodeSet(CodeSetServiceContext.find(service_context));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_2/ReplyHeader.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_2/ReplyHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_2/ReplyHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_2/ReplyHeader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,118 ----
+ /* ReplyHeader.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP.v1_2;
+ 
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ import gnu.CORBA.GIOP.ServiceContext;
+ import gnu.CORBA.GIOP.CodeSetServiceContext;
+ 
+ /**
+  * GIOP 1.2 reply header.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ReplyHeader
+   extends gnu.CORBA.GIOP.v1_0.ReplyHeader
+ {
+   /**
+    * Adds the standard encoding context.
+    */
+   public ReplyHeader()
+   {
+     service_context = new ServiceContext[] { CodeSetServiceContext.STANDARD };
+   }
+ 
+   /**
+    * Return the message status as a string.
+    */
+   public String getStatusString()
+   {
+     String s = super.getStatusString();
+     if (s != null)
+       return s;
+     switch (reply_status)
+       {
+         case LOCATION_FORWARD_PERM :
+           return "moved permanently";
+ 
+         case NEEDS_ADDRESSING_MODE :
+           return "the alternative addressing mode required";
+ 
+         default :
+           return null;
+       }
+   }
+ 
+   /**
+    * Reads the header from the stream.
+    * The fields go in different order than in the previous GIOP versions.
+    *
+    * Sets the code set of this stream to
+    * the code set, specfied in the header.
+    *
+    * @param in a stream to read from.
+    */
+   public void read(AbstractCdrInput in)
+   {
+     request_id = in.read_ulong();
+     reply_status = in.read_ulong();
+     service_context = gnu.CORBA.GIOP.ServiceContext.readSequence(in);
+ 
+     in.setCodeSet(CodeSetServiceContext.find(service_context));
+   }
+ 
+   /**
+    * Writes the header to the stream.
+    * The fields go in different order than in the previous GIOP versions.
+    *
+    * Sets the code set of this stream to
+    * the code set, specfied in the header.
+    *
+    * @param out a stream to write into.
+    */
+   public void write(AbstractCdrOutput out)
+   {
+     out.write_ulong(request_id);
+     out.write_ulong(reply_status);
+     gnu.CORBA.GIOP.ServiceContext.writeSequence(out, service_context);
+ 
+     out.setCodeSet(CodeSetServiceContext.find(service_context));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_2/RequestHeader.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_2/RequestHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GIOP/v1_2/RequestHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GIOP/v1_2/RequestHeader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,222 ----
+ /* RequestHeader.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.GIOP.v1_2;
+ 
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ import gnu.CORBA.GIOP.ServiceContext;
+ import gnu.CORBA.GIOP.CodeSetServiceContext;
+ 
+ import java.io.IOException;
+ 
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ 
+ /**
+  * The GIOP 1.2 request header. The GIOP 1.1 request header
+  * is the same as GIOP 1.0 request header, if taking the
+  * alignment into consideration.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class RequestHeader
+   extends gnu.CORBA.GIOP.v1_0.RequestHeader
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * Indicates that the object is addressed by the object key.
+    */
+   public static final short KeyAddr = 0;
+ 
+   /**
+    * Indicates that the object is addressed by the IOP tagged profile.
+    */
+   public static final short ProfileAddr = 1;
+ 
+   /**
+    * Indicates that the objec is addressed by IOR addressing info.
+    */
+   public static final short ReferenceAddr = 2;
+ 
+   /**
+    * The response flags of the header. By default, the flags are initialised
+    * by value 0x3 (response expected).
+    */
+   public byte response_flags = 3;
+ 
+   /**
+    * The used addressing method.
+    */
+   public short AddressingDisposition;
+ 
+   /**
+    * Adds the standard encoding context.
+    */
+   public RequestHeader()
+   {
+     service_context = new ServiceContext[] { CodeSetServiceContext.STANDARD };
+   }
+ 
+   /**
+    * Set if the sender expects any response to this message.
+    * Clears or sets the 2 lower bits of flags
+    * (0 - not expected, 0x3 - expected).
+    */
+   public void setResponseExpected(boolean expected)
+   {
+     response_expected = expected;
+ 
+     if (expected)
+       response_flags = (byte) (response_flags | 0x3);
+     else
+       response_flags = (byte) (response_flags & (~0x3));
+   }
+ 
+   /**
+    * Return true if response is expected.
+    *
+    * @return true if the two lowest bits of the flags are set or
+    * the response expected is explicitly set to true.
+    */
+   public boolean isResponseExpected()
+   {
+     return response_expected || ((response_flags & 0x3) == 0x3);
+   }
+ 
+   /**
+    * Read the header from the given stream.
+    *
+    * @param in a stream to read from.
+    */
+   public void read(AbstractCdrInput in)
+   {
+     try
+       {
+         request_id = in.read_ulong();
+         response_flags = (byte) in.read();
+ 
+         // Skip 3 reserved octets:
+         in.skip(3);
+ 
+         // Read target address.
+         AddressingDisposition = in.read_ushort();
+ 
+         switch (AddressingDisposition)
+           {
+             case KeyAddr :
+               object_key = in.read_sequence();
+               break;
+ 
+             // TODO FIXME add other addressing methods.
+             case ProfileAddr :
+               throw new NO_IMPLEMENT("Object addressing by IOP tagged profile");
+ 
+             case ReferenceAddr :
+               throw new NO_IMPLEMENT("Object addressing by by IOR addressing info");
+ 
+             default :
+               MARSHAL m = new MARSHAL("Unknow addressing method in request, " +
+                                 AddressingDisposition
+                                );
+               m.minor = Minor.UnsupportedAddressing;
+               throw m;
+           }
+ 
+         operation = in.read_string();
+         service_context = gnu.CORBA.GIOP.ServiceContext.readSequence(in);
+ 
+         // No requesting principal in this new format.
+         in.setCodeSet(CodeSetServiceContext.find(service_context));
+       }
+     catch (IOException ex)
+       {
+         MARSHAL t = new MARSHAL();
+         t.minor = Minor.Header;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Return a string representation.
+    */
+   public String toString()
+   {
+     return "Request " + request_id + ", call '" + operation + "' on " +
+            bytes(object_key) + ", " +
+            (response_expected ? "wait response" : "one way") +
+            " addressed by " + " method " + AddressingDisposition + "." +
+            contexts();
+   }
+ 
+   /**
+    * Write the header to the given stream.
+    *
+    * @param out a stream to write into.
+    */
+   public void write(AbstractCdrOutput out)
+   {
+     out.write_ulong(request_id);
+ 
+     out.write(response_flags);
+ 
+     // Skip 3 reserved octets:
+     out.write(0);
+     out.write(0);
+     out.write(0);
+ 
+     // Write addressing disposition from IOR.
+     // TODO FIXME add other addressing methods.
+     out.write_ushort(KeyAddr);
+ 
+     out.write_sequence(object_key);
+ 
+     out.write_string(operation);
+ 
+     ServiceContext.writeSequence(out, service_context);
+ 
+     // No requesting principal in this new format.
+     out.setCodeSet(CodeSetServiceContext.find(service_context));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/GeneralHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/GeneralHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/GeneralHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/GeneralHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,178 ----
+ /* universalStreamable.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * This class holds the abstract binary data array of the Streamable
+  * being stored. It is used to insert and extract into {@link Any} objects
+  * that have no holder, but have the helper classes.
+  * Encoding/decoding then must be performed by the helper. This class is
+  * defined as package private because it is not idiot proof and
+  * must be used with care.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class GeneralHolder
+   implements Streamable
+ {
+   /**
+    * The binary data, stored inside this holder.
+    */
+   private BufferedCdrOutput value = new BufferedCdrOutput();
+ 
+   /**
+    * Create the universal holder that uses the given buffer to store the data.
+    */
+   public GeneralHolder(BufferedCdrOutput buffer)
+   {
+     value = buffer;
+   }
+ 
+   /**
+    * Reads into the internal buffer till the end of stream is
+    * reached. No alignment operations are performed. This operation
+    * normally reads from the stream, where the single value,
+    * stored using {@link #_write}, is written.
+    *
+    * @throws MARSHALL, if the IOException is thrown during the
+    * stream operation.
+    */
+   public void _read(InputStream input)
+   {
+     try
+       {
+         if (input instanceof BufferredCdrInput)
+           {
+             BufferredCdrInput b = (BufferredCdrInput) input;
+             value.write(b.buffer.getBuffer());
+           }
+         else
+           {
+             int c;
+ 
+             do
+               {
+                 c = input.read();
+                 if (c >= 0)
+                   value.write(c);
+               }
+             while (c >= 0);
+           }
+       }
+     catch (IOException ex)
+       {
+         MARSHAL t = new MARSHAL();
+         t.minor = Minor.Any;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * The type is not known and cannot be returned.
+    *
+    * @throws BAD_OPERATION, always.
+    */
+   public TypeCode _type()
+   {
+     BAD_OPERATION bad = new BAD_OPERATION();
+     bad.minor = Minor.Inappropriate;
+     throw bad;
+   }
+ 
+   /**
+    * Writes the binary data being stored into the given output
+    * stream. This operation supposes that the current stream
+    * position is 0 or satisfies the required alignments anyway.
+    *
+    * @throws MARSHAL if the IOExeption is thrown when writing the
+    * byte array.
+    */
+   public void _write(OutputStream output)
+   {
+     try
+       {
+         value.buffer.writeTo(output);
+       }
+     catch (IOException ex)
+       {
+         MARSHAL t = new MARSHAL();
+         t.minor = Minor.Any;
+         t.initCause(ex);
+         throw t;
+       }
+   }
+ 
+   /**
+    * Get the input stream that reads the fields of the stored value.
+    */
+   InputStream getInputStream()
+   {
+     return value.create_input_stream();
+   }
+ 
+   /**
+    * Clone.
+    */
+   public GeneralHolder Clone()
+   {
+     try
+       {
+         BufferedCdrOutput nb = new BufferedCdrOutput(value.buffer.size());
+         value.buffer.writeTo(nb);
+         return new GeneralHolder(nb);
+       }
+     catch (IOException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/HolderLocator.java gcc-4.1.0/libjava/classpath/gnu/CORBA/HolderLocator.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/HolderLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/HolderLocator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,184 ----
+ /* HolderLocator.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.AnyHolder;
+ import org.omg.CORBA.AnySeqHolder;
+ import org.omg.CORBA.BooleanHolder;
+ import org.omg.CORBA.BooleanSeqHolder;
+ import org.omg.CORBA.CharHolder;
+ import org.omg.CORBA.CharSeqHolder;
+ import org.omg.CORBA.DoubleHolder;
+ import org.omg.CORBA.DoubleSeqHolder;
+ import org.omg.CORBA.FixedHolder;
+ import org.omg.CORBA.FloatHolder;
+ import org.omg.CORBA.FloatSeqHolder;
+ import org.omg.CORBA.IntHolder;
+ import org.omg.CORBA.LongHolder;
+ import org.omg.CORBA.LongLongSeqHolder;
+ import org.omg.CORBA.LongSeqHolder;
+ import org.omg.CORBA.OctetSeqHolder;
+ import org.omg.CORBA.PrincipalHolder;
+ import org.omg.CORBA.ShortHolder;
+ import org.omg.CORBA.ShortSeqHolder;
+ import org.omg.CORBA.StringHolder;
+ import org.omg.CORBA.StringSeqHolder;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodeHolder;
+ import org.omg.CORBA.ULongLongSeqHolder;
+ import org.omg.CORBA.ULongSeqHolder;
+ import org.omg.CORBA.UShortSeqHolder;
+ import org.omg.CORBA.WCharSeqHolder;
+ import org.omg.CORBA.WStringSeqHolder;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.CORBA.ObjectHolder;
+ 
+ /**
+  * Creates the suitable holder for storing the value of the given final_type.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class HolderLocator
+ {
+   /**
+    * The array, sufficiently large to use any {@link TCKind}._tk* constant as
+    * an index.
+    */
+   private static final Class[] holders;
+ 
+   private static final Class[] seqHolders;
+ 
+   static
+     {
+       holders = new Class[32];
+       holders[TCKind._tk_Principal] = PrincipalHolder.class;
+       holders[TCKind._tk_TypeCode] = TypeCodeHolder.class;
+       holders[TCKind._tk_any] = AnyHolder.class;
+       holders[TCKind._tk_boolean] = BooleanHolder.class;
+       holders[TCKind._tk_char] = CharHolder.class;
+       holders[TCKind._tk_double] = DoubleHolder.class;
+       holders[TCKind._tk_float] = FloatHolder.class;
+       holders[TCKind._tk_fixed] = FixedHolder.class;
+       holders[TCKind._tk_long] = IntHolder.class;
+       holders[TCKind._tk_longdouble] = DoubleHolder.class;
+       holders[TCKind._tk_longlong] = LongHolder.class;
+       holders[TCKind._tk_octet] = OctetHolder.class;
+       holders[TCKind._tk_short] = ShortHolder.class;
+       holders[TCKind._tk_string] = StringHolder.class;
+       holders[TCKind._tk_ulong] = IntHolder.class;
+       holders[TCKind._tk_ulonglong] = LongHolder.class;
+       holders[TCKind._tk_ushort] = ShortHolder.class;
+       holders[TCKind._tk_wchar] = WCharHolder.class;
+       holders[TCKind._tk_wstring] = WStringHolder.class;
+       holders[TCKind._tk_objref] = ObjectHolder.class;
+ 
+       seqHolders = new Class[32];
+ 
+       seqHolders[TCKind._tk_ulonglong] = ULongLongSeqHolder.class;
+       seqHolders[TCKind._tk_short] = ShortSeqHolder.class;
+       seqHolders[TCKind._tk_octet] = OctetSeqHolder.class;
+       seqHolders[TCKind._tk_any] = AnySeqHolder.class;
+       seqHolders[TCKind._tk_long] = LongSeqHolder.class;
+       seqHolders[TCKind._tk_longlong] = LongLongSeqHolder.class;
+       seqHolders[TCKind._tk_float] = FloatSeqHolder.class;
+       seqHolders[TCKind._tk_double] = DoubleSeqHolder.class;
+       seqHolders[TCKind._tk_char] = CharSeqHolder.class;
+       seqHolders[TCKind._tk_boolean] = BooleanSeqHolder.class;
+       seqHolders[TCKind._tk_wchar] = WCharSeqHolder.class;
+       seqHolders[TCKind._tk_ushort] = UShortSeqHolder.class;
+       seqHolders[TCKind._tk_ulong] = ULongSeqHolder.class;
+       seqHolders[TCKind._tk_string] = StringSeqHolder.class;
+       seqHolders[TCKind._tk_wstring] = WStringSeqHolder.class;
+     }
+ 
+   /**
+    * Create a holder for storing the value of the given built-in final_type. This
+    * function returns the defined holders for the built-in primitive types and
+    * they sequences.
+    *
+    * @param t the typecode
+    *
+    * @return an instance of the corresponding built-in holder of null if no such
+    * is defined for this final_type. The holder is created with a parameterless
+    * constructor.
+    */
+   public static Streamable createHolder(TypeCode t)
+   {
+     try
+       {
+         int kind = t.kind().value();
+         int componentKind;
+ 
+         Streamable holder = null;
+ 
+         if (kind < holders.length && holders[kind] != null)
+           holder = (Streamable) holders[kind].newInstance();
+ 
+         if (holder != null)
+           return holder;
+ 
+         switch (kind)
+           {
+           case TCKind._tk_sequence:
+             componentKind = t.content_type().kind().value();
+             if (componentKind < seqHolders.length)
+               return (Streamable) seqHolders[componentKind].newInstance();
+             break;
+ 
+           default:
+             break;
+           }
+       }
+     catch (Exception ex)
+       {
+         throw new Unexpected(ex);
+       }
+ 
+     try
+       {
+         Object ox = ObjectCreator.createObject(t.id(), "Holder");
+         return (Streamable) ox;
+       }
+     catch (Exception ex)
+       {
+         return null;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/IOR.java gcc-4.1.0/libjava/classpath/gnu/CORBA/IOR.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/IOR.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/IOR.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,768 ----
+ /* IOR.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ import gnu.CORBA.GIOP.CharSets_OSF;
+ import gnu.CORBA.GIOP.CodeSetServiceContext;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ULongSeqHelper;
+ import org.omg.IOP.TAG_INTERNET_IOP;
+ import org.omg.IOP.TAG_MULTIPLE_COMPONENTS;
+ import org.omg.IOP.TaggedComponent;
+ import org.omg.IOP.TaggedComponentHelper;
+ import org.omg.IOP.TaggedProfile;
+ import org.omg.IOP.TaggedProfileHelper;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.zip.Adler32;
+ 
+ /**
+  * The implementaton of the Interoperable Object Reference (IOR). IOR can be
+  * compared with the Internet address for a web page, it provides means to
+  * locate the CORBA service on the web. IOR contains the host address, port
+  * number, the object identifier (key) inside the server, the communication
+  * protocol version, supported charsets and so on.
+  *
+  * Ths class provides method for encoding and decoding the IOR information
+  * from/to the stringified references, usually returned by
+  * {@link org.omg.CORBA.ORB#String object_to_string()}.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  *
+  * @see org.mog.CORBA.Object.object_to_string(Object forObject)
+  * @see string_to_object(String IOR)
+  */
+ public class IOR
+ {
+   /**
+    * The code sets tagged component, normally part of the Internet profile. This
+    * compone consists of the two componenets itself.
+    */
+   public static class CodeSets_profile
+   {
+     public CodeSets_profile()
+     {
+       int[] supported = CharSets_OSF.getSupportedCharSets();
+ 
+       narrow.native_set = CharSets_OSF.NATIVE_CHARACTER;
+       narrow.conversion = supported;
+ 
+       wide.native_set = CharSets_OSF.NATIVE_WIDE_CHARACTER;
+       wide.conversion = supported;
+     }
+ 
+     /**
+      * The code set component.
+      */
+     public static class CodeSet_component
+     {
+       /**
+        * The conversion code sets.
+        */
+       public int[] conversion;
+ 
+       /**
+        * The native code set.
+        */
+       public int native_set;
+ 
+       /**
+        * Read from the CDR stream.
+        */
+       public void read(org.omg.CORBA.portable.InputStream in)
+       {
+         native_set = in.read_ulong();
+         conversion = ULongSeqHelper.read(in);
+       }
+ 
+       /**
+        * Get a string representation.
+        */
+       public String toString()
+       {
+         StringBuffer b = new StringBuffer();
+         b.append("native " + name(native_set));
+         if (conversion != null && conversion.length > 0)
+           {
+             b.append(" conversion ");
+             for (int i = 0; i < conversion.length; i++)
+               {
+                 b.append(name(conversion[i]));
+                 b.append(' ');
+               }
+           }
+         b.append(' ');
+         return b.toString();
+       }
+ 
+       /**
+        * Write into CDR stream.
+        */
+       public void write(org.omg.CORBA.portable.OutputStream out)
+       {
+         out.write_long(native_set);
+         ULongSeqHelper.write(out, conversion);
+       }
+ 
+       private String name(int set)
+       {
+         return "0x" + Integer.toHexString(set) + " ("
+                + CharSets_OSF.getName(set) + ") ";
+       }
+     }
+ 
+     /**
+      * The agreed tag for the Codesets profile.
+      */
+     public static final int TAG_CODE_SETS = 1;
+ 
+     /**
+      * Information about narrow character encoding (TCS-C).
+      */
+     public CodeSet_component narrow = new CodeSet_component();
+ 
+     /**
+      * About wide character encoding (TCS-W).
+      */
+     public CodeSet_component wide = new CodeSet_component();
+ 
+     /**
+      * The negotiated coding result for this IOR. Saves time, requred for
+      * negotiation computations.
+      */
+     public CodeSetServiceContext negotiated;
+ 
+     /**
+      * Read the code set profile information from the given input stream.
+      *
+      * @param profile a stream to read from.
+      */
+     public void read(AbstractCdrInput profile)
+     {
+       BufferredCdrInput encapsulation = profile.read_encapsulation();
+       narrow.read(encapsulation);
+       wide.read(encapsulation);
+     }
+ 
+     /**
+      * Returns a string representation.
+      */
+     public String toString()
+     {
+       return "Narrow char: " + narrow + ", Wide char: " + wide;
+     }
+ 
+     /**
+      * Write the code set profile information into the given input stream.
+      *
+      * @param profile a stream to write into.
+      */
+     public void write(AbstractCdrOutput profile)
+     {
+       AbstractCdrOutput encapsulation = profile.createEncapsulation();
+       narrow.write(encapsulation);
+       wide.write(encapsulation);
+       try
+         {
+           encapsulation.close();
+         }
+       catch (IOException ex)
+         {
+           throw new InternalError();
+         }
+     }
+   }
+ 
+   /**
+    * The internet profile.
+    */
+   public class Internet_profile
+   {
+     /**
+      * The agreed tag for the Internet profile.
+      */
+     public static final int TAG_INTERNET_IOP = 0;
+ 
+     /**
+      * The host.
+      */
+     public String host;
+ 
+     /**
+      * The IIOP version (initialised to 1.2 by default).
+      */
+     public Version version = new Version(1, 2);
+ 
+     /**
+      * The port.
+      */
+     public int port;
+ 
+     /**
+      * The code sets component in the internet profile of this IOR. This is not
+      * a separate profile.
+      */
+     public CodeSets_profile CodeSets = new CodeSets_profile();
+ 
+     /**
+      * Reserved for all components of this profile, this array holds the
+      * components other than code set components.
+      */
+     ArrayList components = new ArrayList();
+ 
+     /**
+      * Return the human readable representation.
+      */
+     public String toString()
+     {
+       StringBuffer b = new StringBuffer();
+       b.append(host);
+       b.append(":");
+       b.append(port);
+       b.append(" (v");
+       b.append(version);
+       b.append(")");
+       if (components.size() > 0)
+         b.append(" " + components.size() + " extra components.");
+       return b.toString();
+     }
+ 
+     /**
+      * Write the internet profile (except the heading tag.
+      */
+     public void write(AbstractCdrOutput out)
+     {
+       try
+         {
+           // Need to write the Internet profile into the separate
+           // stream as we must know the size in advance.
+           AbstractCdrOutput b = out.createEncapsulation();
+ 
+           version.write(b);
+           b.write_string(host);
+ 
+           b.write_ushort((short) (port & 0xFFFF));
+ 
+           // Write the object key.
+           b.write_long(key.length);
+           b.write(key);
+ 
+           // Number of the tagged components.
+           b.write_long(1 + components.size());
+ 
+           b.write_long(CodeSets_profile.TAG_CODE_SETS);
+           CodeSets.write(b);
+ 
+           TaggedComponent t;
+ 
+           for (int i = 0; i < components.size(); i++)
+             {
+               t = (TaggedComponent) components.get(i);
+               TaggedComponentHelper.write(b, t);
+             }
+ 
+           b.close();
+         }
+       catch (Exception e)
+         {
+           MARSHAL m = new MARSHAL("Unable to write Internet profile.");
+           m.minor = Minor.IOR;
+           m.initCause(e);
+           throw m;
+         }
+     }
+   }
+ 
+   /**
+    * The standard minor code, indicating that the string to object converstio
+    * has failed due non specific reasons.
+    */
+   public static final int FAILED = 10;
+ 
+   /**
+    * The internet profile of this IOR.
+    */
+   public Internet_profile Internet = new Internet_profile();
+ 
+   /**
+    * The object repository Id.
+    */
+   public String Id;
+ 
+   /**
+    * The object key.
+    */
+   public byte[] key;
+ 
+   /**
+    * All tagged profiles of this IOR, except the separately defined Internet
+    * profile.
+    */
+   ArrayList profiles = new ArrayList();
+ 
+   /**
+    * True if the profile was encoded using the Big Endian or the encoding is not
+    * known.
+    *
+    * false if it was encoded using the Little Endian.
+    */
+   public boolean Big_Endian = true;
+ 
+   /**
+    * Create an empty instance, initialising the code sets to default values.
+    */
+   public IOR()
+   {
+   }
+ 
+   /**
+    * Parse the provided stringifed reference.
+    *
+    * @param stringified_reference, in the form of IOR:nnnnnn.....
+    *
+    * @return the parsed IOR
+    *
+    * @throws BAD_PARAM, minor code 10, if the IOR cannot be parsed.
+    *
+    * TODO corballoc and other alternative formats.
+    */
+   public static IOR parse(String stringified_reference)
+     throws BAD_PARAM
+   {
+     try
+       {
+         if (!stringified_reference.startsWith("IOR:"))
+           throw new BAD_PARAM("The string refernce must start with IOR:",
+                               FAILED, CompletionStatus.COMPLETED_NO);
+ 
+         IOR r = new IOR();
+ 
+         ByteArrayOutputStream buf = new ByteArrayOutputStream();
+         String x = stringified_reference;
+         x = x.substring(x.indexOf(":") + 1);
+ 
+         char cx;
+ 
+         for (int i = 0; i < x.length(); i = i + 2)
+           {
+             cx = (char) Integer.parseInt(x.substring(i, i + 2), 16);
+             buf.write(cx);
+           }
+ 
+         BufferredCdrInput cdr = new BufferredCdrInput(buf.toByteArray());
+ 
+         r._read(cdr);
+         return r;
+       }
+     catch (Exception ex)
+       {
+         ex.printStackTrace();
+         throw new BAD_PARAM(ex + " while parsing " + stringified_reference,
+                             FAILED, CompletionStatus.COMPLETED_NO);
+       }
+   }
+ 
+   /**
+    * Read the IOR from the provided input stream.
+    *
+    * @param c a stream to read from.
+    * @throws IOException if the stream throws it.
+    */
+   public void _read(AbstractCdrInput c)
+     throws IOException, BAD_PARAM
+   {
+     int endian;
+ 
+     endian = c.read_long();
+     if (endian != 0)
+       {
+         Big_Endian = false;
+         c.setBigEndian(false);
+       }
+     _read_no_endian(c);
+   }
+ 
+   /**
+    * Read the IOR from the provided input stream, not reading the endian data at
+    * the beginning of the stream. The IOR is thansferred in this form in
+    * {@link write_Object(org.omg.CORBA.Object)}.
+    *
+    * If the stream contains a null value, the Id and Internet fields become
+    * equal to null. Otherwise Id contains some string (possibly empty).
+    *
+    * Id is checked for null in AbstractCdrInput that then returns null instead of
+    * object.
+    *
+    * @param c a stream to read from.
+    * @throws IOException if the stream throws it.
+    */
+   public void _read_no_endian(AbstractCdrInput c)
+     throws IOException, BAD_PARAM
+   {
+     Id = c.read_string();
+ 
+     int n_profiles = c.read_long();
+ 
+     if (n_profiles == 0)
+       {
+         Id = null;
+         Internet = null;
+         return;
+       }
+ 
+     for (int i = 0; i < n_profiles; i++)
+       {
+         int tag = c.read_long();
+         BufferredCdrInput profile = c.read_encapsulation();
+ 
+         if (tag == Internet_profile.TAG_INTERNET_IOP)
+           {
+             Internet = new Internet_profile();
+             Internet.version = Version.read_version(profile);
+             Internet.host = profile.read_string();
+             Internet.port = profile.gnu_read_ushort();
+ 
+             key = profile.read_sequence();
+ 
+             // Read tagged components.
+             int n_components = 0;
+ 
+             try
+               {
+                 if (Internet.version.since_inclusive(1, 1))
+                   n_components = profile.read_long();
+ 
+                 for (int t = 0; t < n_components; t++)
+                   {
+                     int ctag = profile.read_long();
+ 
+                     if (ctag == CodeSets_profile.TAG_CODE_SETS)
+                       {
+                         Internet.CodeSets.read(profile);
+                       }
+                     else
+                       {
+                         // Construct a generic component for codesets
+                         // profile.
+                         TaggedComponent pc = new TaggedComponent();
+                         pc.tag = ctag;
+                         pc.component_data = profile.read_sequence();
+                         Internet.components.add(pc);
+                       }
+                   }
+               }
+             catch (Unexpected ex)
+               {
+                 ex.printStackTrace();
+               }
+           }
+         else
+           {
+             // Construct a generic profile.
+             TaggedProfile p = new TaggedProfile();
+             p.tag = tag;
+             p.profile_data = profile.buffer.getBuffer();
+ 
+             profiles.add(p);
+           }
+       }
+   }
+ 
+   /**
+    * Write this IOR record to the provided CDR stream. This procedure writes the
+    * zero (Big Endian) marker first.
+    */
+   public void _write(AbstractCdrOutput out)
+   {
+     // Always use Big Endian.
+     out.write(0);
+     _write_no_endian(out);
+   }
+ 
+   /**
+    * Write a null value to the CDR output stream.
+    *
+    * The null value is written as defined in OMG specification (zero length
+    * string, followed by an empty set of profiles).
+    */
+   public static void write_null(AbstractCdrOutput out)
+   {
+     // Empty Id string.
+     out.write_string("");
+ 
+     // Empty set of profiles.
+     out.write_long(0);
+   }
+ 
+   /**
+    * Write this IOR record to the provided CDR stream. The procedure writed data
+    * in Big Endian, but does NOT add any endian marker to the beginning.
+    */
+   public void _write_no_endian(AbstractCdrOutput out)
+   {
+     // Write repository id.
+     out.write_string(Id);
+ 
+     out.write_long(1 + profiles.size());
+ 
+     // Write the Internet profile.
+     out.write_long(Internet_profile.TAG_INTERNET_IOP);
+     Internet.write(out);
+ 
+     // Write other profiles.
+     TaggedProfile tp;
+ 
+     for (int i = 0; i < profiles.size(); i++)
+       {
+         tp = (TaggedProfile) profiles.get(i);
+         TaggedProfileHelper.write(out, tp);
+       }
+   }
+ 
+   /**
+    * Returns a human readable string representation of this IOR object.
+    */
+   public String toString()
+   {
+     StringBuffer b = new StringBuffer();
+     b.append(Id);
+     b.append(" at ");
+     b.append(Internet);
+ 
+     if (!Big_Endian)
+       b.append(" (Little endian) ");
+ 
+     b.append(" Key ");
+ 
+     for (int i = 0; i < key.length; i++)
+       {
+         b.append(Integer.toHexString(key[i] & 0xFF));
+       }
+ 
+     b.append(" ");
+     b.append(Internet.CodeSets);
+ 
+     return b.toString();
+   }
+ 
+   /**
+    * Returs a stringified reference.
+    *
+    * @return a newly constructed stringified reference.
+    */
+   public String toStringifiedReference()
+   {
+     BufferedCdrOutput out = new BufferedCdrOutput();
+ 
+     _write(out);
+ 
+     StringBuffer b = new StringBuffer("IOR:");
+ 
+     byte[] binary = out.buffer.toByteArray();
+     String s;
+ 
+     for (int i = 0; i < binary.length; i++)
+       {
+         s = Integer.toHexString(binary[i] & 0xFF);
+         if (s.length() == 1)
+           b.append('0');
+         b.append(s);
+       }
+ 
+     return b.toString();
+   }
+ 
+   /**
+    * Adds a service-specific component to the IOR profile. The specified
+    * component will be included in all profiles, present in the IOR.
+    *
+    * @param tagged_component a tagged component being added.
+    */
+   public void add_ior_component(TaggedComponent tagged_component)
+   {
+     // Add to the Internet profile.
+     Internet.components.add(tagged_component);
+ 
+     // Add to others.
+     for (int i = 0; i < profiles.size(); i++)
+       {
+         TaggedProfile profile = (TaggedProfile) profiles.get(i);
+         addComponentTo(profile, tagged_component);
+       }
+   }
+ 
+   /**
+    * Adds a service-specific component to the IOR profile.
+    *
+    * @param tagged_component a tagged component being added.
+    *
+    * @param profile_id the IOR profile to that the component must be added. The
+    * 0 value ({@link org.omg.IOP.TAG_INTERNET_IOP#value}) adds to the Internet
+    * profile where host and port are stored by default.
+    */
+   public void add_ior_component_to_profile(TaggedComponent tagged_component,
+                                            int profile_id)
+   {
+     if (profile_id == TAG_INTERNET_IOP.value)
+       // Add to the Internet profile
+       Internet.components.add(tagged_component);
+     else
+       {
+         // Add to others.
+         for (int i = 0; i < profiles.size(); i++)
+           {
+             TaggedProfile profile = (TaggedProfile) profiles.get(i);
+             if (profile.tag == profile_id)
+               addComponentTo(profile, tagged_component);
+           }
+       }
+   }
+ 
+   /**
+    * Add given component to the given profile that is NOT an Internet profile.
+    *
+    * @param profile the profile, where the component should be added.
+    * @param component the component to add.
+    */
+   private static void addComponentTo(TaggedProfile profile,
+                                      TaggedComponent component)
+   {
+     if (profile.tag == TAG_MULTIPLE_COMPONENTS.value)
+       {
+         TaggedComponent[] present;
+         if (profile.profile_data.length > 0)
+           {
+             BufferredCdrInput in = new BufferredCdrInput(profile.profile_data);
+ 
+             present = new TaggedComponent[in.read_long()];
+ 
+             for (int i = 0; i < present.length; i++)
+               {
+                 present[i] = TaggedComponentHelper.read(in);
+               }
+           }
+         else
+           present = new TaggedComponent[0];
+ 
+         BufferedCdrOutput out = new BufferedCdrOutput(profile.profile_data.length
+                                             + component.component_data.length
+                                             + 8);
+ 
+         // Write new amount of components.
+         out.write_long(present.length + 1);
+ 
+         // Write other components.
+         for (int i = 0; i < present.length; i++)
+           TaggedComponentHelper.write(out, present[i]);
+ 
+         // Write the passed component.
+         TaggedComponentHelper.write(out, component);
+ 
+         try
+           {
+             out.close();
+           }
+         catch (IOException e)
+           {
+             throw new Unexpected(e);
+           }
+         profile.profile_data = out.buffer.toByteArray();
+       }
+     else
+       // The future supported tagged profiles should be added here.
+       throw new BAD_PARAM("Unsupported profile type " + profile.tag);
+   }
+   
+   /**
+    * Checks for equality.
+    */
+   public boolean equals(Object x)
+   {
+     if (x instanceof IOR)
+       {
+         boolean keys;
+         boolean hosts = true;
+ 
+         IOR other = (IOR) x;
+         
+         if (Internet==null || other.Internet==null)
+           return Internet == other.Internet;
+         
+         if (key != null && other.key != null)
+           keys = Arrays.equals(key, other.key);
+         else
+           keys = key == other.key;
+ 
+         if (Internet != null && Internet.host != null)
+           if (other.Internet != null && other.Internet.host != null)
+             hosts = other.Internet.host.equals(Internet.host);
+ 
+         return keys & hosts && Internet.port==other.Internet.port;
+       }
+     else
+       return false;
+   }
+   
+   /**
+    * Get the hashcode of this IOR.
+    */
+   public int hashCode()
+   {
+     Adler32 adler = new Adler32();
+     if (key != null)
+       adler.update(key);
+     if (Internet != null)
+       {
+         if (Internet.host != null)
+           adler.update(Internet.host.getBytes());
+         adler.update(Internet.port);
+       }
+     return (int) adler.getValue();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/ClientRequestInterceptors.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/ClientRequestInterceptors.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/ClientRequestInterceptors.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/ClientRequestInterceptors.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,139 ----
+ /* ClientRequestInterceptors.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Interceptor;
+ 
+ import org.omg.PortableInterceptor.ClientRequestInfo;
+ import org.omg.PortableInterceptor.ClientRequestInterceptor;
+ import org.omg.PortableInterceptor.ClientRequestInterceptorOperations;
+ import org.omg.PortableInterceptor.ForwardRequest;
+ 
+ /**
+  * A block of the all registered ClientRequest interceptors.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class ClientRequestInterceptors
+   implements ClientRequestInterceptorOperations
+ {
+   /**
+    * The array of all registered ClientRequest interceptors.
+    */
+   private final ClientRequestInterceptor[] interceptors;
+ 
+   /**
+    * Create the interceptor pack with the registerend interceptor array,
+    * obtained from the registrator.
+    */
+   public ClientRequestInterceptors(Registrator registrator)
+   {
+     interceptors = registrator.getClientRequestInterceptors();
+   }
+ 
+   /** @inheritDoc */
+   public void receive_exception(ClientRequestInfo info)
+     throws ForwardRequest
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].receive_exception(info);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void receive_other(ClientRequestInfo info) throws ForwardRequest
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].receive_other(info);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void receive_reply(ClientRequestInfo info)
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].receive_reply(info);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void send_poll(ClientRequestInfo info)
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].send_poll(info);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void send_request(ClientRequestInfo info) throws ForwardRequest
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].send_request(info);
+       }
+   }
+ 
+   /**
+    * Call destroy on all registered interceptors.
+    */
+   public void destroy()
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         try
+           {
+             interceptors [ i ].destroy();
+           }
+         catch (Exception exc)
+           {
+             // OMG states we should ignore.
+           }
+       }
+   }
+ 
+   /**
+    * Get the class name.
+    */
+   public String name()
+   {
+     return getClass().getName();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/ForwardRequestHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/ForwardRequestHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/ForwardRequestHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/ForwardRequestHolder.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,106 ----
+ /* ForwardRequestHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Interceptor;
+ 
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.PortableInterceptor.ForwardRequest;
+ import org.omg.PortableInterceptor.ForwardRequestHelper;
+ 
+ /**
+  * A holder for the exception {@link ForwardRequest}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class ForwardRequestHolder implements Streamable
+ {
+   /**
+    * The stored ForwardRequest value.
+    */
+   public ForwardRequest value;
+ 
+   /**
+    * Create the unitialised instance, leaving the value field with default
+    * <code>null</code> value.
+    */
+   public ForwardRequestHolder()
+   {
+   }
+ 
+   /**
+    * Create the initialised instance.
+    *
+    * @param initialValue the value that will be assigned to the
+    * <code>value</code> field.
+    */
+   public ForwardRequestHolder(ForwardRequest initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Fill in the {@link value} by data from the CDR stream.
+    *
+    * @param input the org.omg.CORBA.portable stream to read.
+    */
+   public void _read(InputStream input)
+   {
+     value = ForwardRequestHelper.read(input);
+   }
+ 
+   /**
+    * Write the stored value into the CDR stream.
+    *
+    * @param output the org.omg.CORBA.portable stream to write.
+    */
+   public void _write(OutputStream output)
+   {
+     ForwardRequestHelper.write(output, value);
+   }
+ 
+   /**
+    * Get the typecode of the ForwardRequest.
+    */
+   public TypeCode _type()
+   {
+     return ForwardRequestHelper.type();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/IORInterceptors.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/IORInterceptors.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/IORInterceptors.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/IORInterceptors.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,190 ----
+ /* IORInterceptors.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Interceptor;
+ 
+ import org.omg.CORBA.OBJ_ADAPTER;
+ import org.omg.CORBA.OMGVMCID;
+ import org.omg.PortableInterceptor.IORInfo;
+ import org.omg.PortableInterceptor.IORInterceptor;
+ import org.omg.PortableInterceptor.IORInterceptorOperations;
+ import org.omg.PortableInterceptor.IORInterceptor_3_0Operations;
+ import org.omg.PortableInterceptor.ObjectReferenceTemplate;
+ 
+ /**
+  * A block of the all registered IOR interceptors.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class IORInterceptors implements IORInterceptor_3_0Operations
+ {
+   /**
+    * The array of all registered IOR interceptors.
+    */
+   private final IORInterceptor[] interceptors;
+ 
+   /**
+    * Create the interceptor pack with the registerend interceptor array,
+    * obtained from the registrator.
+    */
+   public IORInterceptors(Registrator registrator)
+   {
+     interceptors = registrator.getIORInterceptors();
+   }
+ 
+   /**
+    * Call this method for all registered interceptors.
+    */
+   public void establish_components(IORInfo info)
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         try
+           {
+             interceptors [ i ].establish_components(info);
+           }
+         catch (Exception exc)
+           {
+             // OMG states we should ignore.
+           }
+       }
+   }
+ 
+   /**
+    * Call destroy on all registered interceptors.
+    */
+   public void destroy()
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         try
+           {
+             interceptors [ i ].destroy();
+           }
+         catch (Exception exc)
+           {
+             // OMG states we should ignore.
+           }
+       }
+   }
+ 
+   /**
+    * Get the class name.
+    */
+   public String name()
+   {
+     return getClass().getName();
+   }
+ 
+   /**
+    * Call this method for all registered CORBA 3.0 interceptors.
+    */
+   public void adapter_manager_state_changed(int adapterManagerId, short adapterState)
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         try
+           {
+             if (interceptors[i] instanceof IORInterceptor_3_0Operations)
+               {
+                 ((IORInterceptor_3_0Operations) interceptors[i]).
+                   adapter_manager_state_changed(adapterManagerId, adapterState);
+               }
+           }
+         catch (Exception exc)
+           {
+             OBJ_ADAPTER oa = new OBJ_ADAPTER("components_established failed");
+             oa.initCause(exc);
+             oa.minor = 6 | OMGVMCID.value;
+             throw oa;
+           }
+       }
+   }
+ 
+   /**
+    * Call this method for all registered CORBA 3.0 interceptors.
+    */
+   public void adapter_state_changed(ObjectReferenceTemplate[] adapters, short adaptersState)
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         try
+           {
+             if (interceptors[i] instanceof IORInterceptor_3_0Operations)
+               {
+                 ((IORInterceptor_3_0Operations) interceptors[i]).
+                   adapter_state_changed(adapters, adaptersState);
+               }
+           }
+         catch (Exception exc)
+           {
+             OBJ_ADAPTER oa = new OBJ_ADAPTER("components_established failed");
+             oa.initCause(exc);
+             oa.minor = 6 | OMGVMCID.value;
+             throw oa;
+           }
+       }
+   }
+ 
+   /**
+    * Call this method for all registered CORBA 3.0 interceptors.
+    * 
+    * @throws OBJ_ADAPTER minor 6 on any failure (as defined by OMG specs).
+    */
+   public void components_established(IORInfo info)
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         try
+           {
+             if (interceptors[i] instanceof IORInterceptor_3_0Operations)
+               {
+                 ((IORInterceptor_3_0Operations) interceptors[i]).
+                   components_established(info);
+               }
+           }
+         catch (Exception exc)
+           {
+             OBJ_ADAPTER oa = new OBJ_ADAPTER("components_established failed");
+             oa.initCause(exc);
+             oa.minor = 6 | OMGVMCID.value;
+             throw oa;
+           }
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/Registrator.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/Registrator.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/Registrator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/Registrator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,472 ----
+ /* Registrator.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Interceptor;
+ 
+ import gnu.CORBA.Poa.ORB_1_4;
+ import gnu.CORBA.ObjectCreator;
+ import gnu.CORBA.gnuCodecFactory;
+ 
+ import org.omg.CORBA.BAD_INV_ORDER;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.Object;
+ import org.omg.IOP.CodecFactory;
+ import org.omg.PortableInterceptor.ClientRequestInterceptor;
+ import org.omg.PortableInterceptor.IORInterceptor;
+ import org.omg.PortableInterceptor.Interceptor;
+ import org.omg.PortableInterceptor.ORBInitInfo;
+ import org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName;
+ import org.omg.PortableInterceptor.ORBInitInfoPackage.InvalidName;
+ import org.omg.PortableInterceptor.ORBInitializer;
+ import org.omg.PortableInterceptor.ORBInitializerOperations;
+ import org.omg.PortableInterceptor.PolicyFactory;
+ import org.omg.PortableInterceptor.ServerRequestInterceptor;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.IOException;
+ 
+ import java.util.ArrayList;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.TreeMap;
+ 
+ /**
+  * Collects interceptors, references and factories into arrays during
+  * registration. As the class is security sensitive, the most of the fields are
+  * private.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Registrator extends LocalObject implements ORBInitInfo
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The agreed properties prefix.
+    */
+   public static final String m_prefix =
+     "org.omg.PortableInterceptor.ORBInitializerClass.";
+ 
+   /**
+    * The initialization - time server request interceptors.
+    */
+   private ArrayList m_server = new ArrayList();
+ 
+   /**
+    * The initialization - time client request interceptors.
+    */
+   private ArrayList m_client = new ArrayList();
+ 
+   /**
+    * The initialization - time ior interceptors.
+    */
+   private ArrayList m_ior = new ArrayList();
+ 
+   /**
+    * The policy factories.
+    */
+   public Hashtable m_policyFactories = new Hashtable();
+ 
+   /**
+    * The registered references. To avoid exposing the ORB's references map, the
+    * are added by ORB from inside the ORB code. The ORB is responsible for
+    * taking them from this field between pre_init and post_init.
+    */
+   public TreeMap m_references = new TreeMap();
+ 
+   /**
+    * The initializers.
+    */
+   public ArrayList m_initializers = new ArrayList();
+ 
+   /**
+    * The ORB being intialised.
+    */
+   final ORB_1_4 orb;
+ 
+   /**
+    * The argument string array, passed to ORB.init.
+    */
+   final String[] m_args;
+ 
+   /**
+    * The codec factory.
+    */
+   final gnuCodecFactory m_codecFactory;
+ 
+   /**
+    * Create the interceptor collection from the given properties, using the
+    * agreed naming convention.
+    *
+    * @param orb the ORB being initialised.
+    * @param props the cumulated set of properties where the orb initializer
+    * pattern is searched.
+    * @param an_args the argument string array, passed to ORB.init.
+    */
+   public Registrator(ORB_1_4 an_orb, Properties props, String[] an_args)
+   {
+     orb = an_orb;
+     m_args = an_args;
+     m_codecFactory = new gnuCodecFactory(orb);
+     checkProperties(props);
+     checkProperties(System.getProperties());
+     checkFile("user.home", null);
+     checkFile("java.home", "lib");
+   }
+ 
+   /**
+    * Scan the given properties for the possible interceptors.
+    */
+   private void checkProperties(Properties props)
+   {
+     if (props == null)
+       {
+         return;
+       }
+ 
+     Enumeration names = props.propertyNames();
+     java.lang.Object key;
+     String sk;
+ 
+     while (names.hasMoreElements())
+       {
+         key = names.nextElement();
+         if (key != null)
+           {
+             sk = key.toString();
+             if (sk.startsWith(m_prefix))
+               {
+                 try
+                   {
+                     String cn = sk.substring(m_prefix.length());
+                     Class iClass = ObjectCreator.forName(cn);
+                     
+                     ORBInitializer initializer =
+                       (ORBInitializer) iClass.newInstance();
+                     m_initializers.add(initializer);
+                   }
+                 catch (Exception exc)
+                   {
+                     // OMG states we should not throw an exception, but
+                     // this will help the user to detect his error
+                     // in initialiser properties. Should never print during
+                     // normal run.
+                     System.err.println(sk + " failed");
+                   }
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Check if the property is defined in the existsting file orb.properties.
+    */
+   private void checkFile(String dir, String subdir)
+   {
+     try
+       {
+         File f = new File(dir);
+         if (!f.exists())
+           {
+             return;
+           }
+ 
+         if (subdir != null)
+           {
+             f = new File(f, subdir);
+           }
+         f = new File(f, "orb.properties");
+ 
+         if (!f.exists())
+           {
+             return;
+           }
+ 
+         Properties p = new Properties();
+         p.load(new BufferedInputStream(new FileInputStream(f)));
+ 
+         checkProperties(p);
+       }
+     catch (IOException ex)
+       {
+       }
+   }
+ 
+   /**
+    * Called by ORB as a pre_init for all initializers.
+    */
+   public void pre_init()
+   {
+     Iterator iter = m_initializers.iterator();
+     while (iter.hasNext())
+       {
+         ORBInitializerOperations initializer =
+           (ORBInitializerOperations) iter.next();
+         initializer.pre_init(this);
+       }
+   }
+ 
+   /**
+    * Get the map of the registered references. The ORB calls this method to
+    * import the references into its references map.
+    */
+   public Map getRegisteredReferences()
+   {
+     return m_references;
+   }
+ 
+   /**
+    * Called by ORB as a post-init for all initializers. After this call, the
+    * interceptor sets are fixed and redundant information is discarded.
+    */
+   public void post_init()
+   {
+     Iterator iter = m_initializers.iterator();
+     while (iter.hasNext())
+       {
+         ORBInitializerOperations initializer =
+           (ORBInitializerOperations) iter.next();
+         initializer.post_init(this);
+       }
+   }
+ 
+   public ServerRequestInterceptor[] getServerRequestInterceptors()
+   {
+     ServerRequestInterceptor[] iServer =
+       new ServerRequestInterceptor[ m_server.size() ];
+     for (int i = 0; i < iServer.length; i++)
+       {
+         iServer [ i ] = (ServerRequestInterceptor) m_server.get(i);
+       }
+     return iServer;
+   }
+ 
+   public ClientRequestInterceptor[] getClientRequestInterceptors()
+   {
+     ClientRequestInterceptor[] iClient =
+       new ClientRequestInterceptor[ m_client.size() ];
+     for (int i = 0; i < iClient.length; i++)
+       {
+         iClient [ i ] = (ClientRequestInterceptor) m_client.get(i);
+       }
+     return iClient;
+   }
+ 
+   public IORInterceptor[] getIORInterceptors()
+   {
+     IORInterceptor[] iIor = new IORInterceptor[ m_ior.size() ];
+     for (int i = 0; i < iIor.length; i++)
+       {
+         iIor [ i ] = (IORInterceptor) m_ior.get(i);
+       }
+     return iIor;
+   }
+ 
+   public void add_client_request_interceptor(
+     ClientRequestInterceptor interceptor
+   ) throws DuplicateName
+   {
+     add(m_client, interceptor);
+   }
+ 
+   public void add_ior_interceptor(IORInterceptor interceptor)
+     throws DuplicateName
+   {
+     add(m_ior, interceptor);
+   }
+ 
+   public void add_server_request_interceptor(
+     ServerRequestInterceptor interceptor
+   ) throws DuplicateName
+   {
+     add(m_server, interceptor);
+   }
+ 
+   /**
+    * Allocate a new slot for request - specific records.
+    */
+   public int allocate_slot_id()
+   {
+     return orb.icSlotSize++;
+   }
+ 
+   /**
+    * Add the interceptor to the given collection.
+    *
+    * @param list the collection to add.
+    * @param interceptor the interceptor to add.
+    */
+   private void add(ArrayList list, Interceptor interceptor)
+     throws DuplicateName
+   {
+     if (interceptor.name().length() > 0)
+       {
+         Iterator iter = list.iterator();
+         Interceptor ic;
+ 
+         while (iter.hasNext())
+           {
+             ic = (Interceptor) iter.next();
+             if (ic.name().equals(interceptor.name()))
+               {
+                 throw new DuplicateName(interceptor.name());
+               }
+           }
+       }
+     list.add(interceptor);
+   }
+ 
+   /**
+    * Get string array, passed to ORB.init.
+    */
+   public String[] arguments()
+   {
+     return m_args;
+   }
+ 
+   /**
+    * Get the codec factory.
+    */
+   public CodecFactory codec_factory()
+   {
+     return m_codecFactory;
+   }
+ 
+   /**
+    * Get the ORB's id, currently using .toString.
+    */
+   public String orb_id()
+   {
+     return "orb_" + orb;
+   }
+ 
+   /**
+    * Register reference.
+    */
+   public void register_initial_reference(String object_name, Object object)
+     throws InvalidName
+   {
+     if (object_name == null)
+       {
+         throw new InvalidName("null");
+       }
+     else if (object_name.length() == 0)
+       {
+         throw new InvalidName("Empty string");
+       }
+     else if (m_references.containsKey(object_name))
+       {
+         throw new InvalidName(object_name);
+       }
+     else
+       {
+         m_references.put(object_name, object);
+       }
+   }
+ 
+   /**
+    * Accumulates the policy factory map.
+    */
+   public void register_policy_factory(int policy_type,
+     PolicyFactory policy_factory
+   )
+   {
+     Integer it = new Integer(policy_type);
+     if (m_policyFactories.containsKey(it))
+       {
+         throw new BAD_INV_ORDER(
+           "Repetetive registration of the policy factory for type " +
+           policy_type,
+           16,
+           CompletionStatus.COMPLETED_NO
+         );
+       }
+     m_policyFactories.put(it, policy_factory);
+   }
+ 
+   /**
+    * Delegates to ORB.
+    */
+   public org.omg.CORBA.Object resolve_initial_references(String object_name)
+     throws InvalidName
+   {
+     try
+       {
+         return orb.resolve_initial_references(object_name);
+       }
+     catch (org.omg.CORBA.ORBPackage.InvalidName e)
+       {
+         InvalidName in = new InvalidName(e.getMessage());
+         in.initCause(e);
+         throw in;
+       }
+   }
+ 
+   /**
+    * Check if any interceptors of this type were registered.
+    */
+   public boolean hasClientRequestInterceptors()
+   {
+     return m_client.size() > 0;
+   }
+ 
+   /**
+    * Check if any interceptors of this type were registered.
+    */
+   public boolean hasServerRequestInterceptors()
+   {
+     return m_server.size() > 0;
+   }
+ 
+   /**
+    * Check if any interceptors of this type were registered.
+    */
+   public boolean hasIorInterceptors()
+   {
+     return m_ior.size() > 0;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/ServerRequestInterceptors.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/ServerRequestInterceptors.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/ServerRequestInterceptors.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/ServerRequestInterceptors.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,139 ----
+ /* ServerRequestInterceptors.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Interceptor;
+ 
+ import org.omg.PortableInterceptor.ForwardRequest;
+ import org.omg.PortableInterceptor.ServerRequestInfo;
+ import org.omg.PortableInterceptor.ServerRequestInterceptor;
+ import org.omg.PortableInterceptor.ServerRequestInterceptorOperations;
+ 
+ /**
+  * A block of the all registered ServerRequest interceptors.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class ServerRequestInterceptors
+   implements ServerRequestInterceptorOperations
+ {
+   /**
+    * The array of all registered ServerRequest interceptors.
+    */
+   private final ServerRequestInterceptor[] interceptors;
+ 
+   /**
+    * Create the interceptor pack with the registerend interceptor array,
+    * obtained from the registrator.
+    */
+   public ServerRequestInterceptors(Registrator registrator)
+   {
+     interceptors = registrator.getServerRequestInterceptors();
+   }
+ 
+   /** @inheritDoc */
+   public void receive_request_service_contexts(ServerRequestInfo info)
+     throws ForwardRequest
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].receive_request_service_contexts(info);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void receive_request(ServerRequestInfo info) throws ForwardRequest
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].receive_request(info);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void send_exception(ServerRequestInfo info) throws ForwardRequest
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].send_exception(info);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void send_other(ServerRequestInfo info) throws ForwardRequest
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].send_other(info);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public void send_reply(ServerRequestInfo info)
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         interceptors [ i ].send_reply(info);
+       }
+   }
+ 
+   /**
+    * Call destroy on all registered interceptors.
+    */
+   public void destroy()
+   {
+     for (int i = 0; i < interceptors.length; i++)
+       {
+         try
+           {
+             interceptors [ i ].destroy();
+           }
+         catch (Exception exc)
+           {
+             // OMG states we should ignore.
+           }
+       }
+   }
+ 
+   /**
+    * Get the class name.
+    */
+   public String name()
+   {
+     return getClass().getName();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/gnuClientRequestInfo.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/gnuClientRequestInfo.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/gnuClientRequestInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/gnuClientRequestInfo.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,337 ----
+ /* gnuClientRequestInfo.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Interceptor;
+ 
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.gnuRequest;
+ 
+ import org.omg.CORBA.ARG_IN;
+ import org.omg.CORBA.ARG_INOUT;
+ import org.omg.CORBA.ARG_OUT;
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.ExceptionList;
+ import org.omg.CORBA.INV_POLICY;
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.ParameterMode;
+ import org.omg.CORBA.Policy;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.Dynamic.Parameter;
+ import org.omg.IOP.ServiceContext;
+ import org.omg.IOP.TaggedComponent;
+ import org.omg.IOP.TaggedProfile;
+ import org.omg.PortableInterceptor.ClientRequestInfo;
+ import org.omg.PortableInterceptor.InvalidSlot;
+ 
+ /**
+  * Client request info. All requests on the client side in Classpath
+  * implementations are handled via gnuRequest class. This class holds the
+  * instance of the gnuRequest, accessing the request info this way.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuClientRequestInfo extends LocalObject
+   implements ClientRequestInfo
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The request structure, from that some methods take the needed information
+    * directly. The same request structure cannot be reused in parallel threads,
+    * the submission methods are synchronized.
+    */
+   private final gnuRequest request;
+ 
+   /**
+    * Provides possibility to set the wrapped thrown exception explicitly, where
+    * applicable.
+    */
+   public Any m_wrapped_exception;
+ 
+   /**
+    * Create the info on the given request.
+    */
+   public gnuClientRequestInfo(gnuRequest a_request)
+   {
+     request = a_request;
+   }
+ 
+   /** @inheritDoc */
+   public void add_request_service_context(ServiceContext service_context,
+     boolean replace
+   )
+   {
+     request.add_request_service_context(service_context, replace);
+   }
+ 
+   /** @inheritDoc */
+   public TaggedProfile effective_profile()
+   {
+     return request.effective_profile();
+   }
+ 
+   /** @inheritDoc */
+   public org.omg.CORBA.Object effective_target()
+   {
+     return request.effective_target();
+   }
+ 
+   /** @inheritDoc */
+   public TaggedComponent get_effective_component(int id)
+     throws BAD_PARAM
+   {
+     return request.get_effective_component(id);
+   }
+ 
+   /** @inheritDoc */
+   public TaggedComponent[] get_effective_components(int id)
+     throws BAD_PARAM
+   {
+     return request.get_effective_components(id);
+   }
+ 
+   /** @inheritDoc */
+   public Policy get_request_policy(int type) throws INV_POLICY
+   {
+     return request.get_request_policy(type);
+   }
+ 
+   /** @inheritDoc */
+   public String received_exception_id()
+   {
+     try
+       {
+         if (m_wrapped_exception != null)
+           {
+             return m_wrapped_exception.type().id();
+           }
+         else
+           {
+             return request.received_exception_id();
+           }
+       }
+     catch (BadKind e)
+       {
+         throw new Unexpected(e);
+       }
+   }
+ 
+   /** @inheritDoc */
+   public Any received_exception()
+   {
+     if (m_wrapped_exception != null)
+       {
+         return m_wrapped_exception;
+       }
+     else
+       {
+         return request.received_exception();
+       }
+   }
+ 
+   /** @inheritDoc */
+   public org.omg.CORBA.Object target()
+   {
+     return request.target();
+   }
+ 
+   /** @inheritDoc */
+   public Parameter[] arguments()
+   {
+     request.checkDii();
+ 
+     NVList args = request.arguments();
+     Parameter[] p = new Parameter[ args.count() ];
+     try
+       {
+         for (int i = 0; i < p.length; i++)
+           {
+             ParameterMode mode;
+ 
+             switch (args.item(i).flags())
+               {
+                 case ARG_IN.value :
+                   mode = ParameterMode.PARAM_IN;
+                   break;
+ 
+                 case ARG_OUT.value :
+                   mode = ParameterMode.PARAM_OUT;
+                   break;
+ 
+                 case ARG_INOUT.value :
+                   mode = ParameterMode.PARAM_INOUT;
+                   break;
+ 
+                 default :
+                   throw new Unexpected();
+               }
+ 
+             p [ i ] = new Parameter(args.item(i).value(), mode);
+           }
+       }
+     catch (Bounds e)
+       {
+         throw new Unexpected(e);
+       }
+     return p;
+   }
+ 
+   /** @inheritDoc */
+   public Any result()
+   {
+     request.checkDii();
+ 
+     Any rt = request.return_value();
+ 
+     if (rt == null)
+       {
+         ORB orb = request.orb();
+         rt = orb.create_any();
+         rt.type(orb.get_primitive_tc(TCKind.tk_void));
+         return rt;
+       }
+ 
+     return request.return_value();
+   }
+ 
+   /** @inheritDoc */
+   public String[] contexts()
+   {
+     return request.ice_contexts();
+   }
+ 
+   /** @inheritDoc */
+   public TypeCode[] exceptions()
+   {
+     request.checkDii();
+ 
+     ExceptionList ex = request.exceptions();
+     TypeCode[] et = new TypeCode[ ex.count() ];
+     try
+       {
+         for (int i = 0; i < et.length; i++)
+           {
+             et [ i ] = ex.item(i);
+           }
+       }
+     catch (Bounds e)
+       {
+         throw new Unexpected(e);
+       }
+     return et;
+   }
+ 
+   /** @inheritDoc */
+   public org.omg.CORBA.Object forward_reference()
+   {
+     return request.forward_reference();
+   }
+ 
+   /** @inheritDoc */
+   public String[] operation_context()
+   {
+     return request.operation_context();
+   }
+ 
+   /** @inheritDoc */
+   public Any get_slot(int id) throws InvalidSlot
+   {
+     return request.get_slot(id);
+   }
+ 
+   /** @inheritDoc */
+   public String operation()
+   {
+     return request.operation();
+   }
+ 
+   /** @inheritDoc */
+   public short reply_status()
+   {
+     return request.reply_status();
+   }
+ 
+   /** @inheritDoc */
+   public int request_id()
+   {
+     return request.request_id();
+   }
+ 
+   /** @inheritDoc */
+   public boolean response_expected()
+   {
+     return request.response_expected();
+   }
+ 
+   /**
+        * Determines how far the request shall progress before control is returned to
+    * the client. However up till JDK 1.5 inclusive this method always returns
+    * SYNC_WITH_TRANSPORT.
+    *
+    * @return {@link org.omg.Messaging.SYNC_WITH_TRANSPORT.value (1), always.
+    *
+    * @specnote as defined in the Suns 1.5 JDK API.
+    */
+   public short sync_scope()
+   {
+     return request.sync_scope();
+   }
+ 
+   /** @inheritDoc */
+   public ServiceContext get_reply_service_context(int ctx_name)
+     throws BAD_PARAM
+   {
+     return request.get_reply_service_context(ctx_name);
+   }
+ 
+   /** @inheritDoc */
+   public ServiceContext get_request_service_context(int ctx_name)
+     throws BAD_PARAM
+   {
+     return request.get_request_service_context(ctx_name);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/gnuIcCurrent.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/gnuIcCurrent.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/gnuIcCurrent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/gnuIcCurrent.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,255 ----
+ /* gnuIcCurrent.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Interceptor;
+ 
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.Poa.ORB_1_4;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_INV_ORDER;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.PortableInterceptor.Current;
+ import org.omg.PortableInterceptor.CurrentHelper;
+ import org.omg.PortableInterceptor.InvalidSlot;
+ 
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Map;
+ 
+ /**
+  * Supports the "Interceptor current" concept, providing the slot value
+  * information for the current thread. When making the invocation, this
+  * information is copied to the Current, returned by ClientRequestInfo.
+  *
+  * There is only one instance of this class per ORB. It maintains a thread to
+  * information map.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuIcCurrent extends ObjectImpl implements Current
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The ORB, controllin this Current. It provides data about the required size
+    * of the slot array.
+    */
+   final ORB_1_4 orb;
+ 
+   /**
+    * The table, mapping threads to records.
+    */
+   private Hashtable threads = new Hashtable();
+ 
+   /**
+    * An empty array when no slots are defined, computed once.
+    */
+   static final Any[] NO_SLOTS = new Any[ 0 ];
+ 
+   /**
+    * Create the IC current.
+    */
+   public gnuIcCurrent(ORB_1_4 an_orb)
+   {
+     orb = an_orb;
+   }
+ 
+   /**
+    * Get the array of POA current repository ids.
+    *
+    * @return a single member array, containing value, returned by the
+    * {@link CurrentHelper#id}, normally
+    * "IDL:omg.org/PortableInterceptor/Current:1.0".
+    */
+   public String[] _ids()
+   {
+     return new String[] { CurrentHelper.id() };
+   }
+ 
+   /**
+    * Add the entry to the map.
+    */
+   public void put(Thread t, Any[] record)
+   {
+     synchronized (threads)
+       {
+         threads.put(t, record);
+ 
+         // Remove non-running threads, avoiding memory leak.
+         if (threads.size() > 12)
+           {
+             Iterator it = threads.entrySet().iterator();
+             while (it.hasNext())
+               {
+                 Map.Entry e = (Map.Entry) it.next();
+                 Thread tx = (Thread) e.getKey();
+                 if (!tx.isAlive())
+                   {
+                     it.remove();
+                   }
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Check if this thread is registered.
+    */
+   public boolean has(Thread t)
+   {
+     synchronized (threads)
+       {
+         return threads.containsKey(t);
+       }
+   }
+ 
+   /**
+    * Remove the entry from the map.
+    */
+   public void remove(Thread t)
+   {
+     synchronized (threads)
+       {
+         threads.remove(t);
+       }
+   }
+ 
+   /**
+    * Get array of all slots, as it is applicable for the current thread. If the
+    * slots were not previously allocated, they are allocated during this call.
+    */
+   Any[] get_slots()
+   {
+     Any[] r;
+     synchronized (threads)
+       {
+         r = (Any[]) threads.get(Thread.currentThread());
+         if (r == null)
+           {
+             r = new Any[ orb.icSlotSize ];
+ 
+             for (int i = 0; i < r.length; i++)
+               {
+                 Any a = orb.create_any();
+                 a.type(orb.get_primitive_tc(TCKind.tk_null));
+                 r [ i ] = a;
+               }
+ 
+             put(Thread.currentThread(), r);
+           }
+         return r;
+       }
+   }
+ 
+   /**
+        * Get copu array of all slots, as it is applicable for the current thread. If
+    * the slots were not previously allocated, they are allocated during this
+    * call.
+    */
+   public Any[] clone_slots()
+   {
+     if (orb.icSlotSize == 0)
+       {
+         return NO_SLOTS;
+       }
+     else
+       {
+         Any[] r = get_slots();
+         Any[] copy = new Any[ r.length ];
+ 
+         BufferedCdrOutput buf = new BufferedCdrOutput();
+         buf.setOrb(orb);
+ 
+         for (int i = 0; i < copy.length; i++)
+           {
+             r [ i ].write_value(buf);
+           }
+ 
+         InputStream input = buf.create_input_stream();
+ 
+         for (int i = 0; i < copy.length; i++)
+           {
+             copy [ i ] = orb.create_any();
+             copy [ i ].read_value(input, r [ i ].type());
+           }
+ 
+         return copy;
+       }
+   }
+ 
+   /**
+    * Get value for the slot with the given id. If the array of Currents has not
+    * been yet allocated for the current thread, it is allocated during the
+    * invocation of this method.
+    */
+   public Any get_slot(int slot_id) throws InvalidSlot, BAD_INV_ORDER
+   {
+     try
+       {
+         return get_slots() [ slot_id ];
+       }
+     catch (ArrayIndexOutOfBoundsException e)
+       {
+         throw new InvalidSlot("Slot " + slot_id);
+       }
+   }
+ 
+   /**
+    * Set value for the slot with the given id. If the array of Currents has not
+    * been yet allocated for the current thread, it is allocated during the
+    * invocation of this method.
+    */
+   public void set_slot(int slot_id, Any data)
+     throws InvalidSlot, BAD_INV_ORDER
+   {
+     try
+       {
+         get_slots() [ slot_id ] = data;
+       }
+     catch (ArrayIndexOutOfBoundsException e)
+       {
+         throw new InvalidSlot("Slot " + slot_id);
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/gnuIorInfo.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/gnuIorInfo.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/gnuIorInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/gnuIorInfo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,156 ----
+ /* gnuIorInfo.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Interceptor;
+ 
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.Poa.ORB_1_4;
+ import gnu.CORBA.Poa.gnuPOA;
+ 
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.Policy;
+ import org.omg.IOP.TaggedComponent;
+ import org.omg.PortableInterceptor.IORInfo;
+ import org.omg.PortableInterceptor.ObjectReferenceFactory;
+ import org.omg.PortableInterceptor.ObjectReferenceTemplate;
+ 
+ /**
+  * Implements IORInfo.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuIorInfo extends LocalObject implements IORInfo
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The ORB, to that the IOR is related.
+    */
+   public final ORB_1_4 orb;
+ 
+   /**
+    * The POA, to that IOR is related.
+    */
+   public final gnuPOA poa;
+ 
+   /**
+    * The IOR itself.
+    */
+   private final IOR ior;
+ 
+   /**
+    * Create an instance.
+    */
+   public gnuIorInfo(ORB_1_4 an_orb, gnuPOA a_poa, IOR an_ior)
+   {
+     orb = an_orb;
+     poa = a_poa;
+     ior = an_ior;
+   }
+ 
+   /**
+    * Add component to tje specified profile of this IOR.
+    */
+   public void add_ior_component_to_profile(TaggedComponent tagged_component,
+     int profile_id
+   )
+   {
+     ior.add_ior_component_to_profile(tagged_component, profile_id);
+   }
+ 
+   /**
+    * Add component to all found profiles in this IOR.
+    */
+   public void add_ior_component(TaggedComponent tagged_component)
+   {
+     ior.add_ior_component(tagged_component);
+   }
+ 
+   /**
+    * Get the POA policy.
+    */
+   public Policy get_effective_policy(int policy_type)
+   {
+     return poa._get_policy(policy_type);
+   }
+ 
+   /**
+    * Return the state of the object POA.
+    */
+   public short state()
+   {
+     return (short) poa.the_POAManager().get_state().value();
+   }
+ 
+   /**
+    * Get the adapter template, associated with this poa.
+    */
+   public ObjectReferenceTemplate adapter_template()
+   {
+     return poa.getReferenceTemplate();
+   }
+ 
+   /**
+    * Get the object factory of the current POA.
+    */
+   public ObjectReferenceFactory current_factory()
+   {
+     return poa.getReferenceFactory();
+   }
+ 
+   /**
+    * Set the object factory of the current POA. 
+    */
+   public void current_factory(ObjectReferenceFactory factory)
+   {
+     poa.setReferenceFactory(factory);
+   }
+ 
+   /**
+    * The method currently uses system identity hashcode that should be 
+    * different for each object.
+    */
+   public int manager_id()
+   {
+     // The System.identityHashCode is also called in gnuPoaManager.    
+     return System.identityHashCode(poa.the_POAManager());
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/gnuServerRequestInfo.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/gnuServerRequestInfo.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Interceptor/gnuServerRequestInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Interceptor/gnuServerRequestInfo.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,476 ----
+ /* gnuServerRequestInfo.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Interceptor;
+ 
+ import gnu.CORBA.GIOP.ReplyHeader;
+ import gnu.CORBA.GIOP.RequestHeader;
+ import gnu.CORBA.ObjectCreator;
+ import gnu.CORBA.Poa.gnuServantObject;
+ import gnu.CORBA.OrbFunctional;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.gnuRequest;
+ 
+ import org.omg.CORBA.ARG_IN;
+ import org.omg.CORBA.ARG_INOUT;
+ import org.omg.CORBA.ARG_OUT;
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.ExceptionList;
+ import org.omg.CORBA.INV_POLICY;
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.NO_RESOURCES;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.Object;
+ import org.omg.CORBA.ParameterMode;
+ import org.omg.CORBA.Policy;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.Dynamic.Parameter;
+ import org.omg.IOP.ServiceContext;
+ import org.omg.Messaging.SYNC_WITH_TRANSPORT;
+ import org.omg.PortableInterceptor.InvalidSlot;
+ import org.omg.PortableInterceptor.ServerRequestInfo;
+ 
+ /**
+  * Implementation of the ServerRequestInfo, associacted with gnuServantObject.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuServerRequestInfo extends LocalObject
+   implements ServerRequestInfo
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * A local object that will serve the invocation.
+    */
+   final gnuServantObject m_object;
+ 
+   /**
+    * A message that the given resource is not available using this metod of
+    * invocation.
+    */
+   static final String not_available =
+     "The used invocation method provides" + "no access to this resource.";
+ 
+   /**
+    * An array of slots.
+    */
+   Any[] m_slots;
+ 
+   /**
+    * The request header.
+    */
+   public final RequestHeader m_request_header;
+ 
+   /**
+    * The reply header.
+    */
+   public final ReplyHeader m_reply_header;
+ 
+   /**
+    * The forward reference, if applicable.
+    */
+   public Object m_forward_reference;
+ 
+   /**
+    * The thrown systen exception.
+    */
+   public Exception m_sys_exception;
+ 
+   /**
+    * The Any, containing the thrown user exception.
+    */
+   public Any m_usr_exception;
+ 
+   /**
+    * The associated request, if any.
+    */
+   public gnuRequest m_request;
+ 
+   /**
+    * Create a new instance at the time when it is known which object will serve
+    * the invocation.
+    *
+    * @param an_object a local object, connected to the local servant that will
+    * serve the invocation.
+    */
+   public gnuServerRequestInfo(gnuServantObject an_object,
+     RequestHeader a_request_header, ReplyHeader a_reply_header
+   )
+   {
+     m_object = an_object;
+     m_request_header = a_request_header;
+     m_reply_header = a_reply_header;
+     m_slots = new Any[ m_object.orb.icSlotSize ];
+     reset();
+   }
+ 
+   /**
+    * Set the give slot.
+    */
+   public void set_slot(int id, Any data) throws InvalidSlot
+   {
+     try
+       {
+         m_slots [ id ] = data;
+       }
+     catch (Exception e)
+       {
+         InvalidSlot ex = new InvalidSlot("Cannot set slot " + id);
+         ex.initCause(e);
+         throw ex;
+       }
+   }
+ 
+   /**
+    * Get the given slot.
+    */
+   public Any get_slot(int id) throws InvalidSlot
+   {
+     try
+       {
+         return m_slots [ id ];
+       }
+     catch (Exception e)
+       {
+         InvalidSlot ex = new InvalidSlot("Cannot get slot " + id);
+         ex.initCause(e);
+         throw ex;
+       }
+   }
+ 
+   /**
+    * Reset slot data.
+    */
+   public void reset()
+   {
+     TypeCode tkNull = m_object.orb.get_primitive_tc(TCKind.tk_null);
+     for (int i = 0; i < m_slots.length; i++)
+       {
+         Any a = m_object.orb.create_any();
+         a.type(tkNull);
+         m_slots [ i ] = a;
+       }
+     m_sys_exception = null;
+     m_usr_exception = null;
+   }
+ 
+   /**
+    * Get the object id (not the object IOR key).
+    */
+   public byte[] object_id()
+   {
+     return m_object.Id;
+   }
+ 
+   /**
+    * Check if the target is an instance of the type, represented by the given
+    * repository Id.
+    */
+   public boolean target_is_a(String id)
+   {
+     return m_object._is_a(id);
+   }
+ 
+   /**
+    * Get the POA id.
+    */
+   public byte[] adapter_id()
+   {
+     return m_object.poa.id();
+   }
+ 
+   /**
+    * Get the POA policy of the given type that applies to the object being
+    * served (request being handled).
+    */
+   public Policy get_server_policy(int type) throws INV_POLICY
+   {
+     return m_object.poa._get_policy(type);
+   }
+ 
+   /**
+    * Get the first member of the object repository id array.
+    */
+   public String target_most_derived_interface()
+   {
+     return m_object._ids() [ 0 ];
+   }
+ 
+   /**
+    * Get the name of the operation being performed.
+    */
+   public String operation()
+   {
+     if (m_request != null)
+       {
+         return m_request.operation();
+       }
+     else
+       {
+         return m_request_header.operation;
+       }
+   }
+ 
+   /**
+    * Not available.
+    */
+   public TypeCode[] exceptions()
+   {
+     if (m_request == null)
+       {
+         throw new NO_RESOURCES(not_available, 1,
+           CompletionStatus.COMPLETED_MAYBE
+         );
+       }
+ 
+     m_request.checkDii();
+ 
+     ExceptionList ex = m_request.exceptions();
+     TypeCode[] et = new TypeCode[ ex.count() ];
+     try
+       {
+         for (int i = 0; i < et.length; i++)
+           {
+             et [ i ] = ex.item(i);
+           }
+       }
+     catch (Bounds e)
+       {
+         throw new Unexpected(e);
+       }
+     return et;
+   }
+ 
+   /**
+    * Get reply status.
+    */
+   public short reply_status()
+   {
+     return (short) m_reply_header.reply_status;
+   }
+ 
+   /**
+    * Get request id. All local requests have request id = -1.
+    */
+   public int request_id()
+   {
+     return m_request_header.request_id;
+   }
+ 
+   /**
+    * Check if the client expected any response.
+    */
+   public boolean response_expected()
+   {
+     return m_request_header.isResponseExpected();
+   }
+ 
+   /** @inheritDoc */
+   public void add_reply_service_context(ServiceContext service_context,
+     boolean replace
+   )
+   {
+     m_reply_header.addContext(service_context, replace);
+   }
+ 
+   /**
+    * Get an exception, wrapped into Any.
+    */
+   public Any sending_exception()
+   {
+     if (m_usr_exception != null)
+       {
+         return m_usr_exception;
+       }
+     else if (m_sys_exception != null)
+       {
+         Any a = m_object.orb.create_any();
+         ObjectCreator.insertException(a, m_sys_exception);
+         return a;
+       }
+     else
+       {
+         return null;
+       }
+   }
+ 
+   public org.omg.CORBA.Object forward_reference()
+   {
+     return m_forward_reference;
+   }
+ 
+   /** @inheritDoc */
+   public ServiceContext get_reply_service_context(int ctx_name)
+     throws BAD_PARAM
+   {
+     return gnu.CORBA.GIOP.ServiceContext.findContext(ctx_name,
+       m_reply_header.service_context
+     );
+   }
+ 
+   /** @inheritDoc */
+   public ServiceContext get_request_service_context(int ctx_name)
+     throws BAD_PARAM
+   {
+     return gnu.CORBA.GIOP.ServiceContext.findContext(ctx_name,
+       m_request_header.service_context
+     );
+   }
+ 
+   /**
+    * Not available
+    */
+   public String[] operation_context()
+   {
+     if (m_request == null)
+       {
+         throw new NO_RESOURCES(not_available);
+       }
+     else
+       {
+         return m_request.operation_context();
+       }
+   }
+ 
+   /** @inheritDoc */
+   public Any result()
+   {
+     if (m_request == null)
+       {
+         throw new NO_RESOURCES(not_available);
+       }
+     else
+       {
+         return m_request.return_value();
+       }
+   }
+ 
+   /** @inheritDoc */
+   public String[] contexts()
+   {
+     if (m_request == null)
+       {
+         throw new NO_RESOURCES(not_available);
+       }
+     else
+       {
+         return m_request.ice_contexts();
+       }
+   }
+ 
+   /**
+    * Always returns "with transport".
+    */
+   public short sync_scope()
+   {
+     return SYNC_WITH_TRANSPORT.value;
+   }
+ 
+   /** @inheritDoc */
+   public Parameter[] arguments()
+   {
+     if (m_request == null)
+       {
+         throw new NO_RESOURCES(not_available);
+       }
+ 
+     m_request.checkDii();
+ 
+     NVList args = m_request.arguments();
+     Parameter[] p = new Parameter[ args.count() ];
+     try
+       {
+         for (int i = 0; i < p.length; i++)
+           {
+             ParameterMode mode;
+ 
+             switch (args.item(i).flags())
+               {
+                 case ARG_IN.value :
+                   mode = ParameterMode.PARAM_IN;
+                   break;
+ 
+                 case ARG_OUT.value :
+                   mode = ParameterMode.PARAM_OUT;
+                   break;
+ 
+                 case ARG_INOUT.value :
+                   mode = ParameterMode.PARAM_INOUT;
+                   break;
+ 
+                 default :
+                   throw new Unexpected();
+               }
+ 
+             p [ i ] = new Parameter(args.item(i).value(), mode);
+           }
+       }
+     catch (Bounds e)
+       {
+         throw new Unexpected(e);
+       }
+     return p;
+   }
+ 
+   /** @inheritDoc */
+   public String[] adapter_name()
+   {
+     return m_object.poa.getReferenceTemplate().adapter_name();
+   }
+ 
+   /** @inheritDoc */
+   public String orb_id()
+   {
+     return m_object.orb.orb_id;
+   }
+ 
+   /** @inheritDoc */
+   public String server_id()
+   {
+     return OrbFunctional.server_id;
+   }
+   
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/IorDelegate.java gcc-4.1.0/libjava/classpath/gnu/CORBA/IorDelegate.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/IorDelegate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/IorDelegate.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,442 ----
+ /* gnuDelegate.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.GIOP.ReplyHeader;
+ 
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.Context;
+ import org.omg.CORBA.ContextList;
+ import org.omg.CORBA.ExceptionList;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.NamedValue;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Request;
+ import org.omg.CORBA.portable.ApplicationException;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.RemarshalException;
+ import org.omg.PortableInterceptor.ForwardRequest;
+ 
+ import java.io.IOException;
+ 
+ import java.net.Socket;
+ 
+ /**
+  * The Classpath implementation of the {@link Delegate} functionality in the
+  * case, when the object was constructed from an IOR object. The IOR can be
+  * constructed from the stringified object reference.
+  *
+  * There is an different instance of this delegate for each CORBA object.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class IorDelegate extends SimpleDelegate
+ {
+   /**
+    * Contructs an instance of object using the given IOR.
+    */
+   public IorDelegate(ORB an_orb, IOR an_ior)
+   {
+     super(an_orb, an_ior);
+   }
+ 
+   /**
+    * Creates the request to invoke the method on this object.
+    *
+    * @param target the object, for that the operation must be invoked.
+    * @param context context (null allowed)
+    * @param operation the method name
+    * @param parameters the method parameters
+    * @param returns the return value holder
+    * @param exceptions the exceptions that can be thrown by the method
+    * @param ctx_list the context list (null allowed)
+    *
+    * @return the created request.
+    */
+   public Request create_request(org.omg.CORBA.Object target, Context context,
+     String operation, NVList parameters, NamedValue returns
+   )
+   {
+     gnuRequest request = getRequestInstance(target);
+ 
+     request.setIor(getIor());
+     request.set_target(target);
+ 
+     request.setOperation(operation);
+     request.set_args(parameters);
+     request.m_context = context;
+     request.set_result(returns);
+     request.setORB(orb);
+ 
+     return request;
+   }
+ 
+   /**
+    * Creates the request to invoke the method on this object.
+    *
+    * @param target the object, for that the operation must be invoked.
+    * @param context context (null allowed)
+    * @param operation the method name
+    * @param parameters the method parameters
+    * @param returns the return value holder
+    *
+    * @return the created request.
+    */
+   public Request create_request(org.omg.CORBA.Object target, Context context,
+     String operation, NVList parameters, NamedValue returns,
+     ExceptionList exceptions, ContextList ctx_list
+   )
+   {
+     gnuRequest request = getRequestInstance(target);
+ 
+     request.setIor(ior);
+     request.set_target(target);
+ 
+     request.setOperation(operation);
+     request.set_args(parameters);
+     request.m_context = context;
+     request.set_result(returns);
+     request.set_exceptions(exceptions);
+     request.set_context_list(ctx_list);
+     request.setORB(orb);
+ 
+     return request;
+   }
+ 
+   /**
+    * Get the instance of request.
+    */
+   protected gnuRequest getRequestInstance(org.omg.CORBA.Object target)
+   {
+     return new gnuRequest();
+   }
+ 
+   /**
+    * Invoke operation on the given object, als handling temproray and permanent
+    * redirections. The ReplyHeader.LOCATION_FORWARD will cause to resend the
+    * request to the new direction. The ReplyHeader.LOCATION_FORWARD_PERM will
+    * cause additionally to remember the new location by this delegate, so
+    * subsequent calls will be immediately delivered to the new target.
+    * 
+    * @param target the target object.
+    * @param output the output stream, previously returned by
+    * {@link #request(org.omg.CORBA.Object, String, boolean)}.
+    * 
+    * @return the input stream, to read the response from or null for a one-way
+    * request.
+    * 
+    * @throws SystemException if the SystemException has been thrown on the
+    * remote side (the exact type and the minor code matches the data of the
+    * remote exception that has been thrown).
+    * 
+    * @throws org.omg.CORBA.portable.ApplicationException as specified.
+    * @throws org.omg.CORBA.portable.RemarshalException as specified.
+    */
+   public InputStream invoke(org.omg.CORBA.Object target, OutputStream output)
+     throws ApplicationException, RemarshalException
+   {
+     StreamBasedRequest request = (StreamBasedRequest) output;
+     Forwardings: while (true)
+       {
+         try
+           {
+             if (request.response_expected)
+               {
+                 RawReply response = request.request.submit();
+ 
+                 // Read reply header.
+                 ReplyHeader rh = response.header.create_reply_header();
+                 BufferredCdrInput input = response.getStream();
+                 input.setOrb(orb);
+                 rh.read(input);
+                 request.request.m_rph = rh;
+ 
+                 boolean moved_permanently = false;
+ 
+                 switch (rh.reply_status)
+                   {
+                     case ReplyHeader.NO_EXCEPTION:
+                       if (request.request.m_interceptor != null)
+                         request.request.m_interceptor.receive_reply(request.request.m_info);
+                       if (response.header.version.since_inclusive(1, 2))
+                         input.align(8);
+                       return input;
+ 
+                     case ReplyHeader.SYSTEM_EXCEPTION:
+                       if (response.header.version.since_inclusive(1, 2))
+                         input.align(8);
+                       showException(request, input);
+ 
+                       throw ObjectCreator.readSystemException(input,
+                         rh.service_context);
+ 
+                     case ReplyHeader.USER_EXCEPTION:
+                       if (response.header.version.since_inclusive(1, 2))
+                         input.align(8);
+                       showException(request, input);
+ 
+                       throw new ApplicationException(
+                         request.request.m_exception_id, input);
+ 
+                     case ReplyHeader.LOCATION_FORWARD_PERM:
+                       moved_permanently = true;
+ 
+                     case ReplyHeader.LOCATION_FORWARD:
+                       if (response.header.version.since_inclusive(1, 2))
+                         input.align(8);
+ 
+                       IOR forwarded = new IOR();
+                       try
+                         {
+                           forwarded._read_no_endian(input);
+                         }
+                       catch (IOException ex)
+                         {
+                           MARSHAL t = new MARSHAL("Cant read forwarding info",
+                             5102, CompletionStatus.COMPLETED_NO);
+                           t.initCause(ex);
+                           throw t;
+                         }
+ 
+                       gnuRequest prev = request.request;
+                       gnuRequest r = getRequestInstance(target);
+ 
+                       r.m_interceptor = prev.m_interceptor;
+                       r.m_slots = prev.m_slots;
+ 
+                       r.m_args = prev.m_args;
+                       r.m_context = prev.m_context;
+                       r.m_context_list = prev.m_context_list;
+                       r.m_environment = prev.m_environment;
+                       r.m_exceptions = prev.m_exceptions;
+                       r.m_operation = prev.m_operation;
+                       r.m_parameter_buffer = prev.m_parameter_buffer;
+                       r.m_parameter_buffer.request = r;
+                       r.m_result = prev.m_result;
+                       r.m_target = prev.m_target;
+                       r.oneWay = prev.oneWay;
+                       r.m_forward_ior = forwarded;
+ 
+                       if (r.m_interceptor != null)
+                         r.m_interceptor.receive_other(r.m_info);
+ 
+                       r.setIor(forwarded);
+ 
+                       IorObject it = new IorObject(orb,
+                         forwarded);
+ 
+                       r.m_target = it;
+ 
+                       request.request = r;
+ 
+                       IOR prev_ior = getIor();
+ 
+                       setIor(forwarded);
+ 
+                       try
+                         {
+                           return invoke(it, request);
+                         }
+                       finally
+                         {
+                           if (!moved_permanently)
+                             setIor(prev_ior);
+                         }
+ 
+                     default:
+                       throw new MARSHAL("Unknow reply status: "
+                         + rh.reply_status, 8000 + rh.reply_status,
+                         CompletionStatus.COMPLETED_NO);
+                   }
+               }
+             else
+               {
+                 request.request.send_oneway();
+                 return null;
+               }
+           }
+         catch (ForwardRequest forwarded)
+           {
+             ForwardRequest fw = forwarded;
+             Forwarding2: while (true)
+               {
+                 try
+                   {
+                     gnuRequest prev = request.request;
+                     gnuRequest r = getRequestInstance(target);
+ 
+                     r.m_interceptor = prev.m_interceptor;
+                     r.m_args = prev.m_args;
+                     r.m_context = prev.m_context;
+                     r.m_context_list = prev.m_context_list;
+                     r.m_environment = prev.m_environment;
+                     r.m_exceptions = prev.m_exceptions;
+                     r.m_operation = prev.m_operation;
+                     r.m_parameter_buffer = prev.m_parameter_buffer;
+                     r.m_parameter_buffer.request = r;
+                     r.m_result = prev.m_result;
+                     r.m_target = prev.m_target;
+                     r.oneWay = prev.oneWay;
+ 
+                     r.m_forwarding_target = fw.forward;
+ 
+                     if (r.m_interceptor != null)
+                       r.m_interceptor.receive_other(r.m_info);
+ 
+                     r.m_target = fw.forward;
+                     request.request = r;
+                     break Forwarding2;
+                   }
+                 catch (ForwardRequest e)
+                   {
+                     forwarded = e;
+                   }
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Show exception to interceptor.
+    */
+   void showException(StreamBasedRequest request, BufferredCdrInput input)
+     throws ForwardRequest
+   {
+     input.mark(2048);
+     request.request.m_exception_id = input.read_string();
+     input.reset();
+ 
+     if (request.request.m_interceptor != null)
+       request.request.m_interceptor.receive_exception(request.request.m_info);
+   }
+ 
+   /**
+    * Create a request to invoke the method of this CORBA object.
+    *
+    * @param target the CORBA object, to that this operation must be applied.
+    * @param operation the name of the method to invoke.
+    *
+    * @return the request.
+    */
+   public Request request(org.omg.CORBA.Object target, String operation)
+   {
+     gnuRequest request = getRequestInstance(target);
+ 
+     request.setIor(ior);
+     request.set_target(target);
+ 
+     request.setOperation(operation);
+     request.setORB(orb);
+ 
+     return request;
+   }
+ 
+   /**
+    * Create a request to invoke the method of this CORBA object.
+    *
+    * @param target the CORBA object, to that this operation must be applied.
+    * @param operation the name of the method to invoke.
+    * @param response_expected specifies if this is one way message or the
+    * response to the message is expected.
+    *
+    * @return the stream where the method arguments should be written.
+    */
+   public OutputStream request(org.omg.CORBA.Object target, String operation,
+     boolean response_expected
+   )
+   {
+     gnuRequest request = getRequestInstance(target);
+ 
+     request.setIor(ior);
+     request.set_target(target);
+     request.setOperation(operation);
+ 
+     StreamBasedRequest out = request.getParameterStream();
+     out.response_expected = response_expected;
+     request.setORB(orb);
+     out.setOrb(orb);
+ 
+     return out;
+   }
+ 
+   /**
+    * If there is an opened cache socket to access this object, close that
+    * socket.
+    *
+    * @param target The target is not used, this delegate requires a single
+    * instance per object.
+    */
+   public void release(org.omg.CORBA.Object target)
+   {
+     String key = ior.Internet.host + ":" + ior.Internet.port;
+ 
+     Socket socket = SocketRepository.get_socket(key);
+     try
+       {
+         if (socket != null)
+           {
+             socket.close();
+           }
+       }
+     catch (IOException ex)
+       {
+         // do nothing, then.
+       }
+   }
+ 
+   /**
+    * Reset the remote_ior flag, forcing to check if the object is local on the
+    * next getRequestInstance call.
+    */
+   public void setIor(IOR an_ior)
+   {
+     super.setIor(an_ior);
+   }
+ 
+   /**
+    * Checks if the ior is local so far it is easy.
+    */
+   public boolean is_local(org.omg.CORBA.Object self)
+   {
+     return false;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/IorObject.java gcc-4.1.0/libjava/classpath/gnu/CORBA/IorObject.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/IorObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/IorObject.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,118 ----
+ /* IorObject.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.portable.ObjectImpl;
+ 
+ /**
+  * Implements an object, constructed from an IOR reference.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class IorObject
+   extends ObjectImpl
+   implements IorProvider
+ {
+   /**
+    * The IOR, from which the object was constructed.
+    */
+   protected final IOR ior;
+ 
+   /**
+    * The object id, as defined in IOR.
+    */
+   protected final String[] id;
+ 
+   /**
+    * Create the object from the given IOR.
+    *
+    * @param an_ior the IOR.
+    */
+   public IorObject(ORB orb, IOR an_ior)
+   {
+     ior = an_ior;
+     _set_delegate(new IorDelegate(orb, ior));
+     id = new String[] { ior.Id };
+   }
+ 
+   /**
+    * Create the object from the given string IOR representation.
+    *
+    * @param an_ior the IOR in the string form.
+    */
+   public IorObject(OrbFunctional orb, String an_ior)
+   {
+     ior = IOR.parse(an_ior);
+     _set_delegate(new IorDelegate(orb, ior));
+     id = new String[] { ior.Id };
+   }
+   
+   /**
+    * Get the IOR of this object.
+    */
+   public IOR getIor()
+   {
+     return ior;
+   }
+ 
+   public String[] _ids()
+   {
+     return id;
+   }
+ 
+   /**
+    * Get a string reference for this object.
+    *
+    * @return the class name:IOR profile
+    */
+   public String toString()
+   {
+     return getClass().getName() + ":IOR:" + ior;
+   }
+ 
+   /**
+    * Calls realease on the delegate.
+    */
+   protected void finalize()
+                    throws java.lang.Throwable
+   {
+     _get_delegate().release(this);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/IorProvider.java gcc-4.1.0/libjava/classpath/gnu/CORBA/IorProvider.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/IorProvider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/IorProvider.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,52 ----
+ /* IorProvider.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.CORBA;
+ 
+ /**
+  * Marks the possibility of the implementing object to return the associated
+  * IOR.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public interface IorProvider
+ {
+   /**
+    * Get the IOR of the associated object.
+    */
+   IOR getIor();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Minor.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Minor.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Minor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Minor.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,282 ----
+ /* Minor.java --
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ 
+ /**
+  * Provides information and operations, related to about the 20 bit vendor minor
+  * code Id. This code is included into all CORBA system exceptions and is also
+  * transferred to remote side.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public interface Minor
+ {
+   // Note: MARSHAL done.
+ 
+   /* MARSHAL */
+ 
+   /**
+    * The GNU Classpath VMCID. The last 12 bits can be used to mark up to 4096
+    * possible exceptions.
+    */
+   int vendor = 0x47430000;
+ 
+   /*
+    * Minor codes form MARSHAL exception.
+    */
+ 
+   /**
+    * The message being received is not a GIOP message. It does not start from
+    * the expected magic sequence byte[] { 'G', 'I', 'O', 'P' }.
+    */
+   int Giop = 1 | vendor;
+ 
+   /**
+    * The unexpected IOException while reading or writing the GIOP message header
+    * or the subsequent request or response header
+    */
+   int Header = 2 | vendor;
+ 
+   /**
+    * The data stream ended before reading all expected values from it. This
+    * usually means that the CORBA message is corrupted, but may also indicate
+    * that the server expects the remote method being invoked to have more or
+    * different parameters.
+    */
+   int EOF = 3 | vendor;
+ 
+   /**
+    * The unexpected IOException while reading or writing the data via Commond
+    * Data Representation stream.
+    */
+   int CDR = 5 | vendor;
+ 
+   /**
+    * The unexpected IOException while reading or writing the Value type.
+    */
+   int Value = 6 | vendor;
+ 
+   /**
+    * The unexpected IOException while handling request forwarding.
+    */
+   int Forwarding = 7 | vendor;
+ 
+   /**
+    * The unexpected IOException while handling data encapsulation, tagged
+    * components, tagged profiles, etc.
+    */
+   int Encapsulation = 8 | vendor;
+ 
+   /**
+    * The unexpected IOException while inserting or extracting data to/from the
+    * Any or DynamicAny.
+    */
+   int Any = 9 | vendor;
+ 
+   /**
+    * The unexpected UserException in the context where it cannot be handled and
+    * must be converted to the SystemException.
+    */
+   int UserException = 10 | vendor;
+ 
+   /**
+    * While the operation could formally be applied to the target, the OMG
+    * standard states that it is actually not applicable. For example, some CORBA
+    * objects like POA are always local and should not be passed to or returned
+    * from the remote side.
+    */
+   int Inappropriate = 11 | vendor;
+ 
+   /**
+    * When reading data, it was discovered that size of the data structure like
+    * string, sequence or character is written as the negative number.
+    */
+   int Negative = 12 | vendor;
+ 
+   /**
+    * Reference to non-existing node in the data grapth while reading the value
+    * types.
+    */
+   int Graph = 14 | vendor;
+ 
+   /**
+    * Unexpected exception was thrown from the IDL type helper while handling the
+    * object of this type as a boxed value.
+    */
+   int Boxed = 15 | vendor;
+ 
+   /**
+    * Unable to instantiate an value type object while reading it from the
+    * stream.
+    */
+   int Instantiation = 16 | vendor;
+ 
+   /**
+    * The header tag of the value type being read from the CDR stream contains an
+    * unexpected value outside 0x7fffff00 .. 0x7fffffff and also not null and not
+    * an indirection.
+    */
+   int ValueHeaderTag = 17 | vendor;
+ 
+   /**
+    * The header tag flags of the value type being read from the CDR stream make
+    * the invalid combination (for instance, 0x7fffff04).
+    */
+   int ValueHeaderFlags = 18 | vendor;
+ 
+   /**
+    * The value type class, written on the wire, is not compatible with the
+    * expected class, passed as a parameter to the InputStream.read_value.
+    */
+   int ClassCast = 19 | vendor;
+ 
+   /**
+    * Positive or otherwise invalid indirection offset when reading the data
+    * graph of the value type.
+    */
+   int Offset = 20 | vendor;
+ 
+   /**
+    * Errors while reading the chunked value type.
+    */
+   int Chunks = 21 | vendor;
+ 
+   /**
+    * No means are provided to write this value type.
+    */
+   int UnsupportedValue = 22 | vendor;
+ 
+   /**
+    * The value factory, required for the operation being invoked, is not
+    * registered with this ORB.
+    */
+   int Factory = 23 | vendor;
+ 
+   /**
+    * Unsupported object addressing method in GIOP request header.
+    */
+   int UnsupportedAddressing = 24 | vendor;
+ 
+   /**
+    * Invalid stringified object reference (IOR).
+    */
+   int IOR = 25 | vendor;
+ 
+   /**
+    * Problems with converting between stubs, ties, interfaces and
+    * implementations.
+    */
+   int TargetConversion = 26 | vendor;
+ 
+   /**
+    * Problems with reading or writing the fields of the value type object.
+    */
+   int ValueFields = 27 | vendor;
+ 
+   /**
+    * The instance of the value type is not serializable.
+    */
+   int NonSerializable = 28 | vendor;
+ 
+   /* BAD_OPERATION */
+ 
+   /**
+    * The remote side requested to invoke the method that is not available on
+    * that target (client and server probably disagree in the object definition).
+    */
+   int Method = 0 | vendor;
+ 
+   /**
+    * Failed to activate the inactive object.
+    */
+   int Activation = 10 | vendor;
+ 
+   /*
+    * Any - Attempt to extract from the Any value of the different type that was
+    * stored into that Any.
+    */
+ 
+   /* ClassCast - Unable to narrow the object into stub. */
+ 
+   /**
+    * The policies, applying to ORB or POA prevent the requested operation.
+    */
+   int Policy = 11 | vendor;
+ 
+   /**
+    * Socket related errors like failure to open socket on the expected port,
+    * failure to get a free port when required and so on.
+    */
+   int Socket = 12 | vendor;
+ 
+   /**
+    * The passed value for enumeration is outside the valid range for that
+    * enumeration.
+    */
+   int Enumeration = 14 | vendor;
+ 
+   /**
+    * The passed policy code is outside the valid range of the possible policies
+    * for the given policy type.
+    */
+   int PolicyType = 15 | vendor;
+   
+   /* NO_RESOURCES */
+   
+   /**
+    * Unable to get a free port for a new socket. Proably too many objects under
+    * unsuitable POA policy.
+    */
+   int Ports = 20 | vendor;
+   
+   /**
+    * Too many parallel calls (too many parallel threads). The thread control
+    * prevents malicios client from knocking the server out by suddenly
+    * submitting large number of requests.
+    */
+   int Threads = 21 | vendor;
+   
+   /**
+    * The IOR starts with file://, http:// or ftp://, but this local or remote
+    * resource is not accessible.
+    */
+   int Missing_IOR = 22 | vendor;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NameDynAnyPairHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NameDynAnyPairHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NameDynAnyPairHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NameDynAnyPairHolder.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,115 ----
+ /* NameDynAnyPairHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.NameDynAnyPair;
+ import org.omg.DynamicAny.NameDynAnyPairHelper;
+ 
+ /**
+  * A holder for the structure {@link NameDynAnyPair}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NameDynAnyPairHolder
+   implements Streamable
+ {
+   /**
+    * The stored NameDynAnyPair value.
+    */
+   public NameDynAnyPair value;
+ 
+   /**
+    * Create the unitialised instance, leaving the value field
+    * with default <code>null</code> value.
+    */
+   public NameDynAnyPairHolder()
+   {
+   }
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue the value that will be assigned to
+    * the <code>value</code> field.
+    */
+   public NameDynAnyPairHolder(NameDynAnyPair initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * The method should read this object from the CDR input stream, but
+    * (following the JDK 1.5 API) it does not.
+    *
+    * @param input a org.omg.CORBA.portable stream to read from.
+    *
+    * @specenote Sun throws the same exception.
+    *
+    * @throws MARSHAL always.
+    */
+   public void _read(InputStream input)
+   {
+     value = NameDynAnyPairHelper.read(input);
+   }
+ 
+   /**
+    * The method should write this object to the CDR input stream, but
+    * (following the JDK 1.5 API) it does not.
+    *
+    * @param input a org.omg.CORBA.portable stream to read from.
+    *
+    * @specenote Sun throws the same exception.
+    *
+    * @throws MARSHAL always.
+    */
+   public void _write(OutputStream output)
+   {
+     NameDynAnyPairHelper.write(output, value);
+   }
+ 
+   /**
+    * Get the typecode of the NameDynAnyPair.
+    */
+   public org.omg.CORBA.TypeCode _type()
+   {
+     return NameDynAnyPairHelper.type();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NameDynAnyPairSeqHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NameDynAnyPairSeqHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NameDynAnyPairSeqHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NameDynAnyPairSeqHolder.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,115 ----
+ /* NameDynAnyPairSeqHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.NameDynAnyPair;
+ import org.omg.DynamicAny.NameDynAnyPairSeqHelper;
+ 
+ /**
+  * A holder for the sequence of {@link NameDynAnyPair}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NameDynAnyPairSeqHolder
+   implements Streamable
+ {
+   /**
+    * The stored array of <code>NameDynAnyPair</code>.
+    */
+   public NameDynAnyPair[] value;
+ 
+   /**
+    * Create the unitialised instance, leaving the value array
+    * with default <code>null</code> value.
+    */
+   public NameDynAnyPairSeqHolder()
+   {
+   }
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue the array that will be assigned to
+    * the <code>value</code> array.
+    */
+   public NameDynAnyPairSeqHolder(NameDynAnyPair[] initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * The method should read this object from the CDR input stream, but
+    * (following the JDK 1.5 API) it does not.
+    *
+    * @param input a org.omg.CORBA.portable stream to read from.
+    *
+    * @specenote Sun throws the same exception.
+    *
+    * @throws MARSHAL always.
+    */
+   public void _read(InputStream input)
+   {
+     value = NameDynAnyPairSeqHelper.read(input);
+   }
+ 
+   /**
+    * The method should write this object to the CDR input stream, but
+    * (following the JDK 1.5 API) it does not.
+    *
+    * @param input a org.omg.CORBA.portable stream to read from.
+    *
+    * @specenote Sun throws the same exception.
+    *
+    * @throws MARSHAL always.
+    */
+   public void _write(OutputStream output)
+   {
+     NameDynAnyPairSeqHelper.write(output, value);
+   }
+ 
+   /**
+    * Get the typecode of the NameDynAnyPair.
+    */
+   public org.omg.CORBA.TypeCode _type()
+   {
+     return NameDynAnyPairSeqHelper.type();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NameValuePairHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NameValuePairHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NameValuePairHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NameValuePairHolder.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,105 ----
+ /* NameValuePairHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.NameValuePair;
+ import org.omg.DynamicAny.NameValuePairHelper;
+ 
+ /**
+  * A holder for the structure {@link NameValuePair}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NameValuePairHolder
+   implements Streamable
+ {
+   /**
+    * The stored NameValuePair value.
+    */
+   public NameValuePair value;
+ 
+   /**
+    * Create the unitialised instance, leaving the value field
+    * with default <code>null</code> value.
+    */
+   public NameValuePairHolder()
+   {
+   }
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue the value that will be assigned to
+    * the <code>value</code> field.
+    */
+   public NameValuePairHolder(NameValuePair initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Fill in the {@link value} by data from the CDR stream.
+    *
+    * @param input the org.omg.CORBA.portable stream to read.
+    */
+   public void _read(InputStream input)
+   {
+     value = NameValuePairHelper.read(input);
+   }
+ 
+   /**
+    * Write the stored value into the CDR stream.
+    *
+    * @param output the org.omg.CORBA.portable stream to write.
+    */
+   public void _write(OutputStream output)
+   {
+     NameValuePairHelper.write(output, value);
+   }
+ 
+   /**
+    * Get the typecode of the NameValuePair.
+    */
+   public org.omg.CORBA.TypeCode _type()
+   {
+     return NameValuePairHelper.type();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NameValuePairSeqHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NameValuePairSeqHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NameValuePairSeqHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NameValuePairSeqHolder.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,105 ----
+ /* NameValuePairSeqHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.DynamicAny.NameValuePair;
+ import org.omg.DynamicAny.NameValuePairSeqHelper;
+ 
+ /**
+  * A holder for the sequence of {@link NameValuePair}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NameValuePairSeqHolder
+   implements Streamable
+ {
+   /**
+    * The stored array of <code>NameValuePair</code>.
+    */
+   public NameValuePair[] value;
+ 
+   /**
+    * Create the unitialised instance, leaving the value array
+    * with default <code>null</code> value.
+    */
+   public NameValuePairSeqHolder()
+   {
+   }
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue the array that will be assigned to
+    * the <code>value</code> array.
+    */
+   public NameValuePairSeqHolder(NameValuePair[] initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Read the {@link value} array from the CDR stream.
+    *
+    * @param input the org.omg.CORBA.portable stream to read.
+    */
+   public void _read(InputStream input)
+   {
+     value = NameValuePairSeqHelper.read(input);
+   }
+ 
+   /**
+    * Write the stored value into the CDR stream.
+    *
+    * @param output the org.omg.CORBA.portable stream to write.
+    */
+   public void _write(OutputStream output)
+   {
+     NameValuePairSeqHelper.write(output, value);
+   }
+ 
+   /**
+    * Get the typecode of the NameValuePair.
+    */
+   public org.omg.CORBA.TypeCode _type()
+   {
+     return NameValuePairSeqHelper.type();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/Binding_iterator_impl.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/Binding_iterator_impl.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/Binding_iterator_impl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/Binding_iterator_impl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,139 ----
+ /* Binding_iterator.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.NamingService;
+ 
+ import org.omg.CosNaming.Binding;
+ import org.omg.CosNaming.BindingHolder;
+ import org.omg.CosNaming.BindingListHolder;
+ import org.omg.CosNaming.BindingType;
+ import org.omg.CosNaming.NameComponent;
+ import org.omg.CosNaming._BindingIteratorImplBase;
+ 
+ /**
+  * The implementation of the {@link BindingIterator}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Binding_iterator_impl
+   extends _BindingIteratorImplBase
+ {
+   /**
+    * The value, returned by the {@link #next_one} when there
+    * are no bindings available.
+    */
+   private static final Binding no_more_bindings =
+     new Binding(new NameComponent[ 0 ], BindingType.nobject);
+ 
+   /**
+    * The collection of the available bindings.
+    */
+   private final Binding[] bindings;
+ 
+   /**
+    * The position of the internal iterator pointer.
+    */
+   private int p;
+ 
+   public Binding_iterator_impl(Binding[] a_bindings)
+   {
+     bindings = a_bindings;
+   }
+ 
+   /**
+    * Disconnect the iterator from its ORB. The iterator will
+    * no longer be accessible and will be a subject of the
+    * garbage collection.
+    */
+   public void destroy()
+   {
+     _orb().disconnect(this);
+   }
+ 
+   /**
+    * Return the desired amount of bindings.
+    *
+    * @param amount the maximal number of bindings to return.
+    * @param a_list a holder to store the returned bindings.
+    *
+    * @return false if there are no more bindings available,
+    * true otherwise.
+    */
+   public boolean next_n(int amount, BindingListHolder a_list)
+   {
+     if (p < bindings.length)
+       {
+         int n = bindings.length - p;
+         if (n > amount)
+           n = amount;
+ 
+         a_list.value = new Binding[ n ];
+         for (int i = 0; i < n; i++)
+           a_list.value [ i ] = bindings [ p++ ];
+ 
+         return true;
+       }
+     else
+       {
+         a_list.value = new Binding[ 0 ];
+         return false;
+       }
+   }
+ 
+   /**
+    * Return the next binding.
+    *
+    * @param a_binding a holder, where the next binding will be stored.
+    *
+    * @return false if there are no more bindings available, true
+    * otherwise.
+    */
+   public boolean next_one(BindingHolder a_binding)
+   {
+     if (p < bindings.length)
+       {
+         a_binding.value = (Binding) bindings [ p++ ];
+         return true;
+       }
+     else
+       {
+         a_binding.value = no_more_bindings;
+         return false;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/Ext.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/Ext.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/Ext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/Ext.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,230 ----
+ /* TransientContextExt.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.NamingService;
+ 
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.Object;
+ import org.omg.CORBA.portable.Delegate;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CosNaming.BindingIteratorHolder;
+ import org.omg.CosNaming.BindingListHolder;
+ import org.omg.CosNaming.NameComponent;
+ import org.omg.CosNaming.NamingContext;
+ import org.omg.CosNaming.NamingContextPackage.AlreadyBound;
+ import org.omg.CosNaming.NamingContextPackage.CannotProceed;
+ import org.omg.CosNaming.NamingContextPackage.InvalidName;
+ import org.omg.CosNaming.NamingContextPackage.NotEmpty;
+ import org.omg.CosNaming.NamingContextPackage.NotFound;
+ import org.omg.CosNaming._NamingContextExtImplBase;
+ 
+ /**
+  * This naming context that adds the the string based extensions,
+  * defined by {@link NamingContextExt}. The basic functionality
+  * is handled by the enclosed instance of the {@link NamingContext}.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Ext
+   extends _NamingContextExtImplBase
+ {
+   /**
+    * The older version of the naming context, where all relevant calls
+    * are forwarded.
+    */
+   private final NamingContext classic;
+ 
+   /**
+    * The converter class converts between string and array form of the
+    * name.
+    */
+   private NameTransformer converter = new NameTransformer();
+ 
+   /**
+    * Create the extensions for the given instance of the context.
+    *
+    * @param previous_version the previous version of the naming context.
+    */
+   public Ext(NamingContext previous_version)
+   {
+     classic = previous_version;
+   }
+ 
+   /**
+    * Sets a delegate to this context and, if appropriated, also
+    * sets the same delegate to the enclosing 'classic' context.
+    *
+    * @param a_delegate a delegate to set.
+    */
+   public void _set_delegate(Delegate a_delegate)
+   {
+     super._set_delegate(a_delegate);
+     if (classic instanceof ObjectImpl)
+       ((ObjectImpl) classic)._set_delegate(a_delegate);
+   }
+ 
+   /** {@inheritDoc} */
+   public void bind(NameComponent[] a_name, Object an_object)
+             throws NotFound, CannotProceed, InvalidName, AlreadyBound
+   {
+     classic.bind(a_name, an_object);
+   }
+ 
+   /** {@inheritDoc} */
+   public void bind_context(NameComponent[] a_name, NamingContext context)
+                     throws NotFound, CannotProceed, InvalidName, AlreadyBound
+   {
+     classic.bind_context(a_name, context);
+   }
+ 
+   /** {@inheritDoc} */
+   public NamingContext bind_new_context(NameComponent[] a_name)
+                                  throws NotFound, AlreadyBound, CannotProceed,
+                                         InvalidName
+   {
+     return classic.bind_new_context(a_name);
+   }
+ 
+   /** {@inheritDoc} */
+   public void destroy()
+                throws NotEmpty
+   {
+     classic.destroy();
+   }
+ 
+   /** {@inheritDoc} */
+   public void list(int amount, BindingListHolder a_list,
+                    BindingIteratorHolder an_iter
+                   )
+   {
+     classic.list(amount, a_list, an_iter);
+   }
+ 
+   /** {@inheritDoc} */
+   public NamingContext new_context()
+   {
+     return classic.new_context();
+   }
+ 
+   /** {@inheritDoc} */
+   public void rebind(NameComponent[] a_name, Object an_object)
+               throws NotFound, CannotProceed, InvalidName
+   {
+     classic.rebind(a_name, an_object);
+   }
+ 
+   /** {@inheritDoc} */
+   public void rebind_context(NameComponent[] a_name, NamingContext context)
+                       throws NotFound, CannotProceed, InvalidName
+   {
+     classic.rebind_context(a_name, context);
+   }
+ 
+   /** {@inheritDoc} */
+   public Object resolve(NameComponent[] a_name)
+                  throws NotFound, CannotProceed, InvalidName
+   {
+     return classic.resolve(a_name);
+   }
+ 
+   /**
+    * Resolves the name, represented in the form of the string. The name
+    * is first parsed into an array representation, then the call
+    * is forwarded to the {@link resolve(NameComponent[])}.
+    *
+    * @param a_name_string a name to resolve.
+    *
+    * @return the resolved object.
+    *
+    * @throws NotFound if the name cannot be resolved.
+    * @throws InvalidName if the name is invalid.
+    * @throws CannotProceed on unexpected circumstances.
+    */
+   public Object resolve_str(String a_name_string)
+                      throws NotFound, CannotProceed, InvalidName
+   {
+     return resolve(to_name(a_name_string));
+   }
+ 
+   /**
+    * Convert the name string representation into array representation.
+    *
+    * @param a_name_string a string to convert.
+    * @return a converted array of the name components
+    *
+    * @throws InvalidName on parsing error.
+    */
+   public NameComponent[] to_name(String a_name_string)
+                           throws InvalidName
+   {
+     return converter.toName(a_name_string);
+   }
+ 
+   /**
+    * Convert a name component array representation into string representation.
+    *
+    * @param a_name a name to convert.
+    *
+    * @return a string form.
+    *
+    * @throws InvalidName if the passed name is invalid.
+    */
+   public String to_string(NameComponent[] a_name)
+                    throws InvalidName
+   {
+     return converter.toString(a_name);
+   }
+ 
+   /**
+    * This method is not yet implemented.
+    * FIXME TODO implement it.
+    */
+   public String to_url(String an_address, String a_name_string)
+                 throws org.omg.CosNaming.NamingContextExtPackage.InvalidAddress,
+                        InvalidName
+   {
+     throw new NO_IMPLEMENT("Method to_url() not yet implemented.");
+   }
+ 
+   /** {@inheritDoc} */
+   public void unbind(NameComponent[] a_name)
+               throws NotFound, CannotProceed, InvalidName
+   {
+     classic.unbind(a_name);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NameComponentComparator.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NameComponentComparator.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NameComponentComparator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NameComponentComparator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,98 ----
+ /* NameComponentComparator.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.NamingService;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CosNaming.NameComponent;
+ 
+ import java.util.Comparator;
+ 
+ /**
+  * This class implements the name component comparator, needed to
+  * sort and compare the name components in maps and sorted sets.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public final class NameComponentComparator
+   implements Comparator
+ {
+   /**
+    * The singleton instance of the name comparator.
+    */
+   public static final NameComponentComparator singleton = new NameComponentComparator();
+ 
+   /**
+    * It is enough to have a singleton.
+    */
+   private NameComponentComparator()
+   {
+   }
+ 
+   /**
+    * Compare the two names components.
+    *
+    * @param nc_a the first name component.
+    * @param nc_b the second name component.
+    *
+    * @return 0 if the name components are equal, non zero value
+    * as result of comparison otherwise.
+    *
+    * @throws BAD_PARAM if one of the components is empty or
+    * has {@link NameComponent#id} or {@link NameComponent#kind}
+    * field intialised to null.
+    */
+   public final int compare(Object nc_a, Object nc_b)
+   {
+     NameComponent a = (NameComponent) nc_a;
+     NameComponent b = (NameComponent) nc_b;
+ 
+     int cn = a.id.compareTo(b.id);
+     if (cn != 0)
+       return cn;
+     return a.kind.compareTo(b.kind);
+   }
+ 
+   /**
+    * All instances of this class are equal.
+    */
+   public boolean equals(Object x)
+   {
+     return x instanceof NameComponentComparator;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NameParser.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NameParser.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NameParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NameParser.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,528 ----
+ /* NameParser.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.NamingService;
+ 
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.OrbFunctional;
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.Version;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.DATA_CONVERSION;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Object;
+ import org.omg.CORBA.ORBPackage.InvalidName;
+ import org.omg.CORBA.portable.Delegate;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CosNaming.NamingContext;
+ import org.omg.CosNaming._NamingContextStub;
+ 
+ import java.io.File;
+ import java.io.FileReader;
+ import java.io.IOException;
+ import java.io.InputStreamReader;
+ import java.io.UnsupportedEncodingException;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.net.URLDecoder;
+ import java.util.ArrayList;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * Parses the alternative IOR representations into our IOR structure.
+  * 
+  * TODO This parser currently supports only one address per target string. A
+  * string with the multiple addresses will be accepted, but only the last
+  * address will be taken into consideration. The fault tolerance is not yet
+  * implemented.
+  * 
+  * The key string is filtered using {@link java.net.URLDecoder} that replaces
+  * the agreed escape sequences by the corresponding non alphanumeric characters.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NameParser
+   extends NameTransformer
+ {
+   /**
+    * The corbaloc prefix.
+    */
+   public static final String pxCORBALOC = "corbaloc";
+ 
+   /**
+    * The corbaname prefix.
+    */
+   public static final String pxCORBANAME = "corbaname";
+ 
+   /**
+    * The IOR prefix.
+    */
+   public static final String pxIOR = "ior";
+   
+   /**
+    * The file:// prefix.
+    */
+   public static final String pxFILE = "file://";
+   
+   /**
+    * The ftp:// prefix.
+    */
+   public static final String pxFTP = "ftp://";
+   
+   /**
+    * The http:// prefix.
+    */
+   public static final String pxHTTP = "http://";
+ 
+   /**
+    * Marks iiop protocol.
+    */
+   public static final String IIOP = "iiop";
+ 
+   /**
+    * Marks rir protocol.
+    */
+   public static final String RIR = "rir";
+ 
+   /**
+    * The default port value, as specified in OMG documentation.
+    */
+   public static final int DEFAULT_PORT = 2809;
+ 
+   /**
+    * The default name.
+    */
+   public static final String DEFAULT_NAME = "NameService";
+ 
+   /**
+    * The string to name converter, initialized on demand.
+    */
+   static NameTransformer converter;
+ 
+   /**
+    * The current position.
+    */
+   int p;
+ 
+   /**
+    * The address being parsed, splitted into tokens.
+    */
+   String[] t;
+ 
+   /**
+    * Parse CORBALOC.
+    * 
+    * The expected format is: <br>
+    * 1. corbaloc:[iiop][version.subversion@]:host[:port]/key <br>
+    * 2. corbaloc:rir:[/key] <br>
+    * 3. corbaname:[iiop][version.subversion@]:host[:port]/key <br>
+    * 4. corbaname:rir:[/key] <br>
+    * 5. file://[file name]<br>
+    * 6. http://[url]<br>
+    * 7. ftp://[url]<br>
+    * 
+    * Protocol defaults to IOP, the object key defaults to the NameService.
+    * 
+    * @param corbaloc the string to parse.
+    * @param orb the ORB, needed to create IORs and resolve rir references.
+    * 
+    * @return the resolved object.
+    */
+   public synchronized org.omg.CORBA.Object corbaloc(String corbaloc,
+     OrbFunctional orb)
+     throws BAD_PARAM
+   {
+     return corbaloc(corbaloc, orb, 0);
+   }
+   
+   /**
+    * Parse controlling against the infinite recursion loop.
+    */
+   private org.omg.CORBA.Object corbaloc(String corbaloc,
+     OrbFunctional orb, int recursion)
+   {
+     // The used CORBA specification does not state how many times we should to
+     //redirect, but the infinite loop may be used to knock out the system.
+     // by malicious attempt.
+     if (recursion > 10)
+       throw new DATA_CONVERSION("More than 10 redirections");
+     
+     if (corbaloc.startsWith(pxFILE))
+       return corbaloc(readFile(corbaloc.substring(pxFILE.length())), orb, recursion+1);
+     else if (corbaloc.startsWith(pxHTTP))
+       return corbaloc(readUrl(corbaloc), orb, recursion+1);
+     else if (corbaloc.startsWith(pxFTP))
+       return corbaloc(readUrl(corbaloc), orb, recursion+1);
+ 
+     boolean corbaname;
+ 
+     // The alternative addresses, if given.
+     ArrayList alt_addr = new ArrayList();
+ 
+     // The version numbers with default values.
+     int major = 1;
+     int minor = 0;
+ 
+     // The host address.
+     String host;
+ 
+     // The port.
+     int port = DEFAULT_PORT;
+ 
+     // The object key as string.
+     String key;
+ 
+     StringTokenizer st = new StringTokenizer(corbaloc, ":@/.,#", true);
+ 
+     t = new String[st.countTokens()];
+ 
+     for (int i = 0; i < t.length; i++)
+       {
+         t[i] = st.nextToken();
+       }
+ 
+     p = 0;
+ 
+     if (t[p].startsWith(pxCORBANAME))
+       corbaname = true;
+     else if (t[p].equalsIgnoreCase(pxCORBALOC))
+       corbaname = false;
+     else if (t[p].equalsIgnoreCase(pxIOR))
+       {
+         IOR ior = IOR.parse(corbaloc);
+         return orb.ior_to_object(ior);
+       }
+     else
+       throw new DATA_CONVERSION("Unsupported protocol: '" + t[p] + "'");
+ 
+     p++;
+ 
+     if (!t[p++].equals(":"))
+       throw new BAD_PARAM("Syntax (':' expected after name prefix)");
+ 
+     // Check for rir:
+     if (t[p].equals(RIR))
+       {
+         p++;
+         if (!t[p++].equals(":"))
+           throw new BAD_PARAM("':' expected after 'rir'");
+ 
+         key = readKey("/");
+ 
+         Object object;
+         try
+           {
+             object = orb.resolve_initial_references(key);
+             return corbaname ? resolve(object) : object;
+           }
+         catch (InvalidName e)
+           {
+             throw new BAD_PARAM("Unknown initial reference '" + key + "'");
+           }
+       }
+     else
+     // Check for iiop.
+     if (t[p].equals(IIOP) || t[p].equals(":"))
+       {
+         IOR ior = new IOR();
+ 
+         Addresses: do
+           { // Read addresses.
+             if (t[p].equals(":"))
+               {
+                 p++;
+               }
+             else
+               {
+                 p++;
+                 if (!t[p++].equals(":"))
+                   throw new BAD_PARAM("':' expected after 'iiop'");
+                 // Check if version is present.
+                 if (t[p + 1].equals("."))
+                   if (t[p + 3].equals("@"))
+                     {
+                       // Version info present.
+                       try
+                         {
+                           major = Integer.parseInt(t[p++]);
+                         }
+                       catch (NumberFormatException e)
+                         {
+                           throw new BAD_PARAM("Major version number '"
+                             + t[p - 1] + "'");
+                         }
+                       p++; // '.' at this point.
+                       try
+                         {
+                           minor = Integer.parseInt(t[p++]);
+                         }
+                       catch (NumberFormatException e)
+                         {
+                           throw new BAD_PARAM("Major version number '"
+                             + t[p - 1] + "'");
+                         }
+                       p++; // '@' at this point.
+                     }
+               }
+ 
+             ior.Internet.version = new Version(major, minor);
+ 
+             // Then host data goes till '/' or ':'.
+             StringBuffer bhost = new StringBuffer(corbaloc.length());
+             while (!t[p].equals(":") && !t[p].equals("/") && !t[p].equals(","))
+               bhost.append(t[p++]);
+ 
+             host = bhost.toString();
+ 
+             ior.Internet.host = host;
+ 
+             if (t[p].equals(":"))
+               {
+                 // Port specified.
+                 p++;
+                 try
+                   {
+                     port = Integer.parseInt(t[p++]);
+                   }
+                 catch (NumberFormatException e)
+                   {
+                     throw new BAD_PARAM("Invalid port '" + t[p - 1] + "'");
+                   }
+               }
+ 
+             ior.Internet.port = port;
+ 
+             // Id is not listed.
+             ior.Id = "";
+ 
+             if (t[p].equals(","))
+               p++;
+             else
+               break Addresses;
+           }
+         while (true);
+ 
+         key = readKey("/");
+         ior.key = key.getBytes();
+ 
+         org.omg.CORBA.Object object = orb.ior_to_object(ior);
+         return corbaname ? resolve(object) : object;
+       }
+ 
+     else
+       throw new DATA_CONVERSION("Unsupported protocol '" + t[p] + "'");
+   }
+   
+   /**
+    * Read IOR from the file in the local file system.
+    */
+   String readFile(String file)
+   {
+     File f = new File(file);
+     if (!f.exists())
+       {
+         DATA_CONVERSION err = new DATA_CONVERSION(f.getAbsolutePath()
+           + " does not exist.");
+         err.minor = Minor.Missing_IOR;
+       }
+     try
+       {
+         char[] c = new char[(int) f.length()];
+         FileReader fr = new FileReader(f);
+         fr.read(c);
+         fr.close();
+         return new String(c).trim();
+       }
+     catch (IOException ex)
+       {
+         DATA_CONVERSION d = new DATA_CONVERSION();
+         d.initCause(ex);
+         d.minor = Minor.Missing_IOR;
+         throw (d);
+       }
+   }
+   
+   /**
+    * Read IOR from the remote URL.
+    */
+   String readUrl(String url)
+   {
+     URL u;
+     try
+       {
+         u = new URL(url);
+       }
+     catch (MalformedURLException mex)
+       {
+         throw new BAD_PARAM("Malformed URL: '" + url + "'");
+       }
+ 
+     try
+       {
+         InputStreamReader r = new InputStreamReader(u.openStream());
+ 
+         StringBuffer b = new StringBuffer();
+         int c;
+ 
+         while ((c = r.read()) > 0)
+           b.append((char) c);
+ 
+         return b.toString().trim();
+       }
+     catch (Exception exc)
+       {
+         DATA_CONVERSION d = new DATA_CONVERSION("Reading " + url + " failed.");
+         d.minor = Minor.Missing_IOR;
+         throw d;
+       }
+   }
+ 
+   private org.omg.CORBA.Object resolve(org.omg.CORBA.Object object)
+   {
+     NamingContext ns;
+     String key = "?";
+     try
+       {
+         if (object instanceof NamingContext)
+           ns = (NamingContext) object;
+         else
+           {
+             Delegate delegate = ((ObjectImpl) object)._get_delegate();
+             ns = new _NamingContextStub(delegate);
+           }
+       }
+     catch (Exception ex)
+       {
+         BAD_PARAM bad = new BAD_PARAM("The CORBANAME target " + object
+           + " is not a NamingContext");
+         bad.minor = 10;
+         bad.initCause(ex);
+         throw bad;
+       }
+ 
+     if (converter == null)
+       converter = new NameTransformer();
+ 
+     try
+       {
+         key = readKey("#");
+         object = ns.resolve(converter.toName(key));
+         return object;
+       }
+     catch (Exception ex)
+       {
+         BAD_PARAM bad = new BAD_PARAM("Wrong CORBANAME '" + key + "'");
+         bad.minor = 10;
+         bad.initCause(ex);
+         throw bad;
+       }
+   }
+ 
+   private String readKey(String delimiter)
+     throws BAD_PARAM
+   {
+     if (p < t.length)
+       if (!t[p].equals(delimiter))
+         {
+           if (t[p].equals("#"))
+             return DEFAULT_NAME;
+           else
+             throw new BAD_PARAM("'" + delimiter + "String' expected '" + t[p]
+               + "' found");
+         }
+ 
+     StringBuffer bKey = new StringBuffer();
+     p++;
+ 
+     while (p < t.length && !t[p].equals("#"))
+       bKey.append(t[p++]);
+ 
+     if (bKey.length() == 0)
+       return DEFAULT_NAME;
+ 
+     try
+       {
+         return URLDecoder.decode(bKey.toString(), "UTF-8");
+       }
+     catch (UnsupportedEncodingException e)
+       {
+         throw new Unexpected("URLDecoder does not support UTF-8", e);
+       }
+   }
+ 
+   static NameParser n = new NameParser();
+ 
+   static void corbalocT(String ior, OrbFunctional orb)
+   {
+     System.out.println(ior);
+     System.out.println(n.corbaloc(ior, orb));
+     System.out.println();
+   }
+ 
+   public static void main(String[] args)
+   {
+     try
+       {
+         OrbFunctional orb = (OrbFunctional) ORB.init(args, null);
+         corbalocT("corbaloc:iiop:1.3@155axyz.com/Prod/aTradingService", orb);
+         corbalocT("corbaloc:iiop:2.7@255bxyz.com/Prod/bTradingService", orb);
+         corbalocT("corbaloc:iiop:355cxyz.com/Prod/cTradingService", orb);
+         corbalocT("corbaloc:iiop:2.7@255bxyz.com/Prod/bTradingService", orb);
+         corbalocT("corbaloc:iiop:355cxyz.com:7777/Prod/cTradingService", orb);
+ 
+         corbalocT("corbaloc::556xyz.com:80/Dev/NameService", orb);
+         corbalocT("corbaloc:iiop:1.2@host1:3076/0", orb);
+ 
+         corbalocT("corbaloc:rir:/NameService", orb);
+         corbalocT("corbaloc:rir:/", orb);
+         corbalocT("corbaloc:rir:", orb);
+ 
+         corbalocT("corbaloc:rir:/NameService", orb);
+         corbalocT("corbaloc:rir:/", orb);
+         corbalocT("corbaloc:rir:", orb);
+ 
+         corbalocT("corbaloc::555xyz.com,:556xyz.com:80/Dev/NameService", orb);
+       }
+     catch (BAD_PARAM e)
+       {
+         e.printStackTrace(System.out);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NameTransformer.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NameTransformer.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NameTransformer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NameTransformer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,328 ----
+ /* NameTransformer.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.NamingService;
+ 
+ import org.omg.CORBA.IntHolder;
+ import org.omg.CosNaming.NameComponent;
+ import org.omg.CosNaming.NamingContextPackage.InvalidName;
+ 
+ import java.util.ArrayList;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * This class converts between string and array representations of the
+  * multi component object names.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NameTransformer
+ {
+   /**
+    * A string, indicating the escape character.
+    */
+   public static final String ESCAPE = "\\";
+ 
+   /**
+    * Convert the string name representation into the array name
+    * representation. See {@link #toString(NameComponent)} for the
+    * description of this format.
+    *
+    * @param name the string form of the name.
+    *
+    * @return the array form of the name.
+    *
+    * @throws InvalidName if the name cannot be parsed.
+    */
+   public NameComponent[] toName(String a_name)
+                          throws InvalidName
+   {
+     ArrayList components = new ArrayList();
+     StringTokenizer st = new StringTokenizer(a_name, "./\\", true);
+ 
+     String id;
+     String kind;
+     String next;
+ 
+     // Create the buffer array, reserving the last element for null.
+     String[] n = new String[ st.countTokens() + 1 ];
+ 
+     int pp = 0;
+     while (st.hasMoreTokens())
+       n [ pp++ ] = st.nextToken();
+ 
+     IntHolder p = new IntHolder();
+ 
+     NameComponent node = readNode(p, n);
+ 
+     while (node != null)
+       {
+         components.add(node);
+         node = readNode(p, n);
+       }
+ 
+     NameComponent[] name = new NameComponent[ components.size() ];
+     for (int i = 0; i < name.length; i++)
+       {
+         name [ i ] = (NameComponent) components.get(i);
+       }
+ 
+     NameValidator.check(name);
+ 
+     return name;
+   }
+ 
+   /**
+    * Converts the name into its string representation, as defined in
+    * the specification CORBA naming service.
+    *
+    * A string representation for the name consists of the name components,
+    * separated by a slash '/' character (for example, 'a/b/c'). If the
+    * {@link NameComponent#kind} field is  not empty, it is given after
+    * period ('.'), for example 'a.b/c.d/.' .
+    * The period alone represents node where part where both
+    * {@link NameComponent#kind} and {@link NameComponent#id} are empty strings.
+    *
+    * If slash or dot are part of the name, they are escaped by backslash ('\').
+    * If the backslash itself is part of the name, it is doubled.
+    *
+    * @param a_name a name to convert.
+    * @return a string representation.
+    */
+   public String toString(NameComponent[] a_name)
+                   throws InvalidName
+   {
+     NameValidator.check(a_name);
+ 
+     StringBuffer b = new StringBuffer();
+ 
+     NameComponent n;
+ 
+     for (int ni = 0; ni < a_name.length; ni++)
+       {
+         n = a_name [ ni ];
+         appEscaping(b, n.id);
+         if (n.kind.length() > 0)
+           {
+             b.append('.');
+             appEscaping(b, n.kind);
+           }
+ 
+         if (ni < a_name.length - 1)
+           b.append('/');
+       }
+     return b.toString();
+   }
+ 
+   /**
+    * Append the contents of the string to this
+    * string buffer, inserting the escape sequences, where required.
+    *
+    * @param b a buffer to append the contents to.
+    * @param s a string to append.
+    */
+   private void appEscaping(StringBuffer b, String s)
+   {
+     char c;
+     for (int i = 0; i < s.length(); i++)
+       {
+         c = s.charAt(i);
+         switch (c)
+           {
+             case '.' :
+             case '/' :
+             case '\\' :
+               b.append('\\');
+               b.append(c);
+               break;
+ 
+             default :
+               b.append(c);
+               break;
+           }
+       }
+   }
+ 
+   /**
+    * Assert the end of the current name component.
+    */
+   private void assertEndOfNode(IntHolder p, String[] t)
+                         throws InvalidName
+   {
+     if (t [ p.value ] != null)
+       if (!t [ p.value ].equals("/"))
+         throw new InvalidName("End of node expected at token " + p.value);
+   }
+ 
+   /**
+    * Read the named component node. After reading the current positon
+    * advances to the beginning of the next node in an array.
+    *
+    * @param p the current position being wrapped inside the passed
+    * IntHolder.
+    *
+    * @param t the text buffer.
+    *
+    * @return the created node.
+    */
+   private NameComponent readNode(IntHolder p, String[] t)
+                           throws InvalidName
+   {
+     // End of stream has been reached.
+     if (t [ p.value ] == null)
+       return null;
+ 
+     NameComponent n = new NameComponent();
+ 
+     if (t [ p.value ].equals("."))
+       {
+         // The 'id' is missing, but the 'kind' may follow.
+         n.id = "";
+         p.value++;
+         n.kind = readPart(p, t);
+         assertEndOfNode(p, t);
+         if (t [ p.value ] != null)
+           p.value++;
+       }
+     else if (t [ p.value ].equals("/"))
+       {
+         // This is not allowed here and may happen only
+         // on two subsequent slashes.
+         throw new InvalidName("Unexpected '/' token " + p.value);
+       }
+     else
+       {
+         n.id = readPart(p, t);
+ 
+         // If some chars follow the id.
+         if (t [ p.value ] != null)
+           {
+             // Dot means that the kind part follows
+             if (t [ p.value ].equals("."))
+               {
+                 p.value++;
+                 n.kind = readPart(p, t);
+                 assertEndOfNode(p, t);
+                 if (t [ p.value ] != null)
+                   p.value++;
+               }
+ 
+             // The next name component follows - advance to
+             // the beginning of the next name component.
+             else if (t [ p.value ].equals("/"))
+               {
+                 n.kind = "";
+                 p.value++;
+               }
+             else
+               throw new InvalidName("Unexpected '" + t [ p.value ] +
+                                        "' at token " + p.value
+                                       );
+           }
+         else
+ 
+           // Id, and then end of sequence.
+           n.kind = "";
+       }
+ 
+     return n;
+   }
+ 
+   /**
+    * Read the name part (id or kind).
+    *
+    * @param p the current position. After reading, advances
+    * to the beginning of the next name fragment.
+    *
+    * @param t the string buffer.
+    *
+    * @return the name part with resolved escape sequences.
+    */
+   private String readPart(IntHolder p, String[] t)
+   {
+     StringBuffer part = new StringBuffer();
+ 
+     while (t [ p.value ] != null && !t [ p.value ].equals(".") &&
+            !t [ p.value ].equals("/")
+           )
+       {
+         if (t [ p.value ].equals(ESCAPE))
+           {
+             p.value++;
+             part.append(t [ p.value ]);
+           }
+         else
+           part.append(t [ p.value ]);
+ 
+         p.value++;
+       }
+ 
+     return part.toString();
+   }
+ 
+   public static void main(String[] args)
+   {
+     NameComponent a = new NameComponent("a", "ak");
+     NameComponent b = new NameComponent("b/z", "b.k");
+     NameComponent c = new NameComponent("c", "");
+ 
+     NameTransformer sn = new NameTransformer();
+ 
+     try
+       {
+         String s = sn.toString(new NameComponent[] { a, b, c });
+         System.out.println(s);
+ 
+         //NameComponent[] k = toName("a.k/b.k2/c/d/.");
+         //NameComponent[] k = toName("a.bc/.b/c.x");
+ 
+         NameComponent[] k = sn.toName(s);
+         System.out.println("ToString");
+ 
+         for (int i = 0; i < k.length; i++)
+           {
+             System.out.println(k [ i ].id + ":" + k [ i ].kind);
+           }
+       }
+     catch (InvalidName ex)
+       {
+         ex.printStackTrace();
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NameValidator.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NameValidator.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NameValidator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NameValidator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* NameValidator.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.NamingService;
+ 
+ 
+ import org.omg.CosNaming.NameComponent;
+ import org.omg.CosNaming.NamingContextPackage.InvalidName;
+ 
+ /**
+  * Checks the given name for validity.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NameValidator
+ {
+   /**
+    * Check the given name. This method must be package level, as it is
+    * not defined in the API.
+    *
+    * @param name the name to check.
+    *
+    * @throws InvalidName if the given name is not valid.
+    */
+   public static void check(NameComponent[] name)
+              throws InvalidName
+   {
+     if (name == null)
+       throw new InvalidName("name=null");
+ 
+     if (name.length == 0)
+       throw new InvalidName("name.length=0");
+ 
+     for (int i = 0; i < name.length; i++)
+       {
+         if (name [ i ] == null)
+           throw new InvalidName("name[" + i + "]=null");
+         if (name [ i ].id == null)
+           throw new InvalidName("name[" + i + "].id=null");
+         if (name [ i ].kind == null)
+           throw new InvalidName("name[" + i + "].kind=null");
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NamingMap.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NamingMap.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NamingMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NamingMap.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,187 ----
+ /* NamingMap.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.NamingService;
+ 
+ import org.omg.CosNaming.NameComponent;
+ import org.omg.CosNaming.NamingContextPackage.AlreadyBound;
+ import org.omg.CosNaming.NamingContextPackage.InvalidName;
+ 
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.TreeMap;
+ 
+ /**
+  * The Naming Map maps the single names components into associated objects or
+  * naming contexts.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NamingMap
+ {
+   /**
+    * The actual map.
+    */
+   private final TreeMap map;
+ 
+   /**
+    * Creates an instance of the naming map, intialising the comparator
+    * to the {@link cmpNameComparator}.
+    */
+   public NamingMap()
+   {
+     map = new TreeMap(NameComponentComparator.singleton);
+   }
+ 
+   /**
+    * Put the given CORBA object, specifying the given name as a key.
+    * If the entry with the given name already exists, or if the given
+    * object is already mapped under another name, the
+    * {@link AlreadyBound} exception will be thrown.
+    *
+    * @param name the name
+    * @param object the object
+    */
+   public void bind(NameComponent name, org.omg.CORBA.Object object)
+             throws AlreadyBound, InvalidName
+   {
+     if (containsKey(name))
+       {
+         Object x = get(name);
+ 
+         // Do not throw an exception if the same object is named by
+         // the same name.
+         if (x.equals(object))
+           throw new AlreadyBound("The name is in use for another object");
+       }
+     else
+       {
+         if (containsValue(object))
+           throw new AlreadyBound("Tha object has another name");
+       }
+   }
+ 
+   /**
+    * Checks if this map contains the definition of the given name.
+    *
+    * @param key the name to check.
+    */
+   public boolean containsKey(NameComponent key)
+   {
+     return map.containsKey(key);
+   }
+ 
+   /**
+    * Checks if this map contains the definition of the given object.
+    *
+    * @param object the object to check.
+    */
+   public boolean containsValue(org.omg.CORBA.Object object)
+   {
+     return map.containsValue(object);
+   }
+ 
+   /**
+    * Returns the map entry set.
+    *
+    * @return the map entry set, containing the instances of the
+    * Map.Entry.
+    */
+   public Set entries()
+   {
+     return map.entrySet();
+   }
+ 
+   /**
+    * Get the CORBA object, associated with the given name.
+    *
+    * @param name the name.
+    *
+    * @return the associated object, null if none.
+    */
+   public org.omg.CORBA.Object get(NameComponent name)
+   {
+     return (org.omg.CORBA.Object) map.get(name);
+   }
+ 
+   /**
+    * Put the given CORBA object, specifying the given name as a key.
+    * Remove all pre - existing mappings for the given name and object.
+    *
+    * @param name the name.
+    * @param object
+    */
+   public void rebind(NameComponent name, org.omg.CORBA.Object object)
+               throws InvalidName
+   {
+     // Remove the existing mapping for the given name, if present.
+     remove(name);
+ 
+     Iterator iter = entries().iterator();
+     Map.Entry item;
+ 
+     // Remove the existing mapping for the given object, if present.
+     while (iter.hasNext())
+       {
+         item = (Map.Entry) iter.next();
+         if (item.getValue().equals(object))
+           iter.remove();
+       }
+ 
+     map.put(name, object);
+   }
+ 
+   /**
+    * Removes the given name, if present.
+    *
+    * @param name a name to remove.
+    */
+   public void remove(NameComponent name)
+   {
+     map.remove(name);
+   }
+ 
+   /**
+    * Get the size of the map.
+    */
+   public int size()
+   {
+     return map.size();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NamingServiceTransient.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NamingServiceTransient.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/NamingServiceTransient.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/NamingServiceTransient.java	Mon Feb  6 22:41:34 2006
***************
*** 0 ****
--- 1,164 ----
+ /* NamingServiceTransient.java --
+    Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.NamingService;
+ 
+ import gnu.CORBA.OrbFunctional;
+ import gnu.CORBA.IOR;
+ 
+ import org.omg.CosNaming.NamingContextExt;
+ 
+ import java.io.FileOutputStream;
+ import java.io.PrintStream;
+ import java.io.UnsupportedEncodingException;
+ 
+ /**
+  * The server for the gnu classpath naming service. This is an executable class
+  * that must be started to launch the GNU Classpath CORBA transient naming
+  * service.
+  * 
+  * GNU Classpath currently works with this naming service and is also
+  * interoperable with the Sun Microsystems naming services from releases 1.3 and
+  * 1.4, both transient <i>tnameserv</i> and persistent <i>orbd</i>.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class NamingServiceTransient
+ {
+   /**
+    * The default port (900), on that the naming service starts if no
+    * -ORBInitialPort is specified in the command line.
+    */
+   public static final int PORT = 900;
+ 
+   /**
+    * Get the object key for the naming service. The default key is the string
+    * "NameService" in ASCII.
+    * 
+    * @return the byte array.
+    */
+   public static byte[] getDefaultKey()
+   {
+     try
+       { // NameService
+         return "NameService".getBytes("UTF-8");
+       }
+     catch (UnsupportedEncodingException ex)
+       {
+         throw new InternalError("UTF-8 unsupported");
+       }
+   }
+ 
+   /**
+    * Start the naming service on the current host at the given port. The
+    * parameter -org.omg.CORBA.ORBInitialPort NNN or -ORBInitialPort NNN, if
+    * present, specifies the port, on that the service must be started. If this
+    * key is not specified, the service starts at the port 900.
+    * 
+    * The parameter -ior FILE_NAME, if present, forces to store the ior string of
+    * this naming service to the specified file.
+    * 
+    * @param args the parameter string.
+    */
+   public static void main(String[] args)
+   {
+     int port = PORT;
+     String iorf = null;
+     try
+       {
+         // Create and initialize the ORB
+         final OrbFunctional orb = new OrbFunctional();
+ 
+         if (args.length > 1)
+           for (int i = 0; i < args.length - 1; i++)
+             {
+               if (args[i].endsWith("ORBInitialPort"))
+                 port = Integer.parseInt(args[i + 1]);
+ 
+               if (args[i].equals("-ior"))
+                 iorf = args[i + 1];
+             }
+ 
+         OrbFunctional.setPort(port);
+ 
+         // Create the servant and register it with the ORB
+         NamingContextExt namer = new Ext(new TransientContext());
+ 
+         // Case with the key "NameService".
+         orb.connect(namer, "NameService".getBytes());
+ 
+         // Storing the IOR reference.
+         String ior = orb.object_to_string(namer);
+         IOR iorr = IOR.parse(ior);
+         if (iorf != null)
+           {
+             FileOutputStream f = new FileOutputStream(iorf);
+             PrintStream p = new PrintStream(f);
+             p.print(ior);
+             p.close();
+           }
+ 
+         System.out.println("GNU Classpath transient naming service "
+           + "started at " + iorr.Internet.host + ":" + iorr.Internet.port
+           + " key 'NameService'.\n\n"
+           + "Copyright (C) 2006 Free Software Foundation\n"
+           + "This tool comes with ABSOLUTELY NO WARRANTY. "
+           + "This is free software, and you are\nwelcome to "
+           + "redistribute it under conditions, defined in "
+           + "GNU Classpath license.\n\n" + ior);
+ 
+         new Thread()
+         {
+           public void run()
+           {
+             // Wait for invocations from clients.
+             orb.run();
+           }
+         }.start();
+       }
+     catch (Exception e)
+       {
+         System.err.println("ERROR: " + e);
+         e.printStackTrace(System.out);
+       }
+ 
+     // Restore the default value for allocating ports for the subsequent
+     // objects.
+     OrbFunctional.setPort(OrbFunctional.DEFAULT_INITIAL_PORT);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/TransientContext.java gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/TransientContext.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/NamingService/TransientContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/NamingService/TransientContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,416 ----
+ /* nContext.java -- implementation of NamingContext
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.NamingService;
+ 
+ import org.omg.CORBA.Object;
+ import org.omg.CosNaming.Binding;
+ import org.omg.CosNaming.BindingIteratorHolder;
+ import org.omg.CosNaming.BindingListHolder;
+ import org.omg.CosNaming.BindingType;
+ import org.omg.CosNaming.NameComponent;
+ import org.omg.CosNaming.NamingContext;
+ import org.omg.CosNaming.NamingContextOperations;
+ import org.omg.CosNaming.NamingContextPackage.AlreadyBound;
+ import org.omg.CosNaming.NamingContextPackage.CannotProceed;
+ import org.omg.CosNaming.NamingContextPackage.InvalidName;
+ import org.omg.CosNaming.NamingContextPackage.NotEmpty;
+ import org.omg.CosNaming.NamingContextPackage.NotFound;
+ import org.omg.CosNaming.NamingContextPackage.NotFoundReason;
+ import org.omg.CosNaming._NamingContextImplBase;
+ 
+ import java.util.Iterator;
+ import java.util.Map;
+ 
+ /**
+  * This class implements the transient naming service, defined by
+  * {@link NamingContex}. The 'transient' means that the service does
+  * not store its state into the persistent memory. If the service is
+  * restarted, the named objects must be re-registered again.
+  *
+  * TODO Write the persistent naming service.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class TransientContext
+   extends _NamingContextImplBase
+   implements NamingContext, NamingContextOperations
+ {
+   /**
+    * The already named contexts.
+    */
+   protected final NamingMap named_contexts = new NamingMap();
+ 
+   /**
+    * The already named objects.
+    */
+   protected final NamingMap named_objects = new NamingMap();
+ 
+   /**
+    * Gives the object a name, valid in this context.
+    *
+    * @param a_name the name, being given to the object.
+    * @param an_object the object, being named.
+    *
+    * @throws AlreadyBound if the object is already named in this context.
+    * @throws InvalidName if the name has zero length or otherwise invalid.
+    */
+   public void bind(NameComponent[] a_name, Object an_object)
+             throws NotFound, CannotProceed, InvalidName, AlreadyBound
+   {
+     if (a_name.length == 1)
+       named_objects.bind(a_name [ 0 ], an_object);
+     else
+       {
+         NamingContext context =
+           (NamingContext) named_contexts.get(a_name [ 0 ]);
+         context.bind(getSuffix(a_name), an_object);
+       }
+   }
+ 
+   /**
+    * Gives a child context name, valid in this context.
+    *
+    * @param a_name the name, being given to the child context.
+    * @param a_context the child context being named.
+    *
+    * @throws AlreadyBound if the child context is already named in
+    * the current context.
+    */
+   public void bind_context(NameComponent[] a_name, NamingContext a_context)
+                     throws NotFound, CannotProceed, InvalidName, AlreadyBound
+   {
+     if (a_name.length == 1)
+       named_contexts.bind(a_name [ 0 ], a_context);
+     else
+       {
+         NamingContext context =
+           (NamingContext) named_contexts.get(a_name [ 0 ]);
+         context.bind_context(getSuffix(a_name), a_context);
+       }
+   }
+ 
+   /**
+    * Create a new context and give it a given name (bound it)
+    * in the current context.
+    *
+    * The context being created is returned by calling
+    * {@link #new_context()}.
+    *
+    * @param a_name the name being given to the new context.
+    *
+    * @return the newly created context.
+    *
+    * @throws AlreadyBound if the name is already in use.
+    * @throws InvalidName if the name has zero length or otherwise invalid.
+    */
+   public NamingContext bind_new_context(NameComponent[] a_name)
+                                  throws NotFound, AlreadyBound, CannotProceed,
+                                         InvalidName
+   {
+     if (named_contexts.containsKey(a_name [ 0 ]) ||
+         named_objects.containsKey(a_name [ 0 ])
+        )
+       throw new AlreadyBound();
+ 
+     NamingContext child = new_context();
+     bind_context(a_name, child);
+     return child;
+   }
+ 
+   /**
+    * Destroy this context (must be empty).
+    * @throws NotEmpty if the context being destroyed is not empty.
+    */
+   public void destroy()
+                throws NotEmpty
+   {
+     if (named_contexts.size() > 0 || named_objects.size() > 0)
+       throw new NotEmpty();
+   }
+ 
+   /**
+    * Iterate over all bindings, defined in this namind context.
+    *
+    * @param amount the maximal number of context to return in the
+    * holder a_list. The remaining bindings are accessible via iterator
+    * an_iter. If the parameter amount is zero, all bindings are accessed only
+    * via this iterator.
+    *
+    * This implementation list contexts first, then objects.
+    *
+    * @param a_list the holder, where the returned bindigs are stored.
+    * @param an_iter the iterator that can be used to access the remaining
+    * bindings.
+    */
+   public void list(int amount, BindingListHolder a_list,
+                    BindingIteratorHolder an_iter
+                   )
+   {
+     int nb = named_contexts.size() + named_objects.size();
+     int nl = nb;
+     if (nl > amount)
+       nl = amount;
+ 
+     a_list.value = new Binding[ nl ];
+ 
+     Iterator contexts = named_contexts.entries().iterator();
+     Iterator objects = named_objects.entries().iterator();
+ 
+     // Create a binding list.
+     for (int i = 0; i < nl; i++)
+       {
+         if (contexts.hasNext())
+           a_list.value [ i ] = mkBinding(contexts.next(), BindingType.ncontext);
+         else if (objects.hasNext())
+           a_list.value [ i ] = mkBinding(objects.next(), BindingType.nobject);
+         else
+           throw new InternalError();
+       }
+ 
+     // Create an iterator.
+     Binding[] remainder = new Binding[ nb - nl ];
+     int p = 0;
+ 
+     while (contexts.hasNext())
+       remainder [ p++ ] = mkBinding(contexts.next(), BindingType.ncontext);
+ 
+     while (objects.hasNext())
+       remainder [ p++ ] = mkBinding(objects.next(), BindingType.nobject);
+ 
+     Binding_iterator_impl bit = new Binding_iterator_impl(remainder);
+     _orb().connect(bit);
+     an_iter.value = bit;
+   }
+ 
+   /**
+    * Creates a new naming context, not bound to any name.
+    */
+   public NamingContext new_context()
+   {
+     Ext context = new Ext(new TransientContext());
+ 
+     // Connect the context to the current ORB:
+     _orb().connect(context);
+     return context;
+   }
+ 
+   /**
+    * Names or renames the object.
+    *
+    * @param a_name the new name, being given to the object
+    * in the scope of the current context. If the object is already
+    * named in this context, it is renamed.
+    *
+    * @param an_object the object, being named.
+    *
+    * @throws InvalidName if the name has zero length or otherwise invalid.
+    */
+   public void rebind(NameComponent[] a_name, Object an_object)
+               throws NotFound, CannotProceed, InvalidName
+   {
+     if (a_name.length == 1)
+       named_objects.rebind(a_name [ 0 ], an_object);
+     else
+       {
+         NamingContext context =
+           (NamingContext) named_contexts.get(a_name [ 0 ]);
+         context.rebind(getSuffix(a_name), an_object);
+       }
+   }
+ 
+   /**
+    * Names or renames the child context.
+    * If the child context is already named in
+    * the current context, it is renamed. The the name being given is in
+    * use, the old meaning of the name is discarded.
+    *
+    * @param a_name the name, being given to the child context in the scope
+    * of the current context.
+    *
+    * @param a_context the child context being named.
+    *
+    * @throws InvalidName if the name has zero length or otherwise invalid.
+    */
+   public void rebind_context(NameComponent[] a_name, NamingContext a_context)
+                       throws NotFound, CannotProceed, InvalidName
+   {
+     if (a_name.length == 1)
+       named_contexts.rebind(a_name [ 0 ], a_context);
+     else
+       {
+         NamingContext context =
+           (NamingContext) named_contexts.get(a_name [ 0 ]);
+         context.rebind_context(getSuffix(a_name), a_context);
+       }
+   }
+ 
+   /**
+    * Get the object, bound to the specified name in this
+    * context. The given object must match the bound
+    * name.
+    *
+    * This implementation resolves the names as defined in specification
+    * of the CORBA naming service. This means, if the beginning of the
+    * name can be resolved to some naming context, the request is
+    * forwarded to this context, passing the unresolved name part as a
+    * parameter. In this way, it is possible to have a hierarchy of the
+    * naming services. The central services resolve the the beginning
+    * of the name. The local services resolve the remaining nodes of the
+    * name that may be relevant to some local details. It can be three or
+    * more ranks of the naming services.
+    *
+    * @param a_name the object name.
+    *
+    * @return the object, matching this name. The client
+    * usually casts or narrows (using the helper) the returned value
+    * to the more specific type.
+    *
+    * @throws NotFound if the name cannot be resolved.
+    * @throws InvalidName if the name has zero length or otherwise invalid.
+    */
+   public Object resolve(NameComponent[] a_name)
+                  throws NotFound, CannotProceed, InvalidName
+   {
+     NameValidator.check(a_name);
+ 
+     if (a_name.length > 1)
+       return resolveSubContext(a_name);
+     else
+       {
+         // A single node name.
+         org.omg.CORBA.Object object;
+ 
+         object = named_objects.get(a_name [ 0 ]);
+         if (object != null)
+           return object;
+ 
+         object = named_contexts.get(a_name [ 0 ]);
+         if (object != null)
+           return object;
+       }
+ 
+     throw new NotFound(NotFoundReason.missing_node, a_name);
+   }
+ 
+   /**
+    * Removes the name from the binding context.
+    *
+    * @param a_name a name to remove.
+    *
+    * @throws InvalidName if the name has zero length or otherwise invalid.
+    */
+   public void unbind(NameComponent[] a_name)
+               throws NotFound, CannotProceed, InvalidName
+   {
+     NameValidator.check(a_name);
+ 
+     // Single node name - handle it.
+     if (a_name.length == 1)
+       {
+         if (named_objects.containsKey(a_name [ 0 ]))
+           named_objects.remove(a_name [ 0 ]);
+         else if (named_contexts.containsKey(a_name [ 0 ]))
+           named_contexts.remove(a_name [ 0 ]);
+         else
+           throw new NotFound(NotFoundReason.missing_node, a_name);
+       }
+     else
+       {
+         // Handle the first node and forward the command.
+         NamingContext subcontext =
+           (NamingContext) named_contexts.get(a_name [ 0 ]);
+ 
+         if (subcontext == null)
+           throw new NotFound(NotFoundReason.missing_node, a_name);
+ 
+         subcontext.unbind(getSuffix(a_name));
+       }
+   }
+ 
+   /**
+    * Get the name suffix, discarding the first member.
+    */
+   private NameComponent[] getSuffix(NameComponent[] a_name)
+   {
+     NameComponent[] suffix = new NameComponent[ a_name.length - 1 ];
+     System.arraycopy(a_name, 1, suffix, 0, suffix.length);
+     return suffix;
+   }
+ 
+   /**
+    * Create a binding.
+    *
+    * @param entry the entry, defining the bound object.
+    * @param type the binding type.
+    * @return the created binding.
+    */
+   private Binding mkBinding(java.lang.Object an_entry, BindingType type)
+   {
+     Map.Entry entry = (Map.Entry) an_entry;
+     Binding b = new Binding();
+ 
+     // The name component has always only one node (the current context)
+     b.binding_name = new NameComponent[] { (NameComponent) entry.getKey() };
+     b.binding_type = type;
+     return b;
+   }
+ 
+   /**
+    * Find the context, bound to the first name of the given
+    * name, and pass the remainder (without the first node)
+    * of the name for that context to resolve.
+    *
+    * @param name the name to resolve.
+    *
+    * @return the resolved context
+    */
+   private Object resolveSubContext(NameComponent[] a_name)
+                             throws NotFound, CannotProceed, InvalidName
+   {
+     // A multiple node name.
+     // This context resolves the first node only.
+     NamingContext context = (NamingContext) named_contexts.get(a_name [ 0 ]);
+     if (context == null)
+       throw new NotFound(NotFoundReason.missing_node, a_name);
+ 
+     NameComponent[] suffix = getSuffix(a_name);
+ 
+     return context.resolve(suffix);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/ObjectCreator.java gcc-4.1.0/libjava/classpath/gnu/CORBA/ObjectCreator.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/ObjectCreator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/ObjectCreator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,590 ----
+ /* ObjectCreator.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.UnknownExceptionCtxHandler;
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.CDR.AbstractCdrInput;
+ import gnu.CORBA.GIOP.ServiceContext;
+ import gnu.CORBA.typecodes.RecordTypeCode;
+ import gnu.classpath.VMStackWalker;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.CompletionStatusHelper;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.UNKNOWN;
+ import org.omg.CORBA.UserException;
+ import org.omg.CORBA.portable.IDLEntity;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ValueBase;
+ 
+ import java.lang.reflect.Method;
+ import java.util.Map;
+ import java.util.WeakHashMap;
+ 
+ import javax.rmi.CORBA.Util;
+ 
+ /**
+  * Creates java objects from the agreed IDL names for the simple case when the
+  * CORBA object is directly mapped into the locally defined java class.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ObjectCreator
+ {
+   /**
+    * The standard OMG prefix.
+    */
+   public static final String OMG_PREFIX = "omg.org/";
+ 
+   /**
+    * The standard java prefix.
+    */
+   public static final String JAVA_PREFIX = "org.omg.";
+ 
+   /**
+    * The prefix for classes that are placed instide the gnu.CORBA namespace.
+    */
+   public static final String CLASSPATH_PREFIX = "gnu.CORBA.";
+ 
+   /**
+    * Maps classes to they IDL or RMI names. Computing RMI name is an expensive
+    * operations, so frequently used RMI keys are reused. The map must be weak to
+    * ensure that the class can be unloaded, when applicable.
+    */
+   public static Map m_names = new WeakHashMap();
+ 
+   /**
+    * Maps IDL strings into known classes. The map must be weak to ensure that
+    * the class can be unloaded, when applicable.
+    */
+   public static Map m_classes = new WeakHashMap();
+ 
+   /**
+    * Maps IDL types to they helpers.
+    */
+   public static Map m_helpers = new WeakHashMap();
+ 
+   /**
+    * Try to instantiate an object with the given IDL name. The object must be
+    * mapped to the local java class. The omg.org domain must be mapped into the
+    * object in either org/omg or gnu/CORBA namespace.
+    * 
+    * @param IDL name
+    * @return instantiated object instance or null if no such available.
+    */
+   public static java.lang.Object createObject(String idl, String suffix)
+   {
+     synchronized (m_classes)
+       {
+         Class known = (Class) (suffix == null ? m_classes.get(idl)
+           : m_classes.get(idl + 0xff + suffix));
+         Object object;
+ 
+         if (known != null)
+           {
+             try
+               {
+                 return known.newInstance();
+               }
+             catch (Exception ex)
+               {
+                 RuntimeException rex = new RuntimeException(idl + " suffix "
+                   + suffix, ex);
+                 throw rex;
+               }
+           }
+         else
+           {
+             if (suffix == null)
+               suffix = "";
+             try
+               {
+                 known = forName(toClassName(JAVA_PREFIX, idl) + suffix);
+                 object = known.newInstance();
+               }
+             catch (Exception ex)
+               {
+                 try
+                   {
+                     known = forName(toClassName(CLASSPATH_PREFIX, idl)
+                       + suffix);
+                     object = known.newInstance();
+                   }
+                 catch (Exception exex)
+                   {
+                     return null;
+                   }
+               }
+             m_classes.put(idl + 0xff + suffix, known);
+             return object;
+           }
+       }
+   }
+ 
+   /**
+    * Read the system exception from the given stream.
+    * 
+    * @param input the CDR stream to read from.
+    * @param contexts the service contexts in request/reply header/
+    * 
+    * @return the exception that has been stored in the stream (IDL name, minor
+    * code and completion status).
+    */
+   public static SystemException readSystemException(InputStream input,
+     ServiceContext[] contexts)
+   {
+     SystemException exception;
+ 
+     String idl = input.read_string();
+     int minor = input.read_ulong();
+     CompletionStatus completed = CompletionStatusHelper.read(input);
+ 
+     try
+       {
+         exception = (SystemException) createObject(idl, null);
+         exception.minor = minor;
+         exception.completed = completed;
+       }
+     catch (Exception ex)
+       {
+         UNKNOWN u = new UNKNOWN("Unsupported system exception " + idl, minor,
+           completed);
+         u.initCause(ex);
+         throw u;
+       }
+ 
+     try
+       {
+         // If UnknownExceptionInfo is present in the contexts, read it and
+         // set as a cause of this exception.
+         ServiceContext uEx = ServiceContext.find(
+           ServiceContext.UnknownExceptionInfo, contexts);
+ 
+         if (uEx != null)
+           {
+             BufferredCdrInput in = new BufferredCdrInput(uEx.context_data);
+             in.setOrb(in.orb());
+             if (input instanceof AbstractCdrInput)
+               {
+                 ((AbstractCdrInput) input).cloneSettings(in);
+               }
+ 
+             Throwable t = UnknownExceptionCtxHandler.read(in, contexts);
+             exception.initCause(t);
+           }
+       }
+     catch (Exception ex)
+       {
+         // Unsupported context format. Do not terminate as the user program may
+         // not need it.
+       }
+ 
+     return exception;
+   }
+ 
+   /**
+    * Reads the user exception, having the given Id, from the input stream. The
+    * id is expected to be in the form like
+    * 'IDL:test/org/omg/CORBA/ORB/communication/ourUserException:1.0'
+    * 
+    * @param idl the exception idl name.
+    * @param input the stream to read from.
+    * 
+    * @return the loaded exception.
+    * @return null if the helper class cannot be found.
+    */
+   public static UserException readUserException(String idl, InputStream input)
+   {
+     try
+       {
+         Class helperClass = findHelper(idl);
+ 
+         Method read = helperClass.getMethod("read",
+           new Class[] { org.omg.CORBA.portable.InputStream.class });
+ 
+         return (UserException) read.invoke(null, new Object[] { input });
+       }
+     catch (MARSHAL mex)
+       {
+         // This one is ok to throw
+         throw mex;
+       }
+     catch (Exception ex)
+       {
+         ex.printStackTrace();
+         return null;
+       }
+   }
+ 
+   /**
+    * Gets the helper class name from the string like
+    * 'IDL:test/org/omg/CORBA/ORB/communication/ourUserException:1.0'
+    * 
+    * @param IDL the idl name.
+    */
+   public static String toHelperName(String IDL)
+   {
+     String s = IDL;
+     int a = s.indexOf(':') + 1;
+     int b = s.lastIndexOf(':');
+ 
+     s = IDL.substring(a, b);
+ 
+     if (s.startsWith(OMG_PREFIX))
+       s = JAVA_PREFIX + s.substring(OMG_PREFIX.length());
+ 
+     return s.replace('/', '.') + "Helper";
+   }
+ 
+   /**
+    * Writes the system exception data to CDR output stream.
+    * 
+    * @param output a stream to write data to.
+    * @param ex an exception to write.
+    */
+   public static void writeSystemException(OutputStream output,
+     SystemException ex)
+   {
+     String exIDL = getRepositoryId(ex.getClass());
+     output.write_string(exIDL);
+     output.write_ulong(ex.minor);
+     CompletionStatusHelper.write(output, ex.completed);
+   }
+ 
+   /**
+    * Converts the given IDL name to class name.
+    * 
+    * @param IDL the idl name.
+    * 
+    */
+   protected static String toClassName(String prefix, String IDL)
+   {
+     String s = IDL;
+     int a = s.indexOf(':') + 1;
+     int b = s.lastIndexOf(':');
+ 
+     s = IDL.substring(a, b);
+ 
+     if (s.startsWith(OMG_PREFIX))
+       s = prefix + s.substring(OMG_PREFIX.length());
+ 
+     return s.replace('/', '.');
+   }
+ 
+   /**
+    * Converts the given IDL name to class name and tries to load the matching
+    * class. The OMG prefix (omg.org) is replaced by the java prefix org.omg. No
+    * other prefixes are added.
+    * 
+    * @param IDL the idl name.
+    * 
+    * @return the matching class or null if no such is available.
+    */
+   public static Class Idl2class(String IDL)
+   {
+     synchronized (m_classes)
+       {
+         Class c = (Class) m_classes.get(IDL);
+ 
+         if (c != null)
+           return c;
+         else
+           {
+             String s = IDL;
+             int a = s.indexOf(':') + 1;
+             int b = s.lastIndexOf(':');
+ 
+             s = IDL.substring(a, b);
+ 
+             if (s.startsWith(OMG_PREFIX))
+               s = JAVA_PREFIX + s.substring(OMG_PREFIX.length());
+ 
+             String cn = s.replace('/', '.');
+ 
+             try
+               {
+                 c = forName(cn);
+                 m_classes.put(IDL, c);
+                 return c;
+               }
+             catch (ClassNotFoundException ex)
+               {
+                 return null;
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Converts the given IDL name to class name, tries to load the matching class
+    * and create an object instance with parameterless constructor. The OMG
+    * prefix (omg.org) is replaced by the java prefix org.omg. No other prefixes
+    * are added.
+    * 
+    * @param IDL the idl name.
+    * 
+    * @return instantiated object instance or null if such attempt was not
+    * successful.
+    */
+   public static java.lang.Object Idl2Object(String IDL)
+   {
+     Class cx = Idl2class(IDL);
+ 
+     try
+       {
+         if (cx != null)
+           return cx.newInstance();
+         else
+           return null;
+       }
+     catch (Exception ex)
+       {
+         return null;
+       }
+   }
+ 
+   /**
+    * Convert the class name to IDL or RMI name (repository id). If the class
+    * inherits from IDLEntity, ValueBase or SystemException, returns repository
+    * Id in the IDL:(..) form. If it does not, returns repository Id in the
+    * RMI:(..) form.
+    * 
+    * @param cx the class for that the name must be computed.
+    * 
+    * @return the idl or rmi name.
+    */
+   public static synchronized String getRepositoryId(Class cx)
+   {
+     String name = (String) m_names.get(cx);
+     if (name != null)
+       return name;
+ 
+     String cn = cx.getName();
+     if (!(IDLEntity.class.isAssignableFrom(cx)
+       || ValueBase.class.isAssignableFrom(cx) || SystemException.class.isAssignableFrom(cx)))
+       {
+         // Not an IDL entity.
+         name = Util.createValueHandler().getRMIRepositoryID(cx);
+       }
+     else
+       {
+         if (cn.startsWith(JAVA_PREFIX))
+           cn = OMG_PREFIX
+             + cn.substring(JAVA_PREFIX.length()).replace('.', '/');
+         else if (cn.startsWith(CLASSPATH_PREFIX))
+           cn = OMG_PREFIX
+             + cn.substring(CLASSPATH_PREFIX.length()).replace('.', '/');
+ 
+         name = "IDL:" + cn + ":1.0";
+       }
+     m_names.put(cx, name);
+     return name;
+   }
+ 
+   /**
+    * Insert the passed parameter into the given Any, assuming that the helper
+    * class is available. The helper class must have the "Helper" suffix and be
+    * in the same package as the class of the object being inserted.
+    * 
+    * @param into the target to insert.
+    * 
+    * @param object the object to insert. It can be any object as far as the
+    * corresponding helper is provided.
+    * 
+    * @return true on success, false otherwise.
+    */
+   public static boolean insertWithHelper(Any into, Object object)
+   {
+     try
+       {
+         String helperClassName = object.getClass().getName() + "Helper";
+         Class helperClass = forName(helperClassName);
+ 
+         Method insert = helperClass.getMethod("insert", new Class[] {
+           Any.class, object.getClass() });
+ 
+         insert.invoke(null, new Object[] { into, object });
+ 
+         return true;
+       }
+     catch (Exception exc)
+       {
+         // Failed due some reason.
+         return false;
+       }
+   }
+ 
+   /**
+    * Insert the system exception into the given Any.
+    */
+   public static boolean insertSysException(Any into, SystemException exception)
+   {
+     try
+       {
+         BufferedCdrOutput output = new BufferedCdrOutput();
+ 
+         String m_exception_id = getRepositoryId(exception.getClass());
+         output.write_string(m_exception_id);
+         output.write_ulong(exception.minor);
+         CompletionStatusHelper.write(output, exception.completed);
+ 
+         String name = getDefaultName(m_exception_id);
+ 
+         GeneralHolder h = new GeneralHolder(output);
+ 
+         into.insert_Streamable(h);
+ 
+         RecordTypeCode r = new RecordTypeCode(TCKind.tk_except);
+         r.setId(m_exception_id);
+         r.setName(name);
+         into.type(r);
+ 
+         return true;
+       }
+     catch (Exception ex)
+       {
+         ex.printStackTrace();
+         return false;
+       }
+   }
+ 
+   /**
+    * Get the type name from the IDL string.
+    */
+   public static String getDefaultName(String idl)
+   {
+     int f1 = idl.lastIndexOf("/");
+     int p1 = (f1 < 0) ? 0 : f1;
+     int p2 = idl.indexOf(":", p1);
+     if (p2 < 0)
+       p2 = idl.length();
+ 
+     String name = idl.substring(f1 + 1, p2);
+     return name;
+   }
+ 
+   /**
+    * Insert this exception into the given Any. On failure, insert the UNKNOWN
+    * exception.
+    */
+   public static void insertException(Any into, Throwable exception)
+   {
+     boolean ok = false;
+     if (exception instanceof SystemException)
+       ok = insertSysException(into, (SystemException) exception);
+     else if (exception instanceof UserException)
+       ok = insertWithHelper(into, exception);
+ 
+     if (!ok)
+       ok = insertSysException(into, new UNKNOWN());
+     if (!ok)
+       throw new InternalError("Exception wrapping broken");
+   }
+ 
+   /**
+    * Find helper for the class with the given name.
+    */
+   public static Class findHelper(String idl)
+   {
+     synchronized (m_helpers)
+       {
+         Class c = (Class) m_helpers.get(idl);
+         if (c != null)
+           return c;
+         try
+           {
+             String helper = toHelperName(idl);
+             c = forName(helper);
+ 
+             m_helpers.put(idl, c);
+             return c;
+           }
+         catch (Exception ex)
+           {
+             return null;
+           }
+       }
+   }
+   
+   /**
+    * Load the class with the given name. This method tries to use the context
+    * class loader first. If this fails, it searches for the suitable class
+    * loader in the caller stack trace. This method is a central point where all
+    * requests to find a class by name are delegated.
+    */
+   public static Class forName(String className) throws ClassNotFoundException
+   {
+     try
+       {
+         return Class.forName(className, true,
+                              Thread.currentThread().getContextClassLoader());
+       }
+     catch (ClassNotFoundException nex)
+       {
+         /**
+          * Returns the first user defined class loader on the call stack, or
+          * null when no non-null class loader was found.
+          */
+         Class[] ctx = VMStackWalker.getClassContext();
+         for (int i = 0; i < ctx.length; i++)
+           {
+             // Since we live in a class loaded by the bootstrap
+             // class loader, getClassLoader is safe to call without
+             // needing to be wrapped in a privileged action.
+             ClassLoader cl = ctx[i].getClassLoader();
+             try
+               {
+                 if (cl != null)
+                   return Class.forName(className, true, cl);
+               }
+             catch (ClassNotFoundException nex2)
+               {
+                 // Try next.
+               }
+           }
+       }
+     throw new ClassNotFoundException(className);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/OctetHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/OctetHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/OctetHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/OctetHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,129 ----
+ /* OctetHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.typecodes.PrimitiveTypeCode;
+ 
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ 
+ /**
+  * A holder for CORBA <code>octet</code> that is mapped into
+  * java <code>long</code>.
+  *
+  * The holders have several application areas. The end user usually
+  * sees them implementing CORBA methods where the primitive type
+  * is passed by reference. While CORBA (or, for example, C) supports
+  * this, the java does not and a wrapper class is required.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public final class OctetHolder
+   implements Streamable
+ {
+   /**
+    * The default type code for this holder.
+    */
+   private static final TypeCode t_octet =
+     new PrimitiveTypeCode(TCKind.tk_octet);
+ 
+   /**
+    * The <code>long</code> (CORBA <code>octet</code>) value,
+    * held by this OctetHolder.
+    */
+   public byte value;
+ 
+   /**
+    * Constructs an instance of OctetHolder,
+    * initializing {@link #value} to <code>0 </code>.
+    */
+   public OctetHolder()
+   {
+   }
+ 
+   /**
+    * Constructs an instance of OctetHolder,
+    * initializing {@link #value} to the given <code>octed</code> (byte).
+    *
+    * @param initial_value a value that will be assigned to the
+    * {@link #value} field.
+    */
+   public OctetHolder(byte initial_value)
+   {
+     value = initial_value;
+   }
+ 
+   /**
+    * Fill in the {@link value } field by reading the required data
+    * from the given stream. For <code>octet</code>, the functionality
+    * is delegated to
+    * {@link org.omg.CORBA.portable.InputStream#read_octet}.
+    *
+    * @param input the input stream to read from.
+    */
+   public void _read(InputStream input)
+   {
+     value = input.read_octet();
+   }
+ 
+   /**
+    * Returns the TypeCode, corresponding the CORBA type that is stored
+    * using this holder.
+    */
+   public TypeCode _type()
+   {
+     return t_octet;
+   }
+ 
+   /**
+    * Write the {@link value } field to the given stream.
+    * For <code>octet</code>, the functionality
+    * is delegated to
+    * {@link org.omg.CORBA.portable.OutputStream#write_octet(long) }.
+    *
+    * @param output the output stream to write into.
+    */
+   public void _write(OutputStream output)
+   {
+     output.write_octet(value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/OrbFocused.java gcc-4.1.0/libjava/classpath/gnu/CORBA/OrbFocused.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/OrbFocused.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/OrbFocused.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,375 ----
+ /* OrbFocused.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.Poa.ORB_1_4;
+ 
+ import org.omg.CORBA.BAD_INV_ORDER;
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.NO_RESOURCES;
+ import org.omg.CORBA.portable.InvokeHandler;
+ 
+ import java.applet.Applet;
+ import java.net.ServerSocket;
+ import java.util.Iterator;
+ import java.util.Properties;
+ import java.util.Random;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * This class implements the ORB that uses a single port or the restricted port
+  * range for all its objects. It is required to for use together with various
+  * firewalls that does not allow opening multiple randomly selected ports, as
+  * the defauld CORBA implementation used to do. The firewal must be configured
+  * to allow CORBA to work on one fixed port or (for better performance) on a
+  * small fixed range of ports. This does not restrict the maximal number of the
+  * connected objects as the objects can share the same port.
+  * 
+  * The used port or the used port range can be specified via property
+  * gnu.CORBA.ListenerPort. The value of this property is a single port or range
+  * of ports, boundary values (inclusive) being separeted by dash (for instance,
+  * "1245-1250").
+  * 
+  * It is possible to instantiate multiple instances of the focused ORBs and
+  * combine them with the ordinary ORBs. If you instantiate several instances of
+  * the focused ORBs on the same host, they used port sets should not overlap.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class OrbFocused
+   extends ORB_1_4
+ {
+   /**
+    * The name of the fixed port range property. The presence of this property
+    * indicates that the default focused ORB must be used.
+    */
+   public static final String LISTENER_PORT = "gnu.CORBA.ListenerPort";
+ 
+   /**
+    * The start of the range of the available ports, inclusive.
+    */
+   int m_ports_from = -1;
+ 
+   /**
+    * The end of the range of the available ports, inclusive.
+    */
+   int m_ports_to = -1;
+ 
+   /**
+    * The requests to port are served in parallel threads.
+    */
+   static final int PARALLEL = 0;
+ 
+   /**
+    * The requests to port are served in the same thread.
+    */
+   static final int SEQUENTIAL = 1;
+ 
+   /**
+    * The random number generator to get a random port in the valid range.
+    */
+   Random m_random = new Random();
+ 
+   /**
+    * Parse the "gnu.CORBA.ListenerPort" property and initialize the valid port
+    * set range.
+    */
+   public void setPortRange(String property)
+   {
+     int from, to;
+     try
+       {
+         StringTokenizer st = new StringTokenizer(property, " -");
+         if (st.countTokens() == 1)
+           from = to = Integer.parseInt(st.nextToken());
+         else
+           {
+             from = Integer.parseInt(st.nextToken());
+             to = Integer.parseInt(st.nextToken());
+             m_random = new Random();
+           }
+         setPortRange(from, to);
+       }
+     catch (Exception ex)
+       {
+         throw new BAD_PARAM("Unable to parse port range '" + property + "'");
+       }
+   }
+ 
+   /**
+    * Set the port range.
+    * 
+    * @param from - start of the port range, inclusive.
+    * @param to - end of the port range, inclusive.
+    */
+   public void setPortRange(int from, int to)
+   {
+     if (from < 0 || to < 0 || to < from)
+       throw new BAD_PARAM("Invalid range");
+     m_ports_from = from;
+     m_ports_to = to;
+   }
+ 
+   /**
+    * Get the port from the previously specified usage range.
+    */
+   int getPortFromRange(int attempt)
+   {
+     if (m_ports_from == m_ports_to)
+       return m_ports_from;
+     else if (m_ports_to - m_ports_from < RANDOM_PORT_ATTEMPTS)
+       return m_ports_from + (attempt % (m_ports_to - m_ports_from + 1));
+     else
+       return m_random.nextInt(m_ports_to - m_ports_from + 1) + m_ports_from;
+   }
+ 
+   /**
+    * Get the shared port server where the new object can be added. This may
+    * result reusing the existing server or instantiating a new server. If the
+    * new server is instantiated and the ORB is already running, the server is
+    * started.
+    */
+   protected portServer getPortServer(int type)
+   {
+     portServer p;
+ 
+     int n;
+     if (m_ports_from < m_ports_to)
+       n = RANDOM_PORT_ATTEMPTS;
+     else
+       n = 1;
+ 
+     Ports: for (int a = 0; a < n; a++)
+       {
+         int port = getPortFromRange(a);
+         for (int i = 0; i < portServers.size(); i++)
+           {
+             p = (portServer) portServers.get(i);
+             if (p.s_port == port)
+               {
+                 return (portServer) p;
+               }
+           }
+         // The server is not yet instantiated. Instantiate.
+         try
+           {
+             // Check if the port is ok:
+             ServerSocket s = socketFactory.createServerSocket(port);
+             s.close();
+ 
+             portServer shared;
+ 
+             switch (type)
+               {
+                 case PARALLEL:
+                   shared = new portServer(port);
+                   break;
+ 
+                 case SEQUENTIAL:
+                   shared = new sharedPortServer(port);
+                   break;
+ 
+                 default:
+                   throw new InternalError("Invalid server type " + type);
+               }
+ 
+             portServers.add(shared);
+ 
+             if (running)
+               shared.start();
+ 
+             return shared;
+           }
+         catch (Exception ex)
+           {
+             // Port is taken or probably other problems.
+             continue Ports;
+           }
+       }
+     throw new NO_RESOURCES("No free port available at " + m_ports_from + "-"
+       + m_ports_to, Minor.Ports, CompletionStatus.COMPLETED_NO);
+   }
+ 
+   /**
+    * Start the ORBs main working cycle (receive invocation - invoke on the local
+    * object - send response - wait for another invocation).
+    * 
+    * The method only returns after calling {@link #shutdown(boolean)}.
+    */
+   public void run()
+   {
+     if (m_ports_from < 0 || m_ports_to < 0)
+       throw new BAD_INV_ORDER("For " + getClass().getName() + " "
+         + LISTENER_PORT + " property must be set");
+ 
+     running = true;
+ 
+     // Start all port servers. In the current subclass, the portServers
+     // collection must be already filled in.
+     Iterator iter = portServers.iterator();
+ 
+     while (iter.hasNext())
+       {
+         portServer subserver = (portServer) iter.next();
+ 
+         if (!subserver.isAlive())
+           {
+             // Reuse the current thread for the last portServer.
+             if (!iter.hasNext())
+               {
+                 // Discard the iterator.
+                 iter = null;
+                 subserver.run();
+                 return;
+               }
+             else
+               subserver.start();
+           }
+       }
+   }
+ 
+   /**
+    * Get free port from the allowed range. This method instantiates the port
+    * server for the returned port.
+    */
+   public int getFreePort()
+     throws BAD_OPERATION
+   {
+     portServer s = getPortServer(PARALLEL);
+     return s.s_port;
+   }
+ 
+   /**
+    * Connect the given CORBA object to this ORB, explicitly specifying the
+    * object key and the identity of the thread (and port), where the object must
+    * be served. The identity is normally the POA.
+    * 
+    * The new port server will be started only if there is no one already running
+    * for the same identity. Otherwise, the task of the existing port server will
+    * be widened, including duty to serve the given object. All objects,
+    * connected to a single identity by this method, will process they requests
+    * subsequently in the same thread. The method is used when the expected
+    * number of the objects is too large to have a single port and thread per
+    * object. This method is used by POAs, having a single thread policy.
+    * 
+    * @param object the object, must implement the {@link InvokeHandler})
+    * interface.
+    * @param key the object key, usually used to identify the object from remote
+    * side.
+    * @param port the port, where the object must be connected.
+    * 
+    * @throws BAD_PARAM if the object does not implement the
+    * {@link InvokeHandler}).
+    */
+   public void connect_1_thread(org.omg.CORBA.Object object, byte[] key,
+     java.lang.Object identity)
+   {
+     sharedPortServer shared = (sharedPortServer) identities.get(identity);
+     if (shared == null)
+       {
+         shared = (sharedPortServer) getPortServer(SEQUENTIAL);
+         identities.put(identity, shared);
+         if (running)
+           {
+             shared.start();
+           }
+       }
+ 
+     Connected_objects.cObject ref = connected_objects.add(key, object,
+       shared.s_port, identity);
+     IOR ior = createIOR(ref);
+     prepareObject(object, ior);
+   }
+ 
+   /**
+    * In this type of ORB, the service is started by {@link #getPortServer}. The
+    * method below is not in use and should return without action.
+    */
+   public void startService(IOR ior)
+   {
+   }
+ 
+   /**
+    * Set parameters (additionally search for the port range property).
+    */
+   protected void set_parameters(Applet applet, Properties props)
+   {
+     super.set_parameters(applet, props);
+     String lp = applet.getParameter(LISTENER_PORT);
+     if (lp != null)
+       setPortRange(lp);
+   }
+ 
+   /**
+    * Set parameters (additionally search for the port range property).
+    */
+   protected void set_parameters(String[] args, Properties props)
+   {
+     super.set_parameters(args, props);
+     String lp = null;
+ 
+     String lpKey = "-" + LISTENER_PORT;
+ 
+     if (args != null)
+       if (args.length >= 2)
+         {
+           for (int i = 0; i < args.length - 1; i++)
+             if (args[i].equals(lpKey))
+               lp = args[i + 1];
+         }
+ 
+     if (lp != null)
+       setPortRange(lp);
+ 
+   }
+ 
+   /**
+    * Additionally set the port range property, when applicable.
+    */
+   protected void useProperties(Properties props)
+   {
+     super.useProperties(props);
+     String lp = props.getProperty(LISTENER_PORT);
+     if (lp != null)
+       setPortRange(lp);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/OrbFunctional.java gcc-4.1.0/libjava/classpath/gnu/CORBA/OrbFunctional.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/OrbFunctional.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/OrbFunctional.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,1778 ----
+ /* OrbFunctional.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.UnknownExceptionCtxHandler;
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.GIOP.CloseMessage;
+ import gnu.CORBA.GIOP.ErrorMessage;
+ import gnu.CORBA.GIOP.MessageHeader;
+ import gnu.CORBA.GIOP.ReplyHeader;
+ import gnu.CORBA.GIOP.RequestHeader;
+ import gnu.CORBA.NamingService.NameParser;
+ import gnu.CORBA.NamingService.NamingServiceTransient;
+ import gnu.CORBA.Poa.gnuForwardRequest;
+ import gnu.CORBA.interfaces.SocketFactory;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.NO_RESOURCES;
+ import org.omg.CORBA.OBJECT_NOT_EXIST;
+ import org.omg.CORBA.Request;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.UNKNOWN;
+ import org.omg.CORBA.WrongTransaction;
+ import org.omg.CORBA.ORBPackage.InvalidName;
+ import org.omg.CORBA.portable.Delegate;
+ import org.omg.CORBA.portable.InvokeHandler;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.UnknownException;
+ import org.omg.CosNaming.NamingContextExt;
+ import org.omg.CosNaming.NamingContextExtHelper;
+ 
+ import java.applet.Applet;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.InetAddress;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ import java.net.SocketException;
+ import java.net.UnknownHostException;
+ import java.util.ArrayList;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.Random;
+ import java.util.StringTokenizer;
+ import java.util.TreeMap;
+ 
+ /**
+  * The ORB implementation, capable to handle remote invocations on the
+  * registered object. This class implements all features, required till the jdk
+  * 1.3 inclusive, but does not support the POA that appears since 1.4. The POA
+  * is supported by {@link gnu.CORBA.Poa.ORB_1_4}.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class OrbFunctional extends OrbRestricted
+ {
+   /**
+    * A server, responsible for listening on requests on some local port. The ORB
+    * may listen on multiple ports and process the requests in separate threads.
+    * Normally the server takes one port per object being served.
+    */
+   protected class portServer
+     extends Thread
+   {
+     /**
+      * The number of the currently running parallel threads.
+      */
+     int running_threads;
+ 
+     /**
+      * The port on that this portServer is listening for requests.
+      */
+     int s_port;
+ 
+     /**
+      * The server socket of this portServer.
+      */
+     ServerSocket service;
+ 
+     /**
+      * True if the serving node must shutdown due call of the close_now().
+      */
+     boolean terminated;
+ 
+     /**
+      * Create a new portServer, serving on specific port.
+      */
+     portServer(int _port)
+     {
+       s_port = _port;
+       setDaemon(true);
+       try
+         {
+           service = socketFactory.createServerSocket(s_port);
+         }
+       catch (IOException ex)
+         {
+           BAD_OPERATION bad = new BAD_OPERATION(
+             "Unable to open the server socket at " + s_port);
+           bad.minor = Minor.Socket;
+           bad.initCause(ex);
+           throw bad;
+         }
+     }
+ 
+     /**
+      * Enter the serving loop (get request/process it). All portServer normally
+      * terminate thy threads when the OrbFunctional.running is set to false.
+      */
+     public void run()
+     {
+       while (running)
+         {
+           try
+             {
+               tick();
+             }
+           catch (SocketException ex)
+             {
+               // May be thrown when the service is closed by
+               // the close_now().
+               if (terminated)
+                 return;
+             }
+           catch (Exception iex)
+             {
+               // Wait. Do not terminate the
+               // service due potentially transient error.
+               try
+                 {
+                   Thread.sleep(TWAIT_SERVER_ERROR_PAUSE);
+                 }
+               catch (InterruptedException ex)
+                 {
+                 }
+             }
+         }
+     }
+ 
+     /**
+      * Perform a single serving step.
+      * 
+      * @throws java.lang.Exception
+      */
+     void tick()
+       throws Exception
+     {
+       serve(this, service);
+     }
+ 
+     /**
+      * Forcibly close the server socket and mark this port as free.
+      */
+     public void close_now()
+     {
+       try
+         {
+           terminated = true;
+           service.close();
+         }
+       catch (Exception ex)
+         {
+           // This may happen if the service has not been opened or
+           // cannot be closed. Return without action.
+         }
+     }
+ 
+     /**
+      * If the thread is no longer in use, close the socket (if opened).
+      */
+     protected void finalize()
+     {
+       close_now();
+     }
+   }
+ 
+   /**
+    * A server, responsible for listening on requests on some local port and
+    * serving multiple requests (probably to the different objects) on the same
+    * thread.
+    */
+   protected class sharedPortServer extends portServer
+   {
+     /**
+      * Create a new portServer, serving on specific port.
+      */
+     sharedPortServer(int _port)
+     {
+       super(_port);
+     }
+ 
+     /**
+      * Perform a single serving step.
+      *
+      * @throws java.lang.Exception
+      */
+     void tick() throws Exception
+     {
+       Socket request = service.accept();
+       serveStep(request, false);
+     }
+   }
+ 
+   /**
+    * The default value where the first instance of this ORB will start looking
+    * for a free port.
+    */
+   public static int DEFAULT_INITIAL_PORT = 1126;
+   
+   /**
+    * When trying to open the socket on a random port, start of the interval to
+    * try.
+    */
+   public static int RANDOM_PORT_FROM = 1024;
+   
+   /**
+    * When trying to open the socket on a random port, end of the interval to
+    * try.
+    */
+   public static int RANDOM_PORT_TO = 4024;
+   
+   /**
+    * The number of attempts to try when opening random port.
+    */
+   public static int RANDOM_PORT_ATTEMPTS = 64;
+ 
+   /**
+    * The property of port, on that this ORB is listening for requests from
+    * clients. This class supports one port per ORB only.
+    */
+   public static final String LISTEN_ON = "gnu.classpath.CORBA.ListenOn";
+ 
+   /**
+    * The property, defining the IOR of the intial reference to resolve.
+    */
+   public static final String REFERENCE = "org.omg.CORBA.ORBInitRef";
+ 
+   /**
+    * The property, defining the port on that the default name service is
+    * running.
+    */
+   public static final String NS_PORT = "org.omg.CORBA.ORBInitialPort";
+ 
+   /**
+    * The property, defining the host on that the default name service is
+    * running.
+    */
+   public static final String NS_HOST = "org.omg.CORBA.ORBInitialHost";
+ 
+   /**
+    * The string, defining the naming service initial reference.
+    */
+   public static final String NAME_SERVICE = "NameService";
+   
+   /**
+    * Defines the ORB ID that is accessible by IOR interceptors.
+    */
+   public static final String ORB_ID = "org.omg.CORBA.ORBid";
+   
+   
+   /**
+    * Defines the SERVER ID that is accessible by IOR interceptors.
+    */
+   public static final String SERVER_ID = "org.omg.CORBA.ServerId";
+   
+   /**
+    * The if the client has once opened a socket, it should start sending the
+    * message header in a given time. Otherwise the server will close the socket.
+    * This prevents server hang when the client opens the socket, but does not
+    * send any message, usually due crash on the client side.
+    */
+   public static String START_READING_MESSAGE =
+     "gnu.classpath.CORBA.TOUT_START_READING_MESSAGE";
+ 
+   /**
+    * If the client has started to send the request message, the socket time out
+    * changes to the specified value.
+    */
+   public static String WHILE_READING =
+     "gnu.classpath.CORBA.TOUT_WHILE_READING";
+ 
+   /**
+    * If the message body is received, the time out changes to the specifice
+    * value. This must be longer, as includes time, required to process the
+    * received task. We make it 40 minutes.
+    */
+   public static String AFTER_RECEIVING =
+     "gnu.classpath.CORBA.TOUT_AFTER_RECEIVING";
+   
+   /**
+    * The server waits for this duration after the potentially transient error
+    * during its servicing cycle.
+    */
+   public static String SERVER_ERROR_PAUSE =
+     "gnu.classpath.CORBA.SERVER_ERROR_PAUSE";
+ 
+   /**
+    * The address of the local host.
+    */
+   public final String LOCAL_HOST;
+ 
+   /**
+    * The if the client has once opened a socket, it should start sending the
+    * message header in a given time. Otherwise the server will close the socket.
+    * This prevents server hang when the client opens the socket, but does not
+    * send any message, usually due crash on the client side.
+    */
+   public int TOUT_START_READING_MESSAGE = 20 * 1000;
+ 
+   // (Here and below, we use * to make the meaning of the constant clearler).
+ 
+   /**
+    * If the client has started to send the request message, the socket time out
+    * changes to the specified value.
+    */
+   public int TOUT_WHILE_READING = 2 * 60 * 1000;
+ 
+   /**
+    * If the message body is received, the time out changes to the specifice
+    * value. This must be longer, as includes time, required to process the
+    * received task. We make it 40 minutes.
+    */
+   public int TOUT_AFTER_RECEIVING = 40 * 60 * 1000;
+   
+   /**
+    * The server waits for this duration after the potentially transient error
+    * during its servicing cycle.
+    */
+   public int TWAIT_SERVER_ERROR_PAUSE = 5000;
+ 
+   /**
+    * Some clients tend to submit multiple requests over the same socket. The
+    * server waits for the next request on the same socket for the duration,
+    * specified below. In additions, the request of this implementation also
+    * waits for the same duration before closing the socket. The default time is
+    * seven seconds.
+    */
+   public static int TANDEM_REQUESTS = 7000;
+   
+   /**
+    * The Id of this ORB.
+    */
+   public String orb_id = "orb_"+hashCode();
+   
+   /**
+    * The Id of this Server. This field is defined static to ensure it has
+    * the same value over all ORB's in this machine.
+    */
+   public static String server_id = "server_"+OrbFunctional.class.hashCode(); 
+ 
+   /**
+    * The map of the already conncted objects.
+    */
+   protected final Connected_objects connected_objects =
+     new Connected_objects();
+ 
+   /**
+    * The maximal CORBA version, supported by this ORB. The default value 0 means
+    * that the ORB will not check the request version while trying to respond.
+    */
+   protected Version max_version;
+ 
+   /**
+    * Setting this value to false causes the ORB to shutdown after the latest
+    * serving operation is complete.
+    */
+   protected boolean running;
+ 
+   /**
+    * The map of the initial references.
+    */
+   protected Map initial_references = new TreeMap();
+ 
+   /**
+    * The currently active portServers.
+    */
+   protected ArrayList portServers = new ArrayList();
+ 
+   /**
+    * The host, on that the name service is expected to be running.
+    */
+   private String ns_host;
+ 
+   /**
+    * Probably free port, under that the ORB will try listening for remote
+    * requests first. When the new object is connected, this port is used first,
+    * then it is incremented by 1, etc. If the given port is not available, up to
+    * 20 subsequent values are tried and then the parameterless server socket
+    * contructor is called. The constant is shared between multiple instances of
+    * this ORB.
+    */
+   private static int Port = DEFAULT_INITIAL_PORT;
+ 
+   /**
+    * The port, on that the name service is expected to be running.
+    */
+   private int ns_port = 900;
+   
+   /**
+    * The name parser.
+    */
+   NameParser nameParser = new NameParser();
+ 
+   /**
+    * The instance, stored in this field, handles the asynchronous dynamic
+    * invocations.
+    */
+   protected Asynchron asynchron = new Asynchron();
+ 
+   /**
+    * The list of the freed ports. The ORB reuses ports, when possible.
+    */
+   protected LinkedList freed_ports = new LinkedList();
+ 
+   /**
+    * Maps a single-threaded POAs to they sharedPortServants.
+    */
+   protected Hashtable identities = new Hashtable();
+ 
+   /**
+    * The maximal allowed number of the currently running parallel threads per
+    * object. For security reasons, this is made private and unchangeable. After
+    * exceeding this limit, the NO_RESOURCES is thrown back to the client.
+    */
+   private int MAX_RUNNING_THREADS = 256;
+   
+   /**
+    * The producer of the client and server sockets for this ORB.
+    */
+   public SocketFactory socketFactory = DefaultSocketFactory.Singleton;
+ 
+   /**
+    * Create the instance of the Functional ORB.
+    */
+   public OrbFunctional()
+   {
+     try
+       {
+         LOCAL_HOST = ns_host = InetAddress.getLocalHost().getHostAddress();
+         initial_references.put("CodecFactory", new gnuCodecFactory(this));
+       }
+     catch (UnknownHostException ex)
+       {
+         BAD_OPERATION bad =
+           new BAD_OPERATION("Unable to open the server socket.");
+         bad.initCause(ex);
+         throw bad;
+       }
+   }
+ 
+   /**
+    * If the max version is assigned, the orb replies with the error message if
+    * the request version is above the supported 1.2 version. This behavior is
+    * recommended by OMG, but not all implementations respond that error message
+    * by re-sending the request, encoded in the older version.
+    */
+   public void setMaxVersion(Version max_supported)
+   {
+     max_version = max_supported;
+   }
+ 
+   /**
+    * Get the maximal supported GIOP version or null if the version is not
+    * checked.
+    */
+   public Version getMaxVersion()
+   {
+     return max_version;
+   }
+ 
+   /**
+    * Get the currently free port, starting from the initially set port and going
+    * up max 20 steps, then trying to bind into any free address.
+    * 
+    * @return the currently available free port.
+    * 
+    * @throws NO_RESOURCES if the server socked cannot be opened on the local
+    * host.
+    */
+   public int getFreePort()
+     throws BAD_OPERATION
+   {
+     ServerSocket s;
+     int a_port;
+ 
+     try
+       {
+         // If there are some previously freed ports, use them first.
+         if (!freed_ports.isEmpty())
+           {
+             Integer free = (Integer) freed_ports.getLast();
+             freed_ports.removeLast();
+             s = socketFactory.createServerSocket(free.intValue());
+             s.close();
+             return free.intValue();
+           }
+       }
+     catch (Exception ex)
+       {
+         // This may be thrown if the request for the new port has arrived
+         // before the current service is completly shutdown.
+         // OK then, use a new port.
+       }
+ 
+     for (a_port = Port; a_port < Port + 20; a_port++)
+       {
+         try
+           {
+             s = socketFactory.createServerSocket(a_port);
+             s.close();
+             Port = a_port + 1;
+             return a_port;
+           }
+         catch (IOException ex)
+           {
+             // Repeat the loop if this exception has been thrown.
+           }
+       }
+ 
+     Random rand = new Random();
+     // Try any random port in the interval RANDOM_PORT_FROM.RANDOM_PORT_TO.
+     int range = RANDOM_PORT_TO - RANDOM_PORT_FROM;
+     IOException ioex = null;
+     for (int i = 0; i < RANDOM_PORT_ATTEMPTS; i++)
+       {
+         try
+           {
+             a_port = RANDOM_PORT_FROM + rand.nextInt(range);
+             s = socketFactory.createServerSocket(a_port);
+             s.close();
+             return a_port;
+           }
+         catch (IOException ex)
+           {
+             // Repeat the loop if this exception has been thrown.
+             ioex = ex;
+           }
+       }
+ 
+     NO_RESOURCES bad = new NO_RESOURCES("Unable to open the server socket.");
+     bad.minor = Minor.Ports;
+     if (ioex != null)
+       bad.initCause(ioex);
+     throw bad;
+   }
+ 
+   /**
+    * Set the port, on that the server is listening for the client requests. If
+    * only one object is connected to the orb, the server will be try listening
+    * on this port first. It the port is busy, or if more objects are connected,
+    * the subsequent object will receive a larger port values, skipping
+    * unavailable ports, if required. The change applies globally.
+    * 
+    * @param a_Port a port, on that the server is listening for requests.
+    */
+   public static void setPort(int a_Port)
+   {
+     Port = a_Port;
+   }
+ 
+   /**
+    * Connect the given CORBA object to this ORB. After the object is connected,
+    * it starts receiving remote invocations via this ORB.
+    *
+    * The ORB tries to connect the object to the port, that has been previously
+    * set by {@link setPort(int)}. On failure, it tries 20 subsequent larger
+    * values and then calls the parameterless server socked constructor to get
+    * any free local port. If this fails, the {@link NO_RESOURCES} is thrown.
+    *
+    * @param object the object, must implement the {@link InvokeHandler})
+    * interface.
+    *
+    * @throws BAD_PARAM if the object does not implement the
+    * {@link InvokeHandler}).
+    */
+   public void connect(org.omg.CORBA.Object object)
+   {
+     int a_port = getFreePort();
+ 
+     Connected_objects.cObject ref = connected_objects.add(object, a_port);
+     IOR ior = createIOR(ref);
+     prepareObject(object, ior);
+     if (running)
+       startService(ior);
+   }
+ 
+   /**
+    * Connect the given CORBA object to this ORB, explicitly specifying the
+    * object key.
+    *
+    * The ORB tries to connect the object to the port, that has been previously
+    * set by {@link setPort(int)}. On failure, it tries 20 subsequent larger
+    * values and then calls the parameterless server socked constructor to get
+    * any free local port. If this fails, the {@link NO_RESOURCES} is thrown.
+    *
+    * @param object the object, must implement the {@link InvokeHandler})
+    * interface.
+    * @param key the object key, usually used to identify the object from remote
+    * side.
+    *
+    * @throws BAD_PARAM if the object does not implement the
+    * {@link InvokeHandler}).
+    */
+   public void connect(org.omg.CORBA.Object object, byte[] key)
+   {
+     int a_port = getFreePort();
+ 
+     Connected_objects.cObject ref =
+       connected_objects.add(key, object, a_port, null);
+     IOR ior = createIOR(ref);
+     prepareObject(object, ior);
+     if (running)
+       startService(ior);
+   }
+ 
+   /**
+    * Connect the given CORBA object to this ORB, explicitly specifying the
+    * object key and the identity of the thread (and port), where the object must
+    * be served. The identity is normally the POA.
+    *
+    * The new port server will be started only if there is no one already running
+    * for the same identity. Otherwise, the task of the existing port server will
+    * be widened, including duty to serve the given object. All objects,
+    * connected to a single identity by this method, will process they requests
+    * subsequently in the same thread. The method is used when the expected
+    * number of the objects is too large to have a single port and thread per
+    * object. This method is used by POAs, having a single thread policy.
+    *
+    * @param object the object, must implement the {@link InvokeHandler})
+    * interface.
+    * @param key the object key, usually used to identify the object from remote
+    * side.
+    * @param port the port, where the object must be connected.
+    *
+    * @throws BAD_PARAM if the object does not implement the
+    * {@link InvokeHandler}).
+    */
+   public void connect_1_thread(org.omg.CORBA.Object object, byte[] key,
+     java.lang.Object identity
+   )
+   {
+     sharedPortServer shared = (sharedPortServer) identities.get(identity);
+     if (shared == null)
+       {
+         int a_port = getFreePort();
+         shared = new sharedPortServer(a_port);
+         identities.put(identity, shared);
+         if (running)
+           {
+             portServers.add(shared);
+             shared.start();
+           }
+       }
+ 
+     Connected_objects.cObject ref =
+       connected_objects.add(key, object, shared.s_port, identity);
+     IOR ior = createIOR(ref);
+     prepareObject(object, ior);
+   }
+ 
+   /**
+    * Start the service on the given port of this IOR.
+    *
+    * @param ior the ior (only Internet.port is used).
+    */
+   public void startService(IOR ior)
+   {
+     portServer p = new portServer(ior.Internet.port);
+     portServers.add(p);
+     p.start();
+   }
+ 
+   /**
+    * Destroy this server, releasing the occupied resources.
+    */
+   public void destroy()
+   {
+     portServer p;
+     for (int i = 0; i < portServers.size(); i++)
+       {
+         p = (portServer) portServers.get(i);
+         p.close_now();
+       }
+     super.destroy();
+   }
+ 
+   /**
+    * Disconnect the given CORBA object from this ORB. The object will be no
+    * longer receiving the remote invocations. In response to the remote
+    * invocation on this object, the ORB will send the exception
+    * {@link OBJECT_NOT_EXIST}. The object, however, is not destroyed and can
+    * receive the local invocations.
+    *
+    * @param object the object to disconnect.
+    */
+   public void disconnect(org.omg.CORBA.Object object)
+   {
+     Connected_objects.cObject rmKey = null;
+ 
+     // Handle the case when it is possible to get the object key.
+     // Handle the case when the object is known, but not local.
+     if (object instanceof ObjectImpl)
+       {
+         Delegate delegate = ((ObjectImpl) object)._get_delegate();
+         if (delegate instanceof SimpleDelegate)
+           {
+             byte[] key = ((SimpleDelegate) delegate).getIor().key;
+             rmKey = connected_objects.get(key);
+           }
+       }
+ 
+     // Try to find and disconned the object that is not an instance of the
+     // object implementation.
+     if (rmKey == null)
+       rmKey = connected_objects.getKey(object);
+     if (rmKey != null)
+       {
+         // Find and stop the corresponding portServer.
+         portServer p;
+         StopService:
+         for (int i = 0; i < portServers.size(); i++)
+           {
+             p = (portServer) portServers.get(i);
+             if (p.s_port == rmKey.port && !(p instanceof sharedPortServer))
+               {
+                 p.close_now();
+                 freed_ports.addFirst(new Integer(rmKey.port));
+                 break StopService;
+               }
+             connected_objects.remove(rmKey.key);
+           }
+       }
+   }
+ 
+   /**
+    * Notifies ORB that the shared service indentity (usually POA) is destroyed.
+    * The matching shared port server is terminated and the identity table entry
+    * is deleted. If this identity is not known for this ORB, the method returns
+    * without action.
+    *
+    * @param identity the identity that has been destroyed.
+    */
+   public void identityDestroyed(java.lang.Object identity)
+   {
+     if (identity == null)
+       return;
+ 
+     sharedPortServer ise = (sharedPortServer) identities.get(identity);
+     if (ise != null)
+       {
+         synchronized (connected_objects)
+           {
+             ise.close_now();
+             identities.remove(identity);
+ 
+             Connected_objects.cObject obj;
+             Map.Entry m;
+             Iterator iter = connected_objects.entrySet().iterator();
+             while (iter.hasNext())
+               {
+                 m = (Map.Entry) iter.next();
+                 obj = (Connected_objects.cObject) m.getValue();
+                 if (obj.identity == identity)
+                   iter.remove();
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Find the local object, connected to this ORB.
+    *
+    * @param ior the ior of the potentially local object.
+    *
+    * @return the local object, represented by the given IOR, or null if this is
+    * not a local connected object.
+    */
+   public org.omg.CORBA.Object find_local_object(IOR ior)
+   {
+     // Must be the same host.
+     if (!ior.Internet.host.equals(LOCAL_HOST))
+       return null;
+ 
+     return find_connected_object(ior.key, ior.Internet.port);
+   }
+ 
+   /**
+    * List the initially available CORBA objects (services).
+    *
+    * @return a list of services.
+    *
+    * @see resolve_initial_references(String)
+    */
+   public String[] list_initial_services()
+   {
+     String[] refs = new String[ initial_references.size() ];
+     int p = 0;
+ 
+     Iterator iter = initial_references.keySet().iterator();
+     while (iter.hasNext())
+       {
+         refs [ p++ ] = (String) iter.next();
+       }
+     return refs;
+   }
+ 
+   /**
+    * Get the IOR reference string for the given object. The string embeds
+    * information about the object repository Id, its access key and the server
+    * internet address and port. With this information, the object can be found
+    * by another ORB, possibly located on remote computer.
+    *
+    * @param the CORBA object
+    * @return the object IOR representation.
+    *
+    * @throws BAD_PARAM if the object has not been previously connected to this
+    * ORB.
+    *
+    * @throws BAD_OPERATION in the unlikely case if the local host address cannot
+    * be resolved.
+    *
+    * @see string_to_object(String)
+    */
+   public String object_to_string(org.omg.CORBA.Object forObject)
+   {
+     // Handle the case when the object is known, but not local.
+     if (forObject instanceof ObjectImpl)
+       {
+         Delegate delegate = ((ObjectImpl) forObject)._get_delegate();
+         if (delegate instanceof SimpleDelegate)
+           return ((SimpleDelegate) delegate).getIor().toStringifiedReference();
+       }
+ 
+     // Handle the case when the object is local.
+     Connected_objects.cObject rec = connected_objects.getKey(forObject);
+ 
+     if (rec == null)
+       throw new BAD_PARAM("The object " + forObject +
+         " has not been previously connected to this ORB"
+       );
+ 
+     IOR ior = createIOR(rec);
+ 
+     return ior.toStringifiedReference();
+   }
+ 
+   /**
+    * Get the local IOR for the given object, null if the object is not local.
+    */
+   public IOR getLocalIor(org.omg.CORBA.Object forObject)
+   {
+     Connected_objects.cObject rec = connected_objects.getKey(forObject);
+     if (rec == null)
+       return null;
+     else
+       return createIOR(rec);
+   }
+ 
+   /**
+    * Find and return the easily accessible CORBA object, addressed by name.
+    *
+    * @param name the object name.
+    * @return the object
+    *
+    * @throws org.omg.CORBA.ORBPackage.InvalidName if the given name is not
+    * associated with the known object.
+    */
+   public org.omg.CORBA.Object resolve_initial_references(String name)
+     throws InvalidName
+   {
+     org.omg.CORBA.Object object = null;
+     try
+       {
+         object = (org.omg.CORBA.Object) initial_references.get(name);
+         if (object == null && name.equals(NAME_SERVICE))
+           {
+             object = getDefaultNameService();
+             if (object != null)
+               initial_references.put(NAME_SERVICE, object);
+           }
+       }
+     catch (Exception ex)
+       {
+         InvalidName err = new InvalidName(name);
+         err.initCause(ex);
+         throw err;
+       }
+     if (object != null)
+       return object;
+     else
+       throw new InvalidName("Not found: '" + name + "'");
+   }
+ 
+   /**
+    * Start the ORBs main working cycle (receive invocation - invoke on the local
+    * object - send response - wait for another invocation).
+    *
+    * The method only returns after calling {@link #shutdown(boolean)}.
+    */
+   public void run()
+   {
+     running = true;
+ 
+     // Instantiate the port server for each socket.
+     Iterator iter = connected_objects.entrySet().iterator();
+     Map.Entry m;
+     Connected_objects.cObject obj;
+ 
+     while (iter.hasNext())
+       {
+         m = (Map.Entry) iter.next();
+         obj = (Connected_objects.cObject) m.getValue();
+ 
+         portServer subserver;
+ 
+         if (obj.identity == null)
+           {
+             subserver = new portServer(obj.port);
+             portServers.add(subserver);
+           }
+         else
+           subserver = (portServer) identities.get(obj.identity);
+         
+         if (!subserver.isAlive())
+           {
+             // Reuse the current thread for the last portServer.
+             if (!iter.hasNext())
+               {
+                 // Discard the iterator, eliminating lock checks.
+                 iter = null;
+                 subserver.run();
+                 return;
+               }
+             else
+               subserver.start();
+           }
+       }
+   }
+   
+   /**
+    * Start the server in a new thread, if not already running. This method is
+    * used to ensure that the objects being transfered will be served from the 
+    * remote side, if required. If the ORB is started using this method, it
+    * starts as a daemon thread.
+    */
+   public void ensureRunning()
+   {
+     final OrbFunctional THIS = this;
+     
+     if (!running)
+       {
+         Thread t = new Thread()
+         {
+           public void run()
+           {
+             THIS.run();
+           }
+         };
+         t.setDaemon(true);
+         t.start();
+       }
+   }
+ 
+   /**
+    * Shutdown the ORB server.
+    *
+    * @param wait_for_completion if true, the current thread is suspended until
+    * the shutdown process is complete.
+    */
+   public void shutdown(boolean wait_for_completion)
+   {
+     super.shutdown(wait_for_completion);
+     running = false;
+ 
+     if (!wait_for_completion)
+       {
+         for (int i = 0; i < portServers.size(); i++)
+           {
+             portServer p = (portServer) portServers.get(i);
+             p.close_now();
+           }
+       }
+   }
+ 
+   /**
+    * Find and return the CORBA object, addressed by the given IOR string
+    * representation. The object can (an usually is) located on a remote
+    * computer, possibly running a different (not necessary java) CORBA
+    * implementation.
+    * 
+    * @param ior the object IOR representation string.
+    * 
+    * @return the found CORBA object.
+    * @see object_to_string(org.omg.CORBA.Object)
+    */
+   public org.omg.CORBA.Object string_to_object(String an_ior)
+   {
+     return nameParser.corbaloc(an_ior, this);
+   }
+   
+   /**
+    * Convert ior reference to CORBA object.
+    */
+   public org.omg.CORBA.Object ior_to_object(IOR ior)
+   {
+     org.omg.CORBA.Object object = find_local_object(ior);
+     if (object == null)
+       {
+         ObjectImpl impl = StubLocator.search(this, ior);
+         try
+           {
+             if (impl._get_delegate() == null)
+               impl._set_delegate(new IorDelegate(this, ior));
+           }
+         catch (BAD_OPERATION ex)
+           {
+             // Some colaborants may throw this exception
+             // in response to the attempt to get the unset delegate.
+             impl._set_delegate(new IorDelegate(this, ior));
+           }
+ 
+         object = impl;
+         // TODO remove commented out code below.
+         // connected_objects.add(ior.key, impl, ior.Internet.port, null);
+       }
+     return object;
+   }
+ 
+   /**
+    * Get the default naming service for the case when there no NameService
+    * entries.
+    */
+   protected org.omg.CORBA.Object getDefaultNameService()
+   {
+     if (initial_references.containsKey(NAME_SERVICE))
+       return (org.omg.CORBA.Object) initial_references.get(NAME_SERVICE);
+ 
+     IOR ior = new IOR();
+     ior.Id = NamingContextExtHelper.id();
+     ior.Internet.host = ns_host;
+     ior.Internet.port = ns_port;
+     ior.key = NamingServiceTransient.getDefaultKey();
+ 
+     IorObject iorc = new IorObject(this, ior);
+     NamingContextExt namer = NamingContextExtHelper.narrow(iorc);
+     initial_references.put(NAME_SERVICE, namer);
+     return namer;
+   }
+ 
+   /**
+    * Find and return the object, that must be previously connected to this ORB.
+    * Return null if no such object is available.
+    * 
+    * @param key the object key.
+    * @param port the port where the object is connected.
+    * 
+    * @return the connected object, null if none.
+    */
+   protected org.omg.CORBA.Object find_connected_object(byte[] key, int port)
+   {
+     Connected_objects.cObject ref = connected_objects.get(key);
+     if (ref == null)
+       return null;
+     if (port >= 0 && ref.port != port)
+       return null;
+     else
+       return ref.object;
+   }
+ 
+   /**
+    * Set the ORB parameters. This method is normally called from
+    * {@link #init(Applet, Properties)}.
+    * 
+    * @param app the current applet.
+    * 
+    * @param props application specific properties, passed as the second
+    * parameter in {@link #init(Applet, Properties)}. Can be <code>null</code>.
+    */
+   protected void set_parameters(Applet app, Properties props)
+   {
+     useProperties(props);
+ 
+     String[][] para = app.getParameterInfo();
+     if (para != null)
+       {
+         for (int i = 0; i < para.length; i++)
+           {
+             if (para[i][0].equals(LISTEN_ON))
+               Port = Integer.parseInt(para[i][1]);
+             if (para[i][0].equals(REFERENCE))
+               {
+                 StringTokenizer st = new StringTokenizer(para[i][1], "=");
+                 initial_references.put(st.nextToken(),
+                   string_to_object(st.nextToken()));
+               }
+ 
+             if (para[i][0].equals(ORB_ID))
+               orb_id = para[i][1];
+ 
+             if (para[i][0].equals(SERVER_ID))
+               server_id = para[i][1];
+ 
+             if (para[i][0].equals(NS_HOST))
+               ns_host = para[i][1];
+             if (para[i][0].equals(START_READING_MESSAGE))
+               TOUT_START_READING_MESSAGE = Integer.parseInt(para[i][1]);
+             if (para[i][0].equals(WHILE_READING))
+               TOUT_WHILE_READING = Integer.parseInt(para[i][1]);
+             if (para[i][0].equals(AFTER_RECEIVING))
+               TOUT_AFTER_RECEIVING = Integer.parseInt(para[i][1]);
+             try
+               {
+                 if (para[i][0].equals(NS_PORT))
+                   ns_port = Integer.parseInt(para[i][1]);
+               }
+             catch (NumberFormatException ex)
+               {
+                 BAD_PARAM bad = new BAD_PARAM("Invalid " + NS_PORT
+                   + "property, unable to parse '" + props.getProperty(NS_PORT)
+                   + "'");
+                 bad.initCause(ex);
+                 throw bad;
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Set the ORB parameters. This method is normally called from
+    * {@link #init(String[], Properties)}.
+    * 
+    * @param para the parameters, that were passed as the parameters to the
+    * <code>main(String[] args)</code> method of the current standalone
+    * application.
+    * 
+    * @param props application specific properties that were passed as a second
+    * parameter in {@link init(String[], Properties)}). Can be <code>null</code>.
+    */
+   protected void set_parameters(String[] para, Properties props)
+   {
+     if (para.length > 1)
+       {
+         for (int i = 0; i < para.length - 1; i++)
+           {
+             if (para[i].endsWith("ListenOn"))
+               Port = Integer.parseInt(para[i + 1]);
+             if (para[i].endsWith("ORBInitRef"))
+               {
+                 StringTokenizer st = new StringTokenizer(para[i + 1], "=");
+                 initial_references.put(st.nextToken(),
+                   string_to_object(st.nextToken()));
+               }
+ 
+             if (para[i].endsWith("ORBInitialHost"))
+               ns_host = para[i + 1];
+ 
+             if (para[i].endsWith("ServerId"))
+               server_id = para[i++];
+             else if (para[i].endsWith("ORBid"))
+               orb_id = para[i++];
+ 
+             try
+               {
+                 if (para[i].endsWith("ORBInitialPort"))
+                   ns_port = Integer.parseInt(para[i + 1]);
+               }
+             catch (NumberFormatException ex)
+               {
+                 throw new BAD_PARAM("Invalid " + para[i]
+                   + "parameter, unable to parse '"
+                   + props.getProperty(para[i + 1]) + "'");
+               }
+           }
+       }
+ 
+     useProperties(props);
+   }
+ 
+   /**
+    * Create IOR for the given object references.
+    */
+   protected IOR createIOR(Connected_objects.cObject ref)
+     throws BAD_OPERATION
+   {
+     IOR ior = new IOR();
+     ior.key = ref.key;
+     ior.Internet.port = ref.port;
+ 
+     if (ref.object instanceof ObjectImpl)
+       {
+         ObjectImpl imp = (ObjectImpl) ref.object;
+         if (imp._ids().length > 0)
+           ior.Id = imp._ids() [ 0 ];
+       }
+     if (ior.Id == null)
+       ior.Id = ref.object.getClass().getName();
+     try
+       {
+         ior.Internet.host = InetAddress.getLocalHost().getHostAddress();
+         ior.Internet.port = ref.port;
+       }
+     catch (UnknownHostException ex)
+       {
+         throw new BAD_OPERATION("Cannot resolve the local host address");
+       }
+     return ior;
+   }
+ 
+   /**
+    * Prepare object for connecting it to this ORB.
+    *
+    * @param object the object being connected.
+    *
+    * @throws BAD_PARAM if the object does not implement the
+    * {@link InvokeHandler}).
+    */
+   protected void prepareObject(org.omg.CORBA.Object object, IOR ior)
+     throws BAD_PARAM
+   {
+     /*
+      * if (!(object instanceof InvokeHandler)) throw new
+      * BAD_PARAM(object.getClass().getName() + " does not implement
+      * InvokeHandler. " );
+      */
+ 
+     // If no delegate is set, set the default delegate.
+     if (object instanceof ObjectImpl)
+       {
+         ObjectImpl impl = (ObjectImpl) object;
+         try
+           {
+             if (impl._get_delegate() == null)
+               impl._set_delegate(new SimpleDelegate(this, ior));
+           }
+         catch (BAD_OPERATION ex)
+           {
+             // Some colaborants may throw this exception.
+             impl._set_delegate(new SimpleDelegate(this, ior));
+           }
+       }
+   }
+ 
+   /**
+    * Write the response message.
+    *
+    * @param net_out the stream to write response into
+    * @param msh_request the request message header
+    * @param rh_request the request header
+    * @param handler the invocation handler that has been used to invoke the
+    * operation
+    * @param sysEx the system exception, thrown during the invocation, null if
+    * none.
+    *
+    * @throws IOException
+    */
+   private void respond_to_client(OutputStream net_out,
+     MessageHeader msh_request, RequestHeader rh_request,
+     ResponseHandlerImpl handler, SystemException sysEx
+   ) throws IOException
+   {
+     // Set the reply header properties.
+     ReplyHeader reply = handler.reply_header;
+ 
+     if (sysEx != null)
+       reply.reply_status = ReplyHeader.SYSTEM_EXCEPTION;
+     else if (handler.isExceptionReply())
+       reply.reply_status = ReplyHeader.USER_EXCEPTION;
+     else
+       reply.reply_status = ReplyHeader.NO_EXCEPTION;
+     reply.request_id = rh_request.request_id;
+ 
+     BufferedCdrOutput out =
+       new BufferedCdrOutput(50 + handler.getBuffer().buffer.size());
+     out.setOrb(this);
+ 
+     out.setOffset(msh_request.getHeaderSize());
+ 
+     reply.write(out);
+ 
+     if (msh_request.version.since_inclusive(1, 2))
+       {
+         out.align(8);
+ 
+         // Write the reply data from the handler. The handler data already
+         // include the necessary heading zeroes for alignment.
+       }
+     handler.getBuffer().buffer.writeTo(out);
+ 
+     MessageHeader msh_reply = new MessageHeader();
+ 
+     msh_reply.version = msh_request.version;
+     msh_reply.message_type = MessageHeader.REPLY;
+     msh_reply.message_size = out.buffer.size();
+ 
+     // Write the reply.
+     msh_reply.write(net_out);
+     out.buffer.writeTo(net_out);
+     net_out.flush();
+   }
+ 
+   /**
+    * Forward request to another target, as indicated by the passed exception.
+    */
+   private void forward_request(OutputStream net_out,
+     MessageHeader msh_request, RequestHeader rh_request, gnuForwardRequest info
+   ) throws IOException
+   {
+     MessageHeader msh_forward = new MessageHeader();
+     msh_forward.version = msh_request.version;
+ 
+     ReplyHeader rh_forward = msh_forward.create_reply_header();
+     msh_forward.message_type = MessageHeader.REPLY;
+     rh_forward.reply_status = info.forwarding_code;
+     rh_forward.request_id = rh_request.request_id;
+ 
+     // The forwarding code is either LOCATION_FORWARD or LOCATION_FORWARD_PERM.
+     BufferedCdrOutput out = new BufferedCdrOutput();
+     out.setOrb(this);
+     out.setOffset(msh_forward.getHeaderSize());
+ 
+     rh_forward.write(out);
+ 
+     if (msh_forward.version.since_inclusive(1, 2))
+       out.align(8);
+     out.write_Object(info.forward_reference);
+ 
+     msh_forward.message_size = out.buffer.size();
+ 
+     // Write the forwarding instruction.
+     msh_forward.write(net_out);
+     out.buffer.writeTo(net_out);
+     net_out.flush();
+   }
+ 
+   /**
+    * Contains a single servicing task.
+    *
+    * Normally, each task matches a single remote invocation. However under
+    * frequent tandem submissions the same task may span over several
+    * invocations.
+    *
+    * @param serverSocket the ORB server socket.
+    *
+    * @throws MARSHAL
+    * @throws IOException
+    */
+   void serve(final portServer p, ServerSocket serverSocket)
+     throws MARSHAL, IOException
+   {
+     final Socket service;
+     service = serverSocket.accept();
+ 
+     // Tell the server there are no more resources.
+     if (p.running_threads >= MAX_RUNNING_THREADS)
+       {
+         serveStep(service, true);
+         return;
+       }
+ 
+     new Thread()
+       {
+         public void run()
+         {
+           try
+             {
+               synchronized (p)
+                 {
+                   p.running_threads++;
+                 }
+               serveStep(service, false);
+             }
+           finally
+             {
+               synchronized (p)
+                 {
+                   p.running_threads--;
+                 }
+             }
+         }
+       }.start();
+   }
+ 
+   /**
+    * A single servicing step, when the client socket is alrady open.
+    * 
+    * Normally, each task matches a single remote invocation. However under
+    * frequent tandem submissions the same task may span over several
+    * invocations.
+    * 
+    * @param service the opened client socket.
+    * @param no_resources if true, the "NO RESOURCES" exception is thrown to the
+    * client.
+    */
+   void serveStep(Socket service, boolean no_resources)
+   {
+     try
+       {
+         Serving: while (true)
+           {
+             InputStream in = service.getInputStream();
+             service.setSoTimeout(TOUT_START_READING_MESSAGE);
+ 
+             MessageHeader msh_request = new MessageHeader();
+ 
+             try
+               {
+                 msh_request.read(in);
+               }
+             catch (MARSHAL ex)
+               {
+                 // This exception may be thrown due closing the connection.
+                 return;
+               }
+ 
+             if (max_version != null)
+               {
+                 if (!msh_request.version.until_inclusive(max_version.major,
+                   max_version.minor))
+                   {
+                     OutputStream out = service.getOutputStream();
+                     new ErrorMessage(max_version).write(out);
+                     return;
+                   }
+               }
+ 
+             byte[] r = msh_request.readMessage(in, service, TOUT_WHILE_READING,
+               TOUT_AFTER_RECEIVING);
+ 
+             if (msh_request.message_type == MessageHeader.REQUEST)
+               {
+                 RequestHeader rh_request;
+ 
+                 BufferredCdrInput cin = new BufferredCdrInput(r);
+                 cin.setOrb(this);
+                 cin.setVersion(msh_request.version);
+                 cin.setOffset(msh_request.getHeaderSize());
+                 cin.setBigEndian(msh_request.isBigEndian());
+ 
+                 rh_request = msh_request.create_request_header();
+ 
+                 // Read header and auto set the charset.
+                 rh_request.read(cin);
+ 
+                 // in 1.2 and higher, align the current position at
+                 // 8 octet boundary.
+                 if (msh_request.version.since_inclusive(1, 2))
+                   {
+                     cin.align(8);
+ 
+                     // find the target object.
+                   }
+ 
+                 InvokeHandler target = (InvokeHandler) find_connected_object(
+                   rh_request.object_key, -1);
+ 
+                 // Prepare the reply header. This must be done in advance,
+                 // as the size must be known for handler to set alignments
+                 // correctly.
+                 ReplyHeader rh_reply = msh_request.create_reply_header();
+ 
+                 // TODO log errors about not existing objects and methods.
+                 ResponseHandlerImpl handler = new ResponseHandlerImpl(
+                   this, msh_request, rh_reply, rh_request);
+ 
+                 SystemException sysEx = null;
+ 
+                 try
+                   {
+                     if (no_resources)
+                       {
+                         NO_RESOURCES no = new NO_RESOURCES("Too many parallel calls");
+                         no.minor = Minor.Threads;
+                         throw no;
+                       }
+                     if (target == null)
+                       throw new OBJECT_NOT_EXIST();
+                     target._invoke(rh_request.operation, cin, handler);
+                   }
+                 catch (gnuForwardRequest forwarded)
+                   {
+                     OutputStream sou = service.getOutputStream();
+                     forward_request(sou, msh_request, rh_request, forwarded);
+                     if (service != null && !service.isClosed())
+                       {
+                         // Wait for the subsequent invocations on the
+                         // same socket for the TANDEM_REQUEST duration.
+                         service.setSoTimeout(TANDEM_REQUESTS);
+                         continue Serving;
+                       }
+                   }
+                 catch (UnknownException uex)
+                   {
+                     sysEx = new UNKNOWN("Unknown", 2,
+                       CompletionStatus.COMPLETED_MAYBE);
+                     sysEx.initCause(uex.originalEx);
+ 
+                     org.omg.CORBA.portable.OutputStream ech = handler.createExceptionReply();
+ 
+                     rh_reply.service_context = UnknownExceptionCtxHandler.addExceptionContext(
+                       rh_reply.service_context, uex.originalEx, ech);
+ 
+                     ObjectCreator.writeSystemException(ech, sysEx);
+                   }
+                 catch (SystemException ex)
+                   {
+                     sysEx = ex;
+                     
+                     org.omg.CORBA.portable.OutputStream ech = handler.createExceptionReply();
+                     
+                     rh_reply.service_context = UnknownExceptionCtxHandler.addExceptionContext(
+                       rh_reply.service_context, ex, ech);
+                     
+                     ObjectCreator.writeSystemException(ech, ex);
+                   }
+                 catch (Exception except)
+                   {
+                     // This should never happen under normal operation and
+                     // can only indicate errors in user object implementation.
+                     // We inform the user.
+                     except.printStackTrace();
+ 
+                     sysEx = new UNKNOWN("Unknown", 2,
+                       CompletionStatus.COMPLETED_MAYBE);
+                     sysEx.initCause(except);
+ 
+                     org.omg.CORBA.portable.OutputStream ech = handler.createExceptionReply();
+ 
+                     rh_reply.service_context = UnknownExceptionCtxHandler.addExceptionContext(
+                       rh_reply.service_context, except, ech);
+ 
+                     ObjectCreator.writeSystemException(ech, sysEx);
+                   }
+ 
+                 // Write the response.
+                 if (rh_request.isResponseExpected())
+                   {
+                     OutputStream sou = service.getOutputStream();
+                     respond_to_client(sou, msh_request, rh_request, handler,
+                       sysEx);
+                   }
+               }
+             else if (msh_request.message_type == MessageHeader.CLOSE_CONNECTION
+               || msh_request.message_type == MessageHeader.MESSAGE_ERROR)
+               {
+                 CloseMessage.close(service.getOutputStream());
+                 service.close();
+                 return;
+               }
+ 
+             if (service != null && !service.isClosed())
+ 
+               // Wait for the subsequent invocations on the
+               // same socket for the TANDEM_REQUEST duration.
+               service.setSoTimeout(TANDEM_REQUESTS);
+             else
+               return;
+           }
+       }
+     catch (SocketException ex)
+       {
+         // OK.
+         return;
+       }
+     catch (IOException ioex)
+       {
+         // Network error, probably transient.
+         // TODO log it.
+         return;
+       }
+     finally
+       {
+         try 
+           {
+             if (service!=null && !service.isClosed())
+               service.close();
+           }
+         catch (IOException ioex)
+           {
+             // OK.
+           }
+       }
+   }
+   
+   /**
+    * Set the ORB parameters from the properties that were accumulated
+    * from several locations.
+    */
+   protected void useProperties(Properties props)
+   {
+     if (props != null)
+       {
+         if (props.containsKey(LISTEN_ON))
+           Port = Integer.parseInt(props.getProperty(LISTEN_ON));
+         if (props.containsKey(NS_HOST))
+           ns_host = props.getProperty(NS_HOST);
+         try
+           {
+             if (props.containsKey(NS_PORT))
+               ns_port = Integer.parseInt(props.getProperty(NS_PORT));
+             if (props.containsKey(START_READING_MESSAGE))
+               TOUT_START_READING_MESSAGE =
+                 Integer.parseInt(props.getProperty(START_READING_MESSAGE));
+             if (props.containsKey(WHILE_READING))
+               TOUT_WHILE_READING =
+                 Integer.parseInt(props.getProperty(WHILE_READING));
+             if (props.containsKey(AFTER_RECEIVING))
+               TOUT_AFTER_RECEIVING =
+                 Integer.parseInt(props.getProperty(AFTER_RECEIVING));
+             if (props.containsKey(SERVER_ERROR_PAUSE))
+               TWAIT_SERVER_ERROR_PAUSE = 
+                 Integer.parseInt(props.getProperty(SERVER_ERROR_PAUSE));
+           }
+         catch (NumberFormatException ex)
+           {
+             throw new BAD_PARAM("Invalid " + NS_PORT +
+               "property, unable to parse '" + props.getProperty(NS_PORT) +
+               "'"
+             );
+           }
+         
+         if (props.containsKey(SocketFactory.PROPERTY))
+           {
+             String factory = null;
+             try
+               {
+                 factory = props.getProperty(SocketFactory.PROPERTY);
+                 if (factory!=null)
+                   socketFactory = (SocketFactory) 
+                     ObjectCreator.forName(factory).newInstance();
+               }
+             catch (Exception ex)
+               {
+                 BAD_PARAM p = new BAD_PARAM("Bad socket factory "+factory);
+                 p.initCause(ex);
+                 throw p;
+               }
+           }
+         
+         if (props.containsKey(ORB_ID))
+           orb_id = props.getProperty(ORB_ID);
+         
+         if (props.containsKey(SERVER_ID))
+           server_id = props.getProperty(SERVER_ID);
+         
+         Enumeration en = props.elements();
+         while (en.hasMoreElements())
+           {
+             String item = (String) en.nextElement();
+             if (item.equals(REFERENCE))
+               initial_references.put(item,
+                 string_to_object(props.getProperty(item))
+               );
+           }
+       }
+   }
+ 
+   /**
+    * Get the next instance with a response being received. If all currently sent
+    * responses not yet processed, this method pauses till at least one of them
+    * is complete. If there are no requests currently sent, the method pauses
+    * till some request is submitted and the response is received. This strategy
+    * is identical to the one accepted by Suns 1.4 ORB implementation.
+    *
+    * The returned response is removed from the list of the currently submitted
+    * responses and is never returned again.
+    *
+    * @return the previously sent request that now contains the received
+    * response.
+    *
+    * @throws WrongTransaction If the method was called from the transaction
+    * scope different than the one, used to send the request. The exception can
+    * be raised only if the request is implicitly associated with some particular
+    * transaction.
+    */
+   public Request get_next_response() throws org.omg.CORBA.WrongTransaction
+   {
+     return asynchron.get_next_response();
+   }
+ 
+   /**
+    * Find if any of the requests that have been previously sent with
+    * {@link #send_multiple_requests_deferred}, have a response yet.
+    *
+    * @return true if there is at least one response to the previously sent
+    * request, false otherwise.
+    */
+   public boolean poll_next_response()
+   {
+     return asynchron.poll_next_response();
+   }
+ 
+   /**
+    * Send multiple prepared requests expecting to get a reply. All requests are
+    * send in parallel, each in its own separate thread. When the reply arrives,
+    * it is stored in the agreed fields of the corresponing request data
+    * structure. If this method is called repeatedly, the new requests are added
+    * to the set of the currently sent requests, but the old set is not
+    * discarded.
+    *
+    * @param requests the prepared array of requests.
+    *
+    * @see #poll_next_response()
+    * @see #get_next_response()
+    * @see Request#send_deferred()
+    */
+   public void send_multiple_requests_deferred(Request[] requests)
+   {
+     asynchron.send_multiple_requests_deferred(requests);
+   }
+ 
+   /**
+    * Send multiple prepared requests one way, do not caring about the answer.
+    * The messages, containing requests, will be marked, indicating that the
+    * sender is not expecting to get a reply.
+    *
+    * @param requests the prepared array of requests.
+    *
+    * @see Request#send_oneway()
+    */
+   public void send_multiple_requests_oneway(Request[] requests)
+   {
+     asynchron.send_multiple_requests_oneway(requests);
+   }
+ 
+   /**
+    * Set the flag, forcing all server threads to terminate.
+    */
+   protected void finalize() throws java.lang.Throwable
+   {
+     running = false;
+     super.finalize();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/OrbRestricted.java gcc-4.1.0/libjava/classpath/gnu/CORBA/OrbRestricted.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/OrbRestricted.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/OrbRestricted.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,529 ----
+ /* RestrictedORB.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.typecodes.AliasTypeCode;
+ import gnu.CORBA.typecodes.ArrayTypeCode;
+ import gnu.CORBA.typecodes.RecordTypeCode;
+ import gnu.CORBA.typecodes.StringTypeCode;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.ContextList;
+ import org.omg.CORBA.Environment;
+ import org.omg.CORBA.ExceptionList;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.NamedValue;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.ORBPackage.InvalidName;
+ import org.omg.CORBA.Request;
+ import org.omg.CORBA.StructMember;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.UnionMember;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ValueFactory;
+ import org.omg.PortableInterceptor.ClientRequestInterceptorOperations;
+ import org.omg.PortableInterceptor.IORInterceptorOperations;
+ import org.omg.PortableInterceptor.IORInterceptor_3_0Operations;
+ import org.omg.PortableInterceptor.ServerRequestInterceptorOperations;
+ 
+ import java.applet.Applet;
+ 
+ import java.util.Hashtable;
+ import java.util.Properties;
+ 
+ /**
+  * This class implements so-called Singleton ORB, a highly restricted version
+  * that cannot communicate over network. This ORB is provided for the
+  * potentially malicious applets with heavy security restrictions. It, however,
+  * supports some basic features that might be needed even when the network
+  * access is not granted.
+  *
+  * This ORB can only create typecodes, {@link Any}, {@link ContextList},
+  * {@link NVList} and {@link org.omg.CORBA.portable.OutputStream} that writes to
+  * an internal buffer.
+  *
+  * All other methods throw the {@link NO_IMPLEMENT} exception.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class OrbRestricted extends org.omg.CORBA_2_3.ORB
+ {
+   /**
+    * The singleton instance of this ORB.
+    */
+   public static final ORB Singleton = new OrbRestricted();
+ 
+   /**
+    * The cumulated listener for all IOR interceptors. Interceptors are used by
+    * {@link gnu.CORBA.Poa.ORB_1_4}.
+    */
+   public IORInterceptor_3_0Operations iIor;
+ 
+   /**
+    * The cumulated listener for all server request interceptors. Interceptors
+    * are used by {@link gnu.CORBA.Poa.ORB_1_4}.
+    */
+   public ServerRequestInterceptorOperations iServer;
+ 
+   /**
+    * The cumulated listener for all client request interceptros. Interceptors
+    * are used by {@link gnu.CORBA.Poa.ORB_1_4}.
+    */
+   public ClientRequestInterceptorOperations iClient;
+ 
+   /**
+    * The required size of the interceptor slot array.
+    */
+   public int icSlotSize = 0;
+ 
+   /**
+    * The value factories.
+    */
+   protected Hashtable factories = new Hashtable();
+ 
+   /**
+    * The policy factories.
+    */
+   protected Hashtable policyFactories = new Hashtable();
+ 
+   /**
+        * Create a new instance of the RestrictedORB. This is used in derived classes
+    * only.
+    */
+   protected OrbRestricted()
+   {
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode create_alias_tc(String id, String name, TypeCode typecode)
+   {
+     return new AliasTypeCode(typecode, id, name);
+   }
+ 
+   /** {@inheritDoc} */
+   public Any create_any()
+   {
+     gnuAny any = new gnuAny();
+     any.setOrb(this);
+     return any;
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode create_array_tc(int length, TypeCode element_type)
+   {
+     ArrayTypeCode p =
+       new ArrayTypeCode(TCKind.tk_array, element_type);
+     p.setLength(length);
+     return p;
+   }
+ 
+   /** {@inheritDoc} */
+   public ContextList create_context_list()
+   {
+     return new gnuContextList();
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode create_enum_tc(String id, String name, String[] values)
+   {
+     RecordTypeCode r = new RecordTypeCode(TCKind.tk_enum);
+     for (int i = 0; i < values.length; i++)
+       {
+         r.field().name = values [ i ];
+       }
+ 
+     r.setId(id);
+     r.setName(name);
+ 
+     return r;
+   }
+ 
+   /** {@inheritDoc} */
+   public Environment create_environment()
+   {
+     return new gnuEnvironment();
+   }
+ 
+   /** {@inheritDoc} */
+   public ExceptionList create_exception_list()
+   {
+     return new gnuExceptionList();
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode create_exception_tc(String id, String name,
+     StructMember[] members
+   )
+   {
+     RecordTypeCode r = new RecordTypeCode(TCKind.tk_except);
+     r.setId(id);
+     r.setName(name);
+ 
+     for (int i = 0; i < members.length; i++)
+       {
+         r.add(members [ i ]);
+       }
+ 
+     return r;
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public TypeCode create_interface_tc(String id, String name)
+   {
+     no();
+     return null;
+   }
+ 
+   /** {@inheritDoc} */
+   public NVList create_list(int count)
+   {
+     return new gnuNVList(count);
+   }
+ 
+   /** {@inheritDoc} */
+   public NamedValue create_named_value(String s, Any any, int flags)
+   {
+     return new gnuNamedValue();
+   }
+ 
+   /** {@inheritDoc} */
+   public OutputStream create_output_stream()
+   {
+     BufferedCdrOutput stream = new BufferedCdrOutput();
+     stream.setOrb(this);
+     return stream;
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode create_sequence_tc(int bound, TypeCode element_type)
+   {
+     ArrayTypeCode p =
+       new ArrayTypeCode(TCKind.tk_sequence, element_type);
+     p.setLength(bound);
+     return p;
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode create_string_tc(int bound)
+   {
+     StringTypeCode p = new StringTypeCode(TCKind.tk_string);
+     p.setLength(bound);
+     return p;
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode create_struct_tc(String id, String name,
+     StructMember[] members
+   )
+   {
+     RecordTypeCode r = new RecordTypeCode(TCKind.tk_struct);
+     r.setId(id);
+     r.setName(name);
+ 
+     for (int i = 0; i < members.length; i++)
+       {
+         r.add(members [ i ]);
+       }
+ 
+     return r;
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode create_union_tc(String id, String name,
+     TypeCode discriminator_type, UnionMember[] members
+   )
+   {
+     RecordTypeCode r = new RecordTypeCode(TCKind.tk_union);
+     r.setId(id);
+     r.setName(name);
+     r.setDiscriminator_type(discriminator_type);
+     r.setDefaultIndex(0);
+ 
+     for (int i = 0; i < members.length; i++)
+       {
+         r.add(members [ i ]);
+       }
+ 
+     return r;
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode create_wstring_tc(int bound)
+   {
+     StringTypeCode p = new StringTypeCode(TCKind.tk_wstring);
+     p.setLength(bound);
+     return p;
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode get_primitive_tc(TCKind tcKind)
+   {
+     try
+       {
+         return TypeKindNamer.getPrimitveTC(tcKind);
+       }
+     catch (BadKind ex)
+       {
+         throw new BAD_PARAM("This is not a primitive type code: " +
+           tcKind.value()
+         );
+       }
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public String[] list_initial_services()
+   {
+     no();
+     throw new InternalError();
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public String object_to_string(org.omg.CORBA.Object forObject)
+   {
+     no();
+     throw new InternalError();
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws InvalidName never in this class, but it is thrown in the derived
+    * classes.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public org.omg.CORBA.Object resolve_initial_references(String name)
+     throws InvalidName
+   {
+     no();
+     throw new InternalError();
+   }
+ 
+   /**
+    * Shutdown the ORB server.
+    *
+    * For RestrictedORB, returns witout action.
+    */
+   public void run()
+   {
+   }
+ 
+   /**
+    * Shutdown the ORB server.
+    *
+    * For RestrictedORB, returns witout action.
+    */
+   public void shutdown(boolean wait_for_completion)
+   {
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public org.omg.CORBA.Object string_to_object(String IOR)
+   {
+     no();
+     throw new InternalError();
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   protected void set_parameters(Applet app, Properties props)
+   {
+     no();
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   protected void set_parameters(String[] args, Properties props)
+   {
+     no();
+   }
+ 
+   /**
+    * Throws an exception, stating that the given method is not supported by the
+    * Restricted ORB.
+    */
+   private final void no()
+   {
+     // Apart the programming errors, this can only happen if the
+     // malicious code is trying to do that it is not allowed.
+     throw new NO_IMPLEMENT("Use init(args, props) for the functional version.");
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public Request get_next_response() throws org.omg.CORBA.WrongTransaction
+   {
+     no();
+     throw new InternalError();
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public boolean poll_next_response()
+   {
+     no();
+     throw new InternalError();
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public void send_multiple_requests_deferred(Request[] requests)
+   {
+     no();
+   }
+ 
+   /**
+    * This method is not allowed for a RestrictedORB.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public void send_multiple_requests_oneway(Request[] requests)
+   {
+     no();
+   }
+ 
+   /**
+    * Register the value factory under the given repository id.
+    */
+   public ValueFactory register_value_factory(String repository_id,
+     ValueFactory factory
+   )
+   {
+     factories.put(repository_id, factory);
+     return factory;
+   }
+ 
+   /**
+    * Unregister the value factroy.
+    */
+   public void unregister_value_factory(String id)
+   {
+     factories.remove(id);
+   }
+ 
+   /**
+    * Look for the value factory for the value, having the given repository id.
+        * The implementation checks for the registered value factories first. If none
+        * found, it tries to load and instantiate the class, mathing the given naming
+    * convention. If this faild, null is returned.
+    *
+    * @param repository_id a repository id.
+    *
+    * @return a found value factory, null if none.
+    */
+   public ValueFactory lookup_value_factory(String repository_id)
+   {
+     ValueFactory f = (ValueFactory) factories.get(repository_id);
+     if (f != null)
+       {
+         return f;
+       }
+ 
+     f = (ValueFactory) ObjectCreator.createObject(repository_id,
+         "DefaultFactory"
+       );
+     if (f != null)
+       {
+         factories.put(repository_id, f);
+       }
+     return f;
+   }
+ 
+   /**
+    * Destroy the interceptors, if they are present.
+    */
+   public void destroy()
+   {
+     if (iIor != null)
+       {
+         iIor.destroy();
+         iIor = null;
+       }
+ 
+     if (iServer != null)
+       {
+         iServer.destroy();
+         iServer = null;
+       }
+ 
+     if (iClient != null)
+       {
+         iClient.destroy();
+         iClient = null;
+       }
+ 
+     super.destroy();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/AOM.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/AOM.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/AOM.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/AOM.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,382 ----
+ /* AOM.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.ByteArrayComparator;
+ 
+ import org.omg.PortableServer.Servant;
+ 
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.TreeMap;
+ 
+ /**
+  * Implements the conception of the Active Object Map.
+  * If the POA supports the RETAIN policy, it maintains an Active
+  * Object Map, that associates Object Ids with active servants.
+  * Each association constitutes an active object. We use a single map
+  * for all POAs on the given orb.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class AOM
+ {
+   /**
+    * The reference data about the object, placed on the AOM.
+    */
+   public class Obj
+   {
+     /**
+      * Create an initialised instance.
+      */
+     Obj(org.omg.CORBA.Object _object, byte[] _key, Servant _servant, gnuPOA _poa)
+     {
+       object = _object;
+       key = _key;
+       servant = _servant;
+       poa = _poa;
+     }
+ 
+     /**
+      * The object.
+      */
+     public final org.omg.CORBA.Object object;
+ 
+     /**
+      * The servant, serving the given object.
+      */
+     public Servant servant;
+ 
+     /**
+      * The local servant that once served this object.
+      * This field is used by {@link ForwardedServant} when it discovers that
+      * the forwarding chaing returns back to the original location.
+      * It should not be used anywhere else.
+      */
+     Servant primary_servant;
+ 
+     /**
+      * The POA, where the object is connected.
+      */
+     public final gnuPOA poa;
+ 
+     /**
+      * The object key.
+      */
+     public final byte[] key;
+ 
+     /**
+      * If true, this entry is deactivated.
+      */
+     public boolean deactivated;
+ 
+     /**
+      * Set the servant value, preserving any non null
+      * value as the primary servant.
+      */
+     public void setServant(Servant s)
+     {
+       if (primary_servant == null)
+         primary_servant = s;
+       servant = s;
+     }
+ 
+     /**
+      * Get the servant.
+      */
+     public Servant getServant()
+     {
+       return servant;
+     }
+ 
+     /**
+      * Get the deactivation state.
+      */
+     public boolean isDeactiveted()
+     {
+       return deactivated;
+     }
+ 
+     /**
+      * Set the deactivation state.
+      */
+     public void setDeactivated(boolean state)
+     {
+       deactivated = state;
+     }
+   }
+ 
+   /**
+    * The free number to give for the next instance.
+    * This field is incremented each time the
+    * new collection of the connected objects is created.
+    * Each collection has its own unique instance number.
+    */
+   private static long free_id;
+ 
+   /**
+    * The map of the all connected objects, maps the object key to the
+    * object.
+    */
+   Map objects = new TreeMap(new ByteArrayComparator());
+ 
+   /**
+    * Get the record of the stored object. If the object is mapped
+    * several times under the different keys, one of the mappings
+    * is used.
+    *
+    * @param object the stored object
+    *
+    * @return the record about the stored object, null if
+    * this object is not stored here.
+    */
+   public Obj findObject(org.omg.CORBA.Object stored_object)
+   {
+     if (stored_object == null)
+       return null;
+ 
+     Map.Entry item;
+     Iterator iter = objects.entrySet().iterator();
+     Obj ref;
+ 
+     while (iter.hasNext())
+       {
+         item = (Map.Entry) iter.next();
+         ref = (Obj) item.getValue();
+         if (stored_object.equals(ref.object))
+           return ref;
+       }
+     return null;
+   }
+ 
+   /**
+    * Find the reference info for the given servant.
+    * If the servant is mapped to several objects, this
+    * returns the first found occurence.
+    *
+    * @param servant a servant to find.
+    *
+    * @return the servant/object/POA binding or null if no such found.
+    */
+   public Obj findServant(Servant servant)
+   {
+     if (servant == null)
+       return null;
+ 
+     Map.Entry item;
+     Iterator iter = objects.entrySet().iterator();
+     Obj ref;
+ 
+     while (iter.hasNext())
+       {
+         item = (Map.Entry) iter.next();
+         ref = (Obj) item.getValue();
+         if (servant.equals(ref.servant))
+           return ref;
+       }
+     return null;
+   }
+ 
+   /**
+    * Find the reference info for the given servant.
+    * If the servant is mapped to several objects, this
+    * returns the first found occurence.
+    *
+    * @param servant a servant to find.
+    * @param speficies if to search for the inactive (true) or active
+    * (false) servant. A servant with unmatching activity is ignored
+    * by this method.
+    *
+    * @return the servant/object/POA binding or null if no such found.
+    */
+   public Obj findServant(Servant servant, boolean inactive)
+   {
+     if (servant == null)
+       return null;
+ 
+     Map.Entry item;
+     Iterator iter = objects.entrySet().iterator();
+     Obj ref;
+ 
+     while (iter.hasNext())
+       {
+         item = (Map.Entry) iter.next();
+         ref = (Obj) item.getValue();
+         if (ref.deactivated == inactive)
+           if (ref.servant != null)
+             if (servant.equals(ref.servant))
+               return ref;
+       }
+     return null;
+   }
+ 
+   /**
+    * Add the new object to the repository. The object key is
+    * generated automatically.
+    *
+    * @param object the object to add.
+    * @param servant a servant, serving the given object.
+    * @param poa the poa, where the object is connected.
+    *
+    * @return the newly created object record.
+    */
+   public Obj add(org.omg.CORBA.Object object, Servant servant, gnuPOA poa)
+   {
+     return add(generateObjectKey(object), object, servant, poa);
+   }
+ 
+   /**
+    * Add the new object to the repository.
+    *
+    * @param key the object key.
+    * @param object the object to add.
+    * @param servant a servant, serving the given object.
+    * @param poa the POA, where the object is connected.
+    */
+   public Obj add(byte[] key, org.omg.CORBA.Object object, Servant servant,
+                  gnuPOA poa
+                 )
+   {
+     Obj rec = new Obj(object, key, servant, poa);
+     objects.put(key, rec);
+     return rec;
+   }
+ 
+   /**
+    * Add the new object to the repository.
+    *
+    * @param delegate the delegate, providing data about the servant, key, POA
+    * and object.
+    * @param port the port that this object would take.
+    */
+   public Obj add(ServantDelegateImpl delegate)
+   {
+     Obj rec =
+       new Obj(delegate.object, delegate.servant_id, delegate.servant,
+               delegate.poa
+              );
+     objects.put(delegate.servant_id, rec);
+     return rec;
+   }
+ 
+   /**
+    * Put back the definition structure that has probably been removed earlier.
+    */
+   public void put(Obj obj)
+   {
+     objects.put(obj.key, obj);
+   }
+ 
+   /**
+    * Get the stored object.
+    *
+    * @param key the key (in the byte array form).
+    *
+    * @return the matching object, null if none is matching.
+    */
+   public Obj get(byte[] key)
+   {
+     return (Obj) objects.get(key);
+   }
+ 
+   /**
+    * Get the map key set.
+    */
+   public Set keySet()
+   {
+     return objects.keySet();
+   }
+ 
+   /**
+    * Remove the given object, indiciating it by the key.
+    *
+    * @param object the object to remove.
+    */
+   public void remove(byte[] key)
+   {
+     objects.remove(key);
+   }
+ 
+   /**
+    * Generate the object key, unique in the currently
+    * running java virtual machine. The passed object
+    * parameter is currently not in use.
+    *
+    * @return the generated key.
+    */
+   protected byte[] generateObjectKey(org.omg.CORBA.Object object)
+   {
+     byte[] key;
+ 
+     // The repetetive keys cannot be generated, but theoretically
+     // the same keys can be passed when calling add(byte[]...).
+     // Hence we check if the key is not already in the map and,
+     // if it is, use the subsequent value.
+     do
+       {
+         key = getFreeId();
+       }
+     while (objects.containsKey(key));
+     return key;
+   }
+ 
+   /**
+    * Get the next free 8 byte id, surely unique between calls of this
+    * method for the currently running virtual machine.
+    */
+   public static synchronized byte[] getFreeId()
+   {
+     byte[] r = new byte[ 8 ];
+ 
+     // Start from the faster-changing.
+     r [ 0 ] = ((byte) (0xff & free_id));
+     r [ 1 ] = ((byte) (0xff & (free_id >> 8)));
+     r [ 2 ] = ((byte) (0xff & (free_id >> 16)));
+     r [ 3 ] = ((byte) (0xff & (free_id >> 24)));
+     r [ 4 ] = ((byte) (0xff & (free_id >> 32)));
+     r [ 5 ] = ((byte) (0xff & (free_id >> 40)));
+     r [ 6 ] = ((byte) (0xff & (free_id >> 48)));
+     r [ 7 ] = ((byte) (0xff & (free_id >> 56)));
+ 
+     free_id++;
+ 
+     return r;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/AccessiblePolicy.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/AccessiblePolicy.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/AccessiblePolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/AccessiblePolicy.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,62 ----
+ /* AccessiblePolicy.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import org.omg.CORBA.Policy;
+ 
+ /**
+  * The Classpath implementation of the policy, providing the policy
+  * value and the code of the policy type.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public interface AccessiblePolicy
+   extends Policy
+ {
+   /**
+    * Get the value of this policy
+    */
+   java.lang.Object getValue();
+ 
+   /**
+    * Get the integer code of this policy value.
+    */
+   int getCode();
+ 
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/DynamicImpHandler.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/DynamicImpHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/DynamicImpHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/DynamicImpHandler.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,85 ----
+ /* DynamicImpHandler.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.InvokeHandler;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ResponseHandler;
+ import org.omg.PortableServer.DynamicImplementation;
+ 
+ /**
+  * The InvokeHandler, indicating, that the target is a dynamic
+  * implementation rather than an invoke handler. These two
+  * types are not substitutable, but in some methods have possibility
+  * just to handle them differently.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class DynamicImpHandler
+   implements InvokeHandler
+ {
+   /**
+    * The servant that is a dynamic implementation rather than
+    * invoke handler.
+    */
+   public final DynamicImplementation servant;
+ 
+   /**
+    * Create a new instance, wrapping some dyn implementation.
+    * @param _servant
+    */
+   public DynamicImpHandler(DynamicImplementation _servant)
+   {
+     servant = _servant;
+   }
+ 
+   /**
+    * We cannot invoke properly without having parameter info.
+    *
+    * @throws BAD_OPERATION, always.
+    */
+   public OutputStream _invoke(String method, InputStream input,
+                               ResponseHandler handler
+                              )
+   {
+     throw new BAD_OPERATION(servant + " is not an InvokeHandler.");
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/ForwardRequestHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/ForwardRequestHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/ForwardRequestHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/ForwardRequestHolder.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,107 ----
+ /* ForwardRequestHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.ForwardRequestHelper;
+ 
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.PortableServer.ForwardRequest;
+ 
+ /**
+ * A holder for the exception {@link ForwardRequest}.
+ 
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+ public class ForwardRequestHolder
+   implements Streamable
+ {
+   /**
+    * The stored ForwardRequest value.
+    */
+   public ForwardRequest value;
+ 
+   /**
+    * Create the unitialised instance, leaving the value field
+    * with default <code>null</code> value.
+    */
+   public ForwardRequestHolder()
+   {
+   }
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue the value that will be assigned to
+    * the <code>value</code> field.
+    */
+   public ForwardRequestHolder(ForwardRequest initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Fill in the {@link value} by data from the CDR stream.
+    *
+    * @param input the org.omg.CORBA.portable stream to read.
+    */
+   public void _read(InputStream input)
+   {
+     value = ForwardRequestHelper.read(input);
+   }
+ 
+   /**
+    * Get the typecode of the ForwardRequest.
+    */
+   public TypeCode _type()
+   {
+     return ForwardRequestHelper.type();
+   }
+ 
+   /**
+    * Write the stored value into the CDR stream.
+    *
+    * @param output the org.omg.CORBA.portable stream to write.
+    */
+   public void _write(OutputStream output)
+   {
+     ForwardRequestHelper.write(output, value);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/ForwardedServant.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/ForwardedServant.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/ForwardedServant.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/ForwardedServant.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,209 ----
+ /* ForwardedServant.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.IorDelegate;
+ import gnu.CORBA.IorObject;
+ import gnu.CORBA.Minor;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.portable.ApplicationException;
+ import org.omg.CORBA.portable.Delegate;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.InvokeHandler;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.RemarshalException;
+ import org.omg.CORBA.portable.ResponseHandler;
+ import org.omg.PortableServer.POA;
+ import org.omg.PortableServer.Servant;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * A "virtual servant", delegating all invocation to the wrapped
+  * object (usually remote). Used in cases when it is necessary to
+  * handle the request forwarding.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class ForwardedServant
+   extends Servant
+   implements InvokeHandler
+ {
+   /**
+    * The reference object, handling requests.
+    */
+   public final ObjectImpl ref;
+ 
+   /**
+    * Create an instance, forwarding requests to the given object.
+    */
+   ForwardedServant(ObjectImpl a_ref)
+   {
+     ref = a_ref;
+   }
+ 
+   /**
+    * Create an instance of the forwarded servant.
+    *
+    * @param a_ref a reference where request should be forwarded.
+    *
+    * @return a created forwarded servant or null if the parameter
+    * forwards request to itself. Returning null will force to find
+    * a right servant in one of many possible ways, depending on
+    * policies.
+    */
+   public static Servant create(org.omg.CORBA.Object a_ref)
+   {
+     try
+       {
+         ObjectImpl fto = (ObjectImpl) a_ref;
+ 
+         // Check maybe the remote side forwarded back to our local object.
+         if (fto instanceof IorObject)
+           {
+             IorObject iref = (IorObject) fto;
+ 
+             // Check maybe the IOR is local.
+             ORB t_orb = iref._orb();
+             if (t_orb instanceof ORB_1_4)
+               {
+                 ORB_1_4 orb = (ORB_1_4) t_orb;
+                 Delegate d = iref._get_delegate();
+                 if (d instanceof IorDelegate)
+                   {
+                     IorDelegate ird = (IorDelegate) iref._get_delegate();
+                     IOR ior = ird.getIor();
+                     if (orb.LOCAL_HOST.equalsIgnoreCase(ior.Internet.host))
+                       {
+                         AOM.Obj rx = orb.rootPOA.findIorKey(ior.key);
+                         if (rx != null)
+                           {
+                             if (rx.object == fto ||
+                                 rx.object._is_equivalent(fto)
+                                )
+                               return rx.primary_servant;
+                             else
+                               fto = (ObjectImpl) rx.object;
+                           }
+                       }
+                   }
+               }
+           }
+         return new ForwardedServant(fto);
+       }
+     catch (ClassCastException ex)
+       {
+         throw new BAD_PARAM("ObjectImpl required but " + a_ref + " passed ",
+                             0x5005, CompletionStatus.COMPLETED_NO
+                            );
+       }
+   }
+ 
+   /**
+    * Forward the call to the wrapped object.
+    */
+   public OutputStream _invoke(String method, InputStream input,
+                               ResponseHandler handler
+                              )
+                        throws SystemException
+   {
+     org.omg.CORBA.portable.InputStream in = null;
+     org.omg.CORBA.portable.OutputStream out = null;
+     try
+       {
+         try
+           {
+             out = ref._request(method, true);
+ 
+             // Transfer request information.
+             int b;
+             while ((b = input.read()) >= 0)
+               {
+                 out.write(b);
+               }
+             in = ref._invoke(out);
+ 
+             // Read the returned data.
+             out = handler.createReply();
+             while ((b = in.read()) >= 0)
+               {
+                 out.write(b);
+               }
+           }
+         catch (IOException io_ex)
+           {
+             MARSHAL m = new MARSHAL();
+             m.minor = Minor.Forwarding;
+             m.initCause(io_ex);
+             throw m;
+           }
+       }
+     catch (ApplicationException ex)
+       {
+         in = ex.getInputStream();
+ 
+         String _id = ex.getId();
+         throw new MARSHAL(_id, 5101, CompletionStatus.COMPLETED_NO);
+       }
+     catch (RemarshalException remarsh)
+       {
+         _invoke(method, input, handler);
+       }
+     finally
+       {
+         ref._releaseReply(in);
+       }
+     return out;
+   }
+ 
+   /**
+    * Delegates to the wrapped object.
+    */
+   public String[] _all_interfaces(POA poa, byte[] key)
+   {
+     return ref._ids();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/InvalidPolicyHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/InvalidPolicyHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/InvalidPolicyHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/InvalidPolicyHolder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,106 ----
+ /* InvalidPolicyHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.PortableServer.POAPackage.InvalidPolicy;
+ import org.omg.PortableServer.POAPackage.InvalidPolicyHelper;
+ 
+ /**
+ * A holder for the exception {@link InvalidPolicy}.
+ 
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+ public class InvalidPolicyHolder
+   implements Streamable
+ {
+   /**
+    * The stored InvalidPolicy value.
+    */
+   public InvalidPolicy value;
+ 
+   /**
+    * Create the unitialised instance, leaving the value field
+    * with default <code>null</code> value.
+    */
+   public InvalidPolicyHolder()
+   {
+   }
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue the value that will be assigned to
+    * the <code>value</code> field.
+    */
+   public InvalidPolicyHolder(InvalidPolicy initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Fill in the {@link value} by data from the CDR stream.
+    *
+    * @param input the org.omg.CORBA.portable stream to read.
+    */
+   public void _read(InputStream input)
+   {
+     value = InvalidPolicyHelper.read(input);
+   }
+ 
+   /**
+    * Write the stored value into the CDR stream.
+    *
+    * @param output the org.omg.CORBA.portable stream to write.
+    */
+   public void _write(OutputStream output)
+   {
+     InvalidPolicyHelper.write(output, value);
+   }
+ 
+   /**
+    * Get the typecode of the InvalidPolicy.
+    */
+   public TypeCode _type()
+   {
+     return InvalidPolicyHelper.type();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/LocalDelegate.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/LocalDelegate.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/LocalDelegate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/LocalDelegate.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,385 ----
+ /* LocalDelegate.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.CDR.AbstractCdrOutput;
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.IorProvider;
+ import gnu.CORBA.StreamBasedRequest;
+ 
+ import org.omg.CORBA.ARG_INOUT;
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.Context;
+ import org.omg.CORBA.ContextList;
+ import org.omg.CORBA.ExceptionList;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.NamedValue;
+ import org.omg.CORBA.OBJECT_NOT_EXIST;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Request;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.UnknownUserException;
+ import org.omg.CORBA.portable.ApplicationException;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.InvokeHandler;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.RemarshalException;
+ import org.omg.PortableServer.ServantLocatorPackage.CookieHolder;
+ 
+ import java.util.Arrays;
+ 
+ /**
+  * A local delegate, transferring all object requests to the locally available
+  * servant. This class is involved in handling the method invocations on the
+  * local object, obtained by POA.create_reference_with_id.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class LocalDelegate
+   extends org.omg.CORBA_2_3.portable.Delegate
+   implements IorProvider
+ {
+   /**
+    * The same servant as an invocation handler.
+    */
+   gnuServantObject object;
+ 
+   String operation;
+ 
+   public final gnuPOA poa;
+ 
+   final byte[] Id;
+ 
+   /**
+    * Create a local delegate, forwarding requests to the servant that must also
+    * be an invocation handler.
+    */
+   public LocalDelegate(gnuServantObject an_object, gnuPOA a_poa, byte[] an_id)
+   {
+     object = an_object;
+     poa = a_poa;
+     Id = an_id;
+   }
+   
+   /**
+    * Get the IOR of the connected object.
+    */
+   public IOR getIor()
+   {
+     return object.getIor();
+   }
+ 
+   public Request request(org.omg.CORBA.Object target, String method)
+   {
+     operation = method;
+ 
+     LocalRequest rq = new LocalRequest(object, poa, Id);
+     rq.setOperation(method);
+     rq.setORB(orb(target));
+     return rq;
+   }
+ 
+   public void release(org.omg.CORBA.Object target)
+   {
+   }
+ 
+   public boolean is_equivalent(org.omg.CORBA.Object target,
+     org.omg.CORBA.Object other)
+   {
+     if (target == other)
+       return true;
+     else if (target instanceof ObjectImpl && other instanceof ObjectImpl)
+       {
+         org.omg.CORBA.portable.Delegate a = null;
+         org.omg.CORBA.portable.Delegate b = null;
+         try
+           {
+             a = ((ObjectImpl) target)._get_delegate();
+             b = ((ObjectImpl) other)._get_delegate();
+           }
+         catch (Exception ex)
+           {
+             // Unable to get one of the delegates.
+             return false;
+           }
+         if (a instanceof LocalDelegate && b instanceof LocalDelegate)
+           {
+             byte[] k1 = ((LocalDelegate) a).Id;
+             byte[] k2 = ((LocalDelegate) b).Id;
+             return Arrays.equals(k1, k2);
+           }
+         else
+           return false;
+       }
+     else
+       return false;
+   }
+ 
+   /**
+    * Always return false.
+    */
+   public boolean non_existent(org.omg.CORBA.Object target)
+   {
+     return false;
+   }
+ 
+   /**
+    * Get hash code.
+    */
+   public int hash(org.omg.CORBA.Object target, int maximum)
+   {
+     return hashCode() % maximum;
+   }
+ 
+   /**
+    * Check if this object could be named by the given repository id.
+    * 
+    * @param idl_id the repository id to check.
+    * 
+    * @return true if it is one of the possible repository ids of this object.
+    */
+   public boolean is_a(org.omg.CORBA.Object a_servant, String idl_id)
+   {
+     String[] maybe = object._ids();
+     for (int i = 0; i < maybe.length; i++)
+       {
+         if (maybe[i].equals(idl_id))
+           return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Return <code>this</code>.
+    */
+   public org.omg.CORBA.Object duplicate(org.omg.CORBA.Object target)
+   {
+     return target;
+   }
+ 
+   /**
+    * Create request for using with DII.
+    */
+   public Request create_request(org.omg.CORBA.Object target, Context context,
+     String method, NVList parameters, NamedValue returns,
+     ExceptionList exceptions, ContextList ctx_list)
+   {
+     operation = method;
+ 
+     LocalRequest rq = new LocalRequest(object, poa, Id);
+     rq.setOperation(method);
+     rq.set_args(parameters);
+     rq.set_result(returns);
+     rq.set_exceptions(exceptions);
+     rq.set_context_list(ctx_list);
+     return rq;
+   }
+ 
+   /**
+    * Create request for using with DII.
+    */
+   public Request create_request(org.omg.CORBA.Object target, Context context,
+     String method, NVList parameters, NamedValue returns)
+   {
+     operation = method;
+ 
+     LocalRequest rq = new LocalRequest(object, poa, Id);
+     rq.setOperation(method);
+     rq.set_args(parameters);
+     rq.set_result(returns);
+     return rq;
+   }
+ 
+   /**
+    * Not in use.
+    */
+   public org.omg.CORBA.Object get_interface_def(org.omg.CORBA.Object target)
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /**
+    * Create a request to invoke the method of this CORBA object.
+    * 
+    * @param operation the name of the method to invoke.
+    * @param response_expected specifies if this is one way message or the
+    * response to the message is expected.
+    * 
+    * @return the stream where the method arguments should be written.
+    */
+   public org.omg.CORBA.portable.OutputStream request(
+     org.omg.CORBA.Object target, String method, boolean response_expected)
+   {
+     operation = method;
+ 
+     // Check if the object is not explicitly deactivated.
+     AOM.Obj e = poa.aom.get(Id);
+     if (e != null && e.isDeactiveted())
+       {
+         if (poa.servant_activator != null || poa.servant_locator != null)
+           {
+             // This will force the subsequent activation.
+             object.setServant(null);
+             e.setServant(null);
+             e.setDeactivated(false);
+           }
+         else
+           throw new OBJECT_NOT_EXIST("Deactivated");
+       }
+ 
+     LocalRequest rq = new LocalRequest(object, poa, Id);
+     rq.setOperation(method);
+     rq.setORB(orb(target));
+     return rq.getParameterStream();
+   }
+ 
+   /**
+    * Return the associated invocation handler.
+    */
+   public InvokeHandler getHandler(String method, CookieHolder cookie)
+   {
+     return object.getHandler(method, cookie, false);
+   }
+ 
+   /**
+    * Return the ORB of the associated POA. The parameter is not in use.
+    */
+   public ORB orb(org.omg.CORBA.Object target)
+   {
+     return poa.orb();
+   }
+ 
+   /**
+    * Make an invocation.
+    * 
+    * @param target not in use.
+    * @param output the stream request that should be returned by
+    * {@link #m_request} in this method.
+    * @throws ApplicationException if the use exception is thrown by the servant
+    * method.
+    */
+   public InputStream invoke(org.omg.CORBA.Object target, OutputStream output)
+     throws ApplicationException
+   {
+     try
+       {
+         StreamBasedRequest sr = (StreamBasedRequest) output;
+ 
+         LocalRequest lr = (LocalRequest) sr.request;
+         InvokeHandler handler = lr.object.getHandler(lr.operation(), lr.cookie,
+           false);
+ 
+         if (handler instanceof DynamicImpHandler)
+           {
+             // The local request known how to handle it, but the different
+             // method must be called.
+             lr.invoke();
+ 
+             // The encapsulation will inherit orb, endian, charsets, etc.
+             AbstractCdrOutput buf = sr.createEncapsulation();
+ 
+             // Write all request parameters to the buffer stream.
+             if (lr.env().exception() != null)
+               {
+                 try
+                   {
+                     UnknownUserException uex = (UnknownUserException) lr.env().exception();
+                     throw new ApplicationException(uex.except.type().id(),
+                       uex.except.create_input_stream());
+                   }
+                 catch (BadKind ex)
+                   {
+                     InternalError ierr = new InternalError();
+                     ierr.initCause(ex);
+                     throw ierr;
+                   }
+               }
+             if (lr.return_value() != null)
+               lr.return_value().write_value(buf);
+ 
+             NamedValue a;
+             try
+               {
+                 for (int i = 0; i < lr.arguments().count(); i++)
+                   {
+                     a = lr.arguments().item(i);
+                     if (a.flags() == ARG_INOUT.value
+                       || a.flags() == ARG_INOUT.value)
+                       {
+                         a.value().write_value(buf);
+                       }
+                   }
+               }
+             catch (Bounds ex)
+               {
+                 InternalError ierr = new InternalError();
+                 ierr.initCause(ex);
+                 throw ierr;
+               }
+ 
+             return buf.create_input_stream();
+           }
+         else
+           {
+             LocalRequest lrq = (LocalRequest) sr.request;
+             return lrq.s_invoke(handler);
+           }
+       }
+     catch (gnuForwardRequest f)
+       {
+         try
+           {
+             return ((ObjectImpl) f.forward_reference)._invoke(f.forward_reference._request(
+               operation, true));
+           }
+         catch (RemarshalException e)
+           {
+             // Never thrown in this place by Classpath implementation.
+             throw new NO_IMPLEMENT();
+           }
+       }
+   }
+ 
+   public void releaseReply(org.omg.CORBA.Object target, InputStream input)
+   {
+     release(target);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/LocalRequest.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/LocalRequest.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/LocalRequest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/LocalRequest.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,684 ----
+ /* LocalRequest.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.GIOP.MessageHeader;
+ import gnu.CORBA.GIOP.v1_2.ReplyHeader;
+ import gnu.CORBA.GIOP.v1_2.RequestHeader;
+ import gnu.CORBA.Interceptor.gnuClientRequestInfo;
+ import gnu.CORBA.Interceptor.gnuServerRequestInfo;
+ import gnu.CORBA.typecodes.RecordTypeCode;
+ import gnu.CORBA.ObjectCreator;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.gnuAny;
+ import gnu.CORBA.gnuRequest;
+ import gnu.CORBA.StreamHolder;
+ import gnu.CORBA.StreamBasedRequest;
+ 
+ import org.omg.CORBA.ARG_OUT;
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_INV_ORDER;
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.NamedValue;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.UnknownUserException;
+ import org.omg.CORBA.UserException;
+ import org.omg.CORBA.portable.ApplicationException;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.InvokeHandler;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ResponseHandler;
+ import org.omg.PortableInterceptor.ClientRequestInterceptorOperations;
+ import org.omg.PortableInterceptor.ForwardRequest;
+ import org.omg.PortableInterceptor.ServerRequestInterceptorOperations;
+ import org.omg.PortableServer.CurrentOperations;
+ import org.omg.PortableServer.CurrentPackage.NoContext;
+ import org.omg.PortableServer.DynamicImplementation;
+ import org.omg.PortableServer.POA;
+ import org.omg.PortableServer.Servant;
+ import org.omg.PortableServer.ServantLocatorPackage.CookieHolder;
+ import org.omg.PortableServer.portable.Delegate;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * Directs the invocation to the locally available servant. The POA servant does
+  * not longer implement the CORBA object and cannot be substituted directly.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class LocalRequest extends gnuRequest implements ResponseHandler,
+   CurrentOperations
+ {
+   /**
+    * Used by servant locator, if involved.
+    */
+   CookieHolder cookie;
+ 
+   /**
+    * The object Id.
+    */
+   final byte[] Id;
+ 
+   /**
+    * The message header (singleton is sufficient).
+    */
+   private static final MessageHeader header = new MessageHeader();
+ 
+   /**
+        * True if the stream was obtained by invoking {@link #createExceptionReply()},
+    * false otherwise.
+    */
+   boolean exceptionReply;
+ 
+   /**
+    * The buffer to write into.
+    */
+   BufferedCdrOutput buffer;
+ 
+   /**
+    * The responsible POA.
+    */
+   final gnuPOA poa;
+ 
+   /**
+    * The servant delegate to obtain the handler.
+    */
+   gnuServantObject object;
+ 
+   /**
+    * Used (reused) with dynamic implementation.
+    */
+   LocalServerRequest serverRequest;
+ 
+   /**
+    * Create an instance of the local request.
+    */
+   public LocalRequest(gnuServantObject local_object, gnuPOA a_poa, byte[] an_id)
+   {
+     Id = an_id;
+     poa = a_poa;
+ 
+     // Instantiate the cookie holder only if required.
+     if (poa.servant_locator != null)
+       {
+         cookie = new CookieHolder();
+       }
+     object = local_object;
+     prepareStream();
+   }
+ 
+   /**
+    * Make an invocation and return a stream from where the results can be read
+    * and throw ApplicationException, where applicable.
+    */
+   org.omg.CORBA.portable.InputStream s_invoke(InvokeHandler handler)
+     throws ApplicationException
+   {
+     try
+       {
+         poa.m_orb.currents.put(Thread.currentThread(), this);
+ 
+         org.omg.CORBA.portable.InputStream input = v_invoke(handler);
+ 
+         if (!exceptionReply)
+           {
+             return input;
+           }
+         else
+           {
+             input.mark(500);
+ 
+             String id = input.read_string();
+             try
+               {
+                 input.reset();
+               }
+             catch (IOException ex)
+               {
+                 InternalError ierr = new InternalError();
+                 ierr.initCause(ex);
+                 throw ierr;
+               }
+             throw new ApplicationException(id, input);
+           }
+       }
+     finally
+       {
+         poa.m_orb.currents.remove(Thread.currentThread());
+       }
+   }
+ 
+   /**
+    * Make an invocation and return a stream from where the results can be read.
+    *
+    * @param the invoke handler (can be null, then it is obtained self
+    * dependently).
+    */
+   public org.omg.CORBA.portable.InputStream v_invoke(InvokeHandler handler)
+   {
+     // Local request must be intercepted both by server and request
+     // interceptors.
+     boolean s_intercept = false;
+     ServerRequestInterceptorOperations s_interceptor = null;
+     gnuServerRequestInfo s_info = null;
+ 
+     boolean c_intercept = false;
+     ClientRequestInterceptorOperations c_interceptor = null;
+     gnuClientRequestInfo c_info = null;
+ 
+     try
+       {
+         if (poa.m_orb.iServer != null || poa.m_orb.iClient != null)
+           {
+             setORB(poa.m_orb);
+ 
+             // These two are only needed with interceptors.
+             m_rqh = new RequestHeader();
+             m_rqh.operation = m_operation;
+             m_rph = new ReplyHeader();
+ 
+             m_rqh.object_key = object.Id;
+             m_rph.request_id = m_rqh.request_id;
+           }
+ 
+         if (poa.m_orb.iClient != null)
+           {
+             c_interceptor = poa.m_orb.iClient;
+ 
+             c_info = new gnuClientRequestInfo(this);
+             c_intercept = true;
+ 
+             c_interceptor.send_request(c_info);
+ 
+             m_target = object;
+           }
+ 
+         if (poa.m_orb.iServer != null)
+           {
+             s_interceptor = poa.m_orb.iServer;
+ 
+             s_info = new gnuServerRequestInfo(object, m_rqh, m_rph);
+             s_info.m_request = this;
+ 
+             s_intercept = true;
+ 
+             s_interceptor.receive_request_service_contexts(s_info);
+           }
+ 
+         if (handler == null)
+           {
+             handler = object.getHandler(operation(), cookie, false);
+           }
+ 
+         BufferedCdrOutput request_part = new BufferedCdrOutput();
+ 
+         request_part.setOrb(orb());
+ 
+         if (m_args != null && m_args.count() > 0)
+           {
+             write_parameters(header, request_part);
+ 
+             if (m_parameter_buffer != null)
+               {
+                 throw new BAD_INV_ORDER("Please either add parameters or " +
+                   "write them into stream, but not both " + "at once."
+                 );
+               }
+           }
+ 
+         if (m_parameter_buffer != null)
+           {
+             write_parameter_buffer(header, request_part);
+           }
+ 
+         Servant servant;
+ 
+         if (handler instanceof Servant)
+           {
+             servant = (Servant) handler;
+           }
+         else
+           {
+             throw new BAD_OPERATION("Unexpected handler type " + handler);
+           }
+ 
+         org.omg.CORBA.portable.InputStream input =
+           request_part.create_input_stream();
+ 
+         // Ensure the servant (handler) has a delegate set.
+         ServantDelegateImpl sd = null;
+ 
+         Delegate d = null;
+ 
+         try
+           {
+             d = servant._get_delegate();
+           }
+         catch (Exception ex)
+           {
+             // In some cases exception is thrown if the delegate is not set.
+           }
+         if (d instanceof ServantDelegateImpl)
+           {
+             // If the delegate is already set, try to reuse the existing
+             // instance.
+             sd = (ServantDelegateImpl) d;
+             if (sd.object != object)
+               {
+                 sd = new ServantDelegateImpl(servant, poa, Id);
+               }
+           }
+         else
+           {
+             sd = new ServantDelegateImpl(servant, poa, Id);
+           }
+         servant._set_delegate(sd);
+ 
+         try
+           {
+             ORB o = orb();
+             if (o instanceof ORB_1_4)
+               {
+                 ((ORB_1_4) o).currents.put(Thread.currentThread(), this);
+               }
+ 
+             try
+               {
+                 if (s_intercept)
+                   {
+                     s_interceptor.receive_request(s_info);
+                   }
+                 handler._invoke(m_operation, input, this);
+ 
+                 // Handler is casted into i_handler.
+                 if ((s_intercept || c_intercept) && isExceptionReply())
+                   {
+                     s_info.m_reply_header.reply_status =
+                       ReplyHeader.USER_EXCEPTION;
+                     m_rph.reply_status = ReplyHeader.USER_EXCEPTION;
+ 
+                     // Make Any, holding the user exception.
+                     Any a = new gnuAny();
+                     OutputStream buf = getBuffer();
+                     InputStream in = buf.create_input_stream();
+                     String uex_idl = "unknown";
+                     try
+                       {
+                         in.mark(Integer.MAX_VALUE);
+                         uex_idl = in.read_string();
+                         m_exception_id = uex_idl;
+                         in.reset();
+                       }
+                     catch (IOException e)
+                       {
+                         throw new Unexpected(e);
+                       }
+ 
+                     try
+                       {
+                         UserException exception =
+                           ObjectCreator.readUserException(uex_idl, in);
+ 
+                         m_environment.exception(exception);
+                         ObjectCreator.insertWithHelper(a, exception);
+                       }
+                     catch (Exception e)
+                       {
+                         // Failed due any reason, insert without
+                         // helper.
+                         a.insert_Streamable(new StreamHolder(
+                             buf.create_input_stream()
+                           )
+                         );
+ 
+                         RecordTypeCode r =
+                           new RecordTypeCode(TCKind.tk_except);
+                         r.setId(uex_idl);
+                         r.setName(ObjectCreator.getDefaultName(uex_idl));
+                       }
+ 
+                     s_info.m_usr_exception = a;
+                     c_info.m_wrapped_exception = a;
+                     s_interceptor.send_exception(s_info);
+                     c_interceptor.receive_exception(c_info);
+                   }
+                 else
+                   {
+                     if (s_intercept)
+                       {
+                         s_info.m_reply_header.reply_status =
+                           ReplyHeader.NO_EXCEPTION;
+                         s_interceptor.send_reply(s_info);
+                       }
+                     if (c_intercept)
+                       {
+                         m_rph.reply_status = ReplyHeader.NO_EXCEPTION;
+                         c_interceptor.receive_reply(c_info);
+                       }
+                   }
+               }
+             catch (SystemException sys_ex)
+               {
+                 if (s_intercept)
+                   {
+                     s_info.m_reply_header.reply_status =
+                       ReplyHeader.SYSTEM_EXCEPTION;
+                     s_info.m_sys_exception = sys_ex;
+                     s_interceptor.send_exception(s_info);
+                   }
+ 
+                 if (c_intercept)
+                   {
+                     m_rph.reply_status = ReplyHeader.SYSTEM_EXCEPTION;
+ 
+                     Any a = new gnuAny();
+                     if (ObjectCreator.insertSysException(a, sys_ex))
+                       {
+                         c_info.m_wrapped_exception = a;
+                       }
+                     c_interceptor.receive_exception(c_info);
+                   }
+ 
+                 throw sys_ex;
+               }
+           }
+         finally
+           {
+             ORB o = orb();
+             if (o instanceof ORB_1_4)
+               {
+                 ((ORB_1_4) o).currents.remove(Thread.currentThread());
+               }
+           }
+ 
+         if (poa.servant_locator != null)
+           {
+             poa.servant_locator.postinvoke(object.Id, poa, operation(),
+               cookie.value, object.getServant()
+             );
+           }
+         return buffer.create_input_stream();
+       }
+ 
+     catch (ForwardRequest fex)
+       {
+         // May be thrown by interceptor.
+         if (s_intercept)
+           {
+             Forwarding:
+             while (true)
+               {
+                 s_info.m_reply_header.reply_status =
+                   ReplyHeader.LOCATION_FORWARD;
+                 s_info.m_forward_reference = fex.forward;
+                 try
+                   {
+                     s_interceptor.send_other(s_info);
+                     break Forwarding;
+                   }
+                 catch (ForwardRequest fex2)
+                   {
+                     s_info.m_forward_reference = fex2.forward;
+                     fex.forward = s_info.m_forward_reference;
+                   }
+               }
+           }
+ 
+         if (c_intercept)
+           {
+             this.m_rph.reply_status = ReplyHeader.LOCATION_FORWARD;
+             this.m_forwarding_target = fex.forward;
+             try
+               {
+                 c_interceptor.receive_other(c_info);
+               }
+             catch (ForwardRequest fex2)
+               {
+                 fex.forward = fex2.forward;
+               }
+           }
+         throw new gnuForwardRequest(fex.forward);
+       }
+     catch (gnuForwardRequest fex)
+       {
+         // May be thrown during activation.
+         // May be thrown during activation.
+         if (s_intercept)
+           {
+             Forwarding:
+             while (true)
+               {
+                 s_info.m_reply_header.reply_status =
+                   ReplyHeader.LOCATION_FORWARD;
+                 s_info.m_forward_reference = fex.forward_reference;
+                 try
+                   {
+                     s_interceptor.send_other(s_info);
+                     break Forwarding;
+                   }
+                 catch (ForwardRequest fex2)
+                   {
+                     s_info.m_forward_reference = fex2.forward;
+                     fex.forward_reference = (ObjectImpl) fex2.forward;
+                   }
+               }
+           }
+ 
+         if (c_intercept)
+           {
+             this.m_rph.reply_status = ReplyHeader.LOCATION_FORWARD;
+             this.m_forwarding_target = fex.forward_reference;
+             try
+               {
+                 c_interceptor.receive_other(c_info);
+               }
+             catch (ForwardRequest fex2)
+               {
+                 fex.forward_reference = (ObjectImpl) fex2.forward;
+               }
+           }
+         throw fex;
+       }
+   }
+ 
+   /**
+    * Make an invocation and store the result in the fields of this Request. Used
+    * with DII only.
+    */
+   public void invoke()
+   {
+     InvokeHandler handler = object.getHandler(operation(), cookie, false);
+ 
+     if (handler instanceof DynamicImpHandler)
+       {
+         DynamicImplementation dyn = ((DynamicImpHandler) handler).servant;
+         if (serverRequest == null)
+           {
+             serverRequest = new LocalServerRequest(this);
+           }
+         try
+           {
+             poa.m_orb.currents.put(Thread.currentThread(), this);
+             dyn.invoke(serverRequest);
+           }
+         finally
+           {
+             poa.m_orb.currents.remove(Thread.currentThread());
+           }
+       }
+     else
+       {
+         org.omg.CORBA.portable.InputStream input = v_invoke(handler);
+ 
+         if (!exceptionReply)
+           {
+             NamedValue arg;
+ 
+             // Read return value, if set.
+             if (m_result != null)
+               {
+                 m_result.value().read_value(input, m_result.value().type());
+               }
+ 
+             // Read returned parameters, if set.
+             if (m_args != null)
+               {
+                 for (int i = 0; i < m_args.count(); i++)
+                   {
+                     try
+                       {
+                         arg = m_args.item(i);
+ 
+                         // Both ARG_INOUT and ARG_OUT have this binary flag set.
+                         if ((arg.flags() & ARG_OUT.value) != 0)
+                           {
+                             arg.value().read_value(input, arg.value().type());
+                           }
+                       }
+                     catch (Bounds ex)
+                       {
+                         Unexpected.error(ex);
+                       }
+                   }
+               }
+           }
+         else// User exception reply
+           {
+             // Prepare an Any that will hold the exception.
+             gnuAny exc = new gnuAny();
+ 
+             exc.insert_Streamable(new StreamHolder(input));
+ 
+             UnknownUserException unuex = new UnknownUserException(exc);
+             m_environment.exception(unuex);
+           }
+       }
+   }
+ 
+   /**
+    * Get an output stream for providing details about the exception. Before
+    * returning the stream, the handler automatically writes the message header
+    * and the reply about exception header, but not the message header.
+    *
+    * @return the stream to write exception details into.
+    */
+   public OutputStream createExceptionReply()
+   {
+     exceptionReply = true;
+     prepareStream();
+     return buffer;
+   }
+ 
+   /**
+    * Get an output stream for writing a regular reply (not an exception).
+    *
+    * Before returning the stream, the handler automatically writes the regular
+    * reply header, but not the message header.
+    *
+    * @return the output stream for writing a regular reply.
+    */
+   public OutputStream createReply()
+   {
+     exceptionReply = false;
+     prepareStream();
+     return buffer;
+   }
+ 
+   /**
+    * Get the buffer, normally containing the written reply. The reply includes
+    * the reply header (or the exception header) but does not include the message
+    * header.
+    *
+    * The stream buffer can also be empty if no data have been written into
+    * streams, returned by {@link #createReply()} or
+    * {@link #createExceptionReply()}.
+    *
+    * @return the CDR output stream, containing the written output.
+    */
+   BufferedCdrOutput getBuffer()
+   {
+     return buffer;
+   }
+ 
+   /**
+    * True if the stream was obtained by invoking {@link #createExceptionReply()},
+    * false otherwise (usually no-exception reply).
+    */
+   boolean isExceptionReply()
+   {
+     return exceptionReply;
+   }
+ 
+   /**
+    * Compute the header offset, set the correct version number and codeset.
+    */
+   private void prepareStream()
+   {
+     buffer = new BufferedCdrOutput();
+     buffer.setOrb(orb());
+   }
+ 
+   /**
+    * Get the parameter stream, where the invocation arguments should be written
+    * if they are written into the stream directly.
+    */
+   public StreamBasedRequest getParameterStream()
+   {
+     m_parameter_buffer = new StreamBasedRequest();
+     m_parameter_buffer.request = this;
+     m_parameter_buffer.setOrb(poa.orb());
+     return m_parameter_buffer;
+   }
+ 
+   public byte[] get_object_id() throws NoContext
+   {
+     return Id;
+   }
+ 
+   public POA get_POA() throws NoContext
+   {
+     return poa;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/LocalServerRequest.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/LocalServerRequest.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/LocalServerRequest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/LocalServerRequest.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,199 ----
+ /* LocalServerRequest.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.gnuNamedValue;
+ 
+ import org.omg.CORBA.ARG_INOUT;
+ import org.omg.CORBA.ARG_OUT;
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.Context;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.NamedValue;
+ import org.omg.CORBA.ServerRequest;
+ import org.omg.CORBA.UnknownUserException;
+ 
+ /**
+  * Used to make local invocations via LocalRequest.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class LocalServerRequest
+   extends ServerRequest
+ {
+   /**
+    * The local request, on the base of that this instance is created.
+    */
+   final LocalRequest request;
+ 
+   /**
+    * Create a new instance.
+    */
+   public LocalServerRequest(LocalRequest _request)
+   {
+     request = _request;
+   }
+ 
+   /**
+    * Get the argument list that can be modified.
+    */
+   public void params(NVList args)
+   {
+     arguments(args);
+   }
+ 
+   /**
+    * Get contexts.
+    */
+   public Context ctx()
+   {
+     return request.ctx();
+   }
+ 
+   /**
+    * Get the operatin being performed.
+    */
+   public String operation()
+   {
+     return request.operation();
+   }
+ 
+   /**
+    * Get the argument list that can be modified.
+    * The direction depends on the size of the passed list.
+    * The empty list is filled with the request arguments.
+    * The non-empty list is used to set the request arguments.
+    */
+   public void arguments(NVList args)
+   {
+     NVList l = request.arguments();
+     NamedValue a;
+ 
+     try
+       {
+         if (args.count() == 0)
+           {
+             // Transfer to the passed parameter.
+             for (int i = 0; i < l.count(); i++)
+               {
+                 a = l.item(i);
+                 args.add_value(a.name(), a.value(), a.flags());
+               }
+           }
+         else
+           {
+             // Transfer from the passed parameter.
+             if (l.count() != args.count())
+               throw new BAD_PARAM("Argument number mismatch, current " +
+                                   l.count() + ", passed " + args.count()
+                                  );
+             try
+               {
+                 for (int i = 0; i < l.count(); i++)
+                   {
+                     a = l.item(i);
+                     if (a.flags() == ARG_INOUT.value ||
+                         a.flags() == ARG_OUT.value
+                        )
+                       {
+                         ((gnuNamedValue) a).setValue(args.item(i).value());
+                       }
+                   }
+               }
+             catch (ClassCastException cex)
+               {
+                 InternalError ierr = new InternalError();
+                 ierr.initCause(cex);
+                 throw ierr;
+               }
+           }
+       }
+     catch (Bounds ex)
+       {
+         InternalError ierr = new InternalError();
+         ierr.initCause(ex);
+         throw ierr;
+       }
+   }
+ 
+   /**
+    * Set the result.
+    */
+   public void set_result(Any result)
+   {
+     gnuNamedValue g = new gnuNamedValue();
+     g.setValue(result);
+     g.setFlags(ARG_OUT.value);
+     request.set_result(g);
+   }
+ 
+   /**
+    * Get the name of the method being called.
+    */
+   public String op_name()
+   {
+     return request.operation();
+   }
+ 
+   /**
+    * Set the exception that has been thrown.
+    */
+   public void set_exception(Any exc)
+   {
+     request.env().exception(new UnknownUserException(exc));
+   }
+ 
+   /**
+    * Set the result.
+    */
+   public void result(Any r)
+   {
+     set_result(r);
+   }
+ 
+   /**
+    * Set the exception.
+    */
+   public void except(Any exc)
+   {
+     set_exception(exc);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,293 ----
+ /* ORB_1_4.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.OrbFunctional;
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.Connected_objects.cObject;
+ import gnu.CORBA.DynAn.gnuDynAnyFactory;
+ import gnu.CORBA.Interceptor.ClientRequestInterceptors;
+ import gnu.CORBA.Interceptor.IORInterceptors;
+ import gnu.CORBA.Interceptor.Registrator;
+ import gnu.CORBA.Interceptor.ServerRequestInterceptors;
+ import gnu.CORBA.Interceptor.gnuIcCurrent;
+ import gnu.CORBA.Interceptor.gnuIorInfo;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.OBJECT_NOT_EXIST;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Policy;
+ import org.omg.CORBA.PolicyError;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.PortableInterceptor.PolicyFactory;
+ import org.omg.PortableServer.Servant;
+ import org.omg.PortableServer.POAManagerPackage.State;
+ import org.omg.PortableServer.POAPackage.InvalidPolicy;
+ 
+ import java.applet.Applet;
+ import java.util.Properties;
+ 
+ /**
+  * The ORB, supporting POAs that are the feature of jdk 1.4.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class ORB_1_4
+   extends OrbFunctional
+ {
+   /**
+    * The root POA.
+    */
+   public final gnuPOA rootPOA;
+ 
+   /**
+    * Maps the active threads to the invocation data ("POA Current's").
+    */
+   public gnuPoaCurrent currents = new gnuPoaCurrent();
+ 
+   /**
+    * Maps the active threads to the interceptor data ("Interceptor Current's").
+    */
+   public gnuIcCurrent ic_current = new gnuIcCurrent(this);
+ 
+   /**
+    * Creates dynamic anys.
+    */
+   public gnuDynAnyFactory factory = new gnuDynAnyFactory(this);
+ 
+   /**
+    * Calls the parent constructor and additionally puts the "RootPOA",
+    * "RootPOAManager", "POACurrent" and "DynAnyFactory" into initial references.
+    */
+   public ORB_1_4()
+   {
+     super();
+     try
+       {
+         rootPOA = new gnuPOA(null, "RootPOA", null, StandardPolicies.rootPoa(), this);
+       }
+     catch (InvalidPolicy ex)
+       {
+         // Invalid default policy set.
+         InternalError ierr = new InternalError();
+         ierr.initCause(ex);
+         throw ierr;
+       }
+     initial_references.put("RootPOA", rootPOA);
+     initial_references.put("RootPOAManager", rootPOA.the_POAManager());
+     initial_references.put("POACurrent", currents);
+     initial_references.put("DynAnyFactory", factory);
+     initial_references.put("PICurrent", ic_current);
+   }
+ 
+   /**
+    * If the super method detects that the object is not connected to this ORB,
+    * try to find and activate the object.
+    */
+   public String object_to_string(org.omg.CORBA.Object forObject)
+   {
+     try
+       {
+         return super.object_to_string(forObject);
+       }
+     catch (Exception ex)
+       {
+         try
+           {
+             AOM.Obj exists = rootPOA.findObject(forObject);
+             if (exists == null)
+               throw new OBJECT_NOT_EXIST(forObject == null ? "null"
+                 : forObject.toString());
+             else if (exists.poa instanceof gnuPOA)
+               ((gnuPOA) exists.poa).connect_to_orb(exists.key, forObject);
+             else
+               exists.poa.create_reference_with_id(exists.key,
+                 ((ObjectImpl) exists.object)._ids()[0]);
+           }
+         catch (Exception bex)
+           {
+             BAD_PARAM bad = new BAD_PARAM("Unable to activate " + forObject);
+             bad.initCause(bex);
+             throw bad;
+           }
+ 
+         return super.object_to_string(forObject);
+       }
+   }
+ 
+   /**
+    * Destroy all poas and then call the superclass method.
+    */
+   public void destroy()
+   {
+     // This will propagate through the whole POA tree.
+     rootPOA.destroy(true, false);
+ 
+     super.destroy();
+   }
+ 
+   /**
+    * Do interceptor registration.
+    *
+    * @param properties the properties, between those names the agreed prefix
+    * "org.omg.PortableInterceptor.ORBInitializerClass." is searched.
+    *
+    * @param args the string array, passed to the ORB.init
+    */
+   protected void registerInterceptors(Properties properties, String[] args)
+   {
+     Registrator registrator = new Registrator(this, properties, args);
+ 
+     policyFactories = registrator.m_policyFactories;
+ 
+     registrator.pre_init();
+     initial_references.putAll(registrator.getRegisteredReferences());
+     registrator.post_init();
+ 
+     if (registrator.hasIorInterceptors())
+       iIor = new IORInterceptors(registrator);
+ 
+     if (registrator.hasServerRequestInterceptors())
+       iServer = new ServerRequestInterceptors(registrator);
+ 
+     if (registrator.hasClientRequestInterceptors())
+       iClient = new ClientRequestInterceptors(registrator);
+ 
+     policyFactories = registrator.m_policyFactories;
+   }
+ 
+   /**
+    * Create IOR and allow registered interceptors to add additional components.
+    */
+   protected IOR createIOR(cObject ref)
+     throws BAD_OPERATION
+   {
+     IOR ior = super.createIOR(ref);
+     if (iIor != null)
+       {
+         AOM.Obj obj = rootPOA.findIorKey(ior.key);
+ 
+         gnuPOA poa;
+ 
+         // Null means that the object was connected to the ORB directly.
+         if (obj == null)
+           poa = rootPOA;
+         else
+           poa = obj.poa;
+ 
+         gnuIorInfo info = new gnuIorInfo(this, poa, ior);
+ 
+         // This may modify the ior.
+         iIor.establish_components(info);
+         iIor.components_established(info);
+       }
+     return ior;
+   }
+ 
+   /**
+    * Create policy using the previously registered factory.
+    */
+   public Policy create_policy(int type, Any value)
+     throws PolicyError
+   {
+     Integer policy = new Integer(type);
+ 
+     PolicyFactory forge = (PolicyFactory) policyFactories.get(policy);
+     if (forge == null)
+       throw new PolicyError("No factory registered for policy " + type,
+         (short) type);
+     else
+       return forge.create_policy(type, value);
+   }
+ 
+   /**
+    * Set the parameters and then register interceptors.
+    */
+   protected void set_parameters(Applet app, Properties props)
+   {
+     super.set_parameters(app, props);
+     registerInterceptors(props, new String[0]);
+   }
+ 
+   /**
+    * Set the parameters and then register interceptors.
+    */
+   protected void set_parameters(String[] para, Properties props)
+   {
+     super.set_parameters(para, props);
+     registerInterceptors(props, para);
+   }
+   
+   /**
+    * This method is called by RMI-IIOP {@link javax.rmi.Tie#orb(ORB)}, passing
+    * <code>this</code> as parameter. The ORB will try to connect that tie as
+    * one of its objects, if it is not already connected. If the wrapper is an
+    * instance of Servant this method also activates the root poa (if not already
+    * active).
+    */
+   public void set_delegate(java.lang.Object wrapper)
+   {
+     if (wrapper instanceof org.omg.CORBA.Object)
+       {
+         org.omg.CORBA.Object object = (org.omg.CORBA.Object) wrapper;
+         if (connected_objects.getKey(object) == null)
+           connect(object);
+       }
+     else if (wrapper instanceof Servant)
+       {
+         Servant s = (Servant) wrapper;
+         if (rootPOA.findServant(s) == null)
+           try
+             {
+               rootPOA.servant_to_reference(s);
+               if (rootPOA.the_POAManager().get_state().value() == State._HOLDING)
+                 rootPOA.the_POAManager().activate();
+             }
+           catch (Exception e)
+             {
+               BAD_OPERATION bad = new BAD_OPERATION("Unable to connect "
+                 + wrapper + " to " + this);
+               throw bad;
+             }
+       }
+   }  
+ 
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/ServantDelegateImpl.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/ServantDelegateImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/ServantDelegateImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/ServantDelegateImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,232 ----
+ /* ServantDelegateImpl.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.Unexpected;
+ 
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.ORBPackage.InvalidName;
+ import org.omg.CORBA.Object;
+ import org.omg.PortableServer.CurrentPackage.NoContext;
+ import org.omg.PortableServer.POA;
+ import org.omg.PortableServer.POAHelper;
+ import org.omg.PortableServer.Servant;
+ import org.omg.PortableServer.portable.Delegate;
+ 
+ /**
+  * The implementation of the servant delegate for the locally existing
+  * servant.The associated servant that must also implement the
+  * {@link InvokeHandler} interface. Each servant requires a separate
+  * instance of this delegate and can serve a single object only.
+  * Hence the fields are final, but the delegate is typically reused
+  * unless the same servant is connected to different objects.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class ServantDelegateImpl
+   implements Delegate
+ {
+   /**
+    * The servant, associated with this object.
+    */
+   final Servant servant;
+ 
+   /**
+    * The servant (not object) id.
+    */
+   final byte[] servant_id;
+ 
+   /**
+    * The POA, where the servant is connected.
+    */
+   final gnuPOA poa;
+ 
+   /**
+    * The object, exposed as an object, served by this servant.
+    */
+   final gnuServantObject object;
+ 
+   /**
+    * Create the delegat for the servant that will be connected to the
+    * given poa. The method is normally called from inside of gnuPOA.
+    * The constructor sets the newly created delegate as the delegate to this
+    * servant by calling Servant._set_delegate.
+    *
+    * @param a_poa the poa.
+    * @param a_servant the servant.
+    * @param a_servant_id the servant id.
+    */
+   public ServantDelegateImpl(Servant a_servant, gnuPOA a_poa, byte[] a_servant_id)
+   {
+     poa = a_poa;
+     servant = a_servant;
+     servant_id = a_servant_id;
+     servant._set_delegate(this);
+     object =
+       new gnuServantObject(servant, servant_id, (ORB_1_4) servant._orb(), a_poa);
+     object._set_delegate(new LocalDelegate(object, poa, a_servant_id));
+   }
+ 
+   /**
+    * Check if this object could be named by the given repository id.
+    * @param idl_id the repository id to check.
+    *
+    * @return true if it is one of the possible repository ids of this
+    * object.
+    */
+   public boolean is_a(Servant a_servant, String idl_id)
+   {
+     same(a_servant);
+ 
+     String[] maybe = object.repository_ids;
+     if (maybe == null)
+       maybe = servant._all_interfaces(poa, object.Id);
+     for (int i = 0; i < maybe.length; i++)
+       {
+         if (maybe [ i ].equals(idl_id))
+           return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Return the ORB's default POA.
+    */
+   public POA default_POA(Servant a_servant)
+   {
+     same(a_servant);
+     try
+       {
+         return POAHelper.narrow(orb(a_servant).resolve_initial_references("RootPOA"));
+       }
+     catch (InvalidName ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /**
+    * Get ORB.
+    */
+   public ORB orb(Servant a_servant)
+   {
+     same(a_servant);
+     return poa.orb();
+   }
+ 
+   /**
+    * Get the object, exposing the servant.
+    */
+   public Object this_object(Servant a_servant)
+   {
+     same(a_servant);
+     try
+       {
+         return poa.aom.get(poa.m_orb.currents.get_object_id()).object;
+       }
+     catch (NoContext ex)
+       {
+         return object;
+       }
+   }
+ 
+   /**
+    * Not supported.
+    *
+    * @specnote Same as for Sun up till 1.5 inclusive.
+    */
+   public Object get_interface_def(Servant a_servant)
+   {
+     same(a_servant);
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /**
+    * Get the Id of the object being currently served.
+    */
+   public byte[] object_id(Servant a_servant)
+   {
+     same(a_servant);
+     try
+       {
+         byte[] id = poa.m_orb.currents.get_object_id();
+         return id;
+       }
+     catch (NoContext ex)
+       {
+         return object.Id;
+       }
+   }
+ 
+   /**
+    * Always returns false;
+    */
+   public boolean non_existent(Servant a_servant)
+   {
+     same(a_servant);
+     return false;
+   }
+ 
+   /**
+    * Return the associated POA.
+    */
+   public POA poa(Servant a_servant)
+   {
+     same(a_servant);
+     try
+       {
+         return poa.m_orb.currents.get_POA();
+       }
+     catch (NoContext ex)
+       {
+         return poa;
+       }
+   }
+ 
+   /**
+    * Checks if the passed servant is the same as the servant, associated with
+    * this delegate. This class requires a single servant per delegate.
+    */
+   void same(Servant some_servant)
+   {
+     if (servant != some_servant)
+       throw new InternalError("Only one servant per delegate is supported.");
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/StandardPolicies.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/StandardPolicies.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/StandardPolicies.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/StandardPolicies.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,128 ----
+ /* StandardPolicies.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import org.omg.CORBA.Policy;
+ import org.omg.PortableServer.IdAssignmentPolicyValue;
+ import org.omg.PortableServer.IdUniquenessPolicyValue;
+ import org.omg.PortableServer.ImplicitActivationPolicyValue;
+ import org.omg.PortableServer.LifespanPolicyValue;
+ import org.omg.PortableServer.RequestProcessingPolicyValue;
+ import org.omg.PortableServer.ServantRetentionPolicyValue;
+ import org.omg.PortableServer.ThreadPolicyValue;
+ 
+ import java.util.ArrayList;
+ 
+ /**
+  * Contains the frequently uset POA policy sets. The policy
+  * arrays are package private for security reasons, the cloned
+  * copies are returned.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class StandardPolicies
+ {
+   /**
+    * The default policy set, as defined in OMG specs. This is also
+    * the policy set for the root POA.
+    */
+   private static final AccessiblePolicy[] rootPOASet =
+     new AccessiblePolicy[]
+     {
+       new gnuThreadPolicy(ThreadPolicyValue.ORB_CTRL_MODEL),
+       new gnuLifespanPolicy(LifespanPolicyValue.TRANSIENT),
+       new gnuIdUniquenessPolicy(IdUniquenessPolicyValue.UNIQUE_ID),
+       new gnuIdAssignmentPolicy(IdAssignmentPolicyValue.SYSTEM_ID),
+       new gnuServantRetentionPolicy(ServantRetentionPolicyValue.RETAIN),
+       new gnuRequestProcessingPolicy(RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY),
+       new gnuImplicitActivationPolicy(ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION)
+     };
+ 
+   /**
+    * Return the policy set, applicable for the root POA, as defined
+    * in OMG specs.
+    */
+   public static Policy[] rootPoa()
+   {
+     Policy[] p = new Policy[ rootPOASet.length ];
+     System.arraycopy(rootPOASet, 0, p, 0, p.length);
+     return p;
+   }
+ 
+   /**
+    * Convert the potentially incomplete policy array into array, containing
+    * the complete policy set.
+    *
+    * @param policies the policy list, may be incomplete (even zero size).
+    *
+    * @return the complete policy array. The missing, but needed policies
+    * are added with they default values.
+    */
+   public static Policy[] withDefault(Policy[] policies)
+   {
+     ArrayList current = new ArrayList(rootPOASet.length);
+     Policy p_default;
+     boolean specified;
+ 
+     for (int i = 0; i < rootPOASet.length; i++)
+       {
+         p_default = rootPOASet [ i ];
+         specified = false;
+         ForThis:
+         for (int j = 0; j < policies.length; j++)
+           {
+             if (policies [ j ].policy_type() == p_default.policy_type())
+               {
+                 specified = true;
+                 current.add(policies [ j ]);
+                 break ForThis;
+               }
+           }
+         if (!specified)
+           current.add(p_default.copy());
+       }
+ 
+     Policy[] complete = new Policy[ current.size() ];
+     for (int i = 0; i < complete.length; i++)
+       {
+         complete [ i ] = (Policy) current.get(i);
+       }
+     return complete;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuAdapterActivator.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuAdapterActivator.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuAdapterActivator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuAdapterActivator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,81 ----
+ /* gnuAdapterActivator.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import org.omg.CORBA.LocalObject;
+ import org.omg.PortableServer.AdapterActivator;
+ import org.omg.PortableServer.POA;
+ 
+ /**
+  * Defines a simple adapter activator.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuAdapterActivator
+   extends LocalObject
+   implements AdapterActivator
+ {
+   /**
+    * Create a new POA on the parent, using the parent policy set
+    * from the suitable parent of grandparend and with independent
+    * POA manager (passing null to the createPOA).
+    *
+    * @param parent a parent. Either this parent or one of its
+    * grandparents must be gnuAbstractPOA, able to provide a
+    * policy set.
+    *
+    * @param child_name the name of the child being created.
+    *
+    * @return true on success or false if no gnuAbstractPOA
+    * found till the root poa.
+    */
+   public boolean unknown_adapter(POA parent, String child_name)
+   {
+     try
+       {
+         POA n = parent.create_POA(child_name, null, StandardPolicies.rootPoa());
+         n.the_POAManager().activate();
+       }
+     catch (Exception ex)
+       {
+         return false;
+       }
+     return true;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuForwardRequest.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuForwardRequest.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuForwardRequest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuForwardRequest.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,90 ----
+ /* gnuForwardRequest.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.GIOP.ReplyHeader;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.portable.ObjectImpl;
+ 
+ /**
+  * The class, indicating that the request should be forwarded to another
+  * target. We cannot use ForwardRequest because the exception is throws
+  * from methods that does not declare throwing it. Hence must be
+  * RuntimeException.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuForwardRequest
+   extends RuntimeException
+ {
+   /**
+    * Use serialVersionUID (v1.4) for interoperability.
+    */
+   private static final long serialVersionUID = -1L;
+ 
+   /**
+    * The object reference, indicating the new location of the invocation target.
+    */
+   public ObjectImpl forward_reference;
+ 
+   /**
+    * This information shows if we use LOCATION_FORWARD or
+    * LOCATION_FORWARD_PERM in request. By defalult, LOCATION_FORWARD
+    * is always used. To use LOCATION_FORWARD_PERM, this exception should
+    * be thrown from the servant manager instead of ForwardRequest,
+    * with this field set to  ReplyHeader.LOCATION_FORWARD_PERM.
+    */
+   public byte forwarding_code = ReplyHeader.LOCATION_FORWARD;
+ 
+   /**
+    * Create the ForwardRequest with explaining message and
+    * initialising the object reference to the given value.
+    *
+    * @param why a string, explaining, why this exception has been thrown.
+    * @param a_forward_reference a value for forward_reference.
+    */
+   public gnuForwardRequest(org.omg.CORBA.Object a_forward_reference)
+   {
+     if (a_forward_reference instanceof ObjectImpl)
+       this.forward_reference = (ObjectImpl) a_forward_reference;
+     else
+       throw new BAD_PARAM("ObjectImpl expected");
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuIdAssignmentPolicy.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuIdAssignmentPolicy.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuIdAssignmentPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuIdAssignmentPolicy.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,80 ----
+ /* gnuIdAssignmentPolicy.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA._PolicyImplBase;
+ 
+ import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID;
+ import org.omg.PortableServer.IdAssignmentPolicy;
+ import org.omg.PortableServer.IdAssignmentPolicyValue;
+ 
+ /**
+  * Implementation of the id assignment policy.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuIdAssignmentPolicy
+   extends _PolicyImplBase
+   implements IdAssignmentPolicy, AccessiblePolicy
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1L;
+ 
+   /**
+    * Create the policy.
+    *
+    * @param v a value for the policy.
+    */
+   public gnuIdAssignmentPolicy(IdAssignmentPolicyValue v)
+   {
+     super(ID_ASSIGNMENT_POLICY_ID.value, v, v.value(),
+           "IDL:org.omg/PortableServer/IdAssignmentPolicy:1.0"
+          );
+   }
+ 
+   /**
+    * Get the value for the policy that was passed in a constructor.
+    */
+   public IdAssignmentPolicyValue value()
+   {
+     return (IdAssignmentPolicyValue) getValue();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuIdUniquenessPolicy.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuIdUniquenessPolicy.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuIdUniquenessPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuIdUniquenessPolicy.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,80 ----
+ /* gnuIdUniquenessPolicy.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA._PolicyImplBase;
+ 
+ import org.omg.PortableServer.ID_UNIQUENESS_POLICY_ID;
+ import org.omg.PortableServer.IdUniquenessPolicy;
+ import org.omg.PortableServer.IdUniquenessPolicyValue;
+ 
+ /**
+  * Implementation of the id uniqueness policy.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuIdUniquenessPolicy
+   extends _PolicyImplBase
+   implements IdUniquenessPolicy, AccessiblePolicy
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1L;
+ 
+   /**
+    * Create the policy.
+    *
+    * @param v a value for the policy.
+    */
+   public gnuIdUniquenessPolicy(IdUniquenessPolicyValue v)
+   {
+     super(ID_UNIQUENESS_POLICY_ID.value, v, v.value(),
+           "IDL:org.omg/PortableServer/IdUniquenessPolicy:1.0"
+          );
+   }
+ 
+   /**
+    * Get the value for the policy that was passed in a constructor.
+    */
+   public IdUniquenessPolicyValue value()
+   {
+     return (IdUniquenessPolicyValue) getValue();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuImplicitActivationPolicy.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuImplicitActivationPolicy.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuImplicitActivationPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuImplicitActivationPolicy.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,80 ----
+ /* gnuImplicitActivationPolicy.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA._PolicyImplBase;
+ 
+ import org.omg.PortableServer.IMPLICIT_ACTIVATION_POLICY_ID;
+ import org.omg.PortableServer.ImplicitActivationPolicy;
+ import org.omg.PortableServer.ImplicitActivationPolicyValue;
+ 
+ /**
+  * Implementation of the implicit activation policy.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuImplicitActivationPolicy
+   extends _PolicyImplBase
+   implements ImplicitActivationPolicy, AccessiblePolicy
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1L;
+ 
+   /**
+    * Create the policy.
+    *
+    * @param v a value for the policy.
+    */
+   public gnuImplicitActivationPolicy(ImplicitActivationPolicyValue v)
+   {
+     super(IMPLICIT_ACTIVATION_POLICY_ID.value, v, v.value(),
+           "IDL:org.omg/PortableServer/ImplicitActivationPolicy:1.0"
+          );
+   }
+ 
+   /**
+    * Get the value for the policy that was passed in a constructor.
+    */
+   public ImplicitActivationPolicyValue value()
+   {
+     return (ImplicitActivationPolicyValue) getValue();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuLifespanPolicy.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuLifespanPolicy.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuLifespanPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuLifespanPolicy.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,80 ----
+ /* gnuLifespanPolicy.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA._PolicyImplBase;
+ 
+ import org.omg.PortableServer.LIFESPAN_POLICY_ID;
+ import org.omg.PortableServer.LifespanPolicy;
+ import org.omg.PortableServer.LifespanPolicyValue;
+ 
+ /**
+  * The implementation of the life span policy.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuLifespanPolicy
+   extends _PolicyImplBase
+   implements LifespanPolicy, AccessiblePolicy
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1L;
+ 
+   /**
+    * Create the policy.
+    *
+    * @param v a value for the policy.
+    */
+   public gnuLifespanPolicy(LifespanPolicyValue v)
+   {
+     super(LIFESPAN_POLICY_ID.value, v, v.value(),
+           "IDL:org.omg/PortableServer/LifespanPolicy:1.0"
+          );
+   }
+ 
+   /**
+    * Get the value for the policy that was passed in a constructor.
+    */
+   public LifespanPolicyValue value()
+   {
+     return (LifespanPolicyValue) getValue();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuPOA.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuPOA.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuPOA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuPOA.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1806 ----
+ /* gnuAbstractPOA.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.HashSet;
+ 
+ import org.omg.CORBA.BAD_INV_ORDER;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.OBJ_ADAPTER;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Object;
+ import org.omg.CORBA.Policy;
+ import org.omg.CORBA.SetOverrideType;
+ import org.omg.CORBA.TRANSIENT;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.PortableInterceptor.NON_EXISTENT;
+ import org.omg.PortableInterceptor.ObjectReferenceFactory;
+ import org.omg.PortableInterceptor.ObjectReferenceTemplate;
+ import org.omg.PortableInterceptor.ObjectReferenceTemplateHelper;
+ import org.omg.PortableServer.AdapterActivator;
+ import org.omg.PortableServer.ForwardRequest;
+ import org.omg.PortableServer.IdAssignmentPolicy;
+ import org.omg.PortableServer.IdAssignmentPolicyValue;
+ import org.omg.PortableServer.IdUniquenessPolicy;
+ import org.omg.PortableServer.IdUniquenessPolicyValue;
+ import org.omg.PortableServer.ImplicitActivationPolicy;
+ import org.omg.PortableServer.ImplicitActivationPolicyValue;
+ import org.omg.PortableServer.LifespanPolicy;
+ import org.omg.PortableServer.LifespanPolicyValue;
+ import org.omg.PortableServer.POA;
+ import org.omg.PortableServer.POAManager;
+ import org.omg.PortableServer.RequestProcessingPolicy;
+ import org.omg.PortableServer.RequestProcessingPolicyValue;
+ import org.omg.PortableServer.SERVANT_RETENTION_POLICY_ID;
+ import org.omg.PortableServer.Servant;
+ import org.omg.PortableServer.ServantActivator;
+ import org.omg.PortableServer.ServantLocator;
+ import org.omg.PortableServer.ServantManager;
+ import org.omg.PortableServer.ServantRetentionPolicy;
+ import org.omg.PortableServer.ServantRetentionPolicyValue;
+ import org.omg.PortableServer.ThreadPolicy;
+ import org.omg.PortableServer.ThreadPolicyValue;
+ import org.omg.PortableServer.POAManagerPackage.State;
+ import org.omg.PortableServer.POAPackage.AdapterAlreadyExists;
+ import org.omg.PortableServer.POAPackage.AdapterNonExistent;
+ import org.omg.PortableServer.POAPackage.InvalidPolicy;
+ import org.omg.PortableServer.POAPackage.NoServant;
+ import org.omg.PortableServer.POAPackage.ObjectAlreadyActive;
+ import org.omg.PortableServer.POAPackage.ObjectNotActive;
+ import org.omg.PortableServer.POAPackage.ServantAlreadyActive;
+ import org.omg.PortableServer.POAPackage.ServantNotActive;
+ import org.omg.PortableServer.POAPackage.WrongAdapter;
+ import org.omg.PortableServer.POAPackage.WrongPolicy;
+ 
+ import gnu.CORBA.OrbFunctional;
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ 
+ /**
+  * Our POA implementation.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuPOA
+   extends LocalObject
+   implements POA, ObjectReferenceFactory
+ {
+   /**
+    * The object reference template, associated with this POA.
+    * 
+    * @since 1.5
+    */
+   class RefTemplate implements ObjectReferenceTemplate
+   {
+     /** 
+      * Use serialVersionUID for interoperability. 
+      */
+     private static final long serialVersionUID = 1;
+     
+     RefTemplate()
+     {
+       // The adapter name is computed once.
+       ArrayList names = new ArrayList();
+       names.add(the_name());
+ 
+       POA poa = the_parent();
+       while (poa != null)
+         {
+           names.add(poa.the_name());
+           poa = poa.the_parent();
+         }
+ 
+       // Fill in the string array in reverse (more natural) order,
+       // root POA first.
+       m_adapter_name = new String[names.size()];
+ 
+       for (int i = 0; i < m_adapter_name.length; i++)
+         m_adapter_name[i] = (String) names.get(m_adapter_name.length - i - 1);
+     }
+     
+     /**
+      * The adapter name
+      */
+     final String[] m_adapter_name;
+     
+     /**
+      * Get the name of this POA.
+      */
+     public String[] adapter_name()
+     {
+       return (String[]) m_adapter_name.clone();
+     }
+ 
+     /**
+      * Get the ORB id.
+      */
+     public String orb_id()
+     {
+       return m_orb.orb_id;
+     }
+ 
+     /**
+      * Get the server id.
+      */
+     public String server_id()
+     {
+       return OrbFunctional.server_id;
+     }
+ 
+     /**
+      * Create the object.
+      */
+     public Object make_object(String repositoryId, byte[] objectId)
+     {
+       return create_reference_with_id(objectId, repositoryId);
+     }
+ 
+     /**
+      * Get the array of truncatible repository ids.
+      */
+     public String[] _truncatable_ids()
+     {
+       return ref_template_ids;
+     }
+   }
+   
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The adapter reference template.
+    */
+   ObjectReferenceTemplate refTemplate;
+   
+   /**
+    * The reference template repository ids. Defined outside the class as it
+    * cannot have static members.
+    */
+   final static String[] ref_template_ids = 
+     new String[] { ObjectReferenceTemplateHelper.id() };
+   
+   /**
+    * The active object map, mapping between object keys, objects and servants.
+    */
+   public final AOM aom = new AOM();
+ 
+   /**
+    * The children of this POA.
+    */
+   final ArrayList children = new ArrayList();
+ 
+   /**
+    * The name of this POA.
+    */
+   final String name;
+ 
+   /**
+    * The parent of this POA (null for the root POA).
+    */
+   final POA parent;
+ 
+   /**
+    * The ior key signature, indicating, that the ior key is encoded using
+    * internal agreements of this implementation (0x'free').
+    */
+   static final int SIGNATURE = 0x66726565;
+ 
+   /**
+    * The adapter activator for this POA, null if no activator is set.
+    */
+   AdapterActivator m_activator;
+ 
+   /**
+    * The POA manager for this POA.
+    */
+   POAManager m_manager;
+ 
+   /**
+    * The servant manager (servant activator) for this POA.
+    */
+   ServantActivator servant_activator;
+ 
+   /**
+    * The servant manager (servant locator) for this POA.
+    */
+   ServantLocator servant_locator;
+ 
+   /**
+    * The default servant, if on is in use.
+    */
+   Servant default_servant;
+ 
+   /**
+    * The cached poa id value, computed once.
+    */
+   private byte[] m_poa_id;
+ 
+   /**
+    * The all policy values that apply to this POA.
+    * The used policy values are singletons, unique between policies.
+    */
+   private final HashSet m_policies;
+ 
+   /**
+    * An array of the set policies.
+    */
+   Policy[] s_policies;
+ 
+   /**
+    * The ORB, where the POA is connected.
+    */
+   final ORB_1_4 m_orb;
+ 
+   /**
+    * When true, the POA is being destroyed or is destroyed.
+    */
+   boolean m_inDestruction;
+ 
+   /**
+    * True if the active object map is used by this POA.
+    * The value is moved into separate boolean value due
+    * necessity of the frequent checks.
+    */
+   public final boolean retain_servant;
+   
+   /**
+    * The object reference factory, used to create the new object
+    * references.
+    */
+   ObjectReferenceFactory m_object_factory = this;
+ 
+   /**
+    * Create a new abstract POA.
+    *
+    * @param a_parent the parent of this POA.
+    * @param a_name a name for this POA.
+    * @param a_manager a manager for this POA. If null, a new
+    * {@link gnuPOAManager} will be instantiated.
+    * @param a_policies an array of policies that apply to this POA.
+    * @param an_orb an ORB for this POA.
+    */
+   public gnuPOA(gnuPOA a_parent, String a_name, POAManager a_manager,
+                 Policy[] a_policies, ORB_1_4 an_orb
+                )
+          throws InvalidPolicy
+   {
+     // Add default policies.
+     Policy[] all_policies = StandardPolicies.withDefault(a_policies);
+ 
+     name = a_name;
+     parent = a_parent;
+     m_orb = an_orb;
+ 
+     if (a_manager != null)
+       m_manager = a_manager;
+     else
+       m_manager = new gnuPOAManager();
+ 
+     if (m_manager instanceof gnuPOAManager)
+       {
+         gnuPOAManager g = (gnuPOAManager) m_manager;
+         g.addPoa(this);
+       }
+ 
+     m_policies = new HashSet(all_policies.length);
+ 
+     s_policies = new Policy[ all_policies.length ];
+     for (int i = 0; i < s_policies.length; i++)
+       {
+         s_policies [ i ] = all_policies [ i ].copy();
+         m_policies.add(((AccessiblePolicy) s_policies [ i ]).getValue());
+       }
+ 
+     retain_servant = applies(ServantRetentionPolicyValue.RETAIN);
+ 
+     validatePolicies(a_policies);
+     
+     refTemplate = new RefTemplate();
+   }
+ 
+   /**
+    * Wait while at least one of the threads in this POA is actively
+    * processing one of requests.
+    */
+   public void waitWhileRunning()
+   {
+     // First pause.
+     long time = 1;
+ 
+     // Maximal duration between checks.
+     long max = 500;
+ 
+     boolean runs;
+ 
+     do
+       {
+         runs = m_orb.currents.has(this);
+ 
+         if (runs)
+           {
+             // Avoid taking CPU resources
+             // from the thread that is running.
+             try
+               {
+                 Thread.sleep(time);
+                 time = time * 2;
+                 if (time > max)
+                   time = max;
+               }
+             catch (InterruptedException ex)
+               {
+               }
+           }
+       }
+     while (runs);
+   }
+ 
+   /**
+    * Etherealize all objects, associated with this POA. Invoked from the
+    * {@link gnuPOAManager} only if it is known that the servant_activator
+    * holds non-null value.
+    */
+   protected void etherealizeAll()
+   {
+     if (servant_activator == null)
+       return;
+ 
+     ArrayList keys = new ArrayList();
+     keys.addAll(aom.keySet());
+ 
+     byte[] key;
+     AOM.Obj obj;
+     boolean last;
+     for (int i = 0; i < keys.size(); i++)
+       {
+         key = (byte[]) keys.get(i);
+         obj = aom.get(key);
+ 
+         if (obj.poa == this)
+           {
+             aom.remove(key);
+ 
+             if (!obj.isDeactiveted())
+               {
+                 // Check if the servant still stays under the other key.
+                 last = aom.findServant(obj.servant) == null;
+                 servant_activator.etherealize(obj.key, this, obj.servant, true,
+                                               last
+                                              );
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Create an instance of the POA with the given features.
+    * This method is not responsible for duplicate checking
+    * or adding the returned instance to any possible table.
+    *
+    * @param child_name the name of the poa being created.
+    * @param manager the poa manager (never null).
+    * @param policies the array of policies.
+    * @param an_orb the ORB for this POA.
+    *
+    * @return the created POA.
+    *
+    * @throws InvalidPolicy for conflicting or otherwise invalid policies.|
+    */
+   protected POA createPoaInstance(String child_name, POAManager a_manager,
+                                   Policy[] policies, ORB_1_4 an_orb
+                                  )
+                            throws InvalidPolicy
+   {
+     POAManager some_manager =
+       a_manager == null ? new gnuPOAManager() : a_manager;
+ 
+     if (some_manager instanceof gnuPOAManager)
+       {
+         ((gnuPOAManager) some_manager).addPoa(this);
+       }
+ 
+     return new gnuPOA(this, child_name, some_manager, policies, an_orb);
+   }
+ 
+   /**
+    * Check if the given policy value applies to this POA.
+    *
+    * @param policy_value a policy value to check. The policy values are
+    * singletons and unique between the different policies, so the policy
+    * type is not passed.
+    *
+    * @return true if the policy value applies, false otherwise.
+    */
+   public final boolean applies(java.lang.Object policy_value)
+   {
+     return m_policies.contains(policy_value);
+   }
+ 
+   /**
+    * Check for the presence of the required policy.
+    *
+    * @param policy_value a policy value to check.
+    *
+    * @throws WrongPolicy if the required policy value is not applicable.
+    */
+   public final void required(java.lang.Object policy_value)
+                       throws WrongPolicy
+   {
+     if (!applies(policy_value))
+       throw new WrongPolicy(policy_value + " policy required.");
+   }
+ 
+   /**
+    * Check for the absence of the given policy.
+    *
+    * @param policy_value a policy value to check.
+    *
+    * @throws WrongPolicy if the passed policy value is applicable.
+    */
+   public final void excluding(java.lang.Object policy_value)
+                        throws WrongPolicy
+   {
+     if (applies(policy_value))
+       throw new WrongPolicy(policy_value + " policy applies.");
+   }
+ 
+   /**
+   * Find and optionally activate the child POA with the given name.
+   *
+   * @param poa_name the name of the POA to find.
+   * @param activate_it if the child with the specified name is not found
+   * or inactive and this parameter is true, the target POA activator is
+   * invoked to activate that child. If this succeeds, that child POA
+   * is returned.
+   *
+   * @throws AdapterNonExistent if no active child with the given name
+   * is found and one of the following is true:
+   * a) the target POA has no associated
+   * {@link AdapterActivator}. b) that activator fails to activate the
+   * child POA. c) <code>activate_id</code> = false.
+   */
+   public POA find_POA(String poa_name, boolean activate_it)
+                throws AdapterNonExistent
+   {
+     POA child;
+     for (int i = 0; i < children.size(); i++)
+       {
+         child = (POA) children.get(i);
+         if (child.the_name().equals(poa_name))
+           return child;
+       }
+ 
+     if (activate_it && m_activator != null)
+       {
+         boolean activated = m_activator.unknown_adapter(this, poa_name);
+         if (!activated)
+           throw new AdapterNonExistent(poa_name + " activation failed.");
+ 
+         // Tha activator should add the child to the childrent table.
+         for (int i = 0; i < children.size(); i++)
+           {
+             child = (POA) children.get(i);
+             if (child.the_name().equals(poa_name))
+               return child;
+           }
+         throw new AdapterNonExistent(poa_name + " not created. ");
+       }
+     else
+       throw new AdapterNonExistent(poa_name);
+   }
+ 
+   /**
+    * Generate the Object Id for the given servant and add the servant to the
+    * Active Object Map using this Id a a key. If the servant activator is set,
+    * its incarnate method will be called.
+    * 
+    * @param a_servant a servant that would serve the object with the returned
+    * Object Id. If null is passed, under apporoprate policies the servant
+    * activator is invoked.
+    * 
+    * @return the generated objert Id for the given servant.
+    * 
+    * @throws ServantAlreadyActive if this servant is already in the Active
+    * Object Map and the UNIQUE_ID policy applies.
+    * 
+    * @throws WrongPolicy if the required policies SYSTEM_ID and RETAIN do not
+    * apply to this POA.
+    */
+   public byte[] activate_object(Servant a_servant)
+     throws ServantAlreadyActive, WrongPolicy
+   {
+     checkDiscarding();
+     required(ServantRetentionPolicyValue.RETAIN);
+     required(IdAssignmentPolicyValue.SYSTEM_ID);
+ 
+     AOM.Obj exists = aom.findServant(a_servant);
+ 
+     if (exists != null)
+       {
+         if (exists.isDeactiveted())
+           {
+             // If exists but deactivated, activate and return
+             // the existing key.
+             exists.setDeactivated(false);
+             incarnate(exists, exists.key, a_servant, false);
+             return exists.key;
+           }
+         else if (applies(IdUniquenessPolicyValue.UNIQUE_ID))
+           throw new ServantAlreadyActive();
+ 
+         // It multiple ids are allowed, exit block allowing repetetive
+         // activations.
+       }
+ 
+     byte[] object_key = AOM.getFreeId();
+     ServantDelegateImpl delegate = new ServantDelegateImpl(a_servant, this,
+       object_key);
+     create_and_connect(object_key,
+       a_servant._all_interfaces(this, object_key)[0], delegate);
+     return object_key;
+   }
+ 
+   /**
+    * Add the given servant to the Active Object Map as a servant for the object
+    * with the provided Object Id. If the servant activator is set, its incarnate
+    * method will be called.
+    * 
+    * @param an_Object_Id an object id for the given object.
+    * @param a_servant a servant that will serve the object with the given Object
+    * Id. If null is passed, under apporoprate policies the servant activator is
+    * invoked.
+    * 
+    * @throws ObjectAlreadyActive if the given object id is already in the Active
+    * Object Map.
+    * @throws ServantAlreadyActive if the UNIQUE_ID policy applies and this
+    * servant is already in use.
+    * @throws WrongPolicy if the required RETAIN policy does not apply to this
+    * POA.
+    * @throws BAD_PARAM if the passed object id is invalid due any reason.
+    */
+   public void activate_object_with_id(byte[] an_Object_Id, Servant a_servant)
+                                throws ServantAlreadyActive, ObjectAlreadyActive,
+                                       WrongPolicy
+   {
+     activate_object_with_id(an_Object_Id, a_servant, false);
+   }
+ 
+   /**
+    * Same as activate_object_with_id, but permits gnuForwardRequest forwarding
+    * exception. This is used when the activation is called from the remote
+    * invocation context and we have possibility to return the forwarding
+    * message.
+    */
+   public void activate_object_with_id(byte[] an_Object_Id, Servant a_servant,
+     boolean use_forwarding)
+     throws ServantAlreadyActive, ObjectAlreadyActive, WrongPolicy
+   {
+     checkDiscarding();
+     required(ServantRetentionPolicyValue.RETAIN);
+ 
+     // If the UNIQUE_ID applies, the servant being passed must not be
+     // already active.
+     if (applies(IdUniquenessPolicyValue.UNIQUE_ID))
+       {
+         AOM.Obj sx = aom.findServant(a_servant, false);
+         if (sx != null)
+           throw new ServantAlreadyActive();
+       }
+ 
+     AOM.Obj exists = aom.get(an_Object_Id);
+     if (exists != null)
+       {
+         if (exists.servant == null)
+           {
+             locateServant(an_Object_Id, a_servant, exists, use_forwarding);
+             exists.setDeactivated(false);
+           }
+         else if (exists.isDeactiveted())
+           {
+             exists.setDeactivated(false);
+             incarnate(exists, an_Object_Id, a_servant, use_forwarding);
+           }
+         else
+           throw new ObjectAlreadyActive();
+       }
+     else
+       {
+         ServantDelegateImpl delegate = new ServantDelegateImpl(a_servant, this,
+           an_Object_Id);
+         create_and_connect(an_Object_Id, a_servant._all_interfaces(this,
+           an_Object_Id)[0], delegate);
+       }
+   }
+ 
+   /**
+    * Locate the servant for this object Id and connect it to ORB.
+    * 
+    * @param an_Object_Id the object id.
+    * @param a_servant the servant (may be null).
+    * @param exists an existing active object map entry.
+    * @param use_forwarding allow to throw the gnuForwardRequest if the activator
+    * throws ForwardRequest.
+    * 
+    * @throws OBJ_ADAPTER minor 4 if the servant cannot be located (the required
+    * servant manager may be missing).
+    */
+   private void locateServant(byte[] an_Object_Id, Servant a_servant,
+                              AOM.Obj exists, boolean use_forwarding
+                             )
+                       throws InternalError
+   {
+     // An object was created with create_reference.
+     gnuServantObject object = (gnuServantObject) exists.object;
+     if (servant_activator != null)
+       {
+         exists.setServant(incarnate(exists, an_Object_Id, a_servant,
+                                     use_forwarding
+                                    )
+                          );
+       }
+     else if (default_servant != null)
+       {
+         exists.setServant(default_servant);
+       }
+     if (exists.servant == null)
+       {
+         exists.setServant(a_servant);
+       }
+     if (exists.servant == null)
+       {
+         throw new OBJ_ADAPTER("no servant", 4, CompletionStatus.COMPLETED_NO);
+       }
+ 
+     ServantDelegateImpl delegate =
+       new ServantDelegateImpl(exists.servant, this, an_Object_Id);
+     exists.servant._set_delegate(delegate);
+     object.setServant(exists.servant);
+     connect_to_orb(an_Object_Id, delegate.object);
+   }
+ 
+   /**
+    * Deactivate object with the given id.
+    *
+    * The deactivated object will continue to process requests that arrived
+    * before decativation. If this POA has the associated
+    * servant manager, a {@link ServantActivatorOperations#etherealize} is
+    * immediately invoked on the passed id.
+    *
+    * @throws WrongPolicy if the required RETAIN policy does not apply to
+    * this POA.
+    */
+   public void deactivate_object(byte[] the_Object_Id)
+                          throws ObjectNotActive, WrongPolicy
+   {
+     required(ServantRetentionPolicyValue.RETAIN);
+ 
+     AOM.Obj exists = aom.get(the_Object_Id);
+ 
+     if (exists == null || exists.isDeactiveted())
+       throw new ObjectNotActive();
+ 
+     exists.setDeactivated(true);
+ 
+     // Check if this servant is serving something else.
+     aom.remove(the_Object_Id);
+ 
+     AOM.Obj other = aom.findServant(exists.servant, false);
+ 
+     boolean remaining = other != null;
+ 
+     aom.put(exists);
+ 
+     if (servant_activator != null)
+       servant_activator.etherealize(the_Object_Id, this, exists.servant, false,
+                                     remaining
+                                    );
+   }
+ 
+   /**
+   * Create the object reference, encapsulating the given repository Id and
+   * the Object Id, generated by this POA. The returned object will not be
+   * activated by default and may be activated on the first invocation by
+   * the servant manager (if it is set and if policies are applicable).
+   *
+   * @param a_repository_id the repository id for the given object, can
+   * be null if to be requested from the servant later.
+   *
+   * @throws WrongPolicy if the required SYSTEM_ID policy does not apply to
+   * this POA.
+   */
+   public org.omg.CORBA.Object create_reference(String a_repository_id)
+                                         throws WrongPolicy
+   {
+     required(IdAssignmentPolicyValue.SYSTEM_ID);
+     return create_reference_with_id(AOM.getFreeId(), a_repository_id);
+   }
+ 
+   /**
+    * <p>
+    * Create the object reference, encapsulating the given repository Id and
+    * the given Object Id. The returned object will <i>not</i> be
+    * activated by default and may be activated on the first invocation by
+    * the servant manager (if the IMPLICIT_ACTIVATION policy applies).
+    *
+    * @param an_object_id the object id for the object being created. If this
+    * POA uses the SYSTEM_ID policy, the portable application should only
+    * pass the ids, generated by this POA.
+    *
+    * @param a_repository_id the repository id for the object being created,
+    * can be null if this information should be later requested from the
+    * servant.
+    */
+   public org.omg.CORBA.Object create_reference_with_id(byte[] an_object_id,
+     String a_repository_id
+    )
+   {
+     String[] ids;
+     if (a_repository_id == null)
+       ids = null;
+     else
+       ids = new String[] { a_repository_id };
+ 
+     // Check maybe such object is already activated.
+     AOM.Obj e = aom.get(an_object_id);
+ 
+     Servant servant;
+     if (e == null)
+       {
+         servant = null;
+       }
+     else
+       {
+         servant = e.servant;
+         e.setDeactivated(false);
+       }
+ 
+     gnuServantObject object =
+       new gnuServantObject(ids, an_object_id, this, m_orb);
+     object._set_delegate(new LocalDelegate(object, this, an_object_id));
+     aom.add(object.Id, object, servant, this);
+     connect_to_orb(an_object_id, object);
+ 
+     return object;
+   }
+ 
+   /**
+    * Creates a new POA as a child of the target POA.
+    *
+    * @param child_name the name of the child POA being created.
+    * @param manager the manager that will control the new POA. If this parameter
+    * is null, a new POA manager is created and associated with the new POA.
+    *
+    * @param policies the policies, applicable for the parent POA. Policies
+    * are <i>not</i> inherited from the parent POA.
+    *
+    * @return an newly created POA. The POA will be intially in the holding
+    * state and must be activated to start processing requests.
+    *
+    * @throws AdapterAlreadyExists if the child with the given child_name
+    * already exists for the current POA.
+    * @throws InvalidPolicy if the policies conflict with each other or are
+    * otherwise inappropriate.
+    *
+    * @see #the_children()
+    */
+   public POA create_POA(String child_name, POAManager manager, Policy[] policies)
+                  throws AdapterAlreadyExists, InvalidPolicy
+   {
+     POA child;
+     for (int i = 0; i < children.size(); i++)
+       {
+         child = (POA) children.get(i);
+         if (child.the_name().equals(child_name))
+           throw new AdapterAlreadyExists(name + "/" + child_name);
+       }
+ 
+     POA poa = createPoaInstance(child_name, manager, policies, m_orb);
+     children.add(poa);
+     return poa;
+   }
+ 
+   /**
+    * Returns a default servant for this POA.
+    *
+    * @return a servant that will be used for requests for
+    * which no servant is found in the Active Object Map.
+    *
+    * @throws NoServant if there is no default servant associated with this POA.
+    * @throws WrongPolicy if the USE_DEFAULT_SERVANT policy is not active.
+    */
+   public Servant get_servant()
+                       throws NoServant, WrongPolicy
+   {
+     required(RequestProcessingPolicyValue.USE_DEFAULT_SERVANT);
+     if (default_servant == null)
+       throw new NoServant();
+     return default_servant;
+   }
+ 
+   /**
+    * Sets the default servant for this POA.
+    *
+    * @param a_servant a servant that will be used for requests for
+    * which no servant is found in the Active Object Map.
+    *
+    * @throws WrongPolicy if the USE_DEFAULT_SERVANT policy is not active.
+    */
+   public void set_servant(Servant a_servant)
+                    throws WrongPolicy
+   {
+     required(RequestProcessingPolicyValue.USE_DEFAULT_SERVANT);
+     default_servant = a_servant;
+   }
+ 
+   /**
+    * Set a servant manager for this POA.
+    *
+    * @param a servant manager being set. If the RETAIN policy applies, the
+    * manager must implement a {@link ServantActivator}. If the NON_RETAIN
+    * policy applies, the manager must implement a {@link ServantLocator}.
+    *
+    * @throws WrongPolicy if the required USE_SERVANT_MANAGER policy does not
+    * apply to this POA.
+    *
+    * @throws OBJ_ADAPTER minor code 4 if the passed manager does not
+    * implement the required interface ({@link ServantActivator},
+    * {@link ServantLocator}). The POA, that has the RETAIN policy uses
+    * servant managers that are ServantActivators. When the POA has the
+    * NON_RETAIN policy it uses servant managers that are ServantLoacators.
+    *
+    * @throws BAD_INV_ORDER minor code 6 if the method is called more than once
+    * on the same POA. The manager can be set only once.
+    */
+   public void set_servant_manager(ServantManager a_manager)
+                            throws WrongPolicy
+   {
+     required(RequestProcessingPolicyValue.USE_SERVANT_MANAGER);
+     if (servant_activator != null || servant_locator != null)
+       throw new BAD_INV_ORDER("Setting manager twice for " + name, 6,
+                               CompletionStatus.COMPLETED_NO
+                              );
+ 
+     if (applies(ServantRetentionPolicyValue.RETAIN))
+       {
+         if (a_manager instanceof ServantActivator)
+           servant_activator = (ServantActivator) a_manager;
+         else
+           throw new OBJ_ADAPTER("RETAIN requires ServantActivator", 4,
+                                 CompletionStatus.COMPLETED_NO
+                                );
+       }
+     else if (applies(ServantRetentionPolicyValue.NON_RETAIN))
+       {
+         if (a_manager instanceof ServantLocator)
+           servant_locator = (ServantLocator) a_manager;
+         else
+           throw new OBJ_ADAPTER("NON_RETAIN requires ServantLocator", 4,
+                                 CompletionStatus.COMPLETED_NO
+                                );
+       }
+     else
+       throw new WrongPolicy("No servant retention policy is specified.");
+   }
+ 
+   /**
+    * Get the servant manager, associated with this POA.
+    *
+    * @return the associated servant manager or null if it has
+    * been previously set.
+    *
+    * @throws WrongPolicy if the required USE_SERVANT_MANAGER policy does not
+    * apply to this POA.
+    */
+   public ServantManager get_servant_manager()
+                                      throws WrongPolicy
+   {
+     required(RequestProcessingPolicyValue.USE_SERVANT_MANAGER);
+ 
+     if (servant_activator != null)
+       return servant_activator;
+     else
+       return servant_locator;
+   }
+ 
+   /**
+    * Get the unique Id of the POA in the process in which it is created.
+    * This Id is needed by portable interceptors. The id is unique
+    * for the life span of the POA in the process. For persistent
+    * POAs, if a POA is created in the same path with the same name as
+    * another POA, these POAs are identical have the same id. All transient
+    * POAs are assumed unique.
+    */
+   public byte[] id()
+   {
+     if (m_poa_id != null)
+       return m_poa_id;
+     else
+       {
+         BufferedCdrOutput buffer = new BufferedCdrOutput();
+         POA p = this;
+         while (p != null)
+           {
+             buffer.write_string(p.the_name());
+             p = p.the_parent();
+           }
+         m_poa_id = buffer.buffer.toByteArray();
+         return m_poa_id;
+       }
+   }
+ 
+   /**
+    * Returns the reference to the active object with the given Id.
+    *
+    * @param the_Object_Id the object id.
+    *
+    * @throws ObjectNotActive if there is no active object with such Id
+    * in the scope of this POA.
+    * @throws WrongPolicy if the required RETAIN policy does not apply to
+    * this POA.
+    */
+   public org.omg.CORBA.Object id_to_reference(byte[] the_Object_Id)
+                                        throws ObjectNotActive, WrongPolicy
+   {
+     required(ServantRetentionPolicyValue.RETAIN);
+ 
+     AOM.Obj ref = aom.get(the_Object_Id);
+     if (ref == null)
+       throw new ObjectNotActive();
+     else
+       return ref.object;
+   }
+ 
+   /**
+    * Returns the servant that serves the active object with the given Id.
+    *
+    * @param the_Object_Id the object id.
+    *
+    * @throws ObjectNotActive if there is no active object with such Id or
+    * it is not currently active.
+    * @throws WrongPolicy. This method requires either RETAIN or
+    * USE_DEFAULT_SERVANT policies and reaises the WrongPolicy if none of them
+    * apply to this POA.
+    */
+   public Servant id_to_servant(byte[] the_Object_Id)
+                         throws ObjectNotActive, WrongPolicy
+   {
+     if (applies(ServantRetentionPolicyValue.RETAIN))
+       {
+         AOM.Obj ref = aom.get(the_Object_Id);
+         if (ref == null || ref.isDeactiveted())
+           {
+             if (default_servant != null)
+               return default_servant;
+             else
+               throw new ObjectNotActive();
+           }
+         else if (ref.servant != null)
+           return ref.servant;
+         else if (default_servant != null)
+           return default_servant;
+         else
+           throw new ObjectNotActive();
+       }
+     else if (default_servant != null)
+       {
+         return default_servant;
+       }
+     else
+       throw new WrongPolicy("Either RETAIN or USE_DEFAULT_SERVANT required.");
+   }
+ 
+   /**
+    * Returns the Object Id, encapsulated in the given object reference.
+    *
+    * @param the_Object the object that has been previously created with this
+    * POA. It need not be active.
+    *
+    * @throws WrongAdapter if the passed object is not known for this POA.
+    * @throws WrongPolicy never (declared for the future extensions only).
+    */
+   public byte[] reference_to_id(org.omg.CORBA.Object the_Object)
+                          throws WrongAdapter, WrongPolicy
+   {
+     AOM.Obj ref = aom.findObject(the_Object);
+     if (ref == null)
+       throw new WrongAdapter();
+     return ref.key;
+   }
+ 
+   /**
+    * Returns the servant that is serving this object.
+    *
+    * @return if the RETAIN policy applies and the object is in the Active
+    * Object Map, the method returns the servant, associated with this object.
+    * Otherwise, if the USE_DEFAULT_SERVANT policy applies, the method returns
+    * the default servant (if one was set).
+    *
+    * @throws ObjectNotActive if none of the conditions above are satisfied.
+    * @throws WrongAdapter if the object reference was not created with this POA.
+    * @throws WrongPolicy. This method requires either RETAIN or
+    * USE_DEFAULT_SERVANT policies and reaises the WrongPolicy if none of them
+    * apply to this POA.
+    */
+   public Servant reference_to_servant(org.omg.CORBA.Object the_Object)
+                                throws ObjectNotActive, WrongPolicy,
+                                       WrongAdapter
+   {
+     if (applies(ServantRetentionPolicyValue.RETAIN))
+       {
+         AOM.Obj ref = aom.findObject(the_Object);
+         if (ref == null)
+           throw new WrongAdapter();
+         else if (ref.isDeactiveted() || ref.servant == null)
+           {
+             if (default_servant != null)
+               return default_servant;
+             else
+               throw new ObjectNotActive();
+           }
+         else
+           return ref.servant;
+       }
+     else if (default_servant != null)
+       {
+         return default_servant;
+       }
+     else
+       throw new WrongPolicy("Either RETAIN or USE_DEFAULT_SERVANT required.");
+   }
+ 
+   /**
+   * Returns the id of the object, served by the given servant
+   * (assuming that the servant serves only one object).
+   * The id is found in one of the following ways.
+   * <ul>
+   * <li>If the POA has both the RETAIN and the UNIQUE_ID policy and
+   * the specified servant is active, the method return the Object Id associated
+   * with that servant.
+   * </li><li>
+   * If the POA has both the RETAIN and the IMPLICIT_ACTIVATION policy and
+   * either the POA has the MULTIPLE_ID policy or the specified servant is
+   * inactive, the method activates the servant using a POA-generated Object Id
+   * and the Interface Id associated with the servant, and returns that
+   * Object Id.
+   * </li>
+   * <li>If the POA has the USE_DEFAULT_SERVANT policy, the servant specified
+   * is the default servant, and the method is being invoked in the context of
+   * executing a request on the default servant, the method returns the
+   * ObjectId associated with the current invocation.
+   * </li>
+   * </ul>
+   * @throws ServantNotActive in all cases, not listed in the list above.
+   * @throws WrongPolicy The method requres USE_DEFAULT_SERVANT policy or
+   * a combination of the RETAIN policy and either the UNIQUE_ID or
+   * IMPLICIT_ACTIVATION policies and throws the WrongPolicy if these conditions
+   * are not satisfied.
+   */
+   public byte[] servant_to_id(Servant the_Servant)
+                        throws ServantNotActive, WrongPolicy
+   {
+     if (applies(RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) ||
+         applies(ServantRetentionPolicyValue.RETAIN) &&
+         (
+           applies(IdUniquenessPolicyValue.UNIQUE_ID) ||
+           applies(ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION)
+         )
+        )
+       {
+         AOM.Obj ref = null;
+         if (!applies(IdUniquenessPolicyValue.MULTIPLE_ID))
+           ref = aom.findServant(the_Servant);
+         if (ref == null &&
+             applies(ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION)
+            )
+           {
+             // Try to activate.
+             try
+               {
+                 return activate_object(the_Servant);
+               }
+             catch (ServantAlreadyActive ex)
+               {
+                 // Either it shuld not be or the policy allows multiple ids.
+                 throw new InternalError();
+               }
+           }
+         if (ref == null)
+           throw new ServantNotActive();
+         else
+           return ref.key;
+       }
+     else
+       throw new WrongPolicy("(RETAIN and UNIQUE ID) " +
+                             "or USE_DEFAULT_SERVANT required."
+                            );
+   }
+ 
+   /**
+    * <p>
+    * Converts the given servant to the object reference. The servant will serve
+    * all methods, invoked on the returned object. The returned object reference
+    * can be passed to the remote client, enabling remote invocations.
+    * </p>
+    * <p>
+    * If the specified servant is active, it is returned. Otherwise, if the POA
+    * has the IMPLICIT_ACTIVATION policy the method activates the servant. In
+    * this case, if the servant activator is set, the
+    * {@link ServantActivatorOperations#incarnate} method will be called.
+    * </p>
+    * 
+    * @throws ServantNotActive if the servant is inactive and no
+    * IMPLICIT_ACTIVATION policy applies.
+    * @throws WrongPolicy This method needs the RETAIN policy and either the
+    * UNIQUE_ID or IMPLICIT_ACTIVATION policies.
+    * 
+    * @return the object, exposing the given servant in the context of this POA.
+    */
+   public org.omg.CORBA.Object servant_to_reference(Servant the_Servant)
+     throws ServantNotActive, WrongPolicy
+   {
+     required(ServantRetentionPolicyValue.RETAIN);
+ 
+     AOM.Obj exists = null;
+ 
+     if (!applies(IdUniquenessPolicyValue.MULTIPLE_ID))
+       exists = aom.findServant(the_Servant);
+ 
+     if (exists != null)
+       {
+         if (exists.isDeactiveted())
+           {
+             if (applies(ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION))
+               {
+                 checkDiscarding();
+                 exists.setDeactivated(false);
+                 incarnate(exists, exists.key, the_Servant, false);
+               }
+             else
+               throw new ServantNotActive();
+           }
+         else
+           return exists.object;
+       }
+     if (exists == null
+       && applies(ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION))
+       {
+         checkDiscarding();
+ 
+         byte[] object_key = AOM.getFreeId();
+ 
+         ServantDelegateImpl delegate = new ServantDelegateImpl(the_Servant,
+           this, object_key);
+         create_and_connect(object_key, the_Servant._all_interfaces(this,
+           object_key)[0], delegate);
+ 
+         return delegate.object;
+       }
+     else
+       throw new ServantNotActive();
+   }
+ 
+   /**
+    * Incarnate in cases when request forwarding is not expected because the
+    * servant must be provided by the servant activator.
+    * 
+    * @param x the aom entry, where the object is replaced by value, returned by
+    * servant activator (if not null).
+    * 
+    * @param key the object key.
+    * 
+    * @param a_servant the servant that was passed as a parameter in the
+    * activation method.
+    * 
+    * @param use_forwarding if true, the gnuForwardRequest is throw under the
+    * forwarding exception (for remote client). Otherwise, the request is
+    * internally redirected (for local invocation).
+    */
+   private Servant incarnate(AOM.Obj x, byte[] object_key,
+                             Servant a_servant, boolean use_forwarding
+                            )
+   {
+     if (servant_activator != null)
+       {
+         Servant servant;
+         try
+           {
+             servant = servant_activator.incarnate(object_key, this);
+           }
+         catch (ForwardRequest ex)
+           {
+             if (use_forwarding)
+               throw new gnuForwardRequest(ex.forward_reference);
+             else
+               servant =
+                 ForwardedServant.create((ObjectImpl) ex.forward_reference);
+           }
+         if (servant != null && x != null)
+           x.setServant(servant);
+         if (servant == null && x != null)
+           servant = x.servant;
+         return servant;
+       }
+     else if (a_servant != null)
+       {
+         x.setServant(a_servant);
+         return a_servant;
+       }
+     else if (x.servant != null)
+       {
+         return x.servant;
+       }
+     else if (default_servant != null)
+       {
+         x.setServant(default_servant);
+         return x.servant;
+       }
+     else
+       throw new BAD_INV_ORDER("No servant given and the servant activator not set");
+   }
+ 
+   /**
+    * Return the POA manager, associated with this POA.
+    *
+    * @return the associated POA manager (always available).
+    */
+   public POAManager the_POAManager()
+   {
+     return m_manager;
+   }
+ 
+   /**
+    * Returns the adapter activator, associated with this POA.
+    * The newly created POA has no activator (null would be
+    * returned). The ORB root POA also initially has no activator.
+    *
+    * @return tha adapter activator or null if this POA has no
+    * associated adapter activator.
+    */
+   public AdapterActivator the_activator()
+   {
+     return m_activator;
+   }
+ 
+   /**
+   * Set the adapter activator for this POA.
+   *
+   * @param the activator being set.
+   */
+   public void the_activator(AdapterActivator an_activator)
+   {
+     m_activator = an_activator;
+   }
+ 
+   /**
+   * The children of this POA.
+   *
+   * @return the array of all childs for this POA.
+   */
+   public POA[] the_children()
+   {
+     POA[] poas = new POA[ children.size() ];
+     for (int i = 0; i < poas.length; i++)
+       {
+         poas [ i ] = (POA) children.get(i);
+       }
+     return poas;
+   }
+ 
+   /**
+    * Return the name of this POA.
+    *
+    * @return the name of POA, relative to its parent.
+    */
+   public String the_name()
+   {
+     return name;
+   }
+   ;
+ 
+   /**
+    * Return the parent of this POA.
+    *
+    * @return the parent POA or <code>null</code> if this is a root POA.
+    */
+   public POA the_parent()
+   {
+     return parent;
+   }
+ 
+   /** {@inheritDoc} */
+   public IdAssignmentPolicy create_id_assignment_policy(IdAssignmentPolicyValue a_value)
+   {
+     return new gnuIdAssignmentPolicy(a_value);
+   }
+ 
+   /** {@inheritDoc} */
+   public IdUniquenessPolicy create_id_uniqueness_policy(IdUniquenessPolicyValue a_value)
+   {
+     return new gnuIdUniquenessPolicy(a_value);
+   }
+ 
+   /** {@inheritDoc} */
+   public ImplicitActivationPolicy create_implicit_activation_policy(ImplicitActivationPolicyValue a_value)
+   {
+     return new gnuImplicitActivationPolicy(a_value);
+   }
+ 
+   /** {@inheritDoc} */
+   public LifespanPolicy create_lifespan_policy(LifespanPolicyValue a_value)
+   {
+     return new gnuLifespanPolicy(a_value);
+   }
+ 
+   /** {@inheritDoc} */
+   public RequestProcessingPolicy create_request_processing_policy(RequestProcessingPolicyValue a_value)
+   {
+     return new gnuRequestProcessingPolicy(a_value);
+   }
+ 
+   /** {@inheritDoc} */
+   public ServantRetentionPolicy create_servant_retention_policy(ServantRetentionPolicyValue a_value)
+   {
+     return new gnuServantRetentionPolicy(a_value);
+   }
+ 
+   /** {@inheritDoc} */
+   public ThreadPolicy create_thread_policy(ThreadPolicyValue a_value)
+   {
+     return new gnuThreadPolicy(a_value);
+   }
+ 
+   /**
+    * <p>
+    * Destroy this POA and all descendant POAs. The destroyed POAs can be later
+    * re-created via {@link AdapterActivator} or by invoking {@link #create_POA}.
+    * This differs from {@link PoaManagerOperations#deactivate} that does not
+    * allow recreation of the deactivated POAs. After deactivation, recreation is
+    * only possible if the POAs were later destroyed.
+    * </p>
+    * <p>
+    * The remote invocation on the target, belonging to the POA that is currently
+    * destroyed return the remote exception ({@link TRANSIENT}, minor code 4).
+    * </p>
+    * 
+    * @param etherealize_objects if true, and POA has RETAIN policy, and the
+    * servant manager is available, the servant manager method
+    * {@link ServantActivatorOperations#etherealize} is called for each <i>active</i>
+    * object in the Active Object Map. This method should not try to access POA
+    * being destroyed. If <code>destroy</code> is called multiple times before
+    * the destruction completes, the etherialization should be invoked only once.
+    * 
+    * @param wait_for_completion if true, the method waits till the POA being
+    * destroyed completes all current requests and etherialization. If false, the
+    * method returns immediately.
+    */
+   public void destroy(boolean etherealize_objects, boolean wait_for_completion)
+   {
+     // Notify the IOR interceptors about that the POA is destroyed.
+     if (m_orb.iIor != null)
+       m_orb.iIor.adapter_state_changed(
+         new ObjectReferenceTemplate[] { getReferenceTemplate() },
+         NON_EXISTENT.value);
+ 
+     if (wait_for_completion)
+       waitWhileRunning();
+ 
+     // Nofify the IOR interceptors that the POA is destroyed.
+     if (m_manager instanceof gnuPOAManager)
+       {
+         ((gnuPOAManager) m_manager).poaDestroyed(this);
+       }
+ 
+     // Put the brake instead of manager, preventing the subsequent
+     // requests.
+     gnuPOAManager g = new gnuPOAManager();
+     g.state = State.INACTIVE;
+     m_manager = g;
+ 
+     // Disconnect from parent.
+     if (parent instanceof gnuPOA)
+       {
+         ((gnuPOA) parent).children.remove(this);
+       }
+ 
+     unregisterFromManager();
+ 
+     // Disconnect from the ORB all objects, registered with this POA.
+     ArrayList keys = new ArrayList();
+     keys.addAll(aom.keySet());
+ 
+     byte[] key;
+     AOM.Obj obj;
+     for (int i = 0; i < keys.size(); i++)
+       {
+         key = (byte[]) keys.get(i);
+         obj = aom.get(key);
+         if (obj.poa == this)
+           m_orb.disconnect(obj.object);
+       }
+ 
+     m_orb.identityDestroyed(this);
+ 
+     if (etherealize_objects && servant_activator != null && !m_inDestruction)
+       {
+         etherealizeAll();
+       }
+     m_inDestruction = true;
+ 
+     POA[] ch = the_children();
+     for (int i = 0; i < ch.length; i++)
+       {
+         ch[i].destroy(etherealize_objects, wait_for_completion);
+       }
+   }
+ 
+   /**
+    * Destroy this POA if it has not been destroyed, destroys it.
+    */
+   protected void finalize()
+                    throws java.lang.Throwable
+   {
+     if (!m_inDestruction)
+       destroy(false, false);
+   }
+ 
+   /**
+    * Remove self from the manager list.
+    */
+   private void unregisterFromManager()
+   {
+     if (m_manager instanceof gnuPOAManager)
+       {
+         gnuPOAManager p = (gnuPOAManager) m_manager;
+         p.removePOA(this);
+       }
+   }
+ 
+   /**
+    * Get the policy of the given type, associated with this POA.
+    *
+    * @param a_policy_type a type of the requested policy.
+    * @return a policy of the given type, applyting to this POA.
+    *
+    * @throws org.omg.CORBA.BAD_PARAM if the policy of this type has not
+    * been specified for this POA.
+    */
+   public Policy _get_policy(int a_policy_type)
+                      throws org.omg.CORBA.BAD_PARAM
+   {
+     for (int i = 0; i < s_policies.length; i++)
+       {
+         if (s_policies [ i ].policy_type() == a_policy_type)
+           return s_policies [ i ].copy();
+       }
+     throw new BAD_PARAM("No policy type " + a_policy_type);
+   }
+ 
+   /**
+    * Get the copy of the policy array.
+    */
+   public Policy[] getPolicyArray()
+   {
+     Policy[] r = new Policy[ s_policies.length ];
+     for (int i = 0; i < s_policies.length; i++)
+       {
+         r [ i ] = s_policies [ i ].copy();
+       }
+     return r;
+   }
+ 
+   /**
+    * The POAs cannot be created by this method.
+    *
+    * @specnote this is also not possible in Suns jdk at least till 1.4.
+    *
+    * @throws NO_IMPLEMENT always.
+    */
+   public org.omg.CORBA.Object _set_policy_override(Policy[] policies,
+                                                    SetOverrideType how
+                                                   )
+   {
+     throw new NO_IMPLEMENT("Use createPOA instead.");
+   }
+ 
+   /**
+    * Get the ORB, where this POA is connected.
+    */
+   public ORB orb()
+   {
+     return m_orb;
+   }
+ 
+   /**
+    * Connect the given delegate under the given key, also calling incarnate.
+    */
+   private void create_and_connect(byte[] object_key, String repository_id,
+     ServantDelegateImpl delegate)
+   {
+     aom.add(delegate);
+     connect_to_orb(object_key, getReferenceFactory().make_object(repository_id,
+       object_key));
+     if (servant_activator != null)
+       incarnate(null, object_key, delegate.servant, false);
+   }
+ 
+   /**
+    * Check if the POA is not in a discarding mode. The activation
+    * operations are forbidded in discarding mode.
+    *
+    * @throws TRANSIENT if the POA is in discarding mode.
+    */
+   private void checkDiscarding()
+                         throws TRANSIENT
+   {
+     if (m_manager.get_state() == State.DISCARDING)
+       throw new TRANSIENT("Discarding mode", 1, CompletionStatus.COMPLETED_MAYBE);
+   }
+ 
+   /**
+    * Connect the given delegate object to orb.
+    */
+   protected void connect_to_orb(byte[] an_Object_Id, org.omg.CORBA.Object object)
+   {
+     if (applies(ThreadPolicyValue.SINGLE_THREAD_MODEL))
+       m_orb.connect_1_thread(object, toIORKey(an_Object_Id), this);
+     else
+       m_orb.connect(object, toIORKey(an_Object_Id));
+   }
+ 
+   /**
+    * Returns the representation of this POA tree.
+    */
+   public String toString()
+   {
+     StringBuffer b = new StringBuffer(name);
+ 
+     if (children.size() != 0)
+       {
+         b.append(" (");
+ 
+         for (int i = 0; i < children.size(); i++)
+           {
+             b.append(children.get(i));
+             if (i < children.size() - 2)
+               b.append(", ");
+           }
+         b.append(")");
+       }
+     return b.toString();
+   }
+ 
+   /**
+    * Check if the policy set is valid.
+    */
+   protected boolean validatePolicies(Policy[] a)
+                               throws InvalidPolicy
+   {
+     if (applies(ServantRetentionPolicyValue.NON_RETAIN))
+       {
+         if (!applies(RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) &&
+             !applies(RequestProcessingPolicyValue.USE_SERVANT_MANAGER)
+            )
+           {
+             short p = 0;
+             for (short i = 0; i < a.length; i++)
+               {
+                 if (a [ i ].policy_type() == SERVANT_RETENTION_POLICY_ID.value)
+                   p = i;
+               }
+             throw new InvalidPolicy("NON_RETAIN requires either " +
+                                     "USE_DEFAULT_SERVANT or USE_SERVANT_MANAGER",
+                                     p
+                                    );
+           }
+       }
+     return true;
+   }
+ 
+   /**
+    * Recursively searches for the given object in the POA tree.
+    */
+   public AOM.Obj findObject(org.omg.CORBA.Object object)
+   {
+     AOM.Obj h = aom.findObject(object);
+     if (h != null)
+       return h;
+     else
+       {
+         for (int i = 0; i < children.size(); i++)
+           {
+             h = ((gnuPOA) children.get(i)).findObject(object);
+             if (h != null)
+               return h;
+           }
+       }
+     return h;
+   }
+   
+   /**
+    * Recursively searches for the given key in the POA tree.
+    * @param ior_key the key, ecapsulating both object
+    * and poa ids.
+    * @return
+    */
+   public AOM.Obj findKey(byte[] object_id, byte[] poa_id)
+   {
+     AOM.Obj h = null;
+     if (Arrays.equals(poa_id, id()))
+       h = aom.get(object_id);
+     if (h != null)
+       return h;
+     else
+       {
+         for (int i = 0; i < children.size(); i++)
+           {
+             h = ((gnuPOA) children.get(i)).findKey(object_id, poa_id);
+             if (h != null)
+               return h;
+           }
+       }
+     return h;
+   }
+ 
+   /**
+    * Parses the given key, extracts poa and object id and searches
+    * for such reference.
+    */
+   public AOM.Obj findIorKey(byte[] ior_key)
+   {
+     BufferredCdrInput in = new BufferredCdrInput(ior_key);
+     int signature = in.read_long();
+     if (signature != SIGNATURE)
+       return null;
+ 
+     byte[] id = in.read_sequence();
+     byte[] poa = in.read_sequence();
+     return findKey(id, poa);
+   }
+ 
+   /**
+    * Converts the object Id into the IOR key. IOR key must be
+    * unique in the scope of the ORB, and Ids only in the scope of POA.
+    * Hence the IOR key includes the POA identifiers.
+    */
+   public byte[] toIORKey(byte[] object_id)
+   {
+     BufferedCdrOutput buffer = new BufferedCdrOutput();
+     buffer.write_long(SIGNATURE);
+     buffer.write_sequence(object_id);
+     buffer.write_sequence(id());
+     return buffer.buffer.toByteArray();
+   }
+ 
+   /**
+    * Extracts the object id from the ior key.
+    *
+    * @param ior_key
+    *
+    * @return the encapsulated object ior key or null if
+    * this ior key either refers a different POA or encoding signature
+    * mismatch.
+    */
+   public byte[] idFormIor(byte[] ior_key)
+   {
+     BufferredCdrInput in = new BufferredCdrInput(ior_key);
+     int signature = in.read_long();
+     if (signature != SIGNATURE)
+       return null;
+ 
+     byte[] object_id = in.read_sequence();
+     byte[] poa_id = in.read_sequence();
+     if (Arrays.equals(poa_id, id()))
+       return object_id;
+     else
+       return null;
+   }
+   
+   /**
+    * Recursively searches for the given servant in the POA tree.
+    */
+   public AOM.Obj findServant(Servant servant)
+   {
+     AOM.Obj h = aom.findServant(servant);
+     if (h != null)
+       return h;
+     else
+       {
+         for (int i = 0; i < children.size(); i++)
+           {
+             h = ((gnuPOA) children.get(i)).findServant(servant);
+             if (h != null)
+               return h;
+           }
+       }
+     return h;
+   }
+   
+   /**
+    * Get the object reference template of this POA.
+    * Instantiate a singleton instance, if required.
+    */
+   public ObjectReferenceTemplate getReferenceTemplate()
+   {
+     if (refTemplate == null)
+       refTemplate = new RefTemplate();
+     
+     return refTemplate;
+   }
+   
+   public ObjectReferenceFactory getReferenceFactory()
+   {
+     return m_object_factory;
+   }
+   
+   public void setReferenceFactory(ObjectReferenceFactory factory)
+   {
+     m_object_factory = factory;
+   }
+ 
+   /**
+    * Create the object (needed by the factory interface).
+    */
+   public Object make_object(String a_repository_id, byte[] an_object_id)
+   {
+     AOM.Obj existing = aom.get(an_object_id);
+     // The object may already exist. In this case, it is just returned.
+     if (existing != null && existing.object != null)
+       return existing.object;
+     else
+       {
+         return new gnuServantObject(new String[] { a_repository_id },
+           an_object_id, this, m_orb);
+       }
+   }
+ 
+   /**
+    * Required by object reference factory ops.
+    */
+   public String[] _truncatable_ids()
+   {
+     return ref_template_ids;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuPOAManager.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuPOAManager.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuPOAManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuPOAManager.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,273 ----
+ /* gnuPOAManager.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import org.omg.CORBA.BAD_INV_ORDER;
+ import org.omg.CORBA.LocalObject;
+ import org.omg.PortableInterceptor.NON_EXISTENT;
+ import org.omg.PortableInterceptor.ObjectReferenceTemplate;
+ import org.omg.PortableServer.POAManager;
+ import org.omg.PortableServer.POAManagerPackage.AdapterInactive;
+ import org.omg.PortableServer.POAManagerPackage.State;
+ 
+ import java.util.HashSet;
+ import java.util.Iterator;
+ 
+ /**
+  * The implementation of the POA manager. The manager is a controlled
+  * switch that can change its states in response to the method calls
+  * and throw exceptions if the requested change is invalid. It is possible
+  * to check the state this switch. It does not do anything else.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuPOAManager
+   extends LocalObject
+   implements POAManager
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The POAs, controlled by this manager.
+    */
+   private HashSet POAs = new HashSet();
+ 
+   /**
+    * The state of the manager. The newly created manager is always
+    * in the holding state.
+    */
+   State state = State.HOLDING;
+   
+   /**
+    * Get the state of the POA manager.
+    */
+   public State get_state()
+   {
+     return state;
+   }
+ 
+   /**
+    * Turns the associated POAs into active state, allowing them to receive
+    * and process requests.
+    *
+    * @throws if the POAs are in the inactive state. If once inactivated,
+    * the POA cannot be activated again. This method can only be called
+    * to leave the holding or discarding state.
+    */
+   public void activate()
+                 throws AdapterInactive
+   {
+     if (state != State.INACTIVE)
+       state = State.ACTIVE;
+     else
+       throw new AdapterInactive();
+     
+     notifyInterceptors(state.value());    
+   }
+ 
+   /**
+    * Turns the associated POAs into holding state. In this state, the POAs
+    * queue incoming requests but do not process them.
+    *
+    * @param wait_for_completion if true, the method call suspends the current
+    * thread till POAs complete the requests they are currently processing. If
+    * false, the method returns immediately.
+ 
+    * @throws AdapterInactive if the POAs are in the inactive state.
+    */
+   public void hold_requests(boolean wait_for_completion)
+                      throws AdapterInactive
+   {
+     if (state != State.INACTIVE)
+       state = State.HOLDING;
+     else
+       throw new AdapterInactive();
+     
+     notifyInterceptors(state.value());
+     
+     if (wait_for_completion)
+       waitForIdle();
+   }
+ 
+   /**
+    *
+    * Turns the asociated POAs into inactive state. The POAs in the incative
+    * state will reject new requests. If the POA is once inactivated, it
+    * cannot be activated again. The operation is used when
+    * the associated POAs are to be shut down.
+    *
+    * @param etherealize_objects if true, the servant managers of the
+    * associated POAs, having RETAIN and USE_SERVANT_MANAGER policies,
+    * will receive a call of {@link ServantActivatorOperations#etherealize}.
+    *
+    * @param wait_for_completion if true, the method call suspends the current
+    * thread till POAs complete the requests they are currently processing. If
+    * false, the method returns immediately.
+    *
+    * @throws AdapterInactive if the POAs are already in the inactive state.
+    *
+    * @see POAOperations#destroy
+    */
+   public void deactivate(boolean etherealize_objects,
+                          boolean wait_for_completion
+                         )
+                   throws AdapterInactive
+   {
+     if (state == State.INACTIVE)
+       throw new AdapterInactive("Repetetive inactivation");
+     state = State.INACTIVE;
+     
+     notifyInterceptors(state.value());    
+     
+     if (wait_for_completion)
+       waitForIdle();
+ 
+     Iterator iter = POAs.iterator();
+     while (iter.hasNext())
+       {
+         gnuPOA poa = (gnuPOA) iter.next();
+ 
+         // If the servant activator is non null, this means it has been
+         // set - hence the policies are appropriate.
+         if (poa.servant_activator != null)
+           poa.etherealizeAll();
+       }
+   }
+ 
+   /**
+    * Turns the associated POAs into discaring state. In this state, the POAs
+    * discard the incoming requests. This mode is used in situations when
+    * the server is flooded with requests. The client receives remote exception
+    * ({@link org.omg.CORBA.TRANSIENT}, minor code 1).
+    *
+    * @param wait_for_completion if true, the method call suspends the current
+    * thread till POAs complete the requests they are currently processing. If
+    * false, the method returns immediately.
+ 
+    * @throws AdapterInactive if the POAs are in the inactive state.
+    */
+   public void discard_requests(boolean wait_for_completion)
+                         throws AdapterInactive
+   {
+     if (state != State.INACTIVE)
+       state = State.DISCARDING;
+     else
+       throw new AdapterInactive();
+     
+     notifyInterceptors(state.value());    
+     
+     if (wait_for_completion)
+       waitForIdle();
+   }
+ 
+   /**
+    * Suspend the current thread while at least one of the associated POA is
+    * actively processing some requests. The method assumes that the POAs
+    * are not accepting the <i>new</i> requests due manager state.
+    *
+    * @throws BAD_INV_ORDER if the POAs are in the active state.
+    */
+   public void waitForIdle()
+   {
+     if (state == State.ACTIVE)
+       throw new BAD_INV_ORDER("The state is active");
+      
+     gnuPOA poa;
+     Iterator iter = POAs.iterator();
+     
+     while (iter.hasNext())
+       {
+         poa = (gnuPOA) iter.next();
+         poa.waitWhileRunning();
+       }
+   }
+ 
+   /**
+    * Add the POA that will be controlled by this manager.
+    *
+    * @param poa the POA.
+    */
+   public void addPoa(gnuPOA poa)
+   {
+     POAs.add(poa);
+   }
+ 
+   /**
+    * Remove the POA, releasing it from the control of this manager.
+    * Called in POA finaliser.
+    *
+    * @param poa the POA to remove.
+    */
+   public void removePOA(gnuPOA poa)
+   {
+     POAs.remove(poa);
+   }
+   
+   /**
+    * This method is called when POA is destryed. The interceptors are
+    * notified.
+    */
+   public void poaDestroyed(gnuPOA poa)
+   {
+     notifyInterceptors(NON_EXISTENT.value); 
+   }
+   
+   /**
+    * Notify CORBA 3.0 interceptors about the status change.
+    */
+   public synchronized void notifyInterceptors(int new_state)
+   {
+     gnuPOA poa;
+     Iterator iter = POAs.iterator();
+ 
+     // The System.identityHashCode is also called in gnuIorInfo.
+     while (iter.hasNext())
+       {
+         poa = (gnuPOA) iter.next();
+         if (poa.m_orb.iIor != null)
+           {
+             poa.m_orb.iIor.adapter_manager_state_changed(
+               System.identityHashCode(this), (short) new_state);
+           }
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuPoaCurrent.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuPoaCurrent.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuPoaCurrent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuPoaCurrent.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,179 ----
+ /* gnuPoaCurrent.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import org.omg.CORBA.CurrentHelper;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.PortableServer.Current;
+ import org.omg.PortableServer.CurrentOperations;
+ import org.omg.PortableServer.CurrentPackage.NoContext;
+ import org.omg.PortableServer.POA;
+ 
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.TreeMap;
+ 
+ /**
+  * Supports the "Poa current" concept, providing the id and poa of
+  * the object currently being served. There is only one instance
+  * of this class per ORB. It maintains a thread to information map.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuPoaCurrent
+   extends ObjectImpl
+   implements Current
+ {
+   /**
+    * The table, mapping threads to records.
+    */
+   private TreeMap threads = new TreeMap();
+ 
+   /**
+    * Get the array of POA current repository ids.
+    *
+    * @return a single member array, containing value, returned
+    * by the {@link CurrentHelper#id}, normally
+    * "IDL:omg.org/PortableServer/Current:2.3".
+    */
+   public String[] _ids()
+   {
+     return new String[] { CurrentHelper.id() };
+   }
+ 
+   /**
+    * Get the object id, associated with the thread currently being served.
+    *
+    * @throws NoContext if the current thread is not associated with any
+    * object.
+    */
+   public byte[] get_object_id()
+                        throws NoContext
+   {
+     CurrentOperations r;
+     synchronized (threads)
+       {
+         r = (CurrentOperations) threads.get(Thread.currentThread().getName());
+       }
+     if (r != null)
+       return r.get_object_id();
+     else
+       throw new NoContext(Thread.currentThread().getName());
+   }
+ 
+   /**
+    * Get the object POA, associated with the thread currently being served.
+    *
+    * @throws NoContext if the current thread is not associated with any
+    * object.
+    */
+   public POA get_POA()
+               throws NoContext
+   {
+     CurrentOperations r;
+     synchronized (threads)
+       {
+         r = (CurrentOperations) threads.get(Thread.currentThread().getName());
+       }
+     if (r != null)
+       return r.get_POA();
+     else
+       throw new NoContext(Thread.currentThread().getName());
+   }
+ 
+   /**
+    * Add the entry to the map.
+    */
+   public void put(Thread t, CurrentOperations record)
+   {
+     synchronized (threads)
+       {
+         threads.put(t.getName(), record);
+       }
+   }
+ 
+   /**
+    * Check if this Poa has some running threads.
+    */
+   public boolean has(POA poa)
+   {
+     synchronized (threads)
+       {
+         Iterator iter = threads.entrySet().iterator();
+         while (iter.hasNext())
+           {
+             Map.Entry item = (Map.Entry) iter.next();
+             try
+               {
+                 if (((CurrentOperations) item.getValue()).get_POA() == poa)
+                   {
+                     return true;
+                   }
+               }
+             catch (NoContext ex)
+               {
+                 throw new InternalError();
+               }
+           }
+       }
+     return false;
+   }
+ 
+   /**
+    * Check if this thread is registered.
+    */
+   public boolean has(Thread t)
+   {
+     synchronized (threads)
+       {
+         return threads.containsKey(t.getName());
+       }
+   }
+ 
+   /**
+    * Remove the entry from the map.
+    */
+   public void remove(Thread t)
+   {
+     synchronized (threads)
+       {
+         threads.remove(t.getName());
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuRequestProcessingPolicy.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuRequestProcessingPolicy.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuRequestProcessingPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuRequestProcessingPolicy.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,80 ----
+ /* gnuRequestProcessingPolicy.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA._PolicyImplBase;
+ 
+ import org.omg.PortableServer.REQUEST_PROCESSING_POLICY_ID;
+ import org.omg.PortableServer.RequestProcessingPolicy;
+ import org.omg.PortableServer.RequestProcessingPolicyValue;
+ 
+ /**
+  * The implementation of the request processing policy.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuRequestProcessingPolicy
+   extends _PolicyImplBase
+   implements RequestProcessingPolicy, AccessiblePolicy
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1L;
+ 
+   /**
+    * Create the policy.
+    *
+    * @param v a value for the policy.
+    */
+   public gnuRequestProcessingPolicy(RequestProcessingPolicyValue v)
+   {
+     super(REQUEST_PROCESSING_POLICY_ID.value, v, v.value(),
+           "IDL:org.omg/PortableServer/RequestProcessingPolicy:1.0"
+          );
+   }
+ 
+   /**
+    * Get the value for the policy that was passed in a constructor.
+    */
+   public RequestProcessingPolicyValue value()
+   {
+     return (RequestProcessingPolicyValue) getValue();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuServantObject.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuServantObject.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuServantObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuServantObject.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,812 ----
+ /* gnuServantObject.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA.GIOP.ReplyHeader;
+ import gnu.CORBA.IorDelegate;
+ import gnu.CORBA.IorObject;
+ import gnu.CORBA.Interceptor.gnuServerRequestInfo;
+ import gnu.CORBA.typecodes.RecordTypeCode;
+ import gnu.CORBA.IOR;
+ import gnu.CORBA.IorProvider;
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.ObjectCreator;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.ResponseHandlerImpl;
+ import gnu.CORBA.StreamHolder;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.OBJECT_NOT_EXIST;
+ import org.omg.CORBA.OBJ_ADAPTER;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TRANSIENT;
+ import org.omg.CORBA.UserException;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.InvokeHandler;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ResponseHandler;
+ import org.omg.PortableInterceptor.ForwardRequest;
+ import org.omg.PortableInterceptor.ServerRequestInterceptorOperations;
+ import org.omg.PortableServer.CurrentOperations;
+ import org.omg.PortableServer.DynamicImplementation;
+ import org.omg.PortableServer.ImplicitActivationPolicyValue;
+ import org.omg.PortableServer.POA;
+ import org.omg.PortableServer.POAManager;
+ import org.omg.PortableServer.POAManagerPackage.State;
+ import org.omg.PortableServer.Servant;
+ import org.omg.PortableServer.ServantLocatorPackage.CookieHolder;
+ import org.omg.PortableServer.ServantRetentionPolicyValue;
+ import org.omg.PortableServer.portable.Delegate;
+ 
+ import java.io.IOException;
+ 
+ import java.util.Arrays;
+ 
+ /**
+  * Represents a CORBA object, being locally served by the associated servant.
+  * The calls to the object are forwarded to the calls to the servant.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuServantObject extends ObjectImpl
+   implements org.omg.CORBA.Object,
+     InvokeHandler,
+     CurrentOperations,
+     IorProvider
+ {
+   /**
+    * The associated servant that must also implement the {@link InvokeHandler}
+        * interface. This value can be temporary null if the object was created using
+    * POA.create_reference or POA.create_reference_with_id, private to force
+    * always to use {@link setServant}.
+    */
+   private Servant servant;
+ 
+   /**
+    * The Id of this object.
+    */
+   public final byte[] Id;
+ 
+   /**
+    * The poa that takes care about this object.
+    */
+   public final gnuPOA poa;
+ 
+   /**
+    * The POA manager, used to control the work of this object.
+    */
+   public final POAManager manager;
+ 
+   /**
+    * The orb.
+    */
+   public final ORB_1_4 orb;
+ 
+   /**
+    * The object repository ids, if they were specified separately. Normally, the
+    * ids are requested from the servant.
+    */
+   public final String[] repository_ids;
+ 
+   /**
+    * Create an object with no connected servant. The servant must be set later.
+    *
+    * @param a_repository_ids an array of repository ids, can be null (then ids
+    * will be requested from the servant).
+    * @param an_id the object id.
+    * @param a_poa the POA.
+    */
+   public gnuServantObject(String[] a_repository_ids, byte[] an_id,
+     gnuPOA a_poa, ORB_1_4 an_orb
+   )
+   {
+     repository_ids = a_repository_ids;
+     Id = an_id;
+     manager = a_poa.the_POAManager();
+     poa = a_poa;
+     orb = an_orb;
+   }
+   
+   /**
+    * Get the IOR as it would be for this object.
+    */
+   public IOR getIor()
+   {
+     return orb.getLocalIor(this);    
+   }
+ 
+   /**
+    * Create a servant object, associated with the passed servant.
+    *
+    * @param a_servant a servant, serving this object.
+    * @param an_id an Object Id for this object.
+    *
+    * @throws BAD_PARAM if the passed servant is not an {@link InvokeHandler}.
+    */
+   public gnuServantObject(Servant a_servant, byte[] an_id, ORB_1_4 an_orb,
+     gnuPOA a_poa
+   )
+   {
+     Id = an_id;
+     setServant(a_servant);
+     poa = a_poa;
+     if (poa != null)
+       {
+         manager = poa.the_POAManager();
+       }
+     else
+       {
+         manager = null;
+       }
+     repository_ids = null;
+     orb = an_orb;
+   }
+ 
+   /**
+    * Set a servant, if it has not been previously set.
+    *
+    * @param a_servant a servant to set, can be null to indicate the necessity
+    * for the subsequent activation.
+    *
+    * @throws BAD_PARAM if the passed servant is not an {@link InvokeHandler} or
+    * {@link DynamicImplementation} and also not null.
+    */
+   public void setServant(Servant a_servant)
+   {
+     if (a_servant != null &&
+       !(a_servant instanceof InvokeHandler) &&
+       !(a_servant instanceof DynamicImplementation)
+     )
+       {
+         throw new BAD_PARAM("Must be either InvokeHandler or " +
+           "DynamicImplementation, but is " + a_servant
+         );
+       }
+     servant = a_servant;
+   }
+ 
+   /**
+    * Returns the associated servant.
+    */
+   public Servant getServant()
+   {
+     return servant;
+   }
+ 
+   /**
+    * Return the associated invocation handler.
+    */
+   public InvokeHandler getHandler(String operation, CookieHolder cookie,
+     boolean forwarding_allowed
+   ) throws gnuForwardRequest
+   {
+     if (servant != null)
+       {
+         return servantToHandler(servant);
+       }
+     else
+       {
+         // Use servant locator to locate the servant.
+         if (poa.servant_locator != null)
+           {
+             try
+               {
+                 servant =
+                   poa.servant_locator.preinvoke(Id, poa, operation, cookie);
+                 return servantToHandler(servant);
+               }
+             catch (org.omg.PortableServer.ForwardRequest forw_ex)
+               {
+                 if (forwarding_allowed)
+                   {
+                     throw new gnuForwardRequest(forw_ex.forward_reference);
+                   }
+                 else
+                   {
+                     servant =
+                       ForwardedServant.create(forw_ex.forward_reference);
+                     return servantToHandler(servant);
+                   }
+               }
+           }
+         else
+         // Use servant activator to locate the servant.
+         if (poa.applies(ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION) &&
+           poa.applies(ServantRetentionPolicyValue.RETAIN)
+         )
+           {
+             try
+               {
+                 poa.activate_object_with_id(Id, servant, forwarding_allowed);
+                 servant = poa.id_to_servant(Id);
+                 return servantToHandler(servant);
+               }
+             catch (gnuForwardRequest forwarded)
+               {
+                 throw forwarded;
+               }
+             catch (Exception ex)
+               {
+                 BAD_OPERATION bad =
+                   new BAD_OPERATION("Unable to activate", Minor.Activation,
+                     CompletionStatus.COMPLETED_NO
+                   );
+                 bad.initCause(ex);
+                 throw bad;
+               }
+           }
+         else if (poa.default_servant != null)
+           {
+             servant = poa.default_servant;
+             return servantToHandler(servant);
+           }
+ 
+         // No servant and no servant manager - throw exception.
+         else
+           {
+             throw new BAD_OPERATION("Unable to activate", Minor.Activation,
+               CompletionStatus.COMPLETED_NO
+             );
+           }
+       }
+   }
+ 
+   /**
+    * Convert the servant to invocation handler.
+    */
+   public InvokeHandler servantToHandler(Servant a_servant)
+   {
+     if (a_servant instanceof InvokeHandler)
+       {
+         return (InvokeHandler) a_servant;
+       }
+     else if (a_servant instanceof DynamicImplementation)
+       {
+         return new DynamicImpHandler((DynamicImplementation) a_servant);
+       }
+     else
+       {
+         throw new BAD_OPERATION(a_servant +
+           " must be either InvokeHandler or " + "POA DynamicImplementation"
+         );
+       }
+   }
+ 
+   /**
+    * Create a servant object, associated with the passed servant. Requests the
+    * object id from the servant. Depending on the policies of the servants POA,
+    * the calls are eithe not synchronized or synchronized on POA or ORB.
+    *
+    * @param a_servant a servant, serving this object.
+    * @param an_id an Object Id for this object.
+    */
+   public gnuServantObject(Servant a_servant, gnuPOA a_poa)
+   {
+     this(a_servant, a_servant._object_id(), (ORB_1_4) a_servant._orb(), a_poa);
+   }
+ 
+   /**
+    * Delegates call to servant, passing the poa and Id.
+    */
+   public String[] _ids()
+   {
+     if (repository_ids == null)
+       {
+         return getServant()._all_interfaces(poa, Id);
+       }
+     else
+       {
+         return repository_ids;
+       }
+   }
+ 
+   /**
+    * Gets a string representation.
+    */
+   public String toString()
+   {
+     StringBuffer b = new StringBuffer("Servant object (");
+     for (int i = 0; i < Id.length; i++)
+       {
+         b.append(Integer.toHexString(Id [ i ] & 0xFF));
+         b.append(' ');
+       }
+     b.append(')');
+     return b.toString();
+   }
+ 
+   /**
+    * Always returns true.
+    */
+   public boolean _is_local()
+   {
+     return true;
+   }
+ 
+   /**
+    * Check if this object could be named by the given repository id.
+    *
+    * @param idl_id the repository id to check.
+    *
+    * @return true if it is one of the possible repository ids of this object.
+    */
+   public boolean _is_a(String idl_id)
+   {
+     String[] maybe = _ids();
+     for (int i = 0; i < maybe.length; i++)
+       {
+         if (maybe [ i ].equals(idl_id))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   /**
+    * Get an ORB, associated with the servant of this object.
+    *
+    * @return
+    */
+   public ORB _orb()
+   {
+     return getServant()._orb();
+   }
+ 
+   /**
+    * Handle the invocation (delegates to servant).
+    *
+    * @throws TRANSIENT minor 0x535503e9 if the POA is in discarding mode.
+    * @throws OBJ_ADAPTER minor 0x535503ea if the POA is inactivated.
+    * @throws OBJECT_NOT_EXISTS minor 0x535503ec if this object is inactivated.
+    *
+    * @specnote see {@link POAManagerOperations} for specnotes about the minor
+    * codes.
+    */
+   public OutputStream _invoke(String method, InputStream input,
+     ResponseHandler r_handler
+   ) throws SystemException
+   {
+     boolean intercept = false;
+     ServerRequestInterceptorOperations interceptor = null;
+     gnuServerRequestInfo info = null;
+     ResponseHandlerImpl i_handler = null;
+ 
+     try
+       {
+         if (orb.iServer != null &&
+           r_handler instanceof ResponseHandlerImpl
+         )
+           {
+             interceptor = orb.iServer;
+ 
+             i_handler = (ResponseHandlerImpl) r_handler;
+ 
+             info =
+               new gnuServerRequestInfo(this, i_handler.request_header,
+                 i_handler.reply_header
+               );
+             intercept = true;
+ 
+             interceptor.receive_request_service_contexts(info);
+           }
+ 
+         try
+           {
+             CookieHolder cookie = null;
+             AOM.Obj self = poa.aom.get(Id);
+ 
+             if (poa.servant_locator != null)
+               {
+                 // If the servant locator is in use, it is always responsible
+                 // for providing the servant.
+                 self.servant = servant = null;
+                 cookie = new CookieHolder();
+               }
+             else if (self != null && self.isDeactiveted())
+               {
+                 if (poa.applies(
+                     ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION
+                   ) &&
+                   poa.servant_activator != null
+                 )
+                   {
+                     // Reset the servant, forcing the subsequent activation.
+                     servant = null;
+                   }
+                 else
+                   {
+                     throw new OBJECT_NOT_EXIST("Object deactivated",
+                       0x535503ec, CompletionStatus.COMPLETED_NO
+                     );
+                   }
+               }
+ 
+             InvokeHandler handler = getHandler(method, cookie, true);
+ 
+             Delegate d = null;
+ 
+             try
+               {
+                 d = servant._get_delegate();
+                 orb.currents.put(Thread.currentThread(), this);
+               }
+             catch (Exception ex)
+               {
+                 // In some cases exception is thrown if the delegate is not set.
+               }
+             if (d instanceof ServantDelegateImpl)
+               {
+                 // If the delegate is already set, check maybe we can
+                 // reuse the existing instance.
+                 if (((ServantDelegateImpl) d).object != this)
+                   {
+                     servant._set_delegate(new ServantDelegateImpl(servant, poa, Id));
+                   }
+               }
+             else
+               {
+                 servant._set_delegate(new ServantDelegateImpl(servant, poa, Id));
+               }
+ 
+             try
+               {
+                 switch (manager.get_state().value())
+                   {
+                     case State._ACTIVE :
+ 
+                       OutputStream rt;
+                       try
+                         {
+                           if (intercept)
+                             {
+                               interceptor.receive_request(info);
+                             }
+ 
+                           rt = handler._invoke(method, input, r_handler);
+ 
+                           if (intercept)
+                             {
+                               // Handler is casted into i_handler.
+                               if (i_handler.isExceptionReply())
+                                 {
+                                   info.m_reply_header.reply_status =
+                                     ReplyHeader.USER_EXCEPTION;
+ 
+                                   // Make Any, holding the user exception.
+                                   Any a = orb.create_any();
+                                   OutputStream buf = i_handler.getBuffer();
+                                   InputStream in = buf.create_input_stream();
+                                   String uex_idl = "unknown";
+                                   try
+                                     {
+                                       in.mark(Integer.MAX_VALUE);
+                                       uex_idl = in.read_string();
+                                       in.reset();
+                                     }
+                                   catch (IOException e)
+                                     {
+                                       throw new Unexpected(e);
+                                     }
+ 
+                                   try
+                                     {
+                                       UserException exception =
+                                         ObjectCreator.readUserException(uex_idl,
+                                           in
+                                         );
+ 
+                                       ObjectCreator.insertWithHelper(a,
+                                         exception
+                                       );
+                                     }
+                                   catch (Exception e)
+                                     {
+                                       // Failed due any reason, insert without
+                                       // helper.
+                                       a.insert_Streamable(new StreamHolder(
+                                           buf.create_input_stream()
+                                         )
+                                       );
+ 
+                                       RecordTypeCode r =
+                                         new RecordTypeCode(TCKind.tk_except);
+                                       r.setId(uex_idl);
+                                       r.setName(ObjectCreator.getDefaultName(
+                                           uex_idl
+                                         )
+                                       );
+                                     }
+ 
+                                   info.m_usr_exception = a;
+                                   interceptor.send_exception(info);
+                                 }
+                               else
+                                 {
+                                   info.m_reply_header.reply_status =
+                                     ReplyHeader.NO_EXCEPTION;
+                                   interceptor.send_reply(info);
+                                 }
+                             }
+                         }
+                       catch (SystemException sys_ex)
+                         {
+                           if (intercept)
+                             {
+                               info.m_reply_header.reply_status =
+                                 ReplyHeader.SYSTEM_EXCEPTION;
+                               info.m_sys_exception = sys_ex;
+                               interceptor.send_exception(info);
+                             }
+                           throw sys_ex;
+                         }
+ 
+                       return rt;
+ 
+                     case State._HOLDING :
+ 
+                       // The holding mode is implemented
+                       // relying on the holding capabilites of the network
+                       // support (if any).
+                       // TODO FIXME in more recent CORBA applications, the
+                       // client
+                       // ORB can free the connection and wait for a server side
+                       // notification about the completed request. Implement
+                       // this
+                       // as soon as JDK specification would allow bidirectional
+                       // policy.
+                       int sleep = 5;
+                       int max = 500;
+ 
+                       // Wait till the state will be switched into some other
+                       // mode.
+                       while (manager.get_state().value() == State._HOLDING)
+                         {
+                           try
+                             {
+                               Thread.sleep(sleep);
+                               if (sleep < max)
+                                 {
+                                   sleep = max;
+                                 }
+                             }
+                           catch (InterruptedException ex)
+                             {
+                             }
+                         }
+ 
+                       // Handle another mode.
+                       return _invoke(method, input, r_handler);
+ 
+                     case State._DISCARDING :
+                       throw new TRANSIENT("Discarding mode", 0x535503e9,
+                         CompletionStatus.COMPLETED_NO
+                       );
+ 
+                     case State._INACTIVE :
+                       throw new OBJ_ADAPTER("POA deactivated", 0x535503ea,
+                         CompletionStatus.COMPLETED_NO
+                       );
+ 
+                     default :
+                       throw new InternalError(); // No more states.
+                   }
+               }
+             finally
+               {
+                 if (poa.servant_locator != null)
+                   {
+                     poa.servant_locator.postinvoke(Id, poa, method,
+                       cookie.value, servant
+                     );
+                     servant = null;
+                   }
+               }
+           }
+         finally
+           {
+             orb.currents.remove(Thread.currentThread());
+           }
+       }
+     catch (ForwardRequest fex)
+       {
+         // May be thrown by interceptor.
+         if (intercept)
+           {
+             Forwarding:
+             while (true)
+               {
+                 info.m_reply_header.reply_status =
+                   ReplyHeader.LOCATION_FORWARD;
+                 info.m_forward_reference = fex.forward;
+                 try
+                   {
+                     interceptor.send_other(info);
+                     break Forwarding;
+                   }
+                 catch (ForwardRequest fex2)
+                   {
+                     info.m_forward_reference = fex2.forward;
+                     fex.forward = info.m_forward_reference;
+                   }
+               }
+           }
+         throw new gnuForwardRequest(fex.forward);
+       }
+     catch (gnuForwardRequest fex)
+       {
+         // May be thrown during activation.
+         if (intercept)
+           {
+             Forwarding:
+             while (true)
+               {
+                 info.m_reply_header.reply_status =
+                   ReplyHeader.LOCATION_FORWARD;
+                 info.m_forward_reference = fex.forward_reference;
+                 try
+                   {
+                     interceptor.send_other(info);
+                     break Forwarding;
+                   }
+                 catch (ForwardRequest fex2)
+                   {
+                     info.m_forward_reference = fex2.forward;
+                     fex.forward_reference = (ObjectImpl) fex2.forward;
+                   }
+               }
+           }
+         throw fex;
+       }
+   }
+ 
+   /**
+    * Compare with another object for equality, comparing the object keys.
+    */
+   public boolean equals(java.lang.Object other)
+   {
+     if (other instanceof gnuServantObject)
+       {
+         gnuServantObject o = (gnuServantObject) other;
+ 
+         return Arrays.equals(o.Id, Id);
+       }
+     else
+       {
+         return false;
+       }
+   }
+ 
+   /**
+    * Get the hash code, based on the object key.
+    */
+   public int hashCode()
+   {
+     long s = 0;
+     int v = 1;
+     for (int i = 0; i < Id.length; i++)
+       {
+         s += Id [ i ] * v;
+         if (s > Integer.MAX_VALUE)
+           {
+             s = s % Integer.MAX_VALUE;
+             v = 1;
+           }
+         v = v * 8;
+       }
+     return (int) (s % Integer.MAX_VALUE);
+   }
+ 
+   /**
+    * Get the object id.
+    */
+   public byte[] get_object_id()
+   {
+     return Id;
+   }
+ 
+   /**
+    * Get POA.
+    */
+   public POA get_POA()
+   {
+     return poa;
+   }
+ 
+   /**
+    * Returns without action.
+    */
+   public void _release()
+   {
+   }
+ 
+   /**
+    * Returns without action.
+    */
+   public void _releaseReply(InputStream stream)
+   {
+   }
+ 
+   /**
+    * Checks if this object is equivalent to another instance. These objects are
+    * assumed equal if they are connected to the same orb and poa under the same
+    * Id, regardless of they delegates.
+    *
+    * @param another instance to check.
+    * @return
+    */
+   public boolean _is_equivalent(org.omg.CORBA.Object other)
+   {
+     if (other instanceof gnuServantObject)
+       {
+         gnuServantObject g = (gnuServantObject) other;
+         return orb == g.orb && poa == g.poa && Arrays.equals(Id, g.Id);
+       }
+     else if (other instanceof IorObject)
+       {
+         IorObject ir = ((IorObject) other);
+         try
+           {
+             IorDelegate ird = (IorDelegate) ir._get_delegate();
+             byte[] ior_id = poa.idFormIor(ird.getIor().key);
+             if (ior_id != null && Arrays.equals(ior_id, Id))
+               {
+                 return true;
+               }
+             else
+               {
+                 return false;
+               }
+           }
+         catch (Exception ex)
+           {
+             // Non - typical delegate or very specific subclass of
+             // IOR_constructed_object.
+             return super._is_equivalent(other);
+           }
+       }
+     return super._is_equivalent(other);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuServantRetentionPolicy.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuServantRetentionPolicy.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuServantRetentionPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuServantRetentionPolicy.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,80 ----
+ /* gnuServantRetentionPolicy.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA._PolicyImplBase;
+ 
+ import org.omg.PortableServer.SERVANT_RETENTION_POLICY_ID;
+ import org.omg.PortableServer.ServantRetentionPolicy;
+ import org.omg.PortableServer.ServantRetentionPolicyValue;
+ 
+ /**
+  * The implementation of the servant retention policy.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuServantRetentionPolicy
+   extends _PolicyImplBase
+   implements ServantRetentionPolicy, AccessiblePolicy
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1L;
+ 
+   /**
+    * Create the policy.
+    *
+    * @param v a value for the policy.
+    */
+   public gnuServantRetentionPolicy(ServantRetentionPolicyValue v)
+   {
+     super(SERVANT_RETENTION_POLICY_ID.value, v, v.value(),
+           "IDL:org.omg/PortableServer/ServantRetentionPolicy:1.0"
+          );
+   }
+ 
+   /**
+    * Get the value for the policy that was passed in a constructor.
+    */
+   public ServantRetentionPolicyValue value()
+   {
+     return (ServantRetentionPolicyValue) getValue();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuThreadPolicy.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuThreadPolicy.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Poa/gnuThreadPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Poa/gnuThreadPolicy.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,80 ----
+ /* gnuThreadPolicy.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.Poa;
+ 
+ import gnu.CORBA._PolicyImplBase;
+ 
+ import org.omg.PortableServer.THREAD_POLICY_ID;
+ import org.omg.PortableServer.ThreadPolicy;
+ import org.omg.PortableServer.ThreadPolicyValue;
+ 
+ /**
+  * The implementation of the thread policy.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuThreadPolicy
+   extends _PolicyImplBase
+   implements ThreadPolicy, AccessiblePolicy
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1L;
+ 
+   /**
+    * Create the policy.
+    *
+    * @param v a value for the policy.
+    */
+   public gnuThreadPolicy(ThreadPolicyValue v)
+   {
+     super(THREAD_POLICY_ID.value, v, v.value(),
+           "IDL:org.omg/PortableServer/ThreadPolicy:1.0"
+          );
+   }
+ 
+   /**
+    * Get the value for the policy that was passed in a constructor.
+    */
+   public ThreadPolicyValue value()
+   {
+     return (ThreadPolicyValue) getValue();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/RawReply.java gcc-4.1.0/libjava/classpath/gnu/CORBA/RawReply.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/RawReply.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/RawReply.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,95 ----
+ /* RawReply.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.GIOP.MessageHeader;
+ 
+ import org.omg.CORBA.ORB;
+ 
+ /**
+  * The remote object reply in the binary form, holding
+  * the message header and the following binary data.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ class RawReply
+ {
+   /**
+    * The message header.
+    */
+   final MessageHeader header;
+ 
+   /**
+    * The associated orb.
+    */
+   final ORB orb;
+ 
+   /**
+    * The message data.
+    */
+   final byte[] data;
+ 
+   /**
+    * Create the binary reply.
+    *
+    * @param an_header the message header
+    * @param a_data the message data.
+    */
+   RawReply(ORB an_orb, MessageHeader an_header, byte[] a_data)
+   {
+     orb = an_orb;
+     header = an_header;
+     data = a_data;
+   }
+ 
+   /**
+    * Get the CDR input stream with the correctly set alignment.
+    *
+    * @return the CDR stream to read the message data.
+    */
+   BufferredCdrInput getStream()
+   {
+     BufferredCdrInput in = new BufferredCdrInput(data);
+     in.setOffset(header.getHeaderSize());
+     in.setVersion(header.version);
+     in.setOrb(orb);
+     in.setBigEndian(header.isBigEndian());
+     return in;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/ResponseHandlerImpl.java gcc-4.1.0/libjava/classpath/gnu/CORBA/ResponseHandlerImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/ResponseHandlerImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/ResponseHandlerImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,189 ----
+ /* ResponseHandlerImpl.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.GIOP.MessageHeader;
+ import gnu.CORBA.GIOP.ReplyHeader;
+ import gnu.CORBA.GIOP.RequestHeader;
+ import gnu.CORBA.GIOP.CodeSetServiceContext;
+ 
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ResponseHandler;
+ 
+ /**
+  * Provides the CDR output streams for writing the response to the given buffer.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ResponseHandlerImpl
+   implements ResponseHandler
+ {
+   /**
+    * The message header. This field is used to compute the size and alignments.
+    * It is, however, never directly written to the buffer stream.
+    */
+   public final MessageHeader message_header;
+ 
+   /**
+    * The associated orb.
+    */
+   public final ORB orb;
+ 
+   /**
+    * The reply header.
+    */
+   public final ReplyHeader reply_header;
+ 
+   /**
+    * The request header.
+    */
+   public final RequestHeader request_header;
+ 
+   /**
+    * True if the stream was obtained by invoking {@link #createExceptionReply()},
+    * false otherwise.
+    */
+   private boolean exceptionReply;
+ 
+   /**
+    * The buffer to write into.
+    */
+   private BufferedCdrOutput buffer;
+ 
+   /**
+    * Create a new buffered response handler that uses the given message headers.
+    * The headers are used to compute sizes and check the versions. They are not
+    * written into a stream inside this class.
+    *
+    * @param m_header a message header.
+    * @param r_header a reply header.
+    */
+   ResponseHandlerImpl(ORB an_orb, MessageHeader m_header,
+                           ReplyHeader r_header, RequestHeader rq_header)
+   {
+     message_header = m_header;
+     reply_header = r_header;
+     request_header = rq_header;
+     orb = an_orb;
+     prepareStream();
+   }
+ 
+   /**
+    * Get an output stream for providing details about the exception. Before
+    * returning the stream, the handler automatically writes the message header
+    * and the reply about exception header, but not the message header.
+    *
+    * @return the stream to write exception details into.
+    */
+   public OutputStream createExceptionReply()
+   {
+     exceptionReply = true;
+     prepareStream();
+     return buffer;
+   }
+ 
+   /**
+    * Get an output stream for writing a regular reply (not an exception).
+    *
+    * Before returning the stream, the handler automatically writes the regular
+    * reply header, but not the message header.
+    *
+    * @return the output stream for writing a regular reply.
+    */
+   public OutputStream createReply()
+   {
+     exceptionReply = false;
+     prepareStream();
+     reply_header.reply_status = ReplyHeader.NO_EXCEPTION;
+     return buffer;
+   }
+ 
+   /**
+    * Get the buffer, normally containing the written reply. The reply includes
+    * the reply header (or the exception header) but does not include the message
+    * header.
+    *
+    * The stream buffer can also be empty if no data have been written into
+    * streams, returned by {@link #createReply()} or
+    * {@link #createExceptionReply()}.
+    *
+    * @return the CDR output stream, containing the written output.
+    */
+   public BufferedCdrOutput getBuffer()
+   {
+     return buffer;
+   }
+ 
+   /**
+    * True if the stream was obtained by invoking {@link #createExceptionReply()},
+    * false otherwise (usually no-exception reply).
+    */
+   public boolean isExceptionReply()
+   {
+     return exceptionReply;
+   }
+ 
+   /**
+    * Compute the header offset, set the correct version number and codeset.
+    */
+   private void prepareStream()
+   {
+     buffer = new BufferedCdrOutput();
+     buffer.setOrb(orb);
+     buffer.setVersion(message_header.version);
+     buffer.setCodeSet(CodeSetServiceContext.find(reply_header.service_context));
+ 
+     // Since 1.2, the data section is always aligned on the 8 byte boundary.
+     // In older versions, it is necessary to set the offset correctly.
+     if (message_header.version.until_inclusive(1, 1))
+       {
+         buffer.setOffset(message_header.getHeaderSize());
+ 
+         // Get the position after the reply header would be written.
+         reply_header.write(buffer);
+ 
+         int new_offset = message_header.getHeaderSize() + buffer.buffer.size();
+ 
+         buffer.buffer.reset();
+         buffer.setOffset(new_offset);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/ServiceDetailHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/ServiceDetailHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/ServiceDetailHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/ServiceDetailHolder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* ServiceDetailHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.ServiceDetail;
+ import org.omg.CORBA.ServiceDetailHelper;
+ 
+ 
+ /**
+  * The service detail holder. This class is not included in the original
+  * API specification, so we place it outside the org.omg namespace.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ServiceDetailHolder
+   implements org.omg.CORBA.portable.Streamable
+ {
+   /**
+    * The stored value.
+    */
+   public ServiceDetail value;
+ 
+   /**
+    * Create the initialised instance.
+    * @param initialValue
+    */
+   public ServiceDetailHolder(ServiceDetail initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Read from the CDR stream.
+    */
+   public void _read(org.omg.CORBA.portable.InputStream in)
+   {
+     value = ServiceDetailHelper.read(in);
+   }
+ 
+   /**
+    * Get the typecode.
+    */
+   public org.omg.CORBA.TypeCode _type()
+   {
+     return ServiceDetailHelper.type();
+   }
+ 
+   /**
+    * Write into the CDR stream.
+    */
+   public void _write(org.omg.CORBA.portable.OutputStream out)
+   {
+     ServiceDetailHelper.write(out, value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/ServiceRequestAdapter.java gcc-4.1.0/libjava/classpath/gnu/CORBA/ServiceRequestAdapter.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/ServiceRequestAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/ServiceRequestAdapter.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,168 ----
+ /* ServiceRequestConverter.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ 
+ import org.omg.CORBA.ARG_IN;
+ import org.omg.CORBA.ARG_INOUT;
+ import org.omg.CORBA.ARG_OUT;
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.ServerRequest;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.InvokeHandler;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ResponseHandler;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ /**
+  * This class supports invocation using ServerRequest. When possible,
+  * it is better to use  the {@link ObjectImpl#_invoke} rather than
+  * working via ServerRequest. However since 1.4 the ServerRequest is
+  * involved into POA machinery making this type of call is sometimes
+  * inavoidable.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class ServiceRequestAdapter
+   implements ResponseHandler
+ {
+   /**
+    * A buffer for writing the response.
+    */
+   BufferedCdrOutput reply = new BufferedCdrOutput();
+ 
+   /**
+    * If set to true, an exception has been thrown during the invocation.
+    */
+   boolean isException;
+ 
+   public OutputStream createExceptionReply()
+   {
+     isException = true;
+     return reply;
+   }
+ 
+   public OutputStream createReply()
+   {
+     isException = false;
+     return reply;
+   }
+ 
+   /**
+    * Make an invocation.
+    *
+    * @param request a server request, containg the invocation information.
+    * @param target the invocation target
+    * @param result the result holder with the set suitable streamable.
+    * Using this parameter only increase the performance. It can be
+    * null if the return type is void or unknown.
+    */
+   public static void invoke(ServerRequest request, InvokeHandler target,
+                             Streamable result
+                            )
+   {
+     try
+       {
+         int IN = ARG_IN.value;
+         int OUT = ARG_OUT.value;
+ 
+         // Write all arguments to the buffer output stream.
+         BufferedCdrOutput buffer = new BufferedCdrOutput();
+         gnuNVList args = new gnuNVList();
+         request.arguments(args);
+ 
+         for (int i = 0; i < args.count(); i++)
+           {
+             if ((args.item(i).flags() & IN) != 0)
+               {
+                 args.item(i).value().write_value(buffer);
+               }
+           }
+ 
+         ServiceRequestAdapter h = new ServiceRequestAdapter();
+ 
+         target._invoke(request.operation(), buffer.create_input_stream(), h);
+ 
+         InputStream in = h.reply.create_input_stream();
+ 
+         if (h.isException)
+           {
+             // Write the exception information
+             gnuAny exc = new gnuAny();
+             GeneralHolder uku = new GeneralHolder(h.reply);
+             exc.insert_Streamable(uku);
+             request.set_exception(exc);
+           }
+         else
+           {
+             if (result != null)
+               {
+                 // Use the holder for the return value, if provided.
+                 result._read(in);
+ 
+                 gnuAny r = new gnuAny();
+                 r.insert_Streamable(result);
+                 request.set_result(r);
+               }
+             else
+               {
+                 // Use the universal holder otherwise.
+                 gnuAny r = new gnuAny();
+                 r.insert_Streamable(new StreamHolder(in));
+               }
+ 
+             // Unpack the arguments
+             for (int i = 0; i < args.count(); i++)
+               {
+                 if ((args.item(i).flags() & OUT) != 0)
+                   {
+                     Any a = args.item(i).value();
+                     a.read_value(in, a.type());
+                   }
+               }
+           }
+       }
+     catch (Bounds ex)
+       {
+         throw new InternalError();
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/SetOverrideTypeHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/SetOverrideTypeHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/SetOverrideTypeHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/SetOverrideTypeHolder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /* SetOverrideTypeHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.SetOverrideType;
+ import org.omg.CORBA.SetOverrideTypeHelper;
+ 
+ /**
+  * The holder for SetOverrideType.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class SetOverrideTypeHolder
+   implements org.omg.CORBA.portable.Streamable
+ {
+   /**
+    * The stored SetOverrideType value.
+    */
+   public SetOverrideType value;
+ 
+   /**
+    * Create the initialised instance.
+    *
+    * @param initialValue the initial value.
+    */
+   public SetOverrideTypeHolder(SetOverrideType initialValue)
+   {
+     value = initialValue;
+   }
+ 
+   /**
+    * Fill in the {@link value} by data from the CDR stream.
+    */
+   public void _read(org.omg.CORBA.portable.InputStream in)
+   {
+     value = SetOverrideTypeHelper.read(in);
+   }
+ 
+   /**
+    * Get the typecode of the SetOverrideType.
+    */
+   public org.omg.CORBA.TypeCode _type()
+   {
+     return SetOverrideTypeHelper.type();
+   }
+ 
+   /**
+    * Write the stored value into the CDR stream.
+    */
+   public void _write(org.omg.CORBA.portable.OutputStream out)
+   {
+     SetOverrideTypeHelper.write(out, value);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/SimpleDelegate.java gcc-4.1.0/libjava/classpath/gnu/CORBA/SimpleDelegate.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/SimpleDelegate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/SimpleDelegate.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,294 ----
+ /* Local_delegate.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.Context;
+ import org.omg.CORBA.ContextList;
+ import org.omg.CORBA.ExceptionList;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.NamedValue;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Request;
+ import org.omg.CORBA.portable.Delegate;
+ import org.omg.CORBA.portable.ObjectImpl;
+ 
+ /**
+  * The delegate, implementing the basic functionality only. This delegate
+  * is set in {@link ORG.connect(org.omg.CORBA.Object)} if ORB
+  * determines that the object is an instance of the
+  * {@link org.omg.CORBA.portable.ObjectImpl} and no other delegate is set.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class SimpleDelegate
+   extends Delegate
+   implements IorProvider
+ {
+   /**
+    * The orb.
+    */
+   protected final ORB orb;
+ 
+   /**
+    * The ior.
+    */
+   protected IOR ior;
+ 
+   public SimpleDelegate(ORB an_orb, IOR an_ior)
+   {
+     orb = an_orb;
+     ior = an_ior;
+   }
+ 
+   /**
+    * Set the IOR of this object. The IOR must be newly set if
+    * the server reports that the object has permanently moved to a new
+    * location.
+    *
+    * @param an_ior the new IOR.
+    */
+   public void setIor(IOR an_ior)
+   {
+     this.ior = an_ior;
+   }
+ 
+   /**
+    * Get the IOR of this object.
+    */
+   public IOR getIor()
+   {
+     return ior;
+   }
+ 
+   /**
+    * Not implemented.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public Request create_request(org.omg.CORBA.Object target, Context context,
+                                 String operation, NVList parameters,
+                                 NamedValue returns
+                                )
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /**
+    * Not implemented.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public Request create_request(org.omg.CORBA.Object target, Context context,
+                                 String operation, NVList parameters,
+                                 NamedValue returns, ExceptionList exceptions,
+                                 ContextList ctx_list
+                                )
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /**
+    * Not implemented.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public org.omg.CORBA.Object duplicate(org.omg.CORBA.Object target)
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /**
+    * Performs direct comparison ('==').
+    */
+   public boolean equals(org.omg.CORBA.Object self, org.omg.CORBA.Object other)
+   {
+     return self == other;
+   }
+ 
+   /**
+    * Not implemented.
+    *
+    * @throws NO_IMPLEMENT, always.
+    */
+   public org.omg.CORBA.Object get_interface_def(org.omg.CORBA.Object target)
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /**
+    * Return the hashcode (0 <= hashcode < maximum).
+    */
+   public int hash(org.omg.CORBA.Object target, int maximum)
+   {
+     return target == null ? 0 : target.hashCode() % maximum;
+   }
+ 
+   /**
+    * Delegates functionality to java.lang.Object.hashCode();
+    */
+   public int hashCode(org.omg.CORBA.Object target)
+   {
+     return target == null ? 0 : target.hashCode();
+   }
+ 
+   /**
+    * Check if this object can be referenced by the given repository id.
+    *
+    * @param target the CORBA object, must be an instance of
+    * {@link org.omg.CORBA.portable.ObjectImpl}.
+    *
+    * @param repositoryIdentifer the repository id.
+    *
+    * @return true if the passed parameter is a repository id of this
+    * CORBA object.
+    */
+   public boolean is_a(org.omg.CORBA.Object target, String repositoryIdentifer)
+   {
+     if (!(target instanceof ObjectImpl))
+       throw new NO_IMPLEMENT("Supported only for org.omg.CORBA.portable.ObjectImpl");
+ 
+     ObjectImpl imp = (ObjectImpl) target;
+     String[] ids = imp._ids();
+ 
+     for (int i = 0; i < ids.length; i++)
+       {
+         if (ids [ i ].equals(repositoryIdentifer))
+           return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Returns true if the objects are the same or have the same delegate set. All
+    * objects in this implementation have a separate delegate.
+    */
+   public boolean is_equivalent(org.omg.CORBA.Object target,
+     org.omg.CORBA.Object other)
+   {
+     if (target == other)
+       return true;
+     if ((target instanceof ObjectImpl) && other instanceof ObjectImpl)
+       {
+         try
+           {
+             org.omg.CORBA.portable.Delegate a = ((ObjectImpl) target)._get_delegate();
+             org.omg.CORBA.portable.Delegate b = ((ObjectImpl) other)._get_delegate();
+             if (a == b)
+               {
+                 return true;
+               }
+             else
+               {
+                 // We compere the IOR's in this case.
+                 if (a instanceof IorProvider && b instanceof IorProvider)
+                   {
+                     IOR ia = ((IorProvider) a).getIor();
+                     IOR ib = ((IorProvider) b).getIor();
+ 
+                     if (ia != null && ib != null)
+                       return (ia.equals(ib));
+                     else
+                       return ia == ib;
+                   }
+               }
+             if (a != null && b != null)
+               {
+                 return a.equals(b);
+               }
+           }
+         catch (Exception ex)
+           {
+             // Unable to get one of the delegates.
+             return false;
+           }
+       }
+     return false;
+   }
+ 
+   /**
+    * Returns true by default.
+    */
+   public boolean is_local(org.omg.CORBA.Object self)
+   {
+     return true;
+   }
+ 
+   /**
+    * Returns true if the target is null.
+    */
+   public boolean non_existent(org.omg.CORBA.Object target)
+   {
+     return target == null;
+   }
+ 
+   /**
+    * Returns the ORB, passed in constructor,
+    * regardless of the argument. This class requires a single instance
+    * per each object.
+    */
+   public ORB orb(org.omg.CORBA.Object target)
+   {
+     return orb;
+   }
+ 
+   /**
+    * Returns without action.
+    */
+   public void release(org.omg.CORBA.Object target)
+   {
+   }
+ 
+   /**
+    * This method assumes that the target is local and connected to the ORB.
+    */
+   public Request request(org.omg.CORBA.Object target, String operation)
+   {
+     if (orb instanceof OrbFunctional)
+       {
+         ((OrbFunctional) orb).ensureRunning();
+       }
+     gnuRequest g = new gnuRequest();
+     g.setORB(orb);
+     g.setOperation(operation);
+     g.setIor(ior);
+     g.m_target = target;
+     return g;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/SocketRepository.java gcc-4.1.0/libjava/classpath/gnu/CORBA/SocketRepository.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/SocketRepository.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/SocketRepository.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,151 ----
+ /* SocketRepository.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import java.net.Socket;
+ import java.net.SocketException;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ 
+ /**
+  * This class caches the opened sockets that are reused during the
+  * frequent calls. Otherwise, some CORBA applications may spend
+  * up to 90 % of the working time just for closing and opening the sockets.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class SocketRepository
+ {
+   /**
+    * The socket map.
+    */
+   private static HashMap sockets = new HashMap();
+   
+   /**
+    * Put a socket. This method also discards all not reusable sockets from
+    * the map.
+    *
+    * @param key as socket key.
+    *
+    * @param s a socket.
+    */
+   public static void put_socket(Object key, Socket s)
+   {
+     synchronized (sockets)
+       {
+         sockets.put(key, s);
+         gc();
+       }
+   }
+   
+   /**
+    * Removes all non reusable sockets. As it is private,
+    * we know we call from the synchronized code already. 
+    */
+   private static void gc()
+   {
+     Iterator iter = sockets.entrySet().iterator();
+     
+     Map.Entry e;
+     Socket sx;
+     
+     while (iter.hasNext())
+       {
+         e = (Map.Entry) iter.next();
+         sx = (Socket) e.getValue();
+         
+         if (not_reusable(sx))
+           iter.remove();
+       }
+   }
+   
+   /**
+    * Return true if the socket is no longer reusable.
+    */
+   static boolean not_reusable(Socket s)
+   {
+     return (s.isClosed() || !s.isBound() || !s.isConnected() ||
+         s.isInputShutdown() || s.isOutputShutdown());
+   }
+ 
+   /**
+    * Get a socket.
+    * 
+    * @param key a socket key.
+    * 
+    * @return an opened socket for reuse, null if no such available or it is
+    * closed, its input or output has been shutown or otherwise the socket is not
+    * reuseable.
+    */
+   public static Socket get_socket(Object key)
+   {
+     if (true)
+       return null;
+ 
+     synchronized (sockets)
+       {
+         Socket s = (Socket) sockets.get(key);
+         if (s == null)
+           return null;
+ 
+         // Ensure that the socket is fully reusable.
+         else if (not_reusable(s))
+           {
+             sockets.remove(key);
+             return null;
+           }
+         else
+           {
+             try
+               {
+                 // Set one minute time out that will be changed later.
+                 s.setSoTimeout(60 * 1000);
+               }
+             catch (SocketException e)
+               {
+                 s = null;
+               }
+ 
+             sockets.remove(key);
+             return s;
+           }
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/StreamBasedRequest.java gcc-4.1.0/libjava/classpath/gnu/CORBA/StreamBasedRequest.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/StreamBasedRequest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/StreamBasedRequest.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,60 ----
+ /* gnuStreamRequest.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ 
+ /**
+  * A stream, additionally holding the gnu request.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class StreamBasedRequest
+   extends BufferedCdrOutput
+ {
+   /**
+    * The enclosed request.
+    */
+   public gnuRequest request;
+ 
+   /**
+    * True if the response is expected.
+    */
+   public boolean response_expected = true;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/StreamHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/StreamHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/StreamHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/StreamHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,123 ----
+ /* StreamHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * A holder that stores the input stream, from that the holder data
+  * can be read. There is no way to write the data into this holder.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class StreamHolder
+   implements Streamable
+ {
+   /**
+    * The stream, holding the data for this holder.
+    */
+   protected final InputStream stream;
+ 
+   /**
+    * Create a holder that will read from the given stream.
+    *
+    * @param a_stream a stream.
+    */
+   public StreamHolder(InputStream a_stream)
+   {
+     stream = a_stream;
+   }
+ 
+   /**
+    * This method is not in use, should never be called.
+    */
+   public TypeCode _type()
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /**
+    * Writes the data from the stored stream into the provided
+    * output stream till the end of the input stream is reached.
+    *
+    * @throws MARSHAL if the IOException is thrown during operation.
+    */
+   public void _write(OutputStream output)
+   {
+     try
+       {
+         int d = stream.read();
+ 
+         while (d >= 0)
+           {
+             output.write(d);
+             d = stream.read();
+           }
+       }
+     catch (IOException ex)
+       {
+         MARSHAL m = new MARSHAL();
+         m.initCause(ex);
+         m.minor = Minor.CDR;
+         throw m;
+       }
+   }
+ 
+   /**
+    * This method is not in use, should never be called.
+    */
+   public void _read(InputStream input)
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /**
+    * Get the input stream that has been passed in constructor.
+    */
+   InputStream getInputStream()
+   {
+     return stream;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/StubLocator.java gcc-4.1.0/libjava/classpath/gnu/CORBA/StubLocator.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/StubLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/StubLocator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,110 ----
+ /* StubLocator.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.portable.ObjectImpl;
+ 
+ /**
+  * Finds a stub class like "_HelloStub" that can be instantiated
+  * from IOR reference. The returned object can be casted to the
+  * used type like "Hello" without using the helper .narrow method,
+  * and the object is not unnsecessarily re - instantiated if
+  * the .narrow method is used anyway. If no stub, matching the naming
+  * conventions, is available, the returned stub replacement can still be used
+  * to get the valid request, add parameter and invoke the method by name.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class StubLocator
+ {
+   /**
+    * Search for the possibly available default stub.
+    *
+    * @param orb the current ORB. It is not required to find the binding
+    * classes, but is needed to instantiate the default implementation
+    * if no binding classes are found.
+    *
+    * @param ior the IOR, possibly containing the information about the
+    * correct implementation class.
+    */
+   public static ObjectImpl search(ORB orb, IOR ior)
+   {
+     try
+       {
+         int a = ior.Id.indexOf(':');
+         int b = ior.Id.lastIndexOf(':');
+ 
+         String s = ior.Id.substring(a + 1, b).replace('/', '.');
+ 
+         String path;
+ 
+         b = s.lastIndexOf('.');
+         if (b > 0)
+           path = s.substring(0, b + 1);
+         else
+           path = "";
+ 
+         String stub = "_" + s.substring(b + 1) + "Stub";
+ 
+         Class stubClass = ObjectCreator.forName(path + stub);
+ 
+         return (ObjectImpl) stubClass.newInstance();
+       }
+     catch (Exception failed)
+       {
+         // Various exceptions can be thrown if the Id cannot be parsed,
+         // the class is missing, cannot be instantiated or is not an
+         // instance of the ObjectImpl.
+         return createDefaultStub(orb, ior);
+       }
+   }
+ 
+   /**
+    * Return the default stub for the case when the client binding classes
+    * are not locally available. The returned stub can still be used
+    * to get the valid request, add parameter and invoke the method by name.
+    *
+    * @return the default implementation.
+    */
+   protected static ObjectImpl createDefaultStub(ORB orb, IOR ior)
+   {
+     return new IorObject(orb, ior);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/TypeCodeHelper.java gcc-4.1.0/libjava/classpath/gnu/CORBA/TypeCodeHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/TypeCodeHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/TypeCodeHelper.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,304 ----
+ /* TypeCodeHelper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.typecodes.FixedTypeCode;
+ import gnu.CORBA.typecodes.GeneralTypeCode;
+ import gnu.CORBA.typecodes.ArrayTypeCode;
+ import gnu.CORBA.typecodes.PrimitiveTypeCode;
+ import gnu.CORBA.typecodes.RecordTypeCode;
+ import gnu.CORBA.typecodes.StringTypeCode;
+ 
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.TypeCodePackage.Bounds;
+ 
+ /**
+  * Reads and writes the TypeCodes usind common data representation.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class TypeCodeHelper
+ {
+   /**
+    * Read the CORBA {@link TypeCode}. First, the TypeCode kind
+    * is read as four byte long. Then, if needed, the additional
+    * parameters are loaded following CORBA specification.
+    *
+    * @param in a stream to read from.
+    */
+   public static TypeCode read(org.omg.CORBA.portable.InputStream in)
+                        throws BadKind, Bounds
+   {
+     TCKind kind = TCKind.from_int(in.read_long());
+     TypeCode rt;
+     GeneralTypeCode g;
+     RecordTypeCode r;
+     RecordTypeCode.Field f;
+     StringTypeCode s;
+     int n;
+ 
+     switch (kind.value())
+       {
+         case TCKind._tk_sequence :
+         case TCKind._tk_array :
+ 
+           ArrayTypeCode p = new ArrayTypeCode(kind);
+           p.setLength(in.read_long());
+           rt = p;
+           break;
+           
+         case TCKind._tk_string :
+         case TCKind._tk_wstring :
+           s = new StringTypeCode(kind);
+           s.setLength(in.read_long());
+           rt = s;
+           break;
+ 
+         case TCKind._tk_fixed :
+ 
+           FixedTypeCode fx = new FixedTypeCode();
+           fx.setDigits(in.read_short());
+           fx.setScale(in.read_short());
+           rt = fx;
+           break;
+ 
+         case TCKind._tk_objref :
+         case TCKind._tk_native :
+         case TCKind._tk_abstract_interface :
+           g = new GeneralTypeCode(kind);
+           g.setId(in.read_string());
+           g.setName(in.read_string());
+           rt = g;
+           break;
+ 
+         case TCKind._tk_alias :
+         case TCKind._tk_value_box :
+           g = new GeneralTypeCode(kind);
+           g.setId(in.read_string());
+           g.setName(in.read_string());
+           g.setContentType(in.read_TypeCode());
+           rt = g;
+           break;
+ 
+         case TCKind._tk_struct :
+         case TCKind._tk_except :
+           r = new RecordTypeCode(kind);
+           r.setId(in.read_string());
+           r.setName(in.read_string());
+ 
+           n = in.read_long();
+ 
+           for (int i = 0; i < n; i++)
+             {
+               f = r.field();
+               f.name = in.read_string();
+               f.type = in.read_TypeCode();
+             }
+           rt = r;
+           break;
+ 
+         case TCKind._tk_enum :
+           r = new RecordTypeCode(kind);
+           r.setId(in.read_string());
+           r.setName(in.read_string());
+ 
+           n = in.read_long();
+ 
+           for (int i = 0; i < n; i++)
+             {
+               f = r.field();
+               f.name = in.read_string();
+             }
+           rt = r;
+           break;
+ 
+         case TCKind._tk_union :
+           r = new RecordTypeCode(kind);
+           r.setId(in.read_string());
+           r.setName(in.read_string());
+           r.setDiscriminator_type(in.read_TypeCode());
+           r.setDefaultIndex(in.read_long());
+ 
+           n = in.read_long();
+ 
+           for (int i = 0; i < n; i++)
+             {
+               f = r.field();
+               f.label = in.read_any();
+               f.name = in.read_string();
+               f.type = in.read_TypeCode();
+             }
+           rt = r;
+ 
+           break;
+ 
+         case TCKind._tk_value :
+           r = new RecordTypeCode(kind);
+           r.setId(in.read_string());
+           r.setName(in.read_string());
+           r.setTypeModifier(in.read_short());
+           r.setConcreteBase_type(in.read_TypeCode());
+ 
+           n = in.read_long();
+ 
+           for (int i = 0; i < n; i++)
+             {
+               f = r.field();
+               f.name = in.read_string();
+               f.type = in.read_TypeCode();
+               f.visibility = in.read_short();
+             }
+           rt = r;
+           break;
+ 
+         default :
+           rt = new PrimitiveTypeCode(kind);
+       }
+     return rt;
+   }
+ 
+   /**
+    * Write the CORBA {@link TypeCode}. First, the TypeCode kind
+    * is written as four byte long. Then, if needed, the additional
+    * parameters are stored following CORBA specification.
+    *
+    * @param out a stream to write into.
+    * @param x a {@link TypeCode} to write.
+    */
+   public static void write(org.omg.CORBA.portable.OutputStream out, TypeCode x)
+                     throws BadKind, Bounds
+   {
+     out.write_long(x.kind().value());
+ 
+     switch (x.kind().value())
+       {
+         case TCKind._tk_string :
+         case TCKind._tk_wstring :
+           out.write_long(x.length());
+           break;
+ 
+         case TCKind._tk_sequence :
+         case TCKind._tk_array :
+           write(out, x.content_type());
+           out.write_long(x.length());
+           break;
+ 
+         case TCKind._tk_fixed :
+           out.write_short(x.fixed_digits());
+           out.write_short(x.fixed_scale());
+           break;
+ 
+         case TCKind._tk_objref :
+         case TCKind._tk_native :
+         case TCKind._tk_abstract_interface :
+           out.write_string(x.id());
+           out.write_string(x.name());
+           break;
+ 
+         case TCKind._tk_alias :
+         case TCKind._tk_value_box :
+           out.write_string(x.id());
+           out.write_string(x.name());
+           write(out, x.content_type());
+           break;
+ 
+         case TCKind._tk_struct :
+         case TCKind._tk_except :
+           out.write_string(x.id());
+           out.write_string(x.name());
+ 
+           out.write_long(x.member_count());
+ 
+           for (int i = 0; i < x.member_count(); i++)
+             {
+               out.write_string(x.member_name(i));
+               write(out, x.member_type(i));
+             }
+           break;
+ 
+         case TCKind._tk_enum :
+           out.write_string(x.id());
+           out.write_string(x.name());
+ 
+           out.write_long(x.member_count());
+ 
+           for (int i = 0; i < x.member_count(); i++)
+             {
+               out.write_string(x.member_name(i));
+             }
+           break;
+ 
+         case TCKind._tk_union :
+           out.write_string(x.id());
+           out.write_string(x.name());
+ 
+           write(out, x.discriminator_type());
+           out.write_long(x.default_index());
+ 
+           out.write_long(x.member_count());
+ 
+           for (int i = 0; i < x.member_count(); i++)
+             {
+               out.write_any(x.member_label(i));
+               out.write_string(x.member_name(i));
+               write(out, x.member_type(i));
+             }
+           break;
+ 
+         case TCKind._tk_value :
+           out.write_string(x.id());
+           out.write_string(x.name());
+           out.write_short(x.type_modifier());
+           write(out, x.concrete_base_type());
+ 
+           out.write_long(x.member_count());
+ 
+           for (int i = 0; i < x.member_count(); i++)
+             {
+               out.write_string(x.member_name(i));
+               write(out, x.member_type(i));
+               out.write_short(x.member_visibility(i));
+             }
+           break;
+ 
+         default :}
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/TypeKindNamer.java gcc-4.1.0/libjava/classpath/gnu/CORBA/TypeKindNamer.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/TypeKindNamer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/TypeKindNamer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,183 ----
+ /* primitiveTypes.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.typecodes.PrimitiveTypeCode;
+ import gnu.CORBA.typecodes.RecordTypeCode;
+ 
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ 
+ /**
+  * A conveniency method for naming the built-in types.
+  * This is used in error reporting that is part of the user interface.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class TypeKindNamer
+ {
+   /**
+    * Names of the primitve types.
+    */
+   protected static final String[] tk =
+     new String[]
+     {
+       "null", "void", "short", "long", "ushort", "ulong", "float", "double",
+       "boolean", "char", "octet", "any", "TypeCode", "Principal", "objref",
+       "struct", "union", "enum", "string", "sequence", "array", "alias",
+       "exception", "longlong", "ulonglong", "longdouble", "wchar", "wstring",
+       "fixed", "value", "value_box", "native", "abstract_interface"
+     };
+ 
+   /**
+    * Primitve TypeCodes.
+    */
+   protected static final TypeCode[] primitveCodes =
+     new TypeCode[]
+     {
+       new PrimitiveTypeCode(TCKind.tk_null),
+       new PrimitiveTypeCode(TCKind.tk_void),
+       new PrimitiveTypeCode(TCKind.tk_short),
+       new PrimitiveTypeCode(TCKind.tk_long),
+       new PrimitiveTypeCode(TCKind.tk_ushort),
+       new PrimitiveTypeCode(TCKind.tk_ulong),
+       new PrimitiveTypeCode(TCKind.tk_float),
+       new PrimitiveTypeCode(TCKind.tk_double),
+       new PrimitiveTypeCode(TCKind.tk_boolean),
+       new PrimitiveTypeCode(TCKind.tk_char),
+       new PrimitiveTypeCode(TCKind.tk_octet),
+       new PrimitiveTypeCode(TCKind.tk_any),
+       new PrimitiveTypeCode(TCKind.tk_TypeCode),
+       new PrimitiveTypeCode(TCKind.tk_Principal),
+       new RecordTypeCode(TCKind.tk_objref),
+       new PrimitiveTypeCode(TCKind.tk_struct),
+       new PrimitiveTypeCode(TCKind.tk_union),
+       new PrimitiveTypeCode(TCKind.tk_enum),
+       new PrimitiveTypeCode(TCKind.tk_string),
+       new PrimitiveTypeCode(TCKind.tk_sequence),
+       new PrimitiveTypeCode(TCKind.tk_array),
+       new PrimitiveTypeCode(TCKind.tk_alias),
+       new PrimitiveTypeCode(TCKind.tk_except),
+       new PrimitiveTypeCode(TCKind.tk_longlong),
+       new PrimitiveTypeCode(TCKind.tk_ulonglong),
+       new PrimitiveTypeCode(TCKind.tk_longdouble),
+       new PrimitiveTypeCode(TCKind.tk_wchar),
+       new PrimitiveTypeCode(TCKind.tk_wstring),
+       new PrimitiveTypeCode(TCKind.tk_fixed),
+       new PrimitiveTypeCode(TCKind.tk_value),
+       new PrimitiveTypeCode(TCKind.tk_value_box),
+       new PrimitiveTypeCode(TCKind.tk_native),
+       new PrimitiveTypeCode(TCKind.tk_abstract_interface)
+     };
+ 
+   static
+   {
+     // The Id of the "abstract object" is defined as empty string.
+     RecordTypeCode object =
+       (RecordTypeCode) primitveCodes [ TCKind._tk_objref ];
+     object.setId("");
+     object.setName("Object");
+   }
+ 
+   /**
+    * Get the primitive type code.
+    *
+    * @return the primitve type code, corresponding the passed value.
+    *
+    * @throws BadKind if this is not a primitive type code.
+    */
+   public static TypeCode getPrimitveTC(TCKind tc)
+                                 throws BadKind
+   {
+     try
+       {
+         return primitveCodes [ tc.value() ];
+       }
+     catch (ArrayIndexOutOfBoundsException ex)
+       {
+         throw new BadKind(tc.value() + " is not a primitve type.");
+       }
+   }
+ 
+   /**
+    * Get the string name of the passed primitive type.
+    *
+    * @param kind the kind of the primitive type the must be defined
+    * in {@link omg.org.CORBA.TCKind}.
+    *
+    * @return the short string name, used in error reporting, etc.
+    */
+   public static String nameIt(int kind)
+   {
+     try
+       {
+         return tk [ kind ];
+       }
+     catch (ArrayIndexOutOfBoundsException ex)
+       {
+         return "type of kind '" + kind + "'";
+       }
+   }
+ 
+   /**
+    * Get the string name of the passed primitive type.
+    *
+    * @param kind the kind of the primitive type the must be defined
+    * in {@link omg.org.CORBA.TCKind}.
+    *
+    * @return the short string name, used in error reporting, etc.
+    */
+   public static String nameIt(TypeCode type)
+   {
+     try
+       {
+         if (type.kind().value() == TCKind._tk_array)
+           return "array of " + nameIt(type.content_type());
+         else if (type.kind().value() == TCKind._tk_sequence)
+           return "sequence of " + nameIt(type.content_type());
+         else
+           return nameIt(type.kind().value());
+       }
+     catch (Exception ex)
+       {
+         return "type of kind '" + type.kind().value() + "'";
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Unexpected.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Unexpected.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Unexpected.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Unexpected.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,128 ----
+ /* DNW.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ 
+ /**
+  * Contains the static method to throw an error in the case
+  * when the execution should never get into the current point.
+  *
+  * The error message contains the text, suggesting to check
+  * the user code first and then report a bug.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class Unexpected
+   extends InternalError
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The default message for the CORBA assertion error.
+    */
+   public static final String SHARED_MESSAGE =
+     "CORBA assertion error. Please check your code. " +
+     "If you think it is Classpath problem, please report " +
+     "this bug providing as much information as possible.";
+ 
+   /**
+    * Create an instance with explaining message and enclosing
+    * exception.
+    */
+   public Unexpected(String msg, Exception why)
+   {
+     super(msg + ". " + SHARED_MESSAGE);
+     if (why != null)
+       initCause(why);
+   }
+ 
+   /**
+    * Create an instance with enclosing exception.
+    */
+   public Unexpected(Exception why)
+   {
+     super(SHARED_MESSAGE);
+     if (why != null)
+       initCause(why);
+   }
+ 
+   /**
+    * Create an instance.
+    */
+   public Unexpected()
+   {
+     super(SHARED_MESSAGE);
+   }
+ 
+   /**
+    * Throws an error with the custom explaining message and
+    * the appended share message.
+    *
+    * @param msg the error message
+    * @param why the enclosing exception.
+    */
+   public static void error(String msg, Exception why)
+   {
+     throw new Unexpected(msg, why);
+   }
+ 
+   /**
+    * Throws an error with the shared explaining message.
+    *
+    * @param why the enclosing exception.
+    * @throws Error, always.
+    */
+   public static void error(Exception why)
+   {
+     throw new Unexpected(why);
+   }
+ 
+   /**
+    * Throws an error with the shared explaining message.
+    *
+    * @throws Error, always.
+    */
+   public static void error()
+   {
+     throw new Unexpected();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/Version.java gcc-4.1.0/libjava/classpath/gnu/CORBA/Version.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/Version.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/Version.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,222 ----
+ /* Version.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import java.io.IOException;
+ import java.io.Serializable;
+ 
+ import org.omg.CORBA.MARSHAL;
+ 
+ /**
+  * A version number, represented by the major version number
+  * and the minor version number.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class Version
+   implements Serializable
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * Major number (0..256, so the byte cannot be used).
+    */
+   public final int major;
+ 
+   /**
+    * Minor number.
+    */
+   public final int minor;
+ 
+   /**
+    * Create the version with the given version numbers.
+    *
+    * @param _major major number (0..255)
+    * @param _minor minor number (0..255)
+    */
+   public Version(int _major, int _minor)
+   {
+     major = (byte) _major;
+     minor = (byte) _minor;
+   }
+ 
+   /**
+    * Returns true if the versions are equal.
+    * @param other the other version to compare.
+    *
+    * @return true if the versions are equal
+    */
+   public boolean equals(java.lang.Object other)
+   {
+     if (other == this)
+       {
+         return true;
+       }
+     if (!(other instanceof Version))
+       {
+         return false;
+       }
+ 
+     Version that = (Version) other;
+     return same(that);
+   }
+   
+   /**
+    * Get the hashcode, higher 8 bits being the major version and lower 8 bits
+    * the minor version.
+    */
+   public int hashCode()
+   {
+     return major << 8 | minor;
+   }    
+ 
+   /**
+    * Read from the input stream, major number first.
+    * @param in a stream to read from.
+    */
+   public static Version read_version(java.io.InputStream in)
+   {
+     try
+       {
+         int major = in.read() & 0xFF;
+         int minor = in.read() & 0xFF;
+         return new Version(major, minor);
+       }
+     catch (IOException ex)
+       {
+         MARSHAL m = new MARSHAL("IOException while reading message header");
+         m.initCause(ex);
+         m.minor = Minor.Header;
+         throw m;
+       }
+   }
+ 
+   /**
+    * Returns true if the versions are the same.
+    *
+    * @param that the other version to compare.
+    *
+    * @return true if the versions are the same.
+    */
+   public boolean same(Version that)
+   {
+     return major == that.major && minor == that.minor;
+   }
+ 
+   /**
+    * Returns true if the given version is higher than
+    * or equals to the version, supplied as parameter
+    * in the form of two integers.
+    *
+    * @param a_major major number of the version to compare.
+    * @param a_minor minor number of the version to compare.
+    *
+    * @return true if this version is higher than or equals to
+    * the version v.
+    */
+   public boolean since_inclusive(int a_major, int a_minor)
+   {
+     if (major > a_major)
+       return true;
+     else if (major < a_major)
+       return false;
+     else
+ 
+       // Major numbers are equal.
+       return minor >= a_minor;
+   }
+ 
+   /**
+    * Return the string representation, in the form
+    * major.minor.
+    */
+   public String toString()
+   {
+     return major + "." + minor;
+   }
+ 
+   /**
+    * Returs true if the given version is lower or equal to the
+    * version, specified by the provided minor and major version
+    * number. This means, the version, specified by these two numbers,
+    * should be supported by the current version.
+    *
+    * @param a_major a major version number.
+    * @param a_minor a minor version number.
+    *
+    * @return true if the current version should be supported by the
+    * version, specified by the two passed numbers.
+    */
+   public boolean until_inclusive(int a_major, int a_minor)
+   {
+     if (major < a_major)
+       return true;
+     else if (major > a_major)
+       return false;
+     else
+ 
+       // Major numbers are equal.
+       return minor <= a_minor;
+   }
+ 
+   /**
+    * Write into the output stream, major number first.
+    *
+    * @param out a stream to write into.
+    */
+   public void write(java.io.OutputStream out)
+   {
+     try
+       {
+         out.write(major & 0xFF);
+         out.write(minor & 0xFF);
+       }
+     catch (IOException ex)
+       {
+         MARSHAL m = new MARSHAL("IOException while writing message header");
+         m.minor = Minor.Header;
+         m.initCause(ex);
+         throw m;
+       }
+   }
+  
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/WCharHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/WCharHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/WCharHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/WCharHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,128 ----
+ /* WCharHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.typecodes.PrimitiveTypeCode;
+ 
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ /**
+  * A holder for CORBA <code>char</code> that is mapped into
+  * java <code>char</code>.
+  *
+  * The holders have several application areas. The end user usually
+  * sees them implementing CORBA methods where the primitive type
+  * is passed by reference. While CORBA (or, for example, C) supports
+  * this, the java does not and a wrapper class is required.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public final class WCharHolder
+   implements Streamable
+ {
+   /**
+    * The default type code for this holder.
+    */
+   private static final TypeCode t_char = new PrimitiveTypeCode(TCKind.tk_wchar);
+ 
+   /**
+    * The <code>char</code> (CORBA <code>wchar</code>) value,
+    * held by this WCharHolder.
+    */
+   public char value;
+ 
+   /**
+    * Constructs an instance of WCharHolder,
+    * initializing {@link #value} to <code>0 </code>.
+    */
+   public WCharHolder()
+   {
+   }
+ 
+   /**
+    * Constructs an instance of WCharHolder,
+    * initializing {@link #value} to the given <code>char</code>.
+    *
+    * @param initial_value a value that will be assigned to the
+    * {@link #value} field.
+    */
+   public WCharHolder(char initial_value)
+   {
+     value = initial_value;
+   }
+ 
+   /**
+    * Fill in the {@link value } field by reading the required data
+    * from the given stream. For <code>char</code>, the functionality
+    * is delegated to
+    * {@link org.omg.CORBA.portable.InputStream#read_wchar}.
+    *
+    * @param input the input stream to read from.
+    */
+   public void _read(InputStream input)
+   {
+     value = input.read_wchar();
+   }
+ 
+   /**
+    * Returns the TypeCode, corresponding the CORBA type that is stored
+    * using this holder.
+    */
+   public TypeCode _type()
+   {
+     return t_char;
+   }
+ 
+   /**
+    * Write the {@link value } field to the given stream.
+    * For <code>char</code>, the functionality
+    * is delegated to
+    * {@link org.omg.CORBA.portable.OutputStream#write_wchar(char) }.
+    *
+    * @param output the output stream to write into.
+    */
+   public void _write(OutputStream output)
+   {
+     output.write_wchar(value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/WStringHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/WStringHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/WStringHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/WStringHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,131 ----
+ /* WStringHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.typecodes.StringTypeCode;
+ 
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ /**
+  * A holder for CORBA <code>wstring</code> that is mapped into
+  * java <code>String</code>. This holder writes and reads differently
+  * from the StringHolder.
+  *
+  * The holders have several application areas. The end user usually
+  * sees them implementing CORBA methods where the primitive type
+  * is passed by reference. While CORBA (or, for example, C) supports
+  * this, the java does not and a wrapper class is required.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class WStringHolder
+   implements Streamable
+ {
+   /**
+    * The default type code for this holder.
+    */
+   private static final StringTypeCode t_string =
+     new StringTypeCode(TCKind.tk_wstring);
+ 
+   /**
+    * The <code>String</code> (CORBA <code>string</code>) value,
+    * held by this WStringHolder.
+    */
+   public String value;
+ 
+   /**
+    * Constructs an instance of WStringHolder,
+    * initializing {@link #value} to <code>null</code>.
+    */
+   public WStringHolder()
+   {
+   }
+ 
+   /**
+    * Constructs an instance of WStringHolder,
+    * initializing {@link #value} to the given <code>String</code>.
+    *
+    * @param initial_value a value that will be assigned to the
+    * {@link #value} field.
+    */
+   public WStringHolder(String initial_value)
+   {
+     value = initial_value;
+   }
+ 
+   /**
+    * Fill in the {@link #value } field by reading the required data
+    * from the given stream. For <code>string</code>, the functionality
+    * is delegated to
+    * {@link org.omg.CORBA.portable.InputStream#read_wstring}.
+    *
+    * @param input the input stream to read from.
+    */
+   public void _read(InputStream input)
+   {
+     value = input.read_wstring();
+   }
+ 
+   /**
+    * Returns the TypeCode, corresponding the CORBA type that is stored
+    * using this holder. The {@link TypeCode#length()} method of the
+    * returned typecode always returns 0.
+    */
+   public TypeCode _type()
+   {
+     return t_string;
+   }
+ 
+   /**
+    * Write the {@link #value } field to the given stream.
+    * For <code>string</code>, the functionality
+    * is delegated to
+    * {@link org.omg.CORBA.portable.OutputStream#write_wstring(String) }.
+    *
+    * @param output the output stream to write into.
+    */
+   public void _write(OutputStream output)
+   {
+     output.write_wstring(value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/_PolicyImplBase.java gcc-4.1.0/libjava/classpath/gnu/CORBA/_PolicyImplBase.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/_PolicyImplBase.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/_PolicyImplBase.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,232 ----
+ /* _PolicyImplBase.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.Policy;
+ import org.omg.CORBA.PolicyHelper;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.InvokeHandler;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ResponseHandler;
+ 
+ /**
+  * The server side implementation base for the {@link Policy}.
+  *
+  * @specnote The java 1.4 API does not define the server side policy
+  * implementation base, but it defines the policy client side stub.
+  * As these two classes always work together, and even no separate testing is
+  * possible, the required implementation base is provided in gnu.CORBA
+  * namespace. Sun will probably include they base in the future java APIs.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class _PolicyImplBase
+   extends ObjectImpl
+   implements Policy, InvokeHandler
+ {
+   /**
+    * Use serialVersionUID for interoperability.
+    */
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The policy repository ids.
+    */
+   private final String[] ids;
+ 
+   /**
+    * The type of this policy.
+    */
+   private final int type;
+ 
+   /**
+    * The value of this policy. The value object is never the same
+    * for different policies.
+    */
+   private final java.lang.Object value;
+ 
+   /**
+    * The policy integer code, written in request to write
+    * the policy value.
+    */
+   private final int policyCode;
+ 
+   /**
+    * Create the new policy of the given type, having the given value.
+    * For security reasons, the method is kept package private.
+    *
+    * @param p_type the type of this policy.
+    * @param p_value the value of this policy.
+    * @param p_code the integer code of this policy.
+    * @param p_idl the policy IDL type string. The {@link #_ids()}
+    * will return array, first line being this string and another
+    * being PolicyHelper.id().
+    */
+   public _PolicyImplBase(int p_type, java.lang.Object p_value, int p_code,
+                          String p_idl
+                         )
+   {
+     type = p_type;
+     value = p_value;
+     policyCode = p_code;
+     ids = new String[] { p_idl, PolicyHelper.id() };
+   }
+ 
+   /**
+    * Get the integer code of the type of this policy.
+    */
+   public final int policy_type()
+   {
+     return type;
+   }
+ 
+   /**
+    * Return the list of repository ids.
+    */
+   public final String[] _ids()
+   {
+     return ids;
+   }
+ 
+   /**
+    * Call the required method.
+    */
+   public final OutputStream _invoke(String method, InputStream input,
+                                     ResponseHandler rh
+                                    )
+   {
+     OutputStream output = null;
+ 
+     if (method.equals("destroy"))
+       {
+         // The "destroy" has been invoked.
+         destroy();
+         output = rh.createReply();
+       }
+     else if (method.equals("copy"))
+       {
+         // The "copy" has been invoked.
+         org.omg.CORBA.Object returns = copy();
+         output = rh.createReply();
+         output.write_Object(this);
+       }
+     else if (method.equals("policy_type"))
+       {
+         // The "policy_type" has been invoked.
+         int returns = policy_type();
+         output = rh.createReply();
+         output.write_long(returns);
+       }
+     else if (method.equals("value"))
+       {
+         // The "value" can be invoked on the children types
+         // and must return an integer, representing the policy value
+         // (CORBA enumeration).
+         output = rh.createReply();
+         output.write_long(policyCode);
+       }
+     else
+       throw new BAD_OPERATION(method, Minor.Method, 
+         CompletionStatus.COMPLETED_MAYBE);
+ 
+     return output;
+   }
+ 
+   /**
+    * Get the value of this policy
+    */
+   public final java.lang.Object getValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Get the integer code of this policy value.
+    */
+   public final int getCode()
+   {
+     return policyCode;
+   }
+ 
+   /**
+    * Returns without action. It is a work of garbage collector
+    * to remove the unused objects.
+    */
+   public final void destroy()
+   {
+   }
+ 
+   /**
+    * Returns the string representation of the given policy.
+    */
+   public final String toString()
+   {
+     return value.toString();
+   }
+ 
+   /**
+    * Create a copy of this policy. The object is not mutable, so
+    * <code>this</code> can be returned.
+    *
+    * @return <code>this</code>
+    */
+   public Policy copy()
+   {
+     return this;
+   }
+ 
+   /**
+    * Use the value to get a hash code.
+    */
+   public int hashCode()
+   {
+     return getValue().hashCode();
+   }
+ 
+   /**
+    * Check the values for equality.
+    */
+   public boolean equals(Object x)
+   {
+     return x == null ? false : getValue().equals(x);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuAny.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuAny.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuAny.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuAny.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,907 ----
+ /* gnuAny.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.Vio;
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.typecodes.PrimitiveTypeCode;
+ import gnu.CORBA.typecodes.StringTypeCode;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.AnyHolder;
+ import org.omg.CORBA.BAD_OPERATION;
+ import org.omg.CORBA.BooleanHolder;
+ import org.omg.CORBA.CharHolder;
+ import org.omg.CORBA.DoubleHolder;
+ import org.omg.CORBA.FixedHolder;
+ import org.omg.CORBA.FloatHolder;
+ import org.omg.CORBA.IntHolder;
+ import org.omg.CORBA.LongHolder;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.ObjectHolder;
+ import org.omg.CORBA.Principal;
+ import org.omg.CORBA.PrincipalHolder;
+ import org.omg.CORBA.ShortHolder;
+ import org.omg.CORBA.StringHolder;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodeHolder;
+ import org.omg.CORBA.ValueBaseHolder;
+ import org.omg.CORBA.portable.Streamable;
+ 
+ import java.io.Serializable;
+ import java.lang.reflect.Field;
+ import java.math.BigDecimal;
+ import java.util.Arrays;
+ import java.util.zip.Adler32;
+ 
+ /**
+  * The implementation of {@link Any}.
+  *
+  * For performance reasonse, the inserted values are not cloned.
+  * If the value object allows modifications (like {@link Streamable}),
+  * these subsequent alterations are reflected by the instance of
+  * this gnuAny, and the gnuAny alterations are reflected by the
+  * returned value. If it is required to have the uncoupled value,
+  * it must be requested from the copy of the current instance.
+  * The {@link gnuAny} can be simply cloned by the provided
+  * {@link Clone()} method.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class gnuAny
+   extends Any
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The value, returned by {@link #type()} if the value has been
+    * not intialized.
+    */
+   protected static final TypeCode nullType =
+     new PrimitiveTypeCode(TCKind.tk_null);
+ 
+   /**
+    * The Streamable, representing the value, held by this gnuAny.
+    */
+   protected Streamable has;
+ 
+   /**
+    * The complete typecode of the Streamable, if explicitly set.
+    */
+   protected TypeCode typecode;
+ 
+   /**
+    * The typecode kind of the Streamable, if explicitly set.
+    */
+   protected int xKind = -1;
+ 
+   /**
+    * The associated ORB.
+    */
+   private ORB orb;
+ 
+   /**
+    * Set the associated orb.
+    */
+   public void setOrb(ORB an_orb)
+   {
+     orb = an_orb;
+   }
+ 
+   /**
+    * Creates a deep copy of this gnuAny, writing to and subsequently
+    * reading from from the byte buffer.
+    *
+    * @return the uncoupled gnuAny with all fields set to identical
+    * values.
+    */
+   public gnuAny Clone()
+   {
+     BufferedCdrOutput out = new BufferedCdrOutput();
+     out.setOrb(orb);
+     out.write_any(this);
+ 
+     BufferredCdrInput in = new BufferredCdrInput(out.buffer.toByteArray());
+     in.setOrb(orb);
+     return (gnuAny) in.read_any();
+   }
+ 
+   /**
+    * Create the buffered CDR input stream, containing the
+    * value, stored inside of this {@link Any}.
+    */
+   public org.omg.CORBA.portable.InputStream create_input_stream()
+   {
+     if (has instanceof GeneralHolder)
+       {
+         GeneralHolder u = (GeneralHolder) has;
+         return u.getInputStream();
+       }
+     else
+       {
+         BufferedCdrOutput out = new BufferedCdrOutput();
+         out.setOrb(orb);
+         write_value(out);
+ 
+         BufferredCdrInput in = new BufferredCdrInput(out.buffer.toByteArray());
+         in.setOrb(orb);
+         return in;
+       }
+   }
+ 
+   /**
+    * Create the buffered CDR output stream (empty).
+    */
+   public org.omg.CORBA.portable.OutputStream create_output_stream()
+   {
+     BufferedCdrOutput stream = new BufferedCdrOutput();
+     stream.setOrb(orb);
+     return stream;
+   }
+ 
+   /**
+    * Compare two Any's for equality.
+    * @param other the other Any to compare.
+    */
+   public boolean equal(Any other)
+   {
+     if (other == this)
+       return true;
+     if (type().kind() != other.type().kind())
+       return false;
+ 
+     if (has != null && other instanceof gnuAny)
+       if (has.equals(((gnuAny) other).has))
+         return true;
+ 
+     BufferedCdrOutput a = new BufferedCdrOutput();
+     a.setOrb(orb);
+     write_value(a);
+ 
+     BufferedCdrOutput b = new BufferedCdrOutput();
+     b.setOrb(orb);
+     other.write_value(b);
+ 
+     byte[] ba = a.buffer.toByteArray();
+     byte[] bb = b.buffer.toByteArray();
+ 
+     return Arrays.equals(ba, bb);
+   }
+   
+   /**
+    * Get the content - dependent hashcode.
+    */
+   public int hashCode()
+   {
+     if (has == null)
+       return type().kind().value();
+     else
+       {
+         Adler32 adler = new Adler32();
+ 
+         BufferedCdrOutput a = new BufferedCdrOutput();
+         a.setOrb(orb);
+         write_value(a);
+         
+         adler.update(a.buffer.toByteArray());
+         adler.update(type().kind().value());
+         
+         return (int) adler.getValue() & Integer.MAX_VALUE;
+       }
+   }
+ 
+   /**
+    * Delegates functionality to {@link #equal(Any)}.
+    */
+   public boolean equals(java.lang.Object other)
+   {
+     if (other == this)
+       return true;
+     if (!(other instanceof Any))
+       return false;
+ 
+     return equal((Any) other);
+   }
+ 
+   /**
+    * Extract the previously stored object.
+    */
+   public org.omg.CORBA.Object extract_Object()
+   {
+     try
+       {
+         return ((ObjectHolder) has).value;
+       }
+     catch (ClassCastException ex)
+       {
+         BAD_OPERATION bad = new BAD_OPERATION();
+         bad.initCause(ex);
+         bad.minor = Minor.Any;
+         throw bad;
+       }
+   }
+ 
+   /**
+    * Extract the previously inserted CORBA <code>Principal</code>/
+    * @return the previously inserted value.
+    *
+    * @throws org.omg.CORBA.BAD_OPERATION if the holder contains something
+    * else than Principal.
+    *
+    * @deprecated by CORBA 2.2.
+    */
+   public Principal extract_Principal()
+   {
+     check(TCKind._tk_Principal);
+     return ((PrincipalHolder) has).value;
+   }
+ 
+   /**
+    * Return the value, encapsulated in a suitable holder.
+    * This implementation returns the direct reference,
+    * so the alterations on the returned streamable are
+    * directly reflected to the content of this {@link Any}.
+    */
+   public Streamable extract_Streamable()
+   {
+     return has;
+   }
+ 
+   public TypeCode extract_TypeCode()
+                             throws BAD_OPERATION
+   {
+     check(TCKind._tk_TypeCode);
+     return ((TypeCodeHolder) has).value;
+   }
+ 
+   /**
+    * Extract the stored value type.
+    *
+    * @return the previously stored value type.
+    *
+    * @throws BAD_OPERATION if the Any contains something different.
+    *
+    * @see org.omg.CORBA.portable.ValueBase
+    */
+   public Serializable extract_Value()
+                              throws BAD_OPERATION
+   {
+     try
+       {
+         if (has instanceof ValueBaseHolder)
+           return ((ValueBaseHolder) has).value;
+         else
+           {
+             // Normally, ValueBase holder must be an instance of the
+             // ValueBaseHolder. However some IDL compilers probably
+             // have a bug, do not deriving this way. The the only
+             // way to access the wrapped value is via reflection.
+             Field f = has.getClass().getField("value");
+             return (Serializable) f.get(has);
+           }
+       }
+     catch (Exception ex)
+       {
+         BAD_OPERATION bad = new BAD_OPERATION("Value type expected");
+         bad.minor = Minor.Any;
+         bad.initCause(ex);
+         throw bad;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public Any extract_any()
+                   throws BAD_OPERATION
+   {
+     check(TCKind._tk_any);
+     return ((AnyHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public boolean extract_boolean()
+                           throws BAD_OPERATION
+   {
+     check(TCKind._tk_boolean);
+     return ((BooleanHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public char extract_char()
+                     throws BAD_OPERATION
+   {
+     check(TCKind._tk_char);
+     return ((CharHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public double extract_double()
+                         throws BAD_OPERATION
+   {
+     check(TCKind._tk_double);
+     return ((DoubleHolder) has).value;
+   }
+ 
+   /**
+    * Extract the previously inserted CORBA <code>fixed</code>/
+    * @return the previously inserted value.
+    *
+    * @throws org.omg.CORBA.BAD_OPERATION if the holder contains something
+    * else than BigDecimal.
+    */
+   public BigDecimal extract_fixed()
+                            throws org.omg.CORBA.BAD_OPERATION
+   {
+     check(TCKind._tk_fixed);
+     return ((FixedHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public float extract_float()
+                       throws BAD_OPERATION
+   {
+     check(TCKind._tk_float);
+     return ((FloatHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public int extract_long()
+                    throws BAD_OPERATION
+   {
+     // CORBA long = java int.
+     check(TCKind._tk_long);
+     return ((IntHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public long extract_longlong()
+                         throws BAD_OPERATION
+   {
+     check(TCKind._tk_longlong);
+     return ((LongHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public byte extract_octet()
+                      throws BAD_OPERATION
+   {
+     // ShortHolder holds also octets.
+     check(TCKind._tk_octet);
+     return (byte) ((OctetHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public short extract_short()
+                       throws BAD_OPERATION
+   {
+     check(TCKind._tk_short);
+     return ((ShortHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public String extract_string()
+                         throws BAD_OPERATION
+   {
+     check(TCKind._tk_string);
+     return ((StringHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public int extract_ulong()
+                     throws BAD_OPERATION
+   {
+     // IntHolder also holds ulongs.
+     check(TCKind._tk_ulong);
+     return ((IntHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public long extract_ulonglong()
+                          throws BAD_OPERATION
+   {
+     // LongHolder also holds ulonglong
+     check(TCKind._tk_ulonglong);
+     return ((LongHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public short extract_ushort()
+                        throws BAD_OPERATION
+   {
+     // ShortHolder also holds ushorts.
+     check(TCKind._tk_ushort);
+     return ((ShortHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public char extract_wchar()
+                      throws BAD_OPERATION
+   {
+     check(TCKind._tk_wchar);
+     return ((WCharHolder) has).value;
+   }
+ 
+   /** {@inheritDoc} */
+   public String extract_wstring()
+                          throws BAD_OPERATION
+   {
+     // StringHolder also holds wstrings.
+     check(TCKind._tk_wstring);
+     return ((WStringHolder) has).value;
+   }
+ 
+   /**
+    * Inserts the CORBA object and sets the typecode to the given type.
+    */
+   public void insert_Object(org.omg.CORBA.Object x, TypeCode typecode)
+   {
+     has = new ObjectHolder(x);
+     type(typecode);
+   }
+ 
+   /**
+    * Inserts the CORBA object.
+    */
+   public void insert_Object(org.omg.CORBA.Object x)
+   {
+     has = new ObjectHolder(x);
+   }
+ 
+   /**
+    * Insert the CORBA Principal.
+    * This implementation uses direct assignment, so the later
+    * alterations of that BigDecimal are reflected on the
+    * content of this {@link Any}.
+    *
+    * @deprecated by CORBA 2.2.
+    */
+   public void insert_Principal(Principal x)
+   {
+     resetTypes();
+     if (has instanceof PrincipalHolder)
+       ((PrincipalHolder) has).value = x;
+     else
+       has = new PrincipalHolder(x);
+   }
+ 
+   /**
+    * Sets the value to the value, encapsulated in this holder.
+    * This implementation uses direct assignment, so the later
+    * alterations of that streamable are reflected on the
+    * content of this {@link Any}.
+    */
+   public void insert_Streamable(Streamable x)
+   {
+     resetTypes();
+     has = x;
+   }
+ 
+   /**
+    * Insert the typecode into this Any
+    * @param typecode the typecode to insert.
+    */
+   public void insert_TypeCode(TypeCode typecode)
+   {
+     resetTypes();
+     if (has instanceof TypeCodeHolder)
+       ((TypeCodeHolder) has).value = typecode;
+     else
+       has = new TypeCodeHolder(typecode);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_Value(Serializable x, TypeCode c_typecode)
+   {
+     if (typecode != null && typecode.kind() == TCKind.tk_value_box)
+       {
+         has = new gnuValueHolder(x, typecode);
+       }
+     else
+       {
+         type(typecode);
+         insert_Value(x);
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_Value(Serializable x)
+   {
+     if (typecode != null && typecode.kind() == TCKind.tk_value_box)
+       {
+         has = new gnuValueHolder(x, typecode);
+       }
+     else
+       {
+         if (has instanceof ValueBaseHolder)
+           ((ValueBaseHolder) has).value = x;
+         else
+           has = new ValueBaseHolder(x);
+       }
+   }
+ 
+   /**
+   * Insert another {@link Any} into this {@link Any}.
+   * This implementation uses direct assignment, so the later
+   * alterations of that {@link Any} are reflected on the
+   * content of this {@link Any}.
+   */
+   public void insert_any(Any an_any)
+   {
+     resetTypes();
+     if (has instanceof AnyHolder)
+       ((AnyHolder) has).value = an_any;
+     else
+       has = new AnyHolder(an_any);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_boolean(boolean x)
+   {
+     resetTypes();
+     if (has instanceof BooleanHolder)
+       ((BooleanHolder) has).value = x;
+     else
+       has = new BooleanHolder(x);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_char(char x)
+   {
+     resetTypes();
+     if (has instanceof CharHolder)
+       ((CharHolder) has).value = x;
+     else
+       has = new CharHolder(x);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_double(double x)
+   {
+     resetTypes();
+     if (has instanceof DoubleHolder)
+       ((DoubleHolder) has).value = x;
+     else
+       has = new DoubleHolder(x);
+   }
+ 
+   /**
+    * Inserts the CORBA <code>fixed</code>, setting the typecode
+    * explicitly.
+    * This implementation uses direct assignment, so the later
+    * alterations of that BigDecimal are reflected on the
+    * content of this {@link Any}.
+    */
+   public void insert_fixed(BigDecimal x, TypeCode x_typecode)
+   {
+     resetTypes();
+     insert_fixed(x);
+     typecode = x_typecode;
+   }
+ 
+   /**
+    * Inserts the CORBA <code>fixed</code>, setting the typecode
+    * by example of the currently passed value.
+    * This implementation uses direct assignment, so the later
+    * alterations of that BigDecimal are reflected on the
+    * content of this {@link Any}, including the typecode.
+    */
+   public void insert_fixed(BigDecimal x)
+   {
+     resetTypes();
+     if (has instanceof FixedHolder)
+       ((FixedHolder) has).value = x;
+     else
+       has = new FixedHolder(x);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_float(float x)
+   {
+     resetTypes();
+     if (has instanceof FloatHolder)
+       ((FloatHolder) has).value = x;
+     else
+       has = new FloatHolder(x);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_long(int x)
+   {
+     resetTypes();
+     if (has instanceof IntHolder)
+       ((IntHolder) has).value = x;
+     else
+       has = new IntHolder(x);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_longlong(long x)
+   {
+     resetTypes();
+     if (has instanceof LongHolder)
+       ((LongHolder) has).value = x;
+     else
+       has = new LongHolder(x);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_octet(byte x)
+   {
+     resetTypes();
+     if (has instanceof OctetHolder)
+       ((OctetHolder) has).value = x;
+     else
+       has = new OctetHolder(x);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_short(short x)
+   {
+     resetTypes();
+     if (has instanceof ShortHolder)
+       ((ShortHolder) has).value = x;
+     else
+       has = new ShortHolder(x);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_string(String x)
+   {
+     resetTypes();
+     if (has instanceof StringHolder)
+       ((StringHolder) has).value = x;
+     else
+       has = new StringHolder(x);
+ 
+     typecode = new StringTypeCode(TCKind.tk_string);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_ulong(int x)
+   {
+     resetTypes();
+     if (has instanceof IntHolder)
+       ((IntHolder) has).value = x;
+     else
+       has = new IntHolder(x);
+     xKind = TCKind._tk_ulong;
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_ulonglong(long x)
+   {
+     resetTypes();
+     if (has instanceof LongHolder)
+       ((LongHolder) has).value = x;
+     else
+       has = new LongHolder(x);
+     xKind = TCKind._tk_ulonglong;
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_ushort(short x)
+   {
+     resetTypes();
+     if (has instanceof ShortHolder)
+       ((ShortHolder) has).value = x;
+     else
+       has = new ShortHolder(x);
+     xKind = TCKind._tk_ushort;
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_wchar(char x)
+   {
+     resetTypes();
+     if (has instanceof WCharHolder)
+       ((WCharHolder) has).value = x;
+     else
+       has = new WCharHolder(x);
+   }
+ 
+   /** {@inheritDoc} */
+   public void insert_wstring(String x)
+   {
+     resetTypes();
+     if (has instanceof WStringHolder)
+       ((WStringHolder) has).value = x;
+     else
+       has = new WStringHolder(x);
+   }
+ 
+   /**
+    * Return the associated orb.
+    */
+   public ORB orb()
+   {
+     return orb;
+   }
+ 
+   /**
+    * Read the value of the given type from the given stream.
+    *
+    * @param input a stream to read from.
+    * @param a_type a typecode of the value to read.
+    */
+   public void read_value(org.omg.CORBA.portable.InputStream input,
+                          TypeCode a_type
+                         )
+                   throws MARSHAL
+   {
+     try
+       {
+         int kind = a_type.kind().value();
+ 
+         // Fixed needs special handling.
+         if (kind == TCKind._tk_fixed)
+           {
+             BigDecimal dec = BigDecimalHelper.read(input, a_type.fixed_scale());
+             has = new FixedHolder(dec);
+           }
+         else
+           {
+             has = HolderLocator.createHolder(a_type);
+             if (has == null)
+               {
+                 // Use the Universal Holder that reads till the end of stream.
+                 // This works with the extract/insert pair of the typical
+                 // Helper.
+                 BufferedCdrOutput buffer = new BufferedCdrOutput();
+                 buffer.setOrb(orb);
+                 has = new GeneralHolder(buffer);
+               }
+           }
+         type(a_type);
+ 
+         if (!(has instanceof GeneralHolder) &&
+             (kind == TCKind._tk_value_box))
+           {
+             // The streamable only contains operations for
+             // reading the value, not the value header.
+             Field vField = has.getClass().getField("value");
+ 
+             Object content = Vio.read(input, a_type.id());
+             vField.set(has, content);
+           }
+         else
+           has._read(input);
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL();
+         m.minor = Minor.Any;
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode type()
+   {
+     if (typecode != null)
+       return typecode;
+     else if (xKind >= 0)
+       {
+         typecode = new PrimitiveTypeCode(TCKind.from_int(xKind));
+         return typecode;
+       }
+     else
+       return has != null ? has._type() : nullType;
+   }
+ 
+   /**
+    * Explicitly set the typecode of the value to the given type.
+    *
+    * @param valueTypeCode the typecode of the value.
+    */
+   public void type(TypeCode valueTypeCode)
+   {
+     xKind = valueTypeCode.kind().value();
+     typecode = valueTypeCode;
+   }
+ 
+   /** {@inheritDoc} */
+   public void write_value(org.omg.CORBA.portable.OutputStream output)
+   {
+     if (has != null)
+       has._write(output);
+     else
+     // These kinds support null.
+     if (xKind == TCKind._tk_null || xKind == TCKind._tk_objref ||
+         xKind == TCKind._tk_value || xKind == TCKind._tk_value_box
+        )
+       output.write_long(0);
+   }
+ 
+   /**
+    * Check if the current value if the value of the given kind.
+    * 
+    * @param kind a kind to check.
+    * @throws BAD_OPERATION if the value is not set of is different kind.
+    */
+   protected void check(int kind)
+     throws BAD_OPERATION
+   {
+     if (has == null)
+       {
+         BAD_OPERATION bad = new BAD_OPERATION("value not set");
+         bad.minor = Minor.Any;
+         throw bad;
+       }
+ 
+     if (xKind >= 0)
+       {
+         if (xKind != kind)
+           if (!(xKind == TCKind._tk_alias && has._type().kind().value() == kind))
+             {
+               BAD_OPERATION bad = new BAD_OPERATION("Extracting "
+                 + TypeKindNamer.nameIt(kind) + " when stored "
+                 + TypeKindNamer.nameIt(xKind));
+               bad.minor = Minor.Any;
+               throw bad;
+             }
+       }
+     else
+       {
+         if (type().kind().value() != kind)
+           if (!(type().kind().value() == TCKind._tk_alias && has._type().kind().value() == kind))
+             {
+               BAD_OPERATION bad = new BAD_OPERATION("Extracting "
+                 + TypeKindNamer.nameIt(kind) + " stored "
+                 + TypeKindNamer.nameIt(type()));
+               bad.minor = Minor.Any;
+               throw bad;
+             }
+       }
+   }
+ 
+   /**
+    * Clear the additional type information before reusing this instance.
+    */
+   private final void resetTypes()
+   {
+     typecode = null;
+     xKind = -1;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuCodecFactory.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuCodecFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuCodecFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuCodecFactory.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,90 ----
+ /* gnuCodecFactory.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.LocalObject;
+ import org.omg.CORBA.ORB;
+ import org.omg.IOP.Codec;
+ import org.omg.IOP.CodecFactory;
+ import org.omg.IOP.CodecFactoryPackage.UnknownEncoding;
+ import org.omg.IOP.ENCODING_CDR_ENCAPS;
+ import org.omg.IOP.Encoding;
+ 
+ /**
+  * A simple implementation of the Codec factory, able to return the
+  * standard Codec's. Only ENCODING_CDR_ENCAPS encoding is supported.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuCodecFactory extends LocalObject implements CodecFactory
+ {
+   /**
+    * The associated ORB.
+    */
+   private final ORB orb;
+ 
+   /**
+    * Create a new instance of the this factory, associated with the given ORB.
+    */
+   public gnuCodecFactory(ORB an_orb)
+   {
+     orb = an_orb;
+   }
+ 
+   /**
+    * Creates the Codec for the given encoding.
+    *
+    * @param for_encoding the encoding for that the Codec must be created.
+    *
+    * @return the suitable Codec.
+    *
+    * @throws UnknownEncoding if the encoding is not a ENCODING_CDR_ENCAPS.
+    */
+   public Codec create_codec(Encoding for_encoding) throws UnknownEncoding
+   {
+     if (for_encoding.format != ENCODING_CDR_ENCAPS.value)
+       throw new UnknownEncoding("Only ENCODING_CDR_ENCAPS is " +
+         "supported by this factory."
+       );
+ 
+     return new CdrEncapsCodecImpl(orb,
+       new Version(for_encoding.major_version, for_encoding.minor_version)
+     );
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuContext.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuContext.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,202 ----
+ /* gnuContext.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.CTX_RESTRICT_SCOPE;
+ import org.omg.CORBA.Context;
+ import org.omg.CORBA.NVList;
+ 
+ /**
+  * The working implementation of the {@link org.omg.CORBA.Context}.
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class gnuContext
+   extends Context
+ {
+   /**
+    * The parent context.
+    */
+   Context parent;
+ 
+   /**
+    * The collection to store the context properties.
+    */
+   Map properties = new Hashtable();
+ 
+   /**
+    * The name of this context.
+    */
+   String name;
+ 
+   /**
+    * Creates the new context with the given name and parent.
+    *
+    * @param a_name a name of the new context.
+    * @param a_parent a parent, used to resolve the missing references.
+    */
+   public gnuContext(String a_name, Context a_parent)
+   {
+     name = a_name;
+     parent = a_parent;
+   }
+ 
+   /** {@inheritDoc} */
+   public String context_name()
+   {
+     return name;
+   }
+ 
+   /** {@inheritDoc} */
+   public Context create_child(String child)
+   {
+     return new gnuContext(child, this);
+   }
+ 
+   /** {@inheritDoc} */
+   public void delete_values(String property)
+   {
+     boolean starts = false;
+     if (property.endsWith("*"))
+       {
+         starts = true;
+         property = property.substring(0, property.length() - 1);
+       }
+ 
+     Set keys = properties.keySet();
+ 
+     Iterator iter = keys.iterator();
+     while (iter.hasNext())
+       {
+         String key = (String) iter.next();
+         if ((starts && key.startsWith(property)) ||
+             (!starts && key.equals(property))
+            )
+           iter.remove();
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public NVList get_values(String start_scope, int flags, String pattern)
+   {
+     if (start_scope != null)
+       {
+         Context c = this;
+         while (c != null && !c.context_name().equals(start_scope))
+           c = c.parent();
+         if (c == null)
+           return new gnuNVList();
+       }
+ 
+     try
+       {
+         gnuNVList rt = new gnuNVList();
+ 
+         boolean starts = false;
+         if (pattern.endsWith("*"))
+           {
+             starts = true;
+             pattern = pattern.substring(0, pattern.length() - 1);
+           }
+ 
+         Set keys = properties.keySet();
+ 
+         Iterator iter = keys.iterator();
+         while (iter.hasNext())
+           {
+             String key = (String) iter.next();
+             if ((starts && key.startsWith(pattern)) ||
+                 (!starts && key.equals(pattern))
+                )
+               {
+                 rt.add_value(key, (Any) properties.get(key), 0);
+               }
+           }
+ 
+         if ((flags & CTX_RESTRICT_SCOPE.value) == 0 && parent != null)
+           {
+             NVList par = parent.get_values(start_scope, flags, pattern);
+             for (int i = 0; i < par.count(); i++)
+               {
+                 rt.list.add(par.item(i));
+               }
+           }
+ 
+         return rt;
+       }
+     catch (Bounds ex)
+       {
+         throw new Error("Report this bug.");
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public Context parent()
+   {
+     return parent;
+   }
+ 
+   /** {@inheritDoc} */
+   public void set_one_value(String name, Any value)
+   {
+     properties.put(name, value);
+   }
+ 
+   /** {@inheritDoc} */
+   public void set_values(NVList values)
+   {
+     try
+       {
+         for (int i = 0; i < values.count(); i++)
+           {
+             properties.put(values.item(i).name(), values.item(i).value());
+           }
+       }
+     catch (Bounds ex)
+       {
+         throw new Error("Please report this bug.");
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuContextList.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuContextList.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuContextList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuContextList.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,83 ----
+ /* gnuContextList.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import java.util.ArrayList;
+ 
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.ContextList;
+ 
+ /**
+  * The working implementation of the {@link org.omg.CORBA.ContextList}.
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class gnuContextList
+   extends ContextList
+ {
+   /**
+    * The collection, holding the actual list of strings.
+    */
+   CorbaList strings = new CorbaList();
+ 
+   /** {@inheritDoc} */
+   public void add(String name)
+   {
+     strings.add(name);
+   }
+ 
+   /** {@inheritDoc} */
+   public int count()
+   {
+     return strings.size();
+   }
+ 
+   /** {@inheritDoc} */
+   public String item(int at)
+               throws Bounds
+   {
+     return (String) strings.item(at);
+   }
+ 
+   /** {@inheritDoc} */
+   public void remove(int at)
+               throws Bounds
+   {
+     strings.drop(at);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuEnvironment.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuEnvironment.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuEnvironment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuEnvironment.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* gnuEnvironment.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.Environment;
+ 
+ /**
+  * The implementation of the exception container ("Environment").
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class gnuEnvironment
+   extends Environment
+ {
+   /**
+    * The stored exception.
+    */
+   protected Exception exception;
+   
+   /** {@inheritDoc} */
+   public void clear()
+   {
+     exception = null;
+   }
+ 
+   /** {@inheritDoc} */
+   public void exception(Exception except)
+   {
+     exception = except;
+   }
+ 
+   /** {@inheritDoc} */
+   public Exception exception()
+   {
+     return exception;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuExceptionList.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuExceptionList.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuExceptionList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuExceptionList.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,84 ----
+ /* gnuExceptionList.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import java.util.ArrayList;
+ 
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.ExceptionList;
+ import org.omg.CORBA.TypeCode;
+ 
+ /**
+  * The implementation of the list of type codes for exceptions.
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org).
+  */
+ public class gnuExceptionList
+   extends ExceptionList
+ {
+   /**
+    * A list to store the objects.
+    */
+   protected CorbaList list = new CorbaList();
+ 
+   /** {@inheritDoc} */
+   public void add(TypeCode an_exception)
+   {
+     list.add(an_exception);
+   }
+ 
+   /** {@inheritDoc} */
+   public int count()
+   {
+     return list.size();
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode item(int at)
+                 throws Bounds
+   {
+     return (TypeCode) list.item(at);
+   }
+ 
+   /** {@inheritDoc} */
+   public void remove(int at)
+               throws Bounds
+   {
+     list.drop(at);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuNVList.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuNVList.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuNVList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuNVList.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,127 ----
+ /* gnuNVList.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.NamedValue;
+ 
+ /**
+  * The implementation of {@link NVList}.
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class gnuNVList
+   extends NVList
+ {
+   /**
+    * The list of the named values.
+    */
+   protected CorbaList list;
+ 
+   /**
+    * Creates the list with the default initial size.
+    */
+   public gnuNVList()
+   {
+     list = new CorbaList();
+   }
+ 
+   /**
+    * Creates the list with the given initial size.
+    */
+   public gnuNVList(int initial_size)
+   {
+     list = new CorbaList(initial_size);
+   }
+ 
+   /** {@inheritDoc} */
+   public NamedValue add(int a_flags)
+   {
+     return add_value(null, new gnuAny(), a_flags);
+   }
+ 
+   /** {@inheritDoc} */
+   public NamedValue add_item(String a_name, int a_flags)
+   {
+     return add_value(a_name, new gnuAny(), a_flags);
+   }
+ 
+   /** {@inheritDoc} */
+   public NamedValue add_value(String a_name, Any a_value, int a_flags)
+   {
+     gnuNamedValue n = new gnuNamedValue();
+     n.setName(a_name);
+     n.setValue(a_value);
+     n.setFlags(a_flags);
+     list.add(n);
+     return n;
+   }
+ 
+   /**
+    * Add the given named value to the list directly.
+    *
+    * @param value the named vaue to add.
+    */
+   public void add(NamedValue value)
+   {
+     list.add(value);
+   }
+ 
+ 
+   /** {@inheritDoc} */
+   public int count()
+   {
+     return list.size();
+   }
+ 
+   /** {@inheritDoc} */
+   public NamedValue item(int at)
+                   throws Bounds
+   {
+     return (NamedValue) list.item(at);
+   }
+ 
+   /** {@inheritDoc} */
+   public void remove(int at)
+               throws Bounds
+   {
+     list.drop(at);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuNamedValue.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuNamedValue.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuNamedValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuNamedValue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,112 ----
+ /* gnuNamedValue.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.NamedValue;
+ 
+ /**
+  * The implementation of the named value.
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class gnuNamedValue
+   extends NamedValue
+ {
+   /**
+    * The named value value.
+    */
+   private Any m_value = new gnuAny();
+ 
+   /**
+    * The named value name.
+    */
+   private String m_name;
+ 
+   /**
+    * The named value flags.
+    */
+   private int m_flags;
+ 
+   /**
+    * Set the flags, the normally expected values are
+    * {@link org.omg.CORBA.ARG_IN#value},
+    * {@link org.omg.CORBA.ARG_OUT#value} and
+    * {@link org.omg.CORBA.ARG_INOUT#value}.
+    */
+   public void setFlags(int flags)
+   {
+     m_flags = flags;
+   }
+ 
+   /**
+    * Set the name of the value.
+    * @param name the name of this value
+    */
+   public void setName(String name)
+   {
+     m_name = name;
+   }
+ 
+   /**
+    * Set the value of the value.
+    * @param value the value of this object.
+    */
+   public void setValue(Any value)
+   {
+     m_value = value;
+   }
+ 
+   /** {@inheritDoc} */
+   public int flags()
+   {
+     return m_flags;
+   }
+ 
+   /** {@inheritDoc} */
+   public String name()
+   {
+     return m_name;
+   }
+ 
+   /** {@inheritDoc} */
+   public Any value()
+   {
+     return m_value;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuRequest.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuRequest.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuRequest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuRequest.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1420 ----
+ /* gnuRequest.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ import gnu.CORBA.GIOP.MessageHeader;
+ import gnu.CORBA.GIOP.ReplyHeader;
+ import gnu.CORBA.GIOP.RequestHeader;
+ import gnu.CORBA.GIOP.CodeSetServiceContext;
+ import gnu.CORBA.Interceptor.gnuClientRequestInfo;
+ import gnu.CORBA.Poa.ORB_1_4;
+ 
+ import org.omg.CORBA.ARG_IN;
+ import org.omg.CORBA.ARG_INOUT;
+ import org.omg.CORBA.ARG_OUT;
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_INV_ORDER;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.Bounds;
+ import org.omg.CORBA.COMM_FAILURE;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.Context;
+ import org.omg.CORBA.ContextList;
+ import org.omg.CORBA.Environment;
+ import org.omg.CORBA.ExceptionList;
+ import org.omg.CORBA.INV_POLICY;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.NO_RESOURCES;
+ import org.omg.CORBA.NVList;
+ import org.omg.CORBA.NamedValue;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.Policy;
+ import org.omg.CORBA.Request;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.UnknownUserException;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.IOP.ServiceContext;
+ import org.omg.IOP.TAG_CODE_SETS;
+ import org.omg.IOP.TAG_INTERNET_IOP;
+ import org.omg.IOP.TaggedComponent;
+ import org.omg.IOP.TaggedProfile;
+ import org.omg.PortableInterceptor.ClientRequestInfo;
+ import org.omg.PortableInterceptor.ClientRequestInterceptorOperations;
+ import org.omg.PortableInterceptor.ForwardRequest;
+ import org.omg.PortableInterceptor.InvalidSlot;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ 
+ import java.net.BindException;
+ import java.net.Socket;
+ 
+ import java.util.ArrayList;
+ 
+ /**
+  * The implementation of the CORBA request.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class gnuRequest extends Request implements Cloneable
+ {
+   /**
+    * The maximal supported GIOP version.
+    */
+   public static Version MAX_SUPPORTED = new Version(1, 2);
+ 
+   /**
+    * The initial pause that the Request makes when the required port is not
+    * available.
+    */
+   public static int PAUSE_INITIAL = 50;
+ 
+   /**
+    * The number of repretetive attempts to get a required port, if it is not
+    * immediately available.
+    */
+   public static int PAUSE_STEPS = 12;
+ 
+   /**
+    * The maximal pausing interval between two repetetive attempts. The interval
+    * doubles after each unsuccessful attempt, but will not exceed this value.
+    */
+   public static int PAUSE_MAX = 1000;
+ 
+   /**
+    * The interceptor, listening the major request submission points.
+    */
+   ClientRequestInterceptorOperations m_interceptor;
+ 
+   /**
+    * The request info, used by interceptor.
+    */
+   ClientRequestInfo m_info = new gnuClientRequestInfo(this);
+ 
+   /**
+    * The empty byte array.
+    */
+   private static final RawReply EMPTY =
+     new RawReply(null, new MessageHeader(), new byte[ 0 ]);
+ 
+   /**
+    * The context holder for methods ctx(Context) and ctx().
+    */
+   protected Context m_context;
+ 
+   /**
+    * The context list for method contexts().
+    */
+   protected ContextList m_context_list;
+ 
+   /**
+    * The request environment for holding the exception the has possibly been
+    * thrown by the method being invoked.
+    */
+   protected Environment m_environment = new gnuEnvironment();
+ 
+   /**
+    * The list of all exceptions that can be thrown by the method being invoked.
+    */
+   protected ExceptionList m_exceptions = new gnuExceptionList();
+ 
+   /**
+    * The result, returned by the invoked method (function).
+    */
+   protected NamedValue m_result = new gnuNamedValue();
+ 
+   /**
+    * The exception id, received from the server, null if none.
+    */
+   protected String m_exception_id;
+ 
+   /**
+    * The thrown system exception.
+    */
+   protected SystemException m_sys_ex;
+ 
+   /**
+    * The invocation target.
+    */
+   protected org.omg.CORBA.Object m_target;
+ 
+   /**
+    * The name of the method being invoked.
+    */
+   protected String m_operation;
+ 
+   /**
+    * This field temporary remembers the value of the forwarded ior reference. If
+    * it is not null, the request was forwarded and the effective target is not
+    * the same as the default target.
+    */
+   public IOR m_forward_ior;
+ 
+   /**
+    * Is set when object, and not IOR is directly available.
+    */
+   public org.omg.CORBA.Object m_forwarding_target;
+ 
+   /**
+    * The flag, indicating that the request has been sent and the result is
+    * already received.
+    */
+   protected boolean complete;
+ 
+   /**
+    * The flag, indicating that the response to this request must be ignored
+    * (used with {@link #send_oneway()}).
+    */
+   protected boolean oneWay;
+ 
+   /**
+    * The flag, indicating that the request has been sent and no result is yet
+    * received.
+    */
+   protected boolean running;
+ 
+   /**
+    * The request arguments.
+    */
+   protected gnuNVList m_args = new gnuNVList();
+ 
+   /**
+    * The request arguments in the case when they are directly written into the
+    * parameter buffer.
+    */
+   protected StreamBasedRequest m_parameter_buffer;
+ 
+   /**
+    * The array of slots.
+    */
+   protected Any[] m_slots;
+ 
+   /**
+    * The request header currently in use.
+    */
+   protected RequestHeader m_rqh;
+ 
+   /**
+    * The reply header currently in use.
+    */
+   protected ReplyHeader m_rph;
+ 
+   /**
+    * The IOR of the target.
+    */
+   private IOR ior;
+ 
+   /**
+    * The ORB of the target.
+    */
+   private ORB orb;
+ 
+   /**
+    * The encoding, used to send the message.
+    *
+    * The default encoding is inherited from the set IOR (that string reference
+    * can be encoded in either Big or Little endian). If the IOR encoding is not
+    * known (for example, by obtaining the reference from the naming service),
+    * the Big Endian is used.
+    */
+   private boolean Big_endian = true;
+ 
+   /**
+    * Set the IOR data, sufficient to find the invocation target. This also sets
+    * default endian encoding for invocations.
+    *
+    * @see IOR.parse(String)
+    */
+   public void setIor(IOR an_ior)
+   {
+     ior = an_ior;
+     setBigEndian(ior.Big_Endian);
+   }
+ 
+   /**
+    * Used when redirecting request to another target.
+    */
+   gnuRequest redirected;
+ 
+   /**
+    * Get the IOR data, sufficient to find the invocation target.
+    *
+    * @return the IOR data.
+    */
+   public IOR getIor()
+   {
+     return ior;
+   }
+ 
+   /**
+    * Set the ORB, related to the invocation target.
+    */
+   public void setORB(ORB an_orb)
+   {
+     orb = an_orb;
+ 
+     // Take the interceptor from the ORB.
+     if (orb instanceof OrbRestricted)
+       m_interceptor = ((OrbRestricted) orb).iClient;
+ 
+     if (m_interceptor != null && orb instanceof ORB_1_4)
+       {
+         m_slots = ((ORB_1_4) orb).ic_current.clone_slots();
+       }
+   }
+ 
+   /**
+    * Set the encoding that will be used to send the message. The default
+    * encoding is inherited from the set IOR (that string reference can be
+    * encoded in either Big or Little endian). If the IOR encoding is not known
+    * (for example, by obtaining the reference from the naming service), the Big
+    * Endian is used.
+    *
+    * @param use_big_endian true to use the Big Endian, false to use the Little
+    * Endian encoding.
+    */
+   public void setBigEndian(boolean use_big_endian)
+   {
+     Big_endian = use_big_endian;
+   }
+ 
+   /**
+    * The the method name to invoke.
+    *
+    * @param operation the method name.
+    */
+   public void setOperation(String operation)
+   {
+     m_operation = operation;
+   }
+ 
+   /**
+    * Get the parameter stream, where the invocation arguments should be written
+    * if they are written into the stream directly.
+    */
+   public StreamBasedRequest getParameterStream()
+   {
+     m_parameter_buffer = new StreamBasedRequest();
+     m_parameter_buffer.request = this;
+     m_parameter_buffer.setVersion(ior.Internet.version);
+     m_parameter_buffer.setCodeSet(CodeSetServiceContext.negotiate(ior.Internet.CodeSets));
+     m_parameter_buffer.setOrb(orb);
+     m_parameter_buffer.setBigEndian(Big_endian);
+ 
+     // For the old iiop versions, it is important to set the size
+     // correctly.
+     if (ior.Internet.version.until_inclusive(1, 1))
+       {
+         BufferedCdrOutput measure = new BufferedCdrOutput();
+         measure.setOffset(12);
+         if (m_rqh == null)
+           m_rqh = new gnu.CORBA.GIOP.v1_0.RequestHeader();
+         m_rqh.operation = m_operation;
+         m_rqh.object_key = ior.key;
+         m_rqh.write(measure);
+         m_parameter_buffer.setOffset(12 + measure.buffer.size());
+       }
+ 
+     return m_parameter_buffer;
+   }
+ 
+   /**
+    * Creates a shallow copy of this request.
+    */
+   public gnuRequest Clone()
+   {
+     try
+       {
+         return (gnuRequest) clone();
+       }
+     catch (CloneNotSupportedException ex)
+       {
+         throw new Unexpected(ex);
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public Any add_in_arg()
+   {
+     gnuNamedValue v = new gnuNamedValue();
+     v.setFlags(ARG_IN.value);
+     m_args.add(v);
+     return v.value();
+   }
+ 
+   /** {@inheritDoc} */
+   public Any add_inout_arg()
+   {
+     gnuNamedValue v = new gnuNamedValue();
+     v.setFlags(ARG_INOUT.value);
+     m_args.add(v);
+     return v.value();
+   }
+ 
+   /** {@inheritDoc} */
+   public Any add_named_in_arg(String name)
+   {
+     gnuNamedValue v = new gnuNamedValue();
+     v.setFlags(ARG_IN.value);
+     v.setName(name);
+     m_args.add(v);
+     return v.value();
+   }
+ 
+   /** {@inheritDoc} */
+   public Any add_named_inout_arg(String name)
+   {
+     gnuNamedValue v = new gnuNamedValue();
+     v.setFlags(ARG_INOUT.value);
+     v.setName(name);
+     m_args.add(v);
+     return v.value();
+   }
+ 
+   /** {@inheritDoc} */
+   public Any add_named_out_arg(String name)
+   {
+     gnuNamedValue v = new gnuNamedValue();
+     v.setFlags(ARG_OUT.value);
+     v.setName(name);
+     m_args.add(v);
+     return v.value();
+   }
+ 
+   /** {@inheritDoc} */
+   public Any add_out_arg()
+   {
+     gnuNamedValue v = new gnuNamedValue();
+     v.setFlags(ARG_OUT.value);
+     m_args.add(v);
+     return v.value();
+   }
+ 
+   /** {@inheritDoc} */
+   public NVList arguments()
+   {
+     return m_args;
+   }
+ 
+   /** {@inheritDoc} */
+   public ContextList contexts()
+   {
+     return m_context_list;
+   }
+ 
+   /** {@inheritDoc} */
+   public Context ctx()
+   {
+     return m_context;
+   }
+ 
+   /** {@inheritDoc} */
+   public void ctx(Context a_context)
+   {
+     m_context = a_context;
+   }
+ 
+   /** {@inheritDoc} */
+   public Environment env()
+   {
+     return m_environment;
+   }
+ 
+   /** {@inheritDoc} */
+   public ExceptionList exceptions()
+   {
+     return m_exceptions;
+   }
+ 
+   /** {@inheritDoc} */
+   public void get_response() throws org.omg.CORBA.WrongTransaction
+   {
+     /**
+      * The response is ready after it is received. FIXME implement context
+      * checks and any other functionality, if required.
+      */
+   }
+ 
+   /**
+    * Submit the request, suspending the current thread until the answer is
+    * received.
+    *
+    * This implementation requires to set the IOR property ({@link #setIOR(IOR)}
+    * before calling this method.
+    *
+    * @throws BAD_INV_ORDER, minor code 0, if the IOR has not been previously
+    * set.
+    *
+    * @throws SystemException if this exception has been thrown on remote side.
+    * The exact exception type and the minor code are the same as they have been
+    * for the exception, thrown on remoted side.
+    */
+   public synchronized void invoke() throws BAD_INV_ORDER
+   {
+     waitWhileBusy();
+     complete = false;
+     running = true;
+ 
+     if (ior == null)
+       throw new BAD_INV_ORDER("Set IOR property first");
+ 
+     try
+       {
+         Forwardings:
+         while (true)
+           {
+             try
+               {
+                 p_invoke();
+                 break Forwardings;
+               }
+             catch (ForwardRequest e)
+               {
+                 try
+                   {
+                     ObjectImpl impl = (ObjectImpl) e.forward;
+                     SimpleDelegate delegate =
+                       (SimpleDelegate) impl._get_delegate();
+                     ior = delegate.getIor();
+                   }
+                 catch (Exception ex)
+                   {
+                     BAD_PARAM bad =
+                       new BAD_PARAM("Unsupported forwarding target");
+                     bad.initCause(ex);
+                     throw bad;
+                   }
+               }
+           }
+       }
+     finally
+       {
+         running = false;
+         complete = true;
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public String operation()
+   {
+     return m_operation;
+   }
+ 
+   /**
+    * Get the orb, related to the invocation target.
+    */
+   public ORB orb()
+   {
+     return orb;
+   }
+ 
+   /** {@inheritDoc} */
+   public boolean poll_response()
+   {
+     return complete && !running;
+   }
+ 
+   /** {@inheritDoc} */
+   public NamedValue result()
+   {
+     return m_result;
+   }
+ 
+   /**
+    * {@inheritDoc}
+    *
+    */
+   public Any return_value()
+   {
+     return m_result.value();
+   }
+ 
+   /** {@inheritDoc} */
+   public synchronized void send_deferred()
+   {
+     waitWhileBusy();
+     new Thread()
+       {
+         public void run()
+         {
+           invoke();
+         }
+       }.start();
+   }
+ 
+   /**
+    * Send a request and forget about it, not waiting for a response. This can be
+    * done also for methods that normally are expected to return some values.
+    *
+    * TODO It is generally recommended to reuse the threads. Reuse?
+    */
+   public void send_oneway()
+   {
+     final gnuRequest cloned = Clone();
+     cloned.oneWay = true;
+ 
+     new Thread()
+       {
+         public void run()
+         {
+           cloned.invoke();
+         }
+       }.start();
+   }
+ 
+   /**
+    * Set the argument list. This field is initialised as empty non null instance
+    * by default, so the method is only used in cases when the direct replacement
+    * is desired.
+    *
+    * @param a_args the argument list.
+    */
+   public void set_args(NVList a_args)
+   {
+     if (a_args instanceof gnuNVList)
+       m_args = (gnuNVList) a_args;
+     else
+       {
+         try
+           {
+             // In case if this is another implementation of the NVList.
+             m_args.list.clear();
+             for (int i = 0; i < a_args.count(); i++)
+               {
+                 m_args.add(a_args.item(i));
+               }
+           }
+         catch (Bounds ex)
+           {
+             Unexpected.error(ex);
+           }
+       }
+   }
+ 
+   /**
+    * Set the context list that is later returned by the method
+    * {@link #contexts()}.
+    *
+    * @param a_context_list a new context list.
+    */
+   public void set_context_list(ContextList a_context_list)
+   {
+     m_context_list = a_context_list;
+   }
+ 
+   /**
+    * Set the exception container. This field is initialised as empty non null
+    * instance by default, so the method is only used in cases when the direct
+    * replacement is desired.
+    *
+    * @param a_environment the new exception container.
+    */
+   public void set_environment(Environment a_environment)
+   {
+     m_environment = a_environment;
+   }
+ 
+   /**
+    * Set the list of exceptions. This field is initialised as empty non null
+    * instance by default, so the method is only used in cases when the direct
+    * replacement is desired.
+    *
+    * @param a_exceptions a list of exceptions.
+    */
+   public void set_exceptions(ExceptionList a_exceptions)
+   {
+     m_exceptions = a_exceptions;
+   }
+ 
+   /**
+    * Set the operation name.
+    *
+    * @param a_operation the operation name.
+    */
+   public void set_operation(String a_operation)
+   {
+     m_operation = a_operation;
+   }
+ 
+   /**
+    * Set the named value, returned as result. This field is initialised as empty
+    * non null instance by default, so the method is only used in cases when the
+    * direct replacement is desired.
+    *
+    * @param a_result the result keeper.
+    */
+   public void set_result(NamedValue a_result)
+   {
+     m_result = a_result;
+   }
+ 
+   /**
+    * Set the type of the named value, returned as a result. Instantiates a new
+    * instance of the result value.
+    */
+   public void set_return_type(TypeCode returns)
+   {
+     if (m_result == null || !returns.equal(m_result.value().type()))
+       {
+         m_result = new gnuNamedValue();
+         m_result.value().type(returns);
+       }
+   }
+ 
+   /**
+    * Set the invocation target.
+    *
+    * @param a_target the CORBA object for that the method will be invoked.
+    */
+   public void set_target(org.omg.CORBA.Object a_target)
+   {
+     m_target = a_target;
+   }
+ 
+   /**
+    * Do the actual invocation. This implementation requires to set the IOR
+    * property ({@link #setIOR(IOR)} before calling this method.
+    * 
+    * @throws BAD_INV_ORDER, minor code 0, if the IOR has not been previously set
+    * or if the direct argument addition is mixed with the direct argument
+    * writing into the output stream.
+    * 
+    * @return the server response in binary form.
+    */
+   public synchronized RawReply submit()
+     throws ForwardRequest
+   {
+     gnu.CORBA.GIOP.MessageHeader header = new gnu.CORBA.GIOP.MessageHeader();
+ 
+     header.setBigEndian(Big_endian);
+ 
+     // The byte order will be Big Endian by default.
+     header.message_type = gnu.CORBA.GIOP.MessageHeader.REQUEST;
+     header.version = useVersion(ior.Internet.version);
+ 
+     RequestHeader rh = header.create_request_header();
+     rh.operation = m_operation;
+     rh.object_key = ior.key;
+ 
+     // Update interceptor.
+     m_rqh = rh;
+ 
+     if (m_interceptor != null)
+       m_interceptor.send_request(m_info);
+ 
+     // Prepare the submission.
+     BufferedCdrOutput request_part = new BufferedCdrOutput();
+ 
+     request_part.setOffset(header.getHeaderSize());
+     request_part.setVersion(header.version);
+     request_part.setCodeSet(CodeSetServiceContext.negotiate(ior.Internet.CodeSets));
+     request_part.setOrb(orb);
+     request_part.setBigEndian(header.isBigEndian());
+ 
+     // This also sets the stream encoding to the encoding, specified
+     // in the header.
+     rh.write(request_part);
+ 
+     if (m_args != null && m_args.count() > 0)
+       {
+         write_parameters(header, request_part);
+ 
+         if (m_parameter_buffer != null)
+           throw new BAD_INV_ORDER("Please either add parameters or "
+             + "write them into stream, but not both " + "at once.");
+       }
+ 
+     if (m_parameter_buffer != null)
+       {
+         write_parameter_buffer(header, request_part);
+       }
+ 
+     // Now the message size is available.
+     header.message_size = request_part.buffer.size();
+ 
+     Socket socket = null;
+ 
+     java.lang.Object key = ior.Internet.host + ":" + ior.Internet.port;
+ 
+     synchronized (SocketRepository.class)
+       {
+         socket = SocketRepository.get_socket(key);
+       }
+ 
+     try
+       {
+         long pause = PAUSE_INITIAL;
+ 
+         if (socket == null)
+           {
+             // The BindException may be thrown under very heavy parallel
+             // load. For some time, just wait, exceptiong the socket to free.
+             Open: for (int i = 0; i < PAUSE_STEPS; i++)
+               {
+                 try
+                   {
+                     if (orb instanceof OrbFunctional)
+                       socket = ((OrbFunctional) orb).socketFactory.createClientSocket(
+                         ior.Internet.host, ior.Internet.port);
+                     else
+                       socket = new Socket(ior.Internet.host, ior.Internet.port);
+                     break Open;
+                   }
+                 catch (BindException ex)
+                   {
+                     try
+                       {
+                         // Expecting to free a socket via finaliser.
+                         System.gc();
+                         Thread.sleep(pause);
+                         pause = pause * 2;
+                         if (pause > PAUSE_MAX)
+                           pause = PAUSE_MAX;
+                       }
+                     catch (InterruptedException iex)
+                       {
+                       }
+                   }
+               }
+           }
+ 
+         if (socket == null)
+           throw new NO_RESOURCES(ior.Internet.host + ":" + ior.Internet.port
+             + " in use");
+         socket.setKeepAlive(true);
+ 
+         OutputStream socketOutput = socket.getOutputStream();
+ 
+         // Write the message header.
+         header.write(socketOutput);
+ 
+         // Write the request header and parameters (if present).
+         request_part.buffer.writeTo(socketOutput);
+ 
+         socketOutput.flush();
+         if (!socket.isClosed())
+           {
+             MessageHeader response_header = new MessageHeader();
+             InputStream socketInput = socket.getInputStream();
+             response_header.read(socketInput);
+ 
+             byte[] r;
+             if (orb instanceof OrbFunctional)
+               {
+                 OrbFunctional fo = (OrbFunctional) orb;
+                 r = response_header.readMessage(socketInput, socket,
+                   fo.TOUT_WHILE_READING, fo.TOUT_AFTER_RECEIVING);
+               }
+             else
+               r = response_header.readMessage(socketInput, null, 0, 0);
+ 
+             return new RawReply(orb, response_header, r);
+           }
+         else
+           return EMPTY;
+       }
+     catch (IOException io_ex)
+       {
+         COMM_FAILURE m = new COMM_FAILURE("Unable to open a socket at "
+           + ior.Internet.host + ":" + ior.Internet.port, 0xC9,
+           CompletionStatus.COMPLETED_NO);
+         m.initCause(io_ex);
+         throw m;
+       }
+     finally
+       {
+         try
+           {
+             if (socket != null && !socket.isClosed())
+               {
+                 socket.setSoTimeout(OrbFunctional.TANDEM_REQUESTS);
+                 SocketRepository.put_socket(key, socket);
+               }
+           }
+         catch (IOException scx)
+           {
+             InternalError ierr = new InternalError();
+             ierr.initCause(scx);
+             throw ierr;
+           }
+       }
+   }
+ 
+   /** {@inheritDoc} */
+   public org.omg.CORBA.Object target()
+   {
+     return m_target;
+   }
+ 
+   /**
+    * Get the used version. Normally, it is better to respond using the same
+    * version as it is specified in IOR, but not above the maximal supported
+    * version.
+    */
+   public Version useVersion(Version desired)
+   {
+     if (desired.until_inclusive(MAX_SUPPORTED.major, MAX_SUPPORTED.minor))
+       return desired;
+     else
+       return MAX_SUPPORTED;
+   }
+ 
+   /**
+    * Wait while the response to request, submitted using
+    * {@link #send_deferred()} or {@link #invoke()} (from other thread) is
+    * returned.
+    *
+    * FIXME It is possible to rewrite this using Object.wait() and
+    * Object.notify(), but be sure to prepare the test as well.
+    */
+   public synchronized void waitWhileBusy()
+   {
+     // Waiting constants.
+     long wait = 10;
+     long increment = 2;
+     long max = 5000;
+ 
+     while (running)
+       {
+         try
+           {
+             Thread.sleep(wait);
+             if (wait < max)
+               wait = wait * increment;
+           }
+         catch (InterruptedException ex)
+           {
+           }
+       }
+   }
+ 
+   /**
+    * Do actual invocation. This method recursively calls itself if the
+    * redirection is detected.
+    */
+   private void p_invoke()
+     throws SystemException, ForwardRequest
+   {
+     RawReply response = submit();
+ 
+     if (m_rph == null)
+       m_rph = response.header.create_reply_header();
+ 
+     BufferredCdrInput input = response.getStream();
+     input.setOrb(orb);
+ 
+     m_rph.read(input);
+ 
+     // The stream must be aligned sinve v1.2, but only once.
+     boolean align = response.header.version.since_inclusive(1, 2);
+ 
+     switch (m_rph.reply_status)
+       {
+         case ReplyHeader.NO_EXCEPTION:
+ 
+           NamedValue arg;
+ 
+           // Read return value, if set.
+           if (m_result != null)
+             {
+               if (align)
+                 {
+                   input.align(8);
+                   align = false;
+                 }
+               m_result.value().read_value(input, m_result.value().type());
+             }
+ 
+           // Read returned parameters, if set.
+           if (m_args != null)
+             for (int i = 0; i < m_args.count(); i++)
+               {
+                 try
+                   {
+                     arg = m_args.item(i);
+ 
+                     // Both ARG_INOUT and ARG_OUT have this binary flag set.
+                     if ((arg.flags() & ARG_OUT.value) != 0)
+                       {
+                         if (align)
+                           {
+                             input.align(8);
+                             align = false;
+                           }
+ 
+                         arg.value().read_value(input, arg.value().type());
+                       }
+                   }
+                 catch (Bounds ex)
+                   {
+                     Unexpected.error(ex);
+                   }
+               }
+ 
+           if (m_interceptor != null)
+             m_interceptor.receive_reply(m_info);
+ 
+           break;
+ 
+         case ReplyHeader.SYSTEM_EXCEPTION:
+           if (align)
+             {
+               input.align(8);
+               align = false;
+             }
+           readExceptionId(input);
+ 
+           m_sys_ex = ObjectCreator.readSystemException(input,
+             m_rph.service_context);
+           m_environment.exception(m_sys_ex);
+ 
+           if (m_interceptor != null)
+             m_interceptor.receive_exception(m_info);
+ 
+           throw m_sys_ex;
+ 
+         case ReplyHeader.USER_EXCEPTION:
+           if (align)
+             {
+               input.align(8);
+               align = false;
+             }
+           readExceptionId(input);
+ 
+           // Prepare an Any that will hold the exception.
+           gnuAny exc = new gnuAny();
+           exc.setOrb(orb);
+ 
+           exc.insert_Streamable(new StreamHolder(input));
+ 
+           UnknownUserException unuex = new UnknownUserException(exc);
+           m_environment.exception(unuex);
+ 
+           if (m_interceptor != null)
+             m_interceptor.receive_exception(m_info);
+ 
+           break;
+ 
+         case ReplyHeader.LOCATION_FORWARD_PERM:
+         case ReplyHeader.LOCATION_FORWARD:
+           if (response.header.version.since_inclusive(1, 2))
+             input.align(8);
+ 
+           IOR forwarded = new IOR();
+           try
+             {
+               forwarded._read_no_endian(input);
+             }
+           catch (IOException ex)
+             {
+               new MARSHAL("Cant read forwarding info", 5103,
+                 CompletionStatus.COMPLETED_NO);
+             }
+ 
+           setIor(forwarded);
+ 
+           m_forward_ior = forwarded;
+ 
+           if (m_interceptor != null)
+             m_interceptor.receive_other(m_info);
+ 
+           // Repeat with the forwarded information.
+           p_invoke();
+           return;
+ 
+         default:
+           throw new MARSHAL("Unknow reply status", 8100 + m_rph.reply_status,
+             CompletionStatus.COMPLETED_NO);
+       }
+   }
+ 
+   /**
+    * Read exception id without changing the stream pointer position.
+    */
+   void readExceptionId(BufferredCdrInput input)
+   {
+     input.mark(2048);
+     m_exception_id = input.read_string();
+     input.reset();
+   }
+ 
+   /**
+    * Write the operation parameters.
+    *
+    * @param header the message header
+    * @param request_part the stream to write parameters into
+    *
+    * @throws MARSHAL if the attempt to write the parameters has failde.
+    */
+   protected void write_parameter_buffer(MessageHeader header,
+     BufferedCdrOutput request_part
+   ) throws MARSHAL
+   {
+     try
+       {
+         if (header.version.since_inclusive(1, 2))
+           {
+             request_part.align(8);
+           }
+         m_parameter_buffer.buffer.writeTo(request_part);
+       }
+     catch (IOException ex)
+       {
+         MARSHAL m = new MARSHAL("Unable to write method arguments to CDR output.");
+         m.minor = Minor.CDR;
+         throw m;
+       }
+   }
+ 
+   /**
+    * Write the operation parameters.
+    *
+    * @param header the message header
+    * @param request_part the stream to write parameters into
+    *
+    * @throws MARSHAL if the attempt to write the parameters has failde.
+    */
+   protected void write_parameters(MessageHeader header,
+     BufferedCdrOutput request_part
+   ) throws MARSHAL
+   {
+     // Align after 1.2, but only once.
+     boolean align = header.version.since_inclusive(1, 2);
+     NamedValue para;
+ 
+     try
+       {
+         // Write parameters now.
+         for (int i = 0; i < m_args.count(); i++)
+           {
+             para = m_args.item(i);
+ 
+             // This bit is set both for ARG_IN and ARG_INOUT
+             if ((para.flags() & ARG_IN.value) != 0)
+               {
+                 if (align)
+                   {
+                     request_part.align(8);
+                     align = false;
+                   }
+                 para.value().write_value(request_part);
+               }
+           }
+       }
+     catch (Bounds ex)
+       {
+         InternalError ierr = new InternalError();
+         ierr.initCause(ex);
+         throw ierr;
+       }
+   }
+ 
+   /* **************Implementation of the request info operations. ***** */
+ 
+   /**
+    * Add context to request.
+    */
+   public void add_request_service_context(ServiceContext service_context,
+     boolean replace
+   )
+   {
+     m_rqh.addContext(service_context, replace);
+   }
+ 
+   /**
+    * Get the Internet profile as an effective profile.
+    */
+   public TaggedProfile effective_profile()
+   {
+     BufferedCdrOutput buf = new BufferedCdrOutput(512);
+     buf.setOrb(orb);
+     ior.Internet.write(buf);
+ 
+     TaggedProfile p = new TaggedProfile();
+     p.tag = TAG_INTERNET_IOP.value;
+     p.profile_data = buf.buffer.toByteArray();
+     return p;
+   }
+ 
+   /**
+    * Return either target or forwarded targed.
+    */
+   public org.omg.CORBA.Object effective_target()
+   {
+     return new IorObject(orb, ior);
+   }
+ 
+   /**
+    * Get effective component with the give id from the Internet profile.
+    */
+   public TaggedComponent get_effective_component(int id)
+     throws BAD_PARAM
+   {
+     if (id == TAG_CODE_SETS.value)
+       {
+         // Codesets are encoded separately.
+         BufferedCdrOutput buf = new BufferedCdrOutput(512);
+         buf.setOrb(orb);
+         ior.Internet.CodeSets.write(buf);
+ 
+         TaggedComponent t = new TaggedComponent();
+         t.tag = TAG_CODE_SETS.value;
+         t.component_data = buf.buffer.toByteArray();
+         return t;
+       }
+     else
+       {
+         for (int i = 0; i < ior.Internet.components.size(); i++)
+           {
+             TaggedComponent c =
+               (TaggedComponent) ior.Internet.components.get(i);
+             if (c.tag == id)
+               return c;
+           }
+       }
+     throw new BAD_PARAM("No component " + id + " in the Internet profile", 28,
+       CompletionStatus.COMPLETED_MAYBE
+     );
+   }
+ 
+   /**
+    * Get all components with the given id from the internet profile.
+    */
+   public TaggedComponent[] get_effective_components(int id)
+     throws BAD_PARAM
+   {
+     if (id == TAG_CODE_SETS.value)
+       return new TaggedComponent[] { get_effective_component(TAG_CODE_SETS.value) };
+     else
+       {
+         ArrayList components = new ArrayList(ior.Internet.components.size());
+         for (int i = 0; i < ior.Internet.components.size(); i++)
+           {
+             TaggedComponent c =
+               (TaggedComponent) ior.Internet.components.get(i);
+             if (c.tag == id)
+               components.add(c);
+           }
+         if (components.size() == 0)
+           throw new BAD_PARAM("No component " + id +
+             " in the Internet profile", 28, CompletionStatus.COMPLETED_MAYBE
+           );
+         else
+           {
+             TaggedComponent[] t = new TaggedComponent[ components.size() ];
+             for (int i = 0; i < t.length; i++)
+               t [ i ] = (TaggedComponent) components.get(i);
+             return t;
+           }
+       }
+   }
+ 
+   /**
+    * This should be not implemented up till jdk 1.5 inclusive.
+    */
+   public Policy get_request_policy(int type) throws INV_POLICY
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   /** @inheritDoc */
+   public String received_exception_id()
+   {
+     return m_exception_id;
+   }
+ 
+   /** @inheritDoc */
+   public Any received_exception()
+   {
+     if (m_exception_id == null)
+       return null;
+ 
+     if (m_sys_ex != null)
+       {
+         Any a = orb.create_any();
+         ObjectCreator.insertSysException(a, m_sys_ex);
+         return a;
+       }
+ 
+     Exception mex = m_environment.exception();
+ 
+     UnknownUserException ex = (UnknownUserException) mex;
+     if (ex == null)
+       return null;
+     else
+       return ex.except;
+   }
+ 
+   /**
+    * Return the forwarded reference, null if none.
+    */
+   public org.omg.CORBA.Object forward_reference()
+   {
+     if (m_forwarding_target != null)
+       return m_forwarding_target;
+ 
+     if (m_forward_ior != null)
+       return new IorObject(orb, m_forward_ior);
+     else
+       return null;
+   }
+ 
+   /**
+    * Get the slot from the slot array inside this request.
+    */
+   public Any get_slot(int id) throws InvalidSlot
+   {
+     try
+       {
+         return m_slots [ id ];
+       }
+     catch (Exception e)
+       {
+         throw new InvalidSlot("slot id " + id + ":" + e);
+       }
+   }
+ 
+   /**
+    * Get the reply status.
+    */
+   public short reply_status()
+   {
+     if (m_rph == null)
+       throw new BAD_INV_ORDER("Request not yet sent", 14,
+         CompletionStatus.COMPLETED_NO
+       );
+     return (short) m_rph.reply_status;
+   }
+ 
+   /**
+    * Get the request id.
+    */
+   public int request_id()
+   {
+     return m_rqh.request_id;
+   }
+ 
+   /**
+    * Return true if the response is expected.
+    */
+   public boolean response_expected()
+   {
+     return !oneWay;
+   }
+ 
+   /**
+    * Determines how far the request shall progress before control is returned to
+    * the client. However up till JDK 1.5 inclusive this method always returns
+    * SYNC_WITH_TRANSPORT.
+    *
+    * @return {@link org.omg.Messaging.SYNC_WITH_TRANSPORT.value (1), always.
+    *
+    * @specnote as defined in the Suns 1.5 JDK API.
+    */
+   public short sync_scope()
+   {
+     return org.omg.Messaging.SYNC_WITH_TRANSPORT.value;
+   }
+ 
+   /** @inheritDoc */
+   public ServiceContext get_request_service_context(int ctx_name)
+     throws BAD_PARAM
+   {
+     return gnu.CORBA.GIOP.ServiceContext.findContext(ctx_name,
+       m_rqh.service_context
+     );
+   }
+ 
+   /** @inheritDoc */
+   public ServiceContext get_reply_service_context(int ctx_name)
+     throws BAD_PARAM
+   {
+     if (m_rph == null)
+       throw new BAD_INV_ORDER("Reply context not yet available");
+     return gnu.CORBA.GIOP.ServiceContext.findContext(ctx_name,
+       m_rph.service_context
+     );
+   }
+ 
+   /** @inheritDoc */
+   public String[] operation_context()
+   {
+     return ice_contexts();
+   }
+ 
+   /**
+    * Get contexts as required by interceptor.
+    */
+   public String[] ice_contexts()
+   {
+     if (m_context_list == null)
+       return new String[ 0 ];
+     else
+       {
+         try
+           {
+             String[] cn = new String[ m_context_list.count() ];
+             for (int i = 0; i < cn.length; i++)
+               cn [ i ] = m_context_list.item(i);
+             return cn;
+           }
+         catch (Bounds e)
+           {
+             throw new Unexpected(e);
+           }
+       }
+   }
+ 
+   /**
+    * Check if the call is done via DII.
+    */
+   public void checkDii()
+   {
+     if (m_parameter_buffer != null)
+       throw new NO_RESOURCES("The invocation method provides " +
+         "no access to this resource. DII call required.", 1,
+         CompletionStatus.COMPLETED_MAYBE
+       );
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuValueHolder.java gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuValueHolder.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/gnuValueHolder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/gnuValueHolder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,135 ----
+ /* gnuValueHolder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA;
+ 
+ import gnu.CORBA.CDR.Vio;
+ 
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.ValueBaseHolder;
+ import org.omg.CORBA.portable.BoxedValueHelper;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Boxed value holder that also remembers the value type and the value helper.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuValueHolder
+   extends ValueBaseHolder
+ {
+   /**
+    * The type code of the stored value.
+    */
+   TypeCode type;
+ 
+   /**
+    * The helper that could read and write fields of the boxed value.
+    */
+   transient BoxedValueHelper helper;
+ 
+   /**
+    * If true, the helper not available.
+    */
+   transient boolean helper_NA;
+ 
+   /**
+    * Create a new instance for the given value and given type.
+    */
+   public gnuValueHolder(Serializable value, TypeCode a_type)
+   {
+     super(value);
+     type = a_type;
+   }
+ 
+   /**
+    * Get the true type, as it was passed in the constructor.
+    */
+   public TypeCode _type()
+   {
+     return type;
+   }
+ 
+   /**
+    * Write content to the output stream. Tries to locate the
+    * corresponding helper class.
+    */
+   public void _write(OutputStream output)
+   {
+     findHelper();
+     if (helper == null)
+       super._write(output);
+     else
+       Vio.write(output, value, helper);
+   }
+ 
+   /**
+    * Read, trying to locate helper, if possible.
+    */
+   public void _read(InputStream input)
+   {
+     findHelper();
+     if (helper == null)
+       super._read(input);
+     else
+       value = Vio.read(input, helper);
+   }
+ 
+   /**
+    * Set the read and write methods.
+    */
+   void findHelper()
+   {
+     if (helper != null || helper_NA)
+       return;
+     try
+       {
+         Class helperClass =
+           ObjectCreator.forName(ObjectCreator.toHelperName(type.id()));
+ 
+         helper = (BoxedValueHelper) helperClass.newInstance();
+       }
+     catch (Exception ex)
+       {
+         helper_NA = true;
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/interfaces/SocketFactory.java gcc-4.1.0/libjava/classpath/gnu/CORBA/interfaces/SocketFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/interfaces/SocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/interfaces/SocketFactory.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,95 ----
+ /* SocketFactory.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.interfaces;
+ 
+ import java.io.IOException;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ 
+ /**
+  * This class produces sockets for serving and submitting CORBA requests. The
+  * socket factory can be set using {@link gnuOrb.setSocketFactory()} for
+  * producting all sockets for that ORB. This is needed for using secure sockets,
+  * for implementing the desired timeout policies, for HTTP tunnels and in some
+  * other similar cases. While such functionality is provided by near all
+  * existing CORBA implementations, no standard mechanism is defined.
+  * 
+  * The socket factory may need to put additional information to the IORs of the
+  * objects, released by the ORB. Because of this reason, this interface extends
+  * IORInterceptorOperations.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public interface SocketFactory
+ {
+   /**
+    * The name of the ORB property that forces the ORB to use the socket
+    * factory class, the name of that (String) is the value of this property.
+    */
+   final String PROPERTY = "gnu.CORBA.SocketFactory";
+   
+   /**
+    * Create a server socket that should serve remote invocations on the given
+    * port. The ORB may use this socket to serve either one or more objects.
+    * 
+    * @param port the port, on that the socket should be listening for requests.
+    * The port policy can be controlled by {@link gnuPortManager}.
+    * 
+    * @throws IOException if the socket cannot be created on the given port due
+    * any reasons. The ORB may try to open the socket on another port, calling
+    * this method with the different parameter.
+    */
+   ServerSocket createServerSocket(int port)
+     throws IOException;
+   
+   /**
+    * Create a client socket that should send a request to the remote side. When
+    * returned, the socket should be opened and ready to communicate.
+    * 
+    * @param port the port, on that the socket should be openend. The port is
+    * usually part of the internet profile.
+    * 
+    * @throws IOException if the socket cannot be created on the given port due
+    * any reasons. The ORB may try to open the socket on another port, calling
+    * this method with the different parameter.
+    */
+   Socket createClientSocket(String host, int port)
+     throws IOException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/interfaces/package.html gcc-4.1.0/libjava/classpath/gnu/CORBA/interfaces/package.html
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/interfaces/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/interfaces/package.html	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,49 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html -
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.CORBA.interfaces</title></head>
+ 
+ <body>
+ <p>This package contains Classpath specific interfaces that
+ the user program may be forced to use in cases when no
+ other, better solution of the problem is available. The
+ existing classes and methods in this package should not
+ be removed without the real need</p>
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/AliasTypeCode.java gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/AliasTypeCode.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/AliasTypeCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/AliasTypeCode.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,148 ----
+ /* AliasTypeCode.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.typecodes;
+ 
+ 
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ 
+ /**
+  * The type code that is an alias of another type code.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class AliasTypeCode
+   extends PrimitiveTypeCode
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The typecode repository id.
+    */
+   protected final String id;
+ 
+   /**
+    * The typecode name.
+    */
+   protected final String name;
+ 
+   /**
+    * The type code for that this typecode is an alias.
+    */
+   protected final TypeCode aliasFor;
+ 
+   /**
+    * Create the typecode, specifying for that typecode it is an
+    * alias and the id and name of the newly created typecode.
+    *
+    * @param an_aliasFor the typecode, for that this typecode is an
+    * alias.
+    *
+    * @param an_id the repository id fo the newly created typecode.
+    *
+    * @param a_name the name of the newly created typecode.
+    */
+   public AliasTypeCode(TypeCode an_aliasFor, String an_id, String a_name)
+   {
+     super(TCKind.tk_alias);
+     aliasFor = an_aliasFor;
+     id = an_id;
+     name = a_name;
+   }
+ 
+   /**
+    * Get the typecode, for that this typecode is an alias.
+    */
+   public TypeCode content_type()
+   {
+     return aliasFor;
+   }
+ 
+   /**
+    * The objects are assumed to be equal if they repository
+    * ids are both equal or both unavailable and the
+    * kind values are equal.
+    *
+    * @param other the other typecode to compare.
+    */
+   public boolean equal(TypeCode other)
+   {
+     if (super.equal(other))
+       return true;
+     try
+       {
+         return id.equals(other.id());
+       }
+     catch (BadKind ex)
+       {
+         return false;
+       }
+   }
+ 
+   /**
+    * Return true if the given typecode is equal for
+    * either this typecode of the alias typecode.
+    *
+    * @param other the typecode to compare.
+    */
+   public boolean equivalent(TypeCode other)
+   {
+     return other.equal(this) || other.equal(aliasFor);
+   }
+ 
+   /**
+    * Get the repository id of this typecode.
+    */
+   public String id()
+   {
+     return id;
+   }
+ 
+   /**
+    * Get the name of this typecode.
+    */
+   public String name()
+   {
+     return name;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/ArrayTypeCode.java gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/ArrayTypeCode.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/ArrayTypeCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/ArrayTypeCode.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,272 ----
+ /* ArrayTypeCode.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.typecodes;
+ 
+ 
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ 
+ /**
+  * A TypeCode for arrays.
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class ArrayTypeCode
+   extends PrimitiveTypeCode
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   
+   /**
+    * The array components.
+    */
+   TypeCode of;
+ 
+   /**
+    * The length of the array, must be updated when setting
+    * a new value.
+    */
+   private int length;
+ 
+   /**
+    * Create a primitive array type code, defining the sequence
+    * {@link TCKind.tk_sequence)} with
+    * the given member type.
+    *
+    * @param array_of the sequence member type.
+    */
+   public ArrayTypeCode(TCKind array_of)
+   {
+     super(TCKind.tk_sequence);
+     of = new PrimitiveTypeCode(array_of);
+   }
+ 
+   /**
+    * Create a primitive array type code, defining the array, sequence
+    * or other type  with the given member type.
+    *
+    * @param this_type the type of this type (normally either
+    * sequence of array).
+    * @param array_of the sequence member type.
+    */
+   public ArrayTypeCode(TCKind this_type, TypeCode array_of)
+   {
+     super(this_type);
+     of = array_of;
+   }
+ 
+   /**
+    * Return the array component type.
+    * @return the array component type
+    * @throws org.omg.CORBA.TypeCodePackage.BadKind
+    */
+   public TypeCode content_type()
+                         throws org.omg.CORBA.TypeCodePackage.BadKind
+   {
+     return of;
+   }
+ 
+   /**
+    * Return true if the other TypeCode defines the array, having elements
+    * of the same type. The sizes of arrays are not taken into
+    * consideration.
+    *
+    * @param other the other TypeCode
+    * @return true if <code>other</code> is an array with the same
+    * component type.
+    */
+   public boolean equal(TypeCode other)
+   {
+     try
+       {
+         return kind() == other.kind() &&
+                content_type() == other.content_type();
+       }
+     catch (BadKind ex)
+       {
+         // Should not be thrown.
+         return false;
+       }
+   }
+ 
+   /**
+    * Returns the agreed Id in the form of
+    * <code>IDL:omg.org/CORBA/ {type name} Seq:1.0</code>.
+    *
+    * @return the Id of this TypeCode.
+    *
+    * @throws org.omg.CORBA.TypeCodePackage.BadKind if the content type
+    * is not one of the constants, defined in {@link TCKind}.
+    * This package class should not be used as TypeCode for the arrays,
+    * holding the user defined components.
+    */
+   public String id()
+             throws org.omg.CORBA.TypeCodePackage.BadKind
+   {
+     switch (content_type().kind().value())
+       {
+         case TCKind._tk_null :
+           return "IDL:omg.org/CORBA/NullSeq:1.0";
+ 
+         case TCKind._tk_void :
+           return "IDL:omg.org/CORBA/VoidSeq:1.0";
+ 
+         case TCKind._tk_short :
+           return "IDL:omg.org/CORBA/ShortSeq:1.0";
+ 
+         case TCKind._tk_long :
+           return "IDL:omg.org/CORBA/LongSeq:1.0";
+ 
+         case TCKind._tk_ushort :
+           return "IDL:omg.org/CORBA/UShortSeq:1.0";
+ 
+         case TCKind._tk_ulong :
+           return "IDL:omg.org/CORBA/ULongSeq:1.0";
+ 
+         case TCKind._tk_float :
+           return "IDL:omg.org/CORBA/FloatSeq:1.0";
+ 
+         case TCKind._tk_double :
+           return "IDL:omg.org/CORBA/DoubleSeq:1.0";
+ 
+         case TCKind._tk_boolean :
+           return "IDL:omg.org/CORBA/BooleanSeq:1.0";
+ 
+         case TCKind._tk_char :
+           return "IDL:omg.org/CORBA/CharSeq:1.0";
+ 
+         case TCKind._tk_octet :
+           return "IDL:omg.org/CORBA/OctetSeq:1.0";
+ 
+         case TCKind._tk_any :
+           return "IDL:omg.org/CORBA/AnySeq:1.0";
+ 
+         case TCKind._tk_TypeCode :
+           return "IDL:omg.org/CORBA/TypeCodeSeq:1.0";
+ 
+         case TCKind._tk_Principal :
+           return "IDL:omg.org/CORBA/PrincipalSeq:1.0";
+ 
+         case TCKind._tk_objref :
+           return "IDL:omg.org/CORBA/ObjrefSeq:1.0";
+ 
+         case TCKind._tk_struct :
+           return "IDL:omg.org/CORBA/StructSeq:1.0";
+ 
+         case TCKind._tk_union :
+           return "IDL:omg.org/CORBA/UnionSeq:1.0";
+ 
+         case TCKind._tk_enum :
+           return "IDL:omg.org/CORBA/EnumSeq:1.0";
+ 
+         case TCKind._tk_string :
+           return "IDL:omg.org/CORBA/StringSeq:1.0";
+ 
+         case TCKind._tk_sequence :
+           return "IDL:omg.org/CORBA/SequenceSeq:1.0";
+ 
+         case TCKind._tk_array :
+           return "IDL:omg.org/CORBA/ArraySeq:1.0";
+ 
+         case TCKind._tk_alias :
+           return "IDL:omg.org/CORBA/AliasSeq:1.0";
+ 
+         case TCKind._tk_except :
+           return "IDL:omg.org/CORBA/ExceptSeq:1.0";
+ 
+         case TCKind._tk_longlong :
+           return "IDL:omg.org/CORBA/LongLongSeq:1.0";
+ 
+         case TCKind._tk_ulonglong :
+           return "IDL:omg.org/CORBA/ULongLongSeq:1.0";
+ 
+         case TCKind._tk_longdouble :
+           return "IDL:omg.org/CORBA/LongDoubleSeq:1.0";
+ 
+         case TCKind._tk_wchar :
+           return "IDL:omg.org/CORBA/WCharSeq:1.0";
+ 
+         case TCKind._tk_wstring :
+           return "IDL:omg.org/CORBA/WStringSeq:1.0";
+ 
+         case TCKind._tk_fixed :
+           return "IDL:omg.org/CORBA/FixedSeq:1.0";
+ 
+         case TCKind._tk_value :
+           return "IDL:omg.org/CORBA/ValueSeq:1.0";
+ 
+         case TCKind._tk_value_box :
+           return "IDL:omg.org/CORBA/Value_boxSeq:1.0";
+ 
+         case TCKind._tk_native :
+           return "IDL:omg.org/CORBA/NativeSeq:1.0";
+ 
+         case TCKind._tk_abstract_interface :
+           return "IDL:omg.org/CORBA/Abstract_interfaceSeq:1.0";
+ 
+         default :
+           throw new BadKind();
+       }
+   }
+ 
+   /**
+    * Return the array length.
+    * @return the length of the array.
+    * @throws org.omg.CORBA.TypeCodePackage.BadKind
+    */
+   public int length()
+              throws org.omg.CORBA.TypeCodePackage.BadKind
+   {
+     return length;
+   }
+ 
+   /**
+    * Sets the array length to the supplied value.
+    *
+    * @param l the new length.
+    */
+   public void setLength(int l)
+   {
+     this.length = l;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/FixedTypeCode.java gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/FixedTypeCode.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/FixedTypeCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/FixedTypeCode.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,152 ----
+ /* FixedTypeCode.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.typecodes;
+ 
+ 
+ import java.math.BigDecimal;
+ 
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ 
+ /**
+  * A typecode for CORBA <code>fixed</code>
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class FixedTypeCode
+   extends PrimitiveTypeCode
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   
+   /**
+    * The number of the used digits.
+    */
+   private short digits;
+ 
+   /**
+    * The number of the digits after the decimal point.
+    */
+   private short scale;
+ 
+   /**
+    * Creates the instance of the fixed type code.
+    */
+   public FixedTypeCode()
+   {
+     super(TCKind.tk_fixed);
+   }
+ 
+   /**
+    * Creates the instance of the fixed type code,
+    * setting the digits and scale by example.
+    */
+   public FixedTypeCode(BigDecimal example)
+   {
+     super(TCKind.tk_fixed);
+     if (example != null)
+       {
+         setScale(example.scale());
+         setDigits(countDigits(example));
+       }
+   }
+ 
+   /**
+    * Set the number of digits.
+    */
+   public void setDigits(int a_digits)
+   {
+     this.digits = (short) a_digits;
+   }
+ 
+   /**
+    * Set the number of digits after the decimal point.
+    */
+   public void setScale(int a_scale)
+   {
+     this.scale = (short) a_scale;
+   }
+ 
+   /**
+    * Get the number of digits in thid BigDecimal
+    *
+    * @param x a BigDecimal to check.
+    */
+   public static int countDigits(BigDecimal number)
+   {
+     return number.unscaledValue().abs().toString().length();
+   }
+ 
+   /**
+    * Compare with other type code for equality.
+    */
+   public boolean equal(TypeCode other)
+   {
+     if (other == this) return true;
+     try
+       {
+         TypeCode that = (TypeCode) other;
+         return kind() == that.kind() && digits == that.fixed_digits() &&
+                scale == that.fixed_scale();
+       }
+     catch (BadKind ex)
+       {
+         return false;
+       }
+   }
+ 
+   /**
+    * Get the number of digits.
+    */
+   public short fixed_digits()
+   {
+     return digits;
+   }
+ 
+   /**
+    * Get the number of digits after the decimal point.
+    */
+   public short fixed_scale()
+   {
+     return scale;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/GeneralTypeCode.java gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/GeneralTypeCode.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/GeneralTypeCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/GeneralTypeCode.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,249 ----
+ /* GeneralTypeCode.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.typecodes;
+ 
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ 
+ import java.util.Arrays;
+ import java.util.BitSet;
+ 
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ 
+ /**
+  * A typecode for types, requiring to provide various additional
+  * properties but still not requiring to store the
+  * members of the structure. The property can be retrieved
+  * by the corresponding method if it has been previously assigned.
+  * Otherwise, a {@link BadKind} is thrown.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class GeneralTypeCode
+   extends PrimitiveTypeCode
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   
+   /**
+    * Indicates that the field value has not been previously set.
+    */
+   protected static int UNSET = Integer.MIN_VALUE;
+ 
+   /**
+    * The kinds for that the length() must return 0 even if it
+    * has not been previously set.
+    */
+   private static final BitSet lengthAllowed = new BitSet();
+ 
+   static
+   {
+     lengthAllowed.set(TCKind._tk_array);
+     lengthAllowed.set(TCKind._tk_sequence);
+     lengthAllowed.set(TCKind._tk_string);
+     lengthAllowed.set(TCKind._tk_wstring);
+   }
+ 
+   private String id;
+   private String name;
+   private TypeCode concrete_base_type;
+   private TypeCode content_type;
+   private int len;
+   private int type_modifier = UNSET;
+ 
+   /**
+    * Create a new instance, setting kind to the given kind.
+    * @param a_kind the kind of the typecode being created.
+    */
+   public GeneralTypeCode(TCKind a_kind)
+   {
+     super(a_kind);
+     if (!lengthAllowed.get(a_kind.value()))
+       len = UNSET;
+   }
+ 
+   /**
+    * Set this property.
+    */
+   public void setConcreteBase_type(TypeCode a_concrete_base_type)
+   {
+     this.concrete_base_type = a_concrete_base_type;
+   }
+ 
+   /**
+    * Set the component content type.
+    */
+   public void setContentType(TypeCode a_content_type)
+   {
+     this.content_type = a_content_type;
+   }
+ 
+   /**
+    * Set this property.
+    */
+   public void setId(String an_id)
+   {
+     this.id = an_id;
+   }
+ 
+   /**
+    * Set the length property.
+    * @param l
+    */
+   public void setLength(int l)
+   {
+     len = l;
+   }
+ 
+   /**
+    * Set this property.
+    */
+   public void setName(String a_name)
+   {
+     this.name = a_name;
+   }
+ 
+   /**
+    * Set the type modifier.
+    */
+   public void setTypeModifier(int a_type_modifier)
+   {
+     this.type_modifier = a_type_modifier;
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode concrete_base_type()
+                               throws BadKind
+   {
+     if (concrete_base_type != null)
+       return concrete_base_type;
+     throw new BadKind("concrete_base_type");
+   }
+ 
+   /**
+    * Returns the content type that must be explicitly set
+    * for this class.
+    *
+    * @throws BadKind if the content type has not been set.
+    */
+   public TypeCode content_type()
+                         throws BadKind
+   {
+     if (content_type != null)
+       return content_type;
+     throw new BadKind("content_type");
+   }
+ 
+   /**
+    * Returns true if both typecodes, if written into CDR
+    * stream, would result the same stream content.
+    */
+   public boolean equal(TypeCode other)
+   {
+     if (this == other)
+       return true;
+     if (kind() != other.kind())
+       return false;
+ 
+     BufferedCdrOutput a = new BufferedCdrOutput(16);
+     BufferedCdrOutput b = new BufferedCdrOutput(16);
+ 
+     a.write_TypeCode(this);
+     b.write_TypeCode(other);
+ 
+     return Arrays.equals(a.buffer.toByteArray(), b.buffer.toByteArray());
+   }
+ 
+   /**
+    * Delegates functionality to {@link #equal}.
+    */
+   public boolean equivalent(TypeCode other)
+   {
+     return equal(other);
+   }
+ 
+   /** {@inheritDoc} */
+   public String id()
+             throws BadKind
+   {
+     if (id != null)
+       return id;
+     throw new BadKind("id");
+   }
+ 
+   /**
+    * Get the length. For sequences, arrays, strings and wstrings
+    * this method returns 0 rather than throwing a BadKind even
+    * if {@link setLength(int)} has not been previously called.
+    *
+    * @return the length of string, array or sequence.
+    *
+    * @throws BadKind if the method cannot be invoked for the
+    * given kind of typecode.
+    */
+   public int length()
+              throws BadKind
+   {
+     if (len != UNSET)
+       return len;
+     throw new BadKind("length");
+   }
+ 
+   /** {@inheritDoc} */
+   public String name()
+               throws BadKind
+   {
+     if (name != null)
+       return name;
+     throw new BadKind("name");
+   }
+ 
+   /** {@inheritDoc} */
+   public short type_modifier()
+                       throws BadKind
+   {
+     if (type_modifier != UNSET)
+       return (short) type_modifier;
+     throw new BadKind("type_modifier");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/PrimitiveTypeCode.java gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/PrimitiveTypeCode.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/PrimitiveTypeCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/PrimitiveTypeCode.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,201 ----
+ /* PrimitiveTypeCode.java --
+     Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.CORBA.typecodes;
+ 
+ import java.io.Serializable;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.NO_IMPLEMENT;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.TypeCodePackage.Bounds;
+ import org.omg.CORBA.portable.IDLEntity;
+ 
+ /**
+  * An information about a primitive CORBA data type
+  * (boolean, char, wchar, octet and also signed or unsigned short, long,
+  * long long, float and double).
+  * This class only implements the methods {@link #kind() }
+  * and {@link equal() } that are valid for
+  * all TypeCode kinds. Other methods are implemented in derived
+  * subclasses.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class PrimitiveTypeCode
+   extends TypeCode
+   implements IDLEntity, Serializable
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The kind of this TypeCode.
+    */
+   protected final TCKind kind;
+ 
+   public PrimitiveTypeCode(TCKind a_kind)
+   {
+     kind = a_kind;
+   }
+ 
+   public TypeCode concrete_base_type()
+                               throws BadKind
+   {
+     throw new BadKind();
+   }
+ 
+   public TypeCode content_type()
+                         throws BadKind
+   {
+     throw new BadKind();
+   }
+ 
+   public int default_index()
+                     throws BadKind
+   {
+     throw new BadKind();
+   }
+ 
+   public TypeCode discriminator_type()
+                               throws BadKind
+   {
+     throw new BadKind();
+   }
+ 
+   /**
+    * Test two types for equality. The default implementation
+    * returs true of the types of the same kind.
+    * @param other the other type to compere with
+    * @return true if the types are interchangeable.
+    */
+   public boolean equal(TypeCode other)
+   {
+     return kind() == other.kind();
+   }
+ 
+   public boolean equivalent(TypeCode parm1)
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   public short fixed_digits()
+                      throws BadKind
+   {
+     throw new BadKind("fixed_digits");
+   }
+ 
+   public short fixed_scale()
+                     throws BadKind
+   {
+     throw new BadKind("fixed_scale");
+   }
+ 
+   public TypeCode get_compact_typecode()
+   {
+     throw new NO_IMPLEMENT();
+   }
+ 
+   public String id()
+             throws BadKind
+   {
+     throw new BadKind("id");
+   }
+ 
+   /**
+    * Return the kind of this type code object.
+    * @return one of the <code>TCKind.t_..</code> fields.
+    */
+   public TCKind kind()
+   {
+     return kind;
+   }
+ 
+   public int length()
+              throws BadKind
+   {
+     throw new BadKind("length");
+   }
+ 
+   public int member_count()
+                    throws BadKind
+   {
+     throw new BadKind("member_count");
+   }
+ 
+   public Any member_label(int index)
+                    throws BadKind, Bounds
+   {
+     throw new BadKind("member_label");
+   }
+ 
+   public String member_name(int index)
+                      throws BadKind, Bounds
+   {
+     throw new BadKind("member_name");
+   }
+ 
+   public TypeCode member_type(int index)
+                        throws BadKind, Bounds
+   {
+     throw new BadKind("member_type");
+   }
+ 
+   public short member_visibility(int index)
+                           throws BadKind, Bounds
+   {
+     throw new BadKind("member_visibility");
+   }
+ 
+   public String name()
+               throws BadKind
+   {
+     throw new BadKind("name");
+   }
+ 
+   public short type_modifier()
+                       throws BadKind
+   {
+     throw new BadKind("type_modifier");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/RecordTypeCode.java gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/RecordTypeCode.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/RecordTypeCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/RecordTypeCode.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,252 ----
+ /* RecordTypeCode.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.typecodes;
+ 
+ import gnu.CORBA.CorbaList;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.StructMember;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.TypeCodePackage.BadKind;
+ import org.omg.CORBA.TypeCodePackage.Bounds;
+ import org.omg.CORBA.UnionMember;
+ import org.omg.CORBA.ValueMember;
+ 
+ /**
+  * The type code that also has the member property getters
+  * supported.
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class RecordTypeCode
+   extends GeneralTypeCode
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The individual field of the record.
+    */
+   public static class Field
+   {
+     /**
+      * The record label.
+      */
+     public Any label;
+ 
+     /**
+      * The record name.
+      */
+     public String name;
+ 
+     /**
+      * The record type.
+      */
+     public TypeCode type;
+ 
+     /**
+      * The record visibility.
+      */
+     public int visibility = UNSET;
+   }
+ 
+   /**
+    * The members of this data structure.
+    */
+   protected CorbaList members = new CorbaList();
+   private TypeCode discriminator_type;
+   private int default_index = UNSET;
+ 
+   /**
+    * Creates the type code of the given kind.
+    */
+   public RecordTypeCode(TCKind a_kind)
+   {
+     super(a_kind);
+   }
+ 
+   /**
+    * Set the default index.
+    */
+   public void setDefaultIndex(int a_default_index)
+   {
+     this.default_index = a_default_index;
+   }
+ 
+   /**
+    * Set the discriminator type.
+    */
+   public void setDiscriminator_type(TypeCode a_discriminator_type)
+   {
+     this.discriminator_type = a_discriminator_type;
+   }
+ 
+   public Field getField(int p)
+   {
+     return (Field) members.get(p);
+   }
+ 
+   public void add(Field field)
+   {
+     members.add(field);
+   }
+ 
+   /**
+    * Adds a new field, taking values from the passed
+    * {@link StructMember}.
+    */
+   public void add(StructMember m)
+   {
+     Field f = field();
+     f.name = m.name;
+     f.type = m.type;
+   }
+ 
+   /**
+    * Adds a new field, taking values from the passed
+    * {@link ValueMember}.
+    */
+   public void add(ValueMember m)
+   {
+     Field f = field();
+     f.name = m.name;
+     f.type = m.type;
+     f.visibility = m.access;
+     
+   }
+ 
+   /**
+    * Adds a new field, taking values from the passed
+    * {@link UnionMember}.
+    */
+   public void add(UnionMember m)
+   {
+     Field f = field();
+     f.name = m.name;
+     f.type = m.type;
+     f.label = m.label;
+   }
+ 
+   public int default_index()
+                     throws BadKind
+   {
+     if (default_index != UNSET)
+       return default_index;
+     throw new BadKind();
+   }
+ 
+   public TypeCode discriminator_type()
+                               throws BadKind
+   {
+     if (discriminator_type != null)
+       return discriminator_type;
+     throw new BadKind();
+   }
+ 
+   /**
+    * Creates, adds and returns new field.
+    */
+   public Field field()
+   {
+     Field f = new Field();
+     members.add(f);
+     return f;
+   }
+ 
+   /** {@inheritDoc} */
+   public int member_count()
+   {
+     return members.size();
+   }
+ 
+   /** {@inheritDoc} */
+   public Any member_label(int index)
+                    throws BadKind, Bounds
+   {
+     Field f = getField(index);
+     if (f.label != null)
+       {
+         return f.label;
+       }
+     else
+       throw new BadKind();
+   }
+ 
+   /** {@inheritDoc} */
+   public String member_name(int index)
+                      throws BadKind
+   {
+     Field f = getField(index);
+     if (f.name != null)
+       {
+         return f.name;
+       }
+     else
+       throw new BadKind();
+   }
+ 
+   /** {@inheritDoc} */
+   public TypeCode member_type(int index)
+                        throws BadKind, Bounds
+   {
+     Field f = getField(index);
+     if (f.type != null)
+       {
+         return f.type;
+       }
+     else
+       throw new BadKind();
+   }
+ 
+   /** {@inheritDoc} */
+   public short member_visibility(int index)
+                           throws BadKind, Bounds
+   {
+     Field f = getField(index);
+     if (f.visibility != UNSET)
+       {
+         return (short) f.visibility;
+       }
+     else
+       throw new BadKind();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/RecursiveTypeCode.java gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/RecursiveTypeCode.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/RecursiveTypeCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/RecursiveTypeCode.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,84 ----
+ /* RecursiveTypeCode.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.typecodes;
+ 
+ 
+ import org.omg.CORBA.TCKind;
+ 
+ /**
+  * The typecode, serving as a placeholder in defining
+  * typecodes, containing recursion.
+  */
+ public class RecursiveTypeCode
+   extends PrimitiveTypeCode
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   /**
+    * The id of the type for that this type serves as a
+    * placeholder.
+    */
+   private final String the_id;
+ 
+   /**
+    * Create a typecode that serves as a placeholder for
+    * the typecode with the given id.
+    *
+    * @param id the Id of the type for that this type serves as a
+    * placeholder.
+    */
+   public RecursiveTypeCode(String an_id)
+   {
+     super(TCKind.tk_null);
+     the_id = an_id;
+   }
+ 
+   /**
+    * Get the id of the type for that this type serves as a
+    * placeholder.
+    */
+   public String id()
+             throws org.omg.CORBA.TypeCodePackage.BadKind
+   {
+     return the_id;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/StringTypeCode.java gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/StringTypeCode.java
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/StringTypeCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/StringTypeCode.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,89 ----
+ /* StringTypeCode.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.CORBA.typecodes;
+ 
+ 
+ import org.omg.CORBA.TCKind;
+ 
+ /**
+  * The typecode for string and wide string.
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class StringTypeCode
+   extends PrimitiveTypeCode
+ {
+   /** 
+    * Use serialVersionUID for interoperability. 
+    */
+   private static final long serialVersionUID = 1;
+   
+   private int len = 0;
+ 
+   /**
+    * Create a new instance of the string type code.
+    *
+    * @param a_kind a kind of this typecode, normally
+    * either tk_string or tk_wstring.
+    */
+   public StringTypeCode(TCKind a_kind)
+   {
+     super(a_kind);
+   }
+ 
+   /**
+    * Set the length property.
+    *
+    * @param a_length a length.
+    */
+   public void setLength(int a_length)
+   {
+     len = a_length;
+   }
+ 
+   /**
+    * Get the length of the string. This method returns 0
+    * (unbounded) if the property has not been set.
+    *
+    * @return the length (bound) of the string.
+    */
+   public int length()
+   {
+     return len;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/package.html gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/package.html
*** gcc-4.0.2/libjava/classpath/gnu/CORBA/typecodes/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/CORBA/typecodes/package.html	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,48 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.CORBA.typecodes</title></head>
+ 
+ <body>
+  Contains GNU Classpath specific typecode definitions.   
+   
+  @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ </body>
+ </html>
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/ByteArray.java gcc-4.1.0/libjava/classpath/gnu/classpath/ByteArray.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/ByteArray.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/ByteArray.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,109 ----
+ /* ByteArray.java -- wrapper around a byte array, with nice toString output.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath;
+ 
+ import java.io.PrintWriter;
+ import java.io.StringWriter;
+ 
+ public final class ByteArray
+ {
+   private final byte[] value;
+ 
+   public ByteArray (final byte[] value)
+   {
+     this.value = value;
+   }
+ 
+   public byte[] getValue ()
+   {
+     return value;
+   }
+ 
+   public String toString ()
+   {
+     StringWriter str = new StringWriter ();
+     PrintWriter out = new PrintWriter (str);
+     int i = 0;
+     int len = value.length;
+     while (i < len)
+       {
+ 	out.print (formatInt (i, 16, 8));
+ 	out.print ("  ");
+ 	int l = Math.min (16, len - i);
+ 	String s = toHexString (value, i, l, ' ');
+ 	out.print (s);
+ 	for (int j = 56 - (56 - s.length ()); j < 56; j++)
+ 	  out.print (" ");
+ 	for (int j = 0; j < l; j++)
+ 	  {
+ 	    byte b = value[i+j];
+ 	    if ((b & 0xFF) < 0x20 || (b & 0xFF) > 0x7E)
+ 	      out.print (".");
+ 	    else
+ 	      out.print ((char) (b & 0xFF));
+ 	  }
+ 	out.println ();
+ 	i += 16;
+       }
+     return str.toString ();
+   }
+ 
+   public static String toHexString (byte[] buf, int off, int len, char sep)
+   {
+     StringBuffer str = new StringBuffer();
+     for (int i = 0; i < len; i++)
+       {
+ 	str.append (Character.forDigit (buf[i+off] >>> 4 & 0x0F, 16));
+ 	str.append (Character.forDigit (buf[i+off] & 0x0F, 16));
+         if (i < len - 1)
+           str.append(sep);
+       }
+     return str.toString();
+   }
+ 
+   public static String formatInt (int value, int radix, int len)
+   {
+     String s = Integer.toString (value, radix);
+     StringBuffer buf = new StringBuffer ();
+     for (int j = 0; j < len - s.length(); j++)
+       buf.append ("0");
+     buf.append (s);
+     return buf.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/Configuration.java.in gcc-4.1.0/libjava/classpath/gnu/classpath/Configuration.java.in
*** gcc-4.0.2/libjava/classpath/gnu/classpath/Configuration.java.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/Configuration.java.in	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,104 ----
+ /* Configuration.java --
+    Copyright (C) 1998, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.classpath;
+ 
+ /**
+  * This file defines compile-time constants that can be accessed by
+  * java code. It is pre-processed by configure.  
+  */
+ public interface Configuration
+ {
+   /**
+    * The value of CLASSPATH_HOME is the location that the classpath
+    * libraries and support files where installed in. It is set according to
+    * the argument for --prefix given to configure and used to set the
+    * System property gnu.classpath.home.
+    */
+   String CLASSPATH_HOME = "@prefix@";
+ 
+   /**
+    * The release version number of GNU Classpath.
+    * It is set according to the value of 'version' in the configure[.in] file
+    * and used to set the System property gnu.classpath.version.
+    */
+   String CLASSPATH_VERSION = "@VERSION@";
+ 
+   /**
+    * The value of DEBUG is substituted according to whether the
+    * "--enable-debug" argument was passed to configure. Code
+    * which is made conditional based on the value of this flag - typically 
+    * code that generates debugging output - will be removed by the optimizer 
+    * in a non-debug build.
+    */
+   boolean DEBUG = @LIBDEBUG@;
+ 
+   /**
+    * The value of LOAD_LIBRARY is substituted according to whether the
+    * "--enable-load-library" or "--disable-load-library" argument was passed 
+    * to configure.  By default, configure should define this is as true.
+    * If set to false, loadLibrary() calls to load native function
+    * implementations, typically found in static initializers of classes
+    * which contain native functions, will be omitted.  This is useful for
+    * runtimes which pre-link their native function implementations and do
+    * not require additional shared libraries to be loaded.
+    */
+   boolean INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@;
+ 
+   /**
+    * Name of default AWT peer library.
+    */
+   String default_awt_peer_toolkit = "@default_toolkit@";
+ 
+   /**
+    * Whether to automatically run the init* methods in java.lang.System
+    * (the default) at class initialization time or whether to have the VM
+    * explicitly invoke them.
+    *
+    * The default is false, meaning the VM does not explicitly run the
+    * initializers. 
+    * 
+    */
+   boolean JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = 
+ 	  @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@;
+ 
+   /**
+    * Set to true if Cairo was found and enabled during configure,
+    * false otherwise.
+    */
+   boolean GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/Pointer.java gcc-4.1.0/libjava/classpath/gnu/classpath/Pointer.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/Pointer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/Pointer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,47 ----
+ /* Pointer.java -- Pointer to VM specific data
+    Copyright (C) 1999, 2000, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ /* This file is originally part of libgcj. */
+ 
+ package gnu.classpath;
+ 
+ /** A type used to indicate special data used by native code that should not 
+     be marked by the garbage collector. */
+ 
+ public abstract class Pointer
+ {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/Pointer32.java gcc-4.1.0/libjava/classpath/gnu/classpath/Pointer32.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/Pointer32.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/Pointer32.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,52 ----
+ /* Pointer32.java -- 32 bit Pointer
+    Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.classpath;
+ 
+ /**
+  * A type used to indicate special data used by native code that should not 
+  * be marked by the garbage collector.
+  */
+ public final class Pointer32 extends Pointer
+ {
+    final int data;
+    
+    public Pointer32(int data)
+    {
+      this.data = data;
+    }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/Pointer64.java gcc-4.1.0/libjava/classpath/gnu/classpath/Pointer64.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/Pointer64.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/Pointer64.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,52 ----
+ /* Pointer64.java -- 64 bit Pointer
+    Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.classpath;
+ 
+ /**
+  * A type used to indicate special data used by native code that should not 
+  * be marked by the garbage collector.
+  */
+ public final class Pointer64 extends Pointer
+ {
+    final long data;
+    
+    public Pointer64(long data)
+    {
+      this.data = data;
+    }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/ServiceFactory.java gcc-4.1.0/libjava/classpath/gnu/classpath/ServiceFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/ServiceFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/ServiceFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,573 ----
+ /* ServiceFactory.java -- Factory for plug-in services.
+    Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath;
+ 
+ import java.io.BufferedReader;
+ import java.io.IOException;
+ import java.io.InputStreamReader;
+ import java.net.URL;
+ import java.security.AccessControlContext;
+ import java.security.AccessController;
+ import java.security.PrivilegedActionException;
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.Iterator;
+ import java.util.NoSuchElementException;
+ import java.util.logging.Level;
+ import java.util.logging.LogRecord;
+ import java.util.logging.Logger;
+ 
+ 
+ /**
+  * A factory for plug-ins that conform to a service provider
+  * interface. This is a general mechanism that gets used by a number
+  * of packages in the Java API. For instance, {@link
+  * java.nio.charset.spi.CharsetProvider} allows to write custom
+  * encoders and decoders for character sets, {@link
+  * javax.imageio.spi.ImageReaderSpi} allows to support custom image
+  * formats, and {@link javax.print.PrintService} makes it possible to
+  * write custom printer drivers.
+  *
+  * <p>The plug-ins are concrete implementations of the service
+  * provider interface, which is defined as an interface or an abstract
+  * class. The implementation classes must be public and have a public
+  * constructor that takes no arguments.
+  *
+  * <p>Plug-ins are usually deployed in JAR files. A JAR that provides
+  * an implementation of a service must declare this in a resource file
+  * whose name is the fully qualified service name and whose location
+  * is the directory <code>META-INF/services</code>. This UTF-8 encoded
+  * text file lists, on separate lines, the fully qualified names of
+  * the concrete implementations. Thus, one JAR file can provide an
+  * arbitrary number of implementations for an arbitrary count of
+  * service provider interfaces.
+  *
+  * <p><b>Example</b>
+  *
+  * <p>For example, a JAR might provide two implementations of the
+  * service provider interface <code>org.foo.ThinkService</code>,
+  * namely <code>com.acme.QuickThinker</code> and
+  * <code>com.acme.DeepThinker</code>. The code for <code>QuickThinker</code>
+  * woud look as follows:
+  *
+  * <pre>
+  * package com.acme;
+  *
+  * &#x2f;**
+  * * Provices a super-quick, but not very deep implementation of ThinkService.
+  * *&#x2f;
+  * public class QuickThinker
+  *   implements org.foo.ThinkService
+  * {
+  *   &#x2f;**
+  *   * Constructs a new QuickThinker. The service factory (which is
+  *   * part of the Java environment) calls this no-argument constructor
+  *   * when it looks up the available implementations of ThinkService.
+  *   *
+  *   * &lt;p&gt;Note that an application might query all available
+  *   * ThinkService providers, but use just one of them. Therefore,
+  *   * constructing an instance should be very inexpensive. For example,
+  *   * large data structures should only be allocated when the service
+  *   * actually gets used.
+  *   *&#x2f;
+  *   public QuickThinker()
+  *   {
+  *   }
+  *
+  *   &#x2f;**
+  *   * Returns the speed of this ThinkService in thoughts per second.
+  *   * Applications can choose among the available service providers
+  *   * based on this value.
+  *   *&#x2f;
+  *   public double getSpeed()
+  *   {
+  *     return 314159.2654;
+  *   }
+  *
+  *   &#x2f;**
+  *   * Produces a thought. While the returned thoughts are not very
+  *   * deep, they are generated in very short time.
+  *   *&#x2f;
+  *   public Thought think()
+  *   {
+  *     return null;
+  *   }
+  * }
+  * </pre>
+  *
+  * <p>The code for <code>com.acme.DeepThinker</code> is left as an
+  * exercise to the reader.
+  *
+  * <p>Acme&#x2019;s <code>ThinkService</code> plug-in gets deployed as
+  * a JAR file. Besides the bytecode and resources for
+  * <code>QuickThinker</code> and <code>DeepThinker</code>, it also
+  * contains the text file
+  * <code>META-INF/services/org.foo.ThinkService</code>:
+  *
+  * <pre>
+  * # Available implementations of org.foo.ThinkService
+  * com.acme.QuickThinker
+  * com.acme.DeepThinker
+  * </pre>
+  *
+  * <p><b>Thread Safety</b>
+  *
+  * <p>It is safe to use <code>ServiceFactory</code> from multiple
+  * concurrent threads without external synchronization.
+  *
+  * <p><b>Note for User Applications</b>
+  *
+  * <p>User applications that want to load plug-ins should not directly
+  * use <code>gnu.classpath.ServiceFactory</code>, because this class
+  * is only available in Java environments that are based on GNU
+  * Classpath. Instead, it is recommended that user applications call
+  * {@link
+  * javax.imageio.spi.ServiceRegistry#lookupProviders(Class)}. This API
+  * is actually independent of image I/O, and it is available on every
+  * environment.
+  *
+  * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
+  */
+ public final class ServiceFactory
+ {
+   /**
+    * A logger that gets informed when a service gets loaded, or
+    * when there is a problem with loading a service.
+    *
+    * <p>Because {@link java.util.logging.Logger#getLogger(String)}
+    * is thread-safe, we do not need to worry about synchronization
+    * here.
+    */
+   private static final Logger LOGGER = Logger.getLogger("gnu.classpath");
+ 
+ 
+   /**
+    * Declared private in order to prevent constructing instances of
+    * this utility class.
+    */
+   private ServiceFactory()
+   {
+   }
+ 
+ 
+   /**
+    * Finds service providers that are implementing the specified
+    * Service Provider Interface.
+    *
+    * <p><b>On-demand loading:</b> Loading and initializing service
+    * providers is delayed as much as possible. The rationale is that
+    * typical clients will iterate through the set of installed service
+    * providers until one is found that matches some criteria (like
+    * supported formats, or quality of service). In such scenarios, it
+    * might make sense to install only the frequently needed service
+    * providers on the local machine. More exotic providers can be put
+    * onto a server; the server will only be contacted when no suitable
+    * service could be found locally.
+    *
+    * <p><b>Security considerations:</b> Any loaded service providers
+    * are loaded through the specified ClassLoader, or the system
+    * ClassLoader if <code>classLoader</code> is
+    * <code>null</code>. When <code>lookupProviders</code> is called,
+    * the current {@link AccessControlContext} gets recorded. This
+    * captured security context will determine the permissions when
+    * services get loaded via the <code>next()</code> method of the
+    * returned <code>Iterator</code>.
+    *
+    * @param spi the service provider interface which must be
+    * implemented by any loaded service providers.
+    *
+    * @param loader the class loader that will be used to load the
+    * service providers, or <code>null</code> for the system class
+    * loader. For using the context class loader, see {@link
+    * #lookupProviders(Class)}.
+    *
+    * @return an iterator over instances of <code>spi</code>.
+    *
+    * @throws IllegalArgumentException if <code>spi</code> is
+    * <code>null</code>.
+    */
+   public static Iterator lookupProviders(Class spi,
+                                          ClassLoader loader)
+   {
+     String resourceName;
+     Enumeration urls;
+ 
+     if (spi == null)
+       throw new IllegalArgumentException();
+ 
+     if (loader == null)
+       loader = ClassLoader.getSystemClassLoader();
+ 
+     resourceName = "META-INF/services/" + spi.getName();
+     try
+       {
+         urls = loader.getResources(resourceName);
+       }
+     catch (IOException ioex)
+       {
+         /* If an I/O error occurs here, we cannot provide any service
+          * providers. In this case, we simply return an iterator that
+          * does not return anything (no providers installed).
+          */
+         log(Level.WARNING, "cannot access {0}", resourceName, ioex);
+         return Collections.EMPTY_LIST.iterator();
+       }
+ 
+     return new ServiceIterator(spi, urls, loader,
+                                AccessController.getContext());
+   }
+ 
+ 
+   /**
+    * Finds service providers that are implementing the specified
+    * Service Provider Interface, using the context class loader
+    * for loading providers.
+    *
+    * @param spi the service provider interface which must be
+    * implemented by any loaded service providers.
+    *
+    * @return an iterator over instances of <code>spi</code>.
+    *
+    * @throws IllegalArgumentException if <code>spi</code> is
+    * <code>null</code>.
+    *
+    * @see #lookupProviders(Class, ClassLoader)
+    */
+   public static Iterator lookupProviders(Class spi)
+   {
+     ClassLoader ctxLoader;
+ 
+     ctxLoader = Thread.currentThread().getContextClassLoader();
+     return lookupProviders(spi, ctxLoader);
+   }
+ 
+ 
+   /**
+    * An iterator over service providers that are listed in service
+    * provider configuration files, which get passed as an Enumeration
+    * of URLs. This is a helper class for {@link
+    * ServiceFactory#lookupProviders}.
+    *
+    * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
+    */
+   private static final class ServiceIterator
+     implements Iterator
+   {
+     /**
+      * The service provider interface (usually an interface, sometimes
+      * an abstract class) which the services must implement.
+      */
+     private final Class spi;
+ 
+ 
+     /**
+      * An Enumeration<URL> over the URLs that contain a resource
+      * <code>META-INF/services/&lt;org.foo.SomeService&gt;</code>,
+      * as returned by {@link ClassLoader#getResources(String)}.
+      */
+     private final Enumeration urls;
+ 
+ 
+     /**
+      * The class loader used for loading service providers.
+      */
+     private final ClassLoader loader;
+ 
+ 
+     /**
+      * The security context used when loading and initializing service
+      * providers. We want to load and initialize all plug-in service
+      * providers under the same security context, namely the one that
+      * was active when {@link #lookupProviders} has been called.
+      */
+     private final AccessControlContext securityContext;
+ 
+ 
+     /**
+      * A reader for the current file listing class names of service
+      * implementors, or <code>null</code> when the last reader has
+      * been fetched.
+      */
+     private BufferedReader reader;
+     
+ 
+     /**
+      * The URL currently being processed. This is only used for
+      * emitting error messages.
+      */
+     private URL currentURL;
+ 
+ 
+     /**
+      * The service provider that will be returned by the next call to
+      * {@link #next()}, or <code>null</code> if the iterator has
+      * already returned all service providers.
+      */
+     private Object nextProvider;
+ 
+ 
+     /**
+      * Constructs an Iterator that loads and initializes services on
+      * demand.
+      *
+      * @param spi the service provider interface which the services
+      * must implement. Usually, this is a Java interface type, but it
+      * might also be an abstract class or even a concrete superclass.
+      *
+      * @param urls an Enumeration<URL> over the URLs that contain a
+      * resource
+      * <code>META-INF/services/&lt;org.foo.SomeService&gt;</code>, as
+      * determined by {@link ClassLoader#getResources(String)}.
+      *
+      * @param loader the ClassLoader that gets used for loading
+      * service providers.
+      *
+      * @param securityContext the security context to use when loading
+      * and initializing service providers.
+      */
+     ServiceIterator(Class spi, Enumeration urls, ClassLoader loader,
+                     AccessControlContext securityContext)
+     {
+       this.spi = spi;
+       this.urls = urls;
+       this.loader = loader;
+       this.securityContext = securityContext;
+       this.nextProvider = loadNextServiceProvider();
+     }
+ 
+ 
+     /**
+      * @throws NoSuchElementException if {@link #hasNext} returns
+      * <code>false</code>.
+      */
+     public Object next()
+     {
+       Object result;
+ 
+       if (!hasNext())
+         throw new NoSuchElementException();
+ 
+       result = nextProvider;
+       nextProvider = loadNextServiceProvider();
+       return result;
+     }
+ 
+ 
+     public boolean hasNext()
+     {
+       return nextProvider != null;
+     }
+ 
+ 
+     public void remove()
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+ 
+     private Object loadNextServiceProvider()
+     {
+       String line;
+       
+       if (reader == null)
+         advanceReader();
+ 
+       for (;;)
+         {
+           /* If we have reached the last provider list, we cannot
+            * retrieve any further lines.
+            */
+           if (reader == null)
+             return null;
+ 
+           try
+             {
+               line = reader.readLine();
+             }
+           catch (IOException readProblem)
+             {
+               log(Level.WARNING, "IOException upon reading {0}", currentURL,
+                   readProblem);
+               line = null;
+             }
+ 
+           /* When we are at the end of one list of services,
+            * switch over to the next one.
+            */
+           if (line == null)
+             {
+               advanceReader();
+               continue;
+             }
+ 
+ 
+           // Skip whitespace at the beginning and end of each line.
+           line = line.trim();
+ 
+           // Skip empty lines.
+           if (line.length() == 0)
+             continue;
+ 
+           // Skip comment lines.
+           if (line.charAt(0) == '#')
+             continue;
+ 
+           try
+             {
+               log(Level.FINE,
+                   "Loading service provider \"{0}\", specified"
+                   + " by \"META-INF/services/{1}\" in {2}.",
+                   new Object[] { line, spi.getName(), currentURL },
+                   null);
+ 
+               /* Load the class in the security context that was
+                * active when calling lookupProviders.
+                */
+               return AccessController.doPrivileged(
+                 new ServiceProviderLoadingAction(spi, line, loader),
+                 securityContext);
+             }
+           catch (Exception ex)
+             {
+               String msg = "Cannot load service provider class \"{0}\","
+                 + " specified by \"META-INF/services/{1}\" in {2}";
+               if (ex instanceof PrivilegedActionException
+                   && ex.getCause() instanceof ClassCastException)
+                 msg = "Service provider class \"{0}\" is not an instance"
+                   + " of \"{1}\". Specified"
+                   + " by \"META-INF/services/{1}\" in {2}.";
+ 
+               log(Level.WARNING, msg,                  
+                   new Object[] { line, spi.getName(), currentURL },
+                   ex);
+               continue;
+             }
+         }
+     }
+ 
+ 
+     private void advanceReader()
+     {
+       do
+         {
+           if (reader != null)
+             {
+               try
+                 {
+                   reader.close();
+                   log(Level.FINE, "closed {0}", currentURL, null);
+                 }
+               catch (Exception ex)
+                 {
+                   log(Level.WARNING, "cannot close {0}", currentURL, ex);
+                 }
+               reader = null;
+               currentURL = null;
+             }
+ 
+         if (!urls.hasMoreElements())
+           return;
+ 
+         currentURL = (URL) urls.nextElement();
+         try
+           {
+             reader = new BufferedReader(new InputStreamReader(
+               currentURL.openStream(), "UTF-8"));
+             log(Level.FINE, "opened {0}", currentURL, null);
+           }
+         catch (Exception ex)
+           {
+             log(Level.WARNING, "cannot open {0}", currentURL, ex);
+           }
+         }
+       while (reader == null);
+     }
+   }
+ 
+ 
+   // Package-private to avoid a trampoline.
+   /**
+    * Passes a log message to the <code>java.util.logging</code>
+    * framework. This call returns very quickly if no log message will
+    * be produced, so there is not much overhead in the standard case.
+    *
+    * @param the severity of the message, for instance {@link
+    * Level#WARNING}.
+    *
+    * @param msg the log message, for instance <code>&#x201c;Could not
+    * load {0}.&#x201d;</code>
+    *
+    * @param param the parameter(s) for the log message, or
+    * <code>null</code> if <code>msg</code> does not specify any
+    * parameters. If <code>param</code> is not an array, an array with
+    * <code>param</code> as its single element gets passed to the
+    * logging framework.
+    *
+    * @param t a Throwable that is associated with the log record, or
+    * <code>null</code> if the log message is not associated with a
+    * Throwable.
+    */
+   static void log(Level level, String msg, Object param, Throwable t)
+   {
+     LogRecord rec;
+ 
+     // Return quickly if no log message will be produced.
+     if (!LOGGER.isLoggable(level))
+       return;
+ 
+     rec = new LogRecord(level, msg);
+     if (param != null && param.getClass().isArray())
+       rec.setParameters((Object[]) param);
+     else
+       rec.setParameters(new Object[] { param });
+ 
+     rec.setThrown(t);
+ 
+     // While java.util.logging can sometimes infer the class and
+     // method of the caller, this automatic inference is not reliable
+     // on highly optimizing VMs. Also, log messages make more sense to
+     // developers when they display a public method in a public class;
+     // otherwise, they might feel tempted to figure out the internals
+     // of ServiceFactory in order to understand the problem.
+     rec.setSourceClassName(ServiceFactory.class.getName());
+     rec.setSourceMethodName("lookupProviders");
+ 
+     LOGGER.log(rec);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/ServiceProviderLoadingAction.java gcc-4.1.0/libjava/classpath/gnu/classpath/ServiceProviderLoadingAction.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/ServiceProviderLoadingAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/ServiceProviderLoadingAction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,149 ----
+ /* ServiceProviderLoadingAction.java -- Action for loading plug-in services.
+    Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath;
+ 
+ import java.security.PrivilegedExceptionAction;
+ 
+ /**
+  * A privileged action for creating a new instance of a service
+  * provider.
+  *
+  * <p>Class loading and instantiation is encapsulated in a
+  * <code>PriviledgedAction</code> in order to restrict the loaded
+  * service providers to the {@link java.security.AccessControlContext}
+  * that was active when {@link
+  * gnu.classpath.ServiceFactory#lookupProviders} was called, even
+  * though the actual loading is delayed to the time when the provider
+  * is actually needed.
+  *
+  * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
+  */
+ final class ServiceProviderLoadingAction
+   implements PrivilegedExceptionAction
+ {
+   /**
+    * The interface to which the loaded service provider implementation
+    * must conform.  Usually, this is a Java interface type, but it
+    * might also be an abstract class or even a concrete class.
+    */
+   private final Class spi;
+ 
+ 
+   /**
+    * The fully qualified name of the class that gets loaded when
+    * this action is executed.
+    */
+   private final String providerName;
+ 
+ 
+   /**
+    * The ClassLoader that gets used for loading the service provider
+    * class.
+    */
+   private final ClassLoader loader;
+ 
+ 
+   /**
+    * Constructs a privileged action for loading a service provider.
+    *
+    * @param spi the interface to which the loaded service provider
+    * implementation must conform. Usually, this is a Java interface
+    * type, but it might also be an abstract class or even a concrete
+    * superclass.
+    *
+    * @param providerName the fully qualified name of the class that
+    * gets loaded when this action is executed.
+    *
+    * @param loader the ClassLoader that gets used for loading the
+    * service provider class.
+    *
+    * @throws IllegalArgumentException if <code>spi</code>,
+    * <code>providerName</code> or <code>loader</code> is
+    * <code>null</code>.
+    */
+   ServiceProviderLoadingAction(Class spi, String providerName,
+                                ClassLoader loader)
+   {
+     if (spi == null || providerName == null || loader == null)
+       throw new IllegalArgumentException();
+ 
+     this.spi = spi;
+     this.providerName = providerName;
+     this.loader = loader;
+   }
+ 
+   
+   /**
+    * Loads an implementation class for a service provider, and creates
+    * a new instance of the loaded class by invoking its public
+    * no-argument constructor.
+    *
+    * @return a new instance of the class whose name was passed as
+    * <code>providerName</code> to the constructor.
+    *
+    * @throws ClassCastException if the service provider does not
+    * implement the <code>spi</code> interface that was passed to the
+    * constructor.
+    *
+    * @throws IllegalAccessException if the service provider class or
+    * its no-argument constructor are not <code>public</code>.
+    *
+    * @throws InstantiationException if the service provider class is
+    * <code>abstract</code>, an interface, a primitive type, an array
+    * class, or void; or if service provider class does not have a
+    * no-argument constructor; or if there some other problem with
+    * creating a new instance of the service provider.
+    */
+   public Object run()
+     throws Exception
+   {
+     Class loadedClass;
+     Object serviceProvider;
+ 
+     loadedClass = loader.loadClass(providerName);
+     serviceProvider = loadedClass.newInstance();
+ 
+     // Ensure that the loaded provider is actually implementing
+     // the service provider interface.
+     if (!spi.isInstance(serviceProvider))
+       throw new ClassCastException(spi.getName());
+ 
+     return serviceProvider;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/SystemProperties.java gcc-4.1.0/libjava/classpath/gnu/classpath/SystemProperties.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/SystemProperties.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/SystemProperties.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,152 ----
+ /* SystemProperties.java -- Manage the System properties.
+    Copyright (C) 2004, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath;
+ 
+ import java.util.Properties;
+ 
+ /**
+  * The class manages the System properties. This class is only available to
+  * privileged code (i.e. code loaded by the bootstrap class loader) and
+  * therefore doesn't do any security checks.
+  * This class is separated out from java.lang.System to simplify bootstrap
+  * dependencies and to allow trusted code a simple and efficient mechanism
+  * to access the system properties.
+  */
+ public class SystemProperties
+ {
+   /**
+    * Stores the current system properties. This can be modified by
+    * {@link #setProperties(Properties)}, but will never be null, because
+    * setProperties(null) sucks in the default properties.
+    */
+   private static Properties properties;
+ 
+   /**
+    * The default properties. Once the default is stabilized,
+    * it should not be modified;
+    * instead it is cloned when calling <code>setProperties(null)</code>.
+    */
+   private static final Properties defaultProperties = new Properties();
+ 
+   static
+   {
+     VMSystemProperties.preInit(defaultProperties);
+ 
+     defaultProperties.put("gnu.classpath.home", Configuration.CLASSPATH_HOME);
+     defaultProperties.put("gnu.classpath.version",
+                           Configuration.CLASSPATH_VERSION);
+ 
+     // Set base URL if not already set.
+     if (defaultProperties.get("gnu.classpath.home.url") == null)
+       defaultProperties.put("gnu.classpath.home.url",
+ 			    "file://"
+ 			    + Configuration.CLASSPATH_HOME
+ 	                    + "/lib");
+ 
+     // Set short name if not already set.
+     if (defaultProperties.get("gnu.classpath.vm.shortname") == null)
+       {
+ 	String value = defaultProperties.getProperty("java.vm.name");
+ 	int index = value.lastIndexOf(' ');
+ 	if (index != -1)
+ 	  value = value.substring(index + 1);
+ 	defaultProperties.put("gnu.classpath.vm.shortname", value);
+       }
+ 
+     // Network properties
+     if (defaultProperties.get("http.agent") == null)
+       {
+ 	String userAgent = ("gnu-classpath/"
+ 	                    + defaultProperties.getProperty("gnu.classpath.version")
+ 	                    + " ("
+ 	                    + defaultProperties.getProperty("gnu.classpath.vm.shortname")
+ 	                    + "/"
+ 	                    + defaultProperties.getProperty("java.vm.version")
+ 	                    + ")");
+ 	 defaultProperties.put("http.agent", userAgent);
+       }
+ 
+     // 8859_1 is a safe default encoding to use when not explicitly set
+     if (defaultProperties.get("file.encoding") == null)
+       defaultProperties.put("file.encoding", "8859_1");
+ 
+     // XXX FIXME - Temp hack for old systems that set the wrong property
+     if (defaultProperties.get("java.io.tmpdir") == null)
+       defaultProperties.put("java.io.tmpdir",
+                             defaultProperties.get("java.tmpdir"));
+ 
+     VMSystemProperties.postInit(defaultProperties);
+ 
+     // Note that we use clone here and not new.  Some programs assume
+     // that the system properties do not have a parent.
+     properties = (Properties) defaultProperties.clone();
+   }
+ 
+   public static String getProperty(String name)
+   {
+     return properties.getProperty(name);
+   }
+ 
+   public static String getProperty(String name, String defaultValue)
+   {
+     return properties.getProperty(name, defaultValue);
+   }
+ 
+   public static String setProperty(String name, String value)
+   {
+     return (String) properties.setProperty(name, value);
+   }
+ 
+   public static Properties getProperties()
+   {
+     return properties;
+   }
+ 
+   public static void setProperties(Properties properties)
+   {
+     if (properties == null)
+       {
+         // Note that we use clone here and not new.  Some programs
+         // assume that the system properties do not have a parent.
+         properties = (Properties)defaultProperties.clone();
+       }
+ 
+     SystemProperties.properties = properties;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/debug/Component.java gcc-4.1.0/libjava/classpath/gnu/classpath/debug/Component.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/debug/Component.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/debug/Component.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,165 ----
+ /* Component.java -- a component log level.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is a part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under terms
+ of your choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.  An
+ independent module is a module which is not derived from or based on
+ this library.  If you modify this library, you may extend this exception
+ to your version of the library, but you are not obligated to do so.  If
+ you do not wish to do so, delete this exception statement from your
+ version.  */
+ 
+ 
+ package gnu.classpath.debug;
+ 
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Modifier;
+ import java.util.logging.Level;
+ 
+ public final class Component extends Level
+ {
+ 
+   /*
+    * HOW TO ADD NEW COMPONENTS:
+    *
+    * If you want to add a new, simple component, that you will use in
+    * logging statements, simply create a new class variable that
+    * instantiates this class, and choose an appropriate string name
+    * and a integer constant not used by any other component level.
+    *
+    * For example, if my component had to do with 'frobbing', I would
+    * add this entry below:
+    *
+    *   private static final Component FROBBING = new Component ("FROBBING", 7);
+    *
+    * Then, I would update the component 'EVERYTHING' to have and end
+    * index ONE GREATER THAN the index of the new component.
+    *
+    * ADDING NEW COMPONENT CLASSES:
+    *
+    * A "component class" is a run of more than one component, which can
+    * be enabled all at once. EVERYTHING and SSL are examples of component
+    * classes. To add a new class, create a new component with a start index
+    * equal to the index of the first member component, and with an end
+    * index equal to the index of the last member component plus one.
+    */
+ 
+   /**
+    * Signifies that everything should be logged. This should be used to
+    * enable or disable levels only; logging code should not use it.
+    */
+   public static final Component EVERYTHING = new Component ("*", 0, 7);
+ 
+   /**
+    * Signifies that all SSL related messages should be logged. This should
+    * be used to enable or disable levels only; logging code should not use
+    * it.
+    */
+   public static final Component SSL = new Component ("SSL", 0, 5);
+ 
+   /**
+    * Traces the progression of an SSL handshake.
+    */
+   public static final Component SSL_HANDSHAKE = new Component ("SSL HANDSHAKE", 0);
+ 
+   /**
+    * Traces the application messages during SSL communications.
+    */
+   public static final Component SSL_APPLICATION = new Component ("SSL APPLICATION", 1);
+ 
+   /**
+    * Trace details about the SSL key exchange.
+    */
+   public static final Component SSL_KEY_EXCHANGE = new Component ("SSL KEY EXCHANGE", 2);
+ 
+   /* Indices 3 and 4 reserved for future use by SSL components. */
+ 
+   /**
+    * Trace the operation of cryptographic primitives.
+    */
+   public static final Component CRYPTO = new Component ("CRYPTO", 5);
+ 
+   /**
+    * Trace the parsing of X.509 certificates and related objects.
+    */
+   public static final Component X509 = new Component ("X.509", 6);
+ 
+   /**
+    * Trace access control policies, including the parsing of
+    * java.policy files.
+    */
+   public static final Component POLICY = new Component ("POLICY", 7);
+ 
+   private final int startIndex;
+   private final int endIndex;
+ 
+   private Component (final String name, final int bitIndex)
+   {
+     this (name, bitIndex, bitIndex + 1);
+   }
+ 
+   private Component (final String name, final int startIndex, final int endIndex)
+   {
+     super (name, Level.FINE.intValue ());
+     this.startIndex = startIndex;
+     this.endIndex = endIndex;
+   }
+ 
+   /**
+    * Return the component for the given name.
+    *
+    * @param name The name of the component to get.
+    * @return The named component, or null if there is no such component.
+    */
+   public static Component forName (final String name)
+   {
+     try
+       {
+ 	Field f = Component.class.getField (name.toUpperCase ());
+ 	if (!Modifier.isStatic (f.getModifiers ())
+ 	    || Component.class.isAssignableFrom (f.getClass ()))
+ 	  return null;
+ 	return (Component) f.get (null);
+       }
+     catch (Throwable _)
+       {
+ 	return null;
+       }
+   }
+ 
+   public int startIndex ()
+   {
+     return startIndex;
+   }
+ 
+   public int endIndex ()
+   {
+     return endIndex;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/debug/PreciseFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/debug/PreciseFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/debug/PreciseFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/debug/PreciseFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,105 ----
+ /* PreciseFilter.java -- filter log messages by precise level.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is a part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under terms
+ of your choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.  An
+ independent module is a module which is not derived from or based on
+ this library.  If you modify this library, you may extend this exception
+ to your version of the library, but you are not obligated to do so.  If
+ you do not wish to do so, delete this exception statement from your
+ version.  */
+ 
+ 
+ package gnu.classpath.debug;
+ 
+ import java.util.BitSet;
+ import java.util.logging.Filter;
+ import java.util.logging.LogRecord;
+ 
+ public final class PreciseFilter implements Filter
+ {
+ 
+   /**
+    * The singleton filter instance.
+    */
+   public static final PreciseFilter GLOBAL = new PreciseFilter ();
+ 
+   private final BitSet enabled;
+ 
+   private PreciseFilter ()
+   {
+     enabled = new BitSet ();
+   }
+ 
+   /**
+    * Disable logging of a component.
+    *
+    * @param component The component to disable logging for.
+    * @throws NullPointerException If component is null.
+    */
+   public void disable (final Component component)
+   {
+     enabled.clear (component.startIndex (), component.endIndex ());
+   }
+ 
+   /**
+    * Enable logging of a component.
+    *
+    * @param component The component to enable logging for.
+    * @throws NullPointerException If component is null.
+    */
+   public void enable (final Component component)
+   {
+     enabled.set (component.startIndex (), component.endIndex ());
+   }
+ 
+   /**
+    * Tell if a component is enabled for logging.
+    *
+    * @param component The component to test.
+    * @return True iff the specified component is enabled for logging.
+    * @throws NullPointerException If component is null.
+    */
+   public boolean isEnabled (final Component component)
+   {
+     return (enabled.get (component.startIndex ()));
+   }
+ 
+   public boolean isLoggable (final LogRecord record)
+   {
+     try
+       {
+ 	return isEnabled ((Component) record.getLevel ());
+       }
+     catch (ClassCastException cce)
+       {
+ 	return true;
+       }
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/debug/SystemLogger.java gcc-4.1.0/libjava/classpath/gnu/classpath/debug/SystemLogger.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/debug/SystemLogger.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/debug/SystemLogger.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* SystemLogger.java -- Classpath's system debugging logger.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is a part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under terms
+ of your choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.  An
+ independent module is a module which is not derived from or based on
+ this library.  If you modify this library, you may extend this exception
+ to your version of the library, but you are not obligated to do so.  If
+ you do not wish to do so, delete this exception statement from your
+ version.  */
+ 
+ 
+ package gnu.classpath.debug;
+ 
+ import gnu.classpath.SystemProperties;
+ import java.util.StringTokenizer;
+ import java.util.logging.Logger;
+ 
+ public final class SystemLogger
+ {
+   public static final Logger SYSTEM = Logger.getLogger ("gnu.classpath");
+ 
+   static
+   {
+     SYSTEM.setFilter (PreciseFilter.GLOBAL);
+ 
+     String defaults = SystemProperties.getProperty ("gnu.classpath.debug.components");
+ 
+     if (defaults != null)
+       {
+         StringTokenizer tok = new StringTokenizer (defaults, ",");
+         while (tok.hasMoreTokens ())
+           {
+             Component c = Component.forName (tok.nextToken ());
+             if (c != null)
+               PreciseFilter.GLOBAL.enable (c);
+             SYSTEM.log (java.util.logging.Level.INFO, "enabled: {0}", c);
+           }
+       }
+ 
+     java.util.logging.Handler[] h = SYSTEM.getHandlers ();
+     for (int i = 0; i < h.length; i++)
+         System.out.println (h[i]);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/Jdwp.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/Jdwp.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/Jdwp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/Jdwp.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,302 ----
+ /* Jdwp.java -- Virtual machine to JDWP back-end programming interface
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.event.EventManager;
+ import gnu.classpath.jdwp.event.EventRequest;
+ import gnu.classpath.jdwp.id.ThreadId;
+ import gnu.classpath.jdwp.processor.PacketProcessor;
+ import gnu.classpath.jdwp.transport.ITransport;
+ import gnu.classpath.jdwp.transport.JdwpConnection;
+ import gnu.classpath.jdwp.transport.TransportException;
+ import gnu.classpath.jdwp.transport.TransportFactory;
+ 
+ import java.io.IOException;
+ import java.security.AccessController;
+ import java.util.HashMap;
+ 
+ /**
+  * Main interface from the virtual machine to the JDWP back-end.
+  *
+  * @author Keith Seitz (keiths@redhat.com)
+  */
+ public class Jdwp
+   extends Thread
+ {
+   // The single instance of the back-end
+   private static Jdwp _instance = null;
+ 
+   /**
+    * Are we debugging?
+    */
+   public static boolean isDebugging = false;
+ 
+   // Packet processor
+   private PacketProcessor _packetProcessor;
+   private Thread _ppThread;
+ 
+   // JDWP configuration properties
+   private HashMap _properties;
+ 
+   // The suspend property of the configure string
+   // (-Xrunjdwp:..suspend=<boolean>)
+   private static final String _PROPERTY_SUSPEND = "suspend";
+ 
+   // User's main application thread
+   private Thread _mainThread;
+ 
+   // Connection to debugger
+   private JdwpConnection _connection;
+ 
+   // Are we shutting down the current session?
+   private boolean _shutdown;
+ 
+   // A thread group for the JDWP threads
+   private ThreadGroup _group;
+ 
+   /**
+    * constructor
+    */
+   public Jdwp ()
+   {
+     _shutdown = false;
+     isDebugging = true;
+     _instance = this;
+   }
+ 
+   /**
+    * Returns the JDWP back-end, creating an instance of it
+    * if one does not already exist.
+    */
+   public static Jdwp getDefault ()
+   {
+     return _instance;
+   }
+ 
+   /**
+    * Should the virtual machine suspend on startup?
+    */
+   public static boolean suspendOnStartup ()
+   {
+     Jdwp jdwp = getDefault ();
+     if (jdwp != null)
+       {
+ 	String suspend = (String) jdwp._properties.get (_PROPERTY_SUSPEND);
+ 	if (suspend != null && suspend.equals ("y"))
+ 	  return true;
+       }
+ 
+     return false;
+   }
+ 
+   /**
+    * Configures the back-end
+    *
+    * @param configArgs  a string of configury options
+    * @param mainThread  the main application thread
+    */
+   public void configure (String configArgs, Thread mainThread)
+   {
+     _mainThread = mainThread;
+     _processConfigury (configArgs);
+   }
+ 
+   // A helper function to initialize the transport layer
+   private void _doInitialization ()
+     throws TransportException
+   {
+     _group = new ThreadGroup ("JDWP threads");
+     // initialize transport
+     ITransport transport = TransportFactory.newInstance (_properties);
+     _connection = new JdwpConnection (_group, transport);
+     _connection.initialize ();
+     _connection.start ();
+ 
+     // Create processor
+     _packetProcessor = new PacketProcessor (_connection);
+     _ppThread = new Thread (_group, new Runnable ()
+       {
+ 	public void run ()
+ 	{
+ 	  AccessController.doPrivileged (_packetProcessor);
+ 	}
+       });
+     _ppThread.start ();
+   }
+ 
+   /**
+    * Shutdown the JDWP back-end
+    *
+    * NOTE: This does not quite work properly. See notes in 
+    * run() on this subject (catch of InterruptedException).
+    */
+   public void shutdown ()
+   {
+     if (!_shutdown)
+       {
+ 	_packetProcessor.shutdown ();
+ 	_ppThread.interrupt ();
+ 	_connection.shutdown ();
+ 	_shutdown = true;
+ 	isDebugging = false;
+ 
+ 	/* FIXME: probably need to check state of user's
+ 	   program -- if it is suspended, we need to either
+ 	   resume or kill them. */
+ 
+ 	interrupt ();
+       }
+   }
+ 
+   /**
+    * Notify the debugger of an event. This method should not
+    * be called if debugging is not active (but it would not
+    * cause any harm). Places where event notifications occur
+    * should check isDebugging before doing anything.
+    *
+    * The event is filtered through the event manager before being
+    * sent.
+    *
+    * FIXME: Probably need logic to send multiple events
+    * @param event the event to report
+    */
+   public static void notify (Event event)
+   {
+     Jdwp jdwp = getDefault ();
+     if (jdwp != null)
+       {
+ 	EventManager em = EventManager.getDefault ();
+ 	EventRequest request = em.getEventRequest (event);
+ 	if (request != null)
+ 	  sendEvent (request, event);
+       }
+   }
+   
+   /**
+    * Sends the event to the debugger.
+    *
+    * This method bypasses the event manager's filtering.
+    *
+    * @param  request  the debugger request for the event
+    * @param  event    the event to send
+    */
+   public static void sendEvent (EventRequest request, Event event)
+   {
+     Jdwp jdwp = getDefault ();
+     if (jdwp != null)
+       {
+ 	try
+ 	  {
+ 	    // !! May need to implement send queue?
+ 	    synchronized (jdwp._connection)
+ 	      {
+ 		jdwp._connection.sendEvent (request, event);
+ 	      }
+ 	    
+ 	    // Follow suspend policy
+ 	    jdwp._enforceSuspendPolicy (request.getSuspendPolicy ());
+ 	  }
+ 	catch (IOException ie)
+ 	  {
+ 	    System.out.println ("Jdwp.notify: caught exception: " + ie);
+ 	  }
+       }
+   }
+ 
+   // Helper function to enforce suspend policies on event notification
+   private void _enforceSuspendPolicy (byte suspendPolicy)
+   {
+     switch (suspendPolicy)
+       {
+       case EventRequest.SUSPEND_NONE:
+ 	// do nothing
+ 	break;
+ 
+       case EventRequest.SUSPEND_THREAD:
+ 	VMVirtualMachine.suspendThread (this);
+ 	break;
+ 
+       case EventRequest.SUSPEND_ALL:
+ 	VMVirtualMachine.suspendAllThreads ();
+ 	break;
+       }
+   }
+ 
+   public void run ()
+   {
+     try
+       {
+ 	_doInitialization ();
+ 
+ 	_mainThread.start ();
+ 
+ 	_mainThread.join ();
+       }
+     catch (InterruptedException ie)
+       {
+ 	/* Shutting down. If we're in server mode, we should
+ 	   prepare for a new connection. Otherwise, we should
+ 	   simply exit. */
+ 	// FIXME
+       }
+     catch (Throwable t)
+       {
+ 	System.out.println ("Exception in JDWP back-end: " + t);
+ 	System.exit (1);
+       }
+   }
+ 
+   // A helper function to process the configure string "-Xrunjdwp:..."
+   private void _processConfigury (String configString)
+   {
+     // Loop through configuration arguments looking for a
+     // transport name
+     _properties = new HashMap ();
+     String[] options = configString.split (",");
+     for (int i = 0; i < options.length; ++i)
+       {
+ 	String[] property = options[i].split ("=");
+ 	if (property.length == 2)
+ 	  _properties.put (property[0], property[1]);
+ 	// ignore malformed options
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/JdwpConstants.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/JdwpConstants.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/JdwpConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/JdwpConstants.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,901 ----
+ /* JdwpConstants.java -- Constants defined by JDWP 1.4 specification
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp;
+ 
+ /**
+  * Constants defined by JDWP specification.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class JdwpConstants
+ {
+   public static final class Version
+   {
+     public static final int MAJOR = 1;
+     public static final int MINOR = 4;
+   }
+   
+   ////////////////////////////////////////
+   //           Commands/Sets            //
+   ////////////////////////////////////////
+ 
+   public static final class CommandSet
+   {
+     public static final class VirtualMachine
+     {
+       public static final byte CS_VALUE = 1;
+ 
+       // commands
+       public static final byte VERSION = 1;
+       public static final byte CLASSES_BY_SIGNATURE = 2;
+       public static final byte ALL_CLASSES = 3;
+       public static final byte ALL_THREADS = 4;
+       public static final byte TOP_LEVEL_THREAD_GROUPS = 5;
+       public static final byte DISPOSE = 6;
+       public static final byte IDSIZES = 7;
+       public static final byte SUSPEND = 8;
+       public static final byte RESUME = 9;
+       public static final byte EXIT = 10;
+       public static final byte CREATE_STRING = 11;
+       public static final byte CAPABILITIES = 12;
+       public static final byte CLASS_PATHS = 13;
+       public static final byte DISPOSE_OBJECTS = 14;
+       public static final byte HOLD_EVENTS = 15; 
+       public static final byte RELEASE_EVENTS = 16;
+       public static final byte CAPABILITIES_NEW = 17;
+       public static final byte REDEFINE_CLASSES = 18;
+       public static final byte SET_DEFAULT_STRATUM = 19;
+       public static final byte ALL_CLASSES_WITH_GENERIC = 20;
+     }
+ 
+     public static final class ReferenceType
+     {
+       public static final byte CS_VALUE = 2;
+ 
+       // commands
+       public static final byte SIGNATURE= 1;
+       public static final byte CLASS_LOADER= 2;
+       public static final byte MODIFIERS = 3;
+       public static final byte FIELDS = 4;
+       public static final byte METHODS = 5; 
+       public static final byte GET_VALUES = 6;
+       public static final byte SOURCE_FILE = 7;
+       public static final byte NESTED_TYPES = 8;
+       public static final byte STATUS = 9;
+       public static final byte INTERFACES= 10;
+       public static final byte CLASS_OBJECT = 11;
+       public static final byte SOURCE_DEBUG_EXTENSION = 12;
+       public static final byte SIGNATURE_WITH_GENERIC = 13;
+       public static final byte FIELDS_WITH_GENERIC = 14;
+       public static final byte METHODS_WITH_GENERIC = 15;
+     }
+ 
+     public static final class ClassType
+     {
+       public static final byte CS_VALUE = 3;
+ 
+       // commands
+       public static final byte SUPERCLASS = 1;
+       public static final byte SET_VALUES = 2;
+       public static final byte INVOKE_METHOD = 3;
+       public static final byte NEW_INSTANCE = 4;
+     }
+ 
+     public static final class ArrayType
+     {
+       public static final byte CS_VALUE = 4;
+ 
+       // commands
+       public static final byte NEW_INSTANCE = 1;
+     }
+ 
+     public static final class InterfaceType
+     {
+       public static final byte CS_VALUE = 5;
+ 
+       // commands
+     }
+ 
+     public static final class Method
+     {
+       public static final byte CS_VALUE = 6;
+ 
+       // commands
+       public static final byte LINE_TABLE = 1;
+       public static final byte VARIABLE_TABLE = 2;
+       public static final byte BYTE_CODES = 3;
+       public static final byte IS_OBSOLETE = 4;
+       public static final byte VARIABLE_TABLE_WITH_GENERIC = 5;
+     }
+ 
+     public static final class Field
+     {
+       public static final byte CS_VALUE = 8;
+ 
+       // commands
+     }
+ 
+     public static final class ObjectReference
+     {
+       public static final byte CS_VALUE = 9;
+ 
+       // commands
+       public static final byte REFERENCE_TYPE = 1;
+       public static final byte GET_VALUES = 2;
+       public static final byte SET_VALUES = 3;
+       public static final byte MONITOR_INFO = 5;
+       public static final byte INVOKE_METHOD = 6;
+       public static final byte DISABLE_COLLECTION = 7;
+       public static final byte ENABLE_COLLECTION = 8;
+       public static final byte IS_COLLECTED = 9;
+     }
+ 
+     public static final class StringReference
+     {
+       public static final byte CS_VALUE = 10;
+ 
+       // commands
+       public static final byte VALUE = 1;
+     }
+ 
+     public static final class ThreadReference
+     {
+       public static final byte CS_VALUE = 11;
+ 
+       // commands
+       public static final byte NAME = 1;
+       public static final byte SUSPEND = 2;
+       public static final byte RESUME = 3;
+       public static final byte STATUS = 4;
+       public static final byte THREAD_GROUP = 5;
+       public static final byte FRAMES = 6;
+       public static final byte FRAME_COUNT = 7;
+       public static final byte OWNED_MONITORS = 8;
+       public static final byte CURRENT_CONTENDED_MONITOR = 9;
+       public static final byte STOP = 10;
+       public static final byte INTERRUPT = 11;
+       public static final byte SUSPEND_COUNT = 12;
+     }
+ 
+     public static final class ThreadGroupReference
+     {
+       public static final byte CS_VALUE = 12;
+ 
+       // commands
+       public static final byte NAME = 1;
+       public static final byte PARENT = 2;
+       public static final byte CHILDREN = 3;
+     }
+ 
+     public static final class ArrayReference
+     {
+       public static final byte CS_VALUE = 13;
+ 
+       // commands
+       public static final byte LENGTH = 1;
+       public static final byte GET_VALUES = 2;
+       public static final byte SET_VALUES = 3;
+     }
+ 
+     public static final class ClassLoaderReference
+     {
+       public static final byte CS_VALUE = 14;
+ 
+       // commands
+       public static final byte VISIBLE_CLASSES = 1;
+     }
+ 
+     public static final class EventRequest
+     {
+       public static final byte CS_VALUE = 15;
+ 
+       // commands
+       public static final byte SET = 1;
+       public static final byte CLEAR = 2;
+       public static final byte CLEAR_ALL_BREAKPOINTS = 3;
+     }
+ 
+     public static final class StackFrame
+     {
+       public static final byte CS_VALUE = 16;
+ 
+       // commands
+       public static final byte GET_VALUES = 1;
+       public static final byte SET_VALUES = 2;
+       public static final byte THIS_OBJECT = 3;
+       public static final byte POP_FRAMES = 4;
+     }
+ 
+     public static final class ClassObjectReference
+     {
+       public static final byte CS_VALUE = 17;
+ 
+       // commands
+       public static final byte REFLECTED_TYPE = 1;
+     }
+ 
+     public static final int MAXIMUM = ClassObjectReference.CS_VALUE;
+ 
+     public static final class Event
+     {
+       public static final byte CS_VALUE = 64;
+ 
+       // commands
+       public static final byte COMPOSITE = 100;
+     }
+   }
+ 
+   ////////////////////////////////////////
+   //             Constants              //
+   ////////////////////////////////////////
+ 
+   /*
+    * Error constants
+    */
+   public static final class Error
+   {
+     /**
+      * No error has occurred
+      */
+     public static final short NONE = 0;
+ 
+     /**
+      * Passed thread is null, is not a valid thread or has exited
+      */
+     public static final short INVALID_THREAD = 10;
+ 
+     /**
+      * Thread group invalid
+      */
+     public static final short INVALID_THREAD_GROUP = 11;
+ 
+     /**
+      * Invalid priority
+      */
+     public static final short INVALID_PRIORITY = 12;
+ 
+     /**
+      * Specified thread has not been suspended by an event
+      */
+     public static final short THREAD_NOT_SUSPENDED = 13;
+ 
+     /**
+      * Thread already suspended
+      */
+     public static final short THREAD_SUSPENDED = 14;
+ 
+     /**
+      * Reference type has been unloaded and garbage collected
+      */
+     public static final short INVALID_OBJECT = 20;
+ 
+     /**
+      * Invalid class
+      */
+     public static final short INVALID_CLASS = 21;
+ 
+     /**
+      * Class has been loaded but not yet prepared
+      */
+     public static final short CLASS_NOT_PREPARED = 22;
+ 
+     /**
+      * Invalid method
+      */
+     public static final short INVALID_METHODID = 23;
+ 
+     /**
+      * Invalid location
+      */
+     public static final short INVALID_LOCATION = 24;
+ 
+     /**
+      * Invalid field
+      */
+     public static final short INVALID_FIELDID = 25;
+ 
+     /**
+      * Invaliid frame
+      */
+     public static final short INVALID_FRAMEID = 30;
+ 
+     /**
+      * There are no more Java or JNI frames on the call stack
+      */
+     public static final short NO_MORE_FRAMES = 31;
+ 
+     /**
+      * Information about the frame is not available
+      */
+     public static final short OPAQUE_FRAME = 32;
+ 
+     /**
+      * Operation can only be performed on current frame
+      */
+     public static final short NOT_CURRENT_FRAME = 33;
+ 
+     /**
+      * Variable is not an appropriate type for the function used
+      */
+     public static final short TYPE_MISMATCH = 34;
+ 
+     /**
+      * Invalid slot
+      */
+     public static final short INVALID_SLOT = 35;
+ 
+     /**
+      * Item already set
+      */
+     public static final short DUPLICATE = 40;
+ 
+     /**
+      * Desired element not found
+      */
+     public static final short NOT_FOUND = 41;
+ 
+     /**
+      * Invalid monitor
+      */
+     public static final short INVALID_MONITOR = 50;
+ 
+     /**
+      * Thread doesn't own the monitor
+      */
+     public static final short NOT_MONITOR_OWNER = 51;
+ 
+     /**
+      * Call has been interrupted before completion
+      */
+     public static final short INTERRUPT = 52;
+ 
+     /**
+      * Virtual machine attempted to read a class file and determined that
+      * the file is malformed or otherwise cannot be interpreted as a class
+      * file
+      */
+     public static final short INVALID_CLASS_FORMAT = 60;
+ 
+     /**
+      * Circularity has been detected while initializing a class
+      */
+     public static final short CIRCULAR_CLASS_DEFINITION = 61;
+ 
+     /**
+      * Verifier detected that a class file, though well formed, contained
+      * some sort of internal inconsistency or security problem
+      */
+     public static final short FAILS_VERIFICATION = 62;
+ 
+     /**
+      * Adding methods has not been implemented
+      */
+     public static final short ADD_METHOD_NOT_IMPLEMENTED = 63;
+ 
+     /**
+      * Schema change has not been implemented
+      */
+     public static final short SCHEMA_CHANGE_NOT_IMPLEMENTED = 64;
+ 
+     /**
+      * State of the thread has been modified and is now inconsistent
+      */
+     public static final short INVALID_TYPESTATE = 65;
+ 
+     /**
+      * A direct superclass is different for the new class version, or the set
+      * of directly implemented interfaces is different and
+      * <code>canUnrestrictedlyRedefineClasses</code> is false
+      */
+     public static final short HIERARCHY_CHANGE_NOT_IMPLEMENTED = 66;
+ 
+     /**
+      * New class version does not declare a method declared in the old
+      * class version and <code>canUnrestrictedlyRedefineClasses</code>
+      * is false
+      */
+     public static final short DELETE_METHOD_NOT_IMPLEMENTED = 67;
+ 
+     /**
+      * Class file has a version number not supported by this VM
+      */
+     public static final short UNSUPPORTED_VERSION = 68;
+ 
+     /**
+      * Class name defined in the new class file is different from the name
+      * in the old class object
+      */
+     public static final short NAMES_DONT_MATCH = 69;
+ 
+     /**
+      * New class version has different modifiers and
+      * <code>canUnrestrictedlyRedefineClasses</code> is false
+      */
+     public static final short CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED = 70;
+ 
+     /**
+      * A method in the new class version has different modifiers than its
+      * counterpart in the old class version and
+      * <code>canUnrestrictedlyRedefineClasses</code> is false.
+      */
+     public static final short METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED = 71;
+ 
+     /**
+      * Functionality is not implemented in this virtual machine
+      */
+     public static final short NOT_IMPLEMENTED = 99;
+ 
+     /**
+      * Invalid pointer
+      */
+     public static final short NULL_POINTER = 100;
+ 
+     /**
+      * Desired information is not available
+      */
+     public static final short ABSENT_INFORMATION = 101;
+ 
+     /**
+      * Specified event type id is not recognized
+      */
+     public static final short INVALID_EVENT_TYPE = 102;
+ 
+     /**
+      * Illegal argument
+      */
+     public static final short ILLEGAL_ARGUMENT = 103;
+ 
+     /**
+      * The function needed to allocate memory and no more memory was
+      * available for allocation
+      */
+     public static final short OUT_OF_MEMORY = 110;
+ 
+     /**
+      * Debugging has not been enabled in this virtual machine. JVMDI cannot
+      * be used
+      */
+     public static final short ACCESS_DENIED = 111;
+ 
+     /**
+      * The virtual machine is not running
+      */
+     public static final short VM_DEAD = 112;
+ 
+     /**
+      * An unexpected internal error has occurred
+      */
+     public static final short INTERNAL = 113;
+ 
+     /**
+      * The thread being used to call this function is not attached to the
+      * virtual machine. Calls must be made from attached threads.
+      */
+     public static final short UNATTACHED_THREAD = 115;
+ 
+     /**
+      * Invalid object type id or class tag
+      */
+     public static final short INVALID_TAG = 500;
+ 
+     /**
+      * Previous invoke not complete
+      */
+     public static final short ALREADY_INVOKING = 502;
+ 
+     /**
+      * Invalid index
+      */
+     public static final short INVALID_INDEX = 503;
+ 
+     /**
+      * Invalid length
+      */
+     public static final short INVALID_LENGTH = 504;
+ 
+     /**
+      * Invalid string
+      */
+     public static final short INVALID_STRING = 506;
+ 
+     /**
+      * Invalid class loader
+      */
+     public static final short INVALID_CLASS_LOADER = 507;
+ 
+     /**
+      * Invalid array
+      */
+     public static final short INVALID_ARRAY = 508;
+ 
+     /**
+      * Unable to load the transport
+      */
+     public static final short TRANSPORT_LOAD = 509;
+ 
+     /**
+      * Unablie to initialize the transport
+      */
+     public static final short TRANSPORT_INIT = 510;
+ 
+     /**
+      * Method is native
+      */
+     public static final short NATIVE_METHOD = 511;
+ 
+     /**
+      * Invalid count
+      */
+     public static final short INVALID_COUNT = 512;
+   }
+ 
+   /*
+    * EventKind constants
+    */
+   public static final class EventKind
+   {
+     public static final byte SINGLE_STEP = 1;
+     public static final byte BREAKPOINT = 2;
+     public static final byte FRAME_POP = 3;
+     public static final byte EXCEPTION = 4;
+     public static final byte USER_DEFINED = 5;
+     public static final byte THREAD_START = 6;
+     public static final byte THREAD_END = 7;
+     public static final byte CLASS_PREPARE = 8;
+     public static final byte CLASS_UNLOAD = 9;
+     public static final byte CLASS_LOAD = 10;
+     public static final byte FIELD_ACCESS = 20;
+     public static final byte FIELD_MODIFICATION = 21;
+     public static final byte EXCEPTION_CATCH = 30;
+     public static final byte METHOD_ENTRY = 40;
+     public static final byte METHOD_EXIT = 41;
+     public static final byte VM_INIT = 90;
+     public static final byte VM_DEATH = 99;    
+     public static final byte VM_DISCONNECTED = 100;
+ 
+     public static final byte VM_START = VM_INIT;
+     public static final byte THREAD_DEATH = THREAD_END;
+   }
+ 
+   /*
+    * ModKind constants (event filters)
+    */
+   public static final class ModKind
+   {
+     /**
+      * Limit the requested event to be reported at most once after a
+      * given number of occurrences. May be used with any event.
+      */
+     public static final byte COUNT = 1;
+ 
+     /**
+      * Conditional on expression
+      */
+     public static final byte CONDITIONAL = 2;
+ 
+     /**
+      * Restricts reported events to those in the given thread.
+      * May be used with any event except for class unload.
+      */
+     public static final byte THREAD_ONLY = 3;
+ 
+     /**
+      * For class prepare events, restricts generated events 
+      * to be the preparation of the given reference type and any
+      * subtypes.
+      *
+      * For other events, restricts the generated events to those where
+      * location is in the given reference type or any of its subtypes.
+      *
+      * An event will be generated for any location in a reference type
+      * that can be safely cast to the given reference type.
+      *
+      * May be used with any event except class unload, thread start,
+      * and thread end.
+      */
+     public static final byte CLASS_ONLY = 4;
+ 
+     /**
+      * Restricts reported events to those for classes whose name matches
+      * the given restricted regular expression.
+      *
+      * For class prepare events, the prepared class name is matched.
+      * For class unload events, the unloaded class name is matched.
+      * For other events, the class name of the event's location is matched.
+      *
+      * May be used with any event except thread start and thread end.
+      */
+     public static final byte CLASS_MATCH = 5;
+ 
+     /**
+      * Restricts reported events to those for classes whose name does not
+      * match the given restricted regular expression.
+      * 
+      * For class prepare events, the prepared class name is matched.
+      * For class unload events, the unloaded class name is matched.
+      * For other events, the class name of the event's location is matched.
+      *
+      * May be used with any event except thread start and thread end.
+      */
+     public static final byte CLASS_EXCLUDE = 6;
+ 
+     /**
+      * Restricts reported events to those that occur at the given location.
+      *
+      * May be used with breakpoint, field access, field modification, step,
+      * and exception event kinds.
+      */
+     public static final byte LOCATION_ONLY = 7;
+ 
+     /**
+      * Restricts reported exceptions by their class and whether they are
+      * caught or uncaught.
+      *
+      * May be used with exception event kinds only.
+      */
+     public static final byte EXCEPTION_ONLY = 8;
+ 
+     /**
+      * Restricts reported events to those that occur for a given field.
+      *
+      * May be used with field access and field modification event kinds only.
+      */
+     public static final byte FIELD_ONLY = 9;
+ 
+     /**
+      * Restricts reported step events to those which satisfy depth and
+      * size constraints.
+      * 
+      * May be used with step event kinds only.
+      */
+     public static final byte STEP = 10;
+ 
+     /**
+      * Restricts reported events to those whose active 'this' object is
+      * the given object. Match value is the null object for static methods.
+      *
+      * May be used with any event except class prepare, class unload,
+      * thread start, and thread end.
+      */
+     public static final byte INSTANCE_ONLY = 11;
+   }
+ 
+   /*
+    * ThreadStatus constants
+    */
+   public static final class ThreadStatus
+   {
+     public static final int ZOMBIE = 0;
+     public static final int RUNNING = 1;
+     public static final int SLEEPING = 2;
+     public static final int MONITOR = 3;
+     public static final int WAIT = 4;
+   }
+ 
+   /*
+    * SuspendStatus constants
+    */
+   public static final class SuspendStatus
+   {
+     public static final byte SUSPENDED = 1;
+   }
+ 
+   /*
+    * ClassStatus constants
+    */
+   public static final class ClassStatus
+   {
+     public static final int VERIFIED = 1;
+     public static final int PREPARED = 2;
+     public static final int INITIALIZED = 4;
+     public static final int ERROR = 8;
+   }
+ 
+   /*
+    * TypeTag constants
+    */
+   public static final class TypeTag
+   {
+     public static final byte CLASS = 1;
+     public static final byte INTERFACE = 2;
+     public static final byte ARRAY = 3;
+   }
+ 
+   /*
+    * Tag constants
+    */
+   public static final class Tag
+   {
+     /**
+      * Array object (objectID size)
+      */
+     public static final byte ARRAY = '[';
+ 
+     /**
+      * Byte value (1 byte)
+      */
+     public static final byte BYTE = 'B';
+ 
+     /**
+      * Character value (2 bytes)
+      */
+     public static final byte CHAR = 'C';
+ 
+     /**
+      * Object (objectID size)
+      */
+     public static final byte OBJECT = 'L';
+ 
+     /**
+      * Float value (4 bytes)
+      */
+     public static final byte FLOAT = 'F';
+ 
+     /**
+      * Double value (8 bytes)
+      */
+     public static final byte DOUBLE = 'D';
+ 
+     /**
+      * Int value (4 bytes)
+      */
+     public static final byte INT = 'I';
+ 
+     /**
+      * Long value (8 bytes)
+      */
+     public static final byte LONG = 'J';
+ 
+     /**
+      * Short value (2 bytes)
+      */
+     public static final byte SHORT = 'S';
+ 
+     /**
+      * Void value (no bytes)
+      */
+     public static final byte  VOID = 'V';
+ 
+     /**
+      * Boolean value (1 byte)
+      */
+     public static final byte BOOLEAN = 'Z';
+ 
+     /**
+      * String object (objectID size)
+      */
+     public static final byte STRING = 's';
+ 
+     /**
+      * Thread object (objectID size)
+      */
+     public static final byte THREAD = 't';
+ 
+     /**
+      * ThreadGroup object (objectID size)
+      */
+     public static final byte THREAD_GROUP = 'g';
+ 
+     /**
+      * ClassLoader object (objectID size)
+      */
+     public static final byte CLASS_LOADER = 'l';
+ 
+     /**
+      * Class object object (objectID size)
+      */
+     public static final byte CLASS_OBJECT = 'c';
+   }
+ 
+   /*
+    * StepDepth constants
+    */
+   public static final class StepDepth
+   {
+     /**
+      * Step into any method calls that occur before the end of the step
+      */
+     public static final int INTO = 0;
+ 
+     /**
+      * Step over any method calls that occur before the end of the step
+      */
+     public static final int OVER = 1;
+ 
+     /**
+      * Step out of the current method
+      */
+     public static final int OUT = 2;
+   }
+ 
+   /*
+    * StepSize constants
+    */
+   public static final class StepSize
+   {
+     /**
+      * Step by the minimum possible amount (often a bytecode instruction)
+      */
+     public static final int MIN = 0;
+ 
+     /**
+      * Step to the next source line unless there is no line number information,
+      * in which case MIN step is done instead
+      */
+     public static final int LINE = 1;
+   }
+ 
+   /*
+    * SuspendPolicy constants
+    */
+   public static final class SuspendPolicy
+   {
+     /**
+      * Suspend no threads when this event is encountered
+      */
+     public static final byte NONE = 0;
+ 
+     /**
+      * Suspend the event thread when this event is encountered
+      */
+     public static final byte EVENT_THREAD = 1;
+ 
+     /**
+      * Suspend all threads when this event is encountered
+      */
+     public static final byte ALL = 2;
+   }
+ 
+   /*
+    * InvokeOptions flag constants
+    */
+   public static final class InvokeOptions
+   {
+     /**
+      * otherwise, all threads started
+      */
+     public static final int INVOKE_SINGLE_THREADED = 0x1;
+ 
+     /**
+      * otherwise, normal virtual invoke (instance methods only)
+      */
+     public static final int INVOKE_NONVIRTUAL = 0x2;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/ClassPrepareEvent.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/ClassPrepareEvent.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/ClassPrepareEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/ClassPrepareEvent.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,147 ----
+ /* ClassPrepareEvent.java -- An event specifying that a class has been
+    prepared by the virtual machine
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMIdManager;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.id.ThreadId;
+ import gnu.classpath.jdwp.util.JdwpString;
+ import gnu.classpath.jdwp.util.Signature;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * "Notification of a class prepare in the target VM. See the JVM
+  * specification for a definition of class preparation. Class prepare
+  * events are not generated for primtiive classes (for example,
+  * <code>java.lang.Integer.TYPE</code>)." -- JDWP 1.4.2
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class ClassPrepareEvent
+   extends Event
+ {
+   // The thread in which this event occurred
+   private Thread _thread;
+ 
+   // The class that was prepared
+   private Class _class;
+ 
+   // Prepare flags
+   private int _status;
+ 
+   /**
+    * Class has been verified
+    */
+   public static final int STATUS_VERIFIED
+       = JdwpConstants.ClassStatus.VERIFIED;
+ 
+   /**
+    * Class has been prepared
+    */
+   public static final int STATUS_PREPARED
+       = JdwpConstants.ClassStatus.PREPARED;
+ 
+   /**
+    * Class has been initialized
+    */
+   public static final int STATUS_INITIALIZED
+       = JdwpConstants.ClassStatus.INITIALIZED;
+ 
+   /**
+    * Error preparing class
+    */
+   public static final int STATUS_ERROR
+       = JdwpConstants.ClassStatus.ERROR;
+ 
+   /**
+    * Constructs a new <code>ClassPrepareEvent</code>
+    *
+    * @param thread  thread in which event occurred
+    * @param clazz   class which was prepared
+    * @param flags   prepare status flags
+    */
+   public ClassPrepareEvent (Thread thread, Class clazz, int flags)
+   {
+     super (JdwpConstants.EventKind.CLASS_PREPARE);
+     _thread = thread;
+     _class = clazz;
+     _status = flags;
+   }
+ 
+   /**
+    * Returns a specific filtering parameter for this event.
+    * Valid types are thread and class.
+    *
+    * @param type  the type of parameter desired
+    * @returns the desired parameter or <code>null</code>
+    */
+   public Object getParameter (Class type)
+   {
+     if (type == ThreadId.class)
+       return _thread;
+     else if (type == ReferenceTypeId.class)
+       return _class;
+ 
+     return null;
+   }
+ 
+   /**
+    * Writes the event to the given stream
+    *
+    * @param outStream  the output stream to write the event to
+    */
+   protected void _writeData (DataOutputStream outStream)
+     throws IOException
+   {
+     VMIdManager idm = VMIdManager.getDefault();
+     ThreadId tid = (ThreadId) idm.getObjectId (_thread);
+     ReferenceTypeId rid = idm.getReferenceTypeId (_class);
+ 
+     tid.write (outStream);
+     rid.writeTagged (outStream);
+     JdwpString.writeString (outStream,
+ 			    Signature.computeClassSignature (_class));
+     outStream.writeInt (_status);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/Event.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/Event.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/Event.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/Event.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,130 ----
+ /* Event.java -- a base class for all event types
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.transport.JdwpCommandPacket;
+ import gnu.classpath.jdwp.transport.JdwpPacket;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * This class is a base class for all VM->debugger event
+  * notifications.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public abstract class Event
+ {
+   // The kind of event represented by this event
+   private byte _eventKind;
+ 
+   /**
+    * Constructs an <code>Event</code> of the given kind
+    *
+    * @param kind  the type of event
+    */
+   public Event (byte kind)
+   {
+     _eventKind = kind;
+   }
+ 
+   /**
+    * Returns the event type of this event
+    *
+    * @returns  the event kind
+    */
+   public byte getEventKind ()
+   {
+     return _eventKind;
+   }
+ 
+   /**
+    * Abstract function used by implementing classes to fill in the
+    * event-specific data. Note that request ID is automatically added
+    * by this class (since it appears in all event notifications).
+    *
+    * @param outStream  the stream to which to write data
+    */
+   protected abstract void _writeData (DataOutputStream outStream)
+     throws IOException;
+ 
+   /**
+    * Returns a specific filtering parameter for this event. For example,
+    * most events may be filtered by thread. Consequently, a call to this
+    * method with <code>ThreadId.class</code> should return a
+    * <code>Thread</code>.
+    *
+    * @param type  the type of parameter to return
+    * @returns the parameter (not the ID) or <code>null</code> if none is
+    *          is defined for this event
+    */
+   public abstract Object getParameter (Class type);
+ 
+   /**
+    * Converts this event into to a JDWP packet
+    *
+    * @param dos     the stream to which to write data
+    * @param request the request the wanted this notification
+    * @returns a <code>JdwpPacket</code> of the events
+    */
+   public JdwpPacket toPacket (DataOutputStream dos, EventRequest request)
+   {
+     JdwpPacket pkt;
+     try
+       {
+ 	dos.writeByte (request.getSuspendPolicy ());
+ 	dos.writeInt (1);
+ 	dos.writeByte (_eventKind);
+ 	dos.writeInt (request.getId ());
+ 	_writeData (dos);
+ 
+ 	pkt = new JdwpCommandPacket (JdwpConstants.CommandSet.Event.CS_VALUE,
+ 				     JdwpConstants.CommandSet.Event.COMPOSITE);
+       }
+     catch (IOException ioe)
+       {
+ 	pkt = null;
+       }
+ 
+     return pkt;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,293 ----
+ /* EventManager.java -- event management and notification infrastructure
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event;
+ 
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.InvalidEventTypeException;
+ 
+ import java.util.Collection;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ 
+ /**
+  * Manages event requests and filters event notifications.
+  *
+  * The purpose of this class is actually two-fold:
+  * 
+  * 1) Maintain a list of event requests from the debugger
+  * 2) Filter event notifications from the VM
+  * 
+  * If an event request arrives from the debugger, the back-end will
+  * call {@link #reqestEvent}, which will first check for a valid event.
+  * If it is valid, <code>EventManager</code> will record the request
+  * internally and register the event with the virtual machine, which may
+  * choose to handle the request itself (as is likely the case with
+  * breakpoints and other execution-related events), or it may decide to
+  * allow the <code>EventManager</code> to handle notifications and all
+  * filtering (which is convenient for other events such as class (un)loading).
+  * 
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class EventManager
+ {
+   // Single instance
+   private static EventManager _instance = new EventManager ();
+ 
+   // maps event (EVENT_*) to lists of EventRequests
+   private Hashtable _requests = null;
+ 
+   /**
+    * Returns an instance of the event manager
+    *
+    * @return the event manager
+    */
+   public static EventManager getDefault ()
+   {
+     return _instance;
+   }
+ 
+   // Private constructs a new <code>EventManager</code>
+   private EventManager ()
+   {
+     _requests = new Hashtable ();
+ 
+     // Add lists for all the event types
+     _requests.put (new Byte (EventRequest.EVENT_SINGLE_STEP),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_BREAKPOINT),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_FRAME_POP),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_EXCEPTION),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_USER_DEFINED),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_THREAD_START),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_THREAD_END),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_CLASS_PREPARE),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_CLASS_UNLOAD),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_CLASS_LOAD),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_FIELD_ACCESS),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_FIELD_MODIFY),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_METHOD_ENTRY),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_METHOD_EXIT),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_VM_INIT),
+ 		   new Hashtable ());
+     _requests.put (new Byte (EventRequest.EVENT_VM_DEATH),
+ 		   new Hashtable ());
+ 
+     // Add auto-generated event notifications
+     // only two: VM_INIT, VM_DEATH
+     try
+       {
+ 	requestEvent (new EventRequest (0,
+ 					EventRequest.EVENT_VM_INIT,
+ 					EventRequest.SUSPEND_NONE));
+ 	requestEvent (new EventRequest (0,
+ 					EventRequest.EVENT_VM_DEATH,
+ 					EventRequest.SUSPEND_NONE));
+       }
+     catch (InvalidEventTypeException e)
+       {
+ 	// This can't happen
+       }
+   }
+ 
+   /**
+    * Returns a request for the given event. This method will only
+    * be used if the <code>EventManager</code> is handling event filtering.
+    *
+    * @param  event  the event
+    * @return request that was interested in this event
+    *         or <code>null</code> if none (and event should not be sent)
+    * @throws IllegalArgumentException for invalid event kind
+    */
+   public EventRequest getEventRequest (Event event)
+   {
+     EventRequest interestedRequest = null;
+     Hashtable requests;
+     Byte kind = new Byte (event.getEventKind ());
+     requests = (Hashtable) _requests.get (kind);
+     if (requests == null)
+       {
+ 	// Did not get a valid event type
+ 	throw new IllegalArgumentException ("invalid event kind: " + kind);
+       }
+     boolean match = false;
+ 
+     // Loop through the requests. Must look at ALL requests in order
+     // to evaluate all filters (think count filter).
+     // TODO: What if multiple matches? Spec isn't so clear on this.
+     Iterator rIter = requests.values().iterator ();
+     while (rIter.hasNext ())
+       {
+ 	EventRequest request = (EventRequest) rIter.next ();
+ 	if (request.matches (event))
+ 	  interestedRequest = request;
+       }
+ 
+     return interestedRequest;
+   }
+ 
+   /**
+    * Requests monitoring of an event.
+    *
+    * The debugger registers for event notification through
+    * an event filter. If no event filter is specified for an event
+    * in the VM, it is assumed that the debugger is not interested in
+    * receiving notifications of this event.
+    *
+    * The virtual machine will be notified of the request.
+    *
+    * @param request  the request to monitor
+    * @throws InvalidEventTypeException for invalid event kind
+    */
+   public void requestEvent (EventRequest request)
+     throws InvalidEventTypeException
+   {
+     // Add request to request list
+     Hashtable requests;
+     Byte kind = new Byte (request.getEventKind ());
+     requests = (Hashtable) _requests.get (kind);
+     if (requests == null)
+       {
+ 	// Did not get a valid event type
+ 	throw new InvalidEventTypeException (request.getEventKind ());
+       }
+ 
+     // Register the event with the VM
+     VMVirtualMachine.registerEvent (request);
+     requests.put (new Integer (request.getId ()), request);
+   }
+ 
+   /**
+    * Deletes the given request from the management table
+    *
+    * @param  kind  the event kind
+    * @param  id    the ID of the request to delete
+    * @throws IllegalArgumentException for invalid event kind
+    */
+   public void deleteRequest (byte kind, int id)
+   {
+     Hashtable requests;
+     requests = (Hashtable) _requests.get (new Byte (kind));
+     if (requests == null)
+       {
+ 	// Did not get a valid event type
+ 	throw new IllegalArgumentException ("invalid event kind: " + kind);
+       }
+ 
+     Integer iid = new Integer (id);
+     EventRequest request = (EventRequest) requests.get (iid);
+     if (request != null)
+       {
+ 	VMVirtualMachine.unregisterEvent (request);
+ 	requests.remove (iid);
+       }
+   }
+ 
+   /**
+    * Clears all the requests for a given event
+    *
+    * @param  kind  the event kind
+    * @throws IllegalArgumentException for invalid event kind
+    */
+   public void clearRequests (byte kind)
+   {
+     Hashtable requests = (Hashtable) _requests.get (new Byte (kind));
+     if (requests == null)
+       {
+ 	// Did not get a valid event type
+ 	throw new IllegalArgumentException ("invalid event kind: " + kind);
+       }
+ 
+     VMVirtualMachine.clearEvents (kind);
+     requests.clear ();
+   }
+ 
+   /**
+    * Returns a given event request for an event
+    *
+    * @param  kind  the kind of event for the request
+    * @param  id    the integer request id to return
+    * @return  the request for the given event kind with the given id
+    *          (or <code>null</code> if not found)
+    * @throws IllegalArgumentException for invalid event kind
+    */
+   public EventRequest getRequest (byte kind, int id)
+   {
+     Hashtable requests = (Hashtable) _requests.get (new Byte (kind));
+     if (requests == null)
+       {
+ 	// Did not get a valid event type
+ 	throw new IllegalArgumentException ("invalid event kind: " + kind);
+       }
+ 
+     return (EventRequest) requests.get (new Integer (id));
+   }
+ 
+   /**
+    * Returns all requests of the given event kind
+    *
+    * @param  kind  the event kind
+    * @returns a <code>Collection</code> of all the registered requests
+    * @throws IllegalArgumentException for invalid event kind
+    */
+   public Collection getRequests (byte kind)
+   {
+     Hashtable requests = (Hashtable) _requests.get (new Byte (kind));
+     if (requests == null)
+       {
+ 	// Did not get a valid event type
+ 	throw new IllegalArgumentException ("invalid event kind: " + kind);
+       }
+     
+     return requests.values ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/EventRequest.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/EventRequest.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/EventRequest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/EventRequest.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,376 ----
+ /* EventRequest.java -- an event request from the debugger
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.event.filters.*;
+ import gnu.classpath.jdwp.exception.JdwpIllegalArgumentException;
+ import gnu.classpath.jdwp.id.*;
+ 
+ import java.util.LinkedList;
+ import java.util.ListIterator;
+ 
+ /**
+  * A class which represents a request by the debugger for an event
+  * in the VM. <code>EventRequest</code>s usually have event filters
+  * associated with them, which allow the debugger to specify conditions
+  * under which the notification should be sent (specific thread, specific
+  * class, ignore count, etc).
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class EventRequest
+ {
+   /*
+    * Event types
+    */
+ 
+   /**
+    * Single step event
+    */
+   public static final byte EVENT_SINGLE_STEP =
+     JdwpConstants.EventKind.SINGLE_STEP;
+ 
+   /**
+    * Breakpoint event
+    */
+   public static final byte EVENT_BREAKPOINT =
+     JdwpConstants.EventKind.BREAKPOINT;
+ 
+   /**
+    * Frame pop event
+    */
+   public static final byte EVENT_FRAME_POP =
+     JdwpConstants.EventKind.FRAME_POP;
+ 
+   /**
+    * Exception event
+    */
+   public static final byte EVENT_EXCEPTION =
+     JdwpConstants.EventKind.EXCEPTION;
+ 
+   /**
+    * User-defined event
+    */
+   public static final byte EVENT_USER_DEFINED = 
+     JdwpConstants.EventKind.USER_DEFINED;
+ 
+   /**
+    * Thread start event
+    */
+   public static final byte EVENT_THREAD_START = 
+     JdwpConstants.EventKind.THREAD_START;
+ 
+   /**
+    * Thread end/death event
+    */
+   public static final byte EVENT_THREAD_END =
+     JdwpConstants.EventKind.THREAD_END;
+ 
+   /**
+    * Class prepare event
+    */
+   public static final byte EVENT_CLASS_PREPARE =
+     JdwpConstants.EventKind.CLASS_PREPARE;
+ 
+   /**
+    * Class unload event
+    */
+   public static final byte EVENT_CLASS_UNLOAD =
+     JdwpConstants.EventKind.CLASS_UNLOAD;
+ 
+   /**
+    * Class load event
+    */
+   public static final byte EVENT_CLASS_LOAD =
+     JdwpConstants.EventKind.CLASS_LOAD;
+ 
+   /**
+    * Field access event
+    */
+   public static final byte EVENT_FIELD_ACCESS =
+     JdwpConstants.EventKind.FIELD_ACCESS;
+ 
+   /**
+    * Field modify event
+    */
+   public static final byte EVENT_FIELD_MODIFY =
+     JdwpConstants.EventKind.FIELD_MODIFICATION;
+ 
+   /**
+    * Method entry event
+    */
+   public static final byte EVENT_METHOD_ENTRY =
+     JdwpConstants.EventKind.METHOD_ENTRY;
+ 
+   /**
+    * Method exit event
+    */
+   public static final byte EVENT_METHOD_EXIT = 
+     JdwpConstants.EventKind.METHOD_EXIT;
+ 
+   /**
+    * Virtual machine initialization/start
+    */
+   public static final byte EVENT_VM_INIT =
+     JdwpConstants.EventKind.VM_INIT;
+ 
+   /**
+    * Virutal machine death
+    */
+   public static final byte EVENT_VM_DEATH =
+     JdwpConstants.EventKind.VM_DEATH;
+ 
+ 
+   /*
+    * Suspend policies
+    */
+ 
+   /**
+    * Do not suspend any threads
+    */
+   public static final byte SUSPEND_NONE = 
+     JdwpConstants.SuspendPolicy.NONE;
+ 
+   /**
+    * Suspend the thread in which the event occurred
+    */
+   public static final byte SUSPEND_THREAD =
+     JdwpConstants.SuspendPolicy.EVENT_THREAD;
+ 
+   /**
+    * Suspend all threads
+    */
+   public static final byte SUSPEND_ALL =
+     JdwpConstants.SuspendPolicy.ALL;
+ 
+   // ID of last EventRequest
+   private static int _last_id = 0;
+   private static Object _idLock = new Object ();
+ 
+   // A list of filters
+   private LinkedList _filters;
+ 
+   // The ID of this request
+   private int _id;
+ 
+   // The suspend policy to enforce when this event occurs
+   private byte _suspendPolicy;
+ 
+   // Kind of event requested
+   private byte _kind;
+ 
+   /**
+    * Construct a new <code>EventRequest</code>
+    *
+    * @param kind           the kind of event requested
+    * @param suspendPolicy  how to suspend threads when event occurs
+    */
+   public EventRequest (byte kind, byte suspendPolicy)
+   {
+     _filters = new LinkedList ();
+     synchronized (_idLock)
+       {
+ 	_id = ++_last_id;
+       }
+     _kind = kind;
+     _suspendPolicy = suspendPolicy;
+   }
+ 
+   /**
+    * Construct a new <code>EventRequest</code> with the given ID
+    *
+    * @param id             the id of the request to create
+    * @param kind           the kind of event requested
+    * @param suspendPolicy  how to suspend threads when event occurs
+    */
+   public EventRequest (int id, byte kind, byte suspendPolicy)
+   {
+     _filters = new LinkedList ();
+     _kind = kind;
+     _suspendPolicy = suspendPolicy;
+   }
+ 
+   /**
+    * Creates a new event filter, adding it to this request
+    *
+    * @param  filter  the filter to add
+    * @throws JdwpIllegalArgumentException if an invalid or illegal filter
+    *         is added to the request
+    */
+   public void addFilter (IEventFilter filter)
+     throws JdwpIllegalArgumentException
+   {
+     // Check validity of filter for this request
+     boolean valid = true;
+ 
+     Class clazz = filter.getClass ();
+     if (clazz == ClassExcludeFilter.class)
+       {
+ 	if (_kind == EVENT_THREAD_START
+ 	    || _kind == EVENT_THREAD_END)
+ 	  valid = false;
+       }
+     else if (clazz == ClassMatchFilter.class)
+       {
+ 	if (_kind == EVENT_THREAD_START
+ 	    || _kind == EVENT_THREAD_END)
+ 	  valid = false;
+       }
+     else if (clazz == ClassOnlyFilter.class)
+       {
+ 	if (_kind == EVENT_CLASS_UNLOAD
+ 	    || _kind == EVENT_THREAD_START
+ 	    || _kind == EVENT_THREAD_END)
+ 	  valid = false;
+       }
+     else if (clazz == ConditionalFilter.class)
+       {
+ 	// JDWP 1.4 does not say much about this
+       }
+     else if (clazz == CountFilter.class)
+       {
+ 	// may be used with any event
+       }
+     else if (clazz == ExceptionOnlyFilter.class)
+       {
+ 	if (_kind != EVENT_EXCEPTION)
+ 	  valid = false;
+       }
+     else if (clazz == FieldOnlyFilter.class)
+       {
+ 	if (_kind != EVENT_FIELD_ACCESS
+ 	    && _kind != EVENT_FIELD_MODIFY)
+ 	  valid = false;
+       }
+     else if (clazz == InstanceOnlyFilter.class)
+       {
+ 	if (_kind == EVENT_CLASS_PREPARE
+ 	    || _kind == EVENT_CLASS_UNLOAD
+ 	    || _kind == EVENT_THREAD_START
+ 	    || _kind == EVENT_THREAD_END)
+ 	  valid = false;
+       }
+     else if (clazz == LocationOnlyFilter.class)
+       {
+ 	if (_kind != EVENT_BREAKPOINT
+ 	    && _kind != EVENT_FIELD_ACCESS
+ 	    && _kind != EVENT_FIELD_MODIFY
+ 	    && _kind != EVENT_SINGLE_STEP
+ 	    && _kind != EVENT_EXCEPTION)
+ 	  valid = false;
+       }
+     else if (clazz == StepFilter.class)
+       {
+ 	if (_kind != EVENT_SINGLE_STEP)
+ 	  valid = false;
+       }
+     else if (clazz == ThreadOnlyFilter.class)
+       {
+ 	if (_kind == EVENT_CLASS_UNLOAD)
+ 	  valid = false;
+       }
+ 
+     if (!valid)
+       {
+ 	String msg = ("cannot use " + filter.getClass ().getName ()
+ 		      + " with class unload events");
+ 	throw new JdwpIllegalArgumentException (msg);
+       }
+ 
+     // Add filter to list
+     _filters.add (filter);
+   }
+ 
+   /**
+    * Returns the suspend policy for this request
+    */
+   public byte getSuspendPolicy ()
+   {
+     return _suspendPolicy;
+   }
+ 
+   /**
+    * Returns the request id of this request
+    */
+   public int getId ()
+   {
+     return _id;
+   }
+ 
+   /**
+    * Sets the id of the request (used for auto-generated events)
+    */
+   public void setId (int id)
+   {
+     _id = id;
+   }
+ 
+   /**
+    * Returns the kind of event for this request
+    */
+   public byte getEventKind ()
+   {
+     return _kind;
+   }
+ 
+   /**
+    * Determines whether the given event matches this request
+    *
+    * @param  theEvent  the event to compare to
+    */
+   public boolean matches (Event theEvent)
+   {
+     boolean matches = true;
+ 
+     // Loop through filters; all must match
+     // Note that we must allow EVERY filter to evaluate. This way
+     // things like CountFilter will work.
+     ListIterator iter = _filters.listIterator ();
+     while (iter.hasNext ())
+       {
+ 	IEventFilter filter = (IEventFilter) iter.next ();
+ 	if (!filter.matches (theEvent))
+ 	  matches = false;
+       }
+ 
+     return matches;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/ThreadEndEvent.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/ThreadEndEvent.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/ThreadEndEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/ThreadEndEvent.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,105 ----
+ /* ThreadEndEvent.java -- An event specifying that a thread has died
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMIdManager;
+ import gnu.classpath.jdwp.id.ThreadId;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * "Notification of a completed thread in the target VM. The notification
+  * is generated by the dying thread before it terminates. Because of this
+  * timing, it is possible for VirtualMachine.allThreads to return this
+  * thread after this event is received.
+  *
+  * <p>Note that this event gives no information about the lifetime of the
+  * thread object. It may or may not be collected soon depending on what
+  * references exist in the target VM." -- JDWP 1.4.2
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class ThreadEndEvent
+   extends Event
+ {
+   private Thread _thread;
+ 
+   /**
+    * Constructs a new <code>ThreadEndEvent</code>
+    *
+    * @param thread  the deceased thread
+    */
+   public ThreadEndEvent (Thread thread)
+   {
+     super (JdwpConstants.EventKind.THREAD_END);
+     _thread = thread;
+   }
+ 
+   /**
+    * Returns a specific filtering parameter for this event.
+    * Valid types are ThreadId.
+    *
+    * @param type  the type of parameter desired
+    * @returns the desired parameter or <code>null</code>
+    */
+   public Object getParameter (Class type)
+   {
+     if (type == ThreadId.class)
+       return _thread;
+ 
+     return null;
+   }
+ 
+   /**
+    * Writes the event to the given stream
+    *
+    * @param outStream  the output stream to write the event to
+    */
+   protected void _writeData (DataOutputStream outStream)
+     throws IOException
+   {
+     VMIdManager idm = VMIdManager.getDefault();
+     ThreadId tid = (ThreadId) idm.getObjectId (_thread);
+     tid.write (outStream);
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,109 ----
+ /* ThreadStartEvent.java -- An event specifying that a new thread
+    has started in the virtual machine
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMIdManager;
+ import gnu.classpath.jdwp.id.ThreadId;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * "Notification of a new running thread in the target VM. The new
+  * thread can be the result of a call to {@link java.lang.Thread.start} or
+  * the result of attaching a new thread to the VM though JNI. The
+  * notification is generated by the new thread some time before its
+  * execution starts. Because of this timing, it is possible to receive
+  * other events for the thread before this event is received. (Notably,
+  * Method Entry Events and Method Exit Events might occur during thread
+  * initialization. It is also possible for the VirtualMachine AllThreads
+  * command to return a thread before its thread start event is received.
+  *
+  * <p>Note that this event gives no information about the creation of the
+  * thread object which may have happened much earlier, depending on the
+  * VM being debugged." -- JDWP 1.4.2
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class ThreadStartEvent
+   extends Event
+ {
+   private Thread _thread;
+ 
+   /**
+    * Constructs a new <code>ThreadStartEvent</code>
+    *
+    * @param tid  the thread ID in which event occurred
+    */
+   public ThreadStartEvent (Thread thread) {
+     super (JdwpConstants.EventKind.THREAD_END);
+     _thread = thread;
+   }
+ 
+   /**
+    * Returns a specific filtering parameter for this event.
+    * Valid types are ThreadId.
+    *
+    * @param type  the type of parameter desired
+    * @returns the desired parameter or <code>null</code>
+    */
+   public Object getParameter (Class type)
+   {
+     if (type == ThreadId.class)
+       return _thread;
+ 
+     return null;
+   }
+ 
+   /**
+    * Writes the event to the given stream
+    *
+    * @param outStream  the output stream to write the event to
+    */
+   protected void _writeData (DataOutputStream outStream)
+     throws IOException
+   {
+     VMIdManager idm = VMIdManager.getDefault();
+     ThreadId tid = (ThreadId) idm.getObjectId (_thread);
+     tid.write (outStream);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,85 ----
+ /* VmDeathEvent.java -- An event specifying that the VM has terminated
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * Event notifying the debugger that the virtual machine has terminated.
+  * 
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class VmDeathEvent
+   extends Event
+ {
+   /**
+    * Constructs a <code>VmDeathEvent</code> object
+    *
+    * @param thread  the initial thread
+    */
+   public VmDeathEvent ()
+   {
+     super (JdwpConstants.EventKind.VM_DEATH);
+   }
+ 
+   /**
+    * Returns a specific filtering parameter for this event.
+    * This event has no valid types.
+    *
+    * @param type  the type of parameter desired
+    * @returns the desired parameter or <code>null</code>
+    */
+   public Object getParameter (Class type)
+   {
+     return null;
+   }
+ 
+   /**
+    * Writes out event-specific data
+    */
+   protected void _writeData (DataOutputStream outStream)
+     throws IOException
+   {
+     // no data (request ID done by VMIdManager)
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/VmInitEvent.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/VmInitEvent.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/VmInitEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/VmInitEvent.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,94 ----
+ /* VmInitEvent.java -- An event specifying that the VM has started
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMIdManager;
+ import gnu.classpath.jdwp.id.ThreadId;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * "Notification of initialization of a target VM. This event is
+  * received before the main thread is started and before any application
+  * code has been executed." -- JDWP 1.4.2
+  * 
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class VmInitEvent
+   extends Event
+ {
+   private Thread _initialThread;
+ 
+   /**
+    * Constructs a <code>VmInitEvent</code> object
+    *
+    * @param thread  the initial thread
+    */
+   public VmInitEvent (Thread thread)
+   {
+     super (JdwpConstants.EventKind.VM_INIT);
+     _initialThread = thread;
+   }
+ 
+   /**
+    * Returns a specific filtering parameter for this event.
+    * This event has no valid types.
+    *
+    * @param type  the type of parameter desired
+    * @returns the desired parameter or <code>null</code>
+    */
+   public Object getParameter (Class type)
+   {
+     return null;
+   }
+ 
+   /**
+    * Writes out event-specific data
+    */
+   protected void _writeData (DataOutputStream outStream)
+     throws IOException
+   {
+     VMIdManager idm = VMIdManager.getDefault();
+     ThreadId tid = (ThreadId) idm.getObjectId (_initialThread);
+     tid.write (outStream);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassExcludeFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassExcludeFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassExcludeFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassExcludeFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,75 ----
+ /* ClassExcludeFilter.java -- filter on class name (exclusive)
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidStringException;
+ 
+ /**
+  * An event filter which excludes events matching a 
+  * specified class pattern (exact match or start/end with "*").
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class ClassExcludeFilter
+   extends ClassMatchFilter
+ {
+   /**
+    * Constructs a new <code>ClassExcludeFilter</code>
+    *
+    * @param  pattern  the pattern to use
+    * @throws InvalidStringException  if pattern is invalid
+    */
+   public ClassExcludeFilter (String pattern)
+     throws InvalidStringException
+   {
+     super (pattern);
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     return !super.matches (event);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,114 ----
+ /* ClassMatchFilter.java -- filter on class name (inclusive)
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidStringException;
+ import gnu.classpath.jdwp.exception.InvalidClassException;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ 
+ /**
+  * An event filter which includes events matching a 
+  * specified class pattern (exact match or start/end with "*").
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class ClassMatchFilter
+   implements IEventFilter
+ {
+   // Pattern to match
+   private String _pattern;
+ 
+   /**
+    * Constructs a new <code>ClassMatchFilter</code>
+    *
+    * @param  pattern  the pattern to use
+    * @throws InvalidStringException  if pattern is invalid
+    */
+   public ClassMatchFilter (String pattern)
+     throws InvalidStringException
+   {
+     int index = pattern.indexOf ('*');
+     if (index != -1 && index != 0 && index != (pattern.length () - 1))
+       {
+ 	// '*' must be first char or last char
+ 	throw new InvalidStringException ("pattern may be an exact match or "
+ 					  + "start/end with \"*\"");
+       }
+     _pattern = pattern;
+   }
+ 
+   /**
+    * Returns the pattern to be matched
+    *
+    * @return the pattern
+    */
+   public String getPattern ()
+   {
+     return _pattern;
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     Object type = event.getParameter (ReferenceTypeId.class);
+     if (type != null)
+       {
+ 	Class eventClass = (Class) type;
+ 	String name = eventClass.getName ();
+ 	
+ 	if (_pattern.startsWith ("*"))
+ 	  return name.endsWith (_pattern.substring (1));
+ 	else if (_pattern.endsWith ("*"))
+ 	  {
+ 	    int end = _pattern.length () - 1;
+ 	    return name.startsWith (_pattern.substring (0, end));
+ 	  }
+ 	else
+ 	  return name.matches (_pattern);
+       }
+ 
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassOnlyFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassOnlyFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassOnlyFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassOnlyFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,109 ----
+ /* ClassOnlyFilter.java -- filter on specific class
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidClassException;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ 
+ /**
+  * An event filter which filters out events in uninteresting
+  * classes.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class ClassOnlyFilter
+   implements IEventFilter
+ {
+   // Class ID for which to filter
+   private ReferenceTypeId _id;
+ 
+   /**
+    * Constructs a new <code>ClassOnlyFilter</code>
+    *
+    * @param refId  the reference type id for a class for which events
+    *               will be reported
+    * @throws InvalidClassException if the ID is no longer valid
+    */
+   public ClassOnlyFilter (ReferenceTypeId refId)
+     throws InvalidClassException
+   {
+     // validity check
+     refId.getType ();
+     _id = refId;
+   }
+ 
+   /**
+    * Returns the class to which to restrict events
+    *
+    * @return the class's ID
+    */
+   public ReferenceTypeId getType ()
+   {
+     return _id;
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     Object type = event.getParameter (ReferenceTypeId.class);
+     if (type != null)
+       {
+ 	try
+ 	  {
+ 	    Class clazz = _id.getType ();
+ 	    Class eventClass = (Class) type;
+ 	    if (clazz.isAssignableFrom (eventClass))
+ 	      return true;
+ 	  }
+ 	catch (InvalidClassException ice)
+ 	  {
+ 	    // class is no longer valid
+ 	    return false;
+ 	  }
+       }
+ 
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,82 ----
+ /* ConditionalFilter.java -- conditional expression filter
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ 
+ /**
+  * An event filter which allows expression conditionals.
+  * Note that in JDWP 1.4, this class is marked "for the
+  * future".
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class ConditionalFilter
+   implements IEventFilter
+ {
+   // private ConditionalId _exprId;
+ 
+   /**
+    * Constructs a new <code>ConditionalFilter</code> with the
+    * given conditional.
+    *
+    * <p><b>NOTE:</b> This filter is marked "for the future",
+    * i.e, there is no way to actually use this yet.
+    *
+    * @param  cond  the conditional expression
+    * @throws NotImplementedException if used
+    */
+   public ConditionalFilter (Object conditional)
+     throws NotImplementedException
+   {
+     throw new NotImplementedException ("conditional filters");
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/CountFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/CountFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/CountFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/CountFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,95 ----
+ /* CountFilter.java -- a step filter
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidCountException;
+ 
+ /**
+  * An ignore count filter.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class CountFilter
+   implements IEventFilter
+ {
+   // the count
+   private int _count;
+ 
+   /**
+    * Constructs a new <code>CountFilter</code> with the given count.
+    *
+    * @param  count  the number of times the event will be ignored
+    * @throws InvalidCountException if count is invalid (< 1)
+    */
+   public CountFilter (int count)
+     throws InvalidCountException
+   {
+     // Check for valid count
+     if (count < 1)
+       throw new InvalidCountException (count);
+ 
+     _count = count;
+   }
+ 
+   /**
+    * Returns the ignore count
+    *
+    * @return the number of times the event should be ignored
+    */
+   public int getCount ()
+   {
+     return _count;
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     // This filter only relies on its count
+     if (--_count == 0)
+       return true;
+ 
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,121 ----
+ /* ExceptionOnlyFilter.java -- 
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidClassException;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ 
+ /**
+  * Restricts reported exceptions by their class and whether they are caught
+  * or uncaught.
+  * 
+  * This modifier can be used with exception event kinds only.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class ExceptionOnlyFilter
+   implements IEventFilter
+ {
+   private ReferenceTypeId _refId;
+   private boolean _caught;
+   private boolean _uncaught;
+ 
+   /**
+    * Constructs a new <code>ExceptionOnlyFilter</code>
+    *
+    * @param  refid
+    * @param  caught
+    * @param  uncaught
+    * @throws InvalidClassException if refid is invalid
+    */
+   public ExceptionOnlyFilter (ReferenceTypeId refId, boolean caught,
+ 			      boolean uncaught)
+     throws InvalidClassException
+   {
+     if (refId == null || refId.getReference().get () == null)
+       throw new InvalidClassException (refId.getId ());
+ 
+     _refId = refId;
+     _caught = caught;
+     _uncaught = uncaught;
+   }
+ 
+   /**
+    * Returns the exception class to report (<code>null</code> for all)
+    *
+    * @return the class's ID
+    */
+   public ReferenceTypeId getType ()
+   {
+     return _refId;
+   }
+ 
+   /**
+    * Report caught exceptions?
+    *
+    * @return whether to report caught exceptions
+    */
+   public boolean forCaught ()
+   {
+     return _caught;
+   }
+ 
+   /**
+    * Report uncaught exceptions?
+    *
+    * @return whether to report uncaught exceptions
+    */
+   public boolean forUncaught ()
+   {
+     return _uncaught;
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     // FIXME
+     throw new RuntimeException ("ExceptionOnlyFilter.matches not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,112 ----
+ /* FieldOnlyFilter.java -- filter on field
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidClassException;
+ import gnu.classpath.jdwp.exception.InvalidFieldException;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ 
+ /**
+  * Restricts reported events to those that occur for a given field.
+  * 
+  * This modifier can be used with field access and field modification event
+  * kinds only.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class FieldOnlyFilter
+   implements IEventFilter
+ {
+   private ReferenceTypeId _refId;
+   private ReferenceTypeId _fieldId;
+ 
+   /**
+    * Constructs a new <code>FieldOnlyFilter</code>.
+    *
+    * @param  refId  class for field
+    * @param  fid    field
+    * @throws InvalidClassException if class is invalid
+    * @throws InvalidFieldExcpetion if field is invalid
+    */
+   public FieldOnlyFilter (ReferenceTypeId refId, /*Field*/ReferenceTypeId fid)
+     throws InvalidClassException, InvalidFieldException
+   {
+     if (refId == null || refId.getReference().get () == null)
+       throw new InvalidClassException (refId.getId ());
+ 
+     if (fid == null)
+       throw new InvalidFieldException (fid.getId ());
+ 
+     _refId = refId;
+     _fieldId = fid;
+   }
+ 
+   /**
+    * Returns the class in which the field is declared 
+    *
+    * @return the class's id
+    */
+   public ReferenceTypeId getType ()
+   {
+     return _refId;
+   }
+ 
+   /**
+    * Returns the field for which to restrict events
+    *
+    * @return the field's id
+    */
+   public ReferenceTypeId getField ()
+   {
+     return _fieldId;
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     // FIXME
+     throw new RuntimeException ("FieldOnlyFilter.matches not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/IEventFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/IEventFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/IEventFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/IEventFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,65 ----
+ /* IEventFilter.java -- an interface for event filters
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ 
+ /**
+  * An interface for event filters. The debugger registers an event
+  * filter for a given event when it is interested in receiving
+  * notifications about that event from the VM.
+  *
+  * <p>Filters are attached to {@link gnu.classpath.jdwp.event.EventRequest}s
+  * in order to allow the debugger to specify that an event should be sent
+  * only when the filters for the event request all match.
+  *
+  * <p>No filters means "send all notifications".
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public interface IEventFilter
+ {
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/InstanceOnlyFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/InstanceOnlyFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/InstanceOnlyFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/InstanceOnlyFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,101 ----
+ /* InstanceOnlyFilter.java -- filter on instance
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidObjectException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ 
+ /**
+  * Restricts reported events to those whose active 'this' object is the
+  * given object. Match value is the null object for static methods.
+  * 
+  * This modifier can be used with any event kind except class prepare,
+  * class unload, thread start, and thread end. Introduced in JDWP version 1.4.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InstanceOnlyFilter
+   implements IEventFilter
+ {
+   private ObjectId _instance;
+ 
+   /**
+    * Constructs a new <code>InstanceOnlyFilter</code>.
+    *
+    * @param  oid  the object to which to restrict events (may be null)
+    * @throws InvalidObjectException if Object is invalid
+    */
+   public InstanceOnlyFilter (ObjectId oid)
+     throws InvalidObjectException
+   {
+     if (oid != null && oid.getReference().get () == null)
+       throw new InvalidObjectException (oid.getId ());
+ 
+     _instance = oid;
+   }
+ 
+   /**
+    * Returns the instance to which to restrict events
+    *
+    * @return the object's ID
+    */
+   public ObjectId getInstance ()
+   {
+     return _instance;
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     Object eventInstance = event.getParameter (ObjectId.class);
+     if (eventInstance != null)
+       {
+ 	Object myInstance = _instance.getReference().get ();
+ 	return ((myInstance != null) && (myInstance == eventInstance));
+       }
+ 
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,91 ----
+ /* LocationOnlyFilter.java -- filter on location
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidLocationException;
+ import gnu.classpath.jdwp.util.Location;
+ 
+ /**
+  * Restricts reported events to those that occur at the given location.
+  *
+  * May be used with breakpoint, field access, field modification, step,
+  * and exception event kinds.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class LocationOnlyFilter
+   implements IEventFilter
+ {
+   private Location _location;
+ 
+   /**
+    * Constructs a new <code>LocationOnlyFilter</code>.
+    *
+    * @param  loc  the location for which to report events
+    * @throws InvalidLocationException if location is invalid
+    */
+   public LocationOnlyFilter (Location loc)
+     throws InvalidLocationException
+   {
+     _location = loc;
+   }
+ 
+   /**
+    * Returns the location at which to restrict events
+    *
+    * @return the location
+    */
+   public Location getLocation ()
+   {
+     return _location;
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     // FIXME
+     throw new RuntimeException ("LocationOnlyFilter.matches not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,119 ----
+ /* StepFilter.java -- a step filter
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidThreadException;
+ import gnu.classpath.jdwp.id.ThreadId;
+ 
+ /**
+  * An event filter which restricts reported step events to those which
+  * satisfy depth and size constraints. This modifier can only be used with
+  * step event kinds.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class StepFilter
+   implements IEventFilter
+ {
+   private ThreadId _tid;
+   private int _size;
+   private int _depth;
+ 
+   /**
+    * Constructs a new <code>StepFilter</code> with the given count.
+    *
+    * @param  count  the number of times the event will be ignored
+    * @throws InvalidThreadException if thread is invalid
+    */
+   public StepFilter (ThreadId tid, int size, int depth)
+     throws InvalidThreadException
+   {
+     if (tid.getReference().get () == null)
+       throw new InvalidThreadException (tid.getId ());
+ 
+     _tid = tid;
+     _size = size;
+     _depth = depth;
+   }
+ 
+   /**
+    * Returns the thread in which to step
+    *
+    * @return the thread's ID
+    */
+   public ThreadId getThread ()
+   {
+     return _tid;
+   }
+ 
+   /**
+    * Returns the size of each step (insn, line)
+    *
+    * @return the step size
+    * @see JdwpConstants.StepSize
+    */
+   public int getSize ()
+   {
+     return _size;
+   }
+ 
+   /**
+    * Returns the relative call stack limit (into, over, out)
+    *
+    * @return how to step
+    * @see JdwpConstants.StepDepth
+    */
+   public int getDepth ()
+   {
+     return _depth;
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     // FIXME
+     throw new RuntimeException ("StepFilter.matches not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,102 ----
+ /* ThreadOnlyFilter.java -- a thread filter
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
+ import gnu.classpath.jdwp.Jdwp;
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidThreadException;
+ import gnu.classpath.jdwp.id.ThreadId;
+ 
+ /**
+  * An event filter which allows only events within a specific
+  * thread
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class ThreadOnlyFilter
+   implements IEventFilter
+ {
+   // the thread
+   private ThreadId _tid;
+ 
+   /**
+    * Constructs a new <code>ThreadOnlyFilter</code> for the given
+    * thread id
+    *
+    * @param tid  ID of the thread on which to filter
+    * @throws InvalidThreadException if the thread is not valid
+    */
+   public ThreadOnlyFilter (ThreadId tid)
+     throws InvalidThreadException
+   {
+     if (tid.getReference().get () == null)
+       throw new InvalidThreadException (tid.getId ());
+ 
+     _tid = tid;
+   }
+ 
+   /**
+    * Returns the thread in which to restrict events
+    *
+    * @return the thread's ID
+    */
+   public ThreadId getThread ()
+   {
+     return _tid;
+   }
+ 
+   /**
+    * Does the given event match the filter?
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+   public boolean matches (Event event)
+   {
+     Object thread = event.getParameter (ThreadId.class);
+     if (thread != null)
+       {
+ 	Thread eventThread = (Thread) thread;
+ 	Thread myThread = (Thread) _tid.getReference().get ();
+ 	return (eventThread == myThread);
+       }
+ 
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidClassException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidClassException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidClassException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidClassException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* InvalidClassException.java -- invalid/unknown class reference id exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown by the JDWP back-end when an invalid reference
+  * type id is used by the debugger.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidClassException
+   extends JdwpException
+ {
+   public InvalidClassException (long id)
+   {
+     super (JdwpConstants.Error.INVALID_CLASS,
+ 	   "invalid class id (" + id + ")");
+   }
+ 
+   public InvalidClassException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_CLASS, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidClassLoaderException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidClassLoaderException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidClassLoaderException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidClassLoaderException.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,62 ----
+ /* InvalidClassLoaderException.java -- an invalid class loader exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when the debugger uses an invalid class loader
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidClassLoaderException
+   extends JdwpException
+ {
+   public InvalidClassLoaderException (long id)
+   {
+     super (JdwpConstants.Error.INVALID_CLASS_LOADER,
+ 	   "invalid class loader (" + id + ")");
+   }
+ 
+   public InvalidClassLoaderException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_CLASS_LOADER, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidCountException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidCountException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidCountException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidCountException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* InvalidCountException -- an invalid count exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when a count filter is given an invalid count.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidCountException
+   extends JdwpException
+ {
+   public InvalidCountException (int id)
+   {
+     super (JdwpConstants.Error.INVALID_COUNT, "invalid count (" + id + ")");
+   }
+ 
+   public InvalidCountException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_COUNT, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidEventTypeException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidEventTypeException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidEventTypeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidEventTypeException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* InvalidEventTypeException.java -- an invalid event kind exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when the debugger asks for an event request
+  * for a non-existant event
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidEventTypeException
+   extends JdwpException
+ {
+   public InvalidEventTypeException (byte kind)
+   {
+     super (JdwpConstants.Error.INVALID_EVENT_TYPE,
+ 	   "invalid event type (" + kind + ")");
+   }
+ 
+   public InvalidEventTypeException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_EVENT_TYPE, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidFieldException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidFieldException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidFieldException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidFieldException.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,63 ----
+ /* InvalidFieldException.java -- an invalid field id exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when an invalid field id is used by the
+  * debugger
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidFieldException
+   extends JdwpException
+ {
+   public InvalidFieldException (long id)
+   {
+     super (JdwpConstants.Error.INVALID_FIELDID,
+ 	   "invalid field id (" + id + ")");
+   }
+ 
+   public InvalidFieldException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_FIELDID, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidLocationException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidLocationException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidLocationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidLocationException.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,62 ----
+ /* InvalidLocationException.java -- an invalid location exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when the debugger specifies an invalid location
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidLocationException
+   extends JdwpException
+ {
+   public InvalidLocationException (/*something*/)
+   {
+     super (JdwpConstants.Error.INVALID_LOCATION,
+ 	   "invalid location (" + "something" + ")");
+   }
+ 
+   public InvalidLocationException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_LOCATION, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidMethodException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidMethodException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidMethodException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidMethodException.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,63 ----
+ /* InvalidMethodException.java -- an invalid method id exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when an invalid method id is used
+  * by the debugger
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidMethodException
+   extends JdwpException
+ {
+   public InvalidMethodException (long id)
+   {
+     super (JdwpConstants.Error.INVALID_METHODID,
+ 	   "invalid method id (" + id + ")");
+   }
+ 
+   public InvalidMethodException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_METHODID, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidObjectException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidObjectException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidObjectException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidObjectException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* InvalidObjectException.java -- an invalid object id exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when an invalid object id is used by
+  * the debugger
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidObjectException
+   extends JdwpException
+ {
+   public InvalidObjectException (long id)
+   {
+     super (JdwpConstants.Error.INVALID_OBJECT,
+ 	   "invalid object id (" + id + ")");
+   }
+ 
+   public InvalidObjectException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_OBJECT, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidStringException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidStringException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidStringException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidStringException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /* InvalidStringException.java -- an invalid string exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when the debugger uses an invalid String.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidStringException
+   extends JdwpException
+ {
+   public InvalidStringException (String str)
+   {
+     super (JdwpConstants.Error.INVALID_STRING,
+ 	   "invalid string (" + str + ")");
+   }
+ 
+   public InvalidStringException (long id)
+   {
+     super (JdwpConstants.Error.INVALID_STRING,
+ 	   "invalid string id (" + id + ")");
+   }
+ 
+   public InvalidStringException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_STRING, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidThreadException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidThreadException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidThreadException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidThreadException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* InvalidThreadException.java -- an invalid thread exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when an invalid thread is used
+  * by the debugger
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidThreadException
+   extends JdwpException
+ {
+   public InvalidThreadException (long id)
+   {
+     super (JdwpConstants.Error.INVALID_THREAD,
+ 	   "invalid thread id (" + id + ")");
+   }
+ 
+   public InvalidThreadException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_THREAD, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidThreadGroupException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidThreadGroupException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/InvalidThreadGroupException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/InvalidThreadGroupException.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,63 ----
+ /* InvalidThreadGroupException.java -- an invalid thread group exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when an invalid thread group is used
+  * by the debugger
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class InvalidThreadGroupException
+   extends JdwpException
+ {
+   public InvalidThreadGroupException (long id)
+   {
+     super (JdwpConstants.Error.INVALID_THREAD_GROUP,
+ 	   "invalid thread group id (" + id + ")");
+   }
+ 
+   public InvalidThreadGroupException (Throwable t)
+   {
+     super (JdwpConstants.Error.INVALID_THREAD_GROUP, t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/JdwpException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/JdwpException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/JdwpException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/JdwpException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,86 ----
+ /* JdwpException.java -- an exception base class for all JDWP exceptions
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ /**
+  * A base class exception for all JDWP back-end exceptions
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class JdwpException
+   extends Exception
+ {
+   // The integer error code defined by JDWP
+   private short _errorCode;
+ 
+   /**
+    * Constructs a new <code>JdwpException</code> with the
+    * given error code and given cause
+    *
+    * @param code  the JDWP error code
+    * @param t     the cause of the exception
+    */
+   public JdwpException (short code, Throwable t)
+   {
+     super (t);
+     _errorCode = code;
+   }
+ 
+   /**
+    * Constructs a new <code>JdwpException</code> with the
+    * given error code and string error message
+    *
+    * @param code  the JDWP error code
+    * @param str   an error message
+    */
+   public JdwpException (short code, String str)
+   {
+     super (str);
+     _errorCode = code;
+   }
+ 
+   /**
+    * Returns the JDWP error code represented by this exception
+    */
+   public short getErrorCode ()
+   {
+     return _errorCode;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/JdwpIllegalArgumentException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/JdwpIllegalArgumentException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/JdwpIllegalArgumentException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/JdwpIllegalArgumentException.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,62 ----
+ /* JdwpIllegalArgumentException.java -- an illegal argument exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An illegal argument exception for JDWP.
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class JdwpIllegalArgumentException
+   extends JdwpException
+ {
+   /**
+    * Constructs a new <code>JdwpIllegalArgumentException</code> with
+    * the given error code and given cause
+    *
+    * @param msg  a message explaining the illegal argument
+    */
+   public JdwpIllegalArgumentException (String msg)
+   {
+     super (JdwpConstants.Error.ILLEGAL_ARGUMENT, msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/JdwpInternalErrorException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/JdwpInternalErrorException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/JdwpInternalErrorException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/JdwpInternalErrorException.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,62 ----
+ /* JdwpInternalErrorException.java -- an internal error exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown by the JDWP back-end when an unusual runtime
+  * error occurs internally
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class JdwpInternalErrorException
+   extends JdwpException
+ {
+   public JdwpInternalErrorException(Throwable cause)
+   {
+     super(JdwpConstants.Error.INTERNAL, cause);
+   }
+ 
+   public JdwpInternalErrorException(String msg)
+   {
+     super(JdwpConstants.Error.INTERNAL, msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/NotImplementedException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/NotImplementedException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/NotImplementedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/NotImplementedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* NotImplementedException.java -- an exception for unimplemented JDWP
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown by virtual machines when functionality
+  * or features are not implemented
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class NotImplementedException
+   extends JdwpException
+ {
+   public NotImplementedException (String feature)
+   {
+     super (JdwpConstants.Error.NOT_IMPLEMENTED,
+ 	   feature + " is not yet implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/VmDeadException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/VmDeadException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/exception/VmDeadException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/exception/VmDeadException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,55 ----
+ /* VmDeadException.java -- dead virtual machine exception
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.classpath.jdwp.exception;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * An exception thrown when the virtual machine is dead
+  *
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class VmDeadException
+   extends JdwpException
+ {
+   public VmDeadException ()
+   {
+     super (JdwpConstants.Error.VM_DEAD, "Virtual machine is dead");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ArrayId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ArrayId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ArrayId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ArrayId.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* ArrayId.java -- array object IDs
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * A class which represents a JDWP array id
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class ArrayId
+   extends ObjectId
+ {
+   // Arrays are handled a little differently than other IDs
+   //public static final Class typeClass = UNDEFINED
+ 
+   /**
+    * Constructs a new <code>ArrayId</code>
+    */
+   public ArrayId ()
+   {
+     super (JdwpConstants.Tag.ARRAY);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ArrayReferenceTypeId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ArrayReferenceTypeId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ArrayReferenceTypeId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ArrayReferenceTypeId.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* ArrayReferenceTypeId.java -- array reference type ids
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * A reference type ID representing java arrays
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class ArrayReferenceTypeId
+   extends ReferenceTypeId
+ {
+   /**
+    * Constructs a new <code>ArrayReferenceTypeId</code>
+    */
+   public ArrayReferenceTypeId ()
+   {
+     super (JdwpConstants.TypeTag.ARRAY);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ClassLoaderId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ClassLoaderId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ClassLoaderId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ClassLoaderId.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,82 ----
+ /* ClassLoaderId.java -- class loader IDs
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.InvalidClassLoaderException;
+ 
+ /**
+  * A class which represents a JDWP thread id
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class ClassLoaderId
+   extends ObjectId
+ {
+   /**
+    * The object class that this id represents
+    */
+   public static final Class typeClass = ClassLoader.class;
+ 
+   /**
+    * Constructs a new <code>ClassLoaderId</code>
+    */
+   public ClassLoaderId ()
+   {
+     super (JdwpConstants.Tag.CLASS_LOADER);
+   }
+ 
+   /**
+    * Gets the ClassLoader represented by this ID
+    *
+    * @throws InvalidClassLoaderException if ClassLoader is garbage collected,
+    *           or otherwise invalid
+    */
+   public ClassLoader getClassLoader ()
+     throws InvalidClassLoaderException
+   {
+     ClassLoader cl = (ClassLoader) _reference.get ();
+ 
+     if (cl == null)
+       throw new InvalidClassLoaderException (getId ());
+ 
+     return cl;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ClassObjectId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ClassObjectId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ClassObjectId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ClassObjectId.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,82 ----
+ /* ClassObjectId.java -- class object IDs
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.InvalidClassException;
+ 
+ /**
+  * A class which represents a JDWP class object id
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class ClassObjectId
+   extends ObjectId
+ {
+   /**
+    * The object class that this id represents
+    */
+   public static final Class typeClass = Class.class;
+ 
+   /**
+    * Constructs a new <code>ClassObjectId</code>
+    */
+   public ClassObjectId ()
+   {
+     super (JdwpConstants.Tag.CLASS_OBJECT);
+   }
+ 
+   /**
+    * Gets the Class object represented by this ID
+    *
+    * @throws InvalidClassException if Class is garbage collected,
+    *           or otherwise invalid
+    */
+   public Class getClassObject ()
+     throws InvalidClassException
+   {
+     Class cl = (Class) _reference.get ();
+ 
+     if (cl == null)
+       throw new InvalidClassException (getId ());
+ 
+     return cl;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ClassReferenceTypeId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ClassReferenceTypeId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ClassReferenceTypeId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ClassReferenceTypeId.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* ClassReferenceTypeId.java -- class reference type ids
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * A reference type ID representing java classes
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class ClassReferenceTypeId
+   extends ReferenceTypeId
+ {
+   /**
+    * Constructs a new <code>ClassReferenceTypeId</code>
+    */
+   public ClassReferenceTypeId ()
+   {
+     super (JdwpConstants.TypeTag.CLASS);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/InterfaceReferenceTypeId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/InterfaceReferenceTypeId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/InterfaceReferenceTypeId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/InterfaceReferenceTypeId.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* InterfaceReferenceTypeId.java -- interface reference type ids
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ 
+ /**
+  * A reference type ID representing java interfaces
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class InterfaceReferenceTypeId
+   extends ReferenceTypeId
+ {
+   /**
+    * Constructs a new <code>InterfaceReferenceTypeId</code>
+    */
+   public InterfaceReferenceTypeId ()
+   {
+     super (JdwpConstants.TypeTag.INTERFACE);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/JdwpId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/JdwpId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/JdwpId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/JdwpId.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,151 ----
+ /* JdwpId.java -- base class for all object ID types
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.lang.ref.SoftReference;
+ 
+ /**
+  * A baseclass for all object types reported to the debugger
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public abstract class JdwpId
+ {
+   /**
+    * ID assigned to this object
+    */
+   protected long _id;
+ 
+   /**
+    * Tag of ID's type (see {@link gnu.classpath.jdwp.JdwpConstants.Tag})
+    * for object-like IDs or the type tag (see {@link
+    * gnu.classpath.JdwpConstants.TypeTag}) for reference type IDs.
+    */
+   private byte _tag;
+ 
+   /**
+    * The object/class represented by this Id
+    */
+   protected SoftReference _reference;
+ 
+   /**
+    * Constructs an empty <code>JdwpId</code>
+    */
+   public JdwpId (byte tag)
+   {
+     _tag = tag;
+   }
+ 
+   /**
+    * Sets the id for this object reference
+    */
+   public void setId (long id)
+   {
+     _id = id;
+   }
+ 
+   /**
+    * Returns the id for this object reference
+    */
+   public long getId ()
+   {
+     return _id;
+   }
+ 
+   /**
+    * Gets the object/class reference for this ID
+    *
+    * @returns a refernce to the object or class
+    */
+   public SoftReference getReference ()
+   {
+     return _reference;
+   }
+ 
+   /**
+    * Sets the object/class reference for this ID
+    *
+    * @param ref a refernce to the object or class
+    */
+   public void setReference (SoftReference ref)
+   {
+     _reference = ref;
+   }
+ 
+   /**
+    * Compares two object ids for equality. Two object ids
+    * are equal if they point to the same type and contain to
+    * the same id number. 
+    */
+   public boolean equals (JdwpId id)
+   {
+     return (id.getId () == getId ());
+   }
+ 
+   /**
+    * Returns size of this type (used by IDSizes)
+    */
+   public abstract int size ();
+ 
+   /**
+    * Writes the contents of this type to the <code>DataOutputStream</code>
+    * @param  outStream    the <code>DataOutputStream</code> to use
+    * @throws IOException  when an error occurs on the <code>OutputStream</code>
+    */
+   public abstract void write (DataOutputStream outStream)
+     throws IOException;
+ 
+   /**
+    * Writes the contents of this type to the output stream, preceded
+    * by a one-byte tag for tagged object IDs or type tag for
+    * reference type IDs.
+    *
+    * @param  outStream    the <code>DataOutputStream</code> to use
+    * @throws IOException  when an error occurs on the <code>OutputStream</code>
+    */
+   public void writeTagged (DataOutputStream outStream)
+     throws IOException
+   {
+     outStream.writeByte (_tag);
+     write (outStream);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ObjectId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ObjectId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ObjectId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ObjectId.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,139 ----
+ /* ObjectId.java -- object IDs
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.InvalidObjectException;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * This is a base class for all ObjectID-like entities in JDWP,
+  * inculding Objects, ClassObject, ClassLoader, Thread, ThreadGroup,
+  * etc.
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class ObjectId
+   extends JdwpId
+ {
+   /**
+    * The object class that this id represents
+    */
+   public static final Class typeClass = Object.class;
+ 
+   // Handle to disable garbage collection
+   private Object _handle;
+ 
+   /**
+    * Constructs a new <code>ObjectId</code>
+    */
+   public ObjectId ()
+   {
+     super (JdwpConstants.Tag.OBJECT);
+   }
+ 
+   /**
+    * Constructs a new <code>ObjectId</code> of the
+    * given type.
+    *
+    * @param  tag  the tag of this type of object ID
+    */
+   public ObjectId (byte tag)
+   {
+     super (tag);
+   }
+ 
+   /**
+    * Returns the size of this id type
+    */
+   public int size ()
+   {
+     return 8;
+   }
+ 
+   /**
+    * Returns the object referred to by this ID
+    *
+    * @returns the object
+    * @throws InvalidObjectException if the object was garbage collected
+    *           or is invalid
+    */
+   public Object getObject ()
+     throws InvalidObjectException
+   {
+     Object obj = _reference.get ();
+     if (obj == null)
+       throw new InvalidObjectException (_id);
+ 
+     return obj;
+   }
+ 
+   /**
+    * Writes the id to the stream
+    *
+    * @param outStream  the stream to which to write
+    * @throws IOException  when an error occurs on the <code>OutputStream</code>
+    */
+   public void write (DataOutputStream outStream)
+     throws IOException
+   {
+     // All we need to do is write out our id as an 8-byte integer
+     outStream.writeLong (_id);
+   }
+ 
+   /**
+    * Disable garbage collection on object
+    */
+   public void disableCollection ()
+     throws InvalidObjectException
+   {
+     _handle = getObject ();
+   }
+ 
+   /**
+    * Enable garbage collection on object
+    */
+   public void enableCollection ()
+   {
+     _handle = null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ReferenceTypeId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ReferenceTypeId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ReferenceTypeId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ReferenceTypeId.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,99 ----
+ /* ReferenceTypeId.java -- a base class for all reference type IDs
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.exception.InvalidClassException;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * Base class for reference type IDs. This class usurps
+  * <code>JdwpId</code>'s tag member for its own use (type tag).
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class ReferenceTypeId
+   extends JdwpId
+ {
+   /**
+    * Constructor used by {Array,Interface,Class}ReferenceTypeId
+    */
+   public ReferenceTypeId (byte tag)
+   {
+     super (tag);
+   }
+ 
+   /**
+    * Returns the size of this ID type
+    */
+   public int size ()
+   {
+     return 8;
+   }
+ 
+   /**
+    * Gets the class associated with this ID
+    *
+    * @returns the class
+    * @throws InvalidClassException if the class is not valid
+    */
+   public Class getType ()
+     throws InvalidClassException
+   {
+     Class clazz = (Class) _reference.get ();
+     if (clazz == null)
+       throw new InvalidClassException (_id);
+ 
+     return clazz;
+   }
+ 
+   /**
+    * Outputs the reference type ID to the given output stream
+    *
+    * @param  outStream    the stream to which to write the data
+    * @throws IOException  for errors writing to the stream
+    */
+   public void write (DataOutputStream outStream)
+     throws IOException
+   {
+     outStream.writeLong (_id);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/StringId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/StringId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/StringId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/StringId.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,82 ----
+ /* StringId.java -- string IDs
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.InvalidStringException;
+ 
+ /**
+  * A class which represents a JDWP string id
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class StringId
+   extends ObjectId
+ {
+   /**
+    * The object class that this id represents
+    */
+   public static final Class typeClass = String.class;
+ 
+   /**
+    * Constructs a new <code>StringId</code>
+    */
+   public StringId ()
+   {
+     super (JdwpConstants.Tag.STRING);
+   }
+ 
+   /**
+    * Gets the String represented by this ID
+    *
+    * @throws InvalidStringException if String is garbage collected,
+    *           or otherwise invalid
+    */
+   public String getString ()
+     throws InvalidStringException
+   {
+     String string = (String) _reference.get ();
+ 
+     if (string == null)
+       throw new InvalidStringException (getId ());
+ 
+     return string;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ThreadGroupId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ThreadGroupId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ThreadGroupId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ThreadGroupId.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,82 ----
+ /* ThreadGroupId.java -- thread group IDs
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.InvalidThreadGroupException;
+ 
+ /**
+  * A class which represents a JDWP thread group id
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class ThreadGroupId
+   extends ObjectId
+ {
+   /**
+    * The object class that this id represents
+    */
+   public static final Class typeClass = ThreadGroup.class;
+ 
+   /**
+    * Constructs a new <code>ThreadGroupId</code>
+    */
+   public ThreadGroupId ()
+   {
+     super (JdwpConstants.Tag.THREAD_GROUP);
+   }
+ 
+   /**
+    * Gets the thread group represented by this ID
+    *
+    * @throws InvalidThreadGroupException if the group is invalid
+    *           or garbage collected
+    */
+   public ThreadGroup getThreadGroup ()
+     throws InvalidThreadGroupException
+   {
+     ThreadGroup group = (ThreadGroup) _reference.get ();
+ 
+     if (group == null)
+       throw new InvalidThreadGroupException (getId ());
+ 
+     return group;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ThreadId.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ThreadId.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/id/ThreadId.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/id/ThreadId.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,85 ----
+ /* ThreadId.java -- thread IDs
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.id;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.InvalidThreadException;
+ 
+ /**
+  * A class which represents a JDWP thread id
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class ThreadId
+   extends ObjectId
+ {
+   /**
+    * The object class that this id represents
+    */
+   public static final Class typeClass = Thread.class;
+ 
+   /**
+    * Constructs a new <code>ThreadId</code>
+    */
+   public ThreadId ()
+   {
+     super (JdwpConstants.Tag.THREAD);
+   }
+ 
+   /**
+    * Gets the Thread represented by this ID
+    *
+    * @throws InvalidThreadException if thread is garbage collected,
+    *           exited, or otherwise invalid
+    */
+   public Thread getThread ()
+     throws InvalidThreadException
+   {
+     Thread thread = (Thread) _reference.get ();
+ 
+     /* Spec says if thread is null, not valid, or exited,
+        throw invalid thread */
+     // FIXME: not valid? exited? Is this check valid?
+     if (thread == null || !thread.isAlive ())
+       throw new InvalidThreadException (getId ());
+ 
+     return thread;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,175 ----
+ /* ArrayReferenceCommandSet.java -- class to implement the Array
+    Reference Command Set
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.InvalidObjectException;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.util.Value;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.lang.reflect.Array;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the ArrayReference Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class ArrayReferenceCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+     throws JdwpException
+   {
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.ArrayReference.LENGTH:
+             executeLength(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ArrayReference.GET_VALUES:
+             executeGetValues(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ArrayReference.SET_VALUES:
+             executeSetValues(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+               " not found in Array Reference Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeLength(ByteBuffer bb, DataOutputStream os)
+     throws InvalidObjectException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     Object array = oid.getObject();
+     os.writeInt(Array.getLength(array));
+   }
+ 
+   private void executeGetValues(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     Object array = oid.getObject();
+     int first = bb.getInt();
+     int length = bb.getInt();
+ 
+     // We need to write out the byte signifying the type of array first
+     Class clazz = array.getClass().getComponentType();
+ 
+     // Uugh, this is a little ugly but it's the only time we deal with
+     // arrayregions
+     if (clazz == byte.class)
+       os.writeByte(JdwpConstants.Tag.BYTE);
+     else if (clazz == char.class)
+       os.writeByte(JdwpConstants.Tag.CHAR);
+     else if (clazz == float.class)
+       os.writeByte(JdwpConstants.Tag.FLOAT);
+     else if (clazz == double.class)
+       os.writeByte(JdwpConstants.Tag.DOUBLE);
+     else if (clazz == int.class)
+       os.writeByte(JdwpConstants.Tag.BYTE);
+     else if (clazz == long.class)
+       os.writeByte(JdwpConstants.Tag.LONG);
+     else if (clazz == short.class)
+       os.writeByte(JdwpConstants.Tag.SHORT);
+     else if (clazz == void.class)
+       os.writeByte(JdwpConstants.Tag.VOID);
+     else if (clazz == boolean.class)
+       os.writeByte(JdwpConstants.Tag.BOOLEAN);
+     else if (clazz.isArray())
+       os.writeByte(JdwpConstants.Tag.ARRAY);
+     else if (String.class.isAssignableFrom(clazz))
+       os.writeByte(JdwpConstants.Tag.STRING);
+     else if (Thread.class.isAssignableFrom(clazz))
+       os.writeByte(JdwpConstants.Tag.THREAD);
+     else if (ThreadGroup.class.isAssignableFrom(clazz))
+       os.writeByte(JdwpConstants.Tag.THREAD_GROUP);
+     else if (ClassLoader.class.isAssignableFrom(clazz))
+       os.writeByte(JdwpConstants.Tag.CLASS_LOADER);
+     else if (Class.class.isAssignableFrom(clazz))
+       os.writeByte(JdwpConstants.Tag.CLASS_OBJECT);
+     else
+       os.writeByte(JdwpConstants.Tag.OBJECT);
+ 
+     // Write all the values, primitives should be untagged and Objects must be
+     // tagged
+     for (int i = first; i < first + length; i++)
+       {
+         Object value = Array.get(array, i);
+         if (clazz.isPrimitive())
+           Value.writeUntaggedValue(os, value);
+         else
+           Value.writeTaggedValue(os, value);
+       }
+   }
+ 
+   private void executeSetValues(ByteBuffer bb, DataOutputStream os)
+     throws IOException, JdwpException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     Object array = oid.getObject();
+     int first = bb.getInt();
+     int length = bb.getInt();
+     Class type = array.getClass().getComponentType();
+     for (int i = first; i < first + length; i++)
+       {
+         Object value = Value.getUntaggedObj(bb, type);
+         Array.set(array, i, value);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ArrayTypeCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ArrayTypeCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ArrayTypeCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ArrayTypeCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,105 ----
+ /* ArrayTypeCommandSet.java -- class to implement the ArrayType Command Set
+    Copyright (C) 2005 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.lang.reflect.Array;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the ArrayType Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class ArrayTypeCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+     throws JdwpException
+   {
+ 
+     // Although there's only a single command to choose from we still use
+     // a switch to maintain consistency with the rest of the CommandSets
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.ArrayType.NEW_INSTANCE:
+             executeNewInstance(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+               " not found in ArrayType Command Set.");
+         }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   public void executeNewInstance(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class arrayType = refId.getType();
+     Class componentType = arrayType.getComponentType();
+ 
+     int length = bb.getInt();
+     Object newArray = Array.newInstance(componentType, length);
+     ObjectId oid = idMan.getObjectId(newArray);
+ 
+     // Since this array isn't referenced anywhere we'll disable garbage
+     // collection on it so it's still around when the debugger gets back to it.
+     oid.disableCollection();
+     oid.writeTagged(os);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ClassLoaderReferenceCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,108 ----
+ /* ClassLoaderReferenceCommandSet.java -- class to implement the 
+    ClassLoaderReference Command Set
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ 
+ /**
+  * A class representing the ClassLoaderReference Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class ClassLoaderReferenceCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+       throws JdwpException
+   {
+ 
+     // Although there's only a single command to choose from we still use
+     // a switch to maintain consistency with the rest of the CommandSets
+    try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.ClassLoaderReference.VISIBLE_CLASSES:
+             executeVisibleClasses(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+             " not found in ClassLoaderReference Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+    return false;
+   }
+ 
+   public void executeVisibleClasses(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ObjectId oId = idMan.readObjectId(bb);
+     ClassLoader cl = (ClassLoader) oId.getObject();
+     ArrayList loadRequests = VMVirtualMachine.getLoadRequests(cl);
+     os.writeInt(loadRequests.size());
+     for (Iterator iter = loadRequests.iterator(); iter.hasNext();)
+       {
+         Class clazz = (Class)iter.next();
+         ReferenceTypeId refId = idMan.getReferenceTypeId(clazz);
+         refId.writeTagged(os);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ClassObjectReferenceCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ClassObjectReferenceCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ClassObjectReferenceCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ClassObjectReferenceCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,97 ----
+ /* ClassObjectReferenceCommandSet.java -- class to implement the 
+    ClassObjectReference Command Set
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the ClassObjectReference Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class ClassObjectReferenceCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+     throws JdwpException
+   {
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.ClassObjectReference.REFLECTED_TYPE:
+             executeReflectedType(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+               " not found in ClassObject Reference Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   public void executeReflectedType(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     Class clazz = (Class) oid.getObject();
+ 
+     // The difference between a ClassObjectId and a ReferenceTypeId is one is
+     // stored as an ObjectId and the other as a ReferenceTypeId.
+     ReferenceTypeId refId = idMan.getReferenceTypeId(clazz);
+     refId.writeTagged(os);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ClassTypeCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ClassTypeCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ClassTypeCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ClassTypeCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,219 ----
+ /* ClassTypeCommandSet.java -- class to implement the ClassType
+    Command Set
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.InvalidFieldException;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.util.MethodResult;
+ import gnu.classpath.jdwp.util.Value;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Method;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the ClassType Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class ClassTypeCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+       throws JdwpException
+   {
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.ClassType.SUPERCLASS:
+             executeSuperclass(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ClassType.SET_VALUES:
+             executeSetValues(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ClassType.INVOKE_METHOD:
+             executeInvokeMethod(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ClassType.NEW_INSTANCE:
+             executeNewInstance(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+               " not found in ClassType Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeSuperclass(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+     Class superClazz = clazz.getSuperclass();
+ 
+     ReferenceTypeId clazzId = idMan.getReferenceTypeId(superClazz);
+     clazzId.write(os);
+   }
+ 
+   private void executeSetValues(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+ 
+     // We don't actually seem to need this...
+     Class clazz = refId.getType();
+ 
+     int numValues = bb.getInt();
+ 
+     for (int i = 0; i < numValues; i++)
+       {
+         ObjectId fieldId = idMan.readObjectId(bb);
+         Field field = (Field) (fieldId.getObject());
+         Object value = Value.getUntaggedObj(bb, field.getType());
+         try
+           {
+             field.setAccessible(true); // Might be a private field
+             field.set(null, value);
+           }
+         catch (IllegalArgumentException ex)
+           {
+             throw new InvalidFieldException(ex);
+           }
+         catch (IllegalAccessException ex)
+           { // Since we set it as accessible this really shouldn't happen
+             throw new JdwpInternalErrorException(ex);
+           }
+       }
+   }
+ 
+   private void executeInvokeMethod(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     MethodResult mr = invokeMethod(bb);
+ 
+     Object value = mr.getReturnedValue();
+     Exception exception = mr.getThrownException();
+     ObjectId eId = idMan.getObjectId(exception);
+ 
+     Value.writeTaggedValue(os, value);
+     eId.writeTagged(os);
+   }
+ 
+   private void executeNewInstance(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     MethodResult mr = invokeMethod(bb);
+ 
+     Object obj = mr.getReturnedValue();
+     ObjectId oId = idMan.getObjectId(obj);
+     Exception exception = mr.getThrownException();
+     ObjectId eId = idMan.getObjectId(exception);
+ 
+     oId.writeTagged(os);
+     eId.writeTagged(os);
+   }
+ 
+   /**
+    * Execute the static method and return the resulting MethodResult.
+    */
+   private MethodResult invokeMethod(ByteBuffer bb) throws JdwpException,
+       IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     ObjectId tId = idMan.readObjectId(bb);
+     Thread thread = (Thread) tId.getObject();
+ 
+     ObjectId mId = idMan.readObjectId(bb);
+     Method method = (Method) mId.getObject();
+ 
+     int args = bb.getInt();
+     Object[] values = new Object[args];
+ 
+     for (int i = 0; i < args; i++)
+       {
+         values[i] = Value.getObj(bb);
+       }
+ 
+     int invokeOpts = bb.getInt();
+     boolean suspend = ((invokeOpts
+ 			& JdwpConstants.InvokeOptions.INVOKE_SINGLE_THREADED)
+ 		       != 0);
+     try
+       {
+         if (suspend)
+ 	  VMVirtualMachine.suspendAllThreads ();
+ 
+         MethodResult mr = VMVirtualMachine.executeMethod(null, thread,
+ 							 clazz, method,
+ 							 values, false);
+         if (suspend)
+ 	  VMVirtualMachine.resumeAllThreads ();
+ 
+         return mr;
+       }
+     catch (Exception ex)
+       {
+         if (suspend)
+ 	  VMVirtualMachine.resumeAllThreads ();
+ 
+         throw new JdwpInternalErrorException(ex);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/CommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/CommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/CommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/CommandSet.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,74 ----
+ /* CommandSet.java -- An interface defining JDWP Command Sets
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.VMIdManager;
+ 
+ import java.io.DataOutputStream;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing a JDWP Command Set. This class serves as a generic
+  * interface for all Command Sets types used by JDWP.
+  *
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public abstract class CommandSet
+ {
+   /**
+    * The VM's ID manager
+    */
+   protected final VMIdManager idMan = VMIdManager.getDefault ();
+ 
+   /**
+    * Runs the given command with the data in distr and writes the data for the
+    * reply packet to ostr.
+    * 
+    * @param bb holds the data portion of the Command Packet
+    * @param os data portion of the Reply Packet will be written here
+    * @param command the command field of the Command Packet
+    * @return true if the JDWP layer should shut down in response to this packet
+    * @throws JdwpException command wasn't carried out successfully
+    */
+   public abstract boolean runCommand(ByteBuffer bb, DataOutputStream os,
+ 				     byte command) 
+     throws JdwpException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/EventRequestCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/EventRequestCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/EventRequestCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/EventRequestCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,197 ----
+ /* EventRequestCommandSet.java -- class to implement the EventRequest Command
+    Set
+    Copyright (C) 2005 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.event.EventManager;
+ import gnu.classpath.jdwp.event.EventRequest;
+ import gnu.classpath.jdwp.event.filters.ClassExcludeFilter;
+ import gnu.classpath.jdwp.event.filters.ClassMatchFilter;
+ import gnu.classpath.jdwp.event.filters.ClassOnlyFilter;
+ import gnu.classpath.jdwp.event.filters.ConditionalFilter;
+ import gnu.classpath.jdwp.event.filters.CountFilter;
+ import gnu.classpath.jdwp.event.filters.ExceptionOnlyFilter;
+ import gnu.classpath.jdwp.event.filters.FieldOnlyFilter;
+ import gnu.classpath.jdwp.event.filters.IEventFilter;
+ import gnu.classpath.jdwp.event.filters.InstanceOnlyFilter;
+ import gnu.classpath.jdwp.event.filters.LocationOnlyFilter;
+ import gnu.classpath.jdwp.event.filters.StepFilter;
+ import gnu.classpath.jdwp.event.filters.ThreadOnlyFilter;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.id.ThreadId;
+ import gnu.classpath.jdwp.util.JdwpString;
+ import gnu.classpath.jdwp.util.Location;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the EventRequest Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class EventRequestCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+       throws JdwpException
+   {
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.EventRequest.SET:
+             executeSet(bb, os);
+             break;
+           case JdwpConstants.CommandSet.EventRequest.CLEAR:
+             executeClear(bb, os);
+             break;
+           case JdwpConstants.CommandSet.EventRequest.CLEAR_ALL_BREAKPOINTS:
+             executeClearAllBreakpoints(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command + 
+               " not found in EventRequest Reference Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeSet(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     byte eventKind = bb.get();
+     byte suspendPolicy = bb.get();
+     int modifiers = bb.getInt();
+ 
+     EventRequest eventReq = new EventRequest(eventKind, suspendPolicy);
+     IEventFilter filter = null;
+     ReferenceTypeId refId;
+     for (int i = 0; i < modifiers; i++)
+       {
+         byte modKind = bb.get();
+         switch (modKind)
+           {
+           case JdwpConstants.ModKind.COUNT:
+             filter = new CountFilter(bb.getInt());
+             break;
+           case JdwpConstants.ModKind.CONDITIONAL:
+             filter = new ConditionalFilter(idMan.readObjectId(bb));
+             break;
+           case JdwpConstants.ModKind.THREAD_ONLY:
+             filter = new ThreadOnlyFilter((ThreadId) idMan.readObjectId(bb));
+             break;
+           case JdwpConstants.ModKind.CLASS_ONLY:
+             filter = new ClassOnlyFilter(idMan.readReferenceTypeId(bb));
+             break;
+           case JdwpConstants.ModKind.CLASS_MATCH:
+             filter = new ClassMatchFilter(JdwpString.readString(bb));
+             break;
+           case JdwpConstants.ModKind.CLASS_EXCLUDE:
+             filter = new ClassExcludeFilter(JdwpString.readString(bb));
+             break;
+           case JdwpConstants.ModKind.LOCATION_ONLY:
+             filter = new LocationOnlyFilter(new Location(bb));
+             break;
+           case JdwpConstants.ModKind.EXCEPTION_ONLY:
+             long id = bb.getLong();
+             if (id == 0)
+               refId = null;
+             else
+               refId = idMan.readReferenceTypeId(bb);
+             boolean caught = (bb.get() == 0) ? false : true;
+             boolean unCaught = (bb.get() == 0) ? false : true;
+             filter = new ExceptionOnlyFilter(refId, caught, unCaught);
+             break;
+           case JdwpConstants.ModKind.FIELD_ONLY:
+             refId = idMan.readReferenceTypeId(bb);
+             ReferenceTypeId fieldId = idMan.readReferenceTypeId(bb);
+             filter = new FieldOnlyFilter(refId, fieldId);
+             break;
+           case JdwpConstants.ModKind.STEP:
+             ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+             int size = bb.getInt();
+             int depth = bb.getInt();
+             filter = new StepFilter(tid, size, depth);
+             break;
+           case JdwpConstants.ModKind.INSTANCE_ONLY:
+             ObjectId oid = idMan.readObjectId(bb);
+             filter = new InstanceOnlyFilter(oid);
+             break;
+           default:
+             throw new NotImplementedException("modKind " + modKind
+                                               + " is not implemented.");
+           }
+         eventReq.addFilter(filter);
+       }
+ 
+     EventManager.getDefault().requestEvent(eventReq);
+     os.writeInt(eventReq.getId());
+ 
+   }
+ 
+   private void executeClear(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     byte eventKind = bb.get();
+     int requestId = bb.getInt();
+     EventManager.getDefault().deleteRequest(eventKind, requestId);
+   }
+ 
+   private void executeClearAllBreakpoints(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     byte eventKind = bb.get ();
+     EventManager.getDefault().clearRequests (eventKind);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/FieldCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/FieldCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/FieldCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/FieldCommandSet.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,67 ----
+ /* FieldCommandSet.java -- class to implement the Field Command Set
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ 
+ import java.io.DataOutputStream;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the Field Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class FieldCommandSet
+   extends CommandSet
+ {
+   /**
+    * There are no commands for this CommandSet at this time so we just throw a
+    * NotImplementedException whenever it's called.
+    * 
+    * @throws JdwpException An exception will always be thrown
+    */
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+     throws JdwpException
+   {
+     throw new NotImplementedException(
+       "No commands for command set Field implemented.");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/InterfaceTypeCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/InterfaceTypeCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/InterfaceTypeCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/InterfaceTypeCommandSet.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,68 ----
+ /* InterfaceTypeCommandSet.java -- class to implement the InterfaceType
+    Command Set
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ 
+ import java.io.DataOutputStream;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the InterfaceType Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class InterfaceTypeCommandSet
+   extends CommandSet
+ {
+   /**
+    * There are no commands for this CommandSet at this time so we just throw a
+    * NotImplementedException whenever it's called.
+    * 
+    * @throws JdwpException An exception will always be thrown
+    */
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+     throws JdwpException
+   {
+     throw new NotImplementedException(
+       "No commands for command set InterfaceType implemented.");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,153 ----
+ /* MethodCommandSet.java -- class to implement the Method Command Set
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.util.LineTable;
+ import gnu.classpath.jdwp.util.VariableTable;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.lang.reflect.Method;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the Method Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class MethodCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+       throws JdwpException
+   {
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.Method.LINE_TABLE:
+             executeLineTable(bb, os);
+             break;
+           case JdwpConstants.CommandSet.Method.VARIABLE_TABLE:
+             executeVariableTable(bb, os);
+             break;
+           case JdwpConstants.CommandSet.Method.BYTE_CODES:
+             executeByteCodes(bb, os);
+             break;
+           case JdwpConstants.CommandSet.Method.IS_OBSOLETE:
+             executeIsObsolete(bb, os);
+             break;
+           case JdwpConstants.CommandSet.Method.VARIABLE_TABLE_WITH_GENERIC:
+             executeVariableTableWithGeneric(bb, os);
+             break;
+           default:
+             throw new NotImplementedException(
+               "Command " + command + " not found in Method Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeLineTable(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     ObjectId oid = idMan.readObjectId(bb);
+     Method method = (Method) oid.getObject();
+ 
+     LineTable lt = VMVirtualMachine.getLineTable(clazz, method);
+     lt.write(os);
+   }
+ 
+   private void executeVariableTable(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     ObjectId oid = idMan.readObjectId(bb);
+     Method method = (Method) oid.getObject();
+ 
+     VariableTable vt = VMVirtualMachine.getVarTable(clazz, method);
+     vt.write(os);
+   }
+ 
+   private void executeByteCodes(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException
+   {
+     // This command is optional, determined by VirtualMachines CapabilitiesNew
+     // so we'll leave it till later to implement
+     throw new NotImplementedException("Command ByteCodes not implemented.");
+   }
+ 
+   private void executeIsObsolete(ByteBuffer bb, DataOutputStream os)
+       throws IOException
+   {
+     // The debugger is really asking if this method has been redefined using
+     // VirtualMachineCommandSet.RedefineClasses. Since we don't implement that
+     // command the answer to this will always be false.
+     os.writeBoolean(false);
+   }
+ 
+   private void executeVariableTableWithGeneric(ByteBuffer bb,
+                                                DataOutputStream os)
+       throws JdwpException
+   {
+     // We don't have generics yet
+     throw new NotImplementedException(
+       "Command SourceDebugExtension not implemented.");
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,264 ----
+ /* ObjectReferenceCommandSet.java -- class to implement the ObjectReference
+    Command Set
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.InvalidFieldException;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.util.Value;
+ import gnu.classpath.jdwp.util.MethodResult;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Method;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the ObjectReference Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class ObjectReferenceCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+     throws JdwpException
+   {
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.ObjectReference.REFERENCE_TYPE:
+             executeReferenceType(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ObjectReference.GET_VALUES:
+             executeGetValues(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ObjectReference.SET_VALUES:
+             executeSetValues(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ObjectReference.MONITOR_INFO:
+             executeMonitorInfo(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ObjectReference.INVOKE_METHOD:
+             executeInvokeMethod(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ObjectReference.DISABLE_COLLECTION:
+             executeDisableCollection(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ObjectReference.ENABLE_COLLECTION:
+             executeEnableCollection(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ObjectReference.IS_COLLECTED:
+             executeIsCollected(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+               " not found in ObjectReference Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeReferenceType(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     Object obj = oid.getObject();
+     Class clazz = obj.getClass();
+     ReferenceTypeId refId = idMan.getReferenceTypeId(clazz);
+     refId.writeTagged(os);
+   }
+ 
+   private void executeGetValues(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     Object obj = oid.getObject();
+ 
+     int numFields = bb.getInt();
+ 
+     os.writeInt(numFields); // Looks pointless but this is the protocol
+ 
+     for (int i = 0; i < numFields; i++)
+       {
+         Field field = (Field) idMan.readObjectId(bb).getObject();
+         try
+           {
+             field.setAccessible(true); // Might be a private field
+             Object value = field.get(obj);
+             Value.writeTaggedValue(os, value);
+           }
+         catch (IllegalArgumentException ex)
+           {
+             // I suppose this would best qualify as an invalid field then
+             throw new InvalidFieldException(ex);
+           }
+         catch (IllegalAccessException ex)
+           {
+             // Since we set it as accessible this really shouldn't happen
+             throw new JdwpInternalErrorException(ex);
+           }
+       }
+   }
+ 
+   private void executeSetValues(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     Object obj = oid.getObject();
+ 
+     int numFields = bb.getInt();
+ 
+     for (int i = 0; i < numFields; i++)
+       {
+         Field field = (Field) idMan.readObjectId(bb).getObject();
+         Object value = Value.getUntaggedObj(bb, field.getType());
+         try
+           {
+             field.setAccessible(true); // Might be a private field
+             field.set(obj, value);
+           }
+         catch (IllegalArgumentException ex)
+           {
+             // I suppose this would best qualify as an invalid field then
+             throw new InvalidFieldException(ex);
+           }
+         catch (IllegalAccessException ex)
+           {
+             // Since we set it as accessible this really shouldn't happen
+             throw new JdwpInternalErrorException(ex);
+           }
+       }
+   }
+ 
+   private void executeMonitorInfo(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     // This command is optional, determined by VirtualMachines CapabilitiesNew
+     // so we'll leave it till later to implement
+     throw new NotImplementedException(
+       "Command ExecuteMonitorInfo not implemented.");
+ 
+   }
+ 
+   private void executeInvokeMethod(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     Object obj = oid.getObject();
+ 
+     ObjectId tid = idMan.readObjectId(bb);
+     Thread thread = (Thread) tid.getObject();
+ 
+     ReferenceTypeId rid = idMan.readReferenceTypeId(bb);
+     Class clazz = rid.getType();
+ 
+     ObjectId mid = idMan.readObjectId(bb);
+     Method method = (Method) mid.getObject();
+ 
+     int args = bb.getInt();
+     Object[] values = new Object[args];
+ 
+     for (int i = 0; i < args; i++)
+       {
+         values[i] = Value.getObj(bb);
+       }
+ 
+     int invokeOptions = bb.getInt();
+     boolean suspend = ((invokeOptions
+ 			& JdwpConstants.InvokeOptions.INVOKE_SINGLE_THREADED)
+ 		       != 0);
+     if (suspend)
+       {
+ 	// We must suspend all other running threads first
+         VMVirtualMachine.suspendAllThreads ();
+       }
+ 
+     boolean nonVirtual = ((invokeOptions
+ 			   & JdwpConstants.InvokeOptions.INVOKE_NONVIRTUAL)
+ 			  != 0);
+ 
+     MethodResult mr = VMVirtualMachine.executeMethod(obj, thread,
+ 						     clazz, method,
+ 						     values, nonVirtual);
+     Object value = mr.getReturnedValue();
+     Exception exception = mr.getThrownException();
+ 
+     ObjectId eId = idMan.getObjectId(exception);
+     Value.writeTaggedValue(os, value);
+     eId.writeTagged(os);
+   }
+ 
+   private void executeDisableCollection(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     oid.disableCollection();
+   }
+ 
+   private void executeEnableCollection(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     oid.enableCollection();
+   }
+ 
+   private void executeIsCollected(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     boolean collected = (oid.getReference().get () == null);
+     os.writeBoolean(collected);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/PacketProcessor.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/PacketProcessor.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/PacketProcessor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/PacketProcessor.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,217 ----
+ /* PacketProcessor.java -- a thread which processes command packets
+    from the debugger
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.Jdwp;
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.transport.JdwpCommandPacket;
+ import gnu.classpath.jdwp.transport.JdwpConnection;
+ import gnu.classpath.jdwp.transport.JdwpPacket;
+ import gnu.classpath.jdwp.transport.JdwpReplyPacket;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.security.PrivilegedAction;
+ 
+ /**
+  * This class is responsible for processing packets from the
+  * debugger. It waits for an available packet from the connection
+  * ({@link gnu.classpath.jdwp.transport.JdwpConnection}) and then
+  * processes the packet and any reply.
+  *
+  * @author Keith Seitz (keiths@redhat.com)
+  */
+ public class PacketProcessor
+   implements PrivilegedAction
+ {
+   // The connection to the debugger
+   private JdwpConnection _connection;
+   
+   // Shutdown this thread?
+   private boolean _shutdown;
+   
+   // A Mapping of the command set (Byte) to the specific CommandSet
+   private CommandSet[] _sets;
+ 
+   // Contents of the ReplyPackets data field
+   private ByteArrayOutputStream _outputBytes;
+ 
+   // Output stream around _outputBytes
+   private DataOutputStream _os;
+   
+   /**
+    * Constructs a new <code>PacketProcessor</code> object
+    * Connection must be validated before getting here!
+    *
+    * @param con  the connection
+    */
+   public PacketProcessor (JdwpConnection con)
+   {
+     _connection = con;
+     _shutdown = false;
+     
+     // MAXIMUM is the value of the largest command set we may receive 
+     _sets = new CommandSet[JdwpConstants.CommandSet.MAXIMUM + 1];
+     _outputBytes = new ByteArrayOutputStream();
+     _os = new DataOutputStream (_outputBytes);
+ 
+     // Create all the Command Sets and add them to our array
+     _sets[JdwpConstants.CommandSet.VirtualMachine.CS_VALUE] =
+       new VirtualMachineCommandSet();
+     _sets[JdwpConstants.CommandSet.ReferenceType.CS_VALUE] =
+       new ReferenceTypeCommandSet();
+     _sets[JdwpConstants.CommandSet.ClassType.CS_VALUE] =
+       new ClassTypeCommandSet();
+     _sets[JdwpConstants.CommandSet.ArrayType.CS_VALUE] =
+       new ArrayTypeCommandSet();
+     _sets[JdwpConstants.CommandSet.InterfaceType.CS_VALUE] =
+       new InterfaceTypeCommandSet();
+     _sets[JdwpConstants.CommandSet.Method.CS_VALUE] =
+       new MethodCommandSet();
+     _sets[JdwpConstants.CommandSet.Field.CS_VALUE] =
+       new FieldCommandSet();
+     _sets[JdwpConstants.CommandSet.ObjectReference.CS_VALUE] =
+       new ObjectReferenceCommandSet();
+     _sets[JdwpConstants.CommandSet.StringReference.CS_VALUE] =
+       new StringReferenceCommandSet();
+     _sets[JdwpConstants.CommandSet.ThreadReference.CS_VALUE] =
+       new ThreadReferenceCommandSet();
+     _sets[JdwpConstants.CommandSet.ThreadGroupReference.CS_VALUE] =
+       new ThreadGroupReferenceCommandSet();
+     _sets[JdwpConstants.CommandSet.ArrayReference.CS_VALUE] =
+       new ArrayReferenceCommandSet();
+     _sets[JdwpConstants.CommandSet.ClassLoaderReference.CS_VALUE] =
+       new ClassLoaderReferenceCommandSet();
+     _sets[JdwpConstants.CommandSet.EventRequest.CS_VALUE] =
+       new EventRequestCommandSet();
+     _sets[JdwpConstants.CommandSet.StackFrame.CS_VALUE] =
+       new StackFrameCommandSet();
+     _sets[JdwpConstants.CommandSet.ClassObjectReference.CS_VALUE] =
+       new ClassObjectReferenceCommandSet();
+   }
+   
+   /**
+    * Main run routine for this thread. Will loop getting packets
+    * from the connection and processing them.
+    */
+   public Object run ()
+   {
+     try
+       {
+         while (!_shutdown)
+           {
+             _processOnePacket ();
+           }
+       }
+     catch (IOException ex)
+       {
+         ex.printStackTrace();
+       }
+     // Time to shutdown, tell Jdwp to shutdown
+     Jdwp.getDefault().shutdown();
+     return null;
+   }
+   
+   /**
+    * Shutdown the packet processor
+    */
+   public void shutdown ()
+   {
+     _shutdown = true;
+   }
+   
+   // Helper function which actually does all the work of waiting
+   // for a packet and getting it processed.
+   private void _processOnePacket ()
+     throws IOException
+   {
+     JdwpPacket pkt = _connection.getPacket ();
+     
+     if (!(pkt instanceof JdwpCommandPacket))
+       {
+         // We're not supposed to get these from the debugger!
+         // Drop it on the floor
+         return;
+       }
+     
+     if (pkt != null)
+       {
+         JdwpCommandPacket commandPkt = (JdwpCommandPacket) pkt;
+         JdwpReplyPacket reply = new JdwpReplyPacket(commandPkt);
+         
+         // Reset our output stream
+         _outputBytes.reset();
+         
+         // Create a ByteBuffer around the command packet 
+         ByteBuffer bb = ByteBuffer.wrap(commandPkt.getData());
+         byte command = commandPkt.getCommand();
+         byte commandSet = commandPkt.getCommandSet();
+         
+         CommandSet set = null;
+         try
+           {
+             // There is no command set with value 0
+             if (commandSet > 0 && commandSet < _sets.length)
+               {
+                 set = _sets[commandPkt.getCommandSet()];
+               }
+             if (set != null) 
+               {
+                 _shutdown = set.runCommand(bb, _os, command);
+                 reply.setData(_outputBytes.toByteArray());
+               }
+             else
+               {
+                 // This command set wasn't in our tree
+                 reply.setErrorCode(JdwpConstants.Error.NOT_IMPLEMENTED);
+               }
+           }
+           catch (JdwpException ex)
+             {
+             reply.setErrorCode(ex.getErrorCode ());
+             }
+           _connection.sendPacket (reply);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,333 ----
+ /* ReferenceTypeCommandSet.java -- class to implement the ReferenceType
+    Command Set
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.InvalidFieldException;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.util.JdwpString;
+ import gnu.classpath.jdwp.util.Signature;
+ import gnu.classpath.jdwp.util.Value;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Method;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the ReferenceType Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class ReferenceTypeCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+     throws JdwpException
+   {
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.ReferenceType.SIGNATURE:
+             executeSignature(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.CLASS_LOADER:
+             executeClassLoader(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.MODIFIERS:
+             executeModifiers(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.FIELDS:
+             executeFields(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.METHODS:
+             executeMethods(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.GET_VALUES:
+             executeGetValues(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.SOURCE_FILE:
+             executeSourceFile(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.NESTED_TYPES:
+             executeNestedTypes(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.STATUS:
+             executeStatus(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.INTERFACES:
+             executeInterfaces(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.CLASS_OBJECT:
+             executeClassObject(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.SOURCE_DEBUG_EXTENSION:
+             executeSourceDebugExtension(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.SIGNATURE_WITH_GENERIC:
+             executeSignatureWithGeneric(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.FIELDS_WITH_GENERIC:
+             executeFieldWithGeneric(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ReferenceType.METHODS_WITH_GENERIC:
+             executeMethodsWithGeneric(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+               " not found in ReferenceType Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeSignature(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     String sig = Signature.computeClassSignature(refId.getType());
+     JdwpString.writeString(os, sig);
+   }
+ 
+   private void executeClassLoader(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+ 
+     Class clazz = refId.getType();
+     ClassLoader loader = clazz.getClassLoader();
+     ObjectId oid = idMan.getObjectId(loader);
+     oid.write(os);
+   }
+ 
+   private void executeModifiers(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+ 
+     Class clazz = refId.getType();
+     os.writeInt(clazz.getModifiers());
+   }
+ 
+   private void executeFields(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     Field[] fields = clazz.getFields();
+     os.writeInt(fields.length);
+     for (int i = 0; i < fields.length; i++)
+       {
+         Field field = fields[i];
+         idMan.getObjectId(field).write(os);
+         JdwpString.writeString(os, field.getName());
+         JdwpString.writeString(os, Signature.computeFieldSignature(field));
+         os.writeInt(field.getModifiers());
+       }
+   }
+ 
+   private void executeMethods(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     Method[] methods = clazz.getMethods();
+     os.writeInt(methods.length);
+     for (int i = 0; i < methods.length; i++)
+       {
+         Method method = methods[i];
+         idMan.getObjectId(method).write(os);
+         JdwpString.writeString(os, method.getName());
+         JdwpString.writeString(os, Signature.computeMethodSignature(method));
+         os.writeInt(method.getModifiers());
+       }
+   }
+ 
+   private void executeGetValues(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     int numFields = bb.getInt();
+     os.writeInt(numFields); // Looks pointless but this is the protocol
+     for (int i = 0; i < numFields; i++)
+       {
+         ObjectId fieldId = idMan.readObjectId(bb);
+         Field field = (Field) (fieldId.getObject());
+         Class fieldClazz = field.getDeclaringClass();
+ 
+         // We don't actually need the clazz to get the field but we might as
+         // well check that the debugger got it right
+         if (fieldClazz.isAssignableFrom(clazz))
+           {
+             try
+               {
+                 field.setAccessible(true); // Might be a private field
+                 Object value = field.get(null);
+                 Value.writeTaggedValue(os, value);
+               }
+             catch (IllegalArgumentException ex)
+               {
+                 // I suppose this would best qualify as an invalid field then
+                 throw new InvalidFieldException(ex);
+               }
+             catch (IllegalAccessException ex)
+               {
+                 // Since we set it as accessible this really shouldn't happen
+                 throw new JdwpInternalErrorException(ex);
+               }
+           }
+         else
+           throw new InvalidFieldException(fieldId.getId());
+       }
+   }
+ 
+   private void executeSourceFile(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     // We'll need to go into the jvm for this unless there's an easier way
+     String sourceFileName = VMVirtualMachine.getSourceFile(clazz);
+     JdwpString.writeString(os, sourceFileName);
+     // clazz.getProtectionDomain().getCodeSource().getLocation();
+   }
+ 
+   private void executeNestedTypes(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+     Class[] declaredClazzes = clazz.getDeclaredClasses();
+     os.writeInt(declaredClazzes.length);
+     for (int i = 0; i < declaredClazzes.length; i++)
+       {
+         Class decClazz = declaredClazzes[i];
+         ReferenceTypeId clazzId = idMan.getReferenceTypeId(decClazz);
+         clazzId.writeTagged(os);
+       }
+   }
+ 
+   private void executeStatus(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     // I don't think there's any other way to get this
+     int status = VMVirtualMachine.getClassStatus(clazz);
+     os.writeInt(status);
+   }
+ 
+   private void executeInterfaces(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+     Class[] interfaces = clazz.getInterfaces();
+     os.writeInt(interfaces.length);
+     for (int i = 0; i < interfaces.length; i++)
+       {
+         Class interfaceClass = interfaces[i];
+         ReferenceTypeId intId = idMan.getReferenceTypeId(interfaceClass);
+         intId.write(os);
+       }
+   }
+ 
+   private void executeClassObject(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+     ObjectId clazzObjectId = idMan.getObjectId(clazz);
+     clazzObjectId.write(os);
+   }
+ 
+   private void executeSourceDebugExtension(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     // This command is optional, determined by VirtualMachines CapabilitiesNew
+     // so we'll leave it till later to implement
+     throw new NotImplementedException(
+       "Command SourceDebugExtension not implemented.");
+   }
+ 
+   private void executeSignatureWithGeneric(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     // We don't have generics yet
+     throw new NotImplementedException(
+       "Command SourceDebugExtension not implemented.");
+   }
+ 
+   private void executeFieldWithGeneric(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     // We don't have generics yet
+     throw new NotImplementedException(
+       "Command SourceDebugExtension not implemented.");
+   }
+ 
+   private void executeMethodsWithGeneric(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     // We don't have generics yet
+     throw new NotImplementedException(
+       "Command SourceDebugExtension not implemented.");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/StackFrameCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/StackFrameCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/StackFrameCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/StackFrameCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,158 ----
+ /* StackFrameCommandSet.java -- class to implement the StackFrame Command Set
+    Copyright (C) 2005 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMFrame;
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.util.Value;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the StackFrame Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class StackFrameCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+       throws JdwpException
+   {
+     boolean keepRunning = true;
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.StackFrame.GET_VALUES:
+             executeGetValues(bb, os);
+             break;
+           case JdwpConstants.CommandSet.StackFrame.SET_VALUES:
+             executeSetValues(bb, os);
+             break;
+           case JdwpConstants.CommandSet.StackFrame.THIS_OBJECT:
+             executeThisObject(bb, os);
+             break;
+           case JdwpConstants.CommandSet.StackFrame.POP_FRAMES:
+             executePopFrames(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command + 
+             " not found in Stack Frame Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeGetValues(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ObjectId tId = idMan.readObjectId(bb);
+     Thread thread = (Thread) tId.getObject();
+ 
+     // Although Frames look like other ids they are not. First they are not
+     // ObjectIds since they don't exist in the users code. Storing them as an
+     // ObjectId would mean they could be garbage collected since no one else
+     // has a reference to them. Furthermore they are not ReferenceTypeIds since
+     // these are held permanently and we want these to be held only as long as
+     // the Thread is suspended.
+     VMFrame frame = VMVirtualMachine.getFrame(thread, bb);
+     int slots = bb.getInt();
+     os.writeInt(slots); // Looks pointless but this is the protocol
+     for (int i = 0; i < slots; i++)
+       {
+         int slot = bb.getInt();
+         byte sig = bb.get();
+         Object val = frame.getValue(slot);
+         Value.writeTaggedValue(os, val);
+       }
+   }
+ 
+   private void executeSetValues(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ObjectId tId = idMan.readObjectId(bb);
+     Thread thread = (Thread) tId.getObject();
+ 
+     VMFrame frame = VMVirtualMachine.getFrame(thread, bb);
+ 
+     int slots = bb.getInt();
+     for (int i = 0; i < slots; i++)
+       {
+         int slot = bb.getInt();
+         Object value = Value.getObj(bb);
+         frame.setValue(slot, value);
+       }
+   }
+ 
+   private void executeThisObject(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ObjectId tId = idMan.readObjectId(bb);
+     Thread thread = (Thread) tId.getObject();
+ 
+     VMFrame frame = VMVirtualMachine.getFrame(thread, bb);
+ 
+     Object thisObject = frame.getObject();
+     Value.writeTaggedValue(os, thisObject);
+   }
+ 
+   private void executePopFrames(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException
+   {
+     // This command is optional, determined by VirtualMachines CapabilitiesNew
+     // so we'll leave it till later to implement
+     throw new NotImplementedException("Command PopFrames not implemented.");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/StringReferenceCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/StringReferenceCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/StringReferenceCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/StringReferenceCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,99 ----
+ /* StringReferenceCommandSet.java -- class to implement the StringReference
+    Command Set
+    Copyright (C) 2005 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.util.JdwpString;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the StringReference Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class StringReferenceCommandSet
+   extends CommandSet
+ {
+ 
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+       throws JdwpException
+   {
+     try
+       {
+ 
+         // Although there's only a single command to choose from we still use
+         // a switch to maintain consistency with the rest of the CommandSets
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.StringReference.VALUE:
+             executeValue(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+             " not found in String Reference Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeValue(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+ 
+     String str = (String) oid.getObject();
+     JdwpString.writeString(os, str);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ThreadGroupReferenceCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ThreadGroupReferenceCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ThreadGroupReferenceCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ThreadGroupReferenceCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,175 ----
+ /* ThreadGroupReferenceCommandSet.java -- class to implement the 
+    ThreadGroupReference Command Set
+    Copyright (C) 2005 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.util.JdwpString;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class representing the ThreadGroupReference Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class ThreadGroupReferenceCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+     throws JdwpException
+   {
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.ThreadGroupReference.NAME:
+             executeName(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadGroupReference.PARENT:
+             executeParent(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadGroupReference.CHILDREN:
+             executeChildren(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+               " not found in ThreadGroupReference Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeName(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     ThreadGroup group = (ThreadGroup) oid.getObject();
+     JdwpString.writeString(os, group.getName());
+   }
+ 
+   private void executeParent(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     ThreadGroup group = (ThreadGroup) oid.getObject();
+     ThreadGroup parent = group.getParent();
+     ObjectId parentId = idMan.getObjectId(parent);
+     parentId.write(os);
+   }
+ 
+   private void executeChildren(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = idMan.readObjectId(bb);
+     ThreadGroup group = (ThreadGroup) oid.getObject();
+ 
+     ThreadGroup jdwpGroup = Thread.currentThread().getThreadGroup();
+     int numThreads = group.activeCount();
+     Thread allThreads[] = new Thread[numThreads];
+ 
+     group.enumerate(allThreads, false);
+ 
+     // We need to loop through for the true count since some threads may have
+     // been destroyed since we got activeCount so those spots in the array will
+     // be null. As well we must ignore any threads that belong to jdwp
+     numThreads = 0;
+     for (int i = 0; i < allThreads.length; i++)
+       {
+         Thread thread = allThreads[i];
+         if (thread == null)
+           break; // No threads after this point
+         if (!thread.getThreadGroup().equals(jdwpGroup))
+           numThreads++;
+       }
+ 
+     os.writeInt(numThreads);
+ 
+     for (int i = 0; i < allThreads.length; i++)
+       {
+         Thread thread = allThreads[i];
+         if (thread == null)
+           break; // No threads after this point
+         if (!thread.getThreadGroup().equals(jdwpGroup))
+           idMan.getObjectId(thread).write(os);
+       }
+ 
+     int numGroups = group.activeCount();
+     ThreadGroup allGroups[] = new ThreadGroup[numGroups];
+ 
+     group.enumerate(allGroups, false);
+ 
+     // We need to loop through for the true count since some ThreadGroups may
+     // have been destroyed since we got activeCount so those spots in the array
+     // will be null. As well we must ignore any threads that belong to jdwp.
+     numGroups = 0;
+     for (int i = 0; i < allGroups.length; i++)
+       {
+         ThreadGroup tgroup = allGroups[i];
+         if (tgroup == null)
+           break; // No ThreadGroups after this point
+         if (!tgroup.equals(jdwpGroup))
+           numGroups++;
+       }
+ 
+     os.writeInt(numGroups);
+ 
+     for (int i = 0; i < allGroups.length; i++)
+       {
+         ThreadGroup tgroup = allGroups[i];
+         if (tgroup == null)
+           break; // No ThreadGroups after this point
+         if (!tgroup.equals(jdwpGroup))
+           idMan.getObjectId(tgroup).write(os);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,246 ----
+ /* ThreadReferenceCommandSet.java -- class to implement the ThreadReference
+    Command Set Copyright (C) 2005 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMFrame;
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.InvalidObjectException;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ThreadId;
+ import gnu.classpath.jdwp.util.JdwpString;
+ import gnu.classpath.jdwp.util.Location;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.util.ArrayList;
+ 
+ /**
+  * A class representing the ThreadReference Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class ThreadReferenceCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+       throws JdwpException
+   {
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.ThreadReference.NAME:
+             executeName(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.SUSPEND:
+             executeSuspend(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.RESUME:
+             executeResume(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.STATUS:
+             executeStatus(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.THREAD_GROUP:
+             executeThreadGroup(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.FRAMES:
+             executeFrames(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.FRAME_COUNT:
+             executeFrameCount(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.OWNED_MONITORS:
+             executeOwnedMonitors(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.CURRENT_CONTENDED_MONITOR:
+             executeCurrentContendedMonitor(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.STOP:
+             executeStop(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.INTERRUPT:
+             executeInterrupt(bb, os);
+             break;
+           case JdwpConstants.CommandSet.ThreadReference.SUSPEND_COUNT:
+             executeSuspendCount(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command + 
+               " not found in Thread Reference Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return false;
+   }
+ 
+   private void executeName(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+     JdwpString.writeString(os, thread.getName());
+   }
+ 
+   private void executeSuspend(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+     VMVirtualMachine.suspendThread(thread);
+   }
+ 
+   private void executeResume(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+     VMVirtualMachine.suspendThread(thread);
+   }
+ 
+   private void executeStatus(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+     int threadStatus = VMVirtualMachine.getThreadStatus(thread);
+     // There's only one possible SuspendStatus...
+     int suspendStatus = JdwpConstants.SuspendStatus.SUSPENDED;
+ 
+     os.writeInt(threadStatus);
+     os.writeInt(suspendStatus);
+   }
+ 
+   private void executeThreadGroup(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+     ThreadGroup group = thread.getThreadGroup();
+     ObjectId groupId = idMan.getObjectId(group);
+     groupId.write(os);
+   }
+ 
+   private void executeFrames(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+     int startFrame = bb.getInt();
+     int length = bb.getInt();
+ 
+     ArrayList frames = VMVirtualMachine.getFrames(thread, startFrame, length);
+     os.writeInt(frames.size());
+     for (int i = 0; i < frames.size(); i++)
+       {
+         VMFrame frame = (VMFrame) frames.get(i);
+         os.writeLong(frame.getId());
+         Location loc = frame.getLocation();
+         loc.write(os);
+       }
+   }
+ 
+   private void executeFrameCount(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+ 
+     int frameCount = VMVirtualMachine.getFrameCount(thread);
+     os.writeInt(frameCount);
+   }
+ 
+   private void executeOwnedMonitors(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException
+   {
+     // This command is optional, determined by VirtualMachines CapabilitiesNew
+     // so we'll leave it till later to implement
+     throw new NotImplementedException(
+       "Command OwnedMonitors not implemented.");
+   }
+ 
+   private void executeCurrentContendedMonitor(ByteBuffer bb,
+                                               DataOutputStream os)
+       throws JdwpException
+   {
+     // This command is optional, determined by VirtualMachines CapabilitiesNew
+     // so we'll leave it till later to implement
+     throw new NotImplementedException(
+       "Command CurrentContentedMonitors not implemented.");
+   }
+ 
+   private void executeStop(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+     ObjectId exception = idMan.readObjectId(bb);
+     Throwable throwable = (Throwable) exception.getObject();
+     thread.stop (throwable);
+   }
+ 
+   private void executeInterrupt(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+     thread.interrupt();
+   }
+ 
+   private void executeSuspendCount(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+     int suspendCount = VMVirtualMachine.getSuspendCount(thread);
+     os.writeInt(suspendCount);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,465 ----
+ /* VirtualMachineCommandSet.java -- class to implement the VirtualMachine
+    Command Set
+    Copyright (C) 2005 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.util.JdwpString;
+ import gnu.classpath.jdwp.util.Signature;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.Properties;
+ 
+ /**
+  * A class representing the VirtualMachine Command Set.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class VirtualMachineCommandSet
+   extends CommandSet
+ {
+   public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
+     throws JdwpException
+   {
+     boolean shutdown = false;
+     try
+       {
+         switch (command)
+           {
+           case JdwpConstants.CommandSet.VirtualMachine.VERSION:
+             executeVersion(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.CLASSES_BY_SIGNATURE:
+             executeClassesBySignature(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.ALL_CLASSES:
+             executeAllClasses(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.ALL_THREADS:
+             executeAllThreads(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.TOP_LEVEL_THREAD_GROUPS:
+             executeTopLevelThreadGroups(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.IDSIZES:
+             executeIDsizes(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.DISPOSE:
+             shutdown = true;
+             executeDispose(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.SUSPEND:
+             executeSuspend(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.RESUME:
+             executeResume(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.EXIT:
+ 	    shutdown = true;
+             executeExit(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.CREATE_STRING:
+             executeCreateString(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.CAPABILITIES:
+             executeCapabilities(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.CLASS_PATHS:
+             executeClassPaths(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.DISPOSE_OBJECTS:
+             executeDisposeObjects(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.HOLD_EVENTS:
+             executeHoldEvents(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.RELEASE_EVENTS:
+             executeReleaseEvents(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.CAPABILITIES_NEW:
+             executeCapabilitiesNew(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.REDEFINE_CLASSES:
+             executeRedefineClasses(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.SET_DEFAULT_STRATUM:
+             executeSetDefaultStratum(bb, os);
+             break;
+           case JdwpConstants.CommandSet.VirtualMachine.ALL_CLASSES_WITH_GENERIC:
+             executeAllClassesWithGeneric(bb, os);
+             break;
+           default:
+             throw new NotImplementedException("Command " + command +
+             " not found in VirtualMachine Command Set.");
+           }
+       }
+     catch (IOException ex)
+       {
+         // The DataOutputStream we're using isn't talking to a socket at all
+         // So if we throw an IOException we're in serious trouble
+         throw new JdwpInternalErrorException(ex);
+       }
+ 
+     return shutdown;
+   }
+ 
+   private void executeVersion(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+ 
+     Properties props = System.getProperties();
+ 
+     int jdwpMajor = JdwpConstants.Version.MAJOR;
+     int jdwpMinor = JdwpConstants.Version.MINOR;
+     // The description field is pretty loosely defined
+     String description = "JDWP version " + jdwpMajor + "." + jdwpMinor
+                          + ", JVM version " + props.getProperty("java.vm.name")
+                          + " " + props.getProperty("java.vm.version") + " "
+                          + props.getProperty("java.version");
+     String vmVersion = props.getProperty("java.version");
+     String vmName = props.getProperty("java.vm.name");
+     JdwpString.writeString(os, description);
+     os.writeInt(jdwpMajor);
+     os.writeInt(jdwpMinor);
+     JdwpString.writeString(os, vmName);
+     JdwpString.writeString(os, vmVersion);
+   }
+ 
+   private void executeClassesBySignature(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     String sig = JdwpString.readString(bb);
+     ArrayList allMatchingClasses = new ArrayList();
+ 
+     // This will be an Iterator over all loaded Classes
+     Iterator iter = VMVirtualMachine.getAllLoadedClasses();
+ 
+     while (iter.hasNext())
+       {
+         Class clazz = (Class) iter.next();
+         String clazzSig = Signature.computeClassSignature(clazz);
+         if (clazzSig.equals(sig))
+           allMatchingClasses.add(clazz);
+       }
+ 
+     os.writeInt(allMatchingClasses.size());
+     for (int i = 0; i < allMatchingClasses.size(); i++)
+       {
+         Class clazz = (Class) allMatchingClasses.get(i);
+         ReferenceTypeId id = idMan.getReferenceTypeId(clazz);
+         id.writeTagged(os);
+         int status = VMVirtualMachine.getClassStatus(clazz);
+         os.writeInt(status);
+       }
+   }
+ 
+   private void executeAllClasses(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     // Disable garbage collection while we're collecting the info on loaded
+     // classes so we some classes don't get collected between the time we get
+     // the count and the time we get the list
+     //VMVirtualMachine.disableGarbageCollection();
+ 
+     int classCount = VMVirtualMachine.getAllLoadedClassesCount();
+     os.writeInt(classCount);
+ 
+     // This will be an Iterator over all loaded Classes
+     Iterator iter = VMVirtualMachine.getAllLoadedClasses();
+     //VMVirtualMachine.enableGarbageCollection();
+     int count = 0;
+ 
+     // Note it's possible classes were created since out classCount so make
+     // sure we don't write more classes than we told the debugger
+     while (iter.hasNext() && count++ < classCount)
+       {
+         Class clazz = (Class) iter.next();
+         ReferenceTypeId id = idMan.getReferenceTypeId(clazz);
+         id.writeTagged(os);
+         String sig = Signature.computeClassSignature(clazz);
+         JdwpString.writeString(os, sig);
+         int status = VMVirtualMachine.getClassStatus(clazz);
+         os.writeInt(status);
+       }
+   }
+ 
+   private void executeAllThreads(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ThreadGroup jdwpGroup = Thread.currentThread().getThreadGroup();
+     ThreadGroup root = getRootThreadGroup(jdwpGroup);
+ 
+     int numThreads = root.activeCount();
+     Thread allThreads[] = new Thread[numThreads];
+     root.enumerate(allThreads);
+ 
+     // We need to loop through for the true count since some threads may have
+     // been destroyed since we got
+     // activeCount so those spots in the array will be null. As well we must
+     // ignore any threads that belong to jdwp
+     numThreads = 0;
+     for (int i = 0; i < allThreads.length; i++)
+       {
+         Thread thread = allThreads[i];
+         if (thread == null)
+           break; // No threads after this point
+         if (!thread.getThreadGroup().equals(jdwpGroup))
+           numThreads++;
+       }
+ 
+     os.writeInt(numThreads);
+ 
+     for (int i = 0; i < allThreads.length; i++)
+       {
+         Thread thread = allThreads[i];
+         if (thread == null)
+           break; // No threads after this point
+         if (!thread.getThreadGroup().equals(jdwpGroup))
+           idMan.getObjectId(thread).write(os);
+       }
+   }
+ 
+   private void executeTopLevelThreadGroups(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ThreadGroup jdwpGroup = Thread.currentThread().getThreadGroup ();
+     ThreadGroup root = getRootThreadGroup(jdwpGroup);
+ 
+     os.writeInt(1); // Just one top level group allowed?
+     idMan.getObjectId(root);
+   }
+ 
+   private void executeDispose(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     // resumeAllThreads isn't sufficient as a thread may have been
+     // suspended multiple times, we likely need a way to keep track of how many
+     // times a thread has been suspended or else a stronger resume method for
+     // this purpose
+     // VMVirtualMachine.resumeAllThreads ();
+ 
+     // Simply shutting down the jdwp layer will take care of the rest of the
+     // shutdown other than disabling debugging in the VM
+     // VMVirtualMachine.disableDebugging();
+ 
+     // Don't implement this until we're sure how to remove all the debugging
+     // effects from the VM.
+     throw new NotImplementedException(
+       "Command VirtualMachine.Dispose not implemented");
+ 
+   }
+ 
+   private void executeIDsizes(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     ObjectId oid = new ObjectId();
+     os.writeInt(oid.size()); // fieldId
+     os.writeInt(oid.size()); // methodId
+     os.writeInt(oid.size()); // objectId
+     os.writeInt(new ReferenceTypeId((byte) 0x00).size()); // referenceTypeId
+     os.writeInt(oid.size()); // frameId
+   }
+ 
+   private void executeSuspend(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     VMVirtualMachine.suspendAllThreads ();
+   }
+ 
+   private void executeResume(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     VMVirtualMachine.resumeAllThreads ();
+   }
+ 
+   private void executeExit(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     int exitCode = bb.getInt();
+     System.exit (exitCode);
+   }
+ 
+   private void executeCreateString(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     String string = JdwpString.readString(bb);
+     ObjectId stringId = idMan.getObjectId(string);
+     
+     // Since this string isn't referenced anywhere we'll disable garbage
+     // collection on it so it's still around when the debugger gets back to it.
+     stringId.disableCollection();
+     stringId.write(os);
+   }
+ 
+   private void executeCapabilities(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     // Store these somewhere?
+     os.writeBoolean(false); // canWatchFieldModification
+     os.writeBoolean(false); // canWatchFieldAccess
+     os.writeBoolean(false); // canGetBytecodes
+     os.writeBoolean(false); // canGetSyntheticAttribute
+     os.writeBoolean(false); // canGetOwnedMonitorInfo
+     os.writeBoolean(false); // canGetCurrentContendedMonitor
+     os.writeBoolean(false); // canGetMonitorInfo
+   }
+ 
+   private void executeClassPaths(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     String baseDir = System.getProperty("user.dir");
+     JdwpString.writeString(os, baseDir);
+ 
+     // Find and write the classpath
+     String classPath = System.getProperty("java.class.path");
+     String[] paths = classPath.split(":");
+ 
+     os.writeInt(paths.length);
+     for (int i = 0; i < paths.length; i++)
+       JdwpString.writeString(os, paths[i]);
+ 
+     // Now the bootpath
+     String bootPath = System.getProperty("sun.boot.class.path");
+     paths = bootPath.split(":");
+     os.writeInt(paths.length);
+     for (int i = 0; i < paths.length; i++)
+       JdwpString.writeString(os, paths[i]);
+   }
+ 
+   private void executeDisposeObjects(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     // Instead of going through the list of objects they give us it's probably
+     // better just to find the garbage collected objects ourselves
+     //idMan.update();
+   }
+ 
+   private void executeHoldEvents(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     // Going to have to implement a send queue somewhere and do this without
+     // triggering events
+     // Until then just don't implement
+     throw new NotImplementedException(
+       "Command VirtualMachine.HoldEvents not implemented");
+   }
+ 
+   // Opposite of executeHoldEvents
+   private void executeReleaseEvents(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     throw new NotImplementedException(
+       "Command VirtualMachine.ReleaseEvents not implemented");
+   }
+ 
+   private void executeCapabilitiesNew(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+     // Store these somewhere?
+     final int CAPABILITIES_NEW_SIZE = 32;
+     os.writeBoolean(false); // canWatchFieldModification
+     os.writeBoolean(false); // canWatchFieldAccess
+     os.writeBoolean(false); // canGetBytecodes
+     os.writeBoolean(false); // canGetSyntheticAttribute
+     os.writeBoolean(false); // canGetOwnedMonitorInfo
+     os.writeBoolean(false); // canGetCurrentContendedMonitor
+     os.writeBoolean(false); // canGetMonitorInfo
+     os.writeBoolean(false); // canRedefineClasses
+     os.writeBoolean(false); // canAddMethod
+     os.writeBoolean(false); // canUnrestrictedlyRedefineClasses
+     os.writeBoolean(false); // canPopFrames
+     os.writeBoolean(false); // canUseInstanceFilters
+     os.writeBoolean(false); // canGetSourceDebugExtension
+     os.writeBoolean(false); // canRequestVMDeathEvent
+     os.writeBoolean(false); // canSetDefaultStratum
+     for (int i = 15; i < CAPABILITIES_NEW_SIZE; i++)
+       // Future capabilities
+       // currently unused
+       os.writeBoolean(false); // Set to false
+   }
+ 
+   private void executeRedefineClasses(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     // Optional command, don't implement
+     throw new NotImplementedException(
+       "Command VirtualMachine.RedefineClasses not implemented");
+   }
+ 
+   private void executeSetDefaultStratum(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     // Optional command, don't implement
+     throw new NotImplementedException(
+       "Command VirtualMachine.SetDefaultStratum not implemented");
+   }
+ 
+   private void executeAllClassesWithGeneric(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+     // We don't handle generics
+     throw new NotImplementedException(
+       "Command VirtualMachine.AllClassesWithGeneric not implemented");
+   }
+ 
+   /**
+    * Find the root ThreadGroup of this ThreadGroup
+    */
+   private ThreadGroup getRootThreadGroup(ThreadGroup group)
+   {
+     ThreadGroup parent = group.getParent();
+ 
+     while (parent != null)
+       {
+         group = parent;
+         parent = group.getParent();
+       }
+     return group; // This group was the root
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/ITransport.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/ITransport.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/ITransport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/ITransport.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,89 ----
+ /* ITransport.java -- An interface defining JDWP transports
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.transport;
+ 
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.lang.IllegalArgumentException;
+ import java.util.HashMap;
+ 
+ /**
+  * A class representing a transport layer. This class serves as a generic
+  * interface for all transport types used in the JDWP back-end.
+  *
+  * @author Keith Seitz (keiths@redhat.com)
+  */
+ public interface ITransport
+ {
+   /**
+    * Configure the transport with the given properties
+    *
+    * @param   properties  properties of the transport configuration
+    * @throws  TransportException on configury error
+    */
+   public void configure (HashMap properties)
+     throws TransportException;
+ 
+   /**
+    * Initialize the transport
+    *
+    * @throws  TransportException on initialization error
+    */
+   public void initialize ()
+     throws TransportException;
+ 
+   /**
+    * Shutdown the transport
+    */
+   public void shutdown ();
+ 
+   /**
+    * Get the input stream for the transport
+    */
+   public InputStream getInputStream ()
+     throws IOException;
+ 
+   /**
+    * Get the output stream for the transport
+    */
+   public OutputStream getOutputStream ()
+     throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/JdwpCommandPacket.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/JdwpCommandPacket.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/JdwpCommandPacket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/JdwpCommandPacket.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,149 ----
+ /* JdwpCommandPacket.java -- JDWP command packet
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.transport;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * A class representing a JDWP command packet.
+  * This class adds command set and command to the packet header
+  * information in {@link gnu.classpath.jdwp.transport.JdwpPacket}
+  * and adds additional command packet-specific processing.
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class JdwpCommandPacket extends JdwpPacket
+ {
+   /**
+    * Command set
+    */
+   protected byte _commandSet;
+ 
+   /**
+    * Command
+    */
+   protected byte _command;
+ 
+   // Minimum packet size [excluding super class]
+   // ( commandSet (1) + command (1) )
+   private static final int MINIMUM_LENGTH = 2;
+ 
+   /**
+    * Constructs a new <code>JdwpCommandPacket</code>
+    */
+   public JdwpCommandPacket ()
+   {
+     // Don't assign an id. This constructor is called by
+     // JdwpPacket.fromBytes, and that will assign a packet id.
+   }
+   
+   /**
+    * Constructs a new <code>JdwpCommandPacket</code>
+    * with the given command set and command
+    *
+    * @param set      the command set
+    * @param command  the command
+    */
+   public JdwpCommandPacket (byte set, byte command)
+   {
+     _id = ++_last_id;
+     _commandSet = set;
+     _command = command;
+   }
+ 
+   /**
+    * Retuns the length of this packet
+    */
+   public int getLength ()
+   {
+     return MINIMUM_LENGTH + super.getLength ();
+   }
+ 
+   /**
+    * Returns the command set
+    */
+   public byte getCommandSet ()
+   {
+     return _commandSet;
+   }
+ 
+   /**
+    * Sets the command set
+    */
+   public void setCommandSet (byte cs)
+   { 
+     _commandSet = cs;
+   }
+ 
+   /**
+    * Returns the command
+    */
+   public byte getCommand ()
+   {
+     return _command;
+   }
+ 
+   /**
+    * Sets the command
+    */
+   public void setCommand (byte cmd)
+   {
+     _command = cmd;
+   }
+ 
+   // Reads command packet data from the given buffer, starting
+   // at the given offset
+   protected int myFromBytes (byte[] bytes, int index)
+   {
+     int i = 0;
+     setCommandSet (bytes[index + i++]);
+     setCommand (bytes[index + i++]);
+     return i;
+   }
+ 
+   // Writes the command packet data into the given buffer
+   protected void myWrite (DataOutputStream dos)
+     throws IOException
+   {
+     dos.writeByte (getCommandSet ());
+     dos.writeByte (getCommand ());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/JdwpConnection.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/JdwpConnection.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/JdwpConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/JdwpConnection.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,299 ----
+ /* JdwpConnection.java -- A JDWP-speaking connection
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.transport;
+ 
+ import gnu.classpath.jdwp.Jdwp;
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.event.EventRequest;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.DataInputStream;
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ 
+ /**
+  * A connection via some transport to some JDWP-speaking entity.
+  * This is also a thread which handles all communications to/from
+  * the debugger. While access to the transport layer may be accessed by
+  * several threads, start-up and initialization should not be allowed
+  * to occur more than once.
+  *
+  * <p>This class is also a thread that is responsible for pulling
+  * packets off the wire and sticking them in a queue for packet
+  * processing threads.
+  * 
+  * @author Keith Seitz (keiths@redhat.com)
+  */
+ public class JdwpConnection
+   extends Thread
+ {
+   // The JDWP handshake
+   private static final byte[] _HANDSHAKE = {'J', 'D', 'W', 'P', '-', 'H', 'a',
+ 					    'n', 'd', 's', 'h', 'a', 'k', 'e'};
+ 
+   // Transport method
+   private ITransport _transport;
+ 
+   // Command queue
+   private ArrayList _commandQueue;
+ 
+   // Shutdown flag
+   private boolean _shutdown;
+ 
+   // Input stream from transport
+   private DataInputStream _inStream;
+ 
+   // Output stream from transprot
+   private DataOutputStream _outStream;
+ 
+   // A buffer used to construct the packet data
+   private ByteArrayOutputStream _bytes;
+ 
+   // A DataOutputStream for the byte buffer
+   private DataOutputStream _doStream;
+ 
+   /**
+    * Creates a new <code>JdwpConnection</code> instance
+    *
+    * @param transport  the transport to use for communications
+    */
+   public JdwpConnection (ThreadGroup group, ITransport transport)
+   {
+     super (group, "JDWP connection thread");
+     _transport = transport;
+     _commandQueue = new ArrayList ();
+     _shutdown = false;
+     _bytes = new ByteArrayOutputStream ();
+     _doStream = new DataOutputStream (_bytes);
+   }
+ 
+   /**
+    * Initializes the connection, including connecting
+    * to socket or shared memory endpoint
+    *
+    * @throws TransportException if initialization fails
+    */
+   public void initialize ()
+     throws TransportException
+   {
+     // Initialize transport (connect socket, e.g.)
+     _transport.initialize ();
+ 
+     // Do handshake
+     try
+       {
+ 	_inStream = new DataInputStream (_transport.getInputStream ());
+ 	_outStream = new DataOutputStream (_transport.getOutputStream ());
+ 	_doHandshake ();
+       }
+     catch (IOException ioe)
+       {
+ 	throw new TransportException (ioe);
+       }
+   }
+ 
+   /* Does the JDWP handshake -- this should not need synchronization
+      because this is called by VM startup code, i.e., no packet
+      processing threads have started yet. */
+   private void _doHandshake ()
+     throws IOException
+   {
+     // According to the spec, the handshake is always initiated by
+     // the debugger, regardless of whether the JVM is in client mode or
+     // server mode.
+ 
+     // Wait for handshake from debugger
+     byte[] hshake = new byte[_HANDSHAKE.length];
+     _inStream.readFully (hshake, 0, _HANDSHAKE.length);
+ 
+     if (Arrays.equals (hshake, _HANDSHAKE))
+       {
+ 	// Send reply handshake
+ 	_outStream.write (_HANDSHAKE, 0, _HANDSHAKE.length);
+ 	return;
+       }
+     else
+       {
+ 	throw new IOException ("invalid JDWP handshake (\"" + hshake + "\")");
+       }
+   }
+ 
+   /**
+    * Main run method for the thread. This thread loops waiting for
+    * packets to be read via the connection. When a packet is complete
+    * and ready for processing, it places the packet in a queue that can
+    * be accessed via <code>getPacket</code>
+    */
+   public void run ()
+   {
+     while (!_shutdown)
+       {
+ 	try
+ 	  {
+ 	    _readOnePacket ();
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	    /* IOException can occur for two reasons:
+ 	       1. Lost connection with the other side
+ 	       2. Transport was shutdown
+ 	       In either case, we make sure that all of the
+ 	       back-end gets shutdown. */
+ 	    Jdwp.getDefault().shutdown ();
+ 	  }
+ 	catch (Throwable t)
+ 	  {
+ 	    System.out.println ("JdwpConnection.run: caught an exception: "
+ 				+ t);
+ 	    // Just keep going
+ 	  }
+       }
+   }
+ 
+   // Reads a single packet from the connection, adding it to the packet
+   // queue when a complete packet is ready.
+   private void _readOnePacket ()
+     throws IOException
+   {
+     byte[] data = null;
+ 
+     // Read in the packet
+     int length = _inStream.readInt ();
+     if (length < 11)
+       {
+ 	throw new IOException ("JDWP packet length < 11 (" 
+ 			       + length + ")");
+       }
+ 
+     data = new byte[length];
+     data[0] = (byte) (length >>> 24);
+     data[1] = (byte) (length >>> 16);
+     data[2] = (byte) (length >>> 8);
+     data[3] = (byte) length;
+     _inStream.readFully (data, 4, length - 4);
+ 
+     JdwpPacket packet = JdwpPacket.fromBytes (data);
+     if (packet != null)
+       {
+ 	synchronized (_commandQueue)
+ 	  {
+ 	    _commandQueue.add (packet);
+ 	    _commandQueue.notifyAll ();
+ 	  }
+       }
+   }
+ 
+   /**
+    * Returns a packet from the queue of ready packets
+    *
+    * @returns  a <code>JdwpPacket</code> ready for processing
+    *           <code>null</code> when shutting down
+    */
+   public JdwpPacket getPacket ()
+   {
+     synchronized (_commandQueue)
+       {
+ 	while (_commandQueue.isEmpty ())
+ 	  {
+ 	    try
+ 	      {
+ 		_commandQueue.wait ();
+ 	      }
+ 	    catch (InterruptedException ie)
+ 	      {
+ 		/* PacketProcessor is interrupted
+ 		   when shutting down */
+ 		return null;
+ 	      }
+ 	  }
+ 
+ 	return (JdwpPacket) _commandQueue.remove (0);
+       }
+   }
+ 
+   /**
+    * Send a packet to the debugger
+    *
+    * @param pkt a <code>JdwpPacket</code> to send
+    * @throws IOException
+    */
+   public void sendPacket (JdwpPacket pkt)
+     throws IOException
+   {
+     pkt.write (_outStream);
+   }
+ 
+   /**
+    * Send an event notification to the debugger
+    *
+    * @param request  the debugger request that wanted this event
+    * @param event    the event
+    * @throws IOException
+    */
+   public void sendEvent (EventRequest request, Event event)
+     throws IOException
+   {
+     JdwpPacket pkt;
+ 
+     synchronized (_bytes)
+       {
+ 	_bytes.reset ();
+ 	pkt = event.toPacket (_doStream, request);
+ 	pkt.setData (_bytes.toByteArray ());
+       }
+ 
+     sendPacket (pkt);
+   }
+ 
+   /**
+    * Shutdown the connection
+    */
+   public void shutdown ()
+   {
+     if (!_shutdown)
+       {
+ 	_transport.shutdown ();
+ 	_shutdown = true;
+ 	interrupt ();
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/JdwpPacket.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/JdwpPacket.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/JdwpPacket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/JdwpPacket.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,278 ----
+ /* JdwpPacket.java -- Base class for JDWP command and reply packets
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.transport;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * All command and reply packets in JDWP share
+  * common header type information:
+  *
+  *    length (4 bytes) : size of entire packet, including length
+  *    id     (4 bytes) : unique packet id
+  *    flags  (1 byte)  : flag byte
+  *    [command packet stuff | reply packet stuff]
+  *    data   (variable) : unique command-/reply-specific data
+  *
+  * This class deal with everything except the command- and reply-specific
+  * data, which get handled in {@link
+  * gnu.classpath.jdwp.transport.JdwpCommandPacket} and {@link
+  * gnu.classpath.jdwp.transprot.JdwpReplyPacket}.
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public abstract class JdwpPacket
+ {
+   // Last id of packet constructed
+   protected static int _last_id = 0;
+ 
+   // JDWP reply packet flag
+   protected static final int JDWP_FLAG_REPLY = 0x80;
+ 
+   /**
+    * Minimum packet size excluding sub-class data
+    * ( length (4) + id (4) + flags (1) )
+    */
+   protected static final int MINIMUM_SIZE = 9;
+ 
+   /**
+    * Id of command/reply
+    */
+   protected int _id;
+ 
+   /**
+    * Packet flags
+    */
+   protected byte _flags;
+ 
+   /**
+    * Packet-specific data
+    */
+   protected byte[] _data;
+ 
+   /**
+    * Constructor
+    */
+   public JdwpPacket ()
+   {
+     // By default, DON'T assign an id. This way when a packet
+     // is constructed from fromBytes, _last_id won't increment (i.e.,
+     // it won't leave holes in the outgoing packet ids).
+   }
+ 
+   /**
+    * Constructs a <code>JdwpPacket</code> with the id
+    * from the given packet.
+    *
+    * @param pkt  a packet whose id will be used in this new packet
+    */
+   public JdwpPacket (JdwpPacket pkt)
+   {
+     _id = pkt.getId ();
+   }
+ 
+   /**
+    * Returns the packet id
+    */
+   public int getId ()
+   { 
+     return _id;
+   }
+ 
+   /**
+    * Sets the packet id
+    */
+   public void setId (int id)
+   { 
+     _id = id;
+   }
+ 
+   /**
+    * Returns the packet flags
+    */
+   public byte getFlags ()
+   { 
+     return _flags;
+   }
+ 
+   /**
+    * Sets the packet flags
+    */
+   public void setFlags (byte flags)
+   { 
+     _flags = flags;
+   }
+ 
+   /**
+    * Gets the command/reply-specific data in this packet
+    */
+   public byte[] getData ()
+   { 
+     return _data;
+   }
+ 
+   /**
+    * Sets the command/reply-specific data in this packet
+    */
+   public void setData (byte[] data)
+   { 
+     _data = data;
+   }
+ 
+   /**
+    * Returns the length of this entire packet
+    */
+   public int getLength ()
+   { 
+     return MINIMUM_SIZE + (_data == null ? 0 : _data.length);
+   }
+ 
+   /**
+    * Allow subclasses to initialize from data
+    * 
+    * @param   bytes  packet data from the wire
+    * @param   index  index into <code>bytes</code> to start processing
+    * @return         number of bytes in <code>bytes</code> processed
+    */
+   protected abstract int myFromBytes (byte[] bytes, int index);
+ 
+   /**
+    * Convert the given bytes into a <code>JdwpPacket</code>. Uses the
+    * abstract method <code>myFromBytes</code> to allow subclasses to
+    * process data.
+    *
+    * If the given data does not represent a valid JDWP packet, it returns
+    * <code>null</code>.
+    * 
+    * @param   bytes  packet data from the wire
+    * @param   index  index into <code>bytes</code> to start processing
+    * @return         number of bytes in <code>bytes</code> processed
+    */
+   public static JdwpPacket fromBytes (byte[] bytes)
+   {
+     int i = 0;
+     int length = ((bytes[i++] & 0xff) << 24 | (bytes[i++] & 0xff) << 16
+                   | (bytes[i++] & 0xff) << 8 | (bytes[i++] & 0xff));
+     int id = 0;
+     byte flags = 0;
+ 
+     if (bytes.length == length)
+       {
+ 	id = ((bytes[i++] & 0xff) << 24 | (bytes[i++] & 0xff) << 16
+               | (bytes[i++] & 0xff) << 8 | (bytes[i++] & 0xff));
+ 	flags = bytes[i++];
+ 
+ 	Class clazz = null;
+ 	if (flags == 0)
+ 	  clazz = JdwpCommandPacket.class;
+ 	else if ((flags & JDWP_FLAG_REPLY) != 0)
+ 	  clazz = JdwpReplyPacket.class;
+ 	else
+ 	  {
+ 	    // Malformed packet. Discard it.
+ 	    return null;
+ 	  }
+ 
+ 	JdwpPacket pkt = null;
+ 	try
+ 	  {
+ 	    pkt = (JdwpPacket) clazz.newInstance ();
+ 	  }
+ 	catch (InstantiationException ie)
+ 	  {
+ 	    // Discard packet
+ 	    return null;
+ 	  }
+ 	catch (IllegalAccessException iae)
+ 	  {
+ 	    // Discard packet
+ 	    return null;
+ 	  }
+ 
+ 	pkt.setId (id);
+ 	pkt.setFlags (flags);
+ 
+ 	i += pkt.myFromBytes (bytes, i);
+ 	byte[] data = new byte[length - i];
+ 	System.arraycopy (bytes, i, data, 0, data.length);
+ 	pkt.setData (data);
+ 
+ 	return pkt;
+       }
+ 	
+     return null;
+   }
+ 
+   /**
+    * Put subclass information onto the stream
+    *
+    * @param dos the output stream to which to write
+    */
+   protected abstract void myWrite (DataOutputStream dos)
+     throws IOException;
+ 
+   /**
+    * Writes the packet to the output stream
+    *
+    * @param dos  the output stream to which to write the packet
+    */
+   public void write (DataOutputStream dos)
+     throws IOException
+   {
+     // length
+     int length = getLength ();
+     dos.writeInt (length);
+ 
+     // ID
+     dos.writeInt (getId ());
+ 
+     // flag
+     dos.writeByte (getFlags ());
+ 
+     // packet-specific stuff
+     myWrite (dos);
+ 
+     // data (if any)
+     byte[] data = getData ();
+     if (data != null && data.length > 0)
+       dos.write (data, 0, data.length);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /* JdwpReplyPacket.java -- JDWP reply packet
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.transport;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * A class represents a JDWP reply packet.
+  * This class adds an error code to the packet header information
+  * in {@link gnu.classpath.transport.JdwpPacket} and adds additional
+  * reply packet-specific processing.
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class JdwpReplyPacket extends JdwpPacket
+ {
+   /**
+    * Error code
+    */
+   protected short _errorCode;
+ 
+   // Minimum packet size [excluding super class] ( errorCode (2) )
+   private static final int MINIMUM_LENGTH = 2;
+ 
+   /**
+    * Constructs a <code>JdwpReplyPacket</code>.
+    */
+   public JdwpReplyPacket ()
+   {
+     // Don't assign a packet id. This is called by JdwpPacket.fromBytes
+     // which assigns a packet id. (Not that a VM would do that...)
+   }
+ 
+   /**
+    * Constructs a <code>JdwpReplyPacket</code> with the
+    * id from the given packet and error code
+    *
+    * @param pkt        the packet whose id this packet will use
+    * @param errorCode  the error code
+    */
+   public JdwpReplyPacket (JdwpPacket pkt, short errorCode)
+   {
+     this(pkt);
+     _errorCode = errorCode;
+   }
+ 
+   /**
+    * Constructs a <code>JdwpReplyPacket</code> with the
+    * id from the given packet and an empty error code
+    *
+    * @param pkt        the packet whose id this packet will use
+    */
+   public JdwpReplyPacket (JdwpPacket pkt)
+   {
+     super (pkt);
+     _flags = (byte) JDWP_FLAG_REPLY;
+   }
+ 
+   /**
+    * Returns the length of this packet
+    */
+   public int getLength ()
+   {
+     return MINIMUM_LENGTH + super.getLength ();
+   }
+ 
+   /**
+    * Returns the error code
+    */
+   public short getErrorCode ()
+   {
+     return _errorCode;
+   }
+ 
+   /**
+    * Sets the error code
+    */
+   public void setErrorCode (short ec)
+   {
+     _errorCode = ec;
+   }
+ 
+   // Reads command packet data from the given buffer, starting
+   // at the given offset
+   protected int myFromBytes (byte[] bytes, int index)
+   {
+     int i = 0;
+     setErrorCode ((short) ((bytes[index + i++] & 0xff) << 8
+ 			   | (bytes[index + i++] & 0xff)));
+     return i;
+   }
+ 
+   // Writes the command packet data into the given buffer
+   protected void myWrite (DataOutputStream dos)
+     throws IOException
+  {
+     dos.writeShort (getErrorCode ());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/SocketTransport.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/SocketTransport.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/SocketTransport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/SocketTransport.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,187 ----
+ /* SocketTransport.java -- a socket transport
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.transport;
+ 
+ import gnu.classpath.jdwp.transport.ITransport;
+ import gnu.classpath.jdwp.transport.TransportException;
+ 
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ import java.util.HashMap;
+ 
+ import javax.net.ServerSocketFactory;
+ import javax.net.SocketFactory;
+ 
+ /**
+  * A socket-based transport. This transport uses
+  * configury string that looks like "name=dt_socket,
+  * address=localhost:1234,server=y".
+  *
+  * @author Keith Seitz (keiths@redhat.com)
+  */
+ class SocketTransport
+   implements ITransport
+ {
+   /**
+    * Name of this transport
+    */
+   public static final String NAME = "dt_socket";
+ 
+   // Configure properties
+   private static final String _PROPERTY_ADDRESS = "address";
+   private static final String _PROPERTY_SERVER = "server";
+ 
+   // Port number
+   private int _port;
+ 
+   // Host name
+   private String _host;
+    
+   // Are we acting as a server?
+   private boolean _server = false;
+ 
+   // Socket
+   private Socket _socket;
+ 
+   /**
+    * Setup the connection configuration from the given properties
+    *
+    * @param  properties  the properties of the JDWP session
+    * @throws TransportException for any configury errors
+    */
+   public void configure (HashMap properties)
+     throws TransportException
+   {
+     // Get address [form: "hostname:port"]
+     String p = (String) properties.get (_PROPERTY_ADDRESS);
+     if (p != null)
+       {
+ 	String[] s = p.split (":");
+ 	if (s.length == 2)
+ 	  {
+ 	    _host = s[0];
+ 	    _port = Integer.parseInt (s[1]);
+ 	  }
+       }
+ 
+     // Get server [form: "y" or "n"]
+     p = (String) properties.get (_PROPERTY_SERVER);
+     if (p != null)
+       {
+ 	if (p.toLowerCase().equals ("y"))
+ 	  _server = true;
+       }
+   }
+ 
+   /**
+    * Initialize this socket connection. This includes
+    * connecting to the host (or listening for it).
+    *
+    * @throws TransportException if a transport-related error occurs
+    */
+   public void initialize ()
+     throws TransportException
+   {
+     try
+       {
+ 	if (_server)
+ 	  {
+ 	    // Get a server socket
+ 	    ServerSocketFactory ssf = ServerSocketFactory.getDefault ();
+ 	    ServerSocket ss = ssf.createServerSocket (_port, 1);
+ 	    _socket = ss.accept ();
+ 	  }
+ 	else
+ 	  {
+ 	    // Get a client socket (the factory will connect it)
+ 	    SocketFactory sf = SocketFactory.getDefault ();
+ 	    _socket = sf.createSocket (_host, _port);
+ 	  }
+       }
+     catch (IOException ioe)
+       {
+ 	// This will grab UnknownHostException, too.
+ 	throw new TransportException (ioe);
+       }
+   }
+ 
+   /**
+    * Shutdown the socket. This could cause SocketExceptions
+    * for anyone blocked on socket i/o
+    */
+   public void shutdown ()
+   {
+     try
+       {
+ 	_socket.close ();
+       }
+     catch (Throwable t)
+       {
+ 	// We don't really care about errors at this point
+       }
+   }
+ 
+   /**
+    * Returns an <code>InputStream</code> for the transport
+    *
+    * @throws IOException if an I/O error occurs creating the stream
+    *                     or the socket is not connected
+    */
+   public InputStream getInputStream ()
+     throws IOException
+   {
+     return _socket.getInputStream ();
+   }
+ 
+   /**
+    * Returns an <code>OutputStream</code> for the transport
+    *
+    * @throws IOException if an I/O error occurs creating the stream
+    *                     or the socket is not connected
+    */
+   public OutputStream getOutputStream ()
+     throws IOException
+   {
+     return _socket.getOutputStream ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/TransportException.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/TransportException.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/TransportException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/TransportException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* TransportException.java -- Exception for transport configury errors
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.transport;
+ 
+ /**
+  * A transport configury or initialization exception thrown by
+  * JDWP transports. This class is a generic exception class
+  * that the different transport layers use to report transport-specific
+  * exceptions that may occur (which could be very different from
+  * one transport to the next.).
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class TransportException
+   extends Exception
+ {
+   /**
+    * Constructs a <code>TransportException</code> with the
+    * given message
+    *
+    * @param message  a message describing the exception
+    */
+   public TransportException (String message)
+   {
+     super (message);
+   }
+ 
+   /**
+    * Constructs a <code>TransportException</code> with the
+    * given <code>Throwable</code> root cause
+    *
+    * @param t  the cause of the exception
+    */
+   public TransportException (Throwable t)
+   {
+     super (t);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/TransportFactory.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/TransportFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/transport/TransportFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/transport/TransportFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,115 ----
+ /* TransportFactory.java -- Factory for transports
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.transport;
+ 
+ import java.util.HashMap;
+ 
+ /**
+  * A factory class that constructs transports for use by
+  * the JDWP back-end.
+  *
+  * @author Keith Seitz  <keiths@redhat.com>
+  */
+ public class TransportFactory
+ {
+   // Keyword in configspec that specifies transport method
+   private static final String _TRANSPORT_PROPERTY = "transport";
+ 
+   // A single transport method mapping
+   private static class TransportMethod
+   {
+     String name;
+     Class clazz;
+     public TransportMethod (String name, Class clazz)
+     {
+       this.name = name;
+       this.clazz = clazz;
+     }
+   }
+ 
+   // List of all supported transport methods
+   private static TransportMethod[] _transportMethods = new TransportMethod[]
+   {
+     new TransportMethod (SocketTransport.NAME, SocketTransport.class)
+     //new TransportMethod (ShmemTransport.NAME, ShmemTransport.class)
+   };
+ 
+   /**
+    * Get a transport configured as specified in the properties
+    *
+    * @param   properties  a <code>HashMap</code> specifying the JDWP
+    *                      configuration properties
+    * @returns             the created and configured transport
+    * @throws  TransportException for invalid configurations
+    */
+   public static ITransport newInstance (HashMap properties)
+     throws TransportException
+   {
+     String name = null;
+     if (properties != null)
+       name = (String) properties.get (_TRANSPORT_PROPERTY);
+     if (name == null)
+       throw new TransportException ("no transport specified");
+ 
+     for (int i = 0; i < _transportMethods.length; ++i)
+       {
+ 	if (_transportMethods[i].name.equals (name))
+ 	  {
+ 	    try
+ 	      {
+ 		ITransport t;
+ 		t = (ITransport) _transportMethods[i].clazz.newInstance ();
+ 		t.configure (properties);
+ 		return t;
+ 	      }
+ 	    catch (TransportException te)
+ 	      {
+ 		throw te;
+ 	      }
+ 	    catch (Exception e)
+ 	      {
+ 		throw new TransportException (e);
+ 	      }
+ 	  }
+       }
+ 
+     throw new TransportException ("transport \"" + name + "\" not found");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/JdwpString.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/JdwpString.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/JdwpString.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/JdwpString.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,95 ----
+ /* JdwpString.java -- utility class to read and write jdwp strings
+    Copyright (C) 2005 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.classpath.jdwp.util;
+ 
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.io.UnsupportedEncodingException;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class to compute the JDWP representation of Strings.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class JdwpString
+ {
+ 
+   /**
+    * Write this String to the outStream as a string understood by jdwp.
+    * 
+    * @param os write the String here
+    * @param string the String to write
+    * @throws IOException
+    */
+   public static void writeString(DataOutputStream os, String string)
+       throws IOException
+   {
+     // Get the bytes of the string as a string in UTF-8
+     byte[] strBytes = string.getBytes("UTF-8");
+     os.writeInt(strBytes.length);
+     os.write(strBytes);
+   }
+ 
+   /**
+    * Read a jdwp style string from the ByteBuffer.
+    * 
+    * @param bb contains the string
+    * @return the String that was read
+    * @throws JdwpInternalErrorException bb didn't contain a value UTF-8 string
+    */
+   public static String readString(ByteBuffer bb)
+       throws JdwpInternalErrorException
+   {
+     int length = bb.getInt();
+     byte[] strBytes = new byte[length];
+     bb.get(strBytes);
+     try
+       {
+         return new String(strBytes, "UTF-8");
+       }
+     catch (UnsupportedEncodingException ex)
+       {
+         // Any string from the VM should be in UTF-8 so an encoding error
+         // shouldn't be possible
+         throw new JdwpInternalErrorException(ex);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/LineTable.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/LineTable.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/LineTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/LineTable.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,96 ----
+ /* LineTable.java -- A class representing a Line Table for a method
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.util;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * A class representing a Line Table for a method.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class LineTable
+ {
+ 
+   private final long start;
+   private final long end;
+   private final int[] lineNum;
+   private final long[] lineCI;
+   private final int lines;
+ 
+   /**
+    * Construct a line table with the given parameters.
+    * 
+    * @param start lowest code index for method, -1 if native
+    * @param end highest code index for method, -1 if native
+    * @param lines number of entries in line table
+    * @param lineCI code indexes for entries in line tables (of length lines)
+    * @param lineNum line numbers for in line tables (of length lines)
+    */
+   public LineTable(long start, long end, int lines, long lineCI[],
+                    int lineNum[])
+   {
+     this.start = start;
+     this.end = end;
+     this.lines = lines;
+     this.lineCI = lineCI;
+     this.lineNum = lineNum;
+   }
+   
+   /**
+    * Writes this line table to the given DataOutputStream.
+    * 
+    * @param os the stream to write it to
+    * @throws IOException
+    */
+   public void write(DataOutputStream os)
+     throws IOException
+   {
+     os.writeLong(start);
+     os.writeLong(end);
+     os.writeInt(lines);
+     for (int i = 0; i < lines; i++)
+       {
+         os.writeLong(lineCI[i]);
+         os.writeInt(lineNum[i]);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/Location.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/Location.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/Location.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/Location.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,116 ----
+ /* Location.java -- class to read/write JDWP locations
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.util;
+ 
+ import gnu.classpath.jdwp.VMIdManager;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.id.ClassReferenceTypeId;
+ import gnu.classpath.jdwp.id.ObjectId;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.lang.reflect.Method;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class to read/write JDWP locations.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class Location
+ {
+ 
+   private ClassReferenceTypeId crti;
+ 
+   private int index;
+ 
+   private byte tag;
+ 
+   private ObjectId mid;
+ 
+   /**
+    * Create a location with the given parameters.
+    * 
+    * @param tag the type of construct the location is in
+    * @param clazz the class the location is in
+    * @param meth the Method
+    * @param index location in the method
+    * @throws JdwpException
+    */
+   public Location(byte tag, Class clazz, Method meth, int index)
+       throws JdwpException
+   {
+     this.tag = tag;
+     this.crti = 
+       (ClassReferenceTypeId) VMIdManager.getDefault().getReferenceTypeId(clazz);
+     this.mid = VMIdManager.getDefault().getObjectId(meth);
+     this.index = index;
+   }
+ 
+   /**
+    * Read a location from the given bytebuffer, consists of a TAG (byte),
+    * followed by a ReferenceTypeId, a MethodId and an index (int).
+    * 
+    * @param bb this holds the location
+    * @throws IOException
+    * @throws JdwpException
+    */
+   public Location(ByteBuffer bb) throws IOException, JdwpException
+   {
+     this.tag = bb.get();
+     this.crti = 
+       (ClassReferenceTypeId) VMIdManager.getDefault().readReferenceTypeId(bb);
+     this.mid = VMIdManager.getDefault().readObjectId(bb);
+     this.index = bb.getInt();
+   }
+ 
+   /**
+    * Write the given location to an output stream.
+    * 
+    * @param os stream to write to
+    * @throws IOException
+    */
+   public void write(DataOutputStream os) throws IOException
+   {
+     os.writeByte(tag);
+     crti.write(os);
+     mid.write(os);
+     os.writeInt(index);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/MethodResult.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/MethodResult.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/MethodResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/MethodResult.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,76 ----
+ /* MethodResult.java -- class to wrap around values returned from a Method call
+    in the VM 
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.util;
+ 
+ /**
+  * A class to wrap around values returned from a Method call in the VM.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class MethodResult
+ {
+   // The Object returned by the executing method
+   private Object returnedValue;
+   
+   // Any Exception that was thrown by the executing method
+   private Exception thrownException;
+ 
+   public Object getReturnedValue()
+   {
+     return returnedValue;
+   }
+ 
+   public void setReturnedValue(Object returnedValue)
+   {
+     this.returnedValue = returnedValue;
+   }
+ 
+   public Exception getThrownException()
+   {
+     return thrownException;
+   }
+ 
+   public void setThrownException(Exception thrownException)
+   {
+     this.thrownException = thrownException;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/Signature.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/Signature.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/Signature.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/Signature.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,149 ----
+ /* Signature.java -- utility class to compute class and method signatures
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.util;
+ 
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Method;
+ 
+ /**
+  * A class to compute class and method signatures.
+  *
+  * @author Tom Tromey  (tromey@redhat.com)
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class Signature
+ {
+   /**
+    * Computes the class signature, i.e., java.lang.String.class
+    * returns "Ljava/lang/String;".
+    *
+    * @param theClass  the class for which to compute the signature
+    * @return          the class's type signature
+    */
+   public static String computeClassSignature (Class theClass)
+   {
+     StringBuffer sb = new StringBuffer ();
+     _addToSignature (sb, theClass);
+     return sb.toString ();
+   }
+ 
+   /**
+    * Computes the field signature which is just the class signature of the
+    * field's type, ie a Field of type java.lang.String this will return
+    * "Ljava/lang/String;".
+    *
+    * @param field  the field for which to compute the signature
+    * @return       the field's type signature
+    */
+   public static String computeFieldSignature (Field field)
+   {
+     return computeClassSignature (field.getType());
+   }
+ 
+   /**
+    * Computes the method signature, i.e., java.lang.String.split (String, int)
+    * returns "(Ljava/lang/String;I)[Ljava/lang/String;"
+    *
+    * @param method  the method for which to compute the signature
+    * @return        the method's type signature
+    */
+   public static String computeMethodSignature (Method method)
+   {
+     return _computeSignature (method.getReturnType (),
+ 			      method.getParameterTypes ());
+   }
+ 
+   private static String _computeSignature (Class returnType,
+ 					   Class[] paramTypes)
+   {
+     StringBuffer sb = new StringBuffer ("(");
+     if (paramTypes != null)
+       {
+ 	for (int i = 0; i < paramTypes.length; ++i)
+ 	  _addToSignature (sb, paramTypes[i]);
+       }
+     sb.append (")");
+     _addToSignature (sb, returnType);
+     return sb.toString();
+   }
+ 
+   private static void _addToSignature (StringBuffer sb, Class k)
+   {
+     // For some reason there's no easy way to get the signature of a
+     // class.
+     if (k.isPrimitive ())
+       {
+         if (k == void.class)
+           sb.append('V');
+         else if (k == boolean.class)
+           sb.append('Z');
+         else if (k == byte.class)
+           sb.append('B');
+         else if (k == char.class)
+           sb.append('C');
+         else if (k == short.class)
+           sb.append('S');
+         else if (k == int.class)
+           sb.append('I');
+         else if (k == float.class)
+           sb.append('F');
+         else if (k == double.class)
+           sb.append('D');
+         else if (k == long.class)
+           sb.append('J');
+         return;
+       }
+     
+     String name = k.getName ();
+     int len = name.length ();
+     sb.ensureCapacity (len);
+     if (! k.isArray ())
+       sb.append('L');
+     for (int i = 0; i < len; ++i)
+       {
+ 	char c = name.charAt (i);
+ 	if (c == '.')
+ 	  c = '/';
+ 	sb.append (c);
+       }
+     if (! k.isArray ())
+       sb.append(';');
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/Value.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/Value.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/Value.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/Value.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,301 ----
+ /* Value.java -- class to read/write JDWP tagged and untagged values
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.util;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMIdManager;
+ import gnu.classpath.jdwp.exception.InvalidFieldException;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * A class to read/write JDWP tagged and untagged values.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class Value
+ {
+   /**
+    * Will write the given object as an untagged value to the DataOutputStream.
+    * 
+    * @param os write the value here
+    * @param obj the Object to write
+    * @throws IOException
+    * @throws InvalidFieldException
+    */  
+   public static void writeUntaggedValue(DataOutputStream os, Object obj)
+     throws JdwpException, IOException
+   {
+     writeValue(os, obj, false);
+   }
+   
+   /**
+    * Will write the given object as a tagged value to the DataOutputStream.
+    * 
+    * @param os write the value here
+    * @param obj the Object to write
+    * @throws IOException
+    * @throws InvalidFieldException
+    */
+   public static void writeTaggedValue(DataOutputStream os, Object obj)
+     throws JdwpException, IOException
+   {
+     writeValue(os, obj, true);
+   }
+   
+   /**
+    * Will write the given object as either a value or an untagged value to the
+    * DataOutputStream.
+    * 
+    * @param os write the value here
+    * @param obj the Object to write
+    * @param tagged true if the value is tagged, false otherwise
+    * @throws IOException
+    * @throws InvalidFieldException
+    */
+   private static void writeValue(DataOutputStream os, Object obj,
+                                 boolean tagged)
+     throws IOException, JdwpException
+   {
+     Class clazz = obj.getClass();
+     if (clazz.isPrimitive())
+       {
+         if (clazz == byte.class)
+           {
+             if (tagged)
+               os.writeByte(JdwpConstants.Tag.BYTE);
+             os.writeByte(((Byte) obj).byteValue());
+           }
+         else if (clazz == char.class)
+           {
+             if (tagged)
+               os.writeByte(JdwpConstants.Tag.CHAR);
+             os.writeChar(((Character) obj).charValue());
+           }
+         else if (clazz == float.class)
+           {
+             if (tagged)
+               os.writeByte(JdwpConstants.Tag.FLOAT);
+             os.writeFloat(((Float) obj).floatValue());
+           }
+         else if (clazz == double.class)
+           {
+             if (tagged)
+               os.writeByte(JdwpConstants.Tag.DOUBLE);
+             os.writeDouble(((Double) obj).doubleValue());
+           }
+         else if (clazz == int.class)
+           {
+             if (tagged)
+               os.writeByte(JdwpConstants.Tag.BYTE);
+             os.writeInt(((Integer) obj).intValue());
+           }
+         else if (clazz == long.class)
+           {
+             if (tagged)
+               os.writeByte(JdwpConstants.Tag.LONG);
+             os.writeLong(((Long) obj).longValue());
+           }
+         else if (clazz == short.class)
+           {
+             if (tagged)
+               os.writeByte(JdwpConstants.Tag.SHORT);
+             os.writeInt(((Short) obj).shortValue());
+           }
+         else if (clazz == void.class)
+           { // A 'void' has no data
+             if (tagged)
+               os.writeByte(JdwpConstants.Tag.VOID);
+           }
+         else if (clazz == boolean.class)
+           {
+             if (tagged)
+               os.writeByte(JdwpConstants.Tag.BOOLEAN);
+             os.writeBoolean(((Boolean) obj).booleanValue());
+           }
+         else
+           { // This shouldn't be possible
+             throw new JdwpInternalErrorException(
+               "Field has invalid primitive!");
+           }
+       }
+     else
+       {
+         // Object is an Object, not a primitive type wrapped in an object
+         // Write the appropriate tag
+         if (tagged)
+           {
+             if (clazz.isArray())
+               os.writeByte(JdwpConstants.Tag.ARRAY);
+             else if (obj instanceof String)
+               os.writeByte(JdwpConstants.Tag.STRING);
+             else if (obj instanceof Thread)
+               os.writeByte(JdwpConstants.Tag.THREAD);
+             else if (obj instanceof ThreadGroup)
+               os.writeByte(JdwpConstants.Tag.THREAD_GROUP);
+             else if (obj instanceof ClassLoader)
+               os.writeByte(JdwpConstants.Tag.CLASS_LOADER);
+             else if (obj instanceof Class)
+               os.writeByte(JdwpConstants.Tag.CLASS_OBJECT);
+             else
+               os.writeByte(JdwpConstants.Tag.OBJECT);
+           }
+         ObjectId oid = VMIdManager.getDefault().getObjectId(obj);
+         oid.write(os);
+       }
+   }
+ 
+   /**
+    * Reads the appropriate object for the tagged value contained in the 
+    * ByteBuffer.
+    * 
+    * @param bb contains the Object
+    * @return The Object referenced by the value
+    * @throws JdwpException
+    * @throws IOException
+    */
+   public static Object getObj(ByteBuffer bb)
+     throws JdwpException, IOException
+   {
+     return getUntaggedObj(bb, bb.get());
+   }
+ 
+   /**
+    * Reads the an object of the given Class from the untagged value contained
+    * in the ByteBuffer.
+    * 
+    * @param bb contains the Object
+    * @param type corresponds to the TAG of value to be read 
+    * @return
+    * @throws JdwpException
+    * @throws IOException
+    */
+   public static Object getUntaggedObj(ByteBuffer bb, Class type)
+     throws JdwpException, IOException
+   {
+     if (type.isPrimitive())
+       {
+         if (type == byte.class)
+           return new Byte(bb.get());
+         else if (type == char.class)
+           return new Character(bb.getChar());
+         else if (type == float.class)
+           return new Float(bb.getFloat());
+         else if (type == double.class)
+           return new Double(bb.getDouble());
+         else if (type == int.class)
+           return new Integer(bb.getInt());
+         else if (type == long.class)
+           return new Long(bb.getLong());
+         else if (type == short.class)
+           return new Short(bb.getShort());
+         else if (type == boolean.class)
+           return (bb.get() == 0) ? new Boolean(false) : new Boolean(true);
+         else if (type == void.class)
+           return new byte[0];
+         else
+           { // This shouldn't be possible
+             throw new JdwpInternalErrorException(
+               "Field has invalid primitive!");
+           }
+       }
+     else
+       {
+         // Field is an object
+         ObjectId oid = VMIdManager.getDefault().readObjectId(bb);
+         return oid.getObject();
+       }
+   }
+ 
+   /**
+    * Reads the an object of the given Class from the untagged value contained
+    * in the ByteBuffer.
+    * 
+    * @param bb contains the Object
+    * @param tag TAG of the Value to be read
+    * @return the object
+    * @throws JdwpException
+    * @throws IOException
+    */
+   public static Object getUntaggedObj(ByteBuffer bb, byte tag)
+     throws JdwpException, IOException
+   {
+     switch (tag)
+       {
+       case JdwpConstants.Tag.BYTE:
+         return new Byte(bb.get());
+       case JdwpConstants.Tag.CHAR:
+         return new Character(bb.getChar());
+       case JdwpConstants.Tag.FLOAT:
+         return new Float(bb.getFloat());
+       case JdwpConstants.Tag.DOUBLE:
+         return new Double(bb.getDouble());
+       case JdwpConstants.Tag.INT:
+         return new Integer(bb.getInt());
+       case JdwpConstants.Tag.LONG:
+         return new Long(bb.getLong());
+       case JdwpConstants.Tag.SHORT:
+         return new Short(bb.getShort());
+       case JdwpConstants.Tag.VOID:
+         return new byte[0];
+       case JdwpConstants.Tag.BOOLEAN:
+         return (bb.get() == 0) ? new Boolean(false) : new Boolean(true);
+       case JdwpConstants.Tag.STRING:
+         return JdwpString.readString(bb);
+       case JdwpConstants.Tag.ARRAY:
+       case JdwpConstants.Tag.THREAD:
+       case JdwpConstants.Tag.OBJECT:
+       case JdwpConstants.Tag.THREAD_GROUP:
+       case JdwpConstants.Tag.CLASS_LOADER:
+       case JdwpConstants.Tag.CLASS_OBJECT:
+         // All these cases are ObjectIds
+         ObjectId oid = VMIdManager.getDefault().readObjectId(bb);
+         return oid.getObject();
+       default:
+         throw new NotImplementedException("Tag " + tag
+                                           + " is not implemented.");
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/VariableTable.java gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/VariableTable.java
*** gcc-4.0.2/libjava/classpath/gnu/classpath/jdwp/util/VariableTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/classpath/jdwp/util/VariableTable.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,110 ----
+ /* VariableTable.java -- A class representing a Variable Table for a method
+    Copyright (C) 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.classpath.jdwp.util;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ 
+ /**
+  * A class representing a Variable Table for a method.
+  * 
+  * @author Aaron Luchko <aluchko@redhat.com>
+  */
+ public class VariableTable
+ {
+ 
+   private final long argCnt;
+ 
+   private final long slots;
+ 
+   private final long[] lineCI;
+ 
+   private int[] slot;
+ 
+   private int[] lengths;
+ 
+   private String[] sigs;
+ 
+   private String[] names;
+ 
+   /**
+    * Make a new variable table with the given values.
+    * 
+    * @param argCnt number of words used by arguments in this frame
+    * @param slots number of variables
+    * @param lineCI first code index of given variable (size slots)
+    * @param names name of given variable (size slots)
+    * @param sigs signature of given variable (size slots)
+    * @param lengths size of region where variable is active (size slots)
+    * @param slot index of variable in this frame (size slots)
+    */
+   public VariableTable(int argCnt, int slots, long lineCI[], String names[],
+                        String sigs[], int lengths[], int slot[])
+   {
+     this.argCnt = argCnt;
+     this.slots = slots;
+     this.lineCI = lineCI;
+     this.names = names;
+     this.sigs = sigs;
+     this.lengths = lengths;
+     this.slot = slot;
+   }
+ 
+   /**
+    * Writes this line table to the given DataOutputStream.
+    * 
+    * @param os the stream to write it to
+    * @throws IOException
+    */
+   public void write(DataOutputStream os) throws IOException
+   {
+     os.writeLong(argCnt);
+     os.writeLong(slots);
+     for (int i = 0; i < slots; i++)
+       {
+         os.writeLong(lineCI[i]);
+         JdwpString.writeString(os, names[i]);
+         JdwpString.writeString(os, sigs[i]);
+         os.writeInt(lengths[i]);
+         os.writeInt(slot[i]);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/AWTUtilities.java gcc-4.1.0/libjava/classpath/gnu/java/awt/AWTUtilities.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/AWTUtilities.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/AWTUtilities.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,697 ----
+ /* AWTUtilities.java -- Common utility methods for AWT and Swing.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt;
+ 
+ import java.applet.Applet;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Insets;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.Toolkit;
+ import java.awt.Window;
+ import java.awt.event.MouseEvent;
+ import java.util.AbstractSequentialList;
+ import java.util.List;
+ import java.util.ListIterator;
+ import java.util.NoSuchElementException;
+ import java.util.WeakHashMap;
+ import java.lang.reflect.InvocationTargetException;
+ 
+ /**
+  * This class mirrors the javax.swing.SwingUtilities class. It 
+  * provides commonly needed functionalities for AWT classes without
+  * the need to reference classes in the javax.swing package.
+  */
+ public class AWTUtilities
+ {
+ 
+   /**
+    * This List implementation wraps the Component[] returned by
+    * {@link Container#getComponents()} and iterates over the visible Components
+    * in that array. This class is used in {@link #getVisibleChildren}.
+    */
+   static class VisibleComponentList extends AbstractSequentialList
+   {
+     /**
+      * The ListIterator for this List.
+      */
+     class VisibleComponentIterator implements ListIterator
+     {
+       /** The current index in the Component[]. */
+       int index;
+ 
+       /** The index in the List of visible Components. */
+       int listIndex;
+ 
+       /**
+        * Creates a new VisibleComponentIterator that starts at the specified
+        * <code>listIndex</code>. The array of Components is searched from
+        * the beginning to find the matching array index.
+        *
+        * @param listIndex the index from where to begin iterating
+        */
+       VisibleComponentIterator(int listIndex)
+       {
+ 	this.listIndex = listIndex;
+ 	int visibleComponentsFound = 0;
+ 	for (index = 0; visibleComponentsFound != listIndex; index++)
+ 	  {
+ 	    if (components[index].isVisible())
+ 	      visibleComponentsFound++;
+ 	  }
+       }
+ 
+       /**
+        * Returns <code>true</code> if there are more visible components in the
+        * array, <code>false</code> otherwise.
+        *
+        * @return <code>true</code> if there are more visible components in the
+        *     array, <code>false</code> otherwise
+        */
+       public boolean hasNext()
+       {
+ 	boolean hasNext = false;
+ 	for (int i = index; i < components.length; i++)
+ 	  {
+ 	    if (components[i].isVisible())
+ 	      {
+ 		hasNext = true;
+ 		break;
+ 	      }
+ 	  }
+ 	return hasNext;
+       }
+ 
+       /**
+        * Returns the next visible <code>Component</code> in the List.
+        *
+        * @return the next visible <code>Component</code> in the List
+        *
+        * @throws if there is no next element
+        */
+       public Object next()
+       {
+ 	Object o = null;
+ 	for (; index < components.length; index++)
+ 	  {
+ 	    if (components[index].isVisible())
+ 	      {
+ 		o = components[index];
+ 		break;
+ 	      }
+ 	  }
+ 	if (o != null)
+ 	  {
+ 	    index++;
+ 	    listIndex++;
+ 	    return o;
+ 	  }
+ 	else
+ 	  throw new NoSuchElementException();
+       }
+ 
+       /**
+        * Returns <code>true</code> if there are more visible components in the
+        * array in the reverse direction, <code>false</code> otherwise.
+        *
+        * @return <code>true</code> if there are more visible components in the
+        *     array in the reverse direction, <code>false</code> otherwise
+        */
+       public boolean hasPrevious()
+       {
+ 	boolean hasPrevious = false;
+ 	for (int i = index - 1; i >= 0; i--)
+ 	  {
+ 	    if (components[i].isVisible())
+ 	      {
+ 		hasPrevious = true;
+ 		break;
+ 	      }
+ 	  }
+ 	return hasPrevious;
+       }
+ 
+       /**
+        * Returns the previous visible <code>Component</code> in the List.
+        *
+        * @return the previous visible <code>Component</code> in the List
+        *
+        * @throws NoSuchElementException if there is no previous element
+        */
+       public Object previous()
+       {
+ 	Object o = null;
+ 	for (index--; index >= 0; index--)
+ 	  {
+ 	    if (components[index].isVisible())
+ 	      {
+ 		o = components[index];
+ 		break;
+ 	      }
+ 	  }
+ 	if (o != null)
+ 	  {
+ 	    listIndex--;
+ 	    return o;
+ 	  }
+ 	else
+ 	  throw new NoSuchElementException();
+       }
+ 
+       /**
+        * Returns the index of the next element in the List.
+        *
+        * @return the index of the next element in the List
+        */
+       public int nextIndex()
+       {
+ 	return listIndex + 1;
+       }
+ 
+       /**
+        * Returns the index of the previous element in the List.
+        *
+        * @return the index of the previous element in the List
+        */
+       public int previousIndex()
+       {
+ 	return listIndex - 1;
+       }
+ 
+       /**
+        * This operation is not supported because the List is immutable.
+        *
+        * @throws UnsupportedOperationException because the List is immutable
+        */
+       public void remove()
+       {
+ 	throw new UnsupportedOperationException
+ 	  ("VisibleComponentList is immutable");
+       }
+ 
+       /**
+        * This operation is not supported because the List is immutable.
+        *
+        * @param o not used here
+        *
+        * @throws UnsupportedOperationException because the List is immutable
+        */
+       public void set(Object o)
+       {
+ 	throw new UnsupportedOperationException
+ 	  ("VisibleComponentList is immutable");
+       }
+ 
+       /**
+        * This operation is not supported because the List is immutable.
+        *
+        * @param o not used here
+        *
+        * @throws UnsupportedOperationException because the List is immutable
+        */
+       public void add(Object o)
+       {
+ 	throw new UnsupportedOperationException
+ 	  ("VisibleComponentList is immutable");
+       }
+     }
+ 
+     /**
+      * The components over which we iterate. Only the visible components
+      * are returned by this List.
+      */
+     Component[] components;
+ 
+     /**
+      * Creates a new instance of VisibleComponentList that wraps the specified
+      * <code>Component[]</code>.
+      *
+      * @param c the <code>Component[]</code> to be wrapped.
+      */
+     VisibleComponentList(Component[] c)
+     {
+       components = c;
+     }
+ 
+     /**
+      * Returns a {@link ListIterator} for iterating over this List.
+      *
+      * @return a {@link ListIterator} for iterating over this List
+      */
+     public ListIterator listIterator(int index)
+     {
+       return new VisibleComponentIterator(index);
+     }
+ 
+     /**
+      * Returns the number of visible components in the wrapped Component[].
+      *
+      * @return the number of visible components
+      */
+     public int size()
+     {
+       int visibleComponents = 0;
+       for (int i = 0; i < components.length; i++)
+ 	if (components[i].isVisible())
+ 	  visibleComponents++;
+       return visibleComponents;
+     }
+   }
+ 
+   /**
+    * The cache for our List instances. We try to hold one instance of
+    * VisibleComponentList for each Component[] that is requested. Note
+    * that we use a WeakHashMap for caching, so that the cache itself
+    * does not keep the array or the List from beeing garbage collected
+    * if no other objects hold references to it.
+    */
+   static WeakHashMap visibleChildrenCache = new WeakHashMap();
+ 
+   /**
+    * Returns the visible children of a {@link Container}. This method is
+    * commonly needed in LayoutManagers, because they only have to layout
+    * the visible children of a Container.
+    *
+    * @param c the Container from which to extract the visible children
+    *
+    * @return the visible children of <code>c</code>
+    */
+   public static List getVisibleChildren(Container c)
+   {
+     Component[] children = c.getComponents();
+     Object o = visibleChildrenCache.get(children);
+     VisibleComponentList visibleChildren = null;
+     if (o == null)
+       {
+ 	visibleChildren = new VisibleComponentList(children);
+ 	visibleChildrenCache.put(children, visibleChildren);
+       }
+     else
+       visibleChildren = (VisibleComponentList) o;
+ 
+     return visibleChildren;
+   }
+ 
+   /**
+    * Calculates the portion of the base rectangle which is inside the
+    * insets.
+    *
+    * @param base The rectangle to apply the insets to
+    * @param insets The insets to apply to the base rectangle
+    * @param ret A rectangle to use for storing the return value, or
+    * <code>null</code>
+    *
+    * @return The calculated area inside the base rectangle and its insets,
+    * either stored in ret or a new Rectangle if ret is <code>null</code>
+    *
+    * @see #calculateInnerArea
+    */
+   public static Rectangle calculateInsetArea(Rectangle base, Insets insets,
+                                              Rectangle ret)
+   {
+     if (ret == null)
+       ret = new Rectangle();
+     ret.setBounds(base.x + insets.left, base.y + insets.top,
+         base.width - (insets.left + insets.right),
+         base.height - (insets.top + insets.bottom));
+     return ret;
+   }
+ 
+   /**
+    * Calculates the bounds of a component in the component's own coordinate
+    * space. The result has the same height and width as the component's
+    * bounds, but its location is set to (0,0).
+    *
+    * @param aComponent The component to measure
+    *
+    * @return The component's bounds in its local coordinate space
+    */
+   public static Rectangle getLocalBounds(Component aComponent)
+   {
+     Rectangle bounds = aComponent.getBounds();
+     return new Rectangle(0, 0, bounds.width, bounds.height);
+   }
+ 
+   /**
+    * Returns the font metrics object for a given font. The metrics can be
+    * used to calculate crude bounding boxes and positioning information,
+    * for laying out components with textual elements.
+    *
+    * @param font The font to get metrics for
+    *
+    * @return The font's metrics
+    *
+    * @see java.awt.font.GlyphMetrics
+    */
+   public static FontMetrics getFontMetrics(Font font)
+   {
+     return Toolkit.getDefaultToolkit().getFontMetrics(font);
+   }
+ 
+   /**
+    * Returns the least ancestor of <code>comp</code> which has the
+    * specified name.
+    *
+    * @param name The name to search for
+    * @param comp The component to search the ancestors of
+    *
+    * @return The nearest ancestor of <code>comp</code> with the given
+    * name, or <code>null</code> if no such ancestor exists
+    *
+    * @see java.awt.Component#getName
+    * @see #getAncestorOfClass
+    */
+   public static Container getAncestorNamed(String name, Component comp)
+   {
+     while (comp != null && (comp.getName() != name))
+       comp = comp.getParent();
+     return (Container) comp;
+   }
+ 
+   /**
+    * Returns the least ancestor of <code>comp</code> which is an instance
+    * of the specified class.
+    *
+    * @param c The class to search for
+    * @param comp The component to search the ancestors of
+    *
+    * @return The nearest ancestor of <code>comp</code> which is an instance
+    * of the given class, or <code>null</code> if no such ancestor exists
+    *
+    * @see #getAncestorOfClass
+    * @see #windowForComponent
+    * @see 
+    * 
+    */
+   public static Container getAncestorOfClass(Class c, Component comp)
+   {
+     while (comp != null && (! c.isInstance(comp)))
+       comp = comp.getParent();
+     return (Container) comp;
+   }
+ 
+   /**
+    * Equivalent to calling <code>getAncestorOfClass(Window, comp)</code>.
+    *
+    * @param comp The component to search for an ancestor window 
+    *
+    * @return An ancestral window, or <code>null</code> if none exists
+    */
+   public static Window windowForComponent(Component comp)
+   {
+     return (Window) getAncestorOfClass(Window.class, comp);
+   }
+ 
+   /**
+    * Returns the "root" of the component tree containint <code>comp</code>
+    * The root is defined as either the <em>least</em> ancestor of
+    * <code>comp</code> which is a {@link Window}, or the <em>greatest</em>
+    * ancestor of <code>comp</code> which is a {@link Applet} if no {@link
+    * Window} ancestors are found.
+    *
+    * @param comp The component to search for a root
+    *
+    * @return The root of the component's tree, or <code>null</code>
+    */
+   public static Component getRoot(Component comp)
+   {
+     Applet app = null;
+     Window win = null;
+ 
+     while (comp != null)
+      {
+       if (win == null && comp instanceof Window)
+         win = (Window) comp;
+       else if (comp instanceof Applet)
+         app = (Applet) comp;
+       comp = comp.getParent();
+     }
+ 
+     if (win != null)
+       return win;
+     else
+       return app;
+   }
+ 
+   /**
+    * Return true if a descends from b, in other words if b is an
+    * ancestor of a.
+    *
+    * @param a The child to search the ancestry of
+    * @param b The potential ancestor to search for
+    *
+    * @return true if a is a descendent of b, false otherwise
+    */
+   public static boolean isDescendingFrom(Component a, Component b)
+   {
+     while (true)
+      {
+       if (a == null || b == null)
+         return false;
+       if (a == b)
+         return true;
+       a = a.getParent();
+     }
+   }
+ 
+   /**
+    * Returns the deepest descendent of parent which is both visible and
+    * contains the point <code>(x,y)</code>. Returns parent when either
+    * parent is not a container, or has no children which contain
+    * <code>(x,y)</code>. Returns <code>null</code> when either
+    * <code>(x,y)</code> is outside the bounds of parent, or parent is
+    * <code>null</code>.
+    * 
+    * @param parent The component to search the descendents of
+    * @param x Horizontal coordinate to search for
+    * @param y Vertical coordinate to search for
+    *
+    * @return A component containing <code>(x,y)</code>, or
+    * <code>null</code>
+    *
+    * @see java.awt.Container#findComponentAt
+    */
+   public static Component getDeepestComponentAt(Component parent, int x, int y)
+   {
+     if (parent == null || (! parent.contains(x, y)))
+       return null;
+ 
+     if (! (parent instanceof Container))
+       return parent;
+ 
+     Container c = (Container) parent;
+     return c.findComponentAt(x, y);
+   }
+ 
+   /**
+    * Converts a point from a component's local coordinate space to "screen"
+    * coordinates (such as the coordinate space mouse events are delivered
+    * in). This operation is equivalent to translating the point by the
+    * location of the component (which is the origin of its coordinate
+    * space).
+    *
+    * @param p The point to convert
+    * @param c The component which the point is expressed in terms of
+    *
+    * @see convertPointFromScreen
+    */
+   public static void convertPointToScreen(Point p, Component c)
+   {
+     Point c0 = c.getLocationOnScreen();
+     p.translate(c0.x, c0.y);
+   }
+ 
+   /**
+    * Converts a point from "screen" coordinates (such as the coordinate
+    * space mouse events are delivered in) to a component's local coordinate
+    * space. This operation is equivalent to translating the point by the
+    * negation of the component's location (which is the origin of its
+    * coordinate space).
+    *
+    * @param p The point to convert
+    * @param c The component which the point should be expressed in terms of
+    */
+   public static void convertPointFromScreen(Point p, Component c)
+   {
+     Point c0 = c.getLocationOnScreen();
+     p.translate(-c0.x, -c0.y);
+   }
+ 
+   /**
+    * Converts a point <code>(x,y)</code> from the coordinate space of one
+    * component to another. This is equivalent to converting the point from
+    * <code>source</code> space to screen space, then back from screen space
+    * to <code>destination</code> space. If exactly one of the two
+    * Components is <code>null</code>, it is taken to refer to the root
+    * ancestor of the other component. If both are <code>null</code>, no
+    * transformation is done.
+    *
+    * @param source The component which the point is expressed in terms of
+    * @param x Horizontal coordinate of point to transform
+    * @param y Vertical coordinate of point to transform
+    * @param destination The component which the return value will be
+    * expressed in terms of
+    *
+    * @return The point <code>(x,y)</code> converted from the coordinate
+    *         space of the
+    * source component to the coordinate space of the destination component
+    *
+    * @see #convertPointToScreen
+    * @see #convertPointFromScreen
+    * @see #convertRectangle
+    * @see #getRoot
+    */
+   public static Point convertPoint(Component source, int x, int y,
+                                    Component destination)
+   {
+     Point pt = new Point(x, y);
+ 
+     if (source == null && destination == null)
+       return pt;
+ 
+     if (source == null)
+       source = getRoot(destination);
+ 
+     if (destination == null)
+       destination = getRoot(source);
+     
+     if (source.isShowing() && destination.isShowing())
+       {
+         convertPointToScreen(pt, source);
+         convertPointFromScreen(pt, destination);
+       }
+ 
+     return pt;
+   }
+ 
+   
+   /**
+    * Converts a rectangle from the coordinate space of one component to
+    * another. This is equivalent to converting the rectangle from
+    * <code>source</code> space to screen space, then back from screen space
+    * to <code>destination</code> space. If exactly one of the two
+    * Components is <code>null</code>, it is taken to refer to the root
+    * ancestor of the other component. If both are <code>null</code>, no
+    * transformation is done.
+    *
+    * @param source The component which the rectangle is expressed in terms of
+    * @param rect The rectangle to convert
+    * @param destination The component which the return value will be
+    * expressed in terms of
+    *
+    * @return A new rectangle, equal in size to the input rectangle, but
+    * with its position converted from the coordinate space of the source
+    * component to the coordinate space of the destination component
+    *
+    * @see #convertPointToScreen
+    * @see #convertPointFromScreen
+    * @see #convertPoint
+    * @see #getRoot
+    */
+   public static Rectangle convertRectangle(Component source, Rectangle rect,
+                                            Component destination)
+   {
+     Point pt = convertPoint(source, rect.x, rect.y, destination);
+     return new Rectangle(pt.x, pt.y, rect.width, rect.height);
+   }
+ 
+   /**
+    * Convert a mouse event which refrers to one component to another.  This
+    * includes changing the mouse event's coordinate space, as well as the
+    * source property of the event. If <code>source</code> is
+    * <code>null</code>, it is taken to refer to <code>destination</code>'s
+    * root component. If <code>destination</code> is <code>null</code>, the
+    * new event will remain expressed in <code>source</code>'s coordinate
+    * system.
+    *
+    * @param source The component the mouse event currently refers to
+    * @param sourceEvent The mouse event to convert
+    * @param destination The component the new mouse event should refer to
+    *
+    * @return A new mouse event expressed in terms of the destination
+    * component's coordinate space, and with the destination component as
+    * its source
+    *
+    * @see #convertPoint
+    */
+   public static MouseEvent convertMouseEvent(Component source,
+                                              MouseEvent sourceEvent,
+                                              Component destination)
+   {
+     Point newpt = convertPoint(source, sourceEvent.getX(), sourceEvent.getY(),
+                                destination);
+ 
+     return new MouseEvent(destination, sourceEvent.getID(),
+                           sourceEvent.getWhen(), sourceEvent.getModifiers(),
+                           newpt.x, newpt.y, sourceEvent.getClickCount(),
+                           sourceEvent.isPopupTrigger(),
+                           sourceEvent.getButton());
+   }
+ 
+ 
+   /** 
+    * Calls {@link java.awt.EventQueue.invokeLater} with the
+    * specified {@link Runnable}. 
+    */
+   public static void invokeLater(Runnable doRun)
+   {
+     java.awt.EventQueue.invokeLater(doRun);
+   }
+ 
+   /** 
+    * Calls {@link java.awt.EventQueue.invokeAndWait} with the
+    * specified {@link Runnable}. 
+    */
+   public static void invokeAndWait(Runnable doRun)
+   throws InterruptedException,
+   InvocationTargetException
+   {
+     java.awt.EventQueue.invokeAndWait(doRun);
+   }
+ 
+   /** 
+    * Calls {@link java.awt.EventQueue.isEventDispatchThread}.
+    */
+   public static boolean isEventDispatchThread()
+   {
+     return java.awt.EventQueue.isDispatchThread();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/BitMaskExtent.java gcc-4.1.0/libjava/classpath/gnu/java/awt/BitMaskExtent.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/BitMaskExtent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/BitMaskExtent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* Copyright (C) 2000, 2002  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt;
+ 
+ /** 
+  * Simple transparent utility class that can be used to perform bit
+  * mask extent calculations.
+  */
+ public final class BitMaskExtent
+ {
+   /** The number of the least significant bit of the bit mask extent. */
+   public byte leastSignificantBit;
+ 
+   /** The number of bits in the bit mask extent. */
+   public byte bitWidth;
+   
+   /**
+    * Set the bit mask. This will calculate and set the leastSignificantBit
+    * and bitWidth fields.
+    *
+    * @see #leastSignificantBit
+    * @see #bitWidth
+    */
+   public void setMask(long mask)
+   {
+     leastSignificantBit = 0;
+     bitWidth = 0;
+     if (mask == 0) return;
+     long shiftMask = mask;
+     for (; (shiftMask&1) == 0; shiftMask >>>=1) leastSignificantBit++;
+     for (; (shiftMask&1) != 0; shiftMask >>>=1) bitWidth++;
+     
+     if (shiftMask != 0)
+       throw new IllegalArgumentException("mask must be continuous");
+   }
+   
+   /** 
+    * Calculate the bit mask based on the values of the
+    * leastSignificantBit and bitWidth fields.
+    */
+   public long toMask()
+   {
+     return ((1<<bitWidth)-1) << leastSignificantBit;
+   }  
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/BitwiseXORComposite.java gcc-4.1.0/libjava/classpath/gnu/java/awt/BitwiseXORComposite.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/BitwiseXORComposite.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/BitwiseXORComposite.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,295 ----
+ /* BitwiseXORComposite.java -- Composite for emulating old-style XOR.
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt;
+ 
+ import java.awt.Color;
+ import java.awt.Composite;
+ import java.awt.CompositeContext;
+ import java.awt.Rectangle;
+ import java.awt.RenderingHints;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ 
+ 
+ /**
+  * A composite for emulating traditional bitwise XOR of pixel values.
+  * Please note that this composite does <i>not</i> implement the Porter-Duff
+  * XOR operator, but an exclusive or of overlapping subpixel regions.
+  *
+  * <p><img src="doc-files/BitwiseXORComposite-1.png" width="545"
+  * height="138" alt="A screen shot of BitwiseXORComposite in action"
+  * />
+  *
+  * <p>The above screen shot shows the result of applying six different
+  * BitwiseXORComposites. They were constructed with the colors colors
+  * white, blue, black, orange, green, and brown, respectively. Each
+  * composite was used to paint a fully white rectangle on top of the
+  * blue bar in the background.
+  * 
+  * <p>The purpose of this composite is to support the {@link
+  * Graphics#setXORMode(Color)} method in composite-aware graphics
+  * implementations. Applications typically would use
+  * <code>setXORMode</code> for drawing &#x201c;highlights&#x201d; such
+  * as text selections or cursors by inverting colors temporarily and
+  * then inverting them back.
+  *
+  * <p>A concrete <code>Graphics</code> implementation may contain
+  * the following code:
+  *
+  * <p><pre> public void setXORMode(Color xorColor)
+  * {
+  *   setComposite(new gnu.java.awt.BitwiseXORComposite(xorColor));
+  * }
+  *
+  * public void setPaintMode()
+  * {
+  *   setComposite(java.awt.AlphaComposite.SrcOver);
+  * }</pre>
+  *
+  * @author Graydon Hoare (graydon@redhat.com)
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public class BitwiseXORComposite
+   implements Composite
+ {
+   /**
+    * The color whose RGB value is xor-ed with the values of each
+    * pixel.
+    */
+   protected Color xorColor;
+ 
+   
+   /**
+    * Constructs a new composite for xor-ing the pixel value.
+    *
+    * @param xorColor the color whose pixel value will be bitwise
+    * xor-ed with the source and destination pixels.
+    */
+   public BitwiseXORComposite(Color xorColor)
+   {
+     this.xorColor = xorColor;
+   }
+ 
+ 
+   /**
+    * Creates a context object for performing the compositing
+    * operation. Several contexts may co-exist for one composite; each
+    * context may simultaneously be called from concurrent threads.
+    *
+    * @param srcColorModel the color model of the source.
+    * @param dstColorModel the color model of the destination.
+    * @param hints hints for choosing between rendering alternatives.
+    */
+   public CompositeContext createContext(ColorModel srcColorModel,
+                                         ColorModel dstColorModel,
+                                         RenderingHints hints)
+   {
+     if (IntContext.isSupported(srcColorModel, dstColorModel, hints))
+       return new IntContext(srcColorModel, xorColor);
+ 
+     return new GeneralContext(srcColorModel, dstColorModel, xorColor);
+   }
+ 
+   
+   /**
+    * A fallback CompositeContext that performs bitwise XOR of pixel
+    * values with the pixel value of the specified <code>xorColor</code>.
+    *
+    * <p>Applying this CompositeContext on a 1024x1024 BufferedImage of
+    * <code>TYPE_INT_RGB</code> took 611 ms on a lightly loaded 2.4 GHz
+    * Intel Pentium 4 CPU running Sun J2SE 1.4.1_01 on GNU/Linux
+    * 2.4.20. The timing is the average of ten runs on the same
+    * BufferedImage. Since the measurements were taken with {@link
+    * System#currentTimeMillis()}, they are rather inaccurate.
+    *
+    * @author Graydon Hoare (graydon@redhat.com)
+    */
+   private static class GeneralContext
+     implements CompositeContext
+   {
+     ColorModel srcColorModel;
+     ColorModel dstColorModel;
+     Color xorColor;
+ 
+     public GeneralContext(ColorModel srcColorModel,
+                           ColorModel dstColorModel,
+                           Color xorColor)
+     {
+       this.srcColorModel = srcColorModel;
+       this.dstColorModel = dstColorModel;
+       this.xorColor = xorColor;
+     }
+ 
+ 
+     public void compose(Raster src, Raster dstIn, WritableRaster dstOut)
+     {
+       Rectangle srcRect = src.getBounds();
+       Rectangle dstInRect = dstIn.getBounds();
+       Rectangle dstOutRect = dstOut.getBounds();
+       
+       int xp = xorColor.getRGB();
+       int w = Math.min(Math.min(srcRect.width, dstOutRect.width),
+                        dstInRect.width);
+       int h = Math.min(Math.min(srcRect.height, dstOutRect.height),
+                        dstInRect.height);
+ 
+       Object srcPix = null, dstPix = null, rpPix = null;
+ 
+       // Re-using the rpPix object saved 1-2% of execution time in
+       // the 1024x1024 pixel benchmark.
+ 
+       for (int y = 0; y < h; y++)
+       {
+         for (int x = 0; x < w; x++)
+         {
+           srcPix = src.getDataElements(x + srcRect.x, y + srcRect.y, srcPix);
+           dstPix = dstIn.getDataElements(x + dstInRect.x, y + dstInRect.y,
+                                          dstPix);
+           int sp = srcColorModel.getRGB(srcPix);
+           int dp = dstColorModel.getRGB(dstPix);
+           int rp = sp ^ xp ^ dp;
+           dstOut.setDataElements(x + dstOutRect.x, y + dstOutRect.y, 
+                                  dstColorModel.getDataElements(rp, rpPix));
+         }
+       }
+     }
+ 
+ 
+     /**
+      * Disposes any cached resources. The default implementation does
+      * nothing because no resources are cached.
+      */
+     public void dispose()
+     {
+     }
+   }
+ 
+ 
+   /**
+    * An optimized CompositeContext that performs bitwise XOR of
+    * <code>int</code> pixel values with the pixel value of a specified
+    * <code>xorColor</code>.  This CompositeContext working only for
+    * rasters whose transfer format is {@link DataBuffer#TYPE_INT}.
+    *
+    * <p>Applying this CompositeContext on a 1024x1024 BufferedImage of
+    * <code>TYPE_INT_RGB</code> took 69 ms on a lightly loaded 2.4 GHz
+    * Intel Pentium 4 CPU running Sun J2SE 1.4.1_01 on GNU/Linux
+    * 2.4.20. The timing is the average of ten runs on the same
+    * BufferedImage. Since the measurements were taken with {@link
+    * System#currentTimeMillis()}, they are rather inaccurate.
+    *
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    */
+   private static class IntContext
+     extends GeneralContext
+   {
+     public IntContext(ColorModel colorModel, Color xorColor)
+     {
+       super(colorModel, colorModel, xorColor);
+     }
+ 
+ 
+     public void compose(Raster src, Raster dstIn,
+                         WritableRaster dstOut)
+     {
+       int aX, bX, dstX, aY, bY, dstY, width, height;
+       int xorPixel;
+       int[] srcLine, dstLine;
+ 
+       aX = src.getMinX();
+       aY = src.getMinY();
+       bX = dstIn.getMinX();
+       bY = dstIn.getMinY();
+       dstX = dstOut.getMinX();
+       dstY = dstOut.getMinY();
+       width = Math.min(Math.min(src.getWidth(), dstIn.getWidth()),
+                        dstOut.getWidth());
+       height = Math.min(Math.min(src.getHeight(), dstIn.getHeight()),
+                         dstOut.getHeight());
+       if ((width < 1) || (height < 1))
+         return;
+ 
+       srcLine = new int[width];
+       dstLine = new int[width];
+       
+       /* We need an int[] array with at least one element here;
+        * srcLine is as good as any other.
+        */
+       srcColorModel.getDataElements(this.xorColor.getRGB(), srcLine);
+       xorPixel = srcLine[0];
+ 
+       for (int y = 0; y < height; y++)
+       {
+         src.getDataElements(aX, y + aY, width, 1, srcLine);
+         dstIn.getDataElements(bX, y + bY, width, 1, dstLine);
+ 
+         for (int x = 0; x < width; x++)
+           dstLine[x] ^= srcLine[x] ^ xorPixel;
+ 
+         dstOut.setDataElements(dstX, y + dstY, width, 1, dstLine);
+       }
+     }
+ 
+     
+     /**
+      * Determines whether an instance of this CompositeContext would
+      * be able to process the specified color models.
+      */
+     public static boolean isSupported(ColorModel srcColorModel,
+                                       ColorModel dstColorModel,
+                                       RenderingHints hints)
+     {
+       // FIXME: It would be good if someone could review these checks.
+       // They probably need to be more restrictive.
+ 
+       int transferType;
+ 
+       transferType = srcColorModel.getTransferType();
+       if (transferType != dstColorModel.getTransferType())
+         return false;
+ 
+       if (transferType != DataBuffer.TYPE_INT)
+         return false;
+ 
+       return true;
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/Buffers.java gcc-4.1.0/libjava/classpath/gnu/java/awt/Buffers.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/Buffers.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/Buffers.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,243 ----
+ /* Buffers.java --
+    Copyright (C) 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt;
+ 
+ import java.awt.image.DataBuffer;
+ import java.awt.image.DataBufferByte;
+ import java.awt.image.DataBufferDouble;
+ import java.awt.image.DataBufferFloat;
+ import java.awt.image.DataBufferInt;
+ import java.awt.image.DataBufferShort;
+ import java.awt.image.DataBufferUShort;
+ 
+ /** 
+  * Utility class for creating and accessing data buffers of arbitrary
+  * data types.
+  */
+ public final class Buffers
+ {
+   /**
+    * Create a data buffer of a particular type.
+    *
+    * @param dataType the desired data type of the buffer.
+    * @param data an array containing data, or null
+    * @param size the size of the data buffer bank
+    */
+   public static DataBuffer createBuffer(int dataType, Object data,
+ 					int size)
+   {
+     if (data == null) return createBuffer(dataType, size, 1);
+ 
+     return createBufferFromData(dataType, data, size);
+   }
+ 
+ 
+   /**
+    * Create a data buffer of a particular type.
+    *
+    * @param dataType the desired data type of the buffer.
+    * @param size the size of the data buffer bank
+    */
+   public static DataBuffer createBuffer(int dataType, int size) {
+     return createBuffer(dataType, size, 1);
+   }
+ 
+   /**
+    * Create a data buffer of a particular type.
+    *
+    * @param dataType the desired data type of the buffer.
+    * @param size the size of the data buffer bank
+    * @param numBanks the number of banks the buffer should have
+    */
+   public static DataBuffer createBuffer(int dataType, int size, int numBanks)
+   {
+     switch (dataType)
+       {
+       case DataBuffer.TYPE_BYTE:
+ 	return new DataBufferByte(size, numBanks);
+       case DataBuffer.TYPE_SHORT:
+ 	return new DataBufferShort(size, numBanks);
+       case DataBuffer.TYPE_USHORT:
+ 	return new DataBufferUShort(size, numBanks);
+       case DataBuffer.TYPE_INT:
+ 	return new DataBufferInt(size, numBanks);
+       case DataBuffer.TYPE_FLOAT:
+ 	return new DataBufferFloat(size, numBanks);
+       case DataBuffer.TYPE_DOUBLE:
+ 	return new DataBufferDouble(size, numBanks);
+       default:
+ 	throw new UnsupportedOperationException();
+       }
+   }
+   
+   /**
+    * Create a data buffer of a particular type.
+    *
+    * @param dataType the desired data type of the buffer
+    * @param data an array containing the data
+    * @param size the size of the data buffer bank
+    */
+   public static DataBuffer createBufferFromData(int dataType, Object data,
+ 						int size)
+   {
+     switch (dataType)
+       {
+       case DataBuffer.TYPE_BYTE:
+ 	return new DataBufferByte((byte[]) data, size);
+       case DataBuffer.TYPE_SHORT:
+ 	return new DataBufferShort((short[]) data, size);
+       case DataBuffer.TYPE_USHORT:
+ 	return new DataBufferUShort((short[]) data, size);
+       case DataBuffer.TYPE_INT:
+ 	return new DataBufferInt((int[]) data, size);
+       case DataBuffer.TYPE_FLOAT:
+ 	return new DataBufferFloat((float[]) data, size);
+       case DataBuffer.TYPE_DOUBLE:
+ 	return new DataBufferDouble((double[]) data, size);
+       default:
+ 	throw new UnsupportedOperationException();
+       }
+   }
+ 
+   /** 
+    * Return the data array of a data buffer, regardless of the data
+    * type.
+    *
+    * @return an array of primitive values. The actual array type
+    * depends on the data type of the buffer.
+    */
+   public static Object getData(DataBuffer buffer)
+   {
+     if (buffer instanceof DataBufferByte)
+       return ((DataBufferByte) buffer).getData();
+ 
+     if (buffer instanceof DataBufferShort)
+       return ((DataBufferShort) buffer).getData();
+ 
+     if (buffer instanceof DataBufferUShort)
+       return ((DataBufferUShort) buffer).getData();
+ 
+     if (buffer instanceof DataBufferInt)
+       return ((DataBufferInt) buffer).getData();
+ 
+     if (buffer instanceof DataBufferFloat)
+       return ((DataBufferFloat) buffer).getData();
+ 
+     if (buffer instanceof DataBufferDouble)
+       return ((DataBufferDouble) buffer).getData();
+ 
+     throw new ClassCastException("Unknown data buffer type");
+   }
+ 
+     
+   /**
+    * Copy data from array contained in data buffer, much like
+    * System.arraycopy. Create a suitable destination array if the
+    * given destination array is null.
+    */
+   public static Object getData(DataBuffer src, int srcOffset,
+ 			       Object dest,  int destOffset,
+ 			       int length)
+   {
+     Object from;
+     if (src instanceof DataBufferByte)
+       {
+ 	from = ((DataBufferByte) src).getData();
+ 	if (dest == null) dest = new byte[length+destOffset];
+       }
+     else if (src instanceof DataBufferShort)
+       {
+ 	from = ((DataBufferShort) src).getData();
+ 	if (dest == null) dest = new short[length+destOffset];
+       }
+     else if (src instanceof DataBufferUShort)
+       {
+ 	from = ((DataBufferUShort) src).getData();
+ 	if (dest == null) dest = new short[length+destOffset];
+       }
+     else if (src instanceof DataBufferInt)
+       {
+ 	from = ((DataBufferInt) src).getData();
+ 	if (dest == null) dest = new int[length+destOffset];
+       }
+     else if (src instanceof DataBufferFloat)
+       {
+ 	from = ((DataBufferFloat) src).getData();
+ 	if (dest == null) dest = new float[length+destOffset];
+       }
+     else if (src instanceof DataBufferDouble)
+       {
+ 	from = ((DataBufferDouble) src).getData();
+ 	if (dest == null) dest = new double[length+destOffset];
+       }
+     else
+       {
+ 	throw new ClassCastException("Unknown data buffer type");
+       }
+     
+     System.arraycopy(from, srcOffset, dest, destOffset, length);
+     return dest;
+   }
+   
+   /**
+    * @param bits the width of a data element measured in bits
+    *
+    * @return the smallest data type that can store data elements of
+    * the given number of bits, without any truncation.
+    */
+   public static int smallestAppropriateTransferType(int bits)
+   {
+     if (bits <= 8)
+       {
+ 	return DataBuffer.TYPE_BYTE;
+       }
+     else if (bits <= 16)
+       {
+ 	return DataBuffer.TYPE_USHORT;
+       } 
+     else if (bits <= 32)
+       {
+ 	return DataBuffer.TYPE_INT;
+       }
+     else
+       {
+ 	return DataBuffer.TYPE_UNDEFINED;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/ClasspathToolkit.java gcc-4.1.0/libjava/classpath/gnu/java/awt/ClasspathToolkit.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/ClasspathToolkit.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/ClasspathToolkit.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,213 ----
+ /* ClasspathToolkit.java -- Abstract superclass for Classpath toolkits.
+    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt;
+ 
+ import gnu.java.awt.EmbeddedWindow;
+ import gnu.java.awt.peer.ClasspathFontPeer;
+ import gnu.java.awt.peer.EmbeddedWindowPeer;
+ import gnu.java.awt.peer.ClasspathTextLayoutPeer;
+ import gnu.java.security.action.SetAccessibleAction;
+ 
+ import java.awt.AWTException;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.DisplayMode;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.GraphicsDevice;
+ import java.awt.GraphicsEnvironment;
+ import java.awt.Image;
+ import java.awt.Toolkit;
+ import java.awt.font.FontRenderContext;
+ import java.awt.image.ColorModel;
+ import java.awt.image.ImageProducer;
+ import java.awt.peer.RobotPeer;
+ import java.io.File;
+ import java.io.InputStream;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.InvocationTargetException;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.text.AttributedString;
+ import java.util.HashMap;
+ import java.util.Map;
+ import java.security.AccessController;
+ 
+ import javax.imageio.spi.IIORegistry;
+ 
+ /**
+  * An abstract superclass for Classpath toolkits.
+  *
+  * <p>There exist some parts of AWT and Java2D that are specific to
+  * the underlying platform, but for which the {@link Toolkit} class
+  * does not provide suitable abstractions. Examples include some
+  * methods of {@link Font} or {@link GraphicsEnvironment}. Those
+  * methods use ClasspathToolkit as a central place for obtaining
+  * platform-specific functionality.
+  *
+  * <p>In addition, ClasspathToolkit implements some abstract methods
+  * of {@link java.awt.Toolkit} that are not really platform-specific,
+  * such as the maintenance of a cache of loaded images.
+  *
+  * <p><b>Thread Safety:</b> The methods of this class may safely be
+  * called without external synchronization. This also hold for any
+  * inherited {@link Toolkit} methods. Subclasses are responsible for
+  * the necessary synchronization.
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public abstract class ClasspathToolkit
+   extends Toolkit
+ {
+   /**
+    * Returns a shared instance of the local, platform-specific
+    * graphics environment.
+    *
+    * <p>This method is specific to GNU Classpath. It gets called by
+    * the Classpath implementation of {@link
+    * GraphicsEnvironment.getLocalGraphcisEnvironment()}.
+    */
+   public abstract GraphicsEnvironment getLocalGraphicsEnvironment();
+ 
+   /**
+    * Acquires an appropriate {@link ClasspathFontPeer}, for use in
+    * classpath's implementation of {@link java.awt.Font}.
+    *
+    * @param name The logical name of the font. This may be either a face
+    * name or a logical font name, or may even be null. A default
+    * implementation of name decoding is provided in 
+    * {@link ClasspathFontPeer}, but may be overridden in other toolkits.
+    *
+    * @param attrs Any extra {@link java.awt.font.TextAttribute} attributes
+    * this font peer should have, such as size, weight, family name, or
+    * transformation.
+    */
+   public abstract ClasspathFontPeer getClasspathFontPeer (String name, Map attrs); 
+ 
+   public abstract ClasspathTextLayoutPeer 
+   getClasspathTextLayoutPeer (AttributedString str, FontRenderContext frc); 
+ 
+ 
+   /** 
+    * Creates a {@link Font}, in a platform-specific manner.
+    * 
+    * The default implementation simply constructs a {@link Font}, but some
+    * toolkits may wish to override this, to return {@link Font} subclasses 
+    * which implement {@link java.awt.font.OpenType} or
+    * {@link java.awt.font.MultipleMaster}.
+    */
+   public Font getFont (String name, Map attrs) 
+   {
+     Font f = null;
+ 
+     // Circumvent the package-privateness of the
+     // java.awt.Font.Font(String,Map) constructor.
+     try
+       {
+         Constructor fontConstructor = Font.class.getDeclaredConstructor
+           (new Class[] { String.class, Map.class });
+         AccessController.doPrivileged
+           (new SetAccessibleAction(fontConstructor));
+         f = (Font) fontConstructor.newInstance(new Object[] { name, attrs });
+       }
+     catch (IllegalAccessException e)
+       {
+         throw new AssertionError(e);
+       }
+     catch (NoSuchMethodException e)
+       {
+         throw new AssertionError(e);
+       }
+     catch (InstantiationException e)
+       {
+         throw new AssertionError(e);
+       }
+     catch (InvocationTargetException e)
+       {
+         throw new AssertionError(e);
+       }
+     return f;
+   }
+ 
+   /**
+    * Creates a font, reading the glyph definitions from a stream.
+    *
+    * <p>This method provides the platform-specific implementation for
+    * the static factory method {@link Font#createFont(int,
+    * java.io.InputStream)}.
+    *
+    * @param format the format of the font data, such as {@link
+    * Font#TRUETYPE_FONT}. An implementation may ignore this argument
+    * if it is able to automatically recognize the font format from the
+    * provided data.
+    *
+    * @param stream an input stream from where the font data is read
+    * in. The stream will be advanced to the position after the font
+    * data, but not closed.
+    *
+    * @throws IllegalArgumentException if <code>format</code> is
+    * not supported.
+    * 
+    * @throws FontFormatException if <code>stream</code> does not
+    * contain data in the expected format, or if required tables are
+    * missing from a font.
+    *
+    * @throws IOException if a problem occurs while reading in the
+    * contents of <code>stream</code>.
+    */
+   public abstract Font createFont(int format, InputStream stream);
+ 
+   public abstract RobotPeer createRobot (GraphicsDevice screen)
+     throws AWTException;
+ 
+   /**
+    * Creates an embedded window peer, and associates it with an
+    * EmbeddedWindow object.
+    *
+    * @param w The embedded window with which to associate a peer.
+    */
+   public abstract EmbeddedWindowPeer createEmbeddedWindow (EmbeddedWindow w);
+ 
+   /**
+    * Used to register ImageIO SPIs provided by the toolkit.
+    */
+    public void registerImageIOSpis(IIORegistry reg)
+    {
+    }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/ComponentDataBlitOp.java gcc-4.1.0/libjava/classpath/gnu/java/awt/ComponentDataBlitOp.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/ComponentDataBlitOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/ComponentDataBlitOp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,156 ----
+ /* Copyright (C) 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt;
+ 
+ import java.awt.RenderingHints;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.image.ComponentSampleModel;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.Raster;
+ import java.awt.image.RasterOp;
+ import java.awt.image.WritableRaster;
+ 
+ /**
+  * This raster copy operation assumes that both source and destination
+  * sample models are tightly pixel packed and contain the same number
+  * of bands.
+  *
+  * @throws java.lang.ClassCastException if the sample models of the
+  * rasters are not of type ComponentSampleModel.
+  * 
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public class ComponentDataBlitOp implements RasterOp
+ {
+   public static final ComponentDataBlitOp INSTANCE = new ComponentDataBlitOp();
+ 
+   public WritableRaster filter(Raster src, WritableRaster dest)
+   {
+     if (dest == null)
+       dest = createCompatibleDestRaster(src);
+     
+     DataBuffer  srcDB =  src.getDataBuffer();
+     DataBuffer destDB = dest.getDataBuffer();
+     
+     ComponentSampleModel  srcSM = (ComponentSampleModel)  src.getSampleModel();
+     ComponentSampleModel destSM = (ComponentSampleModel) dest.getSampleModel();
+ 
+     
+     // Calculate offset to data in the underlying arrays:
+ 
+     int  srcScanlineStride =  srcSM.getScanlineStride();
+     int destScanlineStride = destSM.getScanlineStride();
+     int srcX  =  src.getMinX() -  src.getSampleModelTranslateX();
+     int srcY  =  src.getMinY() -  src.getSampleModelTranslateY();
+     int destX = dest.getMinX() - dest.getSampleModelTranslateX();
+     int destY = dest.getMinY() - dest.getSampleModelTranslateY();
+ 
+     int numBands = srcSM.getNumBands();
+ 
+     /* We can't use getOffset(x, y) from the sample model since we
+        don't want the band offset added in. */
+ 	
+     int srcOffset = 
+       numBands*srcX + srcScanlineStride*srcY +    // from sample model
+       srcDB.getOffset();                          // from data buffer
+ 
+     int destOffset =
+       numBands*destX + destScanlineStride*destY + // from sample model
+       destDB.getOffset();                         // from data buffer
+ 
+     // Determine how much, and how many times to blit.
+     
+     int rowSize = src.getWidth()*numBands;
+     int h = src.getHeight();
+     
+     if ((rowSize == srcScanlineStride) &&
+ 	(rowSize == destScanlineStride))
+       {
+ 	// collapse scan line blits to one large blit.
+ 	rowSize *= h;
+ 	h = 1;
+       }
+ 
+ 	
+     // Do blitting
+     
+     Object srcArray  = Buffers.getData(srcDB);
+     Object destArray = Buffers.getData(destDB);
+     
+     for (int yd = 0; yd<h; yd++)
+       {
+ 	System.arraycopy(srcArray, srcOffset, 
+ 			 destArray, destOffset,
+ 			 rowSize);
+ 	srcOffset  +=  srcScanlineStride;
+ 	destOffset += destScanlineStride;
+       }
+     
+ 
+     return dest;
+   }
+ 
+   public Rectangle2D getBounds2D(Raster src) 
+   {
+     return src.getBounds();
+   }
+ 
+   public WritableRaster createCompatibleDestRaster(Raster src) {
+     
+     /* FIXME: Maybe we should explicitly create a raster with a
+        tightly pixel packed sample model, rather than assuming
+        that the createCompatibleWritableRaster() method in Raster
+        will create one. */
+ 
+     return src.createCompatibleWritableRaster();
+   }
+ 
+   public Point2D getPoint2D(Point2D srcPoint, Point2D destPoint) 
+   {
+     if (destPoint == null)
+       return (Point2D) srcPoint.clone();
+ 
+     destPoint.setLocation(srcPoint);
+     return destPoint;
+   }
+ 
+   public RenderingHints getRenderingHints() 
+   {
+     throw new UnsupportedOperationException("not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/EmbeddedWindow.java gcc-4.1.0/libjava/classpath/gnu/java/awt/EmbeddedWindow.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/EmbeddedWindow.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/EmbeddedWindow.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,139 ----
+ /* EmbeddedWindow.java --
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt;
+ 
+ import gnu.java.awt.peer.EmbeddedWindowPeer;
+ import gnu.java.security.action.SetAccessibleAction;
+ 
+ import java.awt.Component;
+ import java.awt.Frame;
+ import java.awt.Toolkit;
+ import java.lang.reflect.Field;
+ import java.security.AccessController;
+ 
+ /**
+  * Represents an AWT window that can be embedded into another
+  * application.
+  * 
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class EmbeddedWindow extends Frame
+ {
+   private long handle;
+   
+   /**
+    * Creates a window to be embedded into another application.  The
+    * window will only be embedded after its setHandle method has been
+    * called.
+    */
+   public EmbeddedWindow ()
+   {
+     super();
+     this.handle = 0;
+   }
+   
+   /**
+    * Creates a window to be embedded into another application.
+    *
+    * @param handle the native handle to the screen area where the AWT
+    * window should be embedded
+    */
+   public EmbeddedWindow (long handle)
+   {
+     super();
+     this.handle = handle;
+   }
+   
+   /**
+    * Creates the native peer for this embedded window.
+    */
+   public void addNotify()
+   {
+     // Assume we're using ClasspathToolkit
+     ClasspathToolkit tk = (ClasspathToolkit) getToolkit();
+ 
+     // Circumvent the package-privateness of the AWT internal
+     // java.awt.Component.peer member variable.
+     try
+       {
+ 	Field peerField = Component.class.getDeclaredField("peer");
+ 	AccessController.doPrivileged(new SetAccessibleAction(peerField));
+ 	peerField.set(this, tk.createEmbeddedWindow (this));
+       }
+     catch (IllegalAccessException e)
+       {
+         throw new AssertionError (e);
+       }
+     catch (NoSuchFieldException e)
+       {
+         throw new AssertionError (e);
+       }
+ 
+     super.addNotify();
+   }
+ 
+   /**
+    * If the native peer for this embedded window has been created,
+    * then setHandle will embed the window.  If not, setHandle tells
+    * us where to embed ourselves when our peer is created.
+    *
+    * @param handle the native handle to the screen area where the AWT
+    * window should be embedded
+    */
+   public void setHandle(long handle)
+   {
+     if (this.handle != 0)
+       throw new RuntimeException ("EmbeddedWindow is already embedded");
+ 
+     this.handle = handle;
+     if (getPeer() != null)
+       ((EmbeddedWindowPeer) getPeer()).embed (this.handle);
+   }
+ 
+   /**
+    * Gets the native handle of the screen area where the window will
+    * be embedded.
+    *
+    * @return The native handle that was passed to the constructor.
+    */
+   public long getHandle()
+   {
+     return handle;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/EventModifier.java gcc-4.1.0/libjava/classpath/gnu/java/awt/EventModifier.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/EventModifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/EventModifier.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,107 ----
+ /* EventModifier.java -- tool for converting modifier bits to 1.4 syle
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt;
+ 
+ import java.awt.event.InputEvent;
+ 
+ public class EventModifier
+ {
+   /** The mask for old events. */
+   public static final int OLD_MASK = 0x3f;
+ 
+   /** The mask for new events. */
+   public static final int NEW_MASK = 0x3fc0;
+ 
+   /**
+    * Non-instantiable.
+    */
+   private EventModifier()
+   {
+     throw new InternalError();
+   }
+ 
+   /**
+    * Converts the old style modifiers (0x3f) to the new style (0xffffffc0).
+    *
+    * @param mod the modifiers to convert
+    * @return the adjusted modifiers
+    */
+   public static int extend(int mod)
+   {
+     // Favor what we hope will be the common case.
+     if ((mod & OLD_MASK) == 0)
+       return mod;
+     if ((mod & InputEvent.SHIFT_MASK) != 0)
+       mod |= InputEvent.SHIFT_DOWN_MASK;
+     if ((mod & InputEvent.CTRL_MASK) != 0)
+       mod |= InputEvent.CTRL_DOWN_MASK;
+     if ((mod & InputEvent.META_MASK) != 0)
+       mod |= InputEvent.META_DOWN_MASK;
+     if ((mod & InputEvent.ALT_MASK) != 0)
+       mod |= InputEvent.ALT_DOWN_MASK;
+     if ((mod & InputEvent.BUTTON1_MASK) != 0)
+       mod |= InputEvent.BUTTON1_DOWN_MASK;
+     if ((mod & InputEvent.ALT_GRAPH_MASK) != 0)
+       mod |= InputEvent.ALT_GRAPH_DOWN_MASK;
+     return mod & ~OLD_MASK;
+   }
+ 
+   /**
+    * Converts the new style modifiers (0xffffffc0) to the old style (0x3f).
+    *
+    * @param mod the modifiers to convert
+    * @return the adjusted modifiers
+    */
+   public static int revert(int mod)
+   {
+     if ((mod & InputEvent.SHIFT_DOWN_MASK) != 0)
+       mod |= InputEvent.SHIFT_MASK;
+     if ((mod & InputEvent.CTRL_DOWN_MASK) != 0)
+       mod |= InputEvent.CTRL_MASK;
+     if ((mod & InputEvent.META_DOWN_MASK) != 0)
+       mod |= InputEvent.META_MASK;
+     if ((mod & InputEvent.ALT_DOWN_MASK) != 0)
+       mod |= InputEvent.ALT_MASK;
+     if ((mod & InputEvent.ALT_GRAPH_DOWN_MASK) != 0)
+       mod |= InputEvent.ALT_GRAPH_MASK;
+     if ((mod & InputEvent.BUTTON1_DOWN_MASK) != 0)
+       mod |= InputEvent.BUTTON1_MASK;
+     return mod & OLD_MASK;
+   }
+ } // class EventModifier
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/GradientPaintContext.java gcc-4.1.0/libjava/classpath/gnu/java/awt/GradientPaintContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/GradientPaintContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/GradientPaintContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,164 ----
+ /* GradientPaintContext.java -- 
+    Copyright (C) 2005, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt;
+ 
+ import java.awt.geom.Point2D;
+ import java.awt.image.ColorModel;
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ import java.awt.PaintContext;
+ import java.awt.Color;
+ 
+ /**
+  * A {@link PaintContext} used by the {@link GradientPaint} class.
+  */
+ public class GradientPaintContext implements PaintContext 
+ {
+ 
+   // This implementation follows the technique described in 
+   // "Java(tm) 2D Graphics" by Jonathan Knudsen (O'Reilly 1999).
+     
+   /** The x-coordinate of the anchor point for color 1. */
+   private final float x1;
+     
+   /** The y-coordinate of the anchor point for color 1. */
+   private final float y1;
+     
+   /** Color 1. */
+   private final Color c1;
+     
+   /** The x-coordinate of the anchor point for color 2. */
+   private final float x2;
+     
+   /** The y-coordinate of the anchor point for color 2. */
+   private final float y2;
+     
+   /** Color 2. */
+   private final Color c2;
+     
+   /** A flag indicating whether the gradient is cyclic or acyclic. */
+   private final boolean cyclic;
+     
+   /** The length of the gradient line - computed from the two anchor points. */
+   private final double length; 
+ 
+   /**
+    * Creates a new instance.
+    * 
+    * @param x1  the x-coordinate for the anchor point for color 1.
+    * @param y1  the y-coordinate for the anchor point for color 1.
+    * @param c1  color 1.
+    * @param x2  the x-coordinate for the anchor point for color 2.
+    * @param y2  the y-coordinate for the anchor point for color 2.
+    * @param c2  color 2.
+    * @param cyclic  a flag that determines whether the gradient is cyclic
+    *                or acyclic.
+    */
+   public GradientPaintContext(float x1, float y1, Color c1, 
+                               float x2, float y2, Color c2, boolean cyclic) 
+   {     
+     this.x1 = x1;
+     this.y1 = y1;
+     this.c1 = c1;
+     this.x2 = x2;
+     this.y2 = y2;
+     this.c2 = c2;
+     this.cyclic = cyclic;
+     length = Point2D.distance(x1, y1, x2, y2);
+   }
+     
+   /**
+    * Return the color model of this context. It may be different from the
+    * hint specified during createContext, as not all contexts can generate
+    * color patterns in an arbitrary model.
+    *
+    * @return the context color model
+    */
+   public ColorModel getColorModel() 
+   {
+     return ColorModel.getRGBdefault();   
+   }
+ 
+   /**
+    * Return a raster containing the colors for the graphics operation.
+    *
+    * @param x the x-coordinate, in device space
+    * @param y the y-coordinate, in device space
+    * @param w the width, in device space
+    * @param h the height, in device space
+    * @return a raster for the given area and color
+    */
+   public Raster getRaster(int x, int y, int w, int h) {
+     ColorModel cm = getColorModel();
+     WritableRaster raster = cm.createCompatibleWritableRaster(w, h);
+     int[] data = new int[w * h * 4];
+     double pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
+     for (int r = 0; r < h; r++) {
+       for (int c = 0; c < w; c++) {
+         double u = 0.0;
+         if (pd2 != 0) 
+           u = (((x + c) - x1) * (x2 - x1) + ((y + r) - y1) * (y2 - y1)) 
+                   / Math.sqrt(pd2);
+         double ratio = u / length;
+         if (cyclic)
+           ratio = Math.abs(ratio - Math.floor((ratio + 1.0) / 2.0) * 2.0);
+         else 
+           ratio = Math.max(0.0, Math.min(1.0, ratio));
+         int base = (r * w + c) * 4;
+         data[base] = (int) (c1.getRed() + ratio * (c2.getRed() - c1.getRed()));
+         data[base + 1] 
+           = (int) (c1.getGreen() + ratio * (c2.getGreen() - c1.getGreen()));
+         data[base + 2] 
+           = (int) (c1.getBlue() + ratio * (c2.getBlue() - c1.getBlue()));
+         data[base + 3] 
+           = (int) (c1.getAlpha() + ratio * (c2.getAlpha() - c1.getAlpha()));
+       }
+     }
+     raster.setPixels(0, 0, w, h, data);
+     return raster;
+   }
+ 
+   /**
+    * Release the resources allocated for the paint (none in this 
+    * implementation).
+    */
+   public void dispose() {
+     // nothing to do    
+   }
+     
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/CieXyzConverter.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/CieXyzConverter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/CieXyzConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/CieXyzConverter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* CieXyzConverter.java -- CieXyz conversion class
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ 
+ /**
+  * CieXyzConverter - converts to/from a D50-relative CIE XYZ color space.
+  * 
+  * The sRGB<->CIE XYZ conversions in SrgbConverter are used.
+  *
+  * @author Sven de Marothy
+  */
+ public class CieXyzConverter implements ColorSpaceConverter
+ {
+   public float[] toCIEXYZ(float[] in)
+   {
+     float[] out = new float[3];
+     System.arraycopy(in, 0, out, 0, 3);
+     return out;
+   }
+ 
+   public float[] fromCIEXYZ(float[] in)
+   {
+     float[] out = new float[3];
+     System.arraycopy(in, 0, out, 0, 3);
+     return out;
+   }
+ 
+   public float[] toRGB(float[] in)
+   {
+     return SrgbConverter.XYZtoRGB(in);
+   }
+ 
+   public float[] fromRGB(float[] in)
+   {
+     return SrgbConverter.RGBtoXYZ(in);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ClutProfileConverter.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ClutProfileConverter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ClutProfileConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ClutProfileConverter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,152 ----
+ /* ClutProfileConverter.java -- Conversion routines for CLUT-Based profiles
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ import java.awt.color.ICC_Profile;
+ 
+ 
+ /**
+  * ClutProfileConverter - conversions through a CLUT-based profile
+  *
+  * @author Sven de Marothy
+  */
+ public class ClutProfileConverter implements ColorSpaceConverter
+ {
+   private ColorLookUpTable toPCS;
+   private ColorLookUpTable fromPCS;
+   private int nChannels;
+ 
+   public ClutProfileConverter(ICC_Profile profile)
+   {
+     nChannels = profile.getNumComponents();
+ 
+     // Sun does not specifiy which rendering intent should be used,
+     // neither does the ICC v2 spec really. 
+     // Try intent 0
+     try
+       {
+ 	toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB0Tag);
+       }
+     catch (Exception e)
+       {
+ 	toPCS = null;
+       }
+ 
+     try
+       {
+ 	fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA0Tag);
+       }
+     catch (Exception e)
+       {
+ 	fromPCS = null;
+       }
+ 
+     if (toPCS != null || fromPCS != null)
+       return;
+ 
+     // If no intent 0 clut is available, look for a intent 1 clut.
+     try
+       {
+ 	toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB1Tag);
+       }
+     catch (Exception e)
+       {
+ 	toPCS = null;
+       }
+ 
+     try
+       {
+ 	fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA1Tag);
+       }
+     catch (Exception e)
+       {
+ 	fromPCS = null;
+       }
+ 
+     if (toPCS != null || fromPCS != null)
+       return;
+ 
+     // Last shot.. intent 2 CLUT.
+     try
+       {
+ 	toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB2Tag);
+       }
+     catch (Exception e)
+       {
+ 	toPCS = null;
+       }
+ 
+     try
+       {
+ 	fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA2Tag);
+       }
+     catch (Exception e)
+       {
+ 	fromPCS = null;
+       }
+ 
+     if (toPCS == null && fromPCS == null)
+       throw new IllegalArgumentException("No CLUTs in profile!");
+   }
+ 
+   public float[] toCIEXYZ(float[] in)
+   {
+     if (toPCS != null)
+       return toPCS.lookup(in);
+     else
+       return new float[3];
+   }
+ 
+   public float[] toRGB(float[] in)
+   {
+     return SrgbConverter.XYZtoRGB(toCIEXYZ(in));
+   }
+ 
+   public float[] fromCIEXYZ(float[] in)
+   {
+     if (fromPCS != null)
+       return fromPCS.lookup(in);
+     else
+       return new float[nChannels];
+   }
+ 
+   public float[] fromRGB(float[] in)
+   {
+     return fromCIEXYZ(SrgbConverter.RGBtoXYZ(in));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ColorLookUpTable.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ColorLookUpTable.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ColorLookUpTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ColorLookUpTable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,429 ----
+ /* ColorLookUpTable.java -- ICC v2 CLUT
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ import java.awt.color.ColorSpace;
+ import java.awt.color.ICC_Profile;
+ import java.nio.ByteBuffer;
+ 
+ 
+ /**
+  * ColorLookUpTable handles color lookups through a color lookup table,
+  * as defined in the ICC specification.
+  * Both 'mft2' and 'mft1' (8 and 16-bit) type CLUTs are handled.
+  *
+  * This will have to be updated later for ICC 4.0.0
+  *
+  * @author Sven de Marothy
+  */
+ public class ColorLookUpTable
+ {
+   /**
+    * CIE 1931 D50 white point (in Lab coordinates)
+    */
+   private static float[] D50 = { 0.96422f, 1.00f, 0.82521f };
+ 
+   /**
+    * Number of input/output channels
+    */
+   int nIn;
+ 
+   /**
+    * Number of input/output channels
+    */
+   int nOut;
+   int nInTableEntries; // Number of input table entries
+   int nOutTableEntries; // Number of output table entries
+   int gridpoints; // Number of gridpoints
+   int nClut; // This is nOut*(gridpoints**nIn)
+   double[][] inTable; // 1D input table ([channel][table])
+   short[][] outTable; // 1D input table ([channel][table])
+   double[] clut; // The color lookup table
+   float[][] inMatrix; // input matrix (XYZ only)
+   boolean useMatrix; // Whether to use the matrix or not.
+   int[] multiplier;
+   int[] offsets; // Hypercube offsets 
+   boolean inputLab; // Set if the CLUT input CS is Lab
+   boolean outputLab; // Set if the CLUT output CS is Lab
+ 
+   /**
+    * Constructor
+    * Requires a profile file to get the CLUT from and the tag of the
+    * CLUT to create. (icSigXToYZTag where X,Y = [A | B], Z = [0,1,2])
+    */
+   public ColorLookUpTable(ICC_Profile profile, int tag)
+   {
+     useMatrix = false;
+ 
+     switch (tag)
+       {
+       case ICC_Profile.icSigAToB0Tag:
+       case ICC_Profile.icSigAToB1Tag:
+       case ICC_Profile.icSigAToB2Tag:
+ 	if (profile.getColorSpaceType() == ColorSpace.TYPE_XYZ)
+ 	  useMatrix = true;
+ 	inputLab = false;
+ 	outputLab = (profile.getPCSType() == ColorSpace.TYPE_Lab);
+ 	break;
+       case ICC_Profile.icSigBToA0Tag:
+       case ICC_Profile.icSigBToA1Tag:
+       case ICC_Profile.icSigBToA2Tag:
+ 	if (profile.getPCSType() == ColorSpace.TYPE_XYZ)
+ 	  useMatrix = true;
+ 	inputLab = (profile.getPCSType() == ColorSpace.TYPE_Lab);
+ 	outputLab = false;
+ 	break;
+       default:
+ 	throw new IllegalArgumentException("Not a clut-type tag.");
+       }
+ 
+     byte[] data = profile.getData(tag);
+     if (data == null)
+       throw new IllegalArgumentException("Unsuitable profile, does not contain a CLUT.");
+ 
+     // check 'mft'
+     if (data[0] != 0x6d || data[1] != 0x66 || data[2] != 0x74)
+       throw new IllegalArgumentException("Unsuitable profile, invalid CLUT data.");
+ 
+     if (data[3] == 0x32)
+       readClut16(data);
+     else if (data[3] == 0x31)
+       readClut8(data);
+     else
+       throw new IllegalArgumentException("Unknown/invalid CLUT type.");
+   }
+ 
+   /**
+    * Loads a 16-bit CLUT into our data structures
+    */
+   private void readClut16(byte[] data)
+   {
+     ByteBuffer buf = ByteBuffer.wrap(data);
+ 
+     nIn = data[8] & (0xFF);
+     nOut = data[9] & (0xFF);
+     nInTableEntries = buf.getShort(48);
+     nOutTableEntries = buf.getShort(50);
+     gridpoints = data[10] & (0xFF);
+ 
+     inMatrix = new float[3][3];
+     for (int i = 0; i < 3; i++)
+       for (int j = 0; j < 3; j++)
+ 	inMatrix[i][j] = ((float) (buf.getInt(12 + (i * 3 + j) * 4))) / 65536.0f;
+ 
+     inTable = new double[nIn][nInTableEntries];
+     for (int channel = 0; channel < nIn; channel++)
+       for (int i = 0; i < nInTableEntries; i++)
+ 	inTable[channel][i] = (double) ((int) buf.getShort(52
+ 	                                                   + (channel * nInTableEntries
+ 	                                                   + i) * 2)
+ 	                      & (0xFFFF)) / 65536.0;
+ 
+     nClut = nOut;
+     multiplier = new int[nIn];
+     multiplier[nIn - 1] = nOut;
+     for (int i = 0; i < nIn; i++)
+       {
+ 	nClut *= gridpoints;
+ 	if (i > 0)
+ 	  multiplier[nIn - i - 1] = multiplier[nIn - i] * gridpoints;
+       }
+ 
+     int clutOffset = 52 + nIn * nInTableEntries * 2;
+     clut = new double[nClut];
+     for (int i = 0; i < nClut; i++)
+       clut[i] = (double) ((int) buf.getShort(clutOffset + i * 2) & (0xFFFF)) / 65536.0;
+ 
+     outTable = new short[nOut][nOutTableEntries];
+     for (int channel = 0; channel < nOut; channel++)
+       for (int i = 0; i < nOutTableEntries; i++)
+ 	outTable[channel][i] = buf.getShort(clutOffset
+ 	                                    + (nClut
+ 	                                    + channel * nOutTableEntries + i) * 2);
+ 
+     // calculate the hypercube corner offsets
+     offsets = new int[(1 << nIn)];
+     offsets[0] = 0;
+     for (int j = 0; j < nIn; j++)
+       {
+ 	int factor = 1 << j;
+ 	for (int i = 0; i < factor; i++)
+ 	  offsets[factor + i] = offsets[i] + multiplier[j];
+       }
+   }
+ 
+   /**
+    * Loads a 8-bit CLUT into our data structures.
+    */
+   private void readClut8(byte[] data)
+   {
+     ByteBuffer buf = ByteBuffer.wrap(data);
+ 
+     nIn = (data[8] & (0xFF));
+     nOut = (data[9] & (0xFF));
+     nInTableEntries = 256; // always 256
+     nOutTableEntries = 256; // always 256
+     gridpoints = (data[10] & (0xFF));
+ 
+     inMatrix = new float[3][3];
+     for (int i = 0; i < 3; i++)
+       for (int j = 0; j < 3; j++)
+ 	inMatrix[i][j] = ((float) (buf.getInt(12 + (i * 3 + j) * 4))) / 65536.0f;
+ 
+     inTable = new double[nIn][nInTableEntries];
+     for (int channel = 0; channel < nIn; channel++)
+       for (int i = 0; i < nInTableEntries; i++)
+ 	inTable[channel][i] = (double) ((int) buf.get(48
+ 	                                              + (channel * nInTableEntries
+ 	                                              + i)) & (0xFF)) / 255.0;
+ 
+     nClut = nOut;
+     multiplier = new int[nIn];
+     multiplier[nIn - 1] = nOut;
+     for (int i = 0; i < nIn; i++)
+       {
+ 	nClut *= gridpoints;
+ 	if (i > 0)
+ 	  multiplier[nIn - i - 1] = multiplier[nIn - i] * gridpoints;
+       }
+ 
+     int clutOffset = 48 + nIn * nInTableEntries;
+     clut = new double[nClut];
+     for (int i = 0; i < nClut; i++)
+       clut[i] = (double) ((int) buf.get(clutOffset + i) & (0xFF)) / 255.0;
+ 
+     outTable = new short[nOut][nOutTableEntries];
+     for (int channel = 0; channel < nOut; channel++)
+       for (int i = 0; i < nOutTableEntries; i++)
+ 	outTable[channel][i] = (short) (buf.get(clutOffset + nClut
+ 	                                        + channel * nOutTableEntries
+ 	                                        + i) * 257);
+ 
+     // calculate the hypercube corner offsets
+     offsets = new int[(1 << nIn)];
+     offsets[0] = 0;
+     for (int j = 0; j < nIn; j++)
+       {
+ 	int factor = 1 << j;
+ 	for (int i = 0; i < factor; i++)
+ 	  offsets[factor + i] = offsets[i] + multiplier[j];
+       }
+   }
+ 
+   /**
+    * Performs a lookup through the Color LookUp Table.
+    * If the CLUT tag type is AtoB the conversion will be from the device
+    * color space to the PCS, BtoA type goes in the opposite direction.
+    *
+    * For convenience, the PCS values for input or output will always be
+    * CIE XYZ (D50), if the actual PCS is Lab, the values will be converted.
+    *
+    * N-dimensional linear interpolation is used.
+    */
+   float[] lookup(float[] in)
+   {
+     float[] in2 = new float[in.length];
+     if (useMatrix)
+       {
+ 	for (int i = 0; i < 3; i++)
+ 	  in2[i] = in[0] * inMatrix[i][0] + in[1] * inMatrix[i][1]
+ 	           + in[2] * inMatrix[i][2];
+       }
+     else if (inputLab)
+       in2 = XYZtoLab(in);
+     else
+       System.arraycopy(in, 0, in2, 0, in.length);
+ 
+     // input table 
+     for (int i = 0; i < nIn; i++)
+       {
+ 	int index = (int) Math.floor(in2[i] * (double) (nInTableEntries - 1)); // floor in
+ 
+ 	// clip values.
+ 	if (index >= nInTableEntries - 1)
+ 	  in2[i] = (float) inTable[i][nInTableEntries - 1];
+ 	else if (index < 0)
+ 	  in2[i] = (float) inTable[i][0];
+ 	else
+ 	  {
+ 	    // linear interpolation
+ 	    double alpha = in2[i] * ((double) nInTableEntries - 1.0) - index;
+ 	    in2[i] = (float) (inTable[i][index] * (1 - alpha)
+ 	             + inTable[i][index + 1] * alpha);
+ 	  }
+       }
+ 
+     // CLUT lookup
+     double[] output2 = new double[nOut];
+     double[] weights = new double[(1 << nIn)];
+     double[] clutalpha = new double[nIn]; // interpolation values
+     int offset = 0; // = gp
+     for (int i = 0; i < nIn; i++)
+       {
+ 	int index = (int) Math.floor(in2[i] * ((double) gridpoints - 1.0));
+ 	double alpha = in2[i] * ((double) gridpoints - 1.0) - (double) index;
+ 
+ 	// clip values.
+ 	if (index >= gridpoints - 1)
+ 	  {
+ 	    index = gridpoints - 1;
+ 	    alpha = 1.0;
+ 	  }
+ 	else if (index < 0)
+ 	  index = 0;
+ 	clutalpha[i] = alpha;
+ 	offset += index * multiplier[i];
+       }
+ 
+     // Calculate interpolation weights
+     weights[0] = 1.0;
+     for (int j = 0; j < nIn; j++)
+       {
+ 	int factor = 1 << j;
+ 	for (int i = 0; i < factor; i++)
+ 	  {
+ 	    weights[factor + i] = weights[i] * clutalpha[j];
+ 	    weights[i] *= (1.0 - clutalpha[j]);
+ 	  }
+       }
+ 
+     for (int i = 0; i < nOut; i++)
+       output2[i] = weights[0] * clut[offset + i];
+ 
+     for (int i = 1; i < (1 << nIn); i++)
+       {
+ 	int offset2 = offset + offsets[i];
+ 	for (int f = 0; f < nOut; f++)
+ 	  output2[f] += weights[i] * clut[offset2 + f];
+       }
+ 
+     // output table 
+     float[] output = new float[nOut];
+     for (int i = 0; i < nOut; i++)
+       {
+ 	int index = (int) Math.floor(output2[i] * ((double) nOutTableEntries
+ 	                             - 1.0));
+ 
+ 	// clip values.
+ 	if (index >= nOutTableEntries - 1)
+ 	  output[i] = outTable[i][nOutTableEntries - 1];
+ 	else if (index < 0)
+ 	  output[i] = outTable[i][0];
+ 	else
+ 	  {
+ 	    // linear interpolation
+ 	    double a = output2[i] * ((double) nOutTableEntries - 1.0)
+ 	               - (double) index;
+ 	    output[i] = (float) ((double) ((int) outTable[i][index] & (0xFFFF)) * (1
+ 	                - a)
+ 	                + (double) ((int) outTable[i][index + 1] & (0xFFFF)) * a) / 65536f;
+ 	  }
+       }
+ 
+     if (outputLab)
+       return LabtoXYZ(output);
+     return output;
+   }
+ 
+   /**
+    * Converts CIE Lab coordinates to (D50) XYZ ones.
+    */
+   private float[] LabtoXYZ(float[] in)
+   {
+     // Convert from byte-packed format to a 
+     // more convenient one (actual Lab values)
+     // (See ICC spec for details)
+     // factor is 100 * 65536 / 65280
+     in[0] = (float) (100.392156862745 * in[0]);
+     in[1] = (in[1] * 256.0f) - 128.0f;
+     in[2] = (in[2] * 256.0f) - 128.0f;
+ 
+     float[] out = new float[3];
+ 
+     out[1] = (in[0] + 16.0f) / 116.0f;
+     out[0] = in[1] / 500.0f + out[1];
+     out[2] = out[1] - in[2] / 200.0f;
+ 
+     for (int i = 0; i < 3; i++)
+       {
+ 	double exp = out[i] * out[i] * out[i];
+ 	if (exp <= 0.008856)
+ 	  out[i] = (out[i] - 16.0f / 116.0f) / 7.787f;
+ 	else
+ 	  out[i] = (float) exp;
+ 	out[i] = D50[i] * out[i];
+       }
+     return out;
+   }
+ 
+   /**
+    * Converts CIE XYZ coordinates to Lab ones.
+    */
+   private float[] XYZtoLab(float[] in)
+   {
+     float[] temp = new float[3];
+ 
+     for (int i = 0; i < 3; i++)
+       {
+ 	temp[i] = in[i] / D50[i];
+ 
+ 	if (temp[i] <= 0.008856f)
+ 	  temp[i] = (7.7870689f * temp[i]) + (16f / 116.0f);
+ 	else
+ 	  temp[i] = (float) Math.exp((1.0 / 3.0) * Math.log(temp[i]));
+       }
+ 
+     float[] out = new float[3];
+     out[0] = (116.0f * temp[1]) - 16f;
+     out[1] = 500.0f * (temp[0] - temp[1]);
+     out[2] = 200.0f * (temp[1] - temp[2]);
+ 
+     // Normalize to packed format
+     out[0] = (float) (out[0] / 100.392156862745);
+     out[1] = (out[1] + 128f) / 256f;
+     out[2] = (out[2] + 128f) / 256f;
+     for (int i = 0; i < 3; i++)
+       {
+ 	if (out[i] < 0f)
+ 	  out[i] = 0f;
+ 	if (out[i] > 1f)
+ 	  out[i] = 1f;
+       }
+     return out;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ColorSpaceConverter.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ColorSpaceConverter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ColorSpaceConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ColorSpaceConverter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* ColorSpaceConverter.java -- an interface for colorspace conversion
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ 
+ /**
+  * ColorSpaceConverter - used by java.awt.color.ICC_ColorSpace
+  *
+  * Color space conversion can occur in several ways:
+  *
+  * -Directly (for the built in spaces sRGB, linear RGB, gray, CIE XYZ and PYCC
+  * -ICC_ProfileRGB works through TRC curves and a matrix
+  * -ICC_ProfileGray works through a single TRC
+  * -Everything else is done through Color lookup tables.
+  *
+  * The different conversion methods are implemented through
+  * an interface. The built-in colorspaces are implemented directly
+  * with the relevant conversion equations.
+  *
+  * In this way, we hopefully will always use the fastest and most
+  * accurate method available.
+  *
+  * @author Sven de Marothy
+  */
+ public interface ColorSpaceConverter
+ {
+   float[] toCIEXYZ(float[] in);
+ 
+   float[] fromCIEXYZ(float[] in);
+ 
+   float[] toRGB(float[] in);
+ 
+   float[] fromRGB(float[] in);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/GrayProfileConverter.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/GrayProfileConverter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/GrayProfileConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/GrayProfileConverter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /* GrayProfileConverter.java -- Gray profile conversion class
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.color;
+ 
+ import java.awt.color.ICC_Profile;
+ import java.awt.color.ICC_ProfileGray;
+ import java.awt.color.ProfileDataException;
+ 
+ /**
+  * GrayProfileConverter - converts Grayscale profiles (ICC_ProfileGray)
+  *
+  * This type of profile contains a single tone reproduction curve (TRC).
+  * Conversion consists of simple TRC lookup.
+  *
+  * This implementation is very lazy and does everything applying the TRC and
+  * utilizing the built-in linear grayscale color space.
+  *
+  * @author Sven de Marothy
+  */
+ public class GrayProfileConverter implements ColorSpaceConverter
+ {
+   private GrayScaleConverter gc;
+   private ToneReproductionCurve trc;
+   private ColorLookUpTable toPCS;
+   private ColorLookUpTable fromPCS;
+ 
+   /**
+    * Constructs the converter described by an ICC_ProfileGray object
+    */
+   public GrayProfileConverter(ICC_ProfileGray profile)
+   {
+     try
+       {
+ 	trc = new ToneReproductionCurve(profile.getGamma());
+       }
+     catch (ProfileDataException e)
+       {
+ 	trc = new ToneReproductionCurve(profile.getTRC());
+       }
+ 
+     // linear grayscale converter
+     gc = new GrayScaleConverter();
+ 
+     // If a CLUT is available, it should be used, and the TRCs ignored.
+     // Note: A valid profile may only have CLUTs in one direction, and
+     // TRC:s without useful info, making reverse-transforms impossible.
+     // In this case the TRC will be used for the reverse-transform with
+     // unpredictable results. This is in line with the Java specification,
+     try
+       {
+ 	toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB0Tag);
+       }
+     catch (Exception e)
+       {
+ 	toPCS = null;
+       }
+ 
+     try
+       {
+ 	fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA0Tag);
+       }
+     catch (Exception e)
+       {
+ 	fromPCS = null;
+       }
+   }
+ 
+   public float[] toCIEXYZ(float[] in)
+   {
+     if (toPCS != null)
+       return toPCS.lookup(in);
+     float[] gray = new float[1];
+     gray[0] = trc.lookup(in[0]);
+     return gc.toCIEXYZ(gray);
+   }
+ 
+   public float[] toRGB(float[] in)
+   {
+     float[] gray = new float[1];
+     gray[0] = trc.lookup(in[0]);
+     return gc.toRGB(gray);
+   }
+ 
+   public float[] fromRGB(float[] in)
+   {
+     // get linear grayscale value
+     float[] gray = gc.fromRGB(in);
+     gray[0] = trc.reverseLookup(gray[0]);
+     return gray;
+   }
+ 
+   public float[] fromCIEXYZ(float[] in)
+   {
+     if (fromPCS != null)
+       return fromPCS.lookup(in);
+ 
+     float[] gray = gc.fromCIEXYZ(in);
+     gray[0] = trc.reverseLookup(gray[0]);
+     return gray;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/GrayScaleConverter.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/GrayScaleConverter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/GrayScaleConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/GrayScaleConverter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,110 ----
+ /* GrayScaleConverter.java -- Linear grayscale conversion class
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ 
+ /**
+  * Linear Grayscale converter
+  *
+  * @author Sven de Marothy
+  */
+ public class GrayScaleConverter implements ColorSpaceConverter
+ {
+   // intensity factors (ITU Rec. BT.709)
+   double[] coeff = { 0.2125f, 0.7154f, 0.0721f };
+ 
+   /**
+    * CIE 1931 D50 white point (in Lab coordinates)
+    */
+   private static float[] D50 = { 0.96422f, 1.00f, 0.82521f };
+ 
+   public float[] toCIEXYZ(float[] in)
+   {
+     float g = in[0];
+     if (g < 0)
+       g = 1 + g;
+     float[] out = { g * D50[0], g * D50[1], g * D50[2] }; // White spot
+     return out;
+   }
+ 
+   public float[] toRGB(float[] in)
+   {
+     float[] out = new float[3];
+     if (in[0] <= 0.00304f)
+       out[0] = in[0] * 12.92f;
+     else
+       out[0] = 1.055f * ((float) Math.exp((1 / 2.4) * Math.log(in[0])))
+                - 0.055f;
+     out[1] = out[2] = out[0];
+     return out;
+   }
+ 
+   public float[] fromCIEXYZ(float[] in)
+   {
+     float[] temp = new float[3];
+     temp[0] = 3.1338f * in[0] - 1.6171f * in[1] - 0.4907f * in[2];
+     temp[1] = -0.9785f * in[0] + 1.9160f * in[1] + 0.0334f * in[2];
+     temp[2] = 0.0720f * in[0] - 0.2290f * in[1] + 1.4056f * in[2];
+     float[] out = new float[1];
+     for (int i = 0; i < 3; i++)
+       out[0] = (float) (temp[i] * coeff[i]);
+     return out;
+   }
+ 
+   public float[] fromRGB(float[] in)
+   {
+     float[] out = new float[1];
+ 
+     // Convert non-linear RGB coordinates to linear ones,
+     //  numbers from the w3 spec.
+     out[0] = 0;
+     for (int i = 0; i < 3; i++)
+       {
+ 	float n = in[i];
+ 	if (n < 0)
+ 	  n = 0f;
+ 	if (n > 1)
+ 	  n = 1f;
+ 	if (n <= 0.03928f)
+ 	  out[0] += (float) (coeff[i] * n / 12.92);
+ 	else
+ 	  out[0] += (float) (coeff[i] * Math.exp(2.4 * Math.log((n + 0.055) / 1.055)));
+       }
+     return out;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/LinearRGBConverter.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/LinearRGBConverter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/LinearRGBConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/LinearRGBConverter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,152 ----
+ /* LinearRGBConverter.java -- conversion to a linear RGB color space
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ 
+ /**
+  * LinearRGBConverter - conversion routines for a linear sRGB colorspace
+  * sRGB is a standard for RGB colorspaces, adopted by the w3c.
+  *
+  * The specification is available at:
+  * http://www.w3.org/Graphics/Color/sRGB.html
+  *
+  * @author Sven de Marothy
+  */
+ public class LinearRGBConverter implements ColorSpaceConverter
+ {
+   /**
+    * linear RGB --> sRGB
+    * Use the inverse gamma curve
+    */
+   public float[] toRGB(float[] in)
+   {
+     float[] out = new float[3];
+     for (int i = 0; i < 3; i++)
+       {
+ 	float n = in[i];
+ 	if (n < 0)
+ 	  n = 0f;
+ 	if (n > 1)
+ 	  n = 1f;
+ 	if (n <= 0.00304f)
+ 	  out[i] = in[0] * 12.92f;
+ 	else
+ 	  out[i] = 1.055f * ((float) Math.exp((1 / 2.4) * Math.log(n)))
+ 	           - 0.055f;
+       }
+     return out;
+   }
+ 
+   /**
+    * sRGB --> linear RGB
+    * Use the gamma curve (gamma=2.4 in sRGB)
+    */
+   public float[] fromRGB(float[] in)
+   {
+     float[] out = new float[3];
+ 
+     // Convert non-linear RGB coordinates to linear ones,
+     //  numbers from the w3 spec.
+     for (int i = 0; i < 3; i++)
+       {
+ 	float n = in[i];
+ 	if (n < 0)
+ 	  n = 0f;
+ 	if (n > 1)
+ 	  n = 1f;
+ 	if (n <= 0.03928f)
+ 	  out[i] = (float) (n / 12.92);
+ 	else
+ 	  out[i] = (float) (Math.exp(2.4 * Math.log((n + 0.055) / 1.055)));
+       }
+     return out;
+   }
+ 
+   /**
+    * Linear RGB --> CIE XYZ (D50 relative)
+    * This is a simple matrix transform, the matrix (relative D65)
+    * is given in the sRGB spec. This has been combined with a
+    * linear Bradford transform for the D65-->D50 mapping, resulting
+    * in a single matrix which does the whole thing.
+    *
+    */
+   public float[] fromCIEXYZ(float[] in)
+   {
+     /*
+      * Note: The numbers which were used to calculate this only had four
+      * digits of accuracy. So don't be fooled by the number of digits here.
+      * If someone has more accurate source, feel free to update this.
+      */
+     float[] out = new float[3];
+     out[0] = (float) (3.13383065124221 * in[0] - 1.61711949411313 * in[1]
+              - 0.49071914111101 * in[2]);
+     out[1] = (float) (-0.97847026691142 * in[0] + 1.91597856031996 * in[1]
+              + 0.03340430640699 * in[2]);
+     out[2] = (float) (0.07203679486279 * in[0] - 0.22903073553113 * in[1]
+              + 1.40557835776234 * in[2]);
+     if (out[0] < 0)
+       out[0] = 0f;
+     if (out[1] < 0)
+       out[1] = 0f;
+     if (out[2] < 0)
+       out[2] = 0f;
+     if (out[0] > 1.0f)
+       out[0] = 1.0f;
+     if (out[1] > 1.0f)
+       out[1] = 1.0f;
+     if (out[2] > 1.0f)
+       out[2] = 1.0f;
+     return out;
+   }
+ 
+   /**
+    * Linear RGB --> CIE XYZ (D50 relative)
+    * Uses the inverse of the above matrix.
+    */
+   public float[] toCIEXYZ(float[] in)
+   {
+     float[] out = new float[3];
+     out[0] = (float) (0.43606375022190 * in[0] + 0.38514960146481 * in[1]
+              + 0.14308641888799 * in[2]);
+     out[1] = (float) (0.22245089403542 * in[0] + 0.71692584775182 * in[1]
+              + 0.06062451125578 * in[2]);
+     out[2] = (float) (0.01389851860679 * in[0] + 0.09707969011198 * in[1]
+              + 0.71399604572506 * in[2]);
+     return out;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ProfileHeader.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ProfileHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ProfileHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ProfileHeader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,398 ----
+ /* ProfileHeader.java -- Encapsules ICC Profile header data
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ import java.awt.color.ColorSpace;
+ import java.awt.color.ICC_Profile;
+ import java.nio.ByteBuffer;
+ 
+ 
+ /**
+  * Header, abstracts and validates the header data.
+  *
+  * @author Sven de Marothy
+  */
+ public class ProfileHeader
+ {
+   /**
+    * Magic identifier (ASCII 'acsp')
+    */
+   private static final int icMagicNumber = 0x61637370;
+ 
+   /**
+    * Mapping from ICC Profile signatures to ColorSpace types
+    */
+   private static final int[] csTypeMap = 
+                                          {
+                                            ICC_Profile.icSigXYZData,
+                                            ColorSpace.TYPE_XYZ,
+                                            ICC_Profile.icSigLabData,
+                                            ColorSpace.TYPE_Lab,
+                                            ICC_Profile.icSigLuvData,
+                                            ColorSpace.TYPE_Luv,
+                                            ICC_Profile.icSigYCbCrData,
+                                            ColorSpace.TYPE_YCbCr,
+                                            ICC_Profile.icSigYxyData,
+                                            ColorSpace.TYPE_Yxy,
+                                            ICC_Profile.icSigRgbData,
+                                            ColorSpace.TYPE_RGB,
+                                            ICC_Profile.icSigGrayData,
+                                            ColorSpace.TYPE_GRAY,
+                                            ICC_Profile.icSigHsvData,
+                                            ColorSpace.TYPE_HSV,
+                                            ICC_Profile.icSigHlsData,
+                                            ColorSpace.TYPE_HLS,
+                                            ICC_Profile.icSigCmykData,
+                                            ColorSpace.TYPE_CMYK,
+                                            ICC_Profile.icSigCmyData,
+                                            ColorSpace.TYPE_CMY,
+                                            ICC_Profile.icSigSpace2CLR,
+                                            ColorSpace.TYPE_2CLR,
+                                            ICC_Profile.icSigSpace3CLR,
+                                            ColorSpace.TYPE_3CLR,
+                                            ICC_Profile.icSigSpace4CLR,
+                                            ColorSpace.TYPE_4CLR,
+                                            ICC_Profile.icSigSpace5CLR,
+                                            ColorSpace.TYPE_5CLR,
+                                            ICC_Profile.icSigSpace6CLR,
+                                            ColorSpace.TYPE_6CLR,
+                                            ICC_Profile.icSigSpace7CLR,
+                                            ColorSpace.TYPE_7CLR,
+                                            ICC_Profile.icSigSpace8CLR,
+                                            ColorSpace.TYPE_8CLR,
+                                            ICC_Profile.icSigSpace9CLR,
+                                            ColorSpace.TYPE_9CLR,
+                                            ICC_Profile.icSigSpaceACLR,
+                                            ColorSpace.TYPE_ACLR,
+                                            ICC_Profile.icSigSpaceBCLR,
+                                            ColorSpace.TYPE_BCLR,
+                                            ICC_Profile.icSigSpaceCCLR,
+                                            ColorSpace.TYPE_CCLR,
+                                            ICC_Profile.icSigSpaceDCLR,
+                                            ColorSpace.TYPE_DCLR,
+                                            ICC_Profile.icSigSpaceECLR,
+                                            ColorSpace.TYPE_ECLR,
+                                            ICC_Profile.icSigSpaceFCLR,
+                                            ColorSpace.TYPE_FCLR
+                                          };
+ 
+   /**
+    * Size of an ICC header (128 bytes)
+    */
+   public static final int HEADERSIZE = 128;
+ 
+   /**
+    * Mapping of ICC class signatures to profile class constants
+    */
+   private static final int[] classMap = 
+                                         {
+                                           ICC_Profile.icSigInputClass,
+                                           ICC_Profile.CLASS_INPUT,
+                                           ICC_Profile.icSigDisplayClass,
+                                           ICC_Profile.CLASS_DISPLAY,
+                                           ICC_Profile.icSigOutputClass,
+                                           ICC_Profile.CLASS_OUTPUT,
+                                           ICC_Profile.icSigLinkClass,
+                                           ICC_Profile.CLASS_DEVICELINK,
+                                           ICC_Profile.icSigColorSpaceClass,
+                                           ICC_Profile.CLASS_COLORSPACECONVERSION,
+                                           ICC_Profile.icSigAbstractClass,
+                                           ICC_Profile.CLASS_ABSTRACT,
+                                           ICC_Profile.icSigNamedColorClass,
+                                           ICC_Profile.CLASS_NAMEDCOLOR
+                                         };
+   private int size;
+   private int cmmId;
+ 
+   // Major/Minor version, The ICC-1998 spec is major v2
+   private int majorVersion;
+ 
+   // Major/Minor version, The ICC-1998 spec is major v2
+   private int minorVersion;
+   private int profileClass; // profile device class
+   private int colorSpace; // data color space type
+   private int profileColorSpace; // profile connection space (PCS) type
+   private byte[] timestamp; // original creation timestamp
+   private int platform; // platform signature
+   private int flags; // flags
+   private int magic; // magic number.
+   private int manufacturerSig; // manufacturer sig
+   private int modelSig; // model sig
+   private byte[] attributes; // Attributes
+   private int intent; // rendering intent
+   private byte[] illuminant; // illuminant info (Coordinates of D50 in the PCS)
+   private int creatorSig; // Creator sig (same type as manufacturer)
+ 
+   /**
+    * Creates a 'default' header for use with our predefined profiles.
+    * Note the device and profile color spaces are not set.
+    */
+   public ProfileHeader()
+   {
+     creatorSig = 0;
+     intent = 0;
+     modelSig = manufacturerSig = (int) 0x6E6f6E65; // 'none'
+     magic = icMagicNumber;
+     cmmId = 0;
+     platform = 0; // no preferred platform
+     timestamp = new byte[8];
+     majorVersion = 2;
+     minorVersion = 0x10;
+     flags = 0;
+ 
+     // D50 in XYZ format (encoded)
+     illuminant = new byte[]
+                  {
+                    (byte) 0x00, (byte) 0x00, (byte) 0xf6, (byte) 0xd6,
+                    (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00,
+                    (byte) 0x00, (byte) 0x00, (byte) 0xd3, (byte) 0x2d
+                  };
+     attributes = new byte[8];
+     profileClass = ICC_Profile.CLASS_DISPLAY;
+   }
+ 
+   /**
+    * Creates a header from profile data. Only the header portion (128 bytes)
+    * is read, so the array passed need not be the full profile.
+    */
+   public ProfileHeader(byte[] data)
+   {
+     ByteBuffer buf = ByteBuffer.wrap(data);
+ 
+     // Get size (the sign bit shouldn't matter. 	
+     // A valid profile can never be +2Gb)
+     size = buf.getInt(ICC_Profile.icHdrSize);
+ 
+     // CMM ID
+     cmmId = buf.getInt(ICC_Profile.icHdrCmmId);
+ 
+     // Version number
+     majorVersion = (int) (data[ICC_Profile.icHdrVersion]);
+     minorVersion = (int) (data[ICC_Profile.icHdrVersion + 1]);
+ 
+     // Profile/Device class
+     int classSig = buf.getInt(ICC_Profile.icHdrDeviceClass);
+     profileClass = -1;
+     for (int i = 0; i < classMap.length; i += 2)
+       if (classMap[i] == classSig)
+         {
+ 	  profileClass = classMap[i + 1];
+ 	  break;
+         }
+ 
+     // get the data color space
+     int csSig = buf.getInt(ICC_Profile.icHdrColorSpace);
+     colorSpace = -1;
+     for (int i = 0; i < csTypeMap.length; i += 2)
+       if (csTypeMap[i] == csSig)
+         {
+ 	  colorSpace = csTypeMap[i + 1];
+ 	  break;
+         }
+ 
+     // get the profile color space (PCS), must be xyz or lab except
+     // for device-link-class profiles
+     int pcsSig = buf.getInt(ICC_Profile.icHdrPcs);
+     profileColorSpace = -1;
+     if (profileClass != ICC_Profile.CLASS_DEVICELINK)
+       {
+ 	if (pcsSig == ICC_Profile.icSigXYZData)
+ 	  profileColorSpace = ColorSpace.TYPE_XYZ;
+ 	if (pcsSig == ICC_Profile.icSigLabData)
+ 	  profileColorSpace = ColorSpace.TYPE_Lab;
+       }
+     else
+       {
+ 	for (int i = 0; i < csTypeMap.length; i += 2)
+ 	  if (csTypeMap[i] == pcsSig)
+ 	    {
+ 	      profileColorSpace = csTypeMap[i + 1];
+ 	      break;
+ 	    }
+       }
+ 
+     // creation timestamp
+     timestamp = new byte[8];
+     System.arraycopy(data, ICC_Profile.icHdrDate, timestamp, 0, 8);
+ 
+     // magic number
+     magic = buf.getInt(ICC_Profile.icHdrMagic);
+ 
+     //  platform info
+     platform = buf.getInt(ICC_Profile.icHdrPlatform);
+     // get flags
+     flags = buf.getInt(ICC_Profile.icHdrFlags);
+     // get manufacturer sign
+     manufacturerSig = buf.getInt(ICC_Profile.icHdrManufacturer);
+     // get header model
+     modelSig = buf.getInt(ICC_Profile.icHdrModel);
+     // attributes
+     attributes = new byte[8];
+     System.arraycopy(data, ICC_Profile.icHdrAttributes, attributes, 0, 8);
+     // rendering intent
+     intent = buf.getInt(ICC_Profile.icHdrRenderingIntent);
+     // illuminant info 
+     illuminant = new byte[12];
+     System.arraycopy(data, ICC_Profile.icHdrIlluminant, illuminant, 0, 12);
+     // Creator signature
+     creatorSig = buf.getInt(ICC_Profile.icHdrCreator);
+     // The rest of the header (Total size: 128 bytes) is unused..
+   }
+ 
+   /**
+    * Verify that the header is valid
+    * @param size equals the file size if it is to be verified, -1 otherwise
+    * @throws IllegalArgumentException if the header is found to be invalid.
+    */
+   public void verifyHeader(int size) throws IllegalArgumentException
+   {
+     // verify size
+     if (size != -1 && this.size != size)
+       throw new IllegalArgumentException("Invalid profile length:" + size);
+ 
+     // Check version number
+     if (majorVersion != 2)
+       throw new IllegalArgumentException("Wrong major version number:"
+                                          + majorVersion);
+ 
+     // Profile/Device class
+     if (profileClass == -1)
+       throw new IllegalArgumentException("Invalid profile/device class");
+ 
+     // get the data color space
+     if (colorSpace == -1)
+       throw new IllegalArgumentException("Invalid colorspace");
+ 
+     // profile color space
+     if (profileColorSpace == -1)
+       throw new IllegalArgumentException("Invalid PCS.");
+ 
+     // check magic number
+     if (magic != icMagicNumber)
+       throw new IllegalArgumentException("Invalid magic number!");
+   }
+ 
+   /**
+    * Creates a header, setting the header file size at the same time.
+    * @param size the profile file size.
+    */
+   public byte[] getData(int size)
+   {
+     byte[] data = new byte[HEADERSIZE];
+     ByteBuffer buf = ByteBuffer.wrap(data);
+     buf.putInt(ICC_Profile.icHdrSize, size);
+     buf.putInt(ICC_Profile.icHdrCmmId, cmmId);
+     buf.putShort(ICC_Profile.icHdrVersion,
+                  (short) (majorVersion << 8 | minorVersion));
+     for (int i = 1; i < classMap.length; i += 2)
+       if (profileClass == classMap[i])
+ 	buf.putInt(ICC_Profile.icHdrDeviceClass, classMap[i - 1]);
+     for (int i = 1; i < csTypeMap.length; i += 2)
+       if (csTypeMap[i] == colorSpace)
+ 	buf.putInt(ICC_Profile.icHdrColorSpace, csTypeMap[i - 1]);
+     for (int i = 1; i < csTypeMap.length; i += 2)
+       if (csTypeMap[i] == profileColorSpace)
+ 	buf.putInt(ICC_Profile.icHdrPcs, csTypeMap[i - 1]);
+ 
+     System.arraycopy(timestamp, 0, data, ICC_Profile.icHdrDate,
+                      timestamp.length);
+     buf.putInt(ICC_Profile.icHdrMagic, icMagicNumber);
+     buf.putInt(ICC_Profile.icHdrPlatform, platform);
+     buf.putInt(ICC_Profile.icHdrFlags, flags);
+     buf.putInt(ICC_Profile.icHdrManufacturer, manufacturerSig);
+     buf.putInt(ICC_Profile.icHdrModel, modelSig);
+     System.arraycopy(attributes, 0, data, ICC_Profile.icHdrAttributes,
+                      attributes.length);
+     buf.putInt(ICC_Profile.icHdrRenderingIntent, intent);
+     System.arraycopy(illuminant, 0, data, ICC_Profile.icHdrIlluminant,
+                      illuminant.length);
+     buf.putInt(ICC_Profile.icHdrCreator, creatorSig);
+     return buf.array();
+   }
+ 
+   public int getSize()
+   {
+     return size;
+   }
+ 
+   public void setSize(int s)
+   {
+     size = s;
+   }
+ 
+   public int getMajorVersion()
+   {
+     return majorVersion;
+   }
+ 
+   public int getMinorVersion()
+   {
+     return minorVersion;
+   }
+ 
+   public int getProfileClass()
+   {
+     return profileClass;
+   }
+ 
+   public void setProfileClass(int pc)
+   {
+     profileClass = pc;
+   }
+ 
+   public int getColorSpace()
+   {
+     return colorSpace;
+   }
+ 
+   public int getProfileColorSpace()
+   {
+     return profileColorSpace;
+   }
+ 
+   public void setColorSpace(int cs)
+   {
+     colorSpace = cs;
+   }
+ 
+   public void setProfileColorSpace(int pcs)
+   {
+     profileColorSpace = pcs;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/PyccConverter.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/PyccConverter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/PyccConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/PyccConverter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* PyccConverter.java -- PhotoYCC conversion class
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ 
+ /**
+  * PyccConverter - conversion routines for the PhotoYCC colorspace
+  *
+  * Also known as PhotoCD YCC, it is an expansion of the conventional
+  * YCC color space to also include colors with over 100% white.
+  *
+  * XXX FIXME: Not yet implemented, implementation pending.
+  *
+  * @author Sven de Marothy
+  */
+ public class PyccConverter implements ColorSpaceConverter
+ {
+   public float[] toRGB(float[] in)
+   {
+     return null;
+   }
+ 
+   public float[] fromRGB(float[] in)
+   {
+     return null;
+   }
+ 
+   public float[] toCIEXYZ(float[] in)
+   {
+     return null;
+   }
+ 
+   public float[] fromCIEXYZ(float[] in)
+   {
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/RgbProfileConverter.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/RgbProfileConverter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/RgbProfileConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/RgbProfileConverter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,244 ----
+ /* RgbProfileConverter.java -- RGB Profile conversion class
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.color;
+ 
+ import java.awt.color.ICC_Profile;
+ import java.awt.color.ICC_ProfileRGB;
+ import java.awt.color.ProfileDataException;
+ 
+ /**
+  * RgbProfileConverter - converts RGB profiles (ICC_ProfileRGB)
+  *
+  * This type of profile contains a matrix and three
+  * tone reproduction curves (TRCs).
+  *
+  * Device RGB --&gt; CIE XYZ is done through first multiplying with
+  * a matrix, then each component is looked-up against it's TRC.
+  *
+  * The opposite transform is done using the inverse of the matrix,
+  * and TRC:s.
+  *
+  * @author Sven de Marothy
+  */
+ public class RgbProfileConverter implements ColorSpaceConverter
+ {
+   private float[][] matrix;
+   private float[][] inv_matrix;
+   private ToneReproductionCurve rTRC;
+   private ToneReproductionCurve gTRC;
+   private ToneReproductionCurve bTRC;
+   private ColorLookUpTable toPCS;
+   private ColorLookUpTable fromPCS;
+ 
+   /**
+    * CIE 1931 D50 white point (in Lab coordinates)
+    */
+   private static float[] D50 = { 0.96422f, 1.00f, 0.82521f };
+ 
+   /**
+    * Constructs an RgbProfileConverter from a given ICC_ProfileRGB
+    */
+   public RgbProfileConverter(ICC_ProfileRGB profile)
+   {
+     toPCS = fromPCS = null;
+     matrix = profile.getMatrix();
+ 
+     // get TRCs
+     try
+       {
+ 	rTRC = new ToneReproductionCurve(profile.getGamma(ICC_ProfileRGB.REDCOMPONENT));
+       }
+     catch (ProfileDataException e)
+       {
+ 	rTRC = new ToneReproductionCurve(profile.getTRC(ICC_ProfileRGB.REDCOMPONENT));
+       }
+     try
+       {
+ 	gTRC = new ToneReproductionCurve(profile.getGamma(ICC_ProfileRGB.GREENCOMPONENT));
+       }
+     catch (ProfileDataException e)
+       {
+ 	gTRC = new ToneReproductionCurve(profile.getTRC(ICC_ProfileRGB.GREENCOMPONENT));
+       }
+     try
+       {
+ 	bTRC = new ToneReproductionCurve(profile.getGamma(ICC_ProfileRGB.BLUECOMPONENT));
+       }
+     catch (ProfileDataException e)
+       {
+ 	bTRC = new ToneReproductionCurve(profile.getTRC(ICC_ProfileRGB.BLUECOMPONENT));
+       }
+ 
+     // If a CLUT is available, it should be used, and the TRCs ignored.
+     // Note: A valid profile may only have CLUTs in one direction, and
+     // TRC:s without useful info, making reverse-transforms impossible.
+     // In this case the TRC will be used for the reverse-transform with
+     // unpredictable results. This is in line with the Java specification,
+     try
+       {
+ 	toPCS = new ColorLookUpTable(profile, ICC_Profile.icSigAToB0Tag);
+       }
+     catch (Exception e)
+       {
+ 	toPCS = null;
+       }
+ 
+     try
+       {
+ 	fromPCS = new ColorLookUpTable(profile, ICC_Profile.icSigBToA0Tag);
+       }
+     catch (Exception e)
+       {
+ 	fromPCS = null;
+       }
+ 
+     // Calculate the inverse matrix if no reverse CLUT is available
+     if(fromPCS == null)
+ 	inv_matrix = invertMatrix(matrix);
+     else 
+       {
+         // otherwise just set it to an identity matrix
+ 	inv_matrix = new float[3][3];
+ 	inv_matrix[0][0] = inv_matrix[1][1] = inv_matrix[2][2] = 1.0f;
+       }
+   }
+ 
+   public float[] toCIEXYZ(float[] in)
+   {
+     // CLUT takes precedence
+     if (toPCS != null)
+       return toPCS.lookup(in);
+ 
+     float[] temp = new float[3];
+     float[] out = new float[3];
+ 
+     // device space --> linear gamma
+     temp[0] = rTRC.lookup(in[0]);
+     temp[1] = gTRC.lookup(in[1]);
+     temp[2] = bTRC.lookup(in[2]);
+ 
+     // matrix multiplication
+     out[0] = matrix[0][0] * temp[0] + matrix[0][1] * temp[1]
+              + matrix[0][2] * temp[2];
+     out[1] = matrix[1][0] * temp[0] + matrix[1][1] * temp[1]
+              + matrix[1][2] * temp[2];
+     out[2] = matrix[2][0] * temp[0] + matrix[2][1] * temp[1]
+              + matrix[2][2] * temp[2];
+ 
+     return out;
+   }
+ 
+   public float[] toRGB(float[] in)
+   {
+     return SrgbConverter.XYZtoRGB(toCIEXYZ(in));
+   }
+ 
+   public float[] fromCIEXYZ(float[] in)
+   {
+     if (fromPCS != null)
+       return fromPCS.lookup(in);
+ 
+     float[] temp = new float[3];
+     float[] out = new float[3];
+ 
+     // matrix multiplication
+     temp[0] = inv_matrix[0][0] * in[0] + inv_matrix[0][1] * in[1]
+               + inv_matrix[0][2] * in[2];
+     temp[1] = inv_matrix[1][0] * in[0] + inv_matrix[1][1] * in[1]
+               + inv_matrix[1][2] * in[2];
+     temp[2] = inv_matrix[2][0] * in[0] + inv_matrix[2][1] * in[1]
+               + inv_matrix[2][2] * in[2];
+ 
+     // device space --> linear gamma
+     out[0] = rTRC.reverseLookup(temp[0]);
+     out[1] = gTRC.reverseLookup(temp[1]);
+     out[2] = bTRC.reverseLookup(temp[2]);
+ 
+     // FIXME: Sun appears to clip the return values to [0,1]
+     // I don't believe that is a Good Thing, 
+     // (some colorspaces may allow values outside that range.)
+     // So we return the actual values here.
+     return out;
+   }
+ 
+   public float[] fromRGB(float[] in)
+   {
+     return fromCIEXYZ(SrgbConverter.RGBtoXYZ(in));
+   }
+ 
+   /**
+    * Inverts a 3x3 matrix, returns the inverse,
+    * throws an IllegalArgumentException if the matrix is not
+    * invertible (this shouldn't happen for a valid profile)
+    */
+   private float[][] invertMatrix(float[][] matrix)
+   {
+     float[][] out = new float[3][3];
+     double determinant = matrix[0][0] * (matrix[1][1] * matrix[2][2]
+                          - matrix[2][1] * matrix[1][2])
+                          - matrix[0][1] * (matrix[1][0] * matrix[2][2]
+                          - matrix[2][0] * matrix[1][2])
+                          + matrix[0][2] * (matrix[1][0] * matrix[2][1]
+                          - matrix[2][0] * matrix[1][1]);
+ 
+     if (determinant == 0.0)
+       throw new IllegalArgumentException("Can't invert conversion matrix.");
+     float invdet = (float) (1.0 / determinant);
+ 
+     out[0][0] = invdet * (matrix[1][1] * matrix[2][2]
+                 - matrix[1][2] * matrix[2][1]);
+     out[0][1] = invdet * (matrix[0][2] * matrix[2][1]
+                 - matrix[0][1] * matrix[2][2]);
+     out[0][2] = invdet * (matrix[0][1] * matrix[1][2]
+                 - matrix[0][2] * matrix[1][1]);
+     out[1][0] = invdet * (matrix[1][2] * matrix[2][0]
+                 - matrix[1][0] * matrix[2][2]);
+     out[1][1] = invdet * (matrix[0][0] * matrix[2][2]
+                 - matrix[0][2] * matrix[2][0]);
+     out[1][2] = invdet * (matrix[0][2] * matrix[1][0]
+                 - matrix[0][0] * matrix[1][2]);
+     out[2][0] = invdet * (matrix[1][0] * matrix[2][1]
+                 - matrix[1][1] * matrix[2][0]);
+     out[2][1] = invdet * (matrix[0][1] * matrix[2][0]
+                 - matrix[0][0] * matrix[2][1]);
+     out[2][2] = invdet * (matrix[0][0] * matrix[1][1]
+                 - matrix[0][1] * matrix[1][0]);
+     return out;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/SrgbConverter.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/SrgbConverter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/SrgbConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/SrgbConverter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,152 ----
+ /* SrgbConverter.java -- sRGB conversion class
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ 
+ /**
+  * SrgbConverter - conversion routines for the sRGB colorspace
+  * sRGB is a standard for RGB colorspaces, adopted by the w3c.
+  *
+  * The specification is available at:
+  * http://www.w3.org/Graphics/Color/sRGB.html
+  *
+  * @author Sven de Marothy
+  */
+ /**
+  *
+  * Note the matrix numbers used here are NOT identical to those in the
+  * w3 spec, as those numbers are CIE XYZ relative a D65 white point.
+  * The CIE XYZ we use is relative a D50 white point, so therefore a
+  * linear Bradford transform matrix for D65->D50 mapping has been applied.
+  * (The ICC documents describe this transform)
+  *
+  *   Linearized Bradford transform:
+  *    0.8951    0.2664   -0.1614
+  *   -0.7502    1.7135    0.0367
+  *    0.0389   -0.0685    1.0296
+  *
+  *   Inverse:
+  *   0.9870   -0.1471    0.1600
+  *   0.4323    0.5184    0.0493
+  *  -0.00853   0.0400    0.9685
+  */
+ public class SrgbConverter implements ColorSpaceConverter
+ {
+   public float[] fromCIEXYZ(float[] in)
+   {
+     return XYZtoRGB(in);
+   }
+ 
+   public float[] toCIEXYZ(float[] in)
+   {
+     return RGBtoXYZ(in);
+   }
+ 
+   public float[] toRGB(float[] in)
+   {
+     float[] out = new float[3];
+     System.arraycopy(in, 0, out, 0, 3);
+     return out;
+   }
+ 
+   public float[] fromRGB(float[] in)
+   {
+     float[] out = new float[3];
+     System.arraycopy(in, 0, out, 0, 3);
+     return out;
+   }
+ 
+   /**
+    * CIE XYZ (D50 relative) --> sRGB
+    *
+    * Static as it's used by other ColorSpaceConverters to
+    * convert to sRGB if the color space is defined in XYZ.
+    */
+   public static float[] XYZtoRGB(float[] in)
+   {
+     float[] temp = new float[3];
+     temp[0] = 3.1338f * in[0] - 1.6171f * in[1] - 0.4907f * in[2];
+     temp[1] = -0.9785f * in[0] + 1.9160f * in[1] + 0.0334f * in[2];
+     temp[2] = 0.0720f * in[0] - 0.2290f * in[1] + 1.4056f * in[2];
+ 
+     float[] out = new float[3];
+     for (int i = 0; i < 3; i++)
+       {
+ 	if (temp[i] < 0)
+ 	  temp[i] = 0.0f;
+ 	if (temp[i] > 1)
+ 	  temp[i] = 1.0f;
+ 	if (temp[i] <= 0.00304f)
+ 	  out[i] = temp[i] * 12.92f;
+ 	else
+ 	  out[i] = 1.055f * ((float) Math.exp((1 / 2.4) * Math.log(temp[i])))
+ 	           - 0.055f;
+       }
+     return out;
+   }
+ 
+   /**
+    * sRGB --> CIE XYZ (D50 relative)
+    *
+    * Static as it's used by other ColorSpaceConverters to
+    * convert to XYZ if the color space is defined in RGB.
+    */
+   public static float[] RGBtoXYZ(float[] in)
+   {
+     float[] temp = new float[3];
+     float[] out = new float[3];
+     for (int i = 0; i < 3; i++)
+       if (in[i] <= 0.03928f)
+ 	temp[i] = in[i] / 12.92f;
+       else
+ 	temp[i] = (float) Math.exp(2.4 * Math.log((in[i] + 0.055) / 1.055));
+ 
+     /*
+      * Note: The numbers which were used to calculate this only had four
+      * digits of accuracy. So don't be fooled by the number of digits here.
+      * If someone has more accurate source, feel free to update this.
+      */
+     out[0] = (float) (0.436063750222 * temp[0] + 0.385149601465 * temp[1]
+              + 0.143086418888 * temp[2]);
+     out[1] = (float) (0.222450894035 * temp[0] + 0.71692584775 * temp[1]
+              + 0.060624511256 * temp[2]);
+     out[2] = (float) (0.0138985186 * temp[0] + 0.097079690112 * temp[1]
+              + 0.713996045725 * temp[2]);
+     return out;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/TagEntry.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/TagEntry.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/TagEntry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/TagEntry.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,121 ----
+ /* TagEntry.java -- A utility class used for storing the tags in ICC_Profile
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ 
+ /**
+  * TagEntry - stores a profile tag.
+  * These are conveniently stored in a hashtable with the tag signature
+  * as a key. A legal profile can only have one tag with a given sig,
+  * so we can conveniently ignore collisions.
+  *
+  * @author Sven de Marothy
+  */
+ public class TagEntry
+ {
+   // tag table entry size
+   public static final int entrySize = 12;
+   private int signature;
+   private int size;
+   private int offset;
+   private byte[] data;
+ 
+   public TagEntry(int sig, int offset, int size, byte[] data)
+   {
+     this.signature = sig;
+     this.offset = offset;
+     this.size = size;
+     this.data = new byte[size];
+     System.arraycopy(data, offset, this.data, 0, size);
+   }
+ 
+   public TagEntry(int sig, byte[] data)
+   {
+     this.signature = sig;
+     this.size = data.length;
+     this.data = new byte[size];
+     System.arraycopy(data, offset, this.data, 0, size);
+   }
+ 
+   public byte[] getData()
+   {
+     byte[] d = new byte[size];
+     System.arraycopy(this.data, 0, d, 0, size);
+     return d;
+   }
+ 
+   public String hashKey()
+   {
+     return tagHashKey(signature);
+   }
+ 
+   public String toString()
+   {
+     String s = "";
+     s = s + (char) ((byte) ((signature >> 24) & 0xFF));
+     s = s + (char) ((byte) ((signature >> 16) & 0xFF));
+     s = s + (char) ((byte) ((signature >> 8) & 0xFF));
+     s = s + (char) ((byte) (signature & 0xFF));
+     return s;
+   }
+ 
+   public int getSignature()
+   {
+     return signature;
+   }
+ 
+   public int getSize()
+   {
+     return size;
+   }
+ 
+   public int getOffset()
+   {
+     return offset;
+   }
+ 
+   public void setOffset(int offset)
+   {
+     this.offset = offset;
+   }
+ 
+   public static String tagHashKey(int sig)
+   {
+     return "" + sig;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ToneReproductionCurve.java gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ToneReproductionCurve.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/ToneReproductionCurve.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/ToneReproductionCurve.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,177 ----
+ /* ToneReproductionCurve.java -- Representation of an ICC 'curv' type TRC
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.color;
+ 
+ 
+ /**
+  * ToneReproductionCurve - TRCs are used to describe RGB
+  * and Grayscale profiles. The TRC is essentially the gamma
+  * function of the color space.
+  *
+  * For example, Apple RGB has a gamma of 1.8, most monitors are ~2.2,
+  * sRGB is 2.4 with a small linear part near 0.
+  * Linear spaces are of course 1.0.
+  * (The exact function is implemented in SrgbConverter)
+  *
+  * The ICC specification allows the TRC to be described as a single
+  * Gamma value, where the function is thus out = in**gamma.
+  * Alternatively, the gamma function may be represented by a lookup table
+  * of values, in which case linear interpolation is used.
+  *
+  * @author Sven de Marothy
+  */
+ public class ToneReproductionCurve
+ {
+   private float[] trc;
+   private float gamma;
+   private float[] reverseTrc;
+ 
+   /**
+    * Constructs a TRC from a gamma values
+    */
+   public ToneReproductionCurve(float gamma)
+   {
+     trc = null;
+     reverseTrc = null;
+     this.gamma = gamma;
+   }
+ 
+   /**
+    * Constructs a TRC from a set of float values
+    */
+   public ToneReproductionCurve(float[] trcValues)
+   {
+     trc = new float[trcValues.length];
+     System.arraycopy(trcValues, 0, trc, 0, trcValues.length);
+     setupReverseTrc();
+   }
+ 
+   /**
+    * Constructs a TRC from a set of short values normalized to
+    * the 0-65535 range (as in the ICC profile file).
+    * (Note the values are treated as unsigned)
+    */
+   public ToneReproductionCurve(short[] trcValues)
+   {
+     trc = new float[trcValues.length];
+     for (int i = 0; i < trcValues.length; i++)
+       trc[i] = (float) ((int) trcValues[i] & (0xFFFF)) / 65535.0f;
+     setupReverseTrc();
+   }
+ 
+   /**
+    * Performs a TRC lookup
+    */
+   public float lookup(float in)
+   {
+     float out;
+ 
+     if (trc == null)
+       {
+ 	if (in == 0f)
+ 	  return 0.0f;
+ 	return (float) Math.exp(gamma * Math.log(in));
+       }
+     else
+       {
+ 	double alpha = in * (trc.length - 1);
+ 	int index = (int) Math.floor(alpha);
+ 	alpha = alpha - (double) index;
+ 	if (index >= trc.length - 1)
+ 	  return trc[trc.length - 1];
+ 	if (index <= 0)
+ 	  return trc[0];
+ 	out = (float) (trc[index] * (1.0 - alpha) + trc[index + 1] * alpha);
+       }
+     return out;
+   }
+ 
+   /**
+    * Performs an reverse lookup
+    */
+   public float reverseLookup(float in)
+   {
+     float out;
+ 
+     if (trc == null)
+       {
+ 	if (in == 0f)
+ 	  return 0.0f;
+ 	return (float) Math.exp((1.0 / gamma) * Math.log(in));
+       }
+     else
+       {
+ 	double alpha = in * (reverseTrc.length - 1);
+ 	int index = (int) Math.floor(alpha);
+ 	alpha = alpha - (double) index;
+ 	if (index >= reverseTrc.length - 1)
+ 	  return reverseTrc[reverseTrc.length - 1];
+ 	if (index <= 0)
+ 	  return reverseTrc[0];
+ 	out = (float) (reverseTrc[index] * (1.0 - alpha)
+ 	      + reverseTrc[index + 1] * alpha);
+       }
+     return out;
+   }
+ 
+   /**
+    * Calculates a reverse-lookup table.
+    * We use a whopping 10,000 entries.. This is should be more than any
+    * real-life TRC table (typically around 256-1024) so we won't be losing
+    * any precision.
+    *
+    * This will of course generate completely invalid results if the curve
+    * is not monotonic and invertable. But what's the alternative?
+    */
+   public void setupReverseTrc()
+   {
+     reverseTrc = new float[10000];
+     int j = 0;
+     for (int i = 0; i < 10000; i++)
+       {
+ 	float n = ((float) i) / 10000f;
+ 	while (trc[j + 1] < n && j < trc.length - 2)
+ 	  j++;
+ 
+ 	if (j == trc.length - 2)
+ 	  reverseTrc[i] = trc[trc.length - 1];
+ 	else
+ 	  reverseTrc[i] = (j + (n - trc[j]) / (trc[j + 1] - trc[j])) / ((float) trc.length);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/color/package.html gcc-4.1.0/libjava/classpath/gnu/java/awt/color/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/color/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/color/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.awt.color package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.awt.color</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/doc-files/BitwiseXORComposite-1.png gcc-4.1.0/libjava/classpath/gnu/java/awt/doc-files/BitwiseXORComposite-1.png
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/doc-files/BitwiseXORComposite-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/doc-files/BitwiseXORComposite-1.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,30 ----
+ ‰PNG
+ 
+ 
IHDR!Šó1
ÔbKGDÿÿÿ ½§“	pHYsœœ”SÝtIMEÓ	:Káv IDATxÚí�{\�çÿÇ_Ÿ
+ Iø5r6}›P#ÔHrˆeKrÊ/sÌÌhÍù4öe¶c3–…Íù4Ä(2¾D‘æ�…"ûú6§R|û¡�~ÔRŸ®ëþÜ÷çpîÏ§÷óÑÜ×ý¹ïëº¯ë¾_×á}½ßªââbA„° G@A�ÆA¤1AACA«ªYl•J¥À\Iµ¿ RP)¨æZ
+ Ò“GiU®í‹¡´†«ªº-êœÂj¢KÕmPç>tST!ºl¸Teßš+#‚ HcªÊãS)¨T
+ *iAACA�ÆAiAACA�ÆAiAACA�ÆAiAACATatò»lÒx”™y©¹Rš¿ð’üWÍR¨¦šE‹RØ{¡ÒªS=V
”þÁ4Ü;Hã‚ ‚4† ‚ �!‚ Ò‚ ‚4† ‚ �!‚ Ò‚ ‚4† ‚ �!‚ Ò‚ ‚4† ‚ �!‚ Ò‚ ‚4† ‚ �!‚ Ò‚ ‚4† ‚ �!‚ Ò‚ Â˜XÑ# ÂÔiÜžžèÒÍ›cøp|wÖy(*äYÃ#«²ÐîvÅ ñ(j6¦g&ªââbí¬Òsn¤æåÅ!/©©ÈÈ@Vââ�”„ë×5ç(Ö.3z/u¹,Ac®ôX})ƒJs)Ô²ü÷O œ¢”åHZõy(ìåNd”ÂÚ×®ÁÑ‘[}z¯„_ô=Â8îtÉ®°ÎõVðê¢eKŒƒþýÑ¾}…RœûÐMƒ&=À•ó½­né¹¼a‰Œƒ]6\ ð¶¾x�‚¼|‰sç���¤$$&"1±T&eÀpoŸik�ÌLìÙƒŸ~ÂåË¤1¤1¤1ðñÁ±cÜê{Xõé-9vh{÷›0’â»ÁëŒØ·¢r)¼¼ðÙgx÷]v)4jL®ÏðÅ8uÊÈÃäéSlÛ†ðp\½jÂcžë1�aòd$%!.îî4Z%ˆW?Ž-[¸©Ó¾Óç½¦}Ç˜‰ß‹&mÚ &ññl�‘J²
¾Æ�op¿�âjªvm„„àÊ8Àz*3_óïÖ
.`Å
+ XÑÂAüÍŒÈÊb'm…_ßÑÏ]ûaKã¸C:¾þDËkÎš…ädý¨Kyzô@äaØ÷Qh}
ˆäd¼÷iŒR™>G�ÂÚš¾-�aÚ4njprmu½EŽÆ¯g'mz6Ï$_°NDEá›oP­šAžIa!æ‰!ß 'G‰UV«víÂ”)¤1J¥woüü3}[¢”�;ÍNJwÀ‚…º^_`–¬§ôÅ�†
qö,úõÓpZl,,€þ�˜è…©˜ê�‰^è;ƒñ0
+ m4™ôè�cqxž¡ÐZÃ A&ÖÒLcÍ_íF°¶†³3š6…ƒ<=áí�F�4_?$?üPzIZó7HhÍ_9$j(EÓ¦HMEíÚëâïÓÏu�G¢–wŽòGÿCŒãé¸Ò¶¹’ßŠ´´b''î9ÏŸcÍ¬^�;wJä±ž»æëul…úþÈ·ä^Ð¶>FØhiß,°æ_¹.¬¬P·.:u‚�¼½Ñ³'Z·Ö4@Ì�³3<�éÛ[E5†‰‡&LÀ˜1°ä7�ÌL4oŽ‚ÒÒÒ˜2aal�qNE²+¬
+ $ß6Ç.)ÈdõùNôF¯“Z½üÆ±?&NDF…‘‡�Æ”)Íœ`tóážÐøút‡��a5¦2..˜4	&}ÇV¯Öÿ¤iŒØ+¸¸`ÇŽ
+ ÆòjŒ…íÛEiŒ^„­-ÜÝQ«j×†�
ÜÝKÿQe5†U
+ …�î«ŒÆHLDçÎ�ðÅø<TòmÇlf/õ‡¬EøÇÚö¼8MdêT¬ZÅø‘F�)Á¾æÉM=}ûfË­1eß±½{áìÌNÍÏGýúxò„4ÆÀÖGŽ [7vêŽ9R>�‘R"ÒÒ#hŒ‹’“K{ÍjcYˆdW¸¤H¸çÁøãx³»Hu–6K`ÅÌ\ÁÕ˜Áƒqà».Dj€NNµ�›ºp!EAcØÙ!.o¾ÉN1;wš†Æ˜ášn.ðø1;µcGQFJ
+ -b'ZbìF	—zTÁì¤õã%Ìõ6˜»”›Ìiœ¿‰ÏsSCCqùŒS/99@a!;ÕÏÏd˜yÚ•egcõjv’ƒ}U¢_}…ÔTvÒo�±b†Øë„¬e/Ã|ð|c$ç*d-ò9fÊ6`Ý:½ÿÉAü–ÆQÙB<1ž=jZ6of'ñ¦ÑHcäƒ×Ç©^�>)Q�—/1~<7uÁBÜ±É<2{Ç›ÝÅÊé’³tpb½ÙIéé˜>]ÏO`ç{°iÂNJª�ÖF«šýûÙÇ[µ"�16IIÜ×‰ 5ÎœÁ÷ß³“þªÅ�+ãQ=„¬e'­�:ÒW§–âgÎDn®ž‹_Tø6f¡¡F«—Ó§M¾¯l¶ÃóWªÌM¼atæÎå&÷Áæ1B¿
Y‹,–¿¯÷7i3Kv²®´ãö##
RüÄh~��tãðéfœJá�™�s,³uãÅ«ƒ„ú˜˜'�áøqœ8�Œ$%!'§tÌje;;¸»£aCx{£MC¹Iµ(‚¯/¼½ÑòxxÂ.ÕmP`…¼<Üð@Z8bcq8
5ú…ÓWÂï0ì³I{Ù³dMîKXË)OØTnÒÊ•|‹?CÐOœqÃP@I~\Lh>Æm—KèÐ�=]6{6–/‡áö`jý8K¬~Ëª£ì.ÿþ7Ûåê°aØ½[rõµiƒ7¸©ûö! @Z¶ÄÀ�Ê 9¹ØÕUì#Ò}æ�C\×G�š5áëøú²Ÿ­TÛå¦MqïžêÿPWDC�>†ÏCqQwà‰ÒJQRôÀŸÙ‚`Ø.ì®~0Ûm¯²1ÑýàwXr®sì`Ÿ�BËò
ªô½xø
Š	©"ÁvYmòcg*²´ÖÒ�NhXW„@êÉv¹TÛªãÅÆñÛ·Ñ¢…ß^=ô½ÌµWÛ¥÷{dZÄÇ³�ka¼˜–&$0Îž•|ÍC,—!¿ü"ÓÃ¹z:`ð`ÄÆŠÏŸ—nã
]3P½:BCñŸÿ%0úõÁ…xl[EN"¬ž;Î|ò®a88@ý o–lÄmÀ�Aå¦"‘‘†�Ùea�äUì¤ÂBô6BuðöZ\¼h2_0³Õ˜	�Á˜XAs^ÔnÒ'ˆc4ÍŒkÑp£¢ÄÔ;Û·ÃÍ
¿ÿn´ªqtÄ¥KX°@OÀAn¸tÍŸ*®½5|€oø›ÛCÖâI�WÿÝˆ}C§5ÊÄ*mg–¢ùŽ/eè»ðl…!Ç3†£m[öq#6{Ò`ë¿Àª¦bá�-´ˆYtXS¿2!AZ?1!™™¬IšDƒ?–�1jòó�V/¸p�»
[N7qn?W\“÷#¼cÙI÷›`ö7¥ÿÎ¶ÇÇáìÓÖ†hL3Æ—;’øõWÃwé.q…µêl„ºäÌ[?Nc<Z´@ËÔrÉ$'›^qîÜÁíÛz¸NANœÐpÎ‹Ò†2²Í‰©qõ*‚ƒ�Y)�:áØ1m&ªÑäŽQbd£Ç¡ÆvÒº	ˆë^:¦yXŸqÂˆ¤íŒtŠþªÅN:¾Ä›­a±*€3ÇEH�ç¸ÝDÖZhÕŠ�íî]œ9SÁÜ4¦U+œ>�úõ²?ož©Šg#/‰¨(Q½~I2l¬Å­ñãÙe±³ÃäÉØ·ééÈÏGq1Š‹‘Ÿ�›7qèV¯Æ¨QzØ Ý´)¢¢*¸Ä/ã¯|¬½��¿àµ ¨¦B55BÐõÌÿéì«µ»ƒ%ÿT\“s¼%ä
sÜ�Ø:š=KÖ KûY2€k²àúu™Êµ—›ônCYkaÅ
+ öñðpSú|™•ÆLš„K—ðúëêÇ�U³}2 *U…?‘§•�ÉüaLŒ2-Îµ_l¬Øj´ 0		8wŽq<(·ocÕ* E‹WÆëVVhÙþþ˜4	[·"%OŸbß>Lž¬9Vã…±ÀÞ½hÀZåÞs
-Æâãp<�œ¿‡8/«#Á‹³ñF,ü/ûšS^ƒË}Å½Ms–¡=gÒÿ¦‚¶°“t™%�ÔQ¨ÞåAàÞW¾ç?c;&[f&×QiŒ¡°³ÃGáúu¬^�Z•ÚëÖÁÏÏž™pÞ®G¢ßg‘ëðçÏ‹½àÁƒÆy»w3öí‹Í›a+.B°­-°j•6]ãyó¸&‹C×áQ=î‹,ðy(‚—1’,±äcå}Š°é}i?¶ºm�ü“o�{_.®Ç¯ÄT¹œÊÌ˜�o¿e'M›¦7¤1êIkkxyaÐ ,^ŒýÙÙX»–Ñ'½"8Ø°öŽ2pë÷;%.líÅ‹ìÅùÊÜ¸!¶3­–e€¹b$ÏDhóæìE‹vÿ¾î>v±a{¡ÅcÅ5¼—1ó[±'7ÈÂšIºÞñ1Êc¹žÏW©ÆÌC‹ˆŒä
+ Ì†
ì>iŒ®”L¬—üâùsÄÇcÿ~üóŸèÝ›aòô)¾øNNFëkË6~?zTÔÏ™³mÍšIž+(#;›±J$¹O�0­K==å¸õœ9¨QCý`~>&N”pÞ:G�£Þ—óáxKÔ™:Î’• °#ÛŽ¯;Ü¤Ñ}x_OO¬_�›71x0û„#Gbzß.s[ó¿q3g¢I„†šöü˜<SE‘“ÔL�yÿ}í_f¦x¿óŽ�â¯¿ŒSööìMW›7ãÏ?%\'­[Å‡ü¨Ä†g�‡&|�{t�%+!‡oª'›÷”gu¸I÷
+ õ÷`­Ñ¡üý1m¶oÇƒ8{~ÈÝkµo
’Ã²Ž4Fˆû÷±q#vï6±ùJ1ðL¯\Ñìå3'‡!EõëãÓOÙç‹ÙÞÅœ(ó÷—ãQTIšÍ²ugäHöû¿e‹äKEclÿ§Æ†Àç8Þß$tBý‡X=Y?÷*àû>�íójÅ¿‘­n–òó1ÏŸ#)	‡aåJŒÁ¶")¡°óçãÿ×T}Æ›•Æ4i‚¥Kq÷.bbL)Nœ¨Îo²²ØI'OjÄTö³âç¶a•F3¶‚övNyŒ÷7fœ5yy†½ïðáŒƒÏŸ#.Nò¥Rº²�÷ì¥Ðæ·|,ù]ø�ÃÑð�Á5F	È¿²›”77,^lÂß.óÜçÿî»ˆŽFr²L=kyàuÕ5vá™óZ%zÐ©û»™–&tAæV›ŽÑ´©Ï¡kWöØkÐ Ž_íìÐ¹³6zÌ$‘‰½ã@…¶½(®1áÔÚ‘šŠaÃàæf’;ÇMOcÊï#©Yo½…!C°lâã…<!¶k‡C‡%Ó·ÏÐð–d„wh1¬ž,-áëÞÞì_	/É0·÷ó*õÎ{ï±�=
+ 77Í£:íèÅa¤§ks5ÞªCKE:ÓËhŒé‚õÖÇ”Uú¹—•²×,äú^~ù%\\LÏ„ÌLÆ1yy¸x‘‘˜;Ý»£qcÌž-äm¥_?\¹bSg¼%™”n #qqxZÉñb÷î°±€$��ŠŠØñ_eÓ89±“nÞDïÞèÕKÿJÃÛ#àBQHø9¯]EN¸�_/´_ÂŽøUÕùO@¶¨\/ùÅgrEŸœ0ööf2 3ù¹²ìl,_Žü“'sW¿íì��>2í’^¿Ž‡Ç…$áÈ¶î–Ð±#{	]`ÇØ%àèÈukˆ¾äwß	�‹Þ½ñÆX¶ÙÙú¹iË–ìã[¶”.á(“ðÇD�se[G9B.Oprmu½�€ÕCÝº2Ùš¿°W[®ï~ƒØ¸‘4FIaÍ¼ù¦ÐÞŽµk1nœi“×=(5sq¾lTga�îÝ'$'sÍx˜eýûËúüü0s¦†snÝÂÜ¹hÜC‡ŠÝ©*ÓÐ@ïTÏRV{{ÐSÃÄžœî€u½£3ÿcÇŽ2•º‹/7éÐ�®\Ùƒ”J…·ÞbOø÷ë‡I“`˜ÕšFzõÂO?qOˆˆ€‡‡	�7^áÅ1»wW®¨tp€‹Ë«ÿ¶oÏñt‹é“f ìðåËÙ»U*dÏžÒËááÚÛéîISV¶Êjo¿×<KVž•Óu�ïY—¿‘ÞV®‡óì¿Ü¤Z0m¸x_}Åmä²M�ÆH`Ü8ìÚÅN²´ÄŽ¨^ÝT‹ÆÓ’Ë—Ù–»L'jcŽ®;Ú«WSRpó&c£—1Œn#"°d‰Ø“oÜÀÄ‰hÑëÖi5"‹û}E­xï~�íY¹õ
Lüžû«±¹«Mb°zpp�©àO\¸Ií®äŽŸÎè¨Q»v)1ôCU×cÇ"•3èvtÄ”)¦Z®«Wøà‡obN”ùVœ
+ `Î•�mß>EbÊøôSüö›„@awï"8mÛJvâ+Ï‚³e¡RZZ¶=&­a'm‹¥sñ:ÇÊæJ;,ÖÁwœ+ßN×Ý]¦²{½ÍMÚzÌ w,*Âˆì³7ßÄ×_“Æ(�¼<ŒÏM�:Õ„‹ÆXyj‹¹S²Z5u�±·GVä%æ†q­–™tê„äd¬^ÍˆéÀãÚ5tíŠÐPi_�*/þØÌoá™Û\¬ç¿_‹ç!­•–÷uç›0'u
Áþ„Ø¿î°ûøùçì¤É“MÛ,VU\b£Ý�UzÎ
//ÚÝ(.Žô^¥RÅ2dFÊEJiÈÕ¤I¯¢G”/E×®êÆÍQQŒ¥øþý[2‡ÅÖbff&–Ê”‘ÁP£jÕ�›ûjúQ¥Ò\
+ µgò÷O CK,•�íÛÎŽ.Ã¤DF2Æ(e9*;òìjÖd\¡Zµ2ã”¶Ô—1-Jýƒì	ÄÐŸiN7‘ìúÊìjÌfl	b_¥Çiœê©e®_ûoÅE UIÛ(.,D�:"�ª<Ö»iw÷êÏ°"…=¤xQŸ¸j¾B+Ðx—
—ÄÔEb"{«oV\]ñà�‹Žo_•Ç”°}»Š·$“˜¨n	&lQVž«‰sãë«”õ-Œ�„üþ;BB‘„*sè†
uqžSw¦£“æQ=¡Y²òv½+f Çît¬› eÞå¸·´”ÃéªKWî¶î?â
~÷Ñ£ñ‚âºAlÞlª-Êœ5&>Þuù2Ûñpa¡º_¦Û¦‘1oBí*Ä¢L#®®ÇÃ‡ˆˆÐ<Á²o~øAó5y†d[ˆ–��µÈbùgœ¾^ûõ	ŒùäkdheðíÏ¦'Ã¬ìÛ^Ü¤¨¿{ZæÏçHï»˜1ƒ4Fa¤¤˜g¹x>²ÊKÂõë¸u‹¡%L·:^^ìÐ/å7±çå1îki‰Aƒú”¬­1a._Ft´ËãÏ>ÓìÑ–oTžpr²'�%¥éø’õíÜƒþœPu�ë
+ ™Ÿ	Ðÿªå³“
;h.°BÓqÜQTÒJ9žÿòåÜÎñ’%pu5½eÎc®ë´<eå§¶˜eý8¶­¬Øs>		¯žá/¿0æ<=…Ó*??$'cútî	bçN
á9òéÑÃ|Ú•+Ì¦÷aÃY‰Fí§ì¤ýƒq@z¤ÎîP¦fM|ø¡ŸÀëA°äÈÛá³h(—£�1cØs&jÊlÎca¦…ã}ï^-É0ã»tº™ý£/^Í8À8aà@ÓxbVVX±K—J–ñÛoìãŽŽ&ÙµdÂóÐ3ñ{ôä;Jhœ�å³¸©¿Ç“:’s"à\À Vp“^þ,_EÜº…O>a'9;cÅ
+ ÒÅàèhžåJJÂóçŒãeK2¹¹Œ &µj¡'ßÔ‡ç€¹dºŒé¼0±Ð	sæ o_vs3Py._Ff&;)(È•¿?» éX:WÃo'¬C7ÎôÎý&˜ý�äÌô<…Žg£­[Ê#”GkÜã¸#ký—wq7<œëg=$�Æ(ó³ù)¡¨ˆÛï.ÙZÍ˜×v)Æs±S¢U'N0ö~:;£M{tsæ°�‹±
+ ÝÃñUõÑG¨SÇ´[”�""ØI?} *øãæ1¨ñ‚�´nÎxIÎÒÂÜ¤%K„¦õ´éàÃãÜÔy‹ŒP)|ÀÞp
àÇ+l* �1£G+7o:.]òVKúãÌÅá¾�£#j×fOL8eÆÝz©<§b–î6l`¯U³g›ö›òÝwì}¸!kÑK\”Ç[ýœ›:~=^JlðþQðŽe'5h€ðp=?�÷vâÙ}vR‹\¼f„J¹s‡»[¼~}®»,ÒY1¼‰9ÉÏ—6nIb"ûø™3((`€ùúj¸¦�ãàÍ›ÈÍeŒ1­»î’ŸœÌõÊ™¾¾ìY²×oãëO¤Œ—¡ýïì¤Tg,úLrÆÖ†pÇFÃ†éÓ�·å(tæ;&hj<gí7²ç¨x{›Œ)³yjL½zJÑy^ô_5&!�½W+?Ë–!«ÒÎ8OOÍÓ<ßéß~‹û÷}ISô`Í)&ÒOÉ,Îâvµj`—czÄÖë×³“"‚EÍ’•gÛ(®Ëµ¯>EŠ‹´«µ¹Ž%ÿä¦~û-†×Ãðh�É“¹©£Ðé‘1+hÜ8nX¬¯¿6
{3Ô˜-pê”Ð‚ÿï¿Ë—Þb²Ž&˜EE\ÇeÌ…1Ãœ#2â ¦Oî0N#kÖpG½b¸xQ(rDÌuØg›ØË²r%š5cÿà'øÆH¾ZÛ«ø”ã¦¾ÐA[$_p† 
ÕŽ˜6M§â×Œü\¹>Ã¢EF® ÂN²´ÄÞ½¥mIcäë”Í›‡k×48â]¼X¾,1=ähÝZ×D¼ïìÝ»ZjÏ²™yA#.Æ?Ž.]Ð½;Ûï€»wcÓ&vR` Ø‹ÌšÅ
ìÝù7\ˆ‚gª6…²¶ÆØH8*ë“ôña÷ušÝÅÊéZ^ó³Eh}ƒ£Ðîønšž‹°r%"#µ‰ wëu[*d2ç�Ž¶o)â³¶{7×ÞÄÉ	aaP8&éÓÊ
+ VV¨]mÛ¢V-ØÙÁÃ­[£gÏÒYá/TŸ>dò‰éå%äÒfÔ¨òNÕDùÄ,£{wÄÅ©Äœß¨22D]ÓÅ…¡Bï¯&rsÙÛ�dð‰Yþù7k†  ŒY!êsØŠ…œ(��;«veŸ˜jƒžS§Ô]dªTªâ¿}qnJÇ²9¸ÞHsY¬
+ àÿßÄ�î¥k*=:ô‰ik‹k×Ô�U«T*ãH_m1eœñâš2×ú©Îh~GÊGðïÌLüõV®DxxY;ò‰™æˆðh5ù–ÜÚ4Á0k-#+ëâ“‡½=®^EƒìÔ!Ci¨ooUÑ}q÷.ÜÜJb¼Ë¤1%C�qÕéÓøáÄÇãÎ€æÍ‹ûõÃÈ‘\¨W#P‰Ò˜>À�?ŠÊêèÑØ¶MóiÃ†q7ÆË¬1e8:¢[7øú¢Y3têTºº ‰‰8q6p––HLT�M"¬1P÷Z^cÊºíÑÇpþRÖ!Ý¡4r—UÚd¢¥?:õC—ëèþ¶ºßÙ4&<œ1	£R©Þßˆ�cu½ó¤5ø~";©ï–â©¾¤*7.>vLÃüDa!N�Â‘#X¾\å¸Â­^­ÒnP�²^ƒ_}.]ñ§¦A�ãmx{k)0ÒìèMrrÐ®îéw€4FÜ¾�=ðçŸeMW&�©ü=ø:—U‡¸»ˆÒ˜ýûÅzÛºUÔŽÂmÛ0r¤²4FkÂÂ[Ç5j€AƒðóÏ¯ÆÍ•5FËwJ�éÕ‹·[¥R=®ƒ:Ot½s®-œSq·§ýŒÂHÑ>Ñÿ®íb;;ìÝ‹Þ½E½Jç>ÔÒ·ÿéÓX÷�N’¤1%¯ç¨Qì¤ØX]cÑ’o]9zo½U&0²rð vì0ZÁ«U“à¨];ÍçXZjØÎiBÌŸ¯½o’ðöÛ>åccÃÝëèA`Øæ""˜›:cIÿˆçäàí·±`×÷¾ŽXZâËùØ7[¹.ø¦LaXx–àí�yóšmó×˜[·0b|}K¦ÈŒÃ¸qF4àã#a¿§«+jÔÐpN¯^FÞÖ~ö,×ó�xjÔ@D„®VCqqpue»†S2K—²­.õÛò;Œœf5Ð`0&À¢Epuåº…ÕšÓ§à‡ìcŠ®¸œ¡ð¾¡¡
+ õlb¶“Ÿ�ýû1x0œœ4{Õ54yyèÓGÔR‡Ã
¯º”¹oÍŸo£oï÷ôÄÉ“¸p#F°Ch¤G\¾Œ	ô�™0`€v·ë`Ùs¼hð§çåÅÞ’™©w“«¦ þCvÒ– üªmX„”ôì‰¾}õÓoK8	ooì›�&¦0$=|˜k=oi‰íÛak«¸<›ÃzLa!^¾ÄãÇHJÂãÇ8W¯âÄ	õ¸�jy—m=¦<þþX¸�½E»õŸâãÇ…Î¸q­¤WŸ;Ë–	~
o£ys�&!k¬åìllÝŠ;¸1ÄÔ^B??Ìž­ÙžBÌz£.fâ£6àÆ
¢Þn-qÑ11ˆòÇyCô@+­ÇX[ãÚ5ö fðà�A*ýNËïÎÍ8¤#Õ¹B`MÞ‹*P®®
+ ÂàÁ
+ %f=¦ãcÃù+p¼­ç§n¸õ˜˜�elÚ„±Z™lT•59ÅU/õ­îîðóCÇŽpw‡½}‰…llT�‡»IDATÂÃ‹OžD|¼HkcÕÂ…ÅÛ}%j;p@(üpûöö?ŠÑV#Ôõ‘Þ»‡øxÄÄ =IIÈË+–Õ«ww4k†Þ½áã#v–O;��Xà?t:�6¾pšˆ–^üÈËCÒ)dZãò\éŽ_£ÀÊ�í,Q›R+ïES
+ GGtê„ž=Ñ¨T	ÝÊÔ+×
ªãp$T�ÑòœùbcQ$o€ðÄñzÓAcV#ø6ËV})ƒ‘4Fß¥Ð^cDUÒµ	ì�1NUTa�©*veA„ü�ÆA¤1AiAA�ÆA¤1AiAA�ÆA¤1AiAA�ÆA¤1AiAA�ÆA¤1AiAA�ÆAÆA§X¯ÅÅ¦Zl•
+ ÊŒ½()W*•BC‘VÍR‡)¬EuÑª.Sj)Â•Uˆ.&þÁ¤qAACA�ÆAiAACA�ÆAiAACA�ÆAiAACA�ÆAiAACA€ª¸Jú›V)Ó›< ©:¨T
+ *…¹–Âl°B•¤¬²Û©T
+ *EU.�c‚ B´CA�ÆA¦Æÿ"‡C“OÛ¥îIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/image/ImageDecoder.java gcc-4.1.0/libjava/classpath/gnu/java/awt/image/ImageDecoder.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/image/ImageDecoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/image/ImageDecoder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,156 ----
+ /* ImageDecoder.java --
+    Copyright (C) 1999, 2000, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.image;
+ 
+ import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageProducer;
+ import java.io.ByteArrayInputStream;
+ import java.io.FileInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.util.Vector;
+ 
+ public abstract class ImageDecoder implements ImageProducer 
+ {
+   Vector consumers = new Vector ();
+   String filename;
+   URL url;
+   byte[] data;
+   int offset;
+   int length;
+   InputStream input;
+ 
+   static
+   {
+     // FIXME: there was some broken code here that looked like
+     // it wanted to rely on this property.  I don't have any idea
+     // what it was intended to do.
+     // String endian = System.getProperties ().getProperty ("gnu.cpu.endian");
+   }
+ 
+   public ImageDecoder (String filename)
+   {
+     this.filename = filename;
+   }
+ 
+   public ImageDecoder (URL url)
+   {
+     this.url = url;
+   }
+ 
+   public ImageDecoder (InputStream is)
+   {
+     this.input = is;
+   }
+ 
+   public ImageDecoder (byte[] imagedata, int imageoffset, int imagelength)
+   {
+     data = imagedata;
+     offset = imageoffset;
+     length = imagelength;
+   }
+ 
+   public void addConsumer (ImageConsumer ic) 
+   {
+     consumers.addElement (ic);
+   }
+ 
+   public boolean isConsumer (ImageConsumer ic)
+   {
+     return consumers.contains (ic);
+   }
+   
+   public void removeConsumer (ImageConsumer ic)
+   {
+     consumers.removeElement (ic);
+   }
+ 
+   public void startProduction (ImageConsumer ic)
+   {
+     if (!isConsumer(ic))
+       addConsumer(ic);
+ 
+     Vector list = (Vector) consumers.clone ();
+     try 
+       {
+ 	// Create the input stream here rather than in the
+ 	// ImageDecoder constructors so that exceptions cause
+ 	// imageComplete to be called with an appropriate error
+ 	// status.
+         if (input == null)
+           {
+             try 
+               {
+                 if (url != null)
+                   input = url.openStream();
+                 else
+                   {
+                     if (filename != null)
+                       input = new FileInputStream (filename);
+                     else
+                       input = new ByteArrayInputStream (data, offset, length);
+                   }
+                 produce (list, input);
+               } 
+             finally 
+               {
+                 input = null;
+               }
+           }
+         else
+           {
+             produce (list, input);
+           }
+       }
+     catch (Exception e)
+       {
+ 	for (int i = 0; i < list.size (); i++)
+ 	  {
+ 	    ImageConsumer ic2 = (ImageConsumer) list.elementAt (i);
+ 	    ic2.imageComplete (ImageConsumer.IMAGEERROR);
+ 	  }
+       }
+   }
+ 
+   public void requestTopDownLeftRightResend (ImageConsumer ic) 
+   { 
+   }
+ 
+   public abstract void produce (Vector v, InputStream is) throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/image/XBMDecoder.java gcc-4.1.0/libjava/classpath/gnu/java/awt/image/XBMDecoder.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/image/XBMDecoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/image/XBMDecoder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,155 ----
+ /* XBMDecoder.java -- Decodes X-bitmaps
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.image;
+ 
+ import java.awt.image.ColorModel;
+ import java.awt.image.ImageConsumer;
+ import java.io.BufferedReader;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.Reader;
+ import java.net.URL;
+ import java.util.StringTokenizer;
+ import java.util.Vector;
+ 
+ public class XBMDecoder extends ImageDecoder
+ {
+   BufferedReader reader;
+   static final ColorModel cm = ColorModel.getRGBdefault ();
+   static final int black = 0xff000000;
+   static final int transparent = 0x00000000;
+   static final int masktable[] = { 0x01, 0x02, 0x04, 0x08, 
+ 				   0x10, 0x20, 0x40, 0x80 };
+ 
+   public XBMDecoder (String filename)
+   {
+     super (filename);
+   }
+ 
+   public XBMDecoder (URL url)
+   {
+     super (url);
+   }
+ 
+   public void produce (Vector v, InputStream is) throws IOException
+   {
+     reader = new BufferedReader (new InputStreamReader (is));
+     int width = -1, height = -1;
+ 
+     for (int i = 0; i < 2; i++)
+       {
+ 	String line = reader.readLine ();
+ 	StringTokenizer st = new StringTokenizer (line);
+ 	
+ 	st.nextToken ();		// #define
+ 	st.nextToken ();		// name_[width|height]
+ 	if (i == 0)
+ 	  width = Integer.parseInt (st.nextToken (), 10);
+ 	else
+ 	  height = Integer.parseInt (st.nextToken (), 10);
+       }
+ 
+     for (int i = 0; i < v.size (); i++)
+       {
+ 	ImageConsumer ic = (ImageConsumer) v.elementAt (i);
+ 
+ 	ic.setDimensions (width, height);
+ 	ic.setColorModel (cm);
+ 	ic.setHints (ImageConsumer.COMPLETESCANLINES
+ 		     | ImageConsumer.SINGLEFRAME
+ 		     | ImageConsumer.SINGLEPASS
+ 		     | ImageConsumer.TOPDOWNLEFTRIGHT);
+       }
+ 
+     /* skip to the byte array */
+     while (reader.read () != '{') { }
+ 
+     /* loop through each scanline */
+     for (int line = 0; line < height; line++)
+       {
+ 	int scanline[] = getScanline (reader, width);
+ 
+ 	for (int i = 0; i < v.size (); i++)
+ 	  {
+ 	    ImageConsumer ic = (ImageConsumer) v.elementAt (i);
+ 	    ic.setPixels (0, 0 + line, width, 1, cm, scanline, 0, width);
+ 	  }
+       }
+ 
+     /* tell each ImageConsumer that we're finished */
+     for (int i = 0; i < v.size (); i++)
+       {
+ 	ImageConsumer ic = (ImageConsumer) v.elementAt (i);
+ 	ic.imageComplete (ImageConsumer.STATICIMAGEDONE);
+       }
+   }    
+ 
+   public static int[] getScanline (Reader in, int len) throws IOException
+   {
+     char byteStr[] = new char[2];
+     int scanline[] = new int[len];
+     int x = 0;
+ 
+     while (x < len)
+       {
+ 	int ch = in.read ();
+ 	if (ch == '0')
+ 	  {
+ 	    in.read ();		// 'x'
+ 	    
+ 	    byteStr[0] = (char) in.read ();
+ 	    byteStr[1] = (char) in.read ();
+ 
+ 	    int byteVal = Integer.parseInt (new String (byteStr), 16);
+ 
+ 	    for (int i = 0; i < 8; i++, x++)
+ 	      {
+ 		if (x == len)	// condition occurs if bitmap is padded
+ 		  return scanline;
+ 
+ 		scanline[x] = ((byteVal & masktable[i]) != 0) ? 
+ 		               black : transparent;
+ 	      }
+ 	  }	
+       }
+ 
+     return scanline;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/image/package.html gcc-4.1.0/libjava/classpath/gnu/java/awt/image/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/image/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/image/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.awt.image package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.awt.image</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/package.html gcc-4.1.0/libjava/classpath/gnu/java/awt/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.awt package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.awt</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/ClasspathFontPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/ClasspathFontPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/ClasspathFontPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/ClasspathFontPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,846 ----
+ /* ClasspathFontPeer.java -- Font peer used by GNU Classpath.
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer;
+ 
+ import gnu.java.awt.ClasspathToolkit;
+ 
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Toolkit;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.font.LineMetrics;
+ import java.awt.font.TextAttribute;
+ import java.awt.font.TransformAttribute;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.peer.FontPeer;
+ import java.text.AttributedCharacterIterator;
+ import java.text.CharacterIterator;
+ import java.util.HashMap;
+ import java.util.Locale;
+ import java.util.Map;
+ 
+ /**
+  * A peer for fonts that are used inside Classpath. The purpose of
+  * this interface is to abstract from platform-specific font handling
+  * in the Classpath implementation of java.awt.Font and related
+  * classes.
+  *
+  * <p><b>State kept by the peer:</b> a peer is generated for each Font
+  * object in the default implementation. If you wish to share peers between
+  * fonts, you will need to subclass both ClasspathFontPeer and
+  * {@link ClasspathToolKit}.</p>
+  * 
+  * <p><b>Thread Safety:</b> Methods of this interface may be called
+  * from arbitrary threads at any time. Implementations of the
+  * <code>ClasspathFontPeer</code> interface are required to perform
+  * the necessary synchronization.</p>
+  *
+  * @see java.awt.Font#getPeer
+  * @see java.awt.Toolkit#getFontPeer
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  * @author Graydon Hoare (graydon@redhat.com)
+  */
+ public abstract class ClasspathFontPeer
+   implements FontPeer
+ {
+ 
+   /*************************************************************************/
+   
+   /*
+    * Instance Variables
+    */
+   
+   /**
+    * The 3 names of this font. all fonts have 3 names, some of which
+    * may be equal:
+    *
+    * logical -- name the font was constructed from
+    * family  -- a designer or brand name (Helvetica)
+    * face -- specific instance of a design (Helvetica Regular)
+    *
+    * @see isLogicalFontName 
+    */
+   
+   protected String logicalName;
+   protected String familyName;
+   protected String faceName;
+   
+   /**
+    * The font style, which is a combination (by OR-ing) of the font style
+    * constants PLAIN, BOLD and ITALIC, in this class.
+    */
+   protected int style;
+   
+   /**
+    * The font point size. A point is 1/72 of an inch.
+    */
+   protected float size;
+ 
+   /**
+    * The affine transformation the font is currently subject to.
+    */
+   protected AffineTransform transform;
+ 
+   protected static ClasspathToolkit tk()
+   {
+     return (ClasspathToolkit)(Toolkit.getDefaultToolkit ());
+   }
+ 
+   /* 
+    * Confusingly, a Logical Font is a concept unrelated to
+    * a Font's Logical Name. 
+    *
+    * A Logical Font is one of 6 built-in, abstract font types
+    * which must be supported by any java environment: SansSerif,
+    * Serif, Monospaced, Dialog, and DialogInput. 
+    *
+    * A Font's Logical Name is the name the font was constructed
+    * from. This might be the name of a Logical Font, or it might
+    * be the name of a Font Face.
+    */
+ 
+   protected static boolean isLogicalFontName(String name)
+   {
+     String uname = name.toUpperCase ();
+     return (uname.equals ("SANSSERIF") ||
+             uname.equals ("SERIF") ||
+             uname.equals ("MONOSPACED") ||
+             uname.equals ("DIALOG") ||
+             uname.equals ("DIALOGINPUT"));
+   }
+ 
+   protected static String logicalFontNameToFaceName (String name)
+   {
+     String uname = name.toUpperCase ();
+     if (uname.equals("SANSSERIF"))
+       return "Helvetica";
+     else if (uname.equals ("SERIF"))
+       return "Times";
+     else if (uname.equals ("MONOSPACED"))
+       return "Courier";
+     else if (uname.equals ("DIALOG"))
+       return "Helvetica";
+     else if (uname.equals ("DIALOGINPUT"))
+       return "Helvetica";
+     else
+       return "Helvetica";
+   }
+ 
+   protected static String faceNameToFamilyName (String name)
+   {
+     return name;
+   }
+ 
+   public static void copyStyleToAttrs (int style, Map attrs)
+   {
+     if ((style & Font.BOLD) == Font.BOLD)
+       attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
+     else
+       attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR);
+ 
+     if ((style & Font.ITALIC) == Font.ITALIC)
+       attrs.put (TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
+     else
+       attrs.put (TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR);
+   }
+ 
+   protected static void copyFamilyToAttrs (String fam, Map attrs)
+   {
+     if (fam != null)
+       attrs.put (TextAttribute.FAMILY, fam);
+   }
+   
+   public static void copySizeToAttrs (float size, Map attrs)
+   {
+     attrs.put (TextAttribute.SIZE, new Float (size));
+   }
+   
+   protected static void copyTransformToAttrs (AffineTransform trans, Map attrs)
+   {
+     if (trans != null)
+       attrs.put(TextAttribute.TRANSFORM, new TransformAttribute (trans));
+   }
+ 
+ 
+   protected void setStandardAttributes (String name, String family, int style, 
+                                         float size, AffineTransform trans)
+   {
+     this.logicalName = name;
+ 
+     if (isLogicalFontName (name))
+       this.faceName = logicalFontNameToFaceName (name);
+     else
+       this.faceName = name;
+ 
+     if (family != null)
+       this.familyName = family;
+     else
+       this.familyName = faceNameToFamilyName (faceName);
+     
+     this.style = style;
+     this.size = size;
+     this.transform = trans;
+   }
+ 
+ 
+   protected void setStandardAttributes (String name, Map attribs)
+   {
+     String family = this.familyName;
+     AffineTransform trans = this.transform;
+     float size = this.size;
+     int style = this.style;
+ 
+     if (attribs.containsKey (TextAttribute.FAMILY))
+       family = (String) attribs.get (TextAttribute.FAMILY);
+ 
+     if (name == null)
+       name = "SansSerif";
+ 
+     if (attribs.containsKey (TextAttribute.WEIGHT))
+       {
+         Float weight = (Float) attribs.get (TextAttribute.WEIGHT);
+         if (weight.floatValue () >= TextAttribute.WEIGHT_BOLD.floatValue ())
+           style += Font.BOLD;
+       }
+ 
+     if (attribs.containsKey (TextAttribute.POSTURE))
+       {
+         Float posture = (Float) attribs.get (TextAttribute.POSTURE);
+         if (posture.floatValue () >= TextAttribute.POSTURE_OBLIQUE.floatValue ())
+           style += Font.ITALIC;
+       }
+ 
+     if (attribs.containsKey (TextAttribute.SIZE))
+       {
+         Float sz = (Float) attribs.get (TextAttribute.SIZE);
+         size = sz.floatValue ();
+ 
+         // Pango doesn't accept 0 as a font size.
+         if (size < 1)
+           size = 1;
+       }
+     else
+       size = 12;
+ 
+     if (attribs.containsKey (TextAttribute.TRANSFORM))
+       {
+         TransformAttribute ta = (TransformAttribute) 
+           attribs.get(TextAttribute.TRANSFORM);
+         trans = ta.getTransform ();        
+       }
+ 
+     setStandardAttributes (name, family, style, size, trans);
+   }
+ 
+   protected void getStandardAttributes (Map attrs)
+   {    
+     copyFamilyToAttrs (this.familyName, attrs);
+     copySizeToAttrs (this.size, attrs);
+     copyStyleToAttrs (this.style, attrs);
+     copyTransformToAttrs (this.transform, attrs);
+   }
+ 
+ 
+   /* Begin public API */
+ 
+   public ClasspathFontPeer (String name, Map attrs)
+   {
+     setStandardAttributes (name, attrs);
+   }
+ 
+   public ClasspathFontPeer (String name, int style, int size)
+   {
+     setStandardAttributes (name, (String)null, style, 
+                            (float)size, (AffineTransform)null);
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getName}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public String getName (Font font) 
+   { 
+     return logicalName; 
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getFamily()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public String getFamily (Font font) 
+   { 
+     return familyName; 
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getFamily(Locale)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public String getFamily (Font font, Locale lc) 
+   { 
+     return familyName; 
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getFontName()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public String getFontName (Font font) 
+   { 
+     return faceName; 
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getFontName(Locale)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public String getFontName (Font font, Locale lc) 
+   { 
+     return faceName; 
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getSize}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public float getSize (Font font) 
+   { 
+     return size; 
+   }
+ 
+   /** 
+    * Implementation of {@link Font#isPlain}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+   
+   public boolean isPlain (Font font) 
+   { 
+     return style == Font.PLAIN; 
+   }
+ 
+   /** 
+    * Implementation of {@link Font#isBold}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+   
+   public boolean isBold (Font font) 
+   { 
+     return ((style & Font.BOLD) == Font.BOLD); 
+   }
+ 
+   /** 
+    * Implementation of {@link Font#isItalic}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public boolean isItalic (Font font) 
+   { 
+     return ((style & Font.ITALIC) == Font.ITALIC); 
+   }
+ 
+   /** 
+    * Implementation of {@link Font#deriveFont(int, float)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public Font deriveFont (Font font, int style, float size)
+   {
+     Map attrs = new HashMap ();
+     getStandardAttributes (attrs);
+     copyStyleToAttrs (style, attrs);
+     copySizeToAttrs (size, attrs);
+     return tk().getFont (logicalName, attrs);
+   }
+ 
+   /** 
+    * Implementation of {@link Font#deriveFont(float)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public Font deriveFont (Font font, float size)
+   {
+     Map attrs = new HashMap ();
+     getStandardAttributes (attrs);
+     copySizeToAttrs (size, attrs);
+     return tk().getFont (logicalName, attrs);
+   }
+ 
+   /** 
+    * Implementation of {@link Font#deriveFont(int)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public Font deriveFont (Font font, int style)
+   {
+     Map attrs = new HashMap ();
+     getStandardAttributes (attrs);
+     copyStyleToAttrs (style, attrs);
+     return tk().getFont (logicalName, attrs);
+   }
+ 
+   /** 
+    * Implementation of {@link Font#deriveFont(int, AffineTransform)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public Font deriveFont (Font font, int style, AffineTransform t)
+   {
+     Map attrs = new HashMap ();
+     getStandardAttributes (attrs);
+     copyStyleToAttrs (style, attrs);
+     copyTransformToAttrs (t, attrs);
+     return tk().getFont (logicalName, attrs);
+   }
+ 
+   /** 
+    * Implementation of {@link Font#deriveFont(AffineTransform)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public Font deriveFont (Font font, AffineTransform t)
+   {
+     Map attrs = new HashMap ();
+     getStandardAttributes (attrs);
+     copyTransformToAttrs (t, attrs);
+     return tk().getFont (logicalName, attrs);
+   }
+ 
+   /** 
+    * Implementation of {@link Font#deriveFont(Map)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public Font deriveFont (Font font, Map attrs)
+   {
+     return tk().getFont (logicalName, attrs);
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getAttributes()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public Map getAttributes (Font font)
+   {
+     HashMap h = new HashMap ();
+     getStandardAttributes (h);
+     return h;
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getAvailableAttributes()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public AttributedCharacterIterator.Attribute[] getAvailableAttributes(Font font)
+   {
+     AttributedCharacterIterator.Attribute a[] = 
+       new AttributedCharacterIterator.Attribute[5];
+     a[0] = TextAttribute.FAMILY;
+     a[1] = TextAttribute.SIZE;
+     a[2] = TextAttribute.POSTURE;
+     a[3] = TextAttribute.WEIGHT;
+     a[4] = TextAttribute.TRANSFORM;
+     return a;
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getTransform()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public AffineTransform getTransform (Font font)
+   {
+     if (transform == null)
+       transform = new AffineTransform ();
+     return transform;
+   }
+ 
+   /** 
+    * Implementation of {@link Font#isTransformed()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public boolean isTransformed (Font font)
+   {
+     return ! transform.isIdentity ();
+   }
+ 
+   /** 
+    * Implementation of {@link Font#getItalicAngle()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public float getItalicAngle (Font font)
+   {
+     if ((style & Font.ITALIC) == Font.ITALIC)
+       return TextAttribute.POSTURE_OBLIQUE.floatValue ();
+     else
+       return TextAttribute.POSTURE_REGULAR.floatValue ();
+   }
+ 
+ 
+   /** 
+    * Implementation of {@link Font#getStyle()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public int getStyle (Font font) 
+   { 
+     return style; 
+   }
+ 
+ 
+ 
+ 
+   /* Remaining methods are abstract */
+ 
+   /** 
+    * Implementation of {@link Font#canDisplay(char)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract boolean canDisplay (Font font, char c);
+ 
+   /** 
+    * Implementation of {@link Font#canDisplay(String)},
+    * {@link Font#canDisplay(char [], int, int)}, and
+    * {@link Font#canDisplay(CharacterIterator, int, int)}.
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract int canDisplayUpTo (Font font, CharacterIterator i, int start, int limit);
+ 
+ 
+   /**
+    * Returns the name of this font face inside the family, for example
+    * <i>&#x201c;Light&#x201d;</i>.
+    *
+    * <p>This method is currently not used by {@link Font}. However,
+    * this name would be needed by any serious desktop publishing
+    * application.
+    *
+    * @param font the font whose sub-family name is requested.
+    *
+    * @param locale the locale for which to localize the name.  If
+    * <code>locale</code> is <code>null</code>, the returned name is
+    * localized to the user&#x2019;s default locale.
+    *
+    * @return the name of the face inside its family, or
+    * <code>null</code> if the font does not provide a sub-family name.
+    */
+ 
+   public abstract String getSubFamilyName (Font font, Locale locale);
+   
+ 
+   /** 
+    * Implementation of {@link Font#getPSName()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract String getPostScriptName (Font font);
+ 
+ 
+   /** 
+    * Implementation of {@link Font#getNumGlyphs()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract int getNumGlyphs (Font font);
+ 
+ 
+   /** 
+    * Implementation of {@link Font#getMissingGlyphCode()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract int getMissingGlyphCode (Font font);
+ 
+ 
+   /** 
+    * Implementation of {@link Font#getBaselineFor(char)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract byte getBaselineFor (Font font, char c);
+ 
+ 
+   /**
+    * Returns a name for the specified glyph. This is useful for
+    * generating PostScript or PDF files that embed some glyphs of a
+    * font. If the implementation follows glyph naming conventions
+    * specified by Adobe, search engines can extract the original text
+    * from the generated PostScript and PDF files.
+    *
+    * <p>This method is currently not used by GNU Classpath. However,
+    * it would be very useful for someone wishing to write a good
+    * PostScript or PDF stream provider for the
+    * <code>javax.print</code> package.
+    *
+    * <p><b>Names are not unique:</b> Under some rare circumstances,
+    * the same name can be returned for different glyphs. It is
+    * therefore recommended that printer drivers check whether the same
+    * name has already been returned for antoher glyph, and make the
+    * name unique by adding the string ".alt" followed by the glyph
+    * index.</p>
+    *
+    * <p>This situation would occur for an OpenType or TrueType font
+    * that has a <code>post</code> table of format 3 and provides a
+    * mapping from glyph IDs to Unicode sequences through a
+    * <code>Zapf</code> table. If the same sequence of Unicode
+    * codepoints leads to different glyphs (depending on contextual
+    * position, for example, or on typographic sophistication level),
+    * the same name would get synthesized for those glyphs. To avoid
+    * this, the font peer would have to go through the names of all
+    * glyphs, which would make this operation very inefficient with
+    * large fonts.
+    *
+    * @param font the font containing the glyph whose name is
+    * requested.
+    *
+    * @param glyphIndex the glyph whose name the caller wants to
+    * retrieve.
+    *
+    * @return the glyph name, or <code>null</code> if a font does not
+    * provide glyph names.
+    */
+ 
+   public abstract String getGlyphName (Font font, int glyphIndex);
+ 
+ 
+   /** 
+    * Implementation of {@link
+    * Font#createGlyphVector(FontRenderContext, String)}, {@link
+    * Font#createGlyphVector(FontRenderContext, char[])}, and {@link
+    * Font#createGlyphVector(FontRenderContext, CharacterIterator)}.
+    *
+    * @param font the font object that the created GlyphVector will return
+    * when it gets asked for its font. This argument is needed because the
+    * public API of {@link GlyphVector} works with {@link java.awt.Font},
+    * not with font peers.
+    */
+ 
+   public abstract GlyphVector createGlyphVector (Font font,
+                                                  FontRenderContext frc,
+                                                  CharacterIterator ci);
+   
+ 
+   /** 
+    * Implementation of {@link Font#createGlyphVector(FontRenderContext,
+    * int[])}.
+    *
+    * @param font the font object that the created GlyphVector will return
+    * when it gets asked for its font. This argument is needed because the
+    * public API of {@link GlyphVector} works with {@link java.awt.Font},
+    * not with font peers.
+    */
+ 
+   public abstract GlyphVector createGlyphVector (Font font, 
+                                                  FontRenderContext ctx, 
+                                                  int[] glyphCodes);
+ 
+ 
+   /** 
+    * Implementation of {@link Font#layoutGlyphVector(FontRenderContext,
+    * char[], int, int, int)}.
+    *
+    * @param font the font object that the created GlyphVector will return
+    * when it gets asked for its font. This argument is needed because the
+    * public API of {@link GlyphVector} works with {@link java.awt.Font},
+    * not with font peers.
+    */
+ 
+   public abstract GlyphVector layoutGlyphVector (Font font, 
+                                                  FontRenderContext frc, 
+                                                  char[] chars, int start, 
+                                                  int limit, int flags);
+ 
+ 
+   /** 
+    * Implementation of {@link Font#getFontMetrics()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract FontMetrics getFontMetrics (Font font);
+ 
+ 
+   /** 
+    * Implementation of {@link Font#hasUniformLineMetrics()}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract boolean hasUniformLineMetrics (Font font);
+ 
+ 
+   /** 
+    * Implementation of {@link Font#getLineMetrics(CharacterIterator, int,
+    * int, FontRenderContext)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract LineMetrics getLineMetrics (Font font, 
+                                               CharacterIterator ci, 
+                                               int begin, int limit, 
+                                               FontRenderContext rc);
+ 
+   /** 
+    * Implementation of {@link Font#getMaxCharBounds(FontRenderContext)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract Rectangle2D getMaxCharBounds (Font font, 
+                                                 FontRenderContext rc);
+ 
+   /** 
+    * Implementation of {@link Font#getStringBounds(CharacterIterator, int,
+    * int, FontRenderContext)}
+    *
+    * @param font the font this peer is being called from. This may be
+    * useful if you are sharing peers between Font objects. Otherwise it may
+    * be ignored.
+    */
+ 
+   public abstract Rectangle2D getStringBounds (Font font, 
+                                                CharacterIterator ci, 
+                                                int begin, int limit, 
+                                                FontRenderContext frc);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /* ClasspathTextLayoutPeer.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer;
+ 
+ import java.awt.Graphics2D;
+ import java.awt.Shape;
+ import java.awt.font.TextHitInfo;
+ import java.awt.font.TextLayout;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * @author Graydon Hoare
+  */
+ 
+ public interface ClasspathTextLayoutPeer
+ {
+   TextHitInfo getStrongCaret (TextHitInfo hit1, 
+                               TextHitInfo hit2);
+ 
+   void draw (Graphics2D g2, float x, float y);
+ 
+   byte getBaseline ();
+ 
+   boolean isLeftToRight ();
+   boolean isVertical ();
+ 
+   float getAdvance ();
+   float getAscent ();
+   float getDescent ();
+   float getLeading ();
+ 
+   int getCharacterCount ();
+   byte getCharacterLevel (int index);
+ 
+   float[] getBaselineOffsets ();
+   Shape getBlackBoxBounds (int firstEndpoint, int secondEndpoint);
+   Rectangle2D getBounds ();
+ 
+   float[] getCaretInfo (TextHitInfo hit, Rectangle2D bounds);
+   Shape getCaretShape (TextHitInfo hit, Rectangle2D bounds);
+   Shape[] getCaretShapes (int offset, Rectangle2D bounds,
+                           TextLayout.CaretPolicy policy);
+ 
+   Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint,
+                                   Rectangle2D bounds);
+   int[] getLogicalRangesForVisualSelection (TextHitInfo firstEndpoint,
+                                             TextHitInfo secondEndpoint);
+ 
+   TextHitInfo getNextLeftHit (int offset, TextLayout.CaretPolicy policy);
+   TextHitInfo getNextRightHit (int offset, TextLayout.CaretPolicy policy);
+   TextHitInfo hitTestChar (float x, float y, Rectangle2D bounds);
+   TextHitInfo getVisualOtherHit (TextHitInfo hit);
+ 
+   float getVisibleAdvance ();
+   Shape getOutline (AffineTransform tx);
+   Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
+                                  TextHitInfo secondEndpoint,
+                                  Rectangle2D bounds);
+ 
+   TextLayout getJustifiedLayout (float justificationWidth);
+   void handleJustify (float justificationWidth);
+ 
+   Object clone ();
+   int hashCode ();
+   boolean equals (ClasspathTextLayoutPeer tl);
+   String toString ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/EmbeddedWindowPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/EmbeddedWindowPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/EmbeddedWindowPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/EmbeddedWindowPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /* EmbeddedWindowPeer.java -- Interface for window peers that may be
+    embedded into other applications
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer;
+ 
+ import java.awt.peer.FramePeer;
+ 
+ public interface EmbeddedWindowPeer extends FramePeer
+ {
+   void embed (long handle);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/GLightweightPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/GLightweightPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/GLightweightPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/GLightweightPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,339 ----
+ /* GLightweightPeer.java --
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.AWTException;
+ import java.awt.BufferCapabilities;
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Cursor;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.Image;
+ import java.awt.Insets;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.Toolkit;
+ import java.awt.event.PaintEvent;
+ import java.awt.image.ColorModel;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.image.VolatileImage;
+ import java.awt.peer.ContainerPeer;
+ import java.awt.peer.LightweightPeer;
+ 
+ /*
+  * Another possible implementation strategy for lightweight peers is
+  * to make GLightweightPeer a placeholder class that implements
+  * LightweightPeer.  Then the Component and Container classes could
+  * identify a peer as lightweight and handle it specially.  The
+  * current approach is probably more clear but less efficient.
+  */
+ 
+ /**
+  * A stub class that implements the ComponentPeer and ContainerPeer
+  * interfaces using callbacks into the Component and Container
+  * classes.  GLightweightPeer allows the Component and Container
+  * classes to treat lightweight and heavyweight peers in the same way.
+  *
+  * Lightweight components are painted directly onto their parent
+  * containers through an Image object provided by the toolkit.
+  */
+ public class GLightweightPeer
+   implements LightweightPeer, ContainerPeer
+ {
+   private Component comp;
+ 
+   private Insets containerInsets;
+ 
+   public GLightweightPeer(Component comp)
+   {
+     this.comp = comp;
+   }
+ 
+   // -------- java.awt.peer.ContainerPeer implementation:
+   
+   public Insets insets()
+   {
+     return getInsets ();
+   }
+   
+   public Insets getInsets()
+   {
+     if (containerInsets == null)
+       containerInsets = new Insets (0,0,0,0);
+     return containerInsets;
+   }
+   
+   public void beginValidate()
+   {
+   }
+   
+   public void endValidate()
+   {
+   }
+   
+   public void beginLayout()
+   {
+   }
+   
+   public void endLayout()
+   {
+   }
+   
+   public boolean isPaintPending()
+   {
+     return false;
+   }
+ 
+   // -------- java.awt.peer.ComponentPeer implementation:
+ 
+   public int checkImage(Image img, int width, int height, ImageObserver o)
+   {
+     return comp.getToolkit().checkImage(img, width, height, o);
+   }
+ 
+   public Image createImage(ImageProducer prod)
+   {
+     return comp.getToolkit().createImage(prod);
+   }
+ 
+   /* This method is not called. */
+   public Image createImage(int width, int height)
+   {
+     return null;
+   }
+ 
+   public void disable() {}
+ 
+   public void dispose() {}
+ 
+   public void enable() {}
+ 
+   public GraphicsConfiguration getGraphicsConfiguration()
+   {
+     return null;
+   }
+ 
+   public FontMetrics getFontMetrics(Font f)
+   {
+     return comp.getToolkit().getFontMetrics(f);
+   }
+ 
+   /* Returning null here tells the Component object that called us to
+    * use its parent's Graphics. */
+   public Graphics getGraphics()
+   {
+     return null;
+   }
+ 
+   public Point getLocationOnScreen()
+   {
+     Point parentLocation = comp.getParent().getLocationOnScreen();
+     return new Point (parentLocation.x + comp.getX(),
+                       parentLocation.y + comp.getY());
+   }
+ 
+   public Dimension getMinimumSize()
+   {
+     return new Dimension(comp.getWidth(), comp.getHeight());
+   }
+ 
+   /* A lightweight component's preferred size is equivalent to its
+    * Component width and height values. */
+   public Dimension getPreferredSize()
+   {
+     return new Dimension(comp.getWidth(), comp.getHeight());
+   }
+ 
+   /* Returning null here tells the Component object that called us to
+    * use its parent's Toolkit. */
+   public Toolkit getToolkit()
+   {
+     return null;
+   }
+ 
+   public void handleEvent(AWTEvent e) {}
+ 
+   public void hide() {}
+ 
+   public boolean isFocusable() 
+   {
+     return false;
+   }
+ 
+   public boolean isFocusTraversable()
+   {
+     return false;
+   }
+ 
+   public Dimension minimumSize()
+   {
+     return getMinimumSize();
+   }
+ 
+   public Dimension preferredSize()
+   {
+     return getPreferredSize();
+   }
+ 
+   public void paint(Graphics graphics) {}
+ 
+   public boolean prepareImage(Image img, int width, int height,
+ 			      ImageObserver o)
+   {
+     return comp.getToolkit().prepareImage(img, width, height, o);
+   }
+ 
+   public void print(Graphics graphics) {}
+ 
+   public void repaint(long tm, int x, int y, int width, int height) {}
+ 
+   public void requestFocus() {}
+ 
+   public boolean requestFocus(Component source, boolean bool1, boolean bool2, long x)
+   {
+     return false;
+   }
+ 
+   public void reshape(int x, int y, int width, int height) {}
+ 
+   public void setBackground(Color color) {}
+ 
+   public void setBounds(int x, int y, int width, int height) {}
+ 
+   public void setCursor(Cursor cursor) {}
+ 
+   public void setEnabled(boolean enabled) {}
+ 
+   public void setEventMask(long eventMask) {}
+ 
+   public void setFont(Font font) {}
+ 
+   public void setForeground(Color color) {}
+ 
+   public void setVisible(boolean visible) {}
+ 
+   public void show() {}
+ 
+   public ColorModel getColorModel ()
+   {
+     return comp.getColorModel ();
+   }
+ 
+   public boolean isObscured()
+   {
+     return false;
+   }
+ 
+   public boolean canDetermineObscurity()
+   {
+     return false;
+   }
+ 
+   public void coalescePaintEvent(PaintEvent e) { }
+ 
+   public void updateCursorImmediately() { }
+ 
+   public VolatileImage createVolatileImage(int width, int height) 
+   { 
+     return null; 
+   }
+ 
+   public boolean handlesWheelScrolling()
+   {
+     return false;
+   }
+ 
+   public void createBuffers(int x, BufferCapabilities capabilities) 
+     throws AWTException { }
+ 
+   public Image getBackBuffer()
+   {
+     return null;
+   }
+ 
+   public void flip(BufferCapabilities.FlipContents contents) { }
+ 
+   public void destroyBuffers() { }
+ 
+   public boolean isRestackSupported()
+   {
+     return false;
+   }
+ 
+   public void cancelPendingPaint(int x, int y, int width, int height)
+   {
+     
+   }
+ 
+   public void restack()
+   {
+     
+   }
+ 
+   public Rectangle getBounds()
+   {
+     return null;
+   }
+ 
+   public void reparent(ContainerPeer parent)
+   {
+     
+   }
+ 
+   public void setBounds(int x, int y, int z, int width, int height)
+   {
+     
+   }
+ 
+   public boolean isReparentSupported()
+   {
+     return false;
+   }
+ 
+   public void layout()
+   {
+     
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GThreadMutex.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GThreadMutex.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GThreadMutex.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GThreadMutex.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* GThreadMutex.java -- Implements a mutex object for glib's gthread
+    abstraction, for use with GNU Classpath's --portable-native-sync option.
+    This is used in gthread-jni.c
+    
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ /** Implements a mutex object for glib's gthread
+     abstraction, for use with GNU Classpath's --portable-native-sync option.
+     This is used in gthread-jni.c.
+ 
+     We use this object to implement the POSIX semantics for Mutexes.  They are
+     needed are needed for the function vector that is passed to glib's
+     g_thread subpackage's initialization function.
+ 
+     The GThreadMutex object itself serves as the Real Lock; if code has
+     entered the monitor for this GThreadMutex object (in Java language, if
+     it's synchronized on this object) then it holds the lock that this object
+     represents.
+ 
+     @author Steven Augart
+     May, 2004
+ 
+     
+ */
+    
+ class GThreadMutex 
+ {
+   /** Might "lock" be locked?  Is anyone waiting
+       to get that lock?  How long is the queue?
+ 
+       If zero, nobody holds a lock on this GThreadMutex object, and nobody is
+       trying to get one.   Before someone attempts to acquire a lock on this
+       object, they must increment potentialLockers.  After they release their
+       lock on this object, they must decrement potentialLockers.
+ 
+       Access to this field is guarded by synchronizing on the object
+       <code>lockForPotentialLockers</code>.
+ 
+       After construction, we only access this field via JNI.
+   */
+   volatile int potentialLockers;
+ 
+   /** An object to synchronize to if you want to examine or modify the
+       <code>potentialLockers</code> field.  Only hold this lock for brief
+       moments, just long enough to check or set the value of
+       <code>lockForPotentialLockers</code>.  
+       
+       We use this representation so that g_thread_mutex_trylock() will work
+       with the POSIX semantics.  This is the only case in which you ever hold a
+       lock on <code>lockForPotentialLockers</code> while trying to get another
+       lock -- if you are the mutex_trylock() implementation, and you have just
+       checked that <code>potentialLockers</code> has the value zero.  In that
+       case, mutex_trylock() holds the lock on lockForPotentialLockers so that
+       another thread calling mutex_trylock() or mutex_lock() won't increment
+       potentialLockers after we've checked it and before we've gained the lock
+       on the POSIX mutex.   Of course, in that case the operation of gaining
+       the POSIX lock itself will succeed immediately, and once it has
+       succeeded, trylock releases lockForPotentialLockers right away,
+       incremented to 1 (one).
+ 
+       After construction, we only access this field via JNI.
+   */     
+   Object lockForPotentialLockers;
+ 
+   GThreadMutex() 
+   {
+     potentialLockers = 0;
+     lockForPotentialLockers = new Object();
+   }
+ }
+ // Local Variables:
+ // c-file-style: "gnu"
+ // End:
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,303 ----
+ /* GThreadNativeMethodRunner.java -- Implements pthread_create(), under
+    glib's gthread abstraction, for use with GNU Classpath's
+    --portable-native-sync option. 
+    This is used by gthread-jni.c
+    
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.lang.ref.WeakReference;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Set;
+ 
+ /** Implements pthread_create(), under glib's gthread abstraction, for use
+     with GNU Classpath's --portable-native-sync option.  This is used in
+     gthread-jni.c
+ 
+     Also implements a registry for threads, mapping Thread objects to small
+     integers.  The registry uses weak references for threads that aren't
+     joinable, so that they will be garbage collected.
+ 
+     There are a number of possible alternative implementations.
+     
+     
+     The rest of this comment consists of an answer to a question that was
+     raised on the commit-classpath mailing list:
+ 
+     Mark Wielaard wrote:
+ 
+     > Can't we assume that jobject and gpointer are both (void *) so we don't
+     > need the int <-> Thread (global jobject ref) mapping?
+     > Maybe there are platforms where jobject and gpointer aren't the same,
+     > but I guess that is pretty unlikely.
+ 
+ 
+     I agree with you on the pointer size issues.  A gpointer is a void *, so
+     it's certainly guaranteed to be at least as large as any other
+     pointer. And a jobject is implicitly an opaque pointer (in Jikes RVM, we
+     use small integers, but we coerce them into the representation of a
+     pointer).
+ 
+     The int <==> Thread mapping addresses a different issue.  I realize that I
+     did not document this properly (two and a half lines in thread_create),
+     and the point is subtle (at least to me; took me a while to figure out).
+ 
+     The int => Thread mapping always returns jobjects that are local
+     references, not global ones.  This is because Thread objects need to be
+     able to go away and be garbage collected after the thread they refer to
+     has died.
+ 
+     If we keep a global object reference to a thread, then when do we delete
+     that global object reference?  We have an answer in the case of GThread
+     objects that were explicitly created with the joinable attribute.  It is
+     safe for us to maintain a global reference to any joinable thread, since
+     the joinable thread must linger (even if only in a zombie state)
+     until it's explicitly joined via a g_thread_join() call.  The global ref
+     could be cleaned up at that point too.
+ 
+     However, in the case of GThreads that were created non-joinable by
+     g_thread_create(), and in the case of Java threads that were created
+     within pure Java code (not via g_thread_create()), we don't want them to
+     linger forever, and there is no way to tell when the last reference
+     to such threads needs to expire.  In the case of this application -- AWT
+     with GTK peers -- it would probably be safe anyway, since there are not
+     very many threads we create, but I was going for correctness even in the
+     case of long-running programs that might set up and tear down AWT
+     interfaces many times.
+ 
+     So, I duplicated the POSIX thread-ID semantics.  The thread ID of a
+     non-joinable thread remains valid as long as that thread is still alive.
+     Once that thread dies, the old thread ID may be reused at any moment.  And
+     that's why the array indexed by thread ID numbers is an array of weak
+     references.
+ 
+     That's also why the int => Thread jobject mapping function always returns
+     local references, since global references would lock the Thread in memory
+     forever.
+ 
+     I would dearly love there to be a cleaner solution.  I dislike the
+     repeated dips from C code into Java that are necessary to look up thread
+     ID numbers.  If anyone can think of one, I'm all ears.
+ */
+ 
+ class GThreadNativeMethodRunner 
+   extends Thread 
+ {
+   /** The C function pointer that was passed to g_thread_create().
+       Specifically, this the numeric address of an object of 
+       C type "void *(*funcPtr)(void *funcArg)".   
+   */
+   private final long funcPtr;
+ 
+   /** The argument for the function "funcPtr(funcArg)". */
+   private final long funcArg;
+   
+   GThreadNativeMethodRunner(long funcPtr, long funcArg, boolean joinable) 
+   {
+     this.funcPtr = funcPtr;
+     this.funcArg = funcArg;
+ 
+     if (joinable)
+       registerSelfJoinable();
+   }
+ 
+   public void run() 
+   {
+     nativeRun(funcPtr, funcArg);
+   }
+ 
+   private native void nativeRun(long funcPtr, long funcArg);
+ 
+   /** THREADS is an array of threads, indexed by thread ID codes.  Not sure
+       whether this is the "best" approach but it does make it O(1) to look up a
+       thread by its ID. 
+ 
+       Zero is a valid thread ID code.  Any negative number is invalid.
+ 
+       Possible future fixes (TODO?)
+ 
+      - The THREADS array will only grow. probably not a problem.
+         But we could keep count when nulling entries and shrink when we have
+         lots of nulls at the end. Probably not worth it. --mjw
+ 
+      - Could make this a set of Object; see the comment on "joinable" below.
+ 
+      The initial size of 17 is just a starting point.  Any number will do,
+      including zero.
+   */ 
+   private static WeakReference[] threads = new WeakReference[17]; 
+ 
+   /**  Used by threadToThreadID, below.  Returns the registration number of
+        the newly-registered thread.  
+   */
+   private static synchronized int registerThread(Thread t) 
+   {
+     int i;
+ 
+     for (i = 0; i < threads.length; ++i) 
+       {
+ 	WeakReference ref = threads[i];
+ 	if (ref == null)
+ 	  break;                  // found an empty spot.
+       }
+ 
+     if (i == threads.length) 
+       {
+ 	/* expand the array */
+ 	WeakReference[] bigger = new WeakReference[threads.length * 2];
+         System.arraycopy(threads, 0, bigger, 0, threads.length);
+ 	threads = bigger;
+       }
+ 
+     threads[i] = new WeakReference(t);
+ 
+     return i;
+   }
+   
+   /**  Look up the Thread ID # for a Thread.  Assign a Thread ID # if none
+        exists.  This is a general routine for handling all threads, including
+        the VM's main thread, if appropriate.
+ 
+ 
+        Runs in O(n/2) time.
+ 
+        We can't just issue a threadID upon thread creation.  If we were to do
+        that, not all threads would have a threadID, because not all threads
+        are launched by GThreadNativeMethodRunner.
+   */ 
+   static synchronized int threadToThreadID(Thread t) 
+   {
+     for (int i = 0; i < threads.length; ++i ) 
+       {
+ 	if (threads[i] == null)
+ 	  continue;
+ 	Thread referent = (Thread) threads[i].get();
+ 	if (referent == null) 
+ 	  {
+ 	    threads[i] = null;      // Purge the dead WeakReference.
+ 	    continue;
+ 	  }
+ 	if (referent.equals(t))
+ 	  return i;
+       } // for()
+ 
+     /* No match found. */
+     return registerThread(t);
+   }
+ 
+   /** @param threadID Must be a non-negative integer.
+ 
+       Used to return null if the thread number was out of range or if
+       the thread was unregistered.   Now we throw an exception.
+ 
+       Possible Alternative Interface:  We could go back to returning null in
+            some sort of check-free mode, so code that calls this function must
+            be prepared to get null. 
+   */ 
+   static Thread threadIDToThread(int threadID) 
+     throws IllegalArgumentException
+   {
+     if (threadID < 0)
+       throw new IllegalArgumentException("Received a negative threadID, " 
+ 					 + threadID); 
+     if (threadID >= threads.length)
+       throw new IllegalArgumentException("Received a threadID (" + threadID 
+ 					 + ") higher than was" 
+ 					 + " ever issued"); 
+     
+     /* Note: if the user is using a stale reference, things will just
+        break.    We might end up getting a different thread than the one
+        expected. 
+        
+        TODO: Add an error-checking mode where the user's problems with threads
+           are announced.  For instance, if the user asks for the thread
+           associated with a threadID that was never issued, we could print a
+           warning or even abort.
+        
+        TODO: Consider optionally disabling all of the error-checking we
+           already have; it probably slows down the implementation.  We could
+           just return NULL.  This is just the reverse of the above TODO item.
+     */ 
+ 
+     WeakReference threadRef = threads[threadID];
+ 
+     if (threadRef == null)
+       throw new IllegalArgumentException("Asked to look up a stale or unissued"
+ 					 + "threadID (" + threadID + ")" );
+     
+       
+     Thread referent = (Thread) threadRef.get();
+     if (referent == null)
+       throw new IllegalArgumentException ("Asked to look up a stale threadID ("
+ 					  + threadID + ")");
+     return referent;
+   }
+   
+   /** Joinable threads need a hard reference, so that they won't go away when
+       they die.  That is because their thread IDs need to stay valid until the
+       thread is joined via thread_join(threadID).  Joinable threads have to be
+       explicitly joined before they are allowed to go away completely.
+ 
+       Possible Alternative Implementation: Eliminate the Joinable set.  When
+           calling getThreadIDFromThread() you know whether or not the thread
+           is joinable.  So just store the Thread itself in the threads array?
+           Make that array an Object array and check with instanceof.  This
+           looks cleaner and more robust to me and it saves a native -> Java
+           call. But instanceof might be expensive.  --mjw
+   */
+   private static final Set joinable = 
+        Collections.synchronizedSet(new HashSet()); 
+   
+   /** Only called from the constructor. */
+   private void registerSelfJoinable() 
+   {
+     joinable.add(this);
+   }
+   
+   /** This method is only called from JNI, and only after we have succeeded in
+       a thread_join() operation.  */
+   static void deRegisterJoinable(Thread thread) 
+   {
+     joinable.remove(thread);
+   }
+ }
+ 
+ // Local Variables:
+ // c-file-style: "gnu"
+ // End:
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,147 ----
+ /* GdkFontMetrics.java
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.java.awt.ClasspathToolkit;
+ 
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Toolkit;
+ 
+ public class GdkFontMetrics extends FontMetrics
+ {
+   
+   private int[] font_metrics;
+   GdkFontPeer peer;
+ 
+   static final int FONT_METRICS_ASCENT = 0;
+   static final int FONT_METRICS_MAX_ASCENT = 1;
+   static final int FONT_METRICS_DESCENT = 2;
+   static final int FONT_METRICS_MAX_DESCENT = 3;
+   static final int FONT_METRICS_MAX_ADVANCE = 4;
+ 
+   static final int TEXT_METRICS_X_BEARING = 0;
+   static final int TEXT_METRICS_Y_BEARING = 1;
+   static final int TEXT_METRICS_WIDTH = 2;
+   static final int TEXT_METRICS_HEIGHT = 3;
+   static final int TEXT_METRICS_X_ADVANCE = 4;
+   static final int TEXT_METRICS_Y_ADVANCE = 5;
+   
+   /**
+    * Makes sure to return a Font based on the given Font that has as
+    * peer a GdkFontPeer. Used in the initializer.
+    */
+   private static Font initFont(Font font)
+   {
+     if (font == null)
+       return new Font("Dialog", Font.PLAIN, 12);
+     else if (font.getPeer() instanceof GdkFontPeer)
+       return font;
+     else
+       {
+ 	ClasspathToolkit toolkit;
+ 	toolkit = (ClasspathToolkit) Toolkit.getDefaultToolkit();
+ 	return toolkit.getFont(font.getName(), font.getAttributes());
+       }
+   }
+     
+   public GdkFontMetrics (Font font)
+   {    
+     super(initFont(font));
+     peer = (GdkFontPeer) this.font.getPeer();
+ 
+     font_metrics = new int[5];
+     double [] hires = new double[5];
+     peer.getFontMetrics (hires);
+     for (int i = 0; i < 5; ++i)
+       font_metrics[i] = (int) hires[i];
+   }
+   
+   public int stringWidth (String str)
+   {
+     double [] hires = new double[6];
+     peer.getTextMetrics(str, hires);
+     return (int) hires [TEXT_METRICS_WIDTH];
+   }
+ 
+   public int charWidth (char ch)
+   {
+     return stringWidth (new String (new char[] { ch }));
+   }
+ 
+   public int charsWidth (char data[], int off, int len)
+   {
+     return stringWidth (new String (data, off, len));
+   }
+ 
+   /* 
+      Sun's Motif implementation always returns 0 or 1 here (???), but
+      going by the X11 man pages, it seems as though we should return
+      font.ascent + font.descent.
+   */
+   public int getLeading ()
+   {
+     return 1;
+   }
+ 
+   public int getAscent ()
+   {
+     return font_metrics[FONT_METRICS_ASCENT];
+   }
+ 
+   public int getMaxAscent ()
+   {
+     return font_metrics[FONT_METRICS_MAX_ASCENT];
+   }
+ 
+   public int getDescent ()
+   {
+     return font_metrics[FONT_METRICS_DESCENT];
+   }
+ 
+   public int getMaxDescent ()
+   {
+     return font_metrics[FONT_METRICS_MAX_DESCENT];
+   }
+ 
+   public int getMaxAdvance ()
+   {
+     return font_metrics[FONT_METRICS_MAX_ADVANCE];
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,307 ----
+ /* GdkFontPeer.java -- Implements FontPeer with GTK+
+    Copyright (C) 1999, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.classpath.Configuration;
+ import gnu.java.awt.peer.ClasspathFontPeer;
+ 
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.font.LineMetrics;
+ import java.awt.geom.Rectangle2D;
+ import java.text.CharacterIterator;
+ import java.text.StringCharacterIterator;
+ import java.util.Locale;
+ import java.util.Map;
+ import java.util.ResourceBundle;
+ 
+ public class GdkFontPeer extends ClasspathFontPeer
+ {
+   static native void initStaticState();
+   private final int native_state = GtkGenericPeer.getUniqueInteger ();
+   private static ResourceBundle bundle;
+   
+   static 
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary("gtkpeer");
+       }
+ 
+     initStaticState ();
+ 
+     try
+       {
+ 	bundle = ResourceBundle.getBundle ("gnu.java.awt.peer.gtk.font");
+       }
+     catch (Throwable ignored)
+       {
+ 	bundle = null;
+       }
+   }
+ 
+   private native void initState ();
+   private native void dispose ();
+   private native void setFont (String family, int style, int size, boolean useGraphics2D);
+ 
+   native void getFontMetrics(double [] metrics);
+   native void getTextMetrics(String str, double [] metrics);
+ 
+   protected void finalize ()
+   {
+     if (GtkToolkit.useGraphics2D ())
+       GdkGraphics2D.releasePeerGraphicsResource(this);
+     dispose ();
+   }
+ 
+   /* 
+    * Helpers for the 3-way overloading that this class seems to suffer
+    * from. Remove them if you feel like they're a performance bottleneck,
+    * for the time being I prefer my code not be written and debugged in
+    * triplicate.
+    */
+ 
+   private String buildString(CharacterIterator iter)
+   {
+     StringBuffer sb = new StringBuffer();
+     for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) 
+       sb.append(c);
+     return sb.toString();
+   }
+ 
+   private String buildString(CharacterIterator iter, int begin, int limit)
+   {
+     StringBuffer sb = new StringBuffer();
+     int i = 0;
+     for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next(), i++) 
+       {
+         if (begin <= i)
+           sb.append(c);
+         if (limit <= i)
+           break;
+       }
+     return sb.toString();
+   }
+   
+   private String buildString(char[] chars, int begin, int limit)
+   {
+     return new String(chars, begin, limit - begin);
+   }
+ 
+   /* Public API */
+ 
+   public GdkFontPeer (String name, int style)
+   {
+     // All fonts get a default size of 12 if size is not specified.
+     this(name, style, 12);
+   }
+ 
+   public GdkFontPeer (String name, int style, int size)
+   {  
+     super(name, style, size);    
+     initState ();
+     setFont (this.familyName, this.style, (int)this.size, 
+              GtkToolkit.useGraphics2D());
+   }
+ 
+   public GdkFontPeer (String name, Map attributes)
+   {
+     super(name, attributes);
+     initState ();
+     setFont (this.familyName, this.style, (int)this.size,
+              GtkToolkit.useGraphics2D());
+   }
+   
+   public String getSubFamilyName(Font font, Locale locale)
+   {
+     return null;
+   }
+ 
+   public String getPostScriptName(Font font)
+   {
+     return null;
+   }
+ 
+   public boolean canDisplay (Font font, char c)
+   {
+     // FIXME: inquire with pango
+     return true;
+   }
+ 
+   public int canDisplayUpTo (Font font, CharacterIterator i, int start, int limit)
+   {
+     // FIXME: inquire with pango
+     return -1;
+   }
+   
+   private native GdkGlyphVector getGlyphVector(String txt, 
+                                                Font f, 
+                                                FontRenderContext ctx);
+ 
+   public GlyphVector createGlyphVector (Font font, 
+                                         FontRenderContext ctx, 
+                                         CharacterIterator i)
+   {
+     return getGlyphVector(buildString (i), font, ctx);
+   }
+ 
+   public GlyphVector createGlyphVector (Font font, 
+                                         FontRenderContext ctx, 
+                                         int[] glyphCodes)
+   {
+     return null;
+     //    return new GdkGlyphVector (font, this, ctx, glyphCodes);
+   }
+ 
+   public byte getBaselineFor (Font font, char c)
+   {
+     throw new UnsupportedOperationException ();
+   }
+ 
+   protected class GdkFontLineMetrics extends LineMetrics
+   {
+     FontMetrics fm;
+     int nchars; 
+ 
+     public GdkFontLineMetrics (FontMetrics m, int n)
+     {
+       fm = m;
+       nchars = n;
+     }
+ 
+     public float getAscent()
+     {
+       return (float) fm.getAscent ();
+     }
+   
+     public int getBaselineIndex()
+     {
+       return Font.ROMAN_BASELINE;
+     }
+     
+     public float[] getBaselineOffsets()
+     {
+       return new float[3];
+     }
+     
+     public float getDescent()
+     {
+       return (float) fm.getDescent ();
+     }
+     
+     public float getHeight()
+     {
+       return (float) fm.getHeight ();
+     }
+     
+     public float getLeading() { return 0.f; }    
+     public int getNumChars() { return nchars; }
+     public float getStrikethroughOffset() { return 0.f; }    
+     public float getStrikethroughThickness() { return 0.f; }  
+     public float getUnderlineOffset() { return 0.f; }
+     public float getUnderlineThickness() { return 0.f; }
+ 
+   }
+ 
+   public LineMetrics getLineMetrics (Font font, CharacterIterator ci, 
+                                      int begin, int limit, FontRenderContext rc)
+   {
+     return new GdkFontLineMetrics (getFontMetrics (font), limit - begin);
+   }
+ 
+   public Rectangle2D getMaxCharBounds (Font font, FontRenderContext rc)
+   {
+     throw new UnsupportedOperationException ();
+   }
+ 
+   public int getMissingGlyphCode (Font font)
+   {
+     throw new UnsupportedOperationException ();
+   }
+ 
+   public String getGlyphName (Font font, int glyphIndex)
+   {
+     throw new UnsupportedOperationException ();
+   }
+ 
+   public int getNumGlyphs (Font font)
+   {
+     throw new UnsupportedOperationException ();
+   }
+ 
+   public Rectangle2D getStringBounds (Font font, CharacterIterator ci, 
+                                       int begin, int limit, FontRenderContext frc)
+   {
+     GdkGlyphVector gv = getGlyphVector(buildString (ci, begin, limit), font, frc);
+     return gv.getVisualBounds();
+   }
+ 
+   public boolean hasUniformLineMetrics (Font font)
+   {
+     return true;
+   }
+ 
+   public GlyphVector layoutGlyphVector (Font font, FontRenderContext frc, 
+                                         char[] chars, int start, int limit, 
+                                         int flags)
+   {
+     int nchars = (limit - start) + 1;
+     char[] nc = new char[nchars];
+ 
+     for (int i = 0; i < nchars; ++i)
+       nc[i] = chars[start + i];
+ 
+     return createGlyphVector (font, frc, 
+                               new StringCharacterIterator (new String (nc)));
+   }
+ 
+   public LineMetrics getLineMetrics (Font font, String str, 
+                                      FontRenderContext frc)
+   {
+     return new GdkFontLineMetrics (getFontMetrics (font), str.length ());
+   }
+ 
+   public FontMetrics getFontMetrics (Font font)
+   {
+     return new GdkFontMetrics (font);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGlyphVector.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGlyphVector.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGlyphVector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGlyphVector.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,359 ----
+ /* GdkGlyphVector.java -- Glyph vector object
+    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Font;
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphJustificationInfo;
+ import java.awt.font.GlyphMetrics;
+ import java.awt.font.GlyphVector;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ 
+ public class GdkGlyphVector extends GlyphVector
+ {
+ 
+   /* We use a simple representation for glyph vectors here. Glyph i
+    * consumes 8 doubles:
+    *
+    *      logical x: extents[ 10*i     ]
+    *      logical y: extents[ 10*i + 1 ]
+    *  logical width: extents[ 10*i + 2 ]
+    * logical height: extents[ 10*i + 3 ]
+    *
+    *       visual x: extents[ 10*i + 4 ]
+    *       visual y: extents[ 10*i + 5 ]
+    *   visual width: extents[ 10*i + 6 ]
+    *  visual height: extents[ 10*i + 7 ]
+    *
+    *   origin pos x: extents[ 10*i + 8 ]
+    *   origin pos y: extents[ 10*i + 9 ]
+    * 
+    * as well as one int, code[i], representing the glyph code in the font.
+    */
+ 
+   double [] extents;
+   int [] codes;
+ 
+   Font font;
+   FontRenderContext fontRenderContext;
+ 
+   Rectangle2D allLogical;
+   Rectangle2D allVisual;
+ 
+   public GdkGlyphVector(double[] extents, int[] codes, Font font, FontRenderContext frc)
+   {
+     this.extents = extents;
+     this.codes = codes;
+     this.font = font;
+     this.fontRenderContext = frc;
+ 
+     allLogical = new Rectangle2D.Double();
+     allVisual = new Rectangle2D.Double();
+     
+     for (int i = 0; i < codes.length; ++i)
+       {
+         allLogical.add (new Rectangle2D.Double(extents[10*i    ] + extents[10*i + 8],
+                                                extents[10*i + 1] + extents[10*i + 9],
+                                                extents[10*i + 2],
+                                                extents[10*i + 3]));
+ 
+         allVisual.add (new Rectangle2D.Double(extents[10*i + 4] + extents[10*i + 8],
+                                               extents[10*i + 5] + extents[10*i + 9],
+                                               extents[10*i + 6],
+                                               extents[10*i + 7]));
+       }
+   }
+ 
+   /* 
+      geometric notes:
+ 
+      the FRC contains a mapping from points -> pixels.
+ 
+      typographics points are typically 1/72 of an inch.
+ 
+      pixel displays are often around 72 dpi.
+ 
+      so the FRC can get away with using an identity transform on a screen,
+      often. behavior is documented by sun to fall back to an identity
+      transform if the internal transformation is null.
+ 
+      coordinates coming up from pango are expressed as floats -- in device
+      space, so basically pixels-with-fractional-bits -- derived from their
+      storage format in pango (1024ths of pixels). 
+ 
+      it is not clear from the javadocs whether the results of methods like
+      getGlyphPositions ought to return coordinates in device space, or
+      "point" space, or what. for now I'm returning them in device space.
+      
+    */
+ 
+   public double[] getExtents() 
+   {
+     return extents;
+   }
+ 
+   public int[] getCodes()
+   {
+     return codes;
+   }
+ 
+   public Font getFont () 
+   { 
+     return font; 
+   }
+ 
+   public FontRenderContext getFontRenderContext () 
+   { 
+     return fontRenderContext; 
+   }
+ 
+   public int getGlyphCharIndex (int glyphIndex) 
+   { 
+     // FIXME: currently pango does not provide glyph-by-glyph
+     // reverse mapping information, so we assume a broken 1:1
+     // glyph model here. This is plainly wrong.
+     return glyphIndex;
+   }
+ 
+   public int[] getGlyphCharIndices (int beginGlyphIndex, 
+                                     int numEntries,
+                                     int[] codeReturn)
+   {
+     int ix[] = codeReturn;
+     if (ix == null)
+       ix = new int[numEntries];
+ 
+     for (int i = 0; i < numEntries; i++)
+       ix[i] = getGlyphCharIndex (beginGlyphIndex + i);
+     return ix;
+   }
+ 
+   public int getGlyphCode (int glyphIndex) 
+   { 
+     return codes[glyphIndex];
+   }
+ 
+   public int[] getGlyphCodes (int beginGlyphIndex, int numEntries,
+                               int[] codeReturn)
+   {
+     if (codeReturn == null)
+       codeReturn = new int[numEntries];
+ 
+     System.arraycopy(codes, beginGlyphIndex, codeReturn, 0, numEntries);
+     return codeReturn;
+   }
+ 
+   public Shape getGlyphLogicalBounds (int i)
+   {
+     return new Rectangle2D.Double (extents[8*i], extents[8*i + 1],
+                                    extents[8*i + 2], extents[8*i + 3]);
+   }
+     
+   public GlyphMetrics getGlyphMetrics (int i)
+   {
+     // FIXME: pango does not yield vertical layout information at the
+     // moment.
+ 
+     boolean is_horizontal = true;
+     double advanceX = extents[8*i + 2]; // "logical width" == advanceX 
+     double advanceY = 0; 
+    
+     return new GlyphMetrics (is_horizontal, 
+                              (float) advanceX, (float) advanceY, 
+                              (Rectangle2D) getGlyphVisualBounds(i), 
+                              GlyphMetrics.STANDARD);
+   }
+ 
+   public Shape getGlyphOutline (int glyphIndex)
+   {
+     throw new UnsupportedOperationException ();      
+   }
+ 
+   public Shape getGlyphOutline (int glyphIndex, float x, float y)
+   {
+     throw new UnsupportedOperationException ();
+   }
+ 
+   public Rectangle getGlyphPixelBounds (int i, 
+                                         FontRenderContext renderFRC,
+                                         float x, float y)
+   {
+     return new Rectangle((int) x, (int) y,
+                          (int) extents[8*i + 6], (int) extents[8*i + 7]);
+   }
+     
+   public Point2D getGlyphPosition (int i)
+   {
+     return new Point2D.Double (extents[10*i + 8], 
+                                extents[10*i + 9]);
+   }
+ 
+   public float[] getGlyphPositions (int beginGlyphIndex,
+                                     int numEntries,
+                                     float[] positionReturn)
+   {
+     float fx[] = positionReturn;
+     if (fx == null)
+       fx = new float[numEntries * 2];
+ 
+     for (int i = 0; i < numEntries; ++i)
+       {
+         fx[2*i    ] = (float) extents[10*i + 8];
+         fx[2*i + 1] = (float) extents[10*i + 9];
+       }
+     return fx;
+   }
+ 
+   public AffineTransform getGlyphTransform (int glyphIndex)
+   {
+     // Glyphs don't have independent transforms in these simple glyph
+     // vectors; docs specify null is an ok return here.
+     return null;  
+   }
+     
+   public Shape getGlyphVisualBounds (int i)
+   {
+     return new Rectangle2D.Double(extents[8*i + 4], extents[8*i + 5],
+                                   extents[8*i + 6], extents[8*i + 7]);
+   }
+     
+   public int getLayoutFlags ()
+   {
+     return 0;
+   }
+ 
+   public Rectangle2D getLogicalBounds ()
+   {
+     return allLogical;
+   }
+ 
+   public int getNumGlyphs ()
+   {
+     return codes.length;
+   }
+ 
+   public Shape getOutline ()
+   {
+     throw new UnsupportedOperationException ();      
+   }
+ 
+   public Rectangle getPixelBounds (FontRenderContext renderFRC,
+                                    float x, float y)
+   {
+     return new Rectangle((int)x, 
+                          (int)y, 
+                          (int) allVisual.getWidth(),
+                          (int) allVisual.getHeight());
+   }
+     
+   public Rectangle2D getVisualBounds ()
+   {
+     return allVisual;
+   }
+ 
+   public void performDefaultLayout ()
+   {
+   }
+     
+   public void setGlyphPosition (int i, Point2D newPos)
+   {
+     extents[8*i    ] = newPos.getX();
+     extents[8*i + 1] = newPos.getY();
+ 
+     extents[8*i + 4] = newPos.getX();
+     extents[8*i + 5] = newPos.getY();
+   }
+ 
+   public void setGlyphTransform (int glyphIndex,
+                                  AffineTransform newTX)
+   {
+     // not yet.. maybe not ever?
+     throw new UnsupportedOperationException ();      
+   }
+ 
+   public boolean equals(GlyphVector gv)
+   {
+     if (gv == null)
+       return false;
+ 
+     if (! (gv instanceof GdkGlyphVector))
+       return false;
+ 
+     GdkGlyphVector ggv = (GdkGlyphVector) gv;
+ 
+     if ((ggv.codes.length != this.codes.length)
+         || (ggv.extents.length != this.extents.length))
+       return false;
+     
+     if ((ggv.font == null && this.font != null)
+         || (ggv.font != null && this.font == null)
+         || (!ggv.font.equals(this.font)))
+       return false;
+ 
+     if ((ggv.fontRenderContext == null && this.fontRenderContext != null)
+         || (ggv.fontRenderContext != null && this.fontRenderContext == null)
+         || (!ggv.fontRenderContext.equals(this.fontRenderContext)))
+       return false;
+ 
+     for (int i = 0; i < ggv.codes.length; ++i)
+       if (ggv.codes[i] != this.codes[i])
+         return false;
+ 
+     for (int i = 0; i < ggv.extents.length; ++i)
+       if (ggv.extents[i] != this.extents[i])
+         return false;
+ 
+     return true;
+   }
+ 
+   public GlyphJustificationInfo getGlyphJustificationInfo(int idx)
+   {
+     throw new UnsupportedOperationException ();      
+   }
+ 
+   public Shape getOutline(float x, float y)    
+   {
+     throw new UnsupportedOperationException ();      
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,422 ----
+ /* GdkGraphics.java
+    Copyright (C) 1998, 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.classpath.Configuration;
+ 
+ import java.awt.Color;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Image;
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ import java.awt.SystemColor;
+ import java.awt.image.ImageObserver;
+ import java.text.AttributedCharacterIterator;
+ 
+ public class GdkGraphics extends Graphics
+ {
+   static 
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary("gtkpeer");
+       }
+     initStaticState ();
+   }
+   
+   static native void initStaticState();
+   private final int native_state = GtkGenericPeer.getUniqueInteger ();
+ 
+   Color color, xorColor;
+   GtkComponentPeer component;
+   Font font = new Font ("Dialog", Font.PLAIN, 12);
+   Rectangle clip;
+   GtkImage image; 
+ 
+   int xOffset = 0;
+   int yOffset = 0;
+ 
+   static final int GDK_COPY = 0, GDK_XOR = 2;
+ 
+   native void initState (GtkComponentPeer component);
+   native void initStateUnlocked (GtkComponentPeer component);
+   native void initState (int width, int height);
+   native void initFromImage (GtkImage image);
+   native void copyState (GdkGraphics g);
+ 
+   GdkGraphics (GdkGraphics g)
+   {
+     color = g.color;
+     xorColor = g.xorColor;
+     font = g.font;
+     if (font == null)
+       font = new Font ("Dialog", Font.PLAIN, 12);
+     clip = new Rectangle (g.clip);
+     component = g.component;
+ 
+     copyState (g);
+   }
+ 
+   GdkGraphics (int width, int height)
+   {
+     initState (width, height);
+     color = Color.black;
+     clip = new Rectangle (0, 0, width, height);
+     font = new Font ("Dialog", Font.PLAIN, 12);
+   }
+ 
+   GdkGraphics (GtkImage image)
+   {
+     this.image = image;
+     initFromImage (image);
+     color = Color.black;
+     clip = new Rectangle (0, 0, 
+ 			  image.getWidth(null), image.getHeight(null));
+     font = new Font ("Dialog", Font.PLAIN, 12);
+   }
+ 
+   GdkGraphics (GtkComponentPeer component)
+   {
+     this.component = component;
+     color = Color.black;
+ 
+     if (component.isRealized ())
+       initComponentGraphics ();
+     else
+       connectSignals (component);
+   }
+ 
+   void initComponentGraphics ()
+   {
+     initState (component);
+     color = component.awtComponent.getForeground ();
+     if (color == null)
+       color = Color.BLACK;
+     Dimension d = component.awtComponent.getSize ();
+     clip = new Rectangle (0, 0, d.width, d.height);
+   }
+ 
+   // called back by native side: realize_cb
+   void initComponentGraphicsUnlocked ()
+   {
+     initStateUnlocked (component);
+     color = component.awtComponent.getForeground ();
+     if (color == null)
+       color = Color.BLACK;
+     Dimension d = component.awtComponent.getSize ();
+     clip = new Rectangle (0, 0, d.width, d.height);
+   }
+ 
+   native void connectSignals (GtkComponentPeer component);
+ 
+   public native void clearRect(int x, int y, int width, int height);
+ 
+   public void clipRect (int x, int y, int width, int height)
+   {
+     if (component != null && ! component.isRealized ())
+       return;
+ 
+     clip = clip.intersection (new Rectangle (x, y, width, height));
+     setClipRectangle (clip.x, clip.y, clip.width, clip.height);
+   }
+ 
+   public native void copyArea(int x, int y, int width, int height, 
+ 			      int dx, int dy);
+ 
+   public Graphics create ()
+   {
+     return new GdkGraphics (this);
+   }
+ 
+   public native void dispose();
+ 
+   public boolean drawImage (Image img, int x, int y, 
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     return drawImage(img, x, y, img.getWidth(null), img.getHeight(null),
+ 		     bgcolor, observer);
+   }
+ 
+   public boolean drawImage (Image img, int x, int y, ImageObserver observer)
+   {
+     return drawImage (img, x, y, null, observer);
+   }
+ 
+   public boolean drawImage (Image img, int x, int y, int width, int height, 
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     if (img instanceof GtkImage)
+       return ((GtkImage)img).drawImage (this, x, y, width, height, 
+ 					bgcolor, observer);
+     else
+       return (new GtkImage(img.getSource())).drawImage (this, x, y, 
+ 							width, height, 
+ 							bgcolor, observer);
+   }
+ 
+   public boolean drawImage (Image img, int x, int y, int width, int height, 
+ 			    ImageObserver observer)
+   {
+     return drawImage (img, x, y, width, height,  null, observer);
+   }
+ 
+   public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2, 
+ 			    int sx1, int sy1, int sx2, int sy2, 
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     if (img instanceof GtkImage)
+       return ((GtkImage)img).drawImage(this, dx1, dy1, dx2, dy2, 
+ 				       sx1, sy1, sx2, sy2, bgcolor, observer);
+     else
+       return (new GtkImage(img.getSource())).drawImage(this, dx1, dy1, 
+ 						       dx2, dy2, 
+ 						       sx1, sy1, sx2, sy2, 
+ 						       bgcolor, observer);
+   }
+ 
+   public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2, 
+ 			    int sx1, int sy1, int sx2, int sy2, 
+ 			    ImageObserver observer) 
+   {
+     return drawImage (img, dx1, dy1, dx2, dy2, 
+ 		      sx1, sy1, sx2, sy2, 
+ 		      null, observer);
+   }
+ 
+   public native void drawLine(int x1, int y1, int x2, int y2);
+ 
+   public native void drawArc(int x, int y, int width, int height,
+ 			     int startAngle, int arcAngle);
+   public native void fillArc(int x, int y, int width, int height, 
+ 			     int startAngle, int arcAngle);
+   public native void drawOval(int x, int y, int width, int height);
+   public native void fillOval(int x, int y, int width, int height);
+ 
+   public native void drawPolygon(int[] xPoints, int[] yPoints, int nPoints);
+   public native void fillPolygon(int[] xPoints, int[] yPoints, int nPoints);
+ 
+   public native void drawPolyline(int[] xPoints, int[] yPoints, int nPoints);
+ 
+   public native void drawRect(int x, int y, int width, int height);
+   public native void fillRect(int x, int y, int width, int height);
+ 
+   GdkFontPeer getFontPeer() 
+   {
+     return (GdkFontPeer) getFont().getPeer(); 
+   }
+ 
+   native void drawString (GdkFontPeer f, String str, int x, int y);
+   public void drawString (String str, int x, int y)
+   {
+     drawString(getFontPeer(), str, x, y);
+   }
+   
+ 
+   public void drawString (AttributedCharacterIterator ci, int x, int y)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public void drawRoundRect(int x, int y, int width, int height, 
+ 			    int arcWidth, int arcHeight)
+   {
+     if (arcWidth > width)
+       arcWidth = width;
+     if (arcHeight > height)
+       arcHeight = height;
+ 
+     int xx = x + width - arcWidth;
+     int yy = y + height - arcHeight;
+ 
+     drawArc (x, y, arcWidth, arcHeight, 90, 90);
+     drawArc (xx, y, arcWidth, arcHeight, 0, 90);
+     drawArc (xx, yy, arcWidth, arcHeight, 270, 90);
+     drawArc (x, yy, arcWidth, arcHeight, 180, 90);
+ 
+     int y1 = y + arcHeight / 2;
+     int y2 = y + height - arcHeight / 2;
+     drawLine (x, y1, x, y2);
+     drawLine (x + width, y1, x + width, y2);
+ 
+     int x1 = x + arcWidth / 2;
+     int x2 = x + width - arcWidth / 2;
+     drawLine (x1, y, x2, y);
+     drawLine (x1, y + height, x2, y + height);
+   }
+ 
+   public void fillRoundRect (int x, int y, int width, int height, 
+ 			     int arcWidth, int arcHeight)
+   {
+     if (arcWidth > width)
+       arcWidth = width;
+     if (arcHeight > height)
+       arcHeight = height;
+ 
+     int xx = x + width - arcWidth;
+     int yy = y + height - arcHeight;
+ 
+     fillArc (x, y, arcWidth, arcHeight, 90, 90);
+     fillArc (xx, y, arcWidth, arcHeight, 0, 90);
+     fillArc (xx, yy, arcWidth, arcHeight, 270, 90);
+     fillArc (x, yy, arcWidth, arcHeight, 180, 90);
+ 
+     fillRect (x, y + arcHeight / 2, width, height - arcHeight + 1);
+     fillRect (x + arcWidth / 2, y, width - arcWidth + 1, height);
+   }
+ 
+   public Shape getClip ()
+   {
+     return getClipBounds ();
+   }
+ 
+   public Rectangle getClipBounds ()
+   {
+     if (clip == null)
+       return null;
+     else
+       return clip.getBounds();
+   }
+ 
+   public Color getColor ()
+   {
+     return color;
+   }
+ 
+   public Font getFont ()
+   {
+     return font;
+   }
+ 
+   public FontMetrics getFontMetrics (Font font)
+   {
+     return new GdkFontMetrics (font);
+   }
+ 
+   native void setClipRectangle (int x, int y, int width, int height);
+ 
+   public void setClip (int x, int y, int width, int height)
+   {
+     if ((component != null && ! component.isRealized ())
+         || clip == null)
+       return;
+ 
+     clip.x = x;
+     clip.y = y;
+     clip.width = width;
+     clip.height = height;
+     
+     setClipRectangle (x, y, width, height);
+   }
+ 
+   public void setClip (Rectangle clip)
+   {
+     setClip (clip.x, clip.y, clip.width, clip.height);
+   }
+ 
+   public void setClip (Shape clip)
+   {
+     if (clip == null)
+       {
+ 	// Reset clipping.
+ 	Dimension d = component.awtComponent.getSize();
+ 	setClip(new Rectangle (0, 0, d.width, d.height));
+       }
+     else
+       setClip(clip.getBounds());
+   }
+ 
+   private native void setFGColor(int red, int green, int blue);
+ 
+   public void setColor (Color c)
+   {
+     if (c == null)
+       color = Color.BLACK;
+     else
+       color = c;
+ 
+     if (xorColor == null) /* paint mode */
+       setFGColor (color.getRed (), color.getGreen (), color.getBlue ());
+     else		  /* xor mode */
+       setFGColor (color.getRed   () ^ xorColor.getRed (),
+ 		  color.getGreen () ^ xorColor.getGreen (),
+ 		  color.getBlue  () ^ xorColor.getBlue ());
+   }
+   
+   public void setFont (Font font)
+   {
+     if (font != null)
+       this.font = font;
+   }
+ 
+   native void setFunction (int gdk_func);
+ 
+   public void setPaintMode ()
+   {
+     xorColor = null;
+ 
+     setFunction (GDK_COPY);
+     setFGColor (color.getRed (), color.getGreen (), color.getBlue ());
+   }
+ 
+   public void setXORMode (Color c)
+   {
+     xorColor = c;
+ 
+     setFunction (GDK_XOR);
+     setFGColor (color.getRed   () ^ xorColor.getRed (),
+ 		color.getGreen () ^ xorColor.getGreen (),
+ 		color.getBlue  () ^ xorColor.getBlue ());
+   }
+ 
+   public native void translateNative(int x, int y);
+ 
+   public void translate (int x, int y)
+   {
+     if (component != null && ! component.isRealized ())
+       return;
+ 
+     clip.x -= x;
+     clip.y -= y;
+ 
+     translateNative (x, y);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1664 ----
+ /* GdkGraphics2D.java --
+    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.classpath.Configuration;
+ import gnu.java.awt.ClasspathToolkit;
+ 
+ import java.awt.AlphaComposite;
+ import java.awt.BasicStroke;
+ import java.awt.Color;
+ import java.awt.Composite;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.GradientPaint;
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.Image;
+ import java.awt.Paint;
+ import java.awt.Rectangle;
+ import java.awt.RenderingHints;
+ import java.awt.Shape;
+ import java.awt.Stroke;
+ import java.awt.TexturePaint;
+ import java.awt.Toolkit;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Arc2D;
+ import java.awt.geom.GeneralPath;
+ import java.awt.geom.NoninvertibleTransformException;
+ import java.awt.geom.PathIterator;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.image.AffineTransformOp;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.BufferedImageOp;
+ import java.awt.image.ColorModel;
+ import java.awt.image.CropImageFilter;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.DataBufferInt;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.FilteredImageSource;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImagingOpException;
+ import java.awt.image.MultiPixelPackedSampleModel;
+ import java.awt.image.Raster;
+ import java.awt.image.RenderedImage;
+ import java.awt.image.SampleModel;
+ import java.awt.image.WritableRaster;
+ import java.awt.image.renderable.RenderContext;
+ import java.awt.image.renderable.RenderableImage;
+ import java.text.AttributedCharacterIterator;
+ import java.util.HashMap;
+ import java.util.Map;
+ import java.util.Stack;
+ 
+ public class GdkGraphics2D extends Graphics2D
+ {
+   //////////////////////////////////////
+   ////// State Management Methods //////
+   //////////////////////////////////////
+ 
+   static 
+   {
+     if (! Configuration.GTK_CAIRO_ENABLED)
+       throw new Error("Graphics2D not implemented. "
+ 		      + "Cairo was not found or disabled at configure time");
+ 
+     if (Configuration.INIT_LOAD_LIBRARY)
+       System.loadLibrary("gtkpeer");
+ 
+     initStaticState();
+   }
+   
+   static native void initStaticState();
+   
+   private final int native_state = GtkGenericPeer.getUniqueInteger();  
+ 
+   // These are package-private to avoid accessor methods.
+   Paint paint;
+   Stroke stroke;
+   Color fg;
+   Color bg;
+   Shape clip;
+   AffineTransform transform;
+   private GtkComponentPeer component;
+   // This is package-private to avoid an accessor method.
+   Font font;
+   private RenderingHints hints;
+   private BufferedImage bimage;
+   private boolean pixelConversionRequired;
+   private int[] pixelBuffer;
+   // This is package-private to avoid an accessor method.
+   Composite comp;
+   private Stack stateStack;
+ 
+   private native void initStateUnlocked(GtkComponentPeer component);
+   private native void initState(GtkComponentPeer component);
+   private native void initState(int width, int height);
+   private native void initState(int[] pixes, int width, int height);
+   private native void copyState(GdkGraphics2D g);
+   public native void dispose();
+   private native void cairoSurfaceSetFilter(int filter);
+   private native void cairoSurfaceSetFilterUnlocked(int filter);
+   native void connectSignals(GtkComponentPeer component);
+ 
+   public void finalize()
+   {
+     dispose();
+   }
+ 
+   public Graphics create()
+   {
+     return new GdkGraphics2D(this);
+   }
+ 
+   public Graphics create(int x, int y, int width, int height)
+   {
+     return new GdkGraphics2D(this, x, y, width, height);
+   }
+ 
+   private void fail_g2d ()
+   {
+     System.err.println ("Attempted to instantiate GdkGraphics2D"
+ 			+ " but Graphics2D not enabled.  Try again with"
+ 			+ " -Dgnu.java.awt.peer.gtk.Graphics=Graphics2D");
+     System.exit (1);
+   }
+ 
+   GdkGraphics2D(GdkGraphics2D g)
+   {
+     if (!GtkToolkit.useGraphics2D ())
+       fail_g2d ();
+ 
+     paint = g.paint;
+     stroke = g.stroke;
+     setRenderingHints(g.hints);
+ 
+     if (g.fg.getAlpha() != -1)
+       fg = new Color(g.fg.getRed(), g.fg.getGreen(), g.fg.getBlue(),
+                      g.fg.getAlpha());
+     else
+       fg = new Color(g.fg.getRGB());
+ 
+     if (g.bg.getAlpha() != -1)
+       bg = new Color(g.bg.getRed(), g.bg.getGreen(), g.bg.getBlue(),
+                      g.bg.getAlpha());
+     else
+       bg = new Color(g.bg.getRGB());
+ 
+     if (g.clip == null)
+       clip = null;
+     else
+       clip = new Rectangle(g.getClipBounds());
+ 
+     if (g.transform == null)
+       transform = new AffineTransform();
+     else
+       transform = new AffineTransform(g.transform);
+ 
+     font = g.font;
+     component = g.component;
+     copyState(g);
+ 
+     setColor(fg);
+     setBackground(bg);
+     setPaint(paint);
+     setStroke(stroke);
+     setTransform(transform);
+     setClip(clip);
+     stateStack = new Stack();
+   }
+ 
+   GdkGraphics2D(GdkGraphics2D g, int x, int y, int widht, int height)
+   {
+     this(g);
+     translate(x, y);
+     clipRect(0, 0, widht, height);
+   }
+ 
+   GdkGraphics2D(int width, int height)
+   {
+     if (!GtkToolkit.useGraphics2D ())
+       fail_g2d ();
+ 
+     initState(width, height);
+ 
+     setColor(Color.black);
+     setBackground(new Color(0, 0, 0, 0));
+     setPaint(getColor());
+     setFont(new Font("SansSerif", Font.PLAIN, 12));
+     setTransform(new AffineTransform());
+     setStroke(new BasicStroke());
+     setRenderingHints(getDefaultHints());
+ 
+     stateStack = new Stack();
+   }
+ 
+   GdkGraphics2D(GtkComponentPeer component)
+   {
+     if (!GtkToolkit.useGraphics2D ())
+       fail_g2d ();
+ 
+     this.component = component;
+     
+     if (component.isRealized())
+       initComponentGraphics2D();
+     else
+       connectSignals(component);
+   }
+ 
+   void initComponentGraphics2D()
+   {
+     initState(component);
+ 
+     setColor(component.awtComponent.getForeground());
+     setBackground(component.awtComponent.getBackground());
+     setPaint(getColor());
+     setTransform(new AffineTransform());
+     setStroke(new BasicStroke());
+     setRenderingHints(getDefaultHints());
+     setFont(new Font("SansSerif", Font.PLAIN, 12));
+ 
+     stateStack = new Stack();
+   }
+ 
+   void initComponentGraphics2DUnlocked()
+   {
+     initStateUnlocked(component);
+ 
+     setColorUnlocked(component.awtComponent.getForeground());
+     setBackgroundUnlocked(component.awtComponent.getBackground());
+     setPaintUnlocked(getColorUnlocked());
+     setTransformUnlocked(new AffineTransform());
+     setStrokeUnlocked(new BasicStroke());
+     setRenderingHintsUnlocked(getDefaultHints());
+     setFontUnlocked(new Font("SansSerif", Font.PLAIN, 12));
+ 
+     stateStack = new Stack();
+   }
+ 
+   GdkGraphics2D(BufferedImage bimage)
+   {
+     this.bimage = bimage;
+     this.pixelBuffer = findSimpleIntegerArray(bimage.getColorModel(),
+                                               bimage.getRaster());
+     if (this.pixelBuffer == null)
+       {
+ 	this.pixelBuffer = new int[bimage.getRaster().getWidth() * bimage.getRaster()
+ 	                                                                 .getHeight()];
+ 	this.pixelConversionRequired = true;
+       }
+     else
+       {
+         this.pixelConversionRequired = false;
+       }
+ 
+     initState(this.pixelBuffer, bimage.getWidth(), bimage.getHeight());
+ 
+     setColor(Color.black);
+     setBackground(new Color(0, 0, 0, 0));
+     setPaint(getColor());
+     setFont(new Font("SansSerif", Font.PLAIN, 12));
+     setTransform(new AffineTransform());
+     setStroke(new BasicStroke());
+     setRenderingHints(getDefaultHints());
+ 
+     stateStack = new Stack();
+ 
+     // draw current buffered image to the pixmap associated 
+     // with it, if the image is not equal to our paint buffer.
+     if (pixelConversionRequired)
+       drawImage(bimage, new AffineTransform(1, 0, 0, 1, 0, 0), bg, null);
+   }
+ 
+   ////////////////////////////////////
+   ////// Native Drawing Methods //////
+   ////////////////////////////////////
+ 
+   // GDK drawing methods
+   private native void gdkDrawDrawable(GdkGraphics2D other, int x, int y);
+ 
+   // drawing utility methods
+   private native void drawPixels(int[] pixels, int w, int h, int stride,
+                                  double[] i2u);
+   private native void setTexturePixelsUnlocked(int[] pixels, int w, int h, int stride);
+   private native void setTexturePixels(int[] pixels, int w, int h, int stride);
+   private native void setGradient(double x1, double y1, double x2, double y2,
+                                   int r1, int g1, int b1, int a1, int r2,
+                                   int g2, int b2, int a2, boolean cyclic);
+   private native void setGradientUnlocked(double x1, double y1, double x2, double y2,
+                                   int r1, int g1, int b1, int a1, int r2,
+                                   int g2, int b2, int a2, boolean cyclic);
+ 
+   // simple passthroughs to cairo
+   private native void cairoSave();
+   private native void cairoRestore();
+   private native void cairoSetMatrix(double[] m);
+   private native void cairoSetMatrixUnlocked(double[] m);
+   private native void cairoSetOperator(int cairoOperator);
+   private native void cairoSetRGBAColor(double red, double green,
+                                         double blue, double alpha);
+   private native void cairoSetRGBAColorUnlocked(double red, double green,
+                                         double blue, double alpha);
+   private native void cairoSetFillRule(int cairoFillRule);
+   private native void cairoSetLineWidth(double width);
+   private native void cairoSetLineWidthUnlocked(double width);
+   private native void cairoSetLineCap(int cairoLineCap);
+   private native void cairoSetLineCapUnlocked(int cairoLineCap);
+   private native void cairoSetLineJoin(int cairoLineJoin);
+   private native void cairoSetLineJoinUnlocked(int cairoLineJoin);
+   private native void cairoSetDash(double[] dashes, int ndash, double offset);
+   private native void cairoSetDashUnlocked(double[] dashes, int ndash, double offset);
+ 
+   private native void cairoSetMiterLimit(double limit);
+   private native void cairoSetMiterLimitUnlocked(double limit);
+   private native void cairoNewPath();
+   private native void cairoMoveTo(double x, double y);
+   private native void cairoLineTo(double x, double y);
+   private native void cairoCurveTo(double x1, double y1, double x2, double y2,
+                                    double x3, double y3);
+   private native void cairoRelMoveTo(double dx, double dy);
+   private native void cairoRelLineTo(double dx, double dy);
+   private native void cairoRelCurveTo(double dx1, double dy1, double dx2,
+                                       double dy2, double dx3, double dy3);
+   private native void cairoRectangle(double x, double y, double width,
+                                      double height);
+   private native void cairoClosePath();
+   private native void cairoStroke();
+   private native void cairoFill();
+   private native void cairoClip();
+ 
+   /////////////////////////////////////////////
+   ////// General Drawing Support Methods //////
+   /////////////////////////////////////////////
+ 
+   private class DrawState
+   {
+     private Paint paint;
+     private Stroke stroke;
+     private Color fg;
+     private Color bg;
+     private Shape clip;
+     private AffineTransform transform;
+     private Font font;
+     private Composite comp;
+ 
+     DrawState(GdkGraphics2D g)
+     {
+       this.paint = g.paint;
+       this.stroke = g.stroke;
+       this.fg = g.fg;
+       this.bg = g.bg;
+       this.clip = g.clip;
+       if (g.transform != null)
+ 	this.transform = (AffineTransform) g.transform.clone();
+       this.font = g.font;
+       this.comp = g.comp;
+     }
+ 
+     public void restore(GdkGraphics2D g)
+     {
+       g.paint = this.paint;
+       g.stroke = this.stroke;
+       g.fg = this.fg;
+       g.bg = this.bg;
+       g.clip = this.clip;
+       g.transform = this.transform;
+       g.font = this.font;
+       g.comp = this.comp;
+     }
+   }
+ 
+   private void stateSave()
+   {
+     stateStack.push(new DrawState(this));
+     cairoSave();
+   }
+ 
+   private void stateRestore()
+   {
+     ((DrawState) (stateStack.pop())).restore(this);
+     cairoRestore();
+   }
+ 
+   // Some operations (drawing rather than filling) require that their
+   // coords be shifted to land on 0.5-pixel boundaries, in order to land on
+   // "middle of pixel" coordinates and light up complete pixels.
+   private boolean shiftDrawCalls = false;
+ 
+   private double shifted(double coord, boolean doShift)
+   {
+     if (doShift)
+       return Math.floor(coord) + 0.5;
+     else
+       return coord;
+   }
+ 
+   private void walkPath(PathIterator p, boolean doShift)
+   {
+     double x = 0;
+     double y = 0;
+     double[] coords = new double[6];
+ 
+     cairoSetFillRule(p.getWindingRule());
+     for (; ! p.isDone(); p.next())
+       {
+ 	int seg = p.currentSegment(coords);
+ 	switch (seg)
+ 	  {
+ 	  case PathIterator.SEG_MOVETO:
+ 	    x = shifted(coords[0], doShift);
+ 	    y = shifted(coords[1], doShift);
+ 	    cairoMoveTo(x, y);
+ 	    break;
+ 	  case PathIterator.SEG_LINETO:
+ 	    x = shifted(coords[0], doShift);
+ 	    y = shifted(coords[1], doShift);
+ 	    cairoLineTo(x, y);
+ 	    break;
+ 	  case PathIterator.SEG_QUADTO:
+ 	    // splitting a quadratic bezier into a cubic:
+ 	    // see: http://pfaedit.sourceforge.net/bezier.html
+ 	    double x1 = x + (2.0 / 3.0) * (shifted(coords[0], doShift) - x);
+ 	    double y1 = y + (2.0 / 3.0) * (shifted(coords[1], doShift) - y);
+ 
+ 	    double x2 = x1 + (1.0 / 3.0) * (shifted(coords[2], doShift) - x);
+ 	    double y2 = y1 + (1.0 / 3.0) * (shifted(coords[3], doShift) - y);
+ 
+ 	    x = shifted(coords[2], doShift);
+ 	    y = shifted(coords[3], doShift);
+ 	    cairoCurveTo(x1, y1, x2, y2, x, y);
+ 	    break;
+ 	  case PathIterator.SEG_CUBICTO:
+ 	    x = shifted(coords[4], doShift);
+ 	    y = shifted(coords[5], doShift);
+ 	    cairoCurveTo(shifted(coords[0], doShift),
+ 	                 shifted(coords[1], doShift),
+ 	                 shifted(coords[2], doShift),
+ 	                 shifted(coords[3], doShift), x, y);
+ 	    break;
+ 	  case PathIterator.SEG_CLOSE:
+ 	    cairoClosePath();
+ 	    break;
+ 	  }
+       }
+   }
+ 
+   private Map getDefaultHints()
+   {
+     HashMap defaultHints = new HashMap();
+ 
+     defaultHints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
+                      RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
+ 
+     defaultHints.put(RenderingHints.KEY_STROKE_CONTROL,
+                      RenderingHints.VALUE_STROKE_DEFAULT);
+ 
+     defaultHints.put(RenderingHints.KEY_FRACTIONALMETRICS,
+                      RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
+ 
+     defaultHints.put(RenderingHints.KEY_ANTIALIASING,
+                      RenderingHints.VALUE_ANTIALIAS_OFF);
+ 
+     defaultHints.put(RenderingHints.KEY_RENDERING,
+                      RenderingHints.VALUE_RENDER_DEFAULT);
+ 
+     return defaultHints;
+   }
+ 
+   public static int[] findSimpleIntegerArray (ColorModel cm, Raster raster)
+   {
+     if (cm == null || raster == null)
+       return null;
+ 
+     if (! cm.getColorSpace().isCS_sRGB())
+       return null;
+ 
+     if (! (cm instanceof DirectColorModel))
+       return null;
+ 
+     DirectColorModel dcm = (DirectColorModel) cm;
+ 
+     if (dcm.getRedMask() != 0x00FF0000 || dcm.getGreenMask() != 0x0000FF00
+         || dcm.getBlueMask() != 0x000000FF)
+       return null;
+ 
+     if (! (raster instanceof WritableRaster))
+       return null;
+ 
+     if (raster.getSampleModel().getDataType() != DataBuffer.TYPE_INT)
+       return null;
+ 
+     if (! (raster.getDataBuffer() instanceof DataBufferInt))
+       return null;
+ 
+     DataBufferInt db = (DataBufferInt) raster.getDataBuffer();
+ 
+     if (db.getNumBanks() != 1)
+       return null;
+ 
+     // Finally, we have determined that this is a single bank, [A]RGB-int
+     // buffer in sRGB space. It's worth checking all this, because it means
+     // that cairo can paint directly into the data buffer, which is very
+     // fast compared to all the normal copying and converting.
+ 
+     return db.getData();
+   }
+ 
+   private void updateBufferedImage()
+   {
+     if (bimage != null && pixelConversionRequired)
+       {
+         int height = bimage.getHeight();
+         int width = bimage.getWidth();
+         int index = 0;
+         for (int y = 0; y < height; ++y)
+           for (int x = 0; x < width; ++x)
+             bimage.setRGB(x, y, pixelBuffer[index++]);
+       }
+   }
+ 
+   private boolean drawImage(Image img, AffineTransform xform,
+                             Color bgcolor, ImageObserver obs)
+   {
+     if (img == null)
+       return false;
+ 
+     // FIXME: I'll fix this, /Sven
+ //     if (img instanceof GtkOffScreenImage
+ //         && img.getGraphics() instanceof GdkGraphics2D
+ //         && (xform == null || xform.getType() == AffineTransform.TYPE_IDENTITY
+ //         || xform.getType() == AffineTransform.TYPE_TRANSLATION))
+ //       {
+ // 	// we are being asked to flush a double buffer from Gdk
+ // 	GdkGraphics2D g2 = (GdkGraphics2D) img.getGraphics();
+ // 	gdkDrawDrawable(g2, (int) xform.getTranslateX(),
+ // 	                (int) xform.getTranslateY());
+ 
+ // 	updateBufferedImage();
+ 
+ // 	return true;
+ //       }
+ //     else
+       {
+ 	// In this case, xform is an AffineTransform that transforms bounding
+ 	// box of the specified image from image space to user space. However
+ 	// when we pass this transform to cairo, cairo will use this transform
+ 	// to map "user coordinates" to "pixel" coordinates, which is the 
+ 	// other way around. Therefore to get the "user -> pixel" transform 
+ 	// that cairo wants from "image -> user" transform that we currently
+ 	// have, we will need to invert the transformation matrix.
+ 	AffineTransform invertedXform = new AffineTransform();
+ 
+ 	try
+ 	  {
+ 	    invertedXform = xform.createInverse();
+ 	    if (img instanceof BufferedImage)
+ 	      {
+ 		// draw an image which has actually been loaded 
+ 		// into memory fully
+ 		BufferedImage b = (BufferedImage) img;
+ 		return drawRaster(b.getColorModel(), b.getTile(0, 0),
+ 		                  invertedXform, bgcolor);
+ 	      }
+ 	    else
+ 	      return this.drawImage(GdkPixbufDecoder.createBufferedImage(img
+ 	                                                                 .getSource()),
+ 	                            xform, bgcolor, obs);
+ 	  }
+ 	catch (NoninvertibleTransformException e)
+ 	  {
+ 	    throw new ImagingOpException("Unable to invert transform "
+ 	                                 + xform.toString());
+ 	  }
+       }
+   }
+ 
+   //////////////////////////////////////////////////
+   ////// Implementation of Graphics2D Methods //////
+   //////////////////////////////////////////////////
+ 
+   public void draw(Shape s)
+   {
+     if (stroke != null && ! (stroke instanceof BasicStroke))
+       {
+ 	fill(stroke.createStrokedShape(s));
+ 	return;
+       }
+ 
+     cairoNewPath();
+ 
+     if (s instanceof Rectangle2D)
+       {
+ 	Rectangle2D r = (Rectangle2D) s;
+ 	cairoRectangle(shifted(r.getX(), shiftDrawCalls),
+ 	               shifted(r.getY(), shiftDrawCalls), r.getWidth(),
+ 	               r.getHeight());
+       }
+     else
+       walkPath(s.getPathIterator(null), shiftDrawCalls);
+     cairoStroke();
+ 
+     updateBufferedImage();
+   }
+ 
+   public void fill(Shape s)
+   {
+     cairoNewPath();
+     if (s instanceof Rectangle2D)
+       {
+ 	Rectangle2D r = (Rectangle2D) s;
+ 	cairoRectangle(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+       }
+     else
+       walkPath(s.getPathIterator(null), false);
+ 
+     cairoFill();
+ 
+     updateBufferedImage();
+   }
+ 
+   public void clip(Shape s)
+   {
+     // update it
+     if (clip == null || s == null)
+       clip = s;
+     else if (s instanceof Rectangle2D && clip instanceof Rectangle2D)
+       {
+ 	Rectangle2D r = (Rectangle2D) s;
+ 	Rectangle2D curr = (Rectangle2D) clip;
+ 	clip = curr.createIntersection(r);
+       }
+     else
+       throw new UnsupportedOperationException();
+ 
+     // draw it
+     if (clip != null)
+       {
+ 	cairoNewPath();
+ 	if (clip instanceof Rectangle2D)
+ 	  {
+ 	    Rectangle2D r = (Rectangle2D) clip;
+ 	    cairoRectangle(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+ 	  }
+ 	else
+ 	  walkPath(clip.getPathIterator(null), false);
+ 
+ 	// cairoClosePath ();
+ 	cairoClip();
+       }
+   }
+ 
+   public Paint getPaint()
+   {
+     return paint;
+   }
+ 
+   public AffineTransform getTransform()
+   {
+     return (AffineTransform) transform.clone();
+   }
+ 
+   public void setPaint(Paint p)
+   {
+     if (paint == null)
+       return;
+ 
+     paint = p;
+     if (paint instanceof Color)
+       {
+         setColor((Color) paint);
+       }
+     else if (paint instanceof TexturePaint)
+       {
+ 	TexturePaint tp = (TexturePaint) paint;
+ 	BufferedImage img = tp.getImage();
+ 
+ 	// map the image to the anchor rectangle  
+ 	int width = (int) tp.getAnchorRect().getWidth();
+ 	int height = (int) tp.getAnchorRect().getHeight();
+ 
+ 	double scaleX = width / (double) img.getWidth();
+ 	double scaleY = width / (double) img.getHeight();
+ 
+ 	AffineTransform at = new AffineTransform(scaleX, 0, 0, scaleY, 0, 0);
+ 	AffineTransformOp op = new AffineTransformOp(at, getRenderingHints());
+ 	BufferedImage texture = op.filter(img, null);
+ 	int[] pixels = texture.getRGB(0, 0, width, height, null, 0, width);
+ 	setTexturePixels(pixels, width, height, width);
+       }
+     else if (paint instanceof GradientPaint)
+       {
+ 	GradientPaint gp = (GradientPaint) paint;
+ 	Point2D p1 = gp.getPoint1();
+ 	Point2D p2 = gp.getPoint2();
+ 	Color c1 = gp.getColor1();
+ 	Color c2 = gp.getColor2();
+ 	setGradient(p1.getX(), p1.getY(), p2.getX(), p2.getY(), c1.getRed(),
+ 	            c1.getGreen(), c1.getBlue(), c1.getAlpha(), c2.getRed(),
+ 	            c2.getGreen(), c2.getBlue(), c2.getAlpha(), gp.isCyclic());
+       }
+     else
+       throw new java.lang.UnsupportedOperationException();
+   }
+ 
+   public void setPaintUnlocked(Paint p)
+   {
+     if (paint == null)
+       return;
+ 
+     paint = p;
+     if (paint instanceof Color)
+       {
+         setColorUnlocked((Color) paint);
+       }
+     else if (paint instanceof TexturePaint)
+       {
+ 	TexturePaint tp = (TexturePaint) paint;
+ 	BufferedImage img = tp.getImage();
+ 
+ 	// map the image to the anchor rectangle  
+ 	int width = (int) tp.getAnchorRect().getWidth();
+ 	int height = (int) tp.getAnchorRect().getHeight();
+ 
+ 	double scaleX = width / (double) img.getWidth();
+ 	double scaleY = width / (double) img.getHeight();
+ 
+ 	AffineTransform at = new AffineTransform(scaleX, 0, 0, scaleY, 0, 0);
+ 	AffineTransformOp op = new AffineTransformOp(at, getRenderingHints());
+ 	BufferedImage texture = op.filter(img, null);
+ 	int[] pixels = texture.getRGB(0, 0, width, height, null, 0, width);
+ 	setTexturePixelsUnlocked(pixels, width, height, width);
+       }
+     else if (paint instanceof GradientPaint)
+       {
+ 	GradientPaint gp = (GradientPaint) paint;
+ 	Point2D p1 = gp.getPoint1();
+ 	Point2D p2 = gp.getPoint2();
+ 	Color c1 = gp.getColor1();
+ 	Color c2 = gp.getColor2();
+ 	setGradientUnlocked(p1.getX(), p1.getY(), p2.getX(), p2.getY(), c1.getRed(),
+ 	            c1.getGreen(), c1.getBlue(), c1.getAlpha(), c2.getRed(),
+ 	            c2.getGreen(), c2.getBlue(), c2.getAlpha(), gp.isCyclic());
+       }
+     else
+       throw new java.lang.UnsupportedOperationException();
+   }
+ 
+   public void setTransform(AffineTransform tx)
+   {
+     transform = tx;
+     if (transform != null)
+       {
+ 	double[] m = new double[6];
+ 	transform.getMatrix(m);
+ 	cairoSetMatrix(m);
+       }
+   }
+ 
+   public void setTransformUnlocked(AffineTransform tx)
+   {
+     transform = tx;
+     if (transform != null)
+       {
+ 	double[] m = new double[6];
+ 	transform.getMatrix(m);
+ 	cairoSetMatrixUnlocked(m);
+       }
+   }
+ 
+   public void transform(AffineTransform tx)
+   {
+     if (transform == null)
+       transform = new AffineTransform(tx);
+     else
+       transform.concatenate(tx);
+     setTransform(transform);
+     if (clip != null)
+       {
+ 	// FIXME: this should actuall try to transform the shape
+ 	// rather than degrade to bounds.
+ 	Rectangle2D r = clip.getBounds2D();
+ 	double[] coords = new double[]
+ 	                  {
+ 	                    r.getX(), r.getY(), r.getX() + r.getWidth(),
+ 	                    r.getY() + r.getHeight()
+ 	                  };
+ 	try
+ 	  {
+ 	    tx.createInverse().transform(coords, 0, coords, 0, 2);
+ 	    r.setRect(coords[0], coords[1], coords[2] - coords[0],
+ 	              coords[3] - coords[1]);
+ 	    clip = r;
+ 	  }
+ 	catch (java.awt.geom.NoninvertibleTransformException e)
+ 	  {
+ 	  }
+       }
+   }
+ 
+   public void rotate(double theta)
+   {
+     transform(AffineTransform.getRotateInstance(theta));
+   }
+ 
+   public void rotate(double theta, double x, double y)
+   {
+     transform(AffineTransform.getRotateInstance(theta, x, y));
+   }
+ 
+   public void scale(double sx, double sy)
+   {
+     transform(AffineTransform.getScaleInstance(sx, sy));
+   }
+ 
+   public void translate(double tx, double ty)
+   {
+     transform(AffineTransform.getTranslateInstance(tx, ty));
+   }
+ 
+   public void translate(int x, int y)
+   {
+     translate((double) x, (double) y);
+   }
+ 
+   public void shear(double shearX, double shearY)
+   {
+     transform(AffineTransform.getShearInstance(shearX, shearY));
+   }
+ 
+   public Stroke getStroke()
+   {
+     return stroke;
+   }
+ 
+   public void setStroke(Stroke st)
+   {
+     stroke = st;
+     if (stroke instanceof BasicStroke)
+       {
+ 	BasicStroke bs = (BasicStroke) stroke;
+ 	cairoSetLineCap(bs.getEndCap());
+ 	cairoSetLineWidth(bs.getLineWidth());
+ 	cairoSetLineJoin(bs.getLineJoin());
+ 	cairoSetMiterLimit(bs.getMiterLimit());
+ 	float[] dashes = bs.getDashArray();
+ 	if (dashes != null)
+ 	  {
+ 	    double[] double_dashes = new double[dashes.length];
+ 	    for (int i = 0; i < dashes.length; i++)
+ 	      double_dashes[i] = dashes[i];
+ 	    cairoSetDash(double_dashes, double_dashes.length,
+ 	                 (double) bs.getDashPhase());
+ 	  }
+ 	else
+ 	  cairoSetDash(new double[0], 0, 0.0);
+       }
+   }
+ 
+   public void setStrokeUnlocked(Stroke st)
+   {
+     stroke = st;
+     if (stroke instanceof BasicStroke)
+       {
+ 	BasicStroke bs = (BasicStroke) stroke;
+ 	cairoSetLineCapUnlocked(bs.getEndCap());
+ 	cairoSetLineWidthUnlocked(bs.getLineWidth());
+ 	cairoSetLineJoinUnlocked(bs.getLineJoin());
+ 	cairoSetMiterLimitUnlocked(bs.getMiterLimit());
+ 	float[] dashes = bs.getDashArray();
+ 	if (dashes != null)
+ 	  {
+ 	    double[] double_dashes = new double[dashes.length];
+ 	    for (int i = 0; i < dashes.length; i++)
+ 	      double_dashes[i] = dashes[i];
+ 	    cairoSetDashUnlocked(double_dashes, double_dashes.length,
+                                  (double) bs.getDashPhase());
+ 	  }
+ 	else
+ 	  cairoSetDashUnlocked(new double[0], 0, 0.0);
+       }
+   }
+ 
+   ////////////////////////////////////////////////
+   ////// Implementation of Graphics Methods //////
+   ////////////////////////////////////////////////
+ 
+   public void setPaintMode()
+   {
+     setComposite(java.awt.AlphaComposite.SrcOver);
+   }
+ 
+   public void setXORMode(Color c)
+   {
+     setComposite(new gnu.java.awt.BitwiseXORComposite(c));
+   }
+ 
+   public void setColor(Color c)
+   {
+     if (c == null)
+       c = Color.BLACK;
+ 
+     fg = c;
+     paint = c;
+     cairoSetRGBAColor(fg.getRed() / 255.0, fg.getGreen() / 255.0,
+                       fg.getBlue() / 255.0, fg.getAlpha() / 255.0);
+   }
+ 
+   public void setColorUnlocked(Color c)
+   {
+     if (c == null)
+       c = Color.BLACK;
+ 
+     fg = c;
+     paint = c;
+     cairoSetRGBAColorUnlocked(fg.getRed() / 255.0, fg.getGreen() / 255.0,
+                       fg.getBlue() / 255.0, fg.getAlpha() / 255.0);
+   }
+ 
+   public Color getColor()
+   {
+     return fg;
+   }
+ 
+   public Color getColorUnlocked()
+   {
+     return getColor();
+   }
+ 
+   public void clipRect(int x, int y, int width, int height)
+   {
+     clip(new Rectangle(x, y, width, height));
+   }
+ 
+   public Shape getClip()
+   {
+     if (clip == null)
+       return null;
+     else
+       return clip.getBounds2D(); //getClipInDevSpace();
+   }
+ 
+   public Rectangle getClipBounds()
+   {
+     if (clip == null)
+       return null;
+     else
+       return clip.getBounds();
+   }
+ 
+   protected Rectangle2D getClipInDevSpace()
+   {
+     Rectangle2D uclip = clip.getBounds2D();
+     if (transform == null)
+       return uclip;
+     else
+       {
+ 	Point2D pos = transform.transform(new Point2D.Double(uclip.getX(),
+ 	                                                     uclip.getY()),
+ 	                                  (Point2D) null);
+ 	Point2D extent = transform.deltaTransform(new Point2D.Double(uclip
+ 	                                                             .getWidth(),
+ 	                                                             uclip
+ 	                                                             .getHeight()),
+ 	                                          (Point2D) null);
+ 	return new Rectangle2D.Double(pos.getX(), pos.getY(), extent.getX(),
+ 	                              extent.getY());
+       }
+   }
+ 
+   public void setClip(int x, int y, int width, int height)
+   {
+     setClip(new Rectangle2D.Double((double) x, (double) y, (double) width,
+                                    (double) height));
+   }
+ 
+   public void setClip(Shape s)
+   {
+     clip = s;
+     if (clip == null)
+       {
+ 	// Reset clipping.
+         if (component != null)
+           {
+             Dimension d = component.awtComponent.getSize();
+             setClip(0, 0, d.width, d.height);
+           }
+       }
+     else
+       {
+ 	cairoNewPath();
+ 	if (s instanceof Rectangle2D)
+ 	  {
+ 	    Rectangle2D r = (Rectangle2D) s;
+ 	    cairoRectangle(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+ 	  }
+ 	else
+ 	  walkPath(s.getPathIterator(null), false);
+ 
+ 	// cairoClosePath ();
+ 	cairoClip();
+       }
+   }
+ 
+   private static BasicStroke draw3DRectStroke = new BasicStroke();
+ 
+   public void draw3DRect(int x, int y, int width, int height, boolean raised)
+   {
+     Stroke tmp = stroke;
+     setStroke(draw3DRectStroke);
+     super.draw3DRect(x, y, width, height, raised);
+     setStroke(tmp);
+     updateBufferedImage();
+   }
+ 
+   public void fill3DRect(int x, int y, int width, int height, boolean raised)
+   {
+     Stroke tmp = stroke;
+     setStroke(draw3DRectStroke);
+     super.fill3DRect(x, y, width, height, raised);
+     setStroke(tmp);
+     updateBufferedImage();
+   }
+ 
+   public void drawRect(int x, int y, int width, int height)
+   {
+     draw(new Rectangle(x, y, width, height));
+   }
+ 
+   public void fillRect(int x, int y, int width, int height)
+   {
+     cairoNewPath();
+     cairoRectangle(x, y, width, height);
+     cairoFill();
+   }
+ 
+   public void clearRect(int x, int y, int width, int height)
+   {
+     if (bg != null)
+       cairoSetRGBAColor(bg.getRed() / 255.0, bg.getGreen() / 255.0,
+ 			bg.getBlue() / 255.0, 1.0);
+     cairoNewPath();
+     cairoRectangle(x, y, width, height);
+     cairoFill();
+     setColor(fg);
+ 
+     updateBufferedImage();
+   }
+ 
+   public void setBackground(Color c)
+   {
+     bg = c;
+   }
+ 
+   public void setBackgroundUnlocked(Color c)
+   {
+     setBackground(c);
+   }
+ 
+   public Color getBackground()
+   {
+     return bg;
+   }
+ 
+   private void doPolygon(int[] xPoints, int[] yPoints, int nPoints,
+                          boolean close, boolean fill)
+   {
+     if (nPoints < 1)
+       return;
+     GeneralPath gp = new GeneralPath(PathIterator.WIND_EVEN_ODD);
+     gp.moveTo((float) xPoints[0], (float) yPoints[0]);
+     for (int i = 1; i < nPoints; i++)
+       gp.lineTo((float) xPoints[i], (float) yPoints[i]);
+ 
+     if (close)
+       gp.closePath();
+ 
+     Shape sh = gp;
+     if (fill == false && stroke != null && ! (stroke instanceof BasicStroke))
+       {
+ 	sh = stroke.createStrokedShape(gp);
+ 	fill = true;
+       }
+ 
+     if (fill)
+       fill(sh);
+     else
+       draw(sh);
+   }
+ 
+   public void drawLine(int x1, int y1, int x2, int y2)
+   {
+     int[] xp = new int[2];
+     int[] yp = new int[2];
+ 
+     xp[0] = x1;
+     xp[1] = x2;
+     yp[0] = y1;
+     yp[1] = y2;
+ 
+     doPolygon(xp, yp, 2, false, false);
+   }
+ 
+   public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
+   {
+     doPolygon(xPoints, yPoints, nPoints, true, true);
+   }
+ 
+   public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
+   {
+     doPolygon(xPoints, yPoints, nPoints, true, false);
+   }
+ 
+   public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints)
+   {
+     doPolygon(xPoints, yPoints, nPoints, false, false);
+   }
+ 
+   private boolean drawRaster(ColorModel cm, Raster r,
+                              AffineTransform imageToUser, Color bgcolor)
+   {
+     if (r == null)
+       return false;
+ 
+     SampleModel sm = r.getSampleModel();
+     DataBuffer db = r.getDataBuffer();
+ 
+     if (db == null || sm == null)
+       return false;
+ 
+     if (cm == null)
+       cm = ColorModel.getRGBdefault();
+ 
+     double[] i2u = new double[6];
+     if (imageToUser != null)
+       imageToUser.getMatrix(i2u);
+     else
+       {
+ 	i2u[0] = 1;
+ 	i2u[1] = 0;
+ 	i2u[2] = 0;
+ 	i2u[3] = 1;
+ 	i2u[4] = 0;
+ 	i2u[5] = 0;
+       }
+ 
+     int[] pixels = findSimpleIntegerArray(cm, r);
+ 
+     if (pixels == null)
+       {
+ 	// FIXME: I don't think this code will work correctly with a non-RGB
+ 	// MultiPixelPackedSampleModel. Although this entire method should 
+ 	// probably be rewritten to better utilize Cairo's different supported
+ 	// data formats.
+ 	if (sm instanceof MultiPixelPackedSampleModel)
+ 	  {
+ 	    pixels = r.getPixels(0, 0, r.getWidth(), r.getHeight(), pixels);
+ 	    for (int i = 0; i < pixels.length; i++)
+ 	      pixels[i] = cm.getRGB(pixels[i]);
+ 	  }
+ 	else
+ 	  {
+ 	    pixels = new int[r.getWidth() * r.getHeight()];
+ 	    for (int i = 0; i < pixels.length; i++)
+ 	      pixels[i] = cm.getRGB(db.getElem(i));
+ 	  }
+       }
+ 
+     // Change all transparent pixels in the image to the specified bgcolor,
+     // or (if there's no alpha) fill in an alpha channel so that it paints
+     // correctly.
+     if (cm.hasAlpha())
+       {
+ 	if (bgcolor != null && cm.hasAlpha())
+ 	  for (int i = 0; i < pixels.length; i++)
+ 	    {
+ 	      if (cm.getAlpha(pixels[i]) == 0)
+ 		pixels[i] = bgcolor.getRGB();
+ 	    }
+       }
+     else
+       for (int i = 0; i < pixels.length; i++)
+ 	pixels[i] |= 0xFF000000;
+ 
+     drawPixels(pixels, r.getWidth(), r.getHeight(), r.getWidth(), i2u);
+ 
+     updateBufferedImage();
+ 
+     return true;
+   }
+ 
+   public void drawRenderedImage(RenderedImage image, AffineTransform xform)
+   {
+     drawRaster(image.getColorModel(), image.getData(), xform, bg);
+   }
+ 
+   public void drawRenderableImage(RenderableImage image, AffineTransform xform)
+   {
+     drawRenderedImage(image.createRendering(new RenderContext(xform)), xform);
+   }
+ 
+   public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs)
+   {
+     return drawImage(img, xform, bg, obs);
+   }
+ 
+   public void drawImage(BufferedImage image, BufferedImageOp op, int x, int y)
+   {
+     Image filtered = op.filter(image, null);
+     drawImage(filtered, new AffineTransform(1f, 0f, 0f, 1f, x, y), bg, null);
+   }
+ 
+   public boolean drawImage(Image img, int x, int y, ImageObserver observer)
+   {
+     return drawImage(img, new AffineTransform(1f, 0f, 0f, 1f, x, y), bg,
+                      observer);
+   }
+ 
+   ///////////////////////////////////////////////
+   ////// Unimplemented Stubs and Overloads //////
+   ///////////////////////////////////////////////
+ 
+   public boolean hit(Rectangle rect, Shape text, boolean onStroke)
+   {
+     throw new java.lang.UnsupportedOperationException();
+   }
+ 
+   public GraphicsConfiguration getDeviceConfiguration()
+   {
+     throw new java.lang.UnsupportedOperationException();
+   }
+ 
+   public void setComposite(Composite comp)
+   {
+     this.comp = comp;
+ 
+     if (comp instanceof AlphaComposite)
+       {
+ 	AlphaComposite a = (AlphaComposite) comp;
+ 	cairoSetOperator(a.getRule());
+ 	Color c = getColor();
+ 	setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(),
+ 	                   (int) (a.getAlpha() * ((float) c.getAlpha()))));
+       }
+     else
+       throw new java.lang.UnsupportedOperationException();
+   }
+ 
+   public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue)
+   {
+     hints.put(hintKey, hintValue);
+ 
+     if (hintKey.equals(RenderingHints.KEY_INTERPOLATION)
+         || hintKey.equals(RenderingHints.KEY_ALPHA_INTERPOLATION))
+       {
+ 	if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
+ 	  cairoSurfaceSetFilter(0);
+ 
+ 	else if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
+ 	  cairoSurfaceSetFilter(1);
+ 
+ 	else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
+ 	  cairoSurfaceSetFilter(2);
+ 
+ 	else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
+ 	  cairoSurfaceSetFilter(3);
+ 
+ 	else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
+ 	  cairoSurfaceSetFilter(4);
+       }
+ 
+     shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE)
+                      || hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT);
+   }
+ 
+   public Object getRenderingHint(RenderingHints.Key hintKey)
+   {
+     return hints.get(hintKey);
+   }
+ 
+   public void setRenderingHints(Map hints)
+   {
+     this.hints = new RenderingHints(getDefaultHints());
+     this.hints.add(new RenderingHints(hints));
+ 
+     if (hints.containsKey(RenderingHints.KEY_INTERPOLATION))
+       {
+ 	if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
+ 	  cairoSurfaceSetFilter(0);
+ 
+ 	else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
+ 	  cairoSurfaceSetFilter(1);
+       }
+ 
+     if (hints.containsKey(RenderingHints.KEY_ALPHA_INTERPOLATION))
+       {
+ 	if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
+ 	  cairoSurfaceSetFilter(2);
+ 
+ 	else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
+ 	  cairoSurfaceSetFilter(3);
+ 
+ 	else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
+ 	  cairoSurfaceSetFilter(4);
+       }
+ 
+     shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE)
+                      || hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT);
+   }
+ 
+   public void setRenderingHintsUnlocked(Map hints)
+   {
+     this.hints = new RenderingHints(getDefaultHints());
+     this.hints.add(new RenderingHints(hints));
+ 
+     if (hints.containsKey(RenderingHints.KEY_INTERPOLATION))
+       {
+ 	if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
+ 	  cairoSurfaceSetFilterUnlocked(0);
+ 
+ 	else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
+ 	  cairoSurfaceSetFilterUnlocked(1);
+       }
+ 
+     if (hints.containsKey(RenderingHints.KEY_ALPHA_INTERPOLATION))
+       {
+ 	if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
+ 	  cairoSurfaceSetFilterUnlocked(2);
+ 
+ 	else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
+ 	  cairoSurfaceSetFilterUnlocked(3);
+ 
+ 	else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
+ 	  cairoSurfaceSetFilterUnlocked(4);
+       }
+ 
+     shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE)
+                      || hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT);
+   }
+ 
+   public void addRenderingHints(Map hints)
+   {
+     this.hints.add(new RenderingHints(hints));
+   }
+ 
+   public RenderingHints getRenderingHints()
+   {
+     return hints;
+   }
+ 
+   public Composite getComposite()
+   {
+     if (comp == null)
+       return AlphaComposite.SrcOver;
+     else
+       return comp;
+   }
+ 
+   public FontRenderContext getFontRenderContext()
+   {
+     return new FontRenderContext(transform, true, true);
+   }
+ 
+   public void copyArea(int x, int y, int width, int height, int dx, int dy)
+   {
+     GdkGraphics2D g = (GdkGraphics2D) create(x, y, width, height);
+     gdkDrawDrawable(g, x + dx, y + dy);
+   }
+ 
+   public void drawArc(int x, int y, int width, int height, int startAngle,
+                       int arcAngle)
+   {
+     draw(new Arc2D.Double((double) x, (double) y, (double) width,
+                           (double) height, (double) startAngle,
+                           (double) arcAngle, Arc2D.OPEN));
+   }
+ 
+   public boolean drawImage(Image img, int x, int y, Color bgcolor,
+                            ImageObserver observer)
+   {
+     return drawImage(img, x, y, img.getWidth(observer),
+                      img.getHeight(observer), bgcolor, observer);
+   }
+ 
+   public boolean drawImage(Image img, int x, int y, int width, int height,
+                            Color bgcolor, ImageObserver observer)
+   {
+     double scaleX = width / (double) img.getWidth(observer);
+     double scaleY = height / (double) img.getHeight(observer);
+ 
+     return drawImage(img, new AffineTransform(scaleX, 0f, 0f, scaleY, x, y),
+                      bgcolor, observer);
+   }
+ 
+   public boolean drawImage(Image img, int x, int y, int width, int height,
+                            ImageObserver observer)
+   {
+     return drawImage(img, x, y, width, height, bg, observer);
+   }
+ 
+   public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
+                            int sx1, int sy1, int sx2, int sy2, Color bgcolor,
+                            ImageObserver observer)
+   {
+     if (img == null)
+       return false;
+ 
+     Image subImage;
+ 
+     int sourceWidth = sx2 - sx1;
+     int sourceHeight = sy2 - sy1;
+ 
+     int destWidth = dx2 - dx1;
+     int destHeight = dy2 - dy1;
+ 
+     double scaleX = destWidth / (double) sourceWidth;
+     double scaleY = destHeight / (double) sourceHeight;
+ 
+     // Get the subimage of the source enclosed in the 
+     // rectangle specified by sx1, sy1, sx2, sy2
+ 	
+     if (img instanceof BufferedImage)
+       {
+ 	BufferedImage b = (BufferedImage) img;
+ 	subImage = b.getSubimage(sx1, sy1, sx2, sy2);
+       }
+     else
+       {
+ 	// FIXME: This code currently doesn't work. Null Pointer 
+ 	// exception is thrown in this case. This happens 
+ 	// because img.getSource() always returns null, since source gets 
+ 	// never initialized when it is created with the help of 
+ 	// createImage(int width, int height). 
+ 	CropImageFilter filter = new CropImageFilter(sx1, sx2, sx2, sy2);
+ 	FilteredImageSource src = new FilteredImageSource(img.getSource(),
+ 	                                                  filter);
+ 
+ 	subImage = Toolkit.getDefaultToolkit().createImage(src);
+       }
+ 
+     return drawImage(subImage,
+                      new AffineTransform(scaleX, 0, 0, scaleY, dx1, dy1),
+                      bgcolor, observer);
+   }
+ 
+   public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
+                            int sx1, int sy1, int sx2, int sy2,
+                            ImageObserver observer)
+   {
+     return drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bg, observer);
+   }
+ 
+   public void drawOval(int x, int y, int width, int height)
+   {
+     drawArc(x, y, width, height, 0, 360);
+   }
+ 
+   public void drawRoundRect(int x, int y, int width, int height, int arcWidth,
+                             int arcHeight)
+   {
+     if (arcWidth > width)
+       arcWidth = width;
+     if (arcHeight > height)
+       arcHeight = height;
+ 
+     int xx = x + width - arcWidth;
+     int yy = y + height - arcHeight;
+ 
+     drawArc(x, y, arcWidth, arcHeight, 90, 90);
+     drawArc(xx, y, arcWidth, arcHeight, 0, 90);
+     drawArc(xx, yy, arcWidth, arcHeight, 270, 90);
+     drawArc(x, yy, arcWidth, arcHeight, 180, 90);
+ 
+     int y1 = y + arcHeight / 2;
+     int y2 = y + height - arcHeight / 2;
+     drawLine(x, y1, x, y2);
+     drawLine(x + width, y1, x + width, y2);
+ 
+     int x1 = x + arcWidth / 2;
+     int x2 = x + width - arcWidth / 2;
+     drawLine(x1, y, x2, y);
+     drawLine(x1, y + height, x2, y + height);
+   }
+ 
+   // these are the most accelerated painting paths
+   native void cairoDrawGlyphVector(GdkFontPeer font, 
+                                    float x, float y, int n, 
+                                    int[] codes, float[] positions);
+ 
+   native void cairoDrawGdkTextLayout(GdkTextLayout gl, 
+                                      float x, float y);
+ 
+   GdkFontPeer getFontPeer()
+   {
+     return (GdkFontPeer) getFont().getPeer();
+   }
+ 
+   public void drawGdkTextLayout(GdkTextLayout gl, float x, float y)
+   {
+     cairoDrawGdkTextLayout (gl, x, y);
+     updateBufferedImage ();
+   }
+ 
+   public void drawString(String str, float x, float y)
+   {
+     if (str == null || str.length() == 0)
+       return;
+ 
+     drawGlyphVector(getFont().createGlyphVector(null, str), x, y);
+     updateBufferedImage ();
+   }
+ 
+   public void drawString(String str, int x, int y)
+   {
+     drawString (str, (float) x, (float) y);
+   }
+ 
+   public void drawString(AttributedCharacterIterator ci, int x, int y)
+   {
+     drawString (ci, (float) x, (float) y);
+   }
+ 
+   public void drawGlyphVector(GlyphVector gv, float x, float y)
+   {
+     int n = gv.getNumGlyphs ();
+     int[] codes = gv.getGlyphCodes (0, n, null);
+     float[] positions = gv.getGlyphPositions (0, n, null);
+     
+     setFont (gv.getFont ());
+     cairoDrawGlyphVector (getFontPeer(), x, y, n, codes, positions);
+     updateBufferedImage ();
+   }
+ 
+   public void drawString(AttributedCharacterIterator ci, float x, float y)
+   {
+     GlyphVector gv = getFont().createGlyphVector(getFontRenderContext(), ci);
+     drawGlyphVector(gv, x, y);
+   }
+ 
+   public void fillArc(int x, int y, int width, int height, int startAngle,
+                       int arcAngle)
+   {
+     fill(new Arc2D.Double((double) x, (double) y, (double) width,
+                           (double) height, (double) startAngle,
+                           (double) arcAngle, Arc2D.OPEN));
+   }
+ 
+   public void fillOval(int x, int y, int width, int height)
+   {
+     fillArc(x, y, width, height, 0, 360);
+   }
+ 
+   public void fillRoundRect(int x, int y, int width, int height, int arcWidth,
+                             int arcHeight)
+   {
+     if (arcWidth > width)
+       arcWidth = width;
+     if (arcHeight > height)
+       arcHeight = height;
+ 
+     int xx = x + width - arcWidth;
+     int yy = y + height - arcHeight;
+ 
+     fillArc(x, y, arcWidth, arcHeight, 90, 90);
+     fillArc(xx, y, arcWidth, arcHeight, 0, 90);
+     fillArc(xx, yy, arcWidth, arcHeight, 270, 90);
+     fillArc(x, yy, arcWidth, arcHeight, 180, 90);
+ 
+     fillRect(x, y + arcHeight / 2, width, height - arcHeight + 1);
+     fillRect(x + arcWidth / 2, y, width - arcWidth + 1, height);
+   }
+ 
+   public Font getFont()
+   {
+     if (font == null)
+       return new Font("SansSerif", Font.PLAIN, 12);
+     return font;
+   }
+ 
+   // Until such time as pango is happy to talk directly to cairo, we
+   // actually need to redirect some calls from the GtkFontPeer and
+   // GtkFontMetrics into the drawing kit and ask cairo ourselves.
+ 
+   static native void releasePeerGraphicsResource(GdkFontPeer f);
+ 
+   public FontMetrics getFontMetrics()
+   {
+     return getFontMetrics(getFont());
+   }
+ 
+   public FontMetrics getFontMetrics(Font f)
+   {
+     // the reason we go via the toolkit here is to try to get
+     // a cached object. the toolkit keeps such a cache.
+     return Toolkit.getDefaultToolkit().getFontMetrics(f);
+   }
+ 
+   public void setFont(Font f)
+   {
+     // Sun's JDK does not throw NPEs, instead it leaves the current setting
+     // unchanged. So do we.
+     if (f == null)
+       return;
+ 
+     if (f.getPeer() instanceof GdkFontPeer)
+       font = f;
+     else
+       font = 
+         ((ClasspathToolkit)(Toolkit.getDefaultToolkit()))
+         .getFont(f.getName(), f.getAttributes());    
+   }
+ 
+   public void setFontUnlocked(Font f)
+   {
+     setFont (f);
+   }
+ 
+   public String toString()
+   {
+     return  (getClass().getName()
+              + "[font=" + getFont().toString()
+              + ",color=" + fg.toString()
+ 	     + "]");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,140 ----
+ /* GdkGraphicsConfiguration.java -- describes characteristics of graphics
+    Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.BufferCapabilities;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.GraphicsDevice;
+ import java.awt.ImageCapabilities;
+ import java.awt.Rectangle;
+ import java.awt.Toolkit;
+ 
+ import java.awt.geom.AffineTransform;
+ 
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ import java.awt.image.VolatileImage;
+ 
+ public class GdkGraphicsConfiguration 
+   extends GraphicsConfiguration
+ {
+   GdkScreenGraphicsDevice gdkScreenGraphicsDevice;
+   ColorModel cm;
+   Rectangle bounds;
+ 
+   public GdkGraphicsConfiguration(GdkScreenGraphicsDevice dev)
+   {
+     this.gdkScreenGraphicsDevice = dev;
+     cm = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB).getColorModel();
+     bounds = ((GtkToolkit) Toolkit.getDefaultToolkit()).getBounds();
+   }
+ 
+   public GraphicsDevice getDevice()
+   {
+     return gdkScreenGraphicsDevice;
+   }
+ 
+   public BufferedImage createCompatibleImage(int w, int h)
+   {
+     return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+   }
+ 
+   public BufferedImage createCompatibleImage(int w, int h, 
+                                              int transparency)
+   {
+     return createCompatibleImage(w, h);
+   }
+ 
+   public VolatileImage createCompatibleVolatileImage(int w, int h)
+   {
+     return new GtkVolatileImage(w, h);
+   }
+ 
+   public VolatileImage createCompatibleVolatileImage(int w, int h,
+                                                      ImageCapabilities caps)
+     throws java.awt.AWTException
+   {
+     return new GtkVolatileImage(w, h, caps);
+   }
+ 
+   public ColorModel getColorModel()
+   {
+     return cm;
+   }
+ 
+   public ColorModel getColorModel(int transparency)
+   {
+     return getColorModel();
+   }
+ 
+   public AffineTransform getDefaultTransform()
+   {
+     // FIXME: extract the GDK DPI information here.
+     return new AffineTransform();
+   }
+ 
+   public AffineTransform getNormalizingTransform()
+   {
+     // FIXME: extract the GDK DPI information here.
+     return new AffineTransform();
+   }
+ 
+   public Rectangle getBounds()
+   {
+     return bounds;
+   }
+ 
+   public BufferCapabilities getBufferCapabilities()
+   {
+     return new BufferCapabilities(getImageCapabilities(), 
+                                   getImageCapabilities(),
+                                   BufferCapabilities.FlipContents.UNDEFINED);
+   }
+ 
+   public ImageCapabilities getImageCapabilities()
+   {
+     return new ImageCapabilities(false);
+   }
+ 
+   public VolatileImage createCompatibleVolatileImage(int width, int height, int transparency)
+   {
+       // FIXME: implement
+     return null;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,99 ----
+ /* GdkGraphicsEnvironment.java -- information about the graphics environment
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Font;
+ import java.awt.Graphics2D;
+ import java.awt.GraphicsDevice;
+ import java.awt.GraphicsEnvironment;
+ import java.awt.HeadlessException;
+ import java.awt.Toolkit;
+ import java.awt.image.BufferedImage;
+ import java.util.Locale;
+ 
+ public class GdkGraphicsEnvironment extends GraphicsEnvironment
+ {
+   public GdkGraphicsEnvironment ()
+   {
+   }
+ 
+   public GraphicsDevice[] getScreenDevices ()
+   {
+     // FIXME: Support multiple screens, since GDK can.
+     return new GraphicsDevice[] { new GdkScreenGraphicsDevice (this) };
+   }
+ 
+   public GraphicsDevice getDefaultScreenDevice ()
+   {
+     if (GraphicsEnvironment.isHeadless ())
+       throw new HeadlessException ();
+ 
+     return new GdkScreenGraphicsDevice (this);
+   }
+ 
+   public Graphics2D createGraphics (BufferedImage image)
+   {
+     return new GdkGraphics2D (image);
+   }
+   
+   private native int nativeGetNumFontFamilies();
+   private native void nativeGetFontFamilies(String[] family_names);
+ 
+   public Font[] getAllFonts ()
+   {
+     throw new java.lang.UnsupportedOperationException ();
+   }
+ 
+     public String[] getAvailableFontFamilyNames ()
+     {
+ 	String[] family_names;
+ 	int array_size;
+ 
+ 	array_size = nativeGetNumFontFamilies();
+ 	family_names = new String[array_size];
+ 
+ 	nativeGetFontFamilies(family_names);
+ 	return family_names;
+     }
+ 
+   public String[] getAvailableFontFamilyNames (Locale l)
+   {
+     throw new java.lang.UnsupportedOperationException ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,681 ----
+ /* GdkPixbufDecoder.java -- Image data decoding object
+    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.classpath.Configuration;
+ 
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageProducer;
+ import java.awt.image.Raster;
+ import java.awt.image.RenderedImage;
+ import java.io.DataOutput;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.util.ArrayList;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Locale;
+ import java.util.Vector;
+ 
+ import javax.imageio.IIOImage;
+ import javax.imageio.ImageReadParam;
+ import javax.imageio.ImageReader;
+ import javax.imageio.ImageTypeSpecifier;
+ import javax.imageio.ImageWriteParam;
+ import javax.imageio.ImageWriter;
+ import javax.imageio.metadata.IIOMetadata;
+ import javax.imageio.spi.IIORegistry;
+ import javax.imageio.spi.ImageReaderSpi;
+ import javax.imageio.spi.ImageWriterSpi;
+ import javax.imageio.stream.ImageInputStream;
+ import javax.imageio.stream.ImageOutputStream;
+ 
+ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
+ {
+   static 
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary("gtkpeer");
+       }
+     initStaticState ();
+   }
+   
+   static native void initStaticState();
+   private final int native_state = GtkGenericPeer.getUniqueInteger ();
+ 
+   // initState() has been called, but pumpDone() has not yet been called.
+   private boolean needsClose = false;
+ 
+   // the current set of ImageConsumers for this decoder
+   Vector curr;
+ 
+   // interface to GdkPixbuf
+   native void initState ();
+   native void pumpBytes (byte[] bytes, int len) throws IOException;
+   native void pumpDone () throws IOException;
+   native void finish (boolean needsClose);
+   static native void streamImage(int[] bytes, String format, int width, int height, boolean hasAlpha, DataOutput sink);
+   
+   // gdk-pixbuf provids data in RGBA format
+   static final ColorModel cm = new DirectColorModel (32, 0xff000000, 
+                                                      0x00ff0000, 
+                                                      0x0000ff00, 
+                                                      0x000000ff);
+   public GdkPixbufDecoder (InputStream in)
+   {
+     super (in);
+   }
+ 
+   public GdkPixbufDecoder (String filename)
+   {
+     super (filename);
+   }
+   
+   public GdkPixbufDecoder (URL url)
+   {
+     super (url);
+   }
+ 
+   public GdkPixbufDecoder (byte[] imagedata, int imageoffset, int imagelength)
+   {
+     super (imagedata, imageoffset, imagelength);
+   }
+ 
+   // called back by native side: area_prepared_cb
+   void areaPrepared (int width, int height)
+   {
+ 
+     if (curr == null)
+       return;
+ 
+     for (int i = 0; i < curr.size (); i++)
+       {
+         ImageConsumer ic = (ImageConsumer) curr.elementAt (i);
+         ic.setDimensions (width, height);
+         ic.setColorModel (cm);
+         ic.setHints (ImageConsumer.RANDOMPIXELORDER);
+       }
+   }
+   
+   // called back by native side: area_updated_cb
+   void areaUpdated (int x, int y, int width, int height, 
+                     int pixels[], int scansize)
+   {
+     if (curr == null)
+       return;
+     
+     for (int i = 0; i < curr.size (); i++)
+       {
+         ImageConsumer ic = (ImageConsumer) curr.elementAt (i);
+         ic.setPixels (x, y, width, height, cm, pixels, 0, scansize);
+       }
+   }
+   
+   // called from an async image loader of one sort or another, this method
+   // repeatedly reads bytes from the input stream and passes them through a
+   // GdkPixbufLoader using the native method pumpBytes. pumpBytes in turn
+   // decodes the image data and calls back areaPrepared and areaUpdated on
+   // this object, feeding back decoded pixel blocks, which we pass to each
+   // of the ImageConsumers in the provided Vector.
+ 
+   public void produce (Vector v, InputStream is) throws IOException
+   {
+     curr = v;
+ 
+     byte bytes[] = new byte[4096];
+     int len = 0;
+     initState();
+     needsClose = true;
+     while ((len = is.read (bytes)) != -1)
+       pumpBytes (bytes, len);
+     pumpDone();
+     needsClose = false;
+     
+     for (int i = 0; i < curr.size (); i++)
+       {
+         ImageConsumer ic = (ImageConsumer) curr.elementAt (i);
+         ic.imageComplete (ImageConsumer.STATICIMAGEDONE);
+       }
+ 
+     curr = null;
+   }
+ 
+   public void finalize()
+   {
+     finish(needsClose);
+   }
+ 
+ 
+   public static class ImageFormatSpec
+   {
+     public String name;
+     public boolean writable = false;    
+     public ArrayList mimeTypes = new ArrayList();
+     public ArrayList extensions = new ArrayList();
+ 
+     public ImageFormatSpec(String name, boolean writable)
+     {
+       this.name = name;
+       this.writable = writable;
+     }
+ 
+     public synchronized void addMimeType(String m)
+     {
+       mimeTypes.add(m);
+     }
+ 
+     public synchronized void addExtension(String e)
+     {
+       extensions.add(e);
+     }    
+   }
+ 
+   static ArrayList imageFormatSpecs;
+ 
+   public static ImageFormatSpec registerFormat(String name, boolean writable) 
+   {
+     ImageFormatSpec ifs = new ImageFormatSpec(name, writable);
+     synchronized(GdkPixbufDecoder.class)
+       {
+         if (imageFormatSpecs == null)
+           imageFormatSpecs = new ArrayList();
+         imageFormatSpecs.add(ifs);
+       }
+     return ifs;
+   }
+ 
+   static String[] getFormatNames(boolean writable)
+   {
+     ArrayList names = new ArrayList();
+     synchronized (imageFormatSpecs) 
+       {
+         Iterator i = imageFormatSpecs.iterator();
+         while (i.hasNext())
+           {
+             ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+             if (writable && !ifs.writable)
+               continue;
+             names.add(ifs.name);
+ 
+             /* 
+              * In order to make the filtering code work, we need to register
+              * this type under every "format name" likely to be used as a synonym.
+              * This generally means "all the extensions people might use". 
+              */
+ 
+             Iterator j = ifs.extensions.iterator();
+             while (j.hasNext())
+               names.add((String) j.next());
+           }
+       }
+     Object[] objs = names.toArray();
+     String[] strings = new String[objs.length];
+     for (int i = 0; i < objs.length; ++i)
+       strings[i] = (String) objs[i];
+     return strings;
+   }
+ 
+   static String[] getFormatExtensions(boolean writable)
+   {
+     ArrayList extensions = new ArrayList();
+     synchronized (imageFormatSpecs) 
+       {
+         Iterator i = imageFormatSpecs.iterator();
+         while (i.hasNext())
+           {
+             ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+             if (writable && !ifs.writable)
+               continue;
+             Iterator j = ifs.extensions.iterator();
+             while (j.hasNext())
+               extensions.add((String) j.next());
+           }
+       }
+     Object[] objs = extensions.toArray();
+     String[] strings = new String[objs.length];
+     for (int i = 0; i < objs.length; ++i)
+       strings[i] = (String) objs[i];
+     return strings;
+   }
+ 
+   static String[] getFormatMimeTypes(boolean writable)
+   {
+     ArrayList mimeTypes = new ArrayList();
+     synchronized (imageFormatSpecs) 
+       {
+         Iterator i = imageFormatSpecs.iterator();
+         while (i.hasNext())
+           {
+             ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+             if (writable && !ifs.writable)
+               continue;
+             Iterator j = ifs.mimeTypes.iterator();
+             while (j.hasNext())
+               mimeTypes.add((String) j.next());
+           }
+       }
+     Object[] objs = mimeTypes.toArray();
+     String[] strings = new String[objs.length];
+     for (int i = 0; i < objs.length; ++i)
+       strings[i] = (String) objs[i];
+     return strings;
+   }
+ 
+   
+   static String findFormatName(Object ext, boolean needWritable)
+   {
+     if (ext == null)
+       return null;
+ 
+     if (!(ext instanceof String))
+       throw new IllegalArgumentException("extension is not a string");
+ 
+     String str = (String) ext;
+ 
+     Iterator i = imageFormatSpecs.iterator();
+     while (i.hasNext())
+       {
+         ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+ 
+         if (needWritable && !ifs.writable)
+           continue;
+ 
+         if (ifs.name.equals(str))
+           return str;
+ 
+         Iterator j = ifs.extensions.iterator(); 
+         while (j.hasNext())
+           {
+             String extension = (String)j.next();
+             if (extension.equals(str))
+               return ifs.name;
+           }
+ 
+         j = ifs.mimeTypes.iterator(); 
+         while (j.hasNext())
+           {
+             String mimeType = (String)j.next();
+             if (mimeType.equals(str))
+               return ifs.name;
+           }
+       }      
+     throw new IllegalArgumentException("unknown extension '" + str + "'");
+   }
+ 
+   private static GdkPixbufReaderSpi readerSpi;
+   private static GdkPixbufWriterSpi writerSpi;
+ 
+   public static synchronized GdkPixbufReaderSpi getReaderSpi()
+   {
+     if (readerSpi == null)
+       readerSpi = new GdkPixbufReaderSpi();
+     return readerSpi;
+   }
+ 
+   public static synchronized GdkPixbufWriterSpi getWriterSpi()
+   {
+     if (writerSpi == null)
+       writerSpi = new GdkPixbufWriterSpi();
+     return writerSpi;
+   }
+ 
+   public static void registerSpis(IIORegistry reg) 
+   {
+     reg.registerServiceProvider(getReaderSpi(), ImageReaderSpi.class);
+     reg.registerServiceProvider(getWriterSpi(), ImageWriterSpi.class);
+   }
+ 
+   public static class GdkPixbufWriterSpi extends ImageWriterSpi
+   {
+     public GdkPixbufWriterSpi() 
+     {      
+       super("GdkPixbuf", "2.x",
+             GdkPixbufDecoder.getFormatNames(true), 
+             GdkPixbufDecoder.getFormatExtensions(true), 
+             GdkPixbufDecoder.getFormatMimeTypes(true),
+             "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufWriter",
+             new Class[] { ImageOutputStream.class },
+             new String[] { "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufReaderSpi" },
+             false, null, null, null, null,
+             false, null, null, null, null);
+     }
+ 
+     public boolean canEncodeImage(ImageTypeSpecifier ts)
+     {
+       return true;
+     }
+ 
+     public ImageWriter createWriterInstance(Object ext)
+     {
+       return new GdkPixbufWriter(this, ext);
+     }
+ 
+     public String getDescription(java.util.Locale loc)
+     {
+       return "GdkPixbuf Writer SPI";
+     }
+ 
+   }
+ 
+   public static class GdkPixbufReaderSpi extends ImageReaderSpi
+   {
+     public GdkPixbufReaderSpi() 
+     { 
+       super("GdkPixbuf", "2.x",
+             GdkPixbufDecoder.getFormatNames(false), 
+             GdkPixbufDecoder.getFormatExtensions(false), 
+             GdkPixbufDecoder.getFormatMimeTypes(false),
+             "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufReader",
+             new Class[] { ImageInputStream.class },
+             new String[] { "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufWriterSpi" },
+             false, null, null, null, null,
+             false, null, null, null, null);
+     }
+ 
+     public boolean canDecodeInput(Object obj) 
+     { 
+       return true; 
+     }
+ 
+     public ImageReader createReaderInstance(Object ext)
+     {
+       return new GdkPixbufReader(this, ext);
+     }
+ 
+     public String getDescription(Locale loc)
+     {
+       return "GdkPixbuf Reader SPI";
+     }
+   }
+ 
+   private static class GdkPixbufWriter
+     extends ImageWriter
+   {
+     String ext;
+     public GdkPixbufWriter(GdkPixbufWriterSpi ownerSpi, Object ext)
+     {
+       super(ownerSpi);
+       this.ext = findFormatName(ext, true);
+     }
+ 
+     public IIOMetadata convertImageMetadata (IIOMetadata inData,
+                                              ImageTypeSpecifier imageType,
+                                              ImageWriteParam param)
+     {
+       return null;
+     }
+ 
+     public IIOMetadata convertStreamMetadata (IIOMetadata inData,
+                                               ImageWriteParam param)
+     {
+       return null;
+     }
+ 
+     public IIOMetadata getDefaultImageMetadata (ImageTypeSpecifier imageType, 
+                                                 ImageWriteParam param)
+     {
+       return null;
+     }
+ 
+     public IIOMetadata getDefaultStreamMetadata (ImageWriteParam param)
+     {
+       return null;
+     }
+ 
+   public void write (IIOMetadata streamMetadata, IIOImage i, ImageWriteParam param)
+     throws IOException
+     {
+       RenderedImage image = i.getRenderedImage();
+       Raster ras = image.getData();
+       int width = ras.getWidth();
+       int height = ras.getHeight();
+       ColorModel model = image.getColorModel();
+       int[] pixels = GdkGraphics2D.findSimpleIntegerArray (image.getColorModel(), ras);
+       
+       if (pixels == null)
+         {
+           BufferedImage img = new BufferedImage(width, height, 
+                                                 (model != null && model.hasAlpha() ? 
+                                                  BufferedImage.TYPE_INT_ARGB
+                                                  : BufferedImage.TYPE_INT_RGB));
+           int[] pix = new int[4];
+           for (int y = 0; y < height; ++y)
+             for (int x = 0; x < width; ++x)
+               img.setRGB(x, y, model.getRGB(ras.getPixel(x, y, pix)));
+           pixels = GdkGraphics2D.findSimpleIntegerArray (img.getColorModel(), 
+                                                          img.getRaster());
+           model = img.getColorModel();
+         }
+ 
+       processImageStarted(1);
+       streamImage(pixels, this.ext, width, height, model.hasAlpha(), 
+                   (DataOutput) this.getOutput());
+       processImageComplete();
+     }    
+   }
+ 
+   private static class GdkPixbufReader 
+     extends ImageReader
+     implements ImageConsumer
+   {
+     // ImageConsumer parts
+     GdkPixbufDecoder dec;
+     BufferedImage bufferedImage;
+     ColorModel defaultModel;
+     int width;
+     int height;
+     String ext;
+     
+     public GdkPixbufReader(GdkPixbufReaderSpi ownerSpi, Object ext)
+     {
+       super(ownerSpi);
+       this.ext = findFormatName(ext, false);
+     }
+ 
+     public GdkPixbufReader(GdkPixbufReaderSpi ownerSpi, Object ext, GdkPixbufDecoder d)
+     {
+       this(ownerSpi, ext);
+       dec = d;
+     }
+ 
+     public void setDimensions(int w, int h)
+     {
+       processImageStarted(1);
+       width = w;
+       height = h;
+     }
+     
+     public void setProperties(Hashtable props) {}
+ 
+     public void setColorModel(ColorModel model) 
+     {
+       defaultModel = model;
+     }
+ 
+     public void setHints(int flags) {}
+ 
+     public void setPixels(int x, int y, int w, int h, 
+                           ColorModel model, byte[] pixels, 
+                           int offset, int scansize)
+     {
+     }      
+ 
+     public void setPixels(int x, int y, int w, int h, 
+                           ColorModel model, int[] pixels, 
+                           int offset, int scansize)
+     {
+       if (model == null)
+         model = defaultModel;
+       
+       if (bufferedImage == null)
+         {
+           bufferedImage = new BufferedImage (width, height, (model != null && model.hasAlpha() ? 
+                                                              BufferedImage.TYPE_INT_ARGB
+                                                              : BufferedImage.TYPE_INT_RGB));
+         }
+ 
+       int pixels2[];
+       if (model != null)
+         {
+           pixels2 = new int[pixels.length];
+           for (int yy = 0; yy < h; yy++)
+             for (int xx = 0; xx < w; xx++)
+               {
+                 int i = yy * scansize + xx;
+                 pixels2[i] = model.getRGB (pixels[i]);
+               }
+         }
+       else
+         pixels2 = pixels;
+ 
+       bufferedImage.setRGB (x, y, w, h, pixels2, offset, scansize);
+       processImageProgress(y / (height == 0 ? 1 : height));
+     }
+ 
+     public void imageComplete(int status) 
+     {
+       processImageComplete();
+     }
+ 
+     public BufferedImage getBufferedImage()
+     {
+       if (bufferedImage == null && dec != null)
+         dec.startProduction (this);
+       return bufferedImage;
+     }
+ 
+     // ImageReader parts
+ 
+     public int getNumImages(boolean allowSearch)
+       throws IOException
+     {
+       return 1;
+     }
+ 
+     public IIOMetadata getImageMetadata(int i) 
+     {
+       return null;
+     }
+ 
+     public IIOMetadata getStreamMetadata()
+       throws IOException
+     {
+       return null;
+     }
+ 
+     public Iterator getImageTypes(int imageIndex)
+       throws IOException
+     {
+       BufferedImage img = getBufferedImage();
+       Vector vec = new Vector();
+       vec.add(new ImageTypeSpecifier(img));
+       return vec.iterator();
+     }
+     
+     public int getHeight(int imageIndex)
+       throws IOException
+     {
+       return getBufferedImage().getHeight();
+     }
+ 
+     public int getWidth(int imageIndex)
+       throws IOException
+     {
+       return getBufferedImage().getWidth();
+     }
+ 
+     public void setInput(Object input,
+                          boolean seekForwardOnly,
+                          boolean ignoreMetadata)
+     {
+       super.setInput(input, seekForwardOnly, ignoreMetadata);
+       dec = new GdkPixbufDecoder((InputStream) getInput());
+     }
+ 
+     public BufferedImage read(int imageIndex, ImageReadParam param)
+       throws IOException
+     {
+       return getBufferedImage ();
+     }
+   }
+ 
+   // remaining helper class and static method is a convenience for the Gtk
+   // peers, for loading a BufferedImage in off a disk file without going
+   // through the whole imageio system. 
+ 
+   public static BufferedImage createBufferedImage (String filename)
+   {
+     GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(), 
+                                              "png", // reader auto-detects, doesn't matter
+                                              new GdkPixbufDecoder (filename));
+     return r.getBufferedImage ();
+   }
+ 
+   public static BufferedImage createBufferedImage (URL u)
+   {
+     GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(), 
+                                              "png", // reader auto-detects, doesn't matter
+                                              new GdkPixbufDecoder (u));
+     return r.getBufferedImage ();
+   }
+ 
+   public static BufferedImage createBufferedImage (byte[] imagedata, int imageoffset,
+                                                    int imagelength)
+   {
+     GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(), 
+                                              "png", // reader auto-detects, doesn't matter
+                                              new GdkPixbufDecoder (imagedata,
+                                                                    imageoffset,
+                                                                    imagelength));
+     return r.getBufferedImage ();
+   }
+   
+   public static BufferedImage createBufferedImage (ImageProducer producer)
+   {
+     GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(), "png" /* ignored */, null);
+     producer.startProduction(r);
+     return r.getBufferedImage ();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkRobotPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkRobotPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkRobotPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkRobotPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* GdkRobot.java -- an XTest implementation of RobotPeer
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.AWTException;
+ import java.awt.GraphicsDevice;
+ import java.awt.Rectangle;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.peer.RobotPeer;
+ 
+ /**
+  * Implements the RobotPeer interface using the XTest extension.
+  *
+  * @author Thomas Fitzsimmons
+  */
+ public class GdkRobotPeer implements RobotPeer
+ {
+   // gdk-pixbuf provides data in RGBA format
+   static final ColorModel cm = new DirectColorModel (32, 0xff000000,
+ 						     0x00ff0000,
+ 						     0x0000ff00,
+ 						     0x000000ff);
+ 
+   public GdkRobotPeer (GraphicsDevice screen) throws AWTException
+   {
+     // FIXME: make use of screen parameter when GraphicsDevice is
+     // implemented.
+     if (!initXTest ())
+       throw new AWTException ("XTest extension not supported");
+   }
+ 
+   native boolean initXTest ();
+ 
+   // RobotPeer methods
+   public native void mouseMove (int x, int y);
+   public native void mousePress (int buttons);
+   public native void mouseRelease (int buttons);
+   public native void mouseWheel (int wheelAmt);
+   public native void keyPress (int keycode);
+   public native void keyRelease (int keycode);
+   native int[] nativeGetRGBPixels (int x, int y, int width, int height);
+ 
+   public int getRGBPixel (int x, int y)
+   {
+     return cm.getRGB (nativeGetRGBPixels (x, y, 1, 1)[0]);
+   }
+ 
+   public int[] getRGBPixels (Rectangle r)
+   {
+     int[] gdk_pixels = nativeGetRGBPixels (r.x, r.y, r.width, r.height);
+     int[] pixels = new int[r.width * r.height];
+ 
+     for (int i = 0; i < r.width * r.height; i++)
+       pixels[i] = cm.getRGB (gdk_pixels[i]);
+ 
+     return pixels;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,111 ----
+ /* GdkScreenGraphicsDevice.java -- information about a screen device
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Dimension;
+ import java.awt.DisplayMode;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.GraphicsDevice;
+ import java.awt.Toolkit;
+ 
+ public class GdkScreenGraphicsDevice extends GraphicsDevice
+ {
+   GdkGraphicsEnvironment env;
+ 
+   public GdkScreenGraphicsDevice (GdkGraphicsEnvironment e)
+   {    
+     super ();
+     env = e;
+   }
+ 
+   public int getType ()
+   {
+     return GraphicsDevice.TYPE_RASTER_SCREEN;
+   }
+ 
+   public String getIDstring ()
+   {
+     // FIXME: query X for this string
+     return "default GDK device ID string";
+   }
+ 
+   public GraphicsConfiguration[] getConfigurations ()
+   {
+     // FIXME: query X for the list of possible configurations
+     return new GraphicsConfiguration [] { new GdkGraphicsConfiguration(this) };
+   }
+ 
+   public GraphicsConfiguration getDefaultConfiguration ()
+   {
+     
+     // FIXME: query X for default configuration
+     return new GdkGraphicsConfiguration(this);
+   }
+ 
+ 
+   /**
+    * Returns the current display mode of this device, or null if unknown.
+    *
+    * @return the current display mode
+    * @see #setDisplayMode(DisplayMode)
+    * @see #getDisplayModes()
+    * @since 1.4
+    */
+   public DisplayMode getDisplayMode()
+   {
+     // determine display mode
+     Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+     DisplayMode mode = new DisplayMode(dim.width, dim.height, 0,
+ 				       DisplayMode.REFRESH_RATE_UNKNOWN);
+     return mode;
+   }
+ 
+   /**
+    * This device does not yet support fullscreen exclusive mode, so this
+    * returns <code>false</code>.
+    *
+    * @return <code>false</code>
+    * @since 1.4
+    */
+   public boolean isFullScreenSupported()
+   {
+     return false;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkTextLayout.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkTextLayout.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GdkTextLayout.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GdkTextLayout.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,431 ----
+ /* GdkTextLayout.java
+    Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.classpath.Configuration;
+ import gnu.java.awt.peer.ClasspathTextLayoutPeer;
+ 
+ import java.awt.Font;
+ import java.awt.Graphics2D;
+ import java.awt.Shape;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphMetrics;
+ import java.awt.font.GlyphVector;
+ import java.awt.font.TextAttribute;
+ import java.awt.font.TextHitInfo;
+ import java.awt.font.TextLayout;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.GeneralPath;
+ import java.awt.geom.Rectangle2D;
+ import java.text.AttributedCharacterIterator;
+ import java.text.AttributedString;
+ import java.text.CharacterIterator;
+ 
+ /**
+  * This is an implementation of the text layout peer interface which
+  * delegates all the hard work to pango.
+  *
+  * @author Graydon Hoare
+  */
+ 
+ public class GdkTextLayout 
+   implements ClasspathTextLayoutPeer
+ {
+   // native side, plumbing, etc.
+   static 
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary("gtkpeer");
+       }
+     initStaticState ();
+   }
+   private native void setText(String str);
+   private native void getExtents(double[] inkExtents,
+                                  double[] logExtents);
+   private native void indexToPos(int idx, double[] pos);
+   private native void initState ();
+   private native void dispose ();
+   static native void initStaticState();
+   private final int native_state = GtkGenericPeer.getUniqueInteger ();
+   protected void finalize ()
+   {
+     dispose ();
+   }
+ 
+   // we hold on to these to make sure we can render when presented
+   // with non-GdkGraphics2D paint targets
+   private AttributedString attributedString;
+   private FontRenderContext fontRenderContext;
+ 
+   public GdkTextLayout(AttributedString str, FontRenderContext frc)
+   {
+     initState();
+     attributedString = str;
+     fontRenderContext = frc;
+   }
+ 
+   protected class CharacterIteratorProxy 
+     implements CharacterIterator
+   {
+     public CharacterIterator target;
+     public int begin;
+     public int limit;
+     public int index;
+ 
+     public CharacterIteratorProxy (CharacterIterator ci)
+     {
+       target = ci;
+     }
+ 
+     public int getBeginIndex ()
+     {
+       return begin;
+     }
+ 
+     public int getEndIndex ()
+     {
+       return limit;
+     }
+ 
+     public int getIndex ()
+     {
+       return index;
+     }
+ 
+     public char setIndex (int idx) 
+       throws IllegalArgumentException
+     {
+       if (idx < begin || idx >= limit)
+         throw new IllegalArgumentException ();
+       char ch = target.setIndex (idx);
+       index = idx;
+       return ch;
+     }
+ 
+     public char first ()
+     {
+       int save = target.getIndex ();
+       char ch = target.setIndex (begin);
+       target.setIndex (save);
+       return ch;
+     }
+ 
+     public char last ()
+     {
+       if (begin == limit)
+         return this.first ();
+ 
+       int save = target.getIndex ();
+       char ch = target.setIndex (limit - 1);
+       target.setIndex (save);
+       return ch;
+     }
+ 
+     public char current ()
+     {
+       return target.current();
+     }
+ 
+     public char next ()
+     {
+       if (index >= limit - 1)
+         return CharacterIterator.DONE;
+       else
+         {
+           index++;
+           return target.next();
+         }
+     }
+ 
+     public char previous ()
+     {
+       if (index <= begin)
+         return CharacterIterator.DONE;
+       else
+         {
+           index--;
+           return target.previous ();
+         }
+     }
+ 
+     public Object clone ()
+     {
+       CharacterIteratorProxy cip = new CharacterIteratorProxy (this.target);
+       cip.begin = this.begin;
+       cip.limit = this.limit;
+       cip.index = this.index;
+       return cip;
+     }
+     
+   }
+ 
+ 
+   // public side
+ 
+   public void draw (Graphics2D g2, float x, float y)
+   {
+     if (g2 instanceof GdkGraphics2D)
+       {
+         // we share pango structures directly with GdkGraphics2D 
+         // when legal
+         GdkGraphics2D gg2 = (GdkGraphics2D) g2;
+         gg2.drawGdkTextLayout(this, x, y);
+       }
+     else 
+       {
+         // falling back to a rather tedious layout algorithm when
+         // not legal
+         AttributedCharacterIterator ci = attributedString.getIterator ();
+         CharacterIteratorProxy proxy = new CharacterIteratorProxy (ci);
+         Font defFont = g2.getFont ();
+ 
+         /* Note: this implementation currently only interprets FONT text
+          * attributes. There is a reasonable argument to be made for some
+          * attributes being interpreted out here, where we have control of the
+          * Graphics2D and can construct or derive new fonts, and some
+          * attributes being interpreted by the GlyphVector itself. So far, for
+          * all attributes except FONT we do neither.
+          */
+ 
+         for (char c = ci.first ();
+              c != CharacterIterator.DONE;
+              c = ci.next ())
+           {                
+             proxy.begin = ci.getIndex ();
+             proxy.limit = ci.getRunLimit(TextAttribute.FONT);
+             if (proxy.limit <= proxy.begin)
+               continue;
+ 
+             proxy.index = proxy.begin;
+ 
+             Object fnt = ci.getAttribute(TextAttribute.FONT);
+             GlyphVector gv;
+             if (fnt instanceof Font)
+               gv = ((Font)fnt).createGlyphVector (fontRenderContext, proxy);
+             else
+               gv = defFont.createGlyphVector (fontRenderContext, proxy);
+ 
+             g2.drawGlyphVector (gv, x, y);
+ 
+             int n = gv.getNumGlyphs ();
+             for (int i = 0; i < n; ++i)
+               {
+                 GlyphMetrics gm = gv.getGlyphMetrics (i);
+                 if (gm.getAdvanceX() == gm.getAdvance ())
+                   x += gm.getAdvanceX ();
+                 else
+                   y += gm.getAdvanceY ();
+               }
+           }
+       }
+   }
+ 
+   public TextHitInfo getStrongCaret (TextHitInfo hit1, 
+                                      TextHitInfo hit2)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public byte getBaseline ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public boolean isLeftToRight ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public boolean isVertical ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public float getAdvance ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public float getAscent ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public float getDescent ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public float getLeading ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public int getCharacterCount ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public byte getCharacterLevel (int index)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public float[] getBaselineOffsets ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Shape getBlackBoxBounds (int firstEndpoint, int secondEndpoint)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Rectangle2D getBounds ()
+   {
+     double[] inkExtents = new double[4];
+     double[] logExtents = new double[4];
+     getExtents(inkExtents, logExtents);
+     return new Rectangle2D.Double(logExtents[0], logExtents[1],
+                                   logExtents[2], logExtents[3]);
+   }
+ 
+   public float[] getCaretInfo (TextHitInfo hit, Rectangle2D bounds)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Shape getCaretShape (TextHitInfo hit, Rectangle2D bounds)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Shape[] getCaretShapes (int offset, Rectangle2D bounds,
+                                  TextLayout.CaretPolicy policy)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint,
+                                          Rectangle2D bounds)
+   {
+     AffineTransform at = new AffineTransform();
+     GeneralPath gp = new GeneralPath();
+     double [] rect = new double[4];
+     Rectangle2D tmp = new Rectangle2D.Double();
+     for (int i = firstEndpoint; i <= secondEndpoint; ++i)
+       {
+         indexToPos(i, rect);
+         tmp.setRect(rect[0], rect[1], rect[2], rect[3]);
+         Rectangle2D.intersect(tmp, bounds, tmp);
+         gp.append(tmp.getPathIterator(at), false);
+       }
+     return gp;
+   }
+ 
+   public int[] getLogicalRangesForVisualSelection (TextHitInfo firstEndpoint,
+                                                    TextHitInfo secondEndpoint)
+   {
+     throw new Error("not implemented");
+   }
+   
+   public TextHitInfo getNextLeftHit (int offset, TextLayout.CaretPolicy policy)
+   {
+     throw new Error("not implemented");
+   }
+   public TextHitInfo getNextRightHit (int offset, TextLayout.CaretPolicy policy)
+   {
+     throw new Error("not implemented");
+   }
+   public TextHitInfo hitTestChar (float x, float y, Rectangle2D bounds)
+   {
+     throw new Error("not implemented");
+   }
+   public TextHitInfo getVisualOtherHit (TextHitInfo hit)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public float getVisibleAdvance ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public native Shape getOutline (AffineTransform tx);
+ 
+   public Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
+                                         TextHitInfo secondEndpoint,
+                                         Rectangle2D bounds)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   
+   public TextLayout getJustifiedLayout (float justificationWidth)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public void handleJustify (float justificationWidth)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Object clone ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public int hashCode ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public boolean equals (ClasspathTextLayoutPeer tl)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public String toString ()
+   {
+     throw new Error("not implemented");
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkButtonPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkButtonPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkButtonPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkButtonPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,95 ----
+ /* GtkButtonPeer.java -- Implements ButtonPeer with GTK
+    Copyright (C) 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Button;
+ import java.awt.Component;
+ import java.awt.Point;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
+ import java.awt.peer.ButtonPeer;
+ 
+ // A composite widget.  GtkButtons have transparent backgrounds.  An
+ // AWT Button is opaque.  To compensate, a GtkButtonPeer is a
+ // GtkButton packed in a GtkEventBox.
+ public class GtkButtonPeer extends GtkComponentPeer
+     implements ButtonPeer
+ {
+   native void create (String label);
+ 
+   public native void connectSignals ();
+ 
+   native void gtkWidgetModifyFont (String name, int style, int size);
+   native void gtkSetLabel (String label);
+   native void gtkWidgetSetForeground (int red, int green, int blue);
+   native void gtkWidgetSetBackground (int red, int green, int blue);
+   native void gtkActivate ();
+   native void gtkWidgetRequestFocus ();
+   native void setNativeBounds (int x, int y, int width, int height);
+ 
+   // Because this is a composite widget, we need to retrieve the
+   // GtkButton's preferred dimensions, not the enclosing
+   // GtkEventBox's.
+   native void gtkWidgetGetPreferredDimensions (int[] dim);
+ 
+   public GtkButtonPeer (Button b)
+   {
+     super (b);
+   }
+ 
+   void create ()
+   {
+     create (((Button) awtComponent).getLabel ());
+   }
+ 
+   public void setLabel (String label) 
+   {
+     gtkSetLabel(label);
+   }
+ 
+   void postActionEvent (int mods)
+   {
+     q().postEvent (new ActionEvent (awtWidget,
+ 				    ActionEvent.ACTION_PERFORMED,
+ 				    ((Button) awtComponent).getActionCommand (),
+ 				    mods));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* GtkCanvasPeer.java
+    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Canvas;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.event.PaintEvent;
+ import java.awt.peer.CanvasPeer;
+ 
+ public class GtkCanvasPeer extends GtkComponentPeer implements CanvasPeer
+ {
+   native void create ();
+ 
+   public GtkCanvasPeer (Canvas c)
+   {
+     super (c);
+   }
+ 
+   public Graphics getGraphics ()
+   {
+     if (GtkToolkit.useGraphics2D ())
+       return new GdkGraphics2D (this);
+     else
+     return new GdkGraphics (this);
+   }
+ 
+   public void handleEvent (AWTEvent event)
+   {
+     int id = event.getID();
+       
+     switch (id)
+       {
+       case PaintEvent.PAINT:
+       case PaintEvent.UPDATE:
+ 	{
+ 	  try 
+ 	    {
+ 	      Graphics g = getGraphics ();
+ 	      g.setClip (((PaintEvent)event).getUpdateRect());
+ 		
+ 	      if (id == PaintEvent.PAINT)
+ 		awtComponent.paint (g);
+ 	      else
+ 		awtComponent.update (g);
+ 	      
+ 	      g.dispose ();
+ 	    } 
+ 	  catch (InternalError e)
+ 	    { 
+ 	      System.err.println (e);
+ 	    }
+ 	}
+ 	break;
+       }
+   }
+ 
+   /* Preferred size for a drawing widget is always what the user requested */
+   public Dimension getPreferredSize ()
+   {
+     return awtComponent.getSize ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,86 ----
+ /* GtkCheckboxGroupPeer.java - Wrap a CheckboxGroup
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.CheckboxGroup;
+ import java.util.WeakHashMap;
+ 
+ // Note that there is no peer interface for a CheckboxGroup.  We
+ // introduce our own in order to make it easier to keep a piece of
+ // native state for each one.
+ public class GtkCheckboxGroupPeer extends GtkGenericPeer
+ {
+   // This maps from a CheckboxGroup to the native peer.
+   private static WeakHashMap map = new WeakHashMap ();
+ 
+   // Find the native peer corresponding to a CheckboxGroup.
+   public static synchronized GtkCheckboxGroupPeer
+       getCheckboxGroupPeer (CheckboxGroup group)
+   {
+     if (group == null)
+       return null;
+     GtkCheckboxGroupPeer nat = (GtkCheckboxGroupPeer) map.get (group);
+     if (nat == null)
+       {
+ 	nat = new GtkCheckboxGroupPeer ();
+ 	map.put (group, nat);
+       }
+     return nat;
+   }
+ 
+   private GtkCheckboxGroupPeer ()
+   {
+     // We don't need any special state here.  Note that we can't store
+     // a reference to the java-side CheckboxGroup.  That would mean
+     // they could never be collected.
+     super (null);
+   }
+ 
+   // Dispose of our native resources.
+   public native void dispose ();
+ 
+   // Remove a given checkbox from this group.
+   public native void remove (GtkCheckboxPeer box);
+ 
+   // When collected, clean up the native state.
+   protected void finalize ()
+   {
+     dispose ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* GtkCheckboxMenuItemPeer.java -- Implements CheckboxMenuItemPeer with GTK+
+    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.CheckboxMenuItem;
+ import java.awt.ItemSelectable;
+ import java.awt.event.ItemEvent;
+ import java.awt.peer.CheckboxMenuItemPeer;
+ 
+ public class GtkCheckboxMenuItemPeer extends GtkMenuItemPeer
+   implements CheckboxMenuItemPeer
+ {
+   native void create (String label);
+ 
+   public GtkCheckboxMenuItemPeer (CheckboxMenuItem menu)
+   {
+     super (menu);
+     setState (menu.getState ());
+   }
+ 
+   public native void setState(boolean t);
+ 
+   protected void postMenuActionEvent ()
+   {
+     CheckboxMenuItem item = (CheckboxMenuItem)awtWidget;
+     q().postEvent (new ItemEvent ((ItemSelectable)awtWidget,
+       ItemEvent.ITEM_STATE_CHANGED,
+       item.getActionCommand(),
+       item.getState() ? ItemEvent.DESELECTED : ItemEvent.SELECTED));
+ 
+     super.postMenuActionEvent();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,140 ----
+ /* GtkCheckboxPeer.java -- Implements CheckboxPeer with GTK
+    Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Checkbox;
+ import java.awt.CheckboxGroup;
+ import java.awt.peer.CheckboxPeer;
+ 
+ public class GtkCheckboxPeer extends GtkComponentPeer
+   implements CheckboxPeer
+ {
+   // Group from last time it was set.
+   public GtkCheckboxGroupPeer old_group;
+   // The current state of the GTK checkbox.
+   private boolean currentState;  
+   private boolean changing = false;
+ 
+   public native void create (GtkCheckboxGroupPeer group);
+   public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group);
+   public native void connectSignals ();
+   native void gtkWidgetModifyFont (String name, int style, int size);
+   native void gtkButtonSetLabel (String label);
+   native void gtkToggleButtonSetActive (boolean is_active);
+ 
+   public GtkCheckboxPeer (Checkbox c)
+   {
+     super (c);
+   }
+ 
+   // FIXME: we must be able to switch between a checkbutton and a
+   // radiobutton dynamically.
+   public void create ()
+   {
+     Checkbox checkbox = (Checkbox) awtComponent;
+     CheckboxGroup g = checkbox.getCheckboxGroup ();
+     old_group = GtkCheckboxGroupPeer.getCheckboxGroupPeer (g);
+     create (old_group);
+     gtkToggleButtonSetActive (checkbox.getState ());
+     gtkButtonSetLabel (checkbox.getLabel ());
+   }
+ 
+   public void setState (boolean state)
+   {
+     // prevent item_toggled_cb -> postItemEvent ->
+     // awtComponent.setState -> this.setState ->
+     // gtkToggleButtonSetActive self-deadlock on the GDK lock.
+     if (changing && Thread.currentThread() == GtkToolkit.mainThread)
+       {
+         changing = false;
+         return;
+       }
+ 
+     if (currentState != state)
+       gtkToggleButtonSetActive (state);
+   }
+ 
+   public void setLabel (String label)
+   {
+     gtkButtonSetLabel (label);
+   }
+ 
+   public void setCheckboxGroup (CheckboxGroup group)
+   {
+     GtkCheckboxGroupPeer gp
+       = GtkCheckboxGroupPeer.getCheckboxGroupPeer (group);
+     if (gp != old_group)
+       {
+ 	if (old_group != null)
+ 	  old_group.remove (this);
+ 	nativeSetCheckboxGroup (gp);
+ 	old_group = gp;
+       }
+   }
+ 
+   // Override the superclass postItemEvent so that the peer doesn't
+   // need information that we have.
+   // called back by native side: item_toggled_cb
+   public void postItemEvent (Object item, int stateChange)
+   {
+     Checkbox currentCheckBox = ((Checkbox)awtComponent);
+     // A firing of the event is only desired if the state has changed due to a 
+     // button press. The currentCheckBox's state must be different from the 
+     // one that the stateChange is changing to. 
+     // stateChange = 1 if it goes from false -> true
+     // stateChange = 2 if it goes from true -> false
+     if (( !currentCheckBox.getState() && stateChange == 1)
+         || (currentCheckBox.getState() && stateChange == 2))
+     {
+       super.postItemEvent (awtComponent, stateChange);
+       currentState = !currentCheckBox.getState();
+       changing = true;
+       currentCheckBox.setState(currentState);
+     }
+   }
+ 
+   public void dispose ()
+   {
+     // Notify the group so that the native state can be cleaned up
+     // appropriately.
+     if (old_group != null)
+       old_group.remove (this);
+     super.dispose ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkChoicePeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkChoicePeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkChoicePeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkChoicePeer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,136 ----
+ /* GtkChoicePeer.java -- Implements ChoicePeer with GTK
+    Copyright (C) 1998, 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Choice;
+ import java.awt.event.ItemEvent;
+ import java.awt.peer.ChoicePeer;
+ 
+ public class GtkChoicePeer extends GtkComponentPeer
+   implements ChoicePeer
+ {
+   public GtkChoicePeer (Choice c)
+   {
+     super (c);
+ 
+     int count = c.getItemCount ();
+     if (count > 0)
+       {
+ 	String items[] = new String[count];
+ 	for (int i = 0; i < count; i++)
+ 	  items[i] = c.getItem (i);
+ 	  
+ 	append (items);
+       }
+ 
+     int selected = c.getSelectedIndex();
+     if (selected >= 0)
+       select(selected);
+   }
+ 
+   native void create ();
+ 
+   native void append (String items[]);
+   native int nativeGetSelected ();
+   native void nativeAdd (String item, int index);
+   native void nativeRemove (int index);
+   native void nativeRemoveAll ();
+ 
+   native void connectSignals ();
+ 
+   native void selectNative (int position);
+   native void selectNativeUnlocked (int position);
+ 
+   public void select (int position)
+   {
+     if (Thread.currentThread() == GtkToolkit.mainThread)
+       selectNativeUnlocked (position);
+     else
+       selectNative (position);
+   }
+ 
+   public void add (String item, int index)
+   {
+     int before = nativeGetSelected();
+     
+     nativeAdd (item, index);
+     
+     /* Generate an ItemEvent if we added the first one or
+        if we inserted at or before the currently selected item. */
+     if ((before < 0) || (before >= index))
+       {
+         // Must set our state before notifying listeners
+ 	((Choice) awtComponent).select (((Choice) awtComponent).getItem (0));
+         postItemEvent (((Choice) awtComponent).getItem (0), ItemEvent.SELECTED);
+       }
+   }
+ 
+   public void remove (int index)
+   {
+     int before = nativeGetSelected();
+     int after;
+     
+     nativeRemove (index);
+     after = nativeGetSelected();
+     
+     /* Generate an ItemEvent if we are removing the currently selected item
+        and there are at least one item left. */
+     if ((before == index) && (after >= 0))
+       {
+         // Must set our state before notifying listeners
+ 	((Choice) awtComponent).select (((Choice) awtComponent).getItem (0));
+         postItemEvent (((Choice) awtComponent).getItem (0), ItemEvent.SELECTED);
+       }
+   }
+ 
+   public void removeAll ()
+   {
+     nativeRemoveAll();
+   }
+   
+   public void addItem (String item, int position)
+   {
+     add (item, position);
+   }
+ 
+   protected void postChoiceItemEvent (String label, int stateChange)
+   {
+     postItemEvent (label, stateChange);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboard.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboard.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboard.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboard.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,394 ----
+ /* GtkClipboard.java
+    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Image;
+ import java.awt.datatransfer.*;
+ 
+ import java.io.*;
+ 
+ import java.util.List;
+ import java.util.Iterator;
+ 
+ public class GtkClipboard extends Clipboard
+ {
+ 
+   // Given to the native side so it can signal special targets that
+   // can be converted to one of the special predefined DataFlavors.
+   static final String stringMimeType;
+   static final String imageMimeType;
+   static final String filesMimeType;
+ 
+   // Indicates whether the results of the clipboard selection can be
+   // cached by GtkSelection. True if
+   // gdk_display_supports_selection_notification.
+   static final boolean canCache;
+ 
+   static
+   {
+     stringMimeType = DataFlavor.stringFlavor.getMimeType();
+     imageMimeType = DataFlavor.imageFlavor.getMimeType();
+     filesMimeType = DataFlavor.javaFileListFlavor.getMimeType();
+ 
+     canCache = initNativeState(stringMimeType, imageMimeType, filesMimeType);
+   }
+ 
+   /**
+    * The one and only gtk+ clipboard instance.
+    */
+   private static GtkClipboard instance = new GtkClipboard();
+ 
+   /**
+    * Creates the clipboard and sets the initial contents to the
+    * current gtk+ selection.
+    */
+   private GtkClipboard()
+   {
+     super("System Clipboard");
+     setContents(new GtkSelection(), null);
+   }
+ 
+   /**
+    * Returns the one and only GtkClipboard instance.
+    */
+ 
+   static GtkClipboard getInstance()
+   {
+     return instance;
+   }
+ 
+   /**
+    * Sets the GtkSelection facade as new contents of the clipboard.
+    * Called from gtk+ when another application grabs the clipboard and
+    * we loose ownership.
+    */
+   private static void setSystemContents()
+   {
+     GtkClipboardNotifier.announce();
+   }
+ 
+   /**
+    * Sets the new contents and advertises the available flavors to the
+    * gtk+ clipboard.
+    */
+   public synchronized void setContents(Transferable contents,
+ 				       ClipboardOwner owner)
+   {
+     super.setContents(contents, owner);
+ 
+     if (contents == null)
+       {
+ 	advertiseContent(null, false, false, false);
+ 	return;
+       }
+ 
+     // We don't need to do anything for a GtkSelection facade.
+     if (contents instanceof GtkSelection)
+       return;
+ 
+     boolean text = false;
+     boolean images = false;
+     boolean files = false;
+ 
+     if (contents instanceof StringSelection
+ 	|| contents.isDataFlavorSupported(DataFlavor.stringFlavor)
+ 	|| contents.isDataFlavorSupported(DataFlavor.plainTextFlavor)
+ 	|| contents.isDataFlavorSupported(DataFlavor
+ 					  .getTextPlainUnicodeFlavor()))
+       text = true;
+ 
+     DataFlavor[] flavors = contents.getTransferDataFlavors();
+     String[] mimeTargets = new String[flavors.length];
+     for (int i = 0; i < flavors.length; i++)
+       {
+ 	DataFlavor flavor = flavors[i];
+ 	String mimeType = flavor.getMimeType();
+ 	mimeTargets[i] = mimeType;
+ 
+ 	if (! text)
+ 	  if ("text".equals(flavor.getPrimaryType())
+ 	      || flavor.isRepresentationClassReader())
+ 	    text = true;
+ 
+ 	// XXX - We only support automatic image conversion for
+ 	// GtkImages at the moment. So explicitly check that we have
+ 	// one.
+ 	if (! images && flavors[i].equals(DataFlavor.imageFlavor))
+ 	  {
+ 	    try
+ 	      {
+ 		Object o = contents.getTransferData(DataFlavor.imageFlavor);
+ 		if (o instanceof GtkImage)
+ 		  images = true;
+ 	      }
+ 	    catch (UnsupportedFlavorException ufe)
+ 	      {
+ 	      }
+ 	    catch (IOException ioe)
+ 	      {
+ 	      }
+ 	    catch (ClassCastException cce)
+ 	      {
+ 	      }
+ 	  }
+ 
+ 	if (flavors[i].equals(DataFlavor.javaFileListFlavor))
+ 	  files = true;
+       }
+ 
+     advertiseContent(mimeTargets, text, images, files);
+   }
+ 
+   /**
+    * Advertises new contents to the gtk+ clipboard given a string
+    * array of (mime-type) targets. When the boolean flags text, images
+    * and/or files are set then gtk+ is asked to also advertise the
+    * availability of any text, image or uri/file content types it
+    * supports. If targets is null (and all flags false) then the
+    * selection has explicitly been erased.
+    */
+   private native void advertiseContent(String[] targets,
+ 				       boolean text,
+ 				       boolean images,
+ 				       boolean files);
+   
+   /**
+    * Called by the gtk+ clipboard when an application has requested
+    * text.  Return a string representing the current clipboard
+    * contents or null when no text can be provided.
+    */
+   private String provideText()
+   {
+     Transferable contents = this.contents;
+     if (contents == null || contents instanceof GtkSelection)
+       return null;
+ 
+     // Handle StringSelection special since that is just pure text.
+     if (contents instanceof StringSelection)
+       {
+         try
+           {
+             return (String) contents.getTransferData(DataFlavor.stringFlavor);
+ 	  }
+         catch (UnsupportedFlavorException ufe)
+           {
+           }
+         catch (IOException ioe)
+           {
+           }
+         catch (ClassCastException cce)
+           {
+           }
+       }
+ 
+     // Try to get a plain text reader for the current contents and
+     // turn the result into a string.
+     try
+       {
+ 	DataFlavor plainText = DataFlavor.getTextPlainUnicodeFlavor();
+ 	Reader r = plainText.getReaderForText(contents);
+ 	if (r != null)
+ 	  {
+ 	    StringBuffer sb = new StringBuffer();
+ 	    char[] cs = new char[1024];
+ 	    int l = r.read(cs);
+ 	    while (l != -1)
+ 	      {
+ 		sb.append(cs, 0, l);
+ 		l = r.read(cs);
+ 	      }
+ 	    return sb.toString();
+ 	  }
+       }
+     catch (IllegalArgumentException iae)
+       {
+       }
+     catch (UnsupportedEncodingException iee)
+       {
+       }
+     catch (UnsupportedFlavorException ufe)
+       {
+       }
+     catch (IOException ioe)
+       {
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Called by the gtk+ clipboard when an application has requested an
+    * image.  Returns a GtkImage representing the current clipboard
+    * contents or null when no image can be provided.
+    */
+   private GtkImage provideImage()
+   {
+     Transferable contents = this.contents;
+     if (contents == null || contents instanceof GtkSelection)
+       return null;
+ 
+     try
+       {
+ 	return (GtkImage) contents.getTransferData(DataFlavor.imageFlavor);
+       }
+     catch (UnsupportedFlavorException ufe)
+       {
+       }
+     catch (IOException ioe)
+       {
+       }
+     catch (ClassCastException cce)
+       {
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Called by the gtk+ clipboard when an application has requested a
+    * uri-list.  Return a string array containing the URIs representing
+    * the current clipboard contents or null when no URIs can be
+    * provided.
+    */
+   private String[] provideURIs()
+   {
+     Transferable contents = this.contents;
+     if (contents == null || contents instanceof GtkSelection)
+       return null;
+ 
+     try
+       {
+ 	List list = (List) contents.getTransferData
+ 	  (DataFlavor.javaFileListFlavor);
+ 	String[] uris = new String[list.size()];
+ 	int u = 0;
+ 	Iterator it = list.iterator();
+ 	while (it.hasNext())
+ 	  uris[u++] = ((File) it.next()).toURI().toString();
+ 	return uris;
+       }
+     catch (UnsupportedFlavorException ufe)
+       {
+       }
+     catch (IOException ioe)
+       {
+       }
+     catch (ClassCastException cce)
+       {
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Called by gtk+ clipboard when an application requests the given
+    * target mime-type. Returns a byte array containing the requested
+    * data, or null when the contents cannot be provided in the
+    * requested target mime-type. Only called after any explicit text,
+    * image or file/uri requests have been handled earlier and failed.
+    */
+   private byte[] provideContent(String target)
+   {
+     // Sanity check. The callback could be triggered just after we
+     // changed the clipboard.
+     Transferable contents = this.contents;
+     if (contents == null || contents instanceof GtkSelection)
+       return null;
+ 
+     // XXX - We are being called from a gtk+ callback. Which means we
+     // should return as soon as possible and not call arbitrary code
+     // that could deadlock or go bonkers. But we don't really know
+     // what DataTransfer contents object we are dealing with. Same for
+     // the other provideXXX() methods.
+     try
+       {
+ 	DataFlavor flavor = new DataFlavor(target);
+ 	Object o = contents.getTransferData(flavor);
+ 
+ 	if (o instanceof byte[])
+ 	  return (byte[]) o;
+ 
+ 	if (o instanceof InputStream)
+ 	  {
+ 	    InputStream is = (InputStream) o;
+ 	    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ 	    byte[] bs = new byte[1024];
+ 	    int l = is.read(bs);
+ 	    while (l != -1)
+ 	      {
+ 		baos.write(bs, 0, l);
+ 		l = is.read(bs);
+ 	      }
+ 	    return baos.toByteArray();
+ 	  }
+ 
+ 	if (o instanceof Serializable)
+ 	  {
+ 	    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ 	    ObjectOutputStream oos = new ObjectOutputStream(baos);
+ 	    oos.writeObject(o);
+ 	    oos.close();
+ 	    return baos.toByteArray();
+ 	  }
+       }
+     catch (ClassNotFoundException cnfe)
+       {
+       }
+     catch (UnsupportedFlavorException ufe)
+       {
+       }
+     catch (IOException ioe)
+       {
+       }
+     catch (ClassCastException cce)
+       {
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Initializes the gtk+ clipboard and caches any native side
+    * structures needed. Returns whether or not the contents of the
+    * Clipboard can be cached (gdk_display_supports_selection_notification).
+    */
+   private static native boolean initNativeState(String stringTarget,
+ 						String imageTarget,
+ 						String filesTarget);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,112 ----
+ /* GtkClipboardNotifier.java -- Helper for announcing GtkSelection changes.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.datatransfer.*;
+ 
+ class GtkClipboardNotifier extends Thread
+ {
+   /** Whether or not to announce a GtkSelection change. */
+   private static boolean announceChange;
+ 
+   /**
+    * The one and only instance. All operations are synchronized on
+    * this.
+    */
+   private static GtkClipboardNotifier notifier = new GtkClipboardNotifier();
+ 
+   /**
+    * Creates a deamon thread that monitors this for change
+    * announcements.
+    */
+   private GtkClipboardNotifier()
+   {
+     super("GtkClipBoardNotifier");
+     setDaemon(true);
+     start();
+   }
+ 
+   /**
+    * Notifies that a new GtkSelection has to be announced.
+    */
+   static void announce()
+   {
+     synchronized (notifier)
+       {
+ 	announceChange = true;
+ 	notifier.notifyAll();
+       }
+   }
+ 
+   public void run()
+   {
+     final GtkClipboard clipboard = GtkClipboard.getInstance();
+     while (true)
+       {
+ 	synchronized (this)
+ 	  {
+ 	    while (!announceChange)
+ 	      {
+ 		try
+ 		  {
+ 		    this.wait();
+ 		  }
+ 		catch (InterruptedException ie)
+ 		  {
+ 		    // ignore
+ 		  }
+ 	      }
+ 	    announceChange = false;
+ 	  }
+ 
+ 	// Do the actual announcement without the lock held.  We will
+ 	// notice a new change after this notification has finished.
+ 	try
+ 	  {
+ 	    clipboard.setContents(new GtkSelection(), null);
+ 	  }
+ 	catch (Throwable t)
+ 	  {
+ 	    // should never happen, but might if we have some faulty
+ 	    // listener.
+ 	    t.printStackTrace();
+ 	  }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,744 ----
+ /* GtkComponentPeer.java -- Implements ComponentPeer with GTK
+    Copyright (C) 1998, 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.AWTException;
+ import java.awt.BufferCapabilities;
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Cursor;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.Image;
+ import java.awt.Insets;
+ import java.awt.ItemSelectable;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.Toolkit;
+ import java.awt.Window;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.ItemEvent;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.PaintEvent;
+ import java.awt.event.TextEvent;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.image.VolatileImage;
+ import java.awt.peer.ComponentPeer;
+ import java.awt.peer.ContainerPeer;
+ import java.awt.peer.WindowPeer;
+ import java.util.Timer;
+ import java.util.TimerTask;
+ 
+ public class GtkComponentPeer extends GtkGenericPeer
+   implements ComponentPeer
+ {
+   VolatileImage backBuffer;
+   BufferCapabilities caps;
+ 
+   Component awtComponent;
+ 
+   Insets insets;
+ 
+   boolean isInRepaint;
+ 
+   static final Timer repaintTimer = new Timer (true);
+ 
+   /* this isEnabled differs from Component.isEnabled, in that it
+      knows if a parent is disabled.  In that case Component.isEnabled 
+      may return true, but our isEnabled will always return false */
+   native boolean isEnabled ();
+   static native boolean modalHasGrab();
+ 
+   native int[] gtkWidgetGetForeground ();
+   native int[] gtkWidgetGetBackground ();
+   native void gtkWidgetGetDimensions (int[] dim);
+   native void gtkWidgetGetPreferredDimensions (int[] dim);
+   native void gtkWindowGetLocationOnScreen (int[] point);
+   native void gtkWidgetGetLocationOnScreen (int[] point);
+   native void gtkWidgetSetCursor (int type);
+   native void gtkWidgetSetCursorUnlocked (int type);
+   native void gtkWidgetSetBackground (int red, int green, int blue);
+   native void gtkWidgetSetForeground (int red, int green, int blue);
+   native void gtkWidgetSetSensitive (boolean sensitive);
+   native void gtkWidgetSetParent (ComponentPeer parent);
+   native void gtkWidgetRequestFocus ();
+   native void gtkWidgetDispatchKeyEvent (int id, long when, int mods,
+                                          int keyCode, int keyLocation);
+ 
+   native boolean isRealized ();
+ 
+   void realize ()
+   {
+     // Default implementation does nothing
+   }
+ 
+   native void setNativeEventMask ();
+ 
+   void create ()
+   {
+     throw new RuntimeException ();
+   }
+ 
+   native void connectSignals ();
+ 
+   protected GtkComponentPeer (Component awtComponent)
+   {
+     super (awtComponent);
+     this.awtComponent = awtComponent;
+     insets = new Insets (0, 0, 0, 0);
+ 
+     create ();
+ 
+     connectSignals ();
+ 
+     if (awtComponent.getForeground () != null)
+       setForeground (awtComponent.getForeground ());
+     if (awtComponent.getBackground () != null)
+       setBackground (awtComponent.getBackground ());
+     if (awtComponent.getFont() != null)
+       setFont(awtComponent.getFont());
+ 
+     Component parent = awtComponent.getParent ();
+ 
+     // Only set our parent on the GTK side if our parent on the AWT
+     // side is not showing.  Otherwise the gtk peer will be shown
+     // before we've had a chance to position and size it properly.
+     if (awtComponent instanceof Window
+         || (parent != null && ! parent.isShowing ()))
+       setParentAndBounds ();
+ 
+     setNativeEventMask ();
+ 
+     realize ();
+   }
+ 
+   void setParentAndBounds ()
+   {
+     setParent ();
+ 
+     setComponentBounds ();
+ 
+     setVisibleAndEnabled ();
+   }
+ 
+   void setParent ()
+   {
+     ComponentPeer p;
+     Component component = awtComponent;
+     do
+       {
+         component = component.getParent ();
+         p = component.getPeer ();
+       }
+     while (p instanceof java.awt.peer.LightweightPeer);
+ 
+     if (p != null)
+       gtkWidgetSetParent (p);
+   }
+ 
+   void beginNativeRepaint ()
+   {
+     isInRepaint = true;
+   }
+ 
+   void endNativeRepaint ()
+   {
+     isInRepaint = false;
+   }
+ 
+   /*
+    * Set the bounds of this peer's AWT Component based on dimensions
+    * returned by the native windowing system.  Most Components impose
+    * their dimensions on the peers which is what the default
+    * implementation does.  However some peers, like GtkFileDialogPeer,
+    * need to pass their size back to the AWT Component.
+    */
+   void setComponentBounds ()
+   {
+     Rectangle bounds = awtComponent.getBounds ();
+ 
+     if (bounds.x == 0 && bounds.y == 0
+         && bounds.width == 0 && bounds.height == 0)
+       return;
+ 
+     setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
+   }
+ 
+   void setVisibleAndEnabled ()
+   {
+     setVisible (awtComponent.isVisible ());
+     setEnabled (awtComponent.isEnabled ());
+   }
+ 
+   public int checkImage (Image image, int width, int height, 
+ 			 ImageObserver observer) 
+   {
+     return getToolkit().checkImage(image, width, height, observer);
+   }
+ 
+   public Image createImage (ImageProducer producer) 
+   {
+     return new GtkImage (producer);
+   }
+ 
+   public Image createImage (int width, int height)
+   {
+     Image image;
+     if (GtkToolkit.useGraphics2D ())
+       image = new BufferedImage (width, height, BufferedImage.TYPE_INT_RGB);
+     else
+       image = new GtkImage (width, height);
+ 
+     Graphics g = image.getGraphics();
+     g.setColor(getBackground());
+     g.fillRect(0, 0, width, height);
+     return image;
+   }
+ 
+   public void disable () 
+   {
+     setEnabled (false);
+   }
+ 
+   public void enable () 
+   {
+     setEnabled (true);
+   }
+ 
+   public ColorModel getColorModel () 
+   {
+     return ColorModel.getRGBdefault ();
+   }
+ 
+   public FontMetrics getFontMetrics (Font font)
+   {
+     return getToolkit().getFontMetrics(font);
+   }
+ 
+   public Graphics getGraphics ()
+   {
+     if (GtkToolkit.useGraphics2D ())
+         return new GdkGraphics2D (this);
+     else
+         return new GdkGraphics (this);
+   }
+ 
+   public Point getLocationOnScreen () 
+   { 
+     int point[] = new int[2];
+     if( this instanceof WindowPeer )
+       gtkWindowGetLocationOnScreen (point);
+     else
+       gtkWidgetGetLocationOnScreen (point);
+     return new Point (point[0], point[1]);
+   }
+ 
+   public Dimension getMinimumSize () 
+   {
+     return minimumSize ();
+   }
+ 
+   public Dimension getPreferredSize ()
+   {
+     return preferredSize ();
+   }
+ 
+   public Toolkit getToolkit ()
+   {
+     return Toolkit.getDefaultToolkit();
+   }
+   
+   public void handleEvent (AWTEvent event)
+   {
+     int id = event.getID();
+     KeyEvent ke = null;
+ 
+     switch (id)
+       {
+       case PaintEvent.PAINT:
+       case PaintEvent.UPDATE:
+         {
+           try 
+             {
+               Graphics g = getGraphics ();
+           
+               // Some peers like GtkFileDialogPeer are repainted by Gtk itself
+               if (g == null)
+                 break;
+ 
+               g.setClip (((PaintEvent) event).getUpdateRect());
+ 
+               if (id == PaintEvent.PAINT)
+                 awtComponent.paint (g);
+               else
+                 awtComponent.update (g);
+ 
+               g.dispose ();
+             }
+           catch (InternalError e)
+             {
+               System.err.println (e);
+             }
+         }
+         break;
+       case KeyEvent.KEY_PRESSED:
+         ke = (KeyEvent) event;
+         gtkWidgetDispatchKeyEvent (ke.getID (), ke.getWhen (), ke.getModifiersEx (),
+                                    ke.getKeyCode (), ke.getKeyLocation ());
+         break;
+       case KeyEvent.KEY_RELEASED:
+         ke = (KeyEvent) event;
+         gtkWidgetDispatchKeyEvent (ke.getID (), ke.getWhen (), ke.getModifiersEx (),
+                                    ke.getKeyCode (), ke.getKeyLocation ());
+         break;
+       }
+   }
+   
+   public boolean isFocusTraversable () 
+   {
+     return true;
+   }
+ 
+   public Dimension minimumSize () 
+   {
+     int dim[] = new int[2];
+ 
+     gtkWidgetGetPreferredDimensions (dim);
+ 
+     return new Dimension (dim[0], dim[1]);
+   }
+ 
+   public void paint (Graphics g)
+   {
+   }
+ 
+   public Dimension preferredSize ()
+   {
+     int dim[] = new int[2];
+ 
+     gtkWidgetGetPreferredDimensions (dim);
+ 
+     return new Dimension (dim[0], dim[1]);
+   }
+ 
+   public boolean prepareImage (Image image, int width, int height,
+ 			       ImageObserver observer) 
+   {
+     return getToolkit().prepareImage(image, width, height, observer);
+   }
+ 
+   public void print (Graphics g) 
+   {
+     throw new RuntimeException ();
+   }
+ 
+   public void repaint (long tm, int x, int y, int width, int height)
+   {
+     if (x == 0 && y == 0 && width == 0 && height == 0)
+       return;
+ 
+     repaintTimer.schedule(new RepaintTimerTask(x, y, width, height), tm);
+   }
+ 
+   private class RepaintTimerTask extends TimerTask
+   {
+     private int x, y, width, height;
+ 
+     RepaintTimerTask(int x, int y, int width, int height)
+     {
+       this.x = x;
+       this.y = y;
+       this.width = width;
+       this.height = height;
+     }
+ 
+     public void run()
+     {
+       q().postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
+                                      new Rectangle (x, y, width, height)));
+     }
+   }
+ 
+   public void requestFocus ()
+   {
+     gtkWidgetRequestFocus();
+     postFocusEvent(FocusEvent.FOCUS_GAINED, false);
+   }
+ 
+   public void reshape (int x, int y, int width, int height) 
+   {
+     setBounds (x, y, width, height);
+   }
+ 
+   public void setBackground (Color c) 
+   {
+     gtkWidgetSetBackground (c.getRed(), c.getGreen(), c.getBlue());
+   }
+ 
+   native void setNativeBounds (int x, int y, int width, int height);
+ 
+   public void setBounds (int x, int y, int width, int height)
+   {
+     int new_x = x;
+     int new_y = y;
+ 
+     Component parent = awtComponent.getParent ();
+     Component next_parent;
+ 
+     // Heavyweight components that are children of one or more
+     // lightweight containers have to be handled specially.  Because
+     // calls to GLightweightPeer.setBounds do nothing, GTK has no
+     // knowledge of the lightweight containers' positions.  So we have
+     // to add the offsets manually when placing a heavyweight
+     // component within a lightweight container.  The lightweight
+     // container may itself be in a lightweight container and so on,
+     // so we need to continue adding offsets until we reach a
+     // container whose position GTK knows -- that is, the first
+     // non-lightweight.
+     boolean lightweightChild = false;
+     Insets i;
+     while (parent.isLightweight ())
+       {
+ 	lightweightChild = true;
+ 
+         next_parent = parent.getParent ();
+ 
+ 	i = ((Container) parent).getInsets ();
+ 
+         if (next_parent instanceof Window)
+           {
+             new_x += i.left;
+             new_y += i.top;
+           }
+         else
+           {
+             new_x += parent.getX () + i.left;
+             new_y += parent.getY () + i.top;
+           }
+ 
+ 	parent = next_parent;
+       }
+ 
+     // We only need to convert from Java to GTK coordinates if we're
+     // placing a heavyweight component in a Window.
+     if (parent instanceof Window && !lightweightChild)
+       {
+         GtkWindowPeer peer = (GtkWindowPeer) parent.getPeer ();
+         // important: we want the window peer's insets here, not the
+         // window's, since user sub-classes of Window can override
+         // getInset and we only want to correct for the frame borders,
+         // not for any user-defined inset values
+         Insets insets = peer.getInsets ();
+ 
+         int menuBarHeight = 0;
+         if (peer instanceof GtkFramePeer)
+           menuBarHeight = ((GtkFramePeer) peer).getMenuBarHeight ();
+ 
+         new_x = x - insets.left;
+         new_y = y - insets.top + menuBarHeight;
+       }
+ 
+     setNativeBounds (new_x, new_y, width, height);
+   }
+ 
+   void setCursor ()
+   {
+     setCursor (awtComponent.getCursor ());
+   }
+ 
+   public void setCursor (Cursor cursor) 
+   {
+     if (Thread.currentThread() == GtkToolkit.mainThread)
+       gtkWidgetSetCursorUnlocked (cursor.getType ());
+     else
+       gtkWidgetSetCursor (cursor.getType ());
+   }
+ 
+   public void setEnabled (boolean b)
+   {
+     gtkWidgetSetSensitive (b);
+   }
+ 
+   public void setFont (Font f)
+   {
+     // FIXME: This should really affect the widget tree below me.
+     // Currently this is only handled if the call is made directly on
+     // a text widget, which implements setFont() itself.
+     gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
+   }
+ 
+   public void setForeground (Color c) 
+   {
+     gtkWidgetSetForeground (c.getRed(), c.getGreen(), c.getBlue());
+   }
+ 
+   public Color getForeground ()
+   {
+     int rgb[] = gtkWidgetGetForeground ();
+     return new Color (rgb[0], rgb[1], rgb[2]);
+   }
+ 
+   public Color getBackground ()
+   {
+     int rgb[] = gtkWidgetGetBackground ();
+     return new Color (rgb[0], rgb[1], rgb[2]);
+   }
+ 
+   public native void setVisibleNative (boolean b);
+   public native void setVisibleNativeUnlocked (boolean b);
+ 
+   public void setVisible (boolean b)
+   {
+     if (Thread.currentThread() == GtkToolkit.mainThread)
+       setVisibleNativeUnlocked (b);
+     else
+       setVisibleNative (b);
+   }
+ 
+   public void hide ()
+   {
+     setVisible (false);
+   }
+ 
+   public void show ()
+   {
+     setVisible (true);
+   }
+ 
+   protected void postMouseEvent(int id, long when, int mods, int x, int y, 
+ 				int clickCount, boolean popupTrigger) 
+   {
+     q().postEvent(new MouseEvent(awtComponent, id, when, mods, x, y, 
+ 			       clickCount, popupTrigger));
+   }
+ 
+   protected void postExposeEvent (int x, int y, int width, int height)
+   {
+     if (!isInRepaint)
+       q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+                                    new Rectangle (x, y, width, height)));
+   }
+ 
+   protected void postKeyEvent (int id, long when, int mods,
+                                int keyCode, char keyChar, int keyLocation)
+   {
+     KeyEvent keyEvent = new KeyEvent (awtComponent, id, when, mods,
+                                       keyCode, keyChar, keyLocation);
+ 
+     // Also post a KEY_TYPED event if keyEvent is a key press that
+     // doesn't represent an action or modifier key.
+     if (keyEvent.getID () == KeyEvent.KEY_PRESSED
+         && (!keyEvent.isActionKey ()
+             && keyCode != KeyEvent.VK_SHIFT
+             && keyCode != KeyEvent.VK_CONTROL
+             && keyCode != KeyEvent.VK_ALT))
+       {
+         synchronized (q)
+           {
+             q().postEvent (keyEvent);
+             q().postEvent (new KeyEvent (awtComponent, KeyEvent.KEY_TYPED, when, mods,
+                                         KeyEvent.VK_UNDEFINED, keyChar, keyLocation));
+           }
+       }
+     else
+       q().postEvent (keyEvent);
+   }
+ 
+   protected void postFocusEvent (int id, boolean temporary)
+   {
+     q().postEvent (new FocusEvent (awtComponent, id, temporary));
+   }
+ 
+   protected void postItemEvent (Object item, int stateChange)
+   {
+     q().postEvent (new ItemEvent ((ItemSelectable)awtComponent, 
+ 				ItemEvent.ITEM_STATE_CHANGED,
+ 				item, stateChange));
+   }
+ 
+   protected void postTextEvent ()
+   {
+     q().postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
+   }
+ 
+   public GraphicsConfiguration getGraphicsConfiguration ()
+   {
+     // FIXME: just a stub for now.
+     return null;
+   }
+ 
+   public void setEventMask (long mask)
+   {
+     // FIXME: just a stub for now.
+   }
+ 
+   public boolean isFocusable ()
+   {
+     return false;
+   }
+ 
+   public boolean requestFocus (Component source, boolean b1, 
+                                boolean b2, long x)
+   {
+     return false;
+   }
+ 
+   public boolean isObscured ()
+   {
+     return false;
+   }
+ 
+   public boolean canDetermineObscurity ()
+   {
+     return false;
+   }
+ 
+   public void coalescePaintEvent (PaintEvent e)
+   {
+     
+   }
+ 
+   public void updateCursorImmediately ()
+   {
+     if (awtComponent.getCursor() != null)
+       setCursor(awtComponent.getCursor());
+   }
+ 
+   public boolean handlesWheelScrolling ()
+   {
+     return false;
+   }
+ 
+   // Convenience method to create a new volatile image on the screen
+   // on which this component is displayed.
+   public VolatileImage createVolatileImage (int width, int height)
+   {
+     return new GtkVolatileImage (width, height);
+   }
+ 
+   // Creates buffers used in a buffering strategy.
+   public void createBuffers (int numBuffers, BufferCapabilities caps)
+     throws AWTException
+   {
+     // numBuffers == 2 implies double-buffering, meaning one back
+     // buffer and one front buffer.
+     if (numBuffers == 2)
+       backBuffer = new GtkVolatileImage(awtComponent.getWidth(),
+ 					awtComponent.getHeight(),
+ 					caps.getBackBufferCapabilities());
+     else
+       throw new AWTException("GtkComponentPeer.createBuffers:"
+ 			     + " multi-buffering not supported");
+     this.caps = caps;
+   }
+ 
+   // Return the back buffer.
+   public Image getBackBuffer ()
+   {
+     return backBuffer;
+   }
+ 
+   // FIXME: flip should be implemented as a fast native operation
+   public void flip (BufferCapabilities.FlipContents contents)
+   {
+     getGraphics().drawImage(backBuffer,
+ 			    awtComponent.getWidth(),
+ 			    awtComponent.getHeight(),
+ 			    null);
+ 
+     // create new back buffer and clear it to the background color.
+     if (contents == BufferCapabilities.FlipContents.BACKGROUND)
+ 	{
+ 	  backBuffer = createVolatileImage(awtComponent.getWidth(),
+ 					   awtComponent.getHeight());
+ 	  backBuffer.getGraphics().clearRect(0, 0,
+ 					     awtComponent.getWidth(),
+ 					     awtComponent.getHeight());
+ 	}
+     // FIXME: support BufferCapabilities.FlipContents.PRIOR
+   }
+ 
+   // Release the resources allocated to back buffers.
+   public void destroyBuffers ()
+   {
+     backBuffer.flush();
+   }
+   
+   public String toString ()
+   {
+     return "peer of " + awtComponent.toString();
+   }
+   public Rectangle getBounds()
+   {
+       // FIXME: implement
+     return null;
+   }
+   public void reparent(ContainerPeer parent)
+   {
+     // FIXME: implement
+   
+   }
+   public void setBounds(int x, int y, int width, int height, int z)
+   {
+     // FIXME: implement
+       setBounds (x, y, width, height);
+    
+   }
+   public boolean isReparentSupported()
+   {
+     // FIXME: implement
+ 
+     return false;
+   }
+   public void layout()
+   {
+     // FIXME: implement
+  
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,169 ----
+ /* GtkContainerPeer.java -- Implements ContainerPeer with GTK
+    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Font;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.Window;
+ import java.awt.peer.ComponentPeer;
+ import java.awt.peer.ContainerPeer;
+ 
+ public class GtkContainerPeer extends GtkComponentPeer
+   implements ContainerPeer
+ {
+   Container c;
+ 
+   public GtkContainerPeer(Container c)
+   {
+     super (c);
+     this.c = c;
+   }
+ 
+   public void beginValidate ()
+   {
+   }
+ 
+   public void endValidate ()
+   {
+     Component parent = awtComponent.getParent ();
+ 
+     // Only set our parent on the GTK side if our parent on the AWT
+     // side is not showing.  Otherwise the gtk peer will be shown
+     // before we've had a chance to position and size it properly.
+     if (parent != null && parent.isShowing ())
+       {
+         Component[] components = ((Container) awtComponent).getComponents ();
+         int ncomponents = components.length;
+ 
+         for (int i = 0; i < ncomponents; i++)
+           {
+             ComponentPeer peer = components[i].getPeer ();
+ 
+             // Skip lightweight peers.
+             if (peer instanceof GtkComponentPeer)
+               ((GtkComponentPeer) peer).setParentAndBounds ();
+           }
+ 
+         // GTK windows don't have parents.
+         if (!(awtComponent instanceof Window))
+           setParentAndBounds ();
+       }
+   }
+ 
+   public Insets getInsets() 
+   {
+     return insets;
+   }
+ 
+   public Insets insets() 
+   {
+     return getInsets ();
+   }
+ 
+   public void setBounds (int x, int y, int width, int height)
+   {
+     super.setBounds (x, y, width, height);
+   }
+ 
+   public void setFont(Font f)
+   {
+     super.setFont(f);
+     Component[] components = ((Container) awtComponent).getComponents();
+     for (int i = 0; i < components.length; i++)
+       {
+         if (components[i].isLightweight ())
+           components[i].setFont (f);
+         else
+           {
+             GtkComponentPeer peer = (GtkComponentPeer) components[i].getPeer();
+             if (peer != null && ! peer.awtComponent.isFontSet())
+               peer.setFont(f);
+           }
+       }
+   }
+ 
+   public Graphics getGraphics ()
+   {
+     return super.getGraphics();
+   }
+ 
+   public void beginLayout () { }
+   public void endLayout () { }
+   public boolean isPaintPending () { return false; }
+ 
+   public void setBackground (Color c)
+   {
+     super.setBackground(c);
+   
+     Object components[] = ((Container) awtComponent).getComponents();
+     for (int i = 0; i < components.length; i++)
+       {
+         Component comp = (Component) components[i];
+ 
+         // If the child's background has not been explicitly set yet,
+         // it should inherit this container's background. This makes the
+         // child component appear as if it has a transparent background.
+         // Note that we do not alter the background property of the child,
+         // but only repaint the child with the parent's background color.
+         if (!comp.isBackgroundSet() && comp.getPeer() != null)
+           comp.getPeer().setBackground(c);
+       }
+   }
+ 
+   public boolean isRestackSupported()
+   {
+       // FIXME: implement
+     return false;
+   }
+ 
+   public void cancelPendingPaint(int x, int y, int width, int height)
+   {
+     // FIXME: implement
+   }
+ 
+   public void restack()
+   {
+       //FIXME: implement
+     
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,94 ----
+ /* GtkDialogPeer.java -- Implements DialogPeer with GTK
+    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Dialog;
+ import java.awt.Graphics;
+ import java.awt.Rectangle;
+ import java.awt.event.PaintEvent;
+ import java.awt.peer.DialogPeer;
+ 
+ public class GtkDialogPeer extends GtkWindowPeer
+   implements DialogPeer
+ {
+   public GtkDialogPeer (Dialog dialog)
+   {
+     super (dialog);
+   }
+   
+   public Graphics getGraphics ()
+   {
+     Graphics g;
+     if (GtkToolkit.useGraphics2D ())
+       g = new GdkGraphics2D (this);
+     else
+       g = new GdkGraphics (this);
+     g.translate (-insets.left, -insets.top);
+     return g;
+   }  
+   
+   protected void postMouseEvent(int id, long when, int mods, int x, int y, 
+ 				int clickCount, boolean popupTrigger)
+   {
+     super.postMouseEvent (id, when, mods, 
+ 			  x + insets.left, y + insets.top, 
+ 			  clickCount, popupTrigger);
+   }
+ 
+   protected void postExposeEvent (int x, int y, int width, int height)
+   {
+     if (!isInRepaint)
+       q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+                                    new Rectangle (x + insets.left, 
+                                                   y + insets.top, 
+                                                   width, height)));
+   }
+ 
+   void create ()
+   {
+     Dialog dialog = (Dialog) awtComponent;
+     
+     // Create a decorated dialog window.
+     create (GDK_WINDOW_TYPE_HINT_DIALOG, !((Dialog) awtComponent).isUndecorated ());
+ 
+     gtkWindowSetModal (dialog.isModal ());
+     setTitle (dialog.getTitle ());
+     setResizable (dialog.isResizable ());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* GtkEmbeddedWindowPeer.java -- Implements EmbeddedWindowPeer using a
+    GtkPlug
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.java.awt.EmbeddedWindow;
+ import gnu.java.awt.peer.EmbeddedWindowPeer;
+ 
+ public class GtkEmbeddedWindowPeer extends GtkFramePeer
+   implements EmbeddedWindowPeer
+ {
+   native void create (long socket_id);
+ 
+   void create ()
+   {
+     create (((EmbeddedWindow) awtComponent).getHandle ());
+   }
+ 
+   native void construct (long socket_id);
+ 
+   // FIXME: embed doesn't work right now, though I believe it should.
+   // This means that you can't call setVisible (true) on an
+   // EmbeddedWindow before calling setHandle with a valid handle.  The
+   // problem is that somewhere after the call to
+   // GtkEmbeddedWindow.create and before the call to
+   // GtkEmbeddedWindow.construct, the GtkPlug peer is being realized.
+   // GtkSocket silently fails to embed an already-realized GtkPlug.
+   public void embed (long handle)
+   {
+     construct (handle);
+   }
+ 
+   public GtkEmbeddedWindowPeer (EmbeddedWindow w)
+   {
+     super (w);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,227 ----
+ /* GtkFileDialogPeer.java -- Implements FileDialogPeer with GTK
+    Copyright (C) 1998, 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Dialog;
+ import java.awt.FileDialog;
+ import java.awt.Graphics;
+ import java.awt.Window;
+ import java.awt.event.ComponentEvent;
+ import java.awt.peer.FileDialogPeer;
+ import java.io.File;
+ import java.io.FilenameFilter;
+ 
+ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
+ {
+   static final String FS = System.getProperty("file.separator");
+   
+   private String currentFile = null;
+   private String currentDirectory = null;
+   private FilenameFilter filter;
+ 
+   native void create (GtkContainerPeer parent, int mode);
+   native void connectSignals ();
+   native void nativeSetFile (String file);
+   public native String nativeGetDirectory();
+   public native void nativeSetDirectory(String directory);
+   native void nativeSetFilenameFilter (FilenameFilter filter);
+ 
+   public void create()
+   {
+     create((GtkContainerPeer) awtComponent.getParent().getPeer(),
+            ((FileDialog) awtComponent).getMode());
+ 
+     FileDialog fd = (FileDialog) awtComponent;
+ 
+     setDirectory(fd.getDirectory());
+     setFile(fd.getFile());
+ 
+     FilenameFilter filter = fd.getFilenameFilter();
+     if (filter != null)
+       setFilenameFilter(filter);
+   }
+ 
+   public GtkFileDialogPeer (FileDialog fd)
+   {
+     super (fd);
+   }
+ 
+   void setComponentBounds ()
+   {
+     if (awtComponent.getHeight () == 0
+         && awtComponent.getWidth () == 0)
+       {
+         int[] dims = new int[2];
+         gtkWidgetGetPreferredDimensions (dims);
+ 
+         if (dims[0] != awtComponent.getWidth()
+             || dims[1] != awtComponent.getHeight())
+           awtComponent.setSize(dims[0], dims[1]);
+       }
+     super.setComponentBounds ();
+   }
+ 
+   public void setFile (String fileName)
+   {
+     /* If nothing changed do nothing.  This usually happens because
+        the only way we have to set the file name in FileDialog is by
+        calling its SetFile which will call us back. */
+     if ((fileName == null && currentFile == null)
+         || (fileName != null && fileName.equals (currentFile)))
+       return;
+ 
+     if (fileName == null || fileName.equals (""))
+       {
+         currentFile = "";
+         nativeSetFile ("");
+         return;
+       }
+ 
+     // GtkFileChooser requires absolute filenames. If the given filename
+     // is not absolute, let's construct it based on current directory.
+     currentFile = fileName;
+     if (fileName.indexOf(FS) == 0)
+       {
+         nativeSetFile (fileName);
+       }
+     else
+       {
+         nativeSetFile (nativeGetDirectory() + FS + fileName);
+       }
+   }
+ 
+   public void setDirectory (String directory)
+   {
+     /* If nothing changed so nothing.  This usually happens because
+        the only way we have to set the directory in FileDialog is by
+        calling its setDirectory which will call us back. */
+     if ((directory == null && currentDirectory == null)
+         || (directory != null && directory.equals (currentDirectory)))
+       return;
+ 
+     if (directory == null || directory.equals (""))
+       {
+         currentDirectory = FS;
+         nativeSetFile (FS);
+ 	return;
+       }
+       
+     currentDirectory = directory;
+     nativeSetDirectory (directory);
+   }
+ 
+   public void setFilenameFilter (FilenameFilter filter)
+   {
+     this.filter = filter;
+     nativeSetFilenameFilter(filter);
+   }
+ 
+   /* This method interacts with the native callback function of the
+      same name.  The native function will extract the filename from the
+      GtkFileFilterInfo object and send it to this method, which will
+      in turn call the filter's accept() method and give back the return
+      value. */
+   // called back by native side: filename_filter_cb
+   boolean filenameFilterCallback (String fullname) {
+     String filename = fullname.substring(fullname.lastIndexOf(FS) + 1);
+     String dirname = fullname.substring(0, fullname.lastIndexOf(FS));
+     File dir = new File(dirname);
+     return filter.accept(dir, filename);
+   }
+ 
+   public Graphics getGraphics ()
+   {
+     // GtkFileDialog will repaint by itself
+     return null;
+   }
+ 
+   // called back by native side: handle_response_cb
+   // only called from the GTK thread
+   void gtkHideFileDialog () 
+   {
+     // hide calls back the peer's setVisible method, so locking is a
+     // problem.
+     ((Dialog) awtComponent).hide();
+   }
+   
+   // called back by native side: handle_response_cb
+   void gtkDisposeFileDialog () 
+   {
+     ((Dialog) awtComponent).dispose();
+   }
+ 
+   // Callback to set the file and directory values when the user is finished
+   // with the dialog.
+   // called back by native side: handle_response_cb
+   void gtkSetFilename (String fileName)
+   {
+     FileDialog fd = (FileDialog) awtWidget;
+     if (fileName == null)
+       {
+         currentFile = null;
+         fd.setFile(null);
+         return;
+       }
+ 
+     int sepIndex = fileName.lastIndexOf (FS);
+     if (sepIndex < 0)
+       {
+         /* This should never happen on Unix (all paths start with '/') */
+ 	currentFile = fileName;
+       }
+     else
+       {
+         if (fileName.length() > (sepIndex + 1))
+ 	  {
+ 	    String fn = fileName.substring (sepIndex + 1);
+ 	    currentFile = fn;
+ 	  }
+ 	else
+ 	  {
+             currentFile = null;
+ 	  }
+ 
+         String dn = fileName.substring (0, sepIndex + 1);
+         currentDirectory = dn;
+         fd.setDirectory(dn);
+       }
+ 
+     fd.setFile (currentFile);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,225 ----
+ /* GtkFontPeer.java -- Implements FontPeer with GTK+
+    Copyright (C) 1999, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.java.awt.peer.ClasspathFontPeer;
+ 
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.font.LineMetrics;
+ import java.awt.geom.Rectangle2D;
+ import java.text.CharacterIterator;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ 
+ public class GtkFontPeer extends ClasspathFontPeer
+ {
+   private static ResourceBundle bundle;
+ 
+   static
+   {
+     try
+       {
+ 	bundle = ResourceBundle.getBundle ("gnu.java.awt.peer.gtk.font");
+       }
+     catch (Throwable ignored)
+       {
+ 	bundle = null;
+       }
+   }
+ 
+   private final String Xname;
+ 
+   public GtkFontPeer (String name, int style)
+   {
+     // All fonts get a default size of 12 if size is not specified.
+     this(name, style, 12);
+   }
+ 
+   public GtkFontPeer (String name, int style, int size)
+   {
+     super(name, style, size);
+ 
+     String Xname = null;
+     if (bundle != null)
+       {
+ 	try
+ 	  {
+ 	    Xname = bundle.getString (name.toLowerCase () + "." + style);
+ 	  }
+ 	catch (MissingResourceException mre)
+ 	  {
+ 	    // ignored
+ 	  }
+       }
+ 
+     if (Xname == null)
+       {
+ 	String weight;
+ 	String slant;
+ 	String spacing;
+ 
+ 	if (style == Font.ITALIC || (style == (Font.BOLD+Font.ITALIC)))
+ 	  slant = "i";
+ 	else
+ 	  slant = "r";
+ 	if (style == Font.BOLD || (style == (Font.BOLD+Font.ITALIC)))
+ 	  weight = "bold";
+ 	else
+ 	  weight = "medium";
+ 	if (name.equals("Serif") || name.equals("SansSerif")
+ 	    || name.equals("Helvetica") || name.equals("Times"))
+ 	  spacing = "p";
+ 	else
+ 	  spacing = "c";
+ 
+         Xname = "-*-*-" + weight + "-" + slant + "-normal-*-*-" + size + "-*-*-" + spacing + "-*-*-*";
+       }
+ 
+     this.Xname = Xname;
+   }
+ 
+   public String getXLFD ()
+   {
+     return Xname;
+   }
+ 
+ 
+   /* remaining methods are for static compatibility with the newer
+      ClasspathFontPeer superclass; none of these methods ever existed or
+      worked on the older FontPeer interface, but we need to pretend to
+      support them anyways. */
+ 
+   public boolean canDisplay (Font font, char c)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public int canDisplayUpTo (Font font, CharacterIterator i, int start, int limit)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public String getSubFamilyName (Font font, Locale locale)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public String getPostScriptName (Font font)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public int getNumGlyphs (Font font)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public int getMissingGlyphCode (Font font)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public byte getBaselineFor (Font font, char c)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public String getGlyphName (Font font, int glyphIndex)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public GlyphVector createGlyphVector (Font font,
+                                                  FontRenderContext frc,
+                                                  CharacterIterator ci)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public GlyphVector createGlyphVector (Font font, 
+                                                  FontRenderContext ctx, 
+                                                  int[] glyphCodes)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public GlyphVector layoutGlyphVector (Font font, 
+                                                  FontRenderContext frc, 
+                                                  char[] chars, int start, 
+                                                  int limit, int flags)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public FontMetrics getFontMetrics (Font font)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public boolean hasUniformLineMetrics (Font font)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public LineMetrics getLineMetrics (Font font, 
+                                               CharacterIterator ci, 
+                                               int begin, int limit, 
+                                               FontRenderContext rc)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public Rectangle2D getMaxCharBounds (Font font, 
+                                                 FontRenderContext rc)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public Rectangle2D getStringBounds (Font font, 
+                                                CharacterIterator ci, 
+                                                int begin, int limit, 
+                                                FontRenderContext frc)
+   {
+     throw new UnsupportedOperationException();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,279 ----
+ /* GtkFramePeer.java -- Implements FramePeer with GTK
+    Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Frame;
+ import java.awt.Graphics;
+ import java.awt.Image;
+ import java.awt.MenuBar;
+ import java.awt.Rectangle;
+ import java.awt.Window;
+ import java.awt.event.ComponentEvent;
+ import java.awt.event.PaintEvent;
+ import java.awt.image.ColorModel;
+ import java.awt.peer.FramePeer;
+ import java.awt.peer.MenuBarPeer;
+ 
+ public class GtkFramePeer extends GtkWindowPeer
+     implements FramePeer
+ {
+   private int menuBarHeight;
+   private MenuBarPeer menuBar;
+   native int getMenuBarHeight (MenuBarPeer bar);
+   native void setMenuBarWidthUnlocked (MenuBarPeer bar, int width);
+   native void setMenuBarWidth (MenuBarPeer bar, int width);
+   native void setMenuBarPeer (MenuBarPeer bar);
+   native void removeMenuBarPeer ();
+   native void gtkFixedSetVisible (boolean visible);
+ 
+   int getMenuBarHeight ()
+   {
+     return menuBar == null ? 0 : getMenuBarHeight (menuBar);
+   }
+ 
+   public void setMenuBar (MenuBar bar)
+   {
+     if (bar == null && menuBar != null)
+       {
+         // We're removing the menubar.
+         gtkFixedSetVisible (false);
+         menuBar = null;
+         removeMenuBarPeer ();
+         insets.top -= menuBarHeight;
+         menuBarHeight = 0;
+         awtComponent.validate ();
+         gtkFixedSetVisible (true);
+       }
+     else if (bar != null && menuBar == null)
+       {
+         // We're adding a menubar where there was no menubar before.
+         gtkFixedSetVisible (false);
+         menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
+         setMenuBarPeer (menuBar);
+         int menuBarWidth =
+           awtComponent.getWidth () - insets.left - insets.right;
+         if (menuBarWidth > 0)
+           setMenuBarWidth (menuBar, menuBarWidth);
+         menuBarHeight = getMenuBarHeight ();
+         insets.top += menuBarHeight;
+         awtComponent.validate ();
+         gtkFixedSetVisible (true);
+       }
+     else if (bar != null && menuBar != null)
+       {
+         // We're swapping the menubar.
+         gtkFixedSetVisible (false);
+         removeMenuBarPeer();
+         int oldHeight = menuBarHeight;
+         int menuBarWidth =
+           awtComponent.getWidth () - insets.left - insets.right;
+         menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer ();
+         setMenuBarPeer (menuBar);
+         if (menuBarWidth > 0)
+           setMenuBarWidth (menuBar, menuBarWidth);
+         menuBarHeight = getMenuBarHeight ();
+         if (oldHeight != menuBarHeight)
+           {
+             insets.top += (menuBarHeight - oldHeight);
+             awtComponent.validate ();
+           }
+         gtkFixedSetVisible (true);
+       }
+   }
+ 
+   public void setBounds (int x, int y, int width, int height)
+   {
+     // prevent window_configure_cb -> awtComponent.setSize ->
+     // peer.setBounds -> nativeSetBounds self-deadlock on GDK lock.
+     if (Thread.currentThread() == GtkToolkit.mainThread)
+       {
+         int menuBarWidth = width - insets.left - insets.right;
+         if (menuBar != null && menuBarWidth > 0)
+           setMenuBarWidthUnlocked (menuBar, menuBarWidth);
+ 
+         return;
+       }
+ 
+     int menuBarWidth = width - insets.left - insets.right;
+     if (menuBar != null && menuBarWidth > 0)
+       setMenuBarWidth (menuBar, menuBarWidth);
+ 
+     nativeSetBounds (x, y,
+ 		     width - insets.left - insets.right,
+ 		     height - insets.top - insets.bottom
+ 		     + menuBarHeight);
+   }  
+   
+   public void setResizable (boolean resizable)
+   {
+     // Call setSize; otherwise when resizable is changed from true to
+     // false the frame will shrink to the dimensions it had before it
+     // was resizable.
+     setSize (awtComponent.getWidth() - insets.left - insets.right,
+              awtComponent.getHeight() - insets.top - insets.bottom
+              + menuBarHeight);
+     gtkWindowSetResizable (resizable);
+   }
+ 
+   protected void postInsetsChangedEvent (int top, int left,
+ 					 int bottom, int right)
+   {
+     insets.top = top + menuBarHeight;
+     insets.left = left;
+     insets.bottom = bottom;
+     insets.right = right;
+   }
+ 
+   public GtkFramePeer (Frame frame)
+   {
+     super (frame);
+   }
+ 
+   void create ()
+   {
+     // Create a normal decorated window.
+     create (GDK_WINDOW_TYPE_HINT_NORMAL,
+             !((Frame) awtComponent).isUndecorated ());
+ 
+     Frame frame = (Frame) awtComponent;
+ 
+     setMenuBar (frame.getMenuBar ());
+ 
+     setTitle (frame.getTitle ());
+     gtkWindowSetResizable (frame.isResizable ());
+     setIconImage(frame.getIconImage());
+   }
+ 
+   native void nativeSetIconImage (GtkImage image);
+ 
+   public void setIconImage (Image image) 
+   {
+       if (image != null)
+ 	{
+ 	  if (image instanceof GtkImage)
+ 	    nativeSetIconImage((GtkImage) image);
+ 	  else
+ 	    nativeSetIconImage(new GtkImage(image.getSource()));
+ 	}
+   }
+ 
+   public Graphics getGraphics ()
+   {
+     Graphics g;
+     if (GtkToolkit.useGraphics2D ())
+       g = new GdkGraphics2D (this);
+     else
+       g = new GdkGraphics (this);
+     g.translate (-insets.left, -insets.top);
+     return g;
+   }
+   
+   protected void postConfigureEvent (int x, int y, int width, int height)
+   {
+     int frame_width = width + insets.left + insets.right;
+     // Since insets.top already includes the MenuBar's height, we need
+     // to subtract the MenuBar's height from the top inset.
+     int frame_height = height + insets.top + insets.bottom - menuBarHeight;
+ 
+     if (frame_width != awtComponent.getWidth()
+         || frame_height != awtComponent.getHeight())
+       awtComponent.setSize(frame_width, frame_height);
+ 
+     int frame_x = x - insets.left;
+     // Likewise, since insets.top includes the MenuBar height, we need
+     // to add back the MenuBar height to the frame's y position.  If
+     // no MenuBar exists in this frame, the MenuBar height will be 0.
+     int frame_y = y - insets.top + menuBarHeight;
+ 
+     if (frame_x != awtComponent.getX()
+         || frame_y != awtComponent.getY())
+       {
+         // awtComponent.setLocation(frame_x, frame_y);
+       }
+   }
+ 
+   protected void postMouseEvent(int id, long when, int mods, int x, int y, 
+ 				int clickCount, boolean popupTrigger)
+   {
+     super.postMouseEvent (id, when, mods, 
+ 			  x + insets.left, y + insets.top, 
+ 			  clickCount, popupTrigger);
+   }
+ 
+   protected void postExposeEvent (int x, int y, int width, int height)
+   {
+     if (!isInRepaint)
+       q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+                                    new Rectangle (x + insets.left, 
+                                                   y + insets.top, 
+                                                   width, height)));
+   }
+ 
+   public int getState ()
+   {
+     return 0;
+   }
+ 
+   public void setState (int state)
+   {
+ 
+   }
+ 
+   public void setMaximizedBounds (Rectangle r)
+   {
+ 
+   }
+   public void setBoundsPrivate(int x, int y, int width, int height)
+   {
+     // TODO Auto-generated method stub
+     
+   }
+   public void updateAlwaysOnTop()
+   {
+     // TODO Auto-generated method stub
+     
+   }
+   public boolean requestWindowFocus()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkGenericPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkGenericPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkGenericPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkGenericPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* GtkGenericPeer.java - Has a hashcode.  Yuck.
+    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.EventQueue;
+ import java.awt.Toolkit;
+ import java.awt.event.ActionEvent;
+ 
+ public class GtkGenericPeer
+ {
+   final int native_state = getUniqueInteger ();
+ 
+   // Next native state value we will assign.
+   private static int next_native_state = 0;
+ 
+   // The widget or other java-side object we wrap.
+   protected Object awtWidget;
+ 
+   // Global event queue.
+   protected static EventQueue q = null;
+ 
+   // Dispose of our native state.
+   public native void dispose ();
+ 
+   static EventQueue q ()
+   {
+     return Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+   }
+ 
+   protected GtkGenericPeer (Object awtWidget)
+   {
+     this.awtWidget = awtWidget;
+   }
+ 
+   public static void enableQueue (EventQueue sq) 
+   {
+     if (q == null)
+       q = sq;
+   }
+ 
+   protected void postActionEvent (String command, int mods) 
+   {
+     q().postEvent (new ActionEvent (awtWidget, ActionEvent.ACTION_PERFORMED, 
+ 				  command, mods));
+   }
+ 
+   // Return a unique integer for use in the native state mapping
+   // code.  We can't use a hash code since that is not guaranteed to
+   // be unique.
+   static synchronized int getUniqueInteger ()
+   {
+     // Let's assume this will never wrap.
+     return next_native_state++;
+   }
+ 
+   native void gtkWidgetModifyFont (String name, int style, int size);
+ 
+   static void printCurrentThread ()
+   {
+     System.out.println ("gtkgenericpeer, thread: " + Thread.currentThread ());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkImage.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkImage.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkImage.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,588 ----
+ /* GtkImage.java
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Graphics;
+ import java.awt.Color;
+ import java.awt.Image;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.MemoryImageSource;
+ import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.io.File;
+ import java.io.IOException;
+ import java.util.Hashtable;
+ import java.util.Vector;
+ import java.io.ByteArrayOutputStream;
+ import java.io.BufferedInputStream;
+ import java.net.URL;
+ import gnu.classpath.Pointer;
+ 
+ /**
+  * GtkImage - wraps a GdkPixbuf or GdkPixmap.
+  *
+  * The constructor GtkImage(int, int) creates an 'off-screen' GdkPixmap,
+  * this can be drawn to (it's a GdkDrawable), and correspondingly, you can
+  * create a GdkGraphics object for it. 
+  *
+  * This corresponds to the Image implementation returned by 
+  * Component.createImage(int, int). 
+  *
+  * A GdkPixbuf is 'on-screen' and the gdk cannot draw to it,
+  * this is used for the other constructors (and other createImage methods), and
+  * corresponds to the Image implementations returned by the Toolkit.createImage
+  * methods, and is basically immutable. 
+  *
+  * @author Sven de Marothy
+  */
+ public class GtkImage extends Image
+ {
+   int width = -1, height = -1;
+ 
+   /**
+    * Properties.
+    */
+   Hashtable props;
+ 
+   /**
+    * Loaded or not flag, for asynchronous compatibility.
+    */
+   boolean isLoaded;
+ 
+   /**
+    * Pointer to the GdkPixbuf
+    */
+   Pointer pixmap;
+ 
+   /**
+    * Observer queue.
+    */
+   Vector observers;
+ 
+   /**
+    * If offScreen is set, a GdkBitmap is wrapped and not a Pixbuf.
+    */
+   boolean offScreen;
+ 
+   /**
+    * Error flag for loading.
+    */
+   boolean errorLoading;
+ 
+   /**
+    * Original source, if created from an ImageProducer.
+    */
+   ImageProducer source;
+ 
+   /*
+    * The 32-bit AABBGGRR format the GDK uses.
+    */
+   static ColorModel nativeModel = new DirectColorModel(32, 
+ 						       0x000000FF,
+ 						       0x0000FF00,
+ 						       0x00FF0000,
+ 						       0xFF000000);
+ 
+   /**
+    * Returns a copy of the pixel data as a java array.
+    */
+   private native int[] getPixels();
+ 
+   /**
+    * Sets the pixel data from a java array.
+    */
+   private native void setPixels(int[] pixels);
+ 
+   /**
+    * Loads an image using gdk-pixbuf from a file.
+    */
+   private native boolean loadPixbuf(String name);
+ 
+   /**
+    * Loads an image using gdk-pixbuf from data.
+    */
+   private native boolean loadImageFromData(byte[] data);
+ 
+   /**
+    * Allocates a Gtk Pixbuf or pixmap
+    */
+   private native void createPixmap();
+ 
+   /**
+    * Frees the above.
+    */
+   private native void freePixmap();
+ 
+   /**
+    * Sets the pixmap to scaled copy of src image. hints are rendering hints.
+    */
+   private native void createScaledPixmap(GtkImage src, int hints);
+ 
+   /**
+    * Draws the image, optionally scaled and composited.
+    */
+   private native void drawPixelsScaled (GdkGraphics gc, 
+ 					int bg_red, int bg_green, int bg_blue, 
+ 					int x, int y, int width, int height, 
+ 					boolean composite);
+ 
+   /**
+    * Draws the image, optionally scaled flipped and composited.
+    */
+   private native void drawPixelsScaledFlipped (GdkGraphics gc, 
+ 					       int bg_red, int bg_green, 
+ 					       int bg_blue, 
+ 					       boolean flipX, boolean flipY,
+ 					       int srcX, int srcY,
+ 					       int srcWidth, int srcHeight,
+ 					       int dstX, int dstY,
+ 					       int dstWidth, int dstHeight,
+ 					       boolean composite);
+ 
+   /**
+    * Constructs a GtkImage from an ImageProducer. Asynchronity is handled in
+    * the following manner: 
+    * A GtkImageConsumer gets the image data, and calls setImage() when 
+    * completely finished. The GtkImage is not considered loaded until the
+    * GtkImageConsumer is completely finished. We go for all "all or nothing".
+    */
+   public GtkImage (ImageProducer producer)
+   {
+     isLoaded = false;
+     observers = new Vector();
+     source = producer;
+     errorLoading = false;
+     source.startProduction(new GtkImageConsumer(this, source));
+     offScreen = false;
+   }
+ 
+   /**
+    * Constructs a blank GtkImage.  This is called when
+    * GtkToolkit.createImage (String) is called with an empty string
+    * argument ("").  A blank image is loaded immediately upon
+    * construction and has width -1 and height -1.
+    */
+   public GtkImage ()
+   {
+     isLoaded = true;
+     observers = null;
+     offScreen = false;
+     props = new Hashtable();
+     errorLoading = false;
+   }
+ 
+   /**
+    * Constructs a GtkImage by loading a given file.
+    *
+    * @throws IllegalArgumentException if the image could not be loaded.
+    */
+   public GtkImage (String filename)
+   {
+     File f = new File(filename);
+     try
+       {
+ 	if (loadPixbuf(f.getCanonicalPath()) != true)
+ 	  throw new IllegalArgumentException("Couldn't load image: "+filename);
+       } 
+     catch(IOException e)
+       {
+ 	  throw new IllegalArgumentException("Couldn't load image: "+filename);
+       }
+ 
+     isLoaded = true;
+     observers = null;
+     offScreen = false;
+     props = new Hashtable();
+   }
+ 
+   /**
+    * Constructs a GtkImage from a byte array of an image file.
+    *
+    * @throws IllegalArgumentException if the image could not be
+    * loaded.
+    */
+   public GtkImage (byte[] data)
+   {
+     if (loadImageFromData (data) != true)
+       throw new IllegalArgumentException ("Couldn't load image.");
+ 
+     isLoaded = true;
+     observers = null;
+     offScreen = false;
+     props = new Hashtable();
+     errorLoading = false;
+   }
+ 
+   /**
+    * Constructs a GtkImage from a URL. May result in an error image.
+    */
+   public GtkImage (URL url)
+   {
+     isLoaded = false;
+     observers = new Vector();
+     errorLoading = false;
+     if( url == null)
+       return;
+     ByteArrayOutputStream baos = new ByteArrayOutputStream (5000);
+     try
+       {
+         BufferedInputStream bis = new BufferedInputStream (url.openStream());
+ 
+         byte[] buf = new byte[5000];
+         int n = 0;
+ 
+         while ((n = bis.read(buf)) != -1)
+ 	  baos.write(buf, 0, n); 
+         bis.close();
+       }
+     catch(IOException e)
+       {
+ 	throw new IllegalArgumentException ("Couldn't load image.");
+       }
+     if (loadImageFromData (baos.toByteArray()) != true)
+       throw new IllegalArgumentException ("Couldn't load image.");
+ 
+     isLoaded = true;
+     observers = null;
+     props = new Hashtable();
+   }
+ 
+   /**
+    * Constructs an empty GtkImage.
+    */
+   public GtkImage (int width, int height)
+   {
+     this.width = width;
+     this.height = height;
+     props = new Hashtable();
+     isLoaded = true;
+     observers = null;
+     offScreen = true;
+     createPixmap();
+   }
+ 
+   /**
+    * Constructs a scaled version of the src bitmap, using the GDK.
+    */
+   private GtkImage (GtkImage src, int width, int height, int hints)
+   {
+     this.width = width;
+     this.height = height;
+     props = new Hashtable();
+     isLoaded = true;
+     observers = null;
+     offScreen = false;
+ 
+     // Use the GDK scaling method.
+     createScaledPixmap(src, hints);
+   }
+ 
+   /**
+    * Package private constructor to create a GtkImage from a given
+    * PixBuf pointer.
+    */
+   GtkImage (Pointer pixbuf)
+   {
+     pixmap = pixbuf;
+     createFromPixbuf();
+     isLoaded = true;
+     observers = null;
+     offScreen = false;
+     props = new Hashtable();
+   }
+ 
+   /**
+    * Native helper function for constructor that takes a pixbuf Pointer.
+    */
+   private native void createFromPixbuf();
+ 
+   /**
+    * Callback from the image consumer.
+    */
+   public void setImage(int width, int height, 
+ 		       int[] pixels, Hashtable properties)
+   {
+     this.width = width;
+     this.height = height;
+     props = (properties != null) ? properties : new Hashtable();
+ 
+     if (width <= 0 || height <= 0 || pixels == null)
+       {
+ 	errorLoading = true;
+ 	return;
+       }
+ 
+     isLoaded = true;
+     deliver();
+     createPixmap();
+     setPixels(pixels);
+   }
+ 
+   // java.awt.Image methods ////////////////////////////////////////////////
+ 
+   public synchronized int getWidth (ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return -1;
+ 
+     return width;
+   }
+   
+   public synchronized int getHeight (ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return -1;
+     
+     return height;
+   }
+ 
+   public synchronized Object getProperty (String name, ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return UndefinedProperty;
+     
+     Object value = props.get (name);
+     return (value == null) ? UndefinedProperty : value;
+   }
+ 
+   /**
+    * Returns the source of this image.
+    */
+   public ImageProducer getSource ()
+   {
+     if (!isLoaded)
+       return null;
+     return new MemoryImageSource(width, height, nativeModel, getPixels(), 
+ 				 0, width);
+   }
+ 
+   /**
+    * Creates a GdkGraphics context for this pixmap.
+    */
+   public Graphics getGraphics ()
+   {
+     if (!isLoaded) 
+       return null;
+     if (offScreen)
+       return new GdkGraphics(this);
+     else
+       throw new IllegalAccessError("This method only works for off-screen"
+ 				   +" Images.");
+   }
+   
+   /**
+    * Returns a scaled instance of this pixmap.
+    */
+   public Image getScaledInstance(int width,
+ 				 int height,
+ 				 int hints)
+   {
+     if (width <= 0 || height <= 0)
+       throw new IllegalArgumentException("Width and height of scaled bitmap"+
+ 					 "must be >= 0");
+ 
+     return new GtkImage(this, width, height, hints);
+   }
+ 
+   /**
+    * If the image is loaded and comes from an ImageProducer, 
+    * regenerate the image from there.
+    *
+    * I have no idea if this is ever actually used. Since GtkImage can't be
+    * instantiated directly, how is the user to know if it was created from
+    * an ImageProducer or not?
+    */
+   public synchronized void flush ()
+   {
+     if (isLoaded && source != null)
+       {
+ 	observers = new Vector();
+ 	isLoaded = false;
+ 	freePixmap();
+ 	source.startProduction(new GtkImageConsumer(this, source));
+       }
+   }
+ 
+   public void finalize()
+   {
+     if (isLoaded)
+       freePixmap();
+   }
+ 
+   /**
+    * Returns the image status, used by GtkToolkit
+    */
+   public int checkImage (ImageObserver observer)
+   {
+     if (addObserver(observer))
+       {
+ 	if (errorLoading == true)
+ 	  return ImageObserver.ERROR;
+ 	else
+ 	  return 0;
+       }
+ 
+     return ImageObserver.ALLBITS | ImageObserver.WIDTH | ImageObserver.HEIGHT;
+   }
+ 
+   // Drawing methods ////////////////////////////////////////////////
+ 
+   /**
+    * Draws an image with eventual scaling/transforming.
+    */
+   public boolean drawImage (GdkGraphics g, int dx1, int dy1, int dx2, int dy2, 
+ 			    int sx1, int sy1, int sx2, int sy2, 
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return false;
+ 
+     boolean flipX = (dx1 > dx2)^(sx1 > sx2);
+     boolean flipY = (dy1 > dy2)^(sy1 > sy2);
+     int dstWidth = Math.abs (dx2 - dx1);
+     int dstHeight = Math.abs (dy2 - dy1);
+     int srcWidth = Math.abs (sx2 - sx1);
+     int srcHeight = Math.abs (sy2 - sy1);
+     int srcX = (sx1 < sx2) ? sx1 : sx2;
+     int srcY = (sy1 < sy2) ? sy1 : sy2;
+     int dstX = (dx1 < dx2) ? dx1 : dx2;
+     int dstY = (dy1 < dy2) ? dy1 : dy2;
+ 
+     // Clipping. This requires the dst to be scaled as well, 
+     if (srcWidth > width)
+       {
+ 	dstWidth = (int)((double)dstWidth*((double)width/(double)srcWidth));
+ 	srcWidth = width - srcX;
+       }
+ 
+     if (srcHeight > height) 
+       {
+ 	dstHeight = (int)((double)dstHeight*((double)height/(double)srcHeight));
+ 	srcHeight = height - srcY;
+       }
+ 
+     if (srcWidth + srcX > width)
+       {
+ 	dstWidth = (int)((double)dstWidth * (double)(width - srcX)/(double)srcWidth);
+ 	srcWidth = width - srcX;
+       }
+ 
+     if (srcHeight + srcY > height)
+       {
+ 	dstHeight = (int)((double)dstHeight * (double)(width - srcY)/(double)srcHeight);
+ 	srcHeight = height - srcY;
+       }
+ 
+     if ( srcWidth <= 0 || srcHeight <= 0 || dstWidth <= 0 || dstHeight <= 0)
+       return true;
+ 
+     if(bgcolor != null)
+       drawPixelsScaledFlipped (g, bgcolor.getRed (), bgcolor.getGreen (), 
+ 			       bgcolor.getBlue (), 
+ 			       flipX, flipY,
+ 			       srcX, srcY,
+ 			       srcWidth, srcHeight,
+ 			       dstX,  dstY,
+ 			       dstWidth, dstHeight,
+ 			       true);
+     else
+       drawPixelsScaledFlipped (g, 0, 0, 0, flipX, flipY,
+ 			       srcX, srcY, srcWidth, srcHeight,
+ 			       dstX,  dstY, dstWidth, dstHeight,
+ 			       false);
+     return true;
+   }
+ 
+   /**
+    * Draws an image to the GdkGraphics context, at (x,y) scaled to 
+    * width and height, with optional compositing with a background color.
+    */
+   public boolean drawImage (GdkGraphics g, int x, int y, int width, int height,
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return false;
+ 
+     if(bgcolor != null)
+       drawPixelsScaled(g, bgcolor.getRed (), bgcolor.getGreen (), 
+ 		       bgcolor.getBlue (), x, y, width, height, true);
+     else
+       drawPixelsScaled(g, 0, 0, 0, x, y, width, height, false);
+ 
+     return true;
+   }
+ 
+   // Private methods ////////////////////////////////////////////////
+ 
+   /**
+    * Delivers notifications to all queued observers.
+    */
+   private void deliver()
+   {
+     int flags = ImageObserver.HEIGHT | 
+       ImageObserver.WIDTH |
+       ImageObserver.PROPERTIES |
+       ImageObserver.ALLBITS;
+ 
+     if (observers != null)
+       for(int i=0; i < observers.size(); i++)
+ 	((ImageObserver)observers.elementAt(i)).
+ 	  imageUpdate(this, flags, 0, 0, width, height);
+ 
+     observers = null;
+   }
+   
+   /**
+    * Adds an observer, if we need to.
+    * @return true if an observer was added.
+    */
+   private boolean addObserver(ImageObserver observer)
+   {
+     if (!isLoaded)
+       {
+ 	if(observer != null)
+ 	  if (!observers.contains (observer))
+ 	    observers.addElement (observer);
+ 	return true;
+       }
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkImageConsumer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkImageConsumer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkImageConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkImageConsumer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,159 ----
+ /* GtkImageConsumer.java
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Graphics;
+ import java.awt.Image;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.image.MemoryImageSource;
+ import java.util.Hashtable;
+ import java.util.Vector;
+ 
+ /**
+  * Helper class to GtkImage. Sits and gathers pixels for a GtkImage and then
+  * calls GtkImage.setImage().
+  *
+  * @author Sven de Marothy
+  */
+ public class GtkImageConsumer implements ImageConsumer
+ {
+   private GtkImage target;
+   private int width, height;
+   private Hashtable properties;
+   private int[] pixelCache = null;
+   private ImageProducer source;
+ 
+   public GtkImageConsumer(GtkImage target, ImageProducer source)
+   {
+     this.target = target;
+     this.source = source;
+   }
+ 
+   public synchronized void imageComplete (int status)
+   {
+     // we need to reuse the pixel cache for memory image sources since
+     // a memory image's backing array can be updated "live".
+     if (!(source instanceof MemoryImageSource))
+       source.removeConsumer(this);
+     target.setImage(width, height, pixelCache, properties);
+   }
+ 
+   public synchronized void setColorModel (ColorModel model)
+   {
+     // This method is to inform on what the most used color model
+     // in the image is, for optimization reasons. We ignore this
+     // information.
+   }
+ 
+   public synchronized void setDimensions (int width, int height)
+   {
+     pixelCache = new int[width*height];
+ 
+     this.width = width;
+     this.height = height;
+   }
+ 
+   public synchronized void setHints (int flags)
+   {
+     // This method informs us in which order the pixels are
+     // delivered, for progressive-loading support, etc. 
+     // Since we wait until it's all loaded, we can ignore the hints.
+   }
+ 
+   public synchronized void setPixels (int x, int y, int width, int height, 
+ 				      ColorModel cm, byte[] pixels,
+ 				      int offset, int scansize)
+   {
+     setPixels (x, y, width, height, cm, convertPixels (pixels), offset,
+                scansize);
+   }
+ 
+   public synchronized void setPixels (int x, int y, int width, int height, 
+ 				      ColorModel cm, int[] pixels,
+ 				      int offset, int scansize)
+   {
+     if (pixelCache == null)
+       return; // Not sure this should ever happen.
+ 
+     if (cm.equals(GtkImage.nativeModel))
+       for (int i = 0; i < height; i++)
+ 	System.arraycopy (pixels, offset + (i * scansize),
+ 			  pixelCache, (y + i) * this.width + x,
+ 			  width);
+     else
+       {
+ 	for (int i = 0; i < height; i++)
+ 	  for (int j = 0; j < width; j++)
+ 	    {
+ 	      // get in AARRGGBB and convert to AABBGGRR
+ 	      int pix = cm.getRGB(pixels[offset + (i * scansize) + x + j]);
+ 	      byte b = (byte)(pix & 0xFF);
+ 	      byte r = (byte)(((pix & 0x00FF0000) >> 16) & 0xFF);
+ 	      pix &= 0xFF00FF00;
+ 	      pix |= ((b & 0xFF) << 16);
+ 	      pix |= (r & 0xFF);
+ 	      pixelCache[(y + i) * this.width + x + j] = pix;
+ 	    }
+       }
+   }
+ 
+   /**
+    * This is an old method, no idea if it's correct.
+    */
+   private int[] convertPixels (byte[] pixels)
+   {
+     int ret[] = new int[pixels.length];
+ 
+     for (int i = 0; i < pixels.length; i++)
+       ret[i] = pixels[i] & 0xFF;
+     
+     return ret;
+   }
+ 
+   public synchronized void setProperties (Hashtable props)
+   {
+     this.properties = props;
+   }
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkLabelPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkLabelPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkLabelPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkLabelPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,91 ----
+ /* GtkLabelPeer.java -- Implements LabelPeer with GTK
+    Copyright (C) 1998, 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Label;
+ import java.awt.peer.LabelPeer;
+ 
+ // A composite widget.  GtkLabels have transparent backgrounds.  An
+ // AWT Label is opaque.  To compensate, a GtkLabelPeer is a GtkLabel
+ // packed in a GtkEventBox.
+ public class GtkLabelPeer extends GtkComponentPeer
+     implements LabelPeer
+ {
+   native void create (String text, float alignment);
+   native void gtkWidgetModifyFont (String name, int style, int size);
+   native void nativeSetAlignment (float alignment);
+ 
+   public native void setText(String text);
+   native void setNativeBounds (int x, int y, int width, int height);
+ 
+   // Because this is a composite widget, we need to retrieve the
+   // GtkLabel's preferred dimensions, not the enclosing GtkEventBox's.
+   native void gtkWidgetGetPreferredDimensions (int[] dim);
+ 
+   void create ()
+   {
+     Label label = (Label) awtComponent;
+     create (label.getText (), getGtkAlignment (label.getAlignment ()));
+   }
+ 
+   public GtkLabelPeer (Label l)
+   {
+     super (l);
+   }
+ 
+   public void setAlignment (int alignment)
+   {
+     nativeSetAlignment (getGtkAlignment (alignment));
+   }
+ 
+   float getGtkAlignment (int alignment)
+   {
+     switch (alignment)
+       {
+       case Label.LEFT:
+ 	return 0.0f;
+       case Label.CENTER:
+ 	return 0.5f;
+       case Label.RIGHT:
+ 	return 1.0f;
+       }
+ 
+     return 0.0f;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkListPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkListPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkListPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkListPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,180 ----
+ /* GtkListPeer.java -- Implements ListPeer with GTK
+    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Dimension;
+ import java.awt.List;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
+ import java.awt.peer.ListPeer;
+ 
+ public class GtkListPeer extends GtkComponentPeer
+   implements ListPeer
+ {
+   void create ()
+   {
+     List list = (List) awtComponent;
+ 
+     create (list.getRows ());
+ 
+     setMultipleMode (list.isMultipleMode ());
+   }
+ 
+   native void create (int rows);
+   native void connectSignals ();
+   native void gtkWidgetModifyFont (String name, int style, int size);
+   native void gtkWidgetRequestFocus ();
+ 
+   native void getSize (int rows, int visibleRows, int dims[]);
+ 
+   public GtkListPeer (List list)
+   {
+     super (list);
+     
+     setMultipleMode (list.isMultipleMode ());
+ 
+     if (list.getItemCount () > 0)
+       append (list.getItems ());
+   }
+ 
+   native void append (String items[]);
+ 
+   public native void add (String item, int index);
+   
+   public void addItem (String item, int index)
+   {
+     add (item, index);
+   }
+   
+   public void clear ()
+   {
+     removeAll ();
+   }
+   
+   public native void delItems (int start, int end);
+   public native void deselect (int index);
+   
+   public Dimension getMinimumSize (int rows)
+   {
+     return minimumSize (rows);
+   }
+ 
+   public Dimension getPreferredSize (int rows)
+   {
+     return preferredSize (rows);
+   }
+   
+   public native int[] getSelectedIndexes ();
+   public native void makeVisible (int index);
+ 
+   public Dimension minimumSize (int rows)
+   {
+     int dims[] = new int[2];
+ 
+     int visibleRows = ((List) awtComponent).getRows();
+     getSize (rows, visibleRows, dims);
+     return new Dimension (dims[0], dims[1]);
+   }
+ 
+   public Dimension preferredSize (int rows)
+   {
+     int dims[] = new int[2];
+ 
+     int visibleRows = ((List) awtComponent).getRows();
+     getSize (rows, visibleRows, dims);
+     return new Dimension (dims[0], dims[1]);
+   }
+ 
+   public void removeAll ()
+   {
+     delItems (0, -1);
+   }
+ 
+   public native void select (int index);
+   public native void setMultipleMode (boolean b);
+ 
+   public void setMultipleSelections (boolean b)
+   {
+     setMultipleMode (b);
+   }
+ 
+   public void handleEvent (AWTEvent e)
+   {
+     if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ())
+       {
+         // Only generate the ActionEvent on the second click of a
+         // multiple click.
+ 	MouseEvent me = (MouseEvent) e;
+ 	if (!me.isConsumed ()
+ 	    && (me.getModifiersEx () & MouseEvent.BUTTON1_DOWN_MASK) != 0
+ 	    && me.getClickCount() == 2)
+ 	  {
+             String selectedItem = ((List) awtComponent).getSelectedItem ();
+ 
+             // Double-click only generates an Action event if
+             // something is selected.
+             if (selectedItem != null)
+ 	      postActionEvent (((List) awtComponent).getSelectedItem (), 
+ 			       me.getModifiersEx ());
+ 	  }
+       }
+ 
+     if (e.getID () == KeyEvent.KEY_PRESSED)
+       {
+ 	KeyEvent ke = (KeyEvent) e;
+ 	if (!ke.isConsumed () && ke.getKeyCode () == KeyEvent.VK_ENTER)
+ 	  {
+             String selectedItem = ((List) awtComponent).getSelectedItem ();
+ 
+             // Enter only generates an Action event if something is
+             // selected.
+             if (selectedItem != null)
+ 	      postActionEvent (selectedItem, ke.getModifiersEx ());
+ 	  }
+       }
+ 
+     super.handleEvent (e);
+   }
+ 
+   protected void postItemEvent (int item, int stateChange)
+   {
+     postItemEvent (new Integer (item), stateChange);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,85 ----
+ /* GtkMenuBarPeer.java -- Implements MenuBarPeer with GTK+
+    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Font;
+ import java.awt.Menu;
+ import java.awt.MenuBar;
+ import java.awt.MenuComponent;
+ import java.awt.peer.MenuBarPeer;
+ import java.awt.peer.MenuPeer;
+ 
+ public class GtkMenuBarPeer extends GtkMenuComponentPeer
+   implements MenuBarPeer
+ {
+ 
+   native void create ();
+   native void addMenu (MenuPeer menu);
+ 
+   public GtkMenuBarPeer (MenuBar target)
+   {
+     super (target);
+   }
+ 
+   void setFont ()
+   {
+     MenuComponent mc = (MenuComponent) awtWidget;
+     Font f = mc.getFont ();
+ 
+     if (f == null)
+       mc.setFont (new Font ("Dialog", Font.PLAIN, 12));
+   }
+ 
+   // FIXME: remove this method or replace it with one that does
+   // something useful.
+   /* In Gnome, help menus are no longer right flushed. */
+   native void nativeSetHelpMenu(MenuPeer menuPeer);
+ 
+   public void addHelpMenu (Menu menu)
+   {
+     // nativeSetHelpMenu((MenuPeer) menu.getPeer());
+   }
+ 
+   public native void delMenu(int index);
+ 
+   public void addMenu (Menu m)
+   {
+     // FIXME: implement
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,69 ----
+ /* GtkMenuComponentPeer.java -- Implements MenuComponentPeer with GTK+
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Font;
+ import java.awt.peer.MenuComponentPeer;
+ 
+ public class GtkMenuComponentPeer extends GtkGenericPeer
+   implements MenuComponentPeer
+ {
+   void create ()
+   {
+     throw new RuntimeException ();
+   }
+ 
+   void setFont ()
+   {
+   }
+ 
+   public GtkMenuComponentPeer (Object awtWidget)
+   {
+     super (awtWidget);
+     create ();
+     setFont ();
+   }
+ 
+   public native void dispose();
+ 
+   public void setFont(Font font)
+   {
+   // FIXME: implement  
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,120 ----
+ /* GtkMenuItemPeer.java -- Implements MenuItemPeer with GTK+
+    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Font;
+ import java.awt.Menu;
+ import java.awt.MenuBar;
+ import java.awt.MenuComponent;
+ import java.awt.MenuItem;
+ import java.awt.peer.MenuItemPeer;
+ import java.awt.peer.MenuPeer;
+ 
+ public class GtkMenuItemPeer extends GtkMenuComponentPeer
+   implements MenuItemPeer
+ {
+   native void create (String label);
+   native void connectSignals ();
+   native void gtkWidgetModifyFont (String name, int style, int size);
+ 
+   void create ()
+   {
+     create (((MenuItem) awtWidget).getLabel());
+   }
+ 
+   public GtkMenuItemPeer (MenuItem item)
+   {
+     super (item);
+     setEnabled (item.isEnabled ());
+     setParent (item);
+ 
+     if (item.getParent() instanceof Menu && ! (item instanceof Menu))
+       connectSignals();
+   }
+ 
+   void setFont ()
+   {
+     MenuComponent mc = ((MenuComponent) awtWidget);
+     Font f = mc.getFont ();
+ 
+     if (f == null)
+       {
+         MenuComponent parent = (MenuComponent) mc.getParent ();
+         Font pf = parent.getFont ();
+         gtkWidgetModifyFont (pf.getName (), pf.getStyle (), pf.getSize ());
+       }
+     else
+       gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
+   }
+ 
+   void setParent (MenuItem item)
+   {
+     // add ourself differently, based on what type of parent we have
+     // yes, the typecasting here is nasty.
+     Object parent = item.getParent ();
+     if (parent instanceof MenuBar)
+       {
+ 	((GtkMenuBarPeer)((MenuBar)parent).getPeer ()).addMenu ((MenuPeer) this);
+       }
+     else // parent instanceof Menu
+       {
+ 	((GtkMenuPeer)((Menu)parent).getPeer ()).addItem (this, 
+ 							  item.getShortcut ());
+       }
+   }
+ 
+   public void disable ()
+   {
+     setEnabled (false);
+   }
+ 
+   public void enable ()
+   {
+     setEnabled (true);
+   }
+ 
+   public native void setEnabled(boolean b);
+ 
+   public native void setLabel(String label);
+ 
+   protected void postMenuActionEvent ()
+   {
+     postActionEvent (((MenuItem)awtWidget).getActionCommand (), 0);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkMenuPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,108 ----
+ /* GtkMenuPeer.java -- Implements MenuPeer with GTK+
+    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Component;
+ import java.awt.Menu;
+ import java.awt.MenuContainer;
+ import java.awt.MenuItem;
+ import java.awt.MenuShortcut;
+ import java.awt.peer.MenuItemPeer;
+ import java.awt.peer.MenuPeer;
+ 
+ public class GtkMenuPeer extends GtkMenuItemPeer
+   implements MenuPeer
+ {
+   native void create (String label);
+   native void addItem (MenuItemPeer item, int key, boolean shiftModifier);
+   native void setupAccelGroup (GtkGenericPeer container);
+   native void addTearOff ();
+ 
+   public GtkMenuPeer (Menu menu)
+   {
+     super (menu);
+     
+     if (menu.isTearOff())
+       addTearOff();
+ 
+     MenuContainer parent = menu.getParent ();
+     if (parent instanceof Menu)
+       setupAccelGroup ((GtkGenericPeer)((Menu)parent).getPeer ());
+     else if (parent instanceof Component)
+       setupAccelGroup ((GtkGenericPeer)((Component)parent).getPeer ());
+     else
+       setupAccelGroup (null);
+   }
+ 
+   public void addItem (MenuItem item)
+   {
+     int key = 0;
+     boolean shiftModifier = false;
+ 
+     MenuShortcut ms = item.getShortcut ();
+     if (ms != null)
+       {
+ 	key = ms.getKey ();
+ 	shiftModifier = ms.usesShiftModifier ();
+       }
+ 
+     addItem ((MenuItemPeer) item.getPeer (), key, shiftModifier);
+   }
+ 
+   public void addItem (MenuItemPeer item, MenuShortcut ms)
+   {
+     int key = 0;
+     boolean shiftModifier = false;
+ 
+     if (ms != null)
+       {
+ 	key = ms.getKey ();
+ 	shiftModifier = ms.usesShiftModifier ();
+       }
+ 
+     addItem (item, key, shiftModifier);
+   }
+ 
+   public native void delItem(int index);
+ 
+   public void addSeparator()
+   {
+     // FIXME: implement
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* GtkPanelPeer.java -- Implements PanelPeer with GTK
+    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Panel;
+ import java.awt.event.MouseEvent;
+ import java.awt.peer.PanelPeer;
+ 
+ public class GtkPanelPeer extends GtkContainerPeer
+   implements PanelPeer
+ {
+   native void create ();
+ 
+   public GtkPanelPeer (Panel p)
+   {
+     super (p);
+   }
+ 
+   public void handleEvent (AWTEvent event)
+   {
+     int id = event.getID();
+ 
+     switch (id)
+       {
+       case MouseEvent.MOUSE_PRESSED:
+         awtComponent.requestFocusInWindow ();
+         break;
+       }
+     super.handleEvent (event);
+   }
+ 
+   native void connectSignals ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* GtkPopupMenuPeer.java -- Implements PopupMenuPeer with GTK+
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Component;
+ import java.awt.Event;
+ import java.awt.MenuItem;
+ import java.awt.Point;
+ import java.awt.PopupMenu;
+ import java.awt.peer.PopupMenuPeer;
+ 
+ public class GtkPopupMenuPeer extends GtkMenuPeer
+   implements PopupMenuPeer
+ {
+   public GtkPopupMenuPeer (PopupMenu menu)
+   {
+     super (menu);
+   }
+ 
+   native void setupAccelGroup (GtkGenericPeer container);
+ 
+   void setParent (MenuItem item)
+   {
+     // we don't need to "add" ourselves to our parent
+   }
+ 
+   native void show (int x, int y, long time);
+   public void show (Component origin, int x, int y)
+   {
+     Point abs = origin.getLocationOnScreen ();
+     show (abs.x + x, abs.y + y, 0);
+   }
+   
+   public void show (Event e)
+   {
+ 
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* GtkScrollPanePeer.java -- Implements ScrollPanePeer with GTK
+    Copyright (C) 1998, 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Adjustable;
+ import java.awt.Dimension;
+ import java.awt.ScrollPane;
+ import java.awt.peer.ScrollPanePeer;
+ 
+ public class GtkScrollPanePeer extends GtkContainerPeer
+   implements ScrollPanePeer
+ {
+   native void create (int width, int height);
+ 
+   void create ()
+   {
+     create (awtComponent.getWidth (), awtComponent.getHeight ());
+   }
+ 
+   // native void gtkScrolledWindowSetScrollPosition(int x, int y);
+   native void gtkScrolledWindowSetHScrollIncrement (int u);
+   native void gtkScrolledWindowSetVScrollIncrement (int u);
+ 
+   public GtkScrollPanePeer (ScrollPane sp)
+   {
+     super (sp);
+ 
+     setPolicy (sp.getScrollbarDisplayPolicy ());
+   }
+ 
+   native void setPolicy (int policy);
+   public void childResized (int width, int height)
+   {
+     int dim[] = new int[2];
+ 
+     gtkWidgetGetDimensions (dim);
+ 
+     // If the child is in this range, GTK adds both scrollbars, but
+     // the AWT doesn't.  So set the peer's scroll policy to
+     // GTK_POLICY_NEVER.
+     if ((width > dim[0] - getVScrollbarWidth ()
+ 	 && width <= dim[0])
+ 	&& (height > dim[1] - getHScrollbarHeight ()
+ 	    && height <= dim[1]))
+       setPolicy (ScrollPane.SCROLLBARS_NEVER);
+     else
+       setPolicy (((ScrollPane) awtComponent).getScrollbarDisplayPolicy ());
+   }
+ 
+   public native int getHScrollbarHeight();
+   public native int getVScrollbarWidth();
+   public native void setScrollPosition(int x, int y);
+ 
+   public Dimension getPreferredSize ()
+   {
+     return awtComponent.getSize();
+   }
+ 
+   public void setUnitIncrement (Adjustable adj, int u)
+   {
+     if (adj.getOrientation()==Adjustable.HORIZONTAL)
+       gtkScrolledWindowSetHScrollIncrement (u);
+     else
+       gtkScrolledWindowSetVScrollIncrement (u);
+   }
+ 
+   public void setValue (Adjustable adj, int v)
+   {
+ //      System.out.println("SPP: setVal: "+adj+":"+v);
+ //      Point p=myScrollPane.getScrollPosition ();
+ //      if (adj.getOrientation()==Adjustable.HORIZONTAL)
+ //        gtkScrolledWindowSetScrollPosition (v,p.y);
+ //      else
+ //        gtkScrolledWindowSetScrollPosition (p.x,v);
+ //      adj.setValue(v);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,80 ----
+ /* GtkScrollbarPeer.java -- Implements ScrollbarPeer with GTK+
+    Copyright (C) 1998, 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Adjustable;
+ import java.awt.Scrollbar;
+ import java.awt.event.AdjustmentEvent;
+ import java.awt.peer.ScrollbarPeer;
+ 
+ public class GtkScrollbarPeer extends GtkComponentPeer
+     implements ScrollbarPeer
+ {
+   void create ()
+   {
+     Scrollbar sb = (Scrollbar) awtComponent;
+ 
+     create (sb.getOrientation (), sb.getValue (),
+ 	    sb.getMinimum (), sb.getMaximum (), 
+ 	    sb.getUnitIncrement (), sb.getBlockIncrement (),
+ 	    sb.getVisibleAmount ());
+   }
+ 
+   native void create (int orientation, int value,
+ 		      int min, int max, int stepIncr, int pageIncr,
+ 		      int visibleAmount);
+ 
+   native void connectSignals ();
+ 
+   public GtkScrollbarPeer (Scrollbar s)
+   {
+     super (s);
+   }
+ 
+   public native void setLineIncrement(int amount);
+   public native void setPageIncrement(int amount);
+   public native void setValues(int value, int visible, int min, int max);
+ 
+   protected void postAdjustmentEvent (int type, int value)
+   {
+     q().postEvent (new AdjustmentEvent ((Adjustable)awtComponent, 
+ 				      AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
+ 				      type, value));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkSelection.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkSelection.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkSelection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkSelection.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,664 ----
+ /* GtkClipboard.java - Class representing gtk+ clipboard selection.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.classpath.Pointer;
+ 
+ import java.awt.datatransfer.*;
+ 
+ import java.io.*;
+ import java.net.*;
+ import java.util.*;
+ 
+ import java.awt.Image;
+ 
+ /**
+  * Class representing the gtk+ clipboard selection. This is used when
+  * another program owns the clipboard. Whenever the system clipboard
+  * selection changes we create a new instance to notify the program
+  * that the available flavors might have changed. When requested it
+  * (lazily) caches the targets, and (text, image, or files/uris)
+  * clipboard contents.
+  *
+  * XXX - should only cache when
+  * gdk_display_supports_selection_notification is true.
+  */
+ public class GtkSelection implements Transferable
+ {
+   /**
+    * Static lock used for requests of mimetypes and contents retrieval.
+    */
+   static private Object requestLock = new Object();
+ 
+   /**
+    * Whether a request for mimetypes, text, images, uris or byte[] is
+    * currently in progress. Should only be tested or set with
+    * requestLock held. When true no other requests should be made till
+    * it is false again.
+    */
+   private boolean requestInProgress;
+ 
+   /**
+    * Indicates a requestMimeTypes() call was made and the
+    * corresponding mimeTypesAvailable() callback was triggered.
+    */
+   private boolean mimeTypesDelivered;
+ 
+   /**
+    * Set and returned by getTransferDataFlavors. Only valid when
+    * mimeTypesDelivered is true.
+    */
+   private DataFlavor[] dataFlavors;
+   
+   /**
+    * Indicates a requestText() call was made and the corresponding
+    * textAvailable() callback was triggered.
+    */
+   private boolean textDelivered;
+ 
+   /**
+    * Set as response to a requestText() call and possibly returned by
+    * getTransferData() for text targets. Only valid when textDelivered
+    * is true.
+    */
+   private String text;
+   
+   /**
+    * Indicates a requestImage() call was made and the corresponding
+    * imageAvailable() callback was triggered.
+    */
+   private boolean imageDelivered;
+ 
+   /**
+    * Set as response to a requestImage() call and possibly returned by
+    * getTransferData() for image targets. Only valid when
+    * imageDelivered is true and image is null.
+    */
+   private Pointer imagePointer;
+ 
+   /**
+    * Cached image value. Only valid when imageDelivered is
+    * true. Created from imagePointer.
+    */
+   private Image image;
+ 
+   /**
+    * Indicates a requestUris() call was made and the corresponding
+    * urisAvailable() callback was triggered.
+    */
+   private boolean urisDelivered;
+ 
+   /**
+    * Set as response to a requestURIs() call. Only valid when
+    * urisDelivered is true
+    */
+   private List uris;
+ 
+   /**
+    * Indicates a requestBytes(String) call was made and the
+    * corresponding bytesAvailable() callback was triggered.
+    */
+   private boolean bytesDelivered;
+ 
+   /**
+    * Set as response to a requestBytes(String) call. Only valid when
+    * bytesDelivered is true.
+    */
+   private byte[] bytes;
+ 
+   /**
+    * Should only be created by the GtkClipboard class.
+    */
+   GtkSelection()
+   {
+   }
+ 
+   /**
+    * Gets an array of mime-type strings from the gtk+ clipboard and
+    * transforms them into an array of DataFlavors.
+    */
+   public DataFlavor[] getTransferDataFlavors()
+   {
+     DataFlavor[] result;
+     synchronized (requestLock)
+       {
+ 	// Did we request already and cache the result?
+ 	if (mimeTypesDelivered)
+ 	  result = (DataFlavor[]) dataFlavors.clone();
+ 	else
+ 	  {
+ 	    // Wait till there are no pending requests.
+ 	    while (requestInProgress)
+ 	      {
+ 		try
+ 		  {
+ 		    requestLock.wait();
+ 		  }
+ 		catch (InterruptedException ie)
+ 		  {
+ 		    // ignored
+ 		  }
+ 	      }
+ 
+ 	    // If nobody else beat us and cached the result we try
+ 	    // ourselves to get it.
+ 	    if (! mimeTypesDelivered)
+ 	      {
+ 		requestInProgress = true;
+ 		requestMimeTypes();
+ 		while (! mimeTypesDelivered)
+ 		  {
+ 		    try
+ 		      {
+ 			requestLock.wait();
+ 		      }
+ 		    catch (InterruptedException ie)
+ 		      {
+ 			// ignored
+ 		      }
+ 		  }
+ 		requestInProgress = false;
+ 	      }
+ 	    result = dataFlavors;
+ 	    if (! GtkClipboard.canCache)
+ 	      {
+ 		dataFlavors = null;
+ 		mimeTypesDelivered = false;
+ 	      }
+ 	    requestLock.notifyAll();
+ 	  }
+       }
+     return result;
+   }
+ 
+   /**
+    * Callback that sets the available DataFlavors[]. Note that this
+    * should not call any code that could need the main gdk lock.
+    */
+   private void mimeTypesAvailable(String[] mimeTypes)
+   {
+     synchronized (requestLock)
+       {
+ 	if (mimeTypes == null)
+ 	  dataFlavors = new DataFlavor[0];
+ 	else
+ 	  {
+ 	    // Most likely the mimeTypes include text in which case we add an
+ 	    // extra element.
+ 	    ArrayList flavorsList = new ArrayList(mimeTypes.length + 1);
+ 	    for (int i = 0; i < mimeTypes.length; i++)
+ 	      {
+ 		try
+ 		  {
+ 		    if (mimeTypes[i] == GtkClipboard.stringMimeType)
+ 		      {
+ 			// XXX - Fix DataFlavor.getTextPlainUnicodeFlavor()
+ 			// and also add it to the list.
+ 			flavorsList.add(DataFlavor.stringFlavor);
+ 			flavorsList.add(DataFlavor.plainTextFlavor);
+ 		      }
+ 		    else if (mimeTypes[i] == GtkClipboard.imageMimeType)
+ 		      flavorsList.add(DataFlavor.imageFlavor);
+ 		    else if (mimeTypes[i] == GtkClipboard.filesMimeType)
+ 		      flavorsList.add(DataFlavor.javaFileListFlavor);
+ 		    else
+ 		      {
+ 			// We check the target to prevent duplicates
+ 			// of the "magic" targets above.
+ 			DataFlavor target = new DataFlavor(mimeTypes[i]);
+ 			if (! flavorsList.contains(target))
+ 			  flavorsList.add(target);
+ 		      }
+ 		  }
+ 		catch (ClassNotFoundException cnfe)
+ 		  {
+ 		    cnfe.printStackTrace();
+ 		  }
+ 		catch (NullPointerException npe)
+ 		  {
+ 		    npe.printStackTrace();
+ 		  }
+ 	      }
+ 	    
+ 	    dataFlavors = new DataFlavor[flavorsList.size()];
+ 	    flavorsList.toArray(dataFlavors);
+ 	  }
+ 
+ 	mimeTypesDelivered = true;
+ 	requestLock.notifyAll();
+       }
+   }
+ 
+   /**
+    * Gets the available data flavors for this selection and checks
+    * that at least one of them is equal to the given DataFlavor.
+    */
+   public boolean isDataFlavorSupported(DataFlavor flavor)
+   {
+     DataFlavor[] dfs = getTransferDataFlavors();
+     for (int i = 0; i < dfs.length; i++)
+       if (flavor.equals(dfs[i]))
+ 	return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Helper method that tests whether we already have the text for the
+    * current gtk+ selection on the clipboard and if not requests it
+    * and waits till it is available.
+    */
+   private String getText()
+   {
+     String result;
+     synchronized (requestLock)
+       {
+ 	// Did we request already and cache the result?
+ 	if (textDelivered)
+ 	  result = text;
+ 	else
+ 	  {
+ 	    // Wait till there are no pending requests.
+ 	    while (requestInProgress)
+ 	      {
+ 		try
+ 		  {
+ 		    requestLock.wait();
+ 		  }
+ 		catch (InterruptedException ie)
+ 		  {
+ 		    // ignored
+ 		  }
+ 	      }
+ 
+ 	    // If nobody else beat us we try ourselves to get and
+ 	    // caching the result.
+ 	    if (! textDelivered)
+ 	      {
+ 		requestInProgress = true;
+ 		requestText();
+ 		while (! textDelivered)
+ 		  {
+ 		    try
+ 		      {
+ 			requestLock.wait();
+ 		      }
+ 		    catch (InterruptedException ie)
+ 		      {
+ 			// ignored
+ 		      }
+ 		  }
+ 		requestInProgress = false;
+ 	      }
+ 	    result = text;
+ 	    if (! GtkClipboard.canCache)
+ 	      {
+ 		text = null;
+ 		textDelivered = false;
+ 	      }
+ 	    requestLock.notifyAll();
+ 	  }
+       }
+     return result;
+   }
+ 
+   /**
+    * Callback that sets the available text on the clipboard. Note that
+    * this should not call any code that could need the main gdk lock.
+    */
+   private void textAvailable(String text)
+   {
+     synchronized (requestLock)
+       {
+ 	this.text = text;
+ 	textDelivered = true;
+ 	requestLock.notifyAll();
+       }
+   }
+ 
+   /**
+    * Helper method that tests whether we already have an image for the
+    * current gtk+ selection on the clipboard and if not requests it
+    * and waits till it is available.
+    */
+   private Image getImage()
+   {
+     Image result;
+     synchronized (requestLock)
+       {
+ 	// Did we request already and cache the result?
+ 	if (imageDelivered)
+ 	  result = image;
+ 	else
+ 	  {
+ 	    // Wait till there are no pending requests.
+ 	    while (requestInProgress)
+ 	      {
+ 		try
+ 		  {
+ 		    requestLock.wait();
+ 		  }
+ 		catch (InterruptedException ie)
+ 		  {
+ 		    // ignored
+ 		  }
+ 	      }
+ 
+ 	    // If nobody else beat us we try ourselves to get and
+ 	    // caching the result.
+ 	    if (! imageDelivered)
+ 	      {
+ 		requestInProgress = true;
+ 		requestImage();
+ 		while (! imageDelivered)
+ 		  {
+ 		    try
+ 		      {
+ 			requestLock.wait();
+ 		      }
+ 		    catch (InterruptedException ie)
+ 		      {
+ 			// ignored
+ 		      }
+ 		  }
+ 		requestInProgress = false;
+ 	      }
+ 	    if (imagePointer != null)
+ 	      image = new GtkImage(imagePointer);
+ 	    imagePointer = null;
+ 	    result = image;
+ 	    if (! GtkClipboard.canCache)
+ 	      {
+ 		image = null;
+ 		imageDelivered = false;
+ 	      }
+ 	    requestLock.notifyAll();
+ 	  }
+       }
+     return result;
+   }
+ 
+   /**
+    * Callback that sets the available image on the clipboard. Note
+    * that this should not call any code that could need the main gdk
+    * lock. Note that we get a Pointer to a GdkPixbuf which we cannot
+    * turn into a real GtkImage at this point. That will be done on the
+    * "user thread" in getImage().
+    */
+   private void imageAvailable(Pointer pointer)
+   {
+     synchronized (requestLock)
+       {
+ 	this.imagePointer = pointer;
+ 	imageDelivered = true;
+ 	requestLock.notifyAll();
+       }
+   }
+ 
+   /**
+    * Helper method that test whether we already have a list of
+    * URIs/Files and if not requests them and waits till they are
+    * available.
+    */
+   private List getURIs()
+   {
+     List result;
+     synchronized (requestLock)
+       {
+ 	// Did we request already and cache the result?
+ 	if (urisDelivered)
+ 	  result = uris;
+ 	else
+ 	  {
+ 	    // Wait till there are no pending requests.
+ 	    while (requestInProgress)
+ 	      {
+ 		try
+ 		  {
+ 		    requestLock.wait();
+ 		  }
+ 		catch (InterruptedException ie)
+ 		  {
+ 		    // ignored
+ 		  }
+ 	      }
+ 
+ 	    // If nobody else beat us we try ourselves to get and
+ 	    // caching the result.
+ 	    if (! urisDelivered)
+ 	      {
+ 		requestInProgress = true;
+ 		requestURIs();
+ 		while (! urisDelivered)
+ 		  {
+ 		    try
+ 		      {
+ 			requestLock.wait();
+ 		      }
+ 		    catch (InterruptedException ie)
+ 		      {
+ 			// ignored
+ 		      }
+ 		  }
+ 		requestInProgress = false;
+ 	      }
+ 	    result = uris;
+ 	    if (! GtkClipboard.canCache)
+ 	      {
+ 		uris = null;
+ 		urisDelivered = false;
+ 	      }
+ 	    requestLock.notifyAll();
+ 	  }
+       }
+     return result;
+   }
+ 
+   /**
+    * Callback that sets the available File list. Note that this should
+    * not call any code that could need the main gdk lock.
+    */
+   private void urisAvailable(String[] uris)
+   {
+     synchronized (requestLock)
+       {
+ 	if (uris != null && uris.length != 0)
+ 	  {
+ 	    ArrayList list = new ArrayList(uris.length);
+ 	    for (int i = 0; i < uris.length; i++)
+ 	      {
+ 		try
+ 		  {
+ 		    URI uri = new URI(uris[i]);
+ 		    if (uri.getScheme().equals("file"))
+ 		      list.add(new File(uri));
+ 		  }
+ 		catch (URISyntaxException use)
+ 		  {
+ 		  }
+ 	      }
+ 	    this.uris = list;
+ 	  }
+ 
+ 	urisDelivered = true;
+ 	requestLock.notifyAll();
+       }
+   }
+ 
+   /**
+    * Helper method that requests a byte[] for the given target
+    * mime-type flavor and waits till it is available. Note that unlike
+    * the other get methods this one doesn't cache the result since
+    * there are possibly many targets.
+    */
+   private byte[] getBytes(String target)
+   {
+     byte[] result;
+     synchronized (requestLock)
+       {
+ 	// Wait till there are no pending requests.
+ 	while (requestInProgress)
+ 	  {
+ 	    try
+ 	      {
+ 		requestLock.wait();
+ 	      }
+ 	    catch (InterruptedException ie)
+ 	      {
+ 		// ignored
+ 	      }
+ 	  }
+ 
+ 	// Request bytes and wait till they are available.
+ 	requestInProgress = true;
+ 	requestBytes(target);
+ 	while (! bytesDelivered)
+ 	  {
+ 	    try
+ 	      {
+ 		requestLock.wait();
+ 	      }
+ 	    catch (InterruptedException ie)
+ 	      {
+ 		// ignored
+ 	      }
+ 	  }
+ 	result = bytes;
+ 	bytes = null;
+ 	bytesDelivered = false;
+ 	requestInProgress = false;
+ 	
+ 	requestLock.notifyAll();
+       }
+     return result;
+   }
+ 
+   /**
+    * Callback that sets the available byte array on the
+    * clipboard. Note that this should not call any code that could
+    * need the main gdk lock.
+    */
+   private void bytesAvailable(byte[] bytes)
+   {
+     synchronized (requestLock)
+       {
+ 	this.bytes = bytes;
+ 	bytesDelivered = true;
+ 	requestLock.notifyAll();
+       }
+   }
+ 
+   public Object getTransferData(DataFlavor flavor)
+     throws UnsupportedFlavorException
+   {
+     // Note the fall throughs for the "magic targets" if they fail we
+     // try one more time through getBytes().
+     if (flavor.equals(DataFlavor.stringFlavor))
+       {
+ 	String text = getText();
+ 	if (text != null)
+ 	  return text;
+       }
+ 
+     if (flavor.equals(DataFlavor.plainTextFlavor))
+       {
+ 	String text = getText();
+ 	if (text != null)
+ 	  return new StringBufferInputStream(text);
+       }
+ 
+     if (flavor.equals(DataFlavor.imageFlavor))
+       {
+ 	Image image = getImage();
+ 	if (image != null)
+ 	  return image;
+       }
+ 
+     if (flavor.equals(DataFlavor.javaFileListFlavor))
+       {
+ 	List uris = getURIs();
+ 	if (uris != null)
+ 	  return uris;
+       }
+ 
+     byte[] bytes = getBytes(flavor.getMimeType());
+     if (bytes == null)
+       throw new UnsupportedFlavorException(flavor);
+ 
+     if (flavor.isMimeTypeSerializedObject())
+       {
+ 	try
+ 	  {
+ 	    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+ 	    ObjectInputStream ois = new ObjectInputStream(bais);
+ 	    return ois.readObject();
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	    ioe.printStackTrace();
+ 	  }
+ 	catch (ClassNotFoundException cnfe)
+ 	  {
+ 	    cnfe.printStackTrace();
+ 	  }
+       }
+ 
+     if (flavor.isRepresentationClassInputStream())
+       return new ByteArrayInputStream(bytes);
+ 
+     // XXX, need some more conversions?
+ 
+     throw new UnsupportedFlavorException(flavor);
+   }
+ 
+   /*
+    * Requests text, Image or an byte[] for a particular target from the
+    * other application. These methods return immediately. When the
+    * content is available the contentLock will be notified through
+    * textAvailable, imageAvailable, urisAvailable or bytesAvailable and the
+    * appropriate field is set.
+    */
+   private native void requestText();
+   private native void requestImage();
+   private native void requestURIs();
+   private native void requestBytes(String target);
+ 
+   /* Similar to the above but for requesting the supported targets. */
+   private native void requestMimeTypes();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,219 ----
+ /* GtkTextAreaPeer.java -- Implements TextAreaPeer with GTK
+    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Rectangle;
+ import java.awt.TextArea;
+ import java.awt.im.InputMethodRequests;
+ import java.awt.peer.TextAreaPeer;
+ import java.awt.peer.TextComponentPeer;
+ 
+ public class GtkTextAreaPeer extends GtkComponentPeer
+   implements TextComponentPeer, TextAreaPeer
+ {
+   private static transient int DEFAULT_ROWS = 10;
+   private static transient int DEFAULT_COLS = 80;
+ 
+   native void create (int width, int height, int scrollbarVisibility);
+ 
+   native void gtkWidgetModifyFont (String name, int style, int size);
+   native void gtkWidgetRequestFocus ();
+ 
+   public native void connectSignals ();
+ 
+   public native int getCaretPosition ();
+   public native void setCaretPosition (int pos);
+   public native int getSelectionStart ();
+   public native int getSelectionEnd ();
+   public native String getText ();
+   public native void select (int start, int end);
+   public native void setEditable (boolean state);
+   public native void setText (String text);
+ 
+   public int getIndexAtPoint(int x, int y)
+   {
+     // FIXME
+     return 0;
+   }
+ 
+   public Rectangle getCharacterBounds (int pos)
+   {
+     // FIXME
+     return null;
+   }
+ 
+   public long filterEvents (long filter)
+   {
+     // FIXME
+     return filter;
+   }
+ 
+   void create ()
+   {
+     Font f = awtComponent.getFont ();
+ 
+     // By default, Sun sets a TextArea's font when its peer is
+     // created.  If f != null then the peer's font is set by
+     // GtkComponent.create.
+     if (f == null)
+       {
+ 	f = new Font ("Dialog", Font.PLAIN, 12);
+ 	awtComponent.setFont (f);
+       }
+ 
+     FontMetrics fm = getFontMetrics (f);
+ 
+     TextArea ta = ((TextArea) awtComponent);
+     int sizeRows = ta.getRows ();
+     int sizeCols = ta.getColumns ();
+ 
+     sizeRows = sizeRows == 0 ? DEFAULT_ROWS : sizeRows;
+     sizeCols = sizeCols == 0 ? DEFAULT_COLS : sizeCols;
+ 
+     int width = sizeCols * fm.getMaxAdvance ();
+     int height = sizeRows * (fm.getMaxDescent () + fm.getMaxAscent ());
+ 
+     create (width, height, ta.getScrollbarVisibility ());
+     setEditable (ta.isEditable ());
+   }
+ 
+   public GtkTextAreaPeer (TextArea ta)
+   {
+     super (ta);
+ 
+     setText (ta.getText ());
+     setCaretPosition (0);
+   }
+ 
+   public native void insert (String str, int pos);
+   public native void replaceRange (String str, int start, int end);
+ 
+   public Dimension getMinimumSize (int rows, int cols)
+   {
+     return minimumSize (rows == 0 ? DEFAULT_ROWS : rows,
+                         cols == 0 ? DEFAULT_COLS : cols);
+   }
+ 
+   public Dimension getPreferredSize (int rows, int cols)
+   {
+     return preferredSize (rows == 0 ? DEFAULT_ROWS : rows,
+                           cols == 0 ? DEFAULT_COLS : cols);
+   }
+ 
+   native int getHScrollbarHeight ();
+   native int getVScrollbarWidth ();
+ 
+   // Deprecated
+   public Dimension minimumSize (int rows, int cols)
+   {
+     TextArea ta = ((TextArea) awtComponent);
+     int height = 0;
+     int width = 0;
+ 
+     if (ta.getScrollbarVisibility () == TextArea.SCROLLBARS_BOTH
+ 	|| ta.getScrollbarVisibility () == TextArea.SCROLLBARS_HORIZONTAL_ONLY)
+       height = getHScrollbarHeight ();
+ 
+     if (ta.getScrollbarVisibility () == TextArea.SCROLLBARS_BOTH
+ 	|| ta.getScrollbarVisibility () == TextArea.SCROLLBARS_VERTICAL_ONLY)
+       width = getVScrollbarWidth ();
+ 
+     Font f = awtComponent.getFont ();
+     if (f == null)
+       return new Dimension (width, height);
+ 
+     FontMetrics fm = getFontMetrics (f);
+ 
+     int sizeRows = rows == 0 ? DEFAULT_ROWS : rows;
+     int sizeCols = cols == 0 ? DEFAULT_COLS : cols;
+ 
+     width += sizeCols * fm.getMaxAdvance ();
+     height += sizeRows * (fm.getMaxDescent () + fm.getMaxAscent ());
+ 
+     return new Dimension (width, height);
+   }
+ 
+   public Dimension preferredSize (int rows, int cols)
+   {
+     TextArea ta = ((TextArea) awtComponent);
+     int height = 0;
+     int width = 0;
+ 
+     if (ta.getScrollbarVisibility () == TextArea.SCROLLBARS_BOTH
+ 	|| ta.getScrollbarVisibility () == TextArea.SCROLLBARS_HORIZONTAL_ONLY)
+       height = getHScrollbarHeight ();
+ 
+     if (ta.getScrollbarVisibility () == TextArea.SCROLLBARS_BOTH
+ 	|| ta.getScrollbarVisibility () == TextArea.SCROLLBARS_VERTICAL_ONLY)
+       width = getVScrollbarWidth ();
+ 
+     Font f = awtComponent.getFont ();
+     if (f == null)
+       return new Dimension (width, height);
+ 
+     FontMetrics fm = getFontMetrics (f);
+ 
+     int sizeRows = rows == 0 ? DEFAULT_ROWS : rows;
+     int sizeCols = cols == 0 ? DEFAULT_COLS : cols;
+ 
+     width += sizeCols * fm.getMaxAdvance ();
+     height += sizeRows * (fm.getMaxDescent () + fm.getMaxAscent ());
+ 
+     return new Dimension (width, height);
+   }
+ 
+   public void replaceText (String str, int start, int end)
+   {
+     replaceRange (str, start, end);
+   }
+ 
+   public void insertText (String str, int pos)
+   {
+     insert (str, pos);
+   }
+ 
+   public InputMethodRequests getInputMethodRequests()
+   {
+       // FIXME: implement
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,202 ----
+ /* GtkTextFieldPeer.java -- Implements TextFieldPeer with GTK
+    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Rectangle;
+ import java.awt.TextField;
+ import java.awt.event.KeyEvent;
+ import java.awt.im.InputMethodRequests;
+ import java.awt.peer.TextFieldPeer;
+ import java.awt.peer.TextComponentPeer;
+ 
+ public class GtkTextFieldPeer extends GtkComponentPeer
+   implements TextComponentPeer, TextFieldPeer
+ {
+   native void create (int width);
+   native void gtkWidgetSetBackground (int red, int green, int blue);
+   native void gtkWidgetSetForeground (int red, int green, int blue);
+ 
+   public native void connectSignals ();
+ 
+   public native int getCaretPosition ();
+   public native void setCaretPosition (int pos);
+   public native int getSelectionStart ();
+   public native int getSelectionEnd ();
+   public native String getText ();
+   public native void select (int start, int end);
+   public native void setEditable (boolean state);
+   public native void setText (String text);
+ 
+   public int getIndexAtPoint(int x, int y)
+   {
+     // FIXME
+     return 0;
+   }
+ 
+   public Rectangle getCharacterBounds (int pos)
+   {
+     // FIXME
+     return null;
+   }
+ 
+   public long filterEvents (long filter)
+   {
+     // FIXME
+     return filter;
+   }
+ 
+   void create ()
+   {
+     Font f = awtComponent.getFont ();
+ 
+     // By default, Sun sets a TextField's font when its peer is
+     // created.  If f != null then the peer's font is set by
+     // GtkComponent.create.
+     if (f == null)
+       {
+ 	f = new Font ("Dialog", Font.PLAIN, 12);
+ 	awtComponent.setFont (f);
+       }
+ 
+     FontMetrics fm = getFontMetrics (f);
+ 
+     TextField tf = ((TextField) awtComponent);
+     int cols = tf.getColumns ();
+ 
+     int text_width = cols * fm.getMaxAdvance ();
+ 
+     create (text_width);
+ 
+     setEditable (tf.isEditable ());
+   }
+ 
+   native int gtkEntryGetBorderWidth ();
+ 
+   native void gtkWidgetModifyFont (String name, int style, int size);
+ 
+   public GtkTextFieldPeer (TextField tf)
+   {
+     super (tf);
+ 
+     setText (tf.getText ());
+     setCaretPosition (0);
+ 
+     if (tf.echoCharIsSet ())
+       setEchoChar (tf.getEchoChar ());
+   }
+ 
+   public Dimension getMinimumSize (int cols)
+   {
+     return minimumSize (cols);
+   }
+ 
+   public Dimension getPreferredSize (int cols)
+   {
+     return preferredSize (cols);
+   }
+ 
+   public native void setEchoChar (char c);
+ 
+   // Deprecated
+   public Dimension minimumSize (int cols)
+   {
+     int dim[] = new int[2];
+ 
+     gtkWidgetGetPreferredDimensions (dim);
+ 
+     Font f = awtComponent.getFont ();
+     if (f == null)
+       return new Dimension (2 * gtkEntryGetBorderWidth (), dim[1]);
+ 
+     FontMetrics fm = getFontMetrics (f);
+ 
+     int text_width = cols * fm.getMaxAdvance ();
+ 
+     int width = text_width + 2 * gtkEntryGetBorderWidth ();
+ 
+     return new Dimension (width, dim[1]);
+   }
+ 
+   public Dimension preferredSize (int cols)
+   {
+     int dim[] = new int[2];
+ 
+     gtkWidgetGetPreferredDimensions (dim);
+ 
+     Font f = awtComponent.getFont ();
+     if (f == null)
+       return new Dimension (2 * gtkEntryGetBorderWidth (), dim[1]);
+ 
+     FontMetrics fm = getFontMetrics (f);
+ 
+     int text_width = cols * fm.getMaxAdvance ();
+ 
+     int width = text_width + 2 * gtkEntryGetBorderWidth ();
+ 
+     return new Dimension (width, dim[1]);
+   }
+ 
+   public void setEchoCharacter (char c)
+   {
+     setEchoChar (c);
+   }
+ 
+   public void handleEvent (AWTEvent e)
+   {
+     if (e.getID () == KeyEvent.KEY_PRESSED)
+       {
+         KeyEvent ke = (KeyEvent) e;
+ 
+         if (!ke.isConsumed ()
+             && ke.getKeyCode () == KeyEvent.VK_ENTER)
+           postActionEvent (getText (), ke.getModifiersEx ());
+       }
+ 
+     super.handleEvent (e);
+   }
+   public InputMethodRequests getInputMethodRequests()
+   {
+       // FIXME: implement
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,659 ----
+ /* GtkToolkit.java -- Implements an AWT Toolkit using GTK for peers
+    Copyright (C) 1998, 1999, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import gnu.classpath.Configuration;
+ import gnu.java.awt.EmbeddedWindow;
+ import gnu.java.awt.peer.ClasspathFontPeer;
+ import gnu.java.awt.peer.ClasspathTextLayoutPeer;
+ import gnu.java.awt.peer.EmbeddedWindowPeer;
+ 
+ import java.awt.*;
+ import java.awt.datatransfer.Clipboard;
+ import java.awt.dnd.DragGestureEvent;
+ import java.awt.dnd.peer.DragSourceContextPeer;
+ import java.awt.font.FontRenderContext;
+ import java.awt.im.InputMethodHighlight;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.peer.*;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.text.AttributedString;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.LinkedHashMap;
+ import java.util.Map;
+ import java.util.Properties;
+ 
+ import javax.imageio.spi.IIORegistry;
+ 
+ /* This class uses a deprecated method java.awt.peer.ComponentPeer.getPeer().
+    This merits comment.  We are basically calling Sun's bluff on this one.
+    We think Sun has deprecated it simply to discourage its use as it is
+    bad programming style.  However, we need to get at a component's peer in
+    this class.  If getPeer() ever goes away, we can implement a hash table
+    that will keep up with every window's peer, but for now this is faster. */
+ 
+ /**
+  * This class accesses a system property called
+  * <tt>gnu.java.awt.peer.gtk.Graphics</tt>.  If the property is defined and
+  * equal to "Graphics2D", the cairo-based GdkGraphics2D will be used in
+  * drawing contexts. Any other value will cause the older GdkGraphics
+  * object to be used.
+  */
+ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
+ {
+   Hashtable containers = new Hashtable();
+   static EventQueue q;
+   static boolean useGraphics2dSet;
+   static boolean useGraphics2d;
+   static Thread mainThread;
+ 
+   public static boolean useGraphics2D()
+   {
+     if (useGraphics2dSet)
+       return useGraphics2d;
+     useGraphics2d = System.getProperty("gnu.java.awt.peer.gtk.Graphics", 
+                                        "Graphics").equals("Graphics2D");
+     useGraphics2dSet = true;
+     return useGraphics2d;
+   }
+ 
+   static native void gtkInit(int portableNativeSync);
+ 
+   static
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       System.loadLibrary("gtkpeer");
+ 
+     int portableNativeSync;     
+     String portNatSyncProp = 
+       System.getProperty("gnu.classpath.awt.gtk.portable.native.sync");
+     
+     if (portNatSyncProp == null)
+       portableNativeSync = -1;  // unset
+     else if (Boolean.valueOf(portNatSyncProp).booleanValue())
+       portableNativeSync = 1;   // true
+     else
+       portableNativeSync = 0;   // false
+ 
+     gtkInit(portableNativeSync);
+ 
+     mainThread = new Thread ("GTK main thread")
+       {
+         public void run ()
+         {
+           gtkMain ();
+         }
+       };
+     mainThread.start ();
+   }
+ 
+   public GtkToolkit ()
+   {
+   }
+ 
+   public native void beep();
+   private native void getScreenSizeDimensions(int[] xy);
+   
+   public int checkImage (Image image, int width, int height, 
+ 			 ImageObserver observer) 
+   {
+     int status = ImageObserver.ALLBITS 
+       | ImageObserver.WIDTH 
+       | ImageObserver.HEIGHT;
+ 
+     if (image instanceof GtkImage)
+ 	return ((GtkImage) image).checkImage (observer);
+ 
+     if (observer != null)
+       observer.imageUpdate (image, status,
+                             -1, -1,
+                             image.getWidth (observer),
+                             image.getHeight (observer));
+     
+     return status;
+   }
+ 
+   /** 
+    * A helper class to return to clients in cases where a BufferedImage is
+    * desired but its construction fails.
+    */
+   private class GtkErrorImage extends Image
+   {
+     public GtkErrorImage()
+     {
+     }
+ 
+     public int getWidth(ImageObserver observer)
+     {
+       return -1;
+     }
+ 
+     public int getHeight(ImageObserver observer)
+     {
+       return -1;
+     }
+ 
+     public ImageProducer getSource()
+     {
+ 
+       return new ImageProducer() 
+         {          
+           HashSet consumers = new HashSet();          
+           public void addConsumer(ImageConsumer ic)
+           {
+             consumers.add(ic);
+           }
+ 
+           public boolean isConsumer(ImageConsumer ic)
+           {
+             return consumers.contains(ic);
+           }
+ 
+           public void removeConsumer(ImageConsumer ic)
+           {
+             consumers.remove(ic);
+           }
+ 
+           public void startProduction(ImageConsumer ic)
+           {
+             consumers.add(ic);
+             Iterator i = consumers.iterator();
+             while(i.hasNext())
+               {
+                 ImageConsumer c = (ImageConsumer) i.next();
+                 c.imageComplete(ImageConsumer.IMAGEERROR);
+               }
+           }
+           public void requestTopDownLeftRightResend(ImageConsumer ic)
+           {
+             startProduction(ic);
+           }        
+         };
+     }
+ 
+     public Graphics getGraphics() 
+     { 
+       return null; 
+     }
+ 
+     public Object getProperty(String name, ImageObserver observer)
+     {
+       return null;
+     }
+     public Image getScaledInstance(int width, int height, int flags)
+     {
+       return new GtkErrorImage();
+     }
+ 
+     public void flush() 
+     {
+     }
+   }
+ 
+ 
+   /** 
+    * Helper to return either a BufferedImage -- the argument -- or a
+    * GtkErrorImage if the argument is null.
+    */
+ 
+   private Image bufferedImageOrError(BufferedImage b)
+   {
+     if (b == null) 
+       return new GtkErrorImage();
+     else
+       return b;
+   }
+ 
+ 
+   public Image createImage (String filename)
+   {
+     if (filename.length() == 0)
+       return new GtkImage ();
+ 
+     if (useGraphics2D())
+       return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (filename));
+     else
+       return new GtkImage (filename);
+   }
+ 
+   public Image createImage (URL url)
+   {
+     if (useGraphics2D())
+       return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (url));
+     else
+       return new GtkImage (url);
+   }
+ 
+   public Image createImage (ImageProducer producer) 
+   {
+     if (useGraphics2D())
+       return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (producer));
+     else
+       return new GtkImage (producer);
+   }
+ 
+   public Image createImage (byte[] imagedata, int imageoffset,
+ 			    int imagelength)
+   {
+     if (useGraphics2D())
+       return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (imagedata,
+                                                    imageoffset, 
+                                                                         imagelength));
+     else
+       {
+         byte[] datacopy = new byte[imagelength];
+         System.arraycopy (imagedata, imageoffset, datacopy, 0, imagelength);
+         return new GtkImage (datacopy);
+       }
+   }
+   
+   /**
+    * Creates an ImageProducer from the specified URL. The image is assumed
+    * to be in a recognised format. 
+    *
+    * @param url URL to read image data from.
+    */  
+   public ImageProducer createImageProducer(URL url)
+   {
+     return new GdkPixbufDecoder(url);  
+   }
+ 
+   /**
+    * Returns the native color model (which isn't the same as the default
+    * ARGB color model, but doesn't have to be). 
+    */
+   public ColorModel getColorModel () 
+   {
+     /* Return the GDK-native ABGR format */
+     return new DirectColorModel(32, 
+ 				0x000000FF,
+ 				0x0000FF00,
+ 				0x00FF0000,
+ 				0xFF000000);
+   }
+ 
+   public String[] getFontList () 
+   {
+     return (new String[] { "Dialog", 
+ 			   "DialogInput", 
+ 			   "Monospaced", 
+ 			   "Serif", 
+ 			   "SansSerif" });
+   }
+ 
+   private class LRUCache extends LinkedHashMap
+   {    
+     int max_entries;
+     public LRUCache(int max)
+     {
+       super(max, 0.75f, true);
+       max_entries = max;
+     }
+     protected boolean removeEldestEntry(Map.Entry eldest)
+     {
+       return size() > max_entries;
+     }
+   }
+ 
+   private LRUCache fontCache = new LRUCache(50);
+   private LRUCache metricsCache = new LRUCache(50);
+   private LRUCache imageCache = new LRUCache(50);
+ 
+   public FontMetrics getFontMetrics (Font font) 
+   {
+     synchronized (metricsCache)
+       {
+         if (metricsCache.containsKey(font))
+           return (FontMetrics) metricsCache.get(font);
+       }
+ 
+     FontMetrics m = new GdkFontMetrics (font);
+     synchronized (metricsCache)
+       {
+         metricsCache.put(font, m);
+       }
+     return m;
+   }
+ 
+   public Image getImage (String filename) 
+   {
+     if (imageCache.containsKey(filename))
+       return (Image) imageCache.get(filename);
+     else
+       {
+         Image im = createImage(filename);
+         imageCache.put(filename, im);
+         return im;
+       }
+   }
+ 
+   public Image getImage (URL url) 
+   {
+     if (imageCache.containsKey(url))
+       return (Image) imageCache.get(url);
+     else
+       {
+         Image im = createImage(url);
+         imageCache.put(url, im);
+         return im;
+       }
+   }
+ 
+   public PrintJob getPrintJob (Frame frame, String jobtitle, Properties props) 
+   {
+     return null;
+   }
+ 
+   public native int getScreenResolution();
+ 
+   public Dimension getScreenSize ()
+   {
+     int dim[] = new int[2];
+     getScreenSizeDimensions(dim);
+     return new Dimension(dim[0], dim[1]);
+   }
+ 
+   public Clipboard getSystemClipboard() 
+   {
+     SecurityManager secman = System.getSecurityManager();
+     if (secman != null)
+       secman.checkSystemClipboardAccess();
+ 
+     return GtkClipboard.getInstance();
+   }
+ 
+   /**
+    * Prepares a GtkImage. For every other kind of Image it just
+    * assumes the image is already prepared for rendering.
+    */
+   public boolean prepareImage (Image image, int width, int height, 
+ 			       ImageObserver observer) 
+   {
+     /* GtkImages are always prepared, as long as they're loaded. */
+     if (image instanceof GtkImage)
+       return ((((GtkImage)image).checkImage (observer) & 
+ 	       ImageObserver.ALLBITS) != 0);
+ 
+     /* Assume anything else is too */
+     return true;
+   }
+ 
+   public native void sync();
+ 
+   protected void setComponentState (Component c, GtkComponentPeer cp)
+   {
+     /* Make the Component reflect Peer defaults */
+     if (c.getForeground () == null)
+       c.setForeground (cp.getForeground ());
+     if (c.getBackground () == null)
+       c.setBackground (cp.getBackground ());
+     //        if (c.getFont () == null)
+     //  	c.setFont (cp.getFont ());
+       
+     /* Make the Peer reflect the state of the Component */
+     if (! (c instanceof Window))
+       {
+ 	cp.setCursor (c.getCursor ());
+ 	
+ 	Rectangle bounds = c.getBounds ();
+ 	cp.setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
+ 	cp.setVisible (c.isVisible ());
+       }
+   }
+ 
+   protected ButtonPeer createButton (Button b)
+   {
+     return new GtkButtonPeer (b);
+   }
+ 
+   protected CanvasPeer createCanvas (Canvas c) 
+   {
+     return new GtkCanvasPeer (c);
+   }
+ 
+   protected CheckboxPeer createCheckbox (Checkbox cb) 
+   {
+     return new GtkCheckboxPeer (cb);
+   }
+ 
+   protected CheckboxMenuItemPeer createCheckboxMenuItem (CheckboxMenuItem cmi)
+   {
+     return new GtkCheckboxMenuItemPeer (cmi);
+   }
+ 
+   protected ChoicePeer createChoice (Choice c) 
+   {
+     return new GtkChoicePeer (c);
+   }
+ 
+   protected DialogPeer createDialog (Dialog d)
+   {
+     return new GtkDialogPeer (d);
+   }
+ 
+   protected FileDialogPeer createFileDialog (FileDialog fd)
+   {
+     return new GtkFileDialogPeer (fd);
+   }
+ 
+   protected FramePeer createFrame (Frame f)
+   {
+     return new GtkFramePeer (f);
+   }
+ 
+   protected LabelPeer createLabel (Label label) 
+   {
+     return new GtkLabelPeer (label);
+   }
+ 
+   protected ListPeer createList (List list)
+   {
+     return new GtkListPeer (list);
+   }
+ 
+   protected MenuPeer createMenu (Menu m) 
+   {
+     return new GtkMenuPeer (m);
+   }
+ 
+   protected MenuBarPeer createMenuBar (MenuBar mb) 
+   {
+     return new GtkMenuBarPeer (mb);
+   }
+ 
+   protected MenuItemPeer createMenuItem (MenuItem mi) 
+   {
+     return new GtkMenuItemPeer (mi);
+   }
+ 
+   protected PanelPeer createPanel (Panel p) 
+   {
+     return new GtkPanelPeer (p);
+   }
+ 
+   protected PopupMenuPeer createPopupMenu (PopupMenu target) 
+   {
+     return new GtkPopupMenuPeer (target);
+   }
+ 
+   protected ScrollPanePeer createScrollPane (ScrollPane sp) 
+   {
+     return new GtkScrollPanePeer (sp);
+   }
+ 
+   protected ScrollbarPeer createScrollbar (Scrollbar sb) 
+   {
+     return new GtkScrollbarPeer (sb);
+   }
+ 
+   protected TextAreaPeer createTextArea (TextArea ta) 
+   {
+     return new GtkTextAreaPeer (ta);
+   }
+ 
+   protected TextFieldPeer createTextField (TextField tf) 
+   {
+     return new GtkTextFieldPeer (tf);
+   }
+ 
+   protected WindowPeer createWindow (Window w)
+   {
+     return new GtkWindowPeer (w);
+   }
+ 
+   public EmbeddedWindowPeer createEmbeddedWindow (EmbeddedWindow w)
+   {
+     return new GtkEmbeddedWindowPeer (w);
+   }
+ 
+   /** 
+    * @deprecated part of the older "logical font" system in earlier AWT
+    * implementations. Our newer Font class uses getClasspathFontPeer.
+    */
+   protected FontPeer getFontPeer (String name, int style) {
+     // All fonts get a default size of 12 if size is not specified.
+     return getFontPeer(name, style, 12);
+   }
+ 
+   /**
+    * Private method that allows size to be set at initialization time.
+    */
+   private FontPeer getFontPeer (String name, int style, int size) 
+   {
+     Map attrs = new HashMap ();
+     ClasspathFontPeer.copyStyleToAttrs (style, attrs);
+     ClasspathFontPeer.copySizeToAttrs (size, attrs);
+     return getClasspathFontPeer (name, attrs);
+   }
+ 
+   /**
+    * Newer method to produce a peer for a Font object, even though Sun's
+    * design claims Font should now be peerless, we do not agree with this
+    * model, hence "ClasspathFontPeer". 
+    */
+ 
+   public ClasspathFontPeer getClasspathFontPeer (String name, Map attrs)
+   {
+     Map keyMap = new HashMap (attrs);
+     // We don't know what kind of "name" the user requested (logical, face,
+     // family), and we don't actually *need* to know here. The worst case
+     // involves failure to consolidate fonts with the same backend in our
+     // cache. This is harmless.
+     keyMap.put ("GtkToolkit.RequestedFontName", name);
+     if (fontCache.containsKey (keyMap))
+       return (ClasspathFontPeer) fontCache.get (keyMap);
+     else
+       {
+         ClasspathFontPeer newPeer = new GdkFontPeer (name, attrs);
+         fontCache.put (keyMap, newPeer);
+         return newPeer;
+       }
+   }
+ 
+   public ClasspathTextLayoutPeer getClasspathTextLayoutPeer (AttributedString str, 
+                                                              FontRenderContext frc)
+   {
+     return new GdkTextLayout(str, frc);
+   }
+ 
+   protected EventQueue getSystemEventQueueImpl() 
+   {
+     synchronized (GtkToolkit.class)
+       {
+         if (q == null)
+           {
+             q = new EventQueue();
+             GtkGenericPeer.enableQueue (q);
+           }
+       }    
+     return q;
+   }
+ 
+   protected native void loadSystemColors (int[] systemColors);
+ 
+   public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent e)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Map mapInputMethodHighlight(InputMethodHighlight highlight)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Rectangle getBounds()
+   {
+     int[] dims = new int[2];
+     getScreenSizeDimensions(dims);
+     return new Rectangle(0, 0, dims[0], dims[1]);
+   }
+   
+   // ClasspathToolkit methods
+ 
+   public GraphicsEnvironment getLocalGraphicsEnvironment()
+   {
+     return new GdkGraphicsEnvironment();
+   }
+ 
+   public Font createFont(int format, InputStream stream)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public RobotPeer createRobot (GraphicsDevice screen) throws AWTException
+   {
+     return new GdkRobotPeer (screen);
+   }
+ 
+   public void registerImageIOSpis(IIORegistry reg)
+   {
+     GdkPixbufDecoder.registerSpis(reg);
+   }
+ 
+   public static native void gtkMain();
+ } // class GtkToolkit
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkVolatileImage.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkVolatileImage.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkVolatileImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkVolatileImage.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,118 ----
+ /* GtkVolatileImage.java -- a hardware-accelerated image buffer
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.ImageCapabilities;
+ import java.awt.Graphics2D;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.VolatileImage;
+ 
+ public class GtkVolatileImage extends VolatileImage
+ {
+   private int width;
+   private int height;
+   private ImageCapabilities caps;
+ 
+   public GtkVolatileImage(int width, int height)
+   {
+     this(width, height, null);
+   }
+ 
+   public GtkVolatileImage(int width, int height, ImageCapabilities caps)
+   {
+     this.width = width;
+     this.height = height;
+     this.caps = caps;
+   }
+ 
+   // FIXME: should return a buffered image snapshot of the accelerated
+   // visual
+   public BufferedImage getSnapshot()
+   {
+     return null;
+   }
+ 
+   public int getWidth()
+   {
+     return width;
+   }
+ 
+   public int getHeight()
+   {
+     return height;
+   }
+ 
+   // FIXME: should return a graphics wrapper around this image's
+   // visual
+   public Graphics2D createGraphics()
+   {
+     return null;
+   }
+ 
+   public int validate(GraphicsConfiguration gc)
+   {
+     return VolatileImage.IMAGE_OK;
+   }
+ 
+   public boolean contentsLost()
+   {
+     return false;
+   }
+ 
+   public ImageCapabilities getCapabilities()
+   {
+     return caps;
+   }
+ 
+   public synchronized Object getProperty (String name, ImageObserver observer)
+   {
+     return null;
+   }
+ 
+   public synchronized int getWidth (ImageObserver observer)
+   {
+     return width;
+   }
+   
+   public synchronized int getHeight (ImageObserver observer)
+   {
+     return height;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,238 ----
+ /* GtkWindowPeer.java -- Implements WindowPeer with GTK
+    Copyright (C) 1998, 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.awt.peer.gtk;
+ 
+ import java.awt.Component;
+ import java.awt.Frame;
+ import java.awt.Window;
+ import java.awt.event.WindowEvent;
+ import java.awt.peer.WindowPeer;
+ 
+ public class GtkWindowPeer extends GtkContainerPeer
+   implements WindowPeer
+ {
+   protected static final int GDK_WINDOW_TYPE_HINT_NORMAL = 0;
+   protected static final int GDK_WINDOW_TYPE_HINT_DIALOG = 1;
+   protected static final int GDK_WINDOW_TYPE_HINT_MENU = 2;
+   protected static final int GDK_WINDOW_TYPE_HINT_TOOLBAR = 3;
+   protected static final int GDK_WINDOW_TYPE_HINT_SPLASHSCREEN = 4;
+   protected static final int GDK_WINDOW_TYPE_HINT_UTILITY = 5;
+   protected static final int GDK_WINDOW_TYPE_HINT_DOCK = 6;
+   protected static final int GDK_WINDOW_TYPE_HINT_DESKTOP = 7;
+ 
+   private boolean hasBeenShown = false;
+   private int oldState = Frame.NORMAL;
+ 
+   native void gtkWindowSetTitle (String title);
+   native void gtkWindowSetResizable (boolean resizable);
+   native void gtkWindowSetModal (boolean modal);
+ 
+   native void realize ();
+ 
+   int getWidth ()
+   {
+     return awtComponent.getWidth();
+   }
+ 
+   int getHeight ()
+   {
+     return awtComponent.getHeight();
+   }
+ 
+   native void create (int type, boolean decorated, GtkWindowPeer parent);
+ 
+   void create (int type, boolean decorated)
+   {
+     Window window = (Window) awtComponent;
+     GtkWindowPeer parent_peer = null;
+     Component parent = awtComponent.getParent();
+     
+     if (!window.isFocusableWindow())
+       type = GDK_WINDOW_TYPE_HINT_MENU;
+     
+     if (parent != null)
+       parent_peer = (GtkWindowPeer) awtComponent.getParent().getPeer();
+     
+     create (type, decorated, parent_peer);
+   }
+ 
+   void create ()
+   {
+     // Create a normal undecorated window.
+     create (GDK_WINDOW_TYPE_HINT_NORMAL, false);
+   }
+ 
+   void setParent ()
+   {
+     setVisible (awtComponent.isVisible ());
+     setEnabled (awtComponent.isEnabled ());
+   }
+ 
+   void setVisibleAndEnabled ()
+   {
+   }
+ 
+   public native void setVisibleNative (boolean b);
+   public native void setVisibleNativeUnlocked (boolean b);
+ 
+   native void connectSignals ();
+ 
+   public GtkWindowPeer (Window window)
+   {
+     super (window);
+   }
+ 
+   public native void toBack();
+   public native void toFront();
+ 
+   native void nativeSetBounds (int x, int y, int width, int height);
+   native void nativeSetBoundsUnlocked (int x, int y, int width, int height);
+ 
+   public void setBounds (int x, int y, int width, int height)
+   {
+     // prevent window_configure_cb -> awtComponent.setSize ->
+     // peer.setBounds -> nativeSetBounds self-deadlock on GDK lock.
+     if (Thread.currentThread() == GtkToolkit.mainThread)
+       return;
+ 
+     nativeSetBounds (x, y,
+ 		     width - insets.left - insets.right,
+ 		     height - insets.top - insets.bottom);
+   }
+ 
+   public void setBoundsUnlocked (int x, int y, int width, int height)
+   {
+     nativeSetBoundsUnlocked (x, y,
+                              width - insets.left - insets.right,
+                              height - insets.top - insets.bottom);
+   }
+ 
+   public void setTitle (String title)
+   {
+     gtkWindowSetTitle (title);
+   }
+ 
+   native void setSize (int width, int height);
+ 
+   public void setResizable (boolean resizable)
+   {
+     // Call setSize; otherwise when resizable is changed from true to
+     // false the window will shrink to the dimensions it had before it
+     // was resizable.
+     setSize (awtComponent.getWidth() - insets.left - insets.right,
+ 	     awtComponent.getHeight() - insets.top - insets.bottom);
+     gtkWindowSetResizable (resizable);
+   }
+ 
+   protected void postInsetsChangedEvent (int top, int left,
+ 					 int bottom, int right)
+   {
+     insets.top = top;
+     insets.left = left;
+     insets.bottom = bottom;
+     insets.right = right;
+   }
+ 
+   // called back by native side: window_configure_cb
+   // only called from GTK thread
+   protected void postConfigureEvent (int x, int y, int width, int height)
+   {
+     int frame_width = width + insets.left + insets.right;
+     int frame_height = height + insets.top + insets.bottom;
+ 
+     if (frame_width != awtComponent.getWidth()
+ 	|| frame_height != awtComponent.getHeight())
+       awtComponent.setSize(frame_width, frame_height);
+ 
+     int frame_x = x - insets.left;
+     int frame_y = y - insets.top;
+ 
+     if (frame_x != awtComponent.getX()
+ 	|| frame_y != awtComponent.getY())
+       {
+         // awtComponent.setLocation(frame_x, frame_y);
+       }
+   }
+ 
+   public void show ()
+   {
+     // Prevent the window manager from automatically placing this
+     // window when it is shown.
+     setBounds (awtComponent.getX(),
+ 	       awtComponent.getY(),
+ 	       awtComponent.getWidth(),
+ 	       awtComponent.getHeight());
+     setVisible (true);
+   }
+ 
+   void postWindowEvent (int id, Window opposite, int newState)
+   {
+     if (id == WindowEvent.WINDOW_OPENED)
+       {
+ 	// Post a WINDOW_OPENED event the first time this window is shown.
+ 	if (!hasBeenShown)
+ 	  {
+ 	    q().postEvent (new WindowEvent ((Window) awtComponent, id,
+ 					  opposite));
+ 	    hasBeenShown = true;
+ 	  }
+       }
+     else if (id == WindowEvent.WINDOW_STATE_CHANGED)
+       {
+ 	if (oldState != newState)
+ 	  {
+ 	    q().postEvent (new WindowEvent ((Window) awtComponent, id, opposite,
+ 					  oldState, newState));
+ 	    oldState = newState;
+ 	  }
+       }
+     else
+       q().postEvent (new WindowEvent ((Window) awtComponent, id, opposite));
+   }
+   public void updateAlwaysOnTop()
+   {
+     // TODO Auto-generated method stub
+     
+   }
+   public boolean requestWindowFocus()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/package.html gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/gtk/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/gtk/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.awt.peer.gtk package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.awt.peer.gtk</title></head>
+ 
+ <body>
+ <p>This package implements the GTK peer for java.awt.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/package.html gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.awt.peer package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.awt.peer</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/MainQtThread.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/MainQtThread.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/MainQtThread.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/MainQtThread.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,86 ----
+ /* MainQtThread.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ /**
+  * This Thread is the main Qt thread.
+  *
+  * It doesn't appear to do much here, since all custom code executed by
+  * this thread is injected into Qt's main event loop through the (native)
+  * MainThreadInterface class.
+  */
+ public class MainQtThread extends Thread
+ {
+   long QApplicationPointer;
+   long mainThreadInterface;
+   String theme;
+   private boolean running;
+   private boolean doublebuffer;
+ 
+   public MainQtThread( String theme, boolean doublebuffer )
+   {
+     this.theme = theme;
+     this.doublebuffer = doublebuffer;
+     running = false;
+   }
+ 
+   public boolean isRunning()
+   {
+     return running;
+   }
+ 
+   /**
+    * Creates the QApplication
+    */
+   public native long init(String theme, boolean doublebuffer);
+ 
+   /**
+    * Runs the QApplication (doesn't return.)
+    */
+   public native void exec(long ptr);
+ 
+   public void run()
+   {
+     QApplicationPointer = init(theme, doublebuffer);
+     running = true;
+     exec(QApplicationPointer);
+   }
+ 
+ } 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/NativeWrapper.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/NativeWrapper.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/NativeWrapper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/NativeWrapper.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,43 ----
+ /* NativeWrapper.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ public class NativeWrapper
+ {
+   protected long nativeObject;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QMatrix.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QMatrix.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QMatrix.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QMatrix.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,73 ----
+ /* QMatrix.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.geom.AffineTransform;
+ 
+ /**
+  * A simple wrapper class for a QMatrix,
+  * interfacing it to an AffineTransform.
+  */
+ public class QMatrix extends NativeWrapper
+ {
+ 
+   public QMatrix( AffineTransform t )
+   {
+     double[] matrix = new double[6];
+     t.getMatrix( matrix );
+     init( matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5] );
+   }
+ 
+   private native void init(double m00, double m10, double m01, double m11, 
+ 			   double m02, double m12 );
+ 
+   private native double[] getMatrix();
+ 
+   public AffineTransform getTransform()
+   {
+     return new AffineTransform( getMatrix() );
+   }
+ 
+   public native void dispose();
+   
+   public void finalize()
+   {
+     dispose();
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QPainterPath.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QPainterPath.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QPainterPath.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QPainterPath.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,141 ----
+ /* QPainterPath.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Shape;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.PathIterator;
+ import java.awt.geom.GeneralPath;
+ 
+ /**
+  * A simple wrapper class for a QPainterPath,
+  * createable from an AWT Shape
+  */
+ public class QPainterPath extends NativeWrapper
+ {
+   QPainterPath()
+   {
+   }
+ 
+   public QPainterPath( Shape s )
+   {
+     PathIterator pi = s.getPathIterator( new AffineTransform() );
+     double[] coords = new double[6];
+ 
+     init( pi.getWindingRule() );
+ 
+     while( !pi.isDone() )
+       {
+ 	switch( pi.currentSegment(coords) )
+ 	  {
+ 	  case PathIterator.SEG_MOVETO:
+ 	    moveTo( coords[0], coords[1] );
+ 	    break;
+ 
+ 	  case PathIterator.SEG_CLOSE:
+ 	    close();
+ 	    break;
+ 	  
+ 	  case PathIterator.SEG_LINETO:
+ 	    lineTo( coords[0], coords[1] );
+ 	    break;
+ 	  
+ 	  case PathIterator.SEG_QUADTO:
+ 	    quadTo( coords[0], coords[1], coords[2], coords[3] );
+ 	    break;
+ 	  
+ 	  case PathIterator.SEG_CUBICTO:
+ 	    cubicTo( coords[0], coords[1], 
+ 		     coords[2], coords[3],
+ 		     coords[4], coords[5] );
+ 	    break;
+ 	  }
+ 	pi.next();
+       }
+   }
+ 
+   /**
+    * Constructor for rectangles.
+    */
+   public QPainterPath( double x, double y, double w, double h )
+   {
+     init(PathIterator.WIND_EVEN_ODD);
+     moveTo( x, y );
+     lineTo( x + w, y );
+     lineTo( x + w, y + h );
+     lineTo( x , y + h );
+     lineTo( x, y );
+     close();
+   }
+ 
+   /**
+    * Constructor for lines.
+    */
+   public QPainterPath( double x1, double y1, double x2, double y2, boolean s )
+   {
+     init(PathIterator.WIND_EVEN_ODD);
+     moveTo( x1, y1 );
+     lineTo( x2, y2 );
+   }
+ 
+   /**
+    * Returns the QPainterPath as a GeneralPath
+    */
+   public native GeneralPath getPath();
+ 
+   private native void init(int windingRule);
+ 
+   private native void moveTo(double x, double y);
+ 
+   private native void close();
+ 
+   private native void lineTo(double x, double y);
+ 
+   private native void quadTo(double x1, double y1, double x2, double y2);
+ 
+   private native void cubicTo(double x1, double y1, double x2, double y2,
+ 			      double x3, double y3);
+ 
+   public native void dispose();
+   
+   public void finalize()
+   {
+     dispose();
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QPen.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QPen.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QPen.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QPen.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,71 ----
+ /* QPen.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Stroke;
+ import java.awt.BasicStroke;
+ 
+ /**
+  * A simple wrapper class for a QPen,
+  * interfacing it to an BasicStroke.
+  */
+ public class QPen extends NativeWrapper
+ {
+ 
+   public QPen( Stroke stroke )
+   {
+     if( !( stroke instanceof BasicStroke ) )
+       throw new IllegalArgumentException("Not a basic stroke.");
+ 
+     BasicStroke s = (BasicStroke)stroke;
+     if(s.getDashArray() != null)
+       throw new IllegalArgumentException("Can't handle dashed strokes.");
+ 
+     init(s.getLineWidth(), s.getEndCap(), s.getLineJoin(), s.getMiterLimit());
+   }
+ 
+   private native void init(double width, int cap, int join, double miterlimit);
+ 
+   public native void dispose();
+   
+   public void finalize()
+   {
+     dispose();
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtAudioClip.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtAudioClip.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtAudioClip.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtAudioClip.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,110 ----
+ /* QtAudioClip.java -- Qt implementation of the applet AudioClip interface
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.applet.AudioClip;
+ import java.awt.Toolkit;
+ import java.io.File;
+ import java.io.IOException;
+ import java.net.URL;
+ 
+ /**
+  * Implementation of the applet AudioClip interface on a Qt
+  * QSound object.
+  */
+ public class QtAudioClip extends NativeWrapper implements AudioClip
+ {
+   private static Toolkit t = null;
+ 
+   public QtAudioClip(String filename)
+   {
+     checkForQt();
+     File f = new File(filename);
+     try
+       {
+ 	String fn = f.getCanonicalPath();
+ 	loadClip( fn );
+       } 
+     catch(IOException e)
+       {
+       }
+   }
+ 
+   public QtAudioClip(URL url)
+   {
+     
+   }
+ 
+   private native void loadClip(String filename);
+ 
+   private native void play(boolean looped);
+ 
+   private native boolean isAvailable();
+ 
+   /**
+    * Checks that Qt and sound is available.
+    */ 
+   private void checkForQt()
+   {
+     if( t == null )
+       t = Toolkit.getDefaultToolkit();
+     if( !( t instanceof QtToolkit) )
+       throw new IllegalStateException("This requires Qt peers.");
+   }
+ 
+   // *************** Public methods *******************
+ 
+   public void loop()
+   {
+     play( true );
+   }
+ 
+   public void play()
+   {
+     play( false );
+   }
+ 
+   public native void stop();
+ 
+   public native void dispose();
+ 
+   public void finalize()
+   {
+     dispose();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtButtonPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtButtonPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtButtonPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtButtonPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,79 ----
+ /* QtButtonPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Button;
+ import java.awt.event.ActionEvent;
+ import java.awt.peer.ButtonPeer;
+ 
+ public class QtButtonPeer extends QtComponentPeer implements ButtonPeer
+ {
+   public QtButtonPeer( QtToolkit kit, Button owner )
+   {
+     super( kit, owner );
+   }
+ 
+   public native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     setLabel( ((Button)owner).getLabel() );
+   }
+ 
+   /**
+    * Callback for button click events
+    */
+   void fireClick(int modifiers)
+   {
+     ActionEvent e = new ActionEvent(owner,
+ 				    ActionEvent.ACTION_PERFORMED,
+ 				    ((Button)owner).getActionCommand(),
+ 				    System.currentTimeMillis(),
+ 				    modifiers);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   // ************ Public methods *********************
+   
+   public native void setLabel( String label );
+ }
+ 
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtCanvasPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtCanvasPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtCanvasPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtCanvasPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,65 ----
+ /* QtCanvasPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Canvas;
+ import java.awt.Dimension;
+ import java.awt.peer.CanvasPeer;
+ 
+ public class QtCanvasPeer extends QtComponentPeer implements CanvasPeer
+ {
+   public QtCanvasPeer( QtToolkit kit, Canvas owner )
+   {
+     super( kit, owner );
+   }
+ 
+   public native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+   }
+ 
+   /**
+    * Overloaded, because a Canvas doesn't have a preferred size.
+    */
+   public Dimension getPreferredSize()
+   {
+     return owner.getSize();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtCheckboxPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtCheckboxPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtCheckboxPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtCheckboxPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,114 ----
+ /* QtCheckboxPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Rectangle;
+ import java.awt.Checkbox;
+ import java.awt.CheckboxGroup;
+ import java.awt.event.ItemEvent;
+ import java.awt.peer.CheckboxPeer;
+ import java.util.WeakHashMap;
+ 
+ public class QtCheckboxPeer extends QtComponentPeer implements CheckboxPeer
+ {
+   private CheckboxGroup group;
+ 
+   // Map QButtonGroup<->CheckboxGroup
+   private static WeakHashMap groupMap;
+ 
+   static 
+   {
+     groupMap = new WeakHashMap();
+   }
+   
+   public QtCheckboxPeer( QtToolkit kit, Checkbox owner )
+   {
+     super( kit, owner );
+   }
+   
+   protected native void init();
+   
+   protected void setup()
+   {
+     super.setup();
+     setCheckboxGroup( ((Checkbox)owner).getCheckboxGroup() );
+     setLabel( ((Checkbox)owner).getLabel() );
+     setState( ((Checkbox)owner).getState() );
+   }
+ 
+   private void fireToggle(boolean checked)
+   {
+     if (group == null)
+       ((Checkbox)owner).setState( checked ); 
+     else
+       if ( checked )
+ 	group.setSelectedCheckbox((Checkbox)owner);
+ 
+     int sel = checked ? ItemEvent.SELECTED : ItemEvent.DESELECTED;
+     ItemEvent e = new ItemEvent((Checkbox)owner, 
+ 				ItemEvent.ITEM_STATE_CHANGED, 
+ 				((Checkbox)owner).getLabel(),
+ 				sel);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+   
+   // ************ Public methods *********************
+   
+   public void setCheckboxGroup( CheckboxGroup group )
+   {    
+     if(this.group == group) 
+       return;
+ 
+     // if we change from a checkbox to a radio button or vice versa
+     if((this.group == null) != (group == null))
+       {
+ 	this.group = group;
+ 	callInit();
+ 	setup();
+       }
+ 
+     this.group = group;
+   }
+ 
+   public native void setLabel( String label );
+ 
+   public native void setState( boolean state );
+ 
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtChoicePeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtChoicePeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtChoicePeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtChoicePeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,95 ----
+ /* QtChoicePeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Choice;
+ import java.awt.event.ItemEvent;
+ import java.awt.peer.ChoicePeer;
+ 
+ public class QtChoicePeer extends QtComponentPeer implements ChoicePeer
+ {
+   public QtChoicePeer( QtToolkit kit, Choice owner )
+   {
+     super( kit, owner );
+   }
+   
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     
+     Choice c = (Choice) owner;
+     int n = c.getItemCount();
+     for ( int i = 0; i < n ; i++ ) 
+       add( c.getItem( i ), i );
+     select( c.getSelectedIndex() );
+   }
+ 
+   private void fireChoice( int index )
+   {
+     ((Choice)owner).select( index );
+     ItemEvent e = new ItemEvent((Choice)owner, 
+ 				ItemEvent.ITEM_STATE_CHANGED, 
+ 				((Choice)owner).getItem(index), 
+ 				ItemEvent.SELECTED);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   // ************ Public methods *********************
+ 
+   public native void add( String item, int index );
+ 
+   public void addItem( String item, int index )
+   {
+     add(item, index);
+   }
+ 
+   public native void remove( int index );
+ 
+   public void removeAll()
+   {
+     int n = ((Choice)owner).getItemCount();
+     for (int i = 0; i < n; i++)
+       remove( i );
+   }
+ 
+   public native void select( int index );
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtComponentGraphics.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtComponentGraphics.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtComponentGraphics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtComponentGraphics.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,124 ----
+ /* QtComponentGraphics.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Color;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.Rectangle;
+ import java.awt.Paint;
+ 
+ /**
+  * QtComponentPainter is a Graphics2D context for painting directly to AWT 
+  * components. They require an existing QPainter object (the one passed into 
+  * the native paint method), and are created there (ONLY).
+  *
+  * Since this context does direct on-screen drawing it is NOT thread-safe,
+  * and should NOT be used outside the thread in which it was created.
+  *
+  * In other words,
+  * this is intended for use by QtComponentPeer.paintEvent() only.
+  *
+  */
+ public class QtComponentGraphics extends QtGraphics
+ {
+   private QtComponentPeer peer;
+ 
+   /**
+    * Creates a new ComponentGraphics from an *existing* QPainter object.
+    *
+    * @param ptr the pointer to the QPainter object.
+    */
+   public QtComponentGraphics(long ptr, QtComponentPeer component, 
+ 			     int x, int y, int w, int h)
+   {
+     nativeObject = ptr;
+     peer = component;
+ 
+     Rectangle r = new Rectangle(x, y, w, h);
+     initialClip = r;
+     
+     setAlpha( 1.0 );
+     Color c = component.owner.getBackground();
+     if(c == null)
+       setBackground(Color.white);
+     else
+       setBackground( c );
+ 
+     c = component.owner.getForeground();
+     if(c == null)
+       setColor( Color.black );
+     else
+       setColor( c );
+     setup();
+     setClip( initialClip );
+   }
+ 
+   /**
+    * Copying constructor
+    */
+   QtComponentGraphics( QtComponentGraphics g )
+   {
+     super( g ); // Slalom is fun
+   }
+ 
+   public Graphics create()
+   {
+     return new QtComponentGraphics( this );
+   }
+ 
+   /**
+    * This is a tricky one
+    */ 
+   public void copyArea(int x, int y, int width, int height, 
+ 		       int dx, int dy)
+   {
+     // FIXME 
+   }
+ 
+   /**
+    * Returns the GraphicsConfiguration of the context component.
+    */
+   public GraphicsConfiguration getDeviceConfiguration()
+   {
+     return peer.getGraphicsConfiguration();
+   }
+ } 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtComponentPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtComponentPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtComponentPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtComponentPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,825 ----
+ /* QtComponentPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.AWTException;
+ import java.awt.BufferCapabilities;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Color;
+ import java.awt.Cursor;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Image;
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.GraphicsDevice;
+ import java.awt.KeyboardFocusManager;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.Toolkit;
+ import java.awt.Window;
+ import java.awt.peer.ComponentPeer;
+ import java.awt.peer.ContainerPeer;
+ import java.awt.image.ColorModel;
+ import java.awt.image.VolatileImage;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.event.ComponentEvent; // 100%
+ import java.awt.event.FocusEvent; // 100%
+ import java.awt.event.InputEvent; // (abstract)
+ import java.awt.event.KeyEvent; // 2/3
+ import java.awt.event.MouseEvent; // 70%? 
+ import java.awt.event.PaintEvent; // Yup.
+ import java.awt.event.WindowEvent; // 2/ 12
+ import java.util.Timer;
+ import java.util.TimerTask;
+ 
+ public class QtComponentPeer extends NativeWrapper implements ComponentPeer
+ {
+ 
+   /**
+    * Popup trigger button, may differ between platforms
+    */
+   protected static final int POPUP_TRIGGER = 3;
+ 
+   /**
+    * The toolkit which manufactured this peer.
+    */
+   protected QtToolkit toolkit;
+ 
+   /**
+    * The component which owns this peer.
+    */
+   Component owner;
+ 
+   /**
+    * Classpath updates our eventMask.
+    */
+   private long eventMask;
+ 
+   /**
+    * if the thing has mouse motion listeners or not.
+    */
+   private boolean hasMotionListeners;
+ 
+   /**
+    * The component's double buffer for off-screen drawing.
+    */
+   protected QtImage backBuffer;
+ 
+   protected long qtApp;
+ 
+   private boolean settingUp;
+ 
+   private boolean ignoreResize = false;
+ 
+   QtComponentPeer( QtToolkit kit, Component owner )
+   {
+     this.owner = owner;
+     this.toolkit = kit;
+     qtApp = QtToolkit.guiThread.QApplicationPointer;
+     nativeObject = 0;
+     synchronized(this) 
+       {
+ 	callInit(); // Calls the init method FROM THE MAIN THREAD.
+ 	try
+ 	  {	
+ 	    wait(); // Wait for the thing to be created.
+ 	  }
+ 	catch(InterruptedException e)
+ 	  {
+ 	  }
+       }
+     setup();
+     hasMotionListeners = false;
+   }
+ 
+   protected native void callInit();
+ 
+   /**
+    * Init does the creation of native widgets, it is therefore
+    * called from the main thread. (the constructor waits for this to happen.)
+    */
+   protected void init()
+   {
+   }
+ 
+   protected void setup()
+   {
+     settingUp = true;
+     if (owner != null)
+       {
+   	if (owner instanceof javax.swing.JComponent)
+   	  setBackground(owner.getBackground());
+   	else
+ 	  owner.setBackground(getNativeBackground());
+ 	
+ 	if (owner.getForeground() != null)
+ 	  setForeground(owner.getForeground());
+ 	else
+ 	  setForeground( Color.black );
+ 
+ 	if (owner.getCursor() != null)
+ 	  if (owner.getCursor().getType() != Cursor.DEFAULT_CURSOR)
+ 	    setCursor(owner.getCursor());
+ 	
+ 	if (owner.getFont() != null)
+ 	  setFont(owner.getFont());
+ 
+ 	setEnabled( owner.isEnabled() );
+ 
+ 	backBuffer = null;
+ 	updateBounds();
+ 
+ 	setVisible( owner.isVisible() );
+ 	QtToolkit.repaintThread.queueComponent(this);
+       }
+     settingUp = false;
+   }
+ 
+   native void QtUpdate();
+   native void QtUpdateArea( int x, int y, int w, int h );
+   private synchronized native void disposeNative();
+   private native void setGround( int r, int g, int b, boolean isForeground );
+   private native void setBoundsNative( int x, int y, int width, int height );
+   private native void setCursor( int ctype );
+   private native Color getNativeBackground();
+   private native void setFontNative( QtFontPeer fp );
+   private native int whichScreen();
+   private native void reparentNative( QtContainerPeer parent );
+   private native void getLocationOnScreenNative( Point p );
+ 
+   private boolean drawableComponent()
+   {
+     return ((this instanceof QtContainerPeer && 
+ 	     !(this instanceof QtScrollPanePeer)) || 
+ 	    (this instanceof QtCanvasPeer));
+   }
+ 
+   void updateBounds()
+   {
+     Rectangle r = owner.getBounds();
+     setBounds( r.x, r.y, r.width, r.height );
+   }
+ 
+   synchronized void updateBackBuffer(int width, int height)
+   {
+     if(width <= 0 || height <= 0)
+       return;
+     
+     if( !drawableComponent() && backBuffer == null)
+       return;
+ 
+     if( backBuffer != null )
+       {
+ 	if( width < backBuffer.width && height < backBuffer.height )
+ 	  return;
+ 	backBuffer.dispose();
+       }
+     backBuffer = new QtImage(width, height);
+   }
+ 	
+ 
+   // ************ Event methods *********************
+ 
+   /**
+    * Window closing event
+    */
+   protected void closeEvent()
+   {
+     if (owner instanceof Window)
+       {
+ 	WindowEvent e = new WindowEvent((Window)owner, 
+ 					WindowEvent.WINDOW_CLOSING);
+ 	QtToolkit.eventQueue.postEvent(e);
+       }
+   }
+ 
+   protected void enterEvent(int modifiers, int x, int y, int dummy)
+   {
+     MouseEvent e = new MouseEvent(owner, 
+ 				  MouseEvent.MOUSE_ENTERED,
+ 				  System.currentTimeMillis(),
+ 				  (modifiers & 0x2FF), x, y, 0, false);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   protected void focusInEvent()
+   {
+     FocusEvent e = new FocusEvent(owner, FocusEvent.FOCUS_GAINED);
+     QtToolkit.eventQueue.postEvent(e);
+    }
+ 
+   protected void focusOutEvent()
+   {
+     FocusEvent e = new FocusEvent(owner, FocusEvent.FOCUS_LOST);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   protected void keyPressEvent(int modifiers, int code, int unicode, int dummy)
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+     KeyEvent e = new KeyEvent(owner, 
+ 			      KeyEvent.KEY_PRESSED,
+ 			      System.currentTimeMillis(),
+ 			      modifiers, code, (char)(unicode & 0xFFFF),
+ 			      KeyEvent.KEY_LOCATION_UNKNOWN);
+     if (!manager.dispatchEvent (e))
+       QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   protected void keyReleaseEvent(int modifiers, int code, int unicode, int dummy)
+   {
+     KeyEvent e = new KeyEvent(owner, 
+ 			      KeyEvent.KEY_RELEASED,
+ 			      System.currentTimeMillis(),
+ 			      modifiers, code, (char)(unicode & 0xFFFF),
+ 			      KeyEvent.KEY_LOCATION_UNKNOWN);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   protected void leaveEvent(int modifiers, int x, int y, int dummy)
+   {
+     MouseEvent e = new MouseEvent(owner, 
+ 				  MouseEvent.MOUSE_EXITED,
+ 				  System.currentTimeMillis(),
+ 				  (modifiers & 0x2FF), x, y, 0, false);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   // FIXME: Coalesce press-release events into clicks.
+   protected void mouseDoubleClickEvent( int modifiers, int x, int y, int clickCount)
+   {
+     if( (eventMask & AWTEvent.MOUSE_EVENT_MASK) == 0 )
+       return;
+     int button = 0;
+     if((modifiers & InputEvent.BUTTON1_DOWN_MASK) == 
+        InputEvent.BUTTON1_DOWN_MASK) button = 1;
+     if((modifiers & InputEvent.BUTTON2_DOWN_MASK) == 
+        InputEvent.BUTTON2_DOWN_MASK) button = 2;
+     if((modifiers & InputEvent.BUTTON3_DOWN_MASK) == 
+        InputEvent.BUTTON3_DOWN_MASK) button = 3;
+     MouseEvent e = new MouseEvent(owner, 
+ 				  MouseEvent.MOUSE_CLICKED,
+ 				  System.currentTimeMillis(),
+ 				  (modifiers & 0x2FF), x, y, clickCount, 
+ 				  false, button);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   protected void mouseMoveEvent( int modifiers, int x, int y, int clickCount)
+   {
+     if( (eventMask & AWTEvent.MOUSE_EVENT_MASK) == 0 )
+       return;
+ 
+     int button = 0;
+     if((modifiers & InputEvent.BUTTON1_DOWN_MASK) == 
+        InputEvent.BUTTON1_DOWN_MASK) button = 1;
+     if((modifiers & InputEvent.BUTTON2_DOWN_MASK) == 
+        InputEvent.BUTTON2_DOWN_MASK) button = 2;
+     if((modifiers & InputEvent.BUTTON3_DOWN_MASK) == 
+ 	   InputEvent.BUTTON3_DOWN_MASK) button = 3;
+ 
+     int type = (button != 0) ? 
+       MouseEvent.MOUSE_DRAGGED :MouseEvent.MOUSE_MOVED;
+     
+     MouseEvent e = new MouseEvent(owner, 
+ 				  type,
+ 				  System.currentTimeMillis(),
+ 				  (modifiers & 0x2FF), x, y, clickCount, 
+ 				  false, button);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   protected void mousePressEvent( int modifiers, int x, int y, int clickCount)
+   {
+     if( (eventMask & AWTEvent.MOUSE_EVENT_MASK) == 0 )
+       return;
+     int button = 0;
+     if((modifiers & InputEvent.BUTTON1_DOWN_MASK) == 
+        InputEvent.BUTTON1_DOWN_MASK) button = 1;
+     if((modifiers & InputEvent.BUTTON2_DOWN_MASK) == 
+        InputEvent.BUTTON2_DOWN_MASK) button = 2;
+     if((modifiers & InputEvent.BUTTON3_DOWN_MASK) == 
+        InputEvent.BUTTON3_DOWN_MASK) button = 3;
+     MouseEvent e = new MouseEvent(owner, 
+ 				  MouseEvent.MOUSE_PRESSED,
+ 				  System.currentTimeMillis(),
+ 				  (modifiers & 0x2FF), x, y, clickCount, 
+ 				  ( button == POPUP_TRIGGER ), 
+ 				   button);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   protected void mouseReleaseEvent( int modifiers, int x, int y, int clickCount)
+   {
+     if( (eventMask & AWTEvent.MOUSE_EVENT_MASK) == 0 )
+       return;
+     int button = 0;
+     if((modifiers & InputEvent.BUTTON1_DOWN_MASK) == 
+        InputEvent.BUTTON1_DOWN_MASK) button = 1;
+     if((modifiers & InputEvent.BUTTON2_DOWN_MASK) == 
+        InputEvent.BUTTON2_DOWN_MASK) button = 2;
+     if((modifiers & InputEvent.BUTTON3_DOWN_MASK) == 
+        InputEvent.BUTTON3_DOWN_MASK) button = 3;
+ 
+     MouseEvent e = new MouseEvent(owner, 
+ 				  MouseEvent.MOUSE_RELEASED,
+ 				  System.currentTimeMillis(),
+ 				  (modifiers & 0x2FF), x, y, clickCount, 
+ 				  false, button);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   protected void moveEvent(int x, int y, int oldx, int oldy)
+   {
+     if( !ignoreResize )
+       {
+ 	// Since Component.setLocation calls back to setBounds, 
+ 	// we need to ignore that.
+ 	ignoreResize = true; 
+ 	owner.setLocation( x, y );
+ 	ignoreResize = false;
+       }
+   }
+ 
+   protected void resizeEvent(int oldWidth, int oldHeight, 
+ 			     int width, int height)
+   {
+     if(!(owner instanceof Window))
+       return;
+     updateBackBuffer(width, height);
+     ignoreResize = true;
+     owner.setSize(width, height);
+     ignoreResize = false;
+     ComponentEvent e = new ComponentEvent(owner, 
+   					  ComponentEvent.COMPONENT_RESIZED);
+     QtToolkit.eventQueue.postEvent(e);
+     QtToolkit.repaintThread.queueComponent(this);
+   }
+ 
+   protected void showEvent()
+   {
+     if (owner instanceof Window)
+       {
+ 	WindowEvent e = new WindowEvent((Window)owner, 
+ 					WindowEvent.WINDOW_OPENED);
+ 	QtToolkit.eventQueue.postEvent(e);
+       }
+     else 
+       {
+ 	ComponentEvent e = new ComponentEvent(owner, 
+ 					      ComponentEvent.COMPONENT_SHOWN);
+ 	QtToolkit.eventQueue.postEvent(e);
+       }
+   }
+ 
+   protected void hideEvent()
+   {
+     ComponentEvent e = new ComponentEvent(owner, 
+ 					  ComponentEvent.COMPONENT_HIDDEN);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   // ************ Public methods *********************
+ 
+   /** Classpath-specific method */
+   public void setEventMask(long x)
+   {
+     eventMask = x;
+   }
+ 
+ 
+   public boolean canDetermineObscurity()
+   {
+     return true;
+   } 
+ 
+   public int checkImage(Image img,
+ 			int w,
+ 			int h,
+ 			ImageObserver o)
+   {
+     return toolkit.checkImage(img, w, h, o);
+   }
+ 
+   public void createBuffers(int numBuffers, BufferCapabilities caps)
+     throws AWTException 
+   {
+     // FIXME
+   }
+ 
+   public Image createImage(ImageProducer producer)
+   {
+     return toolkit.createImage(producer);
+   }
+ 
+   public Image createImage(int width, int height)
+   {
+     return new QtImage(width, height);
+   }
+ 
+   public void coalescePaintEvent(PaintEvent e)
+   {
+     // FIXME
+   }
+ 
+   public VolatileImage createVolatileImage(int w, int h)
+   {
+     return new QtVolatileImage( w, h );
+   }
+ 
+   public void destroyBuffers()
+   {
+     // FIXME
+   }
+ 
+   public void disable()
+   {
+     setEnabled(false);
+   }
+ 
+   public void dispose()
+   {
+     disposeNative();
+     if( backBuffer != null )
+       backBuffer.dispose();
+   }
+ 
+   public void enable()
+   {
+     setEnabled(true);
+   }
+ 
+   public void finalize()
+   {
+     dispose();
+   }
+ 
+   public void flip(BufferCapabilities.FlipContents contents)
+   {
+   }
+ 
+   public Image getBackBuffer()
+   {
+     return backBuffer;
+   }
+ 
+   public ColorModel getColorModel()
+   {
+     return toolkit.getColorModel();
+   }
+ 
+   public FontMetrics getFontMetrics(Font font)
+   {
+     return new QtFontMetrics( font, getGraphics() );
+   }
+ 
+   public Graphics getGraphics()
+   {
+     if( backBuffer == null )
+       { 
+ 	Rectangle r = owner.getBounds();
+ 	backBuffer = new QtImage( r.width, r.height );
+       }
+     return backBuffer.getDirectGraphics( this );
+   }
+ 
+   public GraphicsConfiguration getGraphicsConfiguration()
+   {
+     int id = whichScreen(); // get the ID of the screen the widget is on.
+     GraphicsDevice[] devs = QtToolkit.graphicsEnv.getScreenDevices();
+     return devs[id].getDefaultConfiguration();
+   }
+ 
+   public Point getLocationOnScreen()
+   {
+     Point p = new Point();
+     synchronized( p ) 
+       {
+ 	getLocationOnScreenNative( p );
+ 	try
+ 	  {	
+ 	    p.wait(); // Wait for the thing to be created.
+ 	  }
+ 	catch(InterruptedException e)
+ 	  {
+ 	  }
+       }
+     return p;
+   }
+ 
+   private native void getSizeNative(Dimension d, boolean preferred);
+ 
+   private Dimension getSize(boolean preferred)
+   {
+     Dimension d = new Dimension();
+     synchronized( d ) 
+       {
+ 	getSizeNative(d, preferred);
+ 	try
+ 	  {	
+ 	    d.wait(); // Wait for the thing to be created.
+ 	  }
+ 	catch(InterruptedException e)
+ 	  {
+ 	  }
+       }
+     return d;
+   }
+ 
+   public Dimension getMinimumSize()
+   {
+     return getSize( false );
+   }
+  
+   public Dimension getPreferredSize()
+   {
+     return getSize( true );
+   }
+ 
+   public Toolkit getToolkit()
+   {
+     return toolkit;
+   }
+ 
+   public native boolean handlesWheelScrolling();
+    
+   public void hide()
+   {
+     setVisible(false);
+   }
+ 
+   public native boolean isFocusable();
+ 
+   public boolean isFocusTraversable()
+   {
+     // FIXME
+     return false;
+   }
+ 
+   public native boolean isObscured();
+ 
+   public Dimension minimumSize()
+   {
+     return getMinimumSize();
+   }
+ 
+   public Dimension preferredSize()
+   {
+     return getPreferredSize();
+   }
+ 
+   public native void requestFocus();
+ 
+   public boolean requestFocus (Component source, boolean bool1, 
+ 			       boolean bool2, long x)
+   {
+     // FIXME
+     return true;
+   }
+ 
+   public void reshape(int x,
+ 		      int y,
+ 		      int width,
+ 		      int height)
+   {
+     setBounds( x, y, width, height );
+   }
+ 
+   public void setBackground(Color c)
+   {
+     if(c == null && !settingUp)
+       return;
+     setGround(c.getRed(), c.getGreen(), c.getBlue(), false);
+   }
+ 
+   public void setBounds(int x, int y, int width, int height)
+   {
+     if( ignoreResize )
+       return;
+     updateBackBuffer(width, height);
+     QtToolkit.repaintThread.queueComponent(this);
+     setBoundsNative(x, y, width, height);
+   }
+ 
+   public void setCursor(Cursor cursor)
+   {
+     if (cursor != null)
+       setCursor(cursor.getType());
+   }
+ 
+   public native void setEnabled(boolean b);
+ 
+   public void setFont(Font f)
+   {
+     if( f == null || f.getPeer() == null)
+       throw new IllegalArgumentException("Null font.");
+     setFontNative( (QtFontPeer)f.getPeer() );
+   }
+ 
+   public void setForeground(Color c)
+   {
+     if(c == null && !settingUp)
+       return;
+     setGround(c.getRed(), c.getGreen(), c.getBlue(), true);
+   }
+   
+   public native void setVisible(boolean b);
+ 
+   public void show()
+   {
+     setVisible(true);
+   }
+ 
+   public void handleEvent (AWTEvent e)
+   {
+     int eventID = e.getID();
+     Rectangle r;
+ 
+     switch (eventID)
+       {
+       case ComponentEvent.COMPONENT_SHOWN:
+ 	QtToolkit.repaintThread.queueComponent(this);
+         break;
+       case PaintEvent.PAINT:
+       case PaintEvent.UPDATE:	
+ 	r = ((PaintEvent)e).getUpdateRect();
+ 	QtToolkit.repaintThread.queueComponent(this, r.x, r.y,
+ 					       r.width, r.height);
+         break;
+       case KeyEvent.KEY_PRESSED:
+ 	break;
+       case KeyEvent.KEY_RELEASED:
+ 	break;
+       }
+   }
+ 
+   /**
+    * paint() is called back from the native side in response to a native
+    * repaint event.
+    */  
+   public void paint(Graphics g)
+   {
+     Rectangle r = g.getClipBounds();
+ 
+     if (backBuffer != null)
+       backBuffer.drawPixelsScaledFlipped ((QtGraphics) g, 
+ 					  0, 0, 0, /* bg colors */
+ 					  false, false, /* no flipping */
+ 					  r.x, r.y, r.width, r.height,
+ 					  r.x, r.y, r.width, r.height,
+ 					  false ); /* no compositing */
+   }
+ 
+   public void paintBackBuffer() throws InterruptedException
+   {
+     if( backBuffer != null )
+       {
+ 	backBuffer.clear();
+ 	Graphics2D bbg = (Graphics2D)backBuffer.getGraphics();
+ 	owner.paint(bbg); 
+ 	bbg.dispose();
+       }
+   }
+ 
+   public void paintBackBuffer(int x, int y, int w, int h) 
+     throws InterruptedException
+   {
+     if( backBuffer != null )
+       {
+ 	Graphics2D bbg = (Graphics2D)backBuffer.getGraphics();
+ 	bbg.setBackground( getNativeBackground() );
+ 	bbg.clearRect(x, y, w, h);
+ 	bbg.setClip(x, y, w, h);
+ 	owner.paint(bbg); 
+ 	bbg.dispose();
+       }
+   }
+ 
+   public boolean prepareImage(Image img,
+ 			      int w,
+ 			      int h,
+ 			      ImageObserver o)
+   {
+     return toolkit.prepareImage(img, w, h, o);
+   }
+   
+   public void print(Graphics g)
+   {
+     // FIXME
+   }
+ 
+   /**
+    * Schedules a timed repaint.
+    */
+   public void repaint(long tm,
+ 		      int x,
+ 		      int y,
+ 		      int w,
+ 		      int h)
+   {
+     if( tm <= 0 )
+       {
+ 	QtToolkit.repaintThread.queueComponent(this, x, y, w, h);
+ 	return;
+       }      
+     Timer t = new Timer();
+     t.schedule(new RepaintTimerTask(this, x, y, w, h), tm);
+   }
+ 
+   /**
+    * Update the cursor (note that setCursor is usually not called)
+    */
+   public void updateCursorImmediately()
+   {
+     if (owner.getCursor() != null)
+       setCursor(owner.getCursor().getType());
+   }
+ 
+   /**
+    * Timed repainter
+    */
+   private class RepaintTimerTask extends TimerTask 
+   {    
+     private int x, y, w, h;
+     private QtComponentPeer peer;
+     RepaintTimerTask(QtComponentPeer peer, int x, int y, int w, int h)
+     { 
+       this.x=x;
+       this.y=y;
+       this.w=w;
+       this.h=h; 
+       this.peer=peer;
+     }
+     public void run()
+     { 
+       QtToolkit.repaintThread.queueComponent(peer, x, y, w, h);
+     }
+   }
+ 
+   public native Rectangle getBounds();
+ 
+   public void reparent(ContainerPeer parent)
+   {
+     if(!(parent instanceof QtContainerPeer))
+       throw new IllegalArgumentException("Illegal peer.");
+     reparentNative((QtContainerPeer)parent);
+   }
+ 
+   public void setBounds(int x, int y, int width, int height, int z)
+   {
+     // TODO Auto-generated method stub
+     
+   }
+ 
+   public boolean isReparentSupported()
+   {
+     return true;
+   }
+ 
+   // What does this do, anyway?
+   public void layout()
+   {
+     // TODO Auto-generated method stub
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtContainerPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtContainerPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtContainerPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtContainerPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,116 ----
+ /* QtContainerPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Container;
+ import java.awt.Component;
+ import java.awt.Insets;
+ import java.awt.peer.ContainerPeer;
+ 
+ public class QtContainerPeer extends QtComponentPeer implements ContainerPeer
+ {
+   public QtContainerPeer( QtToolkit kit, Component owner )
+   {
+     super( kit, owner );
+   }
+ 
+   protected void init()
+   {
+   }
+ 
+   protected void setup()
+   {
+     super.setup();
+   }
+ 
+   // ************ Public methods *********************
+   public void beginLayout()
+   {
+     // FIXME 
+   }
+ 
+   public void beginValidate()
+   {
+   }
+    
+   public void endLayout()
+   {
+     QtUpdate();
+   }
+ 
+   public void endValidate()
+   {
+   }
+  
+   public Insets getInsets()
+   {
+     return new Insets(0, 0, 0, 0);
+   }
+ 
+   public Insets insets()
+   {
+     return getInsets();
+   }
+ 
+   public boolean isPaintPending()
+   {
+     // FIXME etc.
+     return false;
+   }
+ 
+   public boolean isRestackSupported()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   public void cancelPendingPaint(int x, int y, int width, int height)
+   {
+     // TODO Auto-generated method stub
+     
+   }
+ 
+   public void restack()
+   {
+     // TODO Auto-generated method stub
+     
+   }
+ }
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtDialogPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtDialogPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtDialogPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtDialogPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,75 ----
+ /* QtDialogPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Dialog;
+ import java.awt.MenuBar;
+ import java.awt.Rectangle;
+ import java.awt.peer.DialogPeer;
+ 
+ public class QtDialogPeer extends QtWindowPeer implements DialogPeer
+ {
+   public QtDialogPeer( QtToolkit kit, Dialog owner )
+   {
+     super( kit, owner );
+   }
+ 
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     setTitle( ((Dialog)owner).getTitle() );
+     setResizable( ((Dialog)owner).isResizable() );
+     setModal( ((Dialog)owner).isModal() );
+   }
+ 
+   native void setModal(boolean modal);
+ 
+   private native void setBoundsNative(int x, int y, int width, int height, boolean fixed);
+ 
+   // ************ Public methods *********************
+ 
+   public native void setResizable (boolean resizeable);
+ 
+   public void setBounds(int x, int y, int width, int height)
+   {
+     setBoundsNative(x, y, width, height,
+ 		    !((Dialog)owner).isResizable());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtEmbeddedWindowPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtEmbeddedWindowPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtEmbeddedWindowPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtEmbeddedWindowPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,65 ----
+ /* QtEmbeddedWindowPeer.java -- embedded window peer
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Component;
+ import java.awt.peer.WindowPeer;
+ import gnu.java.awt.peer.EmbeddedWindowPeer;
+ 
+ /** 
+  * Embedded window peer for applets.
+  * FIXME: EmbeddedWindowPeer and this class should extend Window, NOT Frame.
+  */
+ public class QtEmbeddedWindowPeer extends QtFramePeer implements EmbeddedWindowPeer
+ {
+   public QtEmbeddedWindowPeer( QtToolkit kit, Component owner )
+   {
+     super( kit, owner );
+   }
+   
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+   }
+ 
+   // ************ Public methods *********************
+ 
+   public native void embed( long handle );
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtFileDialogPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtFileDialogPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtFileDialogPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtFileDialogPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,84 ----
+ /* QtFileDialogPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.FileDialog;
+ import java.io.FilenameFilter;
+ import java.awt.peer.FileDialogPeer;
+ 
+ public class QtFileDialogPeer extends QtDialogPeer implements FileDialogPeer
+ {
+   public QtFileDialogPeer( QtToolkit kit, FileDialog owner )
+   {
+     super( kit, owner );
+   }
+ 
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     setMode( ((FileDialog)owner).getMode() );
+   }
+ 
+   /**
+    * Sets load or save mode
+    */
+   private native void setMode(int mode);
+ 
+   private void fileDialogDone(String path, String filename)
+   {
+   }
+ 
+   // ************ Public methods *********************
+   public void setFile (String file)
+   {
+     // FIXME
+   }
+ 
+   public void setDirectory (String dir)
+   {
+     // FIXME
+   }
+ 
+   public void setFilenameFilter (FilenameFilter ff)
+   {
+     // FIXME
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtFontMetrics.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtFontMetrics.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtFontMetrics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtFontMetrics.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,128 ----
+ /* QtFontMetrics.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.font.LineMetrics;
+ 
+ public class QtFontMetrics extends FontMetrics
+ {
+ 
+   private long nativeObject;
+   private QtFontPeer peer;
+ 
+   public QtFontMetrics( Font f )
+   {
+     super( f );
+     if(f.getPeer() == null || !(f.getPeer() instanceof QtFontPeer))
+       throw new IllegalArgumentException("Invalid Font object.");
+     peer = (QtFontPeer) f.getPeer();
+     init( peer );
+   }
+ 
+   public QtFontMetrics( Font f, Graphics g )
+   {
+     super( f );
+     if(f.getPeer() == null || !(f.getPeer() instanceof QtFontPeer))
+       throw new IllegalArgumentException("Invalid Font object.");
+     if( !(g instanceof QtGraphics) )
+       throw new IllegalArgumentException("Invalid graphics object.");
+     peer = (QtFontPeer) f.getPeer();
+     initGraphics(peer, (QtGraphics)g );
+   }
+ 
+   QtFontMetrics( QtFontPeer f, Graphics g )
+   {
+     super( null );
+     if( !(g instanceof QtGraphics) )
+       throw new IllegalArgumentException("Invalid graphics object.");
+     peer = f;
+     initGraphics(peer, (QtGraphics)g );
+   }
+ 
+   public QtFontMetrics( QtFontPeer fp )
+   {
+     super( (Font)null );
+     peer = fp;
+     init( peer );
+   }
+ 
+   private native void init(QtFontPeer fp);
+ 
+   private native void initGraphics(QtFontPeer fp, QtGraphics g);
+ 
+   private native void dispose();
+ 
+   native Rectangle2D getStringBounds(String s);
+ 
+   // ****************** Package private ***************************
+   
+   native boolean canDisplay( char c );
+ 
+   // ****************** Public methods ****************************
+ 
+   public native int getAscent();
+ 
+   public native int getDescent();
+ 
+   public native int getHeight();
+ 
+   public native int getLeading();
+ 
+   public native int getMaxAdvance();
+ 
+   public native int charWidth(char c);
+ 
+   public int charsWidth(char[] chars, int off, int len)
+   {
+     return stringWidth( new String(chars, off, len) );
+   }
+ 
+   public native int stringWidth(String str);
+ 
+   public Rectangle2D getStringBounds(String str, Graphics context)
+   {
+     QtFontMetrics fm = new QtFontMetrics(peer, context);
+     return fm.getStringBounds( str );
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtFontPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtFontPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtFontPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtFontPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,209 ----
+ /* QtFontPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.font.LineMetrics;
+ import java.text.CharacterIterator;
+ import java.util.Locale;
+ import java.util.Map;
+ import java.awt.peer.FontPeer;
+ 
+ import gnu.java.awt.peer.ClasspathFontPeer;
+ 
+ public class QtFontPeer extends ClasspathFontPeer
+ {
+   // Pointer to native QFont structure.
+   private long nativeObject;
+   private QtFontMetrics metrics;
+ 
+ 
+   public QtFontPeer (String name, int style)
+   {
+     this(name, style, 12);
+   }
+ 
+   public QtFontPeer (String name, int style, int size)
+   {
+     super(name, style, size);
+     init();
+   }
+ 
+   public QtFontPeer (String name, Map attributes)
+   {
+     super(name, attributes);
+     init();
+   }
+ 
+   public void init()
+   {
+     if(this.familyName == null)
+       throw new IllegalArgumentException("null family name");
+     if(this.familyName.equals("Helvetica"))
+       this.familyName = "sans serif";
+     if(this.familyName.equals("Dialog"))
+       this.familyName = "sans serif";
+     create(this.familyName, this.style, (int)this.size);
+     metrics = new QtFontMetrics(this);
+   }
+ 
+   /**
+    * Creates the QFont object.
+    */
+   private native void create(String name, int style, int size);
+ 
+   /**
+    * Destroys the QFont.
+    */
+   public native void dispose();
+ 
+ 
+   // ****************** ClasspathFontPeer Methods.
+ 
+   public boolean canDisplay (Font font, char c)
+   {
+     return metrics.canDisplay( c );
+   }
+ 
+   public int canDisplayUpTo (Font font, CharacterIterator i, 
+ 			     int start, int limit)
+   {
+     int index = start;
+     char c = i.setIndex( index );
+     while( index <= limit )
+       {
+ 	if(!canDisplay(font, c))
+ 	  return index;
+ 	index++;
+ 	c = i.next();
+       }
+     return -1;
+   }
+ 
+   public String getSubFamilyName (Font font, Locale locale)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public String getPostScriptName (Font font)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public int getNumGlyphs (Font font)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public int getMissingGlyphCode (Font font)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public byte getBaselineFor (Font font, char c)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public String getGlyphName (Font font, int glyphIndex)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public GlyphVector createGlyphVector (Font font,
+ 					FontRenderContext frc,
+ 					CharacterIterator ci)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public GlyphVector createGlyphVector (Font font, 
+ 					FontRenderContext ctx, 
+ 					int[] glyphCodes)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public GlyphVector layoutGlyphVector (Font font, 
+ 					FontRenderContext frc, 
+ 					char[] chars, int start, 
+ 					int limit, int flags)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public FontMetrics getFontMetrics (Font font)
+   {
+     return new QtFontMetrics( this );
+   }
+ 
+   public boolean hasUniformLineMetrics (Font font)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public LineMetrics getLineMetrics (Font font, 
+ 				     CharacterIterator ci, 
+ 				     int begin, int limit, 
+ 				     FontRenderContext rc)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public Rectangle2D getMaxCharBounds (Font font, 
+ 				       FontRenderContext rc)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public Rectangle2D getStringBounds (Font font, 
+ 				      CharacterIterator ci, 
+ 				      int begin, int limit, 
+ 				      FontRenderContext frc)
+   {
+     int index = begin;
+     String s = "" + ci.setIndex( index );
+     while( index++ <= limit )
+       s = s + ci.next();
+     return metrics.getStringBounds(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtFramePeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtFramePeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtFramePeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtFramePeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,158 ----
+ /* QtFramePeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Component;
+ import java.awt.Frame;
+ import java.awt.Image;
+ import java.awt.Insets;
+ import java.awt.MenuBar;
+ import java.awt.Rectangle;
+ import java.awt.peer.FramePeer;
+ 
+ public class QtFramePeer extends QtWindowPeer implements FramePeer
+ {
+   private int theState; // FIXME
+ 
+   long frameObject;
+ 
+   public QtFramePeer( QtToolkit kit, Component owner )
+   {
+     super( kit, owner );
+   }
+ 
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     setTitle( ((Frame)owner).getTitle() );
+     if( ((Frame)owner).getMenuBar() != null )
+       setMenuBar( ((Frame)owner).getMenuBar() );
+   }
+ 
+   private native void setIcon(QtImage image);
+ 
+   private native void setMaximizedBounds(int w, int h);
+ 
+   private native void setMenu(QtMenuBarPeer mb);
+ 
+   private native int menuBarHeight();
+ 
+   // ************ Public methods *********************
+   
+   public void destroy()
+   {
+     dispose();
+   }
+ 
+   public int getState()
+   {
+     // FIXME 
+     return theState;
+   }
+ 
+   public Insets getInsets()
+   {
+     int mbHeight = ( ((Frame)owner).getMenuBar() != null ) ? 
+       menuBarHeight() : 0;
+     return new Insets(mbHeight, 0, 0, 0);
+   }
+ 
+   public void setIconImage(Image im)
+   {
+     if (im instanceof QtImage)
+       setIcon( (QtImage)im );
+     else 
+       setIcon( new QtImage( im.getSource() ) );
+   }
+ 
+   public void setMaximizedBounds(Rectangle rect)
+   {
+     // FIXME
+   }  
+ 
+   public void setMenuBar(MenuBar mb)
+   {
+     if( mb != null )
+       {
+ 	QtMenuBarPeer mbpeer = (QtMenuBarPeer)mb.getPeer();
+ 	if( mbpeer == null )
+ 	  {
+ 	    mb.addNotify();
+ 	    mbpeer = (QtMenuBarPeer)mb.getPeer();
+ 	    if( mbpeer == null )
+ 	      throw new IllegalStateException("No menu bar peer.");
+ 	  }
+ 	mbpeer.addMenus();
+ 	setMenu( mbpeer );
+       } 
+     else
+       setMenu( null );
+   }
+ 
+   public void setResizable(boolean resizeable)
+   {
+     // FIXME
+   }
+ 
+   public void setState(int s)
+   {
+     theState = s;
+     // FIXME
+   }
+ 
+   public void setBoundsPrivate(int x, int y, int width, int height)
+   {
+     // TODO Auto-generated method stub
+     
+   }
+ 
+   public void updateAlwaysOnTop()
+   {
+     // TODO Auto-generated method stub
+     
+   }
+ 
+   public boolean requestWindowFocus()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtGraphics.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtGraphics.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtGraphics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtGraphics.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,706 ----
+ /* QtGraphics.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.AlphaComposite;
+ import java.awt.BasicStroke;
+ import java.awt.Color;
+ import java.awt.Composite;
+ import java.awt.GradientPaint;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.Image;
+ import java.awt.RenderingHints;
+ import java.awt.Rectangle;
+ import java.awt.Paint;
+ import java.awt.Polygon;
+ import java.awt.Shape;
+ import java.awt.Stroke;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.PathIterator;
+ import java.awt.geom.Arc2D;
+ import java.awt.geom.Ellipse2D;
+ import java.awt.geom.Line2D;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.geom.RoundRectangle2D;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.BufferedImageOp;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.RenderedImage;
+ import java.awt.image.renderable.RenderableImage;
+ 
+ import java.text.AttributedCharacterIterator;
+ import java.text.CharacterIterator;
+ import java.util.Map;
+ 
+ /**
+  * QtGraphics is an abstract implementation of Graphics2D over a QPainter
+  * object. This is to be subclassed for different drawing contexts, 
+  * which may have different requirements.
+  */
+ public abstract class QtGraphics extends Graphics2D
+ {
+   /**
+    * Native QPainter pointer.
+    */
+   protected long nativeObject;
+ 
+   private static final AffineTransform identity = new AffineTransform();
+ 
+   // Graphics state
+   protected Font font;              // Current font.
+   protected Color color, bgcolor;   // Current color and background color.
+   protected Shape clip;             // Current clipping area.
+   protected Shape initialClip;      // Initial clip bounds
+   protected AffineTransform xform;  // Current transform
+   protected Stroke currentStroke;   // the current stroke
+   protected boolean nativeStroking; // whether we're using Qt's stroking or not
+   protected Composite composite; // current composite operator
+   protected double currentAlpha; // current alpha
+   protected Paint currentPaint;  // current paint
+   protected RenderingHints renderingHints; // the rendering hints.
+ 
+   /** 
+    * Owner Graphics, used by subcontext created by create()
+    * to avoid GC of the original context. 
+    */
+   Graphics parent;
+ 
+   /**
+    * Do-nothing constructor.
+    */
+   QtGraphics()
+   {
+   }
+ 
+   /**
+    * Copying constructor - used by copy() and subclasses.
+    */
+   QtGraphics(QtGraphics parent)
+   {
+     cloneNativeContext( parent );
+     setFont( parent.getFont() );
+     setAlpha( parent.currentAlpha );
+     setBackground( parent.getBackground() );
+     setColor( parent.getColor() );
+     setClip( (initialClip = parent.getClip()) );
+     setTransform( parent.getTransform() );
+     setStroke( parent.getStroke() );
+     setComposite( parent.getComposite() );
+     setPaint( parent.getPaint() );
+     setRenderingHints( parent.getRenderingHints() );
+   }
+ 
+   /**
+    * Set up some generic defaults.
+    */
+   protected void setup()
+   {
+     font = new Font ("Dialog", Font.PLAIN, 12);
+     setTransform( identity );
+     setStroke( new BasicStroke() );
+     renderingHints = new RenderingHints( null );
+   }
+ 
+   public synchronized native void delete();
+ 
+   public void dispose()
+   {
+   }
+ 
+   // ********************** etc *******************************
+ 
+   private void resetClip()
+   {
+     AffineTransform current = getTransform();
+     setTransform( identity );
+     setClip( initialClip );    
+     setTransform( current );
+   }
+ 
+   protected native void initImage(QtImage image);  
+   protected native void initVolatileImage(QtVolatileImage image);  
+ 
+   // Creates a new native QPainter object on the same context.
+   private native void cloneNativeContext( QtGraphics parent );
+   private native void setColor(int r, int g, int b, int a);
+   private native void drawNative( QPainterPath p );
+   private native void fillNative( QPainterPath p );
+   private native void setClipNative( QPainterPath p );
+   private native void setClipRectNative( int x, int y, int w, int h );
+   private native void intersectClipNative( QPainterPath p );
+   private native void intersectClipRectNative( int x, int y, int w, int h );
+   private native void setQtTransform(QMatrix m);
+   private native void setNativeStroke(QPen p);
+   private native void setNativeComposite(int alphaMode);
+   private native void drawStringNative(String string, double x, double y);
+   private native void setLinearGradient(int r1, int g1, int b1, 
+ 					int r2, int g2, int b2, 
+ 					double x1, double y1, 
+ 					double x2, double y2, boolean cyclic);
+   private native void setAlphaNative(double alpha);
+   private native void setFontNative(QtFontPeer font);
+   private native QPainterPath getClipNative();
+ 
+   void setAlpha(double alpha)
+   {
+     currentAlpha = alpha;
+     setAlphaNative(currentAlpha);
+   }
+ 
+   // ************ Public methods *********************
+ 
+   /**
+    * Context-sensitive methods are declared abstract.
+    */
+   public abstract Graphics create();
+ 
+   public abstract void copyArea(int x, int y, int width, int height, 
+ 				int dx, int dy);
+ 
+   public abstract GraphicsConfiguration getDeviceConfiguration();
+ 
+ 
+   public Color getColor()
+   {
+     return new Color(color.getRed(), color.getGreen(), color.getBlue());
+   }
+ 
+   public void setColor(Color c)
+   {
+     if( c == null )
+       c = Color.white;
+     this.color = c; 
+     int alpha = (int)(c.getAlpha() * currentAlpha);
+     setColor(c.getRed(), c.getGreen(), c.getBlue(), alpha);
+   }
+ 
+   public void setBackground(Color color)
+   {
+     bgcolor = new Color(color.getRed(), color.getGreen(), color.getBlue());
+   }
+ 
+   public Color getBackground()
+   {
+     return new Color(bgcolor.getRed(), bgcolor.getGreen(), bgcolor.getBlue());
+   }
+ 
+   public void setPaintMode()
+   {
+   }
+ 
+   public void setXORMode(Color color)
+   {
+     // FIXME
+   }
+ 
+   public boolean hit(Rectangle rect, Shape s, boolean onStroke)
+   {
+     if( onStroke )
+       {
+ 	Shape stroked = currentStroke.createStrokedShape( s );
+ 	return stroked.intersects( (double)rect.x, (double)rect.y, 
+ 				   (double)rect.width, (double)rect.height );
+       }
+     return s.intersects( (double)rect.x, (double)rect.y, 
+ 			 (double)rect.width, (double)rect.height );
+   }
+ 
+   // ******************* Font ***********************  
+   public Font getFont()
+   {
+     return font;
+   }
+ 
+   public void setFont(Font font)
+   {
+     if( font == null )
+       return;
+     this.font = font;
+     if(font.getPeer() != null && font.getPeer() instanceof QtFontPeer)
+       setFontNative( (QtFontPeer)font.getPeer() );
+   }
+ 
+   public FontMetrics getFontMetrics(Font font)
+   {
+     return new QtFontMetrics(font, this);
+   }
+ 
+   // ***************** Clipping *********************
+ 
+   /**
+    * Intersects the current clip with the shape
+    */
+   public void clip(Shape s)
+   {
+     intersectClipNative( new QPainterPath( s ) );
+   }
+ 
+   public void clipRect(int x, int y, int width, int height)
+   {
+     intersectClipRectNative( x, y, width, height );
+   }
+ 
+   public void setClip(int x, int y, int width, int height)
+   {
+     setClipRectNative( x, y, width, height );
+   }
+ 
+   public Shape getClip()
+   { 
+     return getClipNative().getPath();
+   }
+ 
+   public native Rectangle getClipBounds();
+ 
+   /**
+    * Sets the clip
+    */
+   public void setClip(Shape clip)
+   {
+     if (clip == null)
+       resetClip();
+     else
+       setClipNative(new QPainterPath( clip ));
+   }
+ 
+   // ***************** Drawing primitives *********************
+ 
+   public void draw(Shape s)
+   { 
+     if( nativeStroking )
+       drawNative( new QPainterPath(s) );
+     else
+       fillNative( new QPainterPath( currentStroke.createStrokedShape( s ) ) );
+   }
+ 
+   public void fill(Shape s)
+   {
+     fillNative( new QPainterPath(s) );
+   }
+ 
+   public void drawLine(int x1, int y1, int x2, int y2)
+   {
+     if( nativeStroking )
+       drawNative( new QPainterPath((double)x1, (double)y1, (double)x2, (double)y2, true) );
+     else
+       draw( new Line2D.Double((double)x1, (double)y1, (double)x2, (double)y2) );
+   }
+ 
+   public void drawRect(int x, int y, int width, int height)
+   {
+     if( nativeStroking )
+       drawNative( new QPainterPath((double)x, (double)y, 
+ 				   (double)width, (double)height) );
+     else
+       fillNative( new QPainterPath
+ 		  ( currentStroke.createStrokedShape
+ 		    (new Rectangle2D.Double
+ 		     ((double)x, (double)y, 
+ 		      (double)width, (double)height) ) ) );
+   }
+ 
+   public void fillRect(int x, int y, int width, int height)
+   {
+     fillNative( new QPainterPath( x, y, width, height ) );
+   }
+ 
+   public void clearRect(int x, int y, int width, int height)
+   {
+     Color c = color;
+     setColor( bgcolor ); // FIXME
+     fillRect( x, y, width, height );
+     setColor( c );
+   }
+ 
+   public void drawRoundRect(int x, int y, int width, int height, 
+ 			    int arcWidth, int arcHeight)
+   {
+     draw( new RoundRectangle2D.Double(x, y, width, height, 
+ 				      arcWidth, arcHeight) );
+   }
+ 
+   public void fillRoundRect(int x, int y, int width, int height, 
+ 			    int arcWidth, int arcHeight)
+   {
+     fill( new RoundRectangle2D.Double(x, y, width, height, 
+ 				      arcWidth, arcHeight) );
+   }
+ 
+   public void drawOval(int x, int y, int width, int height)
+   {
+     draw( new Ellipse2D.Double((double)x, (double)y, 
+ 			       (double)width, (double)height) );
+   }
+ 
+   public void fillOval(int x, int y, int width, int height)
+   {
+     fill( new Ellipse2D.Double(x, y, width, height) );
+   }
+ 
+   public void drawArc(int x, int y, int width, int height, 
+ 		      int arcStart, int arcAngle)
+   {
+     draw( new Arc2D.Double(x, y, width, height, arcStart, arcAngle, 
+ 			   Arc2D.OPEN) );
+   }
+ 
+   public void fillArc(int x, int y, int width, int height, 
+ 		      int arcStart, int arcAngle)
+   {
+     fill( new Arc2D.Double(x, y, width, height, arcStart, arcAngle, 
+ 			   Arc2D.CHORD) );
+   }
+ 
+   public void drawPolyline(int xPoints[], int yPoints[], int npoints)
+   {
+     for( int i = 0; i < npoints - 1; i++)
+       drawLine(xPoints[i], yPoints[i], xPoints[i + 1], yPoints[i + 1]);
+   }
+ 
+   public void drawPolygon(int xPoints[], int yPoints[], int npoints)
+   {
+     draw( new Polygon(xPoints, yPoints, npoints) );
+   }
+ 
+   public void fillPolygon(int xPoints[], int yPoints[], int npoints)
+   {
+     fill( new Polygon(xPoints, yPoints, npoints) );
+   }
+ 
+   public native void fill3DRect(int x, int y, int width, int height, boolean raised);
+ 
+   public native void draw3DRect(int x, int y, int width, int height, boolean raised);
+ 
+   // *********************** Text rendering *************************
+ 
+   public void drawString(String string, int x, int y)
+   {
+     drawStringNative(string, (double)x, (double)y);
+   }
+ 
+   public void drawString(String string, float x, float y)
+   {
+     drawStringNative(string, (double)x, (double)y);
+   }
+ 
+   public void drawString (AttributedCharacterIterator ci, int x, int y)
+   {
+     // FIXME - to something more correct ?
+     String s = "";
+     for(char c = ci.first(); c != CharacterIterator.DONE; c = ci.next()) 
+       s += c;
+     drawString(s, x, y);
+   }
+ 
+   public void drawString(AttributedCharacterIterator ci, 
+ 			 float x, float y)
+   {
+     // FIXME - to something more correct ?
+     String s = "";
+     for(char c = ci.first(); c != CharacterIterator.DONE; c = ci.next()) 
+       s += c;
+     drawString(s, x, y);
+   }
+ 
+   public void drawGlyphVector(GlyphVector v, float x, float y)
+   {
+     throw new RuntimeException("Not implemented");
+   }
+ 
+   // ******************* Image drawing ******************************
+   public boolean drawImage(Image image,
+ 			   AffineTransform Tx,
+ 			   ImageObserver obs)
+   {
+     if (image instanceof QtImage)
+       return ((QtImage)image).drawImage(this, new QMatrix( Tx ), obs);
+ 
+     return (new QtImage(image.getSource())).drawImage(this, 
+ 						      new QMatrix( Tx ), 
+ 						      obs);
+   }
+ 
+   public boolean drawImage(Image image, int x, int y, Color bgcolor, 
+ 			   ImageObserver observer)
+   {
+     if (image instanceof QtImage)
+       return ((QtImage)image).drawImage (this, x, y, bgcolor, observer);
+     return (new QtImage(image.getSource())).drawImage (this, x, y, 
+ 						       bgcolor, observer);
+   }
+ 
+   public boolean drawImage(Image image, 
+ 			   int dx1, int dy1, int dx2, int dy2, 
+ 			   int sx1, int sy1, int sx2, int sy2, 
+ 			   Color bgcolor, ImageObserver observer)
+   {
+     if (image instanceof QtImage)
+       return ((QtImage)image).drawImage(this, dx1, dy1, dx2, dy2, 
+ 					sx1, sy1, sx2, sy2, bgcolor, observer);
+ 
+     return (new QtImage(image.getSource())).drawImage(this, dx1, dy1, 
+ 						      dx2, dy2, 
+ 						      sx1, sy1, sx2, sy2, 
+ 						      bgcolor, observer);
+   }
+ 
+   public boolean drawImage(Image image, int x, int y, 
+ 			   int width, int height, Color bgcolor, 
+ 			   ImageObserver observer)
+   {
+     if (image instanceof QtImage)
+       return ((QtImage)image).drawImage (this, x, y, width, height, 
+ 					 bgcolor, observer);
+     return (new QtImage(image.getSource())).drawImage (this, x, y, 
+ 						       width, height, 
+ 						       bgcolor, observer);
+   }
+   
+   public boolean drawImage(Image image, int x, int y, int width, int height, 
+ 			   ImageObserver observer)
+   {
+     return drawImage(image, x, y, width, height, null, observer);
+   }
+  
+   public boolean drawImage(Image image, int x, int y, ImageObserver observer)
+   {
+     return drawImage(image, x, y, null, observer);
+   }
+  
+   public boolean drawImage(Image image, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
+   {
+     return drawImage(image, dx1, dy1, dx2, dy2, 
+ 		     sx1, sy1, sx2, sy2, null, observer);
+   }
+ 
+   // *********************** Transform methods *************************
+   public AffineTransform getTransform()
+   {
+     return new AffineTransform( xform );
+   }
+ 
+   public void setTransform(AffineTransform Tx)
+   {
+     xform = new AffineTransform( Tx );
+     setQtTransform( new QMatrix( xform ) );
+   }
+ 
+   public void rotate(double theta)
+   {
+     xform.rotate( theta );
+     setQtTransform( new QMatrix( xform ) );
+   }
+   
+   public void rotate(double theta, double x, double y)
+   {
+     xform.rotate(theta, x, y);
+     setQtTransform( new QMatrix( xform ) );
+   }
+ 
+   public void scale(double sx, double sy)
+   {
+     xform.scale(sx, sy);
+     setQtTransform( new QMatrix( xform ) );
+   }
+ 
+   public void shear(double shx, double shy)
+   {
+     xform.shear(shx, shy);
+     setQtTransform( new QMatrix( xform ) );
+   }
+   
+   public void transform(AffineTransform Tx)
+   {
+     xform.concatenate( Tx );
+     setQtTransform( new QMatrix( xform ) );
+   }
+ 
+   public void translate(double tx, double ty)
+   {
+     xform.translate( tx, ty );
+     setQtTransform( new QMatrix( xform ) );
+   }
+ 
+   public void translate(int x, int y)
+   {
+     translate((double)x, (double)y);
+   }
+ 
+   // *************** Stroking, Filling, Compositing *****************
+   public void setStroke(Stroke s)
+   {
+     try  // ..to convert the stroke into a native one.
+       {
+ 	QPen pen = new QPen( s );
+ 	nativeStroking = true;
+  	setNativeStroke( pen );
+ 	setColor( color );
+       } 
+     catch (IllegalArgumentException e)
+       {
+ 	nativeStroking = false;
+       }
+     currentStroke = s;
+   }
+ 
+   public Stroke getStroke()
+   { // FIXME: return copy?
+     return currentStroke;
+   }
+ 
+   public void setComposite(Composite comp)
+   {
+     if( comp == null)
+       {
+ 	setNativeComposite( AlphaComposite.SRC_OVER );
+ 	return;
+       }
+ 
+     if( comp instanceof AlphaComposite )
+       {
+  	if( ((AlphaComposite)comp).getRule() != AlphaComposite.XOR )
+  	  setAlpha( ((AlphaComposite)comp).getAlpha() );
+ 	setNativeComposite( ((AlphaComposite)comp).getRule() );
+ 	composite = comp;
+       }
+     else
+       throw new UnsupportedOperationException("We don't support custom"+
+ 					      " composites yet.");
+   }
+ 
+   public Composite getComposite()
+   {
+     return composite;
+   }
+ 
+   public void setPaint(Paint p)
+   {
+     if( p == null )
+       return; 
+ 
+     // FIXME
+     currentPaint = p;
+     if( p instanceof GradientPaint )
+       {
+ 	GradientPaint lg = (GradientPaint)p;
+ 	setLinearGradient(lg.getColor1().getRed(), lg.getColor1().getGreen(), 
+ 			  lg.getColor1().getBlue(), lg.getColor2().getRed(), 
+ 			  lg.getColor2().getGreen(), lg.getColor2().getBlue(),
+ 			  lg.getPoint1().getX(), lg.getPoint1().getY(),
+ 			  lg.getPoint2().getX(), lg.getPoint2().getY(),
+ 			  lg.isCyclic() );
+ 	return;
+       }
+     if( p instanceof Color )
+       {
+ 	setColor((Color) p);
+ 	return;
+       }
+     throw new UnsupportedOperationException("We don't support custom"+
+ 					    " paints yet.");
+   }
+ 
+   public Paint getPaint()
+   {
+     // FIXME
+     return currentPaint;
+   }
+ 
+   // ********************** Rendering Hints *************************
+ 
+   public void addRenderingHints(Map hints)
+   {
+     renderingHints.putAll( hints );
+   }
+ 
+   public Object getRenderingHint(RenderingHints.Key hintKey)
+   {
+     return renderingHints.get( hintKey );
+   }
+ 
+   public RenderingHints getRenderingHints()
+   {
+     return new RenderingHints( renderingHints );
+   }
+   
+   public void setRenderingHints(Map hints)
+   {
+     renderingHints = new RenderingHints( hints );
+     updateRenderingHints();
+   }
+ 
+   public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue)
+   {
+     renderingHints.put( hintKey, hintValue );
+     updateRenderingHints();
+   }
+ 
+   private void updateRenderingHints()
+   {
+     // FIXME - update native settings.
+   }
+ 
+   ////////////////////////////// unimplemented /////////////////////
+ 
+   public FontRenderContext getFontRenderContext()
+   {
+     throw new UnsupportedOperationException("Not implemented yet");
+   }
+ 
+   public void drawRenderableImage(RenderableImage image, AffineTransform xform)
+   {
+     throw new UnsupportedOperationException("Not implemented yet");
+   }
+ 
+   public void drawRenderedImage(RenderedImage image, AffineTransform xform)
+   {
+     throw new UnsupportedOperationException("Not implemented yet");
+   }
+ 
+   public void drawImage(BufferedImage image, BufferedImageOp op, int x, int y)
+   {
+     throw new UnsupportedOperationException("Not implemented yet");
+   }
+ } 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtGraphicsEnvironment.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtGraphicsEnvironment.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtGraphicsEnvironment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtGraphicsEnvironment.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,108 ----
+ /* QtGraphicsEnvironment.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Font;
+ import java.awt.Graphics2D;
+ import java.awt.GraphicsDevice;
+ import java.awt.GraphicsEnvironment;
+ import java.awt.HeadlessException;
+ import java.awt.image.BufferedImage;
+ import java.util.Locale;
+ 
+ public class QtGraphicsEnvironment extends GraphicsEnvironment
+ {
+   QtToolkit toolkit;
+   GraphicsDevice[] screens;
+ 
+   public QtGraphicsEnvironment (QtToolkit tk)
+   {
+     super();
+     toolkit = tk;
+     // Get the number of screens from Qt.
+     int n = toolkit.numScreens();
+     
+     /**
+      * Create the screen device objects
+      */
+     screens = new GraphicsDevice[ n ];
+     for(int i = 0; i < n; i++)
+       screens[ i ] = new QtScreenDevice( i );
+   }
+ 
+   public Font[] getAllFonts ()
+   {
+     String[] fonts = getAvailableFontFamilyNames();
+     Font[] fontObjs = new Font[fonts.length];
+     for( int i = 0; i < fonts.length; i++)
+       fontObjs[i] = new Font(fonts[i], Font.PLAIN, 12);
+     return fontObjs;
+   }
+ 
+   public String[] getAvailableFontFamilyNames()
+   {
+     return toolkit.getFontList();
+   }
+   
+   public String[] getAvailableFontFamilyNames(Locale l)
+   {
+     return getAvailableFontFamilyNames();
+   }
+ 
+   public GraphicsDevice getDefaultScreenDevice ()
+   {
+     return screens[ toolkit.defaultScreen() ];
+   }
+ 
+   public Graphics2D createGraphics (BufferedImage image)
+   {
+     return (Graphics2D)image.getGraphics();
+   }
+ 
+   public GraphicsDevice[] getScreenDevices()
+   {
+     return screens;
+   }
+ 
+   public QtToolkit getToolkit()
+   {
+     return toolkit;
+   }
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtImage.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtImage.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtImage.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,642 ----
+ /* QtImage.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Graphics;
+ import java.awt.Color;
+ import java.awt.Image;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.MemoryImageSource;
+ import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.ByteArrayOutputStream;
+ import java.io.BufferedInputStream;
+ import java.net.URL;
+ import java.util.Hashtable;
+ import java.util.WeakHashMap;
+ import java.util.Vector;
+ 
+ /**
+  * QtImage - wraps a QImage
+  *
+  */
+ public class QtImage extends Image
+ {
+   int width = -1, height = -1;
+ 
+   /**
+    * Properties.
+    */
+   Hashtable props;
+ 
+   /**
+    * Loaded or not flag, for asynchronous compatibility.
+    */
+   boolean isLoaded;
+ 
+   /**
+    * Pointer to the QImage
+    */
+   long nativeObject;
+ 
+   /**
+    * Observer queue.
+    */
+   Vector observers;
+ 
+   /**
+    * Error flag for loading.
+    */
+   boolean errorLoading;
+ 
+   /**
+    * Original source, if created from an ImageProducer.
+    */
+   ImageProducer source;
+ 
+   /*
+    * The 32-bit AARRGGBB format the  uses.
+    */
+   static ColorModel nativeModel = new DirectColorModel(32, 
+ 						       0x00FF0000,
+ 						       0x0000FF00,
+ 						       0x000000FF,
+ 						       0xFF000000);
+   /**
+    * HashMap of Graphics objects painting on this Image.
+    */
+   WeakHashMap painters;
+ 
+   /**
+    * Flags if this image is to be destroyed.
+    */
+   boolean killFlag;
+ 
+   /**
+    * Clears the image to RGBA 0
+    */
+   public native void clear();
+ 
+   /**
+    * Returns a copy of the pixel data as a java array.
+    */
+   private native int[] getPixels();
+ 
+   /**
+    * Sets the pixel data from a java array.
+    */
+   private native void setPixels(int[] pixels);
+ 
+   /**
+    * Loads an image 
+    */
+   private native boolean loadImage(String name);
+ 
+   /**
+    * Loads an image from data.
+    */
+   private native boolean loadImageFromData(byte[] data);
+ 
+   /**
+    * Allocates a QImage
+    */
+   private native void createImage();
+ 
+   /**
+    * Frees the above.
+    */
+   private synchronized native void freeImage();
+ 
+   /**
+    * Sets the image to scaled copy of src image. hints are rendering hints.
+    */
+   private native void createScaledImage(QtImage src, int hints);
+ 
+   /**
+    * Draws the image optionally composited.
+    */
+   native void drawPixels (QtGraphics gc, 
+ 			  int bg_red, int bg_green, int bg_blue, 
+ 			  int x, int y, 
+ 			  boolean composite);
+   /**
+    * Draws the image, optionally scaled and composited.
+    */
+   private native void drawPixelsScaled (QtGraphics gc, 
+ 					int bg_red, int bg_green, int bg_blue, 
+ 					int x, int y, int width, int height, 
+ 					boolean composite);
+ 
+   /**
+    * Draws the image transformed.
+    */
+   private native void drawPixelsTransformed (QtGraphics gc, QMatrix transform);
+   
+   /**
+    * Draws the image scaled flipped and optionally composited.
+    */
+   native void drawPixelsScaledFlipped (QtGraphics gc, 
+ 				       int bg_red, int bg_green, 
+ 				       int bg_blue, 
+ 				       boolean flipX, boolean flipY,
+ 				       int srcX, int srcY,
+ 				       int srcWidth, int srcHeight,
+ 				       int dstX, int dstY,
+ 				       int dstWidth, int dstHeight,
+ 				       boolean composite);
+ 
+   /**
+    * Creates the image from an ImageProducer. May result in an error image.
+    */
+   public QtImage (ImageProducer producer)
+   {
+     killFlag = false;
+     isLoaded = false;
+     observers = new Vector();
+     source = producer;
+     errorLoading = false;
+     if( producer != null )
+       source.startProduction(new QtImageConsumer(this, source));
+   }
+ 
+   /**
+    * Creates the image from a URL. May result in an error image.
+    */
+   public QtImage (URL url)
+   {
+     killFlag = false;
+     isLoaded = false;
+     observers = new Vector();
+     errorLoading = false;
+     if( url == null)
+       return;
+     ByteArrayOutputStream baos = new ByteArrayOutputStream( 5000 );
+     try
+       {
+         BufferedInputStream bis = new BufferedInputStream(url.openStream());
+ 
+         byte[] buf = new byte[5000];
+         int n = 0;
+ 
+         while ( (n = bis.read( buf )) != -1 ) 
+ 	  baos.write(buf, 0, n); 
+         bis.close();
+       }
+     catch(IOException e)
+       {
+ 	throw new IllegalArgumentException("Couldn't load image.");
+       }
+     if ( loadImageFromData( baos.toByteArray() ) != true )
+       throw new IllegalArgumentException("Couldn't load image.");
+ 
+     isLoaded = true;
+     observers = null;
+     props = new Hashtable();
+   }
+ 
+   /**
+    * Constructs a QtImage by loading a given file.
+    *
+    * @throws IllegalArgumentException if the image could not be loaded.
+    */
+   public QtImage (String filename)
+   {
+     killFlag = false;
+     File f = new File(filename);
+     observers = null;
+     props = new Hashtable();
+     try
+       {
+ 	String fn = f.getCanonicalPath();
+ 	if (loadImage( fn ) != true)
+ 	  {
+ 	    errorLoading = true;
+ 	    isLoaded = false;
+ 	    return;
+ 	  }
+       } 
+     catch(IOException e)
+       {
+ 	errorLoading = true;
+ 	isLoaded = false;
+ 	return;
+       }
+     errorLoading = false;
+     isLoaded = true;
+   }
+ 
+   /**
+    * Constructs a QtImage from a byte array of an image file.
+    *
+    * @throws IllegalArgumentException if the image could not be loaded.
+    */
+   public QtImage (byte[] data)
+   {
+     if (loadImageFromData(data) != true)
+       throw new IllegalArgumentException("Couldn't load image.");
+ 
+     killFlag = false;
+     isLoaded = true;
+     observers = null;
+     errorLoading = false;
+     props = new Hashtable();
+   }
+ 
+   /**
+    * Constructs an empty QtImage.
+    */
+   public QtImage (int width, int height)
+   {
+     this.width = width;
+     this.height = height;
+     props = new Hashtable();
+     isLoaded = true;
+     killFlag = false;
+     observers = null;
+     errorLoading = false;
+     createImage();
+     clear();
+   }
+ 
+   /**
+    * Constructs a scaled version of the src bitmap, using Qt
+    */
+   private QtImage (QtImage src, int width, int height, int hints)
+   {
+     this.width = width;
+     this.height = height;
+     props = new Hashtable();
+     isLoaded = true;
+     killFlag = false;
+     observers = null;
+     errorLoading = false;
+ 
+     createScaledImage(src, hints);
+   }
+ 
+   /**
+    * Callback from the image consumer.
+    */
+   public void setImage(int width, int height, 
+ 		       int[] pixels, Hashtable properties)
+   {
+     this.width = width;
+     this.height = height;
+     props = (properties != null) ? properties : new Hashtable();
+ 
+     if (width <= 0 || height <= 0 || pixels == null)
+       {
+ 	errorLoading = true;
+ 	return;
+       }
+ 
+     isLoaded = true;
+     deliver();
+     createImage();
+     setPixels(pixels);
+   }
+ 
+   // java.awt.Image methods ////////////////////////////////////////////////
+ 
+   public int getWidth (ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return -1;
+ 
+     return width;
+   }
+   
+   public int getHeight (ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return -1;
+     
+     return height;
+   }
+ 
+   public Object getProperty (String name, ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return UndefinedProperty;
+     
+     Object value = props.get (name);
+     return (value == null) ? UndefinedProperty : value;
+   }
+ 
+   /**
+    * Returns the source of this image.
+    */
+   public ImageProducer getSource ()
+   {
+     if (!isLoaded)
+       return null;
+     return new MemoryImageSource(width, height, nativeModel, getPixels(), 
+ 				 0, width);
+   }
+ 
+   void putPainter(QtImageGraphics g)
+   {
+     if( painters == null )
+       painters = new WeakHashMap();
+     painters.put( g, "dummy" );
+   }
+ 
+   void removePainter(QtImageGraphics g)
+   {
+     painters.remove( g );
+     if( killFlag && painters.isEmpty() )
+       freeImage();
+   }
+ 
+   /**
+    * Creates a Graphics context for this image.
+    */
+   public Graphics getGraphics ()
+   {
+     if (!isLoaded || killFlag) 
+       return null;
+ 
+     return new QtImageGraphics(this);
+   }
+ 
+   /**
+    * Creates a Graphics context for this image.
+    */
+   Graphics getDirectGraphics(QtComponentPeer peer)
+   {
+     if (!isLoaded) 
+       return null;
+ 
+     return new QtImageDirectGraphics(this, peer);
+   }
+   
+   /**
+    * Returns a scaled instance of this image.
+    */
+   public Image getScaledInstance(int width,
+ 				 int height,
+ 				 int hints)
+   {
+     if (width <= 0 || height <= 0)
+       throw new IllegalArgumentException("Width and height of scaled bitmap"+
+ 					 "must be >= 0");
+ 
+     return new QtImage(this, width, height, hints);
+   }
+ 
+   /**
+    * If the image is loaded and comes from an ImageProducer, 
+    * regenerate the image from there.
+    *
+    * I have no idea if this is ever actually used. Since QtImage can't be
+    * instantiated directly, how is the user to know if it was created from
+    * an ImageProducer or not?
+    */
+   public synchronized void flush ()
+   {
+     if (isLoaded && source != null)
+       {
+ 	observers = new Vector();
+ 	isLoaded = false;
+ 	freeImage();
+ 	source.startProduction(new QtImageConsumer(this, source));
+       }
+   }
+ 
+   public void finalize()
+   {
+     dispose();
+   }
+ 
+   public void dispose()
+   {
+     if (isLoaded)
+       {
+ 	if( painters == null || painters.isEmpty() )
+ 	  freeImage();
+ 	else
+ 	  killFlag = true; // can't destroy image yet. 
+ 	// Do so when all painters are gone.
+       }
+   }
+ 
+   /**
+    * Returns the image status, used by QtToolkit
+    */
+   public int checkImage (ImageObserver observer)
+   {
+     if (addObserver(observer))
+       {
+ 	if (errorLoading == true)
+ 	  return ImageObserver.ERROR;
+ 	else
+ 	  return 0;
+       }
+     
+     return ImageObserver.ALLBITS | ImageObserver.WIDTH | ImageObserver.HEIGHT;
+   }
+ 
+   // Drawing methods ////////////////////////////////////////////////
+ 
+   /**
+    * Draws an image with eventual scaling/transforming.
+    */
+   public boolean drawImage (QtGraphics g, QMatrix matrix,
+ 			    ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return false;
+ 
+     drawPixelsTransformed (g, matrix);
+ 
+     return true;
+   }
+ 
+   /**
+    * Draws an image to the QtGraphics context, at (x,y) with optional
+    * compositing with a background color.
+    */
+   public boolean drawImage (QtGraphics g, int x, int y,
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return false;
+ 
+     if(bgcolor != null)
+       drawPixels(g, bgcolor.getRed (), bgcolor.getGreen (), 
+ 		       bgcolor.getBlue (), x, y, true);
+     else
+       drawPixels(g, 0, 0, 0, x, y, false);
+ 
+     return true;
+   }
+ 
+   /**
+    * Draws an image to the QtGraphics context, at (x,y) scaled to 
+    * width and height, with optional compositing with a background color.
+    */
+   public boolean drawImage (QtGraphics g, int x, int y, int width, int height,
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return false;
+ 
+     if(bgcolor != null)
+       drawPixelsScaled(g, bgcolor.getRed (), bgcolor.getGreen (), 
+ 		       bgcolor.getBlue (), x, y, width, height, true);
+     else
+       drawPixelsScaled(g, 0, 0, 0, x, y, width, height, false);
+ 
+     return true;
+   }
+ 
+   /**
+    * Draws an image with eventual scaling/transforming.
+    */
+   public boolean drawImage (QtGraphics g, int dx1, int dy1, int dx2, int dy2, 
+ 			    int sx1, int sy1, int sx2, int sy2, 
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     if (addObserver(observer))
+       return false;
+ 
+     boolean flipX = (dx1 > dx2)^(sx1 > sx2);
+     boolean flipY = (dy1 > dy2)^(sy1 > sy2);
+     int dstWidth = Math.abs (dx2 - dx1);
+     int dstHeight = Math.abs (dy2 - dy1);
+     int srcWidth = Math.abs (sx2 - sx1);
+     int srcHeight = Math.abs (sy2 - sy1);
+     int srcX = (sx1 < sx2) ? sx1 : sx2;
+     int srcY = (sy1 < sy2) ? sy1 : sy2;
+     int dstX = (dx1 < dx2) ? dx1 : dx2;
+     int dstY = (dy1 < dy2) ? dy1 : dy2;
+ 
+     // Clipping. This requires the dst to be scaled as well, 
+     if (srcWidth > width)
+       {
+ 	dstWidth = (int)((double)dstWidth*((double)width/(double)srcWidth));
+ 	srcWidth = width - srcX;
+       }
+ 
+     if (srcHeight > height) 
+       {
+ 	dstHeight = (int)((double)dstHeight*((double)height/(double)srcHeight));
+ 	srcHeight = height - srcY;
+       }
+ 
+     if (srcWidth + srcX > width)
+       {
+ 	dstWidth = (int)((double)dstWidth * (double)(width - srcX)/(double)srcWidth);
+ 	srcWidth = width - srcX;
+       }
+ 
+     if (srcHeight + srcY > height)
+       {
+ 	dstHeight = (int)((double)dstHeight * (double)(width - srcY)/(double)srcHeight);
+ 	srcHeight = height - srcY;
+       }
+ 
+     if ( srcWidth <= 0 || srcHeight <= 0 || dstWidth <= 0 || dstHeight <= 0)
+       return true;
+ 
+     if(bgcolor != null)
+       drawPixelsScaledFlipped (g, bgcolor.getRed (), bgcolor.getGreen (), 
+ 			       bgcolor.getBlue (), 
+ 			       flipX, flipY,
+ 			       srcX, srcY,
+ 			       srcWidth, srcHeight,
+ 			       dstX,  dstY,
+ 			       dstWidth, dstHeight,
+ 			       true);
+     else
+       drawPixelsScaledFlipped (g, 0, 0, 0, flipX, flipY,
+ 			       srcX, srcY, srcWidth, srcHeight,
+ 			       dstX,  dstY, dstWidth, dstHeight,
+ 			       false);
+     return true;
+   }
+ 
+   public native void copyArea(int x, int y, int width, int height, 
+ 			      int dx, int dy);
+ 
+   // Private methods ////////////////////////////////////////////////
+ 
+   /**
+    * Delivers notifications to all queued observers.
+    */
+   private void deliver()
+   {
+     int flags = ImageObserver.HEIGHT | 
+       ImageObserver.WIDTH |
+       ImageObserver.PROPERTIES |
+       ImageObserver.ALLBITS;
+ 
+     if (observers != null)
+       for(int i=0; i < observers.size(); i++)
+ 	((ImageObserver)observers.elementAt(i)).
+ 	  imageUpdate(this, flags, 0, 0, width, height);
+ 
+     observers = null;
+   }
+   
+   /**
+    * Adds an observer, if we need to.
+    * @return true if an observer was added.
+    */
+   private boolean addObserver(ImageObserver observer)
+   {
+     if (!isLoaded)
+       {
+ 	if(observer != null)
+ 	  if (!observers.contains (observer))
+ 	    observers.addElement (observer);
+ 	return true;
+       }
+     return false;
+   }
+ 
+   public String toString()
+   {
+     return "QtImage [isLoaded="+isLoaded+", width="+width+", height="+height
+       +"]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtImageConsumer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtImageConsumer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtImageConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtImageConsumer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,154 ----
+ /* QtImageConsumer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Graphics;
+ import java.awt.Image;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.util.Hashtable;
+ import java.util.Vector;
+ 
+ /**
+  * Helper class to QtImage. Sits and gathers pixels for a QtImage and then
+  * calls QtImage.setImage().
+  *
+  * @author Sven de Marothy
+  */
+ public class QtImageConsumer implements ImageConsumer
+ {
+   private QtImage target;
+   private int width, height;
+   private Hashtable properties;
+   private int[] pixelCache = null;
+   private ImageProducer source;
+ 
+   public QtImageConsumer(QtImage target, ImageProducer source)
+   {
+     this.target = target;
+     this.source = source;
+   }
+ 
+   public synchronized void imageComplete (int status)
+   {
+     source.removeConsumer(this);
+     target.setImage(width, height, pixelCache, properties);
+   }
+ 
+   public synchronized void setColorModel (ColorModel model)
+   {
+     // This method is to inform on what the most used color model
+     // in the image is, for optimization reasons. We ignore this
+     // information.
+   }
+ 
+   public synchronized void setDimensions (int width, int height)
+   {
+     pixelCache = new int[width*height];
+ 
+     this.width = width;
+     this.height = height;
+   }
+ 
+   public synchronized void setHints (int flags)
+   {
+     // This method informs us in which order the pixels are
+     // delivered, for progressive-loading support, etc. 
+     // Since we wait until it's all loaded, we can ignore the hints.
+   }
+ 
+   public synchronized void setPixels (int x, int y, int width, int height, 
+ 				      ColorModel cm, byte[] pixels,
+ 				      int offset, int scansize)
+   {
+     setPixels (x, y, width, height, cm, convertPixels (pixels), offset,
+                scansize);
+   }
+ 
+   public synchronized void setPixels (int x, int y, int width, int height, 
+ 				      ColorModel cm, int[] pixels,
+ 				      int offset, int scansize)
+   {
+     if (pixelCache == null)
+       return; // Not sure this should ever happen.
+ 
+     if (cm.equals(QtImage.nativeModel))
+       for (int i = 0; i < height; i++)
+ 	System.arraycopy (pixels, offset + (i * scansize),
+ 			  pixelCache, (y + i) * this.width + x,
+ 			  width);
+     else
+       {
+ 	for (int i = 0; i < height; i++)
+ 	  for (int j = 0; j < width; j++)
+ 	    {
+ 	      // get in AARRGGBB and convert to AABBGGRR
+ 	      int pix = cm.getRGB(pixels[offset + (i * scansize) + x + j]);
+ 	      byte b = (byte)(pix & 0xFF);
+ 	      byte r = (byte)(((pix & 0x00FF0000) >> 16) & 0xFF);
+ 	      pix &= 0xFF00FF00;
+ 	      pix |= ((b & 0xFF) << 16);
+ 	      pix |= (r & 0xFF);
+ 	      pixelCache[(y + i) * this.width + x + j] = pix;
+ 	    }
+       }
+   }
+ 
+   /**
+    * This is an old method, no idea if it's correct.
+    */
+   private int[] convertPixels (byte[] pixels)
+   {
+     int ret[] = new int[pixels.length];
+ 
+     for (int i = 0; i < pixels.length; i++)
+       ret[i] = pixels[i] & 0xFF;
+     
+     return ret;
+   }
+ 
+   public synchronized void setProperties (Hashtable props)
+   {
+     this.properties = props;
+   }
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtImageDirectGraphics.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtImageDirectGraphics.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtImageDirectGraphics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtImageDirectGraphics.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,166 ----
+ /* QtImageDirectGraphics.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Color;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.Image;
+ import java.awt.Paint;
+ import java.awt.Rectangle;
+ import java.util.Stack;
+ import java.awt.Shape;
+ import java.awt.Stroke;
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.PathIterator;
+ import java.awt.geom.Arc2D;
+ import java.awt.geom.Ellipse2D;
+ import java.awt.geom.Line2D;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.geom.RoundRectangle2D;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.BufferedImageOp;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.RenderedImage;
+ import java.awt.image.renderable.RenderableImage;
+ 
+ /**
+  * A QtImagePainter that does an update after every drawing op.
+  */
+ public class QtImageDirectGraphics extends QtImageGraphics
+ {
+   private QtComponentPeer peer;
+   private boolean modified;
+ 
+   public QtImageDirectGraphics(QtImage image, QtComponentPeer peer)
+   {
+     super( image );
+     this.peer = peer;
+     modified = false;
+   }
+ 
+   public QtImageDirectGraphics(QtImageGraphics g)
+   {
+     super( g );
+   }
+ 
+   private void scheduleUpdate()
+   {
+   }
+ 
+   public void dispose()
+   {
+     super.dispose();
+     peer.toolkit.sync();
+     peer.QtUpdate();
+   }
+ 
+   public void draw(Shape s)
+   { 
+     super.draw(s);
+     scheduleUpdate();
+   }
+ 
+   public void fill(Shape s)
+   {
+     super.fill(s);
+     scheduleUpdate();
+   }
+ 
+   public void drawString(String string, int x, int y)
+   {
+     super.drawString( string, x, y );
+     scheduleUpdate();
+   }
+ 
+   public void drawString(String string, float x, float y)
+   {
+     super.drawString( string, x, y );
+     scheduleUpdate();
+   }
+ 
+   public void drawLine(int x1, int y1, int x2, int y2)
+   {
+     super.drawLine(x1, y1, x2, y2);
+     scheduleUpdate();
+   }
+ 
+   public boolean drawImage(Image image,
+ 			   AffineTransform Tx,
+ 			   ImageObserver obs)
+   {
+     boolean r = super.drawImage(image, Tx, obs);
+     scheduleUpdate();
+     return r;
+   }
+ 
+   public boolean drawImage(Image image, int x, int y, Color bgcolor, 
+ 			   ImageObserver observer)
+   {
+     boolean r = super.drawImage(image, x, y, bgcolor, observer);
+     scheduleUpdate();
+     return r;
+   }
+ 
+   public boolean drawImage(Image image, 
+ 			   int dx1, int dy1, int dx2, int dy2, 
+ 			   int sx1, int sy1, int sx2, int sy2, 
+ 			   Color bgcolor, ImageObserver observer)
+   {
+     boolean r = super.drawImage( image, dx1,  dy1,  dx2,  dy2, 
+ 				 sx1,  sy1,  sx2,  sy2, 
+ 				 bgcolor, observer);
+     scheduleUpdate();
+     return r;
+   }
+ 
+   public boolean drawImage(Image image, int x, int y, 
+ 			   int width, int height, Color bgcolor, 
+ 			   ImageObserver observer)
+   {
+     boolean r = super.drawImage(image, x, y, width, height, bgcolor, 
+ 				observer);
+     scheduleUpdate();
+     return r;
+   }
+ } 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtImageGraphics.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtImageGraphics.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtImageGraphics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtImageGraphics.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,143 ----
+ /* QtImageGraphics.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Color;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.Image;
+ import java.awt.Paint;
+ import java.awt.Rectangle;
+ import java.util.Stack;
+ 
+ /**
+  * QtComponentPainter is a Graphics2D context for painting to QtImage and
+  * QtVolatileImages.
+  */
+ public class QtImageGraphics extends QtGraphics
+ {
+   Image parentImage;
+   Stack owners;
+   QtImageGraphics topParent;
+ 
+   public QtImageGraphics(Image image)
+   {
+     if(!( image instanceof QtVolatileImage || image instanceof QtImage))
+       throw new IllegalArgumentException("Cannot create QtImageGraphics for a non-QImage context.");
+ 
+     owners = new Stack();
+     owners.push(this);
+     topParent = null;
+     int w, h;
+     if(image instanceof QtImage)
+       {
+ 	w = ((QtImage)image).width; 
+ 	h = ((QtImage)image).height; 
+ 	initImage((QtImage) image );
+ 	((QtImage)image).putPainter( this );
+       } 
+     else
+       {
+ 	w = ((QtVolatileImage)image).width; 
+ 	h = ((QtVolatileImage)image).height; 
+ 	initVolatileImage((QtVolatileImage) image );
+ 	((QtVolatileImage)image).putPainter( this );
+       }
+ 
+     parentImage = image;
+     initialClip = new Rectangle( 0, 0, w, h );
+     setClip( initialClip );
+     setBackground(Color.white); // fixme
+     currentAlpha = 1.0;
+     setColor(Color.black);
+     setup();
+   }
+ 
+   /**
+    * Copying constructor
+    */
+   QtImageGraphics( QtImageGraphics g )
+   {
+     super( g ); 
+     parentImage = g.parentImage;
+     if(parentImage instanceof QtImage)
+       ((QtImage)parentImage).putPainter( this );
+     else
+       ((QtVolatileImage)parentImage).putPainter( this );
+   }
+ 
+   public void dispose()
+   {
+     delete();
+     if( parentImage instanceof QtImage )
+       ((QtImage)parentImage).removePainter( this );
+     else
+       ((QtVolatileImage)parentImage).removePainter( this );
+   }
+ 
+   /**
+    * Create a copy of this context.
+    */
+   public Graphics create()
+   {
+     return new QtImageGraphics( this );
+   }
+ 
+   /**
+    * Copy an area.
+    */ 
+   public void copyArea(int x, int y, int width, int height, 
+ 		       int dx, int dy)
+   {
+     if(parentImage instanceof QtImage)
+       ((QtImage)parentImage).copyArea(x, y, width, height, dx, dy);
+     else
+       ((QtVolatileImage)parentImage).copyArea(x, y, width, height, dx, dy);
+   }
+ 
+   /**
+    * Returns the GraphicsConfiguration of the context component.
+    */
+   public GraphicsConfiguration getDeviceConfiguration()
+   {
+     throw new UnsupportedOperationException("Not implemented yet");
+   }
+ } 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtLabelPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtLabelPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtLabelPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtLabelPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,62 ----
+ /* QtLabelPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Label;
+ import java.awt.peer.LabelPeer;
+ 
+ public class QtLabelPeer extends QtComponentPeer implements LabelPeer
+ {
+   public QtLabelPeer( QtToolkit kit, Label owner )
+   {
+     super( kit, owner );
+   }
+   
+   protected native void init();
+   
+   protected void setup()
+   {
+     super.setup();
+     setText( ((Label)owner).getText() );
+     setAlignment( ((Label)owner).getAlignment() );
+   }
+ 
+   public native void setAlignment( int alignment );
+ 
+   public native void setText( String label );
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtListPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtListPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtListPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtListPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,188 ----
+ /* QtListPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Dimension;
+ import java.awt.List;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ItemEvent;
+ import java.awt.peer.ListPeer;
+ 
+ public class QtListPeer extends QtComponentPeer implements ListPeer
+ {
+   public QtListPeer( QtToolkit kit, List owner )
+   {
+     super( kit, owner );
+   }
+ 
+   public native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     List o = (List)owner;
+     // Multiple selection
+     setMultipleMode(o.isMultipleMode());
+     // Add initial list items.
+     String[] items = o.getItems();
+     for (int i = 0; i < items.length; i++)
+       add(items[i], i);
+ 
+     // Initial selections.
+     int[] selected = o.getSelectedIndexes();
+     for (int i = 0; i < selected.length; i++)
+       select(selected[i]);
+ 
+     // If no initial selection, use 0.
+     if(selected.length == 0 && items.length > 0)
+       select( 0 );
+   }
+ 
+   private boolean ignoreNextSelect = false;
+ 
+   /**
+    * Called back when a row is selected. -1 if no row is selected.
+    */
+   private void fireChoice( int index )
+   {
+     ignoreNextSelect = true;
+     if( index == -1)
+       ((List)owner).deselect( ((List)owner).getSelectedIndex() );
+       else
+ 	{
+ 	  ((List)owner).select( index );
+ 	  ItemEvent e = new ItemEvent((List)owner, 
+ 				      ItemEvent.ITEM_STATE_CHANGED, 
+ 				      ""+index,
+ 				      ItemEvent.SELECTED);
+ 	  QtToolkit.eventQueue.postEvent(e);
+ 	}
+   }
+ 
+   /**
+    * Called back when an item is double-clicked.
+    */ 
+   private void itemDoubleClicked( int index, int modifiers )
+   {
+     ActionEvent e = new ActionEvent(owner,
+ 				    ActionEvent.ACTION_PERFORMED,
+ 				    ((List)owner).getItem( index ),
+ 				    System.currentTimeMillis(),
+ 				    modifiers);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   private native void select(int index, boolean selected);
+ 
+   // ************ Public methods *********************
+ 
+   public native void add(String item, int index);
+ 
+   public void addItem(String item, int index)
+   {
+     add(item, index);
+   }
+ 
+   public void clear()
+   {
+     removeAll();
+   }
+ 
+   /**
+    * Deletes items from the starting index to the ending index (inclusive).
+    */
+   public native void delItems(int start_index, int end_index);
+ 
+   public void deselect(int index)
+   {   
+     if( ignoreNextSelect == true )
+       ignoreNextSelect = false;
+     else 
+       select(index, false);
+   }
+ 
+   public native int[] getSelectedIndexes();
+ 
+   public native void makeVisible(int index);
+ 
+   public Dimension minimumSize(int s)
+   {
+     return getMinimumSize(s);
+   }
+ 
+   public Dimension preferredSize(int s)
+   {
+     return getPreferredSize(s);
+   }
+ 
+   public void removeAll()
+   {
+     delItems(0, ((List)owner).getItemCount() - 1);
+   }
+ 
+   public void select(int index)
+   {
+     if( ignoreNextSelect == true )
+       ignoreNextSelect = false;
+     else 
+       select(index, true);
+   }
+ 
+   /**
+    * Sets multiple-selection mode.
+    * Note there's a bug in multiple selection in Qt 4.0.0, use 4.0.1.
+    */
+   public native void setMultipleMode(boolean multi);
+ 
+   public void setMultipleSelections(boolean multi)
+   {
+     setMultipleMode(multi);
+   }
+ 
+   public Dimension getPreferredSize(int s)
+   {
+     // FIXME
+     return getPreferredSize();
+   }
+ 
+   public Dimension getMinimumSize(int s)
+   {
+     // FIXME
+     return getMinimumSize();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtMenuBarPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtMenuBarPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtMenuBarPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtMenuBarPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,103 ----
+ /* QtMenuBarPeer.java -- Qt peer for a menu bar.
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Menu;
+ import java.awt.MenuBar;
+ import java.awt.peer.MenuBarPeer;
+ import java.util.Vector;
+ 
+ public class QtMenuBarPeer extends QtMenuComponentPeer implements MenuBarPeer
+ {
+   public QtMenuBarPeer( QtToolkit kit, MenuBar owner )
+   {
+     super( kit, owner );
+   }
+   
+   protected native void init();
+   
+   protected void setup()
+   {
+   }
+ 
+   /** 
+    * Recurses the menubar adding menus (and menu items), 
+    * called from the Frame peer.
+    */
+   void addMenus()
+   {
+     MenuBar o = (MenuBar)owner;
+     int help = (o.getHelpMenu() != null) ? 1 : 0;
+     for (int i = 0; i < o.getMenuCount() - help; i++)
+       addMenu( o.getMenu(i) );
+      if(o.getHelpMenu() != null)
+        addHelpMenu( o.getHelpMenu() );
+   }
+ 
+   private native void addMenu( QtMenuPeer mp );
+ 
+   private native void addHelpMenu( QtMenuPeer mp );
+ 
+   private native void delMenu( QtMenuPeer mp );
+ 
+   // ************ Public methods *********************
+ 
+   public void addMenu( Menu m )
+   {
+     if (m.getPeer() == null)
+       m.addNotify();
+     ((QtMenuPeer)m.getPeer()).addItems();
+     addMenu( (QtMenuPeer)m.getPeer() );
+   }
+ 
+   public void addHelpMenu( Menu m )
+   {
+     if (m.getPeer() == null)
+       m.addNotify();
+     ((QtMenuPeer)m.getPeer()).addItems();
+     addHelpMenu( (QtMenuPeer)m.getPeer() );
+   }
+ 
+   public void delMenu( int index )
+   {
+     Menu m = ((MenuBar)owner).getMenu( index );
+     if(m != null)
+       delMenu( (QtMenuPeer)m.getPeer() );
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtMenuComponentPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtMenuComponentPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtMenuComponentPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtMenuComponentPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,94 ----
+ /* QtMenuComponentPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Font;
+ import java.awt.MenuComponent;
+ import java.awt.peer.MenuComponentPeer;
+ 
+ public class QtMenuComponentPeer extends NativeWrapper 
+   implements MenuComponentPeer
+ {
+   protected QtToolkit toolkit;
+   protected MenuComponent owner;
+   
+   public QtMenuComponentPeer( QtToolkit kit, MenuComponent owner )
+   {
+     this.toolkit = kit;
+     this.owner = owner;
+     nativeObject = 0;
+     synchronized(this) 
+       {
+ 	callInit(); // Calls the init method FROM THE MAIN THREAD.
+ 	try
+ 	  {	
+ 	    wait(); // Wait for the thing to be created.
+ 	  }
+ 	catch(InterruptedException e)
+ 	  {
+ 	  }
+       }
+     setup();
+   }
+ 
+   protected native void callInit();
+ 
+   protected void init()
+   {
+   }
+ 
+   protected void setup()
+   {
+   }
+ 
+   public void finalize()
+   {
+     dispose();
+   }
+   
+   // ************ Public methods *********************
+ 
+   public native void dispose();
+ 
+   public void setFont(Font font)
+   {
+     // TODO Auto-generated method stub
+     
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtMenuItemPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtMenuItemPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtMenuItemPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtMenuItemPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,108 ----
+ /* QtMenuItemPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Menu;
+ import java.awt.MenuItem;
+ import java.awt.CheckboxMenuItem;
+ import java.awt.event.ActionEvent;
+ import java.awt.peer.MenuItemPeer;
+ import java.awt.peer.CheckboxMenuItemPeer;
+ 
+ public class QtMenuItemPeer extends QtMenuComponentPeer 
+   implements MenuItemPeer, CheckboxMenuItemPeer
+ {
+   public QtMenuItemPeer( QtToolkit toolkit, MenuItem owner )
+   {
+     super(toolkit, owner);
+   }
+ 
+   protected void init()
+   {
+     String label = ((MenuItem)owner).getLabel();
+     create(label, label.equals("-"), (owner instanceof CheckboxMenuItem));
+   }
+ 
+   protected void setup()
+   {
+   }
+ 
+   private native void create(String label, boolean isSeperator, boolean isCheckable);
+ 
+   public void finalize()
+   {
+     dispose();
+   }
+ 
+   public native void dispose();
+ 
+   private void fireClick(int modifiers)
+   {
+     ActionEvent e = new ActionEvent(owner,
+ 				    ActionEvent.ACTION_PERFORMED,
+ 				    ((MenuItem)owner).getActionCommand(),
+ 				    System.currentTimeMillis(),
+ 				    (modifiers & 0x2FF));
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   // ************ Public methods *********************
+   
+   public void disable()
+   {
+     setEnabled(false);
+   }
+ 
+   public void enable()
+   {
+     setEnabled(true);
+   }
+ 
+   public native void setEnabled(boolean b);
+ 
+   public native void setLabel(String label);
+ 
+   public native void setState(boolean state);
+ }
+ 
+ 
+ 
+ 
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtMenuPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtMenuPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtMenuPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtMenuPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,152 ----
+ /* QtMenuPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Menu;
+ import java.awt.MenuItem;
+ import java.awt.PopupMenu;
+ import java.awt.event.ActionEvent;
+ import java.awt.peer.MenuPeer;
+ import java.util.Vector;
+ 
+ public class QtMenuPeer extends QtMenuComponentPeer implements MenuPeer
+ {
+   Vector items;
+   boolean itemsAdded;
+ 
+   public QtMenuPeer( QtToolkit kit, Menu owner )
+   {
+     super( kit, owner );
+     itemsAdded = false;
+   }
+ 
+   protected native void init();
+   
+   protected void setup()
+   {
+     items = new Vector();
+     setLabel( ((Menu)owner).getLabel() );
+     if( ((Menu)owner).isTearOff() )
+       allowTearOff();
+   }
+ 
+   // Recurse the menu tree adding items, 
+   // called from the MenuBar addMenus() method, called from the Frame peer.
+   void addItems()
+   {
+     if(!itemsAdded)
+       {
+ 	Menu o = (Menu)owner;
+ 	for( int i=0; i < o.getItemCount(); i++ )
+ 	  {
+ 	    MenuItem ci = (MenuItem)o.getItem(i);
+ 	    if (ci instanceof Menu && ci.getPeer() != null)
+ 	      ((QtMenuPeer)ci.getPeer()).addItems();
+ 	    addItem( ci );
+ 	  }
+ 	itemsAdded = true;
+       }
+   }
+ 
+   private void fireClick()
+   {
+     ActionEvent e = new ActionEvent(owner,
+ 				    ActionEvent.ACTION_PERFORMED,
+ 				    ((Menu)owner).getActionCommand());
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   private native void allowTearOff();
+ 
+   private native void insertSeperator();
+ 
+   private native void insertItem(QtMenuItemPeer p);
+ 
+   private native void insertMenu(QtMenuPeer menu);
+ 
+   private native void delItem(long ptr);
+ 
+   private void add(long ptr)
+   {
+     items.add(new Long(ptr));
+   }
+ 
+   // ************ Public methods *********************
+ 
+   public void addItem( MenuItem item )
+   {
+     if( item instanceof Menu || item instanceof PopupMenu)
+       insertMenu((QtMenuPeer)item.getPeer());
+     else 
+       {
+ 	QtMenuItemPeer p = (QtMenuItemPeer)item.getPeer();
+ 	insertItem(p);
+       }
+   }
+   
+   public void addSeparator()
+   {
+     insertSeperator();
+   }
+ 
+   public void delItem( int index )
+   {
+     long ptr = ((Long)items.elementAt(index)).longValue();
+     delItem(ptr);
+     items.removeElementAt(index);
+   }
+ 
+   // Inherited methods..
+ 
+   public void disable()
+   {
+     setEnabled(false);
+   }
+ 
+   public void enable()
+   {
+     setEnabled(true);
+   }
+ 
+   public native void setEnabled(boolean enabled);
+ 
+   public native void setLabel(String text);
+ }
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtPanelPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtPanelPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtPanelPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtPanelPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,56 ----
+ /* QtPanelPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Component;
+ import java.awt.peer.PanelPeer;
+ 
+ public class QtPanelPeer extends QtContainerPeer implements PanelPeer
+ {
+   public QtPanelPeer( QtToolkit kit, Component owner )
+   {
+     super( kit, owner );
+   }
+   
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtPopupMenuPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtPopupMenuPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtPopupMenuPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtPopupMenuPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,82 ----
+ /* QtPopupMenuPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Component;
+ import java.awt.Menu;
+ import java.awt.MenuItem;
+ import java.awt.Point;
+ import java.awt.PopupMenu;
+ import java.awt.Event;
+ import java.awt.event.ActionEvent;
+ import java.awt.peer.PopupMenuPeer;
+ 
+ public class QtPopupMenuPeer extends QtMenuPeer implements PopupMenuPeer
+ {
+   public QtPopupMenuPeer( QtToolkit kit, PopupMenu owner )
+   {
+     super( kit, owner );
+   }
+ 
+   private native void showNative(int x, int y);
+ 
+   // ************ Public methods *********************
+ 
+   /**
+    * Part of the older API, replaced by event version instead.
+    */
+   public void show (Component origin, int x, int y)
+   {
+     if( origin == null )
+       throw new NullPointerException("Null parent component.");
+     addItems();
+ 
+     Point p = origin.getLocationOnScreen();
+     showNative( (int)p.getX() + x, (int)p.getY() + y );
+   }
+ 
+   public void show (Event e)
+   {
+     if (!(e.target instanceof Component))
+       throw new IllegalArgumentException("Expecting a component Event target!");
+     show((Component)e.target, e.x, e.y);
+   }
+ }
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtRepaintThread.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtRepaintThread.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtRepaintThread.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtRepaintThread.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,156 ----
+ /* QtRepaintThread.java -- Repaint thread implementation
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ /**
+  * This class does repainting of Component back-buffers. It is undesirable to
+  * do this directly from the paint callback in QtComponentPeer, because that
+  * is executed from the main thread. Thus, if a call is made at the same time
+  * which requires execution by the main thread, and this is sharing a lock with
+  * paint(), then a deadlock will occur, which must be avoided. In general, 
+  * the main Qt thread should avoid calling into java code as far as possible.
+  *
+  */
+ public class QtRepaintThread extends Thread 
+ {
+   static class RepaintComponent 
+   {
+     public QtComponentPeer curr;
+     public RepaintComponent next;
+     public boolean paintAll;
+     public int x, y, w, h;
+ 
+     public RepaintComponent(QtComponentPeer p)
+     {
+       curr = p;
+       next = null;
+       paintAll = true;
+     }
+ 
+     public RepaintComponent(QtComponentPeer p, int x, int y, int w, int h)
+     {
+       this(p);
+       paintAll = false;
+       this.x = x;
+       this.y = y;
+       this.w = w;
+       this.h = h;
+     }
+   }
+   
+   RepaintComponent component;
+   boolean busy;
+ 
+   public QtRepaintThread()
+   {
+     component = null;
+   }
+ 
+   public void run()
+   {
+     while( true )
+       {
+ 	try
+ 	  {
+ 	    busy = false;
+ 	    // Wait for a repaint
+ 	    sleep(100);
+ 	    busy = true;
+ 	  }
+ 	catch (InterruptedException ie)
+ 	  {
+ 	    while( component != null )
+ 	      {
+ 		try
+ 		  {
+ 		    if( component.paintAll )
+ 		      {
+ 			// update the back-buffer.
+ 			component.curr.paintBackBuffer(); 
+ 			component.curr.QtUpdate(); // trigger a native repaint event
+ 		      }
+ 		    else
+ 		      {
+ 			component.curr.paintBackBuffer(component.x, component.y,
+ 						       component.w, component.h);
+ 			component.curr.QtUpdateArea(component.x, component.y,
+ 						    component.w, component.h); 
+ 		      }
+ 		  }
+ 		catch (InterruptedException e)
+ 		  {
+ 		  }
+ 		component = component.next;
+ 	      }
+ 	  }
+       }
+   }
+ 
+   /**
+    * Enqueue a component for repainting.
+    */
+   public synchronized void queueComponent(QtComponentPeer p)
+   {
+     if( component == null )
+       component = new RepaintComponent(p);
+     else
+       {
+ 	RepaintComponent r = component;
+ 	while( r.next != null ) r = r.next;
+ 	r.next = new RepaintComponent(p);
+       }
+     interrupt();
+   }
+ 
+   /**
+    * Enqueue a component for repainting.
+    */
+   public synchronized void queueComponent(QtComponentPeer p, int x, int y, 
+ 					  int w, int h)
+   {
+     if( component == null )
+       component = new RepaintComponent(p, x, y, w, h);
+     else
+       {
+ 	RepaintComponent r = component;
+ 	while( r.next != null ) r = r.next;
+ 	r.next = new RepaintComponent(p, x, y, w, h);
+       }
+     interrupt();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtScreenDevice.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtScreenDevice.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtScreenDevice.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtScreenDevice.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,116 ----
+ /* QtScreenDevice.java -- Wrapper on a Qt screen Widget
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.GraphicsConfiguration;
+ import java.awt.GraphicsDevice;
+ import java.awt.DisplayMode;
+ import java.awt.GraphicsConfigTemplate;
+ import java.awt.Rectangle;
+ import java.awt.Window;
+ 
+ public class QtScreenDevice extends GraphicsDevice
+ {
+   private long nativeObject;
+   private int id;
+   private String IDstring;
+   QtScreenDeviceConfiguration config;
+ 
+   public QtScreenDevice(int id)
+   {
+     this.id = id;
+     IDstring = "QtScreen" + id;
+     init( id );
+     config = new QtScreenDeviceConfiguration(this);
+   }
+ 
+   public native void init( int id );
+   public native void dispose();
+ 
+   // Package-private methods used by QtScreenDeviceConfiguration
+   native Rectangle getBounds();
+   native int getDpiX();
+   native int getDpiY();
+   native int depth();
+ 
+   // ****************** Public methods ***********************
+ 
+   public GraphicsConfiguration getBestConfiguration(GraphicsConfigTemplate gct)
+   {
+     return config;
+   }
+ 
+   public GraphicsConfiguration[] getConfigurations()
+   {
+     return new GraphicsConfiguration[]{ config };
+   }
+ 
+   public GraphicsConfiguration getDefaultConfiguration()
+   {
+     return config;
+   }
+ 
+   public String getIDstring()
+   {
+     return IDstring;
+   }
+ 
+   public int getType()
+   {
+     return TYPE_RASTER_SCREEN;
+   }
+ 
+   public boolean isDisplayChangeSupported()
+   {
+     return false;
+   }
+ 
+   public boolean isFullScreenSupported()
+   {
+     return false;
+   }
+ 
+   public void setDisplayMode(DisplayMode dm)
+   {
+   }
+ 
+   public void setFullScreenWindow(Window w)
+   {
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtScreenDeviceConfiguration.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtScreenDeviceConfiguration.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtScreenDeviceConfiguration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtScreenDeviceConfiguration.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,147 ----
+ /* QtScreenDeviceConfiguration.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.DisplayMode;
+ import java.awt.ImageCapabilities;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.GraphicsDevice;
+ import java.awt.GraphicsConfigTemplate;
+ import java.awt.Rectangle;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ import java.awt.image.VolatileImage;
+ import java.awt.geom.AffineTransform;
+ 
+ public class QtScreenDeviceConfiguration extends GraphicsConfiguration {
+   
+   private QtScreenDevice owner;
+   private Rectangle bounds;
+   private double dpiX, dpiY;
+   private int depth;
+ 
+   public QtScreenDeviceConfiguration(QtScreenDevice owner)
+   {
+     this.owner = owner;
+     bounds = owner.getBounds();
+     dpiX = owner.getDpiX();
+     dpiY = owner.getDpiY();
+     depth = owner.depth();
+   }
+ 
+   public BufferedImage createCompatibleImage(int width, int height)
+   {
+     switch( depth )
+       {
+       case 24:
+ 	return new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
+       case 16:
+ 	return new BufferedImage(width, height, 
+ 				 BufferedImage.TYPE_USHORT_565_RGB);
+       case 8:
+ 	return new BufferedImage(width, height, BufferedImage.TYPE_BYTE_INDEXED);
+       default:
+       case 32:
+ 	return new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+       }
+   }
+ 
+   public BufferedImage createCompatibleImage(int width, int height, int transparency)
+   {
+     // FIXME: Take the transpareny flag into account? 
+     // For now, ignore it and just use an alpha channel.
+     if(depth == 32)
+       return new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+     return createCompatibleImage(width, height);
+   }
+ 
+   public VolatileImage createCompatibleVolatileImage(int width, int height)
+   {
+     return new QtVolatileImage( width, height );
+   }
+   
+   public VolatileImage createCompatibleVolatileImage(int width, int height, 
+ 						     ImageCapabilities caps)
+   {
+     return createCompatibleVolatileImage( width, height );
+   }
+ 
+   public Rectangle getBounds()
+   {
+     return bounds;
+   }
+ 
+   public ColorModel getColorModel()
+   {
+     // FIXME?
+     return QtToolkit.getDefaultToolkit().getColorModel();
+   }
+ 
+   public ColorModel getColorModel(int transparency)
+   {
+     // FIXME?
+     return QtToolkit.getDefaultToolkit().getColorModel();
+   }
+ 
+   public AffineTransform getDefaultTransform()
+   {
+     return new AffineTransform();
+   }
+ 
+   public GraphicsDevice	getDevice()
+   {
+     return owner;
+   }
+ 
+   /**
+    * Returns the transform which transforms from this display's resolution
+    * to a 72 DPI resolution.
+    */
+   public AffineTransform getNormalizingTransform()
+   {
+     AffineTransform nTrans = new AffineTransform();
+     nTrans.scale( 72.0 / dpiX, 72.0 / dpiY );
+     return nTrans;
+   }
+ 
+   public VolatileImage createCompatibleVolatileImage(int width, int height, 
+ 						     int transparency)
+   {
+     return createCompatibleVolatileImage(width, height);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtScrollPanePeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtScrollPanePeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtScrollPanePeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtScrollPanePeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,91 ----
+ /* QtScrollPanePeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Adjustable;
+ import java.awt.Dimension;
+ import java.awt.Insets;
+ import java.awt.ScrollPane;
+ import java.awt.peer.ScrollPanePeer;
+ 
+ public class QtScrollPanePeer extends QtContainerPeer implements ScrollPanePeer
+ {
+   public QtScrollPanePeer( QtToolkit kit, ScrollPane owner )
+   {
+     super( kit, owner );
+   }
+   
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     setPolicy( ((ScrollPane)owner).getScrollbarDisplayPolicy() );
+   }
+ 
+   private native void setPolicy(int policy);
+ 
+   // ************ Public methods *********************
+ 
+   public native void childResized(int width, int height);
+ 
+   public native int getHScrollbarHeight();
+ 
+   public native int getVScrollbarWidth();
+ 
+   public native void setScrollPosition(int x, int y);
+ 
+   public Insets getInsets()
+   {
+     // FIXME : more accurate?
+     return new Insets(5 + getHScrollbarHeight(),  // Top
+ 		      5 + getVScrollbarWidth(),  // Left
+ 		      5,  // Bottom
+ 		      5); // Right
+   }
+ 
+   public void setUnitIncrement(Adjustable item, int inc)
+   {
+     // FIXME
+   }
+ 
+   public void setValue(Adjustable item, int value)
+   {
+     // FIXME
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtScrollbarPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtScrollbarPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtScrollbarPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtScrollbarPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,80 ----
+ /* QtScrollbarPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Scrollbar;
+ import java.awt.event.AdjustmentEvent;
+ import java.awt.peer.ScrollbarPeer;
+ 
+ public class QtScrollbarPeer extends QtComponentPeer implements ScrollbarPeer
+ {
+   public QtScrollbarPeer( QtToolkit kit, Scrollbar owner )
+   {
+     super( kit, owner );
+   }
+ 
+   public native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     Scrollbar o = (Scrollbar)owner;
+     setValues(o.getValue(), o.getVisible(), o.getMinimum(), o.getMaximum());
+     setOrientation(o.getOrientation());
+     setLineIncrement(o.getLineIncrement());
+     setPageIncrement(o.getPageIncrement());
+   }
+ 
+   private native void setOrientation(int orientation);
+ 
+   private void fireMoved(int type, int value)
+   {
+     AdjustmentEvent e = new AdjustmentEvent((Scrollbar)owner,
+ 					    AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
+ 					    type, value);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+   
+   // ************ Public methods *********************
+   
+   public native void setLineIncrement(int inc);
+ 
+   public native void setPageIncrement(int inc);
+ 
+   public native void setValues(int value, int visible, int min, int max);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtTextAreaPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtTextAreaPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtTextAreaPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtTextAreaPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,180 ----
+ /* QtTextAreaPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Dimension;
+ import java.awt.Rectangle;
+ import java.awt.TextArea;
+ import java.awt.event.TextEvent;
+ import java.awt.im.InputMethodRequests;
+ import java.awt.peer.TextAreaPeer;
+ 
+ public class QtTextAreaPeer extends QtComponentPeer implements TextAreaPeer
+ {
+   public QtTextAreaPeer( QtToolkit kit, TextArea owner )
+   {
+     super( kit, owner );
+   }
+ 
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     setText(((TextArea)owner).getText());
+     setEditable(((TextArea)owner).isEditable());
+   }
+ 
+   /**
+    * Returns the start (start = true) or end (start = false) of the selection.
+    */
+   private native int getSelection(boolean start);
+ 
+   /**
+    * Called back on a text edit.
+    */
+   private void textChanged()
+   {  
+     TextEvent e = new TextEvent(owner, TextEvent.TEXT_VALUE_CHANGED);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   // ************ Public methods *********************
+ 
+   public long filterEvents(long filter)
+   {
+     return filter;
+   }
+ 
+   public native int getCaretPosition();
+ 
+   public Rectangle getCharacterBounds(int pos)
+   {
+     // FIXME
+     return new Rectangle(0,0,0,0);
+   }
+ 
+   /**
+    * Implemented, but who uses it?
+    */
+   public native int getIndexAtPoint(int x, int y);
+ 
+ //   public void reshape(int x, int y,
+ // 		      int width, int height)
+ //   {
+ //     if(width != 0 || height != 0)
+ //       super.reshape(x, y, width, height);
+ //     else
+ //       super.reshape(x, y, 10, 10);
+ //   }
+ 
+   public Dimension getMinimumSize(int rows, int cols)
+   {
+     // FIXME
+     return getMinimumSize();
+   }
+ 
+   public Dimension getPreferredSize(int rows, int cols)
+   {
+     // FIXME
+     return getPreferredSize();
+   }
+ 
+   public int getSelectionEnd()
+   {
+     return getSelection(false);
+   }
+ 
+   public int getSelectionStart()
+   {
+     return getSelection(true);
+   }
+ 
+   public native String getText();
+ 
+   public void insert(String text, int pos)
+   {
+     // Not very efficient, no.
+     String s = getText();
+     setText(s.substring(0, pos) + text + s.substring(pos));
+   }
+ 
+   public void insertText(String text, int pos)
+   {
+     insert(text, pos);
+   }
+ 
+   public Dimension minimumSize(int rows, int cols)
+   {
+     return getMinimumSize(rows, cols);
+   }
+ 
+   public Dimension preferredSize(int rows, int cols)
+   {
+     return getPreferredSize(rows, cols);
+   }
+ 
+   public void replaceRange(String insert, int start_pos, int end_pos)
+   {
+     // Not very efficient, no.
+     String text = getText();
+     String right = text.substring(0, start_pos);
+     String left = text.substring(end_pos);
+     setText(right + insert + left);
+   }
+ 
+   public void replaceText(String text, int start_pos, int end_pos)
+   {
+     replaceRange(text, start_pos, end_pos);
+   }
+ 
+   public native void setText(String text);
+ 
+   public native void select(int start_pos, int end_pos);
+ 
+   public native void setEditable(boolean editable);
+ 
+   public native void setCaretPosition(int pos);
+ 
+   public InputMethodRequests getInputMethodRequests()
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtTextFieldPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtTextFieldPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtTextFieldPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtTextFieldPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,160 ----
+ /* QtTextFieldPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Dimension;
+ import java.awt.Rectangle;
+ import java.awt.TextField;
+ import java.awt.event.TextEvent;
+ import java.awt.im.InputMethodRequests;
+ import java.awt.peer.TextFieldPeer;
+ 
+ public class QtTextFieldPeer extends QtComponentPeer implements TextFieldPeer
+ {
+   public QtTextFieldPeer( QtToolkit kit, TextField owner )
+   {
+     super( kit, owner );
+   }
+ 
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+     setText(((TextField)owner).getText());
+     setEditable(((TextField)owner).isEditable());
+   }
+ 
+   /**
+    * Called back on a text edit.
+    */
+   private void textChanged()
+   {
+     TextEvent e = new TextEvent(owner, TextEvent.TEXT_VALUE_CHANGED);
+     QtToolkit.eventQueue.postEvent(e);
+   }
+ 
+   /**
+    * Returns the start (start = true) or end (start = false) of the selection.
+    */
+   private native int getSelection(boolean start);
+ 
+   private native Dimension getMinimumSizeNative(int columns);
+ 
+   private native Dimension getPreferredSizeNative(int columns);
+ 
+   // ************ Public methods *********************
+ 
+   public long filterEvents(long e) 
+   {
+     return e;
+   }
+ 
+   public native int getCaretPosition();
+ 
+   public Rectangle getCharacterBounds(int i)
+   {
+     return new Rectangle(0,0,0,0);
+   }
+   
+   public int getIndexAtPoint(int x, int y)
+   {
+     // FIXME
+     return 0;
+   }
+ 
+   public Dimension getMinimumSize(int columns)
+   {
+     Dimension d = getMinimumSizeNative( columns );
+     if ( d == null )
+       return new Dimension(10, 10);
+     return d;
+   }
+ 
+   public Dimension getPreferredSize(int columns)
+   {
+     Dimension d = getPreferredSizeNative( columns );
+     if ( d == null )
+       return owner.getSize();
+     return d;
+   }
+ 
+   public int getSelectionEnd()
+   {
+     return getSelection(false);
+   }
+ 
+   public int getSelectionStart()
+   {
+     return getSelection(true);
+   }
+ 
+   public native String getText();
+ 
+   public Dimension minimumSize(int cols)
+   {
+     return getMinimumSize(cols);
+   }
+ 
+   public Dimension preferredSize(int cols)
+   {
+     return getPreferredSize(cols);
+   }
+ 
+   public native void select(int selStart, int selEnd);
+ 
+   public native void setCaretPosition(int pos);
+ 
+   public void setEchoCharacter(char c)
+   {
+     setEchoChar(c);
+   }
+ 
+   public native void setEchoChar(char echoChar);
+ 
+   public native void setEditable(boolean editable);
+ 
+   public native void setText(String l);
+ 
+   public InputMethodRequests getInputMethodRequests()
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtToolkit.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtToolkit.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtToolkit.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtToolkit.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,472 ----
+ /* QtToolkit.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import gnu.classpath.Configuration;
+ import gnu.java.awt.EmbeddedWindow;
+ import gnu.java.awt.peer.ClasspathFontPeer;
+ import gnu.java.awt.peer.EmbeddedWindowPeer;
+ import gnu.java.awt.peer.ClasspathTextLayoutPeer;
+ import java.awt.AWTEvent;
+ import java.awt.AWTException;
+ import java.awt.Button;
+ import java.awt.Canvas;
+ import java.awt.Checkbox;
+ import java.awt.CheckboxMenuItem;
+ import java.awt.Choice;
+ import java.awt.Component;
+ import java.awt.Dialog;
+ import java.awt.Dimension;
+ import java.awt.EventQueue;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Frame;
+ import java.awt.Image;
+ import java.awt.Label;
+ import java.awt.List;
+ import java.awt.MenuBar;
+ import java.awt.Menu;
+ import java.awt.MenuItem;
+ import java.awt.Panel;
+ import java.awt.TextArea;
+ import java.awt.TextField;
+ import java.awt.FileDialog;
+ import java.awt.GraphicsDevice;
+ import java.awt.GraphicsEnvironment;
+ import java.awt.HeadlessException;
+ import java.awt.PopupMenu;
+ import java.awt.PrintJob;
+ import java.awt.Scrollbar;
+ import java.awt.ScrollPane;
+ import java.awt.Toolkit;
+ import java.awt.Window;
+ import java.awt.datatransfer.Clipboard;
+ import java.awt.dnd.DragGestureEvent;
+ import java.awt.dnd.DragGestureListener;
+ import java.awt.dnd.DragGestureRecognizer;
+ import java.awt.dnd.DragSource;
+ import java.awt.dnd.peer.DragSourceContextPeer;
+ import java.awt.event.AWTEventListener;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.im.InputMethodHighlight;
+ import java.awt.peer.ButtonPeer;
+ import java.awt.peer.FontPeer;
+ import java.awt.peer.PanelPeer;
+ import java.awt.peer.CanvasPeer;
+ import java.awt.peer.FramePeer; 
+ import java.awt.peer.PopupMenuPeer;
+ import java.awt.peer.CheckboxMenuItemPeer;
+ import java.awt.peer.LabelPeer;
+ import java.awt.peer.RobotPeer;
+ import java.awt.peer.CheckboxPeer;
+ import java.awt.peer.LightweightPeer; 
+ import java.awt.peer.ScrollPanePeer;
+ import java.awt.peer.ChoicePeer;        
+ import java.awt.peer.ListPeer;
+ import java.awt.peer.ScrollbarPeer;
+ import java.awt.peer.ComponentPeer;    
+ import java.awt.peer.MenuBarPeer;
+ import java.awt.peer.TextAreaPeer;
+ import java.awt.peer.ContainerPeer;
+ import java.awt.peer.MenuComponentPeer;
+ import java.awt.peer.TextComponentPeer;
+ import java.awt.peer.DialogPeer;
+ import java.awt.peer.MenuItemPeer;
+ import java.awt.peer.TextFieldPeer;
+ import java.awt.peer.FileDialogPeer;
+ import java.awt.peer.MenuPeer;
+ import java.awt.peer.WindowPeer;
+ import java.awt.font.FontRenderContext;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.text.AttributedString;
+ import java.util.HashMap;
+ import java.util.Map;
+ import java.util.Properties;
+ import javax.imageio.spi.IIORegistry;
+ 
+ import gnu.java.awt.ClasspathToolkit;
+ 
+ public class QtToolkit extends ClasspathToolkit
+ {
+   public static EventQueue eventQueue = null; // the native event queue
+   public static QtRepaintThread repaintThread = null; 
+   public static MainQtThread guiThread = null;
+   public static QtGraphicsEnvironment graphicsEnv = null;
+ 
+   private static void initToolkit()
+   {
+     eventQueue = new EventQueue();
+     repaintThread = new QtRepaintThread();
+     if (Configuration.INIT_LOAD_LIBRARY)
+       System.loadLibrary("qtpeer");
+ 
+     String theme = null;
+     try 
+       {
+ 	String style = System.getProperty("qtoptions.style");
+ 	if(style != null)
+ 	  theme = style;
+       } 
+     catch(SecurityException e)
+       {
+       }
+     catch(IllegalArgumentException e)
+       {
+       }
+ 
+     boolean doublebuffer = true;
+     try 
+       {
+ 	String style = System.getProperty("qtoptions.nodoublebuffer");
+ 	if(style != null)
+ 	  doublebuffer = false;
+       } 
+     catch(SecurityException e)
+       {
+       }
+     catch(IllegalArgumentException e)
+       {
+       }
+ 
+     guiThread = new MainQtThread( theme, doublebuffer );
+     guiThread.start();
+     repaintThread.start();
+   }
+ 
+   /**
+    * Construct the toolkit!
+    */
+   public QtToolkit()
+   {
+     if( guiThread == null )
+       initToolkit();
+ 
+     while (!guiThread.isRunning()); // make sure the GUI thread has started.
+ 
+     if( graphicsEnv == null )
+       graphicsEnv = new QtGraphicsEnvironment( this );
+   }
+ 
+   native String[] nativeFontFamilies();
+   
+   native int numScreens();
+ 
+   native int defaultScreen();
+ 
+   // ************ Public methods *********************
+ 
+   public synchronized native void beep();
+ 
+   public int checkImage(Image image, int w, int h, ImageObserver observer)
+   {
+     if(image instanceof QtImage)
+       return ((QtImage)image).checkImage(observer);
+ 
+     return ImageObserver.ERROR; // FIXME
+   }
+ 
+   protected ButtonPeer createButton( Button target )
+   {
+     return new QtButtonPeer( this, target );
+   }
+ 
+   protected CanvasPeer createCanvas(Canvas target)
+   {
+     return new QtCanvasPeer( this, target );
+   }
+ 
+   protected CheckboxPeer createCheckbox(Checkbox target)
+   {
+     return new QtCheckboxPeer( this, target );
+   }
+ 
+   protected  ChoicePeer createChoice(Choice target)
+   {
+     return new QtChoicePeer( this, target );
+   }
+ 
+   protected CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
+   {
+     return new QtMenuItemPeer( this, target );
+   }
+ 
+   public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) 
+   {
+     throw new RuntimeException("Not implemented");
+   }
+ 
+   protected FramePeer createFrame(Frame target)
+   {
+     return new QtFramePeer( this, target );
+   }
+ 
+   protected FileDialogPeer createFileDialog(FileDialog target)
+   {
+     return new QtFileDialogPeer( this, target );
+   }
+ 
+   public Image createImage(ImageProducer producer)
+   {
+     return new QtImage( producer );
+   }
+   
+   public Image createImage(byte[] imageData,
+ 			   int imageOffset,
+ 			   int imageLength)
+   {
+     byte[] dataCopy = new byte[imageLength];
+     System.arraycopy(imageData, imageOffset, dataCopy, 0, imageLength);
+     return new QtImage( dataCopy );
+   }
+   
+   public Image createImage(String filename)
+   {
+     return new QtImage( filename );
+   }
+ 
+   public Image createImage(URL url)
+   {
+     return new QtImage( url );
+   }
+ 
+   protected TextFieldPeer createTextField(TextField target)
+   {
+     return new QtTextFieldPeer(this,target);
+   }
+   
+   protected LabelPeer createLabel(Label target)
+   {
+     return new QtLabelPeer( this, target );
+   }
+ 
+   protected ListPeer createList(List target)
+   {
+     return new QtListPeer( this, target );
+   }
+ 
+   protected ScrollbarPeer createScrollbar(Scrollbar target)
+   {
+     return new QtScrollbarPeer( this, target );
+   }
+ 
+   protected ScrollPanePeer createScrollPane(ScrollPane target)
+   {
+     return new QtScrollPanePeer( this, target );
+   }
+ 
+   protected TextAreaPeer createTextArea(TextArea target)
+   {
+     return new QtTextAreaPeer( this, target );
+   }
+ 
+   protected PanelPeer createPanel(Panel target)
+   {
+     return new QtPanelPeer( this, target);
+   }
+ 
+   protected WindowPeer createWindow(Window target)
+   {
+     return new QtWindowPeer( this, target );
+   }
+ 
+   protected DialogPeer createDialog(Dialog target)
+   {
+     return new QtDialogPeer( this, target );
+   }
+ 
+   protected MenuBarPeer createMenuBar(MenuBar target)
+   {
+     return new QtMenuBarPeer( this, target );
+   }
+ 
+   protected MenuPeer createMenu(Menu target)
+   {
+     return new QtMenuPeer( this, target );
+   }
+ 
+   protected PopupMenuPeer createPopupMenu(PopupMenu target)
+   {
+     return new QtPopupMenuPeer( this, target );
+   }
+ 
+   protected MenuItemPeer createMenuItem(MenuItem target)
+   {
+     return new QtMenuItemPeer( this, target );
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public AWTEventListener[] getAWTEventListeners()
+   {
+     return null; // FIXME
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public AWTEventListener[] getAWTEventListeners(long mask)
+   {
+     return null; // FIXME
+   }
+ 
+   public ColorModel getColorModel()
+   {
+     return new DirectColorModel(32, 
+ 				0x00FF0000,
+ 				0x0000FF00,
+ 				0x000000FF,
+ 				0xFF000000);
+   }
+ 
+   /**
+    * Just return the defaults.
+    */
+   public String[] getFontList()
+   {
+     String[] builtIn = new String[] { "Dialog", 
+ 				      "DialogInput", 
+ 				      "Monospaced", 
+ 				      "Serif", 
+ 				      "SansSerif" };
+     String[] nat = nativeFontFamilies();
+     String[] allFonts = new String[ nat.length + 5 ];
+     System.arraycopy(builtIn, 0, allFonts, 0, 5);
+     System.arraycopy(nat, 0, allFonts, 5, nat.length);
+     return allFonts;
+   }
+ 
+   public FontMetrics getFontMetrics(Font font)
+   {
+     return new QtFontMetrics(font);
+   }
+ 
+   protected FontPeer getFontPeer(String name,
+ 				 int style)
+   {
+     Map attrs = new HashMap ();
+     ClasspathFontPeer.copyStyleToAttrs(style, attrs);
+     ClasspathFontPeer.copySizeToAttrs(12, attrs); // Default size is 12.
+     return getClasspathFontPeer (name, attrs);
+   }
+ 
+   public Image getImage(String filename)
+   {
+     return new QtImage(filename);
+   }
+ 
+   public Image getImage(URL url)
+   {
+     return createImage( url );
+   }
+ 
+   public PrintJob getPrintJob(Frame frame,
+ 			      String jobtitle,
+ 			      Properties props)
+   {
+     throw new RuntimeException("Not implemented");
+   }
+ 
+   public Clipboard getSystemClipboard()
+   {
+     throw new RuntimeException("Not implemented");
+   }
+ 
+   protected EventQueue getSystemEventQueueImpl()
+   {
+     return eventQueue;
+   }
+ 
+   public native Dimension getScreenSize();
+ 
+   public native int getScreenResolution();
+ 
+   public Map mapInputMethodHighlight(InputMethodHighlight highlight)
+   {
+     return null; // FIXME
+   }  
+   
+   public boolean prepareImage(Image image, int w, int h, ImageObserver observer)
+   {
+     if(image instanceof QtImage)
+       return true;
+     return false; // FIXME?
+   }
+ 
+   public native void sync();
+ 
+   // ********************** ClasspathToolkit methods
+ 
+   public GraphicsEnvironment getLocalGraphicsEnvironment()
+   {
+     return graphicsEnv;
+   }
+ 
+   public ClasspathFontPeer getClasspathFontPeer (String name, Map attrs)
+   {  
+     return new QtFontPeer (name, attrs);
+   }
+ 
+   public ClasspathTextLayoutPeer getClasspathTextLayoutPeer(AttributedString str, 
+ 							    FontRenderContext frc)
+   {
+     return null;
+   }
+ 
+   // FIXME
+   public Font createFont(int format, InputStream stream)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   // FIXME
+   public RobotPeer createRobot (GraphicsDevice screen) throws AWTException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public EmbeddedWindowPeer createEmbeddedWindow(EmbeddedWindow w)
+   {
+     //    return new QtEmbeddedWindowPeer( this, w );
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtVolatileImage.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtVolatileImage.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtVolatileImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtVolatileImage.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,438 ----
+ /* QtVolatileImage.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.Color;
+ import java.awt.Image;
+ import java.awt.ImageCapabilities;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.MemoryImageSource;
+ import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.image.VolatileImage;
+ import java.io.File;
+ import java.io.IOException;
+ import java.util.Hashtable;
+ import java.util.WeakHashMap;
+ import java.util.Vector;
+ 
+ /**
+  * QtVolatileImage - wraps a QImage
+  *
+  */
+ public class QtVolatileImage extends VolatileImage
+ {
+   int width = -1, height = -1;
+ 
+   /**
+    * Properties.
+    */
+   Hashtable props;
+ 
+   /**
+    * Pointer to the QImage
+    */
+   long nativeObject;
+ 
+   /*
+    * The 32-bit AARRGGBB format the  uses.
+    */
+   static ColorModel nativeModel = new DirectColorModel(32, 
+ 						       0x00FF0000,
+ 						       0x0000FF00,
+ 						       0x000000FF,
+ 						       0xFF000000);
+ 
+   /**
+    * Clears the image to RGBA 0
+    */
+   public native void clear();
+ 
+   /**
+    * Returns a copy of the pixel data as a java array.
+    */
+   private native int[] getPixels();
+ 
+   /**
+    * Allocates a QImage
+    */
+   private native void createImage();
+ 
+   /**
+    * HashMap of Graphics objects painting on this Image.
+    */
+   WeakHashMap painters;
+ 
+   /**
+    * Flags if this image is to be destroyed.
+    */
+   boolean killFlag;
+ 
+   /**
+    * Frees the above.
+    */
+   private native void freeImage();
+ 
+   /**
+    * Blit a QImage 
+    */
+   public native void blit(QtImage i);
+   public native void blit(QtImage i, int x, int y, int w, int h);
+ 
+   /**
+    * Sets the image to scaled copy of src image. hints are rendering hints.
+    */
+   private native void createScaledImage(QtVolatileImage src, int hints);
+ 
+   /**
+    * Draws the image optionally composited.
+    */
+   private native void drawPixels (QtGraphics gc, 
+ 				  int bg_red, int bg_green, int bg_blue, 
+ 				  int x, int y, 
+ 				  boolean composite);
+   /**
+    * Draws the image, optionally scaled and composited.
+    */
+   private native void drawPixelsScaled (QtGraphics gc, 
+ 					int bg_red, int bg_green, int bg_blue, 
+ 					int x, int y, int width, int height, 
+ 					boolean composite);
+ 
+   /**
+    * Draws the image transformed.
+    */
+   private native void drawPixelsTransformed (QtGraphics gc, QMatrix transform);
+   
+   /**
+    * Draws the image scaled flipped and optionally composited.
+    */
+   native void drawPixelsScaledFlipped (QtGraphics gc, 
+ 				       int bg_red, int bg_green, 
+ 				       int bg_blue, 
+ 				       boolean flipX, boolean flipY,
+ 				       int srcX, int srcY,
+ 				       int srcWidth, int srcHeight,
+ 				       int dstX, int dstY,
+ 				       int dstWidth, int dstHeight,
+ 				       boolean composite);
+ 
+   /**
+    * Constructs an empty QtVolatileImage.
+    */
+   public QtVolatileImage (int width, int height)
+   {
+     this.width = width;
+     this.height = height;
+     props = new Hashtable();
+     createImage();
+     clear();
+   }
+ 
+   /**
+    * Constructs a scaled version of the src bitmap, using Qt
+    */
+   private QtVolatileImage (QtVolatileImage src, int width, int height, 
+ 			   int hints)
+   {
+     this.width = width;
+     this.height = height;
+     props = new Hashtable();
+ 
+     createScaledImage(src, hints);
+   }
+ 
+ 
+   public void finalize()
+   {
+     dispose();
+   }
+ 
+   public void dispose()
+   {
+     if( painters == null || painters.isEmpty() )
+       freeImage();
+     else
+       killFlag = true; // can't destroy image yet. 
+     // Do so when all painters are gone.
+   }
+ 
+   // java.awt.Image methods ////////////////////////////////////////////////
+ 
+   public int getWidth (ImageObserver observer)
+   {
+     return getWidth();
+   }
+   
+   public int getHeight (ImageObserver observer)
+   {
+     return getHeight();
+   }
+ 
+   public Object getProperty (String name, ImageObserver observer)
+   {
+     Object value = props.get (name);
+     return (value == null) ? UndefinedProperty : value;
+   }
+ 
+   /**
+    * Returns the source of this image.
+    */
+   public ImageProducer getSource ()
+   {
+     return new MemoryImageSource(width, height, nativeModel, getPixels(), 
+ 				 0, width);
+   }
+ 
+   void putPainter(QtImageGraphics g)
+   {
+     if( painters == null )
+       painters = new WeakHashMap();
+     painters.put( g, "dummy" );
+   }
+ 
+   void removePainter(QtImageGraphics g)
+   {
+     painters.remove( g );
+     if( killFlag && painters.isEmpty() )
+       freeImage();
+   }
+ 
+   /**
+    * Creates a Graphics context for this image.
+    */
+   public Graphics getGraphics ()
+   {
+     QtImageGraphics g = new QtImageGraphics( this );
+     putPainter( g );
+     return g;
+   }
+   
+   /**
+    * Returns a scaled instance of this image.
+    */
+   public Image getScaledInstance(int width,
+ 				 int height,
+ 				 int hints)
+   {
+     if (width <= 0 || height <= 0)
+       throw new IllegalArgumentException("Width and height of scaled bitmap"+
+ 					 "must be >= 0");
+ 
+     return new QtVolatileImage(this, width, height, hints);
+   }
+ 
+   /**
+    */
+   public void flush ()
+   {
+     // FIXME ?
+   }
+ 
+   /**
+    * Returns the image status, used by QtToolkit
+    */
+   public int checkImage (ImageObserver observer)
+   {
+     return ImageObserver.ALLBITS | ImageObserver.WIDTH | ImageObserver.HEIGHT;
+   }
+ 
+   // Drawing methods ////////////////////////////////////////////////
+ 
+   /**
+    * Draws an image with eventual scaling/transforming.
+    */
+   public boolean drawImage (QtGraphics g, QMatrix matrix,
+ 			    ImageObserver observer)
+   {
+     drawPixelsTransformed (g, matrix);
+     return true;
+   }
+ 
+   /**
+    * Draws an image to the QtGraphics context, at (x,y) with optional
+    * compositing with a background color.
+    */
+   public boolean drawImage (QtGraphics g, int x, int y,
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     if(bgcolor != null)
+       drawPixels(g, bgcolor.getRed (), bgcolor.getGreen (), 
+ 		 bgcolor.getBlue (), x, y, true);
+     else
+       drawPixels(g, 0, 0, 0, x, y, false);
+ 
+     return true;
+   }
+ 
+   /**
+    * Draws an image to the QtGraphics context, at (x,y) scaled to 
+    * width and height, with optional compositing with a background color.
+    */
+   public boolean drawImage (QtGraphics g, int x, int y, int width, int height,
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     if(bgcolor != null)
+       drawPixelsScaled(g, bgcolor.getRed (), bgcolor.getGreen (), 
+ 		       bgcolor.getBlue (), x, y, width, height, true);
+     else
+       drawPixelsScaled(g, 0, 0, 0, x, y, width, height, false);
+     
+     return true;
+   }
+ 
+   /**
+    * Draws an image with eventual scaling/transforming.
+    */
+   public boolean drawImage (QtGraphics g, int dx1, int dy1, int dx2, int dy2, 
+ 			    int sx1, int sy1, int sx2, int sy2, 
+ 			    Color bgcolor, ImageObserver observer)
+   {
+     boolean flipX = (dx1 > dx2)^(sx1 > sx2);
+     boolean flipY = (dy1 > dy2)^(sy1 > sy2);
+     int dstWidth = Math.abs (dx2 - dx1);
+     int dstHeight = Math.abs (dy2 - dy1);
+     int srcWidth = Math.abs (sx2 - sx1);
+     int srcHeight = Math.abs (sy2 - sy1);
+     int srcX = (sx1 < sx2) ? sx1 : sx2;
+     int srcY = (sy1 < sy2) ? sy1 : sy2;
+     int dstX = (dx1 < dx2) ? dx1 : dx2;
+     int dstY = (dy1 < dy2) ? dy1 : dy2;
+ 
+     // Clipping. This requires the dst to be scaled as well, 
+     if (srcWidth > width)
+       {
+ 	dstWidth = (int)((double)dstWidth*((double)width/(double)srcWidth));
+ 	srcWidth = width - srcX;
+       }
+ 
+     if (srcHeight > height) 
+       {
+ 	dstHeight = (int)((double)dstHeight*((double)height/(double)srcHeight));
+ 	srcHeight = height - srcY;
+       }
+ 
+     if (srcWidth + srcX > width)
+       {
+ 	dstWidth = (int)((double)dstWidth * (double)(width - srcX)/(double)srcWidth);
+ 	srcWidth = width - srcX;
+       }
+ 
+     if (srcHeight + srcY > height)
+       {
+ 	dstHeight = (int)((double)dstHeight * (double)(width - srcY)/(double)srcHeight);
+ 	srcHeight = height - srcY;
+       }
+ 
+     if ( srcWidth <= 0 || srcHeight <= 0 || dstWidth <= 0 || dstHeight <= 0)
+       return true;
+ 
+     if(bgcolor != null)
+       drawPixelsScaledFlipped (g, bgcolor.getRed (), bgcolor.getGreen (), 
+ 			       bgcolor.getBlue (), 
+ 			       flipX, flipY,
+ 			       srcX, srcY,
+ 			       srcWidth, srcHeight,
+ 			       dstX,  dstY,
+ 			       dstWidth, dstHeight,
+ 			       true);
+     else
+       drawPixelsScaledFlipped (g, 0, 0, 0, flipX, flipY,
+ 			       srcX, srcY, srcWidth, srcHeight,
+ 			       dstX,  dstY, dstWidth, dstHeight,
+ 			       false);
+     return true;
+   }
+   
+   public native void copyArea(int x, int y, int width, int height, 
+ 			      int dx, int dy);
+ 
+   //******************** VolatileImage stuff ********************
+ 
+   public boolean contentsLost()
+   {
+     return false;
+   }
+ 
+   public Graphics2D createGraphics()
+   {
+     QtImageGraphics g = new QtImageGraphics(this);
+     putPainter( g );
+     return g;
+   }
+ 
+   public ImageCapabilities getCapabilities()
+   {
+     return new ImageCapabilities(false)
+       {
+ 	public boolean isTrueVolatile()
+ 	{
+ 	  return false;
+ 	}
+       };
+   }
+ 
+   public int getHeight()
+   {
+     return height;
+   }
+ 
+   public BufferedImage getSnapshot()
+   {
+     BufferedImage bi = new BufferedImage(width, height, 
+ 					 BufferedImage.TYPE_INT_ARGB_PRE);
+     bi.setRGB( 0, 0, width, height, getPixels(), 0, width);
+     return bi;
+   }
+ 
+   public int getWidth()
+   {
+     return width;
+   }
+ 
+   public int validate(GraphicsConfiguration gc)
+   {
+     return IMAGE_OK;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtWindowPeer.java gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtWindowPeer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/awt/peer/qt/QtWindowPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/awt/peer/qt/QtWindowPeer.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,80 ----
+ /* QtWindowPeer.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.awt.peer.qt;
+ 
+ import java.awt.Component;
+ import java.awt.peer.WindowPeer;
+ 
+ public class QtWindowPeer extends QtContainerPeer implements WindowPeer
+ {
+   public QtWindowPeer( QtToolkit kit, Component owner )
+   {
+     super( kit, owner );
+   }
+ 
+   protected native void init();
+ 
+   protected void setup()
+   {
+     super.setup();
+   }
+   
+   // ************ Public methods *********************
+ 
+   public native void toBack();
+ 
+   public native void toFront();
+ 
+   /*
+    * Belongs to Frame and Dialog, but no sense in duplicating code.
+    */
+   public native void setTitle(String title);
+ 
+   public void updateAlwaysOnTop()
+   {
+     // TODO Auto-generated method stub
+     
+   }
+ 
+   public boolean requestWindowFocus()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/BeanInfoEmbryo.java gcc-4.1.0/libjava/classpath/gnu/java/beans/BeanInfoEmbryo.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/BeanInfoEmbryo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/BeanInfoEmbryo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,171 ----
+ /* gnu.java.beans.BeanInfoEmbryo
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans;
+ 
+ import java.beans.BeanDescriptor;
+ import java.beans.BeanInfo;
+ import java.beans.EventSetDescriptor;
+ import java.beans.IndexedPropertyDescriptor;
+ import java.beans.MethodDescriptor;
+ import java.beans.PropertyDescriptor;
+ import java.lang.reflect.Method;
+ import java.util.Arrays;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.TreeMap;
+ import java.util.Vector;
+ 
+ /**
+  ** A BeanInfoEmbryo accumulates information about a Bean
+  ** while it is in the process of being created, and then
+  ** when you are done accumulating the information, the
+  ** getBeanInfo() method may be called to create a BeanInfo
+  ** object based on the information.<P>
+  **
+  ** This class is not well-synchronized.  (It can be, it
+  ** just isn't yet.)
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 30 Jul 1998
+  ** @see java.beans.BeanInfo
+  **/
+ 
+ public class BeanInfoEmbryo {
+ 
+ 	// by using a TreeMap the properties will be sorted alphabetically by name
+ 	// which matches the (undocumented) behavior of jdk
+ 	TreeMap properties = new TreeMap();
+ 	Hashtable events = new Hashtable();
+ 	Vector methods = new Vector();
+ 
+ 	BeanDescriptor beanDescriptor;
+ 	BeanInfo[] additionalBeanInfo;
+ 	java.awt.Image[] im;
+ 	String defaultPropertyName;
+ 	String defaultEventName;
+ 
+ 	public BeanInfoEmbryo() {
+ 	}
+ 
+ 	public BeanInfo getBeanInfo() {
+ 		int defaultProperty = -1;
+ 		int defaultEvent = -1;
+ 
+ 		PropertyDescriptor[] Aproperties = new PropertyDescriptor[properties.size()];
+ 		int i = 0;
+ 		Iterator it = properties.entrySet().iterator();
+ 		while (it.hasNext()) {
+ 			Aproperties[i] = (PropertyDescriptor) (((Map.Entry)it.next()).getValue());
+ 			if(defaultPropertyName != null && Aproperties[i].getName().equals(defaultPropertyName)) {
+ 				defaultProperty = i;
+ 			}
+ 			i++;
+ 		}
+ 
+ 		EventSetDescriptor[] Aevents = new EventSetDescriptor[events.size()];
+ 		i = 0;
+ 		Enumeration e = events.elements();
+ 		while (e.hasMoreElements()) {
+ 			Aevents[i] = (EventSetDescriptor) e.nextElement();
+ 			if(defaultEventName != null && Aevents[i].getName().equals(defaultEventName)) {
+ 				defaultEvent = i;
+ 			}
+ 			i++;
+ 		}
+ 
+ 		MethodDescriptor[] Amethods = new MethodDescriptor[methods.size()];
+ 		methods.copyInto(Amethods);
+ 
+ 		return new ExplicitBeanInfo(beanDescriptor,additionalBeanInfo,Aproperties,defaultProperty,Aevents,defaultEvent,Amethods,im);
+ 	}
+ 
+ 	public void setBeanDescriptor(BeanDescriptor b) {
+ 		beanDescriptor = b;
+ 	}
+ 
+ 	public void setAdditionalBeanInfo(BeanInfo[] b) {
+ 		additionalBeanInfo = b;
+ 	}
+ 
+ 	public boolean hasProperty(PropertyDescriptor p) {
+ 		return properties.get(p.getName()) != null;
+ 	}
+ 	public void addProperty(PropertyDescriptor p) {
+ 		properties.put(p.getName(),p);
+ 	}
+ 	public void addIndexedProperty(IndexedPropertyDescriptor p) {
+ 		properties.put(p.getName(),p);
+ 	}
+ 
+ 	public boolean hasEvent(EventSetDescriptor e) {
+ 		return events.get(e.getName()) != null;
+ 	}
+ 	public void addEvent(EventSetDescriptor e) {
+ 		events.put(e.getName(),e);
+ 	}
+ 
+ 	public boolean hasMethod(MethodDescriptor m) {
+           for(int i=0;i<methods.size();i++) {
+             Method thisMethod = ((MethodDescriptor)methods.elementAt(i)).getMethod();
+             if(m.getMethod().getName().equals(thisMethod.getName())
+                && Arrays.equals(m.getMethod().getParameterTypes(),
+                                 thisMethod.getParameterTypes())) {
+               return true;
+             }
+           }
+           return false;
+ 	}
+ 	public void addMethod(MethodDescriptor m) {
+ 		methods.addElement(m);
+ 	}
+ 
+ 	public void setDefaultPropertyName(String defaultPropertyName) {
+ 		this.defaultPropertyName = defaultPropertyName;
+ 	}
+ 
+ 	public void setDefaultEventName(String defaultEventName) {
+ 		this.defaultEventName = defaultEventName;
+ 	}
+ 
+ 	public void setIcons(java.awt.Image[] im) {
+ 		this.im = im;
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/DummyAppletContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/DummyAppletContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/DummyAppletContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/DummyAppletContext.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,165 ----
+ /* gnu.java.beans.DummyAppletContext
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans;
+ 
+ import java.applet.Applet;
+ import java.applet.AppletContext;
+ import java.applet.AudioClip;
+ import java.awt.Image;
+ import java.awt.Toolkit;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.Iterator;
+ 
+ /** A placeholder <code>AppletContext</code> implementation that does nothing.
+  *
+  * <p>This is the default implementation for GNU Classpath and is used for <code>Applet</code>
+  * beans being created with {@link java.beans.Beans.instantiate}.</p>
+  *
+  * <p>It has no functionality in order to allow it to be used without any dependencies
+  * (e.g. sound, network access, ...).</p>
+  *
+  * @author Robert Schuster
+  */
+ class DummyAppletContext implements AppletContext
+ {
+   private static final Enumeration EMPTY_ENUMERATION = Collections.enumeration(Collections.EMPTY_SET);
+ 
+   DummyAppletContext()
+   {
+   }
+ 
+   /** Implementation is VM neutral and returns a dummy {@link AudioClip} instance
+    * for every URL that returns a non-<code>null</code> object on
+    * <code>URL.openConnection()</code>.
+    *
+    * @see java.applet.AppletContext#getAudioClip(java.net.URL)
+    *
+    * FIXME: When Java Sound API (javax.sound) is included in Classpath or URL is able to handle
+    * sampled sound this should be adjusted.
+    */
+   public AudioClip getAudioClip(URL url)
+   {
+     return Applet.newAudioClip(url);
+   }
+ 
+   /** Loads the <code>Image</code> instance by delegating to
+    * {@link java.awt.Toolkit.createImage(URL) }.
+    *
+    * @see java.applet.AppletContext#getImage(java.net.URL)
+    * @see java.awt.Toolkit#createImage(java.net.URL)
+    */
+   public Image getImage(URL url)
+   {
+     return Toolkit.getDefaultToolkit().createImage(url);
+   }
+ 
+   /** Returns <code>null</code> for every argument.
+    *
+    * @see java.applet.AppletContext#getApplet(java.lang.String)
+    */
+   public Applet getApplet(String name)
+   {
+     return null;
+   }
+ 
+   /** Returns always an empty <code>Enumeration</code>.
+    *
+    * @see java.applet.AppletContext#getApplets()
+    */
+   public Enumeration getApplets()
+   {
+     return EMPTY_ENUMERATION;
+   }
+ 
+   /** Does nothing.
+    *
+    * @see java.applet.AppletContext#showDocument(java.net.URL)
+    */
+   public void showDocument(URL url)
+   {
+   }
+ 
+   /** Does nothing.
+    *
+    * @see java.applet.AppletContext#showDocument(java.net.URL, java.lang.String)
+    */
+   public void showDocument(URL url, String target)
+   {
+   }
+ 
+   /** Does nothing.
+    *
+    * @see java.applet.AppletContext#showStatus(java.lang.String)
+    */
+   public void showStatus(String message)
+   {
+   }
+ 
+   /** Does nothing.
+    *
+    * @see java.applet.AppletContext#setStream(java.lang.String, java.io.InputStream)
+    */
+   public void setStream(String key, InputStream stream)
+     throws IOException
+   {
+     throw new IOException("Dummy implementation imposes zero InputStream associations.");
+   }
+ 
+   /** Returns <code>null</code> for every argument.
+    *
+    * @see java.applet.AppletContext#getStream(java.lang.String)
+    */
+   public InputStream getStream(String key)
+   {
+     return null;
+   }
+ 
+   /** Returns always an empty iterator.
+    *
+    * @see java.applet.AppletContext#getStreamKeys()
+    */
+   public Iterator getStreamKeys()
+   {
+     return Collections.EMPTY_SET.iterator();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/DummyAppletStub.java gcc-4.1.0/libjava/classpath/gnu/java/beans/DummyAppletStub.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/DummyAppletStub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/DummyAppletStub.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,115 ----
+ /* gnu.java.beans.DummyAppletStub
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans;
+ 
+ import java.applet.AppletContext;
+ import java.applet.AppletStub;
+ import java.net.URL;
+ 
+ /** Placeholder implementation of <code>AppletStub</code> providing no functionality.
+  * <p>This class is used for <code>Applet</code> being created with
+  * {@link java.beans.Bean.instantiate}.</p>
+  *
+  * @author Robert Schuster
+  */
+ public class DummyAppletStub implements AppletStub
+ {
+   private URL documentBase;
+   private URL codeBase;
+   private DummyAppletContext context;
+ 
+   public DummyAppletStub(URL newCodeBase, URL newDocumentBase)
+   {
+     codeBase = newCodeBase;
+     documentBase = newDocumentBase;
+ 
+     context = new DummyAppletContext();
+   }
+ 
+   /** Returns always <code>true</code>.
+    *
+    * @see java.applet.AppletStub#isActive()
+    */
+   public boolean isActive()
+   {
+     return true;
+   }
+ 
+   /**
+    * @see java.applet.AppletStub#getDocumentBase()
+    */
+   public URL getDocumentBase()
+   {
+     return documentBase;
+   }
+ 
+   /**
+    * @see java.applet.AppletStub#getCodeBase()
+    */
+   public URL getCodeBase()
+   {
+     return codeBase;
+   }
+ 
+   /** Implementation returns <code>null</code> for every parameter name.
+    *
+    * @see java.applet.AppletStub#getParameter(java.lang.String)
+    */
+   public String getParameter(String name)
+   {
+     return null;
+   }
+ 
+   /** Returns a non-functional context instance.
+    *
+    * @see java.applet.AppletStub#getAppletContext()
+    */
+   public AppletContext getAppletContext()
+   {
+     return context;
+   }
+ 
+   /** Does nothing.
+    *
+    * @see java.applet.AppletStub#appletResize(int, int)
+    */
+   public void appletResize(int width, int height)
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/ExplicitBeanInfo.java gcc-4.1.0/libjava/classpath/gnu/java/beans/ExplicitBeanInfo.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/ExplicitBeanInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/ExplicitBeanInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,149 ----
+ /* ExplicitBeanInfo.java --
+    Copyright (C) 1998, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans;
+ 
+ import java.awt.Image;
+ import java.beans.BeanDescriptor;
+ import java.beans.BeanInfo;
+ import java.beans.EventSetDescriptor;
+ import java.beans.MethodDescriptor;
+ import java.beans.PropertyDescriptor;
+ 
+ /**
+  ** ExplicitBeanInfo lets you specify in the constructor
+  ** all the various parts of the BeanInfo.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 30 Jul 1998
+  ** @see java.beans.BeanInfo
+  **/
+ 
+ public class ExplicitBeanInfo implements BeanInfo {
+ 	/** The BeanDescriptor returned by getBeanDescriptor. **/
+ 	protected BeanDescriptor beanDescriptor;
+ 
+ 	/** The EventSetDescriptor array returned by
+ 	 ** getEventSetDescriptors().
+ 	 **/
+ 	protected EventSetDescriptor[] eventSetDescriptors = new EventSetDescriptor[0];
+ 
+ 	/** The PropertyDescriptor array returned by
+ 	 ** getPropertyDescriptors().
+ 	 **/
+ 	protected PropertyDescriptor[] propertyDescriptors = new PropertyDescriptor[0];
+ 
+ 	/** The MethodDescriptor array returned by
+ 	 ** getMethodDescriptors().
+ 	 **/
+ 	protected MethodDescriptor[]   methodDescriptors;
+ 
+ 	/** The default property index. **/
+ 	protected int defaultPropertyIndex;
+ 
+ 	/** The default event index. **/
+ 	protected int defaultEventIndex;
+ 
+ 	/** The BeanInfo array returned by
+ 	 ** getAdditionalBeanInfo().
+ 	 **/
+ 	protected BeanInfo[] additionalBeanInfo;
+ 
+ 	/** The set of icons. **/
+ 	protected Image[] icons;
+ 
+ 	public ExplicitBeanInfo(BeanDescriptor beanDescriptor,
+ 	                        BeanInfo[] additionalBeanInfo,
+ 	                        PropertyDescriptor[] propertyDescriptors,
+ 				int defaultPropertyIndex,
+ 	                        EventSetDescriptor[] eventSetDescriptors,
+ 				int defaultEventIndex,
+ 	                        MethodDescriptor[] methodDescriptors,
+ 				Image[] icons) {
+ 		this.beanDescriptor = beanDescriptor;
+ 		this.additionalBeanInfo = additionalBeanInfo;
+ 		this.propertyDescriptors = propertyDescriptors;
+ 		this.defaultPropertyIndex = defaultPropertyIndex;
+ 		this.eventSetDescriptors = eventSetDescriptors;
+ 		this.defaultEventIndex = defaultEventIndex;
+ 		this.methodDescriptors = methodDescriptors;
+ 		this.icons = icons;
+ 	}
+ 
+ 	/** Get Bean descriptor. **/
+ 	public BeanDescriptor getBeanDescriptor() {
+ 		return beanDescriptor;
+ 	}
+ 
+ 	/** Get Bean events. **/
+ 	public EventSetDescriptor[] getEventSetDescriptors() {
+ 		return eventSetDescriptors;
+ 	}
+ 
+ 	/** Get default event set. **/
+ 	public int getDefaultEventIndex() {
+ 		return defaultEventIndex;
+ 	}
+ 
+ 	/** Get Bean properties. **/
+ 	public PropertyDescriptor[] getPropertyDescriptors() {
+ 		return propertyDescriptors;
+ 	}
+ 
+ 	/** Get "default" property. **/
+ 	public int getDefaultPropertyIndex() {
+ 		return defaultPropertyIndex;
+ 	}
+ 
+ 	/** Get Bean methods. **/
+ 	public MethodDescriptor[] getMethodDescriptors() {
+ 		return methodDescriptors;
+ 	}
+ 
+ 	/** Get additional Bean info. **/
+ 	public BeanInfo[] getAdditionalBeanInfo() {
+ 		return additionalBeanInfo;
+ 	}
+ 
+ 	/** Get Bean icons.
+ 	 ** @param iconType the type of icon
+ 	 **/
+ 	public Image getIcon(int iconType) {
+ 		return icons != null ? icons[iconType - 1] : null;
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/IntrospectionIncubator.java gcc-4.1.0/libjava/classpath/gnu/java/beans/IntrospectionIncubator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/IntrospectionIncubator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/IntrospectionIncubator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,441 ----
+ /* gnu.java.beans.IntrospectionIncubator
+    Copyright (C) 1998, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans;
+ 
+ import gnu.java.lang.ArrayHelper;
+ import gnu.java.lang.ClassHelper;
+ 
+ import java.beans.BeanInfo;
+ import java.beans.EventSetDescriptor;
+ import java.beans.IndexedPropertyDescriptor;
+ import java.beans.IntrospectionException;
+ import java.beans.Introspector;
+ import java.beans.MethodDescriptor;
+ import java.beans.PropertyDescriptor;
+ import java.lang.reflect.Array;
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Modifier;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.Vector;
+ 
+ /**
+  ** IntrospectionIncubator takes in a bunch of Methods, and
+  ** Introspects only those Methods you give it.<br/>
+  **
+  ** See {@link addMethod(Method)} for details which rules apply to
+  ** the methods.
+  **
+  ** @author John Keiser
+  ** @author Robert Schuster
+  ** @see gnu.java.beans.ExplicitBeanInfo
+  ** @see java.beans.BeanInfo
+  **/
+ 
+ public class IntrospectionIncubator {
+ 	Hashtable propertyMethods = new Hashtable();
+ 	Hashtable listenerMethods = new Hashtable();
+ 	Vector otherMethods = new Vector();
+ 
+ 	Class propertyStopClass;
+ 	Class eventStopClass;
+ 	Class methodStopClass;
+ 
+ 	public IntrospectionIncubator() {
+ 	}
+ 
+ 	/** Examines the given method and files it in a suitable collection.
+ 	 * It files the method as a property method if it finds:
+ 	 * <ul>
+ 	 * <li>boolean "is" getter</li>
+ 	 * <li>"get" style getter</li>
+ 	 * <li>single argument setter</li>
+ 	 * <li>indiced setter and getter</li> 
+ 	 * </ul>
+ 	 * It files the method as a listener method if all of these rules apply:
+ 	 * <ul>
+ 	 * <li>the method name starts with "add" or "remove"</li>
+ 	 * <li>there is only a single argument</li>
+ 	 * <li>the argument type is a subclass of <code>java.util.EventListener</code></li>
+ 	 * </ul>
+ 	 * All public methods are filed as such. 
+ 	 *   
+ 	 * @param method The method instance to examine.
+ 	 */
+ 	public void addMethod(Method method) {
+ 		if(Modifier.isPublic(method.getModifiers())) {
+ 			String name = ClassHelper.getTruncatedName(method.getName());
+ 			Class retType = method.getReturnType();
+ 			Class[] params = method.getParameterTypes();
+ 			boolean isVoid = retType.equals(java.lang.Void.TYPE);
+ 			Class methodClass = method.getDeclaringClass();
+ 			
+ 			/* Accepts the method for examination if no stop class is given or the method is declared in a subclass of the stop class.
+ 			 * The rules for this are described in {@link java.beans.Introspector.getBeanInfo(Class, Class)}.
+ 			 * This block finds out whether the method is a suitable getter or setter method (or read/write method).  
+ 			 */
+ 			if(isReachable(propertyStopClass, methodClass)) {
+ 				/* At this point a method may regarded as a property's read or write method if its name
+ 				 * starts with "is", "get" or "set". However, if a method is static it cannot be part
+ 				 * of a property.
+ 				 */
+ 				if(Modifier.isStatic(method.getModifiers())) {
+ 					// files method as other because it is static
+ 					otherMethods.addElement(method);
+ 				} else if(name.startsWith("is")
+ 				   && retType.equals(java.lang.Boolean.TYPE)
+ 				   && params.length == 0) {
+ 				   	// files method as boolean "is" style getter
+ 					addToPropertyHash(name,method,IS);
+ 				} else if(name.startsWith("get") && !isVoid) {
+ 					if(params.length == 0) {
+ 						// files as legal non-argument getter
+ 						addToPropertyHash(name,method,GET);
+ 					} else if(params.length == 1 && params[0].equals(java.lang.Integer.TYPE)) {
+ 						// files as legal indiced getter
+ 						addToPropertyHash(name,method,GET_I);
+ 					} else {
+ 						// files as other because the method's signature is not Bean-like
+ 						otherMethods.addElement(method);
+ 					}
+ 				} else if(name.startsWith("set") && isVoid) {
+ 					if(params.length == 1) {
+ 						// files as legal single-argument setter method
+ 						addToPropertyHash(name,method,SET);
+ 					} else if(params.length == 2 && params[0].equals(java.lang.Integer.TYPE)) {
+ 						// files as legal indiced setter method
+ 						addToPropertyHash(name,method,SET_I);
+ 					} else {
+ 						// files as other because the method's signature is not Bean-like
+ 						otherMethods.addElement(method);
+ 					}
+ 				}
+ 			}
+ 			
+ 			if(isReachable(eventStopClass, methodClass)) {
+ 				if(name.startsWith("add")
+ 				          && isVoid
+ 				          && params.length == 1
+ 				          && java.util.EventListener.class.isAssignableFrom(params[0])) {
+ 					addToListenerHash(name,method,ADD);
+ 				} else if(name.startsWith("remove")
+ 				          && isVoid
+ 				          && params.length == 1
+ 				          && java.util.EventListener.class.isAssignableFrom(params[0])) {
+ 					addToListenerHash(name,method,REMOVE);
+ 				}
+ 			}
+ 			 
+ 			if(isReachable(methodStopClass, methodClass)) {
+ 				// files as reachable public method
+ 				otherMethods.addElement(method);
+ 			}
+ 			
+ 		}
+ 	}
+ 
+ 	public void addMethods(Method[] m) {
+ 		for(int i=0;i<m.length;i++) {
+ 			addMethod(m[i]);
+ 		}
+ 	}
+ 
+ 	public void setPropertyStopClass(Class c) {
+ 		propertyStopClass = c;
+ 	}
+ 
+ 	public void setEventStopClass(Class c) {
+ 		eventStopClass = c;
+ 	}
+ 
+ 	public void setMethodStopClass(Class c) {
+ 		methodStopClass = c;
+ 	}
+ 
+ 
+ 	public BeanInfoEmbryo getBeanInfoEmbryo() throws IntrospectionException {
+ 		BeanInfoEmbryo b = new BeanInfoEmbryo();
+ 		findXXX(b,IS);
+ 		findXXXInt(b,GET_I);
+ 		findXXXInt(b,SET_I);
+ 		findXXX(b,GET);
+ 		findXXX(b,SET);
+ 		findAddRemovePairs(b);
+ 		for(int i=0;i<otherMethods.size();i++) {
+ 			MethodDescriptor newMethod = new MethodDescriptor((Method)otherMethods.elementAt(i));
+ 			if(!b.hasMethod(newMethod)) {
+ 				b.addMethod(new MethodDescriptor((Method)otherMethods.elementAt(i)));
+ 			}
+ 		}
+ 		return b;
+ 	}
+ 
+ 	public BeanInfo getBeanInfo() throws IntrospectionException {
+ 		return getBeanInfoEmbryo().getBeanInfo();
+ 	}
+ 
+ 
+ 	void findAddRemovePairs(BeanInfoEmbryo b) throws IntrospectionException {
+ 		Enumeration listenerEnum = listenerMethods.keys();
+ 		while(listenerEnum.hasMoreElements()) {
+ 			DoubleKey k = (DoubleKey)listenerEnum.nextElement();
+ 			Method[] m = (Method[])listenerMethods.get(k);
+ 			if(m[ADD] != null && m[REMOVE] != null) {
+ 				EventSetDescriptor e = new EventSetDescriptor(Introspector.decapitalize(k.getName()),
+ 				                                              k.getType(), k.getType().getMethods(),
+ 				                                              m[ADD],m[REMOVE]);
+ 				e.setUnicast(ArrayHelper.contains(m[ADD].getExceptionTypes(),java.util.TooManyListenersException.class));
+ 				if(!b.hasEvent(e)) {
+ 					b.addEvent(e);
+ 				}
+ 			}
+ 		}
+ 	}
+ 
+ 	void findXXX(BeanInfoEmbryo b, int funcType) throws IntrospectionException {
+ 		Enumeration keys = propertyMethods.keys();
+ 		while(keys.hasMoreElements()) {
+ 			DoubleKey k = (DoubleKey)keys.nextElement();
+ 			Method[] m = (Method[])propertyMethods.get(k);
+ 			if(m[funcType] != null) {
+ 				PropertyDescriptor p = new PropertyDescriptor(Introspector.decapitalize(k.getName()),
+ 				                                     m[IS] != null ? m[IS] : m[GET],
+ 				                                     m[SET]);
+ 				if(m[SET] != null) {
+ 					p.setConstrained(ArrayHelper.contains(m[SET].getExceptionTypes(),java.beans.PropertyVetoException.class));
+ 				}
+ 				if(!b.hasProperty(p)) {
+ 					b.addProperty(p);
+ 				}
+ 			}
+ 		}
+ 	}
+ 
+ 	void findXXXInt(BeanInfoEmbryo b, int funcType) throws IntrospectionException {
+ 		Enumeration keys = propertyMethods.keys();
+ 		while(keys.hasMoreElements()) {
+ 			DoubleKey k = (DoubleKey)keys.nextElement();
+ 			Method[] m = (Method[])propertyMethods.get(k);
+ 			if(m[funcType] != null) {
+ 				boolean constrained;
+ 				if(m[SET_I] != null) {
+ 					constrained = ArrayHelper.contains(m[SET_I].getExceptionTypes(),java.beans.PropertyVetoException.class);
+ 				} else {
+ 					constrained = false;
+ 				}
+ 
+ 				/** Find out if there is an array type get or set **/
+ 				Class arrayType = Array.newInstance(k.getType(),0).getClass();
+ 				DoubleKey findSetArray = new DoubleKey(arrayType,k.getName());
+ 				Method[] m2 = (Method[])propertyMethods.get(findSetArray);
+ 				IndexedPropertyDescriptor p;
+ 				if(m2 == null) {
+ 					p = new IndexedPropertyDescriptor(Introspector.decapitalize(k.getName()),
+ 				                                          null,null,
+ 				                                          m[GET_I],m[SET_I]);
+ 				} else {
+ 					if(constrained && m2[SET] != null) {
+ 						constrained = ArrayHelper.contains(m2[SET].getExceptionTypes(),java.beans.PropertyVetoException.class);
+ 					}
+ 					p = new IndexedPropertyDescriptor(Introspector.decapitalize(k.getName()),
+ 				                                          m2[GET],m2[SET],
+ 				                                          m[GET_I],m[SET_I]);
+ 				}
+ 				p.setConstrained(constrained);
+ 				if(!b.hasProperty(p)) {
+ 					b.addProperty(p);
+ 				}
+ 			}
+ 		}
+ 	}
+ 
+ 	static final int IS=0;
+ 	static final int GET_I=1;
+ 	static final int SET_I=2;
+ 	static final int GET=3;
+ 	static final int SET=4;
+ 
+ 	static final int ADD=0;
+ 	static final int REMOVE=1;
+ 
+ 	void addToPropertyHash(String name, Method method, int funcType) {
+ 		String newName;
+ 		Class type;
+ 
+ 		switch(funcType) {
+ 			case IS:
+ 				type = java.lang.Boolean.TYPE;
+ 				newName = name.substring(2);
+ 				break;
+ 			case GET_I:
+ 				type = method.getReturnType();
+ 				newName = name.substring(3);
+ 				break;
+ 			case SET_I:
+ 				type = method.getParameterTypes()[1];
+ 				newName = name.substring(3);
+ 				break;
+ 			case GET:
+ 				type = method.getReturnType();
+ 				newName = name.substring(3);
+ 				break;
+ 			case SET:
+ 				type = method.getParameterTypes()[0];
+ 				newName = name.substring(3);
+ 				break;
+ 			default:
+ 				return;
+ 		}
+ 		newName = capitalize(newName);
+ 		if (newName.length() == 0)
+ 			return;
+ 
+ 		DoubleKey k = new DoubleKey(type,newName);
+ 		Method[] methods = (Method[])propertyMethods.get(k);
+ 		if(methods == null) {
+ 			methods = new Method[5];
+ 			propertyMethods.put(k,methods);
+ 		}
+ 		methods[funcType] = method;
+ 	}
+ 
+ 	void addToListenerHash(String name, Method method, int funcType) {
+ 		String newName;
+ 		Class type;
+ 
+ 		switch(funcType) {
+ 			case ADD:
+ 				type = method.getParameterTypes()[0];
+ 				newName = name.substring(3,name.length()-8);
+ 				break;
+ 			case REMOVE:
+ 				type = method.getParameterTypes()[0];
+ 				newName = name.substring(6,name.length()-8);
+ 				break;
+ 			default:
+ 				return;
+ 		}
+ 		newName = capitalize(newName);
+ 		if (newName.length() == 0)
+ 			return;
+ 
+ 		DoubleKey k = new DoubleKey(type,newName);
+ 		Method[] methods = (Method[])listenerMethods.get(k);
+ 		if(methods == null) {
+ 			methods = new Method[2];
+ 			listenerMethods.put(k,methods);
+ 		}
+ 		methods[funcType] = method;
+ 	}
+ 
+ 	/* Determines whether <code>stopClass</code> is <code>null</code>
+ 	 * or <code>declaringClass<code> is a true subclass of <code>stopClass</code>.
+ 	 * This expression is useful to detect whether a method should be introspected or not.
+ 	 * The rules for this are described in {@link java.beans.Introspector.getBeanInfo(Class, Class)}.
+ 	 */
+ 	static boolean isReachable(Class stopClass, Class declaringClass) {
+ 		return stopClass == null || (stopClass.isAssignableFrom(declaringClass) && !stopClass.equals(declaringClass));
+ 	}
+ 
+ 	/** Transforms a property name into a part of a method name.
+ 	 * E.g. "value" becomes "Value" which can then concatenated with
+ 	 * "set", "get" or "is" to form a valid method name.
+ 	 * 
+ 	 * Implementation notes:
+ 	 * If "" is the argument, it is returned without changes.
+ 	 * If <code>null</code> is the argument, <code>null</code> is returned.
+ 	 * 
+ 	 * @param name Name of a property.
+ 	 * @return Part of a method name of a property.
+ 	 */
+ 	static String capitalize(String name) {
+ 		try {
+ 			if(Character.isUpperCase(name.charAt(0))) {
+ 				return name;
+ 			} else {
+ 				char[] c = name.toCharArray();
+ 				c[0] = Character.toLowerCase(c[0]);
+ 				return new String(c);
+ 			}
+ 		} catch(StringIndexOutOfBoundsException E) {
+ 			return name;
+ 		} catch(NullPointerException E) {
+ 			return null;
+ 		}
+ 	}
+ }
+ 
+ /** This class is a hashmap key that consists of a <code>Class</code> and a
+  * <code>String</code> element.
+  * 
+  * It is used for XXX: find out what this is used for
+  * 
+  * @author John Keiser
+  * @author Robert Schuster
+  */ 
+ class DoubleKey {
+ 	Class type;
+ 	String name;
+ 
+ 	DoubleKey(Class type, String name) {
+ 		this.type = type;
+ 		this.name = name;
+ 	}
+ 
+ 	Class getType() {
+ 		return type;
+ 	}
+ 
+ 	String getName() {
+ 		return name;
+ 	}
+ 
+ 	public boolean equals(Object o) {
+ 		if(o instanceof DoubleKey) {
+ 			DoubleKey d = (DoubleKey)o;
+ 			return d.type.equals(type) && d.name.equals(name);
+ 		} else {
+ 			return false;
+ 		}
+ 	}
+ 
+ 	public int hashCode() {
+ 		return type.hashCode() ^ name.hashCode();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/TODO gcc-4.1.0/libjava/classpath/gnu/java/beans/TODO
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/TODO	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/TODO	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1 ----
+ - overhaul efficiency
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AbstractContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AbstractContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AbstractContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AbstractContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* gnu.java.beans.decoder.AbstractContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** AbstractContext implements some basic functionality of the Context
+  * interface and is therefore the base of all Context implementations.
+  *
+  * @author Robert Schuster
+  */
+ abstract class AbstractContext implements Context
+ {
+   private boolean isStatement;
+   private String id;
+ 
+   public String getId()
+   {
+     return id;
+   }
+ 
+   public void setId(String newId)
+   {
+     id = newId;
+   }
+ 
+   public boolean isStatement()
+   {
+     return isStatement;
+   }
+ 
+   public void setStatement(boolean b)
+   {
+     isStatement = b;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AbstractCreatableObjectContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AbstractCreatableObjectContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AbstractCreatableObjectContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AbstractCreatableObjectContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* gnu.java.beans.decoder.AbstractCreatableContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** AbstractCreatableObjectContext is the base class for all Context implementations
+  * which create a result object in their lifetime. It provides means for preventing
+  * to create the object twice.
+  *
+  * @author Robert Schuster
+  *
+  */
+ abstract class AbstractCreatableObjectContext extends AbstractObjectContext
+ {
+   AbstractCreatableObjectContext()
+   {
+   }
+ 
+   /** Adds a parameter object to this Context if the result object has not been
+    * created yet. Otherwise an AssemblyException is thrown that indicates a wrong
+    * behavior of the decoder.
+    */
+   public final void addParameterObject(Object o) throws AssemblyException
+   {
+     if (object == null)
+       addParameterObjectImpl(o);
+     else
+       throw new AssemblyException(new IllegalStateException("No more parameter objects are allowed when the object as already been created."));
+   }
+ 
+   /** Adds a parameter object to this Context. Implement this without caring
+    * for illegal states because this has been done already.
+    *
+    * @param obj The parameter object to be added. 
+    */
+   protected abstract void addParameterObjectImpl(Object obj);
+ 
+   /** Creates the result object if it does not exist already.
+    */
+   public final void notifyStatement(Context outerContext)
+     throws AssemblyException
+   {
+     if (object != null)
+       return;
+ 
+     object = createObject(outerContext);
+   }
+ 
+   /** Creates the result object. This method is called only once. Implement this
+    * without checking for double invocations as this is already being prevented.
+    *
+    * @param outerContext The Context that exists around this one. 
+    * @return The result object.
+    * @throws AssemblerException if the object creation fails somehow.
+    */
+   protected abstract Object createObject(Context outerContext)
+     throws AssemblyException;
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+    */
+   public final Object endContext(Context outerContext)
+     throws AssemblyException
+   {
+     notifyStatement(outerContext);
+     return object;
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#subContextFailed()
+    */
+   public boolean subContextFailed()
+   {
+     /* Returns true when the AbstractCreatableObjectContext has not created the result object yet
+      * (A failed subcontext automatically lets this context fail too.)
+      */
+     return object == null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AbstractElementHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AbstractElementHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AbstractElementHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AbstractElementHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,316 ----
+ /* gnu.java.beans.decoder.AbstractElementHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ 
+ import org.xml.sax.Attributes;
+ 
+ /** ElementHandler manages a Context instance and interacts with
+  * its parent and child handlers.
+  *
+  * @author Robert Schuster
+  */
+ abstract class AbstractElementHandler implements ElementHandler
+ {
+   /** The Context instance of this handler. The instance is available after the startElement()
+    * method was called. Otherwise the handler is marked as failed.
+    */
+   private Context context;
+ 
+   /** The parent handler. */
+   private ElementHandler parent;
+ 
+   /** Stores whether this handler is marked as failed. */
+   private boolean hasFailed;
+ 
+   /** Stores the character data which is contained in the body of the XML tag. */
+   private StringBuffer buffer = new StringBuffer();
+ 
+   /** Stores whether this ElementHandler can have subelements. The information for this is taken from
+    * javabeans.dtd which can be found here:
+    * <a href="http://java.sun.com/products/jfc/tsc/articles/persistence3/">Java Persistence Article</a>
+    */
+   private boolean allowsSubelements;
+ 
+   /** Creates a new ElementHandler with the given ElementHandler instance
+    * as parent.
+    *
+    * @param parentHandler The parent handler.
+    */
+   protected AbstractElementHandler(ElementHandler parentHandler,
+                                    boolean allowsSubs)
+   {
+     parent = parentHandler;
+     allowsSubelements = allowsSubs;
+   }
+ 
+   /** Evaluates the attributes and creates a Context instance.
+    * If the creation of the Context instance fails the ElementHandler
+    * is marked as failed which may affect the parent handler other.
+    *
+    * @param attributes Attributes of the XML tag.
+    */
+   public final void start(Attributes attributes,
+                           ExceptionListener exceptionListener)
+   {
+     try
+       {
+ 	// lets the subclass create the appropriate Context instance
+ 	context = startElement(attributes, exceptionListener);
+       }
+     catch (AssemblyException pe)
+       {
+ 	Throwable t = pe.getCause();
+ 
+ 	if (t instanceof Exception)
+ 	  exceptionListener.exceptionThrown((Exception) t);
+ 	else
+ 	  throw new InternalError("Unexpected Throwable type in AssemblerException. Please file a bug report.");
+ 
+ 	notifyContextFailed();
+ 
+ 	return;
+       }
+   }
+ 
+   /** Analyses the content of the Attributes instance and creates a Context
+    * object accordingly.
+    * An AssemblerException is thrown when the Context instance could not
+    * be created.
+    *
+    * @param attributes Attributes of the XML tag.
+    * @return A Context instance.
+    * @throws AssemblerException when Context instance could not be created.
+    */
+   protected abstract Context startElement(Attributes attributes, ExceptionListener exceptionListener)
+     throws AssemblyException;
+ 
+   /** Post-processes the Context.
+    */
+   public final void end(ExceptionListener exceptionListener)
+   {
+     // skips processing if the handler is marked as failed (because the Context
+     // is then invalid or may not exist at all)
+     if (!hasFailed)
+       {
+ 	try
+ 	  {
+ 	    // note: the order of operations is very important here
+ 	    // sends the stored character data to the Context
+ 	    endElement(buffer.toString());
+ 
+ 	    // reports to the parent handler if this handler's Context is a
+ 	    // statement (returning no value BACK to the parent's Context)
+ 	    if (context.isStatement())
+ 	      {
+ 		// This may create a valid result in the parent's Context
+ 		// or let it fail
+ 		parent.notifyStatement(exceptionListener);
+ 
+ 		// skips any further processing if the parent handler is now marked
+ 		// as failed
+ 		if (parent.hasFailed())
+ 		  return;
+ 	      }
+ 
+ 	    // processes the Context and stores the result
+ 	    putObject(context.getId(), context.endContext(parent.getContext()));
+ 
+ 	    // transfers the Context's results to the parent's Context
+ 	    // if it is an expression (rather than a statement) 
+ 	    if (! context.isStatement())
+ 	      parent.getContext().addParameterObject(context.getResult());
+ 	  }
+ 	catch (AssemblyException pe)
+ 	  {
+ 	    // notifies that an exception was thrown in this handler's Context 
+ 	    Throwable t = pe.getCause();
+ 
+ 	    if (t instanceof Exception)
+ 	      exceptionListener.exceptionThrown((Exception) t);
+ 	    else
+ 	      throw (InternalError) new InternalError("Severe problem while decoding XML data.")
+ 	            .initCause(t);
+ 
+ 	    // marks the handler as failed
+ 	    notifyContextFailed();
+ 	  }
+       }
+   }
+ 
+   /** Notifies the handler's Context that its child Context will not return
+    * a value back. Some Context variants need this information to know when
+    * a method or a constructor call can be made.
+    *
+    * This method is called by a child handler.
+    */
+   public void notifyStatement(ExceptionListener exceptionListener)
+   {
+     try
+       {
+       	
+       	// propagates to parent handler first to generate objects
+       	// needed by this Context instance
+       	if(context.isStatement())
+       	{
+       		parent.notifyStatement(exceptionListener);
+       	}
+       	
+ 	// Some Context instances do stuff which can fail now. If that
+ 	// happens this handler is marked as failed.
+ 	context.notifyStatement(parent.getContext());
+       }
+     catch (AssemblyException ae)
+       {
+ 	// notifies that an exception was thrown in this handler's Context 
+ 	Throwable t = ae.getCause();
+ 
+ 	if (t instanceof Exception)
+ 	  exceptionListener.exceptionThrown((Exception) t);
+ 	else
+ 	  throw (InternalError) new InternalError("Severe problem while decoding XML data.")
+ 	        .initCause(t);
+ 
+ 	// marks the handler as failed
+ 	notifyContextFailed();
+       }
+   }
+ 
+   /** Marks this and any depending parent handlers as failed. Which means that on their end
+    * no result is calculated.
+    *
+    * When a handler has failed no more handlers are accepted within it.
+    */
+   public final void notifyContextFailed()
+   {
+     hasFailed = true;
+ 
+     // marks the parent handler as failed if its Context
+     // is affected by the failure of this handler's Context
+     if (parent.getContext().subContextFailed())
+       parent.notifyContextFailed();
+   }
+ 
+   /** Returns whether this handler has failed.
+    *
+    * This is used to skip child elements.
+    *
+    * @return Whether this handler has failed.
+    */
+   public final boolean hasFailed()
+   {
+     return hasFailed;
+   }
+ 
+   /** Processes the character data when the element ends.
+    *
+    * The default implementation does nothing for convenience.
+    *
+    * @param characters
+    * @throws AssemblerException
+    */
+   protected void endElement(String characters) throws AssemblyException
+   {
+     // XXX: throw an exception when unexpected character data is available?
+   }
+ 
+   /** Adds characters from the body of the XML tag to the buffer.
+    *
+    * @param ch
+    * @param start
+    * @param length
+    * @throws SAXException
+    */
+   public final void characters(char[] ch, int start, int length)
+   {
+     // simply appends character data
+     buffer.append(ch, start, length);
+   }
+ 
+   /** Stores an object globally under a unique id. If the id is
+    * null the object is not stored.
+    *
+    * @param objectId
+    * @param o
+    */
+   public void putObject(String objectId, Object o)
+   {
+     if (objectId != null)
+       parent.putObject(objectId, o);
+   }
+ 
+   /** Returns a previously stored object. If the id is null the
+    * result is null, too.
+    *
+    * @param objectId
+    * @return Returns a previously stored object or null.
+    */
+   public Object getObject(String objectId) throws AssemblyException
+   {
+     return objectId == null ? null : parent.getObject(objectId);
+   }
+ 
+   /** Returns the Class instance as if called Class.forName() but
+    * uses a ClassLoader given by the user.
+    *
+    * @param className
+    * @return
+    * @throws ClassNotFoundException
+    */
+   public Class instantiateClass(String className)
+     throws ClassNotFoundException
+   {
+     return parent.instantiateClass(className);
+   }
+ 
+   public final boolean isSubelementAllowed(String subElementName)
+   {
+     return allowsSubelements && ! subElementName.equals("java");
+   }
+ 
+   public final Context getContext()
+   {
+     return context;
+   }
+ 
+   public final ElementHandler getParent()
+   {
+     return parent;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AbstractObjectContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AbstractObjectContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AbstractObjectContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AbstractObjectContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,127 ----
+ /* gnu.java.beans.decoder.AbstractObjectContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.java.beans.decoder;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ 
+ /** AbstractObjectContext is the base for all Context implementations which
+  * create or provide a result object during their lifetime.
+  *
+  * <p>This class provides the implementation for an indexed get and set method.
+  * But this does not mean that the result object supports these operation.</p>
+  *
+  * @author Robert Schuster
+  *
+  */
+ abstract class AbstractObjectContext extends AbstractContext
+ {
+     protected Object object;
+ 
+     AbstractObjectContext()
+     {}
+ 
+     /** Sets the result object of the Context.
+      *
+      * @param obj The result object to be set.
+      */
+     protected final void setObject(Object obj)
+     {
+         object = obj;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#set(int, java.lang.Object)
+      */
+     public final void set(int index, Object o) throws AssemblyException
+     {
+         try
+         {
+             Method method =
+                 object.getClass().getMethod(
+                     "set",
+                     new Class[] { Integer.TYPE, Object.class });
+ 
+             method.invoke(object, new Object[] { new Integer(index), o });
+         }
+         catch (NoSuchMethodException nsme)
+         {
+             throw new AssemblyException(nsme);
+         }
+         catch (InvocationTargetException ite)
+         {
+             throw new AssemblyException(ite.getCause());
+         }
+         catch (IllegalAccessException iae)
+         {
+             throw new AssemblyException(iae);
+         }
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#get(int)
+      */
+     public final Object get(int index) throws AssemblyException
+     {
+         try
+         {
+             Method method =
+                 object.getClass().getMethod(
+                     "get",
+                     new Class[] { Integer.TYPE });
+ 
+             return method.invoke(object, new Object[] { new Integer(index)});
+         }
+         catch (NoSuchMethodException nsme)
+         {
+             throw new AssemblyException(nsme);
+         }
+         catch (InvocationTargetException ite)
+         {
+             throw new AssemblyException(ite.getCause());
+         }
+         catch (IllegalAccessException iae)
+         {
+             throw new AssemblyException(iae);
+         }
+     }
+ 
+     public final Object getResult()
+     {
+         return object;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ArrayContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ArrayContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ArrayContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ArrayContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,122 ----
+ /* gnu.java.beans.decoder.ArrayContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.lang.reflect.Array;
+ 
+ /** A Context implementation for a fixed size array. The array
+  * elements have to be set using IndexContext instances.
+  *
+  * @author Robert Schuster
+  */
+ class ArrayContext extends AbstractContext
+ {
+   private Object array;
+ 
+   ArrayContext(String id, Class klass, int length)
+   {
+     setId(id);
+     array = Array.newInstance(klass, length);
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+    */
+   public void addParameterObject(Object o) throws AssemblyException
+   {
+     throw new AssemblyException(new IllegalStateException("Adding objects without an index to a fixed array is not possible."));
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#reportStatement()
+    */
+   public void notifyStatement(Context outerContext)
+   {
+     // method call intentionally ignored because there is not any useful effect 
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+    */
+   public Object endContext(Context outerContext) throws AssemblyException
+   {
+     return array;
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#subContextFailed()
+    */
+   public boolean subContextFailed()
+   {
+     // returns false to indicate that assembling the array does not fail only because
+     // a subelement failed.
+     return false;
+   }
+ 
+   public void set(int index, Object o) throws AssemblyException
+   {
+     try
+       {
+ 	Array.set(array, index, o);
+       }
+     catch (ArrayIndexOutOfBoundsException aioobe)
+       {
+ 	throw new AssemblyException(aioobe);
+       }
+   }
+ 
+   public Object get(int index) throws AssemblyException
+   {
+     try
+       {
+ 	return Array.get(array, index);
+       }
+     catch (ArrayIndexOutOfBoundsException aioobe)
+       {
+ 	throw new AssemblyException(aioobe);
+       }
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#getResult()
+    */
+   public Object getResult()
+   {
+     return array;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ArrayHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ArrayHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ArrayHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ArrayHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,118 ----
+ /* gnu.java.beans.decoder.ArrayHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ import java.util.HashMap;
+ 
+ import org.xml.sax.Attributes;
+ 
+ /** ArrayHandler processes the &lt;array&gt; tag. Depending on the existance of the 'length' attribute a Context for
+  * a fixed-size or growable array is created.
+  *
+  * @author Robert Schuster
+  */
+ class ArrayHandler extends AbstractElementHandler
+ {
+   /** Contains a mapping between a textual description of a primitive type (like "byte") and
+    * its corresponding wrapper class. This allows it to easily construct Array objects for
+    * primitive data types.
+    */
+   private static HashMap typeMap = new HashMap();
+ 
+   static
+     {
+       typeMap.put("byte", Byte.TYPE);
+       typeMap.put("short", Short.TYPE);
+       typeMap.put("int", Integer.TYPE);
+       typeMap.put("long", Long.TYPE);
+ 
+       typeMap.put("float", Float.TYPE);
+       typeMap.put("double", Double.TYPE);
+ 
+       typeMap.put("boolean", Boolean.TYPE);
+ 
+       typeMap.put("char", Character.TYPE);
+     }
+ 
+   /**
+    * @param PersistenceParser
+    */
+   ArrayHandler(ElementHandler parent)
+   {
+     super(parent, true);
+   }
+ 
+   protected Context startElement(Attributes attributes, ExceptionListener exceptionListener)
+     throws AssemblyException, AssemblyException
+   {
+     String id = attributes.getValue("id");
+     String className = attributes.getValue("class");
+ 
+     if (className != null)
+       {
+ 	try
+ 	  {
+ 	    Class klass;
+ 
+ 	    if (typeMap.containsKey(className))
+ 	      klass = (Class) typeMap.get(className);
+ 	    else
+ 	      klass = instantiateClass(className);
+ 
+ 	    String length = attributes.getValue("length");
+ 	    if (length != null)
+ 	      // creates Array with predefined length
+ 	      return new ArrayContext(id, klass, Integer.parseInt(length));
+ 	    else
+ 	      // creates Array without length restriction
+ 	      return new GrowableArrayContext(id, klass);
+ 	  }
+ 	catch (ClassNotFoundException cnfe)
+ 	  {
+ 	    throw new AssemblyException(cnfe);
+ 	  }
+ 	catch (NumberFormatException nfe)
+ 	  {
+ 	    throw new AssemblyException(nfe);
+ 	  }
+       }
+ 
+     throw new AssemblyException(new IllegalArgumentException("Missing 'class' attribute in <array> tag."));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AssemblyException.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AssemblyException.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/AssemblyException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/AssemblyException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* gnu.java.beans.decoder.AssemblyException
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** The AssemblyException is used to wrap the cause of problems when assembling objects.
+  * In all cases only the wrapped exception is given to the PersistenceParser's
+  * ExceptionListener instance (never the AssemblyException itself).
+  * 
+  * <p>Note: Often multiple steps are needed to construct a fully usuable object instance.
+  * Such a construction can be called assembly and thats why this exception was
+  * named AssemblyException.</p>
+  *
+  * @author Robert Schuster
+  */
+ class AssemblyException extends Exception
+ {
+   AssemblyException(Throwable cause)
+   {
+     super(cause);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/BooleanHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/BooleanHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/BooleanHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/BooleanHandler.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,67 ----
+ /* gnu.java.beans.decoder.BooleanHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** Creates a Boolean instance from the character data in a &lt;boolean&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ class BooleanHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   BooleanHandler(ElementHandler parent)
+   {
+     super(parent);
+ 
+     // TODO Auto-generated constructor stub
+   }
+ 
+   protected Object parse(String number) throws AssemblyException
+   {
+     if (number.equals("true"))
+       return Boolean.TRUE;
+ 
+     if (number.equals("false"))
+       return Boolean.FALSE;
+ 
+     throw new AssemblyException(new IllegalArgumentException("Element contained no valid boolean value."));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ByteHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ByteHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ByteHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ByteHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* gnu.java.beans.decoder.ByteHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** Creates a Byte instance from the character data in a &lt;byte&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ class ByteHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   ByteHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String number) throws NumberFormatException
+   {
+     return Byte.valueOf(number);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/CharHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/CharHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/CharHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/CharHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* gnu.java.beans.decoder.CharHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** Creates a Character instance from the character data in a &lt;char&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ class CharHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   CharHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String number) throws AssemblyException
+   {
+     if (number.length() > 1)
+       throw new AssemblyException(new IllegalArgumentException("Element contained no valid character."));
+ 
+     return new Character(number.charAt(0));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ClassHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ClassHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ClassHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ClassHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,66 ----
+ /* gnu.java.beans.decoder.ClassHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** Creates a Class instance from the character data in a &lt;class&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ class ClassHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   ClassHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String characters) throws AssemblyException
+   {
+     try
+       {
+ 	return instantiateClass(characters);
+       }
+     catch (ClassNotFoundException cnfe)
+       {
+ 	throw new AssemblyException(cnfe);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ConstructorContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ConstructorContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ConstructorContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ConstructorContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* gnu.java.beans.decoder.ConstructorContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.InvocationTargetException;
+ import java.util.ArrayList;
+ 
+ /** A ConstructorContext is a {@link Context} implementation which collects the parameters for a constructor
+  * call and instantiates the result object using that constructor. After that sub-contexts can invoke
+  * methods on the result object.
+  *
+  * <p>The constructor is invoked when a sub-context is a statement or the Context ends.</p>
+  *
+  * @author Robert Schuster
+  */
+ class ConstructorContext extends AbstractCreatableObjectContext
+ {
+   private ArrayList arguments = new ArrayList();
+   private Class klass;
+ 
+   ConstructorContext(String id, Class newClass)
+   {
+     setId(id);
+     // sets superclass field 
+     klass = newClass;
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+    */
+   protected void addParameterObjectImpl(Object o)
+   {
+     arguments.add(o);
+   }
+ 
+   protected Object createObject(Context outerContext)
+     throws AssemblyException
+   {
+     Object[] args = arguments.toArray();
+ 
+     try
+       {
+ 	Constructor constructor = MethodFinder.getConstructor(klass, args);
+ 
+ 	// instantiates object (klass field gets re-set by superclass)
+ 	return constructor.newInstance(args);
+       }
+     catch (NoSuchMethodException nsme)
+       {
+ 	throw new AssemblyException(nsme);
+       }
+     catch (InvocationTargetException ite)
+       {
+ 	throw new AssemblyException(ite.getCause());
+       }
+     catch (IllegalAccessException iae)
+       {
+ 	throw new AssemblyException(iae);
+       }
+     catch (InstantiationException ie)
+       {
+ 	throw new AssemblyException(ie);
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/Context.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/Context.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/Context.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/Context.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /* gnu.java.beans.decoder.Context
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ /** A Context is the environment for an object which is being assembler. If there
+  * are no errors each handler creates one Context.
+  * <p>Depending on the result of isStatement() a Context can be statement or an
+  * expression. An expression returns a value to the Context of its parent handler,
+  * a statement does not. Whenever a Context is a statement the parent handler's
+  * Context is informed about that through the {@link notifyStatement}-method.</p>
+  *
+  * @author Robert Schuster
+  */
+ interface Context
+ {
+   /** Adds a parameter object to the context. This method is used when
+    * sub-Contexts return their result.
+    *
+    * Some Contexts do not accept more than a certain amount of objects
+    * and throw an AssemblerException if the amount is exceeded.
+    *
+    * @param o The object added to this context.
+    */
+   void addParameterObject(Object o) throws AssemblyException;
+ 
+   /** Notifies that the next element is a statement. This can mean
+    * that an argument list is complete to be called.
+    *
+    */
+   void notifyStatement(Context outerContext) throws AssemblyException;
+ 
+   /** Notifies that the context ends and the returns the appropriate result
+    * object.
+    *
+    * @param outerContext
+    * @return
+    */
+   Object endContext(Context outerContext) throws AssemblyException;
+ 
+   /** Notifies that the assembly of a subcontext failed and returns
+    * whether this Context is affected in a way that it fails too.
+    *
+    * @return Whether the failure of a subcontext lets this context fail, too.
+    */
+   boolean subContextFailed();
+ 
+   /** Calls an appropriate indexed set method if it is available or
+    * throws an AssemblerException if that is not allowed on this Context.
+    *
+    * The behaviour of this method is equal to List.set(int, Object).
+    *
+    * @param index Index position to be set.
+    * @param o Object to be set at the given index position.
+    * @throws AssemblerException Indexed set is not allowed or otherwise failed.
+    */
+   void set(int index, Object o) throws AssemblyException;
+ 
+   /** Calls an appropriate indexed get method if it is available or
+    * throws an AssemblerException if that is not allowed on this Context.
+    *
+    * The behaviour of this method is equal to List.get(int).
+    *
+    * @param index Index position of the object return.
+    * @throws AssemblerException Indexed get is not allowed or otherwise failed.
+    */
+   Object get(int index) throws AssemblyException;
+ 
+   /** Returns the result which was calculated by calling endContext() or reportStatement().
+    * Its the handler's responsibility to care that any of these two methods was called.
+    *
+    * This is used by sub-Contexts to access this Context's result.
+    *
+    * @return
+    */
+   Object getResult();
+ 
+   /** Gives this Context a unique id. For convenience the id may be null which means
+    * that no id exists at all.
+    *
+    * @param id
+    */
+   void setId(String id);
+ 
+   /** Returns this Context's unique id or null if does not have such an id.
+    *
+    * @return This Context's id or null.
+    */
+   String getId();
+ 
+   /** Returns whether this Context is a statement (not returning result back
+    * to parent handler's Context) or not (= expression).
+    *
+    * @return
+    */
+   boolean isStatement();
+ 
+   /** Sets whether this Context is a statement or not.
+    *
+    * @param b
+    */
+   void setStatement(boolean b);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DecoderContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DecoderContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DecoderContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DecoderContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,124 ----
+ /* gnu.java.beans.decoder.DecoderContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.XMLDecoder;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ 
+ /** DecoderContext is a Context implementation which allows access to
+  * the XMLDecoder instance itself. This is used for the &lt;java&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ public class DecoderContext extends AbstractContext
+ {
+   private XMLDecoder decoder;
+ 
+   public DecoderContext(XMLDecoder xmlDecoder)
+   {
+     decoder = xmlDecoder;
+   }
+ 
+   private ArrayList objects = new ArrayList();
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+    */
+   public void addParameterObject(Object o) throws AssemblyException
+   {
+     objects.add(o);
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#reportStatement()
+    */
+   public void notifyStatement(Context outerContext) throws AssemblyException
+   {
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+    */
+   public Object endContext(Context outerContext) throws AssemblyException
+   {
+     return decoder;
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#subContextFailed()
+    */
+   public boolean subContextFailed()
+   {
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#set(int, java.lang.Object)
+    */
+   public void set(int index, Object o) throws AssemblyException
+   {
+     throw new AssemblyException(new IllegalArgumentException("Set method is not allowed in decoder context."));
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#get(int)
+    */
+   public Object get(int index) throws AssemblyException
+   {
+     throw new AssemblyException(new IllegalArgumentException("Get method is not allowed in decoder context."));
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#getResult()
+    */
+   public Object getResult()
+   {
+     return decoder;
+   }
+ 
+   /** Returns an Iterator that retrieves the assembled objects.
+    * 
+    * @return An Iterator retrieving assembled objects.
+    */
+   public Iterator iterator()
+   {
+     return objects.iterator();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DefaultExceptionListener.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DefaultExceptionListener.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DefaultExceptionListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DefaultExceptionListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* gnu.java.beans.DefaultExceptionListener
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ 
+ /** The DefaultExceptionListener is the default implementation of the ExceptionListener
+  * interface. An instance of this class is used whenever the user provided no
+  * ExceptionListener instance on its own.
+  *
+  * <p>The implementation just writes the exception's message to <code>System.err</code>.</p>
+  *
+  * @author Robert Schuster
+  */
+ public class DefaultExceptionListener implements ExceptionListener
+ {
+   public void exceptionThrown(Exception e)
+   {
+     System.err.println("non-critical exception: " + e + " - message: "
+                        + e.getMessage());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DoubleHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DoubleHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DoubleHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DoubleHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* gnu.java.beans.decoder.DoubleHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** Creates a Double instance from the character data in a &lt;double&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ class DoubleHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   DoubleHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String number) throws NumberFormatException
+   {
+     return Double.valueOf(number);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DummyContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DummyContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DummyContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DummyContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,116 ----
+ /* gnu.java.beans.decoder.DummyContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ /** The DummyContext is used as the Context implementation for the DummyHandler. It
+  * just prevents having a null-reference.
+  *
+  * <p>When the implementation is correct none of this class' methods
+  * (except <code>notifyStatement()</code>) is called.</p>
+  *
+  * @author Robert Schuster
+  */
+ public class DummyContext extends AbstractContext
+ {
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+      */
+     public void addParameterObject(Object o) throws AssemblyException
+     {
+         fail();
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#reportStatement()
+      */
+     public void notifyStatement(Context outerContext) throws AssemblyException
+     {
+     	// intentionally ignored
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+      */
+     public Object endContext(Context outerContext) throws AssemblyException
+     {
+         fail();
+ 	return null;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#subContextFailed()
+      */
+     public boolean subContextFailed()
+     {
+         fail();
+ 	return false;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#set(int, java.lang.Object)
+      */
+     public void set(int index, Object o) throws AssemblyException
+     {
+         fail();
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#get(int)
+      */
+     public Object get(int index) throws AssemblyException
+     {
+         fail();
+ 	return null;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#getResult()
+      */
+     public Object getResult()
+     {
+         fail();
+ 	return null;
+     }
+ 
+     private void fail()
+     {
+         throw new InternalError("Invoking the DummyContext is not expected"
+ 				+ " - Please file a bug report at"
+ 				+ " http://www/gnu.org/software/classpath/.");
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DummyHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DummyHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/DummyHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/DummyHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,156 ----
+ /* gnu.java.beans.decoder.DummyHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ 
+ import org.xml.sax.Attributes;
+ 
+ /** An ElementHandler implementation that is used as an artificial root
+  * element. This avoids having to check for a null element.
+  *
+  * @author Robert Schuster
+  */
+ class DummyHandler implements ElementHandler
+ {
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#start(org.xml.sax.Attributes, java.beans.ExceptionListener)
+      */
+     public void start(
+         Attributes attributes,
+         ExceptionListener exceptionListener)
+     {
+         fail();
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#end(java.beans.ExceptionListener)
+      */
+     public void end(ExceptionListener exceptionListener)
+     {
+         fail();
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#characters(char[], int, int)
+      */
+     public void characters(char[] ch, int start, int length)
+     {
+         fail();
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#isSubelementAllowed(java.lang.String)
+      */
+     public boolean isSubelementAllowed(String subElementName)
+     {
+         return true;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#instantiateClass(java.lang.String)
+      */
+     public Class instantiateClass(String className)
+         throws ClassNotFoundException
+     {
+         fail();
+ 	return null;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#reportStatement(java.beans.ExceptionListener)
+      */
+     public void notifyStatement(ExceptionListener exceptionListener)
+     {
+         // ignore
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#hasFailed()
+      */
+     public boolean hasFailed()
+     {
+         return false;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#getContext()
+      */
+     public Context getContext()
+     {
+         return new DummyContext();
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#contextFailed()
+      */
+     public void notifyContextFailed()
+     {
+         fail();
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#putObject(java.lang.String, java.lang.Object)
+      */
+     public void putObject(String objectId, Object o)
+     {
+         fail();
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.ElementHandler#getObject(java.lang.String)
+      */
+     public Object getObject(String objectId)
+     {
+         fail();
+ 	return null;
+     }
+ 
+     public ElementHandler getParent()
+     {
+         fail();
+ 	return null;
+     }
+ 
+     private void fail()
+     {
+         throw new InternalError("Invoking the DummyHandler is not expected"
+ 			        + " - Please file a bug report at "
+ 				+ " http://www.gnu.org/software/classpath/.");
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ElementHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ElementHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ElementHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ElementHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,130 ----
+ /* gnu.java.beans.decoder.ElementHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ 
+ import org.xml.sax.Attributes;
+ 
+ /** ElementHandler manages a Context instance and interacts with
+  * its parent and child handlers.
+  *
+  * @author Robert Schuster
+  */
+ interface ElementHandler
+ {
+   /** Evaluates the attributes and creates a Context instance.
+    * If the creation of the Context instance fails the ElementHandler
+    * is marked as failed which may affect the parent handler other.
+    *
+    * @param attributes Attributes of the XML tag.
+    */
+   void start(Attributes attributes, ExceptionListener exceptionListener);
+ 
+   /** Post-processes the Context.
+    */
+   void end(ExceptionListener exceptionListener);
+ 
+   /** Adds characters from the body of the XML tag to the buffer.
+    *
+    * @param ch
+    * @param start
+    * @param length
+    * @throws SAXException
+    */
+   void characters(char[] ch, int start, int length);
+ 
+   /** Returns whether a subelement of the given name is allowed. The rules
+    * for evaluating this are derived from the javabeans.dtd which can be found
+    * here: <a href="http://java.sun.com/products/jfc/tsc/articles/persistence3">Java Persistence Article</a>.
+    * 
+    * @param subElementName 
+    * @return
+    */
+   boolean isSubelementAllowed(String subElementName);
+ 
+   /** Provides the same functionality as Class.forName() but allows the decoder
+    * to use a different class loader.
+    * 
+    * @param className
+    * @return
+    * @throws ClassNotFoundException
+    */ 
+   Class instantiateClass(String className) throws ClassNotFoundException;
+ 
+   /** Notifies the handler's Context that its child Context will not return
+    * a value back. Some Context variants need this information to know when
+    * a method or a constructor call can be made.
+    *
+    * This method is called by a child handler.
+    */
+   void notifyStatement(ExceptionListener exceptionListener);
+ 
+   /** Returns whether this handler has failed.
+    *
+    * This is used to skip child elements.
+    *
+    * @return Whether this handler has failed.
+    */
+   boolean hasFailed();
+ 
+   /** Returns the Context instance this handler is working on.
+    * 
+    * @return The handler's Context instance.
+    */
+   Context getContext();
+ 
+   /** Notifies the handler that its Context failed and starts a recursive
+    * invocation of the parent handler if it is affected by that failure.
+    * 
+    * Although the method is a public API member it is only used internally.
+    */
+   void notifyContextFailed();
+ 
+   /** Stores the object under the given id. The object is not stored if the
+    * id is null.
+    * 
+    * @param objectId
+    * @param o
+    */
+   void putObject(String objectId, Object o);
+ 
+   Object getObject(String objectId) throws AssemblyException;
+ 
+   ElementHandler getParent();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/FloatHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/FloatHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/FloatHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/FloatHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* gnu.java.beans.decoder.FloatHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** Creates a Float instance from the character data in a &lt;float&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ class FloatHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   FloatHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String number) throws NumberFormatException
+   {
+     return Float.valueOf(number);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/GrowableArrayContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/GrowableArrayContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/GrowableArrayContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/GrowableArrayContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,138 ----
+ /* gnu.java.beans.decoder.GrowableArrayContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.java.beans.decoder;
+ 
+ import java.lang.reflect.Array;
+ 
+ /** A Context implementation for a growable array. The array
+  * elements have to be set using expressions.
+  *
+  * @author Robert Schuster
+  */
+ class GrowableArrayContext extends AbstractContext
+ {
+     private static final int INITIAL_SIZE = 16;
+     
+     private Class klass;
+     private Object array;
+     private int length;
+     
+     GrowableArrayContext(String id, Class newClass)
+     {
+         setId(id);
+         klass = newClass;
+         array = Array.newInstance(klass, INITIAL_SIZE);
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+      */
+     public void addParameterObject(Object o) throws AssemblyException
+     {
+       if (length == Array.getLength(array))
+         {
+           Object tmp = Array.newInstance(klass, length * 2);
+           System.arraycopy(array, 0, tmp, 0, length);
+           array = tmp;
+         }
+         
+       try {
+         Array.set(array, length++, o);
+       } catch(IllegalArgumentException iae) {
+         throw new AssemblyException(iae);
+       }
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#reportStatement()
+      */
+     public void notifyStatement(Context outerContext) throws AssemblyException
+     {
+         throw new AssemblyException(
+             new IllegalArgumentException("Statements inside a growable array are not allowed."));
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+      */
+     public Object endContext(Context outerContext) throws AssemblyException
+     {
+         if (length != Array.getLength(array))
+           {
+             Object tmp = Array.newInstance(klass, length);
+             System.arraycopy(array, 0, tmp, 0, length);
+             array = tmp;
+           }
+         
+         return array;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#subContextFailed()
+      */
+     public boolean subContextFailed()
+     {
+         // returns false to indicate that assembling the array does not fail only because
+         // a subelement failed
+         return false;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#set(int, java.lang.Object)
+      */
+     public void set(int index, Object o) throws AssemblyException
+     {
+       try {
+         Array.set(array, index, o);
+       } catch(IllegalArgumentException iae) {
+         throw new AssemblyException(iae);   
+       }
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#get(int)
+      */
+     public Object get(int index) throws AssemblyException
+     {
+       return Array.get(array, index);
+     }
+ 
+     public Object getResult()
+     {
+         return array;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/IndexContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/IndexContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/IndexContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/IndexContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,130 ----
+ /* gnu.java.beans.decoder.IndexContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ /** IndexContext is Context implementation that senses whether it is an indexed get or set
+  * operation and invokes this operation.
+  *
+  * <p>An IndexContent is a get operation when no argument is provided and a set operation if one
+  * argument is provided.</p>
+  *
+  * @author Robert Schuster
+  */
+ class IndexContext extends AbstractContext
+ {
+   private Object result;
+   private Object argument;
+   private int index;
+   private boolean isSetter;
+ 
+   IndexContext(String id, int newIndex)
+   {
+     setId(id);
+     index = newIndex;
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+    */
+   public void addParameterObject(Object o) throws AssemblyException
+   {
+     if (! isSetter)
+       {
+ 	argument = o;
+ 	isSetter = true;
+       }
+     else
+       throw new AssemblyException(new IllegalStateException("More than one argument for indiced access is not possible."));
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#reportStatement()
+    */
+   public void notifyStatement(Context outerContext) throws AssemblyException
+   {
+     throw new AssemblyException(new IllegalStateException("Statements inside indiced access are not allowed."));
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+    */
+   public Object endContext(Context outerContext) throws AssemblyException
+   {
+     if (isSetter)
+       {
+ 	// setter
+ 	outerContext.set(index, argument);
+ 
+ 	return null;
+       }
+     else
+       // getter
+       return result = outerContext.get(index);
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#subContextFailed()
+    */
+   public boolean subContextFailed()
+   {
+     // returns true to indicate that indiced access assembly fails when one of its
+     // argument could not be assembled
+     return true;
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#set(int, java.lang.Object)
+    */
+   public void set(int index, Object o) throws AssemblyException
+   {
+     throw new AssemblyException(new IllegalStateException("Setter is not allowed inside indiced access."));
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#get(int)
+    */
+   public Object get(int index) throws AssemblyException
+   {
+     throw new AssemblyException(new IllegalStateException("getter is not allowed insided indiced access."));
+   }
+ 
+   public Object getResult()
+   {
+     return result;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/IntHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/IntHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/IntHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/IntHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* gnu.java.beans.decoder.IntHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** Creates a Integer instance from the character data in a &lt;int&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ class IntHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   IntHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String number) throws NumberFormatException
+   {
+     return Integer.valueOf(number);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/JavaHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/JavaHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/JavaHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/JavaHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,93 ----
+ /* gnu.java.beans.decoder.JavaHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ import java.util.HashMap;
+ 
+ import org.xml.sax.Attributes;
+ 
+ /** Wraps a DecoderContext instance.
+  *
+  * @author Robert Schuster
+  */
+ public class JavaHandler extends AbstractElementHandler
+ {
+   private Context context;
+   private HashMap objectMap = new HashMap();
+   private ClassLoader classLoader;
+ 
+   /**
+    * @param PersistenceParser
+    */
+   JavaHandler(DummyHandler parent, Context decoderContext,
+               ClassLoader cl)
+   {
+     super(parent, true);
+ 
+     classLoader = cl;
+ 
+     context = decoderContext;
+ 
+   }
+ 
+   protected Context startElement(Attributes attributes, ExceptionListener exceptionListener)
+     throws AssemblyException
+   {
+     // may expect version and class attribute but it not used in JDK 
+     // so we do either
+     return context;
+   }
+ 
+   public Object getObject(String objectId)
+   {
+     return objectMap.get(objectId);
+   }
+ 
+   public void putObject(String objectId, Object o)
+   {
+     if (objectId != null)
+       objectMap.put(objectId, o);
+   }
+ 
+   public Class instantiateClass(String className)
+     throws ClassNotFoundException
+   {
+     return Class.forName(className, false, classLoader);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/LongHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/LongHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/LongHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/LongHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* gnu.java.beans.decoder.LongHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** Creates a Long instance from the character data in a &lt;long&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ class LongHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   LongHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String number) throws NumberFormatException
+   {
+     return Long.valueOf(number);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/MethodContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/MethodContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/MethodContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/MethodContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,107 ----
+ /* gnu.java.beans.decoder.MethodContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.java.beans.decoder;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ import java.util.ArrayList;
+ 
+ /** MethodContext collects arguments for a method call and creates the result object
+  * using it. The method is called using the result object of the parent Context.
+  *
+  * <p>When the result object is available methods can be called on it using sub-Contexts.</p>
+  *
+  * @author Robert Schuster
+  */
+ class MethodContext extends AbstractCreatableObjectContext
+ {
+     private ArrayList arguments = new ArrayList();
+     private String methodName;
+ 
+     MethodContext(String id, String newMethodName)
+     {
+         setId(id);
+         setStatement(true);
+         methodName = newMethodName;
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+      */
+     public void addParameterObjectImpl(Object o)
+     {
+         arguments.add(o);
+     }
+ 
+     /* (non-Javadoc)
+      * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+      */
+     protected Object createObject(Context outerContext)
+         throws AssemblyException
+     {
+         Object outerObject = outerContext.getResult();
+ 
+         if (outerObject == null)
+             throw new AssemblyException(
+                 new NullPointerException(
+                     "No object to invoke method " + methodName));
+ 
+         Object[] args = arguments.toArray();
+ 
+         try
+         {
+             Method method =
+                 MethodFinder.getMethod(
+                     outerObject.getClass(),
+                     methodName,
+                     args);
+             return method.invoke(outerObject, args);
+         }
+         catch (NoSuchMethodException nsme)
+         {
+             throw new AssemblyException(nsme);
+         }
+         catch (InvocationTargetException ite)
+         {
+             throw new AssemblyException(ite.getCause());
+         }
+         catch (IllegalAccessException iae)
+         {
+             throw new AssemblyException(iae);
+         }
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/MethodFinder.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/MethodFinder.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/MethodFinder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/MethodFinder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,177 ----
+ /* gnu.java.beans.decoder.MethodFinder
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Method;
+ import java.util.HashMap;
+ 
+ class MethodFinder
+ {
+ 	/** Provides a mapping between a wrapper class and its corresponding primitive's type. */
+ 	private static HashMap typeMapping = new HashMap();
+ 
+ 	static {
+ 		typeMapping.put(Byte.class, Byte.TYPE);
+ 		typeMapping.put(Short.class, Short.TYPE);
+ 		typeMapping.put(Integer.class, Integer.TYPE);
+ 		typeMapping.put(Long.class, Long.TYPE);
+ 		typeMapping.put(Float.class, Float.TYPE);
+ 		typeMapping.put(Double.class, Double.TYPE);
+ 
+ 		typeMapping.put(Character.class, Character.TYPE);
+ 		typeMapping.put(Boolean.class, Boolean.TYPE);
+ 	}
+ 
+ 	private MethodFinder()
+ 	{
+ 	}
+ 
+ 	/** Searches a Method which can accept the given arguments.
+ 	 *
+ 	 * @param klass
+ 	 * @param name
+ 	 * @param arguments
+ 	 * @return
+ 	 * @throws NoSuchMethodException
+ 	 */
+ 	static Method getMethod(Class klass, String name, Object[] arguments)
+ 		throws NoSuchMethodException
+ 	{
+ 		// prepares array containing the types of the arguments
+ 		Class[] argumentTypes = getArgumentTypes(arguments);
+ 
+ 		Method[] methods = klass.getMethods();
+ 
+ 		// iterates over all public methods
+ 		for (int i = 0; i < methods.length; i++)
+ 		{
+ 			if (methods[i].getName().equals(name))
+ 			{
+ 				if (matchingArgumentTypes(methods[i].getParameterTypes(),
+ 					argumentTypes))
+ 					return methods[i];
+ 			}
+ 		}
+ 
+ 		throw new NoSuchMethodException(
+ 			"Could not find a matching method named "
+ 				+ name
+ 				+ "() in class "
+ 				+ klass);
+ 	}
+ 
+ 	static Constructor getConstructor(Class klass, Object[] arguments)
+ 		throws NoSuchMethodException
+ 	{
+ 		Class[] argumentTypes = getArgumentTypes(arguments);
+ 		Constructor[] constructors = klass.getConstructors();
+ 
+ 		// iterates over all public methods
+ 		for (int i = 0; i < constructors.length; i++)
+ 		{
+ 			if (matchingArgumentTypes(constructors[i].getParameterTypes(),
+ 				argumentTypes))
+ 				return constructors[i];
+ 		}
+ 
+ 		throw new NoSuchMethodException(
+ 			"Could not find a matching constructor in class " + klass);
+ 	}
+ 
+ 	/** Transforms an array of argument objects into an array of argument types.
+ 	 * For each argument being null the argument is null, too. An argument type
+ 	 * being null means: Accepts everything (although this can be ambigous).
+ 	 * 
+ 	 * @param arguments
+ 	 * @return
+ 	 */
+ 	private static Class[] getArgumentTypes(Object[] arguments)
+ 	{
+ 		if (arguments == null)
+ 			return new Class[0];
+ 
+ 		// prepares array containing the types of the arguments
+ 		Class[] argumentTypes = new Class[arguments.length];
+ 		for (int i = 0; i < arguments.length; i++)
+ 			argumentTypes[i] =
+ 				(arguments[i] == null) ? null : arguments[i].getClass();
+ 		return argumentTypes;
+ 	}
+ 
+ 	/** Tests whether the argument types supplied to the method argument types
+ 	 * are assignable. In addition to the assignment specifications this method
+ 	 * handles the primitive's wrapper classes as if they were of their
+ 	 * primitive type (e.g Boolean.class equals Boolean.TYPE).
+ 	 * When a supplied argument type is null it is assumed that no argument
+ 	 * object was supplied for it and the test for this particular parameter will
+ 	 * pass.
+ 	 *
+ 	 * @param methodArgTypes
+ 	 * @param suppliedArgTypes
+ 	 * @return
+ 	 */
+ 	private static boolean matchingArgumentTypes(
+ 		Class[] methodArgTypes,
+ 		Class[] suppliedArgTypes)
+ 	{
+ 		if (methodArgTypes.length != suppliedArgTypes.length)
+ 			return false;
+ 
+ 		for (int i = 0; i < methodArgTypes.length; i++)
+ 		{
+ 			if (suppliedArgTypes[i] == null)
+ 			{
+ 				// by definition a non-existant argument type (null) can be converted to everything
+ 				continue;
+ 			}
+ 			else if (typeMapping.containsKey(suppliedArgTypes[i]))
+ 			{
+ 				Class primitiveType =
+ 					(Class) typeMapping.get(suppliedArgTypes[i]);
+ 				if (!(methodArgTypes[i].isAssignableFrom(suppliedArgTypes[i])
+ 					|| methodArgTypes[i].isAssignableFrom(primitiveType)))
+ 					return false;
+ 			}
+ 			else if (!methodArgTypes[i].isAssignableFrom(suppliedArgTypes[i]))
+ 				return false;
+ 		}
+ 
+ 		return true;
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/NullHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/NullHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/NullHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/NullHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* gnu.java.beans.decoder.NullHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ 
+ /** Just provides the 'null' object.
+  *
+  * @author Robert Schuster
+  */
+ class NullHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   NullHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String characters) throws AssemblyException
+   {
+     if (! characters.equals(""))
+       throw new AssemblyException(new IllegalArgumentException("No characters inside <void> tag allowed."));
+ 
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ObjectContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ObjectContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ObjectContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ObjectContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* gnu.java.beans.decoder.ObjectHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ /** ObjectContext is a {@link Context} implementation that wraps a simple Object instance.
+  * The instance can be provided when the Context is created (due to an 'idref'
+  * attribute) or later (eg. &lt;int&gt; tag)
+  *
+  * <p>The ObjectContext does not accept any parameter object and ignores notifications
+  * about sub-contexts being statements.</p>
+  *
+  * @author Robert Schuster
+  */
+ final class ObjectContext extends AbstractObjectContext
+ {
+   ObjectContext(Object newObject)
+   {
+     setObject(newObject);
+   }
+ 
+   ObjectContext(String id, Object newObject)
+   {
+     setId(id);
+     setObject(newObject);
+   }
+ 
+   ObjectContext()
+   {
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+    */
+   public void addParameterObject(Object o) throws AssemblyException
+   {
+     throw new AssemblyException(new IllegalArgumentException("Adding objects to an ObjectContext is not allowed."));
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#reportStatement()
+    */
+   public void notifyStatement(Context outerContext) throws AssemblyException
+   {
+     // can ignore that
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+    */
+   public Object endContext(Context outerContext) throws AssemblyException
+   {
+     // just returns the object which is encapsuled (may be null)
+     return getResult();
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#subContextFailed()
+    */
+   public boolean subContextFailed()
+   {
+     // this context will not fail when a subcontext fails because the result is
+     // already available when the context is created.
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ObjectHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ObjectHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ObjectHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ObjectHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,169 ----
+ /* gnu.java.beans.decoder.ObjectHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ 
+ import org.xml.sax.Attributes;
+ 
+ /** An ObjectHandler parses the &lt;object&gt; tag and thereby creates various
+  * Context implementations.
+  *
+  * @author Robert Schuster
+  *
+  */
+ public class ObjectHandler extends AbstractElementHandler
+ {
+   /**
+    * XXX: Can all results be stored with an object id?
+    *
+    *
+    * @param PersistenceParser
+    */
+   ObjectHandler(ElementHandler parent)
+   {
+     super(parent, true);
+   }
+ 
+   protected Context startElement(Attributes attributes, ExceptionListener exceptionListener)
+     throws AssemblyException
+   {
+     String className = attributes.getValue("class");
+     String methodName = attributes.getValue("method");
+     String fieldName = attributes.getValue("field");
+     String index = attributes.getValue("index");
+     String propertyName = attributes.getValue("property");
+     String id = attributes.getValue("id");
+     String idRef = attributes.getValue("idref");
+ 
+     /* first check if we just want to access an existing object (idref present)
+      *
+      * note: <object idref="foo" method="bar"/> is not valid to call method "bar"
+      * on the object with id "foo". Instead this should return the object "foo"
+      * itself. The right way to this is:
+      * <object idref="foo">
+      *         <object method="bar"/>
+      * </object>
+      *
+      * This means that if idref is present class, method, field, index and
+      * property are obsolete.
+      */
+     if (idRef != null)
+       // reactivates an existing object and giving it another name if id exists
+       return new ObjectContext(id, getObject(idRef));
+ 
+     // decides whether we are in a static (className present) or dynamic context
+     if (className != null)
+       {
+ 	try
+ 	  {
+ 	    Class klass = instantiateClass(className);
+ 
+ 	    // class name exists which means that we are in a static context.
+ 	    // so we may want to ...
+ 	    // access a static field if the fieldName exists
+ 	    if (fieldName != null)
+ 	      {
+ 		try
+ 		  {
+ 		    return new ObjectContext(id,
+ 		                             klass.getField(fieldName).get(null));
+ 		  }
+ 		catch (NoSuchFieldException nsfe)
+ 		  {
+ 		    throw new AssemblyException(nsfe);
+ 		  }
+ 		catch (IllegalAccessException iae)
+ 		  {
+ 		    throw new AssemblyException(iae);
+ 		  }
+ 	      }
+ 
+ 	    // (falling through is important!)
+ 	    // run a constructor if methodName is "new" or null
+ 	    if (methodName == null || methodName.equals("new"))
+ 	      return new ConstructorContext(id, klass);
+ 
+ 	    // (falling through is important!)
+ 	    // run a static method on the given class (if methodName exists, which is implied already) 
+ 	    return new StaticMethodContext(id, klass, methodName);
+ 	    // XXX: should fail if unexpected attributes are present?
+ 	  }
+ 	catch (ClassNotFoundException cnfe)
+ 	  {
+ 	    throw new AssemblyException(cnfe);
+ 	  }
+       }
+     else
+       {
+ 	// className does not exist which means we are in the context of
+ 	// some object and want to ...
+ 	// access the get(int index) method if index != null
+ 	if (index != null)
+ 	  {
+ 	    try
+ 	      {
+ 		// Note: http://java.sun.com/products/jfc/tsc/articles/persistence3/ says
+ 		// that <void index="4"/> will make up a get()-call. But this is wrong because
+ 		// <void/> tags never return values (to the surrounding context)
+ 		return new IndexContext(id, Integer.parseInt(index));
+ 	      }
+ 	    catch (NumberFormatException nfe)
+ 	      {
+ 		throw new AssemblyException(nfe);
+ 	      }
+ 	  }
+ 
+ 	// access a method if methodName exists
+ 	if (methodName != null)
+ 	  return new MethodContext(id, methodName);
+ 
+ 	// (falling through is important!)
+ 	// access a property if a propertyName exists
+ 	if (propertyName != null && propertyName.length() > 0)
+ 	  // this is reported as an ordinary method access where the propertyName is
+ 	  // converted into a 'getter'-method name: convert first character of property name
+ 	  // to upper case and prepend 'get'
+ 	  // Note: This will be a getter-method because the <object> tag implies that a return
+ 	  // value is expected.
+ 	  return new PropertyContext(id, propertyName);
+       }
+ 
+     throw new AssemblyException(new IllegalArgumentException("Wrong or missing attributes for <object> tag."));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/PersistenceParser.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/PersistenceParser.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/PersistenceParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/PersistenceParser.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,485 ----
+ /* gnu.java.beans.PersistenceParser
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ import java.beans.XMLDecoder;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ 
+ import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.parsers.SAXParser;
+ import javax.xml.parsers.SAXParserFactory;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.helpers.DefaultHandler;
+ 
+ /** The PersistenceParser parses an XML data stream and delegates actions to ElementHandler
+  * instances. The parser catches and recovers from all exception which reside from wrong usage
+  * of attributes and tags.
+  *
+  * @author Robert Schuster
+  */
+ public class PersistenceParser extends DefaultHandler implements Context
+ {
+ 	/** The ExceptionListener instance which is informed of non-critical parsing exceptions.
+ 	 */
+ 	private ExceptionListener exceptionListener;
+ 
+ 	/** When an element was not usable all elements inside it should be skipped.
+ 	 * This is done by skipping startElement() and endElement() invocations whenever
+ 	 * this value is above 0.
+ 	 */
+ 	private int skipElement;
+ 
+ 	/** Stores the Creator instances which can instantiate the appropriate handler implementation
+ 	 * for a given element.
+ 	 */
+ 	private HashMap handlerCreators = new HashMap();
+ 
+ 	/** Denotes the current ElementHandler. To avoid checking for null-values it is pre-assigned
+ 	 * with a DummyHandler instance which must not be used but acts as a root element.
+ 	 */
+ 	private ElementHandler currentHandler;
+ 
+ 	/** The real root element that stores all objects created during parsing.
+ 	 * Package-private to avoid an accessor method.
+ 	 */
+ 	JavaHandler javaHandler;
+ 
+ 	/** Stores the decoded objects. */
+ 	private List objects = new LinkedList();
+ 
+ 	/** The XMLDecoder instance that started this PersistenceParser */
+ 	private XMLDecoder decoder;
+ 
+ 	/** Creates a PersistenceParser which reads XML data from the given InputStream, reports
+ 	 * exceptions to ExceptionListener instance, stores resulting object in the DecoderContext
+ 	 * and uses the given ClassLoader to resolve classes.
+ 	 *
+ 	 * @param inputStream
+ 	 * @param exceptionListener
+ 	 * @param decoderContext
+ 	 * @param cl
+ 	 */
+ 	public PersistenceParser(
+ 		InputStream inputStream,
+ 		ExceptionListener exceptionListener,
+ 		ClassLoader cl,
+ 		XMLDecoder decoder)
+ 	{
+ 
+ 		this.exceptionListener = exceptionListener;
+ 		this.decoder = decoder;
+ 
+ 		DummyHandler dummyHandler = new DummyHandler();
+ 		currentHandler = dummyHandler;
+ 		javaHandler = new JavaHandler(dummyHandler, this, cl);
+ 
+ 		SAXParserFactory factory = SAXParserFactory.newInstance();
+ 
+ 		SAXParser parser;
+ 		try
+ 		{
+ 			parser = factory.newSAXParser();
+ 		}
+ 		catch (ParserConfigurationException pce)
+ 		{
+ 			// should not happen when a parser is available because we did
+ 			// not request any requirements on the XML parser
+ 			throw (InternalError) new InternalError(
+ 				"No SAX Parser available.").initCause(
+ 				pce);
+ 		}
+ 		catch (SAXException saxe)
+ 		{
+ 			// should not happen when a parser is available because we did
+ 			// not request any requirements on the XML parser
+ 			throw (InternalError) new InternalError(
+ 				"No SAX Parser available.").initCause(
+ 				saxe);
+ 		}
+ 
+ 		// prepares a map of Creator instances which can instantiate a handler which is
+ 		// appropriate for the tag that is used as a key for the Creator
+ 		handlerCreators.put("java", new JavaHandlerCreator());
+ 
+ 		// calls methods (properties), constructors, access fields
+ 		handlerCreators.put("object", new ObjectHandlerCreator());
+ 		handlerCreators.put("void", new VoidHandlerCreator());
+ 
+ 		handlerCreators.put("array", new ArrayHandlerCreator());
+ 
+ 		// these handler directly create an Object (or null)
+ 		handlerCreators.put("class", new ClassHandlerCreator());
+ 		handlerCreators.put("null", new NullHandlerCreator());
+ 
+ 		handlerCreators.put("char", new CharHandlerCreator());
+ 		handlerCreators.put("string", new StringHandlerCreator());
+ 		handlerCreators.put("boolean", new BooleanHandlerCreator());
+ 		handlerCreators.put("byte", new ByteHandlerCreator());
+ 		handlerCreators.put("short", new ShortHandlerCreator());
+ 		handlerCreators.put("int", new IntHandlerCreator());
+ 		handlerCreators.put("long", new LongHandlerCreator());
+ 		handlerCreators.put("float", new FloatHandlerCreator());
+ 		handlerCreators.put("double", new DoubleHandlerCreator());
+ 
+ 		// parses the data and sends all exceptions to the ExceptionListener
+ 		try
+ 		{
+ 			parser.parse(inputStream, this);
+ 		}
+ 		catch (SAXException saxe)
+ 		{
+ 			exceptionListener.exceptionThrown(
+ 				new IllegalArgumentException("XML data not well-formed."));
+ 		}
+ 		catch (IOException ioe)
+ 		{
+ 			exceptionListener.exceptionThrown(ioe);
+ 		}
+ 	}
+ 
+ 	public void startElement(
+ 		String uri,
+ 		String localName,
+ 		String qName,
+ 		Attributes attributes)
+ 		throws SAXException
+ 	{
+ 		/* The element is skipped if
+ 		 * a) the current handler has already failed or a previous error occured
+ 		 * which makes all children obsolete
+ 		 */
+ 		if (currentHandler.hasFailed() || skipElement > 0)
+ 		{
+ 			exceptionListener.exceptionThrown(
+ 				new IllegalArgumentException(
+ 					"Element unusable due to previous error: " + qName));
+ 
+ 			skipElement++;
+ 
+ 			return;
+ 		}
+ 
+ 		/* b) Subelements are not allowed within the current ElementHandler.
+ 		 */
+ 		if (!currentHandler.isSubelementAllowed(qName))
+ 		{
+ 			exceptionListener.exceptionThrown(
+ 				new IllegalArgumentException(
+ 					"Element is not allowed here: " + qName));
+ 
+ 			skipElement++;
+ 
+ 			return;
+ 		}
+ 
+ 		/* c) The tag name is not a key in the map of Creator instances. This means that
+ 		* either the XML data is of a newer version or simply contains a miss-spelled element.
+ 		*/
+ 		if (!handlerCreators.containsKey(qName))
+ 		{
+ 			exceptionListener.exceptionThrown(
+ 				new IllegalArgumentException(
+ 					"Element unusable because tag is unknown: " + qName));
+ 
+ 			skipElement++;
+ 
+ 			return;
+ 		}
+ 
+ 		// creates a new handler for the new element
+ 		AbstractElementHandler handler =
+ 			((Creator) handlerCreators.get(qName)).createHandler(
+ 				currentHandler);
+ 
+ 		// makes it the current handler to receive character data
+ 		currentHandler = handler;
+ 
+ 		// starts the handler
+ 		currentHandler.start(attributes, exceptionListener);
+ 	}
+ 
+ 	public void endElement(String uri, String localName, String qName)
+ 		throws SAXException
+ 	{
+ 		// skips processing the current handler if we are parsing an element
+ 		// which was marked invalid (in startElement() ) 
+ 		if (skipElement > 0)
+ 		{
+ 			skipElement--;
+ 			return;
+ 		}
+ 
+ 		// invokes the handler's finishing method
+ 		currentHandler.end(exceptionListener);
+ 
+ 		// removes the current handler and reactivates its parent
+ 		currentHandler = currentHandler.getParent();
+ 	}
+ 
+ 	/** Transfers character data to the current handler
+ 	 */
+ 	public void characters(char[] ch, int start, int length)
+ 		throws SAXException
+ 	{
+ 		// prevents sending character data of invalid elements
+ 		if (skipElement > 0)
+ 			return;
+ 
+ 		currentHandler.characters(ch, start, length);
+ 	}
+ 
+ 	/** Creator interface provided a mechanism to instantiate ElementHandler instances
+ 	 * for the appropriate tag.
+ 	 *
+ 	 * @author Robert Schuster
+ 	 */
+ 	interface Creator
+ 	{
+ 		/** Creates an ElementHandler instance using the given ElementHandler as its parent.
+ 		 *
+ 		 * @param parent The parent ElementHandler of the result.
+ 		 * @return A new ElementHandler instance.
+ 		 */
+ 		AbstractElementHandler createHandler(ElementHandler parent);
+ 	}
+ 
+ 	class BooleanHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new BooleanHandler(parent);
+ 		}
+ 	}
+ 
+ 	class ByteHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new ByteHandler(parent);
+ 		}
+ 	}
+ 
+ 	class ShortHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new ShortHandler(parent);
+ 		}
+ 	}
+ 
+ 	class IntHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new IntHandler(parent);
+ 		}
+ 	}
+ 
+ 	class LongHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new LongHandler(parent);
+ 		}
+ 	}
+ 
+ 	class FloatHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new FloatHandler(parent);
+ 		}
+ 	}
+ 
+ 	class DoubleHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new DoubleHandler(parent);
+ 		}
+ 	}
+ 
+ 	class CharHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new CharHandler(parent);
+ 		}
+ 	}
+ 
+ 	class StringHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new StringHandler(parent);
+ 		}
+ 	}
+ 
+ 	class JavaHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return javaHandler;
+ 		}
+ 	}
+ 
+ 	class ObjectHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new ObjectHandler(parent);
+ 		}
+ 	}
+ 
+ 	class VoidHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new VoidHandler(parent);
+ 		}
+ 	}
+ 
+ 	class ClassHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new ClassHandler(parent);
+ 		}
+ 	}
+ 
+ 	class NullHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new NullHandler(parent);
+ 		}
+ 	}
+ 
+ 	class ArrayHandlerCreator implements Creator
+ 	{
+ 		public AbstractElementHandler createHandler(ElementHandler parent)
+ 		{
+ 			return new ArrayHandler(parent);
+ 		}
+ 	}
+ 
+ 	/** Adds a decoded object to the Context. */
+ 	public void addParameterObject(Object o) throws AssemblyException
+ 	{
+ 		objects.add(o);
+ 	}
+ 
+ 	public void notifyStatement(Context outerContext) throws AssemblyException
+ 	{
+ 		// can be ignored because theis Context does not react to statement and expressions
+ 		// differently
+ 	}
+ 
+ 	public Object endContext(Context outerContext) throws AssemblyException
+ 	{
+ 		return null;
+ 	}
+ 
+ 	public boolean subContextFailed()
+ 	{
+ 		// failing of subcontexts is no problem for the mother of all contexts
+ 		return false;
+ 	}
+ 
+ 	public void set(int index, Object o) throws AssemblyException
+ 	{
+ 		// not supported
+ 		throw new AssemblyException(
+ 			new IllegalArgumentException("Set method is not allowed in decoder context."));
+ 	}
+ 
+ 	public Object get(int index) throws AssemblyException
+ 	{
+ 		// not supported
+ 		throw new AssemblyException(
+ 			new IllegalArgumentException("Get method is not allowed in decoder context."));
+ 	}
+ 
+ 	public Object getResult()
+ 	{
+ 		// returns the XMLDecoder instance which is requested by child contexts this way.
+ 		// That is needed to invoke methods on the decoder.
+ 		return decoder;
+ 	}
+ 
+ 	public void setId(String id)
+ 	{
+ 		exceptionListener.exceptionThrown(new IllegalArgumentException("id attribute is not allowed for <java> tag."));
+ 	}
+ 
+ 	public String getId()
+ 	{
+ 		// appears to have no id
+ 		return null;
+ 	}
+ 
+ 	public boolean isStatement()
+ 	{
+ 		// this context is a statement by definition because it never returns anything to a parent because
+ 		// there is no such parent (DummyContext does not count!)
+ 		return true;
+ 	}
+ 
+ 	public void setStatement(boolean b)
+ 	{
+ 		// ignores that because this Context is always a statement
+ 	}
+ 
+ 	/** Returns an Iterator instance which returns the decoded objects.
+ 	 * 
+ 	 * This method is used by the XMLDecoder directly. 
+ 	 */ 
+ 	public Iterator iterator()
+ 	{
+ 		return objects.iterator();
+ 	}
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/PropertyContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/PropertyContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/PropertyContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/PropertyContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /* gnu.java.beans.decoder.PropertyContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ 
+ /** PropertyContext is a Context implementation that is very similar to MethodContext
+  * and IndexContext. The sole purpose of PropertyContext to find out whether it should
+  * 'set' or 'get' a certain property. This decision is made using the number of
+  * arguments.
+  * <p>When the method call has to be made and there is no argument we 'get' the property.
+  * With one argument it is 'set'.</p>
+  *
+  * @author Robert Schuster
+  */
+ class PropertyContext extends AbstractObjectContext
+ {
+   private Object argument;
+   private String propertyName;
+   private String prefix = "get";
+   private boolean methodCalled;
+ 
+   PropertyContext(String id, String newPropertyName)
+   {
+     setId(id);
+     propertyName = newPropertyName;
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+    */
+   public void addParameterObject(Object o) throws AssemblyException
+   {
+     if (methodCalled)
+       throw new AssemblyException(new IllegalArgumentException("Cannot add parameter object when method was already called."));
+ 
+     if (argument != null)
+       throw new AssemblyException(new IllegalArgumentException("Property attribut allows zero or one argument only."));
+ 
+     argument = o;
+ 	setStatement(true);
+     prefix = "set";
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+    */
+   public void notifyStatement(Context outerContext) throws AssemblyException
+   {
+     if (methodCalled)
+       return;
+     methodCalled = true;
+ 
+     Object outerObject = outerContext.getResult();
+ 
+     if (outerObject == null)
+       throw new AssemblyException(new NullPointerException("No object to access property "
+ 	  + propertyName));
+     
+ 
+     // converts property name into a method name
+     String methodName = prefix + propertyName.substring(0, 1).toUpperCase()
+                         + propertyName.substring(1);
+ 
+     // prepares the argument
+     Object[] args = (argument != null) ? new Object[] { argument } : null;
+ 
+     try
+       {
+ 	Method method = MethodFinder.getMethod(outerObject.getClass(),
+ 	                                       methodName, args);
+ 
+ 	// stores the result whether it is available or not
+ 	setObject(method.invoke(outerObject, args));
+       }
+     catch (NoSuchMethodException nsme)
+       {
+ 	throw new AssemblyException(nsme);
+       }
+     catch (InvocationTargetException ite)
+       {
+ 	throw new AssemblyException(ite.getCause());
+       }
+     catch (IllegalAccessException iae)
+       {
+ 	throw new AssemblyException(iae);
+       }
+   }
+ 
+   public Object endContext(Context outerContext) throws AssemblyException
+   {
+     notifyStatement(outerContext);
+ 
+     return getResult();
+   }
+ 
+   public boolean subContextFailed()
+   {
+     return ! methodCalled;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ShortHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ShortHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/ShortHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/ShortHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* gnu.java.beans.decoder.ShortHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ /** Creates a Short instance from the character data in a &lt;short&gt; tag.
+  *
+  * @author Robert Schuster
+  */
+ class ShortHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   ShortHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String number) throws NumberFormatException
+   {
+     return Short.valueOf(number);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/SimpleHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/SimpleHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/SimpleHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/SimpleHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /* gnu.java.beans.decoder.SimpleHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ 
+ import org.xml.sax.Attributes;
+ 
+ /** XML element handler that is specialized on tags that contains a simple string in their
+  * body which has to be parsed in a specific way.
+  * <p>All of these tags have in common that they do not accept attributes. A warning is
+  * send to the parser's ExceptionListener when one or more attributes exist.</p>
+  *
+  * @author Robert Schuster
+  */
+ abstract class SimpleHandler extends AbstractElementHandler
+ {
+   private ObjectContext context;
+ 
+   /**
+    * @param PersistenceParser
+    */
+   SimpleHandler(ElementHandler parent)
+   {
+     super(parent, false);
+ 
+     // SimpleHandler do not accept any subelements
+   }
+ 
+   protected final Context startElement(Attributes attributes, ExceptionListener exceptionListener)
+     throws AssemblyException
+   {
+   	
+     // note: simple elements should not have any attributes. We inform
+     // the user of this syntactical but uncritical problem by sending
+     // an IllegalArgumentException for each unneccessary attribute
+     int size = attributes.getLength();
+     for (int i = 0; i < size; i++) {
+             String attributeName = attributes.getQName(i);
+             Exception e =
+                     new IllegalArgumentException(
+                             "Unneccessary attribute '"
+                                     + attributeName
+                                     + "' discarded.");
+             exceptionListener.exceptionThrown(e);
+     }
+     
+     return context = new ObjectContext();
+   }
+ 
+   public void endElement(String characters)
+     throws AssemblyException, AssemblyException
+   {
+     // reports the number when the character data can be parsed
+     try
+       {
+ 	context.setObject(parse(characters));
+       }
+     catch (NumberFormatException nfe)
+       {
+ 	throw new AssemblyException(nfe);
+       }
+   }
+ 
+   /** Returns an object that is created from the given characters. If the string is
+    * converted into a number a NumberFormatException is cathed and reported
+    * appropriately.
+    *
+    * @param characters A string of characters that has to be processed in some way.
+    * @return An Object instance generated from the given data.
+    * @throws AssemblerException When the string was invalid.
+    * @throws NumberFormatException When the string could not be parsed into a number.
+    */
+   protected abstract Object parse(String characters)
+     throws AssemblyException, NumberFormatException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/StaticMethodContext.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/StaticMethodContext.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/StaticMethodContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/StaticMethodContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,95 ----
+ /* gnu.java.beans.decoder.StaticMethodContext
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ import java.util.ArrayList;
+ 
+ /**
+  * @author Robert Schuster
+  */
+ class StaticMethodContext extends AbstractCreatableObjectContext
+ {
+   private ArrayList arguments = new ArrayList();
+   private Class klass;
+   private String methodName;
+ 
+   StaticMethodContext(String id, Class newClass, String newMethodName)
+   {
+     setId(id);
+     klass = newClass;
+     methodName = newMethodName;
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+    */
+   public void addParameterObjectImpl(Object o)
+   {
+     arguments.add(o);
+   }
+ 
+   /* (non-Javadoc)
+    * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+    */
+   protected Object createObject(Context outerContext)
+     throws AssemblyException
+   {
+     Object[] args = arguments.toArray();
+ 
+     try
+       {
+ 	Method method = MethodFinder.getMethod(klass, methodName, args);
+ 	return method.invoke(null, args);
+       }
+     catch (NoSuchMethodException nsme)
+       {
+ 	throw new AssemblyException(nsme);
+       }
+     catch (InvocationTargetException ite)
+       {
+ 	// rethrows the reason for the InvocationTargetsException (ie. the exception in the called code)
+ 	throw new AssemblyException(ite.getCause());
+       }
+     catch (IllegalAccessException iae)
+       {
+ 	throw new AssemblyException(iae);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/StringHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/StringHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/StringHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/StringHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* gnu.java.beans.decoder.StringHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ class StringHandler extends SimpleHandler
+ {
+   /**
+    * @param PersistenceParser
+    */
+   StringHandler(ElementHandler parent)
+   {
+     super(parent);
+   }
+ 
+   protected Object parse(String characters)
+   {
+     return characters;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/VoidHandler.java gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/VoidHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/VoidHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/VoidHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* gnu.java.beans.decoder.VoidHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.beans.decoder;
+ 
+ import java.beans.ExceptionListener;
+ 
+ import org.xml.sax.Attributes;
+ 
+ public class VoidHandler extends AbstractElementHandler
+ {
+     /**
+      * @param PersistenceParser
+      */
+     VoidHandler(ElementHandler parent)
+     {
+         super(parent, true);
+     }
+ 
+     protected Context startElement(
+         Attributes attributes,
+         ExceptionListener exceptionListener)
+         throws AssemblyException
+     {
+         Context ctx = startElementImpl(attributes);
+         ctx.setStatement(true);
+ 
+         return ctx;
+     }
+ 
+     private Context startElementImpl(Attributes attributes)
+         throws AssemblyException
+     {
+         String id = attributes.getValue("id");
+         String className = attributes.getValue("class");
+         String methodName = attributes.getValue("method");
+         String propertyName = attributes.getValue("property");
+         String index = attributes.getValue("index");
+ 
+         if (className != null)
+         {
+             try
+             {
+                 Class klass = instantiateClass(className);
+ 
+                 // class name exists which means that we are in a static context.
+                 // so we may want to ...
+                 // run a constructor if methodName is "new" or null
+                 if (methodName == null || methodName.equals("new"))
+                     // if the id is null the result cannot be by the decoder accessed but the
+                     // constructor may have side effects (e.g. registering itself in a global registry)
+                     return new ConstructorContext(id, klass);
+ 
+                 // (falling through is important!)
+                 // run a static method on the given class (if methodName exists, which is implied already) 
+                 return new StaticMethodContext(id, klass, methodName);
+             }
+             catch (ClassNotFoundException cnfe)
+             {
+                 throw new AssemblyException(cnfe);
+             }
+         }
+         else
+         {
+             // className does not exist which means we are in the context of
+             // some object and want to ...
+             // access an element by index
+             if (index != null)
+             {
+                 // note: whether this resolves into get(i) or set(i, o) depends on the
+                 // number of arguments and is decided by the ObjectAssembler
+                 try
+                 {
+                     return new IndexContext(id, Integer.parseInt(index));
+                 }
+                 catch (NumberFormatException nfe)
+                 {
+                     throw new AssemblyException(nfe);
+                 }
+             }
+ 
+             // access a method if methodName exists
+             if (methodName != null)
+                 return new MethodContext(id, methodName);
+ 
+             // (falling through is important!)
+             // access a property if a propertyName exists
+             if (propertyName != null && propertyName.length() > 0)
+                 // this is reported as an ordinary method invocation where the propertyName is
+                 // converted into a 'setter'-method name: convert first character of property name
+                 // to upper case and prepend 'set'
+                 // Note: This will be a setter-method because the <void> tag implies that no return
+                 // value is expected (but a side effect)
+                 return new PropertyContext(id, propertyName);
+         }
+ 
+         // if code reaches this point the tag has wrong attributes. The following test
+         // does not make it better but can provide are more specific error message for
+         // a common mistake: <void> tags are not allowed to have an idref attribute
+         throw new AssemblyException(
+             new IllegalArgumentException(
+                 (attributes.getValue("idref") == null)
+                     ? "Missing attributes for <void> tag"
+                     : "<void> does not support 'idref' attribute."));
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/package.html gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/decoder/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/decoder/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.beans.decoder package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.beans.decoder</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/ColorEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/ColorEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/ColorEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/ColorEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* gnu.java.beans.editors.ColorEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.awt.Color;
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** NativeByteEditor is a property editor for the
+  ** byte type.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class ColorEditor extends PropertyEditorSupport {
+ 	Color[] stdColors = {Color.black,Color.blue,Color.cyan,
+ 	                     Color.darkGray,Color.gray,Color.green,
+ 	                     Color.lightGray,Color.magenta,Color.orange,
+ 	                     Color.pink,Color.red,Color.white,
+ 	                     Color.yellow};
+ 	String[] stdColorNames = {"black","blue","cyan",
+ 	                          "dark gray","gray","green",
+ 	                          "light gray","magenta","orange",
+ 	                          "pink","red","white",
+ 	                          "yellow"};
+ 
+ 	/** setAsText for Color checks for standard color names
+ 	 ** and then checks for a #RRGGBB value or just RRGGBB,
+ 	 ** both in hex.
+ 	 **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		if(val.length() == 0) {
+ 			throw new IllegalArgumentException("Tried to set empty value!");
+ 		}
+ 		for(int i=0;i<stdColorNames.length;i++) {
+ 			if(stdColorNames[i].equalsIgnoreCase(val)) {
+ 				setValue(stdColors[i]);
+ 				return;
+ 			}
+ 		}
+ 		if(val.charAt(0) == '#') {
+ 			setValue(new Color(Integer.parseInt(val.substring(1),16)));
+ 		} else {
+ 			setValue(new Color(Integer.parseInt(val,16)));
+ 		}
+ 	}
+ 
+ 	/** getAsText for Color turns the color into either one of the standard
+ 	 ** colors or into an RGB hex value with # prepended. **/
+ 	public String getAsText() {
+ 		for(int i=0;i<stdColors.length;i++) {
+ 			if(stdColors[i].equals(getValue())) {
+ 				return stdColorNames[i];
+ 			}
+ 		}
+ 		return "#" + Integer.toHexString(((Color)getValue()).getRGB() & 0x00FFFFFF);
+ 	}
+ 
+ 	/** getTags for Color returns a list of standard colors. **/
+ 	public String[] getTags() {
+ 		return stdColorNames;
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/FontEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/FontEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/FontEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/FontEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* gnu.java.beans.editors.FontEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.awt.Font;
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** FontEditor is a property editor for java.awt.Font.
+  **
+  ** <STRONG>To Do:</STRONG> Add custom font chooser
+  ** component.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class FontEditor extends PropertyEditorSupport {
+ 	/** setAsText for Font calls Font.decode(). **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		setValue(Font.decode(val));
+ 	}
+ 
+ 	/** getAsText for Font returns a value in the format
+ 	 ** expected by Font.decode().
+ 	 **/
+ 	public String getAsText() {
+ 		Font f = (Font)getValue();
+ 		if(f.isBold()) {
+ 			if(f.isItalic()) {
+ 				return f.getName()+"-bolditalic-"+f.getSize();
+ 			} else {
+ 				return f.getName()+"-bold-"+f.getSize();
+ 			}
+ 		} else if(f.isItalic()) {
+ 			return f.getName()+"-italic-"+f.getSize();
+ 		} else {
+ 			return f.getName()+"-"+f.getSize();
+ 		}
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeBooleanEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeBooleanEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeBooleanEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeBooleanEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* gnu.java.beans.editors.NativeBooleanEditor
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** NativeBooleanEditor is a property editor for the
+  ** boolean type.<P>
+  **
+  ** <STRONG>To Do:</STRONG> add support for a checkbox
+  ** as the custom editor.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class NativeBooleanEditor extends PropertyEditorSupport {
+ 	String[] tags = {"true","false"};
+ 
+ 	/**
+ 	 * setAsText for boolean checks for true or false or t or f.
+ 	 * "" also means false.
+ 	 **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		if(val.equalsIgnoreCase("true") || val.equalsIgnoreCase("t")) {
+ 			setValue(Boolean.TRUE);
+ 		} else if(val.equalsIgnoreCase("false") || val.equalsIgnoreCase("f") || val.equals("")) {
+ 			setValue(Boolean.FALSE);
+ 		} else {
+ 			throw new IllegalArgumentException("Value must be true, false, t, f or empty.");
+ 		}
+ 	}
+ 
+ 
+ 	/** getAsText for boolean calls Boolean.toString(). **/
+ 	public String getAsText() {
+ 		return getValue().toString();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeByteEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeByteEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeByteEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeByteEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* gnu.java.beans.editors.NativeByteEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** NativeByteEditor is a property editor for the
+  ** byte type.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class NativeByteEditor extends PropertyEditorSupport {
+ 	/** setAsText for byte calls Byte.valueOf(). **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		setValue(Byte.valueOf(val));
+ 	}
+ 
+ 	/** getAsText for byte calls Byte.toString(). **/
+ 	public String getAsText() {
+ 		return getValue().toString();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeDoubleEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeDoubleEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeDoubleEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeDoubleEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* gnu.java.beans.editors.NativeDoubleEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** NativeDoubleEditor is a property editor for the
+  ** double type.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class NativeDoubleEditor extends PropertyEditorSupport {
+ 	/** setAsText for double calls Double.valueOf(). **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		setValue(Double.valueOf(val));
+ 	}
+ 
+ 	/** getAsText for double calls Double.toString(). **/
+ 	public String getAsText() {
+ 		return getValue().toString();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeFloatEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeFloatEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeFloatEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeFloatEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* gnu.java.beans.editors.NativeFloatEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** NativeFloatEditor is a property editor for the
+  ** float type.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class NativeFloatEditor extends PropertyEditorSupport {
+ 	/** setAsText for float calls Float.valueOf(). **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		setValue(Float.valueOf(val));
+ 	}
+ 
+ 	/** getAsText for float calls Float.toString(). **/
+ 	public String getAsText() {
+ 		return getValue().toString();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeIntEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeIntEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeIntEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeIntEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* gnu.java.beans.editors.NativeIntEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** NativeIntEditor is a property editor for the
+  ** int type.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class NativeIntEditor extends PropertyEditorSupport {
+ 	/** setAsText for int calls Integer.valueOf(). **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		setValue(Integer.valueOf(val));
+ 	}
+ 
+ 	/** getAsText for int calls Integer.toString(). **/
+ 	public String getAsText() {
+ 		return getValue().toString();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeLongEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeLongEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeLongEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeLongEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* gnu.java.beans.editors.NativeLongEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** NativeLongEditor is a property editor for the
+  ** long type.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class NativeLongEditor extends PropertyEditorSupport {
+ 	/** setAsText for long calls Long.valueOf(). **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		setValue(Long.valueOf(val));
+ 	}
+ 
+ 	/** getAsText for long calls Long.toString(). **/
+ 	public String getAsText() {
+ 		return getValue().toString();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeShortEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeShortEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/NativeShortEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/NativeShortEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* gnu.java.beans.editors.NativeShortEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** NativeShortEditor is a property editor for the
+  ** short type.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class NativeShortEditor extends PropertyEditorSupport {
+ 	/** setAsText for short calls Short.valueOf(). **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		setValue(Short.valueOf(val));
+ 	}
+ 
+ 	/** getAsText for short calls Short.toString(). **/
+ 	public String getAsText() {
+ 		return getValue().toString();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/StringEditor.java gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/StringEditor.java
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/StringEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/StringEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* gnu.java.beans.editors.StringEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.beans.editors;
+ 
+ import java.beans.PropertyEditorSupport;
+ 
+ /**
+  ** NativeByteEditor is a property editor for the
+  ** byte type.
+  **
+  ** @author John Keiser
+  ** @version 1.1.0, 29 Jul 1998
+  **/
+ 
+ public class StringEditor extends PropertyEditorSupport {
+ 	/** setAsText just sets the value. **/
+ 	public void setAsText(String val) throws IllegalArgumentException {
+ 		setValue(val);
+ 	}
+ 
+ 	/** getAsText just returns the value. **/
+ 	public String getAsText() {
+ 		return (String)getValue();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/TODO gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/TODO
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/TODO	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/TODO	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,4 ----
+ - write tests for all editors
+ - add some sort of ColorChooser as a custom editor for ColorEditor
+ - add a FileNameEditor
+ - add a FontChooser as a custom editor for FontEditor
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/package.html gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/editors/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/editors/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.beans.editors package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.beans.editors</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/beans/package.html gcc-4.1.0/libjava/classpath/gnu/java/beans/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/beans/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/beans/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.beans package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.beans</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/io/ASN1ParsingException.java gcc-4.1.0/libjava/classpath/gnu/java/io/ASN1ParsingException.java
*** gcc-4.0.2/libjava/classpath/gnu/java/io/ASN1ParsingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/io/ASN1ParsingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /* ASN1ParsingException.java -- ASN.1 parsing exception.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.io;
+ 
+ /**
+  * Signals a malformed ASN.1 sequence.
+  */
+ public class ASN1ParsingException extends java.io.IOException
+ {
+ 
+ 	public ASN1ParsingException()
+ 	{
+ 		super();
+ 	}
+ 
+ 	public ASN1ParsingException(String msg)
+ 	{
+ 		super(msg);
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/io/Base64InputStream.java gcc-4.1.0/libjava/classpath/gnu/java/io/Base64InputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/io/Base64InputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/io/Base64InputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,216 ----
+ /* Base64InputStream.java -- base-64 input stream.
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.io;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * A filter input stream that decodes data encoded in the Base-64
+  * encoding scheme.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class Base64InputStream extends FilterInputStream
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** Base-64 digits. */
+   private static final String BASE_64 = 
+     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ 
+   /** Base-64 padding character. */
+   private static final char BASE_64_PAD = '=';
+ 
+   /** Decoding state. */
+   private int state;
+ 
+   /** Intermediate decoded value. */
+   private int temp;
+ 
+   /** EOF flag. */
+   private boolean eof;
+ 
+   private final byte[] one = new byte[1];
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new Base-64 input stream. The input bytes must be the
+    * ASCII characters A-Z, a-z, 0-9, + and /, with optional whitespace,
+    * and will be decoded into a byte stream.
+    *
+    * @param in The source of Base-64 input.
+    */
+   public Base64InputStream(InputStream in)
+   {
+     super(in);
+     state = 0;
+     temp = 0;
+     eof = false;
+   }
+ 
+   // Class method.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Decode a single Base-64 string to a byte array.
+    *
+    * @param base64 The Base-64 encoded data.
+    * @return The decoded bytes.
+    * @throws IOException If the given data do not compose a valid Base-64
+    *  sequence.
+    */
+   public static byte[] decode(String base64) throws IOException
+   {
+     Base64InputStream in =
+       new Base64InputStream(new ByteArrayInputStream(base64.getBytes()));
+     ByteArrayOutputStream out =
+       new ByteArrayOutputStream((int) (base64.length() / 0.666));
+     byte[] buf = new byte[1024];
+     int len;
+     while ((len = in.read(buf)) != -1)
+       out.write(buf, 0, len);
+     return out.toByteArray();
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   public int available()
+   {
+     return 0;
+   }
+ 
+   public int read() throws IOException
+   {
+     if (read(one) == 1)
+       return one[0];
+     return -1;
+   }
+ 
+   public int read(byte[] buf, int off, int len) throws IOException
+   {
+     if (eof)
+       return -1;
+     int count = 0;
+     while (count < len)
+       {
+         int i;
+         while (Character.isWhitespace((char) (i = in.read())));
+         int pos = BASE_64.indexOf((char) i);
+         if (pos >= 0)
+           {
+             switch (state)
+               {
+                 case 0:
+                   temp = pos << 2;
+                   state = 1;
+                   break;
+                 case 1:
+                   buf[count++] = (byte) (temp | (pos >>> 4));
+                   temp = (pos & 0x0F) << 4;
+                   state = 2;
+                   break;
+                 case 2:
+                   buf[count++] = (byte) (temp | (pos >>> 2));
+                   temp = (pos & 0x03) << 6;
+                   state = 3;
+                   break;
+                 case 3:
+                   buf[count++] = (byte) (temp | pos);
+                   state = 0;
+                   break;
+               }
+           }
+         else if (i == BASE_64_PAD)
+           {
+             switch (state)
+               {
+                 case 0:
+                 case 1:
+                   throw new IOException("malformed Base-64 input");
+                 case 2:
+                   while (Character.isWhitespace((char) (i = in.read())));
+                   if (i != BASE_64_PAD)
+                     throw new IOException("malformed Base-64 input");
+                 case 3:
+                   while (Character.isWhitespace((char) (i = in.read())));
+               }
+             eof = true;
+             break;
+           }
+         else  // First non-Base-64 character, consider it end-of-stream.
+           {
+             if (state != 0)
+               throw new IOException("malformed Base-64 input");
+             eof = true;
+             break;
+           }
+       }
+       return count;
+   }
+ 
+   public boolean markSupported()
+   {
+     return false;
+   }
+ 
+   public void mark(int markLimit) { }
+ 
+   public void reset() throws IOException
+   {
+     throw new IOException("reset not supported");
+   }
+ 
+   public long skip(long n) throws IOException
+   {
+     long skipped;
+     for (skipped = 0; skipped < n; skipped++)
+       if (read() == -1)
+         break;
+     return skipped;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/io/ClassLoaderObjectInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/io/ClassLoaderObjectInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/io/ClassLoaderObjectInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/io/ClassLoaderObjectInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* gnu.java.io.ClassLoaderObjectInputStream
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.io;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.ObjectInputStream;
+ import java.io.StreamCorruptedException;
+ 
+ /**
+  * ClassLoaderObjectInputStream is ObjectInputStream, with
+  * the ability to use a specific ClassLoader.
+  *
+  * @author Geoff Berry
+  * @version 1.1.0, 29 Jul 1998
+  */
+ 
+ public class ClassLoaderObjectInputStream extends ObjectInputStream {
+ 	ClassLoader myClassLoader;
+ 
+ 	/** Create the new ClassLoaderObjectInputStream.
+ 	 * @param in the InputStream to read the Objects from.
+ 	 * @param myClassLoader the ClassLoader to load classes
+ 	 *        with.
+ 	 */
+ 	public ClassLoaderObjectInputStream(InputStream in, ClassLoader myClassLoader) throws IOException,StreamCorruptedException {
+ 		super(in);
+ 		this.myClassLoader = myClassLoader;
+ 	}
+ 
+ 	/** Overriden method to use the loadClass() method from
+ 	 * the ClassLoader.
+ 	 */
+ 	public Class resolveClass(String name) throws IOException, ClassNotFoundException {
+ 		return myClassLoader.loadClass(name);
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/io/NullOutputStream.java gcc-4.1.0/libjava/classpath/gnu/java/io/NullOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/io/NullOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/io/NullOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /* NullOutputStream.java -- OutputStream that does absolutely nothing
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.io;
+ 
+ import java.io.OutputStream;
+ 
+ /**
+    This is a placeholder OutputStream that does absolutley nothing
+    when written to.  It is intended to be used in the same manner as
+    /dev/null.  None of this class's methods do anything at all.
+ */
+ public class NullOutputStream extends OutputStream
+ {
+   public NullOutputStream() {}
+   public void write( int b ) {}
+   public void write( byte b[] ) {}
+   public void write( byte b[], int off, int len ) {}
+   public void flush() {}
+   public void close() {}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/io/ObjectIdentityWrapper.java gcc-4.1.0/libjava/classpath/gnu/java/io/ObjectIdentityWrapper.java
*** gcc-4.0.2/libjava/classpath/gnu/java/io/ObjectIdentityWrapper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/io/ObjectIdentityWrapper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* ObjectIdentityWrapper.java -- Wrapper class used to override equals()
+     and hashCode() to be as discriminating as possible
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.io;
+ 
+ /**
+    This class is a thin wrapper around <code>Object</code> that makes
+    the methods <code>hashCode()</code> and <code>equals(Object)</code>
+    as discriminating as possible.
+ */
+ public class ObjectIdentityWrapper
+ {
+ 
+   /**
+      Constructs a <code>ObjectIdentityWrapper</code> that is wrapped
+      around o.
+   */
+   public ObjectIdentityWrapper( Object o )
+   {
+     object = o;
+   }
+ 
+   /**
+      Uses <code>System.identityHashCode(Object)</code> to compute a
+      hash code for the object wrapped by this
+      <code>ObjectIdentityWrapper</code>.
+ 
+      @see java.lang.System#identityHashCode(java.lang.Object)
+      @see java.util.Hashtable
+      @see java.lang.Object#hashCode()
+   */
+   public int hashCode()
+   {
+     return System.identityHashCode( object );
+   }
+ 
+   /**
+      Uses the <code>==</code> operator to test for equality between
+      the object wrapped by this <code>ObjectIdentityWrapper</code> and
+      the object wrapped by the <code>ObjectIdentityWrapper</code> o.
+      Returns false if o is not a <code>ObjectIdentityWrapper</code>.
+ 
+      @see java.util.Hashtable
+      @see java.lang.Object#equals()
+   */
+   public boolean equals( Object o )
+   {
+     if( o instanceof ObjectIdentityWrapper )
+       return object == ((ObjectIdentityWrapper)o).object;
+     else
+       return false;
+   }
+ 
+   public String toString()
+   {
+     return "ObjectIdentityWrapper< " + object + ", " + hashCode() + " >";
+   }
+ 
+   /**
+      The <code>Object</code> wrapped by this
+      <code>ObjectIdentityWrapper</code>.
+   */
+   public Object object;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/io/PlatformHelper.java gcc-4.1.0/libjava/classpath/gnu/java/io/PlatformHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/java/io/PlatformHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/io/PlatformHelper.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,223 ----
+ /* PlatformHelper.java -- Isolate OS-specific IO helper methods and variables
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.io;
+ 
+ import java.util.StringTokenizer;
+ 
+ /**
+  * We had many changes in File.java, URLStreamHandler.java etc. to handle
+  * path representations on different platforms (Windows/Unix-family).
+  * Finally we'd like to collect all these ad hoc codes into this utility class.
+  *       --Gansha
+  */
+ public class PlatformHelper
+ {
+   public static final boolean isWindows = System.getProperty("os.name").indexOf("Windows") >= 0;
+   public static final String separator = System.getProperty("file.separator");
+   public static final char separatorChar = separator.charAt(0);
+   public static final String pathSeparator = System.getProperty("path.separator");
+   public static final char pathSeparatorChar = pathSeparator.charAt(0);
+ 
+   /**
+    * On most platforms 260 is equal or greater than a max path value, 
+    * so we can set the initial buffer size of StringBuffer to half of this value
+    * to improve performance.
+    */
+   public static final int INITIAL_MAX_PATH = 260/2;
+ 
+   /**
+    * This routine checks the input param "path" whether it begins with root path
+    * prefix.
+    * if not, return 0;
+    * if yes, return the len of root path prefix;
+    *   --for Unix-family platform, root path begins with "/" and len is 1
+    *   --for Windows platform, root path begins with "drive:\\" and len is 3
+    */
+   public static final int beginWithRootPathPrefix(String path)
+   {
+     if (path.startsWith("/") || path.startsWith("\\"))
+       return 1;
+ 
+     if (!isWindows)
+       return 0;
+ 
+     if (path.length() > 2
+         && Character.isLetter(path.charAt(0))
+         && path.charAt(1) == ':'
+         && (path.charAt(2) == '/' || path.charAt(2) == '\\'))
+       return 3;
+ 
+     return 0;
+   }
+ 
+   /**
+    * This routine checks the input param "path" whether it's root directory.
+    *  --for Unix-family platform, root directory is "/"
+    *  --for Windows platform, root directory is "\\" or "drive:\\".
+    */
+   public static final boolean isRootDirectory(String path)
+   {
+     int len = path.length();
+     return len > 0 && beginWithRootPathPrefix(path) == len;
+   }
+ 
+   /**
+    * This routine canonicalizes input param "path" to formal path representation
+    *  for current platform, including interpreting ".." and "." .
+    */
+   public static final String toCanonicalForm(String path)
+   {
+     /*??
+     if(path.indexOf('.') < 0 && path.indexOf("..") < 0)
+         return path; 
+     */
+     String tmppath = path.replace('/', separatorChar);
+     StringBuffer canonpath;
+ 
+     int i;
+ 
+     if ((i = beginWithRootPathPrefix(tmppath)) == 0 )
+       return path;
+     
+     /* The original 
+            "canonpath = new StringBuffer(tmppath.substring(0, i))"
+        isn't very efficient because StringBuffer's 
+        ensureCapacity_unsynchronized will fail definitely each time 
+        and will enlarge buffer and copy contents.       .
+     */
+     canonpath = new StringBuffer(INITIAL_MAX_PATH);
+     canonpath.append(tmppath.substring(0, i));
+     tmppath = tmppath.substring(i);
+     // pathdepth==0 indicates there're only root path in the buffer
+     int pathdepth = 0;
+     
+     StringTokenizer st = new StringTokenizer(tmppath, separator);
+     
+     // Traverse each element of the path, handling "." and ".."
+     // Should handle "~" too?
+     if (st.hasMoreTokens())
+       do
+         {
+           String s = st.nextToken();
+         
+           // Handle "." or an empty element.  
+           if (s.equals(".") || s.equals(""))
+             continue;
+         
+           // Handle ".." by deleting the last element from the path
+           if (s.equals(".."))
+             {
+               if (pathdepth == 0)
+                 continue;
+ 
+               // Strip of trailing separator
+               canonpath.setLength(canonpath.length() - 1/*separator.length()*/);
+               String tmpstr = canonpath.toString();
+               int idx = tmpstr.lastIndexOf(separator); 
+ 
+               if ((idx == -1) || ((idx + 1/*separator.length()*/) > tmpstr.length()))
+                 //throw new IOException("Can't happen error"); 
+                 return path; // Shouldn't happen 
+         
+               canonpath.setLength(idx + 1/*separator.length()*/);
+               pathdepth--;
+               continue;
+             }
+         
+           canonpath.append(s);
+           pathdepth++; //now it's more than root path
+ 
+           if (st.hasMoreTokens())
+             canonpath.append(separator);
+         }
+       while (st.hasMoreTokens());
+     
+     if (endWithSeparator(path))
+       canonpath.append(separator);
+         
+     String tmpstr = canonpath.toString();
+     //if (pathdepth > 0 && endWithSeparator(tmpstr) )
+     //    tmpstr = tmpstr.substring(0, tmpstr.length() - 1/*separator.length()*/);
+     
+     return tmpstr;
+   }
+ 
+   /**
+    * This routine canonicalizes input param "path" to formal path representation
+    *  for current platform, and normalize all separators to "sepchar".
+    */
+   public static final String toCanonicalForm(String path, char sepchar)
+   {
+     String tmpstr = toCanonicalForm(path);
+     tmpstr = tmpstr.replace(separatorChar, sepchar);
+     return tmpstr;
+   }
+ 
+   /**
+    * This routine checks whether input param "path" ends with separator
+    */
+   public static final boolean endWithSeparator(String path)
+   {
+     if (path.endsWith("\\") || path.endsWith("/"))
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * This routine removes from input param "path" the tail separator if it exists, 
+    * and return the remain part.
+    */
+   public static final String removeTailSeparator(String path)
+   {
+     if (endWithSeparator(path) && !isRootDirectory(path))
+       return path.substring(0, path.length() - 1);
+ 
+     return path;
+   }
+ 
+   /**
+    * This routine returns last index of separator in input param "path", 
+    * and return it.
+    */
+   public static final int lastIndexOfSeparator(String path)
+   {
+     return Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\"));
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/io/class-dependencies.conf gcc-4.1.0/libjava/classpath/gnu/java/io/class-dependencies.conf
*** gcc-4.0.2/libjava/classpath/gnu/java/io/class-dependencies.conf	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/io/class-dependencies.conf	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ # This property file contains dependencies of classes, methods, and
+ # field on other methods or classes.
+ #
+ # Syntax: 
+ #
+ #   <used>: <needed 1> [... <needed N>]
+ #
+ # means that when <used> is included, <needed 1> (... <needed N>) must
+ # be included as well.
+ #
+ # <needed X> and <used> are of the form
+ #
+ #   <class.methodOrField(signature)>
+ #
+ # or just
+ #
+ #   <class>
+ #
+ # Within dependencies, variables can be used. A variable is defined as 
+ # follows: 
+ #
+ #   {variable}: value1 value2 ... value<n>
+ #
+ # variables can be used on the right side of dependencies as follows: 
+ #
+ #    <used>: com.bla.blu.{variable}.Class.m()V
+ #
+ # The use of the variable will expand to <n> dependencies of the form
+ #
+ #    <used>: com.bla.blu.value1.Class.m()V
+ #    <used>: com.bla.blu.value2.Class.m()V
+ #    ...
+ #    <used>: com.bla.blu.value<n>.Class.m()V
+ #
+ # Variables can be redefined when building a system to select the 
+ # required support for features like encodings, protocols, etc. 
+ #
+ # Hints:
+ #
+ #  - For methods and fields, the signature is mandatory. For
+ #    specification, please see the Java Virtual Machine Specification by
+ #    SUN. Unlike in the spec, field signatures (types) are in brackets.
+ #
+ #  - Package names must be separated by '/' (and not '.'). E.g.,
+ #    java/lang/Class (this is necessary, because the '.' is used to
+ #    separate method or field names from classes)
+ #
+ #  - In case <needed> refers to a class, only the class itself will be
+ #    included in the resulting binary, NOT necessarily all its methods
+ #    and fields. If you want to refer to all methods and fields, you can
+ #    write class.* as an abbreviation.
+ #
+ # -  Abbreviations for packages are also possible: my/package/* means all
+ #    methods and fields of all classes in my/package.
+ #
+ # -  A line with a trailing '\' continues in the next line.
+ 
+ 
+ # All encodings supported are loaded via gnu/java/io/EncodingManager.findEncoderConstructor
+ # or gnu/java/io/EncodingManager.findDecoderConstructor from class
+ # gnu/java/io/decode/Decoder<encoding>.
+ #
+ # This introduces a dependency for all encodings. To allow an easy selection
+ # and addition of encodings, the library variable {encodings} can be set to 
+ # the set of supported encodings.
+ #
+ {encodings}: 8859_1 8859_2 8859_3 8859_4 8859_5 UTF8
+ 
+ gnu/java/io/EncodingManager.findEncoderConstructor(Ljava/lang/String;Z)Ljava/lang/reflect/Constructor;: \
+ 	gnu/java/io/decode/Decoder{encodings}.* 
+ 
+ gnu/java/io/EncodingManager.findDecoderConstructor(Ljava/lang/String;Z)Ljava/lang/reflect/Constructor;:	\
+ 	gnu/java/io/encode/Encoder{encodings}.* \
+ 
+ # end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/io/package.html gcc-4.1.0/libjava/classpath/gnu/java/io/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/io/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/io/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.io package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.io</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/lang/ArrayHelper.java gcc-4.1.0/libjava/classpath/gnu/java/lang/ArrayHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/java/lang/ArrayHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/lang/ArrayHelper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* ArrayHelper.java -- Helper methods for handling array operations
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.lang;
+ 
+ /**
+  * ArrayHelper helps you do things with arrays.
+  *
+  * @author John Keiser
+  */
+ public class ArrayHelper
+ {
+   /**
+    * Counterpart to java.util.Collection.contains.
+    *
+    * @param array the array to search
+    * @param searchFor the object to locate
+    * @return true if some array element <code>equals(searchFor)</code>
+    */
+   public static boolean contains(Object[] array, Object searchFor)
+   {
+     return indexOf(array, searchFor) != -1;
+   }
+ 
+   /**
+    * Counterpart to java.util.Collection.indexOf.
+    *
+    * @param array the array to search
+    * @param searchFor the object to locate
+    * @return the index of the first equal object, or -1
+    */
+   public static int indexOf(Object[] array, Object searchFor)
+   {
+     for (int i = 0; i < array.length; i++)
+       {
+         if(array[i].equals(searchFor))
+           {
+             return i;
+           }
+       }
+     return -1;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/lang/CharData.java gcc-4.1.0/libjava/classpath/gnu/java/lang/CharData.java
*** gcc-4.0.2/libjava/classpath/gnu/java/lang/CharData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/lang/CharData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1001 ----
+ /* gnu/java/lang/CharData -- Database for java.lang.Character Unicode info
+    Copyright (C) 2002 Free Software Foundation, Inc.
+    *** This file is generated by scripts/unicode-muncher.pl ***
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.lang;
+ 
+ /**
+  * This contains the info about the unicode characters, that
+  * java.lang.Character needs.  It is generated automatically from
+  * <code>doc/unicode/UnicodeData-3.0.0.txt</code> and
+  * <code>doc/unicode/SpecialCasing-2.txt</code>, by some
+  * perl scripts. These Unicode definition file can be found on the
+  * <a href="http://www.unicode.org">http://www.unicode.org</a> website.
+  * JDK 1.4 uses Unicode version 3.0.0.
+  *
+  * The data is stored as string constants, but Character will convert these
+  * Strings to their respective <code>char[]</code> components.  The field
+  * <code>BLOCKS</code> stores the offset of a block of 2<sup>SHIFT</sup>
+  * characters within <code>DATA</code>.  The DATA field, in turn, stores
+  * information about each character in the low order bits, and an offset
+  * into the attribute tables <code>UPPER</code>, <code>LOWER</code>,
+  * <code>NUM_VALUE</code>, and <code>DIRECTION</code>.  Notice that the
+  * attribute tables are much smaller than 0xffff entries; as many characters
+  * in Unicode share common attributes.  The DIRECTION table also contains
+  * a field for detecting characters with multi-character uppercase expansions.
+  * Next, there is a listing for <code>TITLE</code> exceptions (most characters
+  * just have the same title case as upper case).  Finally, there are two
+  * tables for multi-character capitalization, <code>UPPER_SPECIAL</code>
+  * which lists the characters which are special cased, and
+  * <code>UPPER_EXPAND</code>, which lists their expansion.
+  *
+  * @author scripts/unicode-muncher.pl (written by Jochen Hoenicke,
+  *         Eric Blake)
+  * @see Character
+  * @see String
+  */
+ public interface CharData
+ {
+   /**
+    * The Unicode definition file that was parsed to build this database.
+    */
+   String SOURCE = "doc/unicode/UnicodeData-3.0.0.txt";
+ 
+   /**
+    * The character shift amount to look up the block offset. In other words,
+    * <code>(char) (BLOCKS.value[ch >> SHIFT] + ch)</code> is the index where
+    * <code>ch</code> is described in <code>DATA</code>.
+    */
+   int SHIFT = 5;
+ 
+   /**
+    * The mapping of character blocks to their location in <code>DATA</code>.
+    * Each entry has been adjusted so that the 16-bit sum with the desired
+    * character gives the actual index into <code>DATA</code>.
+    */
+   String BLOCKS
+     = "\u01c2\u01c2\u01c1\u012c\u012b\u01a0\u01f8\u02dc\u025f\u02ee\u0215"
+     + "\u0346\u02dc\u0326\u02bc\u0216\u015f\u02d4\u0376\u0376\u0376\u0369"
+     + "\ufe8f\u0344\uff85\uff65\ufdb5\ufda1\033\u02c4\034G\ufea8"
+     + "\uff8c\u0235\ufeff\032\ufebf&\ufb20\ufe28\u0113\u0104\ufb61"
+     + "\ufb5a\u010b\u0109\u00fe\uff08\u0229\u025e\u01c7\u01fc\u01dc\ufc46"
+     + "\u0229\ufe27\ufb55\u0169\ufbc8\u00fc\u0103\ufb68\ufb48\ufb28\ufb08"
+     + "\ufae8\ufac8\ufaa8\ufa88\ufa68\ufa48eP\u00ab\u0139\ufe0e"
+     + "c\u0155\u01a8\uf669\u0129\u0128\uf91f\ufe56\u0108\u0107\ufac0"
+     + "\ufc8e\ufead\u00c6\ufca7\ufb95\uf47d\u009f\ufb17\ufe20\ufd28\ufb2f"
+     + ";\uf3b9\ufe57\ufcce\uffbb\uf339\ufa98\uff8b\uff3b\ufa54\uf7e3"
+     + "\uff2b\ufad7\ufb69\ufc3a\ufee5\uf4c8\ufcb0\ufa88\ufdbf\uf448\ufe45"
+     + "\ufcc7\ufe4f\uf7f1\uf715\uf2e8\ufd9f\uf348\uf96a\ufc02\ufd97\uf2c8"
+     + "\uf2a8\uf4b9\uf4b3\uef6b\uf86a\uf84a\ufc58\uf80a\uf7ea\ufc0f\uf7aa"
+     + "\uee9c\ufb90\uf74a\uf7fa\uf70a\uf7ca\uf792\uf471\uf4d2\uf732\uf64a"
+     + "\uf401\uf64d\uefa8\uf5ca\uf5aa\ueca1\uf569\uf54a\uf52a\uf50a\uf4ea"
+     + "\uf4ca\uf4aa\uf48a\uf46a\uf44a\uf42a\uf40a\uf3ea\uf3ca\uf3aa\uf38a"
+     + "\uf36a\uf34a\uf32a\uf289\uf777\uf2ca\uf2aa\uf737\uec28\uec08\uebe8"
+     + "\uebc8\uf1ea\uf4a2\uf545\uedc6\uf2d7\uf14a\ue8ed\ue81e\uf0ea\uf597"
+     + "\uea68\uea48\uea28\uea08\ue9e8\ue9c8\ue9a8\ue988\ue968\ue948\ue928"
+     + "\ue908\ue8e8\ue8c8\ue8a8\ue888\ue868\ue848\ue828\ue808\ue7e8\ue7c8"
+     + "\ue7a8\ue788\ue768\ue748\ue728\ue708\ue6e8\ue6c8\ue6a8\ue688\ue668"
+     + "\ue648\ue628\ue608\ue5e8\ue5c8\ue5a8\ue588\ue568\ue548\ue55f\ue53f"
+     + "\ue51f\ue4ff\uefd7\ue4bf\ue49f\ue485\uef87\uef57\uef57\uef57\uef57"
+     + "\uef47\ue1ad\uef46\uef46\uef46\ue1e0\ue3dd\uef06\ue9d9\uebeb\ue244"
+     + "\ueed4\uef65\ue1f5\uef45\ueee9\uef7c\uee74\uef70\uef7d\uef78\uee91"
+     + "\uefd3\uee7d\uee25\uee27\uef65\uefdd\uee96\uefd3\uefe1\uef69\udf88"
+     + "\udf68\udf48\ued2b\ued3d\ued19\uef1c\uef08\ued47\ued3d\ued33\uec2b"
+     + "\uec0b\uebeb\uebcb\uebce\uea7c\ueb69\ueb6c\ue9b6\ueb0b\ueaeb\ue9e9"
+     + "\udca8\udc88\udc68\udc48\ue910\uea23\ueb58\ueb4f\ueb45\ueae5\udb68"
+     + "\udb48\ue92b\ue90b\ue8eb\ue8cb\ue8ab\ue88b\ue86b\ue84b\uda28\uda08"
+     + "\ud9e8\ud9c8\ud9a8\ud988\ud968\ud948\ud928\ud908\ud8e8\ud8c8\ud8a8"
+     + "\ud888\ud868\ud848\ud828\ud808\ud7e8\ud7c8\ud7a8\ud788\ud768\ud748"
+     + "\ud728\ud708\ud6e8\ud6c8\ud6a8\ud688\ud668\ud648\ud628\ud608\ud5e8"
+     + "\ud5c8\ud5a8\ud588\ud568\ud548\ud528\ud508\ud4e8\ud4c8\ue2b1\ue28b"
+     + "\ue26b\ue270\ue22b\ue20b\ue1eb\ue1cb\ue1ab\ue18b\ue18e\udd8f\ue3a8"
+     + "\udfd3\ud929\ud90a\ue348\ud8c9\ud8aa\udcd7\udcb2\ud681\ud82a\ud80a"
+     + "\ue268\ucede\ud168\ud148\ue116\ue0e9\ue1cb\ue0b7\ue0b7\ue15e\udf17"
+     + "\ue034\ue013\udff3\udfd3\ude6c\udf93\udf73\udf55\udf34\ud56a\ud54a"
+     + "\ud52a\ud50a\ud4ea\ud4ca\ud4aa\ud48a\ud46a\ud44a\ud42a\ud40a\ud3ea"
+     + "\ud3ca\ud3aa\ud38a\ud36a\ud34a\ud32a\ud30a\ud2ea\ud2ca\ud2aa\ud28a"
+     + "\ud26a\ud24a\ud22a\ud20a\ud1ea\ud1ca\ud1aa\ud18a\ud16a\ud14a\ud12a"
+     + "\ud10a\ud0ea\ud0ca\ud0aa\ud08a\ud06a\ud04a\ud02a\ud00a\ucfea\ucfca"
+     + "\ucfaa\ucf8a\ucf6a\ucf4a\ucf2a\ucf0a\uceea\uceca\uceaa\uce8a\uce6a"
+     + "\uce4a\uce2a\uce0a\ucdea\ucdca\ucdaa\ucd8a\ucd6a\ucd4a\ucd2a\ucd0a"
+     + "\uccea\uccca\uccaa\ucc8a\ucc6a\ucc4a\ucc2a\ucc0a\ucbea\ucbca\ucbaa"
+     + "\ucb8a\ucb6a\ucb4a\ucb2a\ucb0a\ucaea\ucaca\ucaaa\uca8a\uca6a\uca4a"
+     + "\uca2a\uca0a\uc9ea\uc9ca\uc9aa\uc98a\uc96a\uc94a\uc92a\uc90a\uc8ea"
+     + "\uc8ca\uc8aa\uc88a\uc86a\uc84a\uc82a\uc80a\uc7ea\uc7ca\uc7aa\uc78a"
+     + "\uc76a\uc74a\uc72a\uc70a\uc6ea\uc6ca\uc6aa\uc68a\uc66a\uc64a\uc62a"
+     + "\uc60a\uc5ea\uc5ca\uc5aa\uc58a\uc56a\uc54a\uc52a\uc50a\uc4ea\uc4ca"
+     + "\uc4aa\uc48a\uc46a\uc44a\uc42a\uc40a\uc3ea\uc3ca\uc3aa\uc38a\uc36a"
+     + "\uc34a\uc32a\uc30a\uc2ea\uc2ca\uc2aa\uc28a\uc26a\uc24a\uc22a\uc20a"
+     + "\uc1ea\uc1ca\uc1aa\uc18a\uc16a\uc14a\uc12a\uc10a\uc0ea\uc0ca\uc0aa"
+     + "\uc08a\uc06a\uc04a\uc02a\uc00a\ubfea\ubfca\ubfaa\ubf8a\ubf6a\ubf4a"
+     + "\ubf2a\ubf0a\ubeea\ubeca\ubeaa\ube8a\ube6a\ube4a\ube2a\ube0a\ubdea"
+     + "\ubdca\ubdaa\ubd8a\ubd6a\ubd4a\ubd2a\ubd0a\ubcea\ubcca\ubcaa\ubc8a"
+     + "\ubc6a\ubc4a\ubc2a\ubc0a\ubbea\ub2e0\ub568\ub548\ubb6a\ubb4a\ubb2a"
+     + "\ubb0a\ubaea\ubaca\ubaaa\uba8a\uba6a\uba4a\uba2a\uba0a\ub9ea\ub9ca"
+     + "\ub9aa\ub98a\ub96a\ub94a\ub92a\ub90a\ub8ea\ub8ca\ub8aa\ub88a\ub86a"
+     + "\ub84a\ub82a\ub80a\ub7ea\ub7ca\ub7aa\ub78a\ub76a\ub74a\ub72a\ub70a"
+     + "\ub6ea\ub6ca\ub6aa\ub68a\ub66a\ub64a\ub62a\ub60a\ub5ea\ub5ca\ub5aa"
+     + "\ub58a\ub56a\ub54a\ub52a\ub50a\ub4ea\ub4ca\ub4aa\ub48a\ub46a\ub44a"
+     + "\ub42a\ub40a\ub3ea\ub3ca\ub3aa\ub38a\ub36a\ub34a\ub32a\ub30a\ub2ea"
+     + "\ub2ca\ub2aa\ub28a\ub26a\ub24a\ub22a\ub20a\ub1ea\ub1ca\ub1aa\ub18a"
+     + "\ub16a\ub14a\ub12a\ub10a\ub0ea\ub0ca\ub0aa\ub08a\ub06a\ub04a\ub02a"
+     + "\ub00a\uafea\uafca\uafaa\uaf8a\uaf6a\uaf4a\uaf2a\uaf0a\uaeea\uaeca"
+     + "\uaeaa\uae8a\uae6a\uae4a\uae2a\uae0a\uadea\uadca\uadaa\uad8a\uad6a"
+     + "\uad4a\uad2a\uad0a\uacea\uacca\uacaa\uac8a\uac6a\uac4a\uac2a\uac0a"
+     + "\uabea\uabca\uabaa\uab8a\uab6a\uab4a\uab2a\uab0a\uaaea\uaaca\uaaaa"
+     + "\uaa8a\uaa6a\uaa4a\uaa2a\uaa0a\ua9ea\ua9ca\ua9aa\ua98a\ua96a\ua94a"
+     + "\ua92a\ua90a\ua8ea\ua8ca\ua8aa\ua88a\ua86a\ua84a\ua82a\ua80a\ua7ea"
+     + "\ua7ca\ua7aa\ua78a\ua76a\ua74a\ua72a\ua70a\ua6ea\ua6ca\ua6aa\ua68a"
+     + "\ua66a\ua64a\ua62a\ua60a\ua5ea\ua5ca\ua5aa\ua58a\ua56a\ua54a\ua52a"
+     + "\ua50a\ua4ea\ua4ca\ua4aa\ua48a\ua46a\ua44a\ua42a\ua40a\ua3ea\ua3ca"
+     + "\ua3aa\ua38a\ua36a\ua34a\ua32a\ua30a\ua2ea\ua2ca\ua2aa\ua28a\ua26a"
+     + "\ua24a\ua22a\ua20a\ua1ea\ua1ca\ua1aa\ua18a\ua16a\ua14a\ua12a\ua10a"
+     + "\ua0ea\ua0ca\ua0aa\ua08a\ua06a\ua04a\ua02a\ua00a\u9fea\u9fca\u9faa"
+     + "\u9f8a\u9f6a\u9f4a\u9f2a\u9f0a\u9eea\u9eca\u9eaa\u9e8a\u9e6a\u9e4a"
+     + "\u9e2a\u9e0a\u9dea\u9dca\u9daa\u9d8a\u9d6a\u9d4a\u9d2a\u9d0a\u9cea"
+     + "\u9cca\u9caa\u9c8a\u9c6a\u9c4a\u9c2a\u9c0a\u9bea\u9bca\u9baa\u9b8a"
+     + "\u9b6a\u9b4a\u9b2a\u9b0a\u9aea\u9aca\u9aaa\u9a8a\u9a6a\u9a4a\u9a2a"
+     + "\u9a0a\u99ea\u99ca\u99aa\u998a\u996a\u994a\u992a\u990a\u98ea\u98ca"
+     + "\u98aa\u988a\u986a\u984a\u982a\u980a\u97ea\u97ca\u97aa\u978a\u976a"
+     + "\u974a\u972a\u970a\u96ea\u96ca\u96aa\u968a\u966a\u964a\u962a\u960a"
+     + "\u95ea\u95ca\u95aa\u958a\u956a\u954a\u952a\u950a\u94ea\u94ca\u94aa"
+     + "\u948a\u946a\u944a\u942a\u940a\u93ea\u93ca\u93aa\u938a\u936a\u934a"
+     + "\u932a\u930a\u92ea\u92ca\u92aa\u928a\u926a\u924a\u922a\u920a\u91ea"
+     + "\u91ca\u91aa\u918a\u916a\u914a\u912a\u910a\u90ea\u90ca\u90aa\u908a"
+     + "\u906a\u904a\u902a\u900a\u8fea\u8fca\u8faa\u8f8a\u8f6a\u8f4a\u8f2a"
+     + "\u8f0a\u8eea\u8eca\u8eaa\u8e8a\u8e6a\u8e4a\u8e2a\u8e0a\u8dea\u8dca"
+     + "\u8daa\u8d8a\u8d6a\u8d4a\u8d2a\u8d0a\u8cea\u8cca\u8caa\u8c8a\u8c6a"
+     + "\u8c4a\u8c2a\u8c0a\u8bea\u8bca\u8baa\u8b8a\u8b6a\u8b4a\u8b2a\u8b0a"
+     + "\u8aea\u8aca\u8aaa\u8a8a\u8a6a\u8a4a\u8a2a\u8a0a\u89ea\u89ca\u89aa"
+     + "\u898a\u896a\u894a\u892a\u890a\u88ea\u88ca\u88aa\u888a\u886a\u884a"
+     + "\u882a\u880a\u87ea\u87ca\u87aa\u878a\u876a\u874a\u872a\u870a\u86ea"
+     + "\u86ca\u86aa\u868a\u866a\u864a\u862a\u860a\u85ea\u85ca\u85aa\u858a"
+     + "\u856a\u854a\u852a\u850a\u84ea\u84ca\u84aa\u848a\u846a\u844a\u842a"
+     + "\u840a\u83ea\u83ca\u83aa\u838a\u836a\u834a\u832a\u830a\u82ea\u82ca"
+     + "\u82aa\u828a\u826a\u824a\u822a\u820a\u81ea\u81ca\u81aa\u818a\u816a"
+     + "\u814a\u812a\u810a\u80ea\u80ca\u80aa\u808a\u806a\u804a\u802a\u800a"
+     + "\u7fea\u7fca\u7faa\u7f8a\u7f6a\u7f4a\u7f2a\u7f0a\u7eea\u7eca\u7eaa"
+     + "\u7e8a\u7e6a\u7e4a\u7e2a\u7e0a\u7dea\u7dca\u7daa\u7d8a\u7d6a\u7d4a"
+     + "\u7d2a\u7d0a\u7cea\u7cca\u7caa\u7c8a\u7c6a\u7c4a\u7c2a\u7c0a\u7bea"
+     + "\u7bca\u7baa\u7b8a\u7b6a\u7b4a\u7b2a\u7b0a\u7aea\u7aca\u7aaa\u7a8a"
+     + "\u7a6a\u7a4a\u7a2a\u7a0a\u79ea\u79ca\u79aa\u798a\u796a\u794a\u792a"
+     + "\u790a\u78ea\u78ca\u78aa\u788a\u786a\u784a\u782a\u780a\u77ea\u77ca"
+     + "\u77aa\u778a\u776a\u774a\u772a\u770a\u76ea\u76ca\u76aa\u768a\u766a"
+     + "\u764a\u762a\u760a\u75ea\u75ca\u75aa\u758a\u756a\u754a\u752a\u750a"
+     + "\u74ea\u74ca\u74aa\u748a\u746a\u744a\u742a\u740a\u73ea\u73ca\u73aa"
+     + "\u738a\u736a\u734a\u732a\u730a\u72ea\u72ca\u72aa\u728a\u726a\u724a"
+     + "\u722a\u720a\u71ea\u71ca\u71aa\u718a\u716a\u714a\u712a\u710a\u70ea"
+     + "\u70ca\u70aa\u708a\u706a\u704a\u702a\u700a\u6fea\u6fca\u6faa\u6f8a"
+     + "\u6f6a\u6f4a\u6f2a\u6f0a\u6eea\u6eca\u6eaa\u6e8a\u6e6a\u6e4a\u6e2a"
+     + "\u6e0a\u6dea\u6dca\u6daa\u6d8a\u6d6a\u6d4a\u6d2a\u6d0a\u6cea\u6cca"
+     + "\u6caa\u6c8a\u6c6a\u6c4a\u6c2a\u6c0a\u6bea\u6bca\u6baa\u6b8a\u6b6a"
+     + "\u6b4a\u6b2a\u6b0a\u6aea\u6aca\u6aaa\u6a8a\u6a6a\u6a4a\u6a2a\u6a0a"
+     + "\u69ea\u60f0\u6368\u6348\u696a\u694a\u692a\u690a\u68ea\u68ca\u68aa"
+     + "\u688a\u686a\u684a\u682a\u680a\u67ea\u67ca\u67aa\u678a\u676a\u674a"
+     + "\u672a\u670a\u66ea\u66ca\u66aa\u668a\u666a\u664a\u662a\u660a\u65ea"
+     + "\u65ca\u65aa\u658a\u656a\u654a\u652a\u650a\u6b26\u6de1\u6e9c\u5e48"
+     + "\u5e28\u5e08\u5de8\u5dc8\u5da8\u5d88\u5d68\u5d48\u5d28\u5d08\u5ce8"
+     + "\u5cc8\u5ca8\u5c88\u5c68\u5c48\u5c28\u5c08\u5be8\u5bc8\u5ba8\u5b88"
+     + "\u5b68\u5b48\u5b28\u5b08\u5ae8\u5ac8\u5aa8\u5a88\u5a68\u5a48\u5a28"
+     + "\u5a08\u59e8\u59c8\u59a8\u5988\u5968\u5948\u5928\u5908\u58e8\u58c8"
+     + "\u58a8\u5888\u5868\u5848\u5828\u5808\u57e8\u57c8\u57a8\u5788\u5768"
+     + "\u5748\u5d6a\u5d4a\u5d2a\u5d0a\u5cea\u5cca\u5caa\u5c8a\u5c6a\u5c4a"
+     + "\u5c2a\u5c0a\u5bea\u5bca\u5baa\u5b8a\u5b6a\u5b4a\u5b2a\u5b0a\u5aea"
+     + "\u5aca\u5aaa\u5a8a\u5a6a\u5a4a\u5a2a\u5a0a\u59ea\u59ca\u59aa\u598a"
+     + "\u596a\u594a\u592a\u590a\u58ea\u58ca\u58aa\u588a\u586a\u584a\u582a"
+     + "\u580a\u57ea\u57ca\u57aa\u578a\u576a\u574a\u572a\u570a\u56ea\u56ca"
+     + "\u56aa\u568a\u566a\u564a\u562a\u560a\u55ea\u55ca\u55aa\u558a\u556a"
+     + "\u554a\u552a\u550a\u54ea\u54ca\u54aa\u548a\u546a\u544a\u542a\u540a"
+     + "\u53ea\u53ca\u53aa\u538a\u536a\u534a\u532a\u530a\u52ea\u52ca\u52aa"
+     + "\u528a\u526a\u524a\u522a\u520a\u51ea\u51ca\u51aa\u518a\u516a\u514a"
+     + "\u512a\u510a\u50ea\u50ca\u50aa\u508a\u506a\u504a\u502a\u500a\u4fea"
+     + "\u4fca\u4faa\u4f8a\u4f6a\u4f4a\u4f2a\u4f0a\u4eea\u4eca\u4eaa\u4e8a"
+     + "\u4e6a\u4e4a\u4e2a\u4e0a\u4dea\u4dca\u4daa\u4d8a\u4d6a\u4d4a\u4d2a"
+     + "\u4d0a\u4cea\u4cca\u4caa\u4c8a\u4c6a\u4c4a\u4c2a\u4c0a\u4bea\u4bca"
+     + "\u4baa\u4b8a\u4b6a\u4b4a\u4b2a\u4b0a\u4aea\u4aca\u4aaa\u4a8a\u4a6a"
+     + "\u4a4a\u4a2a\u4a0a\u49ea\u49ca\u49aa\u498a\u496a\u494a\u492a\u490a"
+     + "\u48ea\u48ca\u48aa\u488a\u486a\u484a\u482a\u480a\u47ea\u47ca\u47aa"
+     + "\u478a\u476a\u474a\u472a\u470a\u46ea\u46ca\u46aa\u468a\u466a\u464a"
+     + "\u462a\u460a\u45ea\u45ca\u45aa\u458a\u456a\u454a\u452a\u450a\u44ea"
+     + "\u44ca\u44aa\u448a\u446a\u444a\u442a\u440a\u43ea\u43ca\u43aa\u438a"
+     + "\u436a\u434a\u432a\u430a\u42ea\u42ca\u42aa\u428a\u426a\u424a\u422a"
+     + "\u420a\u41ea\u41ca\u41aa\u418a\u416a\u414a\u412a\u410a\u40ea\u40ca"
+     + "\u40aa\u408a\u406a\u404a\u402a\u400a\u3fea\u3fca\u3faa\u3f8a\u3f6a"
+     + "\u3f4a\u3f2a\u3f0a\u3eea\u3eca\u3eaa\u3e8a\u3e6a\u3e4a\u3e2a\u3e0a"
+     + "\u3dea\u3dca\u3daa\u3d8a\u3d6a\u3d4a\u3d2a\u3d0a\u3cea\u3cca\u3caa"
+     + "\u3c8a\u3c6a\u3c4a\u3c2a\u3c0a\u3bea\u3bca\u3baa\u3b8a\u3b6a\u3b4a"
+     + "\u3b2a\u3b0a\u3aea\u3aca\u3aaa\u3a8a\u3a6a\u3a4a\u3a2a\u3a0a\u39ea"
+     + "\u39ca\u39aa\u398a\u396a\u394a\u392a\u390a\u38ea\u38ca\u38aa\u388a"
+     + "\u386a\u384a\u382a\u380a\u37ea\u37ca\u37aa\u378a\u376a\u374a\u372a"
+     + "\u370a\u36ea\u36ca\u36aa\u368a\u366a\u364a\u362a\u360a\u35ea\u35ca"
+     + "\u35aa\u358a\u356a\u354a\u352a\u350a\u34ea\u34ca\u34aa\u348a\u346a"
+     + "\u344a\u342a\u340a\u33ea\u33ca\u33aa\u338a\u336a\u334a\u332a\u330a"
+     + "\u32ea\u32ca\u32aa\u328a\u326a\u324a\u322a\u320a\u31ea\u28f2\u2b68"
+     + "\u2b48\u3c2b\u3c0b\u3beb\u3bcb\u3bab\u3b8b\u3b6b\u3b4b\u3b2b\u3b0b"
+     + "\u3aeb\u3acb\u3aab\u3a8b\u3a6b\u3a4b\u3a2b\u3a0b\u39eb\u39cb\u39ab"
+     + "\u398b\u396b\u394b\u392b\u390b\u38eb\u38cb\u38ab\u388b\u386b\u384b"
+     + "\u382b\u380b\u37eb\u37cb\u37ab\u378b\u376b\u374b\u372b\u370b\u36eb"
+     + "\u36cb\u36ab\u368b\u366b\u364b\u362b\u360b\u35eb\u35cb\u35ab\u358b"
+     + "\u356b\u354b\u352b\u350b\u34eb\u34cb\u34ab\u348b\u346b\u344b\u344b"
+     + "\u342b\u340b\u33eb\u33cb\u33ab\u338b\u336b\u334b\u332b\u330b\u32eb"
+     + "\u32cb\u32ab\u328b\u326b\u324b\u322b\u320b\u31eb\u31cb\u31ab\u318b"
+     + "\u316b\u314b\u312b\u310b\u30eb\u30cb\u30ab\u308b\u306b\u304b\u302b"
+     + "\u300b\u2feb\u2fcb\u2fab\u2f8b\u2f6b\u2f4b\u2f2b\u2f0b\u2eeb\u2ecb"
+     + "\u2eab\u2e8b\u2e6b\u2e4b\u2e2b\u2e0b\u2deb\u2dcb\u2dab\u2d8b\u2d6b"
+     + "\u2d4b\u2d2b\u2d0b\u2ceb\u2ccb\u2cab\u2c8b\u2c6b\u2c4b\u2c2b\u2c0b"
+     + "\u2beb\u2bcb\u2bab\u2b8b\u2b6b\u2b4b\u2b2b\u2b0b\u2aeb\u2acb\u2aab"
+     + "\u2a8b\u2a6b\u2a4b\u2a2b\u2a0b\u29eb\u29cb\u29ab\u298b\u296b\u294b"
+     + "\u292b\u290b\u28eb\u28cb\u28ab\u288b\u286b\u284b\u282b\u280b\u27eb"
+     + "\u27cb\u27ab\u278b\u276b\u274b\u272b\u270b\u26eb\u26cb\u26ab\u268b"
+     + "\u266b\u264b\u262b\u260b\u25eb\u25cb\u25ab\u258b\u256b\u254b\u252b"
+     + "\u250b\u24eb\u24cb\u24ab\u248b\u246b\u244b\u242b\u240b\u23eb\u23cb"
+     + "\u23ab\u238b\u236b\u234b\u232b\u230b\u22eb\u22cb\u22ab\u228b\u226b"
+     + "\u224b\u222b\u220b\u21eb\u21cb\u21ab\u218b\u216b\u214b\u212b\u210b"
+     + "\u20eb\u20cb\u20ab\u208b\u206b\u204b\u202b\u200b\u1feb\u1fcb\u1fab"
+     + "\u1f8b\u1f6b\u1f4b\u1f2b\u1f0b\u1eeb\u1ecb\u1eab\u1e8b\u1e6b\u1e4b"
+     + "\u1e2b\u1e0b\u1deb\u1dcb\u1dab\u1d8b\u1d6b\u1d4b\u1d2b\u1d0b\u1ceb"
+     + "\u1ccb\u1cab\u1c8b\u1c6b\u1c4b\u1c2b\u1c0b\u1beb\u1bcb\u1bab\u1b8b"
+     + "\u1b6b\u106a\u104a\u102a\u100a\u0fea\u0fca\u0faa\u0f8a\u0f6a\u0668"
+     + "\u08e8\u08c8\u08a8\u0888\u0868\u0848\u07d7\u194b\u07b6\u0d1c\u0cfc"
+     + "\u0cb2\u0ca9\u0c9c\u0c7c\u0c5c\u0c3c\u0c1c\u0bfc\u0bdc\u0bbc\u0b9c"
+     + "\u0b7c\u0b5e\u0b2c\u0b1c\u0ab8\u0adc\u0a9c\u02c2\u0528\u166b\u1667"
+     + "\u03ff\u09fc\u09dc\u09bc\u0659\u0bb8\u15a7\u0fc6\u01c0\u01b1\u09cb"
+     + "\u082c\u1285";
+ 
+   /**
+    * Information about each character.  The low order 5 bits form the
+    * character type, the next bit is a flag for non-breaking spaces, and the
+    * next bit is a flag for mirrored directionality.  The high order 9 bits
+    * form the offset into the attribute tables.  Note that this limits the
+    * number of unique character attributes to 512, which is not a problem
+    * as of Unicode version 3.2.0, but may soon become one.
+    */
+   String DATA
+     = "\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001"
+     + "\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082"
+     + "\u3e80\u3e80\u3001\u3082\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3a85"
+     + "\u3a85\u3e80\u3e80\u3e80\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85"
+     + "\u3e80\u3e80\u3e80\u3e80\u5b88\u5b88\u3e80\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80"
+     + "\u3e80\u3e80\u3e80\u5198\u3e80\u3e80\u3e80\u3e80\u4606\u3e80\u3e80"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80\u3a85"
+     + "\u3a85\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u3e80\u3e80\u3e80\u3e80\u5202\u5202\u5202\u5202"
+     + "\u5202\u5202\u5202\u5202\u5202\u5202\u5202\u5202\u5202\u5202\u5202"
+     + "\u5202\u5202\u5202\u5202\u5202\u5202\u5202\u5202\u5202\u5202\u5202"
+     + "\u5202\u5202\u5202\u5202\u5202\u2e82\u3e80\u5198\u2a14\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u4606\u4606\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4686\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u1a1b\u1a1b\u3e80\u3e80\u3e80\u3e80\u4584\u3e80\u3e80"
+     + "\u3e80\u0298\u3e80\u0298\u6615\u6696\u0298\u1a97\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u4584\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u4584\u4584\u1a1b\u1a1b\u1a1b\u1a1b"
+     + "\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u4584"
+     + "\u4584\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b"
+     + "\u1a1b\u1a1b\u1a1b\u1a1b\u2e82\u7282\u2e82\u3e80\u2e82\u4902\u7481"
+     + "\u7481\u7481\u7481\u7383\u1a1b\u1a1b\u1a1b\u6d82\u6d82\u4902\u4902"
+     + "\u3e80\u3e80\u2e82\u4902\u6e01\u6e01\u7501\u7501\u3e80\u1a1b\u1a1b"
+     + "\u1a1b\u1b02\u1b82\u1c02\u1c82\u1d02\u1d82\u1e02\u1e82\u1f02\u1f82"
+     + "\u2002\u2082\u2102\u2182\u2202\u2282\u2302\u2382\u2402\u2482\u2502"
+     + "\u2582\u2602\u2682\u2702\u2782\u0455\u0c99\u04d6\u0c99\017\017"
+     + "\017\017\017\u010f\017\017\017\017\017\017\017"
+     + "\017\017\017\017\017\017\017\017\017\017\017"
+     + "\017\017\017\017\017\017\017\017\u008f\u010f\u008f"
+     + "\u018f\u010f\017\017\017\017\017\017\017\017\017"
+     + "\017\017\017\017\017\u010f\u010f\u010f\u008f\u020c\u0298"
+     + "\u0298\u0318\u039a\u0318\u0298\u0298\u0455\u04d6\u0298\u0519\u0598"
+     + "\u0614\u0598\u0698\u0709\u0789\u0809\u0889\u0909\u0989\u0a09\u0a89"
+     + "\u0b09\u0b89\u0598\u0298\u0c59\u0c99\u0c59\u0298\u0d01\u0d81\u0e01"
+     + "\u0e81\u0f01\u0f81\u1001\u1081\u1101\u1181\u1201\u1281\u1301\u1381"
+     + "\u1401\u1481\u1501\u1581\u1601\u1681\u1701\u1781\u1801\u1881\u1901"
+     + "\u1981\u0455\u0298\u04d6\u1a1b\u1a97\u0298\u0298\u0298\u0c99\u0455"
+     + "\u04d6\u3e80\u0298\u0298\u0298\u0298\u0298\u0298\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u282c\u0298\u039a\u039a\u039a\u039a\u289c"
+     + "\u289c\u1a1b\u289c\u2902\u29dd\u0c99\u2a14\u289c\u1a1b\u2a9c\u0519"
+     + "\u2b0b\u2b8b\u1a1b\u2c02\u289c\u0298\u1a1b\u2c8b\u2902\u2d5e\u2d8b"
+     + "\u2d8b\u2d8b\u0298\u0298\u0519\u0614\u0c99\u0c99\u0c99\u3e80\u0298"
+     + "\u039a\u0318\u0298\u3e80\u3e80\u3e80\u3e80\u5405\u5405\u5405\u3e80"
+     + "\u5405\u3e80\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u3e80\u3e80\u3e80\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u3e80\u501c\u501c\u4f81\u4f81"
+     + "\u4f81\u4f81\u4f81\u4f81\u4f81\u4f81\u4f81\u4f81\u4f81\u4f81\u4f81"
+     + "\u4f81\u4f81\u4f81\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01"
+     + "\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01"
+     + "\u2e01\u2e01\u2e01\u2e01\u0c99\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01"
+     + "\u2e01\u2e82\u2e82\u2e82\u4902\u4902\u2e82\u2e82\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u2e82\u2e82"
+     + "\u2e82\u2e82\u2e82\u3e80\u3e80\u3e80\u3e80\u3e80\u5305\u4606\u5305"
+     + "\u5305\u3e80\u5305\u5305\u3e80\u5305\u5305\u5305\u5305\u5305\u5305"
+     + "\u5305\u5305\u5305\u5305\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5398\u5405\u4606\u4606\u4606\u4606\u4606\u4606\u4606"
+     + "\u5087\u5087\u4606\u5087\u5087\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b"
+     + "\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b\u840b\u3082\u3001\u3082\u3001\u3082"
+     + "\u3001\u3082\u3001\u3082\u2e82\u3001\u3082\u3001\u3082\u3001\u3082"
+     + "\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001"
+     + "\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082"
+     + "\u3001\u3082\u3001\u3082\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u5c09"
+     + "\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u6009\u6089\u4606\u4606"
+     + "\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u1a1b\u1a1b\u4701\u0298\u4781\u4781\u4781\u3e80"
+     + "\u4801\u3e80\u4881\u4881\u4902\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01"
+     + "\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2f02"
+     + "\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02"
+     + "\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02"
+     + "\u0c99\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f82\u2f02\u2f02"
+     + "\u4a82\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u4b02"
+     + "\u4b82\u4b82\u3e80\u4c02\u4c82\u4d01\u4d01\u4d01\u4d82\u4e02\u2902"
+     + "\u3e80\u3e80\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001"
+     + "\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u2e82\u3b81\u3c03\u3c82"
+     + "\u3001\u3082\u3d81\u3e01\u3001\u3082\u3001\u3082\u3001\u3082\u3001"
+     + "\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3101\u3182"
+     + "\u3001\u3082\u3001\u3082\u3001\u3082\u2902\u3001\u3082\u3001\u3082"
+     + "\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001"
+     + "\u3082\u4e82\u4f02\u3d02\u2902\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u5b10\u5b10\u5b10\u5b10\u5b10"
+     + "\u5b10\u7f0b\u3e80\u3e80\u3e80\u7f8b\u800b\u808b\u810b\u818b\u820b"
+     + "\u0519\u0519\u0c99\u0455\u04d6\u2902\u3301\u3001\u3082\u3001\u3082"
+     + "\u3381\u3001\u3082\u3401\u3401\u3001\u3082\u2902\u3481\u3501\u3581"
+     + "\u3001\u3082\u3401\u3601\u3682\u3701\u3781\u3001\u3082\u2902\u2902"
+     + "\u3701\u3801\u2902\u3881\u3a85\u3a85\u3a85\u3a85\u3b81\u3c03\u3c82"
+     + "\u3b81\u3c03\u3c82\u3b81\u3c03\u3c82\u3001\u3082\u3001\u3082\u3001"
+     + "\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082"
+     + "\u3d02\u3001\u3082\u501c\u4606\u4606\u4606\u4606\u3e80\u5087\u5087"
+     + "\u3e80\u3e80\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001"
+     + "\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082"
+     + "\u3001\u3082\u3001\u3082\u3201\u3001\u3082\u3001\u3082\u3001\u3082"
+     + "\u3282\u3001\u3082\u3001\u3082\u3001\u3082\u3901\u3001\u3082\u3901"
+     + "\u2902\u2902\u3001\u3082\u3901\u3001\u3082\u3981\u3981\u3001\u3082"
+     + "\u3001\u3082\u3a01\u3001\u3082\u2902\u3a85\u3001\u3082\u2902\u3b02"
+     + "\u4d01\u3001\u3082\u3001\u3082\u3e80\u3e80\u3001\u3082\u3e80\u3e80"
+     + "\u3001\u3082\u3e80\u3e80\u3e80\u3001\u3082\u3001\u3082\u3001\u3082"
+     + "\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001"
+     + "\u3082\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u0598\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u5398\u3e80\u3e80\u3e80\u5398"
+     + "\u5398\u5398\u5398\u5398\u5398\u5398\u5398\u5398\u5398\u5398\u5398"
+     + "\u5398\u5398\u3e80\u5b10\u5405\u4606\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u3e80\u3e80\u5b10\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01"
+     + "\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01"
+     + "\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01\u4d01"
+     + "\u4d01\u4d01\u4d01\u4d01\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89"
+     + "\u5f09\u5f89\u6009\u6089\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u2902\u2902\u2902\u3f02\u3f82\u2902\u4002"
+     + "\u4002\u2902\u4082\u2902\u4102\u2902\u2902\u2902\u2902\u4002\u2902"
+     + "\u2902\u4182\u2902\u2902\u2902\u2902\u4202\u4282\u2902\u2902\u2902"
+     + "\u2902\u2902\u4282\u2902\u2902\u4302\u2902\u2902\u4382\u2902\u2902"
+     + "\u2902\u2902\u2902\u2902\u2902\u2902\u2902\u2902\u4402\u2902\u2902"
+     + "\u4402\u2902\u2902\u2902\u2902\u4402\u2902\u4482\u4482\u2902\u2902"
+     + "\u2902\u2902\u2902\u2902\u4502\u2902\u2902\u2902\u2902\u2902\u2902"
+     + "\u2902\u2902\u2902\u2902\u2902\u2902\u2902\u2902\u3e80\u3e80\u4584"
+     + "\u4584\u4584\u4584\u4584\u4584\u4584\u4584\u4584\u1a1b\u1a1b\u4584"
+     + "\u4584\u4584\u4584\u4584\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b"
+     + "\u1a1b\u1a1b\u4584\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u5101\u5101"
+     + "\u5101\u5101\u5101\u5101\u5101\u5101\u5101\u5101\u5101\u5101\u5101"
+     + "\u5101\u5101\u5101\u5101\u5101\u5101\u5101\u5101\u5101\u5101\u3e80"
+     + "\u3e80\u4584\u5198\u5198\u5198\u5198\u5198\u5198\u2e01\u2e01\u3e80"
+     + "\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u4982\u4a02"
+     + "\u4a02\u4a02\u4902\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02"
+     + "\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u2f02\u4f02\u4f02\u4f02"
+     + "\u4f02\u4f02\u4f02\u4f02\u4f02\u4f02\u4f02\u4f02\u4f02\u4f02\u4f02"
+     + "\u4f02\u4f02\u4606\u4606\u4606\u4606\u4606\u5198\u4606\u4606\u3a85"
+     + "\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u3e80\u4606\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u3e80\u4606\u4606\u4606\u5298"
+     + "\u4606\u4606\u5298\u4606\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
+     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u5305\u5305\u5305\u5298\u5298\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u5c89\u5d09\u5d89"
+     + "\u5e09\u5e89\u5f09\u5f89\u6009\u6089\u640b\u648b\u650b\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u4606\u5b88\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80"
+     + "\u3e80\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80"
+     + "\u3e80\u3a85\u3a85\u3e80\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3e80"
+     + "\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u5b88\u5b88\u5b88\u5b88\u3e80\u4606\u4606\u4606\u3e80\u4606"
+     + "\u4606\u4606\u4606\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u4606"
+     + "\u4606\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u4606"
+     + "\u5b88\u5b88\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3e80\u3e80\u3a85\u3a85\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80"
+     + "\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3e80\u3e80\u3e80\u3e80\u5b88\u5b88\u3e80\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3a85\u3a85\u3a85"
+     + "\u3e80\u3e80\u3e80\u3e80\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09"
+     + "\u5f89\u6009\u6089\u501c\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u5509\u5589\u5609"
+     + "\u5689\u5709\u5789\u5809\u5889\u5909\u5989\u0318\u5a18\u5a18\u5398"
+     + "\u3e80\u3e80\u4606\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u3e80\u3e80\u5405"
+     + "\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u6615\u6696\u5484\u5405\u5405\u5405\u5405"
+     + "\u5405\u5405\u5405\u5405\u5405\u5405\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u5b88\u5b88\u5198\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u4606\u4606\u5b88"
+     + "\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3e80"
+     + "\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u5198\u5198\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u4606\u4606\u4606\u4606\u4606\u5484\u5484\u4606"
+     + "\u4606\u289c\u4606\u4606\u4606\u4606\u3e80\u3e80\u0709\u0789\u0809"
+     + "\u0889\u0909\u0989\u0a09\u0a89\u0b09\u0b89\u5405\u5405\u5405\u5a9c"
+     + "\u5a9c\u3e80\u3a85\u3a85\u3a85\u3e80\u3a85\u3e80\u3a85\u3e80\u3e80"
+     + "\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u4606\u3a85\u3a85\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u3e80\u4606\u4606\u3a85\u3e80\u3e80"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80\u4606\u4606\u5b88"
+     + "\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3e80\u3e80\u4606\u3a85\u5b88\u5b88\u5b88\u5b88\u5b88\u3e80\u4606"
+     + "\u5b88\u5b88\u3e80\u5b88\u5b88\u4606\u4606\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u5b88\u5b88\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3a85\u3e80\u5198\u5198\u5198\u5198\u5198\u5198\u5198\u5198"
+     + "\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u6009\u6089\u640b\u670b"
+     + "\u678b\u680b\u688b\u690b\u698b\u6a0b\u6a8b\u648b\u6b0b\u3e80\u3e80"
+     + "\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3e80"
+     + "\u3e80\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u4606\u3a85\u5b88\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u5b88\u5b88\u5b88\u5b88"
+     + "\u4606\u3e80\u3e80\u3a85\u4606\u4606\u4606\u4606\u3e80\u3e80\u3e80"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3e80\u3e80\u3e80"
+     + "\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u4606\u3e80\u5b88\u5b88\u5b88"
+     + "\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85"
+     + "\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3e80\u3a85"
+     + "\u3a85\u3a85\u3a85\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3e80\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u4606\u3a85\u3a85\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u3e80\u3e80\u3e80\u3e80\u039a\u039a\u039a"
+     + "\u039a\u039a\u039a\u039a\u039a\u039a\u039a\u039a\u039a\u039a\u039a"
+     + "\u039a\u039a\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3a85\u3a85\u4606\u4606"
+     + "\u5198\u5198\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u6009"
+     + "\u6089\u5198\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u0298\u0298\u0318\u039a\u0318"
+     + "\u0298\u0298\u6615\u6696\u0298\u0519\u0598\u0614\u0598\u0698\u0709"
+     + "\u0789\u0809\u0889\u0909\u0989\u0a09\u0a89\u0b09\u0b89\u0598\u0298"
+     + "\u0c99\u0c99\u0c99\u0298\u0298\u0298\u0298\u0298\u0298\u2a14\u0298"
+     + "\u0298\u0298\u0298\u5b10\u5b10\u5b10\u5b10\u3e80\u5c09\u5c89\u5d09"
+     + "\u5d89\u5e09\u5e89\u5f09\u5f89\u6009\u6089\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80\u5b88"
+     + "\u4606\u4606\u4606\u4606\u3e80\u3e80\u5b88\u5b88\u3e80\u3e80\u5b88"
+     + "\u5b88\u4606\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u5b88\u3e80\u3e80\u3e80\u3e80\u3a85\u3a85\u3e80\u3a85\u3e80\u3e80"
+     + "\u3a85\u3a85\u3e80\u3a85\u3e80\u3e80\u3a85\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3e80\u3a85\u3a85\u3e80\u3a85\u3a85\u3e80\u3a85\u3a85"
+     + "\u3e80\u3e80\u4606\u3e80\u5b88\u5b88\u4606\u4606\u3e80\u3e80\u3e80"
+     + "\u3e80\u4606\u4606\u3e80\u3e80\u4606\u4606\u4606\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3a85\u3a85\u3a85"
+     + "\u3a85\u3e80\u3a85\u3e80\u3a85\u3a85\u4606\u4606\u3e80\u3e80\u5c09"
+     + "\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u6009\u6089\u3a85\u3a85"
+     + "\u039a\u039a\u610b\u618b\u620b\u628b\u630b\u638b\u501c\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3a85"
+     + "\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u4606\u3a85"
+     + "\u5b88\u5b88\u4606\u4606\u4606\u4606\u4606\u3e80\u4606\u4606\u5b88"
+     + "\u3e80\u5b88\u5b88\u4606\u3e80\u3e80\u3a85\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u6009\u6089\u630b"
+     + "\u630b\u630b\u630b\u630b\u630b\u630b\u630b\u630b\u630b\u501c\u4606"
+     + "\u501c\u4606\u501c\u4606\u6615\u6696\u6615\u6696\u5b88\u5b88\u4606"
+     + "\u4606\u4606\u3e80\u3e80\u3e80\u5b88\u5b88\u3e80\u3e80\u5b88\u5b88"
+     + "\u4606\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u4606\u5b88"
+     + "\u3e80\u3e80\u3e80\u3e80\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3e80\u3a85\u3a85\u3e80\u5b88\u4606\u4606\u4606\u4606\u5b88"
+     + "\u4606\u3e80\u3e80\u3e80\u4606\u4606\u5b88\u4606\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u5b88\u5b88\u5b88\u4606\u4606\u4606\u4606\u4606\u4606\u4606"
+     + "\u5b88\u5b88\u3e80\u3e80\u3e80\u5b88\u5b88\u5b88\u3e80\u5b88\u5b88"
+     + "\u5b88\u4606\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u5b88\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3e80\u4584\u3e80\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u3e80\u3e80\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89"
+     + "\u6009\u6089\u3e80\u3e80\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80\u5c09"
+     + "\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u6009\u6089\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u5087\u5087\u5087\u5b88\u4606\u4606"
+     + "\u4606\u3e80\u3e80\u5b88\u5b88\u5b88\u3e80\u5b88\u5b88\u5b88\u4606"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u5b88\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u4606\u3e80\u3e80\u3e80\u3e80"
+     + "\u5b88\u5b88\u5b88\u4606\u4606\u4606\u3e80\u4606\u3e80\u5b88\u5b88"
+     + "\u5b88\u5b88\u5b88\u5b88\u5b88\u5b88\u4606\u5b88\u5b88\u4606\u4606"
+     + "\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u4606\u5198\u5198"
+     + "\u5198\u5198\u5198\u5198\u5198\u039a\u5198\u3e80\u3e80\u3e80\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u4584\u4606\u4606\u4606\u4606\u4606"
+     + "\u4606\u4606\u4606\u5198\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09"
+     + "\u5f89\u6009\u6089\u5198\u5198\u3e80\u3e80\u3e80\u3e80\u3a85\u501c"
+     + "\u501c\u501c\u5198\u5198\u5198\u5198\u5198\u5198\u5198\u5198\u65b8"
+     + "\u5198\u5198\u5198\u5198\u5198\u5198\u501c\u501c\u501c\u501c\u501c"
+     + "\u4606\u4606\u501c\u501c\u501c\u501c\u501c\u501c\u4606\u501c\u501c"
+     + "\u501c\u501c\u501c\u501c\u3e80\u3e80\u501c\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u3e80\u3e80\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u1a97\u4584\u4584\u4584"
+     + "\u3e80\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u6009\u6089"
+     + "\u5198\u5198\u5198\u5198\u5198\u5198\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u5b88\u5b88\u4606\u4606\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u020c\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u6615\u6696\u3e80\u3e80\u3e80\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u5198"
+     + "\u5198\u5198\u6b8b\u6c0b\u6c8b\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u4606\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3001\u3082\u3001"
+     + "\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082"
+     + "\u3001\u3082\u3001\u3082\u3001\u3082\u3001\u3082\u2e82\u2e82\u2e82"
+     + "\u2e82\u2e82\u6d02\u3e80\u3e80\u3e80\u3e80\u6d82\u6d82\u6d82\u6d82"
+     + "\u6d82\u6d82\u6d82\u6d82\u6e01\u6e01\u6e01\u6e01\u6e01\u6e01\u6e01"
+     + "\u6e01\u6d82\u6d82\u6d82\u6d82\u6d82\u6d82\u6d82\u6d82\u6e01\u6e01"
+     + "\u6e01\u6e01\u6e01\u6e01\u6e01\u6e01\u6d82\u6d82\u6d82\u6d82\u6d82"
+     + "\u6d82\u3e80\u3e80\u6e01\u6e01\u6e01\u6e01\u6e01\u6e01\u3e80\u3e80"
+     + "\u2e82\u6d82\u4902\u6d82\u4902\u6d82\u4902\u6d82\u3e80\u6e01\u3e80"
+     + "\u6e01\u3e80\u6e01\u3e80\u6e01\u6d82\u6d82\u6d82\u6d82\u6d82\u6d82"
+     + "\u6d82\u6d82\u6e01\u6e01\u6e01\u6e01\u6e01\u6e01\u6e01\u6e01\u6e82"
+     + "\u6e82\u6f02\u6f02\u6f02\u6f02\u6f82\u6f82\u7002\u7002\u7082\u7082"
+     + "\u7102\u7102\u3e80\u3e80\u7182\u7182\u7182\u7182\u7182\u7182\u7182"
+     + "\u7182\u7203\u7203\u7203\u7203\u7203\u7203\u7203\u7203\u7182\u7182"
+     + "\u7182\u7182\u7182\u7182\u7182\u7182\u7203\u7203\u7203\u7203\u7203"
+     + "\u7203\u7203\u7203\u6d82\u6d82\u2e82\u7282\u2e82\u3e80\u2e82\u4902"
+     + "\u6e01\u6e01\u7301\u7301\u7383\u1a1b\u7402\u1a1b\u1b02\u1b82\u1c02"
+     + "\u1c82\u1d02\u1d82\u1e02\u1e82\u1f02\u1f82\u2002\u2082\u2102\u2182"
+     + "\u2202\u2282\u2302\u2382\u2402\u2482\u2502\u2582\u2602\u2682\u2702"
+     + "\u2782\u6615\u0c99\u6696\u0c99\u3e80\u6d82\u6d82\u4902\u4902\u2e82"
+     + "\u7582\u2e82\u4902\u6e01\u6e01\u7601\u7601\u7681\u1a1b\u1a1b\u1a1b"
+     + "\u3e80\u3e80\u2e82\u7282\u2e82\u3e80\u2e82\u4902\u7701\u7701\u7781"
+     + "\u7781\u7383\u1a1b\u1a1b\u3e80\u020c\u020c\u020c\u020c\u020c\u020c"
+     + "\u020c\u782c\u020c\u020c\u020c\u788c\u5b10\u5b10\u7910\u7990\u2a14"
+     + "\u7a34\u2a14\u2a14\u2a14\u2a14\u0298\u0298\u7a9d\u7b1e\u6615\u7a9d"
+     + "\u7a9d\u7b1e\u6615\u7a9d\u0298\u0298\u0298\u0298\u0298\u0298\u0298"
+     + "\u0298\u7b8d\u7c0e\u7c90\u7d10\u7d90\u7e10\u7e90\u782c\u0318\u0318"
+     + "\u0318\u0318\u0318\u0298\u0298\u0298\u0298\u29dd\u2d5e\u0298\u0298"
+     + "\u0298\u0298\u1a97\u7f0b\u2c8b\u2b0b\u2b8b\u7f8b\u800b\u808b\u810b"
+     + "\u818b\u820b\u0519\u0519\u0c99\u0455\u04d6\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u3e80\u3e80\u3e80\u3e80\u3e80\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u4d01\u289c\u289c\u289c\u289c"
+     + "\u4d01\u289c\u289c\u2902\u4d01\u4d01\u4d01\u2902\u2902\u4d01\u4d01"
+     + "\u4d01\u2902\u289c\u4d01\u289c\u289c\u289c\u4d01\u4d01\u4d01\u4d01"
+     + "\u4d01\u289c\u289c\ua20a\ua28a\ua30a\ua38a\ua40a\ua48a\ua50a\ua58a"
+     + "\ua60a\u4606\u4606\u4606\u4606\u4606\u4606\u2a14\u4584\u4584\u4584"
+     + "\u4584\u4584\u289c\u289c\ua68a\ua70a\ua78a\u3e80\u3e80\u3e80\u289c"
+     + "\u289c\u289c\u289c\u3e80\u289c\u289c\u289c\u289c\u3e80\u3e80\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u0c99\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u0c99\u0c99\u289c\u289c\u0c99\u289c\u0c99"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u0c99\u289c\u289c\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u948a"
+     + "\u950a\u958a\u960a\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u0c99\u0c99\u0c99\u0c99\u0c99\u289c\u289c"
+     + "\u289c\u289c\u289c\u0c99\u0c99\u289c\u289c\u289c\u289c\u4d01\u289c"
+     + "\u8281\u289c\u4d01\u289c\u8301\u8381\u4d01\u4d01\u2a9c\u2902\u4d01"
+     + "\u4d01\u289c\u4d01\u2902\u3a85\u3a85\u3a85\u3a85\u2902\u289c\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u848a\u850a\u858a\u860a\u868a\u870a\u878a"
+     + "\u880a\u888a\u890a\u898a\u8a0a\u8a8a\u8b0a\u8b8a\u8c0a\u8c8a\u8d0a"
+     + "\u8d8a\u8e0a\u8e8a\u8f0a\u8f8a\u900a\u908a\u910a\u918a\u920a\u928a"
+     + "\u930a\u938a\u940a\u0c99\u0c99\u0c59\u0c59\u0c99\u0c99\u0c59\u0c59"
+     + "\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59"
+     + "\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c99\u0c99\u0c99\u0c99\u0c99"
+     + "\u0c59\u0c59\u0c59\u0c59\u0c99\u0c99\u0c99\u0c99\u0c99\u0c99\u0c99"
+     + "\u0c99\u0c99\u0c59\u0c59\u0c59\u0c59\u0c59\u0c99\u0c99\u0c59\u0c59"
+     + "\u0c99\u0c99\u0c99\u0c99\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59"
+     + "\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c99\u0c99\u0c59\u0c59\u0c59"
+     + "\u0c59\u0c99\u0c99\u0c99\u0c99\u0c99\u0c59\u0c99\u0c99\u0c99\u0c99"
+     + "\u0c99\u0c99\u0c99\u289c\u289c\u0c99\u289c\u289c\u0c99\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u0c99\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u3e80\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u0c99\u0c59\u0c59\u0c59\u0c59\u0c99\u0c99\u0c99\u0c59\u0c59\u0c59"
+     + "\u0c59\u0c59\u0c59\u0c99\u0c99\u0c99\u0c59\u0519\u0519\u0c99\u0c59"
+     + "\u0c59\u0c99\u0c99\u0c99\u0c59\u0c59\u0c59\u0c59\u0c99\u0c59\u0c99"
+     + "\u0c59\u0c99\u0c99\u0c99\u0c99\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59"
+     + "\u0c59\u0c59\u0c59\u0c99\u0c99\u0c99\u0c99\u0c99\u0c59\u0c99\u0c59"
+     + "\u0c59\u0c59\u0c59\u0c59\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u0455\u04d6\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c"
+     + "\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c"
+     + "\u501c\u501c\u501c\u3e80\u3e80\u3e80\u3e80\u501c\u501c\u501c\u501c"
+     + "\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c"
+     + "\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u9c1c\u9c1c\u9c1c\u9c1c"
+     + "\u9c1c\u9c1c\u9c1c\u9c1c\u9c1c\u9c1c\u9c1c\u9c1c\u9c1c\u9c1c\u9c1c"
+     + "\u9c1c\u9c9c\u9c9c\u9c9c\u9c9c\u9c9c\u9c9c\u9c9c\u9c9c\u9c9c\u9c9c"
+     + "\u9c9c\u9c9c\u9c9c\u9c9c\u9c9c\u9c9c\u7f0b\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u0c59\u0c99\u0c59\u0c99\u0c59"
+     + "\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c99\u0c99\u0c59\u0c59"
+     + "\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59\u0c59"
+     + "\u0c59\u0c59\u0c59\u0c59\u0c59\u0c99\u0c99\u0c59\u0c59\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u039a\u039a\u0c99\u1a1b\u289c\u039a\u039a\u3e80\u289c\u0c99"
+     + "\u0c99\u0c99\u0c99\u289c\u289c\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u5b10\u5b10\u5b10\u289c\u289c\u3e80\u3e80"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u3e80\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u3e80\u289c"
+     + "\u3e80\u289c\u289c\u289c\u289c\u3e80\u3e80\u3e80\u289c\u3e80\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u840b\u9d0b"
+     + "\u9d8b\u9e0b\u9e8b\u9f0b\u9f8b\ua00b\ua08b\ua10b\u840b\u9d0b\u9d8b"
+     + "\u9e0b\u9e8b\u9f0b\u9f8b\ua00b\ua08b\ua10b\u289c\u3e80\u3e80\u3e80"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u0c59\u0c59\u0c59"
+     + "\u0c59\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
+     + "\u501c\u289c\u289c\u289c\u289c\u289c\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u630b\u630b\u630b\u630b\u630b\u630b\u630b\u630b\u630b\u630b\u501c"
+     + "\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c"
+     + "\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c"
+     + "\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u3e80\u3e80"
+     + "\u3e80\u501c\u610b\u618b\u620b\u628b\ua80b\ua88b\ua90b\ua98b\uaa0b"
+     + "\u640b\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c"
+     + "\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c"
+     + "\u501c\u501c\u501c\u501c\u501c\u501c\u289c\u3e80\u289c\u289c\u289c"
+     + "\u3e80\u289c\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u2c8b\u2b0b\u2b8b\u7f8b\u800b\u808b"
+     + "\u810b\u818b\u820b\u968b\u970b\u978b\u980b\u988b\u990b\u998b\u9a0b"
+     + "\u9a8b\u9b0b\u9b8b\u2c8b\u2b0b\u2b8b\u7f8b\u800b\u808b\u810b\u818b"
+     + "\u820b\u968b\u970b\u978b\u980b\u988b\u990b\u998b\u9a0b\u9a8b\u9b0b"
+     + "\u9b8b\u501c\u501c\u501c\u501c\u020c\u0298\u0298\u0298\u289c\u4584"
+     + "\u3a85\ua18a\u0455\u04d6\u0455\u04d6\u0455\u04d6\u0455\u04d6\u0455"
+     + "\u04d6\u289c\u289c\u0455\u04d6\u0455\u04d6\u0455\u04d6\u0455\u04d6"
+     + "\u2a14\u6615\u6696\u6696\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3e80\u3e80\u3e80\u3e80\u4606\u4606\u1a1b\u1a1b"
+     + "\u4584\u4584\u3e80\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85"
+     + "\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3a85\u3e80\u501c\u501c\u630b"
+     + "\u630b\u630b\u630b\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c"
+     + "\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u501c\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93"
+     + "\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93"
+     + "\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93\uaa93"
+     + "\uaa93\uaa93\uaa93\uab12\uab12\uab12\uab12\uab12\uab12\uab12\uab12"
+     + "\uab12\uab12\uab12\uab12\uab12\uab12\uab12\uab12\uab12\uab12\uab12"
+     + "\uab12\uab12\uab12\uab12\uab12\uab12\uab12\uab12\uab12\uab12\uab12"
+     + "\uab12\uab12\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
+     + "\u0519\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
+     + "\u5305\u5305\u5305\u3e80\u5305\u5305\u5305\u5305\u5305\u3e80\u5305"
+     + "\u3e80\u4606\u4606\u4606\u4606\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80"
+     + "\u3e80\u3e80\u3e80\u3e80\u3e80\u3e80\u0298\u2a14\u2a14\u1a97\u1a97"
+     + "\u6615\u6696\u6615\u6696\u6615\u6696\u6615\u6696\u6615\u6696\u6615"
+     + "\u6696\u3e80\u3e80\u3e80\u3e80\u0298\u0298\u0298\u0298\u1a97\u1a97"
+     + "\u1a97\u0598\u0298\u0598\u3e80\u0298\u0598\u0298\u0298\u2a14\u6615"
+     + "\u6696\u6615\u6696\u6615\u6696\u0318\u0298\u0d01\u0d81\u0e01\u0e81"
+     + "\u0f01\u0f81\u1001\u1081\u1101\u1181\u1201\u1281\u1301\u1381\u1401"
+     + "\u1481\u1501\u1581\u1601\u1681\u1701\u1781\u1801\u1881\u1901\u1981"
+     + "\u6615\u0298\u6696\u1a1b\u1a97";
+ 
+   /**
+    * This is the attribute table for computing the numeric value of a
+    * character.  The value is -1 if Unicode does not define a value, -2
+    * if the value is not a positive integer, otherwise it is the value.
+    * Note that this is a signed value, but stored as an unsigned char
+    * since this is a String literal.
+    */
+   String NUM_VALUE
+     = "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\000\001\002\003\004\005\006\007"
+     + "\010\011\uffff\uffff\012\013\014\015\016\017\020"
+     + "\021\022\023\024\025\026\027\030\031\032\033"
+     + "\034\035\036\037 !\"#\uffff\uffff\012"
+     + "\013\014\015\016\017\020\021\022\023\024\025"
+     + "\026\027\030\031\032\033\034\035\036\037 "
+     + "!\"#\uffff\uffff\uffff\uffff\uffff\uffff\002\003"
+     + "\uffff\001\uffff\ufffe\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\000\001\002\003\004\005"
+     + "\006\007\010\011\uffff\uffff\uffff\uffff\000\001\002"
+     + "\003\004\005\006\007\010\011\001\002\003\004"
+     + "\uffff\020\012d\u03e8\uffff\uffff\uffff\024\036("
+     + "2<FPZ\u2710\021\022\023\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff"
+     + "\uffff\000\004\005\006\007\010\011\uffff\uffff\uffff"
+     + "\001\001\002\003\004\005\006\007\010\011\012"
+     + "\013\0142d\u01f4\u03e8\001\002\003\004\005"
+     + "\006\007\010\011\012\013\0142d\u01f4\u03e8"
+     + "\u03e8\u1388\u2710\uffff\012\013\014\015\016\017\020"
+     + "\021\022\023\024\uffff\uffff\002\003\004\005\006"
+     + "\007\010\011\012\000\001\002\003\004\005\006"
+     + "\007\010\011\012\024\036\005\006\007\010\011"
+     + "\uffff\uffff";
+ 
+   /**
+    * This is the attribute table for computing the single-character uppercase
+    * representation of a character.  The value is the signed difference
+    * between the character and its uppercase version.  Note that this is
+    * stored as an unsigned char since this is a String literal.  When
+    * capitalizing a String, you must first check if a multi-character uppercase
+    * sequence exists before using this character.
+    */
+   String UPPER
+     = "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\uffe0"
+     + "\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0"
+     + "\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0\uffe0"
+     + "\uffe0\uffe0\uffe0\000\000\000\000\000\000\000\000"
+     + "\u02e7\000\000\000\000\000\uffe0y\000\uffff\000"
+     + "\uff18\000\ufed4\000\000\000\000\000\000\000a"
+     + "\000\000\000\000\000\000\000\0008\000\uffff"
+     + "\ufffe\uffb1\000\000\000\uff2e\uff32\uff33\uff36\uff35\uff31"
+     + "\uff2f\uff2d\uff2b\uff2a\uff26\uff27\uff25\000\000T\000"
+     + "\000\000\000\000\uffda\uffdb\uffe1\uffc0\uffc1\uffc2\uffc7"
+     + "\000\uffd1\uffca\uffaa\uffb0\000\000\000\000\000\uffd0"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\uffc5\010"
+     + "\000JVd\u0080p~\010\000\011\000"
+     + "\000\ue3db\000\000\007\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\ufff0\ufff0\ufff0\ufff0\ufff0"
+     + "\ufff0\ufff0\ufff0\ufff0\ufff0\ufff0\ufff0\ufff0\ufff0\ufff0\ufff0"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\uffe6\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000";
+ 
+   /**
+    * This is the attribute table for computing the lowercase representation
+    * of a character.  The value is the signed difference between the
+    * character and its lowercase version.  Note that this is stored as an
+    * unsigned char since this is a String literal.
+    */
+   String LOWER
+     = "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "             "
+     + "             "
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000 \000\000\000\001\000\uff39\000\uff87\000\u00d2\u00ce"
+     + "\u00cdO\u00ca\u00cb\u00cf\000\u00d3\u00d1\u00d5\u00d6\u00da\u00d9\u00db"
+     + "\000\000\002\001\000\000\uff9f\uffc8\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000&"
+     + "%@?\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000P\000\0000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\ufff8"
+     + "\000\000\000\000\000\000\000\ufff8\000\uffb6\ufff7\000\uffaa"
+     + "\uff9c\000\uff90\ufff9\uff80\uff82\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\ue2a3\udf41\udfba\000\020\020\020\020\020\020\020\020"
+     + "\020\020\020\020\020\020\020\020\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\032\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000";
+ 
+   /**
+    * This is the attribute table for computing the directionality class
+    * of a character, as well as a marker of characters with a multi-character
+    * capitalization.  The direction is taken by performing a signed shift
+    * right by 2 (where a result of -1 means an unknown direction, such as
+    * for undefined characters). The lower 2 bits form a count of the
+    * additional characters that will be added to a String when performing
+    * multi-character uppercase expansion. This count is also used, along with
+    * the offset in UPPER_SPECIAL, to determine how much of UPPER_EXPAND to use
+    * when performing the case conversion. Note that this information is stored
+    * as an unsigned char since this is a String literal.
+    */
+   String DIRECTION
+     = "$,(004\024\02444\024\034\024\020\014\014\014"
+     + "\014\014\014\014\014\014\01444\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\00044\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\0344\00044"
+     + "\024\014\014\000\01444\000\001\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\ufffc\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000  \000\000\000\000\002\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000 \000\000\000\004\004\010\010\010"
+     + "\030\030\030\030\030\030\030\030\030\030\030\010$\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "44\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\001\001\001\000\001\000\000\000\000\000\000"
+     + "\000\0000$\000\0044440(8@H<D\014"
+     + "\014\014\014\014\014\014\000\000\0004\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\014\014\014\014\014"
+     + "\014\014\014\014\014\014\000\000444444444"
+     + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+     + "\000\000\000";
+ 
+   /**
+    * This is the listing of titlecase special cases (all other characters
+    * can use <code>UPPER</code> to determine their titlecase).  The listing
+    * is a sorted sequence of character pairs; converting the first character
+    * of the pair to titlecase produces the second character.
+    */
+   String TITLE
+     = "\u01c4\u01c5\u01c5\u01c5\u01c6\u01c5\u01c7\u01c8\u01c8\u01c8\u01c9"
+     + "\u01c8\u01ca\u01cb\u01cb\u01cb\u01cc\u01cb\u01f1\u01f2\u01f2\u01f2"
+     + "\u01f3\u01f2";
+ 
+   /**
+    * This is a listing of characters with multi-character uppercase sequences.
+    * A character appears in this list exactly when it has a non-zero entry
+    * in the low-order 2-bit field of DIRECTION.  The listing is a sorted
+    * sequence of pairs (hence a binary search on the even elements is an
+    * efficient way to lookup a character). The first element of a pair is the
+    * character with the expansion, and the second is the index into
+    * UPPER_EXPAND where the expansion begins. Use the 2-bit field of
+    * DIRECTION to determine where the expansion ends.
+    */
+   String UPPER_SPECIAL
+     = "\u00df\000\u0149\002\u01f0\004\u0390\006\u03b0\011"
+     + "\u0587\014\u1e96\016\u1e97\020\u1e98\022\u1e99\024"
+     + "\u1e9a\026\u1f50\030\u1f52\032\u1f54\035\u1f56 "
+     + "\u1f80#\u1f81%\u1f82'\u1f83)\u1f84+"
+     + "\u1f85-\u1f86/\u1f871\u1f883\u1f895"
+     + "\u1f8a7\u1f8b9\u1f8c;\u1f8d=\u1f8e?"
+     + "\u1f8fA\u1f90C\u1f91E\u1f92G\u1f93I"
+     + "\u1f94K\u1f95M\u1f96O\u1f97Q\u1f98S"
+     + "\u1f99U\u1f9aW\u1f9bY\u1f9c[\u1f9d]"
+     + "\u1f9e_\u1f9fa\u1fa0c\u1fa1e\u1fa2g"
+     + "\u1fa3i\u1fa4k\u1fa5m\u1fa6o\u1fa7q"
+     + "\u1fa8s\u1fa9u\u1faaw\u1faby\u1fac{"
+     + "\u1fad}\u1fae\u007f\u1faf\u0081\u1fb2\u0083\u1fb3\u0085"
+     + "\u1fb4\u0087\u1fb6\u0089\u1fb7\u008b\u1fbc\u008e\u1fc2\u0090"
+     + "\u1fc3\u0092\u1fc4\u0094\u1fc6\u0096\u1fc7\u0098\u1fcc\u009b"
+     + "\u1fd2\u009d\u1fd3\u00a0\u1fd6\u00a3\u1fd7\u00a5\u1fe2\u00a8"
+     + "\u1fe3\u00ab\u1fe4\u00ae\u1fe6\u00b0\u1fe7\u00b2\u1ff2\u00b5"
+     + "\u1ff3\u00b7\u1ff4\u00b9\u1ff6\u00bb\u1ff7\u00bd\u1ffc\u00c0"
+     + "\ufb00\u00c2\ufb01\u00c4\ufb02\u00c6\ufb03\u00c8\ufb04\u00cb"
+     + "\ufb05\u00ce\ufb06\u00d0\ufb13\u00d2\ufb14\u00d4\ufb15\u00d6"
+     + "\ufb16\u00d8\ufb17\u00da";
+ 
+   /**
+    * This is the listing of special case multi-character uppercase sequences.
+    * Characters listed in UPPER_SPECIAL index into this table to find their
+    * uppercase expansion. Remember that you must also perform special-casing
+    * on two single-character sequences in the Turkish locale, which are not
+    * covered here in CharData.
+    */
+   String UPPER_EXPAND
+     = "SS\u02bcNJ\u030c\u0399\u0308\u0301\u03a5\u0308"
+     + "\u0301\u0535\u0552H\u0331T\u0308W\u030aY\u030a"
+     + "A\u02be\u03a5\u0313\u03a5\u0313\u0300\u03a5\u0313\u0301\u03a5"
+     + "\u0313\u0342\u1f08\u0399\u1f09\u0399\u1f0a\u0399\u1f0b\u0399\u1f0c"
+     + "\u0399\u1f0d\u0399\u1f0e\u0399\u1f0f\u0399\u1f08\u0399\u1f09\u0399"
+     + "\u1f0a\u0399\u1f0b\u0399\u1f0c\u0399\u1f0d\u0399\u1f0e\u0399\u1f0f"
+     + "\u0399\u1f28\u0399\u1f29\u0399\u1f2a\u0399\u1f2b\u0399\u1f2c\u0399"
+     + "\u1f2d\u0399\u1f2e\u0399\u1f2f\u0399\u1f28\u0399\u1f29\u0399\u1f2a"
+     + "\u0399\u1f2b\u0399\u1f2c\u0399\u1f2d\u0399\u1f2e\u0399\u1f2f\u0399"
+     + "\u1f68\u0399\u1f69\u0399\u1f6a\u0399\u1f6b\u0399\u1f6c\u0399\u1f6d"
+     + "\u0399\u1f6e\u0399\u1f6f\u0399\u1f68\u0399\u1f69\u0399\u1f6a\u0399"
+     + "\u1f6b\u0399\u1f6c\u0399\u1f6d\u0399\u1f6e\u0399\u1f6f\u0399\u1fba"
+     + "\u0399\u0391\u0399\u0386\u0399\u0391\u0342\u0391\u0342\u0399\u0391"
+     + "\u0399\u1fca\u0399\u0397\u0399\u0389\u0399\u0397\u0342\u0397\u0342"
+     + "\u0399\u0397\u0399\u0399\u0308\u0300\u0399\u0308\u0301\u0399\u0342"
+     + "\u0399\u0308\u0342\u03a5\u0308\u0300\u03a5\u0308\u0301\u03a1\u0313"
+     + "\u03a5\u0342\u03a5\u0308\u0342\u1ffa\u0399\u03a9\u0399\u038f\u0399"
+     + "\u03a9\u0342\u03a9\u0342\u0399\u03a9\u0399FFFI"
+     + "FLFFIFFLSTS"
+     + "T\u0544\u0546\u0544\u0535\u0544\u053b\u054e\u0546\u0544\u053d";
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/lang/ClassHelper.java gcc-4.1.0/libjava/classpath/gnu/java/lang/ClassHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/java/lang/ClassHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/lang/ClassHelper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,177 ----
+ /* ClassHelper.java -- Utility methods to augment java.lang.Class
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.lang;
+ 
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Method;
+ import java.util.Arrays;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ /**
+  * ClassHelper has various methods that ought to have been in Class.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  */
+ public class ClassHelper
+ {
+   /**
+    * Strip the package part from the class name.
+    *
+    * @param clazz the class to get the truncated name from
+    * @return the truncated class name
+    */
+   public static String getTruncatedClassName(Class clazz)
+   {
+     return getTruncatedName(clazz.getName());
+   }
+ 
+   /**
+    * Strip the package part from the class name, or the class part from
+    * the method or field name.
+    *
+    * @param name the name to truncate
+    * @return the truncated name
+    */
+   public static String getTruncatedName(String name)
+   {
+     int lastInd = name.lastIndexOf('.');
+     if (lastInd == -1)
+       return name;
+     return name.substring(lastInd + 1);
+   }
+ 
+   /** Cache of methods found in getAllMethods(). */
+   private static Map allMethods = new HashMap();
+ 
+   /**
+    * Get all the methods, public, private and otherwise, from the class,
+    * getting them from the most recent class to find them. This may not
+    * be quite the correct approach, as this includes methods that are not
+    * inherited or accessible from clazz, so beware.
+    *
+    * @param clazz the class to start at
+    * @return all methods declared or inherited in clazz
+    */
+   public static Method[] getAllMethods(Class clazz)
+   {
+     Method[] retval = (Method[]) allMethods.get(clazz);
+     if (retval == null)
+       {
+         Set methods = new HashSet();
+         Class c = clazz;
+         while (c != null)
+           {
+             Method[] currentMethods = c.getDeclaredMethods();
+           loop:
+             for (int i = 0; i < currentMethods.length; i++)
+               {
+                 Method current = currentMethods[i];
+                 int size = methods.size();
+                 Iterator iter = methods.iterator();
+                 while (--size >= 0)
+                   {
+                     Method override = (Method) iter.next();
+                     if (current.getName().equals(override.getName())
+                         && Arrays.equals(current.getParameterTypes(),
+                                          override.getParameterTypes())
+                         && current.getReturnType() == override.getReturnType())
+                       continue loop;
+                   }
+                 methods.add(current);
+               }
+             c = c.getSuperclass();
+           }
+         retval = new Method[methods.size()];
+         methods.toArray(retval);
+         allMethods.put(clazz, retval);
+       }
+     return retval;
+   }
+ 
+   /** Cache of fields found in getAllFields(). */
+   private static Map allFields = new HashMap();
+ 
+   /**
+    * Get all the fields, public, private and otherwise, from the class,
+    * getting them from the most recent class to find them. This may not
+    * be quite the correct approach, as this includes fields that are not
+    * inherited or accessible from clazz, so beware.
+    *
+    * @param clazz the class to start at
+    * @return all fields declared or inherited in clazz
+    */
+   public static Field[] getAllFields(Class clazz)
+   {
+     Field[] retval = (Field[]) allFields.get(clazz);
+     if (retval == null)
+       {
+         Set fields = new HashSet();
+         Class c = clazz;
+         while (c != null)
+           {
+             Field[] currentFields = c.getDeclaredFields();
+           loop:
+             for (int i = 0; i < currentFields.length; i++)
+               {
+                 Field current = currentFields[i];
+                 int size = fields.size();
+                 Iterator iter = fields.iterator();
+                 while (--size >= 0)
+                   {
+                     Field override = (Field) iter.next();
+                     if (current.getName().equals(override.getName())
+                         && current.getType() == override.getType())
+                       continue loop;
+                   }
+                 fields.add(current);
+               }
+             c = c.getSuperclass();
+           }
+         retval = new Field[fields.size()];
+         fields.toArray(retval);
+         allFields.put(clazz, retval);
+       }
+     return retval;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/lang/MainThread.java gcc-4.1.0/libjava/classpath/gnu/java/lang/MainThread.java
*** gcc-4.0.2/libjava/classpath/gnu/java/lang/MainThread.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/lang/MainThread.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,83 ----
+ /* MainThread.java --
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.lang;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ 
+ /**
+  * MainThread is a Thread which uses the main() method of some class.
+  *
+  * @author John Keiser
+  * @author Tom Tromey (tromey@redhat.com)
+  */
+ public class MainThread
+ {
+   // Private data.
+   String[] args;
+   Method mainMethod;
+ 
+   public MainThread(String classname, String[] args)
+     throws ClassNotFoundException, NoSuchMethodException
+   {
+     Class found = Class.forName(classname, true,
+ 				ClassLoader.getSystemClassLoader());
+     Class[] argTypes = new Class[1];
+     argTypes[0] = args.getClass();
+     mainMethod = found.getMethod("main", argTypes);
+     this.args = args;
+   }
+ 
+   public void run()
+   {
+     try
+       {
+ 	mainMethod.invoke(null,args);
+       }
+     catch(IllegalAccessException e)
+       {
+ 	// Ignore.
+       }
+     catch(InvocationTargetException e)
+       {
+ 	// Ignore.
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/lang/package.html gcc-4.1.0/libjava/classpath/gnu/java/lang/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/lang/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/lang/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.lang package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.lang</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/lang/reflect/TypeSignature.java gcc-4.1.0/libjava/classpath/gnu/java/lang/reflect/TypeSignature.java
*** gcc-4.0.2/libjava/classpath/gnu/java/lang/reflect/TypeSignature.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/lang/reflect/TypeSignature.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,288 ----
+ /* TypeSignature.java -- Class used to compute type signatures
+    Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.lang.reflect;
+ 
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Member;
+ import java.lang.reflect.Method;
+ 
+ /**
+  * This class provides static methods that can be used to compute
+  * type-signatures of <code>Class</code>s or <code>Member</code>s.
+  * More specific methods are also provided for computing the
+  * type-signature of <code>Constructor</code>s and
+  * <code>Method</code>s.  Methods are also provided to go in the
+  * reverse direction.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  */
+ public class TypeSignature
+ {
+   /**
+    * Returns a <code>String</code> representing the type-encoding of a class.
+    * The .class file format has different encodings for classes, depending
+    * on whether it must be disambiguated from primitive types or not; hence
+    * the descriptor parameter to choose between them. If you are planning
+    * on decoding primitive types along with classes, then descriptor should
+    * be true for correct results. Type-encodings are computed as follows:
+    *
+    * <pre>
+    * boolean -> "Z"
+    * byte    -> "B"
+    * char    -> "C"
+    * double  -> "D"
+    * float   -> "F"
+    * int     -> "I"
+    * long    -> "J"
+    * short   -> "S"
+    * void    -> "V"
+    * arrays  -> "[" + descriptor format of component type
+    * object  -> class format: fully qualified name with '.' replaced by '/'
+    *            descriptor format: "L" + class format + ";"
+    * </pre>
+    *
+    * @param type the class name to encode
+    * @param descriptor true to return objects in descriptor format
+    * @return the class name, as it appears in bytecode constant pools
+    * @see #getClassForEncoding(String)
+    */
+   public static String getEncodingOfClass(String type, boolean descriptor)
+   {
+     if (! descriptor || type.charAt(0) == '[')
+       return type.replace('.', '/');
+     if (type.equals("boolean"))
+       return "Z";
+     if (type.equals("byte"))
+       return "B";
+     if (type.equals("short"))
+       return "S";
+     if (type.equals("char"))
+       return "C";
+     if (type.equals("int"))
+       return "I";
+     if (type.equals("long"))
+       return "J";
+     if (type.equals("float"))
+       return "F";
+     if (type.equals("double"))
+       return "D";
+     if (type.equals("void"))
+       return "V";
+     return 'L' + type.replace('.', '/') + ';';
+   }
+ 
+   /**
+    * Gets the descriptor encoding for a class.
+    *
+    * @param clazz the class to encode
+    * @param descriptor true to return objects in descriptor format
+    * @return the class name, as it appears in bytecode constant pools
+    * @see #getEncodingOfClass(String, boolean)
+    */
+   public static String getEncodingOfClass(Class clazz, boolean descriptor)
+   {
+     return getEncodingOfClass(clazz.getName(), descriptor);
+   }
+ 
+   /**
+    * Gets the descriptor encoding for a class.
+    *
+    * @param clazz the class to encode
+    * @return the class name, as it appears in bytecode constant pools
+    * @see #getEncodingOfClass(String, boolean)
+    */
+   public static String getEncodingOfClass(Class clazz)
+   {
+     return getEncodingOfClass(clazz.getName(), true);
+   }
+ 
+ 
+   /**
+    * This function is the inverse of <code>getEncodingOfClass</code>. This
+    * accepts both object and descriptor formats, but must know which style
+    * of string is being passed in (usually, descriptor should be true). In
+    * descriptor format, "I" is treated as int.class, in object format, it
+    * is treated as a class named I in the unnamed package. This method is
+    * strictly equivalent to {@link #getClassForEncoding(java.lang.String, boolean, java.lang.ClassLoader)}
+    * with a class loader equal to <code>null</code>. In that case, it
+    * uses the default class loader on the calling stack.
+    *
+    * @param type_code the class name to decode
+    * @param descriptor if the string is in descriptor format
+    * @return the corresponding Class object
+    * @throws ClassNotFoundException if the class cannot be located
+    * @see #getEncodingOfClass(Class, boolean)
+    */
+   public static Class getClassForEncoding(String type_code, boolean descriptor)
+     throws ClassNotFoundException
+   {
+     return getClassForEncoding(type_code, descriptor, null);
+   }
+ 
+   /**
+    * This function is the inverse of <code>getEncodingOfClass</code>. This
+    * accepts both object and descriptor formats, but must know which style
+    * of string is being passed in (usually, descriptor should be true). In
+    * descriptor format, "I" is treated as int.class, in object format, it
+    * is treated as a class named I in the unnamed package.
+    *
+    * @param type_code The class name to decode.
+    * @param descriptor If the string is in descriptor format.
+    * @param loader The class loader when resolving generic object name. If
+    * <code>loader</code> is null then it uses the default class loader on the
+    * calling stack.
+    * @return the corresponding Class object.
+    * @throws ClassNotFoundException if the class cannot be located.
+    * @see #getEncodingOfClass(Class, boolean)
+    * @see #getClassForEncoding(String, boolean)
+    */
+   public static Class getClassForEncoding(String type_code, boolean descriptor,
+ 		 			  ClassLoader loader)
+     throws ClassNotFoundException
+   {
+     if (descriptor)
+       {
+         switch (type_code.charAt(0))
+           {
+           case 'B':
+             return byte.class;
+           case 'C':
+             return char.class;
+           case 'D':
+             return double.class;
+           case 'F':
+             return float.class;
+           case 'I':
+             return int.class;
+           case 'J':
+             return long.class;
+           case 'S':
+             return short.class;
+           case 'V':
+             return void.class;
+           case 'Z':
+             return boolean.class;
+           default:
+             throw new ClassNotFoundException("Invalid class name: "
+                                              + type_code);
+           case 'L':
+             type_code = type_code.substring(1, type_code.length() - 1);
+             // Fallthrough.
+           case '[':
+           }
+       }
+     return Class.forName(type_code.replace('/', '.'), true, loader);
+   }
+ 
+   /**
+    * Gets the Class object for a type name.
+    *
+    * @param type_code the class name to decode
+    * @return the corresponding Class object
+    * @throws ClassNotFoundException if the class cannot be located
+    * @see #getClassForEncoding(String, boolean)
+    */
+   public static Class getClassForEncoding(String type_code)
+     throws ClassNotFoundException
+   {
+     return getClassForEncoding(type_code, true);
+   }
+ 
+   /**
+    * Returns a <code>String</code> representing the type-encoding of a
+    * method.  The type-encoding of a method is:
+    *
+    * "(" + parameter type descriptors + ")" + return type descriptor
+    *
+    * XXX This could be faster if it were implemented natively.
+    *
+    * @param m the method to encode
+    * @return the encoding
+    */
+   public static String getEncodingOfMethod(Method m)
+   {
+     Class[] paramTypes = m.getParameterTypes();
+     StringBuffer buf = new StringBuffer().append('(');
+     for (int i = 0; i < paramTypes.length; i++)
+       buf.append(getEncodingOfClass(paramTypes[i].getName(), true));
+     buf.append(')').append(getEncodingOfClass(m.getReturnType().getName(),
+                                               true));
+     return buf.toString();
+   }
+ 
+   /**
+    * Returns a <code>String</code> representing the type-encoding of a
+    * constructor. The type-encoding of a method is:
+    *
+    * "(" + parameter type descriptors + ")V"
+    *
+    * XXX This could be faster if it were implemented natively.
+    *
+    * @param c the constructor to encode
+    * @return the encoding
+    */
+   public static String getEncodingOfConstructor(Constructor c)
+   {
+     Class[] paramTypes = c.getParameterTypes();
+     StringBuffer buf = new StringBuffer().append('(');
+     for (int i = 0; i < paramTypes.length; i++)
+       buf.append(getEncodingOfClass(paramTypes[i].getName(), true));
+     buf.append(")V");
+     return buf.toString();
+   }
+ 
+   /**
+    * Returns a <code>String</code> representing the type-encoding of a
+    * class member. This appropriately handles Constructors, Methods, and
+    * Fields.
+    *
+    * @param mem the member to encode
+    * @return the encoding
+    */
+   public static String getEncodingOfMember(Member mem)
+   {
+     if (mem instanceof Constructor)
+       return getEncodingOfConstructor((Constructor) mem);
+     if (mem instanceof Method)
+       return getEncodingOfMethod((Method) mem);
+     else // Field
+       return getEncodingOfClass(((Field) mem).getType().getName(), true);
+   }
+ } // class TypeSignature
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/lang/reflect/package.html gcc-4.1.0/libjava/classpath/gnu/java/lang/reflect/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/lang/reflect/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/lang/reflect/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.lang.reflect package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.lang.reflect</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/locale/LocaleHelper.java gcc-4.1.0/libjava/classpath/gnu/java/locale/LocaleHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/java/locale/LocaleHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/locale/LocaleHelper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,158 ----
+ /* LocaleHelper.java -- helper routines for localization
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.locale;
+ 
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * This class provides common helper methods
+  * for handling localized data.
+  *
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  *
+  * @see java.util.Locale
+  * @see java.util.ResourceBundle
+  */
+ public class LocaleHelper
+ {
+   /**
+    * This method is used by the localized name lookup methods to retrieve
+    * the localized name of a particular piece of locale data.    
+    * If the display name can not be localized to the supplied
+    * locale, it will fall back on other output in the following order:
+    *
+    * <ul>
+    * <li>the localized name in the default locale</li>
+    * <li>the localized name in English (optional)</li>
+    * <li>the localized name in the root locale bundle (optional)</li>
+    * <li>the localized input string</li>
+    * </ul>
+    * <p>
+    * If the supplied key is merely the empty string, then the empty string is
+    * returned.
+    * </p>
+    *
+    * @param inLocale the locale to use for formatting the display string.
+    * @param key the locale data used as a key to the localized lookup tables.
+    * @param name the name of the hashtable containing the localized data.
+    * @param checkEnglish true if the method should fall back on data
+    *        from the English locale.
+    * @param checkRoot true if the method should fall back on data from the
+    *        unlocalized root locale.
+    * @return a <code>String</code>, hopefully containing the localized
+    *         variant of the input data.
+    * @throws NullPointerException if <code>inLocale</code> is null. 
+    */
+   public static String getLocalizedString(Locale inLocale, String key,
+ 					  String name, boolean checkEnglish,
+ 					  boolean checkRoot)
+   {
+     String localizedString;
+     String property;
+ 
+     if (key.equals(""))
+       return "";
+     property = name + "." + key;
+     /* Localize to inLocale */
+     try
+       {
+         localizedString =
+ 	  ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+ 				   inLocale).getString(property);
+       }
+     catch (MissingResourceException exception)
+       {
+ 	localizedString = null;
+       }
+     /* Localize to default locale */
+     if (localizedString == null)
+       {
+ 	try 
+ 	  {
+ 	    ResourceBundle bundle;
+ 	    
+ 	    bundle = 
+ 	      ResourceBundle.getBundle("gnu.java.locale.LocaleInformation");
+ 	    localizedString = bundle.getString(property);
+ 	  }
+ 	catch (MissingResourceException exception)
+ 	  {
+ 	    localizedString = null;
+ 	  }
+       }
+     /* Localize to English */
+     if (localizedString == null && checkEnglish)
+       {
+ 	try
+ 	  {
+ 	    localizedString = 
+ 	      ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+ 				       Locale.ENGLISH).getString(property);
+ 	  }
+ 	catch (MissingResourceException exception)
+ 	  {
+ 	    localizedString = null;
+ 	  }
+       }
+     /* Return unlocalized version */
+     if (localizedString == null && checkRoot)
+       {
+ 	try
+ 	  {
+ 	    localizedString = 
+ 	      ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+ 				       new Locale("","","")
+ 				       ).getString(property);
+ 	  }
+ 	catch (MissingResourceException exception)
+ 	  {
+ 	    localizedString = null;
+ 	  }
+       }
+     /* Return original input string */
+     if (localizedString == null)
+       {
+ 	localizedString = key;
+       }
+     return localizedString;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/locale/package.html gcc-4.1.0/libjava/classpath/gnu/java/locale/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/locale/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/locale/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.locale package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.locale</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/math/MPN.java gcc-4.1.0/libjava/classpath/gnu/java/math/MPN.java
*** gcc-4.0.2/libjava/classpath/gnu/java/math/MPN.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/math/MPN.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,771 ----
+ /* gnu.java.math.MPN
+    Copyright (C) 1999, 2000, 2001, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ // Included from Kawa 1.6.62 with permission of the author,
+ // Per Bothner <per@bothner.com>.
+ 
+ package gnu.java.math;
+ 
+ /** This contains various low-level routines for unsigned bigints.
+  * The interfaces match the mpn interfaces in gmp,
+  * so it should be easy to replace them with fast native functions
+  * that are trivial wrappers around the mpn_ functions in gmp
+  * (at least on platforms that use 32-bit "limbs").
+  */
+ 
+ public class MPN
+ {
+   /** Add x[0:size-1] and y, and write the size least
+    * significant words of the result to dest.
+    * Return carry, either 0 or 1.
+    * All values are unsigned.
+    * This is basically the same as gmp's mpn_add_1. */
+   public static int add_1 (int[] dest, int[] x, int size, int y)
+   {
+     long carry = (long) y & 0xffffffffL;
+     for (int i = 0;  i < size;  i++)
+       {
+ 	carry += ((long) x[i] & 0xffffffffL);
+ 	dest[i] = (int) carry;
+ 	carry >>= 32;
+       }
+     return (int) carry;
+   }
+ 
+   /** Add x[0:len-1] and y[0:len-1] and write the len least
+    * significant words of the result to dest[0:len-1].
+    * All words are treated as unsigned.
+    * @return the carry, either 0 or 1
+    * This function is basically the same as gmp's mpn_add_n.
+    */
+   public static int add_n (int dest[], int[] x, int[] y, int len)
+   {
+     long carry = 0;
+     for (int i = 0; i < len;  i++)
+       {
+ 	carry += ((long) x[i] & 0xffffffffL)
+ 	  + ((long) y[i] & 0xffffffffL);
+ 	dest[i] = (int) carry;
+ 	carry >>>= 32;
+       }
+     return (int) carry;
+   }
+ 
+   /** Subtract Y[0:size-1] from X[0:size-1], and write
+    * the size least significant words of the result to dest[0:size-1].
+    * Return borrow, either 0 or 1.
+    * This is basically the same as gmp's mpn_sub_n function.
+    */
+ 
+   public static int sub_n (int[] dest, int[] X, int[] Y, int size)
+   {
+     int cy = 0;
+     for (int i = 0;  i < size;  i++)
+       {
+ 	int y = Y[i];
+ 	int x = X[i];
+ 	y += cy;	/* add previous carry to subtrahend */
+ 	// Invert the high-order bit, because: (unsigned) X > (unsigned) Y
+ 	// iff: (int) (X^0x80000000) > (int) (Y^0x80000000).
+ 	cy = (y^0x80000000) < (cy^0x80000000) ? 1 : 0;
+ 	y = x - y;
+ 	cy += (y^0x80000000) > (x ^ 0x80000000) ? 1 : 0;
+ 	dest[i] = y;
+       }
+     return cy;
+   }
+ 
+   /** Multiply x[0:len-1] by y, and write the len least
+    * significant words of the product to dest[0:len-1].
+    * Return the most significant word of the product.
+    * All values are treated as if they were unsigned
+    * (i.e. masked with 0xffffffffL).
+    * OK if dest==x (not sure if this is guaranteed for mpn_mul_1).
+    * This function is basically the same as gmp's mpn_mul_1.
+    */
+ 
+   public static int mul_1 (int[] dest, int[] x, int len, int y)
+   {
+     long yword = (long) y & 0xffffffffL;
+     long carry = 0;
+     for (int j = 0;  j < len; j++)
+       {
+         carry += ((long) x[j] & 0xffffffffL) * yword;
+         dest[j] = (int) carry;
+         carry >>>= 32;
+       }
+     return (int) carry;
+   }
+ 
+   /**
+    * Multiply x[0:xlen-1] and y[0:ylen-1], and
+    * write the result to dest[0:xlen+ylen-1].
+    * The destination has to have space for xlen+ylen words,
+    * even if the result might be one limb smaller.
+    * This function requires that xlen >= ylen.
+    * The destination must be distinct from either input operands.
+    * All operands are unsigned.
+    * This function is basically the same gmp's mpn_mul. */
+ 
+   public static void mul (int[] dest,
+ 			  int[] x, int xlen,
+ 			  int[] y, int ylen)
+   {
+     dest[xlen] = MPN.mul_1 (dest, x, xlen, y[0]);
+ 
+     for (int i = 1;  i < ylen; i++)
+       {
+ 	long yword = (long) y[i] & 0xffffffffL;
+ 	long carry = 0;
+ 	for (int j = 0;  j < xlen; j++)
+ 	  {
+ 	    carry += ((long) x[j] & 0xffffffffL) * yword
+ 	      + ((long) dest[i+j] & 0xffffffffL);
+ 	    dest[i+j] = (int) carry;
+ 	    carry >>>= 32;
+ 	  }
+ 	dest[i+xlen] = (int) carry;
+       }
+   }
+ 
+   /* Divide (unsigned long) N by (unsigned int) D.
+    * Returns (remainder << 32)+(unsigned int)(quotient).
+    * Assumes (unsigned int)(N>>32) < (unsigned int)D.
+    * Code transcribed from gmp-2.0's mpn_udiv_w_sdiv function.
+    */
+   public static long udiv_qrnnd (long N, int D)
+   {
+     long q, r;
+     long a1 = N >>> 32;
+     long a0 = N & 0xffffffffL;
+     if (D >= 0)
+       {
+ 	if (a1 < ((D - a1 - (a0 >>> 31)) & 0xffffffffL))
+ 	  {
+ 	    /* dividend, divisor, and quotient are nonnegative */
+ 	    q = N / D;
+ 	    r = N % D;
+ 	  }
+ 	else
+ 	  {
+ 	    /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d */
+ 	    long c = N - ((long) D << 31);
+ 	    /* Divide (c1*2^32 + c0) by d */
+ 	    q = c / D;
+ 	    r = c % D;
+ 	    /* Add 2^31 to quotient */
+ 	    q += 1 << 31;
+ 	  }
+       }
+     else
+       {
+ 	long b1 = D >>> 1;	/* d/2, between 2^30 and 2^31 - 1 */
+ 	//long c1 = (a1 >> 1); /* A/2 */
+ 	//int c0 = (a1 << 31) + (a0 >> 1);
+ 	long c = N >>> 1;
+ 	if (a1 < b1 || (a1 >> 1) < b1)
+ 	  {
+ 	    if (a1 < b1)
+ 	      {
+ 		q = c / b1;
+ 		r = c % b1;
+ 	      }
+ 	    else /* c1 < b1, so 2^31 <= (A/2)/b1 < 2^32 */
+ 	      {
+ 		c = ~(c - (b1 << 32));
+ 		q = c / b1;  /* (A/2) / (d/2) */
+ 		r = c % b1;
+ 		q = (~q) & 0xffffffffL;    /* (A/2)/b1 */
+ 		r = (b1 - 1) - r; /* r < b1 => new r >= 0 */
+ 	      }
+ 	    r = 2 * r + (a0 & 1);
+ 	    if ((D & 1) != 0)
+ 	      {
+ 		if (r >= q) {
+ 		        r = r - q;
+ 		} else if (q - r <= ((long) D & 0xffffffffL)) {
+                        r = r - q + D;
+         		q -= 1;
+ 		} else {
+                        r = r - q + D + D;
+         		q -= 2;
+ 		}
+ 	      }
+ 	  }
+ 	else				/* Implies c1 = b1 */
+ 	  {				/* Hence a1 = d - 1 = 2*b1 - 1 */
+ 	    if (a0 >= ((long)(-D) & 0xffffffffL))
+ 	      {
+ 		q = -1;
+ 	        r = a0 + D;
+  	      }
+ 	    else
+ 	      {
+ 		q = -2;
+ 	        r = a0 + D + D;
+ 	      }
+ 	  }
+       }
+ 
+     return (r << 32) | (q & 0xFFFFFFFFl);
+   }
+ 
+     /** Divide divident[0:len-1] by (unsigned int)divisor.
+      * Write result into quotient[0:len-1.
+      * Return the one-word (unsigned) remainder.
+      * OK for quotient==dividend.
+      */
+ 
+   public static int divmod_1 (int[] quotient, int[] dividend,
+ 			      int len, int divisor)
+   {
+     int i = len - 1;
+     long r = dividend[i];
+     if ((r & 0xffffffffL) >= ((long)divisor & 0xffffffffL))
+       r = 0;
+     else
+       {
+ 	quotient[i--] = 0;
+ 	r <<= 32;
+       }
+ 
+     for (;  i >= 0;  i--)
+       {
+ 	int n0 = dividend[i];
+ 	r = (r & ~0xffffffffL) | (n0 & 0xffffffffL);
+ 	r = udiv_qrnnd (r, divisor);
+ 	quotient[i] = (int) r;
+       }
+     return (int)(r >> 32);
+   }
+ 
+   /* Subtract x[0:len-1]*y from dest[offset:offset+len-1].
+    * All values are treated as if unsigned.
+    * @return the most significant word of
+    * the product, minus borrow-out from the subtraction.
+    */
+   public static int submul_1 (int[] dest, int offset, int[] x, int len, int y)
+   {
+     long yl = (long) y & 0xffffffffL;
+     int carry = 0;
+     int j = 0;
+     do
+       {
+ 	long prod = ((long) x[j] & 0xffffffffL) * yl;
+ 	int prod_low = (int) prod;
+ 	int prod_high = (int) (prod >> 32);
+ 	prod_low += carry;
+ 	// Invert the high-order bit, because: (unsigned) X > (unsigned) Y
+ 	// iff: (int) (X^0x80000000) > (int) (Y^0x80000000).
+ 	carry = ((prod_low ^ 0x80000000) < (carry ^ 0x80000000) ? 1 : 0)
+ 	  + prod_high;
+ 	int x_j = dest[offset+j];
+ 	prod_low = x_j - prod_low;
+ 	if ((prod_low ^ 0x80000000) > (x_j ^ 0x80000000))
+ 	  carry++;
+ 	dest[offset+j] = prod_low;
+       }
+     while (++j < len);
+     return carry;
+   }
+ 
+   /** Divide zds[0:nx] by y[0:ny-1].
+    * The remainder ends up in zds[0:ny-1].
+    * The quotient ends up in zds[ny:nx].
+    * Assumes:  nx>ny.
+    * (int)y[ny-1] < 0  (i.e. most significant bit set)
+    */
+ 
+   public static void divide (int[] zds, int nx, int[] y, int ny)
+   {
+     // This is basically Knuth's formulation of the classical algorithm,
+     // but translated from in scm_divbigbig in Jaffar's SCM implementation.
+ 
+     // Correspondance with Knuth's notation:
+     // Knuth's u[0:m+n] == zds[nx:0].
+     // Knuth's v[1:n] == y[ny-1:0]
+     // Knuth's n == ny.
+     // Knuth's m == nx-ny.
+     // Our nx == Knuth's m+n.
+ 
+     // Could be re-implemented using gmp's mpn_divrem:
+     // zds[nx] = mpn_divrem (&zds[ny], 0, zds, nx, y, ny).
+ 
+     int j = nx;
+     do
+       {                          // loop over digits of quotient
+ 	// Knuth's j == our nx-j.
+ 	// Knuth's u[j:j+n] == our zds[j:j-ny].
+ 	int qhat;  // treated as unsigned
+ 	if (zds[j]==y[ny-1])
+ 	  qhat = -1;  // 0xffffffff
+ 	else
+ 	  {
+ 	    long w = (((long)(zds[j])) << 32) + ((long)zds[j-1] & 0xffffffffL);
+ 	    qhat = (int) udiv_qrnnd (w, y[ny-1]);
+ 	  }
+ 	if (qhat != 0)
+ 	  {
+ 	    int borrow = submul_1 (zds, j - ny, y, ny, qhat);
+ 	    int save = zds[j];
+ 	    long num = ((long)save&0xffffffffL) - ((long)borrow&0xffffffffL);
+             while (num != 0)
+ 	      {
+ 		qhat--;
+ 		long carry = 0;
+ 		for (int i = 0;  i < ny; i++)
+ 		  {
+ 		    carry += ((long) zds[j-ny+i] & 0xffffffffL)
+ 		      + ((long) y[i] & 0xffffffffL);
+ 		    zds[j-ny+i] = (int) carry;
+ 		    carry >>>= 32;
+ 		  }
+ 		zds[j] += carry;
+ 		num = carry - 1;
+ 	      }
+ 	  }
+ 	zds[j] = qhat;
+       } while (--j >= ny);
+   }
+ 
+   /** Number of digits in the conversion base that always fits in a word.
+    * For example, for base 10 this is 9, since 10**9 is the
+    * largest number that fits into a words (assuming 32-bit words).
+    * This is the same as gmp's __mp_bases[radix].chars_per_limb.
+    * @param radix the base
+    * @return number of digits */
+   public static int chars_per_word (int radix)
+   {
+     if (radix < 10)
+       {
+ 	if (radix < 8)
+ 	  {
+ 	    if (radix <= 2)
+ 	      return 32;
+ 	    else if (radix == 3)
+ 	      return 20;
+ 	    else if (radix == 4)
+ 	      return 16;
+ 	    else
+ 	      return 18 - radix;
+ 	  }
+ 	else
+ 	  return 10;
+       }
+     else if (radix < 12)
+       return 9;
+     else if (radix <= 16)
+       return 8;
+     else if (radix <= 23)
+       return 7;
+     else if (radix <= 40)
+       return 6;
+     // The following are conservative, but we don't care.
+     else if (radix <= 256)
+       return 4;
+     else
+       return 1;
+   }
+ 
+   /** Count the number of leading zero bits in an int. */
+   public static int count_leading_zeros (int i)
+   {
+     if (i == 0)
+       return 32;
+     int count = 0;
+     for (int k = 16;  k > 0;  k = k >> 1) {
+       int j = i >>> k;
+       if (j == 0)
+ 	count += k;
+       else
+ 	i = j;
+     }
+     return count;
+   }
+ 
+   public static int set_str (int dest[], byte[] str, int str_len, int base)
+   {
+     int size = 0;
+     if ((base & (base - 1)) == 0)
+       {
+ 	// The base is a power of 2.  Read the input string from
+ 	// least to most significant character/digit.  */
+ 
+ 	int next_bitpos = 0;
+ 	int bits_per_indigit = 0;
+ 	for (int i = base; (i >>= 1) != 0; ) bits_per_indigit++;
+ 	int res_digit = 0;
+ 
+ 	for (int i = str_len;  --i >= 0; )
+ 	  {
+ 	    int inp_digit = str[i];
+ 	    res_digit |= inp_digit << next_bitpos;
+ 	    next_bitpos += bits_per_indigit;
+ 	    if (next_bitpos >= 32)
+ 	      {
+ 		dest[size++] = res_digit;
+ 		next_bitpos -= 32;
+ 		res_digit = inp_digit >> (bits_per_indigit - next_bitpos);
+ 	      }
+ 	  }
+ 
+ 	if (res_digit != 0)
+ 	  dest[size++] = res_digit;
+       }
+     else
+       {
+ 	// General case.  The base is not a power of 2.
+ 	int indigits_per_limb = MPN.chars_per_word (base);
+ 	int str_pos = 0;
+ 
+ 	while (str_pos < str_len)
+ 	  {
+ 	    int chunk = str_len - str_pos;
+ 	    if (chunk > indigits_per_limb)
+ 	      chunk = indigits_per_limb;
+ 	    int res_digit = str[str_pos++];
+ 	    int big_base = base;
+ 
+ 	    while (--chunk > 0)
+ 	      {
+ 		res_digit = res_digit * base + str[str_pos++];
+ 		big_base *= base;
+ 	      }
+ 
+ 	    int cy_limb;
+ 	    if (size == 0)
+ 	      cy_limb = res_digit;
+ 	    else
+ 	      {
+ 		cy_limb = MPN.mul_1 (dest, dest, size, big_base);
+ 		cy_limb += MPN.add_1 (dest, dest, size, res_digit);
+ 	      }
+ 	    if (cy_limb != 0)
+ 	      dest[size++] = cy_limb;
+ 	  }
+        }
+     return size;
+   }
+ 
+   /** Compare x[0:size-1] with y[0:size-1], treating them as unsigned integers.
+    * @result -1, 0, or 1 depending on if x&lt;y, x==y, or x&gt;y.
+    * This is basically the same as gmp's mpn_cmp function.
+    */
+   public static int cmp (int[] x, int[] y, int size)
+   {
+     while (--size >= 0)
+       {
+ 	int x_word = x[size];
+ 	int y_word = y[size];
+ 	if (x_word != y_word)
+ 	  {
+ 	    // Invert the high-order bit, because:
+ 	    // (unsigned) X > (unsigned) Y iff
+ 	    // (int) (X^0x80000000) > (int) (Y^0x80000000).
+ 	    return (x_word ^ 0x80000000) > (y_word ^0x80000000) ? 1 : -1;
+ 	  }
+       }
+     return 0;
+   }
+ 
+   /**
+    * Compare x[0:xlen-1] with y[0:ylen-1], treating them as unsigned integers.
+    * 
+    * @return -1, 0, or 1 depending on if x&lt;y, x==y, or x&gt;y.
+    */
+   public static int cmp (int[] x, int xlen, int[] y, int ylen)
+   {
+     return xlen > ylen ? 1 : xlen < ylen ? -1 : cmp (x, y, xlen);
+   }
+ 
+   /**
+    * Shift x[x_start:x_start+len-1] count bits to the "right"
+    * (i.e. divide by 2**count).
+    * Store the len least significant words of the result at dest.
+    * The bits shifted out to the right are returned.
+    * OK if dest==x.
+    * Assumes: 0 &lt; count &lt; 32
+    */
+   public static int rshift (int[] dest, int[] x, int x_start,
+ 			    int len, int count)
+   {
+     int count_2 = 32 - count;
+     int low_word = x[x_start];
+     int retval = low_word << count_2;
+     int i = 1;
+     for (; i < len;  i++)
+       {
+ 	int high_word = x[x_start+i];
+ 	dest[i-1] = (low_word >>> count) | (high_word << count_2);
+ 	low_word = high_word;
+       }
+     dest[i-1] = low_word >>> count;
+     return retval;
+   }
+ 
+   /**
+    * Shift x[x_start:x_start+len-1] count bits to the "right"
+    * (i.e. divide by 2**count).
+    * Store the len least significant words of the result at dest.
+    * OK if dest==x.
+    * Assumes: 0 &lt;= count &lt; 32
+    * Same as rshift, but handles count==0 (and has no return value).
+    */
+   public static void rshift0 (int[] dest, int[] x, int x_start,
+ 			      int len, int count)
+   {
+     if (count > 0)
+       rshift(dest, x, x_start, len, count);
+     else
+       for (int i = 0;  i < len;  i++)
+ 	dest[i] = x[i + x_start];
+   }
+ 
+   /** Return the long-truncated value of right shifting.
+   * @param x a two's-complement "bignum"
+   * @param len the number of significant words in x
+   * @param count the shift count
+   * @return (long)(x[0..len-1] &gt;&gt; count).
+   */
+   public static long rshift_long (int[] x, int len, int count)
+   {
+     int wordno = count >> 5;
+     count &= 31;
+     int sign = x[len-1] < 0 ? -1 : 0;
+     int w0 = wordno >= len ? sign : x[wordno];
+     wordno++;
+     int w1 = wordno >= len ? sign : x[wordno];
+     if (count != 0)
+       {
+ 	wordno++;
+ 	int w2 = wordno >= len ? sign : x[wordno];
+ 	w0 = (w0 >>> count) | (w1 << (32-count));
+ 	w1 = (w1 >>> count) | (w2 << (32-count));
+       }
+     return ((long)w1 << 32) | ((long)w0 & 0xffffffffL);
+   }
+ 
+   /* Shift x[0:len-1] left by count bits, and store the len least
+    * significant words of the result in dest[d_offset:d_offset+len-1].
+    * Return the bits shifted out from the most significant digit.
+    * Assumes 0 &lt; count &lt; 32.
+    * OK if dest==x.
+    */
+ 
+   public static int lshift (int[] dest, int d_offset,
+ 			    int[] x, int len, int count)
+   {
+     int count_2 = 32 - count;
+     int i = len - 1;
+     int high_word = x[i];
+     int retval = high_word >>> count_2;
+     d_offset++;
+     while (--i >= 0)
+       {
+ 	int low_word = x[i];
+ 	dest[d_offset+i] = (high_word << count) | (low_word >>> count_2);
+ 	high_word = low_word;
+       }
+     dest[d_offset+i] = high_word << count;
+     return retval;
+   }
+ 
+   /** Return least i such that word &amp; (1&lt;&lt;i). Assumes word!=0. */
+ 
+   public static int findLowestBit (int word)
+   {
+     int i = 0;
+     while ((word & 0xF) == 0)
+       {
+ 	word >>= 4;
+ 	i += 4;
+       }
+     if ((word & 3) == 0)
+       {
+ 	word >>= 2;
+ 	i += 2;
+       }
+     if ((word & 1) == 0)
+       i += 1;
+     return i;
+   }
+ 
+   /** Return least i such that words &amp; (1&lt;&lt;i). Assumes there is such an i. */
+ 
+   public static int findLowestBit (int[] words)
+   {
+     for (int i = 0;  ; i++)
+       {
+ 	if (words[i] != 0)
+ 	  return 32 * i + findLowestBit (words[i]);
+       }
+   }
+ 
+   /** Calculate Greatest Common Divisior of x[0:len-1] and y[0:len-1].
+     * Assumes both arguments are non-zero.
+     * Leaves result in x, and returns len of result.
+     * Also destroys y (actually sets it to a copy of the result). */
+ 
+   public static int gcd (int[] x, int[] y, int len)
+   {
+     int i, word;
+     // Find sh such that both x and y are divisible by 2**sh.
+     for (i = 0; ; i++)
+       {
+ 	word = x[i] | y[i];
+ 	if (word != 0)
+ 	  {
+ 	    // Must terminate, since x and y are non-zero.
+ 	    break;
+ 	  }
+       }
+     int initShiftWords = i;
+     int initShiftBits = findLowestBit (word);
+     // Logically: sh = initShiftWords * 32 + initShiftBits
+ 
+     // Temporarily devide both x and y by 2**sh.
+     len -= initShiftWords;
+     MPN.rshift0 (x, x, initShiftWords, len, initShiftBits);
+     MPN.rshift0 (y, y, initShiftWords, len, initShiftBits);
+ 
+     int[] odd_arg; /* One of x or y which is odd. */
+     int[] other_arg; /* The other one can be even or odd. */
+     if ((x[0] & 1) != 0)
+       {
+ 	odd_arg = x;
+ 	other_arg = y;
+       }
+     else
+       {
+ 	odd_arg = y;
+ 	other_arg = x;
+       }
+ 
+     for (;;)
+       {
+ 	// Shift other_arg until it is odd; this doesn't
+ 	// affect the gcd, since we divide by 2**k, which does not
+ 	// divide odd_arg.
+ 	for (i = 0; other_arg[i] == 0; ) i++;
+ 	if (i > 0)
+ 	  {
+ 	    int j;
+ 	    for (j = 0; j < len-i; j++)
+ 		other_arg[j] = other_arg[j+i];
+ 	    for ( ; j < len; j++)
+ 	      other_arg[j] = 0;
+ 	  }
+ 	i = findLowestBit(other_arg[0]);
+ 	if (i > 0)
+ 	  MPN.rshift (other_arg, other_arg, 0, len, i);
+ 
+ 	// Now both odd_arg and other_arg are odd.
+ 
+ 	// Subtract the smaller from the larger.
+ 	// This does not change the result, since gcd(a-b,b)==gcd(a,b).
+ 	i = MPN.cmp(odd_arg, other_arg, len);
+ 	if (i == 0)
+ 	    break;
+ 	if (i > 0)
+ 	  { // odd_arg > other_arg
+ 	    MPN.sub_n (odd_arg, odd_arg, other_arg, len);
+ 	    // Now odd_arg is even, so swap with other_arg;
+ 	    int[] tmp = odd_arg; odd_arg = other_arg; other_arg = tmp;
+ 	  }
+ 	else
+ 	  { // other_arg > odd_arg
+ 	    MPN.sub_n (other_arg, other_arg, odd_arg, len);
+ 	}
+ 	while (odd_arg[len-1] == 0 && other_arg[len-1] == 0)
+ 	  len--;
+     }
+     if (initShiftWords + initShiftBits > 0)
+       {
+ 	if (initShiftBits > 0)
+ 	  {
+ 	    int sh_out = MPN.lshift (x, initShiftWords, x, len, initShiftBits);
+ 	    if (sh_out != 0)
+ 	      x[(len++)+initShiftWords] = sh_out;
+ 	  }
+ 	else
+ 	  {
+ 	    for (i = len; --i >= 0;)
+ 	      x[i+initShiftWords] = x[i];
+ 	  }
+ 	for (i = initShiftWords;  --i >= 0; )
+ 	  x[i] = 0;
+ 	len += initShiftWords;
+       }
+     return len;
+   }
+ 
+   public static int intLength (int i)
+   {
+     return 32 - count_leading_zeros (i < 0 ? ~i : i);
+   }
+ 
+   /** Calcaulte the Common Lisp "integer-length" function.
+    * Assumes input is canonicalized:  len==BigInteger.wordsNeeded(words,len) */
+   public static int intLength (int[] words, int len)
+   {
+     len--;
+     return intLength (words[len]) + 32 * len;
+   }
+ 
+   /* DEBUGGING:
+   public static void dprint (BigInteger x)
+   {
+     if (x.words == null)
+       System.err.print(Long.toString((long) x.ival & 0xffffffffL, 16));
+     else
+       dprint (System.err, x.words, x.ival);
+   }
+   public static void dprint (int[] x) { dprint (System.err, x, x.length); }
+   public static void dprint (int[] x, int len) { dprint (System.err, x, len); }
+   public static void dprint (java.io.PrintStream ps, int[] x, int len)
+   {
+     ps.print('(');
+     for (int i = 0;  i < len; i++)
+       {
+ 	if (i > 0)
+ 	  ps.print (' ');
+ 	ps.print ("#x" + Long.toString ((long) x[i] & 0xffffffffL, 16));
+       }
+     ps.print(')');
+   }
+   */
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/math/package.html gcc-4.1.0/libjava/classpath/gnu/java/math/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/math/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/math/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.math package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.math</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/BASE64.java gcc-4.1.0/libjava/classpath/gnu/java/net/BASE64.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/BASE64.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/BASE64.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,190 ----
+ /* BASE.java --
+    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net;
+ 
+ /**
+  * Encodes and decodes text according to the BASE64 encoding.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public final class BASE64
+ {
+   private static final byte[] src = {
+     0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a,
+     0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54,
+     0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x61, 0x62, 0x63, 0x64,
+     0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e,
+     0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
+     0x79, 0x7a, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+     0x38, 0x39, 0x2b, 0x2f
+   };
+ 
+   private static final byte[] dst;
+   static
+   {
+     dst = new byte[0x100];
+     for (int i = 0x0; i < 0xff; i++)
+       {
+         dst[i] = -1;
+       }
+     for (int i = 0; i < src.length; i++)
+       {
+         dst[src[i]] = (byte) i;
+       }
+   }
+ 
+   private BASE64()
+   {
+   }
+ 
+   /**
+    * Encode the specified byte array using the BASE64 algorithm.
+    *
+    * @param bs the source byte array
+    */
+   public static byte[] encode(byte[] bs)
+   {
+     int si = 0, ti = 0;         // source/target array indices
+     byte[] bt = new byte[((bs.length + 2) * 4) / 3];     // target byte array
+     for (; si < bs.length; si += 3)
+       {
+         int buflen = bs.length - si;
+         if (buflen == 1)
+           {
+             byte b = bs[si];
+             int i = 0;
+             bt[ti++] = src[b >>> 2 & 0x3f];
+             bt[ti++] = src[(b << 4 & 0x30) + (i >>> 4 & 0xf)];
+           }
+         else if (buflen == 2)
+           {
+             byte b1 = bs[si], b2 = bs[si + 1];
+             int i = 0;
+             bt[ti++] = src[b1 >>> 2 & 0x3f];
+             bt[ti++] = src[(b1 << 4 & 0x30) + (b2 >>> 4 & 0xf)];
+             bt[ti++] = src[(b2 << 2 & 0x3c) + (i >>> 6 & 0x3)];
+           }
+         else
+           {
+             byte b1 = bs[si], b2 = bs[si + 1], b3 = bs[si + 2];
+             bt[ti++] = src[b1 >>> 2 & 0x3f];
+             bt[ti++] = src[(b1 << 4 & 0x30) + (b2 >>> 4 & 0xf)];
+             bt[ti++] = src[(b2 << 2 & 0x3c) + (b3 >>> 6 & 0x3)];
+             bt[ti++] = src[b3 & 0x3f];
+           }
+       }
+      if (ti < bt.length)
+       {
+ 	byte[] tmp = new byte[ti];
+ 	System.arraycopy(bt, 0, tmp, 0, ti);
+ 	bt = tmp;
+       }
+     /*while (ti < bt.length)
+       {
+         bt[ti++] = 0x3d;
+       }*/
+     return bt;
+   }
+ 
+   /**
+    * Decode the specified byte array using the BASE64 algorithm.
+    *
+    * @param bs the source byte array
+    */
+   public static byte[] decode(byte[] bs)
+   {
+     int srclen = bs.length;
+     while (srclen > 0 && bs[srclen - 1] == 0x3d)
+       {
+         srclen--; /* strip padding character */
+       }
+     byte[] buffer = new byte[srclen];
+     int buflen = 0;
+     int si = 0;
+     int len = srclen - si;
+     while (len > 0)
+       {
+         byte b0 = dst[bs[si++] & 0xff];
+         byte b2 = dst[bs[si++] & 0xff];
+         buffer[buflen++] = (byte) (b0 << 2 & 0xfc | b2 >>> 4 & 0x3);
+         if (len > 2)
+           {
+             b0 = b2;
+             b2 = dst[bs[si++] & 0xff];
+             buffer[buflen++] = (byte) (b0 << 4 & 0xf0 | b2 >>> 2 & 0xf);
+             if (len > 3)
+               {
+                 b0 = b2;
+                 b2 = dst[bs[si++] & 0xff];
+                 buffer[buflen++] = (byte) (b0 << 6 & 0xc0 | b2 & 0x3f);
+               }
+           }
+         len = srclen - si;
+       }
+     byte[] bt = new byte[buflen];
+     System.arraycopy(buffer, 0, bt, 0, buflen);
+     return bt;
+   }
+   
+   public static void main(String[] args)
+   {
+     boolean decode = false;
+     for (int i = 0; i < args.length; i++)
+       {
+         if (args[i].equals("-d"))
+           {
+             decode = true;
+           }
+         else
+           {
+             try
+               {
+                 byte[] in = args[i].getBytes("US-ASCII");
+                 byte[] out = decode ? decode(in) : encode(in);
+                 System.out.println(args[i] + " = " +
+                                    new String(out, "US-ASCII"));
+               }
+             catch (java.io.UnsupportedEncodingException e)
+               {
+                 e.printStackTrace(System.err);
+               }
+           }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/CRLFInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/CRLFInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/CRLFInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/CRLFInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,174 ----
+ /* CRLFInputStream.java --
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * An input stream that filters out CR/LF pairs into LFs.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class CRLFInputStream
+   extends FilterInputStream
+ {
+   /**
+    * The CR octet.
+    */
+   public static final int CR = 13;
+ 
+   /**
+    * The LF octet.
+    */
+   public static final int LF = 10;
+ 
+   private boolean doReset;
+ 
+   /**
+    * Constructs a CR/LF input stream connected to the specified input
+    * stream.
+    */
+   public CRLFInputStream(InputStream in)
+   {
+     super(in.markSupported() ? in : new BufferedInputStream(in));
+   }
+ 
+   /**
+    * Reads the next byte of data from this input stream.
+    * Returns -1 if the end of the stream has been reached.
+    * @exception IOException if an I/O error occurs
+    */
+   public int read()
+     throws IOException
+   {
+     int c = in.read();
+     if (c == CR)
+       {
+         in.mark(1);
+         int d = in.read();
+         if (d == LF)
+           {
+             c = d;
+           }
+         else
+           {
+             in.reset();
+           }
+       }
+     return c;
+   }
+   
+   /**
+    * Reads up to b.length bytes of data from this input stream into
+    * an array of bytes.
+    * Returns -1 if the end of the stream has been reached.
+    * @exception IOException if an I/O error occurs
+    */
+   public int read(byte[] b)
+     throws IOException
+   {
+     return read(b, 0, b.length);
+   }
+ 
+   /**
+    * Reads up to len bytes of data from this input stream into an
+    * array of bytes, starting at the specified offset.
+    * Returns -1 if the end of the stream has been reached.
+    * @exception IOException if an I/O error occurs
+    */
+   public int read(byte[] b, int off, int len)
+     throws IOException
+   {
+     in.mark(len + 1);
+     int l = in.read(b, off, len);
+     if (l > 0)
+       {
+         int i = indexOfCRLF(b, off, l);
+         if (doReset)
+           {
+             in.reset();
+             if (i != -1)
+               {
+                 l = in.read(b, off, i + 1); // read to CR
+                 in.read(); // skip LF
+                 b[i] = LF; // fix CR as LF
+               }
+             else
+               {
+                 l = in.read(b, off, len); // CR(s) but no LF
+               }
+           }
+       }
+     return l;
+   }
+ 
+   private int indexOfCRLF(byte[] b, int off, int len)
+     throws IOException
+   {
+     doReset = false;
+     int lm1 = len - 1;
+     for (int i = off; i < len; i++)
+       {
+         if (b[i] == CR)
+           {
+             int d;
+             if (i == lm1)
+               {
+                 d = in.read();
+                 doReset = true;
+               }
+             else
+               {
+                 d = b[i + 1];
+               }
+             if (d == LF)
+               {
+                 doReset = true;
+                 return i;
+               }
+           }
+       }
+     return -1;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/CRLFOutputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/CRLFOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/CRLFOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/CRLFOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,183 ----
+ /* CRLFOutputStream.java --
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net;
+ 
+ import java.io.FilterOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.UnsupportedEncodingException;
+ 
+ /** 
+  * An output stream that filters LFs into CR/LF pairs.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class CRLFOutputStream
+   extends FilterOutputStream
+ {
+   static final String US_ASCII = "US-ASCII";
+ 
+   /**
+    * The CR octet.
+    */
+   public static final int CR = 13;
+ 
+   /**
+    * The LF octet.
+    */
+   public static final int LF = 10;
+ 
+   /**
+    * The CR/LF pair.
+    */
+   public static final byte[] CRLF = { CR, LF };
+ 
+   /**
+    * The last byte read.
+    */
+   protected int last;
+ 
+   /**
+    * Constructs a CR/LF output stream connected to the specified output stream.
+    */
+   public CRLFOutputStream(OutputStream out)
+   {
+     super(out);
+     last = -1;
+   }
+ 
+   /**
+    * Writes a character to the underlying stream.
+    * @exception IOException if an I/O error occurred
+    */
+   public void write(int ch) throws IOException
+   {
+     if (ch == CR)
+       {
+         out.write(CRLF);
+       }
+     else if (ch == LF)
+       {
+         if (last != CR)
+           {
+             out.write(CRLF);
+           }
+       }
+     else
+       {
+         out.write(ch);
+       }
+     last = ch;
+   }
+   
+   /**
+    * Writes a byte array to the underlying stream.
+    * @exception IOException if an I/O error occurred
+    */
+   public void write(byte[] b)
+     throws IOException
+   {
+     write(b, 0, b.length);
+   }
+ 
+   /**
+    * Writes a portion of a byte array to the underlying stream.
+    * @exception IOException if an I/O error occurred
+    */
+   public void write(byte[] b, int off, int len)
+     throws IOException
+   {
+     int d = off;
+     len += off;
+     for (int i = off; i < len; i++)
+       {
+         switch (b[i])
+           {
+           case CR:
+             out.write (b, d, i - d);
+             out.write (CRLF, 0, 2);
+             d = i + 1;
+             break;
+           case LF:
+             if (last != CR)
+               {
+                 out.write (b, d, i - d);
+                 out.write (CRLF, 0, 2);
+               }
+             d = i + 1;
+             break;
+           }
+         last = b[i];
+       }
+     if (len - d > 0)
+       {
+         out.write (b, d, len - d);
+       }
+   }
+   
+   /**
+    * Writes the specified ASCII string to the underlying stream.
+    * @exception IOException if an I/O error occurred
+    */
+   public void write(String text)
+     throws IOException
+   {
+     try
+       {
+         byte[] bytes = text.getBytes(US_ASCII);
+         write(bytes, 0, bytes.length);
+         }
+     catch (UnsupportedEncodingException e)
+       {
+         throw new IOException("The US-ASCII encoding is not supported " +
+                               "on this system");
+       }
+   }
+ 
+   /**
+    * Writes a newline to the underlying stream.
+    * @exception IOException if an I/O error occurred
+    */
+   public void writeln()
+     throws IOException
+   {
+     out.write(CRLF, 0, 2);
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/EmptyX509TrustManager.java gcc-4.1.0/libjava/classpath/gnu/java/net/EmptyX509TrustManager.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/EmptyX509TrustManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/EmptyX509TrustManager.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* EmptyX509TrustManager.java --
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net;
+ 
+ import java.security.cert.CertificateException;
+ import java.security.cert.X509Certificate;
+ 
+ import javax.net.ssl.X509TrustManager;
+ 
+ /**
+  * Empty implementation of an X509 trust manager.
+  * This implementation does not check any certificates in the chain.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class EmptyX509TrustManager
+   implements X509TrustManager
+ {
+   public void checkClientTrusted(X509Certificate[] chain, String authType)
+     throws CertificateException
+   {
+   }
+ 
+   public void checkServerTrusted(X509Certificate[] chain, String authType)
+     throws CertificateException
+   {
+   }
+ 
+   public X509Certificate[] getAcceptedIssuers()
+   {
+     return new X509Certificate[0];
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/GetLocalHostAction.java gcc-4.1.0/libjava/classpath/gnu/java/net/GetLocalHostAction.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/GetLocalHostAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/GetLocalHostAction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* GetLocalHostAction.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net;
+ 
+ import java.net.InetAddress;
+ import java.net.UnknownHostException;
+ import java.security.PrivilegedAction;
+ 
+ /**
+  * Privileged action to retrieve the local host InetAddress.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class GetLocalHostAction
+   implements PrivilegedAction
+ {
+   public Object run()
+   {
+     try
+       {
+         return InetAddress.getLocalHost();
+       }
+     catch (UnknownHostException e)
+       {
+         return null;
+       }
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/HeaderFieldHelper.java gcc-4.1.0/libjava/classpath/gnu/java/net/HeaderFieldHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/HeaderFieldHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/HeaderFieldHelper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,138 ----
+ /* HeaderFieldHelper.java -- Helps manage headers fields 
+    Copyright (C) 1998, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net;
+ 
+ import java.util.HashMap;
+ import java.util.Map;
+ import java.util.Vector;
+ 
+ /**
+  * This class manages header field keys and values.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class HeaderFieldHelper
+ {
+   private Vector headerFieldKeys;
+   private Vector headerFieldValues;
+ 
+   public HeaderFieldHelper()
+   {
+     this (10);
+   }
+ 
+   public HeaderFieldHelper (int size)
+   {
+     headerFieldKeys = new Vector (size);
+     headerFieldValues = new Vector (size);
+   }
+ 
+   public void addHeaderField (String key, String value)
+   {
+     headerFieldKeys.addElement (key);
+     headerFieldValues.addElement (value);
+   }
+ 
+   public String getHeaderFieldKeyByIndex (int index)
+   {
+     String key = null;
+ 
+     try
+       {
+         key = (String) headerFieldKeys.elementAt (index);
+       }
+     catch (ArrayIndexOutOfBoundsException e)
+       {
+       }
+ 
+     return key;
+   }
+ 
+   public String getHeaderFieldValueByIndex(int index)
+   {
+     String value = null;
+ 
+     try
+       {
+         value = (String) headerFieldValues.elementAt (index);
+       }
+     catch (ArrayIndexOutOfBoundsException e)
+       {
+       }
+ 
+     return value;
+   }
+ 
+   public String getHeaderFieldValueByKey(String key)
+   {
+     String value = null;
+ 
+     try
+       {
+ 	value = (String) headerFieldValues.elementAt
+ 			   (headerFieldKeys.indexOf(key));
+       }
+     catch (ArrayIndexOutOfBoundsException e)
+       {
+       }
+     
+     return value;
+   }
+ 
+   public Map getHeaderFields()
+   {
+     HashMap headers = new HashMap();
+     int max = headerFieldKeys.size();
+ 
+     for (int index = 0; index < max; index++)
+       {
+ 	headers.put(headerFieldKeys.elementAt(index),
+ 		    headerFieldValues.elementAt(index));
+       }
+ 
+     return headers;
+   }
+ 
+   public int getNumberOfEntries()
+   {
+     return headerFieldKeys.size();
+   }
+ 
+ } // class HeaderFieldHelper
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/LineInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/LineInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/LineInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/LineInputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,201 ----
+ /* LineInputStream.java --
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * An input stream that can read lines of input.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class LineInputStream
+   extends FilterInputStream
+ {
+   /*
+    * Line buffer.
+    */
+   private ByteArrayOutputStream buf;
+ 
+   /*
+    * Encoding to use when translating bytes to characters.
+    */
+   private String encoding;
+ 
+   /*
+    * End-of-stream flag.
+    */
+   private boolean eof;
+ 
+   /**
+    * Whether we can use block reads.
+    */
+   private final boolean blockReads;
+ 
+   /**
+    * Constructor using the US-ASCII character encoding.
+    * @param in the underlying input stream
+    */
+   public LineInputStream(InputStream in)
+   {
+     this(in, "US-ASCII");
+   }
+ 
+   /**
+    * Constructor.
+    * @param in the underlying input stream
+    * @param encoding the character encoding to use
+    */
+   public LineInputStream(InputStream in, String encoding)
+   {
+     super(in);
+     buf = new ByteArrayOutputStream();
+     this.encoding = encoding;
+     eof = false;
+     // If it is already buffered, additional buffering gains nothing.
+     blockReads = !(in instanceof BufferedInputStream) && in.markSupported();
+   }
+ 
+   /**
+    * Read a line of input.
+    */
+   public String readLine()
+     throws IOException
+   {
+     if (eof)
+       {
+         return null;
+       }
+     do
+       {
+         if (blockReads)
+           {
+             // Use mark and reset to read chunks of bytes
+             final int MAX_LENGTH = 1024;
+             int len, pos;
+ 
+             len = in.available();
+             if (len == 0 || len > MAX_LENGTH)
+               len = MAX_LENGTH;
+             byte[] b = new byte[len];
+             in.mark(len);
+             // Read into buffer b
+             len = in.read(b, 0, len);
+             // Handle EOF
+             if (len == -1)
+               {
+                 eof = true;
+                 if (buf.size() == 0)
+                   {
+                     return null;
+                   }
+                 else
+                   {
+                     // We don't care about resetting buf
+                     return buf.toString(encoding);
+                   }
+               }
+             // Get index of LF in b
+             pos = indexOf(b, len, (byte) 0x0a);
+             if (pos != -1)
+               {
+                 // Write pos bytes to buf
+                 buf.write(b, 0, pos);
+                 // Reset stream, and read pos + 1 bytes
+                 in.reset();
+                 pos += 1;
+                 while (pos > 0)
+                   {
+                     len = in.read(b, 0, pos);
+                     pos = (len == -1) ? -1 : pos - len;
+                   }
+                 // Return line
+                 String ret = buf.toString(encoding);
+                 buf.reset();
+                 return ret;
+               }
+             else
+               {
+                 // Append everything to buf and fall through to re-read.
+                 buf.write(b, 0, len);
+               }
+           }
+         else
+           {
+             // We must use character reads in order not to read too much
+             // from the underlying stream.
+             int c = in.read();
+             switch (c)
+               {
+               case -1:
+                 eof = true;
+                 if (buf.size() == 0)
+                   {
+                     return null;
+                   }
+                 // Fall through and return contents of buffer.
+               case 0x0a:                // LF
+                 String ret = buf.toString(encoding);
+                 buf.reset();
+                 return ret;
+               default:
+                 buf.write(c);
+               }
+           }
+       }
+     while (true);
+   }
+ 
+   private int indexOf(byte[] b, int len, byte c)
+   {
+     for (int pos = 0; pos < len; pos++)
+       {
+         if (b[pos] == c)
+           {
+             return pos;
+           }
+       }
+     return -1;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/PlainDatagramSocketImpl.java gcc-4.1.0/libjava/classpath/gnu/java/net/PlainDatagramSocketImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/PlainDatagramSocketImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/PlainDatagramSocketImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,321 ----
+ /* PlainDatagramSocketImpl.java -- Default DatagramSocket implementation
+    Copyright (C) 1998, 1999, 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net;
+ 
+ import gnu.classpath.Configuration;
+ 
+ import java.io.IOException;
+ import java.net.DatagramPacket;
+ import java.net.DatagramSocketImpl;
+ import java.net.InetAddress;
+ import java.net.NetworkInterface;
+ import java.net.SocketAddress;
+ import java.net.SocketException;
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * This is the default socket implementation for datagram sockets.
+  * It makes native calls to C routines that implement BSD style
+  * SOCK_DGRAM sockets in the AF_INET family.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public final class PlainDatagramSocketImpl extends DatagramSocketImpl
+ {
+   // Static initializer to load native library
+   static
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary("javanet");
+       }
+   }
+   
+   /**
+    * Option id for the IP_TTL (time to live) value.
+    */
+   private static final int IP_TTL = 0x1E61; // 7777
+ 
+   /**
+    * This is the actual underlying file descriptor
+    */
+   int native_fd = -1;
+   
+   /**
+    * Lock object to serialize threads wanting to receive 
+    */
+   private final Object RECEIVE_LOCK = new Object();
+   
+   /**
+    * Lock object to serialize threads wanting to send 
+    */
+   private final Object SEND_LOCK = new Object();
+ 
+   /**
+    * Default do nothing constructor
+    */
+   public PlainDatagramSocketImpl()
+   {
+   }
+ 
+   protected void finalize() throws Throwable
+   {
+     synchronized (this)
+       {
+ 	if (native_fd != -1)
+ 	  close();
+       }
+     super.finalize();
+   }
+ 
+   public int getNativeFD()
+   {
+     return native_fd;
+   }
+ 
+   /**
+    * Binds this socket to a particular port and interface
+    *
+    * @param port The port to bind to
+    * @param addr The address to bind to
+    *
+    * @exception SocketException If an error occurs
+    */
+   protected synchronized native void bind(int port, InetAddress addr)
+     throws SocketException;
+ 
+   /**
+    * Creates a new datagram socket
+    *
+    * @exception SocketException If an error occurs
+    */
+   protected synchronized native void create() throws SocketException;
+ 
+   /**
+    * Sets the Time to Live value for the socket
+    *
+    * @param ttl The new TTL value
+    *
+    * @exception IOException If an error occurs
+    */
+   protected synchronized void setTimeToLive(int ttl) throws IOException
+   {
+     setOption(IP_TTL, new Integer(ttl));
+   }
+ 
+   /**
+    * Gets the Time to Live value for the socket
+    *
+    * @return The TTL value
+    *
+    * @exception IOException If an error occurs
+    */
+   protected synchronized int getTimeToLive() throws IOException
+   {
+     Object obj = getOption(IP_TTL);
+ 
+     if (! (obj instanceof Integer))
+       throw new IOException("Internal Error");
+ 
+     return ((Integer) obj).intValue();
+   }
+ 
+   /**
+    * Sends a packet of data to a remote host
+    *
+    * @param addr The address to send to
+    * @param port The port to send to 
+    * @param buf The buffer to send
+    * @param offset The offset of the data in the buffer to send
+    * @param len The length of the data to send
+    *
+    * @exception IOException If an error occurs
+    */
+   private native void sendto (InetAddress addr, int port,
+                               byte[] buf, int offset, int len)
+     throws IOException;
+ 
+   /**
+    * Sends a packet of data to a remote host
+    *
+    * @param packet The packet to send
+    *
+    * @exception IOException If an error occurs
+    */
+   protected void send(DatagramPacket packet) throws IOException
+   {
+     synchronized(SEND_LOCK)
+       {
+       sendto(packet.getAddress(), packet.getPort(), packet.getData(), 
+              packet.getOffset(), packet.getLength());
+       }
+     
+   }
+ 
+   /**
+    * Receives a UDP packet from the network
+    *
+    * @param packet The packet to fill in with the data received
+    *
+    * @exception IOException IOException If an error occurs
+    */
+   protected void receive(DatagramPacket packet)
+     throws IOException
+   {
+       synchronized(RECEIVE_LOCK)
+         {
+         receive0(packet);		
+         }
+   }
+ 
+   /**
+    * Native call to receive a UDP packet from the network
+    * 
+    * @param packet The packet to fill in with the data received
+    *
+    * @exception IOException IOException If an error occurs
+    */
+   private native void receive0(DatagramPacket packet) throws IOException;
+ 
+   /**
+    * Sets the value of an option on the socket
+    *
+    * @param option_id The identifier of the option to set
+    * @param val The value of the option to set
+    *
+    * @exception SocketException If an error occurs
+    */
+   public synchronized native void setOption(int option_id, Object val)
+     throws SocketException;
+ 
+   /**
+    * Retrieves the value of an option on the socket
+    *
+    * @param option_id The identifier of the option to retrieve
+    *
+    * @return The value of the option
+    *
+    * @exception SocketException If an error occurs
+    */
+   public synchronized native Object getOption(int option_id)
+     throws SocketException;
+ 
+   /**
+    * Closes the socket
+    */
+   protected synchronized native void close();
+ 
+   /**
+    * Gets the Time to Live value for the socket
+    *
+    * @return The TTL value
+    *
+    * @exception IOException If an error occurs
+    *
+    * @deprecated 1.2
+    */
+   protected synchronized byte getTTL() throws IOException
+   {
+     return (byte) getTimeToLive();
+   }
+ 
+   /**
+    * Sets the Time to Live value for the socket
+    *
+    * @param ttl The new TTL value
+    *
+    * @exception IOException If an error occurs
+    *
+    * @deprecated 1.2
+    */
+   protected synchronized void setTTL(byte ttl) throws IOException
+   {
+     setTimeToLive(((int) ttl) & 0xFF);
+   }
+ 
+   /**
+    * Joins a multicast group
+    *
+    * @param addr The group to join
+    *
+    * @exception IOException If an error occurs
+    */
+   protected synchronized native void join(InetAddress addr) throws IOException;
+ 
+   /**
+    * Leaves a multicast group
+    *
+    * @param addr The group to leave
+    *
+    * @exception IOException If an error occurs
+    */
+   protected synchronized native void leave(InetAddress addr) throws IOException;
+ 
+   /**
+    * What does this method really do?
+    */
+   protected synchronized int peek(InetAddress addr) throws IOException
+   {
+     throw new IOException("Not Implemented Yet");
+   }
+ 
+   public int peekData(DatagramPacket packet)
+   {
+     throw new InternalError
+       ("PlainDatagramSocketImpl::peekData is not implemented");
+   }
+ 
+   public void joinGroup(SocketAddress address, NetworkInterface netIf)
+   {
+     throw new InternalError
+       ("PlainDatagramSocketImpl::joinGroup is not implemented");
+   }
+ 
+   public void leaveGroup(SocketAddress address, NetworkInterface netIf)
+   {
+     throw new InternalError
+       ("PlainDatagramSocketImpl::leaveGroup is not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/PlainSocketImpl.java gcc-4.1.0/libjava/classpath/gnu/java/net/PlainSocketImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/PlainSocketImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/PlainSocketImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,498 ----
+ /* PlainSocketImpl.java -- Default socket implementation
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net;
+ 
+ import gnu.classpath.Configuration;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.InetAddress;
+ import java.net.InetSocketAddress;
+ import java.net.SocketAddress;
+ import java.net.SocketException;
+ import java.net.SocketImpl;
+ import java.net.SocketOptions;
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * Unless the application installs its own SocketImplFactory, this is the
+  * default socket implemetation that will be used.  It simply uses a
+  * combination of Java and native routines to implement standard BSD
+  * style sockets of family AF_INET and types SOCK_STREAM and SOCK_DGRAM
+  *
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Nic Ferrier (nferrier@tapsellferrier.co.uk)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public final class PlainSocketImpl extends SocketImpl
+ {
+   // Static initializer to load native library.
+   static
+     {
+       if (Configuration.INIT_LOAD_LIBRARY)
+         {
+           System.loadLibrary("javanet");
+         }
+     }
+ 
+   /**
+    * The OS file handle representing the socket.
+    * This is used for reads and writes to/from the socket and
+    * to close it.
+    *
+    * When the socket is closed this is reset to -1.
+    */
+   int native_fd = -1;
+ 
+   /**
+    * A cached copy of the in stream for reading from the socket.
+    */
+   private InputStream in;
+ 
+   /**
+    * A cached copy of the out stream for writing to the socket.
+    */
+   private OutputStream out;
+ 
+   /**
+    * Indicates whether a channel initiated whatever operation
+    * is being invoked on this socket.
+    */
+   private boolean inChannelOperation;
+ 
+   /**
+    * Indicates whether we should ignore whether any associated
+    * channel is set to non-blocking mode. Certain operations
+    * throw an <code>IllegalBlockingModeException</code> if the
+    * associated channel is in non-blocking mode, <i>except</i>
+    * if the operation is invoked by the channel itself.
+    */
+   public final boolean isInChannelOperation()
+   {
+     return inChannelOperation;
+   }
+   
+   /**
+    * Sets our indicator of whether an I/O operation is being
+    * initiated by a channel.
+    */
+   public final void setInChannelOperation(boolean b)
+   {
+     inChannelOperation = b;
+   }
+  
+   /**
+    * Default do nothing constructor
+    */
+   public PlainSocketImpl()
+   {
+   }
+   
+   protected void finalize() throws Throwable
+   {
+     synchronized (this)
+       {
+ 	if (native_fd != -1)
+ 	  try
+ 	    {
+ 	      close();
+ 	    }
+ 	  catch (IOException ex)
+ 	    {
+ 	    }
+       }
+     super.finalize();
+   }
+ 
+   public int getNativeFD()
+   {
+     return native_fd;
+   }
+ 
+   /**
+    * Sets the specified option on a socket to the passed in object.  For
+    * options that take an integer argument, the passed in object is an
+    * Integer.  The option_id parameter is one of the defined constants in
+    * this interface.
+    *
+    * @param option_id The identifier of the option
+    * @param val The value to set the option to
+    *
+    * @exception SocketException If an error occurs
+    */
+   public native void setOption(int optID, Object value) throws SocketException;
+ 
+   /**
+    * Returns the current setting of the specified option.  The Object returned
+    * will be an Integer for options that have integer values.  The option_id
+    * is one of the defined constants in this interface.
+    *
+    * @param option_id The option identifier
+    *
+    * @return The current value of the option
+    *
+    * @exception SocketException If an error occurs
+    */
+   public native Object getOption(int optID) throws SocketException;
+ 
+   /**
+    * Flushes the input stream and closes it. If you read from the input stream
+    * after calling this method a <code>IOException</code> will be thrown.
+    * 
+    * @throws IOException if an error occurs
+    */
+   public native void shutdownInput() throws IOException;
+ 
+   /**
+    * Flushes the output stream and closes it. If you write to the output stream
+    * after calling this method a <code>IOException</code> will be thrown.
+    * 
+    * @throws IOException if an error occurs
+    */
+   public native void shutdownOutput() throws IOException;
+ 
+   /**
+    * Creates a new socket that is not bound to any local address/port and
+    * is not connected to any remote address/port.  This will be created as
+    * a stream socket if the stream parameter is true, or a datagram socket
+    * if the stream parameter is false.
+    *
+    * @param stream true for a stream socket, false for a datagram socket
+    */
+   protected synchronized native void create(boolean stream) throws IOException;
+ 
+   /**
+    * Connects to the remote hostname and port specified as arguments.
+    *
+    * @param hostname The remote hostname to connect to
+    * @param port The remote port to connect to
+    *
+    * @exception IOException If an error occurs
+    */
+   protected synchronized void connect(String host, int port) throws IOException
+   {
+     connect(InetAddress.getByName(host), port);
+   }
+ 
+   /**
+    * Connects to the remote address and port specified as arguments.
+    *
+    * @param addr The remote address to connect to
+    * @param port The remote port to connect to
+    *
+    * @exception IOException If an error occurs
+    */
+   protected native void connect(InetAddress addr, int port) throws IOException;
+ 
+   /**
+    * Connects to the remote socket address with a specified timeout.
+    *
+    * @param timeout The timeout to use for this connect, 0 means infinite.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected synchronized void connect(SocketAddress address, int timeout) throws IOException
+   {
+     InetSocketAddress sockAddr = (InetSocketAddress) address;
+     InetAddress addr = sockAddr.getAddress();
+ 
+     if (addr == null)
+       throw new IllegalArgumentException("address is unresolved: " + sockAddr);
+ 
+     int port = sockAddr.getPort();
+     
+     if (timeout < 0)
+       throw new IllegalArgumentException("negative timeout");
+ 
+     Object oldTimeoutObj = null;
+     
+     try
+       {
+  	oldTimeoutObj = this.getOption (SocketOptions.SO_TIMEOUT);
+  	this.setOption (SocketOptions.SO_TIMEOUT, new Integer (timeout));
+  	connect (addr, port);
+       }
+     finally
+       {
+ 	if (oldTimeoutObj != null)
+ 	  this.setOption (SocketOptions.SO_TIMEOUT, oldTimeoutObj);
+       }
+   }
+ 
+   /**
+    * Binds to the specified port on the specified addr.  Note that this addr
+    * must represent a local IP address.  **** How bind to INADDR_ANY? ****
+    *
+    * @param addr The address to bind to
+    * @param port The port number to bind to
+    *
+    * @exception IOException If an error occurs
+    */
+   protected synchronized native void bind(InetAddress addr, int port)
+     throws IOException;
+ 
+   /**
+    * Starts listening for connections on a socket. The queuelen parameter
+    * is how many pending connections will queue up waiting to be serviced
+    * before being accept'ed.  If the queue of pending requests exceeds this
+    * number, additional connections will be refused.
+    *
+    * @param queuelen The length of the pending connection queue
+    * 
+    * @exception IOException If an error occurs
+    */
+   protected synchronized native void listen(int queuelen)
+     throws IOException;
+ 
+   /**
+    * Accepts a new connection on this socket and returns in in the 
+    * passed in SocketImpl.
+    *
+    * @param impl The SocketImpl object to accept this connection.
+    */
+   protected synchronized native void accept(SocketImpl impl)
+     throws IOException;
+ 
+   /**
+    * Returns the number of bytes that the caller can read from this socket
+    * without blocking. 
+    *
+    * @return The number of readable bytes before blocking
+    *
+    * @exception IOException If an error occurs
+    */
+   protected native int available() throws IOException;
+ 
+   /**
+    * Closes the socket.  This will cause any InputStream or OutputStream
+    * objects for this Socket to be closed as well.
+    * <p>
+    * Note that if the SO_LINGER option is set on this socket, then the
+    * operation could block.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected native void close() throws IOException;
+ 
+   public void sendUrgentData(int data)
+   {
+     throw new InternalError ("PlainSocketImpl::sendUrgentData not implemented");
+   }
+ 
+   /**
+    * Internal method used by SocketInputStream for reading data from
+    * the connection.  Reads up to len bytes of data into the buffer
+    * buf starting at offset bytes into the buffer.
+    *
+    * @return The actual number of bytes read or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected native int read(byte[] buf, int offset, int len)
+     throws IOException;
+ 
+   /**
+    * Internal method used by SocketOuputStream for writing data to
+    * the connection.  Writes up to len bytes of data from the buffer
+    * buf starting at offset bytes into the buffer.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected native void write(byte[] buf, int offset, int len)
+     throws IOException;
+ 
+   /**
+    * Returns an InputStream object for reading from this socket.  This will
+    * be an instance of SocketInputStream.
+    *
+    * @return An input stream attached to the socket.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected synchronized InputStream getInputStream() throws IOException
+   {
+     if (in == null)
+       in = new SocketInputStream();
+     
+     return in;
+   }
+ 
+   /**
+    * Returns an OutputStream object for writing to this socket.  This will
+    * be an instance of SocketOutputStream.
+    *
+    * @return An output stream attached to the socket.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected synchronized OutputStream getOutputStream() throws IOException
+   {
+     if (out == null)
+       out = new SocketOutputStream();
+     
+     return out;
+   }
+ 
+   /**
+    * This class contains an implementation of <code>InputStream</code> for 
+    * sockets.  It in an internal only class used by <code>PlainSocketImpl</code>.
+    *
+    * @author Nic Ferrier (nferrier@tapsellferrier.co.uk)
+    */
+   final class SocketInputStream
+     extends InputStream
+   {
+     /**
+      * Returns the number of bytes available to be read before blocking
+      */
+     public int available() throws IOException
+     {
+       return PlainSocketImpl.this.available();
+     }
+ 
+     /**
+      * This method not only closes the stream, it closes the underlying socket
+      * (and thus any connection) and invalidates any other Input/Output streams
+      * for the underlying impl object
+      */
+     public void close() throws IOException
+     {
+       PlainSocketImpl.this.close();
+     }
+ 
+     /**
+      * Reads the next byte of data and returns it as an int.  
+      *
+      * @return The byte read (as an int) or -1 if end of stream);
+      *
+      * @exception IOException If an error occurs.
+      */
+     public int read() throws IOException
+     {
+       byte buf[] = new byte [1];
+       int bytes_read = read(buf, 0, 1);
+  
+       if (bytes_read == -1)
+         return -1;
+ 
+       return buf[0] & 0xFF;
+     }
+ 
+     /**
+      * Reads up to len bytes of data into the caller supplied buffer starting
+      * at offset bytes from the start of the buffer
+      *
+      * @param buf The buffer
+      * @param offset Offset into the buffer to start reading from
+      * @param len The number of bytes to read
+      *
+      * @return The number of bytes actually read or -1 if end of stream
+      *
+      * @exception IOException If an error occurs.
+      */
+     public int read (byte[] buf, int offset, int len) throws IOException
+     {
+       int bytes_read = PlainSocketImpl.this.read (buf, offset, len);
+ 
+       if (bytes_read == 0)
+         return -1;
+ 
+       return bytes_read;
+     }
+   }
+ 
+   /**
+    * This class is used internally by <code>PlainSocketImpl</code> to be the 
+    * <code>OutputStream</code> subclass returned by its 
+    * <code>getOutputStream method</code>.  It expects only to  be used in that
+    * context.
+    *
+    * @author Nic Ferrier (nferrier@tapsellferrier.co.uk)
+    */
+   final class SocketOutputStream
+     extends OutputStream
+   {
+     /**
+      * This method closes the stream and the underlying socket connection. This
+      * action also effectively closes any other InputStream or OutputStream
+      * object associated with the connection.
+      *
+      * @exception IOException If an error occurs
+      */
+     public void close() throws IOException
+     {
+       PlainSocketImpl.this.close();
+     }
+ 
+     /**
+      * Writes a byte (passed in as an int) to the given output stream
+      * 
+      * @param b The byte to write
+      *
+      * @exception IOException If an error occurs
+      */
+     public void write(int b) throws IOException
+     {
+       byte buf[] = { (byte) b };
+       write(buf, 0, 1);
+     }
+ 
+     /**
+      * Writes len number of bytes from the array buf to the stream starting
+      * at offset bytes into the buffer.
+      *
+      * @param buf The buffer
+      * @param offset Offset into the buffer to start writing from
+      * @param len The number of bytes to write
+      *
+      * @exception IOException If an error occurs.
+      */
+     public void write (byte[] buf, int offset, int len) throws IOException
+     {
+       PlainSocketImpl.this.write (buf, offset, len);
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/URLParseError.java gcc-4.1.0/libjava/classpath/gnu/java/net/URLParseError.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/URLParseError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/URLParseError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* URLParseError.java -- Helps bypassing the exception limitation for
+                          URLStreamHandler.parseURL().
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.net;
+ 
+ /**
+  * This class helps the people writing protocols to report URL parse
+  * errors in parseUrl as this method cannot report other exceptions
+  * than Errors.
+  *
+  * The main drawback is that it uses the Error mechanism which should not
+  * be used for that type of error reporting.
+  *
+  * @author Guilhem Lavaux (guilhem@kaffe.org)
+  */
+ public class URLParseError extends Error
+ {
+   public URLParseError(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/package.html gcc-4.1.0/libjava/classpath/gnu/java/net/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/net/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.net package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.net</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/file/Connection.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/file/Connection.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/file/Connection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/file/Connection.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,368 ----
+ /* FileURLConnection.java -- URLConnection class for "file" protocol
+    Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.net.protocol.file;
+ 
+ import gnu.classpath.SystemProperties;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.BufferedOutputStream;
+ import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.FileOutputStream;
+ import java.io.FilePermission;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.io.Writer;
+ import java.net.ProtocolException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.security.Permission;
+ import java.text.SimpleDateFormat;
+ import java.util.Date;
+ import java.util.Locale;
+ import java.net.MalformedURLException;
+ 
+ /**
+  * This subclass of java.net.URLConnection models a URLConnection via
+  * the "file" protocol.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Nic Ferrier (nferrier@tapsellferrier.co.uk)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public class Connection extends URLConnection
+ {
+   /**
+    * Default permission for a file
+    */
+   private static final String DEFAULT_PERMISSION = "read";
+ 
+   private static class StaticData
+   {
+     /**
+      * HTTP-style DateFormat, used to format the last-modified header.
+      */
+     static SimpleDateFormat dateFormat
+       = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'",
+                              new Locale ("En", "Us", "Unix"));
+ 
+     static String lineSeparator =
+       SystemProperties.getProperty("line.separator");
+   }
+ 
+   
+   /**
+    * This is a File object for this connection
+    */
+   private File file;
+ 
+   /**
+    * If a directory, contains a list of files in the directory.
+    */
+   private byte[] directoryListing;
+ 
+   /**
+    * InputStream if we are reading from the file
+    */
+   private InputStream inputStream;
+ 
+   /**
+    * OutputStream if we are writing to the file
+    */
+   private OutputStream outputStream;
+   
+   /**
+    * FilePermission to read the file
+    */
+   private FilePermission permission;
+ 
+   /**
+    * Calls superclass constructor to initialize.
+    */
+   public Connection(URL url)
+   {
+     super (url);
+ 
+     permission = new FilePermission(getURL().getFile(), DEFAULT_PERMISSION);
+   }
+   
+   /**
+    * Unquote "%" + hex quotes characters
+    *
+    * @param str The string to unquote or null.
+    *
+    * @return The unquoted string or null if str was null.
+    *
+    * @exception MalformedURLException If the given string contains invalid
+    * escape sequences.
+    *
+    * Sadly the same as URI.unquote, but there's nothing we can do to
+    * make it accessible.
+    *
+    */
+   public static String unquote(String str) throws MalformedURLException
+   {
+     if (str == null)
+       return null;
+     byte[] buf = new byte[str.length()];
+     int pos = 0;
+     for (int i = 0; i < str.length(); i++)
+       {
+ 	char c = str.charAt(i);
+ 	if (c > 127)
+ 	  throw new MalformedURLException(str + " : Invalid character");
+ 	if (c == '%')
+ 	  {
+ 	    if (i + 2 >= str.length())
+ 	      throw new MalformedURLException(str + " : Invalid quoted character");
+ 	    int hi = Character.digit(str.charAt(++i), 16);
+ 	    int lo = Character.digit(str.charAt(++i), 16);
+ 	    if (lo < 0 || hi < 0)
+ 	      throw new MalformedURLException(str + " : Invalid quoted character");
+ 	    buf[pos++] = (byte) (hi * 16 + lo);
+ 	  }
+ 	else
+ 	  buf[pos++] = (byte) c;
+       }
+     try
+       {
+ 	return new String(buf, 0, pos, "utf-8");
+       }
+     catch (java.io.UnsupportedEncodingException x2)
+       {
+ 	throw (Error) new InternalError().initCause(x2);
+       }
+   }
+ 
+   /**
+    * "Connects" to the file by opening it.
+    */
+   public void connect() throws IOException
+   {
+     // Call is ignored if already connected.
+     if (connected)
+       return;
+     
+     // If not connected, then file needs to be openned.
+     file = new File (unquote(getURL().getFile()));
+ 
+     if (! file.isDirectory())
+       {
+ 	if (doInput)
+ 	  inputStream = new BufferedInputStream(new FileInputStream(file));
+     
+ 	if (doOutput)
+ 	  outputStream = new BufferedOutputStream(new FileOutputStream(file));
+       }
+     else
+       {
+ 	if (doInput)
+ 	  {
+             inputStream = new ByteArrayInputStream(getDirectoryListing());
+ 	  }
+ 
+ 	if (doOutput)
+ 	  throw new ProtocolException
+ 	    ("file: protocol does not support output on directories");
+       }
+     
+     connected = true;
+   }
+ 
+   /**
+    * Populates the <code>directoryListing</code> field with a byte array
+    * containing a representation of the directory listing.
+    */
+   byte[] getDirectoryListing()
+     throws IOException
+   {
+     if (directoryListing == null)
+       {
+         ByteArrayOutputStream sink = new ByteArrayOutputStream();
+         // NB uses default character encoding for this system
+         Writer writer = new OutputStreamWriter(sink);
+     
+         String[] files = file.list();
+     
+         for (int i = 0; i < files.length; i++)
+           {
+             writer.write(files[i]);
+             writer.write(StaticData.lineSeparator);
+           }
+ 
+         directoryListing = sink.toByteArray();
+       }
+     return directoryListing;  
+   }
+   
+   /**
+    * Opens the file for reading and returns a stream for it.
+    *
+    * @return An InputStream for this connection.
+    *
+    * @exception IOException If an error occurs
+    */
+   public InputStream getInputStream()
+     throws IOException
+   {
+     if (!doInput)
+       throw new ProtocolException("Can't open InputStream if doInput is false");
+     
+     if (!connected)
+       connect();
+     
+     return inputStream;
+   }
+ 
+   /**
+    * Opens the file for writing and returns a stream for it.
+    *
+    * @return An OutputStream for this connection.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public OutputStream getOutputStream()
+     throws IOException
+   {
+     if (!doOutput)
+       throw new
+ 	ProtocolException("Can't open OutputStream if doOutput is false");
+ 
+     if (!connected)
+       connect();
+     
+     return outputStream;
+   }
+ 
+   /**
+    * Get the last modified time of the resource.
+    *
+    * @return the time since epoch that the resource was modified.
+    */
+   public long getLastModified()
+   {
+     try
+       {
+ 	if (!connected)
+ 	  connect();
+ 
+ 	return file.lastModified();
+       }
+     catch (IOException e)
+       {
+ 	return -1;
+       }
+   }
+   
+   /**
+    *  Get an http-style header field. Just handle a few common ones. 
+    */
+   public String getHeaderField(String field)
+   {
+     try
+       {
+ 	if (!connected)
+ 	  connect();
+ 
+ 	if (field.equals("content-type"))
+           return guessContentTypeFromName(file.getName());
+ 	else if (field.equals("content-length"))
+           {
+             if (file.isDirectory())
+               {
+                 return Integer.toString(getContentLength());
+               }
+             return Long.toString(file.length());
+           }
+ 	else if (field.equals("last-modified"))
+ 	  {
+ 	    synchronized (StaticData.dateFormat)
+ 	      {
+         	return StaticData.dateFormat.format(
+                         new Date(file.lastModified()));
+ 	      }
+ 	  }
+       }
+     catch (IOException e)
+       {
+         // Fall through.
+       }
+     return null;
+   }
+ 
+   /**
+    * Get the length of content.
+    *
+    * @return the length of the content.
+    */
+   public int getContentLength()
+   {
+     try
+       {
+ 	if (!connected)
+ 	  connect();
+         
+         if (file.isDirectory())
+           {
+             return getDirectoryListing().length;
+           }
+ 	return (int) file.length();
+       }
+     catch (IOException e)
+       {
+ 	return -1;
+       }
+   }
+   
+   /**
+    * This method returns a <code>Permission</code> object representing the
+    * permissions required to access this URL.  This method returns a
+    * <code>java.io.FilePermission</code> for the file's path with a read
+    * permission.
+    *
+    * @return A Permission object
+    */
+   public Permission getPermission() throws IOException
+   {
+     return permission;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/file/Handler.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/file/Handler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/file/Handler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/file/Handler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Handler.java -- "file" protocol handler for java.net
+    Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.net.protocol.file;
+ 
+ import java.io.IOException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.net.URLStreamHandler;
+ 
+ /**
+  * This is the protocol handler for the "file" protocol.
+  * It implements the abstract openConnection() method from
+  * URLStreamHandler by returning a new FileURLConnection object (from
+  * this package).  All other methods are inherited
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public class Handler extends URLStreamHandler
+ {
+   /**
+    * A do nothing constructor
+    */
+   public Handler()
+   {
+   }
+ 
+   /**
+    * This method returs a new FileURLConnection for the specified URL
+    *
+    * @param url The URL to return a connection for
+    *
+    * @return The URLConnection
+    *
+    * @exception IOException If an error occurs
+    */
+   protected URLConnection openConnection(URL url) throws IOException
+   {
+     // If a hostname is set, then we need to switch protocols to ftp
+     // in order to transfer this from the remote host.
+     String host = url.getHost();
+     if ((host != null) && (! host.equals("")))
+       {
+ 	// Reset the protocol (and implicitly the handler) for this URL.
+ 	// Then have the URL attempt the connection again, as it will
+ 	// get the changed handler the next time around.
+ 	// If the ftp protocol handler is not installed, an 
+ 	// exception will be thrown from the new openConnection() call.
+ 	setURL (url, "ftp", url.getHost(), url.getPort(), url.getFile(),
+ 	        url.getRef());
+ 	return url.openConnection();
+       }
+ 
+     return new Connection(url);
+   }
+ } // class Handler
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/file/package.html gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/file/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/file/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/file/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.net.protocol.file package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.net.protocol.file</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/ActiveModeDTP.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/ActiveModeDTP.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/ActiveModeDTP.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/ActiveModeDTP.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,251 ----
+ /* ActiveModeDTP.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.InetAddress;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ 
+ /**
+  * An active mode FTP data transfer process.
+  * This starts a server on the specified port listening for a data
+  * connection. It converts the socket input into a file stream for reading.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ final class ActiveModeDTP
+   implements DTP, Runnable
+ {
+ 
+   ServerSocket server;
+   Socket socket;
+   DTPInputStream in;
+   DTPOutputStream out;
+   boolean completed;
+   boolean inProgress;
+   int transferMode;
+   IOException exception;
+   Thread acceptThread;
+   int connectionTimeout;
+ 
+   ActiveModeDTP(InetAddress localhost, int port,
+                 int connectionTimeout, int timeout)
+     throws IOException
+   {
+     completed = false;
+     inProgress = false;
+     server = new ServerSocket(port, 1, localhost);
+     if (timeout > 0)
+       {
+         server.setSoTimeout(timeout);
+       }
+     if (connectionTimeout <= 0)
+       {
+         connectionTimeout = 20000;
+       }
+     this.connectionTimeout = connectionTimeout;
+     acceptThread = new Thread(this, "ActiveModeDTP");
+     acceptThread.start();
+   }
+ 
+   /**
+    * Start listening.
+    */
+   public void run()
+   {
+     try
+       {
+         socket = server.accept();
+         //System.err.println("Accepted connection from "+socket.getInetAddress()+":"+socket.getPort());
+       }
+     catch (IOException e)
+       {
+         exception = e;
+       }
+   }
+ 
+   /**
+    * Waits until a client has connected.
+    */
+   public void waitFor()
+     throws IOException
+   {
+     try
+       {
+         acceptThread.join(connectionTimeout);
+       }
+     catch (InterruptedException e)
+       {
+       }
+     if (exception != null)
+       {
+         throw exception;
+       }
+     if (socket == null)
+       {
+         server.close();
+         throw new IOException("client did not connect before timeout");
+       }
+     acceptThread = null;
+   }
+   
+   /**
+    * Returns an input stream from which a remote file can be read.
+    */
+   public InputStream getInputStream()
+     throws IOException
+   {
+     if (inProgress)
+       {
+         throw new IOException("Transfer in progress");
+       }
+     if (acceptThread != null)
+       {
+         waitFor();
+       }
+     switch (transferMode)
+       {
+       case FTPConnection.MODE_STREAM:
+         in = new StreamInputStream(this, socket.getInputStream());
+         break;
+       case FTPConnection.MODE_BLOCK:
+         in = new BlockInputStream(this, socket.getInputStream());
+         break;
+       case FTPConnection.MODE_COMPRESSED:
+         in = new CompressedInputStream(this, socket.getInputStream());
+         break;
+       default:
+         throw new IllegalStateException("invalid transfer mode");
+       }
+     in.setTransferComplete(false);
+     return in;
+   }
+ 
+   /**
+    * Returns an output stream to which a local file can be written for
+    * upload.
+    */
+   public OutputStream getOutputStream() throws IOException
+   {
+     if (inProgress)
+       {
+         throw new IOException("Transfer in progress");
+       }
+     if (acceptThread != null)
+       {
+         waitFor();
+       }
+     switch (transferMode)
+       {
+       case FTPConnection.MODE_STREAM:
+         out = new StreamOutputStream(this, socket.getOutputStream());
+         break;
+       case FTPConnection.MODE_BLOCK:
+         out = new BlockOutputStream(this, socket.getOutputStream());
+         break;
+       case FTPConnection.MODE_COMPRESSED:
+         out = new CompressedOutputStream(this, socket.getOutputStream());
+         break;
+       default:
+         throw new IllegalStateException("invalid transfer mode");
+       }
+     out.setTransferComplete(false);
+     return out;
+   }
+ 
+   public void setTransferMode(int mode)
+   {
+     transferMode = mode;
+   }
+ 
+   public void complete()
+   {
+     completed = true;
+     if (!inProgress)
+       {
+         transferComplete();
+       }
+   }
+ 
+   public boolean abort()
+   {
+     completed = true;
+     transferComplete();
+     return inProgress;
+   }
+   
+   public void transferComplete()
+   {
+     if (socket == null)
+       {
+         return;
+       }
+     if (in != null)
+       {
+         in.setTransferComplete(true);
+       }
+     if (out != null)
+       {
+         out.setTransferComplete(true);
+       }
+     completed = completed || (transferMode == FTPConnection.MODE_STREAM);
+     if (completed && socket != null)
+       {
+         try
+           {
+             socket.close();
+           }
+         catch (IOException e)
+           {
+           }
+         try
+           {
+             server.close();
+           }
+         catch (IOException e)
+           {
+           }
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/BlockInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/BlockInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/BlockInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/BlockInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,150 ----
+ /* BlockInputStream.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * A DTP input stream that implements the FTP block transfer mode.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ class BlockInputStream
+   extends DTPInputStream
+ {
+ 
+   static final int EOF = 64;
+ 
+   int descriptor;
+   int max = -1;
+   int count = -1;
+ 
+   BlockInputStream(DTP dtp, InputStream in)
+   {
+     super(dtp, in);
+   }
+ 
+   public int read()
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return -1;
+       }
+     if (count == -1)
+       {
+         readHeader();
+       }
+     if (max < 1)
+       {
+         close();
+         return -1;
+       }
+     int c = in.read();
+     if (c == -1)
+       {
+         dtp.transferComplete();
+       }
+     count++;
+     if (count >= max)
+       {
+         count = -1;
+         if (descriptor == EOF)
+           {
+             close();
+           }
+       }
+     return c;
+   }
+ 
+   public int read(byte[] buf)
+     throws IOException
+   {
+     return read(buf, 0, buf.length);
+   }
+ 
+   public int read(byte[] buf, int off, int len)
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return -1;
+       }
+     if (count == -1)
+       {
+         readHeader();
+       }
+     if (max < 1)
+       {
+         close();
+         return -1;
+       }
+     int l = in.read(buf, off, len);
+     if (l == -1)
+       {
+         dtp.transferComplete();
+       }
+     count += l;
+     if (count >= max)
+       {
+         count = -1;
+         if (descriptor == EOF)
+           {
+             close();
+           }
+       }
+     return l;
+   }
+ 
+   /**
+    * Reads the block header.
+    */
+   void readHeader()
+     throws IOException
+   {
+     descriptor = in.read();
+     int max_hi = in.read();
+     int max_lo = in.read();
+     max = (max_hi << 8) | max_lo;
+     count = 0;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/BlockOutputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/BlockOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/BlockOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/BlockOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /* BlockOutputStream.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * A DTP output stream that implements the FTP block transfer mode.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ class BlockOutputStream
+   extends DTPOutputStream
+ {
+ 
+   static final byte RECORD = -128;      // 0x80
+   static final byte EOF = 64;   // 0x40
+ 
+   BlockOutputStream(DTP dtp, OutputStream out)
+   {
+     super(dtp, out);
+   }
+ 
+   public void write(int c)
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return;
+       }
+     byte[] buf = new byte[]
+       {
+         RECORD,                 /* record descriptor */
+         0x00, 0x01,             /* one byte */
+         (byte) c                /* the byte */
+       };
+     out.write(buf, 0, 4);
+   }
+ 
+   public void write(byte[] b)
+     throws IOException
+   {
+     write(b, 0, b.length);
+   }
+ 
+   public void write(byte[] b, int off, int len)
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return;
+       }
+     byte[] buf = new byte[len + 3];
+     buf[0] = RECORD;            /* record descriptor */
+     buf[1] = (byte) ((len & 0x00ff) >> 8);      /* high byte of bytecount */
+     buf[2] = (byte) (len & 0xff00);     /* low byte of bytecount */
+     System.arraycopy(b, off, buf, 3, len);
+     out.write(buf, 0, len);
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     byte[] buf = new byte[]
+       {
+         EOF,                    /* eof descriptor */
+         0x00, 0x00              /* no bytes */
+       };
+     out.write(buf, 0, 3);
+     super.close();
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/CompressedInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/CompressedInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/CompressedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/CompressedInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,215 ----
+ /* CompressedInputStream.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.net.ProtocolException;
+ 
+ /**
+  * A DTP input stream that implements the FTP compressed transfer mode.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ class CompressedInputStream
+   extends DTPInputStream
+ {
+ 
+   static final int EOF = 64;
+ 
+   static final int RAW = 0x00;
+   static final int COMPRESSED = 0x80;
+   static final int FILLER = 0xc0;
+ 
+   int descriptor;
+   int max = -1;
+   int count = -1;
+ 
+   int state = RAW;              // RAW | STATE | FILLER
+   int rep;                      // the compressed byte
+   int n = 0;                    // the number of compressed or raw bytes
+ 
+   CompressedInputStream(DTP dtp, InputStream in)
+   {
+     super(dtp, in);
+   }
+ 
+   public int read()
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return -1;
+       }
+     if (count == -1)
+       {
+         readHeader();
+       }
+     if (max < 1)
+       {
+         close();
+         return -1;
+       }
+     if (n > 0 && (state == COMPRESSED || state == FILLER))
+       {
+         n--;
+         return rep;
+       }
+     int c = in.read();
+     if (c == -1)
+       {
+         close();
+       }
+     count++;
+     if (count >= max)
+       {
+         count = -1;
+         if (descriptor == EOF)
+           {
+             close();
+           }
+       }
+     if (c == -1)
+       {
+         return c;
+       }
+     while (n == 0)              // read code header
+       {
+         state = (c & 0xc0);
+         n = (c & 0x3f);
+         c = in.read();
+         if (c == -1)
+           {
+             return -1;
+           }
+       }
+     switch (state)
+       {
+       case RAW:
+         break;
+       case COMPRESSED:
+       case FILLER:
+         rep = c;
+         break;
+       default:
+         throw new ProtocolException("Illegal state: " + state);
+       }
+     n--;
+     return c;
+   }
+   
+   public int read(byte[] buf)
+     throws IOException
+   {
+     return read(buf, 0, buf.length);
+   }
+   
+   public int read(byte[] buf, int off, int len)
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return -1;
+       }
+     if (count == -1)
+       {
+         readHeader();
+       }
+     if (max < 1)
+       {
+         close();
+         return -1;
+       }
+     // TODO improve performance
+     for (int i = off; i < len; i++)
+       {
+         int c = read();
+         if (c == -1)
+           {
+             close();
+             return i;
+           }
+         buf[i] = (byte) c;
+       }
+     return len;
+     /*
+        int l = in.read (buf, off, len);
+        if (l==-1)
+        {
+        close ();
+        }
+        count += l;
+        if (count>=max)
+        {
+        count = -1;
+        if (descriptor==EOF)
+        {
+        close ();
+        }
+        }
+        return l;
+      */
+   }
+   
+   /**
+    * Reads the block header.
+    */
+   void readHeader()
+     throws IOException
+   {
+     descriptor = in.read();
+     int max_hi = in.read();
+     int max_lo = in.read();
+     max = (max_hi << 8) | max_lo;
+     count = 0;
+   }
+ 
+   /**
+    * Reads the code header.
+    */
+   void readCodeHeader()
+     throws IOException
+   {
+     int code = in.read();
+     state = (code & 0xc0);
+     n = (code & 0x3f);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/CompressedOutputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/CompressedOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/CompressedOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/CompressedOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,228 ----
+ /* CompressedOutputStream.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * A DTP output stream that implements the FTP compressed transfer mode.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ class CompressedOutputStream
+   extends DTPOutputStream
+ {
+ 
+   static final byte RECORD = -128;      // 0x80
+   static final byte EOF = 64;   // 0x40
+ 
+   CompressedOutputStream(DTP dtp, OutputStream out)
+   {
+     super(dtp, out);
+   }
+   
+   /**
+    * Just one byte cannot be compressed.
+    * It takes 5 bytes to transmit - hardly very compressed!
+    */
+   public void write(int c)
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return;
+       }
+     byte[] buf = new byte[]
+       {
+         RECORD,                   /* record descriptor */
+         0x00, 0x01,             /* one byte */
+         0x01,                   /* one uncompressed byte */
+         (byte) c                /* the byte */
+       };
+     out.write(buf, 0, 5);
+   }
+ 
+   public void write(byte[] b)
+     throws IOException
+   {
+     write(b, 0, b.length);
+   }
+ 
+   /**
+    * The larger len is, the better.
+    */
+   public void write(byte[] b, int off, int len)
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return;
+       }
+     byte[] buf = compress(b, off, len);
+     len = buf.length;
+     buf[0] = RECORD;            /* record descriptor */
+     buf[1] = (byte) ((len & 0x00ff) >> 8);      /* high byte of bytecount */
+     buf[2] = (byte) (len & 0xff00);     /* low byte of bytecount */
+     out.write(buf, 0, len);
+   }
+ 
+   /**
+    * Returns the compressed form of the given byte array.
+    * The first 3 bytes are left free for header information.
+    */
+   byte[] compress(byte[] b, int off, int len)
+   {
+     byte[] buf = new byte[len];
+     byte last = 0;
+     int pos = 0, raw_count = 0, rep_count = 1;
+     for (int i = off; i < len; i++)
+       {
+         byte c = b[i];
+         if (i > off && c == last) // compress
+           {
+             if (raw_count > 0)      // flush raw bytes to buf
+               {
+                 // need to add raw_count+1 bytes
+                 if (pos + (raw_count + 1) > buf.length)
+                   {
+                     buf = realloc(buf, len);
+                   }
+                 pos = flush_raw(buf, pos, b, (i - raw_count) - 1,
+                                 raw_count);
+                 raw_count = 0;
+               }
+             rep_count++;            // keep looking for same byte
+           }
+         else
+           {
+             if (rep_count > 1)      // flush compressed bytes to buf
+               {
+                 // need to add 2 bytes
+                 if (pos + 2 > buf.length)
+                   {
+                     buf = realloc(buf, len);
+                   }
+                 pos = flush_compressed(buf, pos, rep_count, last);
+                 rep_count = 1;
+               }
+             raw_count++;            // keep looking for raw bytes
+           }
+         if (rep_count == 127)     // flush compressed bytes
+           {
+             // need to add 2 bytes
+             if (pos + 2 > buf.length)
+               {
+                 buf = realloc(buf, len);
+               }
+             pos = flush_compressed(buf, pos, rep_count, last);
+             rep_count = 1;
+           }
+         if (raw_count == 127)     // flush raw bytes
+           {
+             // need to add raw_count+1 bytes
+             if (pos + (raw_count + 1) > buf.length)
+               {
+                 buf = realloc(buf, len);
+               }
+             pos = flush_raw(buf, pos, b, (i - raw_count), raw_count);
+             raw_count = 0;
+           }
+         last = c;
+       }
+     if (rep_count > 1)          // flush compressed bytes
+       {
+         // need to add 2 bytes
+         if (pos + 2 > buf.length)
+           {
+             buf = realloc(buf, len);
+           }
+         pos = flush_compressed(buf, pos, rep_count, last);
+         rep_count = 1;
+       }
+     if (raw_count > 0)          // flush raw bytes
+       {
+         // need to add raw_count+1 bytes
+         if (pos + (raw_count + 1) > buf.length)
+           {
+             buf = realloc(buf, len);
+           }
+         pos = flush_raw(buf, pos, b, (len - raw_count), raw_count);
+         raw_count = 0;
+       }
+     byte[] ret = new byte[pos + 3];
+     System.arraycopy(buf, 0, ret, 3, pos);
+     return ret;
+   }
+   
+   int flush_compressed(byte[] buf, int pos, int count, byte c)
+   {
+     buf[pos++] = (byte) (0x80 | count);
+     buf[pos++] = c;
+     return pos;
+   }
+ 
+   int flush_raw(byte[] buf, int pos, byte[] src, int off, int len)
+   {
+     buf[pos++] = (byte) len;
+     System.arraycopy(src, off, buf, pos, len);
+     return pos + len;
+   }
+ 
+   byte[] realloc(byte[] buf, int len)
+   {
+     byte[] ret = new byte[buf.length + len];
+     System.arraycopy(buf, 0, ret, 0, buf.length);
+     return ret;
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     byte[] buf = new byte[]
+       {
+         EOF,                      /* eof descriptor */
+         0x00, 0x00              /* no bytes */
+       };
+     out.write(buf, 0, 3);
+     out.close();
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/DTP.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/DTP.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/DTP.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/DTP.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* DTP.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ 
+ /**
+  * An FTP data transfer process.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ interface DTP
+ {
+ 
+   /**
+    * Returns an input stream from which a remote file can be read.
+    */
+   InputStream getInputStream()
+     throws IOException;
+ 
+   /**
+    * Returns an output stream to which a local file can be written for
+    * upload.
+    */
+   OutputStream getOutputStream()
+     throws IOException;
+ 
+   /**
+    * Sets the transfer mode to be used with this DTP.
+    */
+   void setTransferMode(int mode);
+ 
+   /**
+    * Marks this DTP completed.
+    * When the current transfer has finished, any resources will be released.
+    */
+   void complete();
+ 
+   /**
+    * Aborts any current transfer and releases all resources held by this
+    * DTP.
+    * @return true if a transfer was interrupted, false otherwise
+    */
+   boolean abort();
+ 
+   /**
+    * Used to notify the DTP that its current transfer is complete.
+    * This occurs either when end-of-stream is reached or a 226 response is
+    * received.
+    */
+   void transferComplete();
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/DTPInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/DTPInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/DTPInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/DTPInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* DTPInputStream.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * An input stream that notifies a DTP on completion.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ abstract class DTPInputStream
+   extends FilterInputStream
+ {
+ 
+   DTP dtp;
+   boolean transferComplete;
+ 
+   /**
+    * Constructor.
+    * @param dtp the controlling data transfer process
+    * @param in the underlying socket stream
+    */
+   DTPInputStream (DTP dtp, InputStream in)
+   {
+     super(in);
+     this.dtp = dtp;
+     transferComplete = false;
+   }
+ 
+   /**
+    * Marks this input stream complete.
+    * This is called by the DTP.
+    */
+   void setTransferComplete(boolean flag)
+   {
+     transferComplete = flag;
+   }
+   
+   /**
+    * Notifies the controlling DTP that this stream has completed transfer.
+    */
+   public void close()
+     throws IOException
+   {
+     dtp.transferComplete();
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/DTPOutputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/DTPOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/DTPOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/DTPOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* DTPOutputStream.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.FilterOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * An output stream that notifies a DTP on end of stream.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ abstract class DTPOutputStream extends FilterOutputStream
+ {
+ 
+   DTP dtp;
+   boolean transferComplete;
+ 
+   /**
+    * Constructor.
+    * @param dtp the controlling data transfer process
+    * @param out the socket output stream
+    */
+   DTPOutputStream (DTP dtp, OutputStream out)
+     {
+       super (out);
+       this.dtp = dtp;
+       transferComplete = false;
+     }
+ 
+   /**
+    * Tells this stream whether transfer has completed or not.
+    * @param flag true if the process has completed, false otherwise
+    */
+   void setTransferComplete (boolean flag)
+     {
+       transferComplete = flag;
+     }
+ 
+   /**
+    * Notifies the controlling DTP that this stream has been terminated.
+    */
+   public void close () throws IOException
+     {
+       dtp.transferComplete ();
+     }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1348 ----
+ /* FTPConnection.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import gnu.java.net.CRLFInputStream;
+ import gnu.java.net.CRLFOutputStream;
+ import gnu.java.net.EmptyX509TrustManager;
+ import gnu.java.net.LineInputStream;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.BufferedOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.BindException;
+ import java.net.InetAddress;
+ import java.net.InetSocketAddress;
+ import java.net.ProtocolException;
+ import java.net.Socket;
+ import java.net.UnknownHostException;
+ import java.security.GeneralSecurityException;
+ import java.util.ArrayList;
+ import java.util.List;
+ 
+ import javax.net.ssl.SSLContext;
+ import javax.net.ssl.SSLSocket;
+ import javax.net.ssl.SSLSocketFactory;
+ import javax.net.ssl.TrustManager;
+ 
+ /**
+  * An FTP client connection, or PI.
+  * This implements RFC 959, with the following exceptions:
+  * <ul>
+  * <li>STAT, HELP, SITE, SMNT, and ACCT commands are not supported.</li>
+  * <li>the TYPE command does not allow alternatives to the default bytesize
+  * (Non-print), and local bytesize is not supported.</li>
+  * </ul>
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class FTPConnection
+ {
+ 
+   /**
+    * The default FTP transmission control port.
+    */
+   public static final int FTP_PORT = 21;
+ 
+   /**
+    * The FTP data port.
+    */
+   public static final int FTP_DATA_PORT = 20;
+ 
+   // -- FTP vocabulary --
+   protected static final String USER = "USER";
+   protected static final String PASS = "PASS";
+   protected static final String ACCT = "ACCT";
+   protected static final String CWD = "CWD";
+   protected static final String CDUP = "CDUP";
+   protected static final String SMNT = "SMNT";
+   protected static final String REIN = "REIN";
+   protected static final String QUIT = "QUIT";
+ 
+   protected static final String PORT = "PORT";
+   protected static final String PASV = "PASV";
+   protected static final String TYPE = "TYPE";
+   protected static final String STRU = "STRU";
+   protected static final String MODE = "MODE";
+ 
+   protected static final String RETR = "RETR";
+   protected static final String STOR = "STOR";
+   protected static final String STOU = "STOU";
+   protected static final String APPE = "APPE";
+   protected static final String ALLO = "ALLO";
+   protected static final String REST = "REST";
+   protected static final String RNFR = "RNFR";
+   protected static final String RNTO = "RNTO";
+   protected static final String ABOR = "ABOR";
+   protected static final String DELE = "DELE";
+   protected static final String RMD = "RMD";
+   protected static final String MKD = "MKD";
+   protected static final String PWD = "PWD";
+   protected static final String LIST = "LIST";
+   protected static final String NLST = "NLST";
+   protected static final String SITE = "SITE";
+   protected static final String SYST = "SYST";
+   protected static final String STAT = "STAT";
+   protected static final String HELP = "HELP";
+   protected static final String NOOP = "NOOP";
+   
+   protected static final String AUTH = "AUTH";
+   protected static final String PBSZ = "PBSZ";
+   protected static final String PROT = "PROT";
+   protected static final String CCC = "CCC";
+   protected static final String TLS = "TLS";
+ 
+   public static final int TYPE_ASCII = 1;
+   public static final int TYPE_EBCDIC = 2;
+   public static final int TYPE_BINARY = 3;
+ 
+   public static final int STRUCTURE_FILE = 1;
+   public static final int STRUCTURE_RECORD = 2;
+   public static final int STRUCTURE_PAGE = 3;
+ 
+   public static final int MODE_STREAM = 1;
+   public static final int MODE_BLOCK = 2;
+   public static final int MODE_COMPRESSED = 3;
+ 
+   // -- Telnet constants --
+   private static final String US_ASCII = "US-ASCII";
+ 
+   /**
+    * The socket used to communicate with the server.
+    */
+   protected Socket socket;
+ 
+   /**
+    * The socket input stream.
+    */
+   protected LineInputStream in;
+ 
+   /**
+    * The socket output stream.
+    */
+   protected CRLFOutputStream out;
+ 
+   /**
+    * The timeout when attempting to connect a socket.
+    */
+   protected int connectionTimeout;
+ 
+   /**
+    * The read timeout on sockets.
+    */
+   protected int timeout;
+ 
+   /**
+    * If true, print debugging information.
+    */
+   protected boolean debug;
+ 
+   /**
+    * The current data transfer process in use by this connection.
+    */
+   protected DTP dtp;
+ 
+   /**
+    * The current representation type.
+    */
+   protected int representationType = TYPE_ASCII;
+ 
+   /**
+    * The current file structure type.
+    */
+   protected int fileStructure = STRUCTURE_FILE;
+ 
+   /**
+    * The current transfer mode.
+    */
+   protected int transferMode = MODE_STREAM;
+ 
+   /**
+    * If true, use passive mode.
+    */
+   protected boolean passive = false;
+ 
+   /**
+    * Creates a new connection to the server using the default port.
+    * @param hostname the hostname of the server to connect to
+    */
+   public FTPConnection(String hostname)
+     throws UnknownHostException, IOException
+   {
+     this(hostname, -1, 0, 0, false);
+   }
+   
+   /**
+    * Creates a new connection to the server.
+    * @param hostname the hostname of the server to connect to
+    * @param port the port to connect to(if &lt;=0, use default port)
+    */
+   public FTPConnection(String hostname, int port)
+     throws UnknownHostException, IOException
+   {
+     this(hostname, port, 0, 0, false);
+   }
+ 
+   /**
+    * Creates a new connection to the server.
+    * @param hostname the hostname of the server to connect to
+    * @param port the port to connect to(if &lt;=0, use default port)
+    * @param connectionTimeout the connection timeout, in milliseconds
+    * @param timeout the I/O timeout, in milliseconds
+    * @param debug print debugging information
+    */
+   public FTPConnection(String hostname, int port,
+                         int connectionTimeout, int timeout, boolean debug)
+     throws UnknownHostException, IOException
+   {
+     this.connectionTimeout = connectionTimeout;
+     this.timeout = timeout;
+     this.debug = debug;
+     if (port <= 0)
+       {
+         port = FTP_PORT;
+       }
+     
+     // Set up socket
+     socket = new Socket();
+     InetSocketAddress address = new InetSocketAddress(hostname, port);
+     if (connectionTimeout > 0)
+       {
+         socket.connect(address, connectionTimeout);
+       }
+     else
+       {
+         socket.connect(address);
+       }
+     if (timeout > 0)
+       {
+         socket.setSoTimeout(timeout);
+       }
+     
+     InputStream in = socket.getInputStream();
+     in = new BufferedInputStream(in);
+     in = new CRLFInputStream(in);
+     this.in = new LineInputStream(in);
+     OutputStream out = socket.getOutputStream();
+     out = new BufferedOutputStream(out);
+     this.out = new CRLFOutputStream(out);
+     
+     // Read greeting
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 220:                  // hello
+         break;
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Authenticate using the specified username and password.
+    * If the username suffices for the server, the password will not be used
+    * and may be null.
+    * @param username the username
+    * @param password the optional password
+    * @return true on success, false otherwise
+    */
+   public boolean authenticate(String username, String password)
+     throws IOException
+   {
+     String cmd = USER + ' ' + username;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 230:                  // User logged in
+         return true;
+       case 331:                 // User name okay, need password
+         break;
+       case 332:                 // Need account for login
+       case 530:                 // No such user
+         return false;
+       default:
+         throw new FTPException(response);
+       }
+     cmd = PASS + ' ' + password;
+     send(cmd);
+     response = getResponse();
+     switch (response.getCode())
+       {
+       case 230:                  // User logged in
+       case 202:                  // Superfluous
+         return true;
+       case 332:                  // Need account for login
+       case 530:                  // Bad password
+         return false;
+       default:
+         throw new FTPException(response);
+       }
+   }
+ 
+   /**
+    * Negotiates TLS over the current connection.
+    * See IETF draft-murray-auth-ftp-ssl-15.txt for details.
+    * @param confidential whether to provide confidentiality for the
+    * connection
+    */
+   public boolean starttls(boolean confidential)
+     throws IOException
+   {
+     return starttls(confidential, new EmptyX509TrustManager());
+   }
+   
+   /**
+    * Negotiates TLS over the current connection.
+    * See IETF draft-murray-auth-ftp-ssl-15.txt for details.
+    * @param confidential whether to provide confidentiality for the
+    * connection
+    * @param tm the trust manager used to validate the server certificate.
+    */
+   public boolean starttls(boolean confidential, TrustManager tm)
+     throws IOException
+   {
+     try
+       {
+         // Use SSLSocketFactory to negotiate a TLS session and wrap the
+         // current socket.
+         SSLContext context = SSLContext.getInstance("TLS");
+         // We don't require strong validation of the server certificate
+         TrustManager[] trust = new TrustManager[] { tm };
+         context.init(null, trust, null);
+         SSLSocketFactory factory = context.getSocketFactory();
+         
+         send(AUTH + ' ' + TLS);
+         FTPResponse response = getResponse();
+         switch (response.getCode())
+           {
+           case 500:
+           case 502:
+           case 504:
+           case 534:
+           case 431:
+             return false;
+           case 234:
+             break;
+           default:
+             throw new FTPException(response);
+           }
+         
+         String hostname = socket.getInetAddress().getHostName();
+         int port = socket.getPort();
+         SSLSocket ss =
+          (SSLSocket) factory.createSocket(socket, hostname, port, true);
+         String[] protocols = { "TLSv1", "SSLv3" };
+         ss.setEnabledProtocols(protocols);
+         ss.setUseClientMode(true);
+         ss.startHandshake();
+ 
+         // PBSZ:PROT sequence
+         send(PBSZ + ' ' + Integer.MAX_VALUE);
+         response = getResponse();
+         switch (response.getCode())
+           {
+           case 501: // syntax error
+           case 503: // not authenticated
+             return false;
+           case 200:
+             break;
+           default:
+             throw new FTPException(response);
+           }
+         send(PROT + ' ' +(confidential ? 'P' : 'C'));
+         response = getResponse();
+         switch (response.getCode())
+           {
+           case 503: // not authenticated
+           case 504: // invalid level
+           case 536: // level not supported
+             return false;
+           case 200:
+             break;
+           default:
+             throw new FTPException(response);
+           }
+         
+         if (confidential)
+           {
+             // Set up streams
+             InputStream in = ss.getInputStream();
+             in = new BufferedInputStream(in);
+             in = new CRLFInputStream(in);
+             this.in = new LineInputStream(in);
+             OutputStream out = ss.getOutputStream();
+             out = new BufferedOutputStream(out);
+             this.out = new CRLFOutputStream(out);
+           }
+         return true;
+       }
+     catch (GeneralSecurityException e)
+       {
+         return false;
+       }
+   }
+   
+   /**
+    * Changes directory to the specified path.
+    * @param path an absolute or relative pathname
+    * @return true on success, false if the specified path does not exist
+    */
+   public boolean changeWorkingDirectory(String path)
+     throws IOException
+   {
+     String cmd = CWD + ' ' + path;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 250:
+         return true;
+       case 550:
+         return false;
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Changes directory to the parent of the current working directory.
+    * @return true on success, false otherwise
+    */
+   public boolean changeToParentDirectory()
+     throws IOException
+   {
+     send(CDUP);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 250:
+         return true;
+       case 550:
+         return false;
+       default:
+         throw new FTPException(response);
+       }
+   }
+ 
+   /**
+    * Terminates an authenticated login.
+    * If file transfer is in progress, it remains active for result response
+    * only.
+    */
+   public void reinitialize()
+     throws IOException
+   {
+     send(REIN);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 220:
+         if (dtp != null)
+           {
+             dtp.complete();
+             dtp = null;
+           }
+         break;
+       default:
+         throw new FTPException(response);
+       }
+   }
+ 
+   /**
+    * Terminates the control connection.
+    * The file transfer connection remains open for result response only.
+    * This connection is invalid and no further commands may be issued.
+    */
+   public void logout()
+     throws IOException
+   {
+     send(QUIT);
+     try
+       {
+         getResponse();            // not required
+       }
+     catch (IOException e)
+       {
+       }
+     if (dtp != null)
+       {
+         dtp.complete();
+         dtp = null;
+       }
+     try
+       {
+         socket.close();
+       }
+     catch (IOException e)
+       {
+       }
+   }
+   
+   /**
+    * Initialise the data transfer process.
+    */
+   protected void initialiseDTP()
+     throws IOException
+   {
+     if (dtp != null)
+       {
+         dtp.complete();
+         dtp = null;
+       }
+     
+     InetAddress localhost = socket.getLocalAddress();
+     if (passive)
+       {
+         send(PASV);
+         FTPResponse response = getResponse();
+         switch (response.getCode())
+           {
+           case 227:
+             String message = response.getMessage();
+             try
+               {
+                 int start = message.indexOf(',');
+                 char c = message.charAt(start - 1);
+                 while (c >= 0x30 && c <= 0x39)
+                   {
+                     c = message.charAt((--start) - 1);
+                   }
+                 int mid1 = start;
+                 for (int i = 0; i < 4; i++)
+                   {
+                     mid1 = message.indexOf(',', mid1 + 1);
+                   }
+                 int mid2 = message.indexOf(',', mid1 + 1);
+                 if (mid1 == -1 || mid2 < mid1)
+                   {
+                     throw new ProtocolException("Malformed 227: " +
+                                                  message);
+                   }
+                 int end = mid2;
+                 c = message.charAt(end + 1);
+                 while (c >= 0x30 && c <= 0x39)
+                   {
+                     c = message.charAt((++end) + 1);
+                   }
+                 
+                 String address =
+                   message.substring(start, mid1).replace(',', '.');
+                 int port_hi =
+                   Integer.parseInt(message.substring(mid1 + 1, mid2));
+                 int port_lo =
+                   Integer.parseInt(message.substring(mid2 + 1, end + 1));
+                 int port = (port_hi << 8) | port_lo;
+                 
+                 /*System.out.println("Entering passive mode: " + address +
+                   ":" + port);*/
+                 dtp = new PassiveModeDTP(address, port, localhost,
+                                           connectionTimeout, timeout);
+                 break;
+               }
+             catch (ArrayIndexOutOfBoundsException e)
+               {
+                 throw new ProtocolException(e.getMessage() + ": " +
+                                              message);
+               }
+             catch (NumberFormatException e)
+               {
+                 throw new ProtocolException(e.getMessage() + ": " +
+                                              message);
+               }
+           default:
+             throw new FTPException(response);
+           }
+       }
+     else
+       {
+         // Get the local port
+         int port = socket.getLocalPort() + 1;
+         int tries = 0;
+         // Bind the active mode DTP
+         while (dtp == null)
+           {
+             try
+               {
+                 dtp = new ActiveModeDTP(localhost, port,
+                                          connectionTimeout, timeout);
+                 /*System.out.println("Listening on: " + port);*/
+               }
+             catch (BindException e)
+               {
+                 port++;
+                 tries++;
+                 if (tries > 9)
+                   {
+                     throw e;
+                   }
+               }
+           }
+         
+         // Send PORT command
+         StringBuffer buf = new StringBuffer(PORT);
+         buf.append(' ');
+         // Construct the address/port string form
+         byte[] address = localhost.getAddress();
+         for (int i = 0; i < address.length; i++)
+           {
+             int a =(int) address[i];
+             if (a < 0)
+               {
+                 a += 0x100;
+               }
+             buf.append(a);
+             buf.append(',');
+           }
+         int port_hi =(port & 0xff00) >> 8;
+         int port_lo =(port & 0x00ff);
+         buf.append(port_hi);
+         buf.append(',');
+         buf.append(port_lo);
+         send(buf.toString());
+         // Get response
+         FTPResponse response = getResponse();
+         switch (response.getCode())
+           {
+           case 200:                // OK
+             break;
+           default:
+             dtp.abort();
+             dtp = null;
+             throw new FTPException(response);
+           }
+       }
+     dtp.setTransferMode(transferMode);
+   }
+   
+   /**
+    * Set passive mode.
+    * @param flag true if we should use passive mode, false otherwise
+    */
+   public void setPassive(boolean flag)
+     throws IOException
+   {
+     if (passive != flag)
+       {
+         passive = flag;
+         initialiseDTP();
+       }
+   }
+   
+   /**
+    * Returns the current representation type of the transfer data.
+    * @return TYPE_ASCII, TYPE_EBCDIC, or TYPE_BINARY
+    */
+   public int getRepresentationType()
+   {
+     return representationType;
+   }
+ 
+   /**
+    * Sets the desired representation type of the transfer data.
+    * @param type TYPE_ASCII, TYPE_EBCDIC, or TYPE_BINARY
+    */
+   public void setRepresentationType(int type)
+     throws IOException
+   {
+     StringBuffer buf = new StringBuffer(TYPE);
+     buf.append(' ');
+     switch (type)
+       {
+       case TYPE_ASCII:
+         buf.append('A');
+         break;
+       case TYPE_EBCDIC:
+         buf.append('E');
+         break;
+       case TYPE_BINARY:
+         buf.append('I');
+         break;
+       default:
+         throw new IllegalArgumentException(Integer.toString(type));
+       }
+     //buf.append(' ');
+     //buf.append('N');
+     send(buf.toString());
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 200:
+         representationType = type;
+         break;
+       default:
+         throw new FTPException(response);
+       }
+   }
+ 
+   /**
+    * Returns the current file structure type.
+    * @return STRUCTURE_FILE, STRUCTURE_RECORD, or STRUCTURE_PAGE
+    */
+   public int getFileStructure()
+   {
+     return fileStructure;
+   }
+ 
+   /**
+    * Sets the desired file structure type.
+    * @param structure STRUCTURE_FILE, STRUCTURE_RECORD, or STRUCTURE_PAGE
+    */
+   public void setFileStructure(int structure)
+     throws IOException
+   {
+     StringBuffer buf = new StringBuffer(STRU);
+     buf.append(' ');
+     switch (structure)
+       {
+       case STRUCTURE_FILE:
+         buf.append('F');
+         break;
+       case STRUCTURE_RECORD:
+         buf.append('R');
+         break;
+       case STRUCTURE_PAGE:
+         buf.append('P');
+         break;
+       default:
+         throw new IllegalArgumentException(Integer.toString(structure));
+       }
+     send(buf.toString());
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 200:
+         fileStructure = structure;
+         break;
+       default:
+         throw new FTPException(response);
+       }
+   }
+ 
+   /**
+    * Returns the current transfer mode.
+    * @return MODE_STREAM, MODE_BLOCK, or MODE_COMPRESSED
+    */
+   public int getTransferMode()
+   {
+     return transferMode;
+   }
+ 
+   /**
+    * Sets the desired transfer mode.
+    * @param mode MODE_STREAM, MODE_BLOCK, or MODE_COMPRESSED
+    */
+   public void setTransferMode(int mode)
+     throws IOException
+   {
+     StringBuffer buf = new StringBuffer(MODE);
+     buf.append(' ');
+     switch (mode)
+       {
+       case MODE_STREAM:
+         buf.append('S');
+         break;
+       case MODE_BLOCK:
+         buf.append('B');
+         break;
+       case MODE_COMPRESSED:
+         buf.append('C');
+         break;
+       default:
+         throw new IllegalArgumentException(Integer.toString(mode));
+       }
+     send(buf.toString());
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 200:
+         transferMode = mode;
+         if (dtp != null)
+           {
+             dtp.setTransferMode(mode);
+           }
+         break;
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Retrieves the specified file.
+    * @param filename the filename of the file to retrieve
+    * @return an InputStream containing the file content
+    */
+   public InputStream retrieve(String filename)
+     throws IOException
+   {
+     if (dtp == null || transferMode == MODE_STREAM)
+       {
+         initialiseDTP();
+       }
+     /*
+        int size = -1;
+        String cmd = SIZE + ' ' + filename;
+        send(cmd);
+        FTPResponse response = getResponse();
+        switch (response.getCode())
+        {
+        case 213:
+        size = Integer.parseInt(response.getMessage());
+        break;
+        case 550: // File not found
+        default:
+        throw new FTPException(response);
+        }
+      */
+     String cmd = RETR + ' ' + filename;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 125:                  // Data connection already open; transfer starting
+       case 150:                  // File status okay; about to open data connection
+         return dtp.getInputStream();
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Returns a stream for uploading a file.
+    * If a file with the same filename already exists on the server, it will
+    * be overwritten.
+    * @param filename the name of the file to save the content as
+    * @return an OutputStream to write the file data to
+    */
+   public OutputStream store(String filename)
+     throws IOException
+   {
+     if (dtp == null || transferMode == MODE_STREAM)
+       {
+         initialiseDTP();
+       }
+     String cmd = STOR + ' ' + filename;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 125:                  // Data connection already open; transfer starting
+       case 150:                  // File status okay; about to open data connection
+         return dtp.getOutputStream();
+       default:
+         throw new FTPException(response);
+       }
+   }
+ 
+   /**
+    * Returns a stream for uploading a file.
+    * If a file with the same filename already exists on the server, the
+    * content specified will be appended to the existing file.
+    * @param filename the name of the file to save the content as
+    * @return an OutputStream to write the file data to
+    */
+   public OutputStream append(String filename)
+     throws IOException
+   {
+     if (dtp == null || transferMode == MODE_STREAM)
+       {
+         initialiseDTP();
+       }
+     String cmd = APPE + ' ' + filename;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 125:                  // Data connection already open; transfer starting
+       case 150:                  // File status okay; about to open data connection
+         return dtp.getOutputStream();
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * This command may be required by some servers to reserve sufficient
+    * storage to accommodate the new file to be transferred.
+    * It should be immediately followed by a <code>store</code> or
+    * <code>append</code>.
+    * @param size the number of bytes of storage to allocate
+    */
+   public void allocate(long size)
+     throws IOException
+   {
+     String cmd = ALLO + ' ' + size;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 200:                  // OK
+       case 202:                  // Superfluous
+         break;
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Renames a file.
+    * @param oldName the current name of the file
+    * @param newName the new name
+    * @return true if successful, false otherwise
+    */
+   public boolean rename(String oldName, String newName)
+     throws IOException
+   {
+     String cmd = RNFR + ' ' + oldName;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 450:                  // File unavailable
+       case 550:                  // File not found
+         return false;
+       case 350:                 // Pending
+         break;
+       default:
+         throw new FTPException(response);
+       }
+     cmd = RNTO + ' ' + newName;
+     send(cmd);
+     response = getResponse();
+     switch (response.getCode())
+       {
+       case 250:                  // OK
+         return true;
+       case 450:
+       case 550:
+         return false;
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Aborts the transfer in progress.
+    * @return true if a transfer was in progress, false otherwise
+    */
+   public boolean abort()
+     throws IOException
+   {
+     send(ABOR);
+     FTPResponse response = getResponse();
+     // Abort client DTP
+     if (dtp != null)
+       {
+         dtp.abort();
+       }
+     switch (response.getCode())
+       {
+       case 226:                  // successful abort
+         return false;
+       case 426:                 // interrupted
+         response = getResponse();
+         if (response.getCode() == 226)
+           {
+             return true;
+           }
+         // Otherwise fall through to throw exception
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Causes the file specified to be deleted at the server site.
+    * @param filename the file to delete
+    */
+   public boolean delete(String filename)
+     throws IOException
+   {
+     String cmd = DELE + ' ' + filename;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 250:                  // OK
+         return true;
+       case 450:                 // File unavailable
+       case 550:                 // File not found
+         return false;
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Causes the directory specified to be deleted.
+    * This may be an absolute or relative pathname.
+    * @param pathname the directory to delete
+    */
+   public boolean removeDirectory(String pathname)
+     throws IOException
+   {
+     String cmd = RMD + ' ' + pathname;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 250:                  // OK
+         return true;
+       case 550:                 // File not found
+         return false;
+       default:
+         throw new FTPException(response);
+       }
+   }
+ 
+   /**
+    * Causes the directory specified to be created at the server site.
+    * This may be an absolute or relative pathname.
+    * @param pathname the directory to create
+    */
+   public boolean makeDirectory(String pathname)
+     throws IOException
+   {
+     String cmd = MKD + ' ' + pathname;
+     send(cmd);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 257:                  // Directory created
+         return true;
+       case 550:                 // File not found
+         return false;
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Returns the current working directory.
+    */
+   public String getWorkingDirectory()
+     throws IOException
+   {
+     send(PWD);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 257:
+         String message = response.getMessage();
+         if (message.charAt(0) == '"')
+           {
+             int end = message.indexOf('"', 1);
+             if (end == -1)
+               {
+                 throw new ProtocolException(message);
+               }
+             return message.substring(1, end);
+           }
+         else
+           {
+             int end = message.indexOf(' ');
+             if (end == -1)
+               {
+                 return message;
+               }
+             else
+               {
+                 return message.substring(0, end);
+               }
+           }
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Returns a listing of information about the specified pathname.
+    * If the pathname specifies a directory or other group of files, the
+    * server should transfer a list of files in the specified directory.
+    * If the pathname specifies a file then the server should send current
+    * information on the file.  A null argument implies the user's
+    * current working or default directory.
+    * @param pathname the context pathname, or null
+    */
+   public InputStream list(String pathname)
+     throws IOException
+   {
+     if (dtp == null || transferMode == MODE_STREAM)
+       {
+         initialiseDTP();
+       }
+     if (pathname == null)
+       {
+         send(LIST);
+       }
+     else
+       {
+         String cmd = LIST + ' ' + pathname;
+         send(cmd);
+       }
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 125:                  // Data connection already open; transfer starting
+       case 150:                  // File status okay; about to open data connection
+         return dtp.getInputStream();
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Returns a directory listing. The pathname should specify a
+    * directory or other system-specific file group descriptor; a null
+    * argument implies the user's current working or default directory.
+    * @param pathname the directory pathname, or null
+    * @return a list of filenames(strings)
+    */
+   public List nameList(String pathname)
+     throws IOException
+   {
+     if (dtp == null || transferMode == MODE_STREAM)
+       {
+         initialiseDTP();
+       }
+     if (pathname == null)
+       {
+         send(NLST);
+       }
+     else
+       {
+         String cmd = NLST + ' ' + pathname;
+         send(cmd);
+       }
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 125:                  // Data connection already open; transfer starting
+       case 150:                  // File status okay; about to open data connection
+         InputStream in = dtp.getInputStream();
+         in = new BufferedInputStream(in);
+         in = new CRLFInputStream(in);     // TODO ensure that TYPE is correct
+         LineInputStream li = new LineInputStream(in);
+         List ret = new ArrayList();
+         for (String line = li.readLine();
+              line != null;
+              line = li.readLine())
+           {
+             ret.add(line);
+           }
+         li.close();
+         return ret;
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Returns the type of operating system at the server.
+    */
+   public String system()
+     throws IOException
+   {
+     send(SYST);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 215:
+         String message = response.getMessage();
+         int end = message.indexOf(' ');
+         if (end == -1)
+           {
+             return message;
+           }
+         else
+           {
+             return message.substring(0, end);
+           }
+       default:
+         throw new FTPException(response);
+       }
+   }
+   
+   /**
+    * Does nothing.
+    * This method can be used to ensure that the connection does not time
+    * out.
+    */
+   public void noop()
+     throws IOException
+   {
+     send(NOOP);
+     FTPResponse response = getResponse();
+     switch (response.getCode())
+       {
+       case 200:
+         break;
+       default:
+         throw new FTPException(response);
+       }
+   }
+ 
+   // -- I/O --
+ 
+   /**
+    * Sends the specified command line to the server.
+    * The CRLF sequence is automatically appended.
+    * @param cmd the command line to send
+    */
+   protected void send(String cmd)
+     throws IOException
+   {
+     byte[] data = cmd.getBytes(US_ASCII);
+     out.write(data);
+     out.writeln();
+     out.flush();
+   }
+ 
+   /**
+    * Reads the next response from the server.
+    * If the server sends the "transfer complete" code, this is handled here,
+    * and the next response is passed to the caller.
+    */
+   protected FTPResponse getResponse()
+     throws IOException
+   {
+     FTPResponse response = readResponse();
+     if (response.getCode() == 226)
+       {
+         if (dtp != null)
+           {
+             dtp.transferComplete();
+           }
+         response = readResponse();
+       }
+     return response;
+   }
+ 
+   /**
+    * Reads and parses the next response from the server.
+    */
+   protected FTPResponse readResponse()
+     throws IOException
+   {
+     String line = in.readLine();
+     if (line == null)
+       {
+         throw new ProtocolException( "EOF");
+       }
+     if (line.length() < 4)
+       {
+         throw new ProtocolException(line);
+       }
+     int code = parseCode(line);
+     if (code == -1)
+       {
+         throw new ProtocolException(line);
+       }
+     char c = line.charAt(3);
+     if (c == ' ')
+       {
+         return new FTPResponse(code, line.substring(4));
+       }
+     else if (c == '-')
+       {
+         StringBuffer buf = new StringBuffer(line.substring(4));
+         buf.append('\n');
+         while(true)
+           {
+             line = in.readLine();
+             if (line == null)
+               {
+                 throw new ProtocolException("EOF");
+               }
+             if (line.length() >= 4 &&
+                 line.charAt(3) == ' ' &&
+                 parseCode(line) == code)
+               {
+                 return new FTPResponse(code, line.substring(4),
+                                         buf.toString());
+               }
+             else
+               {
+                 buf.append(line);
+                 buf.append('\n');
+               }
+           }
+       }
+     else
+       {
+         throw new ProtocolException(line);
+       }
+   }
+   
+   /*
+    * Parses the 3-digit numeric code at the beginning of the given line.
+    * Returns -1 on failure.
+    */
+   static final int parseCode(String line)
+   {
+     char[] c = { line.charAt(0), line.charAt(1), line.charAt(2) };
+     int ret = 0;
+     for (int i = 0; i < 3; i++)
+       {
+         int digit =((int) c[i]) - 0x30;
+         if (digit < 0 || digit > 9)
+           {
+             return -1;
+           }
+         // Computing integer powers is way too expensive in Java!
+         switch (i)
+           {
+           case 0:
+             ret +=(100 * digit);
+             break;
+           case 1:
+             ret +=(10 * digit);
+             break;
+           case 2:
+             ret += digit;
+             break;
+           }
+       }
+     return ret;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/FTPException.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/FTPException.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/FTPException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/FTPException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* FTPException.java --
+    Copyright (C) 2003. 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * An FTP control exception.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class FTPException
+   extends IOException
+ {
+ 
+   /**
+    * The response that provoked this exception.
+    */
+   protected final FTPResponse response;
+ 
+   /**
+    * Constructs a new FTP exception.
+    * @param response the response that provoked this exception
+    */
+   public FTPException(FTPResponse response)
+   {
+     super(response.getMessage());
+     this.response = response;
+   }
+   
+   /**
+    * Returns the response that provoked this exception.
+    */
+   public FTPResponse getResponse()
+   {
+     return response;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/FTPResponse.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/FTPResponse.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/FTPResponse.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/FTPResponse.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,112 ----
+ /* FTPResponse.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ /**
+  * An FTP control response.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public final class FTPResponse
+ {
+ 
+   /**
+    * The 3-digit status code.
+    */
+   protected final int code;
+ 
+   /**
+    * The human-readable message.
+    */
+   protected final String message;
+ 
+   /**
+    * Multiline data, if present.
+    */
+   protected final String data;
+ 
+   /**
+    * Constructs a new FTP response.
+    * @param code the status code
+    * @param message the message
+    */
+   public FTPResponse(int code, String message)
+   {
+     this(code, message, null);
+   }
+ 
+   /**
+    * Constructs a new multiline FTP response.
+    * @param code the status code
+    * @param message the message
+    * @param data multiline data
+    */
+   public FTPResponse(int code, String message, String data)
+   {
+     this.code = code;
+     this.message = message;
+     this.data = data;
+   }
+ 
+   /**
+    * Returns the 3-digit status code.
+    */
+   public int getCode()
+   {
+     return code;
+   }
+ 
+   /**
+    * Returns the human-readable message.
+    */
+   public String getMessage()
+   {
+     return message;
+   }
+ 
+   /**
+    * Returns the multiline data, or null if there was no such data.
+    */
+   public String getData()
+   {
+     return data;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/FTPURLConnection.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/FTPURLConnection.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/FTPURLConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/FTPURLConnection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,398 ----
+ /* FTPURLConnection.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import gnu.java.net.GetLocalHostAction;
+ import gnu.java.security.action.GetPropertyAction;
+ 
+ import java.io.FileNotFoundException;
+ import java.io.FilterInputStream;
+ import java.io.FilterOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.InetAddress;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ /**
+  * An FTP URL connection.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class FTPURLConnection
+   extends URLConnection
+ {
+ 
+   /**
+    * The connection managing the protocol exchange.
+    */
+   protected FTPConnection connection;
+ 
+   protected boolean passive;
+   protected int representationType;
+   protected int fileStructure;
+   protected int transferMode;
+ 
+   /**
+    * Constructs an FTP connection to the specified URL.
+    * @param url the URL
+    */
+   public FTPURLConnection(URL url)
+   {
+     super(url);
+     passive = true;
+     representationType = FTPConnection.TYPE_BINARY;
+     fileStructure = -1;
+     transferMode = -1;
+   }
+ 
+   /**
+    * Establishes the connection.
+    */
+   public void connect()
+     throws IOException
+   {
+     if (connected)
+       {
+         return;
+       }
+     String host = url.getHost();
+     int port = url.getPort();
+     String username = url.getUserInfo();
+     String password = null;
+     if (username != null)
+       {
+         int ci = username.indexOf(':');
+         if (ci != -1)
+           {
+             password = username.substring(ci + 1);
+             username = username.substring(0, ci);
+           }
+       }
+     else
+       {
+         username = "anonymous";
+         PrivilegedAction a = new GetPropertyAction("user.name");
+         String systemUsername =(String) AccessController.doPrivileged(a);
+         a = new GetLocalHostAction();
+         InetAddress localhost =(InetAddress) AccessController.doPrivileged(a);
+         password = systemUsername + "@" +
+           ((localhost == null) ? "localhost" : localhost.getHostName());
+       }
+     connection = new FTPConnection(host, port);
+     if (!connection.authenticate(username, password))
+       {
+         throw new SecurityException("Authentication failed");
+       }
+     connection.setPassive(passive);
+     if (representationType != -1)
+       {
+         connection.setRepresentationType(representationType);
+       }
+     if (fileStructure != -1)
+       {
+         connection.setFileStructure(fileStructure);
+       }
+     if (transferMode != -1)
+       {
+         connection.setTransferMode(transferMode);
+       }
+   }
+   
+   /**
+    * This connection supports doInput.
+    */
+   public void setDoInput(boolean doinput)
+   {
+     doInput = doinput;
+   }
+ 
+   /**
+    * This connection supports doOutput.
+    */
+   public void setDoOutput(boolean dooutput)
+   {
+     doOutput = dooutput;
+   }
+   
+   /**
+    * Returns an input stream that reads from this open connection.
+    */
+   public InputStream getInputStream()
+     throws IOException
+   {
+     if (!connected)
+       {
+         connect();
+       }
+     String path = url.getPath();
+     String filename = null;
+     int lsi = path.lastIndexOf('/');
+     if (lsi != -1)
+       {
+         filename = path.substring(lsi + 1);
+         path = path.substring(0, lsi);
+         if (!connection.changeWorkingDirectory(path))
+           {
+             throw new FileNotFoundException(path);
+           }
+       }
+     if (filename != null && filename.length() > 0)
+       {
+         return this.new ClosingInputStream(connection.retrieve(filename));
+       }
+     else
+       {
+         return this.new ClosingInputStream(connection.list(null));
+       }
+   }
+   
+   /**
+    * Returns an output stream that writes to this connection.
+    */
+   public OutputStream getOutputStream()
+     throws IOException
+   {
+     if (!connected)
+       {
+         connect();
+       }
+     String dir = url.getPath();
+     String filename = url.getFile();
+     if (!connection.changeWorkingDirectory(dir))
+       {
+         throw new FileNotFoundException(dir);
+       }
+     if (filename != null)
+       {
+         return this.new ClosingOutputStream(connection.store(filename));
+       }
+     else
+       {
+         throw new FileNotFoundException(filename);
+       }
+   }
+ 
+   public String getRequestProperty(String key)
+   {
+     if ("passive".equals(key))
+       {
+         return Boolean.toString(passive);
+       }
+     else if ("representationType".equals(key))
+       {
+         switch (representationType)
+           {
+           case FTPConnection.TYPE_ASCII:
+             return "ASCII";
+           case FTPConnection.TYPE_EBCDIC:
+             return "EBCDIC";
+           case FTPConnection.TYPE_BINARY:
+             return "BINARY";
+           }
+       }
+     else if ("fileStructure".equals(key))
+       {
+         switch (fileStructure)
+           {
+           case FTPConnection.STRUCTURE_FILE:
+             return "FILE";
+           case FTPConnection.STRUCTURE_RECORD:
+             return "RECORD";
+           case FTPConnection.STRUCTURE_PAGE:
+             return "PAGE";
+           }
+       }
+     else if ("transferMode".equals(key))
+       {
+         switch (transferMode)
+           {
+           case FTPConnection.MODE_STREAM:
+             return "STREAM";
+           case FTPConnection.MODE_BLOCK:
+             return "BLOCK";
+           case FTPConnection.MODE_COMPRESSED:
+             return "COMPRESSED";
+           }
+       }
+     return null;
+   }
+ 
+   public Map getRequestProperties()
+   {
+     Map map = new HashMap();
+     addRequestPropertyValue(map, "passive");
+     addRequestPropertyValue(map, "representationType");
+     addRequestPropertyValue(map, "fileStructure");
+     addRequestPropertyValue(map, "transferMode");
+     return map;
+   }
+ 
+   private void addRequestPropertyValue(Map map, String key)
+   {
+     String value = getRequestProperty(key);
+     map.put(key, value);
+   }
+   
+   public void setRequestProperty(String key, String value)
+   {
+     if (connected)
+       {
+         throw new IllegalStateException();
+       }
+     if ("passive".equals(key))
+       {
+         passive = Boolean.valueOf(value).booleanValue();
+       }
+     else if ("representationType".equals(key))
+       {
+         if ("A".equalsIgnoreCase(value) ||
+             "ASCII".equalsIgnoreCase(value))
+           {
+             representationType = FTPConnection.TYPE_ASCII;
+           }
+         else if ("E".equalsIgnoreCase(value) ||
+                  "EBCDIC".equalsIgnoreCase(value))
+           {
+             representationType = FTPConnection.TYPE_EBCDIC;
+           }
+         else if ("I".equalsIgnoreCase(value) ||
+                  "BINARY".equalsIgnoreCase(value))
+           {
+             representationType = FTPConnection.TYPE_BINARY;
+           }
+         else
+           {
+             throw new IllegalArgumentException(value);
+           }
+       }
+     else if ("fileStructure".equals(key))
+       {
+         if ("F".equalsIgnoreCase(value) ||
+             "FILE".equalsIgnoreCase(value))
+           {
+             fileStructure = FTPConnection.STRUCTURE_FILE;
+           }
+         else if ("R".equalsIgnoreCase(value) ||
+                  "RECORD".equalsIgnoreCase(value))
+           {
+             fileStructure = FTPConnection.STRUCTURE_RECORD;
+           }
+         else if ("P".equalsIgnoreCase(value) ||
+                  "PAGE".equalsIgnoreCase(value))
+           {
+             fileStructure = FTPConnection.STRUCTURE_PAGE;
+           }
+         else
+           {
+             throw new IllegalArgumentException(value);
+           }
+       }
+     else if ("transferMode".equals(key))
+       {
+         if ("S".equalsIgnoreCase(value) ||
+             "STREAM".equalsIgnoreCase(value))
+           {
+             transferMode = FTPConnection.MODE_STREAM;
+           }
+         else if ("B".equalsIgnoreCase(value) ||
+                  "BLOCK".equalsIgnoreCase(value))
+           {
+             transferMode = FTPConnection.MODE_BLOCK;
+           }
+         else if ("C".equalsIgnoreCase(value) ||
+                  "COMPRESSED".equalsIgnoreCase(value))
+           {
+             transferMode = FTPConnection.MODE_COMPRESSED;
+           }
+         else
+           {
+             throw new IllegalArgumentException(value);
+           }
+       }
+   }
+ 
+   public void addRequestProperty(String key, String value)
+   {
+     setRequestProperty(key, value);
+   }
+ 
+   class ClosingInputStream
+     extends FilterInputStream
+   {
+ 
+     ClosingInputStream(InputStream in)
+     {
+       super(in);
+     }
+ 
+     public void close()
+       throws IOException
+     {
+       super.close();
+       connection.logout();
+     }
+     
+   }
+ 
+   class ClosingOutputStream
+     extends FilterOutputStream
+   {
+ 
+     ClosingOutputStream(OutputStream out)
+     {
+       super(out);
+     }
+ 
+     public void close()
+       throws IOException
+     {
+       super.close();
+       connection.logout();
+     }
+     
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/Handler.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/Handler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/Handler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/Handler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* Handler.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.net.URLStreamHandler;
+ 
+ /**
+  * An FTP URL stream handler.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class Handler
+   extends URLStreamHandler
+ {
+ 
+   protected int getDefaultPort()
+   {
+     return FTPConnection.FTP_PORT;
+   }
+ 
+   /**
+    * Returns an FTPURLConnection for the given URL.
+    */
+   public URLConnection openConnection(URL url)
+     throws IOException
+   {
+     return new FTPURLConnection(url);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/PassiveModeDTP.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/PassiveModeDTP.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/PassiveModeDTP.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/PassiveModeDTP.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,201 ----
+ /* PassiveModeDTP.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.InetAddress;
+ import java.net.InetSocketAddress;
+ import java.net.Socket;
+ 
+ /**
+  * A passive mode FTP data transfer process.
+  * This connects to the host specified and proxies the resulting socket's
+  * input and output streams.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ final class PassiveModeDTP
+   implements DTP
+ {
+ 
+   final String address;
+   final int port;
+   Socket socket;
+   DTPInputStream in;
+   DTPOutputStream out;
+   boolean completed;
+   boolean inProgress;
+   int transferMode;
+ 
+   PassiveModeDTP(String address, int port, InetAddress localhost,
+                  int connectionTimeout, int timeout)
+     throws IOException
+   {
+     this.address = address;
+     this.port = port;
+     completed = false;
+     inProgress = false;
+     socket = new Socket();
+     InetSocketAddress remote = new InetSocketAddress(address, port);
+     InetSocketAddress local = new InetSocketAddress(localhost, port + 1);
+     socket.bind(local);
+     if (connectionTimeout > 0)
+       {
+         socket.connect(remote, connectionTimeout);
+       }
+     else
+       {
+         socket.connect(remote);
+       }
+     if (timeout > 0)
+       {
+         socket.setSoTimeout(timeout);
+       }
+   }
+ 
+   /**
+    * Returns an input stream from which a remote file can be read.
+    */
+   public InputStream getInputStream()
+     throws IOException
+   {
+     if (inProgress)
+       {
+         throw new IOException("Transfer in progress");
+       }
+     switch (transferMode)
+       {
+       case FTPConnection.MODE_STREAM:
+         in = new StreamInputStream(this, socket.getInputStream());
+         break;
+       case FTPConnection.MODE_BLOCK:
+         in = new BlockInputStream(this, socket.getInputStream());
+         break;
+       case FTPConnection.MODE_COMPRESSED:
+         in = new CompressedInputStream(this, socket.getInputStream());
+         break;
+       default:
+         throw new IllegalStateException("Invalid transfer mode");
+       }
+     in.setTransferComplete(false);
+     return in;
+   }
+   
+   /**
+    * Returns an output stream to which a local file can be written for
+    * upload.
+    */
+   public OutputStream getOutputStream()
+     throws IOException
+   {
+     if (inProgress)
+       {
+         throw new IOException("Transfer in progress");
+       }
+     switch (transferMode)
+       {
+       case FTPConnection.MODE_STREAM:
+         out = new StreamOutputStream(this, socket.getOutputStream());
+         break;
+       case FTPConnection.MODE_BLOCK:
+         out = new BlockOutputStream(this, socket.getOutputStream());
+         break;
+       case FTPConnection.MODE_COMPRESSED:
+         out = new CompressedOutputStream(this, socket.getOutputStream());
+         break;
+       default:
+         throw new IllegalStateException("Invalid transfer mode");
+       }
+     out.setTransferComplete(false);
+     return out;
+   }
+   
+   public void setTransferMode(int mode)
+   {
+     transferMode = mode;
+   }
+   
+   public void complete()
+   {
+     completed = true;
+     if (!inProgress)
+       {
+         transferComplete();
+       }
+   }
+ 
+   public boolean abort()
+   {
+     completed = true;
+     transferComplete();
+     return inProgress;
+   }
+ 
+   /*
+    * Called by DTPInputStream or DTPOutputStream when end of
+    * stream is reached.
+    */
+   public void transferComplete()
+   {
+     if (in != null)
+       {
+         in.setTransferComplete(true);
+       }
+     if (out != null)
+       {
+         out.setTransferComplete(true);
+       }
+     inProgress = false;
+     completed = completed ||(transferMode == FTPConnection.MODE_STREAM);
+     if (completed && socket != null)
+       {
+         try
+           {
+             socket.close();
+           }
+         catch (IOException e)
+           {
+           }
+       }
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/StreamInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/StreamInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/StreamInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/StreamInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,95 ----
+ /* StreamInputStream.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * A DTP input stream that implements the FTP stream data transfer mode.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ class StreamInputStream
+   extends DTPInputStream
+ {
+ 
+   StreamInputStream(DTP dtp, InputStream in)
+   {
+     super(dtp, in);
+   }
+   
+   public int read()
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return -1;
+       }
+     int c = in.read();
+     if (c == -1)
+       {
+         close();
+       }
+     return c;
+   }
+ 
+   public int read(byte[] buf)
+     throws IOException
+   {
+     return read(buf, 0, buf.length);
+   }
+ 
+   public int read(byte[] buf, int off, int len)
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return -1;
+       }
+     int l = in.read(buf, off, len);
+     if (l == -1)
+       {
+         close();
+       }
+     return l;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/StreamOutputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/StreamOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/StreamOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/StreamOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* StreamOutputStream.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.ftp;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * A DTP output stream that implements the FTP stream transfer mode.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ class StreamOutputStream
+   extends DTPOutputStream
+ {
+ 
+   StreamOutputStream(DTP dtp, OutputStream out)
+   {
+     super(dtp, out);
+   }
+   
+   public void write(int c)
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return;
+       }
+     out.write(c);
+   }
+ 
+   public void write(byte[] b)
+     throws IOException
+   {
+     write(b, 0, b.length);
+   }
+   
+   public void write(byte[] b, int off, int len)
+     throws IOException
+   {
+     if (transferComplete)
+       {
+         return;
+       }
+     out.write(b, off, len);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/package.html gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/ftp/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/ftp/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.net.protocol.ftp package.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.net.protocol.ftp</title></head>
+ 
+ <body>
+ 
+ <p>
+ This package contains an FTP client. It can handle both active and passive
+ mode connections and the various transfer modes and representation types.
+ </p>
+ 
+ <p>
+ Interaction with the server is via a simple stream interface. Only one
+ concurrent stream (input or output) is supported.
+ </p>
+ 
+ <p>
+ The control connection to the server can be protected using TLS
+ (the starttls method).
+ </p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Authenticator.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Authenticator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Authenticator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Authenticator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* Authenticator.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ /**
+  * Callback interface for managing authentication.
+  * @see Request#setAuthenticator
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public interface Authenticator
+ {
+ 
+   /**
+    * Returns the credentials to supply for the given realm.
+    * @param realm the authentication realm
+    * @param attempt zero on first authentication attempt, increments on each
+    * unsuccessful attempt
+    */
+   Credentials getCredentials(String realm, int attempt);
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,107 ----
+ /* ByteArrayRequestBodyWriter.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ /**
+  * A simple request body writer using a byte array.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class ByteArrayRequestBodyWriter
+   implements RequestBodyWriter
+ {
+ 
+   /**
+    * The content.
+    */
+   protected byte[] content;
+ 
+   /**
+    * The position within the content at which the next read will occur.
+    */
+   protected int pos;
+ 
+   /**
+    * Constructs a new byte array request body writer with the specified
+    * content.
+    * @param content the content buffer
+    */
+   public ByteArrayRequestBodyWriter(byte[] content)
+   {
+     this.content = content;
+     pos = 0;
+   }
+ 
+   /**
+    * Returns the total number of bytes that will be written in a single pass
+    * by this writer.
+    */
+   public int getContentLength()
+   {
+     return content.length;
+   }
+ 
+   /**
+    * Initialises the writer.
+    * This will be called before each pass.
+    */
+   public void reset()
+   {
+     pos = 0;
+   }
+ 
+   /**
+    * Writes body content to the supplied buffer.
+    * @param buffer the content buffer
+    * @return the number of bytes written
+    */
+   public int write(byte[] buffer)
+   {
+     int len = content.length - pos;
+     len = (buffer.length < len) ? buffer.length : len;
+     if (len > -1)
+       {
+         System.arraycopy(content, pos, buffer, 0, len);
+         pos += len;
+       }
+     return len;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/ChunkedInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/ChunkedInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/ChunkedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/ChunkedInputStream.java	Thu Jan 26 00:38:24 2006
***************
*** 0 ****
--- 1,184 ----
+ /* ChunkedInputStream.java --
+    Copyright (C) 2004, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.net.ProtocolException;
+ 
+ /**
+  * Input stream wrapper for the "chunked" transfer-coding.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class ChunkedInputStream
+   extends FilterInputStream
+ {
+ 
+   private static final byte CR = 0x0d;
+   private static final byte LF = 0x0a;
+ 
+   /** Size of the chunk we're reading.  */
+   int size;
+   /** Number of bytes we've read in this chunk.  */
+   int count;
+   /**
+    * True when we should read meta-information, false when we should
+    * read data.
+    */
+   boolean meta;
+   /** True when we've hit EOF.  */
+   boolean eof;
+   Headers headers;
+ 
+   /**
+    * Constructor.
+    * @param in the response socket input stream
+    * @param headers the headers to receive additional header lines
+    */
+   public ChunkedInputStream(InputStream in, Headers headers)
+   {
+     super(in);
+     this.headers = headers;
+     size = -1;
+     count = 0;
+     meta = true;
+   }
+ 
+   public int read()
+     throws IOException
+   {
+     byte[] buf = new byte[1];
+     int len = read(buf, 0, 1);
+     if (len == -1)
+       {
+         return -1;
+       }
+     int ret = (int) buf[0];
+     if (ret < 0)
+       {
+         ret += 0x100;
+       }
+     return ret;
+   }
+ 
+   public int read(byte[] buffer)
+     throws IOException
+   {
+     return read(buffer, 0, buffer.length);
+   }
+ 
+   public int read(byte[] buffer, int offset, int length)
+     throws IOException
+   {
+     if (eof)
+       {
+         return -1;
+       }
+     if (meta)
+       {
+         // Read chunk header
+         int c, last = 0;
+         boolean seenSemi = false;
+         StringBuilder buf = new StringBuilder();
+         do
+           {
+             c = in.read();
+             if (c == 0x3b) // ;
+               {
+                 seenSemi = true;
+               }
+             else if (c == 0x0a && last == 0x0d) // CRLF
+               {
+                 size = Integer.parseInt(buf.toString(), 16);
+                 break;
+               }
+             else if (!seenSemi && c >= 0x30)
+               {
+                 buf.append ((char) c);
+               }
+             last = c;
+           }
+         while(c != -1);
+         count = 0;
+         meta = false;
+       }
+     if (size == 0)
+       {
+         // Read trailer
+         headers.parse(in);
+         eof = true;
+         return -1;
+       }
+     else
+       {
+ 	int canRead = Math.min(size - count, length);
+ 	int len = in.read(buffer, offset, canRead);
+ 	if (len == -1)
+ 	  {
+ 	    // This is an error condition but it isn't clear what we
+ 	    // should do with it.
+ 	    eof = true;
+ 	    return -1;
+ 	  }
+         count += len;
+         if (count == size)
+           {
+             // Read CRLF
+             int c1 = in.read();
+             int c2 = in.read();
+             if (c1 == -1 || c2 == -1)
+               {
+                 // EOF before CRLF: bad, but ignore
+                 eof = true;
+                 return -1;
+               }
+             if (c1 != 0x0d || c2 != 0x0a)
+               {
+                 throw new ProtocolException("expecting CRLF: " + c1 + "," + c2);
+               }
+             meta = true;
+           }
+         return len;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Cookie.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Cookie.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Cookie.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Cookie.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,160 ----
+ /* Cookie.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import java.util.Date;
+ 
+ /**
+  * An HTTP cookie, as specified in RFC 2109.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class Cookie
+ {
+ 
+   /**
+    * The name of the cookie.
+    */
+   protected final String name;
+ 
+   /**
+    * The value of the cookie.
+    */
+   protected final String value;
+ 
+   /**
+    * Optional documentation of the intended use of the cookie.
+    */
+   protected final String comment;
+ 
+   /**
+    * The domain for which the cookie is valid.
+    */
+   protected final String domain;
+ 
+   /**
+    * Optional subset of URL paths within the domain for which the cookie is
+    * valid.
+    */
+   protected final String path;
+ 
+   /**
+    * Indicates that the user-agent should only use secure means to transmit
+    * this cookie to the server.
+    */
+   protected final boolean secure;
+ 
+   /**
+    * The date at which this cookie expires.
+    */
+   protected final Date expires;
+ 
+   public Cookie(String name, String value, String comment, String domain,
+                 String path, boolean secure, Date expires)
+   {
+     this.name = name;
+     this.value = value;
+     this.comment = comment;
+     this.domain = domain;
+     this.path = path;
+     this.secure = secure;
+     this.expires = expires;
+   }
+ 
+   public String getName()
+   {
+     return name;
+   }
+ 
+   public String getValue()
+   {
+     return value;
+   }
+ 
+   public String getComment()
+   {
+     return comment;
+   }
+ 
+   public String getDomain()
+   {
+     return domain;
+   }
+ 
+   public String getPath()
+   {
+     return path;
+   }
+ 
+   public boolean isSecure()
+   {
+     return secure;
+   }
+ 
+   public Date getExpiryDate()
+   {
+     return expires;
+   }
+ 
+   public String toString()
+   {
+     return toString(true, true);
+   }
+   
+   public String toString(boolean showPath, boolean showDomain)
+   {
+     StringBuilder buf = new StringBuilder();
+     buf.append(name);
+     buf.append('=');
+     buf.append(value);
+     if (showPath)
+       {
+         buf.append("; $Path=");
+         buf.append(path);
+       }
+     if (showDomain)
+       {
+         buf.append("; $Domain=");
+         buf.append(domain);
+       }
+     return buf.toString();
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/CookieManager.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/CookieManager.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/CookieManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/CookieManager.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* CookieManager.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ /**
+  * Cookie manager interface.
+  * If an application wants to handle cookies, they should implement this
+  * interface and register the instance with each HTTPConnection they use.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public interface CookieManager
+ {
+ 
+   /**
+    * Stores a cookie in the cookie manager.
+    * @param cookie the cookie to store
+    */
+   void setCookie(Cookie cookie);
+ 
+   /**
+    * Retrieves the cookies matching the specified criteria.
+    * @param host the host name
+    * @param secure whether the connection is secure
+    * @param path the path to access
+    */
+   Cookie[] getCookies(String host, boolean secure, String path);
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Credentials.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Credentials.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Credentials.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Credentials.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* Credentials.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ /**
+  * Represents a username/password combination that can be used to
+  * authenticate to an HTTP server.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class Credentials
+ {
+ 
+   /**
+    * The username.
+    */
+   private String username;
+ 
+   /**
+    * The password.
+    */
+   private String password;
+ 
+   /**
+    * Constructor.
+    * @param username the username
+    * @param password the password
+    */
+   public Credentials(String username, String password)
+   {
+     this.username = username;
+     this.password = password;
+   }
+ 
+   /**
+    * Returns the username.
+    */
+   public String getUsername()
+   {
+     return username;
+   }
+ 
+   /**
+    * Returns the password.
+    */
+   public String getPassword()
+   {
+     return password;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/HTTPConnection.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/HTTPConnection.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/HTTPConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/HTTPConnection.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,661 ----
+ /* HTTPConnection.java --
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import gnu.classpath.Configuration;
+ import gnu.classpath.SystemProperties;
+ import gnu.java.net.EmptyX509TrustManager;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.BufferedOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.InetSocketAddress;
+ import java.net.Socket;
+ import java.security.GeneralSecurityException;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.LinkedHashMap;
+ import java.util.List;
+ import java.util.Map;
+ 
+ import javax.net.ssl.HandshakeCompletedListener;
+ import javax.net.ssl.SSLContext;
+ import javax.net.ssl.SSLSocket;
+ import javax.net.ssl.SSLSocketFactory;
+ import javax.net.ssl.TrustManager;
+ 
+ /**
+  * A connection to an HTTP server.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class HTTPConnection
+ {
+ 
+   /**
+    * The default HTTP port.
+    */
+   public static final int HTTP_PORT = 80;
+ 
+   /**
+    * The default HTTPS port.
+    */
+   public static final int HTTPS_PORT = 443;
+ 
+   private static final String userAgent = SystemProperties.getProperty("http.agent");
+ 
+   /**
+    * The host name of the server to connect to.
+    */
+   protected final String hostname;
+ 
+   /**
+    * The port to connect to.
+    */
+   protected final int port;
+ 
+   /**
+    * Whether the connection should use transport level security (HTTPS).
+    */
+   protected final boolean secure;
+ 
+   /**
+    * The connection timeout for connecting the underlying socket.
+    */
+   protected final int connectionTimeout;
+ 
+   /**
+    * The read timeout for reads on the underlying socket.
+    */
+   protected final int timeout;
+ 
+   /**
+    * The host name of the proxy to connect to.
+    */
+   protected String proxyHostname;
+ 
+   /**
+    * The port on the proxy to connect to.
+    */
+   protected int proxyPort;
+ 
+   /**
+    * The major version of HTTP supported by this client.
+    */
+   protected int majorVersion;
+ 
+   /**
+    * The minor version of HTTP supported by this client.
+    */
+   protected int minorVersion;
+ 
+   private final List handshakeCompletedListeners;
+ 
+   /**
+    * The socket this connection communicates on.
+    */
+   protected Socket socket;
+ 
+   /**
+    * The SSL socket factory to use.
+    */
+   private SSLSocketFactory sslSocketFactory;
+ 
+   /**
+    * The socket input stream.
+    */
+   protected InputStream in;
+ 
+   /**
+    * The socket output stream.
+    */
+   protected OutputStream out;
+ 
+   /**
+    * Nonce values seen by this connection.
+    */
+   private Map nonceCounts;
+ 
+   /**
+    * The cookie manager for this connection.
+    */
+   protected CookieManager cookieManager;
+ 
+ 
+   /**
+    * The pool that this connection is a member of (if any).
+    */
+   private LinkedHashMap pool;
+ 
+   /**
+    * Creates a new HTTP connection.
+    * @param hostname the name of the host to connect to
+    */
+   public HTTPConnection(String hostname)
+   {
+     this(hostname, HTTP_PORT, false, 0, 0);
+   }
+ 
+   /**
+    * Creates a new HTTP or HTTPS connection.
+    * @param hostname the name of the host to connect to
+    * @param secure whether to use a secure connection
+    */
+   public HTTPConnection(String hostname, boolean secure)
+   {
+     this(hostname, secure ? HTTPS_PORT : HTTP_PORT, secure, 0, 0);
+   }
+ 
+   /**
+    * Creates a new HTTP or HTTPS connection on the specified port.
+    * @param hostname the name of the host to connect to
+    * @param secure whether to use a secure connection
+    * @param connectionTimeout the connection timeout
+    * @param timeout the socket read timeout
+    */
+   public HTTPConnection(String hostname, boolean secure,
+                         int connectionTimeout, int timeout)
+   {
+     this(hostname, secure ? HTTPS_PORT : HTTP_PORT, secure,
+          connectionTimeout, timeout);
+   }
+   
+   /**
+    * Creates a new HTTP connection on the specified port.
+    * @param hostname the name of the host to connect to
+    * @param port the port on the host to connect to
+    */
+   public HTTPConnection(String hostname, int port)
+   {
+     this(hostname, port, false, 0, 0);
+   }
+ 
+   /**
+    * Creates a new HTTP or HTTPS connection on the specified port.
+    * @param hostname the name of the host to connect to
+    * @param port the port on the host to connect to
+    * @param secure whether to use a secure connection
+    */
+   public HTTPConnection(String hostname, int port, boolean secure)
+   {
+     this(hostname, port, secure, 0, 0);
+   }
+   
+   /**
+    * Creates a new HTTP or HTTPS connection on the specified port.
+    * @param hostname the name of the host to connect to
+    * @param port the port on the host to connect to
+    * @param secure whether to use a secure connection
+    * @param connectionTimeout the connection timeout
+    * @param timeout the socket read timeout
+    */
+   public HTTPConnection(String hostname, int port, boolean secure,
+                         int connectionTimeout, int timeout)
+   {
+     this.hostname = hostname;
+     this.port = port;
+     this.secure = secure;
+     this.connectionTimeout = connectionTimeout;
+     this.timeout = timeout;
+     majorVersion = minorVersion = 1;
+     handshakeCompletedListeners = new ArrayList(2);
+   }
+ 
+   /**
+    * Returns the name of the host to connect to.
+    */
+   public String getHostName()
+   {
+     return hostname;
+   }
+ 
+   /**
+    * Returns the port on the host to connect to.
+    */
+   public int getPort()
+   {
+     return port;
+   }
+ 
+   /**
+    * Indicates whether to use a secure connection or not.
+    */
+   public boolean isSecure()
+   {
+     return secure;
+   }
+ 
+   /**
+    * Returns the HTTP version string supported by this connection.
+    * @see #version
+    */
+   public String getVersion()
+   {
+     return "HTTP/" + majorVersion + '.' + minorVersion;
+   }
+ 
+   /**
+    * Sets the HTTP version supported by this connection.
+    * @param majorVersion the major version
+    * @param minorVersion the minor version
+    */
+   public void setVersion(int majorVersion, int minorVersion)
+   {
+     if (majorVersion != 1)
+       {
+         throw new IllegalArgumentException("major version not supported: " +
+                                            majorVersion);
+       }
+     if (minorVersion < 0 || minorVersion > 1)
+       {
+         throw new IllegalArgumentException("minor version not supported: " +
+                                            minorVersion);
+       }
+     this.majorVersion = majorVersion;
+     this.minorVersion = minorVersion;
+   }
+ 
+   /**
+    * Directs this connection to use the specified proxy.
+    * @param hostname the proxy host name
+    * @param port the port on the proxy to connect to
+    */
+   public void setProxy(String hostname, int port)
+   {
+     proxyHostname = hostname;
+     proxyPort = port;
+   }
+ 
+   /**
+    * Indicates whether this connection is using an HTTP proxy.
+    */
+   public boolean isUsingProxy()
+   {
+     return (proxyHostname != null && proxyPort > 0);
+   }
+ 
+   /**
+    * Sets the cookie manager to use for this connection.
+    * @param cookieManager the cookie manager
+    */
+   public void setCookieManager(CookieManager cookieManager)
+   {
+     this.cookieManager = cookieManager;
+   }
+ 
+   /**
+    * Returns the cookie manager in use for this connection.
+    */
+   public CookieManager getCookieManager()
+   {
+     return cookieManager;
+   }
+ 
+   /**
+    * The number of times this HTTPConnection has be used via keep-alive.
+    */
+   int useCount;
+ 
+   /**
+    * Generates a key for connections in the connection pool.
+    *
+    * @param h the host name.
+    * @param p the port.
+    * @param sec true if using https.
+    *
+    * @return the key.
+    */
+   static Object getPoolKey(String h, int p, boolean sec)
+   {
+     StringBuilder buf = new StringBuilder(sec ? "https://" : "http://");
+     buf.append(h);
+     buf.append(':');
+     buf.append(p);
+     return buf.toString();
+   }
+ 
+   /**
+    * Set the connection pool that this HTTPConnection is a member of.
+    * If left unset or set to null, it will not be a member of any pool
+    * and will not be a candidate for reuse.
+    *
+    * @param p the pool.
+    */
+   void setPool(LinkedHashMap p)
+   {
+     pool = p;
+   }
+ 
+   /**
+    * Signal that this HTTPConnection is no longer needed and can be
+    * returned to the connection pool.
+    *
+    */
+   void release()
+   {
+     if (pool != null)
+       {
+         synchronized (pool)
+           {
+             useCount++;
+             Object key = HTTPConnection.getPoolKey(hostname, port, secure);
+             pool.put(key, this);
+             while (pool.size() >= HTTPURLConnection.maxConnections)
+               {
+                 // maxConnections must always be >= 1
+                 Object lru = pool.keySet().iterator().next();
+                 HTTPConnection c = (HTTPConnection)pool.remove(lru);
+                 try
+                   {
+                     c.closeConnection();
+                   }
+                 catch (IOException ioe)
+                   {
+                       // Ignore it.  We are just cleaning up.
+                   }
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Creates a new request using this connection.
+    * @param method the HTTP method to invoke
+    * @param path the URI-escaped RFC2396 <code>abs_path</code> with
+    * optional query part
+    */
+   public Request newRequest(String method, String path)
+   {
+     if (method == null || method.length() == 0)
+       {
+         throw new IllegalArgumentException("method must have non-zero length");
+       }
+     if (path == null || path.length() == 0)
+       {
+         path = "/";
+       }
+     Request ret = new Request(this, method, path);
+     if ((secure && port != HTTPS_PORT) ||
+         (!secure && port != HTTP_PORT))
+       {
+         ret.setHeader("Host", hostname + ":" + port);
+       }
+     else
+       {
+         ret.setHeader("Host", hostname);
+       }
+     ret.setHeader("User-Agent", userAgent);
+     ret.setHeader("Connection", "keep-alive");
+     ret.setHeader("Accept-Encoding",
+                   "chunked;q=1.0, gzip;q=0.9, deflate;q=0.8, " +
+                   "identity;q=0.6, *;q=0");
+     if (cookieManager != null)
+       {
+         Cookie[] cookies = cookieManager.getCookies(hostname, secure, path);
+         if (cookies != null && cookies.length > 0)
+           {
+             StringBuilder buf = new StringBuilder();
+             buf.append("$Version=1");
+             for (int i = 0; i < cookies.length; i++)
+               {
+                 buf.append(',');
+                 buf.append(' ');
+                 buf.append(cookies[i].toString());
+               }
+             ret.setHeader("Cookie", buf.toString());
+           }
+       }
+     return ret;
+   }
+ 
+   /**
+    * Closes this connection.
+    */
+   public void close()
+     throws IOException
+   {
+     closeConnection();
+   }
+ 
+   /**
+    * Retrieves the socket associated with this connection.
+    * This creates the socket if necessary.
+    */
+   protected synchronized Socket getSocket()
+     throws IOException
+   {
+     if (socket == null)
+       {
+         String connectHostname = hostname;
+         int connectPort = port;
+         if (isUsingProxy())
+           {
+             connectHostname = proxyHostname;
+             connectPort = proxyPort;
+           }
+         socket = new Socket();
+         InetSocketAddress address =
+           new InetSocketAddress(connectHostname, connectPort);
+         if (connectionTimeout > 0)
+           {
+             socket.connect(address, connectionTimeout);
+           }
+         else
+           {
+             socket.connect(address);
+           }
+         if (timeout > 0)
+           {
+             socket.setSoTimeout(timeout);
+           }
+         if (secure)
+           {
+             try
+               {
+                 SSLSocketFactory factory = getSSLSocketFactory();
+                 SSLSocket ss =
+                   (SSLSocket) factory.createSocket(socket, connectHostname,
+                                                    connectPort, true);
+                 String[] protocols = { "TLSv1", "SSLv3" };
+                 ss.setEnabledProtocols(protocols);
+                 ss.setUseClientMode(true);
+                 synchronized (handshakeCompletedListeners)
+                   {
+                     if (!handshakeCompletedListeners.isEmpty())
+                       {
+                         for (Iterator i =
+                              handshakeCompletedListeners.iterator();
+                              i.hasNext(); )
+                           {
+                             HandshakeCompletedListener l =
+                               (HandshakeCompletedListener) i.next();
+                             ss.addHandshakeCompletedListener(l);
+                           }
+                       }
+                   }
+                 ss.startHandshake();
+                 socket = ss;
+               }
+             catch (GeneralSecurityException e)
+               {
+                 throw new IOException(e.getMessage());
+               }
+           }
+         in = socket.getInputStream();
+         in = new BufferedInputStream(in);
+         out = socket.getOutputStream();
+         out = new BufferedOutputStream(out);
+       }
+     return socket;
+   }
+ 
+   SSLSocketFactory getSSLSocketFactory()
+     throws GeneralSecurityException
+   {
+     if (sslSocketFactory == null)
+       {
+         TrustManager tm = new EmptyX509TrustManager();
+         SSLContext context = SSLContext.getInstance("SSL");
+         TrustManager[] trust = new TrustManager[] { tm };
+         context.init(null, trust, null);
+         sslSocketFactory = context.getSocketFactory();
+       }
+     return sslSocketFactory;
+   }
+ 
+   void setSSLSocketFactory(SSLSocketFactory factory)
+   {
+     sslSocketFactory = factory;
+   }
+ 
+   protected synchronized InputStream getInputStream()
+     throws IOException
+   {
+     if (socket == null)
+       {
+         getSocket();
+       }
+     return in;
+   }
+ 
+   protected synchronized OutputStream getOutputStream()
+     throws IOException
+   {
+     if (socket == null)
+       {
+         getSocket();
+       }
+     return out;
+   }
+ 
+   /**
+    * Closes the underlying socket, if any.
+    */
+   protected synchronized void closeConnection()
+     throws IOException
+   {
+     if (socket != null)
+       {
+         try
+           {
+             socket.close();
+           }
+         finally
+           {
+             socket = null;
+           }
+       }
+   }
+ 
+   /**
+    * Returns a URI representing the connection.
+    * This does not include any request path component.
+    */
+   protected String getURI()
+   {
+     StringBuilder buf = new StringBuilder();
+     buf.append(secure ? "https://" : "http://");
+     buf.append(hostname);
+     if (secure)
+       {
+         if (port != HTTPConnection.HTTPS_PORT)
+           {
+             buf.append(':');
+             buf.append(port);
+           }
+       }
+     else
+       {
+         if (port != HTTPConnection.HTTP_PORT)
+           {
+             buf.append(':');
+             buf.append(port);
+           }
+       }
+     return buf.toString();
+   }
+ 
+   /**
+    * Get the number of times the specified nonce has been seen by this
+    * connection.
+    */
+   int getNonceCount(String nonce)
+   {
+     if (nonceCounts == null)
+       {
+         return 0;
+       }
+     return((Integer) nonceCounts.get(nonce)).intValue();
+   }
+ 
+   /**
+    * Increment the number of times the specified nonce has been seen.
+    */
+   void incrementNonce(String nonce)
+   {
+     int current = getNonceCount(nonce);
+     if (nonceCounts == null)
+       {
+         nonceCounts = new HashMap();
+       }
+     nonceCounts.put(nonce, new Integer(current + 1));
+   }
+ 
+   // -- Events --
+   
+   void addHandshakeCompletedListener(HandshakeCompletedListener l)
+   {
+     synchronized (handshakeCompletedListeners)
+       {
+         handshakeCompletedListeners.add(l);
+       }
+   }
+   void removeHandshakeCompletedListener(HandshakeCompletedListener l)
+   {
+     synchronized (handshakeCompletedListeners)
+       {
+         handshakeCompletedListeners.remove(l);
+       }
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/HTTPDateFormat.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/HTTPDateFormat.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/HTTPDateFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/HTTPDateFormat.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,441 ----
+ /* HTTPDateFormat.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import java.text.DateFormat;
+ import java.text.DecimalFormat;
+ import java.text.FieldPosition;
+ import java.text.NumberFormat;
+ import java.text.ParsePosition;
+ import java.util.Calendar;
+ import java.util.Date;
+ import java.util.GregorianCalendar;
+ import java.util.TimeZone;
+ 
+ /**
+  * HTTP date formatter and parser.
+  * Formats dates according to RFC 822 (updated by RFC 1123).
+  * Parses dates according to the above, <i>or</i> RFC 1036, <i>or</i> the
+  * ANSI C <code>asctime()</code> format.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class HTTPDateFormat
+   extends DateFormat
+ {
+ 
+   static final String[] DAYS_OF_WEEK = {
+     null, "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+   };
+ 
+   static final String[] MONTHS = {
+     "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+     "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+   };
+ 
+   public HTTPDateFormat()
+   {
+     calendar = new GregorianCalendar(TimeZone.getTimeZone ("GMT"));
+     numberFormat = new DecimalFormat();
+   }
+ 
+   /**
+    * Appends the textual value for the specified field to the given string
+    * buffer. This method should be avoided, use <code>format(Date)</code>
+    * instead.
+    * @param date the Date object
+    * @param buf the buffer to append to
+    * @param field the current field position
+    * @return the modified buffer
+    */
+   public StringBuffer format(Date date, StringBuffer buf,
+                              FieldPosition field)
+   {
+     calendar.clear();
+     calendar.setTime(date);
+     buf.setLength(0);
+ 
+     // Day of week
+     buf.append(DAYS_OF_WEEK[calendar.get(Calendar.DAY_OF_WEEK)]);
+     buf.append(',');
+     buf.append(' ');
+ 
+     // Day of month
+     int day = calendar.get(Calendar.DAY_OF_MONTH);
+     buf.append(Character.forDigit(day / 10, 10));
+     buf.append(Character.forDigit(day % 10, 10));
+     buf.append(' ');
+ 
+     // Month
+     buf.append(MONTHS[calendar.get(Calendar.MONTH)]);
+     buf.append(' ');
+ 
+     // Year
+     int year = calendar.get(Calendar.YEAR);
+     if (year < 1000)
+       {
+         buf.append('0');
+         if (year < 100)
+           {
+             buf.append('0');
+             if (year < 10)
+               {
+                 buf.append('0');
+               }
+           }
+       }
+     buf.append(Integer.toString(year));
+     buf.append(' ');
+ 
+     // Hour
+     int hour = calendar.get(Calendar.HOUR_OF_DAY);
+     buf.append(Character.forDigit(hour / 10, 10));
+     buf.append(Character.forDigit(hour % 10, 10));
+     buf.append(':');
+ 
+     // Minute
+     int minute = calendar.get(Calendar.MINUTE);
+     buf.append(Character.forDigit(minute / 10, 10));
+     buf.append(Character.forDigit(minute % 10, 10));
+     buf.append(':');
+ 
+     // Second
+     int second = calendar.get(Calendar.SECOND);
+     buf.append(Character.forDigit(second / 10, 10));
+     buf.append(Character.forDigit(second % 10, 10));
+     buf.append(' ');
+ 
+     // Timezone
+     // Get time offset in minutes
+     int zoneOffset =(calendar.get(Calendar.ZONE_OFFSET) +
+                      calendar.get(Calendar.DST_OFFSET)) / 60000;
+     
+     // Apply + or - appropriately
+     if (zoneOffset < 0)
+       {
+         zoneOffset = -zoneOffset;
+         buf.append('-');
+       }
+     else
+       {
+         buf.append('+');
+       }
+     
+     // Set the 2 2-char fields as specified above
+     int tzhours = zoneOffset / 60;
+     buf.append(Character.forDigit(tzhours / 10, 10));
+     buf.append(Character.forDigit(tzhours % 10, 10));
+     int tzminutes = zoneOffset % 60;
+     buf.append(Character.forDigit(tzminutes / 10, 10));
+     buf.append(Character.forDigit(tzminutes % 10, 10));
+ 
+     field.setBeginIndex(0);
+     field.setEndIndex(buf.length());
+     return buf;
+   }
+ 
+   /**
+    * Parses the given date in the current TimeZone.
+    * @param text the formatted date to be parsed
+    * @param pos the current parse position
+    */
+   public Date parse(String text, ParsePosition pos)
+   {
+     int date, month, year, hour, minute, second;
+     String monthText;
+     int start = 0, end = -1;
+     int len = text.length();
+     calendar.clear();
+     pos.setIndex(start);
+     try
+       {
+         // Advance to date
+         if (Character.isLetter(text.charAt(start)))
+           {
+             start = skipNonWhitespace(text, start);
+           }
+         // Determine mode
+         switch(start)
+           {
+           case 3:
+             // asctime
+             start = skipWhitespace(text, start);
+             pos.setIndex(start);
+             end = skipNonWhitespace(text, start + 1);
+             monthText = text.substring(start, end);
+             month = -1;
+             for (int i = 0; i < 12; i++)
+               {
+                 if (MONTHS[i].equals(monthText))
+                   {
+                     month = i;
+                     break;
+                   }
+               }
+             if (month == -1)
+               {
+                 pos.setErrorIndex(end);
+                 return null;
+               }
+             // Advance to date
+             start = skipWhitespace(text, end + 1);
+             pos.setIndex(start);
+             end = skipNonWhitespace(text, start + 1);
+             date = Integer.parseInt(text.substring(start, end));
+             // Advance to hour
+             start = skipWhitespace(text, end + 1);
+             pos.setIndex(start);
+             end = skipTo(text, start + 1, ':');
+             hour = Integer.parseInt(text.substring(start, end));
+             // Advance to minute
+             start = end + 1;
+             pos.setIndex(start);
+             end = skipTo(text, start + 1, ':');
+             minute = Integer.parseInt(text.substring(start, end));
+             // Advance to second
+             start = end + 1;
+             pos.setIndex(start);
+             end = skipNonWhitespace(text, start + 1);
+             second = Integer.parseInt(text.substring(start, end));
+             // Advance to year
+             start = skipWhitespace(text, end + 1);
+             pos.setIndex(start);
+             end = skipNonWhitespace(text, start + 1);
+             year = Integer.parseInt(text.substring(start, end));
+             break;
+           case 0:
+           case 4:
+             // rfc822
+             start = skipWhitespace(text, start);
+             pos.setIndex(start);
+             end = skipNonWhitespace(text, start + 1);
+             date = Integer.parseInt(text.substring(start, end));
+             // Advance to month
+             start = skipWhitespace(text, end + 1);
+             pos.setIndex(start);
+             end = skipNonWhitespace(text, start + 1);
+             monthText = text.substring(start, end);
+             month = -1;
+             for (int i = 0; i < 12; i++)
+               {
+                 if (MONTHS[i].equals(monthText))
+                   {
+                     month = i;
+                     break;
+                   }
+               }
+             if (month == -1)
+               {
+                 pos.setErrorIndex(end);
+                 return null;
+               }
+             // Advance to year
+             start = skipWhitespace(text, end + 1);
+             pos.setIndex(start);
+             end = skipNonWhitespace(text, start + 1);
+             year = Integer.parseInt(text.substring(start, end));
+             // Advance to hour
+             start = skipWhitespace(text, end + 1);
+             pos.setIndex(start);
+             end = skipTo(text, start + 1, ':');
+             hour = Integer.parseInt(text.substring(start, end));
+             // Advance to minute
+             start = end + 1;
+             pos.setIndex(start);
+             end = skipTo(text, start + 1, ':');
+             minute = Integer.parseInt(text.substring(start, end));
+             // Advance to second
+             start = end + 1;
+             pos.setIndex(start);
+             end = start + 1;
+             while (end < len && !Character.isWhitespace(text.charAt(end)))
+               {
+                 end++;
+               }
+             second = Integer.parseInt(text.substring(start, end));
+             break;
+           default:
+             // rfc850(obsolete)
+             start = skipWhitespace(text, start);
+             pos.setIndex(start);
+             end = skipTo(text, start + 1, '-');
+             date = Integer.parseInt(text.substring(start, end));
+             // Advance to month
+             start = end + 1;
+             pos.setIndex(start);
+             end = skipTo(text, start + 1, '-');
+             monthText = text.substring(start, end);
+             month = -1;
+             for (int i = 0; i < 12; i++)
+               {
+                 if (MONTHS[i].equals(monthText))
+                   {
+                     month = i;
+                     break;
+                   }
+               }
+             if (month == -1)
+               {
+                 pos.setErrorIndex(end);
+                 return null;
+               }
+             // Advance to year
+             start = end + 1;
+             pos.setIndex(start);
+             end = skipNonWhitespace(text, start + 1);
+             year = 1900 + Integer.parseInt(text.substring(start, end));
+             // Advance to hour
+             start = skipWhitespace(text, end + 1);
+             pos.setIndex(start);
+             end = skipTo(text, start + 1, ':');
+             hour = Integer.parseInt(text.substring(start, end));
+             // Advance to minute
+             start = end + 1;
+             pos.setIndex(start);
+             end = skipTo(text, start + 1, ':');
+             minute = Integer.parseInt(text.substring(start, end));
+             // Advance to second
+             start = end + 1;
+             pos.setIndex(start);
+             end = start + 1;
+             while (end < len && !Character.isWhitespace(text.charAt(end)))
+               {
+                 end++;
+               }
+             second = Integer.parseInt(text.substring(start, end));
+           }
+         
+         calendar.set(Calendar.YEAR, year);
+         calendar.set(Calendar.MONTH, month);
+         calendar.set(Calendar.DAY_OF_MONTH, date);
+         calendar.set(Calendar.HOUR, hour);
+         calendar.set(Calendar.MINUTE, minute);
+         calendar.set(Calendar.SECOND, second);
+         
+         if (end != len)
+           {
+             // Timezone
+             start = skipWhitespace(text, end + 1);
+             end = start + 1;
+             while (end < len && !Character.isWhitespace(text.charAt(end)))
+               {
+                 end++;
+               }
+             char pm = text.charAt(start);
+             if (Character.isLetter(pm))
+               {
+                 TimeZone tz =
+                   TimeZone.getTimeZone(text.substring(start, end));
+                 calendar.set(Calendar.ZONE_OFFSET, tz.getRawOffset());
+               }
+             else
+               {
+                 int zoneOffset = 0;
+                 zoneOffset += 600 * Character.digit(text.charAt(++start), 10);
+                 zoneOffset += 60 * Character.digit(text.charAt(++start), 10);
+                 zoneOffset += 10 * Character.digit(text.charAt(++start), 10);
+                 zoneOffset += Character.digit(text.charAt(++start), 10);
+                 zoneOffset *= 60000; // minutes -> ms
+                 if ('-' == pm)
+                   {
+                     zoneOffset = -zoneOffset;
+                   }
+                 calendar.set(Calendar.ZONE_OFFSET, zoneOffset);
+               }
+           }
+         pos.setIndex(end);
+         
+         return calendar.getTime();
+       }
+     catch (NumberFormatException e)
+       {
+         pos.setErrorIndex(Math.max(start, end));
+       }
+     catch (StringIndexOutOfBoundsException e)
+       {
+         pos.setErrorIndex(Math.max(start, end));
+       }
+     return null;
+   }
+ 
+   private int skipWhitespace(String text, int pos)
+   {
+     while(Character.isWhitespace(text.charAt(pos)))
+       {
+         pos++;
+       }
+     return pos;    
+   }
+ 
+   private int skipNonWhitespace(String text, int pos)
+   {
+     while(!Character.isWhitespace(text.charAt(pos)))
+       {
+         pos++;
+       }
+     return pos;    
+   }
+ 
+   private int skipTo(String text, int pos, char c)
+   {
+     while(text.charAt(pos) != c)
+       {
+         pos++;
+       }
+     return pos;    
+   }
+ 
+   /**
+    * Don't allow setting the calendar.
+    */
+   public void setCalendar(Calendar newCalendar)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Don't allow setting the NumberFormat.
+    */
+   public void setNumberFormat(NumberFormat newNumberFormat)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java	Fri Jan 20 22:13:10 2006
***************
*** 0 ****
--- 1,722 ----
+ /* HTTPURLConnection.java --
+    Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.FileNotFoundException;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.ProtocolException;
+ import java.net.URL;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.security.cert.Certificate;
+ import java.util.Collections;
+ import java.util.Date;
+ import java.util.Iterator;
+ import java.util.LinkedHashMap;
+ import java.util.Map;
+ 
+ import javax.net.ssl.HandshakeCompletedEvent;
+ import javax.net.ssl.HandshakeCompletedListener;
+ import javax.net.ssl.HostnameVerifier;
+ import javax.net.ssl.HttpsURLConnection;
+ import javax.net.ssl.SSLPeerUnverifiedException;
+ import javax.net.ssl.SSLSocketFactory;
+ 
+ /**
+  * A URLConnection that uses the HTTPConnection class.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class HTTPURLConnection
+   extends HttpsURLConnection
+   implements HandshakeCompletedListener
+ {
+ 
+   /**
+    * Pool of reusable connections, used if keepAlive is true.
+    */
+   private static final LinkedHashMap connectionPool = new LinkedHashMap();
+   static int maxConnections;
+ 
+   /*
+    * The underlying connection.
+    */
+   private HTTPConnection connection;
+ 
+   // These are package private for use in anonymous inner classes.
+   String proxyHostname;
+   int proxyPort;
+   String agent;
+   boolean keepAlive;
+ 
+   private Request request;
+   private Headers requestHeaders;
+   private ByteArrayOutputStream requestSink;
+   private boolean requestMethodSetExplicitly;
+ 
+   private Response response;
+   private InputStream responseSink;
+   private InputStream errorSink;
+ 
+   private HandshakeCompletedEvent handshakeEvent;
+ 
+   /**
+    * Constructor.
+    * @param url the URL
+    */
+   public HTTPURLConnection(URL url)
+     throws IOException
+   {
+     super(url);
+     requestHeaders = new Headers();
+     AccessController.doPrivileged(this.new GetHTTPPropertiesAction());
+   }
+ 
+   class GetHTTPPropertiesAction
+     implements PrivilegedAction
+   {
+ 
+     public Object run()
+     {
+       proxyHostname = System.getProperty("http.proxyHost");
+       if (proxyHostname != null && proxyHostname.length() > 0)
+         {
+           String port = System.getProperty("http.proxyPort");
+           if (port != null && port.length() > 0)
+             {
+               proxyPort = Integer.parseInt(port);
+             }
+           else
+             {
+               proxyHostname = null;
+               proxyPort = -1;
+             }
+         }
+       agent = System.getProperty("http.agent");
+       String ka = System.getProperty("http.keepAlive");
+       keepAlive = !(ka != null && "false".equals(ka));
+       String mc = System.getProperty("http.maxConnections");
+       maxConnections = (mc != null && mc.length() > 0) ?
+         Math.max(Integer.parseInt(mc), 1) : 5;
+       return null;
+     }
+ 
+   }
+ 
+   public void connect()
+     throws IOException
+   {
+     if (connected)
+       {
+         return;
+       }
+     String protocol = url.getProtocol();
+     boolean secure = "https".equals(protocol);
+     String host = url.getHost();
+     int port = url.getPort();
+     if (port < 0)
+       {
+         port = secure ? HTTPConnection.HTTPS_PORT :
+           HTTPConnection.HTTP_PORT;
+       }
+     String file = url.getFile();
+     String username = url.getUserInfo();
+     String password = null;
+     if (username != null)
+       {
+         int ci = username.indexOf(':');
+         if (ci != -1)
+           {
+             password = username.substring(ci + 1);
+             username = username.substring(0, ci);
+           }
+       }
+     final Credentials creds = (username == null) ? null :
+       new Credentials (username, password);
+     
+     boolean retry;
+     do
+       {
+         retry = false;
+         if (connection == null)
+           {
+             connection = getConnection(host, port, secure);
+             if (secure)
+               {
+                 SSLSocketFactory factory = getSSLSocketFactory();
+                 HostnameVerifier verifier = getHostnameVerifier();
+                 if (factory != null)
+                   {
+                     connection.setSSLSocketFactory(factory);
+                   }
+                 connection.addHandshakeCompletedListener(this);
+                 // TODO verifier
+               }
+           }
+         if (proxyHostname != null)
+           {
+             if (proxyPort < 0)
+               {
+                 proxyPort = secure ? HTTPConnection.HTTPS_PORT :
+                   HTTPConnection.HTTP_PORT;
+               }
+             connection.setProxy(proxyHostname, proxyPort);
+           }
+         try
+           {
+             request = connection.newRequest(method, file);
+             if (!keepAlive)
+               {
+                 request.setHeader("Connection", "close");
+               }
+             if (agent != null)
+               {
+                 request.setHeader("User-Agent", agent);
+               }
+             request.getHeaders().putAll(requestHeaders);
+             if (requestSink != null)
+               {
+                 byte[] content = requestSink.toByteArray();
+                 RequestBodyWriter writer = new ByteArrayRequestBodyWriter(content);
+                 request.setRequestBodyWriter(writer);
+               }
+             if (creds != null)
+               {
+                 request.setAuthenticator(new Authenticator() {
+                     public Credentials getCredentials(String realm, int attempts)
+                     {
+                       return (attempts < 2) ? creds : null;
+                     }
+                   });
+               }
+             response = request.dispatch();
+           }
+         catch (IOException ioe)
+           {
+             if (connection.useCount > 0)
+               {
+                 // Connection re-use failed: Try a new connection.
+                 try
+                   {
+                     connection.close();
+                   }
+                 catch (IOException _)
+                   {
+                     // Ignore.
+                   }
+                 connection = null;
+                 retry = true;
+                 continue;
+               }
+             else
+               {
+                 // First time the connection was used: Hard failure.
+                 throw ioe;
+               }
+           }
+         
+         if (isRedirect(response) && getInstanceFollowRedirects())
+           {
+ 	    // Read the response body, if there is one.  If the
+ 	    // redirect points us back at the same server, we will use
+ 	    // the cached connection, so we must make sure there is no
+ 	    // pending data in it.
+             InputStream body = response.getBody();
+ 	    if (body != null)
+ 	      {
+ 		byte[] ignore = new byte[1024];
+ 		while (true)
+ 		  {
+ 		    int n = body.read(ignore, 0, ignore.length);
+ 		    if (n == -1)
+ 		      break;
+ 		  }
+ 	      }
+ 
+             // Follow redirect
+             String location = response.getHeader("Location");
+ 	    if (location != null)
+ 	      {
+ 		String connectionUri = connection.getURI();
+ 		int start = connectionUri.length();
+ 		if (location.startsWith(connectionUri) &&
+ 		    location.charAt(start) == '/')
+ 		  {
+ 		    file = location.substring(start);
+ 		    retry = true;
+ 		  }
+ 		else if (location.startsWith("http:"))
+ 		  {
+ 		    connection.close();
+ 		    connection = null;
+ 		    secure = false;
+ 		    start = 7;
+ 		    int end = location.indexOf('/', start);
+ 		    host = location.substring(start, end);
+ 		    int ci = host.lastIndexOf(':');
+ 		    if (ci != -1)
+ 		      {
+ 			port = Integer.parseInt(host.substring (ci + 1));
+ 			host = host.substring(0, ci);
+ 		      }
+ 		    else
+ 		      {
+ 			port = HTTPConnection.HTTP_PORT;
+ 		      }
+ 		    file = location.substring(end);
+ 		    retry = true;
+ 		  }
+ 		else if (location.startsWith("https:"))
+ 		  {
+ 		    connection.close();
+ 		    connection = null;
+ 		    secure = true;
+ 		    start = 8;
+ 		    int end = location.indexOf('/', start);
+ 		    host = location.substring(start, end);
+ 		    int ci = host.lastIndexOf(':');
+ 		    if (ci != -1)
+ 		      {
+ 			port = Integer.parseInt(host.substring (ci + 1));
+ 			host = host.substring(0, ci);
+ 		      }
+ 		    else
+ 		      {
+ 			port = HTTPConnection.HTTPS_PORT;
+ 		      }
+ 		    file = location.substring(end);
+ 		    retry = true;
+ 		  }
+ 		else if (location.length() > 0)
+ 		  {
+ 		    // Malformed absolute URI, treat as file part of URI
+ 		    if (location.charAt(0) == '/')
+ 		      {
+ 			// Absolute path
+ 			file = location;
+ 		      }
+ 		    else
+ 		      {
+ 			// Relative path
+ 			int lsi = file.lastIndexOf('/');
+ 			file = (lsi == -1) ? "/" : file.substring(0, lsi + 1);
+ 		    file += location;
+ 		      }
+ 		    retry = true;
+ 		  }
+ 	      }
+           }
+         else
+           {
+             responseSink = response.getBody();
+             
+             if (response.getCode() == 404)
+ 	      {
+ 		errorSink = responseSink;
+ 		throw new FileNotFoundException(url.toString());
+ 	      }
+           }
+       }
+     while (retry);
+     connected = true;
+   }
+ 
+   private static boolean isRedirect(Response response)
+   {
+     int sc = response.getCode();
+     return (sc != 304 && (sc / 100) == 3);
+   }
+ 
+   /**
+    * Returns a connection, from the pool if necessary.
+    */
+   HTTPConnection getConnection(String host, int port, boolean secure)
+     throws IOException
+   {
+     HTTPConnection connection;
+     if (keepAlive)
+       {
+         Object key = HTTPConnection.getPoolKey(host, port, secure);
+         synchronized (connectionPool)
+           {
+             connection = (HTTPConnection) connectionPool.remove(key);
+             if (connection == null)
+               {
+                 connection = new HTTPConnection(host, port, secure);
+                 connection.setPool(connectionPool);
+               }
+           }
+       }
+     else
+       {
+         connection = new HTTPConnection(host, port, secure);
+       }
+     return connection;
+   }
+ 
+   public void disconnect()
+   {
+     if (connection != null)
+       {
+         try
+           {
+             connection.close();
+           }
+         catch (IOException e)
+           {
+           }
+       }
+   }
+ 
+   public boolean usingProxy()
+   {
+     return (proxyHostname != null);
+   }
+ 
+   /**
+    * Overrides the corresponding method in HttpURLConnection to permit
+    * arbitrary methods, as long as they're valid ASCII alphabetic
+    * characters. This is to permit WebDAV and other HTTP extensions to
+    * function.
+    * @param method the method
+    */
+   public void setRequestMethod(String method)
+     throws ProtocolException
+   {
+     if (connected)
+       {
+         throw new ProtocolException("Already connected");
+       }
+     // Validate
+     method = method.toUpperCase();
+     int len = method.length();
+     if (len == 0)
+       {
+         throw new ProtocolException("Empty method name");
+       }
+     for (int i = 0; i < len; i++)
+       {
+         char c = method.charAt(i);
+         if (c < 0x41 || c > 0x5a)
+           {
+             throw new ProtocolException("Illegal character '" + c +
+                                         "' at index " + i);
+           }
+       }
+     // OK
+     this.method = method;
+     requestMethodSetExplicitly = true;
+   }
+ 
+   public String getRequestProperty(String key)
+   {
+     return requestHeaders.getValue(key);
+   }
+ 
+   public Map getRequestProperties()
+   {
+     return requestHeaders;
+   }
+ 
+   public void setRequestProperty(String key, String value)
+   {
+     requestHeaders.put(key, value);
+   }
+ 
+   public void addRequestProperty(String key, String value)
+   {
+     String old = requestHeaders.getValue(key);
+     if (old == null)
+       {
+         requestHeaders.put(key, value);
+       }
+     else
+       {
+         requestHeaders.put(key, old + "," + value);
+       }
+   }
+ 
+   public OutputStream getOutputStream()
+     throws IOException
+   {
+     if (connected)
+       {
+         throw new ProtocolException("Already connected");
+       }
+     if (!doOutput)
+       {
+         throw new ProtocolException("doOutput is false");
+       }
+     else if (!requestMethodSetExplicitly)
+       {
+         /*
+          * Silently change the method to POST if no method was set
+          * explicitly. This is due to broken applications depending on this
+          * behaviour (Apache XMLRPC for one).
+          */
+         method = "POST";
+       }
+     if (requestSink == null)
+       {
+         requestSink = new ByteArrayOutputStream();
+       }
+     return requestSink;
+   }
+   
+   // -- Response --
+   
+   public InputStream getInputStream()
+     throws IOException
+   {
+     if (!connected)
+       {
+         connect();
+       }
+     if (!doInput)
+       {
+         throw new ProtocolException("doInput is false");
+       }
+     return responseSink;
+   }
+ 
+   public InputStream getErrorStream()
+   {
+     return errorSink;
+   }
+ 
+   public Map getHeaderFields()
+   {
+     if (!connected)
+       {
+         try
+           {
+             connect();
+           }
+         catch (IOException e)
+           {
+             return null;
+           }
+       }
+     Headers headers = response.getHeaders();
+     LinkedHashMap ret = new LinkedHashMap();
+     ret.put(null, Collections.singletonList(getStatusLine(response)));
+     for (Iterator i = headers.entrySet().iterator(); i.hasNext(); )
+       {
+         Map.Entry entry = (Map.Entry) i.next();
+         String key = (String) entry.getKey();
+         String value = (String) entry.getValue();
+         ret.put(key, Collections.singletonList(value));
+       }
+     return Collections.unmodifiableMap(ret);
+   }
+ 
+   String getStatusLine(Response response)
+   {
+     return "HTTP/" + response.getMajorVersion() +
+       "." + response.getMinorVersion() +
+       " " + response.getCode() +
+       " " + response.getMessage();
+   }
+   
+   public String getHeaderField(int index)
+   {
+     if (!connected)
+       {
+         try
+           {
+             connect();
+           }
+         catch (IOException e)
+           {
+             return null;
+           }
+       }
+     if (index == 0)
+       {
+         return getStatusLine(response);
+       }
+     Iterator i = response.getHeaders().entrySet().iterator();
+     Map.Entry entry;
+     int count = 1;
+     do
+       {
+         if (!i.hasNext())
+           {
+             return null;
+           }
+         entry = (Map.Entry) i.next();
+         count++;
+       }
+     while (count <= index);
+     return (String) entry.getValue();
+   }
+ 
+   public String getHeaderFieldKey(int index)
+   {
+     if (!connected)
+       {
+         try
+           {
+             connect();
+           }
+         catch (IOException e)
+           {
+             return null;
+           }
+       }
+     if (index == 0)
+       {
+         return null;
+       }
+     Iterator i = response.getHeaders().entrySet().iterator();
+     Map.Entry entry;
+     int count = 1;
+     do
+       {
+         if (!i.hasNext())
+           {
+             return null;
+           }
+         entry = (Map.Entry) i.next();
+         count++;
+       }
+     while (count <= index);
+     return (String) entry.getKey();
+   }
+ 
+   public String getHeaderField(String name)
+   {
+     if (!connected)
+       {
+         try
+           {
+             connect();
+           }
+         catch (IOException e)
+           {
+             return null;
+           }
+       }
+     return (String) response.getHeader(name);
+   }
+ 
+   public long getHeaderFieldDate(String name, long def)
+   {
+     if (!connected)
+       {
+         try
+           {
+             connect();
+           }
+         catch (IOException e)
+           {
+             return def;
+           }
+       }
+     Date date = response.getDateHeader(name);
+     return (date == null) ? def : date.getTime();
+   }
+ 
+   public String getContentType()
+   {
+     return getHeaderField("Content-Type");
+   }
+ 
+   public int getResponseCode()
+     throws IOException
+   {
+     if (!connected)
+       {
+         connect();
+       }
+     return response.getCode();
+   }
+ 
+   public String getResponseMessage()
+     throws IOException
+   {
+     if (!connected)
+       {
+         connect();
+       }
+     return response.getMessage();
+   }
+ 
+   // -- HTTPS specific --
+ 
+   public String getCipherSuite()
+   {
+     if (!connected)
+       {
+         throw new IllegalStateException("not connected");
+       }
+     return handshakeEvent.getCipherSuite();
+   }
+   
+   public Certificate[] getLocalCertificates()
+   {
+     if (!connected)
+       {
+         throw new IllegalStateException("not connected");
+       }
+     return handshakeEvent.getLocalCertificates();
+   }
+ 
+   public Certificate[] getServerCertificates()
+     throws SSLPeerUnverifiedException
+   {
+     if (!connected)
+       {
+         throw new IllegalStateException("not connected");
+       }
+     return handshakeEvent.getPeerCertificates();
+   }
+ 
+   // HandshakeCompletedListener
+ 
+   public void handshakeCompleted(HandshakeCompletedEvent event)
+   {
+     handshakeEvent = event;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Handler.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Handler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Handler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Handler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* Handler.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import java.io.IOException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.net.URLStreamHandler;
+ 
+ /**
+  * An HTTP URL stream handler.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class Handler
+   extends URLStreamHandler
+ {
+ 
+   /**
+    * Returns the default HTTP port (80).
+    */
+   protected int getDefaultPort()
+   {
+     return HTTPConnection.HTTP_PORT;
+   }
+ 
+   /**
+    * Returns an HTTPURLConnection for the given URL.
+    */
+   public URLConnection openConnection(URL url)
+     throws IOException
+   {
+     return new HTTPURLConnection(url);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Headers.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Headers.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Headers.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Headers.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,352 ----
+ /* Headers.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import gnu.java.net.LineInputStream;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.text.DateFormat;
+ import java.text.ParseException;
+ import java.util.Collection;
+ import java.util.Date;
+ import java.util.Iterator;
+ import java.util.LinkedHashMap;
+ import java.util.LinkedHashSet;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ /**
+  * A collection of HTTP header names and associated values.
+  * Retrieval of values is case insensitive. An iteration over the keys
+  * returns the header names in the order they were received.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class Headers
+   extends LinkedHashMap
+ {
+ 
+   static final DateFormat dateFormat = new HTTPDateFormat();
+ 
+   static class Header
+   {
+ 
+     final String name;
+ 
+     Header(String name)
+     {
+       if (name == null || name.length() == 0)
+         {
+           throw new IllegalArgumentException(name);
+         }
+       this.name = name;
+     }
+ 
+     public int hashCode()
+     {
+       return name.toLowerCase().hashCode();
+     }
+ 
+     public boolean equals(Object other)
+     {
+       if (other instanceof Header)
+         {
+           return ((Header) other).name.equalsIgnoreCase(name);
+         }
+       return false;
+     }
+ 
+     public String toString()
+     {
+       return name;
+     }
+     
+   }
+ 
+   static class HeaderEntry
+     implements Map.Entry
+   {
+ 
+     final Map.Entry entry;
+ 
+     HeaderEntry(Map.Entry entry)
+     {
+       this.entry = entry;
+     }
+ 
+     public Object getKey()
+     {
+       return ((Header) entry.getKey()).name;
+     }
+ 
+     public Object getValue()
+     {
+       return entry.getValue();
+     }
+ 
+     public Object setValue(Object value)
+     {
+       return entry.setValue(value);
+     }
+ 
+     public int hashCode()
+     {
+       return entry.hashCode();
+     }
+ 
+     public boolean equals(Object other)
+     {
+       return entry.equals(other);
+     }
+ 
+     public String toString()
+     {
+       return getKey().toString() + "=" + getValue();
+     }
+     
+   }
+ 
+   public Headers()
+   {
+   }
+ 
+   public boolean containsKey(Object key)
+   {
+     return super.containsKey(new Header((String) key));
+   }
+ 
+   public Object get(Object key)
+   {
+     return super.get(new Header((String) key));
+   }
+ 
+   /**
+    * Returns the value of the specified header as a string.
+    */
+   public String getValue(String header)
+   {
+     return (String) super.get(new Header(header));
+   }
+ 
+   /**
+    * Returns the value of the specified header as an integer,
+    * or -1 if the header is not present or not an integer.
+    */
+   public int getIntValue(String header)
+   {
+     String val = getValue(header);
+     if (val == null)
+       {
+         return -1;
+       }
+     try
+       {
+         return Integer.parseInt(val);
+       }
+     catch (NumberFormatException e)
+       {
+       }
+     return -1;
+   }
+ 
+   /**
+    * Returns the value of the specified header as a long, or -1 if the
+    * header is not present or cannot be parsed as a long.
+    */
+   public long getLongValue(String header)
+   {
+     String val = getValue(header);
+     if (val == null)
+       {
+         return -1;
+       }
+     try
+       {
+         return Long.parseLong(val);
+       }
+     catch (NumberFormatException e)
+       {
+       }
+     return -1;
+   }
+ 
+   /**
+    * Returns the value of the specified header as a date,
+    * or <code>null</code> if the header is not present or not a date.
+    */
+   public Date getDateValue(String header)
+   {
+     String val = getValue(header);
+     if (val == null)
+       {
+         return null;
+       }
+     try
+       {
+         return dateFormat.parse(val);
+       }
+     catch (ParseException e)
+       {
+         return null;
+       }
+   }
+ 
+   public Object put(Object key, Object value)
+   {
+     return super.put(new Header((String) key), value);
+   }
+ 
+   public Object remove(Object key)
+   {
+     return super.remove(new Header((String) key));
+   }
+ 
+   public void putAll(Map t)
+   {
+     for (Iterator i = t.keySet().iterator(); i.hasNext(); )
+       {
+         String key = (String) i.next();
+         String value = (String) t.get(key);
+         put(key, value);
+       }
+   }
+   
+   public Set keySet()
+   {
+     Set keys = super.keySet();
+     Set ret = new LinkedHashSet();
+     for (Iterator i = keys.iterator(); i.hasNext(); )
+       {
+         ret.add(((Header) i.next()).name);
+       }
+     return ret;
+   }
+ 
+   public Set entrySet()
+   {
+     Set entries = super.entrySet();
+     Set ret = new LinkedHashSet();
+     for (Iterator i = entries.iterator(); i.hasNext(); )
+       {
+         Map.Entry entry = (Map.Entry) i.next();
+         ret.add(new HeaderEntry(entry));
+       }
+     return ret;
+   }
+ 
+   /**
+    * Parse the specified input stream, adding headers to this collection.
+    */
+   public void parse(InputStream in)
+     throws IOException
+   {
+     LineInputStream lin = (in instanceof LineInputStream) ?
+       (LineInputStream) in : new LineInputStream(in);
+     
+     String name = null;
+     StringBuilder value = new StringBuilder();
+     while (true)
+       {
+         String line = lin.readLine();
+         if (line == null)
+           {
+             if (name != null)
+               {
+                 addValue(name, value.toString());
+               }
+             break;
+           }
+         int len = line.length();
+         if (len < 2)
+           {
+             if (name != null)
+               {
+                 addValue(name, value.toString());
+               }
+             break;
+           }
+         char c1 = line.charAt(0);
+         if (c1 == ' ' || c1 == '\t')
+           {
+             // Continuation
+ 	    int last = len - 1;
+ 	    if (line.charAt(last) != '\r')
+ 	      ++last;
+             value.append(line.substring(0, last));
+           }
+         else
+           {
+             if (name != null)
+               {
+                 addValue(name, value.toString());
+               }
+             
+             int di = line.indexOf(':');
+             name = line.substring(0, di);
+             value.setLength(0);
+             do
+               {
+                 di++;
+               }
+             while (di < len && line.charAt(di) == ' ');
+ 	    int last = len - 1;
+ 	    if (line.charAt(last) != '\r')
+ 	      ++last;
+             value.append(line.substring(di, last));
+           }
+       }
+   }
+   
+   private void addValue(String name, String value)
+   {
+     Header key = new Header(name);
+     String old = (String) super.get(key);
+     if (old == null)
+       {
+         super.put(key, value);
+       }
+     else
+       {
+         super.put(key, old + ", " + value);
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,220 ----
+ /* LimitedLengthInputStream.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * InputStream that limits the total number of bytes that can be read
+  * from an underlying stream.  In addition to limiting the number of
+  * bytes read, close() is not propagated to the underlying stream.
+  *
+  * @author David Daney (ddaney@avtrex.com)
+  */
+ class LimitedLengthInputStream
+   extends InputStream
+ {
+   private long remainingLen;
+   private boolean restrictLen;
+   private HTTPConnection connection;
+   private boolean eof;
+   private InputStream in;
+   private boolean doClose;
+   
+   
+   private void handleClose()
+     throws IOException
+   {
+     eof = true;
+     if (doClose)
+       {
+         in.close();
+       }
+     else
+       {
+         connection.release();
+       }
+     in = null;
+     connection = null;
+   }
+ 
+   /**
+    * Constructor.
+    *
+    * @param in the underlying stream
+    *
+    * @param maxLen the maximum number of bytes to read
+    *
+    * @param restrictLen if true the number of bytes that can be read
+    * from this stream will be limited to maxLen, otherwise the number
+    * of bytes is not restricted.
+    * 
+    * @param con the HTTPConnection associated with this stream
+    *
+    * @param doClose if true con will be closed when finished reading,
+    * else it will be placed back in the connection pool.
+    *
+    */
+   LimitedLengthInputStream(InputStream in,
+                            long maxLen,
+                            boolean restrictLen,
+                            HTTPConnection con,
+                            boolean doClose)
+     throws IOException
+ 
+   {
+     this.in = in;
+     this.remainingLen = maxLen;
+     this.restrictLen = restrictLen;
+     this.connection = con;
+     this.doClose = doClose;
+ 
+     if (restrictLen)
+       {
+         if (maxLen < 0)
+           throw new IllegalArgumentException();
+         else if (maxLen == 0)
+           handleClose(); // Nothing to do, release the connection.
+       }
+   }
+ 
+   public synchronized int read()
+     throws IOException
+   {
+     if (eof)
+       return -1; // EOF
+ 
+     int r;
+     
+     if (restrictLen)
+       {
+         r = in.read();
+         if (-1 != r)
+           remainingLen--;
+ 
+         if (0 == remainingLen)
+           handleClose();
+       }
+     else
+       {
+         r = in.read();
+         if (r == -1)
+           handleClose();
+       }
+     
+     return r;
+   }
+ 
+   public int read(byte[] buffer)
+     throws IOException
+   {
+     return read(buffer, 0, buffer.length);
+   }
+ 
+   public synchronized int read(byte[] buffer, int offset, int length)
+     throws IOException
+   {
+     if (eof)
+       return -1; // EOF
+ 
+     if (restrictLen && length > remainingLen)
+       length = (int) remainingLen;
+       
+     int r = in.read(buffer, offset, length);
+     
+     if (-1 == r)
+       handleClose();
+     
+     if (restrictLen && r > 0)
+       {
+         remainingLen -= r;
+         if (0 == remainingLen)
+           handleClose();
+       }
+     return r;
+   }
+ 
+   public synchronized long skip(long n)
+     throws IOException
+   {
+ 
+     if (eof)
+       return 0;
+ 
+     if (restrictLen && n > remainingLen)
+       n = remainingLen;
+ 
+     long r = in.skip(n);
+     
+     if (restrictLen)
+       {
+         remainingLen -= r;
+         if (0 == remainingLen)
+           handleClose();
+       }
+     return r;
+   }
+ 
+   public synchronized int available()
+     throws IOException
+   {
+     if (eof)
+       return 0;
+ 
+     int a = in.available();
+     if (restrictLen && a > remainingLen)
+       a = (int)remainingLen;
+     return a;
+   }
+ 
+   public synchronized void close()
+     throws IOException
+   {
+     if (eof)
+       return;
+ 
+     // If we get to here, the stream was not fully read.  Just throw
+     // it away.
+ 
+     doClose = true;
+     
+     handleClose();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Request.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Request.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Request.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Request.java	Mon Jan 16 20:45:11 2006
***************
*** 0 ****
--- 1,881 ----
+ /* Request.java --
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import gnu.java.net.BASE64;
+ import gnu.java.net.LineInputStream;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.ProtocolException;
+ import java.security.MessageDigest;
+ import java.security.NoSuchAlgorithmException;
+ import java.text.DateFormat;
+ import java.text.ParseException;
+ import java.util.Calendar;
+ import java.util.Date;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.zip.GZIPInputStream;
+ import java.util.zip.InflaterInputStream;
+ 
+ /**
+  * A single HTTP request.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class Request
+ {
+ 
+   /**
+    * The connection context in which this request is invoked.
+    */
+   protected final HTTPConnection connection;
+ 
+   /**
+    * The HTTP method to invoke.
+    */
+   protected final String method;
+ 
+   /**
+    * The path identifying the resource.
+    * This string must conform to the abs_path definition given in RFC2396,
+    * with an optional "?query" part, and must be URI-escaped by the caller.
+    */
+   protected final String path;
+ 
+   /**
+    * The headers in this request.
+    */
+   protected final Headers requestHeaders;
+ 
+   /**
+    * The request body provider.
+    */
+   protected RequestBodyWriter requestBodyWriter;
+ 
+   /**
+    * Request body negotiation threshold for 100-continue expectations.
+    */
+   protected int requestBodyNegotiationThreshold;
+ 
+   /**
+    * Map of response header handlers.
+    */
+   protected Map responseHeaderHandlers;
+ 
+   /**
+    * The authenticator.
+    */
+   protected Authenticator authenticator;
+ 
+   /**
+    * Whether this request has been dispatched yet.
+    */
+   private boolean dispatched;
+ 
+   /**
+    * Constructor for a new request.
+    * @param connection the connection context
+    * @param method the HTTP method
+    * @param path the resource path including query part
+    */
+   protected Request(HTTPConnection connection, String method,
+                     String path)
+   {
+     this.connection = connection;
+     this.method = method;
+     this.path = path;
+     requestHeaders = new Headers();
+     responseHeaderHandlers = new HashMap();
+     requestBodyNegotiationThreshold = 4096;
+   }
+ 
+   /**
+    * Returns the connection associated with this request.
+    * @see #connection
+    */
+   public HTTPConnection getConnection()
+   {
+     return connection;
+   }
+ 
+   /**
+    * Returns the HTTP method to invoke.
+    * @see #method
+    */
+   public String getMethod()
+   {
+     return method;
+   }
+ 
+   /**
+    * Returns the resource path.
+    * @see #path
+    */
+   public String getPath()
+   {
+     return path;
+   }
+ 
+   /**
+    * Returns the full request-URI represented by this request, as specified
+    * by HTTP/1.1.
+    */
+   public String getRequestURI()
+   {
+     return connection.getURI() + path;
+   }
+ 
+   /**
+    * Returns the headers in this request.
+    */
+   public Headers getHeaders()
+   {
+     return requestHeaders;
+   }
+ 
+   /**
+    * Returns the value of the specified header in this request.
+    * @param name the header name
+    */
+   public String getHeader(String name)
+   {
+     return requestHeaders.getValue(name);
+   }
+ 
+   /**
+    * Returns the value of the specified header in this request as an integer.
+    * @param name the header name
+    */
+   public int getIntHeader(String name)
+   {
+     return requestHeaders.getIntValue(name);
+   }
+ 
+   /**
+    * Returns the value of the specified header in this request as a date.
+    * @param name the header name
+    */
+   public Date getDateHeader(String name)
+   {
+     return requestHeaders.getDateValue(name);
+   }
+ 
+   /**
+    * Sets the specified header in this request.
+    * @param name the header name
+    * @param value the header value
+    */
+   public void setHeader(String name, String value)
+   {
+     requestHeaders.put(name, value);
+   }
+ 
+   /**
+    * Convenience method to set the entire request body.
+    * @param requestBody the request body content
+    */
+   public void setRequestBody(byte[] requestBody)
+   {
+     setRequestBodyWriter(new ByteArrayRequestBodyWriter(requestBody));
+   }
+ 
+   /**
+    * Sets the request body provider.
+    * @param requestBodyWriter the handler used to obtain the request body
+    */
+   public void setRequestBodyWriter(RequestBodyWriter requestBodyWriter)
+   {
+     this.requestBodyWriter = requestBodyWriter;
+   }
+ 
+   /**
+    * Sets a callback handler to be invoked for the specified header name.
+    * @param name the header name
+    * @param handler the handler to receive the value for the header
+    */
+   public void setResponseHeaderHandler(String name,
+                                        ResponseHeaderHandler handler)
+   {
+     responseHeaderHandlers.put(name, handler);
+   }
+ 
+   /**
+    * Sets an authenticator that can be used to handle authentication
+    * automatically.
+    * @param authenticator the authenticator
+    */
+   public void setAuthenticator(Authenticator authenticator)
+   {
+     this.authenticator = authenticator;
+   }
+ 
+   /**
+    * Sets the request body negotiation threshold.
+    * If this is set, it determines the maximum size that the request body
+    * may be before body negotiation occurs(via the
+    * <code>100-continue</code> expectation). This ensures that a large
+    * request body is not sent when the server wouldn't have accepted it
+    * anyway.
+    * @param threshold the body negotiation threshold, or &lt;=0 to disable
+    * request body negotation entirely
+    */
+   public void setRequestBodyNegotiationThreshold(int threshold)
+   {
+     requestBodyNegotiationThreshold = threshold;
+   }
+ 
+   /**
+    * Dispatches this request.
+    * A request can only be dispatched once; calling this method a second
+    * time results in a protocol exception.
+    * @exception IOException if an I/O error occurred
+    * @return an HTTP response object representing the result of the operation
+    */
+   public Response dispatch()
+     throws IOException
+   {
+     if (dispatched)
+       {
+         throw new ProtocolException("request already dispatched");
+       }
+     final String CRLF = "\r\n";
+     final String HEADER_SEP = ": ";
+     final String US_ASCII = "US-ASCII";
+     final String version = connection.getVersion();
+     Response response;
+     int contentLength = -1;
+     boolean retry = false;
+     int attempts = 0;
+     boolean expectingContinue = false;
+     if (requestBodyWriter != null)
+       {
+         contentLength = requestBodyWriter.getContentLength();
+         if (contentLength > requestBodyNegotiationThreshold)
+           {
+             expectingContinue = true;
+             setHeader("Expect", "100-continue");
+           }
+         else
+           {
+             setHeader("Content-Length", Integer.toString(contentLength));
+           }
+       }
+     
+     try
+       {
+         // Loop while authentication fails or continue
+         do
+           {
+             retry = false;
+             
+             // Get socket output and input streams
+             OutputStream out = connection.getOutputStream();
+ 
+             // Request line
+             String requestUri = path;
+             if (connection.isUsingProxy() &&
+                 !"*".equals(requestUri) &&
+                 !"CONNECT".equals(method))
+               {
+                 requestUri = getRequestURI();
+               }
+             String line = method + ' ' + requestUri + ' ' + version + CRLF;
+             out.write(line.getBytes(US_ASCII));
+             // Request headers
+             for (Iterator i = requestHeaders.keySet().iterator();
+                  i.hasNext(); )
+               {
+                 String name =(String) i.next();
+                 String value =(String) requestHeaders.get(name);
+                 line = name + HEADER_SEP + value + CRLF;
+                 out.write(line.getBytes(US_ASCII));
+               }
+             out.write(CRLF.getBytes(US_ASCII));
+             // Request body
+             if (requestBodyWriter != null && !expectingContinue)
+               {
+                 byte[] buffer = new byte[4096];
+                 int len;
+                 int count = 0;
+                 
+                 requestBodyWriter.reset();
+                 do
+                   {
+                     len = requestBodyWriter.write(buffer);
+                     if (len > 0)
+                       {
+                         out.write(buffer, 0, len);
+                       }
+                     count += len;
+                   }
+                 while (len > -1 && count < contentLength);
+               }
+             out.flush();
+             // Get response
+             while(true)
+             {
+               response = readResponse(connection.getInputStream());
+               int sc = response.getCode();
+               if (sc == 401 && authenticator != null)
+                 {
+                   if (authenticate(response, attempts++))
+                     {
+                       retry = true;
+                     }
+                 }
+               else if (sc == 100)
+                 {
+                   if (expectingContinue)
+                     {
+                       requestHeaders.remove("Expect");
+                       setHeader("Content-Length",
+                                 Integer.toString(contentLength));
+                       expectingContinue = false;
+                       retry = true;
+                     }
+                   else
+                     {
+                       // A conforming server can send an unsoliceted
+                       // Continue response but *should* not (RFC 2616
+                       // sec 8.2.3).  Ignore the bogus Continue
+                       // response and get the real response that
+                       // should follow
+                       continue;
+                     }
+                 }
+               break;
+             }
+           }
+         while (retry);
+       }
+     catch (IOException e)
+       {
+         connection.close();
+         throw e;
+       }
+     return response;
+   }
+     
+   Response readResponse(InputStream in)
+     throws IOException
+   {
+     String line;
+     int len;
+     
+     // Read response status line
+     LineInputStream lis = new LineInputStream(in);
+ 
+     line = lis.readLine();
+     if (line == null)
+       {
+         throw new ProtocolException("Peer closed connection");
+       }
+     if (!line.startsWith("HTTP/"))
+       {
+         throw new ProtocolException(line);
+       }
+     len = line.length();
+     int start = 5, end = 6;
+     while (line.charAt(end) != '.')
+       {
+         end++;
+       }
+     int majorVersion = Integer.parseInt(line.substring(start, end));
+     start = end + 1;
+     end = start + 1;
+     while (line.charAt(end) != ' ')
+       {
+         end++;
+       }
+     int minorVersion = Integer.parseInt(line.substring(start, end));
+     start = end + 1;
+     end = start + 3;
+     int code = Integer.parseInt(line.substring(start, end));
+     String message = line.substring(end + 1, len - 1);
+     // Read response headers
+     Headers responseHeaders = new Headers();
+     responseHeaders.parse(lis);
+     notifyHeaderHandlers(responseHeaders);
+     InputStream body = null;
+     
+     switch (code)
+       {
+       case 100:
+       case 204:
+       case 205:
+       case 304:
+         break;
+       default:
+         body = createResponseBodyStream(responseHeaders, majorVersion,
+                                         minorVersion, in);
+       }
+ 
+     // Construct response
+     Response ret = new Response(majorVersion, minorVersion, code,
+                                 message, responseHeaders, body);
+     return ret;
+   }
+ 
+   void notifyHeaderHandlers(Headers headers)
+   {
+     for (Iterator i = headers.entrySet().iterator(); i.hasNext(); )
+       {
+         Map.Entry entry = (Map.Entry) i.next();
+         String name =(String) entry.getKey();
+         // Handle Set-Cookie
+         if ("Set-Cookie".equalsIgnoreCase(name))
+           {
+             String value = (String) entry.getValue();
+             handleSetCookie(value);
+           }
+         ResponseHeaderHandler handler =
+           (ResponseHeaderHandler) responseHeaderHandlers.get(name);
+         if (handler != null)
+           {
+             String value = (String) entry.getValue();
+             handler.setValue(value);
+           }
+       }
+   }
+ 
+   private InputStream createResponseBodyStream(Headers responseHeaders,
+                                                int majorVersion,
+                                                int minorVersion,
+                                                InputStream in)
+     throws IOException
+   {
+     long contentLength = -1;
+     Headers trailer = null;
+     
+     // Persistent connections are the default in HTTP/1.1
+     boolean doClose = "close".equalsIgnoreCase(getHeader("Connection")) ||
+       "close".equalsIgnoreCase(responseHeaders.getValue("Connection")) ||
+       (connection.majorVersion == 1 && connection.minorVersion == 0) ||
+       (majorVersion == 1 && minorVersion == 0);
+ 
+     String transferCoding = responseHeaders.getValue("Transfer-Encoding");
+     if ("chunked".equalsIgnoreCase(transferCoding))
+       {
+         in = new LimitedLengthInputStream(in, -1, false, connection, doClose);
+           
+         in = new ChunkedInputStream(in, responseHeaders);
+       } 
+     else
+       {
+         contentLength = responseHeaders.getLongValue("Content-Length");
+ 
+         if (contentLength < 0)
+           doClose = true;  // No Content-Length, must close.
+ 
+         in = new LimitedLengthInputStream(in, contentLength,
+                                           contentLength >= 0,
+                                           connection, doClose);
+       }
+     String contentCoding = responseHeaders.getValue("Content-Encoding");
+     if (contentCoding != null && !"identity".equals(contentCoding))
+       {
+         if ("gzip".equals(contentCoding))
+           {
+             in = new GZIPInputStream(in);
+           }
+         else if ("deflate".equals(contentCoding))
+           {
+             in = new InflaterInputStream(in);
+           }
+         else
+           {
+             throw new ProtocolException("Unsupported Content-Encoding: " +
+                                         contentCoding);
+           }
+ 	// Remove the Content-Encoding header because the content is
+ 	// no longer compressed.
+ 	responseHeaders.remove("Content-Encoding");
+       }
+     return in;
+   }
+ 
+   boolean authenticate(Response response, int attempts)
+     throws IOException
+   {
+     String challenge = response.getHeader("WWW-Authenticate");
+     if (challenge == null)
+       {
+         challenge = response.getHeader("Proxy-Authenticate");
+       }
+     int si = challenge.indexOf(' ');
+     String scheme = (si == -1) ? challenge : challenge.substring(0, si);
+     if ("Basic".equalsIgnoreCase(scheme))
+       {
+         Properties params = parseAuthParams(challenge.substring(si + 1));
+         String realm = params.getProperty("realm");
+         Credentials creds = authenticator.getCredentials(realm, attempts);
+         String userPass = creds.getUsername() + ':' + creds.getPassword();
+         byte[] b_userPass = userPass.getBytes("US-ASCII");
+         byte[] b_encoded = BASE64.encode(b_userPass);
+         String authorization =
+           scheme + " " + new String(b_encoded, "US-ASCII");
+         setHeader("Authorization", authorization);
+         return true;
+       }
+     else if ("Digest".equalsIgnoreCase(scheme))
+       {
+         Properties params = parseAuthParams(challenge.substring(si + 1));
+         String realm = params.getProperty("realm");
+         String nonce = params.getProperty("nonce");
+         String qop = params.getProperty("qop");
+         String algorithm = params.getProperty("algorithm");
+         String digestUri = getRequestURI();
+         Credentials creds = authenticator.getCredentials(realm, attempts);
+         String username = creds.getUsername();
+         String password = creds.getPassword();
+         connection.incrementNonce(nonce);
+         try
+           {
+             MessageDigest md5 = MessageDigest.getInstance("MD5");
+             final byte[] COLON = { 0x3a };
+             
+             // Calculate H(A1)
+             md5.reset();
+             md5.update(username.getBytes("US-ASCII"));
+             md5.update(COLON);
+             md5.update(realm.getBytes("US-ASCII"));
+             md5.update(COLON);
+             md5.update(password.getBytes("US-ASCII"));
+             byte[] ha1 = md5.digest();
+             if ("md5-sess".equals(algorithm))
+               {
+                 byte[] cnonce = generateNonce();
+                 md5.reset();
+                 md5.update(ha1);
+                 md5.update(COLON);
+                 md5.update(nonce.getBytes("US-ASCII"));
+                 md5.update(COLON);
+                 md5.update(cnonce);
+                 ha1 = md5.digest();
+               }
+             String ha1Hex = toHexString(ha1);
+             
+             // Calculate H(A2)
+             md5.reset();
+             md5.update(method.getBytes("US-ASCII"));
+             md5.update(COLON);
+             md5.update(digestUri.getBytes("US-ASCII"));
+             if ("auth-int".equals(qop))
+               {
+                 byte[] hEntity = null; // TODO hash of entity body
+                 md5.update(COLON);
+                 md5.update(hEntity);
+               }
+             byte[] ha2 = md5.digest();
+             String ha2Hex = toHexString(ha2);
+             
+             // Calculate response
+             md5.reset();
+             md5.update(ha1Hex.getBytes("US-ASCII"));
+             md5.update(COLON);
+             md5.update(nonce.getBytes("US-ASCII"));
+             if ("auth".equals(qop) || "auth-int".equals(qop))
+               {
+                 String nc = getNonceCount(nonce);
+                 byte[] cnonce = generateNonce();
+                 md5.update(COLON);
+                 md5.update(nc.getBytes("US-ASCII"));
+                 md5.update(COLON);
+                 md5.update(cnonce);
+                 md5.update(COLON);
+                 md5.update(qop.getBytes("US-ASCII"));
+               }
+             md5.update(COLON);
+             md5.update(ha2Hex.getBytes("US-ASCII"));
+             String digestResponse = toHexString(md5.digest());
+             
+             String authorization = scheme + 
+               " username=\"" + username + "\"" +
+               " realm=\"" + realm + "\"" +
+               " nonce=\"" + nonce + "\"" +
+               " uri=\"" + digestUri + "\"" +
+               " response=\"" + digestResponse + "\"";
+             setHeader("Authorization", authorization);
+             return true;
+           }
+         catch (NoSuchAlgorithmException e)
+           {
+             return false;
+           }
+       }
+     // Scheme not recognised
+     return false;
+   }
+ 
+   Properties parseAuthParams(String text)
+   {
+     int len = text.length();
+     String key = null;
+     StringBuilder buf = new StringBuilder();
+     Properties ret = new Properties();
+     boolean inQuote = false;
+     for (int i = 0; i < len; i++)
+       {
+         char c = text.charAt(i);
+         if (c == '"')
+           {
+             inQuote = !inQuote;
+           }
+         else if (c == '=' && key == null)
+           {
+             key = buf.toString().trim();
+             buf.setLength(0);
+           }
+         else if (c == ' ' && !inQuote)
+           {
+             String value = unquote(buf.toString().trim());
+             ret.put(key, value);
+             key = null;
+             buf.setLength(0);
+           }
+         else if (c != ',' || (i <(len - 1) && text.charAt(i + 1) != ' '))
+           {   
+             buf.append(c);
+           }
+       }
+     if (key != null)
+       {
+         String value = unquote(buf.toString().trim());
+         ret.put(key, value);
+       }
+     return ret;
+   }
+ 
+   String unquote(String text)
+   {
+     int len = text.length();
+     if (len > 0 && text.charAt(0) == '"' && text.charAt(len - 1) == '"')
+       {
+         return text.substring(1, len - 1);
+       }
+     return text;
+   }
+ 
+   /**
+    * Returns the number of times the specified nonce value has been seen.
+    * This always returns an 8-byte 0-padded hexadecimal string.
+    */
+   String getNonceCount(String nonce)
+   {
+     int nc = connection.getNonceCount(nonce);
+     String hex = Integer.toHexString(nc);
+     StringBuilder buf = new StringBuilder();
+     for (int i = 8 - hex.length(); i > 0; i--)
+       {
+         buf.append('0');
+       }
+     buf.append(hex);
+     return buf.toString();
+   }
+ 
+   /**
+    * Client nonce value.
+    */
+   byte[] nonce;
+ 
+   /**
+    * Generates a new client nonce value.
+    */
+   byte[] generateNonce()
+     throws IOException, NoSuchAlgorithmException
+   {
+     if (nonce == null)
+       {
+         long time = System.currentTimeMillis();
+         MessageDigest md5 = MessageDigest.getInstance("MD5");
+         md5.update(Long.toString(time).getBytes("US-ASCII"));
+         nonce = md5.digest();
+       }
+     return nonce;
+   }
+ 
+   String toHexString(byte[] bytes)
+   {
+     char[] ret = new char[bytes.length * 2];
+     for (int i = 0, j = 0; i < bytes.length; i++)
+       {
+         int c =(int) bytes[i];
+         if (c < 0)
+           {
+             c += 0x100;
+           }
+         ret[j++] = Character.forDigit(c / 0x10, 0x10);
+         ret[j++] = Character.forDigit(c % 0x10, 0x10);
+       }
+     return new String(ret);
+   }
+ 
+   /**
+    * Parse the specified cookie list and notify the cookie manager.
+    */
+   void handleSetCookie(String text)
+   {
+     CookieManager cookieManager = connection.getCookieManager();
+     if (cookieManager == null)
+       {
+         return;
+       }
+     String name = null;
+     String value = null;
+     String comment = null;
+     String domain = connection.getHostName();
+     String path = this.path;
+     int lsi = path.lastIndexOf('/');
+     if (lsi != -1)
+       {
+         path = path.substring(0, lsi);
+       }
+     boolean secure = false;
+     Date expires = null;
+ 
+     int len = text.length();
+     String attr = null;
+     StringBuilder buf = new StringBuilder();
+     boolean inQuote = false;
+     for (int i = 0; i <= len; i++)
+       {
+         char c =(i == len) ? '\u0000' : text.charAt(i);
+         if (c == '"')
+           {
+             inQuote = !inQuote;
+           }
+         else if (!inQuote)
+           {
+             if (c == '=' && attr == null)
+               {
+                 attr = buf.toString().trim();
+                 buf.setLength(0);
+               }
+             else if (c == ';' || i == len || c == ',')
+               {
+                 String val = unquote(buf.toString().trim());
+                 if (name == null)
+                   {
+                     name = attr;
+                     value = val;
+                   }
+                 else if ("Comment".equalsIgnoreCase(attr))
+                   {
+                     comment = val;
+                   }
+                 else if ("Domain".equalsIgnoreCase(attr))
+                   {
+                     domain = val;
+                   }
+                 else if ("Path".equalsIgnoreCase(attr))
+                   {
+                     path = val;
+                   }
+                 else if ("Secure".equalsIgnoreCase(val))
+                   {
+                     secure = true;
+                   }
+                 else if ("Max-Age".equalsIgnoreCase(attr))
+                   {
+                     int delta = Integer.parseInt(val);
+                     Calendar cal = Calendar.getInstance();
+                     cal.setTimeInMillis(System.currentTimeMillis());
+                     cal.add(Calendar.SECOND, delta);
+                     expires = cal.getTime();
+                   }
+                 else if ("Expires".equalsIgnoreCase(attr))
+                   {
+                     DateFormat dateFormat = new HTTPDateFormat();
+                     try
+                       {
+                         expires = dateFormat.parse(val);
+                       }
+                     catch (ParseException e)
+                       {
+                         // if this isn't a valid date, it may be that
+                         // the value was returned unquoted; in that case, we
+                         // want to continue buffering the value
+                         buf.append(c);
+                         continue;
+                       }
+                   }
+                 attr = null;
+                 buf.setLength(0);
+                 // case EOL
+                 if (i == len || c == ',')
+                   {
+                     Cookie cookie = new Cookie(name, value, comment, domain,
+                                                path, secure, expires);
+                     cookieManager.setCookie(cookie);
+                   }
+                 if (c == ',')
+                   {
+                     // Reset cookie fields
+                     name = null;
+                     value = null;
+                     comment = null;
+                     domain = connection.getHostName();
+                     path = this.path;
+                     if (lsi != -1)
+                       {
+                         path = path.substring(0, lsi);
+                       }
+                     secure = false;
+                     expires = null;
+                   }
+               }
+             else
+               {
+                 buf.append(c);
+               }
+           }
+         else
+           {
+             buf.append(c);
+           }
+       }
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/RequestBodyWriter.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/RequestBodyWriter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/RequestBodyWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/RequestBodyWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* RequestBodyWriter.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ /**
+  * Callback interface for writing request body content.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public interface RequestBodyWriter
+ {
+ 
+   /**
+    * Returns the total number of bytes that will be written in a single pass
+    * by this writer.
+    */
+   int getContentLength();
+ 
+   /**
+    * Initialises the writer.
+    * This will be called before each pass.
+    */
+   void reset();
+ 
+   /**
+    * Writes body content to the supplied buffer.
+    * @param buffer the content buffer
+    * @return the number of bytes written
+    */
+   int write(byte[] buffer);
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Response.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Response.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/Response.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/Response.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,202 ----
+ /* Response.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import java.io.InputStream;
+ import java.util.Date;
+ 
+ /**
+  * An HTTP response.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class Response
+ {
+ 
+   /**
+    * The HTTP major version of the server issuing the response.
+    */
+   protected final int majorVersion;
+ 
+   /**
+    * The HTTP minor version of the server issuing the response.
+    */
+   protected final int minorVersion;
+ 
+   /**
+    * The HTTP status code of the response.
+    */ 
+   protected final int code;
+ 
+   /**
+    * Human-readable text of the response.
+    */
+   protected final String message;
+ 
+   /**
+    * The response headers.
+    */
+   protected final Headers headers;
+ 
+   /**
+    * An InputStream that returns the body of the response.
+    */
+   protected final InputStream body;
+ 
+   /**
+    * Constructs a new response with the specified parameters.
+    */
+   protected Response(int majorVersion, int minorVersion, int code,
+                      String message, Headers headers, InputStream body)
+   {
+     this.majorVersion = majorVersion;
+     this.minorVersion = minorVersion;
+     this.code = code;
+     this.message = message;
+     this.headers = headers;
+     this.body = body;
+   }
+ 
+   /**
+    * Returns the HTTP major version of the server issuing the response.
+    * @see #majorVersion
+    */
+   public int getMajorVersion()
+   {
+     return majorVersion;
+   }
+ 
+   /**
+    * Returns the HTTP minor version of the server issuing the response.
+    * @see #minorVersion
+    */
+   public int getMinorVersion()
+   {
+     return minorVersion;
+   }
+ 
+   /**
+    * Returns the HTTP status code of the response.
+    * @see #code
+    */ 
+   public int getCode()
+   {
+     return code;
+   }
+ 
+   /**
+    * Returns the class of the response.  This is the most significant
+    * digit of the status code.
+    * <dl>
+    * <dt><code>1xx</code></dt> <dd>Informational response</dd>
+    * <dt><code>2xx</code></dt> <dd>Success</dd>
+    * <dt><code>3xx</code></dt> <dd>Redirection</dd>
+    * <dt><code>4xx</code></dt> <dd>Client error</dd>
+    * <dt><code>5xx</code></dt> <dd>Server error</dd>
+    * </dl>
+    */
+   public int getCodeClass()
+   {
+     return code / 100;
+   }
+ 
+   /**
+    * Returns the human-readable text of the response.
+    * @see #message
+    */
+   public String getMessage()
+   {
+     return message;
+   }
+ 
+   /**
+    * Returns the headers in the response.
+    */
+   public Headers getHeaders()
+   {
+     return headers;
+   }
+ 
+   /**
+    * Returns the header value for the specified name.
+    * @param name the header name
+    */
+   public String getHeader(String name)
+   {
+     return headers.getValue(name);
+   }
+ 
+   /**
+    * Returns the header value for the specified name as an integer.
+    * @param name the header name
+    */
+   public int getIntHeader(String name)
+   {
+     return headers.getIntValue(name);
+   }
+ 
+   /**
+    * Returns the header value for the specified name as a long.
+    * @param name the header name
+    */
+   public long getLongHeader(String name)
+   {
+     return headers.getLongValue(name);
+   }
+ 
+   /**
+    * Returns the header value for the specified name as a date.
+    * @param name the header name
+    */
+   public Date getDateHeader(String name)
+   {
+     return headers.getDateValue(name);
+   }
+ 
+   /**
+    * Returns an InputStream that returns the body of the response.
+    *
+    * @return the body of the response
+    */
+   public InputStream getBody()
+   {
+     return body;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* ResponseHeaderHandler.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ /**
+  * Callback interface for objects that wish to be notified of response
+  * header values.
+  * @see Request#setHeaderHandler(String)
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public interface ResponseHeaderHandler
+ {
+ 
+   /**
+    * Sets the value for the header associated with this handler.
+    */
+   void setValue(String value);
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/SimpleCookieManager.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/SimpleCookieManager.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/SimpleCookieManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/SimpleCookieManager.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* CookieManager.java --
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.http;
+ 
+ import java.util.ArrayList;
+ import java.util.Date;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ 
+ /**
+  * A simple non-persistent cookie manager. This class can be extended to
+  * provide cookie persistence.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class SimpleCookieManager
+   implements CookieManager
+ {
+ 
+   /**
+    * The cookie cache.
+    * This is a dictionary mapping domains to maps of cookies by name.
+    */
+   protected Map cookies;
+ 
+   /**
+    * Constructor.
+    */
+   public SimpleCookieManager()
+   {
+     cookies = new HashMap();
+   }
+ 
+   public void setCookie(Cookie cookie)
+   {
+     String domain = cookie.getDomain();
+     Map map =(Map) cookies.get(domain);
+     if (map == null)
+       {
+         map = new HashMap();
+         cookies.put(domain, map);
+       }
+     String name = cookie.getName();
+     map.put(name, cookie); // will replace a cookie of the same name
+   }
+ 
+   public Cookie[] getCookies(String host, boolean secure, String path)
+   {
+     List matches = new ArrayList();
+     Date now = new Date();
+     if (Character.isLetter(host.charAt(0)))
+       {
+         int di = host.indexOf('.');
+         while (di != -1)
+           {
+             addCookies(matches, host, secure, path, now);
+             host = host.substring(di);
+             di = host.indexOf('.', 1);
+           }
+       }
+     addCookies(matches, host, secure, path, now);
+     Cookie[] ret = new Cookie[matches.size()];
+     matches.toArray(ret);
+     return ret;
+   }
+ 
+   private void addCookies(List matches, String domain, boolean secure,
+                           String path, Date now)
+   {
+     Map map = (Map) cookies.get(domain);
+     if (map != null)
+       {
+         List expired = new ArrayList();
+         for (Iterator i = map.entrySet().iterator(); i.hasNext(); )
+           {
+             Map.Entry entry = (Map.Entry) i.next();
+             Cookie cookie = (Cookie) entry.getValue();
+             Date expires = cookie.getExpiryDate();
+             if (expires != null && expires.before(now))
+               {
+                 expired.add(entry.getKey());
+                 continue;
+               }
+             if (secure && !cookie.isSecure())
+               {
+                 continue;
+               }
+             if (path.startsWith(cookie.getPath()))
+               {
+                 matches.add(cookie);
+               }
+           }
+         // Good housekeeping
+         for (Iterator i = expired.iterator(); i.hasNext(); )
+           {
+             map.remove(i.next());
+           }
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/package.html gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/http/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/http/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.net.protocol.http package.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.net.protocol.http</title></head>
+ 
+ <body>
+ 
+ <p>
+ This package contains an HTTP/1.1 client, as described in RFC 2616.
+ It supports the following features:
+ <ul>
+ <li>Persistent connections</li>
+ <li>Basic and Digest authentication (RFC 2617)</li>
+ <li>HTTPS</li>
+ <li>HTTP proxies</li>
+ <li>HTTP/1.0 compatibility</li>
+ <li>Support for WebDAV methods and other HTTP extensions</li>
+ <li>Automatic decoding of the chunked transfer-coding</li>
+ <li>Parsing of HTTP date headers</li>
+ <li>Support for the 100-continue expectation</li>
+ </ul>
+ </p>
+ 
+ <p>
+ The API is similar to the <a href='http://www.webdav.org/neon/'>neon</a>
+ WebDAV/HTTP library. A logical connection to the server is instantiated,
+ and multiple requests can be issued for this connection. Each request
+ has an atomic <code>dispatch</code> method which returns the response.
+ All I/O, authentication, etc is handled by registering callback objects
+ with the request prior to dispatch, which are notified during the dispatch
+ procedure as necessary. Simple byte-array content callbacks are supplied
+ which can manage any request/response content that fits in available memory.
+ </p>
+ 
+ <p>
+ An URL stream handler is provided, supporting the full HttpURLConnection
+ specification.
+ </p>
+ 
+ </body>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/https/Handler.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/https/Handler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/https/Handler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/https/Handler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* Handler.java --
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.https;
+ 
+ import gnu.java.net.protocol.http.HTTPConnection;
+ import gnu.java.net.protocol.http.HTTPURLConnection;
+ 
+ import java.io.IOException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.net.URLStreamHandler;
+ 
+ /**
+  * An HTTPS URL stream handler.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class Handler
+   extends URLStreamHandler
+ {
+ 
+   /**
+    * Returns the default HTTPS port (443).
+    */
+   protected int getDefaultPort()
+   {
+     return HTTPConnection.HTTPS_PORT;
+   }
+ 
+   /**
+    * Returns an HTTPURLConnection for the given URL.
+    */
+   public URLConnection openConnection(URL url)
+     throws IOException
+   {
+     return new HTTPURLConnection(url);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/jar/Connection.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/jar/Connection.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/jar/Connection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/jar/Connection.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,233 ----
+ /* Connection - jar url connection for java.net
+    Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.jar;
+ 
+ import java.io.File;
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.net.JarURLConnection;
+ import java.net.MalformedURLException;
+ import java.net.ProtocolException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.text.SimpleDateFormat;
+ import java.util.Date;
+ import java.util.Hashtable;
+ import java.util.Locale;
+ import java.util.jar.JarEntry;
+ import java.util.jar.JarFile;
+ import java.util.zip.ZipFile;
+ 
+ /**
+  * This subclass of java.net.JarURLConnection models a URLConnection via
+  * the "jar" protocol.
+  *
+  * @author Kresten Krab Thorup (krab@gnu.org)
+  */
+ public final class Connection extends JarURLConnection
+ {
+   /**
+    * HTTP-style DateFormat, used to format the last-modified header.
+    * Lazy initialized since jar files are used during bootstrapping.
+    */
+   private static SimpleDateFormat dateFormat;
+ 
+   private JarFile jar_file;
+   private JarEntry jar_entry;
+   private URL jar_url;
+   
+   public static class JarFileCache
+   {
+     private static Hashtable cache = new Hashtable();
+     private static final int READBUFSIZE = 4*1024;
+     
+     public static synchronized JarFile get (URL url, boolean useCaches)
+        throws IOException
+     {
+       JarFile jf;
+       if (useCaches)
+         {
+           jf = (JarFile) cache.get (url);
+           if (jf != null)
+             return jf;
+         }
+ 
+       if ("file".equals (url.getProtocol()))
+ 	{
+ 	  String fn = url.getFile();
+ 	  fn = gnu.java.net.protocol.file.Connection.unquote(fn);
+ 	  File f = new File (fn);
+ 	  jf = new JarFile (f, true, ZipFile.OPEN_READ);
+ 	}
+       else
+ 	{
+ 	  URLConnection urlconn = url.openConnection();
+ 	  InputStream is = urlconn.getInputStream();
+ 	  byte[] buf = new byte [READBUFSIZE];
+ 	  File f = File.createTempFile ("cache", "jar");
+ 	  FileOutputStream fos = new FileOutputStream (f); 
+ 	  int len = 0;
+ 	  
+ 	  while ((len = is.read (buf)) != -1)
+ 	    {
+ 	      fos.write (buf, 0, len);
+ 	    }
+ 	  
+ 	  fos.close();
+ 	  // Always verify the Manifest, open read only and delete when done.
+ 	  jf = new JarFile (f, true,
+ 			    ZipFile.OPEN_READ | ZipFile.OPEN_DELETE);
+ 	}
+ 
+       if (useCaches)
+         cache.put (url, jf);
+ 
+       return jf;
+     }
+   }
+ 
+   protected Connection(URL url)
+     throws MalformedURLException
+   {
+     super(url);
+   }
+ 
+   public synchronized void connect() throws IOException
+   {
+     // Call is ignored if already connected.
+     if (connected)
+       return;
+ 
+     jar_url = getJarFileURL();
+     jar_file = JarFileCache.get (jar_url, useCaches);
+     String entry_name = getEntryName();
+     
+     if (entry_name != null
+         && !entry_name.equals (""))
+       {
+         jar_entry = (JarEntry) jar_file.getEntry (entry_name);
+ 
+         if(jar_entry == null)
+           throw new IOException ("No entry for " + entry_name + " exists.");
+       }
+ 
+     connected = true;
+   }
+ 
+   public InputStream getInputStream() throws IOException
+   {
+     if (!connected)
+       connect();
+ 
+     if (! doInput)
+       throw new ProtocolException("Can't open InputStream if doInput is false");
+     
+     if (jar_entry == null)
+       throw new IOException (jar_url + " couldn't be found.");
+     
+     return jar_file.getInputStream (jar_entry);
+   }
+ 
+   public synchronized JarFile getJarFile() throws IOException
+   {
+     if (!connected)
+       connect();
+ 
+     if (! doInput)
+       throw new ProtocolException("Can't open JarFile if doInput is false");
+ 
+     return jar_file;
+   }
+ 
+   public String getHeaderField(String field)
+   {
+     try
+       {
+ 	if (!connected)
+ 	  connect();
+ 
+ 	if (field.equals("content-type"))
+           return guessContentTypeFromName(getJarEntry().getName());
+ 	else if (field.equals("content-length"))
+           return Long.toString(getJarEntry().getSize());
+ 	else if (field.equals("last-modified"))
+ 	  {
+ 	    // Both creating and manipulating dateFormat need synchronization.
+ 	    synchronized (this.getClass())
+ 	      {
+ 		if (dateFormat == null)
+ 		  dateFormat = new SimpleDateFormat
+ 		    ("EEE, dd MMM yyyy hh:mm:ss 'GMT'",
+ 		     new Locale ("En", "Us", "Unix"));
+ 
+         	return dateFormat.format(new Date(getJarEntry().getTime()));
+ 	      }
+ 	  }
+       }
+     catch (IOException e)
+       {
+         // Fall through.
+       }
+     return null;
+   }
+ 
+   public int getContentLength()
+   {
+     if (!connected)
+       return -1;
+ 
+     return (int) jar_entry.getSize();
+   }
+ 
+   public long getLastModified()
+   {
+     if (!connected)
+       return -1;
+ 
+     try
+       {
+ 	return getJarEntry().getTime();
+       }
+     catch (IOException e)
+       {
+ 	return -1;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/jar/Handler.java gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/jar/Handler.java
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/jar/Handler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/jar/Handler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,173 ----
+ /* gnu.java.net.protocol.jar.Handler - jar protocol handler for java.net
+    Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.net.protocol.jar;
+ 
+ import gnu.java.net.URLParseError;
+ 
+ import java.io.IOException;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.net.URLStreamHandler;
+ 
+ /**
+  * @author Kresten Krab Thorup (krab@gnu.org)
+  */
+ public class Handler extends URLStreamHandler
+ {
+   /**
+    * A do nothing constructor
+    */
+   public Handler()
+   {
+   }
+ 
+   /**
+    * This method returs a new JarURLConnection for the specified URL
+    *
+    * @param url The URL to return a connection for
+    *
+    * @return The URLConnection
+    *
+    * @exception IOException If an error occurs
+    */
+   protected URLConnection openConnection(URL url) throws IOException
+   {
+     return new Connection(url);
+   }
+ 
+   /**
+    * This method overrides URLStreamHandler's for parsing url of protocol "jar"
+    *
+    * @param url The URL object in which to store the results
+    * @param url_string The String-ized URL to parse
+    * @param start The position in the string to start scanning from
+    * @param end The position in the string to stop scanning
+    */
+   protected void parseURL (URL url, String url_string, int start, int end)
+   {
+     // This method does not throw an exception or return a value.  Thus our
+     // strategy when we encounter an error in parsing is to return without
+     // doing anything.
+     String file = url.getFile();
+     
+     if (!file.equals(""))
+       { //has context url
+ 	url_string = url_string.substring (start, end);
+         if (url_string.startsWith("/"))
+           { //url string is an absolute path
+             int idx = file.lastIndexOf ("!/");
+ 	    
+ 	    if (idx < 0)
+ 	      throw new URLParseError("no !/ in spec");
+ 	    
+ 	    file = file.substring (0, idx + 1) + url_string;
+           }
+         else if (url_string.length() > 0)
+           {
+             int idx = file.lastIndexOf ("/");
+             if (idx == -1) //context path is weird
+               file = "/" + url_string; 
+             else if (idx == (file.length() - 1))
+               //just concatenate two parts
+               file = file + url_string;
+             else
+               // according to Java API Documentation, here is a little different 
+               // with URLStreamHandler.parseURL
+               // but JDK seems doesn't handle it well
+               file = file.substring(0, idx + 1) + url_string;
+           }
+         
+         setURL (url, "jar", url.getHost(), url.getPort(), file, null);
+         return;
+       }
+ 
+     // Bunches of things should be true.  Make sure.
+     if (end < start)
+       return;
+     if (end - start < 2)
+       return;
+     if (start > url_string.length())
+       return;
+     
+     // Skip remains of protocol
+     url_string = url_string.substring (start, end);
+ 
+     int jar_stop;
+     if ((jar_stop = url_string.indexOf("!/")) < 0)
+       throw new URLParseError("no !/ in spec");
+ 
+     try
+       {
+ 	new URL(url_string.substring (0, jar_stop));
+       }
+     catch (MalformedURLException e)
+       {
+ 	throw new URLParseError("invalid inner URL: " + e.getMessage());
+       }
+     
+     if (!url.getProtocol().equals ("jar") )
+       throw new URLParseError("unexpected protocol " + url.getProtocol());
+         
+     setURL (url, "jar", url.getHost(), url.getPort(), url_string, null);
+   }
+ 
+   /**
+    * This method converts a Jar URL object into a String.
+    *
+    * @param url The URL object to convert
+    */
+   protected String toExternalForm (URL url)
+   {
+     String file = url.getFile();
+     String ref = url.getRef();
+ 
+     // return "jar:" + file;
+     // Performance!!: 
+     //  Do the concatenation manually to avoid resize StringBuffer's 
+     //  internal buffer.  The length of ref is not taken into consideration
+     //  as it's a rare path.
+     StringBuffer sb = new StringBuffer (file.length() + 5);
+     sb.append ("jar:");
+     sb.append (file);
+     if (ref != null)
+       sb.append('#').append(ref);
+     return sb.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/jar/package.html gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/jar/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/net/protocol/jar/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/net/protocol/jar/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.net.protocol.jar package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.net.protocol.jar</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/ChannelInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/nio/ChannelInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/ChannelInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/ChannelInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* ChannelInputStream.java -- 
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.nio.ByteBuffer;
+ import java.nio.channels.IllegalBlockingModeException;
+ import java.nio.channels.ReadableByteChannel;
+ import java.nio.channels.SelectableChannel;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class ChannelInputStream extends InputStream
+ {
+   private ReadableByteChannel ch;
+   
+   public ChannelInputStream (ReadableByteChannel ch)
+   {
+     super();
+     
+     this.ch = ch;
+   }
+ 
+   public int read() throws IOException
+   {
+     if (ch instanceof SelectableChannel
+ 	&& (! ((SelectableChannel) ch).isBlocking()))
+       throw new IllegalBlockingModeException();
+       
+     ByteBuffer buffer = ByteBuffer.allocate(1);
+     int result = ch.read(buffer);
+ 
+     if (result == -1)
+       return -1;
+ 
+     if (result == 0)
+       throw new IOException("Could not read from channel");
+ 
+      return buffer.get(0);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/ChannelOutputStream.java gcc-4.1.0/libjava/classpath/gnu/java/nio/ChannelOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/ChannelOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/ChannelOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* ChannelOutputStream.java -- 
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.nio.ByteBuffer;
+ import java.nio.channels.WritableByteChannel;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class ChannelOutputStream extends OutputStream
+ {
+   private WritableByteChannel ch;
+   
+   public ChannelOutputStream (WritableByteChannel ch)
+   {
+     super();
+     
+     this.ch = ch;
+   }
+ 
+   public void write (int value) throws IOException
+   {
+     ByteBuffer buffer = ByteBuffer.allocate (1);
+     buffer.put ((byte) (value & 0xff));
+     buffer.flip();
+     ch.write (buffer);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/ChannelReader.java gcc-4.1.0/libjava/classpath/gnu/java/nio/ChannelReader.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/ChannelReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/ChannelReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,211 ----
+ /* ChannelReader.java -- 
+  Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+  This file is part of GNU Classpath.
+ 
+  GNU Classpath is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+ 
+  GNU Classpath 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
+  General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with GNU Classpath; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you are not
+  obligated to do so.  If you do not wish to do so, delete this
+  exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.io.IOException;
+ import java.io.Reader;
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.channels.ReadableByteChannel;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CoderResult;
+ import java.nio.charset.CodingErrorAction;
+ 
+ /**
+  * A Reader implementation that works using a ReadableByteChannel and a
+  * CharsetDecoder.
+  * 
+  * <p>
+  * This is a bridge between NIO <-> IO character decoding.
+  * </p>
+  * 
+  * @author Robert Schuster
+  */
+ public class ChannelReader extends Reader
+ {
+ 
+   private static final int DEFAULT_BUFFER_CAP = 8192;
+ 
+   private ReadableByteChannel channel;
+ 
+   private CharsetDecoder decoder;
+ 
+   private ByteBuffer byteBuffer;
+ 
+   private CharBuffer charBuffer;
+ 
+   public ChannelReader(ReadableByteChannel channel, CharsetDecoder decoder,
+                        int minBufferCap)
+   {
+     this.channel = channel;
+     this.decoder = decoder;
+ 
+     // JDK reports errors, so we do the same.
+     decoder.onMalformedInput(CodingErrorAction.REPORT);
+     decoder.onUnmappableCharacter(CodingErrorAction.REPORT);
+     decoder.reset();
+ 
+     int size = (minBufferCap == -1) ? DEFAULT_BUFFER_CAP : minBufferCap;
+ 
+     // Allocates the buffers and prepares them for reading, because that is the
+     // first operation being done on them.
+     byteBuffer = ByteBuffer.allocate(size);
+     byteBuffer.flip();
+     charBuffer = CharBuffer.allocate((int) (size * decoder.averageCharsPerByte()));
+   }
+ 
+   public int read(char[] buf, int offset, int count) throws IOException
+   {
+     // I declared channel being null meaning that the reader is closed.
+     if (!channel.isOpen())
+       throw new IOException("Reader was already closed.");
+ 
+     // I declared decoder being null meaning that there is no more data to read
+     // and convert.
+     if (decoder == null)
+       return -1;
+ 
+     // Stores the amount of character being read. It -1 so that if no conversion
+     // occured the caller will see this as an 'end of file'.
+     int sum = -1;
+ 
+     // Copies any characters which may be left from the last invocation into the
+     // destination array.
+     if (charBuffer.remaining() > 0)
+       {
+         sum = Math.min(count, charBuffer.remaining());
+         charBuffer.get(buf, offset, sum);
+ 
+         // Updates the control variables according to the latest copy operation.
+         offset += sum;
+         count -= sum;
+       }
+ 
+     // Copies the character which have not been put in the destination array to
+     // the beginning. If data is actually copied count will be 0. If no data is
+     // copied count is >0 and we can now convert some more characters.
+     charBuffer.compact();
+ 
+     int converted = 0;
+     boolean last = false;
+ 
+     while (count != 0)
+       {
+         // Tries to convert some bytes (Which will intentionally fail in the
+         // first place because we have not read any bytes yet.)
+         CoderResult result = decoder.decode(byteBuffer, charBuffer, last);
+         if (result.isMalformed() || result.isUnmappable())
+           {
+             // JDK throws exception when bytes are malformed for sure.
+             // FIXME: Unsure what happens when a character is simply
+             // unmappable.
+             result.throwException();
+           }
+ 
+         // Marks that we should end this loop regardless whether the caller
+         // wants more chars or not, when this was the last conversion.
+         if (last)
+           {
+             decoder = null;
+           }
+         else if (result.isUnderflow())
+           {
+             // We need more bytes to do the conversion.
+ 
+             // Copies the not yet converted bytes to the beginning making it
+             // being able to receive more bytes.
+             byteBuffer.compact();
+ 
+             // Reads in another bunch of bytes for being converted.
+             if (channel.read(byteBuffer) == -1)
+               {
+                 // If there is no more data available in the channel we mark
+                 // that state for the final character conversion run which is
+                 // done in the next loop iteration.
+                 last = true;
+               }
+ 
+             // Prepares the byteBuffer for the next character conversion run.
+             byteBuffer.flip();
+           }
+ 
+         // Prepares the charBuffer for being drained.
+         charBuffer.flip();
+ 
+         converted = Math.min(count, charBuffer.remaining());
+         charBuffer.get(buf, offset, converted);
+ 
+         // Copies characters which have not yet being copied into the char-Array
+         // to the beginning making it possible to read them later (If data is
+         // really copied here, then the caller has received enough characters so
+         // far.).
+         charBuffer.compact();
+ 
+         // Updates the control variables according to the latest copy operation.
+         offset += converted;
+         count -= converted;
+ 
+         // Updates the amount of transferred characters.
+         sum += converted;
+ 
+         if (decoder == null)
+           {
+             break;
+           }
+ 
+         // Now that more characters have been transfered we let the loop decide
+         // what to do next.
+       }
+ 
+     // Makes the charBuffer ready for reading on the next invocation.
+     charBuffer.flip();
+ 
+     return sum;
+   }
+ 
+   public void close() throws IOException
+   {
+     channel.close();
+ 
+     // Makes sure all intermediate data is released by the decoder.
+     if (decoder != null)
+       decoder.reset();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/DatagramChannelImpl.java gcc-4.1.0/libjava/classpath/gnu/java/nio/DatagramChannelImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/DatagramChannelImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/DatagramChannelImpl.java	Wed Dec 28 17:25:43 2005
***************
*** 0 ****
--- 1,297 ----
+ /* DatagramChannelImpl.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import gnu.java.net.PlainDatagramSocketImpl;
+ import java.io.IOException;
+ import java.net.DatagramPacket;
+ import java.net.DatagramSocket;
+ import java.net.InetSocketAddress;
+ import java.net.SocketAddress;
+ import java.net.SocketTimeoutException;
+ import java.nio.ByteBuffer;
+ import java.nio.channels.ClosedChannelException;
+ import java.nio.channels.DatagramChannel;
+ import java.nio.channels.NotYetConnectedException;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class DatagramChannelImpl extends DatagramChannel
+ {
+   private NIODatagramSocket socket;
+   
+   /**
+    * Indicates whether this channel initiated whatever operation
+    * is being invoked on our datagram socket.
+    */
+   private boolean inChannelOperation;
+ 
+   /**
+    * Indicates whether our datagram socket should ignore whether
+    * we are set to non-blocking mode. Certain operations on our
+    * socket throw an <code>IllegalBlockingModeException</code> if
+    * we are in non-blocking mode, <i>except</i> if the operation
+    * is initiated by us.
+    */
+   public final boolean isInChannelOperation()
+   {
+     return inChannelOperation;
+   }
+   
+   /**
+    * Sets our indicator of whether we are initiating an I/O operation
+    * on our socket.
+    */
+   public final void setInChannelOperation(boolean b)
+   {
+     inChannelOperation = b;
+   }
+  
+   protected DatagramChannelImpl (SelectorProvider provider)
+     throws IOException
+   {
+     super (provider);
+     socket = new NIODatagramSocket (new PlainDatagramSocketImpl(), this);
+     configureBlocking(true);
+   }
+ 
+   public DatagramSocket socket ()
+   {
+     return socket;
+   }
+     
+   protected void implCloseSelectableChannel ()
+     throws IOException
+   {
+     socket.close ();
+   }
+     
+   protected void implConfigureBlocking (boolean blocking)
+     throws IOException
+   {
+     socket.setSoTimeout (blocking ? 0 : NIOConstants.DEFAULT_TIMEOUT);
+   }
+ 
+   public DatagramChannel connect (SocketAddress remote)
+     throws IOException
+   {
+     if (!isOpen())
+       throw new ClosedChannelException();
+     
+     socket.connect (remote);
+     return this;
+   }
+     
+   public DatagramChannel disconnect ()
+     throws IOException
+   {
+     socket.disconnect ();
+     return this;
+   }
+     
+   public boolean isConnected ()
+   {
+     return socket.isConnected ();
+   }
+     
+   public int write (ByteBuffer src)
+     throws IOException
+   {
+     if (!isConnected ())
+       throw new NotYetConnectedException ();
+     
+     return send (src, socket.getRemoteSocketAddress());
+   }
+ 
+   public long write (ByteBuffer[] srcs, int offset, int length)
+     throws IOException
+   {
+     if (!isConnected())
+       throw new NotYetConnectedException();
+ 
+     if ((offset < 0)
+         || (offset > srcs.length)
+         || (length < 0)
+         || (length > (srcs.length - offset)))
+       throw new IndexOutOfBoundsException();
+       
+     long result = 0;
+ 
+     for (int index = offset; index < offset + length; index++)
+       result += write (srcs [index]);
+ 
+     return result;
+   }
+ 
+   public int read (ByteBuffer dst)
+     throws IOException
+   {
+     if (!isConnected ())
+       throw new NotYetConnectedException ();
+     
+     int remaining = dst.remaining();
+     receive (dst);
+     return remaining - dst.remaining();
+   }
+     
+   public long read (ByteBuffer[] dsts, int offset, int length)
+     throws IOException
+   {
+     if (!isConnected())
+       throw new NotYetConnectedException();
+     
+     if ((offset < 0)
+         || (offset > dsts.length)
+         || (length < 0)
+         || (length > (dsts.length - offset)))
+       throw new IndexOutOfBoundsException();
+       
+     long result = 0;
+ 
+     for (int index = offset; index < offset + length; index++)
+       result += read (dsts [index]);
+ 
+     return result;
+   }
+     
+   public SocketAddress receive (ByteBuffer dst)
+     throws IOException
+   {
+     if (!isOpen())
+       throw new ClosedChannelException();
+     
+     try
+       {
+         DatagramPacket packet;
+         int len = dst.remaining();
+         
+         if (dst.hasArray())
+           {
+             packet = new DatagramPacket (dst.array(),
+                                          dst.arrayOffset() + dst.position(),
+                                          len);
+           }
+         else
+           {
+             packet = new DatagramPacket (new byte [len], len);
+           }
+ 
+         boolean completed = false;
+ 
+         try
+           {
+             begin();
+             setInChannelOperation(true);
+             socket.receive (packet);
+             completed = true;
+           }
+         finally
+           {
+             end (completed);
+             setInChannelOperation(false);
+           }
+ 
+         if (!dst.hasArray())
+           {
+             dst.put (packet.getData(), packet.getOffset(), packet.getLength());
+           }
+         else
+           {
+             dst.position (dst.position() + packet.getLength());
+           }
+ 
+         return packet.getSocketAddress();
+       }
+     catch (SocketTimeoutException e)
+       {
+         return null;
+       }
+   }
+     
+   public int send (ByteBuffer src, SocketAddress target)
+     throws IOException
+   {
+     if (!isOpen())
+       throw new ClosedChannelException();
+     
+     if (target instanceof InetSocketAddress
+ 	&& ((InetSocketAddress) target).isUnresolved())
+       throw new IOException("Target address not resolved");
+ 
+     byte[] buffer;
+     int offset = 0;
+     int len = src.remaining();
+     
+     if (src.hasArray())
+       {
+         buffer = src.array();
+         offset = src.arrayOffset() + src.position();
+       }
+     else
+       {
+         buffer = new byte [len];
+         src.get (buffer);
+       }
+ 
+     DatagramPacket packet = new DatagramPacket (buffer, offset, len, target);
+ 
+     boolean completed = false;
+     try
+       {
+         begin();
+         setInChannelOperation(true);
+         socket.send(packet);
+         completed = true;
+       }
+     finally
+       {
+         end (completed);
+         setInChannelOperation(false);
+       }
+       
+     if (src.hasArray())
+       {
+ 	src.position (src.position() + len);
+       }
+ 
+     return len;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/DatagramChannelSelectionKey.java gcc-4.1.0/libjava/classpath/gnu/java/nio/DatagramChannelSelectionKey.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/DatagramChannelSelectionKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/DatagramChannelSelectionKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* DatagramChannelSelectionKey.java -- 
+    Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.nio.channels.spi.AbstractSelectableChannel;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class DatagramChannelSelectionKey
+   extends SelectionKeyImpl
+ {
+   public DatagramChannelSelectionKey (AbstractSelectableChannel channel,
+                                       SelectorImpl selector)
+   {
+     super (channel, selector);
+   }
+ 
+   public int getNativeFD()
+   {
+     NIODatagramSocket socket =
+       (NIODatagramSocket) ((DatagramChannelImpl) ch).socket();
+     return socket.getPlainDatagramSocketImpl().getNativeFD();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/FileLockImpl.java gcc-4.1.0/libjava/classpath/gnu/java/nio/FileLockImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/FileLockImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/FileLockImpl.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,104 ----
+ /* FileLockImpl.java -- FileLock associated with a FileChannelImpl.
+    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import gnu.java.nio.channels.FileChannelImpl;
+ 
+ import java.io.IOException;
+ import java.nio.channels.FileLock;
+ 
+ /**
+  * A FileLock associated with a FileChannelImpl.
+  *
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public final class FileLockImpl extends FileLock
+ {
+   /**
+    * Whether or not this lock is valid, false when channel is closed or
+    * release has been explicitly called.
+    */
+   private boolean valid;
+ 
+   public FileLockImpl (FileChannelImpl channel, long position,
+                        long size, boolean shared)
+   {
+     super (channel, position, size, shared);
+     valid = true;
+   }
+ 
+   /**
+    * Releases this lock.
+    */
+   protected void finalize()
+   {
+     try
+       {
+ 	release();
+       }
+     catch (IOException e)
+       {
+ 	// Ignore this.
+       }
+   }
+   
+   /**
+    * Whether or not this lock is valid, false when channel is closed or
+    * release has been explicitly called.
+    */
+   public boolean isValid()
+   {
+     if (valid)
+       valid = channel().isOpen();
+     return valid;
+   }
+ 
+   /**
+    * Releases the lock if it is still valid. Marks this lock as invalid.
+    */
+   public void release() throws IOException
+   {
+     if (isValid())
+       {
+ 	valid = false;
+ 	((FileChannelImpl) channel()).unlock(position(), size());
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/InputStreamChannel.java gcc-4.1.0/libjava/classpath/gnu/java/nio/InputStreamChannel.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/InputStreamChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/InputStreamChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* InputStreamChannel.java -- 
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.nio.ByteBuffer;
+ import java.nio.channels.ClosedChannelException;
+ import java.nio.channels.ReadableByteChannel;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class InputStreamChannel implements ReadableByteChannel
+ {
+   private boolean closed = false;
+   private InputStream in;
+   
+   public InputStreamChannel (InputStream in)
+   {
+     super();
+     this.in = in;
+   }
+ 
+   public void close() throws IOException
+   {
+     if (!closed)
+       {
+         in.close();
+         closed = true;
+       }
+   }
+ 
+   public boolean isOpen()
+   {
+     return !closed;
+   }
+ 
+   public int read (ByteBuffer dst) throws IOException
+   {
+     if (!isOpen())
+       throw new ClosedChannelException();
+     
+     byte[] buffer = new byte [dst.remaining()];
+     int readBytes = in.read (buffer);
+ 
+     if (readBytes > 0)
+       dst.put (buffer, 0, readBytes);
+ 
+     return readBytes;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/NIOConstants.java gcc-4.1.0/libjava/classpath/gnu/java/nio/NIOConstants.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/NIOConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/NIOConstants.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /* NIOConstants.java --
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class NIOConstants
+ {
+   public static final int DEFAULT_TIMEOUT = 50;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/NIODatagramSocket.java gcc-4.1.0/libjava/classpath/gnu/java/nio/NIODatagramSocket.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/NIODatagramSocket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/NIODatagramSocket.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* NIODatagramSocket.java -- 
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import gnu.java.net.PlainDatagramSocketImpl;
+ 
+ import java.net.DatagramSocket;
+ import java.nio.channels.DatagramChannel;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class NIODatagramSocket extends DatagramSocket
+ {
+   private PlainDatagramSocketImpl impl;
+   private DatagramChannelImpl channel;
+     
+   public NIODatagramSocket (PlainDatagramSocketImpl impl,
+                             DatagramChannelImpl channel)
+   {
+     super (impl);
+     this.impl = impl;
+     this.channel = channel;
+   }
+ 
+   public final PlainDatagramSocketImpl getPlainDatagramSocketImpl()
+   {
+     return impl;
+   }
+ 
+   public final DatagramChannel getChannel()
+   {
+     return channel;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/NIOServerSocket.java gcc-4.1.0/libjava/classpath/gnu/java/nio/NIOServerSocket.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/NIOServerSocket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/NIOServerSocket.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,106 ----
+ /* NIOServerSocket.java -- 
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import gnu.java.net.PlainSocketImpl;
+ 
+ import java.io.IOException;
+ import java.lang.reflect.Method;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ import java.nio.channels.ServerSocketChannel;
+ import java.nio.channels.SocketChannel;
+ import java.security.AccessController;
+ import java.security.PrivilegedExceptionAction;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class NIOServerSocket extends ServerSocket
+ {
+   private ServerSocketChannelImpl channel;
+     
+   protected NIOServerSocket (ServerSocketChannelImpl channel)
+     throws IOException
+   {
+     super();
+     this.channel = channel;
+   }
+ 
+   public PlainSocketImpl getPlainSocketImpl()
+   {
+     try
+       {
+ 	final Object t = this;
+ 	final Method method = ServerSocket.class.getDeclaredMethod("getImpl", new Class[0]);
+ 	method.setAccessible(true);
+ 	PrivilegedExceptionAction action = new PrivilegedExceptionAction()
+ 	  {
+ 	    public Object run() throws Exception
+ 	    {
+ 	      return method.invoke(t, new Object[0]);
+ 	    }
+ 	  };
+ 	return (PlainSocketImpl) AccessController.doPrivileged(action);
+       }
+     catch (Exception e)
+       {
+ 	// This should never happen.
+ 	Error error = new InternalError("unable to invoke method ServerSocket.getImpl()");
+ 	error.initCause(e);
+ 	throw error;
+       }
+   }
+ 
+   public ServerSocketChannel getChannel()
+   {
+     return channel;
+   }
+ 
+   public Socket accept() throws IOException
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkListen (getLocalPort());
+ 
+     SocketChannel socketChannel = channel.provider().openSocketChannel();
+     implAccept (socketChannel.socket());
+     return socketChannel.socket();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/NIOSocket.java gcc-4.1.0/libjava/classpath/gnu/java/nio/NIOSocket.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/NIOSocket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/NIOSocket.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* NIOSocket.java -- 
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import gnu.java.net.PlainSocketImpl;
+ import java.io.IOException;
+ import java.net.Socket;
+ import java.nio.channels.SocketChannel;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class NIOSocket extends Socket
+ {
+   private PlainSocketImpl impl;
+   private SocketChannelImpl channel;
+     
+   protected NIOSocket (PlainSocketImpl impl, SocketChannelImpl channel)
+     throws IOException
+   {
+     super (impl);
+     this.impl = impl;
+     this.channel = channel;
+   }
+ 
+   public final PlainSocketImpl getPlainSocketImpl()
+   {
+     return impl;
+   }
+ 
+   final void setChannel (SocketChannelImpl channel)
+   {
+     this.impl = channel.getPlainSocketImpl();
+     this.channel = channel;
+   }
+   
+   public final SocketChannel getChannel()
+   {
+     return channel;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/OutputStreamChannel.java gcc-4.1.0/libjava/classpath/gnu/java/nio/OutputStreamChannel.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/OutputStreamChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/OutputStreamChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* OutputStreamChannel.java -- 
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.nio.ByteBuffer;
+ import java.nio.channels.ClosedChannelException;
+ import java.nio.channels.WritableByteChannel;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class OutputStreamChannel implements WritableByteChannel
+ {
+   private boolean closed = false;
+   private OutputStream out;
+   
+   public OutputStreamChannel (OutputStream out)
+   {
+     super();
+     
+     this.out = out;
+   }
+ 
+   public void close() throws IOException
+   {
+     if (!closed)
+       {
+         out.close();
+         closed = true;
+       }
+   }
+ 
+   public boolean isOpen()
+   {
+     return !closed;
+   }
+   
+   public int write (ByteBuffer src) throws IOException
+   {
+     if (!isOpen())
+       throw new ClosedChannelException();
+     
+     int len = src.remaining();
+     byte[] buffer = new byte [len];
+     src.get (buffer);
+     out.write (buffer);
+     return len;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/PipeImpl.java gcc-4.1.0/libjava/classpath/gnu/java/nio/PipeImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/PipeImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/PipeImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,184 ----
+ /* PipeImpl.java -- 
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio;
+ 
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.nio.channels.Pipe;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ class PipeImpl extends Pipe
+ {
+   public static final class SourceChannelImpl extends Pipe.SourceChannel
+   {
+     private int native_fd;
+     
+     public SourceChannelImpl (SelectorProvider selectorProvider,
+                               int native_fd)
+     {
+       super (selectorProvider);
+       this.native_fd = native_fd;
+     }
+ 
+     protected final void implCloseSelectableChannel()
+       throws IOException
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     protected void implConfigureBlocking (boolean blocking)
+       throws IOException
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     public final int read (ByteBuffer src)
+       throws IOException
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     public final long read (ByteBuffer[] srcs)
+       throws IOException
+     {
+       return read (srcs, 0, srcs.length);
+     }
+ 
+     public final synchronized long read (ByteBuffer[] srcs, int offset,
+ 					 int len)
+       throws IOException
+     {
+       if (offset < 0
+ 	  || offset > srcs.length
+ 	  || len < 0
+ 	  || len > srcs.length - offset)
+ 	throw new IndexOutOfBoundsException();
+ 
+       long bytesRead = 0;
+       
+       for (int index = 0; index < len; index++)
+ 	bytesRead += read (srcs [offset + index]);
+ 
+       return bytesRead;
+ 
+     }
+ 
+     public final int getNativeFD()
+     {
+       return native_fd;
+     }
+   }
+ 
+   public static final class SinkChannelImpl extends Pipe.SinkChannel
+   {
+     private int native_fd;
+     
+     public SinkChannelImpl (SelectorProvider selectorProvider,
+                             int native_fd)
+     {
+       super (selectorProvider);
+       this.native_fd = native_fd;
+     }
+ 
+     protected final void implCloseSelectableChannel()
+       throws IOException
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     protected final void implConfigureBlocking (boolean blocking)
+       throws IOException
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     public final int write (ByteBuffer dst)
+       throws IOException
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     public final long write (ByteBuffer[] srcs)
+       throws IOException
+     {
+       return write (srcs, 0, srcs.length);
+     }
+ 
+     public final synchronized long write (ByteBuffer[] srcs, int offset, int len)
+       throws IOException
+     {
+       if (offset < 0
+ 	  || offset > srcs.length
+ 	  || len < 0
+ 	  || len > srcs.length - offset)
+ 	throw new IndexOutOfBoundsException();
+ 
+       long bytesWritten = 0;
+       
+       for (int index = 0; index < len; index++)
+ 	bytesWritten += write (srcs [offset + index]);
+ 
+       return bytesWritten;
+     }
+ 
+     public final int getNativeFD()
+     {
+       return native_fd;
+     }
+   }
+ 
+   private SinkChannelImpl sink;
+   private SourceChannelImpl source;
+   
+   public PipeImpl (SelectorProvider provider)
+     throws IOException
+   {
+     super();
+     VMPipe.init (this, provider);
+   }
+ 
+   public Pipe.SinkChannel sink()
+   {
+     return sink;
+   }
+ 
+   public Pipe.SourceChannel source()
+   {
+     return source;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/SelectionKeyImpl.java gcc-4.1.0/libjava/classpath/gnu/java/nio/SelectionKeyImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/SelectionKeyImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/SelectionKeyImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /* SelectionKeyImpl.java -- 
+    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio;
+ 
+ import java.nio.channels.CancelledKeyException;
+ import java.nio.channels.SelectableChannel;
+ import java.nio.channels.SelectionKey;
+ import java.nio.channels.Selector;
+ import java.nio.channels.spi.AbstractSelectionKey;
+ 
+ public abstract class SelectionKeyImpl extends AbstractSelectionKey
+ {
+   private int readyOps;
+   private int interestOps;
+   private SelectorImpl impl;
+   SelectableChannel ch;
+ 
+   public SelectionKeyImpl (SelectableChannel ch, SelectorImpl impl)
+   {
+     this.ch  = ch;
+     this.impl = impl;
+   }
+ 
+   public SelectableChannel channel ()
+   {
+     return ch;
+   }
+ 
+   public int readyOps ()
+   {
+     if (!isValid())
+       throw new CancelledKeyException();
+     
+     return readyOps;
+   }
+ 
+   public SelectionKey readyOps (int ops)
+   {
+     if (!isValid())
+       throw new CancelledKeyException();
+     
+     readyOps = ops;
+     return this;
+   }
+ 
+   public int interestOps ()
+   {
+     if (!isValid())
+       throw new CancelledKeyException();
+     
+     return interestOps;    
+   }
+ 
+   public SelectionKey interestOps (int ops)
+   {
+     if (!isValid())
+       throw new CancelledKeyException();
+     
+     interestOps = ops;
+     return this;
+   }
+     
+   public Selector selector ()
+   {
+     return impl;
+   }
+ 
+   public abstract int getNativeFD();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/SelectorImpl.java gcc-4.1.0/libjava/classpath/gnu/java/nio/SelectorImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/SelectorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/SelectorImpl.java	Wed Dec 28 17:29:16 2005
***************
*** 0 ****
--- 1,394 ----
+ /* SelectorImpl.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.io.IOException;
+ import java.nio.channels.ClosedSelectorException;
+ import java.nio.channels.SelectableChannel;
+ import java.nio.channels.SelectionKey;
+ import java.nio.channels.Selector;
+ import java.nio.channels.SocketChannel;
+ import java.nio.channels.spi.AbstractSelectableChannel;
+ import java.nio.channels.spi.AbstractSelector;
+ import java.nio.channels.spi.SelectorProvider;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Set;
+ 
+ public class SelectorImpl extends AbstractSelector
+ {
+   private Set keys;
+   private Set selected;
+ 
+   /**
+    * A dummy object whose monitor regulates access to both our
+    * selectThread and unhandledWakeup fields.
+    */
+   private Object selectThreadMutex = new Object ();
+   
+   /**
+    * Any thread that's currently blocked in a select operation.
+    */
+   private Thread selectThread;
+   
+   /**
+    * Indicates whether we have an unhandled wakeup call. This can
+    * be due to either wakeup() triggering a thread interruption while
+    * a thread was blocked in a select operation (in which case we need
+    * to reset this thread's interrupt status after interrupting the
+    * select), or else that no thread was on a select operation at the
+    * time that wakeup() was called, in which case the following select()
+    * operation should return immediately with nothing selected.
+    */
+   private boolean unhandledWakeup;
+ 
+   public SelectorImpl (SelectorProvider provider)
+   {
+     super (provider);
+     
+     keys = new HashSet ();
+     selected = new HashSet ();
+   }
+ 
+   protected void finalize() throws Throwable
+   {
+     close();
+   }
+ 
+   protected final void implCloseSelector()
+     throws IOException
+   {
+     // Cancel any pending select operation.
+     wakeup();
+     
+     synchronized (keys)
+       {
+         synchronized (selected)
+           {
+             synchronized (cancelledKeys ())
+               {
+                 // FIXME: Release resources here.
+               }
+           }
+       }
+   }
+ 
+   public final Set keys()
+   {
+     if (!isOpen())
+       throw new ClosedSelectorException();
+ 
+     return Collections.unmodifiableSet (keys);
+   }
+     
+   public final int selectNow()
+     throws IOException
+   {
+     // FIXME: We're simulating an immediate select
+     // via a select with a timeout of one millisecond.
+     return select (1);
+   }
+ 
+   public final int select()
+     throws IOException
+   {
+     return select (0);
+   }
+ 
+   private final int[] getFDsAsArray (int ops)
+   {
+     int[] result;
+     int counter = 0;
+     Iterator it = keys.iterator ();
+ 
+     // Count the number of file descriptors needed
+     while (it.hasNext ())
+       {
+         SelectionKeyImpl key = (SelectionKeyImpl) it.next ();
+ 
+         if ((key.interestOps () & ops) != 0)
+           {
+             counter++;
+           }
+       }
+ 
+     result = new int[counter];
+ 
+     counter = 0;
+     it = keys.iterator ();
+ 
+     // Fill the array with the file descriptors
+     while (it.hasNext ())
+       {
+         SelectionKeyImpl key = (SelectionKeyImpl) it.next ();
+ 
+         if ((key.interestOps () & ops) != 0)
+           {
+             result[counter] = key.getNativeFD();
+             counter++;
+           }
+       }
+ 
+     return result;
+   }
+ 
+   public synchronized int select (long timeout)
+     throws IOException
+   {
+     if (!isOpen())
+       throw new ClosedSelectorException();
+       
+     synchronized (keys)
+       {
+         synchronized (selected)
+           {
+             deregisterCancelledKeys();
+ 
+             // Set only keys with the needed interest ops into the arrays.
+             int[] read = getFDsAsArray (SelectionKey.OP_READ
+                                         | SelectionKey.OP_ACCEPT);
+             int[] write = getFDsAsArray (SelectionKey.OP_WRITE
+                                          | SelectionKey.OP_CONNECT);
+ 
+             // FIXME: We dont need to check this yet
+             int[] except = new int [0];
+ 
+             // Test to see if we've got an unhandled wakeup call,
+             // in which case we return immediately. Otherwise,
+             // remember our current thread and jump into the select.
+             // The monitor for dummy object selectThreadMutex regulates
+             // access to these fields.
+ 
+             // FIXME: Not sure from the spec at what point we should
+             // return "immediately". Is it here or immediately upon
+             // entry to this function?
+             
+             // NOTE: There's a possibility of another thread calling
+             // wakeup() immediately after our thread releases
+             // selectThreadMutex's monitor here, in which case we'll
+             // do the select anyway. Since calls to wakeup() and select()
+             // among different threads happen in non-deterministic order,
+             // I don't think this is an issue.
+             synchronized (selectThreadMutex)
+               {
+                 if (unhandledWakeup)
+                   {
+                     unhandledWakeup = false;
+                     return 0;
+                   }
+                 else
+                   {
+                     selectThread = Thread.currentThread ();
+                   }
+               }
+ 
+             // Call the native select() on all file descriptors.
+             int result = 0;
+             try
+               {
+                 begin();
+                 result = VMSelector.select (read, write, except, timeout);
+               }
+             finally
+               {
+                 end();
+               }
+ 
+             // If our unhandled wakeup flag is set at this point,
+             // reset our thread's interrupt flag because we were
+             // awakened by wakeup() instead of an external thread
+             // interruption.
+             //
+             // NOTE: If we were blocked in a select() and one thread
+             // called Thread.interrupt() on the blocked thread followed
+             // by another thread calling Selector.wakeup(), then race
+             // conditions could make it so that the thread's interrupt
+             // flag is reset even though the Thread.interrupt() call
+             // "was there first". I don't think we need to care about
+             // this scenario.
+             synchronized (selectThreadMutex)
+               {
+                 if (unhandledWakeup)
+                   {
+                     unhandledWakeup = false;
+                     Thread.interrupted ();
+                   }
+                 selectThread = null;
+               }
+ 
+             Iterator it = keys.iterator ();
+ 
+             while (it.hasNext ())
+               {
+                 int ops = 0;
+                 SelectionKeyImpl key = (SelectionKeyImpl) it.next ();
+ 
+                 // If key is already selected retrieve old ready ops.
+                 if (selected.contains (key))
+                   {
+                     ops = key.readyOps ();
+                   }
+ 
+                 // Set new ready read/accept ops
+                 for (int i = 0; i < read.length; i++)
+                   {
+                     if (key.getNativeFD() == read[i])
+                       {
+                         if (key.channel () instanceof ServerSocketChannelImpl)
+                           {
+                             ops = ops | SelectionKey.OP_ACCEPT;
+                           }
+                         else
+                           {
+                             ops = ops | SelectionKey.OP_READ;
+                           }
+                       }
+                   }
+ 
+                 // Set new ready write ops
+                 for (int i = 0; i < write.length; i++)
+                   {
+ 		    if (key.getNativeFD() == write[i])
+ 		      {
+ 			if (key.channel() instanceof SocketChannel)
+ 			  {
+ 			    if (((SocketChannel) key.channel ()).isConnected ())
+ 			      ops = ops | SelectionKey.OP_WRITE;
+ 			    else
+ 			      ops = ops | SelectionKey.OP_CONNECT;
+ 			  }
+ 			else
+ 			  ops = ops | SelectionKey.OP_WRITE;
+ 		      }
+                   }
+ 
+                 // FIXME: We dont handle exceptional file descriptors yet.
+ 
+                 // If key is not yet selected add it.
+                 if (!selected.contains (key))
+                   {
+                     selected.add (key);
+                   }
+ 
+                 // Set new ready ops
+                 key.readyOps (key.interestOps () & ops);
+               }
+             deregisterCancelledKeys();
+             
+             return result;
+           }
+         }
+   }
+     
+   public final Set selectedKeys()
+   {
+     if (!isOpen())
+       throw new ClosedSelectorException();
+ 
+     return selected;
+   }
+ 
+   public final Selector wakeup()
+   {
+     // IMPLEMENTATION NOTE: Whereas the specification says that
+     // thread interruption should trigger a call to wakeup, we
+     // do the reverse under the covers: wakeup triggers a thread
+     // interrupt followed by a subsequent reset of the thread's
+     // interrupt status within select().
+     
+     // First, acquire the monitor of the object regulating
+     // access to our selectThread and unhandledWakeup fields.
+     synchronized (selectThreadMutex)
+       {
+         unhandledWakeup = true;
+         
+         // Interrupt any thread which is currently blocked in
+         // a select operation.
+         if (selectThread != null)
+           selectThread.interrupt ();
+       }
+       
+     return this;
+   }
+ 
+   private final void deregisterCancelledKeys()
+   {
+     Set ckeys = cancelledKeys ();
+     synchronized (ckeys)
+     {
+       Iterator it = ckeys.iterator();
+ 
+       while (it.hasNext ())
+         {
+           keys.remove ((SelectionKeyImpl) it.next ());
+           it.remove ();
+         }
+     }
+   }
+ 
+   protected SelectionKey register (SelectableChannel ch, int ops, Object att)
+   {
+     return register ((AbstractSelectableChannel) ch, ops, att);
+   }
+ 
+   protected final SelectionKey register (AbstractSelectableChannel ch, int ops,
+                                          Object att)
+   {
+     SelectionKeyImpl result;
+     
+     if (ch instanceof SocketChannelImpl)
+       result = new SocketChannelSelectionKey (ch, this);
+     else if (ch instanceof DatagramChannelImpl)
+       result = new DatagramChannelSelectionKey (ch, this);
+     else if (ch instanceof ServerSocketChannelImpl)
+       result = new ServerSocketChannelSelectionKey (ch, this);
+     else
+       throw new InternalError ("No known channel type");
+ 
+     synchronized (keys)
+       {
+         keys.add (result);
+       }
+ 
+     result.interestOps (ops);
+     result.attach (att);
+     return result;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/SelectorProviderImpl.java gcc-4.1.0/libjava/classpath/gnu/java/nio/SelectorProviderImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/SelectorProviderImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/SelectorProviderImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,83 ----
+ /* SelectorProviderImpl.java -- 
+    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio;
+ 
+ import java.io.IOException;
+ import java.nio.channels.DatagramChannel;
+ import java.nio.channels.Pipe;
+ import java.nio.channels.ServerSocketChannel;
+ import java.nio.channels.SocketChannel;
+ import java.nio.channels.spi.AbstractSelector;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ public class SelectorProviderImpl extends SelectorProvider
+ {
+   public SelectorProviderImpl ()
+   {
+   }
+ 
+   public DatagramChannel openDatagramChannel ()
+     throws IOException
+   {
+     return new DatagramChannelImpl (this);
+   }
+ 
+   public Pipe openPipe ()
+     throws IOException
+   {
+     return new PipeImpl (this);
+   }
+     
+   public AbstractSelector openSelector ()
+     throws IOException
+   {
+     return new SelectorImpl (this);
+   }
+ 
+   public ServerSocketChannel openServerSocketChannel ()
+     throws IOException
+   {
+     return new ServerSocketChannelImpl (this);
+   }
+ 
+   public SocketChannel openSocketChannel ()
+     throws IOException
+   {
+     return new SocketChannelImpl (this);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/ServerSocketChannelImpl.java gcc-4.1.0/libjava/classpath/gnu/java/nio/ServerSocketChannelImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/ServerSocketChannelImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/ServerSocketChannelImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,124 ----
+ /* ServerSocketChannelImpl.java -- 
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.io.IOException;
+ import java.net.ServerSocket;
+ import java.net.SocketTimeoutException;
+ import java.nio.channels.ClosedChannelException;
+ import java.nio.channels.NotYetBoundException;
+ import java.nio.channels.ServerSocketChannel;
+ import java.nio.channels.SocketChannel;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ public final class ServerSocketChannelImpl extends ServerSocketChannel
+ {
+   private NIOServerSocket serverSocket;
+   private boolean connected;
+ 
+   protected ServerSocketChannelImpl (SelectorProvider provider)
+     throws IOException
+   {
+     super (provider);
+     serverSocket = new NIOServerSocket (this);
+     configureBlocking(true);
+   }
+ 
+   public void finalizer()
+   {
+     if (connected)
+       {
+         try
+           {
+             close ();
+           }
+         catch (Exception e)
+           {
+           }
+       }
+   }
+ 
+   protected void implCloseSelectableChannel () throws IOException
+   {
+     connected = false;
+     serverSocket.close();
+   }
+ 
+   protected void implConfigureBlocking (boolean blocking) throws IOException
+   {
+     serverSocket.setSoTimeout (blocking ? 0 : NIOConstants.DEFAULT_TIMEOUT);
+   }
+ 
+   public SocketChannel accept () throws IOException
+   {
+     if (!isOpen())
+       throw new ClosedChannelException();
+ 
+     if (!serverSocket.isBound())
+       throw new NotYetBoundException();
+ 
+     boolean completed = false;
+     
+     try
+       {
+         begin();
+         serverSocket.getPlainSocketImpl().setInChannelOperation(true);
+           // indicate that a channel is initiating the accept operation
+           // so that the socket ignores the fact that we might be in
+           // non-blocking mode.
+         NIOSocket socket = (NIOSocket) serverSocket.accept();
+         completed = true;
+         return socket.getChannel();
+       }
+     catch (SocketTimeoutException e)
+       {
+         return null;
+       }
+     finally
+       {
+         serverSocket.getPlainSocketImpl().setInChannelOperation(false);
+         end (completed);
+       }
+   }
+ 
+   public ServerSocket socket ()
+   {
+     return serverSocket;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/ServerSocketChannelSelectionKey.java gcc-4.1.0/libjava/classpath/gnu/java/nio/ServerSocketChannelSelectionKey.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/ServerSocketChannelSelectionKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/ServerSocketChannelSelectionKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* ServerSocketChannelSelectionKey.java -- 
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.nio.channels.spi.AbstractSelectableChannel;
+ 
+ public final class ServerSocketChannelSelectionKey
+   extends SelectionKeyImpl
+ {
+   public ServerSocketChannelSelectionKey (AbstractSelectableChannel channel,
+                                           SelectorImpl selector)
+   {
+     super (channel, selector);
+   }
+ 
+   public int getNativeFD()
+   {
+     NIOServerSocket socket =
+          (NIOServerSocket) ((ServerSocketChannelImpl) ch).socket();
+     return socket.getPlainSocketImpl().getNativeFD();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/SocketChannelImpl.java gcc-4.1.0/libjava/classpath/gnu/java/nio/SocketChannelImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/SocketChannelImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/SocketChannelImpl.java	Wed Dec 28 17:25:43 2005
***************
*** 0 ****
--- 1,351 ----
+ /* SocketChannelImpl.java -- 
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import gnu.java.net.PlainSocketImpl;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.InetSocketAddress;
+ import java.net.Socket;
+ import java.net.SocketAddress;
+ import java.net.SocketTimeoutException;
+ import java.nio.ByteBuffer;
+ import java.nio.channels.AlreadyConnectedException;
+ import java.nio.channels.ClosedChannelException;
+ import java.nio.channels.ConnectionPendingException;
+ import java.nio.channels.NoConnectionPendingException;
+ import java.nio.channels.NotYetConnectedException;
+ import java.nio.channels.SelectionKey;
+ import java.nio.channels.Selector;
+ import java.nio.channels.SocketChannel;
+ import java.nio.channels.UnresolvedAddressException;
+ import java.nio.channels.UnsupportedAddressTypeException;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ public final class SocketChannelImpl extends SocketChannel
+ {
+   private PlainSocketImpl impl;
+   private NIOSocket socket;
+   private boolean connectionPending;
+ 
+   SocketChannelImpl (SelectorProvider provider)
+     throws IOException
+   {
+     super (provider);
+     impl = new PlainSocketImpl();
+     socket = new NIOSocket (impl, this);
+     configureBlocking(true);
+   }
+   
+   SocketChannelImpl (SelectorProvider provider,
+                      NIOSocket socket)
+     throws IOException
+   {
+     super (provider);
+     this.impl = socket.getPlainSocketImpl();
+     this.socket = socket;
+   }
+ 
+   public void finalizer()
+   {
+     if (isConnected())
+       {
+         try
+           {
+             close ();
+           }
+         catch (Exception e)
+           {
+           }
+       }
+   }
+ 
+   PlainSocketImpl getPlainSocketImpl()
+   {
+     return impl;
+   }
+ 
+   protected void implCloseSelectableChannel () throws IOException
+   {
+     socket.close();
+   }
+ 
+   protected void implConfigureBlocking (boolean blocking) throws IOException
+   {
+     socket.setSoTimeout (blocking ? 0 : NIOConstants.DEFAULT_TIMEOUT);
+   }   
+ 
+   public boolean connect (SocketAddress remote) throws IOException
+   {
+     if (!isOpen())
+       throw new ClosedChannelException();
+     
+     if (isConnected())
+       throw new AlreadyConnectedException();
+ 
+     if (connectionPending)
+       throw new ConnectionPendingException();
+ 
+     if (!(remote instanceof InetSocketAddress))
+       throw new UnsupportedAddressTypeException();
+ 
+     if (((InetSocketAddress) remote).isUnresolved())
+       throw new UnresolvedAddressException();
+     
+     try
+       {
+         socket.getPlainSocketImpl().setInChannelOperation(true);
+           // indicate that a channel is initiating the accept operation
+           // so that the socket ignores the fact that we might be in
+           // non-blocking mode.
+         
+         if (isBlocking())
+           {
+             // Do blocking connect.
+             socket.connect (remote);
+             return true;
+           }
+ 
+         // Do non-blocking connect.
+         try
+           {
+             socket.connect (remote, NIOConstants.DEFAULT_TIMEOUT);
+             return true;
+           }
+         catch (SocketTimeoutException e)
+           {
+             connectionPending = true;
+             return false;
+           }
+       }
+     finally
+       {
+         socket.getPlainSocketImpl().setInChannelOperation(false);
+       }
+   }
+     
+   public boolean finishConnect ()
+     throws IOException
+   {
+     if (!isOpen())
+       throw new ClosedChannelException();
+     
+     if (!isConnected() && !connectionPending)
+       throw new NoConnectionPendingException();
+     
+     if (isConnected())
+       return true;
+ 
+     // FIXME: Handle blocking/non-blocking mode.
+ 
+     Selector selector = provider().openSelector();
+     register(selector, SelectionKey.OP_CONNECT);
+ 
+     if (isBlocking())
+       {
+         selector.select(); // blocking until channel is connected.
+         connectionPending = false;
+         return true;
+       }
+ 
+     int ready = selector.selectNow(); // non-blocking
+     if (ready == 1)
+       {
+         connectionPending = false;
+         return true;
+       }
+ 
+     return false;
+   }
+ 
+   public boolean isConnected ()
+   {
+     return socket.isConnected();
+   }
+     
+   public boolean isConnectionPending ()
+   {
+     return connectionPending;
+   }
+     
+   public Socket socket ()
+   {
+     return socket;
+   }
+ 
+   public int read(ByteBuffer dst) throws IOException
+   {
+     if (!isConnected())
+       throw new NotYetConnectedException();
+     
+     byte[] data;
+     int offset = 0;
+     InputStream input = socket.getInputStream();
+     int available = input.available();
+     int len = dst.remaining();
+ 	
+     if ((! isBlocking()) && available == 0)
+       return 0;
+     
+     if (dst.hasArray())
+       {
+         offset = dst.arrayOffset() + dst.position();
+         data = dst.array();
+       }
+     else
+       {
+         data = new byte [len];
+       }
+ 
+     int readBytes = 0;
+     boolean completed = false;
+ 
+     try
+       {
+         begin();
+         socket.getPlainSocketImpl().setInChannelOperation(true);
+         readBytes = input.read (data, offset, len);
+         completed = true;
+       }
+     finally
+       {
+         end (completed);
+         socket.getPlainSocketImpl().setInChannelOperation(false);
+       }
+ 
+     if (readBytes > 0)
+       if (dst.hasArray())
+ 	{
+ 	  dst.position (dst.position() + readBytes);
+ 	}
+       else
+         {
+           dst.put (data, offset, readBytes);
+         }
+ 
+     return readBytes;
+   }
+     
+   public long read (ByteBuffer[] dsts, int offset, int length)
+     throws IOException
+   {
+     if (!isConnected())
+       throw new NotYetConnectedException();
+     
+     if ((offset < 0)
+         || (offset > dsts.length)
+         || (length < 0)
+         || (length > (dsts.length - offset)))
+       throw new IndexOutOfBoundsException();
+       
+     long readBytes = 0;
+ 
+     for (int index = offset; index < length; index++)
+       readBytes += read (dsts [index]);
+ 
+     return readBytes;
+   }
+      
+   public int write (ByteBuffer src)
+     throws IOException
+   {
+     if (!isConnected())
+       throw new NotYetConnectedException();
+     
+     byte[] data;
+     int offset = 0;
+     int len = src.remaining();
+     
+     if (!src.hasArray())
+       {
+         data = new byte [len];
+         src.get (data, 0, len);
+       }
+     else
+       {
+         offset = src.arrayOffset() + src.position();
+         data = src.array();
+       }
+ 
+     OutputStream output = socket.getOutputStream();
+     boolean completed = false;
+ 
+     try
+       {
+         begin();
+         socket.getPlainSocketImpl().setInChannelOperation(true);
+         output.write (data, offset, len);
+         completed = true;
+       }
+     finally
+       {
+         end (completed);
+         socket.getPlainSocketImpl().setInChannelOperation(false);
+       }
+ 
+     if (src.hasArray())
+       {
+ 	src.position (src.position() + len);
+       }
+     
+     return len;
+   }
+ 
+   public long write (ByteBuffer[] srcs, int offset, int length)
+     throws IOException
+   {
+     if (!isConnected())
+       throw new NotYetConnectedException();
+     
+     if ((offset < 0)
+         || (offset > srcs.length)
+         || (length < 0)
+         || (length > (srcs.length - offset)))
+       throw new IndexOutOfBoundsException();
+       
+     long writtenBytes = 0;
+ 
+     for (int index = offset; index < length; index++)
+       writtenBytes += write (srcs [index]);
+ 
+     return writtenBytes;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/SocketChannelSelectionKey.java gcc-4.1.0/libjava/classpath/gnu/java/nio/SocketChannelSelectionKey.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/SocketChannelSelectionKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/SocketChannelSelectionKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* SocketChannelSelectionKey.java -- 
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio;
+ 
+ import java.nio.channels.spi.AbstractSelectableChannel;
+ 
+ public final class SocketChannelSelectionKey
+   extends SelectionKeyImpl
+ {
+   public SocketChannelSelectionKey (AbstractSelectableChannel channel,
+                                     SelectorImpl selector)
+   {
+     super (channel, selector);
+   }
+     
+   public int getNativeFD()
+   {
+     NIOSocket socket =
+         (NIOSocket) ((SocketChannelImpl) ch).socket();
+     return socket.getPlainSocketImpl().getNativeFD();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/channels/FileChannelImpl.java gcc-4.1.0/libjava/classpath/gnu/java/nio/channels/FileChannelImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/channels/FileChannelImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/channels/FileChannelImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,564 ----
+ /* FileChannelImpl.java -- 
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.channels;
+ 
+ import gnu.classpath.Configuration;
+ import gnu.java.nio.FileLockImpl;
+ 
+ import java.io.File;
+ import java.io.FileNotFoundException;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.nio.MappedByteBuffer;
+ import java.nio.channels.ClosedChannelException;
+ import java.nio.channels.FileChannel;
+ import java.nio.channels.FileLock;
+ import java.nio.channels.NonReadableChannelException;
+ import java.nio.channels.NonWritableChannelException;
+ import java.nio.channels.ReadableByteChannel;
+ import java.nio.channels.WritableByteChannel;
+ 
+ /**
+  * This file is not user visible !
+  * But alas, Java does not have a concept of friendly packages
+  * so this class is public. 
+  * Instances of this class are created by invoking getChannel
+  * Upon a Input/Output/RandomAccessFile object.
+  */
+ public final class FileChannelImpl extends FileChannel
+ {
+   // These are mode values for open().
+   public static final int READ   = 1;
+   public static final int WRITE  = 2;
+   public static final int APPEND = 4;
+ 
+   // EXCL is used only when making a temp file.
+   public static final int EXCL   = 8;
+   public static final int SYNC   = 16;
+   public static final int DSYNC  = 32;
+ 
+   public static FileChannelImpl in;
+   public static FileChannelImpl out;
+   public static FileChannelImpl err;
+ 
+   private static native void init();
+ 
+   static
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary("javanio");
+       }
+     
+     init();
+ 
+     in  = new FileChannelImpl(0, READ);
+     out = new FileChannelImpl(1, WRITE);
+     err = new FileChannelImpl(2, WRITE);
+   }
+ 
+   /**
+    * This is the actual native file descriptor value
+    */
+   // System's notion of file descriptor.  It might seem redundant to
+   // initialize this given that it is reassigned in the constructors.
+   // However, this is necessary because if open() throws an exception
+   // we want to make sure this has the value -1.  This is the most
+   // efficient way to accomplish that.
+   private int fd = -1;
+ 
+   private int mode;
+ 
+   final String description;
+ 
+   /* Open a file.  MODE is a combination of the above mode flags. */
+   /* This is a static factory method, so that VM implementors can decide
+    * substitute subclasses of FileChannelImpl. */
+   public static FileChannelImpl create(File file, int mode)
+     throws FileNotFoundException
+   {
+     return new FileChannelImpl(file, mode);
+   }
+ 
+   private FileChannelImpl(File file, int mode)
+     throws FileNotFoundException
+   {
+     String path = file.getPath();
+     description = path;
+     fd = open (path, mode);
+     this.mode = mode;
+ 
+     // First open the file and then check if it is a a directory
+     // to avoid race condition.
+     if (file.isDirectory())
+       {
+ 	try 
+ 	  {
+ 	      close();
+ 	  }
+ 	catch (IOException e)
+ 	  {
+ 	      /* ignore it */
+ 	  }
+ 
+ 	throw new FileNotFoundException(description + " is a directory");
+       }
+   }
+ 
+   /**
+    * Constructor for default channels in, out and err.
+    *
+    * Used by init() (native code).
+    *
+    * @param fd the file descriptor (0, 1, 2 for stdin, stdout, stderr).
+    *
+    * @param mode READ or WRITE
+    */
+   FileChannelImpl (int fd, int mode)
+   {
+     this.fd = fd;
+     this.mode = mode;
+     this.description = "descriptor(" + fd + ")";
+   }
+ 
+   private native int open (String path, int mode) throws FileNotFoundException;
+ 
+   public native int available () throws IOException;
+   private native long implPosition () throws IOException;
+   private native void seek (long newPosition) throws IOException;
+   private native void implTruncate (long size) throws IOException;
+   
+   public native void unlock (long pos, long len) throws IOException;
+ 
+   public native long size () throws IOException;
+     
+   protected native void implCloseChannel() throws IOException;
+ 
+   /**
+    * Makes sure the Channel is properly closed.
+    */
+   protected void finalize() throws IOException
+   {
+     if (fd != -1)
+       close();
+   }
+ 
+   public int read (ByteBuffer dst) throws IOException
+   {
+     int result;
+     byte[] buffer = new byte [dst.remaining ()];
+     
+     result = read (buffer, 0, buffer.length);
+ 
+     if (result > 0)
+       dst.put (buffer, 0, result);
+ 
+     return result;
+   }
+ 
+   public int read (ByteBuffer dst, long position)
+     throws IOException
+   {
+     if (position < 0)
+       throw new IllegalArgumentException ("position: " + position);
+     long oldPosition = implPosition ();
+     position (position);
+     int result = read(dst);
+     position (oldPosition);
+     
+     return result;
+   }
+ 
+   public native int read ()
+     throws IOException;
+ 
+   public native int read (byte[] buffer, int offset, int length)
+     throws IOException;
+ 
+   public long read (ByteBuffer[] dsts, int offset, int length)
+     throws IOException
+   {
+     long result = 0;
+ 
+     for (int i = offset; i < offset + length; i++)
+       {
+         result += read (dsts [i]);
+       }
+ 
+     return result;
+   }
+ 
+   public int write (ByteBuffer src) throws IOException
+   {
+     int len = src.remaining ();
+     if (src.hasArray())
+       {
+ 	byte[] buffer = src.array();
+ 	write(buffer, src.arrayOffset() + src.position(), len);
+ 	src.position(src.position() + len);
+       }
+     else
+       {
+ 	// Use a more efficient native method! FIXME!
+ 	byte[] buffer = new byte [len];
+     	src.get (buffer, 0, len);
+ 	write (buffer, 0, len);
+       }
+     return len;
+   }
+     
+   public int write (ByteBuffer src, long position)
+     throws IOException
+   {
+     if (position < 0)
+       throw new IllegalArgumentException ("position: " + position);
+ 
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+     
+     if ((mode & WRITE) == 0)
+        throw new NonWritableChannelException ();
+ 
+     int result;
+     long oldPosition;
+ 
+     oldPosition = implPosition ();
+     seek (position);
+     result = write(src);
+     seek (oldPosition);
+     
+     return result;
+   }
+ 
+   public native void write (byte[] buffer, int offset, int length)
+     throws IOException;
+   
+   public native void write (int b) throws IOException;
+ 
+   public long write(ByteBuffer[] srcs, int offset, int length)
+     throws IOException
+   {
+     long result = 0;
+ 
+     for (int i = offset;i < offset + length;i++)
+       {
+         result += write (srcs[i]);
+       }
+     
+     return result;
+   }
+ 				   
+   public native MappedByteBuffer mapImpl (char mode, long position, int size)
+     throws IOException;
+ 
+   public MappedByteBuffer map (FileChannel.MapMode mode,
+ 			       long position, long size)
+     throws IOException
+   {
+     char nmode = 0;
+     if (mode == MapMode.READ_ONLY)
+       {
+ 	nmode = 'r';
+ 	if ((this.mode & READ) == 0)
+ 	  throw new NonReadableChannelException();
+       }
+     else if (mode == MapMode.READ_WRITE || mode == MapMode.PRIVATE)
+       {
+ 	nmode = mode == MapMode.READ_WRITE ? '+' : 'c';
+ 	if ((this.mode & (READ|WRITE)) != (READ|WRITE))
+ 	  throw new NonWritableChannelException();
+       }
+     else
+       throw new IllegalArgumentException ("mode: " + mode);
+     
+     if (position < 0 || size < 0 || size > Integer.MAX_VALUE)
+       throw new IllegalArgumentException ("position: " + position
+ 					  + ", size: " + size);
+     return mapImpl(nmode, position, (int) size);
+   }
+ 
+   /**
+    * msync with the disk
+    */
+   public void force (boolean metaData) throws IOException
+   {
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+ 
+     force ();
+   }
+ 
+   private native void force ();
+ 
+   // like transferTo, but with a count of less than 2Gbytes
+   private int smallTransferTo (long position, int count, 
+ 			       WritableByteChannel target)
+     throws IOException
+   {
+     ByteBuffer buffer;
+     try
+       {
+ 	// Try to use a mapped buffer if we can.  If this fails for
+ 	// any reason we'll fall back to using a ByteBuffer.
+ 	buffer = map (MapMode.READ_ONLY, position, count);
+       }
+     catch (IOException e)
+       {
+ 	buffer = ByteBuffer.allocate (count);
+ 	read (buffer, position);
+ 	buffer.flip();
+       }
+ 
+     return target.write (buffer);
+   }
+ 
+   public long transferTo (long position, long count, 
+ 			  WritableByteChannel target)
+     throws IOException
+   {
+     if (position < 0
+         || count < 0)
+       throw new IllegalArgumentException ("position: " + position
+ 					  + ", count: " + count);
+ 
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+ 
+     if ((mode & READ) == 0)
+        throw new NonReadableChannelException ();
+    
+     final int pageSize = 65536;
+     long total = 0;
+ 
+     while (count > 0)
+       {
+ 	int transferred 
+ 	  = smallTransferTo (position, (int)Math.min (count, pageSize), 
+ 			     target);
+ 	if (transferred < 0)
+ 	  break;
+ 	total += transferred;
+ 	position += transferred;
+ 	count -= transferred;
+       }
+ 
+     return total;
+   }
+ 
+   // like transferFrom, but with a count of less than 2Gbytes
+   private int smallTransferFrom (ReadableByteChannel src, long position, 
+ 				 int count)
+     throws IOException
+   {
+     ByteBuffer buffer = null;
+ 
+     if (src instanceof FileChannel)
+       {
+ 	try
+ 	  {
+ 	    // Try to use a mapped buffer if we can.  If this fails
+ 	    // for any reason we'll fall back to using a ByteBuffer.
+ 	    buffer = ((FileChannel)src).map (MapMode.READ_ONLY, position, 
+ 					     count);
+ 	  }
+ 	catch (IOException e)
+ 	  {
+ 	  }
+       }
+ 
+     if (buffer == null)
+       {
+ 	buffer = ByteBuffer.allocate ((int) count);
+ 	src.read (buffer);
+ 	buffer.flip();
+       }
+ 
+     return write (buffer, position);
+   }
+ 
+   public long transferFrom (ReadableByteChannel src, long position, 
+ 			    long count)
+     throws IOException
+   {
+     if (position < 0
+         || count < 0)
+       throw new IllegalArgumentException ("position: " + position
+ 					  + ", count: " + count);
+ 
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+ 
+     if ((mode & WRITE) == 0)
+        throw new NonWritableChannelException ();
+ 
+     final int pageSize = 65536;
+     long total = 0;
+ 
+     while (count > 0)
+       {
+ 	int transferred = smallTransferFrom (src, position, 
+ 					     (int)Math.min (count, pageSize));
+ 	if (transferred < 0)
+ 	  break;
+ 	total += transferred;
+ 	position += transferred;
+ 	count -= transferred;
+       }
+ 
+     return total;
+   }
+ 
+   // Shared sanity checks between lock and tryLock methods.
+   private void lockCheck(long position, long size, boolean shared)
+     throws IOException
+   {
+     if (position < 0
+         || size < 0)
+       throw new IllegalArgumentException ("position: " + position
+ 					  + ", size: " + size);
+ 
+     if (!isOpen ())
+       throw new ClosedChannelException();
+ 
+     if (shared && ((mode & READ) == 0))
+       throw new NonReadableChannelException();
+ 	
+     if (!shared && ((mode & WRITE) == 0))
+       throw new NonWritableChannelException();
+   }
+ 
+   public FileLock tryLock (long position, long size, boolean shared)
+     throws IOException
+   {
+     lockCheck(position, size, shared);
+ 
+     boolean completed = false;
+     try
+       {
+ 	begin();
+ 	boolean lockable = lock(position, size, shared, false);
+ 	completed = true;
+ 	return (lockable
+ 		? new FileLockImpl(this, position, size, shared)
+ 		: null);
+       }
+     finally
+       {
+ 	end(completed);
+       }
+   }
+ 
+   /** Try to acquire a lock at the given position and size.
+    * On success return true.
+    * If wait as specified, block until we can get it.
+    * Otherwise return false.
+    */
+   private native boolean lock(long position, long size,
+ 			      boolean shared, boolean wait) throws IOException;
+   
+   public FileLock lock (long position, long size, boolean shared)
+     throws IOException
+   {
+     lockCheck(position, size, shared);
+ 
+     boolean completed = false;
+     try
+       {
+ 	boolean lockable = lock(position, size, shared, true);
+ 	completed = true;
+ 	return (lockable
+ 		? new FileLockImpl(this, position, size, shared)
+ 		: null);
+       }
+     finally
+       {
+ 	end(completed);
+       }
+   }
+ 
+   public long position ()
+     throws IOException
+   {
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+ 
+     return implPosition ();
+   }
+   
+   public FileChannel position (long newPosition)
+     throws IOException
+   {
+     if (newPosition < 0)
+       throw new IllegalArgumentException ("newPostition: " + newPosition);
+ 
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+ 
+     // FIXME note semantics if seeking beyond eof.
+     // We should seek lazily - only on a write.
+     seek (newPosition);
+     return this;
+   }
+   
+   public FileChannel truncate (long size)
+     throws IOException
+   {
+     if (size < 0)
+       throw new IllegalArgumentException ("size: " + size);
+ 
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+ 
+     if ((mode & WRITE) == 0)
+        throw new NonWritableChannelException ();
+ 
+     if (size < size ())
+       implTruncate (size);
+ 
+     return this;
+   }
+ 
+   public String toString()
+   {
+     return (this.getClass()
+ 	    + "[fd=" + fd
+ 	    + ",mode=" + mode + ","
+ 	    + description + "]");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/channels/package.html gcc-4.1.0/libjava/classpath/gnu/java/nio/channels/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/channels/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/channels/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.nio.channels package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.nio.channels</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ByteCharset.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ByteCharset.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ByteCharset.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ByteCharset.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,187 ----
+ /* ByteCharset.java -- Abstract class for generic 1-byte encodings.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ import java.nio.charset.CoderResult;
+ 
+ /**
+  * A generic encoding framework for single-byte encodings, 
+  * utilizing a look-up table.
+  * 
+  * This replaces the gnu.java.io.EncoderEightBitLookup class, 
+  * created by Aron Renn.
+  *
+  * @author Sven de Marothy
+  */
+ abstract class ByteCharset extends Charset
+ {
+   protected char[] lookupTable;
+     /**
+      * Char to signify the character in the table is undefined
+      */
+   protected static final char NONE = (char)0xFFFD;
+ 
+   ByteCharset (String canonicalName, String[] aliases)
+   {
+     super (canonicalName, aliases);
+   }
+ 
+   /**
+    * Most western charsets include ASCII, but this should
+    * be overloaded for others.
+    */
+   public boolean contains (Charset cs)
+   {
+     return cs instanceof US_ASCII || (cs.getClass() == getClass());
+   }
+ 
+   char[] getLookupTable()
+   {
+     return lookupTable;
+   }
+ 
+   public CharsetDecoder newDecoder ()
+   {
+     return new Decoder (this);
+   }
+ 
+   public CharsetEncoder newEncoder ()
+   {
+     return new Encoder (this);
+   }
+ 
+   private static final class Decoder extends CharsetDecoder
+   {
+     private char[] lookup;
+ 
+     // Package-private to avoid a trampoline constructor.
+     Decoder (ByteCharset cs)
+     {
+       super (cs, 1.0f, 1.0f);
+       lookup = cs.getLookupTable();
+     }
+ 
+     protected CoderResult decodeLoop (ByteBuffer in, CharBuffer out)
+     {
+       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+       while (in.hasRemaining ())
+       {
+         byte b = in.get ();
+ 	char c;
+ 
+         if (!out.hasRemaining ())
+           {
+             in.position (in.position () - 1);
+             return CoderResult.OVERFLOW;
+           }
+ 	
+ 	if((c = lookup[(int) (b & 0xFF)]) == NONE);
+ 	//	  return CoderResult.unmappableForLength (1);		
+         out.put (c);
+       }
+ 
+       return CoderResult.UNDERFLOW;
+     }
+   }
+ 
+   private static final class Encoder extends CharsetEncoder
+   {
+     private byte[] lookup;
+ 
+     // Package-private to avoid a trampoline constructor.
+     Encoder (ByteCharset cs)
+     {
+       super (cs, 1.0f, 1.0f);
+ 
+       char[] lookup_table = cs.getLookupTable();
+ 
+       // Create the inverse look-up table.
+       // determine required size of encoding_table: 
+       int max = 0; 
+       for (int i = 0; i < lookup_table.length; i++)
+ 	  {
+ 	      int c = (int)lookup_table[i]; 
+ 	      max = (c > max && c < NONE) ? c : max;
+ 	  }
+ 
+       lookup = new byte[max+1];
+       
+       for (int i = 0; i < lookup_table.length; i++)
+ 	  {
+ 	    int c = (int)lookup_table[i]; 
+ 	    if (c != 0 && c < NONE) 
+ 	      {
+ 		lookup[c] = (byte)i;
+ 	      }
+ 	  }
+     }
+ 
+     protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
+     {
+       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+       while (in.hasRemaining ())
+       {
+ 	int c = (int)in.get ();
+ 
+         if (!out.hasRemaining ())
+           {
+             in.position (in.position () - 1);
+             return CoderResult.OVERFLOW;
+           }
+ 
+ 	// lookup byte encoding
+ 	byte b = (c < lookup.length) ? lookup[c] : (byte)0;
+ 
+ 	if ((int)b != 0 || (int)c == 0)
+ 	    {
+ 		out.put (b);
+ 	    } else {
+ 		in.position (in.position () - 1);
+ 		return CoderResult.unmappableForLength (1);		
+ 	    }
+       }
+ 
+       return CoderResult.UNDERFLOW;
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp424.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp424.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp424.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp424.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* Cp424.java -- Charset implementation for the Cp424 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp424 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x009C, 0x0009, 0x0086, 0x007F, 
+ 	0x0097, 0x008D, 0x008E, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x009D, 0x0085, 0x0008, 0x0087, 
+ 	0x0018, 0x0019, 0x0092, 0x008F, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000A, 0x0017, 0x001B, 
+ 	0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x0005, 0x0006, 0x0007, 
+ 	0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, 
+ 	0x0098, 0x0099, 0x009A, 0x009B, 0x0014, 0x0015, 0x009E, 0x001A, 
+ 	0x0020, 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 
+ 	0x05D7, 0x05D8, 0x00A2, 0x002E, 0x003C, 0x0028, 0x002B, 0x007C, 
+ 	0x0026, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 
+ 	0x05E0, 0x05E1, 0x0021, 0x0024, 0x002A, 0x0029, 0x003B, 0x00AC, 
+ 	0x002D, 0x002F, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 
+ 	0x05E8, 0x05E9, 0x00A6, 0x002C, 0x0025, 0x005F, 0x003E, 0x003F, 
+ 	NONE,   0x05EA,   NONE,   NONE, 0x00A0,   NONE,   NONE,   NONE, 
+ 	0x2017, 0x0060, 0x003A, 0x0023, 0x0040, 0x0027, 0x003D, 0x0022, 
+ 	NONE,   0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x00AB, 0x00BB,   NONE,   NONE,   NONE, 0x00B1, 
+ 	0x00B0, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 
+ 	0x0071, 0x0072,   NONE,   NONE,   NONE, 0x00B8,   NONE, 0x00A4, 
+ 	0x00B5, 0x007E, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 
+ 	0x0079, 0x007A,   NONE,   NONE,   NONE,   NONE,   NONE, 0x00AE, 
+ 	0x005E, 0x00A3, 0x00A5, 0x00B7, 0x00A9, 0x00A7, 0x00B6, 0x00BC, 
+ 	0x00BD, 0x00BE, 0x005B, 0x005D, 0x00AF, 0x00A8, 0x00B4, 0x00D7, 
+ 	0x007B, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x00AD,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	0x007D, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 
+ 	0x0051, 0x0052, 0x00B9,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	0x005C, 0x00F7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 
+ 	0x0059, 0x005A, 0x00B2,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x00B3,   NONE,   NONE,   NONE,   NONE, 0x009F
+     };
+ 
+     public Cp424()
+     {
+ 	super("Cp424", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp424
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp437.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp437.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp437.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp437.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* Cp437.java -- Charset implementation for the Cp437 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp437 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 
+ 	0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, 
+ 	0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 
+ 	0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, 
+ 	0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 
+ 	0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 
+ 	0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 
+ 	0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 
+ 	0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 
+ 	0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 
+ 	0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, 
+ 	0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 
+ 	0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp437()
+     {
+ 	super("Cp437", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp437
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp737.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp737.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp737.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp737.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* Cp737.java -- Charset implementation for the Cp737 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp737 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 
+ 	0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 
+ 	0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 
+ 	0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 
+ 	0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 
+ 	0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 
+ 	0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 
+ 	0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 
+ 	0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 
+ 	0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, 
+ 	0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E, 
+ 	0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, 
+ 	0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp737()
+     {
+ 	super("Cp737", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp737
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp775.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp775.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp775.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp775.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* Cp775.java -- Charset implementation for the Cp775 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp775 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, 
+ 	0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5, 
+ 	0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, 
+ 	0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4, 
+ 	0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, 
+ 	0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, 
+ 	0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D, 
+ 	0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, 
+ 	0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 
+ 	0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, 
+ 	0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019, 
+ 	0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, 
+ 	0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp775()
+     {
+ 	super("Cp775", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp775
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp850.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp850.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp850.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp850.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* Cp850.java -- Charset implementation for the Cp850 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp850 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 
+ 	0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, 
+ 	0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 
+ 	0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, 
+ 	0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 
+ 	0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 
+ 	0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, 
+ 	0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, 
+ 	0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, 
+ 	0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 
+ 	0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, 
+ 	0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 
+ 	0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp850()
+     {
+ 	super("Cp850", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp850
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp852.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp852.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp852.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp852.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* Cp852.java -- Charset implementation for the Cp852 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp852 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, 
+ 	0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106, 
+ 	0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, 
+ 	0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D, 
+ 	0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, 
+ 	0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, 
+ 	0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, 
+ 	0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, 
+ 	0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580, 
+ 	0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, 
+ 	0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4, 
+ 	0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, 
+ 	0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0
+     };
+ 
+     public Cp852()
+     {
+ 	super("Cp852", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp852
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp855.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp855.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp855.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp855.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /* Cp855.java -- Charset implementation for the Cp855 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp855 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, 
+ 	0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408, 
+ 	0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, 
+ 	0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A, 
+ 	0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, 
+ 	0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, 
+ 	0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, 
+ 	0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, 
+ 	0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580, 
+ 	0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, 
+ 	0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116, 
+ 	0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, 
+ 	0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0
+     };
+ 
+     public Cp855()
+     {
+ 	super("Cp855", new String[] {
+ 	    "cp-855",
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp855
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp857.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp857.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp857.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp857.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Cp857.java -- Charset implementation for the Cp857 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp857 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 
+ 	0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5, 
+ 	0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 
+ 	0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F, 
+ 	0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, 
+ 	0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 
+ 	0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, 
+ 	0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8,   NONE, 0x00CD, 0x00CE, 
+ 	0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, 
+ 	0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5,   NONE, 
+ 	0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4, 
+ 	0x00AD, 0x00B1,   NONE, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 
+ 	0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp857()
+     {
+ 	super("Cp857", new String[] {
+ 	    "cp-857"
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp857
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp860.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp860.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp860.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp860.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Cp860.java -- Charset implementation for the Cp860 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp860 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, 
+ 	0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2, 
+ 	0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, 
+ 	0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3, 
+ 	0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 
+ 	0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 
+ 	0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 
+ 	0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 
+ 	0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 
+ 	0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 
+ 	0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, 
+ 	0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 
+ 	0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp860()
+     {
+ 	super("Cp860", new String[] {
+ 	    "cp-860"
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp860
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp861.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp861.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp861.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp861.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Cp861.java -- Charset implementation for the Cp861 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp861 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 
+ 	0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5, 
+ 	0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, 
+ 	0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, 
+ 	0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, 
+ 	0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 
+ 	0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 
+ 	0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 
+ 	0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 
+ 	0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 
+ 	0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, 
+ 	0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 
+ 	0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp861()
+     {
+ 	super("Cp861", new String[] {
+ 	    "cp-861"
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp861
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp862.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp862.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp862.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp862.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Cp862.java -- Charset implementation for the Cp862 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp862 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 
+ 	0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 
+ 	0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 
+ 	0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, 
+ 	0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 
+ 	0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 
+ 	0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 
+ 	0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 
+ 	0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 
+ 	0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 
+ 	0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, 
+ 	0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 
+ 	0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp862()
+     {
+ 	super("Cp862", new String[] {
+ 	    "Cp-862"
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp862
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp863.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp863.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp863.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp863.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Cp863.java -- Charset implementation for the Cp863 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp863 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, 
+ 	0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x2017, 0x00C0, 0x00A7, 
+ 	0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, 
+ 	0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192, 
+ 	0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00B8, 0x00B3, 0x00AF, 
+ 	0x00CE, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 
+ 	0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 
+ 	0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 
+ 	0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 
+ 	0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 
+ 	0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, 
+ 	0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 
+ 	0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp863()
+     {
+ 	super("Cp863", new String[] {
+ 	    "Cp-863"
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp863
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp864.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp864.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp864.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp864.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Cp864.java -- Charset implementation for the Cp864 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp864 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x066A, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, 
+ 	0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518, 
+ 	0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, 
+ 	0x00BB, 0xFEF7, 0xFEF8,   NONE,   NONE, 0xFEFB, 0xFEFC,   NONE, 
+ 	0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84,   NONE,   NONE, 
+ 	0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5, 
+ 	0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 
+ 	0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F, 
+ 	0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, 
+ 	0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9, 
+ 	0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, 
+ 	0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9, 
+ 	0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, 
+ 	0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1, 
+ 	0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, 
+ 	0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0,   NONE
+     };
+ 
+     public Cp864()
+     {
+ 	super("Cp864", new String[] {
+ 	    "Cp-864"
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp864
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp865.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp865.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp865.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp865.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Cp865.java -- Charset implementation for the Cp865 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp865 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 
+ 	0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, 
+ 	0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 
+ 	0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, 
+ 	0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 
+ 	0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 
+ 	0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 
+ 	0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 
+ 	0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 
+ 	0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 
+ 	0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, 
+ 	0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 
+ 	0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
+     };
+ 
+     public Cp865()
+     {
+ 	super("Cp865", new String[] {
+ 	    "Cp-865"
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp865
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp866.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp866.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp866.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp866.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Cp866.java -- Charset implementation for the Cp866 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp866 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 
+ 	0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 
+ 	0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 
+ 	0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 
+ 	0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 
+ 	0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 
+ 	0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 
+ 	0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 
+ 	0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 
+ 	0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 
+ 	0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 
+ 	0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, 
+ 	0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0
+     };
+ 
+     public Cp866()
+     {
+ 	super("Cp866", new String[] {
+ 	    "cp-866"
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp866
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp869.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp869.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp869.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp869.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* Cp869.java -- Charset implementation for the Cp869 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp869 extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 0x0386,   NONE, 
+ 	0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389, 
+ 	0x038A, 0x03AA, 0x038C,   NONE,   NONE, 0x038E, 0x03AB, 0x00A9, 
+ 	0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF, 
+ 	0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, 
+ 	0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB, 
+ 	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, 
+ 	0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510, 
+ 	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x03A0, 0x03A1, 
+ 	0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3, 
+ 	0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 
+ 	0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580, 
+ 	0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 
+ 	0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384, 
+ 	0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, 
+ 	0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0
+     };
+ 
+     public Cp869()
+     {
+ 	super("Cp869", new String[] {
+ 	    "Cp-869"
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp869
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp874.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp874.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Cp874.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Cp874.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* Cp874.java -- Charset implementation for the Cp874 character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class Cp874 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x20AC,   NONE,   NONE,   NONE,   NONE, 0x2026,   NONE,   NONE, 
+ 	NONE,     NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	NONE,   0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	NONE,     NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, 
+ 	0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F, 
+ 	0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, 
+ 	0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F, 
+ 	0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27, 
+ 	0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F, 
+ 	0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37, 
+ 	0x0E38, 0x0E39, 0x0E3A,   NONE,   NONE,   NONE,   NONE, 0x0E3F, 
+ 	0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47, 
+ 	0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F, 
+ 	0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, 
+ 	0x0E58, 0x0E59, 0x0E5A, 0x0E5B,   NONE,   NONE,   NONE,   NONE
+     };
+ 
+     public Cp874()
+     {
+ 	super("Cp874", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class Cp874
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/EncodingHelper.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/EncodingHelper.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/EncodingHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/EncodingHelper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,154 ----
+ /* EncodingHelper.java -- Useful character encoding methods.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.util.HashMap;
+ import java.nio.charset.IllegalCharsetNameException;
+ import java.nio.charset.UnsupportedCharsetException;
+ import java.nio.charset.Charset;
+ import java.io.UnsupportedEncodingException;
+ 
+ /**
+  * This class provides some useful utility methods 
+  * for charset encoding for the java.lang and java.io methods.
+  *
+  * @author Sven de Marothy
+  */
+ public class EncodingHelper
+ {
+ 
+     /**
+      * Contains the mapping from java.io canonical names 
+      * to java.nio canonical names.
+      */
+     private static HashMap canonicalNames;
+ 
+     static {
+ 	canonicalNames = new HashMap();
+ 	canonicalNames.put("US-ASCII", "ASCII");
+ 	canonicalNames.put("windows-1250", "Cp1250");
+ 	canonicalNames.put("windows-1251", "Cp1251");
+ 	canonicalNames.put("windows-1252", "Cp1252");
+ 	canonicalNames.put("windows-1253", "Cp1253");
+ 	canonicalNames.put("windows-1254", "Cp1254");
+ 	canonicalNames.put("windows-1257", "Cp1257");
+ 	canonicalNames.put("ISO-8859-1", "ISO8859_1");
+ 	canonicalNames.put("ISO-8859-2", "ISO8859_2");
+ 	canonicalNames.put("ISO-8859-4", "ISO8859_4");
+ 	canonicalNames.put("ISO-8859-5", "ISO8859_5");
+ 	canonicalNames.put("ISO-8859-7", "ISO8859_7");
+ 	canonicalNames.put("ISO-8859-9", "ISO8859_9");
+ 	canonicalNames.put("ISO-8859-13", "ISO8859_13");
+ 	canonicalNames.put("ISO-8859-15", "ISO8859_15");
+ 	canonicalNames.put("KOI8-R", "KOI8_R");
+ 	canonicalNames.put("UTF-8", "UTF8");
+ 	canonicalNames.put("UTF-16BE", "UnicodeBigUnmarked");
+ 	canonicalNames.put("UTF-16LE", "UnicodeLittleUnmarked");
+ 	canonicalNames.put("windows-1255", "Cp1255");
+ 	canonicalNames.put("windows-1256", "Cp1256");
+ 	canonicalNames.put("windows-1258", "Cp1258");
+ 	canonicalNames.put("ISO-8859-3", "ISO8859_3");
+ 	canonicalNames.put("ISO-8859-6", "ISO8859_6");
+ 	canonicalNames.put("ISO-8859-8", "ISO8859_8");
+     }
+ 
+     /**
+      * Returns the name of the default encoding, 
+      * falls back on defaults to Latin-1 if there's a problem.
+      */
+     public static String getDefaultEncoding()
+     {
+ 	String encoding;
+ 	try 
+ 	    {
+ 		return System.getProperty("file.encoding");
+ 	    } catch(SecurityException e) {
+ 	    } catch(IllegalArgumentException e) {
+ 	    }
+ 	// XXX - Throw an error here? For now, default to the 'safe' encoding.
+ 	return "8859_1";
+     }
+ 
+     /**
+      * Returns the java.io canonical name of a charset given with the 
+      * java.nio canonical name. If the charset does not have a java.io
+      * canonical name, the input string is returned.
+      */
+     public static String getOldCanonical(String newCanonical)
+     {
+ 	String oldCanonical = (String) canonicalNames.get(newCanonical);
+ 	return (oldCanonical != null)?oldCanonical : newCanonical;
+     }
+ 
+     public static boolean isISOLatin1(String s)
+     {
+ 	if(s.equals("ISO-8859-1") ||
+ 	   s.equals("8859_1") ||
+ 	   s.equals("ISO_8859-1") ||
+ 	   s.equals("latin1") ||
+ 	   s.equals("ISO8859_1") || 
+ 	   s.equals("ISO_8859_1"))
+ 	    return true;
+ 	return false;
+     }
+ 
+    /**
+     * Gets a charset, throwing the java.io exception and not 
+     * the java.nio exception if an error occurs.
+     */
+     public static Charset getCharset(String name) 
+ 	throws UnsupportedEncodingException
+     {
+      try 
+      {
+        return Charset.forName(name);
+      } 
+      catch(IllegalCharsetNameException e) 
+      {
+        throw new UnsupportedEncodingException("Charset "+name+" not found.");
+      } 
+      catch(UnsupportedCharsetException e) 
+      {
+        throw new UnsupportedEncodingException("Charset "+name+" not found.");
+      }
+    }
+ }
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,155 ----
+ /* ISO_8859_1.java -- 
+    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ import java.nio.charset.CoderResult;
+ 
+ /**
+  * ISO-8859-1 charset.
+  *
+  * @author Jesse Rosenstock
+  */
+ final class ISO_8859_1 extends Charset
+ {
+   ISO_8859_1 ()
+   {
+     /* Canonical charset name chosen according to:
+      * http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html
+      */
+     super ("ISO-8859-1", new String[] {
+         /* These names are provided by 
+          * http://www.iana.org/assignments/character-sets
+          */
+         "iso-ir-100",
+         "ISO_8859-1",
+         "latin1",
+         "l1",
+         "IBM819",
+         "CP819",
+         "csISOLatin1",
+         "8859_1",
+         /* These names are provided by
+          * http://oss.software.ibm.com/cgi-bin/icu/convexp?s=ALL
+          */
+         "ISO8859_1", "ISO_8859_1", "ibm-819", "ISO_8859-1:1987",
+         "819"
+         });
+ 
+   }
+ 
+   public boolean contains (Charset cs)
+   {
+     return cs instanceof US_ASCII || cs instanceof ISO_8859_1;
+   }
+ 
+   public CharsetDecoder newDecoder ()
+   {
+     return new Decoder (this);
+   }
+ 
+   public CharsetEncoder newEncoder ()
+   {
+     return new Encoder (this);
+   }
+ 
+   private static final class Decoder extends CharsetDecoder
+   {
+     // Package-private to avoid a trampoline constructor.
+     Decoder (Charset cs)
+     {
+       super (cs, 1.0f, 1.0f);
+     }
+ 
+     protected CoderResult decodeLoop (ByteBuffer in, CharBuffer out)
+     {
+       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+       while (in.hasRemaining ())
+       {
+         byte b = in.get ();
+ 
+         if (!out.hasRemaining ())
+           {
+             in.position (in.position () - 1);
+             return CoderResult.OVERFLOW;
+           }
+ 
+         out.put ((char) (b & 0xFF));
+       }
+ 
+       return CoderResult.UNDERFLOW;
+     }
+   }
+ 
+   private static final class Encoder extends CharsetEncoder
+   {
+     // Package-private to avoid a trampoline constructor.
+     Encoder (Charset cs)
+     {
+       super (cs, 1.0f, 1.0f);
+     }
+ 
+     protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
+     {
+       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+       while (in.hasRemaining ())
+       {
+         char c = in.get ();
+ 
+         if (c > 0xFF)
+           {
+             in.position (in.position () - 1);
+             return CoderResult.unmappableForLength (1);
+           }
+         if (!out.hasRemaining ())
+           {
+             in.position (in.position () - 1);
+             return CoderResult.OVERFLOW;
+           }
+ 
+         out.put ((byte) c);
+       }
+ 
+       return CoderResult.UNDERFLOW;
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_13.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_13.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_13.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_13.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /* ISO_8859_13.java -- Charset for ISO-8859-13 iso latin character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-13, ISO Latin-7 char set.
+  */
+ public class ISO_8859_13 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+       0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+       0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+       0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+       0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+       0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+       0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+       0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+       0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+       0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+       0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+       0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+       0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+       0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7, 
+       0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, 
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7, 
+       0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, 
+       0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, 
+       0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, 
+       0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, 
+       0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, 
+       0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, 
+       0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, 
+       0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, 
+       0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x2019
+     }; 
+ 
+   public ISO_8859_13()
+   {
+       super("ISO-8859-13", new String[] {
+ 	  "ISO8859_13", 
+ 	  "8859_13", 
+ 	  "ibm-921_P100-1995",
+ 	  "ibm-921", 
+ 	  "iso_8859_13",
+ 	  "iso8859_13", 
+ 	  "iso-8859-13",
+ 	  "8859_13", 
+ 	  "cp921",
+ 	  "921"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_13
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_15.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_15.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_15.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_15.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /* ISO_8859_15.java -- Charset for ISO-8859-15 iso latin character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-15, ISO Latin-9 char set.
+  */
+ public class ISO_8859_15 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+ 	0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+ 	0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+ 	0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+ 	0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, 
+ 	0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+ 	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, 
+ 	0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+ 	0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+ 	0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+ 	0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 
+ 	0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+ 	0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+ 	0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+ 	0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+     }; 
+ 
+   public ISO_8859_15()
+   {
+       super("ISO-8859-15", new String[] {
+ 	  "8859_15", 
+ 	  "iso8859_15", 
+ 	  "iso-8859-15", 
+ 	  "8859-15", 
+ 	  "latin9", 
+ 	  "iso_8859_15", 
+ 	  "ibm-923_P100-1998",
+ 	  "ibm-923", 
+ 	  "Latin-9", 
+ 	  "l9", 
+ 	  "latin0", 
+ 	  "csisolatin0", 
+ 	  "csisolatin9", 
+ 	  "iso8859_15_fdis", 
+ 	  "cp923", 
+ 	  "923", 
+ 	  "windows-28605"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_15
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_2.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_2.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_2.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,110 ----
+ /* ISO_8859_2.java -- Charset for ISO-8859-2 Character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-2, ISO Latin-2 char set.
+  */
+ public class ISO_8859_2 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    * Note: ranges 0-1F and 7f-97 aren't defined in the spec file aron used.
+    */
+     private static final char[]	lookup =
+     {
+       0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+       0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+       0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+       0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+       0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+       0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+       0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+       0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+       0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+       0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+       0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+       0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+       0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7,
+       0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
+       0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7,
+       0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
+       0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
+       0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
+       0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
+       0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
+       0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
+       0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
+       0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
+       0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
+     }; 
+ 
+   public ISO_8859_2()
+   {
+       super("ISO-8859-2", new String[] {
+ 	  "ISO8859_2",
+ 	  "8859_2", 
+ 	  "ibm-912_P100-1995",
+ 	  "ibm-912", 
+ 	  "iso_8859_2",
+ 	  "iso8859_2", 
+ 	  "iso-8859-2", 
+ 	  "ISO_8859-2:1987", 
+ 	  "latin2", 
+ 	  "csISOLatin2",
+ 	  "iso-ir-101",
+ 	  "l2", 
+ 	  "cp912",
+ 	  "912", 
+ 	  "windows-28592"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_2
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_3.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_3.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_3.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_3.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* ISO_8859_3.java -- Charset for ISO-8859-3 Character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-3, ISO Latin-3 char set.
+  */
+ public class ISO_8859_3 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+ 	0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+ 	0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+ 	0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+ 	0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4,   NONE, 0x0124, 0x00A7, 
+ 	0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD,   NONE, 0x017B, 
+ 	0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7, 
+ 	0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD,   NONE, 0x017C, 
+ 	0x00C0, 0x00C1, 0x00C2,   NONE, 0x00C4, 0x010A, 0x0108, 0x00C7, 
+ 	0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+ 	  NONE, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7, 
+ 	0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF, 
+ 	0x00E0, 0x00E1, 0x00E2,   NONE, 0x00E4, 0x010B, 0x0109, 0x00E7, 
+ 	0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+ 	  NONE, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7, 
+ 	0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9
+     }; 
+ 
+   public ISO_8859_3()
+   {
+       super("ISO-8859-3", new String[] {
+ 	  "ISO8859_3", 
+ 	  "8859_3", 
+ 	  "ibm-913_P100-2000",
+ 	  "ibm-913", 
+ 	  "iso_8859_3", 
+ 	  "iso8859_3", 
+ 	  "iso-8859-3", 
+ 	  "ISO_8859-3:1988", 
+ 	  "latin3", 
+ 	  "csISOLatin3", 
+ 	  "iso-ir-109", 
+ 	  "l3", 
+ 	  "cp913", 
+ 	  "913", 
+ 	  "windows-28593"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_3
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_4.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_4.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_4.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_4.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,110 ----
+ /* ISO_8859_4.java -- Charset for ISO-8859-4 Character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-4, ISO Latin-4 char set.
+  */
+ public class ISO_8859_4 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    * Note: ranges 0-1F and 7f-9f aren't defined in the spec file aron used.
+    */
+     private static final char[]	lookup =
+     {
+       0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+       0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+       0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+       0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+       0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+       0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+       0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+       0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+       0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+       0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+       0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+       0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+       0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7,
+       0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF,
+       0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7,
+       0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B,
+       0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E,
+       0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A,
+       0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+       0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF,
+       0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
+       0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B,
+       0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+       0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9
+     }; 
+ 
+   public ISO_8859_4()
+   {
+       super("ISO-8859-4", new String[] {
+ 	  "ISO8859_4",
+ 	  "8859_4",
+ 	  "ibm-914_P100-1995",
+ 	  "ibm-914",
+ 	  "iso_8859_4", 
+ 	  "iso8859_4", 
+ 	  "iso-8859-4",
+ 	  "latin4", 
+ 	  "csISOLatin4", 
+ 	  "iso-ir-110", 
+ 	  "ISO_8859-4:1988",
+ 	  "l4",
+ 	  "cp914",
+ 	  "914", 
+ 	  "windows-28594"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_4
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_5.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_5.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_5.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_5.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,108 ----
+ /* ISO_8859_5.java -- Charset for ISO-8859-5 cyrillic character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-5, ISO cyrillic char set.
+  */
+ public class ISO_8859_5 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+       0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+       0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+       0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+       0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+       0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+       0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+       0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+       0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+       0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+       0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+       0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+       0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+       0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 
+       0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, 
+       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 
+       0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 
+       0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 
+       0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 
+       0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 
+       0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 
+       0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 
+       0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 
+       0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 
+       0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F
+     }; 
+ 
+   public ISO_8859_5()
+   {
+       super("ISO-8859-5", new String[] {
+ 	  "ISO8859_5",
+ 	  "8859_5", 
+ 	  "ibm-915_P100-1995",
+ 	  "ibm-915", 
+ 	  "iso_8859_5",
+ 	  "iso8859_5", 
+ 	  "iso-8859-5",
+ 	  "cyrillic", 
+ 	  "csISOLatinCyrillic",
+ 	  "iso-ir-144",
+ 	  "ISO_8859-5:1988",
+ 	  "cp915", 
+ 	  "915", 
+ 	  "windows-28595"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_5
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_6.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_6.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_6.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_6.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,112 ----
+ /* ISO_8859_6.java -- Charset for ISO-8859-6 iso Arabic character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-6, ISO Arabic char set.
+  */
+ public class ISO_8859_6 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+ 	0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+ 	0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+ 	0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+ 	0x00A0,   NONE,   NONE,   NONE, 0x00A4,   NONE,   NONE,   NONE, 
+ 	  NONE,   NONE,   NONE,   NONE, 0x060C, 0x00AD,   NONE,   NONE, 
+ 	  NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	  NONE,   NONE,   NONE, 0x061B,   NONE,   NONE,   NONE, 0x061F, 
+ 	  NONE, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 
+ 	0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 
+ 	0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 
+ 	0x0638, 0x0639, 0x063A,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 
+ 	0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 
+ 	0x0650, 0x0651, 0x0652,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	  NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE
+     }; 
+ 
+   public ISO_8859_6()
+   {
+       super("ISO-8859-6", new String[] {
+ 	  "8859_6", 
+ 	  "ibm-1089_P100-1995",
+ 	  "ibm-1089", 
+ 	  "iso_8859_6", 
+ 	  "iso8859_6", 
+ 	  "iso-8859-6", 
+ 	  "arabic", 
+ 	  "csISOLatinArabic", 
+ 	  "iso-ir-127", 
+ 	  "ISO_8859-6:1987", 
+ 	  "ECMA-114", 
+ 	  "ASMO-708", 
+ 	  "8859_6", 
+ 	  "cp1089", 
+ 	  "1089", 
+ 	  "windows-28596", 
+ 	  "ISO-8859-6-I", 
+ 	  "ISO-8859-6-E"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_6
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_7.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_7.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_7.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_7.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /* ISO_8859_7.java -- Charset for ISO-8859-7 Character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-7, ISO Latin/Greek char set.
+  */
+ public class ISO_8859_7 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+       0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+       0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+       0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+       0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+       0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+       0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+       0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+       0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+       0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+       0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+       0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+       0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+       0x00A0, 0x02BD, 0x02BC, 0x00A3,   NONE,   NONE, 0x00A6, 0x00A7, 
+       0x00A8, 0x00A9,   NONE, 0x00AB, 0x00AC, 0x00AD,   NONE, 0x2015, 
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7, 
+       0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, 
+       0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 
+       0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 
+       0x03A0, 0x03A1,   NONE, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 
+       0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 
+       0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 
+       0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 
+       0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 
+       0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, NONE
+     }; 
+ 
+   public ISO_8859_7()
+   {
+       super("ISO-8859-7", new String[] {
+ 	  "ISO8859_7",
+ 	  "8859_7",
+ 	  "ibm-813_P100-1995",
+ 	  "ibm-813", 
+ 	  "iso_8859_7",
+ 	  "iso8859_7", 
+ 	  "iso-8859-7",
+ 	  "greek", 
+ 	  "greek8", 
+ 	  "ELOT_928", 
+ 	  "ECMA-118", 
+ 	  "csISOLatinGreek",
+ 	  "iso-ir-126", 
+ 	  "ISO_8859-7:1987", 
+ 	  "cp813",
+ 	  "813",
+ 	  "windows-28597"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_7
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_8.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_8.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_8.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_8.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,110 ----
+ /* ISO_8859_8.java -- Charset for ISO-8859-8 iso Hebrew character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-8, ISO Latin/Hebrew char set.
+  */
+ public class ISO_8859_8 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+ 	0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+ 	0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+ 	0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+ 	0x00A0,   NONE, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+ 	0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x203E, 
+ 	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE,   NONE, 
+ 	  NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	  NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	  NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	  NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 0x2017, 
+ 	0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 
+ 	0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 
+ 	0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 
+ 	0x05E8, 0x05E9, 0x05EA,   NONE,   NONE,   NONE,   NONE,   NONE
+    }; 
+ 
+   public ISO_8859_8()
+   {
+       super("ISO-8859-8", new String[] {
+ 	  "ISO8859_8",
+ 	  "8859_8",
+ 	  "ibm-916_P100-1995",
+ 	  "ibm-916",
+ 	  "iso_8859_8",
+ 	  "iso8859_8",
+ 	  "iso-8859-8",
+ 	  "hebrew",
+ 	  "csISOLatinHebrew",
+ 	  "iso-ir-138",
+ 	  "ISO_8859-8:1988",
+ 	  "ISO-8859-8-I",
+ 	  "ISO-8859-8-E",
+ 	  "cp916",
+ 	  "916",
+ 	  "windows-28598"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_8
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_9.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_9.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/ISO_8859_9.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/ISO_8859_9.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,110 ----
+ /* ISO_8859_9.java -- Charset for ISO-8859-9 iso latin character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for ISO-8859-9, ISO Latin-5 char set.
+  */
+ public class ISO_8859_9 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+       0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+       0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+       0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+       0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+       0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+       0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+       0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+       0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+       0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+       0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+       0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+       0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+       0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+       0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+       0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+       0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+       0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+       0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+       0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, 
+       0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+       0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+       0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+       0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
+     }; 
+ 
+   public ISO_8859_9()
+   {
+       super("ISO-8859-9", new String[] {
+ 	  "ISO8859_9",
+ 	  "8859_9",
+ 	  "ibm-920_P100-1995",
+ 	  "ibm-920",
+ 	  "iso8859_9", 
+ 	  "iso-8859-9",
+ 	  "iso_8859_9",
+ 	  "latin5", 
+ 	  "csISOLatin5", 
+ 	  "iso-ir-148", 
+ 	  "ISO_8859-9:1989",
+ 	  "l5", 
+ 	  "cp920", 
+ 	  "920", 
+ 	  "windows-28599",
+ 	  "ECMA-128"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class ISO_8859_9
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/KOI_8.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/KOI_8.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/KOI_8.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/KOI_8.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* KOI_8.java -- Charset for KOI-8 cyrillic character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for the KOI8 cyrillic char set.
+  */
+ public class KOI_8 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+       0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+       0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+       0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+       0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+       0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+       0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+       0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+       0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+       0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524,
+       0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590,
+       0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248,
+       0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7,
+       0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
+       0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E,
+       0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
+       0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9,
+       0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
+       0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
+       0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+       0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A,
+       0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+       0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
+       0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
+       0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A
+     }; 
+ 
+   public KOI_8()
+   {
+       super("KOI8-R", new String[] {
+ 	  "KOI8_R",
+ 	  "KOI8",
+ 	  "KOI-8",
+ 	  "KOI_8",
+ 	  "koi8-r", 
+ 	  "koi8r", 
+ 	  "koi-8-r",
+ 	  "koi"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class KOI_8
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MS874.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MS874.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MS874.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MS874.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MS874.java -- Charset implementation for the MS874 Thai character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MS874 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x20AC,   NONE,   NONE,   NONE,   NONE, 0x2026,   NONE,   NONE, 
+ 	NONE,     NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	NONE,   0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	NONE,     NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, 
+ 	0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F, 
+ 	0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, 
+ 	0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F, 
+ 	0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27, 
+ 	0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F, 
+ 	0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37, 
+ 	0x0E38, 0x0E39, 0x0E3A,   NONE,   NONE,   NONE,   NONE, 0x0E3F, 
+ 	0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47, 
+ 	0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F, 
+ 	0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, 
+ 	0x0E58, 0x0E59, 0x0E5A, 0x0E5B,   NONE,   NONE,   NONE,   NONE
+     };
+ 
+     public MS874()
+     {
+ 	super("MS874", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MS874
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacCentralEurope.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacCentralEurope.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacCentralEurope.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacCentralEurope.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacCentralEurope.java -- Charset implementation for the MacCentralEurope character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacCentralEurope extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E,   NONE, 
+ 	0x00C4, 0x0100, 0x0101, 0x00C9, 0x0104, 0x00D6, 0x00DC, 0x00E1, 
+ 	0x0105, 0x010C, 0x00E4, 0x010D, 0x0106, 0x0107, 0x00E9, 0x0179, 
+ 	0x017A, 0x010E, 0x00ED, 0x010F, 0x0112, 0x0113, 0x0116, 0x00F3, 
+ 	0x0117, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x011A, 0x011B, 0x00FC, 
+ 	0x2020, 0x00B0, 0x0118, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, 
+ 	0x00AE, 0x00A9, 0x2122, 0x0119, 0x00A8, 0x2260, 0x0123, 0x012E, 
+ 	0x012F, 0x012A, 0x2264, 0x2265, 0x012B, 0x0136, 0x2202, 0x2211, 
+ 	0x0142, 0x013B, 0x013C, 0x013D, 0x013E, 0x0139, 0x013A, 0x0145, 
+ 	0x0146, 0x0143, 0x00AC, 0x221A, 0x0144, 0x0147, 0x2206, 0x00AB, 
+ 	0x00BB, 0x2026, 0x00A0, 0x0148, 0x0150, 0x00D5, 0x0151, 0x014C, 
+ 	0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, 
+ 	0x014D, 0x0154, 0x0155, 0x0158, 0x2039, 0x203A, 0x0159, 0x0156, 
+ 	0x0157, 0x0160, 0x201A, 0x201E, 0x0161, 0x015A, 0x015B, 0x00C1, 
+ 	0x0164, 0x0165, 0x00CD, 0x017D, 0x017E, 0x016A, 0x00D3, 0x00D4, 
+ 	0x016B, 0x016E, 0x00DA, 0x016F, 0x0170, 0x0171, 0x0172, 0x0173, 
+ 	0x00DD, 0x00FD, 0x0137, 0x017B, 0x0141, 0x017C, 0x0122, 0x02C7
+ 	};
+ 
+     public MacCentralEurope()
+     {
+ 	super("MacCentralEurope", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacCentralEurope
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacCroatian.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacCroatian.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacCroatian.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacCroatian.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacCroatian.java -- Charset implementation for the MacCroatian character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacCroatian extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E,   NONE, 
+ 	0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, 
+ 	0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, 
+ 	0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, 
+ 	0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, 
+ 	0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, 
+ 	0x00AE, 0x0160, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x017D, 0x00D8, 
+ 	0x221E, 0x00B1, 0x2264, 0x2265, 0x2206, 0x00B5, 0x2202, 0x2211, 
+ 	0x220F, 0x0161, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x017E, 0x00F8, 
+ 	0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x0106, 0x00AB, 
+ 	0x010C, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, 
+ 	0x0110, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, 
+ 	0xF8FF, 0x00A9, 0x2044, 0x20AC, 0x2039, 0x203A, 0x00C6, 0x00BB, 
+ 	0x2013, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x0107, 0x00C1, 
+ 	0x010D, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, 
+ 	0x0111, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, 
+ 	0x00AF, 0x03C0, 0x00CB, 0x02DA, 0x00B8, 0x00CA, 0x00E6, 0x02C7
+     };
+ 
+     public MacCroatian()
+     {
+ 	super("MacCroatian", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacCroatian
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacCyrillic.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacCyrillic.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacCyrillic.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacCyrillic.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacCyrillic.java -- Charset implementation for the MacCyrillic character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacCyrillic extends ByteCharset
+ {
+ 
+     /**
+      * This is the lookup table for this encoding
+      */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E,   NONE, 
+ 	0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 
+ 	0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 
+ 	0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 
+ 	0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 
+ 	0x2020, 0x00B0, 0x0490, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x0406, 
+ 	0x00AE, 0x00A9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, 
+ 	0x221E, 0x00B1, 0x2264, 0x2265, 0x0456, 0x00B5, 0x0491, 0x0408, 
+ 	0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040A, 0x045A, 
+ 	0x0458, 0x0405, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, 
+ 	0x00BB, 0x2026, 0x00A0, 0x040B, 0x045B, 0x040C, 0x045C, 0x0455, 
+ 	0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x201E, 
+ 	0x040E, 0x045E, 0x040F, 0x045F, 0x2116, 0x0401, 0x0451, 0x044F, 
+ 	0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 
+ 	0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 
+ 	0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 
+ 	0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x20AC
+     };
+ 
+     public MacCyrillic()
+     {
+ 	super("MacCyrillic", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacCyrillic
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacDingbat.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacDingbat.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacDingbat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacDingbat.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacDingbat.java -- Charset implementation for the MacDingbat character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacDingbat extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x2701, 0x2702, 0x2703, 0x2704, 0x260E, 0x2706, 0x2707, 
+ 	0x2708, 0x2709, 0x261B, 0x261E, 0x270C, 0x270D, 0x270E, 0x270F, 
+ 	0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, 
+ 	0x2718, 0x2719, 0x271A, 0x271B, 0x271C, 0x271D, 0x271E, 0x271F, 
+ 	0x2720, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727, 
+ 	0x2605, 0x2729, 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, 
+ 	0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 
+ 	0x2738, 0x2739, 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, 
+ 	0x2740, 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 
+ 	0x2748, 0x2749, 0x274A, 0x274B, 0x25CF, 0x274D, 0x25A0, 0x274F, 
+ 	0x2750, 0x2751, 0x2752, 0x25B2, 0x25BC, 0x25C6, 0x2756, 0x25D7, 
+ 	0x2758, 0x2759, 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, NONE, 
+ 	0x2768, 0x2769, 0x276A, 0x276B, 0x276C, 0x276D, 0x276E, 0x276F, 
+ 	0x2770, 0x2771, 0x2772, 0x2773, 0x2774, 0x2775, NONE,   NONE, 
+ 	NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	NONE,   0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 
+ 	0x2663, 0x2666, 0x2665, 0x2660, 0x2460, 0x2461, 0x2462, 0x2463, 
+ 	0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2776, 0x2777, 
+ 	0x2778, 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x277F, 
+ 	0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787, 
+ 	0x2788, 0x2789, 0x278A, 0x278B, 0x278C, 0x278D, 0x278E, 0x278F, 
+ 	0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2192, 0x2194, 0x2195, 
+ 	0x2798, 0x2799, 0x279A, 0x279B, 0x279C, 0x279D, 0x279E, 0x279F, 
+ 	0x27A0, 0x27A1, 0x27A2, 0x27A3, 0x27A4, 0x27A5, 0x27A6, 0x27A7, 
+ 	0x27A8, 0x27A9, 0x27AA, 0x27AB, 0x27AC, 0x27AD, 0x27AE, 0x27AF, 
+ 	  NONE, 0x27B1, 0x27B2, 0x27B3, 0x27B4, 0x27B5, 0x27B6, 0x27B7, 
+ 	0x27B8, 0x27B9, 0x27BA, 0x27BB, 0x27BC, 0x27BD, 0x27BE, NONE
+     };
+ 
+     public MacDingbat()
+     {
+ 	super("MacDingbat", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacDingbat
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacGreek.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacGreek.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacGreek.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacGreek.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacGreek.java -- Charset implementation for the MacGreek character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacGreek extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E,   NONE, 
+ 	0x00C4, 0x00B9, 0x00B2, 0x00C9, 0x00B3, 0x00D6, 0x00DC, 0x0385, 
+ 	0x00E0, 0x00E2, 0x00E4, 0x0384, 0x00A8, 0x00E7, 0x00E9, 0x00E8, 
+ 	0x00EA, 0x00EB, 0x00A3, 0x2122, 0x00EE, 0x00EF, 0x2022, 0x00BD, 
+ 	0x2030, 0x00F4, 0x00F6, 0x00A6, 0x20AC, 0x00F9, 0x00FB, 0x00FC, 
+ 	0x2020, 0x0393, 0x0394, 0x0398, 0x039B, 0x039E, 0x03A0, 0x00DF, 
+ 	0x00AE, 0x00A9, 0x03A3, 0x03AA, 0x00A7, 0x2260, 0x00B0, 0x00B7, 
+ 	0x0391, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x0392, 0x0395, 0x0396, 
+ 	0x0397, 0x0399, 0x039A, 0x039C, 0x03A6, 0x03AB, 0x03A8, 0x03A9, 
+ 	0x03AC, 0x039D, 0x00AC, 0x039F, 0x03A1, 0x2248, 0x03A4, 0x00AB, 
+ 	0x00BB, 0x2026, 0x00A0, 0x03A5, 0x03A7, 0x0386, 0x0388, 0x0153, 
+ 	0x2013, 0x2015, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x0389, 
+ 	0x038A, 0x038C, 0x038E, 0x03AD, 0x03AE, 0x03AF, 0x03CC, 0x038F, 
+ 	0x03CD, 0x03B1, 0x03B2, 0x03C8, 0x03B4, 0x03B5, 0x03C6, 0x03B3, 
+ 	0x03B7, 0x03B9, 0x03BE, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BF, 
+ 	0x03C0, 0x03CE, 0x03C1, 0x03C3, 0x03C4, 0x03B8, 0x03C9, 0x03C2, 
+ 	0x03C7, 0x03C5, 0x03B6, 0x03CA, 0x03CB, 0x0390, 0x03B0, 0x00AD
+     };
+ 
+     public MacGreek()
+     {
+ 	super("MacGreek", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacGreek
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacIceland.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacIceland.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacIceland.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacIceland.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacIceland.java -- Charset implementation for the MacIceland character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacIceland extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E,   NONE, 
+ 	0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, 
+ 	0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, 
+ 	0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, 
+ 	0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, 
+ 	0x00DD, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, 
+ 	0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, 
+ 	0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, 
+ 	0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, 
+ 	0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, 
+ 	0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, 
+ 	0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, 
+ 	0x00FF, 0x0178, 0x2044, 0x20AC, 0x00D0, 0x00F0, 0x00DE, 0x00FE, 
+ 	0x00FD, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, 
+ 	0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, 
+ 	0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, 
+ 	0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7
+     };
+ 
+     public MacIceland()
+     {
+ 	super("MacIceland", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacIceland
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacRoman.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacRoman.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacRoman.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacRoman.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacRoman.java -- Charset implementation for the MacRoman character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacRoman extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E,   NONE, 
+ 	0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, 
+ 	0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, 
+ 	0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, 
+ 	0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, 
+ 	0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, 
+ 	0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, 
+ 	0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, 
+ 	0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, 
+ 	0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, 
+ 	0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, 
+ 	0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, 
+ 	0x00FF, 0x0178, 0x2044, 0x20AC, 0x2039, 0x203A, 0xFB01, 0xFB02, 
+ 	0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, 
+ 	0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, 
+ 	0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, 
+ 	0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7
+     };
+ 
+     public MacRoman()
+     {
+ 	super("MacRoman", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacRoman
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacRomania.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacRomania.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacRomania.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacRomania.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacRomania.java -- Charset implementation for the MacRomania character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacRomania extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E,   NONE, 
+ 	0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, 
+ 	0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, 
+ 	0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, 
+ 	0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, 
+ 	0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, 
+ 	0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x0102, 0x0218, 
+ 	0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, 
+ 	0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x0103, 0x0219, 
+ 	0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, 
+ 	0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, 
+ 	0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, 
+ 	0x00FF, 0x0178, 0x2044, 0x20AC, 0x2039, 0x203A, 0x021A, 0x021B, 
+ 	0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, 
+ 	0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, 
+ 	0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, 
+ 	0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7
+     };
+ 
+     public MacRomania()
+     {
+ 	super("MacRomania", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacRomania
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacSymbol.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacSymbol.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacSymbol.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacSymbol.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacSymbol.java -- Charset implementation for the MacSymbol character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacSymbol extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x2200, 0x0023, 0x2203, 0x0025, 0x0026, 0x220D, 
+ 	0x0028, 0x0029, 0x2217, 0x002B, 0x002C, 0x2212, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x2245, 0x0391, 0x0392, 0x03A7, 0x0394, 0x0395, 0x03A6, 0x0393, 
+ 	0x0397, 0x0399, 0x03D1, 0x039A, 0x039B, 0x039C, 0x039D, 0x039F, 
+ 	0x03A0, 0x0398, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03C2, 0x03A9, 
+ 	0x039E, 0x03A8, 0x0396, 0x005B, 0x2234, 0x005D, 0x22A5, 0x005F, 
+ 	0xF8E5, 0x03B1, 0x03B2, 0x03C7, 0x03B4, 0x03B5, 0x03C6, 0x03B3, 
+ 	0x03B7, 0x03B9, 0x03D5, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BF, 
+ 	0x03C0, 0x03B8, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03D6, 0x03C9, 
+ 	0x03BE, 0x03C8, 0x03B6, 0x007B, 0x007C, 0x007D, 0x223C, NONE, 
+ 	NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	0x20AC, 0x03D2, 0x2032, 0x2264, 0x2044, 0x221E, 0x0192, 0x2663, 
+ 	0x2666, 0x2665, 0x2660, 0x2194, 0x2190, 0x2191, 0x2192, 0x2193, 
+ 	0x00B0, 0x00B1, 0x2033, 0x2265, 0x00D7, 0x221D, 0x2202, 0x2022, 
+ 	0x00F7, 0x2260, 0x2261, 0x2248, 0x2026, 0xF8E6, 0x23AF, 0x21B5, 
+ 	0x2135, 0x2111, 0x211C, 0x2118, 0x2297, 0x2295, 0x2205, 0x2229, 
+ 	0x222A, 0x2283, 0x2287, 0x2284, 0x2282, 0x2286, 0x2208, 0x2209, 
+ 	0x2220, 0x2207, 0x00AE, 0x00A9, 0x2122, 0x220F, 0x221A, 0x22C5, 
+ 	0x00AC, 0x2227, 0x2228, 0x21D4, 0x21D0, 0x21D1, 0x21D2, 0x21D3, 
+ 	0x22C4, 0x3008,   NONE,   NONE,   NONE, 0x2211, 0x239B, 0x239C, 
+ 	0x239D, 0x23A1, 0x23A2, 0x23A3, 0x23A7, 0x23A8, 0x23A9, 0x23AA, 
+ 	0xF8FF, 0x3009, 0x222B, 0x2320, 0x23AE, 0x2321, 0x239E, 0x239F, 
+ 	0x23A0, 0x23A4, 0x23A5, 0x23A6, 0x23AB, 0x23AC, 0x23AD, NONE
+     };
+ 
+     public MacSymbol()
+     {
+ 	super("MacSymbol", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacSymbol
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacThai.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacThai.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacThai.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacThai.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacThai.java -- Charset implementation for the MacThai character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacThai extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, NONE, 
+ 	0x00AB, 0x00BB, 0x2026, NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	NONE,   NONE,   NONE,   NONE,   NONE,   0x201C, 0x201D, NONE, 
+ 	NONE,   0x2022, NONE,   NONE,   NONE,   NONE,   NONE,   NONE, 
+ 	NONE,   NONE,   NONE,   NONE,   NONE,   0x2018, 0x2019, NONE, 
+ 	0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, 
+ 	0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F, 
+ 	0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, 
+ 	0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F, 
+ 	0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27, 
+ 	0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F, 
+ 	0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37, 
+ 	0x0E38, 0x0E39, 0x0E3A, 0x2060, 0x200B, 0x2013, 0x2014, 0x0E3F, 
+ 	0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47, 
+ 	0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x2122, 0x0E4F, 
+ 	0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, 
+ 	0x0E58, 0x0E59, 0x00AE, 0x00A9, NONE,   NONE,   NONE,   NONE
+     };
+ 
+     public MacThai()
+     {
+ 	super("MacThai", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacThai
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacTurkish.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacTurkish.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/MacTurkish.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/MacTurkish.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* MacTurkish.java -- Charset implementation for the MacTurkish character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ public class MacTurkish extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E,   NONE, 
+ 	0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, 
+ 	0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, 
+ 	0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, 
+ 	0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, 
+ 	0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, 
+ 	0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, 
+ 	0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, 
+ 	0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, 
+ 	0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, 
+ 	0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, 
+ 	0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, 
+ 	0x00FF, 0x0178, 0x011E, 0x011F, 0x0130, 0x0131, 0x015E, 0x015F, 
+ 	0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, 
+ 	0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, 
+ 	0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0xF8A0, 0x02C6, 0x02DC, 
+ 	0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7
+     };
+ 
+     public MacTurkish()
+     {
+ 	super("MacTurkish", new String[] {
+ 	});
+ 	lookupTable = lookup;
+     }
+ 
+ } // class MacTurkish
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Provider.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Provider.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Provider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Provider.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,239 ----
+ /* Provider.java -- 
+    Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.charset.Charset;
+ import java.nio.charset.spi.CharsetProvider;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ 
+ /**
+  * Charset provider for the required charsets.  Used by
+  * {@link Charset#charsetForName} and * {@link Charset#availableCharsets}.
+  *
+  * @author Jesse Rosenstock
+  * @author Robert Schuster (thebohemian@gmx.net)
+  * @see Charset
+  */
+ public final class Provider extends CharsetProvider
+ {
+   private static Provider singleton;
+ 
+   static
+   {
+     synchronized (Provider.class)
+       {
+         singleton = null;
+       }
+   }
+ 
+   /**
+    * Map from charset name to charset canonical name. The strings
+    * are all lower-case to allow case-insensitive retrieval of
+    * Charset instances. 
+    */
+   private final HashMap canonicalNames;
+ 
+   /**
+    * Map from lower-case canonical name to Charset.
+    * TODO: We may want to use soft references.  We would then need to keep
+    * track of the class name to regenerate the object.
+    */
+   private final HashMap charsets;
+ 
+   /**
+    * We don't load all available charsets at the start
+    */
+   private boolean extendedLoaded;
+ 
+   private Provider ()
+   {
+     extendedLoaded = false;
+     canonicalNames = new HashMap ();
+     charsets = new HashMap ();
+ 
+     // US-ASCII aka ISO646-US
+     addCharset (new US_ASCII ());
+ 
+     // ISO-8859-1 aka ISO-LATIN-1
+     addCharset (new ISO_8859_1 ());
+ 
+     // UTF-8
+     addCharset (new UTF_8 ());
+ 
+     // UTF-16BE
+     addCharset (new UTF_16BE ());
+ 
+     // UTF-16LE
+     addCharset (new UTF_16LE ());
+ 
+     // UTF-16
+     addCharset (new UTF_16 ());
+ 
+     // UTF-16LE (marked)
+     addCharset (new UnicodeLittle ());
+ 
+     // Windows-1250 aka cp-1250 (East European)
+     addCharset (new Windows1250 ());
+ 
+     // Windows-1251 (Cyrillic)
+     addCharset (new Windows1251 ());
+ 
+     // Windows-1252 aka cp-1252 (Latin-1)
+     addCharset (new Windows1252 ());
+ 
+     // Windows-1253 (Greek)
+     addCharset (new Windows1253 ());
+ 
+     // Windows-1254 (Turkish)
+     addCharset (new Windows1254 ());
+ 
+     // Windows-1257 (Baltic)
+     addCharset (new Windows1257 ());
+ 
+     // ISO-8859-2 aka ISO-LATIN-2
+     addCharset (new ISO_8859_2 ());
+ 
+     // ISO-8859-4 aka ISO-LATIN-4
+     addCharset (new ISO_8859_4 ());
+ 
+     // ISO-8859-5 (Cyrillic)
+     addCharset (new ISO_8859_5 ());
+ 
+     // ISO-8859-7 (Greek)
+     addCharset (new ISO_8859_7 ());
+ 
+     // ISO-8859-9 aka ISO-LATIN-5
+     addCharset (new ISO_8859_9 ());
+ 
+     // ISO-8859-13 aka ISO-LATIN-7
+     addCharset (new ISO_8859_13 ());
+ 
+     // ISO-8859-15 aka ISO-LATIN-9
+     addCharset (new ISO_8859_15 ());
+ 
+     // KOI8 (Cyrillic)
+     addCharset (new KOI_8 ());
+   }
+ 
+  /**
+   * Load non-mandatory charsets.
+   */
+   private void loadExtended ()
+   {
+     if(extendedLoaded)
+       return;
+ 
+     addCharset (new ISO_8859_3 ());    // ISO-8859-3 aka ISO-LATIN-3
+     addCharset (new ISO_8859_6 ());    // ISO-8859-6 (Arabic)
+     addCharset (new ISO_8859_8 ());    // ISO-8859-8 (Hebrew)
+ 
+     // Some more codepages
+     addCharset (new Cp855()); // IBM Cyrillic
+     addCharset (new Cp857()); // IBM Turkish
+     addCharset (new Cp860()); // MSDOS Portugese
+     addCharset (new Cp861()); // MSDOS Icelandic
+     addCharset (new Cp862()); // PC Hebrew
+     addCharset (new Cp863()); // MSDOS Can. French
+     addCharset (new Cp864()); // PC Arabic
+     addCharset (new Cp865()); // MSDOS Nordic
+     addCharset (new Cp866()); // MSDOS Russian
+     addCharset (new Cp869()); // IBM modern Greek
+     addCharset (new Cp874()); // IBM Thai
+     extendedLoaded = true;
+   }
+ 
+   public Iterator charsets ()
+   {
+     loadExtended();
+     return Collections.unmodifiableCollection (charsets.values ())
+                       .iterator ();
+   }
+ 
+   /**
+    * Returns a Charset instance by converting the given
+    * name to lower-case, looking up the canonical charset
+    * name and finally looking up the Charset with that name.
+    * 
+    * <p>The lookup is therefore case-insensitive.</p>
+    * 
+    *  @returns The Charset having <code>charsetName</code>
+    *  as its alias or null if no such Charset exist.
+    */
+   public Charset charsetForName (String charsetName)
+   {
+     Charset cs = (Charset) charsets.get(canonicalNames.get(charsetName.toLowerCase()));
+     if(cs == null && !extendedLoaded)
+      {
+        loadExtended();
+        cs = (Charset) charsets.get(canonicalNames.get(charsetName.toLowerCase()));
+      }
+     return cs;
+   }
+ 
+   /**
+    * Puts a Charset under its canonical name into the 'charsets' map.
+    * Then puts a mapping from all its alias names to the canonical name.
+    * 
+    * <p>All names are converted to lower-case</p>.
+    * 
+    * @param cs
+    */
+   private void addCharset (Charset cs)
+   {
+     String canonicalName = cs.name().toLowerCase();
+     charsets.put (canonicalName, cs);
+     
+     /* Adds a mapping between the canonical name
+      * itself making a lookup using that name
+      * no special case.
+      */  
+     canonicalNames.put(canonicalName, canonicalName);
+ 
+     for (Iterator i = cs.aliases ().iterator (); i.hasNext (); )
+       canonicalNames.put (((String) i.next()).toLowerCase(), canonicalName);
+   }
+ 
+   public static synchronized Provider provider ()
+   {
+     if (singleton == null)
+       singleton = new Provider ();
+     return singleton;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/US_ASCII.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/US_ASCII.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/US_ASCII.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/US_ASCII.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,161 ----
+ /* US_ASCII.java -- 
+    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ import java.nio.charset.CoderResult;
+ 
+ /**
+  * US-ASCII charset.
+  *
+  * @author Jesse Rosenstock
+  */
+ final class US_ASCII extends Charset
+ {
+   US_ASCII ()
+   {
+     /* Canonical charset name chosen according to:
+      * http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html
+      */
+     super ("US-ASCII", new String[] {
+         /* These names are provided by 
+          * http://www.iana.org/assignments/character-sets
+          */
+         "iso-ir-6",
+         "ANSI_X3.4-1986",
+         "ISO_646.irv:1991",
+         "ASCII",
+         "ISO646-US",
+         "ASCII",
+         "us",
+         "IBM367",
+         "cp367",
+         "csASCII",
+         /* These names are provided by
+          * http://oss.software.ibm.com/cgi-bin/icu/convexp?s=ALL
+          */
+         "ANSI_X3.4-1968", "iso_646.irv:1983", "ascii7", "646",
+         "windows-20127"
+         });
+   }
+ 
+   public boolean contains (Charset cs)
+   {
+     return cs instanceof US_ASCII;
+   }
+ 
+   public CharsetDecoder newDecoder ()
+   {
+     return new Decoder (this);
+   }
+ 
+   public CharsetEncoder newEncoder ()
+   {
+     return new Encoder (this);
+   }
+ 
+   private static final class Decoder extends CharsetDecoder
+   {
+     // Package-private to avoid a trampoline constructor.
+     Decoder (Charset cs)
+     {
+       super (cs, 1.0f, 1.0f);
+     }
+ 
+     protected CoderResult decodeLoop (ByteBuffer in, CharBuffer out)
+     {
+       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+       while (in.hasRemaining ())
+         {
+           byte b = in.get ();
+ 
+           if (b < 0)
+             {
+               in.position (in.position () - 1);
+               return CoderResult.malformedForLength (1);
+             }
+           if (!out.hasRemaining ())
+             {
+               in.position (in.position () - 1);
+               return CoderResult.OVERFLOW;
+             }
+ 
+           out.put ((char) b);
+         }
+ 
+       return CoderResult.UNDERFLOW;
+     }
+   }
+ 
+   private static final class Encoder extends CharsetEncoder
+   {
+     // Package-private to avoid a trampoline constructor.
+     Encoder (Charset cs)
+     {
+       super (cs, 1.0f, 1.0f);
+     }
+ 
+     protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
+     {
+       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+       while (in.hasRemaining ())
+       {
+         char c = in.get ();
+ 
+         if (c > Byte.MAX_VALUE)
+           {
+             in.position (in.position () - 1);
+             return CoderResult.unmappableForLength (1);
+           }
+         if (!out.hasRemaining ())
+           {
+             in.position (in.position () - 1);
+             return CoderResult.OVERFLOW;
+           }
+ 
+         out.put ((byte) c);
+       }
+ 
+       return CoderResult.UNDERFLOW;
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,80 ----
+ /* UTF_16.java -- 
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ 
+ /**
+  * UTF-16 charset.
+  *
+  * @author Jesse Rosenstock
+  */
+ final class UTF_16 extends Charset
+ {
+   UTF_16 ()
+   {
+     super ("UTF-16", new String[] {
+         // witnessed by the internet
+         "UTF16",
+         /* These names are provided by
+          * http://oss.software.ibm.com/cgi-bin/icu/convexp?s=ALL
+          */
+         "ISO-10646-UCS-2", "unicode", "csUnicode", "ucs-2", "UnicodeBig"
+     });
+   }
+ 
+   public boolean contains (Charset cs)
+   {
+     return cs instanceof US_ASCII || cs instanceof ISO_8859_1
+       || cs instanceof UTF_8 || cs instanceof UTF_16BE
+       || cs instanceof UTF_16LE || cs instanceof UTF_16;
+   }
+ 
+   public CharsetDecoder newDecoder ()
+   {
+     return new UTF_16Decoder (this, UTF_16Decoder.UNKNOWN_ENDIAN);
+   }
+ 
+   public CharsetEncoder newEncoder ()
+   {
+     return new UTF_16Encoder (this, UTF_16Encoder.BIG_ENDIAN, true);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16BE.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16BE.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16BE.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16BE.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,84 ----
+ /* UTF_16BE.java -- 
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ 
+ /**
+  * UTF-16BE charset.
+  *
+  * @author Jesse Rosenstock
+  */
+ final class UTF_16BE extends Charset
+ {
+   UTF_16BE ()
+   {
+     super ("UTF-16BE",  new String[] {
+         // witnessed by the internet
+         "UTF16BE",
+         /* These names are provided by
+          * http://oss.software.ibm.com/cgi-bin/icu/convexp?s=ALL
+          */
+         "x-utf-16be", "ibm-1200", "ibm-1201", "ibm-5297",
+         "ibm-13488", "ibm-17584", "windows-1201", "cp1200", "cp1201",
+         "UTF16_BigEndian",
+         // see http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html
+         "UnicodeBigUnmarked"
+     });
+   }
+ 
+   public boolean contains (Charset cs)
+   {
+     return cs instanceof US_ASCII || cs instanceof ISO_8859_1
+       || cs instanceof UTF_8 || cs instanceof UTF_16BE
+       || cs instanceof UTF_16LE || cs instanceof UTF_16;
+   }
+ 
+   public CharsetDecoder newDecoder ()
+   {
+     return new UTF_16Decoder (this, UTF_16Decoder.BIG_ENDIAN);
+   }
+ 
+   public CharsetEncoder newEncoder ()
+   {
+     return new UTF_16Encoder (this, UTF_16Encoder.BIG_ENDIAN, false);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16Decoder.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16Decoder.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16Decoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16Decoder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,167 ----
+ /* UTF_16Decoder.java -- 
+    Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CoderResult;
+ 
+ /**
+  * Decoder for UTF-16, UTF-15LE, and UTF-16BE.
+  *
+  * @author Jesse Rosenstock
+  */
+ final class UTF_16Decoder extends CharsetDecoder
+ {
+   // byte orders
+   static final int BIG_ENDIAN = 0;
+   static final int LITTLE_ENDIAN = 1;
+   static final int UNKNOWN_ENDIAN = 2;
+   static final int MAYBE_BIG_ENDIAN = 3;
+   static final int MAYBE_LITTLE_ENDIAN = 4;
+ 
+   private static final char BYTE_ORDER_MARK = 0xFEFF;
+   private static final char REVERSED_BYTE_ORDER_MARK = 0xFFFE;
+ 
+   private final int originalByteOrder;
+   private int byteOrder;
+ 
+   UTF_16Decoder (Charset cs, int byteOrder)
+   {
+     super (cs, 0.5f, 1.0f);
+     this.originalByteOrder = byteOrder;
+     this.byteOrder = byteOrder;
+   }
+ 
+   protected CoderResult decodeLoop (ByteBuffer in, CharBuffer out)
+   {
+     // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+ 
+     int inPos = in.position ();
+     try
+       {
+         while (in.remaining () >= 2)
+           {
+             byte b1 = in.get ();
+             byte b2 = in.get ();
+ 
+             // handle byte order mark
+             if (byteOrder == UNKNOWN_ENDIAN ||
+                 byteOrder == MAYBE_BIG_ENDIAN ||
+                 byteOrder == MAYBE_LITTLE_ENDIAN)
+               {
+                 char c = (char) (((b1 & 0xFF) << 8) | (b2 & 0xFF));
+                 if (c == BYTE_ORDER_MARK)
+                   {
+                     if (byteOrder == MAYBE_LITTLE_ENDIAN)
+                       {
+                         return CoderResult.malformedForLength (2);
+                       }
+                     byteOrder = BIG_ENDIAN;
+                     inPos += 2;
+                     continue;
+                   }
+                 else if (c == REVERSED_BYTE_ORDER_MARK)
+                   {
+                     if (byteOrder == MAYBE_BIG_ENDIAN)
+                       {
+                         return CoderResult.malformedForLength (2);
+                       }
+                     byteOrder = LITTLE_ENDIAN;
+                     inPos += 2;
+                     continue;
+                   }
+                 else
+                   {
+                     // assume big or little endian, do not consume bytes,
+                     // continue with normal processing
+                     byteOrder = (byteOrder == MAYBE_LITTLE_ENDIAN ?
+                                  LITTLE_ENDIAN : BIG_ENDIAN);
+                   }
+               }
+ 
+ 	    // FIXME: Change so you only do a single comparison here.
+             char c = (byteOrder == BIG_ENDIAN
+ 		      ? (char) (((b1 & 0xFF) << 8) | (b2 & 0xFF))
+ 		      : (char) (((b2 & 0xFF) << 8) | (b1 & 0xFF)));
+ 
+             if (0xD800 <= c && c <= 0xDFFF)
+               {
+                 // c is a surrogate
+                 
+                 // make sure c is a high surrogate
+                 if (c > 0xDBFF)
+                   return CoderResult.malformedForLength (2);
+                 if (in.remaining () < 2)
+                   return CoderResult.UNDERFLOW;
+                 byte b3 = in.get ();
+                 byte b4 = in.get ();
+                 char d = (byteOrder == BIG_ENDIAN
+ 			  ? (char) (((b3 & 0xFF) << 8) | (b4 & 0xFF))
+ 			  : (char) (((b4 & 0xFF) << 8) | (b3 & 0xFF)));
+                 // make sure d is a low surrogate
+                 if (d < 0xDC00 || d > 0xDFFF)
+                   return CoderResult.malformedForLength (2);
+                 out.put (c);
+                 out.put (d);
+                 inPos += 4;
+               }
+             else
+               {
+                 if (!out.hasRemaining ())
+                   return CoderResult.UNDERFLOW;
+                 out.put (c);
+                 inPos += 2;
+               }
+           }
+ 
+         return CoderResult.UNDERFLOW;
+       }
+     finally
+       {
+         in.position (inPos);
+       }
+   }
+ 
+   protected void implReset ()
+   {
+     byteOrder = originalByteOrder;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16Encoder.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16Encoder.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16Encoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16Encoder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,145 ----
+ /* UTF_16Encoder.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.ByteOrder;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetEncoder;
+ import java.nio.charset.CoderResult;
+ 
+ /**
+  * Encoder for UTF-16, UTF-15LE, and UTF-16BE.
+  *
+  * @author Jesse Rosenstock
+  */
+ final class UTF_16Encoder extends CharsetEncoder
+ {
+   // byte orders
+   static final int BIG_ENDIAN = 0;
+   static final int LITTLE_ENDIAN = 1;
+ 
+   private static final char BYTE_ORDER_MARK = 0xFEFF;
+ 
+   private final ByteOrder byteOrder;
+   private final boolean useByteOrderMark;
+   private boolean needsByteOrderMark;
+ 
+   UTF_16Encoder (Charset cs, int byteOrder, boolean useByteOrderMark)
+   {
+     super (cs, 2.0f,
+            useByteOrderMark ? 4.0f : 2.0f,
+            byteOrder == BIG_ENDIAN
+              ? new byte[] { (byte) 0xFF, (byte) 0xFD }
+              : new byte[] { (byte) 0xFD, (byte) 0xFF });
+     this.byteOrder = (byteOrder == BIG_ENDIAN) ? 
+ 	ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
+     this.useByteOrderMark = useByteOrderMark;
+     this.needsByteOrderMark = useByteOrderMark;
+   }
+ 
+   protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
+   {
+     // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+ 
+     ByteOrder originalBO = out.order();
+     out.order(byteOrder);
+ 
+     if (needsByteOrderMark)
+       {
+         if (out.remaining () < 2)
+ 	    {
+ 		out.order(originalBO);
+ 		return CoderResult.OVERFLOW;
+ 	    }
+         out.putChar (BYTE_ORDER_MARK);	
+         needsByteOrderMark = false;
+       }
+ 
+     int inPos = in.position ();
+     try
+       {
+         while (in.hasRemaining ())
+           {
+             char c = in.get ();
+             if (0xD800 <= c && c <= 0xDFFF)
+               {
+                 // c is a surrogate
+ 
+                 // make sure c is a high surrogate
+                 if (c > 0xDBFF)
+                   return CoderResult.malformedForLength (1);
+                 if (in.remaining () < 1)
+                   return CoderResult.UNDERFLOW;
+                 char d = in.get ();
+                 // make sure d is a low surrogate
+                 if (d < 0xDC00 || d > 0xDFFF)
+                   return CoderResult.malformedForLength (1);
+                 out.putChar (c);
+                 out.putChar (d);
+                 inPos += 2;
+               }
+             else
+               {
+                 if (out.remaining () < 2)
+ 		  {
+ 		    out.order(originalBO);
+ 		    return CoderResult.OVERFLOW;
+ 		  }
+                 out.putChar (c);
+                 inPos++;
+               }
+           }
+ 	out.order(originalBO);
+         return CoderResult.UNDERFLOW;
+       }
+     finally
+       {
+         in.position (inPos);
+       }
+   }
+ 
+   protected void implReset ()
+   {
+     needsByteOrderMark = useByteOrderMark;
+   }
+ 
+   // TODO: override canEncode(char) and canEncode(CharSequence)
+   // for performance
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16LE.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16LE.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_16LE.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_16LE.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,83 ----
+ /* UTF_16LE.java -- 
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ 
+ /**
+  * UTF-16LE charset.
+  *
+  * @author Jesse Rosenstock
+  */
+ final class UTF_16LE extends Charset
+ {
+   UTF_16LE ()
+   {
+     super ("UTF-16LE", new String[] {
+         // witnessed by the internet
+         "UTF16LE", 
+         /* These names are provided by
+          * http://oss.software.ibm.com/cgi-bin/icu/convexp?s=ALL
+          */
+         "x-utf-16le", "ibm-1202", "ibm-13490", "ibm-17586",
+         "UTF16_LittleEndian",
+         // see http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html
+         "UnicodeLittleUnmarked"
+     });
+   }
+ 
+   public boolean contains (Charset cs)
+   {
+     return cs instanceof US_ASCII || cs instanceof ISO_8859_1
+       || cs instanceof UTF_8 || cs instanceof UTF_16BE
+       || cs instanceof UTF_16LE || cs instanceof UTF_16;
+   }
+ 
+   public CharsetDecoder newDecoder ()
+   {
+     return new UTF_16Decoder (this, UTF_16Decoder.LITTLE_ENDIAN);
+   }
+ 
+   public CharsetEncoder newEncoder ()
+   {
+     return new UTF_16Encoder (this, UTF_16Encoder.LITTLE_ENDIAN, false);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_8.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_8.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UTF_8.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UTF_8.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,311 ----
+ /* UTF_8.java -- 
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ import java.nio.charset.CoderResult;
+ 
+ /**
+  * UTF-8 charset.
+  * 
+  * <p> UTF-8 references:
+  * <ul>
+  *   <li> <a href="http://ietf.org/rfc/rfc2279.txt">RFC 2279</a>
+  *   <li> The <a href="http://www.unicode.org/unicode/standard/standard.html">
+  *     Unicode standard</a> and 
+  *     <a href="http://www.unicode.org/versions/corrigendum1.html">
+  *      Corrigendum</a>
+  * </ul>
+  *
+  * @author Jesse Rosenstock
+  */
+ final class UTF_8 extends Charset
+ {
+   UTF_8 ()
+   {
+     super ("UTF-8", new String[] {
+         /* These names are provided by
+          * http://oss.software.ibm.com/cgi-bin/icu/convexp?s=ALL
+          */
+         "ibm-1208", "ibm-1209", "ibm-5304", "ibm-5305",
+         "windows-65001", "cp1208",
+         // see http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html
+         "UTF8"
+     });
+   }
+ 
+   public boolean contains (Charset cs)
+   {
+     return cs instanceof US_ASCII || cs instanceof ISO_8859_1
+       || cs instanceof UTF_8 || cs instanceof UTF_16BE
+       || cs instanceof UTF_16LE || cs instanceof UTF_16;
+   }
+ 
+   public CharsetDecoder newDecoder ()
+   {
+     return new Decoder (this);
+   }
+ 
+   public CharsetEncoder newEncoder ()
+   {
+     return new Encoder (this);
+   }
+ 
+   private static final class Decoder extends CharsetDecoder
+   {
+     // Package-private to avoid a trampoline constructor.
+     Decoder (Charset cs)
+     {
+       super (cs, 1f, 1f);
+     }
+ 
+     protected CoderResult decodeLoop (ByteBuffer in, CharBuffer out)
+     {
+       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+       int inPos = in.position(); 
+       try
+         {
+           while (in.hasRemaining ())
+             {
+               char c;
+               byte b1 = in.get ();
+               int highNibble = ((b1 & 0xFF) >> 4) & 0xF;
+               switch (highNibble)
+                 {
+                   case 0: case 1: case 2: case 3:
+                   case 4: case 5: case 6: case 7:
+                     if (out.remaining () < 1)
+                       return CoderResult.OVERFLOW;
+                     out.put ((char) b1);
+                     inPos++;
+                     break;		    
+ 
+                   case 0xC: case 0xD:
+                     byte b2;
+                     if (in.remaining () < 1)
+                       return CoderResult.UNDERFLOW;
+                     if (out.remaining () < 1)
+                       return CoderResult.OVERFLOW;
+                     if (!isContinuation (b2 = in.get ()))
+                       return CoderResult.malformedForLength (1);
+                     c = (char) (((b1 & 0x1F) << 6) | (b2 & 0x3F));
+                     // check that we had the shortest encoding
+                     if (c <= 0x7F)
+                       return CoderResult.malformedForLength (2);
+                     out.put (c);
+                     inPos += 2;
+                     break;
+ 
+                   case 0xE:
+                     byte b3;
+                     if (in.remaining () < 2)
+                       return CoderResult.UNDERFLOW;
+                     if (out.remaining () < 1)
+                       return CoderResult.OVERFLOW;
+                     if (!isContinuation (b2 = in.get ()))
+                       return CoderResult.malformedForLength (1);
+                     if (!isContinuation (b3 = in.get ()))
+                       return CoderResult.malformedForLength (1);
+                     c = (char) (((b1 & 0x0F) << 12)
+                                 | ((b2 & 0x3F) << 6)
+                                 | (b3 & 0x3F));
+                     // check that we had the shortest encoding
+                     if (c <= 0x7FF)
+                       return CoderResult.malformedForLength (3);
+                     out.put (c);
+                     inPos += 3;
+                     break;
+ 
+                   case 0xF:
+                     byte b4;
+                     if (in.remaining () < 3)
+                       return CoderResult.UNDERFLOW;
+ 		    if((b1&0x0F) > 4)
+                       return CoderResult.malformedForLength (4);
+                     if (out.remaining () < 2)
+                       return CoderResult.OVERFLOW;
+                     if (!isContinuation (b2 = in.get ()))
+                       return CoderResult.malformedForLength (3);
+                     if (!isContinuation (b3 = in.get ()))
+                       return CoderResult.malformedForLength (2);
+                     if (!isContinuation (b4 = in.get ()))
+                       return CoderResult.malformedForLength (1);
+ 		    int n = (((b1 & 0x3) << 18)
+ 			     | ((b2 & 0x3F) << 12)
+ 			     | ((b3 & 0x3F) << 6)
+ 			     | (b4 & 0x3F)) - 0x10000;
+ 		    char c1 = (char)(0xD800 | (n & 0xFFC00)>>10);
+ 		    char c2 = (char)(0xDC00 | (n & 0x003FF));
+                     out.put (c1);
+                     out.put (c2);
+                     inPos += 4;
+                     break;
+ 
+                   default:
+                     return CoderResult.malformedForLength (1);
+                 }
+             }
+ 
+           return CoderResult.UNDERFLOW;
+         }
+       finally
+         {
+           // In case we did a get(), then encountered an error, reset the
+           // position to before the error.  If there was no error, this
+           // will benignly reset the position to the value it already has.
+           in.position (inPos);
+         }
+     }
+ 
+     private static boolean isContinuation (byte b)
+     {
+       return (b & 0xC0) == 0x80;
+     }
+   }
+ 
+   private static final class Encoder extends CharsetEncoder
+   {
+     // Package-private to avoid a trampoline constructor.
+     Encoder (Charset cs)
+     {
+       // According to
+       // http://www-106.ibm.com/developerworks/unicode/library/utfencodingforms/index.html
+       //   On average, English takes slightly over one unit per code point.
+       //   Most Latin-script languages take about 1.1 bytes. Greek, Russian,
+       //   Arabic and Hebrew take about 1.7 bytes, and most others (including
+       //   Japanese, Chinese, Korean and Hindi) take about 3 bytes.
+       // We assume we will be dealing with latin scripts, and use 1.1 
+       // for averageBytesPerChar.
+       super (cs, 1.1f, 4.0f);
+     }
+ 
+     protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
+     {
+       int inPos = in.position();
+       try
+         {
+           // TODO: Optimize this in the case in.hasArray() / out.hasArray()
+           while (in.hasRemaining ())
+           {
+             int remaining = out.remaining ();
+             char c = in.get ();
+ 
+             // UCS-4 range (hex.)           UTF-8 octet sequence (binary)
+             // 0000 0000-0000 007F   0xxxxxxx
+             // 0000 0080-0000 07FF   110xxxxx 10xxxxxx
+             // 0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx
+ 
+             //        Scalar Value          UTF-16                byte 1     byte 2     byte 3     byte 4
+             //        0000 0000 0xxx xxxx   0000 0000 0xxx xxxx   0xxx xxxx
+             //        0000 0yyy yyxx xxxx   0000 0yyy yyxx xxxx   110y yyyy  10xx xxxx
+             //        zzzz yyyy yyxx xxxx   zzzz yyyy yyxx xxxx   1110 zzzz  10yy yyyy  10xx xxxx
+             // u uuuu zzzz yyyy yyxx xxxx   1101 10ww wwzz zzyy   1111 0uuu  10uu zzzz  10yy yyyy  10xx xxxx
+             //                            + 1101 11yy yyxx xxxx
+             // Note: uuuuu = wwww + 1
+             if (c <= 0x7F)
+               {
+                 if (remaining < 1)
+                   return CoderResult.OVERFLOW;
+                 out.put ((byte) c);
+                 inPos++;
+               }
+             else if (c <= 0x7FF)
+               {
+                 if (remaining < 2)
+                   return CoderResult.OVERFLOW;
+                 out.put ((byte) (0xC0 | (c >> 6)));
+                 out.put ((byte) (0x80 | (c & 0x3F)));
+                 inPos++;
+               }
+             else if (0xD800 <= c && c <= 0xDFFF)
+               {
+                 if (remaining < 4)
+                   return CoderResult.OVERFLOW;
+ 
+                 // we got a low surrogate without a preciding high one
+                 if (c > 0xDBFF)
+                   return CoderResult.malformedForLength (1);
+ 
+                 // high surrogates
+                 if (!in.hasRemaining ())
+                   return CoderResult.UNDERFLOW;
+ 
+                 char d = in.get ();
+ 
+                 // make sure d is a low surrogate
+                 if (d < 0xDC00 || d > 0xDFFF)
+                   return CoderResult.malformedForLength (1);
+ 
+                 // make the 32 bit value
+                 // int value2 = (c - 0xD800) * 0x400 + (d - 0xDC00) + 0x10000;
+                 int value = (((c & 0x3FF) << 10) | (d & 0x3FF)) + 0x10000;
+                 // assert value == value2;
+                 out.put ((byte) (0xF0 | ((value >> 18) & 0x07)));
+                 out.put ((byte) (0x80 | ((value >> 12) & 0x3F)));
+                 out.put ((byte) (0x80 | ((value >>  6) & 0x3F)));
+                 out.put ((byte) (0x80 | ((value      ) & 0x3F)));
+                 inPos += 2;
+               }
+             else
+               {
+                 if (remaining < 3)
+                   return CoderResult.OVERFLOW;
+ 
+                 out.put ((byte) (0xE0 | (c >> 12)));
+                 out.put ((byte) (0x80 | ((c >> 6) & 0x3F)));
+                 out.put ((byte) (0x80 | (c & 0x3F)));
+                 inPos++;
+               }
+           }
+ 
+           return CoderResult.UNDERFLOW;
+         }
+       finally
+         {
+           // In case we did a get(), then encountered an error, reset the
+           // position to before the error.  If there was no error, this
+           // will benignly reset the position to the value it already has.
+           in.position (inPos);
+         }
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UnicodeLittle.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UnicodeLittle.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/UnicodeLittle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/UnicodeLittle.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,74 ----
+ /* UnicodeLittle.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ 
+ /**
+  * UTF-16 little endian with a byte-order mark
+  * Included for java.io completeness.
+  * ("UTF-16" is equal to UnicodeBig, and 
+  * UTF-16BE/LE do not have a BOM
+  */
+ final class UnicodeLittle extends Charset
+ {
+   UnicodeLittle ()
+   {
+     super ("UnicodeLittle", new String[] {});
+   }
+ 
+   public boolean contains (Charset cs)
+   {
+     return cs instanceof US_ASCII || cs instanceof ISO_8859_1
+       || cs instanceof UTF_8 || cs instanceof UTF_16BE
+       || cs instanceof UTF_16LE || cs instanceof UTF_16;
+   }
+ 
+   public CharsetDecoder newDecoder ()
+   {
+     return new UTF_16Decoder (this, UTF_16Decoder.MAYBE_LITTLE_ENDIAN);
+   }
+ 
+   public CharsetEncoder newEncoder ()
+   {
+     return new UTF_16Encoder (this, UTF_16Encoder.LITTLE_ENDIAN, true);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1250.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1250.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1250.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1250.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,103 ----
+ /* Windows1250.java -- Charset for Windows-1250 Character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for Windows-1250-Latin-1, 
+  * aka cp1250 or Windows-1250 or whatever.
+  */
+ public class Windows1250 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x20AC, 0xFFFD, 0x201A, 0xFFFD, 0x201E, 0x2026, 0x2020, 0x2021, 
+ 	0xFFFD, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179, 
+ 	0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	0xFFFD, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A, 
+ 	0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7, 
+ 	0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B, 
+ 	0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C, 
+ 	0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, 
+ 	0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, 
+ 	0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 
+ 	0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, 
+ 	0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 
+ 	0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, 
+ 	0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 
+ 	0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
+     };
+ 
+   public Windows1250()
+   {
+       super("windows-1250", new String[] {
+ 	  "Windows1250", 
+ 	  "ibm-5346_P100-1998",
+ 	  "ibm-5346", 
+ 	  "cp1250", 
+ 	  "cp-1250", 
+ 	  "cp_1250", 
+ 	  "windows1250",
+ 	  "windows_1250" 
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class Windows1250
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1251.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1251.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1251.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1251.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* Windows1251.java -- Charset for Windows-1251 Cyrillic character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for Windows-1251 Cyrillic char set.
+  * aka cp1251 or Windows-1251 or whatever.
+  */
+ public class Windows1251 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, 
+ 	0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, 
+ 	0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	  NONE, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, 
+ 	0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, 
+ 	0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, 
+ 	0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, 
+ 	0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 
+ 	0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 
+ 	0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 
+ 	0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 
+ 	0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 
+ 	0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 
+ 	0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 
+ 	0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
+     };
+ 
+   public Windows1251()
+   {
+       super("windows-1251", new String[] {
+ 	  "Windows1251", 
+ 	  "cp1251", 
+ 	  "cp-1251", 
+ 	  "cp_1251", 
+ 	  "windows1251",
+ 	  "windows_1251" 
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class Windows1251
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1252.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1252.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1252.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1252.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* Windows1252.java -- Charset for Windows-1252 Character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for Windows-1252-Latin-1, 
+  * aka cp1252 or Windows-1252 or whatever.
+  */
+ public class Windows1252 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+       0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+       0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+       0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+       0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+       0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+       0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+       0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+       0x20AC, NONE,   0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+       0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, NONE,   0x017D, NONE, 
+       NONE,   0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+       0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, NONE,   0x017E, 0x0178, 
+       0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+       0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+       0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+       0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+       0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+       0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+       0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 
+       0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+       0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+       0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+       0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+     };
+ 
+   public Windows1252()
+   {
+       super("windows-1252", new String[] {
+ 	  "Windows1252",
+ 	  "ibm-5348_P100-1997",
+ 	  "ibm-5348",
+ 	  "windows-1252",
+ 	  "cp1252", 
+ 	  "cp-1252"
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class Windows1252
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1253.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1253.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1253.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1253.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* Windows1253.java -- Charset for Windows-1253 Greek character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for Windows-1253 Greek char set.
+  * aka cp1253 or Windows-1253 or whatever.
+  */
+ public class Windows1253 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x20AC,   NONE, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+ 	  NONE, 0x2030,   NONE, 0x2039,   NONE,   NONE,   NONE,   NONE, 
+ 	  NONE, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	  NONE, 0x2122,   NONE, 0x203A,   NONE,   NONE,   NONE,   NONE, 
+ 	0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+ 	0x00A8, 0x00A9,   NONE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015, 
+ 	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, 
+ 	0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 
+ 	0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 
+ 	0x03A0, 0x03A1,   NONE, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 
+ 	0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 
+ 	0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 
+ 	0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 
+ 	0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 
+ 	0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE,   NONE
+     };
+ 
+   public Windows1253()
+   {
+       super("windows-1253", new String[] {
+ 	  "Windows1253", 
+ 	  "cp1253", 
+ 	  "cp-1253", 
+ 	  "cp_1253", 
+ 	  "windows1253",
+ 	  "windows_1253" 
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class Windows1253
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1254.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1254.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1254.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1254.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* Windows1254.java -- Charset for Windows-1254 Turkish character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for Windows-1254 Turkish char set.
+  * aka cp1254 or Windows-1254 or whatever.
+  */
+ public class Windows1254 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x20AC,   NONE, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+ 	0x02C6, 0x2030, 0x0160, 0x2039, 0x0152,   NONE,   NONE,   NONE, 
+ 	  NONE, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	0x02DC, 0x2122, 0x0161, 0x203A, 0x0153,   NONE,   NONE, 0x0178, 
+ 	0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+ 	0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+ 	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+ 	0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+ 	0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+ 	0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+ 	0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, 
+ 	0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+ 	0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+ 	0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+ 	0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
+     };
+ 
+   public Windows1254()
+   {
+       super("windows-1254", new String[] {
+ 	  "Windows1254", 
+ 	  "cp1254", 
+ 	  "cp-1254", 
+ 	  "cp_1254", 
+ 	  "windows1254",
+ 	  "windows_1254" 
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class Windows1254
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1255.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1255.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1255.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1255.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* Windows1255.java -- Charset for Windows-1255 Character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for Windows-1255 Hebrew char set.
+  * aka cp1255 or Windows-1255 or whatever.
+  */
+ public class Windows1255 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x20AC, 0xFFFD, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+ 	0x02C6, 0x2030, 0xFFFD, 0x2039, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 
+ 	0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	0x02DC, 0x2122, 0xFFFD, 0x203A, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 
+ 	0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7, 
+ 	0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+ 	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+ 	0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, 
+ 	0x05B8, 0x05B9, 0xFFFD, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, 
+ 	0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3, 
+ 	0x05F4, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 
+ 	0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 
+ 	0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 
+ 	0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 
+ 	0x05E8, 0x05E9, 0x05EA, 0xFFFD, 0xFFFD, 0x200E, 0x200F, 0xFFFD
+     };
+ 
+   public Windows1255()
+   {
+       super("windows-1255", new String[] {
+ 	  "Windows1255", 
+ 	  "cp1255", 
+ 	  "cp-1255", 
+ 	  "cp_1255", 
+ 	  "windows1255",
+ 	  "windows_1255" 
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class Windows1255
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1256.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1256.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1256.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1256.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* Windows1256.java -- Charset for Windows-1256 Arabic character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for Windows-1256 Arabic char set.
+  * aka cp1256 or Windows-1256 or whatever.
+  */
+ public class Windows1256 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+ 	0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, 
+ 	0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA, 
+ 	0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+ 	0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+ 	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F, 
+ 	0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 
+ 	0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 
+ 	0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7, 
+ 	0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643, 
+ 	0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7, 
+ 	0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF, 
+ 	0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7, 
+ 	0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2
+     };
+ 
+   public Windows1256()
+   {
+       super("windows-1256", new String[] {
+ 	  "Windows1256", 
+ 	  "cp1256", 
+ 	  "cp-1256", 
+ 	  "cp_1256", 
+ 	  "windows1256",
+ 	  "windows_1256" 
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class Windows1256
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1257.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1257.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1257.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1257.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* Windows1257.java -- Charset for Windows-1257 Baltic character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for Windows-1257 Baltic char set.
+  * aka cp1257 or Windows-1257 or whatever.
+  */
+ public class Windows1257 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x20AC,   NONE, 0x201A,   NONE, 0x201E, 0x2026, 0x2020, 0x2021, 
+ 	  NONE, 0x2030,   NONE, 0x2039,   NONE, 0x00A8, 0x02C7, 0x00B8, 
+ 	  NONE, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	  NONE, 0x2122,   NONE, 0x203A,   NONE, 0x00AF, 0x02DB,   NONE, 
+ 	0x00A0,   NONE, 0x00A2, 0x00A3, 0x00A4,   NONE, 0x00A6, 0x00A7, 
+ 	0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, 
+ 	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, 
+ 	0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, 
+ 	0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, 
+ 	0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, 
+ 	0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, 
+ 	0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, 
+ 	0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, 
+ 	0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, 
+ 	0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9
+     };
+ 
+   public Windows1257()
+   {
+       super("windows-1257", new String[] {
+ 	  "Windows1257", 
+ 	  "cp1257", 
+ 	  "cp-1257", 
+ 	  "cp_1257", 
+ 	  "windows1257",
+ 	  "windows_1257" 
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class Windows1257
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1258.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1258.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/Windows1258.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/Windows1258.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* Windows1258.java -- Charset for Windows-1258 Vietnamese character set.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset;
+ 
+ /**
+  * Encoding table for Windows-1258 Arabic char set.
+  * aka cp1258 or Windows-1258 or whatever.
+  */
+ public class Windows1258 extends ByteCharset
+ {
+ 
+   /**
+    * This is the lookup table for this encoding
+    */
+     private static final char[]	lookup =
+     {
+ 	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+ 	0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 
+ 	0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 
+ 	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 
+ 	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 
+ 	0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 
+ 	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 
+ 	0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 
+ 	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 
+ 	0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 
+ 	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 
+ 	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 
+ 	0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+ 	0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 
+ 	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 
+ 	0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 
+ 	0x20AC,   NONE, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+ 	0x02C6, 0x2030,   NONE, 0x2039, 0x0152,   NONE,   NONE,   NONE, 
+ 	  NONE, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+ 	0x02DC, 0x2122,   NONE, 0x203A, 0x0153,   NONE,   NONE, 0x0178, 
+ 	0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+ 	0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+ 	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+ 	0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+ 	0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+ 	0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF, 
+ 	0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7, 
+ 	0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF, 
+ 	0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+ 	0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF, 
+ 	0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7, 
+ 	0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF
+     };
+ 
+   public Windows1258()
+   {
+       super("windows-1258", new String[] {
+ 	  "Windows1258", 
+ 	  "cp1258", 
+ 	  "cp-1258", 
+ 	  "cp_1258", 
+ 	  "windows1258",
+ 	  "windows_1258" 
+       });
+       lookupTable = lookup;
+  }
+   
+ } // class Windows1258
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvCharset.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvCharset.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvCharset.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvCharset.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* IconvCharset.java -- Wrapper for iconv charsets.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset.iconv;
+ 
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ 
+ public final class IconvCharset extends Charset
+ {
+   private IconvMetaData info;
+ 
+   public IconvCharset(IconvMetaData info)
+   {
+     super(info.nioCanonical(), info.aliases());
+     this.info = info;
+     if (newEncoder() == null || newDecoder() == null)
+       throw new IllegalArgumentException();
+   }
+ 
+   public boolean contains(Charset cs)
+   {
+     return false;
+   }
+ 
+   public CharsetDecoder newDecoder()
+   {
+     try
+       {
+ 	return new IconvDecoder(this, info);
+       }
+     catch (IllegalArgumentException e)
+       {
+ 	return null;
+       }
+   }
+ 
+   public CharsetEncoder newEncoder()
+   {
+     try
+       {
+ 	return new IconvEncoder(this, info);
+       }
+     catch (IllegalArgumentException e)
+       {
+ 	return null;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvDecoder.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvDecoder.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvDecoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvDecoder.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,113 ----
+ /* IconvDecoder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset.iconv;
+ 
+ import gnu.classpath.Pointer;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ import java.nio.charset.CoderResult;
+ 
+ final class IconvDecoder extends CharsetDecoder
+ {
+   IconvDecoder(Charset cs, IconvMetaData info)
+   {
+     super(cs, info.averageCharsPerByte(), info.maxCharsPerByte());
+     openIconv(info.iconvName());
+   }
+ 
+   private Pointer data;
+   private int inremaining;
+   private int outremaining;
+ 
+   private native void openIconv(String name);
+ 
+   private native int decode(byte[] in, char[] out, int posIn, int remIn,
+                             int posOut, int remOut);
+ 
+   private native void closeIconv();
+ 
+   protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out)
+   {
+     int remIn = in.remaining();
+     int inPos = in.position();
+     int outPos = out.position();
+     int remOut = out.remaining();
+     byte[] inArr;
+     int ret;
+ 
+     if (in.hasArray())
+       inArr = in.array();
+     else
+       {
+ 	inArr = new byte[remIn];
+ 	in.get(inArr);
+       }
+ 
+     if (out.hasArray())
+       {
+ 	ret = decode(inArr, out.array(), inPos, remIn, outPos, remOut);
+ 	out.position(outPos + (remOut - outremaining));
+       }
+     else
+       {
+ 	char[] outArr = new char[remOut];
+ 	ret = decode(inArr, outArr, inPos, remIn, outPos, remOut);
+ 	out.put(outArr, 0, (remOut - outremaining));
+       }
+     in.position(inPos + (remIn - inremaining));
+ 
+     if (ret == 1)
+       return CoderResult.malformedForLength(1);
+ 
+     if (in.remaining() == 0)
+       return CoderResult.UNDERFLOW;
+     return CoderResult.OVERFLOW;
+   }
+ 
+   protected void finalize()
+   {
+     closeIconv();
+   }
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvEncoder.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvEncoder.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvEncoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvEncoder.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,111 ----
+ /* IconvEncoder.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset.iconv;
+ 
+ import gnu.classpath.Pointer;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ import java.nio.charset.CoderResult;
+ 
+ final class IconvEncoder extends CharsetEncoder
+ {
+   private Pointer data;
+   private int inremaining;
+   private int outremaining;
+ 
+   private native void openIconv(String name);
+ 
+   private native int encode(char[] in, byte[] out, int posIn, int remIn,
+                             int posOut, int remOut);
+ 
+   private native void closeIconv();
+ 
+   IconvEncoder(Charset cs, IconvMetaData info)
+   {
+     super(cs, info.averageBytesPerChar(), info.maxBytesPerChar());
+     openIconv(info.iconvName());
+   }
+ 
+   protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out)
+   {
+     int inPos = in.position();
+     int outPos = out.position();
+     int remIn = in.remaining();
+     int remOut = out.remaining();
+     char[] inArr;
+     int ret;
+ 
+     if (in.hasArray())
+       inArr = in.array();
+     else
+       {
+ 	inArr = new char[remIn];
+ 	in.get(inArr);
+       }
+ 
+     if (out.hasArray())
+       {
+ 	ret = encode(inArr, out.array(), inPos, remIn, outPos, remOut);
+ 	out.position(outPos + (remOut - outremaining));
+       }
+     else
+       {
+ 	byte[] outArr = new byte[remOut];
+ 	ret = encode(inArr, outArr, inPos, remIn, outPos, remOut);
+ 	out.put(outArr, 0, (remOut - outremaining));
+       }
+     in.position(inPos + (remIn - inremaining));
+ 
+     if (ret == 1)
+       return CoderResult.malformedForLength(1);
+ 
+     if (in.remaining() == 0)
+       return CoderResult.UNDERFLOW;
+     return CoderResult.OVERFLOW;
+   }
+ 
+   protected void finalize()
+   {
+     closeIconv();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvMetaData.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvMetaData.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvMetaData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvMetaData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,450 ----
+ /* IconvMetaData.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset.iconv;
+ 
+ import java.util.HashMap;
+ import java.util.Vector;
+ 
+ /**
+  * This is ugly glue. iconv doesn't have character metadata,
+  * so we include it here.
+  *
+  * TODO: Add more charsets which GNU iconv and the JDK support which aren't
+  * included here.
+  *
+  * @author Sven de Marothy
+  */
+ final class IconvMetaData
+ {
+   /**
+    * Map of names (and aliases) to metadata instances
+    */
+   private static HashMap names;
+ 
+   /**
+    * Vector of MetaData instances
+    */
+   private static Vector charsets;
+ 
+   /**
+    * Name to use with iconv (may differ from the nio canonical.
+    */
+   private String iconvName;
+ 
+   /**
+    * Average number of bytes per char.
+    */
+   private float averageBperC;
+ 
+   /**
+    * Maximum number of bytes per char.
+    */
+   private float maxBperC;
+ 
+   /**
+    * Average number of chars per byte.
+    */
+   private float averageCperB;
+ 
+   /**
+    * Maximum number of chars per byte.
+    */
+   private float maxCperB;
+ 
+   /**
+    * NIO canonical name.
+    */
+   private String nioCanonical;
+ 
+   /**
+    * Charset aliases.
+    */
+   private String[] aliases;
+ 
+   IconvMetaData(String nioCanonical, float averageBperC, float maxBperC,
+                 float averageCperB, float maxCperB, String[] aliases,
+                 String iconvName)
+   {
+     this.nioCanonical = nioCanonical;
+     this.iconvName = iconvName;
+ 
+     this.averageBperC = averageBperC;
+     this.maxBperC = maxBperC;
+     this.averageCperB = averageCperB;
+     this.maxCperB = maxCperB;
+     this.aliases = aliases;
+ 
+     names.put(nioCanonical, this);
+     names.put(iconvName, this);
+     for (int i = 0; i < aliases.length; i++)
+       names.put(aliases[i], this);
+     charsets.add(this);
+   }
+ 
+   static Vector charsets()
+   {
+     return charsets;
+   }
+ 
+   String[] aliases()
+   {
+     return aliases;
+   }
+ 
+   String nioCanonical()
+   {
+     return nioCanonical;
+   }
+ 
+   String iconvName()
+   {
+     return iconvName;
+   }
+ 
+   float maxBytesPerChar()
+   {
+     return maxBperC;
+   }
+ 
+   float maxCharsPerByte()
+   {
+     return maxCperB;
+   }
+ 
+   float averageBytesPerChar()
+   {
+     return averageBperC;
+   }
+ 
+   float averageCharsPerByte()
+   {
+     return averageCperB;
+   }
+ 
+   static IconvMetaData get(String s)
+   {
+     return (IconvMetaData) names.get(s);
+   }
+ 
+   static void setup()
+   {
+     names = new HashMap();
+     charsets = new Vector();
+     new IconvMetaData("Big5", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[] { "big-5", "csBig5" }, "Big5");
+ 
+     new IconvMetaData("Big5-HKSCS", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[] { "big5-hkscs", "Big5_HKSCS", "big5hkscs" },
+                       "Big5-HKSCS");
+ 
+     new IconvMetaData("EUC-CN", 2.0f, 2.0f, 0.5f, 1.0f, new String[] {  },
+                       "EUC-CN");
+ 
+     new IconvMetaData("EUC-JP", 3.0f, 3.0f, 0.5f, 1.0f,
+                       new String[]
+                       {
+                         "eucjis", "x-eucjp", "csEUCPkdFmtjapanese", "eucjp",
+                         "Extended_UNIX_Code_Packed_Format_for_Japanese",
+                         "x-euc-jp", "euc_jp"
+                       }, "EUC-JP");
+ 
+     new IconvMetaData("EUC-KR", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[]
+                       {
+                         "ksc5601", "5601", "ksc5601_1987", "ksc_5601",
+                         "ksc5601-1987", "euc_kr", "ks_c_5601-1987", "euckr",
+                         "csEUCKR"
+                       }, "EUC-KR");
+ 
+     new IconvMetaData("EUC-TW", 4.0f, 4.0f, 2.0f, 2.0f,
+                       new String[] { "cns11643", "euc_tw", "euctw", }, "EUC-TW");
+ 
+     new IconvMetaData("GB18030", 4.0f, 4.0f, 1.0f, 2.0f,
+                       new String[] { "gb18030-2000", }, "GB18030");
+ 
+     new IconvMetaData("GBK", 2.0f, 2.0f, 0.5f, 1.0f, new String[] { "GBK" },
+                       "GBK");
+ 
+     new IconvMetaData("ISO-2022-CN-CNS", 4.0f, 4.0f, 2.0f, 2.0f,
+                       new String[] { "ISO2022CN_CNS" }, "ISO-2022-CN"); // will this work?
+ 
+     new IconvMetaData("ISO-2022-CN-GB", 4.0f, 4.0f, 2.0f, 2.0f,
+                       new String[] { "ISO2022CN_GB" }, "ISO-2022-CN"); // same here?
+ 
+     new IconvMetaData("ISO-2022-KR", 4.0f, 4.0f, 1.0f, 1.0f,
+                       new String[] { "ISO2022KR", "csISO2022KR" },
+                       "ISO-2022-KR");
+ 
+     new IconvMetaData("ISO-8859-1", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "iso-ir-100", "ISO_8859-1", "latin1", "l1", "IBM819",
+                         "CP819", "csISOLatin1", "8859_1", "ISO8859_1",
+                         "ISO_8859_1", "ibm-819", "ISO_8859-1:1987", "819"
+                       }, "ISO-8859-1");
+ 
+     new IconvMetaData("ISO-8859-13", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "ISO8859_13", "8859_13", "ibm-921_P100-1995", "ibm-921",
+                         "iso_8859_13", "iso8859_13", "iso-8859-13", "8859_13",
+                         "cp921", "921"
+                       }, "ISO-8859-13");
+ 
+     new IconvMetaData("ISO-8859-15", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "8859_15", "csISOlatin9", "IBM923", "cp923", "923",
+                         "LATIN0", "csISOlatin0", "ISO8859_15_FDIS", "L9",
+                         "IBM-923", "ISO8859-15", "LATIN9", "ISO_8859-15",
+                         "ISO-8859-15",
+                       }, "ISO-8859-15");
+ 
+     new IconvMetaData("ISO-8859-2", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "ISO8859_2", "8859_2", "ibm-912_P100-1995", "ibm-912",
+                         "iso_8859_2", "iso8859_2", "iso-8859-2",
+                         "ISO_8859-2:1987", "latin2", "csISOLatin2",
+                         "iso-ir-101", "l2", "cp912", "912", "windows-28592"
+                       }, "ISO-8859-2");
+ 
+     new IconvMetaData("ISO-8859-3", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "ISO8859_3", "8859_3", "ibm-913_P100-2000", "ibm-913",
+                         "iso_8859_3", "iso8859_3", "iso-8859-3",
+                         "ISO_8859-3:1988", "latin3", "csISOLatin3",
+                         "iso-ir-109", "l3", "cp913", "913", "windows-28593"
+                       }, "ISO-8859-3");
+ 
+     new IconvMetaData("ISO-8859-4", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "ISO8859_4", "8859_4", "ibm-914_P100-1995", "ibm-914",
+                         "iso_8859_4", "iso8859_4", "iso-8859-4", "latin4",
+                         "csISOLatin4", "iso-ir-110", "ISO_8859-4:1988", "l4",
+                         "cp914", "914", "windows-28594"
+                       }, "ISO-8859-4");
+ 
+     new IconvMetaData("ISO-8859-5", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "ISO8859_5", "8859_5", "ibm-915_P100-1995", "ibm-915",
+                         "iso_8859_5", "iso8859_5", "iso-8859-5", "cyrillic",
+                         "csISOLatinCyrillic", "iso-ir-144", "ISO_8859-5:1988",
+                         "cp915", "915", "windows-28595"
+                       }, "ISO-8859-5");
+ 
+     new IconvMetaData("ISO-8859-6", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "8859_6", "ibm-1089_P100-1995", "ibm-1089",
+                         "iso_8859_6", "iso8859_6", "iso-8859-6", "arabic",
+                         "csISOLatinArabic", "iso-ir-127", "ISO_8859-6:1987",
+                         "ECMA-114", "ASMO-708", "8859_6", "cp1089", "1089",
+                         "windows-28596", "ISO-8859-6-I", "ISO-8859-6-E"
+                       }, "ISO-8859-6");
+ 
+     new IconvMetaData("ISO-8859-7", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "ISO8859_7", "8859_7", "ibm-813_P100-1995", "ibm-813",
+                         "iso_8859_7", "iso8859_7", "iso-8859-7", "greek",
+                         "greek8", "ELOT_928", "ECMA-118", "csISOLatinGreek",
+                         "iso-ir-126", "ISO_8859-7:1987", "cp813", "813",
+                         "windows-28597"
+                       }, "ISO-8859-7");
+ 
+     new IconvMetaData("ISO-8859-8", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "ISO8859_8", "8859_8", "ibm-916_P100-1995", "ibm-916",
+                         "iso_8859_8", "iso8859_8", "iso-8859-8", "hebrew",
+                         "csISOLatinHebrew", "iso-ir-138", "ISO_8859-8:1988",
+                         "ISO-8859-8-I", "ISO-8859-8-E", "cp916", "916",
+                         "windows-28598"
+                       }, "ISO-8859-8");
+ 
+     new IconvMetaData("ISO-8859-9", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "ISO8859_9", "8859_9", "ibm-920_P100-1995", "ibm-920",
+                         "iso8859_9", "iso-8859-9", "iso_8859_9", "latin5",
+                         "csISOLatin5", "iso-ir-148", "ISO_8859-9:1989", "l5",
+                         "cp920", "920", "windows-28599", "ECMA-128"
+                       }, "ISO-8859-9");
+ 
+     new IconvMetaData("Johab", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[] { "ms1361", "ksc5601_1992", "ksc5601-1992", },
+                       "Johab");
+ 
+     new IconvMetaData("KOI8-R", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "KOI8_R", "KOI8", "KOI-8", "KOI_8", "koi8-r", "koi8r",
+                         "koi-8-r", "koi"
+                       }, "KOI8-R");
+ 
+     new IconvMetaData("Shift_JIS", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[]
+                       {
+                         "shift-jis", "x-sjis", "ms_kanji", "shift_jis",
+                         "csShiftJIS", "sjis", "pck",
+                       }, "Shift_JIS");
+ 
+     new IconvMetaData("TIS-620", 1.0f, 1.0f, 1.0f, 1.0f, new String[] {  },
+                       "TIS-620");
+ 
+     new IconvMetaData("US-ASCII", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "IBM367", "ISO646-US", "ANSI_X3.4-1986", "cp367",
+                         "ASCII", "iso_646.irv:1983", "646", "us", "iso-ir-6",
+                         "csASCII", "ANSI_X3.4-1968", "ISO_646.irv:1991",
+                       }, "US-ASCII");
+ 
+     new IconvMetaData("UTF-16", 2.0f, 4.0f, 0.5f, 1.0f,
+                       new String[]
+                       {
+                         "UTF_16", "UTF16", "ISO-10646-UCS-2", "unicode",
+                         "csUnicode", "ucs-2", "UnicodeBig"
+                       }, "UTF-16");
+ 
+     new IconvMetaData("UTF-16BE", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[]
+                       {
+                         "X-UTF-16BE", "UTF_16BE", "UTF16BE", "ISO-10646-UCS-2",
+                         "x-utf-16be", "ibm-1200", "ibm-1201", "ibm-5297",
+                         "ibm-13488", "ibm-17584", "windows-1201", "cp1200",
+                         "cp1201", "UnicodeBigUnmarked"
+                       }, "UTF-16BE");
+ 
+     new IconvMetaData("UTF-16LE", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[]
+                       {
+                         "UTF_16LE", "UTF16LE", "X-UTF-16LE", "ibm-1202",
+                         "ibm-13490", "ibm-17586", "UTF16_LittleEndian",
+                         "UnicodeLittleUnmarked"
+                       }, "UTF-16LE");
+ 
+     new IconvMetaData("UTF-8", 1.1f, 4.0f, 1.0f, 2.0f,
+                       new String[]
+                       {
+                         "UTF8", "ibm-1208", "ibm-1209", "ibm-5304", "ibm-5305",
+                         "windows-65001", "cp1208"
+                       }, "UTF-8");
+ 
+     new IconvMetaData("windows-1250", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "Windows1250", "ibm-5346_P100-1998", "ibm-5346",
+                         "cp1250", "cp-1250", "cp_1250", "windows1250",
+                         "windows_1250"
+                       }, "windows-1250");
+ 
+     new IconvMetaData("windows-1251", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "Windows1251", "cp1251", "cp-1251", "cp_1251",
+                         "windows1251", "windows_1251"
+                       }, "windows-1251");
+ 
+     new IconvMetaData("windows-1252", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "Windows1252", "ibm-5348_P100-1997", "ibm-5348",
+                         "windows-1252", "cp1252", "cp-1252"
+                       }, "windows-1252");
+ 
+     new IconvMetaData("windows-1253", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "Windows1253", "cp1253", "cp-1253", "cp_1253",
+                         "windows1253", "windows_1253"
+                       }, "windows-1253");
+ 
+     new IconvMetaData("windows-1254", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "Windows1254", "cp1254", "cp-1254", "cp_1254",
+                         "windows1254", "windows_1254"
+                       }, "windows-1254");
+ 
+     new IconvMetaData("windows-1255", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "Windows1255", "cp1255", "cp-1255", "cp_1255",
+                         "windows1255", "windows_1255"
+                       }, "windows-1255");
+ 
+     new IconvMetaData("windows-1256", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "Windows1255", "cp1256", "cp-1256", "cp_1256",
+                         "windows1256", "windows_1256"
+                       }, "windows-1256");
+ 
+     new IconvMetaData("windows-1257", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "Windows1255", "cp1257", "cp-1257", "cp_1257",
+                         "windows1257", "windows_1257"
+                       }, "windows-1257");
+ 
+     new IconvMetaData("windows-1258", 1.0f, 1.0f, 1.0f, 1.0f,
+                       new String[]
+                       {
+                         "Windows1255", "cp1258", "cp-1258", "cp_1258",
+                         "windows1258", "windows_1258"
+                       }, "windows-1258");
+ 
+     new IconvMetaData("windows-936", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[] { "cp936", "ms-936", "ms936", "ms_936" },
+                       "windows-936");
+ 
+     new IconvMetaData("windows-949", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[] { "cp949", "ms-949", "ms_949", "ms949" },
+                       "cp949");
+ 
+     new IconvMetaData("windows-950", 2.0f, 2.0f, 0.5f, 1.0f,
+                       new String[] { "cp950", "ms_950", "ms-950", "ms950", },
+                       "cp950");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvProvider.java gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvProvider.java
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/iconv/IconvProvider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/iconv/IconvProvider.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,115 ----
+ /* IconvProvider.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.nio.charset.iconv;
+ 
+ import java.nio.charset.Charset;
+ import java.nio.charset.spi.CharsetProvider;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Vector;
+ 
+ /**
+  * Charset provider wrapping iconv.
+  *
+  * @author Sven de Marothy
+  */
+ public final class IconvProvider extends CharsetProvider
+ {
+   private static IconvProvider singleton;
+ 
+   static
+     {
+       synchronized (IconvProvider.class)
+         {
+ 	  singleton = null;
+         }
+     }
+ 
+   // Declaring the construtor public may violate the use of singleton.
+   // But it must be public so that an instance of this class can be
+   // created by Class.newInstance(), which is the case when this provider is
+   // defined in META-INF/services/java.nio.charset.spi.CharsetProvider.
+   public IconvProvider()
+   {
+     IconvMetaData.setup();
+   }
+ 
+   public Iterator charsets()
+   {
+     Vector names = IconvMetaData.charsets();
+     Vector charsets = new Vector();
+     for (int i = 0; i < names.size(); i++)
+       {
+ 	try
+ 	  {
+ 	    charsets.add(new IconvCharset((IconvMetaData) names.elementAt(i)));
+ 	  }
+ 	catch (IllegalArgumentException e)
+ 	  {
+ 	  }
+       }
+     return charsets.iterator();
+   }
+ 
+   public Charset charsetForName(String charsetName)
+   {
+     try
+       {
+ 	IconvMetaData info = IconvMetaData.get(charsetName);
+ 
+ 	// Try anyway if the set isn't found.
+ 	if (info == null)
+ 	  info = new IconvMetaData(charsetName, 2.0f, 2.0f, 2.0f, 2.0f,
+ 	                           new String[] {  }, charsetName);
+ 	return new IconvCharset(info);
+       }
+     catch (IllegalArgumentException e)
+       {
+ 	return null;
+       }
+   }
+ 
+   public static synchronized IconvProvider provider()
+   {
+     if (singleton == null)
+       singleton = new IconvProvider();
+     return singleton;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/package.html gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/charset/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/charset/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.nio.charset package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.nio.charset</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/nio/package.html gcc-4.1.0/libjava/classpath/gnu/java/nio/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/nio/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/nio/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.nio package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.nio</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/RMIMarshalledObjectInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/RMIMarshalledObjectInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/RMIMarshalledObjectInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/RMIMarshalledObjectInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* gnu.java.rmi.RMIMarshalledObjectInputStream
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi;
+ 
+ import gnu.java.rmi.server.RMIObjectInputStream;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ 
+ /**
+  * This class is only for java.rmi.MarshalledObject to deserialize object from 
+  * objBytes and locBytes
+  */
+ 
+ public class RMIMarshalledObjectInputStream extends RMIObjectInputStream
+ {
+   private ObjectInputStream locStream;
+   
+   public RMIMarshalledObjectInputStream(byte[] objBytes, byte[] locBytes) throws IOException
+   {
+     super(new ByteArrayInputStream(objBytes));
+     if(locBytes != null)
+       locStream = new ObjectInputStream(new ByteArrayInputStream(locBytes));
+   }
+   
+   //This method overrides RMIObjectInputStream's
+   protected Object getAnnotation() throws IOException, ClassNotFoundException
+   {
+     if(locStream == null)
+       return null;
+     return locStream.readObject();
+   }
+   
+ } // End of RMIMarshalledObjectInputStream
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/RMIMarshalledObjectOutputStream.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/RMIMarshalledObjectOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/RMIMarshalledObjectOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/RMIMarshalledObjectOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* gnu.java.rmi.RMIMarshalledObjectOutputStream
+    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi;
+ 
+ import gnu.java.rmi.server.RMIObjectOutputStream;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.ObjectOutputStream;
+ import java.io.OutputStream;
+ 
+ /**
+  * This class is only for java.rmi.MarshalledObject to serialize object and 
+  * got objBytes and locBytes
+  */
+ public class RMIMarshalledObjectOutputStream extends RMIObjectOutputStream
+ {
+   private ObjectOutputStream locStream;
+   private ByteArrayOutputStream locBytesStream;
+   
+   public RMIMarshalledObjectOutputStream(OutputStream objStream) throws IOException
+   {
+     super(objStream);
+     locBytesStream = new ByteArrayOutputStream(256);
+     locStream = new ObjectOutputStream(locBytesStream);
+   }
+   
+   //This method overrides RMIObjectOutputStream's.
+   protected void setAnnotation(String annotation) throws IOException{
+     locStream.writeObject(annotation);
+   }
+   
+   public void flush() throws IOException {
+     super.flush();
+     locStream.flush();
+   }
+   
+   public byte[] getLocBytes(){
+     return locBytesStream.toByteArray();
+   }
+   
+ } // End of RMIMarshalledObjectOutputStream
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/dgc/DGCImpl.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/dgc/DGCImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/dgc/DGCImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/dgc/DGCImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,118 ----
+ /* DGCImpl.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.rmi.dgc;
+ 
+ import gnu.java.rmi.server.UnicastServerRef;
+ 
+ import java.rmi.RemoteException;
+ import java.rmi.dgc.DGC;
+ import java.rmi.dgc.Lease;
+ import java.rmi.dgc.VMID;
+ import java.rmi.server.ObjID;
+ import java.rmi.server.RMISocketFactory;
+ import java.util.Hashtable;
+ 
+ /**
+   * I let DGCImpl to extend UnicastServerRef, but not 
+   * UnicastRemoteObject, because UnicastRemoteObject must
+   * exportObject automatically.
+   */
+ public class DGCImpl
+     extends UnicastServerRef implements DGC {
+ 
+     private static final long LEASE_VALUE = 600000L;
+     // leaseCache caches a LeaseRecord associated with a vmid
+     private Hashtable leaseCache = new Hashtable();
+ 
+ public DGCImpl() throws RemoteException {
+     	super(new ObjID(ObjID.DGC_ID), 0, RMISocketFactory.getSocketFactory());
+ }
+ 
+ public Lease dirty(ObjID[] ids, long sequenceNum, Lease lease) throws RemoteException {
+ 	VMID vmid = lease.getVMID();
+     	if (vmid == null)
+     	    vmid = new VMID();
+     	long leaseValue = LEASE_VALUE;
+     	//long leaseValue = lease.getValue();
+     lease = new Lease(vmid, leaseValue);
+         synchronized(leaseCache){
+             LeaseRecord lr = (LeaseRecord)leaseCache.get(vmid);
+             if (lr != null)
+                 lr.reset(leaseValue);
+             else{
+                 lr = new LeaseRecord(vmid, leaseValue);
+                 leaseCache.put(vmid, lr);
+             }
+         }
+         
+ 	return (lease);
+ }
+ 
+ public void clean(ObjID[] ids, long sequenceNum, VMID vmid, boolean strong) throws RemoteException {
+   // Not implemented
+ }
+     
+   /**
+    * LeaseRecord associates a vmid to expireTime.
+    */
+   private static class LeaseRecord{
+     private VMID vmid;
+     private long expireTime;
+     
+     LeaseRecord(VMID vmid, long leaseValue){
+       this.vmid = vmid;
+       reset(leaseValue);
+     }
+     
+     // reset expireTime
+     void reset(long leaseValue){
+       long l = System.currentTimeMillis();
+       expireTime = l + leaseValue;
+     }
+ 
+     boolean isExpired(){
+       long l = System.currentTimeMillis();
+       if ( l > expireTime)
+ 	return true;
+       return false;
+     }
+         
+   } //End of LeaseRecord
+ 
+ } //End of DGCImpl
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/dgc/DGCImpl_Skel.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/dgc/DGCImpl_Skel.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/dgc/DGCImpl_Skel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/dgc/DGCImpl_Skel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,144 ----
+ /* DGCImpl_Skel.java
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ // Skel class generated by rmic - DO NOT EDIT!
+ 
+ package gnu.java.rmi.dgc;
+ 
+ public final class DGCImpl_Skel
+     implements java.rmi.server.Skeleton
+ {
+     private static final long interfaceHash = -669196253586618813L;
+     
+     private static final java.rmi.server.Operation[] operations = {
+         new java.rmi.server.Operation("void clean(java.rmi.server.ObjID[], long, java.rmi.dgc.VMID, boolean"),
+         new java.rmi.server.Operation("java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease")
+     };
+     
+     public java.rmi.server.Operation[] getOperations() {
+         return ((java.rmi.server.Operation[]) operations.clone());
+     }
+     
+     public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash) throws java.lang.Exception {
+         if (opnum < 0) {
+             if (hash == -5803803475088455571L) {
+                 opnum = 0;
+             }
+             else if (hash == -8139341527526761862L) {
+                 opnum = 1;
+             }
+             else {
+                 throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch");
+             }
+         }
+         else if (hash != interfaceHash) {
+             throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch");
+         }
+         
+         gnu.java.rmi.dgc.DGCImpl server = (gnu.java.rmi.dgc.DGCImpl)obj;
+         switch (opnum) {
+         case 0:
+         {
+             java.rmi.server.ObjID[] $param_0;
+             long $param_1;
+             java.rmi.dgc.VMID $param_2;
+             boolean $param_3;
+             try {
+                 java.io.ObjectInput in = call.getInputStream();
+                 $param_0 = (java.rmi.server.ObjID[])in.readObject();
+                 $param_1 = (long)in.readLong();
+                 $param_2 = (java.rmi.dgc.VMID)in.readObject();
+                 $param_3 = (boolean)in.readBoolean();
+                 
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             catch (java.lang.ClassCastException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             finally {
+                 call.releaseInputStream();
+             }
+             server.clean($param_0, $param_1, $param_2, $param_3);
+             try {
+                 java.io.ObjectOutput out = call.getResultStream(true);
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.MarshalException("error marshalling return", e);
+             }
+             break;
+         }
+         
+         case 1:
+         {
+             java.rmi.server.ObjID[] $param_0;
+             long $param_1;
+             java.rmi.dgc.Lease $param_2;
+             try {
+                 java.io.ObjectInput in = call.getInputStream();
+                 $param_0 = (java.rmi.server.ObjID[])in.readObject();
+                 $param_1 = (long)in.readLong();
+                 $param_2 = (java.rmi.dgc.Lease)in.readObject();
+                 
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             catch (java.lang.ClassCastException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             finally {
+                 call.releaseInputStream();
+             }
+             java.rmi.dgc.Lease $result = server.dirty($param_0, $param_1, $param_2);
+             try {
+                 java.io.ObjectOutput out = call.getResultStream(true);
+                 out.writeObject($result);
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.MarshalException("error marshalling return", e);
+             }
+             break;
+         }
+         
+         default:
+             throw new java.rmi.UnmarshalException("invalid method number");
+         }
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,158 ----
+ /* DGCImpl_Stub.java
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ // Stub class generated by rmic - DO NOT EDIT!
+ 
+ package gnu.java.rmi.dgc;
+ 
+ public final class DGCImpl_Stub
+     extends java.rmi.server.RemoteStub
+     implements java.rmi.dgc.DGC
+ {
+     private static final long serialVersionUID = 2L;
+     
+     private static final long interfaceHash = -669196253586618813L;
+     
+     private static boolean useNewInvoke;
+     
+     private static final java.rmi.server.Operation[] operations = {
+         new java.rmi.server.Operation("void clean(java.rmi.server.ObjID[], long, java.rmi.dgc.VMID, boolean)"),
+         new java.rmi.server.Operation("java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)")
+     };
+     
+     private static java.lang.reflect.Method $method_clean_0;
+     private static java.lang.reflect.Method $method_dirty_1;
+     
+     static {
+         try {
+             java.rmi.server.RemoteRef.class.getMethod("invoke", new java.lang.Class[] { java.rmi.Remote.class, java.lang.reflect.Method.class, java.lang.Object[].class, long.class });
+             useNewInvoke = true;
+             $method_clean_0 = gnu.java.rmi.dgc.DGCImpl.class.getMethod("clean", new java.lang.Class[] {java.rmi.server.ObjID[].class, long.class, java.rmi.dgc.VMID.class, boolean.class});
+             $method_dirty_1 = gnu.java.rmi.dgc.DGCImpl.class.getMethod("dirty", new java.lang.Class[] {java.rmi.server.ObjID[].class, long.class, java.rmi.dgc.Lease.class});
+             
+         }
+         catch (java.lang.NoSuchMethodException e) {
+             useNewInvoke = false;
+         }
+     }
+     
+     public DGCImpl_Stub() {
+         super();
+     }
+     public DGCImpl_Stub(java.rmi.server.RemoteRef ref) {
+         super(ref);
+     }
+     
+     public void clean(java.rmi.server.ObjID[] $param_0, long $param_1, java.rmi.dgc.VMID $param_2, boolean $param_3) throws java.rmi.RemoteException {
+         try {
+             if (useNewInvoke) {
+                 ref.invoke(this, $method_clean_0, new java.lang.Object[] {$param_0, new java.lang.Long($param_1), $param_2, Boolean.valueOf($param_3)}, -5803803475088455571L);
+             }
+             else {
+                 java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 0, interfaceHash);
+                 try {
+                     java.io.ObjectOutput out = call.getOutputStream();
+                     out.writeObject($param_0);
+                     out.writeLong($param_1);
+                     out.writeObject($param_2);
+                     out.writeBoolean($param_3);
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.MarshalException("error marshalling arguments", e);
+                 }
+                 ref.invoke(call);
+                 try {
+                     java.io.ObjectInput in = call.getInputStream();
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                 }
+                 finally {
+                     ref.done(call);
+                 }
+             }
+         }
+         catch (java.rmi.RemoteException e) {
+             throw e;
+         }
+         catch (java.lang.Exception e) {
+             throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+         }
+     }
+     
+     public java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[] $param_0, long $param_1, java.rmi.dgc.Lease $param_2) throws java.rmi.RemoteException {
+         try {
+             if (useNewInvoke) {
+                 java.lang.Object $result = ref.invoke(this, $method_dirty_1, new java.lang.Object[] {$param_0, new java.lang.Long($param_1), $param_2}, -8139341527526761862L);
+                 return ((java.rmi.dgc.Lease)$result);
+             }
+             else {
+                 java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 1, interfaceHash);
+                 try {
+                     java.io.ObjectOutput out = call.getOutputStream();
+                     out.writeObject($param_0);
+                     out.writeLong($param_1);
+                     out.writeObject($param_2);
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.MarshalException("error marshalling arguments", e);
+                 }
+                 ref.invoke(call);
+                 java.rmi.dgc.Lease $result;
+                 try {
+                     java.io.ObjectInput in = call.getInputStream();
+                     $result = (java.rmi.dgc.Lease)in.readObject();
+                     return ($result);
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                 }
+                 finally {
+                     ref.done(call);
+                 }
+             }
+         }
+         catch (java.rmi.RemoteException e) {
+             throw e;
+         }
+         catch (java.lang.Exception e) {
+             throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+         }
+     }
+     
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/dgc/package.html gcc-4.1.0/libjava/classpath/gnu/java/rmi/dgc/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/dgc/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/dgc/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.rmi.dgc package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.rmi.dgc</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/package.html gcc-4.1.0/libjava/classpath/gnu/java/rmi/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.rmi package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.rmi</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/registry/RegistryImpl.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/registry/RegistryImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/registry/RegistryImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/registry/RegistryImpl.java	Mon Feb  6 22:41:34 2006
***************
*** 0 ****
--- 1,154 ----
+ /* RegistryImpl.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005, 2006
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.rmi.registry;
+ 
+ import gnu.java.rmi.server.UnicastServerRef;
+ 
+ import java.rmi.AccessException;
+ import java.rmi.AlreadyBoundException;
+ import java.rmi.NotBoundException;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.registry.LocateRegistry;
+ import java.rmi.registry.Registry;
+ import java.rmi.server.ObjID;
+ import java.rmi.server.RMIClientSocketFactory;
+ import java.rmi.server.RMIServerSocketFactory;
+ import java.rmi.server.RMISocketFactory;
+ import java.rmi.server.UnicastRemoteObject;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ 
+ public class RegistryImpl
+ 	extends UnicastRemoteObject implements Registry {
+ 
+ private Hashtable bindings = new Hashtable();
+ 
+ public RegistryImpl(int port) throws RemoteException {
+ 	this(port, RMISocketFactory.getSocketFactory(), RMISocketFactory.getSocketFactory());
+ }
+ 
+ public RegistryImpl(int port, RMIClientSocketFactory cf, RMIServerSocketFactory sf) throws RemoteException {
+ 	super(new UnicastServerRef(new ObjID(ObjID.REGISTRY_ID), port, sf));
+ 	// The following is unnecessary, because UnicastRemoteObject export itself automatically.
+ 	//((UnicastServerRef)getRef()).exportObject(this);
+ }
+ 
+ public Remote lookup(String name) throws RemoteException, NotBoundException, AccessException {
+ 	Object obj = bindings.get(name);
+ 	if (obj == null) {
+ 		throw new NotBoundException(name);
+ 	}
+ 	return ((Remote)obj);
+ }
+ 
+ public void bind(String name, Remote obj) throws RemoteException, AlreadyBoundException, AccessException {
+ 	if (bindings.containsKey(name)) {
+ 		throw new AlreadyBoundException(name);
+ 	}
+ 	bindings.put(name, obj);
+ }
+ 
+ public void unbind(String name) throws RemoteException, NotBoundException, AccessException {
+ 	Object obj = bindings.remove(name);
+ 	if (obj == null) {
+ 		throw new NotBoundException(name);
+ 	}
+ }
+ 
+ public void rebind(String name, Remote obj) throws RemoteException, AccessException {
+ 	bindings.put(name, obj);
+ }
+ 
+ public String[] list() throws RemoteException, AccessException {
+ 	int size = bindings.size();
+ 	String[] strings = new String[size];
+ 	Enumeration e = bindings.keys();
+ 	for (int i = 0; i < size; i++) {
+ 		strings[i] = (String)e.nextElement();
+ 	}
+ 	return (strings);
+ }
+ 
+ public static void version() {
+ 	System.out.println("rmiregistry ("
+ 			   + System.getProperty("java.vm.name")
+ 			   + ") "
+ 			   + System.getProperty("java.vm.version"));
+ 	System.out.println("Copyright 2006 Free Software Foundation, Inc.");
+ 	System.out.println("This is free software; see the source for copying conditions.  There is NO");
+ 	System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.");
+ 	System.exit(0);
+ }
+ 
+ public static void help() {
+ 	System.out.println(
+ "Usage: rmiregistry [OPTION | PORT]\n" +
+ "\n" +
+ "    --help                Print this help, then exit\n" +
+ "    --version             Print version number, then exit\n");
+ 	System.exit(0);
+ }
+ 
+ public static void main(String[] args) {
+ 	int port = Registry.REGISTRY_PORT;
+ 	if (args.length > 0) {
+ 		if (args[0].equals("--version")) {
+ 			version();
+ 		}
+ 		else if (args[0].equals("--help")) {
+ 			help();
+ 		}
+ 		try {
+ 			port = Integer.parseInt(args[0]);
+ 		}
+ 		catch (NumberFormatException _) {
+ 			System.err.println("Bad port number - using default");
+ 		}
+ 	}
+ 
+ 	try {
+ 		Registry impl = LocateRegistry.createRegistry(port);
+ 	}
+ 	catch (RemoteException _) {
+ 		System.err.println("Registry failed");
+ 	}
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/registry/RegistryImpl_Skel.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/registry/RegistryImpl_Skel.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/registry/RegistryImpl_Skel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/registry/RegistryImpl_Skel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,227 ----
+ /* RegistryImpl_Skel.java
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ // Skel class generated by rmic - DO NOT EDIT!
+ 
+ package gnu.java.rmi.registry;
+ 
+ public final class RegistryImpl_Skel
+     implements java.rmi.server.Skeleton
+ {
+     private static final long interfaceHash = 4905912898345647071L;
+     
+     private static final java.rmi.server.Operation[] operations = {
+         new java.rmi.server.Operation("void bind(java.lang.String, java.rmi.Remote"),
+         new java.rmi.server.Operation("java.lang.String[] list("),
+         new java.rmi.server.Operation("java.rmi.Remote lookup(java.lang.String"),
+         new java.rmi.server.Operation("void rebind(java.lang.String, java.rmi.Remote"),
+         new java.rmi.server.Operation("void unbind(java.lang.String")
+     };
+     
+     public java.rmi.server.Operation[] getOperations() {
+         return ((java.rmi.server.Operation[]) operations.clone());
+     }
+     
+     public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash) throws java.lang.Exception {
+         if (opnum < 0) {
+             if (hash == 7583982177005850366L) {
+                 opnum = 0;
+             }
+             else if (hash == 2571371476350237748L) {
+                 opnum = 1;
+             }
+             else if (hash == -7538657168040752697L) {
+                 opnum = 2;
+             }
+             else if (hash == -8381844669958460146L) {
+                 opnum = 3;
+             }
+             else if (hash == 7305022919901907578L) {
+                 opnum = 4;
+             }
+             else {
+                 throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch");
+             }
+         }
+         else if (hash != interfaceHash) {
+             throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch");
+         }
+         
+         gnu.java.rmi.registry.RegistryImpl server = (gnu.java.rmi.registry.RegistryImpl)obj;
+         switch (opnum) {
+         case 0:
+         {
+             java.lang.String $param_0;
+             java.rmi.Remote $param_1;
+             try {
+                 java.io.ObjectInput in = call.getInputStream();
+                 $param_0 = (java.lang.String)in.readObject();
+                 $param_1 = (java.rmi.Remote)in.readObject();
+                 
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             catch (java.lang.ClassCastException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             finally {
+                 call.releaseInputStream();
+             }
+             server.bind($param_0, $param_1);
+             try {
+                 java.io.ObjectOutput out = call.getResultStream(true);
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.MarshalException("error marshalling return", e);
+             }
+             break;
+         }
+         
+         case 1:
+         {
+             try {
+                 java.io.ObjectInput in = call.getInputStream();
+                 
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             finally {
+                 call.releaseInputStream();
+             }
+             java.lang.String[] $result = server.list();
+             try {
+                 java.io.ObjectOutput out = call.getResultStream(true);
+                 out.writeObject($result);
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.MarshalException("error marshalling return", e);
+             }
+             break;
+         }
+         
+         case 2:
+         {
+             java.lang.String $param_0;
+             try {
+                 java.io.ObjectInput in = call.getInputStream();
+                 $param_0 = (java.lang.String)in.readObject();
+                 
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             catch (java.lang.ClassCastException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             finally {
+                 call.releaseInputStream();
+             }
+             java.rmi.Remote $result = server.lookup($param_0);
+             try {
+                 java.io.ObjectOutput out = call.getResultStream(true);
+                 out.writeObject($result);
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.MarshalException("error marshalling return", e);
+             }
+             break;
+         }
+         
+         case 3:
+         {
+             java.lang.String $param_0;
+             java.rmi.Remote $param_1;
+             try {
+                 java.io.ObjectInput in = call.getInputStream();
+                 $param_0 = (java.lang.String)in.readObject();
+                 $param_1 = (java.rmi.Remote)in.readObject();
+                 
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             catch (java.lang.ClassCastException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             finally {
+                 call.releaseInputStream();
+             }
+             server.rebind($param_0, $param_1);
+             try {
+                 java.io.ObjectOutput out = call.getResultStream(true);
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.MarshalException("error marshalling return", e);
+             }
+             break;
+         }
+         
+         case 4:
+         {
+             java.lang.String $param_0;
+             try {
+                 java.io.ObjectInput in = call.getInputStream();
+                 $param_0 = (java.lang.String)in.readObject();
+                 
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             catch (java.lang.ClassCastException e) {
+                 throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+             }
+             finally {
+                 call.releaseInputStream();
+             }
+             server.unbind($param_0);
+             try {
+                 java.io.ObjectOutput out = call.getResultStream(true);
+             }
+             catch (java.io.IOException e) {
+                 throw new java.rmi.MarshalException("error marshalling return", e);
+             }
+             break;
+         }
+         
+         default:
+             throw new java.rmi.UnmarshalException("invalid method number");
+         }
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/registry/RegistryImpl_Stub.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/registry/RegistryImpl_Stub.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/registry/RegistryImpl_Stub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/registry/RegistryImpl_Stub.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,293 ----
+ /* RegistryImpl_Stub.java
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ // Stub class generated by rmic - DO NOT EDIT!
+ 
+ package gnu.java.rmi.registry;
+ 
+ public final class RegistryImpl_Stub
+     extends java.rmi.server.RemoteStub
+     implements java.rmi.registry.Registry
+ {
+     private static final long serialVersionUID = 2L;
+     
+     private static final long interfaceHash = 4905912898345647071L;
+     
+     private static boolean useNewInvoke;
+     
+     private static final java.rmi.server.Operation[] operations = {
+         new java.rmi.server.Operation("void bind(java.lang.String, java.rmi.Remote)"),
+         new java.rmi.server.Operation("java.lang.String[] list()"),
+         new java.rmi.server.Operation("java.rmi.Remote lookup(java.lang.String)"),
+         new java.rmi.server.Operation("void rebind(java.lang.String, java.rmi.Remote)"),
+         new java.rmi.server.Operation("void unbind(java.lang.String)")
+     };
+     
+     private static java.lang.reflect.Method $method_bind_0;
+     private static java.lang.reflect.Method $method_list_1;
+     private static java.lang.reflect.Method $method_lookup_2;
+     private static java.lang.reflect.Method $method_rebind_3;
+     private static java.lang.reflect.Method $method_unbind_4;
+     
+     static {
+         try {
+             java.rmi.server.RemoteRef.class.getMethod("invoke", new java.lang.Class[] { java.rmi.Remote.class, java.lang.reflect.Method.class, java.lang.Object[].class, long.class });
+             useNewInvoke = false;
+             $method_bind_0 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("bind", new java.lang.Class[] {java.lang.String.class, java.rmi.Remote.class});
+             $method_list_1 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("list", new java.lang.Class[] {});
+             $method_lookup_2 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("lookup", new java.lang.Class[] {java.lang.String.class});
+             $method_rebind_3 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("rebind", new java.lang.Class[] {java.lang.String.class, java.rmi.Remote.class});
+             $method_unbind_4 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("unbind", new java.lang.Class[] {java.lang.String.class});
+             
+         }
+         catch (java.lang.NoSuchMethodException e) {
+             useNewInvoke = false;
+         }
+     }
+     
+     public RegistryImpl_Stub() {
+         super();
+     }
+     public RegistryImpl_Stub(java.rmi.server.RemoteRef ref) {
+         super(ref);
+     }
+     
+     public void bind(java.lang.String $param_0, java.rmi.Remote $param_1) throws java.rmi.AccessException, java.rmi.AlreadyBoundException, java.rmi.RemoteException {
+         try {
+             if (useNewInvoke) {
+                 ref.invoke(this, $method_bind_0, new java.lang.Object[] {$param_0, $param_1}, 7583982177005850366L);
+             }
+             else {
+                 java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 0, interfaceHash);
+                 try {
+                     java.io.ObjectOutput out = call.getOutputStream();
+                     out.writeObject($param_0);
+                     out.writeObject($param_1);
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.MarshalException("error marshalling arguments", e);
+                 }
+                 ref.invoke(call);
+                 try {
+                     java.io.ObjectInput in = call.getInputStream();
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                 }
+                 finally {
+                     ref.done(call);
+                 }
+             }
+         }
+         catch (java.rmi.AccessException e) {
+             throw e;
+         }
+         catch (java.rmi.AlreadyBoundException e) {
+             throw e;
+         }
+         catch (java.rmi.RemoteException e) {
+             throw e;
+         }
+         catch (java.lang.Exception e) {
+             throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+         }
+     }
+     
+     public java.lang.String[] list() throws java.rmi.AccessException, java.rmi.RemoteException {
+         try {
+             if (useNewInvoke) {
+                 java.lang.Object $result = ref.invoke(this, $method_list_1, null, 2571371476350237748L);
+                 return ((java.lang.String[])$result);
+             }
+             else {
+                 java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 1, interfaceHash);
+                 try {
+                     java.io.ObjectOutput out = call.getOutputStream();
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.MarshalException("error marshalling arguments", e);
+                 }
+                 ref.invoke(call);
+                 java.lang.String[] $result;
+                 try {
+                     java.io.ObjectInput in = call.getInputStream();
+                     $result = (java.lang.String[])in.readObject();
+                     return ($result);
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                 }
+                 finally {
+                     ref.done(call);
+                 }
+             }
+         }
+         catch (java.rmi.AccessException e) {
+             throw e;
+         }
+         catch (java.rmi.RemoteException e) {
+             throw e;
+         }
+         catch (java.lang.Exception e) {
+             throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+         }
+     }
+     
+     public java.rmi.Remote lookup(java.lang.String $param_0) throws java.rmi.AccessException, java.rmi.NotBoundException, java.rmi.RemoteException {
+         try {
+             if (useNewInvoke) {
+                 java.lang.Object $result = ref.invoke(this, $method_lookup_2, new java.lang.Object[] {$param_0}, -7538657168040752697L);
+                 return ((java.rmi.Remote)$result);
+             }
+             else {
+                 java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 2, interfaceHash);
+                 try {
+                     java.io.ObjectOutput out = call.getOutputStream();
+                     out.writeObject($param_0);
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.MarshalException("error marshalling arguments", e);
+                 }
+                 ref.invoke(call);
+                 java.rmi.Remote $result;
+                 try {
+                     java.io.ObjectInput in = call.getInputStream();
+                     $result = (java.rmi.Remote)in.readObject();
+                     return ($result);
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                 }
+                 finally {
+                     ref.done(call);
+                 }
+             }
+         }
+         catch (java.rmi.AccessException e) {
+             throw e;
+         }
+         catch (java.rmi.NotBoundException e) {
+             throw e;
+         }
+         catch (java.rmi.RemoteException e) {
+             throw e;
+         }
+         catch (java.lang.Exception e) {
+             throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+         }
+     }
+     
+     public void rebind(java.lang.String $param_0, java.rmi.Remote $param_1) throws java.rmi.AccessException, java.rmi.RemoteException {
+         try {
+             if (useNewInvoke) {
+                 ref.invoke(this, $method_rebind_3, new java.lang.Object[] {$param_0, $param_1}, -8381844669958460146L);
+             }
+             else {
+                 java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 3, interfaceHash);
+                 try {
+                     java.io.ObjectOutput out = call.getOutputStream();
+                     out.writeObject($param_0);
+                     out.writeObject($param_1);
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.MarshalException("error marshalling arguments", e);
+                 }
+                 ref.invoke(call);
+                 try {
+                     java.io.ObjectInput in = call.getInputStream();
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                 }
+                 finally {
+                     ref.done(call);
+                 }
+             }
+         }
+         catch (java.rmi.AccessException e) {
+             throw e;
+         }
+         catch (java.rmi.RemoteException e) {
+             throw e;
+         }
+         catch (java.lang.Exception e) {
+             throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+         }
+     }
+     
+     public void unbind(java.lang.String $param_0) throws java.rmi.AccessException, java.rmi.NotBoundException, java.rmi.RemoteException {
+         try {
+             if (useNewInvoke) {
+                 ref.invoke(this, $method_unbind_4, new java.lang.Object[] {$param_0}, 7305022919901907578L);
+             }
+             else {
+                 java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 4, interfaceHash);
+                 try {
+                     java.io.ObjectOutput out = call.getOutputStream();
+                     out.writeObject($param_0);
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.MarshalException("error marshalling arguments", e);
+                 }
+                 ref.invoke(call);
+                 try {
+                     java.io.ObjectInput in = call.getInputStream();
+                 }
+                 catch (java.io.IOException e) {
+                     throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                 }
+                 finally {
+                     ref.done(call);
+                 }
+             }
+         }
+         catch (java.rmi.AccessException e) {
+             throw e;
+         }
+         catch (java.rmi.NotBoundException e) {
+             throw e;
+         }
+         catch (java.rmi.RemoteException e) {
+             throw e;
+         }
+         catch (java.lang.Exception e) {
+             throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+         }
+     }
+     
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/registry/package.html gcc-4.1.0/libjava/classpath/gnu/java/rmi/registry/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/registry/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/registry/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.rmi.registry package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.rmi.registry</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/ConnectionRunnerPool.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/ConnectionRunnerPool.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/ConnectionRunnerPool.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/ConnectionRunnerPool.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,156 ----
+ /* gnu.java.rmi.server.ConnectionRunnerPool
+    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ 
+ //Should I generalize this class?
+ 
+ class ConnectionRunnerPool
+ {
+   
+   public static 
+     class ConnectionRunner extends Thread{
+       private UnicastConnection conn;
+       private volatile boolean exiting = false;
+       
+       public ConnectionRunner(ThreadGroup group, String id){
+         super(group, id);
+       }
+       
+       public synchronized void run(){
+         while(!exiting){
+ 	  if(conn == null)
+ 	    try{
+ 	      wait();
+ 	    }catch(InterruptedException e){
+ 	      continue;
+ 	    }
+ 	  else{
+ 	    conn.run();
+ 	    conn = null;
+ 	    synchronized(ConnectionRunnerPool.class){
+ 	      freelist.add(this);
+ 	      if(freelist.size() == 1)
+ 		ConnectionRunnerPool.class.notifyAll();
+ 	    }
+ 	  }    
+         }
+       }
+       
+       public synchronized void dispatch(UnicastConnection conn){
+         this.conn = conn;
+         notify();
+       }
+       
+       void exit(){
+         exiting = true;
+         if(conn != null)
+ 	  try{
+ 	    join(500);
+ 	  }catch(InterruptedException e){}
+         interrupt();
+       }
+       
+     }
+   
+   // Should this value equal to number of CPU?
+   private static int size = 5;
+   private static int max_size = 10;
+   
+   // Package-private to avoid a trampoline.
+   static ArrayList freelist;
+   
+   private static ThreadGroup group = new ThreadGroup("pool");
+   
+   static {
+     ConnectionRunner[] pools = new ConnectionRunner[size];
+     for(int i = 0; i < pools.length; i++){
+       pools[i] = new ConnectionRunner(group, new Integer(i).toString());
+       pools[i].setContextClassLoader(Thread.currentThread().getContextClassLoader());
+       pools[i].start();
+     }
+     freelist = new ArrayList(Arrays.asList(pools));
+   }
+   
+   public static void setSize(int size_){
+     size = size_;
+   }
+   
+   public static void setMaxSize(int size){
+     max_size = size;
+   }
+   
+   private static synchronized ConnectionRunner getConnectionRunner()
+   {
+     if(freelist.size() == 0){
+       if(size < max_size){
+ 	++size;
+ 	ConnectionRunner a = new ConnectionRunner(group, new Integer(size).toString());
+ 	a.start();
+ 	freelist.add(a);
+       }else
+ 	while(freelist.size() == 0)
+ 	  try{
+ 	    ConnectionRunnerPool.class.wait();
+ 	  }catch(InterruptedException e){}
+     }
+     
+     // always let the first in pool most busy or other scheduling plan??
+     ConnectionRunner a = (ConnectionRunner)freelist.get(0);
+     freelist.remove(a);
+     return a;
+   }
+   
+   public static void dispatchConnection(UnicastConnection conn)
+   {
+     ConnectionRunner r = getConnectionRunner();
+     r.dispatch(conn);
+   }
+   
+   public static void exit()
+   {
+     Thread[] list = new Thread[group.activeCount()];
+     group.enumerate(list);
+     for(int i = 0; i < list.length; i++)
+       ((ConnectionRunner)list[i]).exit();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/ProtocolConstants.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/ProtocolConstants.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/ProtocolConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/ProtocolConstants.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* ProtocolConstants.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.rmi.server;
+ 
+ public interface ProtocolConstants
+ {
+   int PROTOCOL_HEADER = 0x4a524d49; // JRMI
+   int PROTOCOL_VERSION = 2;
+ 
+   int STREAM_PROTOCOL = 0x4b;
+   int SINGLE_OP_PROTOCOL = 0x4c;
+   int MULTIPLEX_PROTOCOL = 0x4d;
+ 
+   int PROTOCOL_ACK = 0x4e;
+   int PROTOCOL_NACK = 0x4f;
+ 
+   int MESSAGE_CALL = 0x50;
+   int MESSAGE_CALL_ACK = 0x51;
+   int MESSAGE_PING = 0x52;
+   int MESSAGE_PING_ACK = 0x53;
+   int MESSAGE_DGCACK = 0x54;
+ 
+   int RETURN_ACK = 0x01;
+   int RETURN_NACK = 0x02;
+ 
+   int DEFAULT_PROTOCOL = STREAM_PROTOCOL;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIClassLoaderImpl.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIClassLoaderImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIClassLoaderImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIClassLoaderImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,350 ----
+ /* RMIClassLoaderImpl.java -- FIXME: briefly describe file purpose
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.net.URLClassLoader;
+ import java.rmi.server.RMIClassLoaderSpi;
+ import java.util.ArrayList;
+ import java.util.Hashtable;
+ import java.util.Map;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * The default implementation of {@link java.rmi.server.RMIClassLoaderSpi}.
+  *
+  * @author Roman Kennke (kennke@aicas.com)
+  */
+ public class RMIClassLoaderImpl extends RMIClassLoaderSpi
+ {
+   private static class MyClassLoader extends URLClassLoader
+   {
+     // Package-private to avoid a trampoline constructor.
+     MyClassLoader (URL[] urls, ClassLoader parent, String annotation)
+     {
+       super (urls, parent);
+       this.annotation = annotation;
+     }
+ 
+     private MyClassLoader (URL[] urls, ClassLoader parent)
+     {
+       super (urls, parent);
+       this.annotation = urlToAnnotation (urls);
+     }
+ 
+     public static String urlToAnnotation (URL[] urls)
+     {
+       if (urls.length == 0)
+         return null;
+ 
+       StringBuffer annotation = new StringBuffer (64 * urls.length);
+ 
+       for (int i = 0; i < urls.length; i++)
+       {
+         annotation.append (urls [i].toExternalForm());
+         annotation.append (' ');
+       }
+ 
+       return annotation.toString();
+     }
+ 
+     public final String getClassAnnotation()
+     {
+       return annotation;
+     }
+ 
+     private final String annotation;
+   }
+ 
+   /** 
+    * This class is used to identify a cached classloader by its codebase and 
+    * the context classloader that is its parent.
+    */  
+   private static class CacheKey
+   {
+      private String mCodeBase;
+      private ClassLoader mContextClassLoader;
+     
+      public CacheKey (String theCodebase, ClassLoader theContextClassLoader)
+      {
+        mCodeBase = theCodebase;
+        mContextClassLoader = theContextClassLoader;
+      }
+     
+     /**
+      * @return true if the codebase and the context classloader are equal
+      */
+     public boolean equals (Object theOther)
+     {
+       if (theOther instanceof CacheKey)
+       {
+         CacheKey key = (CacheKey) theOther;
+     
+         return (equals (this.mCodeBase,key.mCodeBase)
+                 && equals (this.mContextClassLoader, key.mContextClassLoader));
+         }
+       return false;
+     }
+     
+     /**
+      * Test if the two objects are equal or both null.
+      * @param theOne
+      * @param theOther
+      * @return
+      */
+     private boolean equals (Object theOne, Object theOther)
+     {
+       return theOne != null ? theOne.equals (theOther) : theOther == null;
+     }
+ 
+     /**
+      * @return hashCode  
+      */
+     public int hashCode()
+     {
+       return ((mCodeBase != null           ? mCodeBase.hashCode()           :  0) 
+               ^(mContextClassLoader != null ? mContextClassLoader.hashCode() : -1));
+     }
+ 
+     public String toString()
+     {
+       return "[" + mCodeBase + "," + mContextClassLoader + "]"; 
+     }
+ 
+   }
+ 
+   private static RMIClassLoaderImpl instance = null;
+ 
+   private static Map cacheLoaders; //map annotations to loaders
+   private static Map cacheAnnotations; //map loaders to annotations
+   //class loader for defaultAnnotation
+   private static MyClassLoader defaultClassLoader;
+ 
+   //defaultAnnotation is got from system property
+   // "java.rmi.server.defaultAnnotation"
+   private static String defaultAnnotation;
+ 
+   //URL object for defaultAnnotation
+   private static URL defaultCodebase;
+ 
+   static
+   {
+     // 89 is a nice prime number for Hashtable initial capacity
+     cacheLoaders = new Hashtable (89);
+     cacheAnnotations = new Hashtable (89);
+ 
+     defaultAnnotation = System.getProperty ("java.rmi.server.defaultAnnotation");
+ 
+     try
+       {
+         if (defaultAnnotation != null)
+           defaultCodebase = new URL (defaultAnnotation);
+       }
+     catch (Exception _)
+       {
+         defaultCodebase = null;
+       }
+ 
+     if (defaultCodebase != null)
+       {
+         defaultClassLoader = new MyClassLoader (new URL[] { defaultCodebase }, null,
+                                                defaultAnnotation);
+         cacheLoaders.put (new CacheKey (defaultAnnotation,
+                                         Thread.currentThread().getContextClassLoader()),
+                                         defaultClassLoader);
+       }
+     }
+ 
+   /**
+    * This is a singleton class and may only be instantiated once from within
+    * the {@link #getInstance} method.
+    */
+   private RMIClassLoaderImpl()
+   {
+   }
+ 
+   /**
+    * Returns an instance of RMIClassLoaderImpl.
+    *
+    * @return an instance of RMIClassLoaderImpl
+    */
+   public static RMIClassLoaderSpi getInstance()
+   {
+     if (instance == null)
+       instance = new RMIClassLoaderImpl();
+     return instance;
+   }
+ 
+   public Class loadClass(String codeBase, String name,
+                          ClassLoader defaultLoader)
+     throws MalformedURLException, ClassNotFoundException
+   {
+     ClassLoader loader;
+     if (defaultLoader == null)
+       loader = Thread.currentThread().getContextClassLoader();
+     else
+       loader = defaultLoader;
+ 
+     //try context class loader first
+     try 
+       {
+         return Class.forName(name, false, loader);
+       }
+     catch (ClassNotFoundException e)
+       {
+         // class not found in the local classpath
+       }
+     
+     if (codeBase.length() == 0) //==""
+       {
+         loader = defaultClassLoader;
+       }
+     else
+       {
+         loader = getClassLoader(codeBase);
+       }
+ 
+     if (loader == null)
+       {
+         //do not throw NullPointerException
+         throw new ClassNotFoundException ("Could not find class (" + name +
+                                           ") at codebase (" + codeBase + ")");
+       }
+ 
+     return Class.forName(name, false, loader);
+   }
+ 
+   public Class loadProxyClass(String codeBase, String[] interfaces,
+                               ClassLoader defaultLoader)
+       throws MalformedURLException, ClassNotFoundException
+   {
+     // FIXME: Implement this.
+     return null;
+   }
+ 
+   /**
+    * Gets a classloader for the given codebase and with the current
+    * context classloader as parent.
+    * 
+    * @param codebase
+    * 
+    * @return a classloader for the given codebase
+    * 
+    * @throws MalformedURLException if the codebase contains a malformed URL
+    */
+   public ClassLoader getClassLoader(String codebase)
+     throws MalformedURLException
+   {
+     ClassLoader loader;
+     CacheKey loaderKey = new CacheKey
+     (codebase, Thread.currentThread().getContextClassLoader());
+     loader = (ClassLoader) cacheLoaders.get (loaderKey);
+     
+     if (loader == null)
+       {
+         //create an entry in cacheLoaders mapping a loader to codebases.
+         // codebases are separated by " "
+         StringTokenizer tok = new StringTokenizer (codebase, " ");
+         ArrayList urls = new ArrayList();
+         
+         while (tok.hasMoreTokens())
+           urls.add (new URL(tok.nextToken()));
+         
+         loader = new MyClassLoader((URL[]) urls.toArray(new URL [urls.size()]),
+                                  Thread.currentThread().getContextClassLoader(),
+                                  codebase);
+         cacheLoaders.put (loaderKey, loader);
+       }
+     
+     return loader;
+   }
+ 
+   /**
+    * Returns a string representation of the network location where a remote
+    * endpoint can get the class-definition of the given class.
+    *
+    * @param cl
+    *
+    * @return a space seperated list of URLs where the class-definition
+    * of cl may be found
+    */
+   public String getClassAnnotation(Class cl)
+   {
+     ClassLoader loader = cl.getClassLoader();
+     
+     if (loader == null
+         || loader == ClassLoader.getSystemClassLoader())
+       {
+         return System.getProperty ("java.rmi.server.codebase");
+       }
+     
+     if (loader instanceof MyClassLoader)
+       {
+         return ((MyClassLoader) loader).getClassAnnotation();
+       }
+     
+     String s = (String) cacheAnnotations.get (loader);
+     
+     if (s != null)
+       return s;
+     
+     if (loader instanceof URLClassLoader)
+       {
+         URL[] urls = ((URLClassLoader) loader).getURLs();
+         
+         if (urls.length == 0)
+           return null;
+         
+         StringBuffer annotation = new StringBuffer (64 * urls.length);
+         
+         for (int i = 0; i < urls.length; i++)
+           {
+             annotation.append (urls [i].toExternalForm());
+             annotation.append (' ');
+           }
+         
+         s = annotation.toString();
+         cacheAnnotations.put (loader, s);
+         return s;
+       }
+ 
+     return System.getProperty ("java.rmi.server.codebase");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIDefaultSocketFactory.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIDefaultSocketFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIDefaultSocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIDefaultSocketFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* RMIDefaultSocketFactory.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.io.IOException;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ import java.rmi.server.RMISocketFactory;
+ 
+ public class RMIDefaultSocketFactory
+ 	extends RMISocketFactory {
+ 
+ public RMIDefaultSocketFactory() {
+ }
+ 
+ public Socket createSocket(String host, int port) throws IOException {
+ 	return (new Socket(host, port));
+ }
+ 
+ public ServerSocket createServerSocket(int port) throws IOException {
+ 	return (new ServerSocket(port));
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIHashes.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIHashes.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIHashes.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIHashes.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* RMIHashes.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import gnu.java.lang.reflect.TypeSignature;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.DataOutputStream;
+ import java.lang.reflect.Method;
+ import java.security.MessageDigest;
+ 
+ public class RMIHashes
+ {
+   //There're other places using DigestOutputStream to generate hash in classpath, but I think the way I used
+   //here is more efficient, anyway, you can switch to DigestOutputStream by doing like "//or:" comments say.
+   
+   //or:add this statement: private static final NullOutputStream nullOutputStream = new NullOutputStream ();
+   public static long getMethodHash(Method meth)
+   {
+     //Object Serialization Spec 8.3
+     try
+     {
+         MessageDigest md = MessageDigest.getInstance ("SHA");
+         //or:remove this statement: DigestOutputStream digest_out = new DigestOutputStream (nullOutputStream, md);
+         ByteArrayOutputStream digest_out = new ByteArrayOutputStream();
+         DataOutputStream data_out = new DataOutputStream (digest_out);
+         
+         StringBuffer sbuf = new StringBuffer();
+         sbuf.append(meth.getName());
+         sbuf.append('(');
+         Class params[] = meth.getParameterTypes();
+         for(int i = 0; i < params.length; i++)
+             sbuf.append(TypeSignature.getEncodingOfClass(params[i]));
+         sbuf.append(')');
+         Class rcls = meth.getReturnType();
+         if(rcls != Void.TYPE)
+             sbuf.append(TypeSignature.getEncodingOfClass(rcls));
+         else
+             sbuf.append('V');
+         
+         data_out.writeUTF (sbuf.toString());
+         data_out.flush();
+         data_out.close ();
+ 
+         md.update(digest_out.toByteArray()); //or:remove this statement
+         byte[] sha = md.digest ();
+         long result = 0;
+         int len = sha.length < 8 ? sha.length : 8;
+         for (int i=0; i < len; i++)
+             result += (long)(sha[i] & 0xFF) << (8 * i);
+         return result;
+     }catch(Exception _){
+         return -1L;
+         }
+   }
+ 
+   public static long getInterfaceHash(Class clazz)
+   {
+     return clazz.hashCode ();
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIIncomingThread.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIIncomingThread.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIIncomingThread.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIIncomingThread.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* RMIIncomingThread.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.rmi.server; 
+ 
+ public class RMIIncomingThread extends Thread {  
+ 	
+ 	private String clientHost = null;
+ 	
+ 	public RMIIncomingThread(Runnable runnable, String s_clientHost) {
+ 		super(runnable);
+ 		clientHost = s_clientHost;		
+ 	}
+ 	
+ 	public String toString() {
+ 		return "RMIIncoming from " + clientHost + " " + super.toString();
+ 	}
+ 	
+ 	public String getClientHost() {
+ 		return clientHost;
+ 	}
+ 	
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIObjectInputStream.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIObjectInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIObjectInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIObjectInputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,126 ----
+ /* RMIObjectInputStream.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectStreamClass;
+ import java.lang.reflect.Proxy;
+ import java.net.MalformedURLException;
+ import java.rmi.server.RMIClassLoader;
+ 
+ public class RMIObjectInputStream
+ 	extends ObjectInputStream {
+ 
+ public RMIObjectInputStream(InputStream strm) throws IOException {
+ 	super(strm);
+ 	enableResolveObject(true);
+ }
+ 
+ protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
+ 	String annotation = (String)getAnnotation();
+ 	
+ 	try {
+ 		if(annotation == null)
+ 		    return (RMIClassLoader.loadClass(desc.getName()));
+ 		else
+ 		    return (RMIClassLoader.loadClass(annotation, desc.getName()));
+ 	}
+ 	catch (MalformedURLException _) {
+ 		throw new ClassNotFoundException(desc.getName());
+ 	}
+ }
+ 
+ //Separate it for override by MarshalledObject
+ protected Object getAnnotation()
+ 	    throws IOException, ClassNotFoundException
+ {
+     return readObject();
+ }
+ 	
+ protected Class resolveProxyClass(String intfs[])
+         throws IOException, ClassNotFoundException
+ {
+     String annotation = (String)getAnnotation();
+ 	
+     Class clss[] = new Class[intfs.length];
+     if(annotation == null)
+         clss[0] = RMIClassLoader.loadClass(intfs[0]);
+     else
+         clss[0] = RMIClassLoader.loadClass(annotation, intfs[0]);
+     
+     //assume all interfaces can be loaded by the same classloader
+     ClassLoader loader = clss[0].getClassLoader();
+     for (int i = 0; i < intfs.length; i++)
+         clss[i] = Class.forName(intfs[i], false, loader);
+         
+     try {
+     return Proxy.getProxyClass(loader, clss);
+ 	} catch (IllegalArgumentException e) {
+ 	    throw new ClassNotFoundException(null, e);
+ 	}  
+ }
+ 
+ protected Object readValue(Class valueClass) throws IOException, ClassNotFoundException {
+     if(valueClass.isPrimitive()){
+         if(valueClass == Boolean.TYPE)
+             return Boolean.valueOf(readBoolean());
+         if(valueClass == Byte.TYPE)
+             return new Byte(readByte());
+         if(valueClass == Character.TYPE)
+             return new Character(readChar());
+         if(valueClass == Short.TYPE)
+             return new Short(readShort());
+         if(valueClass == Integer.TYPE)
+             return new Integer(readInt());
+         if(valueClass == Long.TYPE)
+             return new Long(readLong());
+         if(valueClass == Float.TYPE)
+             return new Float(readFloat());
+         if(valueClass == Double.TYPE)
+             return new Double(readDouble());
+         else
+             throw new Error("Unsupported primitive class: " + valueClass);
+     } else
+         return readObject();
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIObjectOutputStream.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIObjectOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIObjectOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIObjectOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,114 ----
+ /* RMIObjectOutputStream.java -
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.io.IOException;
+ import java.io.ObjectOutputStream;
+ import java.io.OutputStream;
+ import java.rmi.Remote;
+ import java.rmi.server.RMIClassLoader;
+ import java.rmi.server.RemoteStub;
+ 
+ public class RMIObjectOutputStream
+ 	extends ObjectOutputStream {
+ 
+ public RMIObjectOutputStream(OutputStream strm) throws IOException {
+ 	super(strm);
+ 	enableReplaceObject(true);
+ }
+ 
+ //Separate it for override by MarshalledObject
+ protected void setAnnotation(String annotation) throws IOException{
+     writeObject(annotation);
+ }
+ 
+ protected void annotateClass(Class cls) throws IOException {
+ 	setAnnotation(RMIClassLoader.getClassAnnotation(cls));
+ }
+ 
+ protected void annotateProxyClass(Class cls)
+         throws IOException
+ {
+     annotateClass(cls);
+ }
+     
+ protected Object replaceObject(Object obj)
+         throws IOException
+ {
+     if((obj instanceof Remote) && !(obj instanceof RemoteStub)){
+ 	    UnicastServerRef ref = UnicastServer.getExportedRef((Remote)obj);
+ 	    if (ref != null)
+ 		    return ref.getStub();
+     }
+     return obj;
+ }
+ 
+ protected void writeValue(Object value, Class valueClass) throws IOException{
+     if(valueClass.isPrimitive()){
+         if(valueClass == Boolean.TYPE)
+             writeBoolean(((Boolean)value).booleanValue());
+         else
+         if(valueClass == Byte.TYPE)
+             writeByte(((Byte)value).byteValue());
+         else
+         if(valueClass == Character.TYPE)
+             writeChar(((Character)value).charValue());
+         else
+         if(valueClass == Short.TYPE)
+             writeShort(((Short)value).shortValue());
+         else
+         if(valueClass == Integer.TYPE)
+             writeInt(((Integer)value).intValue());
+         else
+         if(valueClass == Long.TYPE)
+             writeLong(((Long)value).longValue());
+         else
+         if(valueClass == Float.TYPE)
+             writeFloat(((Float)value).floatValue());
+         else
+         if(valueClass == Double.TYPE)
+             writeDouble(((Double)value).doubleValue());
+         else
+             throw new Error("Unsupported primitive class: " + valueClass);
+     } else
+         writeObject(value);
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIVoidValue.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIVoidValue.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/RMIVoidValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/RMIVoidValue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /* RMIVoidValue.java --
+    Copyright (c) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.rmi.server;
+ 
+ /**
+  * Package private class used to indicate a void return type.
+  * INSTANCE is the only object of this class ever made.
+  */
+ final class RMIVoidValue
+ {
+   static RMIVoidValue INSTANCE = new RMIVoidValue();
+ 
+   private RMIVoidValue()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastConnection.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastConnection.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastConnection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,231 ----
+ /* UnicastConnection.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.BufferedOutputStream;
+ import java.io.DataInputStream;
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.net.Socket;
+ import java.rmi.RemoteException;
+ 
+ public class UnicastConnection 
+ 	implements Runnable, ProtocolConstants {
+ 
+ UnicastConnectionManager manager;
+ Socket sock;
+ DataInputStream din;
+ DataOutputStream dout;
+ ObjectInputStream oin;
+ ObjectOutputStream oout;
+ 
+ // reviveTime and expireTime make UnicastConnection pool-able
+ long reviveTime = 0;
+ long expireTime = Long.MAX_VALUE;
+ 
+ UnicastConnection(UnicastConnectionManager man, Socket sock) {
+ 	this.manager = man;
+ 	this.sock = sock;
+ }
+ 
+ void acceptConnection() throws IOException {
+ //System.out.println("Accepting connection on " + sock);
+     //Use BufferedXXXStream would be more efficient
+ 	din = new DataInputStream(new BufferedInputStream(sock.getInputStream()));
+ 	dout = new DataOutputStream(new BufferedOutputStream(sock.getOutputStream()));
+ 
+ 	int sig = din.readInt();
+ 	if (sig != PROTOCOL_HEADER) {
+ 		throw new IOException("bad protocol header");
+ 	}
+ 	short ver = din.readShort();
+ 	if (ver != PROTOCOL_VERSION) {
+ 		throw new IOException("bad protocol version");
+ 	}
+ 	int protocol = din.readUnsignedByte();
+ 	if (protocol != SINGLE_OP_PROTOCOL) {
+ 		// Send an ACK
+ 		dout.writeByte(PROTOCOL_ACK);
+ 
+ 		// Send my hostname and port
+ 		dout.writeUTF(manager.serverName);
+ 		dout.writeInt(manager.serverPort);
+ 		dout.flush();
+ 
+ 		// Read their hostname and port
+ 		String rhost = din.readUTF();
+ 		int rport = din.readInt();
+ 	}
+ 	// Okay, ready to roll ...
+ }
+ 
+ void makeConnection(int protocol) throws IOException {
+     //Use BufferedXXXStream would be more efficient
+ 	din = new DataInputStream(new BufferedInputStream(sock.getInputStream()));
+ 
+ 	dout = new DataOutputStream(new BufferedOutputStream(sock.getOutputStream()));
+ 
+ 	// Send header
+ 	dout.writeInt(PROTOCOL_HEADER);
+ 	dout.writeShort(PROTOCOL_VERSION);
+ 	dout.writeByte(protocol);
+     dout.flush();
+     
+ 	if (protocol != SINGLE_OP_PROTOCOL) {
+ 		// Get back ack.
+ 		int ack = din.readUnsignedByte();
+ 		if (ack != PROTOCOL_ACK) {
+ 			throw new RemoteException("Unsupported protocol");
+ 		}
+ 
+ 		// Read in host and port
+ 		String dicard_rhost = din.readUTF();
+ 		int discard_rport = din.readInt();
+ 
+ 		// Send them my endpoint
+ 		dout.writeUTF(manager.serverName);
+ 		dout.writeInt(manager.serverPort);
+ 		dout.flush();
+ 	}
+ 	// Okay, ready to roll ...
+ }
+ 
+ DataInputStream getDataInputStream() throws IOException {
+ 	return (din);
+ }
+ 
+ DataOutputStream getDataOutputStream() throws IOException {
+ 	return (dout);
+ }
+ 
+ /*
+ *
+ * get ObjectInputStream for reading more objects
+ *
+ */
+ ObjectInputStream getObjectInputStream() throws IOException {
+ 	if (oin == null) {
+ 		throw new IOException("no ObjectInputtream for reading more objects");
+ 	}
+ 	return (oin);
+ }
+ 
+ /**
+ *
+ * starts ObjectInputStream.
+ *
+ */
+ ObjectInputStream startObjectInputStream() throws IOException {
+ 	return (oin = new RMIObjectInputStream(din));
+ }
+ 
+ /**
+ *
+ * get ObjectOutputStream for sending more objects
+ *
+ */
+ ObjectOutputStream getObjectOutputStream() throws IOException {
+ 	if (oout == null) {
+ 		throw new IOException("no ObjectOutputStream for sending more objects");
+ 	} 
+ 	return (oout);
+ }
+ 
+ /**
+ *
+ * starts ObjectOutputStream.
+ *
+ */
+ ObjectOutputStream startObjectOutputStream() throws IOException {
+ 	return (oout = new RMIObjectOutputStream(dout));
+ } 
+ 
+ void disconnect() {
+ 	try {
+ 	    if(oout != null)
+ 	        oout.close();
+         sock.close();
+ 	}
+ 	catch (IOException _) {
+     }
+ 
+ 	oin = null;
+     oout = null;
+ 	din = null;
+ 	dout = null;
+ 	sock = null;
+ }
+ 
+ public static final long CONNECTION_TIMEOUT = 10000L;
+ 
+ static boolean isExpired(UnicastConnection conn, long l){
+     if (l <= conn.expireTime )
+         return false;
+     return true;
+ }
+ 
+ static void resetTime(UnicastConnection conn){
+     long l = System.currentTimeMillis();
+     conn.reviveTime = l;
+     conn.expireTime = l + CONNECTION_TIMEOUT;
+ }
+ 
+ /**
+  * We run connects on the server. Dispatch it then discard it.
+  */
+ public void run() {
+     do{
+ 	try {
+ 		UnicastServer.dispatch(this);
+             //don't discardConnection explicitly, only when
+             //  exception happens or the connection's expireTime 
+             //  comes
+         } catch (Exception e ){
+ 		manager.discardConnection(this);
+             break;
+ 	}
+     }while(true);
+ }
+ 
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastConnectionManager.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastConnectionManager.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastConnectionManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastConnectionManager.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,446 ----
+ /* UnicastConnectionManager.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInput;
+ import java.io.ObjectOutput;
+ import java.net.InetAddress;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ import java.net.UnknownHostException;
+ import java.rmi.RemoteException;
+ import java.rmi.server.RMIClientSocketFactory;
+ import java.rmi.server.RMIServerSocketFactory;
+ import java.rmi.server.RMISocketFactory;
+ import java.util.ArrayList;
+ import java.util.ConcurrentModificationException;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ 
+ public class UnicastConnectionManager
+ 	implements Runnable, ProtocolConstants {
+ 
+ private static String localhost;
+ // use different maps for server/client type UnicastConnectionManager
+ private static Hashtable servers = new Hashtable();
+ // Package-private to avoid trampolines.
+ static Hashtable clients = new Hashtable();
+ ArrayList connections; //client connection pool
+ 
+ // make serverThread volatile for poll
+ private volatile Thread serverThread;
+ private ServerSocket ssock;
+ String serverName;
+ int serverPort;
+ 
+ // Package-private to avoid a trampoline.
+ static Thread scavenger;
+ 
+ // If client and server are in the same VM, serverobj represents server
+ Object serverobj;
+ 
+ private static RMISocketFactory defaultSocketFactory = RMISocketFactory.getSocketFactory();
+ private RMIServerSocketFactory serverFactory;
+ private RMIClientSocketFactory clientFactory;
+ 
+ // The following is for debug
+ private static int ncsock = 0;    //count of client socket
+ private static int nssock = 0;    //count of server socket
+ private static int ncmanager = 0; //count of client manager
+ private static int nsmanager = 0; //count of server manager
+ 
+ private static final boolean debug = false;
+ 
+ private static final Object GLOBAL_LOCK = new Object();
+ 
+ static {
+         try {
+                 //Use host address instead of host name to avoid name resolving issues
+                 //localhost = InetAddress.getLocalHost().getHostName();
+                 localhost = InetAddress.getLocalHost().getHostAddress();
+         }
+         catch (UnknownHostException _) {
+                 localhost = "localhost";
+         }
+         
+         
+ }
+ 
+ //Only one scavenger thread running globally
+ private static void startScavenger(){
+     scavenger = new Thread(new Runnable(){
+         public void run(){
+             if (debug) System.out.println("************* start scavenger.");
+             boolean liveon = true;
+             while (liveon){
+                 // Sleep for the expire timeout
+                 try{
+                     Thread.sleep(UnicastConnection.CONNECTION_TIMEOUT);
+                 }catch(InterruptedException _ie){
+                     break;
+                 }
+                 liveon = false;
+                 // Scavenge all clients' connections that're expired
+                 Iterator iter = clients.values().iterator();
+                 long l = System.currentTimeMillis();
+                 try{
+                     while(iter.hasNext()){
+                         UnicastConnectionManager man = (UnicastConnectionManager)iter.next();
+                         ArrayList conns = man.connections;
+                         synchronized(conns) { // is the lock a little coarser?
+                             for (int last = conns.size() - 1;
+                                  last >= 0;
+                                  --last)
+                             {
+                                 UnicastConnection conn = (UnicastConnection)conns.get(last);
+                                 if (UnicastConnection.isExpired(conn, l)){
+                                     conns.remove(last);
+                                     conn.disconnect();
+                                     conn = null;   
+                                 }else
+                                     liveon = true; //there're still live connections
+                             }
+                         }
+                     }
+                 }catch(ConcurrentModificationException cme) {
+                     // handle it lazily
+                     liveon = true;
+                 }
+             }
+             scavenger = null;
+             if (debug) System.out.println("************* exit scavenger.");
+         }
+     });
+     // As it is used for client connection, we may put this thread
+     // in daemon state to prevent the VM from blocking when exiting.
+     scavenger.setDaemon(true);
+     scavenger.start();
+ }
+ 
+ /**
+   * Client UnicastConnectionManager constructor
+   */
+ private UnicastConnectionManager(String host, int port, RMIClientSocketFactory csf) {
+ 	ssock = null;
+ 	serverName = host;
+ 	serverPort = port;
+ 	serverFactory = null;
+ 	clientFactory = csf;
+     connections = new ArrayList();
+ }
+ 
+ /**
+   * Server UnicastConnectionManager constructor
+   */
+ private UnicastConnectionManager(int port, RMIServerSocketFactory ssf) throws RemoteException {
+ 
+ 	try {
+ 		ssock = ssf.createServerSocket(port);
+ 		serverPort = ssock.getLocalPort();
+ 	}
+ 	catch (IOException ioex) {
+ 		ssock = null;
+ 		serverPort = 0;
+ 		throw new java.rmi.server.ExportException("can not create Server Socket on port " + port,ioex);
+ 	}
+ 	serverName = localhost;
+ 	serverFactory = ssf;
+ 	clientFactory = null;
+ }
+ 
+ /**
+  * Return a client connection manager which will connect to the given
+  * host/port.
+  */
+ public static synchronized UnicastConnectionManager getInstance(String host, int port, RMIClientSocketFactory csf) {
+ //System.out.println("getInstance: " + host + "," + port + "," + csf);
+ 	if (csf == null) {
+         csf = defaultSocketFactory;
+ 	}
+ 	// change host name to host address to avoid name resolving issues
+ 	try{
+     	host = InetAddress.getByName(host).getHostAddress();
+     }catch(Exception _){}
+     
+ 	TripleKey key = new TripleKey(host, port, csf);
+ 	UnicastConnectionManager man = (UnicastConnectionManager)clients.get(key);
+ 	if (man == null) {
+ 		man = new UnicastConnectionManager(host, port, csf);
+         if (debug) {
+             ncmanager++;
+             System.out.println("\n\n ====== " + ncmanager + " client managers.\n\n");
+         }
+ 		clients.put(key, man);
+         
+         // Detect if client and server are in the same VM, i.e., their keys are equal
+         UnicastConnectionManager svrman = (UnicastConnectionManager)servers.get(key);
+         if(svrman != null){ // server and client are in the same VM
+             man.serverobj = svrman.serverobj;
+         }
+ 	}
+ 	return (man);
+ }
+ 
+ /**
+  * Return a server connection manager which will accept connection on the
+  * given port.
+  */
+ public static synchronized UnicastConnectionManager getInstance(int port, RMIServerSocketFactory ssf) throws RemoteException {
+ //System.out.println("getInstance: " + port + "," + ssf);
+ 	if (ssf == null) {
+         ssf = defaultSocketFactory;
+ 	}
+ 	TripleKey key = new TripleKey(localhost, port, ssf);
+ 	UnicastConnectionManager man = (UnicastConnectionManager)servers.get(key);
+ 	if (man == null) {
+ 		man = new UnicastConnectionManager(port, ssf);
+         if (debug) {
+             nsmanager++;
+             System.out.println("\n\n ****** " + nsmanager + " server managers.\n\n");
+         }
+ 		// The provided port might not be the set port.
+ 		key.port = man.serverPort;
+ 		servers.put(key, man);
+ 	}
+ 	return (man);
+ }
+ 
+ /**
+  * Get a connection from this manager.
+  */
+ public UnicastConnection getConnection() throws IOException {
+ 	if (ssock == null) {
+ 		return (getClientConnection());
+ 	}
+ 	else {
+ 		return (getServerConnection());
+ 	}
+ }
+ 
+ /**
+  * Accept a connection to this server.
+  */
+ private UnicastConnection getServerConnection() throws IOException {
+ 	Socket sock = ssock.accept();
+     sock.setTcpNoDelay(true); //??
+ 	UnicastConnection conn = new UnicastConnection(this, sock);
+ 	conn.acceptConnection();
+     if (debug){
+         nssock++;
+         System.out.println("\n\n ****** " + nssock + " server socks.\n\n");
+     }
+     //System.out.println("Server connection " + sock);
+ 	return (conn);
+ }
+ 
+ /**
+  * Make a conection from this client to the server.
+  */
+ private UnicastConnection getClientConnection() throws IOException {
+     ArrayList conns = connections;
+     UnicastConnection conn;
+     
+     synchronized(conns) {
+         int nconn = conns.size() - 1;
+     
+         // if there're free connections in connection pool
+         if(nconn >= 0) {
+             conn = (UnicastConnection)conns.get(nconn);
+             //Should we check if conn is alive using Ping??
+             conns.remove(nconn);
+             
+             // Check if the connection is already expired
+             long l = System.currentTimeMillis();
+             if (!UnicastConnection.isExpired(conn, l)){
+                 return conn;
+             }else {
+                 conn.disconnect();
+                 conn = null;   
+             }
+         }
+     }
+     
+ 	Socket sock = clientFactory.createSocket(serverName, serverPort);
+     conn = new UnicastConnection(this, sock);
+ 	conn.makeConnection(DEFAULT_PROTOCOL);
+     
+     if (debug) {
+         ncsock++;
+         System.out.println("\n\n ====== " + ncsock + " client socks.\n\n");
+     }
+ 
+ 	return (conn);
+ }
+ 
+ /**
+  * Discard a connection when we're done with it - maybe it can be
+  * recycled.
+  */
+ public void discardConnection(UnicastConnection conn) {
+ //System.out.println("Discarding connection " + conn);
+     //conn.disconnect();
+     if (ssock != null) //server connection
+ 	conn.disconnect();
+     else {
+         // To client connection, we'd like to return back to pool
+         UnicastConnection.resetTime(conn);
+         //Ensure there're only one scavenger globally
+         synchronized(GLOBAL_LOCK) {
+             connections.add(conn); //borrow this lock to garantee thread safety 
+             if (scavenger == null)
+                 startScavenger();
+         }
+     }
+ }
+ 
+ /**
+  * Start a server on this manager if it's a server socket and we've not
+  * already got one running.
+  */
+ public void startServer() {
+ 	synchronized(this) {
+ 		if (ssock == null || serverThread != null) {
+ 			return;
+ 		}
+ 		serverThread = new Thread(this);
+         // The following is not necessary when java.lang.Thread's constructor do this.
+         // serverThread.setContextClassLoader(Thread.currentThread().getContextClassLoader());
+ 	}
+ 	serverThread.start();
+ }
+ 
+ /**
+  * Stop a server on this manager
+  */
+ public void stopServer() {
+     synchronized(this) {
+     	if(serverThread != null){
+     	    serverThread = null;
+     	    try{
+     	        ssock.close();
+     	    }catch(Exception _){}
+     	}
+     }
+ }
+ 
+ /**
+  * Server thread for connection manager.
+  */
+ public void run() {
+ 	for (;serverThread != null;) { // if serverThread==null, then exit thread
+ 		try {
+ //System.out.println("Waiting for connection on " + serverPort);
+ 			UnicastConnection conn = getServerConnection();
+ 
+ 			// get address of remote host for the RMIIncomingThread object
+ 			String remoteHost = null;
+ 			if (conn.sock != null) {
+ 				remoteHost = conn.sock.getInetAddress().getHostAddress();			
+ 			}
+ 
+ 			// use a thread pool to improve performance
+             //ConnectionRunnerPool.dispatchConnection(conn);
+             (new RMIIncomingThread(conn, remoteHost)).start();
+ //	   (new Thread(conn)).start();
+ 		}
+ 		catch (Exception e) {
+             e.printStackTrace();
+ 		}
+ 	}
+ }
+ 
+ /**
+  * Serialization routine.
+  */
+ void write(ObjectOutput out) throws IOException {
+         out.writeUTF(serverName);
+         out.writeInt(serverPort);
+ }
+ 
+ /**
+  * Serialization routine.
+  */
+ static UnicastConnectionManager read(ObjectInput in) throws IOException {
+         String host = in.readUTF();
+         int port = in.readInt();
+         //RMIClientSocketFactory csf = ((RMIObjectInputStream)in).manager.clientFactory;
+         //return (getInstance(host, port, csf));
+         return (getInstance(host, port, null));
+ }
+ 
+ }
+ 
+ /**
+  * This is use as the hashkey for the client/server connections.
+  */
+ class TripleKey {
+ 
+ String host;
+ int port;
+ Object other;
+ 
+ TripleKey(String host, int port, Object other) {
+ 	this.host = host;
+ 	this.port = port;
+ 	this.other = other;
+ }
+ 
+ /**
+  * Hash code just include the host and other - we ignore the port since
+  * this has unusual matching behaviour.
+  */
+ public int hashCode() {
+ 	return (host.hashCode() ^ other.hashCode());
+ }
+ 
+ public boolean equals(Object obj) {
+ 	if (obj instanceof TripleKey) {
+ 		TripleKey other = (TripleKey)obj;
+ 		if (this.host.equals(other.host) &&
+ 		    this.other == other.other &&
+             (this.port == other.port /* || this.port == 0 || other.port == 0*/)) {
+ 			return (true);
+ 		}
+ 	}
+ 	return (false);
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastRef.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastRef.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastRef.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastRef.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,278 ----
+ /* UnicastRef.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.io.DataInputStream;
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.io.ObjectInput;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutput;
+ import java.io.ObjectOutputStream;
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.server.ObjID;
+ import java.rmi.server.Operation;
+ import java.rmi.server.RMIClientSocketFactory;
+ import java.rmi.server.RemoteCall;
+ import java.rmi.server.RemoteObject;
+ import java.rmi.server.RemoteRef;
+ import java.rmi.server.UID;
+ 
+ public class UnicastRef
+ 	implements RemoteRef, ProtocolConstants {
+ 
+ public ObjID objid;
+ UnicastConnectionManager manager;
+ 
+ /**
+  * Used by serialization, and let subclass capable of having default constructor
+  */
+ // must be public otherwise java.rmi.RemoteObject cannot instantiate this class
+ // -- iP
+ public UnicastRef() {
+ }
+ 
+ public UnicastRef(ObjID objid, String host, int port, RMIClientSocketFactory csf) {
+ 	this(objid);
+ 	manager = UnicastConnectionManager.getInstance(host, port, csf);
+ }
+ 
+ public UnicastRef(ObjID objid) {
+ 	this.objid = objid;
+ }
+ 
+ public Object invoke(Remote obj, Method method, Object[] params, long opnum) throws Exception {
+     // Check if client and server are in the same VM, then local call can be used to
+     // replace remote call, but it's somewhat violating remote semantic.
+     Object svrobj = manager.serverobj;
+     
+     // Make sure that the server object is compatible. It could be loaded from a different
+     // classloader --iP
+     if(svrobj != null && method.getDeclaringClass().isInstance(svrobj)){
+         //local call
+ 		Object ret = null;
+ 		try{
+ 		    ret = method.invoke(svrobj, params);
+ 		}catch(InvocationTargetException e){
+ 		    throw (Exception)e.getTargetException();
+ 		}
+ 		//System.out.println("\n\n ***** local call: " + method + "\nreturn: " + ret + "\n\n");
+ 		return ret;
+ 	}
+ 	//System.out.println("***************** remote call:" + manager.serverPort);
+ 	return (invokeCommon(obj, method, params, -1, opnum));
+ }
+ 
+ private Object invokeCommon(Remote obj, Method method, Object[] params, int opnum, long hash) throws Exception {
+ 	UnicastConnection conn;
+ 	try {
+ 		conn = manager.getConnection();
+ 	}
+ 	catch (IOException e1) {
+ 		throw new RemoteException("connection failed to host: " + manager.serverName, e1);
+ 	}
+ 
+ 	ObjectOutputStream out;
+ 	DataOutputStream dout;
+ 	try {
+ 		dout = conn.getDataOutputStream();
+ 		dout.writeByte(MESSAGE_CALL);
+ 
+ 		out = conn.startObjectOutputStream(); // (re)start ObjectOutputStream
+ 		
+ 		objid.write(out);
+ 		out.writeInt(opnum);
+ 		out.writeLong(hash);
+ 		
+ 		// must handle primitive class and their wrapper classes
+ 		Class clss[] = method.getParameterTypes();
+ 	    for(int i = 0; i < clss.length; i++)
+ 	        ((RMIObjectOutputStream)out).writeValue(params[i], clss[i]);
+ 
+ 		out.flush();
+ 	}
+ 	catch (IOException e2) {
+ 		throw new RemoteException("call failed: ", e2);
+ 	}
+ 
+ 	int returncode;
+ 	Object returnval;
+ 	DataInputStream din;
+ 	ObjectInputStream in;
+ 	UID ack;
+ 	try {
+ 		din = conn.getDataInputStream();
+ 		
+ 		if ((returncode = din.readUnsignedByte()) != MESSAGE_CALL_ACK) {
+ 		    conn.disconnect();
+ 			throw new RemoteException("Call not acked:" + returncode);
+ 		}
+ 
+ 		in = conn.startObjectInputStream(); // (re)start ObjectInputStream
+ 		returncode = in.readUnsignedByte();
+ 		ack = UID.read(in);
+ 
+ 		Class cls = method.getReturnType();
+ 
+ 	if (returncode == RETURN_NACK) { 
+ 	    returnval = in.readObject();  // get Exception
+ 
+         } else if(cls == Void.TYPE) { 
+             returnval = null;
+             // in.readObject() // not required! returntype 'void' means no field is returned.
+         } else {
+             returnval = ((RMIObjectInputStream)in).readValue(cls); // get returnvalue
+ 	}
+ 	} catch (IOException e3) {
+ 	    //for debug: e3.printStackTrace();
+ 		throw new RemoteException("call return failed: ", e3);
+ 	}
+ 
+     /* if DGCAck is necessary??
+     //According to RMI wire protocol, send a DGCAck 
+     // to indicate receiving return value
+     dout.writeByte(MESSAGE_DGCACK);
+     ack.write(dout);
+     out.flush();
+     */
+     
+ 	manager.discardConnection(conn);
+ 
+ 	if (returncode != RETURN_ACK && returnval != null) {
+ 		if (returncode == RETURN_NACK) throw (Exception)returnval;
+ 		else throw new RemoteException("unexpected returncode: " + returncode);
+ 	}
+ 
+ 	return (returnval);
+ }
+ 
+ /**
+  * @deprecated
+  */
+ public RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum, long hash) throws RemoteException {
+     UnicastConnection conn;
+     
+ 	try {
+ 		conn = manager.getConnection();
+ 	}
+ 	catch (IOException e1) {
+ 		throw new RemoteException("connection failed to host: " + manager.serverName, e1);
+ 	}
+ 
+     //obj: useless?
+ 
+ 	return (new UnicastRemoteCall(conn, objid, opnum, hash));
+ }
+ 
+ /**
+  * @deprecated
+  */
+ public void invoke(RemoteCall call) throws Exception {
+ 	UnicastRemoteCall c = (UnicastRemoteCall)call;
+ 	call.executeCall();
+ }
+ 
+ /**
+  * @deprecated
+  */
+ public void done(RemoteCall call) throws RemoteException {
+ 	UnicastRemoteCall c = (UnicastRemoteCall)call;
+ 	try{
+ 	    c.done();
+ 	} catch(IOException e){}
+     UnicastConnection conn = c.getConnection();
+ 	manager.discardConnection(conn);
+ }
+ 
+ public void writeExternal(ObjectOutput out) throws IOException {
+ 	if (manager == null) {
+ 		throw new IOException("no connection");
+ 	}
+ 	manager.write(out);
+ 	objid.write(out);
+ 	// This byte is somewhat confusing when interoperating with JDK
+ 	out.writeByte(0); //RETURN_ACK);
+ }
+ 
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ 	manager = UnicastConnectionManager.read(in);
+ 	objid = ObjID.read(in);
+ 	byte ack = in.readByte();
+ 	// This byte is somewhat confusing when interoperating with JDK
+ 	if (ack != RETURN_ACK && ack != 0/*jdk ack value*/) {
+ 		throw new IOException("no ack found");
+ 	}
+ }
+ 
+ public boolean remoteEquals(RemoteRef ref) {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public int remoteHashCode() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public String getRefClass(ObjectOutput out) {
+ 	return ("UnicastRef");
+ }
+ 
+ public String remoteToString() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public void dump(UnicastConnection conn) {
+ 	try {
+ 		DataInputStream din = conn.getDataInputStream();
+ 		for (;;) {
+ 			int b = din.readUnsignedByte();
+ 			System.out.print(Integer.toHexString(b));
+ 			if (b >= 32 && b < 128) {
+ 				System.out.print(": " + (char)b);
+ 			}
+ 			System.out.println();
+ 		}
+ 	}
+ 	catch (IOException _) {
+ 	}
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastRemoteCall.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastRemoteCall.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastRemoteCall.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastRemoteCall.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,525 ----
+ /* UnicastRemoteCall.java
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.io.DataInputStream;
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.io.ObjectInput;
+ import java.io.ObjectOutput;
+ import java.io.StreamCorruptedException;
+ import java.rmi.MarshalException;
+ import java.rmi.RemoteException;
+ import java.rmi.UnmarshalException;
+ import java.rmi.server.ObjID;
+ import java.rmi.server.RemoteCall;
+ import java.rmi.server.UID;
+ import java.util.Vector;
+ 
+ public class UnicastRemoteCall
+ 	implements RemoteCall, ProtocolConstants
+ {
+ 
+   private UnicastConnection conn;
+   private Object result;
+   private Object object;
+   private int opnum;
+   private long hash;
+   // These are package-private due to inner class access.
+   Vector vec;
+   int ptr;
+   private ObjID objid;
+ 
+   private ObjectOutput oout;
+   private ObjectInput oin;
+ 
+   /**
+    * Incoming call.
+    */
+   UnicastRemoteCall(UnicastConnection conn)
+   {
+     this.conn = conn;
+   }
+ 
+   /**
+    * Outgoing call.
+    */
+   UnicastRemoteCall(UnicastConnection conn, ObjID objid, int opnum, long hash)
+     throws RemoteException
+   {
+     this.conn = conn;
+     this.opnum = opnum;
+     this.hash = hash;
+     this.objid = objid;
+   }
+   
+   UnicastConnection getConnection()
+   {
+     return conn;
+   }
+   
+   public ObjectOutput getOutputStream() throws IOException
+   {
+     if (vec == null)
+       vec = new Vector();
+     return (new DummyObjectOutputStream());
+   }
+ 
+   public void releaseOutputStream() throws IOException
+   {
+     if (vec != null)
+       {
+ 	oout = conn.getObjectOutputStream();
+ 	
+ 	for (int i = 0; i < vec.size(); i += 2)
+ 	  {
+ 	    boolean primitive = ((Boolean)vec.elementAt(i)).booleanValue();
+ 	    Object data = vec.elementAt(i+1);
+ 
+ 	    // No type, this is
+ 	    if (!primitive)
+ 	      oout.writeObject(data);
+ 	    else
+ 	      {
+ 		if (data instanceof Boolean)
+ 		  oout.writeBoolean(((Boolean)data).booleanValue());
+ 		else if (data instanceof Character)
+ 		  oout.writeChar(((Character)data).charValue());
+ 		else if (data instanceof Byte)
+ 		  oout.writeByte(((Byte)data).byteValue());
+ 		else if (data instanceof Short)
+ 		  oout.writeShort(((Short)data).shortValue());
+ 		else if (data instanceof Integer)
+ 		  oout.writeInt(((Integer)data).intValue());
+ 		else if (data instanceof Long)
+ 		  oout.writeLong(((Long)data).longValue());
+ 	      }
+ 	  }
+ 	vec = null;
+       }
+     if(oout != null)
+       oout.flush();
+   }
+ 
+   /**
+   *
+   * (re)starts ObjectInputStream
+   *
+   */ 
+   public ObjectInput startInputStream() throws IOException
+   {
+ 	if (conn != null) {
+ 		return (oin = conn.startObjectInputStream());
+ 	} else {
+ 		return getInputStream(); // dummy Input Stream
+ 	}
+ 
+   }
+ 
+   public ObjectInput getInputStream() throws IOException
+   {
+     if (conn != null)
+       {
+ 	if(oin == null)
+ 	  return (oin = conn.getObjectInputStream());
+ 	else
+ 	  return oin;
+       }
+     else
+       {
+ 	ptr = 0;
+ 	return (new DummyObjectInputStream());
+       }
+   }
+ 
+   public void releaseInputStream() throws IOException
+   {
+     // Does nothing.
+   }
+ 
+   public ObjectOutput getResultStream(boolean success)
+     throws IOException, StreamCorruptedException
+   {
+     vec = new Vector();
+     return new DummyObjectOutputStream();
+   }
+   
+   public void executeCall() throws Exception
+   {
+     byte returncode;
+     ObjectInput oin;
+     
+     // signal the call when constructing
+     try
+       {
+ 	DataOutputStream dout = conn.getDataOutputStream();
+ 	dout.write(MESSAGE_CALL);
+ 	
+ 	oout = conn.startObjectOutputStream(); // (re)start ObjectOutputStream
+ 	objid.write(oout);
+ 	oout.writeInt(opnum);
+ 	oout.writeLong(hash);
+       }
+     catch(IOException ex)
+       {
+ 	throw new MarshalException("Try to write header but failed.", ex);
+       }
+ 
+     try
+       {
+ 	releaseOutputStream();
+ 	DataInputStream din = conn.getDataInputStream();
+         if (din.readByte() != MESSAGE_CALL_ACK)
+ 	    throw new RemoteException("Call not acked");
+ 
+         oin = startInputStream();
+         returncode = oin.readByte();
+         UID.read(oin);
+       }
+     catch(IOException ex)
+       {
+         throw new UnmarshalException("Try to read header but failed:", ex);
+       }
+     
+     //check return code
+     switch(returncode)
+       {
+       case RETURN_ACK: //it's ok
+ 	return;
+       case RETURN_NACK:
+ 	Object returnobj;
+ 	try
+ 	  {
+ 	    returnobj = oin.readObject();
+ 	  }
+ 	catch(Exception ex2)
+ 	  {
+ 	    throw new UnmarshalException
+ 	      ("Try to read exception object but failed", ex2);
+ 	  }
+ 	
+ 	if(!(returnobj instanceof Exception))
+ 	  throw new UnmarshalException("Should be Exception type here: "
+ 				       + returnobj);
+ 	throw (Exception)returnobj;
+ 	
+       default:
+ 	throw new UnmarshalException("Invalid return code");
+       }
+   }
+ 
+   public void done() throws IOException
+   {
+     // conn.disconnect();
+   }
+ 
+   boolean isReturnValue()
+   {
+     return vec.size() > 0;
+   }
+   
+   Object returnValue()
+   {
+     // This is not the first one (Boolean) but the second.
+     return vec.elementAt(1);
+   }
+ 
+   Object[] getArguments()
+   {
+     return vec.toArray();
+   }
+ 
+   Object getObject()
+   {
+     return object;
+   }
+ 
+   int getOpnum()
+   {
+     return opnum;
+   }
+ 
+   long getHash()
+   {
+     return hash;
+   }
+ 
+   void setReturnValue(Object obj)
+   {
+     vec.removeAllElements();
+     vec.addElement(obj);
+   }
+ 
+   /**
+    * Dummy object output class.
+    */
+   private class DummyObjectOutputStream implements ObjectOutput
+   {
+     /**
+      * Non-private constructor to reduce bytecode emitted.
+      */
+     DummyObjectOutputStream()
+     {
+     }
+ 
+     public void writeBoolean(boolean v) throws IOException
+     {
+       vec.addElement(Boolean.TRUE);
+       vec.addElement(Boolean.valueOf(v));
+     }
+ 
+     public void writeByte(int v) throws IOException
+     {
+       vec.addElement(Boolean.TRUE);
+       vec.addElement(new Byte((byte) v));
+     }
+ 
+     public void writeChar(int v) throws IOException
+     {
+       vec.addElement(Boolean.TRUE);
+       vec.addElement(new Character((char) v));
+     }
+ 
+     public void writeDouble(double v) throws IOException
+     {
+       vec.addElement(Boolean.TRUE);
+       vec.addElement(new Double(v));
+     }
+ 
+     public void writeFloat(float v) throws IOException
+     {
+       vec.addElement(Boolean.TRUE);
+       vec.addElement(new Float(v));
+     }
+ 
+     public void writeInt(int v) throws IOException
+     {
+       vec.addElement(Boolean.TRUE);
+       vec.addElement(new Integer(v));
+     }
+ 
+     public void writeLong(long v) throws IOException
+     {
+       vec.addElement(Boolean.TRUE);
+       vec.addElement(new Long(v));
+     }
+ 
+     public void writeShort(int v) throws IOException
+     {
+       vec.addElement(Boolean.TRUE);
+       vec.addElement(new Short((short) v));
+     }
+ 
+     public void writeObject(Object obj) throws IOException
+     {
+       vec.addElement(Boolean.FALSE);
+       vec.addElement(obj);
+     }
+ 
+     public void write(byte b[]) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public void write(byte b[], int off, int len) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public void write(int b) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public void writeBytes(String s) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public void writeChars(String s) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public void writeUTF(String str) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public void flush() throws IOException
+     {
+     }
+ 
+     public void close() throws IOException
+     {
+     }
+   } // class DummyObjectOutputStream
+ 
+   /**
+    * Dummy object input class.
+    */
+   private class DummyObjectInputStream implements ObjectInput
+   {
+     /**
+      * Non-private constructor to reduce bytecode emitted.
+      */
+     DummyObjectInputStream()
+     {
+     }
+ 
+     public boolean readBoolean() throws IOException
+     {
+       Object obj = vec.elementAt(ptr++);
+       return ((Boolean) obj).booleanValue();
+     }
+ 
+     public byte readByte() throws IOException
+     {
+       Object obj = vec.elementAt(ptr++);
+       return ((Byte) obj).byteValue();
+     }
+ 
+     public char readChar() throws IOException
+     {
+       Object obj = vec.elementAt(ptr++);
+       return ((Character) obj).charValue();
+     }
+ 
+     public double readDouble() throws IOException
+     {
+       Object obj = vec.elementAt(ptr++);
+       return ((Double) obj).doubleValue();
+     }
+ 
+     public float readFloat() throws IOException
+     {
+       Object obj = vec.elementAt(ptr++);
+       return ((Float) obj).floatValue();
+     }
+ 
+     public int readInt() throws IOException
+     {
+       Object obj = vec.elementAt(ptr++);
+       return ((Integer) obj).intValue();
+     }
+ 
+     public long readLong() throws IOException
+     {
+       Object obj = vec.elementAt(ptr++);
+       return ((Long) obj).longValue();
+     }
+ 
+     public short readShort() throws IOException
+     {
+       Object obj = vec.elementAt(ptr++);
+       return ((Short) obj).shortValue();
+     }
+ 
+     public Object readObject() throws IOException
+     {
+       return vec.elementAt(ptr++);
+     }
+ 
+     public int read(byte b[]) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public int read(byte b[], int off, int len) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public int read() throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public long skip(long n) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public int available() throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public void readFully(byte b[]) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public void readFully(byte b[], int off, int len) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public String readLine() throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public String readUTF() throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public int readUnsignedByte() throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public int readUnsignedShort() throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public int skipBytes(int n) throws IOException
+     {
+       throw new IOException("not required");
+     }
+ 
+     public void close() throws IOException
+     {
+     }
+   } // class DummyObjectInputStream
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastRemoteStub.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastRemoteStub.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastRemoteStub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastRemoteStub.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,50 ----
+ /* UnicastRemoteStub.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.rmi.server.RemoteRef;
+ import java.rmi.server.RemoteStub;
+ 
+ public class UnicastRemoteStub
+ 	extends RemoteStub {
+ 
+ public static void setStubRef(RemoteStub stub, RemoteRef ref) {
+ 	setRef(stub, ref);
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastServer.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastServer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastServer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastServer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,170 ----
+ /* UnicastServer.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import gnu.java.rmi.dgc.DGCImpl;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.rmi.NoSuchObjectException;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.ServerError;
+ import java.rmi.server.ObjID;
+ import java.rmi.server.UID;
+ import java.util.Collections;
+ import java.util.Map;
+ import java.util.Hashtable;
+ import java.util.IdentityHashMap;
+ 
+ public class UnicastServer
+ 	implements ProtocolConstants {
+ 
+ static private Hashtable objects = new Hashtable();  //mapping OBJID to server ref
+ static private Map refcache = Collections.synchronizedMap(new IdentityHashMap()); //mapping obj itself to server ref
+ static private DGCImpl dgc;
+ 
+ public static void exportObject(UnicastServerRef obj) {
+ 	startDGC();
+ 	objects.put(obj.objid, obj);
+ 	refcache.put(obj.myself, obj);
+ 	obj.manager.startServer();
+ }
+ 
+ // FIX ME: I haven't handle force parameter
+ public static boolean unexportObject(UnicastServerRef obj, boolean force) {
+ 	objects.remove(obj.objid);
+ 	refcache.remove(obj.myself);
+ 	obj.manager.stopServer();
+ 	return true;
+ }
+ 
+ public static UnicastServerRef getExportedRef(Remote remote){
+     return (UnicastServerRef)refcache.get(remote);
+ }
+ 
+ private static synchronized void startDGC() {
+ 	if (dgc == null) {
+ 		try {
+ 			dgc = new DGCImpl();
+ 			// Changed DGCImpl to inherit UnicastServerRef directly
+ 			//((UnicastServerRef)dgc.getRef()).exportObject(dgc);
+ 			dgc.exportObject(dgc);
+ 		}
+ 		catch (RemoteException e) {
+ 			e.printStackTrace();
+ 		}
+ 	}
+ }
+ 
+ public static void dispatch(UnicastConnection conn) throws Exception {
+ 	switch (conn.getDataInputStream().readUnsignedByte()) {
+ 	case MESSAGE_CALL:
+ 		incomingMessageCall(conn);
+ 		break;
+ 	case MESSAGE_PING:  
+ 		// jdk sends a ping before each method call -> answer it!
+ 		DataOutputStream out = conn.getDataOutputStream();
+ 		out.writeByte(MESSAGE_PING_ACK);
+ 		out.flush();
+ 		break;
+ 	default:
+ 		throw new Exception("bad method type");
+ 	}
+ }
+ 
+ private static void incomingMessageCall(UnicastConnection conn) throws IOException {
+ 	ObjectInputStream in = conn.startObjectInputStream();  // (re)start ObjectInputStream
+ 
+ 	ObjID objid = ObjID.read(in);
+ 	int method = in.readInt();
+ 	long hash = in.readLong();
+ 
+ //System.out.println("ObjID: " + objid + ", method: " + method + ", hash: " + hash);
+ 
+ 	// Use the objid to locate the relevant UnicastServerRef
+ 	UnicastServerRef uref = (UnicastServerRef)objects.get(objid);
+ 	Object returnval;
+ 	int returncode = RETURN_ACK;
+ 	// returnval is from Method.invoke(), so we must check the return class to see
+ 	// if it's primitive type
+ 	Class returncls = null;
+ 	if (uref != null) {
+ 		try {
+ 			// Dispatch the call to it.
+ 			returnval = uref.incomingMessageCall(conn, method, hash);
+ 			returncls = uref.getMethodReturnType(method, hash);
+ 		}
+ 		catch (Exception e) {
+ 			returnval = e;
+ 			returncode = RETURN_NACK;
+ 		}
+                 catch (Error e) {
+ 			returnval = new ServerError ("An Error is thrown while processing the invocation on the server", e);
+ 			returncode = RETURN_NACK;
+                 }
+ 	}
+ 	else {
+ 		returnval = new NoSuchObjectException("");
+ 		returncode = RETURN_NACK;
+ 	}
+ 
+ 	conn.getDataOutputStream().writeByte(MESSAGE_CALL_ACK);
+ 
+ 	ObjectOutputStream out = conn.startObjectOutputStream();   // (re)start ObjectOutputStream
+ 
+ 	out.writeByte(returncode);
+ 	(new UID()).write(out);
+ 
+ 	//System.out.println("returnval=" + returnval + " returncls=" + returncls);
+ 
+ 	if(returnval != null && returncls != null)
+ 	    ((RMIObjectOutputStream)out).writeValue(returnval, returncls);
+ 
+ 	// 1.1/1.2 void return type detection:
+ 	else if (!(returnval instanceof RMIVoidValue || returncls == Void.TYPE)) 
+ 	    out.writeObject(returnval);
+ 
+ 	out.flush();
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastServerRef.java gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastServerRef.java
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/UnicastServerRef.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/UnicastServerRef.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,306 ----
+ /* UnicastServerRef.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.rmi.server;
+ 
+ import java.io.ObjectInputStream;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.server.ObjID;
+ import java.rmi.server.RMIServerSocketFactory;
+ import java.rmi.server.RemoteRef;
+ import java.rmi.server.RemoteServer;
+ import java.rmi.server.RemoteStub;
+ import java.rmi.server.ServerNotActiveException;
+ import java.rmi.server.ServerRef;
+ import java.rmi.server.Skeleton;
+ import java.util.Hashtable;
+ 
+ public class UnicastServerRef
+ 	extends UnicastRef 
+ 	implements ServerRef{ //SHOULD implement ServerRef
+ 
+ final static private Class[] stubprototype = new Class[] { RemoteRef.class };
+ 
+ Remote myself; //save the remote object itself
+ private Skeleton skel;
+ private RemoteStub stub;
+ private Hashtable methods = new Hashtable();
+ 
+ /**
+  * Used by serialization.
+  */
+ UnicastServerRef()
+ {
+ }
+ 
+ public UnicastServerRef(ObjID id, int port, RMIServerSocketFactory ssf) throws RemoteException {
+ 	super(id);
+ 	manager = UnicastConnectionManager.getInstance(port, ssf);
+ }
+ 
+ public RemoteStub exportObject(Remote obj) throws RemoteException {
+ 	if (myself == null) {
+ 		myself = obj;
+ 		// Save it to server manager, to let client calls in the same VM to issue
+ 		//  local call
+ 		manager.serverobj = obj;
+ 
+ 		// Find and install the stub
+ 		Class cls = obj.getClass();
+ 		Class expCls;
+ 		try {
+ 			// where ist the _Stub? (check superclasses also)
+ 			expCls = findStubSkelClass(cls); 
+ 		} catch (Exception ex) {
+ 			throw new RemoteException("can not find stubs for class: " + cls, ex);
+ 		}
+ 
+ 		stub = (RemoteStub)getHelperClass(expCls, "_Stub");
+ 		if (stub == null) {
+ 			throw new RemoteException("failed to export: " + cls);
+ 		}
+ 
+ 		// Find and install the skeleton (if there is one)
+ 		skel = (Skeleton)getHelperClass(expCls, "_Skel");
+ 
+ 		// Build hash of methods which may be called.
+ 		buildMethodHash(obj.getClass(), true);
+ 
+ 		// Export it.
+ 		UnicastServer.exportObject(this);
+ 	}
+ 
+ 	return (stub);
+ }
+ 
+ public RemoteStub exportObject(Remote remote, Object obj)
+         throws RemoteException
+ {
+     //FIX ME
+ 	return exportObject(remote);
+ }
+ 
+ public RemoteStub getStub(){
+     return stub;
+ }
+ 
+ 
+ public boolean unexportObject(Remote obj, boolean force) {
+     // Remove all hashes of methods which may be called.
+     buildMethodHash(obj.getClass(), false);
+     return UnicastServer.unexportObject(this, force);
+ }
+ 
+ /**
+ *
+ *  The Subs/Skels might not there for the actual class, but maybe 
+ *  for one of the superclasses.
+ *
+ */
+ private Class findStubSkelClass(Class startCls) throws Exception {
+ 	Class cls = startCls;
+ 
+ 	while (true) {
+ 		try {
+ 			String stubClassname = cls.getName() + "_Stub";
+ 			ClassLoader cl = cls.getClassLoader();
+ 			Class scls = cl == null ? Class.forName(stubClassname)
+ 						: cl.loadClass(stubClassname);
+ 			return cls; // found it
+ 		} catch (ClassNotFoundException e) {
+ 			Class superCls = cls.getSuperclass();
+ 			if (superCls == null 
+ 				|| superCls == java.rmi.server.UnicastRemoteObject.class) 
+ 			{
+ 				throw new Exception("Neither " + startCls 
+ 					+ " nor one of their superclasses (like" + cls + ")" 
+ 					+ " has a _Stub");
+ 			}
+ 			cls = superCls;
+ 		}
+ 	}
+ }
+ 
+ 
+ 
+ private Object getHelperClass(Class cls, String type) {
+ 	try {   
+ 	    String classname = cls.getName();
+ 		ClassLoader cl = cls.getClassLoader();
+ 		Class scls = cl == null ? Class.forName(classname + type)
+ 					: cl.loadClass(classname + type);
+ 		if (type.equals("_Stub")) {
+ 			try {
+ 				// JDK 1.2 stubs
+ 				Constructor con = scls.getConstructor(stubprototype);
+ 				return (con.newInstance(new Object[]{this}));
+ 			}
+ 			catch (NoSuchMethodException e) {
+ 			}
+ 			catch (InstantiationException e) {
+ 			}
+ 			catch (IllegalAccessException e) {
+ 			}
+ 			catch (IllegalArgumentException e) {
+ 			}
+ 			catch (InvocationTargetException e) {
+ 			}
+ 			// JDK 1.1 stubs
+ 			RemoteStub stub = (RemoteStub)scls.newInstance();
+ 			UnicastRemoteStub.setStubRef(stub, this);
+ 			return (stub);
+ 		}
+ 		else {
+ 			// JDK 1.1 skel
+ 			return (scls.newInstance());
+ 		}
+ 	}
+ 	catch (ClassNotFoundException e) {
+ 	}
+ 	catch (InstantiationException e) {
+ 	}
+ 	catch (IllegalAccessException e) {
+ 	}
+ 	return (null);
+ }
+ 
+ 
+ 
+ public String getClientHost() throws ServerNotActiveException {
+ 	return RemoteServer.getClientHost();
+ }
+ 
+ private void buildMethodHash(Class cls, boolean build) {
+ 	Method[] meths = cls.getMethods();
+ 	for (int i = 0; i < meths.length; i++) {
+ 		/* Don't need to include any java.xxx related stuff */
+ 		if (meths[i].getDeclaringClass().getName().startsWith("java.")) {
+ 			continue;
+ 		}
+ 		long hash = RMIHashes.getMethodHash(meths[i]);
+ 		if(build)
+ 		    methods.put(new Long (hash), meths[i]);
+ 		else
+ 		    methods.remove(new Long (hash));
+ //System.out.println("meth = " + meths[i] + ", hash = " + hash);
+ 	}
+ }
+ 
+ Class getMethodReturnType(int method, long hash) throws Exception
+ {
+     if (method == -1) {
+         Method meth = (Method)methods.get(new Long (hash));
+         return meth.getReturnType();
+     }else
+         return null;
+ }
+ 
+ public Object incomingMessageCall(UnicastConnection conn, int method, long hash) throws Exception {
+ //System.out.println("method = " + method + ", hash = " + hash);
+ 	// If method is -1 then this is JDK 1.2 RMI - so use the hash
+ 	// to locate the method
+ 	if (method == -1) {
+ 		Method meth = (Method)methods.get(new Long (hash));
+ //System.out.println("class = " + myself.getClass() + ", meth = " + meth);
+ 		if (meth == null) {
+ 			throw new NoSuchMethodException();
+ 		}
+ 
+ 		ObjectInputStream in = conn.getObjectInputStream();
+ 		int nrargs = meth.getParameterTypes().length;
+ 		Object[] args = new Object[nrargs];
+ 		for (int i = 0; i < nrargs; i++) {
+ 			/** 
+ 			 * For debugging purposes - we don't handle CodeBases
+ 			 * quite right so we don't always find the stubs.  This
+ 			 * lets us know that.
+ 			 */
+ 			try {
+ 				// need to handle primitive types
+ 				args[i] = ((RMIObjectInputStream)in).readValue(meth.getParameterTypes()[i]);
+ 				
+ 			}
+ 			catch (Exception t) {
+ 				t.printStackTrace();
+ 				throw t;
+ 			}
+ 		}
+ 		//We must reinterpret the exception thrown by meth.invoke()
+ 		//return (meth.invoke(myself, args));
+ 		Object ret = null;
+ 		try{
+ 		    ret = meth.invoke(myself, args);
+ 		}catch(InvocationTargetException e){
+                     Throwable cause = e.getTargetException();
+                     if (cause instanceof Exception) {
+                         throw (Exception)cause;
+                     }
+                     else if (cause instanceof Error) {
+                         throw (Error)cause;
+                     }
+                     else {
+                         throw new Error("The remote method threw a java.lang.Throwable that is neither java.lang.Exception nor java.lang.Error.", e);
+                     }
+ 		}
+ 		return ret;
+ 	}
+ 	// Otherwise this is JDK 1.1 style RMI - we find the skeleton
+ 	// and invoke it using the method number.  We wrap up our
+ 	// connection system in a UnicastRemoteCall so it appears in a
+ 	// way the Skeleton can handle.
+ 	else {
+ 		if (skel == null) {
+ 			throw new NoSuchMethodException();
+ 		}
+ 		UnicastRemoteCall call = new UnicastRemoteCall(conn);
+ 		skel.dispatch(myself, call, method, hash);		  
+ 		if (!call.isReturnValue())
+ 		  return RMIVoidValue.INSTANCE;
+ 		else
+ 		  return (call.returnValue());
+ 	}
+ }
+ 
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/package.html gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/rmi/server/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/rmi/server/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.rmi.server package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.rmi.server</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/Engine.java gcc-4.1.0/libjava/classpath/gnu/java/security/Engine.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/Engine.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/Engine.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,237 ----
+ /* Engine -- generic getInstance method.
+    Copyright (C) 2003  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.security;
+ 
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.InvocationTargetException;
+ 
+ import java.security.NoSuchAlgorithmException;
+ import java.security.Provider;
+ 
+ /**
+  * Generic implementation of the getInstance methods in the various
+  * engine classes in java.security.
+  * <p>
+  * These classes ({@link java.security.Signature} for example) can be
+  * thought of as the "chrome, upholstery, and steering wheel", and the SPI
+  * (service provider interface, e.g. {@link java.security.SignatureSpi})
+  * classes can be thought of as the "engine" -- providing the actual
+  * functionality of whatever cryptographic algorithm the instance
+  * represents.
+  *
+  * @see Provider
+  * @author Casey Marshall 
+  */
+ public final class Engine
+ {
+ 
+   // Constants.
+   // ------------------------------------------------------------------------
+ 
+   /** Prefix for aliases. */
+   private static final String ALG_ALIAS = "Alg.Alias.";
+ 
+   /** Maximum number of aliases to try. */
+   private static final int MAX_ALIASES = 5;
+ 
+   /** Argument list for no-argument constructors. */
+   private static final Object[] NO_ARGS = new Object[0];
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /** This class cannot be instantiated. */
+   private Engine() { }
+ 
+   // Class method.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the implementation for <i>algorithm</i> for service
+    * <i>service</i> from <i>provider</i>. The service is e.g.
+    * "Signature", and the algorithm "DSA".
+    *
+    * @param service   The service name.
+    * @param algorithm The name of the algorithm to get.
+    * @param provider  The provider to get the implementation from.
+    * @return The engine class for the specified algorithm; the object
+    *         returned is typically a subclass of the SPI class for that
+    *         service, but callers should check that this is so.
+    * @throws NoSuchAlgorithmException If the implementation cannot be
+    *         found or cannot be instantiated.
+    * @throws InvocationTargetException If the SPI class's constructor
+    *         throws an exception.
+    * @throws IllegalArgumentException If any of the three arguments are null.
+    */
+   public static Object getInstance(String service, String algorithm,
+                                    Provider provider)
+     throws InvocationTargetException, NoSuchAlgorithmException
+   {
+     return getInstance(service, algorithm, provider, NO_ARGS);
+   }
+ 
+   /**
+    * Get the implementation for <i>algorithm</i> for service
+    * <i>service</i> from <i>provider</i>, passing <i>initArgs</i> to the
+    * SPI class's constructor (which cannot be null; pass a zero-length
+    * array if the SPI takes no arguments). The service is e.g.
+    * "Signature", and the algorithm "DSA".
+    *
+    * @param service   The service name.
+    * @param algorithm The name of the algorithm to get.
+    * @param provider  The provider to get the implementation from.
+    * @param initArgs  The arguments to pass to the SPI class's
+    *        constructor (cannot be null).
+    * @return The engine class for the specified algorithm; the object
+    *         returned is typically a subclass of the SPI class for that
+    *         service, but callers should check that this is so.
+    * @throws NoSuchAlgorithmException If the implementation cannot be
+    *         found or cannot be instantiated.
+    * @throws InvocationTargetException If the SPI class's constructor
+    *         throws an exception.
+    * @throws IllegalArgumentException If any of the four arguments are null.
+    */
+   public static Object getInstance(String service, String algorithm,
+                                    Provider provider, Object[] initArgs)
+     throws InvocationTargetException, NoSuchAlgorithmException
+   {
+     if (service == null || algorithm == null
+         || provider == null || initArgs == null)
+       throw new IllegalArgumentException();
+ 
+     // If there is no property "service.algorithm"
+     if (provider.getProperty(service + "." + algorithm) == null)
+       {
+         // Iterate through aliases, until we find the class name or resolve
+         // too many aliases.
+         String alias = null;
+         int count = 0;
+         while ((alias = provider.getProperty(
+                 ALG_ALIAS + service + "." + algorithm)) != null)
+           {
+             if (algorithm.equals(alias))  // Refers to itself!
+               break;
+             algorithm = alias;
+             if (count++ > MAX_ALIASES)
+               throw new NoSuchAlgorithmException("too many aliases");
+           }
+         if (provider.getProperty(service + "." + algorithm) == null)
+           throw new NoSuchAlgorithmException(algorithm);
+       }
+ 
+     // Find and instantiate the implementation.
+     Class clazz = null;
+     ClassLoader loader = provider.getClass().getClassLoader();
+     Constructor constructor = null;
+     String error = algorithm;
+ 
+     try
+       {
+         if (loader != null)
+           clazz = loader.loadClass(provider.getProperty(service+"."+algorithm));
+         else
+           clazz = Class.forName(provider.getProperty(service+"."+algorithm));
+         constructor = getCompatibleConstructor(clazz, initArgs);
+         return constructor.newInstance(initArgs);
+       }
+     catch (ClassNotFoundException cnfe)
+       {
+         error = "class not found: " + algorithm;
+       }
+     catch (IllegalAccessException iae)
+       {
+         error = "illegal access: " + iae.getMessage();
+       }
+     catch (InstantiationException ie)
+       {
+         error = "instantiation exception: " + ie.getMessage();
+       }
+     catch (ExceptionInInitializerError eiie)
+       {
+         error = "exception in initializer: " + eiie.getMessage();
+       }
+     catch (SecurityException se)
+       {
+         error = "security exception: " + se.getMessage();
+       }
+     catch (NoSuchMethodException nsme)
+       {
+         error = "no appropriate constructor found";
+       }
+ 
+     throw new NoSuchAlgorithmException(error);
+   }
+ 
+   // Own methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Find a constructor in the given class that can take the specified
+    * argument list, allowing any of which to be null.
+    *
+    * @param clazz    The class from which to get the constructor.
+    * @param initArgs The argument list to be passed to the constructor.
+    * @return The constructor.
+    * @throws NoSuchMethodException If no constructor of the given class
+    *         can take the specified argument array.
+    */
+   private static Constructor getCompatibleConstructor(Class clazz,
+                                                       Object[] initArgs)
+     throws NoSuchMethodException
+   {
+     Constructor[] c = clazz.getConstructors();
+     outer:for (int i = 0; i < c.length; i++)
+       {
+         Class[] argTypes = c[i].getParameterTypes();
+         if (argTypes.length != initArgs.length)
+           continue;
+         for (int j = 0; j < argTypes.length; j++)
+           {
+             if (initArgs[j] != null &&
+                 !argTypes[j].isAssignableFrom(initArgs[j].getClass()))
+               continue outer;
+           }
+         // If we reach this point, we know this constructor (c[i]) has
+         // the same number of parameters as the target parameter list,
+         // and all our parameters are either (1) null, or (2) assignable
+         // to the target parameter type.
+         return c[i];
+       }
+     throw new NoSuchMethodException();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/OID.java gcc-4.1.0/libjava/classpath/gnu/java/security/OID.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/OID.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/OID.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,509 ----
+ /* OID.java -- numeric representation of an object identifier
+    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security;
+ 
+ import gnu.java.security.der.DEREncodingException;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * This immutable class represents an object identifier, or OID.
+  *
+  * <p>OIDs are represented as a series of hierarchical tokens, each of
+  * which is usually represented as a single, unsigned integer. The
+  * hierarchy works so that later tokens are considered within the group
+  * of earlier tokens. Thus, the OID for the Serpent block cipher,
+  * 1.3.6.1.4.1.11591.13.2, is maintained by the GNU project, whose OID
+  * is 1.3.6.1.4.1.11591 (which is, in turn, part of bigger, more general
+  * bodies; the topmost, 1, stands for the OIDs assigned by the
+  * International Standards Organization, ISO).
+  *
+  * <p>OIDs can be represented in a variety of ways, including the
+  * dotted-decimal form we use here.
+  *
+  * <p>OIDs may be relative, in which case the first two elements of the
+  * OID are omitted.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class OID implements Cloneable, Comparable, java.io.Serializable
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * The numeric ID structure.
+    */
+   private int[] components;
+ 
+   /**
+    * The string representation of this OID, in dotted-decimal format.
+    */
+   private transient String strRep;
+ 
+   /**
+    * The DER encoding of this OID.
+    */
+   private transient byte[] der;
+ 
+   /**
+    * Whether or not this OID is relative.
+    */
+   private boolean relative;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new OID from the given byte array. The argument (which can
+    * neither be null nor zero-length) is copied to prevent subsequent
+    * modification.
+    *
+    * @param components The numeric IDs.
+    * @throws IllegalArgumentException If <i>components</i> is null or empty.
+    */
+   public OID(int[] components)
+   {
+     this(components, false);
+   }
+ 
+   /**
+    * Create a new OID from the given byte array. The argument (which can
+    * neither be null nor zero-length) is copied to prevent subsequent
+    * modification.
+    *
+    * @param components The numeric IDs.
+    * @param relative The relative flag.
+    * @throws IllegalArgumentException If <i>components</i> is null or empty.
+    */
+   public OID(int[] components, boolean relative)
+   {
+     if (components == null || components.length == 0)
+       throw new IllegalArgumentException();
+     this.components = (int[]) components.clone();
+     this.relative = relative;
+   }
+ 
+   /**
+    * Create a new OID from the given dotted-decimal representation.
+    *
+    * @param strRep The string representation of the OID.
+    * @throws IllegalArgumentException If the string does not contain at
+    * least one integer.
+    * @throws NumberFormatException If the string does not contain only
+    * numbers and periods ('.').
+    */
+   public OID(String strRep)
+   {
+     this(strRep, false);
+   }
+ 
+   /**
+    * Create a new OID from the given dotted-decimal representation.
+    *
+    * @param strRep The string representation of the OID.
+    * @param relative The relative flag.
+    * @throws IllegalArgumentException If the string does not contain at
+    * least one integer.
+    * @throws NumberFormatException If the string does not contain only
+    * numbers and periods ('.').
+    */
+   public OID(String strRep, boolean relative)
+   {
+     this.relative = relative;
+     this.strRep = strRep;
+     components = fromString(strRep);
+   }
+ 
+   /**
+    * Construct a new OID from the DER bytes in an input stream. This method
+    * does not read the tag or the length field from the input stream, so
+    * the caller must supply the number of octets in this OID's encoded
+    * form.
+    *
+    * @param derIn The DER input stream.
+    * @param len   The number of bytes in the encoded form.
+    * @throws IOException If an error occurs reading the OID.
+    */
+   public OID(InputStream derIn, int len) throws IOException
+   {
+     this(derIn, len, false);
+   }
+ 
+   /**
+    * Construct a new OID from the DER bytes in an input stream. This method
+    * does not read the tag or the length field from the input stream, so
+    * the caller must supply the number of octets in this OID's encoded
+    * form.
+    *
+    * @param derIn The DER input stream.
+    * @param len   The number of bytes in the encoded form.
+    * @param relative The relative flag.
+    * @throws IOException If an error occurs reading the OID.
+    */
+   public OID(InputStream derIn, int len, boolean relative) throws IOException
+   {
+     der = new byte[len];
+     derIn.read(der);
+     this.relative = relative;
+     try
+       {
+         components = fromDER(der, relative);
+       }
+     catch (ArrayIndexOutOfBoundsException aioobe)
+       {
+         aioobe.printStackTrace();
+         throw aioobe;
+       }
+   }
+ 
+   /**
+    * Construct a new OID from the given DER bytes.
+    *
+    * @param encoded The DER encoded OID.
+    * @throws IOException If an error occurs reading the OID.
+    */
+   public OID(byte[] encoded) throws IOException
+   {
+     this(encoded, false);
+   }
+ 
+   /**
+    * Construct a new OID from the given DER bytes.
+    *
+    * @param root The root OID.
+    * @param encoded The encoded relative OID.
+    * @param relative The relative flag.
+    */
+   public OID(byte[] encoded, boolean relative) throws IOException
+   {
+     der = (byte[]) encoded.clone();
+     this.relative = relative;
+     try
+       {
+         components = fromDER(der, relative);
+       }
+     catch (ArrayIndexOutOfBoundsException aioobe)
+       {
+         aioobe.printStackTrace();
+         throw aioobe;
+       }
+   }
+ 
+   /**
+    * Our private constructor.
+    */
+   private OID()
+   {
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the numeric IDs of this OID. The value returned is copied to
+    * prevent modification.
+    *
+    * @return The IDs in a new integer array.
+    */
+   public int[] getIDs()
+   {
+     return (int[]) components.clone();
+   }
+ 
+   /**
+    * Get the DER encoding of this OID, minus the tag and length fields.
+    *
+    * @return The DER bytes.
+    */
+   public byte[] getDER()
+   {
+     if (der == null)
+       {
+         ByteArrayOutputStream bout = new ByteArrayOutputStream();
+         int i = 0;
+         if (!relative)
+           {
+             int b = components[i++] * 40 + (components.length > 1
+               ? components[i++] : 0);
+             encodeSubID(bout, b);
+           }
+         for ( ; i < components.length; i++)
+           encodeSubID(bout, components[i]);
+         der = bout.toByteArray();
+       }
+     return (byte[]) der.clone();
+   }
+ 
+   /**
+    * Get the parent OID of this OID. That is, if this OID is "1.2.3.4",
+    * then the parent OID will be "1.2.3". If this OID is a top-level
+    * OID, this method returns null.
+    *
+    * @return The parent OID, or null.
+    */
+   public OID getParent()
+   {
+     if (components.length == 1)
+       return null;
+     int[] parent = new int[components.length - 1];
+     System.arraycopy(components, 0, parent, 0, parent.length);
+     return new OID(parent);
+   }
+ 
+   public OID getChild(int id)
+   {
+     int[] child = new int[components.length + 1];
+     System.arraycopy(components, 0, child, 0, components.length);
+     child[child.length - 1] = id;
+     return new OID(child);
+   }
+ 
+   /**
+    * Get the root OID of this OID. That is, the first two components.
+    *
+    * @return The root OID.
+    */
+   public OID getRoot()
+   {
+     if (components.length <= 2)
+       return this;
+     int[] root = new int[2];
+     root[0] = components[0];
+     root[1] = components[1];
+     return new OID(root);
+   }
+ 
+   public boolean isRelative()
+   {
+     return relative;
+   }
+ 
+   /**
+    * Returns a copy of this OID.
+    *
+    * @return The copy.
+    */
+   public Object clone()
+   {
+     OID oid = new OID();
+     oid.components = this.components;
+     oid.strRep = this.strRep;
+     return oid;
+   }
+ 
+   /* Nice idea, but possibly too expensive for whatever benefit it
+    * provides.
+ 
+   public String getShortName()
+   {
+     return OIDTable.getShortName(this);
+   }
+ 
+   public String getLongName()
+   {
+     return OIDTable.getLongName(this);
+   }
+ 
+   */
+ 
+   /**
+    * Returns the value of this OID in dotted-decimal format.
+    *
+    * @return The string representation.
+    */
+   public String toString()
+   {
+     if (strRep != null)
+       return strRep;
+     else
+       {
+         StringBuffer buf = new StringBuffer();
+         for (int i = 0; i < components.length; i++)
+           {
+             buf.append((long) components[i] & 0xFFFFFFFFL);
+             if (i < components.length - 1)
+               buf.append('.');
+           }
+         return (strRep = buf.toString());
+       }
+   }
+ 
+   /**
+    * Computes a hash code for this OID.
+    *
+    * @return The hash code.
+    */
+   public int hashCode()
+   {
+     int ret = 0;
+     for (int i = 0; i < components.length; i++)
+       ret += components[i] << (i & 31);
+     return ret;
+   }
+ 
+   /**
+    * Tests whether or not this OID equals another.
+    *
+    * @return Whether or not this OID equals the other.
+    */
+   public boolean equals(Object o)
+   {
+     if (!(o instanceof OID))
+       return false;
+     return java.util.Arrays.equals(components, ((OID) o).components);
+   }
+ 
+   /**
+    * Compares this OID to another. The comparison is essentially
+    * lexicographic, where the two OIDs are compared until their
+    * first difference, then that difference is returned. If one OID is
+    * shorter, but all elements equal between the two for the shorter
+    * length, then the shorter OID is lesser than the longer.
+    *
+    * @param o The object to compare.
+    * @return An integer less than, equal to, or greater than zero if
+    *         this object is less than, equal to, or greater than the
+    *         argument.
+    * @throws ClassCastException If <i>o</i> is not an OID.
+    */
+   public int compareTo(Object o)
+   {
+     if (equals(o))
+       return 0;
+     int[] components2 = ((OID) o).components;
+     int len = Math.min(components.length, components2.length);
+     for (int i = 0; i < len; i++)
+       {
+         if (components[i] != components2[i])
+           return (components[i] < components2[i]) ? -1 : 1;
+       }
+     if (components.length == components2.length)
+       return 0;
+     return (components.length < components2.length) ? -1 : 1;
+   }
+ 
+   // Own methods.
+   // ------------------------------------------------------------------------
+ 
+   private static int[] fromDER(byte[] der, boolean relative)
+     throws DEREncodingException
+   {
+     // cannot be longer than this.
+     int[] components = new int[der.length + 1];
+     int count = 0;
+     int i = 0;
+     if (!relative && i < der.length)
+       {
+         // Non-relative OIDs have the first two arcs coded as:
+         //
+         //   i = first_arc * 40 + second_arc;
+         //
+         int j = (der[i] & 0xFF);
+         components[count++] = j / 40;
+         components[count++] = j % 40;
+         i++;
+       }
+     while (i < der.length)
+       {
+         int j = 0;
+         do
+           {
+             j = der[i++] & 0xFF;
+             components[count] <<= 7;
+             components[count]  |= j & 0x7F;
+             if (i >= der.length && (j & 0x80) != 0)
+               throw new DEREncodingException("malformed OID");
+           }
+         while ((j & 0x80) != 0);
+         count++;
+       }
+     if (count == components.length)
+       return components;
+     int[] ret = new int[count];
+     System.arraycopy(components, 0, ret, 0, count);
+     return ret;
+   }
+ 
+   private static int[] fromString(String strRep) throws NumberFormatException
+   {
+     if (strRep.startsWith("OID.") || strRep.startsWith("oid."))
+       strRep = strRep.substring(4);
+     StringTokenizer tok = new StringTokenizer(strRep, ".");
+     if (tok.countTokens() == 0)
+       throw new IllegalArgumentException();
+     int[] components = new int[tok.countTokens()];
+     int i = 0;
+     while (tok.hasMoreTokens())
+       {
+         components[i++] = Integer.parseInt(tok.nextToken());
+       }
+     return components;
+   }
+ 
+   private static void encodeSubID(ByteArrayOutputStream out, int id)
+   {
+     if (id < 128)
+       {
+         out.write(id);
+       }
+     else if (id < 16384)
+       {
+         out.write((id >>> 7) | 0x80);
+         out.write(id & 0x7F);
+       }
+     else if (id < 2097152)
+       {
+         out.write((id >>> 14) | 0x80);
+         out.write(((id >>> 7) | 0x80) & 0xFF);
+         out.write(id & 0x7F);
+       }
+     else if (id < 268435456)
+       {
+         out.write( (id >>> 21) | 0x80);
+         out.write(((id >>> 14) | 0x80) & 0xFF);
+         out.write(((id >>>  7) | 0x80) & 0xFF);
+         out.write(id & 0x7F);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/PolicyFile.java gcc-4.1.0/libjava/classpath/gnu/java/security/PolicyFile.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/PolicyFile.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/PolicyFile.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,684 ----
+ /* PolicyFile.java -- policy file reader
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.security;
+ 
+ import gnu.classpath.SystemProperties;
+ import gnu.classpath.debug.Component;
+ import gnu.classpath.debug.SystemLogger;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.InputStreamReader;
+ import java.io.StreamTokenizer;
+ import java.lang.reflect.Constructor;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.security.AccessController;
+ import java.security.CodeSource;
+ import java.security.KeyStore;
+ import java.security.KeyStoreException;
+ import java.security.Permission;
+ import java.security.PermissionCollection;
+ import java.security.Permissions;
+ import java.security.Policy;
+ import java.security.Principal;
+ import java.security.PrivilegedActionException;
+ import java.security.PrivilegedExceptionAction;
+ import java.security.Security;
+ import java.security.UnresolvedPermission;
+ import java.security.cert.Certificate;
+ import java.security.cert.X509Certificate;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.StringTokenizer;
+ import java.util.logging.Logger;
+ 
+ /**
+  * An implementation of a {@link java.security.Policy} object whose
+  * permissions are specified by a <em>policy file</em>.
+  *
+  * <p>The approximate syntax of policy files is:</p>
+  *
+  * <pre>
+  * policyFile ::= keystoreOrGrantEntries ;
+  *
+  * keystoreOrGrantEntries ::= keystoreOrGrantEntry |
+  *                            keystoreOrGrantEntries keystoreOrGrantEntry |
+  *                            EMPTY ;
+  *
+  * keystoreOrGrantEntry ::= keystoreEntry | grantEntry ;
+  *
+  * keystoreEntry ::= "keystore" keystoreUrl ';' |
+  *                   "keystore" keystoreUrl ',' keystoreAlgorithm ';' ;
+  *
+  * keystoreUrl ::= URL ;
+  * keystoreAlgorithm ::= STRING ;
+  *
+  * grantEntry ::= "grant" domainParameters '{' permissions '}' ';'
+  *
+  * domainParameters ::= domainParameter |
+  *                      domainParameter ',' domainParameters ;
+  *
+  * domainParameter ::= "signedBy" signerNames |
+  *                     "codeBase" codeBaseUrl |
+  *                     "principal" principalClassName principalName |
+  *                     "principal" principalName ;
+  *
+  * signerNames ::= quotedString ;
+  * codeBaseUrl ::= URL ;
+  * principalClassName ::= STRING ;
+  * principalName ::= quotedString ;
+  *
+  * quotedString ::= quoteChar STRING quoteChar ;
+  * quoteChar ::= '"' | '\'';
+  *
+  * permissions ::= permission | permissions permission ;
+  *
+  * permission ::= "permission" permissionClassName permissionTarget permissionAction |
+  *                "permission" permissionClassName permissionTarget |
+  *                "permission" permissionClassName;
+  * </pre>
+  *
+  * <p>Comments are either form of Java comments. Keystore entries only
+  * affect subsequent grant entries, so if a grant entry preceeds a
+  * keystore entry, that grant entry is not affected by that keystore
+  * entry. Certian instances of <code>${property-name}</code> will be
+  * replaced with <code>System.getProperty("property-name")</code> in
+  * quoted strings.</p>
+  *
+  * <p>This class will load the following files when created or
+  * refreshed, in order:</p>
+  *
+  * <ol>
+  * <li>The file <code>${java.home}/lib/security/java.policy</code>.</li>
+  * <li>All URLs specified by security properties
+  * <code>"policy.file.<i>n</i>"</code>, for increasing <i>n</i>
+  * starting from 1. The sequence stops at the first undefined
+  * property, so you must set <code>"policy.file.1"</code> if you also
+  * set <code>"policy.file.2"</code>, and so on.</li>
+  * <li>The URL specified by the property
+  * <code>"java.security.policy"</code>.</li>
+  * </ol>
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @see java.security.Policy
+  */
+ public final class PolicyFile extends Policy
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   private static final Logger logger = SystemLogger.SYSTEM;
+ 
+   private static final String DEFAULT_POLICY =
+     SystemProperties.getProperty("java.home")
+     + SystemProperties.getProperty("file.separator") + "lib"
+     + SystemProperties.getProperty("file.separator") + "security"
+     + SystemProperties.getProperty("file.separator") + "java.policy";
+   private static final String DEFAULT_USER_POLICY =
+     SystemProperties.getProperty ("user.home") +
+     SystemProperties.getProperty ("file.separator") + ".java.policy";
+ 
+   private final Map cs2pc;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public PolicyFile()
+   {
+     cs2pc = new HashMap();
+     refresh();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public PermissionCollection getPermissions(CodeSource codeSource)
+   {
+     Permissions perms = new Permissions();
+     for (Iterator it = cs2pc.entrySet().iterator(); it.hasNext(); )
+       {
+         Map.Entry e = (Map.Entry) it.next();
+         CodeSource cs = (CodeSource) e.getKey();
+         if (cs.implies(codeSource))
+           {
+             logger.log (Component.POLICY, "{0} -> {1}", new Object[]
+               { cs, codeSource });
+             PermissionCollection pc = (PermissionCollection) e.getValue();
+             for (Enumeration ee = pc.elements(); ee.hasMoreElements(); )
+               {
+                 perms.add((Permission) ee.nextElement());
+               }
+           }
+         else
+           logger.log (Component.POLICY, "{0} !-> {1}", new Object[]
+             { cs, codeSource });
+       }
+     logger.log (Component.POLICY, "returning permissions {0} for {1}",
+                 new Object[] { perms, codeSource });
+     return perms;
+   }
+ 
+   public void refresh()
+   {
+     cs2pc.clear();
+     final List policyFiles = new LinkedList();
+     try
+       {
+         policyFiles.add (new File (DEFAULT_POLICY).toURL());
+         policyFiles.add (new File (DEFAULT_USER_POLICY).toURL ());
+ 
+         AccessController.doPrivileged(
+           new PrivilegedExceptionAction()
+           {
+             public Object run() throws Exception
+             {
+               String allow = Security.getProperty ("policy.allowSystemProperty");
+               if (allow == null || Boolean.getBoolean (allow))
+                 {
+                   String s = SystemProperties.getProperty ("java.security.policy");
+                   logger.log (Component.POLICY, "java.security.policy={0}", s);
+                   if (s != null)
+                     {
+                       boolean only = s.startsWith ("=");
+                       if (only)
+                         s = s.substring (1);
+                       policyFiles.clear ();
+                       policyFiles.add (new URL (s));
+                       if (only)
+                         return null;
+                     }
+                 }
+               for (int i = 1; ; i++)
+                 {
+                   String pname = "policy.url." + i;
+                   String s = Security.getProperty (pname);
+                   logger.log (Component.POLICY, "{0}={1}", new Object []
+                     { pname, s });
+                   if (s == null)
+                     break;
+                   policyFiles.add (new URL (s));
+                 }
+               return null;
+             }
+           });
+       }
+     catch (PrivilegedActionException pae)
+       {
+         logger.log (Component.POLICY, "reading policy properties", pae);
+       }
+     catch (MalformedURLException mue)
+       {
+         logger.log (Component.POLICY, "setting default policies", mue);
+       }
+ 
+     logger.log (Component.POLICY, "building policy from URLs {0}",
+                 policyFiles);
+     for (Iterator it = policyFiles.iterator(); it.hasNext(); )
+       {
+         try
+           {
+             URL url = (URL) it.next();
+             parse(url);
+           }
+         catch (IOException ioe)
+           {
+             logger.log (Component.POLICY, "reading policy", ioe);
+           }
+       }
+   }
+ 
+   public String toString()
+   {
+     return super.toString() + " [ " + cs2pc.toString() + " ]";
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private static final int STATE_BEGIN = 0;
+   private static final int STATE_GRANT = 1;
+   private static final int STATE_PERMS = 2;
+ 
+   /**
+    * Parse a policy file, incorporating the permission definitions
+    * described therein.
+    *
+    * @param url The URL of the policy file to read.
+    * @throws IOException if an I/O error occurs, or if the policy file
+    * cannot be parsed.
+    */
+   private void parse(final URL url) throws IOException
+   {
+     logger.log (Component.POLICY, "reading policy file from {0}", url);
+     final StreamTokenizer in = new StreamTokenizer(new InputStreamReader(url.openStream()));
+     in.resetSyntax();
+     in.slashSlashComments(true);
+     in.slashStarComments(true);
+     in.wordChars('A', 'Z');
+     in.wordChars('a', 'z');
+     in.wordChars('0', '9');
+     in.wordChars('.', '.');
+     in.wordChars('_', '_');
+     in.wordChars('$', '$');
+     in.whitespaceChars(' ', ' ');
+     in.whitespaceChars('\t', '\t');
+     in.whitespaceChars('\f', '\f');
+     in.whitespaceChars('\n', '\n');
+     in.whitespaceChars('\r', '\r');
+     in.quoteChar('\'');
+     in.quoteChar('"');
+ 
+     int tok;
+     int state = STATE_BEGIN;
+     List keystores = new LinkedList();
+     URL currentBase = null;
+     List currentCerts = new LinkedList();
+     Permissions currentPerms = new Permissions();
+     while ((tok = in.nextToken()) != StreamTokenizer.TT_EOF)
+       {
+         switch (tok)
+           {
+           case '{':
+             if (state != STATE_GRANT)
+               error(url, in, "spurious '{'");
+             state = STATE_PERMS;
+             tok = in.nextToken();
+             break;
+           case '}':
+             if (state != STATE_PERMS)
+               error(url, in, "spurious '}'");
+             state = STATE_BEGIN;
+             currentPerms.setReadOnly();
+             Certificate[] c = null;
+             if (!currentCerts.isEmpty())
+               c = (Certificate[]) currentCerts.toArray(new Certificate[currentCerts.size()]);
+             cs2pc.put(new CodeSource(currentBase, c), currentPerms);
+             currentCerts.clear();
+             currentPerms = new Permissions();
+             currentBase = null;
+             tok = in.nextToken();
+             if (tok != ';')
+               in.pushBack();
+             continue;
+           }
+         if (tok != StreamTokenizer.TT_WORD)
+           {
+             error(url, in, "expecting word token");
+           }
+ 
+         // keystore "<keystore-path>" [',' "<keystore-type>"] ';'
+         if (in.sval.equalsIgnoreCase("keystore"))
+           {
+             String alg = KeyStore.getDefaultType();
+             tok = in.nextToken();
+             if (tok != '"' && tok != '\'')
+               error(url, in, "expecting key store URL");
+             String store = in.sval;
+             tok = in.nextToken();
+             if (tok == ',')
+               {
+                 tok = in.nextToken();
+                 if (tok != '"' && tok != '\'')
+                   error(url, in, "expecting key store type");
+                 alg = in.sval;
+                 tok = in.nextToken();
+               }
+             if (tok != ';')
+               error(url, in, "expecting semicolon");
+             try
+               {
+                 KeyStore keystore = KeyStore.getInstance(alg);
+                 keystore.load(new URL(url, store).openStream(), null);
+                 keystores.add(keystore);
+               }
+             catch (Exception x)
+               {
+                 error(url, in, x.toString());
+               }
+           }
+         else if (in.sval.equalsIgnoreCase("grant"))
+           {
+             if (state != STATE_BEGIN)
+               error(url, in, "extraneous grant keyword");
+             state = STATE_GRANT;
+           }
+         else if (in.sval.equalsIgnoreCase("signedBy"))
+           {
+             if (state != STATE_GRANT && state != STATE_PERMS)
+               error(url, in, "spurious 'signedBy'");
+             if (keystores.isEmpty())
+               error(url, in, "'signedBy' with no keystores");
+             tok = in.nextToken();
+             if (tok != '"' && tok != '\'')
+               error(url, in, "expecting signedBy name");
+             StringTokenizer st = new StringTokenizer(in.sval, ",");
+             while (st.hasMoreTokens())
+               {
+                 String alias = st.nextToken();
+                 for (Iterator it = keystores.iterator(); it.hasNext(); )
+                   {
+                     KeyStore keystore = (KeyStore) it.next();
+                     try
+                       {
+                         if (keystore.isCertificateEntry(alias))
+                           currentCerts.add(keystore.getCertificate(alias));
+                       }
+                     catch (KeyStoreException kse)
+                       {
+                         error(url, in, kse.toString());
+                       }
+                   }
+               }
+             tok = in.nextToken();
+             if (tok != ',')
+               {
+                 if (state != STATE_GRANT)
+                   error(url, in, "spurious ','");
+                 in.pushBack();
+               }
+           }
+         else if (in.sval.equalsIgnoreCase("codeBase"))
+           {
+             if (state != STATE_GRANT)
+               error(url, in, "spurious 'codeBase'");
+             tok = in.nextToken();
+             if (tok != '"' && tok != '\'')
+               error(url, in, "expecting code base URL");
+             String base = expand(in.sval);
+             if (File.separatorChar != '/')
+               base = base.replace(File.separatorChar, '/');
+             try
+               {
+                 currentBase = new URL(base);
+               }
+             catch (MalformedURLException mue)
+               {
+                 error(url, in, mue.toString());
+               }
+             tok = in.nextToken();
+             if (tok != ',')
+               in.pushBack();
+           }
+         else if (in.sval.equalsIgnoreCase("principal"))
+           {
+             if (state != STATE_GRANT)
+               error(url, in, "spurious 'principal'");
+             tok = in.nextToken();
+             if (tok == StreamTokenizer.TT_WORD)
+               {
+                 tok = in.nextToken();
+                 if (tok != '"' && tok != '\'')
+                   error(url, in, "expecting principal name");
+                 String name = in.sval;
+                 Principal p = null;
+                 try
+                   {
+                     Class pclass = Class.forName(in.sval);
+                     Constructor c =
+                       pclass.getConstructor(new Class[] { String.class });
+                     p = (Principal) c.newInstance(new Object[] { name });
+                   }
+                 catch (Exception x)
+                   {
+                     error(url, in, x.toString());
+                   }
+                 for (Iterator it = keystores.iterator(); it.hasNext(); )
+                   {
+                     KeyStore ks = (KeyStore) it.next();
+                     try
+                       {
+                         for (Enumeration e = ks.aliases(); e.hasMoreElements(); )
+                           {
+                             String alias = (String) e.nextElement();
+                             if (ks.isCertificateEntry(alias))
+                               {
+                                 Certificate cert = ks.getCertificate(alias);
+                                 if (!(cert instanceof X509Certificate))
+                                   continue;
+                                 if (p.equals(((X509Certificate) cert).getSubjectDN()) ||
+                                     p.equals(((X509Certificate) cert).getSubjectX500Principal()))
+                                   currentCerts.add(cert);
+                               }
+                           }
+                       }
+                     catch (KeyStoreException kse)
+                       {
+                         error(url, in, kse.toString());
+                       }
+                   }
+               }
+             else if (tok == '"' || tok == '\'')
+               {
+                 String alias = in.sval;
+                 for (Iterator it = keystores.iterator(); it.hasNext(); )
+                   {
+                     KeyStore ks = (KeyStore) it.next();
+                     try
+                       {
+                         if (ks.isCertificateEntry(alias))
+                           currentCerts.add(ks.getCertificate(alias));
+                       }
+                     catch (KeyStoreException kse)
+                       {
+                         error(url, in, kse.toString());
+                       }
+                   }
+               }
+             else
+               error(url, in, "expecting principal");
+             tok = in.nextToken();
+             if (tok != ',')
+               in.pushBack();
+           }
+         else if (in.sval.equalsIgnoreCase("permission"))
+           {
+             if (state != STATE_PERMS)
+               error(url, in, "spurious 'permission'");
+             tok = in.nextToken();
+             if (tok != StreamTokenizer.TT_WORD)
+               error(url, in, "expecting permission class name");
+             String className = in.sval;
+             Class clazz = null;
+             try
+               {
+                 clazz = Class.forName(className);
+               }
+             catch (ClassNotFoundException cnfe)
+               {
+               }
+             tok = in.nextToken();
+             if (tok == ';')
+               {
+                 if (clazz == null)
+                   {
+                     currentPerms.add(new UnresolvedPermission(className,
+ 		      null, null, (Certificate[]) currentCerts.toArray(new Certificate[currentCerts.size()])));
+                     continue;
+                   }
+                 try
+                   {
+                     currentPerms.add((Permission) clazz.newInstance());
+                   }
+                 catch (Exception x)
+                   {
+                     error(url, in, x.toString());
+                   }
+                 continue;
+               }
+             if (tok != '"' && tok != '\'')
+               error(url, in, "expecting permission target");
+             String target = expand(in.sval);
+             tok = in.nextToken();
+             if (tok == ';')
+               {
+                 if (clazz == null)
+                   {
+                     currentPerms.add(new UnresolvedPermission(className,
+ 		      target, null, (Certificate[]) currentCerts.toArray(new Certificate[currentCerts.size()])));
+                     continue;
+                   }
+                 try
+                   {
+                     Constructor c =
+                       clazz.getConstructor(new Class[] { String.class });
+                     currentPerms.add((Permission) c.newInstance(
+                       new Object[] { target }));
+                   }
+                 catch (Exception x)
+                   {
+                     error(url, in, x.toString());
+                   }
+                 continue;
+               }
+             if (tok != ',')
+               error(url, in, "expecting ','");
+             tok = in.nextToken();
+             if (tok == StreamTokenizer.TT_WORD)
+               {
+                 if (!in.sval.equalsIgnoreCase("signedBy"))
+                   error(url, in, "expecting 'signedBy'");
+                 try
+                   {
+                     Constructor c =
+                       clazz.getConstructor(new Class[] { String.class });
+                     currentPerms.add((Permission) c.newInstance(
+                       new Object[] { target }));
+                   }
+                 catch (Exception x)
+                   {
+                     error(url, in, x.toString());
+                   }
+                 in.pushBack();
+                 continue;
+               }
+             if (tok != '"' && tok != '\'')
+               error(url, in, "expecting permission action");
+             String action = in.sval;
+             if (clazz == null)
+               {
+                 currentPerms.add(new UnresolvedPermission(className,
+ 		  target, action, (Certificate[]) currentCerts.toArray(new Certificate[currentCerts.size()])));
+                 continue;
+               }
+             else
+               {
+                 try
+                   {
+                     Constructor c = clazz.getConstructor(
+                       new Class[] { String.class, String.class });
+                     currentPerms.add((Permission) c.newInstance(
+                       new Object[] { target, action }));
+                   }
+                 catch (Exception x)
+                   {
+                     error(url, in, x.toString());
+                   }
+               }
+             tok = in.nextToken();
+             if (tok != ';' && tok != ',')
+               error(url, in, "expecting ';' or ','");
+           }
+       }
+   }
+ 
+   /**
+    * Expand all instances of <code>"${property-name}"</code> into
+    * <code>System.getProperty("property-name")</code>.
+    */
+   private static String expand(final String s)
+   {
+     final StringBuffer result = new StringBuffer();
+     final StringBuffer prop = new StringBuffer();
+     int state = 0;
+     for (int i = 0; i < s.length(); i++)
+       {
+         switch (state)
+           {
+           case 0:
+             if (s.charAt(i) == '$')
+               state = 1;
+             else
+               result.append(s.charAt(i));
+             break;
+           case 1:
+             if (s.charAt(i) == '{')
+               state = 2;
+             else
+               {
+                 state = 0;
+                 result.append('$').append(s.charAt(i));
+               }
+             break;
+           case 2:
+             if (s.charAt(i) == '}')
+               {
+                 String p = prop.toString();
+                 if (p.equals("/"))
+                   p = "file.separator";
+                 p = System.getProperty(p);
+                 if (p == null)
+                   p = "";
+                 result.append(p);
+                 prop.setLength(0);
+                 state = 0;
+               }
+             else
+               prop.append(s.charAt(i));
+             break;
+           }
+       }
+     if (state != 0)
+       result.append('$').append('{').append(prop);
+     return result.toString();
+   }
+ 
+   /**
+    * I miss macros.
+    */
+   private static void error(URL base, StreamTokenizer in, String msg)
+     throws IOException
+   {
+     throw new IOException(base+":"+in.lineno()+": "+msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/action/GetPropertyAction.java gcc-4.1.0/libjava/classpath/gnu/java/security/action/GetPropertyAction.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/action/GetPropertyAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/action/GetPropertyAction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* GetPropertyAction.java
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.security.action;
+ 
+ import java.security.PrivilegedAction;
+ 
+ /**
+  * PrivilegedAction implementation that calls System.getProperty() with
+  * the property name passed to its constructor.
+  *
+  * Example of use:
+  * <code>
+  * GetPropertyAction action = new GetPropertyAction("http.proxyPort");
+  * String port = AccessController.doPrivileged(action);
+  * </code>
+  */
+ public class GetPropertyAction implements PrivilegedAction
+ {
+   String name;
+   String value = null;
+ 
+   public GetPropertyAction()
+   {
+   }
+   
+   public GetPropertyAction(String propName)
+   {
+     setParameters(propName);
+   }
+ 
+   public GetPropertyAction(String propName, String defaultValue)
+   {
+     setParameters(propName, defaultValue);
+   }
+   
+   public Object run()
+   {
+     return System.getProperty(name, value);
+   }
+   
+   public GetPropertyAction setParameters(String propName)
+   {
+     this.name = propName;
+     this.value = null;
+     return this;
+   }
+ 
+   public GetPropertyAction setParameters(String propName, String defaultValue)
+   {
+     this.name = propName;
+     this.value = defaultValue;
+     return this;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/action/GetSecurityPropertyAction.java gcc-4.1.0/libjava/classpath/gnu/java/security/action/GetSecurityPropertyAction.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/action/GetSecurityPropertyAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/action/GetSecurityPropertyAction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,93 ----
+ /* GetSecurityPropertyAction.java
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.security.action;
+ 
+ import java.security.PrivilegedAction;
+ import java.security.Security;
+ 
+ /**
+  * PrivilegedAction implementation that calls Security.getProperty()
+  * with the property name passed to its constructor.
+  *
+  * Example of use:
+  * <code>
+  * GetSecurityPropertyAction action = new GetSecurityPropertyAction("javax.net.ssl.trustStorePassword");
+  * String passwd = AccessController.doPrivileged(action);
+  * </code>
+  */
+ public class GetSecurityPropertyAction implements PrivilegedAction
+ {
+   private String name;
+   private String value;
+ 
+   public GetSecurityPropertyAction()
+   {
+   }
+ 
+   public GetSecurityPropertyAction(String propName)
+   {
+     setParameters(propName);
+   }
+ 
+   public GetSecurityPropertyAction(String propName, String defaultValue)
+   {
+     setParameters(propName, defaultValue);
+   }
+ 
+   public GetSecurityPropertyAction setParameters(String propName)
+   {
+     this.name = propName;
+     this.value = null;
+     return this;
+   }
+ 
+   public GetSecurityPropertyAction setParameters(String propName, String defaultValue)
+   {
+     this.name = propName;
+     this.value = defaultValue;
+     return this;
+   }
+ 
+   public Object run()
+   {
+     String val = Security.getProperty(name);
+     if (val == null)
+       val = value;
+     return val;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/action/SetAccessibleAction.java gcc-4.1.0/libjava/classpath/gnu/java/security/action/SetAccessibleAction.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/action/SetAccessibleAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/action/SetAccessibleAction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* SetAccessibleAction.java
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.security.action;
+ 
+ import java.lang.reflect.AccessibleObject;
+ import java.security.PrivilegedAction;
+ 
+ /**
+  * PrivilegedAction implementation that calls setAccessible(true) on the 
+  * AccessibleObject passed to its constructor.
+  *
+  * Example of use:
+  * <code>
+  * Field dataField = cl.getDeclaredField("data");
+  * AccessController.doPrivileged(new SetAccessibleAction(dataField));
+  * </code>
+  */
+ public class SetAccessibleAction implements PrivilegedAction
+ {
+   AccessibleObject member;
+   
+   public SetAccessibleAction()
+   {
+   }
+   
+   public SetAccessibleAction(AccessibleObject member)
+   {
+     this.member = member;
+   }
+   
+   public Object run()
+   {
+     member.setAccessible(true);
+     return null;
+   }
+   
+   public SetAccessibleAction setMember(AccessibleObject member)
+   {
+     this.member = member;
+     return this;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/action/package.html gcc-4.1.0/libjava/classpath/gnu/java/security/action/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/security/action/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/action/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.security.action package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.security.action</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/ber/BER.java gcc-4.1.0/libjava/classpath/gnu/java/security/ber/BER.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/ber/BER.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/ber/BER.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ /* BER.java -- basic encoding rules (BER) constants.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.ber;
+ 
+ import gnu.java.security.der.DER;
+ 
+ public interface BER extends DER
+ {
+   BERValue END_OF_SEQUENCE = new BERValue(0, null);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/ber/BEREncodingException.java gcc-4.1.0/libjava/classpath/gnu/java/security/ber/BEREncodingException.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/ber/BEREncodingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/ber/BEREncodingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* BEREncodingException.java --- BER Encoding Exception
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.ber;
+ 
+ import gnu.java.security.der.DEREncodingException;
+ 
+ public class BEREncodingException extends DEREncodingException
+ {
+   public BEREncodingException()
+   {
+     super ();
+   }
+ 
+   public BEREncodingException (String msg)
+   {
+     super (msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/ber/BERReader.java gcc-4.1.0/libjava/classpath/gnu/java/security/ber/BERReader.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/ber/BERReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/ber/BERReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,103 ----
+ /* BERReader.java -- basic encoding rules (BER) reader.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.ber;
+ 
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.EOFException;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ public class BERReader extends DERReader implements BER
+ {
+ 
+   /**
+    * Create a new DER reader from a byte array.
+    *
+    * @param in The encoded bytes.
+    */
+   public BERReader(byte[] in)
+   {
+     super(in);
+   }
+ 
+   public BERReader (byte[] in, int off, int len)
+   {
+     super(in, off, len);
+   }
+ 
+   /**
+    * Create a new DER readed from an input stream.
+    *
+    * @param in The encoded bytes.
+    */
+   public BERReader(InputStream in)
+   {
+     super(in);
+   }
+ 
+   public DERValue read() throws IOException
+   {
+     in.mark(2);
+     int tag = in.read();
+     if (tag == -1)
+       throw new EOFException();
+     int length = in.read();
+     if (length == 0)
+       {
+         if (tag == 0)
+           return END_OF_SEQUENCE;
+         return new BERValue(tag, CONSTRUCTED_VALUE, new byte[] { (byte) tag, 0 });
+       }
+     else
+       {
+         in.reset();
+         return super.read();
+       }
+   }
+ 
+   public int peek() throws IOException
+   {
+     in.mark(1);
+     int ret = in.read();
+     in.reset();
+     return ret;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/ber/BERValue.java gcc-4.1.0/libjava/classpath/gnu/java/security/ber/BERValue.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/ber/BERValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/ber/BERValue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,82 ----
+ /* BERReader.java -- basic encoding rules (BER) value.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.ber;
+ 
+ import gnu.java.security.der.DERValue;
+ 
+ public class BERValue extends DERValue
+ {
+ 
+   private boolean indefinite;
+ 
+   public BERValue(int tag, Object value, byte[] encoded)
+   {
+     super(tag, 0, value, encoded);
+     indefinite = true;
+   }
+ 
+   public BERValue(int tag, int length, Object value, byte[] encoded)
+   {
+     super(tag, length, value, encoded);
+   }
+ 
+   public BERValue(int tag, Object value)
+   {
+     super(tag, 0, value, null);
+   }
+ 
+   public static boolean isIndefinite(DERValue value)
+   {
+     if (value instanceof BERValue)
+       return ((BERValue) value).getIndefinite();
+     return false;
+   }
+ 
+   public boolean getIndefinite()
+   {
+     return indefinite;
+   }
+ 
+   public int getLength()
+   {
+     if (indefinite)
+       return 0;
+     return super.getLength();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/ber/package.html gcc-4.1.0/libjava/classpath/gnu/java/security/ber/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/security/ber/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/ber/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.security.ber package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.security.ber</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/der/BitString.java gcc-4.1.0/libjava/classpath/gnu/java/security/der/BitString.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/der/BitString.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/der/BitString.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,330 ----
+ /* BitString.java -- Java representation of the BIT STRING type.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.der;
+ 
+ import java.math.BigInteger;
+ import java.util.Arrays;
+ 
+ /**
+  * Immutable representation of a bit string, which is equivalent to a
+  * byte array except some number of the rightmost bits are ignored. For
+  * example, this could be the bit string:
+  *
+  * <pre>   00010101 11101101 11010xxx</pre>
+  *
+  * <p>Where the "xxx" represents three bits that should be ignored, and
+  * can have any value.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class BitString implements Cloneable, Comparable
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The bits themselves. */
+   private final byte[] bytes;
+ 
+   /**
+    * The exportable byte array. This array has the ignored bits
+    * removed.
+    */
+   private transient byte[] externBytes;
+ 
+   /** The number of bits ignored at the end of the byte array. */
+   private final int ignoredBits;
+ 
+   /** This bit string as a boolean array. */
+   private transient boolean[] boolVal;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new bit string, shifting the given byte array if needed.
+    *
+    * @param bytes The byte array holding the bit string.
+    * @param ignoredBits The number of bits to ignore.
+    * @param doShift Pass true in this parameter if the byte array has
+    * not yet been shifted left by <i>ignoredBits</i>.
+    * @throws IllegalArgumentException If <i>ignoredBits</i> is negative
+    * or greater than 7.
+    * @throws NullPointerException If <i>bytes</i> is null.
+    */
+   public BitString(byte[] bytes, int ignoredBits, boolean doShift)
+   {
+     this(bytes, 0, bytes.length, ignoredBits, doShift);
+   }
+ 
+   /**
+    * Create a new bit string, shifting the given byte array if needed.
+    *
+    * @param bytes The byte array holding the bit string.
+    * @param offset The offset where the meaningful bytes begin.
+    * @param length The number of meaningful bytes.
+    * @param ignoredBits The number of bits to ignore.
+    * @param doShift Pass true in this parameter if the byte array has
+    * not yet been shifted left by <i>ignoredBits</i>.
+    * @throws IllegalArgumentException If <i>ignoredBits</i> is negative
+    * or greater than 7.
+    * @throws NullPointerException If <i>bytes</i> is null.
+    */
+   public BitString(byte[] bytes, int offset, int length,
+                    int ignoredBits, boolean doShift)
+   {
+     if (ignoredBits < 0 || ignoredBits > 7)
+       throw new IllegalArgumentException();
+     if (bytes == null)
+       throw new NullPointerException();
+     if (doShift && ignoredBits > 0)
+       {
+         this.externBytes = new byte[length];
+         System.arraycopy(bytes, offset, externBytes, 0, length);
+         this.bytes = new BigInteger(externBytes).shiftLeft(ignoredBits)
+                        .toByteArray();
+       }
+     else
+       {
+         this.bytes = new byte[length];
+         System.arraycopy(bytes, offset, this.bytes, 0, length);
+       }
+     this.ignoredBits = ignoredBits;
+   }
+ 
+   /**
+    * Create a new bit string.
+    *
+    * @param bytes The byte array holding the bit string.
+    * @param offset The offset where the meaningful bytes begin.
+    * @param length The number of meaningful bytes.
+    * @param ignoredBits The number of bits to ignore.
+    * @throws IllegalArgumentException If <i>ignoredBits</i> is negative
+    * or greater than 7.
+    * @throws NullPointerException If <i>bytes</i> is null.
+    */
+   public BitString(byte[] bytes, int offset, int length, int ignoredBits)
+   {
+     this(bytes, offset, length, ignoredBits, false);
+   }
+ 
+   /**
+    * Create a new bit string.
+    *
+    * @param bytes The byte array holding the bit string.
+    * @param ignoredBits The number of bits to ignore.
+    * @throws IllegalArgumentException If <i>ignoredBits</i> is negative
+    * or greater than 7.
+    * @throws NullPointerException If <i>bytes</i> is null.
+    */
+   public BitString(byte[] bytes, int ignoredBits)
+   {
+     this(bytes, 0, bytes.length, ignoredBits, false);
+   }
+ 
+   /**
+    * Create a new bit string.
+    *
+    * @param bytes The byte array holding the bit string.
+    * @param offset The offset where the meaningful bytes begin.
+    * @param length The number of meaningful bytes.
+    * @throws NullPointerException If <i>bytes</i> is null.
+    */
+   public BitString(byte[] bytes, int offset, int length)
+   {
+     this(bytes, offset, length, 0, false);
+   }
+ 
+   /**
+    * Create a new bit string.
+    *
+    * @param bytes The byte array holding the bit string.
+    * @throws NullPointerException If <i>bytes</i> is null.
+    */
+   public BitString(byte[] bytes)
+   {
+     this(bytes, 0, bytes.length, 0, false);
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return this bit string as a byte array, with the ignored bits
+    * trimmed off. The byte array is cloned every time this method is
+    * called to prevent modification.
+    *
+    * @return The trimmed byte array.
+    */
+   public byte[] toByteArray()
+   {
+     if (ignoredBits == 0)
+       return (byte[]) bytes.clone();
+     if (externBytes == null)
+       externBytes = new BigInteger(bytes).shiftRight(ignoredBits).toByteArray();
+     return (byte[]) externBytes.clone();
+   }
+ 
+   /**
+    * Returns this bit string as a byte array, with the ignored bits
+    * present. The byte array is cloned every time this method is
+    * called to prevent modification.
+    *
+    * @return The byte array.
+    */
+   public byte[] getShiftedByteArray()
+   {
+     return (byte[]) bytes.clone();
+   }
+ 
+   /**
+    * Returns the number of ignored bits.
+    *
+    * @return The number of ignored bits.
+    */
+   public int getIgnoredBits()
+   {
+     return ignoredBits;
+   }
+ 
+   /**
+    * Returns the size, in bits, of this bit string.
+    *
+    * @return The size of this bit string.
+    */
+   public int size()
+   {
+     return (bytes.length << 3) - ignoredBits;
+   }
+ 
+   /**
+    * Return this bit string as a boolean array. The value returned is of
+    * size {@link #size()}, and each <code>true</code> value
+    * corresponding to each "1" in this bit string. The boolean array is
+    * cloned before it is returned.
+    *
+    * @return The boolean array.
+    */
+   public boolean[] toBooleanArray()
+   {
+     if (boolVal == null)
+       {
+         boolVal = new boolean[size()];
+         for (int i = 0, j = 7, k = 0; i < boolVal.length; i++)
+           {
+             boolVal[i] = (bytes[k] & 1 << j--) != 0;
+             if (j < 0)
+               {
+                 j = 7;
+                 k++;
+               }
+           }
+       }
+     return (boolean[]) boolVal.clone();
+   }
+ 
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException cce)
+       {
+         throw new InternalError(cce.getMessage());
+       }
+   }
+ 
+   public int compareTo(Object o)
+   {
+     BitString that = (BitString) o;
+     if (this.equals(that))
+       return 0;
+     if (this.bytes.length != that.bytes.length)
+       return (this.bytes.length < that.bytes.length) ? -1 : 1;
+     if (this.ignoredBits != that.ignoredBits)
+       return (this.ignoredBits < that.ignoredBits) ? -1 : 1;
+     for (int i = 0; i < this.bytes.length; i++)
+       if (this.bytes[i] != that.bytes[i])
+         return (this.bytes[i] < that.bytes[i]) ? -1 : 1;
+     return 0; // not reached.
+   }
+ 
+   public int hashCode()
+   {
+     int result = 0;
+     for (int i = 0; i < bytes.length - 1; ++i)
+       result = result * 31 + bytes[i];
+     if (bytes.length > 0)
+       {
+         int lastByte = bytes[bytes.length - 1] & ~ ((1 << ignoredBits) - 1);
+         result = result * 31 + lastByte;
+       }
+     return result;
+   }
+ 
+   public boolean equals(Object o)
+   {
+     if (!(o instanceof BitString))
+       return false;
+     BitString that = (BitString) o;
+     // True for cloned instances.
+     if (this.bytes == that.bytes && this.ignoredBits == that.ignoredBits)
+       return true;
+     if (this.ignoredBits == that.ignoredBits)
+       return Arrays.equals(this.bytes, that.bytes);
+     return false;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer sb = new StringBuffer();
+     for (int i = 0, j = 7, k = 0; i < size(); i++)
+       {
+         sb.append((bytes[k] & 1 << j) != 0 ? "1" : "0");
+         j--;
+         if (j < 0)
+           {
+             j = 7;
+             k++;
+           }
+       }
+     return sb.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/der/DER.java gcc-4.1.0/libjava/classpath/gnu/java/security/der/DER.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/der/DER.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/der/DER.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,86 ----
+ /* DER.java -- Basic constants in DER sequences.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.der;
+ 
+ /**
+  * The set of tags for DER types.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public interface DER
+ {
+   int UNIVERSAL   = 0x00;
+   int APPLICATION = 0x40;
+   int CONTEXT     = 0x80;
+   int PRIVATE     = 0xC0;
+ 
+   int CONSTRUCTED = 0x20;
+ 
+   int ANY               = 0x00;
+   int BOOLEAN           = 0x01;
+   int INTEGER           = 0x02;
+   int BIT_STRING        = 0x03;
+   int OCTET_STRING      = 0x04;
+   int NULL              = 0x05;
+   int OBJECT_IDENTIFIER = 0x06;
+   int REAL              = 0x09;
+   int ENUMERATED        = 0x0a;
+   int RELATIVE_OID      = 0x0d;
+ 
+   int SEQUENCE = 0x10;
+   int SET      = 0x11;
+ 
+   Object CONSTRUCTED_VALUE = new Object();
+ 
+   int NUMERIC_STRING   = 0x12;
+   int PRINTABLE_STRING = 0x13;
+   int T61_STRING       = 0x14;
+   int VIDEOTEX_STRING  = 0x15;
+   int IA5_STRING       = 0x16;
+   int GRAPHIC_STRING   = 0x19;
+   int ISO646_STRING    = 0x1A;
+   int GENERAL_STRING   = 0x1B;
+ 
+   int UTF8_STRING      = 0x0C;
+   int UNIVERSAL_STRING = 0x1C;
+   int BMP_STRING       = 0x1E;
+ 
+   int UTC_TIME         = 0x17;
+   int GENERALIZED_TIME = 0x18;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/der/DEREncodingException.java gcc-4.1.0/libjava/classpath/gnu/java/security/der/DEREncodingException.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/der/DEREncodingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/der/DEREncodingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* DEREncodingException.java --- DER Encoding Exception
+    Copyright (C) 1999,2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.der;
+ 
+ import java.io.IOException;
+ 
+ public class DEREncodingException extends IOException
+ {
+   public DEREncodingException()
+   {
+     super ();
+   }
+ 
+   public DEREncodingException (String msg)
+   {
+     super (msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/der/DERReader.java gcc-4.1.0/libjava/classpath/gnu/java/security/der/DERReader.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/der/DERReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/der/DERReader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,437 ----
+ /* DERReader.java -- parses ASN.1 DER sequences
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.der;
+ 
+ import gnu.java.security.OID;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.EOFException;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.math.BigInteger;
+ import java.util.Calendar;
+ import java.util.Date;
+ import java.util.TimeZone;
+ 
+ /**
+  * This class decodes DER sequences into Java objects. The methods of
+  * this class do not have knowledge of higher-levels of structure in the
+  * DER stream -- such as ASN.1 constructions -- and it is therefore up
+  * to the calling application to determine if the data are structured
+  * properly by inspecting the {@link DERValue} that is returned.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class DERReader implements DER
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   protected InputStream in;
+ 
+   protected final ByteArrayOutputStream encBuf;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new DER reader from a byte array.
+    *
+    * @param in The encoded bytes.
+    */
+   public DERReader(byte[] in)
+   {
+     this(new ByteArrayInputStream(in));
+   }
+ 
+   public DERReader (byte[] in, int off, int len)
+   {
+     this (new ByteArrayInputStream (in, off, len));
+   }
+ 
+   /**
+    * Create a new DER readed from an input stream.
+    *
+    * @param in The encoded bytes.
+    */
+   public DERReader(InputStream in)
+   {
+     if (!in.markSupported())
+       this.in = new BufferedInputStream(in, 16384);
+     else
+       this.in = in;
+     encBuf = new ByteArrayOutputStream(2048);
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Convenience method for reading a single primitive value from the
+    * given byte array.
+    *
+    * @param encoded The encoded bytes.
+    * @throws IOException If the bytes do not represent an encoded
+    * object.
+    */
+   public static DERValue read(byte[] encoded) throws IOException
+   {
+     return new DERReader(encoded).read();
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   public void skip (int bytes) throws IOException
+   {
+     in.skip (bytes);
+   }
+ 
+   /**
+    * Decode a single value from the input stream, returning it in a new
+    * {@link DERValue}. By "single value" we mean any single type in its
+    * entirety -- including constructed types such as SEQUENCE and all
+    * the values they contain. Usually it is sufficient to call this
+    * method once to parse and return the top-level structure, then to
+    * inspect the returned value for the proper contents.
+    *
+    * @return The parsed DER structure.
+    * @throws IOException If an error occurs reading from the input
+    * stream.
+    * @throws DEREncodingException If the input does not represent a
+    * valid DER stream.
+    */
+   public DERValue read() throws IOException
+   {
+     int tag = in.read();
+     if (tag == -1)
+       throw new EOFException();
+     encBuf.write(tag);
+     int len = readLength();
+     DERValue value = null;
+     if ((tag & CONSTRUCTED) == CONSTRUCTED)
+       {
+         in.mark(2048);
+         byte[] encoded = new byte[len];
+         in.read(encoded);
+         encBuf.write(encoded);
+         value = new DERValue(tag, len, CONSTRUCTED_VALUE, encBuf.toByteArray());
+         in.reset();
+         encBuf.reset();
+         return value;
+       }
+     switch (tag & 0xC0)
+       {
+         case UNIVERSAL:
+           value = new DERValue(tag, len, readUniversal(tag, len),
+             encBuf.toByteArray());
+           encBuf.reset();
+           break;
+         case CONTEXT:
+           byte[] encoded = new byte[len];
+           in.read(encoded);
+           encBuf.write(encoded);
+           value = new DERValue(tag, len, encoded, encBuf.toByteArray());
+           encBuf.reset();
+           break;
+         case APPLICATION:
+           // This should not be reached, since (I think) APPLICATION is
+           // always constructed.
+           throw new DEREncodingException("non-constructed APPLICATION data");
+         default:
+           throw new DEREncodingException("PRIVATE class not supported");
+       }
+     return value;
+   }
+ 
+   protected int readLength() throws IOException
+   {
+     int i = in.read();
+     if (i == -1)
+       throw new EOFException();
+     encBuf.write(i);
+     if ((i & ~0x7F) == 0)
+       {
+         return i;
+       }
+     else if (i < 0xFF)
+       {
+         byte[] octets = new byte[i & 0x7F];
+         in.read(octets);
+         encBuf.write(octets);
+         return new BigInteger(1, octets).intValue();
+       }
+     throw new DEREncodingException();
+   }
+ 
+   // Own methods.
+   // ------------------------------------------------------------------------
+ 
+   private Object readUniversal(int tag, int len) throws IOException
+   {
+     byte[] value = new byte[len];
+     in.read(value);
+     encBuf.write(value);
+     switch (tag & 0x1F)
+       {
+         case BOOLEAN:
+           if (value.length != 1)
+             throw new DEREncodingException();
+           return Boolean.valueOf(value[0] != 0);
+         case NULL:
+           if (len != 0)
+             throw new DEREncodingException();
+           return null;
+         case INTEGER:
+         case ENUMERATED:
+           return new BigInteger(value);
+         case BIT_STRING:
+           byte[] bits = new byte[len - 1];
+           System.arraycopy(value, 1, bits, 0, bits.length);
+           return new BitString(bits, value[0] & 0xFF);
+         case OCTET_STRING:
+           return value;
+         case NUMERIC_STRING:
+         case PRINTABLE_STRING:
+         case T61_STRING:
+         case VIDEOTEX_STRING:
+         case IA5_STRING:
+         case GRAPHIC_STRING:
+         case ISO646_STRING:
+         case GENERAL_STRING:
+         case UNIVERSAL_STRING:
+         case BMP_STRING:
+         case UTF8_STRING:
+           return makeString(tag, value);
+         case UTC_TIME:
+         case GENERALIZED_TIME:
+           return makeTime(tag, value);
+         case OBJECT_IDENTIFIER:
+           return new OID(value);
+         case RELATIVE_OID:
+           return new OID(value, true);
+         default:
+           throw new DEREncodingException("unknown tag " + tag);
+       }
+   }
+ 
+   private static String makeString(int tag, byte[] value)
+     throws IOException
+   {
+     switch (tag & 0x1F)
+       {
+         case NUMERIC_STRING:
+         case PRINTABLE_STRING:
+         case T61_STRING:
+         case VIDEOTEX_STRING:
+         case IA5_STRING:
+         case GRAPHIC_STRING:
+         case ISO646_STRING:
+         case GENERAL_STRING:
+           return fromIso88591(value);
+ 
+         case UNIVERSAL_STRING:
+           // XXX The docs say UniversalString is encoded in four bytes
+           // per character, but Java has no support (yet) for UTF-32.
+           //return new String(buf, "UTF-32");
+         case BMP_STRING:
+           return fromUtf16Be(value);
+ 
+         case UTF8_STRING:
+           return fromUtf8(value);
+ 
+         default:
+           throw new DEREncodingException("unknown string tag");
+       }
+   }
+ 
+   private static String fromIso88591(byte[] bytes)
+   {
+     StringBuffer str = new StringBuffer(bytes.length);
+     for (int i = 0; i < bytes.length; i++)
+       str.append((char) (bytes[i] & 0xFF));
+     return str.toString();
+   }
+ 
+   private static String fromUtf16Be(byte[] bytes) throws IOException
+   {
+     if ((bytes.length & 0x01) != 0)
+       throw new IOException("UTF-16 bytes are odd in length");
+     StringBuffer str = new StringBuffer(bytes.length / 2);
+     for (int i = 0; i < bytes.length; i += 2)
+       {
+         char c = (char) ((bytes[i] << 8) & 0xFF);
+         c |= (char) (bytes[i+1] & 0xFF);
+         str.append(c);
+       }
+     return str.toString();
+   }
+ 
+   private static String fromUtf8(byte[] bytes) throws IOException
+   {
+     StringBuffer str = new StringBuffer((int)(bytes.length / 1.5));
+     for (int i = 0; i < bytes.length; )
+       {
+         char c = 0;
+         if ((bytes[i] & 0xE0) == 0xE0)
+           {
+             if ((i + 2) >= bytes.length)
+               throw new IOException("short UTF-8 input");
+             c = (char) ((bytes[i++] & 0x0F) << 12);
+             if ((bytes[i] & 0x80) != 0x80)
+               throw new IOException("malformed UTF-8 input");
+             c |= (char) ((bytes[i++] & 0x3F) << 6);
+             if ((bytes[i] & 0x80) != 0x80)
+               throw new IOException("malformed UTF-8 input");
+             c |= (char) (bytes[i++] & 0x3F);
+           }
+         else if ((bytes[i] & 0xC0) == 0xC0)
+           {
+             if ((i + 1) >= bytes.length)
+               throw new IOException("short input");
+             c = (char) ((bytes[i++] & 0x1F) << 6);
+             if ((bytes[i] & 0x80) != 0x80)
+               throw new IOException("malformed UTF-8 input");
+             c |= (char) (bytes[i++] & 0x3F);
+           }
+         else if ((bytes[i] & 0xFF) < 0x80)
+           {
+             c = (char) (bytes[i++] & 0xFF);
+           }
+         else
+           throw new IOException("badly formed UTF-8 sequence");
+         str.append(c);
+       }
+     return str.toString();
+   }
+ 
+   private Date makeTime(int tag, byte[] value) throws IOException
+   {
+     Calendar calendar = Calendar.getInstance();
+     String str = makeString(PRINTABLE_STRING, value);
+ 
+     // Classpath's SimpleDateFormat does not work for parsing these
+     // types of times, so we do this by hand.
+     String date = str;
+     String tz = "";
+     if (str.indexOf("+") > 0)
+       {
+         date = str.substring(0, str.indexOf("+"));
+         tz = str.substring(str.indexOf("+"));
+       }
+     else if (str.indexOf("-") > 0)
+       {
+         date = str.substring(0, str.indexOf("-"));
+         tz = str.substring(str.indexOf("-"));
+       }
+     else if (str.endsWith("Z"))
+       {
+         date = str.substring(0, str.length()-2);
+         tz = "Z";
+       }
+     if (!tz.equals("Z") && tz.length() > 0)
+       calendar.setTimeZone(TimeZone.getTimeZone(tz));
+     else
+       calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
+     if ((tag & 0x1F) == UTC_TIME)
+       {
+         if (date.length() < 10)  // must be at least 10 chars long
+           throw new DEREncodingException("cannot parse date");
+         // UTCTime is of the form "yyMMddHHmm[ss](Z|(+|-)hhmm)"
+         try
+           {
+             int year = Integer.parseInt(str.substring(0, 2));
+             if (year < 50)
+               year += 2000;
+             else
+               year += 1900;
+             calendar.set(year,
+               Integer.parseInt(str.substring( 2,  4))-1,  // month
+               Integer.parseInt(str.substring( 4,  6)),    // day
+               Integer.parseInt(str.substring( 6,  8)),    // hour
+               Integer.parseInt(str.substring( 8, 10)));   // minute
+             if (date.length() == 12)
+               calendar.set(Calendar.SECOND,
+                 Integer.parseInt(str.substring(10, 12)));
+           }
+         catch (NumberFormatException nfe)
+           {
+             throw new DEREncodingException("cannot parse date");
+           }
+       }
+     else
+       {
+         if (date.length() < 10)  // must be at least 10 chars long
+           throw new DEREncodingException("cannot parse date");
+         // GeneralTime is of the form "yyyyMMddHH[mm[ss[(.|,)SSSS]]]"
+         // followed by "Z" or "(+|-)hh[mm]"
+         try
+           {
+             calendar.set(
+               Integer.parseInt(date.substring(0, 4)),      // year
+               Integer.parseInt(date.substring(4, 6))-1,    // month
+               Integer.parseInt(date.substring(6, 8)),      // day
+               Integer.parseInt(date.substring(8, 10)), 0); // hour, min
+             switch (date.length())
+               {
+                 case 19:
+                 case 18:
+                 case 17:
+                 case 16:
+                   calendar.set(Calendar.MILLISECOND,
+                     Integer.parseInt(date.substring(15)));
+                 case 14:
+                   calendar.set(Calendar.SECOND,
+                     Integer.parseInt(date.substring(12, 14)));
+                 case 12:
+                   calendar.set(Calendar.MINUTE,
+                     Integer.parseInt(date.substring(10, 12)));
+               }
+           }
+         catch (NumberFormatException nfe)
+           {
+             throw new DEREncodingException("cannot parse date");
+           }
+       }
+     return calendar.getTime();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/der/DERValue.java gcc-4.1.0/libjava/classpath/gnu/java/security/der/DERValue.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/der/DERValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/der/DERValue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,170 ----
+ /* DERValue.java -- a value read or written to a DER encoding.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.der;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ 
+ public class DERValue implements DER
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   private final int tagClass;
+   private final boolean constructed;
+   private final int tag;
+   private int length;
+   private final Object value;
+   private byte[] encoded;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   public DERValue(int tag, int length, Object value, byte[] encoded)
+   {
+     tagClass = tag & 0xC0;
+     this.tag = tag & 0x1F;
+     constructed = (tag & CONSTRUCTED) == CONSTRUCTED;
+     this.length = length;
+     this.value = value;
+     if (encoded != null)
+       this.encoded = (byte[]) encoded.clone();
+   }
+ 
+   public DERValue(int tag, Object value)
+   {
+     this(tag, 0, value, null);
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   public int getExternalTag()
+   {
+     return tagClass | tag | (constructed ? 0x20 : 0x00);
+   }
+ 
+   public int getTag()
+   {
+     return tag;
+   }
+ 
+   public int getTagClass()
+   {
+     return tagClass;
+   }
+ 
+   public boolean isConstructed()
+   {
+     return constructed;
+   }
+ 
+   public int getLength()
+   {
+     if (encoded == null)
+       {
+         try
+           {
+             ByteArrayOutputStream out = new ByteArrayOutputStream();
+             length = DERWriter.write(out, this);
+             encoded = out.toByteArray();
+           }
+         catch (IOException ioe)
+           {
+             encoded = new byte[0];
+           }
+       }
+     return length;
+   }
+ 
+   public Object getValue()
+   {
+     return value;
+   }
+ 
+   public Object getValueAs (final int derType) throws IOException
+   {
+     byte[] encoded = getEncoded ();
+     encoded[0] = (byte) derType;
+     return DERReader.read (encoded).getValue ();
+   }
+ 
+   public byte[] getEncoded()
+   {
+     if (encoded == null)
+       {
+         try
+           {
+             ByteArrayOutputStream out = new ByteArrayOutputStream();
+             length = DERWriter.write(out, this);
+             encoded = out.toByteArray();
+           }
+         catch (IOException ioe)
+           {
+             encoded = new byte[0];
+           }
+       }
+     return (byte[]) encoded.clone();
+   }
+ 
+   public int getEncodedLength()
+   {
+     if (encoded == null)
+       {
+         try
+           {
+             ByteArrayOutputStream out = new ByteArrayOutputStream();
+             length = DERWriter.write(out, this);
+             encoded = out.toByteArray();
+           }
+         catch (IOException ioe)
+           {
+             encoded = new byte[0];
+           }
+       }
+     return encoded.length;
+   }
+ 
+   public String toString()
+   {
+     return "DERValue [ tag=" + tag + ", class=" + tagClass + ", constructed="
+       + constructed + ", value=" + value + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/der/DERWriter.java gcc-4.1.0/libjava/classpath/gnu/java/security/der/DERWriter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/der/DERWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/der/DERWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,349 ----
+ /* DERWriter.java -- write Java types in DER format.
+    Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.der;
+ 
+ import gnu.java.security.OID;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ import java.math.BigInteger;
+ 
+ import java.text.SimpleDateFormat;
+ 
+ import java.util.Date;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Set;
+ import java.util.TimeZone;
+ 
+ /**
+  * Methods that allow various Java types to be written as a DER
+  * (Distinguished Encoding Rules) stream to the specified output stream.
+  * DER is used to encode ASN.1 constructions, but this class provides no
+  * methods for interacting with ASN.1. Rather, callers should construct
+  * their output objects properly for whatever ASN.1 construct is being
+  * output.
+  *
+  * <p>This class only defines static methods; there are no instance
+  * variables needed.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class DERWriter implements DER
+ {
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /** This class only has static methods. */
+   private DERWriter()
+   {
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   public static int write(OutputStream out, DERValue object)
+     throws IOException
+   {
+     out.write(object.getExternalTag());
+     Object value = object.getValue();
+     if (value == null)
+       {
+         writeLength(out, 0);
+         return 0;
+       }
+     if (value instanceof Boolean)
+       return writeBoolean(out, (Boolean) value);
+     else if (value instanceof BigInteger)
+       return writeInteger(out, (BigInteger) value);
+     else if (value instanceof Date)
+       return writeDate(out, object.getExternalTag(), (Date) value);
+     else if (value instanceof String)
+       return writeString(out, object.getExternalTag(), (String) value);
+     else if (value instanceof List)
+       return writeSequence(out, (List) value);
+     else if (value instanceof Set)
+       return writeSet(out, (Set) value);
+     else if (value instanceof BitString)
+       return writeBitString(out, (BitString) value);
+     else if (value instanceof OID)
+       return writeOID(out, (OID) value);
+     else if (value instanceof byte[])
+       {
+         writeLength(out, ((byte[]) value).length);
+         out.write((byte[]) value);
+         return ((byte[]) value).length;
+       }
+     else if (value instanceof DERValue)
+       {
+         ByteArrayOutputStream bout = new ByteArrayOutputStream();
+         write(bout, (DERValue) value);
+         byte[] buf = bout.toByteArray();
+         writeLength(out, buf.length);
+         out.write(buf);
+         return buf.length;
+       }
+     else
+       throw new DEREncodingException("cannot encode " + value.getClass().getName());
+   }
+ 
+   public static int definiteEncodingSize(int length)
+   {
+     if (length < 128)
+       return 1;
+     else if (length < 256)
+       return 2;
+     else if (length < 65536)
+       return 3;
+     else if (length < 16777216)
+       return 4;
+     else
+       return 5;
+   }
+ 
+   // Own methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Write a BOOLEAN type to the given output stream.
+    *
+    * @param out The sink output stream.
+    * @param b   The boolean value to write.
+    */
+   private static int writeBoolean(OutputStream out, Boolean b)
+     throws IOException
+   {
+     writeLength(out, 1);
+     if (b.booleanValue())
+       out.write(0xFF);
+     else
+       out.write(0);
+     return 1;
+   }
+ 
+   /**
+    * Write an INTEGER type to the given output stream.
+    *
+    * @param out The sink output stream.
+    * @param integer The integer to write.
+    */
+   private static int writeInteger(OutputStream out, BigInteger integer)
+     throws IOException
+   {
+     byte[] bytes = integer.toByteArray();
+     writeLength(out, bytes.length);
+     out.write(bytes);
+     return bytes.length;
+   }
+ 
+   private static int writeSequence(OutputStream out, List sequence)
+     throws IOException
+   {
+     ByteArrayOutputStream bout = new ByteArrayOutputStream();
+     for (Iterator i = sequence.iterator(); i.hasNext(); )
+       {
+         write(bout, (DERValue) i.next());
+       }
+     byte[] buf = bout.toByteArray();
+     writeLength(out, buf.length);
+     out.write(buf);
+     return buf.length;
+   }
+ 
+   private static int writeSet(OutputStream out, Set set)
+     throws IOException
+   {
+     ByteArrayOutputStream bout = new ByteArrayOutputStream();
+     for (Iterator i = set.iterator(); i.hasNext(); )
+       {
+         write(bout, (DERValue) i.next());
+       }
+     byte[] buf = bout.toByteArray();
+     writeLength(out, buf.length);
+     out.write(buf);
+     return buf.length;
+   }
+ 
+   private static int writeOID(OutputStream out, OID oid)
+     throws IOException
+   {
+     byte[] der = oid.getDER();
+     writeLength(out, der.length);
+     out.write(der);
+     return der.length;
+   }
+ 
+   private static int writeBitString(OutputStream out, BitString bs)
+     throws IOException
+   {
+     byte[] buf = bs.getShiftedByteArray();
+     out.write(buf.length + 1);
+     out.write(bs.getIgnoredBits());
+     out.write(buf);
+     return buf.length;
+   }
+ 
+   private static int writeString(OutputStream out, int tag, String str)
+     throws IOException
+   {
+     byte[] b = null;
+     switch (tag & 0x1F)
+       {
+         case NUMERIC_STRING:
+         case PRINTABLE_STRING:
+         case T61_STRING:
+         case VIDEOTEX_STRING:
+         case IA5_STRING:
+         case GRAPHIC_STRING:
+         case ISO646_STRING:
+         case GENERAL_STRING:
+           b = toIso88591(str);
+           break;
+ 
+         case UNIVERSAL_STRING:
+         case BMP_STRING:
+           b = toUtf16Be(str);
+           break;
+ 
+         case UTF8_STRING:
+         default:
+           b = toUtf8(str);
+           break;
+       }
+     writeLength(out, b.length);
+     out.write(b);
+     return b.length;
+   }
+ 
+   private static byte[] toIso88591(String string)
+   {
+     byte[] result = new byte[string.length()];
+     for (int i = 0; i < string.length(); i++)
+       result[i] = (byte) string.charAt(i);
+     return result;
+   }
+ 
+   private static byte[] toUtf16Be(String string)
+   {
+     byte[] result = new byte[string.length() * 2];
+     for (int i = 0; i < string.length(); i++)
+       {
+         result[i*2  ] = (byte) ((string.charAt(i) >>> 8) & 0xFF);
+         result[i*2+1] = (byte)  (string.charAt(i) & 0xFF);
+       }
+     return result;
+   }
+ 
+   private static byte[] toUtf8(String string)
+   {
+     ByteArrayOutputStream buf =
+       new ByteArrayOutputStream((int)(string.length() * 1.5));
+     for (int i = 0; i < string.length(); i++)
+       {
+         char c = string.charAt(i);
+         if (c < 0x0080)
+           buf.write(c & 0xFF);
+         else if (c < 0x0800)
+           {
+             buf.write(0xC0 | ((c >>> 6) & 0x3F));
+             buf.write(0x80 |  (c & 0x3F));
+           }
+         else
+           {
+             buf.write(0xE0 | ((c >>> 12) & 0x0F));
+             buf.write(0x80 | ((c >>>  6) & 0x3F));
+             buf.write(0x80 |  (c & 0x3F));
+           }
+       }
+     return buf.toByteArray();
+   }
+ 
+   private static int writeDate(OutputStream out, int tag, Date date)
+     throws IOException
+   {
+     SimpleDateFormat sdf = null;
+     if ((tag & 0x1F) == UTC_TIME)
+       sdf = new SimpleDateFormat("yyMMddHHmmss'Z'");
+     else
+       sdf = new SimpleDateFormat("yyyyMMddHHmmss'.'SSS'Z'");
+     sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
+     byte[] b = sdf.format(date).getBytes("ISO-8859-1");
+     writeLength(out, b.length);
+     out.write(b);
+     return b.length;
+   }
+ 
+   // Package method.
+   // ------------------------------------------------------------------------
+ 
+   static void writeLength(OutputStream out, int len) throws IOException
+   {
+     if (len < 128)
+       out.write(len);
+     else if (len < 256)
+       {
+         out.write(0x81);
+         out.write(len);
+       }
+     else if (len < 65536)
+       {
+         out.write(0x82);
+         out.write(len >> 8);
+         out.write(len);
+       }
+     else if (len < 16777216)
+       {
+         out.write(0x83);
+         out.write(len >> 16);
+         out.write(len >>  8);
+         out.write(len);
+       }
+     else
+       {
+         out.write(0x84);
+         out.write(len >> 24);
+         out.write(len >> 16);
+         out.write(len >>  8);
+         out.write(len);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/der/package.html gcc-4.1.0/libjava/classpath/gnu/java/security/der/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/security/der/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/der/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.security.der package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.security.der</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/package.html gcc-4.1.0/libjava/classpath/gnu/java/security/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/security/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.security package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.security</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java gcc-4.1.0/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,364 ----
+ /* PKCS7SignedData.java -- reader for PKCS#7 signedData objects
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.security.pkcs;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.ber.BER;
+ import gnu.java.security.ber.BEREncodingException;
+ import gnu.java.security.ber.BERReader;
+ import gnu.java.security.ber.BERValue;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ import java.math.BigInteger;
+ 
+ import java.security.cert.CRL;
+ import java.security.cert.CRLException;
+ import java.security.cert.Certificate;
+ import java.security.cert.CertificateException;
+ import java.security.cert.CertificateFactory;
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Set;
+ 
+ /**
+  * The SignedData object in PKCS #7. This is a read-only implementation of
+  * this format, and is used to provide signed Jar file support.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class PKCS7SignedData
+ {
+ 
+   public static final OID PKCS7_DATA = new OID("1.2.840.113549.1.7.1");
+   public static final OID PKCS7_SIGNED_DATA = new OID("1.2.840.113549.1.7.2");
+ 
+   private BigInteger version;
+   private Set digestAlgorithms;
+   private OID contentType;
+   private byte[] content;
+   private Certificate[] certificates;
+   private CRL[] crls;
+   private Set signerInfos;
+ 
+   private static final boolean DEBUG = false;
+   private static void debug(String msg)
+   {
+     System.err.print("PKCS7SignedData >> ");
+     System.err.println(msg);
+   }
+ 
+   public PKCS7SignedData(InputStream in)
+     throws CRLException, CertificateException, IOException
+   {
+     this(new BERReader(in));
+   }
+ 
+   /**
+    * Parse an encoded PKCS#7 SignedData object. The ASN.1 format of this
+    * object is:
+    *
+    * <pre>
+    * SignedData ::= SEQUENCE {
+    *   version Version,
+    *   digestAlgorithms DigestAlgorithmIdentifiers,
+    *   contentInfo ContentInfo,
+    *   certificates
+    *     [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL,
+    *   crls
+    *     [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+    *   signerInfos SignerInfos }
+    *
+    * Version ::= INTEGER
+    *
+    * DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier
+    *
+    * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
+    *
+    * ContentInfo ::= SEQUENCE {
+    *   contentType ContentType,
+    *   content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
+    *
+    * ContentType ::= OBJECT IDENTIFIER
+    *
+    * ExtendedCertificatesAndCertificates ::=
+    *   SET OF ExtendedCertificatesAndCertificate
+    *
+    * ExtendedCertificatesAndCertificate ::= CHOICE {
+    *   certificate Certificate, -- from X.509
+    *   extendedCertificate [0] IMPLICIT ExtendedCertificate }
+    *
+    * CertificateRevocationLists ::= SET OF CertificateRevocationList
+    *   -- from X.509
+    *
+    * SignerInfos ::= SET OF SignerInfo
+    *
+    * SignerInfo ::= SEQUENCE {
+    *   version Version,
+    *   issuerAndSerialNumber IssuerAndSerialNumber,
+    *   digestAlgorithm DigestAlgorithmIdentifier,
+    *   authenticatedAttributes
+    *     [0] IMPLICIT Attributes OPTIONAL,
+    *   digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
+    *   encryptedDigest EncryptedDigest,
+    *   unauthenticatedAttributes
+    *     [1] IMPLICIT Attributes OPTIONAL }
+    *
+    * EncryptedDigest ::= OCTET STRING
+    * </pre>
+    *
+    * <p>(Readers who are confused as to why it takes 40 levels of indirection
+    * to specify "data with a signature", rest assured that the present author
+    * is as confused as you are).</p>
+    */
+   public PKCS7SignedData(BERReader ber)
+     throws CRLException, CertificateException, IOException
+   {
+     CertificateFactory x509 = CertificateFactory.getInstance("X509");
+     DERValue val = ber.read();
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed ContentInfo");
+ 
+     val = ber.read();
+     if (val.getTag() != BER.OBJECT_IDENTIFIER)
+       throw new BEREncodingException("malformed ContentType");
+ 
+     if (!PKCS7_SIGNED_DATA.equals(val.getValue()))
+       throw new BEREncodingException("content is not SignedData");
+ 
+     val = ber.read();
+     if (val.getTag() != 0)
+       throw new BEREncodingException("malformed Content");
+ 
+     val = ber.read();
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed SignedData");
+ 
+     if (DEBUG)
+       debug("SignedData: " + val);
+ 
+     val = ber.read();
+     if (val.getTag() != BER.INTEGER)
+       throw new BEREncodingException("expecting Version");
+     version = (BigInteger) val.getValue();
+ 
+     if (DEBUG)
+       debug("  Version: " + version);
+ 
+     digestAlgorithms = new HashSet();
+     val = ber.read();
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed DigestAlgorithmIdentifiers");
+     if (DEBUG)
+       debug("  DigestAlgorithmIdentifiers: " + val);
+     int count = 0;
+     DERValue val2 = ber.read();
+     while (val2 != BER.END_OF_SEQUENCE &&
+            (val.getLength() > 0 && val.getLength() > count))
+       {
+         if (!val2.isConstructed())
+           throw new BEREncodingException("malformed AlgorithmIdentifier");
+         if (DEBUG)
+           debug("    AlgorithmIdentifier: " + val2);
+         count += val2.getEncodedLength();
+         val2 = ber.read();
+         if (val2.getTag() != BER.OBJECT_IDENTIFIER)
+           throw new BEREncodingException("malformed AlgorithmIdentifier");
+         if (DEBUG)
+           debug("      ID: " + val2.getValue());
+         List algId = new ArrayList(2);
+         algId.add(val2.getValue());
+         val2 = ber.read();
+         if (val2 != BER.END_OF_SEQUENCE)
+           {
+             count += val2.getEncodedLength();
+             if (val2.getTag() == BER.NULL)
+               algId.add(null);
+             else
+               algId.add(val2.getEncoded());
+             if (DEBUG)
+               debug("      params: " + new BigInteger(1, val2.getEncoded()).toString(16));
+             if (val2.isConstructed())
+               ber.skip(val2.getLength());
+             if (BERValue.isIndefinite(val))
+               val2 = ber.read();
+           }
+         else
+           algId.add(null);
+         digestAlgorithms.add(algId);
+       }
+ 
+     val = ber.read();
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed ContentInfo");
+     if (DEBUG)
+       debug("  ContentInfo: " + val);
+     val2 = ber.read();
+     if (val2.getTag() != BER.OBJECT_IDENTIFIER)
+       throw new BEREncodingException("malformed ContentType");
+     contentType = (OID) val2.getValue();
+     if (DEBUG)
+       debug("    ContentType: " + contentType);
+     if (BERValue.isIndefinite(val)
+         || (val.getLength() > 0 && val.getLength() > val2.getEncodedLength()))
+       {
+         val2 = ber.read();
+         if (val2 != BER.END_OF_SEQUENCE)
+           {
+             content = val2.getEncoded();
+             if (BERValue.isIndefinite(val))
+               val2 = ber.read();
+             if (DEBUG)
+               debug("    Content: " + new BigInteger(1, content).toString(16));
+           }
+       }
+ 
+     val = ber.read();
+     if (val.getTag() == 0)
+       {
+         if (!val.isConstructed())
+           throw new BEREncodingException("malformed ExtendedCertificatesAndCertificates");
+         if (DEBUG)
+           debug("  ExtendedCertificatesAndCertificates: " + val);
+         count = 0;
+         val2 = ber.read();
+         List certs = new LinkedList();
+         while (val2 != BER.END_OF_SEQUENCE &&
+                (val.getLength() > 0 && val.getLength() > count))
+           {
+             Certificate cert =
+               x509.generateCertificate(new ByteArrayInputStream(val2.getEncoded()));
+             if (DEBUG)
+               debug("    Certificate: " + cert);
+             certs.add(cert);
+             count += val2.getEncodedLength();
+             ber.skip(val2.getLength());
+             if (BERValue.isIndefinite(val) || val.getLength() > count)
+               val2 = ber.read();
+           }
+         certificates = (Certificate[]) certs.toArray(new Certificate[certs.size()]);
+         val = ber.read();
+       }
+ 
+     if (val.getTag() == 1)
+       {
+         if (!val.isConstructed())
+           throw new BEREncodingException("malformed CertificateRevocationLists");
+         if (DEBUG)
+           debug("  CertificateRevocationLists: " + val);
+         count = 0;
+         val2 = ber.read();
+         List crls = new LinkedList();
+         while (val2 != BER.END_OF_SEQUENCE &&
+                (val.getLength() > 0 && val.getLength() > count))
+           {
+             CRL crl = x509.generateCRL(new ByteArrayInputStream(val2.getEncoded()));
+             if (DEBUG)
+               debug ("    CRL: " + crl);
+             crls.add(crl);
+             count += val2.getEncodedLength();
+             ber.skip(val2.getLength());
+             if (BERValue.isIndefinite(val) || val.getLength() > count)
+               val2 = ber.read();
+           }
+         this.crls = (CRL[]) crls.toArray(new CRL[crls.size()]);
+         val = ber.read();
+       }
+ 
+     signerInfos = new HashSet();
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed SignerInfos");
+ 
+     if (DEBUG)
+       debug("  SignerInfos: " + val);
+ 
+     // FIXME read this more carefully.
+     // Since we are just reading a file (probably) we just read until we
+     // reach the end.
+     while (true)
+       {
+         int i = ber.peek();
+         if (i == 0 || i == -1)
+           break;
+         signerInfos.add(new SignerInfo(ber));
+       }
+   }
+ 
+   public BigInteger getVersion()
+   {
+     return version;
+   }
+ 
+   public Certificate[] getCertificates()
+   {
+     return (certificates != null ? (Certificate[]) certificates.clone()
+             : null);
+   }
+ 
+   public OID getContentType()
+   {
+     return contentType;
+   }
+ 
+   public byte[] getContent()
+   {
+     return (content != null ? (byte[]) content.clone() : null);
+   }
+ 
+   public Set getDigestAlgorithms()
+   {
+     // FIXME copy contents too, they are mutable!!!
+     return Collections.unmodifiableSet(digestAlgorithms);
+   }
+ 
+   public Set getSignerInfos()
+   {
+     Set copy = new HashSet();
+     for (Iterator it = signerInfos.iterator(); it.hasNext(); )
+       copy.add(it.next());
+     return Collections.unmodifiableSet(copy);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java gcc-4.1.0/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,279 ----
+ /* SignerInfo.java -- a SignerInfo object, from PKCS #7
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.security.pkcs;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.ber.BER;
+ import gnu.java.security.ber.BEREncodingException;
+ import gnu.java.security.ber.BERReader;
+ import gnu.java.security.ber.BERValue;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ 
+ import java.math.BigInteger;
+ 
+ import javax.security.auth.x500.X500Principal;
+ 
+ public class SignerInfo
+ {
+   private final BigInteger version;
+   private final BigInteger serialNumber;
+   private final X500Principal issuer;
+   private final OID digestAlgorithmId;
+   private final byte[] digestAlgorithmParams;
+   private final byte[] authenticatedAttributes;
+   private final OID digestEncryptionAlgorithmId;
+   private final byte[] digestEncryptionAlgorithmParams;
+   private final byte[] encryptedDigest;
+   private final byte[] unauthenticatedAttributes;
+ 
+   private static final boolean DEBUG = false;
+   private static void debug(String msg)
+   {
+     System.err.print("SignerInfo >> ");
+     System.err.println(msg);
+   }
+ 
+   /**
+    * Parse a SignerInfo object.
+    */
+   public SignerInfo(BERReader ber) throws IOException
+   {
+     DERValue val = ber.read();
+     if (DEBUG)
+       debug("SignerInfo: " + val);
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed SignerInfo");
+ 
+     val = ber.read();
+     if (val.getTag() != BER.INTEGER)
+       throw new BEREncodingException("malformed Version");
+     version = (BigInteger) val.getValue();
+ 
+     if (DEBUG)
+       debug("  Version: " + version);
+ 
+     val = ber.read();
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed IssuerAndSerialNumber");
+ 
+     if (DEBUG)
+       debug("  IssuerAndSerialNumber: " + val);
+ 
+     val = ber.read();
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed Issuer");
+     issuer = new X500Principal(val.getEncoded());
+     ber.skip(val.getLength());
+     if (DEBUG)
+       debug("    Issuer: " + issuer);
+ 
+     val = ber.read();
+     if (val.getTag() != BER.INTEGER)
+       throw new BEREncodingException("malformed SerialNumber");
+     serialNumber = (BigInteger) val.getValue();
+     if (DEBUG)
+       debug("    SerialNumber: " + serialNumber);
+ 
+     val = ber.read();
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed DigestAlgorithmIdentifier");
+     if (DEBUG)
+       debug("  DigestAlgorithmIdentifier: " + val);
+ 
+     int count = 0;
+     DERValue val2 = ber.read();
+     if (val2.getTag() != BER.OBJECT_IDENTIFIER)
+       throw new BEREncodingException("malformed AlgorithmIdentifier");
+     digestAlgorithmId = (OID) val2.getValue();
+     if (DEBUG)
+       debug("    OID: " + digestAlgorithmId);
+ 
+     if (BERValue.isIndefinite(val))
+       {
+         val2 = ber.read();
+         if (val2 != BER.END_OF_SEQUENCE)
+           {
+             digestAlgorithmParams = val2.getEncoded();
+             val2 = ber.read();
+             if (val2 != BER.END_OF_SEQUENCE)
+               throw new BEREncodingException("expecting BER end-of-sequence");
+           }
+         else
+           digestAlgorithmParams = null;
+       }
+     else if (val2.getEncodedLength() < val.getLength())
+       {
+         val2 = ber.read();
+         digestAlgorithmParams = val2.getEncoded();
+         if (val2.isConstructed())
+           ber.skip(val2.getLength());
+       }
+     else
+       digestAlgorithmParams = null;
+     if(DEBUG)
+       debug("    params: " + (digestAlgorithmParams == null ? null
+                               : new BigInteger(digestAlgorithmParams).toString(16)));
+ 
+     val = ber.read();
+     if (val.getTag() == 0)
+       {
+         authenticatedAttributes = val.getEncoded();
+         val = ber.read();
+         if (val.isConstructed())
+           ber.skip(val.getLength());
+         if (DEBUG)
+           debug("  AuthenticatedAttributes: " + val);
+         val = ber.read();
+       }
+     else
+       authenticatedAttributes = null;
+ 
+     if (!val.isConstructed())
+       throw new BEREncodingException("malformed DigestEncryptionAlgorithmIdentifier");
+     if (DEBUG)
+       debug("  DigestEncryptionAlgorithmIdentifier: " + val);
+     count = 0;
+     val2 = ber.read();
+     if (val2.getTag() != BER.OBJECT_IDENTIFIER)
+       throw new BEREncodingException("malformed AlgorithmIdentifier");
+     digestEncryptionAlgorithmId = (OID) val2.getValue();
+     if (DEBUG)
+       debug("    OID: " + digestEncryptionAlgorithmId);
+ 
+     if (BERValue.isIndefinite(val))
+       {
+         val2 = ber.read();
+         if (val2 != BER.END_OF_SEQUENCE)
+           {
+             digestEncryptionAlgorithmParams = val2.getEncoded();
+             val2 = ber.read();
+             if (val2 != BER.END_OF_SEQUENCE)
+               throw new BEREncodingException("expecting BER end-of-sequence");
+           }
+         else
+           digestEncryptionAlgorithmParams = null;
+       }
+     else if (val2.getEncodedLength() < val.getLength())
+       {
+         val2 = ber.read();
+         digestEncryptionAlgorithmParams = val2.getEncoded();
+         if (val2.isConstructed())
+           ber.skip(val2.getLength());
+       }
+     else
+       digestEncryptionAlgorithmParams = null;
+     if(DEBUG)
+       debug("    params: " + (digestEncryptionAlgorithmParams == null ? null
+                               : new BigInteger(digestEncryptionAlgorithmParams).toString(16)));
+ 
+     val = ber.read();
+     if (val.getTag() != BER.OCTET_STRING)
+       throw new BEREncodingException("malformed EncryptedDigest");
+     encryptedDigest = (byte[]) val.getValue();
+     if (DEBUG)
+       debug("  EncryptedDigest: " + new BigInteger(1, encryptedDigest).toString(16));
+ 
+     if (ber.peek() == 1)
+       unauthenticatedAttributes = ber.read().getEncoded();
+     else
+       unauthenticatedAttributes = null;
+ 
+     if (ber.peek() == 0)
+       ber.read();
+   }
+ 
+   public BigInteger getVersion()
+   {
+     return version;
+   }
+ 
+   public BigInteger getSerialNumber()
+   {
+     return serialNumber;
+   }
+ 
+   public X500Principal getIssuer()
+   {
+     return issuer;
+   }
+ 
+   public OID getDigestAlgorithmId()
+   {
+     return digestAlgorithmId;
+   }
+ 
+   public byte[] getDigestAlgorithmParams()
+   {
+     return (digestAlgorithmParams != null
+             ? (byte[]) digestAlgorithmParams.clone()
+             : null);
+   }
+ 
+   public byte[] getAuthenticatedAttributes()
+   {
+     return (authenticatedAttributes != null
+             ? (byte[]) authenticatedAttributes.clone()
+             : null);
+   }
+ 
+   public OID getDigestEncryptionAlgorithmId()
+   {
+     return digestEncryptionAlgorithmId;
+   }
+ 
+   public byte[] getDigestEncryptionAlgorithmParams()
+   {
+     return (digestEncryptionAlgorithmParams != null
+             ? (byte[]) digestEncryptionAlgorithmParams.clone()
+             : null);
+   }
+ 
+   public byte[] getEncryptedDigest()
+   {
+     return (encryptedDigest != null ? (byte[]) encryptedDigest.clone() : null);
+   }
+ 
+   public byte[] getUnauthenticatedAttributes()
+   {
+     return (unauthenticatedAttributes != null
+             ? (byte[]) unauthenticatedAttributes.clone()
+             : null);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/pkcs/package.html gcc-4.1.0/libjava/classpath/gnu/java/security/pkcs/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/security/pkcs/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/pkcs/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.security.pkcs package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.security.pkcs</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/CollectionCertStoreImpl.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/CollectionCertStoreImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/CollectionCertStoreImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/CollectionCertStoreImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* CollectionCertStore.java -- Collection-based cert store.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.cert.CRL;
+ import java.security.cert.CRLSelector;
+ import java.security.cert.CertSelector;
+ import java.security.cert.CertStoreException;
+ import java.security.cert.CertStoreParameters;
+ import java.security.cert.CertStoreSpi;
+ import java.security.cert.Certificate;
+ import java.security.cert.CollectionCertStoreParameters;
+ import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ 
+ public final class CollectionCertStoreImpl extends CertStoreSpi
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private final Collection store;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public CollectionCertStoreImpl(CertStoreParameters params)
+     throws InvalidAlgorithmParameterException
+   {
+     super(params);
+     if (! (params instanceof CollectionCertStoreParameters))
+       throw new InvalidAlgorithmParameterException("not a CollectionCertStoreParameters object");
+     store = ((CollectionCertStoreParameters) params).getCollection();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public Collection engineGetCertificates(CertSelector selector)
+     throws CertStoreException
+   {
+     LinkedList result = new LinkedList();
+     for (Iterator it = store.iterator(); it.hasNext(); )
+       {
+         Object o = it.next();
+         if ((o instanceof Certificate) && selector.match((Certificate) o))
+           result.add(o);
+       }
+     return result;
+   }
+ 
+   public Collection engineGetCRLs(CRLSelector selector)
+     throws CertStoreException
+   {
+     LinkedList result = new LinkedList();
+     for (Iterator it = store.iterator(); it.hasNext(); )
+       {
+         Object o = it.next();
+         if ((o instanceof CRL) && selector.match((CRL) o))
+           result.add(o);
+       }
+     return result;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSAKeyFactory.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSAKeyFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSAKeyFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSAKeyFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,134 ----
+ /* DSAKeyFactory.java -- DSA key factory.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.KeyFactorySpi;
+ import java.security.PrivateKey;
+ import java.security.PublicKey;
+ import java.security.interfaces.DSAPrivateKey;
+ import java.security.interfaces.DSAPublicKey;
+ import java.security.spec.DSAPrivateKeySpec;
+ import java.security.spec.DSAPublicKeySpec;
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * DSA key factory.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class DSAKeyFactory extends KeyFactorySpi
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   public DSAKeyFactory()
+   {
+     super();
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   protected PrivateKey engineGeneratePrivate(KeySpec keySpec)
+     throws InvalidKeySpecException
+   {
+     if (!(keySpec instanceof DSAPrivateKeySpec))
+       throw new InvalidKeySpecException();
+     return new GnuDSAPrivateKey(
+       ((DSAPrivateKeySpec) keySpec).getX(),
+       ((DSAPrivateKeySpec) keySpec).getP(),
+       ((DSAPrivateKeySpec) keySpec).getQ(),
+       ((DSAPrivateKeySpec) keySpec).getG());
+   }
+ 
+   protected PublicKey engineGeneratePublic(KeySpec keySpec)
+     throws InvalidKeySpecException
+   {
+     if (!(keySpec instanceof DSAPublicKeySpec))
+       throw new InvalidKeySpecException();
+     return new GnuDSAPublicKey(
+       ((DSAPublicKeySpec) keySpec).getY(),
+       ((DSAPublicKeySpec) keySpec).getP(),
+       ((DSAPublicKeySpec) keySpec).getQ(),
+       ((DSAPublicKeySpec) keySpec).getG());
+   }
+ 
+   protected KeySpec engineGetKeySpec(Key key, Class keySpec)
+     throws InvalidKeySpecException
+   {
+     if ((key instanceof DSAPublicKey) &&
+          keySpec.isAssignableFrom(DSAPublicKeySpec.class))
+       {
+         return new DSAPublicKeySpec(((DSAPublicKey) key).getY(),
+           ((DSAPublicKey) key).getParams().getP(),
+           ((DSAPublicKey) key).getParams().getQ(),
+           ((DSAPublicKey) key).getParams().getG());
+       }
+     if ((key instanceof DSAPrivateKey) &&
+          keySpec.isAssignableFrom(DSAPrivateKeySpec.class))
+       {
+         return new DSAPrivateKeySpec(((DSAPrivateKey) key).getX(),
+           ((DSAPrivateKey) key).getParams().getP(),
+           ((DSAPrivateKey) key).getParams().getQ(),
+           ((DSAPrivateKey) key).getParams().getG());
+       }
+     throw new InvalidKeySpecException();
+   }
+ 
+   protected Key engineTranslateKey(Key key) throws InvalidKeyException
+   {
+     if ((key instanceof GnuDSAPublicKey) || (key instanceof GnuDSAPrivateKey))
+       return key;
+     if (key instanceof DSAPublicKey)
+       return new GnuDSAPublicKey(((DSAPublicKey) key).getY(),
+         ((DSAPublicKey) key).getParams().getP(),
+         ((DSAPublicKey) key).getParams().getQ(),
+         ((DSAPublicKey) key).getParams().getG());
+     if (key instanceof DSAPrivateKey)
+       return new GnuDSAPrivateKey(((DSAPrivateKey) key).getX(),
+         ((DSAPrivateKey) key).getParams().getP(),
+         ((DSAPrivateKey) key).getParams().getQ(),
+         ((DSAPrivateKey) key).getParams().getG());
+     throw new InvalidKeyException();
+   } 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSAKeyPairGenerator.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSAKeyPairGenerator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSAKeyPairGenerator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSAKeyPairGenerator.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,194 ----
+ /* GnuDSAKeyPairGenerator.java --- Gnu DSA Key Pair Generator
+    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import java.math.BigInteger;
+ import java.security.AlgorithmParameterGenerator;
+ import java.security.AlgorithmParameters;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.InvalidParameterException;
+ import java.security.KeyPair;
+ import java.security.KeyPairGeneratorSpi;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.SecureRandom;
+ import java.security.interfaces.DSAParams;
+ import java.security.spec.AlgorithmParameterSpec;
+ import java.security.spec.DSAParameterSpec;
+ import java.security.spec.InvalidParameterSpecException;
+ import java.util.Random;
+ 
+ public class DSAKeyPairGenerator extends KeyPairGeneratorSpi 
+ 	implements java.security.interfaces.DSAKeyPairGenerator
+ {
+ int keysize;
+ SecureRandom random;
+ private BigInteger q = null; // the small prime
+ private BigInteger p = null; // the big prime
+ private BigInteger g = null;
+ 
+ public DSAKeyPairGenerator()
+ {
+ 	keysize = 1024;
+         getDefaults ();
+ }
+ 
+ public void initialize(int keysize, SecureRandom random)
+ {
+         initialize (keysize, false, random);
+ }
+ 
+ public void initialize(AlgorithmParameterSpec params,
+                        SecureRandom random)
+                 throws InvalidAlgorithmParameterException
+ {
+ 	if( !( params instanceof DSAParameterSpec ) )
+ 		throw new InvalidAlgorithmParameterException("Must be DSAParameterSpec");
+ 
+         try
+         {
+                 initialize ((DSAParams) params, random);
+         }
+         catch (InvalidParameterException ipe)
+         {
+                 InvalidAlgorithmParameterException iape =
+                         new InvalidAlgorithmParameterException();
+                 iape.initCause (ipe);
+                 throw iape;
+         }
+ }
+ 
+ public void initialize (DSAParams params, SecureRandom random)
+ {
+ 	DSAParameterSpec dsaparameterspec = (DSAParameterSpec)params;
+         if (dsaparameterspec.getP() == null
+             || dsaparameterspec.getQ() == null
+             || dsaparameterspec.getG() == null)
+         {
+                 throw new InvalidParameterException ("none of p, q, or g may be null");
+         }
+ 	p = dsaparameterspec.getP();
+ 	q = dsaparameterspec.getQ();
+ 	g = dsaparameterspec.getG();
+ 	this.random = random;
+ }
+ 
+ public void initialize(int modlen, boolean genParams, SecureRandom random) 
+ 	throws InvalidParameterException
+ {
+ 	if( ((modlen % 64) != 0) || (modlen < 512) || (modlen > 1024) )
+                 throw new InvalidParameterException();
+ 
+         this.keysize = modlen;
+         this.random = random;
+         if (this.random == null)
+         {
+                 this.random = new SecureRandom ();
+         }
+ 	if (genParams)
+         {
+                 try
+                 {
+                         AlgorithmParameterGenerator apgDSA = AlgorithmParameterGenerator.getInstance("DSA");
+                         apgDSA.init (modlen, random);
+                         AlgorithmParameters apDSA = apgDSA.generateParameters();
+                         DSAParameterSpec dsaparameterspec = (DSAParameterSpec)apDSA.getParameterSpec( DSAParameterSpec.class );
+                         p = dsaparameterspec.getP();
+                         q = dsaparameterspec.getQ();
+                         g = dsaparameterspec.getG();
+                 }
+                 catch (NoSuchAlgorithmException nsae)
+                 {
+                         InvalidParameterException ipe =
+                                 new InvalidParameterException ("can't generate DSA parameters");
+                         ipe.initCause (nsae);
+                         throw ipe;
+                 }
+                 catch (InvalidParameterSpecException ipse)
+                 {
+                         InvalidParameterException ipe =
+                                 new InvalidParameterException ("can't generate DSA parameters");
+                         ipe.initCause (ipse);
+                         throw ipe;
+                 }
+         }
+         else if (!getDefaults ())
+         {
+                 throw new InvalidParameterException ("unsupported key size: " + modlen);
+         }
+ }
+ 
+ public KeyPair generateKeyPair()
+ {
+         if (random == null)
+                 {
+                         random = new SecureRandom ();
+                 }
+ 
+ 	BigInteger x = new BigInteger( 159, random );
+ 
+ 	BigInteger y = g.modPow( x, p );
+ 
+ 	return new KeyPair( new GnuDSAPublicKey(y,p,q,g), new GnuDSAPrivateKey(x,p,q,g));
+ 	//return new KeyPair( public, private );
+ }
+ 
+ //These constants are Sun's Constants copied from the 
+ //Cryptography Specification
+ private boolean getDefaults()
+ {
+ 	if( keysize == 512) {
+ 		p = new BigInteger("fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae01f35b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17", 16);
+ 		q = new BigInteger("962eddcc369cba8ebb260ee6b6a126d9346e38c5", 16);
+ 		g = new BigInteger("678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d6486931d2d14271b9e35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca4", 16);
+ 		return true;
+ 	} else if( keysize == 768) {
+ 		p = new BigInteger("e9e642599d355f37c97ffd3567120b8e25c9cd43e927b3a9670fbec5d890141922d2c3b3ad2480093799869d1e846aab49fab0ad26d2ce6a22219d470bce7d777d4a21fbe9c270b57f607002f3cef8393694cf45ee3688c11a8c56ab127a3daf", 16);
+ 		q = new BigInteger("9cdbd84c9f1ac2f38d0f80f42ab952e7338bf511", 16);
+ 		g = new BigInteger("30470ad5a005fb14ce2d9dcd87e38bc7d1b1c5facbaecbe95f190aa7a31d23c4dbbcbe06174544401a5b2c020965d8c2bd2171d3668445771f74ba084d2029d83c1c158547f3a9f1a2715be23d51ae4d3e5a1f6a7064f316933a346d3f529252", 16);
+                 return true;
+ 	} else if( keysize == 1024) {
+ 		p = new BigInteger("fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c7", 16);
+ 		q = new BigInteger("9760508f15230bccb292b982a2eb840bf0581cf5", 16);
+ 		g = new BigInteger("f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a", 16);
+                 return true;
+ 	}
+ 	return false;
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSAParameterGenerator.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSAParameterGenerator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSAParameterGenerator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSAParameterGenerator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,128 ----
+ /* DSAParameterGenerator.java --- DSA Parameter Generator Implementation
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.util.Prime;
+ 
+ import java.math.BigInteger;
+ import java.security.AlgorithmParameterGeneratorSpi;
+ import java.security.AlgorithmParameters;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.SecureRandom;
+ import java.security.spec.AlgorithmParameterSpec;
+ import java.security.spec.DSAParameterSpec;
+ import java.security.spec.InvalidParameterSpecException;
+ import java.util.Random;
+ 
+ public class DSAParameterGenerator extends AlgorithmParameterGeneratorSpi
+ {
+   private int size;
+   private SecureRandom random = null;
+ 
+   public DSAParameterGenerator()
+   {
+     size = 1024;
+   }
+ 
+   public void engineInit(int size, SecureRandom random)
+   {
+     if( (size < 512) || (size > 1024) || ( (size % 64) != 0) )
+       //throw new InvalidAlgorithmParameterException("Invalid Size");
+       return;
+     this.size = size;
+     this.random = random;
+   }
+ 
+   public void engineInit(AlgorithmParameterSpec genParamSpec, SecureRandom random)
+     throws InvalidAlgorithmParameterException
+   {
+     if( !( genParamSpec instanceof DSAParameterSpec ) )
+       throw new InvalidAlgorithmParameterException("Must be DSAParameterSpec");
+ 
+     DSAParameterSpec dsaparameterspec = (DSAParameterSpec)genParamSpec;
+     int tmp = dsaparameterspec.getP().bitLength();
+ 
+     if( (tmp < 512) || (tmp > 1024) || ( (tmp % 64) != 0) )
+       throw new InvalidAlgorithmParameterException("Invalid Size");
+ 
+     this.random = random;
+   }
+ 
+   //For more information see IEEE P1363 A.16.1 (10/05/98 Draft)
+   public AlgorithmParameters engineGenerateParameters()
+   {
+     DSAParameterSpec dsaparameterspec;
+ 
+     int L = size;
+     BigInteger r, p, k, h, g;
+ 
+     //q 2^159 < q < 2^160
+     r = Prime.generateRandomPrime( 159, 160, BigInteger.valueOf(1));
+ 
+     // 2^(L-1) < p < 2^L
+     p = Prime.generateRandomPrime( r, BigInteger.valueOf(1), L - 1, L, BigInteger.valueOf(1));
+ 
+     k = p.subtract( BigInteger.valueOf(1) );
+     k = k.divide( r );
+ 
+     Random rand = new Random();
+     h = BigInteger.valueOf(1);
+ 
+     for(;;) {
+       h = h.add(BigInteger.valueOf( 1 ) );
+ 
+       g = h.modPow(k, p);
+ 
+       if( g.compareTo( BigInteger.valueOf(1) ) != 1 )
+ 	break;
+     }
+ 
+     try {
+       dsaparameterspec = new DSAParameterSpec(p, r, g);
+       AlgorithmParameters ap = AlgorithmParameters.getInstance("DSA");
+       ap.init( dsaparameterspec );
+       return ap;
+     } catch ( NoSuchAlgorithmException nsae ) {
+       return null;
+     } catch ( InvalidParameterSpecException ipse) {
+       return null;
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSAParameters.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSAParameters.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSAParameters.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSAParameters.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,150 ----
+ /* DSAParameters.java --- DSA Parameters Implementation
+    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.io.ASN1ParsingException;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.der.DERWriter;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.security.AlgorithmParametersSpi;
+ import java.security.spec.AlgorithmParameterSpec;
+ import java.security.spec.DSAParameterSpec;
+ import java.security.spec.InvalidParameterSpecException;
+ import java.util.ArrayList;
+ 
+ /*
+ 	ASN.1 Encoding for DSA from rfc2459 
+ 
+         id-dsa ID ::= { iso(1) member-body(2) us(840) x9-57(10040)
+                   x9cm(4) 1 }
+ 
+         Dss-Parms  ::=  SEQUENCE  {
+             p             INTEGER,
+             q             INTEGER,
+             g             INTEGER  }
+ 
+ */
+ public class DSAParameters extends AlgorithmParametersSpi
+ {
+ private BigInteger q; // the small prime
+ private BigInteger p; // the big prime
+ private BigInteger g;
+ 
+ 
+ public void engineInit(AlgorithmParameterSpec paramSpec)
+                             throws InvalidParameterSpecException
+ {
+ 	if( paramSpec instanceof DSAParameterSpec ) {
+ 		DSAParameterSpec dsaParamSpec = (DSAParameterSpec)paramSpec;
+ 		p = dsaParamSpec.getP();
+ 		q = dsaParamSpec.getQ();
+ 		g = dsaParamSpec.getG();
+ 	}
+ 	else
+ 		throw new InvalidParameterSpecException("Only accepts DSAParameterSpec");
+ }
+ 
+ public void engineInit(byte[] params)
+                             throws IOException
+ {
+ 	DERReader in = new DERReader(params);
+ 	DERValue val = in.read();
+ 	if (val.getValue() != DER.CONSTRUCTED_VALUE)
+ 		throw new ASN1ParsingException("badly formed parameters");
+ 	try
+ 		{
+ 			p = (BigInteger) in.read().getValue();
+ 			q = (BigInteger) in.read().getValue();
+ 			g = (BigInteger) in.read().getValue();
+ 		}
+ 	catch (Exception x)
+ 		{
+ 			throw new ASN1ParsingException("badly formed parameters");
+ 		}
+ }
+ 
+ public void engineInit(byte[] params, String format)
+                             throws IOException
+ {
+ 	if( !format.equals("ASN.1") )
+ 		throw new IOException("Invalid Format: Only accepts ASN.1");
+ 	engineInit( params );	
+ }
+ 
+ public AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
+                           throws InvalidParameterSpecException
+ {
+ 	if( paramSpec.isAssignableFrom(DSAParameterSpec.class) )
+ 		return new DSAParameterSpec(p, q, g);
+ 	else
+ 		throw new InvalidParameterSpecException("Only accepts DSAParameterSpec");
+ }
+ 
+ public byte[] engineGetEncoded()
+                                     throws IOException
+ {
+ 	ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ 	ArrayList seq = new ArrayList(3);
+ 	seq.add(new DERValue(DER.INTEGER, p));
+ 	seq.add(new DERValue(DER.INTEGER, q));
+ 	seq.add(new DERValue(DER.INTEGER, g));
+ 	DERWriter.write(bout, new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, seq));
+ 	return bout.toByteArray();
+ }
+ 
+ 
+ public byte[] engineGetEncoded(String format)
+                                     throws IOException
+ {
+ 	if( !format.equals("ASN.1") )
+ 		throw new IOException("Invalid Format: Only accepts ASN.1");
+ 	return engineGetEncoded();
+ }
+ 
+ public String engineToString()
+ {
+ 	return ("q: " + q + " p: " + p + " g: " + g);
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSASignature.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSASignature.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DSASignature.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DSASignature.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,251 ----
+ /* DSASignature.java --
+    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.der.DERWriter;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.InvalidKeyException;
+ import java.security.InvalidParameterException;
+ import java.security.MessageDigest;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.PrivateKey;
+ import java.security.PublicKey;
+ import java.security.SecureRandom;
+ import java.security.SignatureException;
+ import java.security.SignatureSpi;
+ import java.security.interfaces.DSAPrivateKey;
+ import java.security.interfaces.DSAPublicKey;
+ import java.security.spec.AlgorithmParameterSpec;
+ import java.util.ArrayList;
+ import java.util.Random;
+ 
+ public class DSASignature extends SignatureSpi
+ {
+   private DSAPublicKey publicKey;
+   private DSAPrivateKey privateKey;
+   private final MessageDigest digest;
+   private final SecureRandom random;
+ 
+   public DSASignature() throws NoSuchAlgorithmException
+   {
+     random = new SecureRandom();
+     digest = MessageDigest.getInstance ("SHA1");
+   }
+ 
+   private void init()
+   {
+     digest.reset();
+   }
+ 
+   public void engineInitVerify (PublicKey publicKey)
+     throws InvalidKeyException
+   {
+     if (publicKey instanceof DSAPublicKey)
+       this.publicKey = (DSAPublicKey) publicKey;
+     else
+       throw new InvalidKeyException();
+     init();
+   }
+ 
+   public void engineInitSign (PrivateKey privateKey)
+     throws InvalidKeyException
+   {
+     if (privateKey instanceof DSAPrivateKey)
+       this.privateKey = (DSAPrivateKey) privateKey;
+     else
+       throw new InvalidKeyException ("not a DSA private key");
+ 
+     init();
+   }
+ 
+   public void engineInitSign (PrivateKey privateKey,
+                               SecureRandom random)
+     throws InvalidKeyException
+   {
+     if (privateKey instanceof DSAPrivateKey)
+       this.privateKey = (DSAPrivateKey) privateKey;
+     else
+       throw new InvalidKeyException ("not a DSA private key");
+ 
+     appRandom = random;
+     init();
+   }
+ 
+   public void engineUpdate(byte b)
+     throws SignatureException
+   {
+     digest.update (b);
+   }
+ 
+   public void engineUpdate (byte[] b, int off, int len)
+     throws SignatureException
+   {
+     digest.update (b, off, len);
+   }
+ 
+   public byte[] engineSign() throws SignatureException
+   {
+     if (privateKey == null)
+       throw new SignatureException ("not initialized for signing");
+ 
+     try
+       {
+         BigInteger g = privateKey.getParams().getG();
+         BigInteger p = privateKey.getParams().getP();
+         BigInteger q = privateKey.getParams().getQ();
+ 
+         BigInteger x = privateKey.getX();
+ 
+         BigInteger k = new BigInteger (159, appRandom != null ? appRandom : random);
+ 
+         BigInteger r = g.modPow(k, p);
+         r = r.mod(q);
+ 
+         byte bytes[] = digest.digest();
+         BigInteger sha = new BigInteger (1, bytes);
+ 
+         BigInteger s = sha.add (x.multiply (r));
+         s = s.multiply (k.modInverse(q)).mod (q);
+ 
+         ByteArrayOutputStream bout = new ByteArrayOutputStream();
+         ArrayList seq = new ArrayList (2);
+         seq.add(0, new DERValue (DER.INTEGER, r));
+         seq.add(1, new DERValue (DER.INTEGER, s));
+         DERWriter.write (bout, new DERValue (DER.CONSTRUCTED | DER.SEQUENCE, seq));
+         return bout.toByteArray();
+       }
+     catch (IOException ioe)
+       {
+         SignatureException se = new SignatureException();
+         se.initCause (ioe);
+         throw se;
+       }
+     catch (ArithmeticException ae)
+       {
+         SignatureException se = new SignatureException();
+         se.initCause (ae);
+         throw se;
+       }
+   }
+ 
+   public int engineSign (byte[] outbuf, int offset, int len)
+     throws SignatureException
+   {
+     byte tmp[] = engineSign();
+     if (tmp.length > len)
+       throw new SignatureException ("output buffer too short");
+     System.arraycopy (tmp, 0, outbuf, offset, tmp.length);
+     return tmp.length;
+   }
+ 
+   public boolean engineVerify (byte[] sigBytes)
+     throws SignatureException
+   {
+     // Decode sigBytes from ASN.1 DER encoding
+     try
+       {
+         DERReader in = new DERReader (sigBytes);
+         DERValue val = in.read();
+         if (!val.isConstructed())
+           throw new SignatureException ("badly formed signature");
+         BigInteger r = (BigInteger) in.read().getValue();
+         BigInteger s = (BigInteger) in.read().getValue();
+ 
+         BigInteger g = publicKey.getParams().getG();
+         BigInteger p = publicKey.getParams().getP();
+         BigInteger q = publicKey.getParams().getQ();
+ 
+         BigInteger y = publicKey.getY();
+ 
+         BigInteger w = s.modInverse (q);
+ 
+         byte bytes[] = digest.digest();
+         BigInteger sha = new BigInteger (1, bytes);
+ 
+         BigInteger u1 = w.multiply (sha).mod ( q );
+ 
+         BigInteger u2 = r.multiply (w).mod(q);
+ 
+         BigInteger v = g.modPow (u1, p).multiply (y.modPow (u2, p)).mod (p).mod (q);
+ 
+         if (v.equals (r))
+           return true;
+         else
+           return false;
+       }
+     catch (IOException ioe)
+       {
+         SignatureException se = new SignatureException ("badly formed signature");
+         se.initCause (ioe);
+         throw se;
+       }
+   }
+ 
+   public void engineSetParameter (String param,
+                                   Object value)
+     throws InvalidParameterException
+   {
+     throw new InvalidParameterException();
+   }
+ 
+   public void engineSetParameter (AlgorithmParameterSpec params)
+     throws InvalidAlgorithmParameterException
+   {
+     throw new InvalidParameterException();
+ 
+   }
+ 
+   public Object engineGetParameter (String param)
+     throws InvalidParameterException
+   {
+     throw new InvalidParameterException();
+   }
+ 
+   public Object clone() throws CloneNotSupportedException
+   {
+     return super.clone();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DefaultPolicy.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DefaultPolicy.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DefaultPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DefaultPolicy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /* DefaultPolicy.java --
+    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.security.provider;
+ 
+ import java.security.AllPermission;
+ import java.security.CodeSource;
+ import java.security.Permission;
+ import java.security.PermissionCollection;
+ import java.security.Permissions;
+ import java.security.Policy;
+ 
+ /** 
+   * This is just a stub policy implementation which grants all permissions
+   * to any code source. FIXME: This should be replaced with a real
+   * implementation that reads the policy configuration from a file, like
+   * $JAVA_HOME/jre/lib/security/java.security.
+   */
+ public class DefaultPolicy extends Policy
+ {
+   static Permission allPermission = new AllPermission();
+ 
+   public PermissionCollection getPermissions(CodeSource codesource)
+   {
+     Permissions perms = new Permissions();
+     perms.add(allPermission);
+     return perms;
+   }
+   
+   public void refresh()
+   {
+     // Nothing.
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyFactoryImpl.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyFactoryImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyFactoryImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyFactoryImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,123 ----
+ /* DiffieHellmanKeyFactoryImpl.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.javax.crypto.GnuDHPrivateKey;
+ 
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.KeyFactorySpi;
+ import java.security.PrivateKey;
+ import java.security.PublicKey;
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.KeySpec;
+ 
+ import javax.crypto.spec.DHParameterSpec;
+ import javax.crypto.spec.DHPrivateKeySpec;
+ import javax.crypto.spec.DHPublicKeySpec;
+ 
+ import javax.crypto.interfaces.DHPrivateKey;
+ import javax.crypto.interfaces.DHPublicKey;
+ 
+ public class DiffieHellmanKeyFactoryImpl extends KeyFactorySpi
+ {
+   protected PrivateKey engineGeneratePrivate (final KeySpec spec)
+     throws InvalidKeySpecException
+   {
+     if (spec instanceof DHPrivateKeySpec)
+       {
+         DHPrivateKeySpec dh = (DHPrivateKeySpec) spec;
+         return new GnuDHPrivateKey (dh.getX (),
+                                     new DHParameterSpec (dh.getP (), dh.getG ()));
+       }
+     throw new InvalidKeySpecException ();
+   }
+ 
+   protected PublicKey engineGeneratePublic (final KeySpec spec)
+     throws InvalidKeySpecException
+   {
+     if (spec instanceof DHPublicKeySpec)
+       {
+         DHPublicKeySpec dh = (DHPublicKeySpec) spec;
+         return new GnuDHPublicKey (new DHParameterSpec (dh.getP (), dh.getG ()),
+                                    dh.getY(), null);
+       }
+     throw new InvalidKeySpecException ();
+   }
+ 
+   protected KeySpec engineGetKeySpec (final Key key, final Class specClass)
+     throws InvalidKeySpecException
+   {
+     if (key instanceof DHPrivateKey)
+       {
+         if (DHPrivateKeySpec.class.isAssignableFrom (specClass))
+           {
+             DHParameterSpec params = ((DHPrivateKey) key).getParams ();
+             return new DHPrivateKeySpec (((DHPrivateKey) key).getX (),
+                                          params.getP (), params.getG ());
+           }
+       }
+     if (key instanceof DHPublicKey)
+       {
+         if (DHPublicKeySpec.class.isAssignableFrom (specClass))
+           {
+             DHParameterSpec params = ((DHPublicKey) key).getParams ();
+             return new DHPublicKeySpec (((DHPublicKey) key).getY (),
+                                         params.getP (), params.getG ());
+           }
+       }
+     throw new InvalidKeySpecException ();
+   }
+ 
+   protected Key engineTranslateKey (final Key key)
+     throws InvalidKeyException
+   {
+     if (key instanceof DHPrivateKey)
+       {
+         return new GnuDHPrivateKey (((DHPrivateKey) key).getX (),
+                                     ((DHPrivateKey) key).getParams ());
+       }
+     if (key instanceof DHPublicKey)
+       {
+         return new GnuDHPublicKey (((DHPublicKey) key).getParams (),
+                                    ((DHPublicKey) key).getY (), null);
+       }
+     throw new InvalidKeyException ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyPairGeneratorImpl.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyPairGeneratorImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyPairGeneratorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyPairGeneratorImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,86 ----
+ /* DiffieHellmanKeyPairGeneratorImpl.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.javax.crypto.GnuDHPrivateKey;
+ 
+ import java.math.BigInteger;
+ 
+ import java.security.KeyPair;
+ import java.security.KeyPairGeneratorSpi;
+ import java.security.SecureRandom;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ import javax.crypto.spec.DHParameterSpec;
+ 
+ public class DiffieHellmanKeyPairGeneratorImpl extends KeyPairGeneratorSpi
+ {
+   private SecureRandom random;
+   private DHParameterSpec params;
+ 
+   public KeyPair generateKeyPair ()
+   {
+     if (params == null || random == null)
+       throw new IllegalStateException ("not initialized");
+     byte[] buf = new byte[(params.getP ().bitLength() >>> 3)];
+     random.nextBytes (buf);
+     BigInteger x = new BigInteger (1, buf);
+     BigInteger y = params.getG ().modPow (x, params.getP ());
+     GnuDHPublicKey pub = new GnuDHPublicKey (params, y, null);
+     GnuDHPrivateKey priv = new GnuDHPrivateKey (x, params);
+ 
+     return new KeyPair (pub, priv);
+   }
+ 
+   public void initialize (final int keysize, final SecureRandom random)
+   {
+     throw new UnsupportedOperationException ("key generation without parameters not supported");
+   }
+ 
+   public void initialize (final AlgorithmParameterSpec params,
+                           final SecureRandom random)
+   {
+     if (!(params instanceof DHParameterSpec))
+       throw new IllegalArgumentException ("expecting Diffie-Hellman parameters");
+     this.params = (DHParameterSpec) params;
+     this.random = random;
+     if (this.random == null)
+       this.random = new SecureRandom ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/EncodedKeyFactory.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/EncodedKeyFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/EncodedKeyFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/EncodedKeyFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,303 ----
+ /* EncodedKeyFactory.java -- encoded key factory.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.BitString;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.security.AlgorithmParameters;
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.KeyFactorySpi;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.PrivateKey;
+ import java.security.PublicKey;
+ import java.security.spec.DSAParameterSpec;
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.InvalidParameterSpecException;
+ import java.security.spec.KeySpec;
+ import java.security.spec.PKCS8EncodedKeySpec;
+ import java.security.spec.RSAPrivateCrtKeySpec;
+ import java.security.spec.RSAPublicKeySpec;
+ import java.security.spec.X509EncodedKeySpec;
+ 
+ import javax.crypto.spec.DHParameterSpec;
+ 
+ /**
+  * A factory for keys encoded in either the X.509 format (for public
+  * keys) or the PKCS#8 format (for private keys).
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class EncodedKeyFactory extends KeyFactorySpi
+ {
+ 
+   // Constants.
+   // ------------------------------------------------------------------------
+ 
+   private static final OID ID_DSA = new OID("1.2.840.10040.4.1");
+   private static final OID ID_RSA = new OID("1.2.840.113549.1.1.1");
+   private static final OID ID_DH  = new OID("1.2.840.10046.2.1");
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   public PublicKey engineGeneratePublic(KeySpec spec)
+     throws InvalidKeySpecException
+   {
+     if (!(spec instanceof X509EncodedKeySpec))
+       throw new InvalidKeySpecException("only supports X.509 key specs");
+     DERReader der = new DERReader(((X509EncodedKeySpec) spec).getEncoded());
+     try
+       {
+         DERValue spki = der.read();
+         if (!spki.isConstructed())
+           {
+             throw new InvalidKeySpecException("malformed encoded key");
+           }
+         DERValue alg = der.read();
+         if (!alg.isConstructed())
+           {
+             throw new InvalidKeySpecException("malformed encoded key");
+           }
+         DERValue val = der.read();
+         if (!(val.getValue() instanceof OID))
+           {
+             throw new InvalidKeySpecException("malformed encoded key");
+           }
+         OID algId = (OID) val.getValue();
+         byte[] algParams = null;
+         if (alg.getLength() > val.getEncodedLength())
+           {
+             val = der.read();
+             algParams = val.getEncoded();
+             if (val.isConstructed())
+               der.skip(val.getLength());
+           }
+         val = der.read();
+         if (!(val.getValue() instanceof BitString))
+           {
+             throw new InvalidKeySpecException("malformed encoded key");
+           }
+         byte[] publicKey = ((BitString) val.getValue()).toByteArray();
+         if (algId.equals(ID_DSA))
+           {
+             BigInteger p = null, g = null, q = null, Y;
+             if (algParams != null)
+               {
+                 DERReader dsaParams = new DERReader(algParams);
+                 val = dsaParams.read();
+                 if (!val.isConstructed())
+                   throw new InvalidKeySpecException("malformed DSA parameters");
+                 val = dsaParams.read();
+                 if (!(val.getValue() instanceof BigInteger))
+                   throw new InvalidKeySpecException("malformed DSA parameters");
+                 p = (BigInteger) val.getValue();
+                 val = dsaParams.read();
+                 if (!(val.getValue() instanceof BigInteger))
+                   throw new InvalidKeySpecException("malformed DSA parameters");
+                 q = (BigInteger) val.getValue();
+                 val = dsaParams.read();
+                 if (!(val.getValue() instanceof BigInteger))
+                   throw new InvalidKeySpecException("malformed DSA parameters");
+                 g = (BigInteger) val.getValue();
+               }
+             DERReader dsaPub = new DERReader(publicKey);
+             val = dsaPub.read();
+             if (!(val.getValue() instanceof BigInteger))
+               throw new InvalidKeySpecException("malformed DSA parameters");
+             Y = (BigInteger) val.getValue();
+             return new GnuDSAPublicKey(Y, p, q, g);
+           }
+         else if (algId.equals(ID_RSA))
+           {
+             DERReader rsaParams = new DERReader(publicKey);
+             if (!rsaParams.read().isConstructed())
+               {
+                 throw new InvalidKeySpecException("malformed encoded key");
+               }
+             return new GnuRSAPublicKey(new RSAPublicKeySpec(
+               (BigInteger) rsaParams.read().getValue(),
+               (BigInteger) rsaParams.read().getValue()));
+           }
+         else if (algId.equals(ID_DH))
+           {
+             if (algParams == null)
+               throw new InvalidKeySpecException("missing DH parameters");
+             DERReader dhParams = new DERReader(algParams);
+             val = dhParams.read();
+             BigInteger p, g, q, Y;
+             if (!val.isConstructed())
+               throw new InvalidKeySpecException("malformed DH parameters");
+             val = dhParams.read();
+             if (!(val.getValue() instanceof BigInteger))
+               throw new InvalidKeySpecException("malformed DH parameters");
+             p = (BigInteger) val.getValue();
+             val = dhParams.read();
+             if (!(val.getValue() instanceof BigInteger))
+               throw new InvalidKeySpecException("malformed DH parameters");
+             g = (BigInteger) val.getValue();
+             val = dhParams.read();
+             if (!(val.getValue() instanceof BigInteger))
+               throw new InvalidKeySpecException("malformed DH parameters");
+             q = (BigInteger) val.getValue();
+             DERReader dhPub = new DERReader(publicKey);
+             val = dhPub.read();
+             if (!(val.getValue() instanceof BigInteger))
+               throw new InvalidKeySpecException("malformed DH parameters");
+             Y = (BigInteger) val.getValue();
+             return (PublicKey) new GnuDHPublicKey(new DHParameterSpec(p, g), Y, q);
+           }
+         else
+           throw new InvalidKeySpecException("unknown algorithm: " + algId);
+       }
+     catch (IOException ioe)
+       {
+         throw new InvalidKeySpecException(ioe.getMessage());
+       }
+   }
+ 
+   public PrivateKey engineGeneratePrivate(KeySpec spec)
+     throws InvalidKeySpecException
+   {
+     if (!(spec instanceof PKCS8EncodedKeySpec))
+       {
+         throw new InvalidKeySpecException("only supports PKCS8 key specs");
+       }
+     DERReader der = new DERReader(((PKCS8EncodedKeySpec) spec).getEncoded());
+     try
+       {
+         DERValue pki = der.read();
+         if (!pki.isConstructed())
+           {
+             throw new InvalidKeySpecException("malformed encoded key");
+           }
+         DERValue val = der.read();
+         if (!(val.getValue() instanceof BigInteger))
+           {
+             throw new InvalidKeySpecException("malformed encoded key");
+           }
+         DERValue alg = der.read();
+         if (!alg.isConstructed())
+           {
+             throw new InvalidKeySpecException("malformed encoded key");
+           }
+         val = der.read();
+         if (!(val.getValue() instanceof OID))
+           {
+             throw new InvalidKeySpecException("malformed encoded key");
+           }
+         OID algId = (OID) val.getValue();
+         byte[] algParams = null;
+         if (alg.getLength() > val.getEncodedLength())
+           {
+             val = der.read();
+             algParams = val.getEncoded();
+             if (val.isConstructed())
+               der.skip(val.getLength());
+           }
+         byte[] privateKey = (byte[]) der.read().getValue();
+         if (algId.equals(ID_DSA))
+           {
+             if (algParams == null)
+               {
+                 throw new InvalidKeySpecException("missing DSA parameters");
+               }
+             AlgorithmParameters params = AlgorithmParameters.getInstance("DSA");
+             params.init(algParams);
+             DSAParameterSpec dsaSpec = (DSAParameterSpec)
+               params.getParameterSpec(DSAParameterSpec.class);
+             DERReader dsaPriv = new DERReader(privateKey);
+             return new GnuDSAPrivateKey((BigInteger) dsaPriv.read().getValue(),
+               dsaSpec.getP(), dsaSpec.getQ(), dsaSpec.getG());
+           }
+         else if (algId.equals(ID_RSA))
+           {
+             DERReader rsaParams = new DERReader(privateKey);
+             if (!rsaParams.read().isConstructed())
+               throw new InvalidKeySpecException("malformed encoded key");
+             return new GnuRSAPrivateKey(new RSAPrivateCrtKeySpec(
+               (BigInteger) rsaParams.read().getValue(), // n
+               (BigInteger) rsaParams.read().getValue(), // e
+               (BigInteger) rsaParams.read().getValue(), // d
+               (BigInteger) rsaParams.read().getValue(), // p
+               (BigInteger) rsaParams.read().getValue(), // q
+               (BigInteger) rsaParams.read().getValue(), // d mod (p - 1)
+               (BigInteger) rsaParams.read().getValue(), // d mod (q - 1)
+               (BigInteger) rsaParams.read().getValue())); // (inv q) mod p
+           }
+         else
+           throw new InvalidKeySpecException("unknown algorithm: " + algId);
+       }
+     catch (InvalidParameterSpecException iapse)
+       {
+         throw new InvalidKeySpecException(iapse.getMessage());
+       }
+     catch (NoSuchAlgorithmException nsae)
+       {
+         throw new InvalidKeySpecException(nsae.getMessage());
+       }
+     catch (IOException ioe)
+       {
+         throw new InvalidKeySpecException(ioe.getMessage());
+       }
+   }
+ 
+   public KeySpec engineGetKeySpec(Key key, Class speClass)
+     throws InvalidKeySpecException
+   {
+     if ((key instanceof PrivateKey) && key.getFormat().equals("PKCS#8")
+         && speClass.isAssignableFrom(PKCS8EncodedKeySpec.class))
+       return new PKCS8EncodedKeySpec(key.getEncoded());
+     else if ((key instanceof PublicKey) && key.getFormat().equals("X.509")
+         && speClass.isAssignableFrom(X509EncodedKeySpec.class))
+       return new X509EncodedKeySpec(key.getEncoded());
+     else
+       throw new InvalidKeySpecException();
+   }
+ 
+   public Key engineTranslateKey(Key key) throws InvalidKeyException
+   {
+     throw new InvalidKeyException("translating keys not supported");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/Gnu.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/Gnu.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/Gnu.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/Gnu.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,181 ----
+ /* Gnu.java --- Gnu provider main class
+    Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.security.Provider;
+ 
+ public final class Gnu extends Provider
+ {
+   public Gnu()
+   {
+     super("GNU", 1.0, "GNU provider v1.0 implementing SHA-1, MD5, DSA, RSA, X.509 Certificates and CRLs, PKIX certificate path validators, Collection cert stores, Diffie-Hellman key agreement and key pair generator");
+ 
+     AccessController.doPrivileged (new PrivilegedAction()
+     {
+       public Object run()
+       {
+         // Note that all implementation class names are referenced by using
+         // Class.getName(). That way when we staticly link the Gnu provider
+         // we automatically get all the implementation classes.
+ 
+         // Signature
+         put("Signature.SHA1withDSA",
+             gnu.java.security.provider.DSASignature.class.getName());
+ 
+         put("Alg.Alias.Signature.DSS", "SHA1withDSA");
+         put("Alg.Alias.Signature.DSA", "SHA1withDSA");
+         put("Alg.Alias.Signature.SHAwithDSA", "SHA1withDSA");
+         put("Alg.Alias.Signature.DSAwithSHA", "SHA1withDSA");
+         put("Alg.Alias.Signature.DSAwithSHA1", "SHA1withDSA");
+         put("Alg.Alias.Signature.SHA/DSA", "SHA1withDSA");
+         put("Alg.Alias.Signature.SHA-1/DSA", "SHA1withDSA");
+         put("Alg.Alias.Signature.SHA1/DSA", "SHA1withDSA");
+         put("Alg.Alias.Signature.OID.1.2.840.10040.4.3", "SHA1withDSA");
+         put("Alg.Alias.Signature.1.2.840.10040.4.3", "SHA1withDSA");
+         put("Alg.Alias.Signature.1.3.14.3.2.13", "SHA1withDSA");
+         put("Alg.Alias.Signature.1.3.14.3.2.27", "SHA1withDSA");
+ 
+         put("Signature.MD2withRSA", MD2withRSA.class.getName());
+         put("Signature.MD2withRSA ImplementedIn", "Software");
+         put("Alg.Alias.Signature.md2WithRSAEncryption", "MD2withRSA");
+         put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.2", "MD2withRSA");
+         put("Alg.Alias.Signature.1.2.840.113549.1.1.2", "MD2withRSA");
+ 
+         put("Signature.MD4withRSA", MD4withRSA.class.getName());
+         put("Signature.MD4withRSA ImplementedIn", "Software");
+         put("Alg.Alias.Signature.md4WithRSAEncryption", "MD4withRSA");
+         put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.3", "MD4withRSA");
+         put("Alg.Alias.Signature.1.2.840.113549.1.1.3", "MD4withRSA");
+ 
+         put("Signature.MD5withRSA", MD5withRSA.class.getName());
+         put("Signature.MD5withRSA ImplementedIn", "Software");
+         put("Alg.Alias.Signature.md5WithRSAEncryption", "MD5withRSA");
+         put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.4", "MD5withRSA");
+         put("Alg.Alias.Signature.1.2.840.113549.1.1.4", "MD5withRSA");
+ 
+         put("Signature.SHA1withRSA", SHA1withRSA.class.getName());
+         put("Signature.SHA1withRSA ImplementedIn", "Software");
+         put("Alg.Alias.Signature.sha-1WithRSAEncryption", "SHA1withRSA");
+         put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.5", "SHA1withRSA");
+         put("Alg.Alias.Signature.1.2.840.113549.1.1.5", "SHA1withRSA");
+ 
+         // Key Pair Generator
+         put("KeyPairGenerator.DSA",
+             gnu.java.security.provider.DSAKeyPairGenerator.class.getName());
+         put("KeyPairGenerator.DiffieHellman", DiffieHellmanKeyPairGeneratorImpl.class.getName ());
+ 
+         put("Alg.Alias.KeyPairGenerator.OID.1.2.840.10040.4.1", "DSA");
+         put("Alg.Alias.KeyPairGenerator.1.2.840.10040.4.1", "DSA");
+         put("Alg.Alias.KeyPairGenerator.1.3.14.3.2.12", "DSA");
+         put("Alg.Alias.KeyPairGenerator.DH", "DiffieHellman");
+ 
+         // Key Factory
+         put("KeyFactory.DSA",
+             gnu.java.security.provider.DSAKeyFactory.class.getName());
+ 
+         put("KeyFactory.Encoded", EncodedKeyFactory.class.getName());
+         put("KeyFactory.Encoded ImplementedIn", "Software");
+         put("Alg.Alias.KeyFactory.X.509", "Encoded");
+         put("Alg.Alias.KeyFactory.X509", "Encoded");
+         put("Alg.Alias.KeyFactory.PKCS#8", "Encoded");
+         put("Alg.Alias.KeyFactory.PKCS8", "Encoded");
+ 
+         put("KeyFactory.RSA", RSAKeyFactory.class.getName());
+ 
+         put("Alg.Alias.KeyFactory.OID.1.2.840.10040.4.1", "DSA");
+         put("Alg.Alias.KeyFactory.1.2.840.10040.4.1", "DSA");
+         put("Alg.Alias.KeyFactory.1.3.14.3.2.12", "DSA");
+ 
+         put("KeyFactory.DiffieHellman", DiffieHellmanKeyFactoryImpl.class.getName());
+         put("Alg.Alias.KeyFactory.DH", "DiffieHellman");
+ 
+         // Message Digests
+         put("MessageDigest.SHA", gnu.java.security.provider.SHA.class.getName());
+         put("MessageDigest.MD5", gnu.java.security.provider.MD5.class.getName());
+ 
+         // Format "Alias", "Actual Name"
+         put("Alg.Alias.MessageDigest.SHA1", "SHA");
+         put("Alg.Alias.MessageDigest.SHA-1", "SHA");
+         put("Alg.Alias.MessageDigest.SHA-160", "SHA");
+ 
+         // Algorithm Parameters
+         put("AlgorithmParameters.DSA",
+             gnu.java.security.provider.DSAParameters.class.getName());
+ 
+         put("Alg.Alias.AlgorithmParameters.DSS", "DSA");
+         put("Alg.Alias.AlgorithmParameters.SHAwithDSA", "DSA");
+         put("Alg.Alias.AlgorithmParameters.OID.1.2.840.10040.4.3", "DSA");
+         put("Alg.Alias.AlgorithmParameters.1.2.840.10040.4.3", "DSA");
+ 
+         // Algorithm Parameter Generator
+         put("AlgorithmParameterGenerator.DSA",
+             gnu.java.security.provider.DSAParameterGenerator.class.getName());
+ 
+         // SecureRandom
+         put("SecureRandom.SHA1PRNG",
+             gnu.java.security.provider.SHA1PRNG.class.getName());
+ 
+         // CertificateFactory
+         put("CertificateFactory.X509", X509CertificateFactory.class.getName());
+ 
+         put("CertificateFactory.X509 ImplementedIn", "Software");
+         put("Alg.Alias.CertificateFactory.X.509", "X509");
+ 
+         // CertPathValidator
+         put("CertPathValidator.PKIX", PKIXCertPathValidatorImpl.class.getName());
+         put("CertPathValidator.PKIX ImplementedIn", "Software");
+ 
+         // CertStore
+         put("CertStore.Collection", CollectionCertStoreImpl.class.getName());
+ 
+         // KeyAgreement
+         put("KeyAgreement.DiffieHellman", gnu.javax.crypto.DiffieHellmanImpl.class.getName());
+         put("Alg.Alias.KeyAgreement.DH", "DiffieHellman");
+ 
+         // Cipher
+         put("Cipher.RSAES-PKCS1-v1_5", gnu.javax.crypto.RSACipherImpl.class.getName());
+         put("Alg.Alias.Cipher.RSA", "RSAES-PKCS1-v1_5");
+ 
+         return null;
+       }
+     });
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuDHPublicKey.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuDHPublicKey.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuDHPublicKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuDHPublicKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,115 ----
+ /* GnuDHPublicKey.java -- A Diffie-Hellman public key.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.BitString;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.math.BigInteger;
+ import java.util.ArrayList;
+ 
+ import javax.crypto.interfaces.DHPublicKey;
+ import javax.crypto.spec.DHParameterSpec;
+ 
+ public class GnuDHPublicKey implements DHPublicKey
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private byte[] encoded;
+   private final DHParameterSpec params;
+   private final BigInteger Y;
+   private final BigInteger q;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public GnuDHPublicKey(DHParameterSpec params, BigInteger Y, BigInteger q)
+   {
+     this.params = params;
+     this.Y = Y;
+     this.q = q;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public BigInteger getY()
+   {
+     return Y;
+   }
+ 
+   public DHParameterSpec getParams()
+   {
+     return params;
+   }
+ 
+   public String getAlgorithm()
+   {
+     return "DH";
+   }
+ 
+   public String getFormat()
+   {
+     return "X.509";
+   }
+ 
+   public byte[] getEncoded()
+   {
+     if (encoded != null)
+       return (byte[]) encoded.clone();
+     ArrayList spki = new ArrayList(2);
+     ArrayList alg = new ArrayList(2);
+     alg.add(new DERValue(DER.OBJECT_IDENTIFIER, new OID("1.2.840.10046.2.1")));
+     ArrayList param = new ArrayList(3);
+     param.add(new DERValue(DER.INTEGER, params.getP()));
+     param.add(new DERValue(DER.INTEGER, params.getG()));
+     param.add(new DERValue(DER.INTEGER, q));
+     alg.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, param));
+     spki.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, alg));
+     spki.add(new DERValue(DER.BIT_STRING, new BitString(Y.toByteArray())));
+     encoded = new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, spki).getEncoded();
+     if (encoded != null)
+       return (byte[]) encoded.clone();
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuDSAPrivateKey.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuDSAPrivateKey.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuDSAPrivateKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuDSAPrivateKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,147 ----
+ /* GnuDSAPrivateKey.java --- Gnu DSA Private Key
+    Copyright (C) 1999,2003,2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.der.DERWriter;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.security.interfaces.DSAParams;
+ import java.security.interfaces.DSAPrivateKey;
+ import java.security.spec.DSAParameterSpec;
+ import java.util.ArrayList;
+ 
+ public class GnuDSAPrivateKey implements DSAPrivateKey
+ {
+   private byte[] encodedKey;
+   BigInteger x;
+   BigInteger p;
+   BigInteger q;
+   BigInteger g;
+ 
+   public GnuDSAPrivateKey(BigInteger x, BigInteger p, BigInteger q, BigInteger g )
+   {
+     this.x = x;
+     this.p = p;
+     this.q = q;
+     this.g = g;
+   }
+ 
+   public String getAlgorithm()
+   {
+     return "DSA";
+   }
+ 
+   public String getFormat()
+   {
+     return "PKCS#8";
+   }
+ 
+   /**
+    * Encodes this key as a <code>PrivateKeyInfo</code>, as described in
+    * PKCS #8. The ASN.1 specification for this structure is:
+    *
+    * <blockquote><pre>
+    * PrivateKeyInfo ::= SEQUENCE {
+    *   version Version,
+    *   privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
+    *   privateKey PrivateKey,
+    *   attributes [0] IMPLICIT Attributes OPTIONAL }
+    *
+    * Version ::= INTEGER
+    *
+    * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
+    *
+    * PrivateKey ::= OCTET STRING
+    *
+    * Attributes ::= SET OF Attribute
+    * </pre></blockquote>
+    *
+    * <p>DSA private keys (in Classpath at least) have no attributes.
+    */
+   public byte[] getEncoded()
+   {
+     if (encodedKey != null)
+       return (byte[]) encodedKey.clone();
+     try
+       {
+         ByteArrayOutputStream out = new ByteArrayOutputStream();
+         ArrayList pki = new ArrayList(3);
+         pki.add(new DERValue(DER.INTEGER, BigInteger.ZERO));
+         ArrayList algId = new ArrayList(2);
+         algId.add(new DERValue(DER.OBJECT_IDENTIFIER,
+                   new OID("1.2.840.10040.4.1")));
+         ArrayList algParams = new ArrayList(3);
+         algParams.add(new DERValue(DER.INTEGER, p));
+         algParams.add(new DERValue(DER.INTEGER, q));
+         algParams.add(new DERValue(DER.INTEGER, g));
+         algId.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, algParams));
+         pki.add(new DERValue(DER.OCTET_STRING, x.toByteArray()));
+         DERWriter.write(out, new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, pki));
+         return (byte[]) (encodedKey = out.toByteArray()).clone();
+       }
+     catch (IOException ioe)
+       {
+         return null;
+       }
+   }
+ 
+   public DSAParams getParams()
+   {
+     return (DSAParams)(new DSAParameterSpec(p,q,g));
+   }
+ 
+   public BigInteger getX()
+   {
+     return x;
+   }
+ 
+   public String toString()
+   {
+     return "GnuDSAPrivateKey: x="
+       + (x != null ? x.toString(16) : "null") + " p="
+       + (p != null ? p.toString(16) : "null") + " q="
+       + (q != null ? q.toString(16) : "null") + " g="
+       + (g != null ? g.toString(16) : "null");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuDSAPublicKey.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuDSAPublicKey.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuDSAPublicKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuDSAPublicKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /* GnuDSAPublicKey.java --- Gnu DSA Public Key
+    Copyright (C) 1999,2003,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.BitString;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.der.DERWriter;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.security.interfaces.DSAParams;
+ import java.security.interfaces.DSAPublicKey;
+ import java.security.spec.DSAParameterSpec;
+ import java.util.ArrayList;
+ 
+ public class GnuDSAPublicKey implements DSAPublicKey
+ {
+   private byte[] encodedKey;
+   BigInteger y;
+   BigInteger p;
+   BigInteger q;
+   BigInteger g;
+ 
+   public GnuDSAPublicKey(BigInteger y, BigInteger p, BigInteger q, BigInteger g )
+   {
+     this.y = y;
+     this.p = p;
+     this.q = q;
+     this.g = g;
+   }
+ 
+   public String getAlgorithm()
+   {
+     return "DSA";
+   }
+ 
+   public String getFormat()
+   {
+     return "X.509";
+   }
+ 
+   /**
+    * The encoded form of DSA public keys is:
+    *
+    * <blockquote><pre>
+    * SubjectPublicKeyInfo ::= SEQUENCE {
+    *   algorithm AlgorithmIdentifier,
+    *   subjectPublicKey BIT STRING }
+    * </pre></blockquote>
+    */
+   public byte[] getEncoded()
+   {
+     if (encodedKey != null)
+       return (byte[]) encodedKey.clone();
+     try
+       {
+         ByteArrayOutputStream out = new ByteArrayOutputStream();
+         ArrayList spki = new ArrayList(2);
+         ArrayList alg = new ArrayList(2);
+         alg.add(new DERValue(DER.OBJECT_IDENTIFIER,
+                 new OID("1.2.840.113549.1.1.1")));
+         ArrayList params = new ArrayList(3);
+         params.add(new DERValue(DER.INTEGER, p));
+         params.add(new DERValue(DER.INTEGER, q));
+         params.add(new DERValue(DER.INTEGER, g));
+         alg.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, params));
+         spki.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, alg));
+         spki.add(new DERValue(DER.BIT_STRING, new BitString(y.toByteArray())));
+         DERWriter.write(out, new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, spki));
+         return (byte[]) (encodedKey = out.toByteArray()).clone();
+       }
+     catch (IOException ioe)
+       {
+         return null;
+       }
+   }
+ 
+   public DSAParams getParams()
+   {
+     if (p == null || q == null || g == null)
+       return null;
+     return (DSAParams)(new DSAParameterSpec(p,q,g));
+   }
+ 
+   public BigInteger getY()
+   {
+     return y;
+   }
+ 
+   public String toString()
+   {
+     return
+       "GnuDSAPublicKey: y=" + (y != null ? y.toString(16) : "(null)") +
+       " p=" + (p != null ? p.toString(16) : "(null)") +
+       " q=" + (q != null ? q.toString(16) : "(null)") +
+       " g=" + (g != null ? g.toString(16) : "(null)");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuRSAPrivateKey.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuRSAPrivateKey.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuRSAPrivateKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuRSAPrivateKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,164 ----
+ /* GnuRSAPrivateKey.java -- GNU RSA private key.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.math.BigInteger;
+ import java.security.interfaces.RSAPrivateCrtKey;
+ import java.security.spec.RSAPrivateCrtKeySpec;
+ import java.util.ArrayList;
+ 
+ class GnuRSAPrivateKey implements RSAPrivateCrtKey
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private final RSAPrivateCrtKeySpec spec;
+   private byte[] encodedKey;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public GnuRSAPrivateKey(RSAPrivateCrtKeySpec spec)
+   {
+     this.spec = spec;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public BigInteger getModulus()
+   {
+     return spec.getModulus();
+   }
+ 
+   public BigInteger getPrivateExponent()
+   {
+     return spec.getPrivateExponent();
+   }
+ 
+   public BigInteger getCrtCoefficient()
+   {
+     return spec.getCrtCoefficient();
+   }
+ 
+   public BigInteger getPrimeExponentP()
+   {
+     return spec.getPrimeExponentP();
+   }
+ 
+   public BigInteger getPrimeExponentQ()
+   {
+     return spec.getPrimeExponentQ();
+   }
+ 
+   public BigInteger getPrimeP()
+   {
+     return spec.getPrimeP();
+   }
+ 
+   public BigInteger getPrimeQ()
+   {
+     return spec.getPrimeQ();
+   }
+ 
+   public BigInteger getPublicExponent()
+   {
+     return spec.getPublicExponent();
+   }
+ 
+   public String getAlgorithm()
+   {
+     return "RSA";
+   }
+ 
+   public String getFormat()
+   {
+     return "PKCS#8";
+   }
+ 
+   /**
+    * The encoded form is:
+    *
+    * <pre>
+    * RSAPrivateKey ::= SEQUENCE {
+    *   version Version,
+    *   modulus INTEGER, -- n
+    *   publicExponent INTEGER, -- e
+    *   privateExponent INTEGER, -- d
+    *   prime1 INTEGER, -- p
+    *   prime2 INTEGER, -- q
+    *   exponent1 INTEGER, -- d mod (p-1)
+    *   exponent2 INTEGER, -- d mod (q-1)
+    *   coefficient INTEGER -- (inverse of q) mod p }
+    * </pre>
+    *
+    * <p>Which is in turn encoded in a PrivateKeyInfo structure from PKCS#8.
+    */
+   public byte[] getEncoded()
+   {
+     if (encodedKey != null)
+       return (byte[]) encodedKey.clone();
+     ArrayList key = new ArrayList(9);
+     key.add(new DERValue(DER.INTEGER, BigInteger.ZERO));
+     key.add(new DERValue(DER.INTEGER, getModulus()));
+     key.add(new DERValue(DER.INTEGER, getPublicExponent()));
+     key.add(new DERValue(DER.INTEGER, getPrivateExponent()));
+     key.add(new DERValue(DER.INTEGER, getPrimeP()));
+     key.add(new DERValue(DER.INTEGER, getPrimeQ()));
+     key.add(new DERValue(DER.INTEGER, getPrimeExponentP()));
+     key.add(new DERValue(DER.INTEGER, getPrimeExponentQ()));
+     key.add(new DERValue(DER.INTEGER, getCrtCoefficient()));
+     DERValue pk = new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, key);
+     ArrayList pki = new ArrayList(3);
+     pki.add(new DERValue(DER.INTEGER, BigInteger.ZERO));
+     ArrayList alg = new ArrayList(2);
+     alg.add(new DERValue(DER.OBJECT_IDENTIFIER,
+                          new OID("1.2.840.113549.1.1.1")));
+     alg.add(new DERValue(DER.NULL, null));
+     pki.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, alg));
+     pki.add(new DERValue(DER.OCTET_STRING, pk.getEncoded()));
+     encodedKey = new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, pki).getEncoded();
+     return (byte[]) encodedKey.clone();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuRSAPublicKey.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuRSAPublicKey.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/GnuRSAPublicKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/GnuRSAPublicKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* GnuRSAPublicKey.java -- GNU RSA public key.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.BitString;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.math.BigInteger;
+ import java.security.interfaces.RSAPublicKey;
+ import java.security.spec.RSAPublicKeySpec;
+ import java.util.ArrayList;
+ 
+ class GnuRSAPublicKey implements RSAPublicKey
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private final RSAPublicKeySpec spec;
+   private byte[] encodedKey;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public GnuRSAPublicKey(RSAPublicKeySpec spec)
+   {
+     this.spec = spec;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public BigInteger getModulus()
+   {
+     return spec.getModulus();
+   }
+ 
+   public BigInteger getPublicExponent()
+   {
+     return spec.getPublicExponent();
+   }
+ 
+   public String getAlgorithm()
+   {
+     return "RSA";
+   }
+ 
+   public String getFormat()
+   {
+     return "X.509";
+   }
+ 
+   public byte[] getEncoded()
+   {
+     if (encodedKey != null)
+       return (byte[]) encodedKey.clone();
+     ArrayList key = new ArrayList(2);
+     key.add(new DERValue(DER.INTEGER, getModulus()));
+     key.add(new DERValue(DER.INTEGER, getPublicExponent()));
+     DERValue rsapk = new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, key);
+     ArrayList alg = new ArrayList(2);
+     alg.add(new DERValue(DER.OBJECT_IDENTIFIER,
+                          new OID("1.2.840.113549.1.1.1")));
+     alg.add(new DERValue(DER.NULL, null));
+     ArrayList spki = new ArrayList(2);
+     spki.add(new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, alg));
+     spki.add(new DERValue(DER.BIT_STRING, new BitString(rsapk.getEncoded())));
+     encodedKey = new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, spki).getEncoded();
+     return (byte[]) encodedKey.clone();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/MD2withRSA.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/MD2withRSA.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/MD2withRSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/MD2withRSA.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* MD2withRSA.java -- MD2 with RSA encryption signatures.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import java.security.MessageDigest;
+ import java.security.NoSuchAlgorithmException;
+ 
+ public class MD2withRSA extends RSA
+ {
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public MD2withRSA() throws NoSuchAlgorithmException
+   {
+     super(MessageDigest.getInstance("MD2"), DIGEST_ALGORITHM.getChild(2));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/MD4withRSA.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/MD4withRSA.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/MD4withRSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/MD4withRSA.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* MD4withRSA.java -- MD4 with RSA encryption signatures.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import java.security.MessageDigest;
+ import java.security.NoSuchAlgorithmException;
+ 
+ public class MD4withRSA extends RSA
+ {
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public MD4withRSA() throws NoSuchAlgorithmException
+   {
+     super(MessageDigest.getInstance("MD4"), DIGEST_ALGORITHM.getChild(4));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/MD5.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/MD5.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/MD5.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/MD5.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,338 ----
+ /* MD5.java -- Class implementing the MD5 algorithm as specified in RFC1321.
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ import java.security.MessageDigest;
+ 
+ /**
+    This class implements the MD5 algorithm as described in RFC1321.
+ 
+    @see java.security.MessageDigest
+ */
+ public class MD5 extends MessageDigest implements Cloneable
+ {
+   private final int W[] = new int[16];
+   private long bytecount;
+   private int A;
+   private int B;
+   private int C;
+   private int D;
+ 
+   public MD5()
+   {
+     super("MD5");
+     engineReset ();
+   }
+ 
+   public Object clone()
+   {
+     return new MD5 (this);
+   }
+ 
+   private MD5 (MD5 copy)
+   {
+     this ();
+     bytecount = copy.bytecount;
+     A = copy.A;
+     B = copy.B;
+     C = copy.C;
+     D = copy.D;
+     System.arraycopy (copy.W, 0, W, 0, 16);
+   }
+ 
+   public int engineGetDigestLength()
+   {
+     return 16;
+   }
+ 
+   // Intialize the A,B,C,D needed for the hash
+   public void engineReset()
+   {
+     bytecount = 0;
+     A = 0x67452301;
+     B = 0xefcdab89;
+     C = 0x98badcfe;
+     D = 0x10325476;
+     for(int i = 0; i < 16; i++)
+       W[i] = 0;
+   }
+ 
+   public void engineUpdate (byte b)
+   {
+     int i = (int)bytecount % 64;
+     int shift = (3 - i % 4) * 8;
+     int idx = i / 4;
+ 
+     // if you could index ints, this would be: W[idx][shift/8] = b
+     W[idx] = (W[idx] & ~(0xff << shift)) | ((b & 0xff) << shift);
+ 
+     // if we've filled up a block, then process it
+     if ((++ bytecount) % 64 == 0)
+       munch ();
+   }
+ 
+   public void engineUpdate (byte bytes[], int off, int len)
+   {
+     if (len < 0)
+       throw new ArrayIndexOutOfBoundsException ();
+ 
+     int end = off + len;
+     while (off < end)
+       engineUpdate (bytes[off++]);
+   }
+ 
+   public byte[] engineDigest()
+   {
+     long bitcount = bytecount * 8;
+     engineUpdate ((byte)0x80); // 10000000 in binary; the start of the padding
+ 
+     // add the rest of the padding to fill this block out, but leave 8
+     // bytes to put in the original bytecount
+     while ((int)bytecount % 64 != 56)
+       engineUpdate ((byte)0);
+ 
+     // add the length of the original, unpadded block to the end of
+     // the padding
+     W[14] = SWAP((int)(0xffffffff & bitcount));
+     W[15] = SWAP((int)(0xffffffff & (bitcount >>> 32)));
+     bytecount += 8;
+ 
+     // digest the fully padded block
+     munch ();
+ 
+     A = SWAP(A);
+     B = SWAP(B);
+     C = SWAP(C);
+     D = SWAP(D);
+     byte[] result = new byte[] {(byte)(A >>> 24), (byte)(A >>> 16),
+ 				(byte)(A >>> 8), (byte)A,
+ 				(byte)(B >>> 24), (byte)(B >>> 16),
+ 				(byte)(B >>> 8), (byte)B,
+ 				(byte)(C >>> 24), (byte)(C >>> 16),
+ 				(byte)(C >>> 8), (byte)C,
+ 				(byte)(D >>> 24), (byte)(D >>> 16),
+ 				(byte)(D >>> 8), (byte)D};
+     
+     engineReset ();
+     return result;
+   }
+ 
+   private int F( int X, int Y, int Z)
+   {
+     return ((X & Y) | (~X & Z));
+   }
+ 
+   private int G( int X, int Y, int Z)
+   {
+     return ((X & Z) | (Y & ~Z));
+   }
+ 
+   private int H( int X, int Y, int Z)
+   {
+     return (X ^ Y ^ Z);
+   }
+ 
+   private int I( int X, int Y, int Z)
+   {
+     return (Y ^ (X | ~Z));
+   }
+ 
+   private int rotateLeft( int i, int count)
+   {
+     //Taken from FIPS 180-1
+     return ( (i << count) | (i >>> (32 - count)) ) ;
+   }
+ 
+   /* Round 1. */
+   private int FF( int a, int b, int c, int d, int k, int s, int i)
+   {
+     /* Let [abcd k s i] denote the operation */
+     a += F(b,c,d) + k + i;
+     return b + rotateLeft(a, s); 
+   } 
+   /* Round 2. */
+   private int GG( int a, int b, int c, int d, int k, int s, int i)
+   {
+     /* Let [abcd k s i] denote the operation */
+     a += G(b,c,d) + k + i;
+     return b + rotateLeft(a, s);
+   } 
+   /* Round 3. */
+   private int HH( int a, int b, int c, int d, int k, int s, int i)
+   {
+     /* Let [abcd k s t] denote the operation */
+     a += H(b,c,d) + k + i;
+     return b + rotateLeft(a, s);
+   } 
+ 
+   /* Round 4. */
+   private int II( int a, int b, int c, int d, int k, int s, int i)
+   {
+     /* Let [abcd k s t] denote the operation */
+     a += I(b,c,d) + k + i;
+     return b + rotateLeft(a, s);
+   } 
+ 
+   private int SWAP(int n)
+   {
+     //Copied from md5.c in FSF Gnu Privacy Guard 0.9.2
+     return (( (0xff & n) << 24) | ((n & 0xff00) << 8) | ((n >>> 8) & 0xff00) | (n >>> 24));
+   }
+ 
+   private void munch()
+   {
+     int AA,BB,CC,DD, j;
+     int X[] = new int[16];
+ 
+     /* Copy block i into X. */
+     for(j = 0; j < 16; j++)
+       X[j] = SWAP(W[j]);
+ 
+     /* Save A as AA, B as BB, C as CC, and D as DD. */
+     AA = A;
+     BB = B;
+     CC = C;
+     DD = D;
+ 
+     /* The hex constants are from md5.c 
+        in FSF Gnu Privacy Guard 0.9.2 */
+     /* Round 1. */
+     /* Let [abcd k s i] denote the operation
+        a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
+     /* Do the following 16 operations. */
+     A = FF(A,B,C,D,  X[0],  7,  0xd76aa478);
+     D = FF(D,A,B,C,  X[1], 12,  0xe8c7b756);
+     C = FF(C,D,A,B,  X[2], 17,  0x242070db);
+     B = FF(B,C,D,A,  X[3], 22,  0xc1bdceee);
+ 
+     A = FF(A,B,C,D,  X[4],  7,  0xf57c0faf);
+     D = FF(D,A,B,C,  X[5], 12,  0x4787c62a);
+     C = FF(C,D,A,B,  X[6], 17,  0xa8304613);
+     B = FF(B,C,D,A,  X[7], 22,  0xfd469501);
+ 
+     A = FF(A,B,C,D,  X[8],  7,  0x698098d8);
+     D = FF(D,A,B,C,  X[9], 12,  0x8b44f7af);
+     C = FF(C,D,A,B, X[10], 17,  0xffff5bb1);
+     B = FF(B,C,D,A, X[11], 22,  0x895cd7be);
+ 
+     A = FF(A,B,C,D, X[12],  7,  0x6b901122);
+     D = FF(D,A,B,C, X[13], 12,  0xfd987193);
+     C = FF(C,D,A,B, X[14], 17,  0xa679438e);
+     B = FF(B,C,D,A, X[15], 22,  0x49b40821);
+ 
+     /* Round 2. */
+     /* Let [abcd k s i] denote the operation
+        a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
+     /* Do the following 16 operations. */
+     A = GG(A,B,C,D,  X[1],  5, 0xf61e2562);
+     D = GG(D,A,B,C,  X[6],  9, 0xc040b340);
+     C = GG(C,D,A,B, X[11], 14, 0x265e5a51);
+     B = GG(B,C,D,A,  X[0], 20, 0xe9b6c7aa);
+ 
+     A = GG(A,B,C,D,  X[5],  5, 0xd62f105d);
+     D = GG(D,A,B,C, X[10],  9, 0x02441453);
+     C = GG(C,D,A,B, X[15], 14, 0xd8a1e681);
+     B = GG(B,C,D,A,  X[4], 20, 0xe7d3fbc8);
+ 
+     A = GG(A,B,C,D,  X[9],  5, 0x21e1cde6);
+     D = GG(D,A,B,C, X[14],  9, 0xc33707d6);
+     C = GG(C,D,A,B,  X[3], 14, 0xf4d50d87);
+     B = GG(B,C,D,A,  X[8], 20, 0x455a14ed);
+ 
+     A = GG(A,B,C,D, X[13],  5, 0xa9e3e905);
+     D = GG(D,A,B,C,  X[2],  9, 0xfcefa3f8);
+     C = GG(C,D,A,B,  X[7], 14, 0x676f02d9);
+     B = GG(B,C,D,A, X[12], 20, 0x8d2a4c8a);
+ 
+     /* Round 3. */
+     /* Let [abcd k s t] denote the operation
+        a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
+     /* Do the following 16 operations. */
+     A = HH(A,B,C,D,  X[5],  4, 0xfffa3942);
+     D = HH(D,A,B,C,  X[8], 11, 0x8771f681);
+     C = HH(C,D,A,B, X[11], 16, 0x6d9d6122);
+     B = HH(B,C,D,A, X[14], 23, 0xfde5380c);
+ 
+     A = HH(A,B,C,D,  X[1],  4, 0xa4beea44);
+     D = HH(D,A,B,C,  X[4], 11, 0x4bdecfa9);
+     C = HH(C,D,A,B,  X[7], 16, 0xf6bb4b60);
+     B = HH(B,C,D,A, X[10], 23, 0xbebfbc70);
+ 
+     A = HH(A,B,C,D, X[13],  4, 0x289b7ec6);
+     D = HH(D,A,B,C,  X[0], 11, 0xeaa127fa);
+     C = HH(C,D,A,B,  X[3], 16, 0xd4ef3085);
+     B = HH(B,C,D,A,  X[6], 23, 0x04881d05);
+ 
+     A = HH(A,B,C,D,  X[9],  4, 0xd9d4d039);
+     D = HH(D,A,B,C, X[12], 11, 0xe6db99e5);
+     C = HH(C,D,A,B, X[15], 16, 0x1fa27cf8);
+     B = HH(B,C,D,A,  X[2], 23, 0xc4ac5665);
+ 
+     /* Round 4. */
+     /* Let [abcd k s t] denote the operation
+        a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
+     /* Do the following 16 operations. */
+     A = II(A,B,C,D,  X[0],  6, 0xf4292244);
+     D = II(D,A,B,C,  X[7], 10, 0x432aff97);
+     C = II(C,D,A,B, X[14], 15, 0xab9423a7);
+     B = II(B,C,D,A,  X[5], 21, 0xfc93a039);
+ 
+     A = II(A,B,C,D, X[12],  6, 0x655b59c3);
+     D = II(D,A,B,C,  X[3], 10, 0x8f0ccc92);
+     C = II(C,D,A,B, X[10], 15, 0xffeff47d);
+     B = II(B,C,D,A,  X[1], 21, 0x85845dd1);
+ 
+     A = II(A,B,C,D,  X[8],  6, 0x6fa87e4f);
+     D = II(D,A,B,C, X[15], 10, 0xfe2ce6e0);
+     C = II(C,D,A,B,  X[6], 15, 0xa3014314);
+     B = II(B,C,D,A, X[13], 21, 0x4e0811a1);
+ 
+     A = II(A,B,C,D,  X[4],  6, 0xf7537e82);
+     D = II(D,A,B,C, X[11], 10, 0xbd3af235);
+     C = II(C,D,A,B,  X[2], 15, 0x2ad7d2bb);
+     B = II(B,C,D,A,  X[9], 21, 0xeb86d391);
+ 
+     /* Then perform the following additions. (That is increment each
+        of the four registers by the value it had before this block
+        was started.) */
+     A = A + AA;
+     B = B + BB;
+     C = C + CC;
+     D = D + DD;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/MD5withRSA.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/MD5withRSA.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/MD5withRSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/MD5withRSA.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* MD5withRSA.java -- MD5 with RSA encryption signatures.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import java.security.MessageDigest;
+ import java.security.NoSuchAlgorithmException;
+ 
+ public class MD5withRSA extends RSA
+ {
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public MD5withRSA() throws NoSuchAlgorithmException
+   {
+     super(MessageDigest.getInstance("MD5"), DIGEST_ALGORITHM.getChild(5));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,701 ----
+ /* PKIXCertPathValidatorImpl.java -- PKIX certificate path validator.
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.x509.GnuPKIExtension;
+ import gnu.java.security.x509.PolicyNodeImpl;
+ import gnu.java.security.x509.X509CRLSelectorImpl;
+ import gnu.java.security.x509.X509CertSelectorImpl;
+ import gnu.java.security.x509.ext.BasicConstraints;
+ import gnu.java.security.x509.ext.CertificatePolicies;
+ import gnu.java.security.x509.ext.Extension;
+ import gnu.java.security.x509.ext.KeyUsage;
+ import gnu.java.security.x509.ext.PolicyConstraint;
+ 
+ import java.io.IOException;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.InvalidKeyException;
+ import java.security.PublicKey;
+ import java.security.cert.CRL;
+ import java.security.cert.CertPath;
+ import java.security.cert.CertPathParameters;
+ import java.security.cert.CertPathValidatorException;
+ import java.security.cert.CertPathValidatorResult;
+ import java.security.cert.CertPathValidatorSpi;
+ import java.security.cert.CertStore;
+ import java.security.cert.CertStoreException;
+ import java.security.cert.CertificateException;
+ import java.security.cert.PKIXCertPathChecker;
+ import java.security.cert.PKIXCertPathValidatorResult;
+ import java.security.cert.PKIXParameters;
+ import java.security.cert.TrustAnchor;
+ import java.security.cert.X509CRL;
+ import java.security.cert.X509Certificate;
+ import java.security.interfaces.DSAParams;
+ import java.security.interfaces.DSAPublicKey;
+ import java.util.Arrays;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Date;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Set;
+ 
+ /**
+  * An implementation of the Public Key Infrastructure's X.509
+  * certificate path validation algorithm.
+  *
+  * <p>See <a href="http://www.ietf.org/rfc/rfc3280.txt">RFC 3280:
+  * Internet X.509 Public Key Infrastructure Certificate and
+  * Certificate Revocation List (CRL) Profile</a>.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class PKIXCertPathValidatorImpl extends CertPathValidatorSpi
+ {
+ 
+   // Constants.
+   // -------------------------------------------------------------------------
+ 
+   private static final boolean DEBUG = false;
+   private static void debug (String msg)
+   {
+     System.err.print (">> PKIXCertPathValidatorImpl: ");
+     System.err.println (msg);
+   }
+ 
+   public static final String ANY_POLICY = "2.5.29.32.0";
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public PKIXCertPathValidatorImpl()
+   {
+     super();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public CertPathValidatorResult engineValidate(CertPath path,
+                                                 CertPathParameters params)
+     throws CertPathValidatorException, InvalidAlgorithmParameterException
+   {
+     if (!(params instanceof PKIXParameters))
+       throw new InvalidAlgorithmParameterException("not a PKIXParameters object");
+ 
+     // First check if the certificate path is valid.
+     //
+     // This means that:
+     //
+     //   (a)  for all x in {1, ..., n-1}, the subject of certificate x is
+     //        the issuer of certificate x+1;
+     //
+     //   (b)  for all x in {1, ..., n}, the certificate was valid at the
+     //        time in question.
+     //
+     // Because this is the X.509 algorithm, we also check if all
+     // cerificates are of type X509Certificate.
+ 
+     PolicyNodeImpl rootNode = new PolicyNodeImpl();
+     Set initPolicies = ((PKIXParameters) params).getInitialPolicies();
+     rootNode.setValidPolicy(ANY_POLICY);
+     rootNode.setCritical(false);
+     rootNode.setDepth(0);
+     if (initPolicies != null)
+       rootNode.addAllExpectedPolicies(initPolicies);
+     else
+       rootNode.addExpectedPolicy(ANY_POLICY);
+     List checks = ((PKIXParameters) params).getCertPathCheckers();
+     List l = path.getCertificates();
+     if (l == null || l.size() == 0)
+       throw new CertPathValidatorException();
+     X509Certificate[] p = null;
+     try
+       {
+         p = (X509Certificate[]) l.toArray(new X509Certificate[l.size()]);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new CertPathValidatorException("invalid certificate path");
+       }
+ 
+     String sigProvider = ((PKIXParameters) params).getSigProvider();
+     PublicKey prevKey = null;
+     Date now = ((PKIXParameters) params).getDate();
+     if (now == null)
+       now = new Date();
+     LinkedList policyConstraints = new LinkedList();
+     for (int i = p.length - 1; i >= 0; i--)
+       {
+         try
+           {
+             p[i].checkValidity(now);
+           }
+         catch (CertificateException ce)
+           {
+             throw new CertPathValidatorException(ce.toString());
+           }
+         Set uce = getCritExts(p[i]);
+         for (Iterator check = checks.iterator(); check.hasNext(); )
+           {
+             try
+               {
+                 ((PKIXCertPathChecker) check.next()).check(p[i], uce);
+               }
+             catch (Exception x)
+               {
+               }
+           }
+ 
+         PolicyConstraint constr = null;
+         if (p[i] instanceof GnuPKIExtension)
+           {
+             Extension pcx =
+               ((GnuPKIExtension) p[i]).getExtension (PolicyConstraint.ID);
+             if (pcx != null)
+               constr = (PolicyConstraint) pcx.getValue();
+           }
+         else
+           {
+             byte[] pcx = p[i].getExtensionValue (PolicyConstraint.ID.toString());
+             if (pcx != null)
+               {
+                 try
+                   {
+                     constr = new PolicyConstraint (pcx);
+                   }
+                 catch (Exception x)
+                   {
+                   }
+               }
+           }
+         if (constr != null && constr.getRequireExplicitPolicy() >= 0)
+           {
+             policyConstraints.add (new int[]
+               { p.length-i, constr.getRequireExplicitPolicy() });
+           }
+ 
+         updatePolicyTree(p[i], rootNode, p.length-i, (PKIXParameters) params,
+                          checkExplicitPolicy (p.length-i, policyConstraints));
+ 
+         // The rest of the tests involve this cert's relationship with the
+         // next in the path. If this cert is the end entity, we can stop.
+         if (i == 0)
+           break;
+ 
+         basicSanity(p, i);
+         PublicKey pubKey = null;
+         try
+           {
+             pubKey = p[i].getPublicKey();
+             if (pubKey instanceof DSAPublicKey)
+               {
+                 DSAParams dsa = ((DSAPublicKey) pubKey).getParams();
+                 // If the DSA public key is missing its parameters, use those
+                 // from the previous cert's key.
+                 if (dsa == null || dsa.getP() == null || dsa.getG() == null
+                       || dsa.getQ() == null)
+                   {
+                     if (prevKey == null)
+                       throw new InvalidKeyException("DSA keys not chainable");
+                     if (!(prevKey instanceof DSAPublicKey))
+                       throw new InvalidKeyException("DSA keys not chainable");
+                     dsa = ((DSAPublicKey) prevKey).getParams();
+                     pubKey = new GnuDSAPublicKey(((DSAPublicKey) pubKey).getY(),
+                       dsa.getP(), dsa.getQ(), dsa.getG());
+                   }
+               }
+             if (sigProvider == null)
+               p[i-1].verify(pubKey);
+             else
+               p[i-1].verify(pubKey, sigProvider);
+             prevKey = pubKey;
+           }
+         catch (Exception e)
+           {
+             throw new CertPathValidatorException(e.toString());
+           }
+         if (!p[i].getSubjectDN().equals(p[i-1].getIssuerDN()))
+           throw new CertPathValidatorException("issuer DN mismatch");
+         boolean[] issuerUid = p[i-1].getIssuerUniqueID();
+         boolean[] subjectUid = p[i].getSubjectUniqueID();
+         if (issuerUid != null && subjectUid != null)
+           if (!Arrays.equals(issuerUid, subjectUid))
+             throw new CertPathValidatorException("UID mismatch");
+ 
+         // Check the certificate against the revocation lists.
+         if (((PKIXParameters) params).isRevocationEnabled())
+           {
+             X509CRLSelectorImpl selector = new X509CRLSelectorImpl();
+             try
+               {
+                 selector.addIssuerName(p[i].getSubjectDN());
+               }
+             catch (IOException ioe)
+               {
+                 throw new CertPathValidatorException("error selecting CRLs");
+               }
+             List certStores = ((PKIXParameters) params).getCertStores();
+             List crls = new LinkedList();
+             for (Iterator it = certStores.iterator(); it.hasNext(); )
+               {
+                 CertStore cs = (CertStore) it.next();
+                 try
+                   {
+                     Collection c = cs.getCRLs(selector);
+                     crls.addAll(c);
+                   }
+                 catch (CertStoreException cse)
+                   {
+                   }
+               }
+             if (crls.isEmpty())
+               throw new CertPathValidatorException("no CRLs for issuer");
+             boolean certOk = false;
+             for (Iterator it = crls.iterator(); it.hasNext(); )
+               {
+                 CRL crl = (CRL) it.next();
+                 if (!(crl instanceof X509CRL))
+                   continue;
+                 X509CRL xcrl = (X509CRL) crl;
+                 if (!checkCRL(xcrl, p, now, p[i], pubKey, certStores))
+                   continue;
+                 if (xcrl.isRevoked(p[i-1]))
+                   throw new CertPathValidatorException("certificate is revoked");
+                 else
+                   certOk = true;
+               }
+             if (!certOk)
+               throw new CertPathValidatorException("certificate's validity could not be determined");
+           }
+       }
+     rootNode.setReadOnly();
+ 
+     // Now ensure that the first certificate in the chain was issued
+     // by a trust anchor.
+     Exception cause = null;
+     Set anchors = ((PKIXParameters) params).getTrustAnchors();
+     for (Iterator i = anchors.iterator(); i.hasNext(); )
+       {
+         TrustAnchor anchor = (TrustAnchor) i.next();
+         X509Certificate anchorCert = null;
+         PublicKey anchorKey = null;
+         if (anchor.getTrustedCert() != null)
+           {
+             anchorCert = anchor.getTrustedCert();
+             anchorKey = anchorCert.getPublicKey();
+           }
+         else
+           anchorKey = anchor.getCAPublicKey();
+         if (anchorKey == null)
+           continue;
+         try
+           {
+             if (anchorCert != null)
+               anchorCert.checkValidity(now);
+             p[p.length-1].verify(anchorKey);
+             if (anchorCert != null && anchorCert.getBasicConstraints() >= 0
+                 && anchorCert.getBasicConstraints() < p.length)
+               continue;
+ 
+             if (((PKIXParameters) params).isRevocationEnabled())
+               {
+                 X509CRLSelectorImpl selector = new X509CRLSelectorImpl();
+                 if (anchorCert != null)
+                   try
+                     {
+                       selector.addIssuerName(anchorCert.getSubjectDN());
+                     }
+                   catch (IOException ioe)
+                     {
+                     }
+                 else
+                   selector.addIssuerName(anchor.getCAName());
+                 List certStores = ((PKIXParameters) params).getCertStores();
+                 List crls = new LinkedList();
+                 for (Iterator it = certStores.iterator(); it.hasNext(); )
+                   {
+                     CertStore cs = (CertStore) it.next();
+                     try
+                       {
+                         Collection c = cs.getCRLs(selector);
+                         crls.addAll(c);
+                       }
+                     catch (CertStoreException cse)
+                       {
+                       }
+                   }
+                 if (crls.isEmpty())
+                   continue;
+                 for (Iterator it = crls.iterator(); it.hasNext(); )
+                   {
+                     CRL crl = (CRL) it.next();
+                     if (!(crl instanceof X509CRL))
+                       continue;
+                     X509CRL xcrl = (X509CRL) crl;
+                     try
+                       {
+                         xcrl.verify(anchorKey);
+                       }
+                     catch (Exception x)
+                       {
+                         continue;
+                       }
+                     Date nextUpdate = xcrl.getNextUpdate();
+                     if (nextUpdate != null && nextUpdate.compareTo(now) < 0)
+                       continue;
+                     if (xcrl.isRevoked(p[p.length-1]))
+                       throw new CertPathValidatorException("certificate is revoked");
+                   }
+               }
+ 
+             // The chain is valid; return the result.
+             return new PKIXCertPathValidatorResult(anchor, rootNode,
+                                                    p[0].getPublicKey());
+           }
+         catch (Exception ignored)
+           {
+             cause = ignored;
+             continue;
+           }
+       }
+ 
+     // The path is not valid.
+     CertPathValidatorException cpve =
+       new CertPathValidatorException("path validation failed");
+     if (cause != null)
+       cpve.initCause (cause);
+     throw cpve;
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Check if a given CRL is acceptable for checking the revocation status
+    * of certificates in the path being checked.
+    *
+    * <p>The CRL is accepted iff:</p>
+    *
+    * <ol>
+    * <li>The <i>nextUpdate</i> field (if present) is in the future.</li>
+    * <li>The CRL does not contain any unsupported critical extensions.</li>
+    * <li>The CRL is signed by one of the certificates in the path, or,</li>
+    * <li>The CRL is signed by the given public key and was issued by the
+    * public key's subject, or,</li>
+    * <li>The CRL is signed by a certificate in the given cert stores, and
+    * that cert is signed by one of the certificates in the path.</li>
+    * </ol>
+    *
+    * @param crl The CRL being checked.
+    * @param path The path this CRL is being checked against.
+    * @param now The value to use as 'now'.
+    * @param pubKeySubject The subject of the public key.
+    * @param pubKey The public key to check.
+    * @return True if the CRL is acceptable.
+    */
+   private static boolean checkCRL(X509CRL crl, X509Certificate[] path, Date now,
+                                   X509Certificate pubKeyCert, PublicKey pubKey,
+                                   List certStores)
+   {
+     Date nextUpdate = crl.getNextUpdate();
+     if (nextUpdate != null && nextUpdate.compareTo(now) < 0)
+       return false;
+     if (crl.hasUnsupportedCriticalExtension())
+       return false;
+     for (int i = 0; i < path.length; i++)
+       {
+         if (!path[i].getSubjectDN().equals(crl.getIssuerDN()))
+           continue;
+         boolean[] keyUsage = path[i].getKeyUsage();
+         if (keyUsage != null)
+           {
+             if (!keyUsage[KeyUsage.CRL_SIGN])
+               continue;
+           }
+         try
+           {
+             crl.verify(path[i].getPublicKey());
+             return true;
+           }
+         catch (Exception x)
+           {
+           }
+       }
+     if (crl.getIssuerDN().equals(pubKeyCert.getSubjectDN()))
+       {
+         try
+           {
+             boolean[] keyUsage = pubKeyCert.getKeyUsage();
+             if (keyUsage != null)
+               {
+                 if (!keyUsage[KeyUsage.CRL_SIGN])
+                   throw new Exception();
+               }
+             crl.verify(pubKey);
+             return true;
+           }
+         catch (Exception x)
+           {
+           }
+       }
+     try
+       {
+         X509CertSelectorImpl select = new X509CertSelectorImpl();
+         select.addSubjectName(crl.getIssuerDN());
+         List certs = new LinkedList();
+         for (Iterator it = certStores.iterator(); it.hasNext(); )
+           {
+             CertStore cs = (CertStore) it.next();
+             try
+               {
+                 certs.addAll(cs.getCertificates(select));
+               }
+             catch (CertStoreException cse)
+               {
+               }
+           }
+         for (Iterator it = certs.iterator(); it.hasNext(); )
+           {
+             X509Certificate c = (X509Certificate) it.next();
+             for (int i = 0; i < path.length; i++)
+               {
+                 if (!c.getIssuerDN().equals(path[i].getSubjectDN()))
+                   continue;
+                 boolean[] keyUsage = c.getKeyUsage();
+                 if (keyUsage != null)
+                   {
+                     if (!keyUsage[KeyUsage.CRL_SIGN])
+                       continue;
+                   }
+                 try
+                   {
+                     c.verify(path[i].getPublicKey());
+                     crl.verify(c.getPublicKey());
+                     return true;
+                   }
+                 catch (Exception x)
+                   {
+                   }
+               }
+             if (c.getIssuerDN().equals(pubKeyCert.getSubjectDN()))
+               {
+                 c.verify(pubKey);
+                 crl.verify(c.getPublicKey());
+               }
+           }
+       }
+     catch (Exception x)
+       {
+       }
+     return false;
+   }
+ 
+   private static Set getCritExts(X509Certificate cert)
+   {
+     HashSet s = new HashSet();
+     if (cert instanceof GnuPKIExtension)
+       {
+         Collection exts = ((GnuPKIExtension) cert).getExtensions();
+         for (Iterator it = exts.iterator(); it.hasNext(); )
+           {
+             Extension ext = (Extension) it.next();
+             if (ext.isCritical() && !ext.isSupported())
+               s.add(ext.getOid().toString());
+           }
+       }
+     else
+       s.addAll(cert.getCriticalExtensionOIDs());
+     return s;
+   }
+ 
+   /**
+    * Perform a basic sanity check on the CA certificate at <code>index</code>.
+    */
+   private static void basicSanity(X509Certificate[] path, int index)
+     throws CertPathValidatorException
+   {
+     X509Certificate cert = path[index];
+     int pathLen = 0;
+     for (int i = index - 1; i > 0; i--)
+       {
+         if (!path[i].getIssuerDN().equals(path[i].getSubjectDN()))
+           pathLen++;
+       }
+     Extension e = null;
+     if (cert instanceof GnuPKIExtension)
+       {
+         e = ((GnuPKIExtension) cert).getExtension(BasicConstraints.ID);
+       }
+     else
+       {
+         try
+           {
+             e = new Extension(cert.getExtensionValue(BasicConstraints.ID.toString()));
+           }
+         catch (Exception x)
+           {
+           }
+       }
+     if (e == null)
+       throw new CertPathValidatorException("no basicConstraints");
+     BasicConstraints bc = (BasicConstraints) e.getValue();
+     if (!bc.isCA())
+       throw new CertPathValidatorException("certificate cannot be used to verify signatures");
+     if (bc.getPathLengthConstraint() >= 0 && bc.getPathLengthConstraint() < pathLen)
+       throw new CertPathValidatorException("path is too long");
+ 
+     boolean[] keyUsage = cert.getKeyUsage();
+     if (keyUsage != null)
+       {
+         if (!keyUsage[KeyUsage.KEY_CERT_SIGN])
+           throw new CertPathValidatorException("certificate cannot be used to sign certificates");
+       }
+   }
+ 
+   private static void updatePolicyTree(X509Certificate cert, PolicyNodeImpl root,
+                                        int depth, PKIXParameters params,
+                                        boolean explicitPolicy)
+     throws CertPathValidatorException
+   {
+     if (DEBUG) debug("updatePolicyTree depth == " + depth);
+     Set nodes = new HashSet();
+     LinkedList stack = new LinkedList();
+     Iterator current = null;
+     stack.addLast(Collections.singleton(root).iterator());
+     do
+       {
+         current = (Iterator) stack.removeLast();
+         while (current.hasNext())
+           {
+             PolicyNodeImpl p = (PolicyNodeImpl) current.next();
+             if (DEBUG) debug("visiting node == " + p);
+             if (p.getDepth() == depth - 1)
+               {
+                 if (DEBUG) debug("added node");
+                 nodes.add(p);
+               }
+             else
+               {
+                 if (DEBUG) debug("skipped node");
+                 stack.addLast(current);
+                 current = p.getChildren();
+               }
+           }
+       }
+     while (!stack.isEmpty());
+ 
+     Extension e = null;
+     CertificatePolicies policies = null;
+     List qualifierInfos = null;
+     if (cert instanceof GnuPKIExtension)
+       {
+         e = ((GnuPKIExtension) cert).getExtension(CertificatePolicies.ID);
+         if (e != null)
+           policies = (CertificatePolicies) e.getValue();
+       }
+ 
+     List cp = null;
+     if (policies != null)
+       cp = policies.getPolicies();
+     else
+       cp = Collections.EMPTY_LIST;
+     boolean match = false;
+     if (DEBUG) debug("nodes are == " + nodes);
+     if (DEBUG) debug("cert policies are == " + cp);
+     for (Iterator it = nodes.iterator(); it.hasNext(); )
+       {
+         PolicyNodeImpl parent = (PolicyNodeImpl) it.next();
+         if (DEBUG) debug("adding policies to " + parent);
+         for (Iterator it2 = cp.iterator(); it2.hasNext(); )
+           {
+             OID policy = (OID) it2.next();
+             if (DEBUG) debug("trying to add policy == " + policy);
+             if (policy.toString().equals(ANY_POLICY) &&
+                 params.isAnyPolicyInhibited())
+               continue;
+             PolicyNodeImpl child = new PolicyNodeImpl();
+             child.setValidPolicy(policy.toString());
+             child.addExpectedPolicy(policy.toString());
+             if (parent.getExpectedPolicies().contains(policy.toString()))
+               {
+                 parent.addChild(child);
+                 match = true;
+               }
+             else if (parent.getExpectedPolicies().contains(ANY_POLICY))
+               {
+                 parent.addChild(child);
+                 match = true;
+               }
+             else if (ANY_POLICY.equals (policy.toString()))
+               {
+                 parent.addChild (child);
+                 match = true;
+               }
+             if (match && policies != null)
+               {
+                 List qualifiers = policies.getPolicyQualifierInfos (policy);
+                 if (qualifiers != null)
+                   child.addAllPolicyQualifiers (qualifiers);
+               }
+           }
+       }
+     if (!match && (params.isExplicitPolicyRequired() || explicitPolicy))
+       throw new CertPathValidatorException("policy tree building failed");
+   }
+ 
+   private boolean checkExplicitPolicy (int depth, List explicitPolicies)
+   {
+     if (DEBUG) debug ("checkExplicitPolicy depth=" + depth);
+     for (Iterator it = explicitPolicies.iterator(); it.hasNext(); )
+       {
+         int[] i = (int[]) it.next();
+         int caDepth = i[0];
+         int limit = i[1];
+         if (DEBUG) debug ("  caDepth=" + caDepth + " limit=" + limit);
+         if (depth - caDepth >= limit)
+           return true;
+       }
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/RSA.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/RSA.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/RSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/RSA.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,311 ----
+ /* RSA.java -- RSA PKCS#1 signatures.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.der.DERWriter;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.security.InvalidKeyException;
+ import java.security.MessageDigest;
+ import java.security.PrivateKey;
+ import java.security.PublicKey;
+ import java.security.SecureRandom;
+ import java.security.SignatureException;
+ import java.security.SignatureSpi;
+ import java.security.interfaces.RSAPrivateKey;
+ import java.security.interfaces.RSAPublicKey;
+ import java.util.ArrayList;
+ 
+ public abstract class RSA extends SignatureSpi implements Cloneable
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * digestAlgorithm OBJECT IDENTIFIER ::=
+    *   { iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) }
+    */
+   protected static final OID DIGEST_ALGORITHM = new OID("1.2.840.113549.2");
+ 
+   protected final OID digestAlgorithm;
+   protected final MessageDigest md;
+   protected RSAPrivateKey signerKey;
+   protected RSAPublicKey verifierKey;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   protected RSA(MessageDigest md, OID digestAlgorithm)
+   {
+     super();
+     this.md = md;
+     this.digestAlgorithm = digestAlgorithm;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public Object clone() throws CloneNotSupportedException
+   {
+     return super.clone();
+   }
+ 
+   protected Object engineGetParameter(String param)
+   {
+     throw new UnsupportedOperationException("deprecated");
+   }
+ 
+   protected void engineSetParameter(String param, Object value)
+   {
+     throw new UnsupportedOperationException("deprecated");
+   }
+ 
+   protected void engineInitSign(PrivateKey privateKey)
+     throws InvalidKeyException
+   {
+     if (!(privateKey instanceof RSAPrivateKey))
+       throw new InvalidKeyException();
+     verifierKey = null;
+     signerKey = (RSAPrivateKey) privateKey;
+   }
+ 
+   protected void engineInitSign(PrivateKey privateKey, SecureRandom random)
+     throws InvalidKeyException
+   {
+     // This class does not need random bytes.
+     engineInitSign(privateKey);
+   }
+ 
+   protected void engineInitVerify(PublicKey publicKey)
+     throws InvalidKeyException
+   {
+     if (!(publicKey instanceof RSAPublicKey))
+       throw new InvalidKeyException();
+     signerKey = null;
+     verifierKey = (RSAPublicKey) publicKey;
+   }
+ 
+   protected void engineUpdate(byte b) throws SignatureException
+   {
+     if (signerKey == null && verifierKey == null)
+       throw new SignatureException("not initialized");
+     md.update(b);
+   }
+ 
+   protected void engineUpdate(byte[] buf, int off, int len)
+     throws SignatureException
+   {
+     if (signerKey == null && verifierKey == null)
+       throw new SignatureException("not initialized");
+     md.update(buf, off, len);
+   }
+ 
+   protected byte[] engineSign() throws SignatureException
+   {
+     if (signerKey == null)
+       throw new SignatureException("not initialized for signing");
+     //
+     // The signature will be the RSA encrypted BER representation of
+     // the following:
+     //
+     //   DigestInfo ::= SEQUENCE {
+     //     digestAlgorithm  DigestAlgorithmIdentifier,
+     //     digest           Digest }
+     //
+     //   DigestAlgorithmIdentifier ::= AlgorithmIdentifier
+     //
+     //   Digest ::= OCTET STRING
+     //
+     ArrayList digestAlg = new ArrayList(2);
+     digestAlg.add(new DERValue(DER.OBJECT_IDENTIFIER, digestAlgorithm));
+     digestAlg.add(new DERValue(DER.NULL, null));
+     ArrayList digestInfo = new ArrayList(2);
+     digestInfo.add(new DERValue(DER.SEQUENCE, digestAlg));
+     digestInfo.add(new DERValue(DER.OCTET_STRING, md.digest()));
+     ByteArrayOutputStream out = new ByteArrayOutputStream();
+     try
+       {
+         DERWriter.write(out, new DERValue(DER.SEQUENCE, digestInfo));
+       }
+     catch (IOException ioe)
+       {
+         throw new SignatureException(ioe.toString());
+       }
+     byte[] buf = out.toByteArray();
+     md.reset();
+ 
+     // k = octect length of the modulus.
+     int k = signerKey.getModulus().bitLength();
+     k = (k >>> 3) + ((k & 7) == 0 ? 0 : 1);
+     if (buf.length < k - 3)
+       {
+         throw new SignatureException("RSA modulus too small");
+       }
+     byte[] d = new byte[k];
+ 
+     // Padding type 1:
+     //     00 | 01 | FF | ... | FF | 00 | D
+     d[1] = 0x01;
+     for (int i = 2; i < k - buf.length - 1; i++)
+       d[i] = (byte) 0xFF;
+     System.arraycopy(buf, 0, d, k - buf.length, buf.length);
+ 
+     BigInteger eb = new BigInteger(d);
+ 
+     byte[] ed = eb.modPow(signerKey.getPrivateExponent(),
+                           signerKey.getModulus()).toByteArray();
+ 
+     // Ensure output is k octets long.
+     if (ed.length < k)
+       {
+         byte[] b = new byte[k];
+         System.arraycopy(eb, 0, b, k - ed.length, ed.length);
+         ed = b;
+       }
+     else if (ed.length > k)
+       {
+         if (ed.length != k + 1)
+           {
+             throw new SignatureException("modPow result is larger than the modulus");
+           }
+         // Maybe an extra 00 octect.
+         byte[] b = new byte[k];
+         System.arraycopy(ed, 1, b, 0, k);
+         ed = b;
+       }
+ 
+     return ed;
+   }
+ 
+   protected int engineSign(byte[] out, int off, int len)
+     throws SignatureException
+   {
+     if (out == null || off < 0 || len < 0 || off+len > out.length)
+       throw new SignatureException("illegal output argument");
+     byte[] result = engineSign();
+     if (result.length > len)
+       throw new SignatureException("not enough space for signature");
+     System.arraycopy(result, 0, out, off, result.length);
+     return result.length;
+   }
+ 
+   protected boolean engineVerify(byte[] sig) throws SignatureException
+   {
+     if (verifierKey == null)
+       throw new SignatureException("not initialized for verifying");
+     if (sig == null)
+       throw new SignatureException("no signature specified");
+     int k = verifierKey.getModulus().bitLength();
+     k = (k >>> 3) + ((k & 7) == 0 ? 0 : 1);
+     if (sig.length != k)
+       throw new SignatureException("signature is the wrong size (expecting "
+                                    + k + " bytes, got " + sig.length + ")");
+     BigInteger ed = new BigInteger(1, sig);
+     byte[] eb = ed.modPow(verifierKey.getPublicExponent(),
+                           verifierKey.getModulus()).toByteArray();
+ 
+     int i = 0;
+     if (eb[0] == 0x00)
+       {
+         for (i = 1; i < eb.length && eb[i] == 0x00; i++);
+         if (i == 1)
+           throw new SignatureException("wrong RSA padding");
+         i--;
+       }
+     else if (eb[0] == 0x01)
+       {
+         for (i = 1; i < eb.length && eb[i] != 0x00; i++)
+           if (eb[i] != (byte) 0xFF)
+             throw new IllegalArgumentException("wrong RSA padding");
+       }
+     else
+       throw new SignatureException("wrong RSA padding type");
+ 
+     byte[] d = new byte[eb.length-i-1];
+     System.arraycopy(eb, i+1, d, 0, eb.length-i-1);
+ 
+     DERReader der = new DERReader(d);
+     try
+       {
+         DERValue val = der.read();
+         if (val.getTag() != DER.SEQUENCE)
+           throw new SignatureException("failed to parse DigestInfo");
+         val = der.read();
+         if (val.getTag() != DER.SEQUENCE)
+           throw new SignatureException("failed to parse DigestAlgorithmIdentifier");
+         boolean sequenceIsBer = val.getLength() == 0;
+         val = der.read();
+         if (val.getTag() != DER.OBJECT_IDENTIFIER)
+           throw new SignatureException("failed to parse object identifier");
+         if (!val.getValue().equals(digestAlgorithm))
+           throw new SignatureException("digest algorithms do not match");
+         val = der.read();
+         // We should never see parameters here, since they are never used.
+         if (val.getTag() != DER.NULL)
+           throw new SignatureException("cannot handle digest parameters");
+         if (sequenceIsBer)
+           der.skip(1); // end-of-sequence byte.
+         val = der.read();
+         if (val.getTag() != DER.OCTET_STRING)
+           throw new SignatureException("failed to parse Digest");
+         return MessageDigest.isEqual(md.digest(), (byte[]) val.getValue());
+       }
+     catch (IOException ioe)
+       {
+         throw new SignatureException(ioe.toString());
+       }
+   }
+ 
+   protected boolean engineVerify(byte[] sig, int off, int len)
+     throws SignatureException
+   {
+     if (sig == null || off < 0 || len < 0 || off+len > sig.length)
+       throw new SignatureException("illegal parameter");
+     byte[] buf = new byte[len];
+     System.arraycopy(sig, off, buf, 0, len);
+     return engineVerify(buf);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/RSAKeyFactory.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/RSAKeyFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/RSAKeyFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/RSAKeyFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,181 ----
+ /* RSAKeyFactory.java -- RSA key factory.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.KeyFactorySpi;
+ import java.security.PrivateKey;
+ import java.security.PublicKey;
+ 
+ import java.security.interfaces.RSAPrivateCrtKey;
+ import java.security.interfaces.RSAPrivateKey;
+ import java.security.interfaces.RSAPublicKey;
+ 
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.KeySpec;
+ import java.security.spec.PKCS8EncodedKeySpec;
+ import java.security.spec.RSAPrivateCrtKeySpec;
+ import java.security.spec.RSAPrivateKeySpec;
+ import java.security.spec.RSAPublicKeySpec;
+ import java.security.spec.X509EncodedKeySpec;
+ 
+ public class RSAKeyFactory extends KeyFactorySpi
+ {
+ 
+   // Default constructor.
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   protected PrivateKey engineGeneratePrivate(KeySpec spec)
+     throws InvalidKeySpecException
+   {
+     if (spec instanceof RSAPrivateCrtKeySpec)
+       {
+         return new GnuRSAPrivateKey((RSAPrivateCrtKeySpec) spec);
+       }
+     if (spec instanceof RSAPrivateKeySpec)
+       {
+         return new GnuRSAPrivateKey(new RSAPrivateCrtKeySpec(
+           ((RSAPrivateKeySpec) spec).getModulus(), null,
+           ((RSAPrivateKeySpec) spec).getPrivateExponent(), null,
+           null, null, null, null));
+       }
+     if (spec instanceof PKCS8EncodedKeySpec)
+       {
+         EncodedKeyFactory ekf = new EncodedKeyFactory();
+         PrivateKey pk = ekf.engineGeneratePrivate(spec);
+         if (pk instanceof RSAPrivateKey)
+           return pk;
+       }
+     throw new InvalidKeySpecException();
+   }
+ 
+   protected PublicKey engineGeneratePublic(KeySpec spec)
+     throws InvalidKeySpecException
+   {
+     if (spec instanceof RSAPublicKeySpec)
+       {
+         return new GnuRSAPublicKey((RSAPublicKeySpec) spec);
+       }
+     if (spec instanceof X509EncodedKeySpec)
+       {
+         EncodedKeyFactory ekf = new EncodedKeyFactory();
+         PublicKey pk = ekf.engineGeneratePublic(spec);
+         if (pk instanceof RSAPublicKey)
+           return pk;
+       }
+     throw new InvalidKeySpecException();
+   }
+ 
+   protected KeySpec engineGetKeySpec(Key key, Class keySpec)
+     throws InvalidKeySpecException
+   {
+     if (keySpec.isAssignableFrom(RSAPrivateCrtKeySpec.class)
+         && (key instanceof RSAPrivateCrtKey))
+       {
+         return new RSAPrivateCrtKeySpec(
+           ((RSAPrivateCrtKey) key).getModulus(),
+           ((RSAPrivateCrtKey) key).getPublicExponent(),
+           ((RSAPrivateCrtKey) key).getPrivateExponent(),
+           ((RSAPrivateCrtKey) key).getPrimeP(),
+           ((RSAPrivateCrtKey) key).getPrimeQ(),
+           ((RSAPrivateCrtKey) key).getPrimeExponentP(),
+           ((RSAPrivateCrtKey) key).getPrimeExponentQ(),
+           ((RSAPrivateCrtKey) key).getCrtCoefficient());
+       }
+     if (keySpec.isAssignableFrom(RSAPrivateKeySpec.class)
+         && (key instanceof RSAPrivateKey))
+       {
+         return new RSAPrivateKeySpec(
+           ((RSAPrivateCrtKey) key).getModulus(),
+           ((RSAPrivateCrtKey) key).getPrivateExponent());
+       }
+     if (keySpec.isAssignableFrom(RSAPublicKeySpec.class)
+         && (key instanceof RSAPublicKey))
+       {
+         return new RSAPublicKeySpec(
+           ((RSAPrivateCrtKey) key).getModulus(),
+           ((RSAPrivateCrtKey) key).getPublicExponent());
+       }
+     if (keySpec.isAssignableFrom(PKCS8EncodedKeySpec.class)
+         && key.getFormat().equalsIgnoreCase("PKCS#8"))
+       {
+         return new PKCS8EncodedKeySpec(key.getEncoded());
+       }
+     if (keySpec.isAssignableFrom(X509EncodedKeySpec.class)
+         && key.getFormat().equalsIgnoreCase("X.509"))
+       {
+         return new X509EncodedKeySpec(key.getEncoded());
+       }
+     throw new InvalidKeySpecException();
+   }
+ 
+   protected Key engineTranslateKey(Key key) throws InvalidKeyException
+   {
+     if (key instanceof RSAPrivateCrtKey)
+       {
+         return new GnuRSAPrivateKey(new RSAPrivateCrtKeySpec(
+           ((RSAPrivateCrtKey) key).getModulus(),
+           ((RSAPrivateCrtKey) key).getPublicExponent(),
+           ((RSAPrivateCrtKey) key).getPrivateExponent(),
+           ((RSAPrivateCrtKey) key).getPrimeP(),
+           ((RSAPrivateCrtKey) key).getPrimeQ(),
+           ((RSAPrivateCrtKey) key).getPrimeExponentP(),
+           ((RSAPrivateCrtKey) key).getPrimeExponentQ(),
+           ((RSAPrivateCrtKey) key).getCrtCoefficient()));
+       }
+     if (key instanceof RSAPrivateKey)
+       {
+         return new GnuRSAPrivateKey(new RSAPrivateCrtKeySpec(
+           ((RSAPrivateKey) key).getModulus(), null,
+           ((RSAPrivateKey) key).getPrivateExponent(), null,
+           null, null, null, null));
+       }
+     if (key instanceof RSAPublicKey)
+       {
+         return new GnuRSAPublicKey(new RSAPublicKeySpec(
+           ((RSAPrivateCrtKey) key).getModulus(),
+           ((RSAPrivateCrtKey) key).getPublicExponent()));
+       }
+     throw new InvalidKeyException();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/SHA.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/SHA.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/SHA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/SHA.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,242 ----
+ /* SHA.java -- Class implementing the SHA-1 algorithm as specified in [1].
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+   
+ package gnu.java.security.provider;
+ 
+ import java.security.MessageDigest;
+ 
+ /**
+    This class implements the SHA-1 algorithm as described in [1].
+ 
+    [1] Federal Information Processing Standards Publication 180-1.
+    Specifications for the Secure Hash Standard.  April 17, 1995.
+ 
+    @see java.security.MessageDigest
+ */
+ public class SHA extends MessageDigest implements Cloneable
+ {
+   public SHA ()
+   {
+     super("SHA");
+     engineReset ();
+   }
+ 
+   public int engineGetDigestLength()
+   {
+     return 20;
+   }
+ 
+   public void engineUpdate (byte b)
+   {
+     int i = ((int)bytecount) & 0x3f; //wgs
+     int shift = (3 - i % 4) << 3;
+     int idx = i / 4;
+ 
+     i = (int)b;
+     W[idx] = (W[idx] & ~(0xff << shift)) | ((i & 0xff) << shift);
+ 
+     // if we've filled up a block, then process it
+     if (((++bytecount) & 0x3f) == 0)
+       munch ();
+   }
+ 
+   // This could be optimized.
+   public void engineUpdate (byte bytes[], int off, int len)
+   {
+     if (len < 0)
+       throw new ArrayIndexOutOfBoundsException ();
+ 
+     int end = off + len;
+     while (off < end)
+       engineUpdate (bytes[off++]);
+   }
+ 
+   public void engineReset ()
+   {
+     bytecount = 0;
+     // magic numbers from [1] p. 10.
+     H0 = 0x67452301;
+     H1 = 0xefcdab89;
+     H2 = 0x98badcfe;
+     H3 = 0x10325476;
+     H4 = 0xc3d2e1f0;
+   }
+ 
+   public byte[] engineDigest ()
+   {
+     long bitcount = bytecount << 3;
+     engineUpdate ((byte)0x80); // 10000000 in binary; the start of the padding
+ 
+     // add the rest of the padding to fill this block out, but leave 8
+     // bytes to put in the original bytecount
+     while ((bytecount & 0x3f) != 56)
+       engineUpdate ((byte)0);
+ 
+     // add the length of the original, unpadded block to the end of
+     // the padding
+     W[14] = (int)(bitcount >>> 32);
+     W[15] = (int)bitcount;
+     bytecount += 8;
+ 
+     // digest the fully padded block
+     munch ();
+ 
+     byte[] result
+       = new byte[] {(byte)(H0 >>> 24), (byte)(H0 >>> 16),
+ 		    (byte)(H0 >>> 8), (byte)H0,
+ 		    (byte)(H1 >>> 24), (byte)(H1 >>> 16),
+ 		    (byte)(H1 >>> 8), (byte)H1,
+ 		    (byte)(H2 >>> 24), (byte)(H2 >>> 16),
+ 		    (byte)(H2 >>> 8), (byte)H2,
+ 		    (byte)(H3 >>> 24), (byte)(H3 >>> 16),
+ 		    (byte)(H3 >>> 8), (byte)H3,
+ 		    (byte)(H4 >>> 24), (byte)(H4 >>> 16),
+ 		    (byte)(H4 >>> 8), (byte)H4};
+     
+     engineReset ();
+     return result;
+   }
+ 
+   // Process a single block.  This is pretty much copied verbatim from
+   // [1] pp. 9, 10.
+   private void munch ()
+   {
+     for (int t = 16; t < 80; ++ t)
+       {
+ 	int Wt = W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16];
+ 	W[t] = Wt << 1 | Wt >>> 31;
+       }
+ 
+     int A = H0;
+     int B = H1;
+     int C = H2;
+     int D = H3;
+     int E = H4;
+ 
+     for (int t = 0; t < 20; ++ t)
+       {
+ 	int TEMP = (A << 5 | A >>> 27) // S^5(A)
+ 	  + ((B & C) | (~B & D))       // f_t(B,C,D)
+ 	  + E + W[t]
+ 	  + 0x5a827999;                // K_t
+ 
+ 	E = D;
+ 	D = C;
+ 	C = B << 30 | B >>> 2;         // S^30(B)
+ 	B = A;
+ 	A = TEMP;
+       }
+ 
+     for (int t = 20; t < 40; ++ t)
+       {
+ 	int TEMP = (A << 5 | A >>> 27) // S^5(A)
+ 	  + (B ^ C ^ D)                // f_t(B,C,D)
+ 	  + E + W[t]                   
+ 	  + 0x6ed9eba1;                // K_t
+ 
+ 	E = D;
+ 	D = C;
+ 	C = B << 30 | B >>> 2;         // S^30(B)
+ 	B = A;
+ 	A = TEMP;
+       }
+ 
+     for (int t = 40; t < 60; ++ t)
+       {
+ 	int TEMP = (A << 5 | A >>> 27) // S^5(A)
+ 	  + (B & C | B & D | C & D)    // f_t(B,C,D)
+ 	  + E + W[t]
+ 	  + 0x8f1bbcdc;                // K_t
+ 
+ 	E = D;
+ 	D = C;
+ 	C = B << 30 | B >>> 2;         // S^30(B)
+ 	B = A;
+ 	A = TEMP;
+       }
+ 
+     for (int t = 60; t < 80; ++ t)
+       {
+ 	int TEMP = (A << 5 | A >>> 27) // S^5(A)
+ 	  + (B ^ C ^ D)                // f_t(B,C,D)
+ 	  + E + W[t]
+ 	  + 0xca62c1d6;                // K_t
+ 
+ 	E = D;
+ 	D = C;
+ 	C = B << 30 | B >>> 2;         // S^30(B)
+ 	B = A;
+ 	A = TEMP;
+       }
+ 
+     H0 += A;
+     H1 += B;
+     H2 += C;
+     H3 += D;
+     H4 += E;
+ 
+     // Reset W by clearing it.
+     for (int t = 0; t < 80; ++ t)
+       W[t] = 0;
+   }
+   
+   public Object clone ()
+   {
+     return new SHA (this);
+   }
+ 
+   private SHA (SHA copy)
+   {
+     this ();
+     bytecount = copy.bytecount;
+     H0 = copy.H0;
+     H1 = copy.H1;
+     H2 = copy.H2;
+     H3 = copy.H3;
+     H4 = copy.H4;
+     System.arraycopy (copy.W, 0, W, 0, 80);
+   }
+   
+   private final int W[] = new int[80];
+   private long bytecount;
+   private int H0;
+   private int H1;
+   private int H2;
+   private int H3;
+   private int H4;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/SHA1PRNG.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/SHA1PRNG.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/SHA1PRNG.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/SHA1PRNG.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /* SHA1PRNG.java --- Secure Random SPI SHA1PRNG
+    Copyright (C) 1999, 2001, 2003, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import java.io.Serializable;
+ import java.security.MessageDigest;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.SecureRandomSpi;
+ import java.util.Random;
+ 
+ public class SHA1PRNG extends SecureRandomSpi implements Serializable
+ {
+   MessageDigest digest;
+   byte seed[];
+   byte data[];
+   int seedpos;
+   int datapos;
+   private boolean seeded = false; // set to true when we seed this
+   /**
+    * The size of seed.
+    */
+   private static final int SEED_SIZE = 20;
+   /**
+    * The size of data.
+    */
+   private static final int DATA_SIZE = 40;
+ 
+   /**
+    * Create a new SHA-1 pseudo-random number generator.
+    */
+   public SHA1PRNG()
+   {
+     try {
+       digest = MessageDigest.getInstance("SHA");
+     } catch ( NoSuchAlgorithmException nsae) {
+ //      System.out.println("Failed to find SHA Message Digest: " + nsae);
+ //      nsae.printStackTrace();
+       throw new InternalError ("no SHA implementation found");
+     }
+ 
+     seed = new byte[SEED_SIZE];
+     seedpos = 0;
+     data = new byte[DATA_SIZE];
+     datapos = SEED_SIZE;  // try to force hashing a first block
+   }
+ 
+   public void engineSetSeed(byte[] seed)
+   {
+     for(int i = 0; i < seed.length; i++)
+       this.seed[seedpos++ % SEED_SIZE] ^= seed[i];
+     seedpos %= SEED_SIZE;
+ 
+   }
+ 
+   public void engineNextBytes(byte[] bytes)
+   {
+     ensureIsSeeded ();
+     int loc = 0;
+     while (loc < bytes.length)
+       {
+ 	int copy = Math.min (bytes.length - loc, SEED_SIZE - datapos);
+ 
+ 	if (copy > 0)
+ 	  {
+ 	    System.arraycopy (data, datapos, bytes, loc, copy);
+ 	    datapos += copy;
+ 	    loc += copy;
+ 	  }
+ 	else
+ 	  {
+ 	    // No data ready for copying, so refill our buffer.
+ 	    System.arraycopy( seed, 0, data, SEED_SIZE, SEED_SIZE);
+ 	    byte[] digestdata = digest.digest( data );
+ 	    System.arraycopy( digestdata, 0, data, 0, SEED_SIZE);
+ 	    datapos = 0;
+ 	  }
+       }
+   }
+ 
+   public byte[] engineGenerateSeed(int numBytes)
+   {
+     byte tmp[] = new byte[numBytes];
+ 	
+     engineNextBytes( tmp );
+     return tmp;
+   }
+ 
+   private void ensureIsSeeded()
+   {
+     if (!seeded)
+       {
+         new Random(0L).nextBytes(seed);
+ 
+         byte[] digestdata = digest.digest(data);
+         System.arraycopy(digestdata, 0, data, 0, SEED_SIZE);
+ 
+         seeded = true;
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/SHA1withRSA.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/SHA1withRSA.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/SHA1withRSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/SHA1withRSA.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* SHA1withRSA.java -- SHA-1 with RSA encryption signatures.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.security.OID;
+ 
+ import java.security.MessageDigest;
+ import java.security.NoSuchAlgorithmException;
+ 
+ public class SHA1withRSA extends RSA
+ {
+ 
+   // Constant.
+   // -------------------------------------------------------------------------
+ 
+   private static final OID SHA1 = new OID("1.3.14.3.2.26");
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public SHA1withRSA() throws NoSuchAlgorithmException
+   {
+     super(MessageDigest.getInstance("SHA-160"), SHA1);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/X509CertificateFactory.java gcc-4.1.0/libjava/classpath/gnu/java/security/provider/X509CertificateFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/X509CertificateFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/X509CertificateFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,305 ----
+ /* X509CertificateFactory.java -- generates X.509 certificates.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.provider;
+ 
+ import gnu.java.io.Base64InputStream;
+ import gnu.java.security.x509.X509CRL;
+ import gnu.java.security.x509.X509CertPath;
+ import gnu.java.security.x509.X509Certificate;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.EOFException;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.security.cert.CRL;
+ import java.security.cert.CRLException;
+ import java.security.cert.CertPath;
+ import java.security.cert.Certificate;
+ import java.security.cert.CertificateEncodingException;
+ import java.security.cert.CertificateException;
+ import java.security.cert.CertificateFactorySpi;
+ import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ 
+ public class X509CertificateFactory extends CertificateFactorySpi
+ {
+ 
+   // Constants.
+   // ------------------------------------------------------------------------
+ 
+   public static final String BEGIN_CERTIFICATE = "-----BEGIN CERTIFICATE-----";
+   public static final String END_CERTIFICATE = "-----END CERTIFICATE-----";
+   public static final String BEGIN_X509_CRL = "-----BEGIN X509 CRL-----";
+   public static final String END_X509_CRL = "-----END X509 CRL-----";
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   public X509CertificateFactory()
+   {
+     super();
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   public Certificate engineGenerateCertificate(InputStream inStream)
+     throws CertificateException
+   {
+     try
+       {
+         return generateCert(inStream);
+       }
+     catch (IOException ioe)
+       {
+         CertificateException ce = new CertificateException(ioe.getMessage());
+         ce.initCause (ioe);
+         throw ce;
+       }
+   }
+ 
+   public Collection engineGenerateCertificates(InputStream inStream)
+     throws CertificateException
+   {
+     LinkedList certs = new LinkedList();
+     while (true)
+       {
+         try
+           {
+             certs.add(generateCert(inStream));
+           }
+         catch (EOFException eof)
+           {
+             break;
+           }
+         catch (IOException ioe)
+           {
+             CertificateException ce = new CertificateException(ioe.getMessage());
+             ce.initCause (ioe);
+             throw ce;
+           }
+       }
+     return certs;
+   }
+ 
+   public CRL engineGenerateCRL(InputStream inStream) throws CRLException
+   {
+     try
+       {
+         return generateCRL(inStream);
+       }
+     catch (IOException ioe)
+       {
+         CRLException crle = new CRLException(ioe.getMessage());
+         crle.initCause (ioe);
+         throw crle;
+       }
+   }
+ 
+   public Collection engineGenerateCRLs(InputStream inStream)
+     throws CRLException
+   {
+     LinkedList crls = new LinkedList();
+     while (true)
+       {
+         try
+           {
+             crls.add(generateCRL(inStream));
+           }
+         catch (EOFException eof)
+           {
+             break;
+           }
+         catch (IOException ioe)
+           {
+             CRLException crle = new CRLException(ioe.getMessage());
+             crle.initCause (ioe);
+             throw crle;
+           }
+       }
+     return crls;
+   }
+ 
+   public CertPath engineGenerateCertPath(List certs)
+   {
+     return new X509CertPath(certs);
+   }
+ 
+   public CertPath engineGenerateCertPath(InputStream in)
+     throws CertificateEncodingException
+   {
+     return new X509CertPath(in);
+   }
+ 
+   public CertPath engineGenerateCertPath(InputStream in, String encoding)
+     throws CertificateEncodingException
+   {
+     return new X509CertPath(in, encoding);
+   }
+ 
+   public Iterator engineGetCertPathEncodings()
+   {
+     return X509CertPath.ENCODINGS.iterator();
+   }
+ 
+   // Own methods.
+   // ------------------------------------------------------------------------
+ 
+   private X509Certificate generateCert(InputStream inStream)
+     throws IOException, CertificateException
+   {
+     if (inStream == null)
+       throw new CertificateException("missing input stream");
+     if (!inStream.markSupported())
+       inStream = new BufferedInputStream(inStream, 8192);
+     inStream.mark(20);
+     int i = inStream.read();
+     if (i == -1)
+       throw new EOFException();
+ 
+     // If the input is in binary DER format, the first byte MUST be
+     // 0x30, which stands for the ASN.1 [UNIVERSAL 16], which is the
+     // UNIVERSAL SEQUENCE, with the CONSTRUCTED bit (0x20) set.
+     //
+     // So if we do not see 0x30 here we will assume it is in Base-64.
+     if (i != 0x30)
+       {
+         inStream.reset();
+         StringBuffer line = new StringBuffer(80);
+         do
+           {
+             line.setLength(0);
+             do
+               {
+                 i = inStream.read();
+                 if (i == -1)
+                   throw new EOFException();
+                 if (i != '\n' && i != '\r')
+                   line.append((char) i);
+               }
+             while (i != '\n' && i != '\r');
+           }
+         while (!line.toString().equals(BEGIN_CERTIFICATE));
+         X509Certificate ret = new X509Certificate(
+            new BufferedInputStream(new Base64InputStream(inStream), 8192));
+         line.setLength(0);
+         line.append('-'); // Base64InputStream will eat this.
+         do
+           {
+             i = inStream.read();
+             if (i == -1)
+               throw new EOFException();
+             if (i != '\n' && i != '\r')
+               line.append((char) i);
+           }
+         while (i != '\n' && i != '\r');
+         // XXX ???
+         if (!line.toString().equals(END_CERTIFICATE))
+           throw new CertificateException("no end-of-certificate marker");
+         return ret;
+       }
+     else
+       {
+         inStream.reset();
+         return new X509Certificate(inStream);
+       }
+   }
+ 
+   private X509CRL generateCRL(InputStream inStream)
+     throws IOException, CRLException
+   {
+     if (inStream == null)
+       throw new CRLException("missing input stream");
+     if (!inStream.markSupported())
+       inStream = new BufferedInputStream(inStream, 8192);
+     inStream.mark(20);
+     int i = inStream.read();
+     if (i == -1)
+       throw new EOFException();
+ 
+     // If the input is in binary DER format, the first byte MUST be
+     // 0x30, which stands for the ASN.1 [UNIVERSAL 16], which is the
+     // UNIVERSAL SEQUENCE, with the CONSTRUCTED bit (0x20) set.
+     //
+     // So if we do not see 0x30 here we will assume it is in Base-64.
+     if (i != 0x30)
+       {
+         inStream.reset();
+         StringBuffer line = new StringBuffer(80);
+         do
+           {
+             line.setLength(0);
+             do
+               {
+                 i = inStream.read();
+                 if (i == -1)
+                   throw new EOFException();
+                 if (i != '\n' && i != '\r')
+                   line.append((char) i);
+               }
+             while (i != '\n' && i != '\r');
+           }
+         while (!line.toString().startsWith(BEGIN_X509_CRL));
+         X509CRL ret = new X509CRL(
+            new BufferedInputStream(new Base64InputStream(inStream), 8192));
+         line.setLength(0);
+         line.append('-'); // Base64InputStream will eat this.
+         do
+           {
+             i = inStream.read();
+             if (i == -1)
+               throw new EOFException();
+             if (i != '\n' && i != '\r')
+               line.append((char) i);
+           }
+         while (i != '\n' && i != '\r');
+         // XXX ???
+         if (!line.toString().startsWith(END_X509_CRL))
+           throw new CRLException("no end-of-CRL marker");
+         return ret;
+       }
+     else
+       {
+         inStream.reset();
+         return new X509CRL(inStream);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/provider/package.html gcc-4.1.0/libjava/classpath/gnu/java/security/provider/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/security/provider/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/provider/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.security.provider package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.security.provider</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/util/Prime.java gcc-4.1.0/libjava/classpath/gnu/java/security/util/Prime.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/util/Prime.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/util/Prime.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,164 ----
+ /* Prime.java --- Prime number generation utilities
+    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.util;
+ import java.math.BigInteger;
+ import java.util.Random;
+ //import java.security.SecureRandom;
+ 
+ public final class Prime
+ {
+ 
+   /*
+     See IEEE P1363 A.15.4 (10/05/98 Draft)
+   */
+   public static BigInteger generateRandomPrime( int pmin, int pmax, BigInteger f )
+   {
+     BigInteger d;
+ 
+     //Step 1 - generate prime
+     BigInteger p = new BigInteger( (pmax + pmin)/2, new Random() );
+     if( p.compareTo( BigInteger.valueOf( 1 ).shiftLeft( pmin ) ) <= 0 )
+       {
+ 	p = p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin ).subtract( p ) );
+       }
+ 	
+     //Step 2 - test for even
+     if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)
+       p = p.add( BigInteger.valueOf( 1 ) );
+ 
+     for(;;)
+       {
+ 	//Step 3
+ 	if( p.compareTo( BigInteger.valueOf( 1 ).shiftLeft( pmax)) > 0)
+ 	  {
+ 	    //Step 3.1
+ 	    p = p.subtract( BigInteger.valueOf( 1 ).shiftLeft( pmax) );
+ 	    p = p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin) );
+ 	    p = p.subtract( BigInteger.valueOf( 1 ) );
+ 
+ 	    //Step 3.2
+ 	    // put step 2 code here so looping code is cleaner
+ 	    //Step 2 - test for even
+ 	    if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)
+ 	      p = p.add( BigInteger.valueOf( 1 ) );
+ 	    continue;
+ 	  }
+ 	
+ 	//Step 4 - compute GCD
+ 	d = p.subtract( BigInteger.valueOf(1) );
+ 	d = d.gcd( f );
+ 
+ 	//Step 5 - test d
+ 	if( d.compareTo( BigInteger.valueOf( 1 ) ) == 0)
+ 	  {
+ 	    //Step 5.1 - test primality
+ 	    if( p.isProbablePrime( 1 ) == true )
+ 	      {
+ 				//Step 5.2;
+ 		return p;
+ 	      }
+ 	  }
+ 	//Step 6
+ 	p = p.add( BigInteger.valueOf( 2 ) );
+ 
+ 	//Step 7
+       }
+   }
+ 
+ 
+   /*
+     See IEEE P1363 A.15.5 (10/05/98 Draft)
+   */
+   public static BigInteger generateRandomPrime( BigInteger r, BigInteger a, int pmin, int pmax, BigInteger f )
+   {
+     BigInteger d, w;
+ 
+     //Step 1 - generate prime
+     BigInteger p = new BigInteger( (pmax + pmin)/2, new Random() );
+ 
+   steptwo:{ //Step 2
+       w = p.mod( r.multiply( BigInteger.valueOf(2) ));
+ 
+       //Step 3
+       p = p.add( r.multiply( BigInteger.valueOf(2) ) );
+       p = p.subtract( w );
+       p = p.add(a);
+ 
+       //Step 4 - test for even
+       if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)
+ 	p = p.add( r );
+ 
+       for(;;)
+ 	{
+ 	  //Step 5
+ 	  if( p.compareTo( BigInteger.valueOf( 1 ).shiftLeft( pmax)) > 0)
+ 	    {
+ 	      //Step 5.1
+ 	      p = p.subtract( BigInteger.valueOf( 1 ).shiftLeft( pmax) );
+ 	      p = p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin) );
+ 	      p = p.subtract( BigInteger.valueOf( 1 ) );
+ 
+ 	      //Step 5.2 - goto to Step 2
+ 	      break steptwo;
+ 	    }
+ 
+ 	  //Step 6
+ 	  d = p.subtract( BigInteger.valueOf(1) );
+ 	  d = d.gcd( f );
+ 
+ 	  //Step 7 - test d
+ 	  if( d.compareTo( BigInteger.valueOf( 1 ) ) == 0)
+ 	    {
+ 	      //Step 7.1 - test primality
+ 	      if( p.isProbablePrime( 1 ) == true )
+ 		{
+ 				//Step 7.2;
+ 		  return p;
+ 		}
+ 	    }
+ 	  //Step 8
+ 	  p = p.add( r.multiply( BigInteger.valueOf(2) ) );
+ 
+ 	  //Step 9
+ 	}
+     }
+     //Should never reach here but makes the compiler happy
+     return BigInteger.valueOf(0);	
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/util/package.html gcc-4.1.0/libjava/classpath/gnu/java/security/util/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/security/util/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/util/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.security.util package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.security.util</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/GnuPKIExtension.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/GnuPKIExtension.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/GnuPKIExtension.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/GnuPKIExtension.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* GnuPKIExtension.java -- interface for GNU PKI extensions.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.x509.ext.Extension;
+ 
+ import java.security.cert.X509Extension;
+ import java.util.Collection;
+ 
+ public interface GnuPKIExtension extends X509Extension
+ {
+ 
+   /**
+    * Returns the extension object for the given object identifier.
+    *
+    * @param oid The OID of the extension to get.
+    * @return The extension, or null if there is no such extension.
+    */
+   Extension getExtension(OID oid);
+ 
+   Collection getExtensions();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/PolicyNodeImpl.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/PolicyNodeImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/PolicyNodeImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/PolicyNodeImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,214 ----
+ /* PolicyNodeImpl.java -- An implementation of a policy tree node.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ import java.security.cert.PolicyNode;
+ import java.security.cert.PolicyQualifierInfo;
+ 
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Set;
+ 
+ public final class PolicyNodeImpl implements PolicyNode
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private String policy;
+   private final Set expectedPolicies;
+   private final Set qualifiers;
+   private final Set children;
+   private PolicyNodeImpl parent;
+   private int depth;
+   private boolean critical;
+   private boolean readOnly;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public PolicyNodeImpl()
+   {
+     expectedPolicies = new HashSet();
+     qualifiers = new HashSet();
+     children = new HashSet();
+     readOnly = false;
+     critical = false;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public void addChild(PolicyNodeImpl node)
+   {
+     if (readOnly)
+       throw new IllegalStateException("read only");
+     if (node.getParent() != null)
+       throw new IllegalStateException("already a child node");
+     node.parent = this;
+     node.setDepth(depth + 1);
+     children.add(node);
+   }
+ 
+   public Iterator getChildren()
+   {
+     return Collections.unmodifiableSet(children).iterator();
+   }
+ 
+   public int getDepth()
+   {
+     return depth;
+   }
+ 
+   public void setDepth(int depth)
+   {
+     if (readOnly)
+       throw new IllegalStateException("read only");
+     this.depth = depth;
+   }
+ 
+   public void addAllExpectedPolicies(Set policies)
+   {
+     if (readOnly)
+       throw new IllegalStateException("read only");
+     expectedPolicies.addAll(policies);
+   }
+ 
+   public void addExpectedPolicy(String policy)
+   {
+     if (readOnly)
+       throw new IllegalStateException("read only");
+     expectedPolicies.add(policy);
+   }
+ 
+   public Set getExpectedPolicies()
+   {
+     return Collections.unmodifiableSet(expectedPolicies);
+   }
+ 
+   public PolicyNode getParent()
+   {
+     return parent;
+   }
+ 
+   public void addAllPolicyQualifiers (Collection qualifiers)
+   {
+     for (Iterator it = qualifiers.iterator(); it.hasNext(); )
+       {
+         if (!(it.next() instanceof PolicyQualifierInfo))
+           throw new IllegalArgumentException ("can only add PolicyQualifierInfos");
+       }
+     qualifiers.addAll (qualifiers);
+   }
+ 
+   public void addPolicyQualifier (PolicyQualifierInfo qualifier)
+   {
+     if (readOnly)
+       throw new IllegalStateException("read only");
+     qualifiers.add(qualifier);
+   }
+ 
+   public Set getPolicyQualifiers()
+   {
+     return Collections.unmodifiableSet(qualifiers);
+   }
+ 
+   public String getValidPolicy()
+   {
+     return policy;
+   }
+ 
+   public void setValidPolicy(String policy)
+   {
+     if (readOnly)
+       throw new IllegalStateException("read only");
+     this.policy = policy;
+   }
+ 
+   public boolean isCritical()
+   {
+     return critical;
+   }
+ 
+   public void setCritical(boolean critical)
+   {
+     if (readOnly)
+       throw new IllegalStateException("read only");
+     this.critical = critical;
+   }
+ 
+   public void setReadOnly()
+   {
+     if (readOnly)
+       return;
+     readOnly = true;
+     for (Iterator it = getChildren(); it.hasNext(); )
+       ((PolicyNodeImpl) it.next()).setReadOnly();
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer();
+     for (int i = 0; i < depth; i++)
+       buf.append("  ");
+     buf.append("(");
+     buf.append(PolicyNodeImpl.class.getName());
+     buf.append(" (oid ");
+     buf.append(policy);
+     buf.append(") (depth ");
+     buf.append(depth);
+     buf.append(") (qualifiers ");
+     buf.append(qualifiers);
+     buf.append(") (critical ");
+     buf.append(critical);
+     buf.append(") (expectedPolicies ");
+     buf.append(expectedPolicies);
+     buf.append(") (children (");
+     final String nl = System.getProperty("line.separator");
+     for (Iterator it = getChildren(); it.hasNext(); )
+       {
+         buf.append(nl);
+         buf.append(it.next().toString());
+       }
+     buf.append(")))");
+     return buf.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/Util.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/Util.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/Util.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/Util.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,202 ----
+ /* Util.java -- Miscellaneous utility methods.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ /**
+  * A collection of useful class methods.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public final class Util
+ {
+ 
+   // Constants.
+   // -------------------------------------------------------------------------
+ 
+   public static final String HEX = "0123456789abcdef";
+ 
+   // Class methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Convert a byte array to a hexadecimal string, as though it were a
+    * big-endian arbitrarily-sized integer.
+    *
+    * @param buf The bytes to format.
+    * @param off The offset to start at.
+    * @param len The number of bytes to format.
+    * @return A hexadecimal representation of the specified bytes.
+    */
+   public static String toHexString(byte[] buf, int off, int len)
+   {
+     StringBuffer str = new StringBuffer();
+     for (int i = 0; i < len; i++)
+       {
+         str.append(HEX.charAt(buf[i+off] >>> 4 & 0x0F));
+         str.append(HEX.charAt(buf[i+off] & 0x0F));
+       }
+     return str.toString();
+   }
+ 
+   /**
+    * See {@link #toHexString(byte[],int,int)}.
+    */
+   public static String toHexString(byte[] buf)
+   {
+     return Util.toHexString(buf, 0, buf.length);
+   }
+ 
+   /**
+    * Convert a byte array to a hexadecimal string, separating octets
+    * with the given character.
+    *
+    * @param buf The bytes to format.
+    * @param off The offset to start at.
+    * @param len The number of bytes to format.
+    * @param sep The character to insert between octets.
+    * @return A hexadecimal representation of the specified bytes.
+    */
+   public static String toHexString(byte[] buf, int off, int len, char sep)
+   {
+     StringBuffer str = new StringBuffer();
+     for (int i = 0; i < len; i++)
+       {
+         str.append(HEX.charAt(buf[i+off] >>> 4 & 0x0F));
+         str.append(HEX.charAt(buf[i+off] & 0x0F));
+         if (i < len - 1)
+           str.append(sep);
+       }
+     return str.toString();
+   }
+ 
+   /**
+    * See {@link #toHexString(byte[],int,int,char)}.
+    */
+   public static String toHexString(byte[] buf, char sep)
+   {
+     return Util.toHexString(buf, 0, buf.length, sep);
+   }
+ 
+   /**
+    * Create a representation of the given byte array similar to the
+    * output of `hexdump -C', which is
+    *
+    * <p><pre>OFFSET  SIXTEEN-BYTES-IN-HEX  PRINTABLE-BYTES</pre>
+    *
+    * <p>The printable bytes show up as-is if they are printable and
+    * not a newline character, otherwise showing as '.'.
+    *
+    * @param buf The bytes to format.
+    * @param off The offset to start at.
+    * @param len The number of bytes to encode.
+    * @return The formatted string.
+    */
+   public static String hexDump(byte[] buf, int off, int len, String prefix)
+   {
+     String nl = System.getProperty("line.separator");
+     StringBuffer str = new StringBuffer();
+     int i = 0;
+     while (i < len)
+       {
+         str.append(prefix);
+         str.append(Util.formatInt(i+off, 16, 8));
+         str.append("  ");
+         String s = Util.toHexString(buf, i+off, Math.min(16, len-i), ' ');
+         str.append(s);
+         for (int j = 56 - (56 - s.length()); j < 56; j++)
+           str.append(" ");
+         for (int j = 0; j < Math.min(16, len - i); j++)
+           {
+             if ((buf[i+off+j] & 0xFF) < 0x20 || (buf[i+off+j] & 0xFF) > 0x7E)
+               str.append('.');
+             else
+               str.append((char) (buf[i+off+j] & 0xFF));
+           }
+         str.append(nl);
+         i += 16;
+       }
+     return str.toString();
+   }
+ 
+   /**
+    * See {@link #hexDump(byte[],int,int)}.
+    */
+   public static String hexDump(byte[] buf, String prefix)
+   {
+     return hexDump(buf, 0, buf.length, prefix);
+   }
+ 
+   /**
+    * Format an integer into the specified radix, zero-filled.
+    *
+    * @param i The integer to format.
+    * @param radix The radix to encode to.
+    * @param len The target length of the string. The string is
+    *   zero-padded to this length, but may be longer.
+    * @return The formatted integer.
+    */
+   public static String formatInt(int i, int radix, int len)
+   {
+     String s = Integer.toString(i, radix);
+     StringBuffer buf = new StringBuffer();
+     for (int j = 0; j < len - s.length(); j++)
+       buf.append("0");
+     buf.append(s);
+     return buf.toString();
+   }
+ 
+   /**
+    * Convert a hexadecimal string into its byte representation.
+    *
+    * @param hex The hexadecimal string.
+    * @return The converted bytes.
+    */
+   public static byte[] toByteArray(String hex)
+   {
+     hex = hex.toLowerCase();
+     byte[] buf = new byte[hex.length() / 2];
+     int j = 0;
+     for (int i = 0; i < buf.length; i++)
+       {
+         buf[i] = (byte) ((Character.digit(hex.charAt(j++), 16) << 4) |
+                           Character.digit(hex.charAt(j++), 16));
+       }
+     return buf;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,548 ----
+ /* X500DistinguishedName.java -- X.500 distinguished name.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.EOFException;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.Reader;
+ import java.io.StringReader;
+ import java.security.Principal;
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedHashMap;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ public class X500DistinguishedName implements Principal
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID CN         = new OID("2.5.4.3");
+   public static final OID C          = new OID("2.5.4.6");
+   public static final OID L          = new OID("2.5.4.7");
+   public static final OID ST         = new OID("2.5.4.8");
+   public static final OID STREET     = new OID("2.5.4.9");
+   public static final OID O          = new OID("2.5.4.10");
+   public static final OID OU         = new OID("2.5.4.11");
+   public static final OID T          = new OID("2.5.4.12");
+   public static final OID DNQ        = new OID("2.5.4.46");
+   public static final OID NAME       = new OID("2.5.4.41");
+   public static final OID GIVENNAME  = new OID("2.5.4.42");
+   public static final OID INITIALS   = new OID("2.5.4.43");
+   public static final OID GENERATION = new OID("2.5.4.44");
+   public static final OID EMAIL      = new OID("1.2.840.113549.1.9.1");
+   public static final OID DC         = new OID("0.9.2342.19200300.100.1.25");
+   public static final OID UID        = new OID("0.9.2342.19200300.100.1.1");
+ 
+   private List components;
+   private Map currentRdn;
+   private boolean fixed;
+   private String stringRep;
+   private byte[] encoded;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public X500DistinguishedName()
+   {
+     components = new LinkedList();
+     currentRdn = new LinkedHashMap();
+     components.add(currentRdn);
+   }
+ 
+   public X500DistinguishedName(String name)
+   {
+     this();
+     try
+       {
+         parseString(name);
+       }
+     catch (IOException ioe)
+       {
+         throw new IllegalArgumentException(ioe.toString());
+       }
+   }
+ 
+   public X500DistinguishedName(byte[] encoded) throws IOException
+   {
+     this();
+     parseDer(new DERReader(encoded));
+   }
+ 
+   public X500DistinguishedName(InputStream encoded) throws IOException
+   {
+     this();
+     parseDer(new DERReader(encoded));
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public String getName()
+   {
+     return toString();
+   }
+ 
+   public void newRelativeDistinguishedName()
+   {
+     if (fixed || currentRdn.isEmpty()) return;
+     currentRdn = new LinkedHashMap();
+     components.add(currentRdn);
+   }
+ 
+   public int size()
+   {
+     return components.size();
+   }
+ 
+   public int countComponents()
+   {
+     int count = 0;
+     for (Iterator it = components.iterator(); it.hasNext(); )
+       {
+         count += ((Map) it.next()).size();
+       }
+     return count;
+   }
+ 
+   public boolean containsComponent(OID oid, String value)
+   {
+     for (Iterator it = components.iterator(); it.hasNext(); )
+       {
+         Map rdn = (Map) it.next();
+         String s = (String) rdn.get(oid);
+         if (s == null)
+           continue;
+         if (compressWS(value).equalsIgnoreCase(compressWS(s)))
+           return true;
+       }
+     return false;
+   }
+ 
+   public String getComponent(OID oid)
+   {
+     for (Iterator it = components.iterator(); it.hasNext(); )
+       {
+         Map rdn = (Map) it.next();
+         if (rdn.containsKey(oid))
+           return (String) rdn.get(oid);
+       }
+     return null;
+   }
+ 
+   public String getComponent(OID oid, int rdn)
+   {
+     if (rdn >= size())
+       return null;
+     return (String) ((Map) components.get(rdn)).get(oid);
+   }
+ 
+   public void putComponent(OID oid, String value)
+   {
+     currentRdn.put(oid, value);
+   }
+ 
+   public void putComponent(String name, String value)
+   {
+     name = name.trim().toLowerCase();
+     if (name.equals("cn"))
+       putComponent(CN, value);
+     else if (name.equals("c"))
+       putComponent(C, value);
+     else if (name.equals("l"))
+       putComponent(L, value);
+     else if (name.equals("street"))
+       putComponent(STREET, value);
+     else if (name.equals("st"))
+       putComponent(ST, value);
+     else if (name.equals("t"))
+       putComponent(T, value);
+     else if (name.equals("dnq"))
+       putComponent(DNQ, value);
+     else if (name.equals("name"))
+       putComponent(NAME, value);
+     else if (name.equals("givenname"))
+       putComponent(GIVENNAME, value);
+     else if (name.equals("initials"))
+       putComponent(INITIALS, value);
+     else if (name.equals("generation"))
+       putComponent(GENERATION, value);
+     else if (name.equals("email"))
+       putComponent(EMAIL, value);
+     else if (name.equals("dc"))
+       putComponent(DC, value);
+     else if (name.equals("uid"))
+       putComponent(UID, value);
+     else
+       putComponent(new OID(name), value);
+   }
+ 
+   public void setUnmodifiable()
+   {
+     if (fixed) return;
+     fixed = true;
+     List newComps = new ArrayList(components.size());
+     for (Iterator it = components.iterator(); it.hasNext(); )
+       {
+         Map rdn = (Map) it.next();
+         rdn = Collections.unmodifiableMap(rdn);
+         newComps.add(rdn);
+       }
+     components = Collections.unmodifiableList(newComps);
+     currentRdn = Collections.EMPTY_MAP;
+   }
+ 
+   public int hashCode()
+   {
+     int sum = 0;
+     for (Iterator it = components.iterator(); it.hasNext(); )
+       {
+         Map m = (Map) it.next();
+         for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); )
+           {
+             Map.Entry e = (Map.Entry) it2.next();
+             sum += e.getKey().hashCode();
+             sum += e.getValue().hashCode();
+           }
+       }
+     return sum;
+   }
+ 
+   public boolean equals(Object o)
+   {
+     if (!(o instanceof X500DistinguishedName))
+       return false;
+     if (size() != ((X500DistinguishedName) o).size())
+       return false;
+     for (int i = 0; i < size(); i++)
+       {
+         Map m = (Map) components.get(i);
+         for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); )
+           {
+             Map.Entry e = (Map.Entry) it2.next();
+             OID oid = (OID) e.getKey();
+             String v1 = (String) e.getValue();
+             String v2 = ((X500DistinguishedName) o).getComponent(oid, i);
+             if (!compressWS(v1).equalsIgnoreCase(compressWS(v2)))
+               return false;
+           }
+       }
+     return true;
+   }
+ 
+   public String toString()
+   {
+     if (fixed && stringRep != null)
+       return stringRep;
+     StringBuffer str = new StringBuffer();
+     for (Iterator it = components.iterator(); it.hasNext(); )
+       {
+         Map m = (Map) it.next();
+         for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); )
+           {
+             Map.Entry entry = (Map.Entry) it2.next();
+             OID oid = (OID) entry.getKey();
+             String value = (String) entry.getValue();
+             if (oid.equals(CN))
+               str.append("CN");
+             else if (oid.equals(C))
+               str.append("C");
+             else if (oid.equals(L))
+               str.append("L");
+             else if (oid.equals(ST))
+               str.append("ST");
+             else if (oid.equals(STREET))
+               str.append("STREET");
+             else if (oid.equals(O))
+               str.append("O");
+             else if (oid.equals(OU))
+               str.append("OU");
+             else if (oid.equals(T))
+               str.append("T");
+             else if (oid.equals(DNQ))
+               str.append("DNQ");
+             else if (oid.equals(NAME))
+               str.append("NAME");
+             else
+               str.append(oid.toString());
+             str.append('=');
+             str.append(value);
+             if (it2.hasNext())
+               str.append("+");
+           }
+         if (it.hasNext())
+           str.append(',');
+       }
+     return (stringRep = str.toString());
+   }
+ 
+   public byte[] getDer()
+   {
+     if (fixed && encoded != null)
+       return (byte[]) encoded.clone();
+     ArrayList name = new ArrayList(components.size());
+     for (Iterator it = components.iterator(); it.hasNext(); )
+       {
+         Map m = (Map) it.next();
+         if (m.isEmpty())
+           continue;
+         Set rdn = new HashSet();
+         for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); )
+           {
+             Map.Entry e = (Map.Entry) it.next();
+             ArrayList atav = new ArrayList(2);
+             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, e.getKey()));
+             atav.add(new DERValue(DER.UTF8_STRING, e.getValue()));
+             rdn.add(new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, atav));
+           }
+         name.add(new DERValue(DER.SET|DER.CONSTRUCTED, rdn));
+       }
+     DERValue val = new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, name);
+     return (byte[]) (encoded = val.getEncoded()).clone();
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private int sep;
+ 
+   private void parseString(String str) throws IOException
+   {
+     Reader in = new StringReader(str);
+     while (true)
+       {
+         String key = readAttributeType(in);
+         if (key == null)
+           break;
+         String value = readAttributeValue(in);
+         putComponent(key, value);
+         if (sep == ',')
+           newRelativeDistinguishedName();
+       }
+     setUnmodifiable();
+   }
+ 
+   private String readAttributeType(Reader in) throws IOException
+   {
+     StringBuffer buf = new StringBuffer();
+     int ch;
+     while ((ch = in.read()) != '=')
+       {
+         if (ch == -1)
+           {
+             if (buf.length() > 0)
+               throw new EOFException();
+             return null;
+           }
+         if (ch > 127)
+           throw new IOException("Invalid char: " + (char) ch);
+         if (Character.isLetterOrDigit((char) ch) || ch == '-' || ch == '.')
+           buf.append((char) ch);
+         else
+           throw new IOException("Invalid char: " + (char) ch);
+       }
+     return buf.toString();
+   }
+ 
+   private String readAttributeValue(Reader in) throws IOException
+   {
+     StringBuffer buf = new StringBuffer();
+     int ch = in.read();
+     if (ch == '#')
+       {
+         while (true)
+           {
+             ch = in.read();
+             if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
+                 || Character.isDigit((char) ch))
+               buf.append((char) ch);
+             else if (ch == '+' || ch == ',')
+               {
+                 sep = ch;
+                 String hex = buf.toString();
+                 return new String(Util.toByteArray(hex));
+               }
+             else
+               throw new IOException("illegal character: " + (char) ch);
+           }
+       }
+     else if (ch == '"')
+       {
+         while (true)
+           {
+             ch = in.read();
+             if (ch == '"')
+               break;
+             else if (ch == '\\')
+               {
+                 ch = in.read();
+                 if (ch == -1)
+                   throw new EOFException();
+                 if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
+                     || Character.isDigit((char) ch))
+                   {
+                     int i = Character.digit((char) ch, 16) << 4;
+                     ch = in.read();
+                     if (!(('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
+                           || Character.isDigit((char) ch)))
+                       throw new IOException("illegal hex char");
+                     i |= Character.digit((char) ch, 16);
+                     buf.append((char) i);
+                   }
+                 else
+                   buf.append((char) ch);
+               }
+             else
+               buf.append((char) ch);
+           }
+         sep = in.read();
+         if (sep != '+' || sep != ',')
+           throw new IOException("illegal character: " + (char) ch);
+         return buf.toString();
+       }
+     else
+       {
+         while (true)
+           {
+             switch (ch)
+               {
+               case '+':
+               case ',':
+                 sep = ch;
+                 return buf.toString();
+               case '\\':
+                 ch = in.read();
+                 if (ch == -1)
+                   throw new EOFException();
+                 if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
+                     || Character.isDigit((char) ch))
+                   {
+                     int i = Character.digit((char) ch, 16) << 4;
+                     ch = in.read();
+                     if (!(('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
+                           || Character.isDigit((char) ch)))
+                       throw new IOException("illegal hex char");
+                     i |= Character.digit((char) ch, 16);
+                     buf.append((char) i);
+                   }
+                 else
+                   buf.append((char) ch);
+                 break;
+               case '=':
+               case '<':
+               case '>':
+               case '#':
+               case ';':
+                 throw new IOException("illegal character: " + (char) ch);
+               case -1:
+                 throw new EOFException();
+               default:
+                 buf.append((char) ch);
+               }
+           }
+       }
+   }
+ 
+   private void parseDer(DERReader der) throws IOException
+   {
+     DERValue name = der.read();
+     if (!name.isConstructed())
+       throw new IOException("malformed Name");
+     encoded = name.getEncoded();
+     int len = 0;
+     while (len < name.getLength())
+       {
+         DERValue rdn = der.read();
+         if (!rdn.isConstructed())
+           throw new IOException("badly formed RDNSequence");
+         int len2 = 0;
+         while (len2 < rdn.getLength())
+           {
+             DERValue atav = der.read();
+             if (!atav.isConstructed())
+               throw new IOException("badly formed AttributeTypeAndValue");
+             DERValue val = der.read();
+             if (val.getTag() != DER.OBJECT_IDENTIFIER)
+               throw new IOException("badly formed AttributeTypeAndValue");
+             OID oid = (OID) val.getValue();
+             val = der.read();
+             if (!(val.getValue() instanceof String))
+               throw new IOException("badly formed AttributeTypeAndValue");
+             String value = (String) val.getValue();
+             putComponent(oid, value);
+             len2 += atav.getEncodedLength();
+           }
+         len += rdn.getEncodedLength();
+         if (len < name.getLength())
+           newRelativeDistinguishedName();
+       }
+     setUnmodifiable();
+   }
+ 
+   private static String compressWS(String str)
+   {
+     StringBuffer buf = new StringBuffer();
+     char lastChar = 0;
+     for (int i = 0; i < str.length(); i++)
+       {
+         char c = str.charAt(i);
+         if (Character.isWhitespace(c))
+           {
+             if (!Character.isWhitespace(lastChar))
+               buf.append(' ');
+           }
+         else
+           buf.append(c);
+         lastChar = c;
+       }
+     return buf.toString().trim();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CRL.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CRL.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CRL.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CRL.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,476 ----
+ /* X509CRL.java -- X.509 certificate revocation list.
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.BitString;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.x509.ext.Extension;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.math.BigInteger;
+ import java.security.InvalidKeyException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.Principal;
+ import java.security.PublicKey;
+ import java.security.Signature;
+ import java.security.SignatureException;
+ import java.security.cert.CRLException;
+ import java.security.cert.Certificate;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Date;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Set;
+ 
+ import javax.security.auth.x500.X500Principal;
+ 
+ /**
+  * X.509 certificate revocation lists.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class X509CRL extends java.security.cert.X509CRL
+   implements GnuPKIExtension
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   private static final boolean DEBUG = false;
+   private static void debug(String msg)
+   {
+     if (DEBUG)
+       {
+         System.err.print(">> X509CRL: ");
+         System.err.println(msg);
+       }
+   }
+ 
+   private static final OID ID_DSA = new OID("1.2.840.10040.4.1");
+   private static final OID ID_DSA_WITH_SHA1 = new OID("1.2.840.10040.4.3");
+   private static final OID ID_RSA = new OID("1.2.840.113549.1.1.1");
+   private static final OID ID_RSA_WITH_MD2 = new OID("1.2.840.113549.1.1.2");
+   private static final OID ID_RSA_WITH_MD5 = new OID("1.2.840.113549.1.1.4");
+   private static final OID ID_RSA_WITH_SHA1 = new OID("1.2.840.113549.1.1.5");
+ 
+   private byte[] encoded;
+ 
+   private byte[] tbsCRLBytes;
+   private int version;
+   private OID algId;
+   private byte[] algParams;
+   private Date thisUpdate;
+   private Date nextUpdate;
+   private X500DistinguishedName issuerDN;
+   private HashMap revokedCerts;
+   private HashMap extensions;
+ 
+   private OID sigAlg;
+   private byte[] sigAlgParams;
+   private byte[] rawSig;
+   private byte[] signature;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new X.509 CRL.
+    *
+    * @param encoded The DER encoded CRL.
+    * @throws CRLException If the input bytes are incorrect.
+    * @throws IOException  If the input bytes cannot be read.
+    */
+   public X509CRL(InputStream encoded) throws CRLException, IOException
+   {
+     super();
+     revokedCerts = new HashMap();
+     extensions = new HashMap();
+     try
+       {
+         parse(encoded);
+       }
+     catch (IOException ioe)
+       {
+         ioe.printStackTrace();
+         throw ioe;
+       }
+     catch (Exception x)
+       {
+         x.printStackTrace();
+         throw new CRLException(x.toString());
+       }
+   }
+ 
+   // X509CRL methods.
+   // ------------------------------------------------------------------------
+ 
+   public boolean equals(Object o)
+   {
+     if (!(o instanceof X509CRL))
+       return false;
+     return ((X509CRL) o).getRevokedCertificates().equals(revokedCerts.values());
+   }
+ 
+   public int hashCode()
+   {
+     return revokedCerts.hashCode();
+   }
+ 
+   public byte[] getEncoded() throws CRLException
+   {
+     return (byte[]) encoded.clone();
+   }
+ 
+   public void verify(PublicKey key)
+     throws CRLException, NoSuchAlgorithmException, InvalidKeyException,
+            NoSuchProviderException, SignatureException
+   {
+     Signature sig = Signature.getInstance(sigAlg.toString());
+     doVerify(sig, key);
+   }
+ 
+   public void verify(PublicKey key, String provider)
+     throws CRLException, NoSuchAlgorithmException, InvalidKeyException,
+            NoSuchProviderException, SignatureException
+   {
+     Signature sig = Signature.getInstance(sigAlg.toString(), provider);
+     doVerify(sig, key);
+   }
+ 
+   public int getVersion()
+   {
+     return version;
+   }
+ 
+   public Principal getIssuerDN()
+   {
+     return issuerDN;
+   }
+ 
+   public X500Principal getIssuerX500Principal()
+   {
+     return new X500Principal(issuerDN.getDer());
+   }
+ 
+   public Date getThisUpdate()
+   {
+     return (Date) thisUpdate.clone();
+   }
+ 
+   public Date getNextUpdate()
+   {
+     if (nextUpdate != null)
+       return (Date) nextUpdate.clone();
+     return null;
+   }
+ 
+   public java.security.cert.X509CRLEntry getRevokedCertificate(BigInteger serialNo)
+   {
+     return (java.security.cert.X509CRLEntry) revokedCerts.get(serialNo);
+   }
+ 
+   public Set getRevokedCertificates()
+   {
+     return Collections.unmodifiableSet(new HashSet(revokedCerts.values()));
+   }
+ 
+   public byte[] getTBSCertList() throws CRLException
+   {
+     return (byte[]) tbsCRLBytes.clone();
+   }
+ 
+   public byte[] getSignature()
+   {
+     return (byte[]) rawSig.clone();
+   }
+ 
+   public String getSigAlgName()
+   {
+     if (sigAlg.equals(ID_DSA_WITH_SHA1))
+       return "SHA1withDSA";
+     if (sigAlg.equals(ID_RSA_WITH_MD2))
+       return "MD2withRSA";
+     if (sigAlg.equals(ID_RSA_WITH_MD5))
+       return "MD5withRSA";
+     if (sigAlg.equals(ID_RSA_WITH_SHA1))
+       return "SHA1withRSA";
+     return "unknown";
+   }
+ 
+   public String getSigAlgOID()
+   {
+     return sigAlg.toString();
+   }
+ 
+   public byte[] getSigAlgParams()
+   {
+     if (sigAlgParams != null)
+       return (byte[]) sigAlgParams.clone();
+     return null;
+   }
+ 
+   // X509Extension methods.
+   // ------------------------------------------------------------------------
+ 
+   public boolean hasUnsupportedCriticalExtension()
+   {
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         Extension e = (Extension) it.next();
+         if (e.isCritical() && !e.isSupported())
+           return true;
+       }
+     return false;
+   }
+ 
+   public Set getCriticalExtensionOIDs()
+   {
+     HashSet s = new HashSet();
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         Extension e = (Extension) it.next();
+         if (e.isCritical())
+           s.add(e.getOid().toString());
+       }
+     return Collections.unmodifiableSet(s);
+   }
+ 
+   public Set getNonCriticalExtensionOIDs()
+   {
+     HashSet s = new HashSet();
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         Extension e = (Extension) it.next();
+         if (!e.isCritical())
+           s.add(e.getOid().toString());
+       }
+     return Collections.unmodifiableSet(s);
+   }
+ 
+   public byte[] getExtensionValue(String oid)
+   {
+     Extension e = getExtension(new OID(oid));
+     if (e != null)
+       {
+         return e.getValue().getEncoded();
+       }
+     return null;
+   }
+ 
+   // GnuPKIExtension method.
+   // -------------------------------------------------------------------------
+ 
+   public Extension getExtension(OID oid)
+   {
+     return (Extension) extensions.get(oid);
+   }
+ 
+   public Collection getExtensions()
+   {
+     return extensions.values();
+   }
+ 
+   // CRL methods.
+   // -------------------------------------------------------------------------
+ 
+   public String toString()
+   {
+     return X509CRL.class.getName();
+   }
+ 
+   public boolean isRevoked(Certificate cert)
+   {
+     if (!(cert instanceof java.security.cert.X509Certificate))
+       throw new IllegalArgumentException("not a X.509 certificate");
+     BigInteger certSerial =
+       ((java.security.cert.X509Certificate) cert).getSerialNumber();
+     X509CRLEntry ent = (X509CRLEntry) revokedCerts.get(certSerial);
+     if (ent == null)
+       return false;
+     return ent.getRevocationDate().compareTo(new Date()) < 0;
+   }
+ 
+   // Own methods.
+   // ------------------------------------------------------------------------
+ 
+   private void doVerify(Signature sig, PublicKey key)
+     throws CRLException, InvalidKeyException, SignatureException
+   {
+     sig.initVerify(key);
+     sig.update(tbsCRLBytes);
+     if (!sig.verify(signature))
+       throw new CRLException("signature not verified");
+   }
+ 
+   private void parse(InputStream in) throws Exception
+   {
+     // CertificateList ::= SEQUENCE {
+     DERReader der = new DERReader(in);
+     DERValue val = der.read();
+     debug("start CertificateList len == " + val.getLength());
+     if (!val.isConstructed())
+       throw new IOException("malformed CertificateList");
+     encoded = val.getEncoded();
+ 
+     //   tbsCertList ::= SEQUENCE {  -- TBSCertList
+     val = der.read();
+     if (!val.isConstructed())
+       throw new IOException("malformed TBSCertList");
+     debug("start tbsCertList  len == " + val.getLength());
+     tbsCRLBytes = val.getEncoded();
+ 
+     //     version    Version OPTIONAL,
+     //                  -- If present must be v2
+     val = der.read();
+     if (val.getValue() instanceof BigInteger)
+       {
+         version = ((BigInteger) val.getValue()).intValue() + 1;
+         val = der.read();
+       }
+     else
+       version = 1;
+     debug("read version == " + version);
+ 
+     //     signature   AlgorithmIdentifier,
+     debug("start AlgorithmIdentifier len == " + val.getLength());
+     if (!val.isConstructed())
+       throw new IOException("malformed AlgorithmIdentifier");
+     DERValue algIdVal = der.read();
+     algId = (OID) algIdVal.getValue();
+     debug("read object identifier == " + algId);
+     if (val.getLength() > algIdVal.getEncodedLength())
+       {
+         val = der.read();
+         debug("read parameters  len == " + val.getEncodedLength());
+         algParams = val.getEncoded();
+         if (val.isConstructed())
+           in.skip(val.getLength());
+       }
+ 
+     //     issuer   Name,
+     val = der.read();
+     issuerDN = new X500DistinguishedName(val.getEncoded());
+     der.skip(val.getLength());
+     debug("read issuer == " + issuerDN);
+ 
+     //     thisUpdate   Time,
+     thisUpdate = (Date) der.read().getValue();
+     debug("read thisUpdate == " + thisUpdate);
+ 
+     //     nextUpdate   Time OPTIONAL,
+     val = der.read();
+     if (val.getValue() instanceof Date)
+       {
+         nextUpdate = (Date) val.getValue();
+         debug("read nextUpdate == " + nextUpdate);
+         val = der.read();
+       }
+ 
+     //     revokedCertificates SEQUENCE OF SEQUENCE {
+     //       -- X509CRLEntry objects...
+     //     } OPTIONAL,
+     if (val.getTag() != 0)
+       {
+         int len = 0;
+         while (len < val.getLength())
+           {
+             X509CRLEntry entry = new X509CRLEntry(version, der);
+             revokedCerts.put(entry.getSerialNumber(), entry);
+             len += entry.getEncoded().length;
+           }
+         val = der.read();
+       }
+ 
+     //    crlExtensions   [0] EXPLICIT Extensions OPTIONAL
+     //                        -- if present MUST be v2
+     if (val.getTagClass() != DER.UNIVERSAL && val.getTag() == 0)
+       {
+         if (version < 2)
+           throw new IOException("extra data in CRL");
+         DERValue exts = der.read();
+         if (!exts.isConstructed())
+           throw new IOException("malformed Extensions");
+         debug("start Extensions  len == " + exts.getLength());
+         int len = 0;
+         while (len < exts.getLength())
+           {
+             DERValue ext = der.read();
+             if (!ext.isConstructed())
+               throw new IOException("malformed Extension");
+             Extension e = new Extension(ext.getEncoded());
+             extensions.put(e.getOid(), e);
+             der.skip(ext.getLength());
+             len += ext.getEncodedLength();
+             debug("current count == " + len);
+           }
+         val = der.read();
+       }
+ 
+     debug("read tag == " + val.getTag());
+     if (!val.isConstructed())
+       throw new IOException("malformed AlgorithmIdentifier");
+     debug("start AlgorithmIdentifier  len == " + val.getLength());
+     DERValue sigAlgVal = der.read();
+     debug("read tag == " + sigAlgVal.getTag());
+     if (sigAlgVal.getTag() != DER.OBJECT_IDENTIFIER)
+       throw new IOException("malformed AlgorithmIdentifier");
+     sigAlg = (OID) sigAlgVal.getValue();
+     debug("signature id == " + sigAlg);
+     debug("sigAlgVal length == " + sigAlgVal.getEncodedLength());
+     if (val.getLength() > sigAlgVal.getEncodedLength())
+       {
+         val = der.read();
+         debug("sig params tag = " + val.getTag() + " len == " + val.getEncodedLength());
+         sigAlgParams = (byte[]) val.getEncoded();
+         if (val.isConstructed())
+           in.skip(val.getLength());
+       }
+     val = der.read();
+     debug("read tag = " + val.getTag());
+     rawSig = val.getEncoded();
+     signature = ((BitString) val.getValue()).toByteArray();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CRLEntry.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CRLEntry.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CRLEntry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CRLEntry.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,278 ----
+ /* X509CRLEntry.java -- an entry in a X.509 CRL.
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.x509.ext.Extension;
+ 
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.security.cert.CRLException;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Date;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Set;
+ 
+ /**
+  * A single entry in a X.509 certificate revocation list.
+  *
+  * @see X509CRL
+  * @author Casey Marshall
+  */
+ class X509CRLEntry extends java.security.cert.X509CRLEntry
+   implements GnuPKIExtension
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   private static final boolean DEBUG = false;
+   private static void debug(String msg)
+   {
+     if (DEBUG)
+       {
+         System.err.print(">> X509CRLEntry: ");
+         System.err.println(msg);
+       }
+   }
+ 
+   /** The DER encoded form of this CRL entry. */
+   private byte[] encoded;
+ 
+   /** The revoked certificate's serial number. */
+   private BigInteger serialNo;
+ 
+   /** The date the certificate was revoked. */
+   private Date revocationDate;
+ 
+   /** The CRL entry extensions. */
+   private HashMap extensions;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new X.509 certificate revocation list entry from the given
+    * input stream and CRL version number.
+    *
+    * @param version The CRL version.
+    * @param encoded The stream of DER bytes.
+    * @throws CRLException If the ASN.1 structure is invalid.
+    * @throws IOException  If the bytes cannot be read.
+    */
+   X509CRLEntry(int version, DERReader encoded)
+     throws CRLException, IOException
+   {
+     super();
+     extensions = new HashMap();
+     try
+       {
+         parse(version, encoded);
+       }
+     catch (IOException ioe)
+       {
+         throw ioe;
+       }
+     catch (Exception x)
+       {
+         throw new CRLException(x.toString());
+       }
+   }
+ 
+   // X509CRLEntry methods.
+   // ------------------------------------------------------------------------
+ 
+   public boolean equals(Object o)
+   {
+     if (!(o instanceof X509CRLEntry))
+       return false;
+     return ((X509CRLEntry) o).getSerialNumber().equals(serialNo) &&
+            ((X509CRLEntry) o).getRevocationDate().equals(revocationDate);
+   }
+ 
+   public int hashCode()
+   {
+     return serialNo.hashCode();
+   }
+ 
+   public byte[] getEncoded() throws CRLException
+   {
+     return (byte[]) encoded.clone();
+   }
+ 
+   public BigInteger getSerialNumber()
+   {
+     return serialNo;
+   }
+ 
+   public Date getRevocationDate()
+   {
+     return (Date) revocationDate.clone();
+   }
+ 
+   public boolean hasExtensions()
+   {
+     return ! extensions.isEmpty();
+   }
+ 
+   public String toString()
+   {
+     return "X509CRLEntry serial=" + serialNo + " revocation date="
+       + revocationDate + " ext=" + extensions;
+   }
+ 
+   // X509Extension methods.
+   // -------------------------------------------------------------------------
+ 
+   public boolean hasUnsupportedCriticalExtension()
+   {
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         Extension e = (Extension) it.next();
+         if (e.isCritical() && !e.isSupported())
+           return true;
+       }
+     return false;
+   }
+ 
+   public Set getCriticalExtensionOIDs()
+   {
+     HashSet s = new HashSet();
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         Extension e = (Extension) it.next();
+         if (e.isCritical())
+           s.add(e.getOid().toString());
+       }
+     return Collections.unmodifiableSet(s);
+   }
+ 
+   public Set getNonCriticalExtensionOIDs()
+   {
+     HashSet s = new HashSet();
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         Extension e = (Extension) it.next();
+         if (!e.isCritical())
+           s.add(e.getOid().toString());
+       }
+     return Collections.unmodifiableSet(s);
+   }
+ 
+   public byte[] getExtensionValue(String oid)
+   {
+     Extension e = getExtension(new OID(oid));
+     if (e != null)
+       {
+         return e.getValue().getEncoded();
+       }
+     return null;
+   }
+ 
+   // GnuPKIExtension method.
+   // -------------------------------------------------------------------------
+ 
+   public Extension getExtension(OID oid)
+   {
+     return (Extension) extensions.get(oid);
+   }
+ 
+   public Collection getExtensions()
+   {
+     return extensions.values();
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private void parse(int version, DERReader der) throws Exception
+   {
+     // RevokedCertificate ::= SEQUENCE {
+     DERValue entry = der.read();
+     debug("start CRL entry   len == " + entry.getLength());
+     if (!entry.isConstructed())
+       throw new IOException("malformed revokedCertificate");
+     encoded = entry.getEncoded();
+     int len = 0;
+ 
+     debug("encoded entry:\n" + Util.hexDump(encoded, ">>>> "));
+ 
+     //   userCertificate   CertificateSerialNumber,
+     DERValue val = der.read();
+     serialNo = (BigInteger) val.getValue();
+     len += val.getEncodedLength();
+     debug("userCertificate == " + serialNo + "  current count == " + len);
+ 
+     //   revocationDate   Time,
+     val = der.read();
+     revocationDate = (Date) val.getValue();
+     len += val.getEncodedLength();
+     debug("revocationDate == " + revocationDate + "  current count == " + len);
+ 
+     //   crlEntryExtensions   Extensions OPTIONAL
+     //                          -- if present MUST be v2
+     if (len < entry.getLength())
+       {
+         if (version < 2)
+           throw new IOException("extra data in CRL entry");
+         DERValue exts = der.read();
+         if (!exts.isConstructed())
+           throw new IOException("malformed Extensions");
+         debug("start Extensions  len == " + exts.getLength());
+         len = 0;
+         while (len < exts.getLength())
+           {
+             val = der.read();
+             if (!val.isConstructed())
+               throw new IOException("malformed Extension");
+             debug("start Extension  len == " + val.getLength());
+             Extension e = new Extension(val.getEncoded());
+             extensions.put(e.getOid(), e);
+             der.skip(val.getLength());
+             len += val.getEncodedLength();
+             debug("current count == " + len);
+           }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CRLSelectorImpl.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CRLSelectorImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CRLSelectorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CRLSelectorImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,138 ----
+ /* X509CRLSelectorImpl.java -- implementation of an X509CRLSelector.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ import java.io.IOException;
+ 
+ import java.security.Principal;
+ import java.security.cert.CRL;
+ import java.security.cert.CRLSelector;
+ import java.security.cert.X509CRL;
+ 
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Set;
+ 
+ import javax.security.auth.x500.X500Principal;
+ 
+ /**
+  * Sun's implementation of X509CRLSelector sucks. This one tries to work
+  * better.
+  */
+ public class X509CRLSelectorImpl implements CRLSelector
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private Set issuerNames;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public X509CRLSelectorImpl()
+   {
+     issuerNames = new HashSet();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public void addIssuerName(byte[] issuerName) throws IOException
+   {
+     issuerNames.add(new X500DistinguishedName(issuerName));
+   }
+ 
+   public void addIssuerName(String issuerName)
+   {
+     issuerNames.add(new X500DistinguishedName(issuerName));
+   }
+ 
+   public void addIssuerName(Principal issuerName) throws IOException
+   {
+     if (issuerName instanceof X500DistinguishedName)
+       issuerNames.add(issuerName);
+     else if (issuerName instanceof X500Principal)
+       issuerNames.add(new X500DistinguishedName(((X500Principal) issuerName).getEncoded()));
+     else
+       issuerNames.add(new X500DistinguishedName(issuerName.getName()));
+   }
+ 
+   public Collection getIssuerNames()
+   {
+     return Collections.unmodifiableSet(issuerNames);
+   }
+ 
+   public Object clone()
+   {
+     X509CRLSelectorImpl copy = new X509CRLSelectorImpl();
+     copy.issuerNames.addAll(issuerNames);
+     return copy;
+   }
+ 
+   public boolean match(CRL crl)
+   {
+     if (!(crl instanceof X509CRL))
+       return false;
+     try
+       {
+         Principal p = ((X509CRL) crl).getIssuerDN();
+         X500DistinguishedName thisName = null;
+         if (p instanceof X500DistinguishedName)
+           thisName = (X500DistinguishedName) p;
+         else if (p instanceof X500Principal)
+           thisName = new X500DistinguishedName(((X500Principal) p).getEncoded());
+         else
+           thisName = new X500DistinguishedName(p.getName());
+         for (Iterator it = issuerNames.iterator(); it.hasNext(); )
+           {
+             X500DistinguishedName name = (X500DistinguishedName) it.next();
+             if (thisName.equals(name))
+               return true;
+           }
+       }
+     catch (Exception x)
+       {
+       }
+     return false;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CertPath.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CertPath.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CertPath.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CertPath.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,303 ----
+ /* X509CertPath.java -- an X.509 certificate path.
+    Copyright (C) 2004  Free Software Fonudation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DEREncodingException;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.math.BigInteger;
+ import java.security.cert.CertPath;
+ import java.security.cert.Certificate;
+ import java.security.cert.CertificateEncodingException;
+ import java.security.cert.CertificateException;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ 
+ /**
+  * A certificate path (or certificate chain) of X509Certificates.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class X509CertPath extends CertPath
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final List ENCODINGS = Collections.unmodifiableList(
+     Arrays.asList(new String[] { "PkiPath", "PKCS7" }));
+ 
+   private static final OID PKCS7_SIGNED_DATA = new OID("1.2.840.113549.1.7.2");
+   private static final OID PKCS7_DATA = new OID("1.2.840.113549.1.7.1");
+ 
+   /** The certificate path. */
+   private List path;
+ 
+   /** The cached PKCS #7 encoded bytes. */
+   private byte[] pkcs_encoded;
+ 
+   /** The cached PkiPath encoded bytes. */
+   private byte[] pki_encoded;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public X509CertPath(List path)
+   {
+     super("X.509");
+     this.path = Collections.unmodifiableList(path);
+   }
+ 
+   public X509CertPath(InputStream in) throws CertificateEncodingException
+   {
+     this(in, (String) ENCODINGS.get(0));
+   }
+ 
+   public X509CertPath(InputStream in, String encoding)
+     throws CertificateEncodingException
+   {
+     super("X.509");
+     try
+       {
+         parse(in, encoding);
+       }
+     catch (IOException ioe)
+       {
+         throw new CertificateEncodingException();
+       }
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public List getCertificates()
+   {
+     return path; // already unmodifiable
+   }
+ 
+   public byte[] getEncoded() throws CertificateEncodingException
+   {
+     return getEncoded((String) ENCODINGS.get(0));
+   }
+ 
+   public byte[] getEncoded(String encoding) throws CertificateEncodingException
+   {
+     if (encoding.equalsIgnoreCase("PkiPath"))
+       {
+         if (pki_encoded == null)
+           {
+             try
+               {
+                 pki_encoded = encodePki();
+               }
+             catch (IOException ioe)
+               {
+                 throw new CertificateEncodingException();
+               }
+           }
+         return (byte[]) pki_encoded.clone();
+       }
+     else if (encoding.equalsIgnoreCase("PKCS7"))
+       {
+         if (pkcs_encoded == null)
+           {
+             try
+               {
+                 pkcs_encoded = encodePKCS();
+               }
+             catch (IOException ioe)
+               {
+                 throw new CertificateEncodingException();
+               }
+           }
+         return (byte[]) pkcs_encoded.clone();
+       }
+     else
+       throw new CertificateEncodingException("unknown encoding: " + encoding);
+   }
+ 
+   public Iterator getEncodings()
+   {
+     return ENCODINGS.iterator(); // already unmodifiable
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private void parse(InputStream in, String encoding)
+     throws CertificateEncodingException, IOException
+   {
+     DERReader der = new DERReader(in);
+     DERValue path = null;
+     if (encoding.equalsIgnoreCase("PkiPath"))
+       {
+         // PKI encoding is just a SEQUENCE of X.509 certificates.
+         path = der.read();
+         if (!path.isConstructed())
+           throw new DEREncodingException("malformed PkiPath");
+       }
+     else if (encoding.equalsIgnoreCase("PKCS7"))
+       {
+         // PKCS #7 encoding means that the certificates are contained in a
+         // SignedData PKCS #7 type.
+         //
+         // ContentInfo ::= SEQUENCE {
+         //   contentType ::= ContentType,
+         //   content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
+         //
+         // ContentType ::= OBJECT IDENTIFIER
+         //
+         // SignedData ::= SEQUENCE {
+         //   version Version,
+         //   digestAlgorithms DigestAlgorithmIdentifiers,
+         //   contentInfo ContentInfo,
+         //   certificates [0] IMPLICIT ExtendedCertificatesAndCertificates
+         //                    OPTIONAL,
+         //   crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+         //   signerInfos SignerInfos }
+         //
+         // Version ::= INTEGER
+         //
+         DERValue value = der.read();
+         if (!value.isConstructed())
+           throw new DEREncodingException("malformed ContentInfo");
+         value = der.read();
+         if (!(value.getValue() instanceof OID) ||
+             ((OID) value.getValue()).equals(PKCS7_SIGNED_DATA))
+           throw new DEREncodingException("not a SignedData");
+         value = der.read();
+         if (!value.isConstructed() || value.getTag() != 0)
+           throw new DEREncodingException("malformed content");
+         value = der.read();
+         if (value.getTag() != DER.INTEGER)
+           throw new DEREncodingException("malformed Version");
+         value = der.read();
+         if (!value.isConstructed() || value.getTag() != DER.SET)
+           throw new DEREncodingException("malformed DigestAlgorithmIdentifiers");
+         der.skip(value.getLength());
+         value = der.read();
+         if (!value.isConstructed())
+           throw new DEREncodingException("malformed ContentInfo");
+         der.skip(value.getLength());
+         path = der.read();
+         if (!path.isConstructed() || path.getTag() != 0)
+           throw new DEREncodingException("no certificates");
+       }
+     else
+       throw new CertificateEncodingException("unknown encoding: " + encoding);
+ 
+     LinkedList certs = new LinkedList();
+     int len = 0;
+     while (len < path.getLength())
+       {
+         DERValue cert = der.read();
+         try
+           {
+             certs.add(new X509Certificate(new ByteArrayInputStream(cert.getEncoded())));
+           }
+         catch (CertificateException ce)
+           {
+             throw new CertificateEncodingException(ce.getMessage());
+           }
+         len += cert.getEncodedLength();
+         der.skip(cert.getLength());
+       }
+ 
+     this.path = Collections.unmodifiableList(certs);
+   }
+ 
+   private byte[] encodePki()
+     throws CertificateEncodingException, IOException
+   {
+     synchronized (path)
+       {
+         ByteArrayOutputStream out = new ByteArrayOutputStream();
+         for (Iterator i = path.iterator(); i.hasNext(); )
+           {
+             out.write(((Certificate) i.next()).getEncoded());
+           }
+         byte[] b = out.toByteArray();
+         DERValue val = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+                                     b.length, b, null);
+         return val.getEncoded();
+       }
+   }
+ 
+   private byte[] encodePKCS()
+     throws CertificateEncodingException, IOException
+   {
+     synchronized (path)
+       {
+         ArrayList signedData = new ArrayList(5);
+         signedData.add(new DERValue(DER.INTEGER, BigInteger.ONE));
+         signedData.add(new DERValue(DER.CONSTRUCTED | DER.SET,
+                                     Collections.EMPTY_SET));
+         signedData.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+           Collections.singletonList(
+             new DERValue(DER.OBJECT_IDENTIFIER, PKCS7_DATA))));
+         ByteArrayOutputStream out = new ByteArrayOutputStream();
+         for (Iterator i = path.iterator(); i.hasNext(); )
+           {
+             out.write(((Certificate) i.next()).getEncoded());
+           }
+         byte[] b = out.toByteArray();
+         signedData.add(new DERValue(DER.CONSTRUCTED | DER.CONTEXT,
+                                     b.length, b, null));
+         DERValue sdValue = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+                                         signedData);
+ 
+         ArrayList contentInfo = new ArrayList(2);
+         contentInfo.add(new DERValue(DER.OBJECT_IDENTIFIER, PKCS7_SIGNED_DATA));
+         contentInfo.add(new DERValue(DER.CONSTRUCTED | DER.CONTEXT, sdValue));
+         return new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+                             contentInfo).getEncoded();
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CertSelectorImpl.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CertSelectorImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509CertSelectorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509CertSelectorImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,197 ----
+ /* X509CertSelectorImpl.java -- implementation of an X509CertSelector.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ import java.io.IOException;
+ import java.security.Principal;
+ import java.security.cert.CertSelector;
+ import java.security.cert.Certificate;
+ import java.security.cert.X509Certificate;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Set;
+ 
+ import javax.security.auth.x500.X500Principal;
+ 
+ /**
+  * Sun's implementation of X509CertSelector sucks. This one tries to work
+  * better.
+  */
+ public class X509CertSelectorImpl implements CertSelector
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private Set issuerNames;
+   private Set subjectNames;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public X509CertSelectorImpl()
+   {
+     issuerNames = new HashSet();
+     subjectNames = new HashSet();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public void addIssuerName(byte[] issuerName) throws IOException
+   {
+     issuerNames.add(new X500DistinguishedName(issuerName));
+   }
+ 
+   public void addIssuerName(String issuerName)
+   {
+     issuerNames.add(new X500DistinguishedName(issuerName));
+   }
+ 
+   public void addIssuerName(Principal issuerName) throws IOException
+   {
+     if (issuerName instanceof X500DistinguishedName)
+       issuerNames.add(issuerName);
+     else if (issuerName instanceof X500Principal)
+       issuerNames.add(new X500DistinguishedName(((X500Principal) issuerName).getEncoded()));
+     else
+       issuerNames.add(new X500DistinguishedName(issuerName.getName()));
+   }
+ 
+   public Collection getIssuerNames()
+   {
+     return Collections.unmodifiableSet(issuerNames);
+   }
+ 
+   public void addSubjectName(byte[] subjectName) throws IOException
+   {
+     subjectNames.add(new X500DistinguishedName(subjectName));
+   }
+ 
+   public void addSubjectName(String subjectName) throws IOException
+   {
+     subjectNames.add(new X500DistinguishedName(subjectName));
+   }
+ 
+   public void addSubjectName(Principal subjectName) throws IOException
+   {
+     if (subjectName instanceof X500DistinguishedName)
+       subjectNames.add(subjectName);
+     else if (subjectName instanceof X500Principal)
+       subjectNames.add(new X500DistinguishedName(((X500Principal) subjectName).getEncoded()));
+     else
+       subjectNames.add(new X500DistinguishedName(subjectName.getName()));
+   }
+ 
+   public Collection getSubjectNames()
+   {
+     return Collections.unmodifiableSet(subjectNames);
+   }
+ 
+   public Object clone()
+   {
+     X509CertSelectorImpl copy = new X509CertSelectorImpl();
+     copy.issuerNames.addAll(issuerNames);
+     copy.subjectNames.addAll(subjectNames);
+     return copy;
+   }
+ 
+   public boolean match(Certificate cert)
+   {
+     if (!(cert instanceof X509Certificate))
+       return false;
+     boolean matchIssuer = false;
+     boolean matchSubject = false;
+     try
+       {
+         Principal p = ((X509Certificate) cert).getIssuerDN();
+         X500DistinguishedName thisName = null;
+         if (p instanceof X500DistinguishedName)
+           thisName = (X500DistinguishedName) p;
+         else if (p instanceof X500Principal)
+           thisName = new X500DistinguishedName(((X500Principal) p).getEncoded());
+         else
+           thisName = new X500DistinguishedName(p.getName());
+         if (issuerNames.isEmpty())
+           matchIssuer = true;
+         else
+           {
+             for (Iterator it = issuerNames.iterator(); it.hasNext(); )
+               {
+                 X500DistinguishedName name = (X500DistinguishedName) it.next();
+                 if (thisName.equals(name))
+                   {
+                     matchIssuer = true;
+                     break;
+                   }
+               }
+           }
+ 
+         p = ((X509Certificate) cert).getSubjectDN();
+         thisName = null;
+         if (p instanceof X500DistinguishedName)
+           thisName = (X500DistinguishedName) p;
+         else if (p instanceof X500Principal)
+           thisName = new X500DistinguishedName(((X500Principal) p).getEncoded());
+         else
+           thisName = new X500DistinguishedName(p.getName());
+         if (subjectNames.isEmpty())
+           matchSubject = true;
+         else
+           {
+             for (Iterator it = subjectNames.iterator(); it.hasNext(); )
+               {
+                 X500DistinguishedName name = (X500DistinguishedName) it.next();
+                 if (thisName.equals(name))
+                   {
+                     matchSubject = true;
+                     break;
+                   }
+               }
+           }
+       }
+     catch (Exception x)
+       {
+       }
+     return matchIssuer && matchSubject;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509Certificate.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509Certificate.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/X509Certificate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/X509Certificate.java	Sat Jan 21 00:44:41 2006
***************
*** 0 ****
--- 1,742 ----
+ /* X509Certificate.java -- X.509 certificate.
+    Copyright (C) 2003, 2004, 2006  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509;
+ 
+ import gnu.classpath.debug.Component;
+ import gnu.classpath.debug.SystemLogger;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.BitString;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.x509.ext.BasicConstraints;
+ import gnu.java.security.x509.ext.ExtendedKeyUsage;
+ import gnu.java.security.x509.ext.Extension;
+ import gnu.java.security.x509.ext.IssuerAlternativeNames;
+ import gnu.java.security.x509.ext.KeyUsage;
+ import gnu.java.security.x509.ext.SubjectAlternativeNames;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.PrintWriter;
+ import java.io.Serializable;
+ import java.io.StringWriter;
+ import java.math.BigInteger;
+ import java.security.AlgorithmParameters;
+ import java.security.InvalidKeyException;
+ import java.security.KeyFactory;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.Principal;
+ import java.security.PublicKey;
+ import java.security.Signature;
+ import java.security.SignatureException;
+ import java.security.cert.CertificateEncodingException;
+ import java.security.cert.CertificateException;
+ import java.security.cert.CertificateExpiredException;
+ import java.security.cert.CertificateNotYetValidException;
+ import java.security.cert.CertificateParsingException;
+ import java.security.interfaces.DSAParams;
+ import java.security.interfaces.DSAPublicKey;
+ import java.security.spec.DSAParameterSpec;
+ import java.security.spec.X509EncodedKeySpec;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Date;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ import java.util.logging.Level;
+ import java.util.logging.Logger;
+ 
+ import javax.security.auth.x500.X500Principal;
+ 
+ /**
+  * An implementation of X.509 certificates.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class X509Certificate extends java.security.cert.X509Certificate
+   implements Serializable, GnuPKIExtension
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   private static final Logger logger = SystemLogger.SYSTEM;
+ 
+   protected static final OID ID_DSA = new OID ("1.2.840.10040.4.1");
+   protected static final OID ID_DSA_WITH_SHA1 = new OID ("1.2.840.10040.4.3");
+   protected static final OID ID_RSA = new OID ("1.2.840.113549.1.1.1");
+   protected static final OID ID_RSA_WITH_MD2 = new OID ("1.2.840.113549.1.1.2");
+   protected static final OID ID_RSA_WITH_MD5 = new OID ("1.2.840.113549.1.1.4");
+   protected static final OID ID_RSA_WITH_SHA1 = new OID ("1.2.840.113549.1.1.5");
+   protected static final OID ID_ECDSA_WITH_SHA1 = new OID ("1.2.840.10045.4.1");
+ 
+   // This object SHOULD be serialized with an instance of
+   // java.security.cert.Certificate.CertificateRep, thus all fields are
+   // transient.
+ 
+   // The encoded certificate.
+   protected transient byte[] encoded;
+ 
+   // TBSCertificate part.
+   protected transient byte[] tbsCertBytes;
+   protected transient int version;
+   protected transient BigInteger serialNo;
+   protected transient OID algId;
+   protected transient byte[] algVal;
+   protected transient X500DistinguishedName issuer;
+   protected transient Date notBefore;
+   protected transient Date notAfter;
+   protected transient X500DistinguishedName subject;
+   protected transient PublicKey subjectKey;
+   protected transient BitString issuerUniqueId;
+   protected transient BitString subjectUniqueId;
+   protected transient Map extensions;
+ 
+   // Signature.
+   protected transient OID sigAlgId;
+   protected transient byte[] sigAlgVal;
+   protected transient byte[] signature;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new X.509 certificate from the encoded data. The input
+    * data are expected to be the ASN.1 DER encoding of the certificate.
+    *
+    * @param encoded The encoded certificate data.
+    * @throws IOException If the certificate cannot be read, possibly
+    * from a formatting error.
+    * @throws CertificateException If the data read is not an X.509
+    * certificate.
+    */
+   public X509Certificate(InputStream encoded)
+     throws CertificateException, IOException
+   {
+     super();
+     extensions = new HashMap();
+     try
+       {
+         parse(encoded);
+       }
+     catch (IOException ioe)
+       {
+         logger.log (Component.X509, "", ioe);
+         throw ioe;
+       }
+     catch (Exception e)
+       {
+         logger.log (Component.X509, "", e);
+         CertificateException ce = new CertificateException(e.getMessage());
+         ce.initCause (e);
+         throw ce;
+       }
+   }
+ 
+   protected X509Certificate()
+   {
+     extensions = new HashMap();
+   }
+ 
+   // X509Certificate methods.
+   // ------------------------------------------------------------------------
+ 
+   public void checkValidity()
+     throws CertificateExpiredException, CertificateNotYetValidException
+   {
+     checkValidity(new Date());
+   }
+ 
+   public void checkValidity(Date date)
+     throws CertificateExpiredException, CertificateNotYetValidException
+   {
+     if (date.compareTo(notBefore) < 0)
+       {
+         throw new CertificateNotYetValidException();
+       }
+     if (date.compareTo(notAfter) > 0)
+       {
+         throw new CertificateExpiredException();
+       }
+   }
+ 
+   public int getVersion()
+   {
+     return version;
+   }
+ 
+   public BigInteger getSerialNumber()
+   {
+     return serialNo;
+   }
+ 
+   public Principal getIssuerDN()
+   {
+     return issuer;
+   }
+ 
+   public X500Principal getIssuerX500Principal()
+   {
+     return new X500Principal(issuer.getDer());
+   }
+ 
+   public Principal getSubjectDN()
+   {
+     return subject;
+   }
+ 
+   public X500Principal getSubjectX500Principal()
+   {
+     return new X500Principal(subject.getDer());
+   }
+ 
+   public Date getNotBefore()
+   {
+     return (Date) notBefore.clone();
+   }
+ 
+   public Date getNotAfter()
+   {
+     return (Date) notAfter.clone();
+   }
+ 
+   public byte[] getTBSCertificate() throws CertificateEncodingException
+   {
+     return (byte[]) tbsCertBytes.clone();
+   }
+ 
+   public byte[] getSignature()
+   {
+     return (byte[]) signature.clone();
+   }
+ 
+   public String getSigAlgName()
+   {
+     if (sigAlgId.equals(ID_DSA_WITH_SHA1))
+       {
+         return "SHA1withDSA";
+       }
+     if (sigAlgId.equals(ID_RSA_WITH_MD2))
+       {
+         return "MD2withRSA";
+       }
+     if (sigAlgId.equals(ID_RSA_WITH_MD5))
+       {
+         return "MD5withRSA";
+       }
+     if (sigAlgId.equals(ID_RSA_WITH_SHA1))
+       {
+         return "SHA1withRSA";
+       }
+     return "unknown";
+   }
+ 
+   public String getSigAlgOID()
+   {
+     return sigAlgId.toString();
+   }
+ 
+   public byte[] getSigAlgParams()
+   {
+     return (byte[]) sigAlgVal.clone();
+   }
+ 
+   public boolean[] getIssuerUniqueID()
+   {
+     if (issuerUniqueId != null)
+       {
+         return issuerUniqueId.toBooleanArray();
+       }
+     return null;
+   }
+ 
+   public boolean[] getSubjectUniqueID()
+   {
+     if (subjectUniqueId != null)
+       {
+         return subjectUniqueId.toBooleanArray();
+       }
+     return null;
+   }
+ 
+   public boolean[] getKeyUsage()
+   {
+     Extension e = getExtension(KeyUsage.ID);
+     if (e != null)
+       {
+         KeyUsage ku = (KeyUsage) e.getValue();
+         boolean[] result = new boolean[9];
+         boolean[] b = ku.getKeyUsage().toBooleanArray();
+         System.arraycopy(b, 0, result, 0, b.length);
+         return result;
+       }
+     return null;
+   }
+ 
+   public List getExtendedKeyUsage() throws CertificateParsingException
+   {
+     Extension e = getExtension(ExtendedKeyUsage.ID);
+     if (e != null)
+       {
+         List a = ((ExtendedKeyUsage) e.getValue()).getPurposeIds();
+         List b = new ArrayList(a.size());
+         for (Iterator it = a.iterator(); it.hasNext(); )
+           {
+             b.add(it.next().toString());
+           }
+         return Collections.unmodifiableList(b);
+       }
+     return null;
+   }
+ 
+   public int getBasicConstraints()
+   {
+     Extension e = getExtension(BasicConstraints.ID);
+     if (e != null)
+       {
+         return ((BasicConstraints) e.getValue()).getPathLengthConstraint();
+       }
+     return -1;
+   }
+ 
+   public Collection getSubjectAlternativeNames()
+     throws CertificateParsingException
+   {
+     Extension e = getExtension(SubjectAlternativeNames.ID);
+     if (e != null)
+       {
+         return ((SubjectAlternativeNames) e.getValue()).getNames();
+       }
+     return null;
+   }
+ 
+   public Collection getIssuerAlternativeNames()
+     throws CertificateParsingException
+   {
+     Extension e = getExtension(IssuerAlternativeNames.ID);
+     if (e != null)
+       {
+         return ((IssuerAlternativeNames) e.getValue()).getNames();
+       }
+     return null;
+   }
+ 
+ // X509Extension methods.
+   // ------------------------------------------------------------------------
+ 
+   public boolean hasUnsupportedCriticalExtension()
+   {
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         Extension e = (Extension) it.next();
+         if (e.isCritical() && !e.isSupported())
+           return true;
+       }
+     return false;
+   }
+ 
+   public Set getCriticalExtensionOIDs()
+   {
+     HashSet s = new HashSet();
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         Extension e = (Extension) it.next();
+         if (e.isCritical())
+           s.add(e.getOid().toString());
+       }
+     return Collections.unmodifiableSet(s);
+   }
+ 
+   public Set getNonCriticalExtensionOIDs()
+   {
+     HashSet s = new HashSet();
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         Extension e = (Extension) it.next();
+         if (!e.isCritical())
+           s.add(e.getOid().toString());
+       }
+     return Collections.unmodifiableSet(s);
+   }
+ 
+   public byte[] getExtensionValue(String oid)
+   {
+     Extension e = getExtension(new OID(oid));
+     if (e != null)
+       {
+         return e.getValue().getEncoded();
+       }
+     return null;
+   }
+ 
+   // GnuPKIExtension method.
+   // -------------------------------------------------------------------------
+ 
+   public Extension getExtension(OID oid)
+   {
+     return (Extension) extensions.get(oid);
+   }
+ 
+   public Collection getExtensions()
+   {
+     return extensions.values();
+   }
+ 
+   // Certificate methods.
+   // -------------------------------------------------------------------------
+ 
+   public byte[] getEncoded() throws CertificateEncodingException
+   {
+     return (byte[]) encoded.clone();
+   }
+ 
+   public void verify(PublicKey key)
+     throws CertificateException, NoSuchAlgorithmException,
+            InvalidKeyException, NoSuchProviderException, SignatureException
+   {
+     Signature sig = Signature.getInstance(sigAlgId.toString());
+     doVerify(sig, key);
+   }
+ 
+   public void verify(PublicKey key, String provider)
+     throws CertificateException, NoSuchAlgorithmException,
+            InvalidKeyException, NoSuchProviderException, SignatureException
+   {
+     Signature sig = Signature.getInstance(sigAlgId.toString(), provider);
+     doVerify(sig, key);
+   }
+ 
+   public String toString()
+   {
+     StringWriter str = new StringWriter();
+     PrintWriter out = new PrintWriter(str);
+     out.println(X509Certificate.class.getName() + " {");
+     out.println("  TBSCertificate {");
+     out.println("    version = " + version + ";");
+     out.println("    serialNo = " + serialNo + ";");
+     out.println("    signature = {");
+     out.println("      algorithm = " + getSigAlgName() + ";");
+     out.print("      parameters =");
+     if (sigAlgVal != null)
+       {
+         out.println();
+         out.print(Util.hexDump(sigAlgVal, "        "));
+       }
+     else
+       {
+         out.println(" null;");
+       }
+     out.println("    }");
+     out.println("    issuer = " + issuer.getName() + ";");
+     out.println("    validity = {");
+     out.println("      notBefore = " + notBefore + ";");
+     out.println("      notAfter  = " + notAfter + ";");
+     out.println("    }");
+     out.println("    subject = " + subject.getName() + ";");
+     out.println("    subjectPublicKeyInfo = {");
+     out.println("      algorithm = " + subjectKey.getAlgorithm());
+     out.println("      key =");
+     out.print(Util.hexDump(subjectKey.getEncoded(), "        "));
+     out.println("    };");
+     out.println("    issuerUniqueId  = " + issuerUniqueId + ";");
+     out.println("    subjectUniqueId = " + subjectUniqueId + ";");
+     out.println("    extensions = {");
+     for (Iterator it = extensions.values().iterator(); it.hasNext(); )
+       {
+         out.println("      " + it.next());
+       }
+     out.println("    }");
+     out.println("  }");
+     out.println("  signatureAlgorithm = " + getSigAlgName() + ";");
+     out.println("  signatureValue =");
+     out.print(Util.hexDump(signature, "    "));
+     out.println("}");
+     return str.toString();
+   }
+ 
+   public PublicKey getPublicKey()
+   {
+     return subjectKey;
+   }
+ 
+   public boolean equals(Object other)
+   {
+     if (!(other instanceof X509Certificate))
+       return false;
+     try
+       {
+         if (other instanceof X509Certificate)
+           return Arrays.equals(encoded, ((X509Certificate) other).encoded);
+         byte[] enc = ((X509Certificate) other).getEncoded();
+         if (enc == null)
+           return false;
+         return Arrays.equals(encoded, enc);
+       }
+     catch (CertificateEncodingException cee)
+       {
+         return false;
+       }
+   }
+ 
+   // Own methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Verify this certificate's signature.
+    */
+   private void doVerify(Signature sig, PublicKey key)
+     throws CertificateException, InvalidKeyException, SignatureException
+   {
+     logger.log (Component.X509, "verifying sig={0} key={1}",
+                 new Object[] { sig, key });
+     sig.initVerify(key);
+     sig.update(tbsCertBytes);
+     if (!sig.verify(signature))
+       {
+         throw new CertificateException("signature not validated");
+       }
+   }
+ 
+   /**
+    * Parse a DER stream into an X.509 certificate.
+    *
+    * @param encoded The encoded bytes.
+    */
+   private void parse(InputStream encoded) throws Exception
+   {
+     DERReader der = new DERReader(encoded);
+ 
+     // Certificate ::= SEQUENCE {
+     DERValue cert = der.read();
+     logger.log (Component.X509, "start Certificate  len == {0}",
+                 new Integer (cert.getLength()));
+ 
+     this.encoded = cert.getEncoded();
+     if (!cert.isConstructed())
+       {
+         throw new IOException("malformed Certificate");
+       }
+ 
+     // TBSCertificate ::= SEQUENCE {
+     DERValue tbsCert = der.read();
+     if (tbsCert.getValue() != DER.CONSTRUCTED_VALUE)
+       {
+         throw new IOException("malformed TBSCertificate");
+       }
+     tbsCertBytes = tbsCert.getEncoded();
+     logger.log (Component.X509, "start TBSCertificate  len == {0}",
+                 new Integer (tbsCert.getLength()));
+ 
+     // Version ::= INTEGER [0] { v1(0), v2(1), v3(2) }
+     DERValue val = der.read();
+     if (val.getTagClass() == DER.CONTEXT && val.getTag() == 0)
+       {
+         version = ((BigInteger) der.read().getValue()).intValue() + 1;
+         val = der.read();
+       }
+     else
+       {
+         version = 1;
+       }
+     logger.log (Component.X509, "read version == {0}",
+                 new Integer (version));
+ 
+     // SerialNumber ::= INTEGER
+     serialNo = (BigInteger) val.getValue();
+     logger.log (Component.X509, "read serial number == {0}", serialNo);
+ 
+     // AlgorithmIdentifier ::= SEQUENCE {
+     val = der.read();
+     if (!val.isConstructed())
+       {
+         throw new IOException("malformed AlgorithmIdentifier");
+       }
+     int certAlgLen = val.getLength();
+     logger.log (Component.X509, "start AlgorithmIdentifier  len == {0}",
+                 new Integer (certAlgLen));
+     val = der.read();
+ 
+     //   algorithm    OBJECT IDENTIFIER,
+     algId = (OID) val.getValue();
+     logger.log (Component.X509, "read algorithm ID == {0}", algId);
+ 
+     //   parameters   ANY DEFINED BY algorithm OPTIONAL }
+     if (certAlgLen > val.getEncodedLength())
+       {
+         val = der.read();
+         if (val == null)
+           {
+             algVal = null;
+           }
+         else
+           {
+             algVal = val.getEncoded();
+ 
+             if (val.isConstructed())
+               encoded.skip(val.getLength());
+           }
+         logger.log (Component.X509, "read algorithm parameters == {0}", algVal);
+       }
+ 
+     // issuer   Name,
+     val = der.read();
+     issuer = new X500DistinguishedName(val.getEncoded());
+     der.skip(val.getLength());
+     logger.log (Component.X509, "read issuer == {0}", issuer);
+ 
+     // Validity ::= SEQUENCE {
+     //   notBefore   Time,
+     //   notAfter    Time }
+     if (!der.read().isConstructed())
+       {
+         throw new IOException("malformed Validity");
+       }
+     notBefore = (Date) der.read().getValue();
+     logger.log (Component.X509, "read notBefore == {0}", notBefore);
+     notAfter  = (Date) der.read().getValue();
+     logger.log (Component.X509, "read notAfter == {0}", notAfter);
+ 
+     // subject   Name,
+     val = der.read();
+     subject = new X500DistinguishedName(val.getEncoded());
+     der.skip(val.getLength());
+     logger.log (Component.X509, "read subject == {0}", subject);
+ 
+     // SubjectPublicKeyInfo ::= SEQUENCE {
+     //   algorithm         AlgorithmIdentifier,
+     //   subjectPublicKey  BIT STRING }
+     DERValue spki = der.read();
+     if (!spki.isConstructed())
+       {
+         throw new IOException("malformed SubjectPublicKeyInfo");
+       }
+     KeyFactory spkFac = KeyFactory.getInstance("X.509");
+     subjectKey = spkFac.generatePublic(new X509EncodedKeySpec(spki.getEncoded()));
+     der.skip(spki.getLength());
+     logger.log (Component.X509, "read subjectPublicKey == {0}", subjectKey);
+ 
+     val = der.read();
+     if (version >= 2 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 1)
+       {
+         byte[] b = (byte[]) val.getValue();
+         issuerUniqueId = new BitString(b, 1, b.length-1, b[0] & 0xFF);
+         logger.log (Component.X509, "read issuerUniqueId == {0}", issuerUniqueId);
+         val = der.read();
+       }
+     if (version >= 2 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 2)
+       {
+         byte[] b = (byte[]) val.getValue();
+         subjectUniqueId = new BitString(b, 1, b.length-1, b[0] & 0xFF);
+         logger.log (Component.X509, "read subjectUniqueId == {0}", subjectUniqueId);
+         val = der.read();
+       }
+     if (version >= 3 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 3)
+       {
+         val = der.read();
+         logger.log (Component.X509, "start Extensions  len == {0}",
+                     new Integer (val.getLength()));
+         int len = 0;
+         while (len < val.getLength())
+           {
+             DERValue ext = der.read();
+             logger.log (Component.X509, "start extension  len == {0}",
+                         new Integer (ext.getLength()));
+             Extension e = new Extension(ext.getEncoded());
+             extensions.put(e.getOid(), e);
+             der.skip(ext.getLength());
+             len += ext.getEncodedLength();
+             logger.log (Component.X509, "read extension {0} == {1}",
+                         new Object[] { e.getOid (), e });
+             logger.log (Component.X509, "count == {0}", new Integer (len));
+           }
+ 
+         val = der.read ();
+       }
+ 
+     logger.log (Component.X509, "read value {0}", val);
+     if (!val.isConstructed())
+       {
+         throw new CertificateException ("malformed AlgorithmIdentifier");
+       }
+     int sigAlgLen = val.getLength();
+     logger.log (Component.X509, "start AlgorithmIdentifier  len == {0}",
+                 new Integer (sigAlgLen));
+     val = der.read();
+     sigAlgId = (OID) val.getValue();
+     logger.log (Component.X509, "read algorithm id == {0}", sigAlgId);
+     if (sigAlgLen > val.getEncodedLength())
+       {
+         val = der.read();
+         if (val.getValue() == null)
+           {
+             if (subjectKey instanceof DSAPublicKey)
+               {
+                 AlgorithmParameters params =
+                   AlgorithmParameters.getInstance("DSA");
+                 DSAParams dsap = ((DSAPublicKey) subjectKey).getParams();
+                 DSAParameterSpec spec =
+                   new DSAParameterSpec(dsap.getP(), dsap.getQ(), dsap.getG());
+                 params.init(spec);
+                 sigAlgVal = params.getEncoded();
+               }
+           }
+         else
+           {
+             sigAlgVal = (byte[]) val.getEncoded();
+           }
+         if (val.isConstructed())
+           {
+             encoded.skip(val.getLength());
+           }
+         logger.log (Component.X509, "read parameters == {0}", sigAlgVal);
+       }
+     signature = ((BitString) der.read().getValue()).toByteArray();
+     logger.log (Component.X509, "read signature ==\n{0}", Util.hexDump(signature, ">>>> "));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,133 ----
+ /* AuthorityKeyIdentifier.java -- Authority key identifier extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.x509.Util;
+ 
+ import java.io.IOException;
+ import java.math.BigInteger;
+ 
+ public class AuthorityKeyIdentifier extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.35");
+ 
+   private final byte[] keyIdentifier;
+   private final GeneralNames authorityCertIssuer;
+   private final BigInteger authorityCertSerialNumber;
+ 
+   // Contstructor.
+   // -------------------------------------------------------------------------
+ 
+   public AuthorityKeyIdentifier(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERReader der = new DERReader(encoded);
+ 
+     // AuthorityKeyIdentifier ::= SEQUENCE {
+     DERValue val = der.read();
+     if (!val.isConstructed())
+       throw new IOException("malformed AuthorityKeyIdentifier");
+     if (val.getLength() > 0)
+       val = der.read();
+ 
+     //   keyIdentifier  [0] KeyIdentifier OPTIONAL,
+     //   KeyIdentifier ::= OCTET STRING
+     if (val.getTagClass() == DER.APPLICATION && val.getTag() == 0)
+       {
+         keyIdentifier = (byte[]) val.getValue();
+         val = der.read();
+       }
+     else
+       keyIdentifier = null;
+ 
+     //   authorityCertIssuer  [1] GeneralNames OPTIONAL,
+     if (val.getTagClass() == DER.APPLICATION && val.getTag() == 1)
+       {
+         byte[] b = val.getEncoded();
+         b[0] = (byte) (DER.CONSTRUCTED|DER.SEQUENCE);
+         authorityCertIssuer = new GeneralNames(b);
+         der.skip(val.getLength());
+         val = der.read();
+       }
+     else
+       authorityCertIssuer = null;
+ 
+     //   authorityCertSerialNumber  [2] CertificateSerialNumber OPTIONAL }
+     if (val.getTagClass() == DER.APPLICATION && val.getTag() == 2)
+       {
+         authorityCertSerialNumber = new BigInteger((byte[]) val.getValue());
+       }
+     else
+       authorityCertSerialNumber = null;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public byte[] getKeyIdentifier()
+   {
+     return keyIdentifier != null ? (byte[]) keyIdentifier.clone() : null;
+   }
+ 
+   public GeneralNames getAuthorityCertIssuer()
+   {
+     return authorityCertIssuer;
+   }
+ 
+   public BigInteger getAuthorityCertSerialNumber()
+   {
+     return authorityCertSerialNumber;
+   }
+ 
+   public String toString()
+   {
+     return AuthorityKeyIdentifier.class.getName() + " [ keyId=" +
+       (keyIdentifier != null ? Util.toHexString (keyIdentifier, ':') : "nil") +
+       " authorityCertIssuer=" + authorityCertIssuer +
+       " authorityCertSerialNumbe=" + authorityCertSerialNumber + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/BasicConstraints.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/BasicConstraints.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/BasicConstraints.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/BasicConstraints.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,129 ----
+ /* BasicConstraints.java -- the basic constraints extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.util.ArrayList;
+ import java.util.List;
+ 
+ public class BasicConstraints extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.19");
+ 
+   private final boolean ca;
+   private final int pathLenConstraint;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public BasicConstraints(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERReader der = new DERReader(encoded);
+     DERValue bc = der.read();
+     if (!bc.isConstructed())
+       throw new IOException("malformed BasicConstraints");
+     DERValue val = bc;
+     if (bc.getLength() > 0)
+       val = der.read();
+     if (val.getTag() == DER.BOOLEAN)
+       {
+         ca = ((Boolean) val.getValue()).booleanValue();
+         if (val.getEncodedLength() < bc.getLength())
+           val = der.read();
+       }
+     else
+       ca = false;
+     if (val.getTag() == DER.INTEGER)
+       {
+         pathLenConstraint = ((BigInteger) val.getValue()).intValue();
+       }
+     else
+       pathLenConstraint = -1;
+   }
+ 
+   public BasicConstraints (final boolean ca, final int pathLenConstraint)
+   {
+     this.ca = ca;
+     this.pathLenConstraint = pathLenConstraint;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public boolean isCA()
+   {
+     return ca;
+   }
+ 
+   public int getPathLengthConstraint()
+   {
+     return pathLenConstraint;
+   }
+ 
+   public byte[] getEncoded()
+   {
+     if (encoded == null)
+       {
+         List bc = new ArrayList (2);
+         bc.add (new DERValue (DER.BOOLEAN, Boolean.valueOf (ca)));
+         if (pathLenConstraint >= 0)
+           bc.add (new DERValue (DER.INTEGER,
+                                 BigInteger.valueOf ((long) pathLenConstraint)));
+         encoded = new DERValue (DER.CONSTRUCTED|DER.SEQUENCE, bc).getEncoded();
+       }
+     return (byte[]) encoded.clone();
+   }
+ 
+   public String toString()
+   {
+     return BasicConstraints.class.getName() + " [ isCA=" + ca +
+       " pathLen=" + pathLenConstraint + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/CRLNumber.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/CRLNumber.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/CRLNumber.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/CRLNumber.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /* CRLNumber.java -- CRL number extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.math.BigInteger;
+ 
+ public class CRLNumber extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.20");
+ 
+   private final BigInteger number;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public CRLNumber(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERValue val = DERReader.read(encoded);
+     if (val.getTag() != DER.INTEGER)
+       throw new IOException("malformed CRLNumber");
+     number = (BigInteger) val.getValue();
+   }
+ 
+   public CRLNumber (final BigInteger number)
+   {
+     this.number = number;
+   }
+ 
+   // Instance method.
+   // -------------------------------------------------------------------------
+ 
+   public BigInteger getNumber()
+   {
+     return number;
+   }
+ 
+   public byte[] getEncoded()
+   {
+     if (encoded == null)
+       {
+         encoded = new DERValue (DER.INTEGER, number).getEncoded();
+       }
+     return (byte[]) encoded.clone();
+   }
+ 
+   public String toString()
+   {
+     return CRLNumber.class.getName() + " [ " + number + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/CertificatePolicies.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/CertificatePolicies.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/CertificatePolicies.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/CertificatePolicies.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,189 ----
+ /* CertificatePolicies.java -- certificate policy extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.security.cert.PolicyQualifierInfo;
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Map;
+ 
+ public class CertificatePolicies extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.32");
+ 
+   private final List policies;
+   private final Map policyQualifierInfos;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public CertificatePolicies(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERReader der = new DERReader(encoded);
+     DERValue pol = der.read();
+     if (!pol.isConstructed())
+       throw new IOException("malformed CertificatePolicies");
+ 
+     int len = 0;
+     LinkedList policyList = new LinkedList();
+     HashMap qualifierMap = new HashMap();
+     while (len < pol.getLength())
+       {
+         DERValue policyInfo = der.read();
+         if (!policyInfo.isConstructed())
+           throw new IOException("malformed PolicyInformation");
+         DERValue val = der.read();
+         if (val.getTag() != DER.OBJECT_IDENTIFIER)
+           throw new IOException("malformed CertPolicyId");
+         OID policyId = (OID) val.getValue();
+         policyList.add(policyId);
+         if (val.getEncodedLength() < policyInfo.getLength())
+           {
+             DERValue qual = der.read();
+             int len2 = 0;
+             LinkedList quals = new LinkedList();
+             while (len2 < qual.getLength())
+               {
+                 val = der.read();
+                 quals.add(new PolicyQualifierInfo(val.getEncoded()));
+                 der.skip(val.getLength());
+                 len2 += val.getEncodedLength();
+               }
+             qualifierMap.put(policyId, quals);
+           }
+         len += policyInfo.getEncodedLength();
+       }
+ 
+     policies = Collections.unmodifiableList(policyList);
+     policyQualifierInfos = Collections.unmodifiableMap(qualifierMap);
+   }
+ 
+   public CertificatePolicies (final List policies,
+                               final Map policyQualifierInfos)
+   {
+     for (Iterator it = policies.iterator(); it.hasNext(); )
+       if (!(it.next() instanceof OID))
+         throw new IllegalArgumentException ("policies must be OIDs");
+     for (Iterator it = policyQualifierInfos.entrySet().iterator(); it.hasNext();)
+       {
+         Map.Entry e = (Map.Entry) it.next();
+         if (!(e.getKey() instanceof OID) || !policies.contains (e.getKey()))
+           throw new IllegalArgumentException
+             ("policyQualifierInfos keys must be OIDs");
+         if (!(e.getValue() instanceof List))
+           throw new IllegalArgumentException
+             ("policyQualifierInfos values must be Lists of PolicyQualifierInfos");
+         for (Iterator it2 = ((List) e.getValue()).iterator(); it.hasNext(); )
+           if (!(it2.next() instanceof PolicyQualifierInfo))
+             throw new IllegalArgumentException
+               ("policyQualifierInfos values must be Lists of PolicyQualifierInfos");
+       }
+     this.policies = Collections.unmodifiableList (new ArrayList (policies));
+     this.policyQualifierInfos = Collections.unmodifiableMap
+       (new HashMap (policyQualifierInfos));
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public List getPolicies()
+   {
+     return policies;
+   }
+ 
+   public List getPolicyQualifierInfos(OID oid)
+   {
+     return (List) policyQualifierInfos.get(oid);
+   }
+ 
+   public byte[] getEncoded()
+   {
+     if (encoded == null)
+       {
+         List pol = new ArrayList (policies.size());
+         for (Iterator it = policies.iterator(); it.hasNext(); )
+           {
+             OID policy = (OID) it.next();
+             List qualifiers = getPolicyQualifierInfos (policy);
+             List l = new ArrayList (qualifiers == null ? 1 : 2);
+             l.add (new DERValue (DER.OBJECT_IDENTIFIER, policy));
+             if (qualifiers != null)
+               {
+                 List ll = new ArrayList (qualifiers.size());
+                 for (Iterator it2 = qualifiers.iterator(); it.hasNext(); )
+                   {
+                     PolicyQualifierInfo info = (PolicyQualifierInfo) it2.next();
+                     try
+                       {
+                         ll.add (DERReader.read (info.getEncoded()));
+                       }
+                     catch (IOException ioe)
+                       {
+                       }
+                   }
+                 l.add (new DERValue (DER.CONSTRUCTED|DER.SEQUENCE, ll));
+               }
+             pol.add (new DERValue (DER.CONSTRUCTED|DER.SEQUENCE, l));
+           }
+         encoded = new DERValue (DER.CONSTRUCTED|DER.SEQUENCE, pol).getEncoded();
+       }
+     return (byte[]) encoded.clone();
+   }
+ 
+   public String toString()
+   {
+     return CertificatePolicies.class.getName() + " [ policies=" + policies +
+       " policyQualifierInfos=" + policyQualifierInfos + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,95 ----
+ /* ExtendedKeyUsage.java -- the extended key usage extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.util.Collections;
+ import java.util.LinkedList;
+ import java.util.List;
+ 
+ public class ExtendedKeyUsage extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.37");
+ 
+   private final List purposeIds;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public ExtendedKeyUsage(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERReader der = new DERReader(encoded);
+     DERValue usageList = der.read();
+     if (!usageList.isConstructed())
+       throw new IOException("malformed ExtKeyUsageSyntax");
+     int len = 0;
+     purposeIds = new LinkedList();
+     while (len < usageList.getLength())
+       {
+         DERValue val = der.read();
+         if (val.getTag() != DER.OBJECT_IDENTIFIER)
+           throw new IOException("malformed KeyPurposeId");
+         purposeIds.add(val.getValue());
+         len += val.getEncodedLength();
+       }
+   }
+ 
+   // Instance method.
+   // -------------------------------------------------------------------------
+ 
+   public List getPurposeIds()
+   {
+     return Collections.unmodifiableList(purposeIds);
+   }
+ 
+   public String toString()
+   {
+     return ExtendedKeyUsage.class.getName() + " [ " + purposeIds + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/Extension.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/Extension.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/Extension.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/Extension.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,297 ----
+ /* Extension.java -- an X.509 certificate or CRL extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.x509.Util;
+ 
+ import java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.List;
+ 
+ public class Extension
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private static final boolean DEBUG = false;
+   private static void debug(String msg)
+   {
+     System.err.print(">> Extension: ");
+     System.err.println(msg);
+   }
+ 
+   /**
+    * This extension's object identifier.
+    */
+   protected final OID oid;
+ 
+   /**
+    * The criticality flag.
+    */
+   protected final boolean critical;
+ 
+   /**
+    * Whether or not this extension is locally supported.
+    */
+   protected boolean isSupported;
+ 
+   /**
+    * The extension value.
+    */
+   protected final Value value;
+ 
+   /**
+    * The DER encoded form.
+    */
+   protected byte[] encoded;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public Extension(byte[] encoded) throws IOException
+   {
+     this.encoded = (byte[]) encoded.clone();
+     DERReader der = new DERReader(encoded);
+ 
+     // Extension ::= SEQUENCE {
+     DERValue val = der.read();
+     if (DEBUG) debug("read val  tag == " + val.getTag() + " len == " + val.getLength());
+     if (!val.isConstructed())
+       throw new IOException("malformed Extension");
+ 
+     //   extnID    OBJECT IDENTIFIER,
+     val = der.read();
+     if (val.getTag() != DER.OBJECT_IDENTIFIER)
+       throw new IOException("expecting OBJECT IDENTIFIER");
+     oid = (OID) val.getValue();
+     if (DEBUG) debug("read oid == " + oid);
+ 
+     //   critical  BOOLEAN DEFAULT FALSE,
+     val = der.read();
+     if (val.getTag() == DER.BOOLEAN)
+       {
+         critical = ((Boolean) val.getValue()).booleanValue();
+         val = der.read();
+       }
+     else
+       critical = false;
+     if (DEBUG) debug("is critical == " + critical);
+ 
+     //   extnValue OCTET STRING }
+     if (val.getTag() != DER.OCTET_STRING)
+       throw new IOException("expecting OCTET STRING");
+     byte[] encval = (byte[]) val.getValue();
+     isSupported = true;
+     if (oid.equals(AuthorityKeyIdentifier.ID))
+       {
+         value = new AuthorityKeyIdentifier(encval);
+       }
+     else if (oid.equals(SubjectKeyIdentifier.ID))
+       {
+         value = new SubjectKeyIdentifier(encval);
+       }
+     else if (oid.equals(KeyUsage.ID))
+       {
+         value = new KeyUsage(encval);
+       }
+     else if (oid.equals(PrivateKeyUsagePeriod.ID))
+       {
+         value = new PrivateKeyUsagePeriod(encval);
+       }
+     else if (oid.equals(CertificatePolicies.ID))
+       {
+         value = new CertificatePolicies(encval);
+       }
+     else if (oid.equals (PolicyConstraint.ID))
+       {
+         value = new PolicyConstraint (encval);
+       }
+     else if (oid.equals(PolicyMappings.ID))
+       {
+         value = new PolicyMappings(encval);
+       }
+     else if (oid.equals(SubjectAlternativeNames.ID))
+       {
+         value = new SubjectAlternativeNames(encval);
+       }
+     else if (oid.equals(IssuerAlternativeNames.ID))
+       {
+         value = new IssuerAlternativeNames(encval);
+       }
+     else if (oid.equals(BasicConstraints.ID))
+       {
+         value = new BasicConstraints(encval);
+       }
+     else if (oid.equals(ExtendedKeyUsage.ID))
+       {
+         value = new ExtendedKeyUsage(encval);
+       }
+     else if (oid.equals(CRLNumber.ID))
+       {
+         value = new CRLNumber(encval);
+       }
+     else if (oid.equals(ReasonCode.ID))
+       {
+         value = new ReasonCode(encval);
+       }
+     else
+       {
+         value = new Value(encval);
+         isSupported = false;
+       }
+     if (DEBUG) debug("read value == " + value);
+   }
+ 
+   public Extension (final OID oid, final Value value, final boolean critical)
+   {
+     this.oid = oid;
+     this.value = value;
+     this.critical = critical;
+     isSupported = true;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public OID getOid()
+   {
+     return oid;
+   }
+ 
+   public boolean isCritical()
+   {
+     return critical;
+   }
+ 
+   public boolean isSupported()
+   {
+     return isSupported;
+   }
+ 
+   public Value getValue()
+   {
+     return value;
+   }
+ 
+   public byte[] getEncoded()
+   {
+     if (encoded == null)
+       encode();
+     return (byte[]) encoded.clone();
+   }
+ 
+   public String toString()
+   {
+     return Extension.class.getName() + " [ id=" + oid + " critical=" +
+       critical + " value=" + value + " ]";
+   }
+ 
+   public DERValue getDerValue()
+   {
+     List ext = new ArrayList (3);
+     ext.add (new DERValue (DER.OBJECT_IDENTIFIER, oid));
+     ext.add (new DERValue (DER.BOOLEAN, Boolean.valueOf (critical)));
+     ext.add (new DERValue (DER.OCTET_STRING, value.getEncoded()));
+     return new DERValue (DER.CONSTRUCTED|DER.SEQUENCE, ext);
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private void encode()
+   {
+     encoded = getDerValue().getEncoded();
+   }
+ 
+   // Inner class.
+   // -------------------------------------------------------------------------
+ 
+   public static class Value
+   {
+ 
+     // Fields.
+     // -----------------------------------------------------------------------
+ 
+     protected byte[] encoded;
+ 
+     // Constructor.
+     // -----------------------------------------------------------------------
+ 
+     public Value(byte[] encoded)
+     {
+       this.encoded = (byte[]) encoded.clone();
+     }
+ 
+     protected Value() { }
+ 
+     // Instance methods.
+     // -----------------------------------------------------------------------
+ 
+     public byte[] getEncoded()
+     {
+       return (byte[]) encoded;
+     }
+ 
+     public int hashCode()
+     {
+       int result = 0;
+       for (int i = 0; i < encoded.length; ++i)
+         result = result * 31 + encoded[i];
+       return result;
+     }
+ 
+     public boolean equals(Object o)
+     {
+       if (!(o instanceof Value))
+         return false;
+       return Arrays.equals(encoded, ((Value) o).encoded);
+     }
+ 
+     public String toString()
+     {
+       return Util.toHexString(encoded, ':');
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/GeneralNames.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/GeneralNames.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/GeneralNames.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/GeneralNames.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,155 ----
+ /* GeneralNames.java -- the GeneralNames object
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.x509.X500DistinguishedName;
+ 
+ import java.io.IOException;
+ import java.net.InetAddress;
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ 
+ public class GeneralNames
+ {
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public static final int OTHER_NAME     = 0;
+   public static final int RFC822_NAME    = 1;
+   public static final int DNS_NAME       = 2;
+   public static final int X400_ADDRESS   = 3;
+   public static final int DIRECTORY_NAME = 4;
+   public static final int EDI_PARTY_NAME = 5;
+   public static final int URI            = 6;
+   public static final int IP_ADDRESS     = 7;
+   public static final int REGISTERED_ID  = 8;
+ 
+   private List names;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public GeneralNames(final byte[] encoded) throws IOException
+   {
+     names = new LinkedList();
+     DERReader der = new DERReader(encoded);
+     DERValue nameList = der.read();
+     if (!nameList.isConstructed())
+       throw new IOException("malformed GeneralNames");
+     int len = 0;
+     while (len < nameList.getLength())
+       {
+         DERValue name = der.read();
+         List namePair = new ArrayList(2);
+         if (name.getTagClass() != DER.APPLICATION)
+           throw new IOException("malformed GeneralName");
+         namePair.add(new Integer(name.getTag()));
+         DERValue val = null;
+         switch (name.getTag())
+           {
+           case RFC822_NAME:
+           case DNS_NAME:
+           case X400_ADDRESS:
+           case URI:
+             namePair.add(new String((byte[]) name.getValue()));
+             break;
+ 
+           case OTHER_NAME:
+           case EDI_PARTY_NAME:
+             namePair.add(name.getValue());
+             break;
+ 
+           case DIRECTORY_NAME:
+             byte[] b = name.getEncoded();
+             b[0] = (byte) (DER.CONSTRUCTED|DER.SEQUENCE);
+             namePair.add(new X500DistinguishedName(b).toString());
+             break;
+ 
+           case IP_ADDRESS:
+             namePair.add(InetAddress.getByAddress((byte[]) name.getValue())
+                          .getHostAddress());
+             break;
+ 
+           case REGISTERED_ID:
+             byte[] bb = name.getEncoded();
+             bb[0] = (byte) DER.OBJECT_IDENTIFIER;
+             namePair.add(new OID(bb).toString());
+             break;
+ 
+           default:
+             throw new IOException("unknown tag " + name.getTag());
+           }
+         names.add(namePair);
+         len += name.getEncodedLength();
+       }
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public List getNames()
+   {
+     List l = new ArrayList(names.size());
+     for (Iterator it = names.iterator(); it.hasNext(); )
+       {
+         List ll = (List) it.next();
+         List pair = new ArrayList(2);
+         pair.add(ll.get(0));
+         if (ll.get(1) instanceof byte[])
+           pair.add(((byte[]) ll.get(1)).clone());
+         else
+           pair.add(ll.get(1));
+         l.add(Collections.unmodifiableList(pair));
+       }
+     return Collections.unmodifiableList(l);
+   }
+ 
+   public String toString()
+   {
+     return GeneralNames.class.getName() + " [ " + names + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* IssuerAlternatuveNames.java -- issuer alternative names extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ 
+ import java.io.IOException;
+ import java.util.List;
+ 
+ public class IssuerAlternativeNames extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.18");
+ 
+   private final GeneralNames names;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public IssuerAlternativeNames(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     names = new GeneralNames(encoded);
+   }
+ 
+   // Instance method.
+   // -------------------------------------------------------------------------
+ 
+   public List getNames()
+   {
+     return names.getNames();
+   }
+ 
+   public String toString()
+   {
+     return IssuerAlternativeNames.class.getName() + " [ " + names + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/KeyUsage.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/KeyUsage.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/KeyUsage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/KeyUsage.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* KeyUsage.java -- the key usage extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.BitString;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ 
+ public class KeyUsage extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.15");
+   public static final int DIGITAL_SIGNATURE = 0;
+   public static final int NON_REPUDIATION   = 1;
+   public static final int KEY_ENCIPHERMENT  = 2;
+   public static final int DATA_ENCIPHERMENT = 3;
+   public static final int KEY_AGREEMENT     = 4;
+   public static final int KEY_CERT_SIGN     = 5;
+   public static final int CRL_SIGN          = 6;
+   public static final int ENCIPHER_ONLY     = 7;
+   public static final int DECIPHER_ONLY     = 8;
+ 
+   private final BitString keyUsage;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public KeyUsage(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERValue val = DERReader.read(encoded);
+     if (val.getTag() != DER.BIT_STRING)
+       throw new IOException("malformed KeyUsage");
+     keyUsage = (BitString) val.getValue();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public BitString getKeyUsage()
+   {
+     return keyUsage;
+   }
+ 
+   public String toString()
+   {
+     return KeyUsage.class.getName() + " [ " + keyUsage + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/PolicyConstraint.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/PolicyConstraint.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/PolicyConstraint.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/PolicyConstraint.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,107 ----
+ /* PolicyConstraint.java -- policyConstraint extension
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.math.BigInteger;
+ 
+ public class PolicyConstraint extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID ("2.5.29.36");
+ 
+   private final int requireExplicitPolicy;
+   private final int inhibitPolicyMapping;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public PolicyConstraint (final byte[] encoded) throws IOException
+   {
+     super (encoded);
+     int rpc = -1, ipm = -1;
+     DERReader der = new DERReader(encoded);
+     DERValue pc = der.read();
+     if (!pc.isConstructed())
+       throw new IOException("malformed PolicyConstraints");
+     DERValue val;
+     int len = pc.getLength();
+     while (len > 0)
+       {
+         val = der.read();
+         if (val.getTag() == 0)
+           rpc = new BigInteger ((byte[]) val.getValue()).intValue();
+         else if (val.getTag() == 1)
+           ipm = new BigInteger ((byte[]) val.getValue()).intValue();
+         else
+           throw new IOException ("invalid policy constraint");
+         len -= val.getEncodedLength();
+       }
+ 
+     requireExplicitPolicy = rpc;
+     inhibitPolicyMapping = ipm;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public int getRequireExplicitPolicy()
+   {
+     return requireExplicitPolicy;
+   }
+ 
+   public int getInhibitPolicyMapping()
+   {
+     return inhibitPolicyMapping;
+   }
+ 
+   public String toString()
+   {
+     return PolicyConstraint.class.getName() + " [ requireExplicitPolicy=" +
+       requireExplicitPolicy + " inhibitPolicyMapping=" + inhibitPolicyMapping
+       + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/PolicyMappings.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/PolicyMappings.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/PolicyMappings.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/PolicyMappings.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /* PolicyMappings.java -- policy mappings extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ public class PolicyMappings extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.33");
+ 
+   private final Map mappings;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public PolicyMappings(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERReader der = new DERReader(encoded);
+     DERValue maps = der.read();
+     if (!maps.isConstructed())
+       throw new IOException("malformed PolicyMappings");
+     int len = 0;
+     HashMap _mappings = new HashMap();
+     while (len < maps.getLength())
+       {
+         DERValue map = der.read();
+         if (!map.isConstructed())
+           throw new IOException("malformed PolicyMapping");
+         DERValue val = der.read();
+         if (val.getTag() != DER.OBJECT_IDENTIFIER)
+           throw new IOException("malformed PolicyMapping");
+         OID issuerPolicy = (OID) val.getValue();
+         val = der.read();
+         if (val.getTag() != DER.OBJECT_IDENTIFIER)
+           throw new IOException("malformed PolicyMapping");
+         OID subjectPolicy = (OID) val.getValue();
+         _mappings.put(issuerPolicy, subjectPolicy);
+         len += map.getEncodedLength();
+       }
+     mappings = Collections.unmodifiableMap(_mappings);
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public OID getSubjectDomainPolicy(OID issuerDomainPolicy)
+   {
+     return (OID) mappings.get(issuerDomainPolicy);
+   }
+ 
+   public String toString()
+   {
+     return PolicyMappings.class.getName() + " [ " + mappings + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,105 ----
+ /* PrivateKeyUsagePeriod.java -- private key usage period extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.util.Date;
+ 
+ public class PrivateKeyUsagePeriod extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.16");
+ 
+   private final Date notBefore;
+   private final Date notAfter;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public PrivateKeyUsagePeriod(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERReader der = new DERReader(encoded);
+     DERValue val = der.read();
+     if (!val.isConstructed())
+       throw new IOException("malformed PrivateKeyUsagePeriod");
+     if (val.getLength() > 0)
+       val = der.read();
+     if (val.getTagClass() == DER.APPLICATION || val.getTag() == 0)
+       {
+         notBefore = (Date) val.getValueAs (DER.GENERALIZED_TIME);
+         val = der.read();
+       }
+     else
+       notBefore = null;
+     if (val.getTagClass() == DER.APPLICATION || val.getTag() == 1)
+       {
+         notAfter = (Date) val.getValueAs (DER.GENERALIZED_TIME);
+       }
+     else
+       notAfter = null;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public Date getNotBefore()
+   {
+     return notBefore != null ? (Date) notBefore.clone() : null;
+   }
+ 
+   public Date getNotAfter()
+   {
+     return notAfter != null ? (Date) notAfter.clone() : null;
+   }
+ 
+   public String toString()
+   {
+     return PrivateKeyUsagePeriod.class.getName() + " [ notBefore=" + notBefore
+       + " notAfter=" + notAfter + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/ReasonCode.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/ReasonCode.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/ReasonCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/ReasonCode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* ReasonCode.java -- a reason code for a certificate revocation.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.math.BigInteger;
+ 
+ public class ReasonCode extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.21");
+ 
+   public final int reason;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public ReasonCode(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERValue val = DERReader.read(encoded);
+     if (val.getTag() != DER.ENUMERATED)
+       throw new IOException("malformed CRLReason");
+     reason = ((BigInteger) val.getValue()).intValue();
+     if (reason < 0 || reason == 7 || reason > 10)
+       throw new IOException("illegal reason: " + reason);
+   }
+ 
+   // Instance method.
+   // -------------------------------------------------------------------------
+ 
+   public int getReasonCode()
+   {
+     return reason;
+   }
+ 
+   public String toString()
+   {
+     return ReasonCode.class.getName() + " [ " + reason + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/SubjectAlternativeNames.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/SubjectAlternativeNames.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/SubjectAlternativeNames.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/SubjectAlternativeNames.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* SubjectAlternatuveNames.java -- subject alternative names extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ 
+ import java.io.IOException;
+ import java.util.List;
+ 
+ public class SubjectAlternativeNames extends Extension.Value
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.17");
+ 
+   private final GeneralNames names;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public SubjectAlternativeNames(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     names = new GeneralNames(encoded);
+   }
+ 
+   // Instance method.
+   // -------------------------------------------------------------------------
+ 
+   public List getNames()
+   {
+     return names.getNames();
+   }
+ 
+   public String toString()
+   {
+     return SubjectAlternativeNames.class.getName() + " [ " + names + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/SubjectKeyIdentifier.java gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/SubjectKeyIdentifier.java
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/SubjectKeyIdentifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/SubjectKeyIdentifier.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,84 ----
+ /* SubjectKeyIdentifier.java -- subject key identifier extension.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.security.x509.ext;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ import gnu.java.security.x509.Util;
+ 
+ import java.io.IOException;
+ 
+ public class SubjectKeyIdentifier extends Extension.Value
+ {
+ 
+   // Constant.
+   // -------------------------------------------------------------------------
+ 
+   public static final OID ID = new OID("2.5.29.14");
+ 
+   private final byte[] keyIdentifier;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public SubjectKeyIdentifier(final byte[] encoded) throws IOException
+   {
+     super(encoded);
+     DERValue val = DERReader.read(encoded);
+     if (val.getTag() != DER.OCTET_STRING)
+       throw new IOException("malformed SubjectKeyIdentifier");
+     keyIdentifier = (byte[]) val.getValue();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public byte[] getKeyIdentifier()
+   {
+     return (byte[]) keyIdentifier.clone();
+   }
+ 
+   public String toString()
+   {
+     return SubjectKeyIdentifier.class.getName() + " [ " +
+       Util.toHexString (keyIdentifier, ':') + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/package.html gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/ext/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/ext/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.security.x509.ext package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.security.x509.ext</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/security/x509/package.html gcc-4.1.0/libjava/classpath/gnu/java/security/x509/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/security/x509/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/security/x509/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.security.x509 package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.security.x509</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/AttributedFormatBuffer.java gcc-4.1.0/libjava/classpath/gnu/java/text/AttributedFormatBuffer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/text/AttributedFormatBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/AttributedFormatBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,247 ----
+ /* AttributedFormatBuffer.java -- Implements an attributed FormatBuffer.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.java.text;
+ 
+ import java.text.AttributedCharacterIterator;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ 
+ /**
+  * This class is an implementation of a FormatBuffer with attributes.
+  * 
+  * @author Guilhem Lavaux <guilhem@kaffe.org>
+  * @date April 10, 2004
+  */
+ public class AttributedFormatBuffer implements FormatBuffer
+ {
+   private StringBuffer buffer;
+   private ArrayList ranges;
+   private ArrayList attributes;
+   private int[] a_ranges;
+   private HashMap[] a_attributes; 
+   private int startingRange;
+   AttributedCharacterIterator.Attribute defaultAttr;
+ 
+   /**
+    * This constructor accepts a StringBuffer. If the buffer contains
+    * already some characters they will not be attributed. 
+    */
+   public AttributedFormatBuffer(StringBuffer buffer)
+   {
+     this.buffer = buffer;
+     this.ranges = new ArrayList();
+     this.attributes = new ArrayList();
+     this.defaultAttr = null;
+     if (buffer.length() != 0)
+       {
+ 	this.startingRange = buffer.length();
+ 	addAttribute(buffer.length(), null);
+       }
+     else
+       this.startingRange = -1;
+   }
+ 
+   public AttributedFormatBuffer(int prebuffer)
+   {
+     this(new StringBuffer(prebuffer));
+   }
+ 
+   public AttributedFormatBuffer()
+   {
+     this(10);
+   }
+ 
+   /**
+    * This method is a helper function for formatters. Given a set of ranges
+    * and attributes it adds exactly one attribute for the range of characters
+    * comprised between the last entry in 'ranges' and the specified new range.
+    *
+    * @param new_range A new range to insert in the list.
+    * @param new_attribute A new attribute to insert in the list.
+    */  
+   private final void addAttribute(int new_range, AttributedCharacterIterator.Attribute attr)
+   {
+     HashMap map;
+ 
+     if (attr != null)
+       {
+ 	map = new HashMap();
+ 	map.put(attr, attr);
+ 	attributes.add(map);
+       }
+     else
+       attributes.add(null);
+ 
+     ranges.add(new Integer(new_range));
+   }
+ 
+   public void append(String s)
+   {
+     if (startingRange < 0)
+       startingRange = 0;
+     buffer.append(s);
+   }
+   
+   public void append(String s, AttributedCharacterIterator.Attribute attr)
+   {
+     setDefaultAttribute(attr);
+     startingRange = buffer.length();
+     append(s);
+     setDefaultAttribute(null);
+   }
+ 
+   public void append(String s, int[] ranges, HashMap[] attrs)
+   {
+     int curPos = buffer.length();
+ 
+     setDefaultAttribute(null);
+     if (ranges != null)
+       {
+ 	for (int i = 0; i < ranges.length; i++)
+ 	  {	    
+ 	    this.ranges.add(new Integer(ranges[i] + curPos));
+ 	    this.attributes.add(attrs[i]);
+ 	  }
+       }
+     startingRange = buffer.length();
+     buffer.append(s);
+   }
+ 
+   public void append(char c)
+   {
+     if (startingRange < 0)
+       startingRange = buffer.length();
+     buffer.append(c);
+   }
+ 
+   public void append(char c, AttributedCharacterIterator.Attribute attr)
+   {
+     setDefaultAttribute(attr);
+     buffer.append(c);
+     setDefaultAttribute(null);
+   }
+ 
+   public void setDefaultAttribute(AttributedCharacterIterator.Attribute attr)
+   {
+     if (attr == defaultAttr)
+       return;
+ 
+     int currentPos = buffer.length();
+ 
+     if (startingRange != currentPos && startingRange >= 0)
+       {
+ 	addAttribute(currentPos, defaultAttr);
+       }
+     defaultAttr = attr;
+     startingRange = currentPos;
+   }
+ 
+   public AttributedCharacterIterator.Attribute getDefaultAttribute()
+   {
+     return defaultAttr;
+   }
+ 
+   public void cutTail(int length)
+   {
+     buffer.setLength(buffer.length()-length);
+   }
+ 
+   public int length()
+   {
+     return buffer.length();
+   }
+ 
+   public void clear()
+   {
+     buffer.setLength(0);
+     ranges.clear();
+     attributes.clear();
+     defaultAttr = null;
+     startingRange = -1;
+   }
+ 
+   /**
+    * This method synchronizes the state of the attribute array.
+    * After calling it you may call {@link #getDefaultAttribute()}.
+    */
+   public void sync()
+   {
+     if (startingRange < 0 || startingRange == buffer.length())
+       return;
+ 
+     addAttribute(buffer.length(), defaultAttr);
+ 
+     a_ranges = new int[ranges.size()];
+     for (int i = 0; i < a_ranges.length; i++)
+       a_ranges[i] = ((Integer)(ranges.get (i))).intValue();
+     
+     a_attributes = new HashMap[attributes.size()];
+     System.arraycopy(attributes.toArray(), 0, a_attributes, 0, a_attributes.length);
+   }
+ 
+   /**
+    * This method returns the internal StringBuffer describing
+    * the attributed string.
+    *
+    * @return An instance of StringBuffer which contains the string.
+    */
+   public StringBuffer getBuffer()
+   {
+     return buffer;
+   }
+ 
+   /**
+    * This method returns the ranges for the attributes.
+    *
+    * @return An array of int describing the ranges.
+    */
+   public int[] getRanges()
+   {
+     return a_ranges;
+   }
+ 
+   /**
+    * This method returns the array containing the map on the 
+    * attributes.
+    *
+    * @return An array of {@link java.util.Map} containing the attributes.
+    */
+   public HashMap[] getAttributes()
+   {
+     return a_attributes;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/BaseBreakIterator.java gcc-4.1.0/libjava/classpath/gnu/java/text/BaseBreakIterator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/text/BaseBreakIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/BaseBreakIterator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,124 ----
+ /* BaseBreakIterator.java -- Base class for default BreakIterators
+    Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.text;
+ 
+ import java.text.BreakIterator;
+ import java.text.CharacterIterator;
+ import java.text.StringCharacterIterator;
+ 
+ /**
+  * @author Tom Tromey <tromey@cygnus.com>
+  * @date March 22, 1999
+  */
+ 
+ public abstract class BaseBreakIterator extends BreakIterator
+ {
+   public BaseBreakIterator ()
+   {
+     // It isn't documented, but break iterators are created in a
+     // working state; their methods won't throw exceptions before
+     // setText().
+     iter = new StringCharacterIterator("");
+   }
+ 
+   public int current ()
+   {
+     return iter.getIndex();
+   }
+ 
+   public int first ()
+   {
+     iter.first();
+     return iter.getBeginIndex();
+   }
+ 
+   /**
+    * Return the first boundary after <code>pos</code>.
+    * This has the side effect of setting the index of the 
+    * CharacterIterator.
+    */
+   public int following (int pos)
+   {
+     iter.setIndex(pos);
+     int r = next ();
+     return r;
+   }
+ 
+   public CharacterIterator getText ()
+   {
+     return iter;
+   }
+ 
+   public int last ()
+   {
+     iter.last();
+     // Go past the last character.
+     iter.next();
+     return iter.getEndIndex();
+   }
+ 
+   public int next (int n)
+   {
+     int r = iter.getIndex ();
+     if (n > 0)
+       {
+ 	while (n > 0 && r != DONE)
+ 	  {
+ 	    r = next ();
+ 	    --n;
+ 	  }
+       }
+     else if (n < 0)
+       {
+ 	while (n < 0 && r != DONE)
+ 	  {
+ 	    r = previous ();
+ 	    ++n;
+ 	  }
+       }
+     return r;
+   }
+ 
+   public void setText (CharacterIterator newText)
+   {
+     iter = newText;
+   }
+ 
+   protected CharacterIterator iter;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/CharacterBreakIterator.java gcc-4.1.0/libjava/classpath/gnu/java/text/CharacterBreakIterator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/text/CharacterBreakIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/CharacterBreakIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,213 ----
+ /* CharacterBreakIterator.java - Default character BreakIterator.
+    Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.text;
+ 
+ import java.text.CharacterIterator;
+ 
+ /**
+  * @author Tom Tromey <tromey@cygnus.com>
+  * @date March 19, 1999
+  * Written using The Unicode Standard, Version 2.0.
+  */
+ 
+ public class CharacterBreakIterator extends BaseBreakIterator
+ {
+   // Hangul Jamo constants from Unicode book.
+   private static final int LBase = 0x1100;
+   private static final int VBase = 0x1161;
+   private static final int TBase = 0x11a7;
+   private static final int LCount = 19;
+   private static final int VCount = 21;
+   private static final int TCount = 28;
+ 
+   // Information about surrogates.
+   private static final int highSurrogateStart = 0xD800;
+   private static final int highSurrogateEnd = 0xDBFF;
+   private static final int lowSurrogateStart = 0xDC00;
+   private static final int lowSurrogateEnd = 0xDFFF;
+ 
+   public Object clone ()
+   {
+     return new CharacterBreakIterator (this);
+   }
+ 
+   public CharacterBreakIterator ()
+   {
+   }
+ 
+   private CharacterBreakIterator (CharacterBreakIterator other)
+   {
+     iter = (CharacterIterator) other.iter.clone();
+   }
+ 
+   // Some methods to tell us different properties of characters.
+   private final boolean isL (char c)
+   {
+     return c >= LBase && c <= LBase + LCount;
+   }
+   private final boolean isV (char c)
+   {
+     return c >= VBase && c <= VBase + VCount;
+   }
+   private final boolean isT (char c)
+   {
+     return c >= TBase && c <= TBase + TCount;
+   }
+   private final boolean isLVT (char c)
+   {
+     return isL (c) || isV (c) || isT (c);
+   }
+   private final boolean isHighSurrogate (char c)
+   {
+     return c >= highSurrogateStart && c <= highSurrogateEnd;
+   }
+   private final boolean isLowSurrogate (char c)
+   {
+     return c >= lowSurrogateStart && c <= lowSurrogateEnd;
+   }
+ 
+   public int next ()
+   {
+     int end = iter.getEndIndex();
+     if (iter.getIndex() == end)
+       return DONE;
+ 
+     char c;
+     for (char prev = CharacterIterator.DONE; iter.getIndex() < end; prev = c)
+       {
+ 	c = iter.next();
+ 	if (c == CharacterIterator.DONE)
+ 	  break;
+ 	int type = Character.getType(c);
+ 
+ 	// Break after paragraph separators.
+ 	if (type == Character.PARAGRAPH_SEPARATOR)
+ 	  break;
+ 
+ 	// Now we need some lookahead.
+ 	char ahead = iter.next();
+ 	iter.previous();
+ 	if (ahead == CharacterIterator.DONE)
+ 	  break;
+ 	int aheadType = Character.getType(ahead);
+ 
+ 	if (aheadType != Character.NON_SPACING_MARK
+ 	    && ! isLowSurrogate (ahead)
+ 	    && ! isLVT (ahead))
+ 	  break;
+ 	if (! isLVT (c) && isLVT (ahead))
+ 	  break;
+ 	if (isL (c) && ! isLVT (ahead)
+ 	    && aheadType != Character.NON_SPACING_MARK)
+ 	  break;
+ 	if (isV (c) && ! isV (ahead) && !isT (ahead)
+ 	    && aheadType != Character.NON_SPACING_MARK)
+ 	  break;
+ 	if (isT (c) && ! isT (ahead)
+ 	    && aheadType != Character.NON_SPACING_MARK)
+ 	  break;
+ 
+ 	if (! isHighSurrogate (c) && isLowSurrogate (ahead))
+ 	  break;
+ 	if (isHighSurrogate (c) && ! isLowSurrogate (ahead))
+ 	  break;
+ 	if (! isHighSurrogate (prev) && isLowSurrogate (c))
+ 	  break;
+       }
+ 
+     return iter.getIndex();
+   }
+ 
+   public int previous ()
+   {
+     if (iter.getIndex() == iter.getBeginIndex())
+       return DONE;
+ 
+     while (iter.getIndex() >= iter.getBeginIndex())
+       {
+ 	char c = iter.previous();
+ 	if (c == CharacterIterator.DONE)
+ 	  break;
+ 	int type = Character.getType(c);
+ 
+ 	if (type != Character.NON_SPACING_MARK
+ 	    && ! isLowSurrogate (c)
+ 	    && ! isLVT (c))
+ 	  break;
+ 
+ 	// Now we need some lookahead.
+ 	char ahead = iter.previous();
+ 	if (ahead == CharacterIterator.DONE)
+ 	  {
+ 	    iter.next();
+ 	    break;
+ 	  }
+ 	char ahead2 = iter.previous();
+ 	iter.next();
+ 	iter.next();
+ 	if (ahead2 == CharacterIterator.DONE)
+ 	  break;
+ 	int aheadType = Character.getType(ahead);
+ 
+ 	if (aheadType == Character.PARAGRAPH_SEPARATOR)
+ 	  break;
+ 
+ 	if (isLVT (c) && ! isLVT (ahead))
+ 	  break;
+ 	if (! isLVT (c) && type != Character.NON_SPACING_MARK
+ 	    && isL (ahead))
+ 	  break;
+ 	if (! isV (c) && ! isT (c) && type != Character.NON_SPACING_MARK
+ 	    && isV (ahead))
+ 	  break;
+ 	if (! isT (c) && type != Character.NON_SPACING_MARK
+ 	    && isT (ahead))
+ 	  break;
+ 
+ 	if (isLowSurrogate (c) && ! isHighSurrogate (ahead))
+ 	  break;
+ 	if (! isLowSurrogate (c) && isHighSurrogate (ahead))
+ 	  break;
+ 	if (isLowSurrogate (ahead) && ! isHighSurrogate (ahead2))
+ 	  break;
+       }
+ 
+     return iter.getIndex();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/FormatBuffer.java gcc-4.1.0/libjava/classpath/gnu/java/text/FormatBuffer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/text/FormatBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/FormatBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,136 ----
+ /* FormatBuffer.java -- General interface to build attributed strings.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.java.text;
+ 
+ import java.text.AttributedCharacterIterator;
+ import java.util.HashMap;
+ 
+ /**
+  * This interface describes a modifiable buffer which contains attributed
+  * characters. The implementation may or may not implements attributes. It
+  * aims to greatly simplify and clarify the implementation of java.text 
+  * formatters. The buffer may be appended or have its tail cut. It may also
+  * be completely cleant up.
+  *
+  * @author Guilhem Lavaux <guilhem@kaffe.org>
+  * @date April 10, 2004
+  */
+ public interface FormatBuffer 
+ {
+   /**
+    * This method appends a simple string to the buffer. This part of
+    * the buffer will be attributed using the default attribute.
+    *
+    * @param s The string to append to the buffer.
+    */
+   public void append(String s);
+ 
+   /**
+    * This method appends a simple string to the buffer. This part of
+    * the buffer will have the specified attribute (and only this one).
+    * The default attribute may be changed after calling this method.
+    *
+    * @param s The string to append to the buffer.
+    * @param attr Attribute to use for the string in the buffer.
+    */
+   public void append(String s, AttributedCharacterIterator.Attribute attr);
+ 
+   /**
+    * This method appends a simple string to the buffer. This part of
+    * the buffer will be attributed using the specified ranges and attributes.
+    * To have an example on how to specify ranges see {@link gnu.java.text.FormatCharacterIterator}. 
+    * 
+    * @param s The string to append to the buffer.
+    * @param ranges The ranges describing how the attributes should be applied
+    * to the string.
+    * @param attrs The attributes of the string in the buffer.
+    */
+   public void append(String s, int[] ranges, HashMap[] attrs);
+ 
+   /**
+    * This method appends a simple char to the buffer. This part of
+    * the buffer will be attributed using the default attribute.
+    *
+    * @param c The character to append to the buffer.
+    */
+   public void append(char c);
+ 
+   /**
+    * This method appends a simple character to the buffer. This part of
+    * the buffer will have the specified attribute (and only this one).
+    * The default attribute may be changed after calling this method.
+    *
+    * @param c The character to append to the buffer.
+    * @param attr Attribute to use for the character in the buffer.
+    */
+   public void append(char c, AttributedCharacterIterator.Attribute attr);
+ 
+   /**
+    * This method changes the current default attribute for the next string
+    * or character which will be appended to the buffer.
+    *
+    * @param attr The attribute which will be used by default.
+    */
+   public void setDefaultAttribute(AttributedCharacterIterator.Attribute attr);
+ 
+   /**
+    * This method returns the current default attribute for the buffer.
+    *
+    * @return The default attribute for the buffer.
+    */
+   public AttributedCharacterIterator.Attribute getDefaultAttribute();
+ 
+   /**
+    * This method cuts the last characters of the buffer. The number of
+    * characters to cut is given by "length".
+    *
+    * @param length Number of characters to cut at the end of the buffer.
+    */
+   public void cutTail(int length);
+   
+   /**
+    * This method resets completely the buffer.
+    */
+   public void clear();
+ 
+   /**
+    * This method returns the number of character in the buffer.
+    *
+    * @return The number of character in the buffer.
+    */
+   public int length();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/FormatCharacterIterator.java gcc-4.1.0/libjava/classpath/gnu/java/text/FormatCharacterIterator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/text/FormatCharacterIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/FormatCharacterIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,533 ----
+ /* FormatCharacter.java -- Implementation of AttributedCharacterIterator for 
+    formatters.
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.java.text;
+ 
+ import java.text.AttributedCharacterIterator;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.Vector;
+ 
+ /**
+  * This class should not be put public and it is only intended to the
+  * classes of the java.text package. Its aim is to build a segmented
+  * character iterator by appending strings and adding attributes to
+  * portions of strings. The code intends to do some optimization
+  * concerning memory consumption and attribute access but at the
+  * end it is only an AttributedCharacterIterator.
+  *
+  * @author Guilhem Lavaux <guilhem@kaffe.org>
+  * @date November 22, 2003
+  */
+ public class FormatCharacterIterator implements AttributedCharacterIterator
+ {
+   private String formattedString;
+   private int charIndex;
+   private int attributeIndex;
+   private int[] ranges;
+   private HashMap[] attributes;
+   private static final boolean DEBUG = false;
+ 
+   /**
+    * This constructor builds an empty iterated strings. The attributes
+    * are empty and so is the string. However you may append strings
+    * and attributes to this iterator.
+    */
+   public FormatCharacterIterator()
+   {
+     formattedString = "";
+     ranges = new int[0];
+     attributes = new HashMap[0];
+   }
+ 
+   /**
+    * This constructor take a string <code>s</code>, a set of ranges 
+    * and the corresponding attributes. This is used to build an iterator.
+    * The array <code>ranges</code> should be formatted as follow:
+    * each element of <code>ranges</code> specifies the index in the string
+    * until which the corresponding map of attributes at the same position
+    * is applied. For example, if you have:
+    * <pre>
+    *   s = "hello";
+    *   ranges = new int[] { 2, 6 };
+    *   attributes = new HashMap[2];
+    * </pre>
+    * <code>"he"</code> will have the attributes <code>attributes[0]</code>,
+    * <code>"llo"</code> the <code>attributes[1]</code>.
+    */
+   public FormatCharacterIterator (String s, int[] ranges, HashMap[] attributes)
+   {
+     formattedString = s;
+     this.ranges = ranges;
+     this.attributes = attributes;
+   }
+   
+   /* 
+    * The following methods are inherited from AttributedCharacterIterator,
+    * and thus are already documented. 
+    */
+ 
+   public Set getAllAttributeKeys()
+   {
+     if (attributes != null && attributes[attributeIndex] != null)
+       return attributes[attributeIndex].keySet();
+     else
+       return new HashSet();
+   }
+   
+   public Map getAttributes()
+   {
+     if (attributes != null && attributes[attributeIndex] != null)
+       return attributes[attributeIndex];
+     else
+       return new HashMap();
+   }
+   
+   public Object getAttribute (AttributedCharacterIterator.Attribute attrib)
+   {
+     if (attributes != null && attributes[attributeIndex] != null)
+       return attributes[attributeIndex].get (attrib);
+     else
+       return null;
+   }
+   
+   public int getRunLimit(Set reqAttrs)
+   {
+     if (attributes == null)
+       return formattedString.length();
+ 
+     int currentAttrIndex = attributeIndex;
+     Set newKeys;
+ 
+     do
+       {
+ 	currentAttrIndex++;
+ 	if (currentAttrIndex == attributes.length)
+ 	  return formattedString.length();
+ 	if (attributes[currentAttrIndex] == null)
+ 	  break;
+ 	newKeys = attributes[currentAttrIndex].keySet();
+       }
+     while (newKeys.containsAll (reqAttrs));
+ 
+     return ranges[currentAttrIndex-1];
+   }
+   
+   public int getRunLimit (AttributedCharacterIterator.Attribute attribute) 
+   {
+     Set s = new HashSet();
+ 
+     s.add (attribute);
+     return getRunLimit (s);
+   }
+ 
+   public int getRunLimit()
+   {
+     if (attributes == null)
+       return formattedString.length();
+     if (attributes[attributeIndex] == null)
+       {
+ 	for (int i=attributeIndex+1;i<attributes.length;i++)
+ 	  if (attributes[i] != null)
+ 	    return ranges[i-1];
+ 	return formattedString.length();
+       }
+ 
+     return getRunLimit (attributes[attributeIndex].keySet());
+   }
+   
+   public int getRunStart (Set reqAttrs)
+   {
+     if (attributes == null)
+       return formattedString.length();
+   
+     int currentAttrIndex = attributeIndex;
+     Set newKeys = null;
+ 
+     do
+       {
+ 	if (currentAttrIndex == 0)
+ 	  return 0;
+ 
+ 	currentAttrIndex--;
+ 	if (attributes[currentAttrIndex] == null)
+ 	  break;
+ 	newKeys = attributes[currentAttrIndex].keySet();
+       }
+     while (newKeys.containsAll (reqAttrs));
+    
+     return (currentAttrIndex > 0) ? ranges[currentAttrIndex-1] : 0;
+   } 
+     
+   public int getRunStart()
+   {
+     if (attributes == null)
+       return 0;
+ 
+     if (attributes[attributeIndex] == null)
+       {
+ 	for (int i=attributeIndex;i>0;i--)
+ 	  if (attributes[i] != null)
+ 	    return ranges[attributeIndex-1];
+ 	return 0;
+       }
+ 
+     return getRunStart (attributes[attributeIndex].keySet());
+   }
+   
+   public int getRunStart (AttributedCharacterIterator.Attribute attribute) 
+   {
+     Set s = new HashSet();
+     
+     s.add (attribute);
+     return getRunStart (s);
+   }
+ 
+   public Object clone()
+   {
+     return new FormatCharacterIterator (formattedString, ranges, attributes);
+   }
+   
+   /*
+    * The following methods are inherited from CharacterIterator and thus
+    * are already documented.
+    */
+ 
+   public char current()
+   {
+     return formattedString.charAt (charIndex);
+   }
+   
+   public char first()
+   {
+     charIndex = 0;
+     attributeIndex = 0;
+     return formattedString.charAt (0);
+   }
+   
+   public int getBeginIndex()
+   {
+     return 0;
+   }
+   
+   public int getEndIndex()
+   {
+     return formattedString.length();
+   }
+   
+   public int getIndex()
+   {
+     return charIndex;
+   }
+   
+   public char last()
+   {
+     charIndex = formattedString.length()-1;
+     if (attributes != null)
+       attributeIndex = attributes.length-1;
+     return formattedString.charAt (charIndex);
+   }
+   
+   public char next()
+   {
+     charIndex++;
+     if (charIndex >= formattedString.length())
+       {
+ 	charIndex = getEndIndex();
+ 	return DONE;
+       }
+     if (attributes != null)
+       {
+ 	if (charIndex >= ranges[attributeIndex])
+ 	  attributeIndex++;
+       }
+     return formattedString.charAt (charIndex);
+   }
+   
+   public char previous()
+   {
+     charIndex--;
+     if (charIndex < 0)
+       {
+ 	charIndex = 0;
+ 	return DONE;
+       }
+     
+     if (attributes != null)
+       {
+ 	if (charIndex < ranges[attributeIndex])
+ 	  attributeIndex--;
+       }
+     return formattedString.charAt (charIndex);
+   }
+   
+   public char setIndex (int position)
+   {
+     if (position < 0 || position > formattedString.length())
+       throw new IllegalArgumentException ("position is out of range");
+     
+     charIndex = position;
+     if (attributes != null)
+       {
+ 	for (attributeIndex=0;attributeIndex<attributes.length;
+ 	     attributeIndex++)
+ 	  if (ranges[attributeIndex] > charIndex)
+ 	    break;
+ 	attributeIndex--;
+       }
+     if (charIndex == formattedString.length())
+       return DONE;
+     else
+       return formattedString.charAt (charIndex);
+   }
+ 
+   /**
+    * This method merge the specified attributes and ranges with the
+    * internal tables. This method is in charge of the optimization
+    * of tables. Two following sets of attributes are never the same.
+    *
+    * @see #FormatCharacterIterator()
+    *
+    * @param attributes the new array attributes to apply to the string.
+    */
+   public void mergeAttributes (HashMap[] attributes, int[] ranges)
+   {
+     Vector new_ranges = new Vector();
+     Vector new_attributes = new Vector();
+     int i = 0, j = 0;
+ 
+     debug("merging " + attributes.length + " attrs");
+     
+     while (i < this.ranges.length && j < ranges.length)
+       {
+ 	if (this.attributes[i] != null)
+ 	  {
+ 	    new_attributes.add (this.attributes[i]);
+ 	    if (attributes[j] != null)
+ 	      this.attributes[i].putAll (attributes[j]);
+ 	  }
+ 	else
+ 	  {
+ 	    new_attributes.add (attributes[j]);
+ 	  }
+ 	if (this.ranges[i] == ranges[j])
+ 	  {
+ 	    new_ranges.add (new Integer (ranges[j]));
+ 	    i++;
+ 	    j++;
+ 	  }
+ 	else if (this.ranges[i] < ranges[j])
+ 	  {
+ 	    new_ranges.add (new Integer (this.ranges[i]));
+ 	    i++;
+ 	  }
+ 	else
+ 	  {
+ 	    new_ranges.add (new Integer (ranges[j]));
+ 	    j++;
+ 	  }
+      }
+     
+     if (i != this.ranges.length)
+       {
+ 	for (;i<this.ranges.length;i++)
+ 	  {
+ 	    new_attributes.add (this.attributes[i]);
+ 	    new_ranges.add (new Integer (this.ranges[i]));
+ 	  }
+       }
+     if (j != ranges.length)
+       {
+ 	for (;j<ranges.length;j++)
+ 	  {
+ 	    new_attributes.add (attributes[j]);
+ 	    new_ranges.add (new Integer (ranges[j]));
+ 	  }
+       }
+ 
+     this.attributes = new HashMap[new_attributes.size()];
+     this.ranges = new int[new_ranges.size()];
+     System.arraycopy (new_attributes.toArray(), 0, this.attributes,
+ 		      0, this.attributes.length);
+ 
+     for (i=0;i<new_ranges.size();i++)
+       {
+ 	this.ranges[i] = ((Integer)new_ranges.elementAt (i)).intValue();
+       }
+     
+     dumpTable();
+   }
+ 
+   /**
+    * This method appends to the internal attributed string the attributed
+    * string contained in the specified iterator.
+    *
+    * @param iterator the iterator which contains the attributed string to
+    * append to this iterator.
+    */
+   public void append (AttributedCharacterIterator iterator)
+   {
+     char c = iterator.first();
+     Vector more_ranges = new Vector();
+     Vector more_attributes = new Vector();
+ 
+     do
+       {
+ 	formattedString = formattedString + String.valueOf (c);
+ 	// TODO: Reduce the size of the output array.
+ 	more_attributes.add (iterator.getAttributes());
+ 	more_ranges.add (new Integer (formattedString.length()));
+ 	// END TOOD
+ 	c = iterator.next();
+       } 
+     while (c != DONE);
+ 
+     HashMap[] new_attributes = new HashMap[attributes.length
+ 					   + more_attributes.size()];
+     int[] new_ranges = new int[ranges.length + more_ranges.size()];
+     
+     System.arraycopy (attributes, 0, new_attributes, 0, attributes.length);
+     System.arraycopy (more_attributes.toArray(), 0, new_attributes,
+ 		      attributes.length, more_attributes.size());
+ 
+     System.arraycopy (ranges, 0, new_ranges, 0, ranges.length);
+     Object[] new_ranges_array = more_ranges.toArray();
+     for (int i = 0; i < more_ranges.size();i++)
+       new_ranges[i+ranges.length] = ((Integer) new_ranges_array[i]).intValue();
+ 
+     attributes = new_attributes;
+     ranges = new_ranges;
+   }
+ 
+   /**
+    * This method appends an attributed string which attributes are specified
+    * directly in the calling parameters.
+    *
+    * @param text The string to append.
+    * @param local_attributes The attributes to put on this string in the
+    * iterator. If it is <code>null</code> the string will simply have no
+    * attributes.
+    */
+   public void append (String text, HashMap local_attributes)
+   {
+     int[] new_ranges = new int[ranges.length+1];
+     HashMap[] new_attributes = new HashMap[attributes.length+1];
+ 
+     formattedString += text;
+     System.arraycopy (attributes, 0, new_attributes, 0, attributes.length);
+     System.arraycopy (ranges, 0, new_ranges, 0, ranges.length);
+     new_ranges[ranges.length] = formattedString.length();
+     new_attributes[attributes.length] = local_attributes;
+ 
+     ranges = new_ranges;
+     attributes = new_attributes;
+   }  
+ 
+   /**
+    * This method appends a string without attributes. It is completely
+    * equivalent to call {@link #append(String,HashMap)} with local_attributes
+    * equal to <code>null</code>.
+    *
+    * @param text The string to append to the iterator.
+    */
+   public void append (String text)
+   {
+     append (text, null);
+   }  
+ 
+   /**
+    * This method adds a set of attributes to a range of character. The
+    * bounds are always inclusive. In the case many attributes have to
+    * be added it is advised to directly use {@link #mergeAttributes([Ljava.util.HashMap;[I}
+    *
+    * @param attributes Attributes to merge into the iterator.
+    * @param range_start Lower bound of the range of characters which will receive the
+    * attribute.
+    * @param range_end Upper bound of the range of characters which will receive the
+    * attribute. 
+    *
+    * @throws IllegalArgumentException if ranges are out of bounds.
+    */
+   public void addAttributes(HashMap attributes, int range_start, int range_end)
+   {
+     if (range_start == 0)
+       mergeAttributes(new HashMap[] { attributes }, new int[] { range_end });
+     else
+       mergeAttributes(new HashMap[] { null, attributes }, new int[] { range_start, range_end });
+   }
+ 
+   private void debug(String s)
+   {
+     if (DEBUG)
+       System.out.println(s);
+   }
+ 
+   private void dumpTable()
+   {
+     int start_range = 0;
+     
+     if (!DEBUG)
+       return;
+ 
+     System.out.println("Dumping internal table:");
+     for (int i = 0; i < ranges.length; i++)
+       {
+ 	System.out.print("\t" + start_range + " => " + ranges[i] + ":");
+ 	if (attributes[i] == null)
+ 	  System.out.println("null");
+ 	else
+ 	  {
+ 	    Set keyset = attributes[i].keySet();
+ 	    if (keyset != null)
+ 	      {
+ 		Iterator keys = keyset.iterator();
+ 		
+ 		while (keys.hasNext())
+ 		  System.out.print(" " + keys.next());
+ 	      }
+ 	    else
+ 	      System.out.println("keySet null");
+ 	    System.out.println();
+ 	  }
+       }
+     System.out.println();
+     System.out.flush();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/LineBreakIterator.java gcc-4.1.0/libjava/classpath/gnu/java/text/LineBreakIterator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/text/LineBreakIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/LineBreakIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,194 ----
+ /* LineBreakIterator.java - Default word BreakIterator.
+    Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.text;
+ 
+ import java.text.CharacterIterator;
+ 
+ /**
+  * @author Tom Tromey <tromey@cygnus.com>
+  * @date March 22, 1999
+  * Written using The Unicode Standard, Version 2.0.
+  */
+ 
+ public class LineBreakIterator extends BaseBreakIterator
+ {
+   public Object clone ()
+   {
+     return new LineBreakIterator (this);
+   }
+ 
+   public LineBreakIterator ()
+   {
+   }
+ 
+   private LineBreakIterator (LineBreakIterator other)
+   {
+     iter = (CharacterIterator) other.iter.clone();
+   }
+ 
+   // Some methods to tell us different properties of characters.
+   private final boolean isNb (char c)
+   {
+     return (c == 0x00a0		// NO-BREAK SPACE
+ 	    || c == 0x2011	// NON-BREAKING HYPHEN
+ 	    || c == 0xfeff);	// ZERO WITH NO-BREAK SPACE
+   }
+   private final boolean isClose (int type)
+   {
+     return (type == Character.END_PUNCTUATION
+ 	    // Unicode book says "comma, period, ...", which I take to
+ 	    // mean "Po" class.
+ 	    || type == Character.OTHER_PUNCTUATION);
+   }
+   private final boolean isIdeo (char c)
+   {
+     return (c >= 0x3040 && c <= 0x309f	       // Hiragana
+ 	    || c >= 0x30a0 && c <= 0x30ff      // Katakana
+ 	    || c >= 0x4e00 && c <= 0x9fff      // Han
+ 	    || c >= 0x3100 && c <= 0x312f);    // Bopomofo
+   }
+ 
+   public int next ()
+   {
+     int end = iter.getEndIndex();
+     if (iter.getIndex() == end)
+       return DONE;
+ 
+     while (iter.getIndex() < end)
+       {
+ 	char c = iter.current();
+ 	int type = Character.getType(c);
+ 
+ 	char n = iter.next();
+ 
+ 	if (n == CharacterIterator.DONE
+ 	    || type == Character.PARAGRAPH_SEPARATOR
+ 	    || type == Character.LINE_SEPARATOR)
+ 	  break;
+ 
+ 	// Handle two cases where we must scan for non-spacing marks.
+ 	int start = iter.getIndex();
+ 	if (type == Character.SPACE_SEPARATOR
+ 	    || type == Character.START_PUNCTUATION
+ 	    || isIdeo (c))
+ 	  {
+ 	    while (n != CharacterIterator.DONE
+ 		   && Character.getType(n) == Character.NON_SPACING_MARK)
+ 	      n = iter.next();
+ 	    if (n == CharacterIterator.DONE)
+ 	      break;
+ 
+ 	    if (type == Character.SPACE_SEPARATOR)
+ 	      {
+ 		int nt = Character.getType(n);
+ 		if (nt != Character.NON_SPACING_MARK
+ 		    && nt != Character.SPACE_SEPARATOR
+ 		    && ! isNb (n))
+ 		  break;
+ 	      }
+ 	    else if (type == Character.START_PUNCTUATION)
+ 	      {
+ 		if (isIdeo (n))
+ 		  {
+ 		    // Open punctuation followed by non spacing marks
+ 		    // and then ideograph does not have a break in
+ 		    // it.  So skip all this.
+ 		    start = iter.getIndex();
+ 		  }
+ 	      }
+ 	    else
+ 	      {
+ 		// Ideograph preceded this character.
+ 		if (isClose (Character.getType(n)))
+ 		  break;
+ 	      }
+ 	  }
+ 	iter.setIndex(start);
+       }
+ 
+     return iter.getIndex();
+   }
+ 
+   public int previous ()
+   {
+     int start = iter.getBeginIndex();
+     if (iter.getIndex() == start)
+       return DONE;
+ 
+     while (iter.getIndex() >= start)
+       {
+ 	char c = iter.previous();
+ 	if (c == CharacterIterator.DONE)
+ 	  break;
+ 	int type = Character.getType(c);
+ 
+ 	char n = iter.previous();
+ 	if (n == CharacterIterator.DONE)
+ 	  break;
+ 	iter.next();
+ 
+ 	int nt = Character.getType(n);
+ 	// Break after paragraph separators.
+ 	if (nt == Character.PARAGRAPH_SEPARATOR
+ 	    || nt == Character.LINE_SEPARATOR)
+ 	  break;
+ 
+ 	// Skip non-spacing marks.
+ 	int init = iter.getIndex();
+ 	while (n != CharacterIterator.DONE && nt == Character.NON_SPACING_MARK)
+ 	  {
+ 	    n = iter.previous();
+ 	    nt = Character.getType(n);
+ 	  }
+ 
+ 	if (nt == Character.SPACE_SEPARATOR
+ 	    && type != Character.SPACE_SEPARATOR
+ 	    && type != Character.NON_SPACING_MARK
+ 	    && ! isNb (c))
+ 	  break;
+ 	if (! isClose (type) && isIdeo (n))
+ 	  break;
+ 	if (isIdeo (c) && nt != Character.START_PUNCTUATION)
+ 	  break;
+ 	iter.setIndex(init);
+       }
+ 
+     return iter.getIndex();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/SentenceBreakIterator.java gcc-4.1.0/libjava/classpath/gnu/java/text/SentenceBreakIterator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/text/SentenceBreakIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/SentenceBreakIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,247 ----
+ /* SentenceBreakIterator.java - Default sentence BreakIterator.
+    Copyright (C) 1999, 2001, 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.text;
+ 
+ import java.text.CharacterIterator;
+ 
+ /**
+  * @author Tom Tromey <tromey@cygnus.com>
+  * @date March 23, 1999
+  * Written using The Unicode Standard, Version 2.0.
+  */
+ 
+ public class SentenceBreakIterator extends BaseBreakIterator
+ {
+   public Object clone ()
+   {
+     return new SentenceBreakIterator (this);
+   }
+ 
+   public SentenceBreakIterator ()
+   {
+   }
+ 
+   private SentenceBreakIterator (SentenceBreakIterator other)
+   {
+     iter = (CharacterIterator) other.iter.clone();
+   }
+ 
+   public int next ()
+   {
+     int end = iter.getEndIndex();
+     if (iter.getIndex() == end)
+       return DONE;
+ 
+     while (iter.getIndex() < end)
+       {
+ 	char c = iter.current();
+ 	if (c == CharacterIterator.DONE)
+ 	  break;
+ 	int type = Character.getType(c);
+ 
+ 	char n = iter.next();
+ 	if (n == CharacterIterator.DONE)
+ 	  break;
+ 
+ 	// Always break after paragraph separator.
+ 	if (type == Character.PARAGRAPH_SEPARATOR)
+ 	  break;
+ 
+ 	if (c == '!' || c == '?')
+ 	  {
+ 	    // Skip close punctuation.
+ 	    while (n != CharacterIterator.DONE
+ 		   && Character.getType(n) == Character.END_PUNCTUATION)
+ 	      n = iter.next();
+ 	    // Skip (java) space, line and paragraph separators.
+ 	    while (n != CharacterIterator.DONE && Character.isWhitespace(n))
+ 	      n = iter.next();
+ 
+ 	    // There's always a break somewhere after `!' or `?'.
+ 	    break;
+ 	  }
+ 
+ 	if (c == '.')
+ 	  {
+ 	    int save = iter.getIndex();
+ 	    // Skip close punctuation.
+ 	    while (n != CharacterIterator.DONE
+ 		   && Character.getType(n) == Character.END_PUNCTUATION)
+ 	      n = iter.next();
+ 	    // Skip (java) space, line and paragraph separators.
+ 	    // We keep count because we need at least one for this period to
+ 	    // represent a terminator.
+ 	    int spcount = 0;
+ 	    while (n != CharacterIterator.DONE && Character.isWhitespace(n))
+ 	      {
+ 		n = iter.next();
+ 		++spcount;
+ 	      }
+ 	    if (spcount > 0)
+ 	      {
+ 		int save2 = iter.getIndex();
+ 		// Skip over open puncutation.
+ 		while (n != CharacterIterator.DONE
+ 		       && Character.getType(n) == Character.START_PUNCTUATION)
+ 		  n = iter.next();
+ 		// Next character must not be lower case.
+ 		if (n == CharacterIterator.DONE
+ 		    || ! Character.isLowerCase(n))
+ 		  {
+ 		    iter.setIndex(save2);
+ 		    break;
+ 		  }
+ 	      }
+ 	    iter.setIndex(save);
+ 	  }
+       }
+ 
+     return iter.getIndex();
+   }
+ 
+   private final int previous_internal ()
+   {
+     int start = iter.getBeginIndex();
+     if (iter.getIndex() == start)
+       return DONE;
+ 
+     while (iter.getIndex() >= start)
+       {
+ 	char c = iter.previous();
+ 	if (c == CharacterIterator.DONE)
+ 	  break;
+ 
+ 	char n = iter.previous();
+ 	if (n == CharacterIterator.DONE)
+ 	  break;
+ 	iter.next();
+ 	int nt = Character.getType(n);
+ 
+ 	if (! Character.isLowerCase(c)
+ 	    && (nt == Character.START_PUNCTUATION
+ 		|| Character.isWhitespace(n)))
+ 	  {
+ 	    int save = iter.getIndex();
+ 	    int save_nt = nt;
+ 	    char save_n = n;
+ 	    // Skip open punctuation.
+ 	    while (n != CharacterIterator.DONE
+ 		   && Character.getType(n) == Character.START_PUNCTUATION)
+ 	      n = iter.previous();
+ 	    if (n == CharacterIterator.DONE)
+ 	      break;
+ 	    if (Character.isWhitespace(n))
+ 	      {
+ 		// Must have at least one (java) space after the `.'.
+ 		int save2 = iter.getIndex();
+ 		while (n != CharacterIterator.DONE
+ 		       && Character.isWhitespace(n))
+ 		  n = iter.previous();
+ 		// Skip close punctuation.
+ 		while (n != CharacterIterator.DONE
+ 		       && Character.getType(n) == Character.END_PUNCTUATION)
+ 		  n = iter.previous();
+ 		if (n == CharacterIterator.DONE || n == '.')
+ 		  {
+ 		    // Communicate location of actual end.
+ 		    period = iter.getIndex();
+ 		    iter.setIndex(save2);
+ 		    break;
+ 		  }
+ 	      }
+ 	    iter.setIndex(save);
+ 	    nt = save_nt;
+ 	    n = save_n;
+ 	  }
+ 
+ 	if (nt == Character.PARAGRAPH_SEPARATOR)
+ 	  {
+ 	    // Communicate location of actual end.
+ 	    period = iter.getIndex();
+ 	    break;
+ 	  }
+ 	else if (Character.isWhitespace(n)
+ 		 || nt == Character.END_PUNCTUATION)
+ 	  {
+ 	    int save = iter.getIndex();
+ 	    // Skip (java) space, line and paragraph separators.
+ 	    while (n != CharacterIterator.DONE
+ 		   && Character.isWhitespace(n))
+ 	      n = iter.previous();
+ 	    // Skip close punctuation.
+ 	    while (n != CharacterIterator.DONE
+ 		   && Character.getType(n) == Character.END_PUNCTUATION)
+ 	      n = iter.previous();
+ 	    int here = iter.getIndex();
+ 	    iter.setIndex(save);
+ 	    if (n == CharacterIterator.DONE || n == '!' || n == '?')
+ 	      {
+ 		// Communicate location of actual end.
+ 		period = here;
+ 		break;
+ 	      }
+ 	  }
+ 	else if (n == '!' || n == '?')
+ 	  {
+ 	    // Communicate location of actual end.
+ 	    period = iter.getIndex();
+ 	    break;
+ 	  }
+       }
+ 
+     return iter.getIndex();
+   }
+ 
+   public int previous ()
+   {
+     // We want to skip over the first sentence end to the second one.
+     // However, at the end of the string we want the first end.
+     int here = iter.getIndex();
+     period = here;
+     int first = previous_internal ();
+     if (here == iter.getEndIndex() || first == DONE)
+       return first;
+     iter.setIndex(period);
+     return previous_internal ();
+   }
+ 
+   // This is used for communication between previous and
+   // previous_internal.
+   private int period;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/StringFormatBuffer.java gcc-4.1.0/libjava/classpath/gnu/java/text/StringFormatBuffer.java
*** gcc-4.0.2/libjava/classpath/gnu/java/text/StringFormatBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/StringFormatBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,121 ----
+ /* StringFormatBuffer.java -- Implements FormatBuffer using StringBuffer.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.java.text;
+ 
+ import java.text.AttributedCharacterIterator;
+ import java.util.HashMap;
+ 
+ /**
+  * This class is an implementation of a FormatBuffer without attributes.
+  * 
+  * @author Guilhem Lavaux <guilhem@kaffe.org>
+  * @date April 10, 2004
+  */
+ public class StringFormatBuffer implements FormatBuffer
+ {
+   private StringBuffer buffer;
+   private AttributedCharacterIterator.Attribute defaultAttr;
+ 
+   public StringFormatBuffer(int prebuffer)
+   {
+     buffer = new StringBuffer(prebuffer);
+   }
+ 
+   public StringFormatBuffer(StringBuffer buffer)
+   {
+     this.buffer = buffer;
+   }
+ 
+   public void append(String s)
+   {
+     buffer.append(s);
+   }
+   
+   public void append(String s, AttributedCharacterIterator.Attribute attr)
+   {
+     buffer.append(s);
+   }
+ 
+   public void append(String s, int[] ranges, HashMap[] attrs)
+   {
+     buffer.append(s);
+   }
+ 
+   public void append(char c)
+   {
+     buffer.append(c);
+   }
+ 
+   public void append(char c, AttributedCharacterIterator.Attribute attr)
+   {
+     buffer.append(c);
+   }
+ 
+   public void setDefaultAttribute(AttributedCharacterIterator.Attribute attr)
+   {
+     defaultAttr = attr;
+   }
+ 
+   public AttributedCharacterIterator.Attribute getDefaultAttribute()
+   {
+     return defaultAttr;
+   }
+ 
+   public void cutTail(int length)
+   {
+     buffer.setLength(buffer.length()-length);
+   }
+ 
+   public int length()
+   {
+     return buffer.length();
+   }
+ 
+   public void clear()
+   {
+     buffer.setLength(0);
+   }
+ 
+   /**
+    * This method returns the internal {@link java.lang.StringBuffer} which 
+    * contains the string of character.
+    */
+   public StringBuffer getBuffer()
+   {
+     return buffer;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/WordBreakIterator.java gcc-4.1.0/libjava/classpath/gnu/java/text/WordBreakIterator.java
*** gcc-4.0.2/libjava/classpath/gnu/java/text/WordBreakIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/WordBreakIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,250 ----
+ /* WordBreakIterator.java - Default word BreakIterator.
+    Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.java.text;
+ 
+ import java.text.CharacterIterator;
+ 
+ /**
+  * @author Tom Tromey <tromey@cygnus.com>
+  * @date March 22, 1999
+  * Written using The Unicode Standard, Version 2.0.
+  */
+ 
+ public class WordBreakIterator extends BaseBreakIterator
+ {
+   public Object clone ()
+   {
+     return new WordBreakIterator (this);
+   }
+ 
+   public WordBreakIterator ()
+   {
+   }
+ 
+   private WordBreakIterator (WordBreakIterator other)
+   {
+     iter = (CharacterIterator) other.iter.clone();
+   }
+ 
+   // Some methods to tell us different properties of characters.
+   private final boolean isHira (char c)
+   {
+     return c >= 0x3040 && c <= 0x309f;
+   }
+   private final boolean isKata (char c)
+   {
+     return c >= 0x30a0 && c <= 0x30ff;
+   }
+   private final boolean isHan (char c)
+   {
+     return c >= 0x4e00 && c <= 0x9fff;
+   }
+ 
+   public int next ()
+   {
+     int end = iter.getEndIndex();
+     if (iter.getIndex() == end)
+       return DONE;
+ 
+     while (iter.getIndex() < end)
+       {
+ 	char c = iter.current();
+ 	if (c == CharacterIterator.DONE)
+ 	  break;
+ 	int type = Character.getType(c);
+ 
+ 	char n = iter.next();
+ 	if (n == CharacterIterator.DONE)
+ 	  break;
+ 
+ 	// Break after paragraph separators.
+ 	if (type == Character.PARAGRAPH_SEPARATOR
+ 	    || type == Character.LINE_SEPARATOR)
+ 	  break;
+ 
+ 	// Break between letters and non-letters.
+ 	// FIXME: we treat apostrophe as part of a word.  This
+ 	// is an English-ism.
+ 	boolean is_letter = Character.isLetter(c);
+ 	if (c != '\'' && ! is_letter && type != Character.NON_SPACING_MARK
+ 	    && Character.isLetter(n))
+ 	  break;
+ 
+ 	// Always break after certain symbols, such as punctuation.
+ 	// This heuristic is derived from hints in the JCL book and is
+ 	// not part of Unicode.  It seems to be right, however.
+ 	// FIXME: we treat apostrophe as part of a word.  This
+ 	// is an English-ism.
+ 	if (c != '\''
+ 	    && (type == Character.DASH_PUNCTUATION
+ 		|| type == Character.START_PUNCTUATION
+ 		|| type == Character.END_PUNCTUATION
+ 		|| type == Character.CONNECTOR_PUNCTUATION
+ 		|| type == Character.OTHER_PUNCTUATION
+ 		|| type == Character.MATH_SYMBOL
+ 		|| type == Character.CURRENCY_SYMBOL
+ 		|| type == Character.MODIFIER_SYMBOL
+ 		|| type == Character.OTHER_SYMBOL
+ 		|| type == Character.FORMAT
+ 		|| type == Character.CONTROL))
+ 	  break;
+ 
+ 	boolean is_hira = isHira (c);
+ 	boolean is_kata = isKata (c);
+ 	boolean is_han = isHan (c);
+ 
+ 	// Special case Japanese.
+ 	if (! is_hira && ! is_kata && ! is_han
+ 	    && type != Character.NON_SPACING_MARK
+ 	    && (isHira (n) || isKata (n) || isHan (n)))
+ 	  break;
+ 
+ 	if (is_hira || is_kata || is_han || is_letter)
+ 	  {
+ 	    // Now we need to do some lookahead.  We might need to do
+ 	    // quite a bit of lookahead, so we save our position and
+ 	    // restore it later.
+ 	    int save = iter.getIndex();
+ 	    // Skip string of non spacing marks.
+ 	    while (n != CharacterIterator.DONE
+ 		   && Character.getType(n) == Character.NON_SPACING_MARK)
+ 	      n = iter.next();
+ 	    if (n == CharacterIterator.DONE)
+ 	      break;
+ 	    if ((is_hira && ! isHira (n))
+ 		|| (is_kata && ! isHira (n) && ! isKata (n))
+ 		|| (is_han && ! isHira (n) && ! isHan (n))
+ 		// FIXME: we treat apostrophe as part of a word.  This
+ 		// is an English-ism.
+ 		|| (is_letter && ! Character.isLetter(n) && n != '\''))
+ 	      break;
+ 	    iter.setIndex(save);
+ 	  }
+       }
+ 
+     return iter.getIndex();
+   }
+ 
+   public int previous ()
+   {
+     int start = iter.getBeginIndex();
+     if (iter.getIndex() == start)
+       return DONE;
+ 
+     while (iter.getIndex() >= start)
+       {
+ 	char c = iter.previous();
+ 	if (c == CharacterIterator.DONE)
+ 	  break;
+ 
+ 	boolean is_hira = isHira (c);
+ 	boolean is_kata = isKata (c);
+ 	boolean is_han = isHan (c);
+ 	boolean is_letter = Character.isLetter(c);
+ 
+ 	char n = iter.previous();
+ 	if (n == CharacterIterator.DONE)
+ 	  break;
+ 	iter.next();
+ 	int type = Character.getType(n);
+ 	// Break after paragraph separators.
+ 	if (type == Character.PARAGRAPH_SEPARATOR
+ 	    || type == Character.LINE_SEPARATOR)
+ 	  break;
+ 
+ 	// Break between letters and non-letters.
+ 	// FIXME: we treat apostrophe as part of a word.  This
+ 	// is an English-ism.
+ 	if (n != '\'' && ! Character.isLetter(n)
+ 	    && type != Character.NON_SPACING_MARK
+ 	    && is_letter)
+ 	  break;
+ 
+ 	// Always break after certain symbols, such as punctuation.
+ 	// This heuristic is derived from hints in the JCL book and is
+ 	// not part of Unicode.  It seems to be right, however.
+ 	// FIXME: we treat apostrophe as part of a word.  This
+ 	// is an English-ism.
+ 	if (n != '\''
+ 	    && (type == Character.DASH_PUNCTUATION
+ 		|| type == Character.START_PUNCTUATION
+ 		|| type == Character.END_PUNCTUATION
+ 		|| type == Character.CONNECTOR_PUNCTUATION
+ 		|| type == Character.OTHER_PUNCTUATION
+ 		|| type == Character.MATH_SYMBOL
+ 		|| type == Character.CURRENCY_SYMBOL
+ 		|| type == Character.MODIFIER_SYMBOL
+ 		|| type == Character.OTHER_SYMBOL
+ 		|| type == Character.FORMAT
+ 		|| type == Character.CONTROL))
+ 	  break;
+ 
+ 	// Special case Japanese.
+ 	if ((is_hira || is_kata || is_han)
+ 	    && ! isHira (n) && ! isKata (n) && ! isHan (n)
+ 	    && type != Character.NON_SPACING_MARK)
+ 	  break;
+ 
+ 	// We might have to skip over non spacing marks to see what's
+ 	// on the other side.
+ 	if (! is_hira || (! is_letter && c != '\''))
+ 	  {
+ 	    int save = iter.getIndex();
+ 	    while (n != CharacterIterator.DONE
+ 		   && Character.getType(n) == Character.NON_SPACING_MARK)
+ 	      n = iter.previous();
+ 	    iter.setIndex(save);
+ 	    // This is a strange case: a bunch of non-spacing marks at
+ 	    // the beginning.  We treat the current location as a word
+ 	    // break.
+ 	    if (n == CharacterIterator.DONE)
+ 	      break;
+ 	    if ((isHira (n) && ! is_hira)
+ 		|| (isKata (n) && ! is_hira && ! is_kata)
+ 		|| (isHan (n) && ! is_hira && ! is_han)
+ 		// FIXME: we treat apostrophe as part of a word.  This
+ 		// is an English-ism.
+ 		|| (! is_letter && c != '\'' && Character.isLetter(n)))
+ 	      break;
+ 	  }
+       }
+ 
+     return iter.getIndex();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/text/package.html gcc-4.1.0/libjava/classpath/gnu/java/text/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/text/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/text/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.text package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.text</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/util/DoubleEnumeration.java gcc-4.1.0/libjava/classpath/gnu/java/util/DoubleEnumeration.java
*** gcc-4.0.2/libjava/classpath/gnu/java/util/DoubleEnumeration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/util/DoubleEnumeration.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,138 ----
+ /* gnu.java.util.DoubleEnumeration
+    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.util;
+ 
+ import java.util.Enumeration;
+ import java.util.NoSuchElementException;
+ 
+ 
+ /**
+  * This is a helper class that combines two Enumerations.
+  * It returns the elements of the first Enumeration until it has
+  * no more elements and then returns the elements of the second
+  * Enumeration.<br>
+  * 
+  * In the default case:
+  * <pre>
+  * doubleEnum = new DoubleEnumeration(enum1, enum2);
+  * while (doubleEnum.hasMoreElements()) {
+  *    Object o = doubleEnum.nextElement();
+  *    do_something(o);
+  * }
+  * </pre>
+  * it calls hasMoreElements of the Enumerations as few times as
+  * possible.
+  * The references to the Enumerations are cleared as soon as they have no
+  * more elements to help garbage collecting.
+  *
+  * @author Jochen Hoenicke
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class DoubleEnumeration implements Enumeration
+ {
+   /**
+    * This is true as long as one of the enumerations has more
+    * elements.  
+    * Only valid when hasChecked is true.
+    * Set in <code>hasMoreElements()</code>
+    */
+   private boolean hasMore;
+   /**
+    * This is true, if it is sure that hasMore indicates wether there are
+    * more elements.
+    * Set to true in <code>hasMoreElements()</code>.
+    * Set to false in <code>getNextElement()</code>.
+    */
+   private boolean hasChecked;
+   /**
+    * The first enumeration.
+    */
+   private Enumeration e1;
+   /**
+    * The second enumeration.
+    */
+   private Enumeration e2;
+ 
+   /**
+    * Creates a new Enumeration combining the given two enumerations.
+    * The enumerations mustn't be accessed by other classes.
+    */
+   public DoubleEnumeration(Enumeration e1, Enumeration e2)
+   {
+     this.e1 = e1;
+     this.e2 = e2;
+     hasChecked = false;
+   }
+ 
+   /**
+    * Returns true, if at least one of the two enumerations has more
+    * elements.
+    */
+   public boolean hasMoreElements()
+   {
+     if (hasChecked)
+       return hasMore;
+ 
+     hasMore = (e1 != null && e1.hasMoreElements());
+ 
+     if (!hasMore) {
+       e1 = e2;
+       e2 = null;
+       hasMore = (e1 != null && e1.hasMoreElements());
+     }
+ 
+     hasChecked = true;
+     return hasMore;
+   }
+ 
+   /**
+    * Returns the next element.  This returns the next element of the
+    * first enumeration, if it has more elements, otherwise the next
+    * element of the second enumeration. If both enumeration don't have
+    * any elements it throws a <code>NoSuchElementException</code>.
+    */
+   public Object nextElement()
+   {
+     if (!hasMoreElements())
+       throw new NoSuchElementException();
+     else {
+       hasChecked = false;
+       return e1.nextElement();
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/util/EmptyEnumeration.java gcc-4.1.0/libjava/classpath/gnu/java/util/EmptyEnumeration.java
*** gcc-4.0.2/libjava/classpath/gnu/java/util/EmptyEnumeration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/util/EmptyEnumeration.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,96 ----
+ /* EmptyEnumeration.java -- a constant empty enumeration
+    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.util;
+ 
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ import java.util.NoSuchElementException;
+ 
+ /**
+  * This is a helper class that produces an empty Enumerations. There is only
+  * one instance of this class that can be used whenever one needs a
+  * non-null but empty enumeration. Using this class prevents multiple
+  * small objects and inner classes. <code>getInstance()</code> returns
+  * the only instance of this class. It can be shared by multiple objects and
+  * threads.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public final class EmptyEnumeration implements Enumeration, Serializable
+ {
+   /** The only instance of this class */
+   private static final EmptyEnumeration instance = new EmptyEnumeration();
+ 
+   /**
+    * Private constructor that creates a new empty Enumeration.
+    */
+   private EmptyEnumeration()
+   {
+   }
+ 
+   /**
+    * Returns the only instance of this class.
+    * It can be shared by multiple objects and threads.
+    *
+    * @return the common empty enumeration
+    */
+   public static EmptyEnumeration getInstance()
+   {
+     return instance;
+   }
+ 
+   /**
+    * Returns false, since there are no elements.
+    *
+    * @return false
+    */
+   public boolean hasMoreElements()
+   {
+     return false;
+   }
+ 
+   /**
+    * Always throws <code>NoSuchElementException</code>, since it is empty.
+    *
+    * @throws NoSuchElementException this is empty
+    */
+   public Object nextElement()
+   {
+     throw new NoSuchElementException();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/util/package.html gcc-4.1.0/libjava/classpath/gnu/java/util/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/util/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/util/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.util package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.util</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/FileBasedFactory.java gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/FileBasedFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/FileBasedFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/FileBasedFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* FileBasedFactory - Default Classpath implementation of a PreferencesFactory
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.util.prefs;
+ 
+ import java.util.prefs.*;
+ 
+ /**
+  * Default Classpath implementation of a PreferencesFactory.
+  * Returns system and user root Preferences nodes that are read from files.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class FileBasedFactory implements PreferencesFactory {
+ 
+     public Preferences systemRoot() {
+         return null;
+     }
+ 
+     public Preferences userRoot() {
+         return null;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/MemoryBasedFactory.java gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/MemoryBasedFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/MemoryBasedFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/MemoryBasedFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* MemoryBasedFactory - Memory based PreferencesFactory usefull for testing
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.util.prefs;
+ 
+ import java.util.prefs.*;
+ 
+ /**
+  * Memory based PreferencesFactory usefull for testing.
+  * Returns completely empty Preferences for system and user roots.
+  * All changes are only backed by the current instances in memory.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class MemoryBasedFactory implements PreferencesFactory {
+ 
+     // Static fields containing the preferences root nodes
+     private static final Preferences systemPreferences
+         = new MemoryBasedPreferences(null, "", false);
+     private static final Preferences userPreferences
+         = new MemoryBasedPreferences(null, "", true);
+ 
+     public Preferences systemRoot() {
+         return systemPreferences;
+     }
+ 
+     public Preferences userRoot() {
+         return userPreferences;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/MemoryBasedPreferences.java gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/MemoryBasedPreferences.java
*** gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/MemoryBasedPreferences.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/MemoryBasedPreferences.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,144 ----
+ /* MemoryBasedPreferences - A Preference node which holds all entries in memory
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.util.prefs;
+ 
+ import java.util.HashMap;
+ 
+ import java.util.prefs.*;
+ 
+ /**
+  * A Preference node which holds all entries in memory
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class MemoryBasedPreferences extends AbstractPreferences {
+ 
+     /** True if this is a preference node in the user tree, false otherwise. */
+     private final boolean isUser;
+ 
+     /** Contains all the preference entries of this node. */
+     private HashMap entries = new HashMap();
+ 
+     /**
+      * Creates a new preferences node with the given name and parent.
+      * When isUser is true it will be user node otherwise it will be a system
+      * node. It will always set the <code>newNode</code> field to true
+      * since there is no real backing store, so all nodes are new.
+      */
+     public MemoryBasedPreferences(MemoryBasedPreferences parent,
+                                   String name,
+                                   boolean isUser) {
+         super(parent, name);
+         this.isUser = isUser;
+ 
+         // Since we do not have a real backing store all nodes are new
+         newNode = true;
+     }
+ 
+     /**
+      * Returns true if this node was created as a user node.
+      */
+     public boolean isUserNode() {
+         return isUser;
+     }
+ 
+     /**
+      * Returns an empty array since all children names are always already
+      * chached.
+      */
+     protected String[] childrenNamesSpi() throws BackingStoreException {
+         return new String[0];
+     }
+ 
+     /**
+      * Returns a new node with the given name with as parent this node and
+      * with the <code>isUser</code> flag set to the same value as this node.
+      */
+     protected AbstractPreferences childSpi(String childName) {
+        return new MemoryBasedPreferences(this, childName, isUser);
+     }
+ 
+     /**
+      * Returns a (possibly empty) array of keys of the preferences entries of
+      * this node.
+      */
+     protected String[] keysSpi() throws BackingStoreException {
+         return (String[]) entries.keySet().toArray(new String[entries.size()]);
+     }
+ 
+     /**
+      * Returns the associated value from this nodes preferences entries or
+      * null when the key has not been set.
+      */
+     protected String getSpi(String key) {
+         return (String) entries.get(key);
+     }
+ 
+     /**
+      * Sets the value for the given key.
+      */
+     protected void putSpi(String key, String value) {
+         entries.put(key, value);
+     }
+ 
+     /**
+      * Removes the entry with the given key.
+      */
+     protected void removeSpi(String key) {
+         entries.remove(key);
+     }
+ 
+     /**
+      * Does nothing since we do not have any backing store.
+      */
+     protected void flushSpi() {
+     }
+ 
+     /**
+      * Does nothing since we do not have any backing store.
+      */
+     protected void syncSpi() {
+     }
+ 
+     /**
+      * Just removes the entries map of this node.
+      */
+     protected void removeNodeSpi() {
+         entries = null;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/NodeReader.java gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/NodeReader.java
*** gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/NodeReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/NodeReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,223 ----
+ /* NodeReader - Reads and imports preferences nodes from files
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.util.prefs;
+ 
+ import java.io.BufferedReader;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.Reader;
+ import java.util.prefs.InvalidPreferencesFormatException;
+ import java.util.prefs.Preferences;
+ import java.util.prefs.PreferencesFactory;
+ 
+ /**
+  * Reads and imports preferences nodes from files.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class NodeReader {
+ 
+     private final BufferedReader br;
+     private String line = "";
+ 
+     private final PreferencesFactory factory;
+ 
+     public NodeReader(Reader r, PreferencesFactory factory) {
+         if(r instanceof BufferedReader) {
+             br = (BufferedReader) r;
+         } else {
+             br = new BufferedReader(r);
+         }
+         this.factory = factory;
+     }
+ 
+     public NodeReader(InputStream is, PreferencesFactory factory) {
+         this(new InputStreamReader(is), factory);
+     }
+ 
+     public void importPreferences()
+                     throws InvalidPreferencesFormatException, IOException
+     {
+         readPreferences();
+     }
+ 
+     private void readPreferences()
+                     throws InvalidPreferencesFormatException, IOException
+     {
+         // Begin starting tag
+         skipTill("<preferences");
+ 
+         readRoot();
+ 
+         // Ending tag
+         skipTill("</preferences>");
+     }
+ 
+     private void readRoot()
+                     throws InvalidPreferencesFormatException, IOException
+     {
+         // Begin starting tag
+         skipTill("<root");
+ 
+         // type attribute
+         skipTill("type=\"");
+         String type = readTill("\"");
+         Preferences root;
+         if ("user".equals(type)) {
+             root = factory.userRoot();
+         } else if ("system".equals(type)) {
+             root = factory.systemRoot();
+         } else {
+             throw new InvalidPreferencesFormatException("Unknown type: "
+                                                         + type);
+         }
+ 
+         // Read root map and subnodes
+         readMap(root);
+         readNodes(root);
+ 
+         // Ending tag
+         skipTill("</root>");
+     }
+ 
+     private void readNodes(Preferences node)
+                     throws InvalidPreferencesFormatException, IOException
+     {
+         while ("node".equals(nextTag())) {
+             skipTill("<node");
+             skipTill("name=\"");
+             String name = readTill("\"");
+             Preferences subnode = node.node(name);
+             System.out.println("Found subnode: " + subnode.absolutePath());
+             readMap(subnode);
+             readNodes(subnode);
+             skipTill("</node>");
+         }
+         
+     }
+ 
+     private void readMap(Preferences node)
+                     throws InvalidPreferencesFormatException, IOException
+     {
+         // Begin map tag
+         skipTill("<map");
+ 
+         // Empty map?
+         if (line.startsWith("/>")) {
+             line = line.substring(2);
+             return;
+         }
+ 
+         // Map entries
+         readEntries(node);
+ 
+         // Ending tag
+         skipTill("</map>");
+     }
+ 
+     private void readEntries(Preferences node)
+                     throws InvalidPreferencesFormatException, IOException
+     {
+         while ("entry".equals(nextTag())) {
+             skipTill("<entry");
+             skipTill("key=\"");
+             String key = readTill("\"");
+             skipTill("value=\"");
+             String value = readTill("\"");
+             System.out.println("Key: " + key + " Value: " + value);
+             node.put(key, value);
+         }
+     }
+ 
+     private void skipTill(String s)
+                     throws InvalidPreferencesFormatException, IOException
+     {
+         while(true) {
+             if (line == null)
+                 throw new InvalidPreferencesFormatException(s + " not found");
+             
+             int index = line.indexOf(s);
+             if (index == -1)  {
+                 line = br.readLine();
+             } else {
+                 line = line.substring(index+s.length());
+                 return;
+             }
+         }
+     }
+ 
+     private String readTill(String s)
+                     throws InvalidPreferencesFormatException
+     {
+         int index = line.indexOf(s);
+         if (index == -1)
+                 throw new InvalidPreferencesFormatException(s + " not found");
+ 
+         String read = line.substring(0, index);
+         line = line.substring(index+s.length());
+ 
+         return read;
+     }
+ 
+     private String nextTag()
+                     throws InvalidPreferencesFormatException, IOException
+     {
+         while(true) {
+             if (line == null)
+                 throw new InvalidPreferencesFormatException("unexpected EOF");
+             
+             int start = line.indexOf("<");
+             if (start == -1)  {
+                 line = br.readLine();
+             } else {
+                 // Find end of tag
+                 int end = start+1;
+                 while (end != line.length()
+                        && " \t\r\n".indexOf(line.charAt(end)) == -1) {
+                     end++;
+                 }
+                 // Line now starts at the found tag
+                 String tag = line.substring(start+1,end);
+                 line = line.substring(start);
+                 return tag;
+             }
+         }
+     }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/NodeWriter.java gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/NodeWriter.java
*** gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/NodeWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/NodeWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,315 ----
+ /* NodeWriter - Writes and exports preferences nodes to files
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.java.util.prefs;
+ 
+ import java.io.BufferedWriter;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.io.Writer;
+ 
+ import java.util.StringTokenizer;
+ 
+ import java.util.prefs.*;
+ 
+ /**
+  * Writes and exports preferences nodes to files
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class NodeWriter {
+ 
+     /** The Preferences node to write. */
+     private final Preferences prefs;
+ 
+     /** The bufferedWriter to write the node to. */
+     private final BufferedWriter bw;
+ 
+     /**
+      * True if the complete sub tree should be written,
+      * false if only the node should be written.
+      */
+     private boolean subtree;
+ 
+     /**
+      * Creates a new NodeWriter for the given preferences node and writer.
+      */
+     public NodeWriter(Preferences prefs, Writer w) {
+         this.prefs = prefs;
+         if (w instanceof BufferedWriter) {
+             this.bw = (BufferedWriter) w;
+         } else {
+             this.bw = new BufferedWriter(w);
+         }
+     }
+ 
+     /**
+      * Creates a new NodeWriter for the given preferences node and
+      * outputstream. Creates a new OutputStreamWriter.
+      */
+     public NodeWriter(Preferences prefs, OutputStream os) {
+         this(prefs, new OutputStreamWriter(os));
+     }
+ 
+     /**
+      * Writes the preference node plus the complete subtree.
+      */
+     public void writePrefsTree() throws BackingStoreException, IOException {
+         subtree = true;
+         writeHeader();
+         writePreferences();
+         bw.flush();
+     }
+ 
+     /**
+      * Writes only the preference node.
+      */
+     public void writePrefs() throws BackingStoreException, IOException {
+         subtree = false;
+         writeHeader();
+         writePreferences();
+         bw.flush();
+     }
+ 
+     /**
+      * Writes the standard header.
+      */
+     private void writeHeader() throws BackingStoreException, IOException {
+         bw.write("<?xml version=\"1.0\"?>");
+         bw.newLine();
+         bw.newLine();
+         bw.write("<!-- GNU Classpath java.util.prefs Preferences ");
+ 
+         if (prefs.isUserNode()) {
+             bw.write("user");
+         } else {
+             bw.write("system");
+         }
+ 
+         // root node?
+         if (prefs.parent() == null) {
+             bw.write(" root");
+         }
+ 
+         if (subtree) {
+             bw.write(" tree");
+         } else {
+             bw.write(" node");
+         }
+ 
+         // no root?
+         if (prefs.parent() != null) {
+             bw.newLine();
+             bw.write("     '");
+             bw.write(prefs.absolutePath());
+             bw.write('\'');
+             bw.newLine();
+         }
+         bw.write(" -->");
+         bw.newLine();
+         bw.newLine();
+     }
+ 
+     /**
+      * Write the preferences tag and the root.
+      */
+     private void writePreferences() throws BackingStoreException, IOException {
+         bw.write("<preferences>");
+         bw.newLine();
+         writeRoot();
+         bw.write("</preferences>");
+         bw.newLine();
+     }
+ 
+     private void writeRoot() throws BackingStoreException, IOException {
+         bw.write("  <root type=\"");
+         if (prefs.isUserNode()) {
+             bw.write("user");
+         } else {
+             bw.write("system");
+         }
+         bw.write("\"/>");
+ 
+         writeRootMap();
+         writeNode();
+ 
+         bw.write("  </root>");
+         bw.newLine();
+     }
+ 
+     private void writeRootMap() throws BackingStoreException, IOException {
+         // Is it a root node?
+         if(prefs.parent() == null && prefs.keys().length > 0) {
+             bw.newLine();
+             writeMap(prefs, 2);
+         } else {
+             bw.write("<map/>");
+             bw.newLine();
+         }
+     }
+ 
+     /**
+      * Writes all the parents of the preferences node without any entries.
+      * Returns the number of parents written, which has to be used as
+      * argument to <code>writeCloseParents()</code> after writing the node
+      * itself.
+      */
+     private int writeParents() throws IOException {
+         int parents;
+         String path = prefs.absolutePath();
+         int lastslash = path.lastIndexOf("/");
+         if (lastslash > 0) {
+             path = path.substring(1, lastslash);
+             StringTokenizer st = new StringTokenizer(path);
+             parents = st.countTokens();
+ 
+             System.out.println("path: " + path);
+             System.out.println("parents: " + parents);
+ 
+             for (int i=0; i<parents; i++) {
+                 String name = st.nextToken();
+                 indent(i+2);
+                 bw.write("<node name=\"" + name + "\">");
+                 bw.write("<map/>");
+                 bw.write("</node>");
+                 bw.newLine();
+             }
+         } else {
+             parents = 0;
+         }
+ 
+         return parents;
+     }
+ 
+     private void writeCloseParents(int parents) throws IOException {
+         while(parents > 0) {
+             indent(parents+1);
+             bw.write("</node>");
+             bw.newLine();
+             parents--;
+         }
+     }
+ 
+     private void writeNode() throws BackingStoreException, IOException {
+         int parents = writeParents();
+         // root?
+         int indent;
+         if (prefs.parent() == null) {
+             indent = parents+1;
+         } else {
+             indent = parents+2;
+         }
+         writeNode(prefs, indent);
+         writeCloseParents(parents);
+     }
+ 
+     private void writeNode(Preferences node, int indent)
+                                     throws BackingStoreException, IOException
+     {
+         // not root?
+         if (node.parent() != null) {
+             indent(indent);
+             bw.write("<node name=\"" + node.name() + "\">");
+             if (node.keys().length > 0) {
+                 bw.newLine();
+             }
+             writeMap(node, indent+1);
+         }
+ 
+         if (subtree) {
+             String[] children = node.childrenNames();
+             for (int i=0; i<children.length; i++) {
+                 Preferences child = node.node(children[i]);
+                 writeNode(child, indent+1);
+             }
+         }
+ 
+         // not root?
+         if (node.parent() != null) {
+             indent(indent);
+             bw.write("</node>");
+             bw.newLine();
+         }
+     }
+ 
+     private void writeMap(Preferences node, int indent) 
+                                     throws BackingStoreException, IOException
+     {
+         // construct String used for indentation
+         StringBuffer indentBuffer = new StringBuffer(2*indent);
+         for (int i=0; i < indent; i++)
+             indentBuffer.append("  ");
+         String indentString = indentBuffer.toString();
+ 
+         if (node.keys().length > 0) {
+             bw.write(indentString);
+             bw.write("<map>");
+             bw.newLine();
+             writeEntries(node, indentString + "  ");
+             bw.write(indentString);
+             bw.write("</map>");
+         } else {
+             bw.write("<map/>");
+         }
+         bw.newLine();
+     }
+ 
+     private void writeEntries(Preferences node, String indent)
+                                     throws BackingStoreException, IOException
+     {
+         String[] keys = node.keys();
+         for(int i = 0; i < keys.length; i++) {
+             String value = node.get(keys[i], null);
+             if (value == null) {
+                 throw new BackingStoreException("null value for key '"
+                                                 + keys[i] + "'");
+             }
+ 
+             bw.write(indent);
+             bw.write("<entry key=\"" + keys[i] + "\""
+                     + " value=\"" + value + "\"/>");
+             bw.newLine();
+         }
+     }
+ 
+     private void indent(int x) throws IOException {
+         for (int i=0; i<x; i++) {
+             bw.write("  ");
+         }
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/package.html gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/package.html
*** gcc-4.0.2/libjava/classpath/gnu/java/util/prefs/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/java/util/prefs/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in gnu.java.util.prefs package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.java.util.prefs</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/crypto/DiffieHellmanImpl.java gcc-4.1.0/libjava/classpath/gnu/javax/crypto/DiffieHellmanImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/crypto/DiffieHellmanImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/crypto/DiffieHellmanImpl.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,159 ----
+ /* DiffieHellmanImpl.java -- implementation of the Diffie-Hellman key agreement.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.crypto;
+ 
+ import gnu.java.security.provider.GnuDHPublicKey;
+ 
+ import java.math.BigInteger;
+ 
+ import java.security.Key;
+ import java.security.InvalidKeyException;
+ import java.security.PrivateKey;
+ import java.security.PublicKey;
+ import java.security.SecureRandom;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ import javax.crypto.KeyAgreementSpi;
+ import javax.crypto.SecretKey;
+ import javax.crypto.interfaces.DHPrivateKey;
+ import javax.crypto.interfaces.DHPublicKey;
+ import javax.crypto.spec.DHParameterSpec;
+ import javax.crypto.spec.SecretKeySpec;
+ 
+ /**
+  * The Diffie-Hellman key agreement.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public final class DiffieHellmanImpl extends KeyAgreementSpi
+ {
+ 
+   /** The private key being used for this agreement. */
+   private DHPrivateKey key;
+ 
+   /** The current result. */
+   private BigInteger result;
+ 
+   /** True if the caller told us we are done. */
+   private boolean last_phase_done;
+ 
+   /** Trivial default constructor. */
+   public DiffieHellmanImpl ()
+   {
+     key = null;
+     result = null;
+     last_phase_done = false;
+   }
+ 
+   // KeyAgreementSpi methods.
+ 
+   protected Key engineDoPhase (final Key incoming, final boolean lastPhase)
+     throws InvalidKeyException
+   {
+     if (key == null)
+       throw new IllegalStateException ("not initialized");
+     if (last_phase_done)
+       throw new IllegalStateException ("last phase already done");
+ 
+     if (!(incoming instanceof DHPublicKey))
+       throw new InvalidKeyException ("expecting javax.crypto.interfaces.DHPublicKey");
+     DHPublicKey pub = (DHPublicKey) incoming;
+     DHParameterSpec s1 = key.getParams();
+     DHParameterSpec s2 = pub.getParams();
+     if (!s1.getG().equals (s2.getG())
+         || !s1.getP().equals (s2.getP())
+         || s1.getL() != s2.getL())
+       throw new InvalidKeyException ("supplied key is not compatible");
+ 
+     result = pub.getY().modPow (key.getX(), s1.getP());
+     if (lastPhase)
+       {
+ 	last_phase_done = true;
+ 	return null;
+       }
+ 
+     throw new IllegalArgumentException ("only supports two-party Diffie Hellman");
+   }
+ 
+   protected byte[] engineGenerateSecret ()
+   {
+     if (result == null || !last_phase_done)
+       throw new IllegalStateException ("not finished");
+ 
+     byte[] buf = result.toByteArray ();
+     if (buf[0] == 0x00)
+       {
+ 	byte[] buf2 = new byte[buf.length - 1];
+ 	System.arraycopy (buf, 1, buf2, 0, buf2.length);
+ 	buf = buf2;
+       }
+     return buf;
+   }
+ 
+   protected int engineGenerateSecret (final byte[] secret, final int offset)
+   {
+     byte[] s = engineGenerateSecret();
+     System.arraycopy (s, 0, secret, offset, s.length);
+     return s.length;
+   }
+ 
+   protected SecretKey engineGenerateSecret (final String algorithm)
+     throws InvalidKeyException
+   {
+     byte[] s = engineGenerateSecret();
+     return new SecretKeySpec (s, algorithm);
+   }
+ 
+   protected void engineInit (final Key key, final SecureRandom random)
+     throws InvalidKeyException
+   {
+     if (!(key instanceof DHPrivateKey))
+       throw new InvalidKeyException ("not a javax.crypto.interfaces.DHPrivateKey");
+     this.key = (DHPrivateKey) key;
+     result = null;
+     last_phase_done = false;
+   }
+ 
+   protected void engineInit (final Key key, final AlgorithmParameterSpec params,
+                              final SecureRandom random)
+     throws InvalidKeyException
+   {
+     engineInit (key, random);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/crypto/GnuDHPrivateKey.java gcc-4.1.0/libjava/classpath/gnu/javax/crypto/GnuDHPrivateKey.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/crypto/GnuDHPrivateKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/crypto/GnuDHPrivateKey.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,90 ----
+ /* GnuDHPrivateKey.java -- a Diffie-Hellman private key.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.crypto;
+ 
+ import java.math.BigInteger;
+ 
+ import javax.crypto.interfaces.DHKey;
+ import javax.crypto.interfaces.DHPrivateKey;
+ import javax.crypto.spec.DHParameterSpec;
+ 
+ /**
+  * A Diffie-Hellman private key.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class GnuDHPrivateKey implements DHPrivateKey
+ {
+ 
+   private final BigInteger x;
+   private final DHParameterSpec params;
+ 
+   public GnuDHPrivateKey (final BigInteger x, final DHParameterSpec params)
+   {
+     x.getClass ();
+     params.getClass ();
+     this.x = x;
+     this.params = params;
+   }
+ 
+   public DHParameterSpec getParams()
+   {
+     return params;
+   }
+ 
+   public String getAlgorithm()
+   {
+     return "DiffieHellman";
+   }
+ 
+   public String getFormat ()
+   {
+     return "NONE";
+   }
+ 
+   public byte[] getEncoded ()
+   {
+     return null;
+   }
+ 
+   public BigInteger getX ()
+   {
+     return x;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/crypto/RSACipherImpl.java gcc-4.1.0/libjava/classpath/gnu/javax/crypto/RSACipherImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/crypto/RSACipherImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/crypto/RSACipherImpl.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,311 ----
+ /* DiffieHellmanImpl.java -- implementation of the Diffie-Hellman key agreement.
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.crypto;
+ 
+ import gnu.classpath.ByteArray;
+ import gnu.classpath.debug.Component;
+ import gnu.classpath.debug.SystemLogger;
+ 
+ import java.math.BigInteger;
+ 
+ import java.security.AlgorithmParameters;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.SecureRandom;
+ 
+ import java.security.interfaces.RSAKey;
+ import java.security.interfaces.RSAPrivateKey;
+ import java.security.interfaces.RSAPrivateCrtKey;
+ import java.security.interfaces.RSAPublicKey;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ import java.util.logging.Logger;
+ 
+ import javax.crypto.BadPaddingException;
+ import javax.crypto.Cipher;
+ import javax.crypto.CipherSpi;
+ import javax.crypto.IllegalBlockSizeException;
+ import javax.crypto.NoSuchPaddingException;
+ import javax.crypto.ShortBufferException;
+ 
+ public class RSACipherImpl extends CipherSpi
+ {
+   private static final Logger logger = SystemLogger.SYSTEM;
+ 
+   private static final byte[] EMPTY = new byte[0];
+   private int opmode = -1;
+   private RSAPrivateKey decipherKey = null;
+   private RSAPublicKey blindingKey = null;
+   private RSAPublicKey encipherKey = null;
+   private SecureRandom random = null;
+   private byte[] dataBuffer = null;
+   private int pos = 0;
+ 
+   protected void engineSetMode (String mode) throws NoSuchAlgorithmException
+   {
+     throw new NoSuchAlgorithmException ("only one mode available");
+   }
+ 
+   protected void engineSetPadding (String pad) throws NoSuchPaddingException
+   {
+     throw new NoSuchPaddingException ("only one padding available");
+   }
+ 
+   protected int engineGetBlockSize ()
+   {
+     return 1;
+   }
+ 
+   protected int engineGetOutputSize (int inputLen)
+   {
+     int outputLen = 0;
+     if (decipherKey != null)
+       {
+         outputLen = (decipherKey.getModulus ().bitLength () + 7) / 8;
+       }
+     else if (encipherKey != null)
+       {
+         outputLen = (encipherKey.getModulus ().bitLength () + 7) / 8;
+       }
+     else
+       throw new IllegalStateException ("not initialized");
+     if (inputLen > outputLen)
+       throw new IllegalArgumentException ("not configured to encode " + inputLen
+                                           + "bytes; at most " + outputLen);
+     return outputLen;
+   }
+ 
+   protected int engineGetKeySize (final Key key) throws InvalidKeyException
+   {
+     if (!(key instanceof RSAKey))
+       throw new InvalidKeyException ("not an RSA key");
+     return ((RSAKey) key).getModulus ().bitLength ();
+   }
+ 
+   protected byte[] engineGetIV ()
+   {
+     return null;
+   }
+ 
+   protected AlgorithmParameters engineGetParameters()
+   {
+     return null;
+   }
+ 
+   protected void engineInit (int opmode, Key key, SecureRandom random)
+     throws InvalidKeyException
+   {
+     int outputLen = 0;
+     if (opmode == Cipher.ENCRYPT_MODE)
+       {
+         if (!(key instanceof RSAPublicKey))
+           throw new InvalidKeyException ("expecting a RSAPublicKey");
+         encipherKey = (RSAPublicKey) key;
+         decipherKey = null;
+         blindingKey = null;
+         outputLen = (encipherKey.getModulus ().bitLength () + 7) / 8;
+       }
+     else if (opmode == Cipher.DECRYPT_MODE)
+       {
+         if (key instanceof RSAPrivateKey)
+           {
+             decipherKey = (RSAPrivateKey) key;
+             encipherKey = null;
+             blindingKey = null;
+             outputLen = (decipherKey.getModulus ().bitLength () + 7) / 8;
+           }
+         else if (key instanceof RSAPublicKey)
+           {
+             if (decipherKey == null)
+               throw new IllegalStateException ("must configure decryption key first");
+             if (!decipherKey.getModulus ().equals (((RSAPublicKey) key).getModulus ()))
+               throw new InvalidKeyException ("blinding key is not compatible");
+             blindingKey = (RSAPublicKey) key;
+             return;
+           }
+         else
+           throw new InvalidKeyException ("expecting either an RSAPrivateKey or an RSAPublicKey (for blinding)");
+       }
+     else
+       throw new IllegalArgumentException ("only encryption and decryption supported");
+     this.random = random;
+     this.opmode = opmode;
+     pos = 0;
+     dataBuffer = new byte[outputLen];
+   }
+ 
+   protected void engineInit (int opmode, Key key, AlgorithmParameterSpec spec, SecureRandom random)
+     throws InvalidKeyException
+   {
+     engineInit (opmode, key, random);
+   }
+ 
+   protected void engineInit (int opmode, Key key, AlgorithmParameters params, SecureRandom random)
+     throws InvalidKeyException
+   {
+     engineInit (opmode, key, random);
+   }
+ 
+   protected byte[] engineUpdate (byte[] in, int offset, int length)
+   {
+     if (opmode != Cipher.ENCRYPT_MODE && opmode != Cipher.DECRYPT_MODE)
+       throw new IllegalStateException ("not initialized");
+     System.arraycopy (in, offset, dataBuffer, pos, length);
+     pos += length;
+     return EMPTY;
+   }
+ 
+   protected int engineUpdate (byte[] in, int offset, int length, byte[] out, int outOffset)
+   {
+     engineUpdate (in, offset, length);
+     return 0;
+   }
+ 
+   protected byte[] engineDoFinal (byte[] in, int offset, int length)
+     throws IllegalBlockSizeException, BadPaddingException
+   {
+     engineUpdate (in, offset, length);
+     if (opmode == Cipher.DECRYPT_MODE)
+       {
+         if (pos < dataBuffer.length)
+           throw new IllegalBlockSizeException ("expecting exactly " + dataBuffer.length + " bytes");
+         BigInteger enc = new BigInteger (1, dataBuffer);
+         byte[] dec = rsaDecrypt (enc);
+ 	logger.log (Component.CRYPTO, "RSA: decryption produced\n{0}",
+ 		    new ByteArray (dec));
+         if (dec[0] != 0x02)
+           throw new BadPaddingException ("expected padding type 2");
+         int i;
+         for (i = 1; i < dec.length && dec[i] != 0x00; i++);
+         int len = dec.length - i;
+         byte[] result = new byte[len];
+         System.arraycopy (dec, i, result, 0, len);
+         pos = 0;
+         return result;
+       }
+     else
+       {
+         offset = dataBuffer.length - pos;
+         if (offset < 3)
+           throw new IllegalBlockSizeException ("input is too large to encrypt");
+         byte[] dec = new byte[dataBuffer.length];
+         dec[0] = 0x02;
+         if (random == null)
+           random = new SecureRandom ();
+ 	byte[] pad = new byte[offset - 2];
+ 	random.nextBytes (pad);
+ 	for (int i = 0; i < pad.length; i++)
+ 	  if (pad[i] == 0)
+ 	    pad[i] = 1;
+ 	System.arraycopy (pad, 0, dec, 1, pad.length);
+         dec[dec.length - pos] = 0x00;
+         System.arraycopy (dataBuffer, 0, dec, offset, pos);
+ 	logger.log (Component.CRYPTO, "RSA: produced padded plaintext\n{0}",
+ 		    new ByteArray (dec));
+         BigInteger x = new BigInteger (1, dec);
+         BigInteger y = x.modPow (encipherKey.getPublicExponent (),
+                                  encipherKey.getModulus ());
+         byte[] enc = y.toByteArray ();
+         if (enc[0] == 0x00)
+           {
+             byte[] tmp = new byte[enc.length - 1];
+             System.arraycopy (enc, 1, tmp, 0, tmp.length);
+             enc = tmp;
+           }
+         pos = 0;
+         return enc;
+       }
+   }
+ 
+   protected int engineDoFinal (byte[] out, int offset)
+     throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
+   {
+     byte[] result = engineDoFinal (EMPTY, 0, 0);
+     if (out.length - offset < result.length)
+       throw new ShortBufferException ("need " + result.length + ", have "
+                                       + (out.length - offset));
+     System.arraycopy (result, 0, out, offset, result.length);
+     return result.length;
+   }
+ 
+   protected int engineDoFinal (final byte[] input, final int offset, final int length,
+ 			       final byte[] output, final int outputOffset)
+     throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
+   {
+     byte[] result = engineDoFinal (input, offset, length);
+     if (output.length - outputOffset < result.length)
+       throw new ShortBufferException ("need " + result.length + ", have "
+ 				      + (output.length - outputOffset));
+     System.arraycopy (result, 0, output, outputOffset, result.length);
+     return result.length;
+   }
+ 
+   /**
+    * Decrypts the ciphertext, employing RSA blinding if possible.
+    */
+   private byte[] rsaDecrypt (BigInteger enc)
+   {
+     if (random == null)
+       random = new SecureRandom ();
+     BigInteger n = decipherKey.getModulus ();
+     BigInteger r = null;
+     BigInteger pubExp = null;
+     if (blindingKey != null)
+       pubExp = blindingKey.getPublicExponent ();
+     if (pubExp != null && (decipherKey instanceof RSAPrivateCrtKey))
+       pubExp = ((RSAPrivateCrtKey) decipherKey).getPublicExponent ();
+     if (pubExp != null)
+       {
+         r = new BigInteger (n.bitLength () - 1, random);
+         enc = r.modPow (pubExp, n).multiply (enc).mod (n);
+       }
+ 
+     BigInteger dec = enc.modPow (decipherKey.getPrivateExponent (), n);
+ 
+     if (pubExp != null)
+       {
+         dec = dec.multiply (r.modInverse (n)).mod (n);
+       }
+ 
+     return dec.toByteArray ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,169 ----
+ /* BMPDecoder.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.nio.ByteBuffer;
+ import java.nio.ByteOrder;
+ import java.awt.image.ColorModel;
+ import java.awt.image.IndexColorModel;
+ import java.awt.image.BufferedImage;
+ 
+ public abstract class BMPDecoder {
+ 
+     protected BMPInfoHeader infoHeader;
+     protected BMPFileHeader fileHeader;
+     protected long offset;
+     
+     public BMPDecoder(BMPFileHeader fh, BMPInfoHeader ih){
+ 	fileHeader = fh;
+ 	infoHeader = ih;
+ 	offset = BMPFileHeader.SIZE + BMPInfoHeader.SIZE;
+     }
+ 
+     /**
+      * Determines the coding type of the bitmap and returns the corresponding
+      * decoder.
+      */
+     public static BMPDecoder getDecoder(BMPFileHeader fh, BMPInfoHeader ih){
+ 	switch(ih.getCompression()){
+ 	case BMPInfoHeader.BI_RGB: // uncompressed RGB
+ 	    switch(ih.getBitCount()){
+ 	    case 32:
+ 		return new DecodeBF32(fh, ih, true);
+ 
+ 	    case 24:
+ 		return new DecodeRGB24(fh, ih);
+ 
+ 	    case 16:
+ 		return new DecodeBF16(fh, ih, true);
+ 
+ 	    case 8:
+ 		return new DecodeRGB8(fh, ih);
+ 
+ 	    case 4:
+ 		return new DecodeRGB4(fh, ih);
+ 
+ 	    case 1:
+ 		return new DecodeRGB1(fh, ih);
+ 
+ 	    default:
+ 		return null;
+ 	    }
+ 
+ 	case BMPInfoHeader.BI_RLE8:
+ 	    return new DecodeRLE8(fh, ih);
+ 
+ 	case BMPInfoHeader.BI_RLE4:
+ 	    return new DecodeRLE4(fh, ih);
+ 
+ 	case BMPInfoHeader.BI_BITFIELDS:
+ 	    switch(ih.getBitCount()){
+ 	    case 16:
+ 		return new DecodeBF16(fh, ih, false);
+ 
+ 	    case 32:
+ 		return new DecodeBF32(fh, ih, false);
+ 
+ 	    default:
+ 		return null;
+ 	    }
+ 		
+ 	default:
+ 	    return null;
+ 	}
+     }
+ 
+     /**
+      * The image decoder.
+      */
+     public abstract BufferedImage decode(ImageInputStream in) 
+ 	throws IOException, BMPException;
+ 
+     /**
+      * Reads r,g,b bit masks from an inputstream
+      */
+     protected int[] readBitMasks(ImageInputStream in) throws IOException {
+ 	int[] bitmasks = new int[3];
+ 	byte[] temp = new byte[12];
+ 	if(in.read(temp) != 12)
+ 	    throw new IOException("Couldn't read bit masks.");
+ 	offset += 12;
+ 
+ 	ByteBuffer buf = ByteBuffer.wrap(temp);
+ 	buf.order(ByteOrder.LITTLE_ENDIAN);
+ 	bitmasks[0] = buf.getInt();
+ 	bitmasks[1] = buf.getInt();
+ 	bitmasks[2] = buf.getInt();
+ 	return bitmasks;
+     }
+ 
+     /**
+      * Reads an N-color palette from an inputstream in RGBQUAD format and 
+      * returns an equivalent ColorModel object
+      */
+     protected IndexColorModel readPalette(ImageInputStream in) throws IOException {
+ 	int N = infoHeader.getNumberOfPaletteEntries();
+ 	byte[] r = new byte[N];
+ 	byte[] g = new byte[N];
+ 	byte[] b = new byte[N];
+ 	for(int i=0;i<N;i++){
+ 	    byte[] RGBquad = new byte[4];
+ 	    if(in.read(RGBquad) != 4)
+ 		throw new IOException("Error reading palette information.");
+ 	    // RGBQUAD structure is b,g,r,0
+ 	    r[i] = RGBquad[2];
+ 	    g[i] = RGBquad[1];
+ 	    b[i] = RGBquad[0];
+ 	}
+ 	
+ 	offset += 4*N;
+ 	return new IndexColorModel(8, N, r, g, b);
+     }
+ 
+     /**
+      * Read bytes to the start of the image data
+      */
+     protected void skipToImage(ImageInputStream in) throws IOException {
+ 	byte[] d = new byte[1];
+ 	long n = fileHeader.getOffset() - offset;
+ 	for(int i=0;i<n;i++)
+ 	    in.read(d);
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPException.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPException.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPException.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,47 ----
+ /* BMPException.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import javax.imageio.IIOException;
+ 
+ public class BMPException extends IIOException {
+ 
+     public BMPException(String message){
+ 	super(message);
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,128 ----
+ /* BMPFileHeader.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.io.OutputStream;
+ import java.nio.ByteBuffer;
+ import java.nio.ByteOrder;
+ 
+ public class BMPFileHeader {
+     /** Header signature, always 'BM' */
+     private final static short bfType = 0x424d;
+ 
+     /** Bitmap file size, in bytes. */
+     private long bfSize;
+     
+     /** Offset from the beginning of the file to the bitmap data */
+     private long bfOffBits;
+ 
+     /** BITMAPFILEHEADER is 14 bytes */
+     public static final int SIZE = 14;
+ 
+     /**
+      * Creates the header from an input stream, which is not closed.
+      * @throws IOException if an I/O error occured.
+      * @throws BMPException if the header was invalid
+      */
+     public BMPFileHeader(ImageInputStream in) throws IOException, BMPException {
+         byte[] data = new byte[SIZE];
+ 
+ 	if (in.read(data) != SIZE)
+ 	    throw new IOException("Couldn't read header.");
+ 	ByteBuffer buf = ByteBuffer.wrap(data);
+ 
+ 	if(buf.getShort(0) != bfType)
+ 	    throw new BMPException("Not a BMP file.");
+ 
+ 	buf.order(ByteOrder.LITTLE_ENDIAN);
+ 
+ 	// get size (keep unsigned)
+ 	bfSize = ((long)buf.getInt(2) & (0xFFFFFFFF));
+ 
+ 	// Two reserved shorts are here, and should be zero,
+ 	// perhaps they should be tested to be zero, but I don't
+ 	// feel this strictness is necessary.
+ 	
+ 	bfOffBits = ((long)buf.getInt(10) & (0xFFFFFFFF));
+     }
+ 
+     /**
+      * Writes the header to an output stream, which is not closed or flushed.
+      * @throws IOException if an I/O error occured.
+      */
+     public void write(OutputStream out) throws IOException {
+ 	ByteBuffer buf = ByteBuffer.allocate(SIZE);
+ 	buf.putShort(0, bfType); // ID
+ 	buf.putInt(2, (int)(bfSize & (0xFFFFFFFF))); // size
+ 	buf.putInt(6, 0); // 4 reserved bytes set to zero
+ 	buf.putInt(2, (int)(bfOffBits & (0xFFFFFFFF))); // size
+ 	out.write(buf.array());
+     }
+     
+     /**
+      * Sets the file size
+      */
+     public void setSize(long size){
+ 	bfSize = size;
+     }
+ 
+     /**
+      * Sets the bitmap offset within the file
+      */
+     public void setOffset(long offset){
+ 	bfOffBits = offset;
+     }
+ 
+     /**
+      * Gets the file size
+      */
+     public long getSize(){
+ 	return bfSize;
+     }
+ 
+     /**
+      * Gets the bitmap offset within the file
+      */
+     public long getOffset(){
+ 	return bfOffBits;
+     }
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,153 ----
+ /* BMPImageReader.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.*;
+ import javax.imageio.spi.*;
+ import javax.imageio.metadata.*;
+ import javax.imageio.stream.ImageInputStream;
+ import java.util.Iterator;
+ import java.awt.image.BufferedImage;
+ 
+ public class BMPImageReader extends ImageReader {
+     private BMPInfoHeader infoHeader;
+     private BMPFileHeader fileHeader;
+     private BMPDecoder decoder;
+ 
+     protected BMPImageReader(ImageReaderSpi originatingProvider){
+ 	super(originatingProvider);
+ 	infoHeader = null;
+ 	fileHeader = null;
+ 	decoder = null;
+     }
+ 
+     private void validateIndex(int imageIndex) 
+ 	throws IndexOutOfBoundsException {
+ 	if (imageIndex != 0) 
+ 	    throw new IndexOutOfBoundsException("Invalid image index.");
+     }
+ 
+     public void setInput(Object input) {
+ 	super.setInput(input);
+     }
+ 
+     public void setInput(Object input, 
+ 			 boolean seekForwardOnly, 
+ 			 boolean ignoreMetadata) {
+ 	super.setInput(input, seekForwardOnly, ignoreMetadata);
+     }
+ 	
+     public void setInput(Object input, boolean isStreamable) {
+ 	super.setInput(input, isStreamable);
+ 	
+ 	if (!(input instanceof ImageInputStream))
+ 	    throw new IllegalArgumentException("Input not an ImageInputStream.");
+     }
+ 
+     private void checkStream() throws IOException {
+ 	if (!(input instanceof ImageInputStream)) 
+ 	    throw new IllegalStateException("Input not an ImageInputStream.");
+ 	if(input == null)
+ 	    throw new IllegalStateException("No input stream.");
+ 
+     }
+ 
+     private void readHeaders() throws IOException, IIOException {
+ 	if(fileHeader != null)
+ 	    return;
+ 
+ 	checkStream();
+ 
+ 	fileHeader = new BMPFileHeader((ImageInputStream)input);
+ 	infoHeader = new BMPInfoHeader((ImageInputStream)input);
+ 	decoder = BMPDecoder.getDecoder(fileHeader, infoHeader);
+     }
+     
+     public int getWidth(int imageIndex) throws IOException {
+ 	validateIndex(imageIndex);
+ 	readHeaders();
+ 	return infoHeader.getWidth();
+     }
+ 
+     public int getHeight(int imageIndex) throws IOException {
+ 	validateIndex(imageIndex);
+ 	readHeaders();
+ 	return infoHeader.getHeight();
+     }
+ 
+     public Iterator getImageTypes(int imageIndex){
+ 	validateIndex(imageIndex);
+ 	return null;
+     }
+ 
+     /**
+      * Returns the number of images. BMP files can only contain a single one.
+      */
+     public int getNumImages(boolean allowSearch){
+ 	return 1;
+     }
+ 
+ 
+     // FIXME: Support metadata
+     public IIOMetadata getImageMetadata(int imageIndex){
+ 	validateIndex(imageIndex);
+ 	return null;
+     }
+ 
+     // FIXME: Support metadata
+     public IIOMetadata getStreamMetadata(){
+ 	return null;
+     }
+ 
+     /**
+      * Reads the image indexed by imageIndex and returns it as 
+      * a complete BufferedImage, using a supplied ImageReadParam.
+     */	      
+     public BufferedImage read(int imageIndex, ImageReadParam param) 
+ 	throws IOException, IIOException {
+ 	validateIndex(imageIndex);
+ 	readHeaders();
+ 	return decoder.decode((ImageInputStream)input);
+     }
+     
+ 
+ }
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,123 ----
+ /* BMPImageReaderSpi.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import java.util.Locale;
+ import javax.imageio.ImageReader;
+ import javax.imageio.spi.ImageReaderSpi;
+ import javax.imageio.stream.ImageInputStream;
+ 
+ public class BMPImageReaderSpi extends ImageReaderSpi {
+ 
+     static final String vendorName = "GNU";
+     static final String version = "0.1";
+     static final String readerClassName =
+ 	"gnu.javax.imageio.bmp.BMPImageReader";
+     static final String[] names = { "Microsoft Windows BMP" };
+     static final String[] suffixes = { ".bmp", ".bm" };
+     static final String[] MIMETypes = {
+ 	"image/bmp",
+ 	"image/x-windows-bmp"};
+ 
+     static final String[] writerSpiNames = null; 
+     //{"com.mycompany.imageio.MyFormatImageWriterSpi" };
+     
+     static final boolean supportsStandardStreamMetadataFormat = false;
+     static final String nativeStreamMetadataFormatName = null;
+     static final String nativeStreamMetadataFormatClassName = null;
+     static final String[] extraStreamMetadataFormatNames = null;
+     static final String[] extraStreamMetadataFormatClassNames = null;
+     static final boolean supportsStandardImageMetadataFormat = false;
+     static final String nativeImageMetadataFormatName = null;
+     static final String nativeImageMetadataFormatClassName = null;
+     static final String[] extraImageMetadataFormatNames = null;
+     static final String[] extraImageMetadataFormatClassNames = null;
+     
+     public BMPImageReaderSpi() {
+ 	super(vendorName, version,
+ 	      names, suffixes, MIMETypes,
+ 	      readerClassName,
+ 	      STANDARD_INPUT_TYPE, // Accept ImageImageInputStreams
+ 	      writerSpiNames,
+ 	      supportsStandardStreamMetadataFormat,
+ 	      nativeStreamMetadataFormatName,
+ 	      nativeStreamMetadataFormatClassName,
+ 	      extraStreamMetadataFormatNames,
+ 	      extraStreamMetadataFormatClassNames,
+ 	      supportsStandardImageMetadataFormat,
+ 	      nativeImageMetadataFormatName,
+ 	      nativeImageMetadataFormatClassName,
+ 	      extraImageMetadataFormatNames,
+ 	      extraImageMetadataFormatClassNames);
+     }
+     
+     public String getDescription(Locale locale) {
+ 	return "Microsoft BMP v3";
+     }
+     
+     public boolean canDecodeInput(Object input)
+ 	throws IOException {
+ 	if (!(input instanceof ImageInputStream)) 
+ 	    return false;
+ 
+ 	ImageInputStream in = (ImageInputStream)input;
+ 	boolean retval;
+ 
+ 	in.mark();
+ 	try {
+ 	    new BMPFileHeader(in);
+ 	    retval = true;
+ 	} catch(BMPException e){
+ 	    retval = false;
+ 	}
+ 	in.reset();
+ 
+ 	return retval;
+     }
+     
+     public ImageReader createReaderInstance(Object extension) {
+ 	return new BMPImageReader(this);
+     }
+ }
+ 
+ 
+ 
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,201 ----
+ /* BMPInfoHeader.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.io.OutputStream;
+ import java.nio.ByteBuffer;
+ import java.nio.ByteOrder;
+ import java.awt.Dimension;
+ 
+ public class BMPInfoHeader {
+     /** Size of the bitmap info header*/
+     private int biSize; 
+ 
+     /** Pixel width of the bitmap */
+     private int biWidth; 
+ 
+     /** Pixel height of the bitmap */
+     private int biHeight;
+ 
+     /** Number of bitplanes = 1 */
+     private short biPlanes;
+ 
+     /** Number of bpp = 1,4,8,24 */
+     private short biBitCount;
+ 
+     /** Compression type, RGB8, RLE8, RLE4, BITFIELDS */
+     private int biCompression;
+ 
+     /** Byte size of the uncompressed bitmap, can be 0. */
+     private int biSizeImage;
+ 
+     /** X resolution, dots per meter */
+     private int biXPelsPerMeter;
+ 
+     /** Y resolution, dots per meter */
+     private int biYPelsPerMeter;
+ 
+     /** Number of colors used (palette only, can be 0 for all) */
+     private int biClrUsed;
+ 
+     /** Number of 'important' colors, 0 for all */
+     private int biClrImportant;
+ 
+     /** BITMAPINFOHEADER is 40 bytes */
+     public static final int SIZE = 40;
+ 
+     /**
+      * Compression types
+      */
+     public static final int BI_RGB = 0;
+     public static final int BI_RLE8 = 1;
+     public static final int BI_RLE4 = 2;
+     public static final int BI_BITFIELDS = 3;
+ 
+     /**
+      * Creates the header from an input stream, which is not closed.
+      * @throws IOException if an I/O error occured.
+      * @throws BMPException if the header was invalid
+      */
+     public BMPInfoHeader(ImageInputStream in) throws IOException, BMPException {
+         byte[] data = new byte[SIZE];
+ 	    
+ 	if (in.read(data) != SIZE)
+ 	    throw new IOException("Couldn't read header.");
+ 	ByteBuffer buf = ByteBuffer.wrap(data);
+ 	buf.order(ByteOrder.LITTLE_ENDIAN);
+ 
+ 	int n;
+ 	if((n=buf.getInt()) != SIZE)
+ 	    throw new BMPException("Invalid BITMAPINFOHEADER size: "+n);
+ 
+ 	biWidth = buf.getInt();
+ 	biHeight = buf.getInt();
+ 	biPlanes = buf.getShort();
+ 	setBitCount(buf.getShort());
+ 	setCompression(buf.getInt());
+ 	biSizeImage = buf.getInt();
+ 	biXPelsPerMeter = buf.getInt();
+ 	biYPelsPerMeter = buf.getInt();
+ 	biClrUsed = buf.getInt();
+ 	biClrImportant = buf.getInt();
+     }
+ 
+     public void setBitCount(short bitcount) throws BMPException {
+ 	switch(bitcount){
+ 	case 1:
+ 	case 4:
+ 	case 8:
+ 	case 16:
+ 	case 24:
+ 	case 32:
+ 	    biBitCount = bitcount;
+ 	    break;
+ 
+ 	default:
+ 	    throw new BMPException("Invalid number of bits per pixel: "+
+ 				   bitcount);
+ 	}
+     }
+ 
+     public short getBitCount() { return biBitCount; }
+ 
+     public void setCompression(int compression) throws BMPException {
+ 	switch(compression){
+ 	case BI_RLE8:
+ 	    if(getBitCount() != 8)
+ 		throw new BMPException("Invalid number of bits per pixel.");
+ 	    biCompression = compression;
+ 	    break;
+ 	case BI_RLE4:
+ 	    if(getBitCount() != 4)
+ 		throw new BMPException("Invalid number of bits per pixel.");
+ 	    biCompression = compression;
+ 	    break;
+ 
+ 	case BI_RGB:
+ 	case BI_BITFIELDS:
+ 	    biCompression = compression;
+ 	    break;
+ 
+ 	default:
+ 	    throw new BMPException("Unknown bitmap compression type.");
+ 	}
+     }
+ 
+     public int getNumberOfPaletteEntries(){
+ 	if(biClrUsed == 0)
+ 	    switch(biBitCount){
+ 	    case 1:
+ 		return 2;
+ 	    case 4:
+ 		return 16;
+ 	    case 8:
+ 		return 256;
+ 
+ 	    default: // should not happen
+ 		return 0;
+ 	    }
+ 
+ 	return biClrUsed;
+     }
+ 
+     public int getCompression(){
+ 	return biCompression;
+     }
+ 
+     public Dimension getSize(){
+ 	return new Dimension(biWidth, biHeight);
+     }
+ 
+     public int getWidth(){
+ 	return biWidth;
+     }
+ 
+     public int getHeight(){
+ 	return biHeight;
+     }
+ 
+     public void setSize(Dimension d){
+ 	biWidth = (int)d.getWidth();
+ 	biHeight = (int)d.getHeight();
+     }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF16.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF16.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF16.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF16.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,104 ----
+ /* DecodeBF16.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.nio.ByteBuffer;
+ import java.nio.ByteOrder;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.DataBufferUShort;
+ import java.awt.image.SinglePixelPackedSampleModel;
+ import java.awt.image.SampleModel;
+ import java.awt.Dimension;
+ 
+ public class DecodeBF16 extends BMPDecoder {
+     private int[] bitmasks;
+     private boolean useDefaultMasks;
+ 
+     public DecodeBF16(BMPFileHeader fh, BMPInfoHeader ih, 
+ 		      boolean udm){
+ 	super(fh,ih);
+ 
+ 	useDefaultMasks = udm;
+ 	if(useDefaultMasks) // 5-6-5 mask, B,G,R
+ 	    bitmasks = new int[] { 0x00F800, 0x0007E0, 0x00001F };
+     }
+ 
+     public BufferedImage decode(ImageInputStream in) throws IOException, BMPException {
+ 	if(!useDefaultMasks)
+ 	    bitmasks = readBitMasks(in);
+ 	skipToImage(in);
+ 
+ 	Dimension d = infoHeader.getSize();
+ 	int h = (int)d.getHeight();
+ 	int w = (int)d.getWidth();
+ 
+ 	// BMP scanlines are padded to dword offsets
+ 	int scansize = (w + (w&1)) << 1;
+ 	short[] data = new short[w*h];
+ 
+ 	for(int y=h-1;y>=0;y--){
+ 	    byte[] scanline = new byte[scansize];
+ 	    if(in.read(scanline) != scansize)
+ 		throw new IOException("Couldn't read image data.");
+ 
+ 	    for(int x=0;x<w;x++)
+ 		data[x + y*w] = (short)((scanline[x*2] & (0xFF)) | 
+ 				      ((scanline[x*2+1] & (0xFF)) << 8));
+ 	}
+ 
+ 	ColorModel cm = new DirectColorModel(16,
+ 					     bitmasks[0], bitmasks[1], bitmasks[2]);
+ 	SampleModel sm = new SinglePixelPackedSampleModel(DataBuffer.TYPE_USHORT, 
+ 							  w, h, 
+ 							  bitmasks);
+ 	DataBuffer db = new DataBufferUShort(data, w*h, 0);
+ 	WritableRaster raster = Raster.createWritableRaster(sm, db, null);
+ 	return new BufferedImage(cm, raster, false, null);
+     }
+ 
+ }
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,108 ----
+ /* DecodeBF32.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.nio.ByteBuffer;
+ import java.nio.ByteOrder;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ import java.awt.image.DirectColorModel;
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.DataBufferInt;
+ import java.awt.image.SinglePixelPackedSampleModel;
+ import java.awt.image.SampleModel;
+ import java.awt.Dimension;
+ 
+ public class DecodeBF32 extends BMPDecoder {
+     private int[] bitmasks;
+     private boolean useDefaultMasks;
+ 
+     public DecodeBF32(BMPFileHeader fh, BMPInfoHeader ih, 
+ 		      boolean udm){
+ 	super(fh,ih);
+ 
+ 	useDefaultMasks = udm;
+ 	if(useDefaultMasks)
+ 	    bitmasks = new int[] { 0x00FF0000, 0x0000FF00, 0x000000FF };
+     }
+ 
+     public BufferedImage decode(ImageInputStream in) throws IOException, BMPException {
+ 	if(!useDefaultMasks)
+ 	    bitmasks = readBitMasks(in);
+ 	skipToImage(in);
+ 
+ 	Dimension d = infoHeader.getSize();
+ 	int h = (int)d.getHeight();
+ 	int w = (int)d.getWidth();
+ 
+ 	// BMP scanlines are padded to dword offsets
+ 	int scansize = w << 2;
+ 	int[] data = new int[w*h];
+ 
+ 	
+ 	for(int y=h-1;y>=0;y--){
+ 	    byte[] scanline = new byte[scansize];
+ 	    if(in.read(scanline) != scansize)
+ 		throw new IOException("Couldn't read image data.");
+ 
+ 	    for(int x=0;x<w;x++)
+ 		data[x + y*w] = ((scanline[x<<2] & (0xFF)) | 
+ 				 ((scanline[(x<<2)+1] & (0xFF)) << 8) |
+ 				 ((scanline[(x<<2)+2] & (0xFF)) << 16) |
+ 				 ((scanline[(x<<2)+3] & (0xFF)) << 24));
+ 	}
+ 
+ 	ColorModel cm = new DirectColorModel(32,
+ 					     bitmasks[0], bitmasks[1], bitmasks[2]);
+ 	SampleModel sm = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, 
+ 							  w, h, 
+ 							  bitmasks);
+ 	DataBuffer db = new DataBufferInt(data, w*h);
+ 	WritableRaster raster = Raster.createWritableRaster(sm, db, null);
+     
+ 	return new BufferedImage(cm, raster, false, null);
+     }
+ 
+ }
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB1.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB1.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB1.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB1.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,96 ----
+ /* DecodeRGB1.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.IndexColorModel;
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.DataBufferByte;
+ import java.awt.image.MultiPixelPackedSampleModel;
+ import java.awt.image.SampleModel;
+ import java.awt.Dimension;
+ 
+ public class DecodeRGB1 extends BMPDecoder {
+ 
+     public DecodeRGB1(BMPFileHeader fh, BMPInfoHeader ih){
+ 	super(fh, ih);
+     }
+ 
+     public BufferedImage decode(ImageInputStream in) 
+ 	throws IOException, BMPException {
+ 
+ 	IndexColorModel palette = readPalette(in);
+ 	skipToImage(in);
+ 
+ 	Dimension d = infoHeader.getSize();
+ 	int h = (int)d.getHeight();
+ 	int w = (int)d.getWidth();
+ 	int size = (w*h)>>3;
+ 
+ 	int scansize = w>>3;
+ 	byte[] data = new byte[size];
+ 
+ 	for(int y=h-1;y>=0;y--){
+ 	    // Scanlines are padded to dword boundries
+ 	    int readsize = scansize;
+ 	    if((readsize & 3) != 0) readsize += (4 - (scansize & 3));
+ 
+ 	    byte[] scanline = new byte[readsize];
+ 	    if(in.read(scanline) != readsize)
+ 		throw new IOException("Couldn't read image data.");
+ 
+ 	    for(int x=0;x<scansize;x++)
+ 		data[x + y*scansize] = scanline[x];
+ 	}
+ 
+ 	SampleModel sm = new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, 
+ 							 w, h, 1);
+ 
+ 	DataBuffer db = new DataBufferByte(data, size, 0);
+ 	WritableRaster raster = Raster.createWritableRaster(sm, db, null);
+     
+ 	return new BufferedImage(palette, raster, false, null);
+     }
+ 
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,77 ----
+ /* DecodeRGB24.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.awt.image.BufferedImage;
+ import java.awt.Dimension;
+ 
+ public class DecodeRGB24 extends BMPDecoder {
+ 
+     public DecodeRGB24(BMPFileHeader fh, BMPInfoHeader ih){
+ 	super(fh, ih);
+     }
+ 
+     public BufferedImage decode(ImageInputStream in) throws IOException, BMPException {
+ 	skipToImage(in);
+ 
+ 	Dimension d = infoHeader.getSize();
+ 	int h = (int)d.getHeight();
+ 	int w = (int)d.getWidth();
+ 	BufferedImage image = new BufferedImage(w, h, 
+ 						BufferedImage.TYPE_INT_RGB);
+ 	// BMP scanlines are padded to dword offsets
+ 	int scansize = ((w*3 & 3) != 0)? w*3 + 4 - (w*3 & 3): w*3;
+ 	int[] data = new int[w*h];
+ 
+ 	for(int y=h-1;y>=0;y--){
+ 	    byte[] scanline = new byte[scansize];
+ 	    if(in.read(scanline) != scansize)
+ 		throw new IOException("Couldn't read image data.");
+ 
+ 	    for(int x=0;x<w;x++)
+ 		data[x + y*w] = scanline[x*3] + 
+ 		    (scanline[x*3+1] << 8) +
+ 		    (scanline[x*3+2] << 16);
+ 	}
+ 	image.setRGB(0, 0, w, h, data, 0, w);
+ 	return image;
+     }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB4.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB4.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB4.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB4.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,92 ----
+ /* DecodeRGB4.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.IndexColorModel;
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.DataBufferByte;
+ import java.awt.image.MultiPixelPackedSampleModel;
+ import java.awt.image.SampleModel;
+ import java.awt.Dimension;
+ 
+ public class DecodeRGB4 extends BMPDecoder {
+ 
+     public DecodeRGB4(BMPFileHeader fh, BMPInfoHeader ih){
+ 	super(fh, ih);
+     }
+ 
+     public BufferedImage decode(ImageInputStream in) throws IOException, BMPException {
+ 	IndexColorModel palette = readPalette(in);
+ 	skipToImage(in);
+ 	
+ 	Dimension d = infoHeader.getSize();
+ 	int h = (int)d.getHeight();
+ 	int w = (int)d.getWidth();
+ 	int size = (w*h) >> 1;
+ 
+ 	// Scanline padded to dword offsets
+ 	int wbytes = (w + (w & 1)) >> 1;
+ 	int scansize = ((wbytes & 3) != 0)? (wbytes + 4 - (wbytes&3)) : wbytes;
+ 
+ 	byte[] data = new byte[wbytes*h];
+ 
+ 	for(int y=h-1;y>=0;y--){
+ 	    byte[] scanline = new byte[scansize];
+ 	    if(in.read(scanline) != scansize)
+ 		throw new IOException("Couldn't read image data.");
+ 
+ 	    for(int x=0;x<wbytes;x++)
+ 		data[x + y*wbytes] = scanline[x];
+ 	}
+ 	SampleModel sm = new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, 
+ 							 w, h, 4);
+ 
+ 	DataBuffer db = new DataBufferByte(data, w*h, 0);
+ 	WritableRaster raster = Raster.createWritableRaster(sm, db, null);
+     
+ 	return new BufferedImage(palette, raster, false, null);
+     }
+ 
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB8.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB8.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB8.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB8.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,90 ----
+ /* DecodeRGB8.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.IndexColorModel;
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.DataBufferByte;
+ import java.awt.image.SinglePixelPackedSampleModel;
+ import java.awt.image.SampleModel;
+ import java.awt.Dimension;
+ 
+ public class DecodeRGB8 extends BMPDecoder {
+ 
+     public DecodeRGB8(BMPFileHeader fh, BMPInfoHeader ih){
+ 	super(fh, ih);
+     }
+ 
+     public BufferedImage decode(ImageInputStream in) throws IOException, BMPException {
+ 	IndexColorModel palette = readPalette(in);
+ 	skipToImage(in);
+ 
+ 	Dimension d = infoHeader.getSize();
+ 	int h = (int)d.getHeight();
+ 	int w = (int)d.getWidth();
+ 
+ 	// BMP scanlines are padded to dword offsets
+ 	int scansize = ((w & 3) != 0)? w + 4 - (w & 3): w;
+ 	byte[] data = new byte[w*h];
+ 
+ 	for(int y=h-1;y>=0;y--){
+ 	    byte[] scanline = new byte[scansize];
+ 	    if(in.read(scanline) != scansize)
+ 		throw new IOException("Couldn't read image data.");
+ 
+ 	    for(int x=0;x<w;x++)
+ 		data[x + y*w] = scanline[x];
+ 	}
+ 
+ 	SampleModel sm = new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE, 
+ 							  w, h, 
+ 							  new int[] {0xFF});
+ 	DataBuffer db = new DataBufferByte(data, w*h, 0);
+ 	WritableRaster raster = Raster.createWritableRaster(sm, db, null);
+     
+ 	return new BufferedImage(palette, raster, false, null);
+     }
+ 
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE4.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE4.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE4.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE4.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,176 ----
+ /* DecodeRLE4.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.IndexColorModel;
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.DataBufferByte;
+ import java.awt.image.MultiPixelPackedSampleModel;
+ import java.awt.image.SampleModel;
+ import java.awt.Dimension;
+ 
+ public class DecodeRLE4 extends BMPDecoder {
+ 
+     public DecodeRLE4(BMPFileHeader fh, BMPInfoHeader ih){
+ 	super(fh, ih);
+     }
+ 
+     /**
+      * RLE control codes
+      */
+     private static final byte ESCAPE = (byte)0;
+     private static final byte EOL = (byte)0; // end of line
+     private static final byte EOB = (byte)1; // end of bitmap
+     private static final byte DELTA = (byte)2; // delta
+     
+     public BufferedImage decode(ImageInputStream in) throws IOException, BMPException {
+ 	IndexColorModel palette = readPalette(in);
+ 	skipToImage(in);
+ 
+ 	Dimension d = infoHeader.getSize();
+ 	int h = (int)d.getHeight();
+ 	int w = (int)d.getWidth();
+ 
+ 	byte[] data = uncompress(w, h, in);
+ 	SampleModel sm = new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, 
+ 							 w, h, 4);
+ 
+ 	DataBuffer db = new DataBufferByte(data, w*h, 0);
+ 	WritableRaster raster = Raster.createWritableRaster(sm, db, null);
+     
+ 	return new BufferedImage(palette, raster, false, null);
+     }
+     
+     private byte[] uncompress(int w, int h, ImageInputStream in) 
+ 	throws BMPException, IOException {
+ 	byte[] cmd = new byte[2];
+ 	byte[] data = new byte[w*h>>1];
+ 	int offIn = 0;
+ 	int x=0,y=0;
+ 	
+ 	// width in bytes
+ 	w += (w&1);
+ 	w = w >> 1;
+ 
+ 	try {
+ 	    while(((x>>1) + y*w) < w*h){
+ 		if(in.read(cmd) != 2)
+ 		    throw new IOException("Error reading compressed data.");
+ 
+ 		if(cmd[0] == ESCAPE){
+ 		    switch(cmd[1]){
+ 		    case EOB: // end of bitmap
+ 			return data;
+ 		    case EOL: // end of line
+ 			x = 0;
+ 			y++;
+ 			break;
+ 		    case DELTA: // delta
+ 			if(in.read(cmd) != 2)
+ 			    throw new IOException("Error reading compressed data.");
+ 			int dx = cmd[0] & (0xFF);
+ 			int dy = cmd[1] & (0xFF);
+ 			x += dx;
+ 			y += dy;
+ 			break;
+ 			
+ 		    default:
+ 			// decode a literal run
+ 			int length = cmd[1] & (0xFF);
+ 
+ 			// size of run, which is word aligned.
+ 			int bytesize = length;
+ 			bytesize += (bytesize & 1);
+ 			bytesize >>= 1;
+ 			bytesize += (bytesize & 1);
+ 
+ 			byte[] run = new byte[bytesize];
+ 			if(in.read(run) != bytesize)
+ 			    throw new IOException("Error reading compressed data.");
+ 
+ 			if((x&1) == 0){
+ 			    length += (length&1);
+ 			    length >>= 1;
+ 			    System.arraycopy(run, 0, data, ((x>>1) + w*(h-y-1)), 
+ 					     length);
+ 			} else {
+ 			    for(int i=0;i<length;i++){
+ 				if((i&1) == 0) // copy high to low
+ 				    data[((x+i)>>1) + w*(h-y-1)] 
+ 					|= ((run[i>>1]&0xF0) >> 4);
+ 				else  // copy low to high
+ 				    data[((x+i)>>1) + w*(h-y-1)] 
+ 					|= ((run[i>>1]&0x0F) << 4);
+ 			    }
+ 			}
+ 			x += cmd[1] & (0xFF);
+ 			break;
+ 		    }
+ 		} else {
+ 		    // decode a byte run
+ 		    int length = cmd[0] & (0xFF);
+ 		    if((x&1) == 0){
+ 			length += (length&1);
+ 			length >>= 1;
+ 			for(int i=0;i<length;i++)
+ 			    data[(h-y-1)*w + i + (x >> 1)] = cmd[1];
+ 		    } else {
+ 			for(int i=0;i<length;i++){
+ 			    if((i&1) == 0) // copy high to low
+ 				data[((x+i)>>1) + w*(h-y-1)] 
+ 				    |= ((cmd[1]&0xF0) >> 4);
+ 			    else  // copy low to high
+ 				data[((x+i)>>1) + w*(h-y-1)] 
+ 				    |= ((cmd[1]&0x0F) << 4);
+ 			}
+ 		    }
+ 		    x += cmd[0] & (0xFF);
+ 		}
+ 	    }
+ 	    return data;
+  	} catch(ArrayIndexOutOfBoundsException e){
+  	    throw new BMPException("Invalid RLE data.");
+  	}
+     }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE8.java gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE8.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE8.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE8.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,143 ----
+ /* DecodeRLE8.java --
+    Copyright (C)  2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.javax.imageio.bmp;
+ 
+ import java.io.IOException;
+ import javax.imageio.stream.ImageInputStream;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.IndexColorModel;
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ import java.awt.image.DataBuffer;
+ import java.awt.image.DataBufferByte;
+ import java.awt.image.SinglePixelPackedSampleModel;
+ import java.awt.image.SampleModel;
+ import java.awt.Dimension;
+ 
+ public class DecodeRLE8 extends BMPDecoder {
+ 
+     public DecodeRLE8(BMPFileHeader fh, BMPInfoHeader ih){
+ 	super(fh, ih);
+     }
+ 
+     /**
+      * RLE control codes
+      */
+     private static final byte ESCAPE = (byte)0;
+     private static final byte EOL = (byte)0; // end of line
+     private static final byte EOB = (byte)1; // end of bitmap
+     private static final byte DELTA = (byte)2; // delta
+     
+     public BufferedImage decode(ImageInputStream in) throws IOException, BMPException {
+ 	IndexColorModel palette = readPalette(in);
+ 	skipToImage(in);
+ 
+ 	Dimension d = infoHeader.getSize();
+ 	int h = (int)d.getHeight();
+ 	int w = (int)d.getWidth();
+ 
+ 	byte[] data = uncompress(w, h, in);
+ 	SampleModel sm = new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE, 
+ 							  w, h, 
+ 							  new int[] {0xFF});
+ 	DataBuffer db = new DataBufferByte(data, w*h, 0);
+ 	WritableRaster raster = Raster.createWritableRaster(sm, db, null);
+     
+ 	return new BufferedImage(palette, raster, false, null);
+     }
+     
+     private byte[] uncompress(int w, int h, ImageInputStream in) 
+ 	throws BMPException, IOException {
+ 	byte[] cmd = new byte[2];
+ 	byte[] data = new byte[w*h];
+ 	int offIn = 0;
+ 	int x=0,y=0;
+ 
+ 	try {
+ 	    while((x + y*w) < w*h){
+ 		if(in.read(cmd) != 2)
+ 		    throw new IOException("Error reading compressed data.");
+ 
+ 		if(cmd[0] == ESCAPE){
+ 		    switch(cmd[1]){
+ 		    case EOB: // end of bitmap
+ 			return data;
+ 		    case EOL: // end of line
+ 			x = 0;
+ 			y++;
+ 			break;
+ 		    case DELTA: // delta
+ 			if(in.read(cmd) != 2)
+ 			    throw new IOException("Error reading compressed data.");
+ 			int dx = cmd[0] & (0xFF);
+ 			int dy = cmd[1] & (0xFF);
+ 			x += dx;
+ 			y += dy;
+ 			break;
+ 			
+ 		    default:
+ 			// decode a literal run
+ 			int length = cmd[1] & (0xFF);
+ 			int copylength = length;
+ 
+ 			// absolute mode must be word-aligned
+ 			length += (length & 1);
+ 
+ 			byte[] run = new byte[length];
+ 			if(in.read(run) != length)
+ 			    throw new IOException("Error reading compressed data.");
+ 
+ 			System.arraycopy(run, 0, data, (x+w*(h-y-1)), 
+ 					 copylength);
+ 			x += copylength;
+ 			break;
+ 		    }
+ 		} else {
+ 		    // decode a byte run
+ 		    int length = cmd[0] & (0xFF);
+ 		    for(int i=0;i<length;i++)
+ 			data[(h-y-1)*w + x++] = cmd[1];
+ 		}
+ 	    }
+ 	    return data;
+  	} catch(ArrayIndexOutOfBoundsException e){
+  	    throw new BMPException("Invalid RLE data.");
+  	}
+     }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/CorbaInput.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/CorbaInput.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/CorbaInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/CorbaInput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,297 ----
+ /* CorbaInput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import gnu.CORBA.CDR.gnuRuntime;
+ 
+ import org.omg.CORBA_2_3.portable.InputStream;
+ 
+ import java.io.DataInputStream;
+ import java.io.IOException;
+ import java.io.ObjectInput;
+ import java.io.ObjectInputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * Converts calls on java ObjectOutputStream to calls on CORBA OutputStream. A
+  * class to substitute for objects using readObject method.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class CorbaInput
+   extends ObjectInputStream
+   implements ObjectInput
+ {
+ 
+   /**
+    * The underlying CORBA stream from where the actual input is taken.
+    */
+   public InputStream stream;
+ 
+   /**
+    * The utility class to write the object fields in default way.
+    */
+   final RmiUtilities util;
+ 
+   /**
+    * The object currently being read.
+    */
+   Object current;
+ 
+   /**
+    * The offset of the object currently being read.
+    */
+   int offset;
+ 
+   /**
+    * The repository id of the object currently being read.
+    */
+   String rid;
+ 
+   /**
+    * The runtime, related to the object currently being read.
+    */
+   gnuRuntime runtime;
+ 
+   /**
+    * Create an instance, delegating calls to the given CORBA stream.
+    */
+   public CorbaInput(InputStream an_input, Object firstObject,
+                           RmiUtilities an_util, int an_offset, String a_rid,
+                           gnuRuntime a_runtime)
+     throws Exception
+   {
+     stream = an_input;
+     current = firstObject;
+     util = an_util;
+ 
+     offset = an_offset;
+     rid = a_rid;
+     runtime = a_runtime;
+   }
+ 
+   /** @inheritDoc */
+   public int available()
+     throws IOException
+   {
+     return stream.available();
+   }
+ 
+   /**
+    * No action.
+    */
+   public void close()
+     throws IOException
+   {
+   }
+ 
+   /** @inheritDoc */
+   public void defaultReadObject()
+     throws IOException, ClassNotFoundException
+   {
+     util.readFields(offset, rid, (Serializable) current, stream, runtime);
+   }
+ 
+   /** @inheritDoc */
+   public void mark(int readlimit)
+   {
+     stream.mark(readlimit);
+   }
+ 
+   /** @inheritDoc */
+   public boolean markSupported()
+   {
+     return stream.markSupported();
+   }
+ 
+   /** @inheritDoc */
+   public int read()
+     throws IOException
+   {
+     return stream.read();
+   }
+ 
+   /** @inheritDoc */
+   public int read(byte[] buf, int off, int len)
+     throws IOException
+   {
+     return stream.read(buf, off, len);
+   }
+ 
+   /** @inheritDoc */
+   public int read(byte[] b)
+     throws IOException
+   {
+     return stream.read(b);
+   }
+ 
+   /** @inheritDoc */
+   public boolean readBoolean()
+     throws IOException
+   {
+     return stream.read_boolean();
+   }
+ 
+   /** @inheritDoc */
+   public byte readByte()
+     throws IOException
+   {
+     return (byte) stream.read();
+   }
+ 
+   /** @inheritDoc */
+   public char readChar()
+     throws IOException
+   {
+     return stream.read_char();
+   }
+ 
+   /** @inheritDoc */
+   public double readDouble()
+     throws IOException
+   {
+     return stream.read_double();
+   }
+ 
+   /** @inheritDoc */
+   public float readFloat()
+     throws IOException
+   {
+     return stream.read_float();
+   }
+ 
+   /** @inheritDoc */
+   public void readFully(byte[] buf, int off, int len)
+     throws IOException
+   {
+     // This class only reads from the buffered streams.
+     stream.read(buf, off, len);
+   }
+ 
+   /** @inheritDoc */
+   public void readFully(byte[] buf)
+     throws IOException
+   {
+     // This class only reads from the buffered streams.
+     stream.read(buf);
+   }
+ 
+   /** @inheritDoc */
+   public int readInt()
+     throws IOException
+   {
+     return stream.read_long();
+   }
+ 
+   /** @inheritDoc */
+   public String readLine()
+     throws IOException
+   {
+     return new DataInputStream(this).readLine();
+   }
+ 
+   /** @inheritDoc */
+   public long readLong()
+     throws IOException
+   {
+     return stream.read_longlong();
+   }
+ 
+   /** @inheritDoc */
+   public short read_short()
+     throws IOException
+   {
+     return stream.read_short();
+   }
+ 
+   /** @inheritDoc */
+   public int readUnsignedByte()
+     throws IOException
+   {
+     return (stream.read() & 0xFF);
+   }
+ 
+   /** @inheritDoc */
+   public int readUnsignedShort()
+     throws IOException
+   {
+     return (stream.read_short() & 0xFFFF);
+   }
+ 
+   /**
+    * Read as wide string (not as UTF).
+    */
+   public String readUTF()
+     throws IOException
+   {
+     return stream.read_wstring();
+   }
+ 
+   /** @inheritDoc */
+   public void reset()
+     throws IOException
+   {
+     stream.reset();
+   }
+ 
+   /** @inheritDoc */
+   public long skip(long n)
+     throws IOException
+   {
+     return stream.skip(n);
+   }
+ 
+   /** @inheritDoc */
+   public int skipBytes(int len)
+     throws IOException
+   {
+     return (int) stream.skip(len);
+   }
+ 
+   /**
+    * Objects are read as abstract interfaces.
+    */
+   protected Object readObjectOverride()
+     throws IOException, ClassNotFoundException
+   {
+     current = stream.read_abstract_interface();
+     return current;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/CorbaOutput.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/CorbaOutput.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/CorbaOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/CorbaOutput.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,219 ----
+ /* CorbaOutput.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import org.omg.CORBA_2_3.portable.OutputStream;
+ 
+ import java.io.IOException;
+ import java.io.ObjectOutput;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * A class to substitute as an ObjectOutputStream for objects using writeObject
+  * method.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class CorbaOutput
+   extends ObjectOutputStream
+   implements ObjectOutput
+ {
+   /**
+    * A CORBA stream where the output is forwarded.
+    */
+   final OutputStream stream;
+ 
+   /**
+    * The utility class to write the object fields in default way.
+    */
+   final RmiUtilities util;
+ 
+   /**
+    * The object currently being written.
+    */
+   Object current;
+ 
+   /**
+    * Create an instance, delegating calls to the given CORBA stream.
+    */
+   public CorbaOutput(OutputStream an_output, Object firstObject,
+                            RmiUtilities an_util)
+     throws Exception
+   {
+     stream = an_output;
+     current = firstObject;
+     util = an_util;
+   }
+ 
+   /**
+    * No action.
+    */
+   public void close()
+     throws IOException
+   {
+   }
+ 
+   /** @inheritDoc */
+   public void flush()
+     throws IOException
+   {
+     stream.flush();
+   }
+ 
+   /** @inheritDoc */
+   public void write(byte[] buf, int off, int len)
+     throws IOException
+   {
+     stream.write(buf, off, len);
+   }
+ 
+   /** @inheritDoc */
+   public void write(byte[] buf)
+     throws IOException
+   {
+     stream.write(buf);
+   }
+ 
+   /** @inheritDoc */
+   public void write(int val)
+     throws IOException
+   {
+     stream.write(val);
+   }
+ 
+   /** @inheritDoc */
+   public void writeBoolean(boolean val)
+     throws IOException
+   {
+     stream.write_boolean(val);
+   }
+ 
+   /** @inheritDoc */
+   public void writeByte(int val)
+     throws IOException
+   {
+     stream.write(val);
+   }
+ 
+   /** @inheritDoc */
+   public void writeBytes(String str)
+     throws IOException
+   {
+     stream.write_string(str);
+   }
+ 
+   /** @inheritDoc */
+   public void writeChar(int val)
+     throws IOException
+   {
+     stream.write_wchar((char) val);
+   }
+ 
+   /** @inheritDoc */
+   public void writeChars(String str)
+     throws IOException
+   {
+     stream.write_char_array(str.toCharArray(), 0, str.length());
+   }
+ 
+   /** @inheritDoc */
+   public void writeDouble(double val)
+     throws IOException
+   {
+     stream.write_double(val);
+   }
+ 
+   /** @inheritDoc */
+   public void writeFloat(float val)
+     throws IOException
+   {
+     stream.write_float(val);
+   }
+ 
+   /** @inheritDoc */
+   public void writeInt(int val)
+     throws IOException
+   {
+     stream.write_long(val);
+   }
+ 
+   /** @inheritDoc */
+   public void writeLong(long val)
+     throws IOException
+   {
+     stream.write_longlong(val);
+   }
+ 
+   /**
+    * Objects are written as abstract interfaces.
+    */
+   protected void writeObjectOverride(Object obj)
+     throws IOException
+   {
+     current = obj;
+     stream.write_abstract_interface(obj);
+   }
+ 
+   /** @inheritDoc */
+   public void writeShort(int val)
+     throws IOException
+   {
+     stream.write_short((short) val);
+   }
+ 
+   /**
+    * Such strings are written as wide strings, not as UTF.
+    */
+   public void writeUTF(String str)
+     throws IOException
+   {
+     stream.write_wstring(str);
+   }
+ 
+   /**
+    * @inheritDoc
+    */
+   public void defaultWriteObject()
+     throws IOException
+   {
+     util.writeFields(stream, (Serializable) current);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/DefaultWriteObjectTester.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/DefaultWriteObjectTester.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/DefaultWriteObjectTester.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/DefaultWriteObjectTester.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,85 ----
+ /* DefaultWriteObjectTester.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * Tests if the defaultWriteObject method has been called. 
+  * This information is required by RMI-IIOP header.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class DefaultWriteObjectTester
+   extends CorbaOutput
+ {
+   /**
+    * The flag, indicating, that the defaultWriteObject method was called.
+    */
+   public boolean dwo_called;
+   
+   /**
+    * Create an instance, delegating calls to the given CORBA stream.
+    */
+   public DefaultWriteObjectTester(Object firstObject)
+     throws Exception
+   {
+     super(new BufferedCdrOutput(), firstObject, null);
+   }
+ 
+   /**
+    * Set the flag that defaultWriteObject was called.
+    */
+   public void defaultWriteObject()
+     throws IOException
+   {
+     dwo_called = true;
+   }
+ 
+   /**
+    * Do not write other objects.
+    */
+   protected void writeObjectOverride(Object obj)
+     throws IOException
+   {
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/DelegateFactory.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/DelegateFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/DelegateFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/DelegateFactory.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,107 ----
+ /* DelegateFactory.java -- 
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import gnu.CORBA.ObjectCreator;
+ 
+ 
+ /**
+  * This class produces delegates, using the system properties. If not
+  * corresponding property is specified, returns default implementations.
+  * 
+  * @author Wu Gansha (gansha.wu@intel.com)
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class DelegateFactory
+ {
+   /**
+    * The name to get a stub delegate.
+    */
+   public static final String STUB = "Stub";
+ 
+   /**
+    * The name to get the util delegate.
+    */
+   public static final String UTIL = "Util";
+ 
+   /**
+    * The name to get the ValueHandler delegate.
+    */
+   public static final String VALUEHANDLER = "ValueHandler";
+ 
+   /**
+    * The name to get the PortableRemoteObject delegate.
+    */
+   public static final String PORTABLE_REMOTE_OBJECT = "PortableRemoteObject";
+ 
+   /**
+    * Get an instance of the given delegate. As in all cases the singleton
+    * instance is used, the caching here would be redundant.
+    * 
+    * @param type a delegate type.
+    * 
+    * @return the associated delegate.
+    * 
+    * @throws InternalError if the delegate class, indicated in the system
+    * properties, cannot be instantiated.
+    */
+   public static Object getInstance(String type)
+     throws InternalError
+   {
+     String propertyName = "javax.rmi.CORBA." + type + "Class";
+     String dcname = System.getProperty(propertyName);
+     if (dcname == null)
+       {
+         // // No javax.rmi.CORBA.XXXClass property sepcified.
+         dcname = "gnu.javax.rmi.CORBA." + type + "DelegateImpl";
+       }
+     try
+       {
+         Class dclass = ObjectCreator.forName(dcname);
+         return dclass.newInstance();
+       }
+     catch (Exception e)
+       {
+         InternalError ierr = new InternalError("Exception when trying to get "
+           + type + "delegate instance:" + dcname);
+         ierr.initCause(e);
+         throw ierr;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,55 ----
+ /* GetDelegateInstanceException.java -- 
+    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ public class GetDelegateInstanceException
+   extends Exception
+ {
+   private Throwable next;
+   
+   public GetDelegateInstanceException(String msg)
+   {
+     super(msg);
+   }
+   
+   public GetDelegateInstanceException(String msg, Throwable next)
+   {
+     super(msg, next);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,362 ----
+ /* PortableRemoteObjectDelegateImpl.java -- 
+    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import gnu.CORBA.SimpleDelegate;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.Poa.LocalDelegate;
+ import gnu.CORBA.Poa.ORB_1_4;
+ import gnu.CORBA.Poa.AOM;
+ 
+ import java.rmi.NoSuchObjectException;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.server.RMIClassLoader;
+ 
+ import javax.rmi.CORBA.PortableRemoteObjectDelegate;
+ import javax.rmi.CORBA.Stub;
+ import javax.rmi.CORBA.Tie;
+ import javax.rmi.CORBA.Util;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.portable.Delegate;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.PortableServer.POA;
+ import org.omg.PortableServer.POAHelper;
+ import org.omg.PortableServer.Servant;
+ import org.omg.PortableServer.POAManagerPackage.State;
+ 
+ /**
+  * Implements PortableRemoteObjectDelegate.
+  * 
+  * @author Wu Gansha (gansha.wu@intel.com) (stub)
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) (implementation)
+  */
+ public class PortableRemoteObjectDelegateImpl
+   implements PortableRemoteObjectDelegate
+ {
+   /**
+    * <p>
+    * Makes the remote object <code>a_target</code> ready for remote
+    * communication using the same communications runtime as for the passed
+    * <code>a_source</code> parameter. The a_target is connected to the same
+    * ORB (and, if applicable, to the same POA) as the a_source.
+    * 
+    * @param a_target the target to connect to ORB, must be an instance of either
+    * {@link ObjectImpl} (Stubs and old-style ties) or {@link Servant} (POA-bases
+    * ties).
+    * 
+    * @param a_source the object, providing the connection information, must be
+    * an instance of either {@link ObjectImpl} (Stubs and old-style ties) or
+    * {@link Servant} (POA-bases ties).
+    * 
+    * @throws RemoteException if the target is already connected to another ORB.
+    */
+   public void connect(Remote a_target, Remote a_source)
+     throws RemoteException
+   {
+     ORB orb = null;
+     POA poa = null;
+     boolean ok = false;
+ 
+     try
+       {
+         if (a_source instanceof Servant)
+           {
+             Servant s = (Servant) a_source;
+             orb = s._orb();
+             poa = s._poa();
+             ok = true;
+           }
+ 
+         if (!ok && a_source instanceof ObjectImpl)
+           {
+             ObjectImpl o = (ObjectImpl) a_source;
+             orb = o._orb();
+             ok = true;
+             try
+               {
+                 if (orb instanceof ORB_1_4)
+                   {
+                     // POA information available.
+                     ORB_1_4 xorb = (ORB_1_4) orb;
+                     Delegate d = o._get_delegate();
+ 
+                     if (d instanceof LocalDelegate)
+                       {
+                         LocalDelegate l = (LocalDelegate) d;
+                         poa = l.poa;
+                       }
+                     else if (d instanceof SimpleDelegate)
+                       {
+                         byte[] ior_key = ((SimpleDelegate) d).getIor().key;
+                         AOM.Obj ref = xorb.rootPOA.findIorKey(ior_key);
+                         if (ref != null)
+                           poa = ref.poa;
+                       }
+                   }
+               }
+             catch (Exception ex)
+               {
+                 // OK, POA info is not available, but as ORB is available, we
+                 // will connect in a default way.
+               }
+           }
+       }
+     catch (Exception ex)
+       {
+         RuntimeException rex = new RuntimeException("Unable to get info from "
+           + a_source);
+         rex.initCause(ex);
+         throw rex;
+       }
+ 
+     if (!ok && a_source instanceof Tie)
+       {
+         Tie t = (Tie) a_source;
+         orb = t.orb();
+         poa = null;
+         ok = true;
+       }
+ 
+     if (orb == null)
+       throw new RemoteException("Unable to determine ORB from " + a_source);
+ 
+     if (a_target instanceof Stub)
+       {
+         StubDelegateImpl.connect((Stub) a_target, orb, poa);
+       }
+     else if (a_target instanceof Servant)
+       {
+         try
+           {
+             if (poa == null)
+               {
+                 poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
+                 // Activate if not active.
+                 if (poa.the_POAManager().get_state().value() == State._HOLDING)
+                   poa.the_POAManager().activate();
+               }
+             poa.servant_to_reference((Servant) a_target);
+           }
+         catch (Exception ex)
+           {
+             throw new Unexpected(ex);
+           }
+       }
+     else if (a_target instanceof org.omg.CORBA.Object)
+       {
+         // Connect as object.
+         orb.connect((org.omg.CORBA.Object) a_target);
+       }
+     else if (a_target instanceof Tie)
+       {
+         // We avoid calling this because it will aways connect to the root poa.
+         ((Tie) a_target).orb(orb);
+       }
+   }
+ 
+   /**
+    * Narrow the given object to the instance of the given class. The currently
+    * supported narrowing types are:
+    * 
+    * 1. Simple widening conversion.<br>
+    * 2. ObjectImpl -> RMI interface.<br>
+    * 3. ObjectImpl -> ObjectImpl.<br>
+    * 4. Tie -> Remote (implementation)<br>
+    * 5. Remote (implementation) -> Tie.<br>
+    * 
+    * The narrowing has sense only for derived classes.
+    */
+   public Object narrow(Object narrowFrom, Class narrowTo)
+     throws ClassCastException
+   {
+     if (narrowTo == null)
+       throw new ClassCastException("Can't narrow to null class");
+     else if (narrowFrom == null)
+       return null;
+     else
+     // Simple narrowing case.
+     if (narrowTo.isAssignableFrom(narrowFrom.getClass()))
+       return narrowFrom;
+     else if (narrowTo.isInterface() || narrowFrom instanceof ObjectImpl)
+       {
+         // Narrow CORBA object to passed interface.
+ 
+         String interf = narrowTo.getName();
+         String stubClassName;
+ 
+         stubClassName = getStubClassName(interf);
+ 
+         try
+           {
+             // Replace the interface class by the stub class.
+             narrowTo = Util.loadClass(stubClassName, null,
+               narrowTo.getClassLoader());
+           }
+         catch (ClassNotFoundException e)
+           {
+             ClassCastException cex = new ClassCastException("Class not found: "
+               + stubClassName);
+             cex.initCause(e);
+             throw cex;
+           }
+       }
+     else if (narrowFrom instanceof Tie)
+       {
+         // Try to substitute the return tie target as a return value.
+         Remote target = ((Tie) narrowFrom).getTarget();
+         if (target != null && narrowTo.isAssignableFrom(target.getClass()))
+           return target;
+       }
+ 
+     Object narrowed;
+     try
+       {
+         narrowed = narrowTo.newInstance();
+       }
+     catch (Exception e)
+       {
+         ClassCastException cex = new ClassCastException("Cannot instantiate "
+           + narrowTo.getName());
+         cex.initCause(e);
+         throw cex;
+       }
+ 
+     if (narrowed instanceof ObjectImpl)
+       {
+         // This also works for the instances of the Stub.
+         ObjectImpl target = (ObjectImpl) narrowed;
+         // Set the delegate, as is done in *Helper.narrow(..).
+         target._set_delegate(((ObjectImpl) narrowFrom)._get_delegate());
+       }
+     else if (narrowed instanceof Tie && narrowFrom instanceof Remote)
+       {
+         // Try to set the narrowing object as a target for the Tie.
+         ((Tie) narrowed).setTarget((Remote) narrowFrom);
+       }
+     else
+       throw new ClassCastException("Narrowing of " + narrowFrom.getClass()
+         + " to " + narrowTo + " is either not possible or not implemented.");
+ 
+     return narrowed;
+   }
+   
+   /**
+    * Get the Stub class name for the name, representing the given interface.
+    */
+   static String getStubClassName(String interf)
+   {
+     String stubClassName;
+     int p = interf.lastIndexOf('.');
+ 
+     if (p < 0)
+       // The interface is defined in the default package.
+       stubClassName = "_" + interf + "_Stub";
+     else
+       stubClassName = interf.substring(0, p + 1) + "_"
+         + interf.substring(p + 1) + "_Stub";
+     return stubClassName;
+   }
+   
+   /**
+    * Get stub for the given implementation, searching by class name pattern. The
+    * found stub must implement Remote for this method to succeed.
+    */
+   public Remote toStub(Remote ObjImpl)
+     throws NoSuchObjectException
+   {
+     String icn = ObjImpl.getClass().getName();
+     if (!icn.endsWith("Impl"))
+       throw new BAD_PARAM("Invalid class name '" + icn
+         + "', must end with 'Impl'");
+ 
+     String sn = "_" + icn.substring(0, icn.length() - "Impl".length())
+       + "_Stub";
+ 
+     Class stubClass;
+     Object o_stub;
+ 
+     try
+       {
+         stubClass = RMIClassLoader.loadClass(sn);
+         o_stub = stubClass.newInstance();
+       }
+     catch (Exception e)
+       {
+         NoSuchObjectException n = new NoSuchObjectException(sn);
+         n.initCause(e);
+         throw n;
+       }
+ 
+     if (!Remote.class.isAssignableFrom(stubClass))
+       throw new ClassCastException(stubClass.getName()
+         + " exists but cannot be returned as it does not inherit from "
+         + Remote.class.getName());
+ 
+     return (Remote) o_stub;
+   }
+ 
+   /**
+    * If the object tie is no longer in use, disconnet it from the orb.
+    */
+   public void unexportObject(Remote obj)
+     throws NoSuchObjectException
+   {
+     Util.unexportObject(obj);
+   }
+ 
+   /**
+    * Find or create a tie for this target and mark it as being used by the given
+    * object.
+    */
+   public void exportObject(Remote obj)
+     throws RemoteException
+   {
+     if (obj instanceof Stub)
+       Util.registerTarget(StubDelegateImpl.getTieFromStub((Stub) obj), obj);
+     else if (obj instanceof Tie)
+       {
+         Tie t = (Tie) obj;
+         Util.registerTarget(t, null);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/RmiUtilities.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/RmiUtilities.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/RmiUtilities.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/RmiUtilities.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,946 ----
+ /* RmiUtilities.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+    
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import gnu.CORBA.OrbFunctional;
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.CDR.Vio;
+ import gnu.CORBA.CDR.gnuRuntime;
+ import gnu.CORBA.CDR.gnuValueStream;
+ import gnu.CORBA.CDR.HeadlessInput;
+ 
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.StringValueHelper;
+ import org.omg.CORBA.WStringValueHelper;
+ import org.omg.CORBA.portable.Delegate;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.ValueBase;
+ import org.omg.PortableServer.POA;
+ import org.omg.PortableServer.POAHelper;
+ import org.omg.PortableServer.Servant;
+ import org.omg.PortableServer.POAManagerPackage.State;
+ import org.omg.SendingContext.RunTime;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.DataOutputStream;
+ import java.io.Externalizable;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Modifier;
+ import java.rmi.Remote;
+ import java.security.MessageDigest;
+ import java.util.Arrays;
+ import java.util.Comparator;
+ import java.util.Iterator;
+ import java.util.TreeSet;
+ import java.util.WeakHashMap;
+ 
+ import javax.rmi.PortableRemoteObject;
+ import javax.rmi.CORBA.Stub;
+ import javax.rmi.CORBA.Tie;
+ import javax.rmi.CORBA.Util;
+ 
+ /**
+  * Defines methods that must be accessible in several derived classes.
+  * 
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class RmiUtilities
+ {
+   /**
+    * The currently used RMI-IIOP version format.
+    */
+   public static byte VERSION = 1;
+ 
+   /**
+    * The non - writable class fields.
+    */
+   static final int NON_WRITABLE = Modifier.STATIC | Modifier.TRANSIENT;
+ 
+   /**
+    * The standard String repository Id.
+    */
+   public static final String RMI_STRING_ID = StringValueHelper.id();
+ 
+   /**
+    * The standard Class repository Id.
+    */
+   public static final String RMI_CLASS_ID = "RMI:javax.rmi.CORBA.ClassDesc:2BABDA04587ADCCC:CFBF02CF5294176B";
+ 
+   /**
+    * The standard string array repository Id.
+    */
+   public static final String RMI_STRING_ARRAY_ID = "RMI:[Ljava.lang.String;:071DA8BE7F971128:A0F0A4387A3BB342";
+ 
+   /**
+    * An instance of the wide string value helper for writing strings.
+    */
+   static WStringValueHelper wStringValueHelper = new WStringValueHelper();
+ 
+   /**
+    * Set of serializable classes that have .writeObject and .readObject defined.
+    * Contains weak references to ensure that the classes will be unloadable.
+    */
+   WeakHashMap io_format = new WeakHashMap();
+ 
+   /**
+    * The standard IO format with no .writeObject and .readObject defined.
+    */
+   static final Object STANDARD = new Object();
+ 
+   /**
+    * The custom IO format with .writeObject and .readObject defined,
+    * defaultWriteObject called.
+    */
+   static final Object CUSTOM_DWO = new Object();
+ 
+   /**
+    * The custom IO format with .writeObject and .readObject defined,
+    * defaultWriteObject has not been called.
+    */
+   static final Object CUSTOM_NO_DWO = new Object();
+ 
+   /**
+    * The arguments for readObject.
+    */
+   static final Class[] READ_OBJECT_ARGS = new Class[] { ObjectInputStream.class };
+ 
+   /**
+    * The arguments for writeObject.
+    */
+   static final Class[] WRITE_OBJECT_ARGS = new Class[] { ObjectOutputStream.class };
+ 
+   /**
+    * The undocumented field that is heading the Sun's object data, written with
+    * writeObject.
+    */
+   static final int S_X = 16908034;
+ 
+   /**
+    * Write all fields of the passed value.
+    */
+   void writeFields(OutputStream an_output, Serializable object)
+   {
+     org.omg.CORBA_2_3.portable.OutputStream output = (org.omg.CORBA_2_3.portable.OutputStream) an_output;
+     try
+       {
+         Class o_class = object.getClass();
+         Field[] fields = getWritableFields(o_class);
+         Field f;
+ 
+         Class fc;
+ 
+         for (int i = 0; i < fields.length; i++)
+           {
+             f = fields[i];
+             fc = f.getType();
+             Object v = f.get(object);
+ 
+             if (fc == String.class)
+               {
+                 output.write_value((Serializable) v, wStringValueHelper);
+               }
+             else if (fc == int.class)
+               output.write_long(((Integer) v).intValue());
+             else if (fc == long.class)
+               output.write_longlong(((Number) v).longValue());
+             else if (fc == double.class)
+               output.write_double(((Number) v).doubleValue());
+             else if (fc == float.class)
+               output.write_float(((Number) v).floatValue());
+             else if (fc == boolean.class)
+               output.write_boolean(((Boolean) v).booleanValue());
+             else if (fc == short.class)
+               output.write_short(((Number) v).shortValue());
+             else if (fc == byte.class)
+               output.write_octet(((Number) v).byteValue());
+             else if (fc == char.class)
+               output.write_wchar(((Character) v).charValue());
+             else
+               {
+                 if (!fc.isInterface() && Remote.class.isAssignableFrom(fc))
+                   fc = getExportedInterface(fc);
+                 writeMember(output, v, fc);
+               }
+           }
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL("Cannot write " + object);
+         m.minor = Minor.ValueFields;
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ 
+   /**
+    * Write a memeber (field) of the data structure.
+    */
+   void writeMember(org.omg.CORBA_2_3.portable.OutputStream output,
+     Object object, Class xClass)
+   {
+     if (output instanceof gnuValueStream)
+       {
+         gnuRuntime g = ((gnuValueStream) output).getRunTime();
+         // Reset the target as we are already beyond the critical point
+         // where is must have the value being written.
+         if (g != null)
+           g.target = null;
+       }
+     if (Serializable.class.isAssignableFrom(xClass)
+       || Remote.class.isAssignableFrom(xClass))
+       {
+         // Object handles null reference on its own.
+         if (org.omg.CORBA.Object.class.isAssignableFrom(xClass)
+           || Remote.class.isAssignableFrom(xClass))
+           {
+             if (object == null)
+               output.write_Object(null);
+             else if (isTieRequired(object))
+               exportTie(output, object, xClass);
+             else
+               writeValue(output, (Serializable) object);
+           }
+         else
+           output.write_value((Serializable) object, xClass);
+       }
+     else
+       {
+         MARSHAL m = new MARSHAL(xClass + " is not Serializable");
+         m.minor = Minor.NonSerializable;
+         throw m;
+       }
+   }
+ 
+   /**
+    * Check if the object must be wrapped into Tie, connected to the ORB and then
+    * the corresponding Stub be written.
+    */
+   public boolean isTieRequired(Object object)
+   {
+     return object instanceof Remote && !(object instanceof Stub);
+   }
+ 
+   /**
+    * Get the interface under that the class of this object must be exposed. The
+    * interface must be derived from Remote.
+    */
+   Class getExportedInterface(Object object)
+     throws MARSHAL
+   {
+     Class fc = null;
+     Class[] interfaces = object.getClass().getInterfaces();
+     for (int i = 0; i < interfaces.length; i++)
+       {
+         if (!Remote.class.equals(interfaces[i]))
+           if (Remote.class.isAssignableFrom(interfaces[i]))
+             {
+               if (fc == null)
+                 fc = interfaces[i];
+               else
+                 {
+                   MARSHAL m = new MARSHAL("Both " + fc + " and " + interfaces[i]
+                   + " extends Remote");
+                   m.minor = Minor.TargetConversion;
+                   throw m;
+                 }
+             }
+       }
+     if (fc == null)
+       {
+         MARSHAL m = new MARSHAL(object.getClass()
+         + " does not implement any interface, derived from Remote");
+         m.minor = Minor.TargetConversion;
+         throw m;
+       }
+     return fc;
+   }
+ 
+   /**
+    * Get the persistent hash code for the given class, as defined by OMG
+    * standard. The inheritance, field names and types (but not the visibility)
+    * are taken into consideration as well as the presence of the writeObject
+    * method are taken into consideration. The class name and methods, if any,
+    * are not taken into consideration.
+    */
+   public static long getHashCode(Class c)
+   {
+     Class of = c.isArray() ? c.getComponentType() : null;
+     if (c.isArray()
+       && ((!Serializable.class.isAssignableFrom(of) || of.isPrimitive() || Remote.class.isAssignableFrom(of))))
+       return 0;
+     if (!Serializable.class.isAssignableFrom(c))
+       return 0;
+     try
+       {
+         ByteArrayOutputStream bout = new ByteArrayOutputStream();
+         DataOutputStream out = new DataOutputStream(bout);
+ 
+         Class superClass = c.getSuperclass();
+         if (superClass != null)
+           out.writeLong(getHashCode(superClass));
+ 
+         int writeObjectPresentCode;
+         try
+           {
+             c.getDeclaredMethod("writeObject",
+               new Class[] { ObjectOutputStream.class });
+             writeObjectPresentCode = 2; // Exists.
+           }
+         catch (NoSuchMethodException e)
+           {
+             writeObjectPresentCode = 1; // Missing.
+           }
+         out.writeInt(writeObjectPresentCode);
+ 
+         Field[] fields = c.getDeclaredFields();
+ 
+         Arrays.sort(fields, new Comparator()
+         {
+           public int compare(Object a, Object b)
+           {
+             Field fa = (Field) a;
+             Field fb = (Field) b;
+             return fa.getName().compareTo(fb.getName());
+           }
+         });
+ 
+         Field f;
+         for (int i = 0; i < fields.length; i++)
+           {
+             f = fields[i];
+             if ((f.getModifiers() & NON_WRITABLE) == 0)
+               {
+                 out.writeUTF(f.getName());
+                 out.writeUTF(getDescriptor(f.getType()));
+               }
+           }
+ 
+         out.flush();
+         out.close();
+         MessageDigest shaDigest;
+         try
+           {
+             shaDigest = MessageDigest.getInstance("SHA");
+           }
+         catch (Exception ex)
+           {
+             throw new InternalError("SHA digesting algorithm is not available");
+           }
+ 
+         // Return the digest value to the calling
+         // method as an array of bytes.
+         byte[] sha = shaDigest.digest(bout.toByteArray());
+ 
+         long hash = 0;
+         for (int i = 0; i < Math.min(8, sha.length); i++)
+           {
+             hash += (long) (sha[i] & 255) << (i * 8);
+           }
+         return hash;
+       }
+     catch (IOException ioex)
+       {
+         throw new Unexpected(ioex);
+       }
+   }
+ 
+   /**
+    * Converts to hexadecimal string, supplementing leading zeros.
+    */
+   public static String toHex(long l)
+   {
+     StringBuffer b = new StringBuffer();
+     b.append(Long.toHexString(l).toUpperCase());
+     while (b.length() < 16)
+       b.insert(0, '0');
+     return b.toString();
+   }
+ 
+   /**
+    * Returns a <code>String</code> representing the type-encoding of a class.
+    */
+   static String getDescriptor(Class type)
+   {
+     if (type.equals(boolean.class))
+       return "Z";
+     if (type.equals(byte.class))
+       return "B";
+     if (type.equals(short.class))
+       return "S";
+     if (type.equals(char.class))
+       return "C";
+     if (type.equals(int.class))
+       return "I";
+     if (type.equals(long.class))
+       return "J";
+     if (type.equals(float.class))
+       return "F";
+     if (type.equals(double.class))
+       return "D";
+     if (type.equals(void.class))
+       return "V";
+     else if (type.isArray())
+       {
+         StringBuffer l = new StringBuffer("[");
+         Class component = type.getComponentType();
+ 
+         while (component.isArray())
+           {
+             l.append('[');
+             component = component.getComponentType();
+           }
+ 
+         l.append('L');
+         l.append(component.getName().replace('.', '/'));
+         l.append(';');
+         return l.toString();
+       }
+     else
+       return "L" + type.getName().replace('.', '/') + ';';
+   }
+ 
+   public static Field[] getWritableFields(Class c)
+   {
+     TreeSet set = new TreeSet(new Comparator()
+     {
+       public int compare(Object a, Object b)
+       {
+         return ((Field) a).getName().compareTo(((Field) b).getName());
+       }
+     });
+ 
+     while (!c.equals(Object.class))
+       {
+         Field[] f = c.getDeclaredFields();
+         for (int i = 0; i < f.length; i++)
+           {
+             if ((f[i].getModifiers() & NON_WRITABLE) == 0)
+               {
+                 f[i].setAccessible(true);
+                 set.add(f[i]);
+               }
+           }
+         c = c.getSuperclass();
+       }
+ 
+     Field[] r = new Field[set.size()];
+     int p = 0;
+     Iterator it = set.iterator();
+     while (it.hasNext())
+       {
+         r[p++] = (Field) it.next();
+       }
+     return r;
+   }
+ 
+   /**
+    * The method is called for Remotes that are not Stubs. It is assumed, that
+    * the Remote is an implementation. The method searches for the suitable tie
+    * and, if found, exports it by creating and connecting the stub. Such export
+    * is supported since jdk 1.5.
+    */
+   void exportTie(org.omg.CORBA_2_3.portable.OutputStream output,
+     Object implementation, Class interfaceClass)
+   {
+     try
+       {
+         // Remote, but non - stub class (implementation)
+         // must be replaced by stub.
+         Tie t = Util.getTie((Remote) implementation);
+         if (t instanceof Servant)
+           {
+             POA rootPoa = POAHelper.narrow(output.orb().resolve_initial_references(
+               "RootPOA"));
+             org.omg.CORBA.Object co = rootPoa.servant_to_reference((Servant) t);
+             Stub stub = (Stub) PortableRemoteObject.narrow(co, interfaceClass);
+             writeRemoteObject(output, stub);
+ 
+             if (rootPoa.the_POAManager().get_state().value() == State._HOLDING)
+               rootPoa.the_POAManager().activate();
+           }
+         else if (t instanceof org.omg.CORBA.Object)
+           {
+             org.omg.CORBA.Object co = (org.omg.CORBA.Object) t;
+             output.orb().connect(co);
+ 
+             Stub stub = (Stub) PortableRemoteObject.narrow(co, interfaceClass);
+             writeRemoteObject(output, stub);
+           }
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL("Unable to export " + implementation);
+         m.minor = Minor.TargetConversion;
+         m.initCause(ex);
+         throw m;
+       }
+   }
+ 
+   /**
+    * Start the ORB, if it is not already runnning.
+    */
+   void ensureOrbRunning(org.omg.CORBA_2_3.portable.OutputStream output)
+   {
+     // Ensure ORB is running.
+     if (output.orb() instanceof OrbFunctional)
+       {
+         ((OrbFunctional) output.orb()).ensureRunning();
+       }
+   }
+ 
+   /**
+    * Write data to the CORBA output stream. Writes the object contents only; the
+    * header must be already written. For object, containing objects, may be
+    * called recursively.
+    * 
+    * @param an_output a stream to write to, must be
+    * org.omg.CORBA_2_3.portable.OutputStream
+    * @param object an object to write.
+    */
+   public void writeRemoteObject(OutputStream an_output, Object object)
+   {
+     org.omg.CORBA_2_3.portable.OutputStream output = (org.omg.CORBA_2_3.portable.OutputStream) an_output;
+ 
+     if (isTieRequired(object))
+       {
+         // Find the interface that is implemented by the object and extends
+         // Remote.
+         Class fc = getExportedInterface(object);
+         exportTie(output, object, fc);
+       }
+     else if (object instanceof org.omg.CORBA.Object)
+       {
+         ensureOrbRunning(output);
+         an_output.write_Object((org.omg.CORBA.Object) object);
+       }
+     else if (object != null && object instanceof Serializable)
+       writeFields(an_output, (Serializable) object);
+   }
+ 
+   /**
+    * Write data to the CORBA output stream. Writes the object contents only; the
+    * header must be already written. For object, containing objects, may be
+    * called recursively.
+    * 
+    * @param an_output a stream to write to, must be
+    * org.omg.CORBA_2_3.portable.OutputStream
+    * @param object an object to write.
+    */
+   public void writeValue(OutputStream an_output, Serializable object)
+   {
+     org.omg.CORBA_2_3.portable.OutputStream output = (org.omg.CORBA_2_3.portable.OutputStream) an_output;
+ 
+     if (isTieRequired(object))
+       {
+         // Find the interface that is implemented by the object and extends
+         // Remote.
+         Class fc = getExportedInterface(object);
+         exportTie(output, object, fc);
+       }
+     else if (object instanceof org.omg.CORBA.Object)
+       {
+         ensureOrbRunning(output);
+         an_output.write_Object((org.omg.CORBA.Object) object);
+       }
+     else if (object instanceof Externalizable)
+       {
+         try
+           {
+             ObjectOutputStream stream = new CorbaOutput(output, object,
+               this);
+             stream.write(VERSION);
+             ((Externalizable) object).writeExternal(stream);
+           }
+         catch (Exception ex)
+           {
+             MARSHAL m = new MARSHAL("writeExternal failed");
+             m.minor = Minor.Value;
+             m.initCause(ex);
+             throw m;
+           }
+       }
+     else if (object instanceof Serializable)
+       {
+         Object mode = null;
+         synchronized (io_format)
+           {
+             mode = io_format.get(object.getClass());
+             if (mode == STANDARD)
+               {
+                 writeFields(an_output, (Serializable) object);
+                 return;
+               }
+           }
+         try
+           {
+             Method m = object.getClass().getDeclaredMethod("writeObject",
+               WRITE_OBJECT_ARGS);
+             m.setAccessible(true); // May be private.
+ 
+             try
+               {
+                 ObjectOutputStream stream = new CorbaOutput(output,
+                   object, this);
+ 
+                 // Write version.
+                 stream.write(VERSION);
+ 
+                 if (mode == CUSTOM_DWO)
+                   // Write true, supposing that the defaultWriteObject
+                   // has been called.
+                   stream.write(1);
+                 else if (mode == CUSTOM_NO_DWO)
+                   // Write false (has not been called)
+                   stream.write(0);
+                 else
+                   {
+                     // Measure.
+                     DefaultWriteObjectTester tester = new DefaultWriteObjectTester(object);
+                     m.invoke(object, new Object[] { tester });
+ 
+                     synchronized (io_format)
+                       {
+                         io_format.put(object.getClass(),
+                           tester.dwo_called ? CUSTOM_DWO : CUSTOM_NO_DWO);
+                         stream.write(tester.dwo_called ? 1 : 0);
+                       }
+                   }
+ 
+                 m.invoke(object, new Object[] { stream });
+                 stream.flush();
+               }
+             catch (Exception ex)
+               {
+                 MARSHAL mx = new MARSHAL(object.getClass().getName()
+                   + ".writeObject failed");
+                 mx.initCause(ex);
+                 throw mx;
+               }
+           }
+         catch (NoSuchMethodException e)
+           {
+             // Write in a standard way.
+             writeFields(an_output, (Serializable) object);
+             synchronized (io_format)
+               {
+                 io_format.put(object.getClass(), STANDARD);
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Read data from the CDR input stream. Reads the object contents only; the
+    * header must be already read (the repository id or ids ara passed). For
+    * object, containing objects, may be called recursively.
+    * 
+    * @param an_input the stream to read from, must be
+    * org.omg.CORBA_2_3.portable.InputStream
+    * @param object the instance of the object being read.
+    * @param id the repository Id from the stream in the case when single id was
+    * specified.
+    * @param ids the repository Ids from the stream in the case when multiple ids
+    * were specified.
+    * @param codebase the codebase, if it was included in the header of the value
+    * type. Null if not codebase was included.
+    * 
+    * @return the object, extracted from the stream.
+    */
+   /**
+    * Read value from the input stream in the case when the value is not
+    * Streamable or CustomMarshalled.
+    */
+   public Serializable readValue(InputStream in, int offset, Class clz,
+     String repositoryID, RunTime sender)
+   {
+     if (in instanceof HeadlessInput)
+       ((HeadlessInput) in).subsequentCalls = true;
+ 
+     gnuRuntime g;
+     Serializable object = null;
+ 
+     try
+       {
+         g = (gnuRuntime) sender;
+         object = g.target;
+       }
+     catch (ClassCastException e)
+       {
+         // Working with the other CORBA implementation.
+         g = null;
+       }
+ 
+     org.omg.CORBA_2_3.portable.InputStream input = (org.omg.CORBA_2_3.portable.InputStream) in;
+ 
+     if (Remote.class.isAssignableFrom(clz)
+       || ValueBase.class.isAssignableFrom(clz))
+       {
+         // Interface is narrowed into Stub.
+         if (clz.isInterface())
+           try
+             {
+               clz = Util.loadClass(
+                 PortableRemoteObjectDelegateImpl.getStubClassName(clz.getName()),
+                 null, clz.getClassLoader());
+             }
+           catch (ClassNotFoundException e)
+             {
+               MARSHAL m = new MARSHAL("Cannot get stub from interface "
+                 + clz.getClass().getName());
+               m.minor = Minor.TargetConversion;
+               m.initCause(e);
+               throw m;
+             }
+ 
+         // Remote needs special handling.
+         if (ObjectImpl.class.isAssignableFrom(clz))
+           {
+             // First read CORBA object reference.
+             Object ro = input.read_Object();
+ 
+             ObjectImpl obj = (ObjectImpl) ro;
+             if (obj == null)
+               return null;
+ 
+             Delegate delegate = obj._get_delegate();
+             object = instantiate(offset, clz, g);
+             ((ObjectImpl) object)._set_delegate(delegate);
+           }
+         // The object - specific data follows.
+       }
+     else if (org.omg.CORBA.Object.class.isAssignableFrom(clz))
+       object = (Serializable) input.read_Object();
+ 
+     if (object == null)
+       object = instantiate(offset, clz, g);
+     
+     // The sentence below prevents attempt to read the internal fields of the
+     // ObjectImpl (or RMI Stub) that might follow the object definition.
+     // Sun's jre 1.5 does not write this information. The stubs, generated
+     // by rmic, does not contain such fields.
+     if (object instanceof ObjectImpl)
+       return object;
+ 
+     if (object instanceof Externalizable)
+       {
+         try
+           {
+             CorbaInput stream = new CorbaInput(input, object, this,
+               offset, repositoryID, g);
+ 
+             byte version = stream.readByte();
+             if (version != 1)
+               throw new MARSHAL("Unsuported RMI-IIOP version " + version);
+ 
+             ((Externalizable) object).readExternal(stream);
+           }
+         catch (Exception ex)
+           {
+             MARSHAL m = new MARSHAL("readExternal failed");
+             m.initCause(ex);
+             throw m;
+           }
+       }
+     else
+       {
+         Object mode = null;
+         synchronized (io_format)
+           {
+             mode = io_format.get(object.getClass());
+           }
+ 
+         if (mode == STANDARD)
+           {
+             readFields(offset, repositoryID, object, input, g);
+           }
+         else
+           {
+             try
+               {
+                 Method m = object.getClass().getDeclaredMethod("readObject",
+                   READ_OBJECT_ARGS);
+                 try
+                   {
+                     m.setAccessible(true); // May be private.
+ 
+                     CorbaInput stream = new CorbaInput(input,
+                       object, this, offset, repositoryID, g);
+ 
+                     byte version = stream.readByte();
+                     if (version != 1)
+                       throw new MARSHAL("Unsuported RMI-IIOP version "
+                         + version);
+ 
+                     // This would indicate is defaultWriteObject has been
+                     // called,
+                     // but the readObject method normally takes care about this.
+                     boolean dwo = stream.readByte() != 0;
+ 
+                     m.invoke(object, new Object[] { stream });
+                     synchronized (io_format)
+                       {
+                         io_format.put(object.getClass(), dwo ? CUSTOM_DWO
+                           : CUSTOM_NO_DWO);
+                       }
+                   }
+                 catch (Exception ex)
+                   {
+                     ex.printStackTrace();
+                     MARSHAL mx = new MARSHAL(object.getClass().getName()
+                       + ".readObject failed");
+                     mx.initCause(ex);
+                     throw mx;
+                   }
+               }
+             catch (NoSuchMethodException e)
+               {
+                 // Read in a standard way.
+                 synchronized (io_format)
+                   {
+                     io_format.put(object.getClass(), STANDARD);
+                     readFields(offset, repositoryID, object, input, g);
+                   }
+               }
+           }
+       }
+     return object;
+   }
+ 
+   /**
+    * Create an instance.
+    */
+   Serializable instantiate(int offset, Class clz, gnuRuntime g)
+     throws MARSHAL
+   {
+     Serializable object;
+     try
+       {
+         object = (Serializable) Vio.instantiateAnyWay(clz);
+         g.objectWritten(object, offset);
+       }
+     catch (Exception e)
+       {
+         MARSHAL m = new MARSHAL("Unable to instantiate " + clz);
+         m.minor = Minor.Instantiation;
+         m.initCause(e);
+         throw m;
+       }
+     return object;
+   }
+ 
+   /**
+    * Read fields of the object.
+    */
+   void readFields(int offset, String repositoryID, Serializable object,
+     org.omg.CORBA_2_3.portable.InputStream input, gnuRuntime r)
+     throws MARSHAL
+   {
+     Field f = null;
+     Class o_class = object.getClass();
+ 
+     try
+       {
+         // The returned field array must already be in canonical order.
+         Field[] fields = getWritableFields(o_class);
+ 
+         Class fc;
+ 
+         for (int i = 0; i < fields.length; i++)
+           {
+             // Full value type header expected ahead.
+             if (input instanceof HeadlessInput)
+               ((HeadlessInput) input).subsequentCalls = true;
+ 
+             f = fields[i];
+             fc = f.getType();
+ 
+             Object v;
+ 
+             if (fc == String.class)
+               {
+                 v = input.read_value(wStringValueHelper);
+               }
+             else if (fc == int.class)
+               v = new Integer(input.read_long());
+             else if (fc == long.class)
+               v = new Long(input.read_longlong());
+             else if (fc == double.class)
+               v = new Double(input.read_double());
+             else if (fc == float.class)
+               v = new Float(input.read_float());
+             else if (fc == boolean.class)
+               v = input.read_boolean() ? Boolean.TRUE : Boolean.FALSE;
+             else if (fc == short.class)
+               v = new Short(input.read_short());
+             else if (fc == byte.class)
+               v = new Byte(input.read_octet());
+             else if (fc == char.class)
+               v = new Character(input.read_char());
+             else if (org.omg.CORBA.Object.class.isAssignableFrom(fc)
+               || Remote.class.isAssignableFrom(fc))
+               {
+                 v = readValue(input, offset, fc, null, r);
+               }
+             else
+               {
+                 v = Vio.read(input, fc);
+               }
+ 
+             f.set(object, v);
+           }
+       }
+     catch (Exception ex)
+       {
+         MARSHAL m = new MARSHAL("Cannot read " + o_class.getName() + " field "
+           + f);
+         m.initCause(ex);
+         m.minor = Minor.ValueFields;
+         throw m;
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/StubDelegateImpl.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/StubDelegateImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/StubDelegateImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/StubDelegateImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,310 ----
+ /* StubDelegateImpl.java --
+    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import gnu.CORBA.ObjectCreator;
+ import gnu.CORBA.Unexpected;
+ import gnu.CORBA.CDR.BufferredCdrInput;
+ import gnu.CORBA.CDR.BufferedCdrOutput;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ import javax.rmi.PortableRemoteObject;
+ import javax.rmi.CORBA.Stub;
+ import javax.rmi.CORBA.StubDelegate;
+ import javax.rmi.CORBA.Tie;
+ import javax.rmi.CORBA.Util;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.portable.Delegate;
+ import org.omg.CORBA.portable.ObjectImpl;
+ import org.omg.PortableServer.POA;
+ import org.omg.PortableServer.POAHelper;
+ import org.omg.PortableServer.Servant;
+ import org.omg.PortableServer.POAManagerPackage.State;
+ 
+ /**
+  * The default stub delegate.
+  * 
+  * @author Wu Gansha (gansha.wu@intel.com) (stub)
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) (implementation)
+  */
+ public class StubDelegateImpl
+   implements StubDelegate
+ {
+   /**
+    * <p>
+    * Finds the suitable {@link Tie} for this Stub and connects it to the given
+    * ORB. The tie is found by the name pattern. If the found tie is derived from
+    * {@link org.omg.CORBA.PortableServer.Servant}, it is connected to the root
+    * POA, also activating it (if not already active).
+    * </p>
+    * <p>
+    * This method does not allow to specify, to which POA the found Tie must be
+    * connected and requires to use the deprecated method {@link ORB#connect}.
+    * Many useful POA features remain unaccessible. A better alternative it might
+    * be to generate a {@link org.omg.CORBA.PortableServer.Servant} - derived Tie
+    * (-poa key in rmic) and connect it to POA in one of the many ways, listed in
+    * the description of the {@link orb.omg.PortableServer} package). The
+    * obtained CORBA object can be narrowed into stub using
+    * {@link PortableRemoteObject#narrow}.
+    * </p>
+    * 
+    * @param orb the ORB where the Stub must be connected.
+    * 
+    * @throws RemoteException if the stub is already connected to some other ORB.
+    * If the stub is already connected to the ORB that was passed as parameter,
+    * the method returns without action.
+    * 
+    * @throws BAD_PARAM if the name of this stub does not match the stub name
+    * pattern, "_*_Stub" or if the Tie class, "_*Impl_Tie", does not exists or an
+    * instance of this class cannot be instantiated.
+    */
+   public void connect(Stub self, ORB orb)
+     throws RemoteException
+   {
+     connect(self, orb, null);
+   }
+ 
+   /**
+    * Connect when the POA is specified.
+    */
+   public static void connect(Stub self, ORB orb, POA poa)
+     throws RemoteException
+   {
+     ORB oorb = null;
+     try
+       {
+         Delegate d = self._get_delegate();
+         if (d != null)
+           oorb = d.orb(self);
+       }
+     catch (Exception e)
+       {
+         // Failed to get Delegate or ORB.
+         // (possible ony for user-written Stubs).
+       }
+ 
+     if (oorb != null)
+       {
+         if (!oorb.equals(orb))
+           throw new RemoteException("Stub " + self
+             + " is connected to another ORB, " + orb);
+         else
+           return;
+       }
+ 
+     Tie t = null;
+     if (self instanceof Remote)
+       t = Util.getTie((Remote) self);
+ 
+     // Find by name pattern.
+     if (t == null)
+       t = getTieFromStub(self);
+ 
+     Delegate delegate;
+ 
+     if (t instanceof Servant)
+       {
+         try
+           {
+             if (poa == null)
+               {
+                 poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
+                 // Activate if not active.
+                 if (poa.the_POAManager().get_state().value() == State._HOLDING)
+                   poa.the_POAManager().activate();
+               }
+ 
+             ObjectImpl obj = (ObjectImpl) poa.servant_to_reference((Servant) t);
+             delegate = obj._get_delegate();
+           }
+         catch (Exception ex)
+           {
+             throw new Unexpected(ex);
+           }
+       }
+     else if (t instanceof ObjectImpl)
+       {
+         ObjectImpl o = (ObjectImpl) t;
+         orb.connect(o);
+         delegate = o._get_delegate();
+       }
+     else
+       throw new BAD_PARAM("The Tie must be either Servant or ObjectImpl");
+ 
+     self._set_delegate(delegate);
+   }
+ 
+   /**
+    * Locate a tie class, appropriate to the given stub class, by the name
+    * pattern.
+    */
+   public static Tie getTieFromStub(java.lang.Object self)
+   {
+     Tie t;
+     String sn = self.getClass().getName();
+     if (!sn.endsWith("_Stub"))
+       throw new BAD_PARAM("The stub name, " + sn
+         + ", does not match _*_Stub pattern");
+ 
+     String tn = sn.substring(0, sn.length() - "_Stub".length()) + "Impl_Tie";
+     Class tieClass = null;
+ 
+     try
+       {
+         tieClass = ObjectCreator.forName(tn);
+         t = (Tie) tieClass.newInstance();
+         if (self instanceof Remote)
+           Util.registerTarget(t, (Remote) self);
+       }
+     catch (Exception e)
+       {
+         BAD_PARAM bad = new BAD_PARAM("Unable to instantiate '" + tn + "'");
+         bad.initCause(e);
+         throw bad;
+       }
+     return t;
+   }
+ 
+   /**
+    * Compare two stubs for equality.
+    */
+   public boolean equals(Stub self, java.lang.Object obj)
+   {
+     if (obj instanceof ObjectImpl)
+       {
+         ObjectImpl other = (ObjectImpl) obj;
+         Delegate d1 = other._get_delegate();
+         Delegate d2 = self._get_delegate();
+         if (d1 == null || d2 == null)
+           return d1 == d2;
+         else
+           return d1.equals(d2);
+       }
+     else return false;
+   }
+ 
+   /**
+    * Get the hash code (from IOR reference).
+    */
+   public int hashCode(Stub self)
+   {
+     Delegate d = self._get_delegate();
+     return d==null?0:d.hashCode();
+   }
+ 
+   /**
+    * Returns the IOR reference of the connected ORB.
+    * 
+    * @see ORB#object_to_string(org.omg.CORBA.Object);
+    */
+   public String toString(Stub self)
+   {
+     try
+       {
+         return self._orb().object_to_string(self);
+       }
+     catch (Exception ex)
+       {
+         return null;
+       }
+   }
+ 
+   /**
+    * This should never be called. The ORB must be supplied.
+    * 
+    * @see #connect
+    */
+   public void readObject(Stub self, ObjectInputStream input)
+     throws IOException, ClassNotFoundException
+   {
+     readObject(self, input, null);
+   }
+ 
+   /**
+    * Read as CORBA object when the ORB is known. The ORB must be set under the
+    * previous call of Stub.connect. The Stub is automatically registered with
+    * this ORB.
+    */
+   public void readObject(Stub self, ObjectInputStream input, ORB orb)
+     throws IOException, ClassNotFoundException
+   {
+     byte[] b = (byte[]) input.readObject();
+     BufferredCdrInput in = new BufferredCdrInput(b);
+ 
+     if (orb != null)
+       in.setOrb(orb);
+ 
+     ObjectImpl r = (ObjectImpl) in.read_Object();
+ 
+     self._set_delegate(r._get_delegate());
+   }
+ 
+   /**
+    * Write as CORBA object. The ORB is taken from the
+    * org.omg.CORBA.portable.Delegate. The Stub is automatically registered with
+    * this ORB (if not already done).
+    */
+   public void writeObject(Stub self, ObjectOutputStream output)
+     throws IOException
+   {
+     writeObject(self, output, null);
+   }
+ 
+   /**
+    * Write as CORBA object. The ORB must be either set under the previous call
+    * of Stub.connect or it is taken from the org.omg.CORBA.portable.Delegate.
+    * The Stub is automatically registered with this ORB (if not already done).
+    */
+   public void writeObject(Stub self, ObjectOutputStream output, ORB orb)
+     throws IOException
+   {
+     BufferedCdrOutput out = new BufferedCdrOutput();
+     out.setOrb(orb == null ? self._orb() : orb);
+     out.write_Object(self);
+ 
+     output.writeObject(out.buffer.toByteArray());
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/TieTargetRecord.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/TieTargetRecord.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/TieTargetRecord.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/TieTargetRecord.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,93 ----
+ /* TieTargetRecord.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import java.util.HashSet;
+ 
+ import javax.rmi.CORBA.Tie;
+ 
+ /**
+  * Represents a Tie, connected to possibly multiple invocation targets.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class TieTargetRecord
+ {
+   /**
+    * The associated Tie.
+    */
+   public final Tie tie;
+ 
+   /**
+    * The objects, exposing the tie.
+    */
+   public HashSet targets = new HashSet();
+ 
+   /**
+    * Create a new record.
+    */
+   public TieTargetRecord(Tie a_tie)
+   {
+     tie = a_tie;
+   }
+ 
+   /**
+    * Add a target.
+    */
+   public void add(Object target)
+   {
+     targets.add(target);
+   }
+ 
+   /**
+    * Remove target.
+    */
+   public void remove(Object target)
+   {
+     targets.remove(target);
+   }
+ 
+   /**
+    * Return true if the tie has no associated invocation targets.
+    */
+   public boolean unused()
+   {
+     return targets.size() == 0;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/UtilDelegateImpl.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/UtilDelegateImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/UtilDelegateImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/UtilDelegateImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,754 ----
+ /* UtilDelegateImpl.java --
+    Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import gnu.CORBA.Minor;
+ import gnu.CORBA.ObjectCreator;
+ import gnu.CORBA.Poa.ORB_1_4;
+ import gnu.CORBA.Poa.AOM;
+ import gnu.CORBA.Poa.gnuPOA;
+ import gnu.CORBA.typecodes.GeneralTypeCode;
+ 
+ import org.omg.CORBA.Any;
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.COMM_FAILURE;
+ import org.omg.CORBA.CompletionStatus;
+ import org.omg.CORBA.INVALID_TRANSACTION;
+ import org.omg.CORBA.INV_OBJREF;
+ import org.omg.CORBA.MARSHAL;
+ import org.omg.CORBA.NO_PERMISSION;
+ import org.omg.CORBA.OBJECT_NOT_EXIST;
+ import org.omg.CORBA.OMGVMCID;
+ import org.omg.CORBA.ORB;
+ import org.omg.CORBA.SystemException;
+ import org.omg.CORBA.TCKind;
+ import org.omg.CORBA.TRANSACTION_REQUIRED;
+ import org.omg.CORBA.TRANSACTION_ROLLEDBACK;
+ import org.omg.CORBA.TypeCode;
+ import org.omg.CORBA.UNKNOWN;
+ import org.omg.CORBA.portable.InputStream;
+ import org.omg.CORBA.portable.OutputStream;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.rmi.AccessException;
+ import java.rmi.MarshalException;
+ import java.rmi.NoSuchObjectException;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.ServerError;
+ import java.rmi.ServerException;
+ import java.rmi.UnexpectedException;
+ import java.rmi.server.RMIClassLoader;
+ import java.util.Hashtable;
+ 
+ import javax.rmi.CORBA.Stub;
+ import javax.rmi.CORBA.Tie;
+ import javax.rmi.CORBA.Util;
+ import javax.rmi.CORBA.UtilDelegate;
+ import javax.rmi.CORBA.ValueHandler;
+ import javax.transaction.InvalidTransactionException;
+ import javax.transaction.TransactionRequiredException;
+ import javax.transaction.TransactionRolledbackException;
+ 
+ /**
+  * The implementation of UtilDelegate.
+  * 
+  * @author Wu Gansha (gansha.wu@intel.com) (stub)
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) (implementation)
+  */
+ public class UtilDelegateImpl
+   extends RmiUtilities
+   implements UtilDelegate
+ {
+   /**
+    * The instance of the value handler, requested once.
+    */
+   static ValueHandler m_ValueHandler;
+ 
+   /**
+    * The global map of all ties to they records.
+    */
+   static Hashtable m_Ties = new Hashtable();
+ 
+   /**
+    * The global map of all targets to they records.
+    */
+   static Hashtable m_Targets = new Hashtable();
+ 
+   /**
+    * The standard package for that the exception names are omitted.
+    */
+   static final String m_StandardPackage = "org.omg.CORBA.";
+ 
+   /**
+    * Make a deep copy of the object.
+    */
+   public Object copyObject(Object obj, ORB orb)
+     throws RemoteException
+   {
+     // Strings are immutable, can be shared.
+     if (obj instanceof String)
+       return obj;
+     else if (obj == null)
+       return null;
+     else if (obj instanceof String[] || obj instanceof String[][]
+       || obj instanceof String[][][])
+       {
+         // String arrays can be just cloned.
+         return ((Object[]) obj).clone();
+       }
+     else if (obj instanceof Serializable)
+       {
+         try
+           {
+             ByteArrayOutputStream a = new ByteArrayOutputStream();
+             ObjectOutputStream ou = new ObjectOutputStream(a);
+             ou.writeObject(obj);
+             ou.close();
+             ObjectInputStream input = new ObjectInputStream(
+               new ByteArrayInputStream(a.toByteArray()));
+             return input.readObject();
+           }
+         catch (Exception ex)
+           {
+             RemoteException rex = new RemoteException("Cannot copy " + obj);
+             throw rex;
+           }
+       }
+     else
+       return obj;
+   }
+ 
+   /**
+    * Make a deep copy of the object array.
+    */
+   public Object[] copyObjects(Object[] obj, ORB orb)
+     throws RemoteException
+   {
+     return (Object[]) copyObject(obj, orb);
+   }
+ 
+   public ValueHandler createValueHandler()
+   {
+     if (m_ValueHandler == null)
+       m_ValueHandler = (ValueHandler) DelegateFactory.getInstance(DelegateFactory.VALUEHANDLER);
+     return m_ValueHandler;
+   }
+ 
+   /**
+    * Returns the codebase of the given class.
+    */
+   public String getCodebase(Class clz)
+   {
+     return RMIClassLoader.getClassAnnotation(clz);
+   }
+ 
+   /**
+    * Get the Tie that handles invocations on the given target. If the target/Tie
+    * pair has not been previously registered using {@link #registerTarget},
+    * this method tries to locate a tie class by the name pattern. If this
+    * succeeds, the tie-target pair is also registered.
+    * 
+    * @return the Tie.
+    */
+   public Tie getTie(Remote target)
+   {
+     synchronized (m_Targets)
+       {
+         Tie tie;
+         TieTargetRecord r = ((TieTargetRecord) m_Targets.get(target));
+         if (r == null)
+           {
+             if (target instanceof Stub)
+               {
+                 tie = StubDelegateImpl.getTieFromStub(target);
+                 registerTarget(tie, target);
+               }
+             else
+               {
+                 // Treat this as implementation.
+                 String tieClassName = getTieClassName(target.getClass().getName());
+                 try
+                   {
+                     Class tieClass = Util.loadClass(tieClassName, null,
+                       target.getClass().getClassLoader());
+                     tie = (Tie) tieClass.newInstance();
+                   }
+                 catch (Exception e)
+                   {
+                     MARSHAL m = new MARSHAL("Unable to instantiate "
+                       + tieClassName);
+                     m.minor = Minor.TargetConversion;
+                     m.initCause(e);
+                     throw m;
+                   }
+                 tie.setTarget(target);
+                 registerTarget(tie, target);
+               }
+           }
+         else
+           tie = r.tie;
+         return tie;
+       }
+   }
+ 
+   /**
+    * Get the Stub class name for the name, representing the given interface.
+    */
+   private String getTieClassName(String interf)
+   {
+     String stubClassName;
+     int p = interf.lastIndexOf('.');
+ 
+     if (p < 0)
+       // The interface is defined in the default package.
+       stubClassName = "_" + interf + "_Tie";
+     else
+       stubClassName = interf.substring(0, p + 1) + "_"
+         + interf.substring(p + 1) + "_Tie";
+     return stubClassName;
+   }
+ 
+   /**
+    * Register the Tie-target pair. As the Tie is a Servant, it can potentially
+    * be connected to several objects and hence may be registered with several
+    * targets.
+    */
+   public void registerTarget(Tie tie, Remote target)
+   {
+     synchronized (m_Ties)
+       {
+         synchronized (m_Targets)
+           {
+             TieTargetRecord r = (TieTargetRecord) m_Ties.get(tie);
+             if (r == null)
+               {
+                 // First registration for this Tie.
+                 r = new TieTargetRecord(tie);
+                 m_Ties.put(tie, r);
+               }
+             if (target != null)
+               {
+                 r.add(target);
+                 m_Targets.put(target, r);
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Deactivate the associated Tie, if it is found and is not connected to other
+    * registered targets. Independing from the POA policies, the transparent
+    * reactivation will not be possible.
+    */
+   public void unexportObject(Remote target)
+     throws NoSuchObjectException
+   {
+     synchronized (m_Ties)
+       {
+         synchronized (m_Targets)
+           {
+             TieTargetRecord r = ((TieTargetRecord) m_Targets.get(target));
+             if (r != null)
+               {
+                 if (target instanceof org.omg.CORBA.Object)
+                   r.tie.orb().disconnect((org.omg.CORBA.Object) target);
+ 
+                 if (r.unused())
+                   {
+                     m_Targets.remove(target);
+                     m_Ties.remove(r.tie);
+                     r.tie.deactivate();
+ 
+                     if (r.tie.orb() instanceof ORB_1_4)
+                       {
+                         // Standard case, when more deep cleanup is possible.
+                         // Independing from the POA policies, the object will
+                         // not be activable transparently.
+                         ORB_1_4 orb = (ORB_1_4) r.tie.orb();
+ 
+                         if (target instanceof org.omg.CORBA.Object)
+                           {
+                             AOM.Obj record = orb.rootPOA.findObject((org.omg.CORBA.Object) target);
+ 
+                             if (record != null && record.servant == r.tie
+                               && record.poa instanceof gnuPOA)
+                               {
+                                 ((gnuPOA) record.poa).aom.remove(record.key);
+                                 record.deactivated = true;
+                                 record.servant = null;
+                               }
+                           }
+                       }
+                   }
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Checks if the given stub is local.
+    * 
+    * @param stub a stub to check.
+    * @return true if the stub is local, false otherwise.
+    */
+   public boolean isLocal(Stub stub)
+     throws RemoteException
+   {
+     try
+       {
+         return stub._is_local();
+       }
+     catch (SystemException e)
+       {
+         RemoteException rex = new RemoteException();
+         rex.initCause(e);
+         throw rex;
+       }
+   }
+ 
+   /**
+    * Load the class. The method uses class loaders from the call stact first. If
+    * this fails, the further behaviour depends on the System Property
+    * "java.rmi.server.useCodebaseOnly" with default value "false".
+    * 
+    * <ul>
+    * <li>Try the current thread context class loader first.</li>
+    * <li>If remoteCodebase is non-null and useCodebaseOnly is "false" then call
+    * java.rmi.server.RMIClassLoader.loadClass (remoteCodebase, className)</li>
+    * <li> If remoteCodebase is null or useCodebaseOnly is true then call
+    * java.rmi.server.RMIClassLoader.loadClass(className)</li>
+    * <li>If a class is still not successfully loaded and the loader != null
+    * then try Class.forName(className, false, loader). </li>
+    * </ul>
+    * 
+    * @param className the name of the class.
+    * @param remoteCodebase the codebase.
+    * @param loader the class loader.
+    * @return the loaded class.
+    * 
+    * @throws ClassNotFoundException of the class cannot be loaded.
+    */
+   public Class loadClass(String className, String remoteCodebase,
+     ClassLoader loader)
+     throws ClassNotFoundException
+   {
+     if (loader == null)
+       loader = Thread.currentThread().getContextClassLoader();
+ 
+     String p_useCodebaseOnly = System.getProperty("java.rmi.server.useCodebaseOnly");
+ 
+     boolean useCodebaseOnly = p_useCodebaseOnly != null
+       && p_useCodebaseOnly.trim().equalsIgnoreCase("true");
+ 
+     try
+       {
+         if (remoteCodebase != null && !useCodebaseOnly)
+           return RMIClassLoader.loadClass(remoteCodebase, className);
+       }
+     catch (Exception e)
+       {
+         // This failed but try others.
+       }
+ 
+     try
+       {
+         if (remoteCodebase == null || useCodebaseOnly)
+           return RMIClassLoader.loadClass(remoteCodebase, className);
+       }
+     catch (Exception e)
+       {
+         // This failed but try others.
+       }
+ 
+     if (loader != null)
+       return Class.forName(className, true, loader);
+ 
+     throw new ClassNotFoundException(className + " at " + remoteCodebase);
+   }
+ 
+   /**
+    * Converts CORBA {@link SystemException} into RMI {@link RemoteException}.
+    * The exception is converted as defined in the following table:
+    * <p>
+    * <table border = "1">
+    * <tr>
+    * <th>CORBA Exception</th>
+    * <th>RMI Exception</th>
+    * </tr>
+    * <tr>
+    * <td>{@link COMM_FAILURE}</td>
+    * <td>{@link MarshalException}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link INV_OBJREF}</td>
+    * <td>{@link  NoSuchObjectException}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link NO_PERMISSION}</td>
+    * <td>{@link  AccessException}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link MARSHAL}</td>
+    * <td>{@link  MarshalException}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link BAD_PARAM} (all other cases)</td>
+    * <td>{@link  MarshalException}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link OBJECT_NOT_EXIST}</td>
+    * <td>{@link  NoSuchObjectException}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link TRANSACTION_REQUIRED}</td>
+    * <td>{@link  TransactionRequiredException}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link TRANSACTION_ROLLEDBACK}</td>
+    * <td>{@link  TransactionRolledbackException}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link INVALID_TRANSACTION}</td>
+    * <td>{@link  InvalidTransactionException}</td>
+    * </tr>
+    * <tr>
+    * <td bgcolor="lightgray">Any other {@link SystemException}</td>
+    * <td bgcolor="lightgray">{@link RemoteException}</td>
+    * </tr>
+    * </table>
+    * </p>
+    * <p>
+    * The exception detailed message always consists of
+    * <ol>
+    * <li>the string "CORBA "</li>
+    * <li>the CORBA name of the system exception</li>
+    * <li>single space</li>
+    * <li>the hexadecimal value of the system exception's minor code, preceeded
+    * by 0x (higher bits contain {@link OMGVMCID}).</li>
+    * <li>single space</li>
+    * <li>the {@link CompletionStatus} of the exception: "Yes", "No" or "Maybe".</li>
+    * </ol>
+    * <p>
+    * For instance, if the Internet connection was refused:
+    * </p>
+    * <p>
+    * <pre>
+    * <code>CORBA COMM_FAILURE 0x535500C9 No</code>
+    * </p>
+    * <p>
+    * The original CORBA exception is set as the cause of the RemoteException
+    * being created.
+    * </p>
+    */
+   public RemoteException mapSystemException(SystemException ex)
+   {
+     RemoteException rex;
+ 
+     String status;
+ 
+     switch (ex.completed.value())
+       {
+         case CompletionStatus._COMPLETED_MAYBE:
+           status = "Maybe";
+           break;
+ 
+         case CompletionStatus._COMPLETED_NO:
+           status = "No";
+           break;
+ 
+         case CompletionStatus._COMPLETED_YES:
+           status = "Yes";
+           break;
+ 
+         default:
+           status = "Unexpected completion status " + ex.completed.value();
+       }
+ 
+     String name = ex.getClass().getName();
+ 
+     if (name.startsWith(m_StandardPackage))
+       name = name.substring(m_StandardPackage.length());
+ 
+     String message = "CORBA " + name + " 0x" + Integer.toHexString(ex.minor)
+       + " " + status;
+ 
+     if (ex instanceof COMM_FAILURE)
+       rex = new MarshalException(message, ex);
+     else if (ex instanceof INV_OBJREF)
+       {
+         rex = new NoSuchObjectException(message);
+         rex.detail = ex;
+       }
+     else if (ex instanceof NO_PERMISSION)
+       rex = new AccessException(message, ex);
+     else if (ex instanceof MARSHAL)
+       rex = new MarshalException(message, ex);
+     else if (ex instanceof BAD_PARAM)
+       rex = new MarshalException(message, ex);
+     else if (ex instanceof OBJECT_NOT_EXIST)
+       {
+         rex = new NoSuchObjectException(message);
+         rex.detail = ex;
+       }
+     else if (ex instanceof TRANSACTION_REQUIRED)
+       {
+         rex = new TransactionRequiredException(message);
+         rex.detail = ex;
+       }
+     else if (ex instanceof TRANSACTION_ROLLEDBACK)
+       {
+         rex = new TransactionRolledbackException(message);
+         rex.detail = ex;
+       }
+     else if (ex instanceof INVALID_TRANSACTION)
+       {
+         rex = new InvalidTransactionException(message);
+         rex.detail = ex;
+       }
+     else if (ex instanceof UNKNOWN)
+       rex = wrapException(ex.getCause());
+     else
+       rex = new RemoteException(message, ex);
+ 
+     return rex;
+   }
+ 
+   /**
+    * Converts the exception that was thrown by the implementation method on a
+    * server side into RemoteException that can be transferred and re-thrown on a
+    * client side. The method converts exceptions as defined in the following
+    * table: <table border = "1">
+    * <tr>
+    * <th>Exception to map (or subclass)</th>
+    * <th>Maps into</th>
+    * </tr>
+    * <tr>
+    * <td>{@link Error}</td>
+    * <td>{@link ServerError}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link RemoteException}</td>
+    * <td>{@link ServerException}</td>
+    * </tr>
+    * <tr>
+    * <td>{@link SystemException}</td>
+    * <td>wrapException({@link #mapSystemException})</td>
+    * </tr>
+    * <tr>
+    * <td>{@link RuntimeException}</td>
+    * <td><b>rethrows</b></td>
+    * </tr>
+    * <tr>
+    * <td>Any other exception</td>
+    * <td>{@link UnexpectedException}</td>
+    * </tr>
+    * </table>
+    * 
+    * @param ex an exception that was thrown on a server side implementation.
+    * 
+    * @return the corresponding RemoteException unless it is a RuntimeException.
+    * 
+    * @throws RuntimeException the passed exception if it is an instance of
+    * RuntimeException.
+    * 
+    * @specnote It is the same behavior, as in Suns implementations 1.4.0-1.5.0.
+    */
+   public RemoteException wrapException(Throwable ex)
+     throws RuntimeException
+   {
+     if (ex instanceof RuntimeException)
+       throw (RuntimeException) ex;
+     else if (ex instanceof Error)
+       return new ServerError(ex.getMessage(), (Error) ex);
+     else if (ex instanceof RemoteException)
+       return new ServerException(ex.getMessage(), (Exception) ex);
+     else if (ex instanceof SystemException)
+       return wrapException(mapSystemException((SystemException) ex));
+     else
+       return new UnexpectedException("Unexpected", (Exception) ex);
+   }
+ 
+   /**
+    * Write abstract interface to the CORBA output stream. The write format is
+    * matching CORBA abstract interface. Remotes and CORBA objects are written as
+    * objects, other classes are supposed to be value types and are written as
+    * such. {@link Remote}s are processed as defined in
+    * {@link #writeRemoteObject}. The written data contains discriminator,
+    * defining, that was written. Another method that writes the same content is
+    * {@link org.omg.CORBA_2_3.portable.OutputStream#write_abstract_interface(java.lang.Object)}.
+    * 
+    * @param output a stream to write to, must be
+    * {@link org.omg.CORBA_2_3.portable.OutputStream}.
+    * 
+    * @param object an object to write, must be CORBA object, Remote
+    */
+   public void writeAbstractObject(OutputStream output, Object object)
+   {
+     ((org.omg.CORBA_2_3.portable.OutputStream) output).write_abstract_interface(object);
+   }
+ 
+   /**
+    * Write the passed java object to the output stream in the form of the CORBA
+    * {@link Any}. This includes creating an writing the object {@link TypeCode}
+    * first. Such Any can be later read by a non-RMI-IIOP CORBA implementation
+    * and manipulated, for instance, by means, provided in
+    * {@link org.omg.DynamicAny.DynAny}. Depending from the passed value, this
+    * method writes CORBA object, value type or value box. For value types Null
+    * is written with the abstract interface, its typecode having repository id
+    * "IDL:omg.org/CORBA/AbstractBase:1.0" and the empty string name.
+    * 
+    * @param output the object to write.
+    * @param object the java object that must be written in the form of the CORBA
+    * {@link Any}.
+    */
+   public void writeAny(OutputStream output, Object object)
+   {
+     Any any = output.orb().create_any();
+     if (object == null)
+       {
+         GeneralTypeCode t = new GeneralTypeCode(TCKind.tk_abstract_interface);
+         t.setId("IDL:omg.org/CORBA/AbstractBase:1.0");
+         t.setName("");
+         any.type(t);
+         output.write_any(any);
+         return;
+       }
+     else if (object instanceof org.omg.CORBA.Object
+       && !(object instanceof Remote))
+       {
+         // Write as value type.
+         boolean inserted = ObjectCreator.insertWithHelper(any, object);
+         if (inserted)
+           {
+             output.write_any(any);
+             return;
+           }
+       }
+ 
+     if (object instanceof org.omg.CORBA.Object)
+       writeAnyAsRemote(output, object);
+     else if (object instanceof Serializable)
+       {
+         any.insert_Value((Serializable) object);
+         output.write_any(any);
+       }
+     else
+       {
+         MARSHAL m = new MARSHAL(object.getClass().getName()
+           + " must be CORBA Object, Remote or Serializable");
+         m.minor = Minor.NonSerializable;
+         throw m;
+       }
+   }
+ 
+   /**
+    * Write Any as for remote object.
+    */
+   void writeAnyAsRemote(OutputStream output, Object object)
+   {
+     GeneralTypeCode t = new GeneralTypeCode(TCKind.tk_objref);
+     t.setId(m_ValueHandler.getRMIRepositoryID(object.getClass()));
+     t.setName(object.getClass().getName());
+ 
+     // Writing Any (typecode, followed by value).
+     output.write_TypeCode(t);
+     writeRemoteObject(output, object);
+   }
+ 
+   /**
+    * Get the class name excluding the package name.
+    */
+   String getName(String n)
+   {
+     int p = n.lastIndexOf('.');
+     if (p < 0)
+       return n;
+     else
+       return n.substring(p + 1);
+   }
+ 
+   /**
+    * Read Any from the input stream.
+    */
+   public Object readAny(InputStream input)
+   {
+     return input.read_any();
+   }
+ 
+   /**
+    * Write the passed parameter to the output stream as CORBA object. If the
+    * parameter is an instance of Remote and not an instance of Stub, the method
+    * instantiates a suitable Tie, connects the parameter to this Tie and then
+    * connects that Tie to the ORB that is requested from the output stream. Then
+    * the object reference is written to the stream, making remote invocations
+    * possible. This method is used in write_value(..) method group in
+    * {@link org.omg.CORBA_2_3.portable.OutputStream} and also may be called
+    * directly from generated Stubs and Ties.
+    * 
+    * @param output a stream to write to, must be
+    * org.omg.CORBA_2_3.portable.OutputStream
+    * @param object an object to write.
+    */
+   public void writeRemoteObject(OutputStream an_output, Object object)
+   {
+     org.omg.CORBA_2_3.portable.OutputStream output = (org.omg.CORBA_2_3.portable.OutputStream) an_output;
+     if (object == null)
+       an_output.write_Object(null);
+     else if (isTieRequired(object))
+       {
+         // Find the interface that is implemented by the object and extends
+         // Remote.
+         Class fc = getExportedInterface(object);
+         exportTie(output, object, fc);
+       }
+     else if (object instanceof org.omg.CORBA.Object)
+       {
+         ensureOrbRunning(output);
+         an_output.write_Object((org.omg.CORBA.Object) object);
+       }
+     else if (object != null && object instanceof Serializable)
+       writeFields(an_output, (Serializable) object);
+   }
+ 
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,163 ----
+ /* ValueHandlerDelegateImpl.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.rmi.CORBA;
+ 
+ import gnu.CORBA.CDR.gnuRuntime;
+ 
+ import org.omg.CORBA.BAD_PARAM;
+ import org.omg.CORBA.CustomMarshal;
+ import org.omg.CORBA.portable.OutputStream;
+ import org.omg.CORBA.portable.Streamable;
+ import org.omg.SendingContext.RunTime;
+ 
+ import java.io.Externalizable;
+ import java.io.ObjectStreamClass;
+ import java.io.Serializable;
+ import java.rmi.Remote;
+ 
+ import javax.rmi.CORBA.ValueHandler;
+ import javax.rmi.CORBA.ValueHandlerMultiFormat;
+ 
+ /**
+  * Implementation of the ValueHandler.
+  * 
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org) (implementation)
+  */
+ public class ValueHandlerDelegateImpl
+   extends RmiUtilities
+   implements ValueHandler, ValueHandlerMultiFormat
+ {
+   /** 
+    * Return the maximal supported stream format version. We currently
+    * support the version 1.
+    * 
+    * TODO Support the version 2.
+    */
+   public byte getMaximumStreamFormatVersion()
+   {
+     return 1;
+   }
+ 
+   /**
+    * Write value using the given stream format version.
+    */
+   public void writeValue(OutputStream output, Serializable value, byte version)
+   {
+     if (version!=1)
+       throw new BAD_PARAM("Unsupported stream format version "+version);
+     else 
+       writeValue(output, value);
+   }
+ 
+   /**
+    * This implementation associates RunTime with stream rather than with the
+    * value handler and this method is not used in the implementation. It is
+    * implemented just for the sake of compatibility. 
+    */
+   public RunTime getRunTimeCodeBase()
+   {
+     return new gnuRuntime(null, null);
+   }
+ 
+   /**
+    * Checks if an instance of this class can write its fields itself.
+    */
+   public boolean isCustomMarshaled(Class clz)
+   {
+     return CustomMarshal.class.isAssignableFrom(clz)
+       || Streamable.class.isAssignableFrom(clz);
+   }
+ 
+   /**
+    * No replacement, returns the passed parameter.
+    */
+   public Serializable writeReplace(Serializable value)
+   {
+     return value;
+   }
+ 
+   /**
+    * Compute the repository id in the RMI hashed format.
+    */
+   public String getRMIRepositoryID(final Class cx)
+   {
+     long hash = 0;
+     Class of = cx.isArray() ? cx.getComponentType() : null;
+ 
+     if (cx.equals(String[].class))
+       return RMI_STRING_ARRAY_ID;
+     else if (cx.equals(String.class))
+       return RMI_STRING_ID;
+     else if (cx.equals(Class.class))
+       return RMI_CLASS_ID;
+     else if (Remote.class.isAssignableFrom(cx)
+       || !Serializable.class.isAssignableFrom(cx)
+       || cx.isInterface()
+       || (cx.isArray() && (!Serializable.class.isAssignableFrom(of)
+         || of.isPrimitive() || Remote.class.isAssignableFrom(of)))
+ 
+     )
+       // Some classes that have zero hash code and serial no version id
+       // included.
+       return "RMI:" + cx.getName() + ":" + toHex(hash);
+     else if (cx.isArray())
+       // Arrays have the same hashcode and uid as they components.
+       return "RMI:" + cx.getName() + ":" + toHex(getHashCode(of)) + ":"
+         + toHex(getSid(of));
+     else
+       {
+         if (Externalizable.class.isAssignableFrom(cx))
+           hash = 1;
+         else
+           hash = getHashCode(cx);
+ 
+         return "RMI:" + cx.getName() + ":" + toHex(hash) + ":"
+           + toHex(getSid(cx));
+       }
+   }
+ 
+   /**
+    * Get the class serial version UID.
+    */
+   long getSid(Class cx)
+   {
+     ObjectStreamClass osc = ObjectStreamClass.lookup(cx);
+     return osc.getSerialVersionUID();
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaInputPortDevice.java gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaInputPortDevice.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaInputPortDevice.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaInputPortDevice.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,130 ----
+ /* AlsaInputPortDevice.java -- ALSA MIDI In Port
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.sound.midi.alsa;
+ 
+ import javax.sound.midi.MidiUnavailableException;
+ import javax.sound.midi.Receiver;
+ import javax.sound.midi.Transmitter;
+ import gnu.javax.sound.midi.alsa.AlsaMidiDeviceProvider.AlsaPortInfo;
+ 
+ /**
+  * ALSA MIDI In Port.
+  * 
+  * @author Anthony Green (green@redhat.com)
+  *
+  */
+ public class AlsaInputPortDevice extends AlsaPortDevice
+ {   
+ 
+   AlsaInputPortDevice (AlsaPortInfo info)
+   {
+     super(info);
+   }
+     
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#open()
+    */
+   public void open() throws MidiUnavailableException
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#close()
+    */
+   public void close()
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#isOpen()
+    */
+   public boolean isOpen()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getMicrosecondPosition()
+    */
+   public long getMicrosecondPosition()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getMaxReceivers()
+    */
+   public int getMaxReceivers()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getMaxTransmitters()
+    */
+   public int getMaxTransmitters()
+   {
+     // TODO Auto-generated method stub
+     return 1;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getReceiver()
+    */
+   public Receiver getReceiver() throws MidiUnavailableException
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getTransmitter()
+    */
+   public Transmitter getTransmitter() throws MidiUnavailableException
+   {
+     return new AlsaTransmitter();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiDeviceProvider.java gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiDeviceProvider.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiDeviceProvider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiDeviceProvider.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,216 ----
+ /* AlsaMidiDeviceProvider.java -- The ALSA MIDI Device Provider
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.sound.midi.alsa;
+ 
+ import gnu.classpath.Configuration;
+ 
+ import javax.sound.midi.MidiDevice;
+ import javax.sound.midi.MidiDevice.Info;
+ import javax.sound.midi.spi.MidiDeviceProvider;
+ 
+ /**
+  * Provide ALSA MIDI devices.
+  * 
+  * @author Anthony Green (green@redhat.com)
+  *
+  */
+ public class AlsaMidiDeviceProvider extends MidiDeviceProvider
+ {
+   /**
+    * Abstract base for ALSA specific MIDI device info.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   private static abstract class AlsaInfo extends Info
+   {
+     /**
+      * Create an ALSA specific MIDI device info object.
+      * 
+      * @param name the device name
+      * @param description the device description
+      */
+     public AlsaInfo(String name, String description)
+     {
+       super(name, "Alsa", description, "0.0");
+     }
+     
+     abstract MidiDevice getDevice ();
+   } 
+ 
+   /**
+    * ALSA MIDI Port.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   public static abstract class AlsaPortInfo extends AlsaInfo
+   {
+     long client;
+     long port;
+     
+     /**
+      * Create ALSA MIDI In Port.
+      * 
+      * @param name the device name
+      * @param description the device description
+      * @param client the client ID
+      * @param port the port ID
+      */
+     public AlsaPortInfo(String name, String description, long client, long port)
+     {
+       super(name, description);
+       this.client = client;
+       this.port = port;
+     }
+   } 
+   
+   /**
+    * ALSA Sequencer specific info.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   private static class AlsaSequencerInfo extends AlsaInfo
+   {
+     public AlsaSequencerInfo(String name, String description)
+     {
+       super(name, description);
+     }
+     
+     MidiDevice getDevice()
+     {
+       return AlsaMidiSequencerDevice.getInstance();
+     }
+   }
+   
+   /**
+    * ALSA MIDI In Port.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   private static class AlsaInputPortInfo extends AlsaPortInfo
+   {
+     public AlsaInputPortInfo(String name, String description, long client, long port)
+     {
+       super(name, description, client, port);
+     }
+     
+     MidiDevice getDevice()
+     {
+       return new AlsaInputPortDevice(this);
+     }
+   }
+ 
+   /**
+    * ALSA MIDI Out Port.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   private static class AlsaOutputPortInfo extends AlsaPortInfo
+   {
+     public AlsaOutputPortInfo(String name, String description, long client, long port)
+     {
+       super(name, description, client, port);
+     }
+     
+     MidiDevice getDevice()
+     {
+       return new AlsaOutputPortDevice(this);
+     }
+   }
+   
+   private static AlsaInfo[] infos;
+   
+   private static native AlsaInfo[] getInputDeviceInfo_();
+   private static native AlsaInfo[] getOutputDeviceInfo_();
+   
+   /**
+    * Initialize the ALSA system
+    */
+   private static native void init_();
+   
+   static
+   {    
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary("gjsmalsa");
+       }  
+        
+     init_();
+     
+     AlsaInfo inputs[] = getInputDeviceInfo_();
+     AlsaInfo outputs[] = getOutputDeviceInfo_();
+     
+     infos = new AlsaInfo[inputs.length + outputs.length + 1];
+     infos[0] = new AlsaSequencerInfo ("/dev/snd/seq", "ALSA Sequencer");
+     System.arraycopy(inputs, 0, infos, 1, inputs.length);
+     System.arraycopy(outputs, 0, infos, 1 + inputs.length, outputs.length);
+   }
+   
+   public AlsaMidiDeviceProvider()
+   {
+     // Nothing.
+   }
+   
+   /* (non-Javadoc)
+    * @see javax.sound.midi.spi.MidiDeviceProvider#getDeviceInfo()
+    */
+   public Info[] getDeviceInfo()
+   {
+     return infos;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.spi.MidiDeviceProvider#getDevice(javax.sound.midi.MidiDevice.Info)
+    */
+   public MidiDevice getDevice(Info info)
+   {
+     for (int i = 0; i < infos.length; i++)
+     {
+       if (info.equals(infos[i]))
+       {
+         return infos[i].getDevice();
+       }
+     }
+     throw new IllegalArgumentException("Don't recognize MIDI device " + info);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiSequencerDevice.java gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiSequencerDevice.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiSequencerDevice.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiSequencerDevice.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,519 ----
+ /* AlsaMidiSequencerDevice.java -- The ALSA MIDI sequencer device
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.sound.midi.alsa;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ import javax.sound.midi.ControllerEventListener;
+ import javax.sound.midi.InvalidMidiDataException;
+ import javax.sound.midi.MetaEventListener;
+ import javax.sound.midi.MidiUnavailableException;
+ import javax.sound.midi.Receiver;
+ import javax.sound.midi.Sequence;
+ import javax.sound.midi.Sequencer;
+ import javax.sound.midi.Track;
+ import javax.sound.midi.Transmitter;
+ 
+ // FIXME: These next two imports are only required by gcj it seems.
+ import javax.sound.midi.MidiDevice.Info;
+ import javax.sound.midi.Sequencer.SyncMode;
+ 
+ /**
+  * The ALSA MIDI sequencer device.  This is a singleton device.
+  * 
+  * @author green@redhat.com
+  *
+  */
+ public class AlsaMidiSequencerDevice implements Sequencer
+ {
+   // The singleton instance.
+   public final static AlsaMidiSequencerDevice instance = new AlsaMidiSequencerDevice();
+   
+   // A pointer to a native chunk of memory
+   private long nativeState;
+   
+   // The sequence to process
+   private Sequence sequence;
+   
+   /**
+    * A private constructor.  There should only be one instance of this
+    * device. 
+    */
+   private AlsaMidiSequencerDevice()
+   {
+     super();
+   }
+ 
+   /**
+    * Return the sequencer singleton.
+    * 
+    * @return the sequencer singleton
+    */
+   public static AlsaMidiSequencerDevice getInstance()
+   {
+     return instance;
+   }
+   
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setSequence(javax.sound.midi.Sequence)
+    */
+   public void setSequence(Sequence seq) throws InvalidMidiDataException
+   {
+     sequence = seq;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setSequence(java.io.InputStream)
+    */
+   public void setSequence(InputStream istream) throws IOException,
+       InvalidMidiDataException
+   {
+     // TODO Auto-generated method stub
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getSequence()
+    */
+   public Sequence getSequence()
+   {
+     return sequence;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#start()
+    */
+   public void start()
+   {
+     // TODO Auto-generated method stub
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#stop()
+    */
+   public void stop()
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#isRunning()
+    */
+   public boolean isRunning()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#startRecording()
+    */
+   public void startRecording()
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#stopRecording()
+    */
+   public void stopRecording()
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#isRecording()
+    */
+   public boolean isRecording()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#recordEnable(javax.sound.midi.Track, int)
+    */
+   public void recordEnable(Track track, int channel)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#recordDisable(javax.sound.midi.Track)
+    */
+   public void recordDisable(Track track)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getTempoInBPM()
+    */
+   public float getTempoInBPM()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setTempoInBPM(float)
+    */
+   public void setTempoInBPM(float bpm)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getTempoInMPQ()
+    */
+   public float getTempoInMPQ()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setTempoInMPQ(float)
+    */
+   public void setTempoInMPQ(float mpq)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setTempoFactor(float)
+    */
+   public void setTempoFactor(float factor)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getTempoFactor()
+    */
+   public float getTempoFactor()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getTickLength()
+    */
+   public long getTickLength()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getTickPosition()
+    */
+   public long getTickPosition()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setTickPosition(long)
+    */
+   public void setTickPosition(long tick)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getMicrosecondLength()
+    */
+   public long getMicrosecondLength()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getMicrosecondPosition()
+    */
+   public long getMicrosecondPosition()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setMicrosecondPosition(long)
+    */
+   public void setMicrosecondPosition(long microsecond)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setMasterSyncMode(javax.sound.midi.Sequencer.SyncMode)
+    */
+   public void setMasterSyncMode(SyncMode sync)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getMasterSyncMode()
+    */
+   public SyncMode getMasterSyncMode()
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getMasterSyncModes()
+    */
+   public SyncMode[] getMasterSyncModes()
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setSlaveSyncMode(javax.sound.midi.Sequencer.SyncMode)
+    */
+   public void setSlaveSyncMode(SyncMode sync)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getSlaveSyncMode()
+    */
+   public SyncMode getSlaveSyncMode()
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getSlaveSyncModes()
+    */
+   public SyncMode[] getSlaveSyncModes()
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setTrackMute(int, boolean)
+    */
+   public void setTrackMute(int track, boolean mute)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getTrackMute(int)
+    */
+   public boolean getTrackMute(int track)
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#setTrackSolo(int, boolean)
+    */
+   public void setTrackSolo(int track, boolean solo)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#getTrackSolo(int)
+    */
+   public boolean getTrackSolo(int track)
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#addMetaEventListener(javax.sound.midi.MetaEventListener)
+    */
+   public boolean addMetaEventListener(MetaEventListener listener)
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#removeMetaEventListener(javax.sound.midi.MetaEventListener)
+    */
+   public void removeMetaEventListener(MetaEventListener listener)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#addControllerEventListener(javax.sound.midi.ControllerEventListener, int[])
+    */
+   public int[] addControllerEventListener(ControllerEventListener listener,
+                                           int[] controllers)
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Sequencer#removeControllerEventListener(javax.sound.midi.ControllerEventListener, int[])
+    */
+   public int[] removeControllerEventListener(ControllerEventListener listener,
+                                              int[] controllers)
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getDeviceInfo()
+    */
+   public Info getDeviceInfo()
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#open()
+    */
+   public void open() throws MidiUnavailableException
+   {
+     synchronized(this)
+     {
+       // Check to see if we're open already.
+       if (nativeState != 0)
+         return;
+      
+       nativeState = open_();
+     }
+   }
+ 
+   /**
+    * Allocate the native state object, and open the sequencer.
+    * 
+    * @return a long representation of a pointer to the nativeState.
+    */
+   private native long open_();
+   
+   /**
+    * Close the sequencer and free the native state object.
+    */
+   private native void close_(long nativeState);
+   
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#close()
+    */
+   public void close()
+   {
+     synchronized(this)
+     {
+       close_(nativeState);
+       nativeState = 0;
+     }
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#isOpen()
+    */
+   public boolean isOpen()
+   {
+     synchronized(this)
+     {
+       return (nativeState != 0);
+     }
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getMaxReceivers()
+    */
+   public int getMaxReceivers()
+   {
+     return -1;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getMaxTransmitters()
+    */
+   public int getMaxTransmitters()
+   {
+     return -1;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getReceiver()
+    */
+   public Receiver getReceiver() throws MidiUnavailableException
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getTransmitter()
+    */
+   public Transmitter getTransmitter() throws MidiUnavailableException
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaOutputPortDevice.java gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaOutputPortDevice.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaOutputPortDevice.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaOutputPortDevice.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,131 ----
+ /* AlsaOutputPortDevice.java -- ALSA MIDI Output Port Device
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.sound.midi.alsa;
+ 
+ import gnu.javax.sound.midi.alsa.AlsaMidiDeviceProvider.AlsaPortInfo;
+ 
+ import javax.sound.midi.MidiUnavailableException;
+ import javax.sound.midi.Receiver;
+ import javax.sound.midi.Transmitter;
+ 
+ /**
+  * ALSA MIDI Out Device
+  * 
+  * @author Anthony Green (green@redhat.com)
+  *
+  */
+ public class AlsaOutputPortDevice extends AlsaPortDevice
+ {
+   AlsaOutputPortDevice (AlsaPortInfo info)
+   {
+     super(info);
+   }
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#open()
+    */
+   public void open() throws MidiUnavailableException
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#close()
+    */
+   public void close()
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#isOpen()
+    */
+   public boolean isOpen()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getMicrosecondPosition()
+    */
+   public long getMicrosecondPosition()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getMaxReceivers()
+    */
+   public int getMaxReceivers()
+   {
+     // TODO Auto-generated method stub
+     return 1;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getMaxTransmitters()
+    */
+   public int getMaxTransmitters()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getReceiver()
+    */
+   public Receiver getReceiver() throws MidiUnavailableException
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getTransmitter()
+    */
+   public Transmitter getTransmitter() throws MidiUnavailableException
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaPortDevice.java gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaPortDevice.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaPortDevice.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/alsa/AlsaPortDevice.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,153 ----
+ /* AlsaPortDevice.java -- ALSA MIDI Port Devices
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.sound.midi.alsa;
+ 
+ import javax.sound.midi.MidiDevice;
+ import javax.sound.midi.MidiMessage;
+ import javax.sound.midi.Receiver;
+ import javax.sound.midi.Transmitter;
+ 
+ // FIXME: This next import is only rquired for gcj it seems.
+ import javax.sound.midi.MidiDevice.Info;
+ 
+ import gnu.javax.sound.midi.alsa.AlsaMidiDeviceProvider.AlsaPortInfo;
+ 
+ /**
+  * ALSA Port Device
+  * 
+  * @author Anthony Green (green@redhat.com)
+  *
+  */
+ public abstract class AlsaPortDevice implements MidiDevice
+ {
+   /**
+    * The ALSA Receiver class.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   public class AlsaReceiver implements Receiver
+   {
+     /* (non-Javadoc)
+      * @see javax.sound.midi.Receiver#send(javax.sound.midi.MidiMessage, long)
+      */
+     public void send(MidiMessage message, long timeStamp)
+         throws IllegalStateException
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.Receiver#close()
+      */
+     public void close()
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+   }
+ 
+   AlsaMidiDeviceProvider.AlsaPortInfo info;
+     
+   public AlsaPortDevice (AlsaPortInfo info)
+   {
+     this.info = info;
+   }
+     
+   public Info getDeviceInfo()
+   {
+     return info;
+   }
+ 
+   native void run_receiver_thread_ (long client, long port, Receiver receiver);
+   
+   /**
+    * The ALSA Transmitter class.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   protected class AlsaTransmitter implements Transmitter, Runnable
+   {
+     private Receiver receiver;
+ 
+     public void run()
+     {
+       run_receiver_thread_ (info.client, info.port, receiver);
+     }
+     
+     /* (non-Javadoc)
+      * @see javax.sound.midi.Transmitter#setReceiver(javax.sound.midi.Receiver)
+      */
+     public void setReceiver(Receiver receiver)
+     {
+       synchronized (this)
+       {
+         this.receiver = receiver;
+       }
+       
+       // Create the processing thread
+       new Thread(this).start();
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.Transmitter#getReceiver()
+      */
+     public Receiver getReceiver()
+     {
+       synchronized (this)
+       {
+         return receiver;
+       }
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.Transmitter#close()
+      */
+     public void close()
+     {
+       synchronized (this)
+       {
+         receiver.close();
+         receiver = null;
+       }
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,173 ----
+ /* DSSIMidiDeviceProvider.java -- DSSI Device Provider
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.sound.midi.dssi;
+ 
+ import java.util.ArrayList;
+ import java.util.List;
+ import java.io.File;
+ import java.io.FilenameFilter;
+ 
+ import gnu.classpath.Configuration;
+ import gnu.javax.sound.midi.alsa.AlsaMidiSequencerDevice;
+ 
+ import javax.sound.midi.MidiDevice;
+ import javax.sound.midi.MidiDevice.Info;
+ import javax.sound.midi.spi.MidiDeviceProvider;
+ 
+ /**
+  * A DSSI MIDI device provider.
+  * 
+  * DSSI (pronounced "dizzy") is an API for audio plugins, with particular 
+  * application for software synthesis plugins with native user interfaces.
+  * 
+  * Read about DSSI at http://dssi.sourceforge.net
+  * 
+  * @author Anthony Green (green@redhat.com)
+  *
+  */
+ public class DSSIMidiDeviceProvider extends MidiDeviceProvider
+ {
+   /**
+    * The MidiDevice.Info specialized for DSSI synthesizers.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   private static class DSSIInfo extends Info
+   {
+     String soname;
+     long index;
+     
+     public DSSIInfo(String name, String vendor, String description,
+                     String version, String soname, long index)
+     {
+       super(name, vendor, description, version);
+       this.soname = soname;
+       this.index = index;
+     }
+   }
+ 
+   static native long dlopen_(String soname);
+   static native void dlclose_(long sohandle);
+   static native long getDSSIHandle_(long sohandle, long index);
+   static native String getDSSIName_(long handle);
+   static native String getDSSICopyright_(long handle);
+   static native String getDSSIVendor_(long handle);
+   static native String getDSSILabel_(long handle);
+   
+   private static List examineLibrary(String soname)
+   {
+      List list = new ArrayList();
+      long index = 0;
+      long handle;
+      
+      long sohandle = dlopen_(soname);
+      if (sohandle == 0)
+        return list;
+      do
+      {
+        handle = getDSSIHandle_(sohandle, index);
+        if (handle == 0)
+          break;
+        String name = getDSSILabel_(handle);
+        String copyright = getDSSICopyright_(handle);
+        String label = getDSSIName_(handle);
+        String vendor = getDSSIVendor_(handle);
+        list.add(new DSSIInfo(name, vendor, label, 
+                              "DSSI-1", soname, index));
+        index++;
+      } while (true);
+      
+      // Close the library and free memory
+      dlclose_(sohandle);
+      
+      return list;
+   }
+   
+   private static DSSIInfo[] infos;
+   
+   static
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       System.loadLibrary("gjsmdssi");
+ 
+     File dssidir = new File("/usr/lib/dssi/");
+     String sofiles[] = dssidir.list(new FilenameFilter()
+                                     {
+                                       public boolean accept(File dir, String n)
+                                       {
+                                         return n.endsWith(".so");
+                                       }   
+                                     });
+     List ilist = new ArrayList();
+     for (int i = 0; i < sofiles.length; i++)
+       ilist.addAll(examineLibrary(new File(dssidir, sofiles[i]).getAbsolutePath()));
+     infos = (DSSIInfo[]) ilist.toArray(new DSSIInfo[ilist.size()]);
+   }
+   
+   public DSSIMidiDeviceProvider()
+   {
+     // Empty.
+   }
+   
+   /* Return the Info array.
+    * @see javax.sound.midi.spi.MidiDeviceProvider#getDeviceInfo()
+    */
+   public Info[] getDeviceInfo()
+   {
+     return infos;
+   }
+ 
+   /* Get a MIDI Device for info.
+    * @see javax.sound.midi.spi.MidiDeviceProvider#getDevice(javax.sound.midi.MidiDevice.Info)
+    */
+   public MidiDevice getDevice(Info info)
+   {
+     for (int i = 0; i < infos.length; i++)
+     {
+       if (info.equals(infos[i]))
+       {
+           return new DSSISynthesizer(infos[i],
+                                      infos[i].soname, 
+                                      infos[i].index);
+       }
+     }
+     throw new IllegalArgumentException("Don't recognize MIDI device " + info);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java	Tue Nov 15 16:23:41 2005
***************
*** 0 ****
--- 1,745 ----
+ /* DSSISynthesizer.java -- DSSI Synthesizer Provider
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.sound.midi.dssi;
+ 
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.List;
+ 
+ import javax.sound.midi.Instrument;
+ import javax.sound.midi.MidiChannel;
+ import javax.sound.midi.MidiMessage;
+ import javax.sound.midi.MidiUnavailableException;
+ import javax.sound.midi.Patch;
+ import javax.sound.midi.Receiver;
+ import javax.sound.midi.ShortMessage;
+ import javax.sound.midi.Soundbank;
+ import javax.sound.midi.SoundbankResource;
+ import javax.sound.midi.Synthesizer;
+ import javax.sound.midi.Transmitter;
+ import javax.sound.midi.VoiceStatus;
+ 
+ // FIXME: This import in only required for gcj it seems.
+ import javax.sound.midi.MidiDevice.Info;
+ 
+ /**
+  * DSSI soft-synth support.
+  * 
+  * All DSSI soft-synths are expected to be installed in /usr/lib/dssi.
+  * 
+  * @author Anthony Green (green@redhat.com)
+  *
+  */
+ public class DSSISynthesizer implements Synthesizer
+ {
+   /**
+    * The DSSI Instrument class.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   class DSSIInstrument extends Instrument
+   {
+     DSSIInstrument (Soundbank soundbank, Patch patch, String name)
+     {
+       super (soundbank, patch, name, null);
+     }
+     
+     /* @see javax.sound.midi.SoundbankResource#getData()
+      */
+     public Object getData()
+     {
+       return null;
+     }
+ 
+   }
+ 
+ /**
+    * DSSISoundbank holds all instruments.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   class DSSISoundbank implements Soundbank
+   {
+     private String name;
+     private String description;
+     private List instruments = new ArrayList();
+     private List resources = new ArrayList();
+     private String vendor;
+     private String version;
+     
+     public DSSISoundbank(String name, String description, String vendor, String version)
+     {
+       this.name = name;
+       this.description = description;
+       this.vendor = vendor;
+       this.version = version;
+     }
+     
+     void add(Instrument instrument)
+     {
+       instruments.add(instrument);
+     }
+     
+     /* @see javax.sound.midi.Soundbank#getName()
+      */
+     public String getName()
+     {
+       return name;
+     }
+ 
+     /* @see javax.sound.midi.Soundbank#getVersion()
+      */
+     public String getVersion()
+     {
+       return version;
+     }
+ 
+     /* @see javax.sound.midi.Soundbank#getVendor()
+      */
+     public String getVendor()
+     {
+       return vendor;
+     }
+ 
+     /* @see javax.sound.midi.Soundbank#getDescription()
+      */
+     public String getDescription()
+     {
+       return description;
+     }
+ 
+     /* @see javax.sound.midi.Soundbank#getResources()
+      */
+     public SoundbankResource[] getResources()
+     {
+       return (SoundbankResource[])
+         resources.toArray(new SoundbankResource[resources.size()]);
+     }
+ 
+     /* @see javax.sound.midi.Soundbank#getInstruments()
+      */
+     public Instrument[] getInstruments()
+     {
+       return (Instrument[])
+         instruments.toArray(new Instrument[instruments.size()]);
+     }
+ 
+     /* @see javax.sound.midi.Soundbank#getInstrument(javax.sound.midi.Patch)
+      */
+     public Instrument getInstrument(Patch patch)
+     {
+       Iterator itr = instruments.iterator();
+       
+       while (itr.hasNext())
+       {
+         Instrument i = (Instrument) itr.next();
+         if (i.getPatch().equals(patch))
+           return i;
+       }
+       
+       return null;
+     }
+   }
+ 
+ /**
+    * The Receiver class receives all MIDI messages from a connected
+    * Transmitter.
+    * 
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   class DSSIReceiver implements Receiver
+   {
+     /* (non-Javadoc)
+      * @see javax.sound.midi.Receiver#send(javax.sound.midi.MidiMessage, long)
+      */
+     public void send(MidiMessage message, long timeStamp)
+         throws IllegalStateException
+     {
+       if (message instanceof ShortMessage)
+       {
+         ShortMessage smessage = (ShortMessage) message;
+       
+         switch (message.getStatus())
+         {
+         case ShortMessage.NOTE_ON:
+           int velocity = smessage.getData2();
+           if (velocity > 0)
+             channels[smessage.getChannel()].noteOn(smessage.getData1(), 
+                                                    smessage.getData2());
+           else
+             channels[smessage.getChannel()].noteOff(smessage.getData1());
+           break;
+         case ShortMessage.CONTROL_CHANGE:
+           channels[smessage.getChannel()].controlChange(smessage.getData1(),
+                                                         smessage.getData2());
+           break;
+         default:
+           System.out.println ("Unhandled message: " + message.getStatus());
+           break;
+         }
+       }
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.Receiver#close()
+      */
+     public void close()
+     {
+       // TODO Auto-generated method stub
+     }
+ 
+   }
+ 
+   static native void noteOn_(long handle, int channel, int noteNumber, int velocity);  
+   static native void noteOff_(long handle, int channel, int noteNumber, int velocity);  
+   static native void setPolyPressure_(long handle, int channel, int noteNumber, int pressure);
+   static native int getPolyPressure_(long handle, int channel, int noteNumber);
+   static native void controlChange_(long handle, int channel, int control, int value);
+   static native void open_(long handle);
+   static native void close_(long handle);
+   static native String getProgramName_(long handle, int index);
+   static native int getProgramBank_(long handle, int index);
+   static native int getProgramProgram_(long handle, int index);
+   static native void selectProgram_(long handle, int bank, int program);
+       
+   /**
+    * @author Anthony Green (green@redhat.com)
+    *
+    */
+   public class DSSIMidiChannel implements MidiChannel
+   {
+     int channel = 0;
+     
+     /**
+      * Default contructor.
+      */
+     public DSSIMidiChannel(int channel)
+     {
+       super();
+       this.channel = channel;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#noteOn(int, int)
+      */
+     public void noteOn(int noteNumber, int velocity)
+     {
+       noteOn_(sohandle, channel, noteNumber, velocity);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#noteOff(int, int)
+      */
+     public void noteOff(int noteNumber, int velocity)
+     {
+       noteOff_(sohandle, channel, noteNumber, velocity);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#noteOff(int)
+      */
+     public void noteOff(int noteNumber)
+     {
+       noteOff_(sohandle, channel, noteNumber, -1);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#setPolyPressure(int, int)
+      */
+     public void setPolyPressure(int noteNumber, int pressure)
+     {
+       setPolyPressure_(sohandle, channel, noteNumber, pressure);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#getPolyPressure(int)
+      */
+     public int getPolyPressure(int noteNumber)
+     {
+       return getPolyPressure_(sohandle, channel, noteNumber);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#setChannelPressure(int)
+      */
+     public void setChannelPressure(int pressure)
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#getChannelPressure()
+      */
+     public int getChannelPressure()
+     {
+       // TODO Auto-generated method stub
+       return 0;
+     }
+ 
+     /* @see javax.sound.midi.MidiChannel#controlChange(int, int)  */
+     public void controlChange(int controller, int value)
+     {
+       controlChange_(sohandle, channel, controller, value);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#getController(int)
+      */
+     public int getController(int controller)
+     {
+       // TODO Auto-generated method stub
+       return 0;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#programChange(int)
+      */
+     public void programChange(int program)
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#programChange(int, int)
+      */
+     public void programChange(int bank, int program)
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#getProgram()
+      */
+     public int getProgram()
+     {
+       // TODO Auto-generated method stub
+       return 0;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#setPitchBend(int)
+      */
+     public void setPitchBend(int bend)
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#getPitchBend()
+      */
+     public int getPitchBend()
+     {
+       // TODO Auto-generated method stub
+       return 0;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#resetAllControllers()
+      */
+     public void resetAllControllers()
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#allNotesOff()
+      */
+     public void allNotesOff()
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#allSoundOff()
+      */
+     public void allSoundOff()
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#localControl(boolean)
+      */
+     public boolean localControl(boolean on)
+     {
+       // TODO Auto-generated method stub
+       return false;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#setMono(boolean)
+      */
+     public void setMono(boolean on)
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#getMono()
+      */
+     public boolean getMono()
+     {
+       // TODO Auto-generated method stub
+       return false;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#setOmni(boolean)
+      */
+     public void setOmni(boolean on)
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#getOmni()
+      */
+     public boolean getOmni()
+     {
+       // TODO Auto-generated method stub
+       return false;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#setMute(boolean)
+      */
+     public void setMute(boolean mute)
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#getMute()
+      */
+     public boolean getMute()
+     {
+       // TODO Auto-generated method stub
+       return false;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#setSolo(boolean)
+      */
+     public void setSolo(boolean solo)
+     {
+       // TODO Auto-generated method stub
+ 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.sound.midi.MidiChannel#getSolo()
+      */
+     public boolean getSolo()
+     {
+       // TODO Auto-generated method stub
+       return false;
+     }
+ 
+   }
+ 
+   long sohandle;
+   long handle; 
+   private Info info;
+   
+   MidiChannel channels[] = new MidiChannel[16];
+   
+   // The list of known soundbanks, and the default one.
+   List soundbanks = new ArrayList();
+   DSSISoundbank defaultSoundbank;
+   
+   /**
+    * Create a DSSI Synthesizer.
+    * 
+    * @param info the DSSIInfo for this soft-synth
+    * @param soname the name of the .so file for this DSSI synth
+    * @param index the DSSI index for this soft-synth
+    */
+   public DSSISynthesizer(Info info, String soname, long index)
+   {
+     super();
+     this.info = info;
+     sohandle = DSSIMidiDeviceProvider.dlopen_(soname);
+     handle = DSSIMidiDeviceProvider.getDSSIHandle_(sohandle, index);
+     channels[0] = new DSSIMidiChannel(0);
+     defaultSoundbank = new DSSISoundbank("name", "description", 
+                                          "vendor", "version");
+     soundbanks.add(defaultSoundbank);
+     
+     int i = 0;
+     String name;
+     do
+     {
+       name = getProgramName_(sohandle, i);
+       if (name != null)
+       {
+         defaultSoundbank.
+           add(new DSSIInstrument(defaultSoundbank, 
+                                  new Patch(getProgramBank_(sohandle, i),
+                                            getProgramProgram_(sohandle, i)),
+                                  name));
+         i++;
+       }
+     } while (name != null);
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#getMaxPolyphony()
+    */
+   public int getMaxPolyphony()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#getLatency()
+    */
+   public long getLatency()
+   {
+     // DSSI and LADSPA provide no way to determine the latency.
+     // Let's just return 0 for now.
+     return 0;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#getChannels()
+    */
+   public MidiChannel[] getChannels()
+   {
+     return channels;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#getVoiceStatus()
+    */
+   public VoiceStatus[] getVoiceStatus()
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#isSoundbankSupported(javax.sound.midi.Soundbank)
+    */
+   public boolean isSoundbankSupported(Soundbank soundbank)
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* @see javax.sound.midi.Synthesizer#loadInstrument(javax.sound.midi.Instrument)
+    */
+   public boolean loadInstrument(Instrument instrument)
+   {
+     // FIXME: perhaps this isn't quite right.  It can probably
+     // be in any soundbank.
+     if (instrument.getSoundbank() != defaultSoundbank)
+       throw new IllegalArgumentException ("Synthesizer doesn't support this instrument's soundbank");
+       
+     Patch patch = instrument.getPatch();
+     selectProgram_(sohandle, patch.getBank(), patch.getProgram());
+     return true;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#unloadInstrument(javax.sound.midi.Instrument)
+    */
+   public void unloadInstrument(Instrument instrument)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#remapInstrument(javax.sound.midi.Instrument, javax.sound.midi.Instrument)
+    */
+   public boolean remapInstrument(Instrument from, Instrument to)
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* @see javax.sound.midi.Synthesizer#getDefaultSoundbank()
+    */
+   public Soundbank getDefaultSoundbank()
+   {
+     return defaultSoundbank;
+   }
+ 
+   /* @see javax.sound.midi.Synthesizer#getAvailableInstruments()
+    */
+   public Instrument[] getAvailableInstruments()
+   {
+     List instruments = new ArrayList();
+     Iterator itr = soundbanks.iterator();
+     while (itr.hasNext())
+     {
+       Soundbank sb = (Soundbank) itr.next();
+       Instrument ins[] = sb.getInstruments();
+       for (int i = 0; i < ins.length; i++)
+         instruments.add(ins[i]);
+     }
+     return (Instrument[])
+       instruments.toArray(new Instrument[instruments.size()]);
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#getLoadedInstruments()
+    */
+   public Instrument[] getLoadedInstruments()
+   {
+     // TODO Auto-generated method stub
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#loadAllInstruments(javax.sound.midi.Soundbank)
+    */
+   public boolean loadAllInstruments(Soundbank soundbank)
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#unloadAllInstruments(javax.sound.midi.Soundbank)
+    */
+   public void unloadAllInstruments(Soundbank soundbank)
+   {
+     // TODO Auto-generated method stub
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
+    */
+   public boolean loadInstruments(Soundbank soundbank, Patch[] patchList)
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.Synthesizer#unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
+    */
+   public void unloadInstruments(Soundbank soundbank, Patch[] patchList)
+   {
+     // TODO Auto-generated method stub
+ 
+   }
+ 
+   /* @see javax.sound.midi.MidiDevice#getDeviceInfo()
+    */
+   public Info getDeviceInfo()
+   {
+     return info;
+   }
+ 
+   /* @see javax.sound.midi.MidiDevice#open()
+    */
+   public void open() throws MidiUnavailableException
+   {
+     open_(sohandle);
+   }
+ 
+   /* @see javax.sound.midi.MidiDevice#close()
+    */
+   public void close()
+   {
+     close_(sohandle);
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#isOpen()
+    */
+   public boolean isOpen()
+   {
+     // TODO Auto-generated method stub
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see javax.sound.midi.MidiDevice#getMicrosecondPosition()
+    */
+   public long getMicrosecondPosition()
+   {
+     // TODO Auto-generated method stub
+     return 0;
+   }
+ 
+   /* @see javax.sound.midi.MidiDevice#getMaxReceivers()
+    */
+   public int getMaxReceivers()
+   {
+     return 1;
+   }
+ 
+   /* @see javax.sound.midi.MidiDevice#getMaxTransmitters()
+    */
+   public int getMaxTransmitters()
+   {
+     return 0;
+   }
+ 
+   /* @see javax.sound.midi.MidiDevice#getReceiver()
+    */
+   public Receiver getReceiver() throws MidiUnavailableException
+   {
+     return new DSSIReceiver();
+   }
+ 
+   /* @see javax.sound.midi.MidiDevice#getTransmitter()
+    */
+   public Transmitter getTransmitter() throws MidiUnavailableException
+   {
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Error.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Error.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Error.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Error.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,8 ----
+ ‰PNG
+ 
+ 
IHDR00`Ü	µ×PLTEÄz,„Ä&¤"D”2,Äž4¤2$Ôª,„*ä*´"ÔªDd"””*Ô¢4¤:,4Ô*¤*LÌ¢4ä®$ô2´*t&$”&Œ:4Œ*tÜ²<<¬"¬2$Ü²4œ*¬:,„&Ä.DÜª,ì2¼"Ü*¬*\Ì†$Ì*œ2$ì.œÜ¦4Ì¦Dœ&Œ.,|Ü®,Ä*¤&¤6,„.$l$
+ ´&l"”.$Ô¦4¤>44¤.$Ì¦<ü2¼*œ:4Œ.$<¬&¬6$œ.$¬>,Ü®<Ü.
+ Ä‚<Äž<¤2,„*$lä.ÔªL”"”*$¤:44¤*$TÌ¢<ä²4”&Œ*$t<œ*$Œ&LÜª4,¼&ÔŽ|*$Ìž4œ"l&œ2,ì.œ&Ü®4Ä*¤&D$
+ Ô¦<|"¬&¬6,¬>4Ü®D\ù[¸tEXtSoftwaregif2png 2.4.2£^GùIDATxÚí•íOAÆhM¤Òb·T�7{=ƒ6JäR
 GÜT(·e� ÇZ‚á¦`ZC±T“¶fm°šTÂë,ýÖà£1L¿þž™yng¦MM7ñ�Fksv$ôc{Ì˜j½=Ù¼r·d##Yz½´Õw?µ8ÒÒáóIRg§„ñ©Ñ³4z>›
]à>)/Ø(a„ƒÁæÉ†üÃ�û™ }R\’°TÂðC(XœmÀß»?ÖQá¥6ð©,_D(Ù †ÛÝq�ûÎK�­–…@Q>×åów*íAüæ'p©T*Ëe”PÊ—z³|PÆ²†‹qh¡pQ%}X§)Ã]ÉWdš»ñ`•»EÎÚ“‹YÀ;
)�¡‚,£ *%ãÅE»�KŸªƒkâ¹òà×Š?«"{2© šèzGéíšOk´_½"4¯¦4ÿ§¡LÆžqµwbÝblç Z°–•¼�æ
´ÌY,fIqYÄZ Ôù¤Z°1.hÁC‰éŽ��Þe2½f¤žF°Èï÷j‚×ìWŽœ9,‹l´olPUß«i)‚5¯òûØ3ÄNr.‡ÃA,×¾Å™î©ü„
+ š0óŽÉqŽ€�Üq8Æ­ñ}OÕ˜Î÷àçšè'0ËdH.'wï[ãï9ûö»Z°µ„1Œ?š(¢Õ0ã@ÙeŒ™»ÜÆÛæ¦k^úqPð0�I%Œ(eT§Lµq[”ó”§v–âAX/Ð¢¢„H†˜n‚ÄäQµw½ÎúôÀôˆù¤J"Ìƒv gýžzû0(ò'`4�v	\5uÝüÕÝBÝ
J¢"ð
+ Ì4ÏL�‡9oë=jp3Ši8£”Úv—w »ÙÆ�?™oxe•4bB¢²®þ´jª\åo¿Ï7¾K}3Î´¼�Ùôå¨)Ò¿9_¿ôòï8Åk1®F¹Ú¶9·R¸âVNœN¥tˆÔfïù|á:×»ïè—gtÏ³rÔwóOöÅ_ïLåˆûâ—IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Inform.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Inform.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Inform.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Inform.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3 ----
+ ‰PNG
+ 
+ 
IHDRÞã½�<PLTEÿÿÿ¦¿¢ðôïëñêáéàËÚÉóöóÒßÐÃÔÁ¬Ã¨¼Ï¸+++æíä!.e‹^Œ­†–´‘¸Ìµ�­ˆøÜ&tEXtSoftwaregif2png 2.4.2£^GWIDATxÚmŽÛ€0C©³SñºùÿÿêÑ-jÈiZ""0‰]èÝ!�ähSÐÒš©‹¹u³IZämPïì¨|ürª\‚ô°4ß¼Õ`nvò‰oíÎ +�,åIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/JavaCup.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/JavaCup.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/JavaCup.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/JavaCup.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,4 ----
+ ‰PNG
+ 
+ 
IHDR(-SóPLTEÌÒÜ\Z\ÜÞÜôîô¤ž¬LNLìòôìêìäÞôdbdÜÞìüöüäæôÌÎÜTVTÄÆÔÄÂÔìêüÔÒÔÔÒäŒŽŒäâäÌÊÌd^d„†„ôòôÜâìÔÖä\^\|zŒäâôœšœÜÚìäÞìÜÞäÄÆÌôöüÌÊÜ¬²¼äæì”’œìêôüþüÜÞôäæüÄÆÜäâìÌÊÔ„†ŒÜÚäÄÂÌôòüìîôÜâô¼¾ÄÔÖìäâüüúü·Ì6tEXtSoftwaregif2png 2.4.2£^G¦IDATxÚ�Ì_‚0‡áH1íDZÉúF/´!ä1Ë–Ú¾ÿ§iB-èªsuxøñü9òø=G?û»ËoÆt,qÔ4ßÆFéAœôÝc•fê
þ8Ýçìà}Oës•s¯4@ž«<ŽA˜(‡(Š€'Xt‰“
ús¸
+ ’Y6YÔuQ€nR$" ·¥ ÕC\‡²m¨éÒ¶/	†¡ÔÕÔ‘3¸óÿ	IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/JavaCupLarge.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/JavaCupLarge.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/JavaCupLarge.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/JavaCupLarge.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,15 ----
+ ‰PNG
+ 
+ 
IHDR‚YÅ$#[PLTE<><œ¢¬ÌÒÜlr|äêìŒŠŒäÞäÌÆÌ´®¼\Z\ÜÞÜ”–”ÄÆÄôöô„‚„ÜÖÜ¬®¬Ä¾Ä|~|dfd¬¦¬ôîôäæäÌÎÌ¤ž¬LNLÔÚä|z|”’”œš¬ÌÒäìòôœ¢´ìêìüþôlr„¼ºÌŒŠœœžœlnl\V\äÞôdbdÜÞìüöü„†”ÜÖìäæôÌÎÜTVTÌÆÜ´®ÄÄÆÔÄÂÔljtìêü¤¢¤ÔÒÔ¼º¼¬ª¼TR\´¶ÄÔÒäDFDtrtŒŽŒäâäÌÊÌd^d”–¤ôúô„†„ÜÚÜ¬®¼ÄÂÄ|~Œlfl¬ª¬ôòô¤¢´ìîìtr„”ŽœÜâììæôÔÎÜÄÊÔ¤¦¤ÔÖÔ¼¾¼ÔÖääêü´²´\^\ÜâäìæìÔÎÔTRT|zŒ¼ÂÔ”’¤œž¬¼¾ÌŒŽœäâôdbtœšœüúôŒ†”ÜÚì´²Ä¼¶Ätvt|‚”¤¦´tv„DBDäêôŒŠ”äÞìÌÆÔÜÞä”–œÄÆÌôöüLJLln|ÌÊÜìîü”š¤¬²¼ljl„‚ŒÜÖä¬®´Ä¾Ìdfl¬¦´ôîüäæìÌÎÔLNTÔÚì|z„¼ÂÌ”’œ´¶¼ìêôüþüdblÜÞôäæüÌÎäTV\ÄÆÜÄÂÜlj|¤¢¬ÔÒÜ¼ºÄTRd´¶ÌÔÒìŒŽ”äâìÌÊÔôúü„†ŒÜÚäÄÂÌ|~”¬ª´ôòüìîôÜâôìæüÔÎäÄÊÜ¤¦¬ÔÖÜ¼¾ÄÔÖì´²¼\^dœž´¼¾Ôäâüœš¤üúüÜÚô´²Ìtv|¤¦¼tvŒÏ"ÖtEXtSoftwaregif2png 2.4.2£^G3IDATxÚíZ�sÛæyO´›ìAÝ-,¤J;]Ã"õlï!¨‘ãèT°>œ™v2T5E—ÁÛZZ›ƒxs&Sœ ‚�ÂÙ‘tSí€n†V´Á`”Ê”’“qê¶?k@QÖGÒ829ßí
+ �à+Âó{Ï7€ç
+ Ï|yî÷þÿBÀŸ=ãÙCøÖ3‡`ëø³†�‰]ú?„à8gï>KÏëN« PûlovúÃÅØ4ÞÎ¾Aý�}¸.O—§ŒV±àœ÷8…ócõ_bôK@é•›•§`²Î)aÔØ5t¤n}C„o/îpz¹RÁ[£ˆxèurÌÎbä·]¹o
+ þ¡BÁ·ÇÊéJ¤’m>�ØuB„!˜ÞYÌ/��…B'"Éá=Š ¦+Sá›e§¶ptât(ÔóBápë™è"ˆÙž™Pvx7®<­”™JÅj„Ôg°ç�Ã3ùÜ‘§óôêÜ
�/³å�d¸¼Ú| ¦#É»O³¡óU(Ì`~_AÞeµ3ð¢2pñ|Ái�S‡üC=på7&ÈÙð_˜	ùÏï>g~�e•…Ñ§‰/‰ZOÁéaþ>:13
+ n:#Ì’Gv‡¦Vg—”{,¿:ÚŠÐôŽß?úkÂéœÀNôt:Nô„üþ³»•Ö“/®(,Ë˜Ë­P° Ìb¡ãÜ#øgÞ¼ðO¡3‚¢ïêÎS…VYºô)³æ˜úS?ò“äÌiÒú´@’BÏÄ_n…ì­“Ê:Ï²µ–gW+-IÖ/œÒ/`³'LÀBGS/íŽâáˆÄÖú•Í›ç—©ÖÔ©³ ›œ€8‰aCñ]&cS'ó,{�ŠÙˆ“~Ò?ñÝû�±IPƒRR”%­$§[W5Å'Bþ‰S{ÜÞÏ­®±Jù³©°¢„>é8­�—ÇÎÉ¡ãÇÞ-ŒËÀJ%|¥uµ#°€�î«U(üƒw+KJY™
+ ‡•{JD)? ZÁó@ˆ’Øù=¥$0®¯
¸”Ë
+ ³RZ™ª\x£%,¸Ÿ?ÞÃ¯Ýý�eVxXú{?-­”nþ¦½eŠ	dèÈ^Ss®ü×O§X$øj´˜ç§îÅZÅ(âä'ûŽüó{7$ŠÕªhT3U!ôükwZÅÂÉ�!7xéiÇ’=ú›4
Œj6	q‰m¯¼f¶BOˆõím*Þ\^ãƒbu¾êÁª¢r;=¸�A`ûRáj³ ùqßž}óåôõ`0ˆó.
¢(&h&­,#Sµå¯êýáê;‚Þ}=êöñ»¾±±¡UÅji††@)Ko‹(ˆ6²f†¥¾:T„…¾‰µ×sd�YË˜þä�ÿxYÜØƒÕ`BÓ4¤á/˜È1ÖdMðšMâÍƒàœ%O�Ge–§Ýyï'ß+nlTÅ„†‚‰ *Ò]»™.ûb¥WÌ3ýy“ÉRMË§Ž>n*Ï;õ>/Ã&øåWïœ¸s\²(j.¨(‰´´ôbéæ¿½‰L1(£ðºÙ<ŽŸmp£½R™fÇç
+ ¢’Gùð�G·Þ~ž¯ÒU$U5‘,‹Rµ(ò_”~õ¹Èóé’ž,7Âá¾¾ãï<Å”�É²e-I¯~÷µ¡^Ÿ„™××+iT“ª´XGJ7×^)P‘0Ëë—›!Ð÷‹Ÿ|”d“+¬„ P[yå×üÁ�Ûó´�P�×‚à¨Ÿ×D‘/•Ò‘ÁïKŽÖÙUµ‰Ñ"ðADGFžííW”¿»ð·?ºÎÓÙê$âk®W&@<Ð ±ŸEJïßøYNQt†±›aøãõ“/8_^Ð
=þîÿüúg?´AûkD˜Q«IØ&ÃDßþÑçPÊ%W�&B¸Ñ‘t��²uÞ°^»ðÞu¥w’.&ÄE�¾AWÁ75IÓˆTj;÷Ó·ÿ=�E[3CÓ0ô4o§ˆðËö=©WB½±Q„™ƒø¢˜Ü‘H‹Šò«ÿ~ù‡%–_qš'¶otÞYC•R««.€¢V…é»ªð ‘Æ,…û�ÇxÉln€BÛ…oK�7@.A-¢ 'R•©Bz‘-ýöíšiî«¸Ÿ¢‚~:©óýiè.ºPÕ$@ ÁÇ�5)èS€±É–ÒŸ‡y£™,tc˜Ð€pñbXJ�pFÑðX3 ˆ É"‹U~I\˜k"çpHh@ ôJ["(m@jÔ�XMµQIV¡ ¢Œ„ uo..…§dgoè´vt
+ �Â6t›k	`‚‹DJ$Á²én�“¦Ý]àž¢ØÏ¼µ÷QqžB£�!FXZaâ›Ú&ÌmnJ›Ö*R-™e<‚–˜Õ=U“þ ÑzD£!Õõ�}<ÌÐ•«¡jx¯¯Z&Z�	,Ž.•‘¼‹K+þèÛ—æÁ)t
�p–’hQÔ6«hSÒ$¨Û�-[É€¿2yš@®q,UÄw"5Ya®ýçµ5ëË!8_ÛG€-�˜7äÂ÷´ �0<.yxô#Ï2$€+Ã¬>†@‰|F™ºøGƒ�îvQ; 8O ¿agrÂ;U
×y¢Í-s¬ƒn¢L@€KÀ¦ú™Â«�ËS†”‘Ì�ôw*¯<¤v³à£&ÿ5°àï©—îË™ª+&*yþ—Ñ`#I[À4@Ä®¥ÛÆÿNó¼ˆ$åú«}—-|“‡Ò?áýCüœ–�øÒ¥†P—	0×`åû‘HiZ¼�Ì6HÈ›ÈÐtþ;ïg¾Â#vÄŒ‚Ãq>j?¸NÌÿzO‡;*¯¹"ƒP+¢zTàûÓß‚„ÄOÿ¦¸!jm|ã�U@Ÿ�ÒÈB7â÷w@¸|h„sFF�qÔ¥C]øØãö˜ÍÉ{Ú�Fú{¼{ñcru¦:ž³rP®Iæb-/Á·æ��ÞUÄCšªOMæá\ÐÊ¥�ÚéèŽÅF::bÝÝ##0~ŒA¶	‚°qKÞÁ'øÉW‰ |ž7¥L‘*8Qm+B.J¤k·«s(‚›:ßðÙ´çä¨×½´SÎ¥x7¬±X*u¨;Õ�Â·R¶jê˜ªÚø6’œ=]¿ÓS^6Ù6¨b=ˆºÉ!ƒ<ÉApÌ » y ^5®ÈõÊ–¬Ö¹º×|ÜXW<Õ‹ïj½(‚ÀmÛÆÝOç,pR8QWD!°öQ¯Î˜<ä� kˆÁ„
%LeîÍZZlcó5CÉn‡Y·,KýÊL	Ð|]±îÔå�Ê—qbWmuN�zX8NXŸ�èÜ
+ õÿ²œç™d!/îÖD"ìc{YF*¯Žo_Qf­€ýÝÉÚ×L¸aËiØ¤å5ØjÎÛ‚VÖýþ=v
+ çÈåµ
+ “ä¡opÃC¦.¨O½_€Àä™Ê‚ø8CP½¿“…†º€‰Ø%Î©{‚c�¶­âQ<êéÃ¶Ï�³ØÃ±Ë—âùø|öá¹eÝ�xäK¦”5PÐƒ�¼@‰LžÑÃ�9J–,+ ~}Éâ—a¦Áq O4læl·Á)±‡œMÌ8bd+çÒLžÏ{
8‡§I‚=n¼4óÒtÚØù°ŒJ<	Þ™]©Ñîø'û¸ÈöÖœ]7Lì—Cþ??qõ2¯ªzY‡Ù
LŒÎz‚î­¿¼›:¥ÞòrxWe`ê“n>lb„ó†u‡¨ƒÀíu’\_Æ9ä€ÊMš« ÑD’„_œ¯åùšé¦#>¬ðæNëÌ[s²ú¤µ£�èu`[N‰»
+ állý/n�‚xáá±-ÙRù¤.&¯3,ðaæ{y@!ËäÙ¤¡Âv‡-Ì‰�'fÁ‹D¬{!>æpø˜êé"îÉýÀëÌCZx 9Ûšäža§`ƒ7{ó<Û¯³¬ÉJó<›ËA÷8,(GåäoÐG8>"Þëí"87:¨`†'é¿už<9Îær\ŒÛ95SNŸ»VJòº0ßet>››ËfÔBÉ‡æƒã9›úfE<7’º‹eqß˜Ê�HÎ"naä­�,Õ•í® 0r;ªéÊ@dPYmKVÒ†eiË§)ËÌçæh^—r%Gù4ž‹"ç›örW–Âs
Àñ€¼uæïq[ÔÜ¸eYÕDÖ¢ÙÌE!1ÙœªÊÐÒäæ¶¬0�4‘˜§­´2NW*[ˆÛ\€#ì@é_o·92hÀ]9+€Ë9+�—¤þ4$!« ÐÑO5Ë+•mJEF4JCÚ¨´¨ªHtÖM9ó«©ØB—Áù|Äðúëëgñ€j[�º*æ80É\”E›üMËæhK�í¨W:®Ç$T&ÍMªFÂrî´¡sºâ±+]>,øp`Wg¾s ¨-#ÕÕ–m™¯‰ýºX�W½[s“)áÖöb€’Ÿ¦§tˆÔ¨ƒÈÙ³¸—Õ-ðyÕ0•ÁKHb³†%Vú5ö³Á2gû¦ÅAIeY¹Éœì4¡­%R±ÑÔY€0ì¸îÁáœŒ¬Y¾{ýZ…5Ã@Kn.�JÌ‡?	[°žœ.ÌÉN“î¾âÝíÂ¬ß»ïÜ—ïË”O¦8zê£ÁäREï½rß‘Á	$‰Ì¹ŠáuÎ}ïÓ¼æþêÈAxýÇ»ZÇ._»©³™^ƒp�Q	™ãèØàê4zÁŒêØû¨VÆWõ¬!6w¿�	e3«ú·ž 3zšwÜvÝY'Ìù=¯Ð8÷Ud·èimaû�g×Ì}ó}²'Æ¿ýÖ]þç#5AÓeÝIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Question.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Question.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Question.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Question.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3 ----
+ ‰PNG
+ 
+ 
IHDRÞã½�<PLTEÿÿÿ¦¿¢ðôïëñêáéàËÚÉóöóÒßÐÃÔÁ¬Ã¨¼Ï¸+++æíä!.e‹^Œ­†–´‘¸Ìµ�­ˆøÜ&tEXtSoftwaregif2png 2.4.2£^GWIDATxÚmŽÛ€0C©³SñºùÿÿêÑ-jÈiZ""0‰]èÝ!�ähSÐÒš©‹¹u³IZämPïì¨|ürª\‚ô°4ß¼Õ`nvò‰oíÎ +�,åIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/README gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/README
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/README	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/README	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ Images required by Basic Look and Feel
+ 
+ Information based on images from Swing 1.1.1b2
+ JavaCup.gif - a picture of the steaming cup of Java - 16x16 - 3 colors
+ 
+ TreeOpen.gif - a picture of an open file folder - 16x13 - 8 colors
+ TreeClosed.gif - a picture of a closed file folder - 16x13 - 7 colors
+ TreeLeaf.gif - a picture of a small circle with points in four 
+ 		directions - 16x13 - 2 colors
+ 
+ Information on images used by Gtk Look and Feel, really need to work the
+ number of colors down I think.
+ 
+ JavaCup.gif - a picture of Classpath's mascot - 16x16 - 58 colors
+ 
+ TreeOpen.gif - taken from Gnome File Manager - 16x12 - 34 colors
+ TreeClosed.gif - taken from Gnome File Manager 14x12 - 28 colors
+ TreeLeaf.gif - a blank gif - 16x12 - 1 color
+ 
+ Error.gif - think this will be needed later (taken from gnome)
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeClosed.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeClosed.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeClosed.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeClosed.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,5 ----
+ ‰PNG
+ 
+ 
IHDRe^|è¨PLTEÿÿÿXTHidTtm\€wd�†k�†mž“wŸ–y¥š|ª ¯¥†³©ˆ½±�Àµ‘Ä¸“Å¹–ËÀ¡ÌÄ¯×ÓÈÛÍ¥ßÔ°âØ¹æÜÃêäÐîêÜñìàVaIštRNS@æØftEXtSoftwaregif2png 2.4.2£^GjIDATxÚ=ŽÁ
+ € D÷ÒAPÈ‹H$[
+ ¢šÿÿ³V­fØÃãÍa‰úöìFßæu„ë¸¥×½¬i!ñ–;ÅÀVð,…‚ùld¡ _[hètµcq�SÅVrÎfÜ�5NN+Õ þø…W¾”tyJIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeLeaf-normal.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeLeaf-normal.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeLeaf-normal.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeLeaf-normal.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,7 ----
+ ‰PNG
+ 
+ 
IHDR #Â0øh PLTE%%%&&&''')))***444777888BBBMMLMMMPPPRRRSSSZZY\\\]]]aaabbadddkkkoooppprrrtttwwwxxxzzz{{{}}|}}}€€€‚‚�†††‡‡†‡‡‡ˆˆˆ‹‹‹ŒŒŒ���ŽŽŽ��Ž������’’’”””–––˜˜—˜˜˜™™˜™™™œœœ��œ���žž�žžžŸŸŸ  Ÿ   ¢¢¡¢¢¢£££¤¤£¤¤¤¥¥¥¦¦¥§§¦§§§¨¨§¨¨¨ªª©ªªª«««¬¬«¬¬¬­­¬­­­®®­®®®¯¯®¯¯¯°°¯°°°±±°±±±²²±²²²³³²³³³´´³´´´µµ´µµµ¶¶µ¶¶¶··¶···¸¸·¸¸¸¹¹¸¹¹¹ºº¹ººº»»º»»»¼¼¼½½¼½½½¾¾¾¿¿¾¿¿¿ÀÀ¿ÀÀÀÁÁÀÂÂÁÂÂÂÃÃÂÃÃÃÄÄÄÅÅÅÆÆÅÆÆÆÇÇÆÇÇÇÈÈÇÈÈÈÉÉÈÉÉÉÊÊÉÊÊÊËËÊËËËÌÌËÌÌÌÍÍÌÍÍÍÎÎÍÎÎÎÏÏÏÐÐÏÐÐÐÑÑÐÑÑÑÒÒÑÒÒÒÓÓÓÔÔÓÔÔÔÕÕÕÖÖÕÖÖÖ××Ö×××ØØ×ØØØÙÙØÙÙÙÚÚÚÛÛÚÛÛÛÜÜÜÝÝÜÝÝÝÞÞÞßßÞßßßààßàààááàáááââáâââãããääãäääååäåååææåæææçççèèçèèèéééêêêëëëììëìììíííîîîïïîðððññðñññòòòóóòóóóôôôõõõööö÷÷ö÷÷÷øøøùùùúúúûûúûûûüüüýýýþþþÿÿÿ_b#tEXtSoftwaregif2png 2.4.2£^GëIDATxÚc¸�Px˜Ò&&¸¥C˜±*````ä³ÉJIŒ�c@WÀÀÀÎ®èV˜ŸŸ�‘’i‹®€Ó9$<¾   /'3=916*ŠUÃ|
C· Äô¬ŒŒ´”¤øèèHd‹¶é(êº…%$§&&Ç%ÄDEEF² )`ðØ°v¢´º½oD\\\l,P>*"JŸ¡€káæ
ó%U,�ü#¢@ 22<22Šá¹°=òâ²J¦v®~áÑ1Qa‘Ñ±pW00(ÈHIÊ)«Z88FDÄÆÅFGDDÅ%$±Âˆê¨©©«[¹øD&$¥¤¥ÄGÇÆi#˜¸Ílõ,t¬ã’Ò³3�^MIIÏÌÌÎå‡)`J
+ öróô�KÉ)*)+-.†XAQa¡9Ì›å9II	)ÙÅ5U5uu55åååee0e�ÕeEEUÍ-m]í­-Í��
µµ5•ÁP1S»[[êÚ{û'Ož:iB_w'PUKC}­D�ÄŠ…³¦NŸ>kö¼yóæÌ™5kÚ”I½Ý@5M
lÐ¸ØµeíŠ+–­Xµrù²%Î›5}Ê$�9-®ØµmóÆ
Ö­[·fÍÊ%çÍ™1}Ò„žöAˆ‚Þ3'ŽØ³kÇÖ­[7Õ­Y¹¤dêÄžŽh°ÍKçN;rðÀ¾}»wíÜ¾uãºÕË/©èít'qžW.ž=yâè‘ÃØ»¤bÅ’sgN�Øb	VÀ°öæµËÏ�>yâØÑÃ÷íÚ¶	¤bá¼™Vì�$Wrçö
 ’ógNŸZµo×öÍë×¬XÅÁÀM´"÷îÞ½yý
+ HÉ©ãâ�Ò@pœ÷ïÝ»sëú•K@'ŽÚ¿È›
+  
+ ª@äÝÛ7®‚U´Û0 °íûP×._ðB‘f@Î€woÏ°ÀÐ|aÇÎ@aTI$½"÷w–icH")`À*‰œý±É�41wjm¹‹QIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeLeaf.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeLeaf.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeLeaf.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeLeaf.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3 ----
+ ‰PNG
+ 
+ 
IHDRãqÜö PLTEÿÿÿ888PPPZZY]]]bbawwwxxx}}}†††‡‡‡ˆˆˆŒŒŒ���’’’–––˜˜—™™˜žžžŸŸŸ  Ÿ   ¢¢¡¢¢¢¤¤£§§¦¨¨§¨¨¨ªªª«««¬¬«¬¬¬­­¬­­­®®­®®®¯¯®¯¯¯°°¯°°°±±±²²²³³³´´³´´´¶¶µ¸¸·¸¸¸¹¹¸¹¹¹ºº¹»»»¿¿¾¿¿¿ÀÀ¿ÂÂÂÃÃÂÃÃÃÄÄÄÅÅÅÆÆÅÇÇÆÈÈÈÉÉÈÉÉÉÌÌËÍÍÍÎÎÍÎÎÎÏÏÏÐÐÐÑÑÐÑÑÑÒÒÒÓÓÓÔÔÔÖÖÕÖÖÖÚÚÚÛÛÚÛÛÛÜÜÜÝÝÝÞÞÞßßÞßßßáááâââãããäääåååæææçççèèèéééêêêììëìììîîîïïîðððóóóôôôööö÷÷÷ùùùúúúýýý¼ˆztRNS@æØftEXtSoftwaregif2png 2.4.2£^GÛIDATxÚc`€�û(à¾I3‚Ãî–Ÿ�gãÏ7JÏHKŠŽ„jòX+m¡Q¿G^ÖÔ5<:*,2¬ä¾Žšº•OBJJt|ŠXI’—ghJQYqAAQ!XIYuQQs[GkscmM0H@báÔé³çÍ™5mRwkÈ�Ã»6oX·nÍ’y3&õ´€.�:r`ß®íW/ž3µ×(²öÚÅÓ'ŽÜµiõ’yV cEîÞ¼rñÌñƒ»6Çß¿âÍ»7.�9asÿ>DîÎ¸�ÄÙ©�à?Of,"<IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeOpen.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeOpen.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeOpen.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/TreeOpen.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,5 ----
+ ‰PNG
+ 
+ 
IHDR\9Í³fPLTEÿÿÿ51(555SOBVPA[VH`ZHe^OqjVriOƒy[Š‚j�†k�†m—Œi˜�r›‘t¥š|ª ¬¡�­¢‚³¥}³«’À·žÄ¸“ÔÄ”×ÈœÜÐªÜ×ÆâÙ»åÛÀèàÉêäÐE¸ÈtRNS@æØftEXtSoftwaregif2png 2.4.2£^GaIDATxÚMŽ×€ cï+Øðþÿ'%
+ »O¹I#2À@�B
+ /ÁP³€kÄÒOlWõUŽo�%
.½;g&¸·YY'<r¸Z•à ÔãŸ â3áùÏï]¬së´�xÐIÑ±q	çìIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Warn.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Warn.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Warn.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/Warn.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,8 ----
+ ‰PNG
+ 
+ 
IHDR00`Ü	µ×PLTEÄz,„Ä&¤"D”2,Äž4¤2$Ôª,„*ä*´"ÔªDd"””*Ô¢4¤:,4Ô*¤*LÌ¢4ä®$ô2´*t&$”&Œ:4Œ*tÜ²<<¬"¬2$Ü²4œ*¬:,„&Ä.DÜª,ì2¼"Ü*¬*\Ì†$Ì*œ2$ì.œÜ¦4Ì¦Dœ&Œ.,|Ü®,Ä*¤&¤6,„.$l$
+ ´&l"”.$Ô¦4¤>44¤.$Ì¦<ü2¼*œ:4Œ.$<¬&¬6$œ.$¬>,Ü®<Ü.
+ Ä‚<Äž<¤2,„*$lä.ÔªL”"”*$¤:44¤*$TÌ¢<ä²4”&Œ*$t<œ*$Œ&LÜª4,¼&ÔŽ|*$Ìž4œ"l&œ2,ì.œ&Ü®4Ä*¤&D$
+ Ô¦<|"¬&¬6,¬>4Ü®D\ù[¸tEXtSoftwaregif2png 2.4.2£^GùIDATxÚí•íOAÆhM¤Òb·T�7{=ƒ6JäR
 GÜT(·e� ÇZ‚á¦`ZC±T“¶fm°šTÂë,ýÖà£1L¿þž™yng¦MM7ñ�Fksv$ôc{Ì˜j½=Ù¼r·d##Yz½´Õw?µ8ÒÒáóIRg§„ñ©Ñ³4z>›
]à>)/Ø(a„ƒÁæÉ†üÃ�û™ }R\’°TÂðC(XœmÀß»?ÖQá¥6ð©,_D(Ù †ÛÝq�ûÎK�­–…@Q>×åów*íAüæ'p©T*Ëe”PÊ—z³|PÆ²†‹qh¡pQ%}X§)Ã]ÉWdš»ñ`•»EÎÚ“‹YÀ;
)�¡‚,£ *%ãÅE»�KŸªƒkâ¹òà×Š?«"{2© šèzGéíšOk´_½"4¯¦4ÿ§¡LÆžqµwbÝblç Z°–•¼�æ
´ÌY,fIqYÄZ Ôù¤Z°1.hÁC‰éŽ��Þe2½f¤žF°Èï÷j‚×ìWŽœ9,‹l´olPUß«i)‚5¯òûØ3ÄNr.‡ÃA,×¾Å™î©ü„
+ š0óŽÉqŽ€�Üq8Æ­ñ}OÕ˜Î÷àçšè'0ËdH.'wï[ãï9ûö»Z°µ„1Œ?š(¢Õ0ã@ÙeŒ™»ÜÆÛæ¦k^úqPð0�I%Œ(eT§Lµq[”ó”§v–âAX/Ð¢¢„H†˜n‚ÄäQµw½ÎúôÀôˆù¤J"Ìƒv gýžzû0(ò'`4�v	\5uÝüÕÝBÝ
J¢"ð
+ Ì4ÏL�‡9oë=jp3Ši8£”Úv—w »ÙÆ�?™oxe•4bB¢²®þ´jª\åo¿Ï7¾K}3Î´¼�Ùôå¨)Ò¿9_¿ôòï8Åk1®F¹Ú¶9·R¸âVNœN¥tˆÔfïù|á:×»ïè—gtÏ³rÔwóOöÅ_ïLåˆûâ—IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/file-folders.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/file-folders.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/file-folders.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/file-folders.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,5 ----
+ ‰PNG
+ 
+ 
IHDRRkÓ‡%Ì¨PLTE51(555SOBVPAXTH[VH`ZHe^OidTqjVriOtm\€wdƒy[Š‚j�†k�†m–––—Œi˜�r›‘tž“wŸ–y¥š|ª ¬¡�­¢‚¯¥†³¥}³©ˆ³«’½±�Àµ‘À·žÄ¸“Å¹–ËÀ¡ÌÄ¯ÔÄ”ÖÖÖ×Èœ×ÓÈÛÍ¥ÜÐªÜ×ÆßÔ°âØ¹âÙ»åÛÀæÜÃèàÉêäÐîêÜñìàÿÿÿ;úL.tEXtSoftwaregif2png 2.4.2£^G<IDATxÚí™	SÂ0…Ÿˆ
+ b«*¨X<Q9òÿÿ™-=hl6	3“Í0-Lûú²É~¤-Ø$‰pbb!`“LÔB’ÿKÆ™•$“\Úv\ŒX2L¡£À"tØ‚Ïõ¬¦—q t¥¤’ÜºË$)V’Ej‹ß£~Ô‡P4Iá4\�'�»Œ­ä]ç&i—íNû´T«%K“ìh/0•L»˜öß³÷¼¡~Ú|PºÄüe8Îê‡.$>rÅñÜHÖf×…&öA«ƒ
ó²öUôüf’ÒÏÃ‹¼Q«hSA–aõ¯HD¯æwI¡j—9QÑ•J—29aë‹ŸeÜËç×éSA­ô œ\T—Óè-i�£AdÅ›éå{Z.‘Èöç+ÅQ¬8hˆ)Tu%e—£(V4Í%¹\ÎsÅÛ^Ó�Ëû•Ç^·!æÒØeªØí
iÄÍ\~¶‚V7þ4�8ª*9=/w”—OqÅK¸à%CiSÎ�/…�^$uyIq©ÉK—›xiîRÍKnÄiÄ=/=/Ýó²ª¼4’ü›—)¨Š²‘.`ÂËõÂÚ’¼t³¾DÞs8\_fƒÑ]
+ ¼är)�¾/ù×”ô¼ô¼ô¼”«ôê©æ¥‰ˆ¼tx?Î ÝqÊú’1ç¼ÔÍ%…—ð¼ô¼Ü>/uÞüŸ_ê¼ù1�,¯Æ”¼„â6œ ©â%í™ÿæ§úù¥±KŽ—iV-$•¼dTI&¸”xIÌ¥0/•¼Ìÿ `öÄÚór·xùÃƒ&ÀÒOÅ8IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/slider.png gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/slider.png
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/slider.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/plaf/gtk/icons/slider.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3 ----
+ ‰PNG
+ 
+ 
IHDR!˜l»PLTEˆˆˆ–––ÃÃÃÖÖÖýýýÿÿÿ×B3ítEXtSoftwaregif2png 2.4.2£^G7IDATxÚcDè@ 
ER\PBÄIB!‰¤ÐJÄ
ID	0`ó…1*0`
E­�4 ¢¶ûsIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/package.html gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/package.html
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,50 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.swing.text.html package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - javax.swing.text.html</title></head>
+ 
+ <body>
+ <p> Provides supporting classes for web browsers,
+  web robots, web page content analysers, web editors and
+  other applications applications working with Hypertext
+  Markup Language (HTML).
+ </p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/HTML_401F.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/HTML_401F.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/HTML_401F.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/HTML_401F.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,3729 ----
+ /* HTML_401F.java -- HTML 4.01 FRAMESET DTD java conception.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser;
+ 
+ import gnu.javax.swing.text.html.parser.models.PCDATAonly_model;
+ import gnu.javax.swing.text.html.parser.models.TableRowContentModel;
+ import gnu.javax.swing.text.html.parser.models.noTagModel;
+ 
+ import java.io.IOException;
+ import java.io.Serializable;
+ 
+ import javax.swing.text.html.parser.*;
+ import javax.swing.text.html.parser.ContentModel;
+ import javax.swing.text.html.parser.DTDConstants;
+ 
+ /**
+  * This class represents the java implementation of the HTML 4.01
+  * ( -//W3C//DTD HTML 4.01 Frameset//EN ) Frameset version. The
+  * Frameset version includes as recommended, as obsoleted features and
+  * also the frameset support. This the default DTD to parse HTML
+  * documents in this implementation, containing 315 pre-defined general
+  * entities and 92 elements.
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class HTML_401F
+   extends gnuDTD
+   implements DTDConstants, Serializable
+ {
+    private static final long serialVersionUID = 1;
+ 
+    /**
+     * The standard name of this DTD,
+     * '-//W3C//DTD HTML 4.01 Frameset//EN'
+     */
+    public static final String DTD_NAME = "-//W3C//DTD HTML 4.01 Frameset//EN";
+ 
+    /**
+     * The integer representing length in pixels.
+     */
+     static final int PIXELS = NUMBER;
+ 
+     static final String[] NONE = new String[0];
+ 
+   /* Define the HTML tags. */
+     static final String PCDATA = "#pcdata";
+     static final String A = "a";
+     static final String ABBR = "abbr";
+     static final String ACRONYM = "acronym";
+     static final String ADDRESS = "address";
+     static final String APPLET = "applet";
+     static final String AREA = "area";
+     static final String B = "b";
+     static final String BASE = "base";
+     static final String BASEFONT = "basefont";
+     static final String BDO = "bdo";
+     static final String BIG = "big";
+     static final String BLOCKQUOTE = "blockquote";
+     static final String BODY = "body";
+     static final String BR = "br";
+     static final String BUTTON = "button";
+     static final String CAPTION = "caption";
+     static final String CENTER = "center";
+     static final String CITE = "cite";
+     static final String CODE = "code";
+     static final String COL = "col";
+     static final String COLGROUP = "colgroup";
+     static final String DEFAULTS = "default";
+     static final String DD = "dd";
+     static final String DEL = "del";
+     static final String DFN = "dfn";
+     static final String DIR = "dir";
+     static final String DIV = "div";
+     static final String DL = "dl";
+     static final String DT = "dt";
+     static final String EM = "em";
+     static final String FIELDSET = "fieldset";
+     static final String FONT = "font";
+     static final String FORM = "form";
+     static final String FRAME = "frame";
+     static final String FRAMESET = "frameset";
+     static final String H1 = "h1";
+     static final String H2 = "h2";
+     static final String H3 = "h3";
+     static final String H4 = "h4";
+     static final String H5 = "h5";
+     static final String H6 = "h6";
+     static final String HEAD = "head";
+     static final String HR = "hr";
+     static final String HTML = "html";
+     static final String I = "i";
+     static final String IFRAME = "iframe";
+     static final String IMG = "img";
+     static final String INPUT = "input";
+     static final String INS = "ins";
+     static final String ISINDEX = "isindex";
+     static final String KBD = "kbd";
+     static final String LABEL = "label";
+     static final String LEGEND = "legend";
+     static final String LI = "li";
+     static final String LINK = "link";
+     static final String MAP = "map";
+     static final String MENU = "menu";
+     static final String META = "meta";
+     static final String NOFRAMES = "noframes";
+     static final String NOSCRIPT = "noscript";
+     static final String NONES    = "none";
+     static final String sNAME    = "name";
+     static final String OBJECT = "object";
+     static final String OL = "ol";
+     static final String OPTGROUP = "optgroup";
+     static final String OPTION = "option";
+     static final String P = "p";
+     static final String PARAM = "param";
+     static final String PRE = "pre";
+     static final String Q = "q";
+     static final String S = "s";
+     static final String SAMP = "samp";
+     static final String SCRIPT = "script";
+     static final String SELECT = "select";
+     static final String SMALL = "small";
+     static final String SPAN = "span";
+     static final String STRIKE = "strike";
+     static final String STRONG = "strong";
+     static final String STYLE = "style";
+     static final String SUB = "sub";
+     static final String SUP = "sup";
+     static final String TABLE = "table";
+     static final String TBODY = "tbody";
+     static final String TD = "td";
+     static final String TEXTAREA = "textarea";
+     static final String TFOOT = "tfoot";
+     static final String TH = "th";
+     static final String THEAD = "thead";
+     static final String TITLE = "title";
+     static final String TR = "tr";
+     static final String TT = "tt";
+     static final String U = "u";
+     static final String UL = "ul";
+     static final String VAR = "var";
+ 
+   /* Define the attribute constants. */
+     static final String C_0 = "0";
+     static final String C_1 = "1";
+     static final String CHECKBOX = "checkbox";
+     static final String DATA = "data";
+     static final String FILE = "file";
+     static final String GET = "get";
+     static final String HIDDEN = "hidden";
+     static final String IMAGE = "image";
+     static final String PASSWORD = "password";
+     static final String POST = "post";
+     static final String RADIO = "radio";
+     static final String REF = "ref";
+     static final String RESET = "reset";
+     static final String SUBMIT = "submit";
+     static final String TEXT = "text";
+     static final String ABOVE = "above";
+     static final String ACCEPT = "accept";
+     static final String ACCEPTCHARSET = "accept-charset";
+     static final String ACCESSKEY = "accesskey";
+     static final String ACTION = "action";
+     static final String ALIGN = "align";
+     static final String ALINK = "alink";
+     static final String ALL = "all";
+     static final String ALT = "alt";
+     static final String APPLICATION_X_WWW_FORM_URLENCODED
+      = "application/x-www-form-urlencoded";
+     static final String ARCHIVE = "archive";
+     static final String AUTO = "auto";
+     static final String AXIS = "axis";
+     static final String BACKGROUND = "background";
+     static final String BASELINE = "baseline";
+     static final String BELOW = "below";
+     static final String BGCOLOR = "bgcolor";
+     static final String BORDER = "border";
+     static final String BOTTOM = "bottom";
+     static final String BOX = "box";
+     static final String CELLPADDING = "cellpadding";
+     static final String CELLSPACING = "cellspacing";
+     static final String CHAR = "char";
+     static final String CHAROFF = "charoff";
+     static final String CHARSET = "charset";
+     static final String CHECKED = "checked";
+     static final String CIRCLE = "circle";
+     static final String CLASS = "class";
+     static final String CLASSID = "classid";
+     static final String CLEAR = "clear";
+     static final String CODEBASE = "codebase";
+     static final String CODETYPE = "codetype";
+     static final String COLOR = "color";
+     static final String COLS = "cols";
+     static final String COLSPAN = "colspan";
+     static final String COMPACT = "compact";
+     static final String CONTENT = "content";
+     static final String COORDS = "coords";
+     static final String DATAPAGESIZE = "datapagesize";
+     static final String DATETIME = "datetime";
+     static final String DECLARE = "declare";
+     static final String DEFER = "defer";
+     static final String DISABLED = "disabled";
+     static final String DISC = "disc";
+     static final String ENCTYPE = "enctype";
+     static final String EVENT = "event";
+     static final String FACE = "face";
+     static final String FOR = "for";
+     static final String FRAMEBORDER = "frameborder";
+     static final String GROUPS = "groups";
+     static final String HEADERS = "headers";
+     static final String HEIGHT = "height";
+     static final String HREF = "href";
+     static final String HREFLANG = "hreflang";
+     static final String HSIDES = "hsides";
+     static final String HSPACE = "hspace";
+     static final String HTTPEQUIV = "http-equiv";
+     static final String sID = "id";
+     static final String ISMAP = "ismap";
+     static final String JUSTIFY = "justify";
+     static final String LANG = "lang";
+     static final String LANGUAGE = "language";
+     static final String LEFT = "left";
+     static final String LHS = "lhs";
+     static final String LONGDESC = "longdesc";
+     static final String LTR = "ltr";
+     static final String MARGINHEIGHT = "marginheight";
+     static final String MARGINWIDTH = "marginwidth";
+     static final String MAXLENGTH = "maxlength";
+     static final String MEDIA = "media";
+     static final String METHOD = "method";
+     static final String MIDDLE = "middle";
+     static final String MULTIPLE = "multiple";
+     static final String NO = "no";
+     static final String NOHREF = "nohref";
+     static final String NORESIZE = "noresize";
+     static final String NOSHADE = "noshade";
+     static final String NOWRAP = "nowrap";
+     static final String ONBLUR = "onblur";
+     static final String ONCHANGE = "onchange";
+     static final String ONCLICK = "onclick";
+     static final String ONDBLCLICK = "ondblclick";
+     static final String ONFOCUS = "onfocus";
+     static final String ONKEYDOWN = "onkeydown";
+     static final String ONKEYPRESS = "onkeypress";
+     static final String ONKEYUP = "onkeyup";
+     static final String ONLOAD = "onload";
+     static final String ONMOUSEDOWN = "onmousedown";
+     static final String ONMOUSEMOVE = "onmousemove";
+     static final String ONMOUSEOUT = "onmouseout";
+     static final String ONMOUSEOVER = "onmouseover";
+     static final String ONMOUSEUP = "onmouseup";
+     static final String ONRESET = "onreset";
+     static final String ONSELECT = "onselect";
+     static final String ONSUBMIT = "onsubmit";
+     static final String ONUNLOAD = "onunload";
+     static final String POLY = "poly";
+     static final String PROFILE = "profile";
+     static final String PROMPT = "prompt";
+     static final String READONLY = "readonly";
+     static final String RECT = "rect";
+     static final String REL = "rel";
+     static final String REV = "rev";
+     static final String RHS = "rhs";
+     static final String RIGHT = "right";
+     static final String ROW = "row";
+     static final String ROWGROUP = "rowgroup";
+     static final String ROWS = "rows";
+     static final String ROWSPAN = "rowspan";
+     static final String RTL = "rtl";
+     static final String RULES = "rules";
+     static final String SCHEME = "scheme";
+     static final String SCOPE = "scope";
+     static final String SCROLLING = "scrolling";
+     static final String SELECTED = "selected";
+     static final String SHAPE = "shape";
+     static final String SIZE = "size";
+     static final String SQUARE = "square";
+     static final String SRC = "src";
+     static final String STANDBY = "standby";
+     static final String START = "start";
+     static final String SUMMARY = "summary";
+     static final String TABINDEX = "tabindex";
+     static final String TARGET = "target";
+     static final String TOP = "top";
+     static final String TYPE = "type";
+     static final String USEMAP = "usemap";
+     static final String VALIGN = "valign";
+     static final String VALUE = "value";
+     static final String VALUETYPE = "valuetype";
+     static final String VERSION = "version";
+     static final String VLINK = "vlink";
+     static final String VOID = "void";
+     static final String VSIDES = "vsides";
+     static final String VSPACE = "vspace";
+     static final String WIDTH = "width";
+     static final String YES = "yes";
+ 
+     static final String[] BLOCK =
+     new String[] {
+       ADDRESS, BLOCKQUOTE, CENTER, DIR,
+       DIV, DL, FIELDSET, FORM,
+       H1, H2, H3, H4, H5, H6,
+       HR, ISINDEX, MENU, NOFRAMES, NOSCRIPT,
+       OL, P, PRE, TABLE, UL
+     };
+ 
+    /**
+    * Creates this DTD, filling in the entities and attributes data
+    * as defined in -//W3C//DTD HTML 4.01 Frameset//EN.
+    */
+   protected HTML_401F()
+   {
+     super(DTD_NAME);
+     defineEntities();
+     defineElements();
+   }
+ 
+   /**
+    * Either takes the document (by name) from DTD table, or
+    * creates a new instance and registers it in the tabe.
+    * The document is registerd under name "-//W3C//DTD HTML 4.01 Frameset//EN".
+    * @return The new or existing DTD for parsing HTML 4.01 Frameset.
+    */
+   public static DTD getInstance()
+   {
+     try
+       {
+         DTD dtd = getDTD(DTD_NAME);
+         if (dtd == null || dtd.getClass().equals(DTD.class))
+           {
+             dtd = new HTML_401F();
+             putDTDHash(DTD_NAME, dtd);
+           }
+         return dtd;
+       }
+     catch (IOException ex)
+       {
+         throw new Error("This should never happen. Report the bug.", ex);
+       }
+   }
+ 
+   /**
+    * Define all elements of this DTD.
+    */
+   protected void defineElements()
+   {
+     /* Define the elements. */
+       defElement(PCDATA, 0, false, false, null, NONE, NONE,
+         new AttributeList[ 0 ]);
+ 
+       defElement(A, 0, false, false, null,
+       new String[] {
+         A
+       }
+       ,
+       new String[] {
+         PCDATA, ABBR, ACRONYM, APPLET,
+         B, BASEFONT, BDO, BIG, BR,
+         BUTTON, CITE, CODE, DFN, EM,
+         FONT, I, IFRAME, IMG, INPUT,
+         KBD, LABEL, MAP, OBJECT, Q,
+         S, SAMP, SCRIPT, SELECT, SMALL,
+         SPAN, STRIKE, STRONG, SUB, SUP,
+         TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(CHARSET, null, null, 0, IMPLIED),
+         attr(TYPE, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(HREF, null, null, 0, IMPLIED),
+         attr(HREFLANG, null, null, 0, IMPLIED),
+         attr(TARGET, null, null, 0, IMPLIED),
+         attr(REL, null, null, 0, IMPLIED),
+         attr(REV, null, null, 0, IMPLIED),
+         attr(ACCESSKEY, null, null, 0, IMPLIED),
+         attr(SHAPE, RECT,  new String[] { RECT, CIRCLE, POLY,  DEFAULTS },
+           0, DEFAULT),
+         attr(COORDS, null, null, 0, IMPLIED),
+         attr(TABINDEX, null, null, NUMBER, IMPLIED),
+         attr(ONFOCUS, null, null, 0, IMPLIED),
+         attr(ONBLUR, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(ABBR, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(ACRONYM, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(ADDRESS, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         P
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(APPLET, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL, PARAM
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(CODEBASE, null, null, 0, IMPLIED),
+         attr(ARCHIVE, null, null, 0, IMPLIED),
+         attr(CODE, null, null, 0, IMPLIED),
+         attr(OBJECT, null, null, 0, IMPLIED),
+         attr(ALT, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(WIDTH, null, null, 0, REQUIRED),
+         attr(HEIGHT, null, null, 0, REQUIRED),
+         attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+           0, IMPLIED),
+         attr(HSPACE, null, null, 0, IMPLIED),
+         attr(VSPACE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(AREA, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(SHAPE, RECT,  new String[] { RECT, CIRCLE, POLY, DEFAULTS },
+           0, DEFAULT),
+         attr(COORDS, null, null, 0, IMPLIED),
+         attr(HREF, null, null, 0, IMPLIED),
+         attr(TARGET, null, null, 0, IMPLIED),
+         attr(NOHREF, null,  new String[] { NOHREF }, 0, IMPLIED),
+         attr(ALT, null, null, 0, REQUIRED),
+         attr(TABINDEX, null, null, NUMBER, IMPLIED),
+         attr(ACCESSKEY, null, null, 0, IMPLIED),
+         attr(ONFOCUS, null, null, 0, IMPLIED),
+         attr(ONBLUR, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(B, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(BASE, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(HREF, null, null, 0, IMPLIED),
+         attr(TARGET, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(BASEFONT, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(SIZE, null, null, 0, REQUIRED),
+         attr(COLOR, null, null, 0, IMPLIED),
+         attr(FACE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(BDO, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, REQUIRED)
+       }
+     );
+       defElement(BIG, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(BLOCKQUOTE, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(CITE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(BODY, 0, true, true, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DEL, DIR,
+         DIV, DL, FIELDSET, FORM, H1,
+         H2, H3, H4, H5, H6,
+         HR, INS, ISINDEX, MENU, NOFRAMES,
+         NOSCRIPT, OL, P, PRE, TABLE,
+         UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ONLOAD, null, null, 0, IMPLIED),
+         attr(ONUNLOAD, null, null, 0, IMPLIED),
+         attr(BACKGROUND, null, null, 0, IMPLIED),
+         attr(BGCOLOR, null, null, 0, IMPLIED),
+         attr(TEXT, null, null, 0, IMPLIED),
+         attr(LINK, null, null, 0, IMPLIED),
+         attr(VLINK, null, null, 0, IMPLIED),
+         attr(ALINK, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(BR, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(CLEAR, "NONE",  new String[] { LEFT, ALL, RIGHT, NONES },
+           0, DEFAULT)
+       }
+     );
+       defElement(BUTTON, 0, false, false, null,
+       new String[] {
+         A, BUTTON, IFRAME, INPUT,
+         LABEL, SELECT, TEXTAREA, FIELDSET, FORM,
+         ISINDEX
+       }
+       ,
+       new String[] {
+         PCDATA, ABBR, ACRONYM, APPLET,
+         B, BASEFONT, BDO, BIG, BR,
+         CITE, CODE, DFN, EM, FONT,
+         I, IMG, KBD, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SMALL,
+         SPAN, STRIKE, STRONG, SUB, SUP,
+         TT, U, VAR, ADDRESS, BLOCKQUOTE,
+         CENTER, DIR, DIV, DL, H1,
+         H2, H3, H4, H5, H6,
+         HR, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(VALUE, null, null, 0, IMPLIED),
+         attr(TYPE, SUBMIT,  new String[] { BUTTON, SUBMIT, RESET }, 0, DEFAULT),
+         attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+         attr(TABINDEX, null, null, NUMBER, IMPLIED),
+         attr(ACCESSKEY, null, null, 0, IMPLIED),
+         attr(ONFOCUS, null, null, 0, IMPLIED),
+         attr(ONBLUR, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(CAPTION, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { TOP, BOTTOM, LEFT, RIGHT },
+           0, IMPLIED)
+       }
+     );
+       defElement(CENTER, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(CITE, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(CODE, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(COL, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(SPAN, C_1, null, NUMBER, DEFAULT),
+         attr(WIDTH, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+           0, IMPLIED),
+         attr(CHAR, null, null, 0, IMPLIED),
+         attr(CHAROFF, null, null, 0, IMPLIED),
+         attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+           0, IMPLIED)
+       }
+     );
+       defElement(COLGROUP, 0, false, true, null,
+       NONE
+       ,
+       new String[] {
+         COL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(SPAN, C_1, null, NUMBER, DEFAULT),
+         attr(WIDTH, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+           0, IMPLIED),
+         attr(CHAR, null, null, 0, IMPLIED),
+         attr(CHAROFF, null, null, 0, IMPLIED),
+         attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+           0, IMPLIED)
+       }
+     );
+       defElement(DD, 0, false, true, new ContentModel(0,
+         new noTagModel( new String[] { DD, DT } ), null ),
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(DEL, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(CITE, null, null, 0, IMPLIED),
+         attr(DATETIME, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(DFN, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(DIR, 0, false, false, createListModel(),
+       new String[] {
+         ADDRESS, BLOCKQUOTE, CENTER, DIR,
+         DIV, DL, FIELDSET, FORM, H1,
+         H2, H3, H4, H5, H6,
+         HR, ISINDEX, MENU, NOFRAMES, NOSCRIPT,
+         OL, P, PRE, TABLE, UL
+       }
+       ,
+       new String[] {
+         LI, UL, OL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED)
+       }
+     );
+       defElement(DIV, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+           0, IMPLIED)
+       }
+     );
+       defElement(DL, 0, false, false, createDefListModel(),
+       NONE
+       ,
+       new String[] {
+         DD, DT
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED)
+       }
+     );
+       defElement(DT, 0, false, true,
+         new ContentModel(0,
+          new noTagModel( new String[] { DT, DD } ), null),
+         BLOCK
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(EM, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(FIELDSET, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL, LEGEND
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(FONT, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(SIZE, null, null, 0, IMPLIED),
+         attr(COLOR, null, null, 0, IMPLIED),
+         attr(FACE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(FORM, 0, false, false, null,
+       new String[] {
+         FORM
+       }
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, H1, H2, H3,
+         H4, H5, H6, HR, ISINDEX,
+         MENU, NOFRAMES, NOSCRIPT, OL, P,
+         PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ACTION, null, null, 0, REQUIRED),
+         attr(METHOD, GET,  new String[] { GET, POST }, 0, DEFAULT),
+         attr(ENCTYPE, APPLICATION_X_WWW_FORM_URLENCODED, null, 0, DEFAULT),
+         attr(ACCEPT, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(ONSUBMIT, null, null, 0, IMPLIED),
+         attr(ONRESET, null, null, 0, IMPLIED),
+         attr(TARGET, null, null, 0, IMPLIED),
+         attr(ACCEPTCHARSET, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(FRAME, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LONGDESC, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(SRC, null, null, 0, IMPLIED),
+         attr(FRAMEBORDER, C_1,  new String[] { C_1, C_0 }, 0, DEFAULT),
+         attr(MARGINWIDTH, null, null, PIXELS, IMPLIED),
+         attr(MARGINHEIGHT, null, null, PIXELS, IMPLIED),
+         attr(NORESIZE, null,  new String[] { NORESIZE }, 0, IMPLIED),
+         attr(SCROLLING, AUTO,  new String[] { YES, NO, AUTO }, 0, DEFAULT)
+       }
+     );
+       defElement(FRAMESET, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         NOFRAMES, FRAME, FRAMESET
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(ROWS, null, null, 0, IMPLIED),
+         attr(COLS, null, null, 0, IMPLIED),
+         attr(ONLOAD, null, null, 0, IMPLIED),
+         attr(ONUNLOAD, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(H1, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+           0, IMPLIED)
+       }
+     );
+       defElement(H2, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+           0, IMPLIED)
+       }
+     );
+       defElement(H3, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+           0, IMPLIED)
+       }
+     );
+       defElement(H4, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+           0, IMPLIED)
+       }
+     );
+       defElement(H5, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+           0, IMPLIED)
+       }
+     );
+       defElement(H6, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+           0, IMPLIED)
+       }
+     );
+       defElement(HEAD, 0, true, true, null,
+       new String[] {
+         BODY
+       }
+       ,
+       new String[] {
+        TITLE, ISINDEX, BASE,
+        SCRIPT, STYLE, META, LINK, OBJECT
+       }
+     ,
+       new AttributeList[] {
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(PROFILE, null, null, 0, IMPLIED)
+       }
+     );
+ 
+       defElement(HR, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT }, 0, IMPLIED),
+         attr(NOSHADE, null,  new String[] { NOSHADE }, 0, IMPLIED),
+         attr(SIZE, null, null, 0, IMPLIED),
+         attr(WIDTH, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(HTML, 0, true, true, createHtmlContentModel(),
+       NONE
+       ,
+       new String[] {
+         HEAD, BODY
+       }
+     ,
+       new AttributeList[] {
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(VERSION, DTD_NAME, null, 0, FIXED)
+       }
+     );
+       defElement(I, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(IFRAME, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LONGDESC, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(SRC, null, null, 0, IMPLIED),
+         attr(FRAMEBORDER, C_1,  new String[] { C_1, C_0 }, 0, DEFAULT),
+         attr(MARGINWIDTH, null, null, PIXELS, IMPLIED),
+         attr(MARGINHEIGHT, null, null, PIXELS, IMPLIED),
+         attr(SCROLLING, AUTO,  new String[] { YES, NO, AUTO }, 0, DEFAULT),
+         attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+           0, IMPLIED),
+         attr(HEIGHT, null, null, 0, IMPLIED),
+         attr(WIDTH, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(IMG, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(SRC, null, null, 0, REQUIRED),
+         attr(ALT, null, null, 0, REQUIRED),
+         attr(LONGDESC, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(HEIGHT, null, null, 0, IMPLIED),
+         attr(WIDTH, null, null, 0, IMPLIED),
+         attr(USEMAP, null, null, 0, IMPLIED),
+         attr(ISMAP, null,  new String[] { ISMAP }, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+           0, IMPLIED),
+         attr(BORDER, null, null, PIXELS, IMPLIED),
+         attr(HSPACE, null, null, 0, IMPLIED),
+         attr(VSPACE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(INPUT, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(TYPE, TEXT,  new String[] { TEXT, PASSWORD, CHECKBOX, RADIO,
+           SUBMIT, RESET, FILE, HIDDEN, IMAGE, BUTTON }, 0, DEFAULT),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(VALUE, null, null, 0, IMPLIED),
+         attr(CHECKED, null,  new String[] { CHECKED }, 0, IMPLIED),
+         attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+         attr(READONLY, null,  new String[] { READONLY }, 0, IMPLIED),
+         attr(SIZE, null, null, 0, IMPLIED),
+         attr(MAXLENGTH, null, null, 0, IMPLIED),
+         attr(SRC, null, null, 0, IMPLIED),
+         attr(ALT, null, null, 0, IMPLIED),
+         attr(USEMAP, null, null, 0, IMPLIED),
+         attr(ISMAP, null,  new String[] { ISMAP }, 0, IMPLIED),
+         attr(TABINDEX, null, null, NUMBER, IMPLIED),
+         attr(ACCESSKEY, null, null, 0, IMPLIED),
+         attr(ONFOCUS, null, null, 0, IMPLIED),
+         attr(ONBLUR, null, null, 0, IMPLIED),
+         attr(ONSELECT, null, null, 0, IMPLIED),
+         attr(ONCHANGE, null, null, 0, IMPLIED),
+         attr(ACCEPT, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+           0, IMPLIED)
+       }
+     );
+       defElement(INS, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(CITE, null, null, 0, IMPLIED),
+         attr(DATETIME, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(ISINDEX, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(PROMPT, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(KBD, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(LABEL, 0, false, false, null,
+       new String[] {
+         LABEL
+       }
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, MAP, OBJECT, Q,
+         S, SAMP, SCRIPT, SELECT, SMALL,
+         SPAN, STRIKE, STRONG, SUB, SUP,
+         TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(FOR, null, null, 0, IMPLIED),
+         attr(ACCESSKEY, null, null, 0, IMPLIED),
+         attr(ONFOCUS, null, null, 0, IMPLIED),
+         attr(ONBLUR, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(LEGEND, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ACCESSKEY, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { TOP, BOTTOM, LEFT, RIGHT },
+           0, IMPLIED)
+       }
+     );
+       // LI has a special content model that will be resolved into
+       // by transformer.
+       defElement(LI, 0, false, true,
+         new ContentModel(0,
+           new noTagModel(LI), null),
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(TYPE, null, null, 0, IMPLIED),
+         attr(VALUE, null, null, NUMBER, IMPLIED)
+       }
+     );
+       defElement(LINK, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(CHARSET, null, null, 0, IMPLIED),
+         attr(HREF, null, null, 0, IMPLIED),
+         attr(HREFLANG, null, null, 0, IMPLIED),
+         attr(TYPE, null, null, 0, IMPLIED),
+         attr(REL, null, null, 0, IMPLIED),
+         attr(REV, null, null, 0, IMPLIED),
+         attr(MEDIA, null, null, 0, IMPLIED),
+         attr(TARGET, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(MAP, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         ADDRESS, BLOCKQUOTE, CENTER, DIR,
+         DIV, DL, FIELDSET, FORM, H1,
+         H2, H3, H4, H5, H6,
+         HR, ISINDEX, MENU, NOFRAMES, NOSCRIPT,
+         OL, P, PRE, TABLE, UL,
+         AREA
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, REQUIRED)
+       }
+     );
+       defElement(MENU, 0, false, false, createListModel(),
+       new String[] {
+         ADDRESS, BLOCKQUOTE, CENTER, DIR,
+         DIV, DL, FIELDSET, FORM, H1,
+         H2, H3, H4, H5, H6,
+         HR, ISINDEX, MENU, NOFRAMES, NOSCRIPT,
+         OL, P, PRE, TABLE, UL
+       }
+       ,
+       new String[] {
+         LI, UL, OL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED)
+       }
+     );
+       defElement(META, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(HTTPEQUIV, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, NAME, IMPLIED),
+         attr(CONTENT, null, null, 0, REQUIRED),
+         attr(SCHEME, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(NOFRAMES, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(NOSCRIPT, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(OBJECT, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL, PARAM
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(DECLARE, null,  new String[] { DECLARE }, 0, IMPLIED),
+         attr(CLASSID, null, null, 0, IMPLIED),
+         attr(CODEBASE, null, null, 0, IMPLIED),
+         attr(DATA, null, null, 0, IMPLIED),
+         attr(TYPE, null, null, 0, IMPLIED),
+         attr(CODETYPE, null, null, 0, IMPLIED),
+         attr(ARCHIVE, null, null, 0, IMPLIED),
+         attr(STANDBY, null, null, 0, IMPLIED),
+         attr(HEIGHT, null, null, 0, IMPLIED),
+         attr(WIDTH, null, null, 0, IMPLIED),
+         attr(USEMAP, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(TABINDEX, null, null, NUMBER, IMPLIED),
+         attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+           0, IMPLIED),
+         attr(BORDER, null, null, PIXELS, IMPLIED),
+         attr(HSPACE, null, null, 0, IMPLIED),
+         attr(VSPACE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(OL, 0, false, false, createListModel(),
+       NONE
+       ,
+       new String[] {
+       // See note on the createListModel method
+       LI, UL, OL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(TYPE, null, null, 0, IMPLIED),
+         attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED),
+         attr(START, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(OPTGROUP, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         OPTION
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+         attr(LABEL, null, null, 0, REQUIRED)
+       }
+     );
+       defElement(OPTION, 0, false, true, new ContentModel(0,
+        new PCDATAonly_model(), null),
+        NONE,
+        new String[] {
+          PCDATA
+        }
+       ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(SELECTED, null,  new String[] { SELECTED }, 0, IMPLIED),
+         attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+         attr(LABEL, null, null, 0, IMPLIED),
+         attr(VALUE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(P, 0, false, true, new ContentModel( 0,
+        new noTagModel(P), null),
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+           0, IMPLIED)
+       }
+     );
+       defElement(PARAM, EMPTY, false, true, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(sNAME, null, null, 0, REQUIRED),
+         attr(VALUE, null, null, 0, IMPLIED),
+         attr(VALUETYPE, DATA,  new String[] { DATA, REF, OBJECT }, 0, DEFAULT),
+         attr(TYPE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(PRE, 0, false, false, null,
+       new String[] {
+         APPLET, BASEFONT, BIG, FONT,
+         IMG, OBJECT, SMALL, SUB, SUP
+       }
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         B, BDO, BR, BUTTON, CITE,
+         CODE, DFN, EM, I, IFRAME,
+         INPUT, KBD, LABEL, MAP, Q,
+         S, SAMP, SCRIPT, SELECT, SPAN,
+         STRIKE, STRONG, TEXTAREA, TT, U,
+         VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(WIDTH, null, null, NUMBER, IMPLIED)
+       }
+     );
+       defElement(Q, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(CITE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(S, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(SAMP, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(SCRIPT, CDATA, false, false, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(CHARSET, null, null, 0, IMPLIED),
+         attr(TYPE, null, null, 0, REQUIRED),
+         attr(LANGUAGE, null, null, 0, IMPLIED),
+         attr(SRC, null, null, 0, IMPLIED),
+         attr(DEFER, null,  new String[] { DEFER }, 0, IMPLIED),
+         attr(EVENT, null, null, 0, IMPLIED),
+         attr(FOR, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(SELECT, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         OPTGROUP, OPTION
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(SIZE, null, null, NUMBER, IMPLIED),
+         attr(MULTIPLE, null,  new String[] { MULTIPLE }, 0, IMPLIED),
+         attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+         attr(TABINDEX, null, null, NUMBER, IMPLIED),
+         attr(ONFOCUS, null, null, 0, IMPLIED),
+         attr(ONBLUR, null, null, 0, IMPLIED),
+         attr(ONCHANGE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(SMALL, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(SPAN, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(STRIKE, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(STRONG, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(STYLE, CDATA, false, false, null,
+       NONE
+       ,
+       NONE
+     ,
+       new AttributeList[] {
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(TYPE, null, null, 0, REQUIRED),
+         attr(MEDIA, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(SUB, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(SUP, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(TABLE, 0, false, false, createTableContentModel(),
+       NONE
+       ,
+       new String[] {
+         CAPTION, COL, COLGROUP, TBODY,
+         TFOOT, THEAD
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(SUMMARY, null, null, 0, IMPLIED),
+         attr(WIDTH, null, null, 0, IMPLIED),
+         attr(BORDER, null, null, PIXELS, IMPLIED),
+         attr(FRAME, null,  new String[] { VOID, ABOVE, BELOW, HSIDES, LHS, RHS,
+          VSIDES, BOX, BORDER }, 0, IMPLIED),
+         attr(RULES, null,  new String[] { NONES, GROUPS, ROWS, COLS, ALL },
+          0, IMPLIED),
+         attr(CELLSPACING, null, null, 0, IMPLIED),
+         attr(CELLPADDING, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT }, 0, IMPLIED),
+         attr(BGCOLOR, null, null, 0, IMPLIED),
+         attr(DATAPAGESIZE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(TBODY, 0, true, true, model(TR,'+'),
+       NONE
+       ,
+       new String[] {
+         TR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+           0, IMPLIED),
+         attr(CHAR, null, null, 0, IMPLIED),
+         attr(CHAROFF, null, null, 0, IMPLIED),
+         attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+           0, IMPLIED)
+       }
+     );
+ 
+       defElement(TD, 0, false, true,
+        new ContentModel(0,
+         new noTagModel(new String[] {"TD", "TH", "TR" } ), null),
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ABBR, null, null, 0, IMPLIED),
+         attr(AXIS, null, null, 0, IMPLIED),
+         attr(HEADERS, null, null, 0, IMPLIED),
+         attr(SCOPE, null,  new String[] { ROW, COL, ROWGROUP, COLGROUP },
+           0, IMPLIED),
+         attr(ROWSPAN, C_1, null, NUMBER, DEFAULT),
+         attr(COLSPAN, C_1, null, NUMBER, DEFAULT),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+           0, IMPLIED),
+         attr(CHAR, null, null, 0, IMPLIED),
+         attr(CHAROFF, null, null, 0, IMPLIED),
+         attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+           0, IMPLIED),
+         attr(NOWRAP, null,  new String[] { NOWRAP }, 0, IMPLIED),
+         attr(BGCOLOR, null, null, 0, IMPLIED),
+         attr(WIDTH, null, null, 0, IMPLIED),
+         attr(HEIGHT, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(TEXTAREA, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(sNAME, null, null, 0, IMPLIED),
+         attr(ROWS, null, null, NUMBER, REQUIRED),
+         attr(COLS, null, null, NUMBER, REQUIRED),
+         attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+         attr(READONLY, null,  new String[] { READONLY }, 0, IMPLIED),
+         attr(TABINDEX, null, null, NUMBER, IMPLIED),
+         attr(ACCESSKEY, null, null, 0, IMPLIED),
+         attr(ONFOCUS, null, null, 0, IMPLIED),
+         attr(ONBLUR, null, null, 0, IMPLIED),
+         attr(ONSELECT, null, null, 0, IMPLIED),
+         attr(ONCHANGE, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(TFOOT, 0, false, true, model(TR,'+'),
+       NONE
+       ,
+       new String[] {
+         TR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+           0, IMPLIED),
+         attr(CHAR, null, null, 0, IMPLIED),
+         attr(CHAROFF, null, null, 0, IMPLIED),
+         attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+          0, IMPLIED)
+       }
+     );
+       defElement(TH, 0, false, true, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR,
+         ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+         DL, FIELDSET, FORM, H1, H2,
+         H3, H4, H5, H6, HR,
+         ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+         P, PRE, TABLE, UL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ABBR, null, null, 0, IMPLIED),
+         attr(AXIS, null, null, 0, IMPLIED),
+         attr(HEADERS, null, null, 0, IMPLIED),
+         attr(SCOPE, null,  new String[] { ROW, COL, ROWGROUP, COLGROUP },
+           0, IMPLIED),
+         attr(ROWSPAN, C_1, null, NUMBER, DEFAULT),
+         attr(COLSPAN, C_1, null, NUMBER, DEFAULT),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+           0, IMPLIED),
+         attr(CHAR, null, null, 0, IMPLIED),
+         attr(CHAROFF, null, null, 0, IMPLIED),
+         attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+           0, IMPLIED),
+         attr(NOWRAP, null,  new String[] { NOWRAP }, 0, IMPLIED),
+         attr(BGCOLOR, null, null, 0, IMPLIED),
+         attr(WIDTH, null, null, 0, IMPLIED),
+         attr(HEIGHT, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(THEAD, 0, false, true, model(TR,'+'),
+       NONE
+       ,
+       new String[] {
+         TR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+           0, IMPLIED),
+         attr(CHAR, null, null, 0, IMPLIED),
+         attr(CHAROFF, null, null, 0, IMPLIED),
+         attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+           0, IMPLIED)
+       }
+     );
+       defElement(TITLE, 0, false, false, null,
+       new String[] {
+         OBJECT, SCRIPT, LINK, META,
+         STYLE
+       }
+       ,
+       new String[] {
+         PCDATA
+       }
+     ,
+       new AttributeList[] {
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED)
+       }
+     );
+       defElement(TR, 0, false, true,
+        new ContentModel(0, new TableRowContentModel(this), null),
+       NONE
+       ,
+       new String[] {
+         TD, TH
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+           0, IMPLIED),
+         attr(CHAR, null, null, 0, IMPLIED),
+         attr(CHAROFF, null, null, 0, IMPLIED),
+         attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+           0, IMPLIED),
+         attr(BGCOLOR, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(TT, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(U, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+       defElement(UL, 0, false, false, createListModel(),
+       NONE
+       ,
+       new String[] {
+         // See note on the createListModel method
+         LI, UL, OL
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED),
+         attr(TYPE, null,  new String[] { DISC, SQUARE, CIRCLE }, 0, IMPLIED),
+         attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED)
+       }
+     );
+       defElement(VAR, 0, false, false, null,
+       NONE
+       ,
+       new String[] {
+         PCDATA, A, ABBR, ACRONYM,
+         APPLET, B, BASEFONT, BDO, BIG,
+         BR, BUTTON, CITE, CODE, DFN,
+         EM, FONT, I, IFRAME, IMG,
+         INPUT, KBD, LABEL, MAP, OBJECT,
+         Q, S, SAMP, SCRIPT, SELECT,
+         SMALL, SPAN, STRIKE, STRONG, SUB,
+         SUP, TEXTAREA, TT, U, VAR
+       }
+     ,
+       new AttributeList[] {
+         attr(sID, null, null, ID, IMPLIED),
+         attr(CLASS, null, null, 0, IMPLIED),
+         attr(STYLE, null, null, 0, IMPLIED),
+         attr(TITLE, null, null, 0, IMPLIED),
+         attr(LANG, null, null, 0, IMPLIED),
+         attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+         attr(ONCLICK, null, null, 0, IMPLIED),
+         attr(ONDBLCLICK, null, null, 0, IMPLIED),
+         attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+         attr(ONMOUSEUP, null, null, 0, IMPLIED),
+         attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+         attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+         attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+         attr(ONKEYPRESS, null, null, 0, IMPLIED),
+         attr(ONKEYDOWN, null, null, 0, IMPLIED),
+         attr(ONKEYUP, null, null, 0, IMPLIED)
+       }
+     );
+ 
+   }
+ 
+   /**
+    * Define all entities in this DTD.
+    */
+   protected void defineEntities()
+   {
+     /* Define general entities */
+     defineEntity("AElig", 198);
+     defineEntity("Aacute", 193);
+     defineEntity("Acirc", 194);
+     defineEntity("Agrave", 192);
+     defineEntity("Alpha", 913);
+     defineEntity("Aring", 197);
+     defineEntity("Atilde", 195);
+     defineEntity("Auml", 196);
+     defineEntity("Beta", 914);
+     defineEntity("Ccedil", 199);
+     defineEntity("Chi", 935);
+     defineEntity("Dagger", 8225);
+     defineEntity("Delta", 916);
+     defineEntity("ETH", 208);
+     defineEntity("Eacute", 201);
+     defineEntity("Ecirc", 202);
+     defineEntity("Egrave", 200);
+     defineEntity("Epsilon", 917);
+     defineEntity("Eta", 919);
+     defineEntity("Euml", 203);
+     defineEntity("Gamma", 915);
+     defineEntity("Iacute", 205);
+     defineEntity("Icirc", 206);
+     defineEntity("Igrave", 204);
+     defineEntity("Iota", 921);
+     defineEntity("Iuml", 207);
+     defineEntity("Kappa", 922);
+     defineEntity("Lambda", 923);
+     defineEntity("Mu", 924);
+     defineEntity("Ntilde", 209);
+     defineEntity("Nu", 925);
+     defineEntity("OElig", 338);
+     defineEntity("Oacute", 211);
+     defineEntity("Ocirc", 212);
+     defineEntity("Ograve", 210);
+     defineEntity("Omega", 937);
+     defineEntity("Omicron", 927);
+     defineEntity("Oslash", 216);
+     defineEntity("Otilde", 213);
+     defineEntity("Ouml", 214);
+     defineEntity("Phi", 934);
+     defineEntity("Pi", 928);
+     defineEntity("Prime", 8243);
+     defineEntity("Psi", 936);
+     defineEntity("Rho", 929);
+     defineEntity("Scaron", 352);
+     defineEntity("Sigma", 931);
+     defineEntity("THORN", 222);
+     defineEntity("Tau", 932);
+     defineEntity("Theta", 920);
+     defineEntity("Uacute", 218);
+     defineEntity("Ucirc", 219);
+     defineEntity("Ugrave", 217);
+     defineEntity("Upsilon", 933);
+     defineEntity("Uuml", 220);
+     defineEntity("Xi", 926);
+     defineEntity("Yacute", 221);
+     defineEntity("Yuml", 376);
+     defineEntity("Zeta", 918);
+     defineEntity("aacute", 225);
+     defineEntity("acirc", 226);
+     defineEntity("acute", 180);
+     defineEntity("aelig", 230);
+     defineEntity("agrave", 224);
+     defineEntity("alefsym", 8501);
+     defineEntity("alpha", 945);
+     defineEntity("amp", 38);
+     defineEntity("and", 8743);
+     defineEntity("ang", 8736);
+     defineEntity("aring", 229);
+     defineEntity("asymp", 8776);
+     defineEntity("atilde", 227);
+     defineEntity("auml", 228);
+     defineEntity("bdquo", 8222);
+     defineEntity("beta", 946);
+     defineEntity("brvbar", 166);
+     defineEntity("bull", 8226);
+     defineEntity("cap", 8745);
+     defineEntity("ccedil", 231);
+     defineEntity("cedil", 184);
+     defineEntity("cent", 162);
+     defineEntity("chi", 967);
+     defineEntity("circ", 710);
+     defineEntity("clubs", 9827);
+     defineEntity("cong", 8773);
+     defineEntity("copy", 169);
+     defineEntity("crarr", 8629);
+     defineEntity("cup", 8746);
+     defineEntity("curren", 164);
+     defineEntity("dArr", 8659);
+     defineEntity("dagger", 8224);
+     defineEntity("darr", 8595);
+     defineEntity("deg", 176);
+     defineEntity("delta", 948);
+     defineEntity("diams", 9830);
+     defineEntity("divide", 247);
+     defineEntity("eacute", 233);
+     defineEntity("ecirc", 234);
+     defineEntity("egrave", 232);
+     defineEntity("empty", 8709);
+     defineEntity("emsp", 8195);
+     defineEntity("ensp", 8194);
+     defineEntity("epsilon", 949);
+     defineEntity("equiv", 8801);
+     defineEntity("eta", 951);
+     defineEntity("eth", 240);
+     defineEntity("euml", 235);
+     defineEntity("euro", 8364);
+     defineEntity("exist", 8707);
+     defineEntity("fnof", 402);
+     defineEntity("forall", 8704);
+     defineEntity("frac12", 189);
+     defineEntity("frac14", 188);
+     defineEntity("frac34", 190);
+     defineEntity("frasl", 8260);
+     defineEntity("gamma", 947);
+     defineEntity("ge", 8805);
+     defineEntity("gt", 62);
+     defineEntity("hArr", 8660);
+     defineEntity("harr", 8596);
+     defineEntity("hearts", 9829);
+     defineEntity("hellip", 8230);
+     defineEntity("iacute", 237);
+     defineEntity("icirc", 238);
+     defineEntity("iexcl", 161);
+     defineEntity("igrave", 236);
+     defineEntity("image", 8465);
+     defineEntity("infin", 8734);
+     defineEntity("int", 8747);
+     defineEntity("iota", 953);
+     defineEntity("iquest", 191);
+     defineEntity("isin", 8712);
+     defineEntity("iuml", 239);
+     defineEntity("kappa", 954);
+     defineEntity("lArr", 8656);
+     defineEntity("lambda", 955);
+     defineEntity("lang", 9001);
+     defineEntity("laquo", 171);
+     defineEntity("larr", 8592);
+     defineEntity("lceil", 8968);
+     defineEntity("ldquo", 8220);
+     defineEntity("le", 8804);
+     defineEntity("lfloor", 8970);
+     defineEntity("lowast", 8727);
+     defineEntity("loz", 9674);
+     defineEntity("lrm", 8206);
+     defineEntity("lsaquo", 8249);
+     defineEntity("lsquo", 8216);
+     defineEntity("lt", 60);
+     defineEntity("macr", 175);
+     defineEntity("mdash", 8212);
+     defineEntity("micro", 181);
+     defineEntity("middot", 183);
+     defineEntity("minus", 8722);
+     defineEntity("mu", 956);
+     defineEntity("nabla", 8711);
+     defineEntity("nbsp", 160);
+     defineEntity("ndash", 8211);
+     defineEntity("ne", 8800);
+     defineEntity("ni", 8715);
+     defineEntity("not", 172);
+     defineEntity("notin", 8713);
+     defineEntity("nsub", 8836);
+     defineEntity("ntilde", 241);
+     defineEntity("nu", 957);
+     defineEntity("oacute", 243);
+     defineEntity("ocirc", 244);
+     defineEntity("oelig", 339);
+     defineEntity("ograve", 242);
+     defineEntity("oline", 8254);
+     defineEntity("omega", 969);
+     defineEntity("omicron", 959);
+     defineEntity("oplus", 8853);
+     defineEntity("or", 8744);
+     defineEntity("ordf", 170);
+     defineEntity("ordm", 186);
+     defineEntity("oslash", 248);
+     defineEntity("otilde", 245);
+     defineEntity("otimes", 8855);
+     defineEntity("ouml", 246);
+     defineEntity("para", 182);
+     defineEntity("part", 8706);
+     defineEntity("permil", 8240);
+     defineEntity("perp", 8869);
+     defineEntity("phi", 966);
+     defineEntity("pi", 960);
+     defineEntity("piv", 982);
+     defineEntity("plusmn", 177);
+     defineEntity("pound", 163);
+     defineEntity("prime", 8242);
+     defineEntity("prod", 8719);
+     defineEntity("prop", 8733);
+     defineEntity("psi", 968);
+     defineEntity("quot", 34);
+     defineEntity("rArr", 8658);
+     defineEntity("radic", 8730);
+     defineEntity("rang", 9002);
+     defineEntity("raquo", 187);
+     defineEntity("rarr", 8594);
+     defineEntity("rceil", 8969);
+     defineEntity("rdquo", 8221);
+     defineEntity("real", 8476);
+     defineEntity("reg", 174);
+     defineEntity("rfloor", 8971);
+     defineEntity("rho", 961);
+     defineEntity("rlm", 8207);
+     defineEntity("rsaquo", 8250);
+     defineEntity("rsquo", 8217);
+     defineEntity("sbquo", 8218);
+     defineEntity("scaron", 353);
+     defineEntity("sdot", 8901);
+     defineEntity("sect", 167);
+     defineEntity("shy", 173);
+     defineEntity("sigma", 963);
+     defineEntity("sigmaf", 962);
+     defineEntity("sim", 8764);
+     defineEntity("spades", 9824);
+     defineEntity("sub", 8834);
+     defineEntity("sube", 8838);
+     defineEntity("sum", 8721);
+     defineEntity("sup", 8835);
+     defineEntity("sup1", 185);
+     defineEntity("sup2", 178);
+     defineEntity("sup3", 179);
+     defineEntity("supe", 8839);
+     defineEntity("szlig", 223);
+     defineEntity("tau", 964);
+     defineEntity("there4", 8756);
+     defineEntity("theta", 952);
+     defineEntity("thetasym", 977);
+     defineEntity("thinsp", 8201);
+     defineEntity("thorn", 254);
+     defineEntity("tilde", 732);
+     defineEntity("times", 215);
+     defineEntity("trade", 8482);
+     defineEntity("uArr", 8657);
+     defineEntity("uacute", 250);
+     defineEntity("uarr", 8593);
+     defineEntity("ucirc", 251);
+     defineEntity("ugrave", 249);
+     defineEntity("uml", 168);
+     defineEntity("upsih", 978);
+     defineEntity("upsilon", 965);
+     defineEntity("uuml", 252);
+     defineEntity("weierp", 8472);
+     defineEntity("xi", 958);
+     defineEntity("yacute", 253);
+     defineEntity("yen", 165);
+     defineEntity("yuml", 255);
+     defineEntity("zeta", 950);
+     defineEntity("zwj", 8205);
+     defineEntity("zwnj", 8204);
+   }
+ 
+   /**
+    * Crate a content model, consisting of the single
+    * element, specified by name.
+    */
+   private ContentModel model(String element)
+   {
+     return new ContentModel(getElement(element));
+   }
+ 
+   /**
+    * Crate a chain from the two content models,
+    * the last containing the given element and
+    * the specified unary operation.
+    */
+   private ContentModel model(String element, int unary)
+   {
+     ContentModel ct = model(element);
+     ct.type = unary;
+     return new ContentModel(0, ct);
+   }
+ 
+   /**
+    * Create the model HEAD, BODY
+    * @return
+    */
+   protected ContentModel createHtmlContentModel()
+   {
+     ContentModel head = model(HEAD);
+     ContentModel body = model(BODY);
+     head.next = body;
+     head.type = ',';
+     return head;
+   }
+ 
+   /**
+    * Create the model
+    * ( CAPTION ? , ( COL * | COLGROUP * ) , THEAD ? , TFOOT ? , TBODY + )
+    */
+   protected ContentModel createTableContentModel()
+   {
+      ContentModel col_colgroup = new ContentModel
+       ('|', model(COL,'*'), model(COLGROUP,'*') );
+ 
+      col_colgroup = new ContentModel('*', col_colgroup);
+      col_colgroup = new ContentModel(',', col_colgroup);
+ 
+      ContentModel caption = model(CAPTION,'?');
+      ContentModel thead   = model(THEAD, '?');
+      ContentModel tfoot   = model(TFOOT, '?');
+      ContentModel tbody   = model(TBODY, '+');
+ 
+      caption.next = col_colgroup;
+      col_colgroup.next = thead;
+      thead.next = tfoot;
+      tfoot.next = tbody;
+ 
+      caption.type = col_colgroup.type = thead.type = tfoot.type =
+      tbody.type = ',';
+ 
+      return caption;
+   }
+ 
+   /**
+    * Creates a model for &lt;DL&gt; tag:
+    * <code> DT+ | DL+ </code>.
+    * @return
+    */
+   protected ContentModel createDefListModel()
+   {
+     ContentModel dt = model(DT, '+');
+     ContentModel dd = model(DD, '+');
+ 
+     dt.next = dd;
+     dt.type = dd.type = '|';
+     return dt;
+   }
+ 
+   /**
+    * This model is used for UL, OL, MENU and DIR.
+    *  HTML 4.01 specifies LI only, but the nested
+    * list seems rendered correctly only if
+    * it is not enclosed into <LI>-</LI> of the
+    * parent list.
+    */
+   protected ContentModel createListModel()
+   {
+     ContentModel li = model(LI, '+');
+     ContentModel ul = model(UL, '+');
+     ContentModel ol = model(OL, '+');
+ 
+     li.next = ul;
+     ul.next = ol;
+     li.type = ul.type = ol.type = '|';
+     return li;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/gnuDTD.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/gnuDTD.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/gnuDTD.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/gnuDTD.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,422 ----
+ /* gnuDTD.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser;
+ 
+ import java.io.PrintStream;
+ import java.io.Serializable;
+ 
+ import java.util.BitSet;
+ import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Vector;
+ 
+ import javax.swing.text.html.parser.AttributeList;
+ import javax.swing.text.html.parser.ContentModel;
+ import javax.swing.text.html.parser.Element;
+ import javax.swing.text.html.parser.Entity;
+ 
+ /**
+  * <p>
+  * The class is derived from {@link gnu.javax.swing.text.html.parser.DTD }
+  * making structure creation methods public. This is required when
+  * creating the DTD by SGML parser that must have access to the structure.
+  *
+  * SGML DTD representation. Provides basis for describing a syntax of the
+  * HTML documents. The fields of this class are NOT initialized in
+  * constructor. You need to do this separately before passing this data
+  * structure to the parser constructor.</p>
+  *
+  * <p>This implementation also provides you the derived class
+  * <code>gnu.javax.swing.text.html.parser.DTD.HTML_4_0_1</code>, where
+  * all fields are initialized to the values, representing HTML 4.01
+  * ("-//W3C//DTD HTML 4.01 Frameset//EN") DTD. You can use it if you do not care
+  * about the portability between different implementations of the core
+  * class libraries. </p>
+  * <p>Use {@link javax.swing.HTML.HTMLEditorKit.Parser#parse }
+  * for parsing in accordance with "-//W3C//DTD HTML 4.01 Frameset//EN"
+  * without specifying DTD separately.</p>
+  *
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class gnuDTD
+   extends javax.swing.text.html.parser.DTD
+   implements javax.swing.text.html.parser.DTDConstants, Serializable
+ {
+   /* The undocumented element types, used to specify types, not defined
+   in DTDConstants. */
+ 
+   /**
+    * The URI element type (not defined in DTDConstants).
+    */
+   public static final int URI = 512;
+ 
+   /**
+    * The Length element type
+    */
+   public static final int Length = 513;
+ 
+   /**
+    * The Char element type
+    */
+   public static final int Char = 514;
+ 
+   /**
+    * The Color element type
+    */
+   public static final int Color = 515;
+ 
+   /**
+    * Creates a new instance of gnuDTD.
+    * @param name the name of the DTD.
+    */
+   public gnuDTD(String name)
+   {
+     super(name);
+   }
+ 
+   /**
+    * Creates and returns new attribute (not an attribute list).
+    * @param name the name of this attribute
+    * @param type the type of this attribute (FIXED, IMPLIED or
+    * REQUIRED from <code>DTDConstants</code>).
+    * @param modifier the modifier of this attribute
+    * @param default_value the default value of this attribute or null if
+    * it is not specified.
+    * @param allowed_values the allowed values of this attribute. The multiple
+    * possible values in this parameter are supposed to be separated by
+    * '|', same as in SGML DTD <code>&lt;!ATTLIST </code>tag. This parameter
+    * can be null if no list of allowed values is specified.
+    * @param atts the previous attribute of this element. This is
+    * placed to the field
+    * {@link javax.swing.text.html.parser.AttributeList#next },
+    * creating a linked list.
+    * @return
+    */
+   public AttributeList defAttributeList(String name, int type, int modifier,
+                                         String default_value,
+                                         String allowed_values,
+                                         AttributeList atts
+                                        )
+   {
+     return super.defAttributeList(name, type, modifier, default_value,
+                                   allowed_values, atts
+                                  );
+   }
+ 
+   /**
+    * Define the attributes for the element with the given name.
+    * If the element is not exist, it is created. This method is
+    * needed if the element attributes are defined befor the
+    * element itself.
+    * @param forElement
+    * @param attributes
+    */
+   public void defAttrsFor(String forElement, AttributeList attributes)
+   {
+     super.defineAttributes(forElement, attributes);
+   }
+ 
+   /**
+    * Creates a new content model.
+    * @param type specifies the BNF operation for this content model.
+    * The valid operations are documented in the
+    * {@link javax.swing.text.html.parser.ContentModel#type }.
+    * @param content the content of this content model
+    * @param next if the content model is specified by BNF-like
+    * expression, contains the rest of this expression.
+    * @return The newly created content model.
+    */
+   public ContentModel defContentModel(int type, Object content,
+                                       ContentModel next
+                                      )
+   {
+     return super.defContentModel(type, content, next);
+   }
+ 
+   /**
+    * Defines a new element and adds it to the element table.
+    * If the element alredy exists,
+    * overrides it settings with the specified values.
+    * @param name the name of the new element
+    * @param type the type of the element
+    * @param headless true if the element needs no starting tag
+    * @param tailless true if the element needs no closing tag
+    * @param content the element content.
+    * @param exclusions the elements that must be excluded from the
+    * content of this element, in all levels of the hierarchy.
+    * @param inclusions the elements that can be included as the
+    * content of this element.
+    * @param attributes the element attributes.
+    * @return the created or updated element.
+    */
+   public Element defElement(String name, int type, boolean headless,
+                             boolean tailless, ContentModel content,
+                             String[] exclusions, String[] inclusions,
+                             AttributeList attributes
+                            )
+   {
+     return super.defElement(name, type, headless, tailless, content,
+                             exclusions, inclusions, attributes
+                            );
+   }
+ 
+   /**
+    * Defines a new element and adds it to the element table.
+    * If the element alredy exists,
+    * overrides it settings with the specified values.
+    * @param name the name of the new element
+    * @param type the type of the element
+    * @param headless true if the element needs no starting tag
+    * @param tailless true if the element needs no closing tag
+    * @param content the element content.
+    * @param exclusions the elements that must be excluded from the
+    * content of this element, in all levels of the hierarchy.
+    * @param inclusions the elements that can be included as the
+    * content of this element.
+    * @param attributes the element attributes.
+    * @return the created or updated element.
+    */
+   public Element defElement(String name, int type, boolean headless,
+                             boolean tailless, ContentModel content,
+                             Collection exclusions, Collection inclusions,
+                             AttributeList attributes
+                            )
+   {
+     return super.defElement(name, type, headless, tailless, content,
+                             toStringArray(exclusions),
+                             toStringArray(inclusions), attributes
+                            );
+   }
+ 
+   /**
+    * Defines a new element and adds it to the element table.
+    * If the element alredy exists,
+    * overrides it settings with the specified values.
+    * @param name the name of the new element
+    * @param type the type of the element
+    * @param headless true if the element needs no starting tag
+    * @param tailless true if the element needs no closing tag
+    * @param content the element content.
+    * @param exclusions the elements that must be excluded from the
+    * content of this element, in all levels of the hierarchy.
+    * @param inclusions the elements that can be included as the
+    * content of this element.
+    * @param attributes the element attributes (an array and not a
+    * linked list). The attributes are chained into the linked list
+    * inside this method.
+    * @return the created or updated element.
+    */
+   public Element defElement(String name, int type, boolean headless,
+                             boolean tailless, ContentModel content,
+                             String[] exclusions, String[] inclusions,
+                             AttributeList[] attributes
+                            )
+   {
+     AttributeList list;
+ 
+     if (attributes == null || attributes.length == 0)
+       list = null;
+     else
+       {
+         if (attributes.length > 1)
+           for (int i = 1; i < attributes.length; i++)
+             {
+               attributes [ i - 1 ].next = attributes [ i ];
+             }
+         list = attributes [ 0 ];
+       }
+ 
+     Element e =
+       super.defElement(name, type, headless, tailless, content, exclusions,
+                        inclusions, list
+                       );
+     return e;
+   }
+ 
+   /**
+    * Creates, adds into the internal table and returns the
+    * character entity like <code>&amp;lt;</code>
+    *  (means '<code>&lt;</code>' );
+    * This method inactivates the recursive refenrences to the same
+    * entity.
+    * @param name The entity name (without heading &amp; and closing ;)
+    * @param type The entity type
+    * @param character The entity value (single character)
+    * @return The created entity
+    */
+   public Entity defEntity(String name, int type, String data)
+   {
+     int r;
+     String eref = "%" + name + ";";
+     do
+       {
+         r = data.indexOf(eref);
+         if (r > 0)
+           {
+             data = data.substring(0, r) + data.substring(r + 1);
+           }
+       }
+     while (r > 0);
+ 
+     return super.defEntity(name, type, data);
+   }
+ 
+   /**
+    * Summarises the document content into the given PrintStream.
+    */
+   public void dump(PrintStream p)
+   {
+     Iterator iter = entityHash.entrySet().iterator();
+     while (iter.hasNext())
+       {
+         Map.Entry item = (Map.Entry) iter.next();
+         Entity e = (Entity) item.getValue();
+         if (e.isGeneral())
+           p.println("Entity " + e.getName() + ": " + e.getString());
+       }
+ 
+     iter = elementHash.entrySet().iterator();
+     while (iter.hasNext())
+       {
+         Map.Entry item = (Map.Entry) iter.next();
+         Element e = (Element) item.getValue();
+         p.println("Element " + e.getName());
+ 
+         System.out.println(" includes:");
+         dump(e.inclusions);
+         System.out.println(" excludes:");
+         dump(e.exclusions);
+         System.out.println(" attributes:");
+ 
+         AttributeList atts = e.atts;
+         while (atts != null)
+           {
+             p.print("    " + atts.name + " = " + atts.value);
+             if (atts.values == null || atts.values.size() == 0)
+               p.println();
+             else
+               {
+                 Iterator viter = atts.values.iterator();
+                 System.out.print(" ( ");
+                 while (viter.hasNext())
+                   {
+                     System.out.print(viter.next());
+                     if (viter.hasNext())
+                       System.out.print(" | ");
+                   }
+                 System.out.println(" ) ");
+               }
+             atts = atts.next;
+           }
+       }
+   }
+ 
+   /**
+    * Prints the content of the given attribute set to the System.out.
+    * @param b
+    */
+   public void dump(BitSet b)
+   {
+     if (b != null)
+       {
+         for (int i = 0; i < b.size(); i++)
+           {
+             if (b.get(i))
+               System.out.println(" " + elements.get(i));
+           }
+       }
+     else
+       System.out.println(" NULL set");
+   }
+ 
+   /**
+    * Creates the attribute.
+    * @param name The attribute name.
+    * @param type The attribute type.
+    * @param modifier The attribute modifier.
+    * @param defaultValue Default value (or null)
+    * @param allowed_values Allowed values (or null)
+    * @return The newly created AttributeList. The <code>next</code>
+    * field is initialized to null.
+    */
+   protected AttributeList attr(String name, String default_value,
+                                String[] allowed_values, int type, int modifier
+                               )
+   {
+     Vector allowed = null;
+ 
+     if (allowed_values != null)
+       {
+         allowed = new Vector(allowed_values.length);
+         for (int i = 0; i < allowed_values.length; i++)
+           {
+             allowed.add(allowed_values [ i ]);
+           }
+       }
+     ;
+ 
+     AttributeList attr =
+       new AttributeList(name, type, modifier, default_value, allowed, null);
+ 
+     return attr;
+   }
+ 
+   /**
+    * Define the general entity, holding a single character.
+    * @param name The entity name (for example, 'amp').
+    * The defined entity <b>is</b> stored into the entity table.
+    * @param character The entity character (for example, '&').
+    */
+   protected void defineEntity(String name, int character)
+   {
+     super.defEntity(name, GENERAL, character);
+   }
+ 
+   private String[] toStringArray(Collection c)
+   {
+     String[] s = new String[ c.size() ];
+     Iterator iter = c.iterator();
+     for (int i = 0; i < s.length; i++)
+       {
+         s [ i ] = iter.next().toString();
+       }
+     return s;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/htmlAttributeSet.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/htmlAttributeSet.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/htmlAttributeSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/htmlAttributeSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,133 ----
+ /* htmlAttributeSet.java -- A set to store HTML attributes
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser;
+ 
+ import java.util.Enumeration;
+ 
+ import javax.swing.text.AttributeSet;
+ import javax.swing.text.SimpleAttributeSet;
+ import javax.swing.text.html.HTML;
+ 
+ /**
+  * A set, adapted to store HTML attributes.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class htmlAttributeSet
+   extends SimpleAttributeSet
+ {
+   public static final htmlAttributeSet EMPTY_HTML_ATTRIBUTE_SET =
+     new htmlAttributeSet();
+   AttributeSet parent;
+ 
+   /**
+    * Looks in this set and, if not found, later looks in the parent set.
+    * Calls toString(), allowing to pass as HTML.Attribute, as String
+    * to this method.
+    * @param key A key to search for a value.
+    * @return The value, if one is defined.
+    */
+   public Object getAttribute(Object _key)
+   {
+     Object key = _key.toString().toLowerCase();
+ 
+     Object v = super.getAttribute(key);
+     if (v != null)
+       return v;
+     else if (parent != null)
+       return parent.getAttribute(key);
+     else
+       return null;
+   }
+ 
+   /**
+    * The name set must return HTML.Attribute and not a string,
+    * where applicable.
+    */
+   public Enumeration getAttributeNames()
+   {
+     // Replace the string keys by HTML.attribute, where applicable
+     final Enumeration enumeration = super.getAttributeNames();
+ 
+     return new Enumeration()
+       {
+         public boolean hasMoreElements()
+         {
+           return enumeration.hasMoreElements();
+         }
+ 
+         public Object nextElement()
+         {
+           Object key = enumeration.nextElement();
+           HTML.Attribute hKey = HTML.getAttributeKey((String) key);
+           if (hKey != null)
+             return hKey;
+           else
+             return key;
+         }
+       };
+   }
+ 
+   /**
+    * Set the parent set, containing the default values.
+    * @param a_parent
+    */
+   public void setResolveParent(AttributeSet a_parent)
+   {
+     parent = a_parent;
+   }
+ 
+   /**
+    * Get the parent set, containing the default values.
+    * @return
+    */
+   public AttributeSet getResolveParent()
+   {
+     return parent;
+   }
+ 
+   /**
+    * Add the attribute to this attribute set.
+    * @param key Attribute key (will be case insensitive)
+    * @param value Attribute value
+    */
+   public void addAttribute(Object key, Object value)
+   {
+     super.addAttribute(key.toString().toLowerCase(), value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/htmlValidator.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/htmlValidator.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/htmlValidator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/htmlValidator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,610 ----
+ /* tagStack.java -- The HTML tag stack.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser;
+ 
+ import gnu.javax.swing.text.html.parser.models.node;
+ import gnu.javax.swing.text.html.parser.models.transformer;
+ 
+ import java.util.BitSet;
+ import java.util.Enumeration;
+ import java.util.LinkedList;
+ import java.util.ListIterator;
+ 
+ import javax.swing.text.SimpleAttributeSet;
+ import javax.swing.text.html.HTML;
+ import javax.swing.text.html.parser.*;
+ 
+ /**
+  * <p>The HTML content validator, is responsible for opening and
+  * closing elements with optional start/end tags, detecting
+  * the wrongly placed html tags and reporting errors. The working instance
+  * is the inner class inside the {@link javax.swing.text.html.parser.Parser }
+  * </p>
+  * <p>This class could potentially
+  * provide basis for automated closing and insertion of the html tags,
+  * correcting the found html errors.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class htmlValidator
+ {
+   /**
+    * The tag reference, holding additional information that the tag
+    * has been forcibly closed.
+    */
+   protected class hTag
+   {
+     protected final Element element;
+     protected final HTML.Tag tag;
+     protected final TagElement tgElement;
+     protected boolean forcibly_closed;
+     protected node validationTrace;
+ 
+     protected hTag(TagElement an_element)
+     {
+       element = an_element.getElement();
+       tag = an_element.getHTMLTag();
+       tgElement = an_element;
+ 
+       if (element.content != null)
+         validationTrace = transformer.transform(element.content, dtd);
+     }
+ 
+     /**
+      * This is called when the tag must be forcibly closed because
+      * it would make the newly appearing tag invalid.
+      * The parser is not notified about such event (just the error
+      * is reported). For such tags, the closing message does not
+      * appear when later reaching the end of stream. The exception is
+      * the &lt;head&gt; tag: the parser is notified about its silent closing
+      * when &lt;body&gt; or other html content appears.
+      */
+     protected void forciblyCloseDueContext()
+     {
+       forcibly_closed = true;
+     }
+ 
+     /**
+      * This is called when the tag must be forcibly closed after
+      * reaching the end of stream. The parser is notified as if
+      * closing the tag explicitly.
+      */
+     protected void forciblyCloseDueEndOfStream()
+     {
+       forcibly_closed = true;
+       handleSupposedEndTag(element);
+     }
+   }
+ 
+   /**
+    * The DTD, providing information about the valid document structure.
+    */
+   protected final DTD dtd;
+ 
+   /**
+   * The stack, holding the current tag context.
+   */
+   protected final LinkedList stack = new LinkedList();
+ 
+   /**
+    * Creates a new tag stack, using the given DTD.
+    * @param a_dtd A DTD, providing the information about the valid
+    * tag content.
+    */
+   public htmlValidator(DTD a_dtd)
+   {
+     dtd = a_dtd;
+   }
+ 
+   /**
+    * Close all opened tags (called at the end of parsing).
+    */
+   public void closeAll()
+   {
+     hTag h;
+     while (!stack.isEmpty())
+       {
+         h = (hTag) stack.getLast();
+         if (!h.forcibly_closed && !h.element.omitEnd())
+           s_error("Unclosed <" + h.tag + ">, closing at the end of stream");
+ 
+         handleSupposedEndTag(h.element);
+ 
+         closeTag(h.tgElement);
+       }
+   }
+ 
+   /**
+    * Remove the given tag from the stack or (if found) from the list
+    * of the forcibly closed tags.
+    */
+   public void closeTag(TagElement tElement)
+   {
+     HTML.Tag tag = tElement.getHTMLTag();
+     hTag x;
+     hTag close;
+ 
+     if (!stack.isEmpty())
+       {
+         ListIterator iter = stack.listIterator(stack.size());
+ 
+         while (iter.hasPrevious())
+           {
+             x = (hTag) iter.previous();
+             if (tag.equals(x.tag))
+               {
+                 if (x.forcibly_closed && !x.element.omitEnd())
+                   s_error("The tag <" + x.tag +
+                           "> has already been forcibly closed"
+                          );
+ 
+ 
+                 // If the tag has a content model defined, forcibly close all
+                 // tags that were opened after the tag being currently closed.
+                 closing: 
+                 if (x.element.content != null)
+                   {
+                     iter = stack.listIterator(stack.size());
+                     while (iter.hasPrevious())
+                       {
+                         close = (hTag) iter.previous();
+                         if (close == x)
+                           break closing;
+                         handleSupposedEndTag(close.element);
+                         iter.remove();
+                       }
+                   }
+ 
+                 stack.remove(x);
+                 return;
+               }
+           }
+       }
+     s_error("Closing unopened <" + tag + ">");
+   }
+ 
+   /**
+    * Add the given HTML tag to the stack of the opened tags. Forcibly closes
+    * all tags in the stack that does not allow this tag in they content (error
+    * is reported).
+    * @param element
+    */
+   public void openTag(TagElement tElement, htmlAttributeSet parameters)
+   {
+     // If this is a fictional call, the message from the parser
+     // has recursively returned - ignore.
+     if (tElement.fictional())
+       return;
+ 
+     validateParameters(tElement, parameters);
+ 
+     // If the stack is empty, start from HTML
+     if (stack.isEmpty() && tElement.getHTMLTag() != HTML.Tag.HTML)
+       {
+         Element html = dtd.getElement(HTML.Tag.HTML.toString());
+         openFictionalTag(html);
+       }
+ 
+     Object v = tagIsValidForContext(tElement);
+     if (v != Boolean.TRUE)
+       {
+         // The tag is not valid for context, the content
+         // model suggest to open another tag.
+         if (v instanceof Element)
+           {
+             int n = 0;
+             while (v instanceof Element && (n++ < 100))
+               {
+                 Element fe = (Element) v;
+ 
+                 // notify the content model that we add the proposed tag
+                 getCurrentContentModel().show(fe);
+                 openFictionalTag(fe);
+ 
+                 Object vv = tagIsValidForContext(tElement);
+                 if (vv instanceof Element) // One level of nesting is supported.
+                   {
+                     openFictionalTag((Element) vv);
+ 
+                     Object vx = tagIsValidForContext(tElement);
+                     if (vx instanceof Element)
+                       openFictionalTag((Element) vx);
+                   }
+                 else if (vv == Boolean.FALSE)
+                   {
+                     // The tag is still not valid for the current
+                     // content after opening a fictional element.
+                     if (fe.omitEnd())
+                       {
+                         // close the previously opened fictional tag.
+                         closeLast();
+                         vv = tagIsValidForContext(tElement);
+                         if (vv instanceof Element)
+ 
+                           // another tag was suggested by the content model
+                           openFictionalTag((Element) vv);
+                       }
+                   }
+                 v = tagIsValidForContext(tElement);
+               }
+           }
+         else // If the current element has the optional end tag, close it.
+           {
+             if (!stack.isEmpty())
+               {
+                 closing: 
+                 do
+                   {
+                     hTag last = (hTag) stack.getLast();
+                     if (last.element.omitEnd())
+                       {
+                         closeLast();
+                         v = tagIsValidForContext(tElement);
+                         if (v instanceof Element) // another tag was suggested by the content model
+                           {
+                             openFictionalTag((Element) v);
+                             break closing;
+                           }
+                       }
+                     else
+                       break closing;
+                   }
+                 while (v == Boolean.FALSE && !stack.isEmpty());
+               }
+           }
+       }
+ 
+     stack.add(new hTag(tElement));
+   }
+ 
+   /**
+    * Clear the stack.
+    */
+   public void restart()
+   {
+     stack.clear();
+   }
+ 
+   /**
+    * Check if this tag is valid for the current context.
+    * Return Boolean.True if it is OK, Boolean.False
+    * if it is surely not OK or the Element that the
+    * content model recommends to insert making the situation
+    * ok. If Boolean.True is returned, the content model current
+    * position is moved forward. Otherwise this position remains
+    * the same.
+    * @param tElement
+    * @return
+    */
+   public Object tagIsValidForContext(TagElement tElement)
+   {
+     // Check the current content model, if one is available.
+     node cv = getCurrentContentModel();
+ 
+     if (cv != null)
+       return cv.show(tElement.getElement());
+ 
+     // Check exclusions and inclusions.
+     ListIterator iter = stack.listIterator(stack.size());
+     hTag t;
+     final int idx = tElement.getElement().index;
+ 
+     // Check only known tags.
+     if (idx >= 0)
+       {
+         BitSet inclusions = new BitSet();
+         while (iter.hasPrevious())
+           {
+             t = (hTag) iter.previous();
+             if (!t.forcibly_closed)
+               {
+                 if (t.element.exclusions != null &&
+                     t.element.exclusions.get(idx)
+                    )
+                   return Boolean.FALSE;
+ 
+                 if (t.element.inclusions != null)
+                   inclusions.or(t.element.inclusions);
+               }
+           }
+         if (!inclusions.get(idx))
+           return Boolean.FALSE;
+       }
+     return Boolean.TRUE;
+   }
+ 
+   /**
+    * Validate tag without storing in into the tag stack. This is called
+    * for the empty tags and results the subsequent calls to the openTag
+    * and closeTag.
+    */
+   public void validateTag(TagElement tElement, htmlAttributeSet parameters)
+   {
+     openTag(tElement, parameters);
+     closeTag(tElement);
+   }
+ 
+   /**
+    * Check for mandatory elements, subsequent to the last tag:
+    * @param tElement The element that will be inserted next.
+    */
+   protected void checkContentModel(TagElement tElement, boolean first)
+   {
+     if (stack.isEmpty())
+       return;
+ 
+     hTag last = (hTag) stack.getLast();
+     if (last.validationTrace == null)
+       return;
+ 
+     Object r = last.validationTrace.show(tElement.getElement());
+     if (r == Boolean.FALSE)
+       s_error("The <" + last.element + "> does not match the content model " +
+               last.validationTrace
+              );
+     else if (r instanceof Element) // The content model recommends insertion of this element
+       {
+         if (!first)
+           closeTag(last.tgElement);
+         handleSupposedStartTag((Element) r);
+         openTag(new TagElement((Element) r), null);
+       }
+   }
+ 
+   /**
+    * The method is called when the tag must be closed because
+    * it does not allow the subsequent elements inside its context
+    * or the end of stream has been reached. The parser is only
+    * informed if the element being closed does not require the
+    * end tag (the "omitEnd" flag is set).
+    * The closing message must be passed to the parser mechanism
+    * before passing message about the opening the next tag.
+    *
+    * @param element The tag being fictionally (forcibly) closed.
+    */
+   protected abstract void handleSupposedEndTag(Element element);
+ 
+   /**
+    * The method is called when the validator decides to open the
+    * tag on its own initiative. This may happen if the content model
+    * includes the element with the optional (supposed) start tag.
+    *
+    * @param element The tag being opened.
+    */
+   protected abstract void handleSupposedStartTag(Element element);
+ 
+   /**
+    * Handles the error message. This method must be overridden to pass
+    * the message where required.
+    * @param msg The message text.
+    */
+   protected abstract void s_error(String msg);
+ 
+   /**
+    * Validate the parameters, report the error if the given parameter is
+    * not in the parameter set, valid for the given attribute. The information
+    * about the valid parameter set is taken from the Element, enclosed
+    * inside the tag. The method does not validate the default parameters.
+    * @param tag The tag
+    * @param parameters The parameters of this tag.
+    */
+   protected void validateParameters(TagElement tag, htmlAttributeSet parameters)
+   {
+     if (parameters == null ||
+         parameters == htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET ||
+         parameters == SimpleAttributeSet.EMPTY
+        )
+       return;
+ 
+     Enumeration enumeration = parameters.getAttributeNames();
+ 
+     while (enumeration.hasMoreElements())
+       {
+         validateAttribute(tag, parameters, enumeration);
+       }
+ 
+     // Check for missing required values.
+     AttributeList a = tag.getElement().getAttributes();
+ 
+     while (a != null)
+       {
+         if (a.getModifier() == DTDConstants.REQUIRED)
+           if (parameters.getAttribute(a.getName()) == null)
+             {
+               s_error("Missing required attribute '" + a.getName() + "' for <" +
+                       tag.getHTMLTag() + ">"
+                      );
+             }
+         a = a.next;
+       }
+   }
+ 
+   private node getCurrentContentModel()
+   {
+     if (!stack.isEmpty())
+       {
+         hTag last = (hTag) stack.getLast();
+         return last.validationTrace;
+       }
+     else
+       return null;
+   }
+ 
+   private void closeLast()
+   {
+     handleSupposedEndTag(((hTag) stack.getLast()).element);
+     stack.removeLast();
+   }
+ 
+   private void openFictionalTag(Element e)
+   {
+     handleSupposedStartTag(e);
+     stack.add(new hTag(new TagElement(e, true)));
+     if (!e.omitStart())
+       s_error("<" + e + "> is expected (supposing it)");
+   }
+ 
+   private void validateAttribute(TagElement tag, htmlAttributeSet parameters,
+                                  Enumeration enumeration
+                                 )
+   {
+     Object foundAttribute;
+     AttributeList dtdAttribute;
+     foundAttribute = enumeration.nextElement();
+     dtdAttribute = tag.getElement().getAttribute(foundAttribute.toString());
+     if (dtdAttribute == null)
+       {
+         StringBuffer valid =
+           new StringBuffer("The tag <" + tag.getHTMLTag() +
+                            "> cannot contain the attribute '" + foundAttribute +
+                            "'. The valid attributes for this tag are: "
+                           );
+ 
+         AttributeList a = tag.getElement().getAttributes();
+ 
+         while (a != null)
+           {
+             valid.append(a.name.toUpperCase());
+             valid.append(' ');
+             a = a.next;
+           }
+         s_error(valid.toString());
+       }
+ 
+     else
+       {
+         String value = parameters.getAttribute(foundAttribute).toString();
+ 
+         if (dtdAttribute.type == DTDConstants.NUMBER)
+           validateNumberAttribute(tag, foundAttribute, value);
+ 
+         if (dtdAttribute.type == DTDConstants.NAME ||
+             dtdAttribute.type == DTDConstants.ID
+            )
+           validateNameOrIdAttribute(tag, foundAttribute, value);
+ 
+         if (dtdAttribute.values != null)
+           validateAttributeWithValueList(tag, foundAttribute, dtdAttribute,
+                                          value
+                                         );
+       }
+   }
+ 
+   private void validateAttributeWithValueList(TagElement tag,
+                                               Object foundAttribute,
+                                               AttributeList dtdAttribute,
+                                               String value
+                                              )
+   {
+     if (!dtdAttribute.values.contains(value.toLowerCase()) &&
+         !dtdAttribute.values.contains(value.toUpperCase())
+        )
+       {
+         StringBuffer valid;
+         if (dtdAttribute.values.size() == 1)
+           valid =
+             new StringBuffer("The attribute '" + foundAttribute +
+                              "' of the tag <" + tag.getHTMLTag() +
+                              "> cannot have the value '" + value +
+                              "'. The only valid value is "
+                             );
+         else
+           valid =
+             new StringBuffer("The attribute '" + foundAttribute +
+                              "' of the tag <" + tag.getHTMLTag() +
+                              "> cannot have the value '" + value + "'. The " +
+                              dtdAttribute.values.size() +
+                              " valid values are: "
+                             );
+ 
+         Enumeration vv = dtdAttribute.values.elements();
+         while (vv.hasMoreElements())
+           {
+             valid.append('"');
+             valid.append(vv.nextElement());
+             valid.append("\"  ");
+           }
+         s_error(valid.toString());
+       }
+   }
+ 
+   private void validateNameOrIdAttribute(TagElement tag, Object foundAttribute,
+                                          String value
+                                         )
+   {
+     boolean ok = true;
+ 
+     if (!Character.isLetter(value.charAt(0)))
+       ok = false;
+ 
+     char c;
+     for (int i = 0; i < value.length(); i++)
+       {
+         c = value.charAt(i);
+         if (!(
+               Character.isLetter(c) || Character.isDigit(c) ||
+               "".indexOf(c) >= 0
+             )
+            )
+           ok = false;
+       }
+     if (!ok)
+       s_error("The '" + foundAttribute + "' attribute of the tag <" +
+               tag.getHTMLTag() + "> must start from letter and consist of " +
+               "letters, digits, hypens, colons, underscores and periods. " +
+               "It cannot be '" + value + "'"
+              );
+   }
+ 
+   private void validateNumberAttribute(TagElement tag, Object foundAttribute,
+                                        String value
+                                       )
+   {
+     try
+       {
+         Integer.parseInt(value);
+       }
+     catch (NumberFormatException ex)
+       {
+         s_error("The '" + foundAttribute + "' attribute of the tag <" +
+                 tag.getHTMLTag() + "> must be a valid number and not '" +
+                 value + "'"
+                );
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* PCDATAonly_model.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.models;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * The model, allowing only PCDATA in it (like for element OPTION).
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class PCDATAonly_model
+   extends node
+   implements Serializable
+ {
+   private static final long serialVersionUID = 1;
+ 
+   public PCDATAonly_model()
+   {
+     super((char) 0, (char) 0, null);
+   }
+ 
+   public Object show(Object x)
+   {
+     return x.toString().equalsIgnoreCase("#pcdata") ? Boolean.TRUE : Boolean.FALSE;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/TableRowContentModel.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/TableRowContentModel.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/TableRowContentModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/TableRowContentModel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* TableRowContentModel.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.models;
+ 
+ import java.io.Serializable;
+ 
+ import javax.swing.text.html.parser.DTD;
+ import javax.swing.text.html.parser.Element;
+ 
+ /**
+  * Table row content model.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class TableRowContentModel
+   extends node
+   implements Serializable
+ {
+   private static final long serialVersionUID = 1;
+   final Element TD;
+ 
+   public TableRowContentModel(DTD dtd)
+   {
+     super((char) 0, (char) 0, null);
+     TD = dtd.getElement("TD");
+   }
+ 
+   public Object show(Object x)
+   {
+     // Always accept TD and TH
+     String s = x.toString();
+     if (s.equalsIgnoreCase("TD") || s.equalsIgnoreCase("TH"))
+       return Boolean.TRUE;
+ 
+     // Suggest closing in response to TR:
+     if (s.equalsIgnoreCase("TR"))
+       return Boolean.FALSE;
+ 
+     // Recommend TD for other cases:
+     return TD;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/list.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/list.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/list.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/list.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,382 ----
+ /* list.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.models;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Part of the internal representation of the content model.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class list
+   extends node
+   implements Serializable
+ {
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * Setting to true means that the list nodes must always be connected
+    * by the same operation. This is far safer and clearer, but not
+    * required by default standard.
+    */
+   public static boolean CLEAR;
+ 
+   /**
+    * A list of nodes.
+    */
+   public final node[] nodes;
+ 
+   /**
+    * Creates a new model list that is a member of some enclosing list.
+    * @param binary_operator An operator with that this list is connected
+    * with other members of the enclosing list.
+    * @param unary_operator The unary operator for this list.
+    * @param a_nodes The nodes inside this list.
+    */
+   public list(char binary_operator, char unary_operator, node[] a_nodes)
+   {
+     super(binary_operator, unary_operator, a_nodes);
+     nodes = a_nodes;
+   }
+ 
+   /**
+    * Creates a new model list. Assigns the previous field.
+    * @param a_nodes The nodes for this list.
+    * @throws an error if the node elements are connected by the
+    * different operations. This is not supported, use grouping.
+    */
+   public list(node[] a_nodes)
+        throws Error
+   {
+     this(',', (char) 0, a_nodes);
+ 
+     int operation = nodes [ 0 ].binary;
+ 
+     for (int i = 0; i < nodes.length; i++)
+       {
+         if (CLEAR && nodes [ i ].binary != operation)
+           throw new Error("List members can only be connected by " +
+                           "the same operation, use grouping"
+                          );
+ 
+         if (i > 0)
+           nodes [ i ].previous = nodes [ i - 1 ];
+       }
+   }
+ 
+   /**
+    * Returns true if all members in the list are closed.
+    */
+   public boolean isClosed()
+   {
+     if (super.isClosed())
+       return true;
+     for (int i = 0; i < nodes.length; i++)
+       {
+         if (!nodes [ i ].isClosed())
+           return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * Find the token that could match as the next token in
+    * the token list.
+    *
+    * @return Such token object or null if none is found.
+    */
+   public Object findFreeNode()
+   {
+     Object fn;
+     for (int j = 0; j < nodes.length; j++)
+       {
+         if (!nodes [ j ].isClosed())
+           {
+             fn = nodes [ j ].findFreeNode();
+             if (fn != null)
+               return fn;
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * Tries to match this list agains the given token sequence.
+    * @param tokens the sequence of the tokens to match.
+    * @return true if the valid match is found.
+    */
+   public boolean matches(Object[] tokens)
+   {
+     reset();
+ 
+     Object x;
+     boolean m;
+     boolean matched = false;
+ 
+     for (int i = 0; i < tokens.length; i++)
+       {
+         matched = false;
+         x = tokens [ i ];
+ 
+         nodescan: 
+         for (int j = 0; j < nodes.length; j++)
+           {
+             if (!nodes [ j ].isClosed())
+               {
+                 m = nodes [ j ].performMatch(x);
+ 
+                 if (m)
+                   {
+                     matched = true;
+                     break nodescan;
+                   }
+               }
+           }
+         if (!matched)
+           return false;
+       }
+ 
+     boolean valid = true;
+ 
+     for (int i = 0; i < nodes.length; i++)
+       {
+         if (!nodes [ i ].valid())
+           valid = false;
+       }
+ 
+     return valid;
+   }
+ 
+   /**
+    * The list never closes, despite it is trated as closed
+    * if all members in the list are closed.
+    * @return false.
+    */
+   public boolean mustClose()
+   {
+     return false;
+   }
+ 
+   /**
+    * Perform a match operation for the single token
+    * against this list.
+    * @param token a token to match.
+    * @return true if the match is found.
+    */
+   public boolean performMatch(Object token)
+   {
+     boolean ok = false;
+     Matching: 
+     for (int i = 0; i < nodes.length; i++)
+       {
+         ok = nodes [ i ].performMatch(token);
+ 
+         if (ok)
+           break Matching;
+       }
+ 
+     if (ok)
+       matches();
+ 
+     return ok;
+   }
+ 
+   /**
+    * Prepeares the list for the next matching operation.
+    */
+   public void reset()
+   {
+     super.reset();
+     for (int i = 0; i < nodes.length; i++)
+       nodes [ i ].reset();
+   }
+ 
+   /**
+    * Check if the provided token can match as a next token in the
+    * list. In the case of match, the list state changes, moving
+    * current position after the matched token. However if this method
+    * returns a suggested new token to insert before the provided one,
+    * the state of the list does not change.
+    * @return Boolean.TRUE if the match is found,
+    * Boolean.FALSE if the match is not possible and no token can be
+    * inserted to make the match valid. Otherwise, returns the
+    * token object that can be inserted before the last token in the
+    * list, probably (not for sure) making the match valid.
+    * If the object is an instance of Element or TagElement,
+    * it is first ensured that the object flag "omit start" is set.
+    */
+   public Object show(Object x)
+   {
+     boolean m;
+     boolean matched = false;
+ 
+     nodescan: 
+     for (int j = 0; j < nodes.length; j++)
+       {
+         if (!nodes [ j ].isClosed())
+           {
+             m = nodes [ j ].performMatch(x);
+ 
+             if (m)
+               {
+                 matched = true;
+                 break nodescan;
+               }
+             else
+               {
+                 // For comma operation, only first not closed
+                 // node must be tested for a match.
+                 // unless it allows matching zero times.
+                 if (binary == ',' &&
+                     !(nodes [ j ].unary == '?' || nodes [ j ].unary == '*')
+                    )
+                   break nodescan;
+               }
+           }
+       }
+ 
+     if (!matched)
+       {
+         // Find and return that would be matched.
+         Object freeNode = findFreeNode();
+         if (freeNode == null)
+           return Boolean.FALSE;
+         else
+           return freeNode;
+       }
+ 
+     for (int i = 0; i < nodes.length; i++)
+       if (!nodes [ i ].validPreliminary())
+         {
+           return Boolean.FALSE;
+         }
+ 
+     return Boolean.TRUE;
+   }
+ 
+   /**
+    * Returns a string representation of the list.
+    * @return String representation, similar to BNF expression.
+    */
+   public String toString()
+   {
+     StringBuffer b = new StringBuffer();
+     b.append(" ( ");
+     for (int i = 0; i < nodes.length; i++)
+       {
+         if (i > 0)
+           b.append(" " + (char) nodes [ i ].binary + " ");
+         b.append(nodes [ i ]);
+       }
+ 
+     b.append(" )");
+     if (unary != 0)
+       b.append((char) unary);
+     else
+       b.append(' ');
+     return b.toString();
+   }
+ 
+   /**
+    * Returns true if all memebers in the list are valid.
+    */
+   public boolean valid()
+   {
+     for (int i = 0; i < nodes.length; i++)
+       {
+         if (!nodes [ i ].valid())
+           return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * Returns true if all memebers in the list are either valid
+    * or unvisited. The unvisited members can become valid after
+    * more tokens will be shown.
+    */
+   public boolean validPreliminary()
+   {
+     if (silenceAllowed())
+       {
+         boolean everVisited = false;
+         for (int i = 0; i < nodes.length; i++)
+           {
+             if (nodes [ i ].visits > 0)
+               {
+                 everVisited = true;
+                 break;
+               }
+           }
+         if (!everVisited)
+           return true;
+       }
+ 
+     for (int i = 0; i < nodes.length; i++)
+       {
+         if (!nodes [ i ].validPreliminary())
+           return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * Closes all members in the list.
+    */
+   protected void close()
+   {
+     super.close();
+     for (int i = 0; i < nodes.length; i++)
+       {
+         nodes [ i ].close();
+       }
+   }
+ 
+   /**
+    * Compare given token with the token of this node.
+    * If the token represents a <code>list</code>, the call may be
+    * delegeted to the child subnodes.
+    * @param a_token A token to compare.
+    * @return True if the token matches the token of this node.
+    */
+   protected boolean compare(Object a_token)
+   {
+     return performMatch(a_token);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/noTagModel.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/noTagModel.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/noTagModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/noTagModel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* noTagModel.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.models;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Disallows a single given tag at the current content level only.
+  * <p>@author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)</p>
+  */
+ public class noTagModel
+   extends node
+   implements Serializable
+ {
+   private static final long serialVersionUID = 1;
+   final String[] no;
+ 
+   public noTagModel(String[] noTag)
+   {
+     super((char) 0, (char) 0, null);
+     no = noTag;
+   }
+ 
+   public noTagModel(String noTag)
+   {
+     super((char) 0, (char) 0, null);
+     no = new String[] { noTag };
+   }
+ 
+   public Object show(Object x)
+   {
+     for (int i = 0; i < no.length; i++)
+       {
+         if (x.toString().equalsIgnoreCase(no [ i ]))
+           return Boolean.FALSE;
+       }
+     return Boolean.TRUE;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/node.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/node.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/node.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/node.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,337 ----
+ /* node.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.models;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Part of the internal representation of the content model.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class node
+   implements Serializable
+ {
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * The token to match (can be instance of list).
+    */
+   public Object token;
+ 
+   /**
+    * True for the node that cannot be visited again.
+    */
+   public boolean _closed;
+ 
+   /**
+    * The binary operation for this node.
+    */
+   public char binary;
+ 
+   /**
+    * The unary opeation for this node.
+    */
+   public char unary;
+ 
+   /**
+    * The number of times the node already was visited.
+    */
+   public int visits;
+ 
+   /**
+    * The previous node in content model (used for closing nodes).
+    */
+   public node previous;
+ 
+   /**
+    * Creates a new node.
+    * @param binary_operator The operator, connecting all nodes in the list.
+    * The nodes, connected by the different operators, must be arranged into
+    * the different lists.
+    * @param unary_operator The unary operator for this node or zero if
+    * no such was specified.
+    * @param token The token to match. This can be either a string or
+    * the new instance of the list.
+    * @param a_previous The previous node in the list, null for the first
+    * node. This is used for propagating the closing operation for the
+    * comma delimited list.
+    */
+   public node(char binary_operator, char unary_operator, Object a_token)
+   {
+     if (a_token != null)
+       if (a_token.getClass().equals(node.class))
+         throw new Error("Creating node in node is redundant and ineffective.");
+ 
+     binary = binary_operator;
+     unary = unary_operator;
+     token = a_token;
+   }
+ 
+   /**
+    * Checks if this node is in the closed state.
+    * @return True if the node is closed.
+    */
+   public boolean isClosed()
+   {
+     return _closed;
+   }
+ 
+   /**
+    * Check if closing this node means closing the previous node.
+    */
+   public boolean closePrevious()
+   {
+     return binary == ',';
+   }
+ 
+   /**
+    * Return the token object if it could match as a next token in
+    * a token list of null if it could not.
+    * @return
+    */
+   public Object findFreeNode()
+   {
+     boolean ok;
+     if (isClosed() || silenceAllowed())
+       return null;
+ 
+     // Try if the node would stay valid after a one more visit.
+     visits++;
+     ok = valid();
+     visits--;
+ 
+     if (ok)
+       {
+         if (token instanceof node)
+           return ((node) token).findFreeNode();
+         else
+           return token;
+       }
+     else
+       return null;
+   }
+ 
+   /**
+    * Check if the current situation is such that the node must be closed
+    * now.
+    */
+   public boolean mustClose()
+   {
+     switch (unary)
+       {
+         case 0 :
+           return true;
+ 
+         case '*' :
+           return false;
+ 
+         case '+' :
+           return false;
+ 
+         case '?' :
+           return visits <= 1;
+ 
+         default :
+           throw new Error("Invalid unary operation " + unary + " ( '" +
+                           (char) unary + "' )"
+                          );
+       }
+   }
+ 
+   /**
+    * Do the match operation with the given token. This sets various
+    * flags.
+    * @param token The token to match.
+    * @return true if the the token matches node, false if it does not match
+    * or if the node is closed.
+    */
+   public boolean performMatch(Object a_token)
+   {
+     if (isClosed())
+       return false;
+ 
+     boolean matches = compare(a_token);
+     if (matches)
+       matches();
+ 
+     return matches;
+   }
+ 
+   /**
+    * Prepares the node for matching against a new list of tokens.
+    */
+   public void reset()
+   {
+     _closed = false;
+     visits = 0;
+   }
+ 
+   /**
+    * Check if the provided token can match this node.
+    * In the case of match, the node state changes, moving
+    * current position after the matched token. However if this method
+    * returns a suggested new token to insert before the provided one,
+    * the state of the list does not change.
+    * @return Boolean.TRUE if the match is found,
+    * Boolean.FALSE if the match is not possible and no token can be
+    * inserted to make the match valid. Otherwise, returns the
+    * token object that can be inserted before the last token in the
+    * list, probably (not for sure) making the match valid.
+    */
+   public Object show(Object x)
+   {
+     if (compare(x))
+       return performMatch(x) ? Boolean.TRUE : Boolean.FALSE;
+ 
+     Object recommended = findFreeNode();
+     return recommended != null ? recommended : Boolean.FALSE;
+   }
+ 
+   /**
+    * Check if it would be a valid case if this node is visited zero times.
+    * Nodes with unary operator * or ? need not be matched to make a
+    * model valid.
+    */
+   public boolean silenceAllowed()
+   {
+     return unary == '?' || unary == '*';
+   }
+ 
+   /**
+    * Returns a string representation of the list.
+    * @return String representation, similar to BNF expression.
+    */
+   public String toString()
+   {
+     StringBuffer b = new StringBuffer();
+ 
+     b.append(token);
+     if (unary != 0)
+       b.append((char) unary);
+     else
+       b.append('\'');
+ 
+     return b.toString();
+   }
+ 
+   /**
+    * Check if the node state is valid.
+    */
+   public boolean valid()
+   {
+     switch (unary)
+       {
+         case 0 :
+           if (binary == '|')
+             return true;
+           else
+             return visits == 1;
+ 
+         case '*' :
+           return true;
+ 
+         case '+' :
+           return visits > 0;
+ 
+         case '?' :
+           return visits <= 1;
+ 
+         default :
+           throw new Error("Invalid unary operation " + unary + " ( '" +
+                           (char) unary + "' )"
+                          );
+       }
+   }
+ 
+   public boolean validPreliminary()
+   {
+     return visits == 0 || valid();
+   }
+ 
+   /**
+   * Closes this node and, if closePrevious() returs true, calls close() for
+   * the previous node.
+   */
+   protected void close()
+   {
+     _closed = true;
+     if (previous != null && closePrevious())
+       previous.close();
+   }
+ 
+   /**
+    * Compare the provided token object with the token object of this node.
+    */
+   protected boolean compare(Object a_token)
+   {
+     if (token instanceof Object[])
+       throw new Error("Invalid token object, probably the 'list' " +
+                       "should be used. "
+                      );
+ 
+     if (token instanceof node[])
+       throw new Error("Do not use 'node' for the array of nodes, use 'list'. ");
+ 
+     if (token instanceof node)
+       {
+         return ((node) token).performMatch(a_token);
+       }
+ 
+     boolean rt = false;
+ 
+     if (token == a_token)
+       rt = true;
+     if (token.equals(a_token))
+       rt = true;
+     if (token.toString().equalsIgnoreCase(a_token.toString()))
+       rt = true;
+ 
+     return rt;
+   }
+ 
+   /**
+    * Fire the changes that must happen then the token matches this node.
+    */
+   protected void matches()
+   {
+     visits++;
+     if (mustClose())
+       close();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/package.html gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/package.html
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.swing.text.html.parser package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.javax.swing.text.html.parser.models</title></head>
+ 
+ <body>
+ <p>This package contains classes for working with content models. In this implementation, the
+ standardized content model is pre-processed by <code>transformer</code> into an instance of 
+ <code>node</code>. Node holds a single element of the content model with the optional unary operation.
+ The derived class <code>list</code> holds multiple nodes connected by the same binary operation.
+ As the members of this <code>list</code> can also be lists itself, these structures support
+ the most of required operations. Several cases when the model cannot be expressed using
+ BNF syntax are handled providing specialised classes that are also derived from <code>node</code>.
+ </p>
+ @author Audrius Meskauskas, Lithuania
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/transformer.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/transformer.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/models/transformer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/models/transformer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,201 ----
+ /* transformer.java -- Content model transforms.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.models;
+ 
+ import java.io.Serializable;
+ 
+ import javax.swing.text.html.parser.ContentModel;
+ import javax.swing.text.html.parser.DTD;
+ 
+ /**
+  * Transforms the standard ContentModel tree into the internal representation,
+  * used in this implementation.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class transformer
+   implements Serializable
+ {
+   private static final long serialVersionUID = 1;
+ 
+   /**
+    * All binary operators.
+    */
+   protected static String binary = "&|,";
+ 
+   /**
+    * All unary operators.
+    */
+   protected static String unary = "+*?";
+ 
+   /**
+    * Measure length of the linked list of the content models.
+    * @param c The heading element of the linked list.
+    * @return the length of the list (0 for null 1 if c!=null and c.next==null,
+    * etc.
+    */
+   public static int measureChainLength(ContentModel c)
+   {
+     if (c == null)
+       return 0;
+     else
+       return measureChainLength(c.next) + 1;
+   }
+ 
+   /**
+    * Transform into internal representation without usind dtd.
+    * This should be used only for testing.
+    */
+   public static node transform(ContentModel c)
+   {
+     return transform(c, null);
+   }
+ 
+   /**
+    * Transform into internal representation.
+    * @param c a model to transform
+    * @return a transformed model
+    * @throws Error if the model structure contains errors.
+    */
+   public static node transform(ContentModel c, DTD dtd)
+   {
+     // Handle the special cases first.
+     if (c.content instanceof node)
+       return (node) c.content;
+ 
+     // Do the typical transform.
+     node n;
+ 
+     /* Case with the single token */
+     if (c.next == null)
+       {
+         n = optionalTransform(c, dtd);
+       }
+     else /* Case with the chain of the multiple tokens. */
+       {
+         node[] l = new node[ measureChainLength(c) ];
+         ContentModel m = c;
+         for (int i = 0; i < l.length; i++)
+           {
+             if (m.content instanceof ContentModel)
+               {
+                 ContentModel nested = (ContentModel) m.content;
+                 if (nested.next == null &&
+                     !(nested.content instanceof ContentModel)
+                    )
+                   {
+                     l [ i ] =
+                       new node((char) m.type, (char) nested.type, nested.content);
+                   }
+                 else
+                   {
+                     l [ i ] = transform(nested, dtd);
+                   }
+               }
+             else
+               l [ i ] = new node((char) 0, (char) 0, m.content);
+             addtype(l [ i ], (char) m.type);
+             m = m.next;
+           }
+ 
+         if (isBinary(c.type))
+           for (int i = 0; i < l.length; i++)
+             {
+               l [ i ].binary = (char) c.type;
+             }
+ 
+         n = new list(l);
+       }
+ 
+     addtype(n, (char) c.type);
+ 
+     return n;
+   }
+ 
+   /**
+    * True for binary operator
+    * @param c a character to test
+    * @return true for [ ,&| ], false otherwise.
+    */
+   private static boolean isBinary(int c)
+   {
+     return binary.indexOf((char) c) >= 0;
+   }
+ 
+   /**
+    * True for unary operator.
+    * @param c a character to test
+    * @return true for [ +?* ], false otherwise.
+    */
+   private static boolean isUnary(int c)
+   {
+     return unary.indexOf((char) c) >= 0;
+   }
+ 
+   /**
+    * Assign an operation type for the given node.
+    * @param n A node to set the operation to.
+    * @param type Either binary or unary operation, is assigned to the
+    * corresponding field of the node.
+    * @throws error if the operation type is not
+    * representing a valid unary or binary operation.
+    */
+   private static void addtype(node n, char type)
+   {
+     if (isBinary(type))
+       n.binary = type;
+ 
+     else if (isUnary(type))
+       n.unary = type;
+ 
+     else if (type != 0)
+       throw new Error("Invalid operation '" + (char) type + "'");
+   }
+ 
+   private static node optionalTransform(ContentModel c, DTD dtd)
+   {
+     node n;
+     if (c.content instanceof ContentModel)
+       n = transform((ContentModel) c.content, dtd);
+     else
+ 
+       /* A single token with the specified operation */
+       n = new node((char) 0, (char) 0, c.content);
+     return n;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/package.html gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/package.html
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.swing.text.html.parser package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - javax.swing.text.html.parser</title></head>
+ 
+ <body>
+ <p>Provides the error tolerant, DTD-driven HTML 4.01 parser.
+ The parser that is used in web robots, html content analysers, 
+ web browsers, web editors and other related applications. 
+ It should compativle with the older HTML versions, supporting
+ obsoleted HTML featues. This package also includes some 
+ supporting classes.</p>
+ @author Audrius Meskauskas, Lithuania
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1443 ----
+ /* Parser.java -- HTML parser.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support;
+ 
+ import gnu.javax.swing.text.html.parser.htmlAttributeSet;
+ import gnu.javax.swing.text.html.parser.htmlValidator;
+ import gnu.javax.swing.text.html.parser.support.low.Constants;
+ import gnu.javax.swing.text.html.parser.support.low.ParseException;
+ import gnu.javax.swing.text.html.parser.support.low.ReaderTokenizer;
+ import gnu.javax.swing.text.html.parser.support.low.Token;
+ import gnu.javax.swing.text.html.parser.support.low.node;
+ import gnu.javax.swing.text.html.parser.support.low.pattern;
+ 
+ import java.io.IOException;
+ import java.io.Reader;
+ 
+ import java.util.Comparator;
+ import java.util.Set;
+ import java.util.TreeSet;
+ import java.util.Vector;
+ 
+ import javax.swing.text.ChangedCharSetException;
+ import javax.swing.text.html.HTML;
+ import javax.swing.text.html.parser.AttributeList;
+ import javax.swing.text.html.parser.DTD;
+ import javax.swing.text.html.parser.DTDConstants;
+ import javax.swing.text.html.parser.Element;
+ import javax.swing.text.html.parser.Entity;
+ import javax.swing.text.html.parser.TagElement;
+ 
+ /**
+  * <p>A simple error-tolerant HTML parser that uses a DTD document
+  * to access data on the possible tokens, arguments and syntax.</p>
+  * <p> The parser reads an HTML content from a Reader and calls various
+  * notifying methods (which should be overridden in a subclass)
+  * when tags or data are encountered.</p>
+  * <p>Some HTML elements need no opening or closing tags. The
+  * task of this parser is to invoke the tag handling methods also when
+  * the tags are not explicitly specified and must be supposed using
+  * information, stored in the DTD.
+  * For  example, parsing the document
+  * <p>&lt;table&gt;&lt;tr&gt;&lt;td&gt;a&lt;td&gt;b&lt;td&gt;c&lt;/tr&gt; <br>
+  * will invoke exactly the handling methods exactly in the same order
+  * (and with the same parameters) as if parsing the document: <br>
+  * <em>&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;table&gt;&lt;
+  * tbody&gt;</em>&lt;tr&gt;&lt;td&gt;a<em>&lt;/td&gt;</em>&lt;td&gt;b<em>
+  * &lt;/td&gt;</em>&lt;td&gt;c<em>&lt;/td&gt;&lt;/tr&gt;</em>&lt;
+  * <em>/tbody&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</em></p>
+  * (supposed tags are given in italics). The parser also supports
+  * obsolete elements of HTML syntax.<p>
+  * </p>
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Parser
+   extends ReaderTokenizer
+   implements DTDConstants
+ {
+   /**
+    * The current html tag.
+    */
+   public Token hTag = new Token();
+ 
+   /**
+    * The document template description that will be used to parse the documents.
+    */
+   protected DTD dtd;
+ 
+   /**
+    * The value of this field determines whether or not the Parser will be
+    * strict in enforcing SGML compatibility. The default value is false,
+    * stating that the parser should do everything to parse and get at least
+    * some information even from the incorrectly written HTML input.
+    */
+   protected boolean strict;
+ 
+   /**
+    * This fields has positive values in preformatted tags.
+    */
+   protected int preformatted = 0;
+ 
+   /**
+    * The set of the document tags. This field is used for supporting
+    * markFirstTime().
+    */
+   private Set documentTags =
+     new TreeSet(new Comparator()
+       {
+         public int compare(Object a, Object b)
+         {
+           return ((String) a).compareToIgnoreCase((String) b);
+         }
+       }
+                );
+ 
+   /**
+   * The buffer to collect the incremental output like text or coment.
+   */
+   private StringBuffer buffer = new StringBuffer();
+ 
+   /**
+    * The buffer to store the document title.
+    */
+   private StringBuffer title = new StringBuffer();
+ 
+   /**
+    * The current token.
+    */
+   private Token t;
+ 
+   /**
+    * True means that the 'title' tag of this document has
+    * already been handled.
+    */
+   private boolean titleHandled;
+ 
+   /**
+    * True means that the 'title' tag is currently open and all
+    * text is also added to the title buffer.
+    */
+   private boolean titleOpen;
+ 
+   /**
+    * The attributes of the current HTML element.
+    * Package-private to avoid an accessor method.
+    */
+   htmlAttributeSet attributes =
+     htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET;
+ 
+   /**
+    * The validator, controlling the forcible closing of the tags that
+    * (in accordance to dtd) are not allowed in the current context.
+    */
+   private htmlValidator validator;
+ 
+   /**
+    * Provides the default values for parameters in the case when these
+    * values are defined in the DTD.
+    */
+   private parameterDefaulter defaulter;
+ 
+   /**
+    * The text pre-processor for handling line ends and tabs.
+    */
+   private textPreProcessor textProcessor = new textPreProcessor();
+ 
+   /**
+    * Creates a new Parser that uses the given
+    * {@link javax.swing.text.html.parser.DTD }. The only standard way
+    * to get an instance of DTD is to construct it manually, filling in
+    * all required fields.
+    * @param a_dtd The DTD to use. The parser behaviour after passing null
+    * as an argument is not documented and may vary between implementations.
+    */
+   public Parser(DTD a_dtd)
+   {
+     if (a_dtd == null)
+       dtd = gnu.javax.swing.text.html.parser.HTML_401F.getInstance();
+     else
+       dtd = a_dtd;
+ 
+     defaulter = new parameterDefaulter(dtd);
+ 
+     validator =
+       new htmlValidator(dtd)
+         {
+           /**
+            * Handles the error message. This method must be overridden to pass
+            * the message where required.
+            * @param msg The message text.
+            */
+           protected void s_error(String msg)
+           {
+             error(msg);
+           }
+ 
+           /**
+            * The method is called when the tag validator decides to close the
+            * tag on its own initiative. After reaching the end of stream,
+            * The tag validator closes all unclosed elements that are required
+            * to have the end (closing) tag.
+            *
+            * @param element The tag being fictionally (forcibly) closed.
+            */
+           protected void handleSupposedEndTag(Element tElement)
+           {
+             // The tag is cloned as the original tElement is the
+             // element from the starting tag - may be accidently used
+             // somewhere else.
+             TagElement tag = makeTag(tElement, true);
+             _handleEndTag_remaining(tag);
+           }
+ 
+           /**
+            * The method is called when the the tag validator decides to open
+            * the new tag on its own initiative. The tags, opened in this
+            * way, are HTML, HEAD and BODY. The attribute set is temporary
+            * assigned to the empty one, the previous value is
+            * restored before return.
+            *
+            * @param element The tag being fictionally (forcibly) closed.
+            */
+           protected void handleSupposedStartTag(Element tElement)
+           {
+             TagElement tag = makeTag(tElement, true);
+             htmlAttributeSet were = attributes;
+             attributes = htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET;
+             _handleStartTag(tag);
+             attributes = were;
+           }
+         };
+   }
+ 
+   /**
+    * Get the attributes of the current tag.
+    * @return The attribute set, representing the attributes of the current tag.
+    */
+   public htmlAttributeSet getAttributes()
+   {
+     return attributes;
+   }
+ 
+   /**
+    * Invokes the error handler. The default method in this implementation
+    * delegates the call to handleError, also providing the current line.
+    */
+   public void error(String msg)
+   {
+     error(msg, getTokenAhead());
+   }
+ 
+   public void error(String msg, Token atToken)
+   {
+     if (atToken != null)
+       handleError(atToken.where.beginLine,
+                   msg + ": line " + atToken.where.beginLine +
+                   ", absolute pos " + atToken.where.startPosition
+                  );
+     else
+       handleError(0, msg);
+   }
+ 
+   /**
+    * Invokes the error handler. The default method in this implementation
+    * delegates the call to error (parm1+": '"+parm2+"'").
+    */
+   public void error(String msg, String invalid)
+   {
+     error(msg + ": '" + invalid + "'");
+   }
+ 
+   /**
+    * Invokes the error handler. The default method in this implementation
+    * delegates the call to error (parm1+" "+ parm2+" "+ parm3).
+    */
+   public void error(String parm1, String parm2, String parm3)
+   {
+     error(parm1 + " " + parm2 + " " + parm3);
+   }
+ 
+   /**
+    * Invokes the error handler. The default method in this implementation
+    * delegates the call to error (parm1+" "+ parm2+" "+ parm3+" "+ parm4).
+    */
+   public void error(String parm1, String parm2, String parm3, String parm4)
+   {
+     error(parm1 + " " + parm2 + " " + parm3 + " " + parm4);
+   }
+ 
+   public void flushAttributes()
+   {
+   }
+ 
+   /**
+    * Parse the HTML text, calling various methods in response to the
+    * occurence of the corresponding HTML constructions.
+    * @param reader The reader to read the source HTML from.
+    * @throws IOException If the reader throws one.
+    */
+   public synchronized void parse(Reader reader)
+                           throws IOException
+   {
+     reset(reader);
+     restart();
+     try
+       {
+         parseDocument();
+         validator.closeAll();
+       }
+     catch (ParseException ex)
+       {
+         if (ex != null)
+           {
+             error("Unable to continue parsing the document", ex.getMessage());
+ 
+             Throwable cause = ex.getCause();
+             if (cause instanceof IOException)
+               throw (IOException) cause;
+           }
+       }
+   }
+ 
+   /**
+    * Parses DTD markup declaration. Currently returns null without action.
+    * @return null.
+    * @throws IOException
+    */
+   public String parseDTDMarkup()
+                         throws IOException
+   {
+     return null;
+   }
+ 
+   /**
+    * Parse SGML insertion ( &lt;! ... &gt; ). When the
+    * the SGML insertion is found, this method is called, passing
+    * SGML in the string buffer as a parameter. The default method
+    * returns false without action and can be overridden to
+    * implement user - defined SGML support.
+    * <p>
+    * If you need more information about SGML insertions in HTML documents,
+    * the author suggests to read SGML tutorial on
+    * {@link http://www.w3.org/TR/WD-html40-970708/intro/sgmltut.html}.
+    * We also recommend Goldfarb C.F (1991) <i>The SGML Handbook</i>,
+    * Oxford University Press, 688 p, ISBN: 0198537379.
+    * </p>
+    * @param strBuff
+    * @return true if this is a valid DTD markup declaration.
+    * @throws IOException
+    */
+   public boolean parseMarkupDeclarations(StringBuffer strBuff)
+                                   throws IOException
+   {
+     return false;
+   }
+ 
+   /**
+    * Get the first line of the last parsed token.
+    */
+   protected int getCurrentLine()
+   {
+     return hTag.where.beginLine;
+   }
+ 
+   /**
+    * Read parseable character data, add to buffer.
+    * @param clearBuffer If true, buffer if filled by CDATA section,
+    * otherwise the section is appended to the existing content of the
+    * buffer.
+    *
+    * @throws ParseException
+    */
+   protected void CDATA(boolean clearBuffer)
+                 throws ParseException
+   {
+     Token start = hTag = getTokenAhead();
+ 
+     if (clearBuffer)
+       buffer.setLength(0);
+ 
+     // Handle expected EOF.
+     if (start.kind == EOF)
+       return;
+ 
+     read: 
+     while (true)
+       {
+         t = getTokenAhead();
+         if (t.kind == EOF)
+           {
+             error("unexpected eof", t);
+             break read;
+           }
+         else if (t.kind == BEGIN)
+           break read;
+         else if (t.kind == Constants.ENTITY)
+           {
+             resolveAndAppendEntity(t);
+             getNextToken();
+           }
+         else
+           {
+             append(t);
+             getNextToken();
+           }
+       }
+     hTag = new Token(start, getTokenAhead(0));
+     if (buffer.length() != 0)
+       _handleText();
+   }
+ 
+   /**
+   * Process Comment. This method skips till --> without
+   * taking SGML constructs into consideration.  The supported SGML
+   * constructs are handled separately.
+   */
+   protected void Comment()
+                   throws ParseException
+   {
+     buffer.setLength(0);
+ 
+     Token start = hTag = mustBe(BEGIN);
+     optional(WS);
+     mustBe(EXCLAMATION);
+     optional(WS);
+     mustBe(DOUBLE_DASH);
+ 
+     Token t;
+     Token last;
+ 
+     comment: 
+     while (true)
+       {
+         t = getTokenAhead();
+         if (t.kind == EOF)
+           {
+             handleEOFInComment();
+             last = t;
+             break comment;
+           }
+         else if (COMMENT_END.matches(this))
+           {
+             mustBe(DOUBLE_DASH);
+             optional(WS);
+             last = mustBe(END);
+             break comment;
+           }
+         else if (COMMENT_TRIPLEDASH_END.matches(this))
+           {
+             mustBe(DOUBLE_DASH);
+             t = mustBe(NUMTOKEN);
+             if (t.getImage().equals("-"))
+               {
+                 append(t);
+                 last = mustBe(END);
+                 break comment;
+               }
+             else
+               {
+                 buffer.append("--");
+                 append(t);
+                 t = getTokenAhead();
+               }
+           }
+         else
+         /* The lllll-- can match as NUMTOKEN */
+         if ((t.getImage().endsWith("--")) &&
+             (
+               getTokenAhead(1).kind == END ||
+               (getTokenAhead(1).kind == WS && getTokenAhead(2).kind == END)
+             )
+            )
+           {
+             buffer.append(t.getImage().substring(0, t.getImage().length() - 2));
+ 
+             /* Skip the closing > that we have already checked. */
+             last = mustBe(t.kind);
+             break comment;
+           }
+         else
+           append(t);
+         mustBe(t.kind);
+       }
+     hTag = new Token(start, last);
+     handleComment();
+   }
+ 
+   /**
+   * Read a script. The text, returned without any changes,
+   * is terminated only by the closing tag SCRIPT.
+   */
+   protected void Script()
+                  throws ParseException
+   {
+     Token name;
+ 
+     Token start = hTag = mustBe(BEGIN);
+     optional(WS);
+ 
+     name = mustBe(SCRIPT);
+ 
+     optional(WS);
+ 
+     restOfTag(false, name, start);
+ 
+     buffer.setLength(0);
+ 
+     script: 
+     while (!SCRIPT_CLOSE.matches(this))
+       {
+         append(getNextToken());
+       }
+ 
+     consume(SCRIPT_CLOSE);
+ 
+     _handleText();
+ 
+     endTag(false);
+     _handleEndTag(makeTagElement(name.getImage(), false));
+   }
+ 
+   /**
+   * Process SGML insertion that is not a comment.
+   */
+   protected void Sgml()
+                throws ParseException
+   {
+     if (COMMENT_OPEN.matches(this))
+       Comment();
+     else // skip till ">"
+       {
+         Token start = hTag = mustBe(BEGIN);
+         optional(WS);
+         mustBe(EXCLAMATION);
+ 
+         buffer.setLength(0);
+         read: 
+         while (true)
+           {
+             t = getNextToken();
+             if (t.kind == Constants.ENTITY)
+               {
+                 resolveAndAppendEntity(t);
+               }
+             else if (t.kind == EOF)
+               {
+                 error("unexpected eof", t);
+                 break read;
+               }
+             else if (t.kind == END)
+               break read;
+             else
+               append(t);
+           }
+ 
+         try
+           {
+             parseMarkupDeclarations(buffer);
+           }
+         catch (IOException ex)
+           {
+             error("Unable to parse SGML insertion: '" + buffer + "'",
+                   new Token(start, t)
+                  );
+           }
+       }
+   }
+ 
+   /**
+   * Read a style definition. The text, returned without any changes,
+   * is terminated only by the closing tag STYLE.
+   */
+   protected void Style()
+                 throws ParseException
+   {
+     Token name;
+ 
+     Token start = hTag = mustBe(BEGIN);
+     optional(WS);
+ 
+     name = mustBe(STYLE);
+ 
+     optional(WS);
+ 
+     restOfTag(false, name, start);
+ 
+     buffer.setLength(0);
+ 
+     style: 
+     while (!STYLE_CLOSE.matches(this))
+       {
+         append(getNextToken());
+       }
+ 
+     consume(STYLE_CLOSE);
+ 
+     _handleText();
+ 
+     endTag(false);
+     _handleEndTag(makeTagElement(name.getImage(), false));
+   }
+ 
+   /**
+    * Read a html tag.
+    */
+   protected void Tag()
+               throws ParseException
+   {
+     mark(true);
+ 
+     boolean closing = false;
+     Token name;
+     Token start = hTag = mustBe(BEGIN);
+ 
+     optional(WS);
+     name = getNextToken();
+     optional(WS);
+ 
+     if (name.kind == SLASH)
+       {
+         closing = true;
+         name = getNextToken();
+       }
+ 
+     restOfTag(closing, name, start);
+   }
+ 
+   /**
+    * A hook, for operations, preceeding call to handleText.
+    * Handle text in a string buffer.
+    * In non - preformatted mode, all line breaks immediately following the
+    * start tag and immediately before an end tag is discarded,
+    * \r, \n and \t are replaced by spaces, multiple space are replaced
+    * by the single one and the result is  moved into array,
+    * passing it  to handleText().
+    */
+   protected void _handleText()
+   {
+     char[] text;
+ 
+     if (preformatted > 0)
+       text = textProcessor.preprocessPreformatted(buffer);
+     else
+       text = textProcessor.preprocess(buffer);
+ 
+     if (text != null && text.length > 0)
+       {
+         TagElement pcdata = new TagElement(dtd.getElement("#pcdata"));
+         attributes = htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET;
+         _handleEmptyTag(pcdata);
+ 
+         handleText(text);
+         if (titleOpen)
+           title.append(text);
+       }
+   }
+ 
+   /**
+    * Add the image of this token to the buffer.
+    * @param t A token to append.
+    */
+   protected final void append(Token t)
+   {
+     if (t.kind != EOF)
+       t.appendTo(buffer);
+   }
+ 
+   /**
+    * Consume pattern that must match.
+    * @param p A pattern to consume.
+    */
+   protected final void consume(pattern p)
+   {
+     node n;
+     for (int i = 0; i < p.nodes.length; i++)
+       {
+         n = p.nodes [ i ];
+         if (n.optional)
+           optional(n.kind);
+         else
+           mustBe(n.kind);
+       }
+   }
+ 
+   /**
+    * The method is called when the HTML end (closing) tag is found or if
+    * the parser concludes that the one should be present in the
+    * current position. The method is called immediatly
+    * before calling the handleEndTag().
+    * @param omitted True if the tag is no actually present in the document,
+    * but is supposed by the parser (like &lt;/html&gt; at the end of the
+    * document).
+    */
+   protected void endTag(boolean omitted)
+   {
+   }
+ 
+   /**
+    * Handle HTML comment. The default method returns without action.
+    * @param comment
+    */
+   protected void handleComment(char[] comment)
+   {
+   }
+ 
+   /**
+    * This is additionally called in when the HTML content terminates
+    * without closing the HTML comment. This can only happen if the
+    * HTML document contains errors (for example, the closing --;gt is
+    * missing.
+    */
+   protected void handleEOFInComment()
+   {
+     error("Unclosed comment");
+   }
+ 
+   /**
+    * Handle the tag with no content, like &lt;br&gt;. The method is
+    * called for the elements that, in accordance with the current DTD,
+    * has an empty content.
+    * @param The tag being handled.
+    * @throws javax.swing.text.ChangedCharSetException
+    */
+   protected void handleEmptyTag(TagElement tag)
+                          throws javax.swing.text.ChangedCharSetException
+   {
+   }
+ 
+   /**
+    * The method is called when the HTML closing tag ((like &lt;/table&gt;)
+    * is found or if the parser concludes that the one should be present
+    * in the current position.
+    * @param The tag
+    */
+   protected void handleEndTag(TagElement tag)
+   {
+   }
+ 
+   /* Handle error that has occured in the given line. */
+   protected void handleError(int line, String message)
+   {
+   }
+ 
+   /**
+    * The method is called when the HTML opening tag ((like &lt;table&gt;)
+    * is found or if the parser concludes that the one should be present
+    * in the current position.
+    * @param The tag
+    */
+   protected void handleStartTag(TagElement tag)
+   {
+   }
+ 
+   /**
+    * Handle the text section.
+    * <p> For non-preformatted section, the parser replaces
+    * \t, \r and \n by spaces and then multiple spaces
+    * by a single space. Additionaly, all whitespace around
+    * tags is discarded.
+    * </p>
+    * <p> For pre-formatted text (inside TEXAREA and PRE), the parser preserves
+    * all tabs and spaces, but removes <b>one</b>  bounding \r, \n or \r\n,
+    * if it is present. Additionally, it replaces each occurence of \r or \r\n
+    * by a single \n.</p>
+    *
+    * @param text A section text.
+    */
+   protected void handleText(char[] text)
+   {
+   }
+ 
+   /**
+    * Handle HTML &lt;title&gt; tag. This method is invoked when
+    * both title starting and closing tags are already behind.
+    * The passed argument contains the concatenation of all
+    * title text sections.
+    * @param The title text.
+    */
+   protected void handleTitle(char[] title)
+   {
+   }
+ 
+   /**
+    * Constructs the tag from the given element. In this implementation,
+    * this is defined, but never called.
+    * @return the tag
+    */
+   protected TagElement makeTag(Element element)
+   {
+     return makeTag(element, false);
+   }
+ 
+   /**
+    * Constructs the tag from the given element.
+    * @param the tag base {@link javax.swing.text.html.parser.Element}
+    * @param isSupposed true if the tag is not actually present in the
+    * html input, but the parser supposes that it should to occur in
+    * the current location.
+    * @return the tag
+    */
+   protected TagElement makeTag(Element element, boolean isSupposed)
+   {
+     return new TagElement(element, isSupposed);
+   }
+ 
+   /**
+    * This is called when the tag, representing the given element,
+    * occurs first time in the document.
+    * @param element
+    */
+   protected void markFirstTime(Element element)
+   {
+   }
+ 
+   /**
+    * Consume the token that was checked before and hence MUST be present.
+    * @param kind The kind of token to consume.
+    */
+   protected Token mustBe(int kind)
+   {
+     if (getTokenAhead().kind == kind)
+       return getNextToken();
+     else
+       {
+         String ei = "";
+         if (kind < 1000)
+           ei = " ('" + (char) kind + "') ";
+         throw new AssertionError("The token of kind " + kind + ei +
+                                  " MUST be here,"
+                                 );
+       }
+   }
+ 
+   /**
+    * Handle attribute without value. The default method uses
+    * the only allowed attribute value from DTD.
+    * If the attribute is unknown or allows several values,
+    * the HTML.NULL_ATTRIBUTE_VALUE is used. The attribute with
+    * this value is added to the attribute set.
+    * @param element The name of element.
+    * @param attribute The name of attribute without value.
+    */
+   protected void noValueAttribute(String element, String attribute)
+   {
+     Object value = HTML.NULL_ATTRIBUTE_VALUE;
+ 
+     Element e = (Element) dtd.elementHash.get(element.toLowerCase());
+     if (e != null)
+       {
+         AttributeList attr = e.getAttribute(attribute);
+         if (attr != null)
+           {
+             Vector values = attr.values;
+             if (values != null && values.size() == 1)
+               value = values.get(0);
+           }
+       }
+     attributes.addAttribute(attribute, value);
+   }
+ 
+   /**
+    * Consume the optional token, if present.
+    * @param kind The kind of token to consume.
+    */
+   protected Token optional(int kind)
+   {
+     if (getTokenAhead().kind == kind)
+       return getNextToken();
+     else
+       return null;
+   }
+ 
+   /** Parse the html document. */
+   protected void parseDocument()
+                         throws ParseException
+   {
+     while (getTokenAhead().kind != EOF)
+       {
+         advanced = false;
+         if (TAG.matches(this))
+           Tag();
+         else if (COMMENT_OPEN.matches(this))
+           Comment();
+         else if (STYLE_OPEN.matches(this))
+           Style();
+         else if (SCRIPT_OPEN.matches(this))
+           Script();
+         else if (SGML.matches(this))
+           Sgml();
+         else
+           CDATA(true);
+ 
+         // Surely HTML error, treat as a text.
+         if (!advanced)
+           {
+             Token wrong = getNextToken();
+             error("unexpected '" + wrong.getImage() + "'", wrong);
+             buffer.setLength(0);
+             buffer.append(wrong.getImage());
+             _handleText();
+           }
+       }
+   }
+ 
+   /**
+    * Read the element attributes, adding them into attribute set.
+    * @param element The element name (needed to access attribute
+    * information in dtd).
+    */
+   protected void readAttributes(String element)
+   {
+     Token name;
+     Token value;
+     Token next;
+     String attrValue;
+ 
+     attributes = new htmlAttributeSet();
+ 
+     optional(WS);
+ 
+     attributeReading: 
+     while (getTokenAhead().kind == NUMTOKEN)
+       {
+         name = getNextToken();
+         optional(WS);
+ 
+         next = getTokenAhead();
+         if (next.kind == EQ)
+           {
+             mustBe(EQ);
+             optional(WS);
+ 
+             next = getNextToken();
+ 
+             switch (next.kind)
+               {
+                 case QUOT :
+ 
+                   // read "quoted" attribute.
+                   buffer.setLength(0);
+                   readTillTokenE(QUOT);
+                   attrValue = buffer.toString();
+                   break;
+ 
+                 case AP :
+ 
+                   // read 'quoted' attribute.
+                   buffer.setLength(0);
+                   readTillTokenE(AP);
+                   attrValue = buffer.toString();
+                   break;
+ 
+                 // read unquoted attribute.
+                 case NUMTOKEN :
+                   value = next;
+                   optional(WS);
+ 
+                   // Check maybe the opening quote is missing.
+                   next = getTokenAhead();
+                   if (bQUOTING.get(next.kind))
+                     {
+                       hTag = next;
+                       error("The value without opening quote is closed with '" +
+                             next.getImage() + "'"
+                            );
+                     }
+                   attrValue = value.getImage();
+                   break;
+ 
+                 default :
+                   break attributeReading;
+               }
+             attributes.addAttribute(name.getImage(), attrValue);
+             optional(WS);
+           }
+         else // The '=' is missing: attribute without value.
+           {
+             noValueAttribute(element, name.getImage());
+           }
+       }
+   }
+ 
+   /**
+    * Return string, corresponding the given named entity.
+    * The name is passed with the preceeding &, but without
+    * the ending semicolon.
+    */
+   protected String resolveNamedEntity(final String a_tag)
+   {
+     // Discard &
+     if (!a_tag.startsWith("&"))
+       throw new AssertionError("Named entity " + a_tag +
+                                " must start witn '&'."
+                               );
+ 
+     String tag = a_tag.substring(1);
+ 
+     try
+       {
+         Entity entity = dtd.getEntity(tag);
+         if (entity != null)
+           return entity.getString();
+ 
+         entity = dtd.getEntity(tag.toLowerCase());
+ 
+         if (entity != null)
+           {
+             error("The name of this entity should be in lowercase", a_tag);
+             return entity.getString();
+           }
+       }
+     catch (IndexOutOfBoundsException ibx)
+       {
+         /* The error will be reported. */
+       }
+ 
+     error("Unknown named entity", a_tag);
+     return a_tag;
+   }
+ 
+   /**
+    * Return char, corresponding the given numeric entity.
+    * The name is passed with the preceeding &#, but without
+    * the ending semicolon.
+    */
+   protected char resolveNumericEntity(final String a_tag)
+   {
+     // Discard &#
+     if (!a_tag.startsWith("&#"))
+       throw new AssertionError("Numeric entity " + a_tag +
+                                " must start witn '&#'."
+                               );
+ 
+     String tag = a_tag.substring(2);
+ 
+     try
+       {
+         // Determine the encoding type:
+         char cx = tag.charAt(0);
+         if (cx == 'x' || cx == 'X') // Hexadecimal &#Xnnn;
+ 
+           return (char) Integer.parseInt(tag.substring(1), 16);
+ 
+         return (char) Integer.parseInt(tag);
+       }
+ 
+     /* The error will be reported. */
+     catch (NumberFormatException nex)
+       {
+       }
+     catch (IndexOutOfBoundsException ix)
+       {
+       }
+ 
+     error("Invalid numeric entity", a_tag);
+     return '?';
+   }
+ 
+   /**
+    * Reset all fields into the intial default state, preparing the
+    * parset for parsing the next document.
+    */
+   protected void restart()
+   {
+     documentTags.clear();
+     titleHandled = false;
+     titleOpen = false;
+     buffer.setLength(0);
+     title.setLength(0);
+     validator.restart();
+   }
+ 
+   /**
+    * The method is called when the HTML opening tag ((like &lt;table&gt;)
+    * is found or if the parser concludes that the one should be present
+    * in the current position. The method is called immediately before
+    * calling the handleStartTag.
+    * @param The tag
+    */
+   protected void startTag(TagElement tag)
+                    throws ChangedCharSetException
+   {
+   }
+ 
+   /**
+    * Handle a complete element, when the tag content is already present in the
+    * buffer and both starting and heading tags behind. This is called
+    * in the case when the tag text must not be parsed for the nested
+    * elements (elements STYLE and SCRIPT).
+    */
+   private void _handleCompleteElement(TagElement tag)
+   {
+     _handleStartTag(tag);
+ 
+     // Suppress inclusion of the SCRIPT ans STYLE texts into the title.
+     HTML.Tag h = tag.getHTMLTag();
+     if (h == HTML.Tag.SCRIPT || h == HTML.Tag.STYLE)
+       {
+         boolean tmp = titleOpen;
+         titleOpen = false;
+         _handleText();
+         titleOpen = tmp;
+       }
+     else
+       _handleText();
+ 
+     _handleEndTag(tag);
+   }
+ 
+   /**
+    * A hooks for operations, preceeding call to handleEmptyTag().
+    * Handle the tag with no content, like &lt;br&gt;. As no any
+    * nested tags are expected, the tag validator is not involved.
+    * @param The tag being handled.
+    */
+   private void _handleEmptyTag(TagElement tag)
+   {
+     try
+       {
+         validator.validateTag(tag, attributes);
+         handleEmptyTag(tag);
+       }
+     catch (ChangedCharSetException ex)
+       {
+         error("Changed charset exception:", ex.getMessage());
+       }
+   }
+ 
+   /**
+    * A hooks for operations, preceeding call to handleEndTag().
+    * The method is called when the HTML closing tag
+    * is found. Calls handleTitle after closing the 'title' tag.
+    * @param The tag
+    */
+   private void _handleEndTag(TagElement tag)
+   {
+     validator.closeTag(tag);
+     _handleEndTag_remaining(tag);
+   }
+ 
+   /**
+    * Actions that are also required if the closing action was
+    * initiated by the tag validator.
+    * Package-private to avoid an accessor method.
+    */
+   void _handleEndTag_remaining(TagElement tag)
+   {
+     HTML.Tag h = tag.getHTMLTag();
+ 
+     handleEndTag(tag);
+     endTag(tag.fictional());
+ 
+     if (h.isPreformatted())
+       preformatted--;
+     if (preformatted < 0)
+       preformatted = 0;
+ 
+     if (h == HTML.Tag.TITLE)
+       {
+         titleOpen = false;
+         titleHandled = true;
+ 
+         char[] a = new char[ title.length() ];
+         title.getChars(0, a.length, a, 0);
+         handleTitle(a);
+       }
+   }
+ 
+   /**
+    * A hooks for operations, preceeding call to handleStartTag().
+    * The method is called when the HTML opening tag ((like &lt;table&gt;)
+    * is found.
+    * Package-private to avoid an accessor method.
+    * @param The tag
+    */
+   void _handleStartTag(TagElement tag)
+   {
+     validator.openTag(tag, attributes);
+     startingTag(tag);
+     handleStartTag(tag);
+ 
+     HTML.Tag h = tag.getHTMLTag();
+ 
+     if (h.isPreformatted())
+       preformatted++;
+ 
+     if (h == HTML.Tag.TITLE)
+       {
+         if (titleHandled)
+           error("Repetetive <TITLE> tag");
+         titleOpen = true;
+         titleHandled = false;
+       }
+   }
+ 
+   /**
+    * Resume parsing after heavy errors in HTML tag structure.
+    * @throws ParseException
+    */
+   private void forciblyCloseTheTag()
+                             throws ParseException
+   {
+     int closeAt = 0;
+     buffer.setLength(0);
+ 
+     ahead: 
+     for (int i = 1; i < 100; i++)
+       {
+         t = getTokenAhead(i - 1);
+         if (t.kind == EOF || t.kind == BEGIN)
+           break ahead;
+         if (t.kind == END)
+           {
+             /* Closing '>' found. */
+             closeAt = i;
+             break ahead;
+           }
+       }
+     if (closeAt > 0)
+       {
+         buffer.append("Ignoring '");
+         for (int i = 1; i <= closeAt; i++)
+           {
+             t = getNextToken();
+             append(t);
+           }
+         buffer.append('\'');
+         error(buffer.toString());
+       }
+   }
+ 
+   /**
+    * Handle comment in string buffer. You can avoid allocating a char
+    * array each time by processing your comment directly here.
+    */
+   private void handleComment()
+   {
+     char[] a = new char[ buffer.length() ];
+     buffer.getChars(0, a.length, a, 0);
+     handleComment(a);
+   }
+ 
+   private TagElement makeTagElement(String name, boolean isSupposed)
+   {
+     Element e = (Element) dtd.elementHash.get(name.toLowerCase());
+     if (e == null)
+       {
+         error("Unknown tag <" + name + ">");
+         e = dtd.getElement(name);
+         e.name = name.toUpperCase();
+         e.index = -1;
+       }
+ 
+     if (!documentTags.contains(e.name))
+       {
+         markFirstTime(e);
+         documentTags.add(e.name);
+       }
+ 
+     return makeTag(e, isSupposed);
+   }
+ 
+   /**
+    * Read till the given token, resolving entities. Consume the given
+    * token without adding it to buffer.
+    * @param till The token to read till
+    * @throws ParseException
+    */
+   private void readTillTokenE(int till)
+                        throws ParseException
+   {
+     buffer.setLength(0);
+     read: 
+     while (true)
+       {
+         t = getNextToken();
+         if (t.kind == Constants.ENTITY)
+           {
+             resolveAndAppendEntity(t);
+           }
+         else if (t.kind == EOF)
+           {
+             error("unexpected eof", t);
+             break read;
+           }
+         else if (t.kind == till)
+           break read;
+         else if (t.kind == WS)
+           {
+             // Processing whitespace in accordance with CDATA rules:
+             String s = t.getImage();
+             char c;
+             for (int i = 0; i < s.length(); i++)
+               {
+                 c = s.charAt(i);
+                 if (c == '\r')
+                   buffer.append(' '); // CR replaced by space
+                 else if (c == '\n')
+                   ; // LF ignored
+                 else if (c == '\t')
+                   buffer.append(' '); // Tab replaced by space
+                 else
+                   buffer.append(c);
+               }
+           }
+         else
+           append(t);
+       }
+   }
+ 
+   /**
+    * Resolve the entity and append it to the end of buffer.
+    * @param entity
+    */
+   private void resolveAndAppendEntity(Token entity)
+   {
+     switch (entity.category)
+       {
+         case ENTITY_NAMED :
+           buffer.append(resolveNamedEntity(entity.getImage()));
+           break;
+ 
+         case ENTITY_NUMERIC :
+           buffer.append(resolveNumericEntity(entity.getImage()));
+           break;
+ 
+         default :
+           throw new AssertionError("Invalid entity category " +
+                                    entity.category
+                                   );
+       }
+   }
+ 
+   /**
+    * Handle the remaining of HTML tags. This is a common end for
+    * TAG, SCRIPT and STYLE.
+    * @param closing True for closing tags ( &lt;/TAG&gt; ).
+    * @param name Name of element
+    * @param start Token where element has started
+    * @throws ParseException
+    */
+   private void restOfTag(boolean closing, Token name, Token start)
+                   throws ParseException
+   {
+     boolean end = false;
+     Token next;
+ 
+     optional(WS);
+ 
+     readAttributes(name.getImage());
+ 
+     optional(WS);
+ 
+     next = getTokenAhead();
+     if (next.kind == END)
+       {
+         mustBe(END);
+         end = true;
+       }
+ 
+     hTag = new Token(start, next);
+ 
+     attributes.setResolveParent(defaulter.getDefaultParameters(name.getImage()));
+ 
+     if (!end)
+       {
+         // The tag body contains errors. If additionally the tag
+         // name is not valid, this construction is treated as text.
+         if (dtd.elementHash.get(name.getImage().toLowerCase()) == null &&
+             backupMode
+            )
+           {
+             error("Errors in tag body and unknown tag name. " +
+                   "Treating the tag as a text."
+                  );
+             reset();
+ 
+             hTag = mustBe(BEGIN);
+             buffer.setLength(0);
+             buffer.append(hTag.getImage());
+             CDATA(false);
+             return;
+           }
+         else
+           {
+             error("Forcibly closing invalid parameter list");
+             forciblyCloseTheTag();
+           }
+       }
+ 
+     if (closing)
+       {
+         endTag(false);
+         _handleEndTag(makeTagElement(name.getImage(), false));
+       }
+     else
+       {
+         TagElement te = makeTagElement(name.getImage(), false);
+         if (te.getElement().type == DTDConstants.EMPTY)
+           _handleEmptyTag(te);
+         else
+           _handleStartTag(te);
+       }
+   }
+ 
+   /**
+    * This should fire additional actions in response to the
+    * ChangedCharSetException.  The current implementation
+    * does nothing.
+    * @param tag
+    */
+   private void startingTag(TagElement tag)
+   {
+     try
+       {
+         startTag(tag);
+       }
+     catch (ChangedCharSetException cax)
+       {
+         error("Invalid change of charset");
+       }
+   }
+ 
+   private void ws_error()
+   {
+     error("Whitespace here is not permitted");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,112 ----
+ /* gnuStringIntMapper.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support;
+ 
+ import java.util.HashMap;
+ import java.util.Map;
+ import java.util.TreeMap;
+ 
+ /**
+  * A helper class, mapping between the strings and they unique integer
+  * identifiers.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public abstract class gnuStringIntMapper
+ {
+   /**
+    * Maps argument integer values from DTDConstants into they string
+    * names. Initialized on demand.
+    */
+   private Map is_Map;
+ 
+   /**
+    * Maps argument string names into they integer values from DTDConstants.
+    * Initialized on demand.
+    */
+   private Map si_Map;
+ 
+   /**
+    *  Get string from id or null if no such id is present in the mapper.
+    */
+   public final String get(int id)
+   {
+     if (is_Map == null)
+       createTheMap();
+ 
+     return (String) is_Map.get(new Integer(id));
+   }
+ 
+   /** Get id from string or 0 if no such string is present in the mapper. */
+   public final int get(String id)
+   {
+     if (si_Map == null)
+       createTheMap();
+ 
+     Integer i = (Integer) si_Map.get(id);
+ 
+     return i != null ? i.intValue() : 0;
+   }
+ 
+   /**
+    * Create the mapping table for this mapper by adding the required
+    * String/int pairs. The method is invoked
+    * only once for each instance, after the first invocation of the any
+    * form of the <code>get</code> method. Use <code>add</code> to
+    * create a map for a concrete instance.
+    */
+   protected abstract void create();
+ 
+   /**
+    * Add an id/string pair to this mapper. This is called from
+    * the method <code>create</code> only.
+    */
+   protected void add(String name, int id)
+   {
+     Integer i = new Integer(id);
+     si_Map.put(name, i);
+     is_Map.put(i, name);
+   }
+ 
+   private void createTheMap()
+   {
+     is_Map = new HashMap();
+     si_Map = new TreeMap();
+     create();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Buffer.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Buffer.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Buffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Buffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,238 ----
+ /* Buffer.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support.low;
+ 
+ /**
+  * A string buffer that additionally holds line and absolute postion
+  * information.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Buffer
+ {
+   public static int INITIAL_SIZE = 2048;
+ 
+   /**
+    * True if the \n symbol has been seen.
+    */
+   public boolean n_seen;
+ 
+   /**
+    * True if the \r symbol has been seen.
+    */
+   public boolean r_seen;
+   char[] chr = new char[ INITIAL_SIZE ];
+   int[] line = new int[ INITIAL_SIZE ];
+   int[] position = new int[ INITIAL_SIZE ];
+ 
+   /**
+    * Current line.
+    */
+   int current_line = 0;
+ 
+   /**
+    * Point to the next free position.
+    */
+   int length;
+ 
+   public Buffer()
+   {
+   }
+ 
+   public Buffer(String content)
+   {
+     for (int i = 0; i < content.length(); i++)
+       {
+         append(content.charAt(i), i);
+       }
+   }
+ 
+   /**
+    * Get the characters into array.
+    * @param srcBegin From, inclusive
+    * @param srcEnd To, exclusive.
+    * @param dst Into
+    * @param dstBegin Offset.
+    */
+   public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
+   {
+     System.arraycopy(chr, srcBegin, dst, dstBegin, (srcEnd - srcBegin));
+   }
+ 
+   /**
+    * Return the sequence, used to separate lines in the document.
+    * @return one of \n, \r or \r\n.
+    */
+   public String getEndOfLineSequence()
+   {
+     if (r_seen && n_seen)
+       return "\r\n";
+     else if (r_seen)
+       return "\r";
+     else
+ 
+       // This also is returned for single-line document.
+       return "\n";
+   }
+ 
+   /**
+    * Truncate.
+    * @param n The length to truncate till.
+    */
+   public void setLength(int n)
+   {
+     length = n;
+   }
+ 
+   /**
+    * Get location information for the given region.
+    * @param from Region start, inclusive.
+    * @param to Region end, exclusive.
+    * @return The location, covering the region.
+    */
+   public Location getLocation(int from, int to)
+   {
+     Location l = new Location();
+     l.beginLine = line [ from ];
+     l.endLine = line [ to - 1 ];
+ 
+     l.startPosition = position [ from ];
+     l.endPosition = position [ to - 1 ] + 1;
+ 
+     return l;
+   }
+ 
+   /**
+    * Add the character.
+    * @param c The character.
+    * @param pos The character position in the stream (the line number
+    * is handled internally in the buffer).
+    */
+   public void append(char c, int pos)
+   {
+     if (length >= chr.length)
+       expand();
+     chr [ length ] = c;
+     position [ length ] = pos;
+ 
+     if (c == '\n')
+       {
+         if (!r_seen)
+           current_line++;
+         n_seen = true;
+       }
+     else if (c == '\r')
+       {
+         current_line++;
+         r_seen = true;
+       }
+ 
+     line [ length ] = current_line;
+ 
+     length++;
+   }
+ 
+   /**
+    * Return char at the given positon.
+    */
+   public char charAt(int i)
+   {
+     return chr [ i ];
+   }
+ 
+   /**
+    * Delete the range
+    * @param from Start position, inclusive.
+    * @param to End position, exclusive.
+    */
+   public void delete(int from, int to)
+   {
+     int len = to - from;
+     if (len < 1)
+       throw new AssertionError("Deleting " + from + " till " + to);
+ 
+     int tail = length - to;
+ 
+     System.arraycopy(chr, to, chr, from, tail);
+     System.arraycopy(position, to, position, from, tail);
+     System.arraycopy(line, to, line, from, tail);
+     length = length - len;
+   }
+ 
+   /**
+    * Double the buffer size.
+    */
+   public void expand()
+   {
+     int nSize = 2 * chr.length;
+ 
+     char[] nchr = new char[ nSize ];
+     int[] nposition = new int[ nSize ];
+     int[] nline = new int[ nSize ];
+ 
+     System.arraycopy(chr, 0, nchr, 0, chr.length);
+     System.arraycopy(position, 0, nposition, 0, position.length);
+     System.arraycopy(line, 0, nline, 0, line.length);
+ 
+     chr = nchr;
+     position = nposition;
+     line = nline;
+   }
+ 
+   /**
+    * Return length of the occupied part of the buffer.
+    */
+   public int length()
+   {
+     return length;
+   }
+ 
+   /**
+    * Prepare for parsing the new document.
+    */
+   public void reset()
+   {
+     setLength(0);
+     r_seen = n_seen = false;
+   }
+ 
+   public String toString()
+   {
+     return new String(chr, 0, length);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Constants.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Constants.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Constants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Constants.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,422 ----
+ /* Constants.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support.low;
+ 
+ import java.util.BitSet;
+ 
+ /**
+  * The parser constants and operations, directly related to the parser
+  * constants.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Constants
+ {
+   /* Single character tokens are reflected into they ASCII codes. */
+ 
+   /**
+    * Start of HTML token.
+    */
+   public static final int BEGIN = '<';
+ 
+   /**
+    * End of HTML token.
+    */
+   public static final int END = '>';
+ 
+   /**
+    * Exclamation (indicates SGML or comment).
+    */
+   public static final int EXCLAMATION = '!';
+ 
+   /**
+    * Slash (indicates closing tag).
+    */
+   public static final int SLASH = '/';
+ 
+   /**
+    * Equals sign.
+    */
+   public static final int EQ = '=';
+ 
+   /**
+    * Quoting sign.
+    */
+   public static final int AP = '\'';
+ 
+   /**
+    * Quoting sign.
+    */
+   public static final int QUOT = '"';
+ 
+   /* The numbers of other tokens start outside the ascii space. */
+   /* String tokens */
+ 
+   /**
+    * Double dash (--)
+    */
+   public static final int DOUBLE_DASH = 1000;
+ 
+   /**
+    * The STYLE tag (needs special handling).
+    */
+   public static final int STYLE = 1001;
+ 
+   /**
+    * The SCRIPT tag (needs special handling).
+    */
+   public static final int SCRIPT = 1002;
+ 
+   /* Pattern tokens */
+ 
+   /**
+    * HTML whitespace.
+    */
+   public static final int WS = 1003;
+ 
+   /**
+    * Named or numeric entity,
+    */
+   public static final int ENTITY = 1004;
+ 
+   /**
+    * Sequence of valid name characters (can start from digit).
+    */
+   public static final int NUMTOKEN = 1005;
+ 
+   /* Complex tokens */
+ 
+   /**
+    * Comment opening sequence.
+    */
+   public static final pattern COMMENT_OPEN =
+     new pattern(new node[]
+                 {
+                   new node(BEGIN), new node(WS, true), new node(EXCLAMATION),
+                   new node(WS, true), new node(DOUBLE_DASH),
+                 }
+                );
+ 
+   /**
+    * Comment closing sequence
+    */
+   public static final pattern COMMENT_END =
+     new pattern(new node[]
+                 {
+                   new node(DOUBLE_DASH), new node(WS, true), new node(END)
+                 }
+                );
+ 
+   /**
+    * Special case ---> (also is treated as end of comment).
+    */
+   public static final pattern COMMENT_TRIPLEDASH_END =
+     new pattern(new node[]
+                 {
+                   new node(DOUBLE_DASH), new node(NUMTOKEN), new node(END)
+                 }
+                );
+ 
+   /**
+    * STYLE element heading pattern.
+    */
+   public static final pattern STYLE_OPEN =
+     new pattern(new node[] { new node(BEGIN), new node(WS, true), new node(STYLE) });
+ 
+   /**
+    * SCRIPT element heading pattern.
+    */
+   public static final pattern SCRIPT_OPEN =
+     new pattern(new node[] { new node(BEGIN), new node(WS, true), new node(SCRIPT) });
+ 
+   /**
+    * SGML element heading pattern.
+    */
+   public static final pattern SGML =
+     new pattern(new node[]
+                 {
+                   new node(BEGIN), new node(WS, true), new node(EXCLAMATION)
+                 }
+                );
+ 
+   /**
+    * SCRIPT element closing pattern.
+    */
+   public static final pattern SCRIPT_CLOSE =
+     new pattern(new node[]
+                 {
+                   new node(BEGIN), new node(WS, true), new node(SLASH),
+                   new node(WS, true), new node(SCRIPT), new node(WS, true),
+                   new node(END)
+                 }
+                );
+ 
+   /**
+    * STYLE element closing pattern.
+    */
+   public static final pattern STYLE_CLOSE =
+     new pattern(new node[]
+                 {
+                   new node(BEGIN), new node(WS, true), new node(SLASH),
+                   new node(WS, true), new node(STYLE), new node(WS, true),
+                   new node(END)
+                 }
+                );
+ 
+   /**
+    * Ordinary HTML tag heading pattern.
+    */
+   public static final pattern TAG =
+     new pattern(new node[]
+                 {
+                   new node(BEGIN), new node(WS, true), new node(SLASH, true),
+                   new node(WS, true), new node(NUMTOKEN)
+                 }
+                );
+ 
+   /* Special tokens */
+ 
+   /**
+    * All other tokens.
+    */
+   public static final int OTHER = 1999;
+ 
+   /**
+    * The UNICODE "end of text" control code
+    */
+   static final char ETX = 3;
+ 
+   /**
+    * End of file.
+    */
+   public static final int EOF = ETX;
+ 
+   /* Character categories */
+ 
+   /**
+    * All single char tokens.
+    */
+   public static final BitSet bSINGLE_CHAR_TOKEN = new BitSet();
+ 
+   /**
+    * Non letters and non numbers, allowed in HTML names.
+    */
+   public static final BitSet bSPECIAL = new BitSet();
+ 
+   /**
+    * All letters, used in HTML names.
+    */
+   public static final BitSet bLETTER = new BitSet();
+ 
+   /**
+    * Digits.
+    */
+   public static final BitSet bDIGIT = new BitSet();
+ 
+   /**
+    * Both line breaks.
+    */
+   public static final BitSet bLINEBREAK = new BitSet();
+ 
+   /**
+    * All whitespace.
+    */
+   public static final BitSet bWHITESPACE = new BitSet();
+ 
+   /**
+    * Both quoting characters.
+    */
+   public static final BitSet bQUOTING = new BitSet();
+ 
+   /**
+    * Valid name characters.
+    */
+   public static final BitSet bNAME = new BitSet();
+ 
+   /* Entity subcategories */
+ 
+   /**
+    * Named entity.
+    */
+   public static final int ENTITY_NAMED = 1;
+ 
+   /**
+    * Numeric entity.
+    */
+   public static final int ENTITY_NUMERIC = 2;
+ 
+   static
+   {
+     bQUOTING.set(AP);
+     bQUOTING.set(QUOT);
+ 
+     bSINGLE_CHAR_TOKEN.set(BEGIN);
+     bSINGLE_CHAR_TOKEN.set(END);
+     bSINGLE_CHAR_TOKEN.set(EXCLAMATION);
+     bSINGLE_CHAR_TOKEN.set(SLASH);
+     bSINGLE_CHAR_TOKEN.set(EQ);
+     bSINGLE_CHAR_TOKEN.set(EOF);
+ 
+     bSINGLE_CHAR_TOKEN.or(bQUOTING);
+ 
+     bLINEBREAK.set('\r');
+     bLINEBREAK.set('\n');
+ 
+     bWHITESPACE.set(' ');
+     bWHITESPACE.set('\t');
+     bWHITESPACE.set(0xC);
+     bWHITESPACE.or(bLINEBREAK);
+ 
+     for (char i = '0'; i <= '9'; i++)
+       {
+         bDIGIT.set(i);
+       }
+ 
+     for (char i = 'a'; i <= 'z'; i++)
+       {
+         bLETTER.set(i);
+       }
+ 
+     for (char i = 'A'; i <= 'Z'; i++)
+       {
+         bLETTER.set(i);
+       }
+ 
+     bSPECIAL.set('-');
+     bSPECIAL.set('_');
+     bSPECIAL.set(':');
+     bSPECIAL.set('.');
+ 
+     bNAME.or(bLETTER);
+     bNAME.or(bDIGIT);
+     bNAME.or(bSPECIAL);
+   }
+ 
+   /**
+    * Verifies if one of the tokens matches the end of string
+    * buffer. The last character in the string buffer is the
+    * "future character", some tokens needs to verify it the
+    * token does not continue "towards the future". If the token
+    * matches, it matches till "pre-last" character in the buffer.
+    * @param b
+    * @return
+    */
+   public Token endMatches(Buffer b)
+   {
+     if (b.length() < 2)
+       return null;
+ 
+     int p = b.length() - 2;
+ 
+     if (b.length() > 2 && b.charAt(p) == '-' && b.charAt(p - 1) == '-')
+       return new Token(DOUBLE_DASH, "--", b.getLocation(p - 1, p + 1));
+ 
+     char last = b.charAt(p);
+ 
+     if (bSINGLE_CHAR_TOKEN.get(last))
+       return new Token(last, last, b.getLocation(p, p + 1));
+ 
+     char future = b.charAt(p + 1);
+ 
+     // Check for numtokens, script and style:
+     if (bNAME.get(last) && !bNAME.get(future))
+       {
+         // Scan the history up:
+         int u = p - 1;
+         while (u >= 0 && bNAME.get(b.charAt(u)))
+           u--;
+         u++;
+ 
+         char[] token = new char[ p - u + 1 ];
+ 
+         // Found a numtoken
+         b.getChars(u, p + 1, token, 0);
+ 
+         // Verify for the built-in tokens:
+         String e = new String(token);
+ 
+         // found the entity reference
+         if (u > 0 && b.charAt(u - 1) == '&')
+           {
+             // The subsequent semicolon may be the part of the token
+             // as well. The semicolon must be ignored. This must be
+             // handled elsewhere.
+             return new Token(ENTITY, ENTITY_NAMED, "&" + e,
+                              b.getLocation(u - 1, p + 1)
+                             );
+           }
+ 
+         // found the numeric entity reference
+         if (u > 1 && b.charAt(u - 1) == '#' && b.charAt(u - 2) == '&')
+           {
+             // The subsequent semicolon may be the part of the token
+             // as well. The semicolon must be ignored. This must be
+             // handled elsewhere.
+             return new Token(ENTITY, ENTITY_NUMERIC, "&#" + e,
+                              b.getLocation(u - 2, p + 2)
+                             );
+           }
+ 
+         Location le = b.getLocation(u, p + 1);
+ 
+         if (e.equalsIgnoreCase("SCRIPT"))
+           return new Token(SCRIPT, e, le);
+         else if (e.equalsIgnoreCase("STYLE"))
+           return new Token(STYLE, e, le);
+         else
+           return new Token(NUMTOKEN, e, le);
+       }
+ 
+     // Check for whitespace
+     if (bWHITESPACE.get(last) && !bWHITESPACE.get(future))
+       {
+         // Scan the history up:
+         int u = p - 1;
+         while (u >= 0 && bWHITESPACE.get(b.charAt(u)))
+           u--;
+         u++;
+ 
+         char[] token = new char[ p - u + 1 ];
+         b.getChars(u, p + 1, token, 0);
+ 
+         return new Token(WS, new String(token), b.getLocation(u, p + 1));
+       }
+ 
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Location.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Location.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Location.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Location.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,83 ----
+ /* Location.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support.low;
+ 
+ /**
+  * Defines a region in the text: its bounding positions and the line number.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Location
+ {
+   /**
+    * The line number, where the token starts.
+    */
+   public int beginLine;
+ 
+   /**
+    * The line, where the token ends.
+    */
+   public int endLine;
+ 
+   /**
+    * The absolute token end position in the input stream,
+    * exclusive.
+    */
+   public int endPosition;
+ 
+   /**
+    * The absolute token start position in the input stream,
+    * inclusive.
+    */
+   public int startPosition;
+ 
+   public Location()
+   {
+   }
+ 
+   /**
+    * Special case, used to mark EOF.
+    * @param p The total stream length.
+    */
+   public Location(int p)
+   {
+     startPosition = p;
+     endPosition = p + 1;
+     beginLine = endLine = -1;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ParseException.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ParseException.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ParseException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ParseException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /* ParseException.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support.low;
+ 
+ /**
+  * This can be thrown from various parsing methods.
+  */
+ public class ParseException
+   extends RuntimeException
+ {
+   public ParseException(String s, Throwable cause)
+   {
+     super(s, cause);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Queue.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Queue.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Queue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Queue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,142 ----
+ /* Queue.java -- a token queue.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support.low;
+ 
+ import java.util.Arrays;
+ 
+ /**
+  * A token queue.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Queue
+ {
+   Token[] m = new Token[ 64 ];
+   int a = 0;
+   int b = 0;
+ 
+   /**
+    * True for the empty queue.
+    */
+   public boolean isEmpty()
+   {
+     return size() == 0;
+   }
+ 
+   /**
+    *  Add this trace to the end of the queue.
+    */
+   public void add(Token u)
+   {
+     if (a < m.length)
+       {
+         m [ a ] = u;
+         a++;
+       }
+     else // The end of array has been reached.
+       {
+         if (b > 0) // If some elements were deleted from the start of the queue, shift.
+           {
+             int d = b;
+             System.arraycopy(m, b, m, 0, a - b);
+             b = b - d;
+             a = a - d;
+             m [ a ] = u;
+             a++;
+           }
+         else // Enlarge the queue, doubling the size.
+           {
+             int n = m.length * 2;
+             Token[] nm = new Token[ 2 * n ];
+             System.arraycopy(m, 0, nm, 0, m.length);
+             Arrays.fill(m, null);
+ 
+             nm [ a ] = u;
+             m = nm;
+             a++;
+           }
+       }
+   }
+ 
+   /**
+    * Clear the queue.
+    */
+   public void clear()
+   {
+     a = b = 0;
+     Arrays.fill(m, null);
+   }
+ 
+   /**
+    * Read the value ahead. 0 is the value that will be returned with
+    * the following next. This method does not remove values from the
+    * queue. To test if there is enough tokens in the queue, size() must
+    * be checked before calling this method.
+    */
+   public Token get(int ahead)
+   {
+     int p = b + ahead;
+     if (p < a)
+       return m [ p ];
+     else
+       throw new ArrayIndexOutOfBoundsException("Not enough tokens");
+   }
+ 
+   /**
+    * Read the oldest value from the queue and remove this value from
+    * the queue.
+    */
+   public Token next()
+   {
+     if (a == b)
+       throw new ArrayIndexOutOfBoundsException("queue empty");
+ 
+     Token r = m [ b ];
+     m [ b ] = null;
+     b++;
+     return r;
+   }
+ 
+   /**
+    * Size of the queue.
+    */
+   public int size()
+   {
+     return a - b;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,374 ----
+ /* ReaderTokenizer.java -- splits the input char sequence int tokens.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support.low;
+ 
+ import java.io.IOException;
+ import java.io.Reader;
+ 
+ /**
+  * Reader splits the input char sequence into tokens.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class ReaderTokenizer
+   extends Constants
+ {
+   /**
+    * This is set to true each time the getNextToken is called.
+    * Used in preventing loops when all patterns refuse to accept
+    * the invalid input.
+    */
+   protected boolean advanced;
+ 
+   /**
+    * If true, the returned tokens are also placed in the backup
+    * queue.
+    */
+   protected boolean backupMode;
+ 
+   /**
+    * The buffer to read document into.
+    */
+   Buffer buffer = new Buffer();
+ 
+   /**
+    * The queue for supporting mark().
+    */
+   Queue backup = new Queue();
+ 
+   /**
+    * The queue of found tokens.
+    */
+   Queue queue = new Queue();
+ 
+   /**
+    * The reader to read the document from.
+    */
+   Reader reader;
+ 
+   /**
+    * Array of char tokens
+    */
+   char[] charTokens;
+ 
+   /**
+    * Array of string tokens.
+    */
+   String[] stringTokens;
+ 
+   /**
+    * The current reader position.
+    */
+   int readerPosition = -1;
+ 
+   /**
+    * Creates a new ReaderTokenizer. The reset(...) method must be
+    * subsequently called to set the reader.
+    */
+   public ReaderTokenizer()
+   {
+   }
+ 
+   /**
+    * Return the sequence, used to separate lines in the document.
+    * @return one of \n, \r or \r\n.
+    */
+   public String getEndOfLineSequence()
+   {
+     return buffer.getEndOfLineSequence();
+   }
+ 
+   /**
+    * Get the next token.
+    * @return
+    */
+   public Token getNextToken()
+   {
+     Token rt;
+     advanced = true;
+     try
+       {
+         if (queue.isEmpty())
+           read(1);
+ 
+         if (!queue.isEmpty())
+           rt = queue.next();
+         else
+           rt = new Token(EOF, new Location(readerPosition));
+       }
+     catch (IOException ex)
+       {
+         throw new ParseException("IO Exception", ex);
+       }
+     if (backupMode)
+       backup.add(rt);
+     return rt;
+   }
+ 
+   /**
+    * Get a token, lying the given number of tokens
+    * ahead. getToken(0) will return the same token,
+    * what would be returned by getNextToken().
+    * getToken(..) does change the current position
+    * in the input stream. If the end of stream is
+    * reached, the EOF token is always returned.
+    */
+   public Token getTokenAhead(int ahead)
+   {
+     try
+       {
+         read(ahead - queue.size() + 1);
+         return queue.size() >= ahead ? queue.get(ahead) : eofToken();
+       }
+     catch (IOException ex)
+       {
+         throw new ParseException("IO Exception", ex);
+       }
+   }
+ 
+   /**
+    * Get a token, bein immediatley ahead.
+    * If the end of stream is
+    * reached, the EOF token is always returned.
+    * The method is equivalent calling getTokenAhead(0).
+    */
+   public Token getTokenAhead()
+   {
+     try
+       {
+         if (queue.isEmpty())
+           read(1);
+         if (!queue.isEmpty())
+           return queue.get(0);
+         else
+           return eofToken();
+       }
+     catch (IOException ex)
+       {
+         throw new ParseException("IO Exception", ex);
+       }
+   }
+ 
+   /**
+    * Invokes the error handler.
+    */
+   public void error(String msg, Token at)
+   {
+     System.out.println(msg);
+   }
+ 
+   /**
+    * Turns the backup mode on or off.
+    * It is possible to return where the mark(true) was last called
+    * by calling reset().
+    * @param mode True if it is required to save tokens, making
+    * returning to the current point possible.
+    */
+   public void mark(boolean mode)
+   {
+     backup.clear();
+     backupMode = mode;
+   }
+ 
+   /**
+    * Prepare for new parsing from the given stream.
+    * @param a_reader A reader to parse from.
+    */
+   public void reset(Reader a_reader)
+   {
+     reader = a_reader;
+     readerPosition = -1;
+     buffer.reset();
+     queue.clear();
+   }
+ 
+   /**
+    * Reset the internal cursor to the position where the mark()
+    * was last time called. Switches the backup mode off.
+    */
+   public void reset()
+   {
+     if (!backupMode)
+       throw new AssertionError("Call mark(true) before using reset()!");
+     backupMode = false;
+ 
+     // That is now in the queue, will be appended to the end of backup.
+     while (!queue.isEmpty())
+       backup.add(queue.next());
+ 
+     Queue t = queue;
+     queue = backup;
+     backup = t;
+     backup.clear();
+   }
+ 
+   /**
+    * Read the given number of the tokens. Add the needed number of EOF
+    * tokens if there are no more data in the stream.
+    * @param amount The number of additional tokens to read.
+    */
+   void read(int numberOfTokens)
+      throws IOException
+   {
+     if (numberOfTokens <= 0)
+       return;
+ 
+     reading: 
+     for (int i = 0; i < numberOfTokens; i++)
+       readToken();
+   }
+ 
+   /**
+    * Read next token from the reader, add it to the queue
+    */
+   void readToken()
+           throws IOException
+   {
+     Token t;
+     int ch;
+ 
+     enlarging: 
+     while (true)
+       {
+         t = tokenMatches();
+         if (t != null)
+           break enlarging;
+         else
+           {
+             ch = reader.read();
+             readerPosition++;
+             if (ch == ETX)
+               ch = ' ';
+             if (ch < 0)
+               {
+                 if (buffer.length() == 0)
+                   {
+                     queue.add(eofToken());
+                     return;
+                   }
+                 else
+                   {
+                     if (buffer.charAt(buffer.length() - 1) != ETX)
+                       buffer.append(ETX, readerPosition++);
+                     else
+                       {
+                         // Discard terminating ETX
+                         buffer.setLength(buffer.length() - 1);
+                         if (buffer.length() > 0)
+                           {
+                             t = new Token(OTHER, buffer.toString(),
+                                           buffer.getLocation(0, buffer.length())
+                                          );
+                             queue.add(t);
+                             buffer.setLength(0);
+                           }
+                         return;
+                       }
+                   }
+               }
+             else
+               buffer.append((char) ch, readerPosition);
+           }
+       }
+   }
+ 
+   /**
+    * Check if the end of buffer matches one of the tokens. If it does,
+    * return this token and remove the token sequence from the end of
+    * buffer.
+    * @return The matching token.
+    */
+   Token tokenMatches()
+   {
+     Token rt = endMatches(buffer);
+     if (rt != null) // Remove the matched image
+       {
+         // Consume future character if it was an entity and the future
+         // character is semicolon.
+         if (rt.kind == ENTITY)
+           {
+             if (buffer.charAt(buffer.length() - 1) == ';')
+               buffer.setLength(buffer.length() - rt.getImage().length() - 1);
+             else
+               {
+                 error("Missing closing semicolon for entity '" + rt.getImage() +
+                       "'", rt
+                      );
+                 consumeBuffer(rt);
+               }
+           }
+         else
+           {
+             consumeBuffer(rt);
+           }
+       }
+ 
+     // If the buffer is not empty, some sequence does not match any tokens.
+     // Add it to the queue as "OTHER".
+     if (rt != null)
+       {
+         if (buffer.length() > 1)
+           {
+             String rest = buffer.toString();
+             rest = rest.substring(0, rest.length() - 1);
+ 
+             Token other =
+               new Token(OTHER, rest, buffer.getLocation(0, buffer.length));
+             queue.add(other);
+             consumeBuffer(other);
+           }
+         queue.add(rt);
+       }
+     return rt;
+   }
+ 
+   private void consumeBuffer(Token rt)
+   {
+     buffer.delete(buffer.length() - rt.getImage().length() - 1,
+                   buffer.length() - 1
+                  );
+   }
+ 
+   /**
+    * Create EOF token.
+    */
+   private Token eofToken()
+   {
+     return new Token(EOF, "#", new Location(readerPosition));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Token.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Token.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Token.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/Token.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,169 ----
+ /* Token.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support.low;
+ 
+ /**
+  * A token.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class Token
+ {
+   /**
+    * The place of this token in the document.
+    */
+   public Location where;
+ 
+   /**
+    * The additional category of token.
+    */
+   public int category;
+ 
+   /**
+    * An integer that describes the kind of this token.
+    */
+   public int kind;
+ 
+   /**
+    * The string image of the token, null if the char image must be used.
+    */
+   private String stringImage;
+ 
+   /**
+    * The char image of the token.
+    */
+   private char charImage;
+ 
+   /**
+    * Creates a new token with fields, initialized to the default values.
+    */
+   public Token()
+   {
+   }
+ 
+   /**
+    * Creates a new token of the given kind.
+    */
+   public Token(int _kind, Location _where)
+   {
+     kind = _kind;
+     where = _where;
+   }
+ 
+   /**
+    * Creates a new token of the given kind and given single char image.
+    */
+   public Token(int _kind, char _image, Location _where)
+   {
+     kind = _kind;
+     charImage = _image;
+     where = _where;
+   }
+ 
+   /**
+    * Creates a new token of the given kind and given string image.
+    */
+   public Token(int _kind, String _image, Location _where)
+   {
+     kind = _kind;
+     stringImage = _image;
+     where = _where;
+   }
+ 
+   /**
+    * Creates a new token of the given kind, category and given string image.
+    */
+   public Token(int _kind, int _category, String _image, Location _where)
+   {
+     kind = _kind;
+     category = _category;
+     stringImage = _image;
+     where = _where;
+   }
+ 
+   /**
+    * Creates a new token, where location fields are set as for token,
+    * spanning over two provided tokens and any tokens between them.
+    * The image field is initialized to null, the kind field is set to -1.
+    */
+   public Token(Token fromInclusive, Token toInclusive)
+   {
+     where = new Location();
+     where.beginLine = fromInclusive.where.beginLine;
+     where.startPosition = fromInclusive.where.startPosition;
+ 
+     where.endLine = toInclusive.where.endLine;
+     where.endPosition = toInclusive.where.endPosition;
+   }
+ 
+   public String getImage()
+   {
+     if (kind == 3)
+       return "#";
+     if (stringImage == null)
+       {
+         if (charImage == 0)
+           return null;
+         stringImage = new String(new char[] { charImage });
+       }
+     return stringImage;
+   }
+ 
+   /**
+    * Append the token image to the given string buffer.
+    * This may be more effective that buffer.append(this.getImage()).
+    * @param buffer A buffer to append.
+    */
+   public void appendTo(StringBuffer buffer)
+   {
+     if (charImage == 0)
+       buffer.append(getImage());
+     else
+       buffer.append(charImage);
+   }
+ 
+   /**
+    * Returns the string image or, if null, the bounding positions.
+    */
+   public String toString()
+   {
+     return getImage() != null ? kind + "'" + getImage()
+            : "<line " + where.beginLine + ", abs pos " + where.startPosition +
+            ".." + where.endPosition + ">";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/node.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/node.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/node.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/node.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* node.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support.low;
+ 
+ /**
+  * A text level content model node. The only required unary operations
+  * here are "appears" and "optionally appears" ('?').
+  * <p>@author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)</p>
+  */
+ public class node
+ {
+   /**
+    * True for node that is optional for the given position.
+    */
+   public boolean optional;
+ 
+   /**
+    * The kind of the token to match.
+    */
+   public int kind;
+ 
+   /**
+    * Creates the new node for matching a given kind of the token.
+    * @param kind The kind of the token to match.
+    * @param modifier The modifier (*?+).
+    */
+   public node(int kind, boolean _optional)
+   {
+     this.kind = kind;
+     optional = _optional;
+   }
+ 
+   /**
+    * Creates the node, indicating that token must match exactluy one time.
+    * @param kind The kind of token to match.
+    */
+   public node(int kind)
+   {
+     this.kind = kind;
+     optional = false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/package.html gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/package.html
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.swing.text.html.parser package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.javax.swing.text.html.parser.support.low</title></head>
+ 
+ <body>
+ <p>This package contains classes that are directly used to process
+ the text input: adapted stream tokenizer, specialized buffer and text-level content models .</p>
+ @author Audrius Meskauskas, Lithuania
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/pattern.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/pattern.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/pattern.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/pattern.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,105 ----
+ /* pattern.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support.low;
+ 
+ 
+ /**
+  * The simple pattern, consisting from the sequence of tokens that
+  * may have the unary modifier '?'. Choices and grouping
+  * are not required here.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class pattern
+ {
+   /**
+    * The nodes of this pattern.
+    */
+   public final node[] nodes;
+ 
+   /**
+    * Create a pattern, containing the given list of nodes.
+    * @param a_nodes
+    */
+   public pattern(node[] a_nodes)
+   {
+     nodes = a_nodes;
+   }
+ 
+   /**
+    * Checks if the pattern can match the tokens in this
+    * tokenizer. Does not change the state of tokenizer.
+    * @param stream The tokenizer to read data from
+    * @return True if the pattern sequence matches the
+    * beginning of the tokenizer content.
+    */
+   public boolean matches(ReaderTokenizer stream)
+   {
+     try
+       {
+         int pt = 0;
+         int pn = 0;
+         Token t;
+         node n;
+ 
+         while (pn < nodes.length)
+           {
+             n = nodes [ pn ];
+             t = stream.getTokenAhead(pt);
+ 
+             if (t.kind == n.kind)
+               {
+                 pn++;
+                 pt++;
+               }
+             else
+               {
+                 if (!n.optional)
+                   return false;
+                 else
+                   pn++;
+               }
+           }
+         return true;
+       }
+     catch (Exception ex)
+       {
+         throw new ParseException("Exception", ex);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/package.html gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/package.html
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.swing.text.html.parser package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - gnu.javax.swing.text.html.parser.support</title></head>
+ 
+ <body>
+ <p>This package provides various specialised classes, needed by HTML parser.
+ </p>
+ @author Audrius Meskauskas, Lithuania
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,106 ----
+ /* parameterDefaulter.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support;
+ 
+ import gnu.javax.swing.text.html.parser.htmlAttributeSet;
+ 
+ import java.util.Hashtable;
+ 
+ import javax.swing.text.html.parser.AttributeList;
+ import javax.swing.text.html.parser.DTD;
+ import javax.swing.text.html.parser.Element;
+ 
+ /**
+  * Returns an attribute set, containing default
+  * parameters for the given element. Caches sets of default
+  * parameters.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class parameterDefaulter
+ {
+   public final DTD dtd;
+   Hashtable sets = new Hashtable();
+ 
+   /**
+    * Create a parameterDefaulter that looks for the default attribute
+    * values in the given DTD.
+    * @param a_dtd
+    */
+   public parameterDefaulter(DTD a_dtd)
+   {
+     dtd = a_dtd;
+   }
+ 
+   /**
+    * Get the default parameter set for the given element.
+    * @param element The element name (case insensitive).
+    * @return the default attrbute set.
+    */
+   public htmlAttributeSet getDefaultParameters(String element)
+   {
+     String key = element.toLowerCase();
+     htmlAttributeSet atts = (htmlAttributeSet) sets.get(key);
+ 
+     if (atts == null)
+       {
+         htmlAttributeSet set = new htmlAttributeSet();
+         Element e = (Element) dtd.elementHash.get(element.toLowerCase());
+ 
+         if (e != null)
+           {
+             AttributeList a = e.getAttributes();
+ 
+             while (a != null)
+               {
+                 if (a.value != null)
+                   set.addAttribute(a.name, a.value);
+                 a = a.next;
+               }
+           }
+ 
+         if (set.getAttributeCount() > 0)
+           sets.put(key, set);
+         else
+           sets.put(key, htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET);
+ 
+         atts = set;
+       }
+     return atts;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java
*** gcc-4.0.2/libjava/classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,193 ----
+ /* textPreProcessor.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.javax.swing.text.html.parser.support;
+ 
+ import gnu.javax.swing.text.html.parser.support.low.Constants;
+ 
+ /**
+  * Pre - processes text in text parts of the html document.
+  * Not thread - safe.
+  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+  */
+ public class textPreProcessor
+ {
+   /**
+    * Pre - process non-preformatted text.
+    * \t, \r and \n mutate into spaces, then multiple spaces mutate
+    * into single one, all whitespace around tags is consumed.
+    * The content of the passed buffer is destroyed.
+    * @param text A text to pre-process.
+    */
+   public char[] preprocess(StringBuffer a_text)
+   {
+     if (a_text.length() == 0)
+       return null;
+ 
+     char[] text = toCharArray(a_text);
+ 
+     int a = 0;
+     int b = text.length - 1;
+ 
+     try
+       {
+         while (Constants.bWHITESPACE.get(text [ a ]))
+           a++;
+         while (Constants.bWHITESPACE.get(text [ b ]))
+           b--;
+       }
+     catch (ArrayIndexOutOfBoundsException sx)
+       {
+         // A text fragment, consisting from line breaks only.
+         return null;
+       }
+ 
+     a_text.setLength(0);
+ 
+     boolean spacesWere = false;
+     boolean spaceNow;
+     char c;
+ 
+     chars: 
+     for (int i = a; i <= b; i++)
+       {
+         c = text [ i ];
+         spaceNow = Constants.bWHITESPACE.get(c);
+         if (spacesWere && spaceNow)
+           continue chars;
+         if (spaceNow)
+           a_text.append(' ');
+         else
+           a_text.append(c);
+         spacesWere = spaceNow;
+       }
+ 
+     if (a_text.length() == text.length)
+       {
+         a_text.getChars(0, a_text.length(), text, 0);
+         return text;
+       }
+     else
+       return toCharArray(a_text);
+   }
+ 
+   /**
+    * Pre - process pre-formatted text.
+    * Heading/closing spaces and tabs preserved.
+    * ONE  bounding \r, \n or \r\n is removed.
+    * \r or \r\n mutate into \n. Tabs are
+    * preserved.
+    * The content of the passed buffer is destroyed.
+    * @param text
+    * @return
+    */
+   public char[] preprocessPreformatted(StringBuffer a_text)
+   {
+     if (a_text.length() == 0)
+       return null;
+ 
+     char[] text = toCharArray(a_text);
+ 
+     int a = 0;
+     int n = text.length - 1;
+     int b = n;
+ 
+     if (text [ 0 ] == '\n')
+       a++;
+     else
+       {
+         if (text [ 0 ] == '\r')
+           {
+             a++;
+             if (text.length > 1 && text [ 1 ] == '\n')
+               a++;
+           }
+       }
+ 
+     if (text [ n ] == '\r')
+       b--;
+     else
+       {
+         if (text [ n ] == '\n')
+           {
+             b--;
+             if (n > 0 && text [ n - 1 ] == '\r')
+               b--;
+           }
+       }
+ 
+     a_text.setLength(0);
+ 
+     if (a > b)
+       return null;
+ 
+     char c;
+ 
+     for (int i = a; i <= b; i++)
+       {
+         c = text [ i ];
+         if (c == '\r')
+           {
+             if (i == b || text [ i + 1 ] != '\n')
+               a_text.append('\n');
+           }
+         else
+           a_text.append(c);
+       }
+ 
+     if (a_text.length() == text.length)
+       {
+         a_text.getChars(0, a_text.length(), text, 0);
+         return text;
+       }
+     else
+       return toCharArray(a_text);
+   }
+ 
+   /**
+    * Return array of chars, present in the given buffer.
+    * @param a_text The buffer
+    * @return
+    */
+   private static char[] toCharArray(StringBuffer a_text)
+   {
+     char[] text = new char[ a_text.length() ];
+     a_text.getChars(0, text.length, text, 0);
+     return text;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexed.java gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexed.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexed.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexed.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,96 ----
+ /* gnu/regexp/CharIndexed.java
+    Copyright (C) 1998-2001, 2004, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ 
+ /**
+  * Defines the interface used internally so that different types of source
+  * text can be accessed in the same way.  Built-in concrete classes provide
+  * support for String, StringBuffer, InputStream and char[] types.
+  * A class that is CharIndexed supports the notion of a cursor within a
+  * block of text.  The cursor must be able to be advanced via the move()
+  * method.  The charAt() method returns the character at the cursor position
+  * plus a given offset.
+  *
+  * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
+  */
+ public interface CharIndexed {
+     /**
+      * Defines a constant (0xFFFF was somewhat arbitrarily chosen)
+      * that can be returned by the charAt() function indicating that
+      * the specified index is out of range.
+      */
+     char OUT_OF_BOUNDS = '\uFFFF';
+ 
+     /**
+      * Returns the character at the given offset past the current cursor
+      * position in the input.  The index of the current position is zero.
+      * It is possible for this method to be called with a negative index.
+      * This happens when using the '^' operator in multiline matching mode
+      * or the '\b' or '\<' word boundary operators.  In any case, the lower
+      * bound is currently fixed at -2 (for '^' with a two-character newline).
+      *
+      * @param index the offset position in the character field to examine
+      * @return the character at the specified index, or the OUT_OF_BOUNDS
+      *   character defined by this interface.
+      */
+     char charAt(int index);
+ 
+     /**
+      * Shifts the input buffer by a given number of positions.  Returns
+      * true if the new cursor position is valid.
+      */
+     boolean move(int index);
+ 
+     /**
+      * Returns true if the most recent move() operation placed the cursor
+      * position at a valid position in the input.
+      */
+     boolean isValid();
+ 
+     /**
+      * Returns another CharIndexed containing length characters to the left
+      * of the given index. The given length is an expected maximum and
+      * the returned CharIndexed may not necessarily contain so many characters.
+      */
+     CharIndexed lookBehind(int index, int length);
+ 
+     /**
+      * Returns the effective length of this CharIndexed
+      */
+     int length();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexedCharArray.java gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexedCharArray.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexedCharArray.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexedCharArray.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,71 ----
+ /* gnu/regexp/CharIndexedCharArray.java
+    Copyright (C) 1998-2001, 2004, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ import java.io.Serializable;
+ 
+ class CharIndexedCharArray implements CharIndexed, Serializable {
+     private char[] s;
+     private int anchor;
+     
+     CharIndexedCharArray(char[] str, int index) {
+ 	s = str;
+ 	anchor = index;
+     }
+     
+     public char charAt(int index) {
+ 	int pos = anchor + index;
+ 	return ((pos < s.length) && (pos >= 0)) ? s[pos] : OUT_OF_BOUNDS;
+     }
+     
+     public boolean isValid() {
+ 	return (anchor < s.length);
+     }
+     
+     public boolean move(int index) {
+ 	return ((anchor += index) < s.length);
+     }
+     
+     public CharIndexed lookBehind(int index, int length) {
+ 	if (length > (anchor + index)) length = anchor + index;
+ 	return new CharIndexedCharArray(s, anchor + index - length);
+     }
+ 
+     public int length() {
+ 	return s.length - anchor;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexedInputStream.java gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexedInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexedInputStream.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,159 ----
+ /* gnu/regexp/CharIndexedInputStream.java
+    Copyright (C) 1998-2001, 2004, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ import java.io.BufferedInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ // TODO: move(x) shouldn't rely on calling next() x times
+ 
+ class CharIndexedInputStream implements CharIndexed {
+     private static final int BUFFER_INCREMENT = 1024;
+     private static final int UNKNOWN = Integer.MAX_VALUE; // value for end
+     
+     private BufferedInputStream br;
+ 
+     // so that we don't try to reset() right away
+     private int index = -1;
+ 
+     private int bufsize = BUFFER_INCREMENT;
+ 
+     private int end = UNKNOWN;
+ 
+     private char cached = OUT_OF_BOUNDS;
+ 
+     // Big enough for a \r\n pair
+     // lookBehind[0] = most recent
+     // lookBehind[1] = second most recent
+     private char[] lookBehind = new char[] { OUT_OF_BOUNDS, OUT_OF_BOUNDS }; 
+     
+     CharIndexedInputStream(InputStream str, int index) {
+ 	if (str instanceof BufferedInputStream) br = (BufferedInputStream) str;
+ 	else br = new BufferedInputStream(str,BUFFER_INCREMENT);
+ 	next();
+ 	if (index > 0) move(index);
+     }
+     
+     private boolean next() {
+ 	if (end == 1) return false;
+ 	end--; // closer to end
+ 
+ 	try {
+ 	    if (index != -1) {
+ 		br.reset();
+ 	    }
+ 	    int i = br.read();
+ 	    br.mark(bufsize);
+ 	    if (i == -1) {
+ 		end = 1;
+ 		cached = OUT_OF_BOUNDS;
+ 		return false;
+ 	    }
+ 	    cached = (char) i;
+ 	    index = 1;
+ 	} catch (IOException e) { 
+ 	    e.printStackTrace();
+ 	    cached = OUT_OF_BOUNDS;
+ 	    return false; 
+ 	}
+ 	return true;
+     }
+     
+     public char charAt(int index) {
+ 	if (index == 0) {
+ 	    return cached;
+ 	} else if (index >= end) {
+ 	    return OUT_OF_BOUNDS;
+ 	} else if (index == -1) {
+ 	    return lookBehind[0];
+ 	} else if (index == -2) {
+ 	    return lookBehind[1];
+ 	} else if (index < -2) {
+ 	    return OUT_OF_BOUNDS;
+ 	} else if (index >= bufsize) {
+ 	    // Allocate more space in the buffer.
+ 	    try {
+ 		while (bufsize <= index) bufsize += BUFFER_INCREMENT;
+ 		br.reset();
+ 		br.mark(bufsize);
+ 		br.skip(index-1);
+ 	    } catch (IOException e) { }
+ 	} else if (this.index != index) {
+ 	    try {
+ 		br.reset();
+ 		br.skip(index-1);
+ 	    } catch (IOException e) { }
+ 	}
+ 	char ch = OUT_OF_BOUNDS;
+ 	
+ 	try {
+ 	    int i = br.read();
+ 	    this.index = index+1; // this.index is index of next pos relative to charAt(0)
+ 	    if (i == -1) {
+ 		// set flag that next should fail next time?
+ 		end = index;
+ 		return ch;
+ 	    }
+ 	    ch = (char) i;
+ 	} catch (IOException ie) { }
+ 	
+ 	return ch;
+     }
+     
+     public boolean move(int index) {
+ 	// move read position [index] clicks from 'charAt(0)'
+ 	boolean retval = true;
+ 	while (retval && (index-- > 0)) retval = next();
+ 	return retval;
+     }
+     
+     public boolean isValid() {
+ 	return (cached != OUT_OF_BOUNDS);
+     }
+ 
+     public CharIndexed lookBehind(int index, int length) {
+ 	throw new UnsupportedOperationException(
+ 	    "difficult to look behind for an input stream");
+     }
+ 
+     public int length() {
+ 	throw new UnsupportedOperationException(
+ 	    "difficult to tell the length for an input stream");
+     }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexedString.java gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexedString.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexedString.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexedString.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,73 ----
+ /* gnu/regexp/CharIndexedString.java
+    Copyright (C) 1998-2001, 2004, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ import java.io.Serializable;
+ 
+ class CharIndexedString implements CharIndexed, Serializable {
+     private String s;
+     private int anchor;
+     private int len;
+     
+     CharIndexedString(String str, int index) {
+ 	s = str;
+ 	len = s.length();
+ 	anchor = index;
+     }
+ 
+     public char charAt(int index) {
+ 	int pos = anchor + index;
+ 	return ((pos < len) && (pos >= 0)) ? s.charAt(pos) : OUT_OF_BOUNDS;
+     }
+     
+     public boolean isValid() {
+ 	return (anchor < len);
+     }
+     
+     public boolean move(int index) {
+ 	return ((anchor += index) < len);
+     }
+ 
+     public CharIndexed lookBehind(int index, int length) {
+ 	if (length > (anchor + index)) length = anchor + index;
+ 	return new CharIndexedString(s, anchor + index - length);
+     }
+ 
+     public int length() {
+ 	return len - anchor;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,71 ----
+ /* gnu/regexp/CharIndexedStringBuffer.java
+    Copyright (C) 1998-2001, 2004, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ import java.io.Serializable;
+ 
+ class CharIndexedStringBuffer implements CharIndexed, Serializable {
+     private StringBuffer s;
+     private int anchor;
+ 
+     CharIndexedStringBuffer(StringBuffer str, int index) {
+ 	s = str;
+ 	anchor = index;
+     }
+ 
+   public char charAt(int index) {
+       int pos = anchor + index;
+     return ((pos < s.length()) && (pos >= 0)) ? s.charAt(pos) : OUT_OF_BOUNDS;
+   }
+ 
+   public boolean isValid() {
+     return (anchor < s.length());
+   }
+ 
+   public boolean move(int index) {
+     return ((anchor += index) < s.length());
+   }
+ 
+   public CharIndexed lookBehind(int index, int length) {
+     if (length > (anchor + index)) length = anchor + index;
+     return new CharIndexedStringBuffer(s, anchor + index - length);
+   }
+ 
+   public int length() {
+     return s.length() - anchor;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RE.java gcc-4.1.0/libjava/classpath/gnu/regexp/RE.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RE.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RE.java	Mon Feb 13 22:58:37 2006
***************
*** 0 ****
--- 1,1970 ----
+ /* gnu/regexp/RE.java
+    Copyright (C) 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ import java.io.InputStream;
+ import java.io.Serializable;
+ import java.util.Locale;
+ import java.util.PropertyResourceBundle;
+ import java.util.ResourceBundle;
+ import java.util.Vector;
+ 
+ /**
+  * RE provides the user interface for compiling and matching regular
+  * expressions.
+  * <P>
+  * A regular expression object (class RE) is compiled by constructing it
+  * from a String, StringBuffer or character array, with optional 
+  * compilation flags (below)
+  * and an optional syntax specification (see RESyntax; if not specified,
+  * <code>RESyntax.RE_SYNTAX_PERL5</code> is used).
+  * <P>
+  * Once compiled, a regular expression object is reusable as well as
+  * threadsafe: multiple threads can use the RE instance simultaneously
+  * to match against different input text.
+  * <P>
+  * Various methods attempt to match input text against a compiled
+  * regular expression.  These methods are:
+  * <LI><code>isMatch</code>: returns true if the input text in its
+  * entirety matches the regular expression pattern.
+  * <LI><code>getMatch</code>: returns the first match found in the
+  * input text, or null if no match is found.
+  * <LI><code>getAllMatches</code>: returns an array of all
+  * non-overlapping matches found in the input text.  If no matches are
+  * found, the array is zero-length.
+  * <LI><code>substitute</code>: substitute the first occurence of the
+  * pattern in the input text with a replacement string (which may
+  * include metacharacters $0-$9, see REMatch.substituteInto).
+  * <LI><code>substituteAll</code>: same as above, but repeat for each
+  * match before returning.
+  * <LI><code>getMatchEnumeration</code>: returns an REMatchEnumeration
+  * object that allows iteration over the matches (see
+  * REMatchEnumeration for some reasons why you may want to do this
+  * instead of using <code>getAllMatches</code>.
+  * <P>
+  *
+  * These methods all have similar argument lists.  The input can be a
+  * String, a character array, a StringBuffer, or an
+  * InputStream of some sort.  Note that when using an
+  * InputStream, the stream read position cannot be guaranteed after
+  * attempting a match (this is not a bug, but a consequence of the way
+  * regular expressions work).  Using an REMatchEnumeration can
+  * eliminate most positioning problems.
+  *
+  * <P>
+  *
+  * The optional index argument specifies the offset from the beginning
+  * of the text at which the search should start (see the descriptions
+  * of some of the execution flags for how this can affect positional
+  * pattern operators).  For an InputStream, this means an
+  * offset from the current read position, so subsequent calls with the
+  * same index argument on an InputStream will not
+  * necessarily access the same position on the stream, whereas
+  * repeated searches at a given index in a fixed string will return
+  * consistent results.
+  *
+  * <P>
+  * You can optionally affect the execution environment by using a
+  * combination of execution flags (constants listed below).
+  * 
+  * <P>
+  * All operations on a regular expression are performed in a
+  * thread-safe manner.
+  *
+  * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
+  * @version 1.1.5-dev, to be released
+  */
+ 
+ public class RE extends REToken {
+ 
+   private static final class IntPair implements Serializable {
+     public int first, second;
+   }
+ 
+   private static final class CharUnit implements Serializable {
+     public char ch;
+     public boolean bk;
+   }
+ 
+   // This String will be returned by getVersion()
+   private static final String VERSION = "1.1.5-dev";
+ 
+   // The localized strings are kept in a separate file
+   private static ResourceBundle messages = PropertyResourceBundle.getBundle("gnu/regexp/MessagesBundle", Locale.getDefault());
+ 
+   // These are, respectively, the first and last tokens in our linked list
+   // If there is only one token, firstToken == lastToken
+   private REToken firstToken, lastToken;
+ 
+   // This is the number of subexpressions in this regular expression,
+   // with a minimum value of zero.  Returned by getNumSubs()
+   private int numSubs;
+ 
+     /** Minimum length, in characters, of any possible match. */
+     private int minimumLength;
+     private int maximumLength;
+ 
+   /**
+    * Compilation flag. Do  not  differentiate  case.   Subsequent
+    * searches  using  this  RE will be case insensitive.
+    */
+   public static final int REG_ICASE = 0x02;
+ 
+   /**
+    * Compilation flag. The match-any-character operator (dot)
+    * will match a newline character.  When set this overrides the syntax
+    * bit RE_DOT_NEWLINE (see RESyntax for details).  This is equivalent to
+    * the "/s" operator in Perl.
+    */
+   public static final int REG_DOT_NEWLINE = 0x04;
+ 
+   /**
+    * Compilation flag. Use multiline mode.  In this mode, the ^ and $
+    * anchors will match based on newlines within the input. This is
+    * equivalent to the "/m" operator in Perl.
+    */
+   public static final int REG_MULTILINE = 0x08;
+ 
+   /**
+    * Execution flag.
+    * The match-beginning operator (^) will not match at the beginning
+    * of the input string. Useful for matching on a substring when you
+    * know the context of the input is such that position zero of the
+    * input to the match test is not actually position zero of the text.
+    * <P>
+    * This example demonstrates the results of various ways of matching on
+    * a substring.
+    * <P>
+    * <CODE>
+    * String s = "food bar fool";<BR>
+    * RE exp = new RE("^foo.");<BR>
+    * REMatch m0 = exp.getMatch(s);<BR>
+    * REMatch m1 = exp.getMatch(s.substring(8));<BR>
+    * REMatch m2 = exp.getMatch(s.substring(8),0,RE.REG_NOTBOL); <BR>
+    * REMatch m3 = exp.getMatch(s,8);                            <BR>
+    * REMatch m4 = exp.getMatch(s,8,RE.REG_ANCHORINDEX);         <BR>
+    * <P>
+    * // Results:<BR>
+    * //  m0.toString(): "food"<BR>
+    * //  m1.toString(): "fool"<BR>
+    * //  m2.toString(): null<BR>
+    * //  m3.toString(): null<BR>
+    * //  m4.toString(): "fool"<BR>
+    * </CODE>
+    */
+   public static final int REG_NOTBOL = 0x10;
+ 
+   /**
+    * Execution flag.
+    * The match-end operator ($) does not match at the end
+    * of the input string. Useful for matching on substrings.
+    */
+   public static final int REG_NOTEOL = 0x20;
+ 
+   /**
+    * Execution flag.
+    * When a match method is invoked that starts matching at a non-zero
+    * index into the input, treat the input as if it begins at the index
+    * given.  The effect of this flag is that the engine does not "see"
+    * any text in the input before the given index.  This is useful so
+    * that the match-beginning operator (^) matches not at position 0
+    * in the input string, but at the position the search started at
+    * (based on the index input given to the getMatch function).  See
+    * the example under REG_NOTBOL.  It also affects the use of the \&lt;
+    * and \b operators.
+    */
+   public static final int REG_ANCHORINDEX = 0x40;
+ 
+   /**
+    * Execution flag.
+    * The substitute and substituteAll methods will not attempt to
+    * interpolate occurrences of $1-$9 in the replacement text with
+    * the corresponding subexpressions.  For example, you may want to
+    * replace all matches of "one dollar" with "$1".
+    */
+   public static final int REG_NO_INTERPOLATE = 0x80;
+ 
+   /**
+    * Execution flag.
+    * Try to match the whole input string. An implicit match-end operator
+    * is added to this regexp.
+    */
+   public static final int REG_TRY_ENTIRE_MATCH = 0x0100;
+ 
+   /**
+    * Execution flag.
+    * The substitute and substituteAll methods will treat the
+    * character '\' in the replacement as an escape to a literal
+    * character. In this case "\n", "\$", "\\", "\x40" and "\012"
+    * will become "n", "$", "\", "x40" and "012" respectively.
+    * This flag has no effect if REG_NO_INTERPOLATE is set on.
+    */
+   public static final int REG_REPLACE_USE_BACKSLASHESCAPE = 0x0200;
+ 
+   /** Returns a string representing the version of the gnu.regexp package. */
+   public static final String version() {
+     return VERSION;
+   }
+ 
+   // Retrieves a message from the ResourceBundle
+   static final String getLocalizedMessage(String key) {
+     return messages.getString(key);
+   }
+ 
+   /**
+    * Constructs a regular expression pattern buffer without any compilation
+    * flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).
+    *
+    * @param pattern A regular expression pattern, in the form of a String,
+    *   StringBuffer or char[].  Other input types will be converted to
+    *   strings using the toString() method.
+    * @exception REException The input pattern could not be parsed.
+    * @exception NullPointerException The pattern was null.
+    */
+   public RE(Object pattern) throws REException {
+     this(pattern,0,RESyntax.RE_SYNTAX_PERL5,0,0);
+   }
+ 
+   /**
+    * Constructs a regular expression pattern buffer using the specified
+    * compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).
+    *
+    * @param pattern A regular expression pattern, in the form of a String,
+    *   StringBuffer, or char[].  Other input types will be converted to
+    *   strings using the toString() method.
+    * @param cflags The logical OR of any combination of the compilation flags listed above.
+    * @exception REException The input pattern could not be parsed.
+    * @exception NullPointerException The pattern was null.
+    */
+   public RE(Object pattern, int cflags) throws REException {
+     this(pattern,cflags,RESyntax.RE_SYNTAX_PERL5,0,0);
+   }
+ 
+   /**
+    * Constructs a regular expression pattern buffer using the specified
+    * compilation flags and regular expression syntax.
+    *
+    * @param pattern A regular expression pattern, in the form of a String,
+    *   StringBuffer, or char[].  Other input types will be converted to
+    *   strings using the toString() method.
+    * @param cflags The logical OR of any combination of the compilation flags listed above.
+    * @param syntax The type of regular expression syntax to use.
+    * @exception REException The input pattern could not be parsed.
+    * @exception NullPointerException The pattern was null.
+    */
+   public RE(Object pattern, int cflags, RESyntax syntax) throws REException {
+     this(pattern,cflags,syntax,0,0);
+   }
+ 
+   // internal constructor used for alternation
+   private RE(REToken first, REToken last,int subs, int subIndex, int minLength, int maxLength) {
+     super(subIndex);
+     firstToken = first;
+     lastToken = last;
+     numSubs = subs;
+     minimumLength = minLength;
+     maximumLength = maxLength;
+     addToken(new RETokenEndSub(subIndex));
+   }
+ 
+   private RE(Object patternObj, int cflags, RESyntax syntax, int myIndex, int nextSub) throws REException {
+     super(myIndex); // Subexpression index of this token.
+     initialize(patternObj, cflags, syntax, myIndex, nextSub);
+   }
+ 
+     // For use by subclasses
+     protected RE() { super(0); }
+ 
+     // The meat of construction
+   protected void initialize(Object patternObj, int cflags, RESyntax syntax, int myIndex, int nextSub) throws REException {
+       char[] pattern;
+     if (patternObj instanceof String) {
+       pattern = ((String) patternObj).toCharArray();
+     } else if (patternObj instanceof char[]) {
+       pattern = (char[]) patternObj;
+     } else if (patternObj instanceof StringBuffer) {
+       pattern = new char [((StringBuffer) patternObj).length()];
+       ((StringBuffer) patternObj).getChars(0,pattern.length,pattern,0);
+     } else {
+ 	pattern = patternObj.toString().toCharArray();
+     }
+ 
+     int pLength = pattern.length;
+ 
+     numSubs = 0; // Number of subexpressions in this token.
+     Vector branches = null;
+ 
+     // linked list of tokens (sort of -- some closed loops can exist)
+     firstToken = lastToken = null;
+ 
+     // Precalculate these so we don't pay for the math every time we
+     // need to access them.
+     boolean insens = ((cflags & REG_ICASE) > 0);
+ 
+     // Parse pattern into tokens.  Does anyone know if it's more efficient
+     // to use char[] than a String.charAt()?  I'm assuming so.
+ 
+     // index tracks the position in the char array
+     int index = 0;
+ 
+     // this will be the current parse character (pattern[index])
+     CharUnit unit = new CharUnit();
+ 
+     // This is used for {x,y} calculations
+     IntPair minMax = new IntPair();
+ 
+     // Buffer a token so we can create a TokenRepeated, etc.
+     REToken currentToken = null;
+     char ch;
+     boolean quot = false;
+ 
+     // Saved syntax and flags.
+     RESyntax savedSyntax = null;
+     int savedCflags = 0;
+     boolean flagsSaved = false;
+ 
+     while (index < pLength) {
+       // read the next character unit (including backslash escapes)
+       index = getCharUnit(pattern,index,unit,quot);
+ 
+       if (unit.bk)
+         if (unit.ch == 'Q') {
+           quot = true;
+           continue;
+         } else if (unit.ch == 'E') {
+           quot = false;
+           continue;
+         }
+       if (quot)
+       	unit.bk = false;
+ 
+       // ALTERNATION OPERATOR
+       //  \| or | (if RE_NO_BK_VBAR) or newline (if RE_NEWLINE_ALT)
+       //  not available if RE_LIMITED_OPS is set
+ 
+       // TODO: the '\n' literal here should be a test against REToken.newline,
+       // which unfortunately may be more than a single character.
+       if ( ( (unit.ch == '|' && (syntax.get(RESyntax.RE_NO_BK_VBAR) ^ (unit.bk || quot)))
+ 	     || (syntax.get(RESyntax.RE_NEWLINE_ALT) && (unit.ch == '\n') && !(unit.bk || quot)) )
+ 	   && !syntax.get(RESyntax.RE_LIMITED_OPS)) {
+ 	// make everything up to here be a branch. create vector if nec.
+ 	addToken(currentToken);
+ 	RE theBranch = new RE(firstToken, lastToken, numSubs, subIndex, minimumLength, maximumLength);
+ 	minimumLength = 0;
+ 	maximumLength = 0;
+ 	if (branches == null) {
+ 	    branches = new Vector();
+ 	}
+ 	branches.addElement(theBranch);
+ 	firstToken = lastToken = currentToken = null;
+       }
+       
+       // INTERVAL OPERATOR:
+       //  {x} | {x,} | {x,y}  (RE_INTERVALS && RE_NO_BK_BRACES)
+       //  \{x\} | \{x,\} | \{x,y\} (RE_INTERVALS && !RE_NO_BK_BRACES)
+       //
+       // OPEN QUESTION: 
+       //  what is proper interpretation of '{' at start of string?
+       //
+       // This method used to check "repeat.empty.token" to avoid such regexp
+       // as "(a*){2,}", but now "repeat.empty.token" is allowed.
+ 
+       else if ((unit.ch == '{') && syntax.get(RESyntax.RE_INTERVALS) && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ (unit.bk || quot))) {
+ 	int newIndex = getMinMax(pattern,index,minMax,syntax);
+         if (newIndex > index) {
+           if (minMax.first > minMax.second)
+             throw new REException(getLocalizedMessage("interval.order"),REException.REG_BADRPT,newIndex);
+           if (currentToken == null)
+             throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,newIndex);
+           if (currentToken instanceof RETokenRepeated) 
+             throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,newIndex);
+           if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
+             throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,newIndex);
+           index = newIndex;
+           currentToken = setRepeated(currentToken,minMax.first,minMax.second,index); 
+         }
+         else {
+           addToken(currentToken);
+           currentToken = new RETokenChar(subIndex,unit.ch,insens);
+         } 
+       }
+       
+       // LIST OPERATOR:
+       //  [...] | [^...]
+ 
+       else if ((unit.ch == '[') && !(unit.bk || quot)) {
+ 	// Create a new RETokenOneOf
+ 	ParseCharClassResult result = parseCharClass(
+ 		subIndex, pattern, index, pLength, cflags, syntax, 0);
+ 	addToken(currentToken);
+ 	currentToken = result.token;
+ 	index = result.index;
+       }
+ 
+       // SUBEXPRESSIONS
+       //  (...) | \(...\) depending on RE_NO_BK_PARENS
+ 
+       else if ((unit.ch == '(') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ (unit.bk || quot))) {
+ 	boolean pure = false;
+ 	boolean comment = false;
+         boolean lookAhead = false;
+         boolean lookBehind = false;
+         boolean independent = false;
+         boolean negativelh = false;
+         boolean negativelb = false;
+ 	if ((index+1 < pLength) && (pattern[index] == '?')) {
+ 	  switch (pattern[index+1]) {
+           case '!':
+             if (syntax.get(RESyntax.RE_LOOKAHEAD)) {
+               pure = true;
+               negativelh = true;
+               lookAhead = true;
+               index += 2;
+             }
+             break;
+           case '=':
+             if (syntax.get(RESyntax.RE_LOOKAHEAD)) {
+               pure = true;
+               lookAhead = true;
+               index += 2;
+             }
+             break;
+ 	  case '<':
+ 	    // We assume that if the syntax supports look-ahead,
+ 	    // it also supports look-behind.
+ 	    if (syntax.get(RESyntax.RE_LOOKAHEAD)) {
+ 		index++;
+ 		switch (pattern[index +1]) {
+ 		case '!':
+ 		  pure = true;
+ 		  negativelb = true;
+ 		  lookBehind = true;
+ 		  index += 2;
+ 		  break;
+ 		case '=':
+ 		  pure = true;
+ 		  lookBehind = true;
+ 		  index += 2;
+ 		}
+ 	    }
+ 	    break;
+ 	  case '>':
+ 	    // We assume that if the syntax supports look-ahead,
+ 	    // it also supports independent group.
+             if (syntax.get(RESyntax.RE_LOOKAHEAD)) {
+               pure = true;
+               independent = true;
+               index += 2;
+             }
+             break;
+ 	  case 'i':
+ 	  case 'd':
+ 	  case 'm':
+ 	  case 's':
+ 	  // case 'u':  not supported
+ 	  // case 'x':  not supported
+ 	  case '-':
+             if (!syntax.get(RESyntax.RE_EMBEDDED_FLAGS)) break;
+ 	    // Set or reset syntax flags.
+ 	    int flagIndex = index + 1;
+ 	    int endFlag = -1;
+ 	    RESyntax newSyntax = new RESyntax(syntax);
+ 	    int newCflags = cflags;
+ 	    boolean negate = false;
+ 	    while (flagIndex < pLength && endFlag < 0) {
+ 	        switch(pattern[flagIndex]) {
+ 	  	case 'i':
+ 		  if (negate)
+ 		    newCflags &= ~REG_ICASE;
+ 		  else
+ 		    newCflags |= REG_ICASE;
+ 		  flagIndex++;
+ 		  break;
+ 	  	case 'd':
+ 		  if (negate)
+ 		    newSyntax.setLineSeparator(RESyntax.DEFAULT_LINE_SEPARATOR);
+ 		  else
+ 		    newSyntax.setLineSeparator("\n");
+ 		  flagIndex++;
+ 		  break;
+ 	  	case 'm':
+ 		  if (negate)
+ 		    newCflags &= ~REG_MULTILINE;
+ 		  else
+ 		    newCflags |= REG_MULTILINE;
+ 		  flagIndex++;
+ 		  break;
+ 	  	case 's':
+ 		  if (negate)
+ 		    newCflags &= ~REG_DOT_NEWLINE;
+ 		  else
+ 		    newCflags |= REG_DOT_NEWLINE;
+ 		  flagIndex++;
+ 		  break;
+ 	  	// case 'u': not supported
+ 	  	// case 'x': not supported
+ 	  	case '-':
+ 		  negate = true;
+ 		  flagIndex++;
+ 		  break;
+ 		case ':':
+ 		case ')':
+ 		  endFlag = pattern[flagIndex];
+ 		  break;
+ 		default:
+             	  throw new REException(getLocalizedMessage("repeat.no.token"), REException.REG_BADRPT, index);
+ 		}
+ 	    }
+ 	    if (endFlag == ')') {
+ 		syntax = newSyntax;
+ 		cflags = newCflags;
+ 		insens = ((cflags & REG_ICASE) > 0);
+ 		// This can be treated as though it were a comment.
+ 		comment = true;
+ 		index = flagIndex - 1;
+ 		break;
+ 	    }
+ 	    if (endFlag == ':') {
+ 		savedSyntax = syntax;
+ 		savedCflags = cflags;
+ 		flagsSaved = true;
+ 		syntax = newSyntax;
+ 		cflags = newCflags;
+ 		insens = ((cflags & REG_ICASE) > 0);
+ 		index = flagIndex -1;
+ 		// Fall through to the next case.
+ 	    }
+ 	    else {
+ 	        throw new REException(getLocalizedMessage("unmatched.paren"), REException.REG_ESUBREG,index);
+ 	    }
+ 	  case ':':
+ 	    if (syntax.get(RESyntax.RE_PURE_GROUPING)) {
+ 	      pure = true;
+ 	      index += 2;
+ 	    }
+ 	    break;
+ 	  case '#':
+ 	    if (syntax.get(RESyntax.RE_COMMENTS)) {
+ 	      comment = true;
+ 	    }
+ 	    break;
+           default:
+             throw new REException(getLocalizedMessage("repeat.no.token"), REException.REG_BADRPT, index);
+ 	  }
+ 	}
+ 
+ 	if (index >= pLength) {
+ 	    throw new REException(getLocalizedMessage("unmatched.paren"), REException.REG_ESUBREG,index);
+ 	}
+ 
+ 	// find end of subexpression
+ 	int endIndex = index;
+ 	int nextIndex = index;
+ 	int nested = 0;
+ 
+ 	while ( ((nextIndex = getCharUnit(pattern,endIndex,unit,false)) > 0)
+ 		&& !(nested == 0 && (unit.ch == ')') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ (unit.bk || quot))) ) {
+ 	  if ((endIndex = nextIndex) >= pLength)
+ 	    throw new REException(getLocalizedMessage("subexpr.no.end"),REException.REG_ESUBREG,nextIndex);
+ 	  else if ((unit.ch == '[') && !(unit.bk || quot)) {
+ 	    // I hate to do something similar to the LIST OPERATOR matters
+ 	    // above, but ...
+ 	    int listIndex = nextIndex;
+ 	    if (listIndex < pLength && pattern[listIndex] == '^') listIndex++;
+ 	    if (listIndex < pLength && pattern[listIndex] == ']') listIndex++;
+ 	    int listEndIndex = -1;
+ 	    int listNest = 0;
+ 	    while (listIndex < pLength && listEndIndex < 0) {
+ 	      switch(pattern[listIndex++]) {
+ 		case '\\':
+ 		  listIndex++;
+ 		  break;
+ 		case '[':
+ 		  // Sun's API document says that regexp like "[a-d[m-p]]"
+ 		  // is legal. Even something like "[[[^]]]]" is accepted.
+ 		  listNest++;
+ 		  if (listIndex < pLength && pattern[listIndex] == '^') listIndex++;
+ 		  if (listIndex < pLength && pattern[listIndex] == ']') listIndex++;
+ 		  break;
+ 		case ']':
+ 		  if (listNest == 0)
+ 		    listEndIndex = listIndex;
+ 		  listNest--;
+ 		  break;
+ 	      }
+ 	    }
+ 	    if (listEndIndex >= 0) {
+ 	      nextIndex = listEndIndex;
+ 	      if ((endIndex = nextIndex) >= pLength)
+ 	        throw new REException(getLocalizedMessage("subexpr.no.end"),REException.REG_ESUBREG,nextIndex);
+ 	      else
+ 	        continue;
+ 	    }
+ 	    throw new REException(getLocalizedMessage("subexpr.no.end"),REException.REG_ESUBREG,nextIndex);
+ 	  }
+ 	  else if (unit.ch == '(' && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ (unit.bk || quot)))
+ 	    nested++;
+ 	  else if (unit.ch == ')' && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ (unit.bk || quot)))
+ 	    nested--;
+ 	}
+ 
+ 	// endIndex is now position at a ')','\)' 
+ 	// nextIndex is end of string or position after ')' or '\)'
+ 
+ 	if (comment) index = nextIndex;
+ 	else { // not a comment
+ 	  // create RE subexpression as token.
+ 	  addToken(currentToken);
+ 	  if (!pure) {
+ 	    numSubs++;
+ 	  }
+ 
+ 	  int useIndex = (pure || lookAhead || lookBehind || independent) ?
+ 			 0 : nextSub + numSubs;
+ 	  currentToken = new RE(String.valueOf(pattern,index,endIndex-index).toCharArray(),cflags,syntax,useIndex,nextSub + numSubs);
+ 	  numSubs += ((RE) currentToken).getNumSubs();
+ 
+           if (lookAhead) {
+ 	      currentToken = new RETokenLookAhead(currentToken,negativelh);
+ 	  }
+           else if (lookBehind) {
+ 	      currentToken = new RETokenLookBehind(currentToken,negativelb);
+ 	  }
+           else if (independent) {
+ 	      currentToken = new RETokenIndependent(currentToken);
+ 	  }
+ 
+ 	  index = nextIndex;
+ 	  if (flagsSaved) {
+ 	      syntax = savedSyntax;
+ 	      cflags = savedCflags;
+ 	      insens = ((cflags & REG_ICASE) > 0);
+ 	      flagsSaved = false;
+ 	  }
+ 	} // not a comment
+       } // subexpression
+     
+       // UNMATCHED RIGHT PAREN
+       // ) or \) throw exception if
+       // !syntax.get(RESyntax.RE_UNMATCHED_RIGHT_PAREN_ORD)
+       else if (!syntax.get(RESyntax.RE_UNMATCHED_RIGHT_PAREN_ORD) && ((unit.ch == ')') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ (unit.bk || quot)))) {
+ 	throw new REException(getLocalizedMessage("unmatched.paren"),REException.REG_EPAREN,index);
+       }
+ 
+       // START OF LINE OPERATOR
+       //  ^
+ 
+       else if ((unit.ch == '^') && !(unit.bk || quot)) {
+ 	addToken(currentToken);
+ 	currentToken = null;
+ 	addToken(new RETokenStart(subIndex,((cflags & REG_MULTILINE) > 0) ? syntax.getLineSeparator() : null));
+       }
+ 
+       // END OF LINE OPERATOR
+       //  $
+ 
+       else if ((unit.ch == '$') && !(unit.bk || quot)) {
+ 	addToken(currentToken);
+ 	currentToken = null;
+ 	addToken(new RETokenEnd(subIndex,((cflags & REG_MULTILINE) > 0) ? syntax.getLineSeparator() : null));
+       }
+ 
+       // MATCH-ANY-CHARACTER OPERATOR (except possibly newline and null)
+       //  .
+ 
+       else if ((unit.ch == '.') && !(unit.bk || quot)) {
+ 	addToken(currentToken);
+ 	currentToken = new RETokenAny(subIndex,syntax.get(RESyntax.RE_DOT_NEWLINE) || ((cflags & REG_DOT_NEWLINE) > 0),syntax.get(RESyntax.RE_DOT_NOT_NULL));
+       }
+ 
+       // ZERO-OR-MORE REPEAT OPERATOR
+       //  *
+       //
+       // This method used to check "repeat.empty.token" to avoid such regexp
+       // as "(a*)*", but now "repeat.empty.token" is allowed.
+ 
+       else if ((unit.ch == '*') && !(unit.bk || quot)) {
+ 	if (currentToken == null)
+           throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
+ 	if (currentToken instanceof RETokenRepeated)
+           throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,index);
+ 	if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
+ 	  throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,index);
+ 	currentToken = setRepeated(currentToken,0,Integer.MAX_VALUE,index);
+       }
+ 
+       // ONE-OR-MORE REPEAT OPERATOR / POSSESSIVE MATCHING OPERATOR
+       //  + | \+ depending on RE_BK_PLUS_QM
+       //  not available if RE_LIMITED_OPS is set
+       //
+       // This method used to check "repeat.empty.token" to avoid such regexp
+       // as "(a*)+", but now "repeat.empty.token" is allowed.
+ 
+       else if ((unit.ch == '+') && !syntax.get(RESyntax.RE_LIMITED_OPS) && (!syntax.get(RESyntax.RE_BK_PLUS_QM) ^ (unit.bk || quot))) {
+ 	if (currentToken == null)
+           throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
+ 	
+ 	// Check for possessive matching on RETokenRepeated
+ 	if (currentToken instanceof RETokenRepeated) {
+ 	  RETokenRepeated tokenRep = (RETokenRepeated)currentToken;
+ 	  if (syntax.get(RESyntax.RE_POSSESSIVE_OPS) && !tokenRep.isPossessive() && !tokenRep.isStingy())
+ 	    tokenRep.makePossessive();
+ 	  else
+ 	    throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,index);
+ 
+ 	}
+ 	else if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
+ 	  throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,index);
+ 	else
+ 	  currentToken = setRepeated(currentToken,1,Integer.MAX_VALUE,index);
+       }
+ 
+       // ZERO-OR-ONE REPEAT OPERATOR / STINGY MATCHING OPERATOR
+       //  ? | \? depending on RE_BK_PLUS_QM
+       //  not available if RE_LIMITED_OPS is set
+       //  stingy matching if RE_STINGY_OPS is set and it follows a quantifier
+ 
+       else if ((unit.ch == '?') && !syntax.get(RESyntax.RE_LIMITED_OPS) && (!syntax.get(RESyntax.RE_BK_PLUS_QM) ^ (unit.bk || quot))) {
+ 	if (currentToken == null) throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
+ 
+ 	// Check for stingy matching on RETokenRepeated
+ 	if (currentToken instanceof RETokenRepeated) {
+ 	  RETokenRepeated tokenRep = (RETokenRepeated)currentToken;
+ 	  if (syntax.get(RESyntax.RE_STINGY_OPS) && !tokenRep.isStingy() && !tokenRep.isPossessive())
+ 	    tokenRep.makeStingy();
+ 	  else
+ 	    throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,index);
+ 	}
+ 	else if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
+ 	  throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,index);
+ 	else
+ 	  currentToken = setRepeated(currentToken,0,1,index);
+       }
+ 
+       // OCTAL CHARACTER
+       //  \0377
+ 	
+       else if (unit.bk && (unit.ch == '0') && syntax.get(RESyntax.RE_OCTAL_CHAR)) {
+ 	CharExpression ce = getCharExpression(pattern, index - 2, pLength, syntax);
+ 	if (ce == null)
+ 	  throw new REException("invalid octal character", REException.REG_ESCAPE, index);
+ 	index = index - 2 + ce.len;
+ 	addToken(currentToken);
+ 	currentToken = new RETokenChar(subIndex,ce.ch,insens);
+       }
+ 
+       // BACKREFERENCE OPERATOR
+       //  \1 \2 ... \9 and \10 \11 \12 ...
+       // not available if RE_NO_BK_REFS is set
+       // Perl recognizes \10, \11, and so on only if enough number of
+       // parentheses have opened before it, otherwise they are treated
+       // as aliases of \010, \011, ... (octal characters).  In case of
+       // Sun's JDK, octal character expression must always begin with \0.
+       // We will do as JDK does. But FIXME, take a look at "(a)(b)\29".
+       // JDK treats \2 as a back reference to the 2nd group because
+       // there are only two groups. But in our poor implementation,
+       // we cannot help but treat \29 as a back reference to the 29th group.
+ 
+       else if (unit.bk && Character.isDigit(unit.ch) && !syntax.get(RESyntax.RE_NO_BK_REFS)) {
+ 	addToken(currentToken);
+ 	int numBegin = index - 1;
+ 	int numEnd = pLength;
+ 	for (int i = index; i < pLength; i++) {
+ 	    if (! Character.isDigit(pattern[i])) {
+ 		numEnd = i;
+ 		break;
+ 	    }
+ 	}
+ 	int num = parseInt(pattern, numBegin, numEnd-numBegin, 10);
+ 
+ 	currentToken = new RETokenBackRef(subIndex,num,insens);
+ 	index = numEnd;
+       }
+ 
+       // START OF STRING OPERATOR
+       //  \A if RE_STRING_ANCHORS is set
+       
+       else if (unit.bk && (unit.ch == 'A') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
+ 	addToken(currentToken);
+ 	currentToken = new RETokenStart(subIndex,null);
+       }
+ 
+       // WORD BREAK OPERATOR
+       //  \b if ????
+ 
+       else if (unit.bk && (unit.ch == 'b') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.BEGIN | RETokenWordBoundary.END, false);
+       } 
+ 
+       // WORD BEGIN OPERATOR 
+       //  \< if ????
+       else if (unit.bk && (unit.ch == '<')) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.BEGIN, false);
+       } 
+ 
+       // WORD END OPERATOR 
+       //  \> if ????
+       else if (unit.bk && (unit.ch == '>')) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.END, false);
+       } 
+ 
+       // NON-WORD BREAK OPERATOR
+       // \B if ????
+ 
+       else if (unit.bk && (unit.ch == 'B') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.BEGIN | RETokenWordBoundary.END, true);
+       } 
+ 
+       
+       // DIGIT OPERATOR
+       //  \d if RE_CHAR_CLASS_ESCAPES is set
+       
+       else if (unit.bk && (unit.ch == 'd') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
+ 	addToken(currentToken);
+ 	currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.DIGIT,insens,false);
+       }
+ 
+       // NON-DIGIT OPERATOR
+       //  \D
+ 
+ 	else if (unit.bk && (unit.ch == 'D') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.DIGIT,insens,true);
+ 	}
+ 
+ 	// NEWLINE ESCAPE
+         //  \n
+ 
+ 	else if (unit.bk && (unit.ch == 'n')) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenChar(subIndex,'\n',false);
+ 	}
+ 
+ 	// RETURN ESCAPE
+         //  \r
+ 
+ 	else if (unit.bk && (unit.ch == 'r')) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenChar(subIndex,'\r',false);
+ 	}
+ 
+ 	// WHITESPACE OPERATOR
+         //  \s if RE_CHAR_CLASS_ESCAPES is set
+ 
+ 	else if (unit.bk && (unit.ch == 's') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.SPACE,insens,false);
+ 	}
+ 
+ 	// NON-WHITESPACE OPERATOR
+         //  \S
+ 
+ 	else if (unit.bk && (unit.ch == 'S') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.SPACE,insens,true);
+ 	}
+ 
+ 	// TAB ESCAPE
+         //  \t
+ 
+ 	else if (unit.bk && (unit.ch == 't')) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenChar(subIndex,'\t',false);
+ 	}
+ 
+ 	// ALPHANUMERIC OPERATOR
+         //  \w
+ 
+ 	else if (unit.bk && (unit.ch == 'w') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.ALNUM,insens,false);
+ 	}
+ 
+ 	// NON-ALPHANUMERIC OPERATOR
+         //  \W
+ 
+ 	else if (unit.bk && (unit.ch == 'W') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.ALNUM,insens,true);
+ 	}
+ 
+ 	// END OF STRING OPERATOR
+         //  \Z
+ 
+ 	else if (unit.bk && (unit.ch == 'Z') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenEnd(subIndex,null);
+ 	}
+ 
+         // HEX CHARACTER, UNICODE CHARACTER
+         //  \x1B, \u1234
+ 	
+ 	else if ((unit.bk && (unit.ch == 'x') && syntax.get(RESyntax.RE_HEX_CHAR)) ||
+ 		 (unit.bk && (unit.ch == 'u') && syntax.get(RESyntax.RE_UNICODE_CHAR))) {
+ 	  CharExpression ce = getCharExpression(pattern, index - 2, pLength, syntax);
+ 	  if (ce == null)
+ 	    throw new REException("invalid hex character", REException.REG_ESCAPE, index);
+ 	  index = index - 2 + ce.len;
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenChar(subIndex,ce.ch,insens);
+ 	}
+ 
+ 	// NAMED PROPERTY
+ 	// \p{prop}, \P{prop}
+ 
+ 	else if ((unit.bk && (unit.ch == 'p') && syntax.get(RESyntax.RE_NAMED_PROPERTY)) ||
+ 	         (unit.bk && (unit.ch == 'P') && syntax.get(RESyntax.RE_NAMED_PROPERTY))) {
+ 	  NamedProperty np = getNamedProperty(pattern, index - 2, pLength);
+ 	  if (np == null)
+ 	      throw new REException("invalid escape sequence", REException.REG_ESCAPE, index);
+ 	  index = index - 2 + np.len;
+ 	  addToken(currentToken);
+ 	  currentToken = getRETokenNamedProperty(subIndex,np,insens,index);
+ 	}
+ 
+ 	// NON-SPECIAL CHARACTER (or escape to make literal)
+         //  c | \* for example
+ 
+ 	else {  // not a special character
+ 	  addToken(currentToken);
+ 	  currentToken = new RETokenChar(subIndex,unit.ch,insens);
+ 	} 
+       } // end while
+ 
+     // Add final buffered token and an EndSub marker
+     addToken(currentToken);
+       
+     if (branches != null) {
+ 	branches.addElement(new RE(firstToken,lastToken,numSubs,subIndex,minimumLength, maximumLength));
+ 	branches.trimToSize(); // compact the Vector
+ 	minimumLength = 0;
+ 	maximumLength = 0;
+ 	firstToken = lastToken = null;
+ 	addToken(new RETokenOneOf(subIndex,branches,false));
+     } 
+     else addToken(new RETokenEndSub(subIndex));
+ 
+   }
+ 
+   private static class ParseCharClassResult {
+       RETokenOneOf token;
+       int index;
+       boolean returnAtAndOperator = false;
+   }
+ 
+   /**
+    * Parse [...] or [^...] and make an RETokenOneOf instance.
+    * @param subIndex subIndex to be given to the created RETokenOneOf instance.
+    * @param pattern Input array of characters to be parsed.
+    * @param index Index pointing to the character next to the beginning '['.
+    * @param pLength Limit of the input array.
+    * @param cflags Compilation flags used to parse the pattern.
+    * @param pflags Flags that affect the behavior of this method.
+    * @param syntax Syntax used to parse the pattern.
+    */
+   private static ParseCharClassResult parseCharClass(int subIndex,
+ 		char[] pattern, int index,
+ 		int pLength, int cflags, RESyntax syntax, int pflags)
+ 		throws REException {
+ 
+ 	boolean insens = ((cflags & REG_ICASE) > 0);
+ 	Vector options = new Vector();
+ 	Vector addition = new Vector();
+ 	boolean additionAndAppeared = false;
+ 	final int RETURN_AT_AND = 0x01;
+ 	boolean returnAtAndOperator = ((pflags & RETURN_AT_AND) != 0);
+ 	boolean negative = false;
+ 	char ch;
+ 
+ 	char lastChar = 0;
+ 	boolean lastCharIsSet = false;
+ 	if (index == pLength) throw new REException(getLocalizedMessage("unmatched.bracket"),REException.REG_EBRACK,index);
+ 	
+ 	// Check for initial caret, negation
+ 	if ((ch = pattern[index]) == '^') {
+ 	  negative = true;
+ 	  if (++index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
+ 	  ch = pattern[index];
+ 	}
+ 
+ 	// Check for leading right bracket literal
+ 	if (ch == ']') {
+ 	  lastChar = ch; lastCharIsSet = true;
+ 	  if (++index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
+ 	}
+ 
+ 	while ((ch = pattern[index++]) != ']') {
+ 	  if ((ch == '-') && (lastCharIsSet)) {
+ 	    if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
+ 	    if ((ch = pattern[index]) == ']') {
+ 	      options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ 	      lastChar = '-';
+ 	    } else {
+ 	      if ((ch == '\\') && syntax.get(RESyntax.RE_BACKSLASH_ESCAPE_IN_LISTS)) {
+ 	        CharExpression ce = getCharExpression(pattern, index, pLength, syntax);
+ 	        if (ce == null)
+ 		  throw new REException("invalid escape sequence", REException.REG_ESCAPE, index);
+ 		ch = ce.ch;
+ 		index = index + ce.len - 1;
+ 	      }
+ 	      options.addElement(new RETokenRange(subIndex,lastChar,ch,insens));
+ 	      lastChar = 0; lastCharIsSet = false;
+ 	      index++;
+ 	    }
+           } else if ((ch == '\\') && syntax.get(RESyntax.RE_BACKSLASH_ESCAPE_IN_LISTS)) {
+             if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
+ 	    int posixID = -1;
+ 	    boolean negate = false;
+             char asciiEsc = 0;
+ 	    boolean asciiEscIsSet = false;
+ 	    NamedProperty np = null;
+ 	    if (("dswDSW".indexOf(pattern[index]) != -1) && syntax.get(RESyntax.RE_CHAR_CLASS_ESC_IN_LISTS)) {
+ 	      switch (pattern[index]) {
+ 	      case 'D':
+ 		negate = true;
+ 	      case 'd':
+ 		posixID = RETokenPOSIX.DIGIT;
+ 		break;
+ 	      case 'S':
+ 		negate = true;
+ 	      case 's':
+ 		posixID = RETokenPOSIX.SPACE;
+ 		break;
+ 	      case 'W':
+ 		negate = true;
+ 	      case 'w':
+ 		posixID = RETokenPOSIX.ALNUM;
+ 		break;
+ 	      }
+ 	    }
+ 	    if (("pP".indexOf(pattern[index]) != -1) && syntax.get(RESyntax.RE_NAMED_PROPERTY)) {
+ 	      np = getNamedProperty(pattern, index - 1, pLength);
+ 	      if (np == null)
+ 		throw new REException("invalid escape sequence", REException.REG_ESCAPE, index);
+ 	      index = index - 1 + np.len - 1;
+ 	    }
+ 	    else {
+ 	      CharExpression ce = getCharExpression(pattern, index - 1, pLength, syntax);
+ 	      if (ce == null)
+ 		throw new REException("invalid escape sequence", REException.REG_ESCAPE, index);
+ 	      asciiEsc = ce.ch; asciiEscIsSet = true;
+ 	      index = index - 1 + ce.len - 1;
+ 	    }
+ 	    if (lastCharIsSet) options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ 	    
+ 	    if (posixID != -1) {
+ 	      options.addElement(new RETokenPOSIX(subIndex,posixID,insens,negate));
+ 	    } else if (np != null) {
+ 	      options.addElement(getRETokenNamedProperty(subIndex,np,insens,index));
+ 	    } else if (asciiEscIsSet) {
+ 	      lastChar = asciiEsc; lastCharIsSet = true;
+ 	    } else {
+ 	      lastChar = pattern[index]; lastCharIsSet = true;
+ 	    }
+ 	    ++index;
+ 	  } else if ((ch == '[') && (syntax.get(RESyntax.RE_CHAR_CLASSES)) && (index < pLength) && (pattern[index] == ':')) {
+ 	    StringBuffer posixSet = new StringBuffer();
+ 	    index = getPosixSet(pattern,index+1,posixSet);
+ 	    int posixId = RETokenPOSIX.intValue(posixSet.toString());
+ 	    if (posixId != -1)
+ 	      options.addElement(new RETokenPOSIX(subIndex,posixId,insens,false));
+ 	  } else if ((ch == '[') && (syntax.get(RESyntax.RE_NESTED_CHARCLASS))) {
+ 		ParseCharClassResult result = parseCharClass(
+ 		    subIndex, pattern, index, pLength, cflags, syntax, 0);
+ 		addition.addElement(result.token);
+ 		addition.addElement("|");
+ 		index = result.index;
+ 	  } else if ((ch == '&') &&
+ 		     (syntax.get(RESyntax.RE_NESTED_CHARCLASS)) &&
+ 		     (index < pLength) && (pattern[index] == '&')) {
+ 		if (returnAtAndOperator) {
+ 		    ParseCharClassResult result = new ParseCharClassResult(); 
+ 		    options.trimToSize();
+ 		    if (additionAndAppeared) addition.addElement("&");
+ 		    if (addition.size() == 0) addition = null;
+ 		    result.token = new RETokenOneOf(subIndex,
+ 			options, addition, negative);
+ 		    result.index = index - 1;
+ 		    result.returnAtAndOperator = true;
+ 		    return result;
+ 		}
+ 		// The precedence of the operator "&&" is the lowest.
+ 		// So we postpone adding "&" until other elements
+ 		// are added. And we insert Boolean.FALSE at the
+ 		// beginning of the list of tokens following "&&".
+ 		// So, "&&[a-b][k-m]" will be stored in the Vecter
+ 		// addition in this order:
+ 		//     Boolean.FALSE, [a-b], "|", [k-m], "|", "&"
+ 		if (additionAndAppeared) addition.addElement("&");
+ 		addition.addElement(Boolean.FALSE);
+ 		additionAndAppeared = true;
+ 
+ 		// The part on which "&&" operates may be either
+ 		//   (1) explicitly enclosed by []
+ 		//   or
+ 		//   (2) not enclosed by [] and terminated by the
+ 		//       next "&&" or the end of the character list.
+ 	        //  Let the preceding else if block do the case (1).
+ 		//  We must do something in case of (2).
+ 		if ((index + 1 < pLength) && (pattern[index + 1] != '[')) {
+ 		    ParseCharClassResult result = parseCharClass(
+ 			subIndex, pattern, index+1, pLength, cflags, syntax,
+ 			RETURN_AT_AND);
+ 		    addition.addElement(result.token);
+ 		    addition.addElement("|");
+ 		    // If the method returned at the next "&&", it is OK.
+ 		    // Otherwise we have eaten the mark of the end of this
+ 		    // character list "]".  In this case we must give back
+ 		    // the end mark.
+ 		    index = (result.returnAtAndOperator ?
+ 			result.index: result.index - 1);
+ 		}
+ 	  } else {
+ 	    if (lastCharIsSet) options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ 	    lastChar = ch; lastCharIsSet = true;
+ 	  }
+ 	  if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
+ 	} // while in list
+ 	// Out of list, index is one past ']'
+ 	    
+ 	if (lastCharIsSet) options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ 	   
+ 	ParseCharClassResult result = new ParseCharClassResult(); 
+ 	// Create a new RETokenOneOf
+ 	options.trimToSize();
+ 	if (additionAndAppeared) addition.addElement("&");
+ 	if (addition.size() == 0) addition = null;
+ 	result.token = new RETokenOneOf(subIndex,options, addition, negative);
+ 	result.index = index;
+ 	return result;
+   }
+ 
+   private static int getCharUnit(char[] input, int index, CharUnit unit, boolean quot) throws REException {
+     unit.ch = input[index++];
+     unit.bk = (unit.ch == '\\'
+ 	       && (!quot || index >= input.length || input[index] == 'E'));
+     if (unit.bk)
+       if (index < input.length)
+ 	unit.ch = input[index++];
+       else throw new REException(getLocalizedMessage("ends.with.backslash"),REException.REG_ESCAPE,index);
+     return index;
+   }
+ 
+   private static int parseInt(char[] input, int pos, int len, int radix) {
+     int ret = 0;
+     for (int i = pos; i < pos + len; i++) {
+ 	ret = ret * radix + Character.digit(input[i], radix);
+     }
+     return ret;
+   }
+ 
+   /**
+    * This class represents various expressions for a character.
+    * "a"      : 'a' itself.
+    * "\0123"  : Octal char 0123
+    * "\x1b"   : Hex char 0x1b
+    * "\u1234" : Unicode char \u1234
+    */
+   private static class CharExpression {
+     /** character represented by this expression */
+     char ch;
+     /** String expression */
+     String expr;
+     /** length of this expression */
+     int len;
+     public String toString() { return expr; }
+   }
+ 
+   private static CharExpression getCharExpression(char[] input, int pos, int lim,
+         RESyntax syntax) {
+     CharExpression ce = new CharExpression();
+     char c = input[pos];
+     if (c == '\\') {
+       if (pos + 1 >= lim) return null;
+       c = input[pos + 1];
+       switch(c) {
+       case 't':
+         ce.ch = '\t';
+         ce.len = 2;
+         break;
+       case 'n':
+         ce.ch = '\n';
+         ce.len = 2;
+         break;
+       case 'r':
+         ce.ch = '\r';
+         ce.len = 2;
+         break;
+       case 'x':
+       case 'u':
+         if ((c == 'x' && syntax.get(RESyntax.RE_HEX_CHAR)) ||
+             (c == 'u' && syntax.get(RESyntax.RE_UNICODE_CHAR))) {
+           int l = 0;
+           int expectedLength = (c == 'x' ? 2 : 4);
+           for (int i = pos + 2; i < pos + 2 + expectedLength; i++) {
+             if (i >= lim) break;
+             if (!((input[i] >= '0' && input[i] <= '9') ||
+                   (input[i] >= 'A' && input[i] <= 'F') ||
+                   (input[i] >= 'a' && input[i] <= 'f')))
+                 break;
+ 	    l++;
+           }
+           if (l != expectedLength) return null;
+           ce.ch = (char)(parseInt(input, pos + 2, l, 16));
+ 	  ce.len = l + 2;
+         }
+         else {
+           ce.ch = c;
+           ce.len = 2;
+         }
+         break;
+       case '0':
+         if (syntax.get(RESyntax.RE_OCTAL_CHAR)) {
+           int l = 0;
+           for (int i = pos + 2; i < pos + 2 + 3; i++) {
+             if (i >= lim) break;
+ 	    if (input[i] < '0' || input[i] > '7') break;
+             l++;
+           }
+           if (l == 3 && input[pos + 2] > '3') l--;
+           if (l <= 0) return null;
+           ce.ch = (char)(parseInt(input, pos + 2, l, 8));
+           ce.len = l + 2;
+         }
+         else {
+           ce.ch = c;
+           ce.len = 2;
+         }
+         break;
+       default:
+         ce.ch = c;
+         ce.len = 2;
+         break;
+       }
+     }
+     else {
+       ce.ch = input[pos];
+       ce.len = 1;
+     }
+     ce.expr = new String(input, pos, ce.len);
+     return ce;
+   }
+ 
+   /**
+    * This class represents a substring in a pattern string expressing
+    * a named property.
+    * "\pA"      : Property named "A"
+    * "\p{prop}" : Property named "prop"
+    * "\PA"      : Property named "A" (Negated)
+    * "\P{prop}" : Property named "prop" (Negated)
+    */
+   private static class NamedProperty {
+     /** Property name */
+     String name;
+     /** Negated or not */
+     boolean negate;
+     /** length of this expression */
+     int len;
+   }
+ 
+   private static NamedProperty getNamedProperty(char[] input, int pos, int lim) {
+     NamedProperty np = new NamedProperty();
+     char c = input[pos];
+     if (c == '\\') {
+       if (++pos >= lim) return null;
+       c = input[pos++];
+       switch(c) {
+       case 'p':
+         np.negate = false;
+         break;
+       case 'P':
+         np.negate = true;
+         break;
+       default:
+ 	return null;
+       }
+       c = input[pos++];
+       if (c == '{') {
+           int p = -1;
+ 	  for (int i = pos; i < lim; i++) {
+ 	      if (input[i] == '}') {
+ 		  p = i;
+ 		  break;
+ 	      }
+ 	  }
+ 	  if (p < 0) return null;
+ 	  int len = p - pos;
+           np.name = new String(input, pos, len);
+ 	  np.len = len + 4;
+       }
+       else {
+           np.name = new String(input, pos - 1, 1);
+ 	  np.len = 3;
+       }
+       return np;
+     }
+     else return null;
+   }
+ 
+   private static RETokenNamedProperty getRETokenNamedProperty(
+       int subIndex, NamedProperty np, boolean insens, int index)
+       throws REException {
+     try {
+ 	return new RETokenNamedProperty(subIndex, np.name, insens, np.negate);
+     }
+     catch (REException e) {
+ 	REException ree;
+ 	ree = new REException(e.getMessage(), REException.REG_ESCAPE, index);
+ 	ree.initCause(e);
+ 	throw ree;
+     }
+   }
+ 
+   /**
+    * Checks if the regular expression matches the input in its entirety.
+    *
+    * @param input The input text.
+    */
+   public boolean isMatch(Object input) {
+     return isMatch(input,0,0);
+   }
+   
+   /**
+    * Checks if the input string, starting from index, is an exact match of
+    * this regular expression.
+    *
+    * @param input The input text.
+    * @param index The offset index at which the search should be begin.
+    */
+   public boolean isMatch(Object input,int index) {
+     return isMatch(input,index,0);
+   }
+   
+ 
+   /**
+    * Checks if the input, starting from index and using the specified
+    * execution flags, is an exact match of this regular expression.
+    *
+    * @param input The input text.
+    * @param index The offset index at which the search should be begin.
+    * @param eflags The logical OR of any execution flags above.
+    */
+   public boolean isMatch(Object input,int index,int eflags) {
+     return isMatchImpl(makeCharIndexed(input,index),index,eflags);
+   }
+ 
+   private boolean isMatchImpl(CharIndexed input, int index, int eflags) {
+     if (firstToken == null)  // Trivial case
+       return (input.charAt(0) == CharIndexed.OUT_OF_BOUNDS);
+     REMatch m = new REMatch(numSubs, index, eflags);
+     if (firstToken.match(input, m)) {
+ 	while (m != null) {
+ 	    if (input.charAt(m.index) == CharIndexed.OUT_OF_BOUNDS) {
+ 		return true;
+ 	    }
+ 	    m = m.next;
+ 	}
+     }
+     return false;
+   }
+     
+   /**
+    * Returns the maximum number of subexpressions in this regular expression.
+    * If the expression contains branches, the value returned will be the
+    * maximum subexpressions in any of the branches.
+    */
+   public int getNumSubs() {
+     return numSubs;
+   }
+ 
+   // Overrides REToken.setUncle
+   void setUncle(REToken uncle) {
+       if (lastToken != null) {
+ 	  lastToken.setUncle(uncle);
+       } else super.setUncle(uncle); // to deal with empty subexpressions
+   }
+ 
+   // Overrides REToken.chain
+ 
+   boolean chain(REToken next) {
+     super.chain(next);
+     setUncle(next);
+     return true;
+   }
+ 
+   /**
+    * Returns the minimum number of characters that could possibly
+    * constitute a match of this regular expression.
+    */
+   public int getMinimumLength() {
+       return minimumLength;
+   }
+ 
+   public int getMaximumLength() {
+       return maximumLength;
+   }
+ 
+   /**
+    * Returns an array of all matches found in the input.
+    *
+    * If the regular expression allows the empty string to match, it will
+    * substitute matches at all positions except the end of the input.
+    *
+    * @param input The input text.
+    * @return a non-null (but possibly zero-length) array of matches
+    */
+   public REMatch[] getAllMatches(Object input) {
+     return getAllMatches(input,0,0);
+   }
+ 
+   /**
+    * Returns an array of all matches found in the input,
+    * beginning at the specified index position.
+    *
+    * If the regular expression allows the empty string to match, it will
+    * substitute matches at all positions except the end of the input.
+    *
+    * @param input The input text.
+    * @param index The offset index at which the search should be begin.
+    * @return a non-null (but possibly zero-length) array of matches
+    */
+   public REMatch[] getAllMatches(Object input, int index) {
+     return getAllMatches(input,index,0);
+   }
+ 
+   /**
+    * Returns an array of all matches found in the input string,
+    * beginning at the specified index position and using the specified
+    * execution flags.
+    *
+    * If the regular expression allows the empty string to match, it will
+    * substitute matches at all positions except the end of the input.
+    *
+    * @param input The input text.
+    * @param index The offset index at which the search should be begin.
+    * @param eflags The logical OR of any execution flags above.
+    * @return a non-null (but possibly zero-length) array of matches
+    */
+   public REMatch[] getAllMatches(Object input, int index, int eflags) {
+     return getAllMatchesImpl(makeCharIndexed(input,index),index,eflags);
+   }
+ 
+   // this has been changed since 1.03 to be non-overlapping matches
+   private REMatch[] getAllMatchesImpl(CharIndexed input, int index, int eflags) {
+     Vector all = new Vector();
+     REMatch m = null;
+     while ((m = getMatchImpl(input,index,eflags,null)) != null) {
+       all.addElement(m);
+       index = m.getEndIndex();
+       if (m.end[0] == 0) {   // handle pathological case of zero-length match
+ 	index++;
+ 	input.move(1);
+       } else {
+ 	input.move(m.end[0]);
+       }
+       if (!input.isValid()) break;
+     }
+     REMatch[] mset = new REMatch[all.size()];
+     all.copyInto(mset);
+     return mset;
+   }
+   
+     /* Implements abstract method REToken.match() */
+     boolean match(CharIndexed input, REMatch mymatch) { 
+ 	if (firstToken == null) {
+ 	    return next(input, mymatch);
+ 	}
+ 
+ 	// Note the start of this subexpression
+ 	mymatch.start[subIndex] = mymatch.index;
+ 
+ 	return firstToken.match(input, mymatch);
+     }
+   
+   /**
+    * Returns the first match found in the input.  If no match is found,
+    * null is returned.
+    *
+    * @param input The input text.
+    * @return An REMatch instance referencing the match, or null if none.
+    */
+   public REMatch getMatch(Object input) {
+     return getMatch(input,0,0);
+   }
+   
+   /**
+    * Returns the first match found in the input, beginning
+    * the search at the specified index.  If no match is found,
+    * returns null.
+    *
+    * @param input The input text.
+    * @param index The offset within the text to begin looking for a match.
+    * @return An REMatch instance referencing the match, or null if none.
+    */
+   public REMatch getMatch(Object input, int index) {
+     return getMatch(input,index,0);
+   }
+   
+   /**
+    * Returns the first match found in the input, beginning
+    * the search at the specified index, and using the specified
+    * execution flags.  If no match is found, returns null.
+    *
+    * @param input The input text.
+    * @param index The offset index at which the search should be begin.
+    * @param eflags The logical OR of any execution flags above.
+    * @return An REMatch instance referencing the match, or null if none.
+    */
+   public REMatch getMatch(Object input, int index, int eflags) {
+     return getMatch(input,index,eflags,null);
+   }
+ 
+   /**
+    * Returns the first match found in the input, beginning the search
+    * at the specified index, and using the specified execution flags.
+    * If no match is found, returns null.  If a StringBuffer is
+    * provided and is non-null, the contents of the input text from the
+    * index to the beginning of the match (or to the end of the input,
+    * if there is no match) are appended to the StringBuffer.
+    *
+    * @param input The input text.
+    * @param index The offset index at which the search should be begin.
+    * @param eflags The logical OR of any execution flags above.
+    * @param buffer The StringBuffer to save pre-match text in.
+    * @return An REMatch instance referencing the match, or null if none.  */
+   public REMatch getMatch(Object input, int index, int eflags, StringBuffer buffer) {
+     return getMatchImpl(makeCharIndexed(input,index),index,eflags,buffer);
+   }
+ 
+   REMatch getMatchImpl(CharIndexed input, int anchor, int eflags, StringBuffer buffer) {
+       boolean tryEntireMatch = ((eflags & REG_TRY_ENTIRE_MATCH) != 0);
+       RE re = (tryEntireMatch ? (RE) this.clone() : this);
+       if (tryEntireMatch) {
+ 	  re.chain(new RETokenEnd(0, null));
+       }
+       // Create a new REMatch to hold results
+       REMatch mymatch = new REMatch(numSubs, anchor, eflags);
+       do {
+ 	  // Optimization: check if anchor + minimumLength > length
+ 	  if (minimumLength == 0 || input.charAt(minimumLength-1) != CharIndexed.OUT_OF_BOUNDS) {
+ 	      if (re.match(input, mymatch)) {
+ 		  REMatch best = mymatch;
+ 		  // We assume that the match that coms first is the best.
+ 		  // And the following "The longer, the better" rule has
+ 		  // been commented out. The longest is not neccesarily
+ 		  // the best. For example, "a" out of "aaa" is the best
+ 		  // match for /a+?/.
+ 		  /*
+ 		  // Find best match of them all to observe leftmost longest
+ 		  while ((mymatch = mymatch.next) != null) {
+ 		      if (mymatch.index > best.index) {
+ 		   	best = mymatch;
+ 		      }
+ 		  }
+ 		  */
+ 		  best.end[0] = best.index;
+ 		  best.finish(input);
+ 		  return best;
+ 	      }
+ 	  }
+ 	  mymatch.clear(++anchor);
+ 	  // Append character to buffer if needed
+ 	  if (buffer != null && input.charAt(0) != CharIndexed.OUT_OF_BOUNDS) {
+ 	      buffer.append(input.charAt(0));
+ 	  }
+       } while (input.move(1));
+       
+       // Special handling at end of input for e.g. "$"
+       if (minimumLength == 0) {
+ 	  if (match(input, mymatch)) {
+ 	      mymatch.finish(input);
+ 	      return mymatch;
+ 	  }
+       }
+ 
+       return null;
+   }
+ 
+   /**
+    * Returns an REMatchEnumeration that can be used to iterate over the
+    * matches found in the input text.
+    *
+    * @param input The input text.
+    * @return A non-null REMatchEnumeration instance.
+    */
+   public REMatchEnumeration getMatchEnumeration(Object input) {
+     return getMatchEnumeration(input,0,0);
+   }
+ 
+ 
+   /**
+    * Returns an REMatchEnumeration that can be used to iterate over the
+    * matches found in the input text.
+    *
+    * @param input The input text.
+    * @param index The offset index at which the search should be begin.
+    * @return A non-null REMatchEnumeration instance, with its input cursor
+    *  set to the index position specified.
+    */
+   public REMatchEnumeration getMatchEnumeration(Object input, int index) {
+     return getMatchEnumeration(input,index,0);
+   }
+ 
+   /**
+    * Returns an REMatchEnumeration that can be used to iterate over the
+    * matches found in the input text.
+    *
+    * @param input The input text.
+    * @param index The offset index at which the search should be begin.
+    * @param eflags The logical OR of any execution flags above.
+    * @return A non-null REMatchEnumeration instance, with its input cursor
+    *  set to the index position specified.
+    */
+   public REMatchEnumeration getMatchEnumeration(Object input, int index, int eflags) {
+     return new REMatchEnumeration(this,makeCharIndexed(input,index),index,eflags);
+   }
+ 
+ 
+   /**
+    * Substitutes the replacement text for the first match found in the input.
+    *
+    * @param input The input text.
+    * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
+    * @return A String interpolating the substituted text.
+    * @see REMatch#substituteInto
+    */
+   public String substitute(Object input,String replace) {
+     return substitute(input,replace,0,0);
+   }
+ 
+   /**
+    * Substitutes the replacement text for the first match found in the input
+    * beginning at the specified index position.  Specifying an index
+    * effectively causes the regular expression engine to throw away the
+    * specified number of characters. 
+    *
+    * @param input The input text.
+    * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
+    * @param index The offset index at which the search should be begin.
+    * @return A String containing the substring of the input, starting
+    *   at the index position, and interpolating the substituted text.
+    * @see REMatch#substituteInto
+    */
+   public String substitute(Object input,String replace,int index) {
+     return substitute(input,replace,index,0);
+   }
+ 
+   /**
+    * Substitutes the replacement text for the first match found in the input
+    * string, beginning at the specified index position and using the
+    * specified execution flags.
+    *
+    * @param input The input text.
+    * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
+    * @param index The offset index at which the search should be begin.
+    * @param eflags The logical OR of any execution flags above.
+    * @return A String containing the substring of the input, starting
+    *   at the index position, and interpolating the substituted text.
+    * @see REMatch#substituteInto
+    */
+   public String substitute(Object input,String replace,int index,int eflags) {
+     return substituteImpl(makeCharIndexed(input,index),replace,index,eflags);
+   }
+ 
+   private String substituteImpl(CharIndexed input,String replace,int index,int eflags) {
+     StringBuffer buffer = new StringBuffer();
+     REMatch m = getMatchImpl(input,index,eflags,buffer);
+     if (m==null) return buffer.toString();
+     buffer.append(getReplacement(replace, m, eflags));
+     if (input.move(m.end[0])) {
+       do {
+ 	buffer.append(input.charAt(0));
+       } while (input.move(1));
+     }
+     return buffer.toString();
+   }
+   
+   /**
+    * Substitutes the replacement text for each non-overlapping match found 
+    * in the input text.
+    *
+    * @param input The input text.
+    * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
+    * @return A String interpolating the substituted text.
+    * @see REMatch#substituteInto
+    */
+   public String substituteAll(Object input,String replace) {
+     return substituteAll(input,replace,0,0);
+   }
+ 
+   /**
+    * Substitutes the replacement text for each non-overlapping match found 
+    * in the input text, starting at the specified index.
+    *
+    * If the regular expression allows the empty string to match, it will
+    * substitute matches at all positions except the end of the input.
+    *
+    * @param input The input text.
+    * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
+    * @param index The offset index at which the search should be begin.
+    * @return A String containing the substring of the input, starting
+    *   at the index position, and interpolating the substituted text.
+    * @see REMatch#substituteInto
+    */
+   public String substituteAll(Object input,String replace,int index) {
+     return substituteAll(input,replace,index,0);
+   }
+  
+   /**
+    * Substitutes the replacement text for each non-overlapping match found 
+    * in the input text, starting at the specified index and using the
+    * specified execution flags.
+    *
+    * @param input The input text.
+    * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
+    * @param index The offset index at which the search should be begin.
+    * @param eflags The logical OR of any execution flags above.
+    * @return A String containing the substring of the input, starting
+    *   at the index position, and interpolating the substituted text.
+    * @see REMatch#substituteInto
+    */
+   public String substituteAll(Object input,String replace,int index,int eflags) {
+     return substituteAllImpl(makeCharIndexed(input,index),replace,index,eflags);
+   }
+ 
+   private String substituteAllImpl(CharIndexed input,String replace,int index,int eflags) {
+     StringBuffer buffer = new StringBuffer();
+     REMatch m;
+     while ((m = getMatchImpl(input,index,eflags,buffer)) != null) {
+       buffer.append(getReplacement(replace, m, eflags));
+       index = m.getEndIndex();
+       if (m.end[0] == 0) {
+ 	char ch = input.charAt(0);
+ 	if (ch != CharIndexed.OUT_OF_BOUNDS) 
+ 	    buffer.append(ch);
+ 	input.move(1);
+       } else {
+ 	  input.move(m.end[0]);
+       }
+ 
+       if (!input.isValid()) break;
+     }
+     return buffer.toString();
+   }
+ 
+   public static String getReplacement(String replace, REMatch m, int eflags) {
+     if ((eflags & REG_NO_INTERPOLATE) > 0)
+       return replace;
+     else {
+       if ((eflags & REG_REPLACE_USE_BACKSLASHESCAPE) > 0) {
+         StringBuffer sb = new StringBuffer();
+         int l = replace.length();
+         for (int i = 0; i < l; i++) {
+ 	    char c = replace.charAt(i);
+             switch(c) {
+             case '\\':
+               i++;
+               // Let StringIndexOutOfBoundsException be thrown.
+               sb.append(replace.charAt(i));
+               break;
+             case '$':
+ 	      int i1 = i + 1;
+ 	      while (i1 < replace.length() &&
+ 		Character.isDigit(replace.charAt(i1))) i1++;
+               sb.append(m.substituteInto(replace.substring(i, i1)));
+               i = i1 - 1;
+               break;
+             default:
+               sb.append(c);
+             }
+         }
+         return sb.toString();
+       }
+       else
+         return m.substituteInto(replace);
+     }
+   }	
+   
+   /* Helper function for constructor */
+   private void addToken(REToken next) {
+     if (next == null) return;
+     minimumLength += next.getMinimumLength();
+     int nmax = next.getMaximumLength();
+     if (nmax < Integer.MAX_VALUE && maximumLength < Integer.MAX_VALUE)
+ 	maximumLength += nmax;
+     else 
+ 	maximumLength = Integer.MAX_VALUE;
+ 
+     if (firstToken == null) {
+ 	lastToken = firstToken = next;
+     } else {
+       // if chain returns false, it "rejected" the token due to
+       // an optimization, and next was combined with lastToken
+       if (lastToken.chain(next)) {
+ 	  lastToken = next;
+       }
+     }
+   }
+ 
+   private static REToken setRepeated(REToken current, int min, int max, int index) throws REException {
+     if (current == null) throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
+     return new RETokenRepeated(current.subIndex,current,min,max);
+   }
+ 
+   private static int getPosixSet(char[] pattern,int index,StringBuffer buf) {
+     // Precondition: pattern[index-1] == ':'
+     // we will return pos of closing ']'.
+     int i;
+     for (i=index; i<(pattern.length-1); i++) {
+       if ((pattern[i] == ':') && (pattern[i+1] == ']'))
+ 	return i+2;
+       buf.append(pattern[i]);
+     }
+     return index; // didn't match up
+   }
+ 
+   private int getMinMax(char[] input,int index,IntPair minMax,RESyntax syntax) throws REException {
+     // Precondition: input[index-1] == '{', minMax != null
+ 
+     boolean mustMatch = !syntax.get(RESyntax.RE_NO_BK_BRACES);
+     int startIndex = index;
+     if (index == input.length) {
+       if (mustMatch)
+         throw new REException(getLocalizedMessage("unmatched.brace"),REException.REG_EBRACE,index);
+       else
+         return startIndex;
+     }
+     
+     int min,max=0;
+     CharUnit unit = new CharUnit();
+     StringBuffer buf = new StringBuffer();
+     
+     // Read string of digits
+     do {
+       index = getCharUnit(input,index,unit,false);
+       if (Character.isDigit(unit.ch))
+         buf.append(unit.ch);
+     } while ((index != input.length) && Character.isDigit(unit.ch));
+ 
+     // Check for {} tomfoolery
+     if (buf.length() == 0) {
+       if (mustMatch)
+         throw new REException(getLocalizedMessage("interval.error"),REException.REG_EBRACE,index);
+       else
+         return startIndex;
+     }
+ 
+     min = Integer.parseInt(buf.toString());
+ 	
+     if ((unit.ch == '}') && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ unit.bk))
+       max = min;
+     else if (index == input.length)
+       if (mustMatch)
+         throw new REException(getLocalizedMessage("interval.no.end"),REException.REG_EBRACE,index);
+       else
+         return startIndex;
+     else if ((unit.ch == ',') && !unit.bk) {
+       buf = new StringBuffer();
+       // Read string of digits
+       while (((index = getCharUnit(input,index,unit,false)) != input.length) && Character.isDigit(unit.ch))
+ 	buf.append(unit.ch);
+ 
+       if (!((unit.ch == '}') && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ unit.bk)))
+         if (mustMatch)
+           throw new REException(getLocalizedMessage("interval.error"),REException.REG_EBRACE,index);
+         else
+           return startIndex;
+ 
+       // This is the case of {x,}
+       if (buf.length() == 0) max = Integer.MAX_VALUE;
+       else max = Integer.parseInt(buf.toString());
+     } else
+       if (mustMatch)
+         throw new REException(getLocalizedMessage("interval.error"),REException.REG_EBRACE,index);
+       else
+         return startIndex;
+ 
+     // We know min and max now, and they are valid.
+ 
+     minMax.first = min;
+     minMax.second = max;
+ 
+     // return the index following the '}'
+     return index;
+   }
+ 
+    /**
+     * Return a human readable form of the compiled regular expression,
+     * useful for debugging.
+     */
+    public String toString() {
+      StringBuffer sb = new StringBuffer();
+      dump(sb);
+      return sb.toString();
+    }
+ 
+   void dump(StringBuffer os) {
+     os.append('(');
+     if (subIndex == 0)
+       os.append("?:");
+     if (firstToken != null)
+       firstToken.dumpAll(os);
+     os.append(')');
+   }
+ 
+   // Cast input appropriately or throw exception
+   private static CharIndexed makeCharIndexed(Object input, int index) {
+       // We could let a String fall through to final input, but since
+       // it's the most likely input type, we check it first.
+     if (input instanceof String)
+       return new CharIndexedString((String) input,index);
+     else if (input instanceof char[])
+       return new CharIndexedCharArray((char[]) input,index);
+     else if (input instanceof StringBuffer)
+       return new CharIndexedStringBuffer((StringBuffer) input,index);
+     else if (input instanceof InputStream)
+       return new CharIndexedInputStream((InputStream) input,index);
+     else if (input instanceof CharIndexed)
+ 	return (CharIndexed) input; // do we lose index info?
+     else 
+ 	return new CharIndexedString(input.toString(), index);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/REException.java gcc-4.1.0/libjava/classpath/gnu/regexp/REException.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/REException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/REException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,182 ----
+ /* gnu/regexp/REException.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ 
+ import java.text.MessageFormat;
+ 
+ /**
+  * This is the regular expression exception class.  An exception of this type
+  * defines the three attributes:
+  * <OL>
+  * <LI> A descriptive message of the error.
+  * <LI> An integral type code equivalent to one of the statically
+  *      defined symbols listed below.
+  * <LI> The approximate position in the input string where the error
+  *      occurred.
+  * </OL>
+  *
+  * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
+  */
+ 
+ public class REException extends Exception {
+   private int type;
+   private int pos;
+ 
+   // Error conditions from GNU regcomp(3) manual
+ 
+   /**
+    * Error flag.
+    * Invalid use of repetition operators such  as  using
+    * `*' as the first character.
+    */
+   public static final int REG_BADRPT  =  1;
+ 
+   /**
+    * Error flag.
+    * Invalid use of back reference operator.
+    */
+   public static final int REG_BADBR   =  2;
+ 
+   /**
+    * Error flag.
+    * Un-matched brace interval operators.
+    */
+   public static final int REG_EBRACE  =  3;
+ 
+   /**
+    * Error flag.
+    * Un-matched bracket list operators.
+    */
+   public static final int REG_EBRACK  =  4;
+ 
+   /**
+    * Error flag.
+    * Invalid  use  of the range operator, eg. the ending
+    * point of the range occurs  prior  to  the  starting
+    * point.
+    */
+   public static final int REG_ERANGE  =  5;
+ 
+   /**
+    * Error flag.
+    * Unknown character class name. <B>Not implemented</B>.
+    */
+   public static final int REG_ECTYPE  =  6;
+ 
+   /**
+    * Error flag.
+    * Un-matched parenthesis group operators.
+    */
+   public static final int REG_EPAREN  =  7;
+ 
+   /**
+    * Error flag.
+    * Invalid back reference to a subexpression.
+    */
+   public static final int REG_ESUBREG =  8;
+ 
+   /**
+    * Error flag.
+    * Non specific error. <B>Not implemented</B>.
+    */
+   public static final int REG_EEND    =  9;
+ 
+   /**
+    * Error flag.
+    * Invalid escape sequence. <B>Not implemented</B>.
+    */
+   public static final int REG_ESCAPE  = 10;
+ 
+   /**
+    * Error flag.
+    * Invalid  use  of pattern operators such as group or list.
+    */
+   public static final int REG_BADPAT  = 11;
+ 
+   /**
+    * Error flag.
+    * Compiled  regular  expression  requires  a  pattern
+    * buffer larger than 64Kb. <B>Not implemented</B>.
+    */
+   public static final int REG_ESIZE   = 12;
+ 
+   /**
+    * Error flag.
+    * The regex routines ran out of memory. <B>Not implemented</B>.
+    */
+   public static final int REG_ESPACE  = 13;
+ 
+   REException(String msg, int type, int position) { 
+     super(msg); 
+     this.type = type;
+     this.pos = position;
+   }
+ 
+   /**
+    * Returns the type of the exception, one of the constants listed above.
+    */
+ 
+   public int getType() {
+     return type;
+   }
+ 
+   /**
+    * Returns the position, relative to the string or character array being
+    * compiled, where the error occurred.  This position is generally the point
+    * where the error was detected, not necessarily the starting index of
+    * a bad subexpression.
+    */
+   public int getPosition() {
+     return pos;
+   }
+ 
+   /**
+    * Reports the descriptive message associated with this exception
+    * as well as its index position in the string or character array
+    * being compiled.
+    */
+   public String getMessage() {
+     Object[] args = {new Integer(pos)};
+     StringBuffer sb = new StringBuffer();
+     String prefix = RE.getLocalizedMessage("error.prefix");
+     sb.append(MessageFormat.format(prefix, args));
+     sb.append('\n');
+     sb.append(super.getMessage());
+     return sb.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/REFilterInputStream.java gcc-4.1.0/libjava/classpath/gnu/regexp/REFilterInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/REFilterInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/REFilterInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* gnu/regexp/REFilterInputStream.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ import java.io.FilterInputStream;
+ import java.io.InputStream;
+ 
+ /**
+  * Replaces instances of a given RE found within an InputStream
+  * with replacement text.   The replacements are interpolated into the
+  * stream when a match is found.
+  *
+  * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
+  * @deprecated This class cannot properly handle all character
+  *             encodings.  For proper handling, use the REFilterReader
+  *             class instead.
+  */
+ 
+ public class REFilterInputStream extends FilterInputStream {
+ 
+     private RE expr;
+     private String replace;
+     private String buffer;
+     private int bufpos;
+     private int offset;
+     private CharIndexedInputStream stream;
+ 
+   /**
+    * Creates an REFilterInputStream.  When reading from this stream,
+    * occurrences of patterns matching the supplied regular expression
+    * will be replaced with the supplied replacement text (the
+    * metacharacters $0 through $9 may be used to refer to the full
+    * match or subexpression matches).
+    *
+    * @param stream The InputStream to be filtered.
+    * @param expr The regular expression to search for.
+    * @param replace The text pattern to replace matches with.  
+    */
+   public REFilterInputStream(InputStream stream, RE expr, String replace) {
+     super(stream);
+     this.stream = new CharIndexedInputStream(stream,0);
+     this.expr = expr;
+     this.replace = replace;
+   }
+ 
+   /**
+    * Reads the next byte from the stream per the general contract of
+    * InputStream.read().  Returns -1 on error or end of stream.
+    */
+   public int read() {
+     // If we have buffered replace data, use it.
+     if ((buffer != null) && (bufpos < buffer.length())) {
+       return (int) buffer.charAt(bufpos++);
+     }
+ 
+     // check if input is at a valid position
+     if (!stream.isValid()) return -1;
+ 
+     REMatch mymatch = new REMatch(expr.getNumSubs(),offset,0);
+     if (expr.match(stream, mymatch)) {
+       mymatch.end[0] = mymatch.index;
+       mymatch.finish(stream);
+       stream.move(mymatch.toString().length());
+       offset += mymatch.toString().length();
+       buffer = mymatch.substituteInto(replace);
+       bufpos = 1;
+ 
+       // This is prone to infinite loops if replace string turns out empty.
+       if (buffer.length() > 0) {
+ 	  return buffer.charAt(0);
+       }
+     }
+     char ch = stream.charAt(0);
+     if (ch == CharIndexed.OUT_OF_BOUNDS) return -1;
+     stream.move(1);
+     offset++;
+     return ch;
+   }
+ 
+   /** 
+    * Returns false.  REFilterInputStream does not support mark() and
+    * reset() methods. 
+    */
+   public boolean markSupported() {
+     return false;
+   }
+ 
+   /** Reads from the stream into the provided array. */
+   public int read(byte[] b, int off, int len) {
+     int i;
+     int ok = 0;
+     while (len-- > 0) {
+       i = read();
+       if (i == -1) return (ok == 0) ? -1 : ok;
+       b[off++] = (byte) i;
+       ok++;
+     }
+     return ok;
+   }
+ 
+   /** Reads from the stream into the provided array. */
+   public int read(byte[] b) {
+     return read(b,0,b.length);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/REMatch.java gcc-4.1.0/libjava/classpath/gnu/regexp/REMatch.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/REMatch.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/REMatch.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,317 ----
+ /* gnu/regexp/REMatch.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ import java.io.Serializable;
+ 
+ /**
+  * An instance of this class represents a match
+  * completed by a gnu.regexp matching function. It can be used
+  * to obtain relevant information about the location of a match
+  * or submatch.
+  *
+  * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
+  */
+ public final class REMatch implements Serializable, Cloneable {
+     private String matchedText;
+ 
+     // These variables are package scope for fast access within the engine
+     int eflags; // execution flags this match was made using
+ 
+     // Offset in source text where match was tried.  This is zero-based;
+     // the actual position in the source text is given by (offset + anchor).
+     int offset;
+ 
+     // Anchor position refers to the index into the source input
+     // at which the matching operation began.
+     // This is also useful for the ANCHORINDEX option.
+     int anchor;
+ 
+     // Package scope; used by RE.
+     int index; // used while matching to mark current match position in input
+     int[] start; // start positions (relative to offset) for each (sub)exp.
+     int[] end;   // end positions for the same
+     REMatch next; // other possibility (to avoid having to use arrays)
+     boolean empty; // empty string matched. This flag is used only within
+ 		   // RETokenRepeated.
+ 
+     public Object clone() {
+ 	try {
+ 	    REMatch copy = (REMatch) super.clone();
+ 	    copy.next = null;
+ 
+ 	    copy.start = (int[]) start.clone();
+ 	    copy.end = (int[]) end.clone();
+ 
+ 	    return copy;
+ 	} catch (CloneNotSupportedException e) {
+ 	    throw new Error(); // doesn't happen
+ 	}
+     }
+ 
+     void assignFrom(REMatch other) {
+ 	start = other.start;
+ 	end = other.end;
+ 	index = other.index;
+ 	// need to deep clone?
+ 	next = other.next;
+     }
+ 
+     REMatch(int subs, int anchor, int eflags) {
+ 	start = new int[subs+1];
+ 	end = new int[subs+1];
+ 	this.anchor = anchor;
+ 	this.eflags = eflags;
+ 	clear(anchor);
+     }
+ 
+     void finish(CharIndexed text) {
+ 	start[0] = 0;
+ 	StringBuffer sb = new StringBuffer();
+ 	int i;
+ 	for (i = 0; i < end[0]; i++)
+ 	    sb.append(text.charAt(i));
+ 	matchedText = sb.toString();
+ 	for (i = 0; i < start.length; i++) {
+ 	    // If any subexpressions didn't terminate, they don't count
+ 	    // TODO check if this code ever gets hit
+ 	    if ((start[i] == -1) ^ (end[i] == -1)) {
+ 		start[i] = -1;
+ 		end[i] = -1;
+ 	    }
+ 	}
+ 	next = null; // cut off alternates
+     }
+     
+     /** Clears the current match and moves the offset to the new index. */
+     void clear(int index) {
+ 	offset = index;
+ 	this.index = 0;
+ 	for (int i = 0; i < start.length; i++) {
+ 	    start[i] = end[i] = -1;
+ 	}
+ 	next = null; // cut off alternates
+     }
+     
+     /**
+      * Returns the string matching the pattern.  This makes it convenient
+      * to write code like the following:
+      * <P>
+      * <code> 
+      * REMatch myMatch = myExpression.getMatch(myString);<br>
+      * if (myMatch != null) System.out.println("Regexp found: "+myMatch);
+      * </code>
+      */
+     public String toString() {
+ 	return matchedText;
+     }
+     
+     /**
+      * Returns the index within the input text where the match in its entirety
+      * began.
+      */
+     public int getStartIndex() {
+ 	return offset + start[0];
+     }
+     
+     /**
+      * Returns the index within the input string where the match in
+      * its entirety ends.  The return value is the next position after
+      * the end of the string; therefore, a match created by the
+      * following call:
+      *
+      * <P>
+      * <code>REMatch myMatch = myExpression.getMatch(myString);</code>
+      * <P>
+      * can be viewed (given that myMatch is not null) by creating
+      * <P>
+      * <code>String theMatch = myString.substring(myMatch.getStartIndex(),
+      * myMatch.getEndIndex());</code>
+      * <P>
+      * But you can save yourself that work, since the <code>toString()</code>
+      * method (above) does exactly that for you.  
+      */
+     public int getEndIndex() {
+ 	return offset + end[0];
+     }
+   
+     /**
+      * Returns the string matching the given subexpression.  The subexpressions
+      * are indexed starting with one, not zero.  That is, the subexpression
+      * identified by the first set of parentheses in a regular expression
+      * could be retrieved from an REMatch by calling match.toString(1).
+      *
+      * @param sub Index of the subexpression.
+      */
+     public String toString(int sub) {
+ 	if ((sub >= start.length) || sub < 0)
+ 	    throw new IndexOutOfBoundsException("No group " + sub);
+ 	if (start[sub] == -1) return null;
+ 	return (matchedText.substring(start[sub],end[sub]));
+     }
+     
+     /** 
+      * Returns the index within the input string used to generate this match
+      * where subexpression number <i>sub</i> begins, or <code>-1</code> if
+      * the subexpression does not exist.  The initial position is zero.
+      *
+      * @param sub Subexpression index
+      * @deprecated Use getStartIndex(int) instead.
+      */
+     public int getSubStartIndex(int sub) {
+ 	if (sub >= start.length) return -1;
+ 	int x = start[sub];
+ 	return (x == -1) ? x : offset + x;
+     }
+     
+     /** 
+      * Returns the index within the input string used to generate this match
+      * where subexpression number <i>sub</i> begins, or <code>-1</code> if
+      * the subexpression does not exist.  The initial position is zero.
+      *
+      * @param sub Subexpression index
+      * @since gnu.regexp 1.1.0
+      */
+     public int getStartIndex(int sub) {
+ 	if (sub >= start.length) return -1;
+ 	int x = start[sub];
+ 	return (x == -1) ? x : offset + x;
+     }
+   
+     /** 
+      * Returns the index within the input string used to generate this match
+      * where subexpression number <i>sub</i> ends, or <code>-1</code> if
+      * the subexpression does not exist.  The initial position is zero.
+      *
+      * @param sub Subexpression index
+      * @deprecated Use getEndIndex(int) instead
+      */
+     public int getSubEndIndex(int sub) {
+ 	if (sub >= start.length) return -1;
+ 	int x = end[sub];
+ 	return (x == -1) ? x : offset + x;
+     }
+     
+     /** 
+      * Returns the index within the input string used to generate this match
+      * where subexpression number <i>sub</i> ends, or <code>-1</code> if
+      * the subexpression does not exist.  The initial position is zero.
+      *
+      * @param sub Subexpression index
+      */
+     public int getEndIndex(int sub) {
+ 	if (sub >= start.length) return -1;
+ 	int x = end[sub];
+ 	return (x == -1) ? x : offset + x;
+     }
+     
+     /**
+      * Substitute the results of this match to create a new string.
+      * This is patterned after PERL, so the tokens to watch out for are
+      * <code>$0</code> through <code>$9</code>.  <code>$0</code> matches
+      * the full substring matched; <code>$<i>n</i></code> matches
+      * subexpression number <i>n</i>.
+      * <code>$10, $11, ...</code> may match the 10th, 11th, ... subexpressions
+      * if such subexpressions exist.
+      *
+      * @param input A string consisting of literals and <code>$<i>n</i></code> tokens.
+      */
+     public String substituteInto(String input) {
+ 	// a la Perl, $0 is whole thing, $1 - $9 are subexpressions
+ 	StringBuffer output = new StringBuffer();
+ 	int pos;
+ 	for (pos = 0; pos < input.length()-1; pos++) {
+ 	    if ((input.charAt(pos) == '$') && (Character.isDigit(input.charAt(pos+1)))) {
+ 		int val = Character.digit(input.charAt(++pos),10);
+ 		int pos1 = pos + 1;
+ 		while (pos1 < input.length() &&
+ 		       Character.isDigit(input.charAt(pos1))) {
+ 		    int val1 = val*10 + Character.digit(input.charAt(pos1),10);
+ 		    if (val1 >= start.length) break;
+ 		    pos1++;
+ 		    val = val1;
+ 		}
+ 		pos = pos1 - 1;
+ 
+ 		if (val < start.length) {
+ 		    output.append(toString(val));
+ 		} 
+ 	    } else output.append(input.charAt(pos));
+ 	}
+ 	if (pos < input.length()) output.append(input.charAt(pos));
+ 	return output.toString();
+     }
+ 
+     static class REMatchList {
+         REMatch head;
+ 	REMatch tail;
+         REMatchList() {
+ 	    head = tail = null;
+ 	}
+ 	/* Not used now. But we may need this some day?
+ 	void addHead(REMatch newone) {
+             if (head == null) {
+                 head = newone;
+                 tail = newone;
+                 while (tail.next != null) {
+                     tail = tail.next;
+                 }
+             }
+ 	    else {
+                 REMatch tmp = newone;
+                 while (tmp.next != null) tmp = tmp.next;
+                 tmp.next = head;
+ 	        head = newone;
+ 	    }
+ 	}
+ 	*/
+ 	void addTail(REMatch newone) {
+             if (head == null) {
+                 head = newone;
+                 tail = newone;
+             }
+             else {
+                 tail.next = newone;
+             }
+             while (tail.next != null) {
+                 tail = tail.next;
+             }
+ 	}
+     }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/REMatchEnumeration.java gcc-4.1.0/libjava/classpath/gnu/regexp/REMatchEnumeration.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/REMatchEnumeration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/REMatchEnumeration.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,135 ----
+ /* gnu/regexp/REMatchEnumeration.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ import java.util.NoSuchElementException;
+ 
+ /**
+  * An REMatchEnumeration enumerates regular expression matches over a
+  * given input text.  You obtain a reference to an enumeration using
+  * the <code>getMatchEnumeration()</code> methods on an instance of
+  * RE. 
+  *
+  * <P>
+  *
+  * REMatchEnumeration does lazy computation; that is, it will not
+  * search for a match until it needs to.  If you'd rather just get all
+  * the matches at once in a big array, use the
+  * <code>getAllMatches()</code> methods on RE.  However, using an
+  * enumeration can help speed performance when the entire text does
+  * not need to be searched immediately.
+  *
+  * <P>
+  * 
+  * The enumerated type is especially useful when searching on a Reader
+  * or InputStream, because the InputStream read position cannot be
+  * guaranteed after calling <code>getMatch()</code> (see the
+  * description of that method for an explanation of why).  Enumeration
+  * also saves a lot of overhead required when calling
+  * <code>getMatch()</code> multiple times.
+  * 
+  * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A> 
+  */
+ public class REMatchEnumeration implements Enumeration, Serializable {
+   private static final int YES = 1;
+   private static final int MAYBE = 0;
+   private static final int NO = -1;
+   
+   private int more;
+   private REMatch match;
+   private RE expr;
+   private CharIndexed input;
+   private int eflags;
+     private int index;
+ 
+   // Package scope constructor is used by RE.getMatchEnumeration()
+   REMatchEnumeration(RE expr, CharIndexed input, int index, int eflags) {
+     more = MAYBE;
+     this.expr = expr;
+     this.input = input;
+     this.index = index;
+     this.eflags = eflags;
+   }
+ 
+   /** Returns true if there are more matches in the input text. */
+   public boolean hasMoreElements() {
+     return hasMoreMatches(null);
+   }
+ 
+   /** Returns true if there are more matches in the input text. */
+   public boolean hasMoreMatches() {
+     return hasMoreMatches(null);
+   }
+ 
+   /** Returns true if there are more matches in the input text.
+    * Saves the text leading up to the match (or to the end of the input)
+    * in the specified buffer.
+    */
+   public boolean hasMoreMatches(StringBuffer buffer) {
+     if (more == MAYBE) {
+ 	match = expr.getMatchImpl(input,index,eflags,buffer);
+ 	if (match != null) {
+ 	    input.move((match.end[0] > 0) ? match.end[0] : 1);
+ 	    
+ 	    index = (match.end[0] > 0) ? match.end[0] + match.offset : index + 1;
+ 	    more = YES;
+ 	} else more = NO;
+     }
+     return (more == YES);
+   }
+ 
+   /** Returns the next match in the input text. */
+   public Object nextElement() throws NoSuchElementException {
+     return nextMatch();
+   }
+ 
+   /** 
+    * Returns the next match in the input text. This method is provided
+    * for convenience to avoid having to explicitly cast the return value
+    * to class REMatch.
+    */
+   public REMatch nextMatch() throws NoSuchElementException {
+     if (hasMoreElements()) {
+ 	more = (input.isValid()) ? MAYBE : NO;
+ 	return match;
+     }
+     throw new NoSuchElementException();
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RESyntax.java gcc-4.1.0/libjava/classpath/gnu/regexp/RESyntax.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RESyntax.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RESyntax.java	Mon Feb 13 22:58:37 2006
***************
*** 0 ****
--- 1,563 ----
+ /* gnu/regexp/RESyntax.java
+    Copyright (C) 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ import java.io.Serializable;
+ import java.util.BitSet;
+ 
+ /**
+  * An RESyntax specifies the way a regular expression will be compiled.
+  * This class provides a number of predefined useful constants for
+  * emulating popular regular expression syntaxes.  Additionally the
+  * user may construct his or her own syntax, using any combination of the
+  * syntax bit constants.  The syntax is an optional argument to any of the
+  * matching methods on class RE.
+  *
+  * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
+  */
+ 
+ public final class RESyntax implements Serializable {
+     static final String DEFAULT_LINE_SEPARATOR = System.getProperty("line.separator");
+ 
+     private static final String SYNTAX_IS_FINAL = RE.getLocalizedMessage("syntax.final");
+ 
+     private BitSet bits;
+ 
+     // true for the constant defined syntaxes
+     private boolean isFinal = false;
+ 
+     private String lineSeparator = DEFAULT_LINE_SEPARATOR;
+ 
+   // Values for constants are bit indexes
+ 
+   /**
+    * Syntax bit. Backslash is an escape character in lists.
+    */
+   public static final int RE_BACKSLASH_ESCAPE_IN_LISTS =  0;
+ 
+   /**
+    * Syntax bit. Use \? instead of ? and \+ instead of +.
+    */
+   public static final int RE_BK_PLUS_QM                =  1;
+ 
+   /**
+    * Syntax bit. POSIX character classes ([:...:]) in lists are allowed.
+    */
+   public static final int RE_CHAR_CLASSES              =  2;
+ 
+   /**
+    * Syntax bit. ^ and $ are special everywhere.
+    * <B>Not implemented.</B>
+    */
+   public static final int RE_CONTEXT_INDEP_ANCHORS     =  3; 
+ 
+   /**
+    * Syntax bit. Repetition operators are only special in valid positions.
+    * <B>Not implemented.</B>
+    */
+   public static final int RE_CONTEXT_INDEP_OPS         =  4; 
+ 
+   /**
+    * Syntax bit. Repetition and alternation operators are invalid
+    * at start and end of pattern and other places. 
+    * <B>Not implemented</B>.
+    */
+   public static final int RE_CONTEXT_INVALID_OPS       =  5; 
+ 
+   /**
+    * Syntax bit. Match-any-character operator (.) matches a newline.
+    */
+   public static final int RE_DOT_NEWLINE               =  6;
+ 
+   /**
+    * Syntax bit. Match-any-character operator (.) does not match a null.
+    */
+   public static final int RE_DOT_NOT_NULL              =  7;
+ 
+   /**
+    * Syntax bit. Intervals ({x}, {x,}, {x,y}) are allowed.
+    */
+   public static final int RE_INTERVALS                 =  8;
+ 
+   /**
+    * Syntax bit. No alternation (|), match one-or-more (+), or 
+    * match zero-or-one (?) operators.
+    */
+   public static final int RE_LIMITED_OPS               =  9;
+ 
+   /**
+    * Syntax bit. Newline is an alternation operator.
+    */
+   public static final int RE_NEWLINE_ALT               = 10; // impl.
+ 
+   /**
+    * Syntax bit. Intervals use { } instead of \{ \}
+    */
+   public static final int RE_NO_BK_BRACES              = 11; 
+ 
+   /**
+    * Syntax bit. Grouping uses ( ) instead of \( \).
+    */
+   public static final int RE_NO_BK_PARENS              = 12;
+ 
+   /**
+    * Syntax bit. Backreferences not allowed.
+    */
+   public static final int RE_NO_BK_REFS                = 13;
+ 
+   /**
+    * Syntax bit. Alternation uses | instead of \|
+    */
+   public static final int RE_NO_BK_VBAR                = 14;
+ 
+   /**
+    * Syntax bit. <B>Not implemented</B>.
+    */
+   public static final int RE_NO_EMPTY_RANGES           = 15;
+ 
+   /**
+    * Syntax bit. An unmatched right parenthesis (')' or '\)', depending
+    * on RE_NO_BK_PARENS) will throw an exception when compiling.
+    */
+   public static final int RE_UNMATCHED_RIGHT_PAREN_ORD = 16;
+ 
+   /**
+    * Syntax bit. <B>Not implemented.</B>
+    */
+   public static final int RE_HAT_LISTS_NOT_NEWLINE     = 17;
+ 
+   /**
+    * Syntax bit.  Stingy matching is allowed (+?, *?, ??, {x,y}?).
+    */
+   public static final int RE_STINGY_OPS                = 18;
+ 
+   /**
+    * Syntax bit. Allow character class escapes (\d, \D, \s, \S, \w, \W).
+    */
+   public static final int RE_CHAR_CLASS_ESCAPES        = 19;
+ 
+   /**
+    * Syntax bit. Allow use of (?:xxx) grouping (subexpression is not saved).
+    */
+   public static final int RE_PURE_GROUPING             = 20;
+ 
+   /**
+    * Syntax bit. Allow use of (?=xxx) and (?!xxx) apply the subexpression
+    * to the text following the current position without consuming that text.
+    */
+   public static final int RE_LOOKAHEAD                 = 21;
+ 
+   /**
+    * Syntax bit. Allow beginning- and end-of-string anchors (\A, \Z).
+    */
+   public static final int RE_STRING_ANCHORS            = 22;
+ 
+   /**
+    * Syntax bit. Allow embedded comments, (?#comment), as in Perl5.
+    */
+   public static final int RE_COMMENTS                  = 23;
+ 
+   /**
+    * Syntax bit. Allow character class escapes within lists, as in Perl5.
+    */
+   public static final int RE_CHAR_CLASS_ESC_IN_LISTS   = 24;
+ 
+   /**
+    * Syntax bit.  Possessive matching is allowed (++, *+, ?+, {x,y}+).
+    */
+   public static final int RE_POSSESSIVE_OPS            = 25;
+ 
+   /**
+    * Syntax bit.  Allow embedded flags, (?is-x), as in Perl5.
+    */
+   public static final int RE_EMBEDDED_FLAGS            = 26;
+ 
+   /**
+    * Syntax bit.  Allow octal char (\0377), as in Perl5.
+    */
+   public static final int RE_OCTAL_CHAR                = 27;
+ 
+   /**
+    * Syntax bit.  Allow hex char (\x1b), as in Perl5.
+    */
+   public static final int RE_HEX_CHAR                  = 28;
+ 
+   /**
+    * Syntax bit.  Allow Unicode char (\u1234), as in Java 1.4.
+    */
+   public static final int RE_UNICODE_CHAR              = 29;
+ 
+   /**
+    * Syntax bit.  Allow named property (\p{P}, \P{p}), as in Perl5.
+    */
+   public static final int RE_NAMED_PROPERTY            = 30;
+ 
+   /**
+    * Syntax bit.  Allow nested characterclass ([a-z&&[^p-r]]), as in Java 1.4.
+    */
+   public static final int RE_NESTED_CHARCLASS          = 31;
+ 
+   private static final int BIT_TOTAL                   = 32;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in the awk utility.
+    */
+   public static final RESyntax RE_SYNTAX_AWK;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in the ed utility.
+    */
+   public static final RESyntax RE_SYNTAX_ED;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in the egrep utility.
+    */
+   public static final RESyntax RE_SYNTAX_EGREP;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in the GNU Emacs editor.
+    */
+   public static final RESyntax RE_SYNTAX_EMACS;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in the grep utility.
+    */
+   public static final RESyntax RE_SYNTAX_GREP;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in the POSIX awk specification.
+    */
+   public static final RESyntax RE_SYNTAX_POSIX_AWK;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates POSIX basic regular expression support.
+    */
+   public static final RESyntax RE_SYNTAX_POSIX_BASIC;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in the POSIX egrep specification.
+    */
+   public static final RESyntax RE_SYNTAX_POSIX_EGREP;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates POSIX extended regular expression support.
+    */
+   public static final RESyntax RE_SYNTAX_POSIX_EXTENDED;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates POSIX basic minimal regular expressions.
+    */
+   public static final RESyntax RE_SYNTAX_POSIX_MINIMAL_BASIC;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates POSIX extended minimal regular expressions.
+    */
+   public static final RESyntax RE_SYNTAX_POSIX_MINIMAL_EXTENDED;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in the sed utility.
+    */
+   public static final RESyntax RE_SYNTAX_SED;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in Larry Wall's perl, version 4,
+    */
+   public static final RESyntax RE_SYNTAX_PERL4;
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in Larry Wall's perl, version 4,
+    * using single line mode (/s modifier).
+    */
+   public static final RESyntax RE_SYNTAX_PERL4_S; // single line mode (/s)
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in Larry Wall's perl, version 5.
+    */
+   public static final RESyntax RE_SYNTAX_PERL5;  
+ 
+   /**
+    * Predefined syntax.
+    * Emulates regular expression support in Larry Wall's perl, version 5,
+    * using single line mode (/s modifier).
+    */
+   public static final RESyntax RE_SYNTAX_PERL5_S;
+ 
+     /**
+      * Predefined syntax.
+      * Emulates regular expression support in Java 1.4's java.util.regex
+      * package.
+      */
+     public static final RESyntax RE_SYNTAX_JAVA_1_4;
+ 
+   static {
+       // Define syntaxes
+       
+       RE_SYNTAX_EMACS = new RESyntax().makeFinal();
+       
+       RESyntax RE_SYNTAX_POSIX_COMMON = new RESyntax()
+ 	  .set(RE_CHAR_CLASSES)
+ 	  .set(RE_DOT_NEWLINE)
+ 	  .set(RE_DOT_NOT_NULL)
+ 	  .set(RE_INTERVALS)
+ 	  .set(RE_NO_EMPTY_RANGES)
+ 	  .makeFinal();
+       
+       RE_SYNTAX_POSIX_BASIC = new RESyntax(RE_SYNTAX_POSIX_COMMON)
+ 	  .set(RE_BK_PLUS_QM)
+ 	  .makeFinal();
+       
+       RE_SYNTAX_POSIX_EXTENDED = new RESyntax(RE_SYNTAX_POSIX_COMMON)
+ 	  .set(RE_CONTEXT_INDEP_ANCHORS)
+ 	  .set(RE_CONTEXT_INDEP_OPS)
+ 	  .set(RE_NO_BK_BRACES)
+ 	  .set(RE_NO_BK_PARENS)
+ 	  .set(RE_NO_BK_VBAR)
+ 	  .set(RE_UNMATCHED_RIGHT_PAREN_ORD)
+ 	  .makeFinal();
+ 
+       RE_SYNTAX_AWK = new RESyntax()
+ 	  .set(RE_BACKSLASH_ESCAPE_IN_LISTS)
+ 	  .set(RE_DOT_NOT_NULL)
+ 	  .set(RE_NO_BK_PARENS)
+ 	  .set(RE_NO_BK_REFS)
+ 	  .set(RE_NO_BK_VBAR)
+ 	  .set(RE_NO_EMPTY_RANGES)
+ 	  .set(RE_UNMATCHED_RIGHT_PAREN_ORD)
+ 	  .makeFinal();
+       
+       RE_SYNTAX_POSIX_AWK = new RESyntax(RE_SYNTAX_POSIX_EXTENDED)
+ 	  .set(RE_BACKSLASH_ESCAPE_IN_LISTS)
+ 	  .makeFinal();
+       
+       RE_SYNTAX_GREP = new RESyntax()
+ 	  .set(RE_BK_PLUS_QM)
+ 	  .set(RE_CHAR_CLASSES)
+ 	  .set(RE_HAT_LISTS_NOT_NEWLINE)
+ 	  .set(RE_INTERVALS)
+ 	  .set(RE_NEWLINE_ALT)
+ 	  .makeFinal();
+       
+       RE_SYNTAX_EGREP = new RESyntax()
+ 	  .set(RE_CHAR_CLASSES)
+ 	  .set(RE_CONTEXT_INDEP_ANCHORS)
+ 	  .set(RE_CONTEXT_INDEP_OPS)
+ 	  .set(RE_HAT_LISTS_NOT_NEWLINE)
+ 	  .set(RE_NEWLINE_ALT)
+ 	  .set(RE_NO_BK_PARENS)
+ 	  .set(RE_NO_BK_VBAR)
+ 	  .makeFinal();
+     
+       RE_SYNTAX_POSIX_EGREP = new RESyntax(RE_SYNTAX_EGREP)
+ 	  .set(RE_INTERVALS)
+ 	  .set(RE_NO_BK_BRACES)
+ 	  .makeFinal();
+     
+       /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
+     
+       RE_SYNTAX_ED = new RESyntax(RE_SYNTAX_POSIX_BASIC)
+ 	  .makeFinal();
+     
+       RE_SYNTAX_SED = new RESyntax(RE_SYNTAX_POSIX_BASIC)
+ 	  .makeFinal();
+       
+       RE_SYNTAX_POSIX_MINIMAL_BASIC = new RESyntax(RE_SYNTAX_POSIX_COMMON)
+ 	  .set(RE_LIMITED_OPS)
+ 	  .makeFinal();
+       
+       /* Differs from RE_SYNTAX_POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
+ 	 replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
+       
+       RE_SYNTAX_POSIX_MINIMAL_EXTENDED = new RESyntax(RE_SYNTAX_POSIX_COMMON)
+ 	  .set(RE_CONTEXT_INDEP_ANCHORS)
+ 	  .set(RE_CONTEXT_INVALID_OPS)
+ 	  .set(RE_NO_BK_BRACES)
+ 	  .set(RE_NO_BK_PARENS)
+ 	  .set(RE_NO_BK_REFS)
+ 	  .set(RE_NO_BK_VBAR)
+ 	  .set(RE_UNMATCHED_RIGHT_PAREN_ORD)
+ 	  .makeFinal();
+       
+       /* There is no official Perl spec, but here's a "best guess" */
+       
+       RE_SYNTAX_PERL4 = new RESyntax()
+ 	  .set(RE_BACKSLASH_ESCAPE_IN_LISTS)
+ 	  .set(RE_CONTEXT_INDEP_ANCHORS)
+ 	  .set(RE_CONTEXT_INDEP_OPS)          // except for '{', apparently
+ 	  .set(RE_INTERVALS)
+ 	  .set(RE_NO_BK_BRACES)
+ 	  .set(RE_NO_BK_PARENS)
+ 	  .set(RE_NO_BK_VBAR)
+ 	  .set(RE_NO_EMPTY_RANGES)
+ 	  .set(RE_CHAR_CLASS_ESCAPES)    // \d,\D,\w,\W,\s,\S
+ 	  .makeFinal();
+       
+       RE_SYNTAX_PERL4_S = new RESyntax(RE_SYNTAX_PERL4)
+ 	  .set(RE_DOT_NEWLINE)
+ 	  .makeFinal();
+       
+       RE_SYNTAX_PERL5 = new RESyntax(RE_SYNTAX_PERL4)
+ 	  .set(RE_PURE_GROUPING)          // (?:)
+ 	  .set(RE_STINGY_OPS)             // *?,??,+?,{}?
+ 	  .set(RE_LOOKAHEAD)              // (?=)(?!)
+ 	  .set(RE_STRING_ANCHORS)         // \A,\Z
+ 	  .set(RE_CHAR_CLASS_ESC_IN_LISTS)// \d,\D,\w,\W,\s,\S within []
+ 	  .set(RE_COMMENTS)              // (?#)
+ 	  .set(RE_EMBEDDED_FLAGS)         // (?imsx-imsx)
+ 	  .set(RE_OCTAL_CHAR)             // \0377
+ 	  .set(RE_HEX_CHAR)               // \x1b
+ 	  .set(RE_NAMED_PROPERTY)         // \p{prop}, \P{prop}
+ 	  .makeFinal();
+       
+       RE_SYNTAX_PERL5_S = new RESyntax(RE_SYNTAX_PERL5)
+ 	  .set(RE_DOT_NEWLINE)
+ 	  .makeFinal();
+ 
+       RE_SYNTAX_JAVA_1_4 = new RESyntax(RE_SYNTAX_PERL5)
+ 	  // XXX
+ 	  .set(RE_POSSESSIVE_OPS)         // *+,?+,++,{}+
+ 	  .set(RE_UNICODE_CHAR)           // \u1234
+ 	  .set(RE_NESTED_CHARCLASS)       // [a-z&&[^p-r]]
+ 	  .makeFinal();
+   }
+ 
+   /**
+    * Construct a new syntax object with all bits turned off.
+    * This is equivalent to RE_SYNTAX_EMACS.
+    */
+   public RESyntax() {
+     bits = new BitSet(BIT_TOTAL);
+   }
+ 
+     /**
+      * Called internally when constructing predefined syntaxes
+      * so their interpretation cannot vary.  Conceivably useful
+      * for your syntaxes as well.  Causes IllegalAccessError to
+      * be thrown if any attempt to modify the syntax is made.
+      *
+      * @return this object for convenient chaining
+      */
+     public RESyntax makeFinal() {
+ 	isFinal = true;
+ 	return this;
+     }
+ 
+   /**
+    * Construct a new syntax object with all bits set the same 
+    * as the other syntax.
+    */
+   public RESyntax(RESyntax other) {
+     bits = (BitSet) other.bits.clone();
+   }
+ 
+   /**
+    * Check if a given bit is set in this syntax.
+    */
+   public boolean get(int index) {
+     return bits.get(index);
+   }
+ 
+   /**
+    * Set a given bit in this syntax. 
+    *
+    * @param index the constant (RESyntax.RE_xxx) bit to set.
+    * @return a reference to this object for easy chaining.
+    */
+   public RESyntax set(int index) {
+       if (isFinal) throw new IllegalAccessError(SYNTAX_IS_FINAL);
+     bits.set(index);
+     return this;
+   }
+ 
+   /**
+    * Clear a given bit in this syntax. 
+    *
+    * @param index the constant (RESyntax.RE_xxx) bit to clear.
+    * @return a reference to this object for easy chaining.
+    */
+   public RESyntax clear(int index) {
+       if (isFinal) throw new IllegalAccessError(SYNTAX_IS_FINAL);
+       bits.clear(index);
+       return this;
+   }
+ 
+     /**
+      * Changes the line separator string for regular expressions
+      * created using this RESyntax.  The default separator is the
+      * value returned by the system property "line.separator", which
+      * should be correct when reading platform-specific files from a
+      * filesystem.  However, many programs may collect input from
+      * sources where the line separator is differently specified (for
+      * example, in the applet environment, the text box widget
+      * interprets line breaks as single-character newlines,
+      * regardless of the host platform.
+      *
+      * Note that setting the line separator to a character or
+      * characters that have specific meaning within the current syntax
+      * can cause unexpected chronosynclastic infundibula.
+      *
+      * @return this object for convenient chaining 
+      */
+     public RESyntax setLineSeparator(String aSeparator) {
+ 	if (isFinal) throw new IllegalAccessError(SYNTAX_IS_FINAL);
+ 	lineSeparator = aSeparator;
+ 	return this;
+     }
+ 
+     /**
+      * Returns the currently active line separator string.  The default
+      * is the platform-dependent system property "line.separator".
+      */
+     public String getLineSeparator() {
+ 	return lineSeparator;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/REToken.java gcc-4.1.0/libjava/classpath/gnu/regexp/REToken.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/REToken.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/REToken.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,99 ----
+ /* gnu/regexp/REToken.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ import java.io.Serializable;
+ 
+ abstract class REToken implements Serializable, Cloneable {
+ 
+   protected REToken next = null;
+   protected REToken uncle = null;
+   protected int subIndex;
+ 
+   public Object clone() {
+     try {
+       REToken copy = (REToken) super.clone();
+       return copy;
+     } catch (CloneNotSupportedException e) {
+       throw new Error(); // doesn't happen
+     }
+   }
+ 
+   protected REToken(int subIndex) {
+       this.subIndex = subIndex;
+   }
+ 
+   int getMinimumLength() {
+     return 0;
+   }
+ 
+   int getMaximumLength() {
+     return Integer.MAX_VALUE;
+   }
+ 
+   void setUncle(REToken anUncle) {
+     uncle = anUncle;
+   }
+ 
+     /** Returns true if the match succeeded, false if it failed. */
+     abstract boolean match(CharIndexed input, REMatch mymatch);
+   
+     /** Returns true if the rest of the tokens match, false if they fail. */
+     protected boolean next(CharIndexed input, REMatch mymatch) {
+ 	if (next == null) {
+ 	    if (uncle == null) {
+ 		return true;
+ 	    } else {
+ 		return uncle.match(input, mymatch);
+ 	    }
+ 	} else {
+ 	    return next.match(input, mymatch);
+ 	}
+     }
+   
+   boolean chain(REToken token) {
+       next = token;
+       return true; // Token was accepted
+   }
+ 
+     abstract void dump(StringBuffer os);
+ 
+   void dumpAll(StringBuffer os) {
+     dump(os);
+     if (next != null) next.dumpAll(os);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenAny.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenAny.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenAny.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenAny.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,77 ----
+ /* gnu/regexp/RETokenAny.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ 
+ final class RETokenAny extends REToken {
+   /** True if '.' can match a newline (RE_DOT_NEWLINE) */
+   private boolean newline; 
+ 
+   /** True if '.' can't match a null (RE_DOT_NOT_NULL) */
+   private boolean matchNull;    
+   
+   RETokenAny(int subIndex, boolean newline, boolean matchNull) { 
+     super(subIndex);
+     this.newline = newline;
+     this.matchNull = matchNull;
+   }
+ 
+   int getMinimumLength() {
+     return 1;
+   }
+ 
+   int getMaximumLength() {
+     return 1;
+   }
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+     char ch = input.charAt(mymatch.index);
+     if ((ch == CharIndexed.OUT_OF_BOUNDS)
+ 	|| (!newline && (ch == '\n'))
+ 	|| (matchNull && (ch == 0))) {
+ 	return false;
+     }
+     ++mymatch.index;
+     return next(input, mymatch);
+   }
+ 
+   void dump(StringBuffer os) {
+     os.append('.');
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenBackRef.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenBackRef.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenBackRef.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenBackRef.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,84 ----
+ /* gnu/regexp/RETokenBackRef.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ 
+ final class RETokenBackRef extends REToken {
+   private int num;
+   private boolean insens;
+   
+   RETokenBackRef(int subIndex, int num, boolean insens) {
+     super(subIndex);
+     this.num = num;
+     this.insens = insens;
+   }
+ 
+   // should implement getMinimumLength() -- any ideas?
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+ 	if (num >= mymatch.start.length) return false;
+ 	if (num >= mymatch.end.length) return false;
+ 	int b,e;
+ 	b = mymatch.start[num];
+ 	e = mymatch.end[num];
+ 	if ((b==-1)||(e==-1)) return false; // this shouldn't happen, but...
+ 	for (int i=b; i<e; i++) {
+ 	    char c1 = input.charAt(mymatch.index+i-b);
+ 	    char c2 = input.charAt(i);
+ 	    if (c1 != c2) {
+ 		if (insens) {
+ 		    if (c1 != Character.toLowerCase(c2) &&
+ 			c1 != Character.toUpperCase(c2)) {
+ 			return false;
+ 		    }
+ 		}
+ 		else {
+ 		    return false;
+ 		}
+ 	    }
+ 	}
+ 	mymatch.index += e-b;
+ 	return next(input, mymatch);
+     }
+     
+     void dump(StringBuffer os) {
+ 	os.append('\\').append(num);
+     }
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenChar.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenChar.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenChar.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenChar.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,95 ----
+ /* gnu/regexp/RETokenChar.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ 
+ final class RETokenChar extends REToken {
+   private char[] ch;
+   private boolean insens;
+ 
+   RETokenChar(int subIndex, char c, boolean ins) {
+     super(subIndex);
+     ch = new char [1];
+     ch[0] = (insens = ins) ? Character.toLowerCase(c) : c;
+   }
+ 
+   int getMinimumLength() {
+     return ch.length;
+   }
+   
+   int getMaximumLength() {
+     return ch.length;
+   }
+   
+     boolean match(CharIndexed input, REMatch mymatch) {
+ 	int z = ch.length;
+ 	char c;
+ 	for (int i=0; i<z; i++) {
+ 	    c = input.charAt(mymatch.index+i);
+ 	    if (( (insens) ? Character.toLowerCase(c) : c ) != ch[i]) {
+ 		return false;
+ 	    }
+ 	}
+ 	mymatch.index += z;
+ 
+ 	return next(input, mymatch);
+     }
+ 
+   // Overrides REToken.chain() to optimize for strings
+   boolean chain(REToken next) {
+     if (next instanceof RETokenChar && ((RETokenChar)next).insens == insens) {
+       RETokenChar cnext = (RETokenChar) next;
+       // assume for now that next can only be one character
+       int newsize = ch.length + cnext.ch.length;
+       
+       char[] chTemp = new char [newsize];
+       
+       System.arraycopy(ch,0,chTemp,0,ch.length);
+       System.arraycopy(cnext.ch,0,chTemp,ch.length,cnext.ch.length);
+       
+       ch = chTemp;
+       return false;
+     } else return super.chain(next);
+   }
+ 
+   void dump(StringBuffer os) {
+     os.append(ch);
+   }
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenEnd.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenEnd.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenEnd.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenEnd.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,79 ----
+ /* gnu/regexp/RETokenEnd.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ 
+ final class RETokenEnd extends REToken {
+     /**
+      * Indicates whether this token should match on a line break.
+      */
+   private String newline;
+ 
+   RETokenEnd(int subIndex,String newline) { 
+     super(subIndex);
+     this.newline = newline;
+   }
+ 
+   int getMaximumLength() {
+     return 0;
+   }
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+ 	char ch = input.charAt(mymatch.index);
+ 	if (ch == CharIndexed.OUT_OF_BOUNDS)
+ 	    return ((mymatch.eflags & RE.REG_NOTEOL)>0) ? 
+ 		false : next(input, mymatch);
+ 	if (newline != null) {
+ 	    char z;
+ 	    int i = 0; // position in newline
+ 	    do {
+ 		z = newline.charAt(i);
+ 		if (ch != z) return false;
+ 		++i;
+ 		ch = input.charAt(mymatch.index + i);
+ 	    } while (i < newline.length());
+ 	    
+ 	    return next(input, mymatch);
+ 	}
+ 	return false;
+     }
+ 
+   void dump(StringBuffer os) {
+     os.append('$');
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenEndSub.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenEndSub.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenEndSub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenEndSub.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,57 ----
+ /* gnu/regexp/RETokenEndSub.java
+    Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ 
+ final class RETokenEndSub extends REToken {
+     RETokenEndSub(int subIndex) {
+ 	super(subIndex);
+     }
+ 
+     int getMaximumLength() {
+       return 0;
+     }
+     
+     boolean match(CharIndexed input, REMatch mymatch) {
+ 	mymatch.end[subIndex] = mymatch.index;
+ 	return next(input, mymatch);
+     }
+     
+     void dump(StringBuffer os) {
+ 	// handled by RE
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenIndependent.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenIndependent.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenIndependent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenIndependent.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,76 ----
+ /* gnu/regexp/RETokenIndependent.java
+    Copyright (C) 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ 
+ /**
+  * @author Ito Kazumitsu
+  */
+ final class RETokenIndependent extends REToken
+ {
+   REToken re;
+ 
+   RETokenIndependent(REToken re) throws REException {
+     super(0);
+     this.re = re;
+   }
+ 
+   int getMinimumLength() {
+     return re.getMinimumLength();
+   }
+ 
+   int getMaximumLength() {
+     return re.getMaximumLength();
+   }
+ 
+   boolean match(CharIndexed input, REMatch mymatch)
+   {
+     if (re.match(input, mymatch)) {
+       // Once we have found a match, we do not see other possible matches.
+       mymatch.next = null;
+       return next(input, mymatch);
+     }
+     return false;
+   }
+ 
+     void dump(StringBuffer os) {
+ 	os.append("(?>");
+ 	re.dumpAll(os);
+ 	os.append(')');
+     }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenLookAhead.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenLookAhead.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenLookAhead.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenLookAhead.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,91 ----
+ /* gnu/regexp/RETokenLookAhead.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ 
+ /**
+  * @since gnu.regexp 1.1.3
+  * @author Shashank Bapat
+  */
+ final class RETokenLookAhead extends REToken
+ {
+   REToken re;
+   boolean negative;
+ 
+   RETokenLookAhead(REToken re, boolean negative) throws REException {
+     super(0);
+     this.re = re;
+     this.negative = negative;
+   }
+ 
+   int getMaximumLength() {
+     return 0;
+   }
+ 
+   boolean match(CharIndexed input, REMatch mymatch)
+   {
+     REMatch trymatch = (REMatch)mymatch.clone();
+     REMatch trymatch1 = (REMatch)mymatch.clone();
+     REMatch newMatch = null;
+     if (re.match(input, trymatch)) {
+       if (negative) return false;
+       if (next(input, trymatch1))
+         newMatch = trymatch1;
+     }
+ 
+     if (newMatch != null) {
+       if (negative) return false;
+       //else
+       mymatch.assignFrom(newMatch);
+       return true;
+     }
+     else { // no match
+       if (negative)
+         return next(input, mymatch);
+       //else
+       return false;
+     }
+   }
+ 
+     void dump(StringBuffer os) {
+ 	os.append("(?");
+ 	os.append(negative ? '!' : '=');
+ 	re.dumpAll(os);
+ 	os.append(')');
+     }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenLookBehind.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenLookBehind.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenLookBehind.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenLookBehind.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,116 ----
+ /* gnu/regexp/RETokenLookBehind.java
+    Copyright (C) 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ 
+ /**
+  * @author Ito Kazumitsu
+  */
+ final class RETokenLookBehind extends REToken
+ {
+   REToken re;
+   boolean negative;
+ 
+   RETokenLookBehind(REToken re, boolean negative) throws REException {
+     super(0);
+     this.re = re;
+     this.negative = negative;
+   }
+ 
+   int getMaximumLength() {
+     return 0;
+   }
+ 
+   boolean match(CharIndexed input, REMatch mymatch)
+   {
+     int max = re.getMaximumLength();
+     CharIndexed behind = input.lookBehind(mymatch.index, max);
+     REMatch trymatch = (REMatch)mymatch.clone();
+     REMatch trymatch1 = (REMatch)mymatch.clone();
+     REMatch newMatch = null;
+     int curIndex = trymatch.index + behind.length() - input.length();
+     trymatch.index = 0;
+     RETokenMatchHereOnly stopper = new RETokenMatchHereOnly(curIndex);
+     REToken re1 = (REToken) re.clone();
+     re1.chain(stopper);
+     if (re1.match(behind, trymatch)) {
+       if (negative) return false;
+       if (next(input, trymatch1))
+         newMatch = trymatch1;
+     }
+ 
+     if (newMatch != null) {
+       if (negative) return false;
+       //else
+       mymatch.assignFrom(newMatch);
+       return true;
+     }
+     else { // no match
+       if (negative)
+         return next(input, mymatch);
+       //else
+       return false;
+     }
+   }
+ 
+     void dump(StringBuffer os) {
+ 	os.append("(?<");
+ 	os.append(negative ? '!' : '=');
+ 	re.dumpAll(os);
+ 	os.append(')');
+     }
+ 
+     private static class RETokenMatchHereOnly extends REToken {
+ 
+         int getMaximumLength() { return 0; }
+ 
+ 	private int index;
+ 
+ 	RETokenMatchHereOnly(int index) {
+ 	    super(0);
+ 	    this.index = index;
+ 	}
+ 
+ 	boolean match(CharIndexed input, REMatch mymatch) {
+ 	    return index == mymatch.index;
+ 	}
+ 
+         void dump(StringBuffer os) {}
+ 
+     }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenNamedProperty.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenNamedProperty.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenNamedProperty.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenNamedProperty.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,301 ----
+ /* gnu/regexp/RETokenNamedProperty.java
+    Copyright (C) 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ 
+ final class RETokenNamedProperty extends REToken {
+   String name;
+   boolean insens;
+   boolean negate;
+   Handler handler;
+ 
+   // Grouped properties
+   static final byte[] LETTER = new byte[]
+   { Character.LOWERCASE_LETTER,
+     Character.UPPERCASE_LETTER,
+     Character.TITLECASE_LETTER,
+     Character.MODIFIER_LETTER,
+     Character.OTHER_LETTER };
+   
+   static final byte[] MARK = new byte[]
+   { Character.NON_SPACING_MARK,
+     Character.COMBINING_SPACING_MARK,
+     Character.ENCLOSING_MARK };
+   
+   static final byte[] SEPARATOR = new byte[]
+   { Character.SPACE_SEPARATOR,
+     Character.LINE_SEPARATOR,
+     Character.PARAGRAPH_SEPARATOR };
+   
+   static final byte[] SYMBOL = new byte[]
+   { Character.MATH_SYMBOL,
+     Character.CURRENCY_SYMBOL,
+     Character.MODIFIER_SYMBOL,
+     Character.OTHER_SYMBOL };
+   
+   static final byte[] NUMBER = new byte[]
+   { Character.DECIMAL_DIGIT_NUMBER,
+     Character.LETTER_NUMBER,
+     Character.OTHER_NUMBER };
+   
+   static final byte[] PUNCTUATION = new byte[]
+   { Character.DASH_PUNCTUATION,
+     Character.START_PUNCTUATION,
+     Character.END_PUNCTUATION,
+     Character.CONNECTOR_PUNCTUATION,
+     Character.OTHER_PUNCTUATION,
+     Character.INITIAL_QUOTE_PUNCTUATION,
+     Character.FINAL_QUOTE_PUNCTUATION};
+   
+   static final byte[] OTHER = new byte[]
+   { Character.CONTROL,
+     Character.FORMAT,
+     Character.PRIVATE_USE,
+     Character.SURROGATE,
+     Character.UNASSIGNED };
+ 
+   RETokenNamedProperty(int subIndex, String name, boolean insens, boolean negate) throws REException {
+     super(subIndex);
+     this.name = name;
+     this.insens = insens;
+     this.negate = negate;
+     handler = getHandler(name); 
+   }
+ 
+     int getMinimumLength() {
+ 	return 1;
+     }
+ 
+     int getMaximumLength() {
+ 	return 1;
+     }
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+     char ch = input.charAt(mymatch.index);
+     if (ch == CharIndexed.OUT_OF_BOUNDS)
+       return false;
+     
+     boolean retval = handler.includes(ch);
+     if (insens) {
+         retval = retval ||
+                  handler.includes(Character.toUpperCase(ch)) ||
+                  handler.includes(Character.toLowerCase(ch));
+     }
+ 
+     if (negate) retval = !retval;
+     if (retval) {
+ 	++mymatch.index;
+ 	return next(input, mymatch);
+     }
+     else return false;
+   }
+ 
+   void dump(StringBuffer os) {
+     os.append("\\")
+       .append(negate ? "P" : "p")
+       .append("{" + name + "}");
+   }
+ 
+   private abstract static class Handler {
+       public abstract boolean includes(char c);
+   }
+ 
+   private Handler getHandler(String name) throws REException {
+       if (name.equals("Lower") ||
+           name.equals("Upper") ||
+           // name.equals("ASCII") ||
+           name.equals("Alpha") ||
+           name.equals("Digit") ||
+           name.equals("Alnum") ||
+           name.equals("Punct") ||
+           name.equals("Graph") ||
+           name.equals("Print") ||
+           name.equals("Blank") ||
+           name.equals("Cntrl") ||
+           name.equals("XDigit") ||
+           name.equals("Space") ) {
+          return new POSIXHandler(name);
+       }
+       if (name.startsWith("In")) {
+ 	  try {
+ 	      name = name.substring(2);
+ 	      Character.UnicodeBlock block = Character.UnicodeBlock.forName(name);
+ 	      return new UnicodeBlockHandler(block);
+ 	  }
+ 	  catch (IllegalArgumentException e) {
+               throw new REException("Invalid Unicode block name: " + name, REException.REG_ESCAPE, 0);
+ 	  }
+       }
+       if (name.startsWith("Is")) {
+           name = name.substring(2);
+       }
+ 
+       // "grouped properties"
+       if (name.equals("L"))
+ 	  return new UnicodeCategoriesHandler(LETTER);
+       if (name.equals("M"))
+ 	  return new UnicodeCategoriesHandler(MARK);
+       if (name.equals("Z"))
+ 	  return new UnicodeCategoriesHandler(SEPARATOR);
+       if (name.equals("S"))
+ 	  return new UnicodeCategoriesHandler(SYMBOL);
+       if (name.equals("N"))
+ 	  return new UnicodeCategoriesHandler(NUMBER);
+       if (name.equals("P"))
+ 	  return new UnicodeCategoriesHandler(PUNCTUATION);
+       if (name.equals("C"))
+ 	  return new UnicodeCategoriesHandler(OTHER);
+ 
+       if (name.equals("Mc"))
+           return new UnicodeCategoryHandler(Character.COMBINING_SPACING_MARK);
+       if (name.equals("Pc"))
+           return new UnicodeCategoryHandler(Character.CONNECTOR_PUNCTUATION);
+       if (name.equals("Cc"))
+           return new UnicodeCategoryHandler(Character.CONTROL);
+       if (name.equals("Sc"))
+           return new UnicodeCategoryHandler(Character.CURRENCY_SYMBOL);
+       if (name.equals("Pd"))
+           return new UnicodeCategoryHandler(Character.DASH_PUNCTUATION);
+       if (name.equals("Nd"))
+           return new UnicodeCategoryHandler(Character.DECIMAL_DIGIT_NUMBER);
+       if (name.equals("Me"))
+           return new UnicodeCategoryHandler(Character.ENCLOSING_MARK);
+       if (name.equals("Pe"))
+           return new UnicodeCategoryHandler(Character.END_PUNCTUATION);
+       if (name.equals("Pf"))
+           return new UnicodeCategoryHandler(Character.FINAL_QUOTE_PUNCTUATION);
+       if (name.equals("Cf"))
+           return new UnicodeCategoryHandler(Character.FORMAT);
+       if (name.equals("Pi"))
+           return new UnicodeCategoryHandler(Character.INITIAL_QUOTE_PUNCTUATION);
+       if (name.equals("Nl"))
+           return new UnicodeCategoryHandler(Character.LETTER_NUMBER);
+       if (name.equals("Zl"))
+           return new UnicodeCategoryHandler(Character.LINE_SEPARATOR);
+       if (name.equals("Ll"))
+           return new UnicodeCategoryHandler(Character.LOWERCASE_LETTER);
+       if (name.equals("Sm"))
+           return new UnicodeCategoryHandler(Character.MATH_SYMBOL);
+       if (name.equals("Lm"))
+           return new UnicodeCategoryHandler(Character.MODIFIER_LETTER);
+       if (name.equals("Sk"))
+           return new UnicodeCategoryHandler(Character.MODIFIER_SYMBOL);
+       if (name.equals("Mn"))
+           return new UnicodeCategoryHandler(Character.NON_SPACING_MARK);
+       if (name.equals("Lo"))
+           return new UnicodeCategoryHandler(Character.OTHER_LETTER);
+       if (name.equals("No"))
+           return new UnicodeCategoryHandler(Character.OTHER_NUMBER);
+       if (name.equals("Po"))
+           return new UnicodeCategoryHandler(Character.OTHER_PUNCTUATION);
+       if (name.equals("So"))
+           return new UnicodeCategoryHandler(Character.OTHER_SYMBOL);
+       if (name.equals("Zp"))
+           return new UnicodeCategoryHandler(Character.PARAGRAPH_SEPARATOR);
+       if (name.equals("Co"))
+           return new UnicodeCategoryHandler(Character.PRIVATE_USE);
+       if (name.equals("Zs"))
+           return new UnicodeCategoryHandler(Character.SPACE_SEPARATOR);
+       if (name.equals("Ps"))
+           return new UnicodeCategoryHandler(Character.START_PUNCTUATION);
+       if (name.equals("Cs"))
+           return new UnicodeCategoryHandler(Character.SURROGATE);
+       if (name.equals("Lt"))
+           return new UnicodeCategoryHandler(Character.TITLECASE_LETTER);
+       if (name.equals("Cn"))
+           return new UnicodeCategoryHandler(Character.UNASSIGNED);
+       if (name.equals("Lu"))
+           return new UnicodeCategoryHandler(Character.UPPERCASE_LETTER);
+       throw new REException("unsupported name " + name, REException.REG_ESCAPE, 0);
+   }
+ 
+   private static class POSIXHandler extends Handler {
+       private RETokenPOSIX retoken;
+       private REMatch mymatch = new REMatch(0,0,0);
+       private char[] chars = new char[1];
+       private CharIndexedCharArray ca = new CharIndexedCharArray(chars, 0);
+       public POSIXHandler(String name) {
+             int posixId = RETokenPOSIX.intValue(name.toLowerCase());
+             if (posixId != -1)
+               retoken = new RETokenPOSIX(0,posixId,false,false);
+ 	    else
+               throw new RuntimeException("Unknown posix ID: " + name);
+       }
+       public boolean includes(char c) {
+           chars[0] = c;
+           mymatch.index = 0;
+           return retoken.match(ca, mymatch);
+       }
+   }
+ 
+   private static class UnicodeCategoryHandler extends Handler {
+       public UnicodeCategoryHandler(byte category) {
+           this.category = (int)category;
+       }
+       private int category;
+       public boolean includes(char c) {
+           return Character.getType(c) == category;
+       }
+   }
+ 
+   private static class UnicodeCategoriesHandler extends Handler {
+       public UnicodeCategoriesHandler(byte[] categories) {
+           this.categories = categories;
+       }
+       private byte[] categories;
+       public boolean includes(char c) {
+ 	  int category = Character.getType(c);
+           for (int i = 0; i < categories.length; i++)
+               if (category == categories[i])
+ 	          return true;
+ 	  return false;
+       }
+   }
+ 
+   private static class UnicodeBlockHandler extends Handler {
+       public UnicodeBlockHandler(Character.UnicodeBlock block) {
+ 	  this.block = block;
+       }
+       private Character.UnicodeBlock block;
+       public boolean includes(char c) {
+ 	  Character.UnicodeBlock cblock = Character.UnicodeBlock.of(c);
+ 	  return (cblock != null && cblock.equals(block));
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenOneOf.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenOneOf.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenOneOf.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenOneOf.java	Mon Feb 13 22:58:37 2006
***************
*** 0 ****
--- 1,230 ----
+ /* gnu/regexp/RETokenOneOf.java
+    Copyright (C) 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ import java.util.Vector;
+ import java.util.Stack;
+ 
+ final class RETokenOneOf extends REToken {
+   private Vector options;
+   private boolean negative;
+ 
+   private Vector addition;
+   // This Vector addition is used to store nested character classes.
+   // For example, if the original expression is
+   //    [2-7a-c[f-k][m-z]&&[^p-v][st]]
+   // the basic part /2-7a-c/ is stored in the Vector options, and
+   // the additional part /[f-k][m-z]&&[^p-v][st]/ is stored in the
+   // Vector addition in the following order (Reverse Polish Notation):
+   //           -- The matching result of the basic part is assumed here. 
+   //    [f-k]  -- REToken
+   //    "|"    -- or
+   //    [m-z]  -- REToken
+   //    "|"    -- or
+   //    false
+   //    [^p-v] -- REToken
+   //    "|"    -- or
+   //    [st]   -- REToken
+   //    "|"    -- or
+   //    "&"    -- and
+   //
+   // As it is clear from the explanation above, the Vector addition is
+   // effective only when this REToken originates from a character class
+   // expression.
+ 
+   // This constructor is used for convenience when we know the set beforehand,
+   // e.g. \d --> new RETokenOneOf("0123456789",false, ..)
+   //      \D --> new RETokenOneOf("0123456789",true, ..)
+ 
+   RETokenOneOf(int subIndex, String optionsStr, boolean negative, boolean insens) {
+     super(subIndex);
+     options = new Vector();
+     this.negative = negative;
+     for (int i = 0; i < optionsStr.length(); i++)
+       options.addElement(new RETokenChar(subIndex,optionsStr.charAt(i),insens));
+   }
+ 
+   RETokenOneOf(int subIndex, Vector options, boolean negative) {
+     super(subIndex);
+     this.options = options;
+     this.negative = negative;
+   }
+ 
+   RETokenOneOf(int subIndex, Vector options, Vector addition, boolean negative) {
+     super(subIndex);
+     this.options = options;
+     this.addition = addition;
+     this.negative = negative;
+   }
+ 
+   int getMinimumLength() {
+     // (negative || addition != null) occurs when this token originates from
+     // character class expression.
+     if (negative || addition != null) return 1;
+     int min = Integer.MAX_VALUE;
+     int x;
+     for (int i=0; i < options.size(); i++) {
+       if ((x = ((REToken) options.elementAt(i)).getMinimumLength()) < min)
+ 	min = x;
+     }
+     return min;
+   }
+ 
+   int getMaximumLength() {
+     // (negative || addition != null) occurs when this token originates from
+     // character class expression.
+     if (negative || addition != null) return 1;
+     int max = 0;
+     int x;
+     for (int i=0; i < options.size(); i++) {
+       if ((x = ((REToken) options.elementAt(i)).getMaximumLength()) > max)
+ 	max = x;
+     }
+     return max;
+   }
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+       REMatch tryMatch;
+       boolean tryOnly;
+       if (addition == null) {
+ 	  tryMatch = mymatch;
+ 	  tryOnly = false;
+       }
+       else {
+ 	  tryMatch = (REMatch) mymatch.clone();
+ 	  tryOnly = true;
+       }
+       boolean b = negative ?
+         matchN(input, tryMatch, tryOnly) :
+         matchP(input, tryMatch, tryOnly);
+       if (addition == null) return b;
+ 
+       Stack stack = new Stack();
+       stack.push(new Boolean(b));
+       for (int i=0; i < addition.size(); i++) {
+ 	Object obj = addition.elementAt(i);
+ 	if (obj instanceof REToken) {
+ 	  b = ((REToken)obj).match(input, (REMatch)mymatch.clone());
+ 	  stack.push(new Boolean(b));
+ 	}
+ 	else if (obj instanceof Boolean) {
+ 	  stack.push(obj);
+ 	}
+ 	else if (obj.equals("|")) {
+ 	  b = ((Boolean)stack.pop()).booleanValue();
+ 	  b = ((Boolean)stack.pop()).booleanValue() || b;
+ 	  stack.push(new Boolean(b));
+ 	}
+ 	else if (obj.equals("&")) {
+ 	  b = ((Boolean)stack.pop()).booleanValue();
+ 	  b = ((Boolean)stack.pop()).booleanValue() && b;
+ 	  stack.push(new Boolean(b));
+ 	}
+ 	else {
+ 	  throw new RuntimeException("Invalid object found");
+ 	}
+       }
+       b = ((Boolean)stack.pop()).booleanValue();
+       if (b) {
+         ++mymatch.index;
+         return next(input, mymatch);
+       }
+       return false;
+     }
+ 
+     private boolean matchN(CharIndexed input, REMatch mymatch, boolean tryOnly) {
+       if (input.charAt(mymatch.index) == CharIndexed.OUT_OF_BOUNDS) 
+         return false;
+ 
+       REMatch newMatch = null;
+       REMatch last = null;
+       REToken tk;
+       for (int i=0; i < options.size(); i++) {
+ 	tk = (REToken) options.elementAt(i);
+ 	REMatch tryMatch = (REMatch) mymatch.clone();
+ 	if (tk.match(input, tryMatch)) { // match was successful
+ 	    return false;
+ 	} // is a match
+       } // try next option
+ 
+       if (tryOnly) return true;
+       ++mymatch.index;
+       return next(input, mymatch);
+     }
+ 
+     private boolean matchP(CharIndexed input, REMatch mymatch, boolean tryOnly) {
+       REMatch.REMatchList newMatch = new REMatch.REMatchList();
+       REToken tk;
+       for (int i=0; i < options.size(); i++) {
+ 	// In order that the backtracking can work,
+ 	// each option must be chained to the next token.
+ 	// But the chain method has some side effect, so
+ 	// we use clones.
+ 	tk = (REToken)((REToken) options.elementAt(i)).clone();
+ 	if (! tryOnly) {
+ 	  tk.chain(this.next);
+ 	  tk.setUncle(this.uncle);
+ 	  tk.subIndex = this.subIndex;
+         }
+ 	REMatch tryMatch = (REMatch) mymatch.clone();
+ 	if (tk.match(input, tryMatch)) { // match was successful
+ 	  if (tryOnly) return true;
+ 	  newMatch.addTail(tryMatch);
+ 	} // is a match
+       } // try next option
+       if (tryOnly) return false;
+ 
+       if (newMatch.head != null) {
+ 	  // set contents of mymatch equal to newMatch
+ 
+ 	  // try each one that matched
+ 	  mymatch.assignFrom(newMatch.head);
+ 	  return true;
+       } else {
+ 	  return false;
+       }
+     }
+ 
+   void dump(StringBuffer os) {
+     os.append(negative ? "[^" : "(?:");
+     for (int i = 0; i < options.size(); i++) {
+       if (!negative && (i > 0)) os.append('|');
+       ((REToken) options.elementAt(i)).dumpAll(os);
+     }
+     os.append(negative ? ']' : ')');
+   }  
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenPOSIX.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenPOSIX.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenPOSIX.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenPOSIX.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,148 ----
+ /* gnu/regexp/RETokenPOSIX.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ 
+ final class RETokenPOSIX extends REToken {
+   int type;
+   boolean insens;
+   boolean negated;
+ 
+   static final int  ALNUM = 0;
+   static final int  ALPHA = 1;
+   static final int  BLANK = 2;
+   static final int  CNTRL = 3;
+   static final int  DIGIT = 4;
+   static final int  GRAPH = 5;
+   static final int  LOWER = 6;
+   static final int  PRINT = 7;
+   static final int  PUNCT = 8;
+   static final int  SPACE = 9;
+   static final int  UPPER = 10;
+   static final int XDIGIT = 11;
+ 
+   // Array indices correspond to constants defined above.
+   static final String[] s_nameTable =  {
+     "alnum", "alpha", "blank", "cntrl", "digit", "graph", "lower",
+     "print", "punct", "space", "upper", "xdigit" 
+   };
+ 
+   // The RE constructor uses this to look up the constant for a string
+   static int intValue(String key) {
+     for (int i = 0; i < s_nameTable.length; i++) {
+       if (s_nameTable[i].equals(key)) return i;
+     }
+     return -1;
+   }
+ 
+   RETokenPOSIX(int subIndex, int type, boolean insens, boolean negated) {
+     super(subIndex);
+     this.type = type;
+     this.insens = insens;
+     this.negated = negated;
+   }
+ 
+     int getMinimumLength() {
+ 	return 1;
+     }
+ 
+     int getMaximumLength() {
+ 	return 1;
+     }
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+     char ch = input.charAt(mymatch.index);
+     if (ch == CharIndexed.OUT_OF_BOUNDS)
+       return false;
+     
+     boolean retval = false;
+     switch (type) {
+     case ALNUM:
+ 	// Note that there is some debate over whether '_' should be included
+ 	retval = Character.isLetterOrDigit(ch) || (ch == '_');
+ 	break;
+     case ALPHA:
+ 	retval = Character.isLetter(ch);
+ 	break;
+     case BLANK:
+ 	retval = ((ch == ' ') || (ch == '\t'));
+ 	break;
+     case CNTRL:
+ 	retval = Character.isISOControl(ch);
+ 	break;
+     case DIGIT:
+ 	retval = Character.isDigit(ch);
+ 	break;
+     case GRAPH:
+ 	retval = (!(Character.isWhitespace(ch) || Character.isISOControl(ch)));
+ 	break;
+     case LOWER:
+ 	retval = ((insens && Character.isLetter(ch)) || Character.isLowerCase(ch));
+ 	break;
+     case PRINT:
+ 	retval = (!(Character.isWhitespace(ch) || Character.isISOControl(ch)))
+ 	    || (ch == ' ');
+ 	break;
+     case PUNCT:
+ 	// This feels sloppy, especially for non-U.S. locales.
+ 	retval = ("`~!@#$%^&*()-_=+[]{}\\|;:'\"/?,.<>".indexOf(ch)!=-1);
+ 	break;
+     case SPACE:
+ 	retval = Character.isWhitespace(ch);
+ 	break;
+     case UPPER:
+ 	retval = ((insens && Character.isLetter(ch)) || Character.isUpperCase(ch));
+ 	break;
+     case XDIGIT:
+ 	retval = (Character.isDigit(ch) || ("abcdefABCDEF".indexOf(ch)!=-1));
+ 	break;
+     }
+ 
+     if (negated) retval = !retval;
+     if (retval) {
+ 	++mymatch.index;
+ 	return next(input, mymatch);
+     }
+     else return false;
+   }
+ 
+   void dump(StringBuffer os) {
+     if (negated) os.append('^');
+     os.append("[:" + s_nameTable[type] + ":]");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenRange.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenRange.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenRange.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenRange.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,82 ----
+ /* gnu/regexp/RETokenRange.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ 
+ final class RETokenRange extends REToken {
+   private char lo, hi;
+   private boolean insens;
+ 
+   RETokenRange(int subIndex, char lo, char hi, boolean ins) {
+     super(subIndex);
+     insens = ins;
+     this.lo = lo;
+     this.hi = hi;
+   }
+ 
+   int getMinimumLength() {
+     return 1;
+   }
+ 
+   int getMaximumLength() {
+     return 1;
+   }
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+ 	char c = input.charAt(mymatch.index);
+ 	if (c == CharIndexed.OUT_OF_BOUNDS) return false;
+ 	boolean matches = (c >= lo) && (c <= hi);
+ 	if (! matches && insens) {
+ 	  char c1 = Character.toLowerCase(c);
+ 	  matches = (c1 >= lo) && (c1 <= hi);
+ 	  if (!matches) {
+ 	    c1 = Character.toUpperCase(c);
+ 	    matches = (c1 >= lo) && (c1 <= hi);
+ 	  }
+ 	}
+ 	if (matches) {
+ 	    ++mymatch.index;
+ 	    return next(input, mymatch);
+ 	}
+ 	return false;
+     }
+     
+   void dump(StringBuffer os) {
+     os.append(lo).append('-').append(hi);
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenRepeated.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenRepeated.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenRepeated.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenRepeated.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,286 ----
+ /* gnu/regexp/RETokenRepeated.java
+    Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ 
+ import java.util.Vector;
+ 
+ final class RETokenRepeated extends REToken {
+     private REToken token;
+     private int min,max;
+     private boolean stingy;
+     private boolean possessive;
+     private boolean alwaysEmpty; // Special case of {0}
+     
+     RETokenRepeated(int subIndex, REToken token, int min, int max) {
+ 	super(subIndex);
+ 	this.token = token;
+ 	this.min = min;
+ 	this.max = max;
+ 	alwaysEmpty = (min == 0 && max == 0);
+     }
+ 
+     /** Sets the minimal matching mode to true. */
+     void makeStingy() {
+ 	stingy = true;
+     }
+     
+     /** Queries if this token has minimal matching enabled. */
+     boolean isStingy() {
+ 	return stingy;
+     }
+ 
+     /** Sets possessive matching mode to true. */
+     void makePossessive() {
+         possessive = true;
+     }
+ 
+     /** Queries if this token has possessive matching enabled. */
+     boolean isPossessive() {
+         return possessive;
+     }
+     
+     /**
+      * The minimum length of a repeated token is the minimum length
+      * of the token multiplied by the minimum number of times it must
+      * match.
+      */
+     int getMinimumLength() {
+ 	return (min * token.getMinimumLength());
+     }
+ 
+     int getMaximumLength() {
+         if (max == Integer.MAX_VALUE) return Integer.MAX_VALUE;
+ 	int tmax = token.getMaximumLength();
+ 	if (tmax == Integer.MAX_VALUE) return tmax;
+ 	return (max * tmax);
+     }
+ 
+     boolean stopMatchingIfSatisfied = true;
+ 
+     private static REMatch findDoables(REToken tk,
+ 			CharIndexed input, REMatch mymatch) {
+ 
+ 	    REMatch.REMatchList doables = new REMatch.REMatchList();
+ 
+ 	    // try next repeat at all possible positions
+ 	    for (REMatch current = mymatch;
+ 		 current != null; current = current.next) {
+ 		REMatch recurrent = (REMatch) current.clone();
+ 		int origin = recurrent.index;
+ 		tk = (REToken) tk.clone();
+ 		tk.next = tk.uncle = null;
+ 		if (tk.match(input, recurrent)) {
+ 		    if (recurrent.index == origin) recurrent.empty = true;
+ 		    // add all items in current to doables array
+ 		    doables.addTail(recurrent);
+ 		}
+ 	    }
+ 	    return doables.head;
+     }
+ 
+     // We do need to save every possible point, but the number of clone()
+     // invocations here is really a killer for performance on non-stingy
+     // repeat operators.  I'm open to suggestions...
+ 
+     // Hypothetical question: can you have a RE that matches 1 times,
+     // 3 times, 5 times, but not 2 times or 4 times?  Does having
+     // the subexpression back-reference operator allow that?
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+ 	// Possible positions for the next repeat to match at
+ 	REMatch newMatch = mymatch;
+ 
+ 	// {0} needs some special treatment.
+ 	if (alwaysEmpty) {
+ 	    REMatch result = matchRest(input, newMatch);
+ 	    if (result != null) {
+ 	        mymatch.assignFrom(result);
+ 	        return true;
+ 	    }
+ 	    else {
+ 	        return false;
+ 	    }
+ 	}
+ 
+ 	// number of times we've matched so far
+ 	int numRepeats = 0; 
+ 	
+ 	REMatch doables;
+ 	int lastIndex = mymatch.index;
+ 	boolean emptyMatchFound = false;
+ 
+ 	while (numRepeats < min) {
+ 	    doables = findDoables(token, input, newMatch);
+ 
+ 	    // if none of the possibilities worked out, 
+ 	    // it means that minimum number of repeats could not be found.
+ 	    if (doables == null) return false;
+ 	    
+ 	    // reassign where the next repeat can match
+ 	    newMatch = doables;
+ 	    
+ 	    // increment how many repeats we've successfully found
+ 	    ++numRepeats;
+ 	    
+ 	    if (newMatch.empty) {
+ 		numRepeats = min;
+ 		emptyMatchFound = true;
+ 		break;
+ 	    }
+ 	    lastIndex = newMatch.index;
+ 	}
+ 
+ 	Vector positions = new Vector();
+ 
+ 	while (numRepeats <= max) {
+ 	    // We want to check something like  
+ 	    //    if (stingy)
+ 	    // and neglect the further matching.  But experience tells
+ 	    // such neglection may cause incomplete matching.
+ 	    // For example, if we neglect the seemingly unnecessay
+ 	    // matching, /^(b+?|a){1,2}?c/ cannot match "bbc".
+ 	    // On the other hand, if we do not stop the unnecessary
+ 	    // matching, /(([a-c])b*?\2)*/ matches "ababbbcbc"
+ 	    // entirely when we wan to find only "ababb".
+ 	    // In order to make regression tests pass, we do as we did.
+ 	    if (stopMatchingIfSatisfied && stingy) {
+ 		REMatch results = matchRest(input, newMatch);
+ 		if (results != null) {
+ 		    mymatch.assignFrom(results);
+ 		    return true;
+ 		}
+ 	    }
+ 	    positions.add(newMatch);
+ 	    if (emptyMatchFound) break;
+ 
+ 	    doables = findDoables(token, input, newMatch);
+ 	    if (doables == null) break;
+ 
+ 	    // doables.index == lastIndex occurs either
+ 	    //   (1) when an empty string was the longest
+ 	    //       that matched this token.
+ 	    // or
+ 	    //   (2) when the same string matches this token many times.
+ 	    //       For example, "acbab" itself matches "a.*b" and
+ 	    //       its substrings "acb" and "ab" also match.
+ 	    //       In this case, we do not have to go further until
+ 	    //       numRepeats == max because the more numRepeats grows,
+ 	    //       the shorter the substring matching this token becomes.
+ 	    //       So the previous succesful match must have bee the best
+ 	    //       match.  But this is not necessarily the case if stingy.
+ 	    if (doables.index == lastIndex) {
+ 	        if (doables.empty) {
+ 		    emptyMatchFound = true;
+                 }
+ 	        else {
+ 		    if (!stingy) break;
+ 		}
+ 	    }
+ 	    numRepeats++;
+ 	    newMatch = doables;
+ 	    lastIndex = newMatch.index;
+ 	}
+ 
+ 	// We're greedy, but ease off until a true match is found.
+ 	// At this point we've either got too many or just the right amount.
+ 	// See if this numRepeats works with the rest of the regexp.
+ 
+ 	REMatch.REMatchList allResults = new REMatch.REMatchList();
+ 
+ 	int posCount = positions.size();
+ 	int posIndex = (stingy ? 0 : posCount - 1);
+ 
+ 	while (posCount-- > 0) {
+ 	    REMatch m = (REMatch) positions.elementAt(posIndex);
+             if (stingy) posIndex++; else posIndex--;
+ 
+ 	    REMatch results = matchRest(input, m);
+             if (results != null) {
+ 	    	// Order these from longest to shortest
+ 		// Start by assuming longest (more repeats)
+ 		// If stingy the order is shortest to longest.
+ 		allResults.addTail(results);
+ 	    }
+ 	    else {
+ 		if (possessive) break;
+ 	    }
+ 	}
+ 
+ 	if (allResults.head != null) {
+ 	    mymatch.assignFrom(allResults.head); // does this get all?
+ 	    return true;
+ 	}
+ 	// If we fall out, no matches.
+ 	return false;
+     }
+ 
+     private REMatch matchRest(CharIndexed input, final REMatch newMatch) {
+ 	REMatch current, single;
+ 	REMatch.REMatchList doneIndex = new REMatch.REMatchList();
+ 	// Test all possible matches for this number of repeats
+ 	for (current = newMatch; current != null; current = current.next) {
+ 	    // clone() separates a single match from the chain
+ 	    single = (REMatch) current.clone();
+ 	    if (next(input, single)) {
+ 		// chain results to doneIndex
+ 		doneIndex.addTail(single);
+ 	    }
+ 	}
+ 	return doneIndex.head;
+     }
+ 
+     void dump(StringBuffer os) {
+ 	os.append("(?:");
+ 	token.dumpAll(os);
+ 	os.append(')');
+ 	if ((max == Integer.MAX_VALUE) && (min <= 1))
+ 	    os.append( (min == 0) ? '*' : '+' );
+ 	else if ((min == 0) && (max == 1))
+ 	    os.append('?');
+ 	else {
+ 	    os.append('{').append(min);
+ 	    if (max > min) {
+ 		os.append(',');
+ 		if (max != Integer.MAX_VALUE) os.append(max);
+ 	    }
+ 	    os.append('}');
+ 	}
+ 	if (stingy) os.append('?');
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenStart.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenStart.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenStart.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenStart.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,91 ----
+ /*  gnu/regexp/RETokenStart.java
+     Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ 
+ class RETokenStart extends REToken {
+     private String newline; // matches after a newline
+     
+     RETokenStart(int subIndex, String newline) {
+ 	super(subIndex);
+ 	this.newline = newline;
+     }
+ 
+     int getMaximumLength() {
+         return 0;
+     }
+     
+     boolean match(CharIndexed input, REMatch mymatch) {
+ 	// charAt(index-n) may be unknown on a Reader/InputStream. FIXME
+ 	// Match after a newline if in multiline mode
+ 	
+ 	if (newline != null) {
+ 	    int len = newline.length();
+ 	    if (mymatch.offset >= len) {
+ 		boolean found = true;
+ 		char z;
+ 		int i = 0; // position in REToken.newline
+ 		char ch = input.charAt(mymatch.index - len);
+ 		do {
+ 		    z = newline.charAt(i);
+ 		    if (ch != z) {
+ 			found = false;
+ 			break;
+ 		    }
+ 		    ++i;
+ 		    ch = input.charAt(mymatch.index - len + i);
+ 		} while (i < len);
+ 	    
+ 		if (found) return next(input, mymatch);
+ 	    }
+ 	}
+ 	
+ 	// Don't match at all if REG_NOTBOL is set.
+ 	if ((mymatch.eflags & RE.REG_NOTBOL) > 0) return false;
+ 	
+ 	if ((mymatch.eflags & RE.REG_ANCHORINDEX) > 0)
+ 	    return (mymatch.anchor == mymatch.offset) ? 
+ 		next(input, mymatch) : false;
+ 	else
+ 	    return ((mymatch.index == 0) && (mymatch.offset == 0)) ?
+ 		next(input, mymatch) : false;
+     }
+     
+     void dump(StringBuffer os) {
+ 	os.append('^');
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenWordBoundary.java gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenWordBoundary.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/RETokenWordBoundary.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/RETokenWordBoundary.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,109 ----
+ /* gnu/regexp/RETokenWordBoundary.java
+    Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.regexp;
+ 
+ /**
+  * Represents a combination lookahead/lookbehind for POSIX [:alnum:].
+  */
+ final class RETokenWordBoundary extends REToken {
+     private boolean negated;
+     private int where;
+     static final int BEGIN = 1;
+     static final int END = 2;
+ 
+     RETokenWordBoundary(int subIndex, int where, boolean negated) {
+ 	super(subIndex);
+ 	this.where = where;
+ 	this.negated = negated;
+     }
+ 
+     int getMaximumLength() {
+         return 0;
+     }
+ 
+     
+     boolean match(CharIndexed input, REMatch mymatch) {
+ 	// Word boundary means input[index-1] was a word character
+ 	// and input[index] is not, or input[index] is a word character
+ 	// and input[index-1] was not
+ 	//  In the string "one two three", these positions match:
+ 	//  |o|n|e| |t|w|o| |t|h|r|e|e|
+ 	//  ^     ^ ^     ^ ^         ^
+ 	boolean after = false;  // is current character a letter or digit?
+ 	boolean before = false; // is previous character a letter or digit?
+ 	char ch;
+ 
+ 	// TODO: Also check REG_ANCHORINDEX vs. anchor
+ 	if (((mymatch.eflags & RE.REG_ANCHORINDEX) != RE.REG_ANCHORINDEX) 
+ 	    || (mymatch.offset + mymatch.index > mymatch.anchor)) {
+ 	    if ((ch = input.charAt(mymatch.index - 1)) != CharIndexed.OUT_OF_BOUNDS) {
+ 		before = Character.isLetterOrDigit(ch) || (ch == '_');
+ 	    }
+ 	}
+ 
+ 	if ((ch = input.charAt(mymatch.index)) != CharIndexed.OUT_OF_BOUNDS) {
+ 	    after = Character.isLetterOrDigit(ch) || (ch == '_');
+ 	}
+ 
+ 	// if (before) and (!after), we're at end (\>)
+ 	// if (after) and (!before), we're at beginning (\<)
+ 	boolean doNext = false;
+ 
+ 	if ((where & BEGIN) == BEGIN) {
+ 	    doNext = after && !before;
+ 	}
+ 	if ((where & END) == END) {
+ 	    doNext ^= before && !after;
+ 	}
+ 
+ 	if (negated) doNext = !doNext;
+ 
+ 	return (doNext ? next(input, mymatch) : false);
+     }
+     
+     void dump(StringBuffer os) {
+ 	if (where == (BEGIN | END)) {
+ 	    os.append( negated ? "\\B" : "\\b" );
+ 	} else if (where == BEGIN) {
+ 	    os.append("\\<");
+ 	} else {
+ 	    os.append("\\>");
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/regexp/UncheckedRE.java gcc-4.1.0/libjava/classpath/gnu/regexp/UncheckedRE.java
*** gcc-4.0.2/libjava/classpath/gnu/regexp/UncheckedRE.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/regexp/UncheckedRE.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* gnu/regexp/UncheckedRE.java
+    Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.regexp;
+ 
+ /**
+  * UncheckedRE is a subclass of RE that allows programmers an easier means
+  * of programmatically precompiling regular expressions.  It is constructed
+  * and used in exactly the same manner as an instance of the RE class; the
+  * only difference is that its constructors do not throw REException.
+  * Instead, if a syntax error is encountered during construction, a
+  * RuntimeException will be thrown.
+  * <P>
+  * Note that this makes UncheckedRE dangerous if constructed with
+  * dynamic data.  Do not use UncheckedRE unless you are completely sure
+  * that all input being passed to it contains valid, well-formed 
+  * regular expressions for the syntax specified.
+  *
+  * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
+  * @see gnu.regexp.RE 
+  * @since gnu.regexp 1.1.4
+  */
+ 
+ public final class UncheckedRE extends RE {
+   /**
+    * Constructs a regular expression pattern buffer without any compilation
+    * flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).
+    *
+    * @param pattern A regular expression pattern, in the form of a String,
+    *   StringBuffer or char[].  Other input types will be converted to
+    *   strings using the toString() method.
+    * @exception RuntimeException The input pattern could not be parsed.
+    * @exception NullPointerException The pattern was null.
+    */
+   public UncheckedRE(Object pattern) {
+       this(pattern,0,RESyntax.RE_SYNTAX_PERL5);
+   }
+ 
+   /**
+    * Constructs a regular expression pattern buffer using the specified
+    * compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).
+    *
+    * @param pattern A regular expression pattern, in the form of a String,
+    *   StringBuffer, or char[].  Other input types will be converted to
+    *   strings using the toString() method.
+    * @param cflags The logical OR of any combination of the compilation flags in the RE class.
+    * @exception RuntimeException The input pattern could not be parsed.
+    * @exception NullPointerException The pattern was null.
+    */
+   public UncheckedRE(Object pattern, int cflags) {
+       this(pattern,cflags,RESyntax.RE_SYNTAX_PERL5);
+   }
+ 
+   /**
+    * Constructs a regular expression pattern buffer using the specified
+    * compilation flags and regular expression syntax.
+    *
+    * @param pattern A regular expression pattern, in the form of a String,
+    *   StringBuffer, or char[].  Other input types will be converted to
+    *   strings using the toString() method.
+    * @param cflags The logical OR of any combination of the compilation flags in the RE class.
+    * @param syntax The type of regular expression syntax to use.
+    * @exception RuntimeException The input pattern could not be parsed.
+    * @exception NullPointerException The pattern was null.
+    */
+   public UncheckedRE(Object pattern, int cflags, RESyntax syntax) {
+       try {
+ 	  initialize(pattern,cflags,syntax,0,0);
+       } catch (REException e) { 
+ 	  throw new RuntimeException(e.getMessage());
+       }
+   }
+ }
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/Fail.java gcc-4.1.0/libjava/classpath/gnu/test/Fail.java
*** gcc-4.0.2/libjava/classpath/gnu/test/Fail.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/Fail.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* Fail.java -- Result code returned when test failed but was expected to 
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.test;
+ 
+ /**
+  * Test failed but was expected to pass.
+  */
+ public class Fail extends Result
+ {
+   /**
+    * Constructs a Fail result code with additional information.
+    */
+   public Fail(String msg) {
+     super("FAIL", msg);
+   }
+   /**
+    * Constructs a Fail result code.
+    */
+   public Fail() {
+     this("");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/Makefile.am gcc-4.1.0/libjava/classpath/gnu/test/Makefile.am
*** gcc-4.0.2/libjava/classpath/gnu/test/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/Makefile.am	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,5 ----
+ ## Input file for automake to generate the Makefile.in used by configure
+ 
+ ##gnutestdir = $(datadir)/gnu/test/
+ 
+ ##gnutest_JAVA = Fail.java Test.java Untested.java Pass.java Unresolved.java XFail.java Result.java Unsupported.java XPass.java
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/Pass.java gcc-4.1.0/libjava/classpath/gnu/test/Pass.java
*** gcc-4.0.2/libjava/classpath/gnu/test/Pass.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/Pass.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* Pass.java -- Result code returned when test passed and was excepted to 
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.test;
+ 
+ /**
+  * Test passed and was excepted to pass.
+  */
+ public class Pass extends Result
+ {
+   /**
+    * Constructs a Pass result code with additional information.
+    */
+   public Pass(String msg) {
+     super("PASS", msg);
+   }
+   /**
+    * Constructs a Pass result code.
+    */
+   public Pass() {
+     this("");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/Result.java gcc-4.1.0/libjava/classpath/gnu/test/Result.java
*** gcc-4.0.2/libjava/classpath/gnu/test/Result.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/Result.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* Result.java -- Abstract base class for all Result types.
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.test;
+ 
+ /**
+  * Class which all usable Result objects extend.
+  */
+ public abstract class Result
+ {
+   String name, msg;
+ 
+   /**
+    * Create a result of a given type, with a given message.
+    *
+    * @param name name of type
+    * @param msg message
+    */
+   public Result(String name, String msg) {
+     this.name = name;
+     this.msg = msg;
+   }
+ 
+   /**
+    * Create a result of a given type.
+    *
+    * @param name name of type
+    */
+   public Result(String name) {
+     this(name, "");
+   }
+ 
+   /**
+    * Returns the name of the type.
+    */
+   public String getName() {
+     return name;
+   }
+ 
+   /**
+    * Returns the message associated with this instance of Result, or
+    * the empty string if no message exists.
+    */
+   public String getMsg() {
+     return (msg != null) ? msg : "";
+   }
+ 
+   public String toString() {
+     return getName() + ":" + getMsg();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/Test.java gcc-4.1.0/libjava/classpath/gnu/test/Test.java
*** gcc-4.0.2/libjava/classpath/gnu/test/Test.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/Test.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* Test.java -- Interface representing a single test.
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.test;
+ 
+ /**
+  * Interface which all GNU Classpath tests must implement.
+  * The method <code>test</code> is invoked once for each test.
+  */
+ public interface Test 
+ {
+   /**
+    * Returns the name of the test.
+    */
+   public String getName();
+ 
+   /**
+    * Performs a test.
+    *
+    * @return result from running the test
+    */
+   public Result test();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/Unresolved.java gcc-4.1.0/libjava/classpath/gnu/test/Unresolved.java
*** gcc-4.0.2/libjava/classpath/gnu/test/Unresolved.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/Unresolved.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* Unresolved.java - Result code returned when test gives indeterminate results.
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.test;
+ 
+ /**
+  * Test produced indeterminate results.
+  */
+ public class Unresolved extends Result
+ {
+   /**
+    * Constructs an Unresolved result code with additional information.
+    */
+   public Unresolved(String msg) {
+     super("UNRESOLVED", msg);
+   }
+   /**
+    * Constructs an Unresolved result code.
+    */
+   public Unresolved() {
+     this("");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/Unsupported.java gcc-4.1.0/libjava/classpath/gnu/test/Unsupported.java
*** gcc-4.0.2/libjava/classpath/gnu/test/Unsupported.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/Unsupported.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* Unsupported.java -- Result code returned when test does not have the
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.test;
+ 
+ /**
+  * Test does not have the required support to run.  For example,
+  * Unsupported could be returned when a needed resource
+  * (ie. multicasting) is not available.  
+  */
+ public class Unsupported extends Result
+ {
+   /**
+    * Constructs an Unsupported result code with additional information.
+    */
+   public Unsupported(String msg) {
+     super("UNSUPPORTED", msg);
+   }
+   /**
+    * Constructs an Unsupported result code.
+    */
+   public Unsupported() {
+     this("");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/Untested.java gcc-4.1.0/libjava/classpath/gnu/test/Untested.java
*** gcc-4.0.2/libjava/classpath/gnu/test/Untested.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/Untested.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* Untested.java -- Result code returned when test was not run -- placeholder.
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.test;
+ 
+ /**
+  * Test was not run -- a placeholder.
+  */
+ public class Untested extends Result
+ {
+   /**
+    * Constructs an Untested result code with additional information.
+    */
+   public Untested(String msg) {
+     super("UNTESTED", msg);
+   }
+   /**
+    * Constructs an Untested result code.
+    */
+   public Untested() {
+     this("");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/XFail.java gcc-4.1.0/libjava/classpath/gnu/test/XFail.java
*** gcc-4.0.2/libjava/classpath/gnu/test/XFail.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/XFail.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* XFail.java - Result code returned when test failed and was expected to fail.
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.test;
+ 
+ /**
+  * Test failed and was expected to fail.
+  */
+ public class XFail extends Result
+ {
+   /**
+    * Constructs an XFail result code with additional information.
+    */
+   public XFail(String msg) {
+     super("XFAIL", msg);
+   }
+   /**
+    * Constructs an XFail result code.
+    */
+   public XFail() {
+     this("");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/test/XPass.java gcc-4.1.0/libjava/classpath/gnu/test/XPass.java
*** gcc-4.0.2/libjava/classpath/gnu/test/XPass.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/test/XPass.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /* XPass.java - Result code returned when test passed but was expected to fail.
+    Copyright (c) 1998 Free Software Foundation, Inc.
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.test;
+ 
+ /**
+  * Test passed but was expected to fail.
+  */
+ public class XPass extends Result
+ {
+   /**
+    * Constructs an XPass result code with additional information.
+    */
+   public XPass(String msg) {
+     super("XPASS", msg);
+   }
+   /**
+    * Constructs an XPass result code.
+    */
+   public XPass() {
+     this("");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/ContentHandler2.java gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/ContentHandler2.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/ContentHandler2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/ContentHandler2.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* ContentHandler2.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.aelfred2;
+ 
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.SAXException;
+ 
+ /**
+  * Extension to the SAX ContentHandler interface to report parsing events
+  * and parameters required by DOM Level 3 but not supported by SAX.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public interface ContentHandler2
+   extends ContentHandler
+ {
+ 
+   /**
+    * Reports the XML declaration.
+    * @param version the value of the version attribute in the XML
+    * declaration
+    * @param encoding the encoding specified in the XML declaration, if any
+    * @param standalone the standalone attribute from the XML declaration
+    * @param inputEncoding the encoding of the XML input
+    */
+   void xmlDecl(String version, String encoding, boolean standalone,
+                String inputEncoding)
+     throws SAXException;
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/JAXPFactory.java gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/JAXPFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/JAXPFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/JAXPFactory.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,231 ----
+ /* JAXPFactory.java -- 
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.aelfred2;
+ 
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ 
+ import org.xml.sax.Parser;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXNotSupportedException;
+ import org.xml.sax.helpers.XMLReaderAdapter;
+ 
+ import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.parsers.SAXParser;
+ import javax.xml.parsers.SAXParserFactory;
+ 
+ 
+ /**
+  * Configurable factory to create an &AElig;lfred2 JAXP parser; required
+  * to bootstrap using JAXP.  You should use SAX2 directly where possible,
+  * rather than through JAXP, since that gives you better control.
+  * This class would normally be configured as a platform default factory.
+  *
+  * @author David Brownell
+  */
+ public final class JAXPFactory
+   extends SAXParserFactory
+ {
+   
+   private Hashtable flags = new Hashtable();
+ 
+   /**
+    * Constructs a factory which normally returns a non-validating
+    * parser.
+    */
+   public JAXPFactory()
+   {
+   }
+ 
+   public SAXParser newSAXParser()
+     throws ParserConfigurationException, SAXException
+   {
+     JaxpParser jaxp = new JaxpParser();
+     Enumeration e = flags.keys();
+     XMLReader parser = jaxp.getXMLReader();
+ 
+     parser.setFeature(SAXDriver.FEATURE + "namespaces",
+                       isNamespaceAware());
+     parser.setFeature(SAXDriver.FEATURE + "validation",
+                       isValidating());
+     // that makes SAX2 feature flags trump JAXP
+     
+     while (e.hasMoreElements())
+       {
+         String uri = (String) e.nextElement();
+         Boolean value = (Boolean) flags.get(uri);
+         parser.setFeature(uri, value.booleanValue());
+       }
+ 
+     return jaxp;
+   }
+ 
+   // yes, this "feature transfer" mechanism doesn't play well
+   
+   public void setFeature(String name, boolean value) 
+     throws ParserConfigurationException, SAXNotRecognizedException,
+            SAXNotSupportedException
+   {
+     try
+       {
+         // force "early" detection of errors where possible
+         // (flags can't necessarily be set before parsing)
+         new JaxpParser().getXMLReader().setFeature(name, value);
+         
+         flags.put(name, Boolean.valueOf(value));
+       }
+     catch (SAXNotRecognizedException e)
+       {
+         throw new SAXNotRecognizedException(name);
+       }
+     catch (SAXNotSupportedException e)
+       {
+         throw new SAXNotSupportedException(name);
+       }
+     catch (Exception e)
+       {
+         throw new ParserConfigurationException(e.getClass().getName()
+                                                + ": "
+                                                + e.getMessage());
+       }
+   }
+ 
+   public boolean getFeature(String name) 
+     throws ParserConfigurationException, SAXNotRecognizedException,
+            SAXNotSupportedException
+   {
+     Boolean value = (Boolean) flags.get(name);
+     
+     if (value != null)
+       {
+         return value.booleanValue();
+       }
+     else
+       {
+         try
+           {
+             return new JaxpParser().getXMLReader().getFeature(name);
+           }
+         catch (SAXNotRecognizedException e)
+           {
+             throw new SAXNotRecognizedException(name);
+           }
+         catch (SAXNotSupportedException e)
+           {
+             throw new SAXNotSupportedException(name);
+           }
+         catch (SAXException e)
+           {
+             throw new ParserConfigurationException(e.getClass().getName()
+                                                    + ": "
+                                                    + e.getMessage());
+           }
+       }
+   }
+            
+   private static class JaxpParser
+     extends SAXParser
+   {
+     
+     private XmlReader ae2 = new XmlReader();
+     private XMLReaderAdapter parser = null;
+     
+     JaxpParser()
+     {
+     }
+ 
+     public void setProperty(String id, Object value) 
+       throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+       ae2.setProperty(id, value);
+     }
+ 
+     public Object getProperty(String id) 
+       throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+       return ae2.getProperty(id);
+     }
+ 
+     public Parser getParser()
+       throws SAXException
+     {
+       if (parser == null)
+         {
+           parser = new XMLReaderAdapter(ae2);
+         }
+       return parser;
+     }
+ 
+     public XMLReader getXMLReader ()
+       throws SAXException
+     {
+       return ae2;
+     }
+ 
+     public boolean isNamespaceAware()
+     {
+       try
+         {
+           return ae2.getFeature(SAXDriver.FEATURE + "namespaces");
+         }
+       catch (Exception e)
+         {
+           throw new Error();
+         }
+     }
+     
+     public boolean isValidating()
+     {
+       try
+         {
+           return ae2.getFeature(SAXDriver.FEATURE + "validation");
+         }
+       catch (Exception e)
+         {
+           throw new Error();
+         }
+     }
+     
+     // TODO isXIncludeAware()
+     
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/SAXDriver.java gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/SAXDriver.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/SAXDriver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/SAXDriver.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1624 ----
+ /* SAXDriver.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version.
+ 
+ Portions derived from code which carried the following notice:
+ 
+   Copyright (c) 1997, 1998 by Microstar Software Ltd.
+ 
+   AElfred is free for both commercial and non-commercial use and
+   redistribution, provided that Microstar's copyright and disclaimer are
+   retained intact.  You are free to modify AElfred for your own use and
+   to redistribute AElfred with your modifications, provided that the
+   modifications are clearly documented.
+ 
+   This program 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.  Please use it AT
+   YOUR OWN RISK.
+ */
+ 
+ package gnu.xml.aelfred2;
+ 
+ import java.io.*;
+ 
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.util.Locale;
+ import java.util.Stack;
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.Iterator;
+ import java.util.List;
+ 
+ import org.xml.sax.*;
+ import org.xml.sax.ext.*;
+ import org.xml.sax.helpers.NamespaceSupport;
+ 
+ 
+ /**
+  * An enhanced SAX2 version of Microstar's &AElig;lfred XML parser.
+  * The enhancements primarily relate to significant improvements in
+  * conformance to the XML specification, and SAX2 support.  Performance
+  * has been improved.  See the package level documentation for more
+  * information.
+  *
+  * <table border="1" width='100%' cellpadding='3' cellspacing='0'>
+  * <tr bgcolor='#ccccff'>
+  *	<th><font size='+1'>Name</font></th>
+  *	<th><font size='+1'>Notes</font></th></tr>
+  *
+  * <tr><td colspan=2><center><em>Features ... URL prefix is
+  * <b>http://xml.org/sax/features/</b></em></center></td></tr>
+  *
+  * <tr><td>(URL)/external-general-entities</td>
+  *	<td>Value defaults to <em>true</em></td></tr>
+  * <tr><td>(URL)/external-parameter-entities</td>
+  *	<td>Value defaults to <em>true</em></td></tr>
+  * <tr><td>(URL)/is-standalone</td>
+  *	<td>(PRELIMINARY) Returns true iff the document's parsing
+  *	has started (some non-error event after <em>startDocument()</em>
+  *	was reported) and the document's standalone flag is set.</td></tr>
+  * <tr><td>(URL)/namespace-prefixes</td>
+  *	<td>Value defaults to <em>false</em> (but XML 1.0 names are
+  *		always reported)</td></tr>
+  * <tr><td>(URL)/lexical-handler/parameter-entities</td>
+  *	<td>Value is fixed at <em>true</em></td></tr>
+  * <tr><td>(URL)/namespaces</td>
+  *	<td>Value defaults to <em>true</em></td></tr>
+  * <tr><td>(URL)/resolve-dtd-uris</td>
+  *	<td>(PRELIMINARY) Value defaults to <em>true</em></td></tr>
+  * <tr><td>(URL)/string-interning</td>
+  *	<td>Value is fixed at <em>true</em></td></tr>
+  * <tr><td>(URL)/use-attributes2</td>
+  *	<td>(PRELIMINARY) Value is fixed at <em>true</em></td></tr>
+  * <tr><td>(URL)/use-entity-resolver2</td>
+  *	<td>(PRELIMINARY) Value defaults to <em>true</em></td></tr>
+  * <tr><td>(URL)/validation</td>
+  *	<td>Value is fixed at <em>false</em></td></tr>
+  *
+  * <tr><td colspan=2><center><em>Handler Properties ... URL prefix is
+  * <b>http://xml.org/sax/properties/</b></em></center></td></tr>
+  *
+  * <tr><td>(URL)/declaration-handler</td>
+  *	<td>A declaration handler may be provided.  </td></tr>
+  * <tr><td>(URL)/lexical-handler</td>
+  *	<td>A lexical handler may be provided.  </td></tr>
+  * </table>
+  *
+  * <p>This parser currently implements the SAX1 Parser API, but
+  * it may not continue to do so in the future.
+  *
+  * @author Written by David Megginson (version 1.2a from Microstar)
+  * @author Updated by David Brownell &lt;dbrownell@users.sourceforge.net&gt;
+  * @see org.xml.sax.Parser
+  */
+ final public class SAXDriver
+   implements Locator, Attributes2, XMLReader, Parser, AttributeList
+ {
+   
+   private final DefaultHandler2 base = new DefaultHandler2();
+   private XmlParser parser;
+   
+   private EntityResolver entityResolver = base;
+   private EntityResolver2 resolver2 = null;
+   private ContentHandler contentHandler = base;
+   private DTDHandler dtdHandler = base;
+   private ErrorHandler errorHandler = base;
+   private DeclHandler declHandler = base;
+   private LexicalHandler lexicalHandler = base;
+   
+   private String elementName;
+   private Stack entityStack;
+   
+   // one vector (of object/struct): faster, smaller
+   private List attributesList;
+   
+   private boolean namespaces = true;
+   private boolean xmlNames = false;
+   private boolean extGE = true;
+   private boolean extPE = true;
+   private boolean resolveAll = true;
+   private boolean useResolver2 = true;
+   
+   // package private to allow (read-only) access in XmlParser
+   boolean stringInterning = true;
+   
+   private int attributeCount;
+   private boolean attributes;
+   private String[] nsTemp;
+   private NamespaceSupport prefixStack;
+   
+   //
+   // Constructor.
+   //
+ 
+   /**
+    * Constructs a SAX Parser.
+    */
+   public SAXDriver()
+   {
+     reset();
+   }
+ 
+   private void reset()
+   {
+     elementName = null;
+     entityStack = new Stack();
+     attributesList = Collections.synchronizedList(new ArrayList());
+     attributeCount = 0;
+     attributes = false;
+     nsTemp = new String[3];
+     prefixStack = null;
+   }
+ 
+ 
+   //
+   // Implementation of org.xml.sax.Parser.
+   //
+ 
+   /**
+    * <b>SAX1</b>: Sets the locale used for diagnostics; currently,
+    * only locales using the English language are supported.
+    * @param locale The locale for which diagnostics will be generated
+    */
+   public void setLocale(Locale locale)
+     throws SAXException
+   {
+     if ("en".equals(locale.getLanguage()))
+       {
+         return;
+       }
+     throw new SAXException ("AElfred2 only supports English locales.");
+   }
+ 
+   /**
+    * <b>SAX2</b>: Returns the object used when resolving external
+    * entities during parsing (both general and parameter entities).
+    */
+   public EntityResolver getEntityResolver()
+   {
+     return (entityResolver == base) ? null : entityResolver;
+   }
+ 
+   /**
+    * <b>SAX1, SAX2</b>: Set the entity resolver for this parser.
+    * @param handler The object to receive entity events.
+    */
+   public void setEntityResolver(EntityResolver resolver)
+   {
+     if (resolver instanceof EntityResolver2)
+       {
+         resolver2 = (EntityResolver2) resolver;
+       }
+     else
+       {
+         resolver2 = null;
+       }
+     if (resolver == null)
+       {
+         resolver = base;
+       }
+     entityResolver = resolver;
+   }
+ 
+   /**
+    * <b>SAX2</b>: Returns the object used to process declarations related
+    * to notations and unparsed entities.
+    */
+   public DTDHandler getDTDHandler()
+   {
+     return (dtdHandler == base) ? null : dtdHandler;
+   }
+ 
+   /**
+    * <b>SAX1, SAX2</b>: Set the DTD handler for this parser.
+    * @param handler The object to receive DTD events.
+    */
+   public void setDTDHandler(DTDHandler handler)
+   {
+     if (handler == null)
+       {
+         handler = base;
+       }
+     this.dtdHandler = handler;
+   }
+ 
+ 
+   /**
+    * <b>SAX1</b>: Set the document handler for this parser.  If a
+    * content handler was set, this document handler will supplant it.
+    * The parser is set to report all XML 1.0 names rather than to
+    * filter out "xmlns" attributes (the "namespace-prefixes" feature
+    * is set to true).
+    *
+    * @deprecated SAX2 programs should use the XMLReader interface
+    *  and a ContentHandler.
+    *
+    * @param handler The object to receive document events.
+    */
+   public void setDocumentHandler(DocumentHandler handler)
+   {
+     contentHandler = new Adapter(handler);
+     xmlNames = true;
+   }
+ 
+   /**
+    * <b>SAX2</b>: Returns the object used to report the logical
+    * content of an XML document.
+    */
+   public ContentHandler getContentHandler()
+   {
+     return (contentHandler == base) ? null : contentHandler;
+   }
+ 
+   /**
+    * <b>SAX2</b>: Assigns the object used to report the logical
+    * content of an XML document.  If a document handler was set,
+    * this content handler will supplant it (but XML 1.0 style name
+    * reporting may remain enabled).
+    */
+   public void setContentHandler(ContentHandler handler)
+   {
+     if (handler == null)
+       {
+         handler = base;
+       }
+     contentHandler = handler;
+   }
+ 
+   /**
+    * <b>SAX1, SAX2</b>: Set the error handler for this parser.
+    * @param handler The object to receive error events.
+    */
+   public void setErrorHandler(ErrorHandler handler)
+   {
+     if (handler == null)
+       {
+         handler = base;
+       }
+     this.errorHandler = handler;
+   }
+ 
+   /**
+    * <b>SAX2</b>: Returns the object used to receive callbacks for XML
+    * errors of all levels (fatal, nonfatal, warning); this is never null;
+    */
+   public ErrorHandler getErrorHandler()
+   {
+     return (errorHandler == base) ? null : errorHandler;
+   }
+ 
+   /**
+    * <b>SAX1, SAX2</b>: Auxiliary API to parse an XML document, used mostly
+    * when no URI is available.
+    * If you want anything useful to happen, you should set
+    * at least one type of handler.
+    * @param source The XML input source.  Don't set 'encoding' unless
+    *  you know for a fact that it's correct.
+    * @see #setEntityResolver
+    * @see #setDTDHandler
+    * @see #setContentHandler
+    * @see #setErrorHandler
+    * @exception SAXException The handlers may throw any SAXException,
+    *  and the parser normally throws SAXParseException objects.
+    * @exception IOException IOExceptions are normally through through
+    *  the parser if there are problems reading the source document.
+    */
+   public void parse(InputSource source)
+     throws SAXException, IOException
+   {
+     synchronized (base)
+       {
+         parser = new XmlParser();
+         if (namespaces)
+           {
+             prefixStack = new NamespaceSupport();
+           }
+         else if (!xmlNames)
+           {
+             throw new IllegalStateException();
+           }
+         parser.setHandler(this);
+         
+         try
+           {
+             Reader r = source.getCharacterStream();
+             InputStream in = source.getByteStream();
+                         
+             parser.doParse(source.getSystemId(),
+                            source.getPublicId(),
+                            r,
+                            in,
+                            source.getEncoding());
+           }
+         catch (SAXException e)
+           {
+             throw e;
+           }
+         catch (IOException e)
+           {
+             throw e;
+           }
+         catch (RuntimeException e)
+           {
+             throw e;
+           }
+         catch (Exception e)
+           {
+             throw new SAXParseException(e.getMessage(), this, e);
+           }
+         finally
+           {
+             contentHandler.endDocument();
+             reset();
+           }
+       }
+   }
+ 
+   /**
+    * <b>SAX1, SAX2</b>: Preferred API to parse an XML document, using a
+    * system identifier (URI).
+    */
+   public void parse(String systemId)
+     throws SAXException, IOException
+   {
+     parse(new InputSource(systemId));
+   }
+ 
+   //
+   // Implementation of SAX2 "XMLReader" interface
+   //
+   static final String FEATURE = "http://xml.org/sax/features/";
+   static final String PROPERTY = "http://xml.org/sax/properties/";
+ 
+   /**
+    * <b>SAX2</b>: Tells the value of the specified feature flag.
+    *
+    * @exception SAXNotRecognizedException thrown if the feature flag
+    *  is neither built in, nor yet assigned.
+    */
+   public boolean getFeature(String featureId)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     if ((FEATURE + "validation").equals(featureId))
+       {
+         return false;
+       }
+ 
+     // external entities (both types) are optionally included
+     if ((FEATURE + "external-general-entities").equals(featureId))
+       {
+         return extGE;
+       }
+     if ((FEATURE + "external-parameter-entities").equals(featureId))
+       {
+         return extPE;
+       }
+     
+     // element/attribute names are as written in document; no mangling
+     if ((FEATURE + "namespace-prefixes").equals(featureId))
+       {
+         return xmlNames;
+       }
+ 
+     // report element/attribute namespaces?
+     if ((FEATURE + "namespaces").equals(featureId))
+       {
+         return namespaces;
+       }
+ 
+     // all PEs and GEs are reported
+     if ((FEATURE + "lexical-handler/parameter-entities").equals(featureId))
+       {
+         return true;
+       }
+ 
+     // default is true
+     if ((FEATURE + "string-interning").equals(featureId))
+       {
+         return stringInterning;
+       }
+   
+     // EXTENSIONS 1.1
+     
+     // always returns isSpecified info
+     if ((FEATURE + "use-attributes2").equals(featureId))
+       {
+         return true;
+       }
+   
+     // meaningful between startDocument/endDocument
+     if ((FEATURE + "is-standalone").equals(featureId))
+       {
+         if (parser == null)
+           {
+             throw new SAXNotSupportedException(featureId);
+           }
+         return parser.isStandalone();
+       }
+ 
+     // optionally don't absolutize URIs in declarations
+     if ((FEATURE + "resolve-dtd-uris").equals(featureId))
+       {
+         return resolveAll;
+       }
+ 
+     // optionally use resolver2 interface methods, if possible
+     if ((FEATURE + "use-entity-resolver2").equals(featureId))
+       {
+         return useResolver2;
+       }
+   
+     throw new SAXNotRecognizedException(featureId);
+   }
+ 
+   // package private
+   DeclHandler getDeclHandler()
+   {
+     return declHandler;
+   }
+ 
+   // package private
+   boolean resolveURIs()
+   {
+     return resolveAll;
+   }
+ 
+   /**
+    * <b>SAX2</b>:  Returns the specified property.
+    *
+    * @exception SAXNotRecognizedException thrown if the property value
+    *  is neither built in, nor yet stored.
+    */
+   public Object getProperty(String propertyId)
+     throws SAXNotRecognizedException
+   {
+     if ((PROPERTY + "declaration-handler").equals(propertyId))
+       {
+         return (declHandler == base) ? null : declHandler;
+       }
+ 
+     if ((PROPERTY + "lexical-handler").equals(propertyId))
+       {
+         return (lexicalHandler == base) ? null : lexicalHandler;
+       }
+     
+     // unknown properties
+     throw new SAXNotRecognizedException(propertyId);
+   }
+ 
+   /**
+    * <b>SAX2</b>:  Sets the state of feature flags in this parser.  Some
+    * built-in feature flags are mutable.
+    */
+   public void setFeature(String featureId, boolean value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     boolean state;
+   
+     // Features with a defined value, we just change it if we can.
+     state = getFeature (featureId);
+     
+     if (state == value)
+       {
+         return;
+       }
+     if (parser != null)
+       {
+         throw new SAXNotSupportedException("not while parsing");
+       }
+ 
+     if ((FEATURE + "namespace-prefixes").equals(featureId))
+       {
+         // in this implementation, this only affects xmlns reporting
+         xmlNames = value;
+         // forcibly prevent illegal parser state
+         if (!xmlNames)
+           {
+             namespaces = true;
+           }
+         return;
+       }
+ 
+     if ((FEATURE + "namespaces").equals(featureId))
+       {
+         namespaces = value;
+         // forcibly prevent illegal parser state
+         if (!namespaces)
+           {
+             xmlNames = true;
+           }
+         return;
+       }
+ 
+     if ((FEATURE + "external-general-entities").equals(featureId))
+       {
+         extGE = value;
+         return;
+       }
+     if ((FEATURE + "external-parameter-entities").equals(featureId))
+       {
+         extPE = value;
+         return;
+       }
+     if ((FEATURE + "resolve-dtd-uris").equals(featureId))
+       {
+         resolveAll = value;
+         return;
+       }
+ 
+     if ((FEATURE + "use-entity-resolver2").equals(featureId))
+       {
+         useResolver2 = value;
+         return;
+       }
+ 
+     throw new SAXNotRecognizedException(featureId);
+   }
+ 
+   /**
+    * <b>SAX2</b>:  Assigns the specified property.  Like SAX1 handlers,
+    * these may be changed at any time.
+    */
+   public void setProperty(String propertyId, Object value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     // see if the property is recognized
+     getProperty(propertyId);
+     
+     // Properties with a defined value, we just change it if we can.
+     
+     if ((PROPERTY + "declaration-handler").equals(propertyId))
+       {
+         if (value == null)
+           {
+             declHandler = base;
+           }
+         else if (!(value instanceof DeclHandler))
+           {
+             throw new SAXNotSupportedException(propertyId);
+           }
+         else
+           {
+             declHandler = (DeclHandler) value;
+           }
+         return ;
+       }
+     
+     if ((PROPERTY + "lexical-handler").equals(propertyId))
+       {
+         if (value == null)
+           {
+             lexicalHandler = base;
+           }
+         else if (!(value instanceof LexicalHandler))
+           {
+             throw new SAXNotSupportedException(propertyId);
+           }
+         else
+           {
+             lexicalHandler = (LexicalHandler) value;
+           }
+         return;
+       }
+     
+     throw new SAXNotSupportedException(propertyId);
+   }
+ 
+   //
+   // This is where the driver receives XmlParser callbacks and translates
+   // them into SAX callbacks.  Some more callbacks have been added for
+   // SAX2 support.
+   //
+ 
+   void startDocument()
+     throws SAXException
+   {
+     contentHandler.setDocumentLocator(this);
+     contentHandler.startDocument();
+     attributesList.clear();
+   }
+ 
+   void xmlDecl(String version,
+                String encoding,
+                boolean standalone,
+                String inputEncoding)
+     throws SAXException
+   {
+     if (contentHandler instanceof ContentHandler2)
+       {
+         ((ContentHandler2) contentHandler).xmlDecl(version,
+                                                    encoding,
+                                                    standalone,
+                                                    inputEncoding);
+       }
+   }
+ 
+   void skippedEntity(String name)
+     throws SAXException
+   {
+     contentHandler.skippedEntity(name);
+   }
+ 
+   InputSource getExternalSubset(String name, String baseURI)
+     throws SAXException, IOException
+   {
+     if (resolver2 == null || !useResolver2 || !extPE)
+       {
+         return null;
+       }
+     return resolver2.getExternalSubset(name, baseURI);
+   }
+ 
+   InputSource resolveEntity(boolean isPE, String name,
+                             InputSource in, String baseURI)
+     throws SAXException, IOException
+   {
+     InputSource  source;
+     
+     // external entities might be skipped
+     if (isPE && !extPE)
+       {
+         return null;
+       }
+     if (!isPE && !extGE)
+       {
+         return null;
+       }
+ 
+     // ... or not
+     lexicalHandler.startEntity(name);
+     if (resolver2 != null && useResolver2)
+       {
+         source = resolver2.resolveEntity(name, in.getPublicId(),
+                                          baseURI, in.getSystemId());
+         if (source == null)
+           {
+             in.setSystemId(absolutize(baseURI,
+                                       in.getSystemId(), false));
+             source = in;
+           }
+       }
+     else
+       {
+         in.setSystemId(absolutize(baseURI,
+                                   in.getSystemId(),
+                                   entityResolver != base));
+         source = entityResolver.resolveEntity(in.getPublicId(),
+                                               in.getSystemId());
+         if (source == null)
+           {
+             source = in;
+           }
+       }
+     startExternalEntity(name, source.getSystemId(), true);
+     return source;
+   }
+ 
+   // absolutize a system ID relative to the specified base URI
+   // (temporarily) package-visible for external entity decls
+   String absolutize(String baseURI, String systemId, boolean nice)
+     throws MalformedURLException, SAXException
+   {
+     // FIXME normalize system IDs -- when?
+     // - Convert to UTF-8
+     // - Map reserved and non-ASCII characters to %HH
+     
+     try
+       {
+         if (baseURI == null)
+           {
+             if (XmlParser.uriWarnings)
+               {
+                 warn ("No base URI; hope this SYSTEM id is absolute: "
+                       + systemId);
+               }
+             return new URL(systemId).toString();
+           }
+         else
+           {
+             return new URL(new URL(baseURI), systemId).toString();
+           }
+       }
+     catch (MalformedURLException e)
+       {
+         // Let unknown URI schemes pass through unless we need
+         // the JVM to map them to i/o streams for us...
+         if (!nice)
+           {
+             throw e;
+           }
+         
+         // sometimes sysids for notations or unparsed entities
+         // aren't really URIs...
+         warn("Can't absolutize SYSTEM id: " + e.getMessage());
+         return systemId;
+       }
+   }
+ 
+   void startExternalEntity(String name, String systemId, boolean stackOnly)
+     throws SAXException
+   {
+     // The following warning was deleted because the application has the
+     // option of not setting systemId. Sun's JAXP or Xerces seems to
+     // ignore this case.
+     /*
+        if (systemId == null)
+        warn ("URI was not reported to parser for entity " + name);
+      */
+     if (!stackOnly)  // spliced [dtd] needs startEntity
+       {
+         lexicalHandler.startEntity(name);
+       }
+     entityStack.push(systemId);
+   }
+ 
+   void endExternalEntity(String name)
+     throws SAXException
+   {
+     if (!"[document]".equals(name))
+       {
+         lexicalHandler.endEntity(name);
+       }
+     entityStack.pop();
+   }
+ 
+   void startInternalEntity(String name)
+     throws SAXException
+   {
+     lexicalHandler.startEntity(name);
+   }
+ 
+   void endInternalEntity(String name)
+     throws SAXException
+   {
+     lexicalHandler.endEntity(name);
+   }
+ 
+   void doctypeDecl(String name, String publicId, String systemId)
+     throws SAXException
+   {
+     lexicalHandler.startDTD(name, publicId, systemId);
+   
+     // ... the "name" is a declaration and should be given
+     // to the DeclHandler (but sax2 doesn't).
+     
+     // the IDs for the external subset are lexical details,
+     // as are the contents of the internal subset; but sax2
+     // doesn't provide the internal subset "pre-parse"
+   }
+   
+   void notationDecl(String name, String publicId, String systemId,
+                     String baseUri)
+     throws SAXException
+   {
+     try
+       {
+         dtdHandler.notationDecl(name, publicId,
+                                 (resolveAll && systemId != null)
+                                 ? absolutize(baseUri, systemId, true)
+                                 : systemId);
+       }
+     catch (IOException e)
+       {
+         // "can't happen"
+         throw new SAXParseException(e.getMessage(), this, e);
+       }
+   }
+ 
+   void unparsedEntityDecl(String name, String publicId, String systemId,
+                           String baseUri, String notation)
+     throws SAXException
+   {
+     try
+       {
+         dtdHandler.unparsedEntityDecl(name, publicId,
+                                       resolveAll
+                                       ? absolutize(baseUri, systemId, true)
+                                       : systemId,
+                                       notation);
+       }
+     catch (IOException e)
+       {
+         // "can't happen"
+         throw new SAXParseException(e.getMessage(), this, e);
+       }
+   }
+ 
+   void endDoctype()
+     throws SAXException
+   {
+     lexicalHandler.endDTD();
+   }
+ 
+   private void declarePrefix(String prefix, String uri)
+     throws SAXException
+   {
+     int index = uri.indexOf(':');
+ 
+     // many versions of nwalsh docbook stylesheets 
+     // have bogus URLs; so this can't be an error...
+     if (index < 1 && uri.length() != 0)
+       {
+         warn("relative URI for namespace: " + uri);
+       }
+ 
+     // FIXME:  char [0] must be ascii alpha; chars [1..index]
+     // must be ascii alphanumeric or in "+-." [RFC 2396]
+     
+     //Namespace Constraints
+     //name for xml prefix must be http://www.w3.org/XML/1998/namespace
+     boolean prefixEquality = prefix.equals("xml");
+     boolean uriEquality = uri.equals("http://www.w3.org/XML/1998/namespace");
+     if ((prefixEquality || uriEquality) && !(prefixEquality && uriEquality))
+       {
+         fatal("xml is by definition bound to the namespace name " +
+               "http://www.w3.org/XML/1998/namespace");
+       }
+   
+     //xmlns prefix declaration is illegal but xml prefix declaration is llegal...
+     if (prefixEquality && uriEquality)
+       {
+         return;
+       }
+   
+     //name for xmlns prefix must be http://www.w3.org/2000/xmlns/
+     prefixEquality = prefix.equals("xmlns");
+     uriEquality = uri.equals("http://www.w3.org/2000/xmlns/");
+     if ((prefixEquality || uriEquality) && !(prefixEquality && uriEquality))
+       {
+         fatal("http://www.w3.org/2000/xmlns/ is by definition bound" +
+               " to prefix xmlns");
+       }
+   
+     //even if the uri is http://www.w3.org/2000/xmlns/
+     // it is illegal to declare it
+     if (prefixEquality && uriEquality)
+       {
+         fatal ("declaring the xmlns prefix is illegal");
+       }
+   
+     uri = uri.intern();
+     prefixStack.declarePrefix(prefix, uri);
+     contentHandler.startPrefixMapping(prefix, uri);
+   }
+ 
+   void attribute(String qname, String value, boolean isSpecified)
+     throws SAXException
+   {
+     if (!attributes)
+       {
+         attributes = true;
+         if (namespaces)
+           {
+             prefixStack.pushContext();
+           }
+       }
+     
+     // process namespace decls immediately;
+     // then maybe forget this as an attribute
+     if (namespaces)
+       {
+         int index;
+         
+         // default NS declaration?
+         if (stringInterning)
+           {
+             if ("xmlns" == qname)
+               {
+                 declarePrefix("", value);
+                 if (!xmlNames)
+                   {
+                     return;
+                   }
+               }
+             // NS prefix declaration?
+             else if ((index = qname.indexOf(':')) == 5
+                      && qname.startsWith("xmlns"))
+               {
+                 String prefix = qname.substring(6);
+               
+                 if (prefix.equals(""))
+                   {
+                     fatal("missing prefix " +
+                           "in namespace declaration attribute");  
+                   }
+                 if (value.length() == 0)
+                   {
+                     verror("missing URI in namespace declaration attribute: "
+                            + qname);
+                   }
+                 else
+                   {
+                     declarePrefix(prefix, value);
+                   }
+                 if (!xmlNames)
+                   {
+                     return;
+                   }
+               }
+           }
+         else
+           {
+             if ("xmlns".equals(qname))
+               {
+                 declarePrefix("", value);
+                 if (!xmlNames)
+                   {
+                     return;
+                   }
+               }
+             // NS prefix declaration?
+             else if ((index = qname.indexOf(':')) == 5
+                      && qname.startsWith("xmlns"))
+               {
+                 String prefix = qname.substring(6);
+                 
+                 if (value.length() == 0)
+                   {
+                     verror("missing URI in namespace decl attribute: "
+                            + qname);
+                   }
+                 else
+                   {
+                     declarePrefix(prefix, value);
+                   }
+                 if (!xmlNames)
+                   {
+                     return;
+                   }
+               }
+           }
+       }
+     // remember this attribute ...
+     attributeCount++;
+     
+     // attribute type comes from querying parser's DTD records
+     attributesList.add(new Attribute(qname, value, isSpecified));
+     
+   }
+   
+   void startElement(String elname)
+     throws SAXException
+   {
+     ContentHandler handler = contentHandler;
+ 
+     //
+     // NOTE:  this implementation of namespace support adds something
+     // like six percent to parsing CPU time, in a large (~50 MB)
+     // document that doesn't use namespaces at all.  (Measured by PC
+     // sampling, with a bug where endElement processing was omitted.)
+     // [Measurement referred to older implementation, older JVM ...]
+     //
+     // It ought to become notably faster in such cases.  Most
+     // costs are the prefix stack calling Hashtable.get() (2%),
+     // String.hashCode() (1.5%) and about 1.3% each for pushing
+     // the context, and two chunks of name processing.
+     //
+     
+     if (!attributes)
+       {
+         if (namespaces)
+           {
+             prefixStack.pushContext();
+           }
+       }
+     else if (namespaces)
+       {
+       
+         // now we can patch up namespace refs; we saw all the
+         // declarations, so now we'll do the Right Thing
+         Iterator itt = attributesList.iterator();
+         while (itt.hasNext())
+           {
+             Attribute attribute = (Attribute) itt.next();
+             String qname = attribute.name;
+             int index;
+             
+             // default NS declaration?
+             if (stringInterning)
+               {
+                 if ("xmlns" == qname)
+                   {
+                     continue;
+                   }
+               }
+             else
+               {
+                 if ("xmlns".equals(qname))
+                   {
+                     continue;
+                   }
+               }
+             //Illegal in the new Namespaces Draft
+             //should it be only in 1.1 docs??
+             if (qname.equals (":"))
+               {
+                 fatal("namespace names consisting of a single colon " +
+                       "character are invalid");
+               }
+             index = qname.indexOf(':');
+             
+             // NS prefix declaration?
+             if (index == 5 && qname.startsWith("xmlns"))
+               {
+                 continue;
+               }
+             
+             // it's not a NS decl; patch namespace info items
+             if (prefixStack.processName(qname, nsTemp, true) == null)
+               {
+                 fatal("undeclared attribute prefix in: " + qname);
+               }
+             else
+               {
+                 attribute.nameSpace = nsTemp[0];
+                 attribute.localName = nsTemp[1];
+               }
+           }
+       }
+     
+     // save element name so attribute callbacks work
+     elementName = elname;
+     if (namespaces)
+       {
+         if (prefixStack.processName(elname, nsTemp, false) == null)
+           {
+             fatal("undeclared element prefix in: " + elname);
+             nsTemp[0] = nsTemp[1] = "";
+           }
+         handler.startElement(nsTemp[0], nsTemp[1], elname, this);
+       }
+     else
+       {
+         handler.startElement("", "", elname, this);
+       }
+     // elementName = null;
+     
+     // elements with no attributes are pretty common!
+     if (attributes)
+       {
+         attributesList.clear();
+         attributeCount = 0;
+         attributes = false;
+       }
+   }
+   
+   void endElement(String elname)
+     throws SAXException
+   {
+     ContentHandler handler = contentHandler;
+ 
+     if (!namespaces)
+       {
+         handler.endElement("", "", elname);
+         return;
+       }
+     prefixStack.processName(elname, nsTemp, false);
+     handler.endElement(nsTemp[0], nsTemp[1], elname);
+     
+     Enumeration prefixes = prefixStack.getDeclaredPrefixes();
+     
+     while (prefixes.hasMoreElements())
+       {
+         handler.endPrefixMapping((String) prefixes.nextElement());
+       }
+     prefixStack.popContext();
+   }
+ 
+   void startCDATA()
+     throws SAXException
+   {
+     lexicalHandler.startCDATA();
+   }
+ 
+   void charData(char[] ch, int start, int length)
+     throws SAXException
+   {
+     contentHandler.characters(ch, start, length);
+   }
+ 
+   void endCDATA()
+     throws SAXException
+   {
+     lexicalHandler.endCDATA();
+   }
+ 
+   void ignorableWhitespace(char[] ch, int start, int length)
+     throws SAXException
+   {
+     contentHandler.ignorableWhitespace(ch, start, length);
+   }
+ 
+   void processingInstruction(String target, String data)
+     throws SAXException
+   {
+     contentHandler.processingInstruction(target, data);
+   }
+ 
+   void comment(char[] ch, int start, int length)
+     throws SAXException
+   {
+     if (lexicalHandler != base)
+       {
+         lexicalHandler.comment(ch, start, length);
+       }
+   }
+ 
+   void fatal(String message)
+     throws SAXException
+   {
+     SAXParseException fatal;
+   
+     fatal = new SAXParseException(message, this);
+     errorHandler.fatalError(fatal);
+ 
+     // Even if the application can continue ... we can't!
+     throw fatal;
+   }
+ 
+   // We can safely report a few validity errors that
+   // make layered SAX2 DTD validation more conformant
+   void verror(String message)
+     throws SAXException
+   {
+     SAXParseException err;
+     
+     err = new SAXParseException(message, this);
+     errorHandler.error(err);
+   }
+   
+   void warn(String message)
+     throws SAXException
+   {
+     SAXParseException err;
+   
+     err = new SAXParseException(message, this);
+     errorHandler.warning(err);
+   }
+ 
+   //
+   // Implementation of org.xml.sax.Attributes.
+   //
+ 
+   /**
+    * <b>SAX1 AttributeList, SAX2 Attributes</b> method
+    * (don't invoke on parser);
+    */
+   public int getLength()
+   {
+     return attributesList.size();
+   }
+ 
+   /**
+    * <b>SAX2 Attributes</b> method (don't invoke on parser);
+    */
+   public String getURI(int index)
+   {
+     if (index < 0 || index >= attributesList.size())
+       {
+         return null;
+       }
+     return ((Attribute) attributesList.get(index)).nameSpace;
+   }
+ 
+   /**
+    * <b>SAX2 Attributes</b> method (don't invoke on parser);
+    */
+   public String getLocalName(int index)
+   {
+     if (index < 0 || index >= attributesList.size())
+       {
+         return null;
+       }
+     Attribute attr = (Attribute) attributesList.get(index);
+     // FIXME attr.localName is sometimes null, why?
+     if (namespaces && attr.localName == null)
+       {
+         // XXX fix this here for now
+         int ci = attr.name.indexOf(':');
+         attr.localName = (ci == -1) ? attr.name :
+           attr.name.substring(ci + 1);
+       }
+     return (attr.localName == null) ? "" : attr.localName;
+   }
+ 
+   /**
+    * <b>SAX2 Attributes</b> method (don't invoke on parser);
+    */
+   public String getQName(int index)
+   {
+     if (index < 0 || index >= attributesList.size())
+       {
+       return null;
+       }
+     Attribute attr = (Attribute) attributesList.get(index);
+     return (attr.name == null) ? "" : attr.name;
+   }
+ 
+   /**
+    * <b>SAX1 AttributeList</b> method (don't invoke on parser);
+    */
+   public String getName(int index)
+   {
+     return getQName(index);
+   }
+ 
+   /**
+    * <b>SAX1 AttributeList, SAX2 Attributes</b> method
+    * (don't invoke on parser);
+    */
+   public String getType(int index)
+   {
+     if (index < 0 || index >= attributesList.size())
+       {
+         return null;
+       }
+     String type = parser.getAttributeType(elementName, getQName(index));
+     if (type == null)
+       {
+         return "CDATA";
+       }
+     // ... use DeclHandler.attributeDecl to see enumerations
+     if (type == "ENUMERATION")
+       {
+         return "NMTOKEN";
+       }
+     return type;
+   }
+ 
+   /**
+    * <b>SAX1 AttributeList, SAX2 Attributes</b> method
+    * (don't invoke on parser);
+    */
+   public String getValue(int index)
+   {
+     if (index < 0 || index >= attributesList.size())
+       {
+         return null;
+       }
+     return ((Attribute) attributesList.get(index)).value;
+   }
+ 
+   /**
+    * <b>SAX2 Attributes</b> method (don't invoke on parser);
+    */
+   public int getIndex(String uri, String local)
+     {
+       int length = getLength();
+       
+       for (int i = 0; i < length; i++)
+         {
+           if (!getURI(i).equals(uri))
+             {
+               continue;
+             }
+           if (getLocalName(i).equals(local))
+             {
+               return i;
+             }
+         }
+       return -1;
+   }
+ 
+   /**
+    * <b>SAX2 Attributes</b> method (don't invoke on parser);
+    */
+   public int getIndex(String xmlName)
+   {
+     int length = getLength();
+     
+     for (int i = 0; i < length; i++)
+       {
+         if (getQName(i).equals(xmlName))
+           {
+             return i;
+           }
+       }
+     return -1;
+   }
+ 
+   /**
+    * <b>SAX2 Attributes</b> method (don't invoke on parser);
+    */
+   public String getType(String uri, String local)
+   {
+     int index = getIndex(uri, local);
+     
+     if (index < 0)
+       {
+         return null;
+       }
+     return getType(index);
+   }
+ 
+   /**
+    * <b>SAX1 AttributeList, SAX2 Attributes</b> method
+    * (don't invoke on parser);
+    */
+   public String getType(String xmlName)
+   {
+     int index = getIndex(xmlName);
+     
+     if (index < 0)
+       {
+         return null;
+       }
+     return getType(index);
+   }
+ 
+   /**
+    * <b>SAX Attributes</b> method (don't invoke on parser);
+    */
+   public String getValue(String uri, String local)
+   {
+     int index = getIndex(uri, local);
+     
+     if (index < 0)
+       {
+         return null;
+       }
+     return getValue(index);
+   }
+ 
+   /**
+    * <b>SAX1 AttributeList, SAX2 Attributes</b> method
+    * (don't invoke on parser);
+    */
+   public String getValue(String xmlName)
+   {
+     int index = getIndex(xmlName);
+     
+     if (index < 0)
+       {
+         return null;
+       }
+     return getValue(index);
+   }
+ 
+   //
+   // Implementation of org.xml.sax.ext.Attributes2
+   //
+ 
+   /** @return false unless the attribute was declared in the DTD.
+    * @throws java.lang.ArrayIndexOutOfBoundsException
+    *   When the supplied index does not identify an attribute.
+    */  
+   public boolean isDeclared(int index)
+   {
+     if (index < 0 || index >= attributeCount)
+       {
+         throw new ArrayIndexOutOfBoundsException();
+       }
+     String type = parser.getAttributeType(elementName, getQName(index));
+     return (type != null);
+   }
+ 
+   /** @return false unless the attribute was declared in the DTD.
+    * @throws java.lang.IllegalArgumentException
+    *   When the supplied names do not identify an attribute.
+    */
+   public boolean isDeclared(String qName)
+   {
+     int index = getIndex(qName);
+     if (index < 0)
+       {
+         throw new IllegalArgumentException();
+       }
+     String type = parser.getAttributeType(elementName, qName);
+     return (type != null);
+   }
+ 
+   /** @return false unless the attribute was declared in the DTD.
+    * @throws java.lang.IllegalArgumentException
+    *   When the supplied names do not identify an attribute.
+    */
+   public boolean isDeclared(String uri, String localName)
+   {
+     int index = getIndex(uri, localName);
+     return isDeclared(index);
+   }
+ 
+   /**
+    * <b>SAX-ext Attributes2</b> method (don't invoke on parser);
+    */
+   public boolean isSpecified(int index)
+   {
+     return ((Attribute) attributesList.get(index)).specified;
+   }
+ 
+   /**
+    * <b>SAX-ext Attributes2</b> method (don't invoke on parser);
+    */
+   public boolean isSpecified(String uri, String local)
+   {
+     int index = getIndex (uri, local);
+     return isSpecified(index);
+   }
+ 
+   /**
+    * <b>SAX-ext Attributes2</b> method (don't invoke on parser);
+    */
+   public boolean isSpecified(String xmlName)
+   {
+     int index = getIndex (xmlName);
+     return isSpecified(index);
+   }
+ 
+   //
+   // Implementation of org.xml.sax.Locator.
+   //
+ 
+   /**
+    * <b>SAX Locator</b> method (don't invoke on parser);
+    */
+   public String getPublicId()
+   {
+     return null;   // FIXME track public IDs too
+   }
+ 
+   /**
+    * <b>SAX Locator</b> method (don't invoke on parser);
+    */
+   public String getSystemId()
+   {
+     if (entityStack.empty())
+       {
+         return null;
+       }
+     else
+       {
+         return (String) entityStack.peek();
+       }
+   }
+ 
+   /**
+    * <b>SAX Locator</b> method (don't invoke on parser);
+    */
+   public int getLineNumber()
+   {
+     return parser.getLineNumber();
+   }
+ 
+   /**
+    * <b>SAX Locator</b> method (don't invoke on parser);
+    */
+   public int getColumnNumber()
+   {
+     return parser.getColumnNumber();
+   }
+ 
+   // adapter between SAX2 content handler and SAX1 document handler callbacks
+   private static class Adapter
+     implements ContentHandler
+   {
+     
+     private DocumentHandler docHandler;
+ 
+     Adapter(DocumentHandler dh)
+     {
+       docHandler = dh;
+     }
+ 
+     public void setDocumentLocator(Locator l)
+     {
+       docHandler.setDocumentLocator(l);
+     }
+   
+     public void startDocument()
+       throws SAXException
+     {
+       docHandler.startDocument();
+     }
+   
+     public void processingInstruction(String target, String data)
+       throws SAXException
+     {
+       docHandler.processingInstruction(target, data);
+     }
+   
+     public void startPrefixMapping(String prefix, String uri)
+     {
+       /* ignored */
+     }
+ 
+     public void startElement(String namespace,
+                              String local,
+                              String name,
+                              Attributes attrs)
+       throws SAXException
+     {
+       docHandler.startElement(name, (AttributeList) attrs);
+     }
+ 
+     public void characters(char[] buf, int offset, int len)
+       throws SAXException
+     {
+       docHandler.characters(buf, offset, len);
+     }
+ 
+     public void ignorableWhitespace(char[] buf, int offset, int len)
+       throws SAXException
+     {
+       docHandler.ignorableWhitespace(buf, offset, len);
+     }
+ 
+     public void skippedEntity(String name)
+     {
+       /* ignored */
+     }
+ 
+     public void endElement(String u, String l, String name)
+       throws SAXException
+     {
+       docHandler.endElement(name);
+     }
+ 
+     public void endPrefixMapping(String prefix)
+     {
+       /* ignored */
+     }
+ 
+     public void endDocument()
+       throws SAXException
+     {
+       docHandler.endDocument();
+     }
+   }
+ 
+   private static class Attribute
+   {
+     
+     String name;
+     String value;
+     String nameSpace;
+     String localName;
+     boolean specified;
+     
+     Attribute(String name, String value, boolean specified)
+     {
+       this.name = name;
+       this.value = value;
+       this.nameSpace = "";
+       this.specified = specified;
+     }
+     
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/XmlParser.java gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/XmlParser.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/XmlParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/XmlParser.java	Mon Feb  6 22:06:21 2006
***************
*** 0 ****
--- 1,5836 ----
+ /* XmlParser.java -- 
+    Copyright (C) 1999,2000,2001, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version.
+ 
+ Partly derived from code which carried the following notice:
+ 
+   Copyright (c) 1997, 1998 by Microstar Software Ltd.
+ 
+   AElfred is free for both commercial and non-commercial use and
+   redistribution, provided that Microstar's copyright and disclaimer are
+   retained intact.  You are free to modify AElfred for your own use and
+   to redistribute AElfred with your modifications, provided that the
+   modifications are clearly documented.
+ 
+   This program 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.  Please use it AT
+   YOUR OWN RISK.
+ */
+ 
+ package gnu.xml.aelfred2;
+ 
+ import gnu.java.security.action.GetPropertyAction;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.CharConversionException;
+ import java.io.EOFException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.IOException;
+ import java.io.Reader;
+ import java.io.UnsupportedEncodingException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.security.AccessController;
+ 
+ import java.util.Iterator;
+ import java.util.HashMap;
+ import java.util.LinkedList;
+ 
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ 
+ 
+ /**
+  * Parse XML documents and return parse events through call-backs.
+  * Use the <code>SAXDriver</code> class as your entry point, as all
+  * internal parser interfaces are subject to change.
+  *
+  * @author Written by David Megginson &lt;dmeggins@microstar.com&gt;
+  *	(version 1.2a with bugfixes)
+  * @author Updated by David Brownell &lt;dbrownell@users.sourceforge.net&gt;
+  * @see SAXDriver
+  */
+ final class XmlParser
+ {
+ 
+   // avoid slow per-character readCh()
+   private final static boolean USE_CHEATS = true;
+ 
+   ////////////////////////////////////////////////////////////////////////
+   // Constants.
+   ////////////////////////////////////////////////////////////////////////
+   
+   //
+   // Constants for element content type.
+   //
+   
+   /**
+    * Constant: an element has not been declared.
+    * @see #getElementContentType
+    */
+   public final static int CONTENT_UNDECLARED = 0;
+   
+   /**
+    * Constant: the element has a content model of ANY.
+    * @see #getElementContentType
+    */
+   public final static int CONTENT_ANY = 1;
+   
+   /**
+    * Constant: the element has declared content of EMPTY.
+    * @see #getElementContentType
+    */
+   public final static int CONTENT_EMPTY = 2;
+   
+   /**
+    * Constant: the element has mixed content.
+    * @see #getElementContentType
+    */
+   public final static int CONTENT_MIXED = 3;
+   
+   /**
+    * Constant: the element has element content.
+    * @see #getElementContentType
+    */
+   public final static int CONTENT_ELEMENTS = 4;
+   
+   
+   //
+   // Constants for the entity type.
+   //
+   
+   /**
+    * Constant: the entity has not been declared.
+    * @see #getEntityType
+    */
+   public final static int ENTITY_UNDECLARED = 0;
+   
+   /**
+    * Constant: the entity is internal.
+    * @see #getEntityType
+    */
+   public final static int ENTITY_INTERNAL = 1;
+   
+   /**
+    * Constant: the entity is external, non-parsable data.
+    * @see #getEntityType
+    */
+   public final static int ENTITY_NDATA = 2;
+   
+   /**
+    * Constant: the entity is external XML data.
+    * @see #getEntityType
+    */
+   public final static int ENTITY_TEXT = 3;
+     
+   //
+   // Attribute type constants are interned literal strings.
+   //
+   
+   //
+   // Constants for supported encodings.  "external" is just a flag.
+   //
+   private final static int ENCODING_EXTERNAL = 0;
+   private final static int ENCODING_UTF_8 = 1;
+   private final static int ENCODING_ISO_8859_1 = 2;
+   private final static int ENCODING_UCS_2_12 = 3;
+   private final static int ENCODING_UCS_2_21 = 4;
+   private final static int ENCODING_UCS_4_1234 = 5;
+   private final static int ENCODING_UCS_4_4321 = 6;
+   private final static int ENCODING_UCS_4_2143 = 7;
+   private final static int ENCODING_UCS_4_3412 = 8;
+   private final static int ENCODING_ASCII = 9;
+   
+   //
+   // Constants for attribute default value.
+   //
+   
+   /**
+    * Constant: the attribute is not declared.
+    * @see #getAttributeDefaultValueType
+    */
+   public final static int ATTRIBUTE_DEFAULT_UNDECLARED = 30;
+   
+   /**
+    * Constant: the attribute has a literal default value specified.
+    * @see #getAttributeDefaultValueType
+    * @see #getAttributeDefaultValue
+    */
+   public final static int ATTRIBUTE_DEFAULT_SPECIFIED = 31;
+   
+   /**
+    * Constant: the attribute was declared #IMPLIED.
+    * @see #getAttributeDefaultValueType
+    */
+   public final static int ATTRIBUTE_DEFAULT_IMPLIED = 32;
+   
+   /**
+    * Constant: the attribute was declared #REQUIRED.
+    * @see #getAttributeDefaultValueType
+    */
+   public final static int ATTRIBUTE_DEFAULT_REQUIRED = 33;
+   
+   /**
+    * Constant: the attribute was declared #FIXED.
+    * @see #getAttributeDefaultValueType
+    * @see #getAttributeDefaultValue
+    */
+   public final static int ATTRIBUTE_DEFAULT_FIXED = 34;
+     
+   //
+   // Constants for input.
+   //
+   private final static int INPUT_NONE = 0;
+   private final static int INPUT_INTERNAL = 1;
+   private final static int INPUT_STREAM = 3;
+   private final static int INPUT_READER = 5;
+   
+   //
+   // Flags for reading literals.
+   //
+   // expand general entity refs (attribute values in dtd and content)
+   private final static int LIT_ENTITY_REF = 2;
+   // normalize this value (space chars) (attributes, public ids)
+   private final static int LIT_NORMALIZE = 4;
+   // literal is an attribute value 
+   private final static int LIT_ATTRIBUTE = 8;
+   // don't expand parameter entities
+   private final static int LIT_DISABLE_PE = 16;
+   // don't expand [or parse] character refs
+   private final static int LIT_DISABLE_CREF = 32;
+   // don't parse general entity refs
+   private final static int LIT_DISABLE_EREF = 64;
+   // literal is a public ID value 
+   private final static int LIT_PUBID = 256;
+     
+   //
+   // Flags affecting PE handling in DTDs (if expandPE is true).
+   // PEs expand with space padding, except inside literals.
+   //
+   private final static int CONTEXT_NORMAL = 0;
+   private final static int CONTEXT_LITERAL = 1;
+   
+   // Emit warnings for relative URIs with no base URI.
+   static boolean uriWarnings;
+   static
+   {
+     String key = "gnu.xml.aelfred2.XmlParser.uriWarnings";
+     GetPropertyAction a = new GetPropertyAction(key);
+     uriWarnings = "true".equals(AccessController.doPrivileged(a));      
+   }
+     
+   //
+   // The current XML handler interface.
+   //
+   private SAXDriver handler;
+   
+   //
+   // I/O information.
+   //
+   private Reader reader;   // current reader
+   private InputStream is;     // current input stream
+   private int line;     // current line number
+   private int column;   // current column number
+   private int sourceType;   // type of input source
+   private LinkedList inputStack;   // stack of input soruces
+   private URLConnection externalEntity; // current external entity
+   private int encoding;   // current character encoding
+   private int currentByteCount; // bytes read from current source
+   private InputSource scratch;  // temporary
+   
+   //
+   // Buffers for decoded but unparsed character input.
+   //
+   private char[] readBuffer;
+   private int readBufferPos;
+   private int readBufferLength;
+   private int readBufferOverflow;  // overflow from last data chunk.
+   
+   //
+   // Buffer for undecoded raw byte input.
+   //
+   private final static int READ_BUFFER_MAX = 16384;
+   private byte[] rawReadBuffer;
+   
+   
+   //
+   // Buffer for attribute values, char refs, DTD stuff.
+   //
+   private static int DATA_BUFFER_INITIAL = 4096;
+   private char[] dataBuffer;
+   private int dataBufferPos;
+   
+   //
+   // Buffer for parsed names.
+   //
+   private static int NAME_BUFFER_INITIAL = 1024;
+   private char[] nameBuffer;
+   private int nameBufferPos;
+   
+   //
+   // Save any standalone flag
+   //
+   private boolean docIsStandalone;
+   
+   //
+   // Hashtables for DTD information on elements, entities, and notations.
+   // Populated until we start ignoring decls (because of skipping a PE)
+   //
+   private HashMap elementInfo;
+   private HashMap entityInfo;
+   private HashMap notationInfo;
+   private boolean skippedPE;
+   
+   //
+   // Element type currently in force.
+   //
+   private String currentElement;
+   private int currentElementContent;
+   
+   //
+   // Stack of entity names, to detect recursion.
+   //
+   private LinkedList entityStack;
+   
+   //
+   // PE expansion is enabled in most chunks of the DTD, not all.
+   // When it's enabled, literals are treated differently.
+   //
+   private boolean inLiteral;
+   private boolean expandPE;
+   private boolean peIsError;
+   
+   //
+   // can't report entity expansion inside two constructs:
+   // - attribute expansions (internal entities only)
+   // - markup declarations (parameter entities only)
+   //
+   private boolean doReport;
+   
+   //
+   // Symbol table, for caching interned names.
+   //
+   // These show up wherever XML names or nmtokens are used:  naming elements,
+   // attributes, PIs, notations, entities, and enumerated attribute values.
+   //
+   // NOTE:  This hashtable doesn't grow.  The default size is intended to be
+   // rather large for most documents.  Example:  one snapshot of the DocBook
+   // XML 4.1 DTD used only about 350 such names.  As a rule, only pathological
+   // documents (ones that don't reuse names) should ever see much collision.
+   //
+   // Be sure that SYMBOL_TABLE_LENGTH always stays prime, for best hashing.
+   // "2039" keeps the hash table size at about two memory pages on typical
+   // 32 bit hardware.
+   //
+   private final static int SYMBOL_TABLE_LENGTH = 2039;
+   
+   private Object[][] symbolTable;
+   
+   //
+   // Hash table of attributes found in current start tag.
+   //
+   private String[] tagAttributes;
+   private int tagAttributePos;
+   
+   //
+   // Utility flag: have we noticed a CR while reading the last
+   // data chunk?  If so, we will have to go back and normalise
+   // CR or CR/LF line ends.
+   //
+   private boolean sawCR;
+   
+   //
+   // Utility flag: are we in CDATA?  If so, whitespace isn't ignorable.
+   // 
+   private boolean inCDATA;
+   
+   //
+   // Xml version.
+   //  
+   private static final int XML_10 = 0; 
+   private static final int XML_11 = 1; 
+   private int xmlVersion = XML_10;
+ 
+   //////////////////////////////////////////////////////////////////////
+   // Constructors.
+   ////////////////////////////////////////////////////////////////////////
+   
+   /**
+    * Construct a new parser with no associated handler.
+    * @see #setHandler
+    * @see #parse
+    */
+   // package private
+   XmlParser()
+   {
+   }
+ 
+   /**
+    * Set the handler that will receive parsing events.
+    * @param handler The handler to receive callback events.
+    * @see #parse
+    */
+   // package private
+   void setHandler(SAXDriver handler)
+   {
+     this.handler = handler;
+   }
+ 
+   /**
+    * Parse an XML document from the character stream, byte stream, or URI
+    * that you provide (in that order of preference).  Any URI that you
+    * supply will become the base URI for resolving relative URI, and may
+    * be used to acquire a reader or byte stream.
+    *
+    * <p> Only one thread at a time may use this parser; since it is
+    * private to this package, post-parse cleanup is done by the caller,
+    * which MUST NOT REUSE the parser (just null it).
+    *
+    * @param systemId Absolute URI of the document; should never be null,
+    *	but may be so iff a reader <em>or</em> a stream is provided.
+    * @param publicId The public identifier of the document, or null.
+    * @param reader A character stream; must be null if stream isn't.
+    * @param stream A byte input stream; must be null if reader isn't.
+    * @param encoding The suggested encoding, or null if unknown.
+    * @exception java.lang.Exception Basically SAXException or IOException
+    */
+   // package private 
+   void doParse(String systemId, String publicId, Reader reader,
+                InputStream stream, String encoding)
+     throws Exception
+   {
+     if (handler == null)
+       {
+         throw new IllegalStateException("no callback handler");
+       }
+ 
+     initializeVariables();
+ 
+     // predeclare the built-in entities here (replacement texts)
+     // we don't need to intern(), since we're guaranteed literals
+     // are always (globally) interned.
+     setInternalEntity("amp", "&#38;");
+     setInternalEntity("lt", "&#60;");
+     setInternalEntity("gt", "&#62;");
+     setInternalEntity("apos", "&#39;");
+     setInternalEntity("quot", "&#34;");
+ 
+     try
+       {
+         // pushURL first to ensure locator is correct in startDocument
+         // ... it might report an IO or encoding exception.
+         handler.startDocument();
+         pushURL(false, "[document]",
+                 // default baseURI: null
+                 new ExternalIdentifiers(publicId, systemId, null),
+                 reader, stream, encoding, false);
+         
+         parseDocument();
+       }
+     catch (EOFException e)
+       {
+         //empty input
+         error("empty document, with no root element.");
+       }
+     finally
+       {
+         if (reader != null)
+           {
+             try
+               {
+                 reader.close();
+               }
+             catch (IOException e)
+               {
+                 /* ignore */
+               }
+           }
+         if (stream != null)
+           {
+             try
+               {
+                 stream.close();
+               }
+             catch (IOException e)
+               {
+                 /* ignore */
+               }
+           }
+         if (is != null)
+           {
+             try
+               {
+                 is.close();
+               }
+             catch (IOException e)
+               {
+                 /* ignore */
+               }
+           }
+         scratch = null;
+       }
+   }
+ 
+   //////////////////////////////////////////////////////////////////////
+   // Error reporting.
+   //////////////////////////////////////////////////////////////////////
+     
+   /**
+    * Report an error.
+    * @param message The error message.
+    * @param textFound The text that caused the error (or null).
+    * @see SAXDriver#error
+    * @see #line
+    */
+   private void error(String message, String textFound, String textExpected)
+     throws SAXException
+   {
+     if (textFound != null)
+       {
+         message = message + " (found \"" + textFound + "\")";
+       }
+     if (textExpected != null)
+       {
+         message = message + " (expected \"" + textExpected + "\")";
+       }
+     handler.fatal(message);
+     
+     // "can't happen"
+     throw new SAXException(message);
+   }
+ 
+   /**
+    * Report a serious error.
+    * @param message The error message.
+    * @param textFound The text that caused the error (or null).
+    */
+   private void error(String message, char textFound, String textExpected)
+     throws SAXException
+   {
+     error(message, new Character(textFound).toString(), textExpected);
+   }
+ 
+   /**
+    * Report typical case fatal errors.
+    */
+   private void error(String message)
+     throws SAXException
+   {
+     handler.fatal(message);
+   }
+ 
+   //////////////////////////////////////////////////////////////////////
+   // Major syntactic productions.
+   //////////////////////////////////////////////////////////////////////
+ 
+   /**
+    * Parse an XML document.
+    * <pre>
+    * [1] document ::= prolog element Misc*
+    * </pre>
+    * <p>This is the top-level parsing function for a single XML
+    * document.  As a minimum, a well-formed document must have
+    * a document element, and a valid document must have a prolog
+    * (one with doctype) as well.
+    */
+   private void parseDocument()
+     throws Exception
+   {
+     try
+       {                                       // added by MHK
+         boolean sawDTD = parseProlog();
+         require('<');
+         parseElement(!sawDTD);
+       }
+     catch (EOFException ee)
+       {                 // added by MHK
+         error("premature end of file", "[EOF]", null);
+       }
+     
+     try
+       {
+         parseMisc();   //skip all white, PIs, and comments
+         char c = readCh();    //if this doesn't throw an exception...
+         error("unexpected characters after document end", c, null);
+       }
+     catch (EOFException e)
+       {
+         return;
+       }
+   }
+   
+   static final char[] startDelimComment = { '<', '!', '-', '-' };
+   static final char[] endDelimComment = { '-', '-' };
+ 
+   /**
+    * Skip a comment.
+    * <pre>
+    * [15] Comment ::= '&lt;!--' ((Char - '-') | ('-' (Char - '-')))* "-->"
+    * </pre>
+    * <p> (The <code>&lt;!--</code> has already been read.)
+    */
+   private void parseComment()
+     throws Exception
+   {
+     char c;
+     boolean saved = expandPE;
+     
+     expandPE = false;
+     parseUntil(endDelimComment);
+     require('>');
+     expandPE = saved;
+     handler.comment(dataBuffer, 0, dataBufferPos);
+     dataBufferPos = 0;
+   }
+   
+   static final char[] startDelimPI = { '<', '?' };
+   static final char[] endDelimPI = { '?', '>' };
+ 
+   /**
+    * Parse a processing instruction and do a call-back.
+    * <pre>
+    * [16] PI ::= '&lt;?' PITarget
+    *    (S (Char* - (Char* '?&gt;' Char*)))?
+    *    '?&gt;'
+    * [17] PITarget ::= Name - ( ('X'|'x') ('M'|m') ('L'|l') )
+    * </pre>
+    * <p> (The <code>&lt;?</code> has already been read.)
+    */
+   private void parsePI()
+     throws SAXException, IOException
+   {
+     String name;
+     boolean saved = expandPE;
+     
+     expandPE = false;
+     name = readNmtoken(true);
+     //NE08
+     if (name.indexOf(':') >= 0)
+       {
+         error("Illegal character(':') in processing instruction name ",
+               name, null);
+       }
+     if ("xml".equalsIgnoreCase(name))
+       {
+         error("Illegal processing instruction target", name, null);
+       }
+     if (!tryRead(endDelimPI))
+       {
+         requireWhitespace();
+         parseUntil(endDelimPI);
+       }
+     expandPE = saved;
+     handler.processingInstruction(name, dataBufferToString());
+   }
+   
+   static final char[] endDelimCDATA = { ']', ']', '>' };
+ 
+   private boolean isDirtyCurrentElement;
+ 
+   /**
+    * Parse a CDATA section.
+    * <pre>
+    * [18] CDSect ::= CDStart CData CDEnd
+    * [19] CDStart ::= '&lt;![CDATA['
+    * [20] CData ::= (Char* - (Char* ']]&gt;' Char*))
+    * [21] CDEnd ::= ']]&gt;'
+    * </pre>
+    * <p> (The '&lt;![CDATA[' has already been read.)
+    */
+   private void parseCDSect()
+     throws Exception
+   {
+     parseUntil(endDelimCDATA);
+     dataBufferFlush();
+   }
+ 
+   /**
+    * Parse the prolog of an XML document.
+    * <pre>
+    * [22] prolog ::= XMLDecl? Misc* (Doctypedecl Misc*)?
+    * </pre>
+    * <p>We do not look for the XML declaration here, because it was
+    * handled by pushURL ().
+    * @see pushURL
+    * @return true if a DTD was read.
+    */
+   private boolean parseProlog()
+     throws Exception
+   {
+     parseMisc();
+ 
+     if (tryRead("<!DOCTYPE"))
+       {
+         parseDoctypedecl();
+         parseMisc();
+         return true;
+       }
+     return false;
+   }
+ 
+   private void checkLegalVersion(String version)
+     throws SAXException
+   {
+     int len = version.length();
+     for (int i = 0; i < len; i++)
+       {
+         char c = version.charAt(i);
+         if ('0' <= c && c <= '9')
+           {
+             continue;
+           }
+         if (c == '_' || c == '.' || c == ':' || c == '-')
+           {
+             continue;
+           }
+         if ('a' <= c && c <= 'z')
+           {
+             continue;
+           }
+         if ('A' <= c && c <= 'Z')
+           {
+             continue;
+           }
+         error ("illegal character in version", version, "1.0");
+       }
+   }
+ 
+   /**
+    * Parse the XML declaration.
+    * <pre>
+    * [23] XMLDecl ::= '&lt;?xml' VersionInfo EncodingDecl? SDDecl? S? '?&gt;'
+    * [24] VersionInfo ::= S 'version' Eq
+    *    ("'" VersionNum "'" | '"' VersionNum '"' )
+    * [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')*
+    * [32] SDDecl ::= S 'standalone' Eq
+    *    ( "'"" ('yes' | 'no') "'"" | '"' ("yes" | "no") '"' )
+    * [80] EncodingDecl ::= S 'encoding' Eq
+    *    ( "'" EncName "'" | "'" EncName "'" )
+    * [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
+    * </pre>
+    * <p> (The <code>&lt;?xml</code> and whitespace have already been read.)
+    * @return the encoding in the declaration, uppercased; or null
+    * @see #parseTextDecl
+    * @see #setupDecoding
+    */
+   private String parseXMLDecl(boolean ignoreEncoding)
+     throws SAXException, IOException
+   {
+     String version;
+     String encodingName = null;
+     String standalone = null;
+     int flags = LIT_DISABLE_CREF | LIT_DISABLE_PE | LIT_DISABLE_EREF;
+     String inputEncoding = null;
+         
+     switch (this.encoding)
+       {
+       case ENCODING_EXTERNAL:
+       case ENCODING_UTF_8:
+         inputEncoding = "UTF-8";
+         break;
+       case ENCODING_ISO_8859_1:
+         inputEncoding = "ISO-8859-1";
+         break;
+       case ENCODING_UCS_2_12:
+         inputEncoding = "UTF-16BE";
+         break;
+       case ENCODING_UCS_2_21:
+         inputEncoding = "UTF-16LE";
+         break;
+       }
+     
+     // Read the version.
+     require("version");
+     parseEq();
+     checkLegalVersion(version = readLiteral(flags));
+     if (!version.equals("1.0"))
+       {
+         if (version.equals("1.1"))
+           {
+             handler.warn("expected XML version 1.0, not: " + version);
+             xmlVersion = XML_11;
+           }
+         else
+           {
+             error("illegal XML version", version, "1.0 or 1.1");
+           }
+       }
+     else
+       {
+         xmlVersion = XML_10;
+       }
+     // Try reading an encoding declaration.
+     boolean white = tryWhitespace();
+     
+     if (tryRead("encoding"))
+       {
+         if (!white)
+           {
+             error("whitespace required before 'encoding='");
+           }
+         parseEq();
+         encodingName = readLiteral(flags);
+         if (!ignoreEncoding)
+           {
+             setupDecoding(encodingName);
+           }
+       }
+     
+     // Try reading a standalone declaration
+     if (encodingName != null)
+       {
+         white = tryWhitespace();
+       }
+     if (tryRead("standalone"))
+       {
+         if (!white)
+           {
+             error("whitespace required before 'standalone='");
+           }
+         parseEq();
+         standalone = readLiteral(flags);
+         if ("yes".equals(standalone))
+           {
+             docIsStandalone = true;
+           }
+         else if (!"no".equals(standalone))
+           {
+             error("standalone flag must be 'yes' or 'no'");
+           }
+       }
+ 
+     skipWhitespace();
+     require("?>");
+ 
+     if (inputEncoding == null)
+       {
+         inputEncoding = encodingName;
+       }
+     handler.xmlDecl(version, encodingName, docIsStandalone,
+                     inputEncoding);
+     
+     return encodingName;
+   }
+ 
+   /**
+    * Parse a text declaration.
+    * <pre>
+    * [79] TextDecl ::= '&lt;?xml' VersionInfo? EncodingDecl S? '?&gt;'
+    * [80] EncodingDecl ::= S 'encoding' Eq
+    *    ( '"' EncName '"' | "'" EncName "'" )
+    * [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
+    * </pre>
+    * <p> (The <code>&lt;?xml</code>' and whitespace have already been read.)
+    * @return the encoding in the declaration, uppercased; or null
+    * @see #parseXMLDecl
+    * @see #setupDecoding
+    */
+   private String parseTextDecl(boolean ignoreEncoding)
+     throws SAXException, IOException
+   {
+     String encodingName = null;
+     int flags = LIT_DISABLE_CREF | LIT_DISABLE_PE | LIT_DISABLE_EREF;
+ 
+     // Read an optional version.
+     if (tryRead ("version"))
+       {
+         String version;
+         parseEq();
+         checkLegalVersion(version = readLiteral(flags));
+         
+         if (version.equals("1.1"))
+           {
+             if (xmlVersion == XML_10)
+               {
+                 error("external subset has later version number.", "1.0",
+                       version);    
+               }
+             handler.warn("expected XML version 1.0, not: " + version);
+             xmlVersion = XML_11;
+           }
+         else if (!version.equals("1.0"))
+           {
+             error("illegal XML version", version, "1.0 or 1.1");
+           }
+         requireWhitespace();
+       }
+     
+     // Read the encoding.
+     require("encoding");
+     parseEq();
+     encodingName = readLiteral(flags);
+     if (!ignoreEncoding)
+       {
+         setupDecoding(encodingName);
+       }
+     skipWhitespace();
+     require("?>");
+     
+     return encodingName;
+   }
+ 
+   /**
+    * Sets up internal state so that we can decode an entity using the
+    * specified encoding.  This is used when we start to read an entity
+    * and we have been given knowledge of its encoding before we start to
+    * read any data (e.g. from a SAX input source or from a MIME type).
+    *
+    * <p> It is also used after autodetection, at which point only very
+    * limited adjustments to the encoding may be used (switching between
+    * related builtin decoders).
+    *
+    * @param encodingName The name of the encoding specified by the user.
+    * @exception IOException if the encoding isn't supported either
+    *  internally to this parser, or by the hosting JVM.
+    * @see #parseXMLDecl
+    * @see #parseTextDecl
+      */
+   private void setupDecoding(String encodingName)
+     throws SAXException, IOException
+   {
+     encodingName = encodingName.toUpperCase();
+     
+     // ENCODING_EXTERNAL indicates an encoding that wasn't
+     // autodetected ... we can use builtin decoders, or
+     // ones from the JVM (InputStreamReader).
+     
+     // Otherwise we can only tweak what was autodetected, and
+     // only for single byte (ASCII derived) builtin encodings.
+     
+     // ASCII-derived encodings
+     if (encoding == ENCODING_UTF_8 || encoding == ENCODING_EXTERNAL)
+       {
+         if (encodingName.equals("ISO-8859-1")
+             || encodingName.equals("8859_1")
+             || encodingName.equals("ISO8859_1"))
+           {
+             encoding = ENCODING_ISO_8859_1;
+             return;
+           }
+         else if (encodingName.equals("US-ASCII")
+                  || encodingName.equals("ASCII"))
+           {
+             encoding = ENCODING_ASCII;
+             return;
+           }
+         else if (encodingName.equals("UTF-8")
+                  || encodingName.equals("UTF8"))
+           {
+             encoding = ENCODING_UTF_8;
+             return;
+           }
+         else if (encoding != ENCODING_EXTERNAL)
+           {
+             // used to start with a new reader ...
+             throw new UnsupportedEncodingException(encodingName);
+           }
+         // else fallthrough ...
+         // it's ASCII-ish and something other than a builtin
+       }
+     
+     // Unicode and such
+     if (encoding == ENCODING_UCS_2_12 || encoding == ENCODING_UCS_2_21)
+       {
+         if (!(encodingName.equals("ISO-10646-UCS-2")
+               || encodingName.equals("UTF-16")
+               || encodingName.equals("UTF-16BE")
+               || encodingName.equals("UTF-16LE")))
+           {
+             error("unsupported Unicode encoding", encodingName, "UTF-16");
+           }
+         return;
+       }
+     
+     // four byte encodings
+     if (encoding == ENCODING_UCS_4_1234
+         || encoding == ENCODING_UCS_4_4321
+         || encoding == ENCODING_UCS_4_2143
+         || encoding == ENCODING_UCS_4_3412)
+       {
+         // Strictly:  "UCS-4" == "UTF-32BE"; also, "UTF-32LE" exists
+         if (!encodingName.equals("ISO-10646-UCS-4"))
+           {
+             error("unsupported 32-bit encoding", encodingName,
+                   "ISO-10646-UCS-4");
+           }
+         return;
+       }
+     
+     // assert encoding == ENCODING_EXTERNAL
+     // if (encoding != ENCODING_EXTERNAL)
+     //     throw new RuntimeException ("encoding = " + encoding);
+     
+     if (encodingName.equals("UTF-16BE"))
+       {
+         encoding = ENCODING_UCS_2_12;
+         return;
+       }
+     if (encodingName.equals("UTF-16LE"))
+       {
+         encoding = ENCODING_UCS_2_21;
+         return;
+       }
+     
+     // We couldn't use the builtin decoders at all.  But we can try to
+     // create a reader, since we haven't messed up buffering.  Tweak
+     // the encoding name if necessary.
+     
+     if (encodingName.equals("UTF-16")
+         || encodingName.equals("ISO-10646-UCS-2"))
+       {
+         encodingName = "Unicode";
+       }
+     // Ignoring all the EBCDIC aliases here
+     
+     reader = new InputStreamReader(is, encodingName);
+     sourceType = INPUT_READER;
+   }
+   
+   /**
+    * Parse miscellaneous markup outside the document element and DOCTYPE
+    * declaration.
+    * <pre>
+    * [27] Misc ::= Comment | PI | S
+    * </pre>
+    */
+   private void parseMisc()
+     throws Exception
+   {
+     while (true)
+       {
+         skipWhitespace();
+         if (tryRead(startDelimPI))
+           {
+             parsePI();
+           }
+         else if (tryRead(startDelimComment))
+           {
+             parseComment();
+           }
+         else
+           {
+             return;
+           }
+       }
+   }
+ 
+   /**
+    * Parse a document type declaration.
+    * <pre>
+    * [28] doctypedecl ::= '&lt;!DOCTYPE' S Name (S ExternalID)? S?
+    *    ('[' (markupdecl | PEReference | S)* ']' S?)? '&gt;'
+    * </pre>
+    * <p> (The <code>&lt;!DOCTYPE</code> has already been read.)
+    */
+   private void parseDoctypedecl()
+     throws Exception
+   {
+     String rootName;
+     ExternalIdentifiers ids;
+ 
+     // Read the document type name.
+     requireWhitespace();
+     rootName = readNmtoken(true);
+ 
+     // Read the External subset's IDs
+     skipWhitespace();
+     ids = readExternalIds(false, true);
+ 
+     // report (a) declaration of name, (b) lexical info (ids)
+     handler.doctypeDecl(rootName, ids.publicId, ids.systemId);
+     
+     // Internal subset is parsed first, if present
+     skipWhitespace();
+     if (tryRead('['))
+       {
+         
+         // loop until the subset ends
+         while (true)
+           {
+             doReport = expandPE = true;
+             skipWhitespace();
+             doReport = expandPE = false;
+             if (tryRead(']'))
+               {
+                 break;     // end of subset
+               }
+             else
+               {
+                 // WFC, PEs in internal subset (only between decls)
+                 peIsError = expandPE = true;
+                 parseMarkupdecl();
+                 peIsError = expandPE = false;
+               }
+           }
+       }
+     skipWhitespace();
+     require('>');
+     
+     // Read the external subset, if any
+     InputSource subset;
+     
+     if (ids.systemId == null)
+       {
+         subset = handler.getExternalSubset(rootName,
+                                            handler.getSystemId());
+       }
+     else
+       {
+         subset = null;
+       }
+     if (ids.systemId != null || subset != null)
+       {
+         pushString(null, ">");
+       
+         // NOTE:  [dtd] is so we say what SAX2 expects,
+         // though it's misleading (subset, not entire dtd)
+         if (ids.systemId != null)
+           {
+             pushURL(true, "[dtd]", ids, null, null, null, true);
+           }
+         else
+           {
+             handler.warn("modifying document by adding external subset");
+             pushURL(true, "[dtd]",
+                     new ExternalIdentifiers(subset.getPublicId(),
+                                             subset.getSystemId(),
+                                             null),
+                     subset.getCharacterStream(),
+                     subset.getByteStream(),
+                     subset.getEncoding(),
+                     false);
+           }
+         
+         // Loop until we end up back at '>'
+         while (true)
+           {
+             doReport = expandPE = true;
+             skipWhitespace();
+             doReport = expandPE = false;
+             if (tryRead('>'))
+               {
+                 break;
+               }
+             else
+               {
+                 expandPE = true;
+                 parseMarkupdecl();
+                 expandPE = false;
+               }
+           }
+         
+         // the ">" string isn't popped yet
+         if (inputStack.size() != 1)
+           {
+             error("external subset has unmatched '>'");
+           }
+       }
+     
+     // done dtd
+     handler.endDoctype();
+     expandPE = false;
+     doReport = true;
+   }
+   
+   /**
+    * Parse a markup declaration in the internal or external DTD subset.
+    * <pre>
+    * [29] markupdecl ::= elementdecl | Attlistdecl | EntityDecl
+    *    | NotationDecl | PI | Comment
+    * [30] extSubsetDecl ::= (markupdecl | conditionalSect
+    *    | PEReference | S) *
+    * </pre>
+    * <p> Reading toplevel PE references is handled as a lexical issue
+    * by the caller, as is whitespace.
+    */
+   private void parseMarkupdecl()
+     throws Exception
+   {
+     char[] saved = null;
+     boolean savedPE = expandPE;
+ 
+     // prevent "<%foo;" and ensures saved entity is right
+     require('<');
+     unread('<');
+     expandPE = false;
+     
+     if (tryRead("<!ELEMENT"))
+       {
+         saved = readBuffer;
+         expandPE = savedPE;
+         parseElementDecl();
+       }
+     else if (tryRead("<!ATTLIST"))
+       {
+         saved = readBuffer;
+         expandPE = savedPE;
+         parseAttlistDecl();
+       }
+     else if (tryRead("<!ENTITY"))
+       {
+         saved = readBuffer;
+         expandPE = savedPE;
+         parseEntityDecl();
+       }
+     else if (tryRead("<!NOTATION"))
+       {
+         saved = readBuffer;
+         expandPE = savedPE;
+         parseNotationDecl();
+       }
+     else if (tryRead(startDelimPI))
+       {
+         saved = readBuffer;
+         expandPE = savedPE;
+         parsePI();
+       }
+     else if (tryRead(startDelimComment))
+       {
+         saved = readBuffer;
+         expandPE = savedPE;
+         parseComment();
+       }
+     else if (tryRead("<!["))
+       {
+         saved = readBuffer;
+         expandPE = savedPE;
+         if (inputStack.size() > 0)
+           {
+             parseConditionalSect(saved);
+           }
+         else
+           {
+             error("conditional sections illegal in internal subset");
+           }
+       }
+     else
+       {
+         error("expected markup declaration");
+       }
+ 
+     // VC: Proper Decl/PE Nesting
+     if (readBuffer != saved)
+       {
+         handler.verror("Illegal Declaration/PE nesting");
+       }
+   }
+   
+   /**
+    * Parse an element, with its tags.
+    * <pre>
+    * [39] element ::= EmptyElementTag | STag content ETag
+    * [40] STag ::= '&lt;' Name (S Attribute)* S? '&gt;'
+    * [44] EmptyElementTag ::= '&lt;' Name (S Attribute)* S? '/&gt;'
+    * </pre>
+    * <p> (The '&lt;' has already been read.)
+    * <p>NOTE: this method actually chains onto parseContent (), if necessary,
+    * and parseContent () will take care of calling parseETag ().
+    */
+   private void parseElement(boolean maybeGetSubset)
+     throws Exception
+   {
+     String gi;
+     char c;
+     int oldElementContent = currentElementContent;
+     String oldElement = currentElement;
+     ElementDecl element;
+ 
+     // This is the (global) counter for the
+     // array of specified attributes.
+     tagAttributePos = 0;
+     
+     // Read the element type name.
+     gi = readNmtoken(true);
+     
+     // If we saw no DTD, and this is the document root element,
+     // let the application modify the input stream by providing one.
+     if (maybeGetSubset)
+       {
+         InputSource subset = handler.getExternalSubset(gi,
+                                                        handler.getSystemId());
+         if (subset != null)
+           {
+             String publicId = subset.getPublicId();
+             String systemId = subset.getSystemId();
+             
+             handler.warn("modifying document by adding DTD");
+             handler.doctypeDecl(gi, publicId, systemId);
+             pushString(null, ">");
+             
+             // NOTE:  [dtd] is so we say what SAX2 expects,
+             // though it's misleading (subset, not entire dtd)
+             pushURL(true, "[dtd]",
+                     new ExternalIdentifiers(publicId, systemId, null),
+                     subset.getCharacterStream(),
+                     subset.getByteStream(),
+                     subset.getEncoding(),
+                     false);
+             
+             // Loop until we end up back at '>'
+             while (true)
+               {
+                 doReport = expandPE = true;
+                 skipWhitespace();
+                 doReport = expandPE = false;
+                 if (tryRead('>'))
+                   {
+                     break;
+                   }
+                 else
+                   {
+                     expandPE = true;
+                     parseMarkupdecl();
+                     expandPE = false;
+                   }
+               }
+             
+             // the ">" string isn't popped yet
+             if (inputStack.size() != 1)
+               {
+                 error("external subset has unmatched '>'");
+               }
+             
+             handler.endDoctype();
+           }
+       }
+     
+     // Determine the current content type.
+     currentElement = gi;
+     element = (ElementDecl) elementInfo.get(gi);
+     currentElementContent = getContentType(element, CONTENT_ANY);
+ 
+     // Read the attributes, if any.
+     // After this loop, "c" is the closing delimiter.
+     boolean white = tryWhitespace();
+     c = readCh();
+     while (c != '/' && c != '>')
+       {
+         unread(c);
+         if (!white)
+           {
+             error("need whitespace between attributes");
+           }
+         parseAttribute(gi);
+         white = tryWhitespace();
+         c = readCh();
+       }
+     
+     // Supply any defaulted attributes.
+     Iterator atts = declaredAttributes(element);
+     if (atts != null)
+       {
+         String aname;
+ loop:
+         while (atts.hasNext())
+           {
+             aname = (String) atts.next();
+             // See if it was specified.
+             for (int i = 0; i < tagAttributePos; i++)
+               {
+                 if (tagAttributes[i] == aname)
+                   {
+                     continue loop;
+                   }
+               }
+             // ... or has a default
+             String value = getAttributeDefaultValue(gi, aname);
+             
+             if (value == null)
+               {
+                 continue;
+               }
+             handler.attribute(aname, value, false);
+           }
+       }
+ 
+     // Figure out if this is a start tag
+     // or an empty element, and dispatch an
+     // event accordingly.
+     switch (c)
+       {
+       case '>':
+         handler.startElement(gi);
+         parseContent();
+         break;
+       case '/':
+         require('>');
+         handler.startElement(gi);
+         handler.endElement(gi);
+         break;
+       }
+ 
+     // Restore the previous state.
+     currentElement = oldElement;
+     currentElementContent = oldElementContent;
+   }
+     
+   /**
+    * Parse an attribute assignment.
+    * <pre>
+    * [41] Attribute ::= Name Eq AttValue
+    * </pre>
+    * @param name The name of the attribute's element.
+    * @see SAXDriver#attribute
+    */
+   private void parseAttribute(String name)
+     throws Exception
+   {
+     String aname;
+     String type;
+     String value;
+     int flags = LIT_ATTRIBUTE |  LIT_ENTITY_REF;
+     
+     // Read the attribute name.
+     aname = readNmtoken(true);
+     type = getAttributeType(name, aname);
+     
+     // Parse '='
+     parseEq();
+ 
+     // Read the value, normalizing whitespace
+     // unless it is CDATA.
+     if (handler.stringInterning)
+       {
+         if (type == "CDATA" || type == null)
+           {
+             value = readLiteral(flags);
+           }
+         else
+           {
+             value = readLiteral(flags | LIT_NORMALIZE);
+           }
+       }
+     else
+       {
+         if (type == null || type.equals("CDATA"))
+           {
+             value = readLiteral(flags);
+           }
+         else
+           {
+             value = readLiteral(flags | LIT_NORMALIZE);
+           }
+       }
+ 
+     // WFC: no duplicate attributes
+     for (int i = 0; i < tagAttributePos; i++)
+       {
+         if (aname.equals(tagAttributes [i]))
+           {
+             error("duplicate attribute", aname, null);
+           }
+       }
+ 
+     // Inform the handler about the
+     // attribute.
+     handler.attribute(aname, value, true);
+     dataBufferPos = 0;
+     
+     // Note that the attribute has been
+     // specified.
+     if (tagAttributePos == tagAttributes.length)
+       {
+         String newAttrib[] = new String[tagAttributes.length * 2];
+         System.arraycopy(tagAttributes, 0, newAttrib, 0, tagAttributePos);
+         tagAttributes = newAttrib;
+       }
+     tagAttributes[tagAttributePos++] = aname;
+   }
+ 
+   /**
+    * Parse an equals sign surrounded by optional whitespace.
+    * <pre>
+    * [25] Eq ::= S? '=' S?
+    * </pre>
+    */
+   private void parseEq()
+     throws SAXException, IOException
+   {
+     skipWhitespace();
+     require('=');
+     skipWhitespace();
+   }
+ 
+   /**
+    * Parse an end tag.
+    * <pre>
+    * [42] ETag ::= '</' Name S? '>'
+    * </pre>
+    * <p>NOTE: parseContent () chains to here, we already read the
+    * "&lt;/".
+    */
+   private void parseETag()
+     throws Exception
+   {
+     require(currentElement);
+     skipWhitespace();
+     require('>');
+     handler.endElement(currentElement);
+     // not re-reporting any SAXException re bogus end tags,
+     // even though that diagnostic might be clearer ...
+   }
+   
+   /**
+    * Parse the content of an element.
+    * <pre>
+    * [43] content ::= (element | CharData | Reference
+    *    | CDSect | PI | Comment)*
+    * [67] Reference ::= EntityRef | CharRef
+    * </pre>
+    * <p> NOTE: consumes ETtag.
+    */
+   private void parseContent()
+     throws Exception
+   {
+     char c;
+     
+     while (true)
+       {
+         // consume characters (or ignorable whitspace) until delimiter
+         parseCharData();
+ 
+         // Handle delimiters
+         c = readCh();
+         switch (c)
+           {
+           case '&':       // Found "&"
+             c = readCh();
+             if (c == '#')
+               {
+                 parseCharRef();
+               }
+             else
+               {
+                 unread(c);
+                 parseEntityRef(true);
+               }
+             isDirtyCurrentElement = true;
+             break;
+             
+           case '<':       // Found "<"
+             dataBufferFlush();
+             c = readCh();
+             switch (c)
+               {
+               case '!':       // Found "<!"
+                 c = readCh();
+                 switch (c)
+                   {
+                   case '-':     // Found "<!-"
+                     require('-');
+                     isDirtyCurrentElement = false;
+                     parseComment();
+                     break;
+                   case '[':     // Found "<!["
+                     isDirtyCurrentElement = false;
+                     require("CDATA[");
+                     handler.startCDATA();
+                     inCDATA = true;
+                     parseCDSect();
+                     inCDATA = false;
+                     handler.endCDATA();
+                     break;
+                   default:
+                     error("expected comment or CDATA section", c, null);
+                     break;
+                   }
+                 break;
+               
+               case '?':     // Found "<?"
+                 isDirtyCurrentElement = false;
+                 parsePI();
+                 break;
+                 
+               case '/':     // Found "</"
+                 isDirtyCurrentElement = false;
+                 parseETag();
+                 return;
+                 
+               default:     // Found "<" followed by something else
+                 isDirtyCurrentElement = false;
+                 unread(c);
+                 parseElement(false);
+                 break;
+               }
+           }
+       }
+   }
+   
+   /**
+    * Parse an element type declaration.
+    * <pre>
+    * [45] elementdecl ::= '&lt;!ELEMENT' S Name S contentspec S? '&gt;'
+    * </pre>
+    * <p> NOTE: the '&lt;!ELEMENT' has already been read.
+    */
+   private void parseElementDecl()
+     throws Exception
+   {
+     String name;
+     
+     requireWhitespace();
+     // Read the element type name.
+     name = readNmtoken(true);
+ 
+     requireWhitespace();
+     // Read the content model.
+     parseContentspec(name);
+     
+     skipWhitespace();
+     require('>');
+   }
+ 
+   /**
+    * Content specification.
+    * <pre>
+    * [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | elements
+    * </pre>
+    */
+   private void parseContentspec(String name)
+     throws Exception
+   {
+     // FIXME: move elementDecl() into setElement(), pass EMTPY/ANY ...
+     if (tryRead("EMPTY"))
+       {
+         setElement(name, CONTENT_EMPTY, null, null);
+         if (!skippedPE)
+           {
+             handler.getDeclHandler().elementDecl(name, "EMPTY");
+           }
+         return;
+       }
+     else if (tryRead("ANY"))
+       {
+         setElement(name, CONTENT_ANY, null, null);
+         if (!skippedPE)
+           {
+             handler.getDeclHandler().elementDecl(name, "ANY");
+           }
+         return;
+       }
+     else
+       {
+         String model;
+         char[] saved; 
+         
+         require('(');
+         saved = readBuffer;
+         dataBufferAppend('(');
+         skipWhitespace();
+         if (tryRead("#PCDATA"))
+           {
+             dataBufferAppend("#PCDATA");
+             parseMixed(saved);
+             model = dataBufferToString();
+             setElement(name, CONTENT_MIXED, model, null);
+           }
+         else
+           {
+             parseElements(saved);
+             model = dataBufferToString();
+             setElement(name, CONTENT_ELEMENTS, model, null);
+           }
+         if (!skippedPE)
+           {
+             handler.getDeclHandler().elementDecl(name, model);
+           }
+       }
+   }
+   
+   /**
+    * Parse an element-content model.
+    * <pre>
+    * [47] elements ::= (choice | seq) ('?' | '*' | '+')?
+    * [49] choice ::= '(' S? cp (S? '|' S? cp)+ S? ')'
+    * [50] seq ::= '(' S? cp (S? ',' S? cp)* S? ')'
+    * </pre>
+    *
+    * <p> NOTE: the opening '(' and S have already been read.
+    *
+    * @param saved Buffer for entity that should have the terminal ')'
+    */
+   private void parseElements(char[] saved)
+     throws Exception
+   {
+     char c;
+     char sep;
+     
+     // Parse the first content particle
+     skipWhitespace();
+     parseCp();
+     
+     // Check for end or for a separator.
+     skipWhitespace();
+     c = readCh();
+     switch (c)
+       {
+       case ')':
+         // VC: Proper Group/PE Nesting
+         if (readBuffer != saved)
+           {
+             handler.verror("Illegal Group/PE nesting");
+           }
+         
+         dataBufferAppend(')');
+         c = readCh();
+         switch (c)
+           {
+           case '*':
+           case '+':
+           case '?':
+             dataBufferAppend(c);
+             break;
+           default:
+             unread(c);
+           }
+         return;
+       case ',':       // Register the separator.
+       case '|':
+         sep = c;
+         dataBufferAppend(c);
+         break;
+       default:
+         error("bad separator in content model", c, null);
+         return;
+       }
+     
+     // Parse the rest of the content model.
+     while (true)
+       {
+         skipWhitespace();
+         parseCp();
+         skipWhitespace();
+         c = readCh();
+         if (c == ')')
+           {
+             // VC: Proper Group/PE Nesting
+             if (readBuffer != saved)
+               {
+                 handler.verror("Illegal Group/PE nesting");
+               }
+             
+             dataBufferAppend(')');
+             break;
+           }
+         else if (c != sep)
+           {
+             error("bad separator in content model", c, null);
+             return;
+           }
+         else
+           {
+             dataBufferAppend(c);
+           }
+       }
+     
+     // Check for the occurrence indicator.
+     c = readCh();
+     switch (c)
+       {
+       case '?':
+       case '*':
+       case '+':
+         dataBufferAppend(c);
+         return;
+       default:
+         unread(c);
+         return;
+       }
+   }
+    
+   /**
+    * Parse a content particle.
+    * <pre>
+    * [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?
+    * </pre>
+    */
+   private void parseCp()
+     throws Exception
+   {
+     if (tryRead('('))
+       {
+         dataBufferAppend('(');
+         parseElements(readBuffer);
+       }
+     else
+       {
+         dataBufferAppend(readNmtoken(true));
+         char c = readCh();
+         switch (c)
+           {
+           case '?':
+           case '*':
+           case '+':
+             dataBufferAppend(c);
+             break;
+           default:
+             unread(c);
+             break;
+           }
+       }
+   }
+ 
+   /**
+    * Parse mixed content.
+    * <pre>
+    * [51] Mixed ::= '(' S? ( '#PCDATA' (S? '|' S? Name)*) S? ')*'
+    *        | '(' S? ('#PCDATA') S? ')'
+    * </pre>
+    *
+    * @param saved Buffer for entity that should have the terminal ')'
+    */
+   private void parseMixed(char[] saved)
+     throws Exception
+   {
+     // Check for PCDATA alone.
+     skipWhitespace();
+     if (tryRead(')'))
+       {
+         // VC: Proper Group/PE Nesting
+         if (readBuffer != saved)
+           {
+             handler.verror("Illegal Group/PE nesting");
+           }
+         
+         dataBufferAppend(")*");
+         tryRead('*');
+         return;
+       }
+     
+     // Parse mixed content.
+     skipWhitespace();
+     while (!tryRead(")"))
+       {
+         require('|');
+         dataBufferAppend('|');
+         skipWhitespace();
+         dataBufferAppend(readNmtoken(true));
+         skipWhitespace();
+       }
+     
+     // VC: Proper Group/PE Nesting
+     if (readBuffer != saved)
+       {
+         handler.verror("Illegal Group/PE nesting");
+       }
+     
+     require('*');
+     dataBufferAppend(")*");
+   }
+   
+   /**
+    * Parse an attribute list declaration.
+    * <pre>
+    * [52] AttlistDecl ::= '&lt;!ATTLIST' S Name AttDef* S? '&gt;'
+    * </pre>
+    * <p>NOTE: the '&lt;!ATTLIST' has already been read.
+    */
+   private void parseAttlistDecl()
+     throws Exception
+   {
+     String elementName;
+     
+     requireWhitespace();
+     elementName = readNmtoken(true);
+     boolean white = tryWhitespace();
+     while (!tryRead('>'))
+       {
+         if (!white)
+           {
+             error("whitespace required before attribute definition");
+           }
+         parseAttDef(elementName);
+         white = tryWhitespace();
+       }
+   }
+   
+   /**
+    * Parse a single attribute definition.
+    * <pre>
+    * [53] AttDef ::= S Name S AttType S DefaultDecl
+    * </pre>
+    */
+   private void parseAttDef(String elementName)
+     throws Exception
+   {
+     String name;
+     String type;
+     String enumer = null;
+     
+     // Read the attribute name.
+     name = readNmtoken(true);
+ 
+     // Read the attribute type.
+     requireWhitespace();
+     type = readAttType();
+ 
+     // Get the string of enumerated values if necessary.
+     if (handler.stringInterning)
+       {
+         if ("ENUMERATION" == type || "NOTATION" == type)
+           {
+             enumer = dataBufferToString();
+           }
+       }
+     else
+       {
+         if ("ENUMERATION".equals(type) || "NOTATION".equals(type))
+           {
+             enumer = dataBufferToString();
+           }
+       }
+     
+     // Read the default value.
+     requireWhitespace();
+     parseDefault(elementName, name, type, enumer);
+   }
+ 
+   /**
+    * Parse the attribute type.
+    * <pre>
+    * [54] AttType ::= StringType | TokenizedType | EnumeratedType
+    * [55] StringType ::= 'CDATA'
+    * [56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY'
+    *    | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'
+    * [57] EnumeratedType ::= NotationType | Enumeration
+    * </pre>
+    */
+   private String readAttType()
+     throws Exception
+   {
+     if (tryRead('('))
+       {
+         parseEnumeration(false);
+         return "ENUMERATION";
+       }
+     else
+       {
+         String typeString = readNmtoken(true);
+         if (handler.stringInterning)
+           {
+             if ("NOTATION" == typeString)
+               {
+                 parseNotationType();
+                 return typeString;
+               }
+             else if ("CDATA" == typeString
+                      || "ID" == typeString
+                      || "IDREF" == typeString
+                      || "IDREFS" == typeString
+                      || "ENTITY" == typeString
+                      || "ENTITIES" == typeString
+                      || "NMTOKEN" == typeString
+                      || "NMTOKENS" == typeString)
+               {
+                 return typeString;
+               }
+           }
+         else
+           {
+             if ("NOTATION".equals(typeString))
+               {
+                 parseNotationType();
+                 return typeString;
+               }
+             else if ("CDATA".equals(typeString)
+                      || "ID".equals(typeString)
+                      || "IDREF".equals(typeString)
+                      || "IDREFS".equals(typeString)
+                      || "ENTITY".equals(typeString)
+                      || "ENTITIES".equals(typeString)
+                      || "NMTOKEN".equals(typeString)
+                      || "NMTOKENS".equals(typeString))
+               {
+                 return typeString;
+               }
+           }
+         error("illegal attribute type", typeString, null);
+         return null;
+       }
+   }
+   
+   /**
+    * Parse an enumeration.
+    * <pre>
+    * [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
+    * </pre>
+    * <p>NOTE: the '(' has already been read.
+    */
+   private void parseEnumeration(boolean isNames)
+     throws Exception
+   {
+     dataBufferAppend('(');
+ 
+     // Read the first token.
+     skipWhitespace();
+     dataBufferAppend(readNmtoken(isNames));
+     // Read the remaining tokens.
+     skipWhitespace();
+     while (!tryRead(')'))
+       {
+         require('|');
+         dataBufferAppend('|');
+         skipWhitespace();
+         dataBufferAppend(readNmtoken (isNames));
+         skipWhitespace();
+       }
+     dataBufferAppend(')');
+   }
+ 
+   /**
+    * Parse a notation type for an attribute.
+    * <pre>
+    * [58] NotationType ::= 'NOTATION' S '(' S? NameNtoks
+    *    (S? '|' S? name)* S? ')'
+    * </pre>
+    * <p>NOTE: the 'NOTATION' has already been read
+    */
+   private void parseNotationType()
+     throws Exception
+   {
+     requireWhitespace();
+     require('(');
+     
+     parseEnumeration(true);
+   }
+ 
+   /**
+    * Parse the default value for an attribute.
+    * <pre>
+    * [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED'
+    *    | (('#FIXED' S)? AttValue)
+    * </pre>
+    */
+   private void parseDefault(String elementName, String name,
+                             String type, String enumer)
+     throws Exception
+   {
+     int valueType = ATTRIBUTE_DEFAULT_SPECIFIED;
+     String value = null;
+     int flags = LIT_ATTRIBUTE;
+     boolean saved = expandPE;
+     String defaultType = null;
+     
+     // LIT_ATTRIBUTE forces '<' checks now (ASAP) and turns whitespace
+     // chars to spaces (doesn't matter when that's done if it doesn't
+     // interfere with char refs expanding to whitespace).
+     
+     if (!skippedPE)
+       {
+         flags |= LIT_ENTITY_REF;
+         if (handler.stringInterning)
+           {
+             if ("CDATA" != type)
+               {
+                 flags |= LIT_NORMALIZE;
+               }
+           }
+         else
+           {
+             if (!"CDATA".equals(type))
+               {
+                 flags |= LIT_NORMALIZE;
+               }
+           }
+       }
+     
+     expandPE = false;
+     if (tryRead('#'))
+       {
+         if (tryRead("FIXED"))
+           {
+             defaultType = "#FIXED";
+             valueType = ATTRIBUTE_DEFAULT_FIXED;
+             requireWhitespace();
+             value = readLiteral(flags);
+           }
+         else if (tryRead("REQUIRED"))
+           {
+             defaultType = "#REQUIRED";
+             valueType = ATTRIBUTE_DEFAULT_REQUIRED;
+           }
+         else if (tryRead("IMPLIED"))
+           {
+             defaultType = "#IMPLIED";
+             valueType = ATTRIBUTE_DEFAULT_IMPLIED;
+           }
+         else
+           {
+             error("illegal keyword for attribute default value");
+           }
+       }
+     else
+       {
+         value = readLiteral(flags);
+       }
+     expandPE = saved;
+     setAttribute(elementName, name, type, enumer, value, valueType);
+     if (handler.stringInterning)
+       {
+         if ("ENUMERATION" == type)
+           {
+             type = enumer;
+           }
+         else if ("NOTATION" == type)
+           {
+             type = "NOTATION " + enumer;
+           }
+       }
+     else
+       {
+         if ("ENUMERATION".equals(type))
+           {
+             type = enumer;
+           }
+         else if ("NOTATION".equals(type))
+           {
+             type = "NOTATION " + enumer;
+           }
+       }
+     if (!skippedPE)
+       {
+         handler.getDeclHandler().attributeDecl(elementName, name, type,
+                                                defaultType, value);
+       }
+   }
+   
+   /**
+    * Parse a conditional section.
+    * <pre>
+    * [61] conditionalSect ::= includeSect || ignoreSect
+    * [62] includeSect ::= '&lt;![' S? 'INCLUDE' S? '['
+    *    extSubsetDecl ']]&gt;'
+    * [63] ignoreSect ::= '&lt;![' S? 'IGNORE' S? '['
+    *    ignoreSectContents* ']]&gt;'
+    * [64] ignoreSectContents ::= Ignore
+    *    ('&lt;![' ignoreSectContents* ']]&gt;' Ignore )*
+    * [65] Ignore ::= Char* - (Char* ( '&lt;![' | ']]&gt;') Char* )
+    * </pre>
+    * <p> NOTE: the '&gt;![' has already been read.
+    */
+   private void parseConditionalSect(char[] saved)
+     throws Exception
+   {
+     skipWhitespace();
+     if (tryRead("INCLUDE"))
+       {
+         skipWhitespace();
+         require('[');
+         // VC: Proper Conditional Section/PE Nesting
+         if (readBuffer != saved)
+           {
+             handler.verror("Illegal Conditional Section/PE nesting");
+           }
+         skipWhitespace();
+         while (!tryRead("]]>"))
+           {
+             parseMarkupdecl();
+             skipWhitespace();
+           }
+       }
+     else if (tryRead("IGNORE"))
+       {
+         skipWhitespace();
+         require('[');
+         // VC: Proper Conditional Section/PE Nesting
+         if (readBuffer != saved)
+           {
+             handler.verror("Illegal Conditional Section/PE nesting");
+           }
+         int nesting = 1;
+         char c;
+         expandPE = false;
+         for (int nest = 1; nest > 0; )
+           {
+             c = readCh();
+             switch (c)
+               {
+               case '<':
+                 if (tryRead("!["))
+                   {
+                     nest++;
+                   }
+ 		break;
+               case ']':
+                 if (tryRead("]>"))
+                   {
+                     nest--;
+                   }
+               }
+           }
+         expandPE = true;
+       }
+     else
+       {
+         error("conditional section must begin with INCLUDE or IGNORE");
+       }
+   }
+   
+   private void parseCharRef()
+     throws SAXException, IOException
+   {
+     parseCharRef(true /* do flushDataBuffer by default */);
+   }
+ 
+   /**
+    * Try to read a character reference without consuming data from buffer.
+    * <pre>
+    * [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
+    * </pre>
+    * <p>NOTE: the '&#' has already been read.
+    */
+   private void tryReadCharRef()
+     throws SAXException, IOException
+   {
+     int value = 0;
+     char c;
+     
+     if (tryRead('x'))
+       {
+ loop1:
+         while (true)
+           {
+             c = readCh();
+             if (c == ';')
+               {
+                 break loop1;
+               }
+             else
+               {
+                 int n = Character.digit(c, 16);
+                 if (n == -1)
+                   {
+                     error("illegal character in character reference", c, null);
+                     break loop1;
+                   }
+                 value *= 16;
+                 value += n;
+               }
+           }
+       }
+     else
+       {
+ loop2:
+         while (true)
+           {
+             c = readCh();
+             if (c == ';')
+               {
+                 break loop2;
+               }
+             else
+               {
+                 int n = Character.digit(c, 10);
+                 if (n == -1)
+                   {
+                     error("illegal character in character reference", c, null);
+                     break loop2;
+                   }
+                 value *= 10;
+                 value += n;
+               }
+           }
+       }
+     
+     // check for character refs being legal XML
+     if ((value < 0x0020
+          && ! (value == '\n' || value == '\t' || value == '\r'))
+         || (value >= 0xD800 && value <= 0xDFFF)
+         || value == 0xFFFE || value == 0xFFFF
+         || value > 0x0010ffff)
+       {
+         error("illegal XML character reference U+"
+               + Integer.toHexString(value));
+       }
+     
+     // Check for surrogates: 00000000 0000xxxx yyyyyyyy zzzzzzzz
+     //  (1101|10xx|xxyy|yyyy + 1101|11yy|zzzz|zzzz:
+     if (value > 0x0010ffff)
+       {
+         // too big for surrogate
+         error("character reference " + value + " is too large for UTF-16",
+               new Integer(value).toString(), null);
+       }
+     
+   }
+   
+   /**
+    * Read and interpret a character reference.
+    * <pre>
+    * [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
+    * </pre>
+    * <p>NOTE: the '&#' has already been read.
+    */
+   private void parseCharRef(boolean doFlush)
+     throws SAXException, IOException
+   {
+     int value = 0;
+     char c;
+     
+     if (tryRead('x'))
+       {
+ loop1:
+         while (true)
+           {
+             c = readCh();
+             if (c == ';')
+               {
+                 break loop1;
+               }
+             else
+               {
+                 int n = Character.digit(c, 16);
+                 if (n == -1)
+                   {
+                     error("illegal character in character reference", c, null);
+                     break loop1;
+                   }
+                 value *= 16;
+                 value += n;
+               }
+           }
+       }
+     else
+       {
+ loop2:
+         while (true)
+           {
+             c = readCh();
+             if (c == ';')
+               {
+                 break loop2;
+               }
+             else
+               {
+                 int n = Character.digit(c, 10);
+                 if (n == -1)
+                   {
+                     error("illegal character in character reference", c, null);
+                     break loop2;
+                   }
+                 value *= 10;
+                 value += c - '0';
+               }
+           }
+       }
+     
+     // check for character refs being legal XML
+     if ((value < 0x0020
+          && ! (value == '\n' || value == '\t' || value == '\r'))
+         || (value >= 0xD800 && value <= 0xDFFF)
+         || value == 0xFFFE || value == 0xFFFF
+         || value > 0x0010ffff)
+       {
+         error("illegal XML character reference U+"
+               + Integer.toHexString(value));
+       }
+     
+     // Check for surrogates: 00000000 0000xxxx yyyyyyyy zzzzzzzz
+     //  (1101|10xx|xxyy|yyyy + 1101|11yy|zzzz|zzzz:
+     if (value <= 0x0000ffff)
+       {
+         // no surrogates needed
+         dataBufferAppend((char) value);
+       }
+     else if (value <= 0x0010ffff)
+       {
+         value -= 0x10000;
+         // > 16 bits, surrogate needed
+         dataBufferAppend((char) (0xd800 | (value >> 10)));
+         dataBufferAppend((char) (0xdc00 | (value & 0x0003ff)));
+       }
+     else
+       {
+         // too big for surrogate
+         error("character reference " + value + " is too large for UTF-16",
+               new Integer(value).toString(), null);
+       }
+     if (doFlush)
+       {
+         dataBufferFlush();
+       }
+   }
+   
+   /**
+    * Parse and expand an entity reference.
+    * <pre>
+    * [68] EntityRef ::= '&' Name ';'
+    * </pre>
+    * <p>NOTE: the '&amp;' has already been read.
+    * @param externalAllowed External entities are allowed here.
+    */
+   private void parseEntityRef(boolean externalAllowed)
+     throws SAXException, IOException
+   {
+     String name;
+     
+     name = readNmtoken(true);
+     require(';');
+     switch (getEntityType(name))
+       {
+       case ENTITY_UNDECLARED:
+         // NOTE:  XML REC describes amazingly convoluted handling for
+         // this case.  Nothing as meaningful as being a WFness error
+         // unless the processor might _legitimately_ not have seen a
+         // declaration ... which is what this implements.
+         String message;
+         
+         message = "reference to undeclared general entity " + name;
+         if (skippedPE && !docIsStandalone)
+           {
+             handler.verror(message);
+             // we don't know this entity, and it might be external...
+             if (externalAllowed)
+               {
+                 handler.skippedEntity(name);
+               }
+           }
+         else
+           {
+             error(message);
+           }
+         break;
+       case ENTITY_INTERNAL:
+           pushString(name, getEntityValue(name));
+           
+           //workaround for possible input pop before marking
+           //the buffer reading position  
+           char t = readCh();
+           unread(t);
+           int bufferPosMark = readBufferPos;
+           
+           int end = readBufferPos + getEntityValue(name).length();
+           for (int k = readBufferPos; k < end; k++)
+             {
+               t = readCh();
+               if (t == '&')
+                 {
+                   t = readCh();   
+                   if (t  == '#')
+                     { 
+                       //try to match a character ref
+                       tryReadCharRef();
+                 
+                       //everything has been read
+                       if (readBufferPos >= end)
+                         {
+                           break;
+                         }
+                       k = readBufferPos;
+                       continue;
+                     }
+                   else if (Character.isLetter(t))
+                     {
+                       //looks like an entity ref
+                       unread(t);
+                       readNmtoken(true);
+                       require(';');
+                       
+                       //everything has been read
+                       if (readBufferPos >= end)
+                         {
+                           break;
+                         }
+                       k = readBufferPos;
+                       continue;
+                     }
+                   error(" malformed entity reference");
+                 }
+               
+             }
+           readBufferPos = bufferPosMark;
+           break;
+       case ENTITY_TEXT:
+           if (externalAllowed)
+             {
+               pushURL(false, name, getEntityIds(name),
+                       null, null, null, true);
+             }
+           else
+             {
+               error("reference to external entity in attribute value.",
+                     name, null);
+             }
+           break;
+       case ENTITY_NDATA:
+           if (externalAllowed)
+             {
+               error("unparsed entity reference in content", name, null);
+             }
+           else
+             {
+               error("reference to external entity in attribute value.",
+                     name, null);
+             }
+           break;
+       default:
+           throw new RuntimeException();
+       }
+   }
+     
+   /**
+    * Parse and expand a parameter entity reference.
+    * <pre>
+    * [69] PEReference ::= '%' Name ';'
+    * </pre>
+    * <p>NOTE: the '%' has already been read.
+    */
+   private void parsePEReference()
+     throws SAXException, IOException
+   {
+     String name;
+     
+     name = "%" + readNmtoken(true);
+     require(';');
+     switch (getEntityType(name))
+       {
+       case ENTITY_UNDECLARED:
+         // VC: Entity Declared
+         handler.verror("reference to undeclared parameter entity " + name);
+         
+         // we should disable handling of all subsequent declarations
+         // unless this is a standalone document (info discarded)
+         break;
+       case ENTITY_INTERNAL:
+         if (inLiteral)
+           {
+             pushString(name, getEntityValue(name));
+           }
+         else
+           {
+             pushString(name, ' ' + getEntityValue(name) + ' ');
+           }
+         break;
+       case ENTITY_TEXT:
+         if (!inLiteral)
+           {
+             pushString(null, " ");
+           }
+         pushURL(true, name, getEntityIds(name), null, null, null, true);
+         if (!inLiteral)
+           {
+             pushString(null, " ");
+           }
+         break;
+       }
+   }
+   
+   /**
+    * Parse an entity declaration.
+    * <pre>
+    * [70] EntityDecl ::= GEDecl | PEDecl
+    * [71] GEDecl ::= '&lt;!ENTITY' S Name S EntityDef S? '&gt;'
+    * [72] PEDecl ::= '&lt;!ENTITY' S '%' S Name S PEDef S? '&gt;'
+    * [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)
+    * [74] PEDef ::= EntityValue | ExternalID
+    * [75] ExternalID ::= 'SYSTEM' S SystemLiteral
+    *       | 'PUBLIC' S PubidLiteral S SystemLiteral
+    * [76] NDataDecl ::= S 'NDATA' S Name
+    * </pre>
+    * <p>NOTE: the '&lt;!ENTITY' has already been read.
+    */
+   private void parseEntityDecl()
+     throws Exception
+   {
+     boolean peFlag = false;
+     int flags = 0;
+     
+     // Check for a parameter entity.
+     expandPE = false;
+     requireWhitespace();
+     if (tryRead('%'))
+       {
+         peFlag = true;
+         requireWhitespace();
+       }
+     expandPE = true;
+     
+     // Read the entity name, and prepend
+     // '%' if necessary.
+     String name = readNmtoken(true);
+     //NE08
+     if (name.indexOf(':') >= 0)
+       {
+         error("Illegal character(':') in entity name ", name, null);
+       }
+     if (peFlag)
+       {
+         name = "%" + name;
+       }
+ 
+     // Read the entity value.
+     requireWhitespace();
+     char c = readCh();
+     unread (c);
+     if (c == '"' || c == '\'')
+       {
+         // Internal entity ... replacement text has expanded refs
+         // to characters and PEs, but not to general entities
+         String value = readLiteral(flags);
+         setInternalEntity(name, value);
+       }
+     else
+       {
+         // Read the external IDs
+         ExternalIdentifiers ids = readExternalIds(false, false);
+         
+         // Check for NDATA declaration.
+         boolean white = tryWhitespace();
+         if (!peFlag && tryRead("NDATA"))
+           {
+             if (!white)
+               {
+                 error("whitespace required before NDATA");
+               }
+             requireWhitespace();
+             String notationName = readNmtoken(true);
+             if (!skippedPE)
+               {
+                 setExternalEntity(name, ENTITY_NDATA, ids, notationName);
+                 handler.unparsedEntityDecl(name, ids.publicId, ids.systemId,
+                                            ids.baseUri, notationName);
+               }
+           }
+         else if (!skippedPE)
+           {
+             setExternalEntity(name, ENTITY_TEXT, ids, null);
+             handler.getDeclHandler()
+               .externalEntityDecl(name, ids.publicId,
+                                    handler.resolveURIs()
+                                    // FIXME: ASSUMES not skipped
+                                    // "false" forces error on bad URI
+                                    ? handler.absolutize(ids.baseUri,
+                                                         ids.systemId,
+                                                         false)
+                                    : ids.systemId);
+           }
+       }
+     
+     // Finish the declaration.
+     skipWhitespace();
+     require('>');
+   }
+ 
+   /**
+    * Parse a notation declaration.
+    * <pre>
+    * [82] NotationDecl ::= '&lt;!NOTATION' S Name S
+    *    (ExternalID | PublicID) S? '&gt;'
+    * [83] PublicID ::= 'PUBLIC' S PubidLiteral
+    * </pre>
+    * <P>NOTE: the '&lt;!NOTATION' has already been read.
+    */
+   private void parseNotationDecl()
+     throws Exception
+   {
+     String nname;
+     ExternalIdentifiers ids;
+ 
+     requireWhitespace();
+     nname = readNmtoken(true);
+     //NE08
+     if (nname.indexOf(':') >= 0)
+       {
+         error("Illegal character(':') in notation name ", nname, null);
+       }
+     requireWhitespace();
+ 
+     // Read the external identifiers.
+     ids = readExternalIds(true, false);
+ 
+     // Register the notation.
+     setNotation(nname, ids);
+     
+     skipWhitespace();
+     require('>');
+   }
+   
+   /**
+    * Parse character data.
+    * <pre>
+    * [14] CharData ::= [^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)
+    * </pre>
+    */
+   private void parseCharData()
+     throws Exception
+   {
+     char c;
+     int state = 0;
+     boolean pureWhite = false;
+ 
+     // assert (dataBufferPos == 0);
+     
+     // are we expecting pure whitespace?  it might be dirty...
+     if ((currentElementContent == CONTENT_ELEMENTS) && !isDirtyCurrentElement)
+       {
+         pureWhite = true;
+       }
+ 
+     // always report right out of readBuffer
+     // to minimize (pointless) buffer copies
+     while (true)
+       {
+         int lineAugment = 0;
+         int columnAugment = 0;
+         int i;
+         
+ loop:
+         for (i = readBufferPos; i < readBufferLength; i++)
+           {
+             switch (c = readBuffer[i])
+               {
+               case '\n':
+                 lineAugment++;
+                 columnAugment = 0;
+                 // pureWhite unmodified
+                 break;
+               case '\r':  // should not happen!!
+               case '\t':
+               case ' ':
+                 // pureWhite unmodified
+                 columnAugment++;
+                 break;
+               case '&':
+               case '<':
+                 columnAugment++;
+                 // pureWhite unmodified
+                 // CLEAN end of text sequence
+                 state = 1;
+                 break loop;
+               case ']':
+                 // that's not a whitespace char, and
+                 // can not terminate pure whitespace either
+                 pureWhite = false;
+                 if ((i + 2) < readBufferLength)
+                   {
+                     if (readBuffer [i + 1] == ']'
+                         && readBuffer [i + 2] == '>')
+                       {
+                         // ERROR end of text sequence
+                         state = 2;
+                         break loop;
+                       }
+                   }
+                 else
+                   {
+                     // FIXME missing two end-of-buffer cases
+                   }
+                 columnAugment++;
+                 break;
+               default:
+                 if ((c < 0x0020 || c > 0xFFFD)
+                     || ((c >= 0x007f) && (c <= 0x009f) && (c != 0x0085) 
+                         && xmlVersion == XML_11)) 
+                   {
+                     error("illegal XML character U+"
+                           + Integer.toHexString(c));
+                   }
+                 // that's not a whitespace char
+                 pureWhite = false;
+                 columnAugment++;
+               }
+           }
+         
+         // report text thus far
+         if (lineAugment > 0)
+           {
+             line += lineAugment;
+             column = columnAugment;
+           }
+         else
+           {
+             column += columnAugment;
+           }
+         
+         // report characters/whitspace
+         int length = i - readBufferPos;
+         
+         if (length != 0)
+           {
+             if (pureWhite)
+               {
+                 handler.ignorableWhitespace(readBuffer,
+                                             readBufferPos, length);
+               }
+             else
+               {
+                 handler.charData(readBuffer, readBufferPos, length);
+               }
+             readBufferPos = i;
+           }
+         
+         if (state != 0)
+           {
+             break;
+           }
+         
+         // fill next buffer from this entity, or
+         // pop stack and continue with previous entity
+         unread(readCh());
+       }
+     if (!pureWhite)
+       {
+         isDirtyCurrentElement = true;
+       }
+     // finish, maybe with error
+     if (state != 1)  // finish, no error
+       {
+         error("character data may not contain ']]>'");
+       }
+   }
+   
+   //////////////////////////////////////////////////////////////////////
+   // High-level reading and scanning methods.
+   //////////////////////////////////////////////////////////////////////
+   
+   /**
+    * Require whitespace characters.
+    */
+   private void requireWhitespace()
+     throws SAXException, IOException
+   {
+     char c = readCh();
+     if (isWhitespace(c))
+       {
+         skipWhitespace();
+       }
+     else
+       {
+         error("whitespace required", c, null);
+       }
+   }
+ 
+   /**
+    * Skip whitespace characters.
+    * <pre>
+    * [3] S ::= (#x20 | #x9 | #xd | #xa)+
+    * </pre>
+    */
+   private void skipWhitespace()
+     throws SAXException, IOException
+   {
+     // Start with a little cheat.  Most of
+     // the time, the white space will fall
+     // within the current read buffer; if
+     // not, then fall through.
+     if (USE_CHEATS)
+       {
+         int lineAugment = 0;
+         int columnAugment = 0;
+         
+ loop:
+         for (int i = readBufferPos; i < readBufferLength; i++)
+           {
+             switch (readBuffer[i])
+               {
+               case ' ':
+               case '\t':
+               case '\r':
+                 columnAugment++;
+                 break;
+               case '\n':
+                 lineAugment++;
+                 columnAugment = 0;
+                 break;
+               case '%':
+                 if (expandPE)
+                   {
+                     break loop;
+                   }
+                 // else fall through...
+               default:
+                 readBufferPos = i;
+                 if (lineAugment > 0)
+                   {
+                     line += lineAugment;
+                     column = columnAugment;
+                   }
+                 else
+                   {
+                     column += columnAugment;
+                   }
+                 return;
+               }
+           }
+       }
+     
+     // OK, do it the slow way.
+     char c = readCh ();
+     while (isWhitespace(c))
+       {
+         c = readCh();
+       }
+     unread(c);
+   }
+   
+   /**
+    * Read a name or (when parsing an enumeration) name token.
+    * <pre>
+    * [5] Name ::= (Letter | '_' | ':') (NameChar)*
+    * [7] Nmtoken ::= (NameChar)+
+    * </pre>
+    */
+   private String readNmtoken(boolean isName)
+     throws SAXException, IOException
+   {
+     char c;
+     
+     if (USE_CHEATS)
+       {
+ loop:
+         for (int i = readBufferPos; i < readBufferLength; i++)
+           {
+             c = readBuffer[i];
+             switch (c)
+               {
+               case '%':
+                 if (expandPE)
+                   {
+                     break loop;
+                   }
+                 // else fall through...
+                 
+                 // What may legitimately come AFTER a name/nmtoken?
+               case '<': case '>': case '&':
+               case ',': case '|': case '*': case '+': case '?':
+               case ')':
+               case '=':
+               case '\'': case '"':
+               case '[':
+               case ' ': case '\t': case '\r': case '\n':
+               case ';':
+               case '/':
+                 int start = readBufferPos;
+                 if (i == start)
+                   {
+                     error("name expected", readBuffer[i], null);
+                   }
+                 readBufferPos = i;
+                 return intern(readBuffer, start, i - start);
+                 
+               default:
+                 // FIXME ... per IBM's OASIS test submission, these:
+                 //   ?    U+06dd 
+                 //   Combining  U+309B
+                 //these switches are kind of ugly but at least we won't
+                 //have to go over the whole lits for each char
+                 if (isName && i == readBufferPos)
+                   {
+                     char c2 = (char) (c & 0x00f0);
+                     switch (c & 0xff00)
+                       {
+                         //starting with 01
+                       case 0x0100:
+                         switch (c2)
+                           {
+                           case 0x0030:
+                             if (c == 0x0132 || c == 0x0133 || c == 0x013f)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           case 0x0040:
+                             if (c == 0x0140 || c == 0x0149)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           case 0x00c0:
+                             if (c == 0x01c4 || c == 0x01cc)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           case 0x00f0:
+                             if (c == 0x01f1 || c == 0x01f3)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           case 0x00b0:
+                             if (c == 0x01f1 || c == 0x01f3)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           default:
+                             if (c == 0x017f)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                           }
+                         
+                         break;
+                         //starting with 11
+                       case 0x1100:
+                         switch (c2)
+                           {
+                           case 0x0000:
+                             if (c == 0x1104 || c == 0x1108 ||
+                                 c == 0x110a || c == 0x110d)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           case 0x0030:
+                             if (c == 0x113b || c == 0x113f)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           case 0x0040:
+                             if (c == 0x1141 || c == 0x114d
+                                 || c == 0x114f )
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           case 0x0050:
+                             if (c == 0x1151 || c == 0x1156)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           case 0x0060:
+                             if (c == 0x1162 || c == 0x1164
+                                 || c == 0x1166 || c == 0x116b
+                                 || c == 0x116f)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           case 0x00b0:
+                             if (c == 0x11b6 || c == 0x11b9
+                                 || c == 0x11bb || c == 0x116f)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                             break;
+                           default:
+                             if (c == 0x1174 || c == 0x119f
+                                 || c == 0x11ac || c == 0x11c3
+                                 || c == 0x11f1)
+                               {
+                                 error("Not a name start character, U+"
+                                       + Integer.toHexString(c));
+                               }
+                           }
+                         break;
+                       default:
+                         if (c == 0x0e46 || c == 0x1011 
+                             || c == 0x212f || c == 0x0587
+                             || c == 0x0230 )
+                           {
+                             error("Not a name start character, U+"
+                                   + Integer.toHexString(c));
+                           }
+                       }
+                   }
+                 // punt on exact tests from Appendix A; approximate
+                 // them using the Unicode ID start/part rules
+                 if (i == readBufferPos && isName)
+                   {
+                     if (!Character.isUnicodeIdentifierStart(c)
+                         && c != ':' && c != '_')
+                       {
+                         error("Not a name start character, U+"
+                               + Integer.toHexString(c));
+                       }
+                   }
+                 else if (!Character.isUnicodeIdentifierPart(c)
+                          && c != '-' && c != ':' && c != '_' && c != '.'
+                          && !isExtender(c))
+                   {
+                     error("Not a name character, U+"
+                           + Integer.toHexString(c));
+                   }
+               }
+           }
+       }
+     
+     nameBufferPos = 0;
+ 
+     // Read the first character.
+ loop:
+     while (true)
+       {
+         c = readCh();
+         switch (c)
+           {
+           case '%':
+           case '<': case '>': case '&':
+           case ',': case '|': case '*': case '+': case '?':
+           case ')':
+           case '=':
+           case '\'': case '"':
+           case '[':
+           case ' ': case '\t': case '\n': case '\r':
+           case ';':
+           case '/':
+             unread(c);
+             if (nameBufferPos == 0)
+               {
+                 error ("name expected");
+               }
+             // punt on exact tests from Appendix A, but approximate them
+             if (isName
+                 && !Character.isUnicodeIdentifierStart(nameBuffer[0])
+                 && ":_".indexOf(nameBuffer[0]) == -1)
+               {
+                 error("Not a name start character, U+"
+                       + Integer.toHexString(nameBuffer[0]));
+               }
+             String s = intern(nameBuffer, 0, nameBufferPos);
+             nameBufferPos = 0;
+             return s;
+           default:
+             // punt on exact tests from Appendix A, but approximate them
+             
+             if ((nameBufferPos != 0 || !isName)
+                 && !Character.isUnicodeIdentifierPart(c)
+                 && ":-_.".indexOf(c) == -1
+                 && !isExtender(c))
+               {
+                 error("Not a name character, U+"
+                       + Integer.toHexString(c));
+               }
+             if (nameBufferPos >= nameBuffer.length)
+               {
+                 nameBuffer =
+                   (char[]) extendArray(nameBuffer,
+                                        nameBuffer.length, nameBufferPos);
+               }
+             nameBuffer[nameBufferPos++] = c;
+           }
+       }
+   }
+   
+   private static boolean isExtender(char c)
+   {
+     // [88] Extender ::= ...
+     return c == 0x00b7 || c == 0x02d0 || c == 0x02d1 || c == 0x0387
+       || c == 0x0640 || c == 0x0e46 || c == 0x0ec6 || c == 0x3005
+       || (c >= 0x3031 && c <= 0x3035)
+       || (c >= 0x309d && c <= 0x309e)
+       || (c >= 0x30fc && c <= 0x30fe);
+   }
+ 
+   /**
+    * Read a literal.  With matching single or double quotes as
+    * delimiters (and not embedded!) this is used to parse:
+    * <pre>
+    *  [9] EntityValue ::= ... ([^%&amp;] | PEReference | Reference)* ...
+    *  [10] AttValue ::= ... ([^<&] | Reference)* ...
+    *  [11] SystemLiteral ::= ... (URLchar - "'")* ...
+    *  [12] PubidLiteral ::= ... (PubidChar - "'")* ...
+    * </pre>
+    * as well as the quoted strings in XML and text declarations
+    * (for version, encoding, and standalone) which have their
+    * own constraints.
+    */
+   private String readLiteral(int flags)
+     throws SAXException, IOException
+   {
+     char delim, c;
+     int startLine = line;
+     boolean saved = expandPE;
+     boolean savedReport = doReport;
+     
+     // Find the first delimiter.
+     delim = readCh();
+     if (delim != '"' && delim != '\'')
+       {
+         error("expected '\"' or \"'\"", delim, null);
+         return null;
+       }
+     inLiteral = true;
+     if ((flags & LIT_DISABLE_PE) != 0)
+       {
+         expandPE = false;
+       }
+     doReport = false;
+     
+     // Each level of input source has its own buffer; remember
+     // ours, so we won't read the ending delimiter from any
+     // other input source, regardless of entity processing.
+     char[] ourBuf = readBuffer;
+ 
+     // Read the literal.
+     try
+       {
+         c = readCh();
+         boolean ampRead = false;
+ loop:
+         while (! (c == delim && readBuffer == ourBuf))
+           {
+             switch (c)
+               {
+                 // attributes and public ids are normalized
+                 // in almost the same ways
+               case '\n':
+               case '\r':
+                 if ((flags & (LIT_ATTRIBUTE | LIT_PUBID)) != 0)
+                   {
+                     c = ' ';
+                   }
+                 break;
+               case '\t':
+                 if ((flags & LIT_ATTRIBUTE) != 0)
+                   {
+                     c = ' ';
+                   }
+                 break;
+               case '&':
+                 c = readCh();
+                 // Char refs are expanded immediately, except for
+                 // all the cases where it's deferred.
+                 if (c == '#')
+                   {
+                     if ((flags & LIT_DISABLE_CREF) != 0)
+                       {
+                         dataBufferAppend('&');
+                         break;
+                       }
+                     parseCharRef(false /* Do not do flushDataBuffer */);
+                     
+                     // exotic WFness risk: this is an entity literal,
+                     // dataBuffer [dataBufferPos - 1] == '&', and
+                     // following chars are a _partial_ entity/char ref
+                     
+                     // It looks like an entity ref ...
+                   }
+                 else
+                   {
+                     unread(c);
+                     // Expand it?
+                     if ((flags & LIT_ENTITY_REF) > 0)
+                       {
+                         parseEntityRef(false);
+                         if (String.valueOf(readBuffer).equals("&#38;"))
+                           {
+                             ampRead = true;
+                           }
+                         //Is it just data?
+                       }
+                     else if ((flags & LIT_DISABLE_EREF) != 0)
+                       {
+                         dataBufferAppend('&');
+                         
+                         // OK, it will be an entity ref -- expanded later.
+                       }
+                     else
+                       {
+                         String name = readNmtoken(true);
+                         require(';');
+                         dataBufferAppend('&');
+                         dataBufferAppend(name);
+                         dataBufferAppend(';');
+                       }
+                   }
+                 c = readCh();
+                 continue loop;
+                 
+               case '<':
+                 // and why?  Perhaps so "&foo;" expands the same
+                 // inside and outside an attribute?
+                 if ((flags & LIT_ATTRIBUTE) != 0)
+                   {
+                     error("attribute values may not contain '<'");
+                   }
+                 break;
+ 
+                 // We don't worry about case '%' and PE refs, readCh does.
+                 
+               default:
+                 break;
+               }
+             dataBufferAppend(c);
+             c = readCh();
+           }
+       }
+     catch (EOFException e)
+       {
+         error("end of input while looking for delimiter (started on line "
+               + startLine + ')', null, new Character(delim).toString());
+       }
+     inLiteral = false;
+     expandPE = saved;
+     doReport = savedReport;
+     
+     // Normalise whitespace if necessary.
+     if ((flags & LIT_NORMALIZE) > 0)
+       {
+         dataBufferNormalize();
+       }
+     
+     // Return the value.
+     return dataBufferToString();
+   }
+   
+   /**
+    * Try reading external identifiers.
+    * A system identifier is not required for notations.
+    * @param inNotation Are we parsing a notation decl?
+    * @param isSubset Parsing external subset decl (may be omitted)?
+    * @return A three-member String array containing the identifiers,
+    *  or nulls. Order: public, system, baseURI.
+    */
+   private ExternalIdentifiers readExternalIds(boolean inNotation,
+                                               boolean isSubset)
+     throws Exception
+   {
+     char c;
+     ExternalIdentifiers ids = new ExternalIdentifiers();
+     int flags = LIT_DISABLE_CREF | LIT_DISABLE_PE | LIT_DISABLE_EREF;
+     
+     if (tryRead("PUBLIC"))
+       {
+         requireWhitespace();
+         ids.publicId = readLiteral(LIT_NORMALIZE | LIT_PUBID | flags);
+         if (inNotation)
+           {
+             skipWhitespace();
+             c = readCh();
+             unread(c);
+             if (c == '"' || c == '\'')
+               {
+                 ids.systemId = readLiteral(flags);
+               }
+           }
+         else
+           {
+             requireWhitespace();
+             ids.systemId = readLiteral(flags);
+           }
+         
+         for (int i = 0; i < ids.publicId.length(); i++)
+           {
+             c = ids.publicId.charAt(i);
+             if (c >= 'a' && c <= 'z')
+               {
+                 continue;
+               }
+             if (c >= 'A' && c <= 'Z')
+               {
+                 continue;
+               }
+             if (" \r\n0123456789-' ()+,./:=?;!*#@$_%".indexOf(c) != -1)
+               {
+                 continue;
+               }
+             error("illegal PUBLIC id character U+"
+                   + Integer.toHexString(c));
+           }
+       }
+     else if (tryRead("SYSTEM"))
+       {
+         requireWhitespace();
+         ids.systemId = readLiteral(flags);
+       }
+     else if (!isSubset)
+       {
+         error("missing SYSTEM or PUBLIC keyword");
+       }
+       
+     if (ids.systemId != null)
+       {
+         if (ids.systemId.indexOf('#') != -1)
+           {
+             handler.verror("SYSTEM id has a URI fragment: " + ids.systemId);
+           }
+         ids.baseUri = handler.getSystemId();
+         if (ids.baseUri == null && uriWarnings)
+           {
+             handler.warn("No base URI; hope URI is absolute: "
+                          + ids.systemId);
+           }
+       }
+     
+     return ids;
+   }
+ 
+   /**
+    * Test if a character is whitespace.
+    * <pre>
+    * [3] S ::= (#x20 | #x9 | #xd | #xa)+
+    * </pre>
+    * @param c The character to test.
+    * @return true if the character is whitespace.
+    */
+   private final boolean isWhitespace(char c)
+   {
+     if (c > 0x20)
+       {
+         return false;
+       }
+     if (c == 0x20 || c == 0x0a || c == 0x09 || c == 0x0d)
+       {
+         return true;
+       }
+     return false;  // illegal ...
+   }
+ 
+   //////////////////////////////////////////////////////////////////////
+   // Utility routines.
+   //////////////////////////////////////////////////////////////////////
+     
+   /**
+    * Add a character to the data buffer.
+    */
+   private void dataBufferAppend(char c)
+   {
+     // Expand buffer if necessary.
+     if (dataBufferPos >= dataBuffer.length)
+       {
+         dataBuffer = (char[]) extendArray(dataBuffer,
+                                           dataBuffer.length, dataBufferPos);
+       }
+     dataBuffer[dataBufferPos++] = c;
+   }
+ 
+   /**
+    * Add a string to the data buffer.
+    */
+   private void dataBufferAppend(String s)
+   {
+     dataBufferAppend(s.toCharArray(), 0, s.length());
+   }
+ 
+   /**
+    * Append (part of) a character array to the data buffer.
+    */
+   private void dataBufferAppend(char[] ch, int start, int length)
+   {
+     dataBuffer = (char[]) extendArray(dataBuffer, dataBuffer.length,
+                                       dataBufferPos + length);
+     
+     System.arraycopy(ch, start, dataBuffer, dataBufferPos, length);
+     dataBufferPos += length;
+   }
+ 
+   /**
+    * Normalise space characters in the data buffer.
+    */
+   private void dataBufferNormalize()
+   {
+     int i = 0;
+     int j = 0;
+     int end = dataBufferPos;
+     
+     // Skip spaces at the start.
+     while (j < end && dataBuffer[j] == ' ')
+       {
+         j++;
+       }
+     
+     // Skip whitespace at the end.
+     while (end > j && dataBuffer[end - 1] == ' ')
+       {
+         end --;
+       }
+ 
+     // Start copying to the left.
+     while (j < end)
+       {
+         
+         char c = dataBuffer[j++];
+         
+         // Normalise all other spaces to
+         // a single space.
+         if (c == ' ')
+           {
+             while (j < end && dataBuffer[j++] == ' ')
+               {
+                 continue;
+               }
+             dataBuffer[i++] = ' ';
+             dataBuffer[i++] = dataBuffer[j - 1];
+           }
+         else
+           {
+             dataBuffer[i++] = c;
+           }
+       }
+     
+     // The new length is <= the old one.
+     dataBufferPos = i;
+   }
+ 
+   /**
+    * Convert the data buffer to a string.
+    */
+   private String dataBufferToString()
+   {
+     String s = new String(dataBuffer, 0, dataBufferPos);
+     dataBufferPos = 0;
+     return s;
+   }
+ 
+   /**
+    * Flush the contents of the data buffer to the handler, as
+    * appropriate, and reset the buffer for new input.
+    */
+   private void dataBufferFlush()
+     throws SAXException
+   {
+     if (currentElementContent == CONTENT_ELEMENTS
+         && dataBufferPos > 0
+         && !inCDATA)
+       {
+         // We can't just trust the buffer to be whitespace, there
+         // are (error) cases when it isn't
+         for (int i = 0; i < dataBufferPos; i++)
+           {
+             if (!isWhitespace(dataBuffer[i]))
+               {
+                 handler.charData(dataBuffer, 0, dataBufferPos);
+                 dataBufferPos = 0;
+               }
+           }
+         if (dataBufferPos > 0)
+           {
+             handler.ignorableWhitespace(dataBuffer, 0, dataBufferPos);
+             dataBufferPos = 0;
+           }
+       }
+     else if (dataBufferPos > 0)
+       {
+         handler.charData(dataBuffer, 0, dataBufferPos);
+         dataBufferPos = 0;
+       }
+   }
+ 
+   /**
+    * Require a string to appear, or throw an exception.
+    * <p><em>Precondition:</em> Entity expansion is not required.
+    * <p><em>Precondition:</em> data buffer has no characters that
+    * will get sent to the application.
+    */
+   private void require(String delim)
+     throws SAXException, IOException
+   {
+     int length = delim.length();
+     char[] ch;
+     
+     if (length < dataBuffer.length)
+       {
+         ch = dataBuffer;
+         delim.getChars(0, length, ch, 0);
+       }
+     else
+       {
+         ch = delim.toCharArray();
+       }
+       
+     if (USE_CHEATS && length <= (readBufferLength - readBufferPos))
+       {
+         int offset = readBufferPos;
+         
+         for (int i = 0; i < length; i++, offset++)
+           {
+             if (ch[i] != readBuffer[offset])
+               {
+                 error ("required string", null, delim);
+               }
+           }
+         readBufferPos = offset;
+         
+       }
+     else
+       {
+         for (int i = 0; i < length; i++)
+           {
+             require(ch[i]);
+           }
+       }
+   }
+ 
+   /**
+    * Require a character to appear, or throw an exception.
+    */
+   private void require(char delim)
+     throws SAXException, IOException
+   {
+     char c = readCh();
+     
+     if (c != delim)
+       {
+         error("required character", c, new Character(delim).toString());
+       }
+   }
+   
+   /**
+    * Create an interned string from a character array.
+    * &AElig;lfred uses this method to create an interned version
+    * of all names and name tokens, so that it can test equality
+    * with <code>==</code> instead of <code>String.equals ()</code>.
+    *
+    * <p>This is much more efficient than constructing a non-interned
+    * string first, and then interning it.
+    *
+    * @param ch an array of characters for building the string.
+    * @param start the starting position in the array.
+    * @param length the number of characters to place in the string.
+    * @return an interned string.
+    * @see #intern (String)
+    * @see java.lang.String#intern
+    */
+   public String intern(char[] ch, int start, int length)
+   {
+     int index = 0;
+     int hash = 0;
+     Object[] bucket;
+ 
+     // Generate a hash code.  This is a widely used string hash,
+     // often attributed to Brian Kernighan.
+     for (int i = start; i < start + length; i++)
+       {
+         hash = 31 * hash + ch[i];
+       }
+     hash = (hash & 0x7fffffff) % SYMBOL_TABLE_LENGTH;
+     
+     // Get the bucket -- consists of {array,String} pairs
+     if ((bucket = symbolTable[hash]) == null)
+       {
+         // first string in this bucket
+         bucket = new Object[8];
+         
+         // Search for a matching tuple, and
+         // return the string if we find one.
+       }
+     else
+       {
+         while (index < bucket.length)
+           {
+             char[] chFound = (char[]) bucket[index];
+         
+             // Stop when we hit an empty entry.
+             if (chFound == null)
+               {
+                 break;
+               }
+             
+             // If they're the same length, check for a match.
+             if (chFound.length == length)
+               {
+                 for (int i = 0; i < chFound.length; i++)
+                   {
+                     // continue search on failure
+                     if (ch[start + i] != chFound[i])
+                       {
+                         break;
+                       }
+                     else if (i == length - 1)
+                       {
+                         // That's it, we have a match!
+                         return (String) bucket[index + 1];
+                       }
+                   }
+               }
+             index += 2;
+           }
+         // Not found -- we'll have to add it.
+         
+         // Do we have to grow the bucket?
+         bucket = (Object[]) extendArray(bucket, bucket.length, index);
+       }
+     symbolTable[hash] = bucket;
+     
+     // OK, add it to the end of the bucket -- "local" interning.
+     // Intern "globally" to let applications share interning benefits.
+     // That is, "!=" and "==" work on our strings, not just equals().
+     String s = new String(ch, start, length).intern();
+     bucket[index] = s.toCharArray();
+     bucket[index + 1] = s;
+     return s;
+   }
+ 
+   /**
+    * Ensure the capacity of an array, allocating a new one if
+    * necessary.  Usually extends only for name hash collisions. 
+    */
+   private Object extendArray(Object array, int currentSize, int requiredSize)
+   {
+     if (requiredSize < currentSize)
+       {
+         return array;
+       }
+     else
+       {
+         Object newArray = null;
+         int newSize = currentSize * 2;
+         
+         if (newSize <= requiredSize)
+           {
+             newSize = requiredSize + 1;
+           }
+         
+         if (array instanceof char[])
+           {
+             newArray = new char[newSize];
+           }
+         else if (array instanceof Object[])
+           {
+             newArray = new Object[newSize];
+           }
+         else
+           {
+             throw new RuntimeException();
+           }
+         
+         System.arraycopy(array, 0, newArray, 0, currentSize);
+         return newArray;
+       }
+   }
+ 
+   //////////////////////////////////////////////////////////////////////
+   // XML query routines.
+   //////////////////////////////////////////////////////////////////////
+   
+   boolean isStandalone()
+   {
+     return docIsStandalone;
+   }
+     
+   //
+   // Elements
+   //
+   
+   private int getContentType(ElementDecl element, int defaultType)
+   {
+     int retval;
+     
+     if (element == null)
+       {
+         return defaultType;
+       }
+     retval = element.contentType;
+     if (retval == CONTENT_UNDECLARED)
+       {
+         retval = defaultType;
+       }
+     return retval;
+   }
+ 
+   /**
+    * Look up the content type of an element.
+    * @param name The element type name.
+    * @return An integer constant representing the content type.
+    * @see #CONTENT_UNDECLARED
+    * @see #CONTENT_ANY
+    * @see #CONTENT_EMPTY
+    * @see #CONTENT_MIXED
+    * @see #CONTENT_ELEMENTS
+    */
+   public int getElementContentType(String name)
+   {
+     ElementDecl element = (ElementDecl) elementInfo.get(name);
+     return getContentType(element, CONTENT_UNDECLARED);
+   }
+   
+   /**
+    * Register an element.
+    * Array format:
+    *  [0] element type name
+    *  [1] content model (mixed, elements only)
+    *  [2] attribute hash table
+    */
+   private void setElement(String name, int contentType,
+                           String contentModel, HashMap attributes)
+     throws SAXException
+   {
+     if (skippedPE)
+       {
+         return;
+       }
+ 
+     ElementDecl element = (ElementDecl) elementInfo.get(name);
+     
+     // first <!ELEMENT ...> or <!ATTLIST ...> for this type?
+     if (element == null)
+       {
+         element = new ElementDecl();
+         element.contentType = contentType;
+         element.contentModel = contentModel;
+         element.attributes = attributes;
+         elementInfo.put(name, element);
+         return;
+       }
+     
+     // <!ELEMENT ...> declaration?
+     if (contentType != CONTENT_UNDECLARED)
+       {
+         // ... following an associated <!ATTLIST ...>
+         if (element.contentType == CONTENT_UNDECLARED)
+           {
+             element.contentType = contentType;
+             element.contentModel = contentModel;
+           }
+         else
+           {
+             // VC: Unique Element Type Declaration
+             handler.verror("multiple declarations for element type: "
+                            + name);
+           }
+       }
+     
+     // first <!ATTLIST ...>, before <!ELEMENT ...> ?
+     else if (attributes != null)
+       {
+         element.attributes = attributes;
+       }
+   }
+   
+   /**
+    * Look up the attribute hash table for an element.
+    * The hash table is the second item in the element array.
+    */
+   private HashMap getElementAttributes(String name)
+   {
+     ElementDecl element = (ElementDecl) elementInfo.get(name);
+     return (element == null) ? null : element.attributes;
+   }
+ 
+   //
+   // Attributes
+   //
+   
+   /**
+    * Get the declared attributes for an element type.
+    * @param elname The name of the element type.
+    * @return An iterator over all the attributes declared for
+    *   a specific element type.  The results will be valid only
+    *   after the DTD (if any) has been parsed.
+    * @see #getAttributeType
+    * @see #getAttributeEnumeration
+    * @see #getAttributeDefaultValueType
+    * @see #getAttributeDefaultValue
+    * @see #getAttributeExpandedValue
+    */
+   private Iterator declaredAttributes(ElementDecl element)
+   {
+     HashMap attlist;
+     
+     if (element == null)
+       {
+         return null;
+       }
+     if ((attlist = element.attributes) == null)
+       {
+         return null;
+       }
+     return attlist.keySet().iterator();
+   }
+ 
+   /**
+    * Get the declared attributes for an element type.
+    * @param elname The name of the element type.
+    * @return An iterator over all the attributes declared for
+    *   a specific element type.  The results will be valid only
+    *   after the DTD (if any) has been parsed.
+    * @see #getAttributeType
+    * @see #getAttributeEnumeration
+    * @see #getAttributeDefaultValueType
+    * @see #getAttributeDefaultValue
+    * @see #getAttributeExpandedValue
+    */
+   public Iterator declaredAttributes(String elname)
+   {
+     return declaredAttributes((ElementDecl) elementInfo.get(elname));
+   }
+ 
+   /**
+    * Retrieve the declared type of an attribute.
+    * @param name The name of the associated element.
+    * @param aname The name of the attribute.
+    * @return An interend string denoting the type, or null
+    *  indicating an undeclared attribute.
+    */
+   public String getAttributeType(String name, String aname)
+   {
+     AttributeDecl attribute = getAttribute(name, aname);
+     return (attribute == null) ? null : attribute.type;
+   }
+ 
+   /**
+    * Retrieve the allowed values for an enumerated attribute type.
+    * @param name The name of the associated element.
+    * @param aname The name of the attribute.
+    * @return A string containing the token list.
+    */
+   public String getAttributeEnumeration(String name, String aname)
+   {
+     AttributeDecl attribute = getAttribute(name, aname);
+     // assert:  attribute.enumeration is "ENUMERATION" or "NOTATION"
+     return (attribute == null) ? null : attribute.enumeration;
+   }
+ 
+   /**
+    * Retrieve the default value of a declared attribute.
+    * @param name The name of the associated element.
+    * @param aname The name of the attribute.
+    * @return The default value, or null if the attribute was
+    *   #IMPLIED or simply undeclared and unspecified.
+    * @see #getAttributeExpandedValue
+    */
+   public String getAttributeDefaultValue(String name, String aname)
+   {
+     AttributeDecl attribute = getAttribute(name, aname);
+     return (attribute == null) ? null : attribute.value;
+   }
+ 
+     /*
+ 
+ // FIXME:  Leaving this in, until W3C finally resolves the confusion
+ // between parts of the XML 2nd REC about when entity declararations
+ // are guaranteed to be known.  Current code matches what section 5.1
+ // (conformance) describes, but some readings of the self-contradicting
+ // text in 4.1 (the "Entity Declared" WFC and VC) seem to expect that
+ // attribute expansion/normalization must be deferred in some cases
+ // (just TRY to identify them!).
+ 
+      * Retrieve the expanded value of a declared attribute.
+      * <p>General entities (and char refs) will be expanded (once).
+      * @param name The name of the associated element.
+      * @param aname The name of the attribute.
+      * @return The expanded default value, or null if the attribute was
+      *   #IMPLIED or simply undeclared
+      * @see #getAttributeDefaultValue
+     public String getAttributeExpandedValue (String name, String aname)
+     throws Exception
+     {
+   AttributeDecl attribute = getAttribute (name, aname);
+ 
+   if (attribute == null) {
+       return null;
+   } else if (attribute.defaultValue == null && attribute.value != null) {
+       // we MUST use the same buf for both quotes else the literal
+       // can't be properly terminated
+       char buf [] = new char [1];
+       int  flags = LIT_ENTITY_REF | LIT_ATTRIBUTE;
+       String type = getAttributeType (name, aname);
+ 
+       if (type != "CDATA" && type != null)
+     flags |= LIT_NORMALIZE;
+       buf [0] = '"';
+       pushCharArray (null, buf, 0, 1);
+       pushString (null, attribute.value);
+       pushCharArray (null, buf, 0, 1);
+       attribute.defaultValue = readLiteral (flags);
+   }
+   return attribute.defaultValue;
+     }
+      */
+ 
+   /**
+    * Retrieve the default value mode of a declared attribute.
+    * @see #ATTRIBUTE_DEFAULT_SPECIFIED
+    * @see #ATTRIBUTE_DEFAULT_IMPLIED
+    * @see #ATTRIBUTE_DEFAULT_REQUIRED
+    * @see #ATTRIBUTE_DEFAULT_FIXED
+    */
+   public int getAttributeDefaultValueType(String name, String aname)
+   {
+     AttributeDecl attribute = getAttribute(name, aname);
+     return (attribute == null) ? ATTRIBUTE_DEFAULT_UNDECLARED :
+       attribute.valueType;
+   }  
+   
+   /**
+    * Register an attribute declaration for later retrieval.
+    * Format:
+    * - String type
+    * - String default value
+    * - int value type
+    * - enumeration
+    * - processed default value
+    */
+   private void setAttribute(String elName, String name, String type,
+                             String enumeration, String value, int valueType)
+     throws Exception
+   {
+     HashMap attlist;
+     
+     if (skippedPE)
+       {
+         return;
+       }
+     
+     // Create a new hashtable if necessary.
+     attlist = getElementAttributes(elName);
+     if (attlist == null)
+       {
+         attlist = new HashMap();
+       }
+     
+     // ignore multiple attribute declarations!
+     if (attlist.get(name) != null)
+       {
+         // warn ...
+         return;
+       }
+     else
+       {
+         AttributeDecl attribute = new AttributeDecl();
+         attribute.type = type;
+         attribute.value = value;
+         attribute.valueType = valueType;
+         attribute.enumeration = enumeration;
+         attlist.put(name, attribute);
+       
+         // save; but don't overwrite any existing <!ELEMENT ...>
+         setElement(elName, CONTENT_UNDECLARED, null, attlist);
+       }
+   }
+ 
+   /**
+    * Retrieve the attribute declaration for the given element name and name.
+    */
+   private AttributeDecl getAttribute(String elName, String name)
+   {
+     HashMap attlist = getElementAttributes(elName);
+     return (attlist == null) ? null : (AttributeDecl) attlist.get(name);
+   }
+ 
+   //
+   // Entities
+   //
+   
+   /**
+    * Find the type of an entity.
+    * @returns An integer constant representing the entity type.
+    * @see #ENTITY_UNDECLARED
+    * @see #ENTITY_INTERNAL
+    * @see #ENTITY_NDATA
+    * @see #ENTITY_TEXT
+    */
+   public int getEntityType(String ename)
+   {
+     EntityInfo entity = (EntityInfo) entityInfo.get(ename);
+     return (entity == null) ?  ENTITY_UNDECLARED : entity.type;
+   }
+ 
+   /**
+    * Return an external entity's identifiers.
+    * @param ename The name of the external entity.
+    * @return The entity's public identifier, system identifier, and base URI.
+    *  Null if the entity was not declared as an external entity.
+    * @see #getEntityType
+    */
+   public ExternalIdentifiers getEntityIds(String ename)
+   {
+     EntityInfo entity = (EntityInfo) entityInfo.get(ename);
+     return (entity == null) ? null : entity.ids;
+   }
+ 
+   /**
+    * Return an internal entity's replacement text.
+    * @param ename The name of the internal entity.
+    * @return The entity's replacement text, or null if
+    *   the entity was not declared as an internal entity.
+    * @see #getEntityType
+    */
+   public String getEntityValue(String ename)
+   {
+     EntityInfo entity = (EntityInfo) entityInfo.get(ename);
+     return (entity == null) ? null : entity.value;
+   }
+ 
+   /**
+    * Register an entity declaration for later retrieval.
+    */
+   private void setInternalEntity(String eName, String value)
+     throws SAXException
+   {
+     if (skippedPE)
+       {
+         return;
+       }
+ 
+     if (entityInfo.get(eName) == null)
+       {
+         EntityInfo entity = new EntityInfo();
+         entity.type = ENTITY_INTERNAL;
+         entity.value = value;
+         entityInfo.put(eName, entity);
+       }
+     if (handler.stringInterning)
+       {
+         if ("lt" == eName || "gt" == eName || "quot" == eName
+             || "apos" == eName || "amp" == eName)
+           {
+             return;
+           }
+       }
+     else
+       {
+         if ("lt".equals(eName) || "gt".equals(eName) || "quot".equals(eName)
+             || "apos".equals(eName) || "amp".equals(eName))
+           {
+             return;
+           }
+       }
+     handler.getDeclHandler().internalEntityDecl(eName, value);
+   }
+ 
+   /**
+    * Register an external entity declaration for later retrieval.
+    */
+   private void setExternalEntity(String eName, int eClass,
+                                  ExternalIdentifiers ids, String nName)
+   {
+     if (entityInfo.get(eName) == null)
+       {
+         EntityInfo entity = new EntityInfo();
+         entity.type = eClass;
+         entity.ids = ids;
+         entity.notationName = nName;
+         entityInfo.put(eName, entity);
+       }
+   }
+ 
+   //
+   // Notations.
+   //
+   
+   /**
+    * Report a notation declaration, checking for duplicates.
+    */
+   private void setNotation(String nname, ExternalIdentifiers ids)
+     throws SAXException
+   {
+     if (skippedPE)
+       {
+         return;
+       }
+     
+     handler.notationDecl(nname, ids.publicId, ids.systemId, ids.baseUri);
+     if (notationInfo.get(nname) == null)
+       {
+         notationInfo.put(nname, nname);
+       }
+     else
+       {
+         // VC: Unique Notation Name
+         handler.verror("Duplicate notation name decl: " + nname);
+       }
+   }
+   
+   //
+   // Location.
+   //
+   
+   /**
+    * Return the current line number.
+    */
+   public int getLineNumber()
+   {
+     return line;
+   }
+ 
+   /**
+    * Return the current column number.
+    */
+   public int getColumnNumber()
+   {
+     return column;
+   }
+ 
+   //////////////////////////////////////////////////////////////////////
+   // High-level I/O.
+   //////////////////////////////////////////////////////////////////////
+   
+   /**
+    * Read a single character from the readBuffer.
+    * <p>The readDataChunk () method maintains the buffer.
+    * <p>If we hit the end of an entity, try to pop the stack and
+    * keep going.
+    * <p> (This approach doesn't really enforce XML's rules about
+    * entity boundaries, but this is not currently a validating
+    * parser).
+    * <p>This routine also attempts to keep track of the current
+    * position in external entities, but it's not entirely accurate.
+    * @return The next available input character.
+    * @see #unread (char)
+    * @see #readDataChunk
+    * @see #readBuffer
+    * @see #line
+    * @return The next character from the current input source.
+    */
+   private char readCh()
+     throws SAXException, IOException
+   {
+     // As long as there's nothing in the
+     // read buffer, try reading more data
+     // (for an external entity) or popping
+     // the entity stack (for either).
+     while (readBufferPos >= readBufferLength)
+       {
+         switch (sourceType)
+           {
+           case INPUT_READER:
+           case INPUT_STREAM:
+             readDataChunk();
+             while (readBufferLength < 1)
+               {
+                 popInput();
+                 if (readBufferLength < 1)
+                   {
+                     readDataChunk();
+                   }
+               }
+             break;
+             
+           default:
+             
+             popInput();
+             break;
+           }
+       }
+     
+     char c = readBuffer[readBufferPos++];
+     
+     if (c == '\n')
+       {
+         line++;
+         column = 0;
+       }
+     else
+       {
+         if (c == '<')
+           {
+             /* the most common return to parseContent () ... NOP */
+           }
+         else if (((c < 0x0020 && (c != '\t') && (c != '\r')) || c > 0xFFFD)
+                  || ((c >= 0x007f) && (c <= 0x009f) && (c != 0x0085) 
+                      && xmlVersion == XML_11))
+           {
+             error("illegal XML character U+" + Integer.toHexString(c));
+           }
+ 
+         // If we're in the DTD and in a context where PEs get expanded,
+         // do so ... 1/14/2000 errata identify those contexts.  There
+         // are also spots in the internal subset where PE refs are fatal
+         // errors, hence yet another flag.
+         else if (c == '%' && expandPE)
+           {
+             if (peIsError)
+               {
+                 error("PE reference within decl in internal subset.");
+               }
+             parsePEReference();
+             return readCh();
+           }
+         column++;
+       }
+ 
+     return c;
+   }
+ 
+   /**
+    * Push a single character back onto the current input stream.
+    * <p>This method usually pushes the character back onto
+    * the readBuffer.
+    * <p>I don't think that this would ever be called with 
+    * readBufferPos = 0, because the methods always reads a character
+    * before unreading it, but just in case, I've added a boundary
+    * condition.
+    * @param c The character to push back.
+    * @see #readCh
+    * @see #unread (char[])
+    * @see #readBuffer
+    */
+   private void unread(char c)
+     throws SAXException
+   {
+     // Normal condition.
+     if (c == '\n')
+       {
+         line--;
+         column = -1;
+       }
+     if (readBufferPos > 0)
+       {
+         readBuffer[--readBufferPos] = c;
+       }
+     else
+       {
+         pushString(null, new Character(c).toString());
+       }
+   }
+ 
+   /**
+    * Push a char array back onto the current input stream.
+    * <p>NOTE: you must <em>never</em> push back characters that you
+    * haven't actually read: use pushString () instead.
+    * @see #readCh
+    * @see #unread (char)
+    * @see #readBuffer
+    * @see #pushString
+    */
+   private void unread(char[] ch, int length)
+     throws SAXException
+   {
+     for (int i = 0; i < length; i++)
+       {
+         if (ch[i] == '\n')
+           {
+             line--;
+             column = -1;
+           }
+       }
+     if (length < readBufferPos)
+       {
+         readBufferPos -= length;
+       }
+     else
+       {
+         pushCharArray(null, ch, 0, length);
+       }
+   }
+ 
+   /**
+    * Push, or skip, a new external input source.
+    * The source will be some kind of parsed entity, such as a PE
+    * (including the external DTD subset) or content for the body.
+    *
+    * @param url The java.net.URL object for the entity.
+    * @see SAXDriver#resolveEntity
+    * @see #pushString
+    * @see #sourceType
+    * @see #pushInput
+    * @see #detectEncoding
+    * @see #sourceType
+    * @see #readBuffer
+    */
+   private void pushURL(boolean isPE,
+                        String ename,
+                        ExternalIdentifiers ids,
+                        Reader reader,
+                        InputStream stream,
+                        String encoding,
+                        boolean doResolve)
+     throws SAXException, IOException
+   {
+     boolean ignoreEncoding;
+     String systemId;
+     InputSource source;
+ 
+     if (!isPE)
+       {
+         dataBufferFlush();
+       }
+ 
+     scratch.setPublicId(ids.publicId);
+     scratch.setSystemId(ids.systemId);
+ 
+     // See if we should skip or substitute the entity.
+     // If we're not skipping, resolving reports startEntity()
+     // and updates the (handler's) stack of URIs.
+     if (doResolve)
+       {
+         // assert (stream == null && reader == null && encoding == null)
+         source = handler.resolveEntity(isPE, ename, scratch, ids.baseUri);
+         if (source == null)
+           {
+             handler.warn("skipping entity: " + ename);
+             handler.skippedEntity(ename);
+             if (isPE)
+               {
+                 skippedPE = true;
+               }
+             return;
+           }
+ 
+         // we might be using alternate IDs/encoding
+         systemId = source.getSystemId();
+         // The following warning and setting systemId was deleted bcause
+         // the application has the option of not setting systemId
+         // provided that it has set the characte/byte stream.
+         /*
+            if (systemId == null) {
+            handler.warn ("missing system ID, using " + ids.systemId);
+            systemId = ids.systemId;
+            }
+          */
+       }
+     else
+       {
+         // "[document]", or "[dtd]" via getExternalSubset()
+         scratch.setCharacterStream(reader);
+         scratch.setByteStream(stream);
+         scratch.setEncoding(encoding);
+         source = scratch;
+         systemId = ids.systemId;
+         if (handler.stringInterning)
+           {
+             handler.startExternalEntity(ename, systemId,
+                                         "[document]" == ename);
+           }
+         else
+           {
+             handler.startExternalEntity(ename, systemId,
+                                         "[document]".equals(ename));
+           }
+       }
+ 
+     // we may have been given I/O streams directly
+     if (source.getCharacterStream() != null)
+       {
+         if (source.getByteStream() != null)
+           error("InputSource has two streams!");
+         reader = source.getCharacterStream();
+       }
+     else if (source.getByteStream() != null)
+       {
+         encoding = source.getEncoding();
+         if (encoding == null)
+           {
+             stream = source.getByteStream();
+           }
+         else
+           {
+             try
+               {
+                 reader = new InputStreamReader(source.getByteStream(),
+                                                encoding);
+               }
+             catch (IOException e)
+               {
+                 stream = source.getByteStream();
+               }
+           }
+       }
+     else if (systemId == null)
+       {
+         error("InputSource has no URI!");
+       }
+     scratch.setCharacterStream(null);
+     scratch.setByteStream(null);
+     scratch.setEncoding(null);
+     
+     // Push the existing status.
+     pushInput(ename);
+ 
+     // Create a new read buffer.
+     // (Note the four-character margin)
+     readBuffer = new char[READ_BUFFER_MAX + 4];
+     readBufferPos = 0;
+     readBufferLength = 0;
+     readBufferOverflow = -1;
+     is = null;
+     line = 1;
+     column = 0;
+     currentByteCount = 0;
+ 
+     // If there's an explicit character stream, just
+     // ignore encoding declarations.
+     if (reader != null)
+       {
+         sourceType = INPUT_READER;
+         this.reader = reader;
+         tryEncodingDecl(true);
+         return;
+       }
+   
+     // Else we handle the conversion, and need to ensure
+     // it's done right.
+     sourceType = INPUT_STREAM;
+     if (stream != null)
+       {
+         is = stream;
+       }
+     else
+       {
+         // We have to open our own stream to the URL.
+         URL url = new URL(systemId);
+         
+         externalEntity = url.openConnection();
+         externalEntity.connect();
+         is = externalEntity.getInputStream();
+       }
+     
+     // If we get to here, there must be
+     // an InputStream available.
+     if (!is.markSupported())
+       {
+         is = new BufferedInputStream(is);
+       }
+ 
+     // Get any external encoding label.
+     if (encoding == null && externalEntity != null)
+       {
+         // External labels can be untrustworthy; filesystems in
+         // particular often have the wrong default for content
+         // that wasn't locally originated.  Those we autodetect.
+         if (!"file".equals(externalEntity.getURL().getProtocol()))
+           {
+             int temp;
+           
+             // application/xml;charset=something;otherAttr=...
+             // ... with many variants on 'something'
+             encoding = externalEntity.getContentType();
+           
+             // MHK code (fix for Saxon 5.5.1/007):
+             // protect against encoding==null
+             if (encoding == null)
+               {
+                 temp = -1;
+               }
+             else
+               {
+                 temp = encoding.indexOf("charset");
+               }
+           
+             // RFC 2376 sez MIME text defaults to ASCII, but since the
+             // JDK will create a MIME type out of thin air, we always
+             // autodetect when there's no explicit charset attribute.
+             if (temp < 0)
+               {
+                 encoding = null;  // autodetect
+               }
+             else
+               {
+                 // only this one attribute
+                 if ((temp = encoding.indexOf(';')) > 0)
+                   {
+                     encoding = encoding.substring(0, temp);
+                   }
+                 
+                 if ((temp = encoding.indexOf('=', temp + 7)) > 0)
+                   {
+                     encoding = encoding.substring(temp + 1);
+                     
+                     // attributes can have comment fields (RFC 822)
+                     if ((temp = encoding.indexOf('(')) > 0)
+                       {
+                         encoding = encoding.substring(0, temp);
+                       }
+                     // ... and values may be quoted
+                     if ((temp = encoding.indexOf('"')) > 0)
+                       {
+                         encoding =
+                           encoding.substring(temp + 1,
+                                              encoding.indexOf('"', temp + 2));
+                       }
+                     encoding = encoding.trim();
+                   }
+                 else
+                   {
+                     handler.warn("ignoring illegal MIME attribute: "
+                                  + encoding);
+                     encoding = null;
+                   }
+               }
+           }
+       }
+     
+     // if we got an external encoding label, use it ...
+     if (encoding != null)
+       {
+         this.encoding = ENCODING_EXTERNAL;
+         setupDecoding(encoding);
+         ignoreEncoding = true;
+         
+         // ... else autodetect from first bytes.
+       }
+     else
+       {
+         detectEncoding();
+         ignoreEncoding = false;
+       }
+ 
+     // Read any XML or text declaration.
+     // If we autodetected, it may tell us the "real" encoding.
+     try
+       {
+         tryEncodingDecl(ignoreEncoding);
+       }
+     catch (UnsupportedEncodingException x)
+       {
+         encoding = x.getMessage();
+ 
+         // if we don't handle the declared encoding,
+         // try letting a JVM InputStreamReader do it
+         try
+           {
+             if (sourceType != INPUT_STREAM)
+               {
+                 throw x;
+               }
+ 
+             is.reset();
+             readBufferPos = 0;
+             readBufferLength = 0;
+             readBufferOverflow = -1;
+             line = 1;
+             currentByteCount = column = 0;
+             
+             sourceType = INPUT_READER;
+             this.reader = new InputStreamReader(is, encoding);
+             is = null;
+             
+             tryEncodingDecl(true);
+             
+           }
+         catch (IOException e)
+           {
+             error("unsupported text encoding",
+                   encoding,
+                   null);
+           }
+       }
+   }
+ 
+   /**
+    * Check for an encoding declaration.  This is the second part of the
+    * XML encoding autodetection algorithm, relying on detectEncoding to
+    * get to the point that this part can read any encoding declaration
+    * in the document (using only US-ASCII characters).
+    *
+    * <p> Because this part starts to fill parser buffers with this data,
+    * it's tricky to setup a reader so that Java's built-in decoders can be
+    * used for the character encodings that aren't built in to this parser
+    * (such as EUC-JP, KOI8-R, Big5, etc).
+    *
+    * @return any encoding in the declaration, uppercased; or null
+    * @see detectEncoding
+    */
+   private String tryEncodingDecl(boolean ignoreEncoding)
+     throws SAXException, IOException
+   {
+     // Read the XML/text declaration.
+     if (tryRead("<?xml"))
+       {
+         if (tryWhitespace())
+           {
+             if (inputStack.size() > 0)
+               {
+                 return parseTextDecl(ignoreEncoding);
+               }
+             else
+               {
+                 return parseXMLDecl(ignoreEncoding);
+               }
+           }
+         else
+           {
+             // <?xml-stylesheet ...?> or similar
+             unread('l');
+             unread('m');
+             unread('x');
+             unread('?');
+             unread('<');
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * Attempt to detect the encoding of an entity.
+    * <p>The trick here (as suggested in the XML standard) is that
+    * any entity not in UTF-8, or in UCS-2 with a byte-order mark, 
+    * <b>must</b> begin with an XML declaration or an encoding
+    * declaration; we simply have to look for "&lt;?xml" in various
+    * encodings.
+    * <p>This method has no way to distinguish among 8-bit encodings.
+    * Instead, it sets up for UTF-8, then (possibly) revises its assumption
+    * later in setupDecoding ().  Any ASCII-derived 8-bit encoding
+    * should work, but most will be rejected later by setupDecoding ().
+    * @see #tryEncoding (byte[], byte, byte, byte, byte)
+    * @see #tryEncoding (byte[], byte, byte)
+    * @see #setupDecoding
+    */
+   private void detectEncoding()
+     throws SAXException, IOException
+   {
+     byte[] signature = new byte[4];
+ 
+     // Read the first four bytes for
+     // autodetection.
+     is.mark(4);
+     is.read(signature);
+     is.reset();
+ 
+     //
+     // FIRST:  four byte encodings (who uses these?)
+     //
+     if (tryEncoding(signature, (byte) 0x00, (byte) 0x00,
+                     (byte) 0x00, (byte) 0x3c))
+       {
+         // UCS-4 must begin with "<?xml"
+         // 0x00 0x00 0x00 0x3c: UCS-4, big-endian (1234)
+         // "UTF-32BE"
+         encoding = ENCODING_UCS_4_1234;
+       }
+     else if (tryEncoding(signature, (byte) 0x3c, (byte) 0x00,
+                          (byte) 0x00, (byte) 0x00))
+       {
+         // 0x3c 0x00 0x00 0x00: UCS-4, little-endian (4321)
+         // "UTF-32LE"
+         encoding = ENCODING_UCS_4_4321;
+       }
+     else if (tryEncoding(signature, (byte) 0x00, (byte) 0x00,
+                          (byte) 0x3c, (byte) 0x00))
+       {
+         // 0x00 0x00 0x3c 0x00: UCS-4, unusual (2143)
+         encoding = ENCODING_UCS_4_2143;
+       }
+     else if (tryEncoding(signature, (byte) 0x00, (byte) 0x3c,
+                          (byte) 0x00, (byte) 0x00))
+       {
+         // 0x00 0x3c 0x00 0x00: UCS-4, unusual (3421)
+         encoding = ENCODING_UCS_4_3412;
+ 
+         // 00 00 fe ff UCS_4_1234 (with BOM)
+         // ff fe 00 00 UCS_4_4321 (with BOM)
+       }
+ 
+     //
+     // SECOND:  two byte encodings
+     // note ... with 1/14/2000 errata the XML spec identifies some
+     // more "broken UTF-16" autodetection cases, with no XML decl,
+     // which we don't handle here (that's legal too).
+     //
+     else if (tryEncoding(signature, (byte) 0xfe, (byte) 0xff))
+       {
+         // UCS-2 with a byte-order marker. (UTF-16)
+         // 0xfe 0xff: UCS-2, big-endian (12)
+         encoding = ENCODING_UCS_2_12;
+         is.read(); is.read();
+       }
+     else if (tryEncoding(signature, (byte) 0xff, (byte) 0xfe))
+       {
+         // UCS-2 with a byte-order marker. (UTF-16)
+         // 0xff 0xfe: UCS-2, little-endian (21)
+         encoding = ENCODING_UCS_2_21;
+         is.read(); is.read();
+       }
+     else if (tryEncoding(signature, (byte) 0x00, (byte) 0x3c,
+                          (byte) 0x00, (byte) 0x3f))
+       {
+         // UTF-16BE (otherwise, malformed UTF-16)
+         // 0x00 0x3c 0x00 0x3f: UCS-2, big-endian, no byte-order mark
+         encoding = ENCODING_UCS_2_12;
+         error("no byte-order mark for UCS-2 entity");
+       }
+     else if (tryEncoding(signature, (byte) 0x3c, (byte) 0x00,
+                          (byte) 0x3f, (byte) 0x00))
+       {
+         // UTF-16LE (otherwise, malformed UTF-16)
+         // 0x3c 0x00 0x3f 0x00: UCS-2, little-endian, no byte-order mark
+         encoding = ENCODING_UCS_2_21;
+         error("no byte-order mark for UCS-2 entity");
+       }
+ 
+     //
+     // THIRD:  ASCII-derived encodings, fixed and variable lengths
+     //
+     else if (tryEncoding(signature, (byte) 0x3c, (byte) 0x3f,
+                          (byte) 0x78, (byte) 0x6d))
+       {
+         // ASCII derived
+         // 0x3c 0x3f 0x78 0x6d: UTF-8 or other 8-bit markup (read ENCODING)
+         encoding = ENCODING_UTF_8;
+         prefetchASCIIEncodingDecl();
+       }
+     else if (signature[0] == (byte) 0xef
+              && signature[1] == (byte) 0xbb
+              && signature[2] == (byte) 0xbf)
+       {
+         // 0xef 0xbb 0xbf: UTF-8 BOM (not part of document text)
+         // this un-needed notion slipped into XML 2nd ed through a
+         // "non-normative" erratum; now required by MSFT and UDDI,
+         // and E22 made it normative.
+         encoding = ENCODING_UTF_8;
+         is.read(); is.read(); is.read();
+       }
+     else
+       {
+         // 4c 6f a7 94 ... we don't understand EBCDIC flavors
+         // ... but we COULD at least kick in some fixed code page
+         
+         // (default) UTF-8 without encoding/XML declaration
+         encoding = ENCODING_UTF_8;
+       }
+   }
+ 
+   /**
+    * Check for a four-byte signature.
+    * <p>Utility routine for detectEncoding ().
+    * <p>Always looks for some part of "<?XML" in a specific encoding.
+    * @param sig The first four bytes read.
+    * @param b1 The first byte of the signature
+    * @param b2 The second byte of the signature
+    * @param b3 The third byte of the signature
+    * @param b4 The fourth byte of the signature
+    * @see #detectEncoding
+    */
+   private static boolean tryEncoding(byte[] sig, byte b1, byte b2,
+                                      byte b3, byte b4)
+   {
+     return (sig[0] == b1 && sig[1] == b2
+             && sig[2] == b3 && sig[3] == b4);
+   }
+ 
+   /**
+    * Check for a two-byte signature.
+    * <p>Looks for a UCS-2 byte-order mark.
+    * <p>Utility routine for detectEncoding ().
+    * @param sig The first four bytes read.
+    * @param b1 The first byte of the signature
+    * @param b2 The second byte of the signature
+    * @see #detectEncoding
+    */
+   private static boolean tryEncoding(byte[] sig, byte b1, byte b2)
+   {
+     return ((sig[0] == b1) && (sig[1] == b2));
+   }
+ 
+   /**
+    * This method pushes a string back onto input.
+    * <p>It is useful either as the expansion of an internal entity, 
+    * or for backtracking during the parse.
+    * <p>Call pushCharArray () to do the actual work.
+    * @param s The string to push back onto input.
+    * @see #pushCharArray
+    */
+   private void pushString(String ename, String s)
+     throws SAXException
+   {
+     char[] ch = s.toCharArray();
+     pushCharArray(ename, ch, 0, ch.length);
+   }
+ 
+   /**
+    * Push a new internal input source.
+    * <p>This method is useful for expanding an internal entity,
+    * or for unreading a string of characters.  It creates a new
+    * readBuffer containing the characters in the array, instead
+    * of characters converted from an input byte stream.
+    * @param ch The char array to push.
+    * @see #pushString
+    * @see #pushURL
+    * @see #readBuffer
+    * @see #sourceType
+    * @see #pushInput
+    */
+   private void pushCharArray(String ename, char[] ch, int start, int length)
+     throws SAXException
+   {
+     // Push the existing status
+     pushInput(ename);
+     if (ename != null && doReport)
+       {
+         dataBufferFlush();
+         handler.startInternalEntity(ename);
+       }
+     sourceType = INPUT_INTERNAL;
+     readBuffer = ch;
+     readBufferPos = start;
+     readBufferLength = length;
+     readBufferOverflow = -1;
+   }
+ 
+   /**
+    * Save the current input source onto the stack.
+    * <p>This method saves all of the global variables associated with
+    * the current input source, so that they can be restored when a new
+    * input source has finished.  It also tests for entity recursion.
+    * <p>The method saves the following global variables onto a stack
+    * using a fixed-length array:
+    * <ol>
+    * <li>sourceType
+    * <li>externalEntity
+    * <li>readBuffer
+    * <li>readBufferPos
+    * <li>readBufferLength
+    * <li>line
+    * <li>encoding
+    * </ol>
+    * @param ename The name of the entity (if any) causing the new input.
+    * @see #popInput
+    * @see #sourceType
+    * @see #externalEntity
+    * @see #readBuffer
+    * @see #readBufferPos
+    * @see #readBufferLength
+    * @see #line
+    * @see #encoding
+    */
+   private void pushInput(String ename)
+     throws SAXException
+   {
+     // Check for entity recursion.
+     if (ename != null)
+       {
+         Iterator entities = entityStack.iterator();
+         while (entities.hasNext())
+           {
+             String e = (String) entities.next();
+             if (e != null && e == ename)
+               {
+                 error("recursive reference to entity", ename, null);
+               }
+           }
+       }
+     entityStack.addLast(ename);
+     
+     // Don't bother if there is no current input.
+     if (sourceType == INPUT_NONE)
+       {
+         return;
+       }
+     
+     // Set up a snapshot of the current
+     // input source.
+     Input input = new Input();
+ 
+     input.sourceType = sourceType;
+     input.externalEntity = externalEntity;
+     input.readBuffer = readBuffer;
+     input.readBufferPos = readBufferPos;
+     input.readBufferLength = readBufferLength;
+     input.line = line;
+     input.encoding = encoding;
+     input.readBufferOverflow = readBufferOverflow;
+     input.is = is;
+     input.currentByteCount = currentByteCount;
+     input.column = column;
+     input.reader = reader;
+     
+     // Push it onto the stack.
+     inputStack.addLast(input);
+   }
+ 
+   /**
+    * Restore a previous input source.
+    * <p>This method restores all of the global variables associated with
+    * the current input source.
+    * @exception java.io.EOFException
+    *    If there are no more entries on the input stack.
+    * @see #pushInput
+    * @see #sourceType
+    * @see #externalEntity
+    * @see #readBuffer
+    * @see #readBufferPos
+    * @see #readBufferLength
+    * @see #line
+    * @see #encoding
+    */
+   private void popInput()
+     throws SAXException, IOException
+   {
+     String ename = (String) entityStack.removeLast();
+ 
+     if (ename != null && doReport)
+       {
+         dataBufferFlush();
+       }
+     switch (sourceType)
+       {
+       case INPUT_STREAM:
+         handler.endExternalEntity(ename);
+         is.close();
+         break;
+       case INPUT_READER:
+         handler.endExternalEntity(ename);
+         reader.close();
+         break;
+       case INPUT_INTERNAL:
+         if (ename != null && doReport)
+           {
+             handler.endInternalEntity(ename);
+           }
+         break;
+       }
+ 
+     // Throw an EOFException if there
+     // is nothing else to pop.
+     if (inputStack.isEmpty())
+       {
+         throw new EOFException("no more input");
+       }
+ 
+     Input input = (Input) inputStack.removeLast();
+ 
+     sourceType = input.sourceType;
+     externalEntity = input.externalEntity;
+     readBuffer = input.readBuffer;
+     readBufferPos = input.readBufferPos;
+     readBufferLength = input.readBufferLength;
+     line = input.line;
+     encoding = input.encoding;
+     readBufferOverflow = input.readBufferOverflow;
+     is = input.is;
+     currentByteCount = input.currentByteCount;
+     column = input.column;
+     reader = input.reader;
+   }
+   
+   /**
+    * Return true if we can read the expected character.
+    * <p>Note that the character will be removed from the input stream
+    * on success, but will be put back on failure.  Do not attempt to
+    * read the character again if the method succeeds.
+    * @param delim The character that should appear next.  For a
+    *        insensitive match, you must supply this in upper-case.
+    * @return true if the character was successfully read, or false if
+    *   it was not.
+    * @see #tryRead (String)
+    */
+   private boolean tryRead(char delim)
+     throws SAXException, IOException
+   {
+     char c;
+     
+     // Read the character
+     c = readCh();
+ 
+     // Test for a match, and push the character
+     // back if the match fails.
+     if (c == delim)
+       {
+         return true;
+       }
+     else
+       {
+         unread(c);
+         return false;
+       }
+   }
+ 
+   /**
+    * Return true if we can read the expected string.
+    * <p>This is simply a convenience method.
+    * <p>Note that the string will be removed from the input stream
+    * on success, but will be put back on failure.  Do not attempt to
+    * read the string again if the method succeeds.
+    * <p>This method will push back a character rather than an
+    * array whenever possible (probably the majority of cases).
+    * @param delim The string that should appear next.
+    * @return true if the string was successfully read, or false if
+    *   it was not.
+    * @see #tryRead (char)
+    */
+   private boolean tryRead(String delim)
+     throws SAXException, IOException
+   {
+     return tryRead(delim.toCharArray());
+   }
+ 
+   private boolean tryRead(char[] ch)
+     throws SAXException, IOException
+   {
+     char c;
+ 
+     // Compare the input, character-
+     // by character.
+     
+     for (int i = 0; i < ch.length; i++)
+       {
+         c = readCh();
+         if (c != ch[i])
+           {
+             unread(c);
+             if (i != 0)
+               {
+                 unread(ch, i);
+               }
+             return false;
+           }
+       }
+     return true;
+   }
+ 
+   /**
+    * Return true if we can read some whitespace.
+    * <p>This is simply a convenience method.
+    * <p>This method will push back a character rather than an
+    * array whenever possible (probably the majority of cases).
+    * @return true if whitespace was found.
+    */
+   private boolean tryWhitespace()
+     throws SAXException, IOException
+   {
+     char c;
+     c = readCh();
+     if (isWhitespace(c))
+       {
+         skipWhitespace();
+         return true;
+       }
+     else
+       {
+         unread(c);
+         return false;
+       }
+   }
+   
+   /**
+    * Read all data until we find the specified string.
+    * This is useful for scanning CDATA sections and PIs.
+    * <p>This is inefficient right now, since it calls tryRead ()
+    * for every character.
+    * @param delim The string delimiter
+    * @see #tryRead (String, boolean)
+    * @see #readCh
+    */
+   private void parseUntil(String delim)
+     throws SAXException, IOException
+   {
+     parseUntil(delim.toCharArray());
+   }
+ 
+   private void parseUntil(char[] delim)
+     throws SAXException, IOException
+   {
+     char c;
+     int startLine = line;
+     
+     try
+       {
+         while (!tryRead(delim))
+           {
+             c = readCh();
+             dataBufferAppend(c);
+           }
+       }
+     catch (EOFException e)
+       {
+         error("end of input while looking for delimiter "
+               + "(started on line " + startLine
+               + ')', null, new String(delim));
+       }
+   }
+ 
+   //////////////////////////////////////////////////////////////////////
+   // Low-level I/O.
+   //////////////////////////////////////////////////////////////////////
+   
+   /**
+    * Prefetch US-ASCII XML/text decl from input stream into read buffer.
+    * Doesn't buffer more than absolutely needed, so that when an encoding
+    * decl says we need to create an InputStreamReader, we can discard our
+    * buffer and reset().  Caller knows the first chars of the decl exist
+    * in the input stream.
+    */
+   private void prefetchASCIIEncodingDecl()
+     throws SAXException, IOException
+   {
+     int ch;
+     readBufferPos = readBufferLength = 0;
+     
+     is.mark(readBuffer.length);
+     while (true)
+       {
+         ch = is.read();
+         readBuffer[readBufferLength++] = (char) ch;
+         switch (ch)
+           {
+           case (int) '>':
+             return;
+           case -1:
+             error("file ends before end of XML or encoding declaration.",
+                   null, "?>");
+           }
+         if (readBuffer.length == readBufferLength)
+           {
+             error("unfinished XML or encoding declaration");
+           }
+       }
+   }
+ 
+   /**
+    * Read a chunk of data from an external input source.
+    * <p>This is simply a front-end that fills the rawReadBuffer
+    * with bytes, then calls the appropriate encoding handler.
+    * @see #encoding
+    * @see #rawReadBuffer
+    * @see #readBuffer
+    * @see #filterCR
+    * @see #copyUtf8ReadBuffer
+    * @see #copyIso8859_1ReadBuffer
+    * @see #copyUcs_2ReadBuffer
+    * @see #copyUcs_4ReadBuffer
+    */
+   private void readDataChunk()
+     throws SAXException, IOException
+   {
+     int count;
+     
+     // See if we have any overflow (filterCR sets for CR at end)
+     if (readBufferOverflow > -1)
+       {
+         readBuffer[0] = (char) readBufferOverflow;
+         readBufferOverflow = -1;
+         readBufferPos = 1;
+         sawCR = true;
+       }
+     else
+       {
+         readBufferPos = 0;
+         sawCR = false;
+       }
+ 
+     // input from a character stream.
+     if (sourceType == INPUT_READER)
+       {
+         count = reader.read(readBuffer,
+                             readBufferPos, READ_BUFFER_MAX - readBufferPos);
+         if (count < 0)
+           {
+             readBufferLength = readBufferPos;
+           }
+         else
+           {
+             readBufferLength = readBufferPos + count;
+           }
+         if (readBufferLength > 0)
+           {
+             filterCR(count >= 0);
+           }
+         sawCR = false;
+         return;
+       }
+     
+     // Read as many bytes as possible into the raw buffer.
+     count = is.read(rawReadBuffer, 0, READ_BUFFER_MAX);
+ 
+     // Dispatch to an encoding-specific reader method to populate
+     // the readBuffer.  In most parser speed profiles, these routines
+     // show up at the top of the CPU usage chart.
+     if (count > 0)
+       {
+         switch (encoding)
+           {
+             // one byte builtins
+           case ENCODING_ASCII:
+             copyIso8859_1ReadBuffer(count, (char) 0x0080);
+             break;
+           case ENCODING_UTF_8:
+             copyUtf8ReadBuffer(count);
+             break;
+           case ENCODING_ISO_8859_1:
+             copyIso8859_1ReadBuffer(count, (char) 0);
+             break;
+ 
+             // two byte builtins
+           case ENCODING_UCS_2_12:
+             copyUcs2ReadBuffer(count, 8, 0);
+             break;
+           case ENCODING_UCS_2_21:
+             copyUcs2ReadBuffer(count, 0, 8);
+             break;
+             
+             // four byte builtins
+           case ENCODING_UCS_4_1234:
+             copyUcs4ReadBuffer(count, 24, 16, 8, 0);
+             break;
+           case ENCODING_UCS_4_4321:
+             copyUcs4ReadBuffer(count, 0, 8, 16, 24);
+             break;
+           case ENCODING_UCS_4_2143:
+             copyUcs4ReadBuffer(count, 16, 24, 0, 8);
+             break;
+           case ENCODING_UCS_4_3412:
+             copyUcs4ReadBuffer(count, 8, 0, 24, 16);
+             break;
+           }
+       }
+     else
+       {
+         readBufferLength = readBufferPos;
+       }
+ 
+     readBufferPos = 0;
+     
+     // Filter out all carriage returns if we've seen any
+     // (including any saved from a previous read)
+     if (sawCR)
+       {
+         filterCR(count >= 0);
+         sawCR = false;
+         
+         // must actively report EOF, lest some CRs get lost.
+         if (readBufferLength == 0 && count >= 0)
+           {
+             readDataChunk();
+           }
+       }
+     
+     if (count > 0)
+       {
+         currentByteCount += count;
+       }
+   }
+   
+   /**
+    * Filter carriage returns in the read buffer.
+    * CRLF becomes LF; CR becomes LF.
+    * @param moreData true iff more data might come from the same source
+    * @see #readDataChunk
+    * @see #readBuffer
+    * @see #readBufferOverflow
+    */
+   private void filterCR(boolean moreData)
+   {
+     int i, j;
+ 
+     readBufferOverflow = -1;
+     
+ loop:
+     for (i = j = readBufferPos; j < readBufferLength; i++, j++)
+       {
+         switch (readBuffer[j])
+           {
+           case '\r':
+             if (j == readBufferLength - 1)
+               {
+                 if (moreData)
+                   {
+                     readBufferOverflow = '\r';
+                     readBufferLength--;
+                   }
+                 else   // CR at end of buffer
+                   {
+                     readBuffer[i++] = '\n';
+                   }
+                 break loop;
+               }
+             else if (readBuffer[j + 1] == '\n')
+               {
+                 j++;
+               }
+             readBuffer[i] = '\n';
+             break;
+ 
+           case '\n':
+           default:
+             readBuffer[i] = readBuffer[j];
+             break;
+           }
+       }
+     readBufferLength = i;
+   }
+ 
+   /**
+    * Convert a buffer of UTF-8-encoded bytes into UTF-16 characters.
+    * <p>When readDataChunk () calls this method, the raw bytes are in 
+    * rawReadBuffer, and the final characters will appear in 
+    * readBuffer.
+    * <p>Note that as of Unicode 3.1, good practice became a requirement,
+    * so that each Unicode character has exactly one UTF-8 representation.
+    * @param count The number of bytes to convert.
+    * @see #readDataChunk
+    * @see #rawReadBuffer
+    * @see #readBuffer
+    * @see #getNextUtf8Byte
+    */
+   private void copyUtf8ReadBuffer(int count)
+     throws SAXException, IOException
+   {
+     int i = 0;
+     int j = readBufferPos;
+     int b1;
+     char c = 0;
+     
+     /*
+     // check once, so the runtime won't (if it's smart enough)
+     if (count < 0 || count > rawReadBuffer.length)
+     throw new ArrayIndexOutOfBoundsException (Integer.toString (count));
+      */
+ 
+     while (i < count)
+       {
+         b1 = rawReadBuffer[i++];
+ 
+         // Determine whether we are dealing
+         // with a one-, two-, three-, or four-
+         // byte sequence.
+         if (b1 < 0)
+           {
+             if ((b1 & 0xe0) == 0xc0)
+               {
+                 // 2-byte sequence: 00000yyyyyxxxxxx = 110yyyyy 10xxxxxx
+                 c = (char) (((b1 & 0x1f) << 6)
+                             | getNextUtf8Byte(i++, count));
+                 if (c < 0x0080)
+                   {
+                     encodingError("Illegal two byte UTF-8 sequence",
+                                   c, 0);
+                   }
+                 
+                 //Sec 2.11
+                 // [1] the two-character sequence #xD #xA
+                 // [2] the two-character sequence #xD #x85
+                 if ((c == 0x0085 || c == 0x000a) && sawCR)
+                   {
+                     continue;
+                   }
+                 
+                 // Sec 2.11
+                 // [3] the single character #x85
+                 
+                 if (c == 0x0085 && xmlVersion == XML_11)
+                   {
+                     readBuffer[j++] = '\r';
+                   }
+               }
+             else if ((b1 & 0xf0) == 0xe0)
+               {
+                 // 3-byte sequence:
+                 // zzzzyyyyyyxxxxxx = 1110zzzz 10yyyyyy 10xxxxxx
+                 // most CJKV characters
+                 c = (char) (((b1 & 0x0f) << 12) |
+                             (getNextUtf8Byte(i++, count) << 6) |
+                             getNextUtf8Byte(i++, count));
+                 //sec 2.11
+                 //[4] the single character #x2028
+                 if (c == 0x2028 && xmlVersion == XML_11)
+                   {
+                     readBuffer[j++] = '\r';
+                     sawCR = true;
+                     continue;
+                   }
+                 if (c < 0x0800 || (c >= 0xd800 && c <= 0xdfff))
+                   {
+                     encodingError("Illegal three byte UTF-8 sequence",
+                                   c, 0);
+                   }
+               }
+             else if ((b1 & 0xf8) == 0xf0)
+               {
+                 // 4-byte sequence: 11101110wwwwzzzzyy + 110111yyyyxxxxxx
+                 //     = 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
+                 // (uuuuu = wwww + 1)
+                 // "Surrogate Pairs" ... from the "Astral Planes"
+                 // Unicode 3.1 assigned the first characters there
+                 int iso646 = b1 & 07;
+                 iso646 = (iso646 << 6) + getNextUtf8Byte(i++, count);
+                 iso646 = (iso646 << 6) + getNextUtf8Byte(i++, count);
+                 iso646 = (iso646 << 6) + getNextUtf8Byte(i++, count);
+                 
+                 if (iso646 <= 0xffff)
+                   {
+                     encodingError("Illegal four byte UTF-8 sequence",
+                                   iso646, 0);
+                   }
+                 else
+                   {
+                     if (iso646 > 0x0010ffff)
+                       {
+                         encodingError("UTF-8 value out of range for Unicode",
+                                       iso646, 0);
+                       }
+                     iso646 -= 0x010000;
+                     readBuffer[j++] = (char) (0xd800 | (iso646 >> 10));
+                     readBuffer[j++] = (char) (0xdc00 | (iso646 & 0x03ff));
+                     continue;
+                   }
+               }
+             else
+               {
+                 // The five and six byte encodings aren't supported;
+                 // they exceed the Unicode (and XML) range.
+                 encodingError("unsupported five or six byte UTF-8 sequence",
+                               0xff & b1, i);
+                 // NOTREACHED
+                 c = 0;
+               }
+           }
+         else
+           {
+             // 1-byte sequence: 000000000xxxxxxx = 0xxxxxxx
+             // (US-ASCII character, "common" case, one branch to here)
+             c = (char) b1;
+           }
+         readBuffer[j++] = c;
+         if (c == '\r')
+           {
+             sawCR = true;
+           }
+       }
+     // How many characters have we read?
+     readBufferLength = j;
+   }
+    
+   /**
+    * Return the next byte value in a UTF-8 sequence.
+    * If it is not possible to get a byte from the current
+    * entity, throw an exception.
+    * @param pos The current position in the rawReadBuffer.
+    * @param count The number of bytes in the rawReadBuffer
+    * @return The significant six bits of a non-initial byte in
+    *   a UTF-8 sequence.
+    * @exception EOFException If the sequence is incomplete.
+    */
+   private int getNextUtf8Byte(int pos, int count)
+     throws SAXException, IOException
+   {
+     int val;
+     
+     // Take a character from the buffer
+     // or from the actual input stream.
+     if (pos < count)
+       {
+         val = rawReadBuffer[pos];
+       }
+     else
+       {
+         val = is.read();
+         if (val == -1)
+           {
+             encodingError("unfinished multi-byte UTF-8 sequence at EOF",
+                           -1, pos);
+           }
+       }
+ 
+     // Check for the correct bits at the start.
+     if ((val & 0xc0) != 0x80)
+       {
+         encodingError("bad continuation of multi-byte UTF-8 sequence",
+                       val, pos + 1);
+       }
+ 
+     // Return the significant bits.
+     return (val & 0x3f);
+   }
+ 
+   /**
+    * Convert a buffer of US-ASCII or ISO-8859-1-encoded bytes into
+    * UTF-16 characters.
+    *
+    * <p>When readDataChunk () calls this method, the raw bytes are in 
+    * rawReadBuffer, and the final characters will appear in 
+    * readBuffer.
+    *
+    * @param count The number of bytes to convert.
+    * @param mask For ASCII conversion, 0x7f; else, 0xff.
+    * @see #readDataChunk
+    * @see #rawReadBuffer
+    * @see #readBuffer
+    */
+   private void copyIso8859_1ReadBuffer(int count, char mask)
+     throws IOException
+   {
+     int i, j;
+     for (i = 0, j = readBufferPos; i < count; i++, j++)
+       {
+         char c = (char) (rawReadBuffer[i] & 0xff);
+         if ((c & mask) != 0)
+           {
+             throw new CharConversionException("non-ASCII character U+"
+                                               + Integer.toHexString(c));
+           }
+         if (c == 0x0085 && xmlVersion == XML_11)
+           {
+             c = '\r';
+           }
+         readBuffer[j] = c;
+         if (c == '\r')
+           {
+             sawCR = true;
+           }
+       }
+     readBufferLength = j;
+   }
+ 
+   /**
+    * Convert a buffer of UCS-2-encoded bytes into UTF-16 characters
+    * (as used in Java string manipulation).
+    *
+    * <p>When readDataChunk () calls this method, the raw bytes are in 
+    * rawReadBuffer, and the final characters will appear in 
+    * readBuffer.
+    * @param count The number of bytes to convert.
+    * @param shift1 The number of bits to shift byte 1.
+    * @param shift2 The number of bits to shift byte 2
+    * @see #readDataChunk
+    * @see #rawReadBuffer
+    * @see #readBuffer
+    */
+   private void copyUcs2ReadBuffer(int count, int shift1, int shift2)
+     throws SAXException
+   {
+     int j = readBufferPos;
+     
+     if (count > 0 && (count % 2) != 0)
+       {
+         encodingError("odd number of bytes in UCS-2 encoding", -1, count);
+       }
+     // The loops are faster with less internal brancing; hence two
+     if (shift1 == 0)
+       {  // "UTF-16-LE"
+         for (int i = 0; i < count; i += 2)
+           {
+             char c = (char) (rawReadBuffer[i + 1] << 8);
+             c |= 0xff & rawReadBuffer[i];
+             readBuffer[j++] = c;
+             if (c == '\r')
+               {
+                 sawCR = true;
+               }
+           }
+       }
+     else
+       {  // "UTF-16-BE"
+         for (int i = 0; i < count; i += 2)
+           {
+             char c = (char) (rawReadBuffer[i] << 8);
+             c |= 0xff & rawReadBuffer[i + 1];
+             readBuffer[j++] = c;
+             if (c == '\r')
+               {
+                 sawCR = true;
+               }
+           }
+       }
+     readBufferLength = j;
+   }
+ 
+   /**
+    * Convert a buffer of UCS-4-encoded bytes into UTF-16 characters.
+    *
+    * <p>When readDataChunk () calls this method, the raw bytes are in 
+    * rawReadBuffer, and the final characters will appear in 
+    * readBuffer.
+    * <p>Java has Unicode chars, and this routine uses surrogate pairs
+    * for ISO-10646 values between 0x00010000 and 0x000fffff.  An
+    * exception is thrown if the ISO-10646 character has no Unicode
+    * representation.
+    *
+    * @param count The number of bytes to convert.
+    * @param shift1 The number of bits to shift byte 1.
+    * @param shift2 The number of bits to shift byte 2
+    * @param shift3 The number of bits to shift byte 2
+    * @param shift4 The number of bits to shift byte 2
+    * @see #readDataChunk
+    * @see #rawReadBuffer
+    * @see #readBuffer
+    */
+   private void copyUcs4ReadBuffer(int count, int shift1, int shift2,
+                                   int shift3, int shift4)
+     throws SAXException
+   {
+     int j = readBufferPos;
+     
+     if (count > 0 && (count % 4) != 0)
+       {
+         encodingError("number of bytes in UCS-4 encoding " +
+                       "not divisible by 4",
+                       -1, count);
+       }
+     for (int i = 0; i < count; i += 4)
+       {
+         int value = (((rawReadBuffer [i] & 0xff) << shift1) |
+                      ((rawReadBuffer [i + 1] & 0xff) << shift2) |
+                      ((rawReadBuffer [i + 2] & 0xff) << shift3) |
+                      ((rawReadBuffer [i + 3] & 0xff) << shift4));
+         if (value < 0x0000ffff)
+           {
+             readBuffer [j++] = (char) value;
+             if (value == (int) '\r')
+               {
+                 sawCR = true;
+               }
+           }
+         else if (value < 0x0010ffff)
+           {
+             value -= 0x010000;
+             readBuffer[j++] = (char) (0xd8 | ((value >> 10) & 0x03ff));
+             readBuffer[j++] = (char) (0xdc | (value & 0x03ff));
+           }
+         else
+           {
+             encodingError("UCS-4 value out of range for Unicode",
+                           value, i);
+           }
+       }
+     readBufferLength = j;
+   }
+ 
+   /**
+    * Report a character encoding error.
+    */
+   private void encodingError(String message, int value, int offset)
+     throws SAXException
+   {
+     if (value != -1)
+       {
+         message = message + " (character code: 0x" +
+           Integer.toHexString(value) + ')';
+         error(message);
+       }
+   }
+   
+   //////////////////////////////////////////////////////////////////////
+   // Local Variables.
+   //////////////////////////////////////////////////////////////////////
+   
+   /**
+    * Re-initialize the variables for each parse.
+    */
+   private void initializeVariables()
+   {
+     // First line
+     line = 1;
+     column = 0;
+     
+     // Set up the buffers for data and names
+     dataBufferPos = 0;
+     dataBuffer = new char[DATA_BUFFER_INITIAL];
+     nameBufferPos = 0;
+     nameBuffer = new char[NAME_BUFFER_INITIAL];
+ 
+     // Set up the DTD hash tables
+     elementInfo = new HashMap();
+     entityInfo = new HashMap();
+     notationInfo = new HashMap();
+     skippedPE = false;
+ 
+     // Set up the variables for the current
+     // element context.
+     currentElement = null;
+     currentElementContent = CONTENT_UNDECLARED;
+     
+     // Set up the input variables
+     sourceType = INPUT_NONE;
+     inputStack = new LinkedList();
+     entityStack = new LinkedList();
+     externalEntity = null;
+     tagAttributePos = 0;
+     tagAttributes = new String[100];
+     rawReadBuffer = new byte[READ_BUFFER_MAX];
+     readBufferOverflow = -1;
+ 
+     scratch = new InputSource();
+ 
+     inLiteral = false;
+     expandPE = false;
+     peIsError = false;
+     
+     doReport = false;
+     
+     inCDATA = false;
+     
+     symbolTable = new Object[SYMBOL_TABLE_LENGTH][];
+   }
+ 
+   static class ExternalIdentifiers
+   {
+ 
+     String publicId;
+     String systemId;
+     String baseUri;
+ 
+     ExternalIdentifiers()
+     {
+     }
+ 
+     ExternalIdentifiers(String publicId, String systemId, String baseUri)
+     {
+       this.publicId = publicId;
+       this.systemId = systemId;
+       this.baseUri = baseUri;
+     }
+     
+   }
+ 
+   static class EntityInfo
+   {
+ 
+     int type;
+     ExternalIdentifiers ids;
+     String value;
+     String notationName;
+     
+   }
+ 
+   static class AttributeDecl
+   {
+     
+     String type;
+     String value;
+     int valueType;
+     String enumeration;
+     String defaultValue;
+ 
+   }
+ 
+   static class ElementDecl
+   {
+     
+     int contentType;
+     String contentModel;
+     HashMap attributes;
+   
+   }
+  
+   static class Input
+   {
+     
+     int sourceType;
+     URLConnection externalEntity;
+     char[] readBuffer;
+     int readBufferPos;
+     int readBufferLength;
+     int line;
+     int encoding;
+     int readBufferOverflow;
+     InputStream is;
+     int currentByteCount;
+     int column;
+     Reader reader;
+     
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/XmlReader.java gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/XmlReader.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/XmlReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/XmlReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,374 ----
+ /* XmlReader.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.aelfred2;
+ 
+ import java.io.IOException;
+ import java.util.Locale;
+ 
+ import org.xml.sax.*;
+ import org.xml.sax.ext.*;
+ 
+ import gnu.xml.pipeline.EventFilter;
+ import gnu.xml.pipeline.ValidationConsumer;
+ 
+ 
+ /**
+  * This SAX2 parser optionally layers a validator over the &AElig;lfred2
+  * SAX2 parser.  While this will not evaluate every XML validity constraint,
+  * it does support all the validity constraints that are of any real utility
+  * outside the strict SGML-compatible world.  See the documentation for the
+  * SAXDriver class for information about the SAX2 features and properties
+  * that are supported, and documentation for the ValidationConsumer for
+  * information about what validity constraints may not be supported.
+  * (&AElig;lfred2 tests some of those, even in non-validating mode, to
+  * achieve better conformance.)
+  *
+  * <p> Note that due to its internal construction, you can't change most
+  * handlers until parse() returns.  This diverges slightly from SAX, which
+  * expects later binding to be supported.  Early binding involves less
+  * runtime overhead, which is an issue for event pipelines as used inside
+  * this parser.  Rather than relying on the parser to handle late binding
+  * to your own handlers, do it yourself.
+  *
+  * @see SAXDriver
+  * @see gnu.xml.pipeline.ValidationConsumer
+  *
+  * @author David Brownell
+  */
+ public final class XmlReader
+   implements XMLReader
+ {
+ 
+   static class FatalErrorHandler
+     extends DefaultHandler2
+   {
+     
+     public void error(SAXParseException e)
+       throws SAXException
+     {
+       throw e;
+     }
+     
+   }
+   
+   private SAXDriver aelfred2 = new SAXDriver();
+   private EventFilter filter = new EventFilter();
+   private boolean isValidating;
+   private boolean active;
+ 
+   /**
+    * Constructs a SAX Parser.
+    */
+   public XmlReader()
+   {
+   }
+ 
+   /**
+    * Constructs a SAX Parser, optionally treating validity errors
+    * as if they were fatal errors.
+    */
+   public XmlReader(boolean invalidIsFatal)
+   {
+     if (invalidIsFatal)
+       {
+         setErrorHandler(new FatalErrorHandler());
+       }
+   }
+   
+   /**
+    * <b>SAX2</b>: Returns the object used to report the logical
+    * content of an XML document.
+    */
+   public ContentHandler getContentHandler()
+   {
+     return filter.getContentHandler();
+   }
+ 
+   /**
+    * <b>SAX2</b>: Assigns the object used to report the logical
+    * content of an XML document.
+    * @exception IllegalStateException if called mid-parse
+    */
+   public void setContentHandler(ContentHandler handler)
+   {
+     if (active)
+       {
+         throw new IllegalStateException("already parsing");
+       }
+     filter.setContentHandler(handler);
+   }
+ 
+   /**
+    * <b>SAX2</b>: Returns the object used to process declarations related
+    * to notations and unparsed entities.
+    */
+   public DTDHandler getDTDHandler()
+   {
+     return filter.getDTDHandler();
+   }
+ 
+   /**
+    * <b>SAX1</b> Assigns DTD handler
+    * @exception IllegalStateException if called mid-parse
+    */
+   public void setDTDHandler(DTDHandler handler)
+   {
+     if (active)
+       {
+         throw new IllegalStateException("already parsing");
+       }
+     filter.setDTDHandler(handler);
+   }
+   
+   /**
+    * <b>SAX2</b>: Returns the object used when resolving external
+    * entities during parsing (both general and parameter entities).
+    */
+   public EntityResolver getEntityResolver()
+   {
+     return aelfred2.getEntityResolver();
+   }
+ 
+   /**
+    * <b>SAX1</b> Assigns parser's entity resolver
+    */
+   public void setEntityResolver(EntityResolver handler)
+   {
+     aelfred2.setEntityResolver(handler);
+   }
+ 
+   /**
+    * <b>SAX2</b>: Returns the object used to receive callbacks for XML
+    * errors of all levels (fatal, nonfatal, warning); this is never null;
+    */
+   public ErrorHandler getErrorHandler()
+   {
+     return aelfred2.getErrorHandler();
+   }
+ 
+   /**
+    * <b>SAX1</b> Assigns error handler
+    * @exception IllegalStateException if called mid-parse
+    */
+   public void setErrorHandler(ErrorHandler handler)
+   {
+     if (active)
+       {
+         throw new IllegalStateException("already parsing");
+       }
+     aelfred2.setErrorHandler(handler);
+   }
+ 
+   /**
+    * <b>SAX2</b>:  Assigns the specified property.
+    * @exception IllegalStateException if called mid-parse
+    */
+   public void setProperty(String propertyId, Object value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     if (active)
+       {
+         throw new IllegalStateException("already parsing");
+       }
+     if (getProperty(propertyId) != value)
+       {
+         filter.setProperty(propertyId, value);
+       }
+   }
+ 
+   /**
+    * <b>SAX2</b>:  Returns the specified property.
+    */
+   public Object getProperty(String propertyId)
+     throws SAXNotRecognizedException
+   {
+     if ((SAXDriver.PROPERTY + "declaration-handler").equals(propertyId)
+         || (SAXDriver.PROPERTY + "lexical-handler").equals(propertyId))
+       {
+         return filter.getProperty(propertyId);
+       }
+     throw new SAXNotRecognizedException(propertyId);
+   }
+   
+   private void forceValidating()
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     aelfred2.setFeature(SAXDriver.FEATURE + "namespace-prefixes",
+                         true);
+     aelfred2.setFeature(SAXDriver.FEATURE + "external-general-entities",
+                         true);
+     aelfred2.setFeature(SAXDriver.FEATURE + "external-parameter-entities",
+                         true);
+   }
+ 
+   /**
+    * <b>SAX2</b>:  Sets the state of features supported in this parser.
+    * Note that this parser requires reporting of namespace prefixes when
+    * validating.
+    */
+   public void setFeature(String featureId, boolean state)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     boolean value = getFeature(featureId);
+ 
+     if (state == value)
+       {
+         return;
+       }
+ 
+     if ((SAXDriver.FEATURE + "validation").equals(featureId))
+       {
+         if (active)
+           {
+             throw new SAXNotSupportedException("already parsing");
+           }
+         if (state)
+           {
+             forceValidating();
+           }
+         isValidating = state;
+       }
+     else
+       {
+         aelfred2.setFeature(featureId, state);
+       }
+   }
+ 
+   /**
+    * <b>SAX2</b>: Tells whether this parser supports the specified feature.
+    * At this time, this directly parallels the underlying SAXDriver,
+    * except that validation is optionally supported.
+    *
+    * @see SAXDriver
+    */
+   public boolean getFeature(String featureId)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     if ((SAXDriver.FEATURE + "validation").equals(featureId))
+       {
+         return isValidating;
+       }
+ 
+     return aelfred2.getFeature(featureId);
+   }
+ 
+   /**
+    * <b>SAX1</b>: Sets the locale used for diagnostics; currently,
+    * only locales using the English language are supported.
+    * @param locale The locale for which diagnostics will be generated
+    */
+   public void setLocale(Locale locale)
+     throws SAXException
+   {
+     aelfred2.setLocale(locale);
+   }
+ 
+   /**
+    * <b>SAX1</b>: Preferred API to parse an XML document, using a
+    * system identifier (URI).
+      */
+   public void parse(String systemId)
+     throws SAXException, IOException
+   {
+     parse(new InputSource(systemId));
+   }
+ 
+   /**
+    * <b>SAX1</b>: Underlying API to parse an XML document, used
+    * directly when no URI is available.  When this is invoked,
+    * and the parser is set to validate, some features will be
+    * automatically reset to appropriate values:  for reporting
+    * namespace prefixes, and incorporating external entities.
+    *
+    * @param source The XML input source.
+    *
+    * @exception IllegalStateException if called mid-parse
+    * @exception SAXException The handlers may throw any SAXException,
+    *  and the parser normally throws SAXParseException objects.
+    * @exception IOException IOExceptions are normally through through
+    *  the parser if there are problems reading the source document.
+    */
+   public void parse(InputSource source)
+     throws SAXException, IOException
+   {
+     EventFilter next;
+     boolean nsdecls;
+ 
+     synchronized (aelfred2)
+       {
+         if (active)
+           {
+             throw new IllegalStateException("already parsing");
+           }
+         active = true;
+       }
+ 
+     // set up the output pipeline
+     if (isValidating)
+       {
+         forceValidating();
+         next = new ValidationConsumer(filter);
+       }
+     else
+       {
+         next = filter;
+       }
+ 
+     // connect pipeline and error handler
+     // don't let _this_ call to bind() affect xmlns* attributes
+     nsdecls = aelfred2.getFeature(SAXDriver.FEATURE + "namespace-prefixes");
+     EventFilter.bind(aelfred2, next);
+     if (!nsdecls)
+       {
+         aelfred2.setFeature(SAXDriver.FEATURE + "namespace-prefixes",
+                             false);
+       }
+ 
+     // parse, clean up
+     try
+       {
+         aelfred2.parse(source);
+       }
+     finally
+       {
+         active = false;
+       }
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/package.html gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/package.html
*** gcc-4.0.2/libjava/classpath/gnu/xml/aelfred2/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/aelfred2/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,506 ----
+ <!DOCTYPE html PUBLIC
+ 	'-//W3C//DTD XHTML 1.0 Transitional//EN'
+ 	'http://www.w3.org/TR/xhtml1/DTD/transitional.dtd'>
+ 
+ <html><head>
+     <title>package overview</title>
+ <!--
+ /*
+  * Copyright (C) 1999,2000,2001 The Free Software Foundation, Inc.
+  */
+ -->
+ </head><body>
+ 
+ <p> This package contains &AElig;lfred2, which includes an
+ enhanced SAX2-compatible version of the &AElig;lfred
+ non-validating XML parser, a modular (and hence optional) 
+ DTD validating parser, and modular (and hence optional)
+ JAXP glue to those.
+ Use these like any other SAX2 parsers. </p>
+ 
+ <ul>
+     <li><a href="#about">About &AElig;lfred</a><ul>
+ 	<li><a href="#principles">Design Principles</a></li>
+ 	<li><a href="#name">About the Name &AElig;lfred</a></li>
+ 	<li><a href="#encodings">Character Encodings</a></li>
+ 	<li><a href="#violations">Known Conformance Violations</a></li>
+ 	<li><a href="#copyright">Licensing</a></li>
+ 	</ul></li>
+ 
+     <li><a href="#changes">Changes Since the Last Microstar Release</a><ul>
+ 	<li><a href="#sax2">SAX2 Support</a></li>
+ 	<li><a href="#validation">Validation</a></li>
+ 	<li><a href="#smaller">You Want Smaller?</a></li>
+ 	<li><a href="#bugfixes">Bugs Fixed</a></li>
+ 	</ul></li>
+ 
+ </ul>
+ 
+ <h2><a name="about">About &AElig;lfred</a></h2>
+ 
+ <p>&AElig;lfred is a XML parser written in the java programming language.
+ 
+ <h3><a name="principles">Design Principles</a></h3>
+ 
+ <p>In most Java applets and applications, XML should not be the central
+ feature; instead, XML is the means to another end, such as loading
+ configuration information, reading meta-data, or parsing transactions.</p>
+ 
+ <p> When an XML parser is only a single component of a much larger
+ program, it cannot be large, slow, or resource-intensive.  With Java
+ applets, in particular, code size is a significant issue.  The standard
+ modem is still not operating at 56 Kbaud, or sometimes even with data
+ compression.  Assuming an uncompressed 28.8 Kbaud modem, only about
+ 3 KBytes can be downloaded in one second; compression often doubles
+ that speed, but a V.90 modem may not provide another doubling.  When
+ used with embedded processors, similar size concerns apply.  </p>
+ 
+ <p> &AElig;lfred is designed for easy and efficient use over the Internet,
+ based on the following principles: </p> <ol>
+ 
+ <li> &AElig;lfred must be as small as possible, so that it doesn't add too
+    much to an applet's download time. </li>
+ 
+ <li> &AElig;lfred must use as few class files as possible, to minimize the
+    number of HTTP connections necessary.  (The use of JAR files has made this
+    be less of a concern.) </li>
+ 
+ <li> &AElig;lfred must be compatible with most or all Java implementations
+    and platforms. (Write once, run anywhere.) </li>
+ 
+ <li> &AElig;lfred must use as little memory as possible, so that it does
+    not take away resources from the rest of your program.  (It doesn't force
+    you to use DOM or a similar costly data structure API.)</li>
+ 
+ <li> &AElig;lfred must run as fast as possible, so that it does not slow down
+    the rest of your program. </li>
+ 
+ <li> &AElig;lfred must produce correct output for well-formed and valid
+    documents, but need not reject every document that is not valid or
+    not well-formed. (In &AElig;lfred2, correctness was a bigger concern
+    than in the original version; and a validation option is available.) </li>
+ 
+ <li> &AElig;lfred must provide full internationalization from the first
+     release.  (&AElig;lfred2 now automatically handles all encodings
+     supported by the underlying JVM; previous versions handled only
+     UTF-8, UTF_16, ASCII, and ISO-8859-1.)</li>
+ 
+ </ol>
+ 
+ <p>As you can see from this list, &AElig;lfred is designed for production
+ use, but neither validation nor perfect conformance was a requirement.
+ Good validating parsers exist, including one in this package,
+ and you should use them as appropriate.  (See conformance reviews
+ available at <a href="http://www.xml.com/">http://www.xml.com</a>)
+ </p>
+ 
+ <p> One of the main goals of &AElig;lfred2 was to significantly improve
+ conformance, while not significantly affecting the other goals stated above.
+ Since the only use of this parser is with SAX, some classes could be
+ removed, and so the overall size of &AElig;lfred was actually reduced.
+ Subsequent performance work produced a notable speedup (over twenty
+ percent on larger files).  That is, the tradeoffs between speed, size, and
+ conformance were re-targeted towards conformance and support of newer APIs
+ (SAX2), with a a positive performance impact. </p>
+ 
+ <p> The role anticipated for this version of &AElig;lfred is as a
+ lightweight Free Software SAX parser that can be used in essentially every
+ Java program where the handful of conformance violations (noted below)
+ are acceptable.
+ That certainly includes applets, and
+ nowadays one must also mention embedded systems as being even more
+ size-critical.
+ At this writing, all parsers that are more conformant are
+ significantly larger, even when counting the optional
+ validation support in this version of &AElig;lfred. </p>
+ 
+ 
+ <h3><a name="name">About the Name <em>&AElig;lfred</em></a></h3>
+ 
+ <p>&AElig;lfred the Great (AElfred in ASCII) was King of Wessex, and
+ some say of King of England, at the time of his death in 899 AD.
+ &AElig;lfred introduced a wide-spread literacy program in the hope that
+ his people would learn to read English, at least, if Latin was too
+ difficult for them.  This &AElig;lfred hopes to bring another sort of
+ literacy to Java, using XML, at least, if full SGML is too difficult.</p>
+ 
+ <p>The initial &AElig; ligature ("AE)" is also a reminder that XML is
+ not limited to ASCII.</p>
+ 
+ 
+ <h3><a name="encodings">Character Encodings</a></h3>
+ 
+ <p> The &AElig;lfred parser currently builds in support for a handful
+ of input encodings.  Of course these include UTF-8 and UTF-16, which
+ all XML parsers are required to support:</p> <ul>
+ 
+     <li> UTF-8 ... the standard eight bit encoding, used unless
+     you provide an encoding declaration or a MIME charset tag.</li>
+ 
+     <li> US-ASCII ... an extremely common seven bit encoding,
+     which happens to be a subset of UTF-8 and ISO-8859-1 as well
+     as many other encodings.  XHTML web pages using US-ASCII
+     (without an encoding declaration) are probably more
+     widely interoperable than those in any other encoding. </li>
+ 
+     <li> ISO-8859-1 ... includes accented characters used in
+     much of western Europe (but excluding the Euro currency
+     symbol).</li>
+ 
+     <li> UTF-16 ... with several variants, this encodes each
+     sixteen bit Unicode character in sixteen bits of output.
+     Variants include UTF-16BE (big endian, no byte order mark),
+     UTF-16LE (little endian, no byte order mark), and
+     ISO-10646-UCS-2 (an older and less used encoding, using a
+     version of Unicode without surrogate pairs).  This is
+     essentially the native encoding used by Java.  </li>
+ 
+     <li> ISO-10646-UCS-4 ... a seldom-used four byte encoding,
+     also known as UTF-32BE.  Four byte order variants are supported,
+     including one known as UTF-32LE.  Some operating systems
+     standardized on UCS-4 despite its significant size penalty,
+     in anticipation that Unicode (even with surrogate pairs)
+     would eventually become limiting.  UCS-4 permits encoding
+     of non-Unicode characters, which Java can't represent (and
+     XML doesn't allow).  
+     </li>
+ 
+     </ul>
+ 
+ <p> If you use any encoding other than UTF-8 or UTF-16 you should
+ make sure to label your data appropriately: </p>
+ 
+ <blockquote>
+ &lt;?xml version="1.0" encoding="<b>ISO-8859-15</b>"?&gt;
+ </blockquote>
+ 
+ <p> Encodings accessed through <code>java.io.InputStreamReader</code>
+ are now fully supported for both external labels (such as MIME types)
+ and internal types (as shown above).
+ There is one limitation in the support for internal labels:
+ the encodings must be derived from the US-ASCII encoding,
+ the EBCDIC family of encodings is not recognized.
+ Note that Java defines its
+ own encoding names, which don't always correspond to the standard
+ Internet encoding names defined by the IETF/IANA, and that Java
+ may even <em>require</em> use of nonstandard encoding names.
+ Please report
+ such problems; some of them can be worked around in this parser,
+ and many can be worked around by using external labels.
+ </p>
+ 
+ <p>Note that if you are using the Euro symbol with an fixed length
+ eight bit encoding, you should probably be using the encoding label
+ <em>iso-8859-15</em> or, with a Microsoft OS, <em>cp-1252</em>.
+ Of course, UTF-8 and UTF-16 handle the Euro symbol directly.
+ </p>
+ 
+ 
+ <h3><a name="violations">Known Conformance Violations</a></h3>
+ 
+ <p>Known conformance issues should be of negligible importance for 
+ most applications, and include: </p><ul>
+     
+     <li> Rather than following the voluminous "Appendix B" rules about
+     what characters may appear in names (and name tokens), the Unicode
+     rules embedded in <em>java.lang.Character</em> are used.
+     This means mostly that some names are inappropriately accepted,
+     though a few are inappropriately rejected.  (It's much simpler
+     to avoid that much special case code.  Recent OASIS/NIST test
+     cases may have these rules be realistically testable.) </li>
+ 
+     <li> Text containing "]]&gt;" is not rejected unless it fully resides
+     in an internal buffer ... which is, thankfully, the typical case.  This
+     text is illegal, but sometimes appears in illegal attempts to
+     nest CDATA sections.  (Not catching that boundary condition
+     substantially simplifies parsing text.) </li>
+ 
+     <li> Surrogate characters that aren't correctly paired are ignored
+     rather than rejected, unless they were encoded using UTF-8.  (This
+     simplifies parsing text.)  Unicode 3.1 assigned the first characters
+     to those character codes, in early 2001, so few documents (or tools)
+     use such characters in any case. </li>
+ 
+     <li> Declarations following references to an undefined parameter
+     entity reference are not ignored. (Not maintaining and using state
+     about this validity error simplifies declaration handling; few
+     XML parsers address this constraint in any case.) </li>
+ 
+     <li> Well formedness constraints for general entity references
+     are not enforced.  (The code to handle the "content" production
+     is merged with the element parsing code, making it hard to reuse
+     for this additional situation.) </li>
+ 
+ </ul>
+ 
+ <p> When tested against the July 12, 1999 version of the OASIS
+ XML Conformance test suite, an earlier version passed 1057 of 1067 tests.
+ That contrasts with the original version, which passed 867.  The
+ current parser is top-ranked in terms of conformance, as is its
+ validating sibling (which has some additional conformance violations
+ imposed on it by SAX2 API deficiencies as well as some of the more
+ curious SGML layering artifacts found in the XML specification). </p>
+ 
+ <p> The XML 1.0 specification itself was not without problems,
+ and after some delays the W3C has come out with a revised
+ "second edition" specification.  While that doesn't resolve all
+ the problems identified the XML specification, many of the most
+ egregious problems have been resolved.  (You still need to drink
+ magic Kool-Aid before some DTD-related issues make sense.)
+ To the extent possible, this parser conforms to that second
+ edition specification, and does well against corrected versions
+ of the OASIS/NIST XML conformance test cases.  See <a href=
+ "http://xmlconf.sourceforge.net">http://xmlconf.sourceforge.net</a>
+ for more information about SAX2/XML conformance testing. </p>
+ 
+ 
+ <h3><a name="copyright">Copyright and distribution terms</a></h3>
+ 
+ <p>
+ The software in this package is distributed under the GNU General Public
+ License (with a special exception described below).
+ </p>
+ 
+ <p>
+ A copy of GNU General Public License (GPL) is included in this distribution,
+ in the file COPYING.  If you do not have the source code, it is available at:
+ 
+     <a href="http://www.gnu.org/software/classpath/">http://www.gnu.org/software/classpath/</a>
+ </p>
+ 
+ <pre>
+   Linking this library statically or dynamically with other modules is
+   making a combined work based on this library.  Thus, the terms and
+   conditions of the GNU General Public License cover the whole
+   combination.
+ 
+   As a special exception, the copyright holders of this library give you
+   permission to link this library with independent modules to produce an
+   executable, regardless of the license terms of these independent
+   modules, and to copy and distribute the resulting executable under
+   terms of your choice, provided that you also meet, for each linked
+   independent module, the terms and conditions of the license of that
+   module.  An independent module is a module which is not derived from
+   or based on this library.  If you modify this library, you may extend
+   this exception to your version of the library, but you are not
+   obligated to do so.  If you do not wish to do so, delete this
+   exception statement from your version.
+ 
+   Parts derived from code which carried the following notice:
+ 
+   Copyright (c) 1997, 1998 by Microstar Software Ltd.
+ 
+   AElfred is free for both commercial and non-commercial use and
+   redistribution, provided that Microstar's copyright and disclaimer are
+   retained intact.  You are free to modify AElfred for your own use and
+   to redistribute AElfred with your modifications, provided that the
+   modifications are clearly documented.
+ 
+   This program 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.  Please use it AT
+   YOUR OWN RISK.
+ </pre>
+ 
+ <p> Some of this documentation was modified from the original
+ &AElig;lfred README.txt file.  All of it has been updated. </p>
+ 
+ </p>
+ 
+ 
+ <h2><a name="changes">Changes Since the last Microstar Release</a></h2>
+ 
+ <p> As noted above, Microstar has not updated this parser since
+ the summer of 1998, when it released version 1.2a on its web site.
+ This release is intended to benefit the developer community by
+ refocusing the API on SAX2, and improving conformance to the extent
+ that most developers should not need to use another XML parser.  </p>
+ 
+ <p> The code has been cleaned up (referring to the XML 1.0 spec in
+ all the production numbers in 
+ comments, rather than some preliminary draft, for one example) and
+ has been sped up a bit as well.
+ JAXP support has been added, although developers are still
+ strongly encouraged to use the SAX2 APIs directly.  </p>
+ 
+ 
+ <h3><a name="sax2">SAX2 Support</a></h3>
+ 
+ <p> The original version of &AElig;lfred did not support the
+ SAX2 APIs. </p>
+ 
+ <p> This version supports the SAX2 APIs, exposing the standard
+ boolean feature descriptors.  It supports the "DeclHandler" property
+ to provide access to all DTD declarations not already exposed
+ through the SAX1 API.  The "LexicalHandler" property is supported,
+ exposing entity boundaries (including the unnamed external subset) and
+ things like comments and CDATA boundaries.  SAX1 compatibility is
+ currently provided.</p>
+ 
+ 
+ <h3><a name="validation">Validation</a></h3>
+ 
+ <p> In the 'pipeline' package in this same software distribution is an
+ <a href="../pipeline/ValidationConsumer.html">XML Validation component</a>
+ using any full SAX2 event stream (including all document type declarations)
+ to validate.  There is now a <a href="XmlReader.html">XmlReader</a> class
+ which combines that class and this enhanced &AElig;lfred parser, creating
+ an optionally validating SAX2 parser. </p>
+ 
+ <p> As noted in the documentation for that validating component, certain
+ validity constraints can't reliably be tested by a layered validator.
+ These include all constraints relying on
+ layering violations (exposing XML at the level of tokens or below,
+ required since XML isn't a context-free grammar), some that
+ SAX2 doesn't support, and a few others.  The resulting validating
+ parser is conformant enough for most applications that aren't doing
+ strange SGML tricks with DTDs.
+ Moreover, that validating filter can be used without
+ a parser ... any application component that emits SAX event streams
+ can DTD-validate its output on demand. </p>
+ 
+ <h3><a name="smaller">You want Smaller?</a></h3>
+ 
+ <p> You'll have noticed that the original version of &AElig;lfred
+ had small size as a top goal.  &AElig;lfred2 normally includes a
+ DTD validation layer, but you can package without that.
+ Similarly, JAXP factory support is available but optional.
+ Then the main added cost due to this revision are for
+ supporting the SAX2 API itself; DTD validation is as
+ cleanly layered as allowed by SAX2.</p>
+ 
+ <h3><a name="bugfixes">Bugs Fixed</a></h3>
+ 
+ <p> Bugs fixed in &AElig;lfred2 include: </p>
+ 
+ <ol>
+     <li> Originally &AElig;lfred didn't close file descriptors, which
+     led to file descriptor leakage on programs which ran for any
+     length of time. </li>
+ 
+     <li> NOTATION declarations without system identifiers are
+     now handled correctly. </li>
+ 
+     <li> DTD events are now reported for all invocations of a
+     given parser, not just the first one. </li>
+ 
+     <li> More correct character handling: <ul>
+ 
+ 	<li> Rejects out-of-range characters, both in text and in
+ 	character references. </li>
+ 
+ 	<li> Correctly handles character references that expand to
+ 	surrogate pairs. </li>
+ 
+ 	<li> Correctly handles UTF-8 encodings of surrogate pairs. </li>
+ 
+ 	<li> Correctly handles Unicode 3.1 rules about illegal UTF-8
+ 	encodings: there is only one legal encoding per character. </li>
+ 
+ 	<li> PUBLIC identifiers are now rejected if they have illegal
+ 	characters. </li>
+ 
+ 	<li> The parser is more correct about what characters are allowed
+ 	in names and name tokens.  Uses Unicode rules (built in to Java)
+ 	rather than the voluminous XML rules, although some extensions
+ 	have been made to match XML rules more closely.</li>
+ 
+ 	<li> Line ends are now normalized to newlines in all known
+ 	cases. </li>
+ 
+ 	</ul></li>
+ 
+     <li> Certain validity errors were previously treated as well
+     formedness violations. <ul>
+ 
+ 	<li> Repeated declarations of an element type are no
+ 	longer fatal errors. </li>
+ 
+ 	<li> Undeclared parameter entity references are no longer
+ 	fatal errors. </li>
+ 
+ 	</ul></li>
+ 
+     <li> Attribute handling is improved: <ul>
+ 
+ 	<li> Whitespace must exist between attributes. </li>
+ 
+ 	<li> Only one value for a given attribute is permitted. </li>
+ 
+ 	<li> ATTLIST declarations don't need to declare attributes. </li>
+ 
+ 	<li> Attribute values are normalized when required. </li>
+ 
+ 	<li> Tabs in attribute values are normalized to spaces. </li>
+ 
+ 	<li> Attribute values containing a literal "&lt;" are rejected. </li>
+ 
+ 	</ul></li>
+ 
+     <li> More correct entity handling: <ul>
+ 
+ 	<li> Whitespace must precede NDATA when declaring unparsed
+ 	entities.</li>
+ 
+ 	<li> Parameter entity declarations may not have NDATA annotations. </li>
+ 
+ 	<li> The XML specification has a bug in that it doesn't specify
+ 	that certain contexts exist within which parameter entity
+ 	expansion must not be performed.  Lacking an offical erratum,
+ 	this parser now disables such expansion inside comments,
+ 	processing instructions, ignored sections, public identifiers,
+ 	and parts of entity declarations. </li>
+ 
+ 	<li> Entity expansions that include quote characters no longer
+ 	confuse parsing of strings using such expansions. </li>
+ 
+ 	<li> Whitespace in the values of internal entities is not mapped
+ 	to space characters. </li>
+ 
+ 	<li> General Entity references in attribute defaults within the
+ 	DTD now cause fatal errors when the entity is not defined at the
+ 	time it is referenced. </li>
+ 
+ 	<li> Malformed general entity references in entity declarations are
+ 	now detected.  </li>
+ 
+ 	</ul></li>
+ 
+     <li> Neither conditional sections
+     nor parameter entity references within markup declarations
+     are permitted in the internal subset. </li>
+ 
+     <li> Processing instructions whose target names are "XML"
+     (ignoring case) are now rejected. </li>
+ 
+     <li> Comments may not include "--".</li>
+ 
+     <li> Most "]]&gt;" sequences in text are rejected. </li>
+ 
+     <li> Correct syntax for standalone declarations is enforced. </li>
+ 
+     <li> Setting a locale for diagnostics only produces an exception
+     if the language of that locale isn't English. </li>
+ 
+     <li> Some more encoding names are recognized.  These include the
+     Unicode 3.0 variants of UTF-16 (UTF-16BE, UTF-16LE) as well as
+     US-ASCII and a few commonly seen synonyms. </li>
+ 
+     <li> Text (from character content, PIs, or comments) large enough
+     not to fit into internal buffers is now handled correctly even in
+     some cases which were originally handled incorrectly.</li>
+ 
+     <li> Content is now reported for element types for which attributes
+     have been declared, but no content model is known.  (Such documents
+     are invalid, but may still be well formed.) </li>
+ 
+ </ol>
+ 
+ <p> Other bugs may also have been fixed. </p>
+ 
+ <p> For better overall validation support, some of the validity
+ constraints that can't be verified using the SAX2 event stream
+ are now reported directly by &AElig;lfred2. </p>
+ 
+ </body></html>
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/Consumer.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/Consumer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/Consumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/Consumer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,368 ----
+ /* Consumer.java -- 
+    Copyright (C) 2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.ext.Attributes2;
+ 
+ import gnu.xml.pipeline.DomConsumer;
+ import gnu.xml.pipeline.EventConsumer;
+ 
+ 
+ /**
+  * Event consumer which constructs DOM documents using the implementation
+  * in this package, using SAX2 events.  This packages various backdoors
+  * into this DOM implementation, as needed to address DOM requirements
+  * that can't be met by strictly conforming implementations of DOM.
+  *
+  * <p> These requirements all relate to {@link DocumentType} nodes and
+  * features of that node type.  These features are normally not used,
+  * because that interface only exposes a subset of the information found
+  * in DTDs.  More, that subset does not include the most important typing
+  * information.  For example, it excludes element content models and
+  * attribute typing.  It does expose some entity management issues,
+  * although entity management doesn't relate to document typing.
+  *
+  * <p> Note that SAX2 does not expose the literal text of the DTD's
+  * internal subset, so it will not be present in DOM trees constructed
+  * using this API.  (Though with a good SAX2 implementation, it could
+  * be partially recreated...)
+  *
+  * @author David Brownell
+  */
+ public class Consumer extends DomConsumer
+ {
+     /**
+      * Constructs an unconfigured event consumer,
+      * as a terminus in a SAX event pipeline.
+      */
+     // used by PipelineFactory [terminus]
+     public Consumer ()
+     throws SAXException
+     {
+ 	super (DomDocument.class);
+ 	setHandler (new Backdoor (this));
+     }
+ 
+     /**
+      * Constructs an unconfigured event consumer,
+      * as a stage in a SAX event pipeline.
+      */
+     // used by PipelineFactory [filter]
+     public Consumer (EventConsumer next)
+     throws SAXException
+     {
+ 	super (DomDocument.class, next);
+ 	setHandler (new Backdoor (this));
+     }
+ 
+     /**
+      * Implements the backdoors needed by DOM.
+      * All methods in this class use implementation-specific APIs that are
+      * implied by the DOM specification (needed to implement testable
+      * behavior) but which are excluded from the DOM specification.
+      */
+     public static class Backdoor extends DomConsumer.Handler
+     {
+ 	/**
+ 	 * Constructor.
+ 	 * @param consumer must have been initialized to use the
+ 	 *	{@link DomDocument} class (or a subclass) for
+ 	 *	constructing DOM trees
+ 	 */
+ 	protected Backdoor (DomConsumer consumer)
+ 	throws SAXException
+ 	    { super (consumer); }
+ 
+ 	// helper routine
+ 	private DomDoctype getDoctype ()
+ 	throws SAXException
+ 	{
+ 	    DomDocument		doc = (DomDocument) getDocument ();
+ 	    DocumentType	dt = doc.getDoctype ();
+ 
+ 	    if (dt == null)
+ 		throw new SAXException ("doctype missing!");
+ 	    return (DomDoctype) dt;
+ 	}
+ 
+ 	// SAX2 "lexical" event
+ 	public void startDTD (String name, String publicId, String systemId)
+ 	throws SAXException
+ 	{
+ 	    DomDocument		doc = (DomDocument) getDocument ();
+ 
+ 	    super.startDTD (name, publicId, systemId);
+ 	    // DOM L2 doctype creation model is bizarre
+ 	    DomDoctype dt = new DomDoctype (doc, name, publicId, systemId);
+ 	    doc.appendChild (dt);
+ 	}
+ 
+ 	// SAX2 "lexical" event
+ 	public void endDTD ()
+ 	throws SAXException
+ 	{
+ 	    super.endDTD ();
+ 	    // DOM L2 has no way to make things readonly
+ 	    getDoctype ().makeReadonly ();
+ 	}
+ 
+ 	// SAX1 DTD event
+ 	public void notationDecl (
+ 	    String name,
+ 	    String publicId, String systemId
+ 	) throws SAXException
+ 	{
+ 	    // DOM L2 can't create/save notation nodes
+ 	    getDoctype ().declareNotation (name, publicId, systemId);
+ 	}
+ 
+ 	// SAX1 DTD event
+ 	public void unparsedEntityDecl (
+ 	    String name,
+ 	    String publicId, String systemId,
+ 	    String notationName
+ 	) throws SAXException
+ 	{
+ 	    // DOM L2 can't create/save entity nodes
+ 	    getDoctype ().declareEntity (name, publicId, systemId,
+ 	    	notationName);
+ 	}
+ 
+ 	// SAX2 declaration event
+ 	public void internalEntityDecl (String name, String value)
+ 	throws SAXException
+ 	{
+ 	    // DOM L2 can't create/save entity nodes
+ 	    // NOTE:  this doesn't save the value as a child of this
+ 	    // node, though it could realistically do so.
+ 	    getDoctype ().declareEntity (name, null, null, null);
+ 	}
+ 
+ 	// SAX2 declaration event
+ 	public void externalEntityDecl (
+ 	    String name,
+ 	    String publicId,
+ 	    String systemId
+ 	) throws SAXException
+ 	{
+ 	    // DOM L2 can't create/save entity nodes
+ 	    // NOTE:  DOM allows for these to have children, if
+ 	    // they don't have unbound namespace references.
+ 	    getDoctype ().declareEntity (name, publicId, systemId, null);
+ 	}
+ 
+ 	// SAX2 element
+ 	public void startElement (
+ 	    String uri,
+ 	    String localName,
+ 	    String qName,
+ 	    Attributes atts
+ 	) throws SAXException
+ 	{
+ 	    Node		top;
+ 
+ 	    super.startElement (uri, localName, qName, atts);
+ 
+ 	    // might there be more work?
+ 	    top = getTop ();
+ 	    if (!top.hasAttributes () || !(atts instanceof Attributes2))
+ 		return;
+ 
+ 	    // remember any attributes that got defaulted
+ 	    DomNamedNodeMap	map = (DomNamedNodeMap) top.getAttributes ();
+ 	    Attributes2		attrs = (Attributes2) atts;
+ 	    int			length = atts.getLength ();
+ 
+ 	    //map.compact ();
+ 	    for (int i = 0; i < length; i++) {
+ 		if (attrs.isSpecified (i))
+ 		    continue;
+ 
+ 		// value was defaulted.
+ 		String		temp = attrs.getQName (i);
+ 		DomAttr		attr;
+ 
+ 		if ("".equals (temp))
+ 		    attr = (DomAttr) map.getNamedItemNS (attrs.getURI (i),
+ 			    atts.getLocalName (i));
+ 		else
+ 		    attr = (DomAttr) map.getNamedItem (temp);
+ 
+ 		// DOM L2 can't write this flag, only read it
+ 		attr.setSpecified (false);
+ 	    }
+ 	}
+ 
+ 	public void endElement (
+ 	    String uri,
+ 	    String localName,
+ 	    String qName
+ 	) throws SAXException
+ 	{
+ 	    DomNode	top = (DomNode) getTop ();
+ 	    top.compact ();
+ 	    super.endElement (uri, localName, qName);
+ 	}
+ 
+ 	protected Text createText (
+ 	    boolean	isCDATA,
+ 	    char	buf [],
+ 	    int		off,
+ 	    int		len
+ 	) {
+ 	    DomDocument	doc = (DomDocument) getDocument ();
+ 
+ 	    if (isCDATA)
+ 		return doc.createCDATASection (buf, off, len);
+ 	    else
+ 		return doc.createTextNode (buf, off, len);
+ 	}
+ 
+         public void elementDecl(String name, String model)
+           throws SAXException
+         {
+           getDoctype().elementDecl(name, model);
+         }
+ 
+ 	public void attributeDecl (
+ 	    String	ename,
+ 	    String	aname,
+ 	    String	type,
+ 	    String	mode,
+ 	    String	value
+ 	) throws SAXException
+ 	{
+           getDoctype().attributeDecl(ename, aname, type, mode, value);
+             /*
+ 	    if (value == null && !"ID".equals (type))
+ 		return;
+ 	    
+ 	    DomDoctype.ElementInfo	info;
+ 
+ 	    info = getDoctype ().getElementInfo (ename);
+ 	    if (value != null)
+ 		info.setAttrDefault (aname, value);
+ 	    if ("ID".equals (type))
+ 		info.setIdAttr (aname);
+                 */
+             
+ 	}
+ 
+ 	// force duplicate name checking off while we're
+ 	// using parser output (don't duplicate the work)
+ 	public void startDocument () throws SAXException
+ 	{
+ 	    super.startDocument ();
+ 	    
+             DomDocument doc = (DomDocument) getDocument ();
+             doc.setStrictErrorChecking(false);
+             doc.setBuilding(true);
+ 	}
+ 
+         /**
+          * Required by DOM Level 3 to report document parameters
+          */
+         public void xmlDecl(String version,
+                             String encoding,
+                             boolean standalone,
+                             String inputEncoding)
+           throws SAXException
+         {
+           super.xmlDecl(version, encoding, standalone, inputEncoding);
+ 
+           DomDocument doc = (DomDocument) getDocument();
+           doc.setXmlEncoding(encoding);
+           doc.setInputEncoding(inputEncoding);
+         }
+ 
+ 	public void endDocument ()
+ 	throws SAXException
+ 	{
+ 	    DomDocument doc = (DomDocument) getDocument ();
+ 	    doc.setStrictErrorChecking(true);
+             doc.setBuilding(false);
+ 	    doc.compact ();
+             DomDoctype doctype = (DomDoctype) doc.getDoctype();
+             if (doctype != null)
+               {
+                 doctype.makeReadonly();
+               }
+ 	    super.endDocument ();
+ 	}
+ 
+ 	// these three methods collaborate to populate entity
+ 	// refs, marking contents readonly on end-of-entity
+ 
+ 	public boolean canPopulateEntityRefs ()
+ 	    { return true; }
+ 
+ 	public void startEntity (String name)
+ 	throws SAXException
+ 	{
+ 	    if (name.charAt (0) == '%' || "[dtd]".equals (name))
+ 		return;
+ 	    super.startEntity (name);
+ 
+ 	    DomNode	top = (DomNode) getTop ();
+ 
+ 	    if (top.getNodeType () == Node.ENTITY_REFERENCE_NODE)
+ 		top.readonly = false;
+ 	}
+ 
+ 	public void endEntity (String name)
+ 	throws SAXException
+ 	{
+ 	    if (name.charAt (0) == '%' || "[dtd]".equals (name))
+ 		return;
+ 	    DomNode	top = (DomNode) getTop ();
+ 
+ 	    if (top.getNodeType () == Node.ENTITY_REFERENCE_NODE) {
+ 		top.compact ();
+ 		top.makeReadonly ();
+ 	    }
+ 	    super.endEntity (name);
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DTDAttributeTypeInfo.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DTDAttributeTypeInfo.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DTDAttributeTypeInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DTDAttributeTypeInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,84 ----
+ /* DTDAttributeTypeInfo.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.TypeInfo;
+ 
+ /**
+  * Attribute type information supplied by a DTD attribute declaration.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DTDAttributeTypeInfo
+   implements TypeInfo
+ {
+ 
+   final String elementName;
+   final String name;
+   final String type;
+   final String mode;
+   final String value;
+ 
+   DTDAttributeTypeInfo(String elementName, String name, String type,
+                        String mode, String value)
+   {
+     this.elementName = elementName;
+     this.name = name;
+     this.type = type;
+     this.mode = mode;
+     this.value = value;
+   }
+ 
+   public final String getTypeName()
+   {
+     return type;
+   }
+ 
+   public final String getTypeNamespace()
+   {
+     return "http://www.w3.org/TR/REC-xml";
+   }
+ 
+   public final boolean isDerivedFrom(String typeNamespace, String typeName,
+                                      int derivationMethod)
+   {
+     return false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DTDElementTypeInfo.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DTDElementTypeInfo.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DTDElementTypeInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DTDElementTypeInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,112 ----
+ /* DTDElementTypeInfo.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import org.w3c.dom.TypeInfo;
+ 
+ /**
+  * Element type information provided by a DTD element declaration.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DTDElementTypeInfo
+   implements TypeInfo
+ {
+ 
+   final String name;
+   String model;
+   HashMap attributes;
+   String idAttrName;
+ 
+   DTDElementTypeInfo(String name, String model)
+   {
+     this.name = name;
+     this.model = model;
+   }
+ 
+   public final String getTypeName()
+   {
+     return null;
+   }
+ 
+   public final String getTypeNamespace()
+   {
+     return "http://www.w3.org/TR/REC-xml";
+   }
+ 
+   public final boolean isDerivedFrom(String typeNamespace, String typeName,
+                                      int derivationMethod)
+   {
+     return false;
+   }
+ 
+   DTDAttributeTypeInfo getAttributeTypeInfo(String name)
+   {
+     if (attributes == null)
+       {
+         return null;
+       }
+     return (DTDAttributeTypeInfo) attributes.get(name);
+   }
+ 
+   void setAttributeTypeInfo(String name, DTDAttributeTypeInfo info)
+   {
+     if (attributes == null)
+       {
+         attributes = new HashMap();
+       }
+     attributes.put(name, info);
+     if ("ID".equals(info.type))
+       {
+         idAttrName = name;
+       }
+   }
+ 
+   Iterator attributes()
+   {
+     if (attributes == null)
+       {
+         return null;
+       }
+     return attributes.values().iterator();
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomAttr.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomAttr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomAttr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomAttr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,380 ----
+ /* DomAttr.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.TypeInfo;
+ import org.w3c.dom.events.MutationEvent;
+ 
+ 
+ /**
+  * <p> "Attr" implementation.  In DOM, attributes cost quite a lot of
+  * memory because their values are complex structures rather than just
+  * simple strings.  To reduce your costs, avoid having more than one
+  * child of an attribute; stick to a single Text node child, and ignore
+  * even that by using the attribute's "nodeValue" property.</p>
+  *
+  * <p> As a bit of general advice, only look at attribute modification
+  * events through the DOMAttrModified event (sent to the associated
+  * element).  Implementations are not guaranteed to report other events
+  * in the same order, so you're very likely to write nonportable code if
+  * you monitor events at the "children of Attr" level.</p>
+  *
+  * <p> At this writing, not all attribute modifications will cause the
+  * DOMAttrModified event to be triggered ... only the ones using the string
+  * methods (setNodeValue, setValue, and Element.setAttribute) to modify
+  * those values.  That is, if you manipulate those children directly,
+  * elements won't get notified that attribute values have changed.
+  * The natural fix for that will report other modifications, but won't 
+  * be able to expose "previous" attribute value; it'll need to be cached
+  * or something (at which point why bother using child nodes). </p>
+  *
+  * <p><em>You are strongly advised not to use "children" of any attribute
+  * nodes you work with.</em> </p>
+  *
+  * @author David Brownell
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomAttr
+   extends DomNsNode
+   implements Attr
+ {
+   
+   private boolean specified;
+   private String value; // string value cache
+   
+   /**
+    * Constructs an Attr node associated with the specified document.
+    * The "specified" flag is initialized to true, since this DOM has
+    * no current "back door" mechanisms to manage default values so
+    * that every value must effectively be "specified".
+    *
+    * <p>This constructor should only be invoked by a Document as part of
+    * its createAttribute functionality, or through a subclass which is
+    * similarly used in a "Sub-DOM" style layer.
+    *
+    * @param owner The document with which this node is associated
+    * @param namespaceURI Combined with the local part of the name,
+    *	this is used to uniquely identify a type of attribute
+    * @param name Name of this attribute, which may include a prefix
+    */
+   protected DomAttr(DomDocument owner, String namespaceURI, String name)
+   {
+     super(ATTRIBUTE_NODE, owner, namespaceURI, name);
+     specified = true;
+     length = 1;
+     
+     // XXX register self to get insertion/removal events
+     // and character data change events and when they happen,
+     // report self-mutation
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Returns the attribute name (same as getNodeName)
+    */
+   public final String getName()
+   {
+     return getNodeName();
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Returns true if a parser reported this was in the source text.
+    */
+   public final boolean getSpecified()
+   {
+     return specified;
+   }
+   
+   /**
+    * Records whether this attribute was in the source text.
+    */
+   public final void setSpecified(boolean value)
+   {
+     specified = value;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the attribute value, with character and entity
+    * references substituted.
+    * <em>NOTE:  entity refs as children aren't currently handled.</em>
+    */
+   public String getNodeValue()
+   {
+     // If we have a simple node-value, use that
+     if (first == null)
+       {
+         return (value == null) ? "" : value;
+       }
+     // Otherwise collect child node-values
+     StringBuffer buf = new StringBuffer();
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         switch (ctx.nodeType)
+           {
+           case Node.TEXT_NODE:
+             buf.append(ctx.getNodeValue());
+             break;
+           case Node.ENTITY_REFERENCE_NODE:
+             // TODO
+             break;
+           }
+       }
+     return buf.toString();
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Assigns the value of the attribute; it will have one child,
+    * which is a text node with the specified value (same as
+    * setNodeValue).
+    */
+   public final void setValue(String value)
+   {
+     setNodeValue(value);
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Returns the value of the attribute as a non-null string; same
+    * as getNodeValue.
+    * <em>NOTE:  entity refs as children aren't currently handled.</em>
+    */
+   public final String getValue()
+   {
+     return getNodeValue();
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Assigns the attribute value; using this API, no entity or
+    * character references will exist.
+    * Causes a DOMAttrModified mutation event to be sent.
+    */
+   public void setNodeValue(String value)
+   {
+     if (readonly)
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     if (value == null)
+       {
+         value = "";
+       }
+     String oldValue = getNodeValue();
+     while (last != null)
+       {
+         removeChild(last);
+       }
+     // don't create a new node just for this...
+     /*
+      Node text = owner.createTextNode(value);
+      appendChild(text);
+      */
+     this.value = value;
+     length = 1;
+     specified = true;
+     
+     mutating(oldValue, value, MutationEvent.MODIFICATION);
+   }
+ 
+   public final Node getFirstChild()
+   {
+     // Create a child text node if necessary
+     if (first == null)
+       {
+         length = 0;
+         Node text = owner.createTextNode((value == null) ? "" : value);
+         appendChild(text);
+       }
+     return first;
+   }
+ 
+   public final Node getLastChild()
+   {
+     // Create a child text node if necessary
+     if (last == null)
+       {
+         length = 0;
+         Node text = owner.createTextNode((value == null) ? "" : value);
+         appendChild(text);
+       }
+     return last;
+   }
+ 
+   public Node item(int index)
+   {
+     // Create a child text node if necessary
+     if (first == null)
+       {
+         length = 0;
+         Node text = owner.createTextNode((value == null) ? "" : value);
+         appendChild(text);
+       }
+     return super.item(index);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns the element with which this attribute is associated.
+    */
+   public final Element getOwnerElement()
+   {
+     return (Element) parent;
+   }
+ 
+   public final Node getNextSibling()
+   {
+     return null;
+   }
+ 
+   public final Node getPreviousSibling()
+   {
+     return null;
+   }
+ 
+   public Node getParentNode()
+   {
+     return null;
+   }
+ 
+   /**
+    * Records the element with which this attribute is associated.
+    */
+   public final void setOwnerElement(Element e)
+   {
+     if (parent != null)
+       {
+         throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR);
+       }
+     if (!(e instanceof DomElement))
+       {
+         throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR);
+       }
+     parent = (DomElement) e;
+     depth = parent.depth + 1;
+   }
+ 
+   /**
+    * The base URI of an Attr is always <code>null</code>.
+    */
+   public final String getBaseURI()
+   {
+     return null;
+   }
+     
+   /**
+    * Shallow clone of the attribute, breaking all ties with any
+    * elements.
+    */
+   public Object clone()
+   {
+     DomAttr retval = (DomAttr) super.clone();
+     retval.specified = true;
+     return retval;
+   }
+     
+   private void mutating(String oldValue, String newValue, short why)
+   {
+     if (!reportMutations || parent == null)
+       {
+         return;
+       }
+     
+     // EVENT:  DOMAttrModified, target = parent,
+     //	prev/new values provided, also attr name
+     MutationEvent	event;
+     
+     event = (MutationEvent) createEvent ("MutationEvents");
+     event.initMutationEvent ("DOMAttrModified",
+                              true /* bubbles */, false /* nocancel */,
+                              null, oldValue, newValue, getNodeName (), why);
+     parent.dispatchEvent (event);
+   }
+ 
+   // DOM Level 3 methods
+   
+   public TypeInfo getSchemaTypeInfo()
+   {
+     if (parent != null)
+       {
+         // DTD implementation
+         DomDoctype doctype = (DomDoctype) parent.owner.getDoctype();
+         if (doctype != null)
+           {
+             return doctype.getAttributeTypeInfo(parent.getNodeName(),
+                                                 getNodeName());
+           }
+         // TODO XML Schema implementation
+       }
+     return null;
+   }
+ 
+   public boolean isId()
+   {
+     if (parent != null)
+       {
+         DomDoctype doctype = (DomDoctype) parent.owner.getDoctype();
+         if (doctype != null)
+           {
+             DTDAttributeTypeInfo info =
+               doctype.getAttributeTypeInfo(parent.getNodeName(),
+                                            getNodeName());
+             if (info != null && "ID".equals(info.type))
+               {
+                 return true;
+               }
+           }
+         DomElement element = (DomElement) parent;
+         if (element.userIdAttrs != null &&
+             element.userIdAttrs.contains(this))
+           {
+             return true;
+           }
+         // TODO XML Schema implementation
+       }
+     return false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomCDATASection.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomCDATASection.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomCDATASection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomCDATASection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* DomCDATASection.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.CDATASection;
+ 
+ /**
+  * <p> "CDATASection" implementation.
+  * This is a non-core DOM class, supporting the "XML" feature.
+  * CDATA sections are just ways to represent text using different
+  * delimeters. </p>
+  *
+  * <p> <em>You are strongly advised not to use CDATASection nodes.</em>
+  * The advantage of having slightly prettier ways to print text that may
+  * have lots of embedded XML delimiters, such as "&amp;" and "&lt;",
+  * can be dwarfed by the cost of dealing with multiple kinds of text
+  * nodes in all your algorithms. </p>
+  *
+  * @author David Brownell
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomCDATASection
+   extends DomText
+   implements CDATASection
+ {
+   
+   /**
+    * Constructs a CDATA section node associated with the specified
+    * document and holding the specified data.
+    *
+    * <p>This constructor should only be invoked by a Document as part of
+    * its createCDATASection functionality, or through a subclass which is
+    * similarly used in a "Sub-DOM" style layer.
+    *
+    */
+   protected DomCDATASection(DomDocument owner, String value)
+   {
+     super(CDATA_SECTION_NODE, owner, value);
+   }
+ 
+   protected DomCDATASection(DomDocument owner, char buf [], int off, int len)
+   {
+     super(CDATA_SECTION_NODE, owner, buf, off, len);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the string "#cdata-section".
+    */
+   final public String getNodeName()
+   {
+     return "#cdata-section";
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomCharacterData.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomCharacterData.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomCharacterData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomCharacterData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,310 ----
+ /* DomCharacterData.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.CharacterData;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.events.MutationEvent;
+ 
+ 
+ /**
+  * <p> Abstract "CharacterData" implementation.  This
+  * facilitates reusing code in classes implementing subtypes of that DOM
+  * interface (Text, Comment, CDATASection).  </p>
+  *
+  * @author David Brownell
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public abstract class DomCharacterData
+   extends DomNode
+   implements CharacterData
+ {
+ 
+   private String text;
+   
+   // package private
+   DomCharacterData(short nodeType, DomDocument doc, String value)
+   {
+     super(nodeType, doc);
+     text = (value == null) ? "" : value;
+   }
+ 
+   // package private
+   DomCharacterData(short nodeType, DomDocument doc,
+                    char[] buf, int offset, int length)
+   {
+     super(nodeType, doc);
+     text = (buf == null) ? "" : new String(buf, offset, length);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Appends the specified data to the value of this node.
+    * Causes a DOMCharacterDataModified mutation event to be reported.
+    */
+   public void appendData(String arg)
+   {
+     if (isReadonly())
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     String value = text + arg;
+     mutating(value);
+     text = value;
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Modifies the value of this node.
+    * Causes a DOMCharacterDataModified mutation event to be reported.
+    */
+   public void deleteData(int offset, int count)
+   {
+     if (isReadonly())
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     char[] raw = text.toCharArray();
+     if (offset < 0 || count < 0 || offset > raw.length)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+     if ((offset + count) > raw.length)
+       {
+         count = raw.length - offset;
+       }
+     if (count == 0)
+       {
+         return;
+       }
+     try
+       {
+         char[] buf = new char[raw.length - count];
+         System.arraycopy(raw, 0, buf, 0, offset);
+         System.arraycopy(raw, offset + count, buf, offset,
+                          raw.length - (offset + count));
+         String value = new String(buf);
+         mutating(value);
+         text = value;
+       }
+     catch (IndexOutOfBoundsException x)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+   }
+     
+   /**
+    * <b>DOM L1</b>
+    * Returns the value of this node.
+    */
+   public String getNodeValue()
+   {
+     return text;
+   }
+     
+   /**
+    * <b>DOM L1</b>
+    * Returns the value of this node; same as getNodeValue.
+    */
+   public final String getData()
+   {
+     return text;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the length of the data.
+    */
+   public int getLength()
+   {
+     return text.length();
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Modifies the value of this node.
+    */
+   public void insertData(int offset, String arg)
+   {
+     if (isReadonly())
+       {
+       throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     char[] raw = text.toCharArray();
+     char[] tmp = arg.toCharArray ();
+     char[] buf = new char[raw.length + tmp.length];
+     
+     try
+       {
+         System.arraycopy(raw, 0, buf, 0, offset);
+         System.arraycopy(tmp, 0, buf, offset, tmp.length);
+         System.arraycopy(raw, offset, buf, offset + tmp.length,
+                          raw.length - offset);
+         String value = new String(buf);
+         mutating(value);
+         text = value;
+       }
+     catch (IndexOutOfBoundsException x)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+   }
+     
+   /**
+    * <b>DOM L1</b>
+    * Modifies the value of this node.  Causes DOMCharacterDataModified
+    * mutation events to be reported (at least one).
+    */
+   public void replaceData(int offset, int count, String arg)
+   {
+     if (readonly)
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     char[] raw = text.toCharArray();
+     
+     // deleteData
+     if (offset < 0 || count < 0 || offset > raw.length)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+     if ((offset + count) > raw.length)
+       {
+         count = raw.length - offset;
+       }
+     try
+       {
+         char[] buf = new char[raw.length - count];
+         System.arraycopy(raw, 0, buf, 0, offset);
+         System.arraycopy(raw, offset + count, buf, offset,
+                          raw.length - (offset + count));
+         
+         // insertData
+         char[] tmp = arg.toCharArray ();
+         char[] buf2 = new char[buf.length + tmp.length];
+         System.arraycopy(raw, 0, buf, 0, offset);
+         System.arraycopy(tmp, 0, buf, offset, tmp.length);
+         System.arraycopy(raw, offset, buf, offset + tmp.length,
+                          raw.length - offset);
+         String value = new String(buf);
+         mutating(value);
+         text = value;
+       }
+     catch (IndexOutOfBoundsException x)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+   }
+     
+   /**
+    * <b>DOM L1</b>
+    * Assigns the value of this node.
+    * Causes a DOMCharacterDataModified mutation event to be reported.
+    */
+   public void setNodeValue(String value)
+   {
+     if (isReadonly())
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     if (value == null)
+       {
+         value = "";
+       }
+     mutating(value);
+     text = value;
+   }
+  
+   /**
+    * <b>DOM L1</b>
+    * Assigns the value of this node; same as setNodeValue.
+    */
+   final public void setData(String data)
+   {
+     setNodeValue(data);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the specified substring.
+    */
+   public String substringData(int offset, int count)
+   {
+     try
+       {
+         return text.substring(offset, count);
+       }
+     catch (StringIndexOutOfBoundsException e)
+       {
+         if (offset >= 0 && count >= 0 && offset < text.length())
+           {
+             return text.substring(offset);
+           }
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+   }
+ 
+   /**
+    * The base URI for character data is <code>null</code>.
+    * @since DOM Level 3 Core
+    */
+   public final String getBaseURI()
+   {
+     return null;
+   }
+ 
+   private void mutating(String newValue)
+   {
+     if (!reportMutations)
+       {
+         return;
+       }
+     
+     // EVENT:  DOMCharacterDataModified, target = this,
+     //  prev/new values provided
+     MutationEvent  event;
+     
+     event = (MutationEvent) createEvent("MutationEvents");
+     event.initMutationEvent("DOMCharacterDataModified",
+                             true /* bubbles */, false /* nocancel */,
+                             null, text, newValue, null, (short) 0);
+     dispatchEvent(event);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomComment.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomComment.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomComment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomComment.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,81 ----
+ /* DomComment.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.Comment;
+ 
+ /**
+  * <p> "Comment" implementation.
+  * Comments hold data intended for direct consumption by people;
+  * programs should only use ProcessingInstruction nodes.  Note that
+  * since SAX makes comment reporting optional, XML systems that
+  * rely on comments (such as by using this class) will often lose
+  * those comments at some point in the processing pipeline. </p>
+  *
+  * @author David Brownell
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomComment
+   extends DomCharacterData
+   implements Comment
+ {
+  
+   /**
+    * Constructs a comment node associated with the specified
+    * document and holding the specified data.
+    *
+    * <p>This constructor should only be invoked by a Document as part of
+    * its createComment functionality, or through a subclass which is
+    * similarly used in a "Sub-DOM" style layer.
+    */
+   protected DomComment(DomDocument owner, String value)
+   {
+     super(COMMENT_NODE, owner, value);
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Returns the string "#comment".
+    */
+   final public String getNodeName()
+   {
+     return "#comment";
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDOMException.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDOMException.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDOMException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDOMException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,175 ----
+ /* DomDOMException.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * <p> DOMException implementation.   The version that
+  * is provided by the W3C is abstract, so it can't be instantiated.
+  *
+  * <p> This also provides a bit more information about the error
+  * that is being reported, in terms of the relevant DOM structures
+  * and data.
+  *
+  * @author David Brownell 
+  */
+ public class DomDOMException
+   extends DOMException
+ {
+ 
+   /** @serial Data that caused an error to be reported */
+   private String data;
+   
+   /** @serial Node associated with the error. */
+   private Node node;
+   
+   /** @serial Data associated with the error. */
+   private int value;
+   
+   /**
+    * Constructs an exception, with the diagnostic message
+    * corresponding to the specified code.
+    */
+   public DomDOMException(short code)
+   {
+     super(code, diagnostic(code));
+   }
+   
+   /**
+    * Constructs an exception, with the diagnostic message
+    * corresponding to the specified code and additional
+    * information as provided.
+    */
+   public DomDOMException(short code, String data, Node node, int value)
+   {
+     super(code, diagnostic(code));
+     this.data = data;
+     this.node = node;
+     this.value = value;
+   }
+ 
+   /** Returns the node to which the diagnotic applies, or null. */
+   final public Node getNode()
+   {
+     return node;
+   }
+ 
+   /** Returns data to which the diagnotic applies, or null. */
+   final public String getData()
+   {
+     return data;
+   }
+ 
+   /** Returns data to which the diagnotic applies, or null. */
+   final public int getValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Returns a diagnostic message that may be slightly more useful
+    * than the generic one, where possible.
+    */
+   public String getMessage()
+   {
+     String retval = super.getMessage();
+     
+     if (data != null)
+       {
+         retval += "\nMore Information: " + data;
+       }
+     if (value != 0)
+       {
+         retval += "\nNumber: " + value;
+       }
+     if (node != null)
+       {
+         retval += "\nNode Name: " + node.getNodeName();
+       }
+     return retval;
+   }
+ 
+   // these strings should be localizable.
+   
+   private static String diagnostic(short code)
+   {
+     switch (code)
+       {        
+         // DOM L1:
+       case INDEX_SIZE_ERR:
+         return "An index or size is out of range.";
+       case DOMSTRING_SIZE_ERR:
+         return "A string is too big.";
+       case HIERARCHY_REQUEST_ERR:
+         return "The node doesn't belong here.";
+       case WRONG_DOCUMENT_ERR:
+         return "The node belongs in another document.";
+       case INVALID_CHARACTER_ERR:
+         return "That character is not permitted.";
+       case NO_DATA_ALLOWED_ERR:
+         return "This node does not permit data.";
+       case NO_MODIFICATION_ALLOWED_ERR:
+         return "No changes are allowed.";
+       case NOT_FOUND_ERR:
+         return "The node was not found in that context.";
+       case NOT_SUPPORTED_ERR:
+         return "That object is not supported.";
+       case INUSE_ATTRIBUTE_ERR:
+         return "The attribute belongs to a different element.";
+         
+         // DOM L2:
+       case INVALID_STATE_ERR:
+         return "The object is not usable.";
+       case SYNTAX_ERR:
+         return "An illegal string was provided.";
+       case INVALID_MODIFICATION_ERR:
+         return "An object's type may not be changed.";
+       case NAMESPACE_ERR:
+         return "The operation violates XML Namespaces.";
+       case INVALID_ACCESS_ERR:
+         return "Parameter or operation isn't supported by this node.";
+       case TYPE_MISMATCH_ERR:
+         return "The type of the argument is incompatible with the expected type.";
+       }
+     return "Reserved exception number: " + code;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDoctype.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDoctype.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDoctype.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDoctype.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,455 ----
+ /* DomDoctype.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.util.HashMap;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.Entity;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Notation;
+ 
+ /**
+  * <p> "DocumentType" implementation (with no extensions for supporting
+  * any document typing information).  This is a non-core DOM class,
+  * supporting the "XML" feature. </p>
+  *
+  * <p> <em>Few XML applications will actually care about this partial
+  * DTD support</em>, since it doesn't expose any (!) of the data typing
+  * facilities which can motivate applications to use DTDs.  It does not
+  * expose element content models, or information about attribute typing
+  * rules.  Plus the information it exposes isn't very useful; as one example,
+  * DOM exposes information about unparsed ENTITY objects, which is only used
+  * with certain element attributes, but does not expose the information about
+  * those attributes which is needed to apply that data! </p>
+  *
+  * <p> Also, note that there are no nonportable ways to associate even the
+  * notation and entity information exposed by DOM with a DocumentType.  While
+  * there is a DOM L2 method to construct a DocumentType, it only gives access
+  * to the textual content of the &lt;!DOCTYPE ...&gt; declaration.  </p>
+  *
+  * <p> In short, <em>you are strongly advised not to rely on this incomplete
+  * DTD functionality</em> in your application code.</p>
+  *
+  * @see DomEntity
+  * @see DomEntityReference
+  * @see DomNotation
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomDoctype
+   extends DomExtern
+   implements DocumentType
+ {
+   
+   private DomNamedNodeMap notations;
+   private DomNamedNodeMap entities;
+   private final DOMImplementation implementation;
+   private String subset;
+   
+   private HashMap elements = new HashMap();
+   private boolean ids;
+   
+   /**
+    * Constructs a DocumentType node associated with the specified
+    * implementation, with the specified name.
+    *
+    * <p>This constructor should only be invoked by a DOMImplementation as
+    * part of its createDocumentType functionality, or through a subclass
+    * which is similarly used in a "Sub-DOM" style layer.
+    *
+    * <p> Note that at this time there is no standard SAX API granting
+    * access to the internal subset text, so that relying on that value
+    * is not currently portable.
+    *
+    * @param impl The implementation with which this object is associated
+    * @param name Name of this root element
+    * @param publicId If non-null, provides the external subset's
+    *	PUBLIC identifier
+    * @param systemId If non-null, provides the external subset's
+    *	SYSTEM identifier
+    * @param internalSubset Provides the literal value (unparsed, no
+    *	entities expanded) of the DTD's internal subset.
+    */
+   protected DomDoctype(DOMImplementation impl,
+                        String name,
+                        String publicId,
+                        String systemId,
+                        String internalSubset)
+   {
+     super(DOCUMENT_TYPE_NODE, null, name, publicId, systemId);
+     implementation = impl;
+     subset = internalSubset;
+   }
+ 
+   /**
+    * JAXP builder constructor.
+    * @param doc the document
+    * @param name the name of the document element
+    * @param publicId the public ID of the document type declaration
+    * @param systemId the system ID of the document type declaration
+    */
+   public DomDoctype(DomDocument doc,
+                     String name,
+                     String publicId,
+                     String systemId)
+   {
+     super(DOCUMENT_TYPE_NODE, doc, name, publicId, systemId);
+     implementation = doc.getImplementation();
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the root element's name (just like getNodeName).
+    */
+   final public String getName()
+   {
+     return getNodeName();
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns information about any general entities declared
+    * in the DTD.
+    *
+    * <p><em>Note:  DOM L1 doesn't throw a DOMException here, but
+    * then it doesn't have the strange construction rules of L2.</em>
+    *
+    * @exception DOMException HIERARCHY_REQUEST_ERR if the DocumentType
+    *	is not associated with a document.
+    */
+   public NamedNodeMap getEntities()
+   {
+     if (entities == null)
+       {
+         entities = new DomNamedNodeMap(this, Node.ENTITY_NODE);
+       }
+     return entities;
+   }
+ 
+   /**
+    * Records the declaration of a general entity in this DocumentType.
+    *
+    * @param name Name of the entity
+    * @param publicId If non-null, provides the entity's PUBLIC identifier
+    * @param systemId Provides the entity's SYSTEM identifier
+    * @param notation If non-null, provides the entity's notation
+    *	(indicating an unparsed entity)
+    * @return The Entity that was declared, or null if the entity wasn't
+    *	recorded (because it's a parameter entity or because an entity with
+    *	this name was already declared).
+    *
+    * @exception DOMException NO_MODIFICATION_ALLOWED_ERR if the
+    *	DocumentType is no longer writable.
+    * @exception DOMException HIERARCHY_REQUEST_ERR if the DocumentType
+    *	is not associated with a document.
+    */
+   public Entity declareEntity(String name,
+                               String publicId,
+                               String systemId,
+                               String notation)
+   {
+     DomEntity entity;
+     
+     if (name.charAt(0) == '%' || "[dtd]".equals(name))
+       {
+         return null;
+       }
+     if (isReadonly())
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     getEntities();
+     
+     DomDocument.checkName(name, (owner != null) ?
+                           "1.1".equals(owner.getXmlVersion()) : false);
+     if (entities.getNamedItem(name) != null)
+       {
+         return null;
+       }
+     
+     entity = new DomEntity(owner, name, publicId, systemId, notation);
+     entities.setNamedItem(entity);
+     return entity;
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Returns information about any notations declared in the DTD.
+    *
+    * <p><em>Note:  DOM L1 doesn't throw a DOMException here, but
+    * then it doesn't have the strange construction rules of L2.</em>
+    *
+    * @exception DOMException HIERARCHY_REQUEST_ERR if the DocumentType
+    *	is not associated with a document.
+    */
+   public NamedNodeMap getNotations()
+   {
+     if (notations == null)
+       {
+         notations = new DomNamedNodeMap(this, Node.NOTATION_NODE);
+       }
+     return notations;
+   }
+ 
+   /**
+    * Records the declaration of a notation in this DocumentType.
+    *
+    * @param name Name of the notation
+    * @param publicId If non-null, provides the notation's PUBLIC identifier
+    * @param systemId If non-null, provides the notation's SYSTEM identifier
+    * @return The notation that was declared.
+    *
+    * @exception DOMException NO_MODIFICATION_ALLOWED_ERR if the
+    *	DocumentType is no longer writable.
+    * @exception DOMException HIERARCHY_REQUEST_ERR if the DocumentType
+    *	is not associated with a document.
+    */
+   public Notation declareNotation(String name,
+                                   String publicId,
+                                   String systemId)
+   {
+     DomNotation notation;
+     
+     if (isReadonly())
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     getNotations();
+     
+     DomDocument.checkName(name, (owner != null) ?
+                           "1.1".equals(owner.getXmlVersion()) : false);
+     
+     notation = new DomNotation(owner, name, publicId, systemId);
+     notations.setNamedItem(notation);
+     return notation;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns the internal subset of the document, as a string of unparsed
+    * XML declarations (and comments, PIs, whitespace); or returns null if
+    * there is no such subset.  There is no vendor-independent expectation
+    * that this attribute be set, or that declarations found in it be
+    * reflected in the <em>entities</em> or <em>notations</em> attributes
+    * of this Document "Type" object.
+    *
+    * <p> Some application-specific XML profiles require that documents
+    * only use specific PUBLIC identifiers, without an internal subset
+    * to modify the interperetation of the declarations associated with
+    * that PUBLIC identifier through some standard.
+    */
+   public String getInternalSubset()
+   {
+     return subset;
+   }
+ 
+   /**
+    * The base URI of a DocumentType is always <code>null</code>.
+    * See the Infoset Mapping, appendix C.
+    */
+   public final String getBaseURI()
+   {
+     return null;
+   }
+     
+   /**
+    * Sets the internal "readonly" flag so the node and its associated
+    * data (only lists of entities and notations, no type information
+    * at the moment) can't be changed.
+    */
+   public void makeReadonly()
+   {
+     super.makeReadonly();
+     if (entities != null)
+       {
+         entities.makeReadonly();
+       }
+     if (notations != null)
+       {
+         notations.makeReadonly();
+       }
+   }
+ 
+   void setOwner(DomDocument doc)
+   {
+     if (entities != null)
+       {
+         for (DomNode ctx = entities.first; ctx != null; ctx = ctx.next)
+           {
+             ctx.setOwner(doc);
+           }
+       }
+     if (notations != null)
+       {
+         for (DomNode ctx = notations.first; ctx != null; ctx = ctx.next)
+           {
+             ctx.setOwner(doc);
+           }
+       }
+     super.setOwner(doc);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Consults the DOM implementation to determine if the requested
+    * feature is supported.
+    */
+   final public boolean supports(String feature, String version)
+   {
+     return implementation.hasFeature(feature, version);
+   }
+     
+   /**
+    * Returns the implementation associated with this document type.
+    */
+   final public DOMImplementation getImplementation()
+   {
+     return implementation;
+   }
+ 
+   public void elementDecl(String name, String model)
+   {
+     DTDElementTypeInfo info = getElementTypeInfo(name);
+     if (info == null)
+       {
+         info = new DTDElementTypeInfo(name, model);
+         elements.put(name, info);
+       }
+     else
+       {
+         info.model = model;
+       }
+   }
+ 
+   DTDElementTypeInfo getElementTypeInfo(String name)
+   {
+     return (DTDElementTypeInfo) elements.get(name);
+   }
+ 
+   public void attributeDecl(String eName, String aName, String type,
+                             String mode, String value)
+   {
+     DTDAttributeTypeInfo info = new DTDAttributeTypeInfo(eName, aName, type,
+                                                          mode, value);
+     DTDElementTypeInfo elementInfo = getElementTypeInfo(eName);
+     if (elementInfo == null)
+       {
+         elementInfo = new DTDElementTypeInfo(eName, null);
+         elements.put(eName, elementInfo);
+       }
+     elementInfo.setAttributeTypeInfo(aName, info);
+     if ("ID".equals(type))
+       {
+         ids = true;
+       }
+   }
+ 
+   DTDAttributeTypeInfo getAttributeTypeInfo(String elementName, String name)
+   {
+     DTDElementTypeInfo elementInfo =
+       (DTDElementTypeInfo) elements.get(elementName);
+     return (elementInfo == null) ? null :
+       elementInfo.getAttributeTypeInfo(name);
+   }
+ 
+   boolean hasIds()
+   {
+     return ids;
+   }
+   
+   public boolean isSameNode(Node arg)
+   {
+     if (equals(arg))
+       {
+         return true;
+       }
+     if (!(arg instanceof DocumentType))
+       {
+         return false;
+       }
+     DocumentType doctype = (DocumentType) arg;
+     if (!equal(getPublicId(), doctype.getPublicId()))
+       {
+         return false;
+       }
+     if (!equal(getSystemId(), doctype.getSystemId()))
+       {
+         return false;
+       }
+     if (!equal(getInternalSubset(), doctype.getInternalSubset()))
+       {
+         return false;
+       }
+     // TODO entities
+     // TODO notations
+     return true;
+   }
+   
+   /**
+    * Shallow clone of the doctype, except that associated
+    * entities and notations are (deep) cloned.
+    */
+   public Object clone()
+   {
+     DomDoctype node = (DomDoctype) super.clone();
+ 
+     if (entities != null)
+       {
+         node.entities = new DomNamedNodeMap(node, Node.ENTITY_NODE);
+         for (DomNode ctx = entities.first; ctx != null; ctx = ctx.next)
+           {
+             node.entities.setNamedItem(ctx.cloneNode(true));
+           }
+       }
+     if (notations != null)
+       {
+         node.notations = new DomNamedNodeMap(node, Node.NOTATION_NODE);
+         for (DomNode ctx = notations.first; ctx != null; ctx = ctx.next)
+           {
+             node.notations.setNamedItem(ctx.cloneNode(true));
+           }
+       }
+     return node;
+   }
+ 
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocument.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocument.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocument.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocument.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1512 ----
+ /* DomDocument.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.util.Iterator;
+ import javax.xml.XMLConstants;
+ 
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.CDATASection;
+ import org.w3c.dom.Comment;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.DOMConfiguration;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.Entity;
+ import org.w3c.dom.EntityReference;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Notation;
+ import org.w3c.dom.ProcessingInstruction;
+ import org.w3c.dom.Text;
+ import org.w3c.dom.UserDataHandler;
+ import org.w3c.dom.traversal.DocumentTraversal;
+ import org.w3c.dom.traversal.NodeFilter;
+ import org.w3c.dom.traversal.NodeIterator;
+ import org.w3c.dom.traversal.TreeWalker;
+ import org.w3c.dom.xpath.XPathEvaluator;
+ import org.w3c.dom.xpath.XPathException;
+ import org.w3c.dom.xpath.XPathExpression;
+ import org.w3c.dom.xpath.XPathNSResolver;
+ 
+ /**
+  * <p> "Document" and "DocumentTraversal" implementation.
+  *
+  * <p> Note that when this checks names for legality, it uses an
+  * approximation of the XML rules, not the real ones.  Specifically,
+  * it uses Unicode rules, with sufficient tweaks to pass a majority
+  * of basic XML conformance tests.  (The huge XML character tables are
+  * hairy to implement.)
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomDocument
+   extends DomNode
+   implements Document, DocumentTraversal, XPathEvaluator
+ {
+ 
+   private final DOMImplementation implementation;
+   private boolean checkingCharacters = true;
+   boolean checkingWellformedness = true;
+ 
+   boolean building; // if true, skip mutation events in the tree
+   
+   DomDocumentConfiguration config;
+ 
+   String inputEncoding;
+   String encoding;
+   String version = "1.0";
+   boolean standalone;
+   String systemId;
+   
+   /**
+    * Constructs a Document node, associating it with an instance
+    * of the DomImpl class.
+    *
+    * <p> Note that this constructor disables character checking.
+    * It is normally used when connecting a DOM to an XML parser,
+    * and duplicating such checks is undesirable.  When used for
+    * purposes other than connecting to a parser, you should
+    * re-enable that checking.
+    *
+    * @see #setCheckingCharacters
+    */
+   public DomDocument()
+   {
+     this(new DomImpl());
+   }
+   
+   /**
+    * Constructs a Document node, associating it with the specified
+    * implementation.  This should only be used in conjunction with
+    * a specialized implementation; it will normally be called by
+    * that implementation.
+    *
+    * @see DomImpl
+    * @see #setCheckingCharacters
+    */
+   protected DomDocument(DOMImplementation impl)
+   {
+     super(DOCUMENT_NODE, null);
+     implementation = impl;
+   }
+ 
+   /**
+    * Sets the <code>building</code> flag.
+    * Mutation events in the document are not reported.
+    */
+   public void setBuilding(boolean flag)
+   {
+     building = flag;
+   }
+ 
+   /**
+    * Sets whether to check for document well-formedness.
+    * If true, an exception will be raised if a second doctype or root
+    * element node is added to the document.
+    */
+   public void setCheckWellformedness(boolean flag)
+   {
+     checkingWellformedness = flag;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the constant "#document".
+    */
+   final public String getNodeName()
+   {
+     return "#document";
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the document's root element, or null.
+    */
+   final public Element getDocumentElement()
+   {
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         if (ctx.nodeType == ELEMENT_NODE)
+           {
+             return (Element) ctx;
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the document's DocumentType, or null.
+    */
+   final public DocumentType getDoctype()
+   {
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+       if (ctx.nodeType == DOCUMENT_TYPE_NODE)
+           {
+             return (DocumentType) ctx;
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the document's DOMImplementation.
+    */
+   final public DOMImplementation getImplementation()
+   {
+     return implementation;
+   }
+ 
+   /**
+    * <b>DOM L1 (relocated in DOM L2)</b>
+    * Returns the element with the specified "ID" attribute, or null.
+    *
+    * <p>Returns null unless {@link Consumer} was used to populate internal
+    * DTD declaration information, using package-private APIs.  If that
+    * internal DTD information is available, the document may be searched for
+    * the element with that ID.
+    */
+   public Element getElementById(String id)
+   {
+     if (id == null || id.length() == 0)
+       {
+         return null;
+       }
+     DomDoctype doctype = (DomDoctype) getDoctype();
+     if (doctype != null && !doctype.hasIds())
+       {
+         doctype = null;
+       }
+     
+     // yes, this is linear in size of document.
+     // it'd be easy enough to maintain a hashtable.
+     Node current = getDocumentElement();
+     Node temp;
+     
+     if (current == null)
+       {
+         return null;
+       }
+     while (current != this)
+       {
+         // done?
+         if (current.getNodeType() == ELEMENT_NODE)
+           {
+             DomElement element = (DomElement) current;
+             if (doctype != null)
+               {
+                 DTDElementTypeInfo info =
+                   doctype.getElementTypeInfo(current.getNodeName());
+                 if (info != null &&
+                     id.equals(element.getAttribute(info.idAttrName)))
+                   {
+                     return element;
+                   }
+                 else if (element.userIdAttrs != null)
+                   {
+                     for (Iterator i = element.userIdAttrs.iterator();
+                          i.hasNext(); )
+                       {
+                         Node idAttr = (Node) i.next();
+                         if (id.equals(idAttr.getNodeValue()))
+                           {
+                             return element;
+                           }
+                       }
+                   }
+               }
+             // xml:id
+             String xmlId = element.getAttribute("xml:id");
+             if (xmlId == null)
+               {
+                 xmlId = element.getAttributeNS(XMLConstants.XML_NS_URI,
+                                                "id");
+               }
+             if (id.equals(xmlId))
+               {
+                 return element;
+               }
+           }
+         
+         // descend?
+         if (current.hasChildNodes())
+           {
+             current = current.getFirstChild();
+             continue;
+           }
+         
+         // lateral?
+         temp = current.getNextSibling();
+         if (temp != null)
+           {
+             current = temp;
+             continue;
+           }
+         
+         // back up ... 
+         do
+           {
+             temp = current.getParentNode();
+             if (temp == null)
+               {
+                 return null;
+               }
+             current = temp;
+             temp = current.getNextSibling();
+           }
+         while (temp == null);
+         current = temp;
+       }
+     return null;
+   }
+ 
+   private void checkNewChild(Node newChild)
+   {
+     if (newChild.getNodeType() == ELEMENT_NODE
+         && getDocumentElement() != null)
+       {
+         throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
+                                   "document element already present: " +
+                                   getDocumentElement(), newChild, 0);
+       }
+     if (newChild.getNodeType() == DOCUMENT_TYPE_NODE
+         && getDoctype() != null)
+       {
+         throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
+                                   "document type already present: " +
+                                   getDoctype(), newChild, 0);
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Appends the specified node to this node's list of children,
+    * enforcing the constraints that there be only one root element
+    * and one document type child.
+    */
+   public Node appendChild(Node newChild)
+   {
+     if (checkingWellformedness)
+       {
+         checkNewChild(newChild);
+       }
+     return super.appendChild(newChild);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Inserts the specified node in this node's list of children,
+    * enforcing the constraints that there be only one root element
+    * and one document type child.
+    */
+   public Node insertBefore(Node newChild, Node refChild)
+   {
+     if (checkingWellformedness)
+       {
+         checkNewChild(newChild);
+       }
+     return super.insertBefore(newChild, refChild);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Replaces the specified node in this node's list of children,
+    * enforcing the constraints that there be only one root element
+    * and one document type child.
+    */
+   public Node replaceChild(Node newChild, Node refChild)
+   {
+     if (checkingWellformedness &&
+         ((newChild.getNodeType() == ELEMENT_NODE &&
+           refChild.getNodeType() != ELEMENT_NODE) ||
+          (newChild.getNodeType() == DOCUMENT_TYPE_NODE &&
+           refChild.getNodeType() != DOCUMENT_TYPE_NODE)))
+       {
+         checkNewChild(newChild);
+       }
+     return super.replaceChild(newChild, refChild);
+   }
+  
+   // NOTE:  DOM can't really tell when the name of an entity,
+   // notation, or PI must follow the namespace rules (excluding
+   // colons) instead of the XML rules (which allow them without
+   // much restriction).  That's an API issue.  verifyXmlName
+   // aims to enforce the XML rules, not the namespace rules.
+   
+   /**
+    * Throws a DOM exception if the specified name is not a legal XML 1.0
+    * Name.
+    * @deprecated This method is deprecated and may be removed in future
+    * versions of GNU JAXP
+    */
+   public static void verifyXmlName(String name)
+   {
+     // XXX why is this public?
+     checkName(name, false);
+   }
+ 
+   static void checkName(String name, boolean xml11)
+   {
+     if (name == null)
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR, name, null, 0);
+       }
+     int len = name.length();
+     if (len == 0)
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR, name, null, 0);
+       }
+ 
+     // dog: rewritten to use the rules for XML 1.0 and 1.1
+     
+     // Name start character
+     char c = name.charAt(0);
+     if (xml11)
+       {
+         // XML 1.1
+         if ((c < 0x0041 || c > 0x005a) &&
+             (c < 0x0061 || c > 0x007a) &&
+             c != ':' && c != '_' &&
+             (c < 0x00c0 || c > 0x00d6) &&
+             (c < 0x00d8 || c > 0x00f6) &&
+             (c < 0x00f8 || c > 0x02ff) &&
+             (c < 0x0370 || c > 0x037d) &&
+             (c < 0x037f || c > 0x1fff) &&
+             (c < 0x200c || c > 0x200d) &&
+             (c < 0x2070 || c > 0x218f) &&
+             (c < 0x2c00 || c > 0x2fef) &&
+             (c < 0x3001 || c > 0xd7ff) &&
+             (c < 0xf900 || c > 0xfdcf) &&
+             (c < 0xfdf0 || c > 0xfffd) &&
+             (c < 0x10000 || c > 0xeffff))
+           {
+             throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
+                                       name, null, c);
+           }
+       }
+     else
+       {
+         // XML 1.0
+         int type = Character.getType(c);
+         switch (type)
+           {
+           case Character.LOWERCASE_LETTER: // Ll
+           case Character.UPPERCASE_LETTER: // Lu
+           case Character.OTHER_LETTER: // Lo
+           case Character.TITLECASE_LETTER: // Lt
+           case Character.LETTER_NUMBER: // Nl
+             if ((c > 0xf900 && c < 0xfffe) ||
+                 (c >= 0x20dd && c <= 0x20e0))
+               {
+                 // Compatibility area and Unicode 2.0 exclusions
+                 throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
+                                           name, null, c);
+               }
+             break;
+           default:
+             if (c != ':' && c != '_' && (c < 0x02bb || c > 0x02c1) &&
+                 c != 0x0559 && c != 0x06e5 && c != 0x06e6)
+               {
+                 throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
+                                           name, null, c);
+               }
+           }
+       }
+ 
+     // Subsequent characters
+     for (int i = 1; i < len; i++)
+       {
+         c = name.charAt(i);
+         if (xml11)
+           {
+             // XML 1.1
+             if ((c < 0x0041 || c > 0x005a) &&
+                 (c < 0x0061 || c > 0x007a) &&
+                 (c < 0x0030 || c > 0x0039) &&
+                 c != ':' && c != '_' && c != '-' && c != '.' &&
+                 (c < 0x00c0 || c > 0x00d6) &&
+                 (c < 0x00d8 || c > 0x00f6) &&
+                 (c < 0x00f8 || c > 0x02ff) &&
+                 (c < 0x0370 || c > 0x037d) &&
+                 (c < 0x037f || c > 0x1fff) &&
+                 (c < 0x200c || c > 0x200d) &&
+                 (c < 0x2070 || c > 0x218f) &&
+                 (c < 0x2c00 || c > 0x2fef) &&
+                 (c < 0x3001 || c > 0xd7ff) &&
+                 (c < 0xf900 || c > 0xfdcf) &&
+                 (c < 0xfdf0 || c > 0xfffd) &&
+                 (c < 0x10000 || c > 0xeffff) &&
+                 c != 0x00b7 &&
+                 (c < 0x0300 || c > 0x036f) &&
+                 (c < 0x203f || c > 0x2040))
+               {
+                 throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR, name,
+                                           null, c);
+               }
+           }
+         else
+           {
+             // XML 1.0
+             int type = Character.getType(c);
+             switch (type)
+               {
+               case Character.LOWERCASE_LETTER: // Ll
+               case Character.UPPERCASE_LETTER: // Lu
+               case Character.DECIMAL_DIGIT_NUMBER: // Nd
+               case Character.OTHER_LETTER: // Lo
+               case Character.TITLECASE_LETTER: // Lt
+               case Character.LETTER_NUMBER: // Nl
+               case Character.COMBINING_SPACING_MARK: // Mc
+               case Character.ENCLOSING_MARK: // Me
+               case Character.NON_SPACING_MARK: // Mn
+               case Character.MODIFIER_LETTER: // Lm
+                 if ((c > 0xf900 && c < 0xfffe) ||
+                     (c >= 0x20dd && c <= 0x20e0))
+                   {
+                     // Compatibility area and Unicode 2.0 exclusions
+                     throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
+                                               name, null, c);
+                   }
+                 break;
+               default:
+                 if (c != '-' && c != '.' && c != ':' && c != '_' &&
+                     c != 0x0387 && (c < 0x02bb || c > 0x02c1) &&
+                     c != 0x0559 && c != 0x06e5 && c != 0x06e6 && c != 0x00b7)
+                   {
+                     throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
+                                               name, null, c);
+                   }
+               }
+           }
+       }
+ 
+     // FIXME characters with a font or compatibility decomposition (i.e.
+     // those with a "compatibility formatting tag" in field 5 of the
+     // database -- marked by field 5 beginning with a "<") are not allowed.
+   }
+ 
+   // package private
+   static void checkNCName(String name, boolean xml11)
+   {
+     checkName(name, xml11);
+     int len = name.length();
+     int index = name.indexOf(':');
+     if (index != -1)
+       {
+         if (index == 0 || index == (len - 1) ||
+             name.lastIndexOf(':') != index)
+           {
+             throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                       name, null, 0);
+           }
+       }
+   }
+ 
+   // package private
+   static void checkChar(String value, boolean xml11)
+   {
+     char[] chars = value.toCharArray();
+     checkChar(chars, 0, chars.length, xml11);
+   }
+   
+   static void checkChar(char[] buf, int off, int len, boolean xml11)
+   {
+     for (int i = 0; i < len; i++)
+       {
+         char c = buf[i];
+         
+         // assume surrogate pairing checks out OK, for simplicity
+         if ((c >= 0x0020 && c <= 0xd7ff) ||
+             (c == 0x000a || c == 0x000d || c == 0x0009) ||
+             (c >= 0xe000 && c <= 0xfffd) ||
+             (c >= 0x10000 && c <= 0x10ffff))
+           {
+             continue;
+           }
+         if (xml11)
+           {
+             if ((c >= 0x0001 && c <= 0x001f) ||
+                 (c >= 0x007f && c <= 0x0084) ||
+                 (c >= 0x0086 && c <= 0x009f))
+               {
+                 continue;
+               }
+           }
+         throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
+                                   new String(buf, off, len), null, c);
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns a newly created element with the specified name.
+    */
+   public Element createElement(String name)
+   {
+     Element element;
+     
+     if (checkingCharacters)
+       {
+         checkName(name, "1.1".equals(version));
+       }
+     if (name.startsWith("xml:"))
+       {
+         element = createElementNS(null, name);
+       }
+     else
+       {
+         DomElement domElement = new DomElement(this, null, name);
+         domElement.localName = null;
+         element = domElement;
+       }
+     defaultAttributes(element, name);
+     return element;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns a newly created element with the specified name
+    * and namespace information.
+    */
+   public Element createElementNS(String namespaceURI, String name)
+   {
+     if (checkingCharacters)
+       {
+         checkNCName(name, "1.1".equals(version));
+       }
+     
+     if ("".equals(namespaceURI))
+       {
+         namespaceURI = null;
+       }
+     if (name.startsWith("xml:"))
+       {
+         if (namespaceURI != null
+             && !XMLConstants.XML_NS_URI.equals(namespaceURI))
+           {
+             throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                       "xml namespace is always " +
+                                       XMLConstants.XML_NS_URI, this, 0);
+           }
+         namespaceURI = XMLConstants.XML_NS_URI;
+       }
+     else if (XMLConstants.XMLNS_ATTRIBUTE.equals(name) ||
+              name.startsWith("xmlns:"))
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                   "xmlns is reserved", this, 0);
+       }
+     else if (namespaceURI == null && name.indexOf(':') != -1)
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                   "prefixed name '" + name +
+                                   "' needs a URI", this, 0);
+       }
+     
+     Element  element = new DomElement(this, namespaceURI, name);
+     defaultAttributes(element, name);
+     return element;
+   }
+   
+   private void defaultAttributes(Element element, String name)
+   {
+     DomDoctype doctype = (DomDoctype) getDoctype();
+     if (doctype == null)
+       {
+         return;
+       }
+ 
+     // default any attributes that need it
+     DTDElementTypeInfo info = doctype.getElementTypeInfo(name);
+     if (info != null)
+       {
+         for (Iterator i = info.attributes(); i != null && i.hasNext(); )
+           {
+             DTDAttributeTypeInfo attr = (DTDAttributeTypeInfo) i.next();
+             DomAttr node = (DomAttr) createAttribute(attr.name);
+             
+             String value = attr.value;
+             if (value == null)
+               {
+                 value = "";
+               }
+             node.setValue(value);
+             node.setSpecified(false);
+             element.setAttributeNode(node);
+           }
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns a newly created document fragment.
+    */
+   public DocumentFragment createDocumentFragment()
+   {
+     return new DomDocumentFragment(this);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns a newly created text node with the specified value.
+    */
+   public Text createTextNode(String value)
+   {
+     if (checkingCharacters)
+       {
+         checkChar(value, "1.1".equals(version));
+       }
+     return new DomText(this, value);
+   }
+ 
+   /**
+    * Returns a newly created text node with the specified value.
+    */
+   public Text createTextNode(char[] buf, int off, int len)
+   {
+     if (checkingCharacters)
+       {
+         checkChar(buf, off, len, "1.1".equals(version));
+       }
+     return new DomText(this, buf, off, len);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns a newly created comment node with the specified value.
+    */
+   public Comment createComment(String value)
+   {
+     if (checkingCharacters)
+       {
+         checkChar(value, "1.1".equals(version));
+       }
+     return new DomComment(this, value);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns a newly created CDATA section node with the specified value.
+    */
+   public CDATASection createCDATASection(String value)
+   {
+     if (checkingCharacters)
+       {
+         checkChar(value, "1.1".equals(version));
+       }
+     return new DomCDATASection(this, value);
+   }
+ 
+   /**
+    * Returns a newly created CDATA section node with the specified value.
+    */
+   public CDATASection createCDATASection(char[] buf, int off, int len)
+   {
+     if (checkingCharacters)
+       {
+         checkChar(buf, off, len, "1.1".equals(version));
+       }
+     return new DomCDATASection(this, buf, off, len);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns a newly created processing instruction.
+    */
+   public ProcessingInstruction createProcessingInstruction(String target,
+                                                            String data)
+   {
+     if (checkingCharacters)
+       {
+         boolean xml11 = "1.1".equals(version);
+         checkName(target, xml11);
+         if ("xml".equalsIgnoreCase(target))
+           {
+             throw new DomDOMException(DOMException.SYNTAX_ERR,
+                                       "illegal PI target name",
+                                       this, 0);
+           }
+         checkChar(data, xml11);
+       }
+     return new DomProcessingInstruction(this, target, data);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns a newly created attribute with the specified name.
+    */
+   public Attr createAttribute(String name)
+   {
+     if (checkingCharacters)
+       {
+         checkName(name, "1.1".equals(version));
+       }
+     if (name.startsWith("xml:"))
+       {
+         return createAttributeNS(XMLConstants.XML_NS_URI, name);
+       }
+     else if (XMLConstants.XMLNS_ATTRIBUTE.equals(name) ||
+              name.startsWith("xmlns:"))
+       {
+         return createAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, name);
+       }
+     else
+       {
+         DomAttr ret = new DomAttr(this, null, name);
+         ret.localName = null;
+         return ret;
+       }
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns a newly created attribute with the specified name
+    * and namespace information.
+    */
+   public Attr createAttributeNS(String namespaceURI, String name)
+   {
+     if (checkingCharacters)
+       {
+         checkNCName(name, "1.1".equals(version));
+       }
+     
+     if ("".equals(namespaceURI))
+       {
+         namespaceURI = null;
+       }
+     if (name.startsWith ("xml:"))
+       {
+         if (namespaceURI == null)
+           {
+             namespaceURI = XMLConstants.XML_NS_URI;
+           }
+         else if (!XMLConstants.XML_NS_URI.equals(namespaceURI))
+           {
+             throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                       "xml namespace is always " +
+                                       XMLConstants.XML_NS_URI,
+                                       this, 0);
+           }
+       }
+     else if (XMLConstants.XMLNS_ATTRIBUTE.equals(name) ||
+              name.startsWith("xmlns:"))
+       {
+         if (namespaceURI == null)
+           {
+             namespaceURI = XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
+           }
+         else if (!XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI))
+           {
+             throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                       "xmlns namespace must be " +
+                                       XMLConstants.XMLNS_ATTRIBUTE_NS_URI,
+                                       this, 0);
+           }
+       }
+     else if (namespaceURI == null && name.indexOf(':') != -1)
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                         "prefixed name needs a URI: " + name, this, 0);
+       }
+     return new DomAttr(this, namespaceURI, name);
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Returns a newly created reference to the specified entity.
+    * The caller should populate this with the appropriate children
+    * and then mark it as readonly.
+    *
+    * @see DomNode#makeReadonly
+    */
+   public EntityReference createEntityReference(String name)
+   {
+     DomEntityReference ret = new DomEntityReference(this, name);
+     DocumentType doctype = getDoctype();
+     if (doctype != null)
+       {
+         DomEntity ent = (DomEntity) doctype.getEntities().getNamedItem(name);
+         if (ent != null)
+           {
+             for (DomNode ctx = ent.first; ctx != null; ctx = ctx.next)
+               {
+                 ret.appendChild(ctx.cloneNode(true));
+               }
+           }
+       }
+     ret.makeReadonly();
+     return ret;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Makes a copy of the specified node, with all nodes "owned" by
+    * this document and with children optionally copied.  This type
+    * of standard utility has become, well, a standard utility.
+    *
+    * <p> Note that EntityReference nodes created through this method (either
+    * directly, or recursively) never have children, and that there is no
+    * portable way to associate them with such children.
+    *
+    * <p> Note also that there is no requirement that the specified node
+    * be associated with a different document.  This differs from the
+    * <em>cloneNode</em> operation in that the node itself is not given
+    * an opportunity to participate, so that any information managed
+    * by node subclasses will be lost.
+    */
+   public Node importNode(Node src, boolean deep)
+   {
+     Node dst = null;
+     switch (src.getNodeType())
+       {
+       case TEXT_NODE:
+         dst = createTextNode(src.getNodeValue());
+         break;
+       case CDATA_SECTION_NODE:
+         dst = createCDATASection(src.getNodeValue());
+         break;
+       case COMMENT_NODE:
+         dst = createComment(src.getNodeValue());
+         break;
+       case PROCESSING_INSTRUCTION_NODE:
+         dst = createProcessingInstruction(src.getNodeName(),
+                                           src.getNodeValue());
+         break;
+       case NOTATION_NODE:
+         // NOTE:  There's no standard way to create
+         // these, or add them to a doctype.  Useless.
+         Notation notation = (Notation) src;
+         dst = new DomNotation(this, notation.getNodeName(),
+                               notation.getPublicId(),
+                               notation.getSystemId());
+         break;
+       case ENTITY_NODE:
+         // NOTE:  There's no standard way to create
+         // these, or add them to a doctype.  Useless.
+         Entity entity = (Entity) src;
+         dst = new DomEntity(this, entity.getNodeName(),
+                             entity.getPublicId(),
+                             entity.getSystemId(),
+                             entity.getNotationName());
+         if (deep)
+           {
+             for (Node ctx = src.getFirstChild(); ctx != null;
+                  ctx = ctx.getNextSibling())
+               {
+                 dst.appendChild(importNode(ctx, deep));
+               }
+           }
+         break;
+       case ENTITY_REFERENCE_NODE:
+         dst = createEntityReference(src.getNodeName());
+         break;
+       case DOCUMENT_FRAGMENT_NODE:
+         dst = new DomDocumentFragment(this);
+         if (deep)
+           {
+             for (Node ctx = src.getFirstChild(); ctx != null;
+                  ctx = ctx.getNextSibling())
+               {
+                 dst.appendChild(importNode(ctx, deep));
+               }
+           }
+         break;
+       case ATTRIBUTE_NODE:
+         String attr_nsuri = src.getNamespaceURI();
+         if (attr_nsuri != null)
+           {
+             dst = createAttributeNS(attr_nsuri, src.getNodeName());
+           }
+         else
+           {
+             dst = createAttribute(src.getNodeName());
+           }
+         // this is _always_ done regardless of "deep" setting
+         for (Node ctx = src.getFirstChild(); ctx != null;
+              ctx = ctx.getNextSibling())
+           {
+             dst.appendChild(importNode(ctx, false));
+           }
+         break;
+       case ELEMENT_NODE:
+         String elem_nsuri = src.getNamespaceURI();
+         if (elem_nsuri != null)
+           {
+             dst = createElementNS(elem_nsuri, src.getNodeName());
+           }
+         else
+           {
+             dst = createElement(src.getNodeName());
+           }
+         NamedNodeMap srcAttrs = src.getAttributes();
+         NamedNodeMap dstAttrs = dst.getAttributes();
+         int len = srcAttrs.getLength();
+         for (int i = 0; i < len; i++)
+           {
+             Attr a = (Attr) srcAttrs.item(i);
+             Attr dflt;
+             
+             // maybe update defaulted attributes
+             dflt = (Attr) dstAttrs.getNamedItem(a.getNodeName());
+             if (dflt != null)
+               {
+                 String newval = a.getNodeValue();
+                 if (!dflt.getNodeValue().equals(newval)
+                     || a.getSpecified () == true)
+                   {
+                     dflt.setNodeValue (newval);
+                   }
+                 continue;
+               }
+             
+             dstAttrs.setNamedItem((Attr) importNode(a, false));
+           }
+         if (deep)
+           {
+             for (Node ctx = src.getFirstChild(); ctx != null;
+                  ctx = ctx.getNextSibling())
+               {
+                 dst.appendChild(importNode(ctx, true));
+               }
+           }
+         break;
+         // can't import document or doctype nodes
+       case DOCUMENT_NODE:
+       case DOCUMENT_TYPE_NODE:
+         // FALLTHROUGH
+         // can't import unrecognized or nonstandard nodes
+       default:
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR, null, src, 0);
+       }
+     
+     // FIXME cleanup a bit -- for deep copies, copy those
+     // children in one place, here (code sharing is healthy)
+ 
+     if (src instanceof DomNode)
+       {
+         ((DomNode) src).notifyUserDataHandlers(UserDataHandler.NODE_IMPORTED,
+                                                src, dst);
+       }
+     return dst;
+   }
+ 
+   /**
+    * <b>DOM L2 (Traversal)</b>
+    * Returns a newly created node iterator.  Don't forget to detach
+    * this iterator when you're done using it!
+    *
+    * @see DomIterator
+    */
+   public NodeIterator createNodeIterator(Node root,
+                                          int whatToShow,
+                                          NodeFilter filter,
+                                          boolean expandEntities)
+   {
+     return new DomNodeIterator(root, whatToShow, filter, expandEntities,
+                                false);
+   }
+ 
+   public TreeWalker createTreeWalker(Node root,
+                                      int whatToShow,
+                                      NodeFilter filter,
+                                      boolean expandEntities)
+   {
+     return new DomNodeIterator(root, whatToShow, filter, expandEntities,
+                                true);
+   }
+ 
+   // DOM Level 3 methods
+   
+   /**
+    * DOM L3
+    */
+   public String getInputEncoding()
+   {
+     return inputEncoding;
+   }
+ 
+   public void setInputEncoding(String inputEncoding)
+   {
+     this.inputEncoding = inputEncoding;
+   }
+   
+   /**
+    * DOM L3
+    */
+   public String getXmlEncoding()
+   {
+     return encoding;
+   }
+   
+   public void setXmlEncoding(String encoding)
+   {
+     this.encoding = encoding;
+   }
+   
+   public boolean getXmlStandalone()
+   {
+     return standalone;
+   }
+ 
+   public void setXmlStandalone(boolean xmlStandalone)
+   {
+     standalone = xmlStandalone;
+   }
+ 
+   public String getXmlVersion()
+   {
+     return version;
+   }
+ 
+   public void setXmlVersion(String xmlVersion)
+   {
+     if (xmlVersion == null)
+       {
+         xmlVersion = "1.0";
+       }
+     if ("1.0".equals(xmlVersion) ||
+         "1.1".equals(xmlVersion))
+       {
+         version = xmlVersion;
+       }
+     else
+       {
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+       }
+   }
+ 
+   public boolean getStrictErrorChecking()
+   {
+     return checkingCharacters;
+   }
+ 
+   public void setStrictErrorChecking(boolean strictErrorChecking)
+   {
+     checkingCharacters = strictErrorChecking;
+   }
+ 
+   public String lookupPrefix(String namespaceURI)
+   {
+     Node root = getDocumentElement();
+     return (root == null) ? null : root.lookupPrefix(namespaceURI);
+   }
+ 
+   public boolean isDefaultNamespace(String namespaceURI)
+   {
+     Node root = getDocumentElement();
+     return (root == null) ? false : root.isDefaultNamespace(namespaceURI);
+   }
+ 
+   public String lookupNamespaceURI(String prefix)
+   {
+     Node root = getDocumentElement();
+     return (root == null) ? null : root.lookupNamespaceURI(prefix);
+   }
+ 
+   public String getBaseURI()
+   {
+     return getDocumentURI();
+     /*
+     Node root = getDocumentElement();
+     if (root != null)
+       {
+         NamedNodeMap attrs = root.getAttributes();
+         Node xmlBase = attrs.getNamedItemNS(XMLConstants.XML_NS_URI, "base");
+         if (xmlBase != null)
+           {
+             return xmlBase.getNodeValue();
+           }
+       }
+     return systemId;
+     */
+   }
+   
+   public String getDocumentURI()
+   {
+     return systemId;
+   }
+ 
+   public void setDocumentURI(String documentURI)
+   {
+     systemId = documentURI;
+   }
+ 
+   public Node adoptNode(Node source)
+   {
+     int sourceNodeType = source.getNodeType();
+     switch (sourceNodeType)
+       {
+       case DOCUMENT_NODE:
+       case DOCUMENT_TYPE_NODE:
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+       case ENTITY_NODE:
+       case NOTATION_NODE:
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     if (source instanceof DomNode)
+       {
+         // GNU native
+         DomNode src = (DomNode) source;
+         DomNode dst = src;
+         if (dst.parent != null)
+           {
+             dst = (DomNode) dst.cloneNode(true);
+           }
+         dst.setOwner(this);
+         src.notifyUserDataHandlers(UserDataHandler.NODE_ADOPTED, src, dst);
+         return dst;
+       }
+     else
+       {
+         // Some other implementation
+         Node dst = null;
+         switch (sourceNodeType)
+           {
+           case Node.ATTRIBUTE_NODE:
+               {
+                 Attr src = (Attr) source;
+                 String nodeName = src.getNodeName();
+                 String localName = src.getLocalName();
+                 String namespaceUri = src.getNamespaceURI();
+                 dst = (localName == null) ?
+                   createAttribute(nodeName) :
+                   createAttributeNS(namespaceUri, nodeName);
+                 adoptChildren(src, dst);
+                 break;
+               }
+           case Node.CDATA_SECTION_NODE:
+               {
+                 CDATASection src = (CDATASection) source;
+                 dst = createCDATASection(src.getData());
+                 break;
+               }
+           case Node.COMMENT_NODE:
+               {
+                 Comment src = (Comment) source;
+                 dst = createComment(src.getData());
+                 break;
+               }
+           case Node.DOCUMENT_FRAGMENT_NODE:
+               {
+                 DocumentFragment src = (DocumentFragment) source;
+                 dst = createDocumentFragment();
+                 adoptChildren(src, dst);
+                 break;
+               }
+           case Node.ELEMENT_NODE:
+               {
+                 Element src = (Element) source;
+                 String nodeName = src.getNodeName();
+                 String localName = src.getLocalName();
+                 String namespaceUri = src.getNamespaceURI();
+                 dst = (localName == null) ?
+                   createElement(nodeName) :
+                   createElementNS(namespaceUri, nodeName);
+                 adoptAttributes(src, dst);
+                 adoptChildren(src, dst);
+                 break;
+               }
+           case Node.ENTITY_REFERENCE_NODE:
+               {
+                 EntityReference src = (EntityReference) source;
+                 dst = createEntityReference(src.getNodeName());
+                 adoptChildren(src, dst);
+                 break;
+               }
+           case Node.PROCESSING_INSTRUCTION_NODE:
+               {
+                 ProcessingInstruction src = (ProcessingInstruction) source;
+                 dst = createProcessingInstruction(src.getTarget(),
+                                                   src.getData());
+                 break;
+               }
+           case Node.TEXT_NODE:
+               {
+                 Text src = (Text) source;
+                 dst = createTextNode(src.getData());
+                 break;
+               }
+           }
+         return dst;
+       }
+   }
+ 
+   void adoptChildren(Node src, Node dst)
+   {
+     Node node = src.getFirstChild();
+     while (node != null)
+       {
+         Node next = node.getNextSibling();
+         dst.appendChild(adoptNode(node));
+         node = next;
+       }
+   }
+ 
+   void adoptAttributes(Node src, Node dst)
+   {
+     NamedNodeMap srcAttrs = src.getAttributes();
+     NamedNodeMap dstAttrs = dst.getAttributes();
+     int len = srcAttrs.getLength();
+     for (int i = 0; i < len; i++)
+       {
+         Node node = srcAttrs.item(i);
+         String localName = node.getLocalName();
+         if (localName == null)
+           {
+             dstAttrs.setNamedItem(adoptNode(node));
+           }
+         else
+           {
+             dstAttrs.setNamedItemNS(adoptNode(node));
+           }
+       }
+   }
+ 
+   public DOMConfiguration getDomConfig()
+   {
+     if (config == null)
+       {
+         config = new DomDocumentConfiguration();
+       }
+     return config;
+   }
+ 
+   public void normalizeDocument()
+   {
+     boolean save = building;
+     building = true;
+     normalizeNode(this);
+     building = save;
+   }
+ 
+   void normalizeNode(DomNode node)
+   {
+     node.normalize();
+     if (config != null)
+       {
+         switch (node.nodeType)
+           {
+           case CDATA_SECTION_NODE:
+             if (!config.cdataSections)
+               {
+                 // replace CDATA section with text node
+                 Text text = createTextNode(node.getNodeValue());
+                 node.parent.insertBefore(text, node);
+                 node.parent.removeChild(node);
+                 // merge adjacent text nodes
+                 String data = text.getWholeText();
+                 node = (DomNode) text.replaceWholeText(data);
+               }
+             else if (config.splitCdataSections)
+               {
+                 String value = node.getNodeValue();
+                 int i = value.indexOf("]]>");
+                 while (i != -1)
+                   {
+                     Node node2 = createCDATASection(value.substring(0, i));
+                     node.parent.insertBefore(node2, node);
+                     value = value.substring(i + 3);
+                     node.setNodeValue(value);
+                     i = value.indexOf("]]>");
+                   }
+               }
+             break;
+           case COMMENT_NODE:
+             if (!config.comments)
+               {
+                 node.parent.removeChild(node);
+               }
+             break;
+           case TEXT_NODE:
+             if (!config.elementContentWhitespace &&
+                 ((Text) node).isElementContentWhitespace())
+               {
+                 node.parent.removeChild(node);
+               }
+             break;
+           case ENTITY_REFERENCE_NODE:
+             if (!config.entities)
+               {
+                 for (DomNode ctx = node.first; ctx != null; )
+                   {
+                     DomNode ctxNext = ctx.next;
+                     node.parent.insertBefore(ctx, node);
+                     ctx = ctxNext;
+                   }
+                 node.parent.removeChild(node);
+               }
+             break;
+           case ELEMENT_NODE:
+             if (!config.namespaceDeclarations)
+               {
+                 DomNamedNodeMap attrs =
+                   (DomNamedNodeMap) node.getAttributes();
+                 boolean aro = attrs.readonly;
+                 attrs.readonly = false; // Ensure we can delete if necessary
+                 int len = attrs.getLength();
+                 for (int i = 0; i < len; i++)
+                   {
+                     Node attr = attrs.item(i);
+                     String namespace = attr.getNamespaceURI();
+                     if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespace))
+                       {
+                         attrs.removeNamedItemNS(namespace,
+                                                 attr.getLocalName());
+                         i--;
+                         len--;
+                       }
+                   }
+                 attrs.readonly = aro;
+               }
+             break;
+           }
+       }
+     for (DomNode ctx = node.first; ctx != null; )
+       {
+         DomNode ctxNext = ctx.next;
+         normalizeNode(ctx);
+         ctx = ctxNext;
+       }
+   }
+   
+   public Node renameNode(Node n, String namespaceURI, String qualifiedName)
+     throws DOMException
+   {
+     if (n instanceof DomNsNode)
+       {
+         DomNsNode src = (DomNsNode) n;
+         if (src == null)
+           {
+             throw new DomDOMException(DOMException.NOT_FOUND_ERR);
+           }
+         if (src.owner != this)
+           {
+             throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
+                                       null, src, 0);
+           }
+         boolean xml11 = "1.1".equals(version);
+         checkName(qualifiedName, xml11);
+         int ci = qualifiedName.indexOf(':');
+         if ("".equals(namespaceURI))
+           {
+             namespaceURI = null;
+           }
+         if (namespaceURI != null)
+           {
+             checkNCName(qualifiedName, xml11);
+             String prefix = (ci == -1) ? "" :
+               qualifiedName.substring(0, ci);
+             if (XMLConstants.XML_NS_PREFIX.equals(prefix) &&
+                 !XMLConstants.XML_NS_URI.equals(namespaceURI))
+               {
+                 throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                 "xml namespace must be " +
+                                 XMLConstants.XML_NS_URI, src, 0);
+               }
+             else if (src.nodeType == ATTRIBUTE_NODE &&
+                      (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix) ||
+                       XMLConstants.XMLNS_ATTRIBUTE.equals(qualifiedName)) &&
+                      !XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI))
+               {
+                 throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                 "xmlns namespace must be " +
+                                 XMLConstants.XMLNS_ATTRIBUTE_NS_URI, src, 0);
+               }
+             if (XMLConstants.XML_NS_URI.equals(namespaceURI) &&
+                 !XMLConstants.XML_NS_PREFIX.equals(prefix))
+               {
+                 throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                 "xml namespace must be " +
+                                 XMLConstants.XML_NS_URI, src, 0);
+               }
+             else if (src.nodeType == ATTRIBUTE_NODE &&
+                      XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI) &&
+                      !(XMLConstants.XMLNS_ATTRIBUTE.equals(prefix) ||
+                        XMLConstants.XMLNS_ATTRIBUTE.equals(qualifiedName)))
+               {
+                 throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                 "xmlns namespace must be " +
+                                 XMLConstants.XMLNS_ATTRIBUTE_NS_URI, src, 0);
+               }
+                 
+           }
+         src.setNodeName(qualifiedName);
+         src.setNamespaceURI(namespaceURI);
+         src.notifyUserDataHandlers(UserDataHandler.NODE_RENAMED, src, src);
+         // TODO MutationNameEvents
+         // DOMElementNameChanged or DOMAttributeNameChanged
+         return src;
+       }
+     throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR, null, n, 0);
+   }
+ 
+   // -- XPathEvaluator --
+   
+   public XPathExpression createExpression(String expression,
+                                           XPathNSResolver resolver)
+     throws XPathException, DOMException
+   {
+     return new DomXPathExpression(this, expression, resolver);
+   }
+   
+   public XPathNSResolver createNSResolver(Node nodeResolver)
+   {
+     return new DomXPathNSResolver(nodeResolver);
+   }
+     
+   public Object evaluate(String expression,
+                          Node contextNode,
+                          XPathNSResolver resolver,
+                          short type,
+                          Object result)
+     throws XPathException, DOMException
+   {
+     XPathExpression xpe =
+       new DomXPathExpression(this, expression, resolver);
+     return xpe.evaluate(contextNode, type, result);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocumentBuilder.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocumentBuilder.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocumentBuilder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocumentBuilder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,171 ----
+ /* DomDocumentBuilder.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.Reader;
+ import java.net.URL;
+ import javax.xml.parsers.DocumentBuilder;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DOMConfiguration;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.ls.DOMImplementationLS;
+ import org.w3c.dom.ls.LSInput;
+ import org.w3c.dom.ls.LSParser;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ 
+ /**
+  * Document builder using the GNU DOM Load &amp; Save implementation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DomDocumentBuilder
+   extends DocumentBuilder
+ {
+ 
+   final DOMImplementation impl;
+   final DOMImplementationLS ls;
+   final LSParser parser;
+   
+   DomDocumentBuilder(DOMImplementation impl,
+                      DOMImplementationLS ls,
+                      LSParser parser)
+   {
+     this.impl = impl;
+     this.ls = ls;
+     this.parser = parser;
+   }
+ 
+   public boolean isNamespaceAware()
+   {
+     DOMConfiguration config = parser.getDomConfig();
+     return ((Boolean) config.getParameter("namespaces")).booleanValue();
+   }
+   
+   public boolean isValidating()
+   {
+     DOMConfiguration config = parser.getDomConfig();
+     return ((Boolean) config.getParameter("validating")).booleanValue();
+   }
+ 
+   public boolean isXIncludeAware()
+   {
+     DOMConfiguration config = parser.getDomConfig();
+     return ((Boolean) config.getParameter("xinclude-aware")).booleanValue();
+   }
+ 
+   public void setEntityResolver(EntityResolver resolver)
+   {
+     DOMConfiguration config = parser.getDomConfig();
+     config.setParameter("entity-resolver", resolver);
+   }
+ 
+   public void setErrorHandler(ErrorHandler handler)
+   {
+     DOMConfiguration config = parser.getDomConfig();
+     config.setParameter("error-handler", handler);
+   }
+ 
+   public DOMImplementation getDOMImplementation()
+   {
+     return impl;
+   }
+   
+   public Document newDocument()
+   {
+     return impl.createDocument(null, null, null);
+   }
+ 
+   public Document parse(InputStream in)
+     throws SAXException, IOException
+   {
+     LSInput input = ls.createLSInput();
+     input.setByteStream(in);
+     return parser.parse(input);
+   }
+ 
+   public Document parse(InputStream in, String systemId)
+     throws SAXException, IOException
+   {
+     LSInput input = ls.createLSInput();
+     input.setByteStream(in);
+     input.setSystemId(systemId);
+     return parser.parse(input);
+   }
+ 
+   public Document parse(String systemId)
+     throws SAXException, IOException
+   {
+     return parser.parseURI(systemId);
+   }
+ 
+   public Document parse(InputSource is)
+     throws SAXException, IOException
+   {
+     LSInput input = ls.createLSInput();
+     String systemId = is.getSystemId();
+     InputStream in = is.getByteStream();
+     if (in != null)
+       {
+         input.setByteStream(in);
+       }
+     else
+       {
+         Reader reader = is.getCharacterStream();
+         if (reader != null)
+           {
+             input.setCharacterStream(reader);
+           }
+         else
+           {
+             URL url = new URL(systemId);
+             input.setByteStream(url.openStream());
+           }
+       }
+     input.setPublicId(is.getPublicId());
+     input.setSystemId(systemId);
+     input.setEncoding(is.getEncoding());
+     return parser.parse(input);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocumentBuilderFactory.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocumentBuilderFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocumentBuilderFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocumentBuilderFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,128 ----
+ /* DomDocumentBuilderFactory.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import javax.xml.parsers.DocumentBuilder;
+ import javax.xml.parsers.DocumentBuilderFactory;
+ import javax.xml.parsers.FactoryConfigurationError;
+ import javax.xml.parsers.ParserConfigurationException;
+ import org.w3c.dom.DOMConfiguration;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.bootstrap.DOMImplementationRegistry;
+ import org.w3c.dom.ls.DOMImplementationLS;
+ import org.w3c.dom.ls.LSParser;
+ 
+ /**
+  * Document builder factory that uses a DOM Level 3 Load &amp; Save
+  * implementation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomDocumentBuilderFactory
+   extends DocumentBuilderFactory
+ {
+ 
+   final DOMImplementation impl;
+   final DOMImplementationLS ls;
+ 
+   public DomDocumentBuilderFactory()
+   {
+     try
+       {
+         DOMImplementationRegistry reg =
+           DOMImplementationRegistry.newInstance();
+         impl = reg.getDOMImplementation("LS 3.0");
+         if (impl == null)
+           {
+             throw new FactoryConfigurationError("no LS implementations found");
+           }
+         ls = (DOMImplementationLS) impl;
+       }
+     catch (Exception e)
+       {
+         throw new FactoryConfigurationError(e);
+       }
+   }
+ 
+   public DocumentBuilder newDocumentBuilder()
+     throws ParserConfigurationException
+   {
+     LSParser parser = ls.createLSParser(DOMImplementationLS.MODE_ASYNCHRONOUS,
+                                         "http://www.w3.org/TR/REC-xml");
+     DOMConfiguration config = parser.getDomConfig();
+     setParameter(config, "namespaces",
+                  isNamespaceAware() ? Boolean.TRUE : Boolean.FALSE);
+     setParameter(config, "element-content-whitespace",
+                  isIgnoringElementContentWhitespace() ? Boolean.FALSE :
+                  Boolean.TRUE);
+     setParameter(config, "comments",
+                  isIgnoringComments() ? Boolean.FALSE : Boolean.TRUE);
+     setParameter(config, "expand-entity-references",
+                  isExpandEntityReferences() ? Boolean.TRUE : Boolean.FALSE);
+     setParameter(config, "coalescing",
+                  isCoalescing() ? Boolean.TRUE : Boolean.FALSE);
+     setParameter(config, "validating",
+                  isValidating() ? Boolean.TRUE : Boolean.FALSE);
+     setParameter(config, "xinclude-aware",
+                  isXIncludeAware() ? Boolean.TRUE : Boolean.FALSE);
+     return new DomDocumentBuilder(impl, ls, parser);
+   }
+ 
+   void setParameter(DOMConfiguration config, String name, Object value)
+     throws ParserConfigurationException
+   {
+     if (!config.canSetParameter(name, value))
+       {
+         throw new ParserConfigurationException(name);
+       }
+     config.setParameter(name, value);
+   }
+ 
+   public Object getAttribute(String name)
+   {
+     // TODO
+     return null;
+   }
+ 
+   public void setAttribute(String name, Object value)
+   {
+     // TODO
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocumentConfiguration.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocumentConfiguration.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocumentConfiguration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocumentConfiguration.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,260 ----
+ /* DomDocumentConfiguration.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.util.Arrays;
+ import java.util.List;
+ import org.w3c.dom.DOMConfiguration;
+ import org.w3c.dom.DOMErrorHandler;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.DOMStringList;
+ 
+ /**
+  * Document configuration, used to store normalization and other parameters.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DomDocumentConfiguration
+   implements DOMConfiguration, DOMStringList
+ {
+ 
+   private static final List SUPPORTED_PARAMETERS =
+     Arrays.asList(new String[] { "cdata-sections",
+                   "comments",
+                   "element-content-whitespace",
+                   "entities",
+                   "error-handler",
+                   "namespace-declarations",
+                   "split-cdata-sections",
+                   "infoset"});
+ 
+   boolean cdataSections = true;
+   boolean comments = true;
+   boolean elementContentWhitespace = true;
+   boolean entities = true;
+   DOMErrorHandler errorHandler;
+   boolean namespaceDeclarations = true;
+   boolean splitCdataSections = true;
+ 
+   public void setParameter(String name, Object value)
+     throws DOMException
+   {
+     name = name.toLowerCase();
+     if ("cdata-sections".equals(name))
+       {
+         cdataSections = "true".equals(value.toString());
+       }
+     else if ("comments".equals(name))
+       {
+         comments = "true".equals(value.toString());
+       }
+     else if ("element-content-whitespace".equals(name))
+       {
+         elementContentWhitespace = "true".equals(value.toString());
+       }
+     else if ("entities".equals(name))
+       {
+         entities = "true".equals(value.toString());
+       }
+     else if ("error-handler".equals(name))
+       {
+         try
+           {
+             errorHandler = (DOMErrorHandler) value;
+           }
+         catch (ClassCastException e)
+           {
+             throw new DomDOMException(DOMException.TYPE_MISMATCH_ERR,
+                                       value.getClass().getName(), null, 0);
+           }
+       }
+     else if ("namespace-declarations".equals(name))
+       {
+         namespaceDeclarations = "true".equals(value.toString());
+       }
+     else if ("split-cdata-sections".equals(name))
+       {
+         comments = "true".equals(value.toString());
+       }
+     else if ("infoset".equals(name))
+       {
+         if ("true".equals(value.toString()))
+           {
+             entities = false;
+             cdataSections = false;
+             namespaceDeclarations = true;
+             elementContentWhitespace = true;
+             comments = true;
+           }
+       }
+     else if (("canonical-form".equals(name) ||
+               "check-character-normalization".equals(name) ||
+               "datatype-normalization".equals(name) ||
+               "normalize-characters".equals(name) ||
+               "validate".equals(name) ||
+               "validate-if-schema".equals(name)) &&
+              "false".equals(value.toString()))
+       {
+         // NOOP
+       }
+     else if (("namespaces".equals(name) ||
+               "well-formed".equals(name)) &&
+              "true".equals(value.toString()))
+       {
+         // NOOP
+       }
+     else
+       {
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR,
+                                   name, null, 0);
+       }
+   }
+ 
+   public Object getParameter(String name)
+     throws DOMException
+   {
+     name = name.toLowerCase();
+     if ("cdata-sections".equals(name))
+       {
+         return cdataSections ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("comments".equals(name))
+       {
+         return comments ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("element-content-whitespace".equals(name))
+       {
+         return elementContentWhitespace ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("entities".equals(name))
+       {
+         return entities ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("error-handler".equals(name))
+       {
+         return errorHandler;
+       }
+     else if ("namespace-declarations".equals(name))
+       {
+         return namespaceDeclarations ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("split-cdata-sections".equals(name))
+       {
+         return comments ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("canonical-form".equals(name) ||
+              "check-character-normalization".equals(name) ||
+              "datatype-normalization".equals(name) ||
+              "normalize-characters".equals(name) ||
+              "validate".equals(name) ||
+              "validate-if-schema".equals(name))
+       {
+         return Boolean.FALSE;
+       }
+     else if ("namespaces".equals(name) ||
+              "well-formed".equals(name))
+       {
+         return Boolean.TRUE;
+       }
+     else if ("infoset".equals(name))
+       {
+         return (entities == false &&
+             cdataSections == false &&
+             namespaceDeclarations == true &&
+             comments == true) ? Boolean.TRUE : Boolean.FALSE;
+       }
+     throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR, name, null, 0);
+   }
+ 
+   public boolean canSetParameter(String name, Object value)
+   {
+     name = name.toLowerCase();
+     if ("error-handler".equals(name))
+       {
+         return (value == null || value instanceof DOMErrorHandler);
+       }
+     else if (contains(name))
+       {
+         return true;
+       }
+     else if ("canonical-form".equals(name) ||
+              "check-character-normalization".equals(name) ||
+              "datatype-normalization".equals(name) ||
+              "normalize-characters".equals(name) ||
+              "validate".equals(name) ||
+              "validate-if-schema".equals(name))
+       {
+         return "false".equals(value.toString());
+       }
+     else if ("namespaces".equals(name) ||
+              "well-formed".equals(name))
+       {
+         return "true".equals(value.toString());
+       }
+     return false;
+   }
+ 
+   public DOMStringList getParameterNames()
+   {
+     return this;
+   }
+ 
+   public String item(int i)
+   {
+     try
+       {
+         return (String) SUPPORTED_PARAMETERS.get(i);
+       }
+     catch (IndexOutOfBoundsException e)
+       {
+         return null;
+       }
+   }
+   
+   public int getLength()
+   {
+     return SUPPORTED_PARAMETERS.size();
+   }
+   
+   public boolean contains(String str)
+   {
+     str = str.toLowerCase();
+     return SUPPORTED_PARAMETERS.contains(str);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocumentFragment.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocumentFragment.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomDocumentFragment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomDocumentFragment.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* DomDocumentFragment.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.DocumentFragment;
+ 
+ /**
+  * <p> "DocumentFragment" implementation.  </p>
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomDocumentFragment
+   extends DomNode
+   implements DocumentFragment
+ {
+   
+   /**
+    * Constructs a DocumentFragment node associated with the
+    * specified document.
+    *
+    * <p>This constructor should only be invoked by a Document as part of
+    * its createDocumentFragment functionality, or through a subclass which
+    * is similarly used in a "Sub-DOM" style layer.
+    */
+   protected DomDocumentFragment(DomDocument owner)
+   {
+     super(DOCUMENT_FRAGMENT_NODE, owner);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the string "#document-fragment".
+    */
+   final public String getNodeName()
+   {
+     return "#document-fragment";
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,523 ----
+ /* DomElement.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.util.HashSet;
+ import java.util.Set;
+ import javax.xml.XMLConstants;
+ 
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.TypeInfo;
+ 
+ /**
+  * <p> "Element" implementation.
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomElement
+   extends DomNsNode
+   implements Element
+ {
+ 
+   /**
+    * User-defined ID attributes.
+    * Used by DomAttr.isId and DomDocument.getElementById
+    */
+   Set userIdAttrs;
+ 
+   // Attributes are VERY expensive in DOM, and not just for
+   // this implementation.  Avoid creating them.
+   private DomNamedNodeMap attributes;
+ 
+   // xml:space cache
+   String xmlSpace = "";
+ 
+   /**
+    * Constructs an Element node associated with the specified document.
+    *
+    * <p>This constructor should only be invoked by a Document as part
+    * of its createElement functionality, or through a subclass which is
+    * similarly used in a "Sub-DOM" style layer.
+    *
+    * @param owner The document with which this node is associated
+    * @param namespaceURI Combined with the local part of the name,
+    *	this is used to uniquely identify a type of element
+    * @param name Name of this element, which may include a prefix
+    */
+   protected DomElement(DomDocument owner, String namespaceURI, String name)
+   {
+     super(ELEMENT_NODE, owner, namespaceURI, name);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the element's attributes
+    */
+   public NamedNodeMap getAttributes()
+   {
+     if (attributes == null)
+       {
+         attributes = new DomNamedNodeMap(this, Node.ATTRIBUTE_NODE);
+       }
+     return attributes;
+   }
+ 
+   /**
+    * <b>DOM L2></b>
+    * Returns true iff this is an element node with attributes.
+    */
+   public boolean hasAttributes()
+   {
+     return attributes != null && attributes.length != 0;
+   }
+ 
+   /**
+    * Shallow clone of the element, except that associated
+    * attributes are (deep) cloned.
+    */
+   public Object clone()
+   {
+     DomElement node = (DomElement) super.clone();
+ 
+     if (attributes != null)
+       {
+         node.attributes = new DomNamedNodeMap(node, Node.ATTRIBUTE_NODE);
+         for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
+           {
+             node.attributes.setNamedItemNS(ctx.cloneNode(true));
+           }
+       }
+     return node;
+   }
+ 
+   void setOwner(DomDocument doc)
+   {
+     if (attributes != null)
+       {
+         for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
+           {
+             ctx.setOwner(doc);
+           }
+       }
+     super.setOwner(doc);
+   }
+ 
+   /**
+    * Marks this element, its children, and its associated attributes as
+    * readonly.
+    */
+   public void makeReadonly()
+   {
+     super.makeReadonly();
+     if (attributes != null)
+       {
+         attributes.makeReadonly();
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the element name (same as getNodeName).
+    */
+   final public String getTagName()
+   {
+     return getNodeName();
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the value of the specified attribute, or an
+    * empty string.
+    */
+   public String getAttribute(String name)
+   {
+     if ("xml:space" == name) // NB only works on interned string
+       {
+         // Use cached value
+         return xmlSpace;
+       }
+     Attr attr = getAttributeNode(name);
+     return (attr == null) ? "" : attr.getValue();
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns true if the element has an attribute with the
+    * specified name (specified or DTD defaulted).
+    */
+   public boolean hasAttribute(String name)
+   {
+     return getAttributeNode(name) != null;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns true if the element has an attribute with the
+    * specified name (specified or DTD defaulted).
+    */
+   public boolean hasAttributeNS(String namespaceURI, String local)
+   {
+     return getAttributeNodeNS(namespaceURI, local) != null;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns the value of the specified attribute, or an
+    * empty string.
+    */
+   public String getAttributeNS(String namespaceURI, String local)
+   {
+     Attr attr = getAttributeNodeNS(namespaceURI, local);
+     return (attr == null) ? "" : attr.getValue();
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the appropriate attribute node; the name is the
+    * nodeName property of the attribute.
+    */
+   public Attr getAttributeNode(String name)
+   {
+     return (attributes == null) ? null :
+       (Attr) attributes.getNamedItem(name);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns the appropriate attribute node; the name combines
+    * the namespace name and the local part.
+    */
+   public Attr getAttributeNodeNS(String namespace, String localPart)
+   {
+     return (attributes == null) ? null :
+       (Attr) attributes.getNamedItemNS(namespace, localPart);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Modifies an existing attribute to have the specified value,
+    * or creates a new one with that value.  The name used is the
+    * nodeName value. 
+    */
+   public void setAttribute(String name, String value)
+   {
+     Attr attr = getAttributeNode(name);
+     if (attr != null)
+       {
+         attr.setNodeValue(value);
+         ((DomAttr) attr).setSpecified(true);
+         return;
+       }
+     attr = owner.createAttribute(name);
+     attr.setNodeValue(value);
+     setAttributeNode(attr);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Modifies an existing attribute to have the specified value,
+    * or creates a new one with that value.
+    */
+   public void setAttributeNS(String uri, String aname, String value)
+   {
+     if (("xmlns".equals (aname) || aname.startsWith ("xmlns:"))
+         && !XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals (uri))
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                         "setting xmlns attribute to illegal value", this, 0);
+       }
+ 
+     Attr attr = getAttributeNodeNS(uri, aname);
+     if (attr != null)
+       {
+         attr.setNodeValue(value);
+         return;
+       }
+     attr = owner.createAttributeNS(uri, aname);
+     attr.setNodeValue(value);
+     setAttributeNodeNS(attr);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Stores the specified attribute, optionally overwriting any
+    * existing one with that name.
+    */
+   public Attr setAttributeNode(Attr attr)
+   {
+     return (Attr) getAttributes().setNamedItem(attr);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Stores the specified attribute, optionally overwriting any
+    * existing one with that name.
+    */
+   public Attr setAttributeNodeNS(Attr attr)
+   {
+     return (Attr) getAttributes().setNamedItemNS(attr);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Removes the appropriate attribute node.
+    * If there is no such node, this is (bizarrely enough) a NOP so you
+    * won't see exceptions if your code deletes non-existent attributes.
+    *
+    * <p>Note that since there is no portable way for DOM to record
+    * DTD information, default values for attributes will never be
+    * provided automatically.
+    */
+   public void removeAttribute(String name)
+   {
+     if (attributes == null)
+       {
+         return;
+       }
+ 
+     try
+       {
+         attributes.removeNamedItem(name);
+       }
+     catch (DomDOMException e)
+       {
+         if (e.code != DOMException.NOT_FOUND_ERR)
+           {
+             throw e;
+           }
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Removes the appropriate attribute node; the name is the
+    * nodeName property of the attribute.
+    *
+    * <p>Note that since there is no portable way for DOM to record
+    * DTD information, default values for attributes will never be
+    * provided automatically.
+    */
+   public Attr removeAttributeNode(Attr node)
+   {
+     if (attributes == null)
+       {
+         throw new DomDOMException(DOMException.NOT_FOUND_ERR, null, node, 0);
+       }
+     return (Attr) attributes.removeNamedItem(node.getNodeName());
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Removes the appropriate attribute node; the name combines
+    * the namespace name and the local part.
+    *
+    * <p>Note that since there is no portable way for DOM to record
+    * DTD information, default values for attributes will never be
+    * provided automatically.
+    */
+   public void removeAttributeNS(String namespace, String localPart)
+   {
+     if (attributes == null)
+       {
+         throw new DomDOMException(DOMException.NOT_FOUND_ERR, localPart, null, 0);
+       }
+     attributes.removeNamedItemNS (namespace, localPart);
+   }
+ 
+   // DOM Level 3 methods
+ 
+   public String lookupPrefix(String namespaceURI)
+   {
+     if (namespaceURI == null)
+       {
+         return null;
+       }
+     String namespace = getNamespaceURI();
+     if (namespace != null && namespace.equals(namespaceURI))
+       {
+         return getPrefix();
+       }
+     if (attributes != null)
+       {
+         for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
+           {
+             if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI
+                 .equals(ctx.getNamespaceURI()))
+               {
+                 String value = ctx.getNodeValue();
+                 if (value.equals(namespaceURI))
+                   {
+                     return ctx.getLocalName();
+                   }
+               }
+           }
+       }
+     return super.lookupPrefix(namespaceURI);
+   }
+ 
+   public boolean isDefaultNamespace(String namespaceURI)
+   {
+     String namespace = getNamespaceURI();
+     if (namespace != null && namespace.equals(namespaceURI))
+       {
+         return getPrefix() == null;
+       }
+     if (attributes != null)
+       {
+         for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
+           {
+             if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI
+                 .equals(ctx.getNamespaceURI()))
+               {
+                 String qName = ctx.getNodeName();
+                 return (XMLConstants.XMLNS_ATTRIBUTE.equals(qName));
+               }
+           }
+       }
+     return super.isDefaultNamespace(namespaceURI);
+   }
+ 
+   public String lookupNamespaceURI(String prefix)
+   {
+     String namespace = getNamespaceURI();
+     if (namespace != null && equal(prefix, getPrefix()))
+       {
+         return namespace;
+       }
+     if (attributes != null)
+       {
+         for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
+           {
+             if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI
+                 .equals(ctx.getNamespaceURI()))
+               {
+                 if (prefix == null)
+                   {
+                     if (XMLConstants.XMLNS_ATTRIBUTE.equals(ctx.getNodeName()))
+                       {
+                         return ctx.getNodeValue();
+                       }
+                   }
+                 else
+                   {
+                     if (prefix.equals(ctx.getLocalName()))
+                       {
+                         return ctx.getNodeValue();
+                       }
+                   }
+               }
+           }
+       }
+     return super.lookupNamespaceURI(prefix);
+   }
+   
+   public String getBaseURI()
+   {
+     if (attributes != null)
+       {
+         Node xmlBase =
+           attributes.getNamedItemNS(XMLConstants.XML_NS_URI, "base");
+         if (xmlBase != null)
+           {
+             return xmlBase.getNodeValue();
+           }
+       }
+     return super.getBaseURI();
+   }
+   
+   public TypeInfo getSchemaTypeInfo()
+   {
+     // DTD implementation
+     DomDoctype doctype = (DomDoctype) owner.getDoctype();
+     if (doctype != null)
+       {
+         return doctype.getElementTypeInfo(getNodeName());
+       }
+     // TODO XML Schema implementation
+     return null;
+   }
+ 
+   public void setIdAttribute(String name, boolean isId)
+   {
+     NamedNodeMap attrs = getAttributes();
+     Attr attr = (Attr) attrs.getNamedItem(name);
+     setIdAttributeNode(attr, isId);
+   }
+   
+   public void setIdAttributeNode(Attr attr, boolean isId)
+   {
+     if (readonly)
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     if (attr == null || attr.getOwnerElement() != this)
+       {
+         throw new DomDOMException(DOMException.NOT_FOUND_ERR);
+       }
+     if (isId)
+       {
+         if (userIdAttrs == null)
+           {
+             userIdAttrs = new HashSet();
+           }
+         userIdAttrs.add(attr);
+       }
+     else if (userIdAttrs != null)
+       {
+         userIdAttrs.remove(attr);
+         if (userIdAttrs.isEmpty())
+           {
+             userIdAttrs = null;
+           }
+       }
+   }
+ 
+   public void setIdAttributeNS(String namespaceURI, String localName,
+                                boolean isId)
+   {
+     NamedNodeMap attrs = getAttributes();
+     Attr attr = (Attr) attrs.getNamedItemNS(namespaceURI, localName);
+     setIdAttributeNode(attr, isId);
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomEntity.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomEntity.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomEntity.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomEntity.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,147 ----
+ /* DomEntity.java -- 
+    Copyright (C) 1999,2000,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.Entity;
+ 
+ /**
+  * <p> "Entity" implementation.  This is a non-core DOM class, supporting the
+  * "XML" feature.  There are two types of entities, neither of which works
+  * particularly well in this API:</p><dl>
+  *
+  * <dt><em>Unparsed Entities</em></dt>
+  *	<dd>Since ENTITY/ENTITIES attributes, the only legal use of unparsed
+  *	entities in XML, can't be detected with DOM, there isn't much point in
+  *	trying to use unparsed entities in DOM applications.  (XML Linking is
+  *	working to provide a better version of this functionality.) </dd>
+  *
+  * <dt><em>Parsed Entities</em></dt>
+  *	<dd> While the DOM specification permits nodes for parsed entities
+  *	to have a readonly set of children, this is not required and there
+  *	is no portable way to provide such children.  <em>This implementation
+  *	currently does not permit children to be added to Entities.</em>
+  *	There are related issues with the use of EntityReference nodes.  </dd>
+  *
+  * </dl>
+  *
+  * <p> In short, <em>avoid using this DOM functionality</em>.
+  *
+  * @see DomDoctype
+  * @see DomEntityReference
+  * @see DomNotation
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomEntity
+   extends DomExtern
+   implements Entity
+ {
+   
+   private String notation;
+ 
+   /**
+    * Constructs an Entity node associated with the specified document,
+    * with the specified descriptive data.
+    *
+    * <p>This constructor should only be invoked by a DomDoctype as part
+    * of its declareEntity functionality, or through a subclass which is
+    * similarly used in a "Sub-DOM" style layer.
+    *
+    * @param owner The document with which this entity is associated
+    * @param name Name of this entity
+    * @param publicId If non-null, provides the entity's PUBLIC identifier
+    * @param systemId Provides the entity's SYSTEM identifier (URI)
+    * @param notation If non-null, provides the unparsed entity's notation.
+    */
+   protected DomEntity(DomDocument owner,
+                       String name,
+                       String publicId,
+                       String systemId,
+                       String notation)
+   {
+     super(ENTITY_NODE, owner, name, publicId, systemId);
+     this.notation = notation;
+ 
+     // NOTE:  if notation == null, this is a parsed entity
+     // which could reasonably be given child nodes ...
+     makeReadonly();
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the NOTATION identifier associated with this entity, if any.
+    */
+   final public String getNotationName()
+   {
+     return notation;
+   }
+ 
+   // DOM Level 3 methods
+   
+   public String getInputEncoding()
+   {
+     // TODO
+     return null;    
+   }
+   
+   public String getXmlEncoding()
+   {
+     // TODO
+     return null;
+   }
+ 
+   public String getXmlVersion()
+   {
+     // TODO
+     return null;
+   }
+ 
+   /**
+    * The base URI of an external entity is its system ID.
+    * The base URI of an internal entity is the parent document's base URI.
+    * @since DOM Level 3 Core
+    */
+   public String getBaseURI()
+   {
+     String systemId = getSystemId();
+     return (systemId == null) ? owner.getBaseURI() : systemId;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomEntityReference.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomEntityReference.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomEntityReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomEntityReference.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,130 ----
+ /* DomEntityReference.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.Entity;
+ import org.w3c.dom.EntityReference;
+ 
+ /**
+  * <p> "EntityReference" implementation (reference to parsed entity).
+  * This is a non-core DOM class, supporting the "XML" feature.
+  * It does not represent builtin entities (such as "&amp;amp;")
+  * or character references, which are always directly expanded in
+  * DOM trees.</p>
+  *
+  * <p> Note that while the DOM specification permits these nodes to have
+  * a readonly set of children, this is not required.  Similarly, it does
+  * not require a DOM to couple EntityReference nodes with any Entity nodes
+  * that have the same entity name (and equivalent children).  It also
+  * effectively guarantees that references created directly or indirectly
+  * through the <em>Document.ImportNode</em> method will not have children.
+  * The level of functionality you may get is extremely variable.
+  *
+  * <p> Also significant is that even at their most functional level, the fact
+  * that EntityReference children must be readonly has caused significant
+  * problems when modifying work products held in DOM trees.  Other problems
+  * include issues related to undeclared namespace prefixes (and references
+  * to the current default namespace) that may be found in the text of such
+  * parsed entities nodes.  These must be contextually bound as part of DOM
+  * tree construction.  When such nodes are moved, the namespace associated
+  * with a given prefix (or default) may change to be in conflict with the
+  * namespace bound to the node at creation time.
+  *
+  * <p> In short, <em>avoid using this DOM functionality</em>.
+  *
+  * @see DomDoctype
+  * @see DomEntity
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomEntityReference
+   extends DomNode
+   implements EntityReference
+ {
+ 
+   private String name;
+   
+   /**
+    * Constructs an EntityReference node associated with the specified
+    * document.  The creator should populate this with whatever contents
+    * are appropriate, and then mark it as readonly.
+    *
+    * <p>This constructor should only be invoked by a Document as part of
+    * its createEntityReference functionality, or through a subclass which
+    * is similarly used in a "Sub-DOM" style layer.
+    *
+    * @see DomNode#makeReadonly
+    */
+   protected DomEntityReference(DomDocument owner, String name)
+   {
+     super(ENTITY_REFERENCE_NODE, owner);
+     this.name = name;
+   }
+   
+   /**
+    * Returns the name of the referenced entity.
+    * @since DOM Level 1 Core
+    */
+   public final String getNodeName()
+   {
+     return name;
+   }
+ 
+   /**
+    * The base URI of an entity reference is the base URI where the entity
+    * declaration occurs.
+    * @since DOM Level 3 Core
+    */
+   public final String getBaseURI()
+   {
+     DocumentType doctype = owner.getDoctype();
+     if (doctype == null)
+       {
+         return null;
+       }
+     Entity entity = (Entity) doctype.getEntities().getNamedItem(name);
+     if (entity == null)
+       {
+         return null;
+       }
+     return entity.getBaseURI();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomEvent.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomEvent.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,345 ----
+ /* DomEvent.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.*;
+ import org.w3c.dom.events.*;
+ import org.w3c.dom.views.AbstractView;		// used by UIEvent
+ 
+ /**
+  * "Event" implementation.  Events are
+  * created (through DocumentEvent interface methods on the document object),
+  * and are sent to any target node in the document.
+  *
+  * <p> Applications may define application specific event subclasses, but
+  * should otherwise use the <em>DocumentTraversal</em> interface to acquire
+  * event objects.
+  *
+  * @author David Brownell
+  */
+ public class DomEvent
+   implements Event
+ {
+   
+   String  type;  // init
+   EventTarget  target;
+   EventTarget  currentNode;
+   short  eventPhase;
+   boolean  bubbles; // init
+   boolean  cancelable; // init
+   long  timeStamp; // ?
+ 
+   /** Returns the event's type (name) as initialized */
+   public final String getType()
+   {
+     return type;
+   }
+ 
+   /**
+    * Returns event's target; delivery of an event is initiated
+    * by a <em>target.dispatchEvent(event)</em> invocation.
+    */
+   public final EventTarget getTarget()
+   {
+     return target;
+   }
+ 
+   /**
+    * Returns the target to which events are currently being
+    * delivered.  When capturing or bubbling, this will not
+    * be what <em>getTarget</em> returns.
+    */
+   public final EventTarget getCurrentTarget()
+   {
+     return currentNode;
+   }
+ 
+   /**
+    * Returns CAPTURING_PHASE, AT_TARGET, or BUBBLING;
+    * only meaningful within EventListener.handleEvent
+    */
+   public final short getEventPhase()
+   {
+     return eventPhase;
+   }
+ 
+   /**
+    * Returns true if the news of the event bubbles to tree tops
+    * (as specified during initialization).
+    */
+   public final boolean getBubbles()
+   {
+     return bubbles;
+   }
+ 
+   /**
+    * Returns true if the default handling may be canceled
+    * (as specified during initialization).
+    */
+   public final boolean getCancelable()
+   {
+     return cancelable;
+   }
+ 
+   /**
+    * Returns the event's timestamp.
+    */
+   public final long getTimeStamp()
+   {
+     return timeStamp;
+   }
+   
+   boolean stop;
+   boolean doDefault;
+   
+   /**
+    * Requests the event no longer be captured or bubbled; only
+    * listeners on the event target will see the event, if they
+    * haven't yet been notified.
+    *
+    * <p> <em> Avoid using this </em> except for application-specific
+    * events, for which you the protocol explicitly "blesses" the use
+    * of this with some event types.  Otherwise, you are likely to break
+    * algorithms which depend on event notification either directly or
+    * through bubbling or capturing.  </p>
+    *
+    * <p> Note that this method is not final, specifically to enable
+    * enforcing of policies about events always propagating. </p>
+    */
+   public void stopPropagation()
+   {
+     stop = true;
+   }
+ 
+   /**
+    * Requests that whoever dispatched the event not perform their
+    * default processing when event delivery completes.  Initializes
+    * event timestamp.
+    */
+   public final void preventDefault()
+   {
+     doDefault = false;
+   }
+ 
+   /** Initializes basic event state.  */
+   public void initEvent(String typeArg,
+                         boolean canBubbleArg,
+                         boolean cancelableArg)
+   {
+     eventPhase = 0;
+     type = typeArg;
+     bubbles = canBubbleArg;
+     cancelable = cancelableArg;
+     timeStamp = System.currentTimeMillis();
+   }
+   
+   /** Constructs, but does not initialize, an event. */
+   public DomEvent(String type)
+   {
+     this.type = type;
+   }
+ 
+   /**
+    * Returns a basic printable description of the event's type,
+    * state, and delivery conditions
+    */
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer("[Event ");
+     buf.append(type);
+     switch (eventPhase)
+       {
+       case CAPTURING_PHASE:
+         buf.append(", CAPTURING");
+         break;
+       case AT_TARGET:
+         buf.append(", AT TARGET");
+         break;
+       case BUBBLING_PHASE:
+         buf.append(", BUBBLING");
+         break;
+       default:
+         buf.append(", (inactive)");
+         break;
+       }
+     if (bubbles && eventPhase != BUBBLING_PHASE)
+       {
+         buf.append(", bubbles");
+       }
+     if (cancelable)
+       {
+         buf.append(", can cancel");
+       }
+     // were we to provide subclass info, this's where it'd live
+     buf.append("]");
+     return buf.toString();
+   }
+   
+   /**
+    * "MutationEvent" implementation.
+    */
+   public static final class DomMutationEvent
+     extends DomEvent
+     implements MutationEvent
+   {
+     
+     // package private
+     Node   relatedNode; // init
+     
+     private String  prevValue; // init
+     private String  newValue; // init
+     
+     private String  attrName; // init
+     private short  attrChange; // init
+     
+     /** Returns any "related" node provided by this type of event */
+     public final Node getRelatedNode()
+     {
+       return relatedNode;
+     }
+     
+     /** Returns any "previous value" provided by this type of event */
+     public final String getPrevValue()
+     {
+       return prevValue;
+     }
+     
+     /** Returns any "new value" provided by this type of event */
+     public final String getNewValue()
+     {
+       return newValue;
+     }
+     
+     /** For attribute change events, returns the attribute's name */
+     public final String getAttrName()
+     {
+       return attrName;
+     }
+     
+     /** For attribute change events, returns how the attribuet changed */
+     public final short getAttrChange()
+     {
+       return attrChange;
+     }
+     
+     /** Initializes a mutation event */
+     public final void initMutationEvent(String typeArg,
+                                         boolean canBubbleArg,
+                                         boolean cancelableArg,
+                                         Node relatedNodeArg,
+                                         String prevValueArg,
+                                         String newValueArg,
+                                         String attrNameArg,
+                                         short attrChangeArg)
+     {
+       // super.initEvent is inlined here for speed
+       // (mutation events are issued on all DOM changes)
+       eventPhase = 0;
+       type = typeArg;
+       bubbles = canBubbleArg;
+       cancelable = cancelableArg;
+       timeStamp = System.currentTimeMillis();
+       
+       relatedNode = relatedNodeArg;
+       prevValue = prevValueArg;
+       newValue = newValueArg;
+       attrName = attrNameArg;
+       attrChange = attrChangeArg;
+     }
+ 
+     // clear everything that should be GC-able
+     void clear()
+     {
+       type = null;
+       target = null;
+       relatedNode = null;
+       currentNode = null;
+       prevValue = newValue = attrName = null;
+     }
+ 
+     /** Constructs an uninitialized mutation event. */
+     public DomMutationEvent(String type)
+     {
+       super(type);
+     }
+   
+   }
+ 
+   /**
+    * "UIEvent" implementation.
+    */
+   public static class DomUIEvent
+     extends DomEvent
+     implements UIEvent
+   {
+     
+     private AbstractView view;  // init
+     private int  detail;  // init
+     
+     /** Constructs an uninitialized User Interface (UI) event */
+     public DomUIEvent (String type) { super (type); }
+     
+     public final AbstractView getView () { return view; }
+     public final int getDetail () { return detail; }
+     
+     /** Initializes a UI event */
+     public final void initUIEvent(String typeArg,
+                                   boolean canBubbleArg,
+                                   boolean cancelableArg,
+                                   AbstractView viewArg,
+                                   int detailArg)
+     {
+       super.initEvent(typeArg, canBubbleArg, cancelableArg);
+       view = viewArg;
+       detail = detailArg;
+     }
+   
+   }
+ 
+     /*
+ 
+     static final class DomMouseEvent extends DomUIEvent
+  implements MouseEvent
+     {
+  // another half dozen state variables/accessors
+     }
+ 
+     */
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomExtern.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomExtern.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomExtern.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomExtern.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,117 ----
+ /* DomExtern.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ /**
+  * <p> Abstract implemention of nodes describing external DTD-related
+  * objects.  This facilitates reusing code for Entity, Notation, and
+  * DocumentType (really, external subset) nodes.  Such support is not
+  * part of the core DOM; it's for the "XML" feature.  </p>
+  *
+  * <p> Note that you are strongly advised to avoid using the DOM
+  * features that take advantage of this class, since (as of L2) none
+  * of them is defined fully enough to permit full use of the
+  * XML feature they partially expose. </p>
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public abstract class DomExtern
+   extends DomNode
+ {
+  
+   private final String name;
+   private final String publicId;
+   private final String systemId;
+   
+   /**
+    * Constructs a node associated with the specified document,
+    * with the specified descriptive data.
+    *
+    * @param owner The document with which this object is associated
+    * @param name Name of this object
+    * @param publicId If non-null, provides the entity's PUBLIC identifier
+    * @param systemId If non-null, provides the entity's SYSTEM identifier
+    */
+   // package private
+   DomExtern(short nodeType,
+             DomDocument owner,
+             String name,
+             String publicId,
+             String systemId)
+   {
+     super(nodeType, owner);
+     this.name = name;
+     this.publicId = publicId;
+     this.systemId = systemId;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the SYSTEM identifier associated with this object, if any.
+    */
+   public final String getSystemId()
+   {
+     return systemId;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the PUBLIC identifier associated with this object, if any.
+    */
+   public final String getPublicId()
+   {
+     return publicId;
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Returns the object's name.
+    */
+   public final String getNodeName()
+   {
+     return name;
+   }
+ 
+   public final String getLocalName()
+   {
+     return name;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,278 ----
+ /* DomImpl.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.ls.DOMImplementationLS;
+ import org.w3c.dom.ls.LSInput;
+ import org.w3c.dom.ls.LSOutput;
+ import org.w3c.dom.ls.LSParser;
+ import org.w3c.dom.ls.LSSerializer;
+ import gnu.xml.dom.html2.DomHTMLImpl;
+ import gnu.xml.dom.ls.DomLSInput;
+ import gnu.xml.dom.ls.DomLSOutput;
+ import gnu.xml.dom.ls.DomLSParser;
+ import gnu.xml.dom.ls.DomLSSerializer;
+ 
+ /**
+  * <p> "DOMImplementation" implementation. </p>
+  *
+  * <p> At this writing, the following features are supported:
+  * "XML" (L1, L2, L3),
+  * "Events" (L2), "MutationEvents" (L2), "USER-Events" (a conformant extension),
+  * "HTMLEvents" (L2), "UIEvents" (L2), "Traversal" (L2), "XPath" (L3),
+  * "LS" (L3) "LS-Async" (L3).
+  * It is possible to compile the package so it doesn't support some of these
+  * features (notably, Traversal).
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomImpl
+   implements DOMImplementation, DOMImplementationLS
+ {
+   
+   /**
+    * Constructs a DOMImplementation object which supports
+    * "XML" and other DOM Level 2 features.
+    */
+   public DomImpl()
+   {
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns true if the specified feature and version are
+    * supported.  Note that the case of the feature name is ignored.
+    */
+   public boolean hasFeature(String name, String version)
+   {
+     if (name.length() == 0)
+       {
+         return false;
+       }
+     name = name.toLowerCase();
+     if (name.charAt(0) == '+')
+       {
+         name = name.substring(1);
+       }
+     
+     if ("xml".equals(name) || "core".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+                 "1.0".equals(version) ||
+                 "2.0".equals(version) ||
+                 "3.0".equals(version));
+       
+       }
+     else if ("ls".equals(name) || "ls-async".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+                 "3.0".equals(version));
+       }
+     else if ("events".equals(name)
+              || "mutationevents".equals(name)
+              || "uievents".equals(name)
+              // || "mouseevents".equals(name)
+              || "htmlevents".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+                 "2.0".equals(version));
+ 	
+         // Extension:  "USER-" prefix event types can
+         // be created and passed through the DOM.
+ 
+       }
+     else if ("user-events".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+                 "0.1".equals(version));
+ 
+ 	// NOTE:  "hasFeature" for events is here interpreted to
+ 	// mean the DOM can manufacture those sorts of events,
+ 	// since actually choosing to report the events is more
+ 	// often part of the environment or application.  It's
+ 	// only really an issue for mutation events.
+ 
+       }
+     else if (DomNode.reportMutations
+              && "traversal".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+ 		"2.0".equals(version));
+       }
+     else if ("xpath".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+                 "3.0".equals(version));
+       }
+     else if ("html".equals(name) || "xhtml".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+                 "2.0".equals(version));
+       }
+ 
+     // views
+     // stylesheets
+     // css, css2
+     // range
+     
+     return false;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Creates and returns a DocumentType, associated with this
+    * implementation.  This DocumentType can have no associated
+    * objects(notations, entities) until the DocumentType is
+    * first associated with a document.
+    *
+    * <p> Note that there is no implication that this DTD will
+    * be parsed by the DOM, or ever have contents.  Moreover, the
+    * DocumentType created here can only be added to a document by
+    * the createDocument method(below).  <em>That means that the only
+    * portable way to create a Document object is to start parsing,
+    * queue comment and processing instruction (PI) nodes, and then only
+    * create a DOM Document after <b>(a)</b> it's known if a DocumentType
+    * object is needed, and <b>(b) the name and namespace of the root
+    * element is known.  Queued comment and PI nodes would then be
+    * inserted appropriately in the document prologue, both before and
+    * after the DTD node, and additional attributes assigned to the
+    * root element.</em>
+    *(One hopes that the final DOM REC fixes this serious botch.)
+    */
+   public DocumentType createDocumentType(String rootName,
+                                          String publicId,
+                                          String systemId)
+     // CR2 deleted internal subset, ensuring DocumentType
+     // is 100% useless instead of just 90% so.
+   {
+     DomDocument.checkNCName(rootName, false);
+     return new DomDoctype(this, rootName, publicId, systemId, null);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Creates and returns a Document, populated only with a root element and
+    * optionally a document type(if that was provided).
+    */
+   public Document createDocument(String namespaceURI,
+                                  String rootName,
+                                  DocumentType doctype)
+   {
+     Document doc = createDocument();
+     Element root = null;
+     
+     if (rootName != null)
+       {
+         root = doc.createElementNS(namespaceURI, rootName);
+         if (rootName.startsWith("xmlns:"))
+           {
+             throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                       "xmlns is reserved", null, 0);
+           }
+       }
+     // Bleech -- L2 seemingly _requires_ omission of xmlns attributes.
+     if (doctype != null)
+       {
+         doc.appendChild(doctype);		// handles WRONG_DOCUMENT error
+       }
+     if (root != null)
+       {
+         doc.appendChild(root);
+       }
+     return doc;
+   }
+ 
+   protected Document createDocument()
+   {
+     return new DomDocument(this);
+   }
+ 
+   // DOM Level 3
+   
+   public Object getFeature(String feature, String version)
+   {
+     if (hasFeature(feature, version))
+       {
+         if ("html".equalsIgnoreCase(feature) ||
+             "xhtml".equalsIgnoreCase(feature))
+           {
+             return new DomHTMLImpl();
+           }
+         return this;
+       }
+     return null;
+   }
+ 
+   // -- DOMImplementationLS --
+ 
+   public LSParser createLSParser(short mode, String schemaType)
+     throws DOMException
+   {
+     return new DomLSParser(mode, schemaType);
+   }
+ 
+   public LSSerializer createLSSerializer()
+   {
+     return new DomLSSerializer();
+   }
+ 
+   public LSInput createLSInput()
+   {
+     return new DomLSInput();
+   }
+ 
+   public LSOutput createLSOutput()
+   {
+     return new DomLSOutput();
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomIterator.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomIterator.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,373 ----
+ /* DomIterator.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.events.Event;
+ import org.w3c.dom.events.EventListener;
+ import org.w3c.dom.events.EventTarget;
+ import org.w3c.dom.events.MutationEvent;
+ import org.w3c.dom.traversal.NodeFilter;
+ import org.w3c.dom.traversal.NodeIterator;
+ 
+ /**
+  * <p> "NodeIterator" implementation, usable with any L2 DOM which
+  * supports MutationEvents. </p>
+  *
+  * @author David Brownell 
+  */
+ public final class DomIterator
+   implements NodeIterator, EventListener
+ {
+   
+   private Node reference;
+   private boolean right;
+   private boolean done;
+   
+   private final Node root;
+   private final int whatToShow;
+   private final NodeFilter filter;
+   private final boolean expandEntityReferences;
+   
+   /**
+    * Constructs and initializes an iterator.
+    */
+   protected DomIterator(Node root,
+                         int whatToShow,
+                         NodeFilter filter,
+                         boolean entityReferenceExpansion)
+   {
+     if (!root.isSupported("MutationEvents", "2.0")) 
+       {
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR,
+                         "Iterator needs mutation events", root, 0);
+       }
+ 	
+     this.root = root;
+     this.whatToShow = whatToShow;
+     this.filter = filter;
+     this.expandEntityReferences = entityReferenceExpansion;
+     
+     // start condition:  going right, seen nothing yet.
+     reference = null;
+     right = true;
+     
+     EventTarget	target = (EventTarget) root;
+     target.addEventListener("DOMNodeRemoved", this, false);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Flags the iterator as done, unregistering its event listener so
+    * that the iterator can be garbage collected without relying on weak
+    * references (a "Java 2" feature) in the event subsystem.
+    */
+   public void detach()
+   {
+     EventTarget	target = (EventTarget) root;
+     target.removeEventListener("DOMNodeRemoved", this, false);
+     done = true;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns the flag controlling whether iteration descends
+    * through entity references.
+    */
+   public boolean getExpandEntityReferences()
+   {
+     return expandEntityReferences;
+   }
+     
+   /**
+    * <b>DOM L2</b>
+    * Returns the filter provided during construction.
+    */
+   public NodeFilter getFilter()
+   {
+     return filter;
+   }
+     
+   /**
+    * <b>DOM L2</b>
+    * Returns the root of the tree this is iterating through.
+    */
+   public Node getRoot()
+   {
+     return root;
+   }
+     
+   /**
+    * <b>DOM L2</b>
+    * Returns the mask of flags provided during construction.
+    */
+   public int getWhatToShow()
+   {
+     return whatToShow;
+   }
+     
+   /**
+    * <b>DOM L2</b>
+    * Returns the next node in a forward iteration, masked and filtered.
+    * Note that the node may be read-only due to entity expansions.
+    * A null return indicates the iteration is complete, but may still
+    * be processed backwards.
+    */
+   public Node nextNode()
+   {
+     if (done)
+       {
+         throw new DomDOMException(DOMException.INVALID_STATE_ERR);
+       }
+     right = true;
+     return walk(true);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns the next node in a backward iteration, masked and filtered.
+    * Note that the node may be read-only due to entity expansions.
+    * A null return indicates the iteration is complete, but may still
+    * be processed forwards.
+    */
+   public Node previousNode()
+   {
+     if (done)
+       {
+         throw new DomDOMException(DOMException.INVALID_STATE_ERR);
+       }
+     Node previous = reference;
+     right = false;
+     walk(false);
+     return previous;
+   }
+ 
+   private boolean shouldShow(Node node)
+     // raises Runtime exceptions indirectly, via acceptNode()
+   {
+     if ((whatToShow & (1 << (node.getNodeType() - 1))) == 0)
+       {
+         return false;
+       }
+     if (filter == null)
+       {
+         return true;
+       }
+     return filter.acceptNode(node) == NodeFilter.FILTER_ACCEPT;
+   }
+ 
+   //
+   // scenario:  root = 1, sequence = 1 2 ... 3 4
+   // forward walk: 1 2 ... 3 4 null
+   // then backward: 4 3 ... 2 1 null
+   //
+   // At the leftmost end, "previous" == null
+   // At the rightmost end, "previous" == 4
+   //
+   // The current draft spec really seem to make no sense re the
+   // role of the reference node, so what it says is ignored here.
+   //
+   private Node walk(boolean forward)
+   {
+     Node here = reference;
+ 
+     while ((here = successor(here, forward)) != null
+            && !shouldShow(here))
+       {
+         continue;
+       }
+     if (here != null || !forward)
+       {
+         reference = here;
+       }
+     return here;
+   }
+ 
+   private boolean isLeaf(Node here)
+   {
+     boolean leaf = !here.hasChildNodes();
+     if (!leaf && !expandEntityReferences)
+       {
+         leaf = (here.getNodeType() == Node.ENTITY_REFERENCE_NODE);
+       }
+     return leaf;
+   }
+     
+   //
+   // Returns the immediate successor in a forward (or backward)
+   // document order walk, sans filtering ... except that it knows
+   // how to stop, returning null when done.  This is a depth first
+   // preorder traversal when run in the forward direction.
+   //
+   private Node successor(Node here, boolean forward)
+   {
+     Node next;
+ 
+     // the "leftmost" end is funky
+     if (here == null)
+       {
+         return forward ? root : null;
+       }
+ 
+     //
+     // Forward, this is preorder: children before siblings.
+     // Backward, it's postorder: we saw the children already.
+     //
+     if (forward && !isLeaf(here))
+       {
+         return here.getFirstChild();
+       }
+ 
+     //
+     // Siblings ... if forward, we visit them, if backwards
+     // we visit their children first.
+     //
+     if (forward)
+       {
+         if ((next = here.getNextSibling()) != null)
+           {
+             return next;
+           }
+       }
+     else if ((next = here.getPreviousSibling()) != null)
+       {
+         if (isLeaf(next))
+           {
+             return next;
+           }
+         next = next.getLastChild();
+         while (!isLeaf(next))
+           {
+             next = next.getLastChild();
+           }
+         return next;
+       }
+ 	
+     //
+     // We can't go down or lateral -- it's up, then.  The logic is
+     // the converse of what's above:  backwards is easy (the parent
+     // is next), forwards isn't.
+     //
+     next = here.getParentNode();
+     if (!forward)
+       {
+         return next;
+       }
+     
+     Node temp = null;
+     while (next != null
+            && next != root
+            && (temp = next.getNextSibling()) == null)
+       {
+         next = next.getParentNode();
+       }
+     if (next == root)
+       {
+         return null;
+       }
+     return temp;
+   }
+ 
+   /**
+    * Not for public use.  This lets the iterator know when its
+    * reference node will be removed from the tree, so that a new
+    * one may be selected.
+    *
+    * <p> This version works by watching removal events as they
+    * bubble up.  So, don't prevent them from bubbling.
+    */
+   public void handleEvent(Event e)
+   {
+     MutationEvent event;
+     Node ancestor, removed;
+     
+     if (reference == null
+         || !"DOMNodeRemoved".equals(e.getType())
+         || e.getEventPhase() != Event.BUBBLING_PHASE)
+       {
+         return;
+       }
+ 
+     event = (MutationEvent) e;
+     removed = (Node) event.getTarget();
+ 
+     // See if the removal will cause trouble for this iterator
+     // by being the reference node or an ancestor of it.
+     for (ancestor = reference;
+          ancestor != null && ancestor != root;
+          ancestor = ancestor.getParentNode())
+       {
+         if (ancestor == removed)
+           {
+             break;
+           }
+       }
+     if (ancestor != removed)
+       {
+         return;
+       }
+ 
+     // OK, it'll cause trouble.  We want to make the "next"
+     // node in our current traversal direction seem right.
+     // So we pick the nearest node that's not getting removed,
+     // but go in the _opposite_ direction from our current
+     // traversal ... so the "next" doesn't skip anything.
+     Node candidate;
+ 
+ search:
+     while ((candidate = walk(!right)) != null)
+       {
+         for (ancestor = candidate;
+              ancestor != null && ancestor != root;
+              ancestor = ancestor.getParentNode())
+           {
+             if (ancestor == removed)
+               {
+                 continue search;
+               }
+           }
+         return;
+       }
+ 	
+     // The current DOM WD talks about a special case here;
+     // I've not yet seen it.
+     }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNSResolverContext.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNSResolverContext.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNSResolverContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNSResolverContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /* DomNSResolverContext.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.util.Iterator;
+ import javax.xml.namespace.NamespaceContext;
+ import org.w3c.dom.xpath.XPathNSResolver;
+ 
+ /**
+  * Namespace content wrapper for an XPathNSResolver.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DomNSResolverContext
+   implements NamespaceContext, Iterator
+ {
+ 
+ 	final XPathNSResolver resolver;
+ 
+ 	DomNSResolverContext(XPathNSResolver resolver)
+ 	{
+ 		this.resolver = resolver;
+ 	}
+ 
+ 	public String getNamespaceURI(String prefix)
+ 	{
+ 		return resolver.lookupNamespaceURI(prefix);
+ 	}
+ 
+ 	public String getPrefix(String namespaceURI)
+ 	{
+ 		return null;
+ 	}
+ 
+ 	public Iterator getPrefixes(String namespaceURI)
+ 	{
+ 		return this;
+ 	}
+ 
+ 	public boolean hasNext()
+ 	{
+ 		return false;
+ 	}
+ 
+ 	public Object next()
+ 	{
+ 		return null;
+ 	}
+ 
+ 	public void remove()
+ 	{
+ 		throw new UnsupportedOperationException();
+ 	}
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNamedNodeMap.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNamedNodeMap.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNamedNodeMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNamedNodeMap.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,421 ----
+ /* DomNamedNodeMap.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * <p> "NamedNodeMap" implementation. </p>
+  * Used mostly to hold element attributes, but sometimes also
+  * to list notations or entities.
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomNamedNodeMap
+   implements NamedNodeMap
+ {
+ 
+   final DomNode owner;
+   final short type;
+   
+   DomNode first;
+   int length;
+   boolean readonly;
+   
+   // package private
+   DomNamedNodeMap(DomNode owner, short type)
+   {
+     this.owner = owner;
+     this.type = type;
+   }
+ 
+   /**
+    * Exposes the internal "readonly" flag.  In DOM, all NamedNodeMap
+    * objects found in a DocumentType object are read-only (after
+    * they are fully constructed), and those holding attributes of
+    * a readonly element will also be readonly.
+    */
+   public final boolean isReadonly()
+   {
+     return readonly;
+   }  
+     
+   /**
+    * Sets the internal "readonly" flag so the node and its
+    * children can't be changed.
+    */
+   public void makeReadonly()
+   {
+     readonly = true;
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         ctx.makeReadonly();
+       }
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Returns the named item from the map, or null; names are just
+    * the nodeName property.
+    */
+   public Node getNamedItem(String name)
+   {
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         if (ctx.getNodeName().equals(name))
+           {
+             return ctx;
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns the named item from the map, or null; names are the
+    * localName and namespaceURI properties, ignoring any prefix.
+    */
+   public Node getNamedItemNS(String namespaceURI, String localName)
+   {
+     if ("".equals(namespaceURI))
+       {
+         namespaceURI = null;
+       }
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         String name = ctx.getLocalName();
+         if ((localName == null && name == null) ||
+             (localName != null && localName.equals(name)))
+           {
+             String uri = ctx.getNamespaceURI();
+             if ("".equals(uri))
+               {
+                 uri = null;
+               }
+             if ((namespaceURI == null && uri == null) ||
+                 (namespaceURI != null && namespaceURI.equals(uri)))
+               {
+                 return ctx;
+               }
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Stores the named item into the map, optionally overwriting
+    * any existing node with that name.  The name used is just
+    * the nodeName attribute.
+    */
+   public Node setNamedItem(Node arg)
+   {
+     return setNamedItem(arg, false);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Stores the named item into the map, optionally overwriting
+    * any existing node with that fully qualified name.  The name
+    * used incorporates the localName and namespaceURI properties,
+    * and ignores any prefix.
+    */
+   public Node setNamedItemNS(Node arg)
+   {
+     return setNamedItem(arg, true);
+   }
+ 
+   Node setNamedItem(Node arg, boolean ns)
+   {
+     if (readonly)
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+ 
+     DomNode node = (DomNode) arg;
+     if (node.owner != owner.owner)
+       {
+         throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR);
+       }
+     if (node.nodeType != type)
+       {
+         throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR);
+       }
+     if (node.nodeType == Node.ATTRIBUTE_NODE)
+       {
+         DomNode element = node.parent;
+         if (element != null && element != owner)
+           {
+             throw new DomDOMException(DOMException.INUSE_ATTRIBUTE_ERR);
+           }
+         node.parent = owner;
+         node.depth = owner.depth + 1;
+       }
+     
+     String nodeName = node.getNodeName();
+     String localName = ns ? node.getLocalName() : null;
+     String namespaceURI = ns ? node.getNamespaceURI() : null;
+     if ("".equals(namespaceURI))
+       {
+         namespaceURI = null;
+       }
+     
+     // maybe attribute ADDITION events (?)
+     DomNode last = null;
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         boolean test = false;
+         if (ns)
+           {
+             String tln = ctx.getLocalName();
+             if (tln == null)
+               {
+                 tln = ctx.getNodeName();
+               }
+             if (tln.equals(localName))
+               {
+                 String tu = ctx.getNamespaceURI();
+                 if ((tu == null && namespaceURI == null) ||
+                     (tu != null && tu.equals(namespaceURI)))
+                   {
+                     test = true;
+                   }
+               }
+           }
+         else
+           {
+             test = ctx.getNodeName().equals(nodeName);
+           }
+         if (test)
+           {
+             // replace
+             node.previous = ctx.previous;
+             node.next = ctx.next;
+             if (ctx.previous != null)
+               {
+                 ctx.previous.next = node;
+               }
+             if (ctx.next != null)
+               {
+                 ctx.next.previous = node;
+               }
+             if (first == ctx)
+               {
+                 first = node;
+               }
+             reparent(node, nodeName, ctx.index);
+             ctx.parent = null;
+             ctx.next = null;
+             ctx.previous = null;
+             ctx.setDepth(0);
+             ctx.index = 0;
+             return ctx;
+           }
+         last = ctx;
+       }
+     // append
+     if (last != null)
+       {
+         last.next = node;
+         node.previous = last;
+       }
+     else
+       {
+         first = node;
+       }
+     length++;
+     reparent(node, nodeName, 0);
+     return null;
+   }
+ 
+   void reparent(DomNode node, String nodeName, int i)
+   {
+     node.parent = owner;
+     node.setDepth(owner.depth + 1);
+     // index renumbering
+     for (DomNode ctx = node; ctx != null; ctx = ctx.next)
+       {
+         ctx.index = i++;
+       }
+     // cache xml:space
+     boolean xmlSpace = "xml:space".equals(nodeName);
+     if (xmlSpace && owner instanceof DomElement)
+       {
+         ((DomElement) owner).xmlSpace = node.getNodeValue();
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Removes the named item from the map, or reports an exception;
+    * names are just the nodeName property.
+    */
+   public Node removeNamedItem(String name)
+   {
+     return removeNamedItem(null, name, false);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Removes the named item from the map, or reports an exception;
+    * names are the localName and namespaceURI properties.
+    */
+   public Node removeNamedItemNS(String namespaceURI, String localName)
+   {
+     return removeNamedItem(namespaceURI, localName, true);
+   }
+ 
+   Node removeNamedItem(String uri, String name, boolean ns)
+   {
+     if (readonly)
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+ 
+     // report attribute REMOVAL event?
+ 
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         boolean test = false;
+         String nodeName = ctx.getNodeName();
+         if (ns)
+           {
+             String tln = ctx.getLocalName();
+             if (tln.equals(name))
+               {
+                 String tu = ctx.getNamespaceURI();
+                 if ((tu == null && uri == null) ||
+                     (tu != null && tu.equals(uri)))
+                   {
+                     test = true;
+                   }
+               }
+           }
+         else
+           {
+             test = nodeName.equals(name);
+           }
+         if (test)
+           {
+             // uncache xml:space
+             boolean xmlSpace = "xml:space".equals(nodeName);
+             if (xmlSpace && owner instanceof DomElement)
+               {
+                 ((DomElement) owner).xmlSpace = "";
+               }
+             // is this a default attribute?
+             if (ctx.nodeType == Node.ATTRIBUTE_NODE)
+               {
+                 String def = getDefaultValue(ctx.getNodeName());
+                 if (def != null)
+                   {
+                     ctx.setNodeValue(def);
+                     ((DomAttr) ctx).setSpecified(false);
+                     return null;
+                   }
+               }
+             // remove
+             if (ctx == first)
+               {
+                 first = ctx.next;
+               }
+             if (ctx.previous != null)
+               {
+                 ctx.previous.next = ctx.next;
+               }
+             if (ctx.next != null)
+               {
+                 ctx.next.previous = ctx.previous;
+               }
+             length--;
+             ctx.previous = null;
+             ctx.next = null;
+             ctx.parent = null;
+             ctx.setDepth(0);
+             ctx.index = 0;
+             return ctx;
+           }
+       }    
+     throw new DomDOMException(DOMException.NOT_FOUND_ERR);
+   }
+   
+   String getDefaultValue(String name)
+   {
+     DomDoctype doctype = (DomDoctype) owner.owner.getDoctype();
+     if (doctype == null)
+       {
+         return null;
+       }
+     DTDAttributeTypeInfo info =
+       doctype.getAttributeTypeInfo(owner.getNodeName(), name);
+     if (info == null)
+       {
+         return null;
+       }
+     return info.value;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the indexed item from the map, or null.
+    */
+   public Node item(int index)
+   {
+     DomNode ctx = first;
+     int count = 0;
+     while (ctx != null && count < index)
+       {
+         ctx = ctx.next;
+         count++;
+       }
+     return ctx;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the length of the map.
+    */
+   public int getLength()
+   {
+     return length;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNode.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNode.java	Thu Dec 15 18:37:35 2005
***************
*** 0 ****
--- 1,2190 ----
+ /* DomNode.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.Text;
+ import org.w3c.dom.UserDataHandler;
+ import org.w3c.dom.events.DocumentEvent;
+ import org.w3c.dom.events.Event;
+ import org.w3c.dom.events.EventException;
+ import org.w3c.dom.events.EventListener;
+ import org.w3c.dom.events.EventTarget;
+ import org.w3c.dom.events.MutationEvent;
+ import org.w3c.dom.traversal.NodeFilter;
+ import org.w3c.dom.traversal.NodeIterator;
+ 
+ /**
+  * <p> "Node", "EventTarget", and "DocumentEvent" implementation.
+  * This provides most of the core DOM functionality; only more
+  * specialized features are provided by subclasses.  Those subclasses may
+  * have some particular constraints they must implement, by overriding
+  * methods defined here.  Such constraints are noted here in the method
+  * documentation. </p>
+  *
+  * <p> Note that you can create events with type names prefixed with "USER-",
+  * and pass them through this DOM.  This lets you use the DOM event scheme
+  * for application specific purposes, although you must use a predefined event
+  * structure (such as MutationEvent) to pass data along with those events.
+  * Test for existence of this feature with the "USER-Events" DOM feature
+  * name.</p>
+  *
+  * <p> Other kinds of events you can send include the "html" events,
+  * like "load", "unload", "abort", "error", and "blur"; and the mutation
+  * events.  If this DOM has been compiled with mutation event support
+  * enabled, it will send mutation events when you change parts of the
+  * tree; otherwise you may create and send such events yourself, but
+  * they won't be generated by the DOM itself. </p>
+  *
+  * <p> Note that there is a namespace-aware name comparison method,
+  * <em>nameAndTypeEquals</em>, which compares the names (and types) of
+  * two nodes in conformance with the "Namespaces in XML" specification.
+  * While mostly intended for use with elements and attributes, this should
+  * also be helpful for ProcessingInstruction nodes and some others which
+  * do not have namespace URIs.
+  *
+  * @author David Brownell
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public abstract class DomNode
+   implements Node, NodeList, EventTarget, DocumentEvent, Cloneable, Comparable
+ {
+ 
+   // package private
+   //final static String xmlNamespace = "http://www.w3.org/XML/1998/namespace";
+   //final static String xmlnsURI = "http://www.w3.org/2000/xmlns/";
+ 
+   // tunable
+   //	NKIDS_* affects arrays of children (which grow)
+   // (currently) fixed size:
+   //	ANCESTORS_* is for event capture/bubbling, # ancestors
+   //	NOTIFICATIONS_* is for per-node event delivery, # events
+   private static final int NKIDS_DELTA = 8;
+   private static final int ANCESTORS_INIT = 20;
+   private static final int NOTIFICATIONS_INIT = 10;
+ 
+   // tunable: enable mutation events or not?  Enabling it costs about
+   // 10-15% in DOM construction time, last time it was measured.
+ 
+   // package private !!!
+   static final boolean reportMutations = true;
+ 
+   // locking protocol changeable only within this class
+   private static final Object lockNode = new Object();
+ 
+   // NON-FINAL class data
+ 
+   // Optimize event dispatch by not allocating memory each time
+   private static boolean dispatchDataLock;
+   private static DomNode[] ancestors = new DomNode[ANCESTORS_INIT];
+   private static ListenerRecord[] notificationSet
+     = new ListenerRecord[NOTIFICATIONS_INIT];
+ 
+   // Ditto for the (most common) event object itself!
+   private static boolean eventDataLock;
+   private static DomEvent.DomMutationEvent mutationEvent
+     = new DomEvent.DomMutationEvent(null);
+ 
+   //
+   // PER-INSTANCE DATA
+   //
+ 
+   DomDocument owner;
+   DomNode parent; // parent node;
+   DomNode previous; // previous sibling node
+   DomNode next; // next sibling node
+   DomNode first; // first child node
+   DomNode last; // last child node
+   int index; // index of this node in its parent's children
+   int depth; // depth of the node in the document
+   int length; // number of children
+   final short nodeType;
+ 
+   // Bleech ... "package private" so a builder can populate entity refs.
+   // writable during construction.  DOM spec is nasty.
+   boolean readonly;
+ 
+   // event registrations
+   private ListenerRecord[] listeners;
+   private int nListeners;
+ 
+   // DOM Level 3 userData dictionary.
+   private HashMap userData;
+   private HashMap userDataHandlers;
+ 
+   //
+   // Some of the methods here are declared 'final' because
+   // knowledge about their implementation is built into this
+   // class -- for both integrity and performance.
+   //
+ 
+   /**
+    * Reduces space utilization for this node.
+    */
+   public void compact()
+   {
+     if (listeners != null && listeners.length != nListeners)
+       {
+         if (nListeners == 0)
+           {
+             listeners = null;
+           }
+         else
+           {
+             ListenerRecord[] l = new ListenerRecord[nListeners];
+             System.arraycopy(listeners, 0, l, 0, nListeners);
+             listeners = l;
+           }
+       }
+   }
+ 
+   /**
+    * Constructs a node and associates it with its owner.  Only
+    * Document and DocumentType nodes may be created with no owner,
+    * and DocumentType nodes get an owner as soon as they are
+    * associated with a document.
+    */
+   protected DomNode(short nodeType, DomDocument owner)
+   {
+     this.nodeType = nodeType;
+ 
+     if (owner == null)
+       {
+         // DOM calls never go down this path
+         if (nodeType != DOCUMENT_NODE && nodeType != DOCUMENT_TYPE_NODE)
+           {
+             throw new IllegalArgumentException ("no owner!");
+           }
+       }
+     this.owner = owner;
+   }
+   
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns null; Element subclasses must override this method.
+    */
+   public NamedNodeMap getAttributes()
+   {
+     return null;
+   }
+ 
+   /**
+    * <b>DOM L2></b>
+    * Returns true iff this is an element node with attributes.
+    */
+   public boolean hasAttributes()
+   {
+     return false;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns a list, possibly empty, of the children of this node.
+    * In this implementation, to conserve memory, nodes are the same
+    * as their list of children.  This can have ramifications for
+    * subclasses, which may need to provide their own getLength method
+    * for reasons unrelated to the NodeList method of the same name.
+    */
+   public NodeList getChildNodes()
+   {
+     return this;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the first child of this node, or null if there are none.
+    */
+   public Node getFirstChild()
+   {
+     return first;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the last child of this node, or null if there are none.
+    */
+   public Node getLastChild()
+   {
+     return last;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns true if this node has children.
+    */
+   public boolean hasChildNodes()
+   {
+     return length != 0;
+   }
+ 
+ 
+   /**
+    * Exposes the internal "readonly" flag.  In DOM, children of
+    * entities and entity references are readonly, as are the
+    * objects associated with DocumentType objets.
+    */
+   public final boolean isReadonly()
+   {
+     return readonly;
+   }
+ 
+   /**
+    * Sets the internal "readonly" flag so this subtree can't be changed.
+    * Subclasses need to override this method for any associated content
+    * that's not a child node, such as an element's attributes or the
+    * (few) declarations associated with a DocumentType.
+    */
+   public void makeReadonly()
+   {
+     readonly = true;
+     for (DomNode child = first; child != null; child = child.next)
+       {
+         child.makeReadonly();
+       }
+   }
+ 
+   /**
+    * Used to adopt a node to a new document.
+    */
+   void setOwner(DomDocument doc)
+   {
+     this.owner = doc;
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         ctx.setOwner(doc);
+       }
+   }
+ 
+   // just checks the node for inclusion -- may be called many
+   // times (docfrag) before anything is allowed to change
+   private void checkMisc(DomNode child)
+   {
+     if (readonly && !owner.building)
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
+                                   null, this, 0);
+       }
+     for (DomNode ctx = this; ctx != null; ctx = ctx.parent)
+       {
+         if (child == ctx)
+           {
+             throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
+                                       "can't make ancestor into a child",
+                                       this, 0);
+           }
+       }
+ 
+     DomDocument owner = (nodeType == DOCUMENT_NODE) ? (DomDocument) this :
+       this.owner;
+     DomDocument childOwner = child.owner;
+     short childNodeType = child.nodeType;
+     
+     if (childOwner != owner)
+       {
+         // new in DOM L2, this case -- patch it up later, in reparent()
+         if (!(childNodeType == DOCUMENT_TYPE_NODE && childOwner == null))
+           {
+             throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
+                                       null, child, 0);
+           }
+       }
+ 
+     // enforce various structural constraints
+     switch (nodeType)
+       {
+       case DOCUMENT_NODE:
+         switch (childNodeType)
+           {
+           case ELEMENT_NODE:
+           case PROCESSING_INSTRUCTION_NODE:
+           case COMMENT_NODE:
+           case DOCUMENT_TYPE_NODE:
+             return;
+           }
+         break;
+         
+       case ATTRIBUTE_NODE:
+         switch (childNodeType)
+           {
+           case TEXT_NODE:
+           case ENTITY_REFERENCE_NODE:
+             return;
+           }
+         break;
+         
+       case DOCUMENT_FRAGMENT_NODE:
+       case ENTITY_REFERENCE_NODE:
+       case ELEMENT_NODE:
+       case ENTITY_NODE:
+         switch (childNodeType)
+           {
+           case ELEMENT_NODE:
+           case TEXT_NODE:
+           case COMMENT_NODE:
+           case PROCESSING_INSTRUCTION_NODE:
+           case CDATA_SECTION_NODE:
+           case ENTITY_REFERENCE_NODE:
+             return;
+           }
+         break;
+       }
+     if (owner.checkingWellformedness)
+       {
+         throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
+                                   "can't append " +
+                                   nodeTypeToString(childNodeType) +
+                                   " to node of type " +
+                                   nodeTypeToString(nodeType),
+                                   this, 0);
+       }
+   }
+   
+   // Here's hoping a good optimizer will detect the case when the
+   // next several methods are never called, and won't allocate
+   // object code space of any kind.  (Case:  not reporting any
+   // mutation events.  We can also remove some static variables
+   // listed above.)
+ 
+   private void insertionEvent(DomEvent.DomMutationEvent event,
+                               DomNode target)
+   {
+     if (owner == null || owner.building)
+       {
+         return;
+       }
+     boolean doFree = false;
+     
+     if (event == null)
+       {
+         event = getMutationEvent();
+       }
+     if (event != null)
+       {
+         doFree = true;
+       }
+     else
+       {
+         event = new DomEvent.DomMutationEvent(null);
+       }
+     event.initMutationEvent("DOMNodeInserted",
+                             true /* bubbles */, false /* nocancel */,
+                             this /* related */, null, null, null, (short) 0);
+     target.dispatchEvent(event);
+ 
+     // XXX should really visit every descendant of 'target'
+     // and sent a DOMNodeInsertedIntoDocument event to it...
+     // bleech, there's no way to keep that acceptably fast.
+ 
+     if (doFree)
+       {
+         event.target = null;
+         event.relatedNode = null;
+         event.currentNode = null;
+         eventDataLock = false;
+       } // else we created work for the GC
+   }
+ 
+   private void removalEvent(DomEvent.DomMutationEvent event,
+                             DomNode target)
+   {
+     if (owner == null || owner.building)
+       {
+         return;
+       }
+     boolean doFree = false;
+ 
+     if (event == null)
+       {
+         event = getMutationEvent();
+       }
+     if (event != null)
+       {
+         doFree = true;
+       }
+     else
+       {
+         event = new DomEvent.DomMutationEvent(null);
+       }
+     event.initMutationEvent("DOMNodeRemoved",
+                             true /* bubbles */, false /* nocancel */,
+                             this /* related */, null, null, null, (short) 0);
+     target.dispatchEvent(event);
+ 
+     // XXX should really visit every descendant of 'target'
+     // and sent a DOMNodeRemovedFromDocument event to it...
+     // bleech, there's no way to keep that acceptably fast.
+ 
+     event.target = null;
+     event.relatedNode = null;
+     event.currentNode = null;
+     if (doFree)
+       {
+         eventDataLock = false;
+       }
+     // else we created more work for the GC
+   }
+ 
+   //
+   // Avoid creating lots of memory management work, by using a simple
+   // allocation strategy for the mutation event objects that get used
+   // at least once per tree modification.  We can't use stack allocation,
+   // so we do the next simplest thing -- more or less, static allocation.
+   // Concurrent notifications should be rare, anyway.
+   //
+   // Returns the preallocated object, which needs to be carefully freed,
+   // or null to indicate the caller needs to allocate their own.
+   //
+   static private DomEvent.DomMutationEvent getMutationEvent()
+   {
+     synchronized (lockNode)
+       {
+         if (eventDataLock)
+           {
+             return null;
+           }
+         eventDataLock = true;
+         return mutationEvent;
+       }
+   }
+ 
+   // NOTE:  this is manually inlined in the insertion
+   // and removal event methods above; change in sync.
+   static private void freeMutationEvent()
+   {
+     // clear fields to enable GC
+     mutationEvent.clear();
+     eventDataLock = false;
+   }
+ 
+   void setDepth(int depth)
+   {
+     this.depth = depth;
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         ctx.setDepth(depth + 1);
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Appends the specified node to this node's list of children.
+    * Document subclasses must override this to enforce the restrictions
+    * that there be only one element and document type child.
+    *
+    * <p> Causes a DOMNodeInserted mutation event to be reported.
+    * Will first cause a DOMNodeRemoved event to be reported if the
+    * parameter already has a parent.  If the new child is a document
+    * fragment node, both events will be reported for each child of
+    * the fragment; the order in which children are removed and
+    * inserted is implementation-specific.
+    *
+    * <p> If this DOM has been compiled without mutation event support,
+    * these events will not be reported.
+    */
+   public Node appendChild(Node newChild)
+   {
+     try
+       {
+         DomNode	child = (DomNode) newChild;
+ 
+         if (child.nodeType == DOCUMENT_FRAGMENT_NODE)
+           {
+             // Append all nodes in the fragment to this node
+             for (DomNode ctx = child.first; ctx != null; ctx = ctx.next)
+               {
+                 checkMisc(ctx);
+               }
+             for (DomNode ctx = child.first; ctx != null; )
+               {
+                 DomNode ctxNext = ctx.next;
+                 appendChild(ctx);
+                 ctx = ctxNext;
+               }
+           }
+         else
+           {
+             checkMisc(child);
+             if (child.parent != null)
+               {
+                 child.parent.removeChild(child);
+               }
+             child.parent = this;
+             child.index = length++;
+             child.setDepth(depth + 1);
+             child.next = null;
+             if (last == null)
+               {
+                 first = child;
+                 child.previous = null;
+               }
+             else
+               {
+                 last.next = child;
+                 child.previous = last;
+               }
+             last = child;
+ 
+             if (reportMutations)
+               {
+                 insertionEvent(null, child);
+               }
+           }
+ 
+         return child;
+       }
+     catch (ClassCastException e)
+       {
+         throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
+                                   null, newChild, 0);
+     }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Inserts the specified node in this node's list of children.
+    * Document subclasses must override this to enforce the restrictions
+    * that there be only one element and document type child.
+    *
+    * <p> Causes a DOMNodeInserted mutation event to be reported.  Will
+    * first cause a DOMNodeRemoved event to be reported if the newChild
+    * parameter already has a parent. If the new child is a document
+    * fragment node, both events will be reported for each child of
+    * the fragment; the order in which children are removed and inserted
+    * is implementation-specific.
+    *
+    * <p> If this DOM has been compiled without mutation event support,
+    * these events will not be reported.
+    */
+   public Node insertBefore(Node newChild, Node refChild)
+   {
+     if (refChild == null)
+       {
+         return appendChild(newChild);
+       }
+ 
+     try
+       {
+         DomNode	child = (DomNode) newChild;
+         DomNode ref = (DomNode) refChild;
+         
+         if (child.nodeType == DOCUMENT_FRAGMENT_NODE)
+           {
+             // Append all nodes in the fragment to this node
+             for (DomNode ctx = child.first; ctx != null; ctx = ctx.next)
+               {
+                 checkMisc(ctx);
+               }
+             for (DomNode ctx = child.first; ctx != null; )
+               {
+                 DomNode ctxNext = ctx.next;
+                 insertBefore(ctx, ref);
+                 ctx = ctxNext;
+               }
+           }
+         else
+           {
+             checkMisc(child);
+             if (ref == null || ref.parent != this)
+               {
+                 throw new DomDOMException(DOMException.NOT_FOUND_ERR,
+                                           null, ref, 0);
+               }
+             if (ref == child)
+               {
+                 throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
+                                           "can't insert node before itself",
+                                           ref, 0);
+               }
+         
+             if (child.parent != null)
+               {
+                 child.parent.removeChild(child);
+               }
+             child.parent = this;
+             int i = ref.index;
+             child.setDepth(depth + 1);
+             child.next = ref;
+             if (ref.previous != null)
+               {
+                 ref.previous.next = child;
+               }
+             child.previous = ref.previous;
+             ref.previous = child;
+             if (first == ref)
+               {
+                 first = child;
+               }
+             // index renumbering
+             for (DomNode ctx = child; ctx != null; ctx = ctx.next)
+               {
+                 ctx.index = i++;
+               }
+ 
+             if (reportMutations)
+               {
+                 insertionEvent(null, child);
+               }
+           }
+         
+         return child;
+       }
+     catch (ClassCastException e)
+       {
+         throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
+                                   null, newChild, 0);
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Replaces the specified node in this node's list of children.
+    * Document subclasses must override this to test the restrictions
+    * that there be only one element and document type child.
+    *
+    * <p> Causes DOMNodeRemoved and DOMNodeInserted mutation event to be
+    * reported.  Will cause another DOMNodeRemoved event to be reported if
+    * the newChild parameter already has a parent.  These events may be
+    * delivered in any order, except that the event reporting removal
+    * from such an existing parent will always be delivered before the
+    * event reporting its re-insertion as a child of some other node.
+    * The order in which children are removed and inserted is implementation
+    * specific.
+    *
+    * <p> If your application needs to depend on the in which those removal
+    * and insertion events are delivered, don't use this API.  Instead,
+    * invoke the removeChild and insertBefore methods directly, to guarantee
+    * a specific delivery order.  Similarly, don't use document fragments,
+    * Otherwise your application code may not work on a DOM which implements
+    * this method differently.
+    *
+    * <p> If this DOM has been compiled without mutation event support,
+    * these events will not be reported.
+    */
+   public Node replaceChild(Node newChild, Node refChild)
+   {
+     try
+       {
+         DomNode child = (DomNode) newChild;
+         DomNode ref = (DomNode) refChild;
+         
+         DomEvent.DomMutationEvent event = getMutationEvent();
+         boolean doFree = (event != null);
+             
+         if (child.nodeType == DOCUMENT_FRAGMENT_NODE)
+           {
+             // Append all nodes in the fragment to this node
+             for (DomNode ctx = child.first; ctx != null; ctx = ctx.next)
+               {
+                 checkMisc(ctx);
+               }
+             if (ref == null || ref.parent != this)
+               {
+                 throw new DomDOMException(DOMException.NOT_FOUND_ERR,
+                                           null, ref, 0);
+               }
+             
+             if (reportMutations)
+               {
+                 removalEvent(event, ref);
+               }
+             length--;
+             length += child.length;
+             
+             if (child.length == 0)
+               {
+                 // Removal
+                 if (ref.previous != null)
+                   {
+                     ref.previous.next = ref.next;
+                   }
+                 if (ref.next != null)
+                   {
+                     ref.next.previous = ref.previous;
+                   }
+                 if (first == ref)
+                   {
+                     first = ref.next;
+                   }
+                 if (last == ref)
+                   {
+                     last = ref.previous;
+                   }
+               }
+             else
+               {
+                 int i = ref.index;
+                 for (DomNode ctx = child.first; ctx != null; ctx = ctx.next)
+                   {
+                     // Insertion
+                     ctx.parent = this;
+                     ctx.index = i++;
+                     ctx.setDepth(ref.depth);
+                     if (ctx == child.first)
+                       {
+                         ctx.previous = ref.previous;
+                       }
+                     if (ctx == child.last)
+                       {
+                         ctx.next = ref.next;
+                       }
+                   }
+                 if (first == ref)
+                   {
+                     first = child.first;
+                   }
+                 if (last == ref)
+                   {
+                     last = child.last;
+                   }
+               }
+           }
+         else
+           {
+             checkMisc(child);
+             if (ref == null || ref.parent != this)
+               {
+                 throw new DomDOMException(DOMException.NOT_FOUND_ERR,
+                                           null, ref, 0);
+               }
+         
+             if (reportMutations)
+               {
+                 removalEvent(event, ref);
+               }
+             
+             if (child.parent != null)
+               {
+                 child.parent.removeChild(child);
+               }
+             child.parent = this;
+             child.index = ref.index;
+             child.setDepth(ref.depth);
+             if (ref.previous != null)
+               {
+                 ref.previous.next = child;
+               }
+             child.previous = ref.previous;
+             if (ref.next != null)
+               {
+                 ref.next.previous = child;
+               }
+             child.next = ref.next;
+             if (first == ref)
+               {
+                 first = child;
+               }
+             if (last == ref)
+               {
+                 last = child;
+               }
+ 
+             if (reportMutations)
+               {
+                 insertionEvent(event, child);
+               }
+             if (doFree)
+               {
+                 freeMutationEvent();
+               }
+           }
+         ref.parent = null;
+         ref.index = 0;
+         ref.setDepth(0);
+         ref.previous = null;
+         ref.next = null;
+         
+         return ref;
+       }
+     catch (ClassCastException e)
+       {
+         throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
+                                   null, newChild, 0);
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Removes the specified child from this node's list of children,
+    * or else reports an exception.
+    *
+    * <p> Causes a DOMNodeRemoved mutation event to be reported.
+    *
+    * <p> If this DOM has been compiled without mutation event support,
+    * these events will not be reported.
+    */
+   public Node removeChild(Node refChild)
+   {
+     try
+       {
+         DomNode ref = (DomNode) refChild;
+ 
+         if (ref == null || ref.parent != this)
+           {
+             throw new DomDOMException(DOMException.NOT_FOUND_ERR,
+                                       null, ref, 0);
+           }
+         if (readonly && !owner.building)
+           {
+             throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
+                                       null, this, 0);
+           }
+         
+         for (DomNode child = first; child != null; child = child.next)
+           {
+             if (child == ref)
+               {
+                 if (reportMutations)
+                   {
+                     removalEvent(null, child);
+                   }
+ 
+                 length--;
+                 if (ref.previous != null)
+                   {
+                     ref.previous.next = ref.next;
+                   }
+                 if (ref.next != null)
+                   {
+                     ref.next.previous = ref.previous;
+                   }
+                 if (first == ref)
+                   {
+                     first = ref.next;
+                   }
+                 if (last == ref)
+                   {
+                     last = ref.previous;
+                   }
+                 // renumber indices
+                 int i = 0;
+                 for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+                   {
+                     ctx.index = i++;
+                   }
+                 ref.parent = null;
+                 ref.setDepth(0);
+                 ref.index = 0;
+                 ref.previous = null;
+                 ref.next = null;
+                 
+                 return ref;
+               }
+           }
+         throw new DomDOMException(DOMException.NOT_FOUND_ERR,
+                                   "that's no child of mine", refChild, 0);
+       }
+     catch (ClassCastException e)
+       {
+         throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
+                                   null, refChild, 0);
+       }
+   }
+ 
+   /**
+    * <b>DOM L1 (NodeList)</b>
+    * Returns the item with the specified index in this NodeList,
+    * else null.
+    */
+   public Node item(int index)
+   {
+     DomNode child = first;
+     int count = 0;
+     while (child != null && count < index)
+       {
+         child = child.next;
+         count++;
+       }
+     return child;
+   }
+ 
+   /**
+    * <b>DOM L1 (NodeList)</b>
+    * Returns the number of elements in this NodeList.
+    * (Note that many interfaces have a "Length" property, not just
+    * NodeList, and if a node subtype must implement one of those,
+    * it will also need to override getChildNodes.)
+    */
+   public int getLength()
+   {
+     return length;
+   }
+ 
+   /**
+    * Minimize extra space consumed by this node to hold children and event
+    * listeners.
+    */
+   public void trimToSize()
+   {
+     if (listeners != null && listeners.length != nListeners)
+       {
+         ListenerRecord[] newKids = new ListenerRecord[length];
+         System.arraycopy(listeners, 0, newKids, 0, nListeners);
+         listeners = newKids;
+       }
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the previous sibling, if one is known.
+    */
+   public Node getNextSibling()
+   {
+     return next;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the previous sibling, if one is known.
+    */
+   public Node getPreviousSibling()
+   {
+     return previous;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the parent node, if one is known.
+    */
+   public Node getParentNode()
+   {
+     return parent;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Consults the DOM implementation to determine if the requested
+    * feature is supported.  DocumentType subclasses must override
+    * this method, and associate themselves directly with the
+    * DOMImplementation node used.  (This method relies on being able
+    * to access the DOMImplementation from the owner document, but
+    * DocumentType nodes can be created without an owner.)
+    */
+   public boolean isSupported(String feature, String version)
+   {
+     Document		doc = owner;
+     DOMImplementation	impl = null;
+     
+     if (doc == null && nodeType == DOCUMENT_NODE)
+       {
+         doc = (Document) this;
+       }
+ 
+     if (doc == null)
+       {
+         // possible for DocumentType
+         throw new IllegalStateException ("unbound ownerDocument");
+       }
+ 
+     impl = doc.getImplementation();
+     return impl.hasFeature(feature, version);
+   }
+ 
+   /**
+    * <b>DOM L1 (modified in L2)</b>
+    * Returns the owner document.  This is only null for Document nodes,
+    * and (new in L2) for DocumentType nodes which have not yet been
+    * associated with the rest of their document.
+    */
+   final public Document getOwnerDocument()
+   {
+     return owner;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Does nothing; this must be overridden (along with the
+    * getNodeValue method) for nodes with a non-null defined value.
+    */
+   public void setNodeValue(String value)
+   {
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns null; this must be overridden for nodes types with
+    * a defined value, along with the setNodeValue method.
+    */
+   public String getNodeValue()
+   {
+     return null;
+   }
+ 
+   /** This forces GCJ compatibility.
+    * Without this method GCJ is unable to compile to byte code.
+    */
+   public final short getNodeType()
+   {
+     return nodeType;
+   }
+ 
+   /** This forces GCJ compatibility.
+    * Without this method GCJ seems unable to natively compile GNUJAXP.
+    */
+   public abstract String getNodeName();
+ 
+   /**
+    * <b>DOM L2</b>
+    * Does nothing; this must be overridden (along with the
+    * getPrefix method) for element and attribute nodes.
+    */
+   public void setPrefix(String prefix)
+   {
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns null; this must be overridden for element and
+    * attribute nodes.
+    */
+   public String getPrefix()
+   {
+     return null;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns null; this must be overridden for element and
+    * attribute nodes.
+    */
+   public String getNamespaceURI()
+   {
+     return null;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns the node name; this must be overridden for element and
+    * attribute nodes.
+    */
+   public String getLocalName()
+   {
+     return null;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns a clone of this node which optionally includes cloned
+    * versions of child nodes.  Clones are always mutable, except for
+    * entity reference nodes.
+    */
+   public Node cloneNode(boolean deep)
+   {
+     DomNode node = (DomNode) clone();
+     
+     if (deep)
+       {
+         DomDocument doc = (nodeType == DOCUMENT_NODE) ?
+           (DomDocument) node : node.owner;
+         for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+           {
+             DomNode newChild = (DomNode) ctx.cloneNode(deep);
+             newChild.setOwner(doc);
+             node.appendChild(newChild);
+           }
+       }
+     
+     if (nodeType == ENTITY_REFERENCE_NODE)
+       {
+         node.makeReadonly();
+       }
+     notifyUserDataHandlers(UserDataHandler.NODE_CLONED, this, node);
+     return node;
+   }
+ 
+   void notifyUserDataHandlers(short op, Node src, Node dst)
+   {
+     if (userDataHandlers != null)
+       {
+         for (Iterator i = userDataHandlers.entrySet().iterator(); i.hasNext(); )
+           {
+             Map.Entry entry = (Map.Entry) i.next();
+             String key = (String) entry.getKey();
+             UserDataHandler handler = (UserDataHandler) entry.getValue();
+             Object data = userData.get(key);
+             handler.handle(op, key, data, src, dst);
+           }
+       }
+   }
+ 
+   /**
+    * Clones this node; roughly equivalent to cloneNode(false).
+    * Element subclasses must provide a new implementation which
+    * invokes this method to handle the basics, and then arranges
+    * to clone any element attributes directly.  Attribute subclasses
+    * must make similar arrangements, ensuring that existing ties to
+    * elements are broken by cloning.
+    */
+   public Object clone()
+   {
+     try
+       {
+         DomNode node = (DomNode) super.clone();
+         
+         node.parent = null;
+         node.depth = 0;
+         node.index = 0;
+         node.length = 0;
+         node.first = null;
+         node.last = null;
+         node.previous = null;
+         node.next = null;
+         
+         node.readonly = false;
+         node.listeners = null;
+         node.nListeners = 0;
+         return node;
+ 
+       }
+     catch (CloneNotSupportedException x)
+       {
+         throw new Error("clone didn't work");
+       }
+   }
+ 
+   // the elements-by-tagname stuff is needed for both
+   // elements and documents ... this is in lieu of a
+   // common base class between Node and NodeNS.
+ 
+   /**
+    * <b>DOM L1</b>
+    * Creates a NodeList giving array-style access to elements with
+    * the specified name.  Access is fastest if indices change by
+    * small values, and the DOM is not modified.
+    */
+   public NodeList getElementsByTagName(String tag)
+   {
+     return new ShadowList(null, tag);
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Creates a NodeList giving array-style access to elements with
+    * the specified namespace and local name.  Access is fastest if
+    * indices change by small values, and the DOM is not modified.
+    */
+   public NodeList getElementsByTagNameNS(String namespace, String local)
+   {
+     return new ShadowList(namespace, local);
+   }
+ 
+ 
+   //
+   // This shadow class is GC-able even when the live list it shadows
+   // can't be, because of event registration hookups.  Its finalizer
+   // makes that live list become GC-able.
+   //
+   final class ShadowList
+     implements NodeList
+   {
+ 
+     private LiveNodeList liveList;
+     
+     ShadowList(String ns, String local)
+     {
+       liveList = new LiveNodeList(ns, local);
+     }
+ 
+     public void finalize()
+     {
+       liveList.detach();
+       liveList = null;
+     }
+ 
+     public Node item(int index)
+     {
+       return liveList.item(index);
+     }
+ 
+     public int getLength()
+     {
+       return liveList.getLength();
+     }
+   }
+ 
+   final class LiveNodeList
+     implements NodeList, EventListener, NodeFilter
+   {
+  
+     private final boolean matchAnyURI;
+     private final boolean matchAnyName; 
+     private final String elementURI;
+     private final String elementName;
+     
+     private DomIterator current;
+     private int lastIndex;
+     
+     LiveNodeList(String uri, String name)
+     {
+       elementURI = uri;
+       elementName = name;
+       matchAnyURI = "*".equals(uri);
+       matchAnyName = "*".equals(name);
+       
+       DomNode.this.addEventListener("DOMNodeInserted", this, true);
+       DomNode.this.addEventListener("DOMNodeRemoved", this, true);
+     }
+ 
+     void detach()
+     {
+       if (current != null)
+         current.detach();
+       current = null;
+       
+       DomNode.this.removeEventListener("DOMNodeInserted", this, true);
+       DomNode.this.removeEventListener("DOMNodeRemoved", this, true);
+     }
+ 
+     public short acceptNode(Node element)
+     {
+       if (element == DomNode.this)
+         {
+           return FILTER_SKIP;
+         }
+ 
+       // use namespace-aware matching ...
+       if (elementURI != null)
+         {
+           if (!(matchAnyURI
+                 || elementURI.equals(element.getNamespaceURI())))
+             {
+               return FILTER_SKIP;
+             }
+           if (!(matchAnyName
+                 || elementName.equals(element.getLocalName())))
+             {
+               return FILTER_SKIP;
+             }
+ 
+           // ... or qName-based kind.
+         }
+       else
+         {
+           if (!(matchAnyName
+                 || elementName.equals(element.getNodeName())))
+             {
+               return FILTER_SKIP;
+             }
+         }
+       return FILTER_ACCEPT;
+     }
+ 
+     private DomIterator createIterator()
+     {
+       return new DomIterator(DomNode.this,
+                              NodeFilter.SHOW_ELEMENT,
+                              this,	/* filter */
+                              true	/* expand entity refs */
+                             );
+     }
+ 
+     public void handleEvent(Event e)
+     {
+       MutationEvent	mutation = (MutationEvent) e;
+       Node		related = mutation.getRelatedNode();
+       
+       // XXX if it's got children ... check all kids too, they
+       // will invalidate our saved index
+       
+       if (related.getNodeType() != Node.ELEMENT_NODE ||
+           related.getNodeName() != elementName ||
+           related.getNamespaceURI() != elementURI)
+         {
+           return;
+         }
+       
+       current = null;
+     }
+ 
+     public Node item(int index)
+     {
+       if (current == null)
+         {
+           current = createIterator();
+           lastIndex = -1;
+         }
+       
+       // last node or before?  go backwards
+       if (index <= lastIndex) {
+         while (index != lastIndex) {
+           current.previousNode ();
+           lastIndex--;
+         }
+         Node ret = current.previousNode ();
+         current = null;
+         return ret;
+       } 
+       
+       // somewhere after last node
+       while (++lastIndex != index)
+         current.nextNode ();
+         Node ret = current.nextNode ();
+         current = null;
+         return ret;
+     }
+     
+     public int getLength()
+     {
+       int retval = 0;
+       NodeIterator iter = createIterator();
+       
+       while (iter.nextNode() != null)
+         {
+           retval++;
+         }
+       current = null;
+       return retval;
+     }
+     
+   }
+ 
+   //
+   // EventTarget support
+   //
+   static final class ListenerRecord
+   {
+   
+     String type;
+     EventListener listener;
+     boolean useCapture;
+ 
+     // XXX use JDK 1.2 java.lang.ref.WeakReference to listener,
+     // and we can both get rid of "shadow" classes and remove
+     // the need for applications to apply similar trix ... but
+     // JDK 1.2 support isn't generally available yet
+ 
+     ListenerRecord(String type, EventListener listener, boolean useCapture)
+     {
+       this.type = type.intern();
+       this.listener = listener;
+       this.useCapture = useCapture;
+     }
+ 
+     boolean equals(ListenerRecord rec)
+     {
+       return listener == rec.listener
+         && useCapture == rec.useCapture
+         && type == rec.type;
+     }
+     
+   }
+ 
+   /**
+    * <b>DOM L2 (Events)</b>
+    * Returns an instance of the specified type of event object.
+    * Understands about DOM Mutation, HTML, and UI events.
+    *
+    * <p>If the name of the event type begins with "USER-", then an object
+    * implementing the "Event" class will be returned; this provides a
+    * limited facility for application-defined events to use the DOM event
+    * infrastructure.  Alternatively, use one of the standard DOM event
+    * classes and initialize it using use such a "USER-" event type name;
+    * or defin, instantiate, and initialize an application-specific subclass
+    * of DomEvent and pass that to dispatchEvent().
+    *
+    * @param eventType Identifies the particular DOM feature module
+    *	defining the type of event, such as "MutationEvents".
+    *	<em>The event "name" is a different kind of "type".</em>
+    */
+   public Event createEvent(String eventType)
+   {
+     eventType = eventType.toLowerCase();
+     
+     if ("mutationevents".equals(eventType))
+       {
+         return new DomEvent.DomMutationEvent(null);
+       }
+     
+     if ("htmlevents".equals(eventType)
+         || "events".equals(eventType)
+         || "user-events".equals(eventType))
+       {
+         return new DomEvent(null);
+       }
+     
+     if ("uievents".equals(eventType))
+       {
+         return new DomEvent.DomUIEvent(null);
+       }
+ 
+     // mouse events 
+     
+     throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR,
+                               eventType, null, 0);
+   }
+ 
+   /**
+    * <b>DOM L2 (Events)</b>
+    * Registers an event listener's interest in a class of events.
+    */
+   public final void addEventListener(String type,
+                                      EventListener listener,
+                                      boolean useCapture)
+   {
+     if (listeners == null)
+       {
+         listeners = new ListenerRecord[1];
+       }
+     else if (nListeners == listeners.length)
+       {
+         ListenerRecord[] newListeners =
+           new ListenerRecord[listeners.length + NKIDS_DELTA];
+         System.arraycopy(listeners, 0, newListeners, 0, nListeners);
+         listeners = newListeners;
+       }
+ 
+     // prune duplicates
+     ListenerRecord record;
+ 
+     record = new ListenerRecord(type, listener, useCapture);
+     for (int i = 0; i < nListeners; i++)
+       {
+         if (record.equals(listeners[i]))
+           {
+             return;
+           }
+       }
+     listeners [nListeners++] = record;
+   }
+ 
+   // XXX this exception should be discarded from DOM
+ 
+   // this class can be instantiated, unlike the one in the spec
+   static final class DomEventException
+     extends EventException
+   {
+    
+     DomEventException()
+     {
+       super(UNSPECIFIED_EVENT_TYPE_ERR, "unspecified event type");
+     }
+     
+   }
+ 
+   /**
+    * <b>DOM L2 (Events)</b>
+    * Delivers an event to all relevant listeners, returning true if the
+    * caller should perform their default action.  Note that the event
+    * must have been provided by the createEvent() method on this
+    * class, else it can't be dispatched.
+    *
+    * @see #createEvent
+    *
+    * @exception NullPointerException When a null event is passed.
+    * @exception ClassCastException When the event wasn't provided by
+    *	the createEvent method, or otherwise isn't a DomEvent.
+    * @exception EventException If the event type wasn't specified
+    */
+   public final boolean dispatchEvent(Event event)
+     throws EventException
+   {
+     DomEvent e = (DomEvent) event;
+     DomNode[] ancestors = null;
+     int ancestorMax = 0;
+     boolean haveDispatchDataLock = false;
+     
+     if (e.type == null)
+       {
+         throw new DomEventException();
+       }
+ 
+     e.doDefault = true;
+     e.target = this;
+     
+     //
+     // Typical case:  one nonrecursive dispatchEvent call at a time
+     // for this class.  If that's our case, we can avoid allocating
+     // garbage, which is overall a big win.  Even with advanced GCs
+     // that deal well with short-lived garbage, and wayfast allocators,
+     // it still helps.
+     //
+     // Remember -- EVERY mutation goes though here at least once.
+     //
+     // When populating a DOM tree, trying to send mutation events is
+     // the primary cost; this dominates the critical path.
+     //
+     try
+       {
+         DomNode current;
+         int index;
+         boolean haveAncestorRegistrations = false;
+         ListenerRecord[] notificationSet;
+         int ancestorLen;
+         
+         synchronized (lockNode)
+           {
+             if (!dispatchDataLock)
+               {
+                 haveDispatchDataLock = dispatchDataLock = true;
+                 notificationSet = DomNode.notificationSet;
+                 ancestors = DomNode.ancestors;
+               }
+             else
+               {
+                 notificationSet = new ListenerRecord[NOTIFICATIONS_INIT];
+                 ancestors = new DomNode[ANCESTORS_INIT];
+               }
+             ancestorLen = ancestors.length;
+           }
+         
+         // XXX autogrow ancestors ... based on statistics
+         
+         // Climb to the top of this subtree and handle capture, letting
+         // each node (from the top down) capture until one stops it or
+         // until we get to this one.
+         
+         for (index = 0, current = parent;
+              current != null && index < ancestorLen;
+              index++, current = current.parent)
+           {
+             if (current.nListeners != 0)
+               {
+                 haveAncestorRegistrations = true;
+               }
+             ancestors [index] = current;
+           }
+         if (current != null)
+           {
+             throw new RuntimeException("dispatchEvent capture stack size");
+           }
+         
+         ancestorMax = index;
+         e.stop = false;
+         
+         if (haveAncestorRegistrations)
+           {
+             e.eventPhase = Event.CAPTURING_PHASE;
+             while (!e.stop && index-- > 0)
+               {
+                 current = ancestors [index];
+                 if (current.nListeners != 0)
+                   {
+                     notifyNode(e, current, true, notificationSet);
+                   }
+               }
+           }
+         
+         // Always deliver events to the target node (this)
+         // unless stopPropagation was called.  If we saw
+         // no registrations yet (typical!), we never will.
+         if (!e.stop && nListeners != 0)
+           {
+             e.eventPhase = Event.AT_TARGET;
+             notifyNode (e, this, false, notificationSet);
+           }
+         else if (!haveAncestorRegistrations)
+           {
+             e.stop = true;
+           }
+         
+         // If the event bubbles and propagation wasn't halted,
+         // walk back up the ancestor list.  Stop bubbling when
+         // any bubbled event handler stops it.
+         
+         if (!e.stop && e.bubbles)
+           {
+             e.eventPhase = Event.BUBBLING_PHASE;
+             for (index = 0;
+                  !e.stop
+                  && index < ancestorMax
+                  && (current = ancestors[index]) != null;
+                  index++)
+               {
+                 if (current.nListeners != 0)
+                   {
+                     notifyNode(e, current, false, notificationSet);
+                   }
+               }
+           }
+         e.eventPhase = 0;
+         
+         // Caller chooses whether to perform the default
+         // action based on return from this method.
+         return e.doDefault;
+         
+       }
+     finally
+       {
+         if (haveDispatchDataLock)
+           {
+             // synchronize to force write ordering
+             synchronized (lockNode)
+               {
+                 // null out refs to ensure they'll be GC'd
+                 for (int i = 0; i < ancestorMax; i++)
+                   {
+                     ancestors [i] = null;
+                   }
+                 // notificationSet handled by notifyNode
+                 
+                 dispatchDataLock = false;
+               }
+           }
+       }
+   }
+   
+   private void notifyNode(DomEvent e,
+                           DomNode current,
+                           boolean capture,
+                           ListenerRecord[] notificationSet)
+   {
+     int count = 0;
+ 
+     // do any of this set of listeners get notified?
+     for (int i = 0; i < current.nListeners; i++)
+       {
+         ListenerRecord rec = current.listeners[i];
+ 
+         if (rec.useCapture != capture)
+           {
+             continue;
+           }
+         if (!e.type.equals (rec.type)) 
+           {
+             continue;
+           }
+         if (count >= notificationSet.length)
+           {
+             // very simple growth algorithm
+             int len = Math.max(notificationSet.length, 1);
+             ListenerRecord[] tmp = new ListenerRecord[len * 2];
+             System.arraycopy(notificationSet, 0, tmp, 0,
+                              notificationSet.length);
+             notificationSet = tmp;
+           }
+         notificationSet[count++] = rec;
+       }
+ 
+     // Notify just those listeners
+     e.currentNode = current; 
+     for (int i = 0; i < count; i++)
+       {
+         try
+           {
+             // Late in the DOM CR process (3rd or 4th CR?) the
+             // removeEventListener spec became asymmetric with respect
+             // to addEventListener ... effect is now immediate.
+             for (int j = 0; j < current.nListeners; j++)
+               {
+                 if (current.listeners[j].equals(notificationSet[i]))
+                   {
+                     notificationSet[i].listener.handleEvent(e);
+                     break;
+                   }
+               }
+             
+           }
+         catch (Exception x)
+           {
+             // ignore all exceptions
+           }
+         notificationSet[i] = null;		// free for GC
+       }
+   }
+ 
+   /**
+    * <b>DOM L2 (Events)</b>
+    * Unregisters an event listener.
+    */
+   public final void removeEventListener(String type,
+                                         EventListener listener,
+                                         boolean useCapture)
+   {
+     for (int i = 0; i < nListeners; i++)
+       {
+         if (listeners[i].listener != listener)
+           {
+             continue;
+           }
+         if (listeners[i].useCapture != useCapture)
+           {
+             continue;
+           }
+         if (!listeners[i].type.equals(type))
+           {
+             continue;
+           }
+ 
+         if (nListeners == 1)
+           {
+             listeners = null;
+             nListeners = 0;
+           }
+         else
+           {
+             for (int j = i + 1; j < nListeners; j++)
+               {
+                 listeners[i++] = listeners[j++];
+               }
+             listeners[--nListeners] = null;
+           }
+         break;
+       }
+     // no exceptions reported
+   }
+ 
+   /**
+    * <b>DOM L1 (relocated in DOM L2)</b>
+    * In this node and all contained nodes (including attributes if
+    * relevant) merge adjacent text nodes.  This is done while ignoring
+    * text which happens to use CDATA delimiters).
+    */
+   public final void normalize()
+   {
+     // Suspend readonly status
+     boolean saved = readonly;
+     readonly = false;
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         switch (ctx.nodeType)
+           {
+           case TEXT_NODE:
+             while (ctx.next != null && ctx.next.nodeType == TEXT_NODE)
+               {
+                 Text text = (Text) ctx;
+                 text.appendData(ctx.next.getNodeValue());
+                 removeChild(ctx.next);
+               }
+             break;
+           case ELEMENT_NODE:
+             NamedNodeMap attrs = ctx.getAttributes();
+             int len = attrs.getLength();
+             for (int i = 0; i < len; i++)
+               {
+                 attrs.item(i).normalize();
+               }
+             // Fall through
+           case DOCUMENT_NODE:
+           case DOCUMENT_FRAGMENT_NODE:
+           case ATTRIBUTE_NODE:
+           case ENTITY_REFERENCE_NODE:
+             ctx.normalize();
+             break;
+           }
+       }
+     readonly = saved;
+   }
+ 
+   /**
+    * Returns true iff node types match, and either (a) both nodes have no
+    * namespace and their getNodeName() values are the same, or (b) both
+    * nodes have the same getNamespaceURI() and same getLocalName() values.
+    *
+    * <p>Note that notion of a "Per-Element-Type" attribute name scope, as
+    * found in a non-normative appendix of the XML Namespaces specification,
+    * is not supported here.  Your application must implement that notion,
+    * typically by not bothering to check nameAndTypeEquals for attributes
+    * without namespace URIs unless you already know their elements are
+    * nameAndTypeEquals.
+    */
+   public boolean nameAndTypeEquals(Node other)
+   {
+     if (other == this)
+       {
+         return true;
+       }
+     // node types must match
+     if (nodeType != other.getNodeType())
+       {
+         return false;
+       }
+ 
+     // if both have namespaces, do a "full" comparision
+     // this is a "global" partition
+     String ns1 = this.getNamespaceURI();
+     String ns2 = other.getNamespaceURI();
+ 
+     if (ns1 != null && ns2 != null)
+       {
+         return ns1.equals(ns2) &&
+           equal(getLocalName(), other.getLocalName());
+       }
+ 
+     // if neither has a namespace, this is a "no-namespace" name.
+     if (ns1 == null && ns2 == null)
+       {
+         if (!getNodeName().equals(other.getNodeName()))
+           {
+             return false;
+           }
+         // can test the non-normative "per-element-type" scope here.
+         // if this is an attribute node and both nodes have been bound
+         // to elements (!!), then return the nameAndTypeEquals()
+         // comparison of those elements.
+         return true;
+       }
+ 
+     // otherwise they're unequal: one scoped, one not.
+     return false;
+   }
+ 
+   // DOM Level 3 methods
+ 
+   public String getBaseURI()
+   {
+     return (parent != null) ? parent.getBaseURI() : null;
+   }
+ 
+   public short compareDocumentPosition(Node other)
+     throws DOMException
+   {
+     return (short) compareTo(other);
+   }
+ 
+   /**
+    * DOM nodes have a natural ordering: document order.
+    */
+   public final int compareTo(Object other)
+   {
+     if (other instanceof DomNode)
+       {
+         DomNode n1 = this;
+         DomNode n2 = (DomNode) other;
+         if (n1.owner != n2.owner)
+           {
+             return 0;
+           }
+         int d1 = n1.depth, d2 = n2.depth;
+         int delta = d1 - d2;
+         while (d1 > d2)
+           {
+             n1 = n1.parent;
+             d1--;
+           }
+         while (d2 > d1)
+           {
+             n2 = n2.parent;
+             d2--;
+           }
+         int c = compareTo2(n1, n2);
+         return (c != 0) ? c : delta;
+       }
+     return 0;
+   }
+ 
+   /**
+    * Compare two nodes at the same depth.
+    */
+   final int compareTo2(DomNode n1, DomNode n2)
+   {
+     if (n1 == n2 || n1.depth == 0 || n2.depth == 0)
+       {
+         return 0;
+       }
+     int c = compareTo2(n1.parent, n2.parent);
+     return (c != 0) ? c : n1.index - n2.index;
+   }
+ 
+   public final String getTextContent()
+     throws DOMException
+   {
+     return getTextContent(true);
+   }
+ 
+   final String getTextContent(boolean topLevel)
+     throws DOMException
+   {
+     switch (nodeType)
+       {
+       case ELEMENT_NODE:
+       case ENTITY_NODE:
+       case ENTITY_REFERENCE_NODE:
+       case DOCUMENT_FRAGMENT_NODE:
+         StringBuffer buffer = new StringBuffer();
+         for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+           {
+             String textContent = ctx.getTextContent(false);
+             if (textContent != null)
+               {
+                 buffer.append(textContent);
+               }
+           }
+         return buffer.toString();
+       case TEXT_NODE:
+       case CDATA_SECTION_NODE:
+         if (((Text) this).isElementContentWhitespace())
+           {
+             return "";
+           }
+         return getNodeValue();
+       case ATTRIBUTE_NODE:
+         return getNodeValue();
+       case COMMENT_NODE:
+       case PROCESSING_INSTRUCTION_NODE:
+         return topLevel ? getNodeValue() : "";
+       default:
+         return null;
+       }
+   }
+ 
+   public void setTextContent(String textContent)
+     throws DOMException
+   {
+     switch (nodeType)
+       {
+       case ELEMENT_NODE:
+       case ATTRIBUTE_NODE:
+       case ENTITY_NODE:
+       case ENTITY_REFERENCE_NODE:
+       case DOCUMENT_FRAGMENT_NODE:
+         for (DomNode ctx = first; ctx != null; )
+           {
+             DomNode n = ctx.next;
+             removeChild(ctx);
+             ctx = n;
+           }
+         if (textContent != null)
+           {
+             Text text = owner.createTextNode(textContent);
+             appendChild(text);
+           }
+         break;
+       case TEXT_NODE:
+       case CDATA_SECTION_NODE:
+       case COMMENT_NODE:
+       case PROCESSING_INSTRUCTION_NODE:
+         setNodeValue(textContent);
+         break;
+       }
+   }
+ 
+   public boolean isSameNode(Node other)
+   {
+     return this == other;
+   }
+ 
+   public String lookupPrefix(String namespaceURI)
+   {
+     return (parent == null || parent == owner) ? null :
+       parent.lookupPrefix(namespaceURI);
+   }
+ 
+   public boolean isDefaultNamespace(String namespaceURI)
+   {
+     return (parent == null || parent == owner) ? false :
+       parent.isDefaultNamespace(namespaceURI);
+   }
+ 
+   public String lookupNamespaceURI(String prefix)
+   {
+     return (parent == null || parent == owner) ? null :
+       parent.lookupNamespaceURI(prefix);
+   }
+ 
+   public boolean isEqualNode(Node arg)
+   {
+     if (this == arg)
+       {
+         return true;
+       }
+     if (arg == null)
+       {
+         return false;
+       }
+     if (nodeType != arg.getNodeType() ||
+         !equal(getNodeName(), arg.getNodeName()) ||
+         !equal(getLocalName(), arg.getLocalName()) ||
+         !equal(getNamespaceURI(), arg.getNamespaceURI()) ||
+         !equal(getPrefix(), arg.getPrefix()) ||
+         !equal(getNodeValue(), arg.getNodeValue()))
+       {
+         return false;
+       }
+     // Children
+     Node argCtx = arg.getFirstChild();
+     getFirstChild(); // because of DomAttr lazy children
+     for (DomNode ctx = first; ctx != null; ctx = ctx.next)
+       {
+         if (!ctx.isEqualNode(argCtx))
+           {
+             return false;
+           }
+         argCtx = argCtx.getNextSibling();
+       }
+     if (argCtx != null)
+       {
+         return false;
+       }
+     
+     // TODO Attr NamedNodeMap
+     // TODO DocumentType
+     return true;
+   }
+ 
+   boolean equal(String arg1, String arg2)
+   {
+     return ((arg1 == null && arg2 == null) ||
+             (arg1 != null && arg1.equals(arg2))); 
+   }
+   
+   public Object getFeature(String feature, String version)
+   {
+     DOMImplementation impl = (nodeType == DOCUMENT_NODE) ?
+       ((Document) this).getImplementation() : owner.getImplementation();
+     if (impl.hasFeature(feature, version))
+       {
+         return this;
+       }
+     return null;
+   }
+ 
+   public Object setUserData(String key, Object data, UserDataHandler handler)
+   {
+     if (userData == null)
+       {
+         userData = new HashMap();
+       }
+     if (handler != null)
+       {
+         if (userDataHandlers == null)
+           {
+             userDataHandlers = new HashMap();
+           }
+         userDataHandlers.put(key, handler);
+       }
+     return userData.put(key, data);
+   }
+ 
+   public Object getUserData(String key)
+   {
+     if (userData == null)
+       {
+         return null;
+       }
+     return userData.get(key);
+   }
+ 
+   public String toString()
+   {
+     String nodeName = getNodeName();
+     String nodeValue = getNodeValue();
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     if (nodeName != null)
+       {
+         buf.append(nodeName);
+       }
+     if (nodeValue != null)
+       {
+         if (nodeName != null)
+           {
+             buf.append('=');
+           }
+         buf.append('\'');
+         buf.append(encode(nodeValue));
+         buf.append('\'');
+       }
+     buf.append(']');
+     return buf.toString();
+   }
+   
+   String encode(String value)
+   {
+     StringBuffer buf = null;
+     int len = value.length();
+     for (int i = 0; i < len; i++)
+       {
+         char c = value.charAt(i);
+         if (c == '\n')
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(value.substring(0, i));
+               }
+             buf.append("\\n");
+           }
+         else if (c == '\r')
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(value.substring(0, i));
+               }
+             buf.append("\\r");
+           }
+         else if (buf != null)
+           {
+             buf.append(c);
+           }
+       }
+     return (buf != null) ? buf.toString() : value;
+   }
+ 
+   String nodeTypeToString(short nodeType)
+   {
+     switch (nodeType)
+       {
+       case ELEMENT_NODE:
+         return "ELEMENT_NODE";
+       case ATTRIBUTE_NODE:
+         return "ATTRIBUTE_NODE";
+       case TEXT_NODE:
+         return "TEXT_NODE";
+       case CDATA_SECTION_NODE:
+         return "CDATA_SECTION_NODE";
+       case DOCUMENT_NODE:
+         return "DOCUMENT_NODE";
+       case DOCUMENT_TYPE_NODE:
+         return "DOCUMENT_TYPE_NODE";
+       case COMMENT_NODE:
+         return "COMMENT_NODE";
+       case PROCESSING_INSTRUCTION_NODE:
+         return "PROCESSING_INSTRUCTION_NODE";
+       case DOCUMENT_FRAGMENT_NODE:
+         return "DOCUMENT_FRAGMENT_NODE";
+       case ENTITY_NODE:
+         return "ENTITY_NODE";
+       case ENTITY_REFERENCE_NODE:
+         return "ENTITY_REFERENCE_NODE";
+       case NOTATION_NODE:
+         return "NOTATION_NODE";
+       default:
+         return "UNKNOWN";
+       }
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNodeIterator.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNodeIterator.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNodeIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNodeIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,327 ----
+ /* DomNodeIterator.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.traversal.NodeFilter;
+ import org.w3c.dom.traversal.NodeIterator;
+ import org.w3c.dom.traversal.TreeWalker;
+ 
+ /**
+  * Node iterator and tree walker.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomNodeIterator
+   implements NodeIterator, TreeWalker
+ {
+ 
+   Node root;
+   final int whatToShow;
+   final NodeFilter filter;
+   final boolean entityReferenceExpansion;
+   final boolean walk;
+   Node current;
+ 
+   public DomNodeIterator(Node root, int whatToShow, NodeFilter filter,
+                          boolean entityReferenceExpansion, boolean walk)
+   {
+     if (root == null)
+       {
+         throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "null root");
+       }
+     this.root = root;
+     this.whatToShow = whatToShow;
+     this.filter = filter;
+     this.entityReferenceExpansion = entityReferenceExpansion;
+     this.walk = walk;
+     current = root;
+   }
+ 
+   public Node getRoot()
+   {
+     return root;
+   }
+ 
+   public int getWhatToShow()
+   {
+     return whatToShow;
+   }
+ 
+   public NodeFilter getFilter()
+   {
+     return filter;
+   }
+ 
+   public boolean getExpandEntityReferences()
+   {
+     return entityReferenceExpansion;
+   }
+ 
+   public Node nextNode()
+     throws DOMException
+   {
+     if (root == null)
+       {
+         throw new DOMException(DOMException.INVALID_STATE_ERR, "null root");
+       }
+     Node ret;
+     do
+       {
+         if (current.equals(root))
+           {
+             ret = root.getFirstChild();
+           }
+         else if (walk)
+           {
+             ret = current.getFirstChild();
+             if (ret == null)
+               {
+                 ret = current.getNextSibling();
+               }
+             if (ret == null)
+               {
+                 Node tmp = current;
+                 ret = tmp.getParentNode();
+                 while (!ret.equals(root) && tmp.equals(ret.getLastChild()))
+                   {
+                     tmp = ret;
+                     ret = tmp.getParentNode();
+                   }
+                 if (ret.equals(root))
+                   {
+                     ret = null;
+                   }
+                 else
+                   {
+                     ret = ret.getNextSibling();
+                   }
+               }
+           }
+         else
+           {
+             ret = current.getNextSibling();
+           }
+       }
+     while (!accept(ret));
+     current = (ret == null) ? current : ret;
+     return ret;
+   }
+ 
+   public Node previousNode()
+     throws DOMException
+   {
+     if (root == null)
+       {
+         throw new DOMException(DOMException.INVALID_STATE_ERR, "null root");
+       }
+     Node ret;
+     do
+       {
+         if (current.equals(root))
+           {
+             ret = current.getLastChild();
+           }
+         else if (walk)
+           {
+             ret = current.getLastChild();
+             if (ret == null)
+               {
+                 ret = current.getPreviousSibling();
+               }
+             if (ret == null)
+               {
+                 Node tmp = current;
+                 ret = tmp.getParentNode();
+                 while (!ret.equals(root) && tmp.equals(ret.getFirstChild()))
+                   {
+                     tmp = ret;
+                     ret = tmp.getParentNode();
+                   }
+                 if (ret.equals(root))
+                   {
+                     ret = null;
+                   }
+                 else
+                   {
+                     ret = ret.getPreviousSibling();
+                   }
+               }
+           }
+         else
+           {
+             ret = current.getPreviousSibling();
+           }
+       }
+     while (!accept(ret));
+     current = (ret == null) ? current : ret;
+     return ret;
+   }
+ 
+   public Node getCurrentNode()
+   {
+     return current;
+   }
+ 
+   public void setCurrentNode(Node current)
+     throws DOMException
+   {
+     if (current == null)
+       {
+         throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "null root");
+       }
+     this.current = current;
+   }
+ 
+   public Node parentNode()
+   {
+     Node ret = current.getParentNode();
+     if (!accept (ret))
+       {
+         ret = null;
+       }
+     current = (ret == null) ? current : ret;
+     return ret;
+   }
+ 
+   public Node firstChild ()
+   {
+     Node ret = current.getFirstChild();
+     while (!accept(ret))
+       {
+         ret = ret.getNextSibling();
+       }
+     current = (ret == null) ? current : ret;
+     return ret;
+   }
+ 
+   public Node lastChild()
+   {
+     Node ret = current.getLastChild();
+     while (!accept(ret))
+       {
+         ret = ret.getPreviousSibling();
+       }
+     current = (ret == null) ? current : ret;
+     return ret;
+   }
+ 
+   public Node previousSibling()
+   {
+     Node ret = current.getPreviousSibling();
+     while (!accept(ret))
+       {
+         ret = ret.getPreviousSibling();
+       }
+     current = (ret == null) ? current : ret;
+     return ret;
+   }
+ 
+   public Node nextSibling()
+   {
+     Node ret = current.getNextSibling();
+     while (!accept(ret))
+       {
+         ret = ret.getNextSibling();
+       }
+     current = (ret == null) ? current : ret;
+     return ret;
+   }
+ 
+   public void detach()
+   {
+     root = null;
+   }
+ 
+   boolean accept(Node node)
+   {
+     if (node == null)
+       {
+         return true;
+       }
+     boolean ret;
+     switch (node.getNodeType())
+       {
+       case Node.ATTRIBUTE_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_ATTRIBUTE) != 0;
+         break;
+       case Node.CDATA_SECTION_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_CDATA_SECTION) != 0;
+         break;
+       case Node.COMMENT_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_COMMENT) != 0;
+         break;
+       case Node.DOCUMENT_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_DOCUMENT) != 0;
+         break;
+       case Node.DOCUMENT_FRAGMENT_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_DOCUMENT_FRAGMENT) != 0;
+         break;
+       case Node.DOCUMENT_TYPE_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_DOCUMENT_TYPE) != 0;
+         break;
+       case Node.ELEMENT_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_ELEMENT) != 0;
+         break;
+       case Node.ENTITY_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_ENTITY) != 0;
+         break;
+       case Node.ENTITY_REFERENCE_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_ENTITY_REFERENCE) != 0;
+         ret = ret && entityReferenceExpansion;
+         break;
+       case Node.NOTATION_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_NOTATION) != 0;
+         break;
+       case Node.PROCESSING_INSTRUCTION_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_PROCESSING_INSTRUCTION) != 0;
+         break;
+       case Node.TEXT_NODE:
+         ret = (whatToShow & NodeFilter.SHOW_TEXT) != 0;
+         break;
+       default:
+         ret = true;
+       }
+     if (ret && filter != null)
+       {
+         ret = (filter.acceptNode(node) == NodeFilter.FILTER_ACCEPT);
+       }
+     return ret;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNotation.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNotation.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNotation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNotation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,103 ----
+ /* DomNotation.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.Notation;
+ 
+ /**
+  * <p> "Notation" implementation.  This is a non-core DOM class, supporting
+  * the "XML" feature. </p>
+  *
+  * <p> Although unparsed entities using this notation can be detected using
+  * DOM, neither NOTATIONS nor ENTITY/ENTITIES attributes can be so detected.
+  * More, there is no portable way to construct a Notation node, so there's
+  * no way that vendor-neutral DOM construction APIs could even report a
+  * NOTATION used to identify the intended meaning of a ProcessingInstruction.
+  * </p>
+  *
+  * <p> In short, <em>avoid using this DOM functionality</em>.
+  *
+  * @see DomDoctype
+  * @see DomEntity
+  * @see DomPI
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomNotation
+   extends DomExtern
+   implements Notation
+ {
+     
+   /**
+    * Constructs a Notation node associated with the specified document,
+    * with the specified descriptive data.  Note that at least one of
+    * the PUBLIC and SYSTEM identifiers must be provided; unlike other
+    * external objects in XML, notations may have only a PUBLIC identifier.
+    *
+    * <p>This constructor should only be invoked by a DomDoctype object
+    * as part of its declareNotation functionality, or through a subclass
+    * which is similarly used in a "Sub-DOM" style layer. 
+    *
+    * @param owner The document with which this notation is associated
+    * @param name Name of this notation
+    * @param publicId If non-null, provides the notation's PUBLIC identifier
+    * @param systemId If non-null, rovides the notation's SYSTEM identifier
+    */
+   protected DomNotation(DomDocument owner,
+                         String name,
+                         String publicId,
+                         String systemId)
+   {
+     super(NOTATION_NODE, owner, name, publicId, systemId);
+     makeReadonly();
+   }
+   
+   /**
+    * The base URI of an external entity is its system ID.
+    * The base URI of an internal entity is the parent document's base URI.
+    * @since DOM Level 3 Core
+    */
+   public String getBaseURI()
+   {
+     String systemId = getSystemId();
+     return (systemId == null) ? owner.getBaseURI() : systemId;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNsNode.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNsNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomNsNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomNsNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,200 ----
+ /* DomNsNode.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import javax.xml.XMLConstants;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * <p> Abstract implemention of namespace support.  This facilitates
+  * sharing code for attribute and element nodes.
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public abstract class DomNsNode
+   extends DomNode
+ {
+   
+   private String name;
+   private String namespace;
+   private String prefix;
+   String localName;
+   
+   /**
+    * Constructs a node associated with the specified document, and
+    * with the specified namespace information.
+    *
+    * @param owner The document with which this entity is associated
+    * @param namespaceURI Combined with the local part of the name,
+    *	this identifies a type of element or attribute; may be null.
+    *  If this is the empty string, it is reassigned as null so that
+    *  applications only need to test that case.
+    * @param name Name of this node, which may include a prefix
+    */
+   // package private
+   DomNsNode(short nodeType, DomDocument owner, String namespaceURI, String name)
+   {
+     super(nodeType, owner);
+     setNodeName(name);
+     setNamespaceURI(namespaceURI);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the node's name, including any namespace prefix.
+    */
+   public final String getNodeName()
+   {
+     return name;
+   }
+ 
+   final void setNodeName(String name)
+   {
+     this.name = name.intern();
+     int index = name.indexOf(':');
+     if (index == -1)
+       {
+         prefix = null;
+         localName = this.name;
+       }
+     else
+       {
+         prefix = name.substring(0, index).intern();
+         localName = name.substring(index + 1).intern();
+       }
+   }
+   
+   /**
+    * <b>DOM L2</b>
+    * Returns the node's namespace URI
+    * <em>or null</em> if the node name is not namespace scoped.
+    */
+   public final String getNamespaceURI()
+   {
+     return namespace;
+   }
+ 
+   final void setNamespaceURI(String namespaceURI)
+   {
+     if ("".equals(namespaceURI))
+       {
+         namespaceURI = null;
+       }
+     namespace = (namespaceURI == null) ? null : namespaceURI.intern();
+   }
+   
+   /**
+    * <b>DOM L2</b>
+    * Returns any prefix part of the node's name (before any colon).
+    */
+   public final String getPrefix()
+   {
+     return prefix;
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Assigns the prefix part of the node's name (before any colon).
+    */
+   public final void setPrefix(String prefix)
+   {
+     if (readonly)
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+ 
+     if (prefix == null)
+       {
+         name = localName;
+         return;
+       }
+     else if (namespace == null)
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                   "can't set prefix, node has no namespace URI",
+                                   this, 0);
+       }
+ 
+     DomDocument.checkName(prefix, "1.1".equals(owner.getXmlVersion()));
+     if (prefix.indexOf (':') != -1)
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                   "illegal prefix " + prefix, this, 0);
+       }
+ 
+     if (XMLConstants.XML_NS_PREFIX.equals(prefix)
+         && !XMLConstants.XML_NS_URI.equals(namespace))
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                   "xml namespace is always " +
+                                   XMLConstants.XML_NS_URI, this, 0);
+       }
+ 
+     if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix))
+       {
+         if (namespace != null || getNodeType() != ATTRIBUTE_NODE)
+           {
+             throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                       "xmlns attribute prefix is reserved",
+                                       this, 0);
+           }
+       }
+     else if (getNodeType () == ATTRIBUTE_NODE
+              && (XMLConstants.XMLNS_ATTRIBUTE.equals(name) ||
+                  name.startsWith("xmlns:")))
+       {
+         throw new DomDOMException(DOMException.NAMESPACE_ERR,
+                                   "namespace declarations can't change names",
+                                   this, 0);
+       }
+ 
+     this.prefix = prefix.intern();
+   }
+ 
+   /**
+    * <b>DOM L2</b>
+    * Returns the local part of the node's name (after any colon).
+    */
+   public final String getLocalName()
+   {
+     return localName;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomProcessingInstruction.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomProcessingInstruction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomProcessingInstruction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomProcessingInstruction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,147 ----
+ /* DomProcessingInstruction.java -- 
+    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.ProcessingInstruction;
+ 
+ /**
+  * <p> "ProcessingInstruction" (PI) implementation.
+  * This is a non-core DOM class, supporting the "XML" feature. </p>
+  *
+  * <p> Unlike other DOM APIs in the "XML" feature, this one fully
+  * exposes the functionality it describes.  So there is no reason
+  * inherent in DOM to avoid using this API, unless you want to rely
+  * on NOTATION declarations to associate meaning with your PIs;
+  * there is no vendor-neutal way to record those notations in DOM.</p>
+  *
+  * <p> Also of note is that PI support is part of SAX, so that XML
+  * systems using PIs can choose among multiple APIs. </p>
+  *
+  * @see DomNotation
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomProcessingInstruction
+   extends DomNode
+   implements ProcessingInstruction
+ {
+   
+   private String target;
+   private String data;
+   
+   /**
+    * Constructs a ProcessingInstruction node associated with the
+    * specified document, with the specified data.
+    *
+    * <p>This constructor should only be invoked by a Document object as
+    * part of its createProcessingInstruction functionality, or through
+    * a subclass which is similarly used in a "Sub-DOM" style layer. 
+    */
+   protected DomProcessingInstruction(DomDocument owner,
+                                      String target, String data)
+   {
+     super(PROCESSING_INSTRUCTION_NODE, owner);
+     this.target = target;
+     this.data = data;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the target of the processing instruction.
+    */
+   public final String getTarget()
+   {
+     return target;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the target of the processing instruction
+    * (same as getTarget).
+    */
+   public final String getNodeName()
+   {
+     return target;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the data associated with the processing instruction.
+    */
+   public final String getData()
+   {
+     return data;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the data associated with the processing instruction
+    * (same as getData).
+    */
+   public final String getNodeValue()
+   {
+     return data;
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Assigns the data associated with the processing instruction;
+    * same as setNodeValue.
+    */
+   public final void setData(String data)
+   {
+     setNodeValue(data);
+   }
+   
+   /**
+    * <b>DOM L1</b>
+    * Assigns the data associated with the processing instruction.
+    */
+   public final void setNodeValue(String data)
+   {
+     if (isReadonly())
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     this.data = data;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomText.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomText.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomText.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomText.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,220 ----
+ /* DomText.java -- 
+    Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Text;
+ 
+ /**
+  * <p> "Text" implementation.  </p>
+  *
+  * @author David Brownell 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomText
+   extends DomCharacterData
+   implements Text
+ {
+   
+   // NOTE:  deleted unused per-instance "isIgnorable"
+   // support to reclaim its space.
+   
+   /**
+    * Constructs a text node associated with the specified
+    * document and holding the specified data.
+    *
+    * <p>This constructor should only be invoked by a Document object
+    * as part of its createTextNode functionality, or through a subclass
+    * which is similarly used in a "Sub-DOM" style layer. 
+    */
+   protected DomText(DomDocument owner, String value)
+   {
+     super(TEXT_NODE, owner, value);
+   }
+ 
+   protected DomText(DomDocument owner, char[] buf, int off, int len)
+   {
+     super(TEXT_NODE, owner, buf, off, len);
+   }
+ 
+   // Used by DomCDATA
+   DomText(short nodeType, DomDocument owner, String value)
+   {
+     super(nodeType, owner, value);
+   }
+ 
+   DomText(short nodeType, DomDocument owner, char[] buf, int off, int len)
+   {
+     super(nodeType, owner, buf, off, len);
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Returns the string "#text".
+    */
+   // can't be 'final' with CDATA subclassing
+   public String getNodeName()
+   {
+     return "#text";
+   }
+ 
+   /**
+    * <b>DOM L1</b>
+    * Splits this text node in two parts at the offset, returning
+    * the new text node (the sibling with the second part).
+    */
+   public Text splitText(int offset)
+   {
+     if (isReadonly())
+       {
+         throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
+       }
+     try
+       {
+         String text = getNodeValue();
+         String before = text.substring(0, offset);
+         String after = text.substring(offset);
+         Text next;
+         
+         if (getNodeType() == TEXT_NODE)
+           {
+             next = owner.createTextNode(after);
+           }
+         else // CDATA_SECTION_NODE
+           {
+             next = owner.createCDATASection(after);
+           }
+         
+         if (this.next != null)
+           {
+             parent.insertBefore(next, this.next);
+           }
+         else
+           {
+             parent.appendChild(next);
+           }
+         setNodeValue(before);
+         return next;
+         
+       }
+     catch (IndexOutOfBoundsException x)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+   }
+     
+   // DOM Level 3
+   
+   public boolean isElementContentWhitespace()
+   {
+     if (parent != null)
+       {
+         DomDoctype doctype = (DomDoctype) owner.getDoctype();
+         if (doctype != null)
+           {
+             DTDElementTypeInfo info =
+               doctype.getElementTypeInfo(parent.getNodeName());
+             if (info != null)
+               {
+                 if (info.model == null && info.model.indexOf("#PCDATA") != -1)
+                   {
+                     return false;
+                   }
+                 return getNodeValue().trim().length() == 0;
+               }
+           }
+       }
+     return false;
+   }
+ 
+   public String getWholeText()
+   {
+     DomNode ref = this;
+     DomNode ctx;
+     for (ctx = previous; ctx != null &&
+          (ctx.nodeType == TEXT_NODE || ctx.nodeType == CDATA_SECTION_NODE);
+          ctx = ctx.previous)
+       {
+         ref = ctx;
+       }
+     StringBuffer buf = new StringBuffer(ref.getNodeValue());
+     for (ctx = ref.next; ctx != null &&
+          (ctx.nodeType == TEXT_NODE || ctx.nodeType == CDATA_SECTION_NODE);
+          ctx = ctx.next)
+       {
+         buf.append(ctx.getNodeValue());
+       }
+     return buf.toString ();
+   }
+ 
+   public Text replaceWholeText(String content)
+     throws DOMException
+   {
+     boolean isEmpty = (content == null || content.length () == 0);
+     if (!isEmpty)
+       {
+         setNodeValue(content);
+       }
+     
+     DomNode ref = this;
+     DomNode ctx;
+     for (ctx = previous; ctx != null &&
+          (ctx.nodeType == TEXT_NODE || ctx.nodeType == CDATA_SECTION_NODE);
+          ctx = ctx.previous)
+       {
+         ref = ctx;
+       }
+     ctx = ref.next;
+     if ((isEmpty || ref != this) && parent != null)
+       {
+         parent.removeChild(ref);
+       }
+     for (; ctx != null &&
+          (ctx.nodeType == TEXT_NODE || ctx.nodeType == CDATA_SECTION_NODE);
+          ctx = ref)
+       {
+         ref = ctx.next;
+         if ((isEmpty || ctx != this) && parent != null)
+           {
+             parent.removeChild(ctx);
+           }
+       }
+     return (isEmpty) ? null : this;
+   }
+     
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomXPathExpression.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomXPathExpression.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomXPathExpression.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomXPathExpression.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,147 ----
+ /* DomXPathExpression.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPath;
+ import javax.xml.xpath.XPathConstants;
+ import javax.xml.xpath.XPathExpression;
+ import javax.xml.xpath.XPathExpressionException;
+ import javax.xml.xpath.XPathFactory;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.xpath.XPathException;
+ import org.w3c.dom.xpath.XPathNSResolver;
+ import org.w3c.dom.xpath.XPathResult;
+ import gnu.xml.xpath.DocumentOrderComparator;
+ 
+ /**
+  * An XPath expression.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DomXPathExpression
+ implements org.w3c.dom.xpath.XPathExpression
+ {
+ 
+   final DomDocument doc;
+   final XPathExpression expression;
+   final XPathNSResolver resolver;
+ 
+   DomXPathExpression(DomDocument doc, String expression,
+                      XPathNSResolver resolver)
+     throws XPathException
+   {
+     this.doc = doc;
+     this.resolver = resolver;
+     
+ 		XPathFactory factory = XPathFactory.newInstance();
+ 		XPath xpath = factory.newXPath();
+ 		if (resolver != null)
+ 		  {
+ 				xpath.setNamespaceContext(new DomNSResolverContext(resolver));
+ 	 	  }
+     try
+       {
+         this.expression = xpath.compile(expression);
+       }
+     catch (XPathExpressionException e)
+       {
+         throw new XPathException(XPathException.INVALID_EXPRESSION_ERR,
+ 						                     e.getMessage ());
+       }
+   }
+ 
+   public Object evaluate(Node contextNode, short type, Object result)
+     throws XPathException, DOMException
+   {
+ 		try
+ 		  {
+ 				QName typeName = null;
+ 				switch (type)
+ 				  {
+ 						case XPathResult.BOOLEAN_TYPE:
+ 							typeName = XPathConstants.BOOLEAN;
+ 							break;
+ 						case XPathResult.NUMBER_TYPE:
+ 							typeName = XPathConstants.NUMBER;
+ 							break;
+ 						case XPathResult.STRING_TYPE:
+ 							typeName = XPathConstants.STRING;
+ 							break;
+ 						case XPathResult.ANY_UNORDERED_NODE_TYPE:
+ 						case XPathResult.FIRST_ORDERED_NODE_TYPE:
+ 							typeName = XPathConstants.NODE;
+ 							break;
+ 						case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
+ 						case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
+ 						case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
+ 						case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
+ 							typeName = XPathConstants.NODESET;
+ 							break;
+ 						default:
+ 							throw new XPathException(XPathException.TYPE_ERR, null);
+ 					}
+ 				Object val = expression.evaluate(contextNode, typeName);
+ 				switch (type)
+ 				  {
+ 						case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
+ 						case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
+ 							// Sort the nodes
+ 							List ns = new ArrayList((Collection) val);
+ 							Collections.sort(ns, new DocumentOrderComparator());
+ 							val = ns;
+ 					}
+ 				return new DomXPathResult(val, type);
+ 			}
+ 		catch (javax.xml.xpath.XPathException e)
+ 		  {
+ 				throw new XPathException(XPathException.TYPE_ERR, e.getMessage());
+ 			}
+   }
+ 
+   public String toString ()
+   {
+     return getClass ().getName () + "[expression=" + expression + "]";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomXPathNSResolver.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomXPathNSResolver.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomXPathNSResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomXPathNSResolver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* DomXPathNSResolver.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.xpath.XPathNSResolver;
+ 
+ /**
+  * Generic XPath namespace resolver using a DOM Node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DomXPathNSResolver
+ implements XPathNSResolver
+ {
+ 
+   Node node;
+ 
+   DomXPathNSResolver (Node node)
+   {
+     this.node = node;
+   }
+ 
+   public String lookupNamespaceURI (String prefix)
+   {
+     return node.lookupNamespaceURI (prefix);
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomXPathResult.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomXPathResult.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/DomXPathResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/DomXPathResult.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,233 ----
+ /* DomXPathResult.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.util.Collection;
+ import java.util.Iterator;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.xpath.XPathException;
+ import org.w3c.dom.xpath.XPathResult;
+ 
+ /**
+  * An XPath result object.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DomXPathResult
+ implements XPathResult
+ {
+ 
+   final Object value;
+   final short type;
+   Iterator iterator;
+ 
+   DomXPathResult (Object value, short requestedType)
+   {
+     this.value = value;
+     if (value instanceof Boolean)
+       {
+         type = XPathResult.BOOLEAN_TYPE;
+       }
+     else if (value instanceof Double)
+       {
+         type = XPathResult.NUMBER_TYPE;
+       }
+     else if (value instanceof String)
+       {
+         type = XPathResult.STRING_TYPE;
+       }
+     else if (value instanceof Collection)
+       {
+         Collection ns = (Collection) value;
+         switch (requestedType)
+           {
+           case XPathResult.ANY_TYPE:
+           case XPathResult.ANY_UNORDERED_NODE_TYPE:
+             type = (ns.size () == 1) ? XPathResult.FIRST_ORDERED_NODE_TYPE :
+               XPathResult.ORDERED_NODE_ITERATOR_TYPE;
+             break;
+           default:
+             type = requestedType;
+           }
+         iterator = ns.iterator ();
+       }
+     else
+       {
+         throw new IllegalArgumentException ();
+       }
+   }
+ 
+   public boolean getBooleanValue()
+   {
+     if (type == XPathResult.BOOLEAN_TYPE)
+       {
+         return ((Boolean) value).booleanValue ();
+       }
+     throw new XPathException (XPathException.TYPE_ERR, value.toString ());
+   }
+ 
+   public boolean getInvalidIteratorState()
+   {
+     return iterator == null;
+   }
+ 
+   public double getNumberValue()
+   {
+     if (type == XPathResult.NUMBER_TYPE)
+       {
+         return ((Double) value).doubleValue ();
+       }
+     throw new XPathException (XPathException.TYPE_ERR, value.toString ());
+   }
+ 
+   public short getResultType()
+   {
+     return type;
+   }
+ 
+   public Node getSingleNodeValue()
+   {
+     switch (type)
+       {
+       case XPathResult.FIRST_ORDERED_NODE_TYPE:
+       case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
+       case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
+       case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
+       case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
+         Collection ns = (Collection) value;
+         if (ns.isEmpty ())
+           {
+             return null;
+           }
+         else
+           {
+             return (Node) ns.iterator ().next ();
+           }
+       }
+     throw new XPathException (XPathException.TYPE_ERR, value.toString ());
+   }
+ 
+   public int getSnapshotLength()
+   {
+     switch (type)
+       {
+       case XPathResult.FIRST_ORDERED_NODE_TYPE:
+       case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
+       case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
+       case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
+       case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
+         return ((Collection) value).size ();
+       }
+     throw new XPathException (XPathException.TYPE_ERR, value.toString ());
+   }
+ 
+   public String getStringValue()
+   {
+     if (type == XPathResult.STRING_TYPE)
+       {
+         return (String) value;
+       }
+     throw new XPathException (XPathException.TYPE_ERR, value.toString ());
+   }
+ 
+   public Node iterateNext()
+   {
+     if (iterator != null)
+       {
+         if (iterator.hasNext ())
+           {
+             return (Node) iterator.next ();
+           }
+         else
+           {
+             iterator = null;
+             return null;
+           }
+       }
+     throw new XPathException (XPathException.TYPE_ERR, value.toString ());
+   }
+ 
+   public Node snapshotItem(int index)
+   {
+     switch (type)
+       {
+       case XPathResult.FIRST_ORDERED_NODE_TYPE:
+       case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
+       case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
+       case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
+       case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
+         Collection ns = (Collection) value;
+         Node[] nodes = new Node[ns.size ()];
+         ns.toArray (nodes);
+         return nodes[index];
+       }
+     throw new XPathException (XPathException.TYPE_ERR, value.toString ());
+   }
+ 
+   public String toString ()
+   {
+     return getClass ().getName () + "[type=" + typeName (type) + ",value=" +
+       value + ']';
+   }
+ 
+   private String typeName (short type)
+   {
+     switch (type)
+       {
+       case XPathResult.BOOLEAN_TYPE:
+         return "BOOLEAN_TYPE";
+       case XPathResult.NUMBER_TYPE:
+         return "NUMBER_TYPE";
+       case XPathResult.STRING_TYPE:
+         return "STRING_TYPE";
+       case XPathResult.FIRST_ORDERED_NODE_TYPE:
+         return "FIRST_ORDERED_NODE_TYPE";
+       case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
+         return "ORDERED_NODE_ITERATOR_TYPE";
+       case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
+         return "ORDERED_NODE_SNAPSHOT_TYPE";
+       case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
+         return "UNORDERED_NODE_ITERATOR_TYPE";
+       case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
+         return "UNORDERED_NODE_SNAPSHOT_TYPE";
+       default:
+         return "(unknown)";
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ImplementationList.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ImplementationList.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ImplementationList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ImplementationList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* ImplementationList.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc..
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.xml.dom;
+ 
+ import java.util.List;
+ 
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.DOMImplementationList;
+ 
+ /**
+  * Implementation list for GNU JAXP.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class ImplementationList
+   implements DOMImplementationList
+ {
+ 
+   private List list;
+ 
+   ImplementationList(List list)
+   {
+     this.list = list;
+   }
+ 
+   public int getLength()
+   {
+     return list.size();
+   }
+ 
+   public DOMImplementation item(int index)
+   {
+     return (DOMImplementation) list.get(index);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ImplementationSource.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ImplementationSource.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ImplementationSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ImplementationSource.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,167 ----
+ /* ImplementationSource.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc..
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ package gnu.xml.dom;
+ 
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Iterator;
+ import java.util.List;
+ 
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.DOMImplementationList;
+ import org.w3c.dom.DOMImplementationSource;
+ 
+ /**
+  * Implementation source for GNU JAXP.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class ImplementationSource
+   implements DOMImplementationSource
+ {
+ 
+   private static final String DIGITS = "1234567890";
+ 
+   /*
+    * GNU DOM implementations.
+    */
+   private static final DOMImplementation[] implementations;
+ 
+   static
+   {
+     List acc = new ArrayList();
+     acc.add(new gnu.xml.dom.DomImpl());
+     try
+       {
+         Class t = Class.forName("gnu.xml.libxmlj.dom.GnomeDocumentBuilder");
+         acc.add(t.newInstance());
+       }
+     catch (Exception e)
+       {
+         // libxmlj not available        
+       }
+     catch (UnsatisfiedLinkError e)
+       {
+         // libxmlj not available
+       }
+     implementations = new DOMImplementation[acc.size()];
+     acc.toArray(implementations);
+   }
+ 
+   public DOMImplementation getDOMImplementation(String features)
+   {
+     List available = getImplementations(features);
+     if (available.isEmpty())
+       {
+         return null;
+       }
+     return (DOMImplementation) available.get(0);
+   }
+ 
+   public DOMImplementationList getDOMImplementationList(String features)
+   {
+     List available = getImplementations(features);
+     return new ImplementationList(available);
+   }
+ 
+   /**
+    * Returns a list of the implementations that support the specified
+    * features.
+    */
+   private final List getImplementations(String features)
+   {
+     List available = new ArrayList(Arrays.asList(implementations));
+     for (Iterator i = parseFeatures(features).iterator(); i.hasNext(); )
+       {
+         String feature = (String) i.next();
+         String version = null;
+         int si = feature.indexOf(' ');
+         if (si != -1)
+           {
+             version = feature.substring(si + 1);
+             feature = feature.substring(0, si);
+           }
+         for (Iterator j = available.iterator(); j.hasNext(); )
+           {
+             DOMImplementation impl = (DOMImplementation) j.next();
+             if (!impl.hasFeature(feature, version))
+               {
+                 j.remove();
+               }
+           }
+       }
+     return available;
+   }
+ 
+   /**
+    * Parses the feature list into feature tokens.
+    */
+   final List parseFeatures(String features)
+   {
+     List list = new ArrayList();
+     int pos = 0, start = 0;
+     int len = features.length();
+     for (; pos < len; pos++)
+       {
+         char c = features.charAt(pos);
+         if (c == ' ')
+           {
+             if (pos + 1 < len &&
+                 DIGITS.indexOf(features.charAt(pos + 1)) == -1)
+               {
+                 list.add(getFeature(features, start, pos));
+                 start = pos + 1;
+               }
+           }
+       }
+     if (pos > start)
+       {
+         list.add(getFeature(features, start, len));
+       }
+     return list;
+   }
+ 
+   final String getFeature(String features, int start, int end)
+   {
+     if (features.length() > 0 && features.charAt(start) == '+')
+       {
+         return features.substring(start + 1, end);
+       }
+     return features.substring(start, end);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/JAXPFactory.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/JAXPFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/JAXPFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/JAXPFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,286 ----
+ /* JAXPFactory.java -- 
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom;
+ 
+ import java.io.IOException;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DOMImplementation;
+ 
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ 
+ import javax.xml.parsers.DocumentBuilder;
+ import javax.xml.parsers.DocumentBuilderFactory;
+ import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.parsers.SAXParserFactory;
+ 
+ 
+ /**
+  * DOM bootstrapping API, for use with JAXP.
+  *
+  * @see Consumer
+  *
+  * @author David Brownell
+  */
+ public final class JAXPFactory
+   extends DocumentBuilderFactory
+ {
+   
+   private static final String	PROPERTY = "http://xml.org/sax/properties/";
+   private static final String	FEATURE = "http://xml.org/sax/features/";
+   
+   private SAXParserFactory	pf;
+   
+   /**
+    * Default constructor.
+    */
+   public JAXPFactory()
+   {
+   }
+   
+   /**
+    * Constructs a JAXP document builder which uses the default
+    * JAXP SAX2 parser and the DOM implementation in this package.
+    */
+   public DocumentBuilder newDocumentBuilder()
+     throws ParserConfigurationException
+   {
+     if (pf == null)
+       {
+         // Force use of AElfred2 since not all JAXP parsers
+         // conform very well to the SAX2 API spec ...
+         pf = new gnu.xml.aelfred2.JAXPFactory();
+         // pf = SAXParserFactory.newInstance ();
+       }
+     
+     // JAXP default: false
+     pf.setValidating(isValidating());
+ 
+     // FIXME:  this namespace setup may cause errors in some
+     // conformant SAX2 parsers, which we CAN patch up by
+     // splicing a "NSFilter" stage up front ...
+     
+     // JAXP default: false
+     pf.setNamespaceAware(isNamespaceAware());
+ 
+     try
+       {
+         // undo rude "namespace-prefixes=false" default
+         pf.setFeature(FEATURE + "namespace-prefixes", true);
+ 
+         return new JAXPBuilder(pf.newSAXParser().getXMLReader(), this);
+       }
+     catch (SAXException e)
+       {
+         String msg = "can't create JAXP DocumentBuilder: " + e.getMessage();
+         throw new ParserConfigurationException(msg);
+       }
+   }
+   
+   /** There seems to be no useful specification for attribute names */
+   public void setAttribute(String name, Object value)
+     throws IllegalArgumentException
+   {
+     if ("http://java.sun.com/xml/jaxp/properties/schemaLanguage".equals(name))
+       {
+         // TODO
+       }
+     else
+       {
+         throw new IllegalArgumentException(name);
+       }
+   }
+ 
+   /** There seems to be no useful specification for attribute names */
+   public Object getAttribute(String name)
+     throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException(name);
+   }
+ 
+   static final class JAXPBuilder
+     extends DocumentBuilder
+     implements ErrorHandler
+   {
+ 
+     private Consumer	consumer;
+     private XMLReader	producer;
+     private DomImpl		impl;
+     
+     JAXPBuilder(XMLReader parser, JAXPFactory factory)
+       throws ParserConfigurationException
+     {
+       impl = new DomImpl();
+       
+       // set up consumer side
+       try
+         {
+           consumer = new Consumer();
+         }
+       catch (SAXException e)
+         {
+           throw new ParserConfigurationException(e.getMessage());
+         }
+ 
+       // JAXP defaults: true, noise nodes are good (bleech)
+       consumer.setHidingReferences(factory.isExpandEntityReferences());
+       consumer.setHidingComments(factory.isIgnoringComments());
+       consumer.setHidingWhitespace(factory.isIgnoringElementContentWhitespace());
+       consumer.setHidingCDATA(factory.isCoalescing());
+ 
+       // set up producer side
+       producer = parser;
+       producer.setContentHandler(consumer.getContentHandler());
+       producer.setDTDHandler(consumer.getDTDHandler());
+ 
+       try
+         {
+           String	id;
+           
+           // if validating, report validity errors, and default
+           // to treating them as fatal
+           if (factory.isValidating ())
+             {
+               producer.setFeature(FEATURE + "validation", true);
+               producer.setErrorHandler(this);
+             }
+           
+           // always save prefix info, maybe do namespace processing
+           producer.setFeature(FEATURE + "namespace-prefixes", true);
+           producer.setFeature(FEATURE + "namespaces",
+                               factory.isNamespaceAware());
+ 
+           // set important handlers
+           id = PROPERTY + "lexical-handler";
+           producer.setProperty(id, consumer.getProperty(id));
+ 
+           id = PROPERTY + "declaration-handler";
+           producer.setProperty(id, consumer.getProperty(id));
+           
+         }
+       catch (SAXException e)
+         {
+           throw new ParserConfigurationException(e.getMessage());
+         }
+     }
+     
+     public Document parse(InputSource source) 
+       throws SAXException, IOException
+     {
+       producer.parse(source);
+       Document doc = consumer.getDocument();
+       // TODO inputEncoding
+       doc.setDocumentURI(source.getSystemId());
+       return doc;
+     }
+ 
+     public boolean isNamespaceAware()
+     {
+       try
+         {
+           return producer.getFeature(FEATURE + "namespaces");
+         }
+       catch (SAXException e)
+         {
+           // "can't happen"
+           throw new RuntimeException(e.getMessage());
+         }
+     }
+ 
+     public boolean isValidating()
+     {
+       try
+         {
+           return producer.getFeature(FEATURE + "validation");
+         }
+       catch (SAXException e)
+         {
+           // "can't happen"
+           throw new RuntimeException(e.getMessage());
+         }
+     }
+ 
+     public void setEntityResolver(EntityResolver resolver)
+     {
+       producer.setEntityResolver(resolver);
+     }
+ 
+     public void setErrorHandler(ErrorHandler handler)
+     {
+       producer.setErrorHandler(handler);
+       consumer.setErrorHandler(handler);
+     }
+ 
+     public DOMImplementation getDOMImplementation()
+     {
+       return impl;
+     }
+ 
+     public Document newDocument()
+     {
+       return new DomDocument();
+     }
+ 	
+     // implementation of error handler that's used when validating
+     public void fatalError(SAXParseException e)
+       throws SAXException
+     {
+       throw e;
+     }
+     
+     public void error(SAXParseException e)
+       throws SAXException
+     {
+       throw e;
+     }
+     
+     public void warning(SAXParseException e)
+       throws SAXException
+     {
+       /* ignore */
+     }
+  
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLAnchorElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLAnchorElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLAnchorElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLAnchorElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,189 ----
+ /* DomHTMLAnchorElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLAnchorElement;
+ 
+ /**
+  * An HTML 'A' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLAnchorElement
+   extends DomHTMLElement
+   implements HTMLAnchorElement
+ {
+ 
+   protected DomHTMLAnchorElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAccessKey()
+   {
+     return getHTMLAttribute("accesskey");
+   }
+ 
+   public void setAccessKey(String accessKey)
+   {
+     setHTMLAttribute("accesskey", accessKey);
+   }
+   
+   public String getCharset()
+   {
+     return getHTMLAttribute("charset");
+   }
+ 
+   public void setCharset(String charset)
+   {
+     setHTMLAttribute("charset", charset);
+   }
+   
+   public String getCoords()
+   {
+     return getHTMLAttribute("coords");
+   }
+ 
+   public void setCoords(String coords)
+   {
+     setHTMLAttribute("coords", coords);
+   }
+   
+   public String getHref()
+   {
+     return getHTMLAttribute("href");
+   }
+ 
+   public void setHref(String href)
+   {
+     setHTMLAttribute("href", href);
+   }
+   
+   public String getHreflang()
+   {
+     return getHTMLAttribute("hreflang");
+   }
+ 
+   public void setHreflang(String hreflang)
+   {
+     setHTMLAttribute("hreflang", hreflang);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public String getRel()
+   {
+     return getHTMLAttribute("rel");
+   }
+ 
+   public void setRel(String rel)
+   {
+     setHTMLAttribute("rel", rel);
+   }
+   
+   public String getRev()
+   {
+     return getHTMLAttribute("rev");
+   }
+ 
+   public void setRev(String rev)
+   {
+     setHTMLAttribute("rev", rev);
+   }
+   
+   public String getShape()
+   {
+     return getHTMLAttribute("shape");
+   }
+ 
+   public void setShape(String shape)
+   {
+     setHTMLAttribute("shape", shape);
+   }
+   
+   public int getTabIndex()
+   {
+     return getIntHTMLAttribute("tabindex");
+   }
+ 
+   public void setTabIndex(int tabIndex)
+   {
+     setIntHTMLAttribute("tabindex", tabIndex);
+   }
+   
+   public String getTarget()
+   {
+     return getHTMLAttribute("target");
+   }
+ 
+   public void setTarget(String target)
+   {
+     setHTMLAttribute("target", target);
+   }
+   
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+ 
+   public void blur()
+   {
+     dispatchUIEvent("blur");
+   }
+ 
+   public void focus()
+   {
+     dispatchUIEvent("focus");
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,169 ----
+ /* DomHTMLAppletElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLAppletElement;
+ 
+ /**
+  * An HTML 'APPLET' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLAppletElement
+   extends DomHTMLElement
+   implements HTMLAppletElement
+ {
+ 
+   protected DomHTMLAppletElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getAlt()
+   {
+     return getHTMLAttribute("alt");
+   }
+ 
+   public void setAlt(String alt)
+   {
+     setHTMLAttribute("alt", alt);
+   }
+   
+   public String getArchive()
+   {
+     return getHTMLAttribute("archive");
+   }
+ 
+   public void setArchive(String archive)
+   {
+     setHTMLAttribute("archive", archive);
+   }
+   
+   public String getCode()
+   {
+     return getHTMLAttribute("code");
+   }
+ 
+   public void setCode(String code)
+   {
+     setHTMLAttribute("code", code);
+   }
+   
+   public String getCodeBase()
+   {
+     return getHTMLAttribute("codebase");
+   }
+ 
+   public void setCodeBase(String codeBase)
+   {
+     setHTMLAttribute("codebase", codeBase);
+   }
+   
+   public String getHeight()
+   {
+     return getHTMLAttribute("height");
+   }
+ 
+   public void setHeight(String height)
+   {
+     setHTMLAttribute("height", height);
+   }
+   
+   public int getHspace()
+   {
+     return getIntHTMLAttribute("hspace");
+   }
+ 
+   public void setHspace(int hspace)
+   {
+     setIntHTMLAttribute("hspace", hspace);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public String getObject()
+   {
+     return getHTMLAttribute("object");
+   }
+ 
+   public void setObject(String object)
+   {
+     setHTMLAttribute("object", object);
+   }
+   
+   public int getVspace()
+   {
+     return getIntHTMLAttribute("vspace");
+   }
+ 
+   public void setVspace(int vspace)
+   {
+     setIntHTMLAttribute("vspace", vspace);
+   }
+   
+   public String getWidth()
+   {
+     return getHTMLAttribute("width");
+   }
+ 
+   public void setWidth(String width)
+   {
+     setHTMLAttribute("width", width);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,139 ----
+ /* DomHTMLAreaElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLAreaElement;
+ 
+ /**
+  * An HTML 'AREA' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLAreaElement
+   extends DomHTMLElement
+   implements HTMLAreaElement
+ {
+ 
+   protected DomHTMLAreaElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAccessKey()
+   {
+     return getHTMLAttribute("accesskey");
+   }
+ 
+   public void setAccessKey(String accessKey)
+   {
+     setHTMLAttribute("accesskey", accessKey);
+   }
+   
+   public String getAlt()
+   {
+     return getHTMLAttribute("alt");
+   }
+ 
+   public void setAlt(String alt)
+   {
+     setHTMLAttribute("alt", alt);
+   }
+   
+   public String getCoords()
+   {
+     return getHTMLAttribute("coords");
+   }
+ 
+   public void setCoords(String coords)
+   {
+     setHTMLAttribute("coords", coords);
+   }
+   
+   public String getHref()
+   {
+     return getHTMLAttribute("href");
+   }
+ 
+   public void setHref(String href)
+   {
+     setHTMLAttribute("href", href);
+   }
+   
+   public boolean getNoHref()
+   {
+     return getBooleanHTMLAttribute("nohref");
+   }
+ 
+   public void setNoHref(boolean nohref)
+   {
+     setBooleanHTMLAttribute("nohref", nohref);
+   }
+   
+   public String getShape()
+   {
+     return getHTMLAttribute("shape");
+   }
+ 
+   public void setShape(String shape)
+   {
+     setHTMLAttribute("shape", shape);
+   }
+   
+   public int getTabIndex()
+   {
+     return getIntHTMLAttribute("tabindex");
+   }
+ 
+   public void setTabIndex(int tabIndex)
+   {
+     setIntHTMLAttribute("tabindex", tabIndex);
+   }
+   
+   public String getTarget()
+   {
+     return getHTMLAttribute("target");
+   }
+ 
+   public void setTarget(String target)
+   {
+     setHTMLAttribute("target", target);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLBRElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLBRElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLBRElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLBRElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLBRElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLBRElement;
+ 
+ /**
+  * An HTML 'BR' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLBRElement
+   extends DomHTMLElement
+   implements HTMLBRElement
+ {
+ 
+   protected DomHTMLBRElement(DomHTMLDocument owner, String namespaceURI,
+                              String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getClear()
+   {
+     return getHTMLAttribute("clear");
+   }
+ 
+   public void setClear(String clear)
+   {
+     setHTMLAttribute("clear", clear);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* DomHTMLBaseElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLBaseElement;
+ 
+ /**
+  * An HTML 'BASE' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLBaseElement
+   extends DomHTMLElement
+   implements HTMLBaseElement
+ {
+ 
+   protected DomHTMLBaseElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getHref()
+   {
+     return getHTMLAttribute("href");
+   }
+ 
+   public void setHref(String href)
+   {
+     setHTMLAttribute("href", href);
+   }
+   
+   public String getTarget()
+   {
+     return getHTMLAttribute("target");
+   }
+ 
+   public void setTarget(String target)
+   {
+     setHTMLAttribute("target", target);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* DomHTMLBaseFontElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLBaseFontElement;
+ 
+ /**
+  * An HTML 'BASEFONT' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLBaseFontElement
+   extends DomHTMLElement
+   implements HTMLBaseFontElement
+ {
+ 
+   protected DomHTMLBaseFontElement(DomHTMLDocument owner, String namespaceURI,
+                                    String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getColor()
+   {
+     return getHTMLAttribute("color");
+   }
+ 
+   public void setColor(String color)
+   {
+     setHTMLAttribute("color", color);
+   }
+   
+   public String getFace()
+   {
+     return getHTMLAttribute("face");
+   }
+ 
+   public void setFace(String face)
+   {
+     setHTMLAttribute("face", face);
+   }
+   
+   public int getSize()
+   {
+     return getIntHTMLAttribute("size");
+   }
+ 
+   public void setSize(int size)
+   {
+     setIntHTMLAttribute("size", size);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,119 ----
+ /* DomHTMLBodyElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLBodyElement;
+ 
+ /**
+  * An HTML 'BODY' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLBodyElement
+   extends DomHTMLElement
+   implements HTMLBodyElement
+ {
+ 
+   protected DomHTMLBodyElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getALink()
+   {
+     return getHTMLAttribute("alink");
+   }
+ 
+   public void setALink(String alink)
+   {
+     setHTMLAttribute("alink", alink);
+   }
+   
+   public String getBackground()
+   {
+     return getHTMLAttribute("background");
+   }
+ 
+   public void setBackground(String background)
+   {
+     setHTMLAttribute("background", background);
+   }
+   
+   public String getBgColor()
+   {
+     return getHTMLAttribute("bgcolor");
+   }
+ 
+   public void setBgColor(String bgcolor)
+   {
+     setHTMLAttribute("bgcolor", bgcolor);
+   }
+   
+   public String getLink()
+   {
+     return getHTMLAttribute("link");
+   }
+ 
+   public void setLink(String link)
+   {
+     setHTMLAttribute("link", link);
+   }
+   
+   public String getText()
+   {
+     return getHTMLAttribute("text");
+   }
+ 
+   public void setText(String text)
+   {
+     setHTMLAttribute("text", text);
+   }
+   
+   public String getVLink()
+   {
+     return getHTMLAttribute("vlink");
+   }
+ 
+   public void setVLink(String vlink)
+   {
+     setHTMLAttribute("vlink", vlink);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,121 ----
+ /* DomHTMLButtonElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.html2.HTMLButtonElement;
+ import org.w3c.dom.html2.HTMLFormElement;
+ 
+ /**
+  * An HTML 'BUTTON' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLButtonElement
+   extends DomHTMLElement
+   implements HTMLButtonElement
+ {
+ 
+   protected DomHTMLButtonElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+ 
+   public String getAccessKey()
+   {
+     return getHTMLAttribute("accesskey");
+   }
+ 
+   public void setAccessKey(String accessKey)
+   {
+     setHTMLAttribute("accesskey", accessKey);
+   }
+   
+   public boolean getDisabled()
+   {
+     return getBooleanHTMLAttribute("disabled");
+   }
+ 
+   public void setDisabled(boolean disabled)
+   {
+     setBooleanHTMLAttribute("disabled", disabled);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public int getTabIndex()
+   {
+     return getIntHTMLAttribute("tabindex");
+   }
+ 
+   public void setTabIndex(int tabIndex)
+   {
+     setIntHTMLAttribute("tabindex", tabIndex);
+   }
+ 
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+   
+   public String getValue()
+   {
+     return getHTMLAttribute("value");
+   }
+ 
+   public void setValue(String value)
+   {
+     setHTMLAttribute("value", value);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLCollection.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLCollection.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLCollection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLCollection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,227 ----
+ /* DomHTMLCollection.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import gnu.xml.dom.DomDOMException;
+ import gnu.xml.dom.DomElement;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.html2.HTMLCollection;
+ import org.w3c.dom.html2.HTMLOptionsCollection;
+ import org.w3c.dom.traversal.NodeFilter;
+ import org.w3c.dom.traversal.NodeIterator;
+ 
+ /**
+  * An HTML element collection.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DomHTMLCollection
+   implements HTMLCollection, HTMLOptionsCollection, NodeList, NodeFilter
+ {
+ 
+   final DomHTMLDocument doc;
+   final Node root;
+   List nodeNames;
+   List attributeNames;
+   List results;
+ 
+   DomHTMLCollection(DomHTMLDocument doc, Node root)
+   {
+     this.doc = doc;
+     this.root = root;
+   }
+ 
+   // -- Node name and attribute filtering --
+ 
+   void addNodeName(String name)
+   {
+     if (nodeNames == null)
+       {
+         nodeNames = new LinkedList();
+       }
+     nodeNames.add(name);
+   }
+ 
+   void addAttributeName(String name)
+   {
+     if (attributeNames == null)
+       {
+         attributeNames = new LinkedList();
+       }
+     attributeNames.add(name);
+   }
+ 
+   public short acceptNode(Node n)
+   {
+     if (n.getNodeType() != Node.ELEMENT_NODE)
+       {
+         return NodeFilter.FILTER_SKIP;
+       }
+     String localName = n.getLocalName();
+     if (localName == null)
+       {
+         localName = n.getNodeName();
+       }
+     if (nodeNames != null && !acceptName(localName))
+       {
+         return NodeFilter.FILTER_SKIP;
+       }
+     if (attributeNames != null && !acceptAttributes(n.getAttributes()))
+       {
+         return NodeFilter.FILTER_SKIP;
+       }
+     return NodeFilter.FILTER_ACCEPT;
+   }
+ 
+   private boolean acceptName(String name)
+   {
+     for (Iterator i = nodeNames.iterator(); i.hasNext(); )
+       {
+         String nodeName = (String) i.next();
+         if (nodeName.equalsIgnoreCase(name))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   private boolean acceptAttributes(NamedNodeMap attrs)
+   {
+     for (Iterator i = attributeNames.iterator(); i.hasNext(); )
+       {
+         String attributeName = (String) i.next();
+         Node attr = getNamedItem(attrs, attributeName);
+         if (attr != null)
+           {
+             // Check that attribute has a non-null value
+             String nodeValue = attr.getNodeValue();
+             if (nodeValue != null && nodeValue.length() > 0)
+               {
+                 return true;
+               }
+           }
+       }
+     return false;
+   }
+ 
+   /**
+    * Case-insensitive version of getNamedItem.
+    */
+   private Node getNamedItem(NamedNodeMap attrs, String name)
+   {
+     int len = attrs.getLength();
+     for (int i = 0; i < len; i++)
+       {
+         Node attr = attrs.item(i);
+         String attrName = attr.getLocalName();
+         if (attrName == null)
+           {
+             attrName = attr.getNodeName();
+           }
+         if (name.equalsIgnoreCase(attrName))
+           {
+             return attr;
+           }
+       }
+     return null;
+   }
+ 
+   // -- Perform query --
+ 
+   void evaluate()
+   {
+     NodeIterator i = doc.createNodeIterator(root, NodeFilter.SHOW_ELEMENT,
+                                             this, true);
+     results = new ArrayList();
+     for (Node node = i.nextNode(); node != null; node = i.nextNode())
+       {
+         results.add(node);
+       }
+   }
+ 
+   // -- HTMLCollection/NodeList interface --
+ 
+   public int getLength()
+   {
+     return results.size();
+   }
+ 
+   public void setLength(int length)
+   {
+     throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+   }
+ 
+   public Node item(int index)
+   {
+     return (Node) results.get(index);
+   }
+ 
+   public Node namedItem(String name)
+   {
+     boolean xhtml = false; // FIXME detect XHTML document
+     for (Iterator i = results.iterator(); i.hasNext(); )
+       {
+         Node node = (Node) i.next();
+         NamedNodeMap attrs = node.getAttributes();
+         Node attr = getNamedItem(attrs, "id");
+         if (name.equals(attr.getTextContent()))
+           {
+             return node;
+           }
+         if (!xhtml)
+           {
+             attr = getNamedItem(attrs, "name");
+             if (name.equals(attr.getTextContent()))
+               {
+                 return node;
+               }
+           }
+       }
+     return null;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLDListElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLDListElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLDListElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLDListElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLDListElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLDListElement;
+ 
+ /**
+  * An HTML 'DL' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLDListElement
+   extends DomHTMLElement
+   implements HTMLDListElement
+ {
+ 
+   protected DomHTMLDListElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public boolean getCompact()
+   {
+     return getBooleanHTMLAttribute("compact");
+   }
+ 
+   public void setCompact(boolean compact)
+   {
+     setBooleanHTMLAttribute("compact", compact);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLDirectoryElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLDirectoryElement;
+ 
+ /**
+  * An HTML 'DIR' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLDirectoryElement
+   extends DomHTMLElement
+   implements HTMLDirectoryElement
+ {
+ 
+   protected DomHTMLDirectoryElement(DomHTMLDocument owner, String namespaceURI,
+                                     String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public boolean getCompact()
+   {
+     return getBooleanHTMLAttribute("compact");
+   }
+ 
+   public void setCompact(boolean compact)
+   {
+     setBooleanHTMLAttribute("compact", compact);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLDivElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLDivElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLDivElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLDivElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLDivElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLDivElement;
+ 
+ /**
+  * An HTML 'DIV' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLDivElement
+   extends DomHTMLElement
+   implements HTMLDivElement
+ {
+ 
+   protected DomHTMLDivElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,425 ----
+ /* DomHTMLDocument.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import gnu.xml.dom.DomDocument;
+ import gnu.xml.dom.DomDOMException;
+ import java.lang.reflect.Constructor;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Map;
+ import java.util.Set;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.html2.HTMLCollection;
+ import org.w3c.dom.html2.HTMLDocument;
+ import org.w3c.dom.html2.HTMLElement;
+ 
+ /**
+  * An HTML document.
+  * This is the factory object used to create HTML elements.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLDocument
+   extends DomDocument
+   implements HTMLDocument
+ {
+ 
+   private static final Class[] ELEMENT_PT = new Class[] {
+     DomHTMLDocument.class,
+     String.class,
+     String.class
+   };
+ 
+   private static Map ELEMENT_CLASSES;
+   static
+   {
+     Map map = new HashMap();
+     map.put("a", DomHTMLAnchorElement.class);
+     map.put("applet", DomHTMLAppletElement.class);
+     map.put("area", DomHTMLAreaElement.class);
+     map.put("base", DomHTMLBaseElement.class);
+     map.put("basefont", DomHTMLBaseFontElement.class);
+     map.put("body", DomHTMLBodyElement.class);
+     map.put("br", DomHTMLBRElement.class);
+     map.put("button", DomHTMLButtonElement.class);
+     map.put("dir", DomHTMLDirectoryElement.class);
+     map.put("div", DomHTMLDivElement.class);
+     map.put("dlist", DomHTMLDListElement.class);
+     map.put("fieldset", DomHTMLFieldSetElement.class);
+     map.put("font", DomHTMLFontElement.class);
+     map.put("form", DomHTMLFormElement.class);
+     map.put("frame", DomHTMLFrameElement.class);
+     map.put("frameset", DomHTMLFrameSetElement.class);
+     map.put("head", DomHTMLHeadElement.class);
+     map.put("h1", DomHTMLHeadingElement.class);
+     map.put("h2", DomHTMLHeadingElement.class);
+     map.put("h3", DomHTMLHeadingElement.class);
+     map.put("h4", DomHTMLHeadingElement.class);
+     map.put("h5", DomHTMLHeadingElement.class);
+     map.put("h6", DomHTMLHeadingElement.class);
+     map.put("html", DomHTMLHtmlElement.class);
+     map.put("iframe", DomHTMLIFrameElement.class);
+     map.put("img", DomHTMLImageElement.class);
+     map.put("input", DomHTMLInputElement.class);
+     map.put("isindex", DomHTMLIsIndexElement.class);
+     map.put("label", DomHTMLLabelElement.class);
+     map.put("legend", DomHTMLLegendElement.class);
+     map.put("li", DomHTMLLIElement.class);
+     map.put("link", DomHTMLLinkElement.class);
+     map.put("map", DomHTMLMapElement.class);
+     map.put("menu", DomHTMLMenuElement.class);
+     map.put("meta", DomHTMLMetaElement.class);
+     map.put("ins", DomHTMLModElement.class);
+     map.put("del", DomHTMLModElement.class);
+     map.put("object", DomHTMLObjectElement.class);
+     map.put("ol", DomHTMLOListElement.class);
+     map.put("optgroup", DomHTMLOptGroupElement.class);
+     map.put("option", DomHTMLOptionElement.class);
+     map.put("p", DomHTMLParagraphElement.class);
+     map.put("param", DomHTMLParamElement.class);
+     map.put("pre", DomHTMLPreElement.class);
+     map.put("q", DomHTMLQuoteElement.class);
+     map.put("blockquote", DomHTMLQuoteElement.class);
+     map.put("script", DomHTMLScriptElement.class);
+     map.put("select", DomHTMLSelectElement.class);
+     map.put("style", DomHTMLStyleElement.class);
+     map.put("caption", DomHTMLTableCaptionElement.class);
+     map.put("th", DomHTMLTableCellElement.class);
+     map.put("td", DomHTMLTableCellElement.class);
+     map.put("col", DomHTMLTableColElement.class);
+     map.put("colgroup", DomHTMLTableColElement.class);
+     map.put("table", DomHTMLTableElement.class);
+     map.put("tr", DomHTMLTableRowElement.class);
+     map.put("thead", DomHTMLTableSectionElement.class);
+     map.put("tfoot", DomHTMLTableSectionElement.class);
+     map.put("tbody", DomHTMLTableSectionElement.class);
+     map.put("textarea", DomHTMLTextAreaElement.class);
+     map.put("title", DomHTMLTitleElement.class);
+     map.put("ul", DomHTMLUListElement.class);
+     ELEMENT_CLASSES = Collections.unmodifiableMap(map);
+   }
+ 
+   private static Set HTML_NS_URIS;
+   static
+   {
+     Set set = new HashSet();
+     set.add("http://www.w3.org/TR/html4/strict");
+     set.add("http://www.w3.org/TR/html4/loose");
+     set.add("http://www.w3.org/TR/html4/frameset");
+     set.add("http://www.w3.org/1999/xhtml");
+     set.add("http://www.w3.org/TR/xhtml1/strict");
+     set.add("http://www.w3.org/TR/xhtml1/loose");
+     set.add("http://www.w3.org/TR/xhtml1/frameset");
+     HTML_NS_URIS = Collections.unmodifiableSet(set);
+   }
+ 
+   /**
+    * Convenience constructor.
+    */
+   public DomHTMLDocument()
+   {
+     this(new DomHTMLImpl());
+   }
+ 
+   /**
+    * Constructor.
+    * This is called by the DOMImplementation.
+    */
+   public DomHTMLDocument(DomHTMLImpl impl)
+   {
+     super(impl);
+   }
+ 
+   private Node getChildNodeByName(Node parent, String name)
+   {
+     for (Node ctx = parent.getFirstChild(); ctx != null;
+          ctx = ctx.getNextSibling())
+       {
+         if (name.equalsIgnoreCase(ctx.getNodeName()))
+           {
+             return ctx;
+           }
+       }
+     return null;
+   }
+ 
+   public String getTitle()
+   {
+     Node html = getDocumentElement();
+     if (html != null)
+       {
+         Node head = getChildNodeByName(html, "head");
+         if (head != null)
+           {
+             Node title = getChildNodeByName(head, "title");
+             if (title != null)
+               {
+                 return title.getTextContent();
+               }
+           }
+       }
+     return null;
+   }
+ 
+   public void setTitle(String title)
+   {
+     Node html = getDocumentElement();
+     if (html == null)
+       {
+         html = createElement("html");
+         appendChild(html);
+       }
+     Node head = getChildNodeByName(html, "head");
+     if (head == null)
+       {
+         head = createElement("head");
+         Node first = html.getFirstChild();
+         if (first != null)
+           {
+             html.insertBefore(first, head);
+           }
+         else
+           {
+             html.appendChild(head);
+           }
+       }
+     Node titleNode = getChildNodeByName(head, "title");
+     if (titleNode == null)
+       {
+         titleNode = createElement("title");
+         Node first = head.getFirstChild();
+         if (first != null)
+           {
+             head.insertBefore(first, titleNode);
+           }
+         else
+           {
+             head.appendChild(titleNode);
+           }
+       }
+     titleNode.setTextContent(title);
+   }
+ 
+   public String getReferrer()
+   {
+     // TODO getReferrer
+     return null;
+   }
+ 
+   public String getDomain()
+   {
+     try
+       {
+         URL url = new URL(getDocumentURI());
+         return url.getHost();
+       }
+     catch (MalformedURLException e)
+       {
+         return null;
+       }
+   }
+ 
+   public String getURL()
+   {
+     return getDocumentURI();
+   }
+ 
+   public HTMLElement getBody()
+   {
+     Node html = getDocumentElement();
+     if (html != null)
+       {
+         Node body = getChildNodeByName(html, "body");
+         if (body == null)
+           {
+             body = getChildNodeByName(html, "frameset");
+           }
+         return (HTMLElement) body;
+       }
+     return null;
+   }
+ 
+   public void setBody(HTMLElement body)
+   {
+     Node html = getDocumentElement();
+     if (html == null)
+       {
+         html = createElement("html");
+         appendChild(html);
+       }
+     Node ref = getBody();
+     if (ref == null)
+       {
+         html.appendChild(body);
+       }
+     else
+       {
+         html.replaceChild(body, ref);
+       }
+   }
+ 
+   public HTMLCollection getImages()
+   {
+     DomHTMLCollection ret = new DomHTMLCollection(this, this);
+     ret.addNodeName("img");
+     ret.evaluate();
+     return ret;
+   }
+ 
+   public HTMLCollection getApplets()
+   {
+     DomHTMLCollection ret = new DomHTMLCollection(this, this);
+     ret.addNodeName("object");
+     ret.addNodeName("applet");
+     ret.evaluate();
+     return ret;
+   }
+ 
+   public HTMLCollection getLinks()
+   {
+     DomHTMLCollection ret = new DomHTMLCollection(this, this);
+     ret.addNodeName("area");
+     ret.addNodeName("a");
+     ret.evaluate();
+     return ret;
+   }
+ 
+   public HTMLCollection getForms()
+   {
+     DomHTMLCollection ret = new DomHTMLCollection(this, this);
+     ret.addNodeName("form");
+     ret.evaluate();
+     return ret;
+   }
+ 
+   public HTMLCollection getAnchors()
+   {
+     DomHTMLCollection ret = new DomHTMLCollection(this, this);
+     ret.addNodeName("a");
+     ret.addAttributeName("name");
+     ret.evaluate();
+     return ret;
+   }
+ 
+   public String getCookie()
+   {
+     // TODO getCookie
+     return null;
+   }
+ 
+   public void setCookie(String cookie)
+   {
+     // TODO setCookie
+   }
+ 
+   public void open()
+   {
+     // TODO open
+   }
+ 
+   public void close()
+   {
+     // TODO close
+   }
+ 
+   public void write(String text)
+   {
+     // TODO write
+   }
+ 
+   public void writeln(String text)
+   {
+     // TODO write
+   }
+ 
+   public NodeList getElementsByName(String name)
+   {
+     DomHTMLCollection ret = new DomHTMLCollection(this, this);
+     ret.addNodeName(name);
+     ret.evaluate();
+     return ret;
+     // TODO xhtml: return only form controls (?)
+   }
+ 
+   public Element createElement(String tagName)
+   {
+     return createElementNS(null, tagName);
+   }
+ 
+   public Element createElementNS(String uri, String qName)
+   {
+     /* If a non-HTML element, use the default implementation. */
+     if (uri != null && !HTML_NS_URIS.contains(uri))
+       {
+         return super.createElementNS(uri, qName);
+       }
+     String localName = qName.toLowerCase();
+     int ci = qName.indexOf(':');
+     if (ci != -1)
+       {
+         localName = qName.substring(ci + 1);
+       }
+     Class t = (Class) ELEMENT_CLASSES.get(localName);
+     /* If a non-HTML element, use the default implementation. */
+     if (t == null)
+       {
+         return super.createElementNS(uri, qName);
+       }
+     try
+       {
+         Constructor c = t.getDeclaredConstructor(ELEMENT_PT);
+         Object[] args = new Object[] { this, uri, qName };
+         return (Element) c.newInstance(args);
+       }
+     catch (Exception e)
+       {
+         DOMException e2 = new DomDOMException(DOMException.TYPE_MISMATCH_ERR);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,287 ----
+ /* DomHTMLElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import gnu.xml.dom.DomDOMException;
+ import gnu.xml.dom.DomElement;
+ import gnu.xml.dom.DomEvent;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.events.UIEvent;
+ import org.w3c.dom.html2.HTMLElement;
+ 
+ /**
+  * Abstract implementation of an HTML element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public abstract class DomHTMLElement
+   extends DomElement
+   implements HTMLElement
+ {
+ 
+   protected DomHTMLElement(DomHTMLDocument owner, String namespaceURI,
+                            String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   /**
+    * Returns the value of the specified attribute.
+    * The attribute name is case insensitive.
+    */
+   protected String getHTMLAttribute(String name)
+   {
+     if (hasAttributes())
+       {
+         NamedNodeMap attrs = getAttributes();
+         int len = attrs.getLength();
+         for (int i = 0; i < len; i++)
+           {
+             Node attr = attrs.item(i);
+             String attrName = attr.getLocalName();
+             if (attrName == null)
+               {
+                 attrName = attr.getNodeName();
+               }
+             if (attrName.equalsIgnoreCase(name))
+               {
+                 return attr.getNodeValue();
+               }
+           }
+       }
+     return "";
+   }
+ 
+   protected int getIntHTMLAttribute(String name)
+   {
+     String value = getHTMLAttribute(name);
+     if (value == null)
+       {
+         return -1;
+       }
+     try
+       {
+         return Integer.parseInt(value);
+       }
+     catch (NumberFormatException e)
+       {
+         return -1;
+       }
+   }
+ 
+   protected boolean getBooleanHTMLAttribute(String name)
+   {
+     String value = getHTMLAttribute(name);
+     return value != null;
+   }
+ 
+   /**
+    * Sets the value of the specified attribute.
+    * The attribute name is case insensitive.
+    */
+   protected void setHTMLAttribute(String name, String value)
+   {
+     Node attr;
+     NamedNodeMap attrs = getAttributes();
+     int len = attrs.getLength();
+     for (int i = 0; i < len; i++)
+       {
+         attr = attrs.item(i);
+         String attrName = attr.getLocalName();
+         if (attrName == null)
+           {
+             attrName = attr.getNodeName();
+           }
+         if (attrName.equalsIgnoreCase(name))
+           {
+             if (value != null)
+               {
+                 attr.setNodeValue(value);
+               }
+             else
+               {
+                 attrs.removeNamedItem(attr.getNodeName());
+               }
+             return;
+           }
+       }
+     if (value != null)
+       {
+         // Create a new attribute
+         DomHTMLDocument doc = (DomHTMLDocument) getOwnerDocument();
+         // XXX namespace URI for attribute?
+         attr = doc.createAttribute(name);
+         attr.setNodeValue(value);
+       }
+   }
+ 
+   protected void setIntHTMLAttribute(String name, int value)
+   {
+     setHTMLAttribute(name, Integer.toString(value));
+   }
+ 
+   protected void setBooleanHTMLAttribute(String name, boolean value)
+   {
+     setHTMLAttribute(name, value ? name : null);
+   }
+ 
+   /**
+    * Returns the first parent element with the specified name.
+    */
+   protected Node getParentElement(String name)
+   {
+     for (Node parent = getParentNode(); parent != null;
+          parent = parent.getParentNode())
+       {
+         String parentName = parent.getLocalName();
+         if (parentName == null)
+           {
+               parentName = parent.getNodeName();
+           }
+         if (name.equalsIgnoreCase(parentName))
+           {
+             return parent;
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns the first child element with the specified name.
+    */
+   protected Node getChildElement(String name)
+   {
+     for (Node child = getFirstChild(); child != null;
+          child = child.getNextSibling())
+       {
+         String childName = child.getLocalName();
+         if (childName == null)
+           {
+             childName = child.getLocalName();
+           }
+         if (name.equalsIgnoreCase(childName))
+           {
+             return child;
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns the index of this element among elements of the same name,
+    * relative to its parent.
+    */
+   protected int getIndex()
+   {
+     int index = 0;
+     Node parent = getParentNode();
+     if (parent != null)
+       {
+         for (Node ctx = parent.getFirstChild(); ctx != null;
+              ctx = ctx.getNextSibling())
+           {
+             if (ctx == this)
+               {
+                 return index;
+               }
+             index++;
+           }
+       }
+     throw new DomDOMException(DOMException.NOT_FOUND_ERR);
+   }
+ 
+   protected void dispatchUIEvent(String name)
+   {
+     UIEvent event = new DomEvent.DomUIEvent(name);
+     dispatchEvent(event);
+   }
+ 
+   public String getId()
+   {
+     return getHTMLAttribute("id");
+   }
+ 
+   public void setId(String id)
+   {
+     setHTMLAttribute("id", id);
+   }
+   
+   public String getTitle()
+   {
+     return getHTMLAttribute("title");
+   }
+ 
+   public void setTitle(String title)
+   {
+     setHTMLAttribute("title", title);
+   }
+   
+   public String getLang()
+   {
+     return getHTMLAttribute("lang");
+   }
+ 
+   public void setLang(String lang)
+   {
+     setHTMLAttribute("lang", lang);
+   }
+   
+   public String getDir()
+   {
+     return getHTMLAttribute("dir");
+   }
+ 
+   public void setDir(String dir)
+   {
+     setHTMLAttribute("dir", dir);
+   }
+   
+   public String getClassName()
+   {
+     return getHTMLAttribute("class");
+   }
+ 
+   public void setClassName(String className)
+   {
+     setHTMLAttribute("class", className);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* DomHTMLFieldSetElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLFieldSetElement;
+ import org.w3c.dom.html2.HTMLFormElement;
+ 
+ /**
+  * An HTML 'FIELDSET' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLFieldSetElement
+   extends DomHTMLElement
+   implements HTMLFieldSetElement
+ {
+ 
+   protected DomHTMLFieldSetElement(DomHTMLDocument owner, String namespaceURI,
+                                    String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFontElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFontElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFontElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFontElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* DomHTMLFontElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLFontElement;
+ 
+ /**
+  * An HTML 'FONT' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLFontElement
+   extends DomHTMLElement
+   implements HTMLFontElement
+ {
+ 
+   protected DomHTMLFontElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getColor()
+   {
+     return getHTMLAttribute("color");
+   }
+ 
+   public void setColor(String color)
+   {
+     setHTMLAttribute("color", color);
+   }
+   
+   public String getFace()
+   {
+     return getHTMLAttribute("face");
+   }
+ 
+   public void setFace(String face)
+   {
+     setHTMLAttribute("face", face);
+   }
+   
+   public String getSize()
+   {
+     return getHTMLAttribute("size");
+   }
+ 
+   public void setSize(String size)
+   {
+     setHTMLAttribute("size", size);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFormElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFormElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFormElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFormElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,150 ----
+ /* DomHTMLFormElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLCollection;
+ import org.w3c.dom.html2.HTMLFormElement;
+ 
+ /**
+  * An HTML 'FORM' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLFormElement
+   extends DomHTMLElement
+   implements HTMLFormElement
+ {
+ 
+   protected DomHTMLFormElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLCollection getElements()
+   {
+     DomHTMLCollection ret =
+       new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+     ret.addNodeName("input");
+     ret.addNodeName("button");
+     ret.addNodeName("select");
+     ret.addNodeName("textarea");
+     ret.addNodeName("isindex");
+     ret.addNodeName("label");
+     ret.addNodeName("option");
+     ret.evaluate();
+     return ret;
+   }
+ 
+   public int getLength()
+   {
+     return getElements().getLength();
+   }
+ 
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public String getAcceptCharset()
+   {
+     return getHTMLAttribute("accept-charset");
+   }
+ 
+   public void setAcceptCharset(String acceptCharset)
+   {
+     setHTMLAttribute("accept-charset", acceptCharset);
+   }
+   
+   public String getAction()
+   {
+     return getHTMLAttribute("action");
+   }
+ 
+   public void setAction(String action)
+   {
+     setHTMLAttribute("action", action);
+   }
+   
+   public String getEnctype()
+   {
+     return getHTMLAttribute("enctype");
+   }
+ 
+   public void setEnctype(String enctype)
+   {
+     setHTMLAttribute("enctype", enctype);
+   }
+   
+   public String getMethod()
+   {
+     return getHTMLAttribute("method");
+   }
+ 
+   public void setMethod(String method)
+   {
+     setHTMLAttribute("method", method);
+   }
+   
+   public String getTarget()
+   {
+     return getHTMLAttribute("target");
+   }
+ 
+   public void setTarget(String target)
+   {
+     setHTMLAttribute("target", target);
+   }
+ 
+   public void submit()
+   {
+     dispatchUIEvent("submit");
+   }
+ 
+   public void reset()
+   {
+     dispatchUIEvent("reset");
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,146 ----
+ /* DomHTMLFrameElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.html2.HTMLFrameElement;
+ 
+ /**
+  * An HTML 'FRAME' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLFrameElement
+   extends DomHTMLElement
+   implements HTMLFrameElement
+ {
+ 
+   protected DomHTMLFrameElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getFrameBorder()
+   {
+     return getHTMLAttribute("frameborder");
+   }
+ 
+   public void setFrameBorder(String frameBorder)
+   {
+     setHTMLAttribute("frameborder", frameBorder);
+   }
+   
+   public String getLongDesc()
+   {
+     return getHTMLAttribute("longdesc");
+   }
+ 
+   public void setLongDesc(String longDesc)
+   {
+     setHTMLAttribute("longdesc", longDesc);
+   }
+   
+   public String getMarginHeight()
+   {
+     return getHTMLAttribute("marginheight");
+   }
+ 
+   public void setMarginHeight(String marginHeight)
+   {
+     setHTMLAttribute("marginheight", marginHeight);
+   }
+   
+   public String getMarginWidth()
+   {
+     return getHTMLAttribute("marginwidth");
+   }
+ 
+   public void setMarginWidth(String marginWidth)
+   {
+     setHTMLAttribute("marginwidth", marginWidth);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public boolean getNoResize()
+   {
+     return getBooleanHTMLAttribute("noresize");
+   }
+ 
+   public void setNoResize(boolean noResize)
+   {
+     setBooleanHTMLAttribute("noresize", noResize);
+   }
+   
+   public String getScrolling()
+   {
+     return getHTMLAttribute("scrolling");
+   }
+ 
+   public void setScrolling(String scrolling)
+   {
+     setHTMLAttribute("scrolling", scrolling);
+   }
+   
+   public String getSrc()
+   {
+     return getHTMLAttribute("src");
+   }
+ 
+   public void setSrc(String src)
+   {
+     setHTMLAttribute("src", src);
+   }
+ 
+   public Document getContentDocument()
+   {
+     // TODO getContentDocument
+     return null;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameSetElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameSetElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameSetElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameSetElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* DomHTMLFrameSetElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLFrameSetElement;
+ 
+ /**
+  * An HTML 'FRAMESET' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLFrameSetElement
+   extends DomHTMLElement
+   implements HTMLFrameSetElement
+ {
+ 
+   protected DomHTMLFrameSetElement(DomHTMLDocument owner, String namespaceURI,
+                                    String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getCols()
+   {
+     return getHTMLAttribute("cols");
+   }
+ 
+   public void setCols(String cols)
+   {
+     setHTMLAttribute("cols", cols);
+   }
+   
+   public String getRows()
+   {
+     return getHTMLAttribute("rows");
+   }
+ 
+   public void setRows(String rows)
+   {
+     setHTMLAttribute("rows", rows);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLHRElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLHRElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLHRElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLHRElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,99 ----
+ /* DomHTMLHRElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLHRElement;
+ 
+ /**
+  * An HTML 'HR' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLHRElement
+   extends DomHTMLElement
+   implements HTMLHRElement
+ {
+ 
+   protected DomHTMLHRElement(DomHTMLDocument owner, String namespaceURI,
+                              String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public boolean getNoShade()
+   {
+     return getBooleanHTMLAttribute("noshade");
+   }
+ 
+   public void setNoShade(boolean noShade)
+   {
+     setBooleanHTMLAttribute("noshade", noShade);
+   }
+   
+   public String getSize()
+   {
+     return getHTMLAttribute("size");
+   }
+ 
+   public void setSize(String size)
+   {
+     setHTMLAttribute("size", size);
+   }
+   
+   public String getWidth()
+   {
+     return getHTMLAttribute("width");
+   }
+ 
+   public void setWidth(String width)
+   {
+     setHTMLAttribute("width", width);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLHeadElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLHeadElement;
+ 
+ /**
+  * An HTML 'HEAD' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLHeadElement
+   extends DomHTMLElement
+   implements HTMLHeadElement
+ {
+ 
+   protected DomHTMLHeadElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getProfile()
+   {
+     return getHTMLAttribute("profile");
+   }
+ 
+   public void setProfile(String profile)
+   {
+     setHTMLAttribute("profile", profile);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadingElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadingElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadingElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadingElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLHeadingElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLHeadingElement;
+ 
+ /**
+  * An HTML 'H1', 'H2', 'H3', 'H4', 'H5', or 'H6' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLHeadingElement
+   extends DomHTMLElement
+   implements HTMLHeadingElement
+ {
+ 
+   protected DomHTMLHeadingElement(DomHTMLDocument owner, String namespaceURI,
+                                   String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLHtmlElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLHtmlElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLHtmlElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLHtmlElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLHtmlElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLHtmlElement;
+ 
+ /**
+  * An HTML 'HTML' top-level element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLHtmlElement
+   extends DomHTMLElement
+   implements HTMLHtmlElement
+ {
+ 
+   protected DomHTMLHtmlElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getVersion()
+   {
+     return getHTMLAttribute("version");
+   }
+ 
+   public void setVersion(String version)
+   {
+     setHTMLAttribute("version", version);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLIFrameElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLIFrameElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLIFrameElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLIFrameElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,166 ----
+ /* DomHTMLIFrameElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.html2.HTMLIFrameElement;
+ 
+ /**
+  * An HTML 'IFRAME' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLIFrameElement
+   extends DomHTMLElement
+   implements HTMLIFrameElement
+ {
+ 
+   protected DomHTMLIFrameElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getFrameBorder()
+   {
+     return getHTMLAttribute("frameborder");
+   }
+ 
+   public void setFrameBorder(String frameBorder)
+   {
+     setHTMLAttribute("frameborder", frameBorder);
+   }
+   
+   public String getHeight()
+   {
+     return getHTMLAttribute("height");
+   }
+ 
+   public void setHeight(String height)
+   {
+     setHTMLAttribute("height", height);
+   }
+   
+   public String getLongDesc()
+   {
+     return getHTMLAttribute("longdesc");
+   }
+ 
+   public void setLongDesc(String longDesc)
+   {
+     setHTMLAttribute("longdesc", longDesc);
+   }
+   
+   public String getMarginHeight()
+   {
+     return getHTMLAttribute("marginheight");
+   }
+ 
+   public void setMarginHeight(String marginHeight)
+   {
+     setHTMLAttribute("marginheight", marginHeight);
+   }
+   
+   public String getMarginWidth()
+   {
+     return getHTMLAttribute("marginwidth");
+   }
+ 
+   public void setMarginWidth(String marginWidth)
+   {
+     setHTMLAttribute("marginwidth", marginWidth);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public String getScrolling()
+   {
+     return getHTMLAttribute("scrolling");
+   }
+ 
+   public void setScrolling(String scrolling)
+   {
+     setHTMLAttribute("scrolling", scrolling);
+   }
+   
+   public String getSrc()
+   {
+     return getHTMLAttribute("src");
+   }
+ 
+   public void setSrc(String src)
+   {
+     setHTMLAttribute("src", src);
+   }
+ 
+   public String getWidth()
+   {
+     return getHTMLAttribute("width");
+   }
+ 
+   public void setWidth(String width)
+   {
+     setHTMLAttribute("width", width);
+   }
+   
+   public Document getContentDocument()
+   {
+     // TODO getContentDocument
+     return null;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLImageElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLImageElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLImageElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLImageElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,179 ----
+ /* DomHTMLImageElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLImageElement;
+ 
+ /**
+  * An HTML 'IMG' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLImageElement
+   extends DomHTMLElement
+   implements HTMLImageElement
+ {
+ 
+   protected DomHTMLImageElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getAlt()
+   {
+     return getHTMLAttribute("alt");
+   }
+ 
+   public void setAlt(String alt)
+   {
+     setHTMLAttribute("alt", alt);
+   }
+   
+   public String getBorder()
+   {
+     return getHTMLAttribute("border");
+   }
+ 
+   public void setBorder(String border)
+   {
+     setHTMLAttribute("border", border);
+   }
+   
+   public int getHeight()
+   {
+     return getIntHTMLAttribute("height");
+   }
+ 
+   public void setHeight(int height)
+   {
+     setIntHTMLAttribute("height", height);
+   }
+   
+   public int getHspace()
+   {
+     return getIntHTMLAttribute("hspace");
+   }
+ 
+   public void setHspace(int hspace)
+   {
+     setIntHTMLAttribute("hspace", hspace);
+   }
+   
+   public boolean getIsMap()
+   {
+     return getBooleanHTMLAttribute("ismap");
+   }
+ 
+   public void setIsMap(boolean isMap)
+   {
+     setBooleanHTMLAttribute("ismap", isMap);
+   }
+   
+   public String getLongDesc()
+   {
+     return getHTMLAttribute("longdesc");
+   }
+ 
+   public void setLongDesc(String longDesc)
+   {
+     setHTMLAttribute("longdesc", longDesc);
+   }
+   
+   public String getSrc()
+   {
+     return getHTMLAttribute("src");
+   }
+ 
+   public void setSrc(String src)
+   {
+     setHTMLAttribute("src", src);
+   }
+ 
+   public String getUseMap()
+   {
+     return getHTMLAttribute("usemap");
+   }
+ 
+   public void setUseMap(String useMap)
+   {
+     setHTMLAttribute("usemap", useMap);
+   }
+   
+   public int getVspace()
+   {
+     return getIntHTMLAttribute("vspace");
+   }
+ 
+   public void setVspace(int vspace)
+   {
+     setIntHTMLAttribute("vspace", vspace);
+   }
+   
+   public int getWidth()
+   {
+     return getIntHTMLAttribute("width");
+   }
+ 
+   public void setWidth(int width)
+   {
+     setIntHTMLAttribute("width", width);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* DomHTMLImpl.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import gnu.xml.dom.DomImpl;
+ import org.w3c.dom.Document;
+ 
+ /**
+  * Specialised DOMImplementation for creating HTML documents.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLImpl
+   extends DomImpl
+ {
+   
+   protected Document createDocument()
+   {
+     return new DomHTMLDocument(this);
+   }
+ 
+   public Object getFeature(String feature, String version)
+   {
+     if (hasFeature(feature, version))
+       {
+         return this;
+       }
+     return null;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLInputElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLInputElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLInputElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLInputElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,266 ----
+ /* DomHTMLInputElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLFormElement;
+ import org.w3c.dom.html2.HTMLInputElement;
+ 
+ /**
+  * An HTML 'INPUT' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLInputElement
+   extends DomHTMLElement
+   implements HTMLInputElement
+ {
+ 
+   protected String value;
+   protected Boolean checked;
+ 
+   protected DomHTMLInputElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getDefaultValue()
+   {
+     return getHTMLAttribute("value");
+   }
+ 
+   public void setDefaultValue(String defaultValue)
+   {
+     setHTMLAttribute("value", defaultValue);
+   }
+   
+   public boolean getDefaultChecked()
+   {
+     return getBooleanHTMLAttribute("checked");
+   }
+ 
+   public void setDefaultChecked(boolean defaultChecked)
+   {
+     setBooleanHTMLAttribute("checked", defaultChecked);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+   
+   public String getAccept()
+   {
+     return getHTMLAttribute("accept");
+   }
+ 
+   public void setAccept(String accept)
+   {
+     setHTMLAttribute("accept", accept);
+   }
+   
+   public String getAccessKey()
+   {
+     return getHTMLAttribute("accesskey");
+   }
+ 
+   public void setAccessKey(String accessKey)
+   {
+     setHTMLAttribute("accesskey", accessKey);
+   }
+   
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getAlt()
+   {
+     return getHTMLAttribute("alt");
+   }
+ 
+   public void setAlt(String alt)
+   {
+     setHTMLAttribute("alt", alt);
+   }
+   
+   public boolean getChecked()
+   {
+     if (checked == null)
+       {
+         checked = Boolean.valueOf(getDefaultChecked());
+       }
+     return checked.booleanValue();
+   }
+ 
+   public void setChecked(boolean checked)
+   {
+     this.checked = Boolean.valueOf(checked);
+   }
+   
+   public boolean getDisabled()
+   {
+     return getBooleanHTMLAttribute("disabled");
+   }
+ 
+   public void setDisabled(boolean disabled)
+   {
+     setBooleanHTMLAttribute("disabled", disabled);
+   }
+   
+   public int getMaxLength()
+   {
+     return getIntHTMLAttribute("maxLength");
+   }
+ 
+   public void setMaxLength(int maxLength)
+   {
+     setIntHTMLAttribute("maxLength", maxLength);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public boolean getReadOnly()
+   {
+     return getBooleanHTMLAttribute("readonly");
+   }
+ 
+   public void setReadOnly(boolean readOnly)
+   {
+     setBooleanHTMLAttribute("readonly", readOnly);
+   }
+   
+   public int getSize()
+   {
+     return getIntHTMLAttribute("size");
+   }
+ 
+   public void setSize(int size)
+   {
+     setIntHTMLAttribute("size", size);
+   }
+   
+   public String getSrc()
+   {
+     return getHTMLAttribute("src");
+   }
+ 
+   public void setSrc(String src)
+   {
+     setHTMLAttribute("src", src);
+   }
+   
+   public int getTabIndex()
+   {
+     return getIntHTMLAttribute("tabindex");
+   }
+ 
+   public void setTabIndex(int tabIndex)
+   {
+     setIntHTMLAttribute("tabindex", tabIndex);
+   }
+   
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+   
+   public String getUseMap()
+   {
+     return getHTMLAttribute("usemap");
+   }
+ 
+   public void setUseMap(String useMap)
+   {
+     setHTMLAttribute("usemap", useMap);
+   }
+   
+   public String getValue()
+   {
+     if (value == null)
+       {
+         value = getDefaultValue();
+       }
+     return value;
+   }
+ 
+   public void setValue(String value)
+   {
+     this.value = value;
+   }
+ 
+   public void blur()
+   {
+     dispatchUIEvent("blur");
+   }
+ 
+   public void focus()
+   {
+     dispatchUIEvent("focus");
+   }
+ 
+   public void select()
+   {
+     dispatchUIEvent("select");
+   }
+ 
+   public void click()
+   {
+     dispatchUIEvent("click");
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLIsIndexElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLIsIndexElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLIsIndexElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLIsIndexElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* DomHTMLIsIndexElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLFormElement;
+ import org.w3c.dom.html2.HTMLIsIndexElement;
+ 
+ /**
+  * An HTML 'ISINDEX' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLIsIndexElement
+   extends DomHTMLElement
+   implements HTMLIsIndexElement
+ {
+ 
+   protected DomHTMLIsIndexElement(DomHTMLDocument owner, String namespaceURI,
+                                   String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+ 
+   public String getPrompt()
+   {
+     return getHTMLAttribute("prompt");
+   }
+ 
+   public void setPrompt(String prompt)
+   {
+     setHTMLAttribute("prompt", prompt);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLLIElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLLIElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLLIElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLLIElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* DomHTMLLIElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLLIElement;
+ 
+ /**
+  * An HTML 'LI' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLLIElement
+   extends DomHTMLElement
+   implements HTMLLIElement
+ {
+ 
+   protected DomHTMLLIElement(DomHTMLDocument owner, String namespaceURI,
+                              String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+   
+   public int getValue()
+   {
+     return getIntHTMLAttribute("value");
+   }
+ 
+   public void setValue(int value)
+   {
+     setIntHTMLAttribute("value", value);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLLabelElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLLabelElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLLabelElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLLabelElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* DomHTMLLabelElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLFormElement;
+ import org.w3c.dom.html2.HTMLLabelElement;
+ 
+ /**
+  * An HTML 'LABEL' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLLabelElement
+   extends DomHTMLElement
+   implements HTMLLabelElement
+ {
+ 
+   protected DomHTMLLabelElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+ 
+   public String getAccessKey()
+   {
+     return getHTMLAttribute("accesskey");
+   }
+ 
+   public void setAccessKey(String accessKey)
+   {
+     setHTMLAttribute("accesskey", accessKey);
+   }
+   
+   public String getHtmlFor()
+   {
+     return getHTMLAttribute("for");
+   }
+ 
+   public void setHtmlFor(String htmlFor)
+   {
+     setHTMLAttribute("for", htmlFor);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLLegendElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLLegendElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLLegendElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLLegendElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* DomHTMLLegendElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLFormElement;
+ import org.w3c.dom.html2.HTMLLegendElement;
+ 
+ /**
+  * An HTML 'LEGEND' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLLegendElement
+   extends DomHTMLElement
+   implements HTMLLegendElement
+ {
+ 
+   protected DomHTMLLegendElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+ 
+   public String getAccessKey()
+   {
+     return getHTMLAttribute("accesskey");
+   }
+ 
+   public void setAccessKey(String accessKey)
+   {
+     setHTMLAttribute("accesskey", accessKey);
+   }
+   
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLLinkElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLLinkElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLLinkElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLLinkElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,149 ----
+ /* DomHTMLLinkElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLLinkElement;
+ 
+ /**
+  * An HTML 'LINK' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLLinkElement
+   extends DomHTMLElement
+   implements HTMLLinkElement
+ {
+ 
+   protected DomHTMLLinkElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public boolean getDisabled()
+   {
+     return getBooleanHTMLAttribute("disabled");
+   }
+ 
+   public void setDisabled(boolean disabled)
+   {
+     setBooleanHTMLAttribute("disabled", disabled);
+   }
+   
+   public String getCharset()
+   {
+     return getHTMLAttribute("charset");
+   }
+ 
+   public void setCharset(String charset)
+   {
+     setHTMLAttribute("charset", charset);
+   }
+   
+   public String getHref()
+   {
+     return getHTMLAttribute("href");
+   }
+ 
+   public void setHref(String href)
+   {
+     setHTMLAttribute("href", href);
+   }
+   
+   public String getHreflang()
+   {
+     return getHTMLAttribute("hreflang");
+   }
+ 
+   public void setHreflang(String hreflang)
+   {
+     setHTMLAttribute("hreflang", hreflang);
+   }
+   
+   public String getMedia()
+   {
+     return getHTMLAttribute("media");
+   }
+ 
+   public void setMedia(String media)
+   {
+     setHTMLAttribute("media", media);
+   }
+   
+   public String getRel()
+   {
+     return getHTMLAttribute("rel");
+   }
+ 
+   public void setRel(String rel)
+   {
+     setHTMLAttribute("rel", rel);
+   }
+   
+   public String getRev()
+   {
+     return getHTMLAttribute("rev");
+   }
+ 
+   public void setRev(String rev)
+   {
+     setHTMLAttribute("rev", rev);
+   }
+   
+   public String getTarget()
+   {
+     return getHTMLAttribute("target");
+   }
+ 
+   public void setTarget(String target)
+   {
+     setHTMLAttribute("target", target);
+   }
+   
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLMapElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLMapElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLMapElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLMapElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* DomHTMLMapElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLCollection;
+ import org.w3c.dom.html2.HTMLMapElement;
+ 
+ /**
+  * An HTML 'MAP' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLMapElement
+   extends DomHTMLElement
+   implements HTMLMapElement
+ {
+ 
+   protected DomHTMLMapElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLCollection getAreas()
+   {
+     DomHTMLCollection ret =
+       new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+     ret.addNodeName("area");
+     ret.evaluate();
+     return ret;
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLMenuElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLMenuElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLMenuElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLMenuElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLMenuElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLMenuElement;
+ 
+ /**
+  * An HTML 'MENU' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLMenuElement
+   extends DomHTMLElement
+   implements HTMLMenuElement
+ {
+ 
+   protected DomHTMLMenuElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public boolean getCompact()
+   {
+     return getBooleanHTMLAttribute("compact");
+   }
+ 
+   public void setCompact(boolean compact)
+   {
+     setBooleanHTMLAttribute("compact", compact);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLMetaElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLMetaElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLMetaElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLMetaElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,99 ----
+ /* DomHTMLMetaElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLMetaElement;
+ 
+ /**
+  * An HTML 'META' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLMetaElement
+   extends DomHTMLElement
+   implements HTMLMetaElement
+ {
+ 
+   protected DomHTMLMetaElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getContent()
+   {
+     return getHTMLAttribute("content");
+   }
+ 
+   public void setContent(String content)
+   {
+     setHTMLAttribute("content", content);
+   }
+   
+   public String getHttpEquiv()
+   {
+     return getHTMLAttribute("http-equiv");
+   }
+ 
+   public void setHttpEquiv(String httpEquiv)
+   {
+     setHTMLAttribute("http-equiv", httpEquiv);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public String getScheme()
+   {
+     return getHTMLAttribute("scheme");
+   }
+ 
+   public void setScheme(String scheme)
+   {
+     setHTMLAttribute("scheme", scheme);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLModElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLModElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLModElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLModElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* DomHTMLModElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLModElement;
+ 
+ /**
+  * An HTML 'INS' or 'DEL' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLModElement
+   extends DomHTMLElement
+   implements HTMLModElement
+ {
+ 
+   protected DomHTMLModElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getCite()
+   {
+     return getHTMLAttribute("cite");
+   }
+ 
+   public void setCite(String cite)
+   {
+     setHTMLAttribute("cite", cite);
+   }
+   
+   public String getDateTime()
+   {
+     return getHTMLAttribute("datetime");
+   }
+ 
+   public void setDateTime(String dateTime)
+   {
+     setHTMLAttribute("datetime", dateTime);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLOListElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLOListElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLOListElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLOListElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* DomHTMLOListElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLOListElement;
+ 
+ /**
+  * An HTML 'OL' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLOListElement
+   extends DomHTMLElement
+   implements HTMLOListElement
+ {
+ 
+   protected DomHTMLOListElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public boolean getCompact()
+   {
+     return getBooleanHTMLAttribute("compact");
+   }
+ 
+   public void setCompact(boolean compact)
+   {
+     setBooleanHTMLAttribute("compact", compact);
+   }
+   
+   public int getStart()
+   {
+     return getIntHTMLAttribute("start");
+   }
+ 
+   public void setStart(int start)
+   {
+     setIntHTMLAttribute("start", start);
+   }
+   
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,242 ----
+ /* DomHTMLObjectElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.html2.HTMLFormElement;
+ import org.w3c.dom.html2.HTMLObjectElement;
+ 
+ /**
+  * An HTML 'OBJECT' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLObjectElement
+   extends DomHTMLElement
+   implements HTMLObjectElement
+ {
+ 
+   protected DomHTMLObjectElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+ 
+   public String getCode()
+   {
+     return getHTMLAttribute("code");
+   }
+ 
+   public void setCode(String code)
+   {
+     setHTMLAttribute("code", code);
+   }
+   
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getArchive()
+   {
+     return getHTMLAttribute("archive");
+   }
+ 
+   public void setArchive(String archive)
+   {
+     setHTMLAttribute("archive", archive);
+   }
+   
+   public String getBorder()
+   {
+     return getHTMLAttribute("border");
+   }
+ 
+   public void setBorder(String border)
+   {
+     setHTMLAttribute("border", border);
+   }
+   
+   public String getCodeBase()
+   {
+     return getHTMLAttribute("codebase");
+   }
+ 
+   public void setCodeBase(String codeBase)
+   {
+     setHTMLAttribute("codebase", codeBase);
+   }
+   
+   public String getCodeType()
+   {
+     return getHTMLAttribute("codetype");
+   }
+ 
+   public void setCodeType(String codeType)
+   {
+     setHTMLAttribute("codetype", codeType);
+   }
+   
+   public String getData()
+   {
+     return getHTMLAttribute("data");
+   }
+ 
+   public void setData(String data)
+   {
+     setHTMLAttribute("data", data);
+   }
+   
+   public boolean getDeclare()
+   {
+     return getBooleanHTMLAttribute("declare");
+   }
+ 
+   public void setDeclare(boolean declare)
+   {
+     setBooleanHTMLAttribute("declare", declare);
+   }
+   
+   public String getHeight()
+   {
+     return getHTMLAttribute("height");
+   }
+ 
+   public void setHeight(String height)
+   {
+     setHTMLAttribute("height", height);
+   }
+   
+   public int getHspace()
+   {
+     return getIntHTMLAttribute("hspace");
+   }
+ 
+   public void setHspace(int hspace)
+   {
+     setIntHTMLAttribute("hspace", hspace);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public String getStandby()
+   {
+     return getHTMLAttribute("standby");
+   }
+ 
+   public void setStandby(String standby)
+   {
+     setHTMLAttribute("standby", standby);
+   }
+   
+   public int getTabIndex()
+   {
+     return getIntHTMLAttribute("tabindex");
+   }
+ 
+   public void setTabIndex(int tabIndex)
+   {
+     setIntHTMLAttribute("tabindex", tabIndex);
+   }
+   
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+   
+   public String getUseMap()
+   {
+     return getHTMLAttribute("usemap");
+   }
+ 
+   public void setUseMap(String useMap)
+   {
+     setHTMLAttribute("usemap", useMap);
+   }
+   
+   public int getVspace()
+   {
+     return getIntHTMLAttribute("vspace");
+   }
+ 
+   public void setVspace(int vspace)
+   {
+     setIntHTMLAttribute("vspace", vspace);
+   }
+   
+   public String getWidth()
+   {
+     return getHTMLAttribute("width");
+   }
+ 
+   public void setWidth(String width)
+   {
+     setHTMLAttribute("width", width);
+   }
+ 
+   public Document getContentDocument()
+   {
+     // TODO getContentDocument
+     return null;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptGroupElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptGroupElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptGroupElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptGroupElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* DomHTMLOptGroupElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLOptGroupElement;
+ 
+ /**
+  * An HTML 'OPTGROUP' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLOptGroupElement
+   extends DomHTMLElement
+   implements HTMLOptGroupElement
+ {
+ 
+   protected DomHTMLOptGroupElement(DomHTMLDocument owner, String namespaceURI,
+                              String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public boolean getDisabled()
+   {
+     return getBooleanHTMLAttribute("disabled");
+   }
+ 
+   public void setDisabled(boolean disabled)
+   {
+     setBooleanHTMLAttribute("disabled", disabled);
+   }
+ 
+   public String getLabel()
+   {
+     return getHTMLAttribute("label");
+   }
+ 
+   public void setLabel(String label)
+   {
+     setHTMLAttribute("label", label);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptionElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptionElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptionElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptionElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,131 ----
+ /* DomHTMLOptionElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLFormElement;
+ import org.w3c.dom.html2.HTMLOptionElement;
+ 
+ /**
+  * An HTML 'OPTION' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLOptionElement
+   extends DomHTMLElement
+   implements HTMLOptionElement
+ {
+ 
+   protected Boolean selected;
+ 
+   protected DomHTMLOptionElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+ 
+   public boolean getDefaultSelected()
+   {
+     return getBooleanHTMLAttribute("selected");
+   }
+ 
+   public void setDefaultSelected(boolean defaultSelected)
+   {
+     setBooleanHTMLAttribute("selected", defaultSelected);
+   }
+ 
+   public String getText()
+   {
+     return getTextContent();
+   }
+ 
+   public int getIndex()
+   {
+     return super.getIndex();
+   }
+   
+   public boolean getDisabled()
+   {
+     return getBooleanHTMLAttribute("disabled");
+   }
+ 
+   public void setDisabled(boolean disabled)
+   {
+     setBooleanHTMLAttribute("disabled", disabled);
+   }
+   
+   public String getLabel()
+   {
+     return getHTMLAttribute("label");
+   }
+ 
+   public void setLabel(String label)
+   {
+     setHTMLAttribute("label", label);
+   }
+   
+   public boolean getSelected()
+   {
+     if (selected == null)
+       {
+         selected = Boolean.valueOf(getDefaultSelected());
+       }
+     return selected.booleanValue();
+   }
+ 
+   public void setSelected(boolean selected)
+   {
+     this.selected = Boolean.valueOf(selected);
+   }
+   
+   public String getValue()
+   {
+     return getHTMLAttribute("value");
+   }
+ 
+   public void setValue(String value)
+   {
+     setHTMLAttribute("value", value);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLParagraphElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLParagraphElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLParagraphElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLParagraphElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLParagraphElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLParagraphElement;
+ 
+ /**
+  * An HTML 'P' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLParagraphElement
+   extends DomHTMLElement
+   implements HTMLParagraphElement
+ {
+ 
+   protected DomHTMLParagraphElement(DomHTMLDocument owner, String namespaceURI,
+                                     String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLParamElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLParamElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLParamElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLParamElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,99 ----
+ /* DomHTMLParamElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLParamElement;
+ 
+ /**
+  * An HTML 'PARAM' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLParamElement
+   extends DomHTMLElement
+   implements HTMLParamElement
+ {
+ 
+   protected DomHTMLParamElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+   
+   public String getValue()
+   {
+     return getHTMLAttribute("value");
+   }
+ 
+   public void setValue(String value)
+   {
+     setHTMLAttribute("value", value);
+   }
+   
+   public String getValueType()
+   {
+     return getHTMLAttribute("valuetype");
+   }
+ 
+   public void setValueType(String valueType)
+   {
+     setHTMLAttribute("valuetype", valueType);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,266 ----
+ /* DomHTMLParser.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.xml.dom.html2;
+ 
+ import gnu.javax.swing.text.html.parser.support.Parser;
+ 
+ import java.io.IOException;
+ import java.io.Reader;
+ 
+ import java.util.Enumeration;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ 
+ import javax.swing.text.AttributeSet;
+ import javax.swing.text.html.HTML;
+ import javax.swing.text.html.parser.DTD;
+ import javax.swing.text.html.parser.TagElement;
+ 
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.html2.HTMLDocument;
+ 
+ /**
+  * This parser reads HTML from the given stream and stores into
+  * {@link HTMLDocument}. The HTML tag becomes the {@link Node}.
+  * The tag attributes become the node attributes. The text inside
+  * HTML tag is inserted as one or several text nodes. The nested
+  * HTML tags are inserted as child nodes.
+  * 
+  * If the strict tree structure, closing the tag means closing all
+  * nested tags. To work around this, this parser closes the nested
+  * tags and immediately reopens them after the closed tag.
+  * In this way, <code>&lt;b&gt;&lt;i&gt;c&lt;/b&gt;d</code> 
+  * is parsed as <code>&lt;b&gt;&lt;i&gt;c&lt;/i&gt;&lt;/b&gt;&lt;i&gt;d</code> .
+  *
+  * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+  */
+ public class DomHTMLParser
+   extends gnu.javax.swing.text.html.parser.support.Parser
+ {
+   /**
+    * The target where HTML document will be inserted.
+    */
+   protected DomHTMLDocument document;
+ 
+   /**
+    * The subsequently created new nodes will be inserted as the
+    * childs of this cursor.
+    */
+   protected Node cursor;
+ 
+   /**
+    * Create parser using the given DTD.
+    *
+    * @param dtd the DTD (for example,
+    * {@link gnu.javax.swing.text.html.parser.HTML_401F}).
+    */
+   public DomHTMLParser(DTD dtd)
+   {
+     super(dtd);
+   }
+ 
+   /**
+    * Parse SGML insertion ( &lt;! ... &gt; ).
+    * Currently just treats it as comment.
+    */
+   public boolean parseMarkupDeclarations(StringBuffer strBuff)
+                                   throws java.io.IOException
+   {
+     Node c = document.createComment(strBuff.toString());
+     cursor.appendChild(c);
+     return false;
+   }
+ 
+   /**
+    * Read the document, present in the given stream, and
+    * return the corresponding {@link HTMLDocument}.
+    *
+    * @param input a stream to read from.
+    * @return a document, reflecting the structure of the provided HTML
+    * text.
+    *
+    * @throws IOException if the reader throws one.
+    */
+   public HTMLDocument parseDocument(Reader input)
+                     throws IOException
+   {
+     try
+       {
+         document = new DomHTMLDocument();
+ 
+         cursor = document;
+ 
+         parse(input);
+ 
+         DomHTMLDocument h = document;
+         document = null;
+         return h;
+       }
+     catch (Exception ex)
+       {
+         ex.printStackTrace();
+         throw new IOException("Exception: " + ex.getMessage());
+       }
+   }
+   
+   /**
+    * Create a new node.
+    * @param name the name of node, case insensitive.
+    * @return the created node.
+    */
+   protected Node createNode(String name)
+   {
+     Node new_node = document.createElement(name.toLowerCase());
+     AttributeSet hatts = getAttributes();
+     NamedNodeMap natts = new_node.getAttributes();
+ 
+     Enumeration enumeration = hatts.getAttributeNames();
+     Object key;
+     Node attribute;
+ 
+     while (hatts != null)
+       {
+         while (enumeration.hasMoreElements())
+           {
+             key = enumeration.nextElement();
+             attribute = document.createAttribute(key.toString());
+             attribute.setNodeValue(hatts.getAttribute(key).toString());
+             natts.setNamedItem(attribute);
+           }
+ 
+         // The default values are stored in a parent node. 
+         hatts = hatts.getResolveParent();
+       }
+ 
+     return new_node;
+   }
+   
+   /**
+    * Handle comment by inserting the comment node.
+    * @param text the comment text.
+    */
+   protected void handleComment(char[] text)
+   {
+     Node c = document.createComment(new String(text));
+     cursor.appendChild(c);
+   }
+   
+   /**
+    * Handle the tag with no content.
+    * @param tag the tag to handle.
+    */
+   protected void handleEmptyTag(TagElement tag)
+   {
+     String name = tag.getHTMLTag().toString();
+ 
+     if (name.equalsIgnoreCase("#pcdata"))
+       return;
+ 
+     Node c = createNode(name);
+     cursor.appendChild(c);
+   }
+   
+   /**
+    * Close the given tag. Close and reopen all nested tags.
+    * @param tag the tag to close.
+    */
+   protected void handleEndTag(TagElement tag)
+   {
+     String name = tag.getHTMLTag().toString();
+     String nname = cursor.getNodeName();
+ 
+     // Closing the current tag.
+     if (nname != null && nname.equalsIgnoreCase(name))
+       {
+         cursor = cursor.getParentNode();
+       }
+     else
+       {
+         Node nCursor = cursor.getParentNode();
+ 
+         // Remember the opened nodes.
+         LinkedList open = new LinkedList();
+         Node close = cursor;
+         while (close != null && !close.getNodeName().equalsIgnoreCase(name))
+           {
+             if (close != document)
+               open.addFirst(close);
+             close = close.getParentNode();
+           }
+ 
+         if (close == null)
+           cursor = document;
+         else
+           cursor = close.getParentNode();
+ 
+         // Insert the copies of the opened nodes.   
+         Iterator iter = open.iterator();
+         while (iter.hasNext())
+           {
+             Node item = (Node) iter.next();
+             Node copy = item.cloneNode(true);
+             cursor.appendChild(copy);
+             cursor = copy;
+           }
+       }
+   }
+ 
+   /**
+    * Handle the start tag by inserting the HTML element.
+    * @param tag the tag to handle.
+    */
+   protected void handleStartTag(TagElement tag)
+   {
+     HTML.Tag h = tag.getHTMLTag();
+     Node c = createNode(h.toString());
+     cursor.appendChild(c);
+     cursor = c;
+   }
+   
+   /**
+    * Handle text by inserting the text node.
+    * @param text the text to insert.
+    */
+   protected void handleText(char[] text)
+   {
+     Node c = document.createTextNode(text, 0, text.length);
+     cursor.appendChild(c);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLPreElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLPreElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLPreElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLPreElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLPreElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLPreElement;
+ 
+ /**
+  * An HTML 'PRE' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLPreElement
+   extends DomHTMLElement
+   implements HTMLPreElement
+ {
+ 
+   protected DomHTMLPreElement(DomHTMLDocument owner, String namespaceURI,
+                              String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public int getWidth()
+   {
+     return getIntHTMLAttribute("width");
+   }
+ 
+   public void setWidth(int width)
+   {
+     setIntHTMLAttribute("width", width);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLQuoteElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLQuoteElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLQuoteElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLQuoteElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLQuoteElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLQuoteElement;
+ 
+ /**
+  * An HTML 'Q' or 'BLOCKQUOTE' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLQuoteElement
+   extends DomHTMLElement
+   implements HTMLQuoteElement
+ {
+ 
+   protected DomHTMLQuoteElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getCite()
+   {
+     return getHTMLAttribute("cite");
+   }
+ 
+   public void setCite(String cite)
+   {
+     setHTMLAttribute("cite", cite);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLScriptElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLScriptElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLScriptElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLScriptElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,129 ----
+ /* DomHTMLScriptElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLScriptElement;
+ 
+ /**
+  * An HTML 'SCRIPT' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLScriptElement
+   extends DomHTMLElement
+   implements HTMLScriptElement
+ {
+ 
+   protected DomHTMLScriptElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getText()
+   {
+     return getTextContent();
+   }
+ 
+   public void setText(String text)
+   {
+     setTextContent(text);
+   }
+ 
+   public String getHtmlFor()
+   {
+     return getHTMLAttribute("for");
+   }
+ 
+   public void setHtmlFor(String htmlFor)
+   {
+     setHTMLAttribute("for", htmlFor);
+   }
+ 
+   public String getEvent()
+   {
+     return getHTMLAttribute("event");
+   }
+ 
+   public void setEvent(String event)
+   {
+     setHTMLAttribute("event", event);
+   }
+ 
+   public String getCharset()
+   {
+     return getHTMLAttribute("charset");
+   }
+ 
+   public void setCharset(String charset)
+   {
+     setHTMLAttribute("charset", charset);
+   }
+ 
+   public boolean getDefer()
+   {
+     return getBooleanHTMLAttribute("defer");
+   }
+ 
+   public void setDefer(boolean defer)
+   {
+     setBooleanHTMLAttribute("defer", defer);
+   }
+ 
+   public String getSrc()
+   {
+     return getHTMLAttribute("src");
+   }
+ 
+   public void setSrc(String src)
+   {
+     setHTMLAttribute("src", src);
+   }
+ 
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLSelectElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLSelectElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLSelectElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLSelectElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,211 ----
+ /* DomHTMLSelectElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import gnu.xml.dom.DomDOMException;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.html2.HTMLElement;
+ import org.w3c.dom.html2.HTMLFormElement;
+ import org.w3c.dom.html2.HTMLOptionElement;
+ import org.w3c.dom.html2.HTMLOptionsCollection;
+ import org.w3c.dom.html2.HTMLSelectElement;
+ 
+ /**
+  * An HTML 'SELECT' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLSelectElement
+   extends DomHTMLElement
+   implements HTMLSelectElement
+ {
+ 
+   protected DomHTMLSelectElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+   
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public int getSelectedIndex()
+   {
+     HTMLOptionsCollection options = getOptions();
+     int len = options.getLength();
+     for (int i = 0; i < len; i++)
+       {
+         HTMLOptionElement option = (HTMLOptionElement) options.item(i);
+         if (option.getSelected())
+           {
+             return i;
+           }
+       }
+     return -1;
+   }
+ 
+   public void setSelectedIndex(int selectedIndex)
+   {
+     HTMLOptionsCollection options = getOptions();
+     int len = options.getLength();
+     if (selectedIndex < 0 || selectedIndex >= len)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+     for (int i = 0; i < len; i++)
+       {
+         HTMLOptionElement option = (HTMLOptionElement) options.item(i);
+         option.setSelected(i == selectedIndex);
+       }
+   }
+   
+   public String getValue()
+   {
+     return getHTMLAttribute("value");
+   }
+ 
+   public void setValue(String value)
+   {
+     setHTMLAttribute("value", value);
+   }
+   
+   public int getLength()
+   {
+     return getIntHTMLAttribute("length");
+   }
+ 
+   public void setLength(int length)
+   {
+     setIntHTMLAttribute("length", length);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+ 
+   public HTMLOptionsCollection getOptions()
+   {
+     DomHTMLCollection ret =
+       new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+     ret.addNodeName("option");
+     ret.evaluate();
+     return ret;
+   }
+   
+   public boolean getDisabled()
+   {
+     return getBooleanHTMLAttribute("disabled");
+   }
+ 
+   public void setDisabled(boolean disabled)
+   {
+     setBooleanHTMLAttribute("disabled", disabled);
+   }
+   
+   public boolean getMultiple()
+   {
+     return getBooleanHTMLAttribute("multiple");
+   }
+ 
+   public void setMultiple(boolean multiple)
+   {
+     setBooleanHTMLAttribute("multiple", multiple);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public int getSize()
+   {
+     return getIntHTMLAttribute("size");
+   }
+ 
+   public void setSize(int size)
+   {
+     setIntHTMLAttribute("size", size);
+   }
+   
+   public int getTabIndex()
+   {
+     return getIntHTMLAttribute("tabindex");
+   }
+ 
+   public void setTabIndex(int tabIndex)
+   {
+     setIntHTMLAttribute("tabindex", tabIndex);
+   }
+ 
+   public void add(HTMLElement element, HTMLElement before)
+   {
+     insertBefore(before, element);
+   }
+ 
+   public void remove(int index)
+   {
+     HTMLOptionsCollection options = getOptions();
+     int len = options.getLength();
+     if (index < 0 || index >= len)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+     HTMLOptionElement option = (HTMLOptionElement) options.item(index);
+     option.getParentNode().removeChild(option);
+   }
+ 
+   public void blur()
+   {
+     dispatchUIEvent("blur");
+   }
+ 
+   public void focus()
+   {
+     dispatchUIEvent("focus");
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLStyleElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLStyleElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLStyleElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLStyleElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* DomHTMLStyleElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLStyleElement;
+ 
+ /**
+  * An HTML 'STYLE' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLStyleElement
+   extends DomHTMLElement
+   implements HTMLStyleElement
+ {
+ 
+   protected DomHTMLStyleElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public boolean getDisabled()
+   {
+     return getBooleanHTMLAttribute("disabled");
+   }
+ 
+   public void setDisabled(boolean disabled)
+   {
+     setBooleanHTMLAttribute("disabled", disabled);
+   }
+   
+   public String getMedia()
+   {
+     return getHTMLAttribute("media");
+   }
+ 
+   public void setMedia(String media)
+   {
+     setHTMLAttribute("media", media);
+   }
+   
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* DomHTMLTableCaptionElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLTableCaptionElement;
+ 
+ /**
+  * An HTML 'CAPTION' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLTableCaptionElement
+   extends DomHTMLElement
+   implements HTMLTableCaptionElement
+ {
+ 
+   protected DomHTMLTableCaptionElement(DomHTMLDocument owner,
+                                        String namespaceURI,
+                                        String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCellElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCellElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCellElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCellElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,205 ----
+ /* DomHTMLTableCellElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLTableCellElement;
+ 
+ /**
+  * An HTML 'TH' or 'TD' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLTableCellElement
+   extends DomHTMLElement
+   implements HTMLTableCellElement
+ {
+ 
+   protected DomHTMLTableCellElement(DomHTMLDocument owner,
+                                     String namespaceURI,
+                                     String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public int getCellIndex()
+   {
+     return getIndex();
+   }
+ 
+   public String getAbbr()
+   {
+     return getHTMLAttribute("abbr");
+   }
+ 
+   public void setAbbr(String abbr)
+   {
+     setHTMLAttribute("abbr", abbr);
+   }
+   
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getAxis()
+   {
+     return getHTMLAttribute("axis");
+   }
+ 
+   public void setAxis(String axis)
+   {
+     setHTMLAttribute("axis", axis);
+   }
+   
+   public String getBgColor()
+   {
+     return getHTMLAttribute("bgcolor");
+   }
+ 
+   public void setBgColor(String bgColor)
+   {
+     setHTMLAttribute("bgcolor", bgColor);
+   }
+   
+   public String getCh()
+   {
+     return getHTMLAttribute("char");
+   }
+ 
+   public void setCh(String ch)
+   {
+     setHTMLAttribute("char", ch);
+   }
+   
+   public String getChOff()
+   {
+     return getHTMLAttribute("charoff");
+   }
+ 
+   public void setChOff(String chOff)
+   {
+     setHTMLAttribute("charoff", chOff);
+   }
+   
+   public int getColSpan()
+   {
+     return getIntHTMLAttribute("colspan");
+   }
+ 
+   public void setColSpan(int colSpan)
+   {
+     setIntHTMLAttribute("colspan", colSpan);
+   }
+   
+   public String getHeaders()
+   {
+     return getHTMLAttribute("headers");
+   }
+ 
+   public void setHeaders(String headers)
+   {
+     setHTMLAttribute("headers", headers);
+   }
+   
+   public String getHeight()
+   {
+     return getHTMLAttribute("height");
+   }
+ 
+   public void setHeight(String height)
+   {
+     setHTMLAttribute("height", height);
+   }
+   
+   public boolean getNoWrap()
+   {
+     return getBooleanHTMLAttribute("nowrap");
+   }
+ 
+   public void setNoWrap(boolean noWrap)
+   {
+     setBooleanHTMLAttribute("nowrap", noWrap);
+   }
+   
+   public int getRowSpan()
+   {
+     return getIntHTMLAttribute("rowspan");
+   }
+ 
+   public void setRowSpan(int rowSpan)
+   {
+     setIntHTMLAttribute("rowspan", rowSpan);
+   }
+   
+   public String getScope()
+   {
+     return getHTMLAttribute("scope");
+   }
+ 
+   public void setScope(String scope)
+   {
+     setHTMLAttribute("scope", scope);
+   }
+   
+   public String getVAlign()
+   {
+     return getHTMLAttribute("valign");
+   }
+ 
+   public void setVAlign(String vAlign)
+   {
+     setHTMLAttribute("valign", vAlign);
+   }
+   
+   public String getWidth()
+   {
+     return getHTMLAttribute("width");
+   }
+ 
+   public void setWidth(String width)
+   {
+     setHTMLAttribute("width", width);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableColElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableColElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableColElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableColElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,120 ----
+ /* DomHTMLTableColElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLTableColElement;
+ 
+ /**
+  * An HTML 'COL' or 'COLGROUP' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLTableColElement
+   extends DomHTMLElement
+   implements HTMLTableColElement
+ {
+ 
+   protected DomHTMLTableColElement(DomHTMLDocument owner,
+                                    String namespaceURI,
+                                    String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getCh()
+   {
+     return getHTMLAttribute("char");
+   }
+ 
+   public void setCh(String ch)
+   {
+     setHTMLAttribute("char", ch);
+   }
+   
+   public String getChOff()
+   {
+     return getHTMLAttribute("charoff");
+   }
+ 
+   public void setChOff(String chOff)
+   {
+     setHTMLAttribute("charoff", chOff);
+   }
+   
+   public int getSpan()
+   {
+     return getIntHTMLAttribute("span");
+   }
+ 
+   public void setSpan(int span)
+   {
+     setIntHTMLAttribute("span", span);
+   }
+   
+   public String getVAlign()
+   {
+     return getHTMLAttribute("valign");
+   }
+ 
+   public void setVAlign(String vAlign)
+   {
+     setHTMLAttribute("valign", vAlign);
+   }
+   
+   public String getWidth()
+   {
+     return getHTMLAttribute("width");
+   }
+ 
+   public void setWidth(String width)
+   {
+     setHTMLAttribute("width", width);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,398 ----
+ /* DomHTMLTableElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import gnu.xml.dom.DomDOMException;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.html2.HTMLCollection;
+ import org.w3c.dom.html2.HTMLElement;
+ import org.w3c.dom.html2.HTMLTableCaptionElement;
+ import org.w3c.dom.html2.HTMLTableElement;
+ import org.w3c.dom.html2.HTMLTableSectionElement;
+ 
+ /**
+  * An HTML 'TABLE' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLTableElement
+   extends DomHTMLElement
+   implements HTMLTableElement
+ {
+ 
+   protected DomHTMLTableElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public HTMLTableCaptionElement getCaption()
+   {
+     return (HTMLTableCaptionElement) getChildElement("caption");
+   }
+ 
+   public void setCaption(HTMLTableCaptionElement caption)
+   {
+     HTMLTableCaptionElement ref = getCaption();
+     if (ref == null)
+       {
+         appendChild(caption);
+       }
+     else
+       {
+         replaceChild(caption, ref);
+       }
+   }
+   
+   public HTMLTableSectionElement getTHead()
+   {
+     return (HTMLTableSectionElement) getChildElement("thead");
+   }
+ 
+   public void setTHead(HTMLTableSectionElement tHead)
+   {
+     HTMLTableSectionElement ref = getTHead();
+     if (ref == null)
+       {
+         appendChild(tHead);
+       }
+     else
+       {
+         replaceChild(tHead, ref);
+       }
+   }
+ 
+   public HTMLTableSectionElement getTFoot()
+   {
+     return (HTMLTableSectionElement) getChildElement("tfoot");
+   }
+ 
+   public void setTFoot(HTMLTableSectionElement tFoot)
+   {
+     HTMLTableSectionElement ref = getTFoot();
+     if (ref == null)
+       {
+         appendChild(tFoot);
+       }
+     else
+       {
+         replaceChild(tFoot, ref);
+       }
+   }
+ 
+   public HTMLCollection getRows()
+   {
+     DomHTMLCollection ret =
+       new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+     ret.addNodeName("tr");
+     ret.evaluate();
+     return ret;
+   }
+ 
+   public HTMLCollection getTBodies()
+   {
+     DomHTMLCollection ret =
+       new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+     ret.addNodeName("tbody");
+     ret.evaluate();
+     return ret;
+   }
+   
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getBgColor()
+   {
+     return getHTMLAttribute("bgcolor");
+   }
+ 
+   public void setBgColor(String bgColor)
+   {
+     setHTMLAttribute("bgcolor", bgColor);
+   }
+   
+   public String getBorder()
+   {
+     return getHTMLAttribute("border");
+   }
+ 
+   public void setBorder(String border)
+   {
+     setHTMLAttribute("border", border);
+   }
+   
+   public String getCellPadding()
+   {
+     return getHTMLAttribute("cellpadding");
+   }
+ 
+   public void setCellPadding(String cellPadding)
+   {
+     setHTMLAttribute("cellpadding", cellPadding);
+   }
+   
+   public String getCellSpacing()
+   {
+     return getHTMLAttribute("cellspacing");
+   }
+ 
+   public void setCellSpacing(String cellSpacing)
+   {
+     setHTMLAttribute("cellspacing", cellSpacing);
+   }
+   
+   public String getFrame()
+   {
+     return getHTMLAttribute("frame");
+   }
+ 
+   public void setFrame(String frame)
+   {
+     setHTMLAttribute("frame", frame);
+   }
+   
+   public String getRules()
+   {
+     return getHTMLAttribute("rules");
+   }
+ 
+   public void setRules(String rules)
+   {
+     setHTMLAttribute("rules", rules);
+   }
+   
+   public String getSummary()
+   {
+     return getHTMLAttribute("summary");
+   }
+ 
+   public void setSummary(String summary)
+   {
+     setHTMLAttribute("summary", summary);
+   }
+   
+   public String getWidth()
+   {
+     return getHTMLAttribute("width");
+   }
+ 
+   public void setWidth(String width)
+   {
+     setHTMLAttribute("width", width);
+   }
+ 
+   public HTMLElement createTHead()
+   {
+     HTMLTableSectionElement ref = getTHead();
+     if (ref == null)
+       {
+         return (HTMLElement) getOwnerDocument().createElement("thead");
+       }
+     else
+       {
+         return ref;
+       }
+   }
+ 
+   public void deleteTHead()
+   {
+     HTMLTableSectionElement ref = getTHead();
+     if (ref != null)
+       {
+         removeChild(ref);
+       }
+   }
+ 
+   public HTMLElement createTFoot()
+   {
+     HTMLTableSectionElement ref = getTFoot();
+     if (ref == null)
+       {
+         return (HTMLElement) getOwnerDocument().createElement("tfoot");
+       }
+     else
+       {
+         return ref;
+       }
+   }
+ 
+   public void deleteTFoot()
+   {
+     HTMLTableSectionElement ref = getTFoot();
+     if (ref != null)
+       {
+         removeChild(ref);
+       }
+   }
+ 
+   public HTMLElement createCaption()
+   {
+     HTMLTableCaptionElement ref = getCaption();
+     if (ref == null)
+       {
+         return (HTMLElement) getOwnerDocument().createElement("caption");
+       }
+     else
+       {
+         return ref;
+       }
+   }
+ 
+   public void deleteCaption()
+   {
+     HTMLTableCaptionElement ref = getCaption();
+     if (ref != null)
+       {
+         removeChild(ref);
+       }
+   }
+ 
+   public HTMLElement insertRow(int index)
+   {
+     Node ref = getRow(index);
+     Node row = getOwnerDocument().createElement("tr");
+     if (ref == null)
+       {
+         Node tbody = getChildElement("tbody");
+         if (tbody == null)
+           {
+             tbody = getOwnerDocument().createElement("tfoot");
+             appendChild(tbody);
+           }
+         tbody.appendChild(row);
+       }
+     else
+       {
+         ref.getParentNode().insertBefore(row, ref);
+       }
+     return (HTMLElement) row;
+   }
+ 
+   public void deleteRow(int index)
+   {
+     Node ref = getRow(index);
+     if (ref == null)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+     ref.getParentNode().removeChild(ref);
+   }
+  
+   Node getRow(final int index)
+   { 
+     int i = 0;
+     Node thead = getChildElement("thead");
+     if (thead != null)
+       {
+         for (Node ctx = thead.getFirstChild(); ctx != null;
+              ctx = ctx.getNextSibling())
+           {
+             String ctxName = ctx.getLocalName();
+             if (ctxName == null)
+               {
+                 ctxName = ctx.getNodeName();
+               }
+             if (!"tr".equalsIgnoreCase(ctxName))
+               {
+                 continue;
+               }
+             if (index == i)
+               {
+                 return ctx;
+               }
+             i++;
+           }
+       }
+     Node tbody = getChildElement("tbody");
+     if (tbody == null)
+       {
+         tbody = this;
+       }
+     for (Node ctx = tbody.getFirstChild(); ctx != null;
+          ctx = ctx.getNextSibling())
+       {
+         String ctxName = ctx.getLocalName();
+         if (ctxName == null)
+           {
+             ctxName = ctx.getNodeName();
+           }
+         if (!"tr".equalsIgnoreCase(ctxName))
+           {
+             continue;
+           }
+         if (index == i)
+           {
+             return ctx;
+           }
+         i++;
+       }
+     Node tfoot = getChildElement("tfoot");
+     if (tfoot != null)
+       {
+         for (Node ctx = tfoot.getFirstChild(); ctx != null;
+              ctx = ctx.getNextSibling())
+           {
+             String ctxName = ctx.getLocalName();
+             if (ctxName == null)
+               {
+                 ctxName = ctx.getNodeName();
+               }
+             if (!"tr".equalsIgnoreCase(ctxName))
+               {
+                 continue;
+               }
+             if (index == i)
+               {
+                 return ctx;
+               }
+             i++;
+           }
+       }
+     return null;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableRowElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableRowElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableRowElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableRowElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,229 ----
+ /* DomHTMLTableRowElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import gnu.xml.dom.DomDOMException;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.html2.HTMLCollection;
+ import org.w3c.dom.html2.HTMLElement;
+ import org.w3c.dom.html2.HTMLTableRowElement;
+ 
+ /**
+  * An HTML 'TR' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLTableRowElement
+   extends DomHTMLElement
+   implements HTMLTableRowElement
+ {
+ 
+   protected DomHTMLTableRowElement(DomHTMLDocument owner,
+                                    String namespaceURI,
+                                    String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public int getRowIndex()
+   {
+     return getIndex();
+   }
+ 
+   public int getSectionRowIndex()
+   {
+     int index = 0;
+     DomHTMLElement parent = (DomHTMLElement) getParentElement("table");
+     if (parent != null)
+       {
+         Node thead = parent.getChildElement("thead");
+         if (thead != null)
+           {
+             for (Node ctx = thead.getFirstChild(); ctx != null;
+                  ctx = ctx.getNextSibling())
+               {
+                 if (ctx == this)
+                   {
+                     return index;
+                   }
+                 index++;
+               }
+           }
+         Node tbody = parent.getChildElement("tbody");
+         if (tbody != null)
+           {
+             for (Node ctx = tbody.getFirstChild(); ctx != null;
+                  ctx = ctx.getNextSibling())
+               {
+                 if (ctx == this)
+                   {
+                     return index;
+                   }
+                 index++;
+               }
+           }
+         Node tfoot = parent.getChildElement("tfoot");
+         if (tfoot != null)
+           {
+             for (Node ctx = tfoot.getFirstChild(); ctx != null;
+                  ctx = ctx.getNextSibling())
+               {
+                 if (ctx == this)
+                   {
+                     return index;
+                   }
+                 index++;
+               }
+           }
+       }
+     throw new DomDOMException(DOMException.NOT_FOUND_ERR);
+   }
+ 
+   public HTMLCollection getCells()
+   {
+     DomHTMLCollection ret =
+       new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+     ret.addNodeName("th");
+     ret.addNodeName("td");
+     ret.evaluate();
+     return ret;
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getBgColor()
+   {
+     return getHTMLAttribute("bgcolor");
+   }
+ 
+   public void setBgColor(String bgColor)
+   {
+     setHTMLAttribute("bgcolor", bgColor);
+   }
+   
+   public String getCh()
+   {
+     return getHTMLAttribute("char");
+   }
+ 
+   public void setCh(String ch)
+   {
+     setHTMLAttribute("char", ch);
+   }
+   
+   public String getChOff()
+   {
+     return getHTMLAttribute("charoff");
+   }
+ 
+   public void setChOff(String chOff)
+   {
+     setHTMLAttribute("charoff", chOff);
+   }
+   
+   public String getVAlign()
+   {
+     return getHTMLAttribute("valign");
+   }
+ 
+   public void setVAlign(String vAlign)
+   {
+     setHTMLAttribute("valign", vAlign);
+   }
+ 
+   public HTMLElement insertCell(int index)
+   {
+     Node ref = getCell(index);
+     Node cell = getOwnerDocument().createElement("td");
+     if (ref == null)
+       {
+         appendChild(cell);
+       }
+     else
+       {
+         insertBefore(cell, ref);
+       }
+     return (HTMLElement) cell;
+   }
+ 
+   public void deleteCell(int index)
+   {
+     Node ref = getCell(index);
+     if (ref == null)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+     removeChild(ref);
+   }
+   
+   Node getCell(final int index)
+   { 
+     int i = 0;
+     for (Node ctx = getFirstChild(); ctx != null;
+          ctx = ctx.getNextSibling())
+       {
+         String name = ctx.getLocalName();
+         if (name == null)
+           {
+             name = ctx.getNodeName();
+           }
+         if (!"td".equalsIgnoreCase(name) &&
+             !"th".equalsIgnoreCase(name))
+           {
+             continue;
+           }
+         if (index == i)
+           {
+             return ctx;
+           }
+         i++;
+       }
+     return null;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableSectionElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableSectionElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableSectionElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableSectionElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,163 ----
+ /* DomHTMLTableSectionElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import gnu.xml.dom.DomDOMException;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.html2.HTMLCollection;
+ import org.w3c.dom.html2.HTMLElement;
+ import org.w3c.dom.html2.HTMLTableSectionElement;
+ 
+ /**
+  * An HTML 'THEAD', 'TFOOT', or 'TBODY' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLTableSectionElement
+   extends DomHTMLElement
+   implements HTMLTableSectionElement
+ {
+ 
+   protected DomHTMLTableSectionElement(DomHTMLDocument owner,
+                                        String namespaceURI,
+                                        String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getAlign()
+   {
+     return getHTMLAttribute("align");
+   }
+ 
+   public void setAlign(String align)
+   {
+     setHTMLAttribute("align", align);
+   }
+   
+   public String getCh()
+   {
+     return getHTMLAttribute("char");
+   }
+ 
+   public void setCh(String ch)
+   {
+     setHTMLAttribute("char", ch);
+   }
+   
+   public String getChOff()
+   {
+     return getHTMLAttribute("charoff");
+   }
+ 
+   public void setChOff(String chOff)
+   {
+     setHTMLAttribute("charoff", chOff);
+   }
+   
+   public String getVAlign()
+   {
+     return getHTMLAttribute("valign");
+   }
+ 
+   public void setVAlign(String vAlign)
+   {
+     setHTMLAttribute("valign", vAlign);
+   }
+ 
+   public HTMLCollection getRows()
+   {
+     DomHTMLCollection ret =
+       new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+     ret.addNodeName("tr");
+     ret.evaluate();
+     return ret;
+   }
+ 
+   public HTMLElement insertRow(int index)
+   {
+     Node ref = getRow(index);
+     Node row = getOwnerDocument().createElement("tr");
+     if (ref == null)
+       {
+         appendChild(row);
+       }
+     else
+       {
+         insertBefore(row, ref);
+       }
+     return (HTMLElement) row;
+   }
+ 
+   public void deleteRow(int index)
+   {
+     Node ref = getRow(index);
+     if (ref == null)
+       {
+         throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+       }
+     removeChild(ref);
+   }
+   
+   Node getRow(final int index)
+   { 
+     int i = 0;
+     for (Node ctx = getFirstChild(); ctx != null;
+          ctx = ctx.getNextSibling())
+       {
+         String name = ctx.getLocalName();
+         if (name == null)
+           {
+             name = ctx.getNodeName();
+           }
+         if (!"tr".equalsIgnoreCase(name))
+           {
+             continue;
+           }
+         if (index == i)
+           {
+             return ctx;
+           }
+         i++;
+       }
+     return null;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTextAreaElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTextAreaElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTextAreaElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTextAreaElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,182 ----
+ /* DomHTMLTextAreaElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLFormElement;
+ import org.w3c.dom.html2.HTMLTextAreaElement;
+ 
+ /**
+  * An HTML 'TEXTAREA' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLTextAreaElement
+   extends DomHTMLElement
+   implements HTMLTextAreaElement
+ {
+ 
+   protected String value;
+ 
+   protected DomHTMLTextAreaElement(DomHTMLDocument owner,
+                                    String namespaceURI,
+                                    String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getDefaultValue()
+   {
+     return getHTMLAttribute("value");
+   }
+ 
+   public void setDefaultValue(String defaultValue)
+   {
+     setHTMLAttribute("value", defaultValue);
+   }
+ 
+   public HTMLFormElement getForm()
+   {
+     return (HTMLFormElement) getParentElement("form");
+   }
+   
+   public String getAccessKey()
+   {
+     return getHTMLAttribute("accesskey");
+   }
+ 
+   public void setAccessKey(String accessKey)
+   {
+     setHTMLAttribute("accesskey", accessKey);
+   }
+   
+   public int getCols()
+   {
+     return getIntHTMLAttribute("cols");
+   }
+ 
+   public void setCols(int cols)
+   {
+     setIntHTMLAttribute("cols", cols);
+   }
+   
+   public boolean getDisabled()
+   {
+     return getBooleanHTMLAttribute("disabled");
+   }
+ 
+   public void setDisabled(boolean disabled)
+   {
+     setBooleanHTMLAttribute("disabled", disabled);
+   }
+   
+   public String getName()
+   {
+     return getHTMLAttribute("name");
+   }
+ 
+   public void setName(String name)
+   {
+     setHTMLAttribute("name", name);
+   }
+   
+   public boolean getReadOnly()
+   {
+     return getBooleanHTMLAttribute("readOnly");
+   }
+ 
+   public void setReadOnly(boolean readOnly)
+   {
+     setBooleanHTMLAttribute("readonly", readOnly);
+   }
+   
+   public int getRows()
+   {
+     return getIntHTMLAttribute("rows");
+   }
+ 
+   public void setRows(int rows)
+   {
+     setIntHTMLAttribute("rows", rows);
+   }
+   
+   public int getTabIndex()
+   {
+     return getIntHTMLAttribute("tabindex");
+   }
+ 
+   public void setTabIndex(int tabIndex)
+   {
+     setIntHTMLAttribute("tabindex", tabIndex);
+   }
+   
+   public String getType()
+   {
+     return "textarea";
+   }
+ 
+   public String getValue()
+   {
+     if (value == null)
+       {
+         value = getDefaultValue();
+       }
+     return value;
+   }
+ 
+   public void setValue(String value)
+   {
+     this.value = value;
+   }
+ 
+   public void blur()
+   {
+     dispatchUIEvent("blur");
+   }
+ 
+   public void focus()
+   {
+     dispatchUIEvent("focus");
+   }
+   
+   public void select()
+   {
+     dispatchUIEvent("select");
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTitleElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTitleElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLTitleElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLTitleElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* DomHTMLTitleElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLTitleElement;
+ 
+ /**
+  * An HTML 'TITLE' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLTitleElement
+   extends DomHTMLElement
+   implements HTMLTitleElement
+ {
+ 
+   protected DomHTMLTitleElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public String getText()
+   {
+     return getTextContent();
+   }
+ 
+   public void setText(String text)
+   {
+     setTextContent(text);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLUListElement.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLUListElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/html2/DomHTMLUListElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/html2/DomHTMLUListElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* DomHTMLUListElement.java -- 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.html2;
+ 
+ import org.w3c.dom.html2.HTMLUListElement;
+ 
+ /**
+  * An HTML 'UL' element node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomHTMLUListElement
+   extends DomHTMLElement
+   implements HTMLUListElement
+ {
+ 
+   protected DomHTMLUListElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+   {
+     super(owner, namespaceURI, name);
+   }
+ 
+   public boolean getCompact()
+   {
+     return getBooleanHTMLAttribute("compact");
+   }
+ 
+   public void setCompact(boolean compact)
+   {
+     setBooleanHTMLAttribute("compact", compact);
+   }
+   
+   public String getType()
+   {
+     return getHTMLAttribute("type");
+   }
+ 
+   public void setType(String type)
+   {
+     setHTMLAttribute("type", type);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSException.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSException.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* DomLSException.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.ls;
+ 
+ import org.w3c.dom.ls.LSException;
+ 
+ /**
+  * A DOM LS exception incorporating a cause.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomLSException
+   extends LSException
+ {
+ 
+   public DomLSException(short type, Exception cause)
+   {
+     super(type, (cause == null) ? null : cause.getMessage());
+     initCause(cause);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSInput.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSInput.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSInput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,158 ----
+ /* DomLSInput.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.ls;
+ 
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.IOException;
+ import java.io.Reader;
+ import java.io.StringReader;
+ import org.w3c.dom.ls.LSInput;
+ 
+ /**
+  * Specification of XML input to parse.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomLSInput
+   implements LSInput
+ {
+ 
+   private InputStream in;
+   private String systemId;
+   private String publicId;
+   private String baseURI;
+   private String encoding;
+   private boolean certifiedText;
+ 
+   public Reader getCharacterStream()
+   {
+     return new InputStreamReader(in);
+   }
+ 
+   public void setCharacterStream(Reader characterStream)
+   {
+     in = new ReaderInputStream(characterStream);
+   }
+ 
+   public InputStream getByteStream()
+   {
+     return in;
+   }
+ 
+   public void setByteStream(InputStream byteStream)
+   {
+     in = byteStream;
+   }
+ 
+   public String getStringData()
+   {
+     StringBuffer acc = new StringBuffer();
+     Reader reader = getCharacterStream();
+     try
+       {
+         char[] buf = new char[4096];
+         for (int len = reader.read(buf); len != -1; len = reader.read(buf))
+           {
+             acc.append(buf, 0, len);
+           }
+       }
+     catch (IOException e)
+       {
+         return null; // ?
+       }
+     return acc.toString();
+   }
+ 
+   public void setStringData(String stringData)
+   {
+     in = new ReaderInputStream(new StringReader(stringData));
+   }
+ 
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+   public void setSystemId(String systemId)
+   {
+     this.systemId = systemId;
+   }
+ 
+   public String getPublicId()
+   {
+     return publicId;
+   }
+ 
+   public void setPublicId(String publicId)
+   {
+     this.publicId = publicId;
+   }
+ 
+   public String getBaseURI()
+   {
+     return baseURI;
+   }
+ 
+   public void setBaseURI(String baseURI)
+   {
+     this.baseURI = baseURI;
+   }
+ 
+   public String getEncoding()
+   {
+     return encoding;
+   }
+ 
+   public void setEncoding(String encoding)
+   {
+     this.encoding = encoding;
+   }
+ 
+   public boolean getCertifiedText()
+   {
+     return certifiedText;
+   }
+ 
+   public void setCertifiedText(boolean certifiedText)
+   {
+     this.certifiedText = certifiedText;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSOutput.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSOutput.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSOutput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* DomLSOutput.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.ls;
+ 
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.io.Writer;
+ import org.w3c.dom.ls.LSOutput;
+ 
+ /**
+  * Specification of XML output to produce.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomLSOutput
+   implements LSOutput
+ {
+ 
+   private OutputStream out;
+   private String systemId;
+   private String encoding;
+ 
+   public Writer getCharacterStream()
+   {
+     return new OutputStreamWriter(out);
+   }
+ 
+   public void setCharacterStream(Writer characterStream)
+   {
+     out = new WriterOutputStream(characterStream);
+   }
+ 
+   public OutputStream getByteStream()
+   {
+     return out;
+   }
+ 
+   public void setByteStream(OutputStream out)
+   {
+     this.out = out;
+   }
+ 
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+   public void setSystemId(String systemId)
+   {
+     this.systemId = systemId;
+   }
+ 
+   public String getEncoding()
+   {
+     return encoding;
+   }
+ 
+   public void setEncoding(String encoding)
+   {
+     this.encoding = encoding;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,574 ----
+ /* DomLSParser.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.ls;
+ 
+ import java.io.File;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.util.Arrays;
+ import java.util.List;
+ import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.parsers.SAXParser;
+ import javax.xml.parsers.SAXParserFactory;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DOMConfiguration;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.DOMStringList;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.ls.DOMImplementationLS;
+ import org.w3c.dom.ls.LSException;
+ import org.w3c.dom.ls.LSInput;
+ import org.w3c.dom.ls.LSParser;
+ import org.w3c.dom.ls.LSParserFilter;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.XMLReader;
+ import gnu.xml.dom.DomDocument;
+ import gnu.xml.dom.DomDOMException;
+ 
+ /**
+  * Parser implementation for GNU DOM.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomLSParser
+   implements LSParser, DOMConfiguration, DOMStringList, ErrorHandler
+ {
+ 
+   private static final List SUPPORTED_PARAMETERS
+     = Arrays.asList(new String[] { "cdata-sections",
+                     "comments",
+                     "element-content-whitespace",
+                     "namespaces",
+                     "expand-entity-references",
+                     "coalescing",
+                     "validating",
+                     "xinclude-aware",
+                     "entity-resolver",
+                     "error-handler" });
+ 
+   private LSParserFilter filter;
+   private final boolean async;
+   private String schemaType;
+   private SAXEventSink eventSink;
+   private SAXParserFactory factory;
+   private XMLReader reader;
+ 
+   private boolean namespaceAware = true;
+   private boolean ignoreWhitespace;
+   private boolean expandEntityReferences;
+   private boolean ignoreComments;
+   private boolean coalescing;
+   private boolean validating;
+   private boolean xIncludeAware;
+   private EntityResolver entityResolver;
+   private ErrorHandler errorHandler;
+ 
+   public DomLSParser(short mode, String schemaType)
+     throws DOMException
+   {
+     switch (mode)
+       {
+       case DOMImplementationLS.MODE_ASYNCHRONOUS:
+         async = true;
+         break;
+       case DOMImplementationLS.MODE_SYNCHRONOUS:
+         async = false;
+         break;
+       default:
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+       }
+     // TODO schemaType
+     this.schemaType = schemaType;
+     factory = SAXParserFactory.newInstance();
+   }
+ 
+   // -- LSParser --
+   
+   public DOMConfiguration getDomConfig()
+   {
+     return this;
+   }
+   
+   public LSParserFilter getFilter()
+   {
+     return filter;
+   }
+ 
+   public void setFilter(LSParserFilter filter)
+   {
+     this.filter = filter;
+   }
+ 
+   public boolean getAsync()
+   {
+     return async;
+   }
+ 
+   public boolean getBusy()
+   {
+     return eventSink != null;
+   }
+ 
+   public Document parse(LSInput input)
+     throws DOMException, LSException
+   {
+     if (async)
+       {
+         return doParse(input);
+       }
+     else
+       {
+         synchronized (this)
+           {
+             return doParse(input);
+           }
+       }
+   }
+ 
+   public Document parseURI(String uri)
+     throws DOMException, LSException
+   {
+     LSInput input = new DomLSInput();
+     input.setSystemId(uri);
+     return parse(input);
+   }
+ 
+   public Node parseWithContext(LSInput input, Node context, short action)
+     throws DOMException, LSException
+   {
+     Document doc = (context.getNodeType() == Node.DOCUMENT_NODE) ?
+       (Document) context : context.getOwnerDocument();
+     input.setBaseURI(doc.getDocumentURI());
+     // TODO use namespaces defined on context node
+     Document ret = parse(input);
+     Node root = ret.getDocumentElement();
+     root = doc.adoptNode(root);
+     switch (action)
+       {
+       case ACTION_APPEND_AS_CHILDREN:
+         context.appendChild(root);
+         break;
+       case ACTION_REPLACE_CHILDREN:
+         Node c1 = context.getFirstChild();
+         while (c1 != null)
+           {
+             Node next = c1.getNextSibling();
+             context.removeChild(c1);
+             c1 = next;
+           }
+         context.appendChild(root);
+         break;
+       case ACTION_INSERT_BEFORE:
+         Node p1 = context.getParentNode();
+         p1.insertBefore(root, context);
+         break;
+       case ACTION_INSERT_AFTER:
+         Node p2 = context.getParentNode();
+         Node r1 = context.getNextSibling();
+         if (r1 == null)
+           {
+             p2.appendChild(root);
+           }
+         else
+           {
+             p2.insertBefore(root, r1);
+           }
+         break;
+       case ACTION_REPLACE:
+         Node p3 = context.getParentNode();
+         Node r2 = context.getNextSibling();
+         p3.removeChild(context);
+         if (r2 == null)
+           {
+             p3.appendChild(root);
+           }
+         else
+           {
+             p3.insertBefore(root, r2);
+           }
+         break;
+       }
+     return root;
+   }
+ 
+   public void abort()
+   {
+     if (eventSink != null)
+       {
+         eventSink.interrupt();
+       }
+   }
+ 
+   private Document doParse(LSInput input)
+     throws DOMException, LSException
+   {
+     // create event sink
+     if (eventSink != null)
+       {
+         throw new LSException(LSException.PARSE_ERR, "parse in progress");
+       }
+     InputSource source = getInputSource(input);
+     eventSink = (filter == null) ? new SAXEventSink() :
+       new FilteredSAXEventSink(filter);
+     // configure sink
+     eventSink.namespaceAware = namespaceAware;
+     eventSink.ignoreWhitespace = ignoreWhitespace;
+     eventSink.expandEntityReferences = expandEntityReferences;
+     eventSink.ignoreComments = ignoreComments;
+     eventSink.coalescing = coalescing;
+     // get and configure reader
+     XMLReader reader = getXMLReader();
+     try
+       {
+         reader.setContentHandler(eventSink);
+         reader.setDTDHandler(eventSink);
+         reader.setProperty("http://xml.org/sax/properties/lexical-handler",
+                            eventSink);
+         reader.setProperty("http://xml.org/sax/properties/declaration-handler",
+                            eventSink);
+         reader.setFeature("http://xml.org/sax/features/namespaces",
+                           namespaceAware);
+         reader.setFeature("http://xml.org/sax/features/namespace-prefixes",
+                           true);
+         reader.setFeature("http://xml.org/sax/features/validation",
+                           validating);
+         try
+           {
+             reader.setFeature("http://xml.org/sax/features/use-attributes2",
+                               true);
+           }
+         catch (SAXNotRecognizedException e)
+           {
+             // ignore
+           }
+         try
+           {
+             reader.setFeature("http://xml.org/sax/features/external-general-entities",
+                               true);
+           }
+         catch (SAXNotRecognizedException e)
+           {
+             // ignore
+           }
+         reader.setEntityResolver(entityResolver);
+         reader.setErrorHandler(errorHandler);
+         // parse
+         reader.parse(source);
+       }
+     catch (DOMException e)
+       {
+         reader = null;
+         eventSink = null;
+         throw e;
+       }
+     catch (SAXException e)
+       {
+         reader = null;
+         eventSink = null;
+         throw new DomLSException(LSException.PARSE_ERR, e);
+       }
+     catch (IOException e)
+       {
+         reader = null;
+         eventSink = null;
+         throw new DomLSException(LSException.PARSE_ERR, e);
+       }
+     // return document
+     Document ret = eventSink.doc;
+     String systemId = input.getSystemId();
+     if (systemId != null && ret instanceof DomDocument)
+       {
+         ((DomDocument) ret).setDocumentURI(systemId);
+       }
+     eventSink = null;
+     return ret;
+   }
+ 
+   private XMLReader getXMLReader()
+     throws LSException
+   {
+     if (reader == null)
+       {
+         factory.setNamespaceAware(namespaceAware);
+         factory.setValidating(validating);
+         factory.setXIncludeAware(xIncludeAware);
+         try
+           {
+             SAXParser parser = factory.newSAXParser();
+             reader = parser.getXMLReader();
+           }
+         catch (ParserConfigurationException e)
+           {
+             throw new DomLSException(LSException.PARSE_ERR, e);
+           }
+         catch (SAXException e)
+           {
+             throw new DomLSException(LSException.PARSE_ERR, e);
+           }
+       }
+     return reader;
+   }
+ 
+   private InputSource getInputSource(LSInput input)
+     throws LSException
+   {
+     InputSource source = null;
+     String systemId = input.getSystemId();
+     InputStream in = input.getByteStream();
+     if (in != null)
+       {
+         source = new InputSource(in);
+         source.setSystemId(systemId);
+       }
+     if (source == null && entityResolver != null)
+       {
+         String publicId = input.getPublicId();
+         try
+           {
+             source = entityResolver.resolveEntity(publicId, systemId);
+           }
+         catch (SAXException e)
+           {
+             throw new DomLSException(LSException.PARSE_ERR, e);
+           } 
+         catch (IOException e)
+           {
+             throw new DomLSException(LSException.PARSE_ERR, e);
+           } 
+       }
+     if (source == null)
+       {
+         URL url = null;
+         String base = input.getBaseURI();
+         try
+           {
+             try
+               {
+                 URL baseURL = (base == null) ? null : new URL(base);
+                 url = (baseURL == null) ? new URL(systemId) :
+                   new URL(baseURL, systemId);
+               }
+             catch (MalformedURLException e)
+               {
+                 File baseFile = (base == null) ? null : new File(base);
+                 url = (baseFile == null) ? new File(systemId).toURL() :
+                   new File(baseFile, systemId).toURL();
+               }
+             in = url.openStream();
+             systemId = url.toString();
+             source = new InputSource(in);
+             source.setSystemId(systemId);
+           }
+         catch (IOException e)
+           {
+             throw new DomLSException(LSException.PARSE_ERR, e);
+           }
+       }
+     return source;
+   }
+ 
+   // -- DOMConfiguration --
+ 
+   public void setParameter(String name, Object value)
+     throws DOMException
+   {
+     name = name.toLowerCase();
+     if ("cdata-sections".equals(name))
+       {
+         coalescing = !((Boolean) value).booleanValue();
+       }
+     else if ("comments".equals(name))
+       {
+         ignoreComments = !((Boolean) value).booleanValue();
+       }
+     else if ("element-content-whitespace".equals(name))
+       {
+         ignoreWhitespace = !((Boolean) value).booleanValue();
+       }
+     else if ("namespaces".equals(name))
+       {
+         namespaceAware = ((Boolean) value).booleanValue();
+       }
+     else if ("expand-entity-references".equals(name))
+       {
+         expandEntityReferences = ((Boolean) value).booleanValue();
+       }
+     else if ("coalescing".equals(name))
+       {
+         coalescing = ((Boolean) value).booleanValue();
+       }
+     else if ("validating".equals(name))
+       {
+         validating = ((Boolean) value).booleanValue();
+       }
+     else if ("xinclude-aware".equals(name))
+       {
+         xIncludeAware = ((Boolean) value).booleanValue();
+       }
+     else if ("entity-resolver".equals(name))
+       {
+         entityResolver = (EntityResolver) value;
+       }
+     else if ("error-handler".equals(name))
+       {
+         errorHandler = (ErrorHandler) value;
+       }
+     else
+       {
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+       }
+     // invalidate reader, a new one will be created
+     reader = null;
+   }
+ 
+   public Object getParameter(String name)
+     throws DOMException
+   {
+     name = name.toLowerCase();
+     if ("cdata-sections".equals(name))
+       {
+         return coalescing ? Boolean.FALSE : Boolean.TRUE;
+       }
+     else if ("comments".equals(name))
+       {
+         return ignoreComments ? Boolean.FALSE : Boolean.TRUE;
+       }
+     else if ("element-content-whitespace".equals(name))
+       {
+         return ignoreWhitespace ? Boolean.FALSE : Boolean.TRUE;
+       }
+     else if ("namespaces".equals(name))
+       {
+         return namespaceAware ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("expand-entity-references".equals(name))
+       {
+         return expandEntityReferences ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("coalescing".equals(name))
+       {
+         return coalescing ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("validating".equals(name))
+       {
+         return validating ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("xinclude-aware".equals(name))
+       {
+         return xIncludeAware ? Boolean.TRUE : Boolean.FALSE;
+       }
+     else if ("entity-resolver".equals(name))
+       {
+         return entityResolver;
+       }
+     else if ("error-handler".equals(name))
+       {
+         return errorHandler;
+       }
+     else
+       {
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+       }
+   }
+ 
+   public boolean canSetParameter(String name, Object value)
+   {
+     return contains(name);
+   }
+ 
+   public DOMStringList getParameterNames()
+   {
+     return this;
+   }
+ 
+   // -- DOMStringList --
+ 
+   public String item(int i)
+   {
+     return (String) SUPPORTED_PARAMETERS.get(i);
+   }
+ 
+   public int getLength()
+   {
+     return SUPPORTED_PARAMETERS.size();
+   }
+ 
+   public boolean contains(String str)
+   {
+     return SUPPORTED_PARAMETERS.contains(str);
+   }
+ 
+   // -- ErrorHandler --
+ 
+   public void warning(SAXParseException e)
+     throws SAXException
+   {
+     if (errorHandler != null)
+       {
+         errorHandler.warning(e);
+       }
+   }
+ 
+   public void error(SAXParseException e)
+     throws SAXException
+   {
+     if (errorHandler != null)
+       {
+         errorHandler.error(e);
+       }
+   }
+ 
+   public void fatalError(SAXParseException e)
+     throws SAXException
+   {
+     if (errorHandler != null)
+       {
+         errorHandler.fatalError(e);
+       }
+     abort();
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSSerializer.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSSerializer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/DomLSSerializer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/DomLSSerializer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,354 ----
+ /* DomLSSerializer.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.ls;
+ 
+ import java.io.File;
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.StringWriter;
+ import java.io.Writer;
+ import java.net.HttpURLConnection;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.util.Arrays;
+ import java.util.List;
+ import org.w3c.dom.DOMConfiguration;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.DOMStringList;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.ls.LSException;
+ import org.w3c.dom.ls.LSOutput;
+ import org.w3c.dom.ls.LSSerializer;
+ import org.w3c.dom.ls.LSSerializerFilter;
+ import org.w3c.dom.traversal.NodeFilter;
+ import gnu.xml.dom.DomDOMException;
+ import gnu.xml.transform.StreamSerializer;
+ 
+ /**
+  * Serialize a DOM node to a stream.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DomLSSerializer
+   extends StreamSerializer
+   implements LSSerializer, DOMConfiguration, DOMStringList
+ {
+ 
+   private static final List SUPPORTED_PARAMETERS =
+     Arrays.asList(new String[] {"discard-default-content",
+                   "xml-declaration"});
+ 
+   private LSSerializerFilter filter;
+   private StreamSerializer serializer;
+ 
+   public DomLSSerializer()
+   {
+     super();
+     discardDefaultContent = true;
+   }
+ 
+   // -- LSSerializer --
+   
+   public DOMConfiguration getDomConfig()
+   {
+     return this;
+   }
+ 
+   public String getNewLine()
+   {
+     return eol;
+   }
+ 
+   public void setNewLine(String newLine)
+   {
+     if (newLine == null)
+       {
+         newLine = System.getProperty("line.separator");
+       }
+     eol = newLine;
+   }
+ 
+   public LSSerializerFilter getFilter()
+   {
+     return filter;
+   }
+ 
+   public void setFilter(LSSerializerFilter filter)
+   {
+     this.filter = filter;
+   }
+ 
+   public boolean write(Node node, LSOutput output)
+     throws LSException
+   {
+     OutputStream out = output.getByteStream();
+     try
+       {
+         if (out == null)
+           {
+             String systemId = output.getSystemId();
+             try
+               {
+                 URL url = new URL(systemId);
+                 URLConnection connection = url.openConnection();
+                 connection.setDoOutput(true);
+                 if (connection instanceof HttpURLConnection)
+                   {
+                     ((HttpURLConnection) connection).setRequestMethod("PUT");
+                   }
+                 out = connection.getOutputStream();
+               }
+             catch (MalformedURLException e)
+               {
+                 File file = new File(systemId);
+                 out = new FileOutputStream(file);
+               }
+           }
+         serialize(node, out);
+         out.flush();
+         return true;
+       }
+     catch (IOException e)
+       {
+         throw new DomLSException(LSException.SERIALIZE_ERR, e);
+       }
+   }
+ 
+   public boolean writeToURI(Node node, String uri)
+     throws LSException
+   {
+     LSOutput output = new DomLSOutput();
+     output.setSystemId(uri);
+     return write(node, output);
+   }
+ 
+   public String writeToString(Node node)
+     throws DOMException, LSException
+   {
+     Writer writer = new StringWriter();
+     LSOutput output = new DomLSOutput();
+     output.setCharacterStream(writer);
+     write(node, output);
+     return writer.toString();
+   }
+ 
+   public void serialize(Node node, OutputStream out)
+     throws IOException
+   {
+     if (filter == null)
+       {
+         super.serialize(node, out);
+       }
+     else
+       {
+         int wts = filter.getWhatToShow();
+         if (wts != NodeFilter.SHOW_ALL)
+           {
+             switch (node.getNodeType())
+               {
+               case Node.ATTRIBUTE_NODE:
+                 if ((wts & NodeFilter.SHOW_ATTRIBUTE) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.TEXT_NODE:
+                 if ((wts & NodeFilter.SHOW_TEXT) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.ELEMENT_NODE:
+                 if ((wts & NodeFilter.SHOW_ELEMENT) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.CDATA_SECTION_NODE:
+                 if ((wts & NodeFilter.SHOW_CDATA_SECTION) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.COMMENT_NODE:
+                 if ((wts & NodeFilter.SHOW_COMMENT) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.DOCUMENT_NODE:
+                 if ((wts & NodeFilter.SHOW_DOCUMENT) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.DOCUMENT_TYPE_NODE:
+                 if ((wts & NodeFilter.SHOW_DOCUMENT_TYPE) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.PROCESSING_INSTRUCTION_NODE:
+                 if ((wts & NodeFilter.SHOW_PROCESSING_INSTRUCTION) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.DOCUMENT_FRAGMENT_NODE:
+                 if ((wts & NodeFilter.SHOW_DOCUMENT_FRAGMENT) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.ENTITY_NODE:
+                 if ((wts & NodeFilter.SHOW_ENTITY) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.ENTITY_REFERENCE_NODE:
+                 if ((wts & NodeFilter.SHOW_ENTITY_REFERENCE) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               case Node.NOTATION_NODE:
+                 if ((wts & NodeFilter.SHOW_NOTATION) == 0)
+                   {
+                     super.serialize(node, out);
+                     return;
+                   }
+                 break;
+               }
+           }
+         switch (filter.acceptNode(node))
+           {
+           case NodeFilter.FILTER_ACCEPT:
+             super.serialize(node, out);
+             break;
+           case NodeFilter.FILTER_REJECT:
+             break;
+           case NodeFilter.FILTER_SKIP:
+             Node first = node.getFirstChild();
+             if (first != null)
+               {
+                 serialize(first, out);
+               }
+             break;
+           }
+       }
+   }
+ 
+   // -- DOMConfiguration --
+ 
+   public void setParameter(String name, Object value)
+     throws DOMException
+   {
+     if ("discard-default-content".equals(name))
+       {
+         discardDefaultContent = "true".equals(value.toString());
+       }
+     else if ("xml-declaration".equals(name))
+       {
+         xmlDeclaration = "false".equals(value.toString());
+       }
+     else
+       {
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+       }
+   }
+ 
+   public Object getParameter(String name)
+     throws DOMException
+   {
+     if ("discard-default-content".equals(name))
+       {
+         return discardDefaultContent ? "true" : "false";
+       }
+     else if ("xml-declaration".equals(name))
+       {
+         return xmlDeclaration ? "true" : "false";
+       }
+     else
+       {
+         throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+       }
+   }
+ 
+   public boolean canSetParameter(String name, Object value)
+   {
+     return contains(name);
+   }
+ 
+   public DOMStringList getParameterNames()
+   {
+     return this;
+   }
+ 
+   // -- DOMStringList --
+ 
+   public String item(int i)
+   {
+     return (String) SUPPORTED_PARAMETERS.get(i);
+   }
+ 
+   public int getLength()
+   {
+     return SUPPORTED_PARAMETERS.size();
+   }
+ 
+   public boolean contains(String str)
+   {
+     return SUPPORTED_PARAMETERS.contains(str);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,354 ----
+ /* FilteredSAXEventSink.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.ls;
+ 
+ import java.util.LinkedList;
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ import org.w3c.dom.ls.LSParserFilter;
+ import org.w3c.dom.traversal.NodeFilter;
+ import org.xml.sax.Attributes;
+ import org.xml.sax.SAXException;
+ 
+ /**
+  * A SAX event sink that calls out to a parser filter in order to decide
+  * whether to insert nodes into the tree.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class FilteredSAXEventSink
+   extends SAXEventSink
+ {
+ 
+   final LSParserFilter filter;
+   final int whatToShow;
+ 
+   /**
+    * Stack of elements to insert.
+    */
+   LinkedList nodes;
+   
+   /**
+    * Corresponding stack of filter decisions about the nodes.
+    */
+   LinkedList decisions;
+ 
+   /**
+    * True when rejecting child nodes.
+    */
+   boolean rejecting;
+ 
+   FilteredSAXEventSink(LSParserFilter filter)
+   {
+     this.filter = filter;
+     whatToShow = filter.getWhatToShow();
+   }
+ 
+   public void startDocument()
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     nodes = new LinkedList();
+     decisions = new LinkedList();
+     
+     super.startDocument();
+   }
+ 
+   public void endDocument()
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     super.endDocument();
+ 
+     switch (getDecision(ctx, false))
+       {
+       case LSParserFilter.FILTER_REJECT:
+         ctx = null;
+         doc = null;
+         break;
+       }
+     
+     nodes = null;
+     decisions = null;
+   }
+ 
+   public void startElement(String uri, String localName, String qName,
+                            Attributes atts)
+     throws SAXException
+   {
+     if (rejecting || interrupted)
+       {
+         return;
+       }
+     Element element = createElement(uri, localName, qName, atts);
+     ctx = element;
+     
+     short decision = getDecision(element, true);
+     nodes.addLast(element);
+     decisions.addLast(new Short(decision));
+ 
+     switch (decision)
+       {
+       case LSParserFilter.FILTER_REJECT:
+         rejecting = true;
+         break;
+       case LSParserFilter.FILTER_INTERRUPT:
+         interrupted = true;
+         break;
+       }
+   }
+ 
+   protected Attr createAttr(Attributes atts, int index)
+   {
+     Attr attr = super.createAttr(atts, index);
+     short decision = getDecision(attr, false);
+     switch (decision)
+       {
+       case LSParserFilter.FILTER_REJECT:
+         return null;
+       case LSParserFilter.FILTER_INTERRUPT:
+         interrupted = true;
+         return null;
+       }
+     return attr;
+   }
+ 
+   public void endElement(String uri, String localName, String qName)
+     throws SAXException
+   {
+     if (rejecting || interrupted)
+       {
+         return;
+       }
+     super.endElement(uri, localName, qName);
+     
+     Element element = (Element) nodes.removeLast();
+     Node parent = nodes.isEmpty() ? doc : (Node) nodes.getLast();
+     ctx = parent;
+     short decision = ((Short) decisions.removeLast()).shortValue();
+     switch (decision)
+       {
+       case LSParserFilter.FILTER_SKIP:
+         // Add all children of element to parent
+         for (Node child = element.getFirstChild(); child != null;
+              child = child.getNextSibling())
+           {
+             parent.insertBefore(child, element);
+           }
+         return;
+       case LSParserFilter.FILTER_REJECT:
+         rejecting = false;
+         break;
+       }
+     decision = getDecision(element, false);
+     switch (decision)
+       {
+       case LSParserFilter.FILTER_ACCEPT:
+         parent.appendChild(element);
+         break;
+       case LSParserFilter.FILTER_INTERRUPT:
+         interrupted = true;
+         break;
+       }
+   }
+ 
+   public void characters(char[] c, int off, int len)
+     throws SAXException
+   {
+     if (rejecting || interrupted)
+       {
+         return;
+       }
+     Text text = createText(c, off, len);
+     short decision = getDecision(text, false);
+     switch (decision)
+       {
+       case LSParserFilter.FILTER_ACCEPT:
+         ctx.appendChild(text);
+         break;
+       case LSParserFilter.FILTER_INTERRUPT:
+         interrupted = true;
+         break;
+       }
+   }
+ 
+   public void processingInstruction(String target, String data)
+     throws SAXException
+   {
+     if (rejecting || interrupted || inDTD)
+       {
+         return;
+       }
+     Node pi = createProcessingInstruction(target, data);
+     short decision = getDecision(pi, false);
+     switch (decision)
+       {
+       case LSParserFilter.FILTER_ACCEPT:
+         ctx.appendChild(pi);
+         break;
+       case LSParserFilter.FILTER_INTERRUPT:
+         interrupted = true;
+         break;
+       }
+   }
+ 
+   public void startDTD(String name, String publicId, String systemId)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     Node doctype = createDocumentType(name, publicId, systemId);
+     ctx = doctype;
+     inDTD = true;
+     nodes.addLast(doctype);
+     decisions.addLast(new Short(LSParserFilter.FILTER_ACCEPT));
+   }
+ 
+   public void endDTD()
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     Node doctype = (Node) nodes.removeLast();
+     decisions.removeLast();
+     inDTD = false;
+     ctx = doc;
+     short decision = getDecision(doctype, false);
+     switch (decision)
+       {
+       case LSParserFilter.FILTER_ACCEPT:
+         ctx.appendChild(doctype);
+         break;
+       case LSParserFilter.FILTER_INTERRUPT:
+         interrupted = true;
+         break;
+       }
+   }
+ 
+   public void comment(char[] c, int off, int len)
+     throws SAXException
+   {
+     if (rejecting || interrupted || inDTD)
+       {
+         return;
+       }
+     Node comment = createComment(c, off, len);
+     short decision = getDecision(comment, false);
+     switch (decision)
+       {
+       case LSParserFilter.FILTER_ACCEPT:
+         ctx.appendChild(comment);
+         break;
+       case LSParserFilter.FILTER_INTERRUPT:
+         interrupted = true;
+         break;
+       }
+   }
+ 
+   // TODO declarations
+ 
+   short getDecision(Node node, boolean start)
+   {
+     boolean show = (whatToShow == NodeFilter.SHOW_ALL);
+     if (!show)
+       {
+         switch (node.getNodeType())
+           {
+           case Node.ATTRIBUTE_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_ATTRIBUTE) != 0);
+             break;     
+           case Node.TEXT_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_TEXT) != 0);
+             break;     
+           case Node.CDATA_SECTION_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_CDATA_SECTION) != 0);
+             break;     
+           case Node.ELEMENT_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_ELEMENT) != 0);
+             break;     
+           case Node.COMMENT_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_COMMENT) != 0);
+             break;     
+           case Node.DOCUMENT_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_DOCUMENT) != 0);
+             break;     
+           case Node.PROCESSING_INSTRUCTION_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_PROCESSING_INSTRUCTION) != 0);
+             break;     
+           case Node.DOCUMENT_FRAGMENT_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_DOCUMENT_FRAGMENT) != 0);
+             break;     
+           case Node.DOCUMENT_TYPE_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_DOCUMENT_TYPE) != 0);
+             break;     
+           case Node.ENTITY_REFERENCE_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_ENTITY_REFERENCE) != 0);
+             break;     
+           case Node.ENTITY_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_ENTITY) != 0);
+             break;     
+           case Node.NOTATION_NODE:
+             show = ((whatToShow & NodeFilter.SHOW_NOTATION) != 0);
+             break;     
+           }
+       }
+     if (!show)
+       {
+         return LSParserFilter.FILTER_ACCEPT;
+       }
+     if (start)
+       {
+         return filter.startElement((Element) node);
+       }
+     return filter.acceptNode(node);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/ReaderInputStream.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/ReaderInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/ReaderInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/ReaderInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,237 ----
+ /* ReaderInputStream.java -- 
+    Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.ls;
+ 
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.Reader;
+ 
+ /**
+  * Character stream wrapper.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  * @author <a href='mailto:mark@klomp.org'>Mark Wielaard</a>
+  */
+ public class ReaderInputStream
+   extends InputStream
+ {
+ 
+   private Reader reader;
+   private String encoding;
+ 
+   // Holds extra spillover data if necessary
+   private byte extra[];
+   private int pos;
+ 
+   private byte extra_marked[];
+   private int pos_marked;
+ 
+   public ReaderInputStream(Reader reader)
+   {
+     this.reader = reader;
+     this.encoding = "UTF-8";
+   }
+ 
+   void setEncoding(String encoding)
+   {
+     this.encoding = encoding;
+   }
+ 
+   public int read()
+     throws IOException
+   {
+     if (extra != null)
+       {
+         int result = extra[pos];
+         pos++;
+         if (pos >= extra.length)
+           {
+             extra = null;
+           }
+         return result;
+       }
+     return reader.read();
+   }
+ 
+   public int read(byte[] b)
+     throws IOException
+   {
+     return read(b, 0, b.length);
+   }
+ 
+   public int read(byte[] b, int off, int len)
+     throws IOException
+   {
+     if (len == 0)
+       {
+         return 0;
+       }
+ 
+     if (extra != null)
+       {
+         int available = extra.length - pos;
+         int l = available < len ? available : len;
+         System.arraycopy(extra, 0, b, off, l);
+         pos += l;
+         if (pos >= extra.length)
+           {
+             extra = null;
+           }
+         return l;
+       }
+ 
+     char[] c = new char[len];
+     int l = reader.read(c, 0, len);
+     if (l == -1)
+       {
+         return -1;
+       }
+ 
+     String s = new String(c, 0, l);
+     byte[] d = s.getBytes(encoding);
+     
+     int available = d.length;
+     int more = d.length - len;
+     if (more > 0)
+       {
+         extra = new byte[more];
+         pos = 0;
+         System.arraycopy(d, len, extra, 0, more);
+         available -= more;
+       }
+        
+     System.arraycopy(d, 0, b, off, available);
+     return available;
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     reader.close();
+   }
+ 
+   public boolean markSupported()
+   {
+     return reader.markSupported();
+   }
+ 
+   public void mark(int limit)
+   {
+     if (extra != null)
+       {
+         extra_marked = new byte[extra.length];
+         System.arraycopy(extra, 0, extra_marked, 0, extra.length);
+         pos_marked = pos;
+       }
+     else
+       {
+         extra_marked = null;
+       }
+ 
+     try
+       {
+         // Note that this might be a bit more than asked for.
+         // Because we might also have the extra_marked bytes.
+         // That is fine (and necessary for reset() to work).
+         reader.mark(limit);
+       }
+     catch (IOException ioe)
+       {
+         throw new RuntimeException(ioe);
+       }
+   }
+ 
+   public void reset()
+     throws IOException
+   {
+     extra = extra_marked;
+     pos = pos_marked;
+     extra_marked = null;
+ 
+     reader.reset();
+   }
+ 
+   public long skip(long n)
+     throws IOException
+   {
+     long done = 0;
+     if (extra != null)
+       {
+         int available = extra.length - pos;
+         done = available < n ? available : n;
+         pos += done;
+         if (pos >= extra.length)
+           {
+             extra = null;
+           }
+       }
+ 
+     n -= done;
+     if (n > 0)
+       {
+         return reader.skip(n) + done;
+       }
+     else
+       {
+         return done;
+       }
+   }
+ 
+   /**
+    *  Returns conservative number of bytes available without blocking.
+    *  Actual number of bytes that can be read without blocking might
+    *  be (much) bigger.
+    */
+   public int available()
+     throws IOException
+   {
+     if (extra != null)
+       {
+         return pos - extra.length;
+       }
+ 
+     return reader.ready() ? 1 : 0;
+   }
+ 
+   public String toString()
+   {
+     return getClass().getName() + "[" + reader + ", " + encoding + "]";
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,557 ----
+ /* SAXEventSink.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.ls;
+ 
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import javax.xml.XMLConstants;
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.Entity;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ import org.xml.sax.Attributes;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.ext.Attributes2;
+ import org.xml.sax.ext.DeclHandler;
+ import org.xml.sax.ext.LexicalHandler;
+ import gnu.xml.aelfred2.ContentHandler2;
+ import gnu.xml.dom.DomAttr;
+ import gnu.xml.dom.DomDocument;
+ import gnu.xml.dom.DomDoctype;
+ 
+ /**
+  * A SAX content and lexical handler used to construct a DOM document.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class SAXEventSink
+   implements ContentHandler2, LexicalHandler, DTDHandler, DeclHandler
+ {
+ 
+   private static final String XMLNS_URI = XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
+   private static final String XMLNS_PREFIX = XMLConstants.XMLNS_ATTRIBUTE;
+ 
+   boolean namespaceAware;
+   boolean ignoreWhitespace;
+   boolean expandEntityReferences;
+   boolean ignoreComments;
+   boolean coalescing;
+   
+   DomDocument doc; // document being constructed
+   Node ctx; // current context (parent node)
+   LinkedList entityCtx; // entity context
+   List pending; // namespace nodes waiting for a declaring element
+   Locator locator;
+   boolean inCDATA;
+   boolean inDTD;
+   boolean interrupted;
+ 
+   void interrupt()
+   {
+     interrupted = true;
+   }
+ 
+   // -- ContentHandler2 --
+   
+   public void setDocumentLocator(Locator locator)
+   {
+     this.locator = locator;
+   }
+ 
+   public void startDocument()
+     throws SAXException
+   {
+     if (namespaceAware)
+       {
+         pending = new LinkedList();
+       }
+     doc = new DomDocument();
+     doc.setStrictErrorChecking(false);
+     doc.setBuilding(true);
+     ctx = doc;
+   }
+ 
+   public void xmlDecl(String version, String encoding, boolean standalone,
+                       String inputEncoding)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     doc.setXmlVersion(version);
+     doc.setXmlEncoding(encoding);
+     doc.setXmlStandalone(standalone);
+     doc.setInputEncoding(inputEncoding);
+   }
+ 
+   public void endDocument()
+     throws SAXException
+   {
+     doc.setStrictErrorChecking(true);
+     doc.setBuilding(false);
+     DomDoctype doctype = (DomDoctype) doc.getDoctype();
+     if (doctype != null)
+       {
+         doctype.makeReadonly();
+       }
+     ctx = null;
+     locator = null;
+   }
+ 
+   public void startPrefixMapping(String prefix, String uri)
+     throws SAXException
+   {
+     if (namespaceAware)
+       {
+         String nsName = (prefix != null && prefix.length() > 0) ?
+           XMLNS_PREFIX + ":" + prefix : XMLNS_PREFIX;
+         DomAttr ns = (DomAttr) doc.createAttributeNS(XMLNS_URI, nsName);
+         ns.setNodeValue(uri);
+         if (ctx.getNodeType() == Node.ATTRIBUTE_NODE)
+           {
+             // Add to owner element
+             Node target = ((Attr) ctx).getOwnerElement();
+             target.getAttributes().setNamedItemNS(ns);
+           }
+         else
+           {
+             // Add to pending list; namespace node will be inserted when
+             // element is seen
+             pending.add(ns);
+           }
+       }
+   }
+ 
+   public void endPrefixMapping(String prefix)
+     throws SAXException
+   {
+   }
+ 
+   public void startElement(String uri, String localName, String qName,
+                            Attributes atts)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     Element element = createElement(uri, localName, qName, atts);
+     // add element to context
+     ctx.appendChild(element);
+     ctx = element;
+   }
+ 
+   protected Element createElement(String uri, String localName, String qName,
+                                   Attributes atts)
+     throws SAXException
+   {
+     // create element node
+     Element element = namespaceAware ?
+       doc.createElementNS(uri, qName) :
+       doc.createElement(qName);
+     NamedNodeMap attrs = element.getAttributes();
+     if (namespaceAware && !pending.isEmpty())
+       {
+         // add pending namespace nodes
+         for (Iterator i = pending.iterator(); i.hasNext(); )
+           {
+             Node ns = (Node) i.next();
+             attrs.setNamedItemNS(ns);
+           }
+         pending.clear();
+       }
+     // add attributes
+     int len = atts.getLength();
+     for (int i = 0; i < len; i++)
+       {
+         // create attribute
+         Attr attr = createAttr(atts, i);
+         if (attr != null)
+           {
+             // add attribute to element
+             if (namespaceAware)
+               {
+                 attrs.setNamedItemNS(attr);
+               }
+             else
+               {
+                 attrs.setNamedItem(attr);
+               }
+           }
+       }
+     return element;
+   }
+ 
+   protected Attr createAttr(Attributes atts, int index)
+   {
+     DomAttr attr;
+     if (namespaceAware)
+       {
+         String a_uri = atts.getURI(index);
+         String a_qName = atts.getQName(index);
+         attr = (DomAttr) doc.createAttributeNS(a_uri, a_qName);
+       }
+     else
+       {
+         String a_qName = atts.getQName(index);
+         attr = (DomAttr) doc.createAttribute(a_qName);
+       }
+     attr.setNodeValue(atts.getValue(index));
+     if (atts instanceof Attributes2)
+       {
+         Attributes2 atts2 = (Attributes2) atts;
+         // TODO attr.setDeclared(atts2.isDeclared(index));
+         attr.setSpecified(atts2.isSpecified(index));
+       }
+     return attr;
+   }
+ 
+   public void endElement(String uri, String localName, String qName)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     if (namespaceAware)
+       {
+         pending.clear();
+       }
+     ctx = ctx.getParentNode();
+   }
+ 
+   public void characters(char[] c, int off, int len)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     ctx.appendChild(createText(c, off, len));
+   }
+ 
+   protected Text createText(char[] c, int off, int len)
+     throws SAXException
+   {
+     Text text = (inCDATA && !coalescing) ?
+       doc.createCDATASection(new String(c, off, len)) :
+       doc.createTextNode(new String(c, off, len));
+     return text;
+   }
+ 
+   public void ignorableWhitespace(char[] c, int off, int len)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     if (!ignoreWhitespace)
+       {
+         characters(c, off, len);
+       }
+   }
+ 
+   public void processingInstruction(String target, String data)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     if (!inDTD)
+       {
+         Node pi = createProcessingInstruction(target, data);
+         ctx.appendChild(pi);
+       }
+   }
+ 
+   protected Node createProcessingInstruction(String target, String data)
+   {
+     return doc.createProcessingInstruction(target, data);
+   }
+ 
+   public void skippedEntity(String name)
+     throws SAXException
+   {
+     // This callback is totally pointless
+   }
+ 
+   // -- LexicalHandler --
+   
+   public void startDTD(String name, String publicId, String systemId)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     Node doctype = createDocumentType(name, publicId, systemId);
+     doc.appendChild(doctype);
+     ctx = doctype;
+     inDTD = true;
+   }
+ 
+   protected Node createDocumentType(String name, String publicId,
+                                     String systemId)
+   {
+     return new DomDoctype(doc, name, publicId, systemId);
+   }
+ 
+   public void endDTD()
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     inDTD = false;
+     ctx = ctx.getParentNode();
+   }
+ 
+   public void startEntity(String name)
+     throws SAXException
+   {
+     DocumentType doctype = doc.getDoctype();
+     if (doctype == null)
+       {
+         throw new SAXException("SAX parser error: " +
+                                "reference to entity in undeclared doctype");
+       }
+     if ("[dtd]".equals(name) || name.charAt(0) == '%')
+       {
+         // Ignore DTD and parameter entities
+         ctx = doctype;
+         return;
+       }
+     if ("lt".equals(name) ||
+         "gt".equals(name) ||
+         "amp".equals(name) ||
+         "apos".equals(name) ||
+         "quot".equals(name))
+       {
+         return;
+       }
+     // Get entity
+     NamedNodeMap entities = doctype.getEntities();
+     Entity entity = (Entity) entities.getNamedItem(name);
+     if (entity == null)
+       {
+         throw new SAXException("SAX parser error: " +
+                                "reference to undeclared entity: " + name);
+       }
+     pushEntity(entity);
+   }
+ 
+   public void endEntity(String name)
+     throws SAXException
+   {
+     if ("[dtd]".equals(name) || name.charAt(0) == '%')
+       {
+         // Ignore DTD and parameter entities
+         return;
+       }
+     if ("lt".equals(name) ||
+         "gt".equals(name) ||
+         "amp".equals(name) ||
+         "apos".equals(name) ||
+         "quot".equals(name))
+       {
+         return;
+       }
+     // Get entity
+     Entity entity = popEntity();
+     // TODO resolve external entities to ensure that entity has content
+     if (expandEntityReferences)
+       {
+         // Get entity content
+         for (Node child = entity.getFirstChild(); child != null;
+              child = child.getNextSibling())
+           {
+             ctx.appendChild(child);
+           }
+       }
+     else
+       {
+         Node entityReference = doc.createEntityReference(name);
+         ctx.appendChild(entityReference);
+       }
+   }
+ 
+   void pushEntity(Node entity)
+   {
+     if (entityCtx == null)
+       {
+         entityCtx = new LinkedList();
+       }
+     entityCtx.addLast(ctx);
+     ctx = entity;
+   }
+ 
+   Entity popEntity()
+   {
+     Entity ret = (Entity) ctx;
+     ctx = (Node) entityCtx.removeLast();
+     return ret;
+   }
+ 
+   public void startCDATA()
+     throws SAXException
+   {
+     inCDATA = true;
+   }
+ 
+   public void endCDATA()
+     throws SAXException
+   {
+     inCDATA = false;
+   }
+ 
+   public void comment(char[] c, int off, int len)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     if (!inDTD)
+       {
+         Node comment = createComment(c, off, len);
+         ctx.appendChild(comment);
+       }
+   }
+ 
+   protected Node createComment(char[] c, int off, int len)
+   {
+     return doc.createComment(new String(c, off, len));
+   }
+ 
+   // -- DTDHandler --
+ 
+   public void notationDecl(String name, String publicId, String systemId)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     DomDoctype doctype = (DomDoctype) ctx;
+     doctype.declareNotation(name, publicId, systemId);
+   }
+ 
+   public void unparsedEntityDecl(String name, String publicId, String systemId,
+                                  String notationName)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     DomDoctype doctype = (DomDoctype) ctx;
+     Entity entity = doctype.declareEntity(name, publicId, systemId,
+                                           notationName);
+   }
+ 
+   // -- DeclHandler --
+   
+   public void elementDecl(String name, String model)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     // Ignore fake element declarations generated by ValidationConsumer.
+     // If an element is not really declared in the DTD it will not be
+     // declared in the document model.
+     if (!(ctx instanceof DomDoctype))
+       {
+         return;
+       }
+     DomDoctype doctype = (DomDoctype) ctx;
+     doctype.elementDecl(name, model);
+   }
+ 
+   public void attributeDecl(String eName, String aName, String type,
+                             String mode, String value)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     DomDoctype doctype = (DomDoctype) ctx;
+     doctype.attributeDecl(eName, aName, type, mode, value);
+   }
+ 
+   public void internalEntityDecl(String name, String value)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     DomDoctype doctype = (DomDoctype) ctx;
+     Entity entity = doctype.declareEntity(name, null, null, null);
+     if (entity != null)
+       {
+         Node text = doc.createTextNode(value);
+         entity.appendChild(text);
+       }
+   }
+ 
+   public void externalEntityDecl(String name, String publicId, String systemId)
+     throws SAXException
+   {
+     if (interrupted)
+       {
+         return;
+       }
+     DomDoctype doctype = (DomDoctype) ctx;
+     Entity entity = doctype.declareEntity(name, publicId, systemId, null);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/WriterOutputStream.java gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/WriterOutputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/ls/WriterOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/ls/WriterOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* WriterOutputStream.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.dom.ls;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.Writer;
+ 
+ /**
+  * Character stream wrapper.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class WriterOutputStream
+   extends OutputStream
+ {
+ 
+   private Writer writer;
+   private String encoding;
+ 
+   public WriterOutputStream(Writer writer)
+   {
+     this.writer = writer;
+     this.encoding = "UTF-8";
+   }
+ 
+   void setEncoding(String encoding)
+   {
+     this.encoding = encoding;
+   }
+ 
+   public void write(int c)
+     throws IOException
+   {
+     writer.write(c);
+   }
+ 
+   public void write(byte[] b)
+     throws IOException
+   {
+     write(b, 0, b.length);
+   }
+ 
+   public void write(byte[] b, int off, int len)
+     throws IOException
+   {
+     writer.write(new String(b, off, len, encoding));
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     writer.close();
+   }
+ 
+   public void flush()
+     throws IOException
+   {
+     writer.flush();
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/dom/package.html gcc-4.1.0/libjava/classpath/gnu/xml/dom/package.html
*** gcc-4.0.2/libjava/classpath/gnu/xml/dom/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/dom/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,273 ----
+ <html>
+ <body>
+ 
+ <p>
+ This is a Free Software DOM Level 3 implementation, supporting these features:
+ <ul>
+ <li>"XML"</li>
+ <li>"Events"</li>
+ <li>"MutationEvents"</li>
+ <li>"HTMLEvents" (won't generate them though)</li>
+ <li>"UIEvents" (also won't generate them)</li>
+ <li>"USER-Events" (a conformant extension)</li>
+ <li>"Traversal" (optional)</li>
+ <li>"XPath"</li>
+ <li>"LS" and "LS-Async"</li>
+ </ul>
+ It is intended to be a reasonable base both for
+ experimentation and supporting additional DOM modules as clean layers.
+ </p>
+ 
+ <p>
+ Note that while DOM does not specify its behavior in the
+ face of concurrent access, this implementation does.
+ Specifically:
+ <ul>
+ <li>If only one thread at a time accesses a Document,
+ of if several threads cooperate for read-only access,
+ then no concurrency conflicts will occur.</li>
+ <li>If several threads mutate a given document
+ (or send events using it) at the same time,
+ there is currently no guarantee that
+ they won't interfere with each other.</li>
+ </ul>
+ </p>
+ 
+ <h3>Design Goals</h3>
+ 
+ <p>
+ A number of DOM implementations are available in Java, including
+ commercial ones from Sun, IBM, Oracle, and DataChannel as well as
+ noncommercial ones from Docuverse, OpenXML, and Silfide.  Why have
+ another?  Some of the goals of this version:
+ </p>
+ 
+ <ul>
+ <li>Advanced DOM support. This was the first generally available
+ implementation of DOM Level 2 in Java, and one of the first Level 3
+ and XPath implementations.</li>
+ 
+ <li> Free Software.  This one is distributed under the GPL (with
+ "library exception") so it can be used with a different class of
+ application.</li>
+ 
+ <li>Second implementation syndrome.  I can do it simpler this time
+ around ... and heck, writing it only takes a bit over a day once you
+ know your way around.</li>
+ 
+ <li>Sanity check the then-current Last Call DOM draft.  Best to find
+ bugs early, when they're relatively fixable.  Yes, bugs were found.</li>
+ 
+ <li>Modularity.  Most of the implementations mentioned above are part
+ of huge packages; take all (including bugs, of which some have far
+ too many), or take nothing.  I prefer a menu approach, when possible.
+ This code is standalone, not beholden to any particular parser or XSL
+ or XPath code.</li>
+ 
+ <li>OK, I'm a hacker, I like to write code.</li>
+ </ul>
+ 
+ <p>
+ This also works with the GNU Compiler for Java (GCJ).  GCJ promises
+ to be quite the environment for programming Java, both directly and from
+ C++ using the new CNI interfaces (which really use C++, unlike JNI). </p>
+ 
+ 
+ <h3>Open Issues</h3>
+ 
+ <p>At this writing:</p>
+ <ul>
+ <li>See below for some restrictions on the mutation event
+ support ... some events aren't reported (and likely won't be).</li>
+ 
+ <li>More testing and conformance work is needed.</li>
+ 
+ <li>We need an XML Schema validator (actually we need validation in the DOM
+ full stop).</li>
+ </ul>
+ 
+ <p>
+ I ran a profiler a few times and remove some of the performance hotspots,
+ but it's not tuned.  Reporting mutation events, in particular, is
+ rather costly -- it started at about a 40% penalty for appendNode calls,
+ I've got it down around 12%, but it'll be hard to shrink it much further.
+ The overall code size is relatively small, though you may want to be rid of
+ many of the unused DOM interface classes (HTML, CSS, and so on).
+ </p>
+ 
+ 
+ <h2><a name="features">Features of this Package</a></h2>
+ 
+ <p> Starting with DOM Level 2, you can really see that DOM is constructed
+ as a bunch of optional modules around a core of either XML or HTML
+ functionality.  Different implementations will support different optional
+ modules.  This implementation provides a set of features that should be
+ useful if you're not depending on the HTML functionality (lots of convenience
+ functions that mostly don't buy much except API surface area) and user
+ interface support.  That is, browsers will want more -- but what they
+ need should be cleanly layered over what's already here. </p>
+ 
+ <h3> Core Feature Set:  "XML" </h3>
+ 
+ <p> This DOM implementation supports the "XML" feature set, which basically
+ gets you four things over the bare core (which you're officially not supposed
+ to implement except in conjunction with the "XML" or "HTML" feature).  In
+ order of decreasing utility, those four things are: </p> <ol>
+ 
+     <li> ProcessingInstruction nodes.  These are probably the most
+     valuable thing. Handy little buggers, in part because all the APIs
+     you need to use them are provided, and they're designed to let you
+     escape XML document structure rules in controlled ways.</li>
+ 
+     <li> CDATASection nodes.  These are of of limited utility since CDATA
+     is just text that prints funny. These are of use to some sorts of
+     applications, though I encourage folk to not use them. </li>
+ 
+     <li> DocumentType nodes, and associated Notation and Entity nodes.
+     These appear to be useless.  Briefly, these "Type" nodes expose no
+     typing information.  They're only really usable to expose some lexical
+     structure that almost every application needs to ignore.  (XML editors
+     might like to see them, but they need true typing information much more.)
+     I strongly encourage people not to use these.  </li>
+ 
+     <li> EntityReference nodes can show up.  These are actively annoying,
+     since they add an extra level of hierarchy, are the cause of most of
+     the complexity in attribute values, and their contents are immutable.
+     Avoid these.</li>
+ 
+     </ol>
+ 
+ <h3> Optional Feature Sets:  "Events", and friends </h3>
+ 
+ <p> Events may be one of the more interesting new features in Level 2.
+ This package provides the core feature set and exposes mutation events.
+ No gooey events though; if you want that, write a layered implementation! </p>
+ 
+ <p> Three mutation events aren't currently generated:</p> <ul>
+ 
+     <li> <em>DOMSubtreeModified</em> is poorly specified.  Think of this
+     as generating one such event around the time of finalization, which
+     is a fully conformant implementation.  This implementation is exactly
+     as useful as that one. </li>
+ 
+     <li> <em>DOMNodeRemovedFromDocument</em> and
+     <em>DOMNodeInsertedIntoDocument</em> are supposed to get sent to
+     every node in a subtree that gets removed or inserted (respectively).
+     This can be <em>extremely costly</em>, and the removal and insertion
+     processing is already significantly slower due to event reporting.
+     It's much easier, and more efficient, to have a listener higher in the
+     tree watch removal and insertion events through the bubbling or capture
+     mechanisms, than it is to watch for these two events.</li>
+ 
+     </ul>
+ 
+ <p> In addition, certain kinds of attribute modification aren't reported.
+ A fix is known, but it couldn't report the previous value of the attribute.
+ More work could fix all of this (as well as reduce the generally high cost
+ of childful attributes), but that's not been done yet. </p>
+ 
+ <p> Also, note that it is a <em>Bad Thing&#153;</em> to have the listener
+ for a mutation event change the ancestry for the target of that event.
+ Or to prevent mutation events from bubbling to where they're needed.
+ Just don't do those, OK? </p>
+ 
+ <p> As an experimental feature (named "USER-Events"), you can provide
+ your own "user" events.  Just name them anything starting with "USER-"
+ and you're set.  Dispatch them through, bubbling, capturing, or what
+ ever takes your fancy.  One important thing you can't currently do is
+ pass any data (like an object) with those events.  Maybe later there
+ will be a "UserEvent" interface letting you get some substantial use
+ out of this mechanism even if you're not "inside" of a DOM package.</p>
+ 
+ <p> You can create and send HTML events.  Ditto UIEvents.  Since DOM
+ doesn't require a UI, it's the UI's job to send them; perhaps that's
+ part of your application.  </p>
+ 
+ <p><em>This package may be built without the ability to report mutation
+ events, gaining a significant speedup in DOM construction time.  However,
+ if that is done then certain other features -- notably node iterators
+ and getElementsByTagname -- will not be available.</em>
+ 
+ 
+ <h3> Optional Feature:  "Traversal" </h3>
+ 
+ <p> Each DOM node has all you need to walk to everything connected
+ to that node.  Lightweight, efficient utilities are easily layered on
+ top of just the core APIs. </p>
+ 
+ <p> Traversal APIs are an optional part of DOM Level 2, providing
+ a not-so-lightweight way to walk over DOM trees, if your application
+ didn't already have such utilities for use with data represented via
+ DOM.  Implementing this helped debug the (optional) event and mutation
+ event subsystems, so it's provided here.  </p>
+ 
+ <p> At this writing, the "TreeWalker" interface isn't implemented. </p>
+ 
+ 
+ 
+ <h2><a name='avoid'>DOM Functionality to Avoid</a></h2>
+ 
+ <p> For what appear to be a combination of historical and "committee
+ logic" reasons, DOM has a number of <em>features which I strongly advise
+ you to avoid using</em> in your library and application code.  These
+ include the following types of DOM nodes; see the documentation for the
+ implementation class for more information: <ul>
+ 
+     <li> CDATASection
+     (<a href='DomCDATA.html'>DomCDATA</a> class)
+     ... use normal Text nodes instead, so you don't have to make
+     every algorithm recognize multiple types of character data
+ 
+     <li> DocumentType
+     (<a href='DomDoctype.html'>DomDocType</a> class)
+     ... if this held actual typing information, it might be useful
+ 
+     <li> Entity
+     (<a href='DomEntity.html'>DomEntity</a> class)
+     ... neither parsed nor unparsed entities work well in DOM; it
+     won't even tell you which attributes identify unparsed entities
+ 
+     <li> EntityReference
+     (<a href='DomEntityReference.html'>DomEntityReference</a> class)
+     ... permitted implementation variances are extreme, all children
+     are readonly, and these can interact poorly with namespaces
+ 
+     <li> Notation
+     (<a href='DomNotation.html'>DomNotation</a> class)
+     ... only really usable with unparsed entities (which aren't well
+     supported; see above) or perhaps with PIs after the DTD, not with
+     NOTATION attributes
+ 
+     </ul>
+ 
+ <p> If you really need to use unparsed entities or notations, use SAX;
+ it offers better support for all DTD-related functionality.
+ It also exposes actual
+ document typing information (such as element content models).</p>
+ 
+ <p> Also, when accessing attribute values, use methods that provide their
+ values as single strings, rather than those which expose value substructure
+ (Text and EntityReference nodes).  (See the <a href='DomAttr.html'>DomAttr</a>
+ documentation for more information.) </p>
+ 
+ <p> Note that many of these features were provided as partial support for
+ editor functionality (including the incomplete DTD access).  Full editor
+ functionality requires access to potentially malformed lexical structure,
+ at the level of unparsed tokens and below.  Access at such levels is so
+ complex that using it in non-editor applications sacrifices all the
+ benefits of XML; editor aplications need extremely specialized APIs. </p>
+ 
+ <p> (This isn't a slam against DTDs, note; only against the broken support
+ for them in DOM.  Even despite inclusion of some dubious SGML legacy features
+ such as notations and unparsed entities,
+ and the ongoing proliferation of alternative schema and validation tools,
+ DTDs are still the most widely adopted tool
+ to constrain XML document structure.  
+ Alternative schemes generally focus on data transfer style
+ applications; open document architectures comparable to
+ DocBook 4.0 don't yet exist in the schema world.
+ Feel free to use DTDs; just don't expect DOM to help you.) </p>
+ 
+ </body>
+ </html>
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,116 ----
+ /* GnomeAttr.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.TypeInfo;
+ 
+ /**
+  * A DOM attribute node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeAttr
+   extends GnomeNode
+   implements Attr
+ {
+ 
+   GnomeAttr(Object id)
+   {
+     super(id);
+   }
+   
+   public String getName()
+   {
+     return getNodeName();
+   }
+   
+   public native boolean getSpecified();
+   
+   public native String getValue();
+   
+   public native void setValue(String value)
+     throws DOMException;
+   
+   public Node getParentNode()
+   {
+     return null;
+   }
+   
+   public Element getOwnerElement()
+   {
+     return (Element) super.getParentNode();
+   }
+   
+   // DOM Level 3 methods
+   
+   public TypeInfo getSchemaTypeInfo()
+   {
+     return new GnomeTypeInfo(id);
+   }
+ 
+   public boolean isId()
+   {
+     if (xmljIsId())
+       {
+         return true;
+       }
+     GnomeElement element = (GnomeElement) getOwnerElement();
+     return (element != null &&
+             element.userIdAttrs != null &&
+             element.userIdAttrs.contains(this));
+   }
+   
+   private native boolean xmljIsId();
+ 
+   public String toString()
+   {
+     StringBuffer buffer = new StringBuffer(getClass().getName());
+     buffer.append("[name=");
+     buffer.append(getName());
+     buffer.append(",value=");
+     buffer.append(getValue());
+     buffer.append("]");
+     return buffer.toString();
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* GnomeCDATASection.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.CDATASection;
+ 
+ /**
+  * A DOM CDATA section node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeCDATASection
+   extends GnomeText
+   implements CDATASection
+ {
+ 
+   GnomeCDATASection(Object id)
+   {
+     super(id);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,117 ----
+ /* GnomeCharacterData.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.CharacterData;
+ import org.w3c.dom.DOMException;
+ 
+ /**
+  * A DOM character data node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ abstract class GnomeCharacterData
+   extends GnomeNode
+   implements CharacterData
+ {
+ 
+   GnomeCharacterData(Object id)
+   {
+     super(id);
+   }
+ 
+   public String getData()
+     throws DOMException
+   {
+     return getNodeValue();
+   }
+ 
+   public void setData(String data)
+     throws DOMException
+   {
+     setNodeValue(data);
+   }
+ 
+   public int getLength()
+   {
+     return getData().length();
+   }
+ 
+   public String substringData(int offset, int count)
+     throws DOMException
+   {
+     return getData().substring(offset, offset + count);
+   }
+ 
+   public void appendData(String arg)
+     throws DOMException
+   {
+     setData(getData() + arg);
+   }
+ 
+   public void insertData(int offset, String arg)
+     throws DOMException
+   {
+     String data = getData();
+     setData(data.substring(0, offset) + arg + data.substring(offset));
+   }
+ 
+   public void deleteData(int offset, int count)
+     throws DOMException
+   {
+     String data = getData();
+     setData(data.substring(0, offset) + data.substring(offset + count));
+   }
+ 
+   public void replaceData(int offset, int count, String arg)
+   {
+     String data = getData();
+     setData(data.substring(0, offset) + arg +
+             data.substring(offset + count));
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buffer = new StringBuffer(getClass().getName());
+     buffer.append("[data=");
+     buffer.append(getData());
+     buffer.append("]");
+     return buffer.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* GnomeComment.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.Comment;
+ 
+ /**
+  * A DOM comment node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeComment
+   extends GnomeCharacterData
+   implements Comment
+ {
+ 
+   GnomeComment(Object id)
+   {
+     super(id);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* GnomeDOMException.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.DOMException;
+ 
+ class GnomeDOMException
+   extends DOMException
+ {
+ 
+   GnomeDOMException(short code, String message)
+   {
+     super(code, createMessage(code, message));
+   }
+ 
+   private static String createMessage(int code, String message)
+   {
+     if (message != null)
+       {
+         return message;
+       }
+     switch (code)
+       {
+       case INDEX_SIZE_ERR:
+         return "INDEX_SIZE_ERR";
+       case DOMSTRING_SIZE_ERR:
+         return "DOMSTRING_SIZE_ERR";
+       case HIERARCHY_REQUEST_ERR:
+         return "HIERARCHY_REQUEST_ERR";
+       case WRONG_DOCUMENT_ERR:
+         return "WRONG_DOCUMENT_ERR";
+       case INVALID_CHARACTER_ERR:
+         return "INVALID_CHARACTER_ERR";
+       case NO_DATA_ALLOWED_ERR:
+         return "NO_DATA_ALLOWED_ERR";
+       case NO_MODIFICATION_ALLOWED_ERR:
+         return "NO_MODIFICATION_ALLOWED_ERR";
+       case NOT_FOUND_ERR:
+         return "NOT_FOUND_ERR";
+       case NOT_SUPPORTED_ERR:
+         return "NOT_SUPPORTED_ERR";
+       case INUSE_ATTRIBUTE_ERR:
+         return "INUSE_ATTRIBUTE_ERR";
+       case INVALID_STATE_ERR:
+         return "INVALID_STATE_ERR";
+       case SYNTAX_ERR:
+         return "SYNTAX_ERR";
+       case INVALID_MODIFICATION_ERR:
+         return "INVALID_MODIFICATION_ERR";
+       case NAMESPACE_ERR:
+         return "NAMESPACE_ERR";
+       case INVALID_ACCESS_ERR:
+         return "INVALID_ACCESS_ERR";
+       case VALIDATION_ERR:
+         return "VALIDATION_ERR";
+       case TYPE_MISMATCH_ERR:
+         return "TYPE_MISMATCH_ERR";
+       default:
+         return null;
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMStringList.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMStringList.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMStringList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMStringList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,84 ----
+ /* GnomeDOMStringList.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.DOMStringList;
+ 
+ /**
+  * Implementation of a string list using an array of strings.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeDOMStringList
+   implements DOMStringList
+ {
+ 
+   final String[] values;
+ 
+   GnomeDOMStringList(String[] values)
+   {
+     this.values = values;
+   }
+ 
+   public int getLength()
+   {
+     return values.length;
+   }
+ 
+   public String item(int index)
+   {
+     if (index < 0 || index >= values.length)
+       {
+         return null;
+       }
+     return values[index];
+   }
+ 
+   public boolean contains(String value)
+   {
+     for (int i = 0; i < values.length; i++)
+       {
+         if (values[i].equalsIgnoreCase(value))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,561 ----
+ /* GnomeDocument.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import java.util.Iterator;
+ 
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.CDATASection;
+ import org.w3c.dom.Comment;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.DOMConfiguration;
+ import org.w3c.dom.DOMErrorHandler;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.DOMStringList;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.EntityReference;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.ProcessingInstruction;
+ import org.w3c.dom.Text;
+ import org.w3c.dom.UserDataHandler;
+ import org.w3c.dom.traversal.DocumentTraversal;
+ import org.w3c.dom.traversal.NodeFilter;
+ import org.w3c.dom.traversal.NodeIterator;
+ import org.w3c.dom.traversal.TreeWalker;
+ import org.w3c.dom.xpath.XPathEvaluator;
+ import org.w3c.dom.xpath.XPathException;
+ import org.w3c.dom.xpath.XPathExpression;
+ import org.w3c.dom.xpath.XPathNSResolver;
+ 
+ import gnu.xml.dom.DomNodeIterator;
+ 
+ /**
+  * A DOM document node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class GnomeDocument
+   extends GnomeNode
+   implements Document, DOMConfiguration, XPathEvaluator, DocumentTraversal
+ {
+ 
+   DOMImplementation dom;
+ 
+   /**
+    * Not currently used.
+    */
+   boolean strictErrorChecking;
+ 
+   /* DOMConfiguration */
+   boolean canonicalForm = false;
+   boolean cdataSections = true;
+   boolean checkCharacterNormalization = false;
+   boolean comments = true;
+   boolean datatypeNormalization = false;
+   boolean elementContentWhitespace = true;
+   boolean entities = true;
+   DOMErrorHandler errorHandler;
+   boolean namespaces = true;
+   boolean namespaceDeclarations = true;
+   boolean normalizeCharacters = false;
+   boolean splitCdataSections = true;
+   boolean validate = false;
+   boolean validateIfSchema = false;
+   boolean wellFormed = true;
+   
+   GnomeDocument(Object id)
+   {
+     super(id);
+     strictErrorChecking = true;
+   }
+   
+   protected void finalize()
+   {
+     free(id);
+   }
+   
+   private native void free(Object id);
+ 
+   public native DocumentType getDoctype();
+ 
+   public DOMImplementation getImplementation()
+   {
+     return dom;
+   }
+ 
+   public native Element getDocumentElement();
+ 
+   public Element createElement(String tagName)
+     throws DOMException
+   {
+     return createElementNS(null, tagName);
+   }
+ 
+   public native DocumentType createDocumentType(String name, String publicId,
+                                                 String systemId);
+ 
+   public native DocumentFragment createDocumentFragment();
+ 
+   public native Text createTextNode(String data);
+ 
+   public native Comment createComment(String data);
+ 
+   public native CDATASection createCDATASection(String data)
+     throws DOMException;
+ 
+   public native ProcessingInstruction createProcessingInstruction(String target,
+                                                                   String data)
+     throws DOMException;
+ 
+   public Attr createAttribute(String name)
+     throws DOMException
+   {
+     return createAttributeNS(null, name);
+   }
+ 
+   public native EntityReference createEntityReference(String name)
+     throws DOMException;
+ 
+   public native NodeList getElementsByTagName(String tagName);
+ 
+   public Node importNode(Node importedNode, boolean deep)
+     throws DOMException
+   {
+     Node ret = xmljImportNode(importedNode, deep);
+     if (importedNode instanceof GnomeNode)
+       {
+         ((GnomeNode) importedNode)
+           .notifyUserDataHandlers(UserDataHandler.NODE_IMPORTED,
+                                   importedNode, ret);
+       }
+     return ret;
+   }
+ 
+   private native Node xmljImportNode(Node importedNode, boolean deep)
+     throws DOMException;
+ 
+   public native Element createElementNS(String namespaceURI, String
+                                         qualifiedName)
+     throws DOMException;
+   
+   public native Attr createAttributeNS(String namespaceURI, String
+                                        qualifiedName)
+     throws DOMException;
+ 
+   public native NodeList getElementsByTagNameNS(String namespaceURI,
+       String localName);
+ 
+   public Element getElementById(String elementId)
+   {
+     Element element = xmljGetElementById(elementId);
+     if (element == null)
+       {
+         TreeWalker walker = createTreeWalker(this, NodeFilter.SHOW_ELEMENT,
+                                              null, false);
+         for (Node node = walker.nextNode(); node != null;
+              node = walker.nextNode())
+           {
+             GnomeElement e = (GnomeElement) node;
+             if (e.userIdAttrs != null)
+               {
+                 for (Iterator i = e.userIdAttrs.iterator(); i.hasNext(); )
+                   {
+                     Attr attr = (Attr) i.next();
+                     if (attr.getNodeValue().equals(elementId))
+                       {
+                         return e;
+                       }
+                   }
+               }
+           }
+       }
+     return element;
+   }
+   
+   private native Element xmljGetElementById(String elementId);
+ 
+   // DOM Level 3 methods
+ 
+   public native String getInputEncoding();
+ 
+   public native String getXmlEncoding();
+ 
+   public native boolean getXmlStandalone();
+ 
+   public native void setXmlStandalone(boolean xmlStandalone);
+ 
+   public native String getXmlVersion();
+ 
+   public native void setXmlVersion(String xmlVersion);
+ 
+   public boolean getStrictErrorChecking()
+   {
+     return strictErrorChecking;
+   }
+ 
+   public void setStrictErrorChecking(boolean strictErrorChecking)
+   {
+     this.strictErrorChecking = strictErrorChecking;
+   }
+   
+   public native String getDocumentURI();
+ 
+   public native void setDocumentURI(String documentURI);
+ 
+   public Node adoptNode(Node source)
+     throws DOMException
+   {
+     if (source == null || !(source instanceof GnomeNode))
+       {
+         return null;
+       }
+     Node ret = xmljAdoptNode(source);
+     if (source instanceof GnomeNode)
+       {
+         ((GnomeNode) source).
+           notifyUserDataHandlers(UserDataHandler.NODE_ADOPTED,
+                                  source, ret);
+       }
+     return ret;
+   }
+ 
+   private native Node xmljAdoptNode(Node source)
+     throws DOMException;
+ 
+   public DOMConfiguration getDomConfig()
+   {
+     return this;
+   }
+ 
+   public void normalizeDocument()
+   {
+     normalize();
+   }
+ 
+   public native Node renameNode(Node n, String namespaceURI,
+                                 String qualifiedName);
+ 
+   // -- DOMConfiguration methods --
+ 
+   public void setParameter(String name, Object value)
+     throws DOMException
+   {
+     name = name.toLowerCase();
+     if ("canonical-form".equals(name))
+       {
+         /* optional
+         canonicalForm = getBooleanValue(value);*/
+       }
+     else if ("cdata-sections".equals(name))
+       {
+         cdataSections = getBooleanValue(value);
+       }
+     else if ("check-character-normalization".equals(name))
+       {
+         /* optional
+         checkCharacterNormalization = getBooleanValue(value);*/
+       }
+     else if ("comments".equals(name))
+       {
+         comments = getBooleanValue(value);
+       }
+     else if ("datatype-normalization".equals(name))
+       {
+         /* optional
+         datatypeNormalization = getBooleanValue(value);*/
+       }
+     else if ("element-content-whitespace".equals(name))
+       {
+         /* optional
+         elementContentWhitespace = getBooleanValue(value);*/
+       }
+     else if ("entities".equals(name))
+       {
+         entities = getBooleanValue(value);
+       }
+     else if ("error-handler".equals(name))
+       {
+         errorHandler = (DOMErrorHandler) value;
+       }
+     else if ("infoset".equals(name))
+       {
+         if (getBooleanValue(value))
+           {
+             validateIfSchema = false;
+             entities = false;
+             datatypeNormalization = false;
+             cdataSections = false;
+             namespaceDeclarations = true;
+             wellFormed = true;
+             elementContentWhitespace = true;
+             comments = true;
+             namespaces = true;
+           }
+       }
+     else if ("namespaces".equals(name))
+       {
+         /* optional
+         namespaces = getBooleanValue(value);*/
+       }
+     else if ("namespace-declarations".equals(name))
+       {
+         namespaceDeclarations = getBooleanValue(value);
+       }
+     else if ("normalize-characters".equals(name))
+       {
+         /* optional
+         normalizeCharacters = getBooleanValue(value);*/
+       }
+     else if ("split-cdata-sections".equals(name))
+       {
+         splitCdataSections = getBooleanValue(value);
+       }
+     else if ("validate".equals(name))
+       {
+         /* optional
+         validate = getBooleanValue(value);*/
+       }
+     else if ("validate-if-schema".equals(name))
+       {
+         /* optional
+         validateIfSchema = getBooleanValue(value);*/
+       }
+     else if ("well-formed".equals(name))
+       {
+         /* optional
+         wellFormed = getBooleanValue(value);*/
+       }
+     else
+       {
+         throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, name);
+       }
+   }
+ 
+   public Object getParameter(String name)
+     throws DOMException
+   {
+     name = name.toLowerCase();
+     if ("canonical-form".equals(name))
+       {
+         return Boolean.valueOf(canonicalForm);
+       }
+     else if ("cdata-sections".equals(name))
+       {
+         return Boolean.valueOf(cdataSections);
+       }
+     else if ("check-character-normalization".equals(name))
+       {
+         return Boolean.valueOf(checkCharacterNormalization);
+       }
+     else if ("comments".equals(name))
+       {
+         return Boolean.valueOf(comments);
+       }
+     else if ("datatype-normalization".equals(name))
+       {
+         return Boolean.valueOf(datatypeNormalization);
+       }
+     else if ("element-content-whitespace".equals(name))
+       {
+         return Boolean.valueOf(elementContentWhitespace);
+       }
+     else if ("entities".equals(name))
+       {
+         return Boolean.valueOf(entities);
+       }
+     else if ("error-handler".equals(name))
+       {
+         return errorHandler;
+       }
+     else if ("infoset".equals(name))
+       {
+         return Boolean.valueOf(!validateIfSchema &&
+ 			       !entities &&
+ 			       !datatypeNormalization &&
+ 			       !cdataSections &&
+ 			       namespaceDeclarations &&
+ 			       wellFormed &&
+ 			       elementContentWhitespace &&
+ 			       comments &&
+ 			       namespaces);
+       }
+     else if ("namespaces".equals(name))
+       {
+         return Boolean.valueOf(namespaces);
+       }
+     else if ("namespace-declarations".equals(name))
+       {
+         return Boolean.valueOf(namespaceDeclarations);
+       }
+     else if ("normalize-characters".equals(name))
+       {
+         return Boolean.valueOf(normalizeCharacters);
+       }
+     else if ("split-cdata-sections".equals(name))
+       {
+         return Boolean.valueOf(splitCdataSections);
+       }
+     else if ("validate".equals(name))
+       {
+         return Boolean.valueOf(validate);
+       }
+     else if ("validate-if-schema".equals(name))
+       {
+         return Boolean.valueOf(validateIfSchema);
+       }
+     else if ("well-formed".equals(name))
+       {
+         return Boolean.valueOf(wellFormed);
+       }
+     else
+       {
+         throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, name);
+       }
+   }
+ 
+   public boolean canSetParameter(String name, Object value)
+   {
+     name = name.toLowerCase();
+     if ("error-handler".equals(name))
+       {
+         return (value == null || value instanceof DOMErrorHandler);
+       }
+     return ("cdata-sections".equals(name) ||
+             "comments".equals(name) ||
+             "entities".equals(name) ||
+             "namespace-declarations".equals(name) ||
+             "split-cdata-sections".equals(name));
+   }
+   
+   public DOMStringList getParameterNames()
+   {
+     String[] names = new String[] {
+       "canonical-form",
+       "cdata-sections",
+       "check-character-normalization",
+       "comments",
+       "datatype-normalization",
+       "element-content-whitespace",
+       "entities",
+       "error-handler",
+       "infoset",
+       "namespaces",
+       "namespace-declarations",
+       "normalize-characters",
+       "split-cdata-sections",
+       "validate",
+       "validate-if-schema",
+       "well-formed"
+     };
+     return new GnomeDOMStringList(names);
+   }
+ 
+   private boolean getBooleanValue(Object value)
+   {
+     if (value instanceof Boolean)
+       {
+         return ((Boolean) value).booleanValue();
+       }
+     else if (value instanceof String)
+       {
+         return Boolean.valueOf ((String) value).booleanValue();
+       }
+     return false;
+   }
+ 
+   // -- XPathEvaluator methods --
+ 
+   public XPathExpression createExpression(String expression,
+                                           XPathNSResolver resolver)
+     throws XPathException, DOMException
+   {
+     return new GnomeXPathExpression(this, expression, resolver);
+   }
+ 
+   public XPathNSResolver createNSResolver(Node nodeResolver)
+   {
+     return new GnomeXPathNSResolver(nodeResolver);
+   }
+ 
+   public native Object evaluate(String expression,
+                                 Node contextNode,
+                                 XPathNSResolver resolver,
+                                 short type,
+                                 Object result)
+     throws XPathException, DOMException;
+ 
+   // -- DocumentTraversal methods --
+ 
+   public NodeIterator createNodeIterator(Node root,
+                                          int whatToShow,
+                                          NodeFilter filter,
+                                          boolean entityReferenceExpansion)
+     throws DOMException
+   {
+     return new DomNodeIterator(root, whatToShow, filter,
+                                entityReferenceExpansion, false);
+   }
+ 
+   public TreeWalker createTreeWalker(Node root,
+                                     int whatToShow,
+                                     NodeFilter filter,
+                                     boolean entityReferenceExpansion)
+     throws DOMException
+   {
+     return new DomNodeIterator(root, whatToShow, filter,
+                                entityReferenceExpansion, true);
+   }
+ 
+   // -- Debugging --
+   
+   public String toString()
+   {
+     StringBuffer buffer = new StringBuffer(getClass().getName());
+     buffer.append("[version=");
+     buffer.append(getXmlVersion());
+     buffer.append(",standalone=");
+     buffer.append(getXmlStandalone());
+     buffer.append("]");
+     return buffer.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,326 ----
+ /* GnomeDocumentBuilder.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.net.URL;
+ import javax.xml.parsers.DocumentBuilder;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.DOMImplementation;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ 
+ import gnu.xml.libxmlj.util.NamedInputStream;
+ import gnu.xml.libxmlj.util.StandaloneDocumentType;
+ import gnu.xml.libxmlj.util.StandaloneLocator;
+ import gnu.xml.libxmlj.util.XMLJ;
+ 
+ /**
+  * A JAXP DOM implementation that uses Gnome libxml2 as the underlying
+  * parser and node representation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class GnomeDocumentBuilder
+   extends DocumentBuilder
+   implements DOMImplementation
+ {
+ 
+   static
+   {
+     XMLJ.init();
+   }
+ 
+   // -- DocumentBuilder --
+ 
+   private boolean validate;
+   private boolean coalesce;
+   private boolean expandEntities;
+   private EntityResolver entityResolver;
+   private ErrorHandler errorHandler;
+   private boolean seenFatalError;
+ 
+   /**
+    * Constructs a new validating document builder.
+    */
+   public GnomeDocumentBuilder()
+   {
+     this(true, false, false);
+   }
+   
+   /**
+    * Constructs a new document builder.
+    * @param validate whether to validate during parsing
+    * @param coalesce whether to merge CDATA as text nodes
+    * @param expandEntities whether to expand entity references
+    */
+   public GnomeDocumentBuilder(boolean validate,
+                               boolean coalesce,
+                               boolean expandEntities)
+   {
+     this.validate = validate;
+     this.coalesce = coalesce;
+     this.expandEntities = expandEntities;
+   }
+ 
+   public DOMImplementation getDOMImplementation()
+   {
+     return this;
+   }
+ 
+   public boolean isNamespaceAware()
+   {
+     return true;
+   }
+ 
+   public boolean isValidating()
+   {
+     return validate;
+   }
+ 
+   public Document newDocument()
+   {
+     return createDocument(null, null, null);
+   }
+ 
+   public Document parse(InputSource input)
+     throws SAXException, IOException
+   {
+     NamedInputStream in = XMLJ.getInputStream(input);
+     byte[] detectBuffer = in.getDetectBuffer();
+     String publicId = input.getPublicId();
+     String systemId = input.getSystemId();
+     String base = XMLJ.getBaseURI(systemId);
+     // Handle zero-length document
+     if (detectBuffer == null)
+       {
+         throw new SAXParseException("No document element", publicId,
+                                     systemId, 0, 0);
+       }
+     seenFatalError = false;
+     return parseStream(in,
+                        detectBuffer,
+                        publicId,
+                        systemId,
+                        base,
+                        validate,
+                        coalesce,
+                        expandEntities,
+                        true, //entityResolver != null,
+                        errorHandler != null);
+   }
+   
+   private native Document parseStream(InputStream in,
+                                       byte[] detectBuffer,
+                                       String publicId,
+                                       String systemId,
+                                       String base,
+                                       boolean validate,
+                                       boolean coalesce,
+                                       boolean expandEntities,
+                                       boolean entityResolver,
+                                       boolean errorHandler);
+   
+   public void setEntityResolver(EntityResolver resolver)
+   {
+     entityResolver = resolver;
+   }
+ 
+   public void setErrorHandler(ErrorHandler handler)
+   {
+     errorHandler = handler;
+   }
+ 
+   // -- DOMImplementation --
+ 
+   public boolean hasFeature(String name, String version)
+   {
+     if (name.length() == 0)
+       {
+         return false;
+       }
+     name = name.toLowerCase();
+     if (name.charAt(0) == '+')
+       {
+         name = name.substring(1);
+       }
+     
+     if ("xml".equals(name) || "core".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+                 "1.0".equals(version) ||
+                 "2.0".equals(version) ||
+                 "3.0".equals(version));
+       
+       }
+     else if ("ls".equals(name) || "ls-async".equals(name))
+       {
+         // TODO
+         /*
+         return (version == null ||
+                 "".equals(version) ||
+                 "3.0".equals(version));
+                 */
+         return false;
+       }
+     else if ("traversal".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+ 		"2.0".equals(version));
+       }
+     else if ("xpath".equals(name))
+       {
+         return (version == null ||
+                 "".equals(version) ||
+                 "3.0".equals(version));
+       }
+     return false;
+   }
+   
+   // DOM Level 3
+ 
+   public Object getFeature(String feature, String version)
+   {
+     if (hasFeature(feature, version))
+       {
+         return this;
+       }
+     return null;
+   }
+   
+   public native Document createDocument(String namespaceURI,
+                                         String qualifiedName,
+                                         DocumentType doctype);
+   
+   public DocumentType createDocumentType(String qualifiedName,
+                                          String publicId,
+                                          String systemId)
+   {
+     return new StandaloneDocumentType(qualifiedName, publicId, systemId);
+   }
+   
+   // Callback hooks from JNI
+   
+   private void setDocumentLocator(Object ctx, Object loc)
+   {
+     // ignore
+   }
+   
+   private InputStream resolveEntity(String publicId, String systemId,
+                                     String base)
+     throws SAXException, IOException
+   {
+     String url = XMLJ.getAbsoluteURI(base, systemId);
+     InputStream in = null;
+     if (entityResolver != null)
+       {
+         InputSource source = entityResolver.resolveEntity(publicId, url);
+         if (source != null)
+           {
+             in = XMLJ.getInputStream(source);
+           }
+       }
+     if (in == null)
+       {
+         in  = XMLJ.getInputStream(new URL(url));
+       }
+     return in;
+   }
+   
+   private void warning(String message,
+                        int lineNumber,
+                        int columnNumber,
+                        String publicId,
+                        String systemId)
+     throws SAXException
+   {
+     if (!seenFatalError && errorHandler != null)
+       {
+         Locator l = new StandaloneLocator(lineNumber,
+                                           columnNumber,
+                                           publicId,
+                                           systemId);
+         errorHandler.warning(new SAXParseException(message, l));
+       }
+   }
+ 
+   private void error(String message,
+                      int lineNumber,
+                      int columnNumber,
+                      String publicId,
+                      String systemId)
+     throws SAXException
+   {
+     if (!seenFatalError && errorHandler != null)
+       {
+         Locator l = new StandaloneLocator(lineNumber,
+                                           columnNumber,
+                                           publicId,
+                                           systemId);
+         errorHandler.error(new SAXParseException(message, l));
+       }
+   }
+ 
+   private void fatalError(String message,
+                           int lineNumber,
+                           int columnNumber,
+                           String publicId,
+                           String systemId)
+     throws SAXException
+   {
+     if (!seenFatalError && errorHandler != null)
+       {
+         seenFatalError = true;
+         Locator l = new StandaloneLocator(lineNumber,
+                                           columnNumber,
+                                           publicId,
+                                           systemId);
+         errorHandler.fatalError(new SAXParseException(message, l));
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilderFactory.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilderFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilderFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilderFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* GnomeDocumentBuilderFactory.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import javax.xml.parsers.DocumentBuilder;
+ import javax.xml.parsers.DocumentBuilderFactory;
+ import javax.xml.parsers.ParserConfigurationException;
+ 
+ /**
+  * Factory for JAXP document builders using the libxml2 implementation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class GnomeDocumentBuilderFactory
+ extends DocumentBuilderFactory
+ {
+ 
+   public GnomeDocumentBuilderFactory ()
+   {
+     setNamespaceAware (true);
+   }
+ 
+   public Object getAttribute (String name)
+   {
+     // TODO
+     return null;
+   }
+ 
+   public DocumentBuilder newDocumentBuilder ()
+     throws ParserConfigurationException
+   {
+     /*
+     if (!isNamespaceAware ())
+       {
+         String msg = "Parser must be namespace-aware";
+         throw new ParserConfigurationException (msg);
+       }
+     if (isIgnoringComments ())
+       {
+         String msg = "Ignoring comments not supported";
+         throw new ParserConfigurationException (msg);
+       }
+     if (isIgnoringElementContentWhitespace ())
+       {
+         String msg = "Ignoring element content whitespace not supported";
+         throw new ParserConfigurationException (msg);
+       }
+       */
+     return new GnomeDocumentBuilder (isValidating (),
+                                      isCoalescing (),
+                                      isExpandEntityReferences ());
+   }
+ 
+   public void setAttribute (String name, Object value)
+   {
+     // TODO
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentFragment.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentFragment.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentFragment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentFragment.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* GnomeDocumentFragment.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.DocumentFragment;
+ 
+ /**
+  * A DOM document fragment node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeDocumentFragment
+ extends GnomeNode
+ implements DocumentFragment
+ {
+ 
+   GnomeDocumentFragment (Object id)
+   {
+     super (id);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,96 ----
+ /* GnomeDocumentType.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.NamedNodeMap;
+ 
+ /**
+  * A DOM document type node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeDocumentType
+ extends GnomeNode
+ implements DocumentType
+ {
+ 
+   GnomeDocumentType (Object id)
+   {
+     super (id);
+   }
+   
+   public String getName ()
+   {
+     return getNodeName ();
+   }
+ 
+   public NamedNodeMap getEntities ()
+   {
+     return new GnomeNamedNodeMap (id, 1);
+   }
+ 
+   public NamedNodeMap getNotations ()
+   {
+     return new GnomeNamedNodeMap (id, 2);
+   }
+ 
+   public native String getPublicId ();
+ 
+   public native String getSystemId ();
+ 
+   public native String getInternalSubset ();
+ 
+   public String toString ()
+   {
+     String publicId = getPublicId ();
+     StringBuffer buffer = new StringBuffer (getClass ().getName ());
+     buffer.append ("[");
+     if (publicId != null)
+       {
+         buffer.append ("publicId=");
+         buffer.append (publicId);
+         buffer.append (",");
+       }
+     buffer.append ("systemId=");
+     buffer.append (getSystemId ());
+     buffer.append ("]");
+     return buffer.toString ();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,182 ----
+ /* GnomeElement.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import java.util.HashSet;
+ import java.util.Set;
+ 
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.TypeInfo;
+ 
+ /**
+  * A DOM element node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeElement
+   extends GnomeNode
+   implements Element
+ {
+ 
+   /**
+    * User-defined ID attributes.
+    */
+   Set userIdAttrs;
+ 
+   GnomeElement(Object id)
+   {
+     super(id);
+   }
+   
+   public String getTagName()
+   {
+     return getNodeName();
+   }
+ 
+   public native String getAttribute(String name);
+ 
+   public native void setAttribute(String name, String value)
+     throws DOMException;
+   
+   public void removeAttribute(String name)
+     throws DOMException
+   {
+     Attr attr = getAttributeNode(name);
+     if (attr != null)
+       {
+         removeAttributeNode(attr);
+       }
+   }
+ 
+   public native Attr getAttributeNode(String name);
+   
+   public native Attr setAttributeNode(Attr newAttr)
+     throws DOMException;
+ 
+   public native Attr removeAttributeNode(Attr oldAttr)
+     throws DOMException;
+ 
+   public native NodeList getElementsByTagName(String name);
+   
+   public native String getAttributeNS(String namespaceURI, String localName);
+   
+   public native void setAttributeNS(String namespaceURI, String
+                                     qualifiedName, String value)
+     throws DOMException;
+ 
+   public void removeAttributeNS(String namespaceURI, String localName)
+     throws DOMException
+   {
+     Attr attr = getAttributeNodeNS(namespaceURI, localName);
+     if (attr != null)
+       {
+         removeAttributeNode(attr);
+       }
+   }
+   
+   public native Attr getAttributeNodeNS(String namespaceURI,
+                                         String localName);
+ 
+   public native Attr setAttributeNodeNS(Attr newAttr)
+     throws DOMException;
+ 
+   public native NodeList getElementsByTagNameNS(String namespaceURI,
+                                                 String localName);
+   
+   public native boolean hasAttribute(String name);
+ 
+   public native boolean hasAttributeNS(String namespaceURI,
+                                        String localName);
+ 
+   // DOM Level 3 methods
+ 
+   public TypeInfo getSchemaTypeInfo()
+   {
+     return new GnomeTypeInfo(id);
+   }
+ 
+   public void setIdAttribute(String name, boolean isId)
+   {
+     Attr attr = getAttributeNode(name);
+     setIdAttributeNode(attr, isId);
+   }
+ 
+   public void setIdAttributeNode(Attr attr, boolean isId)
+   {
+     if (attr == null)// FIXME || !attr.getOwnerElement().equals(this))
+       {
+         throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+       }
+     if (isId)
+       {
+         if (userIdAttrs == null)
+           {
+             userIdAttrs = new HashSet();
+           }
+         userIdAttrs.add(attr);
+       }
+     else if (userIdAttrs != null)
+       {
+         userIdAttrs.remove(attr);
+         if (userIdAttrs.isEmpty())
+           {
+             userIdAttrs = null;
+           }
+       }
+   }
+ 
+   public void setIdAttributeNS(String namespaceURI, String localName,
+                                boolean isId)
+   {
+     Attr attr = getAttributeNodeNS(namespaceURI, localName);
+     setIdAttributeNode(attr, isId);
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buffer = new StringBuffer(getClass().getName());
+     buffer.append("[tagName=");
+     buffer.append(getTagName());
+     buffer.append("]");
+     return buffer.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* GnomeEntity.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.Entity;
+ 
+ /**
+  * A DOM entity node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeEntity
+ extends GnomeNode
+ implements Entity
+ {
+ 
+   GnomeEntity (Object id)
+   {
+     super (id);
+   }
+ 
+   public native String getPublicId ();
+ 
+   public native String getSystemId ();
+ 
+   public native String getNotationName ();
+ 
+   // DOM Level 3 methods
+   
+   public String getInputEncoding ()
+   {
+     // TODO
+     return null;    
+   }
+   
+   public String getXmlEncoding ()
+   {
+     // TODO
+     return null;
+   }
+   
+   public String getXmlVersion ()
+   {
+     // TODO
+     return null;
+   }
+   
+   public String toString ()
+   {
+     String publicId = getPublicId ();
+     StringBuffer buffer = new StringBuffer (getClass ().getName ());
+     buffer.append ("[");
+     if (publicId != null)
+       {
+         buffer.append ("publicId=");
+         buffer.append (publicId);
+         buffer.append (",");
+       }
+     buffer.append ("systemId=");
+     buffer.append (getSystemId ());
+     buffer.append (",notationName=");
+     buffer.append (getNotationName ());
+     buffer.append ("]");
+     return buffer.toString ();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntityReference.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntityReference.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntityReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntityReference.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* GnomeEntityReference.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.EntityReference;
+ 
+ /**
+  * A DOM entity reference node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeEntityReference
+ extends GnomeNode
+ implements EntityReference
+ {
+ 
+   GnomeEntityReference (Object id)
+   {
+     super (id);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* GnomeNamedNodeMap.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A DOM named node map implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeNamedNodeMap
+ implements NamedNodeMap
+ {
+ 
+   /**
+    * The node id.
+    */
+   private final Object id;
+ 
+   /**
+    * The map type.
+    * 0=attributes
+    * 1=entities
+    * 2=notations
+    */
+   private final int type;
+ 
+   GnomeNamedNodeMap (Object id, int type)
+   {
+     this.id = id;
+     this.type = type;
+   }
+ 
+   public native Node getNamedItem (String name);
+ 
+   public native Node setNamedItem (Node arg)
+     throws DOMException;
+ 
+   public native Node removeNamedItem (String name)
+     throws DOMException;
+ 
+   public native Node item (int index);
+   
+   public native int getLength ();
+ 
+   public native Node getNamedItemNS (String namespaceURI, String localName);
+ 
+   public native Node setNamedItemNS (Node arg)
+     throws DOMException;
+ 
+   public native Node removeNamedItemNS (String namespaceURI,
+                                         String localName);
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,499 ----
+ /* GnomeNode.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.Text;
+ import org.w3c.dom.UserDataHandler;
+ 
+ import gnu.xml.libxmlj.util.StandaloneDocumentType;
+ 
+ /**
+  * A DOM node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeNode
+   implements Node, Comparable
+ {
+ 
+   /**
+    * Maps document pointers to a map of node pointers to node instances.
+    */
+   static Map instances;
+ 
+   /**
+    * Retrieves the node instance for the specified node pointer.
+    * This creates a new instance and adds it to the cache if required.
+    * @param doc the document pointer
+    * @param node the node pointer
+    * @param type the node type
+    */
+   static GnomeNode newInstance(final Object doc, final Object node,
+                                final int type)
+   {
+     if (doc == null)
+       {
+         throw new NullPointerException("doc");
+       }
+     if (node == null)
+       {
+         throw new NullPointerException("node");
+       }
+     if (instances == null)
+       {
+         instances = new HashMap();
+       }
+     Map docNodes = (Map) instances.get(doc);
+     if (docNodes == null)
+       {
+         docNodes = new HashMap(1024); // TODO review optimal initial capacity
+         instances.put(doc, docNodes);
+       }
+     GnomeNode nodeInstance = (GnomeNode) docNodes.get(node);
+     if (nodeInstance != null)
+       {
+         return nodeInstance; // Return cached version
+       }
+     switch (type)
+       {
+       case ELEMENT_NODE:
+         nodeInstance = new GnomeElement(node);
+         break;
+       case ATTRIBUTE_NODE:
+         nodeInstance = new GnomeAttr(node);
+         break;
+       case TEXT_NODE:
+         nodeInstance = new GnomeText(node);
+         break;
+       case CDATA_SECTION_NODE:
+         nodeInstance = new GnomeCDATASection(node);
+         break;
+       case ENTITY_REFERENCE_NODE:
+         nodeInstance = new GnomeEntityReference(node);
+         break;
+       case ENTITY_NODE:
+         nodeInstance = new GnomeEntity(node);
+         break;
+       case PROCESSING_INSTRUCTION_NODE:
+         nodeInstance = new GnomeProcessingInstruction(node);
+         break;
+       case COMMENT_NODE:
+         nodeInstance = new GnomeComment(node);
+         break;
+       case DOCUMENT_NODE:
+         nodeInstance = new GnomeDocument(node);
+         break;
+       case DOCUMENT_TYPE_NODE:
+         nodeInstance = new GnomeDocumentType(node);
+         break;
+       case DOCUMENT_FRAGMENT_NODE:
+         nodeInstance = new GnomeDocumentFragment(node);
+         break;
+       case NOTATION_NODE:
+         nodeInstance = new GnomeNotation(node);
+         break;
+       default:
+         throw new IllegalArgumentException("Unknown node type: " + type);
+       }
+     docNodes.put(node, nodeInstance);
+     return nodeInstance;
+   }
+   
+   /**
+    * Frees the specified document.
+    * This removes all its nodes from the cache.
+    */
+   static void freeDocument(final Object doc)
+   {
+     if (instances == null || doc == null)
+       {
+         return;
+       }
+     instances.remove(doc);
+     //System.out.println("Freed "+instances.remove(doc));
+   }
+   
+   /**
+    * xmlNodePtr
+    */
+   final Object id;
+ 
+   Map userData;
+   Map userDataHandlers;
+ 
+   GnomeNode(final Object id)
+   {
+     this.id = id;
+   }
+ 
+   public native String getNodeName();
+ 
+   public native String getNodeValue()
+     throws DOMException;
+ 
+   public native void setNodeValue(String nodeValue)
+     throws DOMException;
+ 
+   public native short getNodeType();
+ 
+   public native Node getParentNode();
+ 
+   public NodeList getChildNodes()
+   {
+     return new GnomeNodeList(id);
+   }
+ 
+   public native Node getFirstChild();
+ 
+   public native Node getLastChild();
+ 
+   public native Node getPreviousSibling();
+ 
+   public native Node getNextSibling();
+ 
+   public NamedNodeMap getAttributes()
+   {
+     return new GnomeNamedNodeMap(id, 0);
+   }
+ 
+   public native Document getOwnerDocument();
+ 
+   public Node insertBefore(Node newChild, Node refChild)
+     throws DOMException
+   {
+     if (newChild instanceof StandaloneDocumentType)
+       {
+         DocumentType dt = (DocumentType) newChild;
+         newChild = ((GnomeDocument) getOwnerDocument())
+           .createDocumentType(dt.getName(), dt.getPublicId(),
+                               dt.getSystemId());
+       }
+     if (newChild == null)
+       {
+         throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+       }
+     if (!(newChild instanceof GnomeNode))
+       {
+         throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, null);
+       }
+     if (refChild == null || !(refChild instanceof GnomeNode))
+       {
+         throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+       }
+     return xmljInsertBefore(newChild, refChild);
+   }
+ 
+   private native Node xmljInsertBefore(Node newChild, Node refChild)
+     throws DOMException;
+ 
+   public Node replaceChild(Node newChild, Node oldChild)
+     throws DOMException
+   {
+     if (newChild instanceof StandaloneDocumentType)
+       {
+         DocumentType dt = (DocumentType) newChild;
+         newChild = ((GnomeDocument) getOwnerDocument())
+           .createDocumentType(dt.getName(), dt.getPublicId(),
+                               dt.getSystemId());
+       }
+     if (newChild == null)
+       {
+         throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+       }
+     if (!(newChild instanceof GnomeNode))
+       {
+         throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, newChild.toString());
+       }
+     if (oldChild == null || !(oldChild instanceof GnomeNode))
+       {
+         throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+       }
+     return xmljReplaceChild(newChild, oldChild);
+   }
+ 
+   private native Node xmljReplaceChild(Node newChild, Node oldChild)
+     throws DOMException;
+ 
+   public Node removeChild(Node oldChild)
+     throws DOMException
+   {
+     if (!(oldChild instanceof GnomeNode))
+       {
+         throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, null);
+       }
+     return xmljRemoveChild(oldChild);
+   }
+ 
+   private native Node xmljRemoveChild(Node oldChild)
+     throws DOMException;
+ 
+   public Node appendChild(Node newChild)
+     throws DOMException
+   {
+     if (newChild instanceof StandaloneDocumentType)
+       {
+         DocumentType dt = (DocumentType) newChild;
+         newChild = ((GnomeDocument) getOwnerDocument())
+           .createDocumentType(dt.getName(), dt.getPublicId(),
+                               dt.getSystemId());
+       }
+     if (!(newChild instanceof GnomeNode))
+       {
+         throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, null);
+       }
+     return xmljAppendChild(newChild);
+   }
+ 
+   private native Node xmljAppendChild(Node newChild)
+     throws DOMException;
+ 
+   public native boolean hasChildNodes();
+ 
+   public Node cloneNode(boolean deep)
+   {
+     Node ret = xmljCloneNode(deep);
+     notifyUserDataHandlers(UserDataHandler.NODE_CLONED, this, ret);
+     return ret;
+   }
+   
+   private native Node xmljCloneNode(boolean deep);
+ 
+   public native void normalize();
+ 
+   public boolean isSupported(String feature, String version)
+   {
+     return getOwnerDocument().getImplementation()
+       .hasFeature(feature, version);
+   }
+ 
+   public native String getNamespaceURI();
+ 
+   public native String getPrefix();
+ 
+   public native void setPrefix(String prefix)
+     throws DOMException;
+ 
+   public native String getLocalName();
+ 
+   public native boolean hasAttributes();
+ 
+   public int hashCode()
+   {
+     return id.hashCode();
+   }
+ 
+   public boolean equals(Object other)
+   {
+     if (other == this)
+       {
+         return true;
+       }
+     return (other instanceof GnomeNode &&
+             ((GnomeNode) other).id == id);
+   }
+ 
+   // DOM Level 3 methods
+ 
+   public native String getBaseURI();
+ 
+   public short compareDocumentPosition(Node other)
+     throws DOMException
+   {
+     return (short) compareTo(other);
+   }
+ 
+   public final int compareTo(Object other)
+   {
+     if (other instanceof GnomeNode)
+       {
+         return xmljCompareTo(other);
+       }
+     return 0;
+   }
+ 
+   private native int xmljCompareTo(Object other);
+   
+   public String getTextContent()
+     throws DOMException
+   {
+     switch (getNodeType())
+       {
+       case ELEMENT_NODE:
+       case ATTRIBUTE_NODE:
+       case ENTITY_NODE:
+       case ENTITY_REFERENCE_NODE:
+       case DOCUMENT_FRAGMENT_NODE:
+         StringBuffer buffer = new StringBuffer();
+         NodeList children = getChildNodes();
+         int len = children.getLength();
+         for (int i = 0; i < len; i++)
+           {
+             Node child = children.item(i);
+             String textContent = child.getTextContent();
+             if (textContent != null)
+               {
+                 buffer.append(textContent);
+               }
+           }
+         return buffer.toString();
+       case TEXT_NODE:
+       case CDATA_SECTION_NODE:
+       case COMMENT_NODE:
+       case PROCESSING_INSTRUCTION_NODE:
+         return getNodeValue();
+       default:
+         return null;
+       }
+   }
+   
+   public void setTextContent(String textContent)
+     throws DOMException
+   {
+     switch (getNodeType())
+       {
+       case ENTITY_REFERENCE_NODE:
+         // entity references are read only
+         throw new GnomeDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
+                                     null);
+       case ELEMENT_NODE:
+       case ATTRIBUTE_NODE:
+       case ENTITY_NODE:
+       case DOCUMENT_FRAGMENT_NODE:
+         NodeList children = getChildNodes();
+         int len = children.getLength();
+         for (int i = 0; i < len; i++)
+           {
+             Node child = children.item(i);
+             removeChild(child);
+           }
+         if (textContent != null)
+           {
+             Text text = getOwnerDocument().createTextNode(textContent);
+             appendChild(text);
+           }
+         break;
+       case TEXT_NODE:
+       case CDATA_SECTION_NODE:
+       case COMMENT_NODE:
+       case PROCESSING_INSTRUCTION_NODE:
+         setNodeValue(textContent);
+         break;
+       }
+   }
+   
+   public boolean isSameNode(Node other)
+   {
+     return equals(other);
+   }
+   
+   public native String lookupPrefix(String namespaceURI);
+   
+   public native boolean isDefaultNamespace(String namespaceURI);
+   
+   public native String lookupNamespaceURI(String prefix);
+   
+   public native boolean isEqualNode(Node arg);
+   
+   public Object getFeature(String feature, String version)
+   {
+     return getOwnerDocument().getImplementation()
+       .getFeature(feature, version);
+   }
+ 
+   public Object setUserData(String key, Object data, UserDataHandler handler)
+   {
+     // TODO handler
+     if (userData == null)
+       {
+         userData = new HashMap();
+       }
+     if (handler != null)
+       {
+         if (userDataHandlers == null)
+           {
+             userDataHandlers = new HashMap();
+           }
+         userDataHandlers.put(key, handler);
+       }
+     return userData.put(key, data);
+   }
+ 
+   public Object getUserData(String key)
+   {
+     if (userData == null)
+       {
+         return null;
+       }
+     return userData.get(key);
+   }
+ 
+   void notifyUserDataHandlers(short op, Node src, Node dst)
+   {
+     if (userDataHandlers != null)
+       {
+         for (Iterator i = userDataHandlers.entrySet().iterator(); i.hasNext(); )
+           {
+             Map.Entry entry = (Map.Entry) i.next();
+             String key = (String) entry.getKey();
+             UserDataHandler handler = (UserDataHandler) entry.getValue();
+             Object data = userData.get(key);
+             handler.handle(op, key, data, src, dst);
+           }
+       }
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buffer = new StringBuffer(getClass().getName());
+     buffer.append("[nodeName=");
+     buffer.append(getNodeName());
+     buffer.append("]");
+     return buffer.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,66 ----
+ /* GnomeNodeList.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ 
+ /**
+  * A DOM node list implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeNodeList
+ implements NodeList
+ {
+ 
+   /**
+    * The node id.
+    */
+   private final Object id;
+ 
+   GnomeNodeList (Object id)
+   {
+     this.id = id;
+   }
+ 
+   public native Node item (int index);
+ 
+   public native int getLength ();
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* GnomeNotation.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.Notation;
+ 
+ /**
+  * A DOM notation node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeNotation
+ extends GnomeNode
+ implements Notation
+ {
+ 
+   GnomeNotation (Object id)
+   {
+     super (id);
+   }
+ 
+   public native String getPublicId ();
+ 
+   public native String getSystemId ();
+ 
+   public String toString ()
+   {
+     String publicId = getPublicId ();
+     StringBuffer buffer = new StringBuffer (getClass ().getName ());
+     buffer.append ("[");
+     if (publicId != null)
+       {
+         buffer.append ("publicId=");
+         buffer.append (publicId);
+         buffer.append (",");
+       }
+     buffer.append ("systemId=");
+     buffer.append (getSystemId ());
+     buffer.append ("]");
+     return buffer.toString ();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeProcessingInstruction.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeProcessingInstruction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeProcessingInstruction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeProcessingInstruction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* GnomeProcessingInstruction.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.ProcessingInstruction;
+ 
+ /**
+  * A DOM processing instruction node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeProcessingInstruction
+ extends GnomeNode
+ implements ProcessingInstruction
+ {
+ 
+   GnomeProcessingInstruction (Object id)
+   {
+     super (id);
+   }
+ 
+   public String getTarget ()
+   {
+     return getNodeName ();
+   }
+ 
+   public native String getData ();
+ 
+   public native void setData (String data)
+     throws DOMException;
+ 
+   public String toString ()
+   {
+     StringBuffer buffer = new StringBuffer (getClass ().getName ());
+     buffer.append ("[data=");
+     buffer.append (getData ());
+     buffer.append ("]");
+     return buffer.toString ();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,130 ----
+ /* GnomeText.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ 
+ /**
+  * A DOM text node implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeText
+ extends GnomeCharacterData
+ implements Text
+ {
+ 
+   GnomeText (Object id)
+   {
+     super (id);
+   }
+   
+   public Text splitText (int offset)
+     throws DOMException
+   {
+     String value = getNodeValue ();
+     String part1 = value.substring (0, offset);
+     String part2 = value.substring (offset);
+     Text text = getOwnerDocument ().createTextNode (part1);
+     getParentNode ().insertBefore (text, this);
+     setNodeValue (part2);
+     return text;
+   }
+   
+   // DOM Level 3
+ 
+   public boolean isElementContentWhitespace ()
+   {
+     return getTextContent ().trim ().length () == 0;
+   }
+   
+   public String getWholeText ()
+   {
+     Node first = this;
+     Node node = getPreviousSibling ();
+     while (node != null && node instanceof Text)
+       {
+         first = node;
+         node = node.getPreviousSibling ();
+       }
+     StringBuffer buf = new StringBuffer (first.getNodeValue ());
+     node = first.getNextSibling ();
+     while (node != null && node instanceof Text)
+       {
+         buf.append (node.getNodeValue ());
+         node = node.getNextSibling ();
+       }
+     return buf.toString ();
+   }
+ 
+   public Text replaceWholeText (String content) throws DOMException
+   {
+     boolean isEmpty = (content == null || content.length () == 0);
+     if (!isEmpty)
+       {
+         setNodeValue (content);
+       }
+     
+     Node first = this;
+     Node node = getPreviousSibling ();
+     while (node != null && node instanceof Text)
+       {
+         first = node;
+         node = node.getPreviousSibling ();
+       }
+     node = first.getNextSibling ();
+     Node parent = getParentNode ();
+     if (first != this || isEmpty)
+       {
+         parent.removeChild (first);
+       }
+     while (node != null && node instanceof Text)
+       {
+         Node tmp = node;
+         node = node.getNextSibling ();
+         if (tmp != this || isEmpty)
+           {
+             parent.removeChild (tmp);
+           }
+       }
+     return (isEmpty) ? null : this;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* GnomeTypeInfo.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.TypeInfo;
+ 
+ /**
+  * Provides XML Schema information about an element or attribute.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeTypeInfo implements TypeInfo
+ {
+ 
+   final Object id;
+ 
+   GnomeTypeInfo(Object id)
+   {
+     this.id = id;
+   }
+ 
+   public native String getTypeName ();
+ 
+   public native String getTypeNamespace ();
+ 
+   public native boolean isDerivedFrom (String typeNamespaceArg,
+                                        String typeNameArg,
+                                        int derivationMethod);
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathExpression.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathExpression.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathExpression.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathExpression.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,86 ----
+ /* GnomeXPathExpression.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.xpath.XPathException;
+ import org.w3c.dom.xpath.XPathExpression;
+ import org.w3c.dom.xpath.XPathNSResolver;
+ 
+ /**
+  * A compiled XPath expression implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeXPathExpression
+ implements XPathExpression
+ {
+ 
+   /**
+    * xmlXPathCompExprPtr
+    */
+   final Object expr;
+ 
+   GnomeXPathExpression (GnomeDocument doc, String expression,
+                         XPathNSResolver resolver)
+   {
+     expr = init (expression);
+     // TODO resolver
+   }
+ 
+   protected void finalize ()
+   {
+     free (expr);
+   }
+ 
+   private native Object init (String expression);
+ 
+   private native void free (Object expr);
+ 
+   public Object evaluate (Node contextNode, short type, Object result)
+     throws XPathException, DOMException
+   {
+     return doEvaluate (expr, contextNode, type, result);
+   }
+   
+   private native Object doEvaluate (Object expr, Node contextNode,
+                                     short type, Object result)
+     throws XPathException, DOMException;
+     
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNSResolver.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNSResolver.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNSResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNSResolver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* GnomeXPathNSResolver.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.xpath.XPathNSResolver;
+ 
+ /**
+  * XPath namespace URI resolver implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeXPathNSResolver
+   implements XPathNSResolver
+ {
+ 
+   Node node;
+ 
+   GnomeXPathNSResolver(Node node)
+   {
+     this.node = node;
+   }
+ 
+   public String lookupNamespaceURI(String prefix)
+   {
+     return node.lookupNamespaceURI(prefix);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNodeList.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNodeList.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNodeList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNodeList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* GnomeXPathNodeList.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ 
+ /**
+  * A node list that uses an XPath result object.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeXPathNodeList
+ implements NodeList
+ {
+ 
+   /**
+    * xmlXPathObjectPtr
+    */
+   final Object obj;
+ 
+   GnomeXPathNodeList (Object obj)
+   {
+     this.obj = obj;
+   }
+ 
+   protected void finalize ()
+   {
+     free(obj);
+   }
+ 
+   private native void free (Object obj);
+ 
+   public native int getLength ();
+ 
+   public native Node item (int index);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,132 ----
+ /* GnomeXPathResult.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.dom;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.xpath.XPathException;
+ import org.w3c.dom.xpath.XPathResult;
+ 
+ /**
+  * An XPath result object implemented in libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeXPathResult
+ implements XPathResult
+ {
+ 
+   /**
+    * xmlXPathObjectPtr
+    */
+   final Object obj;
+ 
+   GnomeXPathResult (Object obj)
+   {
+     this.obj = obj;
+   }
+ 
+   protected void finalize ()
+   {
+     free (obj);
+   }
+ 
+   private native void free (Object obj);
+   
+   public native short getResultType ();
+ 
+   public native double getNumberValue ()
+     throws XPathException;
+ 
+   public native String getStringValue ()
+     throws XPathException;
+ 
+   public native boolean getBooleanValue ()
+     throws XPathException;
+ 
+   public native Node getSingleNodeValue ()
+     throws XPathException;
+ 
+   public native boolean getInvalidIteratorState();
+ 
+   public native int getSnapshotLength ()
+     throws XPathException;
+ 
+   public native Node iterateNext ()
+     throws XPathException, DOMException;
+ 
+   public native Node snapshotItem (int index)
+     throws XPathException;
+ 
+   public String toString ()
+   {
+     short type = getResultType ();
+     switch (type)
+       {
+       case STRING_TYPE:
+         return getStringValue ();
+       case NUMBER_TYPE:
+         return new Double (getNumberValue ()).toString ();
+       case BOOLEAN_TYPE:
+         return Boolean.valueOf (getBooleanValue ()).toString ();
+       case UNORDERED_NODE_SNAPSHOT_TYPE:
+         int len = getSnapshotLength ();
+         switch (len) {
+         case 0:
+           return "[no matches]";
+         case 1:
+           return getSingleNodeValue ().toString ();
+         default:
+           StringBuffer buffer = new StringBuffer ();
+           for (int i = 0; i < len; i++)
+             {
+               if (i > 0)
+                 {
+                   buffer.append (',');
+                 }
+               buffer.append (snapshotItem (i));
+             }
+           return buffer.toString ();
+         }
+       default:
+         return getClass ().getName () + "[type=" + type + ",length=" +
+           getSnapshotLength () + ']';
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,99 ----
+ /* GnomeLocator.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.sax;
+ 
+ import org.xml.sax.Locator;
+ 
+ /**
+  * SAX Locator implementation that uses libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeLocator
+ implements Locator
+ {
+ 
+   // An xmlParserCtxtPtr
+   private final Object ctx;
+ 
+   // An xmlSAXLocatorPtr
+   private final Object loc;
+ 
+   GnomeLocator (Object ctx, Object loc)
+   {
+     this.ctx = ctx;
+     this.loc = loc;
+     if (ctx == null)
+       {
+         throw new NullPointerException ("ctx");
+       }
+     if (loc == null)
+       {
+         throw new NullPointerException ("loc");
+       }
+   }
+   
+   public String getPublicId ()
+   {
+     return publicId (ctx, loc);
+   }
+ 
+   private native String publicId (Object ctx, Object loc);
+ 
+   public String getSystemId ()
+   {
+     return systemId (ctx, loc);
+   }
+ 
+   private native String systemId (Object ctx, Object loc);
+ 
+   public int getLineNumber ()
+   {
+     return lineNumber (ctx, loc);
+   }
+   
+   private native int lineNumber (Object ctx, Object loc);
+ 
+   public int getColumnNumber ()
+   {
+     return columnNumber (ctx, loc);
+   }
+   
+   private native int columnNumber (Object ctx, Object loc);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,105 ----
+ /* GnomeSAXParser.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.sax;
+ 
+ import javax.xml.parsers.SAXParser;
+ 
+ import org.xml.sax.Parser;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXNotSupportedException;
+ import org.xml.sax.XMLReader;
+ 
+ /**
+  * JAXP SAX parser implementation that uses libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class GnomeSAXParser
+ extends SAXParser
+ {
+ 
+   private boolean namespaceAware;
+   private boolean validating;
+ 
+   /**
+    * Creates a new SAX parser.
+    */
+   GnomeSAXParser (boolean namespaceAware, boolean validating)
+   {
+     this.namespaceAware = namespaceAware;
+     this.validating = validating;
+   }
+ 
+   public Parser getParser ()
+     throws SAXException
+   {
+     throw new SAXNotSupportedException ("SAX version 1 not supported");
+   }
+ 
+   public XMLReader getXMLReader ()
+     throws SAXException
+   {
+     return new GnomeXMLReader (namespaceAware, validating);
+   }
+ 
+   public Object getProperty (String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     GnomeXMLReader.checkPropertyName (name);
+     throw new SAXNotSupportedException (name);
+   }
+ 
+   public void setProperty (String name, Object value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     GnomeXMLReader.checkPropertyName (name);
+     throw new SAXNotSupportedException (name);
+   }
+ 
+   public boolean isNamespaceAware ()
+   {
+     return namespaceAware;
+   }
+ 
+   public boolean isValidating ()
+   {
+     return validating;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParserFactory.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParserFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParserFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParserFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* GnomeSAXParserFactory.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.sax;
+ 
+ import java.util.Map;
+ import java.util.HashMap;
+ 
+ import javax.xml.parsers.SAXParser;
+ import javax.xml.parsers.SAXParserFactory;
+ import javax.xml.parsers.ParserConfigurationException;
+ 
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXNotSupportedException;
+ 
+ /**
+  * JAXP SAX parser factory implementation that uses libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class GnomeSAXParserFactory
+ extends SAXParserFactory
+ {
+ 
+   private Map features;
+ 
+   /**
+    * Creates a new SAX parser factory.
+    */
+   public GnomeSAXParserFactory ()
+   {
+     features = new HashMap ();
+   }
+ 
+   public SAXParser newSAXParser ()
+     throws ParserConfigurationException, SAXException
+   {
+     // TODO features
+     return new GnomeSAXParser (isNamespaceAware (), isValidating ());
+   }
+ 
+   public boolean getFeature (String name)
+     throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException
+   {
+     GnomeXMLReader.checkFeatureName (name);
+     Boolean val = (Boolean) features.get (name);
+     return (val == null) ? false : val.booleanValue ();
+   }
+ 
+   public void setFeature (String name, boolean flag)
+     throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException
+   {
+     GnomeXMLReader.checkFeatureName (name);
+     features.put (name, flag ? Boolean.TRUE : Boolean.FALSE);
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1065 ----
+ /* GnomeXMLReader.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.sax;
+ 
+ import java.io.File;
+ import java.io.FileNotFoundException;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.util.Arrays;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.List;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXNotSupportedException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.ext.DeclHandler;
+ import org.xml.sax.ext.LexicalHandler;
+ 
+ import gnu.xml.libxmlj.util.NamedInputStream;
+ import gnu.xml.libxmlj.util.StandaloneLocator;
+ import gnu.xml.libxmlj.util.XMLJ;
+ 
+ /**
+  * A SAX2 parser that uses libxml2.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class GnomeXMLReader
+ implements XMLReader
+ {
+ 
+   static
+   {
+     XMLJ.init ();
+   }
+ 
+   private static final String FEATURES_PREFIX =
+     "http://xml.org/sax/features/";
+   
+   private static final List RECOGNIZED_FEATURES =
+     Arrays.asList (new String[]
+                    {
+                    "external-general-entities",
+                    "external-parameter-entities",
+                    "is-standalone",
+                    "lexical-handler/parameter-entities",
+                    "namespaces",
+                    "namespace-prefixes",
+                    "resolve-dtd-uris",
+                    "string-interning",
+                    "use-attributes2",
+                    "use-locator2",
+                    "use-entity-resolver2",
+                    "validation"
+                    });
+   
+   private static final String PROPERTIES_PREFIX =
+     "http://xml.org/sax/properties/";
+   
+   private static final List RECOGNIZED_PROPERTIES =
+     Arrays.asList (new String[]
+                    {
+                    "declaration-handler",
+                    "dom-node",
+                    "lexical-handler",
+                    "xml-string"
+                    });
+ 
+   // Features
+ 
+   private transient boolean standalone;
+   private boolean namespaces;
+   private boolean namespacePrefixes;
+   private boolean validation;
+ 
+   // Callback handlers
+ 
+   private ContentHandler contentHandler;
+ 
+   private DTDHandler dtdHandler;
+ 
+   private EntityResolver entityResolver;
+ 
+   private ErrorHandler errorHandler;
+ 
+   private DeclHandler declarationHandler;
+ 
+   private LexicalHandler lexicalHandler;
+ 
+   private GnomeLocator locator;
+ 
+   // Namespace helper for handling callbacks
+   private transient Namespaces ns;
+ 
+   // If true, do not invoke callback methods except endDocument
+   private transient boolean seenFatalError;
+ 
+   private transient boolean seenStartDocument;
+ 
+   private transient String base;
+ 
+   public GnomeXMLReader ()
+   {
+     this (true, true);
+   }
+ 
+   public GnomeXMLReader (boolean namespaces, boolean validation)
+   {
+     this.namespaces = namespaces;
+     this.validation = validation;
+     ns = new Namespaces ();
+   }
+ 
+   public ContentHandler getContentHandler ()
+   {
+     return contentHandler;
+   }
+ 
+   public void setContentHandler (ContentHandler handler)
+   {
+     contentHandler = handler;
+   }
+ 
+   public DTDHandler getDTDHandler ()
+   {
+     return dtdHandler;
+   }
+ 
+   public void setDTDHandler (DTDHandler handler)
+   {
+     dtdHandler = handler;
+   }
+ 
+   public EntityResolver getEntityResolver ()
+   {
+     return entityResolver;
+   }
+ 
+   public void setEntityResolver (EntityResolver resolver)
+   {
+     entityResolver = resolver;
+   }
+ 
+   public ErrorHandler getErrorHandler ()
+   {
+     return errorHandler;
+   }
+ 
+   public void setErrorHandler (ErrorHandler handler)
+   {
+     errorHandler = handler;
+   }
+ 
+   // Features
+ 
+   public boolean getFeature (String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     checkFeatureName (name);
+     String key = name.substring (FEATURES_PREFIX.length ());
+     if ("external-general-entities".equals (key))
+       {
+         return validation; // TODO check this
+       }
+     else if ("external-parameter-entities".equals (key))
+       {
+         return validation; // TODO check this
+       }
+     else if ("is-standalone".equals (key))
+       {
+         return standalone;
+       }
+     else if ("namespaces".equals (key))
+       {
+         return namespaces;
+       }
+     else if ("namespace-prefixes".equals (key))
+       {
+         return namespacePrefixes;
+       }
+     else if ("resolve-dtd-uris".equals (key))
+       {
+         return true;
+       }
+     else if ("validation".equals (key))
+       {
+         return validation;
+       }
+     else
+       {
+         return false;
+       }
+   }
+ 
+   public void setFeature (String name, boolean value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     checkFeatureName (name);
+     String key = name.substring (FEATURES_PREFIX.length ());
+     if ("namespaces".equals (key))
+       {
+         namespaces = value;
+       }
+     else if ("namespace-prefixes".equals (key))
+       {
+         namespacePrefixes = value;
+       }
+     else if ("validation".equals (key))
+       {
+         validation = value;
+       }
+   }
+ 
+   /**
+    * Check that the specified feature name is recognized.
+    */
+   static void checkFeatureName (String name)
+     throws SAXNotRecognizedException
+   {
+     if (name == null || !name.startsWith (FEATURES_PREFIX))
+       {
+         throw new SAXNotRecognizedException (name);
+       }
+     String key = name.substring (FEATURES_PREFIX.length ());
+     if (!RECOGNIZED_FEATURES.contains (key))
+       {
+         throw new SAXNotRecognizedException (name);
+       }
+   }
+ 
+   // Properties
+ 
+   public Object getProperty (String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     checkPropertyName (name);
+     String key = name.substring (PROPERTIES_PREFIX.length ());
+     if ("declaration-handler".equals (key))
+       {
+         return getDeclarationHandler ();
+       }
+     else if ("lexical-handler".equals (key))
+       {
+         return getLexicalHandler ();
+       }
+     else
+       {
+         throw new SAXNotSupportedException (name);
+       }
+   }
+ 
+   public void setProperty (String name, Object value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     checkPropertyName (name);
+     String key = name.substring (PROPERTIES_PREFIX.length ());
+     if ("declaration-handler".equals (key))
+       {
+         setDeclarationHandler ((DeclHandler) value);
+       }
+     else if ("lexical-handler".equals (key))
+       {
+         setLexicalHandler ((LexicalHandler) value);
+       }
+   }
+ 
+   public DeclHandler getDeclarationHandler ()
+   {
+     return declarationHandler;
+   }
+ 
+   public void setDeclarationHandler (DeclHandler declarationHandler)
+   {
+     this.declarationHandler = declarationHandler;
+   }
+ 
+   public LexicalHandler getLexicalHandler ()
+   {
+     return lexicalHandler;
+   }
+ 
+   public void setLexicalHandler (LexicalHandler lexicalHandler)
+   {
+     this.lexicalHandler = lexicalHandler;
+   }
+ 
+   /**
+    * Check that the specified property name is recognized.
+    */
+   static void checkPropertyName (String name)
+     throws SAXNotRecognizedException
+   {
+     if (!name.startsWith (PROPERTIES_PREFIX))
+       {
+         throw new SAXNotRecognizedException (name);
+       }
+     String key = name.substring (PROPERTIES_PREFIX.length ());
+     if (!RECOGNIZED_PROPERTIES.contains (key))
+       {
+         throw new SAXNotRecognizedException (name);
+       }
+   }
+ 
+   // Parse
+ 
+   public void parse (String systemId)
+     throws IOException, SAXException
+   {
+     URL url = null;
+     try
+       {
+         url = new URL (systemId);
+       }
+     catch (MalformedURLException e)
+       {
+         File file = new File(systemId);
+         if (!file.exists ())
+           {
+             throw new FileNotFoundException (systemId);
+           }
+         String path  = file.getAbsolutePath();
+         if (File.separatorChar != '/')
+           {
+             path = path.replace (File.separatorChar, '/');
+           }
+         if (!path.startsWith ("/"))
+           {
+             path = "/" + path;
+           }
+         if (!path.endsWith ("/") && file.isDirectory ())
+           {
+             path = path + "/";
+           }
+         url = new URL ("file:" + path);
+       }
+     InputSource source = new InputSource(url.toString ());
+     source.setByteStream (url.openStream ());
+     parse (source);
+   }
+ 
+   public synchronized void parse (InputSource input)
+     throws IOException, SAXException
+   {
+     NamedInputStream in = XMLJ.getInputStream (input);
+     byte[] detectBuffer = in.getDetectBuffer ();
+     String publicId = input.getPublicId ();
+     String systemId = input.getSystemId ();
+     base = XMLJ.getBaseURI (systemId);
+     // Reset state
+     standalone = false;
+     seenFatalError = false;
+     seenStartDocument = false;
+     if (systemId != null)
+       {
+         int lsi = systemId.lastIndexOf ('/');
+         if (lsi != -1)
+           {
+             base = systemId.substring (0, lsi + 1);
+           }
+       }
+     // Handle zero-length document
+     if (detectBuffer == null)
+       {
+         startDocument (true);
+         fatalError ("No document element", 0, 0, publicId, systemId);
+         endDocument ();
+         return;
+       }
+     // Parse
+     parseStream(in,
+                 detectBuffer,
+                 publicId,
+                 systemId,
+                 base,
+                 validation,
+                 contentHandler != null,
+                 dtdHandler != null,
+                 entityResolver != null,
+                 errorHandler != null,
+                 declarationHandler != null,
+                 lexicalHandler != null);
+     in.close ();
+   }
+ 
+   native void parseStream (InputStream in,
+                            byte[] detectBuffer,
+                            String publicId,
+                            String systemId,
+                            String base,
+                            boolean validate,
+                            boolean contentHandler,
+                            boolean dtdHandler,
+                            boolean entityResolver,
+                            boolean errorHandler,
+                            boolean declarationHandler,
+                            boolean lexicalHandler)
+     throws IOException, SAXException;
+ 
+   String getURI (String prefix)
+   {
+     if (!namespaces)
+       {
+         return null;
+       }
+     return ns.getURI (prefix);
+   }
+ 
+   // Callbacks from libxmlj
+ 
+   private void startDTD (String name, String publicId, String systemId)
+     throws SAXException
+   {
+     if (seenFatalError || lexicalHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         systemId = XMLJ.getAbsoluteURI (base, systemId);
+         lexicalHandler.startDTD (name, publicId, systemId);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void externalEntityDecl (String name, String publicId,
+                                    String systemId)
+     throws SAXException
+   {
+     if (seenFatalError || declarationHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         systemId = XMLJ.getAbsoluteURI (base, systemId);
+         declarationHandler.externalEntityDecl (name, publicId, systemId);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void internalEntityDecl (String name, String value)
+     throws SAXException
+   {
+     if (seenFatalError || declarationHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         declarationHandler.internalEntityDecl (name, value);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private InputStream resolveEntity (String publicId, String systemId)
+     throws SAXException, IOException
+   {
+     if (entityResolver == null)
+       {
+         return null;
+       }
+     try
+       {
+         systemId = XMLJ.getAbsoluteURI (base, systemId);
+         InputSource source = entityResolver.resolveEntity (publicId, systemId);
+         return (source == null) ? null : XMLJ.getInputStream (source);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void notationDecl (String name, String publicId, String systemId)
+     throws SAXException
+   {
+     if (seenFatalError || dtdHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         systemId = XMLJ.getAbsoluteURI (base, systemId);
+         dtdHandler.notationDecl (name, publicId, systemId);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void attributeDecl (String eName, String aName, String type,
+                               String mode, String value)
+     throws SAXException
+   {
+     if (seenFatalError || declarationHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         declarationHandler.attributeDecl (eName, aName, type, mode, value);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void elementDecl (String name, String model)
+     throws SAXException
+   {
+     if (seenFatalError || declarationHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         declarationHandler.elementDecl (name, model);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void unparsedEntityDecl (String name, String publicId,
+                                    String systemId, String notationName)
+     throws SAXException
+   {
+     if (seenFatalError || dtdHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         systemId = XMLJ.getAbsoluteURI (base, systemId);
+         dtdHandler.unparsedEntityDecl (name, publicId, systemId,
+                                        notationName);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void setDocumentLocator (Object ctx, Object loc)
+   {
+     locator = new GnomeLocator (ctx, loc);
+     if (seenFatalError || contentHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         contentHandler.setDocumentLocator (locator);
+       }
+     catch (Exception e)
+       {
+       }
+   }
+   
+   private void startDocument (boolean standalone)
+     throws SAXException
+   {
+     this.standalone = standalone;
+     seenStartDocument = true;
+     if (contentHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         contentHandler.startDocument ();
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void endDocument ()
+     throws SAXException
+   {
+     if (contentHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         contentHandler.endDocument();
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void startElement(String name, String[] attrs)
+     throws SAXException
+   {
+     if (seenFatalError || contentHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         XMLName xName = new XMLName (this, name);
+         if (namespaces)
+           {
+             // Handle defined namespaces
+             ns.push ();
+             int len = (attrs == null) ? 0 : attrs.length;
+             if (len > 0)
+               {
+                 ArrayList filtered = new ArrayList (len);
+                 for (int i = 0; i < len; i += 2)
+                   {
+                     String attName = attrs[i];
+                     String attValue = attrs[i + 1];
+                     if (attName.equals ("xmlns"))
+                       {
+                         startPrefixMapping ("", attValue);
+                       }
+                     else if (attName.startsWith ("xmlns:"))
+                       {
+                         startPrefixMapping (attName.substring (6), attValue);
+                       }
+                     else
+                       {
+                         filtered.add (attName);
+                         filtered.add (attValue);
+                       }
+                   }
+                 // Remove xmlns attributes
+                 attrs = new String[filtered.size ()];
+                 filtered.toArray (attrs);
+               }
+           }
+         // Construct attributes
+         Attributes atts = new StringArrayAttributes (this, attrs);
+         contentHandler.startElement (xName.uri, xName.localName, xName.qName,
+                                      atts);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void endElement (String name)
+     throws SAXException
+   {
+     if (seenFatalError || contentHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         XMLName xName = new XMLName (this, name);
+         String uri = (xName.uri == null) ? "" : xName.uri;
+         contentHandler.endElement (uri, xName.localName, xName.qName);
+         // Handle undefining namespaces
+         if (namespaces)
+           {
+             for (Iterator i = ns.currentPrefixes (); i.hasNext (); )
+               {
+                 endPrefixMapping ((String) i.next ());
+               }
+             ns.pop (); // releases current depth
+           }
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void startPrefixMapping (String prefix, String uri)
+     throws SAXException
+   {
+     if (seenFatalError || contentHandler == null)
+       {
+         return;
+       }
+     ns.define (prefix, uri);
+     contentHandler.startPrefixMapping (prefix, uri);
+   }
+ 
+   private void endPrefixMapping (String prefix)
+     throws SAXException
+   {
+     if (seenFatalError || contentHandler == null)
+       {
+         return;
+       }
+     contentHandler.endPrefixMapping (prefix);
+   }
+ 
+   private void characters (String text)
+     throws SAXException
+   {
+     if (seenFatalError || contentHandler == null || text == null)
+       {
+         return;
+       }
+     try
+       {
+         char[] ch = text.toCharArray ();
+         contentHandler.characters (ch, 0, ch.length);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void ignorableWhitespace (String text)
+     throws SAXException
+   {
+     if (seenFatalError || contentHandler == null || text == null)
+       {
+         return;
+       }
+     try
+       {
+         char[] ch = text.toCharArray ();
+         contentHandler.ignorableWhitespace (ch, 0, ch.length);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void processingInstruction (String target, String data)
+     throws SAXException
+   {
+     if (seenFatalError || contentHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         if (data == null)
+           {
+             data = "";
+           }
+         contentHandler.processingInstruction (target, data);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void comment (String text)
+     throws SAXException
+   {
+     if (seenFatalError || lexicalHandler == null || text == null)
+       {
+         return;
+       }
+     try
+       {
+         char[] ch = text.toCharArray ();
+         lexicalHandler.comment (ch, 0, ch.length);
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void cdataBlock (String text)
+     throws SAXException
+   {
+     if (seenFatalError || text == null)
+       {
+         return;
+       }
+     try
+       {
+         if (lexicalHandler == null)
+           {
+             characters(text);
+           }
+         else
+           {
+             lexicalHandler.startCDATA();
+             characters(text);
+             lexicalHandler.endCDATA();
+           }
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void warning (String message,
+                         int lineNumber, int columnNumber,
+                         String publicId, String systemId)
+     throws SAXException
+   {
+     if (seenFatalError || errorHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         Locator l = new StandaloneLocator (lineNumber, columnNumber,
+                                            publicId, systemId);
+         errorHandler.warning (new SAXParseException (message, l));
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void error (String message,
+                       int lineNumber, int columnNumber,
+                       String publicId, String systemId)
+     throws SAXException
+   {
+     if (seenFatalError || errorHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         Locator l = new StandaloneLocator (lineNumber, columnNumber,
+                                            publicId, systemId);
+         errorHandler.error (new SAXParseException (message, l));
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+   private void fatalError (String message,
+                            int lineNumber, int columnNumber,
+                            String publicId, String systemId)
+     throws SAXException
+   {
+     if (seenFatalError || errorHandler == null)
+       {
+         return;
+       }
+     try
+       {
+         if (!seenStartDocument)
+           {
+             startDocument (false);
+           }
+         seenFatalError = true;
+         Locator l = new StandaloneLocator (lineNumber, columnNumber,
+                                            publicId, systemId);
+         errorHandler.fatalError (new SAXParseException (message, l));
+       }
+     catch (Exception e)
+       {
+         if (e instanceof SAXException)
+           {
+             throw (SAXException) e;
+           }
+         else
+           {
+             throw new SAXException (e);
+           }
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,122 ----
+ /* Namespaces.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.sax;
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ 
+ /**
+  * Helper class for managing namespaces.
+  * 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class Namespaces
+ {
+ 
+   ArrayList stack = new ArrayList ();
+   
+   /**
+    * Increments the tree depth.
+    * This allocates a new potential namespace entry.
+    */
+   void push ()
+   {
+     stack.add (null);
+   }
+ 
+   /**
+    * Decrements the tree depth.
+    * This removes namespaces defined at the extremity.
+    */
+   void pop ()
+   {
+     stack.remove (stack.size() - 1);
+   }
+ 
+   /**
+    * Searches for the namespace URI corresponding to the specified prefix.
+    */
+   String getURI (String prefix)
+   {
+     for (int i = stack.size () - 1; i >= 0; i--)
+     {
+       HashMap ns = (HashMap) stack.get (i);
+       if (ns != null && ns.containsKey (prefix))
+       {
+         String ret = (String) ns.get (prefix);
+         return (ret == null) ? "" : ret;
+       }
+     }
+     return "";
+   }
+ 
+   /**
+    * Defines the specified prefix-URI mapping at the current depth in the
+    * tree.
+    */
+   void define (String prefix, String uri)
+   {
+     int index = stack.size () - 1;
+     HashMap ns = (HashMap) stack.get (index);
+     if (ns == null)
+     {
+       ns = new HashMap ();
+       stack.set (index, ns);
+     }
+     ns.put (prefix, uri);
+   }
+ 
+   /**
+    * Returns an iterator over the prefixes defined at the current depth.
+    */
+   Iterator currentPrefixes ()
+   {
+     HashMap ns = (HashMap) stack.get (stack.size () - 1);
+     if (ns == null)
+       {
+         return Collections.EMPTY_LIST.iterator ();
+       }
+     else
+       {
+         return ns.keySet ().iterator ();
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,171 ----
+ /* StringArrayAttributes.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.sax;
+ 
+ import org.xml.sax.Attributes;
+ 
+ /**
+  * An implementation of Attributes that reads values from an array of
+  * strings, supplied by libxml2.
+  * Each pair of elements in the array represents a key followed by a value.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class StringArrayAttributes
+ implements Attributes
+ {
+ 
+   private int len;
+   private XMLName[] keys;
+   private String[] values;
+ 
+   StringArrayAttributes (GnomeXMLReader parser, String[] pairs)
+   {
+     len = (pairs == null) ? 0 : pairs.length / 2;
+     keys = new XMLName[len];
+     values = new String[len];
+     for (int i = 0; i < len; i++)
+     {
+       int pairIndex = i * 2;
+       keys[i] = new XMLName (parser, pairs[pairIndex]);
+       values[i] = pairs[pairIndex + 1];
+     }
+   }
+ 
+   public int getLength ()
+   {
+     return len;
+   }
+ 
+   public String getURI (int index)
+   {
+     if (index < 0 || index >= len)
+       {
+         return null;
+       }
+     return keys[index].uri;
+   }
+ 
+   public String getLocalName (int index)
+   {
+     if (index < 0 || index >= len)
+       {
+         return null;
+       }
+     return keys[index].localName;
+   }
+ 
+   public String getQName (int index)
+   {
+     if (index < 0 || index >= len)
+       {
+         return null;
+       }
+     return keys[index].qName;
+   }
+ 
+   public String getType (int index)
+   {
+     if (index < 0 || index >= len)
+       {
+         return null;
+       }
+     // TODO can we get this information from libxml2?
+     return "CDATA";
+   }
+ 
+   public String getValue (int index)
+   {
+     if (index < 0 || index >= len)
+       {
+         return null;
+       }
+     return values[index];
+   }
+ 
+   public int getIndex (String uri, String localName)
+   {
+     for (int i = 0; i < len; i++)
+     {
+       XMLName key = keys[i];
+       if (key.localName.equals (localName))
+       {
+         if ((key.uri == null && uri == null) ||
+             (key.uri != null && key.uri.equals(uri)))
+           {
+             return i;
+           }
+       }
+     }
+     return -1;
+   }
+ 
+   public int getIndex (String qName)
+   {
+     for (int i = 0; i < len; i++)
+     {
+       if (keys[i].qName.equals (qName))
+         {
+           return i;
+         }
+     }
+     return -1;
+   }
+ 
+   public String getType (String uri, String localName)
+   {
+     return getType (getIndex (uri, localName));
+   }
+ 
+   public String getType (String qName)
+   {
+     return getType (getIndex (qName));
+   }
+ 
+   public String getValue (String uri, String localName)
+   {
+     return getValue (getIndex (uri, localName));
+   }
+ 
+   public String getValue (String qName)
+   {
+     return getValue (getIndex (qName));
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* XMLName.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.sax;
+ 
+ /**
+  * Structure containing the components of an XML element/attribute name.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class XMLName
+ {
+ 
+   private static final String XML_URI = "http://www.w3.org/XML/1998/namespace";
+   
+   final String uri;
+   final String localName;
+   final String qName;
+   final String prefix;
+ 
+   XMLName (GnomeXMLReader parser, String qName)
+   {
+     this.qName = qName;
+     int ci = qName.lastIndexOf (':');
+     if (ci < 1)
+       {
+         localName = qName;
+         prefix = null;
+         uri = "";
+       }
+     else
+       {
+         localName = qName.substring (ci + 1);
+         prefix = qName.substring (0, ci);
+         if ("xml".equals (prefix))
+           {
+             if ("lang".equals (localName) || "space".equals (localName))
+               {
+                 uri = XML_URI;
+               }
+             else
+               {
+                 uri = parser.getURI (prefix);
+               }
+           }
+         else
+           {
+             uri = parser.getURI (prefix);
+           }
+       }
+   }
+ 
+   public String toString ()
+   {
+     return qName;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/ErrorListenerErrorHandler.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/ErrorListenerErrorHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/ErrorListenerErrorHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/ErrorListenerErrorHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /* ErrorListenerErrorHandler.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.transform;
+ 
+ import javax.xml.transform.ErrorListener;
+ import javax.xml.transform.TransformerException;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ 
+ /**
+  * Provides a SAX ErrorHandler interface to an ErrorListener.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class ErrorListenerErrorHandler
+ implements ErrorHandler
+ {
+ 
+   private ErrorListener listener;
+ 
+   ErrorListenerErrorHandler (ErrorListener listener)
+   {
+     this.listener = listener;
+   }
+ 
+   public void warning (SAXParseException e)
+     throws SAXException
+   {
+     try
+       {
+         listener.warning (new TransformerException (e));
+       }
+     catch (TransformerException te)
+       {
+         throw getSAXException (te);
+       }
+   }
+   
+   public void error (SAXParseException e)
+     throws SAXException
+   {
+     try
+       {
+         listener.error (new TransformerException (e));
+       }
+     catch (TransformerException te)
+       {
+         throw getSAXException (te);
+       }
+   }
+   
+   public void fatalError (SAXParseException e)
+     throws SAXException
+   {
+     try
+       {
+         listener.fatalError (new TransformerException (e));
+       }
+     catch (TransformerException te)
+       {
+         throw getSAXException (te);
+       }
+   }
+ 
+   private SAXException getSAXException (TransformerException e)
+   {
+     Throwable cause = e.getCause ();
+     if (cause instanceof SAXException)
+       {
+         return (SAXException) cause;
+       }
+     return new SAXException (e);
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,572 ----
+ /* GnomeTransformer.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.transform;
+ 
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ import java.net.URL;
+ 
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Properties;
+ 
+ import javax.xml.transform.ErrorListener;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.SourceLocator;
+ import javax.xml.transform.Result;
+ import javax.xml.transform.Templates;
+ import javax.xml.transform.Transformer;
+ import javax.xml.transform.TransformerConfigurationException;
+ import javax.xml.transform.TransformerException;
+ import javax.xml.transform.URIResolver;
+ 
+ import javax.xml.transform.dom.DOMSource;
+ import javax.xml.transform.dom.DOMResult;
+ import javax.xml.transform.sax.SAXResult;
+ import javax.xml.transform.stream.StreamSource;
+ import javax.xml.transform.stream.StreamResult;
+ 
+ import org.w3c.dom.Node;
+ 
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.ErrorHandler;
+ 
+ import gnu.xml.libxmlj.dom.GnomeDocument;
+ import gnu.xml.libxmlj.sax.GnomeXMLReader;
+ import gnu.xml.libxmlj.util.NamedInputStream;
+ import gnu.xml.libxmlj.util.StandaloneLocator;
+ import gnu.xml.libxmlj.util.XMLJ;
+ 
+ /**
+  * An implementation of {@link javax.xml.transform.Transformer} which
+  * performs XSLT transformation using <code>libxslt</code>.
+  *
+  * @author Julian Scheid
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class GnomeTransformer
+   extends Transformer
+   implements Templates
+ {
+ 
+   /**
+    * The parameters added by the user via {@link setParameter()}.
+    */
+   private Map parameters;
+ 
+   /**
+    * The output properties set by the user.
+    */
+   private Properties outputProperties;
+ 
+   /**
+    * The URI resolver to use during transformation.
+    */
+   private URIResolver resolver;
+ 
+   /**
+    * The error listener for transformation errors.
+    */
+   private ErrorListener errorListener;
+ 
+   /**
+    * Handle to the source stylesheet.
+    * This is a native pointer of type xsltStylesheetPtr.
+    */
+   private Object stylesheet;
+ 
+   /**
+    * Constructor.
+    * @param source the XSLT stylesheet document source
+    * @param resolver the resolver to use during transformation
+    * @param errorListener the error listener for transformation errors
+    */
+   GnomeTransformer (Source source,
+                     URIResolver resolver, 
+                     ErrorListener errorListener) 
+     throws TransformerConfigurationException
+   {
+     this.resolver = resolver;
+     this.errorListener = errorListener;
+     parameters = new HashMap ();
+     outputProperties = new Properties ();
+    
+     if (source == null)
+       {
+         stylesheet = newStylesheet ();
+       } 
+     else if (source instanceof StreamSource)
+       {
+         try
+           {
+             StreamSource ss = (StreamSource) source;
+             NamedInputStream in = XMLJ.getInputStream (ss);
+             String systemId = ss.getSystemId ();
+             String publicId = ss.getPublicId ();
+             String base = XMLJ.getBaseURI (systemId);
+             byte[] detectBuffer = in.getDetectBuffer ();
+             if (detectBuffer == null)
+               {
+                 String msg = "No document element";
+                 throw new TransformerConfigurationException (msg);
+               }
+             stylesheet = newStylesheetFromStream (in, detectBuffer, publicId,
+                                                   systemId, base,
+                                                   (resolver != null),
+                                                   (errorListener != null));
+           }
+         catch (IOException e)
+           {
+             throw new TransformerConfigurationException (e);
+           }
+       }
+     else if (source instanceof DOMSource)
+       {
+         DOMSource ds = (DOMSource) source;
+         Node node = ds.getNode ();
+         if (!(node instanceof GnomeDocument))
+           {
+             String msg = "Node is not a GnomeDocument";
+             throw new TransformerConfigurationException (msg);
+           }
+         GnomeDocument doc = (GnomeDocument) node;
+         stylesheet = newStylesheetFromDoc (doc);
+       }
+     else
+       {
+         String msg = "Source type not supported (" + source + ")";
+         throw new TransformerConfigurationException (msg);
+       }
+   }
+   
+   /**
+    * Copy constructor.
+    */
+   private GnomeTransformer (Object stylesheet,
+                             URIResolver resolver, 
+                             ErrorListener errorListener,
+                             Map parameters,
+                             Properties outputProperties)
+   {
+     this.stylesheet = stylesheet;
+     this.resolver = resolver;
+     this.errorListener = errorListener;
+     this.parameters = parameters;
+     this.outputProperties = outputProperties;
+   }
+ 
+   private native Object newStylesheet ()
+     throws TransformerConfigurationException;
+ 
+   private native Object newStylesheetFromStream (InputStream in,
+                                                  byte[] detectBuffer,
+                                                  String publicId,
+                                                  String systemId,
+                                                  String base,
+                                                  boolean entityResolver,
+                                                  boolean errorHandler)
+     throws TransformerConfigurationException;
+ 
+   private native Object newStylesheetFromDoc (GnomeDocument doc)
+     throws TransformerConfigurationException;
+ 
+   //--- Implementation of javax.xml.transform.Transformer follows.
+ 
+   // Set, get and clear the parameters to use on transformation
+ 
+   public synchronized void setParameter (String parameter, Object value)
+   {
+     parameters.put (parameter, value);
+   } 
+ 
+   public synchronized Object getParameter (String name)
+   {
+     return parameters.get (name);
+   }
+ 
+   public synchronized void clearParameters ()
+   {
+     parameters.clear ();
+   }
+ 
+   // Set and get the ErrorListener to use on transformation
+ 
+   public void setErrorListener (ErrorListener listener)
+   {
+     this.errorListener = listener;
+   } 
+ 
+   public ErrorListener getErrorListener ()
+   {
+     return errorListener;
+   }
+ 
+   // Set and get the URIResolver to use on transformation
+ 
+   public void setURIResolver (URIResolver resolver)
+   {
+     this.resolver = resolver;
+   } 
+ 
+   public URIResolver getURIResolver ()
+   {
+     return resolver;
+   }
+ 
+   // Set the output properties to use on transformation; get default
+   // output properties and output properties specified in the
+   // stylesheet or by the user.
+ 
+   public void setOutputProperties (Properties outputProperties)
+   {
+     // Note: defensive copying
+     this.outputProperties = new Properties (outputProperties);
+   } 
+ 
+   public void setOutputProperty (String name, String value)
+   {
+     outputProperties.setProperty (name, value);
+   } 
+ 
+   public Properties getOutputProperties ()
+   {
+     // Note: defensive copying
+     return new Properties (this.outputProperties);
+   }
+ 
+   public String getOutputProperty (String name)
+   {
+     return outputProperties.getProperty (name);
+   }
+ 
+   // -- Templates --
+ 
+   public Transformer newTransformer ()
+   {
+     return new GnomeTransformer (stylesheet, resolver, errorListener,
+                                  new HashMap (parameters),
+                                  new Properties (outputProperties));
+   }
+ 
+   // -- transform --
+ 
+   /**
+    * Transforms the given source and writes the result to the
+    * given target.
+    */
+   public void transform (Source source, Result result)
+     throws TransformerException
+   {
+     if (source instanceof StreamSource)
+       {
+         try
+           {
+             StreamSource ss = (StreamSource) source;
+             NamedInputStream in = XMLJ.getInputStream (ss);
+             String publicId = ss.getPublicId ();
+             String systemId = ss.getSystemId ();
+             String base = XMLJ.getBaseURI (systemId);
+             byte[] detectBuffer = in.getDetectBuffer ();
+             if (detectBuffer == null)
+               {
+                 throw new TransformerException ("No document element");
+               }
+             if (result instanceof StreamResult)
+               {
+                 OutputStream out = XMLJ.getOutputStream ((StreamResult) result);
+                 transformStreamToStream (in, detectBuffer, publicId, systemId,
+                                          base, (resolver != null),
+                                          (errorListener != null), out);
+               }
+             else if (result instanceof DOMResult)
+               {
+                 DOMResult dr = (DOMResult) result;
+                 GnomeDocument ret =
+                   transformStreamToDoc (in, detectBuffer, publicId, systemId,
+                                         base, (resolver != null),
+                                         (errorListener != null));
+                 dr.setNode (ret);
+                 dr.setSystemId (null);
+               }
+             else if (result instanceof SAXResult)
+               {
+                 SAXResult sr = (SAXResult) result;
+                 transformStreamToSAX (in, detectBuffer, publicId, systemId,
+                                       base, (resolver != null),
+                                       (errorListener != null),
+                                       getSAXContext (sr));
+               }
+             else
+               {
+                 String msg = "Result type not supported (" + result + ")";
+                 throw new TransformerConfigurationException (msg);
+               }
+           }
+         catch (IOException e)
+           {
+             throw new TransformerException (e);
+           }
+       }
+     else if (source instanceof DOMSource)
+       {
+         DOMSource ds = (DOMSource) source;
+         Node node = ds.getNode ();
+         if (!(node instanceof GnomeDocument))
+           {
+             String msg = "Node is not a GnomeDocument (" + node + ")";
+             throw new TransformerException (msg);
+           }
+         GnomeDocument doc = (GnomeDocument) node;
+         if (result instanceof StreamResult)
+           {
+             try
+               {
+                 OutputStream out = XMLJ.getOutputStream ((StreamResult) result);
+                 transformDocToStream (doc, out);
+               }
+             catch (IOException e)
+               {
+                 throw new TransformerException (e);
+               }
+           }
+         else if (result instanceof DOMResult)
+           {
+             DOMResult dr = (DOMResult) result;
+             GnomeDocument ret = transformDocToDoc (doc);
+             dr.setNode (ret);
+             dr.setSystemId (null);
+           }
+         else if (result instanceof SAXResult)
+           {
+             SAXResult sr = (SAXResult) result;
+             transformDocToSAX (doc, getSAXContext (sr));
+           }
+         else
+           {
+             String msg = "Result type not supported";
+             throw new TransformerConfigurationException (msg);
+           }
+       }
+     else
+       {
+         String msg = "Source type not supported";
+         throw new TransformerConfigurationException (msg);
+       }
+   }
+ 
+   private GnomeXMLReader getSAXContext (SAXResult result)
+   {
+     GnomeXMLReader ctx = new GnomeXMLReader ();
+     ctx.setContentHandler (result.getHandler ());
+     ctx.setLexicalHandler (result.getLexicalHandler ());
+     if (errorListener != null)
+       {
+         ErrorHandler errorHandler =
+           new ErrorListenerErrorHandler (errorListener);
+         ctx.setErrorHandler (errorHandler);
+       }
+     if (resolver != null)
+       {
+         EntityResolver entityResolver =
+           new URIResolverEntityResolver (resolver);
+         ctx.setEntityResolver (entityResolver);
+       }
+     return ctx;
+   }
+ 
+   private native void transformStreamToStream (InputStream in,
+                                                byte[] detectBuffer,
+                                                String publicId,
+                                                String systemId,
+                                                String base,
+                                                boolean entityResolver,
+                                                boolean errorHandler,
+                                                OutputStream out)
+     throws TransformerException;
+ 
+   private native GnomeDocument transformStreamToDoc (InputStream in,
+                                                      byte[] detectBuffer,
+                                                      String publicId,
+                                                      String systemId,
+                                                      String base,
+                                                      boolean entityResolver,
+                                                      boolean errorHandler)
+     throws TransformerException;
+ 
+   private native void transformStreamToSAX (InputStream in,
+                                             byte[] detectBuffer,
+                                             String publicId,
+                                             String systemId,
+                                             String base,
+                                             boolean entityResolver,
+                                             boolean errorHandler,
+                                             GnomeXMLReader out)
+     throws TransformerException;
+ 
+   private native void transformDocToStream (GnomeDocument in,
+                                             OutputStream out)
+     throws TransformerException;
+ 
+   private native GnomeDocument transformDocToDoc (GnomeDocument in)
+     throws TransformerException;
+ 
+   private native void transformDocToSAX (GnomeDocument in,
+                                          GnomeXMLReader out)
+     throws TransformerException;
+ 
+   /*
+    * Retrieve parameters as a string array.
+    * This is a convenience method called from native code.
+    */
+   private String[] getParameterArray ()
+   {
+     String[] parameterArray = new String[parameters.size () * 2];
+     int index = 0;
+     for (Iterator it = parameters.keySet ().iterator ();
+          it.hasNext ();
+          ++index)
+       {
+         String parameterKey = (String) it.next ();
+         String parameterValue = (String) parameters.get (parameterKey);
+         parameterArray[index * 2 + 0] = parameterKey;
+         parameterArray[index * 2 + 1] =
+           "'" + ((parameterValue != null) ? parameterValue : "") + "'";
+         // FIXME encode parameter value correctly for XPath
+       }
+     return parameterArray;
+   }
+ 
+   // -- Free xsltStylesheet handle --
+ 
+   public void finalize ()
+   {
+     if (stylesheet != null)
+       {
+         free ();
+         stylesheet = null;
+       }
+   }
+ 
+   private native void free ();
+ 
+   // -- Callbacks --
+ 
+   private InputStream resolveEntity (String publicId, String systemId)
+     throws TransformerException
+   {
+     if (resolver != null)
+       {
+         systemId = resolver.resolve (null, systemId).getSystemId ();
+       }
+     if (systemId == null)
+       {
+         return null;
+       }
+     try
+       {
+         URL url = new URL (systemId);
+         return XMLJ.getInputStream (url);
+       }
+     catch (IOException e)
+       {
+         throw new TransformerException (e);
+       }
+   }
+   
+   private void setDocumentLocator (Object ctx, Object loc)
+   {
+   }
+ 
+   private void warning (String message,
+                         int lineNumber,
+                         int columnNumber,
+                         String publicId,
+                         String systemId)
+     throws TransformerException
+   {
+     if (errorListener == null)
+       {
+         return;
+       }
+     SourceLocator l = new StandaloneLocator (lineNumber,
+                                              columnNumber,
+                                              publicId,
+                                              systemId);
+     errorListener.warning (new TransformerException (message, l));
+   }
+ 
+   private void error (String message,
+                       int lineNumber,
+                       int columnNumber,
+                       String publicId,
+                       String systemId)
+     throws TransformerException
+   {
+     if (errorListener == null)
+       {
+         return;
+       }
+     SourceLocator l = new StandaloneLocator (lineNumber,
+                                              columnNumber,
+                                              publicId,
+                                              systemId);
+     errorListener.error (new TransformerException (message, l));
+   }
+   
+   private void fatalError (String message,
+                            int lineNumber,
+                            int columnNumber,
+                            String publicId,
+                            String systemId)
+     throws TransformerException
+   {
+     if (errorListener == null)
+       {
+         return;
+       }
+     SourceLocator l = new StandaloneLocator (lineNumber,
+                                              columnNumber,
+                                              publicId,
+                                              systemId);
+     errorListener.fatalError (new TransformerException (message, l));
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,349 ----
+ /* GnomeTransformerFactory.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.transform;
+ 
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ import javax.xml.parsers.FactoryConfigurationError;
+ import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.parsers.SAXParser;
+ import javax.xml.parsers.SAXParserFactory;
+ 
+ import javax.xml.transform.ErrorListener;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.Templates;
+ import javax.xml.transform.Transformer;
+ import javax.xml.transform.TransformerFactory;
+ import javax.xml.transform.TransformerConfigurationException;
+ import javax.xml.transform.URIResolver;
+ 
+ import javax.xml.transform.dom.DOMResult;
+ import javax.xml.transform.dom.DOMSource;
+ import javax.xml.transform.sax.SAXSource;
+ import javax.xml.transform.stream.StreamResult;
+ import javax.xml.transform.stream.StreamSource;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.Node;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.helpers.DefaultHandler;
+ 
+ import gnu.xml.libxmlj.util.XMLJ;
+ 
+ /**
+  *  An implementation of <code>TransformerFactory</code> producing
+  *  <code>Transformer</code> objects which use <code>libxslt</code>
+  *  for transformation.
+  *
+  *  @author Julian Scheid
+  *  @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class GnomeTransformerFactory
+   extends TransformerFactory
+ {
+ 
+   static
+   {
+     XMLJ.init ();
+   }
+   
+   /**
+    *  URIResolver set by user, or default implementation.
+    */
+   private URIResolver uriResolver;
+ 
+   /**
+    *  ErrorListener set by user, or default implementation.
+    */
+   private ErrorListener errorListener;
+ 
+   /**
+    *  Attributes set by user.
+    */
+   private Map attributes = new HashMap ();
+ 
+   //--- Implementation of javax.xml.transform.TransformerFactory
+   //--- follows.
+   
+   // -- begin getAssociatedStylesheet implementation --
+ 
+   /**
+    * Returns the stylesheet associated with the specified XML source, or
+    * <code>null</code> if no associated stylesheet could be found.
+    */
+   public Source getAssociatedStylesheet(Source source, String media,
+                                         String title, String charset) 
+     throws TransformerConfigurationException
+   {
+     String href= null;
+     String base = source.getSystemId();
+     if (source instanceof DOMSource)
+       {
+         Node node = ((DOMSource) source).getNode();
+         Document doc = (node.getNodeType() == Node.DOCUMENT_NODE) ?
+           (Document) node : node.getOwnerDocument();
+         if (base == null)
+           {
+             base = doc.getDocumentURI();
+           }
+         for (node = doc.getFirstChild(); node != null;
+              node = node.getNextSibling())
+           {
+             if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE &&
+                 "xml-stylesheet".equals(node.getNodeName()))
+               {
+                 String data = node.getNodeValue();
+                 if (media != null &&
+                     !media.equals(parseParameter(data, "type")))
+                   {
+                     continue;
+                   }
+                 if (title != null &&
+                     !title.equals(parseParameter(data, "title")))
+                   {
+                     continue;
+                   }
+                 href = parseParameter(data, "href");
+               }
+           }
+       }
+     else
+       {
+         InputSource input;
+         XMLReader parser = null;
+         try
+           {
+             if (source instanceof SAXSource)
+               {
+                 SAXSource sax = (SAXSource) source;
+                 input = sax.getInputSource();
+                 parser = sax.getXMLReader();
+               }
+             else
+               {
+                 StreamSource stream = (StreamSource) source;
+                 InputStream in = stream.getInputStream();
+                 input = new InputSource(in);
+               }
+             input.setSystemId(base);
+             if (parser == null)
+               {
+                 parser = createXMLReader();
+               }
+             AssociatedStylesheetHandler ash =
+               new AssociatedStylesheetHandler();
+             ash.media = media;
+             ash.title = title;
+             parser.setContentHandler(ash);
+             parser.parse(input);
+             href = ash.href;
+           }
+         catch (SAXException e)
+           {
+             throw new TransformerConfigurationException(e);
+           }
+         catch (IOException e)
+           {
+             throw new TransformerConfigurationException(e);
+           }
+       }
+     if (href == null)
+       {
+         return null;
+       }
+     if (base != null)
+       {
+         base = XMLJ.getBaseURI(base);
+       }
+     href = XMLJ.getAbsoluteURI(base, href);
+     return new StreamSource(href);
+   }
+ 
+   private XMLReader createXMLReader()
+     throws TransformerConfigurationException
+   {
+     try
+       {
+         SAXParserFactory factory = SAXParserFactory.newInstance();
+         SAXParser parser = factory.newSAXParser();
+         return parser.getXMLReader();
+       }
+     catch (FactoryConfigurationError e)
+       {
+         throw new TransformerConfigurationException(e);
+       }
+     catch (ParserConfigurationException e)
+       {
+         throw new TransformerConfigurationException(e);
+       }
+     catch (SAXException e)
+       {
+         throw new TransformerConfigurationException(e);
+       }
+   }
+ 
+   class AssociatedStylesheetHandler
+     extends DefaultHandler
+   {
+     
+     String media;
+     String title;
+     String href;
+ 
+     public void processingInstruction(String target, String data)
+       throws SAXException
+     {
+       if ("xml-stylesheet".equals(target))
+         {
+           if (media != null && !media.equals(parseParameter(data, "type")))
+             {
+               return;
+             }
+           if (title != null && !title.equals(parseParameter(data, "title")))
+             {
+               return;
+             }
+           href = parseParameter(data, "href");
+         }
+     }
+     
+   }
+ 
+   String parseParameter(String data, String name)
+   {
+     int start = data.indexOf(name + "=");
+     if (start != -1)
+       {
+         start += name.length() + 2;
+         char delim = data.charAt(start - 1);
+         int end = data.indexOf(delim, start);
+         if (end != -1)
+           {
+             return data.substring(start, end);
+           }
+       }
+     return null;
+   }
+ 
+   // -- end getAssociatedStylesheet implementation --
+ 
+   public synchronized void setAttribute (String name, Object value)
+   {
+     this.attributes.put (name, value);
+   } 
+ 
+   public synchronized Object getAttribute (String name)
+   {
+     return attributes.get (name);
+   }
+   
+   public void setErrorListener (ErrorListener errorListener)
+   {
+     this.errorListener = errorListener;
+   } 
+ 
+   public ErrorListener getErrorListener ()
+   {
+     return errorListener;
+   }
+   
+   public void setURIResolver (URIResolver uriResolver)
+   {
+     this.uriResolver = uriResolver;
+   } 
+ 
+   public URIResolver getURIResolver ()
+   {
+     return uriResolver;
+   }
+   
+   public boolean getFeature (String name)
+   {
+     return (StreamSource.FEATURE.equals (name) ||
+             StreamResult.FEATURE.equals (name) ||
+             DOMSource.FEATURE.equals (name) ||
+             DOMResult.FEATURE.equals (name));
+   }
+ 
+   public void setFeature(String name, boolean value)
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException(name);
+   }
+ 
+   /**
+    *  Returns a new instance of class {@link Transformer} for a
+    *  null souce.
+    */
+   public Transformer newTransformer ()
+     throws TransformerConfigurationException
+   {
+     return newTransformer (null);
+   }
+ 
+   /**
+    *  Returns a new instance of class {@link Transformer} for
+    *  the given souce.
+    */
+   public Transformer newTransformer (Source source)
+     throws TransformerConfigurationException
+   {
+     return new GnomeTransformer (source, uriResolver, errorListener);
+   }
+ 
+   /**
+    *  Returns a new instance of class {@link Templates} for
+    *  the given souce.
+    */
+   public Templates newTemplates (Source source) 
+     throws TransformerConfigurationException
+   {
+     return new GnomeTransformer (source, uriResolver, errorListener);
+   }
+ 
+   /**
+    *  Perform native cleanup.
+    */
+   public static native void freeLibxsltGlobal ();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/URIResolverEntityResolver.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/URIResolverEntityResolver.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/URIResolverEntityResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/URIResolverEntityResolver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* URIResolverEntityResolver.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.transform;
+ 
+ import java.io.IOException;
+ import javax.xml.transform.URIResolver;
+ import javax.xml.transform.TransformerException;
+ import javax.xml.transform.sax.SAXSource;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ 
+ /**
+  * Provides an EntityResolver interface to a URIResolver.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class URIResolverEntityResolver
+ implements EntityResolver
+ {
+ 
+   private URIResolver resolver;
+ 
+   URIResolverEntityResolver (URIResolver resolver)
+   {
+     this.resolver = resolver;
+   }
+ 
+   public InputSource resolveEntity (String publicId, String systemId)
+     throws SAXException, IOException
+   {
+     try
+       {
+         return SAXSource.sourceToInputSource (resolver.resolve (systemId,
+                                                                 null));
+       }
+     catch (TransformerException e)
+       {
+         Throwable cause = e.getCause ();
+         if (cause instanceof SAXException)
+           {
+             throw (SAXException) cause;
+           }
+         else if (cause instanceof IOException)
+           {
+             throw (IOException) cause;
+           }
+         throw new SAXException (e);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/package.html gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/package.html
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/transform/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/transform/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,14 ----
+ <body>
+ <p>
+   A JAXP-compliant wrapper for the XSLT C library for Gnome, also
+   known as libxslt. Allows to use libxslt via the Java API for XML
+   processing.
+ </p>
+ 
+ <p>
+   <b>Usage:</b>
+     <li>Set the system property <code>javax.xml.transform.TransformerFactory</code>
+         to <code>gnu.xml.libxmlj.GnomeTransformerFactory</code>.</li>
+   </ul>
+ </p>
+ </body>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* EmptyNodeList.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.util;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ 
+ /**
+  * An empty node list.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class EmptyNodeList
+ implements NodeList
+ {
+ 
+   public Node item (int index)
+   {
+     return null;
+   }
+ 
+   public int getLength ()
+   {
+     return 0;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,99 ----
+ /* NamedInputStream.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.util;
+ 
+ import java.io.FilterInputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.PushbackInputStream;
+ 
+ /**
+  * An input stream associated with an XML system ID.
+  * It can report the system ID and the first few bytes of the stream
+  * in order to detect the character encoding of the stream.
+  *
+  * @author <a href='dog@gnu.org'>Chris Burdess</a>
+  */
+ public class NamedInputStream
+ extends FilterInputStream
+ {
+ 
+   private static int DETECT_BUFFER_SIZE = 50;
+   
+   private String name;
+ 
+   NamedInputStream (String name, InputStream in, int size)
+   {
+     super (new PushbackInputStream (in, size));
+     this.name = name;
+   }
+ 
+   /**
+    * Returns the name of the stream (the XML system ID).
+    */
+   public String getName ()
+   {
+     return name;
+   }
+ 
+   /**
+    * Returns the first few bytes of the stream for character encoding
+    * purposes. The entire stream can thereafter be read normally from the
+    * beginning. This method is only valid if no bytes have yet been read
+    * from the stream.
+    */
+   public byte[] getDetectBuffer ()
+     throws IOException
+   {
+     PushbackInputStream p = (PushbackInputStream) in;
+     byte[] buffer = new byte[DETECT_BUFFER_SIZE];
+     int len = p.read (buffer);
+     if (len < 0)
+       {
+         return null;
+       }
+     else
+       {
+         p.unread (buffer, 0, len);
+         byte[] ret = new byte[len];
+         System.arraycopy (buffer, 0, ret, 0, len);
+         return ret;
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/StandaloneDocumentType.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/StandaloneDocumentType.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/StandaloneDocumentType.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/StandaloneDocumentType.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,294 ----
+ /* StandaloneDocumentType.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.util;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.UserDataHandler;
+ 
+ /**
+  * A "standalone" document type, i.e. one that isn't attached to a document
+  * node.
+  * This can be used to create new documents.
+  */
+ public final class StandaloneDocumentType
+ implements DocumentType
+ {
+ 
+   private final String name;
+   private final String publicId;
+   private final String systemId;
+ 
+   public StandaloneDocumentType (String name, String publicId, String systemId)
+   {
+     this.name = name;
+     this.publicId = publicId;
+     this.systemId = systemId;
+   }
+ 
+   public String getName ()
+   {
+     return name;
+   }
+ 
+   public NamedNodeMap getEntities ()
+   {
+     // TODO
+     return null;
+   }
+   
+   public NamedNodeMap getNotations ()
+   {
+     // TODO
+     return null;
+   }
+ 
+   public String getPublicId ()
+   {
+     return publicId;
+   }
+ 
+   public String getSystemId ()
+   {
+     return systemId;
+   }
+ 
+   public String getInternalSubset ()
+   {
+     return null;
+   }
+   
+   // -- Node --
+ 
+   public String getNodeName ()
+   {
+     return getName ();
+   }
+ 
+   public String getNodeValue ()
+     throws DOMException
+   {
+     return null;
+   }
+   
+   public void setNodeValue (String nodeValue)
+     throws DOMException
+   {
+   }
+ 
+   public short getNodeType ()
+   {
+     return DOCUMENT_TYPE_NODE;
+   }
+ 
+   public Node getParentNode ()
+   {
+     return null;
+   }
+ 
+   public NodeList getChildNodes ()
+   {
+     return new EmptyNodeList ();
+   }
+ 
+   public Node getFirstChild ()
+   {
+     return null;
+   }
+ 
+   public Node getLastChild ()
+   {
+     return null;
+   }
+ 
+   public Node getPreviousSibling ()
+   {
+     return null;
+   }
+ 
+   public Node getNextSibling ()
+   {
+     return null;
+   }
+ 
+   public NamedNodeMap getAttributes ()
+   {
+     return null;
+   }
+ 
+   public Document getOwnerDocument ()
+   {
+     return null;
+   }
+ 
+   public Node insertBefore (Node newChild, Node refChild)
+     throws DOMException
+   {
+     throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+   }
+ 
+   public Node replaceChild (Node newChild, Node oldChild)
+     throws DOMException
+   {
+     throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+   }
+ 
+   public Node removeChild (Node oldChild)
+     throws DOMException
+   {
+     throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+   }
+ 
+   public Node appendChild (Node oldChild)
+     throws DOMException
+   {
+     throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+   }
+ 
+   public boolean hasChildNodes ()
+   {
+     return false;
+   }
+ 
+   public Node cloneNode (boolean deep)
+   {
+     return new StandaloneDocumentType (name, publicId, systemId);
+   }
+ 
+   public void normalize ()
+   {
+   }
+ 
+   public boolean isSupported (String feature, String version)
+   {
+     return false;
+   }
+ 
+   public String getNamespaceURI ()
+   {
+     return null;
+   }
+ 
+   public String getPrefix ()
+   {
+     return null;
+   }
+ 
+   public void setPrefix (String prefix)
+   {
+     throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+   }
+ 
+   public String getLocalName ()
+   {
+     return getName ();
+   }
+ 
+   public boolean hasAttributes ()
+   {
+     return false;
+   }
+ 
+   // DOM Level 3
+ 
+   public String getBaseURI ()
+   {
+     return null;
+   }
+ 
+   public short compareDocumentPosition (Node node)
+   {
+     return -1;
+   }
+ 
+   public String getTextContent ()
+   {
+     return null;
+   }
+ 
+   public void setTextContent (String content)
+   {
+     throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+   }
+ 
+   public boolean isSameNode (Node other)
+   {
+     return equals (other);
+   }
+   
+   public String lookupPrefix (String namespace)
+   {
+     return null;
+   }
+   
+   public boolean isDefaultNamespace (String namespace)
+   {
+     return false;
+   }
+ 
+   public String lookupNamespaceURI (String prefix)
+   {
+     return null;
+   }
+ 
+   public boolean isEqualNode (Node other)
+   {
+     return equals (other);
+   }
+ 
+   public Object getFeature (String feature, String version)
+   {
+     return null;
+   }
+ 
+   public Object setUserData (String name, Object value,
+                              UserDataHandler handler)
+   {
+     return null;
+   }
+ 
+   public Object getUserData (String name)
+   {
+     return null;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/StandaloneLocator.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/StandaloneLocator.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/StandaloneLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/StandaloneLocator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* StandaloneLocator.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.util;
+ 
+ import javax.xml.transform.SourceLocator;
+ import org.xml.sax.Locator;
+ 
+ /**
+  * SAX Locator implementation that uses the specified values.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class StandaloneLocator
+ implements Locator, SourceLocator
+ {
+ 
+   private final int lineNumber;
+ 
+   private final int columnNumber;
+ 
+   private final String publicId;
+ 
+   private final String systemId;
+ 
+   public StandaloneLocator (int lineNumber, int columnNumber,
+                             String publicId, String systemId)
+   {
+     this.lineNumber = lineNumber;
+     this.columnNumber = columnNumber;
+     this.publicId = publicId;
+     this.systemId = systemId;
+   }
+   
+   public String getPublicId ()
+   {
+     return publicId;
+   }
+   
+   public String getSystemId ()
+   {
+     return systemId;
+   }
+ 
+   public int getLineNumber ()
+   {
+     return lineNumber;
+   }
+ 
+   public int getColumnNumber ()
+   {
+     return columnNumber;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,280 ----
+ /* XMLJ.java - 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.libxmlj.util;
+ 
+ import java.io.FileInputStream;
+ import java.io.FileOutputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.Reader;
+ import java.io.Writer;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ 
+ import javax.xml.transform.Result;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.sax.SAXSource;
+ import javax.xml.transform.stream.StreamResult;
+ import javax.xml.transform.stream.StreamSource;
+ 
+ import org.xml.sax.InputSource;
+ 
+ import gnu.xml.libxmlj.transform.GnomeTransformerFactory;
+ 
+ import gnu.xml.dom.ls.ReaderInputStream;
+ import gnu.xml.dom.ls.WriterOutputStream;
+ 
+ /**
+  * Utility functions for libxmlj.
+  */
+ public final class XMLJ
+ {
+ 
+   static class XMLJShutdownHook
+     implements Runnable
+   {
+     
+     public void run ()
+     {
+       // Make sure finalizers are run
+       System.gc ();
+       Runtime.getRuntime ().runFinalization ();
+       
+       // Perform global cleanup on the native level
+       GnomeTransformerFactory.freeLibxsltGlobal ();
+     }
+   
+   }
+ 
+   private static boolean initialised = false;
+   
+   public static void init ()
+   {
+     if (!initialised)
+       {
+         System.loadLibrary ("xmlj");
+         
+         XMLJShutdownHook hook = new XMLJShutdownHook ();  
+         Runtime.getRuntime ().addShutdownHook (new Thread (hook));
+       }
+     initialised = true;
+   }
+ 
+   private static final int LOOKAHEAD = 50;
+   
+   /**
+    * Returns an input stream for the specified input source.
+    * This returns a pushback stream that libxmlj can use to detect the
+    * character encoding of the stream.
+    */
+   public static NamedInputStream getInputStream (InputSource input)
+     throws IOException
+   {
+     InputStream in = input.getByteStream ();
+     String systemId = input.getSystemId ();
+     if (in == null)
+       {
+        Reader r = input.getCharacterStream();
+        if (r != null)
+          in = new ReaderInputStream(r);
+       }
+     if (in == null)
+       {
+         in = getInputStream(systemId);
+       }
+     return new NamedInputStream (systemId, in, LOOKAHEAD);
+   }
+ 
+   /**
+    * Returns an input stream for the specified transformer source.
+    * This returns a pushback stream that libxmlj can use to detect the
+    * character encoding of the stream.
+    */
+   public static NamedInputStream getInputStream (Source source)
+     throws IOException
+   {
+     if (source instanceof SAXSource)
+       {
+         return getInputStream (((SAXSource) source).getInputSource ());
+       }
+     InputStream in = null;
+     String systemId = source.getSystemId ();
+     if (source instanceof StreamSource)
+       {
+         in = ((StreamSource) source).getInputStream ();
+       }
+     if (in == null)
+       {
+         in = getInputStream(systemId);
+       }
+     return new NamedInputStream (systemId, in, LOOKAHEAD);
+   }
+ 
+   private static InputStream getInputStream(String systemId)
+     throws IOException
+   {
+     if (systemId == null)
+       {
+         throw new IOException("no system ID");
+       }
+     try
+       {
+         return new URL(systemId).openStream();
+       }
+     catch (MalformedURLException e)
+       {
+         return new FileInputStream(systemId);
+       }
+   }
+ 
+   /**
+    * Returns an input stream for the specified URL.
+    * This returns a pushback stream that libxmlj can use to detect the
+    * character encoding of the stream.
+    */
+   public static NamedInputStream getInputStream (URL url)
+     throws IOException
+   {
+     return new NamedInputStream (url.toString (), url.openStream(),
+                                  LOOKAHEAD);
+   }
+ 
+   /**
+    * Convenience method for xmljDocLoader
+    */
+   static NamedInputStream xmljGetInputStream(String base, String url)
+     throws IOException
+   {
+     try
+       {
+         if (base != null)
+           {
+             url = new URL(new URL(base), url).toString();
+           }
+       }
+     catch (MalformedURLException e)
+       {
+       }
+     InputStream in = getInputStream(url);
+     return new NamedInputStream(url, in, LOOKAHEAD);
+   }
+ 
+   /**
+    * Returns an output stream for the specified transformer result.
+    */
+   public static OutputStream getOutputStream (Result result)
+     throws IOException
+   {
+     OutputStream out = null;
+     if (result instanceof StreamResult)
+       {
+         out = ((StreamResult) result).getOutputStream ();
+       }
+     if (out == null)
+       {
+        Writer w = ((StreamResult) result).getWriter ();
+        if (w != null)
+          out = new WriterOutputStream (w);
+       }
+     if (out == null)
+       {
+         String systemId = result.getSystemId ();
+         if (systemId == null)
+           {
+             throw new IOException ("no system ID");
+           }
+         try
+           {
+             URL url = new URL (systemId);
+             URLConnection connection = url.openConnection ();
+             connection.setDoOutput (true);
+             out = connection.getOutputStream ();
+           }
+         catch (MalformedURLException e)
+           {
+             out = new FileOutputStream (systemId);
+           }
+       }
+ 
+     return out;
+   }
+ 
+   /**
+    * Returns the absolute form of the specified URI.
+    * If the URI is already absolute, returns it as-is.
+    * Otherwise returns a new URI relative to the given base URI.
+    */
+   public static String getAbsoluteURI (String base, String uri)
+   {
+     if (uri != null &&
+         base != null &&
+         (uri.length() > 0) &&
+         (uri.indexOf(':') == -1) &&
+         (uri.charAt(0) != '/'))
+       {
+         // URI is relative
+         if (base.charAt(base.length() - 1) != '/')
+           {
+             int i = base.lastIndexOf('/');
+             base = base.substring(0, i + 1);
+           }
+         return base + uri;
+       }
+     else
+       {
+         // URI is absolute or no base specified
+         return uri;
+       }
+   }
+ 
+   public static String getBaseURI(String uri)
+   {
+     if (uri != null)
+       {
+         int si = uri.lastIndexOf('/');
+         if (si != -1)
+           {
+             uri = uri.substring(0, si + 1);
+           }
+       }
+     return uri;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/CallFilter.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/CallFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/CallFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/CallFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,257 ----
+ /* CallFilter.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.io.IOException;
+ import java.io.OutputStreamWriter;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.io.Writer;
+ 
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.helpers.XMLReaderFactory;
+ 
+ import gnu.xml.util.Resolver;
+ import gnu.xml.util.XMLWriter;
+ 
+ 
+ /**
+  * Input is sent as an XML request to given URI, and the output of this
+  * filter is the parsed response to that request.
+  * A connection is opened to the remote URI when the startDocument call is
+  * issued through this filter, and the request is finished when the
+  * endDocument call is issued.  Events should be written quickly enough to
+  * prevent the remote HTTP server from aborting the connection due to
+  * inactivity; you may want to buffer text in an earlier pipeline stage.
+  * If your application requires validity checking of such
+  * outputs, have the output pipeline include a validation stage.
+  *
+  * <p>In effect, this makes a remote procedure call to the URI, with the
+  * request and response document syntax as chosen by the application.
+  * <em>Note that all the input events must be seen, and sent to the URI,
+  * before the first output event can be seen. </em>  Clients are delayed
+  * at least by waiting for the server to respond, constraining concurrency.
+  * Services can thus be used to synchronize concurrent activities, and
+  * even to prioritize service among different clients.
+  *
+  * <p> You are advised to avoid restricting yourself to an "RPC" model
+  * for distributed computation.  With a World Wide Web, network latencies
+  * and failures (e.g. non-availability)
+  * are significant; adopting a "procedure" model, rather than a workflow
+  * model where bulk requests are sent and worked on asynchronously, is not
+  * generally an optimal system-wide architecture.  When the messages may
+  * need authentication, such as with an OpenPGP signature, or when server
+  * loads don't argue in favor of immediate responses, non-RPC models can
+  * be advantageous.  (So-called "peer to peer" computing models are one
+  * additional type of model, though too often that term is applied to
+  * systems that still have a centralized control structure.)
+  *
+  * <p> <em>Be strict in what you send, liberal in what you accept,</em> as
+  * the Internet tradition goes.  Strictly conformant data should never cause
+  * problems to its receiver; make your request pipeline be very strict, and
+  * don't compromise on that.  Make your response pipeline strict as well,
+  * but be ready to tolerate specific mild, temporary, and well-documented
+  * variations from specific communications peers.
+  *
+  * @see XmlServlet
+  *
+  * @author David Brownell
+  */
+ final public class CallFilter implements EventConsumer
+ {
+     private Requestor			req;
+     private EventConsumer		next;
+     private URL				target;
+     private URLConnection		conn;
+     private ErrorHandler		errHandler;
+ 
+ 
+     /**
+      * Initializes a call filter so that its inputs are sent to the
+      * specified URI, and its outputs are sent to the next consumer
+      * provided.
+      *
+      * @exception IOException if the URI isn't accepted as a URL
+      */
+ 	// constructor used by PipelineFactory
+     public CallFilter (String uri, EventConsumer next)
+     throws IOException
+     {
+ 	this.next = next;
+ 	req = new Requestor ();
+ 	setCallTarget (uri);
+     }
+ 
+     /**
+      * Assigns the URI of the call target to be used.
+      * Does not affect calls currently being made.
+      */
+     final public void setCallTarget (String uri)
+     throws IOException
+     {
+ 	target = new URL (uri);
+     }
+ 
+     /**
+      * Assigns the error handler to be used to present most fatal
+      * errors.
+      */
+     public void setErrorHandler (ErrorHandler handler)
+     {
+ 	req.setErrorHandler (handler);
+     }
+ 
+ 
+     /**
+      * Returns the call target's URI.
+      */
+     final public String getCallTarget ()
+     {
+ 	return target.toString ();
+     }
+ 
+     /** Returns the content handler currently in use. */
+     final public org.xml.sax.ContentHandler getContentHandler ()
+     {
+ 	return req;
+     }
+ 
+     /** Returns the DTD handler currently in use. */
+     final public DTDHandler getDTDHandler ()
+     {
+ 	return req;
+     }
+ 
+ 
+     /**
+      * Returns the declaration or lexical handler currently in
+      * use, or throws an exception for other properties.
+      */
+     final public Object getProperty (String id)
+     throws SAXNotRecognizedException
+     {
+ 	if (EventFilter.DECL_HANDLER.equals (id))
+ 	    return req;
+ 	if (EventFilter.LEXICAL_HANDLER.equals (id))
+ 	    return req;
+ 	throw new SAXNotRecognizedException (id);
+     }
+ 
+ 
+     // JDK 1.1 seems to need it to be done this way, sigh
+     ErrorHandler getErrorHandler () { return errHandler; }
+ 
+     //
+     // Takes input and echoes to server as POST input.
+     // Then sends the POST reply to the next pipeline element.
+     //
+     final class Requestor extends XMLWriter
+     {
+ 	Requestor ()
+ 	{
+ 	    super ((Writer)null);
+ 	}
+ 
+ 	public synchronized void startDocument () throws SAXException
+ 	{
+ 	    // Connect to remote object and set up to send it XML text
+ 	    try {
+ 		if (conn != null)
+ 		    throw new IllegalStateException ("call is being made");
+ 
+ 		conn = target.openConnection ();
+ 		conn.setDoOutput (true);
+ 		conn.setRequestProperty ("Content-Type",
+ 			    "application/xml;charset=UTF-8");
+ 
+ 		setWriter (new OutputStreamWriter (
+ 			conn.getOutputStream (),
+ 			"UTF8"), "UTF-8");
+ 
+ 	    } catch (IOException e) {
+ 		fatal ("can't write (POST) to URI: " + target, e);
+ 	    }
+ 
+ 	    // NOW base class can safely write that text!
+ 	    super.startDocument ();
+ 	}
+ 
+ 	public void endDocument () throws SAXException
+ 	{
+ 	    //
+ 	    // Finish writing the request (for HTTP, a POST);
+ 	    // this closes the output stream.
+ 	    //
+ 	    super.endDocument ();
+ 
+ 	    //
+ 	    // Receive the response.
+ 	    // Produce events for the next stage.
+ 	    //
+ 	    InputSource	source;
+ 	    XMLReader	producer;
+ 	    String	encoding;
+ 
+ 	    try {
+ 
+ 		source = new InputSource (conn.getInputStream ());
+ 
+ // FIXME if status is anything but success, report it!!  It'd be good to
+ // save the request data just in case we need to deal with a forward.
+ 
+ 		encoding = Resolver.getEncoding (conn.getContentType ());
+ 		if (encoding != null)
+ 		    source.setEncoding (encoding);
+ 
+ 		producer = XMLReaderFactory.createXMLReader ();
+ 		producer.setErrorHandler (getErrorHandler ());
+ 		EventFilter.bind (producer, next);
+ 		producer.parse (source);
+ 		conn = null;
+ 
+ 	    } catch (IOException e) {
+ 		fatal ("I/O Exception reading response, " + e.getMessage (), e);
+ 	    }
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/DomConsumer.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/DomConsumer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/DomConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/DomConsumer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,982 ----
+ /* DomConsumer.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import gnu.xml.aelfred2.ContentHandler2;
+ import gnu.xml.util.DomParser;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.ext.DeclHandler;
+ import org.xml.sax.ext.LexicalHandler;
+ import org.xml.sax.helpers.AttributesImpl;
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.CDATASection;
+ import org.w3c.dom.CharacterData;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.EntityReference;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.ProcessingInstruction;
+ import org.w3c.dom.Text;
+ 
+ /**
+  * This consumer builds a DOM Document from its input, acting either as a
+  * pipeline terminus or as an intermediate buffer.  When a document's worth
+  * of events has been delivered to this consumer, that document is read with
+  * a {@link DomParser} and sent to the next consumer.  It is also available
+  * as a read-once property.
+  *
+  * <p>The DOM tree is constructed as faithfully as possible.  There are some
+  * complications since a DOM should expose behaviors that can't be implemented
+  * without API backdoors into that DOM, and because some SAX parsers don't
+  * report all the information that DOM permits to be exposed.  The general
+  * problem areas involve information from the Document Type Declaration (DTD).
+  * DOM only represents a limited subset, but has some behaviors that depend
+  * on much deeper knowledge of a document's DTD.  You shouldn't have much to
+  * worry about unless you change handling of "noise" nodes from its default
+  * setting (which ignores them all); note if you use JAXP to populate your
+  * DOM trees, it wants to save "noise" nodes by default.  (Such nodes include
+  * ignorable whitespace, comments, entity references and CDATA boundaries.)
+  * Otherwise, your
+  * main worry will be if you use a SAX parser that doesn't flag ignorable
+  * whitespace unless it's validating (few don't).
+  *
+  * <p> The SAX2 events used as input must contain XML Names for elements
+  * and attributes, with original prefixes.  In SAX2,
+  * this is optional unless the "namespace-prefixes" parser feature is set.
+  * Moreover, many application components won't provide completely correct
+  * structures anyway.  <em>Before you convert a DOM to an output document,
+  * you should plan to postprocess it to create or repair such namespace
+  * information.</em> The {@link NSFilter} pipeline stage does such work.
+  *
+  * <p> <em>Note:  changes late in DOM L2 process made it impractical to
+  * attempt to create the DocumentType node in any implementation-neutral way,
+  * much less to populate it (L1 didn't support even creating such nodes).
+  * To create and populate such a node, subclass the inner
+  * {@link DomConsumer.Handler} class and teach it about the backdoors into
+  * whatever DOM implementation you want.  It's possible that some revised
+  * DOM API (L3?) will make this problem solvable again. </em>
+  *
+  * @see DomParser
+  *
+  * @author David Brownell
+  */
+ public class DomConsumer implements EventConsumer
+ {
+     private Class		domImpl;
+ 
+     private boolean		hidingCDATA = true;
+     private boolean		hidingComments = true;
+     private boolean		hidingWhitespace = true;
+     private boolean		hidingReferences = true;
+ 
+     private Handler		handler;
+     private ErrorHandler	errHandler;
+ 
+     private EventConsumer	next;
+ 
+     // FIXME:  this can't be a generic pipeline stage just now,
+     // since its input became a Class not a String (to be turned
+     // into a class, using the right class loader)
+ 
+ 
+     /**
+      * Configures this pipeline terminus to use the specified implementation
+      * of DOM when constructing its result value.
+      *
+      * @param impl class implementing {@link org.w3c.dom.Document Document}
+      *	which publicly exposes a default constructor
+      *
+      * @exception SAXException when there is a problem creating an
+      *	empty DOM document using the specified implementation
+      */
+     public DomConsumer (Class impl)
+     throws SAXException
+     {
+ 	domImpl = impl;
+ 	handler = new Handler (this);
+     }
+ 
+     /**
+      * This is the hook through which a subclass provides a handler
+      * which knows how to access DOM extensions, specific to some
+      * implementation, to record additional data in a DOM.
+      * Treat this as part of construction; don't call it except
+      * before (or between) parses.
+      */
+     protected void setHandler (Handler h)
+     {
+ 	handler = h;
+     }
+ 
+ 
+     private Document emptyDocument ()
+     throws SAXException
+     {
+ 	try {
+ 	    return (Document) domImpl.newInstance ();
+ 	} catch (IllegalAccessException e) {
+ 	    throw new SAXException ("can't access constructor: "
+ 		    + e.getMessage ());
+ 	} catch (InstantiationException e) {
+ 	    throw new SAXException ("can't instantiate Document: "
+ 		    + e.getMessage ());
+ 	}
+     }
+ 
+ 
+     /**
+      * Configures this consumer as a buffer/filter, using the specified
+      * DOM implementation when constructing its result value.
+      *
+      * <p> This event consumer acts as a buffer and filter, in that it
+      * builds a DOM tree and then writes it out when <em>endDocument</em>
+      * is invoked.  Because of the limitations of DOM, much information
+      * will as a rule not be seen in that replay.  To get a full fidelity
+      * copy of the input event stream, use a {@link TeeConsumer}.
+      *
+      * @param impl class implementing {@link org.w3c.dom.Document Document}
+      *	which publicly exposes a default constructor
+      * @param next receives a "replayed" sequence of parse events when
+      *	the <em>endDocument</em> method is invoked.
+      *
+      * @exception SAXException when there is a problem creating an
+      *	empty DOM document using the specified DOM implementation
+      */
+     public DomConsumer (Class impl, EventConsumer n)
+     throws SAXException
+     {
+ 	this (impl);
+ 	next = n;
+     }
+ 
+ 
+     /**
+      * Returns the document constructed from the preceding
+      * sequence of events.  This method should not be
+      * used again until another sequence of events has been
+      * given to this EventConsumer.  
+      */
+     final public Document getDocument ()
+     {
+ 	return handler.clearDocument ();
+     }
+ 
+     public void setErrorHandler (ErrorHandler handler)
+     {
+ 	errHandler = handler;
+     }
+ 
+ 
+     /**
+      * Returns true if the consumer is hiding entity references nodes
+      * (the default), and false if EntityReference nodes should
+      * instead be created.  Such EntityReference nodes will normally be
+      * empty, unless an implementation arranges to populate them and then
+      * turn them back into readonly objects.
+      *
+      * @see #setHidingReferences
+      */
+     final public boolean	isHidingReferences ()
+ 	{ return hidingReferences; }
+ 
+     /**
+      * Controls whether the consumer will hide entity expansions,
+      * or will instead mark them with entity reference nodes.
+      *
+      * @see #isHidingReferences
+      * @param flag False if entity reference nodes will appear
+      */
+     final public void		setHidingReferences (boolean flag)
+ 	{ hidingReferences = flag; }
+     
+ 
+     /**
+      * Returns true if the consumer is hiding comments (the default),
+      * and false if they should be placed into the output document.
+      *
+      * @see #setHidingComments
+      */
+     public final boolean isHidingComments ()
+ 	{ return hidingComments; }
+ 
+     /**
+      * Controls whether the consumer is hiding comments.
+      *
+      * @see #isHidingComments
+      */
+     public final void setHidingComments (boolean flag)
+ 	{ hidingComments = flag; }
+ 
+ 
+     /**
+      * Returns true if the consumer is hiding ignorable whitespace
+      * (the default), and false if such whitespace should be placed
+      * into the output document as children of element nodes.
+      *
+      * @see #setHidingWhitespace
+      */
+     public final boolean isHidingWhitespace ()
+ 	{ return hidingWhitespace; }
+ 
+     /**
+      * Controls whether the consumer hides ignorable whitespace
+      *
+      * @see #isHidingComments
+      */
+     public final void setHidingWhitespace (boolean flag)
+ 	{ hidingWhitespace = flag; }
+ 
+ 
+     /**
+      * Returns true if the consumer is saving CDATA boundaries, or
+      * false (the default) otherwise.
+      *
+      * @see #setHidingCDATA
+      */
+     final public boolean	isHidingCDATA ()
+ 	{ return hidingCDATA; }
+ 
+     /**
+      * Controls whether the consumer will save CDATA boundaries.
+      *
+      * @see #isHidingCDATA
+      * @param flag True to treat CDATA text differently from other
+      *	text nodes
+      */
+     final public void		setHidingCDATA (boolean flag)
+ 	{ hidingCDATA = flag; }
+     
+ 
+ 
+     /** Returns the document handler being used. */
+     final public ContentHandler getContentHandler ()
+ 	{ return handler; }
+ 
+     /** Returns the DTD handler being used. */
+     final public DTDHandler getDTDHandler ()
+ 	{ return handler; }
+ 
+     /**
+      * Returns the lexical handler being used.
+      * (DOM construction can't really use declaration handlers.)
+      */
+     final public Object getProperty (String id)
+     throws SAXNotRecognizedException
+     {
+ 	if ("http://xml.org/sax/properties/lexical-handler".equals (id))
+ 	    return handler;
+ 	if ("http://xml.org/sax/properties/declaration-handler".equals (id))
+ 	    return handler;
+ 	throw new SAXNotRecognizedException (id);
+     }
+ 
+     EventConsumer getNext () { return next; }
+ 
+     ErrorHandler getErrorHandler () { return errHandler; }
+ 
+     /**
+      * Class used to intercept various parsing events and use them to
+      * populate a DOM document.  Subclasses would typically know and use
+      * backdoors into specific DOM implementations, used to implement 
+      * DTD-related functionality.
+      *
+      * <p> Note that if this ever throws a DOMException (runtime exception)
+      * that will indicate a bug in the DOM (e.g. doesn't support something
+      * per specification) or the parser (e.g. emitted an illegal name, or
+      * accepted illegal input data). </p>
+      */
+     public static class Handler
+ 	implements ContentHandler2, LexicalHandler,
+ 	    DTDHandler, DeclHandler
+     {
+ 	protected DomConsumer		consumer;
+ 
+ 	private DOMImplementation	impl;
+ 	private Document 		document;
+ 	private boolean		isL2;
+ 
+ 	private Locator		locator;
+ 	private Node		top;
+ 	private boolean		inCDATA;
+ 	private boolean		mergeCDATA;
+ 	private boolean		inDTD;
+ 	private String		currentEntity;
+ 
+ 	private boolean		recreatedAttrs;
+ 	private AttributesImpl	attributes = new AttributesImpl ();
+ 
+ 	/**
+ 	 * Subclasses may use SAX2 events to provide additional
+ 	 * behaviors in the resulting DOM.
+ 	 */
+ 	protected Handler (DomConsumer consumer)
+ 	throws SAXException
+ 	{
+ 	    this.consumer = consumer;
+ 	    document = consumer.emptyDocument ();
+ 	    impl = document.getImplementation ();
+ 	    isL2 = impl.hasFeature ("XML", "2.0");
+ 	}
+ 
+ 	private void fatal (String message, Exception x)
+ 	throws SAXException
+ 	{
+ 	    SAXParseException	e;
+ 	    ErrorHandler	errHandler = consumer.getErrorHandler ();;
+ 
+ 	    if (locator == null)
+ 		e = new SAXParseException (message, null, null, -1, -1, x);
+ 	    else
+ 		e = new SAXParseException (message, locator, x);
+ 	    if (errHandler != null)
+ 		errHandler.fatalError (e);
+ 	    throw e;
+ 	}
+ 
+ 	/**
+ 	 * Returns and forgets the document produced.  If the handler is
+ 	 * reused, a new document may be created.
+ 	 */
+ 	Document clearDocument ()
+ 	{
+ 	    Document retval = document;
+ 	    document = null;
+ 	    locator = null;
+ 	    return retval;
+ 	}
+ 
+ 	/**
+ 	 * Returns the document under construction.
+ 	 */
+ 	protected Document getDocument ()
+ 	    { return document; }
+ 	
+ 	/**
+ 	 * Returns the current node being populated.  This is usually
+ 	 * an Element or Document, but it might be an EntityReference
+ 	 * node if some implementation-specific code knows how to put
+ 	 * those into the result tree and later mark them as readonly.
+ 	 */
+ 	protected Node getTop ()
+ 	    { return top; }
+ 
+ 
+ 	// SAX1
+ 	public void setDocumentLocator (Locator locator)
+ 	{
+ 	    this.locator = locator;
+ 	}
+ 
+ 	// SAX1
+ 	public void startDocument ()
+ 	throws SAXException
+ 	{
+ 	    if (document == null)
+ 		try {
+ 		    if (isL2) {
+ 			// couple to original implementation
+ 			document = impl.createDocument (null, "foo", null);
+ 			document.removeChild (document.getFirstChild ());
+ 		    } else {
+ 			document = consumer.emptyDocument ();
+ 		    }
+ 		} catch (Exception e) {
+ 		    fatal ("DOM create document", e);
+ 		}
+ 	    top = document;
+ 	}
+ 
+         // ContentHandler2
+         public void xmlDecl(String version,
+                             String encoding,
+                             boolean standalone,
+                             String inputEncoding)
+           throws SAXException
+         {
+           if (document != null)
+             {
+               document.setXmlVersion(version);
+               document.setXmlStandalone(standalone);
+             }
+         }
+ 
+ 	// SAX1
+ 	public void endDocument ()
+ 	throws SAXException
+ 	{
+ 	    try {
+ 		if (consumer.getNext () != null && document != null) {
+ 		    DomParser	parser = new DomParser (document);
+ 
+ 		    EventFilter.bind (parser, consumer.getNext ());
+ 		    parser.parse ("ignored");
+ 		}
+ 	    } finally {
+ 		top = null;
+ 	    }
+ 	}
+ 
+ 	// SAX1
+ 	public void processingInstruction (String target, String data)
+ 	throws SAXException
+ 	{
+ 	    // we can't create populated entity ref nodes using
+ 	    // only public DOM APIs (they've got to be readonly)
+ 	    if (currentEntity != null)
+ 		return;
+ 
+ 	    ProcessingInstruction	pi;
+ 
+ 	    if (isL2
+ 		    // && consumer.isUsingNamespaces ()
+ 		    && target.indexOf (':') != -1)
+ 		namespaceError (
+ 		    "PI target name is namespace nonconformant: "
+ 			+ target);
+ 	    if (inDTD)
+ 		return;
+ 	    pi = document.createProcessingInstruction (target, data);
+ 	    top.appendChild (pi);
+ 	}
+ 
+ 	/**
+ 	 * Subclasses may overrride this method to provide a more efficient
+ 	 * way to construct text nodes.
+ 	 * Typically, copying the text into a single character array will
+ 	 * be more efficient than doing that as well as allocating other
+ 	 * needed for a String, including an internal StringBuffer.
+ 	 * Those additional memory and CPU costs can be incurred later,
+ 	 * if ever needed.
+ 	 * Unfortunately the standard DOM factory APIs encourage those costs
+ 	 * to be incurred early.
+ 	 */
+ 	protected Text createText (
+ 	    boolean	isCDATA,
+ 	    char	ch [],
+ 	    int		start,
+ 	    int		length
+ 	) {
+ 	    String	value = new String (ch, start, length);
+ 
+ 	    if (isCDATA)
+ 		return document.createCDATASection (value);
+ 	    else
+ 		return document.createTextNode (value);
+ 	}
+ 
+ 	// SAX1
+ 	public void characters (char ch [], int start, int length)
+ 	throws SAXException
+ 	{
+ 	    // we can't create populated entity ref nodes using
+ 	    // only public DOM APIs (they've got to be readonly
+ 	    // at creation time)
+ 	    if (currentEntity != null)
+ 		return;
+ 
+ 	    Node	lastChild = top.getLastChild ();
+ 
+ 	    // merge consecutive text or CDATA nodes if appropriate.
+ 	    if (lastChild instanceof Text) {
+ 		if (consumer.isHidingCDATA ()
+ 			// consecutive Text content ... always merge
+ 			|| (!inCDATA
+ 			    && !(lastChild instanceof CDATASection))
+ 			// consecutive CDATASection content ... don't
+ 			// merge between sections, only within them
+ 			|| (inCDATA && mergeCDATA
+ 			    && lastChild instanceof CDATASection)
+ 			    ) {
+ 		    CharacterData	last = (CharacterData) lastChild;
+ 		    String		value = new String (ch, start, length);
+ 		    
+ 		    last.appendData (value);
+ 		    return;
+ 		}
+ 	    }
+ 	    if (inCDATA && !consumer.isHidingCDATA ()) {
+ 		top.appendChild (createText (true, ch, start, length));
+ 		mergeCDATA = true;
+ 	    } else
+ 		top.appendChild (createText (false, ch, start, length));
+ 	}
+ 
+ 	// SAX2
+ 	public void skippedEntity (String name)
+ 	throws SAXException
+ 	{
+ 	    // this callback is useless except to report errors, since
+ 	    // we can't know if the ref was in content, within an
+ 	    // attribute, within a declaration ... only one of those
+ 	    // cases supports more intelligent action than a panic.
+ 	    fatal ("skipped entity: " + name, null);
+ 	}
+ 
+ 	// SAX2
+ 	public void startPrefixMapping (String prefix, String uri)
+ 	throws SAXException
+ 	{
+ 	    // reconstruct "xmlns" attributes deleted by all
+ 	    // SAX2 parsers without "namespace-prefixes" = true
+ 	    if ("".equals (prefix))
+ 		attributes.addAttribute ("", "", "xmlns",
+ 			"CDATA", uri);
+ 	    else
+ 		attributes.addAttribute ("", "", "xmlns:" + prefix,
+ 			"CDATA", uri);
+ 	    recreatedAttrs = true;
+ 	}
+ 
+ 	// SAX2
+ 	public void endPrefixMapping (String prefix)
+ 	throws SAXException
+ 	    { }
+ 
+ 	// SAX2
+ 	public void startElement (
+ 	    String uri,
+ 	    String localName,
+ 	    String qName,
+ 	    Attributes atts
+ 	) throws SAXException
+ 	{
+ 	    // we can't create populated entity ref nodes using
+ 	    // only public DOM APIs (they've got to be readonly)
+ 	    if (currentEntity != null)
+ 		return;
+ 
+ 	    // parser discarded basic information; DOM tree isn't writable
+ 	    // without massaging to assign prefixes to all nodes.
+ 	    // the "NSFilter" class does that massaging.
+ 	    if (qName.length () == 0)
+ 		qName = localName;
+ 
+ 
+ 	    Element	element;
+ 	    int		length = atts.getLength ();
+ 
+ 	    if (!isL2) {
+ 		element = document.createElement (qName);
+ 
+ 		// first the explicit attributes ...
+ 		length = atts.getLength ();
+ 		for (int i = 0; i < length; i++)
+ 		    element.setAttribute (atts.getQName (i),
+ 					    atts.getValue (i));
+ 		// ... then any recreated ones (DOM deletes duplicates)
+ 		if (recreatedAttrs) {
+ 		    recreatedAttrs = false;
+ 		    length = attributes.getLength ();
+ 		    for (int i = 0; i < length; i++)
+ 			element.setAttribute (attributes.getQName (i),
+ 						attributes.getValue (i));
+ 		    attributes.clear ();
+ 		}
+ 
+ 		top.appendChild (element);
+ 		top = element;
+ 		return;
+ 	    }
+ 
+ 	    // For an L2 DOM when namespace use is enabled, use
+ 	    // createElementNS/createAttributeNS except when
+ 	    // (a) it's an element in the default namespace, or
+ 	    // (b) it's an attribute with no prefix
+ 	    String	namespace;
+ 	    
+ 	    if (localName.length () != 0)
+ 		namespace = (uri.length () == 0) ? null : uri;
+ 	    else
+ 		namespace = getNamespace (getPrefix (qName), atts);
+ 
+ 	    if (namespace == null)
+ 		element = document.createElement (qName);
+ 	    else
+ 		element = document.createElementNS (namespace, qName);
+ 
+ 	    populateAttributes (element, atts);
+ 	    if (recreatedAttrs) {
+ 		recreatedAttrs = false;
+ 		// ... DOM deletes any duplicates
+ 		populateAttributes (element, attributes);
+ 		attributes.clear ();
+ 	    }
+ 
+ 	    top.appendChild (element);
+ 	    top = element;
+ 	}
+ 
+ 	final static String	xmlnsURI = "http://www.w3.org/2000/xmlns/";
+ 
+ 	private void populateAttributes (Element element, Attributes attrs)
+ 	throws SAXParseException
+ 	{
+ 	    int		length = attrs.getLength ();
+ 
+ 	    for (int i = 0; i < length; i++) {
+ 		String	type = attrs.getType (i);
+ 		String	value = attrs.getValue (i);
+ 		String	name = attrs.getQName (i);
+ 		String	local = attrs.getLocalName (i);
+ 		String	uri = attrs.getURI (i);
+ 
+ 		// parser discarded basic information, DOM tree isn't writable
+ 		if (name.length () == 0)
+ 		    name = local;
+ 
+ 		// all attribute types other than these three may not
+ 		// contain scoped names... enumerated attributes get
+ 		// reported as NMTOKEN, except for NOTATION values
+ 		if (!("CDATA".equals (type)
+ 			|| "NMTOKEN".equals (type)
+ 			|| "NMTOKENS".equals (type))) {
+ 		    if (value.indexOf (':') != -1) {
+ 			namespaceError (
+ 				"namespace nonconformant attribute value: "
+ 				    + "<" + element.getNodeName ()
+ 				    + " " + name + "='" + value + "' ...>");
+ 		    }
+ 		}
+ 
+ 		// xmlns="" is legal (undoes default NS)
+ 		// xmlns:foo="" is illegal
+ 		String prefix = getPrefix (name);
+ 		String namespace;
+ 
+ 		if ("xmlns".equals (prefix)) {
+ 		    if ("".equals (value))
+ 			namespaceError ("illegal null namespace decl, " + name);
+ 		    namespace = xmlnsURI;
+ 		} else if ("xmlns".equals (name))
+ 		    namespace = xmlnsURI;
+ 
+ 		else if (prefix == null)
+ 		    namespace = null;
+ 		else if (!"".equals(uri) && uri.length () != 0)
+ 		    namespace = uri;
+ 		else
+ 		    namespace = getNamespace (prefix, attrs);
+ 
+ 		if (namespace == null)
+ 		    element.setAttribute (name, value);
+ 		else
+ 		    element.setAttributeNS (namespace, name, value);
+ 	    }
+ 	}
+ 
+ 	private String getPrefix (String name)
+ 	{
+ 	    int		temp;
+ 
+ 	    if ((temp = name.indexOf (':')) > 0)
+ 		return name.substring (0, temp);
+ 	    return null;
+ 	}
+ 
+ 	// used with SAX1-level parser output 
+ 	private String getNamespace (String prefix, Attributes attrs)
+ 	throws SAXParseException
+ 	{
+ 	    String namespace;
+ 	    String decl;
+ 
+ 	    // defaulting 
+ 	    if (prefix == null) {
+ 		decl = "xmlns";
+ 		namespace = attrs.getValue (decl);
+ 		if ("".equals (namespace))
+ 		    return null;
+ 		else if (namespace != null)
+ 		    return namespace;
+ 
+ 	    // "xmlns" is like a keyword
+ 	    // ... according to the Namespace REC, but DOM L2 CR2+
+ 	    // and Infoset violate that by assigning a namespace.
+ 	    // that conflict is resolved elsewhere.
+ 	    } else if ("xmlns".equals (prefix))
+ 		return null;
+ 
+ 	    // "xml" prefix is fixed
+ 	    else if ("xml".equals (prefix))
+ 		return "http://www.w3.org/XML/1998/namespace";
+ 
+ 	    // otherwise, expect a declaration
+ 	    else {
+ 		decl = "xmlns:" + prefix;
+ 		namespace = attrs.getValue (decl);
+ 	    }
+ 	    
+ 	    // if we found a local declaration, great
+ 	    if (namespace != null)
+ 		return namespace;
+ 
+ 
+ 	    // ELSE ... search up the tree we've been building
+ 	    for (Node n = top;
+ 		    n != null && n.getNodeType () != Node.DOCUMENT_NODE;
+ 		    n = (Node) n.getParentNode ()) {
+ 		if (n.getNodeType () == Node.ENTITY_REFERENCE_NODE)
+ 		    continue;
+ 		Element e = (Element) n;
+ 		Attr attr = e.getAttributeNode (decl);
+ 		if (attr != null)
+ 		    return attr.getNodeValue ();
+ 	    }
+ 	    // see above re "xmlns" as keyword
+ 	    if ("xmlns".equals (decl))
+ 		return null;
+ 
+ 	    namespaceError ("Undeclared namespace prefix: " + prefix);
+ 	    return null;
+ 	}
+ 
+ 	// SAX2
+ 	public void endElement (String uri, String localName, String qName)
+ 	throws SAXException
+ 	{
+ 	    // we can't create populated entity ref nodes using
+ 	    // only public DOM APIs (they've got to be readonly)
+ 	    if (currentEntity != null)
+ 		return;
+ 
+ 	    top = top.getParentNode ();
+ 	}
+ 
+ 	// SAX1 (mandatory reporting if validating)
+ 	public void ignorableWhitespace (char ch [], int start, int length)
+ 	throws SAXException
+ 	{
+ 	    if (consumer.isHidingWhitespace ())
+ 		return;
+ 	    characters (ch, start, length);
+ 	}
+ 
+ 	// SAX2 lexical event
+ 	public void startCDATA ()
+ 	throws SAXException
+ 	{
+ 	    inCDATA = true;
+ 	    // true except for the first fragment of a cdata section
+ 	    mergeCDATA = false;
+ 	}
+ 	
+ 	// SAX2 lexical event
+ 	public void endCDATA ()
+ 	throws SAXException
+ 	{
+ 	    inCDATA = false;
+ 	}
+ 	
+ 	// SAX2 lexical event
+ 	//
+ 	// this SAX2 callback merges two unrelated things:
+ 	//	- Declaration of the root element type ... belongs with
+ 	//    the other DTD declaration methods, NOT HERE.
+ 	//	- IDs for the optional external subset ... belongs here
+ 	//    with other lexical information.
+ 	//
+ 	// ...and it doesn't include the internal DTD subset, desired
+ 	// both to support DOM L2 and to enable "pass through" processing
+ 	//
+ 	public void startDTD (String name, String publicId, String SystemId)
+ 	throws SAXException
+ 	{
+ 	    // need to filter out comments and PIs within the DTD
+ 	    inDTD = true;
+ 	}
+ 	
+ 	// SAX2 lexical event
+ 	public void endDTD ()
+ 	throws SAXException
+ 	{
+ 	    inDTD = false;
+ 	}
+ 	
+ 	// SAX2 lexical event
+ 	public void comment (char ch [], int start, int length)
+ 	throws SAXException
+ 	{
+ 	    Node	comment;
+ 
+ 	    // we can't create populated entity ref nodes using
+ 	    // only public DOM APIs (they've got to be readonly)
+ 	    if (consumer.isHidingComments ()
+ 		    || inDTD
+ 		    || currentEntity != null)
+ 		return;
+ 	    comment = document.createComment (new String (ch, start, length));
+ 	    top.appendChild (comment);
+ 	}
+ 
+ 	/**
+ 	 * May be overridden by subclasses to return true, indicating
+ 	 * that entity reference nodes can be populated and then made
+ 	 * read-only.
+ 	 */
+ 	public boolean canPopulateEntityRefs ()
+ 	    { return false; }
+ 
+ 	// SAX2 lexical event
+ 	public void startEntity (String name)
+ 	throws SAXException
+ 	{
+ 	    // are we ignoring what would be contents of an
+ 	    // entity ref, since we can't populate it?
+ 	    if (currentEntity != null)
+ 		return;
+ 
+ 	    // Are we hiding all entity boundaries?
+ 	    if (consumer.isHidingReferences ())
+ 		return;
+ 
+ 	    // SAX2 shows parameter entities; DOM hides them
+ 	    if (name.charAt (0) == '%' || "[dtd]".equals (name))
+ 		return;
+ 
+ 	    // Since we can't create a populated entity ref node in any
+ 	    // standard way, we create an unpopulated one.
+ 	    EntityReference ref = document.createEntityReference (name);
+ 	    top.appendChild (ref);
+ 	    top = ref;
+ 
+ 	    // ... allowing subclasses to populate them
+ 	    if (!canPopulateEntityRefs ())
+ 		currentEntity = name;
+ 	}
+ 
+ 	// SAX2 lexical event
+ 	public void endEntity (String name)
+ 	throws SAXException
+ 	{
+ 	    if (name.charAt (0) == '%' || "[dtd]".equals (name))
+ 		return;
+ 	    if (name.equals (currentEntity))
+ 		currentEntity = null;
+ 	    if (!consumer.isHidingReferences ())
+ 		top = top.getParentNode ();
+ 	}
+ 
+ 
+ 	// SAX1 DTD event
+ 	public void notationDecl (
+ 	    String name,
+ 	    String publicId, String SystemId
+ 	) throws SAXException
+ 	{
+ 	    /* IGNORE -- no public DOM API lets us store these
+ 	     * into the doctype node
+ 	     */
+ 	}
+ 
+ 	// SAX1 DTD event
+ 	public void unparsedEntityDecl (
+ 	    String name,
+ 	    String publicId, String SystemId,
+ 	    String notationName
+ 	) throws SAXException
+ 	{
+ 	    /* IGNORE -- no public DOM API lets us store these
+ 	     * into the doctype node
+ 	     */
+ 	}
+ 
+ 	// SAX2 declaration event
+ 	public void elementDecl (String name, String model)
+ 	throws SAXException
+ 	{
+ 	    /* IGNORE -- no content model support in DOM L2 */
+ 	}
+ 
+ 	// SAX2 declaration event
+ 	public void attributeDecl (
+ 	    String eName,
+ 	    String aName,
+ 	    String type,
+ 	    String mode,
+ 	    String value
+ 	) throws SAXException
+ 	{
+ 	    /* IGNORE -- no attribute model support in DOM L2 */
+ 	}
+ 
+ 	// SAX2 declaration event
+ 	public void internalEntityDecl (String name, String value)
+ 	throws SAXException
+ 	{
+ 	    /* IGNORE -- no public DOM API lets us store these
+ 	     * into the doctype node
+ 	     */
+ 	}
+ 
+ 	// SAX2 declaration event
+ 	public void externalEntityDecl (
+ 	    String name,
+ 	    String publicId,
+ 	    String SystemId
+ 	) throws SAXException
+ 	{
+ 	    /* IGNORE -- no public DOM API lets us store these
+ 	     * into the doctype node
+ 	     */
+ 	}
+ 
+ 	//
+ 	// These really should offer the option of nonfatal handling,
+ 	// like other validity errors, though that would cause major
+ 	// chaos in the DOM data structures.  DOM is already spec'd
+ 	// to treat many of these as fatal, so this is consistent.
+ 	//
+ 	private void namespaceError (String description)
+ 	throws SAXParseException
+ 	{
+ 	    SAXParseException err;
+ 	    
+ 	    err = new SAXParseException (description, locator);
+ 	    throw err;
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/EventConsumer.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/EventConsumer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/EventConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/EventConsumer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,95 ----
+ /* EventConsumer.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import org.xml.sax.*;
+ 
+ 
+ /**
+  * Collects the event consumption apparatus of a SAX pipeline stage.
+  * Consumers which permit some handlers or other characteristics to be
+  * configured will provide methods to support that configuration.
+  *
+  * <p> Two important categories of consumers include <em>filters</em>, which
+  * process events and pass them on to other consumers, and <em>terminus</em>
+  * (or <em>terminal</em>) stages, which don't pass events on.  Filters are not
+  * necessarily derived from the {@link EventFilter} class, although that
+  * class can substantially simplify their construction by automating the
+  * most common activities.
+  *
+  * <p> Event consumers which follow certain conventions for the signatures
+  * of their constructors can be automatically assembled into pipelines
+  * by the {@link PipelineFactory} class.
+  *
+  * @author David Brownell
+  */
+ public interface EventConsumer
+ {
+     /** Most stages process these core SAX callbacks. */
+     public ContentHandler getContentHandler ();
+ 
+     /** Few stages will use unparsed entities. */
+     public DTDHandler getDTDHandler ();
+ 
+     /**
+      * This method works like the SAX2 XMLReader method of the same name,
+      * and is used to retrieve the optional lexical and declaration handlers
+      * in a pipeline.
+      *
+      * @param id This is a URI identifying the type of property desired.
+      * @return The value of that property, if it is defined.
+      *
+      * @exception SAXNotRecognizedException Thrown if the particular
+      *	pipeline stage does not understand the specified identifier.
+      */
+     public Object getProperty (String id)
+     throws SAXNotRecognizedException;
+ 
+     /**
+      * This method provides a filter stage with a handler that abstracts
+      * presentation of warnings and both recoverable and fatal errors.
+      * Most pipeline stages should share a single policy and mechanism
+      * for such reports, since application components require consistency
+      * in such activities.  Accordingly, typical responses to this method
+      * invocation involve saving the handler for use; filters will pass
+      * it on to any other consumers they use.
+      *
+      * @param handler encapsulates error handling policy for this stage
+      */
+     public void setErrorHandler (ErrorHandler handler);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/EventFilter.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/EventFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/EventFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/EventFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,809 ----
+ /* EventFilter.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ 
+ import org.xml.sax.*;
+ import org.xml.sax.ext.*;
+ import org.xml.sax.helpers.XMLFilterImpl;
+ 
+ import gnu.xml.aelfred2.ContentHandler2;
+ 
+ /**
+  * A customizable event consumer, used to assemble various kinds of filters
+  * using SAX handlers and an optional second consumer.  It can be constructed
+  * in two ways: <ul>
+  *
+  *  <li> To serve as a passthrough, sending all events to a second consumer.
+  *  The second consumer may be identified through {@link #getNext}.
+  *
+  *  <li> To serve as a dead end, with all handlers null;
+  *  {@link #getNext} returns null.
+  *
+  * </ul>
+  *
+  * <p> Additionally, SAX handlers may be assigned, which completely replace
+  * the "upstream" view (through {@link EventConsumer}) of handlers, initially
+  * null or the "next" consumer provided to the constructor.  To make
+  * it easier to build specialized filter classes, this class implements
+  * all the standard SAX consumer handlers, and those implementations
+  * delegate "downstream" to the consumer accessed by {@link #getNext}.
+  *
+  * <p> The simplest way to create a custom a filter class is to create a
+  * subclass which overrides one or more handler interface methods.  The
+  * constructor for that subclass then registers itself as a handler for
+  * those interfaces using a call such as <em>setContentHandler(this)</em>,
+  * so the "upstream" view of event delivery is modified from the state
+  * established in the base class constructor.  That way,
+  * the overridden methods intercept those event callbacks
+  * as they go "downstream", and
+  * all other event callbacks will pass events to any next consumer.
+  * Overridden methods may invoke superclass methods (perhaps after modifying
+  * parameters) if they wish to delegate such calls.  Such subclasses
+  * should use {@link #getErrorHandler} to report errors using the
+  * common error reporting mechanism.
+  *
+  * <p> Another important technique is to construct a filter consisting
+  * of only a few specific types of handler.  For example, one could easily
+  * prune out lexical events or various declarations by providing handlers
+  * which don't pass those events downstream, or by providing null handlers.
+  *
+  * <hr />
+  *
+  * <p> This may be viewed as the consumer oriented analogue of the SAX2
+  * {@link org.xml.sax.helpers.XMLFilterImpl XMLFilterImpl} class.
+  * Key differences include: <ul>
+  *
+  *	<li> This fully separates consumer and producer roles:  it
+  *	does not implement the producer side <em>XMLReader</em> or
+  *	<em>EntityResolver</em> interfaces, so it can only be used
+  *	in "push" mode (it has no <em>parse()</em> methods).
+  *
+  *	<li> "Extension" handlers are fully supported, enabling a
+  *	richer set of application requirements.
+  *	And it implements {@link EventConsumer}, which groups related
+  *	consumer methods together, rather than leaving them separated.
+  *
+  *	<li> The chaining which is visible is "downstream" to the next
+  *	consumer, not "upstream" to the preceding producer.
+  *	It supports "fan-in", where
+  *	a consumer can be fed by several producers.  (For "fan-out",
+  *	see the {@link TeeConsumer} class.)
+  *
+  *	<li> Event chaining is set up differently.  It is intended to
+  *	work "upstream" from terminus towards producer, during filter
+  *	construction, as described above.
+  *	This is part of an early binding model:
+  *	events don't need to pass through stages which ignore them.
+  *
+  *	<li> ErrorHandler support is separated, on the grounds that
+  *	pipeline stages need to share the same error handling policy.
+  *	For the same reason, error handler setup goes "downstream":
+  *	when error handlers get set, they are passed to subsequent
+  *	consumers.
+  *
+  *	</ul>
+  *
+  * <p> The {@link #chainTo chainTo()} convenience routine supports chaining to
+  * an XMLFilterImpl, in its role as a limited functionality event
+  * consumer.  Its event producer role ({@link XMLFilter}) is ignored.
+  *
+  * <hr />
+  *
+  * <p> The {@link #bind bind()} routine may be used associate event pipelines
+  * with any kind of {@link XMLReader} that will produce the events.
+  * Such pipelines don't necessarily need to have any members which are
+  * implemented using this class.  That routine has some intelligence
+  * which supports automatic changes to parser feature flags, letting
+  * event piplines become largely independent of the particular feature
+  * sets of parsers.
+  *
+  * @author David Brownell
+  */
+ public class EventFilter
+     implements EventConsumer, ContentHandler2, DTDHandler,
+ 	    LexicalHandler, DeclHandler
+ {
+     // SAX handlers
+     private ContentHandler		docHandler, docNext;
+     private DTDHandler			dtdHandler, dtdNext;
+     private LexicalHandler		lexHandler, lexNext;
+     private DeclHandler			declHandler, declNext;
+     // and ideally, one more for the stuff SAX2 doesn't show
+ 
+     private Locator			locator;
+     private EventConsumer		next;
+     private ErrorHandler		errHandler;
+ 
+     
+     /** SAX2 URI prefix for standard feature flags. */
+     public static final String		FEATURE_URI
+ 	= "http://xml.org/sax/features/";
+     /** SAX2 URI prefix for standard properties (mostly for handlers). */
+     public static final String		PROPERTY_URI
+ 	= "http://xml.org/sax/properties/";
+ 
+     /** SAX2 property identifier for {@link DeclHandler} events */
+     public static final String		DECL_HANDLER
+ 	= PROPERTY_URI + "declaration-handler";
+     /** SAX2 property identifier for {@link LexicalHandler} events */
+     public static final String		LEXICAL_HANDLER
+ 	= PROPERTY_URI + "lexical-handler";
+     
+     //
+     // These class objects will be null if the relevant class isn't linked.
+     // Small configurations (pJava and some kinds of embedded systems) need
+     // to facilitate smaller executables.  So "instanceof" is undesirable
+     // when bind() sees if it can remove some stages.
+     //
+     // SECURITY NOTE:  assuming all these classes are part of the same sealed
+     // package, there's no problem saving these in the instance of this class
+     // that's associated with "this" class loader.  But that wouldn't be true
+     // for classes in another package.
+     //
+     private static boolean		loaded;
+     private static Class		nsClass;
+     private static Class		validClass;
+     private static Class		wfClass;
+     private static Class		xincClass;
+ 
+     static ClassLoader getClassLoader ()
+     {
+         Method m = null;
+ 
+         try {
+             m = Thread.class.getMethod("getContextClassLoader", null);
+         } catch (NoSuchMethodException e) {
+             // Assume that we are running JDK 1.1, use the current ClassLoader
+             return EventFilter.class.getClassLoader();
+         }
+ 
+         try {
+             return (ClassLoader) m.invoke(Thread.currentThread(), null);
+         } catch (IllegalAccessException e) {
+             // assert(false)
+             throw new UnknownError(e.getMessage());
+         } catch (InvocationTargetException e) {
+             // assert(e.getTargetException() instanceof SecurityException)
+             throw new UnknownError(e.getMessage());
+         }
+     }
+ 
+     static Class loadClass (ClassLoader classLoader, String className)
+     {
+ 	try {
+ 	    if (classLoader == null)
+ 		return Class.forName(className);
+ 	    else
+ 		return classLoader.loadClass(className);
+ 	} catch (Exception e) {
+ 	    return null;
+ 	}
+     }
+ 
+     static private void loadClasses ()
+     {
+ 	ClassLoader	loader = getClassLoader ();
+ 
+ 	nsClass = loadClass (loader, "gnu.xml.pipeline.NSFilter");
+ 	validClass = loadClass (loader, "gnu.xml.pipeline.ValidationConsumer");
+ 	wfClass = loadClass (loader, "gnu.xml.pipeline.WellFormednessFilter");
+ 	xincClass = loadClass (loader, "gnu.xml.pipeline.XIncludeFilter");
+ 	loaded = true;
+     }
+ 
+ 
+     /**
+      * Binds the standard SAX2 handlers from the specified consumer
+      * pipeline to the specified producer.  These handlers include the core
+      * {@link ContentHandler} and {@link DTDHandler}, plus the extension
+      * {@link DeclHandler} and {@link LexicalHandler}.  Any additional
+      * application-specific handlers need to be bound separately.
+      * The {@link ErrorHandler} is handled differently:  the producer's
+      * error handler is passed through to the consumer pipeline.
+      * The producer is told to include namespace prefix information if it
+      * can, since many pipeline stages need that Infoset information to
+      * work well.
+      *
+      * <p> At the head of the pipeline, certain standard event filters are
+      * recognized and handled specially.  This facilitates construction
+      * of processing pipelines that work regardless of the capabilities
+      * of the XMLReader implementation in use; for example, it permits
+      * validating output of a {@link gnu.xml.util.DomParser}. <ul>
+      *
+      *	<li> {@link NSFilter} will be removed if the producer can be
+      *	told not to discard namespace data, using the "namespace-prefixes"
+      *	feature flag.
+      *
+      *	<li> {@link ValidationConsumer} will be removed if the producer
+      *	can be told to validate, using the "validation" feature flag.
+      *
+      *	<li> {@link WellFormednessFilter} is always removed, on the
+      *	grounds that no XMLReader is permitted to producee malformed
+      *	event streams and this would just be processing overhead.
+      *
+      *	<li> {@link XIncludeFilter} stops the special handling, except
+      *	that it's told about the "namespace-prefixes" feature of the
+      *	event producer so that the event stream is internally consistent.
+      *
+      *	<li> The first consumer which is not one of those classes stops
+      *	such special handling.  This means that if you want to force
+      *	one of those filters to be used, you could just precede it with
+      *	an instance of {@link EventFilter} configured as a pass-through.
+      *	You might need to do that if you are using an {@link NSFilter}
+      *	subclass to fix names found in attributes or character data.
+      *
+      *	</ul>
+      *
+      * <p> Other than that, this method works with any kind of event consumer,
+      * not just event filters.  Note that in all cases, the standard handlers
+      * are assigned; any previous handler assignments for the handler will
+      * be overridden.
+      *
+      * @param producer will deliver events to the specified consumer 
+      * @param consumer pipeline supplying event handlers to be associated
+      *	with the producer (may not be null)
+      */
+     public static void bind (XMLReader producer, EventConsumer consumer)
+     {
+ 	Class	klass = null;
+ 	boolean	prefixes;
+ 
+ 	if (!loaded)
+ 	    loadClasses ();
+ 
+ 	// DOM building, printing, layered validation, and other
+ 	// things don't work well when prefix info is discarded.
+ 	// Include it by default, whenever possible.
+ 	try {
+ 	    producer.setFeature (FEATURE_URI + "namespace-prefixes",
+ 		true);
+ 	    prefixes = true;
+ 	} catch (SAXException e) {
+ 	    prefixes = false;
+ 	}
+ 
+ 	// NOTE:  This loop doesn't use "instanceof", since that
+ 	// would prevent compiling/linking without those classes
+ 	// being present.
+ 	while (consumer != null) {
+ 	    klass = consumer.getClass ();
+ 
+ 	    // we might have already changed this problematic SAX2 default.
+ 	    if (nsClass != null && nsClass.isAssignableFrom (klass)) {
+ 		if (!prefixes)
+ 		    break;
+ 		consumer = ((EventFilter)consumer).getNext ();
+ 
+ 	    // the parser _might_ do DTD validation by default ...
+ 	    // if not, maybe we can change this setting.
+ 	    } else if (validClass != null
+ 		    && validClass.isAssignableFrom (klass)) {
+ 		try {
+ 		    producer.setFeature (FEATURE_URI + "validation",
+ 			true);
+ 		    consumer = ((ValidationConsumer)consumer).getNext ();
+ 		} catch (SAXException e) {
+ 		    break;
+ 		}
+ 
+ 	    // parsers are required not to have such bugs
+ 	    } else if (wfClass != null && wfClass.isAssignableFrom (klass)) {
+ 		consumer = ((WellFormednessFilter)consumer).getNext ();
+ 
+ 	    // stop on the first pipeline stage we can't remove
+ 	    } else
+ 		break;
+ 	    
+ 	    if (consumer == null)
+ 		klass = null;
+ 	}
+ 
+ 	// the actual setting here doesn't matter as much
+ 	// as that producer and consumer agree
+ 	if (xincClass != null && klass != null
+ 		&& xincClass.isAssignableFrom (klass))
+ 	    ((XIncludeFilter)consumer).setSavingPrefixes (prefixes);
+ 
+ 	// Some SAX parsers can't handle null handlers -- bleech
+ 	DefaultHandler2	h = new DefaultHandler2 ();
+ 
+ 	if (consumer != null && consumer.getContentHandler () != null)
+ 	    producer.setContentHandler (consumer.getContentHandler ());
+ 	else
+ 	    producer.setContentHandler (h);
+ 	if (consumer != null && consumer.getDTDHandler () != null)
+ 	    producer.setDTDHandler (consumer.getDTDHandler ());
+ 	else
+ 	    producer.setDTDHandler (h);
+ 
+ 	try {
+ 	    Object	dh;
+ 	    
+ 	    if (consumer != null)
+ 		dh = consumer.getProperty (DECL_HANDLER);
+ 	    else
+ 		dh = null;
+ 	    if (dh == null)
+ 		dh = h;
+ 	    producer.setProperty (DECL_HANDLER, dh);
+ 	} catch (Exception e) { /* ignore */ }
+ 	try {
+ 	    Object	lh;
+ 	    
+ 	    if (consumer != null)
+ 		lh = consumer.getProperty (LEXICAL_HANDLER);
+ 	    else
+ 		lh = null;
+ 	    if (lh == null)
+ 		lh = h;
+ 	    producer.setProperty (LEXICAL_HANDLER, lh);
+ 	} catch (Exception e) { /* ignore */ }
+ 
+ 	// this binding goes the other way around
+ 	if (producer.getErrorHandler () == null)
+ 	    producer.setErrorHandler (h);
+ 	if (consumer != null)
+ 	    consumer.setErrorHandler (producer.getErrorHandler ());
+     }
+     
+     /**
+      * Initializes all handlers to null.
+      */
+ 	// constructor used by PipelineFactory
+     public EventFilter () { }
+ 
+ 
+     /**
+      * Handlers that are not otherwise set will default to those from
+      * the specified consumer, making it easy to pass events through.
+      * If the consumer is null, all handlers are initialzed to null.
+      */
+ 	// constructor used by PipelineFactory
+     public EventFilter (EventConsumer consumer)
+     {
+ 	if (consumer == null)
+ 	    return;
+ 
+ 	next = consumer;
+ 
+ 	// We delegate through the "xxNext" handlers, and
+ 	// report the "xxHandler" ones on our input side.
+ 
+ 	// Normally a subclass would both override handler
+ 	// methods and register itself as the "xxHandler".
+ 
+ 	docHandler = docNext = consumer.getContentHandler ();
+ 	dtdHandler = dtdNext = consumer.getDTDHandler ();
+ 	try {
+ 	    declHandler = declNext = (DeclHandler)
+ 		    consumer.getProperty (DECL_HANDLER);
+ 	} catch (SAXException e) { /* leave value null */ }
+ 	try {
+ 	    lexHandler = lexNext = (LexicalHandler)
+ 		    consumer.getProperty (LEXICAL_HANDLER);
+ 	} catch (SAXException e) { /* leave value null */ }
+     }
+ 
+     /**
+      * Treats the XMLFilterImpl as a limited functionality event consumer,
+      * by arranging to deliver events to it; this lets such classes be
+      * "wrapped" as pipeline stages.
+      *
+      * <p> <em>Upstream Event Setup:</em>
+      * If no handlers have been assigned to this EventFilter, then the
+      * handlers from specified XMLFilterImpl are returned from this
+      * {@link EventConsumer}: the XMLFilterImpl is just "wrapped".
+      * Otherwise the specified handlers will be returned.
+      *
+      * <p> <em>Downstream Event Setup:</em>
+      * Subclasses may chain event delivery to the specified XMLFilterImpl
+      * by invoking the appropiate superclass methods,
+      * as if their constructor passed a "next" EventConsumer to the
+      * constructor for this class.
+      * If this EventFilter has an ErrorHandler, it is assigned as
+      * the error handler for the XMLFilterImpl, just as would be
+      * done for a next stage implementing {@link EventConsumer}.
+      *
+      * @param next the next downstream component of the pipeline.
+      * @exception IllegalStateException if the "next" consumer has
+      *	already been set through the constructor.
+      */
+     public void chainTo (XMLFilterImpl next)
+     {
+ 	if (this.next != null)
+ 	    throw new IllegalStateException ();
+ 
+ 	docNext = next.getContentHandler ();
+ 	if (docHandler == null)
+ 	    docHandler = docNext;
+ 	dtdNext = next.getDTDHandler ();
+ 	if (dtdHandler == null)
+ 	    dtdHandler = dtdNext;
+ 
+ 	try {
+ 	    declNext = (DeclHandler) next.getProperty (DECL_HANDLER);
+ 	    if (declHandler == null)
+ 		declHandler = declNext;
+ 	} catch (SAXException e) { /* leave value null */ }
+ 	try {
+ 	    lexNext = (LexicalHandler) next.getProperty (LEXICAL_HANDLER);
+ 	    if (lexHandler == null)
+ 		lexHandler = lexNext;
+ 	} catch (SAXException e) { /* leave value null */ }
+ 
+ 	if (errHandler != null)
+ 	    next.setErrorHandler (errHandler);
+     }
+ 
+     /**
+      * Records the error handler that should be used by this stage, and
+      * passes it "downstream" to any subsequent stage.
+      */
+     final public void setErrorHandler (ErrorHandler handler)
+     {
+ 	errHandler = handler;
+ 	if (next != null)
+ 	    next.setErrorHandler (handler);
+     }
+ 
+     /**
+      * Returns the error handler assigned this filter stage, or null
+      * if no such assigment has been made.
+      */
+     final public ErrorHandler getErrorHandler ()
+     {
+ 	return errHandler;
+     }
+ 
+ 
+     /**
+      * Returns the next event consumer in sequence; or null if there
+      * is no such handler.
+      */
+     final public EventConsumer getNext ()
+ 	{ return next; }
+ 
+ 
+     /**
+      * Assigns the content handler to use; a null handler indicates
+      * that these events will not be forwarded.
+      * This overrides the previous settting for this handler, which was
+      * probably pointed to the next consumer by the base class constructor.
+      */
+     final public void setContentHandler (ContentHandler h)
+     {
+ 	docHandler = h;
+     }
+ 
+     /** Returns the content handler being used. */
+     final public ContentHandler getContentHandler ()
+     {
+ 	return docHandler;
+     }
+ 
+     /**
+      * Assigns the DTD handler to use; a null handler indicates
+      * that these events will not be forwarded.
+      * This overrides the previous settting for this handler, which was
+      * probably pointed to the next consumer by the base class constructor.
+      */
+     final public void setDTDHandler (DTDHandler h)
+ 	{ dtdHandler = h; }
+ 
+     /** Returns the dtd handler being used. */
+     final public DTDHandler getDTDHandler ()
+     {
+ 	return dtdHandler;
+     }
+ 
+     /**
+      * Stores the property, normally a handler; a null handler indicates
+      * that these events will not be forwarded.
+      * This overrides the previous handler settting, which was probably
+      * pointed to the next consumer by the base class constructor.
+      */
+     final public void setProperty (String id, Object o)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	try {
+ 	    Object	value = getProperty (id);
+ 
+ 	    if (value == o)
+ 		return;
+ 	    if (DECL_HANDLER.equals (id)) {
+ 		declHandler = (DeclHandler) o;
+ 		return;
+ 	    }
+ 	    if (LEXICAL_HANDLER.equals (id)) {
+ 		lexHandler = (LexicalHandler) o;
+ 		return;
+ 	    }
+ 	    throw new SAXNotSupportedException (id);
+ 
+ 	} catch (ClassCastException e) {
+ 	    throw new SAXNotSupportedException (id);
+ 	}
+     }
+ 
+     /** Retrieves a property of unknown intent (usually a handler) */
+     final public Object getProperty (String id)
+     throws SAXNotRecognizedException
+     {
+ 	if (DECL_HANDLER.equals (id)) 
+ 	    return declHandler;
+ 	if (LEXICAL_HANDLER.equals (id))
+ 	    return lexHandler;
+ 
+ 	throw new SAXNotRecognizedException (id);
+     }
+ 
+     /**
+      * Returns any locator provided to the next consumer, if this class
+      * (or a subclass) is handling {@link ContentHandler } events.
+      */
+     public Locator getDocumentLocator ()
+ 	{ return locator; }
+ 
+ 
+     // CONTENT HANDLER DELEGATIONS
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void setDocumentLocator (Locator locator)
+     {
+ 	this.locator = locator;
+ 	if (docNext != null)
+ 	    docNext.setDocumentLocator (locator);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void startDocument () throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.startDocument ();
+     }
+ 
+     public void xmlDecl(String version, String encoding, boolean standalone,
+                         String inputEncoding)
+       throws SAXException
+     {
+       if (docNext != null && docNext instanceof ContentHandler2)
+         {
+           ((ContentHandler2) docNext).xmlDecl(version, encoding, standalone,
+                                               inputEncoding);
+         }
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void skippedEntity (String name) throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.skippedEntity (name);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void processingInstruction (String target, String data)
+     throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.processingInstruction (target, data);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void characters (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.characters (ch, start, length);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void ignorableWhitespace (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.ignorableWhitespace (ch, start, length);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void startPrefixMapping (String prefix, String uri)
+     throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.startPrefixMapping (prefix, uri);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void startElement (
+ 	String uri, String localName,
+ 	String qName, Attributes atts
+     ) throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.startElement (uri, localName, qName, atts);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void endElement (String uri, String localName, String qName)
+     throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.endElement (uri, localName, qName);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void endPrefixMapping (String prefix) throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.endPrefixMapping (prefix);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void endDocument () throws SAXException
+     {
+ 	if (docNext != null)
+ 	    docNext.endDocument ();
+ 	locator = null;
+     }
+ 
+ 
+     // DTD HANDLER DELEGATIONS
+     
+     /** <b>SAX1:</b> passes this callback to the next consumer, if any */
+     public void unparsedEntityDecl (
+ 	String name,
+ 	String publicId,
+ 	String systemId,
+ 	String notationName
+     ) throws SAXException
+     {
+ 	if (dtdNext != null)
+ 	    dtdNext.unparsedEntityDecl (name, publicId, systemId, notationName);
+     }
+     
+     /** <b>SAX1:</b> passes this callback to the next consumer, if any */
+     public void notationDecl (String name, String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (dtdNext != null)
+ 	    dtdNext.notationDecl (name, publicId, systemId);
+     }
+     
+ 
+     // LEXICAL HANDLER DELEGATIONS
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void startDTD (String name, String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (lexNext != null)
+ 	    lexNext.startDTD (name, publicId, systemId);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void endDTD ()
+     throws SAXException
+     {
+ 	if (lexNext != null)
+ 	    lexNext.endDTD ();
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void comment (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (lexNext != null)
+ 	    lexNext.comment (ch, start, length);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void startCDATA ()
+     throws SAXException
+     {
+ 	if (lexNext != null)
+ 	    lexNext.startCDATA ();
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void endCDATA ()
+     throws SAXException
+     {
+ 	if (lexNext != null)
+ 	    lexNext.endCDATA ();
+     }
+ 
+     /**
+      * <b>SAX2:</b> passes this callback to the next consumer, if any.
+      */
+     public void startEntity (String name)
+     throws SAXException
+     {
+ 	if (lexNext != null)
+ 	    lexNext.startEntity (name);
+     }
+ 
+     /**
+      * <b>SAX2:</b> passes this callback to the next consumer, if any.
+      */
+     public void endEntity (String name)
+     throws SAXException
+     {
+ 	if (lexNext != null)
+ 	    lexNext.endEntity (name);
+     }
+     
+ 
+     // DECLARATION HANDLER DELEGATIONS
+ 
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void elementDecl (String name, String model)
+     throws SAXException
+     {
+ 	if (declNext != null)
+ 	    declNext.elementDecl (name, model);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void attributeDecl (String eName, String aName,
+ 	    String type, String mode, String value)
+     throws SAXException
+     {
+ 	if (declNext != null)
+ 	    declNext.attributeDecl (eName, aName, type, mode, value);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void externalEntityDecl (String name,
+     	String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (declNext != null)
+ 	    declNext.externalEntityDecl (name, publicId, systemId);
+     }
+ 
+     /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+     public void internalEntityDecl (String name, String value)
+     throws SAXException
+     {
+ 	if (declNext != null)
+ 	    declNext.internalEntityDecl (name, value);
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/LinkFilter.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/LinkFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/LinkFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/LinkFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,242 ----
+ /* LinkFilter.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.io.IOException;
+ import java.net.URL; 
+ import java.util.Enumeration;
+ import java.util.Vector;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.SAXException;
+ 
+ 
+ /**
+  * Pipeline filter to remember XHTML links found in a document,
+  * so they can later be crawled.  Fragments are not counted, and duplicates
+  * are ignored.  Callers are responsible for filtering out URLs they aren't
+  * interested in.  Events are passed through unmodified.
+  *
+  * <p> Input MUST include a setDocumentLocator() call, as it's used to
+  * resolve relative links in the absence of a "base" element.  Input MUST
+  * also include namespace identifiers, since it is the XHTML namespace
+  * identifier which is used to identify the relevant elements.
+  *
+  * <p><em>FIXME:</em> handle xml:base attribute ... in association with
+  * a stack of base URIs.  Similarly, recognize/support XLink data.
+  *
+  * @author David Brownell
+  */
+ public class LinkFilter extends EventFilter
+ {
+     // for storing URIs
+     private Vector		vector = new Vector ();
+ 
+ 	// struct for "full" link record (tbd)
+ 	// these for troubleshooting original source:
+ 	//	original uri
+ 	//	uri as resolved (base, relative, etc)
+ 	//	URI of originating doc
+ 	//	line #
+ 	//	original element + attrs (img src, desc, etc)
+ 
+ 	// XLink model of the link ... for inter-site pairups ?
+ 
+     private String		baseURI;
+ 
+     private boolean		siteRestricted = false;
+ 
+     //
+     // XXX leverage blacklist info (like robots.txt)
+     //
+     // XXX constructor w/param ... pipeline for sending link data
+     // probably XHTML --> XLink, providing info as sketched above
+     //
+ 
+ 
+     /**
+      * Constructs a new event filter, which collects links in private data
+      * structure for later enumeration.
+      */
+ 	// constructor used by PipelineFactory
+     public LinkFilter ()
+     {
+ 	super.setContentHandler (this);
+     }
+ 
+ 
+     /**
+      * Constructs a new event filter, which collects links in private data
+      * structure for later enumeration and passes all events, unmodified,
+      * to the next consumer.
+      */
+ 	// constructor used by PipelineFactory
+     public LinkFilter (EventConsumer next)
+     {
+ 	super (next);
+ 	super.setContentHandler (this);
+     }
+ 
+ 
+     /**
+      * Returns an enumeration of the links found since the filter
+      * was constructed, or since removeAllLinks() was called.
+      *
+      * @return enumeration of strings.
+      */
+     public Enumeration getLinks ()
+     {
+ 	return vector.elements ();
+     }
+ 
+     /**
+      * Removes records about all links reported to the event
+      * stream, as if the filter were newly created.
+      */
+     public void removeAllLinks ()
+     {
+ 	vector = new Vector ();
+     }
+ 
+ 
+     /**
+      * Collects URIs for (X)HTML content from elements which hold them.
+      */
+     public void startElement (
+ 	String		uri,
+ 	String		localName,
+ 	String		qName,
+ 	Attributes	atts
+     ) throws SAXException
+     {
+ 	String	link;
+ 
+ 	// Recognize XHTML links.
+ 	if ("http://www.w3.org/1999/xhtml".equals (uri)) {
+ 
+ 	    if ("a".equals (localName) || "base".equals (localName)
+ 		    || "area".equals (localName))
+ 		link = atts.getValue ("href");
+ 	    else if ("iframe".equals (localName) || "frame".equals (localName))
+ 		link = atts.getValue ("src");
+ 	    else if ("blockquote".equals (localName) || "q".equals (localName)
+ 		    || "ins".equals (localName) || "del".equals (localName))
+ 		link = atts.getValue ("cite");
+ 	    else
+ 		link = null;
+ 	    link = maybeAddLink (link);
+ 
+ 	    // "base" modifies designated baseURI
+ 	    if ("base".equals (localName) && link != null)
+ 		baseURI = link;
+ 
+ 	    if ("iframe".equals (localName) || "img".equals (localName))
+ 		maybeAddLink (atts.getValue ("longdesc"));
+ 	}
+ 	
+ 	super.startElement (uri, localName, qName, atts);
+     }
+ 
+     private String maybeAddLink (String link)
+     {
+ 	int		index;
+ 
+ 	// ignore empty links and fragments inside docs
+ 	if (link == null)
+ 	    return null;
+ 	if ((index = link.indexOf ("#")) >= 0)
+ 	    link = link.substring (0, index);
+ 	if (link.equals (""))
+ 	    return null;
+ 
+ 	try {
+ 	    // get the real URI
+ 	    URL		base = new URL ((baseURI != null)
+ 				    ? baseURI
+ 				    : getDocumentLocator ().getSystemId ());
+ 	    URL		url = new URL (base, link);
+ 
+ 	    link = url.toString ();
+ 
+ 	    // ignore duplicates
+ 	    if (vector.contains (link))
+ 		return link;
+ 
+ 	    // other than what "base" does, stick to original site:
+ 	    if (siteRestricted) {
+ 		// don't switch protocols
+ 		if (!base.getProtocol ().equals (url.getProtocol ()))
+ 		    return link;
+ 		// don't switch servers
+ 		if (base.getHost () != null
+ 			&& !base.getHost ().equals (url.getHost ()))
+ 		    return link;
+ 	    }
+ 
+ 	    vector.addElement (link);
+ 
+ 	    return link;
+ 	    
+ 	} catch (IOException e) {
+ 	    // bad URLs we don't want
+ 	}
+ 	return null;
+     }
+ 
+     /**
+      * Reports an error if no Locator has been made available.
+      */
+     public void startDocument ()
+     throws SAXException
+     {
+ 	if (getDocumentLocator () == null)
+ 	    throw new SAXException ("no Locator!");
+     }
+ 
+     /**
+      * Forgets about any base URI information that may be recorded.
+      * Applications will often want to call removeAllLinks(), likely
+      * after examining the links which were reported.
+      */
+     public void endDocument ()
+     throws SAXException
+     {
+ 	baseURI = null;
+ 	super.endDocument ();
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/NSFilter.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/NSFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/NSFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/NSFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,341 ----
+ /* NSFilter.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.util.Enumeration;
+ import java.util.Stack;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.helpers.AttributesImpl;
+ import org.xml.sax.helpers.NamespaceSupport;
+ 
+ /**
+  * This filter ensures that element and attribute names are properly prefixed,
+  * and that such prefixes are declared.  Such data is critical for operations
+  * like writing XML text, and validating against DTDs:  names or their prefixes
+  * may have been discarded, although they are essential to the exchange of
+  * information using XML.  There are various common ways that such data
+  * gets discarded: <ul>
+  *
+  *	<li> By default, SAX2 parsers must discard the "xmlns*"
+  *	attributes, and may also choose not to report properly prefixed
+  *	names for elements or attributes.  (Some parsers may support
+  *	changing the <em>namespace-prefixes</em> value from the default
+  *	to <em>true</em>, effectively eliminating the need to use this
+  *	filter on their output.)
+  *
+  *	<li> When event streams are generated from a DOM tree, they may
+  *	have never have had prefixes or declarations for namespaces; or
+  *	the existing prefixes or declarations may have been invalidated
+  *	by structural modifications to that DOM tree.
+  *
+  *	<li> Other software writing SAX event streams won't necessarily
+  *	be worrying about prefix management, and so they will need to
+  *	have a transparent solution for managing them.
+  *
+  *	</ul>
+  *
+  * <p> This filter uses a heuristic to choose the prefix to assign to any
+  * particular name which wasn't already corectly prefixed.  The associated
+  * namespace will be correct, and the prefix will be declared.  Original
+  * structures facilitating text editing, such as conventions about use of
+  * mnemonic prefix names or the scoping of prefixes, can't always be
+  * reconstructed after they are discarded, as strongly encouraged by the
+  * current SAX2 defaults.
+  *
+  * <p> Note that this can't possibly know whether values inside attribute
+  * value or document content involve prefixed names.  If your application
+  * requires using prefixed names in such locations you'll need to add some
+  * appropriate logic (perhaps adding additional heuristics in a subclass).
+  *
+  * @author David Brownell
+  */
+ public class NSFilter extends EventFilter
+ {
+     private NamespaceSupport	nsStack = new NamespaceSupport ();
+     private Stack		elementStack = new Stack ();
+ 
+     private boolean		pushedContext;
+     private String		nsTemp [] = new String [3];
+     private AttributesImpl	attributes = new AttributesImpl ();
+     private boolean		usedDefault;
+ 
+     // gensymmed prefixes use this root name
+     private static final String	prefixRoot = "prefix-";
+ 
+     
+     /**
+      * Passes events through to the specified consumer, after first
+      * processing them.
+      *
+      * @param next the next event consumer to receive events.
+      */
+ 	// constructor used by PipelineFactory
+     public NSFilter (EventConsumer next)
+     {
+ 	super (next);
+ 
+ 	setContentHandler (this);
+     }
+ 
+     private void fatalError (String message)
+     throws SAXException
+     {
+ 	SAXParseException	e;
+ 	ErrorHandler		handler = getErrorHandler ();
+ 	Locator			locator = getDocumentLocator ();
+ 
+ 	if (locator == null)
+ 	    e = new SAXParseException (message, null, null, -1, -1);
+ 	else
+ 	    e = new SAXParseException (message, locator);
+ 	if (handler != null)
+ 	    handler.fatalError (e);
+ 	throw e;
+     }
+ 
+ 
+     public void startDocument () throws SAXException
+     {
+ 	elementStack.removeAllElements ();
+ 	nsStack.reset ();
+ 	pushedContext = false;
+ 	super.startDocument ();
+     }
+ 
+     /**
+      * This call is not passed to the next consumer in the chain.
+      * Prefix declarations and scopes are only exposed in the form
+      * of attributes; this callback just records a declaration that
+      * will be exposed as an attribute.
+      */
+     public void startPrefixMapping (String prefix, String uri)
+     throws SAXException
+     {
+ 	if (pushedContext == false) {
+ 	    nsStack.pushContext ();
+ 	    pushedContext = true;
+ 	}
+ 
+ 	// this check is awkward, but the paranoia prevents big trouble
+ 	for (Enumeration e = nsStack.getDeclaredPrefixes ();
+ 		e.hasMoreElements ();
+ 		/* NOP */ ) {
+ 	    String	declared = (String) e.nextElement ();
+ 
+ 	    if (!declared.equals (prefix))
+ 		continue;
+ 	    if (uri.equals (nsStack.getURI (prefix)))
+ 		return;
+ 	    fatalError ("inconsistent binding for prefix '" + prefix
+ 		+ "' ... " + uri + " (was " + nsStack.getURI (prefix) + ")");
+ 	}
+ 
+ 	if (!nsStack.declarePrefix (prefix, uri))
+ 	    fatalError ("illegal prefix declared: " + prefix);
+     }
+ 
+     private String fixName (String ns, String l, String name, boolean isAttr)
+     throws SAXException
+     {
+ 	if ("".equals (name) || name == null) {
+ 	    name = l;
+ 	    if ("".equals (name) || name == null)
+ 		fatalError ("empty/null name");
+ 	}
+ 
+ 	// can we correctly process the name as-is?
+ 	// handles "element scope" attribute names here.
+ 	if (nsStack.processName (name, nsTemp, isAttr) != null
+ 		&& nsTemp [0].equals (ns)
+ 		) {
+ 	    return nsTemp [2];
+ 	}
+ 
+ 	// nope, gotta modify the name or declare a default mapping
+ 	int	temp;
+ 
+ 	// get rid of any current prefix
+ 	if ((temp = name.indexOf (':')) >= 0) {
+ 	    name = name.substring (temp + 1);
+ 
+ 	    // ... maybe that's enough (use/prefer default namespace) ...
+ 	    if (!isAttr && nsStack.processName (name, nsTemp, false) != null
+ 		    && nsTemp [0].equals (ns)
+ 		    ) {
+ 		return nsTemp [2];
+ 	    }
+ 	}
+ 
+ 	// must we define and use the default/undefined prefix?
+ 	if ("".equals (ns)) {
+ 	    if (isAttr)
+ 		fatalError ("processName bug");
+ 	    if (attributes.getIndex ("xmlns") != -1)
+ 		fatalError ("need to undefine default NS, but it's bound: "
+ 			+ attributes.getValue ("xmlns"));
+ 	    
+ 	    nsStack.declarePrefix ("", "");
+ 	    attributes.addAttribute ("", "", "xmlns", "CDATA", "");
+ 	    return name;
+ 	}
+ 
+ 	// is there at least one non-null prefix we can use?
+ 	for (Enumeration e = nsStack.getDeclaredPrefixes ();
+ 		e.hasMoreElements ();
+ 		/* NOP */) {
+ 	    String prefix = (String) e.nextElement ();
+ 	    String uri = nsStack.getURI (prefix);
+ 
+ 	    if (uri == null || !uri.equals (ns))
+ 		continue;
+ 	    return prefix + ":" + name;
+ 	}
+ 
+ 	// no such luck.  create a prefix name, declare it, use it.
+ 	for (temp = 0; temp >= 0; temp++) {
+ 	    String	prefix = prefixRoot + temp;
+ 
+ 	    if (nsStack.getURI (prefix) == null) {
+ 		nsStack.declarePrefix (prefix, ns);
+ 		attributes.addAttribute ("", "", "xmlns:" + prefix,
+ 			"CDATA", ns);
+ 		return prefix + ":" + name;
+ 	    }
+ 	}
+ 	fatalError ("too many prefixes genned");
+ 	// NOTREACHED
+ 	return null;
+     }
+ 
+     public void startElement (
+ 	String uri, String localName,
+ 	String qName, Attributes atts
+     ) throws SAXException
+     {
+ 	if (!pushedContext)
+ 	    nsStack.pushContext ();
+ 	pushedContext = false;
+ 
+ 	// make sure we have all NS declarations handy before we start
+ 	int	length = atts.getLength ();
+ 
+ 	for (int i = 0; i < length; i++) {
+ 	    String	aName = atts.getQName (i);
+ 
+ 	    if (!aName.startsWith ("xmlns"))
+ 		continue;
+ 
+ 	    String	prefix;
+ 
+ 	    if ("xmlns".equals (aName))
+ 		prefix = "";
+ 	    else if (aName.indexOf (':') == 5)
+ 		prefix = aName.substring (6);
+ 	    else	// "xmlnsfoo" etc.
+ 		continue;
+ 	    startPrefixMapping (prefix, atts.getValue (i));
+ 	}
+ 
+ 	// put namespace decls at the start of our regenned attlist
+ 	attributes.clear ();
+ 	for (Enumeration e = nsStack.getDeclaredPrefixes ();
+ 		e.hasMoreElements ();
+ 		/* NOP */) {
+ 	    String prefix = (String) e.nextElement ();
+ 
+ 	    attributes.addAttribute ("", "",
+ 		    ("".equals (prefix)
+ 			? "xmlns"
+ 			: "xmlns:" + prefix),
+ 		    "CDATA",
+ 		    nsStack.getURI (prefix));
+ 	}
+ 
+ 	// name fixups:  element, then attributes.
+ 	// fixName may declare a new prefix or, for the element,
+ 	// redeclare the default (if element name needs it).
+ 	qName = fixName (uri, localName, qName, false);
+ 
+ 	for (int i = 0; i < length; i++) {
+ 	    String	aName = atts.getQName (i);
+ 	    String	aNS = atts.getURI (i);
+ 	    String	aLocal = atts.getLocalName (i);
+ 	    String	aType = atts.getType (i);
+ 	    String	aValue = atts.getValue (i);
+ 
+ 	    if (aName.startsWith ("xmlns"))
+ 		continue;
+ 	    aName = fixName (aNS, aLocal, aName, true);
+ 	    attributes.addAttribute (aNS, aLocal, aName, aType, aValue);
+ 	}
+ 
+ 	elementStack.push (qName);
+ 
+ 	// pass event along, with cleaned-up names and decls.
+ 	super.startElement (uri, localName, qName, attributes);
+     }
+ 
+     public void endElement (String uri, String localName, String qName)
+     throws SAXException
+     {
+ 	nsStack.popContext ();
+ 	qName = (String) elementStack.pop ();
+ 	super.endElement (uri, localName, qName);
+     }
+ 
+     /**
+      * This call is not passed to the next consumer in the chain.
+      * Prefix declarations and scopes are only exposed in their
+      * attribute form.
+      */
+     public void endPrefixMapping (String prefix)
+     throws SAXException
+ 	{ }
+ 
+     public void endDocument () throws SAXException
+     {
+ 	elementStack.removeAllElements ();
+ 	nsStack.reset ();
+ 	super.endDocument ();
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/PipelineFactory.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/PipelineFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/PipelineFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/PipelineFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,723 ----
+ /* PipelineFactory.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.io.File;
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.lang.reflect.Constructor;
+ import java.util.StringTokenizer;
+ 
+ import org.xml.sax.*;
+ import org.xml.sax.ext.*;
+ 
+ 
+ /**
+  * This provides static factory methods for creating simple event pipelines.
+  * These pipelines are specified by strings, suitable for passing on
+  * command lines or embedding in element attributes.  For example, one way
+  * to write a pipeline that restores namespace syntax, validates (stopping
+  * the pipeline on validity errors) and then writes valid data to standard
+  * output is this: <pre>
+  *      nsfix | validate | write ( stdout )</pre>
+  *
+  * <p> In this syntax, the tokens are always separated by whitespace, and each
+  * stage of the pipeline may optionally have a parameter (which can be a
+  * pipeline) in parentheses.  Interior stages are called filters, and the
+  * rightmost end of a pipeline is called a terminus.
+  *
+  * <p> Stages are usually implemented by a single class, which may not be
+  * able to act as both a filter and a terminus; but any terminus can be
+  * automatically turned into a filter, through use of a {@link TeeConsumer}.
+  * The stage identifiers are either class names, or are one of the following
+  * short identifiers built into this class.  (Most of these identifiers are
+  * no more than aliases for classes.)  The built-in identifiers include:</p>
+  
+  <table border="1" cellpadding="3" cellspacing="0">
+     <tr bgcolor="#ccccff" class="TableHeadingColor">
+ 	<th align="center" width="5%">Stage</th>
+ 	<th align="center" width="9%">Parameter</th>
+ 	<th align="center" width="1%">Terminus</th>
+ 	<th align="center">Description</th>
+     </tr>
+ 
+     <tr valign="top" align="center">
+ 	<td><a href="../dom/Consumer.html">dom</a></td>
+ 	<td><em>none</em></td>
+ 	<td> yes </td>
+ 	<td align="left"> Applications code can access a DOM Document built
+ 	from the input event stream.  When used as a filter, this buffers
+ 	data up to an <em>endDocument</em> call, and then uses a DOM parser
+ 	to report everything that has been recorded (which can easily be
+ 	less than what was reported to it).  </td>
+     </tr>
+     <tr valign="top" align="center">
+ 	<td><a href="NSFilter.html">nsfix</a></td>
+ 	<td><em>none</em></td>
+ 	<td>no</td>
+ 	<td align="left">This stage ensures that the XML element and attribute
+ 	names in its output use namespace prefixes and declarations correctly.
+ 	That is, so that they match the "Namespace plus LocalName" naming data
+ 	with which each XML element and attribute is already associated.  </td>
+     </tr>
+     <tr valign="top" align="center">
+ 	<td><a href="EventFilter.html">null</a></td>
+ 	<td><em>none</em></td>
+ 	<td>yes</td>
+ 	<td align="left">This stage ignores all input event data.</td>
+     </tr>
+     <tr valign="top" align="center">
+ 	<td><a href="CallFilter.html">server</a></td>
+ 	<td><em>required</em><br> server URL </td>
+ 	<td>no</td>
+ 	<td align="left">Sends its input as XML request to a remote server,
+ 	normally a web application server using the HTTP or HTTPS protocols.
+ 	The output of this stage is the parsed response from that server.</td>
+     </tr>
+     <tr valign="top" align="center">
+ 	<td><a href="TeeConsumer.html">tee</a></td>
+ 	<td><em>required</em><br> first pipeline</td>
+ 	<td>no</td>
+ 	<td align="left">This sends its events down two paths; its parameter
+ 	is a pipeline descriptor for the first path, and the second path
+ 	is the output of this stage.</td>
+     </tr>
+ 
+     <tr valign="top" align="center">
+ 	<td><a href="ValidationConsumer.html">validate</a></td>
+ 	<td><em>none</em></td>
+ 	<td>yes</td>
+ 	<td align="left">This checks for validity errors, and reports them
+ 	through its error handler.  The input must include declaration events
+ 	and some lexical events.  </td>
+     </tr>
+     <tr valign="top" align="center">
+ 	<td><a href="WellFormednessFilter.html">wf</a></td>
+ 	<td><em>none</em></td>
+ 	<td>yes</td>
+ 	<td align="left"> This class provides some basic "well formedness"
+ 	tests on the input event stream, and reports a fatal error if any
+ 	of them fail.  One example: start/end calls for elements must match.
+ 	No SAX parser is permitted to produce malformed output, but other
+ 	components can easily do so.</td>
+     </tr>
+     <tr valign="top" align="center">
+ 	<td>write</td>
+ 	<td><em>required</em><br> "stdout", "stderr", or filename</td>
+ 	<td>yes</td>
+ 	<td align="left"> Writes its input to the specified output, as pretty
+ 	printed XML text encoded using UTF-8.  Input events must be well
+ 	formed and "namespace fixed", else the output won't be XML (or possibly
+ 	namespace) conformant.  The symbolic names represent
+ 	<em>System.out</em> and <em>System.err</em> respectively; names must
+ 	correspond to files which don't yet exist.</td>
+     </tr>
+     <tr valign="top" align="center">
+ 	<td>xhtml</td>
+ 	<td><em>required</em><br> "stdout", "stderr", or filename</td>
+ 	<td>yes</td>
+ 	<td align="left"> Like <em>write</em> (above), except that XHTML rules
+ 	are followed.  The XHTML 1.0 Transitional document type is declared,
+ 	and only ASCII characters are written (for interoperability).  Other
+ 	characters are written as entity or character references; the text is
+ 	pretty printed.</td>
+     </tr>
+     <tr valign="top" align="center">
+ 	<td><a href="XIncludeFilter.html">xinclude</a></td>
+ 	<td><em>none</em></td>
+ 	<td>no</td>
+ 	<td align="left">This stage handles XInclude processing.
+ 	This is like entity inclusion, except that the included content
+ 	is declared in-line rather than in the DTD at the beginning of
+ 	a document.
+ 	</td>
+     </tr>
+     <tr valign="top" align="center">
+ 	<td><a href="XsltFilter.html">xslt</a></td>
+ 	<td><em>required</em><br> XSLT stylesheet URI</td>
+ 	<td>no</td>
+ 	<td align="left">This stage handles XSLT transformation
+ 	according to a stylesheet.
+ 	The implementation of the transformation may not actually
+ 	stream data, although if such an XSLT engine is in use
+ 	then that can happen.
+ 	</td>
+     </tr>
+ 
+  </table>
+  
+  * <p> Note that {@link EventFilter#bind} can automatically eliminate
+  * some filters by setting SAX2 parser features appropriately.  This means
+  * that you can routinely put filters like "nsfix", "validate", or "wf" at the
+  * front of a pipeline (for components that need inputs conditioned to match
+  * that level of correctness), and know that it won't actually be used unless
+  * it's absolutely necessary.
+  *
+  * @author David Brownell
+  */
+ public class PipelineFactory
+ {
+     /**
+      * Creates a simple pipeline according to the description string passed in.
+      */
+     public static EventConsumer createPipeline (String description)
+     throws IOException
+     {
+ 	return createPipeline (description, null);
+     }
+ 
+     /**
+      * Extends an existing pipeline by prepending the filter pipeline to the
+      * specified consumer.  Some pipelines need more customization than can
+      * be done through this simplified syntax.  When they are set up with
+      * direct API calls, use this method to merge more complex pipeline
+      * segments with easily configured ones.
+      */
+     public static EventConsumer createPipeline (
+ 	String		description,
+ 	EventConsumer	next
+     ) throws IOException
+     {
+ 	// tokens are (for now) what's separated by whitespace;
+ 	// very easy to parse, but IDs never have spaces.
+ 
+ 	StringTokenizer		tokenizer;
+ 	String			tokens [];
+ 
+ 	tokenizer = new StringTokenizer (description);
+ 	tokens = new String [tokenizer.countTokens ()];
+ 	for (int i = 0; i < tokens.length; i++)
+ 	    tokens [i] = tokenizer.nextToken ();
+ 
+ 	PipelineFactory		factory = new PipelineFactory ();
+ 	Pipeline		pipeline = factory.parsePipeline (tokens, next);
+ 
+ 	return pipeline.createPipeline ();
+     }
+ 
+ 
+     private PipelineFactory () { /* NYET */ }
+ 
+ 
+     /**
+      * Extends an existing pipeline by prepending a pre-tokenized filter
+      * pipeline to the specified consumer.  Tokens are class names (or the
+      * predefined aliases) left and right parenthesis, and the vertical bar.
+      */
+     public static EventConsumer createPipeline (
+ 	String		tokens [],
+ 	EventConsumer	next
+     ) throws IOException
+     {
+ 	PipelineFactory		factory = new PipelineFactory ();
+ 	Pipeline		pipeline = factory.parsePipeline (tokens, next);
+ 
+ 	return pipeline.createPipeline ();
+     }
+ 
+ 
+     private String		tokens [];
+     private int			index;
+ 
+     private Pipeline parsePipeline (String toks [], EventConsumer next)
+     {
+ 	tokens = toks;
+ 	index = 0;
+ 	
+ 	Pipeline retval = parsePipeline (next);
+ 
+ 	if (index != toks.length)
+ 	    throw new ArrayIndexOutOfBoundsException (
+ 		    "extra token: " + tokens [index]);
+ 	return retval;
+     }
+ 
+     // pipeline  ::= stage | stage '|' pipeline
+     private Pipeline parsePipeline (EventConsumer next)
+     {
+ 	Pipeline	retval = new Pipeline (parseStage ());
+ 
+ 	// minimal pipelines:  "stage" and "... | id"
+ 	if (index > (tokens.length - 2)
+ 		|| !"|".equals (tokens [index])
+ 		) {
+ 	    retval.next = next;
+ 	    return retval;
+ 	}
+ 	index++;
+ 	retval.rest = parsePipeline (next);
+ 	return retval;
+     }
+ 
+     // stage     ::= id    | id '(' pipeline ')'
+     private Stage parseStage ()
+     {
+ 	Stage		retval = new Stage (tokens [index++]);
+ 
+ 	// minimal stages:  "id" and "id ( id )"
+ 	if (index > (tokens.length - 2)
+ 		|| !"(".equals (tokens [index]) /*)*/
+ 		)
+ 	    return retval;
+ 	
+ 	index++;
+ 	retval.param = parsePipeline (null);
+ 	if (index >= tokens.length)
+ 	    throw new ArrayIndexOutOfBoundsException (
+ 		    "missing right paren");
+ 	if (/*(*/ !")".equals (tokens [index++]))
+ 	    throw new ArrayIndexOutOfBoundsException (
+ 		    "required right paren, not: " + tokens [index - 1]);
+ 	return retval;
+     }
+ 
+ 
+     //
+     // these classes obey the conventions for constructors, so they're
+     // only built in to this table of shortnames
+     //
+     //	- filter (one or two types of arglist)
+     //	   * last constructor is 'next' element
+     //	   * optional (first) string parameter
+     //
+     //	- terminus (one or types of arglist)
+     //	   * optional (only) string parameter
+     //
+     // terminus stages are transformed into filters if needed, by
+     // creating a "tee".  filter stages aren't turned to terminus
+     // stages though; either eliminate such stages, or add some
+     // terminus explicitly.
+     //
+     private static final String builtinStages [][] = {
+ 	{ "dom",	"gnu.xml.dom.Consumer" },
+ 	{ "nsfix",	"gnu.xml.pipeline.NSFilter" },
+ 	{ "null",	"gnu.xml.pipeline.EventFilter" },
+ 	{ "server",	"gnu.xml.pipeline.CallFilter" },
+ 	{ "tee",	"gnu.xml.pipeline.TeeConsumer" },
+ 	{ "validate",	"gnu.xml.pipeline.ValidationConsumer" },
+ 	{ "wf",		"gnu.xml.pipeline.WellFormednessFilter" },
+ 	{ "xinclude",	"gnu.xml.pipeline.XIncludeFilter" },
+ 	{ "xslt",	"gnu.xml.pipeline.XsltFilter" },
+ 
+ // XXX want:  option for validate, to preload external part of a DTD
+ 
+ 	    //	xhtml, write ... nyet generic-ready
+     };
+ 
+     private static class Stage
+     {
+ 	String		id;
+ 	Pipeline	param;
+ 
+ 	Stage (String name)
+ 	    {  id = name; }
+ 
+ 	public String toString ()
+ 	{
+ 	    if (param == null)
+ 		return id;
+ 	    return id + " ( " + param + " )";
+ 	}
+ 
+ 	private void fail (String message)
+ 	throws IOException
+ 	{
+ 	    throw new IOException ("in '" + id
+ 		    + "' stage of pipeline, " + message);
+ 	}
+ 
+ 	EventConsumer createStage (EventConsumer next)
+ 	throws IOException
+ 	{
+ 	    String	 name = id;
+ 
+ 	    // most builtins are just class aliases
+ 	    for (int i = 0; i < builtinStages.length; i++) {
+ 		if (id.equals (builtinStages [i][0])) {
+ 		    name = builtinStages [i][1];
+ 		    break;
+ 		}
+ 	    }
+ 
+ 	    // Save output as XML or XHTML text
+ 	    if ("write".equals (name) || "xhtml".equals (name)) {
+ 		String		filename;
+ 		boolean		isXhtml = "xhtml".equals (name);
+ 		OutputStream	out = null;
+ 		TextConsumer	consumer;
+ 
+ 		if (param == null)
+ 		    fail ("parameter is required");
+ 
+ 		filename = param.toString ();
+ 		if ("stdout".equals (filename))
+ 		    out = System.out;
+ 		else if ("stderr".equals (filename))
+ 		    out = System.err;
+ 		else {
+ 		    File f = new File (filename);
+ 
+ /*
+ 		    if (!f.isAbsolute ())
+ 			fail ("require absolute file paths");
+  */
+ 		    if (f.exists ())
+ 			fail ("file already exists: " + f.getName ());
+ 
+ // XXX this races against the existence test
+ 		    out = new FileOutputStream (f);
+ 		}
+ 		
+ 		if (!isXhtml)
+ 		    consumer = new TextConsumer (out);
+ 		else
+ 		    consumer = new TextConsumer (
+ 			new OutputStreamWriter (out, "8859_1"),
+ 			true);
+ 		
+ 		consumer.setPrettyPrinting (true);
+ 		if (next == null)
+ 		    return consumer;
+ 		return new TeeConsumer (consumer, next);
+ 
+ 	    } else {
+ 		//
+ 		// Here go all the builtins that are just aliases for
+ 		// classes, and all stage IDs that started out as such
+ 		// class names.  The following logic relies on several
+ 		// documented conventions for constructor invocation.
+ 		//
+ 		String		msg = null;
+ 
+ 		try {
+ 		    Class	klass = Class.forName (name);
+ 		    Class	argTypes [] = null;
+ 		    Constructor	constructor = null;
+ 		    boolean	filter = false;
+ 		    Object	params [] = null;
+ 		    Object	obj = null;
+ 
+ 		    // do we need a filter stage?
+ 		    if (next != null) {
+ 			// "next" consumer is always passed, with
+ 			// or without the optional string param
+ 			if (param == null) {
+ 			    argTypes = new Class [1];
+ 			    argTypes [0] = EventConsumer.class;
+ 
+ 			    params = new Object [1];
+ 			    params [0] = next;
+ 
+ 			    msg = "no-param filter";
+ 			} else {
+ 			    argTypes = new Class [2];
+ 			    argTypes [0] = String.class;
+ 			    argTypes [1] = EventConsumer.class;
+ 
+ 			    params = new Object [2];
+ 			    params [0] = param.toString ();
+ 			    params [1] = next;
+ 
+ 			    msg = "one-param filter";
+ 			}
+ 
+ 
+ 			try {
+ 			    constructor = klass.getConstructor (argTypes);
+ 			} catch (NoSuchMethodException e) {
+ 			    // try creating a filter from a
+ 			    // terminus and a tee
+ 			    filter = true;
+ 			    msg += " built from ";
+ 			}
+ 		    }
+ 
+ 		    // build from a terminus stage, with or
+ 		    // without the optional string param
+ 		    if (constructor == null) {
+ 			String	tmp;
+ 
+ 			if (param == null) {
+ 			    argTypes = new Class [0];
+ 			    params = new Object [0];
+ 
+ 			    tmp = "no-param terminus";
+ 			} else {
+ 			    argTypes = new Class [1];
+ 			    argTypes [0] = String.class;
+ 
+ 			    params = new Object [1];
+ 			    params [0] = param.toString ();
+ 
+ 			    tmp = "one-param terminus";
+ 			}
+ 			if (msg == null)
+ 			    msg = tmp;
+ 			else
+ 			    msg += tmp;
+ 			constructor = klass.getConstructor (argTypes);
+ 			    // NOT creating terminus by dead-ending
+ 			    // filters ... users should think about
+ 			    // that one, something's likely wrong
+ 		    }
+ 		    
+ 		    obj = constructor.newInstance (params);
+ 
+ 		    // return EventConsumers directly, perhaps after
+ 		    // turning them into a filter
+ 		    if (obj instanceof EventConsumer) {
+ 			if (filter)
+ 			    return new TeeConsumer ((EventConsumer) obj, next);
+ 			return (EventConsumer) obj;
+ 		    }
+ 		    
+ 		    // if it's not a handler, it's an error
+ 		    // we can wrap handlers in a filter
+ 		    EventFilter		retval = new EventFilter ();
+ 		    boolean		updated = false;
+ 
+ 		    if (obj instanceof ContentHandler) {
+ 			retval.setContentHandler ((ContentHandler) obj);
+ 			updated = true;
+ 		    }
+ 		    if (obj instanceof DTDHandler) {
+ 			retval.setDTDHandler ((DTDHandler) obj);
+ 			updated = true;
+ 		    }
+ 		    if (obj instanceof LexicalHandler) {
+ 			retval.setProperty (
+ 			    EventFilter.PROPERTY_URI + "lexical-handler",
+ 			    obj);
+ 			updated = true;
+ 		    }
+ 		    if (obj instanceof DeclHandler) {
+ 			retval.setProperty (
+ 			    EventFilter.PROPERTY_URI + "declaration-handler",
+ 			    obj);
+ 			updated = true;
+ 		    }
+ 
+ 		    if (!updated)
+ 			fail ("class is neither Consumer nor Handler");
+ 		    
+ 		    if (filter)
+ 			return new TeeConsumer (retval, next);
+ 		    return retval;
+ 
+ 		} catch (IOException e) {
+ 		    throw e;
+ 
+ 		} catch (NoSuchMethodException e) {
+ 		    fail (name + " constructor missing -- " + msg);
+ 
+ 		} catch (ClassNotFoundException e) {
+ 		    fail (name + " class not found");
+ 
+ 		} catch (Exception e) {
+ 		    // e.printStackTrace ();
+ 		    fail ("stage not available: " + e.getMessage ());
+ 		}
+ 	    }
+ 	    // NOTREACHED
+ 	    return null;
+ 	}
+     }
+ 
+     private static class Pipeline
+     {
+ 	Stage		stage;
+ 
+ 	// rest may be null
+ 	Pipeline	rest;
+ 	EventConsumer	next;
+ 
+ 	Pipeline (Stage s)
+ 	    { stage = s; }
+ 
+ 	public String toString ()
+ 	{
+ 	    if (rest == null && next == null)
+ 		return stage.toString ();
+ 	    if (rest != null)
+ 		return stage + " | " + rest;
+ 	    throw new IllegalArgumentException ("next");
+ 	}
+ 
+ 	EventConsumer createPipeline ()
+ 	throws IOException
+ 	{
+ 	    if (next == null) {
+ 		if (rest == null)
+ 		    next = stage.createStage (null);
+ 		else
+ 		    next = stage.createStage (rest.createPipeline ());
+ 	    }
+ 	    return next;
+ 	}
+     }
+ 
+ /*
+     public static void main (String argv [])
+     {
+ 	try {
+ 	    // three basic terminus cases
+ 	    createPipeline ("null");
+ 	    createPipeline ("validate");
+ 	    createPipeline ("write ( stdout )");
+ 
+ 	    // four basic filters
+ 	    createPipeline ("nsfix | write ( stderr )");
+ 	    createPipeline ("wf | null");
+ 	    createPipeline ("null | null");
+ 	    createPipeline (
+ "call ( http://www.example.com/services/xml-1a ) | xhtml ( stdout )");
+ 
+ 	    // tee junctions
+ 	    createPipeline ("tee ( validate ) | write ( stdout )");
+ 	    createPipeline ("tee ( nsfix | write ( stdout ) ) | validate");
+ 
+ 	    // longer pipeline
+ 	    createPipeline ("nsfix | tee ( validate ) | write ( stdout )");
+ 	    createPipeline (
+ 		"null | wf | nsfix | tee ( validate ) | write ( stdout )");
+ 
+ 	    // try some parsing error cases
+ 	    try {
+ 		createPipeline ("null (");		// extra token '('
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 
+ 	    try {
+ 		createPipeline ("nsfix |");		// extra token '|'
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 
+ 	    try {
+ 		createPipeline ("xhtml ( foo");		// missing right paren
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 
+ 	    try {
+ 		createPipeline ("xhtml ( foo bar");	// required right paren
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 
+ 	    try {
+ 		createPipeline ("tee ( nsfix | validate");// missing right paren
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 
+ 	    // try some construction error cases
+ 
+ 	    try {
+ 		createPipeline ("call");		// missing param
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("call ( foobar )");	// broken param
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("nsfix ( foobar )");	// illegal param
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("null ( foobar )");	// illegal param
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("wf ( foobar )");	// illegal param
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("xhtml ( foobar.html )");
+ 		new File ("foobar.html").delete ();
+ 		// now supported
+ 	    } catch (Exception e) {
+ 		System.err.println ("** err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("xhtml");		// missing param
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("write ( stdout ) | null");	// nonterminal
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("validate | null");
+ 		// now supported
+ 	    } catch (Exception e) {
+ 		System.err.println ("** err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("validate ( foo )");	// illegal param
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 	    try {
+ 		createPipeline ("tee");			// missing param
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 	    try {
+ 		    // only builtins so far
+ 		createPipeline ("com.example.xml.FilterClass");
+ 		System.err.println ("** didn't report error");
+ 	    } catch (Exception e) {
+ 		System.err.println ("== err: " + e.getMessage ()); }
+ 
+ 	} catch (Exception e) {
+ 	    e.printStackTrace ();
+ 	}
+     }
+ /**/
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/TeeConsumer.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/TeeConsumer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/TeeConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/TeeConsumer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,417 ----
+ /* TeeConsumer.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.ext.DeclHandler;
+ import org.xml.sax.ext.LexicalHandler;
+ 
+ /**
+  * Fans its events out to two other consumers, a "tee" filter stage in an
+  * event pipeline.  Networks can be assembled with multiple output points.
+  *
+  * <p> Error handling should be simple if you remember that exceptions
+  * you throw will cancel later stages in that callback's pipeline, and
+  * generally the producer will stop if it sees such an exception.  You
+  * may want to protect your pipeline against such backflows, making a
+  * kind of reverse filter (or valve?) so that certain exceptions thrown by
+  * your pipeline will caught and handled before the producer sees them.
+  * Just use a "try/catch" block, rememebering that really important
+  * cleanup tasks should be in "finally" clauses.
+  *
+  * <p> That issue isn't unique to "tee" consumers, but tee consumers have
+  * the additional twist that exceptions thrown by the first consumer
+  * will cause the second consumer not to see the callback (except for
+  * the endDocument callback, which signals state cleanup).
+  *
+  * @author David Brownell
+  */
+ final public class TeeConsumer
+ 	implements EventConsumer,
+ 		ContentHandler, DTDHandler,
+ 		LexicalHandler,DeclHandler
+ {
+     private EventConsumer	first, rest;
+ 
+     // cached to minimize time overhead
+     private ContentHandler	docFirst, docRest;
+     private DeclHandler		declFirst, declRest;
+     private LexicalHandler	lexFirst, lexRest;
+ 
+ 
+     /**
+      * Constructs a consumer which sends all its events to the first
+      * consumer, and then the second one.  If the first consumer throws
+      * an exception, the second one will not see the event which
+      * caused that exception to be reported.
+      *
+      * @param car The first consumer to get the events
+      * @param cdr The second consumer to get the events
+      */
+     public TeeConsumer (EventConsumer car, EventConsumer cdr)
+     {
+ 	if (car == null || cdr == null)
+ 	    throw new NullPointerException ();
+ 	first = car;
+ 	rest = cdr;
+ 
+ 	//
+ 	// Cache the handlers.
+ 	//
+ 	docFirst = first.getContentHandler ();
+ 	docRest = rest.getContentHandler ();
+ 	// DTD handler isn't cached (rarely needed)
+ 
+ 	try {
+ 	    declFirst = null;
+ 	    declFirst = (DeclHandler) first.getProperty (
+ 			EventFilter.DECL_HANDLER);
+ 	} catch (SAXException e) {}
+ 	try {
+ 	    declRest = null;
+ 	    declRest = (DeclHandler) rest.getProperty (
+ 			EventFilter.DECL_HANDLER);
+ 	} catch (SAXException e) {}
+ 
+ 	try {
+ 	    lexFirst = null;
+ 	    lexFirst = (LexicalHandler) first.getProperty (
+ 			EventFilter.LEXICAL_HANDLER);
+ 	} catch (SAXException e) {}
+ 	try {
+ 	    lexRest = null;
+ 	    lexRest = (LexicalHandler) rest.getProperty (
+ 			EventFilter.LEXICAL_HANDLER);
+ 	} catch (SAXException e) {}
+     }
+ 
+ /* FIXME
+     /**
+      * Constructs a pipeline, and is otherwise a shorthand for the
+      * two-consumer constructor for this class.
+      *
+      * @param first Description of the first pipeline to get events,
+      *	which will be passed to {@link PipelineFactory#createPipeline}
+      * @param rest The second pipeline to get the events
+      * /
+ 	// constructor used by PipelineFactory
+     public TeeConsumer (String first, EventConsumer rest)
+     throws IOException
+     {
+ 	this (PipelineFactory.createPipeline (first), rest);
+     }
+ */
+ 
+     /** Returns the first pipeline to get event calls. */
+     public EventConsumer getFirst ()
+ 	{ return first; }
+ 
+     /** Returns the second pipeline to get event calls. */
+     public EventConsumer getRest ()
+ 	{ return rest; }
+ 
+     /** Returns the content handler being used. */
+     final public ContentHandler getContentHandler ()
+     {
+ 	if (docRest == null)
+ 	    return docFirst;
+ 	if (docFirst == null)
+ 	    return docRest;
+ 	return this;
+     }
+ 
+     /** Returns the dtd handler being used. */
+     final public DTDHandler getDTDHandler ()
+     {
+ 	// not cached (hardly used)
+ 	if (rest.getDTDHandler () == null)
+ 	    return first.getDTDHandler ();
+ 	if (first.getDTDHandler () == null)
+ 	    return rest.getDTDHandler ();
+ 	return this;
+     }
+ 
+     /** Returns the declaration or lexical handler being used. */
+     final public Object getProperty (String id)
+     throws SAXNotRecognizedException
+     {
+ 	//
+ 	// in degenerate cases, we have no work to do.
+ 	//
+ 	Object	firstProp = null, restProp = null;
+ 
+ 	try { firstProp = first.getProperty (id); }
+ 	catch (SAXNotRecognizedException e) { /* ignore */ }
+ 	try { restProp = rest.getProperty (id); }
+ 	catch (SAXNotRecognizedException e) { /* ignore */ }
+ 
+ 	if (restProp == null)
+ 	    return firstProp;
+ 	if (firstProp == null)
+ 	    return restProp;
+ 
+ 	//
+ 	// we've got work to do; handle two builtin cases.
+ 	//
+ 	if (EventFilter.DECL_HANDLER.equals (id))
+ 	    return this;
+ 	if (EventFilter.LEXICAL_HANDLER.equals (id))
+ 	    return this;
+ 
+ 	//
+ 	// non-degenerate, handled by both consumers, but we don't know
+ 	// how to handle this.
+ 	//
+ 	throw new SAXNotRecognizedException ("can't tee: " + id);
+     }
+ 
+     /**
+      * Provides the error handler to both subsequent nodes of
+      * this filter stage.
+      */
+     public void setErrorHandler (ErrorHandler handler)
+     {
+ 	first.setErrorHandler (handler);
+ 	rest.setErrorHandler (handler);
+     }
+ 
+ 
+     //
+     // ContentHandler
+     //
+     public void setDocumentLocator (Locator locator)
+     {
+ 	// this call is not made by all parsers
+ 	docFirst.setDocumentLocator (locator);
+ 	docRest.setDocumentLocator (locator);
+     }
+ 
+     public void startDocument ()
+     throws SAXException
+     {
+ 	docFirst.startDocument ();
+ 	docRest.startDocument ();
+     }
+ 
+     public void endDocument ()
+     throws SAXException
+     {
+ 	try {
+ 	    docFirst.endDocument ();
+ 	} finally {
+ 	    docRest.endDocument ();
+ 	}
+     }
+ 
+     public void startPrefixMapping (String prefix, String uri)
+     throws SAXException
+     {
+ 	docFirst.startPrefixMapping (prefix, uri);
+ 	docRest.startPrefixMapping (prefix, uri);
+     }
+ 
+     public void endPrefixMapping (String prefix)
+     throws SAXException
+     {
+ 	docFirst.endPrefixMapping (prefix);
+ 	docRest.endPrefixMapping (prefix);
+     }
+ 
+     public void skippedEntity (String name)
+     throws SAXException
+     {
+ 	docFirst.skippedEntity (name);
+ 	docRest.skippedEntity (name);
+     }
+ 
+     public void startElement (String uri, String localName,
+ 	    String qName, Attributes atts)
+     throws SAXException
+     {
+ 	docFirst.startElement (uri, localName, qName, atts);
+ 	docRest.startElement (uri, localName, qName, atts);
+     }
+ 
+     public void endElement (String uri, String localName, String qName)
+     throws SAXException
+     {
+ 	docFirst.endElement (uri, localName, qName);
+ 	docRest.endElement (uri, localName, qName);
+     }
+ 
+     public void processingInstruction (String target, String data)
+     throws SAXException
+     {
+ 	docFirst.processingInstruction (target, data);
+ 	docRest.processingInstruction (target, data);
+     }
+ 
+     public void characters (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	docFirst.characters (ch, start, length);
+ 	docRest.characters (ch, start, length);
+     }
+ 
+     public void ignorableWhitespace (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	docFirst.ignorableWhitespace (ch, start, length);
+ 	docRest.ignorableWhitespace (ch, start, length);
+     }
+ 
+ 
+     //
+     // DTDHandler
+     //
+     public void notationDecl (String name, String publicId, String systemId)
+     throws SAXException
+     {
+ 	DTDHandler	l1 = first.getDTDHandler ();
+ 	DTDHandler	l2 = rest.getDTDHandler ();
+ 
+ 	l1.notationDecl (name, publicId, systemId);
+ 	l2.notationDecl (name, publicId, systemId);
+     }
+ 
+     public void unparsedEntityDecl (String name,
+ 	    String publicId, String systemId,
+ 	    String notationName
+     ) throws SAXException
+     {
+ 	DTDHandler	l1 = first.getDTDHandler ();
+ 	DTDHandler	l2 = rest.getDTDHandler ();
+ 
+ 	l1.unparsedEntityDecl (name, publicId, systemId, notationName);
+ 	l2.unparsedEntityDecl (name, publicId, systemId, notationName);
+     }
+ 
+ 
+     //
+     // DeclHandler
+     //
+     public void attributeDecl (String eName, String aName,
+ 	String type,
+ 	String mode, String value)
+     throws SAXException
+     {
+ 	declFirst.attributeDecl (eName, aName, type, mode, value);
+ 	declRest.attributeDecl (eName, aName, type, mode, value);
+     }
+ 
+     public void elementDecl (String name, String model)
+     throws SAXException
+     {
+ 	declFirst.elementDecl (name, model);
+ 	declRest.elementDecl (name, model);
+     }
+ 
+     public void externalEntityDecl (String name,
+ 	String publicId, String systemId)
+     throws SAXException
+     {
+ 	declFirst.externalEntityDecl (name, publicId, systemId);
+ 	declRest.externalEntityDecl (name, publicId, systemId);
+     }
+ 
+     public void internalEntityDecl (String name, String value)
+     throws SAXException
+     {
+ 	declFirst.internalEntityDecl (name, value);
+ 	declRest.internalEntityDecl (name, value);
+     }
+ 
+ 
+     //
+     // LexicalHandler
+     //
+     public void comment (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	lexFirst.comment (ch, start, length);
+ 	lexRest.comment (ch, start, length);
+     }
+     
+     public void startCDATA ()
+     throws SAXException
+     {
+ 	lexFirst.startCDATA ();
+ 	lexRest.startCDATA ();
+     }
+     
+     public void endCDATA ()
+     throws SAXException
+     {
+ 	lexFirst.endCDATA ();
+ 	lexRest.endCDATA ();
+     }
+     
+     public void startEntity (String name)
+     throws SAXException
+     {
+ 	lexFirst.startEntity (name);
+ 	lexRest.startEntity (name);
+     }
+     
+     public void endEntity (String name)
+     throws SAXException
+     {
+ 	lexFirst.endEntity (name);
+ 	lexRest.endEntity (name);
+     }
+     
+     public void startDTD (String name, String publicId, String systemId)
+     throws SAXException
+     {
+ 	lexFirst.startDTD (name, publicId, systemId);
+ 	lexRest.startDTD (name, publicId, systemId);
+     }
+     
+     public void endDTD ()
+     throws SAXException
+     {
+ 	lexFirst.endDTD ();
+ 	lexRest.endDTD ();
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/TextConsumer.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/TextConsumer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/TextConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/TextConsumer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,117 ----
+ /* TextConsumer.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.io.*;
+ 
+ import org.xml.sax.*;
+ 
+ import gnu.xml.util.XMLWriter;
+ 
+ 
+ /**
+  * Terminates a pipeline, consuming events to print them as well formed
+  * XML (or XHTML) text.
+  *
+  * <p> Input must be well formed, and must include XML names (e.g. the
+  * prefixes and prefix declarations must be present), or the output of
+  * this class is undefined.
+  *
+  * @see NSFilter
+  * @see WellFormednessFilter
+  *
+  * @author David Brownell
+  */
+ public class TextConsumer extends XMLWriter implements EventConsumer
+ {
+     /**
+      * Constructs an event consumer which echoes its input as text,
+      * optionally adhering to some basic XHTML formatting options
+      * which increase interoperability with old (v3) browsers.
+      *
+      * <p> For the best interoperability, when writing as XHTML only
+      * ASCII characters are emitted; other characters are turned to
+      * entity or character references as needed, and no XML declaration
+      * is provided in the document.
+      */
+     public TextConsumer (Writer w, boolean isXhtml)
+     throws IOException
+     {
+ 	super (w, isXhtml ? "US-ASCII" : null);
+ 	setXhtml (isXhtml);
+     }
+ 
+     /**
+      * Constructs a consumer that writes its input as XML text.
+      * XHTML rules are not followed.
+      */
+     public TextConsumer (Writer w)
+     throws IOException
+     {
+ 	this (w, false);
+     }
+ 	
+     /**
+      * Constructs a consumer that writes its input as XML text,
+      * encoded in UTF-8.  XHTML rules are not followed.
+      */
+     public TextConsumer (OutputStream out)
+     throws IOException
+     {
+ 	this (new OutputStreamWriter (out, "UTF8"), false);
+     }
+ 
+     /** <b>EventConsumer</b> Returns the document handler being used. */
+     public ContentHandler getContentHandler ()
+ 	{ return this; }
+ 
+     /** <b>EventConsumer</b> Returns the dtd handler being used. */
+     public DTDHandler getDTDHandler ()
+ 	{ return this; }
+ 
+     /** <b>XMLReader</b>Retrieves a property (lexical and decl handlers) */
+     public Object getProperty (String propertyId)
+     throws SAXNotRecognizedException
+     {
+ 	if (EventFilter.LEXICAL_HANDLER.equals (propertyId))
+ 	    return this;
+ 	if (EventFilter.DECL_HANDLER.equals (propertyId))
+ 	    return this;
+ 	throw new SAXNotRecognizedException (propertyId);
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1928 ----
+ /* ValidationConsumer.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.io.IOException;
+ import java.io.StringReader;
+ import java.io.StringWriter;
+ import java.util.EmptyStackException;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.Stack;
+ import java.util.StringTokenizer;
+ import java.util.Vector;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.helpers.XMLReaderFactory;
+ 
+ /**
+  * This class checks SAX2 events to report validity errors; it works as
+  * both a filter and a terminus on an event pipeline.  It relies on the
+  * producer of SAX events to:  </p> <ol>
+  *
+  *	<li> Conform to the specification of a non-validating XML parser that
+  *	reads all external entities, reported using SAX2 events. </li>
+  *
+  *	<li> Report ignorable whitespace as such (through the ContentHandler
+  *	interface).  This is, strictly speaking, optional for nonvalidating
+  *	XML processors.  </li>
+  *
+  *	<li> Make SAX2 DeclHandler callbacks, with default
+  *	attribute values already normalized (and without "&lt;").</li>
+  *
+  *	<li> Make SAX2 LexicalHandler startDTD() and endDTD ()
+  *	callbacks. </li>
+  *
+  *	<li> Act as if the <em>(URI)/namespace-prefixes</em> property were
+  *	set to true, by providing XML 1.0 names and all <code>xmlns*</code>
+  *	attributes (rather than omitting either or both). </li>
+  *
+  *	</ol>
+  *
+  * <p> At this writing, the major SAX2 parsers (such as &AElig;lfred2,
+  * Crimson, and Xerces) meet these requirements, and this validation
+  * module is used by the optional &AElig;lfred2 validation support.
+  * </p>
+  *
+  * <p> Note that because this is a layered validator, it has to duplicate some
+  * work that the parser is doing; there are also other cost to layering.
+  * However, <em>because of layering it doesn't need a parser</em> in order
+  * to work! You can use it with anything that generates SAX events, such
+  * as an application component that wants to detect invalid content in
+  * a changed area without validating an entire document, or which wants to
+  * ensure that it doesn't write invalid data to a communications partner.</p>
+  *
+  * <p> Also, note that because this is a layered validator, the line numbers
+  * reported for some errors may seem strange.  For example, if an element does
+  * not permit character content, the validator
+  * will use the locator provided to it.
+  * That might reflect the last character of a <em>characters</em> event
+  * callback, rather than the first non-whitespace character. </p>
+  *
+  * <hr />
+  *
+  * <!--
+  * <p> Of interest is the fact that unlike most currently known XML validators,
+  * this one can report some cases of non-determinism in element content models.
+  * It is a compile-time option, enabled by default.  This will only report
+  * such XML errors if they relate to content actually appearing in a document;
+  * content models aren't aggressively scanned for non-deterministic structure.
+  * Documents which trigger such non-deterministic transitions may be handled
+  * differently by different validating parsers, without losing conformance
+  * to the XML specification. </p>
+  * -->
+  *
+  * <p> Current limitations of the validation performed are in roughly three
+  * categories.  </p>
+  *
+  * <p> The first category represents constraints which demand violations
+  * of software layering:  exposing lexical details, one of the first things
+  * that <em>application</em> programming interfaces (APIs) hide.  These
+  * invariably relate to XML entity handling, and to historical oddities
+  * of the XML validation semantics.  Curiously,
+  * recent (Autumn 1999) conformance testing showed that these constraints are
+  * among those handled worst by existing XML validating parsers.  Arguments
+  * have been made that each of these VCs should be turned into WFCs (most
+  * of them) or discarded (popular for the standalone declaration); in short,
+  * that these are bugs in the XML specification (not all via SGML): </p><ul>
+  *
+  *	<li> The <em>Proper Declaration/PE Nesting</em> and
+  *	<em>Proper Group/PE Nesting</em> VCs can't be tested because they
+  *	require access to particularly low level lexical level information.
+  *	In essence, the reason XML isn't a simple thing to parse is that
+  *	it's not a context free grammar, and these constraints elevate that
+  *	SGML-derived context sensitivity to the level of a semantic rule.
+  *
+  *	<li> The <em>Standalone Document Declaration</em> VC can't be
+  *	tested.  This is for two reasons.  First, this flag isn't made
+  *	available through SAX2.  Second, it also requires breaking that
+  *	lexical layering boundary.  (If you ever wondered why classes
+  *	in compiler construction or language design barely mention the
+  *	existence of context-sensitive grammars, it's because of messy
+  *	issues like these.)
+  *
+  *	<li> The <em>Entity Declared</em> VC can't be tested, because it
+  *	also requires breaking that lexical layering boundary!  There's also
+  *	another issue: the VC wording (and seemingly intent) is ambiguous.
+  *	(This is still true in the "Second edition" XML spec.)
+  *	Since there is a WFC of the same name, everyone's life would be
+  *	easier if references to undeclared parsed entities were always well
+  *	formedness errors, regardless of whether they're parameter entities
+  *	or not.  (Note that nonvalidating parsers are not required
+  *	to report all such well formedness errors if they don't read external
+  *	parameter entities, although currently most XML parsers read them
+  *	in an attempt to avoid problems from inconsistent parser behavior.)
+  *
+  *	</ul>
+  *
+  * <p> The second category of limitations on this validation represent
+  * constraints associated with information that is not guaranteed to be
+  * available (or in one case, <em>is guaranteed not to be available</em>,
+  * through the SAX2 API: </p><ul>
+  *
+  *	<li> The <em>Unique Element Type Declaration</em> VC may not be
+  *	reportable, if the underlying parser happens not to expose
+  *	multiple declarations.   (&AElig;lfred2 reports these validity
+  *	errors directly.)</li>
+  *
+  *	<li> Similarly, the <em>Unique Notation Name</em> VC, added in the
+  *	14-January-2000 XML spec errata to restrict typing models used by
+  *	elements, may not be reportable.  (&AElig;lfred reports these
+  *	validity errors directly.) </li>
+  *
+  *	</ul>
+  *
+  * <p> A third category relates to ease of implementation.  (Think of this
+  * as "bugs".)  The most notable issue here is character handling.  Rather
+  * than attempting to implement the voluminous character tables in the XML
+  * specification (Appendix B), Unicode rules are used directly from
+  * the java.lang.Character class.  Recent JVMs have begun to diverge from
+  * the original specification for that class (Unicode 2.0), meaning that
+  * different JVMs may handle that aspect of conformance differently.
+  * </p>
+  *
+  * <p> Note that for some of the validity errors that SAX2 does not
+  * expose, a nonvalidating parser is permitted (by the XML specification)
+  * to report validity errors.  When used with a parser that does so for
+  * the validity constraints mentioned above (or any other SAX2 event
+  * stream producer that does the same thing), overall conformance is
+  * substantially improved.
+  *
+  * @see gnu.xml.aelfred2.SAXDriver
+  * @see gnu.xml.aelfred2.XmlReader
+  *
+  * @author David Brownell
+  */
+ public final class ValidationConsumer extends EventFilter
+ {
+     // report error if we happen to notice a non-deterministic choice?
+     // we won't report buggy content models; just buggy instances
+     private static final boolean	warnNonDeterministic = false;
+ 
+     // for tracking active content models
+     private String		rootName;
+     private Stack		contentStack = new Stack ();
+ 
+     // flags for "saved DTD" processing
+     private boolean		disableDeclarations;
+     private boolean		disableReset;
+ 
+     //
+     // most VCs get tested when we see element start tags.  the per-element
+     // info (including attributes) recorded here duplicates that found inside
+     // many nonvalidating parsers, hence dual lookups etc ... that's why a
+     // layered validator isn't going to be as fast as a non-layered one.
+     //
+ 
+     // key = element name; value = ElementInfo
+     private Hashtable		elements = new Hashtable ();
+ 
+     // some VCs relate to ID/IDREF/IDREFS attributes
+     // key = id; value = boolean true (defd) or false (refd)
+     private Hashtable		ids = new Hashtable ();
+ 
+     // we just record declared notation and unparsed entity names.
+     // the implementation here is simple/slow; these features
+     // are seldom used, one hopes they'll wither away soon
+     private Vector		notations = new Vector (5, 5);
+     private Vector		nDeferred = new Vector (5, 5);
+     private Vector		unparsed = new Vector (5, 5);
+     private Vector		uDeferred = new Vector (5, 5);
+ 	
+ 	// note: DocBk 3.1.7 XML defines over 2 dozen notations,
+ 	// used when defining unparsed entities for graphics
+ 	// (and maybe in other places)
+ 
+     
+ 
+     /**
+      * Creates a pipeline terminus which consumes all events passed to
+      * it; this will report validity errors as if they were fatal errors,
+      * unless an error handler is assigned.
+      *
+      * @see #setErrorHandler
+      */
+ 	// constructor used by PipelineFactory
+ 	    // ... and want one taking system ID of an external subset
+     public ValidationConsumer ()
+     {
+ 	this (null);
+     }
+ 
+     /**
+      * Creates a pipeline filter which reports validity errors and then
+      * passes events on to the next consumer if they were not fatal.
+      *
+      * @see #setErrorHandler
+      */
+ 	// constructor used by PipelineFactory
+ 	    // ... and want one taking system ID of an external subset
+ 	    // (which won't send declaration events)
+     public ValidationConsumer (EventConsumer next)
+     {
+ 	super (next);
+ 
+ 	setContentHandler (this);
+ 	setDTDHandler (this);
+ 	try { setProperty (DECL_HANDLER, this); }
+ 	catch (Exception e) { /* "can't happen" */ }
+ 	try { setProperty (LEXICAL_HANDLER, this); }
+ 	catch (Exception e) { /* "can't happen" */ }
+     }
+ 
+     
+     private static final String	fakeRootName
+ 	= ":Nobody:in:their_Right.Mind_would:use:this-name:1x:";
+     
+     /**
+      * Creates a validation consumer which is preloaded with the DTD provided.
+      * It does this by constructing a document with that DTD, then parsing
+      * that document and recording its DTD declarations.  Then it arranges
+      * not to modify that information.
+      *
+      * <p> The resulting validation consumer will only validate against
+      * the specified DTD, regardless of whether some other DTD is found
+      * in a document being parsed.
+      *
+      * @param rootName The name of the required root element; if this is
+      *	null, any root element name will be accepted.
+      * @param publicId If non-null and there is a non-null systemId, this
+      *	identifier provides an alternate access identifier for the DTD's
+      *	external subset.
+      * @param systemId If non-null, this is a URI (normally URL) that
+      *	may be used to access the DTD's external subset.
+      * @param internalSubset If non-null, holds literal markup declarations
+      *	comprising the DTD's internal subset.
+      * @param resolver If non-null, this will be provided to the parser for
+      *	use when resolving parameter entities (including any external subset).
+      * @param resolver If non-null, this will be provided to the parser for
+      *	use when resolving parameter entities (including any external subset).
+      * @param minimalElement If non-null, a minimal valid document.
+      *
+      * @exception SAXNotSupportedException If the default SAX parser does
+      *	not support the standard lexical or declaration handlers.
+      * @exception SAXParseException If the specified DTD has either
+      *	well-formedness or validity errors
+      * @exception IOException If the specified DTD can't be read for
+      *	some reason
+      */
+     public ValidationConsumer (
+ 	String		rootName,
+ 	String		publicId,
+ 	String		systemId,
+ 	String		internalSubset,
+ 	EntityResolver	resolver,
+ 	String		minimalDocument
+     ) throws SAXException, IOException
+     {
+ 	this (null);
+ 
+ 	disableReset = true;
+ 	if (rootName == null)
+ 	    rootName = fakeRootName;
+ 
+ 	//
+ 	// Synthesize document with that DTD; is it possible to do
+ 	// better for the declaration of the root element?
+ 	//
+ 	// NOTE:  can't use SAX2 to write internal subsets.
+ 	//
+ 	StringWriter	writer = new StringWriter ();
+ 
+ 	writer.write ("<!DOCTYPE ");
+ 	writer.write (rootName);
+ 	if (systemId != null) {
+ 	    writer.write ("\n  ");
+ 	    if (publicId != null) {
+ 		writer.write ("PUBLIC '");
+ 		writer.write (publicId);
+ 		writer.write ("'\n\t'");
+ 	    } else
+ 		writer.write ("SYSTEM '");
+ 	    writer.write (systemId);
+ 	    writer.write ("'");
+ 	}
+ 	writer.write (" [ ");
+ 	if (rootName == fakeRootName) {
+ 	    writer.write ("\n<!ELEMENT ");
+ 	    writer.write (rootName);
+ 	    writer.write (" EMPTY>");
+ 	}
+ 	if (internalSubset != null)
+ 	    writer.write (internalSubset);
+ 	writer.write ("\n ]>");
+ 
+ 	if (minimalDocument != null) {
+ 	    writer.write ("\n");
+ 	    writer.write (minimalDocument);
+ 	    writer.write ("\n");
+ 	} else {
+ 	    writer.write (" <");
+ 	    writer.write (rootName);
+ 	    writer.write ("/>\n");
+ 	}
+ 	minimalDocument = writer.toString ();
+ 
+ 	//
+ 	// OK, load it
+ 	//
+ 	XMLReader	producer;
+ 
+ 	producer = XMLReaderFactory.createXMLReader ();
+ 	bind (producer, this);
+ 
+ 	if (resolver != null)
+ 	    producer.setEntityResolver (resolver);
+ 
+ 	InputSource	in;
+ 	
+ 	in = new InputSource (new StringReader (minimalDocument));
+ 	producer.parse (in);
+ 
+ 	disableDeclarations = true;
+ 	if (rootName == fakeRootName)
+ 	    this.rootName = null;
+     }
+ 
+     private void resetState ()
+     {
+ 	if (!disableReset) {
+ 	    rootName = null;
+ 	    contentStack.removeAllElements ();
+ 	    elements.clear ();
+ 	    ids.clear ();
+ 
+ 	    notations.removeAllElements ();
+ 	    nDeferred.removeAllElements ();
+ 	    unparsed.removeAllElements ();
+ 	    uDeferred.removeAllElements ();
+ 	}
+     }
+ 
+ 
+     private void warning (String description)
+     throws SAXException
+     {
+ 	ErrorHandler		errHandler = getErrorHandler ();
+ 	Locator			locator = getDocumentLocator ();
+ 	SAXParseException	err;
+ 
+ 	if (errHandler == null)
+ 	    return;
+ 
+ 	if (locator == null)
+ 	    err = new SAXParseException (description, null, null, -1, -1);
+ 	else
+ 	    err = new SAXParseException (description, locator);
+ 	errHandler.warning (err);
+     }
+ 
+     // package private (for ChildrenRecognizer)
+     private void error (String description)
+     throws SAXException
+     {
+ 	ErrorHandler		errHandler = getErrorHandler ();
+ 	Locator			locator = getDocumentLocator ();
+ 	SAXParseException	err;
+ 
+ 	if (locator == null)
+ 	    err = new SAXParseException (description, null, null, -1, -1);
+ 	else
+ 	    err = new SAXParseException (description, locator);
+ 	if (errHandler != null)
+ 	    errHandler.error (err);
+ 	else	// else we always treat it as fatal!
+ 	    throw err;
+     }
+ 
+     private void fatalError (String description)
+     throws SAXException
+     {
+ 	ErrorHandler		errHandler = getErrorHandler ();
+ 	Locator			locator = getDocumentLocator ();
+ 	SAXParseException	err;
+ 
+ 	if (locator != null)
+ 	    err = new SAXParseException (description, locator);
+ 	else
+ 	    err = new SAXParseException (description, null, null, -1, -1);
+ 	if (errHandler != null)
+ 	    errHandler.fatalError (err);
+ 	// we always treat this as fatal, regardless of the handler
+ 	throw err;
+     }
+ 
+ 
+     private static boolean isExtender (char c)
+     {
+ 	// [88] Extender ::= ...
+ 	return c == 0x00b7 || c == 0x02d0 || c == 0x02d1 || c == 0x0387
+ 	       || c == 0x0640 || c == 0x0e46 || c == 0x0ec6 || c == 0x3005
+ 	       || (c >= 0x3031 && c <= 0x3035)
+ 	       || (c >= 0x309d && c <= 0x309e)
+ 	       || (c >= 0x30fc && c <= 0x30fe);
+     }
+ 
+ 
+     // use augmented Unicode rules, not full XML rules
+     private boolean isName (String name, String context, String id)
+     throws SAXException
+     {
+ 	char	buf [] = name.toCharArray ();
+ 	boolean	pass = true;
+ 
+ 	if (!Character.isUnicodeIdentifierStart (buf [0])
+ 		&& ":_".indexOf (buf [0]) == -1)
+ 	    pass = false;
+ 	else {
+ 	    int max = buf.length;
+ 	    for (int i = 1; pass && i < max; i++) {
+ 		char c = buf [i];
+ 		if (!Character.isUnicodeIdentifierPart (c)
+ 			&& ":-_.".indexOf (c) == -1
+ 			&& !isExtender (c))
+ 		    pass = false;
+ 	    }
+ 	}
+ 
+ 	if (!pass)
+ 	    error ("In " + context + " for " + id
+ 		+ ", '" + name + "' is not a name");
+ 	return pass;	// true == OK
+     }
+ 
+     // use augmented Unicode rules, not full XML rules
+     private boolean isNmtoken (String nmtoken, String context, String id)
+     throws SAXException
+     {
+ 	char	buf [] = nmtoken.toCharArray ();
+ 	boolean	pass = true;
+ 	int	max = buf.length;
+ 
+ 	// XXX make this share code with isName
+ 
+ 	for (int i = 0; pass && i < max; i++) {
+ 		char c = buf [i];
+ 	    if (!Character.isUnicodeIdentifierPart (c)
+ 		    && ":-_.".indexOf (c) == -1
+ 		    && !isExtender (c))
+ 		pass = false;
+ 	}
+ 
+ 	if (!pass)
+ 	    error ("In " + context + " for " + id
+ 		+ ", '" + nmtoken + "' is not a name token");
+ 	return pass;	// true == OK
+     }
+ 
+     private void checkEnumeration (String value, String type, String name)
+     throws SAXException
+     {
+ 	if (!hasMatch (value, type))
+ 	    // VC: Enumeration
+ 	    error ("Value '" + value
+ 		+ "' for attribute '" + name
+ 		+ "' is not permitted: " + type);
+     }
+ 
+     // used to test enumerated attributes and mixed content models
+     // package private
+     static boolean hasMatch (String value, String orList)
+     {
+ 	int len = value.length ();
+ 	int max = orList.length () - len;
+ 
+ 	for (int start = 0;
+ 		(start = orList.indexOf (value, start)) != -1;
+ 		start++) {
+ 	    char c;
+ 
+ 	    if (start > max)
+ 		break;
+ 	    c = orList.charAt (start - 1);
+ 	    if (c != '|' && c != '('/*)*/)
+ 		continue;
+ 	    c = orList.charAt (start + len);
+ 	    if (c != '|' && /*(*/ c != ')')
+ 		continue;
+ 	    return true;
+ 	}
+ 	return false;
+     }
+ 
+     /**
+      * <b>LexicalHandler</b> Records the declaration of the root
+      * element, so it can be verified later.
+      * Passed to the next consumer, unless this one was
+      * preloaded with a particular DTD.
+      */
+     public void startDTD (String name, String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (disableDeclarations)
+ 	    return;
+ 
+ 	rootName = name;
+ 	super.startDTD (name, publicId, systemId);
+     }
+ 
+     /**
+      * <b>LexicalHandler</b> Verifies that all referenced notations
+      * and unparsed entities have been declared.
+      * Passed to the next consumer, unless this one was
+      * preloaded with a particular DTD.
+      */
+     public void endDTD ()
+     throws SAXException
+     {
+ 	if (disableDeclarations)
+ 	    return;
+ 
+ 	// this is a convenient hook for end-of-dtd checks, but we
+ 	// could also trigger it in the first startElement call.
+ 	// locator info is more appropriate here though.
+ 
+ 	// VC: Notation Declared (NDATA can refer to them before decls,
+ 	//	as can NOTATION attribute enumerations and defaults)
+ 	int length = nDeferred.size ();
+ 	for (int i = 0; i < length; i++) {
+ 	    String notation = (String) nDeferred.elementAt (i);
+ 	    if (!notations.contains (notation)) {
+ 		error ("A declaration referred to notation '" + notation
+ 			+ "' which was never declared");
+ 	    }
+ 	}
+ 	nDeferred.removeAllElements ();
+ 
+ 	// VC: Entity Name (attribute values can refer to them
+ 	//	before they're declared); VC Attribute Default Legal
+ 	length = uDeferred.size ();
+ 	for (int i = 0; i < length; i++) {
+ 	    String entity = (String) uDeferred.elementAt (i);
+ 	    if (!unparsed.contains (entity)) {
+ 		error ("An attribute default referred to entity '" + entity
+ 			+ "' which was never declared");
+ 	    }
+ 	}
+ 	uDeferred.removeAllElements ();
+ 	super.endDTD ();
+     }
+ 
+ 
+     // These are interned, so we can rely on "==" to find the type of
+     // all attributes except enumerations ...
+     // "(this|or|that|...)" and "NOTATION (this|or|that|...)"
+     static final String types [] = {
+ 	"CDATA",
+ 	"ID", "IDREF", "IDREFS",
+ 	"NMTOKEN", "NMTOKENS",
+ 	"ENTITY", "ENTITIES"
+     };
+ 
+ 
+     /**
+      * <b>DecllHandler</b> Records attribute declaration for later use
+      * in validating document content, and checks validity constraints
+      * that are applicable to attribute declarations.
+      * Passed to the next consumer, unless this one was
+      * preloaded with a particular DTD.
+      */
+     public void attributeDecl (
+ 	String eName,
+ 	String aName,
+ 	String type,
+ 	String mode,
+ 	String value
+     ) throws SAXException
+     {
+ 	if (disableDeclarations)
+ 	    return;
+ 
+ 	ElementInfo	info = (ElementInfo) elements.get (eName);
+ 	AttributeInfo	ainfo = new AttributeInfo ();
+ 	boolean		checkOne = false;
+ 	boolean		interned = false;
+ 
+ 	// cheap interning of type names and #FIXED, #REQUIRED
+ 	// for faster startElement (we can use "==")
+ 	for (int i = 0; i < types.length; i++) {
+ 	    if (types [i].equals (type)) {
+ 		type = types [i];
+ 		interned = true;
+ 		break;
+ 	    }
+ 	}
+ 	if ("#FIXED".equals (mode))
+ 	    mode = "#FIXED";
+ 	else if ("#REQUIRED".equals (mode))
+ 	    mode = "#REQUIRED";
+ 
+ 	ainfo.type = type;
+ 	ainfo.mode = mode;
+ 	ainfo.value = value;
+ 
+ 	// we might not have seen the content model yet
+ 	if (info == null) {
+ 	    info = new ElementInfo (eName);
+ 	    elements.put (eName, info);
+ 	}
+ 	if ("ID" == type) {
+ 	    checkOne = true;
+ 	    if (!("#REQUIRED" == mode || "#IMPLIED".equals (mode))) {
+ 		// VC: ID Attribute Default
+ 		error ("ID attribute '" + aName
+ 		    + "' must be #IMPLIED or #REQUIRED");
+ 	    }
+ 
+ 	} else if (!interned && type.startsWith ("NOTATION ")) {
+ 	    checkOne = true;
+ 
+ 	    // VC: Notation Attributes (notations must be declared)
+ 	    StringTokenizer	tokens = new StringTokenizer (
+ 		type.substring (10, type.lastIndexOf (')')),
+ 		"|");
+ 	    while (tokens.hasMoreTokens ()) {
+ 		String	token = tokens.nextToken ();
+ 		if (!notations.contains (token))
+ 		    nDeferred.addElement (token);
+ 	    }
+ 	}
+ 	if (checkOne) {
+ 	    for (Enumeration e = info.attributes.keys ();
+ 		    e.hasMoreElements ();
+ 		    /* NOP */) {
+ 		String		name;
+ 		AttributeInfo	ainfo2;
+ 
+ 		name = (String) e.nextElement ();
+ 		ainfo2 = (AttributeInfo) info.attributes.get (name);
+ 		if (type == ainfo2.type || !interned /* NOTATION */) {
+ 		    // VC: One ID per Element Type
+ 		    // VC: One Notation per Element TYpe
+ 		    error ("Element '" + eName
+ 			+ "' already has an attribute of type "
+ 			+ (interned ? "NOTATION" : type)
+ 			+ " ('" + name
+ 			+ "') so '" + aName 
+ 			+ "' is a validity error");
+ 		}
+ 	    }
+ 	}
+ 
+ 	// VC: Attribute Default Legal
+ 	if (value != null) {
+ 
+ 	    if ("CDATA" == type) {
+ 		// event source rejected '<'
+ 
+ 	    } else if ("NMTOKEN" == type) {
+ 		// VC: Name Token (is a nmtoken)
+ 		isNmtoken (value, "attribute default", aName);
+ 
+ 	    } else if ("NMTOKENS" == type) {
+ 		// VC: Name Token (is a nmtoken; at least one value)
+ 		StringTokenizer	tokens = new StringTokenizer (value);
+ 		if (!tokens.hasMoreTokens ())
+ 		    error ("Default for attribute '" + aName
+ 			+ "' must have at least one name token.");
+ 		else do {
+ 		    String token = tokens.nextToken ();
+ 		    isNmtoken (token, "attribute default", aName);
+ 		} while (tokens.hasMoreTokens ());
+ 
+ 	    } else if ("IDREF" == type || "ENTITY" == type) {
+ 		// VC: Entity Name (is a name)
+ 		// VC: IDREF (is a name) (is declared)
+ 		isName (value, "attribute default", aName);
+ 		if ("ENTITY" == type && !unparsed.contains (value))
+ 		    uDeferred.addElement (value);
+ 
+ 	    } else if ("IDREFS" == type || "ENTITIES" == type) {
+ 		// VC: Entity Name (is a name; at least one value)
+ 		// VC: IDREF (is a name; at least one value)
+ 		StringTokenizer	names = new StringTokenizer (value);
+ 		if (!names.hasMoreTokens ())
+ 		    error ("Default for attribute '" + aName
+ 			+ "' must have at least one name.");
+ 		else do {
+ 		    String name = names.nextToken ();
+ 		    isName (name, "attribute default", aName);
+ 		    if ("ENTITIES" == type && !unparsed.contains (name))
+ 			uDeferred.addElement (value);
+ 		} while (names.hasMoreTokens ());
+ 	    
+ 	    } else if (type.charAt (0) == '(' /*)*/ ) {
+ 		// VC: Enumeration (must match)
+ 		checkEnumeration (value, type, aName);
+ 
+ 	    } else if (!interned && checkOne) {	/* NOTATION */
+ 		// VC: Notation attributes (must be names)
+ 		isName (value, "attribute default", aName);
+ 
+ 		// VC: Notation attributes (must be declared)
+ 		if (!notations.contains (value))
+ 		    nDeferred.addElement (value);
+ 		
+ 		// VC: Enumeration (must match)
+ 		checkEnumeration (value, type, aName);
+ 
+ 	    } else if ("ID" != type)
+ 		throw new RuntimeException ("illegal attribute type: " + type);
+ 	}
+ 
+ 	if (info.attributes.get (aName) == null)
+ 	    info.attributes.put (aName, ainfo);
+ 	/*
+ 	else
+ 	    warning ("Element '" + eName
+ 		+ "' already has an attribute named '" + aName + "'");
+ 	*/
+ 
+ 	if ("xml:space".equals (aName)) {
+ 	    if (!("(default|preserve)".equals (type)
+ 		    || "(preserve|default)".equals (type)
+ 			// these next two are arguable; XHTML's DTD doesn't
+ 			// deserve errors.  After all, it's not like any
+ 			// illegal _value_ could pass ...
+ 		    || "(preserve)".equals (type)
+ 		    || "(default)".equals (type)
+ 		    ))
+ 		error (
+ 		    "xml:space attribute type must be like '(default|preserve)'"
+ 		    + " not '" + type + "'"
+ 		    );
+ 
+ 	}
+ 	super.attributeDecl (eName, aName, type, mode, value);
+     }
+ 
+     /**
+      * <b>DecllHandler</b> Records the element declaration for later use
+      * when checking document content, and checks validity constraints that
+      * apply to element declarations.  Passed to the next consumer, unless
+      * this one was preloaded with a particular DTD.
+      */
+     public void elementDecl (String name, String model)
+     throws SAXException
+     {
+ 	if (disableDeclarations)
+ 	    return;
+ 
+ 	ElementInfo	info = (ElementInfo) elements.get (name);
+ 
+ 	// we might have seen an attribute decl already
+ 	if (info == null) {
+ 	    info = new ElementInfo (name);
+ 	    elements.put (name, info);
+ 	}
+ 	if (info.model != null) {
+ 	    // NOTE:  not all parsers can report such duplicates.
+ 	    // VC: Unique Element Type Declaration
+ 	    error ("Element type '" + name
+ 		+ "' was already declared.");
+ 	} else {
+ 	    info.model = model;
+ 
+ 	    // VC: No Duplicate Types (in mixed content models)
+ 	    if (model.charAt (1) == '#') 	// (#PCDATA...
+ 		info.getRecognizer (this);
+ 	}
+ 	super.elementDecl (name, model);
+     }
+ 
+     /**
+      * <b>DecllHandler</b> passed to the next consumer, unless this
+      * one was preloaded with a particular DTD
+      */
+     public void internalEntityDecl (String name, String value)
+     throws SAXException
+     {
+ 	if (!disableDeclarations)
+ 	    super.internalEntityDecl (name, value);
+     }
+ 
+     /**
+      * <b>DecllHandler</b> passed to the next consumer, unless this
+      * one was preloaded with a particular DTD
+      */
+     public void externalEntityDecl (String name,
+     	String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (!disableDeclarations)
+ 	    super.externalEntityDecl (name, publicId, systemId);
+     }
+ 
+ 
+     /**
+      * <b>DTDHandler</b> Records the notation name, for checking
+      * NOTATIONS attribute values and declararations of unparsed
+      * entities.  Passed to the next consumer, unless this one was
+      * preloaded with a particular DTD.
+      */
+     public void notationDecl (String name, String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (disableDeclarations)
+ 	    return;
+ 
+ 	notations.addElement (name);
+ 	super.notationDecl (name, publicId, systemId);
+     }
+ 
+     /**
+      * <b>DTDHandler</b> Records the entity name, for checking
+      * ENTITY and ENTITIES attribute values; records the notation
+      * name if it hasn't yet been declared.  Passed to the next consumer,
+      * unless this one was preloaded with a particular DTD.
+      */
+     public void unparsedEntityDecl (
+ 	String name,
+ 	String publicId,
+ 	String systemId,
+ 	String notationName
+     ) throws SAXException
+     {
+ 	if (disableDeclarations)
+ 	    return;
+ 
+ 	unparsed.addElement (name);
+ 	if (!notations.contains (notationName))
+ 	    nDeferred.addElement (notationName);
+ 	super.unparsedEntityDecl (name, publicId, systemId, notationName);
+     }
+     
+     
+     /**
+      * <b>ContentHandler</b> Ensures that state from any previous parse
+      * has been deleted.
+      * Passed to the next consumer.
+      */
+     public void startDocument ()
+     throws SAXException
+     {
+ 	resetState ();
+ 	super.startDocument ();
+     }
+ 
+ 
+     private static boolean isAsciiLetter (char c)
+     {
+ 	return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+     }
+ 
+ 
+     /**
+      * <b>ContentHandler</b> Reports a fatal exception.  Validating
+      * XML processors may not skip any entities.
+      */
+     public void skippedEntity (String name)
+     throws SAXException
+     {
+ 	fatalError ("may not skip entities");
+     }
+ 
+     /*
+      * SAX2 doesn't expand non-PE refs in attribute defaults...
+      */
+     private String expandDefaultRefs (String s)
+     throws SAXException
+     {
+ 	if (s.indexOf ('&') < 0)
+ 	    return s;
+ 	
+ // FIXME: handle &#nn; &#xnn; &name;
+ 	String message = "Can't expand refs in attribute default: " + s;
+ 	warning (message);
+ 
+ 	return s;
+     }
+ 
+     /**
+      * <b>ContentHandler</b> Performs validity checks against element
+      * (and document) content models, and attribute values.
+      * Passed to the next consumer.
+      */
+     public void startElement (
+ 	String		uri,
+ 	String		localName,
+ 	String		qName,
+ 	Attributes	atts
+     ) throws SAXException
+     {
+ 	//
+ 	// First check content model for the enclosing scope.
+ 	//
+ 	if (contentStack.isEmpty ()) {
+ 	    // VC:  Root Element Type
+ 	    if (!qName.equals (rootName)) {
+ 		if (rootName == null)
+ 		    warning ("This document has no DTD, can't be valid");
+ 		else
+ 		    error ("Root element type '" + qName
+ 			+ "' was declared to be '" + rootName + "'");
+ 	    }
+ 	} else {
+ 	    Recognizer state = (Recognizer) contentStack.peek ();
+ 
+ 	    if (state != null) {
+ 		Recognizer newstate = state.acceptElement (qName);
+ 
+ 		if (newstate == null)
+ 		    error ("Element type '" + qName
+ 			+ "' in element '" + state.type.name
+ 			+ "' violates content model " + state.type.model
+ 			);
+ 		if (newstate != state) {
+ 		    contentStack.pop ();
+ 		    contentStack.push (newstate);
+ 		}
+ 	    }
+ 	}
+ 
+ 	//
+ 	// Then check that this element was declared, and push the
+ 	// object used to validate its content model onto our stack.
+ 	//
+ 	// This is where the recognizer gets created, if needed; if
+ 	// it's a "children" (elements) content model, an NDFA is
+ 	// created.  (One recognizer is used per content type, no
+ 	// matter how complex that recognizer is.)
+ 	//
+ 	ElementInfo		info;
+ 
+ 	info = (ElementInfo) elements.get (qName);
+ 	if (info == null || info.model == null) {
+ 	    // VC: Element Valid (base clause)
+ 	    error ("Element type '" + qName + "' was not declared");
+ 	    contentStack.push (null);
+ 
+ 	    // for less diagnostic noise, fake a declaration.
+ 	    elementDecl (qName, "ANY");
+ 	} else
+ 	    contentStack.push (info.getRecognizer (this));
+ 
+ 	//
+ 	// Then check each attribute present
+ 	//
+ 	int			len;
+ 	String			aname;
+ 	AttributeInfo		ainfo;
+ 
+ 	if (atts != null)
+ 	    len = atts.getLength ();
+ 	else
+ 	    len = 0;
+ 	
+ 	for (int i = 0; i < len; i++) {
+ 	    aname = atts.getQName (i);
+ 
+ 	    if (info == null
+ 		    || (ainfo = (AttributeInfo) info.attributes.get (aname))
+ 			    == null) {
+ 		// VC: Attribute Value Type
+ 		error ("Attribute '" + aname
+ 		    + "' was not declared for element type " + qName);
+ 		continue;
+ 	    }
+ 
+ 	    String value = atts.getValue (i);
+ 
+ 	    // note that "==" for type names and "#FIXED" is correct
+ 	    // (and fast) since we've interned those literals.
+ 
+ 	    if ("#FIXED" == ainfo.mode) {
+ 		String expanded = expandDefaultRefs (ainfo.value);
+ 
+ 		// VC: Fixed Attribute Default
+ 		if (!value.equals (expanded)) {
+ 		    error ("Attribute '" + aname
+ 			+ "' must match " + expanded
+ 			);
+ 		    continue;
+ 		}
+ 	    }
+ 
+ 	    if ("CDATA" == ainfo.type)
+ 		continue;
+ 	    
+ 	    //
+ 	    // For all other attribute types, there are various
+ 	    // rules to follow.
+ 	    //
+ 	    
+ 	    if ("ID" == ainfo.type) {
+ 		// VC: ID (must be a name)
+ 		if (isName (value, "ID attribute", aname)) {
+ 		    if (Boolean.TRUE == ids.get (value))
+ 			// VC: ID (appears once)
+ 			error ("ID attribute " + aname
+ 			    + " uses an ID value '" + value
+ 			    + "' which was already declared.");
+ 		    else
+ 			// any forward refs are no longer problems
+ 			ids.put (value, Boolean.TRUE);
+ 		}
+ 		continue;
+ 	    } 
+ 
+ 	    if ("IDREF" == ainfo.type) {
+ 		// VC: IDREF (value must be a name)
+ 		if (isName (value, "IDREF attribute", aname)) {
+ 		    // VC: IDREF (must match some ID attribute)
+ 		    if (ids.get (value) == null)
+ 			// new -- assume it's a forward ref
+ 			ids.put (value, Boolean.FALSE);
+ 		}
+ 		continue;
+ 	    } 
+ 
+ 	    if ("IDREFS" == ainfo.type) {
+ 		StringTokenizer	tokens = new StringTokenizer (value, " ");
+ 
+ 		if (!tokens.hasMoreTokens ()) {
+ 		    // VC: IDREF (one or more values)
+ 		    error ("IDREFS attribute " + aname
+ 			+ " must have at least one ID ref");
+ 		} else do {
+ 		    String id = tokens.nextToken ();
+ 
+ 		    // VC: IDREF (value must be a name)
+ 		    if (isName (id, "IDREFS attribute", aname)) {
+ 			// VC: IDREF (must match some ID attribute)
+ 			if (ids.get (id) == null)
+ 			    // new -- assume it's a forward ref
+ 			    ids.put (id, Boolean.FALSE);
+ 		    }
+ 		} while (tokens.hasMoreTokens ());
+ 		continue;
+ 	    }
+ 
+ 	    if ("NMTOKEN" == ainfo.type) {
+ 		// VC: Name Token (is a name token)
+ 		isNmtoken (value, "NMTOKEN attribute", aname);
+ 		continue;
+ 	    }
+ 
+ 	    if ("NMTOKENS" == ainfo.type) {
+ 		StringTokenizer	tokens = new StringTokenizer (value, " ");
+ 
+ 		if (!tokens.hasMoreTokens ()) {
+ 		    // VC: Name Token (one or more values)
+ 		    error ("NMTOKENS attribute " + aname
+ 			+ " must have at least one name token");
+ 		} else do {
+ 		    String token = tokens.nextToken ();
+ 
+ 		    // VC: Name Token (is a name token)
+ 		    isNmtoken (token, "NMTOKENS attribute", aname);
+ 		} while (tokens.hasMoreTokens ());
+ 		continue;
+ 	    }
+ 
+ 	    if ("ENTITY" == ainfo.type) {
+ 		if (!unparsed.contains (value))
+ 		    // VC: Entity Name
+ 		    error ("Value of attribute '" + aname
+ 			+ "' refers to unparsed entity '" + value
+ 			+ "' which was not declared.");
+ 		continue;
+ 	    }
+ 
+ 	    if ("ENTITIES" == ainfo.type) {
+ 		StringTokenizer	tokens = new StringTokenizer (value, " ");
+ 
+ 		if (!tokens.hasMoreTokens ()) {
+ 		    // VC: Entity Name (one or more values)
+ 		    error ("ENTITIES attribute " + aname
+ 			+ " must have at least one name token");
+ 		} else do {
+ 		    String entity = tokens.nextToken ();
+ 
+ 		    if (!unparsed.contains (entity))
+ 			// VC: Entity Name
+ 			error ("Value of attribute '" + aname
+ 			    + "' refers to unparsed entity '" + entity
+ 			    + "' which was not declared.");
+ 		} while (tokens.hasMoreTokens ());
+ 		continue;
+ 	    }
+ 
+ 	    //
+ 	    // check for enumerations last; more expensive
+ 	    //
+ 	    if (ainfo.type.charAt (0) == '(' /*)*/	
+ 		    || ainfo.type.startsWith ("NOTATION ")
+ 		    ) {
+ 		// VC: Enumeration (value must be defined)
+ 		checkEnumeration (value, ainfo.type, aname);
+ 		continue;
+ 	    }
+ 	}
+ 
+ 	//
+ 	// Last, check that all #REQUIRED attributes were provided
+ 	//
+ 	if (info != null) {
+ 	    Hashtable	table = info.attributes;
+ 
+ 	    if (table.size () != 0) {
+ 		Enumeration	e = table.keys ();
+ 
+ 		// XXX table.keys uses the heap, bleech -- slows things
+ 
+ 		while (e.hasMoreElements ()) {
+ 		    aname = (String) e.nextElement ();
+ 		    ainfo = (AttributeInfo) table.get (aname);
+ 
+ 		    // "#REQUIRED" mode was interned in attributeDecl
+ 		    if ("#REQUIRED" == ainfo.mode
+ 			    && atts.getValue (aname) == null) {
+ 			// VC: Required Attribute
+ 			error ("Attribute '" + aname + "' must be specified "
+ 			    + "for element type " + qName);
+ 		    }
+ 		}
+ 	    }
+ 	}
+ 	super.startElement (uri, localName, qName, atts);
+     }
+ 
+     /**
+      * <b>ContentHandler</b> Reports a validity error if the element's content
+      * model does not permit character data.
+      * Passed to the next consumer.
+      */
+     public void characters (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	Recognizer state;
+ 
+ 	if (contentStack.empty ())
+ 	    state = null;
+ 	else
+ 	    state = (Recognizer) contentStack.peek ();
+ 
+ 	// NOTE:  if this ever supports with SAX parsers that don't
+ 	// report ignorable whitespace as such (only XP?), this class
+ 	// needs to morph it into ignorableWhitespace() as needed ...
+ 
+ 	if (state != null && !state.acceptCharacters ())
+ 	    // VC: Element Valid (clauses three, four -- see recognizer)
+ 	    error ("Character content not allowed in element "
+ 		+ state.type.name);
+ 	
+ 	super.characters (ch, start, length);
+     }
+ 	
+ 
+     /**
+      * <b>ContentHandler</b> Reports a validity error if the element's content
+      * model does not permit end-of-element yet, or a well formedness error
+      * if there was no matching startElement call.
+      * Passed to the next consumer.
+      */
+     public void endElement (String uri, String localName, String qName)
+     throws SAXException
+     {
+ 	try {
+ 	    Recognizer state = (Recognizer) contentStack.pop ();
+ 
+ 	    if (state != null && !state.completed ())
+ 		// VC: Element valid (clauses two, three, four; see Recognizer)
+ 		error ("Premature end for element '"
+ 		    + state.type.name
+ 		    + "', content model "
+ 		    + state.type.model);
+ 	    
+ 	    // could insist on match of start element, but that's
+ 	    // something the input stream must to guarantee.
+ 
+ 	} catch (EmptyStackException e) {
+ 	    fatalError ("endElement without startElement: " + qName
+ 		+ ((uri == null)
+ 		    ? ""
+ 		    : ( " { '" + uri + "', " + localName + " }")));
+ 	}
+ 	super.endElement (uri, localName, qName);
+     }
+ 
+     /**
+      * <b>ContentHandler</b> Checks whether all ID values that were
+      * referenced have been declared, and releases all resources. 
+      * Passed to the next consumer.
+      * 
+      * @see #setDocumentLocator
+      */
+     public void endDocument ()
+     throws SAXException
+     {
+ 	for (Enumeration idNames = ids.keys ();
+ 		idNames.hasMoreElements ();
+ 		/* NOP */) {
+ 	    String id = (String) idNames.nextElement ();
+ 	    
+ 	    if (Boolean.FALSE == ids.get (id)) {
+ 		// VC: IDREF (must match ID)
+ 		error ("Undeclared ID value '" + id
+ 		    + "' was referred to by an IDREF/IDREFS attribute");
+ 	    }
+ 	}
+ 
+ 	resetState ();
+ 	super.endDocument ();
+     }
+ 
+ 
+     /** Holds per-element declarations */
+     static private final class ElementInfo
+     {
+ 	String			name;
+ 	String			model;
+ 
+ 	// key = attribute name; value = AttributeInfo
+ 	Hashtable		attributes = new Hashtable (11);
+ 
+ 	ElementInfo (String n) { name = n; }
+ 
+ 	private Recognizer	recognizer;
+ 
+ 	// for validating content models:  one per type, shared,
+ 	// and constructed only on demand ... so unused elements do
+ 	// not need to consume resources.
+ 	Recognizer	getRecognizer (ValidationConsumer consumer)
+ 	throws SAXException
+ 	{
+ 	    if (recognizer == null) {
+ 		if ("ANY".equals (model))
+ 		    recognizer = ANY;
+ 		else if ("EMPTY".equals (model))
+ 		    recognizer = new EmptyRecognizer (this);
+ 		else if ('#' == model.charAt (1))
+ 		    // n.b. this constructor does a validity check
+ 		    recognizer = new MixedRecognizer (this, consumer);
+ 		else
+ 		    recognizer = new ChildrenRecognizer (this, consumer);
+ 	    }
+ 	    return recognizer;
+ 	}
+     }
+ 
+     /** Holds per-attribute declarations */
+     static private final class AttributeInfo
+     {
+ 	String	type;
+ 	String	mode;		// #REQUIRED, etc (or null)
+ 	String	value;		// or null
+     }
+ 
+ 
+     //
+     // Content model validation
+     //
+ 
+     static private final Recognizer	ANY = new Recognizer (null);
+ 
+ 
+     // Base class defines the calls used to validate content,
+     // and supports the "ANY" content model
+     static private class Recognizer
+     {
+ 	final ElementInfo	type;
+ 
+ 	Recognizer (ElementInfo t) { type = t; }
+ 
+ 	// return true iff character data is legal here
+ 	boolean acceptCharacters ()
+ 	throws SAXException
+ 	    // VC: Element Valid (third and fourth clauses)
+ 	    { return true; }
+ 
+ 	// null return = failure
+ 	// otherwise, next state (like an FSM)
+ 	// prerequisite: tested that name was declared
+ 	Recognizer acceptElement (String name)
+ 	throws SAXException
+ 	    // VC: Element Valid (fourth clause)
+ 	    { return this; }
+ 
+ 	// return true iff model is completed, can finish
+ 	boolean completed ()
+ 	throws SAXException
+ 	    // VC: Element Valid (fourth clause)
+ 	    { return true; }
+ 	
+ 	public String toString ()
+ 	    // n.b. "children" is the interesting case!
+ 	    { return (type == null) ? "ANY" : type.model; }
+     }
+ 
+     // "EMPTY" content model -- no characters or elements
+     private static final class EmptyRecognizer extends Recognizer
+     {
+ 	public EmptyRecognizer (ElementInfo type)
+ 	    { super (type); }
+ 
+ 	// VC: Element Valid (first clause)
+ 	boolean acceptCharacters ()
+ 	    { return false; }
+ 
+ 	// VC: Element Valid (first clause)
+ 	Recognizer acceptElement (String name)
+ 	    { return null; }
+     }
+ 
+     // "Mixed" content model -- ANY, but restricts elements
+     private static final class MixedRecognizer extends Recognizer
+     {
+ 	private String	permitted [];
+ 
+ 	// N.B. constructor tests for duplicated element names (VC)
+ 	public MixedRecognizer (ElementInfo t, ValidationConsumer v)
+ 	throws SAXException
+ 	{
+ 	    super (t);
+ 
+ 	    // (#PCDATA...)* or (#PCDATA) ==> ... or empty
+ 	    // with the "..." being "|elname|..."
+ 	    StringTokenizer	tokens = new StringTokenizer (
+ 		t.model.substring (8, t.model.lastIndexOf (')')),
+ 		"|");
+ 	    Vector		vec = new Vector ();
+ 
+ 	    while (tokens.hasMoreTokens ()) {
+ 		String token = tokens.nextToken ();
+ 
+ 		if (vec.contains (token))
+ 		    v.error ("element " + token
+ 			+ " is repeated in mixed content model: "
+ 			+ t.model);
+ 		else
+ 		    vec.addElement (token.intern ());
+ 	    }
+ 	    permitted = new String [vec.size ()];
+ 	    for (int i = 0; i < permitted.length; i++)
+ 		permitted [i] = (String) vec.elementAt (i);
+ 	    
+ 	    // in one large machine-derived DTD sample, most of about
+ 	    // 250 mixed content models were empty, and 25 had ten or
+ 	    // more entries.  2 had over a hundred elements.  Linear
+ 	    // search isn't obviously wrong.
+ 	}
+ 
+ 	// VC: Element Valid (third clause)
+ 	Recognizer acceptElement (String name)
+ 	{
+ 	    int		length = permitted.length;
+ 
+ 	    // first pass -- optimistic w.r.t. event source interning
+ 	    // (and document validity)
+ 	    for (int i = 0; i < length; i++)
+ 		if (permitted [i] == name)
+ 		    return this;
+ 	    // second pass -- pessimistic w.r.t. event source interning
+ 	    for (int i = 0; i < length; i++)
+ 		if (permitted [i].equals (name))
+ 		    return this;
+ 	    return null;
+ 	}
+     }
+ 
+ 
+     // recognizer loop flags, see later
+     private static final int		F_LOOPHEAD = 0x01;
+     private static final int		F_LOOPNEXT = 0x02;
+ 
+     // for debugging -- used to label/count nodes in toString()
+     private static int			nodeCount;
+ 
+     /**
+      * "Children" content model -- these are nodes in NDFA state graphs.
+      * They work in fixed space.  Note that these graphs commonly have
+      * cycles, handling features such as zero-or-more and one-or-more.
+      *
+      * <p>It's readonly, so only one copy is ever needed.  The content model
+      * stack may have any number of pointers into each graph, when a model
+      * happens to be needed more than once due to element nesting.  Since
+      * traversing the graph just moves to another node, and never changes
+      * it, traversals never interfere with each other.
+      *
+      * <p>There is an option to report non-deterministic models.  These are
+      * always XML errors, but ones which are not often reported despite the
+      * fact that they can lead to different validating parsers giving
+      * different results for the same input.  (The XML spec doesn't require
+      * them to be reported.)
+      *
+      * <p><b>FIXME</b> There's currently at least one known bug here, in that
+      * it's not actually detecting the non-determinism it tries to detect.
+      * (Of the "optional.xml" test, the once-or-twice-2* tests are all non-D;
+      * maybe some others.)  This may relate to the issue flagged below as
+      * "should not" happen (but it was), which showed up when patching the
+      * graph to have one exit node (or more EMPTY nodes).
+      */
+     private static final class ChildrenRecognizer extends Recognizer
+ 	implements Cloneable
+     {
+ 	// for reporting non-deterministic content models
+ 	// ... a waste of space if we're not reporting those!
+ 	// ... along with the 'model' member (in base class)
+ 	private ValidationConsumer	consumer;
+ 
+ 	// for CHOICE nodes -- each component is an arc that
+ 	// accepts a different NAME (or is EMPTY indicating
+ 	// NDFA termination).
+ 	private Recognizer		components [];
+ 
+ 	// for NAME/SEQUENCE nodes -- accepts that NAME and
+ 	// then goes to the next node (CHOICE, NAME, EMPTY).
+ 	private String			name;
+ 	private Recognizer		next;
+ 
+ 	// loops always point back to a CHOICE node. we mark such choice
+ 	// nodes (F_LOOPHEAD) for diagnostics and faster deep cloning.
+ 	// We also mark nodes before back pointers (F_LOOPNEXT), to ensure
+ 	// termination when we patch sequences and loops.
+ 	private int			flags;
+ 
+ 
+ 	// prevent a needless indirection between 'this' and 'node'
+ 	private void copyIn (ChildrenRecognizer node)
+ 	{
+ 	    // model & consumer are already set
+ 	    components = node.components;
+ 	    name = node.name;
+ 	    next = node.next;
+ 	    flags = node.flags;
+ 	}
+ 
+ 	// used to construct top level "children" content models,
+ 	public ChildrenRecognizer (ElementInfo type, ValidationConsumer vc)
+ 	{
+ 	    this (vc, type);
+ 	    populate (type.model.toCharArray (), 0);
+ 	    patchNext (new EmptyRecognizer (type), null);
+ 	}
+ 
+ 	// used internally; populating is separate
+ 	private ChildrenRecognizer (ValidationConsumer vc, ElementInfo type)
+ 	{
+ 	    super (type);
+ 	    consumer = vc;
+ 	}
+ 
+ 
+ 	//
+ 	// When rewriting some graph nodes we need deep clones in one case;
+ 	// mostly shallow clones (what the JVM handles for us) are fine.
+ 	//
+ 	private ChildrenRecognizer shallowClone ()
+ 	{
+ 	    try {
+ 		return (ChildrenRecognizer) clone ();
+ 	    } catch (CloneNotSupportedException e) {
+ 		throw new Error ("clone");
+ 	    }
+ 	}
+ 
+ 	private ChildrenRecognizer deepClone ()
+ 	{
+ 	    return deepClone (new Hashtable (37));
+ 	}
+ 
+ 	private ChildrenRecognizer deepClone (Hashtable table)
+ 	{
+ 	    ChildrenRecognizer retval;
+ 
+ 	    if ((flags & F_LOOPHEAD) != 0) {
+ 		retval = (ChildrenRecognizer) table.get (this);
+ 		if (retval != null)
+ 		    return this;
+ 
+ 		retval = shallowClone ();
+ 		table.put (this, retval);
+ 	    } else
+ 		retval = shallowClone ();
+ 
+ 	    if (next != null) {
+ 		if (next instanceof ChildrenRecognizer)
+ 		    retval.next = ((ChildrenRecognizer)next)
+ 			    .deepClone (table);
+ 		else if (!(next instanceof EmptyRecognizer))
+ 		    throw new RuntimeException ("deepClone");
+ 	    }
+ 
+ 	    if (components != null) {
+ 		retval.components = new Recognizer [components.length];
+ 		for (int i = 0; i < components.length; i++) {
+ 		    Recognizer temp = components [i];
+ 
+ 		    if (temp == null)
+ 			retval.components [i] = null;
+ 		    else if (temp instanceof ChildrenRecognizer)
+ 			retval.components [i] = ((ChildrenRecognizer)temp)
+ 				.deepClone (table);
+ 		    else if (!(temp instanceof EmptyRecognizer))
+ 			throw new RuntimeException ("deepClone");
+ 		}
+ 	    }
+ 
+ 	    return retval;
+ 	}
+ 
+ 	// connect subgraphs, first to next (sequencing)
+ 	private void patchNext (Recognizer theNext, Hashtable table)
+ 	{
+ 	    // backpointers must not be repatched or followed
+ 	    if ((flags & F_LOOPNEXT) != 0)
+ 		return;
+ 
+ 	    // XXX this table "shouldn't" be needed, right?
+ 	    // but some choice nodes looped if it isn't there.
+ 	    if (table != null && table.get (this) != null)
+ 		return;
+ 	    if (table == null)
+ 		table = new Hashtable ();
+ 
+ 	    // NAME/SEQUENCE
+ 	    if (name != null) {
+ 		if (next == null)
+ 		    next = theNext;
+ 		else if (next instanceof ChildrenRecognizer) {
+ 		    ((ChildrenRecognizer)next).patchNext (theNext, table);
+ 		} else if (!(next instanceof EmptyRecognizer))
+ 		    throw new RuntimeException ("patchNext");
+ 		return;
+ 	    }
+ 
+ 	    // CHOICE
+ 	    for (int i = 0; i < components.length; i++) {
+ 		if (components [i] == null)
+ 		    components [i] = theNext;
+ 		else if (components [i] instanceof ChildrenRecognizer) {
+ 		    ((ChildrenRecognizer)components [i])
+ 			    .patchNext (theNext, table);
+ 		} else if (!(components [i] instanceof EmptyRecognizer))
+ 		    throw new RuntimeException ("patchNext");
+ 	    }
+ 
+ 	    if (table != null && (flags & F_LOOPHEAD) != 0)
+ 		table.put (this, this);
+ 	}
+ 
+ 	/**
+ 	 * Parses a 'children' spec (or recursively 'cp') and makes this
+ 	 * become a regular graph node.
+ 	 *
+ 	 * @return index after this particle
+ 	 */
+ 	private int populate (char parseBuf [], int startPos)
+ 	{
+ 	    int		nextPos = startPos + 1;
+ 	    char	c;
+ 
+ 	    if (nextPos < 0 || nextPos >= parseBuf.length)
+ 		throw new IndexOutOfBoundsException ();
+ 
+ 	    // Grammar of the string is from the XML spec, but
+ 	    // with whitespace removed by the SAX parser.
+ 
+ 	    // children ::= (choice | seq) ('?' | '*' | '+')?
+ 	    // cp ::= (Name | choice | seq) ('?' | '*' | '+')?
+ 	    // choice ::= '(' cp ('|' choice)* ')'
+ 	    // seq ::= '(' cp (',' choice)* ')'
+ 
+ 	    // interior nodes only
+ 	    //   cp ::= name ...
+ 	    if (parseBuf [startPos] != '('/*)*/) {
+ 		boolean		done = false;
+ 		do {
+ 		    switch (c = parseBuf [nextPos]) {
+ 			case '?': case '*': case '+':
+ 			case '|': case ',':
+ 			case /*(*/ ')':
+ 			    done = true;
+ 			    continue;
+ 			default:
+ 			    nextPos++;
+ 			    continue;
+ 		    }
+ 		} while (!done);
+ 		name = new String (parseBuf, startPos, nextPos - startPos);
+ 
+ 	    // interior OR toplevel nodes
+ 	    //   cp ::= choice ..
+ 	    //   cp ::= seq ..
+ 	    } else {
+ 		// collect everything as a separate list, and merge it
+ 		// into "this" later if we can (SEQUENCE or singleton)
+ 		ChildrenRecognizer	first;
+ 	       
+ 		first = new ChildrenRecognizer (consumer, type);
+ 		nextPos = first.populate (parseBuf, nextPos);
+ 		c = parseBuf [nextPos++];
+ 
+ 		if (c == ',' || c == '|') {
+ 		    ChildrenRecognizer	current = first;
+ 		    char		separator = c;
+ 		    Vector		v = null;
+ 
+ 		    if (separator == '|') {
+ 			v = new Vector ();
+ 			v.addElement (first);
+ 		    }
+ 
+ 		    do {
+ 			ChildrenRecognizer link;
+ 
+ 			link = new ChildrenRecognizer (consumer, type);
+ 			nextPos = link.populate (parseBuf, nextPos);
+ 
+ 			if (separator == ',') {
+ 			    current.patchNext (link, null);
+ 			    current = link;
+ 			} else
+ 			    v.addElement (link);
+ 
+ 			c = parseBuf [nextPos++];
+ 		    } while (c == separator);
+ 
+ 		    // choice ... collect everything into one array.
+ 		    if (separator == '|') {
+ 			// assert v.size() > 1
+ 			components = new Recognizer [v.size ()];
+ 			for (int i = 0; i < components.length; i++) {
+ 			    components [i] = (Recognizer)
+ 				    v.elementAt (i);
+ 			}
+ 			// assert flags == 0
+ 
+ 		    // sequence ... merge into "this" to be smaller.
+ 		    } else
+ 			copyIn (first);
+ 
+ 		// treat singletons like one-node sequences.
+ 		} else
+ 		    copyIn (first);
+ 
+ 		if (c != /*(*/ ')')
+ 		    throw new RuntimeException ("corrupt content model");
+ 	    }
+ 
+ 	    //
+ 	    // Arity is optional, and the root of all fun.  We keep the
+ 	    // FSM state graph simple by only having NAME/SEQUENCE and
+ 	    // CHOICE nodes (or EMPTY to terminate a model), easily
+ 	    // evaluated.  So we rewrite each node that has arity, using
+ 	    // those primitives.  We create loops here, if needed.
+ 	    //
+ 	    if (nextPos < parseBuf.length) {
+ 		c = parseBuf [nextPos];
+ 		if (c == '?' || c == '*' || c == '+') {
+ 		    nextPos++;
+ 
+ 		    // Rewrite 'zero-or-one' "?" arity to a CHOICE:
+ 		    //   - SEQUENCE (clone, what's next)
+ 		    //   - or, what's next
+ 		    // Size cost: N --> N + 1
+ 		    if (c == '?') {
+ 			Recognizer		once = shallowClone ();
+ 
+ 			components = new Recognizer [2];
+ 			components [0] = once;
+ 			// components [1] initted to null
+ 			name = null;
+ 			next = null;
+ 			flags = 0;
+ 
+ 			    
+ 		    // Rewrite 'zero-or-more' "*" arity to a CHOICE.
+ 		    //   - LOOP (clone, back to this CHOICE)
+ 		    //   - or, what's next
+ 		    // Size cost: N --> N + 1
+ 		    } else if (c == '*') {
+ 			ChildrenRecognizer	loop = shallowClone ();
+ 
+ 			loop.patchNext (this, null);
+ 			loop.flags |= F_LOOPNEXT;
+ 			flags = F_LOOPHEAD;
+ 
+ 			components = new Recognizer [2];
+ 			components [0] = loop;
+ 			// components [1] initted to null
+ 			name = null;
+ 			next = null;
+ 
+ 
+ 		    // Rewrite 'one-or-more' "+" arity to a SEQUENCE.
+ 		    // Basically (a)+ --> ((a),(a)*).
+ 		    //   - this
+ 		    //   - CHOICE
+ 		    //	    * LOOP (clone, back to the CHOICE)
+ 		    //	    * or, whatever's next
+ 		    // Size cost: N --> 2N + 1
+ 		    } else if (c == '+') {
+ 			ChildrenRecognizer loop = deepClone ();
+ 			ChildrenRecognizer choice;
+ 
+ 			choice = new ChildrenRecognizer (consumer, type);
+ 			loop.patchNext (choice, null);
+ 			loop.flags |= F_LOOPNEXT;
+ 			choice.flags = F_LOOPHEAD;
+ 
+ 			choice.components = new Recognizer [2];
+ 			choice.components [0] = loop;
+ 			// choice.components [1] initted to null
+ 			// choice.name, choice.next initted to null
+ 
+ 			patchNext (choice, null);
+ 		    }
+ 		}
+ 	    }
+ 
+ 	    return nextPos;
+ 	}
+ 
+ 	// VC: Element Valid (second clause)
+ 	boolean acceptCharacters ()
+ 	    { return false; }
+ 
+ 	// VC: Element Valid (second clause)
+ 	Recognizer acceptElement (String type)
+ 	throws SAXException
+ 	{
+ 	    // NAME/SEQUENCE
+ 	    if (name != null) {
+ 		if (name.equals (type))
+ 		    return next;
+ 		return null;
+ 	    }
+ 
+ 	    // CHOICE ... optionally reporting nondeterminism we
+ 	    // run across.  we won't check out every transition
+ 	    // for nondeterminism; only the ones we follow.
+ 	    Recognizer	retval = null;
+ 
+ 	    for (int i = 0; i < components.length; i++) {
+ 		Recognizer temp = components [i].acceptElement (type);
+ 
+ 		if (temp == null)
+ 		    continue;
+ 		else if (!warnNonDeterministic)
+ 		    return temp;
+ 		else if (retval == null)
+ 		    retval = temp;
+ 		else if (retval != temp)
+ 		    consumer.error ("Content model " + this.type.model
+ 			+ " is non-deterministic for " + type);
+ 	    }
+ 	    return retval;
+ 	}
+ 
+ 	// VC: Element Valid (second clause)
+ 	boolean completed ()
+ 	throws SAXException
+ 	{
+ 	    // expecting a specific element
+ 	    if (name != null)
+ 		return false;
+ 	    
+ 	    // choice, some sequences
+ 	    for (int i = 0; i < components.length; i++) {
+ 		if (components [i].completed ())
+ 		    return true;
+ 	    }
+ 
+ 	    return false;
+ 	}
+ 
+ /** /
+ 	// FOR DEBUGGING ... flattens the graph for printing.
+ 
+ 	public String toString ()
+ 	{
+ 	    StringBuffer buf = new StringBuffer ();
+ 
+ 	    // only one set of loop labels can be generated
+ 	    // at a time...
+ 	    synchronized (ANY) {
+ 		nodeCount = 0;
+ 
+ 		toString (buf, new Hashtable ());
+ 		return buf.toString ();
+ 	    }
+ 	}
+ 
+ 	private void toString (StringBuffer buf, Hashtable table)
+ 	{
+ 	    // When we visit a node, label and count it.
+ 	    // Nodes are never visited/counted more than once.
+ 	    // For small models labels waste space, but if arity
+ 	    // mappings were used the savings are substantial.
+ 	    // (Plus, the output can be more readily understood.)
+ 	    String temp = (String) table.get (this);
+ 
+ 	    if (temp != null) {
+ 		buf.append ('{');
+ 		buf.append (temp);
+ 		buf.append ('}');
+ 		return;
+ 	    } else {
+ 		StringBuffer scratch = new StringBuffer (15);
+ 
+ 		if ((flags & F_LOOPHEAD) != 0)
+ 		    scratch.append ("loop");
+ 		else
+ 		    scratch.append ("node");
+ 		scratch.append ('-');
+ 		scratch.append (++nodeCount);
+ 		temp = scratch.toString ();
+ 
+ 		table.put (this, temp);
+ 		buf.append ('[');
+ 		buf.append (temp);
+ 		buf.append (']');
+ 		buf.append (':');
+ 	    }
+ 
+ 	    // NAME/SEQUENCE
+ 	    if (name != null) {
+ 		// n.b. some output encodings turn some name chars into '?'
+ 		// e.g. with Japanese names and ASCII output
+ 		buf.append (name);
+ 		if (components != null)		// bug!
+ 		    buf.append ('$');
+ 		if (next == null)
+ 		    buf.append (",*");
+ 		else if (next instanceof EmptyRecognizer) // patch-to-next
+ 		    buf.append (",{}");
+ 		else if (next instanceof ChildrenRecognizer) {
+ 		    buf.append (',');
+ 		    ((ChildrenRecognizer)next).toString (buf, table);
+ 		} else				// bug!
+ 		    buf.append (",+");
+ 		return;
+ 	    }
+ 
+ 	    // CHOICE
+ 	    buf.append ("<");
+ 	    for (int i = 0; i < components.length; i++) {
+ 		if (i != 0)
+ 		    buf.append ("|");
+ 		if (components [i] instanceof EmptyRecognizer) {
+ 		    buf.append ("{}");
+ 		} else if (components [i] == null) {	// patch-to-next
+ 		    buf.append ('*');
+ 		} else {
+ 		    ChildrenRecognizer r;
+ 
+ 		    r = (ChildrenRecognizer) components [i];
+ 		    r.toString (buf, table);
+ 		}
+ 	    }
+ 	    buf.append (">");
+ 	}
+ /**/
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/WellFormednessFilter.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/WellFormednessFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/WellFormednessFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/WellFormednessFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,363 ----
+ /* WellFormednessFilter.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.util.EmptyStackException;
+ import java.util.Stack;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ 
+ /**
+  * This filter reports fatal exceptions in the case of event streams that
+  * are not well formed.  The rules currently tested include: <ul>
+  *
+  *	<li>setDocumentLocator ... may be called only before startDocument
+  *
+  *	<li>startDocument/endDocument ... must be paired, and all other
+  *	calls (except setDocumentLocator) must be nested within these.
+  *
+  *	<li>startElement/endElement ... must be correctly paired, and
+  *	may never appear within CDATA sections.
+  *
+  *	<li>comment ... can't contain "--"
+  *
+  *	<li>character data ... can't contain "]]&gt;"
+  *
+  *	<li>whitespace ... can't contain CR
+  *
+  *	<li>whitespace and character data must be within an element
+  *
+  *	<li>processing instruction ... can't contain "?&gt;" or CR
+  *
+  *	<li>startCDATA/endCDATA ... must be correctly paired.
+  *
+  *	</ul>
+  *
+  * <p> Other checks for event stream correctness may be provided in
+  * the future.  For example, insisting that
+  * entity boundaries nest correctly,
+  * namespace scopes nest correctly,
+  * namespace values never contain relative URIs,
+  * attributes don't have "&lt;" characters;
+  * and more.
+  *
+  * @author David Brownell
+  */
+ public final class WellFormednessFilter extends EventFilter
+ {
+     private boolean		startedDoc;
+     private Stack		elementStack = new Stack ();
+     private boolean		startedCDATA;
+     private String		dtdState = "before";
+ 
+     
+     /**
+      * Swallows all events after performing well formedness checks.
+      */
+ 	// constructor used by PipelineFactory
+     public WellFormednessFilter ()
+ 	{ this (null); }
+ 
+ 
+     /**
+      * Passes events through to the specified consumer, after first
+      * processing them.
+      */
+ 	// constructor used by PipelineFactory
+     public WellFormednessFilter (EventConsumer consumer)
+     {
+ 	super (consumer);
+ 
+ 	setContentHandler (this);
+ 	setDTDHandler (this);
+ 	
+ 	try {
+ 	    setProperty (LEXICAL_HANDLER, this);
+ 	} catch (SAXException e) { /* can't happen */ }
+     }
+ 
+     /**
+      * Resets state as if any preceding event stream was well formed.
+      * Particularly useful if it ended through some sort of error,
+      * and the endDocument call wasn't made.
+      */
+     public void reset ()
+     {
+ 	startedDoc = false;
+ 	startedCDATA = false;
+ 	elementStack.removeAllElements ();
+     }
+ 
+ 
+     private SAXParseException getException (String message)
+     {
+ 	SAXParseException	e;
+ 	Locator			locator = getDocumentLocator ();
+ 
+ 	if (locator == null)
+ 	    return new SAXParseException (message, null, null, -1, -1);
+ 	else
+ 	    return new SAXParseException (message, locator);
+     }
+ 
+     private void fatalError (String message)
+     throws SAXException
+     {
+ 	SAXParseException	e = getException (message);
+ 	ErrorHandler		handler = getErrorHandler ();
+ 
+ 	if (handler != null)
+ 	    handler.fatalError (e);
+ 	throw e;
+     }
+ 
+     /**
+      * Throws an exception when called after startDocument.
+      *
+      * @param locator the locator, to be used in error reporting or relative
+      *	URI resolution.
+      *
+      * @exception IllegalStateException when called after the document
+      *	has already been started
+      */
+     public void setDocumentLocator (Locator locator)
+     {
+ 	if (startedDoc)
+ 	    throw new IllegalStateException (
+ 		    "setDocumentLocator called after startDocument");
+ 	super.setDocumentLocator (locator);
+     }
+ 
+     public void startDocument () throws SAXException
+     {
+ 	if (startedDoc)
+ 	    fatalError ("startDocument called more than once");
+ 	startedDoc = true;
+ 	startedCDATA = false;
+ 	elementStack.removeAllElements ();
+ 	super.startDocument ();
+     }
+ 
+     public void startElement (
+ 	String uri, String localName,
+ 	String qName, Attributes atts
+     ) throws SAXException
+     {
+ 	if (!startedDoc)
+ 	    fatalError ("callback outside of document?");
+ 	if ("inside".equals (dtdState))
+ 	    fatalError ("element inside DTD?");
+ 	else
+ 	    dtdState = "after";
+ 	if (startedCDATA)
+ 	    fatalError ("element inside CDATA section");
+ 	if (qName == null || "".equals (qName))
+ 	    fatalError ("startElement name missing");
+ 	elementStack.push (qName);
+ 	super.startElement (uri, localName, qName, atts);
+     }
+ 
+     public void endElement (String uri, String localName, String qName)
+     throws SAXException
+     {
+ 	if (!startedDoc)
+ 	    fatalError ("callback outside of document?");
+ 	if (startedCDATA)
+ 	    fatalError ("element inside CDATA section");
+ 	if (qName == null || "".equals (qName))
+ 	    fatalError ("endElement name missing");
+ 	
+ 	try {
+ 	    String	top = (String) elementStack.pop ();
+ 
+ 	    if (!qName.equals (top))
+ 		fatalError ("<" + top + " ...>...</" + qName + ">");
+ 	    // XXX could record/test namespace info
+ 	} catch (EmptyStackException e) {
+ 	    fatalError ("endElement without startElement:  </" + qName + ">");
+ 	}
+ 	super.endElement (uri, localName, qName);
+     }
+ 
+     public void endDocument () throws SAXException
+     {
+ 	if (!startedDoc)
+ 	    fatalError ("callback outside of document?");
+ 	dtdState = "before";
+ 	startedDoc = false;
+ 	super.endDocument ();
+     }
+ 
+ 
+     public void startDTD (String root, String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (!startedDoc)
+ 	    fatalError ("callback outside of document?");
+     if ("before" != dtdState)
+ 	    fatalError ("two DTDs?");
+ 	if (!elementStack.empty ())
+ 	    fatalError ("DTD must precede root element");
+ 	dtdState = "inside";
+ 	super.startDTD (root, publicId, systemId);
+     }
+ 
+     public void notationDecl (String name, String publicId, String systemId)
+     throws SAXException
+     {
+ // FIXME: not all parsers will report startDTD() ...
+ // we'd rather insist we're "inside".
+     if ("after" == dtdState)
+ 	    fatalError ("not inside DTD");
+ 	super.notationDecl (name, publicId, systemId);
+     }
+ 
+     public void unparsedEntityDecl (String name,
+     	String publicId, String systemId, String notationName)
+     throws SAXException
+     {
+ // FIXME: not all parsers will report startDTD() ...
+ // we'd rather insist we're "inside".
+     if ("after" == dtdState)
+ 	    fatalError ("not inside DTD");
+ 	super.unparsedEntityDecl (name, publicId, systemId, notationName);
+     }
+ 
+     // FIXME:  add the four DeclHandler calls too
+ 
+     public void endDTD ()
+     throws SAXException
+     {
+ 	if (!startedDoc)
+ 	    fatalError ("callback outside of document?");
+ 	if ("inside" != dtdState)
+ 	    fatalError ("DTD ends without start?");
+ 	dtdState = "after";
+ 	super.endDTD ();
+     }
+ 
+     public void characters (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	int here = start, end = start + length;
+ 	if (elementStack.empty ())
+ 	    fatalError ("characters must be in an element");
+ 	while (here < end) {
+ 	    if (ch [here++] != ']')
+ 		continue;
+ 	    if (here == end)	// potential problem ...
+ 		continue;
+ 	    if (ch [here++] != ']')
+ 		continue;
+ 	    if (here == end)	// potential problem ...
+ 		continue;
+ 	    if (ch [here++] == '>')
+ 		fatalError ("character data can't contain \"]]>\"");
+ 	}
+ 	super.characters (ch, start, length);
+     }
+ 
+     public void ignorableWhitespace (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	int here = start, end = start + length;
+ 	if (elementStack.empty ())
+ 	    fatalError ("characters must be in an element");
+ 	while (here < end) {
+ 	    if (ch [here++] == '\r')
+ 		fatalError ("whitespace can't contain CR");
+ 	}
+ 	super.ignorableWhitespace (ch, start, length);
+     }
+ 
+     public void processingInstruction (String target, String data)
+     throws SAXException
+     {
+ 	if (data.indexOf ('\r') > 0)
+ 	    fatalError ("PIs can't contain CR");
+ 	if (data.indexOf ("?>") > 0)
+ 	    fatalError ("PIs can't contain \"?>\"");
+     }
+ 
+     public void comment (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (!startedDoc)
+ 	    fatalError ("callback outside of document?");
+ 	if (startedCDATA)
+ 	    fatalError ("comments can't nest in CDATA");
+ 	int here = start, end = start + length;
+ 	while (here < end) {
+ 	    if (ch [here] == '\r')
+ 		fatalError ("comments can't contain CR");
+ 	    if (ch [here++] != '-')
+ 		continue;
+ 	    if (here == end)
+ 		fatalError ("comments can't end with \"--->\"");
+ 	    if (ch [here++] == '-')
+ 		fatalError ("comments can't contain \"--\"");
+ 	}
+ 	super.comment (ch, start, length);
+     }
+ 
+     public void startCDATA ()
+     throws SAXException
+     {
+ 	if (!startedDoc)
+ 	    fatalError ("callback outside of document?");
+ 	if (startedCDATA)
+ 	    fatalError ("CDATA starts can't nest");
+ 	startedCDATA = true;
+ 	super.startCDATA ();
+     }
+ 
+     public void endCDATA ()
+     throws SAXException
+     {
+ 	if (!startedDoc)
+ 	    fatalError ("callback outside of document?");
+ 	if (!startedCDATA)
+ 	    fatalError ("CDATA end without start?");
+ 	startedCDATA = false;
+ 	super.endCDATA ();
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/XIncludeFilter.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/XIncludeFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/XIncludeFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/XIncludeFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,579 ----
+ /* XIncludeFilter.java -- 
+    Copyright (C) 2001,2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.net.URL; 
+ import java.net.URLConnection; 
+ import java.util.Hashtable;
+ import java.util.Stack;
+ import java.util.Vector;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.helpers.XMLReaderFactory;
+ 
+ import gnu.xml.util.Resolver;
+ 
+ 
+ 
+ /**
+  * Filter to process an XPointer-free subset of
+  * <a href="http://www.w3.org/TR/xinclude">XInclude</a>, supporting its
+  * use as a kind of replacement for parsed general entities.
+  * XInclude works much like the <code>#include</code> of C/C++ but
+  * works for XML documents as well as unparsed text files.
+  * Restrictions from the 17-Sept-2002 CR draft of XInclude are as follows:
+  *
+  * <ul>
+  *
+  * <li> URIs must not include fragment identifiers.
+  * The CR specifies support for XPointer <em>element()</em> fragment IDs,
+  * which is not currently implemented here.
+  *
+  * <li> <em>xi:fallback</em> handling of resource errors is not
+  * currently supported.
+  *
+  * <li> DTDs are not supported in included files, since the SAX DTD events
+  * must have completely preceded any included file. 
+  * The CR explicitly allows the DTD related portions of the infoset to
+  * grow as an effect of including XML documents.
+  *
+  * <li> <em>xml:base</em> fixup isn't done.
+  *
+  * </ul>
+  *
+  * <p> XML documents that are included will normally be processed using
+  * the default SAX namespace rules, meaning that prefix information may
+  * be discarded.  This may be changed with {@link #setSavingPrefixes
+  * setSavingPrefixes()}.  <em>You are strongly advised to do this.</em>
+  *
+  * <p> Note that XInclude allows highly incompatible implementations, which
+  * are specialized to handle application-specific infoset extensions.  Some
+  * such implementations can be implemented by subclassing this one, but
+  * they may only be substituted in applications at "user option".
+  *
+  * <p>TBD: "IURI" handling.
+  *
+  * @author David Brownell
+  */
+ public class XIncludeFilter extends EventFilter implements Locator
+ {
+     private Hashtable		extEntities = new Hashtable (5, 5);
+     private int			ignoreCount;
+     private Stack		uris = new Stack ();
+     private Locator		locator;
+     private Vector		inclusions = new Vector (5, 5);
+     private boolean		savingPrefixes;
+ 
+     /**
+      */
+     public XIncludeFilter (EventConsumer next)
+     throws SAXException
+     {
+ 	super (next);
+ 	setContentHandler (this);
+ 	// DTDHandler callbacks pass straight through
+ 	setProperty (DECL_HANDLER, this);
+ 	setProperty (LEXICAL_HANDLER, this);
+     }
+ 
+     private void fatal (SAXParseException e) throws SAXException
+     {
+ 	ErrorHandler		eh;
+ 	
+ 	eh = getErrorHandler ();
+ 	if (eh != null)
+ 	    eh.fatalError (e);
+ 	throw e;
+     }
+ 
+     /**
+      * Passes "this" down the filter chain as a proxy locator.
+      */
+     public void setDocumentLocator (Locator locator)
+     {
+ 	this.locator = locator;
+ 	super.setDocumentLocator (this);
+     }
+ 
+     /** Used for proxy locator; do not call directly. */
+     public String getSystemId ()
+ 	{ return (locator == null) ? null : locator.getSystemId (); }
+     /** Used for proxy locator; do not call directly. */
+     public String getPublicId ()
+ 	{ return (locator == null) ? null : locator.getPublicId (); }
+     /** Used for proxy locator; do not call directly. */
+     public int getLineNumber ()
+ 	{ return (locator == null) ? -1 : locator.getLineNumber (); }
+     /** Used for proxy locator; do not call directly. */
+     public int getColumnNumber ()
+ 	{ return (locator == null) ? -1 : locator.getColumnNumber (); }
+ 
+     /**
+      * Assigns the flag controlling the setting of the SAX2
+      * <em>namespace-prefixes</em> flag.
+      */
+     public void setSavingPrefixes (boolean flag)
+ 	{ savingPrefixes = flag; }
+ 
+     /**
+      * Returns the flag controlling the setting of the SAX2
+      * <em>namespace-prefixes</em> flag when parsing included documents.
+      * The default value is the SAX2 default (false), which discards
+      * information that can be useful.
+      */
+     public boolean isSavingPrefixes ()
+ 	{ return savingPrefixes; }
+ 
+     //
+     // Two mechanisms are interacting here.
+     // 
+     //	- XML Base implies a stack of base URIs, updated both by
+     //	  "real entity" boundaries and element boundaries.
+     //
+     //	- Active "Real Entities" (for document and general entities,
+     //	  and by xincluded files) are tracked to prevent circular
+     //	  inclusions.
+     //
+     private String addMarker (String uri)
+     throws SAXException
+     {
+ 	if (locator != null && locator.getSystemId () != null)
+ 	    uri = locator.getSystemId ();
+ 
+ 	// guard against InputSource objects without system IDs
+ 	if (uri == null)
+ 	    fatal (new SAXParseException ("Entity URI is unknown", locator));
+ 
+ 	try {
+ 	    URL	url = new URL (uri);
+ 
+ 	    uri = url.toString ();
+ 	    if (inclusions.contains (uri))
+ 		fatal (new SAXParseException (
+ 			"XInclude, circular inclusion", locator));
+ 	    inclusions.addElement (uri);
+ 	    uris.push (url);
+ 	} catch (IOException e) {
+ 	    // guard against illegal relative URIs (Xerces)
+ 	    fatal (new SAXParseException ("parser bug: relative URI",
+ 		locator, e));
+ 	}
+ 	return uri;
+     }
+ 
+     private void pop (String uri)
+     {
+ 	inclusions.removeElement (uri);
+ 	uris.pop ();
+     }
+ 
+     //
+     // Document entity boundaries get both treatments.
+     //
+     public void startDocument () throws SAXException
+     {
+ 	ignoreCount = 0;
+ 	addMarker (null);
+ 	super.startDocument ();
+     }
+ 
+     public void endDocument () throws SAXException
+     {
+ 	inclusions.setSize (0);
+ 	extEntities.clear ();
+ 	uris.setSize (0);
+ 	super.endDocument ();
+     }
+ 
+     //
+     // External general entity boundaries get both treatments.
+     //
+     public void externalEntityDecl (String name,
+     	String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (name.charAt (0) == '%')
+ 	    return;
+ 	try {
+ 	    URL	url = new URL (locator.getSystemId ());
+ 	    systemId = new URL (url, systemId).toString ();
+ 	} catch (IOException e) {
+ 	    // what could we do?
+ 	}
+ 	extEntities.put (name, systemId);
+     }
+ 
+     public void startEntity (String name)
+     throws SAXException
+     {
+ 	if (ignoreCount != 0) {
+ 	    ignoreCount++;
+ 	    return;
+ 	}
+ 
+ 	String	uri = (String) extEntities.get (name);
+ 	if (uri != null)
+ 	    addMarker (uri);
+ 	super.startEntity (name);
+     }
+ 
+     public void endEntity (String name)
+     throws SAXException
+     {
+ 	if (ignoreCount != 0) {
+ 	    if (--ignoreCount != 0)
+ 		return;
+ 	}
+ 
+ 	String	uri = (String) extEntities.get (name);
+ 
+ 	if (uri != null)
+ 	    pop (uri);
+ 	super.endEntity (name);
+     }
+     
+     //
+     // element boundaries only affect the base URI stack,
+     // unless they're XInclude elements.
+     //
+     public void
+     startElement (String uri, String localName, String qName, Attributes atts)
+     throws SAXException
+     {
+ 	if (ignoreCount != 0) {
+ 	    ignoreCount++;
+ 	    return;
+ 	}
+ 
+ 	URL	baseURI = (URL) uris.peek ();
+ 	String	base;
+ 
+ 	base = atts.getValue ("http://www.w3.org/XML/1998/namespace", "base");
+ 	if (base == null)
+ 	    uris.push (baseURI);
+ 	else {
+ 	    URL		url;
+ 
+ 	    if (base.indexOf ('#') != -1)
+ 		fatal (new SAXParseException (
+ 		    "xml:base with fragment: " + base,
+ 		    locator));
+ 
+ 	    try {
+ 		baseURI = new URL (baseURI, base);
+ 		uris.push (baseURI);
+ 	    } catch (Exception e) {
+ 		fatal (new SAXParseException (
+ 		    "xml:base with illegal uri: " + base,
+ 		    locator, e));
+ 	    }
+ 	}
+ 
+ 	if (!"http://www.w3.org/2001/XInclude".equals (uri)) {
+ 	    super.startElement (uri, localName, qName, atts);
+ 	    return;
+ 	}
+ 
+ 	if ("include".equals (localName)) {
+ 	    String	href = atts.getValue ("href");
+ 	    String	parse = atts.getValue ("parse");
+ 	    String	encoding = atts.getValue ("encoding");
+ 	    URL		url = (URL) uris.peek ();
+ 	    SAXParseException	x = null;
+ 
+ 	    if (href == null)
+ 		fatal (new SAXParseException (
+ 		    "XInclude missing href",
+ 		    locator));
+ 	    if (href.indexOf ('#') != -1)
+ 		fatal (new SAXParseException (
+ 		    "XInclude with fragment: " + href,
+ 		    locator));
+ 
+ 	    if (parse == null || "xml".equals (parse))
+ 		x = xinclude (url, href);
+ 	    else if ("text".equals (parse))
+ 		x = readText (url, href, encoding);
+ 	    else
+ 		fatal (new SAXParseException (
+ 		    "unknown XInclude parsing mode: " + parse,
+ 		    locator));
+ 	    if (x == null) {
+ 		// strip out all child content
+ 		ignoreCount++;
+ 		return;
+ 	    }
+ 
+ 	    // FIXME the 17-Sept-2002 CR of XInclude says we "must"
+ 	    // use xi:fallback elements to handle resource errors,
+ 	    // if they exist.
+ 	    fatal (x);
+ 
+ 	} else if ("fallback".equals (localName)) {
+ 	    fatal (new SAXParseException (
+ 		"illegal top level XInclude 'fallback' element",
+ 		locator));
+ 	} else {
+ 	    ErrorHandler	eh = getErrorHandler ();
+ 
+ 	    // CR doesn't say this is an error
+ 	    if (eh != null)
+ 		eh.warning (new SAXParseException (
+ 		    "unrecognized toplevel XInclude element: " + localName,
+ 		    locator));
+ 	    super.startElement (uri, localName, qName, atts);
+ 	}
+     }
+ 
+     public void endElement (String uri, String localName, String qName)
+     throws SAXException
+     {
+ 	if (ignoreCount != 0) {
+ 	    if (--ignoreCount != 0)
+ 		return;
+ 	}
+ 
+ 	uris.pop ();
+ 	if (!("http://www.w3.org/2001/XInclude".equals (uri)
+ 		&& "include".equals (localName)))
+ 	    super.endElement (uri, localName, qName);
+     }
+ 
+     //
+     // ignore all content within non-empty xi:include elements
+     //
+     public void characters (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (ignoreCount == 0)
+ 	    super.characters (ch, start, length);
+     }
+ 
+     public void processingInstruction (String target, String value)
+     throws SAXException
+     {
+ 	if (ignoreCount == 0)
+ 	    super.processingInstruction (target, value);
+     }
+ 
+     public void ignorableWhitespace (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (ignoreCount == 0)
+ 	    super.ignorableWhitespace (ch, start, length);
+     }
+ 
+     public void comment (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (ignoreCount == 0)
+ 	    super.comment (ch, start, length);
+     }
+ 
+     public void startCDATA () throws SAXException
+     {
+ 	if (ignoreCount == 0)
+ 	    super.startCDATA ();
+     }
+ 
+     public void endCDATA () throws SAXException
+     {
+ 	if (ignoreCount == 0)
+ 	    super.endCDATA ();
+     }
+ 
+     public void startPrefixMapping (String prefix, String uri)
+     throws SAXException
+     {
+ 	if (ignoreCount == 0)
+ 	    super.startPrefixMapping (prefix, uri);
+     }
+ 
+     public void endPrefixMapping (String prefix) throws SAXException
+     {
+ 	if (ignoreCount == 0)
+ 	    super.endPrefixMapping (prefix);
+     }
+ 
+     public void skippedEntity (String name) throws SAXException
+     {
+ 	if (ignoreCount == 0)
+ 	    super.skippedEntity (name);
+     }
+ 
+     // JDK 1.1 seems to need it to be done this way, sigh
+     void setLocator (Locator l) { locator = l; }
+     Locator getLocator () { return locator; }
+     
+ 
+     //
+     // for XIncluded entities, manage the current locator and
+     // filter out events that would be incorrect to report
+     //
+     private class Scrubber extends EventFilter
+     {
+ 	Scrubber (EventFilter f)
+ 	throws SAXException
+ 	{
+ 	    // delegation passes to next in chain
+ 	    super (f);
+ 
+ 	    // process all content events
+ 	    super.setContentHandler (this);
+ 	    super.setProperty (LEXICAL_HANDLER, this);
+ 
+ 	    // drop all DTD events
+ 	    super.setDTDHandler (null);
+ 	    super.setProperty (DECL_HANDLER, null);
+ 	}
+ 
+ 	// maintain proxy locator
+ 	// only one startDocument()/endDocument() pair per event stream
+ 	public void setDocumentLocator (Locator l)
+ 	    { setLocator (l); }
+ 	public void startDocument ()
+ 	    { }
+ 	public void endDocument ()
+ 	    { }
+ 	
+ 	private void reject (String message) throws SAXException
+ 	    { fatal (new SAXParseException (message, getLocator ())); }
+ 	
+ 	// only the DTD from the "base document" gets reported
+ 	public void startDTD (String root, String publicId, String systemId)
+ 	throws SAXException
+ 	    { reject ("XIncluded DTD: " + systemId); }
+ 	public void endDTD ()
+ 	throws SAXException
+ 	    { reject ("XIncluded DTD"); }
+ 	// ... so this should never happen
+ 	public void skippedEntity (String name) throws SAXException
+ 	    { reject ("XInclude skipped entity: " + name); }
+ 
+ 	// since we rejected DTDs, only builtin entities can be reported
+     }
+ 
+     // <xi:include parse='xml' ...>
+     // relative to the base URI passed
+     private SAXParseException xinclude (URL url, String href)
+     throws SAXException
+     {
+ 	XMLReader	helper;
+ 	Scrubber	scrubber;
+ 	Locator		savedLocator = locator;
+ 
+ 	// start with a parser acting just like our input
+ 	// modulo DTD-ish stuff (validation flag, entity resolver)
+ 	helper = XMLReaderFactory.createXMLReader ();
+ 	helper.setErrorHandler (getErrorHandler ());
+ 	helper.setFeature (FEATURE_URI + "namespace-prefixes", true);
+ 
+ 	// Set up the proxy locator and event filter.
+ 	scrubber = new Scrubber (this);
+ 	locator = null;
+ 	bind (helper, scrubber);
+ 
+ 	// Merge the included document, except its DTD
+ 	try {
+ 	    url = new URL (url, href);
+ 	    href = url.toString ();
+ 
+ 	    if (inclusions.contains (href))
+ 		fatal (new SAXParseException (
+ 			"XInclude, circular inclusion", locator));
+ 
+ 	    inclusions.addElement (href);
+ 	    uris.push (url);
+ 	    helper.parse (new InputSource (href));
+ 	    return null;
+ 	} catch (java.io.IOException e) {
+ 	    return new SAXParseException (href, locator, e);
+ 	} finally {
+ 	    pop (href);
+ 	    locator = savedLocator;
+ 	}
+     }
+ 
+     // <xi:include parse='text' ...>
+     // relative to the base URI passed
+     private SAXParseException readText (URL url, String href, String encoding)
+     throws SAXException
+     {
+ 	InputStream	in = null;
+ 
+ 	try {
+ 	    URLConnection	conn;
+ 	    InputStreamReader	reader;
+ 	    char		buf [] = new char [4096];
+ 	    int			count;
+ 
+ 	    url = new URL (url, href);
+ 	    conn = url.openConnection ();
+ 	    in = conn.getInputStream ();
+ 	    if (encoding == null)
+ 		encoding = Resolver.getEncoding (conn.getContentType ());
+ 	    if (encoding == null) {
+ 		ErrorHandler	eh = getErrorHandler ();
+ 		if (eh != null)
+ 		    eh.warning (new SAXParseException (
+ 			"guessing text encoding for URL: " + url,
+ 			locator));
+ 		reader = new InputStreamReader (in);
+ 	    } else
+ 		reader = new InputStreamReader (in, encoding);
+ 
+ 	    while ((count = reader.read (buf, 0, buf.length)) != -1)
+ 		super.characters (buf, 0, count);
+ 	    in.close ();
+ 	    return null;
+ 	} catch (IOException e) {
+ 	    return new SAXParseException (
+ 		"can't XInclude text",
+ 		locator, e);
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/XsltFilter.java gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/XsltFilter.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/XsltFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/XsltFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,130 ----
+ /* XsltFilter.java -- 
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.pipeline;
+ 
+ import java.io.IOException;
+ 
+ import javax.xml.transform.TransformerFactory;
+ import javax.xml.transform.TransformerConfigurationException;
+ import javax.xml.transform.sax.*;
+ import javax.xml.transform.stream.StreamSource;
+ 
+ import org.xml.sax.SAXException;
+ import org.xml.sax.ext.LexicalHandler;
+ 
+ 
+ /**
+  * Packages an XSLT transform as a pipeline component. 
+  * Note that all DTD events (callbacks to DeclHandler and DTDHandler 
+  * interfaces) are discarded, although XSLT transforms may be set up to
+  * use the LexicalHandler to write DTDs with only an external subset.
+  * Not every XSLT engine will necessarily be usable with this filter,
+  * but current versions of
+  * <a href="http://saxon.sourceforge.net">SAXON</a> and
+  * <a href="http://xml.apache.org/xalan-j">Xalan</a> should work well.
+  *
+  * @see TransformerFactory
+  *
+  * @author David Brownell
+  */
+ final public class XsltFilter extends EventFilter
+ {
+     /**
+      * Creates a filter that performs the specified transform.
+      * Uses the JAXP 1.1 interfaces to access the default XSLT
+      * engine configured for in the current execution context,
+      * and parses the stylesheet without custom EntityResolver
+      * or ErrorHandler support.
+      *
+      * @param stylesheet URI for the stylesheet specifying the
+      *	XSLT transform
+      * @param next provides the ContentHandler and LexicalHandler
+      *	to receive XSLT output.
+      * @exception SAXException if the stylesheet can't be parsed
+      * @exception IOException if there are difficulties
+      *	bootstrapping the XSLT engine, such as it not supporting
+      *	SAX well enough to use this way.
+      */
+     public XsltFilter (String stylesheet, EventConsumer next)
+     throws SAXException, IOException
+     {
+ 	// First, get a transformer with the stylesheet preloaded
+ 	TransformerFactory	tf = null;
+ 	TransformerHandler	th;
+ 
+ 	try {
+ 	    SAXTransformerFactory	stf;
+ 
+ 	    tf = TransformerFactory.newInstance ();
+ 	    if (!tf.getFeature (SAXTransformerFactory.FEATURE)	// sax inputs
+ 		    || !tf.getFeature (SAXResult.FEATURE)	// sax outputs
+ 		    || !tf.getFeature (StreamSource.FEATURE)	// stylesheet
+ 		    )
+ 		throw new IOException ("XSLT factory ("
+ 		    + tf.getClass ().getName ()
+ 		    + ") does not support SAX");
+ 	    stf = (SAXTransformerFactory) tf;
+ 	    th = stf.newTransformerHandler (new StreamSource (stylesheet));
+ 	} catch (TransformerConfigurationException e) {
+ 	    throw new IOException ("XSLT factory ("
+ 		+ (tf == null
+ 			? "none available"
+ 			: tf.getClass ().getName ())
+ 		+ ") configuration error, "
+ 		+ e.getMessage ()
+ 		);
+ 	}
+ 
+ 	// Hook its outputs up to the pipeline ...
+ 	SAXResult		out = new SAXResult ();
+ 
+ 	out.setHandler (next.getContentHandler ());
+ 	try {
+ 	    LexicalHandler	lh;
+ 	    lh = (LexicalHandler) next.getProperty (LEXICAL_HANDLER);
+ 	    out.setLexicalHandler (lh);
+ 	} catch (Exception e) {
+ 	    // ignore
+ 	}
+ 	th.setResult (out);
+ 
+ 	// ... and make sure its inputs look like ours.
+ 	setContentHandler (th);
+ 	setProperty (LEXICAL_HANDLER, th);
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/package.html gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/package.html
*** gcc-4.0.2/libjava/classpath/gnu/xml/pipeline/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/pipeline/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,255 ----
+ <html><head><title>
+ blah
+ <!--
+ /*
+  * Copyright (C) 1999-2001 The Free Software Foundation, Inc.
+  */
+ -->
+ </title></head><body>
+ 
+ <p>This package exposes a kind of XML processing pipeline, based on sending
+ SAX events, which can be used as components of application architectures.
+ Pipelines are used to convey streams of processing events from a producer
+ to one or more consumers, and to let each consumer control the data seen by
+ later consumers.
+ 
+ <p> There is a <a href="PipelineFactory.html">PipelineFactory</a> class which
+ accepts a syntax describing how to construct some simple pipelines.  Strings
+ describing such pipelines can be used in command line tools (see the
+ <a href="../util/DoParse.html">DoParse</a> class)
+ and in other places that it is
+ useful to let processing be easily reconfigured.  Pipelines can of course
+ be constructed programmatically, providing access to options that the
+ factory won't.
+ 
+ <p> Web applications are supported by making it easy for servlets (or
+ non-Java web application components) to be part of a pipeline.  They can
+ originate XML (or XHTML) data through an <em>InputSource</em> or in
+ response to XML messages sent from clients using <em>CallFilter</em>
+ pipeline stages.  Such facilities are available using the simple syntax
+ for pipeline construction.
+ 
+ 
+ <h2> Programming Models </h2>
+ 
+ <p> Pipelines should be simple to understand.
+ 
+ <ul>
+     <li> XML content, typically entire documents,
+     is pushed through consumers by producers.
+ 
+     <li> Pipelines are basically about consuming SAX2 callback events,
+     where the events encapsulate XML infoset-level data.<ul>
+ 
+ 	<li> Pipelines are constructed by taking one or more consumer
+ 	stages and combining them to produce a composite consumer.
+ 
+ 	<li> A pipeline is presumed to have pending tasks and state from
+ 	the beginning of its ContentHandler.startDocument() callback until
+ 	it's returned from its ContentHandler.doneDocument() callback.
+ 
+ 	<li> Pipelines may have multiple output stages ("fan-out")
+ 	or multiple input stages ("fan-in") when appropriate.
+ 
+ 	<li> Pipelines may be long-lived, but need not be.
+ 
+ 	</ul>
+ 
+     <li> There is flexibility about event production. <ul>
+ 
+ 	<li> SAX2 XMLReader objects are producers, which
+ 	provide a high level "pull" model: documents (text or DOM) are parsed,
+ 	and the parser pushes individual events through the pipeline.
+ 
+ 	<li> Events can be pushed directly to event consumer components
+ 	by application modules, if they invoke SAX2 callbacks directly.
+ 	That is, application modules use the XML Infoset as exposed
+ 	through SAX2 event callbacks.
+ 
+ 	</ul>
+     
+     <li> Multiple producer threads may concurrently access a pipeline,
+     if they coordinate appropriately.
+ 
+     <li> Pipeline processing is not the only framework applications
+     will use.
+ 
+     </ul>
+ 
+ 
+ <h3> Producers: XMLReader or Custom </h3>
+ 
+ <p> Many producers will be SAX2 XMLReader objects, and
+ will read (pull) data which is then written (pushed) as events.
+ Typically these will parse XML text (acquired from
+ <code>org.xml.sax.helpers.XMLReaderFactory</code>) or a DOM tree
+ (using a <code><a href="../util/DomParser.html">DomParser</a></code>)
+ These may be bound to event consumer using a convenience routine,
+ <em><a href="EventFilter.html">EventFilter</a>.bind()</em>.
+ Once bound, these producers may be given additional documents to
+ sent through its pipeline.
+ 
+ <p> In other cases, you will write producers yourself.  For example, some
+ data structures might know how to write themselves out using one or
+ more XML models, expressed as sequences of SAX2 event callbacks.
+ An application module might
+ itself be a producer, issuing startDocument and endDocument events
+ and then asking those data structures to write themselves out to a
+ given EventConsumer, or walking data structures (such as JDBC query
+ results) and applying its own conversion rules.  WAP format XML
+ (WBMXL) can be directly converted to producer output.
+ 
+ <p> SAX2 introduced an "XMLFilter" interface, which is a kind of XMLReader.
+ It is most useful in conjunction with its XMLFilterImpl helper class;
+ see the <em><a href="EventFilter.html">EventFilter</a></em> javadoc
+ for information contrasting that XMLFilterImpl approach with the
+ relevant parts of this pipeline framework.  Briefly, such XMLFilterImpl
+ children can be either producers or consumers, and are more limited in
+ configuration flexibility.  In this framework, the focus of filters is
+ on the EventConsumer side; see the section on
+ <a href="#fitting">pipe fitting</a> below.
+ 
+ 
+ <h3> Consume to Standard or Custom Data Representations </h3>
+ 
+ <p> Many consumers will be used to create standard representations of XML
+ data.  The <a href="TextConsumer.html">TextConsumer</a> takes its events
+ and writes them as text for a single XML document,
+ using an internal <a href="../util/XMLWriter.html">XMLWriter</a>.
+ The <a href="DomConsumer.html">DomConsumer</a> takes its events and uses
+ them to create and populate a DOM Document.
+ 
+ <p> In other cases, you will write consumers yourself.  For example,
+ you might use a particular unmarshaling filter to produce objects
+ that fit your application's requirements, instead of using DOM.
+ Such consumers work at the level of XML data models, rather than with
+ specific representations such as XML text or a DOM tree.  You could
+ convert your output directly to WAP format data (WBXML).
+ 
+ 
+ <h3><a name="fitting">Pipe Fitting</a></h3>
+ 
+ <p> Pipelines are composite event consumers, with each stage having
+ the opportunity to transform the data before delivering it to any
+ subsequent stages.
+ 
+ <p> The <a href="PipelineFactory.html">PipelineFactory</a> class
+ provides access to much of this functionality through a simple syntax.
+ See the table in that class's javadoc describing a number of standard
+ components.  Direct API calls are still needed for many of the most
+ interesting pipeline configurations, including ones leveraging actual
+ or logical concurrency.
+ 
+ <p> Four basic types of pipe fitting are directly supported.  These may
+ be used to construct complex pipeline networks.  <ul>
+ 
+     <li> <a href="TeeConsumer.html">TeeConsumer</a> objects split event
+     flow so it goes to two two different consumers, one before the other.
+     This is a basic form of event fan-out; you can use this class to
+     copy events to any number of output pipelines.
+ 
+     <li> Clients can call remote components through HTTP or HTTPS using
+     the <a href="CallFilter.html">CallFilter</a> component, and Servlets
+     can implement such components by extending the
+     <a href="XmlServlet.html">XmlServlet</a> component.  Java is not
+     required on either end, and transport protocols other than HTTP may
+     also be used.
+ 
+     <li> <a href="EventFilter.html">EventFilter</a> objects selectively
+     provide handling for callbacks, and can pass unhandled ones to a
+     subsequent stage.  They are often subclassed, since much of the
+     basic filtering machinery is already in place in the base class.
+ 
+     <li> Applications can merge two event flows by just using the same
+     consumer in each one.  If multiple threads are in use, synchronization
+     needs to be addressed by the appropriate application level policy.
+ 
+     </ul>
+ 
+ <p> Note that filters can be as complex as
+ <a href="XsltFilter.html">XSLT transforms</a>
+ available) on input data, or as simple as removing simple syntax data
+ such as ignorable whitespace, comments, and CDATA delimiters.
+ Some simple "built-in" filters are part of this package.
+ 
+ 
+ <h3> Coding Conventions:  Filter and Terminus Stages</h3>
+ 
+ <p> If you follow these coding conventions, your classes may be used
+ directly (give the full class name) in pipeline descriptions as understood
+ by the PipelineFactory.  There are four constructors the factory may
+ try to use; in order of decreasing numbers of parameters, these are: <ul>
+ 
+     <li> Filters that need a single String setup parameter should have
+     a public constructor with two parameters:  that string, then the
+     EventConsumer holding the "next" consumer to get events.
+ 
+     <li> Filters that don't need setup parameters should have a public
+     constructor that accepts a single EventConsumer holding the "next"
+     consumer to get events when they are done.
+ 
+     <li> Terminus stages may have a public constructor taking a single
+     paramter:  the string value of that parameter.
+ 
+     <li> Terminus stages may have a public no-parameters constructor.
+ 
+     </ul>
+ 
+ <p> Of course, classes may support more than one such usage convention;
+ if they do, they can automatically be used in multiple modes.  If you
+ try to use a terminus class as a filter, and that terminus has a constructor
+ with the appropriate number of arguments, it is automatically wrapped in
+ a "tee" filter.
+ 
+ 
+ <h2> Debugging Tip: "Tee" Joints can Snapshot Data</h2>
+ 
+ <p> It can sometimes be hard to see what's happening, when something
+ goes wrong.  Easily fixed:  just snapshot the data.  Then you can find
+ out where things start to go wrong.
+ 
+ <p> If you're using pipeline descriptors so that they're easily
+ administered, just stick a <em>write&nbsp;(&nbsp;filename&nbsp;)</em>
+ filter into the pipeline at an appropriate point.
+ 
+ <p> Inside your programs, you can do the same thing directly: perhaps
+ by saving a Writer (perhaps a StringWriter) in a variable, using that
+ to create a TextConsumer, and making that the first part of a tee --
+ splicing that into your pipeline at a convenient location.
+ 
+ <p> You can also use a DomConsumer to buffer the data, but remember
+ that DOM doesn't save all the information that XML provides, so that DOM
+ snapshots are relatively low fidelity.  They also are substantially more
+ expensive in terms of memory than a StringWriter holding similar data.
+ 
+ <h2> Debugging Tip: Non-XML Producers</h2>
+ 
+ <p> Producers in pipelines don't need to start from XML
+ data structures, such as text in XML syntax (likely coming
+ from some <em>XMLReader</em> that parses XML) or a
+ DOM representation (perhaps with a
+ <a href="../util/DomParser.html">DomParser</a>).
+ 
+ <p> One common type of event producer will instead make
+ direct calls to SAX event handlers returned from an
+ <a href="EventConsumer.html">EventConsumer</a>.
+ For example, making <em>ContentHandler.startElement</em>
+ calls and matching <em>ContentHandler.endElement</em> calls.
+ 
+ <p> Applications making such calls can catch certain
+ common "syntax errors" by using a
+ <a href="WellFormednessFilter.html">WellFormednessFilter</a>.
+ That filter will detect (and report) erroneous input data
+ such as mismatched document, element, or CDATA start/end calls.
+ Use such a filter near the head of the pipeline that your
+ producer feeds, at least while debugging, to help ensure that
+ you're providing legal XML Infoset data.
+ 
+ <p> You can also arrange to validate data on the fly.
+ For DTD validation, you can configure a
+ <a href="ValidationConsumer.html">ValidationConsumer</a>
+ to work as a filter, using any DTD you choose.
+ Other validation schemes can be handled with other
+ validation filters.
+ 
+ </body></html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/AttributeImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/AttributeImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/AttributeImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/AttributeImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,124 ----
+ /* AttributeImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.namespace.QName;
+ import javax.xml.stream.events.Attribute;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ 
+ /**
+  * An attribute event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class AttributeImpl
+   extends XMLEventImpl
+   implements Attribute
+ {
+ 
+   protected final QName name;
+   protected final String value;
+   protected final QName type;
+   protected final boolean specified;
+ 
+   protected AttributeImpl(Location location,
+                           QName name, String value, QName type,
+                           boolean specified)
+   {
+     super(location);
+     this.name = name;
+     this.value = value;
+     this.type = type;
+     this.specified = specified;
+   }
+ 
+   public int getEventType()
+   {
+     return ATTRIBUTE;
+   }
+ 
+   public QName getName()
+   {
+     return name;
+   }
+ 
+   public String getValue()
+   {
+     return value;
+   }
+ 
+   public QName getDTDType()
+   {
+     return type;
+   }
+ 
+   public boolean isSpecified()
+   {
+     return specified;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         String prefix = name.getPrefix();
+         if (prefix != null && !"".equals(prefix))
+           {
+             writer.write(prefix);
+             writer.write(':');
+           }
+         writer.write(name.getLocalPart());
+         writer.write('=');
+         writer.write('"');
+         writer.write(encode(value, true));
+         writer.write('"');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/CharactersImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/CharactersImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/CharactersImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/CharactersImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,120 ----
+ /* CharactersImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.Characters;
+ 
+ /**
+  * A character data (text) event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class CharactersImpl
+   extends XMLEventImpl
+   implements Characters
+ {
+ 
+   protected final String data;
+   protected final boolean whitespace;
+   protected final boolean cdata;
+   protected final boolean ignorableWhitespace;
+ 
+   protected CharactersImpl(Location location,
+                            String data, boolean whitespace, boolean cdata,
+                            boolean ignorableWhitespace)
+   {
+     super(location);
+     this.data = data;
+     this.whitespace = whitespace;
+     this.cdata = cdata;
+     this.ignorableWhitespace = ignorableWhitespace;
+   }
+ 
+   public int getEventType()
+   {
+     return cdata ? CDATA : whitespace ? SPACE : CHARACTERS;
+   }
+ 
+   public String getData()
+   {
+     return data;
+   }
+ 
+   public boolean isWhiteSpace()
+   {
+     return whitespace;
+   }
+ 
+   public boolean isCData()
+   {
+     return cdata;
+   }
+   
+   public boolean isIgnorableWhiteSpace()
+   {
+     return ignorableWhitespace;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         if (cdata)
+           {
+             writer.write("<![CDATA[");
+             writer.write(data);
+             writer.write("]]>");
+           }
+         else   
+           writer.write(encode(data, false));
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/CommentImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/CommentImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/CommentImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/CommentImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,92 ----
+ /* CommentImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.Comment;
+ 
+ /**
+  * A comment event.
+  *
+  * @author <a href'mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class CommentImpl
+   extends XMLEventImpl
+   implements Comment
+ {
+ 
+   protected final String text;
+ 
+   protected CommentImpl(Location location, String text)
+   {
+     super(location);
+     this.text = text;
+   }
+ 
+   public int getEventType()
+   {
+     return COMMENT;
+   }
+ 
+   public String getText()
+   {
+     return text;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write("<!--");
+         writer.write(encode(text, false));
+         writer.write("-->");
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/DTDImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/DTDImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/DTDImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/DTDImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,115 ----
+ /* DTDImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import java.util.List;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.DTD;
+ 
+ /**
+  * A DOCTYPE declaration event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DTDImpl
+   extends XMLEventImpl
+   implements DTD
+ {
+ 
+   protected final String body;
+   protected final Object impl;
+   protected final List notations;
+   protected final List entities;
+ 
+   protected DTDImpl(Location location,
+                     String body, Object impl, List notations, List entities)
+   {
+     super(location);
+     this.body = body;
+     this.impl = impl;
+     this.notations = notations;
+     this.entities = entities;
+   }
+ 
+   public int getEventType()
+   {
+     return DTD;
+   }
+ 
+   public String getDocumentTypeDeclaration()
+   {
+     return body;
+   }
+ 
+   public Object getProcessedDTD()
+   {
+     return impl;
+   }
+ 
+   public List getNotations()
+   {
+     return notations;
+   }
+ 
+   public List getEntities()
+   {
+     return entities;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write("<!DOCTYPE ");
+         writer.write(body);
+         writer.write(">");
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/EndDocumentImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/EndDocumentImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/EndDocumentImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/EndDocumentImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,72 ----
+ /* EndDocumentImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.EndDocument;
+ 
+ /**
+  * An end-document event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class EndDocumentImpl
+   extends XMLEventImpl
+   implements EndDocument
+ {
+ 
+   protected EndDocumentImpl(Location location)
+   {
+     super(location);
+   }
+ 
+   public int getEventType()
+   {
+     return END_DOCUMENT;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/EndElementImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/EndElementImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/EndElementImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/EndElementImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,108 ----
+ /* EndElementImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.EndElement;
+ 
+ /**
+  * An end-element event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class EndElementImpl
+   extends XMLEventImpl
+   implements EndElement
+ {
+ 
+   protected final QName name;
+   protected final List namespaces;
+ 
+   protected EndElementImpl(Location location, QName name, List namespaces)
+   {
+     super(location);
+     this.name = name;
+     this.namespaces = namespaces;
+   }
+ 
+   public int getEventType()
+   {
+     return END_ELEMENT;
+   }
+ 
+   public QName getName()
+   {
+     return name;
+   }
+ 
+   public Iterator getNamespaces()
+   {
+     return namespaces.iterator();
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write("</");
+         String prefix = name.getPrefix();
+         if (prefix != null && !"".equals(prefix))
+           {
+             writer.write(prefix);
+             writer.write(':');
+           }
+         writer.write(name.getLocalPart());
+         writer.write(">");
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/EndEntityImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/EndEntityImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/EndEntityImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/EndEntityImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,80 ----
+ /* EndEntityImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.EndEntity;
+ 
+ /**
+  * An end-entity event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class EndEntityImpl
+   extends XMLEventImpl
+   implements EndEntity
+ {
+ 
+   protected final String name;
+ 
+   protected EndEntityImpl(Location location, String name)
+   {
+     super(location);
+     this.name = name;
+   }
+ 
+   public int getEventType()
+   {
+     return END_ENTITY;
+   }
+ 
+   public String getName()
+   {
+     return name;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/EntityDeclarationImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/EntityDeclarationImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/EntityDeclarationImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/EntityDeclarationImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,164 ----
+ /* EntityDeclarationImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.EntityDeclaration;
+ 
+ /**
+  * An entity declaration event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class EntityDeclarationImpl
+   extends XMLEventImpl
+   implements EntityDeclaration
+ {
+ 
+   protected final String publicId;
+   protected final String systemId;
+   protected final String name;
+   protected final String notationName;
+   protected final String replacementText;
+   protected final String baseUri;
+ 
+   protected EntityDeclarationImpl(Location location,
+                                   String publicId, String systemId,
+                                   String name, String notationName,
+                                   String replacementText, String baseUri)
+   {
+     super(location);
+     this.publicId = publicId;
+     this.systemId = systemId;
+     this.name = name;
+     this.notationName = notationName;
+     this.replacementText = replacementText;
+     this.baseUri = baseUri;
+   }
+ 
+   public int getEventType()
+   {
+     return ENTITY_DECLARATION;
+   }
+ 
+   public String getPublicId()
+   {
+     return publicId;
+   }
+ 
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+   public String getName()
+   {
+     return name;
+   }
+ 
+   public String getNotationName()
+   {
+     return notationName;
+   }
+ 
+   public String getReplacementText()
+   {
+     return replacementText;
+   }
+ 
+   public String getBaseURI()
+   {
+     return baseUri;
+   }
+ 
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write("<!ENTITY ");
+         writer.write(name);
+         writer.write(' ');
+         if (systemId != null)
+           {
+             if (publicId != null)
+               {
+                 writer.write(" PUBLIC ");
+                 writer.write('"');
+                 writer.write(publicId);
+                 writer.write('"');
+                 writer.write(' ');
+                 writer.write('"');
+                 writer.write(systemId);
+                 writer.write('"');
+               }
+             else
+               {
+                 writer.write(" SYSTEM ");
+                 writer.write('"');
+                 writer.write(systemId);
+                 writer.write('"');
+               }
+             if (notationName != null)
+               {
+                 writer.write(" NDATA ");
+                 writer.write(notationName);
+               }
+           }
+         else
+           {
+             writer.write('"');
+             if (replacementText != null)
+               writer.write(replacementText);
+             writer.write('"');
+           }
+         writer.write(">");
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/EntityReferenceImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/EntityReferenceImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/EntityReferenceImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/EntityReferenceImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,132 ----
+ /* EntityReferenceImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ //import javax.xml.stream.events.EntityDeclaration;
+ import javax.xml.stream.events.EntityReference;
+ 
+ /**
+  * An entity reference event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class EntityReferenceImpl
+   extends XMLEventImpl
+   implements EntityReference
+ {
+ 
+   //protected final EntityDeclaration decl;
+   protected final String name;
+   protected final String baseUri;
+   protected final String publicId;
+   protected final String systemId;
+   protected final String replacementText;
+ 
+   protected EntityReferenceImpl(Location location,
+                                 //EntityDeclaration decl,
+                                 String name,
+                                 String baseUri, String publicId,
+                                 String systemId, String replacementText)
+   {
+     super(location);
+     //this.decl = decl;
+     this.name = name;
+     this.baseUri = baseUri;
+     this.publicId = publicId;
+     this.systemId = systemId;
+     this.replacementText = replacementText;
+   }
+ 
+   public int getEventType()
+   {
+     return ENTITY_REFERENCE;
+   }
+ 
+   /*public EntityDeclaration getDeclaration()
+   {
+     return decl;
+   }*/
+ 
+   public String getName()
+   {
+     return name;
+   }
+ 
+   public String getBaseUri()
+   {
+     return baseUri;
+   }
+ 
+   public String getPublicId()
+   {
+     return publicId;
+   }
+ 
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+   public String getReplacementText()
+   {
+     return replacementText;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write('&');
+         writer.write(name);
+         writer.write(';');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/FilteredEventReader.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/FilteredEventReader.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/FilteredEventReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/FilteredEventReader.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,102 ----
+ /* FilteredEventReader.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import javax.xml.stream.EventFilter;
+ import javax.xml.stream.XMLEventReader;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.XMLEvent;
+ import javax.xml.stream.util.EventReaderDelegate;
+ 
+ class FilteredEventReader
+   extends EventReaderDelegate
+ {
+ 
+   final EventFilter filter;
+ 
+   FilteredEventReader(XMLEventReader reader, EventFilter filter)
+   {
+     super(reader);
+     this.filter = filter;
+   }
+ 
+   public boolean hasNext()
+     throws XMLStreamException
+   {
+     // XXX ???
+     return super.hasNext();
+   }
+ 
+   public XMLEvent next()
+     throws XMLStreamException
+   {
+     XMLEvent ret;
+     do
+       {
+         ret = super.next();
+       }
+     while (!filter.accept(ret));
+     return ret;
+   }
+   
+   public XMLEvent peek()
+     throws XMLStreamException
+   {
+     XMLEvent ret;
+     do
+       {
+         ret = super.peek();
+       }
+     while (!filter.accept(ret));
+     return ret;
+   }
+   
+   public XMLEvent nextTag()
+     throws XMLStreamException
+   {
+     XMLEvent ret;
+     do
+       {
+         ret = super.nextTag();
+       }
+     while (!filter.accept(ret));
+     return ret;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/FilteredStreamReader.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/FilteredStreamReader.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/FilteredStreamReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/FilteredStreamReader.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,91 ----
+ /* FilteredStreamReader.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import javax.xml.stream.StreamFilter;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.XMLStreamReader;
+ import javax.xml.stream.util.ReaderDelegate;
+ 
+ class FilteredStreamReader
+   extends ReaderDelegate
+ {
+ 
+   final XMLStreamReader reader;
+   final StreamFilter filter;
+ 
+   FilteredStreamReader(XMLStreamReader reader, StreamFilter filter)
+   {
+     super(reader);
+     this.reader = reader;
+     this.filter = filter;
+   }
+ 
+   public boolean hasNext()
+     throws XMLStreamException
+   {
+     // XXX ???
+     return super.hasNext();
+   }
+ 
+   public int next()
+     throws XMLStreamException
+   {
+     int ret;
+     do
+       {
+         ret = super.next();
+       }
+     while (!filter.accept(reader));
+     return ret;
+   }
+   
+   public int nextTag()
+     throws XMLStreamException
+   {
+     int ret;
+     do
+       {
+         ret = super.nextTag();
+       }
+     while (!filter.accept(reader));
+     return ret;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/LocationImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/LocationImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/LocationImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/LocationImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,89 ----
+ /* LocationImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import javax.xml.stream.Location;
+ 
+ /**
+  * Information about the location of an XML event within the underlying
+  * stream.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class LocationImpl
+   implements Location
+ {
+ 
+   protected final int offset;
+ 
+   protected final int col;
+ 
+   protected final int line;
+ 
+   protected final String systemId;
+ 
+   protected LocationImpl(int offset, int col, int line, String systemId)
+   {
+     this.offset = offset;
+     this.col = col;
+     this.line = line;
+     this.systemId = systemId;
+   }
+ 
+   public int getLineNumber()
+   {
+     return line;
+   }
+ 
+   public int getColumnNumber()
+   {
+     return col;
+   }
+ 
+   public int getCharacterOffset()
+   {
+     return offset;
+   }
+ 
+   public String getLocationURI()
+   {
+     return systemId;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/NamespaceImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/NamespaceImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/NamespaceImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/NamespaceImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,111 ----
+ /* NamespaceImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.Namespace;
+ 
+ /**
+  * A namespace declaration event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class NamespaceImpl
+   extends XMLEventImpl
+   implements Namespace
+ {
+ 
+   protected final String prefix;
+   protected final String uri;
+ 
+   protected NamespaceImpl(Location location, String prefix, String uri)
+   {
+     super(location);
+     this.prefix = prefix;
+     this.uri = uri;
+   }
+ 
+   public int getEventType()
+   {
+     return NAMESPACE;
+   }
+ 
+   public String getPrefix()
+   {
+     return prefix;
+   }
+ 
+   public String getNamespaceURI()
+   {
+     return uri;
+   }
+ 
+   public boolean isDefaultNamespaceDeclaration()
+   {
+     return (prefix == null || "".equals(prefix));
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write("xmlns");
+         if (prefix != null && !"".equals(prefix))
+           {
+             writer.write(':');
+             writer.write(prefix);
+           }
+         writer.write('=');
+         writer.write('"');
+         writer.write(encode(uri, true));
+         writer.write('"');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/NotationDeclarationImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/NotationDeclarationImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/NotationDeclarationImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/NotationDeclarationImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,126 ----
+ /* NotationDeclarationImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.NotationDeclaration;
+ 
+ /**
+  * A notation declaration event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class NotationDeclarationImpl
+   extends XMLEventImpl
+   implements NotationDeclaration
+ {
+ 
+   protected final String name;
+   protected final String publicId;
+   protected final String systemId;
+ 
+   protected NotationDeclarationImpl(Location location,
+                                     String name, String publicId,
+                                     String systemId)
+   {
+     super(location);
+     this.name = name;
+     this.publicId = publicId;
+     this.systemId = systemId;
+   }
+ 
+   public int getEventType()
+   {
+     return NOTATION_DECLARATION;
+   }
+ 
+   public String getName()
+   {
+     return name;
+   }
+ 
+   public String getPublicId()
+   {
+     return publicId;
+   }
+ 
+   public String getSystemId()
+   {
+     return systemId;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write("<!NOTATION ");
+         writer.write(name);
+         if (publicId != null)
+           {
+             writer.write(" PUBLIC ");
+             writer.write('"');
+             writer.write(publicId);
+             writer.write('"');
+             writer.write(' ');
+             writer.write('"');
+             writer.write(systemId);
+             writer.write('"');
+           }
+         else
+           {
+             writer.write(" SYSTEM ");
+             writer.write('"');
+             writer.write(systemId);
+             writer.write('"');
+           }
+         writer.write('>');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/ProcessingInstructionImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/ProcessingInstructionImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/ProcessingInstructionImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/ProcessingInstructionImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,105 ----
+ /* ProcessingInstructionImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.ProcessingInstruction;
+ 
+ /**
+  * A processing instruction event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class ProcessingInstructionImpl
+   extends XMLEventImpl
+   implements ProcessingInstruction
+ {
+ 
+   protected final String target;
+   protected final String data;
+ 
+   protected ProcessingInstructionImpl(Location location,
+                                       String target, String data)
+   {
+     super(location);
+     this.target = target;
+     this.data = data;
+   }
+ 
+   public int getEventType()
+   {
+     return PROCESSING_INSTRUCTION;
+   }
+ 
+   public String getTarget()
+   {
+     return target;
+   }
+ 
+   public String getData()
+   {
+     return data;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write("<?");
+         writer.write(target);
+         if (data != null)
+           {
+             writer.write(' ');
+             writer.write(data);
+           }
+         writer.write("?>");
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/StartDocumentImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/StartDocumentImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/StartDocumentImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/StartDocumentImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,144 ----
+ /* StartDocumentImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.StartDocument;
+ 
+ /**
+  * A start-document event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class StartDocumentImpl
+   extends XMLEventImpl
+   implements StartDocument
+ {
+ 
+   protected final String systemId;
+   protected final String encoding;
+   protected final String xmlVersion;
+   protected final boolean xmlStandalone;
+   protected final boolean standaloneDeclared;
+   protected final boolean encodingDeclared;
+ 
+   protected StartDocumentImpl(Location location,
+                               String systemId, String encoding,
+                               String xmlVersion, boolean xmlStandalone,
+                               boolean standaloneDeclared,
+                               boolean encodingDeclared)
+   {
+     super(location);
+     this.systemId = systemId;
+     this.encoding = encoding;
+     this.xmlVersion = xmlVersion;
+     this.xmlStandalone = xmlStandalone;
+     this.standaloneDeclared = standaloneDeclared;
+     this.encodingDeclared = encodingDeclared;
+   }
+ 
+   public int getEventType()
+   {
+     return START_DOCUMENT;
+   }
+ 
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+   public String getCharacterEncodingScheme()
+   {
+     return encoding;
+   }
+ 
+   public boolean encodingSet()
+   {
+     return encodingDeclared;
+   }
+ 
+   public boolean isStandalone()
+   {
+     return xmlStandalone;
+   }
+ 
+   public boolean standaloneSet()
+   {
+     return standaloneDeclared;
+   }
+ 
+   public String getVersion()
+   {
+     return xmlVersion;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write("<?xml version='");
+         writer.write(xmlVersion);
+         writer.write('\'');
+         if (standaloneDeclared)
+           {
+             writer.write(" standalone='");
+             writer.write(xmlStandalone ? "yes" : "no");
+             writer.write('\'');
+           }
+         if (encodingDeclared)
+           {
+             writer.write(" encoding='");
+             writer.write(encoding);
+             writer.write('\'');
+           }
+         writer.write("?>");
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/StartElementImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/StartElementImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/StartElementImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/StartElementImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,153 ----
+ /* StartElementImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.Attribute;
+ import javax.xml.stream.events.Namespace;
+ import javax.xml.stream.events.StartElement;
+ 
+ /**
+  * A start-element event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class StartElementImpl
+   extends XMLEventImpl
+   implements StartElement
+ {
+ 
+   protected final QName name;
+   protected final List attributes;
+   protected final List namespaces;
+   protected final NamespaceContext namespaceContext;
+ 
+   protected StartElementImpl(Location location,
+                              QName name, List attributes, List namespaces,
+                              NamespaceContext namespaceContext)
+   {
+     super(location);
+     this.name = name;
+     this.attributes = attributes;
+     this.namespaces = namespaces;
+     this.namespaceContext = namespaceContext;
+   }
+ 
+   public int getEventType()
+   {
+     return START_ELEMENT;
+   }
+ 
+   public QName getName()
+   {
+     return name;
+   }
+ 
+   public Iterator getAttributes()
+   {
+     return attributes.iterator();
+   }
+ 
+   public Iterator getNamespaces()
+   {
+     return namespaces.iterator();
+   }
+ 
+   public Attribute getAttributeByName(QName name)
+   {
+     for (Iterator i = attributes.iterator(); i.hasNext(); )
+       {
+         Attribute attr = (Attribute) i.next();
+         if (name.equals(attr.getName()))
+           return attr;
+       }
+     return null;
+   }
+ 
+   public NamespaceContext getNamespaceContext()
+   {
+     return namespaceContext;
+   }
+ 
+   public String getNamespaceURI(String prefix)
+   {
+     return namespaceContext.getNamespaceURI(prefix);
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write('<');
+         String prefix = name.getPrefix();
+         if (prefix != null && !"".equals(prefix))
+           {
+             writer.write(prefix);
+             writer.write(':');
+           }
+         writer.write(name.getLocalPart());
+         for (Iterator i = namespaces.iterator(); i.hasNext(); )
+           {
+             writer.write(' ');
+             ((Namespace) i.next()).writeAsEncodedUnicode(writer);
+           }
+         for (Iterator i = attributes.iterator(); i.hasNext(); )
+           {
+             writer.write(' ');
+             ((Attribute) i.next()).writeAsEncodedUnicode(writer);
+           }
+         writer.write('>');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e.getMessage());
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/StartEntityImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/StartEntityImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/StartEntityImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/StartEntityImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,80 ----
+ /* StartEntityImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.StartEntity;
+ 
+ /**
+  * A start-entity event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class StartEntityImpl
+   extends XMLEventImpl
+   implements StartEntity
+ {
+ 
+   protected final String name;
+ 
+   protected StartEntityImpl(Location location, String name)
+   {
+     super(location);
+     this.name = name;
+   }
+ 
+   public int getEventType()
+   {
+     return START_ENTITY;
+   }
+ 
+   public String getName()
+   {
+     return name;
+   }
+   
+   public void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException
+   {
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventAllocatorImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventAllocatorImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventAllocatorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventAllocatorImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,204 ----
+ /* XMLEventAllocatorImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.util.HashMap;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Map;
+ import javax.xml.namespace.QName;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamConstants;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.XMLStreamReader;
+ import javax.xml.stream.events.EntityDeclaration;
+ import javax.xml.stream.events.XMLEvent;
+ import javax.xml.stream.util.XMLEventAllocator;
+ import javax.xml.stream.util.XMLEventConsumer;
+ 
+ /**
+  * Allocator for creating XML events based on a reader state.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XMLEventAllocatorImpl
+   implements XMLEventAllocator
+ {
+ 
+   protected Map entityDeclarations;
+ 
+   protected XMLEventAllocatorImpl()
+   {
+     entityDeclarations = new HashMap();
+   }
+ 
+   public XMLEvent allocate(XMLStreamReader reader)
+     throws XMLStreamException
+   {
+     String text;
+     boolean whitespace;
+     boolean ignorableWhitespace;
+     int len;
+     List namespaces;
+     int eventType = reader.getEventType();
+     Location location = reader.getLocation();
+     switch (eventType)
+       {
+       case XMLStreamConstants.CDATA:
+         text = reader.getText();
+         whitespace = isWhitespace(text);
+         // TODO ignorableWhitespace
+         ignorableWhitespace = whitespace && false;
+         return new CharactersImpl(location, text,
+                                   whitespace, true, ignorableWhitespace);
+       case XMLStreamConstants.CHARACTERS:
+         text = reader.getText();
+         whitespace = false;
+         // TODO ignorableWhitespace
+         ignorableWhitespace = whitespace && false;
+         return new CharactersImpl(location, text,
+                                   whitespace, false, ignorableWhitespace);
+       case XMLStreamConstants.COMMENT:
+         text = reader.getText();
+         return new CommentImpl(location, text);
+       case XMLStreamConstants.DTD:
+         text = reader.getText();
+         List notations = new LinkedList();
+         List entities = new LinkedList();
+         // TODO readDTDBody(notations, entities);
+         return new DTDImpl(location, text, null, notations, entities);
+       case XMLStreamConstants.END_DOCUMENT:
+         return new EndDocumentImpl(location);
+       case XMLStreamConstants.END_ELEMENT:
+         len = reader.getNamespaceCount();
+         namespaces = new LinkedList();
+         for (int i = 0; i < len; i++)
+           namespaces.add(new NamespaceImpl(location,
+                                            reader.getNamespacePrefix(i),
+                                            reader.getNamespaceURI(i)));
+         return new EndElementImpl(location,
+                                   reader.getName(),
+                                   namespaces);
+       case XMLStreamConstants.ENTITY_REFERENCE:
+         String name = reader.getLocalName();
+         //EntityDeclaration decl =
+         //  (EntityDeclaration) entityDeclarations.get(name);
+         //return new EntityReferenceImpl(location, decl, name);
+         return new EntityReferenceImpl(location, name, null, null, null, null);
+       case XMLStreamConstants.PROCESSING_INSTRUCTION:
+         return new ProcessingInstructionImpl(location,
+                                              reader.getPITarget(),
+                                              reader.getPIData());
+       case XMLStreamConstants.SPACE:
+         text = reader.getText();
+         whitespace = true;
+         // TODO ignorableWhitespace
+         ignorableWhitespace = whitespace && false;
+         return new CharactersImpl(location, text,
+                                   whitespace, false, ignorableWhitespace);
+       case XMLStreamConstants.START_DOCUMENT:
+         String systemId = location.getLocationURI();
+         String encoding = reader.getCharacterEncodingScheme();
+         boolean encodingDeclared = encoding != null;
+         if (encoding == null)
+           {
+             encoding = reader.getEncoding();
+             if (encoding == null)
+               encoding = "UTF-8";
+           }
+         String xmlVersion = reader.getVersion();
+         if (xmlVersion == null)
+           xmlVersion = "1.0";
+         boolean xmlStandalone = reader.isStandalone();
+         boolean standaloneDeclared = reader.standaloneSet();
+         return new StartDocumentImpl(location,
+                                      systemId,
+                                      encoding,
+                                      xmlVersion,
+                                      xmlStandalone,
+                                      standaloneDeclared,
+                                      encodingDeclared);
+       case XMLStreamConstants.START_ELEMENT:
+         len = reader.getNamespaceCount();
+         namespaces = new LinkedList();
+         for (int i = 0; i < len; i++)
+           namespaces.add(new NamespaceImpl(location,
+                                            reader.getNamespacePrefix(i),
+                                            reader.getNamespaceURI(i)));
+         len = reader.getAttributeCount();
+         List attributes = new LinkedList();
+         for (int i = 0; i < len; i++)
+           attributes.add(new AttributeImpl(location,
+                                            reader.getAttributeQName(i),
+                                            reader.getAttributeValue(i),
+                                            QName.valueOf(reader.getAttributeType(i)),
+                                            reader.isAttributeSpecified(i)));
+         return new StartElementImpl(location,
+                                     reader.getName(),
+                                     attributes, namespaces,
+                                     reader.getNamespaceContext());
+       default:
+         throw new XMLStreamException("Unknown event type: " + eventType);
+       }
+   }
+ 
+   public void allocate(XMLStreamReader reader, XMLEventConsumer consumer)
+     throws XMLStreamException
+   {
+     consumer.add(allocate(reader));
+   }
+ 
+   public XMLEventAllocator newInstance()
+   {
+     return new XMLEventAllocatorImpl();
+   }
+   
+   protected boolean isWhitespace(String text)
+   {
+     int len = text.length();
+     for (int i = 0; i < len; i++)
+       {
+         char c = text.charAt(i);
+         if (c != 0x20 && c != 0x09 && c != 0x0a && c != 0x0d)
+           return false;
+       }
+     return true;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventFactoryImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventFactoryImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventFactoryImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventFactoryImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,271 ----
+ /* XMLEventFactoryImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import javax.xml.XMLConstants;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLEventFactory;
+ import javax.xml.stream.events.Attribute;
+ import javax.xml.stream.events.Characters;
+ import javax.xml.stream.events.Comment;
+ import javax.xml.stream.events.DTD;
+ import javax.xml.stream.events.EndDocument;
+ import javax.xml.stream.events.EndElement;
+ import javax.xml.stream.events.EntityDeclaration;
+ import javax.xml.stream.events.EntityReference;
+ import javax.xml.stream.events.Namespace;
+ import javax.xml.stream.events.ProcessingInstruction;
+ import javax.xml.stream.events.StartDocument;
+ import javax.xml.stream.events.StartElement;
+ 
+ /**
+  * Factory for XML events.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XMLEventFactoryImpl
+   extends XMLEventFactory
+ {
+ 
+   protected Location location;
+ 
+   public void setLocation(Location location)
+   {
+     this.location = location;
+   }
+ 
+   public Attribute createAttribute(String prefix, String namespaceURI,
+                                    String localName, String value)
+   {
+     return new AttributeImpl(location,
+                              new QName(namespaceURI, localName, prefix),
+                              value, QName.valueOf("CDATA"), true);
+   }
+   
+   public Attribute createAttribute(String localName, String value)
+   {
+     return new AttributeImpl(location,
+                              new QName(localName),
+                              value, QName.valueOf("CDATA"), true);
+   }
+ 
+   public Attribute createAttribute(QName name, String value)
+   {
+     return new AttributeImpl(location, name, value,
+                              QName.valueOf("CDATA"), true);
+   }
+ 
+   public Namespace createNamespace(String namespaceURI)
+   {
+     return new NamespaceImpl(location,
+                              XMLConstants.DEFAULT_NS_PREFIX, namespaceURI);
+   }
+ 
+   public Namespace createNamespace(String prefix, String namespaceUri)
+   {
+      return new NamespaceImpl(location, prefix, namespaceUri);
+   }
+ 
+   public StartElement createStartElement(QName name,
+                                          Iterator attributes,
+                                          Iterator namespaces)
+   {
+     return new StartElementImpl(location, name,
+                                 createLinkedList(attributes),
+                                 createLinkedList(namespaces),
+                                 null);
+   }
+   
+   public StartElement createStartElement(String prefix,
+                                          String namespaceUri,
+                                          String localName)
+   {
+     return new StartElementImpl(location,
+                                 new QName(namespaceUri, localName, prefix),
+                                 Collections.EMPTY_LIST,
+                                 Collections.EMPTY_LIST,
+                                 null);
+   }
+ 
+   public StartElement createStartElement(String prefix,
+                                          String namespaceUri,
+                                          String localName,
+                                          Iterator attributes,
+                                          Iterator namespaces)
+   {
+     return new StartElementImpl(location,
+                                 new QName(namespaceUri, localName, prefix),
+                                 createLinkedList(attributes),
+                                 createLinkedList(namespaces),
+                                 null);
+   }
+ 
+   public StartElement createStartElement(String prefix,
+                                          String namespaceUri,
+                                          String localName,
+                                          Iterator attributes,
+                                          Iterator namespaces,
+                                          NamespaceContext context)
+   {
+     return new StartElementImpl(location,
+                                 new QName(namespaceUri, localName, prefix),
+                                 createLinkedList(attributes),
+                                 createLinkedList(namespaces),
+                                 context);
+   }
+   
+   public EndElement createEndElement(QName name,
+                                      Iterator namespaces)
+   {
+     return new EndElementImpl(location, name,
+                               createLinkedList(namespaces));
+   }
+ 
+   public EndElement createEndElement(String prefix,
+                                      String namespaceUri,
+                                      String localName)
+   {
+     return new EndElementImpl(location,
+                               new QName(namespaceUri, localName, prefix),
+                               Collections.EMPTY_LIST);
+   }
+   
+   public EndElement createEndElement(String prefix,
+                                      String namespaceUri,
+                                      String localName,
+                                      Iterator namespaces)
+   {
+     return new EndElementImpl(location,
+                               new QName(namespaceUri, localName, prefix),
+                               createLinkedList(namespaces));
+   }
+ 
+   public Characters createCharacters(String content)
+   {
+     return new CharactersImpl(location, content, false, false, false);
+   }
+ 
+   public Characters createCData(String content)
+   {
+     return new CharactersImpl(location, content, false, true, false);
+   }
+ 
+   public Characters createSpace(String content)
+   {
+     return new CharactersImpl(location, content, true, false, false);
+   }
+ 
+   public Characters createIgnorableSpace(String content)
+   {
+     return new CharactersImpl(location, content, true, false, true);
+   }
+ 
+   public StartDocument createStartDocument()
+   {
+     return new StartDocumentImpl(location, null, "UTF-8", "1.0",
+                                  false, false, false);
+   }
+ 
+   public StartDocument createStartDocument(String encoding,
+                                            String version,
+                                            boolean standalone)
+   {
+     return new StartDocumentImpl(location, null, encoding, version,
+                                  standalone, true, true);
+   }
+   
+   public StartDocument createStartDocument(String encoding,
+                                            String version)
+   {
+     return new StartDocumentImpl(location, null, encoding, version,
+                                  false, false, true);
+   }
+ 
+   public StartDocument createStartDocument(String encoding)
+   {
+     return new StartDocumentImpl(location, null, encoding, "1.0",
+                                  false, false, true);
+   }
+ 
+   public EndDocument createEndDocument()
+   {
+     return new EndDocumentImpl(location);
+   }
+ 
+   public EntityReference createEntityReference(String name,
+                                                //EntityDeclaration declaration)
+                                                String replacementText)
+   {
+     //return new EntityReferenceImpl(location, declaration, name);
+     return new EntityReferenceImpl(location, name, null, null, null,
+                                    replacementText);
+   }
+ 
+   public Comment createComment(String text)
+   {
+     return new CommentImpl(location, text);
+   }
+ 
+   public ProcessingInstruction createProcessingInstruction(String target,
+                                                            String data)
+   {
+     return new ProcessingInstructionImpl(location, target, data);
+   }
+ 
+   public DTD createDTD(String dtd)
+   {
+     return new DTDImpl(location, dtd, null,
+                        Collections.EMPTY_LIST,
+                        Collections.EMPTY_LIST);
+   }
+ 
+   LinkedList createLinkedList(Iterator i)
+   {
+     LinkedList ret = new LinkedList();
+     while (i.hasNext())
+       ret.add(i.next());
+     return ret;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,208 ----
+ /* XMLEventImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.Writer;
+ import javax.xml.namespace.QName;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLStreamConstants;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.events.Characters;
+ import javax.xml.stream.events.EndElement;
+ import javax.xml.stream.events.StartElement;
+ import javax.xml.stream.events.XMLEvent;
+ 
+ /**
+  * An XML stream event.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public abstract class XMLEventImpl
+   implements XMLEvent
+ {
+ 
+   protected final Location location;
+ 
+   protected XMLEventImpl(Location location)
+   {
+     this.location = location;
+   }
+ 
+   public abstract int getEventType();
+ 
+   public Location getLocation()
+   {
+     return location;
+   }
+ 
+   public boolean isStartElement()
+   {
+     return getEventType() == START_ELEMENT;
+   }
+ 
+   public boolean isAttribute()
+   {
+     return getEventType() == ATTRIBUTE;
+   }
+ 
+   public boolean isNamespace()
+   {
+     return getEventType() == NAMESPACE;
+   }
+ 
+   public boolean isEndElement()
+   {
+     return getEventType() == END_ELEMENT;
+   }
+ 
+   public boolean isEntityReference()
+   {
+     return getEventType() == ENTITY_REFERENCE;
+   }
+ 
+   public boolean isProcessingInstruction()
+   {
+     return getEventType() == PROCESSING_INSTRUCTION;
+   }
+ 
+   public boolean isCharacters()
+   {
+     int et = getEventType();
+     return et == CHARACTERS || et == CDATA;
+   }
+ 
+   public boolean isStartDocument()
+   {
+     return getEventType() == START_DOCUMENT;
+   }
+ 
+   public boolean isEndDocument()
+   {
+     return getEventType() == END_DOCUMENT;
+   }
+ 
+   public boolean isStartEntity()
+   {
+     return getEventType() == START_ENTITY;
+   }
+ 
+   public boolean isEndEntity()
+   {
+     return getEventType() == END_ENTITY;
+   }
+ 
+   public StartElement asStartElement()
+   {
+     return (StartElement) this;
+   }
+ 
+   public EndElement asEndElement()
+   {
+     return (EndElement) this;
+   }
+ 
+   public Characters asCharacters()
+   {
+     return (Characters) this;
+   }
+ 
+   public QName getSchemaType()
+   {
+     return null;
+   }
+   
+   public abstract void writeAsEncodedUnicode(Writer writer)
+     throws XMLStreamException;
+ 
+   protected String encode(String text, boolean inAttr)
+   {
+     int len = text.length();
+     StringBuffer buf = null;
+     for (int i = 0; i < len; i++)
+       {
+         char c = text.charAt(i);
+         if (c == '<')
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(text.substring(0, i));
+               }
+             buf.append("&lt;");
+           }
+         else if (c == '>')
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(text.substring(0, i));
+               }
+             buf.append("&gt;");
+           }
+         else if (c == '&')
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(text.substring(0, i));
+               }
+             buf.append("&amp;");
+           }
+         else if (c == '\'' && inAttr)
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(text.substring(0, i));
+               }
+             buf.append("&apos;");
+           }
+         else if (c == '"' && inAttr)
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(text.substring(0, i));
+               }
+             buf.append("&quot;");
+           }
+         else if (buf != null)
+           {
+             buf.append(c);
+           }
+       }
+     return (buf == null) ? text : buf.toString(); 
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventReaderImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventReaderImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventReaderImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventReaderImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,125 ----
+ /* XMLEventReaderImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import javax.xml.stream.XMLEventReader;
+ import javax.xml.stream.XMLStreamConstants;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.XMLStreamReader;
+ import javax.xml.stream.events.XMLEvent;
+ import javax.xml.stream.util.XMLEventAllocator;
+ 
+ /**
+  * Parser using XML events.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XMLEventReaderImpl
+   implements XMLEventReader
+ {
+ 
+   protected final XMLStreamReader reader;
+   protected final XMLEventAllocator allocator;
+   protected final String systemId;
+   protected XMLEvent peekEvent;
+ 
+   protected XMLEventReaderImpl(XMLStreamReader reader,
+                                XMLEventAllocator allocator,
+                                String systemId)
+   {
+     this.reader = reader;
+     this.allocator = allocator;
+     this.systemId = systemId;
+   }
+ 
+   public XMLEvent next()
+     throws XMLStreamException
+   {
+     XMLEvent ret = peek();
+     peekEvent = null;
+     return ret;
+   }
+ 
+   public boolean hasNext()
+     throws XMLStreamException
+   {
+     return peekEvent != null || reader.hasNext();
+   }
+   
+   public XMLEvent peek()
+     throws XMLStreamException
+   {
+     if (peekEvent != null)
+       return peekEvent;
+     if (!reader.hasNext())
+       return null;
+     reader.next();
+     peekEvent = allocator.allocate(reader);
+     return peekEvent;
+   }
+ 
+   public String getElementText()
+     throws XMLStreamException
+   {
+     return reader.getElementText();
+   }
+ 
+   public XMLEvent nextTag()
+     throws XMLStreamException
+   {
+     if (peekEvent != null)
+       {
+         int eventType = peekEvent.getEventType();
+         if (eventType == XMLStreamConstants.START_ELEMENT ||
+             eventType == XMLStreamConstants.END_ELEMENT)
+           return peekEvent;
+         else
+           peekEvent = null;
+       }
+     reader.nextTag();
+     return allocator.allocate(reader);
+   }
+ 
+   public Object getProperty(String name)
+     throws IllegalArgumentException
+   {
+     return reader.getProperty(name);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventWriterImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventWriterImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLEventWriterImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLEventWriterImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,191 ----
+ /* XMLEventWriterImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import javax.xml.stream.XMLEventReader;
+ import javax.xml.stream.XMLEventWriter;
+ import javax.xml.stream.XMLStreamConstants;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.XMLStreamWriter;
+ import javax.xml.stream.events.Attribute;
+ import javax.xml.stream.events.Characters;
+ import javax.xml.stream.events.Comment;
+ import javax.xml.stream.events.DTD;
+ import javax.xml.stream.events.Namespace;
+ import javax.xml.stream.events.ProcessingInstruction;
+ import javax.xml.stream.events.StartDocument;
+ import javax.xml.stream.events.StartElement;
+ import javax.xml.stream.events.XMLEvent;
+ 
+ /**
+  * Writer to write events to an underlying XML stream writer.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XMLEventWriterImpl
+   implements XMLEventWriter
+ {
+   
+   protected final XMLStreamWriter writer;
+ 
+   protected XMLEventWriterImpl(XMLStreamWriter writer)
+   {
+     this.writer = writer;
+   }
+ 
+   public void flush()
+     throws XMLStreamException
+   {
+     writer.flush();
+   }
+ 
+   public void close()
+     throws XMLStreamException
+   {
+     writer.close();
+   }
+ 
+   public void add(XMLEvent event)
+     throws XMLStreamException
+   {
+     QName name;
+     String uri;
+     switch (event.getEventType())
+       {
+       case XMLStreamConstants.START_ELEMENT:
+         StartElement startElement = event.asStartElement();
+         name = startElement.getName();
+         uri = name.getNamespaceURI();
+         if (uri != null && !"".equals(uri))
+           writer.writeStartElement(name.getPrefix(), name.getLocalPart(), uri);
+         else
+           writer.writeStartElement(name.getLocalPart());
+         break;
+       case XMLStreamConstants.END_ELEMENT:
+         writer.writeEndElement();
+         break;
+       case XMLStreamConstants.ATTRIBUTE:
+         Attribute attribute = (Attribute) event;
+         name = attribute.getName();
+         uri = name.getNamespaceURI();
+         if (uri != null && !"".equals(uri))
+           writer.writeAttribute(name.getPrefix(), uri, name.getLocalPart(),
+                                 attribute.getValue());
+         else
+           writer.writeAttribute(name.getLocalPart(), attribute.getValue());
+         break;
+       case XMLStreamConstants.NAMESPACE:
+         Namespace namespace = (Namespace) event;
+         uri = namespace.getNamespaceURI();
+         writer.writeNamespace(namespace.getPrefix(), uri);
+         break;
+       case XMLStreamConstants.PROCESSING_INSTRUCTION:
+         ProcessingInstruction pi = (ProcessingInstruction) event;
+         String data = pi.getData();
+         if (data == null)
+           writer.writeProcessingInstruction(pi.getTarget());
+         else
+           writer.writeProcessingInstruction(pi.getTarget(), data);
+         break;
+       case XMLStreamConstants.COMMENT:
+         Comment comment = (Comment) event;
+         writer.writeComment(comment.getText());
+         break;
+       case XMLStreamConstants.START_DOCUMENT:
+         StartDocument startDocument = (StartDocument) event;
+         writer.writeStartDocument(startDocument.getVersion());
+         break;
+       case XMLStreamConstants.END_DOCUMENT:
+         writer.writeEndDocument();
+         break;
+       case XMLStreamConstants.DTD:
+         DTD dtd = (DTD) event;
+         writer.writeDTD(dtd.getDocumentTypeDeclaration());
+         break;
+       case XMLStreamConstants.CHARACTERS:
+       case XMLStreamConstants.SPACE:
+         Characters characters = event.asCharacters();
+         writer.writeCharacters(characters.getData());
+         break;
+       case XMLStreamConstants.CDATA:
+         Characters cdata = event.asCharacters();
+         writer.writeCData(cdata.getData());
+         break;
+       }
+   }
+ 
+   public void add(XMLEventReader reader)
+     throws XMLStreamException
+   {
+     while (reader.hasNext())
+       add(reader.next());
+   }
+ 
+   public String getPrefix(String uri)
+     throws XMLStreamException
+   {
+     return writer.getPrefix(uri);
+   }
+ 
+   public void setPrefix(String prefix, String uri)
+     throws XMLStreamException
+   {
+     writer.setPrefix(prefix, uri);
+   }
+ 
+   public void setDefaultNamespace(String uri)
+     throws XMLStreamException
+   {
+     writer.setDefaultNamespace(uri);
+   }
+ 
+   public void setNamespaceContext(NamespaceContext context)
+     throws XMLStreamException
+   {
+     writer.setNamespaceContext(context);
+   }
+   
+   public NamespaceContext getNamespaceContext()
+   {
+     return writer.getNamespaceContext();
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLInputFactoryImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLInputFactoryImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLInputFactoryImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLInputFactoryImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,321 ----
+ /* XMLInputFactoryImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.FileNotFoundException;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.Reader;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ 
+ import javax.xml.transform.Source;
+ import javax.xml.transform.stream.StreamSource;
+ import javax.xml.stream.EventFilter;
+ import javax.xml.stream.StreamFilter;
+ import javax.xml.stream.XMLEventReader;
+ import javax.xml.stream.XMLReporter;
+ import javax.xml.stream.XMLResolver;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.XMLStreamReader;
+ import javax.xml.stream.XMLInputFactory;
+ import javax.xml.stream.util.XMLEventAllocator;
+ 
+ /**
+  * Factory for creating parsers from various kinds of XML source.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XMLInputFactoryImpl
+   extends XMLInputFactory
+ {
+ 
+   protected XMLResolver resolver;
+   protected XMLReporter reporter;
+   protected XMLEventAllocator allocator;
+ 
+   protected boolean validating;
+   protected boolean namespaceAware = true;
+   protected boolean coalescing;
+   protected boolean replacingEntityReferences = true;
+   protected boolean externalEntities = true;
+   protected boolean supportDTD = true;
+ 
+   public XMLInputFactoryImpl()
+   {
+     allocator = new XMLEventAllocatorImpl();
+   }
+ 
+   public XMLStreamReader createXMLStreamReader(Reader reader)
+     throws XMLStreamException
+   {
+     return new XMLStreamReaderImpl(reader, null, null,
+                                    resolver, reporter,
+                                    validating, namespaceAware,
+                                    coalescing, replacingEntityReferences,
+                                    externalEntities, supportDTD);
+   }
+   
+   public XMLStreamReader createXMLStreamReader(Source source)
+     throws XMLStreamException
+   {
+     String systemId = source.getSystemId();
+     InputStream in = getInputStream(source);
+     return new XMLStreamReaderImpl(in, null, systemId,
+                                    resolver, reporter,
+                                    validating, namespaceAware,
+                                    coalescing, replacingEntityReferences,
+                                    externalEntities, supportDTD);
+   }
+   
+   public XMLStreamReader createXMLStreamReader(InputStream in)
+     throws XMLStreamException
+   {
+     return new XMLStreamReaderImpl(in, null, null,
+                                    resolver, reporter,
+                                    validating, namespaceAware,
+                                    coalescing, replacingEntityReferences,
+                                    externalEntities, supportDTD);
+   }
+   
+   public XMLStreamReader createXMLStreamReader(InputStream in, String encoding)
+     throws XMLStreamException
+   {
+     return createXMLStreamReader(in);
+   }
+ 
+   public XMLEventReader createXMLEventReader(Reader reader)
+     throws XMLStreamException
+   {
+     XMLStreamReader sr = createXMLStreamReader(reader);
+     return new XMLEventReaderImpl(sr, allocator, null);
+   }
+   
+   public XMLEventReader createXMLEventReader(XMLStreamReader reader)
+     throws XMLStreamException
+   {
+     return new XMLEventReaderImpl(reader, allocator, null);
+   }
+   
+   public XMLEventReader createXMLEventReader(Source source)
+     throws XMLStreamException
+   {
+     XMLStreamReader sr = createXMLStreamReader(source);
+     return new XMLEventReaderImpl(sr, allocator, null);
+   }
+   
+   public XMLEventReader createXMLEventReader(InputStream in)
+     throws XMLStreamException
+   {
+     XMLStreamReader sr = createXMLStreamReader(in);
+     return new XMLEventReaderImpl(sr, allocator, null);
+   }
+   
+   public XMLEventReader createXMLEventReader(InputStream in, String encoding)
+     throws XMLStreamException
+   {
+     XMLStreamReader sr = createXMLStreamReader(in, encoding);
+     return new XMLEventReaderImpl(sr, allocator, null);
+   }
+ 
+   public XMLStreamReader createFilteredReader(XMLStreamReader reader,
+                                               StreamFilter filter)
+     throws XMLStreamException
+   {
+     return new FilteredStreamReader(reader, filter);
+   }
+ 
+   public XMLEventReader createFilteredReader(XMLEventReader reader,
+                                              EventFilter filter)
+     throws XMLStreamException
+   {
+     return new FilteredEventReader(reader, filter);
+   }
+ 
+   public XMLResolver getXMLResolver()
+   {
+     return resolver;
+   }
+ 
+   public void setXMLResolver(XMLResolver resolver)
+   {
+     this.resolver = resolver;
+   }
+   
+   public XMLReporter getXMLReporter()
+   {
+     return reporter;
+   }
+ 
+   public void setXMLReporter(XMLReporter reporter)
+   {
+     this.reporter = reporter;
+   }
+ 
+   public void setProperty(String name, Object value)
+     throws IllegalArgumentException
+   {
+     if (name.equals(IS_NAMESPACE_AWARE))
+       namespaceAware = ((Boolean) value).booleanValue();
+     else if (name.equals(IS_VALIDATING))
+       validating = ((Boolean) value).booleanValue();
+     else if (name.equals(IS_COALESCING))
+       coalescing = ((Boolean) value).booleanValue();
+     else if (name.equals(IS_REPLACING_ENTITY_REFERENCES))
+       replacingEntityReferences = ((Boolean) value).booleanValue();
+     else if (name.equals(IS_SUPPORTING_EXTERNAL_ENTITIES))
+       externalEntities = ((Boolean) value).booleanValue();
+     else if (name.equals(SUPPORT_DTD))
+       supportDTD = ((Boolean) value).booleanValue();
+     else if (name.equals(REPORTER))
+       reporter = (XMLReporter) value;
+     else if (name.equals(RESOLVER))
+       resolver = (XMLResolver) value;
+     else if (name.equals(ALLOCATOR))
+       allocator = (XMLEventAllocator) value;
+     else
+       throw new IllegalArgumentException(name);
+   }
+ 
+   public Object getProperty(String name)
+     throws IllegalArgumentException
+   {
+     if (name.equals(IS_NAMESPACE_AWARE))
+       return namespaceAware ? Boolean.TRUE : Boolean.FALSE;
+     if (name.equals(IS_VALIDATING))
+       return validating ? Boolean.TRUE : Boolean.FALSE;
+     if (name.equals(IS_COALESCING))
+       return coalescing ? Boolean.TRUE : Boolean.FALSE;
+     if (name.equals(IS_REPLACING_ENTITY_REFERENCES))
+       return replacingEntityReferences ? Boolean.TRUE : Boolean.FALSE;
+     if (name.equals(IS_SUPPORTING_EXTERNAL_ENTITIES))
+       return externalEntities ? Boolean.TRUE : Boolean.FALSE;
+     if (name.equals(SUPPORT_DTD))
+       return supportDTD ? Boolean.TRUE : Boolean.FALSE;
+     if (name.equals(REPORTER))
+       return reporter;
+     if (name.equals(RESOLVER))
+       return resolver;
+     if (name.equals(ALLOCATOR))
+       return allocator;
+     throw new IllegalArgumentException(name);
+   }
+ 
+   public boolean isPropertySupported(String name)
+   {
+     return name.equals(IS_NAMESPACE_AWARE) ||
+       name.equals(IS_VALIDATING) ||
+       name.equals(IS_COALESCING) ||
+       name.equals(IS_REPLACING_ENTITY_REFERENCES) ||
+       name.equals(IS_SUPPORTING_EXTERNAL_ENTITIES) ||
+       name.equals(SUPPORT_DTD) ||
+       name.equals(REPORTER) ||
+       name.equals(RESOLVER) ||
+       name.equals(ALLOCATOR);
+   }
+   
+   public void setEventAllocator(XMLEventAllocator allocator)
+   {
+     this.allocator = allocator;
+   }
+ 
+   public XMLEventAllocator getEventAllocator()
+   {
+     return allocator;
+   }
+ 
+   public void setCoalescing(boolean coalescing)
+   {
+     this.coalescing = coalescing;
+   }
+ 
+   public boolean isCoalescing()
+   {
+     return coalescing;
+   }
+ 
+   protected InputStream getInputStream(Source source)
+     throws XMLStreamException
+   {
+     InputStream in = null;
+     if (source instanceof StreamSource)
+       {
+         StreamSource streamSource = (StreamSource) source;
+         in = streamSource.getInputStream();
+       }
+     if (in == null)
+       {
+         String systemId = source.getSystemId();
+         try
+           {
+             URL url = new URL(systemId);
+             try
+               {
+                 in = url.openStream();
+               }
+             catch (IOException e2)
+               {
+                 XMLStreamException e3 = new XMLStreamException(e2);
+                 e3.initCause(e2);
+                 throw e3;
+               }
+           }
+         catch (MalformedURLException e)
+           {
+             // Fall back to relative file
+             if (File.separatorChar != '/')
+               systemId = systemId.replace('/', File.separatorChar);
+             try
+               {
+                 in = new FileInputStream(systemId);
+               }
+             catch (FileNotFoundException e2)
+               {
+                 XMLStreamException e3 = new XMLStreamException(e2);
+                 e3.initCause(e2);
+                 throw e3;
+               }
+           }
+       }
+     return in;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLOutputFactoryImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLOutputFactoryImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLOutputFactoryImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLOutputFactoryImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,154 ----
+ /* XMLOutputFactoryImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.io.Writer;
+ import java.io.UnsupportedEncodingException;
+ 
+ import javax.xml.stream.XMLEventWriter;
+ import javax.xml.stream.XMLOutputFactory;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.XMLStreamWriter;
+ 
+ /**
+  * Standard output factory.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XMLOutputFactoryImpl
+   extends XMLOutputFactory
+ {
+ 
+   protected boolean prefixDefaulting = false;
+ 
+   public XMLOutputFactoryImpl()
+   {
+   }
+ 
+   public XMLStreamWriter createXMLStreamWriter(Writer stream)
+     throws XMLStreamException
+   {
+     // XXX try to determine character encoding of writer?
+     return new XMLStreamWriterImpl(stream, null, prefixDefaulting);
+   }
+ 
+   public XMLStreamWriter createXMLStreamWriter(OutputStream stream)
+     throws XMLStreamException
+   {
+     return createXMLStreamWriter(stream, "UTF-8");
+   }
+ 
+   public XMLStreamWriter createXMLStreamWriter(OutputStream stream,
+                                                String encoding)
+     throws XMLStreamException
+   {
+     if (encoding == null)
+       encoding = "UTF-8";
+     try
+       {
+         Writer writer = new OutputStreamWriter(stream, encoding);
+         return new XMLStreamWriterImpl(writer, encoding, prefixDefaulting);
+       }
+     catch (UnsupportedEncodingException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public XMLEventWriter createXMLEventWriter(OutputStream stream)
+     throws XMLStreamException
+   {
+     XMLStreamWriter writer = createXMLStreamWriter(stream);
+     return new XMLEventWriterImpl(writer);
+   }
+ 
+   public XMLEventWriter createXMLEventWriter(OutputStream stream,
+                                              String encoding)
+     throws XMLStreamException
+   {
+     XMLStreamWriter writer = createXMLStreamWriter(stream, encoding);
+     return new XMLEventWriterImpl(writer);
+   }
+ 
+   public XMLEventWriter createXMLEventWriter(Writer stream)
+     throws XMLStreamException
+   {
+     XMLStreamWriter writer = createXMLStreamWriter(stream);
+     return new XMLEventWriterImpl(writer);
+   }
+ 
+   public void setProperty(String name, Object value)
+     throws IllegalArgumentException
+   {
+     if (IS_PREFIX_DEFAULTING.equals(name))
+       prefixDefaulting = ((Boolean) value).booleanValue();
+     else
+       throw new IllegalArgumentException(name);
+   }
+ 
+   public Object getProperty(String name)
+     throws IllegalArgumentException
+   {
+     if (IS_PREFIX_DEFAULTING.equals(name))
+       return new Boolean(prefixDefaulting);
+     throw new IllegalArgumentException(name);
+   }
+ 
+   public boolean isPropertySupported(String name)
+   {
+     if (IS_PREFIX_DEFAULTING.equals(name))
+       return true;
+     return false;
+   }
+ 
+   public boolean isPrefixDefaulting()
+   {
+     return prefixDefaulting;
+   }
+ 
+   public void setPrefixDefaulting(boolean value)
+   {
+     prefixDefaulting = value;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLStreamReaderImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLStreamReaderImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLStreamReaderImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLStreamReaderImpl.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,1037 ----
+ /* XMLStreamReaderImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.Reader;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.Map;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.parsers.SAXParser;
+ import javax.xml.parsers.SAXParserFactory;
+ import javax.xml.stream.Location;
+ import javax.xml.stream.XMLResolver;
+ import javax.xml.stream.XMLReporter;
+ import javax.xml.stream.XMLStreamConstants;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.XMLStreamReader;
+ 
+ import javax.xml.stream.events.Attribute;
+ import javax.xml.stream.events.Characters;
+ import javax.xml.stream.events.Comment;
+ import javax.xml.stream.events.DTD;
+ import javax.xml.stream.events.EndDocument;
+ import javax.xml.stream.events.EndElement;
+ import javax.xml.stream.events.EndEntity;
+ import javax.xml.stream.events.EntityDeclaration;
+ import javax.xml.stream.events.EntityReference;
+ import javax.xml.stream.events.Namespace;
+ import javax.xml.stream.events.NotationDeclaration;
+ import javax.xml.stream.events.ProcessingInstruction;
+ import javax.xml.stream.events.StartDocument;
+ import javax.xml.stream.events.StartElement;
+ import javax.xml.stream.events.StartEntity;
+ import javax.xml.stream.events.XMLEvent;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.ext.Attributes2;
+ import org.xml.sax.ext.DeclHandler;
+ import org.xml.sax.ext.LexicalHandler;
+ import org.xml.sax.ext.Locator2;
+ import org.xml.sax.helpers.NamespaceSupport;
+ 
+ /**
+  * An XML parser.
+  *
+  * This implementation uses SAX to create a series of events in memory,
+  * and then iterates over this series. This has the advantage of being simple
+  * and unifying the existing XML parsing code. However, it is quite
+  * memory-inefficient and obviously won't cope with streams of arbitrary
+  * length.
+  *
+  * A future task could be to write a real, progressive/incremental
+  * implementation of this class. In that case we should consider making that
+  * the default XML parser implementation and using a SAX wrapper to it to
+  * provide the GNU SAX implementation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XMLStreamReaderImpl
+   implements XMLStreamReader, NamespaceContext
+ {
+ 
+   private LinkedList events;
+   private XMLEvent currentEvent;
+   private int eventType;
+   private NamespaceSupport namespaces;
+ 
+   protected String publicId;
+   protected String systemId;
+ 
+   protected XMLResolver resolver;
+   protected XMLReporter reporter;
+   protected boolean validating;
+   protected boolean namespaceAware;
+   protected boolean coalescing;
+   protected boolean replacingEntityReferences;
+   protected boolean externalEntities;
+   protected boolean supportDTD;
+ 
+   protected XMLStreamReaderImpl(InputStream in,
+                                 String publicId,
+                                 String systemId,
+                                 XMLResolver resolver,
+                                 XMLReporter reporter,
+                                 boolean validating,
+                                 boolean namespaceAware,
+                                 boolean coalescing,
+                                 boolean replacingEntityReferences,
+                                 boolean externalEntities,
+                                 boolean supportDTD)
+     throws XMLStreamException
+   {
+     //this.in = in;
+     this.publicId = publicId;
+     this.systemId = systemId;
+     this.resolver = resolver;
+     this.reporter = reporter;
+     this.validating = validating;
+     this.namespaceAware = namespaceAware;
+     this.coalescing = coalescing;
+     this.replacingEntityReferences = replacingEntityReferences;
+     this.externalEntities = externalEntities;
+     this.supportDTD = supportDTD;
+     namespaces = new NamespaceSupport();
+     events = new LinkedList();
+     
+     // Configure the SAX parser and perform the parse
+     try
+       {
+         SAXParserFactory f = SAXParserFactory.newInstance();
+         f.setNamespaceAware(namespaceAware);
+         f.setValidating(validating);
+         SAXParser p = f.newSAXParser();
+         XMLReader r = p.getXMLReader();
+         CallbackHandler ch = this.new CallbackHandler(r);
+         r.setFeature("http://xml.org/sax/features/external-general-entities", 
+                      externalEntities);
+         r.setFeature("http://xml.org/sax/features/namespaces", 
+                      namespaceAware);
+         r.setContentHandler(ch);
+         r.setDTDHandler(ch);
+         r.setEntityResolver(ch);
+         r.setErrorHandler(ch);
+         r.setProperty("http://xml.org/sax/properties/lexical-handler",
+                       ch);
+         InputSource source = new InputSource(in);
+         source.setSystemId(systemId);
+         r.parse(source);
+       }
+     catch (SAXException e)
+       {
+         events.add(e);
+       }
+     catch (IOException e)
+       {
+         events.add(e);
+       }
+     catch (ParserConfigurationException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   protected XMLStreamReaderImpl(Reader reader,
+                                 String publicId,
+                                 String systemId,
+                                 XMLResolver resolver,
+                                 XMLReporter reporter,
+                                 boolean validating,
+                                 boolean namespaceAware,
+                                 boolean coalescing,
+                                 boolean replacingEntityReferences,
+                                 boolean externalEntities,
+                                 boolean supportDTD)
+     throws XMLStreamException
+   {
+     //this.reader = reader;
+     this.publicId = publicId;
+     this.systemId = systemId;
+     this.resolver = resolver;
+     this.reporter = reporter;
+     this.validating = validating;
+     this.namespaceAware = namespaceAware;
+     this.coalescing = coalescing;
+     this.replacingEntityReferences = replacingEntityReferences;
+     this.externalEntities = externalEntities;
+     this.supportDTD = supportDTD;
+     namespaces = new NamespaceSupport();
+     events = new LinkedList();
+     
+     // Configure the SAX parser and perform the parse
+     try
+       {
+         SAXParserFactory f = SAXParserFactory.newInstance();
+         f.setNamespaceAware(namespaceAware);
+         f.setValidating(validating);
+         SAXParser p = f.newSAXParser();
+         XMLReader r = p.getXMLReader();
+         CallbackHandler ch = this.new CallbackHandler(r);
+         r.setFeature("http://xml.org/sax/features/external-general-entities", 
+                      externalEntities);
+         r.setFeature("http://xml.org/sax/features/namespaces", 
+                      namespaceAware);
+         r.setContentHandler(ch);
+         r.setDTDHandler(ch);
+         r.setEntityResolver(ch);
+         r.setErrorHandler(ch);
+         r.setProperty("http://xml.org/sax/properties/lexical-handler",
+                       ch);
+         InputSource source = new InputSource(reader);
+         source.setSystemId(systemId);
+         r.parse(source);
+       }
+     catch (SAXException e)
+       {
+         events.add(e);
+       }
+     catch (IOException e)
+       {
+         events.add(e);
+       }
+     catch (ParserConfigurationException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public Object getProperty(String name)
+     throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException(name);
+   }
+ 
+   public int next()
+     throws XMLStreamException
+   {
+     if (events.isEmpty())
+       throw new XMLStreamException("EOF");
+     Object event = events.removeFirst();
+     if (event instanceof Exception)
+       {
+         Exception e = (Exception) event;
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+     currentEvent = (XMLEvent) event;
+     eventType = currentEvent.getEventType();
+     return eventType;
+   }
+ 
+   public void require(int type, String namespaceURI, String localName)
+     throws XMLStreamException
+   {
+     // TODO
+     throw new UnsupportedOperationException();
+   }
+ 
+   public String getElementText()
+     throws XMLStreamException
+   {
+     // TODO
+     throw new UnsupportedOperationException();
+   }
+ 
+   public int nextTag()
+     throws XMLStreamException
+   {
+     int ret;
+     do
+       {
+         ret = next();
+       }
+     while (ret != XMLStreamConstants.START_ELEMENT &&
+            ret != XMLStreamConstants.END_ELEMENT);
+     return ret;
+   }
+ 
+   public boolean hasNext()
+     throws XMLStreamException
+   {
+     return !events.isEmpty();
+   }
+ 
+   public void close()
+     throws XMLStreamException
+   {
+   }
+ 
+   public String getNamespaceURI(String prefix)
+   {
+     return namespaces.getURI(prefix);
+   }
+ 
+   public String getPrefix(String namespaceURI)
+   {
+     return namespaces.getPrefix(namespaceURI);
+   }
+ 
+   public Iterator getPrefixes(String namespaceURI)
+   {
+     LinkedList acc = new LinkedList();
+     for (Enumeration e = namespaces.getPrefixes(namespaceURI);
+          e.hasMoreElements(); )
+       acc.add(e.nextElement());
+     return acc.iterator();
+   }
+ 
+   public boolean isStartElement()
+   {
+     return eventType == START_ELEMENT;
+   }
+ 
+   public boolean isEndElement()
+   {
+     return eventType == END_ELEMENT;
+   }
+ 
+   public boolean isCharacters()
+   {
+     return eventType == CHARACTERS || eventType == CDATA;
+   }
+ 
+   public boolean isWhiteSpace()
+   {
+     return eventType == SPACE;
+   }
+ 
+   public String getAttributeValue(String namespaceURI, String localName)
+   {
+     StartElement se = (StartElement) currentEvent;
+     for (Iterator i = se.getAttributes(); i.hasNext(); )
+       {
+         Attribute attr = (Attribute) i.next();
+         QName name = attr.getName();
+         if (namespaceURI != null &&
+             !namespaceURI.equals(name.getNamespaceURI()))
+           continue;
+         if (!localName.equals(name.getLocalPart()))
+           continue;
+         return attr.getValue();
+       }
+     return null;
+   }
+ 
+   public int getAttributeCount()
+   {
+     StartElement se = (StartElement) currentEvent;
+     int count = 0;
+     for (Iterator i = se.getAttributes(); i.hasNext(); )
+       {
+         i.next();
+         count++;
+       }
+     return count;
+   }
+ 
+   public QName getAttributeQName(int index)
+   {
+     StartElement se = (StartElement) currentEvent;
+     int count = 0;
+     for (Iterator i = se.getAttributes(); i.hasNext(); )
+       {
+         Attribute attr = (Attribute) i.next();
+         if (index == count)
+           return attr.getName();
+         count++;
+       }
+     return null;
+   }
+ 
+   public String getAttributeNamespace(int index)
+   {
+     QName name = getAttributeQName(index);
+     return (name == null) ? null : name.getNamespaceURI();
+   }
+ 
+   public String getAttributeName(int index)
+   {
+     QName name = getAttributeQName(index);
+     return (name == null) ? null : name.getLocalPart();
+   }
+ 
+   public String getAttributePrefix(int index)
+   {
+     QName name = getAttributeQName(index);
+     return (name == null) ? null : name.getPrefix();
+   }
+ 
+   public String getAttributeType(int index)
+   {
+     StartElement se = (StartElement) currentEvent;
+     int count = 0;
+     for (Iterator i = se.getAttributes(); i.hasNext(); )
+       {
+         Attribute attr = (Attribute) i.next();
+         if (index == count)
+           {
+             QName type = attr.getDTDType();
+             return (type == null) ? "CDATA" : type.toString();
+           }
+         count++;
+       }
+     return null;
+   }
+ 
+   public String getAttributeValue(int index)
+   {
+     StartElement se = (StartElement) currentEvent;
+     int count = 0;
+     for (Iterator i = se.getAttributes(); i.hasNext(); )
+       {
+         Attribute attr = (Attribute) i.next();
+         if (index == count)
+           return attr.getValue();
+         count++;
+       }
+     return null;
+   }
+ 
+   public boolean isAttributeSpecified(int index)
+   {
+     StartElement se = (StartElement) currentEvent;
+     int count = 0;
+     for (Iterator i = se.getAttributes(); i.hasNext(); )
+       {
+         Attribute attr = (Attribute) i.next();
+         if (index == count)
+           return attr.isSpecified();
+         count++;
+       }
+     return false;
+   }
+ 
+   public int getNamespaceCount()
+   {
+     Iterator i = null;
+     switch (eventType)
+       {
+       case XMLStreamConstants.START_ELEMENT:
+         i = ((StartElement) currentEvent).getNamespaces();
+         break;
+       case XMLStreamConstants.END_ELEMENT:
+         i = ((EndElement) currentEvent).getNamespaces();
+         break;
+       default:
+         throw new IllegalStateException();
+       }
+     int count = 0;
+     while (i.hasNext())
+       {
+         i.next();
+         count++;
+       }
+     return count;
+   }
+ 
+   public String getNamespacePrefix(int index)
+   {
+     Iterator i = null;
+     switch (eventType)
+       {
+       case XMLStreamConstants.START_ELEMENT:
+         i = ((StartElement) currentEvent).getNamespaces();
+         break;
+       case XMLStreamConstants.END_ELEMENT:
+         i = ((EndElement) currentEvent).getNamespaces();
+         break;
+       default:
+         throw new IllegalStateException();
+       }
+     int count = 0;
+     while (i.hasNext())
+       {
+         Namespace ns = (Namespace) i.next();
+         if (index == count)
+           return ns.getPrefix();
+         count++;
+       }
+     return null;
+   }
+ 
+   public String getNamespaceURI(int index)
+   {
+     Iterator i = null;
+     switch (eventType)
+       {
+       case XMLStreamConstants.START_ELEMENT:
+         i = ((StartElement) currentEvent).getNamespaces();
+         break;
+       case XMLStreamConstants.END_ELEMENT:
+         i = ((EndElement) currentEvent).getNamespaces();
+         break;
+       default:
+         throw new IllegalStateException();
+       }
+     int count = 0;
+     while (i.hasNext())
+       {
+         Namespace ns = (Namespace) i.next();
+         if (index == count)
+           return ns.getNamespaceURI();
+         count++;
+       }
+     return null;
+   }
+ 
+   public NamespaceContext getNamespaceContext()
+   {
+     return this;
+   }
+ 
+   public int getEventType()
+   {
+     return eventType;
+   }
+ 
+   public String getText()
+   {
+     switch (eventType)
+       {
+       case XMLStreamConstants.CHARACTERS:
+       case XMLStreamConstants.CDATA:
+       case XMLStreamConstants.SPACE:
+         return ((Characters) currentEvent).getData();
+       case XMLStreamConstants.COMMENT:
+         return ((Comment) currentEvent).getText();
+       case XMLStreamConstants.ENTITY_REFERENCE:
+         return ((EntityReference) currentEvent).getReplacementText();
+       case XMLStreamConstants.DTD:
+         return ((DTD) currentEvent).getDocumentTypeDeclaration();
+       }
+     return null;
+   }
+ 
+   public char[] getTextCharacters()
+   {
+     String text = getText();
+     return (text == null) ? null : text.toCharArray();
+   }
+ 
+   public int getTextCharacters(int sourceStart, char[] target,
+                                int targetStart, int length)
+     throws XMLStreamException
+   {
+     char[] source = getTextCharacters();
+     int len = Math.min(source.length, length);
+     System.arraycopy(source, sourceStart, target, targetStart, len);
+     return len;
+   }
+ 
+   public int getTextStart()
+   {
+     return 0;
+   }
+ 
+   public int getTextLength()
+   {
+     String text = getText();
+     return (text == null) ? 0 : text.length();
+   }
+ 
+   public String getEncoding()
+   {
+     // XXX SAX doesn't provide this
+     return null;
+   }
+ 
+   public boolean hasText()
+   {
+     return eventType == CHARACTERS || eventType == DTD ||
+       eventType == SPACE || eventType == ENTITY_REFERENCE ||
+       eventType == COMMENT || eventType == DTD;
+   }
+ 
+   public Location getLocation()
+   {
+     return currentEvent.getLocation();
+   }
+ 
+   public QName getName()
+   {
+     switch (eventType)
+       {
+       case XMLStreamConstants.START_ELEMENT:
+         return ((StartElement) currentEvent).getName();
+       case XMLStreamConstants.END_ELEMENT:
+         return ((EndElement) currentEvent).getName();
+       case XMLStreamConstants.ATTRIBUTE:
+         return ((Attribute) currentEvent).getName();
+       }
+     return null;
+   }
+ 
+   public String getLocalName()
+   {
+     QName name = getName();
+     return (name == null) ? null : name.getLocalPart();
+   }
+ 
+   public boolean hasName()
+   {
+     return getName() != null;
+   }
+ 
+   public String getNamespaceURI()
+   {
+     QName name = getName();
+     return (name == null) ? null : name.getNamespaceURI();
+   }
+ 
+   public String getPrefix()
+   {
+     QName name = getName();
+     return (name == null) ? null : name.getPrefix();
+   }
+   
+   public String getVersion()
+   {
+     StartDocument sd = (StartDocument) currentEvent;
+     return sd.getVersion();
+   }
+ 
+   public boolean isStandalone()
+   {
+     StartDocument sd = (StartDocument) currentEvent;
+     return sd.isStandalone();
+   }
+ 
+   public boolean standaloneSet()
+   {
+     StartDocument sd = (StartDocument) currentEvent;
+     return sd.standaloneSet();
+   }
+   
+   public String getCharacterEncodingScheme()
+   {
+     StartDocument sd = (StartDocument) currentEvent;
+     return sd.getCharacterEncodingScheme();
+   }
+ 
+   public String getPITarget()
+   {
+     ProcessingInstruction pi = (ProcessingInstruction) currentEvent;
+     return pi.getTarget();
+   }
+ 
+   public String getPIData()
+   {
+     ProcessingInstruction pi = (ProcessingInstruction) currentEvent;
+     return pi.getData();
+   }
+ 
+   /**
+    * This class is used to construct the event series from SAX callbacks.
+    */
+   class CallbackHandler
+     implements ContentHandler, DTDHandler, LexicalHandler,
+                DeclHandler, EntityResolver, ErrorHandler
+   {
+ 
+     XMLReader reader;
+     Locator locator;
+     Location location;
+     private boolean inCDATA;
+     private LinkedList namespaces = new LinkedList();
+     private LinkedList notations;
+     private LinkedList entities;
+ 
+     CallbackHandler(XMLReader reader)
+     {
+       this.reader = reader;
+     }
+ 
+     public void setDocumentLocator(Locator locator)
+     {
+       this.locator = locator;
+       location = new LocationImpl(-1,
+                                   locator.getColumnNumber(),
+                                   locator.getLineNumber(),
+                                   locator.getSystemId());
+     }
+ 
+     public void startDocument()
+       throws SAXException
+     {
+       String version = (locator instanceof Locator2) ?
+         ((Locator2) locator).getXMLVersion() : null;
+       String encoding = (locator instanceof Locator2) ? 
+         ((Locator2) locator).getEncoding() : null;
+       boolean standalone =
+         reader.getFeature("http://xml.org/sax/features/is-standalone");
+       boolean standaloneDeclared = standalone;
+       boolean encodingDeclared = (encoding != null);
+       events.add(new StartDocumentImpl(location,
+                                        location.getLocationURI(),
+                                        encoding,
+                                        version,
+                                        standalone,
+                                        standaloneDeclared,
+                                        encodingDeclared));
+     }
+ 
+     public void endDocument()
+       throws SAXException
+     {
+       events.add(new EndDocumentImpl(location));
+     }
+     
+     public void startPrefixMapping(String prefix, String uri)
+       throws SAXException
+     {
+       namespaces.add(new NamespaceImpl(location, prefix, uri));
+     }
+ 
+     public void endPrefixMapping(String prefix)
+       throws SAXException
+     {
+     }
+ 
+     public void startElement(String namespaceURI, String localName,
+                              String qName, Attributes atts)
+       throws SAXException
+     {
+       LinkedList ns = namespaces;
+       namespaces = new LinkedList();
+       int ci = qName.indexOf(':');
+       String prefix = null;
+       localName = qName;
+       if (ci != -1)
+         {
+           prefix = qName.substring(0, ci);
+           localName = qName.substring(ci + 1);
+         }
+       QName name = new QName(namespaceURI, localName, prefix);
+       LinkedList attrs = new LinkedList();
+       StartElementImpl se = new StartElementImpl(location, name,
+                                                  attrs, ns, null);
+       events.add(se);
+       // Add namespaces
+       //for (Iterator i = ns.iterator(); i.hasNext(); )
+       //  events.add(i.next());
+       // Add attributes
+       int len = atts.getLength();
+       for (int i = 0; i < len; i++)
+         {
+           String attURI = atts.getURI(i);
+           String attQName = atts.getQName(i);
+           String value = atts.getValue(i);
+           QName type = QName.valueOf(atts.getType(i));
+           boolean specified = (atts instanceof Attributes2) &&
+             ((Attributes2) atts).isSpecified(i);
+           ci = attQName.indexOf(':');
+           String attPrefix = null;
+           String attLocalName = attQName;
+           if (ci != -1)
+             {
+               attPrefix = attQName.substring(0, ci);
+               attLocalName = attQName.substring(ci + 1);
+             }
+           if ("xmlns".equals(attPrefix) || "xmlns".equals(attQName))
+             continue;
+           QName attrName = new QName(attURI, attLocalName, attPrefix);
+           AttributeImpl attr = new AttributeImpl(location, attrName,
+                                                  value, type, specified);
+           attrs.add(attr);
+           //events.add(attr);
+         }
+     }
+ 
+     public void endElement(String namespaceURI, String localName,
+                            String qName)
+       throws SAXException
+     {
+       int ci = qName.indexOf(':');
+       String prefix = null;
+       localName = qName;
+       if (ci != -1)
+         {
+           prefix = qName.substring(0, ci);
+           localName = qName.substring(ci + 1);
+         }
+       QName name = new QName(namespaceURI, localName, prefix);
+       events.add(new EndElementImpl(location, name, new LinkedList()));
+       // TODO namespaces out of scope
+     }
+ 
+     public void characters(char[] ch, int start, int length)
+       throws SAXException
+     {
+       boolean whitespace = isWhitespace(ch, start, length);
+       events.add(new CharactersImpl(location, new String(ch, start, length),
+                                     whitespace, inCDATA, false));
+     }
+     
+     public void ignorableWhitespace(char[] ch, int start, int length)
+       throws SAXException
+     {
+       boolean whitespace = isWhitespace(ch, start, length);
+       events.add(new CharactersImpl(location, new String(ch, start, length),
+                                     whitespace, inCDATA, true));
+     }
+ 
+     boolean isWhitespace(char[] ch, int start, int len)
+     {
+       int end = start + len;
+       for (int i = start; i < end; i++)
+         {
+           char c = ch[i];
+           if (c != ' ' && c != '\t' && c != '\n' && c != '\r')
+             return false;
+         }
+       return true;
+     }
+ 
+     public void processingInstruction(String target, String data)
+       throws SAXException
+     {
+       events.add(new ProcessingInstructionImpl(location, target, data));
+     }
+ 
+     public void skippedEntity(String name)
+       throws SAXException
+     {
+     }
+ 
+     public void startDTD(String name, String publicId, String systemId)
+       throws SAXException
+     {
+       notations = new LinkedList();
+       entities = new LinkedList();
+       events.add(new DTDImpl(location, null, null, notations, entities));
+     }
+ 
+     public void endDTD()
+       throws SAXException
+     {
+     }
+ 
+     public void startEntity(String name)
+       throws SAXException
+     {
+       events.add(new StartEntityImpl(location, name));
+     }
+ 
+     public void endEntity(String name)
+       throws SAXException
+     {
+       events.add(new EndEntityImpl(location, name));
+     }
+ 
+     public void startCDATA()
+       throws SAXException
+     {
+       inCDATA = true;
+     }
+ 
+     public void endCDATA()
+       throws SAXException
+     {
+       inCDATA = false;
+     }
+ 
+     public void comment(char[] ch, int start, int length)
+       throws SAXException
+     {
+       events.add(new CommentImpl(location, new String(ch, start, length)));
+     }
+ 
+     public void notationDecl(String name, String publicId, String systemId)
+       throws SAXException
+     {
+       Object n = new NotationDeclarationImpl(location, name, publicId,
+                                              systemId);
+       notations.add(n);
+       //events.add(n);
+     }
+ 
+     public void unparsedEntityDecl(String name, String publicId,
+                                    String systemId, String notationName)
+       throws SAXException
+     {
+       Object e = new EntityDeclarationImpl(location, publicId, systemId,
+                                            name, notationName,
+                                            null, null);
+       entities.add(e);
+       //events.add(e);
+     }
+ 
+     public void elementDecl(String name, String model)
+       throws SAXException
+     {
+     }
+ 
+     public void attributeDecl(String eName, String aName, String type,
+                               String valueDefault, String value)
+       throws SAXException
+     {
+     }
+ 
+     public void internalEntityDecl(String name, String value)
+       throws SAXException
+     {
+       Object e = new EntityDeclarationImpl(location, null, null,
+                                            name, null, value, null);
+       entities.add(e);
+       //events.add(e);
+     }
+ 
+     public void externalEntityDecl(String name, String publicId,
+                                    String systemId)
+       throws SAXException
+     {
+       Object e = new EntityDeclarationImpl(location, publicId, systemId,
+                                            name, null, null, null);
+       entities.add(e);
+       //events.add(e);
+     }
+ 
+     public void warning(SAXParseException e)
+       throws SAXException
+     {
+       if (reporter != null)
+         {
+           try
+             {
+               reporter.report(e.getMessage(), "warning", e, location);
+             }
+           catch (XMLStreamException e2)
+             {
+               SAXException e3 = new SAXException(e2.getMessage());
+               e3.initCause(e2);
+               throw e3;
+             }
+         }
+     }
+     
+     public void error(SAXParseException e)
+       throws SAXException
+     {
+       if (reporter != null)
+         {
+           try
+             {
+               reporter.report(e.getMessage(), "error", e, location);
+             }
+           catch (XMLStreamException e2)
+             {
+               SAXException e3 = new SAXException(e2.getMessage());
+               e3.initCause(e2);
+               throw e3;
+             }
+         }
+     }
+     
+     public void fatalError(SAXParseException e)
+       throws SAXException
+     {
+       if (reporter != null)
+         {
+           try
+             {
+               reporter.report(e.getMessage(), "fatal-error", e, location);
+             }
+           catch (XMLStreamException e2)
+             {
+               SAXException e3 = new SAXException(e2.getMessage());
+               e3.initCause(e2);
+               throw e3;
+             }
+         }
+     }
+ 
+     public InputSource resolveEntity(String publicId, String systemId)
+       throws SAXException, IOException
+     {
+       if (resolver != null)
+         {
+           try
+             {
+               InputStream in = resolver.resolve(systemId);
+               if (in != null)
+                 {
+                   InputSource ret = new InputSource(in);
+                   ret.setPublicId(publicId);
+                   ret.setSystemId(systemId);
+                   return ret;
+                 }
+             }
+           catch (XMLStreamException e)
+             {
+               SAXException e2 = new SAXException(e.getMessage());
+               e2.initCause(e);
+               throw e2;
+             }
+         }
+       return null;
+     }
+     
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLStreamWriterImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLStreamWriterImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/stream/XMLStreamWriterImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/stream/XMLStreamWriterImpl.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,772 ----
+ /* XMLStreamWriterImpl.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.stream;
+ 
+ import java.io.IOException;
+ import java.io.Writer;
+ import java.util.Enumeration;
+ import java.util.HashSet;
+ import java.util.LinkedList;
+ import java.util.Set;
+ 
+ import javax.xml.XMLConstants;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.stream.XMLStreamException;
+ import javax.xml.stream.XMLStreamWriter;
+ 
+ import org.xml.sax.helpers.NamespaceSupport;
+ 
+ /**
+  * Simple XML stream writer.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XMLStreamWriterImpl
+   implements XMLStreamWriter
+ {
+ 
+   /**
+    * The underlying character stream to write to.
+    */
+   protected final Writer writer;
+ 
+   /**
+    * The encoding being used.
+    * Note that this must match the encoding of the character stream.
+    */
+   protected final String encoding;
+ 
+   /**
+    * Whether prefix defaulting is being used.
+    * If true and a prefix has not been defined for a namespace specified on
+    * an element or an attribute, a new prefix and namespace declaration will
+    * be created.
+    */
+   protected final boolean prefixDefaulting;
+ 
+   /**
+    * The namespace context used to determine the namespace-prefix mappings
+    * in scope.
+    */
+   protected NamespaceContext namespaceContext;
+   
+   /**
+    * The stack of elements in scope.
+    * Used to close the remaining elements.
+    */
+   private LinkedList elements;
+ 
+   /**
+    * Whether a start element has been opened but not yet closed.
+    */
+   private boolean inStartElement;
+ 
+   /**
+    * Whether we are in an empty element.
+    */
+   private boolean emptyElement;
+   
+   private NamespaceSupport namespaces;
+   private int count = 0;
+ 
+   /**
+    * Constructor.
+    * @see #writer
+    * @see #encoding
+    * @see #prefixDefaulting
+    */
+   protected XMLStreamWriterImpl(Writer writer, String encoding,
+                                 boolean prefixDefaulting)
+   {
+     this.writer = writer;
+     this.encoding = encoding;
+     this.prefixDefaulting = prefixDefaulting;
+     elements = new LinkedList();
+     namespaces = new NamespaceSupport();
+   }
+ 
+   /**
+    * Write the end of a start-element event.
+    * This will close the element if it was defined to be an empty element.
+    */
+   private void endStartElement()
+     throws IOException
+   {
+     if (!inStartElement)
+       return;
+     if (emptyElement)
+       {
+         writer.write('/');
+         elements.removeLast();
+         namespaces.popContext();
+         emptyElement = false;
+       }
+     writer.write('>');
+     inStartElement = false;
+   }
+ 
+   public void writeStartElement(String localName)
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+         namespaces.pushContext();
+         
+         writer.write('<');
+         writer.write(localName);
+         
+         elements.addLast(new String[] { null, localName });
+         inStartElement = true;
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeStartElement(String namespaceURI, String localName)
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+         namespaces.pushContext();
+         
+         String prefix = getPrefix(namespaceURI);
+         boolean isDeclared = (prefix != null);
+         if (!isDeclared)
+           {
+             if (prefixDefaulting)
+               prefix = createPrefix(namespaceURI);
+             else
+               throw new XMLStreamException("namespace " + namespaceURI +
+                                            " has not been declared");
+           }
+         writer.write('<');
+         if (!"".equals(prefix))
+           {
+             writer.write(prefix);
+             writer.write(':');
+           }
+         writer.write(localName);
+         inStartElement = true;
+         if (!isDeclared)
+           {
+             writeNamespace(prefix, namespaceURI);
+           }
+         
+         elements.addLast(new String[] { prefix, localName });
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   /**
+    * Creates a new unique prefix in the document.
+    * Subclasses may override this method to provide a suitably unique prefix
+    * for the given namespace.
+    * @param namespaceURI the namespace URI
+    */
+   protected String createPrefix(String namespaceURI)
+   {
+     Set prefixes = new HashSet();
+     for (Enumeration e = namespaces.getPrefixes(); e.hasMoreElements(); )
+       prefixes.add(e.nextElement());
+     String ret;
+     do
+       {
+         ret = "ns" + (count++);
+       }
+     while (prefixes.contains(ret));
+     return ret;
+   }
+ 
+   public void writeStartElement(String prefix, String localName,
+                                 String namespaceURI)
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+         namespaces.pushContext();
+         
+         String currentPrefix = getPrefix(namespaceURI);
+         boolean isCurrent = prefix.equals(currentPrefix);
+         writer.write('<');
+         if (!"".equals(prefix))
+           {
+             writer.write(prefix);
+             writer.write(':');
+           }
+         writer.write(localName);
+         if (prefixDefaulting && !isCurrent)
+           {
+             writeNamespace(prefix, namespaceURI);
+           }
+         
+         elements.addLast(new String[] { prefix, localName });
+         inStartElement = true;
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeEmptyElement(String namespaceURI, String localName)
+     throws XMLStreamException
+   {
+     writeStartElement(namespaceURI, localName);
+     emptyElement = true;
+   }
+ 
+   public void writeEmptyElement(String prefix, String localName,
+                                 String namespaceURI)
+     throws XMLStreamException
+   {
+     writeStartElement(prefix, localName, namespaceURI);
+     emptyElement = true;
+   }
+ 
+   public void writeEmptyElement(String localName)
+     throws XMLStreamException
+   {
+     writeStartElement(localName);
+     emptyElement = true;
+   }
+ 
+   public void writeEndElement()
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+         String[] element = (String[]) elements.removeLast();
+         namespaces.popContext();
+ 
+         writer.write('<');
+         writer.write('/');
+         if (element[0] != null && !"".equals(element[0]))
+           {
+             writer.write(element[0]);
+             writer.write(':');
+           }
+         writer.write(element[1]);
+         writer.write('>');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeEndDocument()
+     throws XMLStreamException
+   {
+     while (!elements.isEmpty())
+       writeEndElement();
+   }
+ 
+   public void close()
+     throws XMLStreamException
+   {
+     flush();
+   }
+ 
+   public void flush()
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.flush();
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeAttribute(String localName, String value)
+     throws XMLStreamException
+   {
+     if (!inStartElement)
+       throw new IllegalStateException();
+     try
+       {
+         writer.write(' ');
+         writer.write(localName);
+         writer.write('=');
+         writer.write('"');
+         writeEncoded(value, true);
+         writer.write('"');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeAttribute(String prefix, String namespaceURI,
+                              String localName, String value)
+     throws XMLStreamException
+   {
+     if (!inStartElement)
+       throw new IllegalStateException();
+     try
+       {
+         String currentPrefix = getPrefix(namespaceURI);
+         if (currentPrefix == null)
+           {
+             if (prefixDefaulting)
+               writeNamespace(prefix, namespaceURI);
+             else
+               throw new XMLStreamException("namespace " + namespaceURI +
+                                            " is not bound");
+           }
+         else if (!currentPrefix.equals(prefix))
+           throw new XMLStreamException("namespace " + namespaceURI +
+                                        " is bound to prefix " +
+                                        currentPrefix);
+         writer.write(' ');
+         if (!"".equals(prefix))
+           {
+             writer.write(prefix);
+             writer.write(':');
+           }
+         writer.write(localName);
+         writer.write('=');
+         writer.write('"');
+         writeEncoded(value, true);
+         writer.write('"');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeAttribute(String namespaceURI, String localName,
+                              String value)
+     throws XMLStreamException
+   {
+     if (!inStartElement)
+       throw new IllegalStateException();
+     try
+       {
+         String prefix = getPrefix(namespaceURI);
+         if (prefix == null)
+           {
+             if (prefixDefaulting)
+               {
+                 prefix = XMLConstants.DEFAULT_NS_PREFIX;
+                 writeNamespace(prefix, namespaceURI);
+               }
+             else
+               throw new XMLStreamException("namespace " + namespaceURI +
+                                            " is not bound");
+           }
+         writer.write(' ');
+         if (!"".equals(prefix))
+           {
+             writer.write(prefix);
+             writer.write(':');
+           }
+         writer.write(localName);
+         writer.write('=');
+         writer.write('"');
+         writeEncoded(value, true);
+         writer.write('"');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeNamespace(String prefix, String namespaceURI)
+     throws XMLStreamException
+   {
+     if (!inStartElement)
+       throw new IllegalStateException();
+     try
+       {
+         if (prefix == null)
+           prefix = XMLConstants.DEFAULT_NS_PREFIX;
+ 
+         setPrefix(prefix, namespaceURI);
+         
+         writer.write(' ');
+         writer.write("xmlns");
+         if (!XMLConstants.DEFAULT_NS_PREFIX.equals(prefix))
+           {
+             writer.write(':');
+             writer.write(prefix);
+           }
+         writer.write('=');
+         writer.write('"');
+         writer.write(namespaceURI);
+         writer.write('"');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeDefaultNamespace(String namespaceURI)
+     throws XMLStreamException
+   {
+     writeNamespace(XMLConstants.DEFAULT_NS_PREFIX, namespaceURI);
+   }
+ 
+   public void writeComment(String data)
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+         
+         if (data != null && data.indexOf("--") != -1)
+           throw new IllegalArgumentException(data);
+         
+         writer.write("<!--");
+         if (data != null)
+           writer.write(data);
+         writer.write("-->");
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeProcessingInstruction(String target)
+     throws XMLStreamException
+   {
+     writeProcessingInstruction(target, null);
+   }
+ 
+   public void writeProcessingInstruction(String target, String data)
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+ 
+         writer.write('<');
+         writer.write('?');
+         writer.write(target);
+         if (data != null)
+           {
+             writer.write(' ');
+             writer.write(data);
+           }
+         writer.write('?');
+         writer.write('>');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeCData(String data)
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+ 
+         if (data.indexOf("]]") != -1)
+           throw new IllegalArgumentException(data);
+ 
+         writer.write("<![CDATA[");
+         writer.write(data);
+         writer.write("]]>");
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeDTD(String dtd)
+     throws XMLStreamException
+   {
+     try
+       {
+         writer.write("<!DOCTYPE ");
+         writer.write(dtd);
+         writer.write('>');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeEntityRef(String name)
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+ 
+         writer.write('&');
+         writer.write(name);
+         writer.write(';');
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeStartDocument()
+     throws XMLStreamException
+   {
+     writeStartDocument(null, null);
+   }
+ 
+   public void writeStartDocument(String version)
+     throws XMLStreamException
+   {
+     writeStartDocument(null, version);
+   }
+ 
+   public void writeStartDocument(String encoding, String version)
+     throws XMLStreamException
+   {
+     if (version == null)
+       version = "1.0";
+     encoding = this.encoding; // YES: the parameter must be ignored
+     if (encoding == null)
+       encoding = "UTF-8";
+     if (!"1.0".equals(version) && !"1.1".equals(version))
+       throw new IllegalArgumentException(version);
+     try
+       {
+         writer.write("<?xml version=\"");
+         writer.write(version);
+         writer.write("\" encoding=\"");
+         writer.write(encoding);
+         writer.write("\"?>");
+         writer.write(System.getProperty("line.separator"));
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeCharacters(String text)
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+ 
+         if (text != null)
+           writeEncoded(text, false);
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public void writeCharacters(char[] text, int start, int len)
+     throws XMLStreamException
+   {
+     try
+       {
+         endStartElement();
+ 
+         int end = start + len;
+         len = 0;
+         for (int i = start; i < end; i++)
+           {
+             char c = text[i];
+             if (c == '<' || c == '>' || c == '&')
+               {
+                 writer.write(text, start, len);
+                 if (c == '<')
+                   writer.write("&lt;");
+                 else if (c == '>')
+                   writer.write("&gt;");
+                 else
+                   writer.write("&amp;");
+                 start = i + 1;
+                 len = 0;
+               }
+             else
+               len++;
+           }
+         if (len > 0)
+           writer.write(text, start, len);
+       }
+     catch (IOException e)
+       {
+         XMLStreamException e2 = new XMLStreamException(e);
+         e2.initCause(e);
+         throw e2;
+       }
+   }
+ 
+   public String getPrefix(String uri)
+     throws XMLStreamException
+   {
+     String prefix = namespaces.getPrefix(uri);
+     if (prefix == null && namespaceContext != null)
+       prefix = namespaceContext.getPrefix(uri);
+     return prefix;
+   }
+ 
+   public void setPrefix(String prefix, String uri)
+     throws XMLStreamException
+   {
+     if (!namespaces.declarePrefix(prefix, uri))
+       throw new XMLStreamException("illegal prefix " + prefix);
+   }
+ 
+   public void setDefaultNamespace(String uri)
+     throws XMLStreamException
+   {
+     if (!namespaces.declarePrefix(XMLConstants.DEFAULT_NS_PREFIX, uri))
+       throw new XMLStreamException("illegal default namespace prefix");
+   }
+ 
+   public void setNamespaceContext(NamespaceContext context)
+     throws XMLStreamException
+   {
+     namespaceContext = context;
+   }
+ 
+   public NamespaceContext getNamespaceContext()
+   {
+     return namespaceContext;
+   }
+ 
+   public Object getProperty(String name)
+     throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException(name);
+   }
+ 
+   /**
+    * Write the specified text, ensuring that the content is suitably encoded
+    * for XML.
+    * @param text the text to write
+    * @param inAttr whether we are in an attribute value
+    */
+   private void writeEncoded(String text, boolean inAttr)
+     throws IOException
+   {
+     char[] chars = text.toCharArray();
+     int start = 0;
+     int end = chars.length;
+     int len = 0;
+     for (int i = start; i < end; i++)
+       {
+         char c = chars[i];
+         if (c == '<' || c == '>' || c == '&')
+           {
+             writer.write(chars, start, len);
+             if (c == '<')
+               writer.write("&lt;");
+             else if (c == '>')
+               writer.write("&gt;");
+             else
+               writer.write("&amp;");
+             start = i + 1;
+             len = 0;
+           }
+         else if (inAttr && (c == '"' || c == '\''))
+           {
+             writer.write(chars, start, len);
+             if (c == '"')
+               writer.write("&quot;");
+             else
+               writer.write("&apos;");
+             start = i + 1;
+             len = 0;
+           }
+         else
+           len++;
+       }
+     if (len > 0)
+       writer.write(chars, start, len);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/AbstractNumberNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/AbstractNumberNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/AbstractNumberNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/AbstractNumberNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,328 ----
+ /* AbstractNumberNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing the XSL <code>number</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ abstract class AbstractNumberNode
+   extends TemplateNode
+ {
+ 
+   static final int ALPHABETIC = 0;
+   static final int TRADITIONAL = 1;
+ 
+   final TemplateNode format;
+   final String lang;
+   final int letterValue;
+   final String groupingSeparator;
+   final int groupingSize;
+ 
+   AbstractNumberNode(TemplateNode format, String lang,
+                      int letterValue, String groupingSeparator,
+                      int groupingSize)
+   {
+     this.format = format;
+     this.lang = lang;
+     this.letterValue = letterValue;
+     this.groupingSeparator = groupingSeparator;
+     this.groupingSize = groupingSize;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Document doc = (parent instanceof Document) ? (Document) parent :
+       parent.getOwnerDocument();
+     DocumentFragment fragment = doc.createDocumentFragment();
+     format.apply(stylesheet, mode, context, pos, len, fragment, null);
+     String f = Expr._string(context, Collections.singleton(fragment));
+     String value = format(f, compute(stylesheet, context, pos, len));
+     Text text = doc.createTextNode(value);
+     if (nextSibling != null)
+       {
+         parent.insertBefore(text, nextSibling);
+       }
+     else
+       {
+         parent.appendChild(text);
+       }
+     // xsl:number doesn't process children
+     if (next != null)
+       {
+         next.apply(stylesheet, mode, 
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+ 
+   String format(String format, int[] number)
+   {
+     if (number.length == 0)
+       {
+         return "";
+       }
+     int start = 0, end = 0, len = format.length(); // region of format
+     // Tokenize
+     List tokens = new ArrayList((number.length * 2) + 1);
+     List types = new ArrayList(tokens.size());
+     while (end < len)
+       {
+         while (end < len && !isAlphanumeric(format.charAt(end)))
+           {
+             end++;
+           }
+         if (end > start)
+           {
+             tokens.add(format.substring(start, end));
+             types.add(Boolean.FALSE);
+           }
+         start = end;
+         while (end < len && isAlphanumeric(format.charAt(end)))
+           {
+             end++;
+           }
+         if (end > start)
+           {
+             tokens.add(format.substring(start, end));
+             types.add(Boolean.TRUE);
+           }
+         start = end;
+       }
+     // Process tokens
+     StringBuffer buf = new StringBuffer();
+     len = tokens.size();
+     int pos = 0;
+     for (int i = 0; i < len; i++)
+       {
+         String token = (i < 0) ? "." : (String) tokens.get(i);
+         boolean alpha = (i < 0) ? true : 
+           ((Boolean) types.get(i)).booleanValue();
+         if (!alpha)
+           {
+             buf.append(token);
+           }
+         else
+           {
+             if (pos < number.length)
+               {
+                 format(buf, number[pos++], token);
+                 if (((i + 1 == len) || (i + 2 == len)) &&
+                     (pos < number.length))
+                   {
+                     // More numbers than tokens, reuse last token
+                     i -= 2;
+                   }
+               }
+             if (pos == number.length && i < (len - 2))
+               {
+                 // No more numbers. Skip to the end...
+                 i = len - 2;
+                 if (((Boolean) types.get(i + 1)).booleanValue())
+                   {
+                     // number formatting token, ignore
+                     i++;
+                   }
+               }
+           }
+       }
+     //System.err.println("format: '"+format+"' "+asList(number)+" = '"+buf.toString()+"'");
+     return buf.toString();
+   }
+ 
+   /*List asList(int[] number)
+     {
+       List l = new ArrayList();
+       for (int i = 0; i < number.length; i++)
+         l.add(new Integer(number[i]));
+       return l;
+     }*/
+ 
+   void format(StringBuffer buf, int number, String formatToken)
+   {
+     int len = formatToken.length();
+     char c = formatToken.charAt(len - 1);
+     if (Character.digit(c, 10) == 1)
+       {
+         // Check preceding characters
+         for (int i = len - 2; i >= 0; i--)
+           {
+             if (formatToken.charAt(i) != (c - 1))
+               {
+                 format(buf, number, "1");
+                 return;
+               }
+           }
+         // Decimal representation
+         String val = Integer.toString(number);
+         for (int d = len - val.length(); d > 0; d--)
+           {
+             buf.append('0');
+           }
+         buf.append(val);
+       }
+     else if ("A".equals(formatToken))
+       {
+         buf.append(alphabetic('@', number));
+       }
+     else if ("a".equals(formatToken))
+       {
+         buf.append(alphabetic('`', number));
+       }
+     else if ("i".equals(formatToken))
+       {
+         buf.append(roman(false, number));
+       }
+     else if ("I".equals(formatToken))
+       {
+         buf.append(roman(true, number));
+       }
+     else
+       {
+         // Unknown numbering sequence
+         format(buf, number, "1");
+       }
+   }
+ 
+   static final boolean isAlphanumeric(char c)
+   {
+     switch (Character.getType(c))
+       {
+       case Character.DECIMAL_DIGIT_NUMBER: // Nd
+       case Character.LETTER_NUMBER: // Nl
+       case Character.OTHER_NUMBER: // No
+       case Character.UPPERCASE_LETTER: // Lu
+       case Character.LOWERCASE_LETTER: // Ll
+       case Character.TITLECASE_LETTER: // Lt
+       case Character.MODIFIER_LETTER: // Lm
+       case Character.OTHER_LETTER: // Lo
+         return true;
+       default:
+         return false;
+       }
+   }
+ 
+   static final String alphabetic(char offset, int number)
+   {
+     StringBuffer buf = new StringBuffer();
+     while (number > 0)
+       {
+         int r = number % 26;
+         number = number / 26;
+         buf.insert(0, (char) (offset + r));
+       }
+     return buf.toString();
+   }
+ 
+   static final int[] roman_numbers = {1, 5, 10, 50, 100, 500, 1000};
+   static final char[] roman_chars = {'i', 'v', 'x', 'l', 'c', 'd', 'm'};
+ 
+   static final String roman(boolean upper, int number)
+   {
+     StringBuffer buf = new StringBuffer();
+     for (int pos = roman_numbers.length - 1; pos >= 0; pos -= 2)
+       {
+         int f = number / roman_numbers[pos];
+         if (f != 0)
+           {
+             number = number % (f * roman_numbers[pos]);
+           }
+         if (f > 4 && f < 9)
+           {
+             buf.append(roman_chars[pos + 1]);
+             f -= 5;
+           }
+         if (f == 4)
+           {
+             buf.append(roman_chars[pos]);
+             buf.append(roman_chars[pos + 1]);
+           }
+         else if (f == 9)
+           {
+             buf.append(roman_chars[pos]);
+             buf.append(roman_chars[pos + 2]);
+           }
+         else
+           {
+             for (; f > 0; f--)
+               {
+                 buf.append(roman_chars[pos]);
+               }
+           }
+       }
+     return upper ? buf.toString().toUpperCase() : buf.toString();
+   }
+   
+   abstract int[] compute(Stylesheet stylesheet, Node context, int pos, int len)
+     throws TransformerException;
+ 
+   public boolean references(QName var)
+   {
+     if (format.references(var))
+       {
+         return true;
+       }
+     return super.references(var);
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("format=");
+     buf.append(format);
+     buf.append(']');
+     return buf.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ApplyImportsNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ApplyImportsNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ApplyImportsNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ApplyImportsNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,86 ----
+ /* ApplyImportsNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A template node representing an XSLT <code>apply-imports</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ApplyImportsNode
+   extends TemplateNode
+ {
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new ApplyImportsNode();
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+   
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     TemplateNode t = stylesheet.getTemplate(mode, context, true);
+     if (t != null)
+       {
+         t.apply(stylesheet, mode, context, pos, len,
+                 parent, nextSibling);
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode, context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ApplyTemplatesNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ApplyTemplatesNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ApplyTemplatesNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ApplyTemplatesNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,235 ----
+ /* ApplyTemplatesNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing the XSL <code>apply-templates</code>
+  * instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ApplyTemplatesNode
+   extends TemplateNode
+ {
+ 
+   final Expr select;
+   final QName mode;
+   final List sortKeys;
+   final List withParams;
+   final boolean isDefault;
+ 
+   ApplyTemplatesNode(Expr select, QName mode,
+                      List sortKeys, List withParams, boolean isDefault)
+   {
+     this.select = select;
+     this.mode = mode;
+     this.sortKeys = sortKeys;
+     this.withParams = withParams;
+     this.isDefault = isDefault;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     int len = sortKeys.size();
+     List sortKeys2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         sortKeys2.add(((Key) sortKeys.get(i)).clone(stylesheet));
+       }
+     len = withParams.size();
+     List withParams2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         withParams2.add(((WithParam) withParams.get(i)).clone(stylesheet));
+       }
+     TemplateNode ret = new ApplyTemplatesNode(select.clone(stylesheet),
+                                               mode, sortKeys2, withParams2,
+                                               isDefault);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Object ret = select.evaluate(context, pos, len);
+     if (ret != null && ret instanceof Collection)
+       {
+         if (withParams != null)
+           {
+             // compute the parameter values
+             LinkedList values = new LinkedList();
+             for (Iterator i = withParams.iterator(); i.hasNext(); )
+               {
+                 WithParam p = (WithParam) i.next();
+                 Object value = p.getValue(stylesheet, mode, context, pos, len);
+                 Object[] pair = new Object[2];
+                 pair[0] = p.name;
+                 pair[1] = value;
+                 values.add(pair);
+               }
+             // push the parameter context
+             stylesheet.bindings.push(Bindings.WITH_PARAM);
+             // set the parameters
+             for (Iterator i = values.iterator(); i.hasNext(); )
+               {
+                 Object[] pair = (Object[]) i.next();
+                 QName name = (QName) pair[0];
+                 Object value = pair[1];
+                 stylesheet.bindings.set(name, value, Bindings.WITH_PARAM);
+               }
+           }
+         Collection ns = (Collection) ret;
+         List nodes = new ArrayList(ns);
+         if (sortKeys != null)
+           {
+             for (Iterator i = sortKeys.iterator(); i.hasNext(); )
+               {
+                 SortKey sortKey = (SortKey) i.next();
+                 sortKey.init(stylesheet, mode, context, pos, len, parent,
+                              nextSibling);
+               }
+             Collections.sort(nodes, new XSLComparator(sortKeys));
+           }
+         else
+           {
+             Collections.sort(nodes, documentOrderComparator);
+           }
+         int l = nodes.size();
+         QName effectiveMode = isDefault ? mode : this.mode;
+         for (int i = 0; i < l; i++)
+           {
+             Node node = (Node) nodes.get(i);
+             TemplateNode t = stylesheet.getTemplate(effectiveMode, node,
+                                                     false);
+             if (t != null)
+               {
+                 stylesheet.current = node;
+                 t.apply(stylesheet, effectiveMode, node, i + 1, l,
+                         parent, nextSibling);
+               }
+           }
+         if (withParams != null)
+           {
+             // pop the variable context
+             stylesheet.bindings.pop(Bindings.WITH_PARAM);
+           }
+       }
+     // apply-templates doesn't have processable children
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+ 
+   public boolean references(QName var)
+   {
+     if (select != null && select.references(var))
+       {
+         return true;
+       }
+     if (withParams != null)
+       {
+         for (Iterator i = withParams.iterator(); i.hasNext(); )
+           {
+             if (((WithParam) i.next()).references(var))
+               {
+                 return true;
+               }
+           }
+       }
+     if (sortKeys != null)
+       {
+         for (Iterator i = sortKeys.iterator(); i.hasNext(); )
+           {
+             if (((SortKey) i.next()).references(var))
+               {
+                 return true;
+               }
+           }
+       }
+     return super.references(var);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     boolean o = false;
+     if (select != null)
+       {
+         buf.append("select=");
+         buf.append(select);
+         o = true;
+       }
+     if (mode != null)
+       {
+         if (o)
+           {
+             buf.append(',');
+           }
+         buf.append("mode=");
+         buf.append(mode);
+       }
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/AttributeNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/AttributeNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/AttributeNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/AttributeNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,264 ----
+ /* AttributeNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.XMLConstants;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing an XSL <code>attribute</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class AttributeNode
+   extends TemplateNode
+ {
+ 
+   final TemplateNode name;
+   final TemplateNode namespace;
+   final Node source;
+   
+   AttributeNode(TemplateNode name,
+                 TemplateNode namespace, Node source)
+   {
+     this.name = name;
+     this.namespace = namespace;
+     this.source = source;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new AttributeNode(name.clone(stylesheet),
+                                          (namespace == null) ? null :
+                                          namespace.clone(stylesheet),
+                                          source);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Document doc = (parent instanceof Document) ? (Document) parent :
+       parent.getOwnerDocument();
+     // Create a document fragment to hold the name
+     DocumentFragment fragment = doc.createDocumentFragment();
+     // Apply name to the fragment
+     name.apply(stylesheet, mode,
+                context, pos, len,
+                fragment, null);
+     // Use XPath string-value of fragment
+     String nameValue = Expr.stringValue(fragment);
+   
+     String namespaceValue = null;
+     if (namespace != null)
+       {  
+         // Create a document fragment to hold the namespace
+         fragment = doc.createDocumentFragment();
+         // Apply namespace to the fragment
+         namespace.apply(stylesheet, mode,
+                         context, pos, len,
+                         fragment, null);
+         // Use XPath string-value of fragment
+         namespaceValue = Expr.stringValue(fragment);
+         if (namespaceValue.length() == 0)
+           {
+             namespaceValue = null;
+           }
+       }
+     
+     String prefix = getPrefix(nameValue);
+     if (namespaceValue == null)
+       {
+         if (prefix != null)
+           {
+             if (XMLConstants.XML_NS_PREFIX.equals(prefix))
+               {
+                 namespaceValue = XMLConstants.XML_NS_URI;
+               }
+             else
+               {
+                 // Resolve namespace for this prefix
+                 namespaceValue = source.lookupNamespaceURI(prefix);
+               }
+           }
+       }
+     else
+       {
+         if (prefix != null)
+           {
+             String ns2 = source.lookupNamespaceURI(prefix);
+             if (ns2 != null && !ns2.equals(namespaceValue))
+               {
+                 // prefix clashes, reset it
+                 prefix = null;
+                 int ci = nameValue.indexOf(':');
+                 nameValue = nameValue.substring(ci + 1);
+               }
+           }
+       }
+     if (prefix == null)
+       {
+         // Resolve prefix for this namespace
+         prefix = source.lookupPrefix(namespaceValue);
+         if (prefix != null)
+           {
+             nameValue = prefix + ":" + nameValue;
+           }
+         else
+           {
+             if (namespaceValue != null)
+               {
+                 // Must invent a prefix
+                 prefix = inventPrefix(parent);
+                 nameValue = prefix + ":" + nameValue;
+               }
+           }
+       }
+     NamedNodeMap attrs = parent.getAttributes();
+     boolean insert = true;
+     if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceValue) ||
+         XMLConstants.XMLNS_ATTRIBUTE.equals(nameValue) ||
+         nameValue.startsWith("xmlns:"))
+       {
+         // Namespace declaration, do not output
+         insert = false;
+       }
+     if (prefix != null && namespaceValue == null)
+       {
+         // Not a QName
+         insert = false;
+       }
+     if (parent.getNodeType() == Node.ELEMENT_NODE &&
+         parent.getFirstChild() != null)
+       {
+         // XSLT 7.1.3 Adding an attribute to an element after children have
+         // been added to it is an error
+         insert = false;
+       }
+     if (insert)
+       {
+         // Insert attribute
+         Attr attr = (namespaceValue != null) ?
+           doc.createAttributeNS(namespaceValue, nameValue) :
+               doc.createAttribute(nameValue);
+         if (attrs != null)
+           {
+             if (namespace != null)
+               {
+                 attrs.setNamedItemNS(attr);
+               }
+             else
+               {
+                 attrs.setNamedItem(attr);
+               }
+           }
+         if (children != null)
+           {
+             children.apply(stylesheet, mode,
+                            context, pos, len,
+                            attr, null);
+           }
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+ 
+   final String getPrefix(String name)
+   {
+     int ci = name.indexOf(':');
+     return (ci == -1) ? null : name.substring(0, ci);
+   }
+ 
+   final String inventPrefix(Node parent)
+   {
+     String base = "ns";
+     int count = 0;
+     String ret = base + Integer.toString(count);
+     while (parent.lookupNamespaceURI(ret) != null)
+       {
+         count++;
+         ret = base + Integer.toString(count);
+       }
+     return ret;
+   }
+ 
+   public boolean references(QName var)
+   {
+     if (name != null && name.references(var))
+       {
+         return true;
+       }
+     if (namespace != null && namespace.references(var))
+       {
+         return true;
+       }
+     return super.references(var);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("name=");
+     buf.append(name);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/AttributeSet.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/AttributeSet.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/AttributeSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/AttributeSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* AttributeSet.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ /**
+  * An attribute-set entry in a stylesheet.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class AttributeSet
+ {
+ 
+   final TemplateNode children;
+   final String name;
+   final String uas;
+ 
+   AttributeSet(TemplateNode children, String name, String uas)
+   {
+     this.children = children;
+     this.name = name;
+     this.uas = uas;
+   }
+ 
+   AttributeSet clone(Stylesheet stylesheet)
+   {
+     return new AttributeSet((children == null) ? null :
+                             children.clone(stylesheet),
+                             name, uas);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/Bindings.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/Bindings.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/Bindings.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/Bindings.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,325 ----
+ /* Bindings.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.Map;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathVariableResolver;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The set of variable bindings in effect for a stylesheet.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class Bindings
+   implements XPathVariableResolver, Cloneable
+ {
+ 
+   static final int VARIABLE = 0;
+   static final int PARAM = 1;
+   static final int WITH_PARAM = 2;
+ 
+   final Stylesheet stylesheet;
+ 
+   /**
+    * Global variables.
+    */
+   final LinkedList variables;
+ 
+   /**
+    * Parameter value stack.
+    */
+   final LinkedList parameters;
+ 
+   /**
+    * Argument (with-param) value stack.
+    */
+   final LinkedList withParameters;
+ 
+   Bindings(Stylesheet stylesheet)
+   {
+     this.stylesheet = stylesheet;
+     variables = new LinkedList();
+     parameters = new LinkedList();
+     withParameters = new LinkedList();
+     for (int i = 0; i < 3; i++)
+       {
+         push(i);
+       }
+   }
+ 
+   public Object clone()
+   {
+     try
+       {
+         return (Bindings) super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw new Error(e.getMessage());
+       }
+   }
+ 
+   void push(int type)
+   {
+     switch (type)
+       {
+       case VARIABLE:
+         variables.addFirst(new HashMap());
+         break;
+       case PARAM:
+         parameters.addFirst(new HashMap());
+         break;
+       case WITH_PARAM:
+         withParameters.addFirst(new HashMap());
+         break;
+       }
+   }
+ 
+   void pop(int type)
+   {
+     switch (type)
+       {
+       case VARIABLE:
+         variables.removeFirst();
+         break;
+       case PARAM:
+         parameters.removeFirst();
+         break;
+       case WITH_PARAM:
+         withParameters.removeFirst();
+         break;
+       }
+   }
+ 
+   public boolean containsKey(QName name, int type)
+   {
+     Iterator i = null;
+     switch (type)
+       {
+       case VARIABLE:
+         i = variables.iterator();
+         break;
+       case PARAM:
+         i = parameters.iterator();
+         break;
+       case WITH_PARAM:
+         Map ctx = (Map) withParameters.getFirst();
+         return ctx.containsKey(name);
+       }
+     if (i != null)
+       {
+         while (i.hasNext())
+           {
+             Map ctx = (Map) i.next();
+             if (ctx.containsKey(name))
+               {
+                 return true;
+               }
+           }
+       }
+     return false;
+   }
+ 
+   public Object get(QName name, Node context, int pos, int len)
+   {
+     //System.err.println("bindings.get: "+name);
+     //System.err.println("\t"+toString());
+     Object ret = null;
+     //if (parameters.size() > 1 && containsKey(name, PARAM))
+       // check that template defines parameter
+       {
+         Map cwp = (Map) withParameters.getFirst();
+         ret = cwp.get(name);
+         //System.err.println("\twith-param: ret="+ret);
+       }
+     if (ret == null)
+       {
+         for (Iterator i = variables.iterator(); i.hasNext() && ret == null; )
+           {
+             Map vctx = (Map) i.next();
+             ret = vctx.get(name);
+           }
+         //System.err.println("\tvariable: ret="+ret);
+       }
+     if (ret == null)
+       {
+         for (Iterator i = parameters.iterator(); i.hasNext() && ret == null; )
+           {
+             Map pctx = (Map) i.next();
+             ret = pctx.get(name);
+           }
+         //System.err.println("\tparam: ret="+ret);
+       }
+     /*if (ret instanceof Expr && context != null)
+       {
+         Expr expr = (Expr) ret;
+         ret = expr.evaluate(context, 1, 1);
+       }*/
+     if (ret instanceof Node)
+       {
+         ret = Collections.singleton(ret);
+       }
+     if (ret == null)
+       {
+         ret = "";
+       }
+     //System.err.println("\tret="+ret);
+     return ret;
+   }
+ 
+   void set(QName name, Object value, int type)
+   {
+     switch (type)
+       {
+       case VARIABLE:
+         Map vctx = (Map) variables.getFirst();
+         vctx.put(name, value);
+         break;
+       case PARAM:
+         Map pctx = (Map) parameters.getFirst();
+         pctx.put(name, value);
+         break;
+       case WITH_PARAM:
+         Map wctx = (Map) withParameters.getFirst();
+         wctx.put(name, value);
+         break;
+       }
+     //System.err.println("Set "+name+"="+value);
+   }
+ 
+   public Object resolveVariable(QName qName)
+   {
+     return get(qName, null, 1, 1);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer();
+     boolean next = false;
+     Collection seen = new HashSet();
+     Map wctx = (Map) withParameters.getFirst();
+     buf.append('(');
+     for (Iterator i = wctx.entrySet().iterator(); i.hasNext(); )
+       {
+         if (next)
+           {
+             buf.append(',');
+           }
+         else
+           {
+             next = true;
+           }
+         Map.Entry entry = (Map.Entry) i.next();
+         Object key = entry.getKey();
+         if (!seen.contains(key))
+           {
+             buf.append(key);
+             buf.append('=');
+             buf.append(entry.getValue());
+             seen.add(key);
+           }
+       }
+     buf.append(')');
+     next = false;
+     seen.clear();
+     buf.append('{');
+     for (Iterator i = variables.iterator(); i.hasNext(); )
+       {
+         Map ctx = (Map) i.next();
+         for (Iterator j = ctx.entrySet().iterator(); j.hasNext(); )
+           {
+             if (next)
+               {
+                 buf.append(',');
+               }
+             else
+               {
+                 next = true;
+               }
+             Map.Entry entry = (Map.Entry) j.next();
+             Object key = entry.getKey();
+             if (!seen.contains(key))
+               {
+                 buf.append(key);
+                 buf.append('=');
+                 buf.append(entry.getValue());
+                 seen.add(key);
+               }
+           } 
+       }
+     buf.append('}');
+     next = false;
+     seen.clear();
+     buf.append('[');
+     for (Iterator i = parameters.iterator(); i.hasNext(); )
+       {
+         Map ctx = (Map) i.next();
+         for (Iterator j = ctx.entrySet().iterator(); j.hasNext(); )
+           {
+             if (next)
+               {
+                 buf.append(',');
+               }
+             else
+               {
+                 next = true;
+               }
+             Map.Entry entry = (Map.Entry) j.next();
+             Object key = entry.getKey();
+             if (!seen.contains(key))
+               {
+                 buf.append(key);
+                 buf.append('=');
+                 buf.append(entry.getValue());
+                 seen.add(key);
+               }
+           } 
+       }
+     buf.append(']');
+     return buf.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/CallTemplateNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/CallTemplateNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/CallTemplateNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/CallTemplateNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,165 ----
+ /* CallTemplateNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A template node representing the XSL <code>call-template</code>
+  * instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class CallTemplateNode
+   extends TemplateNode
+ {
+ 
+   final QName name;
+   final List withParams;
+ 
+   CallTemplateNode(QName name, List withParams)
+   {
+     this.name = name;
+     this.withParams = withParams;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     int len = withParams.size();
+     List withParams2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         withParams2.add(((WithParam) withParams.get(i)).clone(stylesheet));
+       }
+     TemplateNode ret = new CallTemplateNode(name, withParams2);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     if (withParams != null)
+       {
+         // compute the parameter values
+         LinkedList values = new LinkedList();
+         for (Iterator i = withParams.iterator(); i.hasNext(); )
+           {
+             WithParam p = (WithParam) i.next();
+             Object value = p.getValue(stylesheet, mode, context, pos, len);
+             Object[] pair = new Object[2];
+             pair[0] = p.name;
+             pair[1] = value;
+             values.add(pair);
+           }
+         // push the parameter context
+         stylesheet.bindings.push(Bindings.WITH_PARAM);
+         // set the parameters
+         for (Iterator i = values.iterator(); i.hasNext(); )
+           {
+             Object[] pair = (Object[]) i.next();
+             QName name = (QName) pair[0];
+             Object value = pair[1];
+             stylesheet.bindings.set(name, value, Bindings.WITH_PARAM);
+             if (stylesheet.debug)
+               {
+                 System.err.println("with-param: " + name + " = " + value);
+               }
+           }
+       }
+     TemplateNode t = stylesheet.getTemplate(mode, name);
+     if (t != null)
+       {
+         t.apply(stylesheet, mode, context, pos, len,
+                 parent, nextSibling);
+       }
+     if (withParams != null)
+       {
+         // pop the variable context
+         stylesheet.bindings.pop(Bindings.WITH_PARAM);
+       }
+     // call-template doesn't have processable children
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+   public boolean references(QName var)
+   {
+     if (withParams != null)
+       {
+         for (Iterator i = withParams.iterator(); i.hasNext(); )
+           {
+             if (((WithParam) i.next()).references(var))
+               {
+                 return true;
+               }
+           }
+       }
+     return super.references(var);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("name=");
+     buf.append(name);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ChooseNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ChooseNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ChooseNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ChooseNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* ChooseNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A template node representing an XSL <code>choose</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ChooseNode
+   extends TemplateNode
+ {
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new ChooseNode();
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     if (children != null)
+       {
+         children.apply(stylesheet, mode,
+                        context, pos, len,
+                        parent, nextSibling);
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/CommentNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/CommentNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/CommentNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/CommentNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,116 ----
+ /* CommentNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Comment;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing the XSL <code>comment</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class CommentNode
+   extends TemplateNode
+ {
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new CommentNode();
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     String value = "";
+     Document doc = (parent instanceof Document) ? (Document) parent :
+       parent.getOwnerDocument();
+     if (children != null)
+       {
+         // Create a document fragment to hold the text
+         DocumentFragment fragment = doc.createDocumentFragment();
+         // Apply children to the fragment
+         children.apply(stylesheet, mode,
+                        context, pos, len,
+                        fragment, null);
+         // Use XPath string-value of fragment
+         value = Expr.stringValue(fragment);
+       }
+     Comment comment = doc.createComment(value);
+     // Insert into result tree
+     if (nextSibling != null)
+       {
+         parent.insertBefore(comment, nextSibling);
+       }
+     else
+       {
+         parent.appendChild(comment);
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/CopyNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/CopyNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/CopyNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/CopyNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,183 ----
+ /* CopyNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Iterator;
+ import java.util.StringTokenizer;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A template node representing the XSL <code>copy</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class CopyNode
+   extends TemplateNode
+ {
+ 
+   final String uas;
+ 
+   CopyNode(String uas)
+   {
+     this.uas = uas;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new CopyNode(uas);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Node copy = parent;
+     switch (context.getNodeType())
+       {
+       case Node.TEXT_NODE:
+       case Node.ATTRIBUTE_NODE:
+       case Node.ELEMENT_NODE:
+       case Node.PROCESSING_INSTRUCTION_NODE:
+       case Node.COMMENT_NODE:
+         Document doc = (parent instanceof Document) ? (Document) parent :
+           parent.getOwnerDocument();
+         copy = context.cloneNode(false);
+         copy = doc.adoptNode(copy);
+         if (copy.getNodeType() == Node.ATTRIBUTE_NODE)
+           {
+             if (parent.getFirstChild() != null)
+               {
+                 // Ignore attempt to add attribute after children
+               }
+             else
+               {
+                 NamedNodeMap attrs = parent.getAttributes();
+                 if (attrs != null)
+                   {
+                     attrs.setNamedItemNS(copy);
+                   }
+               }
+           }
+         else
+           {
+             if (nextSibling != null)
+               {
+                 parent.insertBefore(copy, nextSibling);
+               }
+             else
+               {
+                 parent.appendChild(copy);
+               }
+           }
+       }
+     if (uas != null)
+       {
+         StringTokenizer st = new StringTokenizer(uas, " ");
+         while (st.hasMoreTokens())
+           {
+             addAttributeSet(stylesheet, mode, context, pos, len,
+                             copy, null, st.nextToken());
+           }
+       }
+     if (children != null)
+       {
+         children.apply(stylesheet, mode,
+                        context, pos, len,
+                        copy, null);
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+   void addAttributeSet(Stylesheet stylesheet, QName mode,
+                        Node context, int pos, int len,
+                        Node parent, Node nextSibling, String attributeSet)
+     throws TransformerException
+   {
+     for (Iterator i = stylesheet.attributeSets.iterator(); i.hasNext(); )
+       {
+         AttributeSet as = (AttributeSet) i.next();
+         if (!as.name.equals(attributeSet))
+           {
+             continue;
+           }
+         if (as.uas != null)
+           {
+             StringTokenizer st = new StringTokenizer(as.uas, " ");
+             while (st.hasMoreTokens())
+               {
+                 addAttributeSet(stylesheet, mode, context, pos, len,
+                                 parent, nextSibling, st.nextToken());
+               }
+           }
+         if (as.children != null)
+           {
+             as.children.apply(stylesheet, mode,
+                               context, pos, len,
+                               parent, nextSibling);
+           }
+       }
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append(']');
+     return buf.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/CopyOfNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/CopyOfNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/CopyOfNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/CopyOfNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,192 ----
+ /* CopyOfNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing an XSLT <code>copy-of</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class CopyOfNode
+   extends TemplateNode
+ {
+ 
+   final Expr select;
+ 
+   CopyOfNode(Expr select)
+   {
+     this.select = select;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new CopyOfNode(select.clone(stylesheet));
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Object ret = select.evaluate(context, pos, len);
+     Document doc = (parent instanceof Document) ? (Document) parent :
+       parent.getOwnerDocument();
+     if (ret instanceof Collection)
+       {
+         Collection ns = (Collection) ret;
+         List list = new ArrayList(ns);
+         Collections.sort(list, documentOrderComparator);
+         for (Iterator i = list.iterator(); i.hasNext(); )
+           {
+             Node src = (Node) i.next();
+             short nodeType = src.getNodeType();
+             if (nodeType == Node.DOCUMENT_NODE)
+               {
+                 // Use document element
+                 src = ((Document) src).getDocumentElement();
+                 if (src == null)
+                   {
+                     continue;
+                   }
+                 nodeType = Node.ELEMENT_NODE;
+               }
+             else if (nodeType == Node.ATTRIBUTE_NODE)
+               {
+                 if (parent.getFirstChild() != null)
+                   {
+                     // Ignore attempt to add attribute after children
+                     continue;
+                   }
+               }
+             if (parent.getNodeType() == Node.ATTRIBUTE_NODE &&
+                 nodeType != Node.TEXT_NODE &&
+                 nodeType != Node.ENTITY_REFERENCE_NODE)
+               {
+                 // Ignore
+                 continue;
+               }
+             Node node = src.cloneNode(true);
+             node = doc.adoptNode(node);
+             if (nodeType == Node.ATTRIBUTE_NODE)
+               {
+                 NamedNodeMap attrs = parent.getAttributes();
+                 if (attrs != null)
+                   {
+                     attrs.setNamedItemNS(node);
+                   }
+               }
+             else
+               {
+                 if (nextSibling != null)
+                   {
+                     parent.insertBefore(node, nextSibling);
+                   }
+                 else
+                   {
+                     parent.appendChild(node);
+                   }
+               }
+           }
+       }
+     else
+       {
+         String value = Expr._string(context, ret);
+         if (value != null && value.length() > 0)
+           {
+             Text textNode = doc.createTextNode(value);
+             if (nextSibling != null)
+               {
+                 parent.insertBefore(textNode, nextSibling);
+               }
+             else
+               {
+                 parent.appendChild(textNode);
+               }
+           }
+       }
+     // copy-of doesn't process children
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+   public boolean references(QName var)
+   {
+     if (select != null && select.references(var))
+       {
+         return true;
+       }
+     return super.references(var);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("select=");
+     buf.append(select);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/CurrentFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/CurrentFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/CurrentFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/CurrentFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /* CurrentFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Collections;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Function;
+ 
+ /**
+  * The XSLT <code>current()</code>function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class CurrentFunction
+   extends Expr
+   implements Function, XPathFunction
+ {
+ 
+   final Stylesheet stylesheet;
+ 
+   CurrentFunction(Stylesheet stylesheet)
+   {
+     this.stylesheet = stylesheet;
+   }
+ 
+   public Object evaluate(List args)
+     throws XPathFunctionException
+   {
+     // We can't do anything useful here.
+     // So much for the JAXP API...
+     return Collections.EMPTY_SET;
+   }
+ 
+   public void setArguments(List args)
+   {
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     return Collections.singleton(stylesheet.current);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     Stylesheet s = stylesheet;
+     if (context instanceof Stylesheet)
+       {
+         s = (Stylesheet) context;
+       }
+     return new CurrentFunction(s);
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString()
+   {
+     return "current()";
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/DOMSourceLocator.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/DOMSourceLocator.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/DOMSourceLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/DOMSourceLocator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,84 ----
+ /* DOMSourceLocator.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.transform.dom.DOMLocator;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Simple DOMLocator implementation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class DOMSourceLocator
+   implements DOMLocator
+ {
+ 
+   final Node node;
+ 
+   DOMSourceLocator(Node node)
+   {
+     this.node = node;
+   }
+ 
+   public Node getOriginatingNode()
+   {
+     return node;
+   }
+ 
+   public String getPublicId()
+   {
+     return null;
+   }
+ 
+   public String getSystemId()
+   {
+     return null;
+   }
+ 
+   public int getLineNumber()
+   {
+     return -1;
+   }
+ 
+   public int getColumnNumber()
+   {
+     return -1;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/DocumentFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/DocumentFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/DocumentFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/DocumentFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,256 ----
+ /* DocumentFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.TreeSet;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import javax.xml.transform.dom.DOMSource;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Constant;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Function;
+ import gnu.xml.xpath.IdFunction;
+ 
+ /**
+  * The XSLT <code>document()</code>function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class DocumentFunction
+   extends Expr
+   implements Function, XPathFunction
+ {
+ 
+   final Stylesheet stylesheet;
+   final Node base;
+   List args;
+   List values;
+ 
+   DocumentFunction(Stylesheet stylesheet, Node base)
+   {
+     this.stylesheet = stylesheet;
+     this.base = base;
+   }
+ 
+   public Object evaluate(List args)
+     throws XPathFunctionException
+   {
+     values = args;
+     return evaluate(null, 1, 1);
+   }
+ 
+   public void setArguments(List args)
+   {
+     this.args = args;
+   }
+   
+   public Object evaluate(Node context, int pos, int len)
+   {
+     int arity = args.size();
+     if (values == null)
+       {
+         values = new ArrayList(arity);
+         for (int i = 0; i < arity; i++)
+           {
+             Expr arg = (Expr) args.get(i);
+             values.add(arg.evaluate(context, pos, len));
+           }
+       }
+     Object ret;
+     switch (arity)
+       {
+       case 1:
+         Object arg = values.get(0);
+         if (arg instanceof Collection)
+           {
+             Collection ns = (Collection) arg;
+             Collection acc = new TreeSet();
+             for (Iterator i = ns.iterator(); i.hasNext(); )
+               {
+                 Node node = (Node) i.next();
+                 String s = Expr.stringValue(node);
+                 acc.addAll(document(s, node.getBaseURI()));
+               }
+             ret = acc;
+           }
+         else
+           {
+             String s = Expr._string(context, arg);
+             ret = document(s, base.getBaseURI());
+           }
+         break;
+       case 2:
+         Object arg1 = values.get(0);
+         Object arg2 = values.get(1);
+         if (!(arg2 instanceof Collection))
+           {
+             throw new RuntimeException("second argument is not a node-set");
+           }
+         Collection arg2ns = (Collection) arg2;
+         String base2 = arg2ns.isEmpty() ? null :
+           ((Node) arg2ns.iterator().next()).getBaseURI();
+         if (arg1 instanceof Collection)
+           {
+             Collection arg1ns = (Collection) arg1;
+             Collection acc = new TreeSet();
+             for (Iterator i = arg1ns.iterator(); i.hasNext(); )
+               {
+                 Node node = (Node) i.next();
+                 String s = Expr.stringValue(node);
+                 acc.addAll(document(s, base2));
+               }
+             ret = acc;
+           }
+         else
+           {
+             String s = Expr._string(context, arg1);
+             ret = document(s, base2);
+           }
+         break;
+       default:
+         throw new RuntimeException("invalid arity");
+       }
+     values = null;
+     return ret;
+   }
+ 
+   /**
+    * The XSL <code>document</code> function.
+    * @see XSLT 12.1
+    * @param uri the URI from which to retrieve nodes
+    * @param base the base URI for relative URIs
+    */
+   Collection document(String uri, String base)
+   {
+     if ("".equals(uri) || uri == null)
+       {
+         uri = this.base.getBaseURI();
+       }
+     
+     // Get fragment
+     Expr fragment = null;
+     int hi = uri.indexOf('#');
+     if (hi != -1)
+       {
+         String f = uri.substring(hi + 1);
+         uri = uri.substring(0, hi);
+         // TODO handle xpointer() here
+         // this only handles IDs
+         fragment = new IdFunction(new Constant(f));
+       }
+ 
+     // Get document source
+     try
+       {
+         DOMSource source;
+         XSLURIResolver resolver = stylesheet.factory.resolver;
+         synchronized (resolver)
+           {
+             if (stylesheet.transformer != null)
+               {
+                 resolver.setUserResolver(stylesheet.transformer.uriResolver);
+                 resolver.setUserListener(stylesheet.transformer.errorListener);
+               }
+             source = resolver.resolveDOM(null, base, uri);
+           }
+         Node node = source.getNode();
+         if (fragment == null)
+           {
+             return Collections.singleton(node);
+           }
+         else
+           {
+             Object ret = fragment.evaluate(node, 1, 1);
+             if (!(ret instanceof Collection))
+               {
+                 // XXX Report error?
+                 return Collections.EMPTY_SET;
+               }
+             return (Collection) ret;
+           }
+       }
+     catch (TransformerException e)
+       {
+         String msg = "can't open " + uri;
+         if (base != null)
+           {
+             msg += " with base " + base;
+           }
+         throw new RuntimeException(msg);
+       }
+   }
+ 
+   public Expr clone(Object context)
+   {
+     Stylesheet s = stylesheet;
+     if (context instanceof Stylesheet)
+       {
+         s = (Stylesheet) context;
+       }
+     DocumentFunction f = new DocumentFunction(s, base);
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     f.setArguments(args2);
+     return f;
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ElementAvailableFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ElementAvailableFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ElementAvailableFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ElementAvailableFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,183 ----
+ /* ElementAvailableFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.TreeSet;
+ import javax.xml.namespace.QName;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Function;
+ 
+ /**
+  * The XSLT <code>element-available</code> function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class ElementAvailableFunction
+   extends Expr
+   implements Function, XPathFunction
+ {
+ 
+   static final Collection elements;
+   static
+   {
+     TreeSet acc = new TreeSet();
+     acc.add("stylesheet");
+     acc.add("template");
+     acc.add("param");
+     acc.add("variable");
+     acc.add("include");
+     acc.add("import");
+     acc.add("output");
+     acc.add("preserve-space");
+     acc.add("strip-space");
+     acc.add("key");
+     acc.add("decimal-format");
+     acc.add("namespace-alias");
+     acc.add("attribute-set");
+     acc.add("apply-templates");
+     acc.add("call-template");
+     acc.add("value-of");
+     acc.add("for-each");
+     acc.add("if");
+     acc.add("choose");
+     acc.add("when");
+     acc.add("otherwise");
+     acc.add("element");
+     acc.add("attribute");
+     acc.add("text");
+     acc.add("copy");
+     acc.add("processing-instruction");
+     acc.add("comment");
+     acc.add("number");
+     acc.add("copy-of");
+     acc.add("message");
+     acc.add("sort");
+     acc.add("with-param");
+     acc.add("fallback");
+     acc.add("apply-imports");
+     elements = Collections.unmodifiableSet(acc);
+   }
+ 
+   final NamespaceContext nsctx;
+   List args;
+ 
+   ElementAvailableFunction(NamespaceContext nsctx)
+   {
+     this.nsctx = nsctx;
+   }
+ 
+   public Object evaluate(List args)
+     throws XPathFunctionException
+   {
+     // Useless...
+     return Collections.EMPTY_SET;
+   }
+ 
+   public void setArguments(List args)
+   {
+     this.args = args;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Expr arg = (Expr) args.get(0);
+     Object val = arg.evaluate(context, pos, len);
+     String name = _string(context, val);
+     String prefix, localName, uri;
+     int ci = name.indexOf(':');
+     if (ci == -1)
+       {
+         prefix = null;
+         localName = name;
+       }
+     else
+       {
+         prefix = name.substring(0, ci);
+         localName = name.substring(ci + 1);
+       }
+     uri = nsctx.getNamespaceURI(prefix);
+     if (Stylesheet.XSL_NS.equals(uri))
+       {
+         return elements.contains(localName) ?
+           Boolean.TRUE : Boolean.FALSE;
+         // TODO extension elements
+       }
+     return Boolean.FALSE;
+   }
+   
+   public Expr clone(Object context)
+   {
+     NamespaceContext n = nsctx;
+     if (context instanceof NamespaceContext)
+       {
+         n = (NamespaceContext) context;
+       }
+     ElementAvailableFunction f = new ElementAvailableFunction(n);
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     f.setArguments(args2);
+     return f;
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ElementNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ElementNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ElementNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ElementNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,296 ----
+ /* ElementNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.StringTokenizer;
+ import javax.xml.XMLConstants;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing an XSL <code>element</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ElementNode
+   extends TemplateNode
+ {
+ 
+   final TemplateNode name;
+   final TemplateNode namespace;
+   final String uas;
+   final Node source;
+   final Collection elementExcludeResultPrefixes;
+   
+   ElementNode(TemplateNode name,
+               TemplateNode namespace, String uas, Node source)
+   {
+     this.name = name;
+     this.namespace = namespace;
+     this.uas = uas;
+     this.source = source;
+     NamedNodeMap attrs = source.getAttributes();
+     Node attr = attrs.getNamedItemNS(Stylesheet.XSL_NS,
+                                      "exclude-result-prefixes");
+     if (attr != null)
+       {
+         elementExcludeResultPrefixes = new HashSet();
+         StringTokenizer st = new StringTokenizer(attr.getNodeValue());
+         while (st.hasMoreTokens())
+           {
+             elementExcludeResultPrefixes.add(st.nextToken());
+           }
+       }
+     else
+       {
+         elementExcludeResultPrefixes = Collections.EMPTY_SET;
+       }
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new ElementNode(name.clone(stylesheet),
+                                        (namespace == null) ? null :
+                                        namespace.clone(stylesheet),
+                                        uas, source);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Document doc = (parent instanceof Document) ? (Document) parent :
+       parent.getOwnerDocument();
+     // Create a document fragment to hold the name
+     DocumentFragment fragment = doc.createDocumentFragment();
+     // Apply name to the fragment
+     name.apply(stylesheet, mode,
+                context, pos, len,
+                fragment, null);
+     // Use XPath string-value of fragment
+     String nameValue = Expr.stringValue(fragment);
+ 
+     String namespaceValue = null;
+     if (namespace != null)
+       {
+         // Create a document fragment to hold the namespace
+         fragment = doc.createDocumentFragment();
+         // Apply namespace to the fragment
+         namespace.apply(stylesheet, mode,
+                         context, pos, len,
+                         fragment, null);
+         // Use XPath string-value of fragment
+         namespaceValue = Expr.stringValue(fragment);
+         if (namespaceValue.length() == 0)
+           {
+             namespaceValue = null;
+           }
+       }
+     
+     String prefix = getPrefix(nameValue);
+     if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix))
+       {
+         int ci = nameValue.indexOf(':');
+         nameValue = nameValue.substring(ci + 1);
+       }
+     else
+       {
+         // Namespace aliasing
+         if (prefix == null)
+           {
+             prefix = "#default";
+           }
+         String resultPrefix =
+           (String) stylesheet.namespaceAliases.get(prefix);
+         if (resultPrefix != null)
+           {
+             if ("#default".equals(resultPrefix))
+               {
+                 resultPrefix = null;
+               }
+             namespaceValue = source.lookupNamespaceURI(resultPrefix);
+           }
+         if (prefix == "#default")
+           {
+             prefix = null;
+           }
+         // Look up ordinary namespace for this prefix
+         if (namespaceValue == null)
+           {
+             if (XMLConstants.XML_NS_PREFIX.equals(prefix))
+               {
+                 namespaceValue = XMLConstants.XML_NS_URI;
+               }
+             else
+               {
+                 // Resolve namespace for this prefix
+                 namespaceValue = source.lookupNamespaceURI(prefix);
+               }
+           }
+         /*if (prefix == null)
+           {
+             // Resolve prefix for this namespace
+             prefix = parent.lookupPrefix(namespaceValue);
+             if (prefix != null)
+               {
+                 nameValue = prefix + ":" + nameValue;
+               }
+           }*/
+       }
+     // Create element
+     Element element = (namespaceValue != null) ?
+       doc.createElementNS(namespaceValue, nameValue) :
+           doc.createElement(nameValue);
+     if (nextSibling != null)
+       {
+         parent.insertBefore(element, nextSibling);
+       }
+     else
+       {
+         parent.appendChild(element);
+       }
+     stylesheet.addNamespaceNodes(source, element, doc,
+                                  elementExcludeResultPrefixes);
+     if (uas != null)
+       {
+         StringTokenizer st = new StringTokenizer(uas, " ");
+         while (st.hasMoreTokens())
+           {
+             addAttributeSet(stylesheet, mode, context, pos, len,
+                             element, null, st.nextToken());
+           }
+       }
+     if (children != null)
+       {
+         children.apply(stylesheet, mode,
+                        context, pos, len,
+                        element, null);
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+ 
+   final String getPrefix(String name)
+   {
+     int ci = name.indexOf(':');
+     return (ci == -1) ? null : name.substring(0, ci);
+   }
+ 
+   void addAttributeSet(Stylesheet stylesheet, QName mode,
+                        Node context, int pos, int len,
+                        Node parent, Node nextSibling, String attributeSet)
+     throws TransformerException
+   {
+     for (Iterator i = stylesheet.attributeSets.iterator(); i.hasNext(); )
+       {
+         AttributeSet as = (AttributeSet) i.next();
+         if (!as.name.equals(attributeSet))
+           {
+             continue;
+           }
+         if (as.uas != null)
+           {
+             StringTokenizer st = new StringTokenizer(as.uas, " ");
+             while (st.hasMoreTokens())
+               {
+                 addAttributeSet(stylesheet, mode, context, pos, len,
+                                 parent, nextSibling, st.nextToken());
+               }
+           }
+         if (as.children != null)
+           {
+             as.children.apply(stylesheet, mode,
+                               context, pos, len,
+                               parent, nextSibling);
+           }
+       }
+   }
+ 
+   public boolean references(QName var)
+   {
+     if (name != null && name.references(var))
+       {
+         return true;
+       }
+     if (namespace != null && namespace.references(var))
+       {
+         return true;
+       }
+     return super.references(var);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("name=");
+     buf.append(name);
+     if (uas != null)
+       {
+         buf.append(",uas=");
+         buf.append(uas);
+       }
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ErrorListenerErrorHandler.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ErrorListenerErrorHandler.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ErrorListenerErrorHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ErrorListenerErrorHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* ErrorListenerErrorHandler.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.transform.ErrorListener;
+ import javax.xml.transform.TransformerException;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ 
+ /**
+  * An ErrorHandler that wraps an ErrorListener.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class ErrorListenerErrorHandler
+   implements ErrorHandler
+ {
+ 
+   final ErrorListener listener;
+ 
+   ErrorListenerErrorHandler(ErrorListener listener)
+   {
+     this.listener = listener;
+   }
+ 
+   public void warning(SAXParseException e)
+     throws SAXException
+   {
+     try
+       {
+         listener.warning(new TransformerException(e));
+       }
+     catch (TransformerException e2)
+       {
+         throw new SAXException(e2);
+       }
+   }
+   
+   public void error(SAXParseException e)
+     throws SAXException
+   {
+     try
+       {
+         listener.error(new TransformerException(e));
+       }
+     catch (TransformerException e2)
+       {
+         throw new SAXException(e2);
+       }
+   }
+   
+   public void fatalError(SAXParseException e)
+     throws SAXException
+   {
+     try
+       {
+         listener.fatalError(new TransformerException(e));
+       }
+     catch (TransformerException e2)
+       {
+         throw new SAXException(e2);
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ForEachNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ForEachNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ForEachNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ForEachNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,171 ----
+ /* ForEachNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing an XSLT <code>for-each</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ForEachNode
+   extends TemplateNode
+ {
+ 
+   final Expr select;
+   final List sortKeys;
+ 
+   ForEachNode(Expr select, List sortKeys)
+   {
+     this.select = select;
+     this.sortKeys = sortKeys;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     int len = sortKeys.size();
+     List sortKeys2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         sortKeys2.add(((Key) sortKeys.get(i)).clone(stylesheet));
+       }
+     TemplateNode ret = new ForEachNode(select.clone(stylesheet),
+                                        sortKeys2);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     if (children != null)
+       {
+         // Set current template to null
+         Template saved = stylesheet.currentTemplate;
+         stylesheet.currentTemplate = null;
+         Object ret = select.evaluate(context, pos, len);
+         //System.err.println(toString() + ": " + context+" -> "+ret);
+         if (ret instanceof Collection)
+           {
+             Collection ns = (Collection) ret;
+             List list = new ArrayList(ns);
+             if (sortKeys != null)
+               {
+                 for (Iterator i = sortKeys.iterator(); i.hasNext(); )
+                   {
+                     SortKey sortKey = (SortKey) i.next();
+                     sortKey.init(stylesheet, mode, context, pos, len, parent,
+                                  nextSibling);
+                   }
+                 Collections.sort(list, new XSLComparator(sortKeys));
+               }
+             else
+               {
+                 Collections.sort(list, documentOrderComparator);
+               }
+             // Perform children for each node
+             int l = list.size();
+             int p = 1;
+             for (Iterator i = list.iterator(); i.hasNext(); )
+               {
+                 Node node = (Node) i.next();
+                 stylesheet.current = node;
+                 children.apply(stylesheet, mode,
+                                node, p++, l,
+                                parent, nextSibling);
+               }
+           }
+         // Restore current template
+         stylesheet.currentTemplate = saved;
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+ 
+   public boolean references(QName var)
+   {
+     if (select != null && select.references(var))
+       {
+         return true;
+       }
+     if (sortKeys != null)
+       {
+         for (Iterator i = sortKeys.iterator(); i.hasNext(); )
+           {
+             if (((SortKey) i.next()).references(var))
+               {
+                 return true;
+               }
+           }
+       }
+     return super.references(var);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("select=");
+     buf.append(select);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/FormatNumberFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/FormatNumberFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/FormatNumberFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/FormatNumberFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,146 ----
+ /* FormatNumberFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.text.DecimalFormat;
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Function;
+ 
+ /**
+  * The XSLT <code>format-number()</code>function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class FormatNumberFunction
+   extends Expr
+   implements XPathFunction, Function
+ {
+ 
+   final Stylesheet stylesheet;
+   List args;
+ 
+   FormatNumberFunction(Stylesheet stylesheet)
+   {
+     this.stylesheet = stylesheet;
+   }
+ 
+   public Object evaluate(List args)
+     throws XPathFunctionException
+   {
+     // Useless...
+     return Collections.EMPTY_SET;
+   }
+ 
+   public void setArguments(List args)
+   {
+     this.args = args;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     int arity = args.size();
+     List values = new ArrayList(arity);
+     for (int i = 0; i < arity; i++)
+       {
+         Expr arg = (Expr) args.get(i);
+         values.add(arg.evaluate(context, pos, len));
+       }
+     double number = _number(context, values.get(0));
+     String pattern = _string(context, values.get(1));
+     // Currency symbol &#x00a4; is not supposed to be present
+     if (pattern.indexOf('\u00a4') != -1)
+       {
+         // Replace with $ (Xalan does this)
+         pattern = pattern.replace('\u00a4', '$');
+       }
+     String dfName = null;
+     if (arity > 2)
+       {
+         dfName = _string(context, values.get(2));
+         // otherwise the default decimal-format will be used
+       }
+     DecimalFormat df = (DecimalFormat) stylesheet.decimalFormats.get(dfName);
+     if (df == null)
+       {
+         throw new IllegalArgumentException("No such decimal-format: " +
+                                            dfName);
+       }
+     df.applyLocalizedPattern(pattern);
+     return df.format(number);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     Stylesheet s = stylesheet;
+     if (context instanceof Stylesheet)
+       {
+         s = (Stylesheet) context;
+       }
+     FormatNumberFunction f = new FormatNumberFunction(s);
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     f.setArguments(args2);
+     return f;
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/FunctionAvailableFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/FunctionAvailableFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/FunctionAvailableFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/FunctionAvailableFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,189 ----
+ /* FunctionAvailableFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.TreeSet;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Function;
+ 
+ /**
+  * The XSLT <code>function-available</code> function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class FunctionAvailableFunction
+   extends Expr
+   implements Function, XPathFunction
+ {
+ 
+   static final Collection xsltFunctions;
+   static final Collection xpathFunctions;
+   static
+   {
+     TreeSet acc = new TreeSet();
+     acc.add("document");
+     acc.add("key");
+     acc.add("format-number");
+     acc.add("current");
+     acc.add("unparsed-entity-uri");
+     acc.add("generate-id");
+     acc.add("system-property");
+     acc.add("element-available");
+     acc.add("function-available");
+     xsltFunctions = Collections.unmodifiableSet(acc);
+     acc = new TreeSet();
+     acc.add("boolean");
+     acc.add("ceiling");
+     acc.add("concat");
+     acc.add("contains");
+     acc.add("count");
+     acc.add("false");
+     acc.add("floor");
+     acc.add("id");
+     acc.add("lang");
+     acc.add("last");
+     acc.add("local-name");
+     acc.add("name");
+     acc.add("namespace-uri");
+     acc.add("normalize-space");
+     acc.add("not");
+     acc.add("number");
+     acc.add("position");
+     acc.add("round");
+     acc.add("starts-with");
+     acc.add("string");
+     acc.add("string-length");
+     acc.add("substring-after");
+     acc.add("substring-before");
+     acc.add("substring");
+     acc.add("sum");
+     acc.add("translate");
+     acc.add("true");
+     xpathFunctions = Collections.unmodifiableSet(acc);
+   }
+ 
+   final NamespaceContext nsctx;
+   List args;
+ 
+   FunctionAvailableFunction(NamespaceContext nsctx)
+   {
+     this.nsctx = nsctx;
+   }
+ 
+   public Object evaluate(List args)
+     throws XPathFunctionException
+   {
+     // Useless...
+     return Collections.EMPTY_SET;
+   }
+ 
+   public void setArguments(List args)
+   {
+     this.args = args;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Expr arg = (Expr) args.get(0);
+     Object val = arg.evaluate(context, pos, len);
+     String name = _string(context, val);
+     String prefix, localName, uri;
+     int ci = name.indexOf(':');
+     if (ci == -1)
+       {
+         prefix = null;
+         localName = name;
+       }
+     else
+       {
+         prefix = name.substring(0, ci);
+         localName = name.substring(ci + 1);
+       }
+     uri = nsctx.getNamespaceURI(prefix);
+     if (uri == null)
+       {
+         return xsltFunctions.contains(localName) ||
+           xpathFunctions.contains(localName) ?
+           Boolean.TRUE : Boolean.FALSE;
+         // TODO extension functions
+       }
+     return Boolean.FALSE;
+   }
+   
+   public Expr clone(Object context)
+   {
+     NamespaceContext n = nsctx;
+     if (context instanceof NamespaceContext)
+       {
+         n = (NamespaceContext) context;
+       }
+     FunctionAvailableFunction f = new FunctionAvailableFunction(n);
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     f.setArguments(args2);
+     return f;
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/GenerateIdFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/GenerateIdFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/GenerateIdFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/GenerateIdFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* GenerateIdFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Function;
+ 
+ /**
+  * The XSLT <code>generate-id()</code>function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class GenerateIdFunction
+   extends Expr
+   implements XPathFunction, Function
+ {
+ 
+   List args;
+ 
+   public Object evaluate(List args)
+     throws XPathFunctionException
+   {
+     // Useless...
+     return Collections.EMPTY_SET;
+   }
+ 
+   public void setArguments(List args)
+   {
+     this.args = args;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     int arity = args.size();
+     List values = new ArrayList(arity);
+     for (int i = 0; i < arity; i++)
+       {
+         Expr arg = (Expr) args.get(i);
+         values.add(arg.evaluate(context, pos, len));
+       }
+     Node node;
+     Collection ns = (arity == 0) ? Collections.EMPTY_SET :
+       (Collection) values.get(0);
+     if (ns.isEmpty())
+       {
+         node = context;
+       }
+     else
+       {
+         List list = new ArrayList(ns);
+         Collections.sort(list, documentOrderComparator);
+         node = (Node) list.get(0);
+       }
+ 
+     String name = node.getNodeName();
+     int index = 0, depth = 0;
+     for (Node ctx = node.getPreviousSibling(); ctx != null;
+          ctx = ctx.getPreviousSibling())
+       {
+         index++;
+       }
+     for (Node ctx = node.getParentNode(); ctx != null;
+          ctx = ctx.getParentNode())
+       {
+         depth++;
+       }
+     return name + "-" + index + "-" + depth;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     GenerateIdFunction f = new GenerateIdFunction();
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     f.setArguments(args2);
+     return f;
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/IfNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/IfNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/IfNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/IfNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,120 ----
+ /* IfNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing an XSL <code>if</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class IfNode
+   extends TemplateNode
+ {
+ 
+   final Expr test;
+ 
+   IfNode(Expr test)
+   {
+     this.test = test;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new IfNode(test.clone(stylesheet));
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Object ret = test.evaluate(context, pos, len);
+     boolean success = (ret instanceof Boolean) ?
+       ((Boolean) ret).booleanValue() :
+       Expr._boolean(context, ret);
+     if (success)
+       {
+         if (children != null)
+           {
+             children.apply(stylesheet, mode,
+                            context, pos, len,
+                            parent, nextSibling);
+           }
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+   public boolean references(QName var)
+   {
+     if (test != null && test.references(var))
+       {
+         return true;
+       }
+     return super.references(var);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("test=");
+     buf.append(test);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/Key.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/Key.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/Key.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/Key.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* Key.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Pattern;
+ 
+ /**
+  * An XSL key.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class Key
+ {
+ 
+   final QName name;
+   final Pattern match;
+   final Expr use;
+ 
+   Key(QName name, Pattern match, Expr use)
+   {
+     this.name = name;
+     this.match = match;
+     this.use = use;
+   }
+ 
+   Key clone(Stylesheet stylesheet)
+   {
+     return new Key(name,
+                    (Pattern) match.clone(stylesheet),
+                    use.clone(stylesheet));
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/KeyFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/KeyFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/KeyFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/KeyFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,228 ----
+ /* KeyFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.LinkedHashSet;
+ import java.util.LinkedList;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Function;
+ import gnu.xml.xpath.Pattern;
+ 
+ /**
+  * The XSLT <code>key()</code>function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class KeyFunction
+   extends Pattern
+   implements XPathFunction, Function
+ {
+ 
+   final Stylesheet stylesheet;
+   List args;
+ 
+   KeyFunction(Stylesheet stylesheet)
+   {
+     this.stylesheet = stylesheet;
+   }
+ 
+   public Object evaluate(List args)
+     throws XPathFunctionException
+   {
+     // Useless...
+     return Collections.EMPTY_SET;
+   }
+ 
+   public void setArguments(List args)
+   {
+     this.args = args;
+   }
+ 
+   public boolean matches(Node context)
+   {
+     Object ret = evaluate(context, 1, 1);
+     return !((Collection) ret).isEmpty();
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     // Evaluate arguments
+     int arity = args.size();
+     List values = new ArrayList(arity);
+     for (int i = 0; i < arity; i++)
+       {
+         Expr arg = (Expr) args.get(i);
+         values.add(arg.evaluate(context, pos, len));
+       }
+     // Get key name
+     QName keyName = QName.valueOf(_string(context, values.get(0)));
+     // Expand qualified name
+     String uri = keyName.getNamespaceURI();
+     String prefix = keyName.getPrefix();
+     if ((uri == null || uri.length() == 0) && 
+         (prefix != null && prefix.length() > 0))
+       {
+         uri = stylesheet.getNamespaceURI(prefix);
+         if (uri != null && uri.length() > 0)
+           {
+             String localName = keyName.getLocalPart();
+             keyName = new QName(uri, localName, prefix);
+           }
+       }
+     // Compute matching key set
+     Collection keySet = new LinkedList();
+     for (Iterator i = stylesheet.keys.iterator(); i.hasNext(); )
+       {
+         Key key = (Key) i.next();
+         if (key.name.equals(keyName))
+           {
+             keySet.add(key);
+           }
+       }
+     // Get target
+     Object target = values.get(1);
+     Collection acc = new LinkedHashSet();
+     Document doc = (context instanceof Document) ? (Document) context :
+       context.getOwnerDocument();
+     if (target instanceof Collection)
+       {
+         for (Iterator i = ((Collection) target).iterator(); i.hasNext(); )
+           {
+             String val = Expr.stringValue((Node) i.next());
+             addKeyNodes(doc, keySet, val, acc);
+           }
+       }
+     else
+       {
+         String val = Expr._string(context, target);
+         addKeyNodes(doc, keySet, val, acc);
+       }
+     List ret = new ArrayList(acc);
+     Collections.sort(ret, documentOrderComparator);
+     return ret;
+   }
+ 
+   final void addKeyNodes(Node node, Collection keySet,
+                          String value, Collection acc)
+   {
+     addKeyNodeIfMatch(node, keySet, value, acc);
+     // Apply children
+     for (Node ctx = node.getFirstChild(); ctx != null;
+          ctx = ctx.getNextSibling())
+       {
+         addKeyNodes(ctx, keySet, value, acc);
+       }
+   }
+   
+   final void addKeyNodeIfMatch(Node node, Collection keySet,
+                                String value, Collection acc)
+   {
+     for (Iterator i = keySet.iterator(); i.hasNext(); )
+       {
+         Key key = (Key) i.next();
+         if (key.match.matches(node))
+           {
+             Object eval = key.use.evaluate(node, 1, 1);
+             if (eval instanceof Collection)
+               {
+                 for (Iterator j = ((Collection) eval).iterator();
+                      j.hasNext(); )
+                   {
+                     String keyValue = Expr.stringValue((Node) j.next());
+                     if (value.equals(keyValue))
+                       {
+                         acc.add(node);
+                         return;
+                       }
+                   }
+               }
+             else
+               {
+                 String keyValue = Expr._string(node, eval);
+                 if (value.equals(keyValue))
+                   {
+                     acc.add(node);
+                     return;
+                   }
+               }
+           }
+       }
+   }
+ 
+   public Expr clone(Object context)
+   {
+     Stylesheet s = stylesheet;
+     if (context instanceof Stylesheet)
+       {
+         s = (Stylesheet) context;
+       }
+     KeyFunction f = new KeyFunction(s);
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     f.setArguments(args2);
+     return f;
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/LiteralNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/LiteralNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/LiteralNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/LiteralNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,231 ----
+ /* LiteralNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.StringTokenizer;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A template node that copies a DOM node in the template to the result
+  * tree.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class LiteralNode
+   extends TemplateNode
+ {
+ 
+   /**
+    * The source node in the XSL template.
+    */
+   final Node source;
+ 
+   final Collection elementExcludeResultPrefixes;
+ 
+   LiteralNode(Node source)
+   {
+     this.source = source;
+     if (source.getNodeType() == Node.ELEMENT_NODE)
+       {
+         NamedNodeMap attrs = source.getAttributes();
+         Node attr = attrs.getNamedItemNS(Stylesheet.XSL_NS,
+                                          "exclude-result-prefixes");
+         if (attr != null)
+           {
+             elementExcludeResultPrefixes = new HashSet();
+             StringTokenizer st = new StringTokenizer(attr.getNodeValue());
+             while (st.hasMoreTokens())
+               {
+                 elementExcludeResultPrefixes.add(st.nextToken());
+               }
+           }
+         else
+           {
+             elementExcludeResultPrefixes = Collections.EMPTY_SET;
+           }
+       }
+     else
+       {
+         elementExcludeResultPrefixes = null;
+       }
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new LiteralNode(source);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Node result = null;
+     Document doc = (parent instanceof Document) ? (Document) parent :
+       parent.getOwnerDocument();
+     short nodeType = source.getNodeType();
+     if (nodeType == Node.ATTRIBUTE_NODE &&
+         parent.getFirstChild() != null)
+       {
+         // Ignore attributes added after child elements
+       }
+     else
+       {
+         // Namespace aliasing
+         if (nodeType == Node.ELEMENT_NODE)
+           {
+             String prefix = source.getPrefix();
+             if (prefix == null)
+               {
+                 prefix = "#default";
+               }
+             String resultPrefix =
+               (String) stylesheet.namespaceAliases.get(prefix);
+             if (resultPrefix != null)
+               {
+                 if ("#default".equals(resultPrefix))
+                   {
+                     resultPrefix = null;
+                   }
+                 String uri = source.lookupNamespaceURI(resultPrefix);
+                 String name = source.getNodeName();
+                 // Create a new element node in the result document
+                 result = doc.createElementNS(uri, name);
+                 // copy attributes
+                 NamedNodeMap srcAttrs = source.getAttributes();
+                 NamedNodeMap dstAttrs = result.getAttributes();
+                 int l = srcAttrs.getLength();
+                 for (int i = 0; i < l; i++)
+                   {
+                     Node attr = srcAttrs.item(i);
+                     if (!Stylesheet.XSL_NS.equals(attr.getNamespaceURI()))
+                       {
+                         attr = attr.cloneNode(true);
+                         attr = doc.adoptNode(attr);
+                         dstAttrs.setNamedItemNS(attr);
+                       }
+                   }
+               }
+           }
+         if (result == null)
+           {
+             // Create result node
+             result = source.cloneNode(false);
+             // Remove any XSL attributes
+             NamedNodeMap attrs = result.getAttributes();
+             if (attrs != null)
+               {
+                 int l = attrs.getLength();
+                 for (int i = 0; i < l; i++)
+                   {
+                     Node attr = attrs.item(i);
+                     if (Stylesheet.XSL_NS.equals(attr.getNamespaceURI()))
+                       {
+                         attrs.removeNamedItem(attr.getNodeName());
+                         i--;
+                         l--;
+                       }
+                   }
+               }
+             Node result2 = doc.adoptNode(result);
+             if (result2 == null)
+               {
+                 String msg = "Error adopting node to result tree: " +
+                   result + " (" + result.getClass().getName() + ")";
+                 DOMSourceLocator l = new DOMSourceLocator(context);
+                 throw new TransformerException(msg, l);
+               }
+             result = result2;
+           }
+         if (nextSibling != null)
+           {
+             parent.insertBefore(result, nextSibling);
+           }
+         else
+           {
+             parent.appendChild(result);
+           }
+         if (nodeType == Node.ELEMENT_NODE)
+           {
+             stylesheet.addNamespaceNodes(source, result, doc,
+                                          elementExcludeResultPrefixes);
+           }
+         // children
+         if (children != null)
+           {
+             children.apply(stylesheet, mode,
+                            context, pos, len,
+                            result, null);
+           }
+       }
+     // next sibling
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("source=");
+     buf.append(source);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/MessageNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/MessageNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/MessageNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/MessageNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* MessageNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * An XSL <code>message</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class MessageNode
+   extends TemplateNode
+ {
+ 
+   final boolean terminate;
+ 
+   MessageNode(boolean terminate)
+   {
+     this.terminate = terminate;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new MessageNode(terminate);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     if (children != null)
+       {
+         Document doc = (parent instanceof Document) ? (Document) parent :
+           parent.getOwnerDocument();
+         DocumentFragment fragment = doc.createDocumentFragment();
+         children.apply(stylesheet, mode, context, pos, len, fragment, null);
+         String message = Expr.stringValue(fragment);
+         System.err.println(message);
+         if (terminate)
+           {
+             stylesheet.terminated = true;
+           }
+       }
+     if (next != null && !terminate)
+       {
+         next.apply(stylesheet, mode, context, pos, len, parent, nextSibling);
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/NodeNumberNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/NodeNumberNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/NodeNumberNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/NodeNumberNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,269 ----
+ /* NodeNumberNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Pattern;
+ import gnu.xml.xpath.Selector;
+ import gnu.xml.xpath.UnionExpr;
+ 
+ /**
+  * A template node representing the XSL <code>number</code> instruction
+  * with no <code>value</code> expression, i.e. the value is computed from
+  * the document position of the context node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class NodeNumberNode
+   extends AbstractNumberNode
+ {
+ 
+   static final int SINGLE = 0;
+   static final int MULTIPLE = 1;
+   static final int ANY = 2;
+ 
+   final int level;
+   final Pattern count;
+   final Pattern from;
+ 
+   NodeNumberNode(int level, Pattern count, Pattern from,
+                  TemplateNode format, String lang,
+                  int letterValue, String groupingSeparator, int groupingSize)
+   {
+     super(format, lang, letterValue, groupingSeparator, groupingSize);
+     this.level = level;
+     this.count = count;
+     this.from = from;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new NodeNumberNode(level,
+                                           (count == null) ? null :
+                                           (Pattern) count.clone(stylesheet),
+                                           (from == null) ? from :
+                                           (Pattern) from.clone(stylesheet),
+                                           format, lang, letterValue,
+                                           groupingSeparator, groupingSize);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   int[] compute(Stylesheet stylesheet, Node context, int pos, int len)
+     throws TransformerException
+   {
+     /*if (from != null)
+       {
+         Object ret = from.evaluate(context, pos, len);
+         if (ret instanceof Collection)
+           {
+             Collection ns = (Collection) ret;
+             if (ns.size() > 0)
+               {
+                 List list = new ArrayList(ns);
+                 Collections.sort(list, documentOrderComparator);
+                 context = (Node) list.get(0);
+               }
+             else
+               {
+                 return new int[0];
+               }
+           }
+         else
+           {
+             return new int[0];
+           }
+       }*/
+     Node current = context;
+     switch (level)
+       {
+       case SINGLE:
+         if (from == null)
+           {
+             while (context != null && !countMatches(current, context))
+               {
+                 context = context.getParentNode();
+               }
+           }
+         else
+           {
+             while (context != null && !countMatches(current, context) &&
+                    !fromMatches(context))
+               {
+                 context = context.getParentNode();
+               }
+           }
+         return (context == null) ? new int[0] :
+           new int[] { (context == current) ? pos : getIndex(current, context) };
+       case MULTIPLE:
+         List ancestors = new ArrayList();
+         while (context != null)
+           {
+             if (countMatches(current, context))
+               {
+                 if (from == null || fromMatches(context))
+                   {
+                     ancestors.add(context);
+                   }
+               }
+             context = context.getParentNode();
+           }
+         Collections.sort(ancestors, documentOrderComparator);
+         int[] ret = new int[ancestors.size()];
+         for (int i = 0; i < ret.length; i++)
+           {
+             ret[i] = getIndex(current, (Node) ancestors.get(i));
+           }
+         return ret;
+       case ANY:
+         Expr preceding = new Selector(Selector.PRECEDING,
+                                       Collections.EMPTY_LIST);
+         Expr ancestorOrSelf = new Selector(Selector.ANCESTOR_OR_SELF,
+                                            Collections.EMPTY_LIST);
+         Expr any = new UnionExpr(preceding, ancestorOrSelf);
+         Object eval = any.evaluate(context, pos, len);
+         if (eval instanceof Collection)
+           {
+             Collection ns = (Collection) eval;
+             List candidates = new ArrayList();
+             for (Iterator i = ns.iterator(); i.hasNext(); )
+               {
+                 Node candidate = (Node) i.next();
+                 if (countMatches(current, candidate))
+                   {
+                     candidates.add(candidate);
+                     if (from != null && from.matches(candidate))
+                       {
+                         break;
+                       }
+                   }
+               }
+             return new int[] { candidates.size() };
+           }
+         return new int[0];
+       default:
+         throw new TransformerException("invalid level");
+       }
+   }
+ 
+   boolean countMatches(Node current, Node node)
+   {
+     if (count == null)
+       {
+         int cnt = current.getNodeType();
+         int nnt = node.getNodeType();
+         if (cnt != nnt)
+           {
+             return false;
+           }
+         if (nnt == Node.ELEMENT_NODE || nnt == Node.ATTRIBUTE_NODE)
+           {
+             String curi = current.getNamespaceURI();
+             String nuri = node.getNamespaceURI();
+             if ((curi == null && nuri != null) ||
+                 (curi != null && !curi.equals(nuri)))
+               {
+                 return false;
+               }
+             String cn = current.getLocalName();
+             if (cn == null)
+               {
+                 cn = current.getNodeName();
+               }
+             String nn = node.getLocalName();
+             if (nn == null)
+               {
+                 nn = node.getNodeName();
+               }
+             if (!cn.equals(nn))
+               {
+                 return false;
+               }
+           }
+         return true;
+       }
+     else
+       {
+         return count.matches(node);
+       }
+   }
+ 
+   boolean fromMatches(Node node)
+   {
+     for (Node ctx = node.getParentNode(); ctx != null;
+          ctx = ctx.getParentNode())
+       {
+         if (from.matches(ctx))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   int getIndex(Node current, Node node)
+   {
+     int index = 0;
+     do
+       {
+         do
+           {
+             node = node.getPreviousSibling();
+           }
+         while (node != null && !countMatches(current, node));
+         index++;
+       }
+     while (node != null);
+     return index;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/NumberNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/NumberNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/NumberNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/NumberNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* NumberNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing the XSL <code>number</code> instruction
+  * with a <code>value</code> expression.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class NumberNode
+   extends AbstractNumberNode
+ {
+ 
+   final Expr value;
+ 
+   NumberNode(Expr value, TemplateNode format, String lang,
+              int letterValue, String groupingSeparator, int groupingSize)
+   {
+     super(format, lang, letterValue, groupingSeparator, groupingSize);
+     this.value = value;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new NumberNode(value.clone(stylesheet),
+                                       format, lang, letterValue,
+                                       groupingSeparator, groupingSize);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   int[] compute(Stylesheet stylesheet, Node context, int pos, int len)
+     throws TransformerException
+   {
+     Object ret = value.evaluate(context, pos, len);
+     Double d = (ret instanceof Double) ? ((Double) ret) :
+       new Double(Expr._number(context, ret));
+     return new int[] { d.intValue() };
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/OtherwiseNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/OtherwiseNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/OtherwiseNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/OtherwiseNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* OtherwiseNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A template node representing an XSL <code>otherwise</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class OtherwiseNode
+   extends TemplateNode
+ {
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new OtherwiseNode();
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     if (children != null)
+       {
+         children.apply(stylesheet, mode,
+                        context, pos, len,
+                        parent, nextSibling);
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ParameterNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ParameterNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ParameterNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ParameterNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,198 ----
+ /* ParameterNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Collections;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node that sets a variable or parameter during template
+  * processing.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ParameterNode
+   extends TemplateNode
+   implements Comparable
+ {
+ 
+   final QName name;
+   final Expr select;
+   final int type;
+ 
+   ParameterNode(QName name, Expr select, int type)
+   {
+     this.name = name;
+     this.select = select;
+     this.type = type;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new ParameterNode(name,
+                                          select.clone(stylesheet),
+                                          type);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     // push the variable context
+     stylesheet.bindings.push(type);
+     // set the variable
+     Object value = getValue(stylesheet, mode, context, pos, len);
+     if (value != null)
+       {
+         stylesheet.bindings.set(name, value, type);
+         if (stylesheet.debug)
+           {
+             System.err.println(this + ": set to " + value);
+           }
+       }
+     // variable and param don't process children as such
+     // all subsequent instructions are processed with that variable context
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+     // pop the variable context
+     stylesheet.bindings.pop(type);
+   }
+   
+   Object getValue(Stylesheet stylesheet, QName mode,
+                   Node context, int pos, int len)
+     throws TransformerException
+   {
+     if (select != null)
+       {
+         return select.evaluate(context, pos, len);
+       }
+     else if (children != null)
+       {
+         Document doc = (context instanceof Document) ? (Document) context :
+           context.getOwnerDocument();
+         DocumentFragment fragment = doc.createDocumentFragment();
+         children.apply(stylesheet, mode, context, pos, len, fragment, null);
+         return Collections.singleton(fragment);
+       }
+     else
+       {
+         return null;
+       }
+   }
+   
+   public boolean references(QName var)
+   {
+     if (select != null && select.references(var))
+       {
+         return true;
+       }
+     return super.references(var);
+   }
+ 
+   public int compareTo(Object other)
+   {
+     if (other instanceof ParameterNode)
+       {
+         ParameterNode pn = (ParameterNode) other;
+         boolean r1 = references(pn.name);
+         boolean r2 = pn.references(name);
+         if (r1 && r2)
+           {
+             throw new IllegalArgumentException("circular definitions");
+           }
+         if (r1)
+           {
+             return 1;
+           }
+         if (r2)
+           {
+             return -1;
+           }
+       }
+     return 0;
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("name=");
+     buf.append(name);
+     if (select != null)
+       {
+         buf.append(",select=");
+         buf.append(select);
+       }
+     buf.append(",type=");
+     switch (type)
+       {
+       case Bindings.VARIABLE:
+         buf.append("variable");
+         break;
+       case Bindings.PARAM:
+         buf.append("param");
+         break;
+       case Bindings.WITH_PARAM:
+         buf.append("with-param");
+         break;
+       }
+     buf.append(']');
+     return buf.toString();
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ProcessingInstructionNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ProcessingInstructionNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ProcessingInstructionNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ProcessingInstructionNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,126 ----
+ /* ProcessingInstructionNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.ProcessingInstruction;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing the XSL <code>processing-instruction</code>
+  * instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ProcessingInstructionNode
+   extends TemplateNode
+ {
+ 
+   final String name;
+ 
+   ProcessingInstructionNode(String name)
+   {
+     this.name = name;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new ProcessingInstructionNode(name);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     String data = null;
+     Document doc = (parent instanceof Document) ? (Document) parent :
+       parent.getOwnerDocument();
+     if (children != null)
+       {
+         // Create a document fragment to hold the text
+         DocumentFragment fragment = doc.createDocumentFragment();
+         // Apply children to the fragment
+         children.apply(stylesheet, mode,
+                        context, pos, len,
+                        fragment, null);
+         // Use XPath string-value of fragment
+         data = Expr.stringValue(fragment);
+       }
+     ProcessingInstruction pi = doc.createProcessingInstruction(name, data);
+     // Insert into result tree
+     if (nextSibling != null)
+       {
+         parent.insertBefore(pi, nextSibling);
+       }
+     else
+       {
+         parent.appendChild(pi);
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("name=");
+     buf.append(name);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/SAXSerializer.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/SAXSerializer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/SAXSerializer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/SAXSerializer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,305 ----
+ /* SAXSerializer.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.ext.LexicalHandler;
+ 
+ /**
+  * Serializes a DOM node to a sequence of SAX events.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class SAXSerializer
+   implements Attributes
+ {
+ 
+   transient NamedNodeMap attrs;
+   transient LinkedList namespaces = new LinkedList();
+ 
+   boolean isDefined(String prefix, String uri)
+   {
+     for (Iterator i = namespaces.iterator(); i.hasNext(); )
+       {
+         HashMap ctx = (HashMap) i.next();
+         if (uri.equals(ctx.get(prefix)))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   void define(String prefix, String uri)
+   {
+     for (Iterator i = namespaces.iterator(); i.hasNext(); )
+       {
+         HashMap ctx = (HashMap) i.next();
+         if (ctx.containsKey(prefix))
+           {
+             HashMap newCtx = new HashMap();
+             newCtx.put(prefix, uri);
+             namespaces.addFirst(newCtx);
+             return;
+           }
+       }
+     HashMap ctx;
+     if (namespaces.isEmpty())
+       {
+         ctx = new HashMap();
+         namespaces.add(ctx);
+       }
+     else
+       {
+         ctx = (HashMap) namespaces.getFirst();
+       }
+     ctx.put(prefix, uri);
+   }
+ 
+   void undefine(String prefix, String uri)
+   {
+     for (Iterator i = namespaces.iterator(); i.hasNext(); )
+       {
+         HashMap ctx = (HashMap) i.next();
+         if (uri.equals(ctx.get(prefix)))
+           {
+             ctx.remove(prefix);
+             if (ctx.isEmpty())
+               {
+                 namespaces.remove(ctx);
+               }
+             return;
+           }
+       }
+   }
+ 
+   public int getLength()
+   {
+     return attrs.getLength();
+   }
+ 
+   public String getURI(int index)
+   {
+     return attrs.item(index).getNamespaceURI();
+   }
+ 
+   public String getLocalName(int index)
+   {
+     return attrs.item(index).getLocalName();
+   }
+ 
+   public String getQName(int index)
+   {
+     return attrs.item(index).getNodeName();
+   }
+ 
+   public String getType(int index)
+   {
+     Attr attr = (Attr) attrs.item(index);
+     return attr.isId() ? "ID" : "CDATA";
+   }
+ 
+   public String getValue(int index)
+   {
+     return attrs.item(index).getNodeValue();
+   }
+ 
+   public int getIndex(String uri, String localName)
+   {
+     int len = attrs.getLength();
+     for (int i = 0; i < len; i++)
+       {
+         Node attr = attrs.item(i);
+         String a_uri = attr.getNamespaceURI();
+         String a_localName = attr.getLocalName();
+         if (((a_uri == null && uri == null) ||
+              (a_uri != null && a_uri.equals(uri))) &&
+             a_localName.equals(localName))
+           {
+             return i;
+           }
+       }
+     return -1;
+   }
+ 
+   public int getIndex(String qName)
+   {
+     int len = attrs.getLength();
+     for (int i = 0; i < len; i++)
+       {
+         Node attr = attrs.item(i);
+         String a_name = attr.getNodeName();
+         if (a_name.equals(qName))
+           {
+             return i;
+           }
+       }
+     return -1;
+   }
+ 
+   public String getType(String uri, String localName)
+   {
+     Attr attr = (Attr) attrs.getNamedItemNS(uri, localName);
+     return attr.isId() ? "ID" : "CDATA";
+   }
+ 
+   public String getType(String qName)
+   {
+     Attr attr = (Attr) attrs.getNamedItem(qName);
+     return attr.isId() ? "ID" : "CDATA";
+   }
+ 
+   public String getValue(String uri, String localName)
+   {
+     return attrs.getNamedItemNS(uri, localName).getNodeValue();
+   }
+ 
+   public String getValue(String qName)
+   {
+     return attrs.getNamedItem(qName).getNodeValue();
+   }
+ 
+   void serialize(Node node, ContentHandler ch, LexicalHandler lh)
+     throws SAXException
+   {
+     attrs = node.getAttributes();
+     Node children;
+     Node next = node.getNextSibling();
+     switch (node.getNodeType())
+       {
+       case Node.ELEMENT_NODE:
+         String uri = node.getNamespaceURI();
+         String prefix = node.getPrefix();
+         boolean defined = isDefined(prefix, uri);
+         if (!defined)
+           {
+             define(prefix, uri);
+             ch.startPrefixMapping(prefix, uri);
+           }
+         String localName = node.getLocalName();
+         String qName = node.getNodeName();
+         ch.startElement(uri, localName, qName, this);
+         children = node.getFirstChild();
+         if (children != null)
+           {
+             serialize(children, ch, lh);
+           }
+         ch.endElement(uri, localName, qName);
+         if (!defined)
+           {
+             ch.endPrefixMapping(prefix);
+             undefine(prefix, uri);
+           }
+         break;
+       case Node.TEXT_NODE:
+         char[] chars = node.getNodeValue().toCharArray();
+         ch.characters(chars, 0, chars.length);
+         break;
+       case Node.CDATA_SECTION_NODE:
+         char[] cdata = node.getNodeValue().toCharArray();
+         if (lh != null)
+           {
+             lh.startCDATA();
+             ch.characters(cdata, 0, cdata.length);
+             lh.endCDATA();
+           }
+         else
+           {
+             ch.characters(cdata, 0, cdata.length);
+           }
+         break;
+       case Node.COMMENT_NODE:
+         if (lh != null)
+           {
+             char[] comment = node.getNodeValue().toCharArray();
+             lh.comment(comment, 0, comment.length);
+           }
+         break;
+       case Node.DOCUMENT_NODE:
+       case Node.DOCUMENT_FRAGMENT_NODE:
+         ch.startDocument();
+         children = node.getFirstChild();
+         if (children != null)
+           {
+             serialize(children, ch, lh);
+           }
+         ch.endDocument();
+         break;
+       case Node.DOCUMENT_TYPE_NODE:
+         if (lh != null)
+           {
+             DocumentType doctype = (DocumentType) node;
+             String publicId = doctype.getPublicId();
+             String systemId = doctype.getSystemId();
+             lh.startDTD(node.getNodeName(), publicId, systemId);
+             NamedNodeMap entities = doctype.getEntities();
+             int len = entities.getLength();
+             for (int i = 0; i < len; i++)
+               {
+                 Node entity = entities.item(i);
+                 String entityName = entity.getNodeName();
+                 lh.startEntity(entityName);
+                 lh.endEntity(entityName);
+               }
+             lh.endDTD();
+           }
+         break;
+       case Node.PROCESSING_INSTRUCTION_NODE:
+         ch.processingInstruction(node.getNodeName(), node.getNodeValue());
+         break;
+       case Node.ENTITY_REFERENCE_NODE:
+         ch.skippedEntity(node.getNodeName());
+         break;
+       }
+     attrs = null;
+     if (next != null)
+       {
+         serialize(next, ch, lh);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/SortKey.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/SortKey.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/SortKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/SortKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,179 ----
+ /* SortKey.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * An XSL sort key.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class SortKey
+ {
+ 
+   static final int DEFAULT = 0;
+   static final int UPPER_FIRST = 1;
+   static final int LOWER_FIRST = 2;
+ 
+   final Expr select;
+   final TemplateNode langTemplate;
+   final TemplateNode dataTypeTemplate;
+   final TemplateNode orderTemplate;
+   final TemplateNode caseOrderTemplate;
+ 
+   transient String lang;
+   transient String dataType;
+   transient boolean descending;
+   transient int caseOrder;
+ 
+   SortKey(Expr select, TemplateNode lang, TemplateNode dataType,
+           TemplateNode order, TemplateNode caseOrder)
+   {
+     this.select = select;
+     this.langTemplate = lang;
+     this.dataTypeTemplate = dataType;
+     this.orderTemplate = order;
+     this.caseOrderTemplate = caseOrder;
+   }
+ 
+   String key(Node node)
+   {
+     Object ret = select.evaluate(node, 1, 1);
+     if (ret instanceof String)
+       {
+         return (String) ret;
+       }
+     else
+       {
+         return Expr._string(node, ret);
+       }
+   }
+ 
+   /**
+    * Prepare for a sort.
+    * This sets all transient variables from their AVTs.
+    */
+   void init(Stylesheet stylesheet, QName mode,
+             Node context, int pos, int len,
+             Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Document doc = (context instanceof Document) ? (Document) context :
+       context.getOwnerDocument();
+     if (langTemplate == null)
+       {
+         lang = null;
+       }
+     else
+       {
+         DocumentFragment fragment = doc.createDocumentFragment();
+         langTemplate.apply(stylesheet, mode, context, pos, len,
+                            fragment, null);
+         lang = Expr.stringValue(fragment);
+       }
+     if (dataTypeTemplate == null)
+       {
+         dataType = "text";
+       }
+     else
+       {
+         DocumentFragment fragment = doc.createDocumentFragment();
+         dataTypeTemplate.apply(stylesheet, mode, context, pos, len,
+                                fragment, null);
+         dataType = Expr.stringValue(fragment);
+       }
+     if (orderTemplate == null)
+       {
+         descending = false;
+       }
+     else
+       {
+         DocumentFragment fragment = doc.createDocumentFragment();
+         orderTemplate.apply(stylesheet, mode, context, pos, len,
+                             fragment, null);
+         String order = Expr.stringValue(fragment);
+         descending = "descending".equals(order);
+       }
+     if (caseOrderTemplate == null)
+       {
+         caseOrder = DEFAULT;
+       }
+     else
+       {
+         DocumentFragment fragment = doc.createDocumentFragment();
+         caseOrderTemplate.apply(stylesheet, mode, context, pos, len,
+                                 fragment, null);
+         String co = Expr.stringValue(fragment);
+         caseOrder = "upper-first".equals(co) ? UPPER_FIRST :
+           "lower-first".equals(co) ? LOWER_FIRST :
+           DEFAULT;
+       }
+   }
+ 
+   boolean references(QName var)
+   {
+     if (select != null && select.references(var))
+       {
+         return true;
+       }
+     if (langTemplate != null && langTemplate.references(var))
+       {
+         return true;
+       }
+     if (dataTypeTemplate != null && dataTypeTemplate.references(var))
+       {
+         return true;
+       }
+     if (orderTemplate != null && orderTemplate.references(var))
+       {
+         return true;
+       }
+     if (caseOrderTemplate != null && caseOrderTemplate.references(var))
+       {
+         return true;
+       }
+     return false;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/StreamSerializer.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/StreamSerializer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/StreamSerializer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/StreamSerializer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,766 ----
+ /* StreamSerializer.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.UnsupportedEncodingException;
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetEncoder;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Map;
+ import javax.xml.XMLConstants;
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Serializes a DOM node to an output stream.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class StreamSerializer
+ {
+   
+   static final int SPACE = 0x20;
+   static final int BANG = 0x21; // !
+   static final int APOS = 0x27; // '
+   static final int SLASH = 0x2f; // /
+   static final int BRA = 0x3c; // <
+   static final int KET = 0x3e; // >
+   static final int EQ = 0x3d; // =
+ 
+   /**
+    * HTML 4.01 boolean attributes
+    */
+   static final Map HTML_BOOLEAN_ATTRIBUTES = new HashMap();
+   static
+   {
+     HashSet set;
+     
+     set = new HashSet();
+     set.add("nohref");
+     HTML_BOOLEAN_ATTRIBUTES.put("area", set);
+ 
+     set = new HashSet();
+     set.add("ismap");
+     HTML_BOOLEAN_ATTRIBUTES.put("img", set);
+ 
+     set = new HashSet();
+     set.add("declare");
+     HTML_BOOLEAN_ATTRIBUTES.put("object", set);
+     
+     set = new HashSet();
+     set.add("noshade");
+     HTML_BOOLEAN_ATTRIBUTES.put("hr", set);
+     
+     set = new HashSet();
+     set.add("compact");
+     HTML_BOOLEAN_ATTRIBUTES.put("dl", set);
+     HTML_BOOLEAN_ATTRIBUTES.put("ol", set);
+     HTML_BOOLEAN_ATTRIBUTES.put("ul", set);
+     HTML_BOOLEAN_ATTRIBUTES.put("dir", set);
+     HTML_BOOLEAN_ATTRIBUTES.put("menu", set);
+     
+     set = new HashSet();
+     set.add("checked");
+     set.add("disabled");
+     set.add("readonly");
+     set.add("ismap");
+     HTML_BOOLEAN_ATTRIBUTES.put("input", set);
+     
+     set = new HashSet();
+     set.add("multiple");
+     set.add("disabled");
+     HTML_BOOLEAN_ATTRIBUTES.put("select", set);
+     
+     set = new HashSet();
+     set.add("disabled");
+     HTML_BOOLEAN_ATTRIBUTES.put("optgroup", set);
+     
+     set = new HashSet();
+     set.add("selected");
+     set.add("disabled");
+     HTML_BOOLEAN_ATTRIBUTES.put("option", set);
+     
+     set = new HashSet();
+     set.add("disabled");
+     set.add("readonly");
+     HTML_BOOLEAN_ATTRIBUTES.put("textarea", set);
+     
+     set = new HashSet();
+     set.add("disabled");
+     HTML_BOOLEAN_ATTRIBUTES.put("button", set);
+     
+     set = new HashSet();
+     set.add("nowrap");
+     HTML_BOOLEAN_ATTRIBUTES.put("th", set);
+     HTML_BOOLEAN_ATTRIBUTES.put("td", set);
+     
+     set = new HashSet();
+     set.add("noresize");
+     HTML_BOOLEAN_ATTRIBUTES.put("frame", set);
+     
+     set = new HashSet();
+     set.add("defer");
+     HTML_BOOLEAN_ATTRIBUTES.put("script", set);
+   }
+ 
+   protected final String encoding;
+   final Charset charset;
+   final CharsetEncoder encoder;
+   final int mode;
+   final Map namespaces;
+   protected String eol;
+   Collection cdataSectionElements = Collections.EMPTY_SET;
+ 
+   protected boolean discardDefaultContent;
+   protected boolean xmlDeclaration = true;
+ 
+   public StreamSerializer()
+   {
+     this(Stylesheet.OUTPUT_XML, null, null);
+   }
+ 
+   public StreamSerializer(String encoding)
+   {
+     this(Stylesheet.OUTPUT_XML, encoding, null);
+   }
+ 
+   public StreamSerializer(int mode, String encoding, String eol)
+   {
+     this.mode = mode;
+     if (encoding == null)
+       {
+         encoding = "UTF-8";
+       }
+     this.encoding = encoding.intern();
+     charset = Charset.forName(this.encoding);
+     encoder = charset.newEncoder();
+     this.eol = (eol != null) ? eol : System.getProperty("line.separator");
+     namespaces = new HashMap();
+   }
+ 
+   void setCdataSectionElements(Collection c)
+   {
+     cdataSectionElements = c;
+   }
+ 
+   public void serialize(final Node node, final OutputStream out)
+     throws IOException
+   {
+     serialize(node, out, false);
+   }
+   
+   void serialize(Node node, final OutputStream out,
+                  boolean convertToCdata)
+     throws IOException
+   {
+     while (node != null)
+       {
+         Node next = node.getNextSibling();
+         doSerialize(node, out, convertToCdata);
+         node = next;
+       }
+   }
+ 
+   private void doSerialize(final Node node, final OutputStream out,
+                            boolean convertToCdata)
+     throws IOException
+   {
+     if (out == null)
+       {
+         throw new NullPointerException("no output stream");
+       }
+     String value, prefix;
+     Node children;
+     String uri = node.getNamespaceURI();
+     boolean defined = false;
+     short nt = node.getNodeType();
+     if (convertToCdata && nt == Node.TEXT_NODE)
+       {
+         nt = Node.CDATA_SECTION_NODE;
+       }
+     switch (nt)
+       {
+       case Node.ATTRIBUTE_NODE:
+         prefix = node.getPrefix();
+         if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
+             XMLConstants.XMLNS_ATTRIBUTE.equals(prefix) ||
+             (prefix != null && prefix.startsWith("xmlns:")))
+           {
+             String nsuri = node.getNodeValue();
+             if (isDefined(nsuri))
+               {
+                 break;
+               }
+             String name = node.getLocalName();
+             if (name == null)
+               {
+                 name = node.getNodeName();
+               }
+             define(nsuri, name);
+           }
+         else if (uri != null && !isDefined(uri))
+           {
+             prefix = define(uri, prefix);
+             String nsname = (prefix == null) ? "xmlns" : "xmlns:" + prefix;
+             out.write(SPACE);
+             out.write(encodeText(nsname));
+             out.write(EQ);
+             String nsvalue = "'" + encode(uri, true, true) + "'";
+             out.write(nsvalue.getBytes(encoding));
+             defined = true;
+           }
+         out.write(SPACE);
+         String a_nodeName = node.getNodeName();
+         out.write(encodeText(a_nodeName));
+         String a_nodeValue = node.getNodeValue();
+         if (mode == Stylesheet.OUTPUT_HTML &&
+             a_nodeName.equals(a_nodeValue) &&
+             isHTMLBoolean((Attr) node, a_nodeName))
+           {
+             break;
+           }
+         out.write(EQ);
+         value = "'" + encode(a_nodeValue, true, true) + "'";
+         out.write(encodeText(value));
+         break;
+       case Node.ELEMENT_NODE:
+         value = node.getNodeName();
+         out.write(BRA);
+         out.write(encodeText(value));
+         if (uri != null && !isDefined(uri))
+           {
+             prefix = define(uri, node.getPrefix());
+             String nsname = (prefix == null) ? "xmlns" : "xmlns:" + prefix;
+             out.write(SPACE);
+             out.write(encodeText(nsname));
+             out.write(EQ);
+             String nsvalue = "'" + encode(uri, true, true) + "'";
+             out.write(encodeText(nsvalue));
+             defined = true;
+           }
+         NamedNodeMap attrs = node.getAttributes();
+         if (attrs != null)
+           {
+             int len = attrs.getLength();
+             for (int i = 0; i < len; i++)
+               {
+                 Attr attr = (Attr) attrs.item(i);
+                 if (discardDefaultContent && !attr.getSpecified())
+                   {
+                     // NOOP
+                   }
+                 else
+                   {
+                     serialize(attr, out, false);
+                   }
+               }
+           }
+         convertToCdata = cdataSectionElements.contains(value);
+         children = node.getFirstChild();
+         if (children == null)
+           {
+             out.write(SLASH);
+             out.write(KET);
+           }
+         else
+           {
+             out.write(KET);
+             serialize(children, out, convertToCdata);
+             out.write(BRA);
+             out.write(SLASH);
+             out.write(encodeText(value));
+             out.write(KET);
+           }
+         break;
+       case Node.TEXT_NODE:
+         value = node.getNodeValue();
+         if (!"yes".equals(node.getUserData("disable-output-escaping")))
+           {
+             value = encode(value, false, false);
+           }
+         out.write(encodeText(value));
+         break;
+       case Node.CDATA_SECTION_NODE:
+         value = "<![CDATA[" + node.getNodeValue() + "]]>";
+         out.write(encodeText(value));
+         break;
+       case Node.COMMENT_NODE:
+         value = "<!--" + node.getNodeValue() + "-->";
+         out.write(encodeText(value));
+         Node cp = node.getParentNode();
+         if (cp != null && cp.getNodeType() == Node.DOCUMENT_NODE)
+           {
+             out.write(encodeText(eol));
+           }
+         break;
+       case Node.DOCUMENT_NODE:
+       case Node.DOCUMENT_FRAGMENT_NODE:
+         if (mode == Stylesheet.OUTPUT_XML)
+           {
+             if ("UTF-16".equalsIgnoreCase(encoding))
+               {
+                 out.write(0xfe);
+                 out.write(0xff);
+               }
+             if (!"yes".equals(node.getUserData("omit-xml-declaration")) &&
+                 xmlDeclaration)
+               {
+                 Document doc = (node instanceof Document) ?
+                   (Document) node : null;
+                 String version = (doc != null) ? doc.getXmlVersion() : null;
+                 if (version == null)
+                   {
+                     version = (String) node.getUserData("version");
+                   }
+                 if (version == null)
+                   {
+                     version = "1.0";
+                   }
+                 out.write(BRA);
+                 out.write(0x3f);
+                 out.write("xml version='".getBytes("US-ASCII"));
+                 out.write(version.getBytes("US-ASCII"));
+                 out.write(APOS);
+                 if (!("UTF-8".equalsIgnoreCase(encoding)))
+                   {
+                     out.write(" encoding='".getBytes("US-ASCII"));
+                     out.write(encoding.getBytes("US-ASCII"));
+                     out.write(APOS);
+                   }
+                 if ((doc != null && doc.getXmlStandalone()) ||
+                     "yes".equals(node.getUserData("standalone")))
+                   {
+                     out.write(" standalone='yes'".getBytes("US-ASCII"));
+                   }
+                 out.write(0x3f);
+                 out.write(KET);
+                 out.write(encodeText(eol));
+               }
+             // TODO warn if not outputting the declaration would be a
+             // problem
+           }
+         else if (mode == Stylesheet.OUTPUT_HTML)
+           {
+             // Ensure that encoding is accessible
+             String mediaType = (String) node.getUserData("media-type");
+             if (mediaType == null)
+               {
+                 mediaType = "text/html";
+               }
+             String contentType = mediaType + "; charset=" +
+               ((encoding.indexOf(' ') != -1) ?
+                 "\"" + encoding + "\"" :
+                 encoding);
+             Document doc = (node instanceof Document) ? (Document) node :
+               node.getOwnerDocument();
+             Node html = null;
+             for (Node ctx = node.getFirstChild(); ctx != null;
+                  ctx = ctx.getNextSibling())
+               {
+                 if (ctx.getNodeType() == Node.ELEMENT_NODE)
+                   {
+                     html = ctx;
+                     break;
+                   }
+               }
+             if (html == null)
+               {
+                 html = doc.createElement("html");
+                 node.appendChild(html);
+               }
+             Node head = null;
+             for (Node ctx = html.getFirstChild(); ctx != null;
+                  ctx = ctx.getNextSibling())
+               {
+                 if (ctx.getNodeType() == Node.ELEMENT_NODE)
+                   {
+                     String name = ctx.getLocalName();
+                     if (name == null)
+                       {
+                         name = ctx.getNodeName();
+                       }
+                     if ("head".equalsIgnoreCase(name))
+                       {
+                         head = ctx;
+                         break;
+                       }
+                   }
+               }
+             if (head == null)
+               {
+                 head = doc.createElement("head");
+                 Node c1 = null;
+                 for (Node ctx = html.getFirstChild(); ctx != null;
+                      ctx = ctx.getNextSibling())
+                   {
+                     if (ctx.getNodeType() == Node.ELEMENT_NODE)
+                       {
+                         c1 = ctx;
+                         break;
+                       }
+                   }
+                 if (c1 != null)
+                   {
+                     html.insertBefore(head, c1);
+                   }
+                 else
+                   {
+                     html.appendChild(head);
+                   }
+               }
+             Node meta = null;
+             Node metaContent = null;
+             for (Node ctx = head.getFirstChild(); ctx != null;
+                  ctx = ctx.getNextSibling())
+               {
+                 if (ctx.getNodeType() == Node.ELEMENT_NODE)
+                   {
+                     String name = ctx.getLocalName();
+                     if (name == null)
+                       {
+                         name = ctx.getNodeName();
+                       }
+                     if ("meta".equalsIgnoreCase(name))
+                       {
+                         NamedNodeMap metaAttrs = ctx.getAttributes();
+                         int len = metaAttrs.getLength();
+                         String httpEquiv = null;
+                         Node content = null;
+                         for (int i = 0; i < len; i++)
+                           {
+                             Node attr = metaAttrs.item(i);
+                             String attrName = attr.getNodeName();
+                             if ("http-equiv".equalsIgnoreCase(attrName))
+                               {
+                                 httpEquiv = attr.getNodeValue();
+                               }
+                             else if ("content".equalsIgnoreCase(attrName))
+                               {
+                                 content = attr;
+                               }
+                           }
+                         if ("Content-Type".equalsIgnoreCase(httpEquiv))
+                           {
+                             meta = ctx;
+                             metaContent = content;
+                             break;
+                           }
+                       }
+                   }
+               }
+             if (meta == null)
+               {
+                 meta = doc.createElement("meta");
+                 // Insert first
+                 Node first = head.getFirstChild();
+                 if (first == null)
+                   {
+                     head.appendChild(meta);
+                   }
+                 else
+                   {
+                     head.insertBefore(meta, first);
+                   }
+                 Node metaHttpEquiv = doc.createAttribute("http-equiv");
+                 meta.getAttributes().setNamedItem(metaHttpEquiv);
+                 metaHttpEquiv.setNodeValue("Content-Type");
+               }
+             if (metaContent == null)
+               {
+                 metaContent = doc.createAttribute("content");
+                 meta.getAttributes().setNamedItem(metaContent);
+               }
+             metaContent.setNodeValue(contentType);
+             // phew
+           }
+         children = node.getFirstChild();
+         if (children != null)
+           {
+             serialize(children, out, convertToCdata);
+           }
+         break;
+       case Node.DOCUMENT_TYPE_NODE:
+         DocumentType doctype = (DocumentType) node;
+         out.write(BRA);
+         out.write(BANG);
+ 	out.write(encodeText("DOCTYPE "));
+         value = doctype.getNodeName();
+         out.write(encodeText(value));
+         String publicId = doctype.getPublicId();
+         if (publicId != null)
+           {
+             out.write(encodeText(" PUBLIC "));
+             out.write(APOS);
+             out.write(encodeText(publicId));
+             out.write(APOS);
+           }
+         String systemId = doctype.getSystemId();
+         if (systemId != null)
+           {
+             out.write(encodeText(" SYSTEM "));
+             out.write(APOS);
+             out.write(encodeText(systemId));
+             out.write(APOS);
+           }
+         String internalSubset = doctype.getInternalSubset();
+         if (internalSubset != null)
+           {
+             out.write(encodeText(internalSubset));
+           }
+         out.write(KET);
+         out.write(eol.getBytes(encoding));
+         break;
+       case Node.ENTITY_REFERENCE_NODE:
+         value = "&" + node.getNodeValue() + ";";
+         out.write(encodeText(value));
+         break;
+       case Node.PROCESSING_INSTRUCTION_NODE:
+         value = "<?" + node.getNodeName() + " " + node.getNodeValue() + "?>";
+         out.write(encodeText(value));
+         Node pp = node.getParentNode();
+         if (pp != null && pp.getNodeType() == Node.DOCUMENT_NODE)
+           {
+             out.write(encodeText(eol));
+           }
+         break;
+       }
+     if (defined)
+       {
+         undefine(uri);
+       }
+   }
+ 
+   boolean isDefined(String uri)
+   {
+     return XMLConstants.XML_NS_URI.equals(uri) ||
+       XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
+       namespaces.containsKey(uri);
+   }
+ 
+   String define(String uri, String prefix)
+   {
+     while (namespaces.containsValue(prefix))
+       {
+         // Fabricate new prefix
+         prefix = prefix + "_";
+       }
+     namespaces.put(uri, prefix);
+     return prefix;
+   }
+ 
+   void undefine(String uri)
+   {
+     namespaces.remove(uri);
+   }
+ 
+   final byte[] encodeText(String text)
+     throws IOException
+   {
+     encoder.reset();
+     if (!encoder.canEncode(text))
+       {
+         // Check each character
+         StringBuffer buf = new StringBuffer();
+         int len = text.length();
+         for (int i = 0; i < len; i++)
+           {
+             char c = text.charAt(i);
+             if (encoder.canEncode(c))
+               {
+                 buf.append(c);
+               }
+             else
+               {
+                 // Replace with character entity reference
+                 String hex = Integer.toHexString((int) c);
+                 buf.append("&#x");
+                 buf.append(hex);
+                 buf.append(';');
+               }
+           }
+         text = buf.toString();
+       }
+     ByteBuffer encoded = encoder.encode(CharBuffer.wrap(text));
+     int len = encoded.limit() - encoded.position();
+     if (encoded.hasArray())
+       {
+         byte[] ret = encoded.array();
+         if (ret.length > len)
+           {
+             // Why?
+             byte[] ret2 = new byte[len];
+             System.arraycopy(ret, 0, ret2, 0, len);
+             ret = ret2;
+           }
+         return ret;
+       }
+     encoded.flip();
+     byte[] ret = new byte[len];
+     encoded.get(ret, 0, len);
+     return ret;
+   }
+ 
+   String encode(String text, boolean encodeCtl, boolean inAttr)
+   {
+     int len = text.length();
+     StringBuffer buf = null;
+     for (int i = 0; i < len; i++)
+       {
+         char c = text.charAt(i);
+         if (c == '<')
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(text.substring(0, i));
+               }
+             buf.append("&lt;");
+           }
+         else if (c == '>')
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(text.substring(0, i));
+               }
+             buf.append("&gt;");
+           }
+         else if (c == '&')
+           {
+             if (mode == Stylesheet.OUTPUT_HTML && (i + 1) < len &&
+                 text.charAt(i + 1) == '{')
+               {
+                 if (buf != null)
+                   {
+                     buf.append(c);
+                   }
+               }
+             else
+               {
+                 if (buf == null)
+                   {
+                     buf = new StringBuffer(text.substring(0, i));
+                   }
+                 buf.append("&amp;");
+               }
+           }
+         else if (c == '\'' && inAttr)
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(text.substring(0, i));
+               }
+             if (mode == Stylesheet.OUTPUT_HTML)
+               // HTML does not define &apos;, use character entity ref
+               buf.append("&#x27;");
+             else
+               buf.append("&apos;");
+           }
+         else if (c == '"' && inAttr)
+           {
+             if (buf == null)
+               {
+                 buf = new StringBuffer(text.substring(0, i));
+               }
+             buf.append("&quot;");
+           }
+         else if (encodeCtl)
+           {
+             if (c < 0x20)
+               {
+                 if (buf == null)
+                   {
+                     buf = new StringBuffer(text.substring(0, i));
+                   }
+                 buf.append('&');
+                 buf.append('#');
+                 buf.append((int) c);
+                 buf.append(';');
+               }
+             else if (buf != null)
+               {
+                 buf.append(c);
+               }
+           }
+         else if (buf != null)
+           {
+             buf.append(c);
+           }
+       }
+     return (buf == null) ? text : buf.toString();
+   }
+ 
+   String toString(Node node)
+   {
+     ByteArrayOutputStream out = new ByteArrayOutputStream();
+     try
+       {
+         serialize(node, out);
+         return new String(out.toByteArray(), encoding);
+       }
+     catch (IOException e)
+       {
+         throw new RuntimeException(e.getMessage());
+       }
+   }
+ 
+   boolean isHTMLBoolean(Attr attr, String attrName)
+   {
+     attrName = attrName.toLowerCase();
+     Node element = attr.getOwnerElement();
+     String elementName = element.getLocalName();
+     if (elementName == null)
+       {
+         elementName = element.getNodeName();
+       }
+     elementName = elementName.toLowerCase();
+     Collection attributes =
+       (Collection) HTML_BOOLEAN_ATTRIBUTES.get(elementName);
+     return (attributes != null && attributes.contains(attrName));
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/Stylesheet.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/Stylesheet.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/Stylesheet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/Stylesheet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1832 ----
+ /* Stylesheet.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.text.DecimalFormat;
+ import java.text.DecimalFormatSymbols;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedHashMap;
+ import java.util.LinkedHashSet;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.StringTokenizer;
+ import java.util.TreeSet;
+ import javax.xml.XMLConstants;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.TransformerConfigurationException;
+ import javax.xml.transform.TransformerException;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionResolver;
+ import javax.xml.xpath.XPathExpressionException;
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ import org.w3c.dom.UserDataHandler;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.NameTest;
+ import gnu.xml.xpath.NodeTypeTest;
+ import gnu.xml.xpath.Pattern;
+ import gnu.xml.xpath.Selector;
+ import gnu.xml.xpath.Root;
+ import gnu.xml.xpath.Test;
+ import gnu.xml.xpath.XPathImpl;
+ 
+ /**
+  * An XSL stylesheet.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class Stylesheet
+   implements NamespaceContext, XPathFunctionResolver, UserDataHandler, Cloneable
+ {
+ 
+   static final String XSL_NS = "http://www.w3.org/1999/XSL/Transform";
+   
+   static final int OUTPUT_XML = 0;
+   static final int OUTPUT_HTML = 1;
+   static final int OUTPUT_TEXT = 2;
+ 
+   final TransformerFactoryImpl factory;
+   TransformerImpl transformer;
+   Stylesheet parent;
+   final XPathImpl xpath;
+   final String systemId;
+   final int precedence;
+ 
+   final boolean debug;
+ 
+   /**
+    * Version of XSLT.
+    */
+   String version;
+ 
+   Collection extensionElementPrefixes;
+   Collection excludeResultPrefixes;
+ 
+   /**
+    * Set of element names for which we should strip whitespace.
+    */
+   Set stripSpace;
+ 
+   /**
+    * Set of element names for which we should preserve whitespace.
+    */
+   Set preserveSpace;
+ 
+   /**
+    * Output options.
+    */
+   Node output;
+   int outputMethod;
+   String outputVersion;
+   String outputEncoding;
+   boolean outputOmitXmlDeclaration;
+   boolean outputStandalone;
+   String outputPublicId;
+   String outputSystemId;
+   Collection outputCdataSectionElements;
+   boolean outputIndent;
+   String outputMediaType;
+ 
+   /**
+    * Keys.
+    */
+   Collection keys;
+ 
+   /**
+    * Decimal formats.
+    */
+   Map decimalFormats;
+   
+   /**
+    * Namespace aliases.
+    */
+   Map namespaceAliases;
+ 
+   /**
+    * Attribute-sets.
+    */
+   List attributeSets;
+ 
+   /**
+    * Variables.
+    */
+   List variables;
+ 
+   /**
+    * Variable and parameter bindings.
+    */
+   Bindings bindings;
+ 
+   /**
+    * Templates.
+    */
+   LinkedList templates;
+ 
+   TemplateNode builtInNodeTemplate;
+   TemplateNode builtInTextTemplate;
+ 
+   /**
+    * Holds the current node while parsing.
+    * Necessary to associate the document function with its declaring node,
+    * to resolve namespaces, and to maintain the current node for the
+    * current() function.
+    */
+   Node current;
+ 
+   /**
+    * Set by a terminating message.
+    */
+   transient boolean terminated;
+ 
+   /**
+    * Current template in force.
+    */
+   transient Template currentTemplate;
+ 
+   Stylesheet(TransformerFactoryImpl factory,
+              Stylesheet parent,
+              Document doc,
+              String systemId,
+              int precedence)
+     throws TransformerConfigurationException
+   {
+     this.factory = factory;
+     this.systemId = systemId;
+     this.precedence = precedence;
+     this.parent = parent;
+     extensionElementPrefixes = new HashSet();
+     excludeResultPrefixes = new HashSet();
+     stripSpace = new LinkedHashSet();
+     preserveSpace = new LinkedHashSet();
+     outputCdataSectionElements = new LinkedHashSet();
+     xpath = (XPathImpl) factory.xpathFactory.newXPath();
+     if (parent == null)
+       {
+         bindings = new Bindings(this);
+         attributeSets = new LinkedList();
+         variables = new LinkedList();
+         namespaceAliases = new LinkedHashMap();
+         templates = new LinkedList();
+         keys = new LinkedList();
+         decimalFormats = new LinkedHashMap();
+         initDefaultDecimalFormat();
+         xpath.setNamespaceContext(this);
+         xpath.setXPathFunctionResolver(this);
+       }
+     else
+       {
+         /* Test for import circularity */
+         for (Stylesheet ctx = this; ctx.parent != null; ctx = ctx.parent)
+           {
+             if (systemId != null && systemId.equals(ctx.parent.systemId))
+               {
+                 String msg = "circularity importing " + systemId;
+                 throw new TransformerConfigurationException(msg);
+               }
+           }
+         /* OK */
+         Stylesheet root = getRootStylesheet();
+         bindings = root.bindings;
+         attributeSets = root.attributeSets;
+         variables = root.variables;
+         namespaceAliases = root.namespaceAliases;
+         templates = root.templates;
+         keys = root.keys;
+         decimalFormats = root.decimalFormats;
+         xpath.setNamespaceContext(root);
+         xpath.setXPathFunctionResolver(root);
+       }
+     xpath.setXPathVariableResolver(bindings);
+ 
+     Test anyNode = new NodeTypeTest((short) 0);
+     List tests = Collections.singletonList(anyNode);
+     builtInNodeTemplate =
+       new ApplyTemplatesNode(new Selector(Selector.CHILD, tests),
+                              null, null, null, true);
+     builtInTextTemplate =
+       new ValueOfNode(new Selector(Selector.SELF, tests),
+                       false);
+     
+     parse(doc.getDocumentElement(), true);
+     current = doc; // Alow namespace resolution during processing
+     
+     debug = ("yes".equals(System.getProperty("xsl.debug")));
+ 
+     if (debug)
+       {
+         System.err.println("Stylesheet: " + doc.getDocumentURI());
+         for (Iterator i = templates.iterator(); i.hasNext(); )
+           {
+             Template t = (Template) i.next();
+             t.list(System.err);
+             System.err.println("--------------------");
+           }
+       }
+   }
+ 
+   Stylesheet getRootStylesheet()
+   {
+     Stylesheet stylesheet = this;
+     while (stylesheet.parent != null)
+       {
+         stylesheet = stylesheet.parent;
+       }
+     return stylesheet;
+   }
+   
+   void initDefaultDecimalFormat()
+   {
+     DecimalFormat defaultDecimalFormat = new DecimalFormat();
+     DecimalFormatSymbols symbols = new DecimalFormatSymbols();
+     symbols.setDecimalSeparator('.');
+     symbols.setGroupingSeparator(',');
+     symbols.setPercent('%');
+     symbols.setPerMill('\u2030');
+     symbols.setZeroDigit('0');
+     symbols.setDigit('#');
+     symbols.setPatternSeparator(';');
+     symbols.setInfinity("Infinity");
+     symbols.setNaN("NaN");
+     symbols.setMinusSign('-');
+     defaultDecimalFormat.setDecimalFormatSymbols(symbols);
+     decimalFormats.put(null, defaultDecimalFormat);
+   }
+   
+   // -- Cloneable --
+ 
+   public Object clone()
+   {
+     try
+       {
+         Stylesheet clone = (Stylesheet) super.clone();
+         clone.bindings = (Bindings) bindings.clone();
+ 
+         LinkedList templates2 = new LinkedList();
+         for (Iterator i = templates.iterator(); i.hasNext(); )
+           {
+             Template t = (Template) i.next();
+             templates2.add(t.clone(clone));
+           }
+         clone.templates = templates2;
+ 
+         LinkedList attributeSets2 = new LinkedList();
+         for (Iterator i = attributeSets.iterator(); i.hasNext(); )
+           {
+             AttributeSet as = (AttributeSet) i.next();
+             attributeSets2.add(as.clone(clone));
+           }
+         clone.attributeSets = attributeSets2;
+ 
+         LinkedList variables2 = new LinkedList();
+         for (Iterator i = variables.iterator(); i.hasNext(); )
+           {
+             ParameterNode var = (ParameterNode) i.next();
+             variables2.add(var.clone(clone));
+           }
+         clone.variables = variables2;
+ 
+         LinkedList keys2 = new LinkedList();
+         for (Iterator i = keys.iterator(); i.hasNext(); )
+           {
+             Key k = (Key) i.next();
+             keys2.add(k.clone(clone));
+           }
+         clone.keys = keys2;
+         
+         return clone;
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw new Error(e.getMessage());
+       }
+   }
+ 
+   // -- Variable evaluation --
+ 
+   void initTopLevelVariables(Node context)
+     throws TransformerException
+   {
+     current = context;
+     // Sort the variables into order
+     // See XSLT 11.4: "If the template or expression specifying the value of
+     // a global variable x references a global variable y, then the value
+     // for y must be computed before the value of x."
+     List topLevel = new ArrayList(variables);
+     Collections.sort(topLevel);
+     for (Iterator i = topLevel.iterator(); i.hasNext(); )
+       {
+         ParameterNode var = (ParameterNode) i.next();
+         bindings.set(var.name,
+                      var.getValue(this, null, context, 1, 1),
+                      var.type);
+       }
+     current = null;
+   }
+ 
+   // -- NamespaceContext --
+ 
+   public String getNamespaceURI(String prefix)
+   {
+     return (current == null) ? null : current.lookupNamespaceURI(prefix);
+   }
+ 
+   public String getPrefix(String namespaceURI)
+   {
+     return (current == null) ? null : current.lookupPrefix(namespaceURI);
+   }
+ 
+   public Iterator getPrefixes(String namespaceURI)
+   {
+     // TODO
+     return Collections.singleton(getPrefix(namespaceURI)).iterator();
+   }
+ 
+   final QName getQName(String name)
+   {
+     String localName = name, uri = null, prefix = null;
+     int ci = name.indexOf(':');
+     if (ci != -1)
+       {
+         prefix = name.substring(0, ci);
+         localName = name.substring(ci + 1);
+         uri = getNamespaceURI(prefix);
+       }
+     return new QName(uri, localName, prefix);
+   }
+   
+   // -- Template selection --
+   
+   TemplateNode getTemplate(QName mode, Node context, boolean applyImports)
+     throws TransformerException
+   {
+     if (debug)
+       {
+         System.err.println("getTemplate: mode="+mode+" context="+context);
+       }
+     Set candidates = new TreeSet();
+     for (Iterator j = templates.iterator(); j.hasNext(); )
+       {
+         Template t = (Template) j.next();
+         boolean isMatch = t.matches(mode, context);
+         if (applyImports)
+           {
+             if (currentTemplate == null)
+               {
+                 String msg = "current template may not be null " +
+                   "during apply-imports";
+                 throw new TransformerException(msg);
+               }
+             if (!currentTemplate.imports(t))
+               {
+                 isMatch = false;
+               }
+           }
+         //System.err.println("\t"+context+" "+t+"="+isMatch);
+         if (isMatch)
+           {
+             candidates.add(t);
+           }
+       }
+     //System.err.println("\tcandidates="+candidates);
+     if (candidates.isEmpty())
+       {
+         // Apply built-in template
+         // Current template is unchanged
+         if (debug)
+           {
+             System.err.println("\tbuiltInTemplate context="+context);
+           }
+         switch (context.getNodeType())
+           {
+           case Node.ELEMENT_NODE:
+           case Node.DOCUMENT_NODE:
+           case Node.DOCUMENT_FRAGMENT_NODE:
+           case Node.PROCESSING_INSTRUCTION_NODE:
+           case Node.COMMENT_NODE:
+             return builtInNodeTemplate;
+           case Node.TEXT_NODE:
+           case Node.ATTRIBUTE_NODE:
+             return builtInTextTemplate;
+           default:
+             return null;
+           }
+       }
+     else
+       {
+         Template t = (Template) candidates.iterator().next();
+         // Set current template
+         currentTemplate = t;
+         if (debug)
+           {
+             System.err.println("\ttemplate="+t+" context="+context);
+           }
+         return t.node;
+       }
+   }
+ 
+   TemplateNode getTemplate(QName mode, QName name)
+     throws TransformerException
+   {
+     //System.err.println("getTemplate: mode="+mode+" name="+name);
+     Set candidates = new TreeSet();
+     for (Iterator j = templates.iterator(); j.hasNext(); )
+       {
+         Template t = (Template) j.next();
+         boolean isMatch = t.matches(name);
+         //System.err.println("\t"+name+" "+t+"="+isMatch);
+         if (isMatch)
+           {
+             candidates.add(t);
+           }
+       }
+     if (candidates.isEmpty())
+       {
+         return null;
+         //throw new TransformerException("template '" + name + "' not found");
+       }
+     Template t = (Template) candidates.iterator().next();
+     //System.err.println("\ttemplate="+t+" context="+context);
+     return t.node;
+   }
+ 
+   /**
+    * template
+    */
+   final Template parseTemplate(Node node, NamedNodeMap attrs)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     String n = getAttribute(attrs, "name");
+     QName name = (n == null) ? null : getQName(n);
+     String m = getAttribute(attrs, "match");
+     Pattern match = null;
+     if (m != null)
+       {
+         try
+           {
+             match = (Pattern) xpath.compile(m);
+           }
+         catch (ClassCastException e)
+           {
+             String msg = "illegal pattern: " + m;
+             throw new TransformerConfigurationException(msg);
+           }
+       }
+     String p = getAttribute(attrs, "priority");
+     String mm = getAttribute(attrs, "mode");
+     QName mode = (mm == null) ? null : getQName(mm);
+     double priority = (p == null) ? Template.DEFAULT_PRIORITY :
+       Double.parseDouble(p);
+     Node children = node.getFirstChild();
+     return new Template(this, name, match, parse(children),
+                         precedence, priority, mode);
+   }
+ 
+   /**
+    * output
+    */
+   final void parseOutput(Node node, NamedNodeMap attrs)
+     throws TransformerConfigurationException
+   {
+     output = node;
+     String method = getAttribute(attrs, "method");
+     if ("xml".equals(method) || method == null)
+       {
+         outputMethod = OUTPUT_XML;
+       }
+     else if ("html".equals(method))
+       {
+         outputMethod = OUTPUT_HTML;
+       }
+     else if ("text".equals(method))
+       {
+         outputMethod = OUTPUT_TEXT;
+       }
+     else
+       {
+         String msg = "unsupported output method: " + method;
+         DOMSourceLocator l = new DOMSourceLocator(node);
+         throw new TransformerConfigurationException(msg, l);
+       }
+     outputPublicId = getAttribute(attrs, "public-id");
+     outputSystemId = getAttribute(attrs, "system-id");
+     outputEncoding = getAttribute(attrs, "encoding");
+     String indent = getAttribute(attrs, "indent");
+     if (indent != null)
+       {
+         outputIndent = "yes".equals(indent);
+       }
+     outputVersion = getAttribute(attrs, "version");
+     String omitXmlDecl = getAttribute(attrs, "omit-xml-declaration");
+     if (omitXmlDecl != null)
+       {
+         outputOmitXmlDeclaration = "yes".equals(omitXmlDecl);
+       }
+     String standalone = getAttribute(attrs, "standalone");
+     if (standalone != null)
+       {
+         outputStandalone = "yes".equals(standalone);
+       }
+     outputMediaType = getAttribute(attrs, "media-type");
+     String cdataSectionElements =
+       getAttribute(attrs, "cdata-section-elements");
+     if (cdataSectionElements != null)
+       {
+         StringTokenizer st = new StringTokenizer(cdataSectionElements, " ");
+         while (st.hasMoreTokens())
+           {
+             outputCdataSectionElements.add(st.nextToken());
+           }
+       }
+   }
+ 
+   /**
+    * key
+    */
+   final void parseKey(Node node, NamedNodeMap attrs)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     String n = getRequiredAttribute(attrs, "name", node);
+     String m = getRequiredAttribute(attrs, "match", node);
+     String u = getRequiredAttribute(attrs, "use", node);
+     QName name = getQName(n);
+     Expr use = (Expr) xpath.compile(u);
+     try
+       {
+         Pattern match = (Pattern) xpath.compile(m);
+         Key key = new Key(name, match, use);
+         keys.add(key);
+       }
+     catch (ClassCastException e)
+       {
+         throw new TransformerConfigurationException("invalid pattern: " + m);
+       }
+   }
+ 
+   /**
+    * decimal-format
+    */
+   final void parseDecimalFormat(Node node, NamedNodeMap attrs)
+     throws TransformerConfigurationException
+   {
+     String dfName = getAttribute(attrs, "name");
+     DecimalFormat df = new DecimalFormat();
+     DecimalFormatSymbols symbols = new DecimalFormatSymbols();
+     symbols.setDecimalSeparator(parseDFChar(attrs, "decimal-separator", '.'));
+     symbols.setGroupingSeparator(parseDFChar(attrs, "grouping-separator", ','));
+     symbols.setInfinity(parseDFString(attrs, "infinity", "Infinity"));
+     symbols.setMinusSign(parseDFChar(attrs, "minus-sign", '-'));
+     symbols.setNaN(parseDFString(attrs, "NaN", "NaN"));
+     symbols.setPercent(parseDFChar(attrs, "percent", '%'));
+     symbols.setPerMill(parseDFChar(attrs, "per-mille", '\u2030'));
+     symbols.setZeroDigit(parseDFChar(attrs, "zero-digit", '0'));
+     symbols.setDigit(parseDFChar(attrs, "digit", '#'));
+     symbols.setPatternSeparator(parseDFChar(attrs, "pattern-separator", ';'));
+     df.setDecimalFormatSymbols(symbols);
+     decimalFormats.put(dfName, df);
+   }
+ 
+   private final char parseDFChar(NamedNodeMap attrs, String name, char def)
+     throws TransformerConfigurationException
+   {
+     Node attr = attrs.getNamedItem(name);
+     try
+       {
+         return (attr == null) ? def : attr.getNodeValue().charAt(0);
+       }
+     catch (StringIndexOutOfBoundsException e)
+       {
+         throw new TransformerConfigurationException("empty attribute '" +
+                                                     name +
+                                                     "' in decimal-format", e);
+       }
+   }
+ 
+   private final String parseDFString(NamedNodeMap attrs, String name,
+                                      String def)
+   {
+     Node attr = attrs.getNamedItem(name);
+     return (attr == null) ? def : attr.getNodeValue();
+   }
+   
+   /**
+    * namespace-alias
+    */
+   final void parseNamespaceAlias(Node node, NamedNodeMap attrs)
+     throws TransformerConfigurationException
+   {
+     String sp = getRequiredAttribute(attrs, "stylesheet-prefix", node);
+     String rp = getRequiredAttribute(attrs, "result-prefix", node);
+     namespaceAliases.put(sp, rp);
+   }
+ 
+   /**
+    * attribute-set
+    */
+   final void parseAttributeSet(Node node, NamedNodeMap attrs)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     TemplateNode children = parse(node.getFirstChild());
+     String name = getRequiredAttribute(attrs, "name", node);
+     String uas = getAttribute(attrs, "use-attribute-sets");
+     attributeSets.add(new AttributeSet(children, name, uas));
+   }
+ 
+   /**
+    * Parse top-level elements.
+    */
+   void parse(Node node, boolean root)
+     throws TransformerConfigurationException
+   {
+     while (node != null)
+       {
+         current = node;
+         doParse(node, root);
+         node = node.getNextSibling();
+       }
+   }
+ 
+   void doParse(Node node, boolean root)
+     throws TransformerConfigurationException
+   {
+     try
+       {
+         String namespaceUri = node.getNamespaceURI();
+         if (XSL_NS.equals(namespaceUri) &&
+             node.getNodeType() == Node.ELEMENT_NODE)
+           {
+             String name = node.getLocalName();
+             NamedNodeMap attrs = node.getAttributes();
+             if ("stylesheet".equals(name))
+               {
+                 version = getAttribute(attrs, "version");
+                 String eep = getAttribute(attrs, "extension-element-prefixes");
+                 if (eep != null)
+                   {
+                     StringTokenizer st = new StringTokenizer(eep);
+                     while (st.hasMoreTokens())
+                       {
+                         extensionElementPrefixes.add(st.nextToken());
+                       }
+                   }
+                 String erp = getAttribute(attrs, "exclude-result-prefixes");
+                 if (erp != null)
+                   {
+                     StringTokenizer st = new StringTokenizer(erp);
+                     while (st.hasMoreTokens())
+                       {
+                         excludeResultPrefixes.add(st.nextToken());
+                       }
+                   }
+                 parse(node.getFirstChild(), false);
+               }
+             else if ("template".equals(name))
+               {
+                 templates.add(parseTemplate(node, attrs));
+               }
+             else if ("param".equals(name) ||
+                      "variable".equals(name))
+               {
+                 int type = "variable".equals(name) ?
+                   Bindings.VARIABLE : Bindings.PARAM;
+                 TemplateNode content = parse(node.getFirstChild());
+                 QName paramName =
+                   getQName(getRequiredAttribute(attrs, "name", node));
+                 String select = getAttribute(attrs, "select");
+                 ParameterNode param;
+                 if (select != null && select.length() > 0)
+                   {
+                     if (content != null)
+                       {
+                         String msg = "parameter '" + paramName +
+                           "' has both select and content";
+                         DOMSourceLocator l = new DOMSourceLocator(node);
+                         throw new TransformerConfigurationException(msg, l);
+                       }
+                     Expr expr = (Expr) xpath.compile(select);
+                     param = new ParameterNode(paramName, expr, type);
+                   }
+                 else
+                   {
+                     param = new ParameterNode(paramName, null, type);
+                     param.children = content;
+                   }
+                 variables.add(param);
+               }
+             else if ("include".equals(name) || "import".equals(name))
+               {
+                 int delta = "import".equals(name) ? -1 : 0;
+                 String href = getRequiredAttribute(attrs, "href", node);
+                 Source source;
+                 synchronized (factory.resolver)
+                   {
+                     if (transformer != null)
+                       {
+                         factory.resolver
+                           .setUserResolver(transformer.getURIResolver());
+                         factory.resolver
+                           .setUserListener(transformer.getErrorListener());
+                       }
+                     source = factory.resolver.resolve(systemId, href);
+                   }
+                 factory.newStylesheet(source, precedence + delta, this);
+               }
+             else if ("output".equals(name))
+               {
+                 parseOutput(node, attrs);
+               }
+             else if ("preserve-space".equals(name))
+               {
+                 String elements =
+                   getRequiredAttribute(attrs, "elements", node);
+                 StringTokenizer st = new StringTokenizer(elements,
+                                                          " \t\n\r");
+                 while (st.hasMoreTokens())
+                   {
+                     preserveSpace.add(parseNameTest(st.nextToken()));
+                   }
+               }
+             else if ("strip-space".equals(name))
+               {
+                 String elements =
+                   getRequiredAttribute(attrs, "elements", node);
+                 StringTokenizer st = new StringTokenizer(elements,
+                                                          " \t\n\r");
+                 while (st.hasMoreTokens())
+                   {
+                     stripSpace.add(parseNameTest(st.nextToken()));
+                   }
+               }
+             else if ("key".equals(name))
+               {
+                 parseKey(node, attrs);
+               }
+             else if ("decimal-format".equals(name))
+               {
+                 parseDecimalFormat(node, attrs);
+               }
+             else if ("namespace-alias".equals(name))
+               {
+                 parseNamespaceAlias(node, attrs);
+               }
+             else if ("attribute-set".equals(name))
+               {
+                 parseAttributeSet(node, attrs);
+               }
+           }
+         else if (root)
+           {
+             // Literal document element
+             Attr versionNode =
+               ((Element)node).getAttributeNodeNS(XSL_NS, "version");
+             if (versionNode == null)
+               {
+                 String msg = "no xsl:version attribute on literal result node";
+                 DOMSourceLocator l = new DOMSourceLocator(node);
+                 throw new TransformerConfigurationException(msg, l);
+               }
+             version = versionNode.getValue();
+             Node rootClone = node.cloneNode(true);
+             NamedNodeMap attrs = rootClone.getAttributes();
+             attrs.removeNamedItemNS(XSL_NS, "version");
+             templates.add(new Template(this, null, new Root(),
+                                        parse(rootClone),
+                                        precedence,
+                                        Template.DEFAULT_PRIORITY,
+                                        null));
+           }
+         else
+           {
+             // Skip unknown elements, text, comments, etc
+           }
+       }
+     catch (TransformerException e)
+       {
+         DOMSourceLocator l = new DOMSourceLocator(node);
+         throw new TransformerConfigurationException(e.getMessage(), l, e);
+       }
+     catch (DOMException e)
+       {
+         DOMSourceLocator l = new DOMSourceLocator(node);
+         throw new TransformerConfigurationException(e.getMessage(), l, e);
+       }
+     catch (XPathExpressionException e)
+       {
+         DOMSourceLocator l = new DOMSourceLocator(node);
+         throw new TransformerConfigurationException(e.getMessage(), l, e);
+       }
+   }
+ 
+   final NameTest parseNameTest(String token)
+   {
+     if ("*".equals(token))
+       {
+         return new NameTest(null, true, true);
+       }
+     else if (token.endsWith(":*"))
+       {
+         QName qName = getQName(token.substring(0, token.length() - 2));
+         return new NameTest(qName, true, false);
+       }
+     else
+       {
+         QName qName = getQName(token);
+         return new NameTest(qName, false, false);
+       }
+   }
+ 
+   final TemplateNode parseAttributeValueTemplate(String value, Node source)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     current = source;
+     // Tokenize
+     int len = value.length();
+     int off = 0;
+     List tokens = new ArrayList(); // text tokens
+     List types = new ArrayList(); // literal or expression
+     int depth = 0;
+     for (int i = 0; i < len; i++)
+       {
+         char c = value.charAt(i);
+         if (c == '{')
+           {
+             if (i < (len - 1) && value.charAt(i + 1) == '{')
+               {
+                 tokens.add(value.substring(off, i + 1));
+                 types.add(Boolean.FALSE);
+                 i++;
+                 off = i + 1;
+                 continue;
+               }
+             if (depth == 0)
+               {
+                 if (i - off > 0)
+                   {
+                     tokens.add(value.substring(off, i));
+                     types.add(Boolean.FALSE);
+                   }
+                 off = i + 1;
+               }
+             depth++;
+           }
+         else if (c == '}')
+           {
+             if (i < (len - 1) && value.charAt(i + 1) == '}')
+               {
+                 tokens.add(value.substring(off, i + 1));
+                 types.add(Boolean.FALSE);
+                 i++;
+                 off = i + 1;
+                 continue;
+               }
+             if (depth == 1)
+               {
+                 if (i - off > 0)
+                   {
+                     tokens.add(value.substring(off, i));
+                     types.add(Boolean.TRUE);
+                   }
+                 else
+                   {
+                     String msg = "attribute value template " +
+                       "must contain expression: " + value;
+                     DOMSourceLocator l = new DOMSourceLocator(source);
+                     throw new TransformerConfigurationException(msg, l);
+                   }
+                 off = i + 1;
+               }
+             depth--;
+           }
+       }
+     if (depth > 0)
+       {
+         String msg = "invalid attribute value template: " + value;
+         throw new TransformerConfigurationException(msg);
+       }
+     if (len - off > 0)
+       {
+         // Trailing text
+         tokens.add(value.substring(off));
+         types.add(Boolean.FALSE);
+       }
+     
+     // Construct template node tree
+     TemplateNode ret = null;
+     Document doc = source.getOwnerDocument();
+     len = tokens.size();
+     for (int i = len - 1; i >= 0; i--)
+       {
+         String token = (String) tokens.get(i);
+         Boolean type = (Boolean) types.get(i);
+         if (type == Boolean.TRUE)
+           {
+             // Expression text
+             Expr select = (Expr) xpath.compile(token);
+             TemplateNode ret2 = new ValueOfNode(select, false);
+             ret2.next = ret;
+             ret = ret2;
+           }
+         else
+           {
+             // Verbatim text
+             TemplateNode ret2 = new LiteralNode(doc.createTextNode(token));
+             ret2.next = ret;
+             ret = ret2;
+           }
+       }
+     return ret;
+   }
+ 
+   boolean isPreserved(Text text)
+     throws TransformerConfigurationException
+   {
+     // Check characters in text
+     String value = text.getData();
+     if (value != null)
+       {
+         int len = value.length();
+         for (int i = 0; i < len; i++)
+           {
+             char c = value.charAt(i);
+             if (c != 0x20 && c != 0x09 && c != 0x0a && c != 0x0d)
+               {
+                 return true;
+               }
+           }
+       }
+     // Check parent node
+     Node ctx = text.getParentNode();
+     if (!preserveSpace.isEmpty())
+       {
+         for (Iterator i = preserveSpace.iterator(); i.hasNext(); )
+           {
+             NameTest preserveTest = (NameTest) i.next();
+             if (preserveTest.matches(ctx, 1, 1))
+               {
+                 boolean override = false;
+                 if (!stripSpace.isEmpty())
+                   {
+                     for (Iterator j = stripSpace.iterator(); j.hasNext(); )
+                       {
+                         NameTest stripTest = (NameTest) j.next();
+                         if (stripTest.matches(ctx, 1, 1))
+                           {
+                             override = true;
+                             break;
+                           }
+                       }
+                   }
+                 if (!override)
+                   {
+                     return true;
+                   }
+               }
+           }
+       }
+     // Check whether any ancestor specified xml:space
+     while (ctx != null)
+       {
+         if (ctx.getNodeType() == Node.ELEMENT_NODE)
+           {
+             Element element = (Element) ctx;
+             String xmlSpace = element.getAttribute("xml:space");
+             if ("default".equals(xmlSpace))
+               {
+                 break;
+               }
+             else if ("preserve".equals(xmlSpace))
+               {
+                 return true;
+               }
+             else if (xmlSpace.length() > 0)
+               {
+                 String msg = "Illegal value for xml:space: " + xmlSpace;
+                 throw new TransformerConfigurationException(msg);
+               }
+             else if ("text".equals(ctx.getLocalName()) &&
+                      XSL_NS.equals(ctx.getNamespaceURI()))
+               {
+                 // xsl:text implies xml:space='preserve'
+                 return true;
+               }
+           }
+         ctx = ctx.getParentNode();
+       }
+     return false;
+   }
+ 
+   public XPathFunction resolveFunction(QName name, int arity)
+   {
+     String uri = name.getNamespaceURI();
+     if (XSL_NS.equals(uri) || uri == null || uri.length() == 0)
+       {
+         String localName = name.getLocalPart();
+         if ("document".equals(localName) && (arity == 1 || arity == 2))
+           {
+             if (current == null)
+               {
+                 throw new RuntimeException("current is null");
+               }
+             return new DocumentFunction(getRootStylesheet(), current);
+           }
+         else if ("key".equals(localName) && (arity == 2))
+           {
+             return new KeyFunction(getRootStylesheet());
+           }
+         else if ("format-number".equals(localName) &&
+                  (arity == 2 || arity == 3))
+           {
+             return new FormatNumberFunction(getRootStylesheet());
+           }
+         else if ("current".equals(localName) && (arity == 0))
+           {
+             return new CurrentFunction(getRootStylesheet());
+           }
+         else if ("unparsed-entity-uri".equals(localName) && (arity == 1))
+           {
+             return new UnparsedEntityUriFunction();
+           }
+         else if ("generate-id".equals(localName) &&
+                  (arity == 1 || arity == 0))
+           {
+             return new GenerateIdFunction();
+           }
+         else if ("system-property".equals(localName) && (arity == 1))
+           {
+             return new SystemPropertyFunction();
+           }
+         else if ("element-available".equals(localName) && (arity == 1))
+           {
+             return new ElementAvailableFunction(this);
+           }
+         else if ("function-available".equals(localName) && (arity == 1))
+           {
+             return new FunctionAvailableFunction(this);
+           }
+       }
+     return null;
+   }
+   
+   // -- Parsing --
+ 
+   /**
+    * apply-templates
+    */
+   final TemplateNode parseApplyTemplates(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String m = getAttribute(attrs, "mode");
+     QName mode = (m == null) ? null : getQName(m);
+     String s = getAttribute(attrs, "select");
+     if (s == null)
+       {
+         s = "child::node()";
+       }
+     Node children = node.getFirstChild();
+     List sortKeys = parseSortKeys(children);
+     List withParams = parseWithParams(children);
+     Expr select = (Expr) xpath.compile(s);
+     return new ApplyTemplatesNode(select, mode,
+                                   sortKeys, withParams, false);
+   }
+ 
+   /**
+    * call-template
+    */
+   final TemplateNode parseCallTemplate(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String n = getRequiredAttribute(attrs, "name", node);
+     QName name = getQName(n);
+     Node children = node.getFirstChild();
+     List withParams = parseWithParams(children);
+     return new CallTemplateNode(name, withParams);
+   }
+   
+   /**
+    * value-of
+    */
+   final TemplateNode parseValueOf(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String s = getRequiredAttribute(attrs, "select", node);
+     String doe = getAttribute(attrs, "disable-output-escaping");
+     boolean d = "yes".equals(doe);
+     Expr select = (Expr) xpath.compile(s);
+     return new ValueOfNode(select, d);
+   }
+   
+   /**
+    * for-each
+    */
+   final TemplateNode parseForEach(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String s = getRequiredAttribute(attrs, "select", node);
+     Node children = node.getFirstChild();
+     List sortKeys = parseSortKeys(children);
+     Expr select = (Expr) xpath.compile(s);
+     ForEachNode ret = new ForEachNode(select, sortKeys);
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * if
+    */
+   final TemplateNode parseIf(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String t = getRequiredAttribute(attrs, "test", node);
+     Expr test = (Expr) xpath.compile(t);
+     Node children = node.getFirstChild();
+     IfNode ret = new IfNode(test);
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * when
+    */
+   final TemplateNode parseWhen(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String t = getRequiredAttribute(attrs, "test", node);
+     Expr test = (Expr) xpath.compile(t);
+     Node children = node.getFirstChild();
+     WhenNode ret = new WhenNode(test);
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * element
+    */
+   final TemplateNode parseElement(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String name = getRequiredAttribute(attrs, "name", node);
+     String namespace = getAttribute(attrs, "namespace");
+     String uas = getAttribute(attrs, "use-attribute-sets");
+     TemplateNode n = parseAttributeValueTemplate(name, node);
+     TemplateNode ns = (namespace == null) ? null :
+       parseAttributeValueTemplate(namespace, node);
+     Node children = node.getFirstChild();
+     ElementNode ret = new ElementNode(n, ns, uas, node);
+     ret.children = parse(children);
+     return ret;
+   }
+ 
+   /**
+    * attribute
+    */
+   final TemplateNode parseAttribute(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String name = getRequiredAttribute(attrs, "name", node);
+     String namespace = getAttribute(attrs, "namespace");
+     TemplateNode n = parseAttributeValueTemplate(name, node);
+     TemplateNode ns = (namespace == null) ? null :
+       parseAttributeValueTemplate(namespace, node);
+     Node children = node.getFirstChild();
+     AttributeNode ret = new AttributeNode(n, ns, node);
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * text
+    */
+   final TemplateNode parseText(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String doe = getAttribute(attrs, "disable-output-escaping");
+     boolean d = "yes".equals(doe);
+     Node children = node.getFirstChild();
+     TextNode ret = new TextNode(d);
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * copy
+    */
+   final TemplateNode parseCopy(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String uas = getAttribute(attrs, "use-attribute-sets");
+     Node children = node.getFirstChild();
+     CopyNode ret = new CopyNode(uas);
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * processing-instruction
+    */
+   final TemplateNode parseProcessingInstruction(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String name = getRequiredAttribute(attrs, "name", node);
+     Node children = node.getFirstChild();
+     ProcessingInstructionNode ret = new ProcessingInstructionNode(name);
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * number
+    */
+   final TemplateNode parseNumber(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String v = getAttribute(attrs, "value");
+     String ff = getAttribute(attrs, "format");
+     if (ff == null)
+       {
+         ff = "1";
+       }
+     TemplateNode format = parseAttributeValueTemplate(ff, node);
+     String lang = getAttribute(attrs, "lang");
+     String lv = getAttribute(attrs, "letter-value");
+     int letterValue = "traditional".equals(lv) ?
+       AbstractNumberNode.TRADITIONAL :
+       AbstractNumberNode.ALPHABETIC;
+     String gs = getAttribute(attrs, "grouping-separator");
+     String gz = getAttribute(attrs, "grouping-size");
+     int gz2 = (gz != null && gz.length() > 0) ?
+       Integer.parseInt(gz) : 1;
+     Node children = node.getFirstChild();
+     TemplateNode ret;
+     if (v != null && v.length() > 0)
+       {
+         Expr value = (Expr) xpath.compile(v);
+         ret = new NumberNode(value, format, lang,
+                              letterValue, gs, gz2);
+       }
+     else
+       {
+         String l = getAttribute(attrs, "level");
+         int level =
+           "multiple".equals(l) ? NodeNumberNode.MULTIPLE :
+                       "any".equals(l) ? NodeNumberNode.ANY :
+                       NodeNumberNode.SINGLE;
+         String c = getAttribute(attrs, "count");
+         String f = getAttribute(attrs, "from");
+         Pattern count = null;
+         Pattern from = null;
+         if (c != null)
+           {
+             try
+               {
+                 count = (Pattern) xpath.compile(c);
+               }
+             catch (ClassCastException e)
+               {
+                 String msg = "invalid pattern: " + c;
+                 throw new TransformerConfigurationException(msg);
+               }
+           }
+         if (f != null)
+           {
+             try
+               {
+                 from = (Pattern) xpath.compile(f);
+               }
+             catch (ClassCastException e)
+               {
+                 String msg = "invalid pattern: " + f;
+                 throw new TransformerConfigurationException(msg);
+               }
+           }
+         ret = new NodeNumberNode(level, count, from,
+                                  format, lang,
+                                  letterValue, gs, gz2);
+       }
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * copy-of
+    */
+   final TemplateNode parseCopyOf(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String s = getRequiredAttribute(attrs, "select", node);
+     Expr select = (Expr) xpath.compile(s);
+     Node children = node.getFirstChild();
+     CopyOfNode ret = new CopyOfNode(select);
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * message
+    */
+   final TemplateNode parseMessage(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String t = getAttribute(attrs, "terminate");
+     boolean terminate = "yes".equals(t);
+     Node children = node.getFirstChild();
+     MessageNode ret = new MessageNode(terminate);
+     ret.children = parse(children);
+     return ret;
+   }
+   
+   /**
+    * Parse template-level elements.
+    */
+   final TemplateNode parse(Node node)
+     throws TransformerConfigurationException
+   {
+     TemplateNode first = null;
+     TemplateNode previous = null;
+     while (node != null)
+       {
+         Node next = node.getNextSibling();
+         TemplateNode tnode = doParse(node);
+         if (tnode != null)
+           {
+             if (first == null)
+               {
+                 first = tnode;
+               }
+             if (previous != null)
+               {
+                 previous.next = tnode;
+               }
+             previous = tnode;
+           }
+         node = next;
+       }
+     return first;
+   }
+ 
+   private final TemplateNode doParse(Node node)
+     throws TransformerConfigurationException
+   {
+     // Hack to associate the document function with its declaring node
+     current = node;
+     try
+       {
+         String namespaceUri = node.getNamespaceURI();
+         if (Stylesheet.XSL_NS.equals(namespaceUri) &&
+             Node.ELEMENT_NODE == node.getNodeType())
+           {
+             String name = node.getLocalName();
+             if ("apply-templates".equals(name))
+               {
+                 return parseApplyTemplates(node);
+               }
+             else if ("call-template".equals(name))
+               {
+                 return parseCallTemplate(node);
+               }
+             else if ("value-of".equals(name))
+               {
+                 return parseValueOf(node);
+               }
+             else if ("for-each".equals(name))
+               {
+                 return parseForEach(node);
+               }
+             else if ("if".equals(name))
+               {
+                 return parseIf(node);
+               }
+             else if ("choose".equals(name))
+               {
+                 Node children = node.getFirstChild();
+                 ChooseNode ret = new ChooseNode();
+                 ret.children = parse(children);
+                 return ret;
+               }
+             else if ("when".equals(name))
+               {
+                 return parseWhen(node);
+               }
+             else if ("otherwise".equals(name))
+               {
+                 Node children = node.getFirstChild();
+                 OtherwiseNode ret = new OtherwiseNode();
+                 ret.children = parse(children);
+                 return ret;
+               }
+             else if ("element".equals(name))
+               {
+                 return parseElement(node);
+               }
+             else if ("attribute".equals(name))
+               {
+                 return parseAttribute(node);
+               }
+             else if ("text".equals(name))
+               {
+                 return parseText(node);
+               }
+             else if ("copy".equals(name))
+               {
+                 return parseCopy(node);
+               }
+             else if ("processing-instruction".equals(name))
+               {
+                 return parseProcessingInstruction(node);
+               }
+             else if ("comment".equals(name))
+               {
+                 Node children = node.getFirstChild();
+                 CommentNode ret = new CommentNode();
+                 ret.children = parse(children);
+                 return ret;
+               }
+             else if ("number".equals(name))
+               {
+                 return parseNumber(node);
+               }
+             else if ("param".equals(name) ||
+                      "variable".equals(name))
+               {
+                 int type = "variable".equals(name) ?
+                   Bindings.VARIABLE : Bindings.PARAM;
+                 NamedNodeMap attrs = node.getAttributes();
+                 Node children = node.getFirstChild();
+                 TemplateNode content = parse(children);
+                 QName paramName = 
+                   getQName(getRequiredAttribute(attrs, "name", node));
+                 String select = getAttribute(attrs, "select");
+                 ParameterNode ret;
+                 if (select != null)
+                   {
+                     if (content != null)
+                       {
+                         String msg = "parameter '" + paramName +
+                           "' has both select and content";
+                         DOMSourceLocator l = new DOMSourceLocator(node);
+                         throw new TransformerConfigurationException(msg, l);
+                       }
+                     Expr expr = (Expr) xpath.compile(select);
+                     ret = new ParameterNode(paramName, expr, type);
+                   }
+                 else
+                   {
+                     ret = new ParameterNode(paramName, null, type);
+                     ret.children = content;
+                   }
+                 return ret;
+               }
+             else if ("copy-of".equals(name))
+               {
+                 return parseCopyOf(node);
+               }
+             else if ("message".equals(name))
+               {
+                 return parseMessage(node);
+               }
+             else if ("apply-imports".equals(name))
+               {
+                 Node children = node.getFirstChild();
+                 ApplyImportsNode ret = new ApplyImportsNode();
+                 ret.children = parse(children);
+                 return ret;
+               }
+             else
+               {
+                 // xsl:fallback
+                 // Pass over any other XSLT nodes
+                 return null;
+               }
+           }
+         String prefix = node.getPrefix();
+         if (extensionElementPrefixes.contains(prefix))
+           {
+             // Pass over extension elements
+             return null;
+           }
+         switch (node.getNodeType())
+           {
+           case Node.TEXT_NODE:
+             // Determine whether to strip whitespace
+             Text text = (Text) node;
+             if (!isPreserved(text))
+               {
+                 // Strip
+                 /*String data = text.getData().trim();
+                 if (data.length() > 0)
+                   {
+                     text.setData(data);
+                   } // else */
+                 text.getParentNode().removeChild(text);
+                 return null;
+               }
+             break;
+           case Node.COMMENT_NODE:
+             // Ignore comments
+             return null;
+           case Node.ELEMENT_NODE:
+             // Check for attribute value templates and use-attribute-sets
+             NamedNodeMap attrs = node.getAttributes();
+             boolean convert = false;
+             String useAttributeSets = null;
+             int len = attrs.getLength();
+             for (int i = 0; i < len; i++)
+               {
+                 Node attr = attrs.item(i);
+                 String value = attr.getNodeValue();
+                 if (Stylesheet.XSL_NS.equals(attr.getNamespaceURI()) &&
+                     "use-attribute-sets".equals(attr.getLocalName()))
+                   {
+                     useAttributeSets = value;
+                     convert = true;
+                     break;
+                   }
+                 int start = value.indexOf('{');
+                 int end = value.indexOf('}');
+                 if (start != -1 || end != -1)
+                   {
+                     convert = true;
+                     break;
+                   }
+               }
+             if (convert)
+               {
+                 // Create an element-producing template node instead
+                 // with appropriate attribute-producing child template nodes
+                 Node children = node.getFirstChild();
+                 TemplateNode child = parse(children);
+                 for (int i = 0; i < len; i++)
+                   {
+                     Node attr = attrs.item(i);
+                     String ans = attr.getNamespaceURI();
+                     String aname = attr.getNodeName();
+                     if (Stylesheet.XSL_NS.equals(ans) &&
+                         "use-attribute-sets".equals(attr.getLocalName()))
+                       {
+                         continue;
+                       }
+                     String value = attr.getNodeValue();
+                     TemplateNode grandchild =
+                       parseAttributeValueTemplate(value, node);
+                     TemplateNode n =
+                       parseAttributeValueTemplate(aname, node);
+                     TemplateNode ns = (ans == null) ? null :
+                       parseAttributeValueTemplate(ans, node);
+                     TemplateNode newChild = new AttributeNode(n, ns, attr);
+                     newChild.children = grandchild;
+                     newChild.next = child;
+                     child = newChild;
+                   }
+                 String ename = node.getNodeName();
+                 TemplateNode n = parseAttributeValueTemplate(ename, node);
+                 TemplateNode ns = (namespaceUri == null) ? null :
+                   parseAttributeValueTemplate(namespaceUri, node);
+                 ElementNode ret = new ElementNode(n, ns, useAttributeSets,
+                                                   node);
+                 ret.children = child;
+                 return ret;
+               }
+             // Otherwise fall through
+             break;
+           }
+       }
+     catch (XPathExpressionException e)
+       {
+         DOMSourceLocator l = new DOMSourceLocator(node);
+         throw new TransformerConfigurationException(e.getMessage(), l, e);
+       }
+     Node children = node.getFirstChild();
+     LiteralNode ret = new LiteralNode(node);
+     ret.children = parse(children);
+     return ret;
+   }
+ 
+   final List parseSortKeys(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     List ret = new LinkedList();
+     while (node != null)
+       {
+         String namespaceUri = node.getNamespaceURI();
+         if (Stylesheet.XSL_NS.equals(namespaceUri) &&
+             Node.ELEMENT_NODE == node.getNodeType() &&
+             "sort".equals(node.getLocalName()))
+           {
+             NamedNodeMap attrs = node.getAttributes();
+             String s = getAttribute(attrs, "select");
+             if (s == null)
+               {
+                 s = ".";
+               }
+             Expr select = (Expr) xpath.compile(s);
+             String l = getAttribute(attrs, "lang");
+             TemplateNode lang = (l == null) ? null :
+               parseAttributeValueTemplate(l, node);
+             String dt = getAttribute(attrs, "data-type");
+             TemplateNode dataType = (dt == null) ? null :
+               parseAttributeValueTemplate(dt, node);
+             String o = getAttribute(attrs, "order");
+             TemplateNode order = (o == null) ? null :
+               parseAttributeValueTemplate(o, node);
+             String co = getAttribute(attrs, "case-order");
+             TemplateNode caseOrder = (co == null) ? null :
+               parseAttributeValueTemplate(co, node);
+             ret.add(new SortKey(select, lang, dataType, order, caseOrder));
+           }
+         node = node.getNextSibling();
+       }
+     return ret.isEmpty() ? null : ret;
+   }
+ 
+   final List parseWithParams(Node node)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     List ret = new LinkedList();
+     while (node != null)
+       {
+         String namespaceUri = node.getNamespaceURI();
+         if (Stylesheet.XSL_NS.equals(namespaceUri) &&
+             Node.ELEMENT_NODE == node.getNodeType() &&
+             "with-param".equals(node.getLocalName()))
+           {
+             NamedNodeMap attrs = node.getAttributes();
+             TemplateNode content = parse(node.getFirstChild());
+             QName name =
+               getQName(getRequiredAttribute(attrs, "name", node));
+             String select = getAttribute(attrs, "select");
+             if (select != null)
+               {
+                 if (content != null)
+                   {
+                     String msg = "parameter '" + name +
+                       "' has both select and content";
+                     DOMSourceLocator l = new DOMSourceLocator(node);
+                     throw new TransformerConfigurationException(msg, l);
+                   }
+                 Expr expr = (Expr) xpath.compile(select);
+                 ret.add(new WithParam(name, expr));
+               }
+             else
+               {
+                 ret.add(new WithParam(name, content));
+               }
+           }
+         node = node.getNextSibling();
+       }
+     return ret.isEmpty() ? null : ret;
+   }
+ 
+   /**
+    * Created element nodes have a copy of the namespace nodes in the
+    * stylesheet, except the XSLT namespace, extension namespaces, and
+    * exclude-result-prefixes.
+    */
+   final void addNamespaceNodes(Node source, Node target, Document doc,
+                                Collection elementExcludeResultPrefixes)
+   {
+     NamedNodeMap attrs = source.getAttributes();
+     if (attrs != null)
+       {
+         int len = attrs.getLength();
+         for (int i = 0; i < len; i++)
+           {
+             Node attr = attrs.item(i);
+             String uri = attr.getNamespaceURI();
+             if (uri == XMLConstants.XMLNS_ATTRIBUTE_NS_URI)
+               {
+                 String prefix = attr.getLocalName();
+                 if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix))
+                   {
+                     prefix = "#default";
+                   }
+                 String ns = attr.getNodeValue();
+                 // Should the namespace be excluded?
+                 if (XSL_NS.equals(ns) ||
+                     extensionElementPrefixes.contains(prefix) ||
+                     elementExcludeResultPrefixes.contains(prefix) ||
+                     excludeResultPrefixes.contains(prefix))
+                   {
+                     continue;
+                   }
+                 // Is the namespace already defined on the target?
+                 if (prefix == "#default")
+                   {
+                     prefix = null;
+                   }
+                 if (target.lookupNamespaceURI(prefix) != null)
+                   {
+                     continue;
+                   }
+                 attr = attr.cloneNode(true);
+                 attr = doc.adoptNode(attr);
+                 target.getAttributes().setNamedItemNS(attr);
+               }
+           }
+       }
+     Node parent = source.getParentNode();
+     if (parent != null)
+       {
+         addNamespaceNodes(parent, target, doc, elementExcludeResultPrefixes);
+       }
+   }
+ 
+   static final String getAttribute(NamedNodeMap attrs, String name)
+   {
+     Node attr = attrs.getNamedItem(name);
+     if (attr == null)
+       {
+         return null;
+       }
+     String ret = attr.getNodeValue();
+     if (ret.length() == 0)
+       {
+         return null;
+       }
+     return ret;
+   }
+ 
+   static final String getRequiredAttribute(NamedNodeMap attrs, String name,
+                                            Node source)
+     throws TransformerConfigurationException
+   {
+     String value = getAttribute(attrs, name);
+     if (value == null || value.length() == 0)
+       {
+         String msg =
+           name + " attribute is required on " + source.getNodeName();
+         DOMSourceLocator l = new DOMSourceLocator(source);
+         throw new TransformerConfigurationException(msg, l);
+       }
+     return value;
+   }
+ 
+   // Handle user data changes when nodes are cloned etc
+ 
+   public void handle(short op, String key, Object data, Node src, Node dst)
+   {
+     dst.setUserData(key, data, this);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/SystemPropertyFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/SystemPropertyFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/SystemPropertyFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/SystemPropertyFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,141 ----
+ /* SystemPropertyFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Function;
+ 
+ /**
+  * The XSLT <code>system-property()</code>function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class SystemPropertyFunction
+   extends Expr
+   implements XPathFunction, Function
+ {
+ 
+   List args;
+ 
+   public Object evaluate(List args)
+     throws XPathFunctionException
+   {
+     String name = (String) args.get(0);
+     return systemProperty(QName.valueOf(name));
+   }
+ 
+   public void setArguments(List args)
+   {
+     this.args = args;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     int arity = args.size();
+     List values = new ArrayList(arity);
+     for (int i = 0; i < arity; i++)
+       {
+         Expr arg = (Expr) args.get(i);
+         values.add(arg.evaluate(context, pos, len));
+       }
+     String name = _string(context, values.get(0));
+     return systemProperty(QName.valueOf(name));
+   }
+ 
+   Object systemProperty(QName name)
+   {
+     String localName = name.getLocalPart();
+     String prefix = name.getPrefix();
+     String uri = name.getNamespaceURI();
+     if (Stylesheet.XSL_NS.equals(uri) ||
+         "xsl".equals(prefix))
+       {
+         if ("version".equals(localName))
+           {
+             return new Double(1.0d);
+           }
+         else if ("vendor".equals(localName))
+           {
+             return "The Free Software Foundation";
+           }
+         else if ("vendor-url".equals(localName))
+           {
+             return "http://www.gnu.org/";
+           }
+         else
+           {
+             return "";
+           }
+       }
+     return System.getProperty(localName);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     SystemPropertyFunction f = new SystemPropertyFunction();
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     f.setArguments(args2);
+     return f;
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/Template.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/Template.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/Template.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/Template.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,252 ----
+ /* Template.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.io.PrintStream;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.NameTest;
+ import gnu.xml.xpath.NodeTypeTest;
+ import gnu.xml.xpath.Pattern;
+ import gnu.xml.xpath.Selector;
+ import gnu.xml.xpath.Test;
+ 
+ /**
+  * A template in an XSL stylesheet.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class Template
+   implements Comparable
+ {
+ 
+   static final double DEFAULT_PRIORITY = 0.5d;
+ 
+   final Stylesheet stylesheet;
+   final QName name;
+   final Pattern match;
+   final TemplateNode node;
+   final double priority;
+   final int precedence;
+   final QName mode;
+ 
+   Template(Stylesheet stylesheet, 
+            QName name, Pattern match, TemplateNode node,
+            int precedence, double priority, QName mode)
+   {
+     this.stylesheet = stylesheet;
+     this.name = name;
+     this.match = match;
+     this.node = node;
+     // adjust priority if necessary
+     // see XSLT section 5.5
+     Test test = getNodeTest(match);
+     if (test != null)
+       {
+         if (test instanceof NameTest)
+           {
+             NameTest nameTest = (NameTest) test;
+             if (nameTest.matchesAny() ||
+                 nameTest.matchesAnyLocalName())
+               {
+                 priority = -0.25d;
+               }
+             else
+               {
+                 priority = 0.0d;
+               }
+           }
+         else
+           {
+             NodeTypeTest nodeTypeTest = (NodeTypeTest) test;
+             if (nodeTypeTest.getNodeType() ==
+                 Node.PROCESSING_INSTRUCTION_NODE &&
+                 nodeTypeTest.getData() != null)
+               {
+                 priority = 0.0d;
+               }
+             else
+               {
+                 priority = -0.5d;
+               }
+           }
+       }
+     this.precedence = precedence;
+     this.priority = priority;
+     this.mode = mode;
+   }
+ 
+   Template clone(Stylesheet stylesheet)
+   {
+     // FIXME by cloning we lose the imports() functionality, so
+     // apply-imports will be broken.
+     return new Template(stylesheet,
+                         name,
+                         (match == null) ? null :
+                         (Pattern) match.clone(stylesheet),
+                         (node == null) ? null : node.clone(stylesheet),
+                         precedence,
+                         priority,
+                         mode);
+   }
+   
+   public int compareTo(Object other)
+   {
+     if (other instanceof Template)
+       {
+         Template t = (Template) other;
+         int d = t.precedence - precedence;
+         if (d != 0)
+           {
+             return d;
+           }
+         double d2 = t.priority - priority;
+         if (d2 != 0.0d)
+           {
+             return (int) Math.round(d2 * 1000.0d);
+           }
+       }
+     return 0;
+   }
+ 
+   Test getNodeTest(Expr expr)
+   {
+     if (expr instanceof Selector)
+       {
+         Selector selector = (Selector) expr;
+         Test[] tests = selector.getTests();
+         if (tests.length > 0)
+           {
+             return tests[0];
+           }
+       }
+     return null;
+   }
+ 
+   boolean matches(QName mode, Node node)
+   {
+     if ((mode == null && this.mode != null) ||
+         (mode != null && !mode.equals(this.mode)))
+       {
+         return false;
+       }
+     if (match == null)
+       {
+         return false;
+       }
+     return match.matches(node);
+   }
+ 
+   boolean matches(QName name)
+   {
+     return name.equals(this.name);
+   }
+ 
+   boolean imports(Template other)
+   {
+     for (Stylesheet ctx = other.stylesheet.parent;
+          ctx != null;
+          ctx = ctx.parent)
+       {
+         if (ctx == stylesheet)
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   /**
+    * @param stylesheet the stylesheet
+    * @param parent the parent of result nodes
+    * @param context the context node in the source document
+    * @param pos the context position
+    * @param len the context size
+    * @param nextSibling if non-null, add result nodes before this node
+    */
+   void apply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     System.err.println("...applying " + toString() + " to " + context);
+     if (node != null)
+       {
+         node.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     if (name != null)
+       {
+         buf.append("name=");
+         buf.append(name);
+       }
+     else if (match != null)
+       {
+         buf.append("match=");
+         buf.append(match);
+       }
+     if (mode != null)
+       {
+         buf.append(",mode=");
+         buf.append(mode);
+       }
+     buf.append(']');
+     return buf.toString();
+     
+     //return (name != null) ? name.toString() : match.toString();
+   }
+ 
+   void list(PrintStream out)
+   {
+     out.println(toString());
+     if (node != null)
+       {
+         node.list(1, out, true);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/TemplateNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/TemplateNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/TemplateNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/TemplateNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,124 ----
+ /* TemplateNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.io.PrintStream;
+ import java.util.Comparator;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.DocumentOrderComparator;
+ 
+ /**
+  * Wrapper for a source node in a template.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ abstract class TemplateNode
+ {
+ 
+   static final Comparator documentOrderComparator =
+     new DocumentOrderComparator();
+ 
+   TemplateNode children;
+   TemplateNode next;
+ 
+   final void apply(Stylesheet stylesheet, QName mode,
+                    Node context, int pos, int len,
+                    Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     if (stylesheet.terminated)
+       {
+         return;
+       }
+     if (Thread.currentThread().isInterrupted())
+       {
+         // Try to head off any infinite loops at the pass
+         return;
+       }
+     if (stylesheet.debug)
+       {
+         System.err.println("Applying " + toString());
+         System.err.println("\twith context=" + context + ", pos=" + pos +
+                            ", len=" + len);
+       }
+     doApply(stylesheet, mode, context, pos, len, parent, nextSibling);
+   }
+ 
+   abstract void doApply(Stylesheet stylesheet, QName mode,
+                         Node context, int pos, int len,
+                         Node parent, Node nextSibling)
+     throws TransformerException;
+ 
+   abstract TemplateNode clone(Stylesheet stylesheet);
+ 
+   public boolean references(QName var)
+   {
+     if (children != null && children.references(var))
+       {
+         return true;
+       }
+     if (next != null && next.references(var))
+       {
+         return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Debugging
+    */
+   void list(int depth, PrintStream out, boolean listNext)
+   {
+     for (int i = 0; i < depth; i++)
+       {
+         out.print("  ");
+       }
+     out.println(toString());
+     if (children != null)
+       {
+         children.list(depth + 1, out, true);
+       }
+     if (listNext && next != null)
+       {
+         next.list(depth, out, listNext);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/TemplatesImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/TemplatesImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/TemplatesImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/TemplatesImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,80 ----
+ /* TemplatesImpl.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Properties;
+ import javax.xml.transform.Templates;
+ import javax.xml.transform.Transformer;
+ import javax.xml.transform.TransformerConfigurationException;
+ 
+ /**
+  * GNU precompiled stylesheet implementation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class TemplatesImpl
+   implements Templates
+ {
+ 
+   final TransformerFactoryImpl factory;
+   final Stylesheet stylesheet;
+   final Properties outputProperties;
+ 
+   TemplatesImpl(TransformerFactoryImpl factory, Stylesheet stylesheet)
+   {
+     this.factory = factory;
+     this.stylesheet = stylesheet;
+     outputProperties = new TransformerOutputProperties(stylesheet);
+   }
+ 
+   public Transformer newTransformer()
+     throws TransformerConfigurationException
+   {
+     Stylesheet stylesheet = (Stylesheet) this.stylesheet.clone();
+     TransformerImpl transformer =
+       new TransformerImpl(factory, stylesheet, outputProperties);
+     stylesheet.transformer = transformer;
+     return transformer;
+   }
+ 
+   public Properties getOutputProperties()
+   {
+     return (Properties) outputProperties.clone();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/TextNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/TextNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/TextNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/TextNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,119 ----
+ /* TextNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing the XSL <code>text</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class TextNode
+   extends TemplateNode
+ {
+ 
+   final boolean disableOutputEscaping;
+ 
+   TextNode(boolean disableOutputEscaping)
+   {
+     this.disableOutputEscaping = disableOutputEscaping;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new TextNode(disableOutputEscaping);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     String value = "";
+     Document doc = (parent instanceof Document) ? (Document) parent :
+       parent.getOwnerDocument();
+     if (children != null)
+       {
+         // Create a document fragment to hold the text
+         DocumentFragment fragment = doc.createDocumentFragment();
+         // Apply children to the fragment
+         children.apply(stylesheet, mode,
+                        context, pos, len,
+                        fragment, null);
+         // Use XPath string-value of fragment
+         value = Expr.stringValue(fragment);
+       }
+     Text text = doc.createTextNode(value);
+     if (disableOutputEscaping)
+       {
+         text.setUserData("disable-output-escaping", "yes", stylesheet);
+       }
+     // Insert into result tree
+     if (nextSibling != null)
+       {
+         parent.insertBefore(text, nextSibling);
+       }
+     else
+       {
+         parent.appendChild(text);
+       }
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/TransformerFactoryImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/TransformerFactoryImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/TransformerFactoryImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/TransformerFactoryImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,345 ----
+ /* TransformerFactoryImpl.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.io.IOException;
+ import java.net.URL;
+ import java.util.Iterator;
+ import java.util.LinkedHashMap;
+ import java.util.LinkedList;
+ import java.util.Map;
+ import java.util.Properties;
+ import javax.xml.transform.ErrorListener;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.Templates;
+ import javax.xml.transform.Transformer;
+ import javax.xml.transform.TransformerConfigurationException;
+ import javax.xml.transform.TransformerException;
+ import javax.xml.transform.TransformerFactory;
+ import javax.xml.transform.URIResolver;
+ import javax.xml.transform.dom.DOMResult;
+ import javax.xml.transform.dom.DOMSource;
+ import javax.xml.transform.sax.SAXResult;
+ import javax.xml.transform.sax.SAXSource;
+ import javax.xml.transform.stream.StreamResult;
+ import javax.xml.transform.stream.StreamSource;
+ import javax.xml.xpath.XPathFactory;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.Node;
+ import gnu.xml.dom.DomDocument;
+ 
+ /**
+  * GNU transformer factory implementation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class TransformerFactoryImpl
+   extends TransformerFactory
+ {
+ 
+   final XPathFactory xpathFactory;
+ 	final XSLURIResolver resolver;
+   ErrorListener userListener;
+   URIResolver userResolver;
+ 
+   public TransformerFactoryImpl()
+   {
+     xpathFactory = new gnu.xml.xpath.XPathFactoryImpl();
+     resolver = new XSLURIResolver();
+   }
+ 
+   public Transformer newTransformer(Source source)
+     throws TransformerConfigurationException
+   {
+     Stylesheet stylesheet = newStylesheet(source, 0, null);
+     Properties outputProperties =
+       new TransformerOutputProperties(stylesheet);
+     TransformerImpl transformer =
+       new TransformerImpl(this, stylesheet, outputProperties);
+     stylesheet.transformer = transformer;
+     return transformer;
+   }
+ 
+   public Transformer newTransformer()
+     throws TransformerConfigurationException
+   {
+     return new TransformerImpl(this, null, new Properties());
+   }
+ 
+   public Templates newTemplates(Source source)
+     throws TransformerConfigurationException
+   {
+     Stylesheet stylesheet = newStylesheet(source, 0, null);
+     return new TemplatesImpl(this, stylesheet);
+   }
+ 
+   Stylesheet newStylesheet(Source source, int precedence, Stylesheet parent)
+     throws TransformerConfigurationException
+   {
+     Document doc = null;
+     String systemId = null;
+     if (source != null)
+       {
+         try
+           {
+             DOMSource ds;
+             synchronized (resolver)
+               {
+                 resolver.setUserResolver(userResolver);
+                 resolver.setUserListener(userListener);
+                 ds = resolver.resolveDOM(source, null, null);
+               }
+             Node node = ds.getNode();
+             if (node == null)
+               {
+                 throw new TransformerConfigurationException("no source document");
+               }
+             doc = (node instanceof Document) ? (Document) node :
+               node.getOwnerDocument();
+             systemId = ds.getSystemId();
+           }
+         catch (TransformerException e)
+           {
+             throw new TransformerConfigurationException(e);
+           }
+       }
+     return new Stylesheet(this, parent, doc, systemId, precedence);
+   }
+   
+   public Source getAssociatedStylesheet(Source source,
+                                         String media,
+                                         String title,
+                                         String charset)
+     throws TransformerConfigurationException
+   {
+     try
+       {
+         DOMSource ds;
+         synchronized (resolver)
+           {
+             resolver.setUserResolver(userResolver);
+             resolver.setUserListener(userListener);
+             ds = resolver.resolveDOM(source, null, null);
+           }
+         Node node = ds.getNode();
+         if (node == null)
+           {
+             throw new TransformerConfigurationException("no source document");
+           }
+         Document doc = (node instanceof Document) ? (Document) node :
+           node.getOwnerDocument();
+         LinkedList matches = new LinkedList();
+         for (node = doc.getFirstChild();
+              node != null;
+              node = node.getNextSibling())
+           {
+             if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE &&
+                 "xml-stylesheet".equals(node.getNodeName()))
+               {
+                 Map params = parseParameters(node.getNodeValue());
+                 if (media != null && !media.equals(params.get("media")))
+                   {
+                     continue;
+                   }
+                 if (title != null && !title.equals(params.get("title")))
+                   {
+                     continue;
+                   }
+                 if (charset != null && !charset.equals(params.get("charset")))
+                   {
+                     continue;
+                   }
+                 String href = (String) params.get("href");
+                 URL url = resolver.resolveURL(null, node.getBaseURI(), href);
+                 matches.add(url);
+               }
+           }
+         switch (matches.size())
+           {
+           case 0:
+             return null;
+           case 1:
+             return new StreamSource(((URL) matches.getFirst()).toString());
+           default:
+             // Create a source representing a stylesheet with a list of
+             // imports
+             DomDocument ssDoc = new DomDocument();
+             ssDoc.setBuilding(true);
+             // Create document element
+             Node root =
+               ssDoc.createElementNS(Stylesheet.XSL_NS, "stylesheet");
+             Node version =
+               ssDoc.createAttributeNS(null, "version");
+             version.setNodeValue("1.0");
+             root.getAttributes().setNamedItemNS(version);
+             ssDoc.appendChild(root);
+             // Create xsl:import for each URL
+             for (Iterator i = matches.iterator(); i.hasNext(); )
+               {
+                 URL url = (URL) i.next();
+                 Node imp =
+                   ssDoc.createElementNS(Stylesheet.XSL_NS, "import");
+                 Node href =
+                   ssDoc.createAttributeNS(null, "href");
+                 href.setNodeValue(url.toString());
+                 imp.getAttributes().setNamedItemNS(href);
+                 root.appendChild(imp);
+               }
+             ssDoc.setBuilding(false);
+             return new DOMSource(ssDoc);
+           }
+       }
+     catch (IOException e)
+       {
+         throw new TransformerConfigurationException(e);
+       }
+     catch (TransformerException e)
+       {
+         throw new TransformerConfigurationException(e);
+       }
+   }
+ 
+   Map parseParameters(String data)
+   {
+     Map ret = new LinkedHashMap();
+     int len = data.length();
+     String key = null;
+     int start = 0;
+     char quoteChar = '\u0000';
+     for (int i = 0; i < len; i++)
+       {
+         char c = data.charAt(i);
+         if (quoteChar == '\u0000' && c == ' ')
+           {
+             if (key == null && start < i)
+               {
+                 key = data.substring(start, i);
+               }
+             else
+               {
+                 String val = unquote(data.substring(start, i).trim());
+                 ret.put(key, val);
+                 key = null;
+               }
+             start = i + 1;
+           }
+         else if (c == '"')
+           {
+             quoteChar = (quoteChar == c) ? '\u0000' : c;
+           }
+         else if (c == '\'')
+           {
+             quoteChar = (quoteChar == c) ? '\u0000' : c;
+           }
+       }
+     if (start < len && key != null)
+       {
+         String val = unquote(data.substring(start, len).trim());
+         ret.put(key, val);
+       }
+     return ret;
+   }
+ 
+   String unquote(String text)
+   {
+     int end = text.length() - 1;
+     if (text.charAt(0) == '\'' && text.charAt(end) == '\'')
+       {
+         return text.substring(1, end);
+       }
+     if (text.charAt(0) == '"' && text.charAt(end) == '"')
+       {
+         return text.substring(1, end);
+       }
+     return text;
+   }
+ 
+   public void setURIResolver(URIResolver resolver)
+   {
+     userResolver = resolver;
+   }
+ 
+   public URIResolver getURIResolver()
+   {
+     return userResolver;
+   }
+ 
+   public void setFeature(String name, boolean value)
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException("not supported");
+   }
+ 
+   public boolean getFeature(String name)
+   {
+     if (SAXSource.FEATURE.equals(name) ||
+         SAXResult.FEATURE.equals(name) ||
+         StreamSource.FEATURE.equals(name) ||
+         StreamResult.FEATURE.equals(name) ||
+         DOMSource.FEATURE.equals(name) ||
+         DOMResult.FEATURE.equals(name))
+       {
+         return true;
+       }
+     return false;
+   }
+ 
+   public void setAttribute(String name, Object value)
+     throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException("not supported");
+   }
+ 
+   public Object getAttribute(String name)
+     throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException("not supported");
+   }
+ 
+   public void setErrorListener(ErrorListener listener)
+     throws IllegalArgumentException
+   {
+     userListener = listener;
+   }
+ 
+   public ErrorListener getErrorListener()
+   {
+     return userListener;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/TransformerImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/TransformerImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/TransformerImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/TransformerImpl.java	Thu Dec  8 15:30:10 2005
***************
*** 0 ****
--- 1,777 ----
+ /* TransformerImpl.java -- 
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.io.BufferedOutputStream;
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.UnsupportedEncodingException;
+ import java.io.Writer;
+ import java.net.MalformedURLException;
+ import java.net.UnknownServiceException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Properties;
+ import java.util.StringTokenizer;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.ErrorListener;
+ import javax.xml.transform.OutputKeys;
+ import javax.xml.transform.Result;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.Transformer;
+ import javax.xml.transform.TransformerConfigurationException;
+ import javax.xml.transform.TransformerException;
+ import javax.xml.transform.URIResolver;
+ import javax.xml.transform.dom.DOMSource;
+ import javax.xml.transform.dom.DOMResult;
+ import javax.xml.transform.sax.SAXResult;
+ import javax.xml.transform.stream.StreamResult;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.ext.LexicalHandler;
+ import gnu.xml.dom.DomDoctype;
+ import gnu.xml.dom.DomDocument;
+ import gnu.xml.dom.ls.WriterOutputStream;
+ 
+ /**
+  * The transformation process for a given stylesheet.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class TransformerImpl
+   extends Transformer
+ {
+ 
+   final TransformerFactoryImpl factory;
+   final Stylesheet stylesheet;
+   URIResolver uriResolver;
+   ErrorListener errorListener;
+   Properties outputProperties;
+ 
+   TransformerImpl(TransformerFactoryImpl factory,
+                   Stylesheet stylesheet,
+                   Properties outputProperties)
+     throws TransformerConfigurationException
+   {
+     this.factory = factory;
+     uriResolver = factory.userResolver;
+     errorListener = factory.userListener;
+     this.stylesheet = stylesheet;
+     this.outputProperties = outputProperties;
+     if (stylesheet != null)
+       {
+         // Set up parameter context for this transformer
+         stylesheet.bindings.push(Bindings.PARAM);
+       }
+   }
+ 
+   public void transform(Source xmlSource, Result outputTarget)
+     throws TransformerException
+   {
+     // Get the source tree
+     DOMSource source;
+     synchronized (factory.resolver)
+       {
+         factory.resolver.setUserResolver(uriResolver);
+         factory.resolver.setUserListener(errorListener);
+         source = factory.resolver.resolveDOM(xmlSource, null, null);
+       }
+     Node context = source.getNode();
+     Document doc = (context instanceof Document) ? (Document) context :
+       context.getOwnerDocument();
+     if (doc instanceof DomDocument)
+       {
+         // Suppress mutation events
+         ((DomDocument) doc).setBuilding(true);
+         // TODO find a better/more generic way of doing this than
+         // casting
+       }
+     // Get the result tree
+     Node parent = null, nextSibling = null;
+     if (outputTarget instanceof DOMResult)
+       {
+         DOMResult dr = (DOMResult) outputTarget;
+         parent = dr.getNode();
+         nextSibling = dr.getNextSibling();
+ 
+         Document rdoc = (parent instanceof Document) ? (Document) parent :
+           parent.getOwnerDocument();
+         if (rdoc instanceof DomDocument)
+           {
+             // Suppress mutation events and allow multiple root elements
+             DomDocument drdoc = (DomDocument) rdoc;
+             drdoc.setBuilding(true);
+             drdoc.setCheckWellformedness(false);
+             // TODO find a better/more generic way of doing this than
+             // casting
+           }
+       }
+     boolean created = false;
+     // Transformation
+     if (stylesheet != null)
+       {
+         if (parent == null)
+           {
+             // Create a new document to hold the result
+             DomDocument resultDoc = new DomDocument();
+             resultDoc.setBuilding(true);
+             resultDoc.setCheckWellformedness(false);
+             parent = resultDoc;
+             created = true;
+           }
+         // Make a copy of the source node, and strip it
+         context = context.cloneNode(true);
+         strip(context);
+         // XSLT transformation
+         try
+           {
+             // Set output properties in the underlying stylesheet
+             ((TransformerOutputProperties) outputProperties).apply();
+             stylesheet.initTopLevelVariables(context);
+             TemplateNode t = stylesheet.getTemplate(null, context, false);
+             if (t != null)
+               {
+                 stylesheet.current = context;
+                 t.apply(stylesheet, null, context, 1, 1, parent, nextSibling);
+               }
+           }
+         catch (TransformerException e)
+           {
+             // Done transforming, reset document
+             if (doc instanceof DomDocument)
+               {
+                 ((DomDocument) doc).setBuilding(false);
+               }
+             throw e;
+           }
+       }
+     else
+       {
+         // Identity transform
+         Node clone = context.cloneNode(true);
+         if (context.getNodeType() != Node.DOCUMENT_NODE)
+           {
+             Document resultDoc;
+             if (parent == null)
+               {
+                 // Create a new document to hold the result
+                 DomDocument rd = new DomDocument();
+                 rd.setBuilding(true);
+                 rd.setCheckWellformedness(false);
+                 parent = resultDoc = rd;
+                 created = true;
+               }
+             else
+               {
+                 resultDoc = (parent instanceof Document) ?
+                   (Document) parent :
+                   parent.getOwnerDocument();
+               }
+             Document sourceDoc = context.getOwnerDocument();
+             if (sourceDoc != resultDoc)
+               {
+                 clone = resultDoc.adoptNode(clone);
+               }
+             if (nextSibling != null)
+               {
+                 parent.insertBefore(clone, nextSibling);
+               }
+             else
+               {
+                 parent.appendChild(clone);
+               }
+           }
+         else
+           {
+             // Cannot append document to another tree
+             parent = clone;
+             created = true;
+           }
+       }
+     String method = outputProperties.getProperty(OutputKeys.METHOD);
+     int outputMethod = "html".equals(method) ? Stylesheet.OUTPUT_HTML :
+       "text".equals(method) ? Stylesheet.OUTPUT_TEXT :
+       Stylesheet.OUTPUT_XML;
+     String encoding = outputProperties.getProperty(OutputKeys.ENCODING);
+     String publicId = outputProperties.getProperty(OutputKeys.DOCTYPE_PUBLIC);
+     String systemId = outputProperties.getProperty(OutputKeys.DOCTYPE_SYSTEM);
+     String version = outputProperties.getProperty(OutputKeys.VERSION);
+     boolean omitXmlDeclaration = 
+       "yes".equals(outputProperties.getProperty(OutputKeys.OMIT_XML_DECLARATION));
+     boolean standalone = 
+       "yes".equals(outputProperties.getProperty(OutputKeys.STANDALONE));
+     String mediaType = outputProperties.getProperty(OutputKeys.MEDIA_TYPE);
+     String cdataSectionElements =
+       outputProperties.getProperty(OutputKeys.CDATA_SECTION_ELEMENTS);
+     boolean indent =
+       "yes".equals(outputProperties.getProperty(OutputKeys.INDENT));
+     if (created)
+       {
+         // Discover document element
+         DomDocument resultDoc = (DomDocument) parent;
+         Node root = resultDoc.getDocumentElement();
+         // Add doctype if specified
+         if ((publicId != null || systemId != null) &&
+             root != null)
+           {
+             // We must know the name of the root element to
+             // create the document type
+             resultDoc.appendChild(new DomDoctype(resultDoc,
+                                                  root.getNodeName(),
+                                                  publicId,
+                                                  systemId));
+           }
+         resultDoc.setBuilding(false);
+         resultDoc.setCheckWellformedness(true);
+       }
+     else if (publicId != null || systemId != null)
+       {
+         switch (parent.getNodeType())
+           {
+           case Node.DOCUMENT_NODE:
+           case Node.DOCUMENT_FRAGMENT_NODE:
+             Document resultDoc = (parent instanceof Document) ?
+               (Document) parent :
+               parent.getOwnerDocument();
+             DOMImplementation impl = resultDoc.getImplementation();
+             DocumentType doctype =
+               impl.createDocumentType(resultDoc.getNodeName(),
+                                       publicId,
+                                       systemId);
+             // Try to insert doctype before first element
+             Node ctx = parent.getFirstChild();
+             for (; ctx != null &&
+                  ctx.getNodeType() != Node.ELEMENT_NODE;
+                  ctx = ctx.getNextSibling())
+               {
+               }
+             if (ctx != null)
+               {
+                 parent.insertBefore(doctype, ctx);
+               }
+             else
+               {
+                 parent.appendChild(doctype);
+               }
+           }
+       }
+     if (version != null)
+       {
+         parent.setUserData("version", version, stylesheet);
+       }
+     if (omitXmlDeclaration)
+       {
+         parent.setUserData("omit-xml-declaration", "yes", stylesheet);
+       }
+     if (standalone)
+       {
+         parent.setUserData("standalone", "yes", stylesheet);
+       }
+     if (mediaType != null)
+       {
+         parent.setUserData("media-type", mediaType, stylesheet);
+       }
+     if (cdataSectionElements != null)
+       {
+         List list = new LinkedList();
+         StringTokenizer st = new StringTokenizer(cdataSectionElements);
+         while (st.hasMoreTokens())
+           {
+             String name = st.nextToken();
+             String localName = name;
+             String uri = null;
+             String prefix = null;
+             int ci = name.indexOf(':');
+             if (ci != -1)
+               {
+                 // Use namespaces defined on xsl:output node to resolve
+                 // namespaces for QName
+                 prefix = name.substring(0, ci);
+                 localName = name.substring(ci + 1);
+                 uri = stylesheet.output.lookupNamespaceURI(prefix);
+               }
+             list.add(new QName(uri, localName, prefix));
+           }
+         if (!list.isEmpty())
+           {
+             Document resultDoc = (parent instanceof Document) ?
+               (Document) parent :
+               parent.getOwnerDocument();
+             convertCdataSectionElements(resultDoc, parent, list);
+           }
+       }
+     if (indent)
+       {
+         parent.normalize();
+         strip(parent);
+         Document resultDoc = (parent instanceof Document) ?
+           (Document) parent :
+           parent.getOwnerDocument();
+         reindent(resultDoc, parent, 0);
+       }
+     // Render result to the target device
+     if (outputTarget instanceof DOMResult)
+       {
+         if (created)
+           {
+             DOMResult dr = (DOMResult) outputTarget;
+             dr.setNode(parent);
+             dr.setNextSibling(null);
+           }
+       }
+     else if (outputTarget instanceof StreamResult)
+       {
+         StreamResult sr = (StreamResult) outputTarget;
+         IOException ex = null;
+         try
+           {
+             writeStreamResult(parent, sr, outputMethod, encoding);
+           }
+         catch (UnsupportedEncodingException e)
+           {
+             try
+               {
+                 writeStreamResult(parent, sr, outputMethod, "UTF-8");
+               }
+             catch (IOException e2)
+               {
+                 ex = e2;
+               }
+           }
+         catch (IOException e)
+           {
+             ex = e;
+           }
+         if (ex != null)
+           {
+             if (errorListener != null)
+               {
+                 errorListener.error(new TransformerException(ex));
+               }
+             else
+               {
+                 ex.printStackTrace(System.err);
+               }
+           }
+       }
+     else if (outputTarget instanceof SAXResult)
+       {
+         SAXResult sr = (SAXResult) outputTarget;
+         try
+           {
+             ContentHandler ch = sr.getHandler();
+             LexicalHandler lh = sr.getLexicalHandler();
+             if (lh == null && ch instanceof LexicalHandler)
+               {
+                 lh = (LexicalHandler) ch;
+               }
+             SAXSerializer serializer = new SAXSerializer();
+             serializer.serialize(parent, ch, lh);
+           }
+         catch (SAXException e)
+           {
+             if (errorListener != null)
+               {
+                 errorListener.error(new TransformerException(e));
+               }
+             else
+               {
+                 e.printStackTrace(System.err);
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Strip whitespace from the source tree.
+    */
+   void strip(Node node)
+     throws TransformerConfigurationException
+   {
+     short nt = node.getNodeType();
+     if (nt == Node.ENTITY_REFERENCE_NODE)
+       {
+         // Replace entity reference with its content
+         Node parent = node.getParentNode();
+         Node child = node.getFirstChild();
+         if (child != null)
+           {
+             strip(child);
+           }
+         while (child != null)
+           {
+             Node next = child.getNextSibling();
+             node.removeChild(child);
+             parent.insertBefore(child, node);
+             child = next;
+           }
+         parent.removeChild(node);
+       }
+     if (nt == Node.TEXT_NODE || nt == Node.CDATA_SECTION_NODE)
+       {
+         if (!stylesheet.isPreserved((Text) node))
+           {
+             node.getParentNode().removeChild(node);
+           }
+         else
+           {
+             String text = node.getNodeValue();
+             String stripped = text.trim();
+             if (!text.equals(stripped))
+               {
+                 node.setNodeValue(stripped);
+               }
+           }
+       }
+     else
+       {
+         for (Node child = node.getFirstChild(); child != null;
+              child = child.getNextSibling())
+           {
+             strip(child);
+           }
+       }
+   }
+ 
+   /**
+    * Obtain a suitable output stream for writing the result to,
+    * and use the StreamSerializer to write the result tree to the stream.
+    */
+   void writeStreamResult(Node node, StreamResult sr, int outputMethod,
+                          String encoding)
+     throws IOException
+   {
+     OutputStream out = null;
+     boolean created = false;
+     try
+       {
+         out = sr.getOutputStream();
+         if (out == null)
+           {
+             Writer writer = sr.getWriter();
+             if (writer != null)
+               {
+                 out = new WriterOutputStream(writer);
+               }
+           }
+         if (out == null)
+           {
+             String systemId = sr.getSystemId();
+             try
+               {
+                 URL url = new URL(systemId);
+                 URLConnection connection = url.openConnection();
+                 // We need to call setDoInput(false), because our
+                 // implementation of the file protocol allows writing
+                 // (unlike Sun), but it will fail with a FileNotFoundException
+                 // if we also open the connection for input and the output
+                 // file doesn't yet exist.
+                 connection.setDoInput(false);
+                 connection.setDoOutput(true);
+                 out = connection.getOutputStream();
+               }
+             catch (MalformedURLException e)
+               {
+                 out = new FileOutputStream(systemId);
+               }
+             catch (UnknownServiceException e)
+               {
+                 URL url = new URL(systemId);
+                 out = new FileOutputStream(url.getPath());
+               }
+             created = true;
+           }
+         out = new BufferedOutputStream(out);
+         StreamSerializer serializer =
+           new StreamSerializer(outputMethod, encoding, null);
+         if (stylesheet != null)
+           {
+             Collection celem = stylesheet.outputCdataSectionElements;
+             serializer.setCdataSectionElements(celem);
+           }
+         serializer.serialize(node, out);
+         out.flush();
+       }
+     finally
+       {
+         try
+           {
+             if (out != null && created)
+               {
+                 out.close();
+               }
+           }
+         catch (IOException e)
+           {
+           }
+       }
+   }
+ 
+   void copyChildren(Document dstDoc, Node src, Node dst)
+   {
+     Node srcChild = src.getFirstChild();
+     while (srcChild != null)
+       {
+         Node dstChild = dstDoc.adoptNode(srcChild);
+         dst.appendChild(dstChild);
+         srcChild = srcChild.getNextSibling();
+       }
+   }
+ 
+   public void setParameter(String name, Object value)
+   {
+     if (stylesheet != null)
+       {
+         stylesheet.bindings.set(new QName(null, name), value, Bindings.PARAM);
+       }
+   }
+ 
+   public Object getParameter(String name)
+   {
+     if (stylesheet != null)
+       {
+         return stylesheet.bindings.get(new QName(null, name), null, 1, 1);
+       }
+     return null;
+   }
+ 
+   public void clearParameters()
+   {
+     if (stylesheet != null)
+       {
+         stylesheet.bindings.pop(Bindings.PARAM);
+         stylesheet.bindings.push(Bindings.PARAM);
+       }
+   }
+ 
+   public void setURIResolver(URIResolver resolver)
+   {
+     uriResolver = resolver;
+   }
+ 
+   public URIResolver getURIResolver()
+   {
+     return uriResolver;
+   }
+ 
+   public void setOutputProperties(Properties oformat)
+     throws IllegalArgumentException
+   {
+     if (oformat == null)
+       {
+         outputProperties.clear();
+       }
+     else
+       {
+         outputProperties.putAll(oformat);
+       }
+   }
+ 
+   public Properties getOutputProperties()
+   {
+     return (Properties) outputProperties.clone();
+   }
+ 
+   public void setOutputProperty(String name, String value)
+     throws IllegalArgumentException
+   {
+     outputProperties.put(name, value);
+   }
+ 
+   public String getOutputProperty(String name)
+     throws IllegalArgumentException
+   {
+     return outputProperties.getProperty(name);
+   }
+ 
+   public void setErrorListener(ErrorListener listener)
+   {
+     errorListener = listener;
+   }
+ 
+   public ErrorListener getErrorListener()
+   {
+     return errorListener;
+   }
+ 
+   static final String INDENT_WHITESPACE = "  ";
+ 
+   /*
+    * Apply indent formatting to the given tree.
+    */
+   void reindent(Document doc, Node node, int offset)
+   {
+     if (node.hasChildNodes())
+       {
+         boolean markupContent = false;
+         boolean textContent = false;
+         List children = new LinkedList();
+         Node ctx = node.getFirstChild();
+         while (ctx != null)
+           {
+             switch (ctx.getNodeType())
+               {
+               case Node.ELEMENT_NODE:
+               case Node.PROCESSING_INSTRUCTION_NODE:
+               case Node.DOCUMENT_TYPE_NODE:
+                 markupContent = true;
+                 break;
+               case Node.TEXT_NODE:
+               case Node.CDATA_SECTION_NODE:
+               case Node.ENTITY_REFERENCE_NODE:
+               case Node.COMMENT_NODE:
+                 textContent = true;
+                 break;
+               }
+             children.add(ctx);
+             ctx = ctx.getNextSibling();
+           }
+         if (markupContent)
+           {
+             if (textContent)
+               {
+                 // XXX handle mixed content differently?
+               }
+             int nodeType = node.getNodeType();
+             if (nodeType == Node.DOCUMENT_NODE)
+               {
+                 for (Iterator i = children.iterator(); i.hasNext(); )
+                   {
+                     ctx = (Node) i.next();
+                     reindent(doc, ctx, offset + 1);
+                   }
+               }
+             else
+               {
+                 StringBuffer buf = new StringBuffer();
+                 buf.append('\n');
+                 for (int i = 0; i < offset + 1; i++)
+                   {
+                     buf.append(INDENT_WHITESPACE);
+                   }
+                 String ws = buf.toString();
+                 for (Iterator i = children.iterator(); i.hasNext(); )
+                   {
+                     ctx = (Node) i.next();
+                     node.insertBefore(doc.createTextNode(ws), ctx);
+                     reindent(doc, ctx, offset + 1);
+                   }
+                 buf = new StringBuffer();
+                 buf.append('\n');
+                 ws = buf.toString();
+                 for (int i = 0; i < offset; i++)
+                   {
+                     buf.append(INDENT_WHITESPACE);
+                   }
+                 node.appendChild(doc.createTextNode(ws));
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Converts the text node children of any cdata-section-elements in the
+    * tree to CDATA section nodes.
+    */
+   void convertCdataSectionElements(Document doc, Node node, List list)
+   {
+     if (node.getNodeType() == Node.ELEMENT_NODE)
+       {
+         boolean match = false;
+         for (Iterator i = list.iterator(); i.hasNext(); )
+           {
+             QName qname = (QName) i.next();
+             if (match(qname, node))
+               {
+                 match = true;
+                 break;
+               }
+           }
+         if (match)
+           {
+             Node ctx = node.getFirstChild();
+             while (ctx != null)
+               {
+                 if (ctx.getNodeType() == Node.TEXT_NODE)
+                   {
+                     Node cdata = doc.createCDATASection(ctx.getNodeValue());
+                     node.replaceChild(cdata, ctx);
+                     ctx = cdata;
+                   }
+                 ctx = ctx.getNextSibling();
+               }
+           }
+       }
+     Node ctx = node.getFirstChild();
+     while (ctx != null)
+       {
+         if (ctx.hasChildNodes())
+           {
+             convertCdataSectionElements(doc, ctx, list);
+           }
+         ctx = ctx.getNextSibling();
+       }
+   }
+ 
+   boolean match(QName qname, Node node)
+   {
+     String ln1 = qname.getLocalPart();
+     String ln2 = node.getLocalName();
+     if (ln2 == null)
+       {
+         return ln1.equals(node.getNodeName());
+       }
+     else
+       {
+         String uri1 = qname.getNamespaceURI();
+         String uri2 = node.getNamespaceURI();
+         return (uri1.equals(uri2) && ln1.equals(ln2));
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/TransformerOutputProperties.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/TransformerOutputProperties.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/TransformerOutputProperties.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/TransformerOutputProperties.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,185 ----
+ /* TransformerOutputProperties.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.LinkedHashSet;
+ import java.util.Properties;
+ import java.util.StringTokenizer;
+ import javax.xml.transform.OutputKeys;
+ 
+ /**
+  * Helper class to manage JAXP user setting of output properties.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class TransformerOutputProperties
+   extends Properties
+ {
+   
+   final Properties defaultProperties;
+   final Stylesheet stylesheet;
+   boolean dirty;
+ 
+   TransformerOutputProperties(Stylesheet stylesheet)
+   {
+     this.stylesheet = stylesheet;
+     defaultProperties = new Properties();
+     switch (stylesheet.outputMethod)
+       {
+       case Stylesheet.OUTPUT_XML:
+         defaultProperties.put(OutputKeys.METHOD, "xml");
+         break;
+       case Stylesheet.OUTPUT_HTML:
+         defaultProperties.put(OutputKeys.METHOD, "html");
+         break;
+       case Stylesheet.OUTPUT_TEXT:
+         defaultProperties.put(OutputKeys.METHOD, "text");
+         break;
+       }
+     if (stylesheet.outputVersion != null)
+       {
+         defaultProperties.put(OutputKeys.VERSION, stylesheet.outputVersion);
+       }
+     if (stylesheet.outputEncoding != null)
+       {
+         defaultProperties.put(OutputKeys.ENCODING, stylesheet.outputEncoding);
+       }
+     defaultProperties.put(OutputKeys.OMIT_XML_DECLARATION,
+                           stylesheet.outputOmitXmlDeclaration ? "yes" : "no");
+     defaultProperties.put(OutputKeys.STANDALONE,
+                           stylesheet.outputStandalone ? "yes" : "no");
+     if (stylesheet.outputPublicId != null)
+       {
+         defaultProperties.put(OutputKeys.DOCTYPE_PUBLIC,
+                               stylesheet.outputPublicId);
+       }
+     if (stylesheet.outputSystemId != null)
+       {
+         defaultProperties.put(OutputKeys.DOCTYPE_SYSTEM,
+                               stylesheet.outputSystemId);
+       }
+     StringBuffer buf = new StringBuffer();
+     for (Iterator i = stylesheet.outputCdataSectionElements.iterator();
+          i.hasNext(); )
+       {
+         if (buf.length() > 0)
+           {
+             buf.append(' ');
+           }
+         buf.append((String) i.next());
+       }
+     defaultProperties.put(OutputKeys.CDATA_SECTION_ELEMENTS, buf.toString());
+     defaultProperties.put(OutputKeys.INDENT,
+                           stylesheet.outputIndent ? "yes" : "no");
+     if (stylesheet.outputMediaType != null)
+       {
+         defaultProperties.put(OutputKeys.MEDIA_TYPE,
+                               stylesheet.outputMediaType);
+       }
+   }
+ 
+   public String getProperty(String key)
+   {
+     String val = super.getProperty(key);
+     if (val == null)
+       {
+         val = defaultProperties.getProperty(key);
+       }
+     return val;
+   }
+ 
+   public Object put(Object key, Object value)
+   {
+     Object ret = super.put(key, value);
+     dirty = true;
+     return ret;
+   }
+ 
+   public void clear()
+   {
+     super.clear();
+     dirty = true;
+   }
+ 
+   /**
+    * Applies the current set of properties to the underlying stylesheet.
+    */
+   void apply()
+   {
+     if (!dirty)
+       {
+         return;
+       }
+     String method = getProperty(OutputKeys.METHOD);
+     if ("xml".equals(method))
+       {
+         stylesheet.outputMethod = Stylesheet.OUTPUT_XML;
+       }
+     else if ("html".equals(method))
+       {
+         stylesheet.outputMethod = Stylesheet.OUTPUT_HTML;
+       }
+     else if ("text".equals(method))
+       {
+         stylesheet.outputMethod = Stylesheet.OUTPUT_TEXT;
+       }
+     stylesheet.outputVersion = getProperty(OutputKeys.VERSION);
+     stylesheet.outputEncoding = getProperty(OutputKeys.ENCODING);
+     stylesheet.outputOmitXmlDeclaration =
+       "yes".equals(getProperty(OutputKeys.OMIT_XML_DECLARATION));
+     stylesheet.outputStandalone =
+       "yes".equals(getProperty(OutputKeys.STANDALONE));
+     stylesheet.outputPublicId = getProperty(OutputKeys.DOCTYPE_PUBLIC);
+     stylesheet.outputSystemId = getProperty(OutputKeys.DOCTYPE_SYSTEM);
+     StringTokenizer st = 
+       new StringTokenizer(getProperty(OutputKeys.CDATA_SECTION_ELEMENTS));
+     Collection acc = new LinkedHashSet();
+     while (st.hasMoreTokens())
+       {
+         acc.add(st.nextToken());
+       }
+     stylesheet.outputCdataSectionElements = acc;
+     stylesheet.outputIndent = "yes".equals(getProperty(OutputKeys.INDENT));
+     stylesheet.outputMediaType = getProperty(OutputKeys.MEDIA_TYPE);
+     dirty = false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/URIResolverEntityResolver.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/URIResolverEntityResolver.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/URIResolverEntityResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/URIResolverEntityResolver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,83 ----
+ /* URIResolverEntityResolver.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.io.IOException;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.TransformerException;
+ import javax.xml.transform.URIResolver;
+ import javax.xml.transform.sax.SAXSource;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ 
+ /**
+  * EntityResolver that wraps a URIResolver.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class URIResolverEntityResolver
+   implements EntityResolver
+ {
+ 
+   final URIResolver resolver;
+ 
+   URIResolverEntityResolver(URIResolver resolver)
+   {
+     this.resolver = resolver;
+   }
+ 
+   public InputSource resolveEntity(String publicId, String systemId)
+     throws SAXException, IOException
+   {
+     try
+       {
+         Source source = resolver.resolve(null, systemId);
+         if (source == null)
+           {
+             return null;
+           }
+         return SAXSource.sourceToInputSource(source);
+       }
+     catch (TransformerException e)
+       {
+         throw new SAXException(e);
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,132 ----
+ /* UnparsedEntityUriFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Notation;
+ import gnu.xml.xpath.Expr;
+ import gnu.xml.xpath.Function;
+ 
+ /**
+  * The XSLT <code>unparsed-entity-uri()</code>function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class UnparsedEntityUriFunction
+   extends Expr
+   implements XPathFunction, Function
+ {
+ 
+   List args;
+ 
+   public Object evaluate(List args)
+     throws XPathFunctionException
+   {
+     // Useless...
+     return Collections.EMPTY_SET;
+   }
+ 
+   public void setArguments(List args)
+   {
+     this.args = args;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     int arity = args.size();
+     List values = new ArrayList(arity);
+     for (int i = 0; i < arity; i++)
+       {
+         Expr arg = (Expr) args.get(i);
+         values.add(arg.evaluate(context, pos, len));
+       }
+     String name = _string(context, values.get(0));
+     DocumentType doctype = context.getOwnerDocument().getDoctype();
+     if (doctype != null)
+       {
+         NamedNodeMap notations = doctype.getNotations();
+         Notation notation = (Notation) notations.getNamedItem(name);
+         if (notation != null)
+           {
+             String systemId = notation.getSystemId();
+             // XXX absolutize?
+             if (systemId != null)
+               {
+                 return systemId;
+               }
+           }
+       }
+     return "";
+   }
+ 
+   public Expr clone(Object context)
+   {
+     UnparsedEntityUriFunction f = new UnparsedEntityUriFunction();
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     f.setArguments(args2);
+     return f;
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/ValueOfNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/ValueOfNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/ValueOfNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/ValueOfNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,161 ----
+ /* ValueOfNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Collection;
+ import java.util.Iterator;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.Text;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing an XSLT <code>value-of</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ValueOfNode
+   extends TemplateNode
+ {
+ 
+   final Expr select;
+   final boolean disableOutputEscaping;
+ 
+   ValueOfNode(Expr select, boolean disableOutputEscaping)
+   {
+     this.select = select;
+     this.disableOutputEscaping = disableOutputEscaping;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new ValueOfNode(select.clone(stylesheet),
+                                        disableOutputEscaping);
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Object ret = select.evaluate(context, pos, len);
+     /*if (stylesheet.debug)
+       {
+         System.err.println("value-of: " + select + " -> " + ret);
+       }*/
+     String value;
+     if (ret instanceof Collection)
+       {
+         StringBuffer buf = new StringBuffer();
+         for (Iterator i = ((Collection) ret).iterator(); i.hasNext(); )
+           {
+             Node node = (Node) i.next();
+             buf.append(Expr.stringValue(node));
+           }
+         value = buf.toString();
+       }
+     else
+       {
+         value = Expr._string(context, ret);
+       }
+     if (stylesheet.debug)
+       {
+         System.err.println("value-of: "+context+" "+ select + " -> "+ value);
+       }
+     if (value != null && value.length() > 0)
+       {
+         Document doc = (parent instanceof Document) ?
+           (Document) parent : parent.getOwnerDocument();
+         Text textNode = doc.createTextNode(value);
+         if (disableOutputEscaping)
+           {
+             textNode.setUserData("disable-output-escaping", "yes", stylesheet);
+           }
+         if (nextSibling != null)
+           {
+             parent.insertBefore(textNode, nextSibling);
+           }
+         else
+           {
+             parent.appendChild(textNode);
+           }
+       }
+     // value-of doesn't process children
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+ 
+   public boolean references(QName var)
+   {
+     if (select != null && select.references(var))
+       {
+         return true;
+       }
+     return super.references(var);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("select=");
+     buf.append(select);
+     if (disableOutputEscaping)
+       {
+         buf.append(",disableOutputEscaping");
+       }
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/WhenNode.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/WhenNode.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/WhenNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/WhenNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,123 ----
+ /* WhenNode.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A template node representing an XSL <code>when</code> instruction.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class WhenNode
+   extends TemplateNode
+ {
+ 
+   final Expr test;
+ 
+   WhenNode(Expr test)
+   {
+     this.test = test;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     TemplateNode ret = new WhenNode(test.clone(stylesheet));
+     if (children != null)
+       {
+         ret.children = children.clone(stylesheet);
+       }
+     if (next != null)
+       {
+         ret.next = next.clone(stylesheet);
+       }
+     return ret;
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     Object ret = test.evaluate(context, pos, len);
+     boolean success = (ret instanceof Boolean) ?
+       ((Boolean) ret).booleanValue() :
+       Expr._boolean(context, ret);
+     if (success)
+       {
+         if (children != null)
+           {
+             children.apply(stylesheet, mode,
+                            context, pos, len,
+                            parent, nextSibling);
+           }
+       }
+     else
+       {
+         if (next != null)
+           {
+             next.apply(stylesheet, mode,
+                        context, pos, len,
+                        parent, nextSibling);
+           }
+       }
+   }
+   
+   public boolean references(QName var)
+   {
+     if (test != null && test.references(var))
+       {
+         return true;
+       }
+     return super.references(var);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("test=");
+     buf.append(test);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/WithParam.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/WithParam.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/WithParam.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/WithParam.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,123 ----
+ /* WithParam.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Collections;
+ import javax.xml.namespace.QName;
+ import javax.xml.transform.TransformerException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentFragment;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * A specification for setting a variable or parameter during template
+  * processing with <code>apply-templates</code> or
+  * <code>call-template</code>.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class WithParam
+ {
+ 
+   final QName name;
+   final Expr select;
+   final TemplateNode content;
+ 
+   WithParam(QName name, Expr select)
+   {
+     this.name = name;
+     this.select = select;
+     content = null;
+   }
+ 
+   WithParam(QName name, TemplateNode content)
+   {
+     this.name = name;
+     this.content = content;
+     select = null;
+   }
+ 
+   Object getValue(Stylesheet stylesheet, QName mode,
+                   Node context, int pos, int len)
+     throws TransformerException
+   {
+     if (select != null)
+       {
+         return select.evaluate(context, pos, len);
+       }
+     else
+       {
+         Document doc = (context instanceof Document) ? (Document) context :
+           context.getOwnerDocument();
+         DocumentFragment fragment = doc.createDocumentFragment();
+         content.apply(stylesheet, mode,
+                       context, pos, len,
+                       fragment, null);
+         return Collections.singleton(fragment);
+       }
+   }
+ 
+   WithParam clone(Stylesheet stylesheet)
+   {
+     if (content == null)
+       {
+         return new WithParam(name,
+                              select.clone(stylesheet));
+       }
+     else
+       {
+         return new WithParam(name,
+                              content.clone(stylesheet));
+       }
+   }
+ 
+   boolean references(QName var)
+   {
+     if (select != null && select.references(var))
+       {
+         return true;
+       }
+     if (content != null && content.references(var))
+       {
+         return true;
+       }
+     return false;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/XSLComparator.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/XSLComparator.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/XSLComparator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/XSLComparator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,124 ----
+ /* XSLComparator.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.util.Comparator;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Locale;
+ import java.text.Collator;
+ import org.w3c.dom.Node;
+ import gnu.xml.xpath.Expr;
+ 
+ /**
+  * Comparator for sorting lists of nodes according to a list of sort keys.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class XSLComparator
+   implements Comparator
+ {
+ 
+   final List sortKeys;
+ 
+   XSLComparator(List sortKeys)
+   {
+     this.sortKeys = sortKeys;
+   }
+ 
+   public int compare(Object o1, Object o2)
+   {
+     if (o1 instanceof Node && o2 instanceof Node)
+       {
+         Node n1 = (Node) o1;
+         Node n2 = (Node) o2;
+         for (Iterator i = sortKeys.iterator(); i.hasNext(); )
+           {
+             SortKey sortKey = (SortKey) i.next();
+             String k1 = sortKey.key(n1);
+             String k2 = sortKey.key(n2);
+             if ("text".equals(sortKey.dataType))
+               {
+                 Locale locale = (sortKey.lang == null) ? Locale.getDefault() :
+                   new Locale(sortKey.lang);
+                 Collator collator = Collator.getInstance(locale);
+                 int d = collator.compare(k1, k2);
+                 if (d != 0)
+                   {
+                     switch (sortKey.caseOrder)
+                       {
+                       case SortKey.UPPER_FIRST:
+                         // TODO
+                         break;
+                       case SortKey.LOWER_FIRST:
+                         // TODO
+                         break;
+                       }
+                     if (sortKey.descending)
+                       {
+                         d = -d;
+                       }
+                     return d;
+                   }
+               }
+             else if ("number".equals(sortKey.dataType))
+               {
+                 double kn1 = Expr._number(n1, k1);
+                 double kn2 = Expr._number(n2, k2);
+                 int d;
+                 if (Double.isNaN(kn1) || Double.isInfinite(kn2))
+                   {
+                     d = -1;
+                   }
+                 else if (Double.isNaN(kn2) || Double.isInfinite(kn1))
+                   {
+                     d = 1;
+                   }
+                 else
+                   {
+                     // conversion to int may give 0 for small numbers
+                     d = (kn1 > kn2) ? 1 : (kn1 < kn2) ? -1 : 0;
+                   }
+                 return (sortKey.descending) ? -d : d;
+               }
+           }
+       }
+     return 0;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/XSLURIResolver.java gcc-4.1.0/libjava/classpath/gnu/xml/transform/XSLURIResolver.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/XSLURIResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/XSLURIResolver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,282 ----
+ /* XSLURIResolver.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.transform;
+ 
+ import java.io.File;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.Reader;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.util.HashMap;
+ import java.util.Map;
+ import javax.xml.parsers.DocumentBuilder;
+ import javax.xml.parsers.DocumentBuilderFactory;
+ import javax.xml.transform.ErrorListener;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.TransformerException;
+ import javax.xml.transform.URIResolver;
+ import javax.xml.transform.dom.DOMSource;
+ import javax.xml.transform.stream.StreamSource;
+ import org.w3c.dom.Node;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ import gnu.xml.dom.ls.ReaderInputStream;
+ 
+ /**
+  * URI resolver for XSLT.
+  * This resolver parses external entities into DOMSources. It
+  * maintains a cache of URIs to DOMSources to avoid expensive re-parsing.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class XSLURIResolver
+   implements URIResolver
+ {
+ 
+   Map lastModifiedCache = new HashMap();
+   Map nodeCache = new HashMap();
+   DocumentBuilder builder;
+   URIResolver userResolver;
+   ErrorListener userListener;
+ 
+   void setUserResolver(URIResolver userResolver)
+   {
+     this.userResolver = userResolver;
+   }
+ 
+   void setUserListener(ErrorListener userListener)
+   {
+     this.userListener = userListener;
+   }
+ 
+   /**
+    * Clear the cache.
+    */
+   void flush()
+   {
+     lastModifiedCache.clear();
+     nodeCache.clear();
+   }
+ 
+   public Source resolve(String href, String base)
+     throws TransformerException
+   {
+     Source source = null;
+     if (userResolver != null)
+       {
+         source = userResolver.resolve(base, href);
+       }
+     return resolveDOM(source, href, base);
+   }
+ 
+   DOMSource resolveDOM(Source source, String base, String href)
+     throws TransformerException
+   {
+     if (source != null && source instanceof DOMSource)
+       {
+         return (DOMSource) source;
+       }
+     String systemId = (source == null) ? null : source.getSystemId();
+     long lastModified = 0L, lastLastModified = 0L;
+ 
+     try
+       {
+         URL url = resolveURL(systemId, base, href);
+         Node node = null;
+         InputStream in = null;
+         if (source instanceof StreamSource)
+           {
+             StreamSource ss = (StreamSource) source;
+             in = ss.getInputStream();
+             if (in == null)
+               {
+                 Reader reader = ss.getReader();
+                 if (reader != null)
+                   {
+                     in = new ReaderInputStream(reader);
+                   }
+               }
+           }
+         if (in == null)
+           {
+             if (url != null)
+               {
+                 systemId = url.toString();
+                 node = (Node) nodeCache.get(systemId);
+                 // Is the resource up to date?
+                 URLConnection conn = url.openConnection();
+                 Long llm = (Long) lastModifiedCache.get(systemId);
+                 if (llm != null)
+                   {
+                     lastLastModified = llm.longValue();
+                     conn.setIfModifiedSince(lastLastModified);
+                   }
+                 conn.connect();
+                 lastModified = conn.getLastModified();
+                 if (node != null && 
+                     lastModified > 0L &&
+                     lastModified <= lastLastModified)
+                   {
+                     // Resource unchanged
+                     return new DOMSource(node, systemId);
+                   }
+                 else
+                   {
+                     // Resource new or modified
+                     in = conn.getInputStream();
+                     nodeCache.put(systemId, node);
+                     lastModifiedCache.put(systemId, new Long(lastModified));
+                   }
+               }
+             else
+               {
+                 throw new TransformerException("can't resolve URL: " +
+                                                systemId);
+               }
+           }
+         InputSource input = new InputSource(in);
+         input.setSystemId(systemId);
+         DocumentBuilder builder = getDocumentBuilder();
+         node = builder.parse(input);
+         return new DOMSource(node, systemId);
+       }
+     catch (IOException e)
+       {
+         throw new TransformerException(e);
+       }
+     catch (SAXException e)
+       {
+         throw new TransformerException(e);
+       }
+   }
+ 
+   URL resolveURL(String systemId, String base, String href)
+     throws IOException
+   {
+     URL url = null;
+     try
+       {
+         if (systemId != null)
+           {
+             try
+               {
+                 url = new URL(systemId);
+               }
+             catch (MalformedURLException e)
+               {
+                 // Try building from base + href
+               }
+           }
+         if (url == null)
+           {
+             if (base != null)
+               {
+                 URL baseURL = new URL(base);
+                 url = new URL(baseURL, href);
+               }
+             else if (href != null)
+               {
+                 url = new URL(href);
+               }
+             else
+               {
+                 // See below
+                 throw new MalformedURLException(systemId);
+               }
+           }
+         return url;
+       }
+     catch (MalformedURLException e)
+       {
+         // Fall back to local filesystem
+         File file = null;
+         if (href == null)
+           {
+             href = systemId;
+           }
+         if (base != null)
+           {
+             int lsi = base.lastIndexOf(File.separatorChar);
+             if (lsi != -1 && lsi < base.length() - 1)
+               {
+                 base = base.substring(0, lsi);
+               }
+             File baseFile = new File(base);
+             file = new File(baseFile, href);
+           }
+         else if (href != null)
+           {
+             file = new File(href);
+           }
+         return (file == null) ? null : file.toURL();
+       }
+   }
+   
+   DocumentBuilder getDocumentBuilder()
+     throws TransformerException
+   {
+     try
+       {
+         if (builder == null)
+           {
+             DocumentBuilderFactory factory =
+               DocumentBuilderFactory.newInstance();
+             factory.setNamespaceAware(true);
+             factory.setExpandEntityReferences(true);
+             builder = factory.newDocumentBuilder();
+           }
+         if (userResolver != null)
+           {
+             builder.setEntityResolver(new URIResolverEntityResolver(userResolver));
+           }
+         if (userListener != null)
+           {
+             builder.setErrorHandler(new ErrorListenerErrorHandler(userListener));
+           }
+         return builder;
+       }
+     catch (Exception e)
+       {
+         throw new TransformerException(e);
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/transform/package.html gcc-4.1.0/libjava/classpath/gnu/xml/transform/package.html
*** gcc-4.0.2/libjava/classpath/gnu/xml/transform/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/transform/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ <html>
+ <body>
+ 
+ <h1>GNU JAXP XSL transformer</h1>
+ 
+ <div>
+ This package contains a Java XSL transformer compliant with the JAXP
+ specification. It depends on the GNU DOM and XPath implementations, and
+ will generate GNU DOM nodes unless a specific target from another
+ implementation was given. It understands DOM, SAX, and stream sources
+ and result sinks and supports these JAXP features.
+ </div>
+ 
+ <div>
+ To use this transformer, set the system property
+ <code>javax.xml.transform.TransformerFactory</code> to the value
+ <code>gnu.xml.transform.TransformerFactoryImpl</code>. You can then
+ instantiate <a href='TransformerFactory.html'>TransformerFactory</a>
+ and transformers in the ordinary manner. Reuse of stylesheets is
+ supported using the JAXP <a href='Templates.html'>Templates</a>
+ mechanism.
+ </div>
+ 
+ <h3>Architecture</h3>
+ 
+ <div>
+ When given a stylesheet source, this implementation compiles it internally
+ into a Stylesheet object, which is a container for templates and state.
+ Each stylesheet instruction is represented by a subclass of TemplateNode,
+ which is arranged in a directed graph: each TemplateNode has a reference
+ to its first child and the next node.
+ </div>
+ 
+ <div>
+ The transformation process consists of identifying the Template that matches
+ the root of the source context, and calling <code>apply</code> on its
+ corresponding TemplateNode. This in turn processes its children and next
+ TemplateNode, depending on the semantics of each node type.
+ </div>
+ 
+ <div>
+ Template nodes may reference XPath expressions or patterns. These are fully
+ compiled to objects of type <a href='../xpath/Expr.html'>Expr</a> at the
+ time the stylesheet is compiled.
+ </div>
+ 
+ <h3>Conformance</h3>
+ 
+ <div>
+ This implementation is feature complete, but the XSLT specification is
+ large and there are still many bugs that need to be ironed out. It has
+ been tested against the OASIS XSLT TC test suite, comprising unit tests
+ from the Xalan project and Microsoft. Conformance to these unit tests
+ is approximately 70% at the current time, although normal usage of the
+ transformer should involve relatively few surprises (the test suite is
+ designed to test very complex and obscure functionality).
+ </div>
+ 
+ <h3>Known bugs</h3>
+ 
+ <ul>
+ <li>When reusing stylesheets using the JAXP Templates mechanism, XSL
+ <code>apply-imports</code> instructions will not work.</li>
+ <li>XPath filter expressions do not always work as expected (this is a
+ problem with the GNU XPath implementation rather than the transformer).
+ This can result in problems with the <code>position()</code> function,
+ as well as <code>select</code> expressions and numbering.</li>
+ </ul>
+ 
+ <div>
+ Obviously we'd like to improve conformance and fix these bugs. If you're
+ interested in working on any of these issues please
+ <a href='mailto:classpathx-xml@gnu.org'>contact us</a>.
+ </div>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/util/DoParse.java gcc-4.1.0/libjava/classpath/gnu/xml/util/DoParse.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/util/DoParse.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/util/DoParse.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,300 ----
+ /* DoParse.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.util;
+ 
+ import java.io.IOException;
+ 
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.helpers.XMLReaderFactory;
+ 
+ import gnu.xml.pipeline.EventConsumer;
+ import gnu.xml.pipeline.EventFilter;
+ import gnu.xml.pipeline.NSFilter;
+ import gnu.xml.pipeline.PipelineFactory;
+ import gnu.xml.pipeline.TeeConsumer;
+ import gnu.xml.pipeline.ValidationConsumer;
+ import gnu.xml.pipeline.WellFormednessFilter;
+ 
+ /**
+  * This class provides a driver which may be invoked from the command line
+  * to process a document using a SAX2 parser and a specified XML processing
+  * pipeline.
+  * This facilitates some common types of command line tools, such as parsing an
+  * XML document in order test it for well formedness or validity.
+  *
+  * <p>The SAX2 XMLReaderFactory should return a SAX2 XML parser which
+  * supports both of the standardized extension handlers (for declaration
+  * and lexical events).  That parser will be used to produce events.
+  *
+  * <p>The first parameter to the command gives the name of the document that
+  * will be given to that processor.  If it is a file name, it is converted
+  * to a URL first.
+  *
+  * <p>The second parameter describes a simple processing pipeline, and will
+  * be used as input to {@link gnu.xml.pipeline.PipelineFactory}
+  * methods which identify the processing to be done.  Examples of such a
+  * pipeline include <pre>
+  *
+  *    nsfix | validate                <em>to validate the input document </em>
+  *    nsfix | write ( stdout )        <em>to echo the file as XML text</em>
+  *    dom | nsfix | write ( stdout )  <em>parse into DOM, print the result</em>
+  * </pre>
+  *
+  * <p> Relatively complex pipelines can be described on the command line, but
+  * not all interesting ones will require as little configuration as can be done
+  * in that way.  Put filters like "nsfix", perhaps followed by "validate",
+  * at the front of the pipeline so they can be optimized out if a parser
+  * supports those modes natively.
+  *
+  * <p> If the parsing is aborted for any reason, the JVM will exit with a
+  * failure code.  If a validating parse was done then both validation and
+  * well formedness errors will cause a failure.  A non-validating parse
+  * will report failure on well formedness errors.
+  *
+  * @see gnu.xml.pipeline.PipelineFactory
+  *
+  * @author David Brownell
+  */
+ final public class DoParse
+ {
+     private DoParse () { /* no instances allowed */ }
+ 
+     // first reported nonrecoverable error
+     private static SAXParseException	fatal;
+ 
+     // error categories
+     private static int			errorCount;
+     private static int			fatalCount;
+ 
+     /**
+      * Command line invoker for this class; pass a filename or URL
+      * as the first argument, and a pipeline description as the second.
+      * Make sure to use filters to condition the input to stages that
+      * require it; an <em>nsfix</em> filter will be a common requirement,
+      * to restore syntax that SAX2 parsers delete by default.  Some
+      * conditioning filters may be eliminated by setting parser options.
+      * (For example, "nsfix" can set the "namespace-prefixes" feature to
+      * a non-default value of "true".  In the same way, "validate" can set
+      * the "validation" feature to "true".)
+      */
+     public static void main (String argv [])
+     throws IOException
+     {
+ 	int		exitStatus = 1;
+ 
+ 	if (argv.length != 2) {
+ 	    System.err.println ("Usage: DoParse [filename|URL] pipeline-spec");
+ 	    System.err.println ("Example pipeline specs:");
+ 	    System.err.println ("  'nsfix | validate'");
+ 	    System.err.println (
+ 		"       ... restore namespace syntax, validate");
+ 	    System.err.println ("  'nsfix | write ( stdout )'");
+ 	    System.err.println (
+ 		"       ... restore namespace syntax, write to stdout as XML"
+ 		);
+ 	    System.exit (1);
+ 	}
+ 
+ 	try {
+ 	    //
+ 	    // Get input source for specified document (or try ;-)
+ 	    //
+ 	    argv [0] = Resolver.getURL (argv [0]);
+ 	    InputSource input = new InputSource (argv [0]);
+ 
+ 	    //
+ 	    // Get the producer, using the system default parser (which
+ 	    // can be overridden for this particular invocation).
+ 	    //
+ 	    // And the pipeline, using commandline options.
+ 	    //
+ 	    XMLReader		producer;
+ 	    EventConsumer	consumer;
+ 
+ 	    producer = XMLReaderFactory.createXMLReader ();
+ 
+ 	    //
+ 	    // XXX pipeline factory now has a pre-tokenized input
+ 	    // method, use it ... that way at least some params
+ 	    // can be written using quotes (have spaces, ...)
+ 	    //
+ 	    consumer = PipelineFactory.createPipeline (argv [1]);
+ 
+ 	    //
+ 	    // XXX want commandline option for tweaking error handler.
+ 	    // Want to be able to present warnings.
+ 	    //
+ 	    producer.setErrorHandler (new MyErrorHandler ());
+ 
+ 	    // XXX need facility enabling resolving to local DTDs
+ 
+ 	    //
+ 	    // Parse.  The pipeline may get optimized a bit, so we
+ 	    // can't always fail cleanly for validation without taking
+ 	    // a look at the filter stages.
+ 	    //
+ 	    EventFilter.bind (producer, consumer);
+ 	    producer.parse (input);
+ 
+ 	    try {
+ 		if (producer.getFeature (
+ 			"http://org.xml/sax/features/validation"))
+ 		    exitStatus = ((errorCount + fatalCount) > 0) ? 1 : 0;
+ 		else if (fatalCount == 0)
+ 		    exitStatus = 0;
+ 	    } catch (SAXException e) {
+ 		if (hasValidator (consumer))
+ 		    exitStatus = ((errorCount + fatalCount) > 0) ? 1 : 0;
+ 		else if (fatalCount == 0)
+ 		    exitStatus = 0;
+ 	    }
+ 
+ 	} catch (java.net.MalformedURLException e) {
+ 	    System.err.println ("** Malformed URL: " + e.getMessage ());
+ 	    System.err.println ("Is '" + argv [0] + "' a non-existent file?");
+ 	    e.printStackTrace ();
+ 		// e.g. FNF
+ 
+ 	} catch (SAXParseException e) {
+ 	    if (e != fatal) {
+ 		System.err.print (printParseException ("Parsing Aborted", e));
+ 		e.printStackTrace ();
+ 		if (e.getException () != null) {
+ 		    System.err.println ("++ Wrapped exception:");
+ 		    e.getException ().printStackTrace ();
+ 		}
+ 	    }
+ 
+ 	} catch (SAXException e) {
+ 	    Exception	x = e;
+ 	    if (e.getException () != null)
+ 		x = e.getException ();
+ 	    x.printStackTrace ();
+ 
+ 	} catch (Throwable t) {
+ 	    t.printStackTrace ();
+ 	}
+ 
+ 	System.exit (exitStatus);
+     }
+ 
+     // returns true if saw a validator (before end or unrecognized node)
+     // false otherwise
+     private static boolean hasValidator (EventConsumer e)
+     {
+ 	if (e == null)
+ 	    return false;
+ 	if (e instanceof ValidationConsumer)
+ 	    return true;
+ 	if (e instanceof TeeConsumer) {
+ 	    TeeConsumer	t = (TeeConsumer) e;
+ 	    return hasValidator (t.getFirst ())
+ 		|| hasValidator (t.getRest ());
+ 	}
+ 	if (e instanceof WellFormednessFilter
+ 		|| e instanceof NSFilter
+ 		)
+ 	    return hasValidator (((EventFilter)e).getNext ());
+ 	
+ 	// else ... gee, we can't know.  Assume not.
+ 
+ 	return false;
+     }
+ 
+     static class MyErrorHandler implements ErrorHandler
+     {
+ 	// dump validation errors, but continue
+ 	public void error (SAXParseException e)
+ 	throws SAXParseException
+ 	{
+ 	    errorCount++;
+ 	    System.err.print (printParseException ("Error", e));
+ 	}
+ 
+ 	public void warning (SAXParseException e)
+ 	throws SAXParseException
+ 	{
+ 	    // System.err.print (printParseException ("Warning", e));
+ 	}
+ 
+ 	// try to continue fatal errors, in case a parser reports more
+ 	public void fatalError (SAXParseException e)
+ 	throws SAXParseException
+ 	{
+ 	    fatalCount++;
+ 	    if (fatal == null)
+ 		fatal = e;
+ 	    System.err.print (printParseException ("Nonrecoverable Error", e));
+ 	}
+     }
+ 
+     static private String printParseException (
+ 	String			label,
+ 	SAXParseException	e
+     ) {
+ 	StringBuffer	buf = new StringBuffer ();
+ 	int		temp;
+ 
+ 	buf.append ("** ");
+ 	buf.append (label);
+ 	buf.append (": ");
+ 	buf.append (e.getMessage ());
+ 	buf.append ('\n');
+ 	if (e.getSystemId () != null) {
+ 	    buf.append ("   URI:  ");
+ 	    buf.append (e.getSystemId ());
+ 	    buf.append ('\n');
+ 	}
+ 	if ((temp = e.getLineNumber ()) != -1) {
+ 	    buf.append ("   line: ");
+ 	    buf.append (temp);
+ 	    buf.append ('\n');
+ 	}
+ 	if ((temp = e.getColumnNumber ()) != -1) {
+ 	    buf.append ("   char: ");
+ 	    buf.append (temp);
+ 	    buf.append ('\n');
+ 	}
+ 
+ 	return buf.toString ();
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/util/DomParser.java gcc-4.1.0/libjava/classpath/gnu/xml/util/DomParser.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/util/DomParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/util/DomParser.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,804 ----
+ /* DomParser.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.util;
+ 
+ import java.util.Enumeration;
+ import java.util.Locale;
+ 
+ import org.xml.sax.*;
+ import org.xml.sax.helpers.AttributesImpl;
+ import org.xml.sax.helpers.NamespaceSupport;
+ import org.xml.sax.ext.DeclHandler;
+ import org.xml.sax.ext.DefaultHandler2;
+ import org.xml.sax.ext.LexicalHandler;
+ 
+ import org.w3c.dom.*;
+ 
+ 
+ /**
+  * This parser emits SAX2 parsing events as it traverses a DOM tree, using
+  * any conformant implementation of DOM.  It exposes all SAX1 features,
+  * and the following SAX2 features and properties (as
+  * identified by standard URIs which are not fully provided here).  Note
+  * that if a Level 1 DOM implementation is given, then this behaves as if
+  * namespaces were disabled, and namespace prefixes were enabled.  </p>
+  *
+  * <table border="1" width='100%' cellpadding='3' cellspacing='0'>
+  * <tr bgcolor='#ccccff'>
+  *	<th><font size='+1'>Name</font></th>
+  *	<th><font size='+1'>Notes</font></th></tr>
+  *
+  * <tr><td colspan=2><center><em>Features ... URL prefix is
+  * <b>http://xml.org/sax/features/</b></em></center></td></tr>
+  *
+  * <tr><td>(URL)/external-general-entities</td>
+  *	<td>false (does no parsing)</td></tr>
+  * <tr><td>(URL)/external-parameter-entities</td>
+  *	<td>false (does no parsing)</td></tr>
+  * <tr><td>(URL)/namespaces</td>
+  *	<td>Value is fixed at <em>true</em></td></tr>
+  * <tr><td>(URL)/namespace-prefixes</td>
+  *	<td>Value is settable, defaulting to <em>false</em>
+  *	(<code>xmlns</code> attributes hidden, and names aren't prefixed)
+  *	</td></tr>
+  * <tr><td>(URL)/string-interning</td>
+  *	<td>Value is fixed at <em>false</em> (DOM provides no
+  *	guarantees as to interning)</td></tr>
+  * <tr><td>(URL)/validation</td>
+  *	<td>false (does no parsing)</td></tr>
+  * <tr><td>(URL)/lexical-handler/parameter-entities</td>
+  *	<td>false (DOM doesn't do parameter entities)</td></tr>
+  *
+  * <tr><td colspan=2><center><em>Properties ... URL prefix is
+  * <b>http://xml.org/sax/properties/</b></em></center></td></tr>
+  *
+  *
+  * <tr><td>(URL)/dom-node</td>
+  *	<td>This property may be set before parsing to hold a DOM
+  *	<em>Document</em> node; any arguments given to <em>parse</em>
+  *	methods are ignored.  When retrieved
+  *	during a parse, this value contains the "current" DOM node.
+  *	</td></tr>
+  * <tr><td>(URL)/declaration-handler</td>
+  *	<td>A declaration handler may be provided.  Declaration of external
+  *	general entities is exposed, but not parameter entities; none of the
+  *	entity names reported here will begin with "%". </td></tr>
+  * <tr><td>(URL)/lexical-handler</td>
+  *	<td>A lexical handler may be provided.  While the start and end of
+  *	any external subset are reported, expansion of other parameter
+  *	entities (e.g. inside attribute list declarations) is not exposed.
+  *	Expansion of general entities within attributes is also not exposed
+  *	(see below).</td></tr>
+  * </table>
+  *
+  * <P> The consequences of modifying a DOM document tree as it is being walked
+  * by this "parser" are unspecified; don't do it! </P>
+  *
+  * @author David Brownell
+  */
+ final public class DomParser implements XMLReader
+ {
+     // Stuff used internally to route events correctly
+     private DefaultHandler2	defaultHandler = new DefaultHandler2 ();
+ 
+     // per-parse SAX stuff
+     private ContentHandler	contentHandler = defaultHandler;
+     private DTDHandler		dtdHandler = defaultHandler;
+     private DeclHandler		declHandler = defaultHandler;
+     private LexicalHandler	lexicalHandler = defaultHandler;
+ 
+     // shared context
+     private ErrorHandler	errHandler = defaultHandler;
+     private EntityResolver	resolver = defaultHandler;
+     private Locale		locale = Locale.getDefault ();
+ 
+     // parser state
+     private Node		start;
+     private Node		current;
+     private boolean		isL2;
+     private boolean		showNamespaces = true;
+     private boolean		showXML1_0 = false;
+     private NamespaceSupport	prefixStack = new NamespaceSupport ();
+     private boolean		isDocument;
+ 
+ 
+     /**
+      * Constructs an unitialized <b>SAX2</b> parser.
+      */
+     public DomParser () {
+     } 
+ 
+     /**
+      * Constructs an <b>SAX2</b> parser initialized to traverse the specified
+      * DOM tree.  If the node is a document, the startDocument() and
+      * endDocument() calls bracket the calls exposing children.
+      */
+     public DomParser (Node node) {
+ 	setStart (node);
+     } 
+ 
+ 
+     // stuff that most components in an application should be sharing:
+     // resolver and error locale.
+ 
+     /**
+      * <b>SAX2</b>: Returns the object used when resolving external
+      * entities during parsing (both general and parameter entities).
+      */
+     public EntityResolver getEntityResolver ()
+     {
+ 	return resolver;
+     }
+ 
+     /**
+      * <b>SAX1</b>: Provides an object which may be used when resolving external
+      * entities during parsing (both general and parameter entities).
+      */
+     public void setEntityResolver (EntityResolver resolver)
+     {
+ 	if (resolver == null)
+ 	    resolver = defaultHandler;
+ 	this.resolver = resolver;
+     }
+ 
+     /**
+      * <b>SAX1</b>: Identifies the locale which the parser should use for the
+      * diagnostics it provides.
+      *
+      * @exception SAXException as defined in the specification for
+      *	<em>org.xml.sax.Parser.setLocale()</em>
+      */
+     public void setLocale (Locale locale)
+     throws SAXException
+     {
+ 	if (locale == null)
+ 	    locale = Locale.getDefault ();
+ 	this.locale = locale;
+     }
+ 
+     
+     // different modules will tend to handle error handling the same,
+     // but it may not be the same through the whole app
+ 
+     /**
+      * <b>SAX2</b>: Returns the object used to receive callbacks for XML
+      * errors of all levels (fatal, nonfatal, warning).
+      */
+     public ErrorHandler getErrorHandler ()
+     {
+ 	return errHandler;
+     }
+ 
+     /**
+      * <b>SAX1</b>: Provides an object which receives callbacks for XML errors
+      * of all levels (fatal, nonfatal, warning).
+      */
+     public void setErrorHandler (ErrorHandler handler)
+     {
+ 	if (handler == null)
+ 	    handler = defaultHandler;
+ 	errHandler = handler;
+     }
+ 
+ 
+     // stuff different parts of a module will handle differently
+ 
+     /**
+      * <b>SAX2</b>: Returns the object used to report the logical
+      * content of an XML document.
+      */
+     public ContentHandler getContentHandler ()
+     {
+ 	return contentHandler;
+     }
+ 
+     /**
+      * <b>SAX2</b>: Assigns the object used to report the logical
+      * content of an XML document.
+      */
+     public void setContentHandler (ContentHandler handler)
+     {
+ 	if (handler == null)
+ 	    handler = defaultHandler;
+ 	contentHandler = handler;
+     }
+ 
+     /**
+      * <b>SAX2</b>: Returns the object used to process declarations related
+      * to notations and unparsed entities.
+      */
+     public DTDHandler getDTDHandler ()
+     {
+ 	return dtdHandler;
+     }
+ 
+     /**
+      * <b>SAX1</b>: Provides an object which may be used to intercept
+      * declarations related to notations and unparsed entities.
+      */
+     public void setDTDHandler (DTDHandler handler)
+     {
+ 	if (handler == null)
+ 	    handler = defaultHandler;
+ 	dtdHandler = handler;
+     }
+ 
+ 
+     /**
+      * <b>SAX1</b>:  Parses the previously provided DOM document (the
+      * input parameter is ignored).  When this returns, that same
+      * document may be parsed again without needing a "reset".
+      *
+      * @param uri ignored (pass an empty string)
+      * @exception SAXException as defined in the specification for
+      *	<em>org.xml.sax.Parser.parse()</em>
+      */
+     public void parse (String uri) throws SAXException
+     {
+ 	parse ();
+     }
+ 
+     /**
+      * <b>SAX1</b>:  Parses the previously provided DOM document (the
+      * input parameter is ignored).  When this returns, that same
+      * document may be parsed again without needing a "reset".
+      *
+      * @param input ignored
+      * @exception SAXException as defined in the specification for
+      *	<em>org.xml.sax.Parser.parse()</em>
+      */
+     public void parse (InputSource input) throws SAXException
+     {
+ 	parse ();
+     }
+ 
+     private void parse () throws SAXException
+     {
+ 	try {
+ 	    walk ();
+ 	} finally {
+ 	    if (isDocument)
+ 		contentHandler.endDocument ();
+ 	    current = null;
+ 	    prefixStack.reset ();
+ 	}
+     }
+ 
+     private boolean getIsL2 (Node node)
+     {
+ 	DOMImplementation	impl;
+ 	Document		doc;
+ 
+ 	if (node instanceof Document)
+ 	    doc = (Document) node;
+ 	else
+ 	    doc = node.getOwnerDocument ();
+ 	if (doc == null)
+ 	    throw new RuntimeException ("? unowned node - L2 DTD ?");
+ 	impl = doc.getImplementation ();
+ 	return impl.hasFeature ("XML", "2.0");
+     }
+ 
+ 
+     private static final String FEATURES = "http://xml.org/sax/features/";
+     private static final String HANDLERS = "http://xml.org/sax/properties/";
+ 
+     /**
+      * <b>SAX2</b>: Tells whether this parser supports the specified feature.
+      */
+     public boolean getFeature (String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	// basically, none are relevant -- they relate more to
+ 	// parsing than to walking a "parse tree".
+ 
+ 		// FIXME: DOM feature to expose interning?
+ 
+ 	if ((FEATURES + "validation").equals (name)
+ 		|| (FEATURES + "external-general-entities")
+ 		    .equals (name)
+ 		|| (FEATURES + "external-parameter-entities")
+ 		    .equals (name)
+ 		|| (FEATURES + "string-interning").equals (name)
+ 		)
+ 	    return false;
+     
+ 	if ((FEATURES + "namespaces").equals (name))
+ 	    return showNamespaces;
+ 	if ((FEATURES + "namespace-prefixes").equals (name))
+ 	    return showXML1_0;
+ 
+ 	throw new SAXNotRecognizedException (name);
+     }
+ 
+     /**
+      * <b>SAX2</b>:  Returns the specified property.  At this time only
+      * the declaration and lexical handlers, and current the "DOM" node,
+      * are supported.
+      */
+     public Object getProperty (String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	if ((HANDLERS + "declaration-handler").equals (name))
+ 	    return declHandler == defaultHandler ? null : declHandler;
+ 	if ((HANDLERS + "lexical-handler").equals (name))
+ 	    return lexicalHandler == defaultHandler ? null : lexicalHandler;
+ 
+ 	if ((HANDLERS + "dom-node").equals (name))
+ 	    return current;
+ 
+ 	// unknown properties
+ 	throw new SAXNotRecognizedException (name);
+     }
+ 
+     /**
+      * <b>SAX2</b>:  Sets the state of features supported in this parser.
+      * Only the namespace support features are mutable.
+      */
+     public void setFeature (String name, boolean state)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	if (current != null)
+ 	    throw new IllegalStateException ("feature change midparse");
+ 
+ 	boolean value = getFeature (name);
+ 
+ 	if (value == state)
+ 	    return;
+ 
+ 	if ((FEATURES + "namespaces").equals (name)) {
+ 	    if (!showXML1_0 && state == false)
+ 		throw new SAXNotSupportedException ("Illegal namespace "
+ 			+ "processing configuration");
+ 	    showNamespaces = state;
+ 	    return;
+ 	}
+ 	if ((FEATURES + "namespace-prefixes").equals (name)) {
+ 	    if (!showNamespaces && state == false)
+ 		throw new SAXNotSupportedException ("Illegal namespace "
+ 			+ "processing configuration");
+ 	    showXML1_0 = state;
+ 	    return;
+ 	}
+ 
+ 	throw new SAXNotSupportedException (name);
+     }
+ 
+     /**
+      * <b>SAX2</b>:  Assigns the specified property.  At this time only
+      * declaration and lexical handlers, and the initial DOM document, are
+      * supported.  These must not be changed to values of the wrong type.
+      * Like SAX1 handlers, these handlers may be changed at any time.
+      * Like SAX1 input source or document URI, the initial DOM document
+      * may not be changed during a parse.
+      */
+     public void setProperty (String name, Object state)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+     {
+ 	if ((HANDLERS + "declaration-handler").equals (name)) {
+ 	    if (!(state instanceof DeclHandler || state == null))
+ 		throw new SAXNotSupportedException (name);
+ 	    declHandler = (DeclHandler) state;
+ 	    return;
+ 	}
+ 
+ 	if ((HANDLERS + "lexical-handler").equals (name)) {
+ 	    if (!(state instanceof LexicalHandler || state == null))
+ 		throw new SAXNotSupportedException (name);
+ 	    lexicalHandler = (LexicalHandler) state;
+ 	    return;
+ 	}
+ 
+ 	if ((HANDLERS + "dom-node").equals (name)) {
+ 	    if (state == null || state instanceof Node) {
+ 		if (current != null)
+ 		    throw new SAXNotSupportedException (
+ 			"property is readonly during parse:  " + name);
+ 		setStart ((Node) state);
+ 		return;
+ 	    }
+ 	    throw new SAXNotSupportedException ("not a DOM Node");
+ 	}
+ 
+ 	// unknown properties
+ 	throw new SAXNotRecognizedException (name);
+     }
+ 
+     private void setStart (Node property)
+     {
+ 	start = property;
+ 	if (start != null) {
+ 	    isL2 = getIsL2 (start);
+ 	    isDocument = (start instanceof Document);
+ 	}
+     }
+ 
+     //
+     // Non-recursive walk, using DOM state when backtracking is needed
+     //
+     private void walk ()
+     throws SAXException
+     {
+ 	int			type;
+ 	NamedNodeMap		nodes;
+ 	int			length;
+ 	AttributesImpl		attrs = new AttributesImpl ();
+ 	char			chars [];
+ 	String			ns, local;
+ 
+ 	synchronized (this) {
+ 	    if (current != null)
+ 		throw new IllegalStateException ("already walking tree");
+ 
+ 	    // JVM guarantees assignments are atomic; so no other
+ 	    // thread could get this far till this walk's done.
+ 	    current = start;
+ 	}
+     
+ 	for (;;) {
+ 	    type = current.getNodeType ();
+ 
+ 	    //
+ 	    // First, visit the current node, including any "start" calls
+ 	    //
+ 	    switch (type) {
+ 
+ 	      case Node.DOCUMENT_NODE:
+ 	        contentHandler.startDocument ();
+ 		break;
+ 
+ 	      case Node.ELEMENT_NODE:
+ 		nodes = current.getAttributes ();
+ 		length = nodes.getLength ();
+ 		prefixStack.pushContext ();
+ 		for (int i = 0; i < length; i++) {
+ 		    Attr	attr = (Attr) nodes.item (i);
+ 		    String	name = attr.getNodeName ();
+ 
+ 		    if (showNamespaces && name.startsWith ("xmlns")) {
+ 			String	prefix;
+ 			String	uri;
+ 			
+ 			// NOTE: DOM L2 (CR2+ and REC) violate the
+ 			// Namespaces REC, treat "xmlns" like a strange
+ 			// attribute instead of a magic token
+ 			if ("xmlns".equals (name))
+ 			    prefix = "";
+ 			else
+ 			    prefix = name.substring (6);
+ 			uri = attr.getNodeValue ();
+ 
+ 			prefixStack.declarePrefix (prefix, uri);
+ 			contentHandler.startPrefixMapping (prefix, uri);
+ 			
+ 			if (!showXML1_0)
+ 			    continue;
+ 		    }
+ 
+ 		    //
+ 		    // NOTE:  DOM doesn't record the attribute type info
+ 		    // which SAX exposes; so this always reports CDATA.
+ 		    //
+ 		    // NOTE:  SAX doesn't expose the isSpecified info which
+ 		    // DOM exposes; that's discarded here.  Similarly with
+ 		    // the information DOM hides inside itself about what
+ 		    // the default values for an attribute are.
+ 		    //
+ 		    if (showNamespaces) {
+ 			if (isL2) {
+ 			    if ((ns = attr.getNamespaceURI ()) == null)
+ 				ns = "";
+ 			    // Note:  SAX2 and DOM handle "local" names
+ 			    // differently
+ 			    if ((local = attr.getLocalName ()) == null)
+ 				local = name;
+ 			} else {
+ // XXX
+ 			    throw new RuntimeException (
+ 				"NYI, ns lookup when parsing L1 DOM");
+ 			}
+ 		    } else
+ 			ns = local = "";
+ 		    attrs.addAttribute (ns, local, name,
+ 			"CDATA", attr.getNodeValue ());
+ 		}
+ 		if (showNamespaces) {
+ 		    if (isL2) {
+ 			if ((ns = current.getNamespaceURI ()) == null)
+ 			    ns = "";
+ 			// Note:  SAX2 and DOM handle "local" names differently
+ 			if ((local = current.getLocalName ()) == null)
+ 			    local = current.getNodeName ();
+ 		    } else {
+ // XXX
+ 			throw new RuntimeException (
+ 			    "NYI, ns lookup when parsing L1 DOM");
+ 		    }
+ 		} else
+ 		    ns = local = "";
+ 		contentHandler.startElement  (ns, local,
+ 		    current.getNodeName (), attrs);
+ 		if (length != 0)
+ 		    attrs.clear ();
+ 		break;
+ 
+ 	      case Node.CDATA_SECTION_NODE:
+ 		lexicalHandler.startCDATA ();
+ 		chars = current.getNodeValue ().toCharArray ();
+ 		contentHandler.characters (chars, 0, chars.length);
+ 		lexicalHandler.endCDATA ();
+ 		break;
+ 
+ 	      case Node.COMMENT_NODE:
+ 		chars = current.getNodeValue ().toCharArray ();
+ 		lexicalHandler.comment (chars, 0, chars.length);
+ 		break;
+ 
+ 	      case Node.DOCUMENT_TYPE_NODE:
+ 		{
+ 		    DocumentType	doctype = (DocumentType) current;
+ 
+ 		    //
+ 		    // Only DOM L2 supports recreating even some DTDs in full.
+ 		    //
+ 		    if (isL2) {
+ 			lexicalHandler.startDTD (doctype.getName (),
+ 				doctype.getPublicId (),
+ 				doctype.getSystemId ());
+ 		    } else
+ 			lexicalHandler.startDTD (doctype.getName (),
+ 				null, null);
+ 		    
+ 		    //
+ 		    // The only sure way to recreate is to provide both the
+ 		    // internal and external subsets.  Otherwise, only part
+ 		    // of the job can be done ... because from the DTD, DOM
+ 		    // discards both the critical data, like the attribute and
+ 		    // element declarations, as well as the PIs and comments
+ 		    // that are used to hold their documentation.
+ 		    //
+ 		    // Even the entity and notation declarations that it can
+ 		    // expose can't be recorded without proprietary extensions.
+ 		    //
+ 		    // We construct a comment to tell what we know about how
+ 		    // (in)complete this particular really DTD is.
+ 		    //
+ 		    {
+ 			String message;
+ 			char buf [];
+ 
+ 			//
+ 			// Though DOM L2 lets the whole doctype be recreated,
+ 			// SAX2 can't represent it (input or output).
+ 			// So this will be the typical case.
+ 			//
+ 			if (isL2 && doctype.getInternalSubset () != null)
+ 			    message =
+ 		    " Full DTD known; can't be shown using SAX2. ";
+ 
+ 			//
+ 			// Otherwise, we'll concoct a partial DTD.  If there's
+ 			// any more data here at all, it was provided using a
+ 			// (proprietary) extension to DOM.
+ 			//
+ 			else
+ 			    message =
+ 	    " This DTD was was recreated using incomplete DOM L2 records. ";
+ 
+ 			buf = message.toCharArray ();
+ 			lexicalHandler.comment (buf, 0, buf.length);
+ 		    }
+ 
+ 		    // report notations first
+ 		    nodes = doctype.getNotations ();
+ 		    length = nodes.getLength ();
+ 		    for (int i = 0; i < length; i++) {
+ 			Notation notation = (Notation) nodes.item (i);
+ 			    dtdHandler.notationDecl (
+ 				notation.getNodeName (),
+ 				notation.getPublicId (),
+ 				notation.getSystemId ());
+ 		    }
+ 
+ 		    // then parsed and unparsed external general entities
+ 		    nodes = doctype.getEntities ();
+ 		    length = nodes.getLength ();
+ 		    for (int i = 0; i < length; i++) {
+ 			Entity	entity = (Entity) nodes.item (i);
+ 			String	notation = entity.getNotationName ();
+ 
+ 			if (notation != null)
+ 			    dtdHandler.unparsedEntityDecl (
+ 				entity.getNodeName (),
+ 				entity.getPublicId (),
+ 				entity.getSystemId (),
+ 				notation);
+ 			else if (entity.getSystemId () != null)
+ 			    declHandler.externalEntityDecl (
+ 				entity.getNodeName (),
+ 				entity.getPublicId (),
+ 				entity.getSystemId ());
+ 			
+ 			//
+ 			// NOTE:  DOM doesn't clearly provide internal
+ 			// entity support; but in case someone tries to
+ 			// fudge such support, we defend ourselves above.
+ 			//
+ 			// NOTE:  DOM doesn't expose parameter entities
+ 			// (thank you thank you thank you thank you)
+ 			//
+ 		    }
+ 
+ 		    //
+ 		    // NOTE:  DOM (levels 1 and 2) doesn't expose real
+ 		    // typing information (element or attribute decls),
+ 		    // as exposed by SAX2 declaration handlers.
+ 		    //
+ 		    lexicalHandler.endDTD ();
+ 		}
+ 		break;
+ 
+ 	      case Node.ENTITY_REFERENCE_NODE:
+ 		// this isn't done except (a) in content, and
+ 		// (b) not within a start tag (att value)
+ 		lexicalHandler.startEntity (current.getNodeName ());
+ 		break;
+ 
+ 	      case Node.PROCESSING_INSTRUCTION_NODE:
+ 	        contentHandler.processingInstruction (
+ 		    current.getNodeName (), current.getNodeValue ());
+ 		break;
+ 
+ 	      case Node.TEXT_NODE:
+ 		chars = current.getNodeValue ().toCharArray ();
+ 		contentHandler.characters (chars, 0, chars.length);
+ 		break;
+ 
+ 	      default:
+ 		// e.g. fragments, entities, notations, attributes
+ 		throw new SAXException ("Illegal DOM Node type in Document:  "
+ 		    +  current.getNodeType ());
+ 	    }
+ 
+ 	    //
+ 	    // Then, pick the next node to visit.  If the next node isn't
+ 	    // a child, an "end" call may be needed before moving on.
+ 	    // If there's no next node, we're done.
+ 	    //
+ 	    Node		next;
+ 
+ 	    switch (type) {
+ 	      case Node.DOCUMENT_NODE:
+ 	      case Node.ELEMENT_NODE:
+ 	      case Node.ENTITY_REFERENCE_NODE:
+ 		//
+ 		// For elements that can have children, visit those
+ 		// children before any siblings (i.e. depth first)
+ 		// and after visiting this node (i.e. preorder)
+ 		//
+ 		next = current.getFirstChild ();
+ 		if (next != null) {
+ 		    current = next;
+ 		    break;
+ 		}
+ 		//
+ 		// Else treat this like other childless nodes, but
+ 		// handle this node's "end" immediately.
+ 		//
+ 		callEnd (current);
+ 
+ 		// FALLTHROUGH
+ 
+ 	      case Node.CDATA_SECTION_NODE:
+ 	      case Node.COMMENT_NODE:
+ 	      case Node.DOCUMENT_TYPE_NODE:
+ 	      case Node.ENTITY_NODE:
+ 	      case Node.PROCESSING_INSTRUCTION_NODE:
+ 	      case Node.TEXT_NODE:
+ 		//
+ 		// Use next sibling, if there is one.
+ 		// Else, climb up a level (calling "end")
+ 		//	until we find an ancestral sibling
+ 		//	or until we we climb off the top (FINISH)
+ 		//
+ 		for (;;) {
+ 		    if ((next = current.getNextSibling ()) != null)
+ 			break;
+ 		    current = current.getParentNode ();
+ 		    if (current == null || current == start)
+ 			return;
+ 		    callEnd (current);
+ 		}
+ 		current = next;
+ 		break;
+ 
+ 	      default:
+ 		throw new SAXException (
+ 		    "Illegal DOM Node type found:  " +  current.getNodeType ());
+ 	    }
+ 	}
+     }
+ 
+     private void callEnd (Node node) throws SAXException
+     {
+ 	switch (node.getNodeType ()) {
+ 	  // only these three container types may ever be found
+ 	  // directly inside a Document.
+ 	  case Node.DOCUMENT_NODE:
+ 	    // for SAX conformance, endDocument must always
+ 	    // be called ... it's done in a "finally" clause)
+ 	    return;
+ 
+ 	  case Node.ELEMENT_NODE:
+ 	    if (showNamespaces) {
+ 		if (isL2)
+ 		    contentHandler.endElement (
+ 			node.getNamespaceURI (),
+ 			node.getLocalName (),
+ 			node.getNodeName ());
+ 		else
+ // XXX
+ 		    throw new RuntimeException (
+ 			"NYI, ns lookup when parsing L1 DOM");
+ 		for (Enumeration e = prefixStack.getDeclaredPrefixes ();
+ 			e.hasMoreElements ();
+ 			) {
+ 		    contentHandler.endPrefixMapping ((String) e.nextElement ());
+ 		}
+ 	    } else
+ 		contentHandler.endElement ("", "", node.getNodeName ());
+ 	    prefixStack.popContext ();
+ 	    return;
+ 
+ 	  case Node.ENTITY_REFERENCE_NODE:
+ 	    // see above -- in content, outside start tags.
+ 	    lexicalHandler.endEntity (node.getNodeName ());
+ 	    return;
+ 
+ 	  // these can be given at the top level
+ 	  case Node.DOCUMENT_FRAGMENT_NODE:
+ 	  case Node.ATTRIBUTE_NODE:
+ 	    return;
+ 
+ 	  default:
+ 	    throw new SAXException (
+ 		"Illegal DOM container type found:  "
+ 			+  current.getNodeType ());
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/util/Resolver.java gcc-4.1.0/libjava/classpath/gnu/xml/util/Resolver.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/util/Resolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/util/Resolver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,263 ----
+ /* Resolver.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.util;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.util.Dictionary;
+ 
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ 
+ /**
+  * Utility implementation of a SAX resolver, which can be used to improve
+  * network utilization of SAX based XML components.  It does this by
+  * supporting local caches of external entities.
+  * SAX parsers <em>should</em> use such local caches when possible.
+  *
+  * @see XCat
+  */
+ public class Resolver implements EntityResolver, Cloneable
+ {
+     /**
+      * Updates a dictionary used to map PUBLIC identifiers to file names,
+      * so that it uses the mappings in a specified directory.
+      *
+      * @param mappings Array of string pairs, where the first member
+      *	of each pair is a PUBLIC identifier and the second is the
+      *	name of a file, relative to the specified directory.
+      * @param directory File holding the specified files.
+      */
+     public static void addDirectoryMapping (
+ 	Dictionary	table,
+ 	String		mappings [][],
+ 	File		directory
+     ) throws IOException
+     {
+ 	for (int i = 0; i < mappings.length; i++) {
+ 	    File	file = new File (directory, mappings [i][1]);
+ 	    String	temp;
+ 
+ 	    if (!file.exists ())	// ?? log a warning ??
+ 		continue;
+ 
+ 	    temp = fileToURL (file);
+ 	    table.put (mappings [i][0], temp);
+ 	}
+     }
+ 
+ 	// FIXME: these *URL routines don't quite belong here, except
+ 	// that they're all in the same spirit of making it easy to
+ 	// use local filesystem URIs with XML parsers.
+ 
+     /**
+      * Provides the URL for a named file, without relying on the JDK 1.2
+      * {@link java.io.File#toURL File.toURL}() utility method.
+      *
+      * @param filename the file name to convert.  Relative file names
+      *	are resolved the way the JVM resolves them (current to the
+      *	process-global current working directory).
+      *
+      * @exception IOException if the file does not exist
+      */
+     public static String fileNameToURL (String filename)
+     throws IOException
+     {
+ 	return fileToURL (new File (filename));
+     }
+ 
+     /**
+      * Provides the URL for a file, without relying on the JDK 1.2
+      * {@link java.io.File#toURL File.toURL}() utility method.
+      *
+      * @param f the file to convert.  Relative file names
+      *	are resolved the way the JVM resolves them (current to the
+      *	process-global current working directory).
+      *
+      * @exception IOException if the file does not exist
+      */
+     public static String fileToURL (File f)
+     throws IOException
+     {
+ 	String	temp;
+ 
+ 	// NOTE:  the javax.xml.parsers.DocumentBuilder and
+ 	// javax.xml.transform.stream.StreamSource versions
+ 	// of this don't have this test.  Some JVM versions
+ 	// don't report this error sanely through URL code. 
+ 	if (!f.exists ())
+ 	    throw new IOException ("no such file: " + f.getName ());
+ 
+ 	    // FIXME: getAbsolutePath() seems buggy; I'm seeing components
+ 	    // like "/foo/../" which are clearly not "absolute"
+ 	    // and should have been resolved with the filesystem.
+ 
+ 	    // Substituting "/" would be wrong, "foo" may have been
+ 	    // symlinked ... the URL code will make that change
+ 	    // later, so that things can get _really_ broken!
+ 
+ 	temp = f.getAbsolutePath ();
+ 
+ 	if (File.separatorChar != '/')
+ 	    temp = temp.replace (File.separatorChar, '/');
+ 	if (!temp.startsWith ("/"))
+ 	    temp = "/" + temp;
+ 	if (!temp.endsWith ("/") && f.isDirectory ())
+ 	    temp = temp + "/";
+ 	return "file:" + temp;
+     }
+ 
+ 
+     /**
+      * Returns a URL string.  Note that if a malformed URL is provided, or
+      * the parameter names a nonexistent file, the resulting URL may be
+      * malformed.
+      *
+      * @param fileOrURL If this is the name of a file which exists,
+      *	then its URL is returned.  Otherwise the argument is returned.
+      */
+     public static String getURL (String fileOrURL)
+     {
+ 	try {
+ 	    return fileNameToURL (fileOrURL);
+ 	} catch (Exception e) {
+ 	    return fileOrURL;
+ 	}
+     }
+ 
+ 
+ 
+     // note:  cloneable, this is just copied; unguarded against mods
+     private Dictionary		pubidMapping;
+ 
+     /**
+      * Constructs a resolver which understands how to map PUBLIC identifiers
+      * to other URIs, typically for local copies of standard DTD components.
+      * 
+      * @param dictionary maps PUBLIC identifiers to URIs.  This is not
+      *	copied; subsequent modifications will be reported through the
+      *	resolution operations.
+      */
+     public Resolver (Dictionary dict)
+ 	{ pubidMapping = dict; }
+ 
+     
+     // FIXME: want notion of a "system default" resolver, presumably
+     // loaded with all sorts of useful stuff.  At the same time need
+     // a notion of resolver chaining (failure --> next) so that subsystems
+     // can set up things that won't interfere with other ones.
+ 
+     /**
+      * This parses most MIME content type strings that have <em>charset=...</em>
+      * encoding declarations to and returns the specified encoding.  This
+      * conforms to RFC 3023, and is useful when constructing InputSource
+      * objects from URLConnection objects or other objects using MIME
+      * content typing.
+      *
+      * @param contentType the MIME content type that will be parsed; must
+      *	not be null.
+      * @return the appropriate encoding, or null if the content type is
+      *	not text and there's no <code>charset=...</code> attribute
+      */
+     static public String getEncoding (String contentType)
+     {
+ 	// currently a dumb parsing algorithm that works "mostly" and handles
+ 	//	..anything...charset=ABC
+ 	//	..anything...charset=ABC;otherAttr=DEF
+ 	//	..anything...charset=ABC (comment);otherAttr=DEF
+ 	//	..anything...charset= "ABC" (comment);otherAttr=DEF
+ 
+ 	int	temp;
+ 	String	encoding;
+ 	String	defValue = null;
+ 
+ 	if (contentType.startsWith ("text/"))
+ 	    defValue = contentType.startsWith ("text/html")
+ 		    ? "ISO-8859-1" : "US-ASCII";
+ 
+ 	// Assumes 'charset' is only an attribute name, not part
+ 	// of a value, comment, or other attribute name
+ 	// ALSO assumes no escaped values like "\;" or "\)"
+ 	if ((temp = contentType.indexOf ("charset")) != -1) {
+ 	    // strip out everything up to '=' ...
+ 	    temp = contentType.indexOf ('=', temp);
+ 	    if (temp == -1)
+ 		return defValue;
+ 	    encoding = contentType.substring (temp + 1);
+ 	    // ... and any subsequent attributes
+ 	    if ((temp = encoding.indexOf (';')) != -1)
+ 		encoding = encoding.substring (0, temp);
+ 	    // ... and any comments after value
+ 	    if ((temp = encoding.indexOf ('(')) != -1)
+ 		encoding = encoding.substring (0, temp);
+ 	    // ... then whitespace, and any (double) quotes
+ 	    encoding = encoding.trim ();
+ 	    if (encoding.charAt (0) == '"')
+ 		encoding = encoding.substring (1, encoding.length () - 1);
+ 	} else
+ 	    encoding = defValue;
+ 	return encoding;
+     }
+ 
+ 
+     /**
+      * Uses a local dictionary of public identifiers to resolve URIs,
+      * normally with the goal of minimizing network traffic or latencies.
+      */
+     public InputSource resolveEntity (String publicId, String systemId)
+     throws IOException, SAXException
+     {
+ 	InputSource	retval = null;
+ 	String		uri;
+ 
+ 	if (publicId != null
+ 		&& ((uri = (String) pubidMapping.get (publicId)) != null)) {
+ 	    retval = new InputSource (uri);
+ 	    retval.setPublicId (publicId);
+ 	}
+ 
+ 	// Could do URN resolution here
+ 
+ 	// URL resolution always done by parser
+ 
+ 	// FIXME: chain to "next" resolver
+ 
+ 	return retval;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/util/SAXNullTransformerFactory.java gcc-4.1.0/libjava/classpath/gnu/xml/util/SAXNullTransformerFactory.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/util/SAXNullTransformerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/util/SAXNullTransformerFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,676 ----
+ /* SAXNullTransformerFactory.java -- 
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.util;
+ 
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.util.Hashtable;
+ import java.util.Properties;
+ 
+ import gnu.xml.dom.Consumer;
+ import gnu.xml.dom.DomDocument;
+ import gnu.xml.pipeline.DomConsumer;
+ import gnu.xml.pipeline.EventFilter;
+ 
+ import javax.xml.transform.*;
+ import javax.xml.transform.dom.*;
+ import javax.xml.transform.sax.*;
+ import javax.xml.transform.stream.*;
+ 
+ import org.xml.sax.*;
+ import org.xml.sax.helpers.XMLReaderFactory;
+ import org.xml.sax.helpers.LocatorImpl;
+ 
+ 
+ /**
+  * Implements null transforms. XSLT stylesheets are not supported.
+  * This class provides a way to translate three representations of
+  * XML data (SAX event stream, DOM tree, and XML text) into each other.
+  * In essence it's a thinnish wrapper around basic SAX event
+  * <a href="../pipeline/package-summary.html">pipeline</a> facilities, which
+  * exposes only limited functionality.  The <em>javax.xml.transform</em>
+  * functionality is implemented as follows: <ul>
+  *
+  * <li>The {@link javax.xml.transform.sax.SAXSource SAXSource} class
+  * just wraps an {@link XMLReader} and {@link InputSource}, while the
+  * {@link javax.xml.transform.sax.SAXResult SAXResult} class is less
+  * functional than a {@link gnu.xml.pipeline.EventConsumer EventConsumer}.
+  * (Notably, it drops all but one declaration from any DTD.)</li>
+  *
+  * <li>The {@link javax.xml.transform.dom.DOMSource DOMSource} class
+  * corresponds to special SAX parsers like {@link DomParser}, and the
+  * {@link javax.xml.transform.dom.DOMResult DOMResult} class corresponds
+  * to a {@link gnu.xml.pipeline.DomConsumer DomConsumer}.</li>
+  *
+  * <li>The {@link javax.xml.transform.stream.StreamSource StreamSource}
+  * class corresponds to a SAX {@link InputSource}, and the
+  * {@link javax.xml.transform.stream.StreamResult StreamResult} class
+  * corresponds to a {@link gnu.xml.pipeline.TextConsumer TextConsumer}.</li>
+  *
+  * </ul>
+  *
+  * <p><em>This implementation is preliminary.</em>
+  *
+  * @see gnu.xml.pipeline.XsltFilter
+  *
+  * @author David Brownell
+  */
+ public class SAXNullTransformerFactory extends SAXTransformerFactory
+ {
+   
+   private ErrorListener	errListener;
+   private URIResolver		uriResolver;
+   
+   /** Default constructor */
+   public SAXNullTransformerFactory () { }
+   
+   //
+   // only has stuff that makes sense with null transforms
+   //
+   
+   /**
+    * Returns true if the requested feature is supported.
+    * All three kinds of input and output are accepted:
+    * XML text, SAX events, and DOM nodes.
+    */
+   public boolean getFeature (String feature)
+   {
+     return SAXTransformerFactory.FEATURE.equals (feature)
+       || SAXResult.FEATURE.equals (feature)
+       || SAXSource.FEATURE.equals (feature)
+       || DOMResult.FEATURE.equals (feature)
+       || DOMSource.FEATURE.equals (feature)
+       || StreamResult.FEATURE.equals (feature)
+       || StreamSource.FEATURE.equals (feature)
+       ;
+   }
+ 
+   public void setFeature(String name, boolean value)
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException(name);
+   }
+ 
+ 
+   /** Throws an exception (no implementation attributes are supported) */
+   public void setAttribute (String key, Object value)
+   {
+     throw new IllegalArgumentException ();
+   }
+ 
+   /** Throws an exception (no implementation attributes are supported) */
+   public Object getAttribute (String key)
+   {
+     throw new IllegalArgumentException ();
+   }
+ 
+   /** (not yet implemented) */
+   public Source getAssociatedStylesheet (Source source,
+                                          String media,
+                                          String title,
+                                          String charset)
+     throws TransformerConfigurationException
+   {
+     // parse, and find the appropriate xsl-stylesheet PI contents
+     throw new IllegalArgumentException ();
+   }
+ 
+   public Transformer newTransformer ()
+     throws TransformerConfigurationException
+   {
+     return new NullTransformer ();
+   }
+ 
+   /**
+    * Returns a TransformerHandler that knows how to generate output
+    * in all three standard formats.  Output text is generated using
+    * {@link XMLWriter}, and the GNU implementation of
+    * {@link DomDocument DOM} is used.
+    *
+    * @see SAXResult
+    * @see StreamResult
+    * @see DOMResult
+    */
+   public TransformerHandler newTransformerHandler ()
+     throws TransformerConfigurationException
+   {
+     NullTransformer	transformer = new NullTransformer ();
+     return transformer.handler;
+   }
+ 
+   //
+   // Stuff that depends on XSLT support, which we don't provide
+   //
+   private static final String		noXSLT = "No XSLT support";
+ 
+   /** Throws an exception (XSLT is not supported). */
+   public Transformer newTransformer (Source stylesheet)
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException (noXSLT);
+   }
+ 
+   /** Throws an exception (XSLT is not supported). */
+   public Templates newTemplates (Source stylesheet)
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException (noXSLT);
+   }
+ 
+   /** Throws an exception (XSLT is not supported). */
+   public TemplatesHandler newTemplatesHandler ()
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException (noXSLT);
+   }
+ 
+   /** Throws an exception (XSLT is not supported). */
+   public TransformerHandler newTransformerHandler (Source stylesheet)
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException (noXSLT);
+   }
+ 
+   /** Throws an exception (XSLT is not supported). */
+   public TransformerHandler newTransformerHandler (Templates stylesheet)
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException (noXSLT);
+   }
+ 
+   /** Throws an exception (XSLT is not supported). */
+   public XMLFilter newXMLFilter (Source stylesheet)
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException (noXSLT);
+   }
+ 
+   /** Throws an exception (XSLT is not supported). */
+   public XMLFilter newXMLFilter (Templates stylesheet)
+     throws TransformerConfigurationException
+   {
+     throw new TransformerConfigurationException (noXSLT);
+   }
+ 
+   /** Returns the value assigned by {@link #setErrorListener}.  */
+   public ErrorListener getErrorListener ()
+   {
+     return errListener;
+   }
+ 
+   /** Assigns a value that would be used when parsing stylesheets */
+   public void setErrorListener (ErrorListener e)
+   {
+     errListener = e;
+   }
+ 
+   /** Returns the value assigned by {@link #setURIResolver}.  */
+   public URIResolver getURIResolver ()
+   {
+     return uriResolver;
+   }
+ 
+   /** Assigns a value that would be used when parsing stylesheets */
+   public void setURIResolver (URIResolver u)
+   {
+     uriResolver = u;
+   }
+ 
+ 
+   //
+   // Helper classes.  These might in theory be subclassed
+   // by an XSLT implementation, if they were exported.
+   //
+ 
+   static class DomTerminus
+     extends DomConsumer
+   {
+ 
+     DomTerminus (DOMResult result)
+       throws SAXException
+     {
+       // won't really throw SAXException
+       super (DomDocument.class);
+       setHandler (new DomHandler (this, result));
+     }
+     
+   }
+ 
+   static class DomHandler
+     extends Consumer.Backdoor
+   {
+   
+     private DOMResult	result;
+     
+     DomHandler (DomConsumer c, DOMResult r)
+       throws SAXException
+     {
+       // won't really throw SAXException
+       super (c);
+       result = r;
+     }
+ 
+     public void endDocument ()
+       throws SAXException
+     {
+       super.endDocument ();
+       result.setNode (getDocument ());
+     }
+     
+   }
+ 
+   private static OutputStream getOutputStream (String uri)
+     throws IOException
+   {
+     // JDK stupidity:  file "protocol does not support output" ... 
+     if (uri.startsWith ("file:"))
+       return new FileOutputStream (uri.substring (5));
+     
+     // Otherwise ...
+     URL		url = new URL (uri);
+     URLConnection	conn = url.openConnection ();
+     
+     conn.setDoOutput (true);
+     return conn.getOutputStream ();
+   }
+   
+ 
+   static class NullHandler
+     extends EventFilter
+     implements TransformerHandler
+   {
+    
+     private String		systemId;
+     private Transformer	transformer;
+     
+     NullHandler (Transformer t)
+     {
+       transformer = t;
+     }
+ 
+     public Transformer getTransformer ()
+     {
+       return transformer;
+     }
+ 
+     public String getSystemId ()
+     {
+       return systemId;
+     }
+ 
+     public void setSystemId (String id)
+     {
+       systemId = id;
+     }
+ 
+     public void setResult (Result result)
+     {
+       if (result.getSystemId () != null)
+         systemId = result.getSystemId ();
+       
+       try
+         {
+           
+           // output to partial SAX event stream?
+           if (result instanceof SAXResult)
+             {
+               SAXResult 	r = (SAXResult) result;
+               
+               setContentHandler (r.getHandler ());
+               setProperty (LEXICAL_HANDLER, r.getLexicalHandler ());
+               // DTD info is filtered out by javax.transform
+               
+               // output to DOM tree?
+             }
+           else if (result instanceof DOMResult)
+             {
+               DomTerminus	out = new DomTerminus ((DOMResult) result);
+ 
+               setContentHandler (out.getContentHandler ());
+               setProperty (LEXICAL_HANDLER,
+                            out.getProperty (LEXICAL_HANDLER));
+               // save DTD-derived info, if any.
+               setDTDHandler (out.getDTDHandler ());
+               setProperty (DECL_HANDLER,
+                            out.getProperty (DECL_HANDLER));
+ 
+               // node is saved into result on endDocument()
+ 
+               // output to (XML) text?
+             }
+           else if (result instanceof StreamResult)
+             {
+               StreamResult	r = (StreamResult) result;
+               XMLWriter		out;
+ 
+               // FIXME:  when do output properties take effect?
+               // encoding, standalone decl, xml/xhtml/... ...
+ 
+               // FIXME:  maybe put nsfix filter up front
+ 
+               try
+                 {
+                   if (r.getWriter () != null)
+                     out = new XMLWriter (r.getWriter ());
+                   else if (r.getOutputStream () != null)
+                     out = new XMLWriter (r.getOutputStream ());
+                   else if (r.getSystemId () != null)
+                     out = new XMLWriter (
+                                          getOutputStream (r.getSystemId ()));
+                   else
+                     throw new IllegalArgumentException (
+                                                         "bad StreamResult");
+                 }
+               catch (IOException e)
+                 {
+                   e.printStackTrace ();
+                   // on jdk 1.4, pass the root cause ...
+                   throw new IllegalArgumentException (e.getMessage ());
+                 }
+ 
+               // out.setExpandingEntities (true);
+               // out.setPrettyPrinting (true);
+               // out.setXhtml (true);
+ 
+               setContentHandler (out);
+               setProperty (LEXICAL_HANDLER, out);
+               // save DTD info, if any; why not?
+               setDTDHandler (out);
+               setProperty (DECL_HANDLER, out);
+             }
+           
+         }
+       catch (SAXException e)
+         {
+           // SAXNotSupportedException or SAXNotRecognizedException:
+           // "can't happen" ... but SAXException for DOM build probs
+           // could happen, so ...
+           // on jdk 1.4, pass the root cause ...
+           throw new IllegalArgumentException (e.getMessage ());
+         }
+     }
+   }
+ 
+   // an interface that adds no value
+   static class LocatorAdapter
+     extends LocatorImpl
+     implements SourceLocator
+   {
+   
+     LocatorAdapter (SAXParseException e)
+     {
+       setSystemId (e.getSystemId ());
+       setPublicId (e.getPublicId ());
+       setLineNumber (e.getLineNumber ());
+       setColumnNumber (e.getColumnNumber ());
+     }
+     
+   }
+ 
+   // another interface that adds no value
+   static class ListenerAdapter
+     implements ErrorHandler
+   {
+     
+     NullTransformer	transformer;
+     
+     ListenerAdapter (NullTransformer t)
+     {
+       transformer = t;
+     }
+     
+     private TransformerException map (SAXParseException e)
+     {
+       return new TransformerException (
+                                        e.getMessage (),
+                                        new LocatorAdapter (e),
+                                        e);
+     }
+ 
+     public void error (SAXParseException e)
+       throws SAXParseException
+     {
+       try
+         {
+           if (transformer.errListener != null)
+             transformer.errListener.error (map (e));
+         }
+       catch (TransformerException ex)
+         {
+           transformer.ex = ex;
+           throw e;
+         }
+     }
+ 
+     public void fatalError (SAXParseException e)
+       throws SAXParseException
+     {
+       try
+         {
+           if (transformer.errListener != null)
+             transformer.errListener.fatalError (map (e));
+           else
+             throw map (e);
+         } catch (TransformerException ex) {
+           transformer.ex = ex;
+           throw e;
+         }
+     }
+ 
+     public void warning (SAXParseException e)
+       throws SAXParseException
+     {
+       try
+         {
+           if (transformer.errListener != null)
+             transformer.errListener.warning (map (e));
+         }
+       catch (TransformerException ex)
+         {
+           transformer.ex = ex;
+           throw e;
+         }
+     }
+   }
+ 
+   static class NullTransformer
+     extends Transformer
+   {
+   
+     private URIResolver		uriResolver;
+     private Properties		props = new Properties ();
+     private Hashtable		params = new Hashtable (7);
+     
+     ErrorListener			errListener = null;
+     TransformerException		ex = null;
+     NullHandler			handler;
+     
+     NullTransformer ()
+     {
+       super ();
+       handler = new NullHandler (this);
+     }
+     
+     public ErrorListener getErrorListener ()
+     {
+       return errListener;
+     }
+     
+     public void setErrorListener (ErrorListener e)
+     {
+       errListener = e;
+     }
+     
+     public URIResolver getURIResolver ()
+     {
+       return uriResolver;
+     }
+     
+     public void setURIResolver (URIResolver u)
+     {
+       uriResolver = u;
+     }
+ 
+     public void setOutputProperties (Properties p)
+     {
+       props = (Properties) p.clone ();
+     }
+     
+     public Properties getOutputProperties ()
+     {
+       return (Properties) props.clone ();
+     }
+ 
+     public void setOutputProperty (String name, String value)
+     {
+       props.setProperty (name, value);
+     }
+     
+     public String getOutputProperty (String name)
+     {
+       return props.getProperty (name);
+     }
+ 
+     public void clearParameters ()
+     {
+       params.clear ();
+     }
+     
+     public void setParameter (String name, Object value)
+     {
+       props.put (name, value);
+     }
+     
+     public Object getParameter (String name)
+     {
+       return props.get (name);
+     }
+ 
+     public void transform (Source in, Result out)
+       throws TransformerException
+     {
+       try
+         {
+           XMLReader		producer;
+           InputSource		input;
+           
+           // Input from DOM?
+           if (in instanceof DOMSource)
+             {
+               DOMSource	source = (DOMSource) in;
+               
+               if (source.getNode () == null)
+                 throw new IllegalArgumentException ("no DOM node");
+               producer = new DomParser (source.getNode ());
+               input = null;
+               
+               // Input from SAX?
+             }
+           else if (in instanceof SAXSource)
+             {
+               SAXSource	source = (SAXSource) in;
+               
+               producer = source.getXMLReader ();
+               if (producer == null)
+                 producer = XMLReaderFactory.createXMLReader ();
+               
+               input = source.getInputSource ();
+               if (input == null)
+                 {
+                   if (source.getSystemId () != null)
+                     input = new InputSource (source.getSystemId ());
+                   else
+                     throw new IllegalArgumentException (
+                                                         "missing SAX input");
+                 }
+               
+               // Input from a stream or something?
+             }
+           else
+             {
+               producer = XMLReaderFactory.createXMLReader ();
+               input = SAXSource.sourceToInputSource (in);
+               if (input == null)
+                 throw new IllegalArgumentException ("missing input");
+             }
+           
+           // preserve original namespace prefixes
+           try
+             {
+               producer.setFeature(EventFilter.FEATURE_URI +
+                                   "namespace-prefixes",
+                                   true);
+             }
+           catch (Exception e)
+             {
+               /* ignore */
+               // FIXME if we couldn't, "NsFix" stage before the output ..
+             }
+           
+           // arrange the output
+           handler.setResult (out);
+           EventFilter.bind (producer, handler);
+           
+           // then parse ... single element pipeline
+           producer.parse (input);
+           
+         }
+       catch (IOException e)
+         {
+           throw new TransformerException ("transform failed", e);
+           
+         }
+       catch (SAXException e)
+         {
+           if (ex == null && ex.getCause () == e)
+             throw ex;
+           else
+             throw new TransformerException ("transform failed", e);
+           
+         }
+       finally
+         {
+           ex = null;
+         }
+     }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/util/XCat.java gcc-4.1.0/libjava/classpath/gnu/xml/util/XCat.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/util/XCat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/util/XCat.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1609 ----
+ /* XCat.java -- 
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.xml.util;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.net.URL;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.StringTokenizer;
+ import java.util.Stack;
+ import java.util.Vector;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXParseException;
+ import org.xml.sax.XMLReader;
+ 
+ import org.xml.sax.ext.DefaultHandler2;
+ import org.xml.sax.ext.EntityResolver2;
+ 
+ import org.xml.sax.helpers.XMLReaderFactory;
+ 
+ /**
+  * Packages <a href=
+     "http://www.oasis-open.org/committees/entity/spec-2001-08-06.html"
+     >OASIS XML Catalogs</a>,
+  * primarily for entity resolution by parsers.
+  * That specification defines an XML syntax for mappings between
+  * identifiers declared in DTDs (particularly PUBLIC identifiers) and
+  * locations.  SAX has always supported such mappings, but conventions for
+  * an XML file syntax to maintain them have previously been lacking.
+  *
+  * <p> This has three main operational modes.  The primary intended mode is
+  * to create a resolver, then preloading it with one or more site-standard
+  * catalogs before using it with one or more SAX parsers: <pre>
+  *	XCat	catalog = new XCat ();
+  *	catalog.setErrorHandler (diagnosticErrorHandler);
+  *	catalog.loadCatalog ("file:/local/catalogs/catalog.cat");
+  *	catalog.loadCatalog ("http://shared/catalog.cat");
+  *	...
+  *	catalog.disableLoading ();
+  *	parser1.setEntityResolver (catalog);
+  *	parser2.setEntityResolver (catalog);
+  *	...</pre>
+  *
+  * <p>A second mode is to arrange that your application uses instances of
+  * this class as its entity resolver, and automatically loads catalogs
+  * referenced by <em>&lt;?oasis-xml-catalog...?&gt;</em> processing
+  * instructions found before the DTD in documents it parses.
+  * It would then discard the resolver after each parse.
+  *
+  * <p> A third mode applies catalogs in contexts other than entity
+  * resolution for parsers.
+  * The {@link #resolveURI resolveURI()} method supports resolving URIs
+  * stored in XML application data, rather than inside DTDs.
+  * Catalogs would be loaded as shown above, and the catalog could
+  * be used concurrently for parser entity resolution and for
+  * application URI resolution.
+  * </p>
+  *
+  * <center><hr width='70%'></center>
+  *
+  * <p>Errors in catalogs implicitly loaded (during resolution) are ignored
+  * beyond being reported through any <em>ErrorHandler</em> assigned using
+  * {@link #setErrorHandler setErrorHandler()}.  SAX exceptions
+  * thrown from such a handler won't abort resolution, although throwing a
+  * <em>RuntimeException</em> or <em>Error</em> will normally abort both
+  * resolution and parsing.  Useful diagnostic information is available to
+  * any <em>ErrorHandler</em> used to report problems, or from any exception
+  * thrown from an explicit {@link #loadCatalog loadCatalog()} invocation.
+  * Applications can use that information as troubleshooting aids.
+  *
+  * <p>While this class requires <em>SAX2 Extensions 1.1</em> classes in
+  * its class path, basic functionality does not require using a SAX2
+  * parser that supports the extended entity resolution functionality.
+  * See the original SAX1
+  * {@link #resolveEntity(java.lang.String,java.lang.String) resolveEntity()}
+  * method for a list of restrictions which apply when it is used with
+  * older SAX parsers.
+  *
+  * @see EntityResolver2
+  *
+  * @author David Brownell
+  */
+ public class XCat implements EntityResolver2
+ {
+     private Catalog		catalogs [];
+     private boolean		usingPublic = true;
+     private boolean		loadingPermitted = true;
+     private boolean		unified = true;
+     private String		parserClass;
+     private ErrorHandler	errorHandler;
+ 
+     // private EntityResolver	next;	// chain to next if we fail...
+ 
+     //
+     // NOTE:  This is a straightforward implementation, and if
+     // there are lots of "nextCatalog" or "delegate*" entries
+     // in use, two tweaks would be worth considering:
+     //
+     //	- Centralize some sort of cache (key by URI) for individual
+     //	  resolvers.  That'd avoid multiple copies of a given catalog.
+     //
+     //	- Have resolution track what catalogs (+modes) have been
+     //	  searched.  This would support loop detection.
+     //
+ 
+ 
+     /**
+      * Initializes without preloading a catalog.
+      * This API is convenient when you may want to arrange that catalogs
+      * are automatically loaded when explicitly referenced in documents,
+      * using the <em>oasis-xml-catalog</em> processing instruction.
+      * In such cases you won't usually be able to preload catalogs.
+      */
+     public XCat () { }
+ 
+     /**
+      * Initializes, and preloads a catalog using the default SAX parser.
+      * This API is convenient when you operate with one or more standard
+      * catalogs.
+      *
+      * <p> This just delegates to {@link #loadCatalog loadCatalog()};
+      * see it for exception information.
+      *
+      * @param uri absolute URI for the catalog file.
+      */
+     public XCat (String uri)
+     throws SAXException, IOException
+ 	{ loadCatalog (uri); }
+ 
+ 
+     /**
+      * Loads an OASIS XML Catalog.
+      * It is appended to the list of currently active catalogs, or
+      * reloaded if a catalog with the same URI was already loaded.
+      * Callers have control over what parser is used, how catalog parsing
+      * errors are reported, and whether URIs will be resolved consistently.
+      *
+      * <p> The OASIS specification says that errors detected when loading
+      * catalogs "must recover by ignoring the catalog entry file that
+      * failed, and proceeding."  In this API, that action can be the
+      * responsibility of applications, when they explicitly load any
+      * catalog using this method.
+      *
+      * <p>Note that catalogs referenced by this one will not be loaded
+      * at this time.  Catalogs referenced through <em>nextCatalog</em>
+      * or <em>delegate*</em> elements are normally loaded only if needed. 
+      *
+      * @see #setErrorHandler
+      * @see #setParserClass
+      * @see #setUnified
+      *
+      * @param uri absolute URI for the catalog file.
+      *
+      * @exception IOException As thrown by the parser, typically to
+      *	indicate problems reading data from that URI.
+      * @exception SAXException As thrown by the parser, typically to
+      *	indicate problems parsing data from that URI.  It may also
+      *  be thrown if the parser doesn't support necessary handlers. 
+      * @exception IllegalStateException When attempting to load a
+      *	catalog after loading has been {@link #disableLoading disabled},
+      *	such as after any entity or URI lookup has been performed.
+      */
+     public synchronized void loadCatalog (String uri)
+     throws SAXException, IOException
+     {
+ 	Catalog		catalog;
+ 	int		index = -1;
+ 
+ 	if (!loadingPermitted)
+ 	    throw new IllegalStateException ();
+ 	
+ 	uri = normalizeURI (uri);
+ 	if (catalogs != null) {
+ 	    // maybe just reload
+ 	    for (index = 0; index < catalogs.length; index++)
+ 		if (uri.equals (catalogs [index].catalogURI))
+ 		    break;
+ 	}
+ 	catalog = loadCatalog (parserClass, errorHandler, uri, unified);
+ 
+ 	// add to list of catalogs
+ 	if (catalogs == null) {
+ 	    index = 0;
+ 	    catalogs = new Catalog [1];
+ 	} else if (index == catalogs.length) {
+ 	    Catalog		tmp [];
+ 
+ 	    tmp = new Catalog [index + 1];
+ 	    System.arraycopy (catalogs, 0, tmp, 0, index);
+ 	    catalogs = tmp;
+ 	}
+ 	catalogs [index] = catalog;
+     }
+ 
+ 
+     /**
+      * "New Style" external entity resolution for parsers.
+      * Calls to this method prevent explicit loading of additional catalogs
+      * using {@link #loadCatalog loadCatalog()}.
+      *
+      * <p>This supports the full core catalog functionality for locating
+      * (and relocating) parsed entities that have been declared in a
+      * document's DTD.
+      *
+      * @param name Entity name, such as "dudley", "%nell", or "[dtd]".
+      * @param publicId Either a normalized public ID, or null.
+      * @param baseURI Absolute base URI associated with systemId.
+      * @param systemId URI found in entity declaration (may be
+      *	relative to baseURI).
+      *
+      * @return Input source for accessing the external entity, or null
+      *	if no mapping was found.  The input source may have opened
+      *	the stream, and will have a fully resolved URI.
+      *
+      * @see #getExternalSubset
+      */
+     public InputSource resolveEntity (
+ 	String name,		// UNUSED ... systemId is always non-null
+ 	String publicId,
+ 	String baseURI,		// UNUSED ... it just lets sysId be relative
+ 	String systemId
+     ) throws SAXException, IOException
+     {
+ 	if (loadingPermitted)
+ 	    disableLoading ();
+ 
+ 	try {
+ 	    // steps as found in OASIS XML catalog spec 7.1.2
+ 	    // steps 1, 8 involve looping over the list of catalogs
+ 	    for (int i = 0; i < catalogs.length; i++) {
+ 		InputSource	retval;
+ 		retval = catalogs [i].resolve (usingPublic, publicId, systemId);
+ 		if (retval != null)
+ 		    return retval;;
+ 	    }
+ 	} catch (DoneDelegation x) {
+ 	    // done!
+ 	}
+ 	// step 9 involves returning "no match" 
+ 	return null;
+     }
+ 
+ 
+     /**
+      * "New Style" parser callback to add an external subset.
+      * For documents that don't include an external subset, this may
+      * return one according to <em>doctype</em> catalog entries.
+      * (This functionality is not a core part of the OASIS XML Catalog
+      * specification, though it's presented in an appendix.)
+      * If no such entry is defined, this returns null to indicate that
+      * this document will not be modified to include such a subset.
+      * Calls to this method prevent explicit loading of additional catalogs
+      * using {@link #loadCatalog loadCatalog()}.
+      *
+      * <p><em>Warning:</em> That catalog functionality can be dangerous.
+      * It can provide definitions of general entities, and thereby mask
+      * certain well formedess errors.
+      *
+      * @param name Name of the document element, either as declared in
+      *	a DOCTYPE declaration or as observed in the text.
+      * @param baseURI Document's base URI (absolute).
+      *
+      * @return Input source for accessing the external subset, or null
+      *	if no mapping was found.  The input source may have opened
+      *	the stream, and will have a fully resolved URI.
+      */
+     public InputSource getExternalSubset (String name, String baseURI)
+     throws SAXException, IOException
+     {
+ 	if (loadingPermitted)
+ 	    disableLoading ();
+ 	try {
+ 	    for (int i = 0; i < catalogs.length; i++) {
+ 		InputSource retval = catalogs [i].getExternalSubset (name);
+ 		if (retval != null)
+ 		    return retval;
+ 	    }
+ 	} catch (DoneDelegation x) {
+ 	    // done!
+ 	}
+ 	return null;
+     }
+ 
+ 
+     /**
+      * "Old Style" external entity resolution for parsers.
+      * This API provides only core functionality.
+      * Calls to this method prevent explicit loading of additional catalogs
+      * using {@link #loadCatalog loadCatalog()}.
+      *
+      * <p>The functional limitations of this interface include:</p><ul>
+      *
+      *	<li>Since system IDs will be absolutized before the resolver
+      *	sees them, matching against relative URIs won't work.
+      *	This may affect <em>system</em>, <em>rewriteSystem</em>,
+      *	and <em>delegateSystem</em> catalog entries.
+      *
+      *	<li>Because of that absolutization, documents declaring entities
+      *	with system IDs using URI schemes that the JVM does not recognize
+      *	may be unparsable.  URI schemes such as <em>file:/</em>,
+      *	<em>http://</em>, <em>https://</em>, and <em>ftp://</em>
+      *	will usually work reliably.
+      *
+      *	<li>Because missing external subsets can't be provided, the
+      *	<em>doctype</em> catalog entries will be ignored.
+      *	(The {@link #getExternalSubset getExternalSubset()} method is
+      *	a "New Style" resolution option.)
+      *
+      *	</ul>
+      *
+      * <p>Applications can tell whether this limited functionality will be
+      * used: if the feature flag associated with the {@link EntityResolver2}
+      * interface is not <em>true</em>, the limitations apply.  Applications
+      * can't usually know whether a given document and catalog will trigger
+      * those limitations.  The issue can only be bypassed by operational
+      * procedures such as not using catalogs or documents which involve
+      * those features.
+      *
+      * @param publicId Either a normalized public ID, or null
+      * @param systemId Always an absolute URI.
+      *
+      * @return Input source for accessing the external entity, or null
+      *	if no mapping was found.  The input source may have opened
+      *	the stream, and will have a fully resolved URI.
+      */
+     final public InputSource resolveEntity (String publicId, String systemId)
+     throws SAXException, IOException
+     {
+ 	return resolveEntity (null, publicId, null, systemId);
+     }
+ 
+ 
+     /**
+      * Resolves a URI reference that's not defined to the DTD.
+      * This is intended for use with URIs found in document text, such as
+      * <em>xml-stylesheet</em> processing instructions and in attribute
+      * values, where they are not recognized as URIs by XML parsers.
+      * Calls to this method prevent explicit loading of additional catalogs
+      * using {@link #loadCatalog loadCatalog()}.
+      *
+      * <p>This functionality is supported by the OASIS XML Catalog
+      * specification, but will never be invoked by an XML parser.
+      * It corresponds closely to functionality for mapping system
+      * identifiers for entities declared in DTDs; closely enough that
+      * this implementation's default behavior is that they be
+      * identical, to minimize potential confusion.
+      *
+      * <p>This method could be useful when implementing the
+      * {@link javax.xml.transform.URIResolver} interface, wrapping the
+      * input source in a {@link javax.xml.transform.sax.SAXSource}.
+      *
+      * @see #isUnified
+      * @see #setUnified
+      *
+      * @param baseURI The relevant base URI as specified by the XML Base
+      *	specification.  This recognizes <em>xml:base</em> attributes
+      *	as overriding the actual (physical) base URI.
+      * @param uri Either an absolute URI, or one relative to baseURI
+      *
+      * @return Input source for accessing the mapped URI, or null
+      *	if no mapping was found.  The input source may have opened
+      *	the stream, and will have a fully resolved URI.
+      */
+     public InputSource resolveURI (String baseURI, String uri)
+     throws SAXException, IOException
+     {
+ 	if (loadingPermitted)
+ 	    disableLoading ();
+ 
+ 	// NOTE:  baseURI isn't used here, but caller MUST have it,
+ 	// and heuristics _might_ use it in the future ... plus,
+ 	// it's symmetric with resolveEntity ().
+ 
+ 	// steps 1, 6 involve looping
+ 	try {
+ 	    for (int i = 0; i < catalogs.length; i++) {
+ 		InputSource	tmp = catalogs [i].resolveURI (uri);
+ 		if (tmp != null)
+ 		    return tmp;
+ 	    }
+ 	} catch (DoneDelegation x) {
+ 	    // done
+ 	}
+ 	// step 7 reports no match
+ 	return null;
+     }
+ 
+ 
+     /** 
+      * Records that catalog loading is no longer permitted.
+      * Loading is automatically disabled when lookups are performed,
+      * and should be manually disabled when <em>startDTD()</em> (or
+      * any other DTD declaration callback) is invoked, or at the latest
+      * when the document root element is seen.
+      */
+     public synchronized void disableLoading ()
+     {
+ 	// NOTE:  this method and loadCatalog() are synchronized
+ 	// so that it's impossible to load (top level) catalogs
+ 	// after lookups start.  Likewise, deferred loading is also
+ 	// synchronized (for "next" and delegated catalogs) to
+ 	// ensure that parsers can share resolvers.
+ 	loadingPermitted = false;
+     }
+ 
+ 
+     /**
+      * Returns the error handler used to report catalog errors.
+      * Null is returned if the parser's default error handling
+      * will be used.
+      *
+      * @see #setErrorHandler
+      */
+     public ErrorHandler getErrorHandler ()
+ 	{ return errorHandler; }
+ 
+     /**
+      * Assigns the error handler used to report catalog errors.
+      * These errors may come either from the SAX2 parser or
+      * from the catalog parsing code driven by the parser. 
+      *
+      * <p> If you're sharing the resolver between parsers, don't
+      * change this once lookups have begun.
+      *
+      * @see #getErrorHandler
+      *
+      * @param parser The error handler, or null saying to use the default
+      *	(no diagnostics, and only fatal errors terminate loading).
+      */
+     public void setErrorHandler (ErrorHandler handler)
+ 	{ errorHandler = handler; }
+ 
+ 
+     /**
+      * Returns the name of the SAX2 parser class used to parse catalogs.
+      * Null is returned if the system default is used.
+      * @see #setParserClass
+      */
+     public String getParserClass ()
+ 	{ return parserClass; }
+ 
+     /**
+      * Names the SAX2 parser class used to parse catalogs.
+      *
+      * <p> If you're sharing the resolver between parsers, don't change
+      * this once lookups have begun.
+      *
+      * <p> Note that in order to properly support the <em>xml:base</em>
+      * attribute and relative URI resolution, the SAX parser used to parse
+      * the catalog must provide a {@link Locator} and support the optional
+      * declaration and lexical handlers.
+      *
+      * @see #getParserClass
+      *
+      * @param parser The parser class name, or null saying to use the
+      *	system default SAX2 parser.
+      */
+     public void setParserClass (String parser)
+ 	{ parserClass = parser; }
+ 
+ 
+     /**
+      * Returns true (the default) if all methods resolve
+      * a given URI in the same way.
+      * Returns false if calls resolving URIs as entities (such as
+      * {@link #resolveEntity resolveEntity()}) use different catalog entries
+      * than those resolving them as URIs ({@link #resolveURI resolveURI()}),
+      * which will generally produce different results.
+      *
+      * <p>The OASIS XML Catalog specification defines two related schemes
+      * to map URIs "as URIs" or "as system IDs".
+      * URIs use <em>uri</em>, <em>rewriteURI</em>, and <em>delegateURI</em>
+      * elements.  System IDs do the same things with <em>systemId</em>,
+      * <em>rewriteSystemId</em>, and <em>delegateSystemId</em>.
+      * It's confusing and error prone to maintain two parallel copies of
+      * such data.  Accordingly, this class makes that behavior optional.
+      * The <em>unified</em> interpretation of URI mappings is preferred,
+      * since it prevents surprises where one URI gets mapped to different
+      * contents depending on whether the reference happens to have come
+      * from a DTD (or not).
+      *
+      * @see #setUnified
+      */
+     public boolean isUnified ()
+ 	{ return unified; }
+ 
+     /**
+      * Assigns the value of the flag returned by {@link #isUnified}.
+      * Set it to false to be strictly conformant with the OASIS XML Catalog
+      * specification.  Set it to true to make all mappings for a given URI
+      * give the same result, regardless of the reason for the mapping.
+      *
+      * <p>Don't change this once you've loaded the first catalog.
+      *
+      * @param value new flag setting
+      */
+     public void setUnified (boolean value)
+ 	{ unified = value; }
+ 
+ 
+     /**
+      * Returns true (the default) if a catalog's public identifier
+      * mappings will be used.
+      * When false is returned, such mappings are ignored except when
+      * system IDs are discarded, such as for
+      * entities using the <em>urn:publicid:</em> URI scheme in their
+      * system identifiers.  (See RFC 3151 for information about that
+      * URI scheme.  Using it in system identifiers may not work well
+      * with many SAX parsers unless the <em>resolve-dtd-uris</em>
+      * feature flag is set to false.)
+      * @see #setUsingPublic
+      */
+     public boolean isUsingPublic ()
+ 	{ return usingPublic; }
+ 
+     /**
+      * Specifies which catalog search mode is used.
+      * By default, public identifier mappings are able to override system
+      * identifiers when both are available.
+      * Applications may choose to ignore public
+      * identifier mappings in such cases, so that system identifiers
+      * declared in DTDs will only be overridden by an explicit catalog
+      * match for that system ID.
+      *
+      * <p> If you're sharing the resolver between parsers, don't
+      * change this once lookups have begun.
+      * @see #isUsingPublic
+      *
+      * @param value true to always use public identifier mappings,
+      *	false to only use them for system ids using the <em>urn:publicid:</em>
+      *	URI scheme.
+      */
+     public void setUsingPublic (boolean value)
+ 	{ usingPublic = value; }
+ 
+ 
+ 
+     // hmm, what's this do? :)
+     private static Catalog loadCatalog (
+ 	String		parserClass,
+ 	ErrorHandler	eh,
+ 	String		uri,
+ 	boolean		unified
+     ) throws SAXException, IOException
+     {
+ 	XMLReader	parser;
+ 	Loader		loader;
+ 	boolean		doesIntern = false;
+ 
+ 	if (parserClass == null)
+ 	    parser = XMLReaderFactory.createXMLReader ();
+ 	else
+ 	    parser = XMLReaderFactory.createXMLReader (parserClass);
+ 	if (eh != null)
+ 	    parser.setErrorHandler (eh);
+ 	// resolve-dtd-entities is at default value (unrecognized == true)
+ 
+ 	try {
+ 	    doesIntern = parser.getFeature (
+ 		"http://xml.org/sax/features/string-interning");
+ 	} catch (SAXNotRecognizedException e) { }
+ 
+ 	loader = new Loader (doesIntern, eh, unified);
+ 	loader.cat.parserClass = parserClass;
+ 	loader.cat.catalogURI = uri;
+ 
+ 	parser.setContentHandler (loader);
+ 	parser.setProperty (
+ 	    "http://xml.org/sax/properties/declaration-handler",
+ 	    loader);
+ 	parser.setProperty (
+ 	    "http://xml.org/sax/properties/lexical-handler",
+ 	    loader);
+ 	parser.parse (uri);
+ 
+ 	return loader.cat;
+     }
+ 
+     // perform one or both the normalizations for public ids
+     private static String normalizePublicId (boolean full, String publicId)
+     {
+ 	if (publicId.startsWith ("urn:publicid:")) {
+ 	    StringBuffer	buf = new StringBuffer ();
+ 	    char		chars [] = publicId.toCharArray ();
+ boolean hasbug = false;
+ 
+ 	    for (int i = 13; i < chars.length; i++) {
+ 		switch (chars [i]) {
+ 		case '+': 	buf.append (' '); continue;
+ 		case ':': 	buf.append ("//"); continue;
+ 		case ';': 	buf.append ("::"); continue;
+ 		case '%':
+ // FIXME unhex that char!  meanwhile, warn and fallthrough ...
+ 		    hasbug = true;
+ 		default:	buf.append (chars [i]); continue;
+ 		}
+ 	    }
+ 	    publicId = buf.toString ();
+ if (hasbug)
+ System.err.println ("nyet unhexing public id: " + publicId);
+ 	    full = true;
+ 	}
+ 
+ 	// SAX parsers do everything except that URN mapping, but
+ 	// we can't trust other sources to normalize correctly
+ 	if (full) {
+ 	    StringTokenizer	tokens;
+ 	    String		token;
+ 
+ 	    tokens = new StringTokenizer (publicId, " \r\n");
+ 	    publicId = null;
+ 	    while (tokens.hasMoreTokens ()) {
+ 		if (publicId == null)
+ 		    publicId = tokens.nextToken ();
+ 		else
+ 		    publicId += " " + tokens.nextToken ();
+ 	    }
+ 	}
+ 	return publicId;
+     }
+ 
+     private static boolean isUriExcluded (int c)
+ 	{ return c <= 0x20 || c >= 0x7f || "\"<>^`{|}".indexOf (c) != -1; }
+ 
+     private static int hexNibble (int c)
+     {
+ 	if (c < 10)
+ 	    return c + '0';
+ 	return ('a' - 10) + c;
+     }
+ 
+     // handles URIs with "excluded" characters
+     private static String normalizeURI (String systemId)
+     {
+ 	int			length = systemId.length ();
+ 
+ 	for (int i = 0; i < length; i++) {
+ 	    char	c = systemId.charAt (i);
+ 
+ 	    // escape non-ASCII plus "excluded" characters
+ 	    if (isUriExcluded (c)) {
+ 		byte			buf [];
+ 		ByteArrayOutputStream	out;
+ 		int				b;
+ 
+ 		// a JVM that doesn't know UTF8 and 8859_1 is unusable!
+ 		try {
+ 		    buf = systemId.getBytes ("UTF8");
+ 		    out = new ByteArrayOutputStream (buf.length + 10);
+ 
+ 		    for (i = 0; i < buf.length; i++) {
+ 			b = buf [i] & 0x0ff;
+ 			if (isUriExcluded (b)) {
+ 			    out.write ((int) '%');
+ 			    out.write (hexNibble (b >> 4));
+ 			    out.write (hexNibble (b & 0x0f));
+ 			} else
+ 			    out.write (b);
+ 		    }
+ 		    return out.toString ("8859_1");
+ 		} catch (IOException e) {
+ 		    throw new RuntimeException (
+ 			"can't normalize URI: " + e.getMessage ());
+ 		}
+ 	    }
+ 	}
+ 	return systemId;
+     }
+ 
+     // thrown to mark authoritative end of a search
+     private static class DoneDelegation extends SAXException
+     {
+ 	DoneDelegation () { }
+     }
+ 
+ 
+     /**
+      * Represents a OASIS XML Catalog, and encapsulates much of
+      * the catalog functionality.
+      */
+     private static class Catalog
+     {
+ 	// loading infrastructure
+ 	String		catalogURI;
+ 	ErrorHandler	eh;
+ 	boolean		unified;
+ 	String		parserClass;
+ 
+ 	// catalog data
+ 	boolean		hasPreference;
+ 	boolean		usingPublic;
+ 
+ 	Hashtable	publicIds;
+ 	Hashtable	publicDelegations;
+ 
+ 	Hashtable	systemIds;
+ 	Hashtable	systemRewrites;
+ 	Hashtable	systemDelegations;
+ 
+ 	Hashtable	uris;
+ 	Hashtable	uriRewrites;
+ 	Hashtable	uriDelegations;
+ 
+ 	Hashtable	doctypes;
+ 
+ 	Vector		next;
+ 
+ 	// nonpublic!
+ 	Catalog () { }
+ 
+ 	
+ 	// steps as found in OASIS XML catalog spec 7.1.2
+ 	private InputSource locatePublicId (String publicId)
+ 	throws SAXException, IOException
+ 	{
+ 	    // 5. return (first) 'public' entry
+ 	    if (publicIds != null) {
+ 		String	retval = (String) publicIds.get (publicId);
+ 		if (retval != null) {
+ 		    // IF the URI is accessible ...
+ 		    return new InputSource (retval);
+ 		}
+ 	    }
+ 
+ 	    // 6. return delegatePublic catalog match [complex]
+ 	    if (publicDelegations != null)
+ 		return checkDelegations (publicDelegations, publicId,
+ 				publicId, null);
+ 	    
+ 	    return null;
+ 	}
+ 
+ 	// steps as found in OASIS XML catalog spec 7.1.2 or 7.2.2
+ 	private InputSource mapURI (
+ 	    String	uri,
+ 	    Hashtable	ids,
+ 	    Hashtable	rewrites,
+ 	    Hashtable	delegations
+ 	) throws SAXException, IOException
+ 	{
+ 	    // 7.1.2: 2. return (first) 'system' entry
+ 	    // 7.2.2: 2. return (first) 'uri' entry
+ 	    if (ids != null) {
+ 		String	retval = (String) ids.get (uri);
+ 		if (retval != null) {
+ 		    // IF the URI is accessible ...
+ 		    return new InputSource (retval);
+ 		}
+ 	    }
+ 
+ 	    // 7.1.2: 3. return 'rewriteSystem' entries
+ 	    // 7.2.2: 3. return 'rewriteURI' entries
+ 	    if (rewrites != null) {
+ 		String	prefix = null;
+ 		String	replace = null;
+ 		int	prefixLen = -1;
+ 
+ 		for (Enumeration e = rewrites.keys ();
+ 			e.hasMoreElements ();
+ 			/* NOP */) {
+ 		    String	temp = (String) e.nextElement ();
+ 		    int		len = -1;
+ 
+ 		    if (!uri.startsWith (temp))
+ 			continue;
+ 		    if (prefix != null
+ 			    && (len = temp.length ()) < prefixLen)
+ 			continue;
+ 		    prefix = temp;
+ 		    prefixLen = len;
+ 		    replace = (String) rewrites.get (temp);
+ 		}
+ 		if (prefix != null) {
+ 		    StringBuffer	buf = new StringBuffer (replace);
+ 		    buf.append (uri.substring (prefixLen));
+ 		    // IF the URI is accessible ...
+ 		    return new InputSource (buf.toString ());
+ 		}
+ 	    }
+ 
+ 	    // 7.1.2: 4. return 'delegateSystem' catalog match [complex]
+ 	    // 7.2.2: 4. return 'delegateURI' catalog match [complex]
+ 	    if (delegations != null)
+ 		return checkDelegations (delegations, uri, null, uri);
+ 
+ 	    return null;
+ 	}
+ 
+ 
+ 	/**
+ 	 * Returns a URI for an external entity.
+ 	 */
+ 	public InputSource resolve (
+ 	    boolean	usingPublic,
+ 	    String	publicId,
+ 	    String	systemId
+ 	) throws SAXException, IOException
+ 	{
+ 	    boolean	preferSystem;
+ 	    InputSource	retval;
+ 
+ 	    if (hasPreference)
+ 		preferSystem = !this.usingPublic;
+ 	    else
+ 		preferSystem = !usingPublic;
+ 	    
+ 	    if (publicId != null)
+ 		publicId = normalizePublicId (false, publicId);
+ 
+ 	    // behavior here matches section 7.1.1 of the oasis spec
+ 	    if (systemId != null) {
+ 		if (systemId.startsWith ("urn:publicid:")) {
+ 		    String	temp = normalizePublicId (true, systemId);
+ 		    if (publicId == null) {
+ 			publicId = temp;
+ 			systemId = null;
+ 		    } else if (!publicId.equals (temp)) {
+ 			// error; ok to recover by:
+ 			systemId = null;
+ 		    }
+ 		} else
+ 		    systemId = normalizeURI (systemId);
+ 	    }
+ 
+ 	    if (systemId == null && publicId == null)
+ 		return null;
+ 
+ 	    if (systemId != null) {
+ 		retval = mapURI (systemId, systemIds, systemRewrites,
+ 					systemDelegations);
+ 		if (retval != null) {
+ 		    retval.setPublicId (publicId);
+ 		    return retval;
+ 		}
+ 	    }
+ 
+ 	    if (publicId != null
+ 		    && !(systemId != null && preferSystem)) {
+ 		retval = locatePublicId (publicId);
+ 		if (retval != null) {
+ 		    retval.setPublicId (publicId);
+ 		    return retval;
+ 		}
+ 	    }
+ 
+ 	    // 7. apply nextCatalog entries
+ 	    if (next != null) {
+ 		int	length = next.size ();
+ 		for (int i = 0; i < length; i++) {
+ 		    Catalog	n = getNext (i);
+ 		    retval = n.resolve (usingPublic, publicId, systemId);
+ 		    if (retval != null)
+ 			return retval;
+ 		}
+ 	    }
+ 
+ 	    return null;
+ 	}
+ 
+ 	/**
+ 	 * Maps one URI into another, for resources that are not defined
+ 	 * using XML external entity or notation syntax.
+ 	 */
+ 	public InputSource resolveURI (String uri)
+ 	throws SAXException, IOException
+ 	{
+ 	    if (uri.startsWith ("urn:publicid:"))
+ 		return resolve (true, normalizePublicId (true, uri), null);
+ 
+ 	    InputSource	retval;
+ 
+ 	    uri = normalizeURI (uri);
+ 
+ 	    // 7.2.2 steps 2-4
+ 	    retval = mapURI (uri, uris, uriRewrites, uriDelegations);
+ 	    if (retval != null)
+ 		return retval;
+ 
+ 	    // 7.2.2 step 5. apply nextCatalog entries
+ 	    if (next != null) {
+ 		int	length = next.size ();
+ 		for (int i = 0; i < length; i++) {
+ 		    Catalog	n = getNext (i);
+ 		    retval = n.resolveURI (uri);
+ 		    if (retval != null)
+ 			return retval;
+ 		}
+ 	    }
+ 
+ 	    return null;
+ 	}
+ 
+ 
+ 	/**
+ 	 * Finds the external subset associated with a given root element.
+ 	 */
+ 	public InputSource getExternalSubset (String name)
+ 	throws SAXException, IOException
+ 	{
+ 	    if (doctypes != null) {
+ 		String	value = (String) doctypes.get (name);
+ 		if (value != null) {
+ 		    // IF the URI is accessible ...
+ 		    return new InputSource (value);
+ 		}
+ 	    }
+ 	    if (next != null) {
+ 		int	length = next.size ();
+ 		for (int i = 0; i < length; i++) {
+ 		    Catalog	n = getNext (i);
+ 		    if (n == null)
+ 			continue;
+ 		    InputSource	retval = n.getExternalSubset (name);
+ 		    if (retval != null)
+ 			return retval;
+ 		}
+ 	    }
+ 	    return null;
+ 	}
+ 
+ 	private synchronized Catalog getNext (int i)
+ 	throws SAXException, IOException
+ 	{
+ 	    Object	obj;
+ 
+ 	    if (next == null || i < 0 || i >= next.size ())
+ 		return null;
+ 	    obj = next.elementAt (i);
+ 	    if (obj instanceof Catalog)
+ 		return (Catalog) obj;
+ 	    
+ 	    // ok, we deferred reading that catalog till now.
+ 	    // load and cache it.
+ 	    Catalog	cat = null;
+ 
+ 	    try {
+ 		cat = loadCatalog (parserClass, eh, (String) obj, unified);
+ 		next.setElementAt (cat, i);
+ 	    } catch (SAXException e) {
+ 		// must fail quietly, says the OASIS spec
+ 	    } catch (IOException e) {
+ 		// same applies here
+ 	    }
+ 	    return cat;
+ 	}
+ 
+ 	private InputSource checkDelegations (
+ 	    Hashtable	delegations,
+ 	    String	id,
+ 	    String	publicId,	// only one of public/system
+ 	    String	systemId	// will be non-null...
+ 	) throws SAXException, IOException
+ 	{
+ 	    Vector	matches = null;
+ 	    int		length = 0;
+ 
+ 	    // first, see if any prefixes match.
+ 	    for (Enumeration e = delegations.keys ();
+ 		    e.hasMoreElements ();
+ 		    /* NOP */) {
+ 		String	prefix = (String) e.nextElement ();
+ 
+ 		if (!id.startsWith (prefix))
+ 		    continue;
+ 		if (matches == null)
+ 		    matches = new Vector ();
+ 		
+ 		// maintain in longer->shorter sorted order
+ 		// NOTE:  assumes not many matches will fire!
+ 		int	index;
+ 
+ 		for (index = 0; index < length; index++) {
+ 		    String	temp = (String) matches.elementAt (index);
+ 		    if (prefix.length () > temp.length ()) {
+ 			matches.insertElementAt (prefix, index);
+ 			break;
+ 		    }
+ 		}
+ 		if (index == length)
+ 		    matches.addElement (prefix);
+ 		length++;
+ 	    }
+ 	    if (matches == null)
+ 		return null;
+ 
+ 	    // now we know the list of catalogs to replace our "top level"
+ 	    // list ... we use it here, rather than somehow going back and
+ 	    // restarting, since this helps avoid reading most catalogs.
+ 	    // this assumes stackspace won't be a problem.
+ 	    for (int i = 0; i < length; i++) {
+ 		Catalog		catalog = null;
+ 		InputSource	result;
+ 
+ 		// get this catalog.  we may not have read it yet.
+ 		synchronized (delegations) {
+ 		    Object	prefix = matches.elementAt (i);
+ 		    Object	cat = delegations.get (prefix);
+ 
+ 		    if (cat instanceof Catalog)
+ 			catalog = (Catalog) cat;
+ 		    else {
+ 			try {
+ 			    // load and cache that catalog
+ 			    catalog = loadCatalog (parserClass, eh,
+ 				    (String) cat, unified);
+ 			    delegations.put (prefix, catalog);
+ 			} catch (SAXException e) {
+ 			    // must ignore, says the OASIS spec
+ 			} catch (IOException e) {
+ 			    // same applies here
+ 			}
+ 		    }
+ 		}
+ 
+ 		// ignore failed loads, and proceed
+ 		if (catalog == null)
+ 		    continue;
+ 		
+ 		// we have a catalog ... resolve!
+ 		// usingPublic value can't matter, there's no choice
+ 		result = catalog.resolve (true, publicId, systemId);
+ 		if (result != null)
+ 		    return result;
+ 	    }
+ 
+ 	    // if there were no successes, the entire
+ 	    // lookup failed (all the way to top level)
+ 	    throw new DoneDelegation ();
+ 	}
+     }
+ 
+ 
+     /** This is the namespace URI used for OASIS XML Catalogs.  */
+     private static final String	catalogNamespace =
+     	"urn:oasis:names:tc:entity:xmlns:xml:catalog";
+ 
+ 
+     /**
+      * Loads/unmarshals one catalog.
+      */
+     private static class Loader extends DefaultHandler2
+     {
+ 	private boolean		preInterned;
+ 	private ErrorHandler	handler;
+ 	private boolean		unified;
+ 	private int		ignoreDepth;
+ 	private Locator		locator;
+ 	private boolean		started;
+ 	private Hashtable	externals;
+ 	private Stack		bases;
+ 
+ 	Catalog			cat = new Catalog ();
+ 
+ 
+ 	/**
+ 	 * Constructor.
+ 	 * @param flag true iff the parser already interns strings.
+ 	 * @param eh Errors and warnings are delegated to this.
+ 	 * @param unified true keeps one table for URI mappings;
+ 	 *	false matches OASIS spec, storing mappings
+ 	 *	for URIs and SYSTEM ids in parallel tables.
+ 	 */
+ 	Loader (boolean flag, ErrorHandler eh, boolean unified)
+ 	{
+ 	    preInterned = flag;
+ 	    handler = eh;
+ 	    this.unified = unified;
+ 	    cat.unified = unified;
+ 	    cat.eh = eh;
+ 	}
+ 
+ 
+ 	// strips out fragments
+ 	private String nofrag (String uri)
+ 	throws SAXException
+ 	{
+ 	    if (uri.indexOf ('#') != -1) {
+ 		warn ("URI with fragment: " + uri);
+ 		uri = uri.substring (0, uri.indexOf ('#'));
+ 	    }
+ 	    return uri;
+ 	}
+ 
+ 	// absolutizes relative URIs
+ 	private String absolutize (String uri)
+ 	throws SAXException
+ 	{
+ 	    // avoid creating URLs if they're already absolutized,
+ 	    // or if the URI is already using a known scheme
+ 	    if (uri.startsWith ("file:/")
+ 		    || uri.startsWith ("http:/")
+ 		    || uri.startsWith ("https:/")
+ 		    || uri.startsWith ("ftp:/")
+ 		    || uri.startsWith ("urn:")
+ 		    )
+ 		return uri;
+ 
+ 	    // otherwise, let's hope the JDK handles this URI scheme.
+ 	    try {
+ 		URL	base = (URL) bases.peek ();
+ 		return new URL (base, uri).toString ();
+ 	    } catch (Exception e) {
+ 		fatal ("can't absolutize URI: " + uri);
+ 		return null;
+ 	    }
+ 	}
+ 
+ 	// recoverable error
+ 	private void error (String message)
+ 	throws SAXException
+ 	{
+ 	    if (handler == null)
+ 		return;
+ 	    handler.error (new SAXParseException (message, locator));
+ 	}
+ 
+ 	// nonrecoverable error
+ 	private void fatal (String message)
+ 	throws SAXException
+ 	{
+ 	    SAXParseException	spe;
+ 	    
+ 	    spe = new SAXParseException (message, locator);
+ 	    if (handler != null)
+ 		handler.fatalError (spe);
+ 	    throw spe;
+ 	}
+ 
+ 	// low severity problem
+ 	private void warn (String message)
+ 	throws SAXException
+ 	{
+ 	    if (handler == null)
+ 		return;
+ 	    handler.warning (new SAXParseException (message, locator));
+ 	}
+ 
+ 	// callbacks:
+ 
+ 	public void setDocumentLocator (Locator l)
+ 	    { locator = l; }
+ 
+ 	public void startDocument ()
+ 	throws SAXException
+ 	{
+ 	    if (locator == null)
+ 		error ("no locator!");
+ 	    bases = new Stack ();
+ 	    String	uri = locator.getSystemId ();
+ 	    try {
+ 		bases.push (new URL (uri));
+ 	    } catch (IOException e) {
+ 		fatal ("bad document base URI: " + uri);
+ 	    }
+ 	}
+ 
+ 	public void endDocument ()
+ 	throws SAXException
+ 	{
+ 	    try {
+ 		if (!started)
+ 		    error ("not a catalog!");
+ 	    } finally {
+ 		locator = null;
+ 		handler = null;
+ 		externals = null;
+ 		bases = null;
+ 	    }
+ 	}
+ 
+ 	// XML Base support for external entities.
+ 
+ 	// NOTE: expects parser is in default "resolve-dtd-uris" mode.
+ 	public void externalEntityDecl (String name, String pub, String sys)
+ 	throws SAXException
+ 	{
+ 	    if (externals == null)
+ 		externals = new Hashtable ();
+ 	    if (externals.get (name) == null)
+ 		externals.put (name, pub);
+ 	}
+ 
+ 	public void startEntity (String name)
+ 	throws SAXException
+ 	{
+ 	    if (externals == null)
+ 		return;
+ 	    String uri = (String) externals.get (name);
+ 
+ 	    // NOTE: breaks if an EntityResolver substitutes these URIs.
+ 	    // If toplevel loader supports one, must intercept calls...
+ 	    if (uri != null) {
+ 		try {
+ 		    bases.push (new URL (uri));
+ 		} catch (IOException e) {
+ 		    fatal ("entity '" + name + "', bad URI: " + uri);
+ 		}
+ 	    }
+ 	}
+ 
+ 	public void endEntity (String name)
+ 	{
+ 	    if (externals == null)
+ 		return;
+ 	    String value = (String) externals.get (name);
+ 
+ 	    if (value != null)
+ 		bases.pop ();
+ 	}
+ 
+ 	/**
+ 	 * Processes catalog elements, saving their data.
+ 	 */
+ 	public void startElement (String namespace, String local,
+ 	    String qName, Attributes atts)
+ 	throws SAXException
+ 	{
+ 	    // must ignore non-catalog elements, and their contents
+ 	    if (ignoreDepth != 0 || !catalogNamespace.equals (namespace)) {
+ 		ignoreDepth++;
+ 		return;
+ 	    }
+ 
+ 	    // basic sanity checks
+ 	    if (!preInterned)
+ 		local = local.intern ();
+ 	    if (!started) {
+ 		started = true;
+ 		if ("catalog" != local)
+ 		    fatal ("root element not 'catalog': " + local);
+ 	    }
+ 
+ 	    // Handle any xml:base attribute
+ 	    String	xmlbase = atts.getValue ("xml:base");
+ 
+ 	    if (xmlbase != null) {
+ 		URL	base = (URL) bases.peek ();
+ 		try {
+ 		    base = new URL (base, xmlbase);
+ 		} catch (IOException e) {
+ 		    fatal ("can't resolve xml:base attribute: " + xmlbase);
+ 		}
+ 		bases.push (base);
+ 	    } else
+ 		bases.push (bases.peek ());
+ 
+ 	    // fetch multi-element attributes, apply standard tweaks
+ 	    // values (uri, catalog, rewritePrefix) get normalized too,
+ 	    // as a precaution and since we may compare the values
+ 	    String	catalog = atts.getValue ("catalog");
+ 	    if (catalog != null)
+ 		catalog = normalizeURI (absolutize (catalog));
+ 
+ 	    String	rewritePrefix = atts.getValue ("rewritePrefix");
+ 	    if (rewritePrefix != null)
+ 		rewritePrefix = normalizeURI (absolutize (rewritePrefix));
+ 
+ 	    String	systemIdStartString;
+ 	    systemIdStartString = atts.getValue ("systemIdStartString");
+ 	    if (systemIdStartString != null) {
+ 		systemIdStartString = normalizeURI (systemIdStartString);
+ 		// unmatchable <rewriteSystemId>, <delegateSystemId> elements
+ 		if (systemIdStartString.startsWith ("urn:publicid:")) {
+ 		    error ("systemIdStartString is really a publicId!!");
+ 		    return;
+ 		}
+ 	    }
+ 
+ 	    String	uri = atts.getValue ("uri");
+ 	    if (uri != null)
+ 		uri = normalizeURI (absolutize (uri));
+ 
+ 	    String	uriStartString;
+ 	    uriStartString = atts.getValue ("uriStartString");
+ 	    if (uriStartString != null) {
+ 		uriStartString = normalizeURI (uriStartString);
+ 		// unmatchable <rewriteURI>, <delegateURI> elements
+ 		if (uriStartString.startsWith ("urn:publicid:")) {
+ 		    error ("uriStartString is really a publicId!!");
+ 		    return;
+ 		}
+ 	    }
+ 
+ 	    // strictly speaking "group" and "catalog" shouldn't nest
+ 	    // ... arbitrary restriction, no evident motivation
+ 
+ // FIXME stack "prefer" settings (two elements only!) and use
+ // them to populate different public mapping/delegation tables
+ 
+ 	    if ("catalog" == local || "group" == local) {
+ 		String	prefer = atts.getValue ("prefer");
+ 
+ 		if (prefer != null && !"public".equals (prefer)) {
+ 		    if (!"system".equals (prefer)) {
+ 			error ("in <" + local + " ... prefer='...'>, "
+ 			    + "assuming 'public'");
+ 			prefer = "public";
+ 		    }
+ 		}
+ 		if (prefer != null) {
+ 		    if ("catalog" == local) {
+ 			cat.hasPreference = true;
+ 			cat.usingPublic = "public".equals (prefer);
+ 		    } else {
+ 			if (!cat.hasPreference || cat.usingPublic
+ 				    != "public".equals (prefer)) {
+ fatal ("<group prefer=...> case not handled");
+ 			}
+ 		    }
+ 		} else if ("group" == local && cat.hasPreference) {
+ fatal ("<group prefer=...> case not handled");
+ 		}
+ 
+ 	    //
+ 	    // PUBLIC ids:  cleanly set up for id substitution
+ 	    //
+ 	    } else if ("public" == local) {
+ 		String	publicId = atts.getValue ("publicId");
+ 		String	value = null;
+ 
+ 		if (publicId == null || uri == null) {
+ 		    error ("expecting <public publicId=... uri=.../>");
+ 		    return;
+ 		}
+ 		publicId = normalizePublicId (true, publicId);
+ 		uri = nofrag (uri);
+ 		if (cat.publicIds == null)
+ 		    cat.publicIds = new Hashtable ();
+ 		else
+ 		    value = (String) cat.publicIds.get (publicId);
+ 		if (value != null) {
+ 		    if (!value.equals (uri))
+ 			warn ("ignoring <public...> entry for " + publicId);
+ 		} else
+ 		    cat.publicIds.put (publicId, uri);
+ 
+ 	    } else if ("delegatePublic" == local) {
+ 		String	publicIdStartString;
+ 		Object	value = null;
+ 
+ 		publicIdStartString = atts.getValue ("publicIdStartString");
+ 		if (publicIdStartString == null || catalog == null) {
+ 		    error ("expecting <delegatePublic "
+ 			+ "publicIdStartString=... catalog=.../>");
+ 		    return;
+ 		}
+ 		publicIdStartString = normalizePublicId (true,
+ 			publicIdStartString);
+ 		if (cat.publicDelegations == null)
+ 		    cat.publicDelegations = new Hashtable ();
+ 		else
+ 		    value = cat.publicDelegations.get (publicIdStartString);
+ 		if (value != null) {
+ 		    if (!value.equals (catalog))
+ 			warn ("ignoring <delegatePublic...> entry for "
+ 			    + uriStartString);
+ 		} else
+ 		    cat.publicDelegations.put (publicIdStartString, catalog);
+ 
+ 
+ 	    //
+ 	    // SYSTEM ids:  need substitution due to operational issues
+ 	    //
+ 	    } else if ("system" == local) {
+ 		String	systemId = atts.getValue ("systemId");
+ 		String	value = null;
+ 
+ 		if (systemId == null || uri == null) {
+ 		    error ("expecting <system systemId=... uri=.../>");
+ 		    return;
+ 		}
+ 		systemId = normalizeURI (systemId);
+ 		uri = nofrag (uri);
+ 		if (systemId.startsWith ("urn:publicid:")) {
+ 		    error ("systemId is really a publicId!!");
+ 		    return;
+ 		}
+ 		if (cat.systemIds == null) {
+ 		    cat.systemIds = new Hashtable ();
+ 		    if (unified)
+ 			cat.uris = cat.systemIds;
+ 		} else
+ 		    value = (String) cat.systemIds.get (systemId);
+ 		if (value != null) {
+ 		    if (!value.equals (uri))
+ 			warn ("ignoring <system...> entry for " + systemId);
+ 		} else
+ 		    cat.systemIds.put (systemId, uri);
+ 
+ 	    } else if ("rewriteSystem" == local) {
+ 		String	value = null;
+ 
+ 		if (systemIdStartString == null || rewritePrefix == null
+ 			|| systemIdStartString.length () == 0
+ 			|| rewritePrefix.length () == 0
+ 			) {
+ 		    error ("expecting <rewriteSystem "
+ 			+ "systemIdStartString=... rewritePrefix=.../>");
+ 		    return;
+ 		}
+ 		if (cat.systemRewrites == null) {
+ 		    cat.systemRewrites = new Hashtable ();
+ 		    if (unified)
+ 			cat.uriRewrites = cat.systemRewrites;
+ 		} else
+ 		    value = (String) cat.systemRewrites.get (
+ 		    				systemIdStartString);
+ 		if (value != null) {
+ 		    if (!value.equals (rewritePrefix))
+ 			warn ("ignoring <rewriteSystem...> entry for "
+ 			    + systemIdStartString);
+ 		} else
+ 		    cat.systemRewrites.put (systemIdStartString,
+ 		    		rewritePrefix);
+ 
+ 	    } else if ("delegateSystem" == local) {
+ 		Object	value = null;
+ 
+ 		if (systemIdStartString == null || catalog == null) {
+ 		    error ("expecting <delegateSystem "
+ 			+ "systemIdStartString=... catalog=.../>");
+ 		    return;
+ 		}
+ 		if (cat.systemDelegations == null) {
+ 		    cat.systemDelegations = new Hashtable ();
+ 		    if (unified)
+ 			cat.uriDelegations = cat.systemDelegations;
+ 		} else
+ 		    value = cat.systemDelegations.get (systemIdStartString);
+ 		if (value != null) {
+ 		    if (!value.equals (catalog))
+ 			warn ("ignoring <delegateSystem...> entry for "
+ 			    + uriStartString);
+ 		} else
+ 		    cat.systemDelegations.put (systemIdStartString, catalog);
+ 
+ 
+ 	    //
+ 	    // URI:  just like "system" ID support, except that
+ 	    // fragment IDs are disallowed in "system" elements.
+ 	    //
+ 	    } else if ("uri" == local) {
+ 		String	name = atts.getValue ("name");
+ 		String	value = null;
+ 
+ 		if (name == null || uri == null) {
+ 		    error ("expecting <uri name=... uri=.../>");
+ 		    return;
+ 		}
+ 		if (name.startsWith ("urn:publicid:")) {
+ 		    error ("name is really a publicId!!");
+ 		    return;
+ 		}
+ 		name = normalizeURI (name);
+ 		if (cat.uris == null) {
+ 		    cat.uris = new Hashtable ();
+ 		    if (unified)
+ 			cat.systemIds = cat.uris;
+ 		} else
+ 		    value = (String) cat.uris.get (name);
+ 		if (value != null) {
+ 		    if (!value.equals (uri))
+ 			warn ("ignoring <uri...> entry for " + name);
+ 		} else
+ 		    cat.uris.put (name, uri);
+ 
+ 	    } else if ("rewriteURI" == local) {
+ 		String value = null;
+ 
+ 		if (uriStartString == null || rewritePrefix == null
+ 			|| uriStartString.length () == 0
+ 			|| rewritePrefix.length () == 0
+ 			) {
+ 		    error ("expecting <rewriteURI "
+ 			+ "uriStartString=... rewritePrefix=.../>");
+ 		    return;
+ 		}
+ 		if (cat.uriRewrites == null) {
+ 		    cat.uriRewrites = new Hashtable ();
+ 		    if (unified)
+ 			cat.systemRewrites = cat.uriRewrites;
+ 		} else
+ 		    value = (String) cat.uriRewrites.get (uriStartString);
+ 		if (value != null) {
+ 		    if (!value.equals (rewritePrefix))
+ 			warn ("ignoring <rewriteURI...> entry for "
+ 			    + uriStartString);
+ 		} else
+ 		    cat.uriRewrites.put (uriStartString, rewritePrefix);
+ 
+ 	    } else if ("delegateURI" == local) {
+ 		Object	value = null;
+ 
+ 		if (uriStartString == null || catalog == null) {
+ 		    error ("expecting <delegateURI "
+ 			+ "uriStartString=... catalog=.../>");
+ 		    return;
+ 		}
+ 		if (cat.uriDelegations == null) {
+ 		    cat.uriDelegations = new Hashtable ();
+ 		    if (unified)
+ 			cat.systemDelegations = cat.uriDelegations;
+ 		} else
+ 		    value = cat.uriDelegations.get (uriStartString);
+ 		if (value != null) {
+ 		    if (!value.equals (catalog))
+ 			warn ("ignoring <delegateURI...> entry for "
+ 			    + uriStartString);
+ 		} else
+ 		    cat.uriDelegations.put (uriStartString, catalog);
+ 
+ 	    //
+ 	    // NON-DELEGATING approach to modularity
+ 	    //
+ 	    } else if ("nextCatalog" == local) {
+ 		if (catalog == null) {
+ 		    error ("expecting <nextCatalog catalog=.../>");
+ 		    return;
+ 		}
+ 		if (cat.next == null)
+ 		    cat.next = new Vector ();
+ 		cat.next.addElement (catalog);
+ 
+ 	    //
+ 	    // EXTENSIONS from appendix E
+ 	    //
+ 	    } else if ("doctype" == local) {
+ 		String	name = atts.getValue ("name");
+ 		String	value = null;
+ 
+ 		if (name == null || uri == null) {
+ 		    error ("expecting <doctype name=... uri=.../>");
+ 		    return;
+ 		}
+ 		name = normalizeURI (name);
+ 		if (cat.doctypes == null)
+ 		    cat.doctypes = new Hashtable ();
+ 		else
+ 		    value = (String) cat.doctypes.get (name);
+ 		if (value != null) {
+ 		    if (!value.equals (uri))
+ 			warn ("ignoring <doctype...> entry for "
+ 			    + uriStartString);
+ 		} else
+ 		    cat.doctypes.put (name, uri);
+ 	    
+ 
+ 	    //
+ 	    // RESERVED ... ignore (like reserved attributes) but warn
+ 	    //
+ 	    } else {
+ 		warn ("ignoring unknown catalog element: " + local);
+ 		ignoreDepth++;
+ 	    }
+ 	}
+ 
+ 	public void endElement (String uri, String local, String qName)
+ 	throws SAXException
+ 	{
+ 	    if (ignoreDepth != 0)
+ 		ignoreDepth--;
+ 	    else
+ 		bases.pop ();
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/util/XHTMLWriter.java gcc-4.1.0/libjava/classpath/gnu/xml/util/XHTMLWriter.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/util/XHTMLWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/util/XHTMLWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,112 ----
+ /* XHTMLWriter.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.util;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.io.Writer;
+ 
+ 
+ /**
+  * This extends XMLWriter to create a class which defaults to writing
+  * XHTML text, preferring the US-ASCII encoding.  It adds no unique
+  * functionality, only changing the defaults slightly to simplify writing
+  * XHTML processing components by providing a bean class whose properties
+  * have more convenient defaults.  An artifact of using the US-ASCII
+  * encoding is that no XML declaration is written, so that HTML tools
+  * that can't accept them will not become confused.  Components can treat
+  * the output as UTF-8, ISO-8859-1, or US-ASCII without incurring any
+  * data loss.
+  *
+  * @author David Brownell
+  */
+ public class XHTMLWriter extends XMLWriter
+ {
+     /**
+      * Constructs this handler with System.out used to write
+      * SAX events using the US-ASCII encoding, as XHTML.
+      */
+     public XHTMLWriter ()
+     throws IOException
+     {
+ 	this (System.out);
+     }
+ 
+     /**
+      * Constructs this handler such that the specified output stream
+      * is used to write SAX events in the US-ASCII encoding, as XHTML.
+      *
+      * @param out Where US-ASCII encoding of the stream of SAX
+      *	events will be sent.
+      */
+     public XHTMLWriter (OutputStream out)
+     throws IOException
+     {
+ 	// not all JVMs understand "ASCII" as an encoding name, so
+ 	// we use 8859_1 (they all seem to handle that one) and
+ 	// make the echo handler filter out non-ASCII characters
+ 	this (new OutputStreamWriter (out, "8859_1"), "US-ASCII");
+     }
+ 
+     /**
+      * Constructs this handler such that the specified output stream
+      * is used to write SAX events as XHTML.
+      *
+      * @param out Where the stream of SAX events will be written.
+      */
+     public XHTMLWriter (Writer out)
+     {
+ 	this (out, null);
+     }
+ 
+     /**
+      * Constructs this handler such that the specified output stream
+      * is used to write SAX events as XHTML, labeled with the specified
+      * encoding.
+      *
+      * @param out Where the stream of SAX events will be written.
+      * @param encoding If non-null, this names the encoding to be
+      *	placed in the encoding declaration.
+      */
+     public XHTMLWriter (Writer out, String encoding)
+     {
+ 	super (out, encoding);
+ 	setXhtml (true);
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/util/XMLWriter.java gcc-4.1.0/libjava/classpath/gnu/xml/util/XMLWriter.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/util/XMLWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/util/XMLWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1927 ----
+ /* XMLWriter.java -- 
+    Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.util;
+ 
+ import java.io.BufferedWriter;
+ import java.io.CharConversionException;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.io.Writer;
+ import java.util.Stack;
+ 
+ import org.xml.sax.*;
+ import org.xml.sax.ext.*;
+ import org.xml.sax.helpers.*;
+ 
+ 
+ /**
+  * This class is a SAX handler which writes all its input as a well formed
+  * XML or XHTML document.  If driven using SAX2 events, this output may
+  * include a recreated document type declaration, subject to limitations
+  * of SAX (no internal subset exposed) or DOM (the important declarations,
+  * with their documentation, are discarded).
+  *
+  * <p> By default, text is generated "as-is", but some optional modes
+  * are supported.  Pretty-printing is supported, to make life easier
+  * for people reading the output.  XHTML (1.0) output has can be made
+  * particularly pretty; all the built-in character entities are known.
+  * Canonical XML can also be generated, assuming the input is properly
+  * formed.
+  *
+  * <hr>
+  *
+  * <p> Some of the methods on this class are intended for applications to
+  * use directly, rather than as pure SAX2 event callbacks.  Some of those
+  * methods access the JavaBeans properties (used to tweak output formats,
+  * for example canonicalization and pretty printing).  Subclasses
+  * are expected to add new behaviors, not to modify current behavior, so
+  * many such methods are final.</p>
+  *
+  * <p> The <em>write*()</em> methods may be slightly simpler for some
+  * applications to use than direct callbacks.  For example, they support
+  * a simple policy for encoding data items as the content of a single element.
+  *
+  * <p> To reuse an XMLWriter you must provide it with a new Writer, since
+  * this handler closes the writer it was given as part of its endDocument()
+  * handling.  (XML documents have an end of input, and the way to encode
+  * that on a stream is to close it.) </p>
+  *
+  * <hr>
+  *
+  * <p> Note that any relative URIs in the source document, as found in
+  * entity and notation declarations, ought to have been fully resolved by
+  * the parser providing events to this handler.  This means that the
+  * output text should only have fully resolved URIs, which may not be
+  * the desired behavior in cases where later binding is desired. </p>
+  *
+  * <p> <em>Note that due to SAX2 defaults, you may need to manually
+  * ensure that the input events are XML-conformant with respect to namespace
+  * prefixes and declarations.  {@link gnu.xml.pipeline.NSFilter} is
+  * one solution to this problem, in the context of processing pipelines.</em>
+  * Something as simple as connecting this handler to a parser might not
+  * generate the correct output.  Another workaround is to ensure that the
+  * <em>namespace-prefixes</em> feature is always set to true, if you're
+  * hooking this directly up to some XMLReader implementation.
+  *
+  * @see gnu.xml.pipeline.TextConsumer
+  *
+  * @author David Brownell
+  */
+ public class XMLWriter
+     implements ContentHandler, LexicalHandler, DTDHandler, DeclHandler
+ {
+     // text prints/escapes differently depending on context
+     //	CTX_ENTITY ... entity literal value
+     //	CTX_ATTRIBUTE ... attribute literal value
+     //	CTX_CONTENT ... content of an element
+     //	CTX_UNPARSED ... CDATA, comment, PI, names, etc
+     //  CTX_NAME ... name or nmtoken, no escapes possible
+     private static final int	CTX_ENTITY = 1;
+     private static final int	CTX_ATTRIBUTE = 2;
+     private static final int	CTX_CONTENT = 3;
+     private static final int	CTX_UNPARSED = 4;
+     private static final int	CTX_NAME = 5;
+ 
+ // FIXME: names (element, attribute, PI, notation, etc) are not
+ // currently written out with range checks (escapeChars).
+ // In non-XHTML, some names can't be directly written; panic!
+ 
+     private static String	sysEOL;
+ 
+     static {
+ 	try {
+ 	    sysEOL = System.getProperty ("line.separator", "\n");
+ 
+ 	    // don't use the system's EOL if it's illegal XML.
+ 	    if (!isLineEnd (sysEOL))
+ 		sysEOL = "\n";
+ 
+ 	} catch (SecurityException e) {
+ 	    sysEOL = "\n";
+ 	}
+     }
+ 
+     private static boolean isLineEnd (String eol)
+     {
+ 	return "\n".equals (eol)
+ 		    || "\r".equals (eol)
+ 		    || "\r\n".equals (eol);
+     }
+ 
+     private Writer		out;
+     private boolean		inCDATA;
+     private int			elementNestLevel;
+     private String		eol = sysEOL;
+ 
+     private short		dangerMask;
+     private StringBuffer	stringBuf;
+     private Locator		locator;
+     private ErrorHandler	errHandler;
+ 
+     private boolean		expandingEntities = false;
+     private int			entityNestLevel;
+     private boolean		xhtml;
+     private boolean		startedDoctype;
+     private String		encoding;
+ 
+     private boolean		canonical;
+     private boolean		inDoctype;
+     private boolean		inEpilogue;
+ 
+     // pretty printing controls
+     private boolean		prettyPrinting;
+     private int			column;
+     private boolean		noWrap;
+     private Stack		space = new Stack ();
+ 
+     // this is not a hard'n'fast rule -- longer lines are OK,
+     // but are to be avoided.  Here, prettyprinting is more to
+     // show structure "cleanly" than to be precise about it.
+     // better to have ragged layout than one line 24Kb long.
+     private static final int	lineLength = 75;
+ 
+ 
+     /**
+      * Constructs this handler with System.out used to write SAX events
+      * using the UTF-8 encoding.  Avoid using this except when you know
+      * it's safe to close System.out at the end of the document.
+      */
+     public XMLWriter () throws IOException
+ 	{ this (System.out); }
+ 
+     /**
+      * Constructs a handler which writes all input to the output stream
+      * in the UTF-8 encoding, and closes it when endDocument is called.
+      * (Yes it's annoying that this throws an exception -- but there's
+      * really no way around it, since it's barely possible a JDK may
+      * exist somewhere that doesn't know how to emit UTF-8.)
+      */
+     public XMLWriter (OutputStream out) throws IOException
+     {
+ 	this (new OutputStreamWriter (out, "UTF8"));
+     }
+ 
+     /**
+      * Constructs a handler which writes all input to the writer, and then
+      * closes the writer when the document ends.  If an XML declaration is
+      * written onto the output, and this class can determine the name of
+      * the character encoding for this writer, that encoding name will be
+      * included in the XML declaration.
+      *
+      * <P> See the description of the constructor which takes an encoding
+      * name for imporant information about selection of encodings.
+      *
+      * @param writer XML text is written to this writer.
+      */
+     public XMLWriter (Writer writer)
+     {
+ 	this (writer, null);
+     }
+ 
+     /**
+      * Constructs a handler which writes all input to the writer, and then
+      * closes the writer when the document ends.  If an XML declaration is
+      * written onto the output, this class will use the specified encoding
+      * name in that declaration.  If no encoding name is specified, no
+      * encoding name will be declared unless this class can otherwise
+      * determine the name of the character encoding for this writer.
+      *
+      * <P> At this time, only the UTF-8 ("UTF8") and UTF-16 ("Unicode")
+      * output encodings are fully lossless with respect to XML data.  If you
+      * use any other encoding you risk having your data be silently mangled
+      * on output, as the standard Java character encoding subsystem silently
+      * maps non-encodable characters to a question mark ("?") and will not
+      * report such errors to applications.
+      *
+      * <p> For a few other encodings the risk can be reduced. If the writer is
+      * a java.io.OutputStreamWriter, and uses either the ISO-8859-1 ("8859_1",
+      * "ISO8859_1", etc) or US-ASCII ("ASCII") encodings, content which
+      * can't be encoded in those encodings will be written safely.  Where
+      * relevant, the XHTML entity names will be used; otherwise, numeric
+      * character references will be emitted.
+      *
+      * <P> However, there remain a number of cases where substituting such
+      * entity or character references is not an option.  Such references are
+      * not usable within a DTD, comment, PI, or CDATA section.  Neither may
+      * they be used when element, attribute, entity, or notation names have
+      * the problematic characters.
+      *
+      * @param writer XML text is written to this writer.
+      * @param encoding if non-null, and an XML declaration is written,
+      *	this is the name that will be used for the character encoding.
+      */
+     public XMLWriter (Writer writer, String encoding)
+     {
+ 	setWriter (writer, encoding);
+     }
+     
+     private void setEncoding (String encoding)
+     {
+ 	if (encoding == null && out instanceof OutputStreamWriter)
+ 	    encoding = ((OutputStreamWriter)out).getEncoding ();
+ 
+ 	if (encoding != null) {
+ 	    encoding = encoding.toUpperCase ();
+ 
+ 	    // Use official encoding names where we know them,
+ 	    // avoiding the Java-only names.  When using common
+ 	    // encodings where we can easily tell if characters
+ 	    // are out of range, we'll escape out-of-range
+ 	    // characters using character refs for safety.
+ 
+ 	    // I _think_ these are all the main synonyms for these!
+ 	    if ("UTF8".equals (encoding)) {
+ 		encoding = "UTF-8";
+ 	    } else if ("US-ASCII".equals (encoding)
+ 		    || "ASCII".equals (encoding)) {
+ 		dangerMask = (short) 0xff80;
+ 		encoding = "US-ASCII";
+ 	    } else if ("ISO-8859-1".equals (encoding)
+ 		    || "8859_1".equals (encoding)
+ 		    || "ISO8859_1".equals (encoding)) {
+ 		dangerMask = (short) 0xff00;
+ 		encoding = "ISO-8859-1";
+ 	    } else if ("UNICODE".equals (encoding)
+ 		    || "UNICODE-BIG".equals (encoding)
+ 		    || "UNICODE-LITTLE".equals (encoding)) {
+ 		encoding = "UTF-16";
+ 
+ 		// TODO: UTF-16BE, UTF-16LE ... no BOM; what
+ 		// release of JDK supports those Unicode names?
+ 	    }
+ 
+ 	    if (dangerMask != 0)
+ 		stringBuf = new StringBuffer ();
+ 	}
+ 
+ 	this.encoding = encoding;
+     }
+ 
+ 
+     /**
+      * Resets the handler to write a new text document.
+      *
+      * @param writer XML text is written to this writer.
+      * @param encoding if non-null, and an XML declaration is written,
+      *	this is the name that will be used for the character encoding.
+      *
+      * @exception IllegalStateException if the current
+      *	document hasn't yet ended (with {@link #endDocument})
+      */
+     final public void setWriter (Writer writer, String encoding)
+     {
+ 	if (out != null)
+ 	    throw new IllegalStateException (
+ 		"can't change stream in mid course");
+ 	out = writer;
+ 	if (out != null)
+ 	    setEncoding (encoding);
+ 	if (!(out instanceof BufferedWriter))
+ 	    out = new BufferedWriter (out);
+ 	space.push ("default");
+     }
+ 
+     /**
+      * Assigns the line ending style to be used on output.
+      * @param eolString null to use the system default; else
+      *	"\n", "\r", or "\r\n".
+      */
+     final public void setEOL (String eolString)
+     {
+ 	if (eolString == null)
+ 	    eol = sysEOL;
+ 	else if (!isLineEnd (eolString))
+ 	    eol = eolString;
+ 	else
+ 	    throw new IllegalArgumentException (eolString);
+     }
+ 
+     /**
+      * Assigns the error handler to be used to present most fatal
+      * errors.
+      */
+     public void setErrorHandler (ErrorHandler handler)
+     {
+ 	errHandler = handler;
+     }
+ 
+     /**
+      * Used internally and by subclasses, this encapsulates the logic
+      * involved in reporting fatal errors.  It uses locator information
+      * for good diagnostics, if available, and gives the application's
+      * ErrorHandler the opportunity to handle the error before throwing
+      * an exception.
+      */
+     protected void fatal (String message, Exception e)
+     throws SAXException
+     {
+ 	SAXParseException	x;
+ 
+ 	if (locator == null)
+ 	    x = new SAXParseException (message, null, null, -1, -1, e);
+ 	else
+ 	    x = new SAXParseException (message, locator, e);
+ 	if (errHandler != null)
+ 	    errHandler.fatalError (x);
+ 	throw x;
+     }
+ 
+ 
+     // JavaBeans properties
+ 
+     /**
+      * Controls whether the output should attempt to follow the "transitional"
+      * XHTML rules so that it meets the "HTML Compatibility Guidelines"
+      * appendix in the XHTML specification.  A "transitional" Document Type
+      * Declaration (DTD) is placed near the beginning of the output document,
+      * instead of whatever DTD would otherwise have been placed there, and
+      * XHTML empty elements are printed specially.  When writing text in
+      * US-ASCII or ISO-8859-1 encodings, the predefined XHTML internal
+      * entity names are used (in preference to character references) when
+      * writing content characters which can't be expressed in those encodings.
+      *
+      * <p> When this option is enabled, it is the caller's responsibility
+      * to ensure that the input is otherwise valid as XHTML.  Things to
+      * be careful of in all cases, as described in the appendix referenced
+      * above, include:  <ul>
+      *
+      *	<li> Element and attribute names must be in lower case, both
+      *		in the document and in any CSS style sheet.
+      *	<li> All XML constructs must be valid as defined by the XHTML
+      *		"transitional" DTD (including all familiar constructs,
+      *		even deprecated ones).
+      *	<li> The root element must be "html".
+      *	<li> Elements that must be empty (such as <em>&lt;br&gt;</em>
+      *		must have no content.
+      *	<li> Use both <em>lang</em> and <em>xml:lang</em> attributes
+      *		when specifying language.
+      *	<li> Similarly, use both <em>id</em> and <em>name</em> attributes
+      *		when defining elements that may be referred to through
+      *		URI fragment identifiers ... and make sure that the
+      *		value is a legal NMTOKEN, since not all such HTML 4.0
+      *		identifiers are valid in XML.
+      *	<li> Be careful with character encodings; make sure you provide
+      *		a <em>&lt;meta http-equiv="Content-type"
+      *		content="text/xml;charset=..." /&gt;</em> element in
+      *		the HTML "head" element, naming the same encoding
+      *		used to create this handler.  Also, if that encoding
+      *		is anything other than US-ASCII, make sure that if
+      *		the document is given a MIME content type, it has
+      *		a <em>charset=...</em> attribute with that encoding.
+      *	</ul>
+      *
+      * <p> Additionally, some of the oldest browsers have additional
+      * quirks, to address with guidelines such as: <ul>
+      *
+      *	<li> Processing instructions may be rendered, so avoid them.
+      *		(Similarly for an XML declaration.)
+      *	<li> Embedded style sheets and scripts should not contain XML
+      *		markup delimiters:  &amp;, &lt;, and ]]&gt; are trouble.
+      *	<li> Attribute values should not have line breaks or multiple
+      *		consecutive white space characters.
+      *	<li> Use no more than one of the deprecated (transitional)
+      *		<em>&lt;isindex&gt;</em> elements.
+      *	<li> Some boolean attributes (such as <em>compact, checked,
+      *		disabled, readonly, selected,</em> and more) confuse
+      *		some browsers, since they only understand minimized
+      *		versions which are illegal in XML.
+      *	</ul>
+      *
+      * <p> Also, some characteristics of the resulting output may be
+      * a function of whether the document is later given a MIME
+      * content type of <em>text/html</em> rather than one indicating
+      * XML (<em>application/xml</em> or <em>text/xml</em>).  Worse,
+      * some browsers ignore MIME content types and prefer to rely URI
+      * name suffixes -- so an "index.xml" could always be XML, never
+      * XHTML, no matter its MIME type.
+      */
+     final public void setXhtml (boolean value)
+     {
+ 	if (locator != null)
+ 	    throw new IllegalStateException ("started parsing");
+ 	xhtml = value;
+ 	if (xhtml)
+ 	    canonical = false;
+     }
+ 
+     /**
+      * Returns true if the output attempts to echo the input following
+      * "transitional" XHTML rules and matching the "HTML Compatibility
+      * Guidelines" so that an HTML version 3 browser can read the output
+      * as HTML; returns false (the default) othewise.
+      */
+     final public boolean isXhtml ()
+     {
+ 	return xhtml;
+     }
+ 
+     /**
+      * Controls whether the output text contains references to
+      * entities (the default), or instead contains the expanded
+      * values of those entities.
+      */
+     final public void setExpandingEntities (boolean value)
+     {
+ 	if (locator != null)
+ 	    throw new IllegalStateException ("started parsing");
+ 	expandingEntities = value;
+ 	if (!expandingEntities)
+ 	    canonical = false;
+     }
+ 
+     /**
+      * Returns true if the output will have no entity references;
+      * returns false (the default) otherwise.
+      */
+     final public boolean isExpandingEntities ()
+     {
+ 	return expandingEntities;
+     }
+ 
+     /**
+      * Controls pretty-printing, which by default is not enabled
+      * (and currently is most useful for XHTML output).
+      * Pretty printing enables structural indentation, sorting of attributes
+      * by name, line wrapping, and potentially other mechanisms for making
+      * output more or less readable.
+      *
+      * <p> At this writing, structural indentation and line wrapping are
+      * enabled when pretty printing is enabled and the <em>xml:space</em>
+      * attribute has the value <em>default</em> (its other legal value is
+      * <em>preserve</em>, as defined in the XML specification).  The three
+      * XHTML element types which use another value are recognized by their
+      * names (namespaces are ignored).
+      *
+      * <p> Also, for the record, the "pretty" aspect of printing here
+      * is more to provide basic structure on outputs that would otherwise
+      * risk being a single long line of text.  For now, expect the
+      * structure to be ragged ... unless you'd like to submit a patch
+      * to make this be more strictly formatted!
+      *
+      * @exception IllegalStateException thrown if this method is invoked
+      *	after output has begun.
+      */
+     final public void setPrettyPrinting (boolean value)
+     {
+ 	if (locator != null)
+ 	    throw new IllegalStateException ("started parsing");
+ 	prettyPrinting = value;
+ 	if (prettyPrinting)
+ 	    canonical = false;
+     }
+ 
+     /**
+      * Returns value of flag controlling pretty printing.
+      */
+     final public boolean isPrettyPrinting ()
+     {
+ 	return prettyPrinting;
+     }
+ 
+ 
+     /**
+      * Sets the output style to be canonicalized.  Input events must
+      * meet requirements that are slightly more stringent than the
+      * basic well-formedness ones, and include:  <ul>
+      *
+      *	<li> Namespace prefixes must not have been changed from those
+      *	in the original document.  (This may only be ensured by setting
+      *	the SAX2 XMLReader <em>namespace-prefixes</em> feature flag;
+      *	by default, it is cleared.)
+      *
+      *	<li> Redundant namespace declaration attributes have been
+      *	removed.  (If an ancestor element defines a namespace prefix
+      *	and that declaration hasn't been overriden, an element must
+      *	not redeclare it.)
+      *
+      *	<li> If comments are not to be included in the canonical output,
+      *	they must first be removed from the input event stream; this
+      *	<em>Canonical XML with comments</em> by default.
+      *
+      *	<li> If the input character encoding was not UCS-based, the
+      *	character data must have been normalized using Unicode
+      *	Normalization Form C.  (UTF-8 and UTF-16 are UCS-based.)
+      *
+      *	<li> Attribute values must have been normalized, as is done
+      *	by any conformant XML processor which processes all external
+      *	parameter entities.
+      *
+      *	<li> Similarly, attribute value defaulting has been performed.
+      *
+      *	</ul>
+      *
+      * <p> Note that fragments of XML documents, as specified by an XPath
+      * node set, may be canonicalized.  In such cases, elements may need
+      * some fixup (for <em>xml:*</em> attributes and application-specific
+      * context).
+      *
+      * @exception IllegalArgumentException if the output encoding
+      *	is anything other than UTF-8.
+      */
+     final public void setCanonical (boolean value)
+     {
+ 	if (value && !"UTF-8".equals (encoding))
+ 	    throw new IllegalArgumentException ("encoding != UTF-8");
+ 	canonical = value;
+ 	if (canonical) {
+ 	    prettyPrinting = xhtml = false;
+ 	    expandingEntities = true;
+ 	    eol = "\n";
+ 	}
+     }
+ 
+ 
+     /**
+      * Returns value of flag controlling canonical output.
+      */
+     final public boolean isCanonical ()
+     {
+ 	return canonical;
+     }
+ 
+ 
+     /**
+      * Flushes the output stream.  When this handler is used in long lived
+      * pipelines, it can be important to flush buffered state, for example
+      * so that it can reach the disk as part of a state checkpoint.
+      */
+     final public void flush ()
+     throws IOException
+     {
+ 	if (out != null)
+ 	    out.flush ();
+     }
+ 
+ 
+     // convenience routines
+ 
+ // FIXME:  probably want a subclass that holds a lot of these...
+ // and maybe more!
+     
+     /**
+      * Writes the string as if characters() had been called on the contents
+      * of the string.  This is particularly useful when applications act as
+      * producers and write data directly to event consumers.
+      */
+     final public void write (String data)
+     throws SAXException
+     {
+ 	char	buf [] = data.toCharArray ();
+ 	characters (buf, 0, buf.length);
+     }
+ 
+ 
+     /**
+      * Writes an element that has content consisting of a single string.
+      * @see #writeEmptyElement
+      * @see #startElement
+      */
+     public void writeElement (
+ 	String uri,
+ 	String localName,
+ 	String qName,
+ 	Attributes atts,
+ 	String content
+     ) throws SAXException
+     {
+ 	if (content == null || content.length () == 0) {
+ 	    writeEmptyElement (uri, localName, qName, atts);
+ 	    return;
+ 	}
+ 	startElement (uri, localName, qName, atts);
+ 	char chars [] = content.toCharArray ();
+ 	characters (chars, 0, chars.length);
+ 	endElement (uri, localName, qName);
+     }
+ 
+ 
+     /**
+      * Writes an element that has content consisting of a single integer,
+      * encoded as a decimal string.
+      * @see #writeEmptyElement
+      * @see #startElement
+      */
+     public void writeElement (
+ 	String uri,
+ 	String localName,
+ 	String qName,
+ 	Attributes atts,
+ 	int content
+     ) throws SAXException
+     {
+ 	writeElement (uri, localName, qName, atts, Integer.toString (content));
+     }
+ 
+ 
+     // SAX1 ContentHandler
+     /** <b>SAX1</b>:  provides parser status information */
+     final public void setDocumentLocator (Locator l)
+     {
+ 	locator = l;
+     }
+ 
+ 
+     // URL for dtd that validates against all normal HTML constructs
+     private static final String xhtmlFullDTD =
+     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";
+ 
+     
+     /**
+      * <b>SAX1</b>:  indicates the beginning of a document parse.
+      * If you're writing (well formed) fragments of XML, neither
+      * this nor endDocument should be called.
+      */
+     // NOT final
+     public void startDocument ()
+     throws SAXException
+     {
+ 	try {
+ 	    if (out == null)
+ 		throw new IllegalStateException (
+ 		    "null Writer given to XMLWriter");
+ 
+ 	    // Not all parsers provide the locator we want; this also
+ 	    // flags whether events are being sent to this object yet.
+ 	    // We could only have this one call if we only printed whole
+ 	    // documents ... but we also print fragments, so most of the
+ 	    // callbacks here replicate this test.
+ 
+ 	    if (locator == null)
+ 		locator = new LocatorImpl ();
+ 	    
+ 	    // Unless the data is in US-ASCII or we're canonicalizing, write
+ 	    // the XML declaration if we know the encoding.  US-ASCII won't
+ 	    // normally get mangled by web server confusion about the
+ 	    // character encodings used.  Plus, it's an easy way to
+ 	    // ensure we can write ASCII that's unlikely to confuse
+ 	    // elderly HTML parsers.
+ 
+ 	    if (!canonical
+ 		    && dangerMask != (short) 0xff80
+ 		    && encoding != null) {
+ 		rawWrite ("<?xml version='1.0'");
+ 		rawWrite (" encoding='" + encoding + "'");
+ 		rawWrite ("?>");
+ 		newline ();
+ 	    }
+ 
+ 	    if (xhtml) {
+ 
+ 		rawWrite ("<!DOCTYPE html PUBLIC");
+ 		newline ();
+ 		rawWrite ("  '-//W3C//DTD XHTML 1.0 Transitional//EN'");
+ 		newline ();
+ 		rawWrite ("  '");
+ 		    // NOTE:  URL (above) matches the REC
+ 		rawWrite (xhtmlFullDTD);
+ 		rawWrite ("'>");
+ 		newline ();
+ 		newline ();
+ 
+ 		// fake the rest of the handler into ignoring
+ 		// everything until the root element, so any
+ 		// XHTML DTD comments, PIs, etc are ignored
+ 		startedDoctype = true;
+ 	    }
+ 
+ 	    entityNestLevel = 0;
+ 
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /**
+      * <b>SAX1</b>:  indicates the completion of a parse.
+      * Note that all complete SAX event streams make this call, even
+      * if an error is reported during a parse.
+      */
+     // NOT final
+     public void endDocument ()
+     throws SAXException
+     {
+ 	try {
+ 	    if (!canonical) {
+ 		newline ();
+ 		newline ();
+ 	    }
+ 	    out.close ();
+ 	    out = null;
+ 	    locator = null;
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     // XHTML elements declared as EMPTY print differently
+     final private static boolean isEmptyElementTag (String tag)
+     {
+ 	switch (tag.charAt (0)) {
+ 	  case 'a':	return "area".equals (tag);
+ 	  case 'b':	return "base".equals (tag)
+ 			    || "basefont".equals (tag)
+ 			    || "br".equals (tag);
+ 	  case 'c':	return "col".equals (tag);
+ 	  case 'f':	return "frame".equals (tag);
+ 	  case 'h':	return "hr".equals (tag);
+ 	  case 'i':	return "img".equals (tag)
+ 			    || "input".equals (tag)
+ 			    || "isindex".equals (tag);
+ 	  case 'l':	return "link".equals (tag);
+ 	  case 'm':	return "meta".equals (tag);
+ 	  case 'p':	return "param".equals (tag);
+ 	}
+ 	return false;
+     }
+ 
+     private static boolean indentBefore (String tag)
+     {
+ 	// basically indent before block content
+ 	// and within structure like tables, lists
+ 	switch (tag.charAt (0)) {
+ 	  case 'a':	return "applet".equals (tag);
+ 	  case 'b':	return "body".equals (tag)
+ 			    || "blockquote".equals (tag);
+ 	  case 'c':	return "center".equals (tag);
+ 	  case 'f':	return "frame".equals (tag)
+ 			    || "frameset".equals (tag);
+ 	  case 'h':	return "head".equals (tag);
+ 	  case 'm':	return "meta".equals (tag);
+ 	  case 'o':	return "object".equals (tag);
+ 	  case 'p':	return "param".equals (tag)
+ 			    || "pre".equals (tag);
+ 	  case 's':	return "style".equals (tag);
+ 	  case 't':	return "title".equals (tag)
+ 			    || "td".equals (tag)
+ 			    || "th".equals (tag);
+ 	}
+ 	// ... but not inline elements like "em", "b", "font"
+ 	return false;
+     }
+ 
+     private static boolean spaceBefore (String tag)
+     {
+ 	// blank line AND INDENT before certain structural content
+ 	switch (tag.charAt (0)) {
+ 	  case 'h':	return "h1".equals (tag)
+ 			    || "h2".equals (tag)
+ 			    || "h3".equals (tag)
+ 			    || "h4".equals (tag)
+ 			    || "h5".equals (tag)
+ 			    || "h6".equals (tag)
+ 			    || "hr".equals (tag);
+ 	  case 'l':	return "li".equals (tag);
+ 	  case 'o':	return "ol".equals (tag);
+ 	  case 'p':	return "p".equals (tag);
+ 	  case 't':	return "table".equals (tag)
+ 			    || "tr".equals (tag);
+ 	  case 'u':	return "ul".equals (tag);
+ 	}
+ 	return false;
+     }
+ 
+     // XHTML DTDs say these three have xml:space="preserve"
+     private static boolean spacePreserve (String tag)
+     {
+ 	return "pre".equals (tag)
+ 		|| "style".equals (tag)
+ 		|| "script".equals (tag);
+     }
+ 
+     /**
+      * <b>SAX2</b>:  ignored.
+      */
+     final public void startPrefixMapping (String prefix, String uri)
+ 	{}
+ 
+     /**
+      * <b>SAX2</b>:  ignored.
+      */
+     final public void endPrefixMapping (String prefix)
+ 	{}
+ 
+     private void writeStartTag (
+ 	String name,
+ 	Attributes atts,
+ 	boolean isEmpty
+     ) throws SAXException, IOException
+     {
+ 	rawWrite ('<');
+ 	rawWrite (name);
+ 
+ 	// write out attributes ... sorting is particularly useful
+ 	// with output that's been heavily defaulted.
+ 	if (atts != null && atts.getLength () != 0) {
+ 
+ 	    // Set up to write, with optional sorting
+ 	    int 	indices [] = new int [atts.getLength ()];
+ 
+ 	    for (int i= 0; i < indices.length; i++)
+ 		indices [i] = i;
+ 	    
+ 	    // optionally sort
+ 
+ // FIXME:  canon xml demands xmlns nodes go first,
+ // and sorting by URI first (empty first) then localname
+ // it should maybe use a different sort
+ 
+ 	    if (canonical || prettyPrinting) {
+ 
+ 		// insertion sort by attribute name
+ 		for (int i = 1; i < indices.length; i++) {
+ 		    int	n = indices [i], j;
+ 		    String	s = atts.getQName (n);
+ 
+ 		    for (j = i - 1; j >= 0; j--) {
+ 			if (s.compareTo (atts.getQName (indices [j]))
+ 				>= 0)
+ 			    break;
+ 			indices [j + 1] = indices [j];
+ 		    }
+ 		    indices [j + 1] = n;
+ 		}
+ 	    }
+ 
+ 	    // write, sorted or no
+ 	    for (int i= 0; i < indices.length; i++) {
+ 		String	s = atts.getQName (indices [i]);
+ 
+ 		    if (s == null || "".equals (s))
+ 			throw new IllegalArgumentException ("no XML name");
+ 		rawWrite (" ");
+ 		rawWrite (s);
+ 		rawWrite ("=");
+ 		writeQuotedValue (atts.getValue (indices [i]),
+ 		    CTX_ATTRIBUTE);
+ 	    }
+ 	}
+ 	if (isEmpty)
+ 	    rawWrite (" /");
+ 	rawWrite ('>');
+     }
+ 
+     /**
+      * <b>SAX2</b>:  indicates the start of an element.
+      * When XHTML is in use, avoid attribute values with
+      * line breaks or multiple whitespace characters, since
+      * not all user agents handle them correctly.
+      */
+     final public void startElement (
+ 	String uri,
+ 	String localName,
+ 	String qName,
+ 	Attributes atts
+     ) throws SAXException
+     {
+ 	startedDoctype = false;
+ 
+ 	if (locator == null)
+ 	    locator = new LocatorImpl ();
+ 	    
+ 	if (qName == null || "".equals (qName))
+ 	    throw new IllegalArgumentException ("no XML name");
+ 
+ 	try {
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    if (prettyPrinting) {
+ 		String whitespace = null;
+ 
+ 		if (xhtml && spacePreserve (qName))
+ 		    whitespace = "preserve";
+ 		else if (atts != null)
+ 		    whitespace = atts.getValue ("xml:space");
+ 		if (whitespace == null)
+ 		    whitespace = (String) space.peek ();
+ 		space.push (whitespace);
+ 
+ 		if ("default".equals (whitespace)) {
+ 		    if (xhtml) {
+ 			if (spaceBefore (qName)) {
+ 			    newline ();
+ 			    doIndent ();
+ 			} else if (indentBefore (qName))
+ 			    doIndent ();
+ 			// else it's inlined, modulo line length
+ 			// FIXME: incrementing element nest level
+ 			// for inlined elements causes ugliness
+ 		    } else
+ 			doIndent ();
+ 		}
+ 	    }
+ 	    elementNestLevel++;
+ 	    writeStartTag (qName, atts, xhtml && isEmptyElementTag (qName));
+ 
+ 	    if (xhtml) {
+ // FIXME: if this is an XHTML "pre" element, turn
+ // off automatic wrapping.
+ 	    }
+ 
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /**
+      * Writes an empty element.
+      * @see #startElement
+      */
+     public void writeEmptyElement (
+ 	String uri,
+ 	String localName,
+ 	String qName,
+ 	Attributes atts
+     ) throws SAXException
+     {
+ 	if (canonical) {
+ 	    startElement (uri, localName, qName, atts);
+ 	    endElement (uri, localName, qName);
+ 	} else {
+ 	    try {
+ 		writeStartTag (qName, atts, true);
+ 	    } catch (IOException e) {
+ 		fatal ("can't write", e);
+ 	    }
+ 	}
+     }
+ 
+ 
+     /** <b>SAX2</b>:  indicates the end of an element */
+     final public void endElement (String uri, String localName, String qName)
+     throws SAXException
+     {
+ 	if (qName == null || "".equals (qName))
+ 	    throw new IllegalArgumentException ("no XML name");
+ 
+ 	try {
+ 	    elementNestLevel--;
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    if (xhtml && isEmptyElementTag (qName))
+ 		return;
+ 	    rawWrite ("</");
+ 	    rawWrite (qName);
+ 	    rawWrite ('>');
+ 
+ 	    if (prettyPrinting) {
+ 		if (!space.empty ())
+ 		    space.pop ();
+ 		else
+ 		    fatal ("stack discipline", null);
+ 	    }
+ 	    if (elementNestLevel == 0)
+ 		inEpilogue = true;
+ 
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /** <b>SAX1</b>:  reports content characters */
+     final public void characters (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (locator == null)
+ 	    locator = new LocatorImpl ();
+ 
+ 	try {
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    if (inCDATA) {
+ 		escapeChars (ch, start, length, CTX_UNPARSED);
+ 	    } else {
+ 		escapeChars (ch, start, length, CTX_CONTENT);
+ 	    }
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /** <b>SAX1</b>:  reports ignorable whitespace */
+     final public void ignorableWhitespace (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (locator == null)
+ 	    locator = new LocatorImpl ();
+ 
+ 	try {
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    // don't forget to map NL to CRLF, CR, etc
+ 	    escapeChars (ch, start, length, CTX_CONTENT);
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /**
+      * <b>SAX1</b>:  reports a PI.
+      * This doesn't check for illegal target names, such as "xml" or "XML",
+      * or namespace-incompatible ones like "big:dog"; the caller is
+      * responsible for ensuring those names are legal.
+      */
+     final public void processingInstruction (String target, String data)
+     throws SAXException
+     {
+ 	if (locator == null)
+ 	    locator = new LocatorImpl ();
+ 
+ 	// don't print internal subset for XHTML
+ 	if (xhtml && startedDoctype)
+ 	    return;
+ 
+ 	// ancient HTML browsers might render these ... their loss.
+ 	// to prevent:  "if (xhtml) return;".
+ 
+ 	try {
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    if (canonical && inEpilogue)
+ 		newline ();
+ 	    rawWrite ("<?");
+ 	    rawWrite (target);
+ 	    rawWrite (' ');
+ 	    escapeChars (data.toCharArray (), -1, -1, CTX_UNPARSED);
+ 	    rawWrite ("?>");
+ 	    if (elementNestLevel == 0 && !(canonical && inEpilogue))
+ 		newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /** <b>SAX1</b>: indicates a non-expanded entity reference */
+     public void skippedEntity (String name)
+     throws SAXException
+     {
+ 	try {
+ 	    rawWrite ("&");
+ 	    rawWrite (name);
+ 	    rawWrite (";");
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     // SAX2 LexicalHandler
+ 
+     /** <b>SAX2</b>:  called before parsing CDATA characters */
+     final public void startCDATA ()
+     throws SAXException
+     {
+ 	if (locator == null)
+ 	    locator = new LocatorImpl ();
+ 	
+ 	if (canonical)
+ 	    return;
+ 
+ 	try {
+ 	    inCDATA = true;
+ 	    if (entityNestLevel == 0)
+ 		rawWrite ("<![CDATA[");
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /** <b>SAX2</b>:  called after parsing CDATA characters */
+     final public void endCDATA ()
+     throws SAXException
+     {
+ 	if (canonical)
+ 	    return;
+ 
+ 	try {
+ 	    inCDATA = false;
+ 	    if (entityNestLevel == 0)
+ 		rawWrite ("]]>");
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /**
+      * <b>SAX2</b>:  called when the doctype is partially parsed
+      * Note that this, like other doctype related calls, is ignored
+      * when XHTML is in use.
+      */
+     final public void startDTD (String name, String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (locator == null)
+ 	    locator = new LocatorImpl ();
+ 	if (xhtml)
+ 	    return;
+ 	try {
+ 	    inDoctype = startedDoctype = true;
+ 	    if (canonical)
+ 		return;
+ 	    rawWrite ("<!DOCTYPE ");
+ 	    rawWrite (name);
+ 	    rawWrite (' ');
+ 
+ 	    if (!expandingEntities) {
+ 		if (publicId != null)
+ 		    rawWrite ("PUBLIC '" + publicId + "' '" + systemId + "' ");
+ 		else if (systemId != null)
+ 		    rawWrite ("SYSTEM '" + systemId + "' ");
+ 	    }
+ 
+ 	    rawWrite ('[');
+ 	    newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /** <b>SAX2</b>:  called after the doctype is parsed */
+     final public void endDTD ()
+     throws SAXException
+     {
+ 	inDoctype = false;
+ 	if (canonical || xhtml)
+ 	    return;
+ 	try {
+ 	    rawWrite ("]>");
+ 	    newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /**
+      * <b>SAX2</b>:  called before parsing a general entity in content
+      */
+     final public void startEntity (String name)
+     throws SAXException
+     {
+ 	try {
+ 	    boolean	writeEOL = true;
+ 
+ 	    // Predefined XHTML entities (for characters) will get
+ 	    // mapped back later.
+ 	    if (xhtml || expandingEntities)
+ 		return;
+ 
+ 	    entityNestLevel++;
+ 	    if (name.equals ("[dtd]"))
+ 		return;
+ 	    if (entityNestLevel != 1)
+ 		return;
+ 	    if (!name.startsWith ("%")) {
+ 		writeEOL = false;
+ 		rawWrite ('&');
+ 	    }
+ 	    rawWrite (name);
+ 	    rawWrite (';');
+ 	    if (writeEOL)
+ 		newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /**
+      * <b>SAX2</b>:  called after parsing a general entity in content
+      */
+     final public void endEntity (String name)
+     throws SAXException
+     {
+ 	if (xhtml || expandingEntities)
+ 	    return;
+ 	entityNestLevel--;
+     }
+ 
+     /**
+      * <b>SAX2</b>:  called when comments are parsed.
+      * When XHTML is used, the old HTML tradition of using comments
+      * to for inline CSS, or for JavaScript code is  discouraged.
+      * This is because XML processors are encouraged to discard, on
+      * the grounds that comments are for users (and perhaps text
+      * editors) not programs.  Instead, use external scripts
+      */
+     final public void comment (char ch [], int start, int length)
+     throws SAXException
+     {
+ 	if (locator == null)
+ 	    locator = new LocatorImpl ();
+ 
+ 	// don't print internal subset for XHTML
+ 	if (xhtml && startedDoctype)
+ 	    return;
+ 	// don't print comment in doctype for canon xml
+ 	if (canonical && inDoctype)
+ 	    return;
+ 
+ 	try {
+ 	    boolean indent;
+ 
+ 	    if (prettyPrinting && space.empty ())
+ 		fatal ("stack discipline", null);
+ 	    indent = prettyPrinting && "default".equals (space.peek ());
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    if (indent)
+ 		doIndent ();
+ 	    if (canonical && inEpilogue)
+ 		newline ();
+ 	    rawWrite ("<!--");
+ 	    escapeChars (ch, start, length, CTX_UNPARSED);
+ 	    rawWrite ("-->");
+ 	    if (indent)
+ 		doIndent ();
+ 	    if (elementNestLevel == 0 && !(canonical && inEpilogue))
+ 		newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     // SAX1 DTDHandler
+ 
+     /** <b>SAX1</b>:  called on notation declarations */
+     final public void notationDecl (String name,
+     	String publicId, String systemId)
+     throws SAXException
+     {
+ 	if (xhtml)
+ 	    return;
+ 	try {
+ 	    // At this time, only SAX2 callbacks start these.
+ 	    if (!startedDoctype)
+ 		return;
+ 
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    rawWrite ("<!NOTATION " + name + " ");
+ 	    if (publicId != null)
+ 		rawWrite ("PUBLIC \"" + publicId + '"');
+ 	    else
+ 		rawWrite ("SYSTEM ");
+ 	    if (systemId != null)
+ 		rawWrite ('"' + systemId + '"');
+ 	    rawWrite (">");
+ 	    newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /** <b>SAX1</b>:  called on unparsed entity declarations */
+     final public void unparsedEntityDecl (String name,
+ 	String publicId, String systemId,
+ 	String notationName)
+     throws SAXException
+     {
+ 	if (xhtml)
+ 	    return;
+ 	try {
+ 	    // At this time, only SAX2 callbacks start these.
+ 	    if (!startedDoctype)  {
+ 		// FIXME: write to temporary buffer, and make the start
+ 		// of the root element write these declarations.
+ 		return;
+ 	    }
+ 
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    rawWrite ("<!ENTITY " + name + " ");
+ 	    if (publicId != null)
+ 		rawWrite ("PUBLIC \"" + publicId + '"');
+ 	    else
+ 		rawWrite ("SYSTEM ");
+ 	    rawWrite ('"' + systemId + '"');
+ 	    rawWrite (" NDATA " + notationName + ">");
+ 	    newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     // SAX2 DeclHandler
+ 
+     /** <b>SAX2</b>:  called on attribute declarations */
+     final public void attributeDecl (String eName, String aName,
+ 	    String type, String mode, String value)
+     throws SAXException
+     {
+ 	if (xhtml)
+ 	    return;
+ 	try {
+ 	    // At this time, only SAX2 callbacks start these.
+ 	    if (!startedDoctype)
+ 		return;
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    rawWrite ("<!ATTLIST " + eName + ' ' + aName + ' ');
+ 	    rawWrite (type);
+ 	    rawWrite (' ');
+ 	    if (mode != null)
+ 		rawWrite (mode + ' ');
+ 	    if (value != null) 
+ 		writeQuotedValue (value, CTX_ATTRIBUTE);
+ 	    rawWrite ('>');
+ 	    newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /** <b>SAX2</b>:  called on element declarations */
+     final public void elementDecl (String name, String model)
+     throws SAXException
+     {
+ 	if (xhtml)
+ 	    return;
+ 	try {
+ 	    // At this time, only SAX2 callbacks start these.
+ 	    if (!startedDoctype)
+ 		return;
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    rawWrite ("<!ELEMENT " + name + ' ' + model + '>');
+ 	    newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /** <b>SAX2</b>:  called on external entity declarations */
+     final public void externalEntityDecl (
+ 	String name,
+ 	String publicId,
+ 	String systemId)
+     throws SAXException
+     {
+ 	if (xhtml)
+ 	    return;
+ 	try {
+ 	    // At this time, only SAX2 callbacks start these.
+ 	    if (!startedDoctype)
+ 		return;
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    rawWrite ("<!ENTITY ");
+ 	    if (name.startsWith ("%")) {
+ 		rawWrite ("% ");
+ 		rawWrite (name.substring (1));
+ 	    } else
+ 		rawWrite (name);
+ 	    if (publicId != null)
+ 		rawWrite (" PUBLIC \"" + publicId + '"');
+ 	    else
+ 		rawWrite (" SYSTEM ");
+ 	    rawWrite ('"' + systemId + "\">");
+ 	    newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     /** <b>SAX2</b>:  called on internal entity declarations */
+     final public void internalEntityDecl (String name, String value)
+     throws SAXException
+     {
+ 	if (xhtml)
+ 	    return;
+ 	try {
+ 	    // At this time, only SAX2 callbacks start these.
+ 	    if (!startedDoctype)
+ 		return;
+ 	    if (entityNestLevel != 0)
+ 		return;
+ 	    rawWrite ("<!ENTITY ");
+ 	    if (name.startsWith ("%")) {
+ 		rawWrite ("% ");
+ 		rawWrite (name.substring (1));
+ 	    } else
+ 		rawWrite (name);
+ 	    rawWrite (' ');
+ 	    writeQuotedValue (value, CTX_ENTITY);
+ 	    rawWrite ('>');
+ 	    newline ();
+ 	} catch (IOException e) {
+ 	    fatal ("can't write", e);
+ 	}
+     }
+ 
+     private void writeQuotedValue (String value, int code)
+     throws SAXException, IOException
+     {
+ 	char	buf [] = value.toCharArray ();
+ 	int	off = 0, len = buf.length;
+ 
+ 	// we can't add line breaks to attribute/entity/... values
+ 	noWrap = true;
+ 	rawWrite ('"');
+ 	escapeChars (buf, off, len, code);
+ 	rawWrite ('"');
+ 	noWrap = false;
+     }
+     
+     // From "HTMLlat1x.ent" ... names of entities for ISO-8859-1
+     // (Latin/1) characters, all codes:  160-255 (0xA0-0xFF).
+     // Codes 128-159 have no assigned values.
+     private static final String HTMLlat1x [] = {
+ 	// 160
+ 	"nbsp", "iexcl", "cent", "pound", "curren",
+ 	"yen", "brvbar", "sect", "uml", "copy",
+ 
+ 	// 170
+ 	"ordf", "laquo", "not", "shy", "reg",
+ 	"macr", "deg", "plusmn", "sup2", "sup3",
+ 
+ 	// 180
+ 	"acute", "micro", "para", "middot", "cedil",
+ 	"sup1", "ordm", "raquo", "frac14", "frac12",
+ 
+ 	// 190
+ 	"frac34", "iquest", "Agrave", "Aacute", "Acirc",
+ 	"Atilde", "Auml", "Aring", "AElig", "Ccedil",
+ 
+ 	// 200
+ 	"Egrave", "Eacute", "Ecirc", "Euml", "Igrave",
+ 	"Iacute", "Icirc", "Iuml", "ETH", "Ntilde",
+ 
+ 	// 210
+ 	"Ograve", "Oacute", "Ocirc", "Otilde", "Ouml",
+ 	"times", "Oslash", "Ugrave", "Uacute", "Ucirc",
+ 
+ 	// 220
+ 	"Uuml", "Yacute", "THORN", "szlig", "agrave",
+ 	"aacute", "acirc", "atilde", "auml", "aring",
+ 
+ 	// 230
+ 	"aelig", "ccedil", "egrave", "eacute", "ecirc",
+ 	"euml", "igrave", "iacute", "icirc", "iuml",
+ 
+ 	// 240
+ 	"eth", "ntilde", "ograve", "oacute", "ocirc",
+ 	"otilde", "ouml", "divide", "oslash", "ugrave",
+ 
+ 	// 250
+ 	"uacute", "ucirc", "uuml", "yacute", "thorn",
+ 	"yuml"
+     };
+ 
+     // From "HTMLsymbolx.ent" ... some of the symbols that
+     // we can conveniently handle.  Entities for the Greek.
+     // alphabet (upper and lower cases) are compact.
+     private static final String HTMLsymbolx_GR [] = {
+ 	// 913
+ 	"Alpha", "Beta", "Gamma", "Delta", "Epsilon",
+ 	"Zeta", "Eta", "Theta", "Iota", "Kappa",
+ 
+ 	// 923
+ 	"Lambda", "Mu", "Nu", "Xi", "Omicron",
+ 	"Pi", "Rho", null, "Sigma", "Tau",
+ 
+ 	// 933
+ 	"Upsilon", "Phi", "Chi", "Psi", "Omega"
+     };
+ 
+     private static final String HTMLsymbolx_gr [] = {
+ 	// 945
+ 	"alpha", "beta", "gamma", "delta", "epsilon",
+ 	"zeta", "eta", "theta", "iota", "kappa",
+ 
+ 	// 955
+ 	"lambda", "mu", "nu", "xi", "omicron",
+ 	"pi", "rho", "sigmaf", "sigma", "tau",
+ 
+ 	// 965
+ 	"upsilon", "phi", "chi", "psi", "omega"
+     };
+ 
+ 
+     // General routine to write text and substitute predefined
+     // entities (XML, and a special case for XHTML) as needed.
+     private void escapeChars (char buf [], int off, int len, int code)
+     throws SAXException, IOException
+     {
+ 	int	first = 0;
+ 
+ 	if (off < 0) {
+ 	    off = 0;
+ 	    len = buf.length;
+ 	}
+ 	for (int i = 0; i < len; i++) {
+ 	    String	esc;
+ 	    char 	c = buf [off + i];
+ 
+ 	    switch (c) {
+ 	      // Note that CTX_ATTRIBUTE isn't explicitly tested here;
+ 	      // all syntax delimiters are escaped in CTX_ATTRIBUTE,
+ 	      // otherwise it's similar to CTX_CONTENT
+ 
+ 	      // ampersand flags entity references; entity replacement
+ 	      // text has unexpanded references, other text doesn't.
+ 	      case '&':
+ 		if (code == CTX_ENTITY || code == CTX_UNPARSED)
+ 		    continue;
+ 		esc = "amp";
+ 		break;
+ 
+ 	      // attributes and text may NOT have literal '<', but
+ 	      // entities may have markup constructs
+ 	      case '<':
+ 		if (code == CTX_ENTITY || code == CTX_UNPARSED)
+ 		    continue;
+ 		esc = "lt";
+ 		break;
+ 
+ 	      // as above re markup constructs; but otherwise
+ 	      // except when canonicalizing, this is for consistency
+ 	      case '>':
+ 		if (code == CTX_ENTITY || code == CTX_UNPARSED)
+ 		    continue;
+ 	        esc = "gt";
+ 		break;
+ 	      case '\'':
+ 		if (code == CTX_CONTENT || code == CTX_UNPARSED)
+ 		    continue;
+ 		if (canonical)
+ 		    continue;
+ 		esc = "apos";
+ 		break;
+ 
+ 	      // needed when printing quoted attribute/entity values
+ 	      case '"':
+ 		if (code == CTX_CONTENT || code == CTX_UNPARSED)
+ 		    continue;
+ 		esc = "quot";
+ 		break;
+ 
+ 	      // make line ends work per host OS convention
+ 	      case '\n':
+ 		esc = eol;
+ 		break;
+ 
+ 	      //
+ 	      // No other characters NEED special treatment ... except
+ 	      // for encoding-specific issues, like whether the character
+ 	      // can really be represented in that encoding.
+ 	      //
+ 	      default:
+ 		//
+ 		// There are characters we can never write safely; getting
+ 		// them is an error.
+ 		//
+ 		//   (a) They're never legal in XML ... detected by range 
+ 		//	checks, and (eventually) by remerging surrogate
+ 		//	pairs on output.  (Easy error for apps to prevent.)
+ 		//
+ 		//   (b) This encoding can't represent them, and we
+ 		//	can't make reference substitution (e.g. inside
+ 		//	CDATA sections, names, PI data, etc).  (Hard for
+ 		//	apps to prevent, except by using UTF-8 or UTF-16
+ 		//	as their output encoding.)
+ 		//
+ 		// We know a very little bit about what characters
+ 		// the US-ASCII and ISO-8859-1 encodings support.  For
+ 		// other encodings we can't detect the second type of
+ 		// error at all.  (Never an issue for UTF-8 or UTF-16.)
+ 		//
+ 
+ // FIXME:  CR in CDATA is an error; in text, turn to a char ref
+ 
+ // FIXME:  CR/LF/TAB in attributes should become char refs
+ 
+ 		if ((c > 0xfffd)
+ 			|| ((c < 0x0020) && !((c == 0x0009)
+ 				|| (c == 0x000A) || (c == 0x000D)))
+ 			|| (((c & dangerMask) != 0)
+ 			    && (code == CTX_UNPARSED))) {
+ 
+ 		    // if case (b) in CDATA, we might end the section,
+ 		    // write a reference, then restart ... possible
+ 		    // in one DOM L3 draft.
+ 
+ 		    throw new CharConversionException (
+ 			    "Illegal or non-writable character: U+"
+ 			    + Integer.toHexString (c));
+ 		}
+ 
+ 		//
+ 		// If the output encoding represents the character
+ 		// directly, let it do so!  Else we'll escape it.
+ 		//
+ 		if ((c & dangerMask) == 0)
+ 		    continue;
+ 		esc = null;
+ 
+ 		// Avoid numeric refs where symbolic ones exist, as
+ 		// symbolic ones make more sense to humans reading!
+ 		if (xhtml) {
+ 		    // all the HTMLlat1x.ent entities
+ 		    // (all the "ISO-8859-1" characters)
+ 		    if (c >= 160 && c <= 255)
+ 			esc = HTMLlat1x [c - 160];
+ 
+ 		    // not quite half the HTMLsymbolx.ent entities
+ 		    else if (c >= 913 && c <= 937)
+ 			esc = HTMLsymbolx_GR [c - 913];
+ 		    else if (c >= 945 && c <= 969)
+ 			esc = HTMLsymbolx_gr [c - 945];
+ 
+ 		    else switch (c) {
+ 			// all of the HTMLspecialx.ent entities
+ 			case  338: esc = "OElig";	break;
+ 			case  339: esc = "oelig";	break;
+ 			case  352: esc = "Scaron";	break;
+ 			case  353: esc = "scaron";	break;
+ 			case  376: esc = "Yuml";	break;
+ 			case  710: esc = "circ";	break;
+ 			case  732: esc = "tilde";	break;
+ 			case 8194: esc = "ensp";	break;
+ 			case 8195: esc = "emsp";	break;
+ 			case 8201: esc = "thinsp";	break;
+ 			case 8204: esc = "zwnj";	break;
+ 			case 8205: esc = "zwj";		break;
+ 			case 8206: esc = "lrm";		break;
+ 			case 8207: esc = "rlm";		break;
+ 			case 8211: esc = "ndash";	break;
+ 			case 8212: esc = "mdash";	break;
+ 			case 8216: esc = "lsquo";	break;
+ 			case 8217: esc = "rsquo";	break;
+ 			case 8218: esc = "sbquo";	break;
+ 			case 8220: esc = "ldquo";	break;
+ 			case 8221: esc = "rdquo";	break;
+ 			case 8222: esc = "bdquo";	break;
+ 			case 8224: esc = "dagger";	break;
+ 			case 8225: esc = "Dagger";	break;
+ 			case 8240: esc = "permil";	break;
+ 			case 8249: esc = "lsaquo";	break;
+ 			case 8250: esc = "rsaquo";	break;
+ 			case 8364: esc = "euro";	break;
+ 
+ 			// the other HTMLsymbox.ent entities
+ 			case  402: esc = "fnof";	break;
+ 			case  977: esc = "thetasym";	break;
+ 			case  978: esc = "upsih";	break;
+ 			case  982: esc = "piv";		break;
+ 			case 8226: esc = "bull";	break;
+ 			case 8230: esc = "hellip";	break;
+ 			case 8242: esc = "prime";	break;
+ 			case 8243: esc = "Prime";	break;
+ 			case 8254: esc = "oline";	break;
+ 			case 8260: esc = "frasl";	break;
+ 			case 8472: esc = "weierp";	break;
+ 			case 8465: esc = "image";	break;
+ 			case 8476: esc = "real";	break;
+ 			case 8482: esc = "trade";	break;
+ 			case 8501: esc = "alefsym";	break;
+ 			case 8592: esc = "larr";	break;
+ 			case 8593: esc = "uarr";	break;
+ 			case 8594: esc = "rarr";	break;
+ 			case 8595: esc = "darr";	break;
+ 			case 8596: esc = "harr";	break;
+ 			case 8629: esc = "crarr";	break;
+ 			case 8656: esc = "lArr";	break;
+ 			case 8657: esc = "uArr";	break;
+ 			case 8658: esc = "rArr";	break;
+ 			case 8659: esc = "dArr";	break;
+ 			case 8660: esc = "hArr";	break;
+ 			case 8704: esc = "forall";	break;
+ 			case 8706: esc = "part";	break;
+ 			case 8707: esc = "exist";	break;
+ 			case 8709: esc = "empty";	break;
+ 			case 8711: esc = "nabla";	break;
+ 			case 8712: esc = "isin";	break;
+ 			case 8713: esc = "notin";	break;
+ 			case 8715: esc = "ni";		break;
+ 			case 8719: esc = "prod";	break;
+ 			case 8721: esc = "sum";		break;
+ 			case 8722: esc = "minus";	break;
+ 			case 8727: esc = "lowast";	break;
+ 			case 8730: esc = "radic";	break;
+ 			case 8733: esc = "prop";	break;
+ 			case 8734: esc = "infin";	break;
+ 			case 8736: esc = "ang";		break;
+ 			case 8743: esc = "and";		break;
+ 			case 8744: esc = "or";		break;
+ 			case 8745: esc = "cap";		break;
+ 			case 8746: esc = "cup";		break;
+ 			case 8747: esc = "int";		break;
+ 			case 8756: esc = "there4";	break;
+ 			case 8764: esc = "sim";		break;
+ 			case 8773: esc = "cong";	break;
+ 			case 8776: esc = "asymp";	break;
+ 			case 8800: esc = "ne";		break;
+ 			case 8801: esc = "equiv";	break;
+ 			case 8804: esc = "le";		break;
+ 			case 8805: esc = "ge";		break;
+ 			case 8834: esc = "sub";		break;
+ 			case 8835: esc = "sup";		break;
+ 			case 8836: esc = "nsub";	break;
+ 			case 8838: esc = "sube";	break;
+ 			case 8839: esc = "supe";	break;
+ 			case 8853: esc = "oplus";	break;
+ 			case 8855: esc = "otimes";	break;
+ 			case 8869: esc = "perp";	break;
+ 			case 8901: esc = "sdot";	break;
+ 			case 8968: esc = "lceil";	break;
+ 			case 8969: esc = "rceil";	break;
+ 			case 8970: esc = "lfloor";	break;
+ 			case 8971: esc = "rfloor";	break;
+ 			case 9001: esc = "lang";	break;
+ 			case 9002: esc = "rang";	break;
+ 			case 9674: esc = "loz";		break;
+ 			case 9824: esc = "spades";	break;
+ 			case 9827: esc = "clubs";	break;
+ 			case 9829: esc = "hearts";	break;
+ 			case 9830: esc = "diams";	break;
+ 		    }
+ 		}
+ 
+ 		// else escape with numeric char refs
+ 		if (esc == null) {
+ 		    stringBuf.setLength (0);
+ 		    stringBuf.append ("#x");
+ 		    stringBuf.append (Integer.toHexString (c).toUpperCase ());
+ 		    esc = stringBuf.toString ();
+ 
+ 		    // FIXME:  We don't write surrogate pairs correctly.
+ 		    // They should work as one ref per character, since
+ 		    // each pair is one character.  For reading back into
+ 		    // Unicode, it matters beginning in Unicode 3.1 ...
+ 		}
+ 		break;
+ 	    }
+ 	    if (i != first)
+ 		rawWrite (buf, off + first, i - first);
+ 	    first = i + 1;
+ 	    if (esc == eol)
+ 		newline ();
+ 	    else {
+ 		rawWrite ('&');
+ 		rawWrite (esc);
+ 		rawWrite (';');
+ 	    }
+ 	}
+ 	if (first < len)
+ 	    rawWrite (buf, off + first, len - first);
+     }
+ 
+ 
+ 
+     private void newline ()
+     throws SAXException, IOException
+     {
+ 	out.write (eol);
+ 	column = 0;
+     }
+ 
+     private void doIndent ()
+     throws SAXException, IOException
+     {
+ 	int	space = elementNestLevel * 2;
+ 
+ 	newline ();
+ 	column = space;
+ 	// track tabs only at line starts
+ 	while (space > 8) {
+ 	    out.write ("\t");
+ 	    space -= 8;
+ 	}
+ 	while (space > 0) {
+ 	    out.write ("  ");
+ 	    space -= 2;
+ 	}
+     }
+ 
+     private void rawWrite (char c)
+     throws IOException
+     {
+ 	out.write (c);
+ 	column++;
+     }
+ 
+     private void rawWrite (String s)
+     throws SAXException, IOException
+     {
+ 	if (prettyPrinting && "default".equals (space.peek ())) {
+ 	    char data [] = s.toCharArray ();
+ 	    rawWrite (data, 0, data.length);
+ 	} else {
+ 	    out.write (s);
+ 	    column += s.length ();
+ 	}
+     }
+ 
+     // NOTE:  if xhtml, the REC gives some rules about whitespace
+     // which we could follow ... notably, many places where conformant
+     // agents "must" consolidate/normalize whitespace.  Line ends can
+     // be removed there, etc.  This may not be the right place to do
+     // such mappings though.
+ 
+     // Line buffering may help clarify algorithms and improve results.
+ 
+     // It's likely xml:space needs more attention.
+ 
+     private void rawWrite (char buf [], int offset, int length)
+     throws SAXException, IOException
+     {
+ 	boolean		wrap;
+ 
+ 	if (prettyPrinting && space.empty ())
+ 	    fatal ("stack discipline", null);
+ 
+ 	wrap = prettyPrinting && "default".equals (space.peek ());
+ 	if (!wrap) {
+ 	    out.write (buf, offset, length);
+ 	    column += length;
+ 	    return;
+ 	}
+ 
+ 	// we're pretty printing and want to fill lines out only
+ 	// to the desired line length.
+ 	while (length > 0) {
+ 	    int		target = lineLength - column;
+ 	    boolean	wrote = false;
+ 
+ 	    // Do we even have a problem?
+ 	    if (target > length || noWrap) {
+ 		out.write (buf, offset, length);
+ 		column += length;
+ 		return;
+ 	    }
+ 
+ 	    // break the line at a space character, trying to fill
+ 	    // as much of the line as possible.
+ 	    char	c;
+ 
+ 	    for (int i = target - 1; i >= 0; i--) {
+ 		if ((c = buf [offset + i]) == ' ' || c == '\t') {
+ 		    i++;
+ 		    out.write (buf, offset, i);
+ 		    doIndent ();
+ 		    offset += i;
+ 		    length -= i;
+ 		    wrote = true;
+ 		    break;
+ 		}
+ 	    }
+ 	    if (wrote)
+ 		continue;
+ 	    
+ 	    // no space character permitting break before target
+ 	    // line length is filled.  So, take the next one.
+ 	    if (target < 0)
+ 		target = 0;
+ 	    for (int i = target; i < length; i++)
+ 		if ((c = buf [offset + i]) == ' ' || c == '\t') {
+ 		    i++;
+ 		    out.write (buf, offset, i);
+ 		    doIndent ();
+ 		    offset += i;
+ 		    length -= i;
+ 		    wrote = true;
+ 		    break;
+ 		}
+ 	    if (wrote)
+ 		continue;
+ 	    
+ 	    // no such luck.
+ 	    out.write (buf, offset, length);
+ 	    column += length;
+ 	    break;
+ 	}
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/util/package.html gcc-4.1.0/libjava/classpath/gnu/xml/util/package.html
*** gcc-4.0.2/libjava/classpath/gnu/xml/util/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/util/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ <!DOCTYPE html PUBLIC
+     "-//W3C//DTD XHTML 1.0 Transitional//EN"
+     "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-transitional.dtd">
+ 
+ <html><head><title> org.brownell.xml package </title> </head>
+ <!--
+ /*
+  * Copyright (C) 1999,2000 The Free Software Foundation, Inc.
+  */
+ -->
+ <body>
+     <p> This package contains XML utilities, including SAX2 XML writers
+     and a parser of DOM trees, plus a command line driver.
+     That <a href="DoParse.html">driver</a>
+     connects parsers simple processing pipelines.
+     It can be handy for command line validation or
+     transformation tasks, possibly in batch mode,
+     or within Makefiles. </p>
+ 
+ </body></html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/AndExpr.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/AndExpr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/AndExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/AndExpr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* AndExpr.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Logical and.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class AndExpr
+   extends Expr
+ {
+ 
+   final Expr lhs;
+   final Expr rhs;
+ 
+   public AndExpr(Expr lhs, Expr rhs)
+   {
+     this.lhs = lhs;
+     this.rhs = rhs;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object left = lhs.evaluate(context, pos, len);
+     if (!_boolean(context, left))
+       {
+         return Boolean.FALSE;
+       }
+     Object right = rhs.evaluate(context, pos, len);
+     return _boolean(context, right) ? Boolean.TRUE : Boolean.FALSE;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new AndExpr(lhs.clone(context), rhs.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (lhs.references(var) || rhs.references(var));
+   }
+ 
+   public String toString()
+   {
+     return lhs + " and " + rhs;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/ArithmeticExpr.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/ArithmeticExpr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/ArithmeticExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/ArithmeticExpr.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,168 ----
+ /* ArithmeticExpr.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Binary arithmetic expression.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ArithmeticExpr
+   extends Expr
+ {
+ 
+   static final int ADD = 0;
+   static final int SUBTRACT = 1;
+   static final int MULTIPLY = 2;
+   static final int DIVIDE = 3;
+   static final int MODULO = 4;
+ 
+   final Expr lhs;
+   final Expr rhs;
+   final int op;
+ 
+   ArithmeticExpr(Expr lhs, Expr rhs, int op)
+   {
+     this.lhs = lhs;
+     this.rhs = rhs;
+     switch (op)
+       {
+       case ADD:
+       case SUBTRACT:
+       case MULTIPLY:
+       case DIVIDE:
+       case MODULO:
+ 				this.op = op;
+ 				break;
+       default:
+         throw new IllegalArgumentException();
+       }
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object left = lhs.evaluate(context, pos, len);
+     Object right = rhs.evaluate(context, pos, len);
+ 
+     double ln = _number(context, left);
+     double rn = _number(context, right);
+     switch (op)
+       {
+       case ADD:
+         return new Double(ln + rn);
+       case SUBTRACT:
+         return new Double(ln - rn);
+       case MULTIPLY:
+         return new Double(ln * rn);
+       case DIVIDE:
+         if (rn == 0.0d || rn == -0.0d)
+           {
+             if (ln == 0.0d || ln == -0.0d)
+               {
+                 return new Double(Double.NaN);
+               }
+             else
+               {
+                 return new Double(ln < 0.0d ?
+                                   Double.NEGATIVE_INFINITY :
+                                   Double.POSITIVE_INFINITY);
+               }
+           }
+         return new Double(ln / rn);
+       case MODULO:
+         if (rn == 0.0d || rn == 0.0d)
+           {
+             if (ln == 0.0d || ln == -0.0d)
+               {
+                 return new Double(Double.NaN);
+               }
+             else
+               {
+                 return new Double(ln < 0.0d ?
+                                   Double.NEGATIVE_INFINITY :
+                                   Double.POSITIVE_INFINITY);
+               }
+           }
+         return new Double(ln % rn);
+       default:
+         throw new IllegalStateException();
+       }
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new ArithmeticExpr(lhs.clone(context), rhs.clone(context), op);
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (lhs.references(var) || rhs.references(var));
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer();
+     buf.append(lhs);
+     buf.append(' ');
+     switch (op)
+       {
+       case ADD:
+         buf.append('+');
+         break;
+       case SUBTRACT:
+         buf.append('-');
+         break;
+       case MULTIPLY:
+         buf.append('*');
+         break;
+       case DIVIDE:
+         buf.append("div");
+         break;
+       case MODULO:
+         buf.append("mod");
+         break;
+       }
+     buf.append(' ');
+     buf.append(rhs);
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/BooleanFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/BooleanFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/BooleanFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/BooleanFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,95 ----
+ /* BooleanFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>boolean</code> function converts its argument to a boolean as
+  * follows:
+  * <ul>
+  * <li>a number is true if and only if it is neither positive or negative
+  * zero nor NaN</li>
+  * <li>a node-set is true if and only if it is non-empty</li>
+  * <li>a string is true if and only if its length is non-zero</li>
+  * <li>an object of a type other than the four basic types is converted to a
+  * boolean in a way that is dependent on that type</li>
+  * </ul>
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class BooleanFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+   
+   BooleanFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+ 
+   BooleanFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+   
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = arg.evaluate(context, pos, len);
+     return _boolean(context, val) ? Boolean.TRUE : Boolean.FALSE;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new BooleanFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+   
+   public String toString()
+   {
+     return "boolean(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/CeilingFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/CeilingFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/CeilingFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/CeilingFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* CeilingFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>ceiling</code> function returns the smallest (closest to
+  * negative infinity) number that is not less than the argument and that
+  * is an integer.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class CeilingFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+   
+   CeilingFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+   
+   CeilingFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+   
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = arg.evaluate(context, pos, len);
+     double n = _number(context, val);
+     return new Double(Math.ceil(n));
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new CeilingFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+   
+   public String toString()
+   {
+     return "ceiling(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/ConcatFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/ConcatFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/ConcatFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/ConcatFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* ConcatFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>concat</code> function returns the concatenation of its arguments.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ConcatFunction
+   extends Expr
+ {
+ 
+   final List args;
+ 
+   ConcatFunction(List args)
+   {
+     this.args = args;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     StringBuffer buf = new StringBuffer();
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         Expr arg = (Expr) i.next();
+         Object val = arg.evaluate(context, pos, len);
+         buf.append(_string(context, val));
+       }
+     return buf.toString();
+   }
+ 
+   public Expr clone(Object context)
+   {
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     return new ConcatFunction(args2);
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer("concat(");
+     int len = args.size();
+     for (int i = 0; i < len; i++)
+       {
+         if (i > 0)
+           {
+             buf.append(',');
+           }
+         buf.append(args.get(i));
+       }
+     buf.append(')');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Constant.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Constant.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Constant.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Constant.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* Constant.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Constant value (string literal or number).
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class Constant
+   extends Expr
+ {
+ 
+   final Object value;
+ 
+   public Constant(Object value)
+   {
+     this.value = value;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     return value;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new Constant(value);
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString()
+   {
+     String ret = value.toString();
+     if (value instanceof String)
+       {
+         if (ret.indexOf('\'') == -1)
+           {
+             return '\'' + ret + '\'';
+           }
+         else
+           {
+             return '"' + ret + '"';
+           }
+       }
+     if (value instanceof Double)
+       {
+         if (ret.endsWith(".0"))
+           {
+             ret = ret.substring(0, ret.length() - 2);
+           }
+       }
+     return ret;
+   }
+   
+ } 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/ContainsFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/ContainsFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/ContainsFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/ContainsFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* ContainsFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>contains</code> function returns true if the first argument
+  * string contains the second argument string, and otherwise returns false.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ContainsFunction
+   extends Expr
+ {
+ 
+   final Expr arg1;
+   final Expr arg2;
+ 
+   ContainsFunction(List args)
+   {
+     this((Expr) args.get(0), (Expr) args.get(1));
+   }
+ 
+   ContainsFunction(Expr arg1, Expr arg2)
+   {
+     this.arg1 = arg1;
+     this.arg2 = arg2;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val1 = arg1.evaluate(context, pos, len);
+     Object val2 = arg2.evaluate(context, pos, len);
+     String s1 = _string(context, val1);
+     String s2 = _string(context, val2);
+     return (s1.indexOf(s2) != -1) ? Boolean.TRUE : Boolean.FALSE;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new ContainsFunction(arg1.clone(context), arg2.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg1.references(var) || arg2.references(var));
+   }
+ 
+   public String toString()
+   {
+     return "contains(" + arg1 + "," + arg2 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/CountFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/CountFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/CountFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/CountFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* CountFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>count</code> function returns the number of nodes in the
+  * argument node-set.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class CountFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   CountFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+ 
+   CountFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = arg.evaluate(context, pos, len);
+     return new Double((double) ((Collection) val).size());
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new CountFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "count(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/DocumentOrderComparator.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/DocumentOrderComparator.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/DocumentOrderComparator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/DocumentOrderComparator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* DocumentOrderComparator.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Comparator;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Sorts nodes into document order.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class DocumentOrderComparator
+   implements Comparator
+ {
+   
+   public int compare(Object o1, Object o2)
+   {
+     if (o1 instanceof Node && o2 instanceof Node)
+       {
+         Node n1 = (Node)o1;
+         Node n2 = (Node)o2;
+         return (int) n1.compareDocumentPosition(n2);
+       }
+     return 0;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/EqualityExpr.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/EqualityExpr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/EqualityExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/EqualityExpr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,268 ----
+ /* EqualityExpr.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import java.util.Iterator;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Boolean equality expression.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class EqualityExpr
+   extends Expr
+ {
+ 
+   final Expr lhs;
+   final Expr rhs;
+   final boolean invert;
+ 
+   EqualityExpr(Expr lhs, Expr rhs, boolean invert)
+   {
+     this.lhs = lhs;
+     this.rhs = rhs;
+     this.invert = invert;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     boolean val = evaluateImpl(context, pos, len);
+     if (invert)
+       {
+         return val ? Boolean.FALSE : Boolean.TRUE;
+       }
+     else
+       {
+         return val ? Boolean.TRUE : Boolean.FALSE;
+       }
+   }
+ 
+   private boolean evaluateImpl(Node context, int pos, int len)
+   {
+     Object left = lhs.evaluate(context, pos, len);
+     Object right = rhs.evaluate(context, pos, len);
+ 
+     /*
+      * If both objects to be compared are node-sets, then the comparison
+      * will be true if and only if there is a node in the first node-set and
+      * a node in the second node-set such that the result of performing the
+      * comparison on the string-values of the two nodes is true.
+      */
+     boolean flns = left instanceof Collection;
+     boolean frns = right instanceof Collection;
+     if (flns && frns)
+       {
+         Collection lns = (Collection) left;
+         Collection rns = (Collection) right;
+         if (lns.isEmpty())
+           {
+             return false;
+           }
+         boolean all = true;
+         for (Iterator i = lns.iterator(); i.hasNext(); )
+           {
+             Node ltest = (Node) i.next();
+             for (Iterator j = rns.iterator(); j.hasNext(); )
+               {
+                 Node rtest = (Node) j.next();
+                 if (ltest == rtest || ltest.equals(rtest))
+                   {
+                     // much shorter
+                     if (!invert)
+                       {
+                         return true;
+                       }
+                   }
+                 else if (stringValue(ltest).equals(stringValue(rtest)))
+                   {
+                     if (!invert)
+                       {
+                         return true;
+                       }
+                   }
+                 else
+                   {
+                     all = false;
+                   }
+               }
+           }
+         return all;
+       }
+     /* 
+      * If one object to be compared is a node-set and the other is a number,
+      * then the comparison will be true if and only if there is a node in
+      * the node-set such that the result of performing the comparison on the
+      * number to be compared and on the result of converting the
+      * string-value of that node to a number using the number function is
+      * true.
+      */
+     boolean fln = left instanceof Double;
+     boolean frn = right instanceof Double;
+     if ((flns && frn) || (frns && fln))
+       {
+         Collection ns = flns ? (Collection) left : (Collection) right;
+         double n = fln ? ((Double) left).doubleValue() :
+           ((Double) right).doubleValue();
+         boolean all = true;
+         for (Iterator i = ns.iterator(); i.hasNext(); )
+           {
+             Node test = (Node) i.next();
+             double nn = _number(context, stringValue(test));
+             if (nn == n)
+               {
+                 if (!invert)
+                   {
+                     return true;
+                   }
+               }
+             else
+               {
+                 all = false;
+               }
+           }
+         return invert ? all : false;
+       }
+     /*
+      * If one object to be compared is a node-set and the other is a
+      * string, then the comparison will be true if and only if there is a
+      * node in the node-set such that the result of performing the
+      * comparison on the string-value of the node and the other string is
+      * true.
+      */
+     boolean fls = left instanceof String;
+     boolean frs = right instanceof String;
+     if ((flns && frs) || (frns && fls))
+       {
+         Collection ns = flns ? (Collection) left : (Collection) right;
+         String s = fls ? (String) left : (String) right;
+         boolean all = true;
+         for (Iterator i = ns.iterator(); i.hasNext(); )
+           {
+             Node test = (Node) i.next();
+             if (stringValue(test).equals(s))
+               {
+                 if (!invert)
+                   {
+                     return true;
+                   }
+               }
+             else
+               {
+                 all = false;
+               }
+           }
+         return invert ? all : false;
+       }
+     /*
+      * If one object to be compared is a node-set and the other is a
+      * boolean, then the comparison will be true if and only if the result
+      * of performing the comparison on the boolean and on the result of
+      * converting the node-set to a boolean using the boolean function is
+      * true.
+      */
+     boolean flb = left instanceof Boolean;
+     boolean frb = right instanceof Boolean;
+     if ((flns && frb) || (frns && flb))
+       {
+         Collection ns = flns ? (Collection) left : (Collection) right;
+         boolean b = flb ? ((Boolean) left).booleanValue() :
+           ((Boolean) right).booleanValue();
+         return _boolean(context, ns) == b;
+       }
+     /*
+      * If at least one object to be compared is a boolean, then each object
+      * to be compared is converted to a boolean as if by applying the
+      * boolean function.
+      */
+     if (flb || frb)
+       {
+         boolean lb = flb ? ((Boolean) left).booleanValue() :
+           _boolean(context, left);
+         boolean rb = frb ? ((Boolean) right).booleanValue() :
+           _boolean(context, right);
+         return lb == rb;
+       }
+     /*
+      * Otherwise, if at least one object to be compared is
+      * a number, then each object to be compared is converted to a number as
+      * if by applying the number function.
+      */
+     if (fln || frn)
+       {
+         double ln = fln ? ((Double) left).doubleValue() :
+           _number(context, left);
+         double rn = frn ? ((Double) right).doubleValue() :
+           _number(context, right);
+         return ln == rn;
+       }
+     /*
+      * Otherwise, both objects to be
+      * compared are converted to strings as if by applying the string
+      * function.
+      */
+     String ls = fls ? (String) left : _string(context, left);
+     String rs = frs ? (String) right : _string(context, right);
+     return ls.equals(rs);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new EqualityExpr(lhs.clone(context), rhs.clone(context), invert);
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (lhs.references(var) || rhs.references(var));
+   }
+ 
+   public String toString()
+   {
+     if (invert)
+       {
+         return lhs + " != " + rhs;
+       }
+     else
+       {
+         return lhs + " = " + rhs;
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Expr.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Expr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Expr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Expr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,476 ----
+ /* Expr.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.io.IOException;
+ import java.text.DecimalFormat;
+ import java.text.DecimalFormatSymbols;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Comparator;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Locale;
+ import java.util.Set;
+ import java.util.StringTokenizer;
+ import javax.xml.namespace.QName;
+ import javax.xml.parsers.DocumentBuilder;
+ import javax.xml.parsers.DocumentBuilderFactory;
+ import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.xpath.XPathConstants;
+ import javax.xml.xpath.XPathExpression;
+ import javax.xml.xpath.XPathExpressionException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.Node;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ 
+ /**
+  * An XPath expression.
+  * This can be evaluated in the context of a node to produce a result.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public abstract class Expr
+   implements XPathExpression
+ {
+ 
+   protected static final Comparator documentOrderComparator =
+     new DocumentOrderComparator();
+ 
+   protected static final DecimalFormat decimalFormat =
+     new DecimalFormat("####################################################" +
+                       ".####################################################",
+                       new DecimalFormatSymbols(Locale.US));
+ 
+   public Object evaluate(Object item, QName returnType)
+     throws XPathExpressionException
+   {
+     Object ret = null;
+     Node context = null;
+     if (item instanceof Node)
+       {
+         context = (Node) item;
+         ret = evaluate(context, 1, 1);
+         if (XPathConstants.STRING == returnType &&
+             !(ret instanceof String))
+           {
+             ret = _string(context, ret);
+           }
+         else if (XPathConstants.NUMBER == returnType &&
+                  !(ret instanceof Double))
+           {
+             ret = new Double(_number(context, ret));
+           }
+         else if (XPathConstants.BOOLEAN == returnType &&
+                  !(ret instanceof Boolean))
+           {
+             ret = _boolean(context, ret) ? Boolean.TRUE : Boolean.FALSE;
+           }
+         else if (XPathConstants.NODE == returnType)
+           {
+             if (ret instanceof Collection)
+               {
+                 Collection ns = (Collection) ret;
+                 switch (ns.size())
+                   {
+                   case 0:
+                     ret = null;
+                     break;
+                   case 1:
+                     ret = (Node) ns.iterator().next();
+                     break;
+                   default:
+                     throw new XPathExpressionException("multiple nodes in node-set");
+                   }
+               }
+             else if (ret != null)
+               {
+                 throw new XPathExpressionException("return value is not a node-set");
+               }
+           }
+         else if (XPathConstants.NODESET == returnType)
+           {
+             if (ret != null && !(ret instanceof Collection))
+               {
+                 throw new XPathExpressionException("return value is not a node-set");
+               }
+           }
+       }
+     return ret;
+   }
+ 
+   public String evaluate(Object item)
+     throws XPathExpressionException
+   {
+     return (String) evaluate(item, XPathConstants.STRING); 
+   }
+ 
+   public Object evaluate(InputSource source, QName returnType)
+     throws XPathExpressionException
+   {
+     try
+       {
+         DocumentBuilderFactory factory =
+           new gnu.xml.dom.JAXPFactory();
+         DocumentBuilder builder = factory.newDocumentBuilder();
+         Document doc = builder.parse(source);
+         return evaluate(doc, returnType);
+       }
+     catch (ParserConfigurationException e)
+       {
+         throw new XPathExpressionException(e); 
+       }
+     catch (SAXException e)
+       {
+         throw new XPathExpressionException(e); 
+       }
+     catch (IOException e)
+       {
+         throw new XPathExpressionException(e); 
+       }
+   }
+ 
+   public String evaluate(InputSource source)
+     throws XPathExpressionException
+   {
+     return (String) evaluate(source, XPathConstants.STRING);
+   }
+ 
+   public abstract Object evaluate(Node context, int pos, int len);
+ 
+   public abstract Expr clone(Object context);
+ 
+   public abstract boolean references(QName var);
+   
+   /* -- 4.1 Node Set Functions -- */
+ 
+   /**
+    * The id function selects elements by their unique ID.
+    * When the argument to id is of type node-set, then the result is
+    * the union of the result of applying id to the string-value of each of
+    * the nodes in the argument node-set. When the argument to id is of any
+    * other type, the argument is converted to a string as if by a call to
+    * the string function; the string is split into a whitespace-separated
+    * list of tokens (whitespace is any sequence of characters matching the
+    * production S); the result is a node-set containing the elements in the
+    * same document as the context node that have a unique ID equal to any of
+    * the tokens in the list.
+    */
+   public static Collection _id(Node context, Object object)
+   {
+     Set ret = new HashSet();
+     if (object instanceof Collection)
+       {
+         Collection nodeSet = (Collection) object;
+         for (Iterator i = nodeSet.iterator(); i.hasNext(); )
+           {
+             String string = stringValue((Node) i.next());
+             ret.addAll(_id (context, string));
+           }
+       }
+     else
+       {
+         Document doc = (context instanceof Document) ? (Document) context :
+           context.getOwnerDocument();
+         String string = _string(context, object);
+         StringTokenizer st = new StringTokenizer(string, " \t\r\n");
+         while (st.hasMoreTokens())
+           {
+             Node element = doc.getElementById(st.nextToken());
+             if (element != null)
+               {
+                 ret.add(element);
+               }
+           }
+       }
+     return ret;
+   }
+ 
+   /**
+    * The local-name function returns the local part of the expanded-name of
+    * the node in the argument node-set that is first in document order. If
+    * the argument node-set is empty or the first node has no expanded-name,
+    * an empty string is returned. If the argument is omitted, it defaults to
+    * a node-set with the context node as its only member.
+    */
+   public static String _local_name(Node context, Collection nodeSet)
+   {
+     Node node = (nodeSet == null || nodeSet.size() == 0) ? context :
+       firstNode(nodeSet);
+     return node.getLocalName();
+   }
+ 
+   /**
+    * The namespace-uri function returns the namespace URI of the
+    * expanded-name of the node in the argument node-set that is first in
+    * document order. If the argument node-set is empty, the first node has
+    * no expanded-name, or the namespace URI of the expanded-name is null, an
+    * empty string is returned. If the argument is omitted, it defaults to a
+    * node-set with the context node as its only member.
+    */
+   public static String _namespace_uri(Node context, Collection nodeSet)
+   {
+     Node node = (nodeSet == null || nodeSet.size() == 0) ? context :
+       firstNode(nodeSet);
+     return node.getNamespaceURI();
+   }
+   
+   /**
+    * The name function returns a string containing a QName representing the
+    * expanded-name of the node in the argument node-set that is first in
+    * document order. The QName must represent the expanded-name with respect
+    * to the namespace declarations in effect on the node whose expanded-name
+    * is being represented. Typically, this will be the QName that occurred
+    * in the XML source. This need not be the case if there are namespace
+    * declarations in effect on the node that associate multiple prefixes
+    * with the same namespace. However, an implementation may include
+    * information about the original prefix in its representation of nodes;
+    * in this case, an implementation can ensure that the returned string is
+    * always the same as the QName used in the XML source. If the argument
+    * node-set is empty or the first node has no expanded-name, an empty
+    * string is returned. If the argument it omitted, it defaults to a
+    * node-set with the context node as its only member.
+    */
+   public static String _name(Node context, Collection nodeSet)
+   {
+     Node node = (nodeSet == null || nodeSet.size() == 0) ? context :
+       firstNode(nodeSet);
+     switch (node.getNodeType())
+       {
+       case Node.ATTRIBUTE_NODE:
+       case Node.ELEMENT_NODE:
+       case Node.PROCESSING_INSTRUCTION_NODE:
+         return node.getNodeName();
+       default:
+         return "";
+       }
+   }
+ 
+   /**
+    * Returns the first node in the set in document order.
+    */
+   static Node firstNode(Collection nodeSet)
+   {
+     List list = new ArrayList(nodeSet);
+     Collections.sort(list, documentOrderComparator);
+     return (Node) list.get(0);
+   }
+ 
+   /* -- 4.2 String Functions -- */
+ 
+   /**
+    * Implementation of the XPath <code>string</code> function.
+    */
+   public static String _string(Node context, Object object)
+   {
+     if (object == null)
+       {
+         return stringValue(context);
+       }
+     if (object instanceof String)
+       {
+         return (String) object;
+       }
+     if (object instanceof Boolean)
+       {
+         return object.toString();
+       }
+     if (object instanceof Double)
+       {
+         double d = ((Double) object).doubleValue();
+         if (Double.isNaN(d))
+           {
+             return "NaN";
+           }
+         else if (d == 0.0d)
+           {
+             return "0";
+           }
+         else if (Double.isInfinite(d))
+           {
+             if (d < 0)
+               {
+                 return "-Infinity";
+               }
+             else
+               {
+                 return "Infinity";
+               }
+           }
+         else
+           {
+             String ret = decimalFormat.format(d);
+             if (ret.endsWith (".0"))
+               { 
+                 ret = ret.substring(0, ret.length() - 2);
+               }
+             return ret;
+           }
+       }
+     if (object instanceof Collection)
+       {
+         Collection nodeSet = (Collection) object;
+         if (nodeSet.isEmpty())
+           {
+             return "";
+           }
+         Node node = firstNode(nodeSet);
+         return stringValue(node);
+       }
+     throw new IllegalArgumentException(object.toString());
+   }
+ 
+   /* -- 4.3 Boolean Functions -- */
+   
+   /**
+    * Implementation of the XPath <code>boolean</code> function.
+    */
+   public static boolean _boolean(Node context, Object object)
+   {
+     if (object instanceof Boolean)
+       {
+         return ((Boolean) object).booleanValue();
+       }
+     if (object instanceof Double)
+       {
+         return ((Double) object).doubleValue() != 0.0;
+       }
+     if (object instanceof String)
+       {
+         return ((String) object).length() != 0;
+       }
+     if (object instanceof Collection)
+       {
+         return ((Collection) object).size() != 0;
+       }
+     return false; // TODO user defined types
+   }
+ 
+   /* -- 4.4 Number Functions -- */
+ 
+   /**
+    * Implementation of the XPath <code>number</code> function.
+    */
+   public static double _number(Node context, Object object)
+   {
+     if (object == null)
+       {
+         object = Collections.singleton(context);
+       }
+     if (object instanceof Double)
+       {
+         return ((Double) object).doubleValue();
+       }
+     if (object instanceof Boolean)
+       {
+         return ((Boolean) object).booleanValue() ? 1.0 : 0.0;
+       }
+     if (object instanceof Collection)
+       {
+         // Convert node-set to string
+         object = stringValue((Collection) object);
+       }
+     if (object instanceof String)
+       {
+         String string = ((String) object).trim();
+         try
+           {
+             return Double.parseDouble(string);
+           }
+         catch (NumberFormatException e)
+           {
+             return Double.NaN;
+           }
+       }
+     return Double.NaN; // TODO user-defined types
+   }
+ 
+   /**
+    * Computes the XPath string-value of the specified node-set.
+    */
+   public static String stringValue(Collection nodeSet)
+   {
+     StringBuffer buf = new StringBuffer();
+     for (Iterator i = nodeSet.iterator(); i.hasNext(); )
+       {
+         buf.append(stringValue((Node) i.next()));
+       }
+     return buf.toString();
+   }
+ 
+   /**
+    * Computes the XPath string-value of the specified node.
+    */
+   public static String stringValue(Node node)
+   {
+     return stringValue(node, false);
+   }
+   
+   static String stringValue(Node node, boolean elementMode)
+   {
+     switch (node.getNodeType())
+       {
+       case Node.DOCUMENT_NODE: // 5.1 Root Node
+       case Node.DOCUMENT_FRAGMENT_NODE:
+       case Node.ELEMENT_NODE: // 5.2 Element Nodes
+         StringBuffer buf = new StringBuffer();
+         for (Node ctx = node.getFirstChild(); ctx != null;
+              ctx = ctx.getNextSibling())
+           {
+             buf.append(stringValue(ctx, true));
+           }
+         return buf.toString();
+       case Node.TEXT_NODE: // 5.7 Text Nodes
+       case Node.CDATA_SECTION_NODE:
+         return node.getNodeValue();
+       case Node.ATTRIBUTE_NODE: // 5.3 Attribute Nodes
+       case Node.PROCESSING_INSTRUCTION_NODE: // 5.5 Processing Instruction
+       case Node.COMMENT_NODE: // 5.6 Comment Nodes
+         if (!elementMode)
+           {
+             return node.getNodeValue();
+           }
+       default:
+         return "";
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/FalseFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/FalseFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/FalseFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/FalseFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* FalseFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>false</code> function returns false.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class FalseFunction
+   extends Expr
+ {
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     return Boolean.FALSE;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new FalseFunction();
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString()
+   {
+     return "false()";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/FloorFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/FloorFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/FloorFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/FloorFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* FloorFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>floor</code> function returns the largest (closest to positive
+  * infinity) number that is not greater than the argument and that is an
+  * integer.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class FloorFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   FloorFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+ 
+   FloorFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = arg.evaluate(context, pos, len);
+     double n = _number(context, val);
+     return new Double(Math.floor(n));
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new FloorFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "floor(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Function.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Function.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Function.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Function.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* Function.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ 
+ /**
+  * Interface to be implemented by external functions that need to receive
+  * parameter values.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public interface Function
+ {
+ 
+   /**
+    * Sets the list of expressions to evaluate as parameter values.
+    */
+   void setArguments(List args);
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/FunctionCall.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/FunctionCall.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/FunctionCall.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/FunctionCall.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,163 ----
+ /* FunctionCall.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunction;
+ import javax.xml.xpath.XPathFunctionException;
+ import javax.xml.xpath.XPathFunctionResolver;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Executes an XPath core or extension function.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class FunctionCall
+   extends Expr
+ {
+ 
+   final XPathFunctionResolver resolver;
+   final String name;
+   final List args;
+ 
+   public FunctionCall(XPathFunctionResolver resolver, String name)
+   {
+     this(resolver, name, Collections.EMPTY_LIST);
+   }
+ 
+   public FunctionCall(XPathFunctionResolver resolver, String name, List args)
+   {
+     this.resolver = resolver;
+     this.name = name;
+     this.args = args;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     if (resolver != null)
+       {
+         QName qname = QName.valueOf(name);
+ 				int arity = args.size();
+         XPathFunction function = resolver.resolveFunction(qname, arity);
+         if (function != null)
+           {
+             //System.err.println("Calling "+toString()+" with "+values);
+             if (function instanceof Expr)
+               {
+                 if (function instanceof Function)
+                   {
+                     ((Function) function).setArguments(args);
+                   }
+                 return ((Expr) function).evaluate(context, pos, len);
+               }
+             else
+               {
+                 List values = new ArrayList(arity);
+                 for (int i = 0; i < arity; i++)
+                   {
+                     Expr arg = (Expr) args.get(i);
+                     values.add(arg.evaluate(context, pos, len));
+                   }
+                 try
+                   {
+                     return function.evaluate(values);
+                   }
+                 catch (XPathFunctionException e)
+                   {
+                     e.printStackTrace(System.err); // FIXME
+                     throw new RuntimeException(e.getMessage(), e);
+                   }
+               }
+           }
+       }
+     throw new IllegalArgumentException("Invalid function call: " +
+                                        toString());
+   }
+ 
+   public Expr clone(Object context)
+   {
+     int len = args.size();
+     List args2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         args2.add(((Expr) args.get(i)).clone(context));
+       }
+     XPathFunctionResolver r = resolver;
+     if (context instanceof XPathFunctionResolver)
+       {
+         r = (XPathFunctionResolver) context;
+       }
+     return new FunctionCall(r, name, args2);
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = args.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer();
+     buf.append(name);
+     buf.append('(');
+     int len = args.size();
+     for (int i = 0; i < len; i++)
+       {
+         if (i > 0)
+           {
+             buf.append(',');
+           }
+         buf.append(args.get(i));
+       }
+     buf.append(')');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/IdFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/IdFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/IdFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/IdFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* IdFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>id</code> function selects elements by their unique ID.
+  * When the argument to id is of type node-set, then the result is
+  * the union of the result of applying id to the string-value of each of the
+  * nodes in the argument node-set. When the argument to id is of any other
+  * type, the argument is converted to a string as if by a call to the string
+  * function; the string is split into a whitespace-separated list of tokens
+  * (whitespace is any sequence of characters matching the production S); the
+  * result is a node-set containing the elements in the same document as the
+  * context node that have a unique ID equal to any of the tokens in the
+  * list.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class IdFunction
+   extends Pattern
+ {
+ 
+   final Expr arg;
+ 
+   IdFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+ 
+   public IdFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public boolean matches(Node context)
+   {
+     Object ret = evaluate(context, 1, 1);
+     return !((Collection) ret).isEmpty();
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = arg.evaluate(context, pos, len);
+     return _id(context, val);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new IdFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "id(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/LangFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/LangFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/LangFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/LangFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,116 ----
+ /* LangFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>lang</code> function returns true or false depending on whether
+  * the language of the context node as specified by xml:lang attributes is
+  * the same as or is a sublanguage of the language specified by the argument
+  * string. The language of the context node is determined by the value of
+  * the xml:lang attribute on the context node, or, if the context node has
+  * no xml:lang attribute, by the value of the xml:lang attribute on the
+  * nearest ancestor of the context node that has an xml:lang attribute. If
+  * there is no such attribute, then lang returns false. If there is such an
+  * attribute, then lang returns true if the attribute value is equal to the
+  * argument ignoring case, or if there is some suffix starting with - such
+  * that the attribute value is equal to the argument ignoring that suffix of
+  * the attribute value and ignoring case.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class LangFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   LangFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+ 
+   LangFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = arg.evaluate(context, pos, len);
+     String lang = _string(context, val);
+     String clang = getLang(context);
+     while (clang == null && context != null)
+       {
+         context = context.getParentNode();
+         clang = getLang(context);
+       }
+     boolean ret = (clang == null) ? false :
+       clang.toLowerCase().startsWith(lang.toLowerCase());
+     return ret ? Boolean.TRUE : Boolean.FALSE;
+   }
+ 
+   String getLang(Node node)
+   {
+     if (node.getNodeType() == Node.ELEMENT_NODE)
+       {
+         return ((Element) node).getAttribute("xml:lang");
+       }
+     return null;
+   }
+   
+   public Expr clone(Object context)
+   {
+     return new IdFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "lang(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/LastFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/LastFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/LastFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/LastFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* LastFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>last</code> function returns a number equal to the context
+  * size from the expression evaluation context.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class LastFunction
+   extends Expr
+ {
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     return new Double((double) len);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new LastFunction();
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString()
+   {
+     return "last()";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/LocalNameFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/LocalNameFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/LocalNameFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/LocalNameFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,93 ----
+ /* LocalNameFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>local-name</code> function returns the local part of the
+  * expanded-name of the node in the argument node-set that is first in
+  * document order.
+  * If the argument node-set is empty or the first node has no expanded-name,
+  * an empty string is returned. If the argument is omitted, it defaults to a
+  * node-set with the context node as its only member.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class LocalNameFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   LocalNameFunction(List args)
+   {
+     this(args.size() > 0 ? (Expr) args.get(0) : null);
+   }
+ 
+   LocalNameFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
+     return _local_name(context, (Collection) val);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new LocalNameFunction((arg == null) ? null :
+                                  arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg == null) ? false : arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return (arg == null) ? "local-name()" : "local-name(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NameFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NameFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NameFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NameFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* NameFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>name</code> function returns a string containing a QName
+  * representing the expanded-name of the node in the argument node-set that
+  * is first in document order. The QName must represent the expanded-name
+  * with respect to the namespace declarations in effect on the node whose
+  * expanded-name is being represented. Typically, this will be the QName
+  * that occurred in the XML source. This need not be the case if there are
+  * namespace declarations in effect on the node that associate multiple
+  * prefixes with the same namespace. However, an implementation may include
+  * information about the original prefix in its representation of nodes; in
+  * this case, an implementation can ensure that the returned string is
+  * always the same as the QName used in the XML source. If the argument
+  * node-set is empty or the first node has no expanded-name, an empty string
+  * is returned. If the argument it omitted, it defaults to a node-set with
+  * the context node as its only member.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class NameFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   NameFunction(List args)
+   {
+     this(args.size() > 0 ? (Expr) args.get(0) : null);
+   }
+ 
+   NameFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
+     return _name(context, (Collection) val);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new NameFunction((arg == null) ? null :
+                             arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg == null) ? false : arg.references(var);
+   }
+   
+   public String toString()
+   {
+     return (arg == null) ? "name()" : "name(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NameTest.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NameTest.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NameTest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NameTest.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,142 ----
+ /* NameTest.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.XMLConstants;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Tests whether a node has the specified name.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class NameTest
+   extends Test
+ {
+ 
+   final QName qName;
+   final boolean anyLocalName;
+   final boolean any;
+ 
+   public NameTest(QName qName, boolean anyLocalName, boolean any)
+   {
+     this.anyLocalName = anyLocalName;
+     this.any = any;
+     this.qName = qName;
+   }
+ 
+   public boolean matchesAny()
+   {
+     return any;
+   }
+ 
+   public boolean matchesAnyLocalName()
+   {
+     return anyLocalName;
+   }
+ 
+   public boolean matches(Node node, int pos, int len)
+   {
+     switch (node.getNodeType())
+       {
+       case Node.ATTRIBUTE_NODE:
+         // Do not match namespace attributes
+         String uri = node.getNamespaceURI();
+         if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
+             XMLConstants.XMLNS_ATTRIBUTE.equals(node.getPrefix()) ||
+             XMLConstants.XMLNS_ATTRIBUTE.equals(node.getNodeName()))
+           {
+             return false;
+           }
+         // Fall through
+       case Node.ELEMENT_NODE:
+         break;
+       default:
+         return false;
+       }
+     if (any)
+       {
+         return true;
+       }
+     String uri = qName.getNamespaceURI();
+     String nodeUri = node.getNamespaceURI();
+     String nodeLocalName = node.getLocalName();
+     if (nodeLocalName != null && !equal(uri, nodeUri))
+       {
+         return false;
+       }
+     if (anyLocalName)
+       {
+         return true;
+       }
+     String localName = qName.getLocalPart();
+     if (nodeLocalName != null)
+       {
+         nodeLocalName = node.getNodeName();
+       }
+     return (localName.equals(nodeLocalName));
+   }
+ 
+   final boolean equal(String s1, String s2)
+   {
+     return (((s1 == null || s1.length() == 0) &&
+              (s2 == null || s2.length() == 0)) ||
+             s1 != null && s1.equals(s2));
+   }
+ 
+   public Test clone(Object context)
+   {
+     return new NameTest(qName, anyLocalName, any);
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString ()
+   {
+     if (any)
+       {
+         return "*";
+       }
+     return qName.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NamespaceTest.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NamespaceTest.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NamespaceTest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NamespaceTest.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,128 ----
+ /* NamespaceTest.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.XMLConstants;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Tests whether a namespace attribute has the specified name.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class NamespaceTest
+   extends Test
+ {
+ 
+   final QName qName;
+   final boolean anyLocalName;
+   final boolean any;
+ 
+   public NamespaceTest(QName qName, boolean anyLocalName, boolean any)
+   {
+     this.anyLocalName = anyLocalName;
+     this.any = any;
+     this.qName = qName;
+   }
+ 
+   public boolean matchesAny()
+   {
+     return any;
+   }
+ 
+   public boolean matchesAnyLocalName()
+   {
+     return anyLocalName;
+   }
+ 
+   public boolean matches(Node node, int pos, int len)
+   {
+     switch (node.getNodeType())
+       {
+       case Node.ATTRIBUTE_NODE:
+         // Only match namespace attributes
+         String uri = node.getNamespaceURI();
+         if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
+             XMLConstants.XMLNS_ATTRIBUTE.equals(node.getPrefix()) ||
+             XMLConstants.XMLNS_ATTRIBUTE.equals(node.getNodeName()))
+           {
+             break;
+           }
+         // Fall through
+       default:
+         // Only process namespace attributes
+         return false;
+       }
+     if (any)
+       {
+         return true;
+       }
+     if (anyLocalName)
+       {
+         return true;
+       }
+     String localName = qName.getLocalPart();
+     String nodeLocalName = node.getLocalName();
+     if (nodeLocalName == null)
+       {
+         nodeLocalName = node.getNodeName();
+       }
+     return (localName.equals(nodeLocalName));
+   }
+ 
+   public Test clone(Object context)
+   {
+     return new NamespaceTest(qName, anyLocalName, any);
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString ()
+   {
+     if (any)
+       {
+         return "*";
+       }
+     return qName.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NamespaceUriFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NamespaceUriFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NamespaceUriFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NamespaceUriFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,93 ----
+ /* NamespaceUriFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>namespace-uri</code> function returns the namespace URI of the
+  * expanded-name of the node in the argument node-set that is first in
+  * document order. If the argument node-set is empty, the first node has no
+  * expanded-name, or the namespace URI of the expanded-name is null, an
+  * empty string is returned. If the argument is omitted, it defaults to a
+  * node-set with the context node as its only member.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class NamespaceUriFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   NamespaceUriFunction(List args)
+   {
+     this(args.size() > 0 ? (Expr) args.get(0) : null);
+   }
+   
+   NamespaceUriFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
+     return _namespace_uri(context, (Collection) val);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new NamespaceUriFunction((arg == null) ? null :
+                                     arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg == null) ? false : arg.references(var);
+   }
+   
+   public String toString()
+   {
+     return (arg == null) ? "namespace-uri()" : "namespace-uri(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NegativeExpr.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NegativeExpr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NegativeExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NegativeExpr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,81 ----
+ /* NegativeExpr.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Unary negative.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class NegativeExpr
+   extends Expr
+ {
+ 
+   final Expr expr;
+ 
+   NegativeExpr(Expr expr)
+   {
+     this.expr = expr;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = expr.evaluate(context, pos, len);
+     double n = _number(context, val);
+     return new Double(-n);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new NegativeExpr(expr.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return expr.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "-" + expr;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NodeTypeTest.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NodeTypeTest.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NodeTypeTest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NodeTypeTest.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,136 ----
+ /* NodeTypeTest.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Tests whether a node is of a given type.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class NodeTypeTest
+   extends Test
+ {
+ 
+   final short type;
+   final String data;
+ 
+   public NodeTypeTest(short type)
+   {
+     this(type, null);
+   }
+ 
+   public NodeTypeTest(short type, String data)
+   {
+     this.type = type;
+     this.data = data;
+   }
+ 
+   public short getNodeType()
+   {
+     return type;
+   }
+ 
+   public String getData()
+   {
+     return data;
+   }
+ 
+   public boolean matches(Node node, int pos, int len)
+   {
+     short nodeType = node.getNodeType();
+     switch (nodeType)
+       {
+       case Node.ELEMENT_NODE:
+       case Node.ATTRIBUTE_NODE:
+       case Node.TEXT_NODE:
+       case Node.CDATA_SECTION_NODE:
+       case Node.COMMENT_NODE:
+       case Node.PROCESSING_INSTRUCTION_NODE:
+         if (type > 0)
+           {
+             if (nodeType != type)
+               {
+                 return false;
+               }
+             if (data != null && !data.equals(node.getNodeValue()))
+               {
+                 return false;
+               }
+           }
+         return true;
+       default:
+         // Not part of XPath data model
+         return false;
+       }
+   }
+ 
+   public Test clone(Object context)
+   {
+     return new NodeTypeTest(type, data);
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString()
+   {
+     switch (type)
+       {
+       case 0:
+         return "node()";
+       case Node.TEXT_NODE:
+         return "text()";
+       case Node.COMMENT_NODE:
+         return "comment()";
+       case Node.PROCESSING_INSTRUCTION_NODE:
+         if (data != null)
+           {
+             return "processing-instruction('" + data + "')";
+           }
+         return "processing-instruction()";
+       default:
+         throw new IllegalStateException();
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NormalizeSpaceFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NormalizeSpaceFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NormalizeSpaceFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NormalizeSpaceFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,105 ----
+ /* NormalizeSpaceFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import java.util.StringTokenizer;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>normalize-space</code> function returns the argument string
+  * with whitespace normalized by stripping leading and trailing whitespace
+  * and replacing sequences of whitespace characters by a single space.
+  * Whitespace characters are the same as those allowed by the S production
+  * in XML. If the argument is omitted, it defaults to the context node
+  * converted to a string, in other words the string-value of the context
+  * node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class NormalizeSpaceFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   NormalizeSpaceFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+   
+   NormalizeSpaceFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
+     String s = _string(context, val);
+     StringTokenizer st = new StringTokenizer(s, " \t\r\n");
+     StringBuffer buf = new StringBuffer();
+     if (st.hasMoreTokens())
+       {
+         buf.append(st.nextToken()); 
+         while (st.hasMoreTokens())
+           {
+             buf.append(' ');
+             buf.append(st.nextToken());
+           }
+       }
+     return buf.toString();
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new NormalizeSpaceFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg == null) ? false : arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return (arg == null) ? "normalize-space()" : "normalize-space(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NotFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NotFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NotFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NotFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* NotFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>not</code> function returns true if its argument is false,
+  * and false otherwise.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class NotFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   NotFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+ 
+   NotFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = arg.evaluate(context, pos, len);
+     return _boolean(context, val) ? Boolean.FALSE : Boolean.TRUE;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new NotFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "not(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NumberFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NumberFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/NumberFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/NumberFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* NumberFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>number</code> function converts its argument to a number as
+  * follows:
+  * <ul>
+  * <li>a string that consists of optional whitespace followed by an optional
+  * minus sign followed by a Number followed by whitespace is converted to
+  * the IEEE 754 number that is nearest (according to the IEEE 754
+  * round-to-nearest rule) to the mathematical value represented by the
+  * string; any other string is converted to NaN</li>
+  * <li>boolean true is converted to 1; boolean false is converted to 0</li>
+  * <li>a node-set is first converted to a string as if by a call to the
+  * string function and then converted in the same way as a string
+  * argument</li>
+  * <li>an object of a type other than the four basic types is converted to a
+  * number in a way that is dependent on that type</li>
+  * </ul>
+  * If the argument is omitted, it defaults to a node-set with the context
+  * node as its only member.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class NumberFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   NumberFunction(List args)
+   {
+     this(args.size() > 0 ? (Expr) args.get(0) : null);
+   }
+ 
+   NumberFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
+     return new Double(_number(context, val));
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new NumberFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "number(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/OrExpr.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/OrExpr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/OrExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/OrExpr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* OrExpr.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Logical or.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class OrExpr
+   extends Expr
+ {
+ 
+   final Expr lhs;
+   final Expr rhs;
+ 
+   public OrExpr(Expr lhs, Expr rhs)
+   {
+     this.lhs = lhs;
+     this.rhs = rhs;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object left = lhs.evaluate(context, pos, len);
+     if (_boolean(context, left))
+       {
+         return Boolean.TRUE;
+       }
+     Object right = rhs.evaluate(context, pos, len);
+     return _boolean(context, right) ? Boolean.TRUE : Boolean.FALSE;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new OrExpr(lhs.clone(context), rhs.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (lhs.references(var) || rhs.references(var));
+   }
+ 
+   public String toString()
+   {
+     return lhs + " or " + rhs;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/ParenthesizedExpr.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/ParenthesizedExpr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/ParenthesizedExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/ParenthesizedExpr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /* ParenthesizedExpr.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Simple subexpression.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class ParenthesizedExpr
+   extends Expr
+ {
+ 
+   final Expr expr;
+ 
+   ParenthesizedExpr(Expr expr)
+   {
+     this.expr = expr;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object ret = expr.evaluate(context, pos, len);
+     if (ret instanceof Collection)
+       {
+         List list = new ArrayList((Collection) ret);
+         Collections.sort(list, documentOrderComparator);
+         ret = list;
+       }
+     return ret;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new ParenthesizedExpr(expr.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return expr.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "(" + expr + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Path.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Path.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Path.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Path.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* Path.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * An XPath path component expression.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ abstract class Path
+   extends Pattern
+ {
+ 
+   abstract Collection evaluate(Node context, Collection nodeSet);
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Pattern.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Pattern.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Pattern.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Pattern.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* Pattern.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Interface implemented by expressions that can form part of XSL patterns.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public abstract class Pattern
+   extends Expr
+ {
+ 
+   public abstract boolean matches(Node context);
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/PositionFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/PositionFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/PositionFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/PositionFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* PositionFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>position</code> function returns a number equal to the context
+  * position from the expression evaluation context.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class PositionFunction
+   extends Expr
+ {
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     return new Double((double) pos);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new PositionFunction();
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString()
+   {
+     return "position()";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Predicate.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Predicate.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Predicate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Predicate.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* Predicate.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Tests whether an expression matches against a given context node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ class Predicate
+   extends Test
+ {
+ 
+   final Expr expr;
+ 
+   Predicate(Expr expr)
+   {
+     this.expr = expr;
+   }
+ 
+   public boolean matches(Node node, int pos, int len)
+   {
+     Object ret = expr.evaluate(node, pos, len);
+     if (ret instanceof Double)
+       {
+         // Same as [position() = x]
+         return ((Double) ret).intValue() == pos;
+       }
+     return Expr._boolean(node, expr.evaluate(node, pos, len));
+   }
+ 
+   public Test clone(Object context)
+   {
+     return new Predicate(expr.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return expr.references(var);
+   }
+   
+   public String toString()
+   {
+     return "[" + expr + "]";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/RelationalExpr.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/RelationalExpr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/RelationalExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/RelationalExpr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,107 ----
+ /* RelationalExpr.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Numerical comparison expression.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class RelationalExpr
+   extends Expr
+ {
+ 
+   final Expr lhs;
+   final Expr rhs;
+   final boolean lt;
+   final boolean eq;
+ 
+   RelationalExpr(Expr lhs, Expr rhs, boolean lt, boolean eq)
+   {
+     this.lhs = lhs;
+     this.rhs = rhs;
+     this.lt = lt;
+     this.eq = eq;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object left = lhs.evaluate(context, pos, len);
+     Object right = rhs.evaluate(context, pos, len);
+     double ln = _number(context, left);
+     double rn = _number(context, right);
+     if (eq && ln == rn)
+       {
+         return Boolean.TRUE;
+       }
+     if (lt)
+       {
+         if (ln < rn || Double.isInfinite(rn))
+           {
+             return Boolean.TRUE;
+           }
+       }
+     else
+       {
+         if (ln > rn || Double.isInfinite(ln))
+           {
+             return Boolean.TRUE;
+           }
+       }
+     return Boolean.FALSE;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new RelationalExpr(lhs.clone(context), rhs.clone(context), lt, eq);
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (lhs.references(var) || rhs.references(var));
+   }
+ 
+   public String toString()
+   {
+     return lhs + " " + (lt ? "<" : ">") + (eq ? "=" : "") + " " + rhs;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Root.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Root.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Root.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Root.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* Root.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import java.util.Collections;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Expression that evaluates to the document root.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class Root
+   extends Path
+ {
+ 
+   public boolean matches(Node node)
+   {
+     return (node.getNodeType() == Node.DOCUMENT_NODE);
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     return evaluate(context, Collections.EMPTY_SET);
+   }
+ 
+   Collection evaluate(Node context, Collection ns)
+   {
+     Document doc = (context instanceof Document) ? (Document) context :
+       context.getOwnerDocument();
+     return Collections.singleton(doc);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new Root();
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString()
+   {
+     return "/";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/RoundFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/RoundFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/RoundFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/RoundFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,96 ----
+ /* RoundFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>round</code> function returns the number that is closest to the
+  * argument and that is an integer. If there are two such numbers, then the
+  * one that is closest to positive infinity is returned. If the argument is
+  * NaN, then NaN is returned. If the argument is positive infinity, then
+  * positive infinity is returned. If the argument is negative infinity, then
+  * negative infinity is returned. If the argument is positive zero, then
+  * positive zero is returned. If the argument is negative zero, then
+  * negative zero is returned. If the argument is less than zero, but greater
+  * than or equal to -0.5, then negative zero is returned.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class RoundFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   RoundFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+ 
+   RoundFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = arg.evaluate(context, pos, len);
+     double n = _number(context, val);
+     return (Double.isNaN(n) || Double.isInfinite(n)) ?
+       new Double(n) : new Double(Math.round(n));
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new RoundFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "round(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Selector.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Selector.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Selector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Selector.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,519 ----
+ /* Selector.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.LinkedHashSet;
+ import java.util.List;
+ import java.util.Set;
+ import javax.xml.XMLConstants;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A single component of a location path.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class Selector
+   extends Path
+ {
+ 
+   public static final int ANCESTOR = 0;
+   public static final int ANCESTOR_OR_SELF = 1;
+   public static final int ATTRIBUTE = 2;
+   public static final int CHILD = 3;
+   public static final int DESCENDANT = 4;
+   public static final int DESCENDANT_OR_SELF = 5;
+   public static final int FOLLOWING = 6;
+   public static final int FOLLOWING_SIBLING = 7;
+   public static final int NAMESPACE = 8;
+   public static final int PARENT = 9;
+   public static final int PRECEDING = 10;
+   public static final int PRECEDING_SIBLING = 11;
+   public static final int SELF = 12;
+ 
+   /**
+    * Axis to select nodes in.
+    */
+   final int axis;
+ 
+   /**
+    * List of tests to perform on candidates.
+    */
+   final Test[] tests;
+ 
+   public Selector(int axis, List tests)
+   {
+     this.axis = axis;
+     this.tests = new Test[tests.size()];
+     tests.toArray(this.tests);
+     if (axis == NAMESPACE &&
+         this.tests.length > 0 &&
+         this.tests[0] instanceof NameTest)
+       {
+         NameTest nt = (NameTest) this.tests[0];
+         this.tests[0] = new NamespaceTest(nt.qName, nt.anyLocalName, nt.any);
+       }
+   }
+ 
+   /**
+    * Returns the list of tests to perform on candidates.
+    */
+   public Test[] getTests()
+   {
+     return tests;
+   }
+ 
+   public boolean matches(Node context)
+   {
+     short nodeType = context.getNodeType();
+     switch (axis)
+       {
+       case CHILD:
+         if (nodeType == Node.ATTRIBUTE_NODE)
+           {
+             return false;
+           }
+         break;
+       case ATTRIBUTE:
+       case NAMESPACE:
+         if (nodeType != Node.ATTRIBUTE_NODE)
+           {
+             return false;
+           }
+         break;
+       case DESCENDANT_OR_SELF:
+         return true;
+       default:
+         return false;
+       }
+     int tlen = tests.length;
+     if (tlen > 0)
+       {
+         int pos = getContextPosition(context);
+         int len = getContextSize(context);
+         for (int j = 0; j < tlen && len > 0; j++)
+           {
+             Test test = tests[j];
+             if (!test.matches(context, pos, len))
+               {
+                 return false;
+               }
+           }
+       }
+     return true;
+   }
+ 
+   private int getContextPosition(Node ctx)
+   {
+     int pos = 1;
+     for (ctx = ctx.getPreviousSibling(); ctx != null;
+          ctx = ctx.getPreviousSibling())
+       {
+         pos++;
+       }
+     return pos;
+   }
+ 
+   private int getContextSize(Node ctx)
+   {
+     if (ctx.getNodeType() == Node.ATTRIBUTE_NODE)
+       {
+         Node parent = ((Attr) ctx).getOwnerElement();
+         return parent.getAttributes().getLength();
+       }
+     Node parent = ctx.getParentNode();
+     if (parent != null)
+       {
+         return parent.getChildNodes().getLength();
+       }
+     return 1;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Set acc = new LinkedHashSet();
+     addCandidates(context, acc);
+     List candidates = new ArrayList(acc);
+     //Collections.sort(candidates, documentOrderComparator);
+     List ret = filterCandidates(candidates, false);
+     return ret;
+   }
+ 
+   Collection evaluate(Node context, Collection ns)
+   {
+     Set acc = new LinkedHashSet();
+     for (Iterator i = ns.iterator(); i.hasNext(); )
+       {
+         addCandidates((Node) i.next(), acc);
+       }
+     List candidates = new ArrayList(acc);
+     //Collections.sort(candidates, documentOrderComparator);
+     List ret = filterCandidates(candidates, true);
+     return ret;
+   }
+ 
+   /**
+    * Filter the given list of candidates according to the node tests.
+    */
+   List filterCandidates(List candidates, boolean cascade)
+   {
+     int len = candidates.size();
+     int tlen = tests.length;
+     if (tlen > 0 && len > 0)
+       {
+         // Present the result of each successful generation to the next test
+         for (int j = 0; j < tlen && len > 0; j++)
+           {
+             Test test = tests[j];
+             List successful = new ArrayList(len);
+             for (int i = 0; i < len; i++)
+               {
+                 Node node = (Node) candidates.get(i);
+                 if (cascade)
+                   {
+                     // Documents and DocumentFragments should be considered
+                     // if part of a location path where the axis involves
+                     // the SELF concept
+                     short nodeType = node.getNodeType();
+                     if ((nodeType == Node.DOCUMENT_NODE ||
+                          nodeType == Node.DOCUMENT_FRAGMENT_NODE) &&
+                         (axis == DESCENDANT_OR_SELF ||
+                          axis == ANCESTOR_OR_SELF ||
+                          axis == SELF) &&
+                         (tests.length == 1 &&
+                          tests[0] instanceof NodeTypeTest &&
+                          ((NodeTypeTest) tests[0]).type == (short) 0))
+                       {
+                         successful.add(node);
+                         continue;
+                       }
+                   }
+                 if (test.matches(node, i + 1, len))
+                   {
+                     successful.add(node);
+                   }
+                 /*
+                    System.err.println("Testing "+node);
+                    int p = getContextPosition(node);
+                    int l = getContextSize(node);
+                    if (test.matches(node, p, l))
+                    {
+                    successful.add(node);
+                    }*/
+               }
+             candidates = successful;
+             len = candidates.size();
+           }
+       }
+     return candidates;
+   }
+ 
+   void addCandidates(Node context, Collection candidates)
+   {
+     // Build list of candidates
+     switch (axis)
+       {
+       case CHILD:
+         addChildNodes(context, candidates, false);
+         break;
+       case DESCENDANT:
+         addChildNodes(context, candidates, true);
+         break;
+       case DESCENDANT_OR_SELF:
+         candidates.add (context);
+         addChildNodes(context, candidates, true);
+         break;
+       case PARENT:
+         addParentNode(context, candidates, false);
+         break;
+       case ANCESTOR:
+         addParentNode(context, candidates, true);
+         break;
+       case ANCESTOR_OR_SELF:
+         candidates.add(context);
+         addParentNode(context, candidates, true);
+         break;
+       case FOLLOWING_SIBLING:
+         addFollowingNodes(context, candidates, false);
+         break;
+       case PRECEDING_SIBLING:
+         addPrecedingNodes(context, candidates, false);
+         break;
+       case FOLLOWING:
+         addFollowingNodes(context, candidates, true);
+         break;
+       case PRECEDING:
+         addPrecedingNodes(context, candidates, true);
+         break;
+       case ATTRIBUTE:
+         addAttributes(context, candidates);
+         break;
+       case NAMESPACE:
+         addNamespaceAttributes(context, candidates);
+         break;
+       case SELF:
+         candidates.add(context);
+         break;
+       }
+   }
+ 
+   void addChildNodes(Node context, Collection acc, boolean recurse)
+   {
+     Node child = context.getFirstChild();
+     while (child != null)
+       {
+         acc.add(child);
+         if (recurse)
+           {
+             addChildNodes(child, acc, recurse);
+           }
+         child = child.getNextSibling();
+       }
+   }
+ 
+   void addParentNode(Node context, Collection acc, boolean recurse)
+   {
+     Node parent = (context.getNodeType() == Node.ATTRIBUTE_NODE) ?
+       ((Attr) context).getOwnerElement() : context.getParentNode();
+     if (parent != null)
+       {
+         acc.add(parent);
+         if (recurse)
+           {
+             addParentNode(parent, acc, recurse);
+           }
+       }
+   }
+ 
+   void addFollowingNodes(Node context, Collection acc, boolean recurse)
+   {
+     Node cur = context.getNextSibling();
+     while (cur != null)
+       {
+         acc.add(cur);
+         if (recurse)
+           {
+             addChildNodes(cur, acc, true);
+           }
+         cur = cur.getNextSibling();
+       }
+     if (recurse)
+       {
+         context = (context.getNodeType() == Node.ATTRIBUTE_NODE) ?
+           ((Attr) context).getOwnerElement() : context.getParentNode();
+         if (context != null)
+           {
+             addFollowingNodes(context, acc, recurse);
+           }
+       }
+   }
+ 
+   void addPrecedingNodes(Node context, Collection acc, boolean recurse)
+   {
+     Node cur = context.getPreviousSibling();
+     while (cur != null)
+       {
+         acc.add(cur);
+         if (recurse)
+           {
+             addChildNodes(cur, acc, true);
+           }
+         cur = cur.getPreviousSibling();
+       }
+     if (recurse)
+       {
+         context = (context.getNodeType() == Node.ATTRIBUTE_NODE) ?
+           ((Attr) context).getOwnerElement() : context.getParentNode();
+         if (context != null)
+           {
+             addPrecedingNodes(context, acc, recurse);
+           }
+       }
+   }
+ 
+   void addAttributes(Node context, Collection acc)
+   {
+     NamedNodeMap attrs = context.getAttributes();
+     if (attrs != null)
+       {
+         int attrLen = attrs.getLength();
+         for (int i = 0; i < attrLen; i++)
+           {
+             Node attr = attrs.item(i);
+             if (!isNamespaceAttribute(attr))
+               {
+                 acc.add(attr);
+               }
+           }
+       }
+   }
+ 
+   void addNamespaceAttributes(Node context, Collection acc)
+   {
+     NamedNodeMap attrs = context.getAttributes();
+     if (attrs != null)
+       {
+         int attrLen = attrs.getLength();
+         for (int i = 0; i < attrLen; i++)
+           {
+             Node attr = attrs.item(i);
+             if (isNamespaceAttribute(attr))
+               {
+                 acc.add(attr);
+               }
+           }
+       }
+   }
+ 
+   final boolean isNamespaceAttribute(Node node)
+   {
+     String uri = node.getNamespaceURI();
+     return (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
+             XMLConstants.XMLNS_ATTRIBUTE.equals(node.getPrefix()) ||
+             XMLConstants.XMLNS_ATTRIBUTE.equals(node.getNodeName()));
+   }
+ 
+   public Expr clone(Object context)
+   {
+     int len = tests.length;
+     List tests2 = new ArrayList(len);
+     for (int i = 0; i < len; i++)
+       {
+         tests2.add(tests[i].clone(context));
+       }
+     return new Selector(axis, tests2);
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (int i = 0; i < tests.length; i++)
+       {
+         if (tests[i].references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer();
+     switch (axis)
+       {
+       case ANCESTOR:
+         buf.append("ancestor::");
+         break;
+       case ANCESTOR_OR_SELF:
+         buf.append("ancestor-or-self::");
+         break;
+       case ATTRIBUTE:
+         if (tests.length == 0 ||
+             (tests[0] instanceof NameTest))
+           {
+             buf.append('@');
+           }
+         else
+           {
+             buf.append("attribute::");
+           }
+         break;
+       case CHILD:
+         //buf.append("child::");
+         break;
+       case DESCENDANT:
+         buf.append("descendant::");
+         break;
+       case DESCENDANT_OR_SELF:
+         buf.append("descendant-or-self::");
+         break;
+       case FOLLOWING:
+         buf.append("following::");
+         break;
+       case FOLLOWING_SIBLING:
+         buf.append("following-sibling::");
+         break;
+       case NAMESPACE:
+         buf.append("namespace::");
+         break;
+       case PARENT:
+         if (tests.length == 0 ||
+             (tests[0] instanceof NodeTypeTest &&
+              ((NodeTypeTest) tests[0]).type == 0))
+           {
+             return "..";
+           }
+         buf.append("parent::");
+         break;
+       case PRECEDING:
+         buf.append("preceding::");
+         break;
+       case PRECEDING_SIBLING:
+         buf.append("preceding-sibling::");
+         break;
+       case SELF:
+         if (tests.length == 0 ||
+             (tests[0] instanceof NodeTypeTest &&
+              ((NodeTypeTest) tests[0]).type == 0))
+           {
+             return ".";
+           }
+         buf.append("self::");
+         break;
+       }
+     if (tests.length == 0)
+       {
+         buf.append('*');
+       }
+     else
+       {
+         for (int i = 0; i < tests.length; i++)
+           {
+             buf.append(tests[i]);
+           }
+       }
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/StartsWithFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/StartsWithFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/StartsWithFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/StartsWithFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* StartsWithFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>starts-with</code> function returns true if the first argument
+  * string starts with the second argument string, and otherwise returns false.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class StartsWithFunction
+   extends Expr
+ {
+ 
+   final Expr arg1;
+   final Expr arg2;
+ 
+   StartsWithFunction(List args)
+   {
+     this((Expr) args.get(0), (Expr) args.get(1));
+   }
+ 
+   StartsWithFunction(Expr arg1, Expr arg2)
+   {
+     this.arg1 = arg1;
+     this.arg2 = arg2;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val1 = arg1.evaluate(context, pos, len);
+     Object val2 = arg2.evaluate(context, pos, len);
+     String s1 = _string(context, val1);
+     String s2 = _string(context, val2);
+     return s1.startsWith(s2) ? Boolean.TRUE : Boolean.FALSE;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new StartsWithFunction(arg1.clone(context), arg2.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg1.references(var) || arg2.references(var));
+   }
+ 
+   public String toString()
+   {
+     return "starts-with(" + arg1 + "," + arg2 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Steps.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Steps.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Steps.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Steps.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,253 ----
+ /* Steps.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.LinkedHashSet;
+ import java.util.LinkedList;
+ import java.util.Set;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A list of transitions between components in a location path.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class Steps
+   extends Path
+ {
+ 
+   final LinkedList path;
+ 
+   public Steps()
+   {
+     this(new LinkedList());
+   }
+ 
+   Steps(LinkedList path)
+   {
+     this.path = path;
+   }
+ 
+   public boolean matches(Node context)
+   {
+     // Right to left
+     return matches(context, path.size() - 1);
+   }
+ 
+   boolean matches(Node context, int pos)
+   {
+     Pattern right = (Pattern) path.get(pos);
+     if (!right.matches(context))
+       {
+         return false;
+       }
+     if (pos > 0)
+       {
+         Pattern left = (Pattern) path.get(pos - 1);
+         Iterator j = possibleContexts(right, context).iterator();
+         while (j.hasNext())
+           {
+             Node candidate = (Node) j.next();
+             if (left.matches(candidate) &&
+                 matches(candidate, pos - 1))
+               {
+                 return true;
+               }
+             // keep going, there may be another candidate
+           }
+         return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * Essentially the reverse of Selector.addCandidates.
+    * The idea is to determine possible context nodes for a match.
+    */
+   Collection possibleContexts(Pattern pattern, Node context)
+   {
+     if (pattern instanceof Selector)
+       {
+         Selector s = (Selector) pattern;
+         Collection candidates = new LinkedHashSet();
+         switch (s.axis)
+           {
+           case Selector.PARENT:
+             s.addChildNodes(context, candidates, false);
+             break;
+           case Selector.ANCESTOR:
+             s.addChildNodes(context, candidates, true);
+             break;
+           case Selector.ANCESTOR_OR_SELF:
+             candidates.add (context);
+             s.addChildNodes(context, candidates, true);
+             break;
+           case Selector.CHILD:
+             s.addParentNode(context, candidates, false);
+             break;
+           case Selector.DESCENDANT:
+             s.addParentNode(context, candidates, true);
+             break;
+           case Selector.DESCENDANT_OR_SELF:
+             candidates.add(context);
+             s.addParentNode(context, candidates, true);
+             break;
+           case Selector.PRECEDING_SIBLING:
+             s.addFollowingNodes(context, candidates, false);
+             break;
+           case Selector.FOLLOWING_SIBLING:
+             s.addPrecedingNodes(context, candidates, false);
+             break;
+           case Selector.PRECEDING:
+             s.addFollowingNodes(context, candidates, true);
+             break;
+           case Selector.FOLLOWING:
+             s.addPrecedingNodes(context, candidates, true);
+             break;
+           case Selector.ATTRIBUTE:
+           case Selector.NAMESPACE:
+             if (context.getNodeType() == Node.ATTRIBUTE_NODE)
+               {
+                 candidates.add(((Attr) context).getOwnerElement());
+               }
+             break;
+           case Selector.SELF:
+             candidates.add(context);
+             break;
+           }
+         return candidates;
+       }
+     return Collections.EMPTY_SET;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     //System.err.println(toString()+" evaluate");
+     // Left to right
+     Iterator i = path.iterator();
+     Expr lhs = (Expr) i.next();
+     Object val = lhs.evaluate(context, pos, len);
+     //System.err.println("\tevaluate "+lhs+" = "+val);
+     while (val instanceof Collection && i.hasNext())
+       {
+         Path rhs = (Path) i.next();
+         val = rhs.evaluate(context, (Collection) val);
+         //System.err.println("\tevaluate "+rhs+" = "+val);
+       }
+     return val;
+   }
+ 
+   Collection evaluate(Node context, Collection ns)
+   {
+     // Left to right
+     Iterator i = path.iterator();
+     Expr lhs = (Expr) i.next();
+     if (lhs instanceof Path)
+       {
+         ns = ((Path) lhs).evaluate(context, ns);
+       }
+     else
+       {
+         Set acc = new LinkedHashSet();
+         int pos = 1, len = ns.size();
+         for (Iterator j = ns.iterator(); j.hasNext(); )
+           {
+             Node node = (Node) j.next();
+             Object ret = lhs.evaluate(node, pos++, len);
+             if (ret instanceof Collection)
+               {
+                 acc.addAll((Collection) ret);
+               }
+           }
+         ns = acc;
+       }
+     while (i.hasNext())
+       {
+         Path rhs = (Path) i.next();
+         ns = rhs.evaluate(context, ns);
+       }
+     return ns;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     int len = path.size();
+     LinkedList path2 = new LinkedList();
+     for (int i = 0; i < len; i++)
+       {
+         path2.add(((Expr) path.get(i)).clone(context));
+       }
+     return new Steps(path2);
+   }
+ 
+   public boolean references(QName var)
+   {
+     for (Iterator i = path.iterator(); i.hasNext(); )
+       {
+         if (((Expr) i.next()).references(var))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer();
+     Iterator i = path.iterator();
+     Expr expr = (Expr) i.next();
+     if (!(expr instanceof Root))
+       {
+         buf.append(expr);
+       }
+     while (i.hasNext())
+       {
+         expr = (Expr) i.next();
+         buf.append('/');
+         buf.append(expr);
+       }
+     return buf.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/StringFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/StringFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/StringFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/StringFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,119 ----
+ /* StringFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>string function converts an object to a string as follows:
+  * <ul>
+  * <li>A node-set is converted to a string by returning the string-value of
+  * the node in the node-set that is first in document order. If the node-set
+  * is empty, an empty string is returned.</li>
+  * <li>A number is converted to a string as follows
+  * <ul>
+  * <li>NaN is converted to the string NaN</li>
+  * <li>positive zero is converted to the string 0</li>
+  * <li>negative zero is converted to the string 0</li>
+  * <li>positive infinity is converted to the string Infinity</li>
+  * <li>negative infinity is converted to the string -Infinity</li>
+  * <li>if the number is an integer, the number is represented in decimal
+  * form as a Number with no decimal point and no leading zeros, preceded by
+  * a minus sign (-) if the number is negative</li>
+  * <li>otherwise, the number is represented in decimal form as a Number
+  * including a decimal point with at least one digit before the decimal
+  * point and at least one digit after the decimal point, preceded by a minus
+  * sign (-) if the number is negative; there must be no leading zeros before
+  * the decimal point apart possibly from the one required digit immediately
+  * before the decimal point; beyond the one required digit after the decimal
+  * point there must be as many, but only as many, more digits as are needed
+  * to uniquely distinguish the number from all other IEEE 754 numeric
+  * values.</li>
+  * </ul>
+  * </li>
+  * <li>The boolean false value is converted to the string false. The boolean
+  * true value is converted to the string true.</li>
+  * <li>An object of a type other than the four basic types is converted to a
+  * string in a way that is dependent on that type.</li>
+  * </ul>
+  * If the argument is omitted, it defaults to a node-set with the context
+  * node as its only member.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class StringFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   StringFunction(List args)
+   {
+     this(args.size() > 0 ? (Expr) args.get(0) : null);
+   }
+   
+   StringFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
+     return _string(context, val);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new StringFunction((arg == null) ? null :
+                               arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg == null) ? false : arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return (arg == null) ? "string()" : "string(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/StringLengthFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/StringLengthFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/StringLengthFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/StringLengthFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* StringLengthFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>string-length</code> function returns the number of characters
+  * in the string.
+  * If the argument is omitted, it defaults to the context node converted to
+  * a string, in other words the string-value of the context node.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class StringLengthFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   StringLengthFunction(List args)
+   {
+     this(args.isEmpty() ? null : (Expr) args.get(0));
+   }
+   
+   StringLengthFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
+     String s = _string(context, val);
+     return new Double((double) s.length());
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new StringLengthFunction((arg == null) ? null :
+                                     arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg == null) ? false : arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return (arg == null) ? "string-length()" : "string-length(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/SubstringAfterFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/SubstringAfterFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/SubstringAfterFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/SubstringAfterFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* SubstringAfterFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>substring-after</code> function returns the substring of the
+  * first argument string that follows the first occurrence of the second
+  * argument string in the first argument string, or the empty string if the
+  * first argument string does not contain the second argument string. For
+  * example, substring-after("1999/04/01","/") returns 04/01, and
+  * substring-after("1999/04/01","19") returns 99/04/01.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class SubstringAfterFunction
+   extends Expr
+ {
+ 
+   final Expr arg1;
+   final Expr arg2;
+ 
+   SubstringAfterFunction(List args)
+   {
+     this((Expr) args.get(0), (Expr) args.get(1));
+   }
+ 
+   SubstringAfterFunction(Expr arg1, Expr arg2)
+   {
+     this.arg1 = arg1;
+     this.arg2 = arg2;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val1 = arg1.evaluate(context, pos, len);
+     Object val2 = arg2.evaluate(context, pos, len);
+     String s1 = _string(context, val1);
+     String s2 = _string(context, val2);
+     int index = s1.indexOf(s2);
+     return (index == -1) ? "" : s1.substring(index + s2.length());
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new SubstringAfterFunction(arg1.clone(context),
+                                       arg2.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg1.references(var) || arg2.references(var));
+   }
+ 
+   public String toString()
+   {
+     return "substring-after(" + arg1 + "," + arg2 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/SubstringBeforeFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/SubstringBeforeFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/SubstringBeforeFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/SubstringBeforeFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /* SubstringBeforeFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>substring-before</code> function returns the substring of the
+  * first argument string that precedes the first occurrence of the second
+  * argument string in the first argument string, or the empty string if the
+  * first argument string does not contain the second argument string. For
+  * example, substring-before("1999/04/01","/") returns 1999.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class SubstringBeforeFunction
+   extends Expr
+ {
+ 
+   final Expr arg1;
+   final Expr arg2;
+ 
+   SubstringBeforeFunction(List args)
+   {
+     this((Expr) args.get(0), (Expr) args.get(1));
+   }
+ 
+   SubstringBeforeFunction(Expr arg1, Expr arg2)
+   {
+     this.arg1 = arg1;
+     this.arg2 = arg2;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val1 = arg1.evaluate(context, pos, len);
+     Object val2 = arg2.evaluate(context, pos, len);
+     String s1 = _string(context, val1);
+     String s2 = _string(context, val2);
+     int index = s1.indexOf(s2);
+     return (index == -1) ? "" : s1.substring(0, index);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new SubstringBeforeFunction(arg1.clone(context),
+                                        arg2.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg1.references(var) || arg2.references(var));
+   }
+ 
+   public String toString()
+   {
+     return "substring-before(" + arg1 + "," + arg2 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/SubstringFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/SubstringFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/SubstringFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/SubstringFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,129 ----
+ /* SubstringFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The substring function returns the substring of the first argument
+  * starting at the position specified in the second argument with length
+  * specified in the third argument. For example, substring("12345",2,3)
+  * returns "234". If the third argument is not specified, it returns the
+  * substring starting at the position specified in the second argument and
+  * continuing to the end of the string. For example, substring("12345",2)
+  * returns "2345".
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class SubstringFunction
+   extends Expr
+ {
+ 
+   final Expr arg1;
+   final Expr arg2;
+   final Expr arg3;
+ 
+   SubstringFunction(List args)
+   {
+     this((Expr) args.get(0), (Expr) args.get(1),
+          (args.size() > 2) ? (Expr) args.get(2) : null);
+   }
+ 
+   SubstringFunction(Expr arg1, Expr arg2, Expr arg3)
+   {
+     this.arg1 = arg1;
+     this.arg2 = arg2;
+     this.arg3 = arg3;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val1 = arg1.evaluate(context, pos, len);
+     Object val2 = arg2.evaluate(context, pos, len);
+     String s = _string(context, val1);
+     int p = (val2 instanceof Double) ?
+       ((Double) val2).intValue() :
+         (int) Math.round(_number(context, val2));
+     p--;
+     if (p < 0)
+       {
+         p = 0;
+       }
+ 
+     int l = s.length() - p;
+     if (l <= 0)
+       {
+         return "";
+       }
+ 
+     if (arg3 != null)
+       {
+         Object val3 = arg3.evaluate(context, pos, len);
+         int v3 = (val3 instanceof Double) ?
+           ((Double) val3).intValue() :
+             (int) Math.round(_number(context, val3));
+         if (v3 < l) 
+           {
+             l = v3;
+           }
+       }
+ 
+     return s.substring(p, p + l);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new SubstringFunction(arg1.clone(context), arg2.clone(context),
+                                  (arg3 == null) ? null : arg3.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg1.references(var) || arg2.references(var) ||
+             (arg3 == null) ? false : arg3.references(var));
+   }
+ 
+   public String toString()
+   {
+     return (arg3 == null) ? "substring(" + arg1 + "," + arg2 + ")" :
+       "substring(" + arg1 + "," + arg2 + "," + arg3 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/SumFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/SumFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/SumFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/SumFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* SumFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>sum</code> function returns the sum, for each node in the
+  * argument node-set, of the result of converting the string-values of the
+  * node to a number.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class SumFunction
+   extends Expr
+ {
+ 
+   final Expr arg;
+ 
+   SumFunction(List args)
+   {
+     this((Expr) args.get(0));
+   }
+ 
+   SumFunction(Expr arg)
+   {
+     this.arg = arg;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val = arg.evaluate(context, pos, len);
+     double sum = 0.0d;
+     if (val instanceof Collection)
+       {
+         for (Iterator i = ((Collection) val).iterator(); i.hasNext(); )
+           {
+             Node node = (Node) i.next();
+             String s = stringValue(node);
+             sum += _number(context, s);
+           }
+       }
+     return new Double(sum);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new SumFunction(arg.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return arg.references(var);
+   }
+ 
+   public String toString()
+   {
+     return "sum(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Test.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Test.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/Test.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/Test.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* Test.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * A test that can be performed on a node to determine whether to include it
+  * in a selection.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public abstract class Test
+ {
+ 
+   public abstract boolean matches(Node node, int pos, int len);
+ 
+   public abstract Test clone(Object context);
+ 
+   public abstract boolean references(QName var);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/TranslateFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/TranslateFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/TranslateFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/TranslateFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,133 ----
+ /* TranslateFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.List;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>translate</code> function returns the first argument string
+  * with occurrences of characters in the second argument string replaced by
+  * the character at the corresponding position in the third argument string.
+  * For example, translate("bar","abc","ABC") returns the string BAr. If
+  * there is a character in the second argument string with no character at a
+  * corresponding position in the third argument string (because the second
+  * argument string is longer than the third argument string), then
+  * occurrences of that character in the first argument string are removed.
+  * For example, translate("--aaa--","abc-","ABC") returns "AAA". If a
+  * character occurs more than once in the second argument string, then the
+  * first occurrence determines the replacement character. If the third
+  * argument string is longer than the second argument string, then excess
+  * characters are ignored.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class TranslateFunction
+   extends Expr
+ {
+ 
+   final Expr arg1;
+   final Expr arg2;
+   final Expr arg3;
+ 
+   TranslateFunction(List args)
+   {
+     this((Expr) args.get(0), (Expr) args.get(1), (Expr) args.get(2));
+   }
+ 
+   TranslateFunction(Expr arg1, Expr arg2, Expr arg3)
+   {
+     this.arg1 = arg1;
+     this.arg2 = arg2;
+     this.arg3 = arg3;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object val1 = arg1.evaluate(context, pos, len);
+     Object val2 = arg2.evaluate(context, pos, len);
+     Object val3 = arg3.evaluate(context, pos, len);
+     String string = _string(context, val1);
+     String search = _string(context, val2);
+     String replace = _string(context, val3);
+     StringBuffer buf = new StringBuffer();
+     int l1 = string.length();
+     int l2 = search.length();
+     int l3 = replace.length();
+     for (int i = 0; i < l1; i++)
+       {
+         char c = string.charAt(i);
+         boolean replaced = false;
+         for (int j = 0; j < l2; j++)
+           {
+             if (c == search.charAt(j))
+               {
+                 if (j < l3)
+                   {
+                     buf.append(replace.charAt(j));
+                   }
+                 replaced = true;
+               }
+           }
+         if (!replaced)
+           {
+             buf.append(c);
+           } 
+       } 
+     return new String(buf);
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new TranslateFunction(arg1.clone(context), arg2.clone(context),
+                                  arg3.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (arg1.references(var) || arg2.references(var) ||
+             arg3.references(var));
+   }
+   
+   public String toString()
+   {
+     return "translate(" + arg1 + "," + arg2 + "," + arg3 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/TrueFunction.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/TrueFunction.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/TrueFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/TrueFunction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* TrueFunction.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The <code>true</code> function returns true.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ final class TrueFunction
+   extends Expr
+ {
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     return Boolean.TRUE;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new TrueFunction();
+   }
+ 
+   public boolean references(QName var)
+   {
+     return false;
+   }
+ 
+   public String toString()
+   {
+     return "true()";
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/UnionExpr.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/UnionExpr.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/UnionExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/UnionExpr.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,108 ----
+ /* UnionExpr.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.List;
+ import java.util.Set;
+ import javax.xml.namespace.QName;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * The union of two node-sets.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public final class UnionExpr
+   extends Pattern
+ {
+ 
+   final Expr lhs;
+   final Expr rhs;
+ 
+   public UnionExpr(Expr lhs, Expr rhs)
+   {
+     this.lhs = lhs;
+     this.rhs = rhs;
+   }
+ 
+   public boolean matches(Node context)
+   {
+     if (lhs instanceof Pattern && rhs instanceof Pattern)
+       {
+         return ((Pattern) lhs).matches(context) ||
+           ((Pattern) rhs).matches(context);
+       }
+     return false;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     Object left = lhs.evaluate(context, pos, len);
+     Object right = rhs.evaluate(context, pos, len);
+     if (left instanceof Collection && right instanceof Collection)
+       {
+         Set set = new HashSet();
+         set.addAll ((Collection) left);
+         set.addAll ((Collection) right);
+         List list = new ArrayList(set);
+         Collections.sort(list, documentOrderComparator);
+         return list;
+       }
+     return Collections.EMPTY_SET;
+   }
+ 
+   public Expr clone(Object context)
+   {
+     return new UnionExpr(lhs.clone(context), rhs.clone(context));
+   }
+ 
+   public boolean references(QName var)
+   {
+     return (lhs.references(var) || rhs.references(var));
+   }
+ 
+   public String toString()
+   {
+     return lhs + " | " + rhs;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/VariableReference.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/VariableReference.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/VariableReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/VariableReference.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* VariableReference.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathVariableResolver;
+ import org.w3c.dom.Node;
+ import gnu.xml.transform.Bindings;
+ 
+ public class VariableReference
+   extends Expr
+ {
+ 
+   final XPathVariableResolver resolver;
+   final QName name;
+ 
+   public VariableReference(XPathVariableResolver resolver, QName name)
+   {
+     this.resolver = resolver;
+     this.name = name;
+   }
+ 
+   public Object evaluate(Node context, int pos, int len)
+   {
+     if (resolver != null)
+       {
+         if (resolver instanceof Bindings)
+           {
+             // Needs context to operate properly
+             return ((Bindings) resolver).get(name, context, pos, len);
+           }
+         return resolver.resolveVariable(name);
+       }
+     throw new IllegalStateException("no variable resolver");
+   }
+ 
+   public Expr clone(Object context)
+   {
+     XPathVariableResolver r = resolver;
+     if (context instanceof XPathVariableResolver)
+       {
+         r = (XPathVariableResolver) context;
+       }
+     return new VariableReference(r, name);
+   }
+ 
+   public boolean references(QName var)
+   {
+     return name.equals(var);
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer("$");
+     String prefix = name.getPrefix();
+     if (prefix != null && !"".equals(prefix))
+       {
+         buf.append(prefix);
+         buf.append(':');
+       }
+     buf.append(name.getLocalPart());
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathFactoryImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathFactoryImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathFactoryImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathFactoryImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /* XPathFactoryImpl.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import javax.xml.xpath.XPath;
+ import javax.xml.xpath.XPathFactory;
+ import javax.xml.xpath.XPathFactoryConfigurationException;
+ import javax.xml.xpath.XPathFunctionResolver;
+ import javax.xml.xpath.XPathVariableResolver;
+ 
+ /**
+  * GNU XPath factory implementation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XPathFactoryImpl
+   extends XPathFactory
+ {
+ 
+   XPathVariableResolver variableResolver;
+   XPathFunctionResolver functionResolver;
+ 
+   public boolean isObjectModelSupported(String objectModel)
+   {
+     return XPathFactory.DEFAULT_OBJECT_MODEL_URI.equals(objectModel);
+   }
+ 
+   public void setFeature(String name, boolean value)
+     throws XPathFactoryConfigurationException
+   {
+     throw new XPathFactoryConfigurationException(name);
+   }
+ 
+   public boolean getFeature(String name)
+     throws XPathFactoryConfigurationException
+   {
+     throw new XPathFactoryConfigurationException(name);
+   }
+ 
+   public void setXPathVariableResolver(XPathVariableResolver resolver)
+   {
+     variableResolver = resolver;
+   }
+ 
+   public void setXPathFunctionResolver(XPathFunctionResolver resolver)
+   {
+     functionResolver = resolver;
+   }
+ 
+   public XPath newXPath()
+   {
+     return new XPathImpl(null, variableResolver, functionResolver);
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathImpl.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathImpl.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,164 ----
+ /* XPathImpl.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.io.IOException;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPath;
+ import javax.xml.xpath.XPathExpression;
+ import javax.xml.xpath.XPathExpressionException;
+ import javax.xml.xpath.XPathFunctionResolver;
+ import javax.xml.xpath.XPathVariableResolver;
+ import org.xml.sax.InputSource;
+ 
+ /**
+  * JAXP XPath implementation.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XPathImpl
+   implements XPath
+ {
+ 
+   XPathParser parser;
+   NamespaceContext namespaceContext;
+   XPathVariableResolver variableResolver;
+   XPathFunctionResolver functionResolver;
+ 
+   XPathImpl(NamespaceContext namespaceContext,
+             XPathVariableResolver variableResolver,
+             XPathFunctionResolver functionResolver)
+   {
+     parser = new XPathParser();
+     this.namespaceContext = namespaceContext;
+     this.variableResolver = variableResolver;
+     this.functionResolver = functionResolver;
+     reset();
+   }
+ 
+   public void reset()
+   {
+     parser.namespaceContext = namespaceContext;
+     parser.variableResolver = variableResolver;
+     parser.functionResolver = functionResolver;
+   }
+ 
+   public void setXPathVariableResolver(XPathVariableResolver resolver)
+   {
+     parser.variableResolver = resolver;
+   }
+ 
+   public XPathVariableResolver getXPathVariableResolver()
+   {
+     return parser.variableResolver;
+   }
+ 
+   public void setXPathFunctionResolver(XPathFunctionResolver resolver)
+   {
+     parser.functionResolver = resolver;
+   }
+ 
+   public XPathFunctionResolver getXPathFunctionResolver()
+   {
+     return parser.functionResolver;
+   }
+ 
+   public void setNamespaceContext(NamespaceContext nsContext)
+   {
+     parser.namespaceContext = nsContext;
+   }
+ 
+   public NamespaceContext getNamespaceContext()
+   {
+     return parser.namespaceContext;
+   }
+ 
+   public XPathExpression compile(String expression)
+     throws XPathExpressionException
+   {
+     XPathTokenizer tokenizer = new XPathTokenizer(expression);
+     try
+       {
+         return (Expr) parser.yyparse(tokenizer);
+       }
+     catch (IOException e)
+       {
+         throw new XPathExpressionException(e);
+       }
+     catch (XPathParser.yyException e)
+       {
+         throw new XPathExpressionException(expression);
+       }
+   }
+   
+   public Object evaluate(String expression,
+                          Object item,
+                          QName returnType)
+     throws XPathExpressionException
+   {
+     XPathExpression expr = compile(expression);
+     return expr.evaluate(item, returnType);
+   }
+ 
+   public String evaluate(String expression,
+                          Object item)
+     throws XPathExpressionException
+   {
+     XPathExpression expr = compile(expression);
+     return expr.evaluate(item);
+   }
+ 
+   public Object evaluate(String expression,
+                          InputSource source,
+                          QName returnType)
+     throws XPathExpressionException
+   {
+     XPathExpression expr = compile(expression);
+     return expr.evaluate(source, returnType);
+   }
+ 
+   public String evaluate(String expression,
+                          InputSource source)
+     throws XPathExpressionException
+   {
+     XPathExpression expr = compile(expression);
+     return expr.evaluate(source);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathParser.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathParser.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathParser.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,1464 ----
+ // created by jay 0.8 (c) 1998 Axel.Schreiner@informatik.uni-osnabrueck.de
+ 
+ 					// line 2 "XPathParser.y"
+ /* XPathParser.y - An XPath 1.0 parser.
+    Copyright (C) 2004 The Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.List;
+ import java.util.Map;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunctionResolver;
+ import javax.xml.xpath.XPathVariableResolver;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * An XPath 1.0 parser.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XPathParser
+ {
+ 
+   NamespaceContext namespaceContext;
+   XPathVariableResolver variableResolver;
+   XPathFunctionResolver functionResolver;
+ 
+   QName getQName(String name)
+   {
+     QName qName = QName.valueOf(name);
+     if (namespaceContext != null)
+       {
+         String prefix = qName.getPrefix();
+         String uri = qName.getNamespaceURI();
+         if (prefix != null && (uri == null || uri.length() == 0))
+           {
+             uri = namespaceContext.getNamespaceURI(prefix);
+             String localName = qName.getLocalPart();
+             qName = new QName(uri, localName, prefix);
+           }
+       }
+     return qName;
+   }
+ 
+   Expr lookupFunction(String name, List args)
+   {
+     int arity = args.size();
+     if ("position".equals(name) && arity == 0)
+       {
+         return new PositionFunction();
+       }
+     else if ("last".equals(name) && arity == 0)
+       {
+         return new LastFunction();
+       }
+     else if ("string".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new StringFunction(args);
+       }
+     else if ("number".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new NumberFunction(args);
+       }
+     else if ("boolean".equals(name) && arity == 1)
+       {
+         return new BooleanFunction(args);
+       }
+     else if ("count".equals(name) && arity == 1)
+       {
+         return new CountFunction(args);
+       }
+     else if ("not".equals(name) && arity == 1)
+       {
+         return new NotFunction(args);
+       }
+     else if ("id".equals(name) && arity == 1)
+       {
+         return new IdFunction(args);
+       }
+     else if ("concat".equals(name) && arity > 1)
+       {
+         return new ConcatFunction(args);
+       }
+     else if ("true".equals(name) && arity == 0)
+       {
+         return new TrueFunction();
+       }
+     else if ("false".equals(name) && arity == 0)
+       {
+         return new FalseFunction();
+       }
+     else if ("name".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new NameFunction(args);
+       }
+     else if ("local-name".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new LocalNameFunction(args);
+       }
+     else if ("namespace-uri".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new NamespaceUriFunction(args);
+       }
+     else if ("starts-with".equals(name) && arity == 2)
+       {
+         return new StartsWithFunction(args);
+       }
+     else if ("contains".equals(name) && arity == 2)
+       {
+         return new ContainsFunction(args);
+       }
+     else if ("string-length".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new StringLengthFunction(args);
+       }
+     else if ("translate".equals(name) && arity == 3)
+       {
+         return new TranslateFunction(args);
+       }
+     else if ("normalize-space".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new NormalizeSpaceFunction(args);
+       }
+     else if ("substring".equals(name) && (arity == 2 || arity == 3))
+       {
+         return new SubstringFunction(args);
+       }
+     else if ("substring-before".equals(name) && arity == 2)
+       {
+         return new SubstringBeforeFunction(args);
+       }
+     else if ("substring-after".equals(name) && arity == 2)
+       {
+         return new SubstringAfterFunction(args);
+       }
+     else if ("lang".equals(name) && arity == 1)
+       {
+         return new LangFunction(args);
+       }
+     else if ("sum".equals(name) && arity == 1)
+       {
+         return new SumFunction(args);
+       }
+     else if ("floor".equals(name) && arity == 1)
+       {
+         return new FloorFunction(args);
+       }
+     else if ("ceiling".equals(name) && arity == 1)
+       {
+         return new CeilingFunction(args);
+       }
+     else if ("round".equals(name) && arity == 1)
+       {
+         return new RoundFunction(args);
+       }
+     else if (functionResolver != null)
+       {
+         QName qName = QName.valueOf(name);
+         Object function = functionResolver.resolveFunction(qName, arity);
+         if (function != null &&
+             function instanceof Function &&
+             function instanceof Expr)
+           {
+             Function f = (Function) function;
+             f.setArguments(args);
+             return (Expr) function;
+           }
+       }
+     return new FunctionCall(functionResolver, name, args);
+   }
+ 
+ 					// line 211 "-"
+ // %token constants
+ 
+   public static final int LITERAL = 257;
+   public static final int DIGITS = 258;
+   public static final int NAME = 259;
+   public static final int LP = 260;
+   public static final int RP = 261;
+   public static final int LB = 262;
+   public static final int RB = 263;
+   public static final int COMMA = 264;
+   public static final int PIPE = 265;
+   public static final int SLASH = 266;
+   public static final int DOUBLE_SLASH = 267;
+   public static final int EQ = 268;
+   public static final int NE = 269;
+   public static final int GT = 270;
+   public static final int LT = 271;
+   public static final int GTE = 272;
+   public static final int LTE = 273;
+   public static final int PLUS = 274;
+   public static final int MINUS = 275;
+   public static final int AT = 276;
+   public static final int STAR = 277;
+   public static final int DOLLAR = 278;
+   public static final int COLON = 279;
+   public static final int DOUBLE_COLON = 280;
+   public static final int DOT = 281;
+   public static final int DOUBLE_DOT = 282;
+   public static final int ANCESTOR = 283;
+   public static final int ANCESTOR_OR_SELF = 284;
+   public static final int ATTRIBUTE = 285;
+   public static final int CHILD = 286;
+   public static final int DESCENDANT = 287;
+   public static final int DESCENDANT_OR_SELF = 288;
+   public static final int FOLLOWING = 289;
+   public static final int FOLLOWING_SIBLING = 290;
+   public static final int NAMESPACE = 291;
+   public static final int PARENT = 292;
+   public static final int PRECEDING = 293;
+   public static final int PRECEDING_SIBLING = 294;
+   public static final int SELF = 295;
+   public static final int DIV = 296;
+   public static final int MOD = 297;
+   public static final int OR = 298;
+   public static final int AND = 299;
+   public static final int COMMENT = 300;
+   public static final int PROCESSING_INSTRUCTION = 301;
+   public static final int TEXT = 302;
+   public static final int NODE = 303;
+   public static final int UNARY = 304;
+   public static final int yyErrorCode = 256;
+ 
+   /** thrown for irrecoverable syntax errors and stack overflow.
+     */
+   public static class yyException extends java.lang.Exception {
+     public yyException (String message) {
+       super(message);
+     }
+   }
+ 
+   /** must be implemented by a scanner object to supply input to the parser.
+     */
+   public interface yyInput {
+     /** move on to next token.
+         @return false if positioned beyond tokens.
+         @throws IOException on input error.
+       */
+     boolean advance () throws java.io.IOException;
+     /** classifies current token.
+         Should not be called if advance() returned false.
+         @return current %token or single character.
+       */
+     int token ();
+     /** associated with current token.
+         Should not be called if advance() returned false.
+         @return value for token().
+       */
+     Object value ();
+   }
+ 
+   /** simplified error message.
+       @see <a href="#yyerror(java.lang.String, java.lang.String[])">yyerror</a>
+     */
+   public void yyerror (String message) {
+     yyerror(message, null);
+   }
+ 
+   /** (syntax) error message.
+       Can be overwritten to control message format.
+       @param message text to be displayed.
+       @param expected vector of acceptable tokens, if available.
+     */
+   public void yyerror (String message, String[] expected) {
+     if (expected != null && expected.length > 0) {
+       System.err.print(message+", expecting");
+       for (int n = 0; n < expected.length; ++ n)
+         System.err.print(" "+expected[n]);
+       System.err.println();
+     } else
+       System.err.println(message);
+   }
+ 
+   /** debugging support, requires the package jay.yydebug.
+       Set to null to suppress debugging messages.
+     */
+ //t  protected jay.yydebug.yyDebug yydebug;
+ 
+   protected static final int yyFinal = 30;
+ 
+   /** index-checked interface to yyName[].
+       @param token single character or %token value.
+       @return token name or [illegal] or [unknown].
+     */
+ //t  public static final String yyname (int token) {
+ //t    if (token < 0 || token > YyNameClass.yyName.length) return "[illegal]";
+ //t    String name;
+ //t    if ((name = YyNameClass.yyName[token]) != null) return name;
+ //t    return "[unknown]";
+ //t  }
+ 
+   /** computes list of expected tokens on error by tracing the tables.
+       @param state for which to compute the list.
+       @return list of token names.
+     */
+   protected String[] yyExpecting (int state) {
+     int token, n, len = 0;
+     boolean[] ok = new boolean[YyNameClass.yyName.length];
+ 
+     if ((n = YySindexClass.yySindex[state]) != 0)
+       for (token = n < 0 ? -n : 0;
+            token < YyNameClass.yyName.length && n+token < YyTableClass.yyTable.length; ++ token)
+         if (YyCheckClass.yyCheck[n+token] == token && !ok[token] && YyNameClass.yyName[token] != null) {
+           ++ len;
+           ok[token] = true;
+         }
+     if ((n = YyRindexClass.yyRindex[state]) != 0)
+       for (token = n < 0 ? -n : 0;
+            token < YyNameClass.yyName.length && n+token < YyTableClass.yyTable.length; ++ token)
+         if (YyCheckClass.yyCheck[n+token] == token && !ok[token] && YyNameClass.yyName[token] != null) {
+           ++ len;
+           ok[token] = true;
+         }
+ 
+     String result[] = new String[len];
+     for (n = token = 0; n < len;  ++ token)
+       if (ok[token]) result[n++] = YyNameClass.yyName[token];
+     return result;
+   }
+ 
+   /** the generated parser, with debugging messages.
+       Maintains a state and a value stack, currently with fixed maximum size.
+       @param yyLex scanner.
+       @param yydebug debug message writer implementing yyDebug, or null.
+       @return result of the last reduction, if any.
+       @throws yyException on irrecoverable parse error.
+     */
+   public Object yyparse (yyInput yyLex, Object yydebug)
+ 				throws java.io.IOException, yyException {
+ //t    this.yydebug = (jay.yydebug.yyDebug)yydebug;
+     return yyparse(yyLex);
+   }
+ 
+   /** initial size and increment of the state/value stack [default 256].
+       This is not final so that it can be overwritten outside of invocations
+       of yyparse().
+     */
+   protected int yyMax;
+ 
+   /** executed at the beginning of a reduce action.
+       Used as $$ = yyDefault($1), prior to the user-specified action, if any.
+       Can be overwritten to provide deep copy, etc.
+       @param first value for $1, or null.
+       @return first.
+     */
+   protected Object yyDefault (Object first) {
+     return first;
+   }
+ 
+   /** the generated parser.
+       Maintains a state and a value stack, currently with fixed maximum size.
+       @param yyLex scanner.
+       @return result of the last reduction, if any.
+       @throws yyException on irrecoverable parse error.
+     */
+   public Object yyparse (yyInput yyLex)
+ 				throws java.io.IOException, yyException {
+     if (yyMax <= 0) yyMax = 256;			// initial size
+     int yyState = 0, yyStates[] = new int[yyMax];	// state stack
+     Object yyVal = null, yyVals[] = new Object[yyMax];	// value stack
+     int yyToken = -1;					// current input
+     int yyErrorFlag = 0;				// #tks to shift
+ 
+     yyLoop: for (int yyTop = 0;; ++ yyTop) {
+       if (yyTop >= yyStates.length) {			// dynamically increase
+         int[] i = new int[yyStates.length+yyMax];
+         System.arraycopy(yyStates, 0, i, 0, yyStates.length);
+         yyStates = i;
+         Object[] o = new Object[yyVals.length+yyMax];
+         System.arraycopy(yyVals, 0, o, 0, yyVals.length);
+         yyVals = o;
+       }
+       yyStates[yyTop] = yyState;
+       yyVals[yyTop] = yyVal;
+ //t      if (yydebug != null) yydebug.push(yyState, yyVal);
+ 
+       yyDiscarded: for (;;) {	// discarding a token does not change stack
+         int yyN;
+         if ((yyN = YyDefRedClass.yyDefRed[yyState]) == 0) {	// else [default] reduce (yyN)
+           if (yyToken < 0) {
+             yyToken = yyLex.advance() ? yyLex.token() : 0;
+ //t            if (yydebug != null)
+ //t              yydebug.lex(yyState, yyToken, yyname(yyToken), yyLex.value());
+           }
+           if ((yyN = YySindexClass.yySindex[yyState]) != 0 && (yyN += yyToken) >= 0
+               && yyN < YyTableClass.yyTable.length && YyCheckClass.yyCheck[yyN] == yyToken) {
+ //t            if (yydebug != null)
+ //t              yydebug.shift(yyState, YyTableClass.yyTable[yyN], yyErrorFlag-1);
+             yyState = YyTableClass.yyTable[yyN];		// shift to yyN
+             yyVal = yyLex.value();
+             yyToken = -1;
+             if (yyErrorFlag > 0) -- yyErrorFlag;
+             continue yyLoop;
+           }
+           if ((yyN = YyRindexClass.yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0
+               && yyN < YyTableClass.yyTable.length && YyCheckClass.yyCheck[yyN] == yyToken)
+             yyN = YyTableClass.yyTable[yyN];			// reduce (yyN)
+           else
+             switch (yyErrorFlag) {
+   
+             case 0:
+               yyerror("syntax error", yyExpecting(yyState));
+ //t              if (yydebug != null) yydebug.error("syntax error");
+   
+             case 1: case 2:
+               yyErrorFlag = 3;
+               do {
+                 if ((yyN = YySindexClass.yySindex[yyStates[yyTop]]) != 0
+                     && (yyN += yyErrorCode) >= 0 && yyN < YyTableClass.yyTable.length
+                     && YyCheckClass.yyCheck[yyN] == yyErrorCode) {
+ //t                  if (yydebug != null)
+ //t                    yydebug.shift(yyStates[yyTop], YyTableClass.yyTable[yyN], 3);
+                   yyState = YyTableClass.yyTable[yyN];
+                   yyVal = yyLex.value();
+                   continue yyLoop;
+                 }
+ //t                if (yydebug != null) yydebug.pop(yyStates[yyTop]);
+               } while (-- yyTop >= 0);
+ //t              if (yydebug != null) yydebug.reject();
+               throw new yyException("irrecoverable syntax error");
+   
+             case 3:
+               if (yyToken == 0) {
+ //t                if (yydebug != null) yydebug.reject();
+                 throw new yyException("irrecoverable syntax error at end-of-file");
+               }
+ //t              if (yydebug != null)
+ //t                yydebug.discard(yyState, yyToken, yyname(yyToken),
+ //t  							yyLex.value());
+               yyToken = -1;
+               continue yyDiscarded;		// leave stack alone
+             }
+         }
+         int yyV = yyTop + 1-YyLenClass.yyLen[yyN];
+ //t        if (yydebug != null)
+ //t          yydebug.reduce(yyState, yyStates[yyV-1], yyN, YyRuleClass.yyRule[yyN], YyLenClass.yyLen[yyN]);
+         yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]);
+         switch (yyN) {
+ case 4:
+ 					// line 277 "XPathParser.y"
+   {
+       yyVal = new Root();
+     }
+   break;
+ case 5:
+ 					// line 281 "XPathParser.y"
+   {
+       Steps steps;
+       if (yyVals[0+yyTop] instanceof Steps)
+         {
+           steps = (Steps) yyVals[0+yyTop];
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst(yyVals[0+yyTop]);
+         }
+       steps.path.addFirst(new Root());
+       yyVal = steps;
+       /*$$ = new Step(new Root(), (Path) $2);*/
+     }
+   break;
+ case 6:
+ 					// line 297 "XPathParser.y"
+   {
+       Test nt = new NodeTypeTest((short) 0);
+       Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
+                                 Collections.singletonList (nt));
+       Steps steps;
+       if (yyVals[0+yyTop] instanceof Steps)
+         {
+           steps = (Steps) yyVals[0+yyTop];
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst(yyVals[0+yyTop]);
+         }
+       steps.path.addFirst(s);
+       steps.path.addFirst(new Root());
+       yyVal = steps;
+       /*Step step = new Step(s, (Path) $2);*/
+       /*$$ = new Step(new Root(), step);*/
+     }
+   break;
+ case 8:
+ 					// line 322 "XPathParser.y"
+   {
+       Steps steps;
+       if (yyVals[-2+yyTop] instanceof Steps)
+         {
+           steps = (Steps) yyVals[-2+yyTop];
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst(yyVals[-2+yyTop]);
+         }
+       steps.path.addLast(yyVals[0+yyTop]);
+       yyVal = steps;
+       /*$$ = new Step((Expr) $1, (Path) $3);*/
+     }
+   break;
+ case 9:
+ 					// line 338 "XPathParser.y"
+   {
+       Test nt = new NodeTypeTest((short) 0);
+       Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
+                                 Collections.singletonList (nt));
+       Steps steps;
+       if (yyVals[-2+yyTop] instanceof Steps)
+         {
+           steps = (Steps) yyVals[-2+yyTop];
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst(yyVals[-2+yyTop]);
+         }
+       steps.path.addLast(s);
+       steps.path.addLast(yyVals[0+yyTop]);
+       yyVal = steps;
+       /*Step step = new Step(s, (Path) $3);*/
+       /*$$ = new Step((Expr) $1, step);*/
+     }
+   break;
+ case 10:
+ 					// line 362 "XPathParser.y"
+   {
+       yyVal = new Selector (Selector.CHILD, (List) yyVals[0+yyTop]);
+     }
+   break;
+ case 11:
+ 					// line 366 "XPathParser.y"
+   {
+       yyVal = new Selector (Selector.ATTRIBUTE, (List) yyVals[0+yyTop]);
+     }
+   break;
+ case 12:
+ 					// line 370 "XPathParser.y"
+   {
+       yyVal = new Selector (((Integer) yyVals[-2+yyTop]).intValue (), (List) yyVals[0+yyTop]);
+     }
+   break;
+ case 13:
+ 					// line 374 "XPathParser.y"
+   {
+       yyVal = new Selector (Selector.SELF, Collections.EMPTY_LIST);
+     }
+   break;
+ case 14:
+ 					// line 378 "XPathParser.y"
+   {
+       yyVal = new Selector (Selector.PARENT, Collections.EMPTY_LIST);
+     }
+   break;
+ case 15:
+ 					// line 385 "XPathParser.y"
+   {
+       List list = new ArrayList();
+       list.add(yyVals[0+yyTop]);
+       yyVal = list;
+     }
+   break;
+ case 16:
+ 					// line 391 "XPathParser.y"
+   {
+       List list = (List)yyVals[-1+yyTop];
+       list.add(yyVals[0+yyTop]);
+       yyVal = list;
+     }
+   break;
+ case 17:
+ 					// line 415 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.ANCESTOR);
+     }
+   break;
+ case 18:
+ 					// line 419 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.ANCESTOR_OR_SELF);
+     }
+   break;
+ case 19:
+ 					// line 423 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.ATTRIBUTE);
+     }
+   break;
+ case 20:
+ 					// line 427 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.CHILD);
+     }
+   break;
+ case 21:
+ 					// line 431 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.DESCENDANT);
+     }
+   break;
+ case 22:
+ 					// line 435 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.DESCENDANT_OR_SELF);
+     }
+   break;
+ case 23:
+ 					// line 439 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.FOLLOWING);
+     }
+   break;
+ case 24:
+ 					// line 443 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.FOLLOWING_SIBLING);
+     }
+   break;
+ case 25:
+ 					// line 447 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.NAMESPACE);
+     }
+   break;
+ case 26:
+ 					// line 451 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.PARENT);
+     }
+   break;
+ case 27:
+ 					// line 455 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.PRECEDING);
+     }
+   break;
+ case 28:
+ 					// line 459 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.PRECEDING_SIBLING);
+     }
+   break;
+ case 29:
+ 					// line 463 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.SELF);
+     }
+   break;
+ case 31:
+ 					// line 472 "XPathParser.y"
+   {
+       yyVal = new NodeTypeTest(Node.PROCESSING_INSTRUCTION_NODE, (String) yyVals[-1+yyTop]);
+     }
+   break;
+ case 32:
+ 					// line 477 "XPathParser.y"
+   {
+       yyVal = new NodeTypeTest(((Short) yyVals[-1+yyTop]).shortValue());
+     }
+   break;
+ case 33:
+ 					// line 484 "XPathParser.y"
+   {
+       yyVal = new Predicate((Expr) yyVals[-1+yyTop]);
+     }
+   break;
+ case 35:
+ 					// line 492 "XPathParser.y"
+   {
+       yyVal = new ParenthesizedExpr((Expr) yyVals[-1+yyTop]);
+     }
+   break;
+ case 36:
+ 					// line 496 "XPathParser.y"
+   {
+       yyVal = new Constant(yyVals[0+yyTop]);
+     }
+   break;
+ case 37:
+ 					// line 500 "XPathParser.y"
+   {
+       yyVal = new Constant(yyVals[0+yyTop]);
+     }
+   break;
+ case 39:
+ 					// line 508 "XPathParser.y"
+   {
+       yyVal = lookupFunction((String) yyVals[-2+yyTop], Collections.EMPTY_LIST);
+     }
+   break;
+ case 40:
+ 					// line 512 "XPathParser.y"
+   {
+       yyVal = lookupFunction((String) yyVals[-3+yyTop], (List) yyVals[-1+yyTop]);
+     }
+   break;
+ case 41:
+ 					// line 519 "XPathParser.y"
+   {
+       List list = new ArrayList();
+       list.add(yyVals[0+yyTop]);
+       yyVal = list;
+     }
+   break;
+ case 42:
+ 					// line 525 "XPathParser.y"
+   {
+       List list = (List) yyVals[0+yyTop];
+       list.add(0, yyVals[-2+yyTop]);
+       yyVal = list;
+     }
+   break;
+ case 44:
+ 					// line 535 "XPathParser.y"
+   {
+       yyVal = new UnionExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop]);
+     }
+   break;
+ case 47:
+ 					// line 544 "XPathParser.y"
+   {
+       Steps steps;
+       if (yyVals[0+yyTop] instanceof Steps)
+         {
+           steps = (Steps) yyVals[0+yyTop];
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst(yyVals[0+yyTop]);
+         }
+       steps.path.addFirst(yyVals[-2+yyTop]);
+       yyVal = steps;
+       /*$$ = new Step ((Expr) $1, (Path) $3);*/
+     }
+   break;
+ case 48:
+ 					// line 560 "XPathParser.y"
+   {
+       Test nt = new NodeTypeTest((short) 0);
+       Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
+                                 Collections.singletonList(nt));
+       Steps steps;
+       if (yyVals[0+yyTop] instanceof Steps)
+         {
+           steps = (Steps) yyVals[0+yyTop];
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst(yyVals[0+yyTop]);
+         }
+       steps.path.addFirst(s);
+       steps.path.addFirst(yyVals[-2+yyTop]);
+       yyVal = steps;
+       /*Step step = new Step (s, (Path) $3);*/
+       /*$$ = new Step ((Expr) $1, step);*/
+     }
+   break;
+ case 50:
+ 					// line 585 "XPathParser.y"
+   {
+       Predicate filter = (Predicate) yyVals[0+yyTop];
+       Selector s = new Selector(Selector.SELF,
+                                 Collections.singletonList(filter));
+       Steps steps;
+       if (yyVals[-1+yyTop] instanceof Steps)
+         {
+           steps = (Steps) yyVals[-1+yyTop];
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst(yyVals[-1+yyTop]);
+         }
+       steps.path.addLast(s);
+       yyVal = steps;
+       /*$$ = new Step ((Expr) $1, s);*/
+     }
+   break;
+ case 52:
+ 					// line 608 "XPathParser.y"
+   {
+       yyVal = new OrExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop]);
+     }
+   break;
+ case 54:
+ 					// line 616 "XPathParser.y"
+   {
+       yyVal = new AndExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop]);
+     }
+   break;
+ case 56:
+ 					// line 624 "XPathParser.y"
+   {
+       yyVal = new EqualityExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], false);
+     }
+   break;
+ case 57:
+ 					// line 628 "XPathParser.y"
+   {
+       yyVal = new EqualityExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], true);
+     }
+   break;
+ case 59:
+ 					// line 636 "XPathParser.y"
+   {
+       yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], true, false);
+     }
+   break;
+ case 60:
+ 					// line 640 "XPathParser.y"
+   {
+       yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], false, false);
+     }
+   break;
+ case 61:
+ 					// line 644 "XPathParser.y"
+   {
+       yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], true, true);
+     }
+   break;
+ case 62:
+ 					// line 648 "XPathParser.y"
+   {
+       yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], false, true);
+     }
+   break;
+ case 64:
+ 					// line 656 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.ADD);
+     }
+   break;
+ case 65:
+ 					// line 660 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.SUBTRACT);
+     }
+   break;
+ case 67:
+ 					// line 668 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.MULTIPLY);
+     }
+   break;
+ case 68:
+ 					// line 672 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.DIVIDE);
+     }
+   break;
+ case 69:
+ 					// line 676 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.MODULO);
+     }
+   break;
+ case 71:
+ 					// line 684 "XPathParser.y"
+   {
+       yyVal = new NegativeExpr((Expr) yyVals[0+yyTop]);
+     }
+   break;
+ case 72:
+ 					// line 691 "XPathParser.y"
+   {
+       yyVal = new Double((String) yyVals[0+yyTop] + ".0");
+     }
+   break;
+ case 73:
+ 					// line 695 "XPathParser.y"
+   {
+       yyVal = new Double((String) yyVals[-1+yyTop] + ".0");
+     }
+   break;
+ case 74:
+ 					// line 699 "XPathParser.y"
+   {
+       yyVal = new Double((String) yyVals[-2+yyTop] + "." + (String) yyVals[0+yyTop]);
+     }
+   break;
+ case 75:
+ 					// line 703 "XPathParser.y"
+   {
+       yyVal = new Double("0." + (String) yyVals[0+yyTop]);
+     }
+   break;
+ case 77:
+ 					// line 732 "XPathParser.y"
+   {
+       String name = (String) yyVals[0+yyTop];
+       yyVal = new VariableReference(variableResolver, getQName(name));
+     }
+   break;
+ case 78:
+ 					// line 740 "XPathParser.y"
+   {
+       yyVal = new NameTest(null, true, true);
+     }
+   break;
+ case 79:
+ 					// line 744 "XPathParser.y"
+   {
+       QName qName = getQName((String) yyVals[-2+yyTop]);
+       yyVal = new NameTest(qName, true, false);
+     }
+   break;
+ case 80:
+ 					// line 749 "XPathParser.y"
+   {
+       QName qName = getQName((String) yyVals[0+yyTop]);
+       yyVal = new NameTest(qName, false, false);
+     }
+   break;
+ case 82:
+ 					// line 758 "XPathParser.y"
+   {
+       yyVal = (String) yyVals[-2+yyTop] + ':' + (String) yyVals[0+yyTop];
+     }
+   break;
+ case 83:
+ 					// line 765 "XPathParser.y"
+   {
+       yyVal = new Short(Node.COMMENT_NODE);
+     }
+   break;
+ case 84:
+ 					// line 769 "XPathParser.y"
+   {
+       yyVal = new Short(Node.TEXT_NODE);
+     }
+   break;
+ case 85:
+ 					// line 773 "XPathParser.y"
+   {
+       yyVal = new Short(Node.PROCESSING_INSTRUCTION_NODE);
+     }
+   break;
+ case 86:
+ 					// line 777 "XPathParser.y"
+   {
+       yyVal = new Short((short) 0);
+     }
+   break;
+ 					// line 988 "-"
+         }
+         yyTop -= YyLenClass.yyLen[yyN];
+         yyState = yyStates[yyTop];
+         int yyM = YyLhsClass.yyLhs[yyN];
+         if (yyState == 0 && yyM == 0) {
+ //t          if (yydebug != null) yydebug.shift(0, yyFinal);
+           yyState = yyFinal;
+           if (yyToken < 0) {
+             yyToken = yyLex.advance() ? yyLex.token() : 0;
+ //t            if (yydebug != null)
+ //t               yydebug.lex(yyState, yyToken,yyname(yyToken), yyLex.value());
+           }
+           if (yyToken == 0) {
+ //t            if (yydebug != null) yydebug.accept(yyVal);
+             return yyVal;
+           }
+           continue yyLoop;
+         }
+         if ((yyN = YyGindexClass.yyGindex[yyM]) != 0 && (yyN += yyState) >= 0
+             && yyN < YyTableClass.yyTable.length && YyCheckClass.yyCheck[yyN] == yyState)
+           yyState = YyTableClass.yyTable[yyN];
+         else
+           yyState = YyDgotoClass.yyDgoto[yyM];
+ //t        if (yydebug != null) yydebug.shift(yyStates[yyTop], yyState);
+ 	 continue yyLoop;
+       }
+     }
+   }
+ 
+   protected static final class YyLhsClass {
+ 
+     public static final short yyLhs [] = {              -1,
+           0,    2,    2,    4,    4,    4,    3,    3,    3,    5,
+           5,    5,    5,    5,    6,    6,    7,    7,    7,    7,
+           7,    7,    7,    7,    7,    7,    7,    7,    7,    8,
+           8,    8,    9,   12,   12,   12,   12,   12,   15,   15,
+          17,   17,   18,   18,   19,   19,   19,   19,   20,   20,
+           1,    1,   21,   21,   22,   22,   22,   23,   23,   23,
+          23,   23,   24,   24,   24,   25,   25,   25,   25,   26,
+          26,   14,   14,   14,   14,   16,   13,   10,   10,   10,
+          27,   27,   11,   11,   11,   11,
+     };
+   } /* End of class YyLhsClass */
+ 
+   protected static final class YyLenClass {
+ 
+     public static final short yyLen [] = {           2,
+           1,    1,    1,    1,    2,    2,    1,    3,    3,    1,
+           2,    3,    1,    1,    1,    2,    1,    1,    1,    1,
+           1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+           3,    2,    3,    1,    3,    1,    1,    1,    3,    4,
+           1,    3,    1,    3,    1,    1,    3,    3,    1,    2,
+           1,    3,    1,    3,    1,    3,    3,    1,    3,    3,
+           3,    3,    1,    3,    3,    1,    3,    3,    3,    1,
+           2,    1,    2,    3,    2,    1,    2,    1,    3,    1,
+           1,    3,    1,    1,    1,    1,
+     };
+   } /* End class YyLenClass */
+ 
+   protected static final class YyDefRedClass {
+ 
+     public static final short yyDefRed [] = {            0,
+          36,    0,    0,    0,    0,    0,    0,    0,   78,    0,
+           0,   14,   17,   18,   19,   20,   21,   22,   23,   24,
+          25,   26,   27,   28,   29,   83,    0,   84,   86,    0,
+           0,   45,    0,    3,    7,    0,    0,   15,   30,    0,
+          49,   34,   37,   38,    0,    0,   43,    0,    0,    0,
+           0,    0,    0,   66,    0,    0,    0,    0,   13,    0,
+          80,    0,   71,    0,    0,   77,   75,    0,    0,    0,
+           0,    0,   16,    0,   32,    0,    0,    0,    0,   50,
+           0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+           0,    0,   74,   82,   79,   35,    0,   31,    0,    8,
+           9,    0,    0,   39,    0,    0,   44,    0,    0,    0,
+           0,    0,    0,    0,    0,    0,    0,    0,   67,   68,
+          69,   33,    0,   40,   42,
+     };
+   } /* End of class YyDefRedClass */
+ 
+   protected static final class YyDgotoClass {
+ 
+     public static final short yyDgoto [] = {           105,
+          31,   32,   33,   34,   35,   36,   37,   38,   73,   39,
+          40,   41,   42,   43,   44,   45,  106,   46,   47,   48,
+          49,   50,   51,   52,   53,   54,   55,
+     };
+   } /* End of class YyDgotoClass */
+ 
+   protected static final class YySindexClass {
+ 
+     public static final short yySindex [] = {          -97,
+           0, -271, -267,  -97, -239, -239,  -97, -199,    0, -236,
+        -222,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+           0,    0,    0,    0,    0,    0, -218,    0,    0,    0,
+        -257,    0, -241,    0,    0, -205, -221,    0,    0, -194,
+           0,    0,    0,    0, -190, -185,    0, -238, -211, -234,
+        -255, -209, -275,    0,    0, -169, -250, -168,    0, -241,
+           0, -241,    0, -205, -187,    0,    0, -167,  -97, -239,
+        -239,  -97,    0, -199,    0, -151,  -43, -239, -239,    0,
+         -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
+         -97,  -97,    0,    0,    0,    0, -164,    0, -211,    0,
+           0, -166, -205,    0, -165, -163,    0, -241, -241, -234,
+        -255, -255, -209, -209, -209, -209, -275, -275,    0,    0,
+           0,    0,  -97,    0,    0,
+     };
+   } /* End of class YySindexClass */
+ 
+   protected static final class YyRindexClass {
+ 
+     public static final short yyRindex [] = {            0,
+           0,   58,    1,    0,  420,    0,    0,    0,    0,    0,
+         129,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+           0,    0,    0,    0,    0,    0, -161,    0,    0,    0,
+          40,    0,  237,    0,    0,  168,    0,    0,    0,    0,
+           0,    0,    0,    0,    0,  459,    0,  277,  557,  544,
+         656,  561,  474,    0,   19,   75,    0,    0,    0,  295,
+           0,  334,    0,  183,  114,    0,    0,    0,    0,    0,
+           0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+           0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+           0,    0,    0,    0,    0,    0,    0,    0,  686,    0,
+           0,    0,  222,    0, -156,    0,    0,  351,  405,  553,
+         665,  697,  577,  600,  617,  639,  513,  528,    0,    0,
+           0,    0,    0,    0,    0,
+     };
+   } /* End of class YyRindexClass */
+ 
+   protected static final class YyGindexClass {
+ 
+     public static final short yyGindex [] = {            7,
+           0,    0,    8,    0,    3,   -3,    0,    0,   48,    0,
+           0,    0,    0,    0,    0,    0,  -12,    0,   35,    0,
+          44,   36,   -1,  -54,    2,   -7,   -2,
+     };
+   } /* End of class YyGindexClass */
+ 
+   protected static final class YyTableClass {
+ 
+     public static final short yyTable [] = {            63,
+          81,   90,   61,   61,   64,   61,   30,   66,   94,   56,
+          58,   57,   60,   62,   84,   85,   86,   87,   80,    3,
+          91,   92,   65,   72,   70,   71,   95,   78,   79,  113,
+         114,  115,  116,   82,   83,   67,    8,    9,   68,    1,
+          69,   59,   12,   13,   14,   15,   16,   17,   18,   19,
+          20,   21,   22,   23,   24,   25,   72,   72,   74,    3,
+          26,   27,   28,   29,   88,   89,   75,   61,   61,   76,
+         103,   61,  100,  101,   73,   61,   61,    9,  102,   77,
+         111,  112,  119,  120,  121,  108,  109,   81,   93,  117,
+         118,   97,   96,   98,   94,   80,  122,  124,  123,   85,
+          26,   27,   28,   29,   41,    1,    2,    3,    4,  104,
+         125,  107,   99,   81,    5,    6,  110,    0,    0,    0,
+           0,    0,    0,    7,    8,    9,   10,    0,   13,   11,
+          12,   13,   14,   15,   16,   17,   18,   19,   20,   21,
+          22,   23,   24,   25,    0,    0,    0,    0,   26,   27,
+          28,   29,    0,    0,    0,    0,    0,    0,    0,    1,
+           2,    3,    4,    0,    0,    0,    0,   10,    5,    6,
+           0,    0,    0,    0,    0,    0,    0,    7,    8,    9,
+          10,    0,   11,   11,   12,   13,   14,   15,   16,   17,
+          18,   19,   20,   21,   22,   23,   24,   25,    0,    0,
+           0,    0,   26,   27,   28,   29,    0,    0,    0,    0,
+           0,    0,    0,    1,    2,    3,    4,    0,    0,    0,
+           0,   12,    5,    6,    0,    0,    0,    0,    0,    0,
+           0,    0,    8,    9,   10,    0,    2,   11,   12,   13,
+          14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
+          24,   25,    0,    0,    0,    0,   26,   27,   28,   29,
+          81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+          81,   81,   81,   81,   81,   81,   46,   81,   76,   80,
+          80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
+          80,   80,   80,   80,    5,   80,   81,   81,   81,   81,
+           1,    0,    1,    1,    0,    0,    0,    0,    0,    0,
+           0,    0,    0,    0,   80,   80,   80,   80,   72,   72,
+          72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+          72,   72,   72,    6,   72,   73,   73,   73,   73,   73,
+          73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+          47,   73,    0,   72,   72,   72,   72,    0,    0,    0,
+           0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+          73,   73,   73,   73,   81,   81,   81,   81,   81,   81,
+          81,   81,   81,   81,   81,   81,   81,   81,   81,   13,
+          81,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+          13,   13,   13,   13,   48,   13,    0,    0,    0,   81,
+          81,   81,   81,    0,    0,    0,    0,    0,    0,    4,
+           0,    0,    0,    0,   13,   13,   13,   13,   10,    0,
+          10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+          10,   10,   10,   11,   10,   11,   11,   11,   11,   11,
+          11,   11,   11,   11,   11,   11,   11,   11,   70,   11,
+           0,    0,    0,   10,   10,   10,   10,    0,    0,    0,
+           0,    0,    0,   63,    0,    0,    0,    0,   11,   11,
+          11,   11,   12,    0,   12,   12,   12,   12,   12,   12,
+          12,   12,   12,   12,   12,   12,   12,    2,   12,    2,
+           2,    2,    0,    0,    2,    2,    2,    2,    2,    2,
+           2,    2,   64,    2,    0,    0,    0,   12,   12,   12,
+          12,    0,    0,    0,    0,    0,    0,   65,    0,    0,
+           0,    0,    2,    2,    2,    2,    0,   46,    0,   46,
+          46,   46,    0,   53,   46,   46,   46,   46,   46,   46,
+          46,   46,   54,   46,    0,    5,   51,    5,    5,    5,
+          58,    0,    5,    5,    5,    5,    5,    5,    5,    5,
+           0,    5,   46,   46,   46,   46,   60,    0,    0,    0,
+           0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+           5,    5,    5,    5,    6,    0,    6,    6,    6,   59,
+           0,    6,    6,    6,    6,    6,    6,    6,    6,    0,
+           6,   47,    0,   47,   47,   47,   62,    0,   47,   47,
+          47,   47,   47,   47,   47,   47,    0,   47,    0,    6,
+           6,    6,    6,    0,    0,    0,    0,    0,   61,    0,
+           0,    0,    0,    0,    0,    0,   47,   47,   47,   47,
+           0,    0,    0,    0,    0,   55,    0,    0,    0,    0,
+           0,    0,    0,    0,   56,   48,    0,   48,   48,   48,
+           0,    0,   48,   48,   48,   48,   48,   48,   48,   48,
+           4,   48,    4,    4,    4,   52,    0,    4,    4,    4,
+           4,    4,    4,    4,    4,    0,   57,    0,    0,    0,
+          48,   48,   48,   48,    0,    0,    0,    0,    0,    0,
+           0,    0,    0,    0,    0,    4,    4,    4,    4,   70,
+           0,   70,   70,    0,    0,    0,   70,   70,   70,   70,
+          70,   70,   70,   70,   63,   70,   63,   63,    0,    0,
+           0,   63,   63,   63,   63,   63,   63,   63,   63,    0,
+           0,    0,    0,    0,   70,   70,   70,   70,    0,    0,
+           0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+           0,   63,   63,   64,    0,   64,   64,    0,    0,    0,
+          64,   64,   64,   64,   64,   64,   64,   64,   65,    0,
+          65,   65,    0,    0,    0,   65,   65,   65,   65,   65,
+          65,   65,   65,    0,   53,    0,   53,   53,    0,    0,
+          64,   64,    0,   54,    0,   54,   54,   51,    0,   51,
+          51,   58,    0,   58,   58,   65,   65,    0,   58,   58,
+          58,   58,   58,   58,    0,    0,    0,   60,    0,   60,
+          60,   53,   53,    0,   60,   60,   60,   60,   60,   60,
+          54,   54,    0,    0,   51,    0,    0,    0,   58,   58,
+          59,    0,   59,   59,    0,    0,    0,   59,   59,   59,
+          59,   59,   59,    0,   60,   60,    0,   62,    0,   62,
+          62,    0,    0,    0,   62,   62,   62,   62,   62,   62,
+           0,    0,    0,    0,    0,    0,    0,   59,   59,   61,
+           0,   61,   61,    0,    0,    0,   61,   61,   61,   61,
+          61,   61,    0,    0,   62,   62,   55,    0,   55,   55,
+           0,    0,    0,   55,   55,   56,    0,   56,   56,    0,
+           0,    0,   56,   56,    0,    0,   61,   61,    0,    0,
+           0,    0,    0,    0,    0,    0,   52,    0,   52,   52,
+           0,    0,    0,   55,   55,    0,    0,   57,    0,   57,
+          57,    0,   56,   56,   57,   57,    0,    0,    0,    0,
+           0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+           0,    0,    0,   52,    0,    0,    0,    0,    0,    0,
+           0,    0,    0,    0,   57,   57,
+     };
+   } /* End of class YyTableClass */
+ 
+   protected static final class YyCheckClass {
+ 
+     public static final short yyCheck [] = {             7,
+           0,  277,    5,    6,    8,    8,    0,   10,  259,  281,
+           4,  279,    5,    6,  270,  271,  272,  273,    0,  259,
+         296,  297,  259,  262,  266,  267,  277,  266,  267,   84,
+          85,   86,   87,  268,  269,  258,  276,  277,  257,    0,
+         298,  281,  282,  283,  284,  285,  286,  287,  288,  289,
+         290,  291,  292,  293,  294,  295,  262,    0,  280,  259,
+         300,  301,  302,  303,  274,  275,  261,   70,   71,  260,
+          74,   74,   70,   71,    0,   78,   79,  277,   72,  265,
+          82,   83,   90,   91,   92,   78,   79,  299,  258,   88,
+          89,  279,  261,  261,  259,   48,  263,  261,  264,  261,
+         300,  301,  302,  303,  261,  257,  258,  259,  260,  261,
+         123,   77,   69,    0,  266,  267,   81,   -1,   -1,   -1,
+          -1,   -1,   -1,  275,  276,  277,  278,   -1,    0,  281,
+         282,  283,  284,  285,  286,  287,  288,  289,  290,  291,
+         292,  293,  294,  295,   -1,   -1,   -1,   -1,  300,  301,
+         302,  303,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,
+         258,  259,  260,   -1,   -1,   -1,   -1,    0,  266,  267,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,  276,  277,
+         278,   -1,    0,  281,  282,  283,  284,  285,  286,  287,
+         288,  289,  290,  291,  292,  293,  294,  295,   -1,   -1,
+          -1,   -1,  300,  301,  302,  303,   -1,   -1,   -1,   -1,
+          -1,   -1,   -1,  257,  258,  259,  260,   -1,   -1,   -1,
+          -1,    0,  266,  267,   -1,   -1,   -1,   -1,   -1,   -1,
+          -1,   -1,  276,  277,  278,   -1,    0,  281,  282,  283,
+         284,  285,  286,  287,  288,  289,  290,  291,  292,  293,
+         294,  295,   -1,   -1,   -1,   -1,  300,  301,  302,  303,
+         260,  261,  262,  263,  264,  265,  266,  267,  268,  269,
+         270,  271,  272,  273,  274,  275,    0,  277,  260,  261,
+         262,  263,  264,  265,  266,  267,  268,  269,  270,  271,
+         272,  273,  274,  275,    0,  277,  296,  297,  298,  299,
+         261,   -1,  263,  264,   -1,   -1,   -1,   -1,   -1,   -1,
+          -1,   -1,   -1,   -1,  296,  297,  298,  299,  261,  262,
+         263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
+         273,  274,  275,    0,  277,  261,  262,  263,  264,  265,
+         266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
+           0,  277,   -1,  296,  297,  298,  299,   -1,   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+         296,  297,  298,  299,  261,  262,  263,  264,  265,  266,
+         267,  268,  269,  270,  271,  272,  273,  274,  275,  261,
+         277,  263,  264,  265,  266,  267,  268,  269,  270,  271,
+         272,  273,  274,  275,    0,  277,   -1,   -1,   -1,  296,
+         297,  298,  299,   -1,   -1,   -1,   -1,   -1,   -1,    0,
+          -1,   -1,   -1,   -1,  296,  297,  298,  299,  261,   -1,
+         263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
+         273,  274,  275,  261,  277,  263,  264,  265,  266,  267,
+         268,  269,  270,  271,  272,  273,  274,  275,    0,  277,
+          -1,   -1,   -1,  296,  297,  298,  299,   -1,   -1,   -1,
+          -1,   -1,   -1,    0,   -1,   -1,   -1,   -1,  296,  297,
+         298,  299,  261,   -1,  263,  264,  265,  266,  267,  268,
+         269,  270,  271,  272,  273,  274,  275,  261,  277,  263,
+         264,  265,   -1,   -1,  268,  269,  270,  271,  272,  273,
+         274,  275,    0,  277,   -1,   -1,   -1,  296,  297,  298,
+         299,   -1,   -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,
+          -1,   -1,  296,  297,  298,  299,   -1,  261,   -1,  263,
+         264,  265,   -1,    0,  268,  269,  270,  271,  272,  273,
+         274,  275,    0,  277,   -1,  261,    0,  263,  264,  265,
+           0,   -1,  268,  269,  270,  271,  272,  273,  274,  275,
+          -1,  277,  296,  297,  298,  299,    0,   -1,   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+         296,  297,  298,  299,  261,   -1,  263,  264,  265,    0,
+          -1,  268,  269,  270,  271,  272,  273,  274,  275,   -1,
+         277,  261,   -1,  263,  264,  265,    0,   -1,  268,  269,
+         270,  271,  272,  273,  274,  275,   -1,  277,   -1,  296,
+         297,  298,  299,   -1,   -1,   -1,   -1,   -1,    0,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,  296,  297,  298,  299,
+          -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,   -1,   -1,
+          -1,   -1,   -1,   -1,    0,  261,   -1,  263,  264,  265,
+          -1,   -1,  268,  269,  270,  271,  272,  273,  274,  275,
+         261,  277,  263,  264,  265,    0,   -1,  268,  269,  270,
+         271,  272,  273,  274,  275,   -1,    0,   -1,   -1,   -1,
+         296,  297,  298,  299,   -1,   -1,   -1,   -1,   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,  296,  297,  298,  299,  261,
+          -1,  263,  264,   -1,   -1,   -1,  268,  269,  270,  271,
+         272,  273,  274,  275,  261,  277,  263,  264,   -1,   -1,
+          -1,  268,  269,  270,  271,  272,  273,  274,  275,   -1,
+          -1,   -1,   -1,   -1,  296,  297,  298,  299,   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+          -1,  298,  299,  261,   -1,  263,  264,   -1,   -1,   -1,
+         268,  269,  270,  271,  272,  273,  274,  275,  261,   -1,
+         263,  264,   -1,   -1,   -1,  268,  269,  270,  271,  272,
+         273,  274,  275,   -1,  261,   -1,  263,  264,   -1,   -1,
+         298,  299,   -1,  261,   -1,  263,  264,  261,   -1,  263,
+         264,  261,   -1,  263,  264,  298,  299,   -1,  268,  269,
+         270,  271,  272,  273,   -1,   -1,   -1,  261,   -1,  263,
+         264,  298,  299,   -1,  268,  269,  270,  271,  272,  273,
+         298,  299,   -1,   -1,  298,   -1,   -1,   -1,  298,  299,
+         261,   -1,  263,  264,   -1,   -1,   -1,  268,  269,  270,
+         271,  272,  273,   -1,  298,  299,   -1,  261,   -1,  263,
+         264,   -1,   -1,   -1,  268,  269,  270,  271,  272,  273,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,  298,  299,  261,
+          -1,  263,  264,   -1,   -1,   -1,  268,  269,  270,  271,
+         272,  273,   -1,   -1,  298,  299,  261,   -1,  263,  264,
+          -1,   -1,   -1,  268,  269,  261,   -1,  263,  264,   -1,
+          -1,   -1,  268,  269,   -1,   -1,  298,  299,   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,  261,   -1,  263,  264,
+          -1,   -1,   -1,  298,  299,   -1,   -1,  261,   -1,  263,
+         264,   -1,  298,  299,  268,  269,   -1,   -1,   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+          -1,   -1,   -1,  298,   -1,   -1,   -1,   -1,   -1,   -1,
+          -1,   -1,   -1,   -1,  298,  299,
+     };
+   } /* End of class YyCheckClass */
+ 
+ 
+ //t  protected static final class YyRuleClass {
+ 
+ //t    public static final String yyRule [] = {
+ //t    "$accept : expr",
+ //t    "expr : or_expr",
+ //t    "location_path : relative_location_path",
+ //t    "location_path : absolute_location_path",
+ //t    "absolute_location_path : SLASH",
+ //t    "absolute_location_path : SLASH relative_location_path",
+ //t    "absolute_location_path : DOUBLE_SLASH relative_location_path",
+ //t    "relative_location_path : step",
+ //t    "relative_location_path : relative_location_path SLASH step",
+ //t    "relative_location_path : relative_location_path DOUBLE_SLASH step",
+ //t    "step : step_node_test",
+ //t    "step : AT step_node_test",
+ //t    "step : axis_name DOUBLE_COLON step_node_test",
+ //t    "step : DOT",
+ //t    "step : DOUBLE_DOT",
+ //t    "step_node_test : node_test",
+ //t    "step_node_test : step_node_test predicate",
+ //t    "axis_name : ANCESTOR",
+ //t    "axis_name : ANCESTOR_OR_SELF",
+ //t    "axis_name : ATTRIBUTE",
+ //t    "axis_name : CHILD",
+ //t    "axis_name : DESCENDANT",
+ //t    "axis_name : DESCENDANT_OR_SELF",
+ //t    "axis_name : FOLLOWING",
+ //t    "axis_name : FOLLOWING_SIBLING",
+ //t    "axis_name : NAMESPACE",
+ //t    "axis_name : PARENT",
+ //t    "axis_name : PRECEDING",
+ //t    "axis_name : PRECEDING_SIBLING",
+ //t    "axis_name : SELF",
+ //t    "node_test : name_test",
+ //t    "node_test : PROCESSING_INSTRUCTION LITERAL RP",
+ //t    "node_test : node_type RP",
+ //t    "predicate : LB expr RB",
+ //t    "primary_expr : variable_reference",
+ //t    "primary_expr : LP expr RP",
+ //t    "primary_expr : LITERAL",
+ //t    "primary_expr : number",
+ //t    "primary_expr : function_call",
+ //t    "function_call : function_name LP RP",
+ //t    "function_call : function_name LP argument_list RP",
+ //t    "argument_list : expr",
+ //t    "argument_list : expr COMMA argument_list",
+ //t    "union_expr : path_expr",
+ //t    "union_expr : union_expr PIPE path_expr",
+ //t    "path_expr : location_path",
+ //t    "path_expr : filter_expr",
+ //t    "path_expr : filter_expr SLASH relative_location_path",
+ //t    "path_expr : filter_expr DOUBLE_SLASH relative_location_path",
+ //t    "filter_expr : primary_expr",
+ //t    "filter_expr : filter_expr predicate",
+ //t    "or_expr : and_expr",
+ //t    "or_expr : or_expr OR and_expr",
+ //t    "and_expr : equality_expr",
+ //t    "and_expr : and_expr AND equality_expr",
+ //t    "equality_expr : relational_expr",
+ //t    "equality_expr : equality_expr EQ relational_expr",
+ //t    "equality_expr : equality_expr NE relational_expr",
+ //t    "relational_expr : additive_expr",
+ //t    "relational_expr : relational_expr LT additive_expr",
+ //t    "relational_expr : relational_expr GT additive_expr",
+ //t    "relational_expr : relational_expr LTE additive_expr",
+ //t    "relational_expr : relational_expr GTE additive_expr",
+ //t    "additive_expr : multiplicative_expr",
+ //t    "additive_expr : additive_expr PLUS multiplicative_expr",
+ //t    "additive_expr : additive_expr MINUS multiplicative_expr",
+ //t    "multiplicative_expr : unary_expr",
+ //t    "multiplicative_expr : multiplicative_expr STAR unary_expr",
+ //t    "multiplicative_expr : multiplicative_expr DIV unary_expr",
+ //t    "multiplicative_expr : multiplicative_expr MOD unary_expr",
+ //t    "unary_expr : union_expr",
+ //t    "unary_expr : MINUS unary_expr",
+ //t    "number : DIGITS",
+ //t    "number : DIGITS DOT",
+ //t    "number : DIGITS DOT DIGITS",
+ //t    "number : DOT DIGITS",
+ //t    "function_name : qname",
+ //t    "variable_reference : DOLLAR qname",
+ //t    "name_test : STAR",
+ //t    "name_test : NAME COLON STAR",
+ //t    "name_test : qname",
+ //t    "qname : NAME",
+ //t    "qname : NAME COLON NAME",
+ //t    "node_type : COMMENT",
+ //t    "node_type : TEXT",
+ //t    "node_type : PROCESSING_INSTRUCTION",
+ //t    "node_type : NODE",
+ //t    };
+ //t  } /* End of class YyRuleClass */
+ 
+   protected static final class YyNameClass {
+ 
+     public static final String yyName [] = {    
+     "end-of-file",null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+     null,null,null,null,null,null,null,"LITERAL","DIGITS","NAME","LP",
+     "RP","LB","RB","COMMA","PIPE","SLASH","DOUBLE_SLASH","EQ","NE","GT",
+     "LT","GTE","LTE","PLUS","MINUS","AT","STAR","DOLLAR","COLON",
+     "DOUBLE_COLON","DOT","DOUBLE_DOT","ANCESTOR","ANCESTOR_OR_SELF",
+     "ATTRIBUTE","CHILD","DESCENDANT","DESCENDANT_OR_SELF","FOLLOWING",
+     "FOLLOWING_SIBLING","NAMESPACE","PARENT","PRECEDING",
+     "PRECEDING_SIBLING","SELF","DIV","MOD","OR","AND","COMMENT",
+     "PROCESSING_INSTRUCTION","TEXT","NODE","UNARY",
+     };
+   } /* End of class YyNameClass */
+ 
+ 
+ 					// line 783 "XPathParser.y"
+ 
+ }
+ 					// line 1463 "-"
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathParser.y gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathParser.y
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathParser.y	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathParser.y	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,784 ----
+ %{
+ /* XPathParser.y - An XPath 1.0 parser.
+    Copyright (C) 2004 The Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package gnu.xml.xpath;
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.List;
+ import java.util.Map;
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import javax.xml.xpath.XPathFunctionResolver;
+ import javax.xml.xpath.XPathVariableResolver;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * An XPath 1.0 parser.
+  *
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XPathParser
+ {
+ 
+   NamespaceContext namespaceContext;
+   XPathVariableResolver variableResolver;
+   XPathFunctionResolver functionResolver;
+ 
+   QName getQName(String name)
+   {
+     QName qName = QName.valueOf(name);
+     if (namespaceContext != null)
+       {
+         String prefix = qName.getPrefix();
+         String uri = qName.getNamespaceURI();
+         if (prefix != null && (uri == null || uri.length() == 0))
+           {
+             uri = namespaceContext.getNamespaceURI(prefix);
+             String localName = qName.getLocalPart();
+             qName = new QName(uri, localName, prefix);
+           }
+       }
+     return qName;
+   }
+ 
+   Expr lookupFunction(String name, List args)
+   {
+     int arity = args.size();
+     if ("position".equals(name) && arity == 0)
+       {
+         return new PositionFunction();
+       }
+     else if ("last".equals(name) && arity == 0)
+       {
+         return new LastFunction();
+       }
+     else if ("string".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new StringFunction(args);
+       }
+     else if ("number".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new NumberFunction(args);
+       }
+     else if ("boolean".equals(name) && arity == 1)
+       {
+         return new BooleanFunction(args);
+       }
+     else if ("count".equals(name) && arity == 1)
+       {
+         return new CountFunction(args);
+       }
+     else if ("not".equals(name) && arity == 1)
+       {
+         return new NotFunction(args);
+       }
+     else if ("id".equals(name) && arity == 1)
+       {
+         return new IdFunction(args);
+       }
+     else if ("concat".equals(name) && arity > 1)
+       {
+         return new ConcatFunction(args);
+       }
+     else if ("true".equals(name) && arity == 0)
+       {
+         return new TrueFunction();
+       }
+     else if ("false".equals(name) && arity == 0)
+       {
+         return new FalseFunction();
+       }
+     else if ("name".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new NameFunction(args);
+       }
+     else if ("local-name".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new LocalNameFunction(args);
+       }
+     else if ("namespace-uri".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new NamespaceUriFunction(args);
+       }
+     else if ("starts-with".equals(name) && arity == 2)
+       {
+         return new StartsWithFunction(args);
+       }
+     else if ("contains".equals(name) && arity == 2)
+       {
+         return new ContainsFunction(args);
+       }
+     else if ("string-length".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new StringLengthFunction(args);
+       }
+     else if ("translate".equals(name) && arity == 3)
+       {
+         return new TranslateFunction(args);
+       }
+     else if ("normalize-space".equals(name) && (arity == 1 || arity == 0))
+       {
+         return new NormalizeSpaceFunction(args);
+       }
+     else if ("substring".equals(name) && (arity == 2 || arity == 3))
+       {
+         return new SubstringFunction(args);
+       }
+     else if ("substring-before".equals(name) && arity == 2)
+       {
+         return new SubstringBeforeFunction(args);
+       }
+     else if ("substring-after".equals(name) && arity == 2)
+       {
+         return new SubstringAfterFunction(args);
+       }
+     else if ("lang".equals(name) && arity == 1)
+       {
+         return new LangFunction(args);
+       }
+     else if ("sum".equals(name) && arity == 1)
+       {
+         return new SumFunction(args);
+       }
+     else if ("floor".equals(name) && arity == 1)
+       {
+         return new FloorFunction(args);
+       }
+     else if ("ceiling".equals(name) && arity == 1)
+       {
+         return new CeilingFunction(args);
+       }
+     else if ("round".equals(name) && arity == 1)
+       {
+         return new RoundFunction(args);
+       }
+     else if (functionResolver != null)
+       {
+         QName qName = QName.valueOf(name);
+         Object function = functionResolver.resolveFunction(qName, arity);
+         if (function != null &&
+             function instanceof Function &&
+             function instanceof Expr)
+           {
+             Function f = (Function) function;
+             f.setArguments(args);
+             return (Expr) function;
+           }
+       }
+     return new FunctionCall(functionResolver, name, args);
+   }
+ 
+ %}
+ 
+ %token LITERAL
+ %token DIGITS
+ %token NAME
+ 
+ %token LP // '('
+ %token RP // ')'
+ %token LB // '['
+ %token RB // ']'
+ %token COMMA // ','
+ %token PIPE // '|'
+ %token SLASH // '/'
+ %token DOUBLE_SLASH // '//'
+ %token EQ // '='
+ %token NE // '!='
+ %token GT // '>'
+ %token LT // '<'
+ %token GTE // '>='
+ %token LTE // '<='
+ %token PLUS // '+'
+ %token MINUS // '-'
+ %token AT // '@'
+ %token STAR // '*'
+ %token DOLLAR // '$'
+ %token COLON // ':'
+ %token DOUBLE_COLON // '::'
+ %token DOT // '.'
+ %token DOUBLE_DOT // '..'
+ 
+ %token ANCESTOR
+ %token ANCESTOR_OR_SELF
+ %token ATTRIBUTE
+ %token CHILD
+ %token DESCENDANT
+ %token DESCENDANT_OR_SELF
+ %token FOLLOWING
+ %token FOLLOWING_SIBLING
+ %token NAMESPACE
+ %token PARENT
+ %token PRECEDING
+ %token PRECEDING_SIBLING
+ %token SELF
+ %token DIV
+ %token MOD
+ %token OR
+ %token AND
+ %token COMMENT
+ %token PROCESSING_INSTRUCTION
+ %token TEXT
+ %token NODE
+ 
+ %right UNARY
+ 
+ %start expr
+ 
+ %%
+ 
+ expr:
+   or_expr
+   ;
+ 
+ location_path:
+   relative_location_path
+   | absolute_location_path
+   ;
+ 
+ absolute_location_path:
+   SLASH
+     {
+       $$ = new Root();
+     }
+   | SLASH relative_location_path
+     {
+       Steps steps;
+       if ($2 instanceof Steps)
+         {
+           steps = (Steps) $2;
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst($2);
+         }
+       steps.path.addFirst(new Root());
+       $$ = steps;
+       //$$ = new Step(new Root(), (Path) $2);
+     }
+   | DOUBLE_SLASH relative_location_path
+     {
+       Test nt = new NodeTypeTest((short) 0);
+       Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
+                                 Collections.singletonList (nt));
+       Steps steps;
+       if ($2 instanceof Steps)
+         {
+           steps = (Steps) $2;
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst($2);
+         }
+       steps.path.addFirst(s);
+       steps.path.addFirst(new Root());
+       $$ = steps;
+       //Step step = new Step(s, (Path) $2);
+       //$$ = new Step(new Root(), step);
+     }
+   ;
+ 
+ relative_location_path:
+   step
+   | relative_location_path SLASH step
+     {
+       Steps steps;
+       if ($1 instanceof Steps)
+         {
+           steps = (Steps) $1;
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst($1);
+         }
+       steps.path.addLast($3);
+       $$ = steps;
+       //$$ = new Step((Expr) $1, (Path) $3);
+     }
+   | relative_location_path DOUBLE_SLASH step
+     {
+       Test nt = new NodeTypeTest((short) 0);
+       Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
+                                 Collections.singletonList (nt));
+       Steps steps;
+       if ($1 instanceof Steps)
+         {
+           steps = (Steps) $1;
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst($1);
+         }
+       steps.path.addLast(s);
+       steps.path.addLast($3);
+       $$ = steps;
+       //Step step = new Step(s, (Path) $3);
+       //$$ = new Step((Expr) $1, step);
+     }
+   ;
+ 
+ step:
+   step_node_test
+     {
+       $$ = new Selector (Selector.CHILD, (List) $1);
+     }
+   | AT step_node_test
+     {
+       $$ = new Selector (Selector.ATTRIBUTE, (List) $2);
+     }
+   | axis_name DOUBLE_COLON step_node_test
+     {
+       $$ = new Selector (((Integer) $1).intValue (), (List) $3);
+     }
+   | DOT
+     {
+       $$ = new Selector (Selector.SELF, Collections.EMPTY_LIST);
+     }
+   | DOUBLE_DOT
+     {
+       $$ = new Selector (Selector.PARENT, Collections.EMPTY_LIST);
+     }
+   ;
+ 
+ step_node_test:
+   node_test
+     {
+       List list = new ArrayList();
+       list.add($1);
+       $$ = list;
+     }
+   | step_node_test predicate
+     {
+       List list = (List)$1;
+       list.add($2);
+       $$ = list;
+     }
+   ;
+ 
+ /*predicate_list:
+   predicate
+     {
+       List list = new ArrayList ();
+       list.add ($1);
+       $$ = list;
+     }
+   | predicate predicate_list
+     {
+       List list = (List) $3;
+       list.add (0, $1);
+       $$ = list;
+     }
+   ;*/
+ 
+ axis_name:
+   ANCESTOR
+     {
+       $$ = new Integer(Selector.ANCESTOR);
+     }
+   | ANCESTOR_OR_SELF
+     {
+       $$ = new Integer(Selector.ANCESTOR_OR_SELF);
+     }
+   | ATTRIBUTE
+     {
+       $$ = new Integer(Selector.ATTRIBUTE);
+     }
+   | CHILD
+     {
+       $$ = new Integer(Selector.CHILD);
+     }
+   | DESCENDANT
+     {
+       $$ = new Integer(Selector.DESCENDANT);
+     }
+   | DESCENDANT_OR_SELF
+     {
+       $$ = new Integer(Selector.DESCENDANT_OR_SELF);
+     }
+   | FOLLOWING
+     {
+       $$ = new Integer(Selector.FOLLOWING);
+     }
+   | FOLLOWING_SIBLING
+     {
+       $$ = new Integer(Selector.FOLLOWING_SIBLING);
+     }
+   | NAMESPACE
+     {
+       $$ = new Integer(Selector.NAMESPACE);
+     }
+   | PARENT
+     {
+       $$ = new Integer(Selector.PARENT);
+     }
+   | PRECEDING
+     {
+       $$ = new Integer(Selector.PRECEDING);
+     }
+   | PRECEDING_SIBLING
+     {
+       $$ = new Integer(Selector.PRECEDING_SIBLING);
+     }
+   | SELF
+     {
+       $$ = new Integer(Selector.SELF);
+     }
+   ;
+ 
+ node_test:
+   name_test
+   /*| PROCESSING_INSTRUCTION LP LITERAL RP*/
+   | PROCESSING_INSTRUCTION LITERAL RP
+     {
+       $$ = new NodeTypeTest(Node.PROCESSING_INSTRUCTION_NODE, (String) $2);
+     }
+   /*| node_type LP RP*/
+   | node_type RP
+     {
+       $$ = new NodeTypeTest(((Short) $1).shortValue());
+     }
+   ;
+ 
+ predicate:
+   LB expr RB
+     {
+       $$ = new Predicate((Expr) $2);
+     }
+   ;
+ 
+ primary_expr:
+   variable_reference
+   | LP expr RP
+     {
+       $$ = new ParenthesizedExpr((Expr) $2);
+     }
+   | LITERAL
+     {
+       $$ = new Constant($1);
+     }
+   | number
+     {
+       $$ = new Constant($1);
+     }
+   | function_call
+   ;
+ 
+ function_call:
+   function_name LP RP
+     {
+       $$ = lookupFunction((String) $1, Collections.EMPTY_LIST);
+     }
+   | function_name LP argument_list RP
+     {
+       $$ = lookupFunction((String) $1, (List) $3);
+     }
+   ;
+ 
+ argument_list:
+   expr
+     {
+       List list = new ArrayList();
+       list.add($1);
+       $$ = list;
+     }
+   | expr COMMA argument_list
+     {
+       List list = (List) $3;
+       list.add(0, $1);
+       $$ = list;
+     }
+   ;
+ 
+ union_expr:
+   path_expr
+   | union_expr PIPE path_expr
+     {
+       $$ = new UnionExpr((Expr) $1, (Expr) $3);
+     }
+   ;
+ 
+ path_expr:
+   location_path
+   | filter_expr
+   | filter_expr SLASH relative_location_path
+     {
+       Steps steps;
+       if ($3 instanceof Steps)
+         {
+           steps = (Steps) $3;
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst($3);
+         }
+       steps.path.addFirst($1);
+       $$ = steps;
+       //$$ = new Step ((Expr) $1, (Path) $3);
+     }
+   | filter_expr DOUBLE_SLASH relative_location_path
+     {
+       Test nt = new NodeTypeTest((short) 0);
+       Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
+                                 Collections.singletonList(nt));
+       Steps steps;
+       if ($3 instanceof Steps)
+         {
+           steps = (Steps) $3;
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst($3);
+         }
+       steps.path.addFirst(s);
+       steps.path.addFirst($1);
+       $$ = steps;
+       //Step step = new Step (s, (Path) $3);
+       //$$ = new Step ((Expr) $1, step);
+     }
+   ;
+ 
+ filter_expr:
+   primary_expr
+   | filter_expr predicate
+     {
+       Predicate filter = (Predicate) $2;
+       Selector s = new Selector(Selector.SELF,
+                                 Collections.singletonList(filter));
+       Steps steps;
+       if ($1 instanceof Steps)
+         {
+           steps = (Steps) $1;
+         }
+       else
+         {
+           steps = new Steps();
+           steps.path.addFirst($1);
+         }
+       steps.path.addLast(s);
+       $$ = steps;
+       //$$ = new Step ((Expr) $1, s);
+     }
+   ;
+ 
+ or_expr:
+   and_expr
+   | or_expr OR and_expr
+     {
+       $$ = new OrExpr((Expr) $1, (Expr) $3);
+     }
+   ;
+ 
+ and_expr:
+   equality_expr
+   | and_expr AND equality_expr
+     {
+       $$ = new AndExpr((Expr) $1, (Expr) $3);
+     }
+   ;
+ 
+ equality_expr:
+   relational_expr
+   | equality_expr EQ relational_expr
+     {
+       $$ = new EqualityExpr((Expr) $1, (Expr) $3, false);
+     }
+   | equality_expr NE relational_expr
+     {
+       $$ = new EqualityExpr((Expr) $1, (Expr) $3, true);
+     }
+   ;
+ 
+ relational_expr:
+   additive_expr
+   | relational_expr LT additive_expr
+     {
+       $$ = new RelationalExpr((Expr) $1, (Expr) $3, true, false);
+     }
+   | relational_expr GT additive_expr
+     {
+       $$ = new RelationalExpr((Expr) $1, (Expr) $3, false, false);
+     }
+   | relational_expr LTE additive_expr
+     {
+       $$ = new RelationalExpr((Expr) $1, (Expr) $3, true, true);
+     }
+   | relational_expr GTE additive_expr
+     {
+       $$ = new RelationalExpr((Expr) $1, (Expr) $3, false, true);
+     }
+   ;
+ 
+ additive_expr:
+   multiplicative_expr
+   | additive_expr PLUS multiplicative_expr
+     {
+       $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.ADD);
+     }
+   | additive_expr MINUS multiplicative_expr
+     {
+       $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.SUBTRACT);
+     }
+   ;
+ 
+ multiplicative_expr:
+   unary_expr
+   | multiplicative_expr STAR unary_expr
+     {
+       $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.MULTIPLY);
+     }
+   | multiplicative_expr DIV unary_expr
+     {
+       $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.DIVIDE);
+     }
+   | multiplicative_expr MOD unary_expr
+     {
+       $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.MODULO);
+     }
+   ;
+ 
+ unary_expr:
+   union_expr
+   | MINUS unary_expr %prec UNARY
+     {
+       $$ = new NegativeExpr((Expr) $2);
+     }
+   ;
+ 
+ number:
+   DIGITS
+     {
+       $$ = new Double((String) $1 + ".0");
+     }
+   | DIGITS DOT
+     {
+       $$ = new Double((String) $1 + ".0");
+     }
+   | DIGITS DOT DIGITS
+     {
+       $$ = new Double((String) $1 + "." + (String) $3);
+     }
+   | DOT DIGITS
+     {
+       $$ = new Double("0." + (String) $2);
+     }
+   ;
+ 
+ function_name:
+   qname
+ /*  | node_type
+     {
+       switch (((Short) $1).shortValue ())
+         {
+         case Node.COMMENT_NODE:
+           $$ = "comment";
+           break;
+         case Node.TEXT_NODE:
+           $$ = "text";
+           break;
+         case Node.PROCESSING_INSTRUCTION_NODE:
+           $$ = "processing-instruction";
+           break;
+         default:
+           $$ = "node";
+           break;
+         }
+     }*/
+   ;
+ 
+ variable_reference:
+   DOLLAR qname
+     {
+       String name = (String) $2;
+       $$ = new VariableReference(variableResolver, getQName(name));
+     }
+   ;
+ 
+ name_test:
+   STAR
+     {
+       $$ = new NameTest(null, true, true);
+     }
+   | NAME COLON STAR
+     {
+       QName qName = getQName((String) $1);
+       $$ = new NameTest(qName, true, false);
+     }
+   | qname
+     {
+       QName qName = getQName((String) $1);
+       $$ = new NameTest(qName, false, false);
+     }
+   ;
+ 
+ qname:
+   NAME
+   | NAME COLON NAME
+     {
+       $$ = (String) $1 + ':' + (String) $3;
+     }
+   ;
+ 
+ node_type:
+   COMMENT
+     {
+       $$ = new Short(Node.COMMENT_NODE);
+     }
+   | TEXT
+     {
+       $$ = new Short(Node.TEXT_NODE);
+     }
+   | PROCESSING_INSTRUCTION
+     {
+       $$ = new Short(Node.PROCESSING_INSTRUCTION_NODE);
+     }
+   | NODE
+     {
+       $$ = new Short((short) 0);
+     }
+   ;
+ 
+ %%
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathTokenizer.java gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathTokenizer.java
*** gcc-4.0.2/libjava/classpath/gnu/xml/xpath/XPathTokenizer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/gnu/xml/xpath/XPathTokenizer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,592 ----
+ /* XPathTokenizer.java -- 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package gnu.xml.xpath;
+ 
+ import java.io.BufferedReader;
+ import java.io.IOException;
+ import java.io.Reader;
+ import java.io.StringReader;
+ import java.util.Map;
+ import java.util.TreeMap;
+ 
+ /*import antlr.Token;
+ import antlr.TokenStream;
+ import antlr.TokenStreamException;
+ import antlr.TokenStreamIOException;*/
+ 
+ /**
+  * XPath 1.0 expression tokenizer.
+  * 
+  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+  */
+ public class XPathTokenizer
+ implements XPathParser.yyInput
+ //implements TokenStream
+ {
+ 
+   static class XPathToken
+   //extends Token
+   {
+ 
+     int type;
+     String val;
+ 
+     XPathToken (int type)
+     {
+       this (type, null);
+     }
+ 
+     XPathToken (int type, String val)
+     {
+       //super (type);
+       this.type = type;
+       this.val = val;
+     }
+ 
+     public String getText ()
+     {
+       return val;
+     }
+ 
+     public String toString ()
+     {
+       return val;
+     }
+     
+   }
+ 
+   static final Map keywords = new TreeMap ();
+   static
+   {
+     keywords.put ("ancestor", new Integer (XPathParser.ANCESTOR));
+     keywords.put ("ancestor-or-self", new Integer (XPathParser.ANCESTOR_OR_SELF));
+     keywords.put ("attribute", new Integer (XPathParser.ATTRIBUTE));
+     keywords.put ("child", new Integer (XPathParser.CHILD));
+     keywords.put ("descendant", new Integer (XPathParser.DESCENDANT));
+     keywords.put ("descendant-or-self", new Integer (XPathParser.DESCENDANT_OR_SELF));
+     keywords.put ("following", new Integer (XPathParser.FOLLOWING));
+     keywords.put ("following-sibling", new Integer (XPathParser.FOLLOWING_SIBLING));
+     keywords.put ("namespace", new Integer (XPathParser.NAMESPACE));
+     keywords.put ("parent", new Integer (XPathParser.PARENT));
+     keywords.put ("preceding", new Integer (XPathParser.PRECEDING));
+     keywords.put ("preceding-sibling", new Integer (XPathParser.PRECEDING_SIBLING));
+     keywords.put ("self", new Integer (XPathParser.SELF));
+     keywords.put ("div", new Integer (XPathParser.DIV));
+     keywords.put ("mod", new Integer (XPathParser.MOD));
+     keywords.put ("or", new Integer (XPathParser.OR));
+     keywords.put ("and", new Integer (XPathParser.AND));
+     keywords.put ("comment", new Integer (XPathParser.COMMENT));
+     keywords.put ("processing-instruction", new Integer (XPathParser.PROCESSING_INSTRUCTION));
+     keywords.put ("text", new Integer (XPathParser.TEXT));
+     keywords.put ("node", new Integer (XPathParser.NODE));
+   }
+ 
+   Reader in;
+   XPathToken token;
+   XPathToken lastToken;
+ 
+   public XPathTokenizer (String expr)
+   {
+     this (new StringReader (expr));
+   }
+ 
+   XPathTokenizer (Reader in)
+   {
+     this.in = in.markSupported () ? in : new BufferedReader (in);
+   }
+ 
+   /* Begin ANTLR specific *
+ 
+   public Token nextToken ()
+     throws TokenStreamException
+   {
+     try
+       {
+         if (!advance ())
+           {
+             throw new TokenStreamException ("eof");
+           }
+         token ();
+         return token;
+       }
+     catch (IOException e)
+       {
+         throw new TokenStreamIOException (e);
+       }
+   }
+   
+   * End ANTLR specific */
+ 
+   public boolean advance ()
+     throws IOException
+   {
+     lastToken = token;
+     int c = in.read ();
+     switch (c)
+       {
+       case -1: // eof
+         return false;
+       case 0x20:
+       case 0x09:
+       case 0x0d:
+       case 0x0a: // skip whitespace
+         return advance ();
+       case 0x22: // "
+       case 0x27: // '
+         token = consume_literal (c);
+         break;
+       case 0x28: // (
+         token = new XPathToken (XPathParser.LP);
+         break;
+       case 0x29: // )
+         token = new XPathToken (XPathParser.RP);
+         break;
+       case 0x5b: // [
+         token = new XPathToken (XPathParser.LB);
+         break;
+       case 0x5d: // ]
+         token = new XPathToken (XPathParser.RB);
+         break;
+       case 0x2c: // ,
+         token = new XPathToken (XPathParser.COMMA);
+         break;
+       case 0x7c: // |
+         token = new XPathToken (XPathParser.PIPE);
+         break;
+       case 0x2f: // /
+         in.mark (1);
+         int d1 = in.read ();
+         if (d1 == 0x2f)
+           {
+             token = new XPathToken (XPathParser.DOUBLE_SLASH);
+           }
+         else
+           {
+             in.reset ();
+             token = new XPathToken (XPathParser.SLASH);
+           }
+         break;
+       case 0x3d: // =
+         token = new XPathToken (XPathParser.EQ);
+         break;
+       case 0x21: // !
+         in.mark (1);
+         int d2 = in.read ();
+         if (d2 == 0x3d) // =
+           {
+             token = new XPathToken (XPathParser.NE);
+           }
+         else
+           {
+             in.reset ();
+             token = new XPathToken (XPathParser.yyErrorCode);
+           }
+         break;
+       case 0x3e: // >
+         in.mark (1);
+         int d3 = in.read ();
+         if (d3 == 0x3d) // =
+           {
+             token = new XPathToken (XPathParser.GTE);
+           }
+         else
+           {
+             in.reset ();
+             token = new XPathToken (XPathParser.GT);
+           }
+         break;
+       case 0x3c: // <
+         in.mark (1);
+         int d4 = in.read ();
+         if (d4 == 0x3d) // =
+           {
+             token = new XPathToken (XPathParser.LTE);
+           }
+         else
+           {
+             in.reset ();
+             token = new XPathToken (XPathParser.LT);
+           }
+         break;
+       case 0x2b: // +
+         token = new XPathToken (XPathParser.PLUS);
+         break;
+       case 0x2d: // -
+         token = new XPathToken (XPathParser.MINUS);
+         break;
+       case 0x40: // @
+         token = new XPathToken (XPathParser.AT);
+         break;
+       case 0x2a: // *
+         token = new XPathToken (XPathParser.STAR);
+         break;
+       case 0x24: // $
+         token = new XPathToken (XPathParser.DOLLAR);
+         break;
+       case 0x3a: // :
+         in.mark (1);
+         int d5 = in.read ();
+         if (d5 == 0x3a)
+           {
+             token = new XPathToken (XPathParser.DOUBLE_COLON);
+           }
+         else
+           {
+             in.reset ();
+             token = new XPathToken (XPathParser.COLON);
+           }
+         break;
+       case 0x2e: // .
+         in.mark (1);
+         int d6 = in.read ();
+         if (d6 == 0x2e)
+           {
+             token = new XPathToken (XPathParser.DOUBLE_DOT);
+           }
+         else
+           {
+             in.reset ();
+             token = new XPathToken (XPathParser.DOT);
+           }
+         break;
+       default:
+         if (c >= 0x30 && c <= 0x39)
+           {
+             token = consume_digits (c);
+           }
+         else if (c == 0x5f || Character.isLetter ((char) c))
+           {
+             token = consume_name (c);
+           }
+         else
+           {
+             token = new XPathToken (XPathParser.yyErrorCode);
+           }
+       }
+     return true;
+   }
+ 
+   public int token ()
+   {
+     return token.type;
+   }
+ 
+   public Object value ()
+   {
+     return token.val;
+   }
+ 
+   XPathToken consume_literal (int delimiter)
+     throws IOException
+   {
+     StringBuffer buf = new StringBuffer ();
+     while (true)
+       {
+         int c = in.read ();
+         if (c == -1)
+           {
+             return new XPathToken (XPathParser.yyErrorCode);
+           }
+         else if (c == delimiter)
+           {
+             return new XPathToken (XPathParser.LITERAL, buf.toString ());
+           }
+         else
+           {
+             buf.append ((char) c);
+           }
+       }
+   }
+ 
+   XPathToken consume_digits (int c)
+     throws IOException
+   {
+     StringBuffer buf = new StringBuffer ();
+     buf.append ((char) c);
+     while (true)
+       {
+         in.mark (1);
+         c = in.read ();
+         if (c >= 0x30 && c <= 0x39)
+           {
+             buf.append ((char) c);
+           }
+         else
+           {
+             in.reset ();
+             return new XPathToken (XPathParser.DIGITS, buf.toString ());
+           }
+       }
+   }
+ 
+   XPathToken consume_name (int c)
+     throws IOException
+   {
+     StringBuffer buf = new StringBuffer ();
+     buf.append ((char) c);
+     while (true)
+       {
+         in.mark (1);
+         c = in.read ();
+         if (isNameChar (c))
+           {
+             buf.append ((char) c);
+           }
+         else
+           {
+             in.reset ();
+             String name = buf.toString ();
+             Integer keyword = (Integer) keywords.get (name);
+             if (keyword == null)
+               {
+                 return new XPathToken (XPathParser.NAME, name);
+               }
+             else
+               {
+                 int val = keyword.intValue ();
+                 switch (val)
+                   {
+                   case XPathParser.NODE:
+                   case XPathParser.COMMENT:
+                   case XPathParser.TEXT:
+                   case XPathParser.PROCESSING_INSTRUCTION:
+                     // Consume subsequent (
+                     in.mark (1);
+                     do
+                       {
+                         c = in.read ();
+                       }
+                     while (c == 0x20 || c == 0x09);
+                     if (c != 0x28)
+                       {
+                         in.reset ();
+                         return new XPathToken (XPathParser.NAME, name);
+                       }
+                     break;
+                   case XPathParser.CHILD:
+                   case XPathParser.PARENT:
+                   case XPathParser.SELF:
+                   case XPathParser.DESCENDANT:
+                   case XPathParser.ANCESTOR:
+                   case XPathParser.DESCENDANT_OR_SELF:
+                   case XPathParser.ANCESTOR_OR_SELF:
+                   case XPathParser.ATTRIBUTE:
+                   case XPathParser.NAMESPACE:
+                   case XPathParser.FOLLOWING:
+                   case XPathParser.FOLLOWING_SIBLING:
+                   case XPathParser.PRECEDING:
+                   case XPathParser.PRECEDING_SIBLING:
+                     // Check that this is an axis specifier
+                     in.mark(1);
+                     do
+                       {
+                         c = in.read();
+                       }
+                     while (c == 0x20 || c == 0x09);
+                     if (c == 0x3a)
+                       {
+                         c = in.read();
+                         if (c == 0x3a)
+                           {
+                             in.reset();
+                             return new XPathToken(val);
+                           }
+                       }
+                     in.reset();
+                     return new XPathToken(XPathParser.NAME, name);
+                   case XPathParser.DIV:
+                   case XPathParser.MOD:
+                     // May be a name
+                     if (lastToken == null)
+                       {
+                         return new XPathToken(XPathParser.NAME, name);
+                       }
+                     switch (lastToken.type)
+                       {
+                       case XPathParser.LP:
+                       case XPathParser.LB:
+                       case XPathParser.COMMA:
+                       case XPathParser.PIPE:
+                       case XPathParser.EQ:
+                       case XPathParser.NE:
+                       case XPathParser.GT:
+                       case XPathParser.LT:
+                       case XPathParser.GTE:
+                       case XPathParser.LTE:
+                       case XPathParser.PLUS:
+                       case XPathParser.MINUS:
+                       case XPathParser.STAR:
+                       case XPathParser.AT:
+                       case XPathParser.DOLLAR:
+                       case XPathParser.COLON:
+                       case XPathParser.DOUBLE_COLON:
+                       case XPathParser.DIV:
+                       case XPathParser.MOD:
+                       case XPathParser.OR:
+                       case XPathParser.AND:
+                       case XPathParser.SLASH:
+                         return new XPathToken(XPathParser.NAME, name);
+                       }
+                     break;
+                   }
+                 return new XPathToken (val);
+               }
+           }
+       }
+   }
+ 
+   boolean isNameChar (int c)
+   {
+     /* Name */
+     return (c == 0x5f
+             || c == 0x2d
+             || c == 0x2e
+             || (c >= 0x30 && c <= 0x39)
+             /* CombiningChar */
+             || (c >= 0x0300 && c <= 0x0345)
+             || (c >= 0x0360 && c <= 0x0361)
+             || (c >= 0x0483 && c <= 0x0486)
+             || (c >= 0x0591 && c <= 0x05A1)
+             || (c >= 0x05A3 && c <= 0x05B9)
+             || (c >= 0x05BB && c <= 0x05BD)
+             || c == 0x05BF
+             || (c >= 0x05C1 && c <= 0x05C2)
+             || c == 0x05C4
+             || (c >= 0x064B && c <= 0x0652)
+             || c == 0x0670
+             || (c >= 0x06D6 && c <= 0x06DC)
+             || (c >= 0x06DD && c <= 0x06DF)
+             || (c >= 0x06E0 && c <= 0x06E4)
+             || (c >= 0x06E7 && c <= 0x06E8)
+             || (c >= 0x06EA && c <= 0x06ED)
+             || (c >= 0x0901 && c <= 0x0903)
+             || c == 0x093C
+             || (c >= 0x093E && c <= 0x094C)
+             || c == 0x094D
+             || (c >= 0x0951 && c <= 0x0954)
+             || (c >= 0x0962 && c <= 0x0963)
+             || (c >= 0x0981 && c <= 0x0983)
+             || c == 0x09BC
+             || c == 0x09BE
+             || c == 0x09BF
+             || (c >= 0x09C0 && c <= 0x09C4)
+             || (c >= 0x09C7 && c <= 0x09C8)
+             || (c >= 0x09CB && c <= 0x09CD)
+             || c == 0x09D7
+             || (c >= 0x09E2 && c <= 0x09E3)
+             || c == 0x0A02
+             || c == 0x0A3C
+             || c == 0x0A3E
+             || c == 0x0A3F
+             || (c >= 0x0A40 && c <= 0x0A42)
+             || (c >= 0x0A47 && c <= 0x0A48)
+             || (c >= 0x0A4B && c <= 0x0A4D)
+             || (c >= 0x0A70 && c <= 0x0A71)
+             || (c >= 0x0A81 && c <= 0x0A83)
+             || c == 0x0ABC
+             || (c >= 0x0ABE && c <= 0x0AC5)
+             || (c >= 0x0AC7 && c <= 0x0AC9)
+             || (c >= 0x0ACB && c <= 0x0ACD)
+             || (c >= 0x0B01 && c <= 0x0B03)
+             || c == 0x0B3C
+             || (c >= 0x0B3E && c <= 0x0B43)
+             || (c >= 0x0B47 && c <= 0x0B48)
+             || (c >= 0x0B4B && c <= 0x0B4D)
+             || (c >= 0x0B56 && c <= 0x0B57)
+             || (c >= 0x0B82 && c <= 0x0B83)
+             || (c >= 0x0BBE && c <= 0x0BC2)
+             || (c >= 0x0BC6 && c <= 0x0BC8)
+             || (c >= 0x0BCA && c <= 0x0BCD)
+             || c == 0x0BD7
+             || (c >= 0x0C01 && c <= 0x0C03)
+             || (c >= 0x0C3E && c <= 0x0C44)
+             || (c >= 0x0C46 && c <= 0x0C48)
+             || (c >= 0x0C4A && c <= 0x0C4D)
+             || (c >= 0x0C55 && c <= 0x0C56)
+             || (c >= 0x0C82 && c <= 0x0C83)
+             || (c >= 0x0CBE && c <= 0x0CC4)
+             || (c >= 0x0CC6 && c <= 0x0CC8)
+             || (c >= 0x0CCA && c <= 0x0CCD)
+             || (c >= 0x0CD5 && c <= 0x0CD6)
+             || (c >= 0x0D02 && c <= 0x0D03)
+             || (c >= 0x0D3E && c <= 0x0D43)
+             || (c >= 0x0D46 && c <= 0x0D48)
+             || (c >= 0x0D4A && c <= 0x0D4D)
+             || c == 0x0D57
+             || c == 0x0E31
+             || (c >= 0x0E34 && c <= 0x0E3A)
+             || (c >= 0x0E47 && c <= 0x0E4E)
+             || c == 0x0EB1
+             || (c >= 0x0EB4 && c <= 0x0EB9)
+             || (c >= 0x0EBB && c <= 0x0EBC)
+             || (c >= 0x0EC8 && c <= 0x0ECD)
+             || (c >= 0x0F18 && c <= 0x0F19)
+             || c == 0x0F35
+             || c == 0x0F37
+             || c == 0x0F39
+             || c == 0x0F3E
+             || c == 0x0F3F
+             || (c >= 0x0F71 && c <= 0x0F84)
+             || (c >= 0x0F86 && c <= 0x0F8B)
+             || (c >= 0x0F90 && c <= 0x0F95)
+             || c == 0x0F97
+             || (c >= 0x0F99 && c <= 0x0FAD)
+             || (c >= 0x0FB1 && c <= 0x0FB7)
+             || c == 0x0FB9
+             || (c >= 0x20D0 && c <= 0x20DC)
+             || c == 0x20E1
+             || (c >= 0x302A && c <= 0x302F)
+             || c == 0x3099
+             || c == 0x309A
+             /* Extender */
+             || c == 0x00B7
+             || c == 0x02D0
+             || c == 0x02D1
+             || c == 0x0387
+             || c == 0x0640
+             || c == 0x0E46
+             || c == 0x0EC6
+             || c == 0x3005
+             || (c >= 0x3031 && c <= 0x3035)
+             || (c >= 0x309D && c <= 0x309E)
+             || (c >= 0x30FC && c <= 0x30FE)
+             /* Name */
+             || Character.isLetter ((char) c));
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/Makefile.am gcc-4.1.0/libjava/classpath/include/Makefile.am
*** gcc-4.0.2/libjava/classpath/include/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/Makefile.am	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,210 ----
+ ## GCJ LOCAL: headers are installed specially.
+ ##include_HEADERS = jni.h jni_md.h jawt.h jawt_md.h
+ 
+ DISTCLEANFILES = jni_md.h
+ 
+ ARG_JNI_JAVAH = -jni
+ ARG_CLASSPATH_JAVAH = -bootclasspath
+ JAVAH = $(USER_JAVAH) $(ARG_JNI_JAVAH) $(ARG_CLASSPATH_JAVAH) ../lib:$(USER_CLASSLIB)
+ 
+ SOUND_H_FILES = \
+ $(top_srcdir)/include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h \
+ $(top_srcdir)/include/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.h \
+ $(top_srcdir)/include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h \
+ $(top_srcdir)/include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h \
+ $(top_srcdir)/include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h
+ 
+ XMLJ_H_FILES = \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeDocument.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeXPathNodeList.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeDocumentType.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeProcessingInstruction.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeXPathNSResolver.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeTypeInfo.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeNodeList.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeNotation.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeXPathResult.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeElement.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeEntity.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeNode.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeXPathExpression.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeNamedNodeMap.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeDocumentBuilder.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeAttr.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_sax_GnomeLocator.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_sax_GnomeXMLReader.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_transform_GnomeTransformer.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_transform_GnomeTransformerFactory.h
+ 
+ GTKPEER_H_FILES = \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkFontPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkGraphics.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkGraphics2D.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkRobotPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkTextLayout.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkButtonPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkChoicePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkClipboard.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkFramePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkGenericPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkImage.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkLabelPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkListPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkMenuPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkPanelPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkSelection.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkToolkit.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h
+ 
+ QTPEER_H_FILES = \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtCheckboxPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtToolkit.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtAudioClip.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtScreenDevice.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtTextFieldPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtMenuItemPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtButtonPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtWindowPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtDialogPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtImage.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtMenuBarPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtVolatileImage.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtFontPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtChoicePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtGraphics.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtComponentPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtMenuPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtTextAreaPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QPen.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtPanelPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QPainterPath.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtFontMetrics.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtScrollPanePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QMatrix.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtLabelPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtFramePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtListPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtScrollbarPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtCanvasPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_MainQtThread.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtFileDialogPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtContainerPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h 
+ 
+ H_FILES = \
+ $(SOUND_H_FILES) \
+ $(XMLJ_H_FILES) \
+ $(GTKPEER_H_FILES) \
+ $(QTPEER_H_FILES) \
+ $(top_srcdir)/include/gnu_java_net_PlainDatagramSocketImpl.h \
+ $(top_srcdir)/include/gnu_java_net_PlainSocketImpl.h \
+ $(top_srcdir)/include/gnu_java_nio_VMPipe.h \
+ $(top_srcdir)/include/gnu_java_nio_VMSelector.h \
+ $(top_srcdir)/include/gnu_java_nio_channels_FileChannelImpl.h \
+ $(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvEncoder.h \
+ $(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvDecoder.h \
+ $(top_srcdir)/include/java_io_VMFile.h \
+ $(top_srcdir)/include/java_io_VMObjectInputStream.h \
+ $(top_srcdir)/include/java_io_VMObjectStreamClass.h \
+ $(top_srcdir)/include/java_lang_Math.h \
+ $(top_srcdir)/include/java_lang_VMDouble.h \
+ $(top_srcdir)/include/java_lang_VMFloat.h \
+ $(top_srcdir)/include/java_lang_VMProcess.h \
+ $(top_srcdir)/include/java_lang_VMSystem.h \
+ $(top_srcdir)/include/java_lang_reflect_Array.h \
+ $(top_srcdir)/include/java_net_VMInetAddress.h \
+ $(top_srcdir)/include/java_net_VMNetworkInterface.h \
+ $(top_srcdir)/include/java_nio_VMDirectByteBuffer.h \
+ $(top_srcdir)/include/java_nio_MappedByteBufferImpl.h \
+ $(top_srcdir)/include/java_util_VMTimeZone.h
+ 
+ if CREATE_JNI_HEADERS
+ 
+ all-local: $(H_FILES)
+ 
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_%.h: $(top_builddir)/lib/gnu/xml/libxmlj/dom/%.class
+ 	$(JAVAH) -o $@ gnu.xml.libxmlj.dom.$*
+ 
+ $(top_srcdir)/include/gnu_xml_libxmlj_sax_%.h: $(top_builddir)/lib/gnu/xml/libxmlj/sax/%.class
+ 	$(JAVAH) -o $@ gnu.xml.libxmlj.sax.$*
+ 
+ $(top_srcdir)/include/gnu_xml_libxmlj_transform_%.h: $(top_builddir)/lib/gnu/xml/libxmlj/transform/%.class
+ 	$(JAVAH) -o $@ gnu.xml.libxmlj.transform.$*
+ 
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_%.h: $(top_builddir)/lib/gnu/java/awt/peer/gtk/%.class
+ 	$(JAVAH) -o $@ gnu.java.awt.peer.gtk.$*
+ 
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_%.h: $(top_builddir)/lib/gnu/java/awt/peer/qt/%.class
+ 	$(JAVAH) -o $@ gnu.java.awt.peer.qt.$*
+ 
+ $(top_srcdir)/include/gnu_javax_sound_midi_alsa_%.h: $(top_builddir)/lib/gnu/javax/sound/midi/alsa/%.class
+ 	$(JAVAH) -o $@ gnu.javax.sound.midi.alsa.$*
+ 
+ $(top_srcdir)/include/gnu_javax_sound_midi_dssi_%.h: $(top_builddir)/lib/gnu/javax/sound/midi/dssi/%.class
+ 	$(JAVAH) -o $@ gnu.javax.sound.midi.dssi.$*
+ 
+ $(top_srcdir)/include/gnu_java_net_PlainDatagramSocketImpl.h: $(top_srcdir)/gnu/java/net/PlainDatagramSocketImpl.java
+ 	$(JAVAH) -o $@ gnu.java.net.PlainDatagramSocketImpl
+ $(top_srcdir)/include/gnu_java_net_PlainSocketImpl.h: $(top_srcdir)/gnu/java/net/PlainSocketImpl.java
+ 	$(JAVAH) -o $@ gnu.java.net.PlainSocketImpl
+ $(top_srcdir)/include/gnu_java_nio_VMPipe.h: $(top_srcdir)/vm/reference/gnu/java/nio/VMPipe.java
+ 	$(JAVAH) -o $@ gnu.java.nio.VMPipe
+ $(top_srcdir)/include/gnu_java_nio_VMSelector.h: $(top_srcdir)/vm/reference/gnu/java/nio/VMSelector.java
+ 	$(JAVAH) -o $@ gnu.java.nio.VMSelector
+ $(top_srcdir)/include/java_io_VMFile.h: $(top_srcdir)/vm/reference/java/io/VMFile.java
+ 	$(JAVAH) -o $@ java.io.VMFile
+ $(top_srcdir)/include/java_io_VMObjectInputStream.h: $(top_srcdir)/vm/reference/java/io/VMObjectInputStream.java
+ 	$(JAVAH) -o $@ java.io.VMObjectInputStream
+ $(top_srcdir)/include/java_io_VMObjectStreamClass.h: $(top_srcdir)/vm/reference/java/io/VMObjectStreamClass.java
+ 	$(JAVAH) -o $@ java.io.VMObjectStreamClass
+ $(top_srcdir)/include/java_lang_Math.h: $(top_srcdir)/java/lang/Math.java
+ 	$(JAVAH) -o $@ java.lang.Math
+ $(top_srcdir)/include/java_lang_VMDouble.h: $(top_srcdir)/vm/reference/java/lang/VMDouble.java
+ 	$(JAVAH) -o $@ java.lang.VMDouble
+ $(top_srcdir)/include/java_lang_VMFloat.h: $(top_srcdir)/vm/reference/java/lang/VMFloat.java
+ 	$(JAVAH) -o $@ java.lang.VMFloat
+ $(top_srcdir)/include/java_lang_VMProcess.h: $(top_srcdir)/vm/reference/java/lang/VMProcess.java
+ 	$(JAVAH) -o $@ java.lang.VMProcess
+ $(top_srcdir)/include/java_lang_VMSystem.h: $(top_srcdir)/vm/reference/java/lang/VMSystem.java
+ 	$(JAVAH) -o $@ java.lang.VMSystem
+ $(top_srcdir)/include/java_lang_reflect_Array.h: $(top_srcdir)/java/lang/reflect/Array.java
+ 	$(JAVAH) -o $@ java.lang.reflect.Array
+ $(top_srcdir)/include/java_net_VMInetAddress.h: $(top_srcdir)/vm/reference/java/net/VMInetAddress.java
+ 	$(JAVAH) -o $@ java.net.VMInetAddress
+ $(top_srcdir)/include/java_net_VMNetworkInterface.h: $(top_srcdir)/vm/reference/java/net/VMNetworkInterface.java
+ 	$(JAVAH) -o $@ java.net.VMNetworkInterface
+ $(top_srcdir)/include/java_nio_VMDirectByteBuffer.h: $(top_srcdir)/vm/reference/java/nio/VMDirectByteBuffer.java
+ 	$(JAVAH) -o $@ java.nio.VMDirectByteBuffer
+ $(top_srcdir)/include/java_nio_MappedByteBufferImpl.h: $(top_srcdir)/java/nio/MappedByteBufferImpl.java
+ 	$(JAVAH) -o $@ java.nio.MappedByteBufferImpl
+ $(top_srcdir)/include/gnu_java_nio_channels_FileChannelImpl.h: $(top_srcdir)/gnu/java/nio/channels/FileChannelImpl.java
+ 	$(JAVAH) -o $@ gnu.java.nio.channels.FileChannelImpl
+ $(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvDecoder.h: $(top_srcdir)/gnu/java/nio/charset/iconv/IconvDecoder.java
+ 	$(JAVAH) -o $@ gnu.java.nio.charset.iconv.IconvDecoder
+ $(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvEncoder.h: $(top_srcdir)/gnu/java/nio/charset/iconv/IconvEncoder.java
+ 	$(JAVAH) -o $@ gnu.java.nio.charset.iconv.IconvEncoder
+ $(top_srcdir)/include/java_util_VMTimeZone.h: $(top_srcdir)/vm/reference/java/util/VMTimeZone.java
+ 	$(JAVAH) -o $@ java.util.VMTimeZone
+ 
+ endif # CREATE_JNI_HEADERS
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/Makefile.in gcc-4.1.0/libjava/classpath/include/Makefile.in
*** gcc-4.0.2/libjava/classpath/include/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/Makefile.in	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,633 ----
+ # Makefile.in generated by automake 1.9.3 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ # 2003, 2004  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+ INSTALL_HEADER = $(INSTALL_DATA)
+ transform = $(program_transform_name)
+ NORMAL_INSTALL = :
+ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = include
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ 	$(srcdir)/config.h.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ 	$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ 	$(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/iconv.m4 \
+ 	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ 	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = config.h
+ CONFIG_CLEAN_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BUILD_CLASS_FILES_FALSE = @BUILD_CLASS_FILES_FALSE@
+ BUILD_CLASS_FILES_TRUE = @BUILD_CLASS_FILES_TRUE@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
+ CLASSPATH_MODULE = @CLASSPATH_MODULE@
+ CP = @CP@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CREATE_ALSA_LIBRARIES_FALSE = @CREATE_ALSA_LIBRARIES_FALSE@
+ CREATE_ALSA_LIBRARIES_TRUE = @CREATE_ALSA_LIBRARIES_TRUE@
+ CREATE_API_DOCS_FALSE = @CREATE_API_DOCS_FALSE@
+ CREATE_API_DOCS_TRUE = @CREATE_API_DOCS_TRUE@
+ CREATE_CORE_JNI_LIBRARIES_FALSE = @CREATE_CORE_JNI_LIBRARIES_FALSE@
+ CREATE_CORE_JNI_LIBRARIES_TRUE = @CREATE_CORE_JNI_LIBRARIES_TRUE@
+ CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
+ CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
+ CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
+ CREATE_GTK_PEER_LIBRARIES_TRUE = @CREATE_GTK_PEER_LIBRARIES_TRUE@
+ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
+ CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
+ CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
+ CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
+ CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
+ CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
+ CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
+ CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DATE = @DATE@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ ECJ = @ECJ@
+ EGREP = @EGREP@
+ ERROR_CFLAGS = @ERROR_CFLAGS@
+ EXAMPLESDIR = @EXAMPLESDIR@
+ EXEEXT = @EXEEXT@
+ FIND = @FIND@
+ FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+ FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
+ FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
+ FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
+ FOUND_GCJ_FALSE = @FOUND_GCJ_FALSE@
+ FOUND_GCJ_TRUE = @FOUND_GCJ_TRUE@
+ FOUND_JIKES_FALSE = @FOUND_JIKES_FALSE@
+ FOUND_JIKES_TRUE = @FOUND_JIKES_TRUE@
+ FOUND_KJC_FALSE = @FOUND_KJC_FALSE@
+ FOUND_KJC_TRUE = @FOUND_KJC_TRUE@
+ GCJ = @GCJ@
+ GCJX = @GCJX@
+ GJDOC = @GJDOC@
+ GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ INIT_LOAD_LIBRARY = @INIT_LOAD_LIBRARY@
+ INSTALL_CLASS_FILES_FALSE = @INSTALL_CLASS_FILES_FALSE@
+ INSTALL_CLASS_FILES_TRUE = @INSTALL_CLASS_FILES_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_GLIBJ_ZIP_FALSE = @INSTALL_GLIBJ_ZIP_FALSE@
+ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
+ JAY = @JAY@
+ JAY_SKELETON = @JAY_SKELETON@
+ JIKES = @JIKES@
+ JIKESENCODING = @JIKESENCODING@
+ KJC = @KJC@
+ LDFLAGS = @LDFLAGS@
+ LIBDEBUG = @LIBDEBUG@
+ LIBICONV = @LIBICONV@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIBVERSION = @LIBVERSION@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MKDIR = @MKDIR@
+ MOC = @MOC@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
+ PANGOFT2_LIBS = @PANGOFT2_LIBS@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ QT_CFLAGS = @QT_CFLAGS@
+ QT_LIBS = @QT_LIBS@
+ RANLIB = @RANLIB@
+ REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
+ REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
+ REMOVE = @REMOVE@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
+ STRIP = @STRIP@
+ USER_CLASSLIB = @USER_CLASSLIB@
+ USER_JAVAH = @USER_JAVAH@
+ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
+ USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
+ USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
+ USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+ VERSION = @VERSION@
+ WARNING_CFLAGS = @WARNING_CFLAGS@
+ XML_CFLAGS = @XML_CFLAGS@
+ XML_LIBS = @XML_LIBS@
+ XSLT_CFLAGS = @XSLT_CFLAGS@
+ XSLT_LIBS = @XSLT_LIBS@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZIP = @ZIP@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
+ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ datadir = @datadir@
+ default_toolkit = @default_toolkit@
+ exec_prefix = @exec_prefix@
+ glibjdir = @glibjdir@
+ host = @host@
+ host_alias = @host_alias@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ nativelibdir = @nativelibdir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ vm_classes = @vm_classes@
+ DISTCLEANFILES = jni_md.h
+ ARG_JNI_JAVAH = -jni
+ ARG_CLASSPATH_JAVAH = -bootclasspath
+ JAVAH = $(USER_JAVAH) $(ARG_JNI_JAVAH) $(ARG_CLASSPATH_JAVAH) ../lib:$(USER_CLASSLIB)
+ SOUND_H_FILES = \
+ $(top_srcdir)/include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h \
+ $(top_srcdir)/include/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.h \
+ $(top_srcdir)/include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h \
+ $(top_srcdir)/include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h \
+ $(top_srcdir)/include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h
+ 
+ XMLJ_H_FILES = \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeDocument.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeXPathNodeList.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeDocumentType.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeProcessingInstruction.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeXPathNSResolver.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeTypeInfo.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeNodeList.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeNotation.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeXPathResult.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeElement.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeEntity.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeNode.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeXPathExpression.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeNamedNodeMap.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeDocumentBuilder.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_dom_GnomeAttr.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_sax_GnomeLocator.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_sax_GnomeXMLReader.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_transform_GnomeTransformer.h \
+ $(top_srcdir)/include/gnu_xml_libxmlj_transform_GnomeTransformerFactory.h
+ 
+ GTKPEER_H_FILES = \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkFontPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkGraphics.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkGraphics2D.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkRobotPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkTextLayout.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkButtonPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkChoicePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkClipboard.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkFramePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkGenericPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkImage.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkLabelPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkListPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkMenuPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkPanelPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkSelection.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkToolkit.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h
+ 
+ QTPEER_H_FILES = \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtCheckboxPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtToolkit.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtAudioClip.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtScreenDevice.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtTextFieldPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtMenuItemPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtButtonPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtWindowPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtDialogPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtImage.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtMenuBarPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtVolatileImage.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtFontPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtChoicePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtGraphics.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtComponentPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtMenuPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtTextAreaPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QPen.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtPanelPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QPainterPath.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtFontMetrics.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtScrollPanePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QMatrix.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtLabelPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtFramePeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtListPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtScrollbarPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtCanvasPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_MainQtThread.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtFileDialogPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtContainerPeer.h \
+ $(top_srcdir)/include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h 
+ 
+ H_FILES = \
+ $(SOUND_H_FILES) \
+ $(XMLJ_H_FILES) \
+ $(GTKPEER_H_FILES) \
+ $(QTPEER_H_FILES) \
+ $(top_srcdir)/include/gnu_java_net_PlainDatagramSocketImpl.h \
+ $(top_srcdir)/include/gnu_java_net_PlainSocketImpl.h \
+ $(top_srcdir)/include/gnu_java_nio_VMPipe.h \
+ $(top_srcdir)/include/gnu_java_nio_VMSelector.h \
+ $(top_srcdir)/include/gnu_java_nio_channels_FileChannelImpl.h \
+ $(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvEncoder.h \
+ $(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvDecoder.h \
+ $(top_srcdir)/include/java_io_VMFile.h \
+ $(top_srcdir)/include/java_io_VMObjectInputStream.h \
+ $(top_srcdir)/include/java_io_VMObjectStreamClass.h \
+ $(top_srcdir)/include/java_lang_Math.h \
+ $(top_srcdir)/include/java_lang_VMDouble.h \
+ $(top_srcdir)/include/java_lang_VMFloat.h \
+ $(top_srcdir)/include/java_lang_VMProcess.h \
+ $(top_srcdir)/include/java_lang_VMSystem.h \
+ $(top_srcdir)/include/java_lang_reflect_Array.h \
+ $(top_srcdir)/include/java_net_VMInetAddress.h \
+ $(top_srcdir)/include/java_net_VMNetworkInterface.h \
+ $(top_srcdir)/include/java_nio_VMDirectByteBuffer.h \
+ $(top_srcdir)/include/java_nio_MappedByteBufferImpl.h \
+ $(top_srcdir)/include/java_util_VMTimeZone.h
+ 
+ all: config.h
+ 	$(MAKE) $(AM_MAKEFLAGS) all-am
+ 
+ .SUFFIXES:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ 		&& exit 0; \
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+ 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --gnu  include/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+ 	  *config.status*) \
+ 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ 	  *) \
+ 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ 	esac;
+ 
+ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ 
+ config.h: stamp-h1
+ 	@if test ! -f $@; then \
+ 	  rm -f stamp-h1; \
+ 	  $(MAKE) stamp-h1; \
+ 	else :; fi
+ 
+ stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ 	@rm -f stamp-h1
+ 	cd $(top_builddir) && $(SHELL) ./config.status include/config.h
+ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+ 	cd $(top_srcdir) && $(AUTOHEADER)
+ 	rm -f stamp-h1
+ 	touch $@
+ 
+ distclean-hdr:
+ 	-rm -f config.h stamp-h1
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ tags: TAGS
+ TAGS:
+ 
+ ctags: CTAGS
+ CTAGS:
+ 
+ 
+ distdir: $(DISTFILES)
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ 	list='$(DISTFILES)'; for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ 	  esac; \
+ 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ 	    dir="/$$dir"; \
+ 	    $(mkdir_p) "$(distdir)$$dir"; \
+ 	  else \
+ 	    dir=''; \
+ 	  fi; \
+ 	  if test -d $$d/$$file; then \
+ 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ 	    fi; \
+ 	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ 	  else \
+ 	    test -f $(distdir)/$$file \
+ 	    || cp -p $$d/$$file $(distdir)/$$file \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+ check-am: all-am
+ check: check-am
+ @CREATE_JNI_HEADERS_FALSE@all-local:
+ all-am: Makefile config.h all-local
+ installdirs:
+ install: install-am
+ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+ 	@echo "it deletes files that may require special tools to rebuild."
+ clean: clean-am
+ 
+ clean-am: clean-generic clean-libtool mostlyclean-am
+ 
+ distclean: distclean-am
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-generic distclean-hdr \
+ 	distclean-libtool
+ 
+ dvi: dvi-am
+ 
+ dvi-am:
+ 
+ html: html-am
+ 
+ info: info-am
+ 
+ info-am:
+ 
+ install-data-am:
+ 
+ install-exec-am:
+ 
+ install-info: install-info-am
+ 
+ install-man:
+ 
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-am
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-am
+ 
+ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+ 
+ pdf: pdf-am
+ 
+ pdf-am:
+ 
+ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am
+ 
+ .PHONY: all all-am all-local check check-am clean clean-generic \
+ 	clean-libtool distclean distclean-generic distclean-hdr \
+ 	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ 	install install-am install-data install-data-am install-exec \
+ 	install-exec-am install-info install-info-am install-man \
+ 	install-strip installcheck installcheck-am installdirs \
+ 	maintainer-clean maintainer-clean-generic mostlyclean \
+ 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ 	uninstall uninstall-am uninstall-info-am
+ 
+ 
+ @CREATE_JNI_HEADERS_TRUE@all-local: $(H_FILES)
+ 
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_xml_libxmlj_dom_%.h: $(top_builddir)/lib/gnu/xml/libxmlj/dom/%.class
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.xml.libxmlj.dom.$*
+ 
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_xml_libxmlj_sax_%.h: $(top_builddir)/lib/gnu/xml/libxmlj/sax/%.class
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.xml.libxmlj.sax.$*
+ 
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_xml_libxmlj_transform_%.h: $(top_builddir)/lib/gnu/xml/libxmlj/transform/%.class
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.xml.libxmlj.transform.$*
+ 
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_awt_peer_gtk_%.h: $(top_builddir)/lib/gnu/java/awt/peer/gtk/%.class
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.java.awt.peer.gtk.$*
+ 
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_awt_peer_qt_%.h: $(top_builddir)/lib/gnu/java/awt/peer/qt/%.class
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.java.awt.peer.qt.$*
+ 
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_javax_sound_midi_alsa_%.h: $(top_builddir)/lib/gnu/javax/sound/midi/alsa/%.class
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.javax.sound.midi.alsa.$*
+ 
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_javax_sound_midi_dssi_%.h: $(top_builddir)/lib/gnu/javax/sound/midi/dssi/%.class
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.javax.sound.midi.dssi.$*
+ 
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_net_PlainDatagramSocketImpl.h: $(top_srcdir)/gnu/java/net/PlainDatagramSocketImpl.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.java.net.PlainDatagramSocketImpl
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_net_PlainSocketImpl.h: $(top_srcdir)/gnu/java/net/PlainSocketImpl.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.java.net.PlainSocketImpl
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_nio_VMPipe.h: $(top_srcdir)/vm/reference/gnu/java/nio/VMPipe.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.java.nio.VMPipe
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_nio_VMSelector.h: $(top_srcdir)/vm/reference/gnu/java/nio/VMSelector.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.java.nio.VMSelector
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_io_VMFile.h: $(top_srcdir)/vm/reference/java/io/VMFile.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.io.VMFile
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_io_VMObjectInputStream.h: $(top_srcdir)/vm/reference/java/io/VMObjectInputStream.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.io.VMObjectInputStream
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_io_VMObjectStreamClass.h: $(top_srcdir)/vm/reference/java/io/VMObjectStreamClass.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.io.VMObjectStreamClass
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_lang_Math.h: $(top_srcdir)/java/lang/Math.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.lang.Math
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_lang_VMDouble.h: $(top_srcdir)/vm/reference/java/lang/VMDouble.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.lang.VMDouble
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_lang_VMFloat.h: $(top_srcdir)/vm/reference/java/lang/VMFloat.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.lang.VMFloat
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_lang_VMProcess.h: $(top_srcdir)/vm/reference/java/lang/VMProcess.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.lang.VMProcess
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_lang_VMSystem.h: $(top_srcdir)/vm/reference/java/lang/VMSystem.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.lang.VMSystem
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_lang_reflect_Array.h: $(top_srcdir)/java/lang/reflect/Array.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.lang.reflect.Array
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_net_VMInetAddress.h: $(top_srcdir)/vm/reference/java/net/VMInetAddress.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.net.VMInetAddress
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_net_VMNetworkInterface.h: $(top_srcdir)/vm/reference/java/net/VMNetworkInterface.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.net.VMNetworkInterface
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_nio_VMDirectByteBuffer.h: $(top_srcdir)/vm/reference/java/nio/VMDirectByteBuffer.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.nio.VMDirectByteBuffer
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_nio_MappedByteBufferImpl.h: $(top_srcdir)/java/nio/MappedByteBufferImpl.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.nio.MappedByteBufferImpl
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_nio_channels_FileChannelImpl.h: $(top_srcdir)/gnu/java/nio/channels/FileChannelImpl.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.java.nio.channels.FileChannelImpl
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvDecoder.h: $(top_srcdir)/gnu/java/nio/charset/iconv/IconvDecoder.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.java.nio.charset.iconv.IconvDecoder
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvEncoder.h: $(top_srcdir)/gnu/java/nio/charset/iconv/IconvEncoder.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ gnu.java.nio.charset.iconv.IconvEncoder
+ @CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_util_VMTimeZone.h: $(top_srcdir)/vm/reference/java/util/VMTimeZone.java
+ @CREATE_JNI_HEADERS_TRUE@	$(JAVAH) -o $@ java.util.VMTimeZone
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/config.h.in gcc-4.1.0/libjava/classpath/include/config.h.in
*** gcc-4.0.2/libjava/classpath/include/config.h.in	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/config.h.in	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,284 ----
+ /* include/config.h.in.  Generated from configure.ac by autoheader.  */
+ 
+ /* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
+ #undef BYTEORDER
+ 
+ /* Define to 1 if you want native library runtime debugging code enabled */
+ #undef DEBUG
+ 
+ /* defined if cairo support was built in */
+ #undef GTK_CAIRO
+ 
+ /* Define to 1 if you have the `accept' function. */
+ #undef HAVE_ACCEPT
+ 
+ /* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+ #undef HAVE_ALSA_ASOUNDLIB_H
+ 
+ /* Define to 1 if you have the <asm/ioctls.h> header file. */
+ #undef HAVE_ASM_IOCTLS_H
+ 
+ /* Define to 1 if you have the `bind' function. */
+ #undef HAVE_BIND
+ 
+ /* Define to 1 if you have BSD u_int32_t */
+ #undef HAVE_BSD_INT32_DEFINED
+ 
+ /* Define to 1 if you have the `close' function. */
+ #undef HAVE_CLOSE
+ 
+ /* Define to 1 if you have the `connect' function. */
+ #undef HAVE_CONNECT
+ 
+ /* Define to 1 if you have the <crt_externs.h> header file. */
+ #undef HAVE_CRT_EXTERNS_H
+ 
+ /* Define to 1 if you have the <dssi.h> header file. */
+ #undef HAVE_DSSI_H
+ 
+ /* Define to 1 if you have the `execve' function. */
+ #undef HAVE_EXECVE
+ 
+ /* Define to 1 if you have the `fcntl' function. */
+ #undef HAVE_FCNTL
+ 
+ /* Define to 1 if you have the <fcntl.h> header file. */
+ #undef HAVE_FCNTL_H
+ 
+ /* Define to 1 if you have the `fork' function. */
+ #undef HAVE_FORK
+ 
+ /* Define to 1 if you have the `fstat' function. */
+ #undef HAVE_FSTAT
+ 
+ /* Define to 1 if you have the `fsync' function. */
+ #undef HAVE_FSYNC
+ 
+ /* Define to 1 if you have the `ftruncate' function. */
+ #undef HAVE_FTRUNCATE
+ 
+ /* Define to 1 if you have the `gethostname' function. */
+ #undef HAVE_GETHOSTNAME
+ 
+ /* Define to 1 if you have the `getpagesize' function. */
+ #undef HAVE_GETPAGESIZE
+ 
+ /* Define to 1 if you have the `getpeername' function. */
+ #undef HAVE_GETPEERNAME
+ 
+ /* Define to 1 if you have the `getsockname' function. */
+ #undef HAVE_GETSOCKNAME
+ 
+ /* Define to 1 if you have the `getsockopt' function. */
+ #undef HAVE_GETSOCKOPT
+ 
+ /* Define to 1 if you have the `htonl' function. */
+ #undef HAVE_HTONL
+ 
+ /* Define to 1 if you have the `htons' function. */
+ #undef HAVE_HTONS
+ 
+ /* Define if you have the iconv() function. */
+ #undef HAVE_ICONV
+ 
+ /* Define to 1 if you have uint32_t */
+ #undef HAVE_INT32_DEFINED
+ 
+ /* Define to 1 if you have the <inttypes.h> header file. */
+ #undef HAVE_INTTYPES_H
+ 
+ /* Define to 1 if you have the `listen' function. */
+ #undef HAVE_LISTEN
+ 
+ /* Define to 1 if you have the `localtime_r' function. */
+ #undef HAVE_LOCALTIME_R
+ 
+ /* Define to 1 if you have the `lseek' function. */
+ #undef HAVE_LSEEK
+ 
+ /* Define to 1 if you have the `madvise' function. */
+ #undef HAVE_MADVISE
+ 
+ /* Define to 1 if you have the <memory.h> header file. */
+ #undef HAVE_MEMORY_H
+ 
+ /* Define to 1 if you have the `memset' function. */
+ #undef HAVE_MEMSET
+ 
+ /* Define to 1 if you have the `mincore' function. */
+ #undef HAVE_MINCORE
+ 
+ /* Define to 1 if you have the `mktime' function. */
+ #undef HAVE_MKTIME
+ 
+ /* Define to 1 if you have the `mmap' function. */
+ #undef HAVE_MMAP
+ 
+ /* Define to 1 if you have the `msync' function. */
+ #undef HAVE_MSYNC
+ 
+ /* Define to 1 if you have the `munmap' function. */
+ #undef HAVE_MUNMAP
+ 
+ /* Define to 1 if you have the `open' function. */
+ #undef HAVE_OPEN
+ 
+ /* Define to 1 if you have the `pipe' function. */
+ #undef HAVE_PIPE
+ 
+ /* Define to 1 if you have the `read' function. */
+ #undef HAVE_READ
+ 
+ /* Define to 1 if you have the `recvfrom' function. */
+ #undef HAVE_RECVFROM
+ 
+ /* Define to 1 if you have the `select' function. */
+ #undef HAVE_SELECT
+ 
+ /* Define to 1 if you have the `send' function. */
+ #undef HAVE_SEND
+ 
+ /* Define to 1 if you have the `sendto' function. */
+ #undef HAVE_SENDTO
+ 
+ /* Define to 1 if you have the `setsockopt' function. */
+ #undef HAVE_SETSOCKOPT
+ 
+ /* Define to 1 if you have the `socket' function. */
+ #undef HAVE_SOCKET
+ 
+ /* Define to 1 if you have the <stdint.h> header file. */
+ #undef HAVE_STDINT_H
+ 
+ /* Define to 1 if you have the <stdlib.h> header file. */
+ #undef HAVE_STDLIB_H
+ 
+ /* Define to 1 if you have the `strerror' function. */
+ #undef HAVE_STRERROR
+ 
+ /* Define to 1 if you have the `strerror_r' function. */
+ #undef HAVE_STRERROR_R
+ 
+ /* Define to 1 if you have the <strings.h> header file. */
+ #undef HAVE_STRINGS_H
+ 
+ /* Define to 1 if you have the <string.h> header file. */
+ #undef HAVE_STRING_H
+ 
+ /* Define to 1 if `tm_zone' is member of `struct tm'. */
+ #undef HAVE_STRUCT_TM_TM_ZONE
+ 
+ /* Define to 1 if you have the `sysconf' function. */
+ #undef HAVE_SYSCONF
+ 
+ /* Define to 1 if you have the <sys/config.h> header file. */
+ #undef HAVE_SYS_CONFIG_H
+ 
+ /* Define to 1 if you have the <sys/filio.h> header file. */
+ #undef HAVE_SYS_FILIO_H
+ 
+ /* Define to 1 if you have the <sys/ioctl.h> header file. */
+ #undef HAVE_SYS_IOCTL_H
+ 
+ /* Define to 1 if you have the <sys/mman.h> header file. */
+ #undef HAVE_SYS_MMAN_H
+ 
+ /* Define to 1 if you have the <sys/select.h> header file. */
+ #undef HAVE_SYS_SELECT_H
+ 
+ /* Define to 1 if you have the <sys/stat.h> header file. */
+ #undef HAVE_SYS_STAT_H
+ 
+ /* Define to 1 if you have the <sys/time.h> header file. */
+ #undef HAVE_SYS_TIME_H
+ 
+ /* Define to 1 if you have the <sys/types.h> header file. */
+ #undef HAVE_SYS_TYPES_H
+ 
+ /* Define to 1 if you have the <sys/utime.h> header file. */
+ #undef HAVE_SYS_UTIME_H
+ 
+ /* Define to 1 if you have the `time' function. */
+ #undef HAVE_TIME
+ 
+ /* Define if global 'timezone' exists. */
+ #undef HAVE_TIMEZONE
+ 
+ /* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+    `HAVE_STRUCT_TM_TM_ZONE' instead. */
+ #undef HAVE_TM_ZONE
+ 
+ /* Define to 1 if you don't have `tm_zone' but do have the external array
+    `tzname'. */
+ #undef HAVE_TZNAME
+ 
+ /* Define if your platform has the global _timezone variable. */
+ #undef HAVE_UNDERSCORE_TIMEZONE
+ 
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #undef HAVE_UNISTD_H
+ 
+ /* Define to 1 if you have the <utime.h> header file. */
+ #undef HAVE_UTIME_H
+ 
+ /* Define to 1 if you have the `write' function. */
+ #undef HAVE_WRITE
+ 
+ /* Define if the host machine stores words of multi-word integers in
+    big-endian order. */
+ #undef HOST_WORDS_BIG_ENDIAN
+ 
+ /* Define as const if the declaration of iconv() needs const. */
+ #undef ICONV_CONST
+ 
+ /* Name of package */
+ #undef PACKAGE
+ 
+ /* Define to the address where bug reports for this package should be sent. */
+ #undef PACKAGE_BUGREPORT
+ 
+ /* Define to the full name of this package. */
+ #undef PACKAGE_NAME
+ 
+ /* Define to the full name and version of this package. */
+ #undef PACKAGE_STRING
+ 
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+ 
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+ 
+ /* Define if you want to synchronize VM threads portably by default; undef
+    otherwise */
+ #undef PORTABLE_NATIVE_SYNC
+ 
+ /* The number of bytes in type void * */
+ #undef SIZEOF_VOID_P
+ 
+ /* Define to 1 if you have the ANSI C header files. */
+ #undef STDC_HEADERS
+ 
+ /* Define if struct tm has tm_gmtoff field. */
+ #undef STRUCT_TM_HAS_GMTOFF
+ 
+ /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+ #undef TIME_WITH_SYS_TIME
+ 
+ /* Define to 1 if your <sys/time.h> declares `struct tm'. */
+ #undef TM_IN_SYS_TIME
+ 
+ /* Version number of package */
+ #undef VERSION
+ 
+ /* whether byteorder is bigendian */
+ #undef WORDS_BIGENDIAN
+ 
+ /* Define to 1 if the X Window System is missing or not being used. */
+ #undef X_DISPLAY_MISSING
+ 
+ /* Define to `__attribute__' to nothing if it's not supported.  */
+ #undef __attribute__
+ 
+ /* Define to empty if `const' does not conform to ANSI C. */
+ #undef const
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GThreadNativeMethodRunner__
+ #define __gnu_java_awt_peer_gtk_GThreadNativeMethodRunner__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun (JNIEnv *env, jobject, jlong, jlong);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GThreadNativeMethodRunner__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkFontPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkFontPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkFontPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkFontPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,25 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GdkFontPeer__
+ #define __gnu_java_awt_peer_gtk_GdkFontPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkFontPeer_initStaticState (JNIEnv *env, jclass);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkFontPeer_initState (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkFontPeer_dispose (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont (JNIEnv *env, jobject, jstring, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics (JNIEnv *env, jobject, jdoubleArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkFontPeer_getTextMetrics (JNIEnv *env, jobject, jstring, jdoubleArray);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector (JNIEnv *env, jobject, jstring, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GdkFontPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,47 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GdkGraphics__
+ #define __gnu_java_awt_peer_gtk_GdkGraphics__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initStaticState (JNIEnv *env, jclass);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2 (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initStateUnlocked (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__II (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initFromImage (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_copyState (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_connectSignals (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_copyArea (JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_dispose (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawLine (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawArc (JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillArc (JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawOval (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillOval (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolygon (JNIEnv *env, jobject, jintArray, jintArray, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillPolygon (JNIEnv *env, jobject, jintArray, jintArray, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolyline (JNIEnv *env, jobject, jintArray, jintArray, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawRect (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillRect (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString (JNIEnv *env, jobject, jobject, jstring, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_setClipRectangle (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor (JNIEnv *env, jobject, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_setFunction (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_translateNative (JNIEnv *env, jobject, jint, jint);
+ #undef gnu_java_awt_peer_gtk_GdkGraphics_GDK_COPY
+ #define gnu_java_awt_peer_gtk_GdkGraphics_GDK_COPY 0L
+ #undef gnu_java_awt_peer_gtk_GdkGraphics_GDK_XOR
+ #define gnu_java_awt_peer_gtk_GdkGraphics_GDK_XOR 2L
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GdkGraphics__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics2D.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics2D.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics2D.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics2D.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,67 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GdkGraphics2D__
+ #define __gnu_java_awt_peer_gtk_GdkGraphics2D__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initStaticState (JNIEnv *env, jclass);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initStateUnlocked (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2 (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__II (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState___3III (JNIEnv *env, jobject, jintArray, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_dispose (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilter (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilterUnlocked (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_connectSignals (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable (JNIEnv *env, jobject, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels (JNIEnv *env, jobject, jintArray, jint, jint, jint, jdoubleArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixelsUnlocked (JNIEnv *env, jobject, jintArray, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels (JNIEnv *env, jobject, jintArray, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble, jint, jint, jint, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradientUnlocked (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble, jint, jint, jint, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSave (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRestore (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix (JNIEnv *env, jobject, jdoubleArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrixUnlocked (JNIEnv *env, jobject, jdoubleArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetOperator (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBAColor (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBAColorUnlocked (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFillRule (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidth (JNIEnv *env, jobject, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidthUnlocked (JNIEnv *env, jobject, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCap (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCapUnlocked (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoinUnlocked (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash (JNIEnv *env, jobject, jdoubleArray, jint, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDashUnlocked (JNIEnv *env, jobject, jdoubleArray, jint, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMiterLimit (JNIEnv *env, jobject, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMiterLimitUnlocked (JNIEnv *env, jobject, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoNewPath (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoMoveTo (JNIEnv *env, jobject, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoLineTo (JNIEnv *env, jobject, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoCurveTo (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelMoveTo (JNIEnv *env, jobject, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelLineTo (JNIEnv *env, jobject, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelCurveTo (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRectangle (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClosePath (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoStroke (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoFill (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClip (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector (JNIEnv *env, jobject, jobject, jfloat, jfloat, jint, jintArray, jfloatArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGdkTextLayout (JNIEnv *env, jobject, jobject, jfloat, jfloat);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_releasePeerGraphicsResource (JNIEnv *env, jclass, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GdkGraphics2D__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GdkGraphicsEnvironment__
+ #define __gnu_java_awt_peer_gtk_GdkGraphicsEnvironment__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_nativeGetNumFontFamilies (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_nativeGetFontFamilies (JNIEnv *env, jobject, jobjectArray);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GdkGraphicsEnvironment__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,24 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GdkPixbufDecoder__
+ #define __gnu_java_awt_peer_gtk_GdkPixbufDecoder__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initStaticState (JNIEnv *env, jclass);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initState (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes (JNIEnv *env, jobject, jbyteArray, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_finish (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage (JNIEnv *env, jclass, jintArray, jstring, jint, jint, jboolean, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GdkPixbufDecoder__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkRobotPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkRobotPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkRobotPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkRobotPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,26 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GdkRobotPeer__
+ #define __gnu_java_awt_peer_gtk_GdkRobotPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GdkRobotPeer_initXTest (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mouseMove (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mousePress (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mouseRelease (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mouseWheel (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkRobotPeer_keyPress (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkRobotPeer_keyRelease (JNIEnv *env, jobject, jint);
+ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkRobotPeer_nativeGetRGBPixels (JNIEnv *env, jobject, jint, jint, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GdkRobotPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkTextLayout.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkTextLayout.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkTextLayout.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GdkTextLayout.h	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,25 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GdkTextLayout__
+ #define __gnu_java_awt_peer_gtk_GdkTextLayout__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_getExtents (JNIEnv *env, jobject, jdoubleArray, jdoubleArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_indexToPos (JNIEnv *env, jobject, jint, jdoubleArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_initState (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_dispose (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_initStaticState (JNIEnv *env, jclass);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_getOutline (JNIEnv *env, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GdkTextLayout__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkButtonPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkButtonPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkButtonPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkButtonPeer.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,28 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkButtonPeer__
+ #define __gnu_java_awt_peer_gtk_GtkButtonPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetModifyFont (JNIEnv *env, jobject, jstring, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetLabel (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetForeground (JNIEnv *env, jobject, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetBackground (JNIEnv *env, jobject, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkActivate (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetRequestFocus (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetGetPreferredDimensions (JNIEnv *env, jobject, jintArray);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkButtonPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkCanvasPeer__
+ #define __gnu_java_awt_peer_gtk_GtkCanvasPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkCanvasPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer__
+ #define __gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_dispose (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove (JNIEnv *env, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer__
+ #define __gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_setState (JNIEnv *env, jobject, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,24 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkCheckboxPeer__
+ #define __gnu_java_awt_peer_gtk_GtkCheckboxPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_create (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeSetCheckboxGroup (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkWidgetModifyFont (JNIEnv *env, jobject, jstring, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkButtonSetLabel (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkToggleButtonSetActive (JNIEnv *env, jobject, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkCheckboxPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkChoicePeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkChoicePeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkChoicePeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkChoicePeer.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,27 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkChoicePeer__
+ #define __gnu_java_awt_peer_gtk_GtkChoicePeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append (JNIEnv *env, jobject, jobjectArray);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeGetSelected (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeAdd (JNIEnv *env, jobject, jstring, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemove (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemoveAll (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_selectNative (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_selectNativeUnlocked (JNIEnv *env, jobject, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkChoicePeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkClipboard.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkClipboard.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkClipboard.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkClipboard.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkClipboard__
+ #define __gnu_java_awt_peer_gtk_GtkClipboard__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkClipboard_advertiseContent (JNIEnv *env, jobject, jobjectArray, jboolean, jboolean, jboolean);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env, jclass, jstring, jstring, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkClipboard__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,40 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkComponentPeer__
+ #define __gnu_java_awt_peer_gtk_GtkComponentPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isEnabled (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_modalHasGrab (JNIEnv *env, jclass);
+ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetForeground (JNIEnv *env, jobject);
+ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetBackground (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetDimensions (JNIEnv *env, jobject, jintArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions (JNIEnv *env, jobject, jintArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWindowGetLocationOnScreen (JNIEnv *env, jobject, jintArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen (JNIEnv *env, jobject, jintArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetBackground (JNIEnv *env, jobject, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetForeground (JNIEnv *env, jobject, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetSensitive (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetParent (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRequestFocus (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent (JNIEnv *env, jobject, jint, jlong, jint, jint, jint);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isRealized (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeEventMask (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setVisibleNative (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setVisibleNativeUnlocked (JNIEnv *env, jobject, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkComponentPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer__
+ #define __gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create (JNIEnv *env, jobject, jlong);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_construct (JNIEnv *env, jobject, jlong);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,24 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkFileDialogPeer__
+ #define __gnu_java_awt_peer_gtk_GtkFileDialogPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create (JNIEnv *env, jobject, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jstring JNICALL Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeGetDirectory (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetDirectory (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter (JNIEnv *env, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkFileDialogPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkFramePeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkFramePeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkFramePeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkFramePeer.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,25 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkFramePeer__
+ #define __gnu_java_awt_peer_gtk_GtkFramePeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidthUnlocked (JNIEnv *env, jobject, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidth (JNIEnv *env, jobject, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFramePeer_removeMenuBarPeer (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkFixedSetVisible (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImage (JNIEnv *env, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkFramePeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkGenericPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkGenericPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkGenericPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkGenericPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkGenericPeer__
+ #define __gnu_java_awt_peer_gtk_GtkGenericPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkGenericPeer_gtkWidgetModifyFont (JNIEnv *env, jobject, jstring, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkGenericPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkImage.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkImage.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkImage.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkImage.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,28 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkImage__
+ #define __gnu_java_awt_peer_gtk_GtkImage__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_getPixels (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_setPixels (JNIEnv *env, jobject, jintArray);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_loadImageFromData (JNIEnv *env, jobject, jbyteArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_createPixmap (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_freePixmap (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_createScaledPixmap (JNIEnv *env, jobject, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaled (JNIEnv *env, jobject, jobject, jint, jint, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped (JNIEnv *env, jobject, jobject, jint, jint, jint, jboolean, jboolean, jint, jint, jint, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_createFromPixbuf (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkImage__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkLabelPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkLabelPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkLabelPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkLabelPeer.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,24 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkLabelPeer__
+ #define __gnu_java_awt_peer_gtk_GtkLabelPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkLabelPeer_create (JNIEnv *env, jobject, jstring, jfloat);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetModifyFont (JNIEnv *env, jobject, jstring, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkLabelPeer_nativeSetAlignment (JNIEnv *env, jobject, jfloat);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkLabelPeer_setText (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkLabelPeer_setNativeBounds (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetGetPreferredDimensions (JNIEnv *env, jobject, jintArray);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkLabelPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkListPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkListPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkListPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkListPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkListPeer__
+ #define __gnu_java_awt_peer_gtk_GtkListPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_create (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetModifyFont (JNIEnv *env, jobject, jstring, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetRequestFocus (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize (JNIEnv *env, jobject, jint, jint, jintArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_append (JNIEnv *env, jobject, jobjectArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_add (JNIEnv *env, jobject, jstring, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_delItems (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_deselect (JNIEnv *env, jobject, jint);
+ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_getSelectedIndexes (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_makeVisible (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_select (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_setMultipleMode (JNIEnv *env, jobject, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkListPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkMenuBarPeer__
+ #define __gnu_java_awt_peer_gtk_GtkMenuBarPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_nativeSetHelpMenu (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_delMenu (JNIEnv *env, jobject, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkMenuBarPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkMenuComponentPeer__
+ #define __gnu_java_awt_peer_gtk_GtkMenuComponentPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuComponentPeer_dispose (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkMenuComponentPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,23 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkMenuItemPeer__
+ #define __gnu_java_awt_peer_gtk_GtkMenuItemPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_gtkWidgetModifyFont (JNIEnv *env, jobject, jstring, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_setEnabled (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_setLabel (JNIEnv *env, jobject, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkMenuItemPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkMenuPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,23 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkMenuPeer__
+ #define __gnu_java_awt_peer_gtk_GtkMenuPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem (JNIEnv *env, jobject, jobject, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_setupAccelGroup (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addTearOff (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_delItem (JNIEnv *env, jobject, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkMenuPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkPanelPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkPanelPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkPanelPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkPanelPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkPanelPeer__
+ #define __gnu_java_awt_peer_gtk_GtkPanelPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkPanelPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkPopupMenuPeer__
+ #define __gnu_java_awt_peer_gtk_GtkPopupMenuPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_setupAccelGroup (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_show (JNIEnv *env, jobject, jint, jint, jlong);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkPopupMenuPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,25 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkScrollPanePeer__
+ #define __gnu_java_awt_peer_gtk_GtkScrollPanePeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_gtkScrolledWindowSetHScrollIncrement (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_gtkScrolledWindowSetVScrollIncrement (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setPolicy (JNIEnv *env, jobject, jint);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getHScrollbarHeight (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getVScrollbarWidth (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setScrollPosition (JNIEnv *env, jobject, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkScrollPanePeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,23 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkScrollbarPeer__
+ #define __gnu_java_awt_peer_gtk_GtkScrollbarPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create (JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setLineIncrement (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setPageIncrement (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setValues (JNIEnv *env, jobject, jint, jint, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkScrollbarPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkSelection.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkSelection.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkSelection.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkSelection.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,23 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkSelection__
+ #define __gnu_java_awt_peer_gtk_GtkSelection__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestText (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestImage (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestURIs (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestBytes (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestMimeTypes (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkSelection__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,34 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkTextAreaPeer__
+ #define __gnu_java_awt_peer_gtk_GtkTextAreaPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create (JNIEnv *env, jobject, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetModifyFont (JNIEnv *env, jobject, jstring, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetRequestFocus (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getCaretPosition (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setCaretPosition (JNIEnv *env, jobject, jint);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionStart (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionEnd (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getText (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_select (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setEditable (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setText (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_insert (JNIEnv *env, jobject, jstring, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_replaceRange (JNIEnv *env, jobject, jstring, jint, jint);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getVScrollbarWidth (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkTextAreaPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,33 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkTextFieldPeer__
+ #define __gnu_java_awt_peer_gtk_GtkTextFieldPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetSetBackground (JNIEnv *env, jobject, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetSetForeground (JNIEnv *env, jobject, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getCaretPosition (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setCaretPosition (JNIEnv *env, jobject, jint);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getSelectionStart (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getSelectionEnd (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getText (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_select (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setEditable (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setText (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetBorderWidth (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetModifyFont (JNIEnv *env, jobject, jstring, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setEchoChar (JNIEnv *env, jobject, jchar);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkTextFieldPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkToolkit.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkToolkit.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkToolkit.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkToolkit.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,25 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkToolkit__
+ #define __gnu_java_awt_peer_gtk_GtkToolkit__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit (JNIEnv *env, jclass, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_beep (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_getScreenSizeDimensions (JNIEnv *env, jobject, jintArray);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_getScreenResolution (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_sync (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_loadSystemColors (JNIEnv *env, jobject, jintArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkMain (JNIEnv *env, jclass);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkToolkit__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,47 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_gtk_GtkWindowPeer__
+ #define __gnu_java_awt_peer_gtk_GtkWindowPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetTitle (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetResizable (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetModal (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_realize (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create (JNIEnv *env, jobject, jint, jboolean, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNative (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toBack (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize (JNIEnv *env, jobject, jint, jint);
+ #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_NORMAL
+ #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_NORMAL 0L
+ #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_DIALOG
+ #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_DIALOG 1L
+ #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_MENU
+ #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_MENU 2L
+ #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_TOOLBAR
+ #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_TOOLBAR 3L
+ #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_SPLASHSCREEN
+ #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_SPLASHSCREEN 4L
+ #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_UTILITY
+ #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_UTILITY 5L
+ #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_DOCK
+ #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_DOCK 6L
+ #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_DESKTOP
+ #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_DESKTOP 7L
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_gtk_GtkWindowPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_MainQtThread.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_MainQtThread.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_MainQtThread.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_MainQtThread.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_MainQtThread__
+ #define __gnu_java_awt_peer_qt_MainQtThread__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_qt_MainQtThread_init (JNIEnv *env, jobject, jstring, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_MainQtThread_exec (JNIEnv *env, jobject, jlong);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_MainQtThread__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QMatrix.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QMatrix.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QMatrix.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QMatrix.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QMatrix__
+ #define __gnu_java_awt_peer_qt_QMatrix__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QMatrix_init (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble);
+ JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_qt_QMatrix_getMatrix (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QMatrix_dispose (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QMatrix__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QPainterPath.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QPainterPath.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QPainterPath.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QPainterPath.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,26 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QPainterPath__
+ #define __gnu_java_awt_peer_qt_QPainterPath__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QPainterPath_getPath (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QPainterPath_init (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QPainterPath_moveTo (JNIEnv *env, jobject, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QPainterPath_close (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QPainterPath_lineTo (JNIEnv *env, jobject, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QPainterPath_quadTo (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QPainterPath_cubicTo (JNIEnv *env, jobject, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QPainterPath_dispose (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QPainterPath__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QPen.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QPen.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QPen.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QPen.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QPen__
+ #define __gnu_java_awt_peer_qt_QPen__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QPen_init (JNIEnv *env, jobject, jdouble, jint, jint, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QPen_dispose (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QPen__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtAudioClip.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtAudioClip.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtAudioClip.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtAudioClip.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,23 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtAudioClip__
+ #define __gnu_java_awt_peer_qt_QtAudioClip__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtAudioClip_loadClip (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtAudioClip_play (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtAudioClip_isAvailable (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtAudioClip_stop (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtAudioClip_dispose (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtAudioClip__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtButtonPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtButtonPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtButtonPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtButtonPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtButtonPeer__
+ #define __gnu_java_awt_peer_qt_QtButtonPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtButtonPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtButtonPeer_setLabel (JNIEnv *env, jobject, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtButtonPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtCanvasPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtCanvasPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtCanvasPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtCanvasPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtCanvasPeer__
+ #define __gnu_java_awt_peer_qt_QtCanvasPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtCanvasPeer_init (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtCanvasPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtCheckboxPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtCheckboxPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtCheckboxPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtCheckboxPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtCheckboxPeer__
+ #define __gnu_java_awt_peer_qt_QtCheckboxPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtCheckboxPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtCheckboxPeer_setLabel (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtCheckboxPeer_setState (JNIEnv *env, jobject, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtCheckboxPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtChoicePeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtChoicePeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtChoicePeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtChoicePeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtChoicePeer__
+ #define __gnu_java_awt_peer_qt_QtChoicePeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtChoicePeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtChoicePeer_add (JNIEnv *env, jobject, jstring, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtChoicePeer_remove (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtChoicePeer_select (JNIEnv *env, jobject, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtChoicePeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtComponentPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtComponentPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtComponentPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtComponentPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,40 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtComponentPeer__
+ #define __gnu_java_awt_peer_qt_QtComponentPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_callInit (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_QtUpdate (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_QtUpdateArea (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_disposeNative (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_setGround (JNIEnv *env, jobject, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_setBoundsNative (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_setCursor (JNIEnv *env, jobject, jint);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_getNativeBackground (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_setFontNative (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_whichScreen (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_reparentNative (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_getLocationOnScreenNative (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_getSizeNative (JNIEnv *env, jobject, jobject, jboolean);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_handlesWheelScrolling (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_isFocusable (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_isObscured (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_requestFocus (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_setEnabled (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_setVisible (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtComponentPeer_getBounds (JNIEnv *env, jobject);
+ #undef gnu_java_awt_peer_qt_QtComponentPeer_POPUP_TRIGGER
+ #define gnu_java_awt_peer_qt_QtComponentPeer_POPUP_TRIGGER 3L
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtComponentPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtContainerPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtContainerPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtContainerPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtContainerPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,18 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtContainerPeer__
+ #define __gnu_java_awt_peer_qt_QtContainerPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtContainerPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtDialogPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtDialogPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtDialogPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtDialogPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtDialogPeer__
+ #define __gnu_java_awt_peer_qt_QtDialogPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtDialogPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtDialogPeer_setModal (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtDialogPeer_setBoundsNative (JNIEnv *env, jobject, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtDialogPeer_setResizable (JNIEnv *env, jobject, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtDialogPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtEmbeddedWindowPeer__
+ #define __gnu_java_awt_peer_qt_QtEmbeddedWindowPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtEmbeddedWindowPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtEmbeddedWindowPeer_embed (JNIEnv *env, jobject, jlong);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtEmbeddedWindowPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtFileDialogPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtFileDialogPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtFileDialogPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtFileDialogPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtFileDialogPeer__
+ #define __gnu_java_awt_peer_qt_QtFileDialogPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFileDialogPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFileDialogPeer_setMode (JNIEnv *env, jobject, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtFileDialogPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtFontMetrics.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtFontMetrics.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtFontMetrics.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtFontMetrics.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,30 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtFontMetrics__
+ #define __gnu_java_awt_peer_qt_QtFontMetrics__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_init (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_initGraphics (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_dispose (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getStringBounds (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_canDisplay (JNIEnv *env, jobject, jchar);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getAscent (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getDescent (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getHeight (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getLeading (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getMaxAdvance (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_charWidth (JNIEnv *env, jobject, jchar);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_stringWidth (JNIEnv *env, jobject, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtFontMetrics__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtFontPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtFontPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtFontPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtFontPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtFontPeer__
+ #define __gnu_java_awt_peer_qt_QtFontPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFontPeer_create (JNIEnv *env, jobject, jstring, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFontPeer_dispose (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtFontPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtFramePeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtFramePeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtFramePeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtFramePeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,23 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtFramePeer__
+ #define __gnu_java_awt_peer_qt_QtFramePeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFramePeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFramePeer_setIcon (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFramePeer_setMaximizedBounds (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFramePeer_setMenu (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFramePeer_menuBarHeight (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtFramePeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtGraphics.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtGraphics.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtGraphics.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtGraphics.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,40 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtGraphics__
+ #define __gnu_java_awt_peer_qt_QtGraphics__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_delete (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_initImage (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_initVolatileImage (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_cloneNativeContext (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_setColor (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_drawNative (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_fillNative (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_setClipNative (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_setClipRectNative (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_intersectClipNative (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_intersectClipRectNative (JNIEnv *env, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_setQtTransform (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_setNativeStroke (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_setNativeComposite (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_drawStringNative (JNIEnv *env, jobject, jstring, jdouble, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_setLinearGradient (JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint, jdouble, jdouble, jdouble, jdouble, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_setAlphaNative (JNIEnv *env, jobject, jdouble);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_setFontNative (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_getClipNative (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_getClipBounds (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_fill3DRect (JNIEnv *env, jobject, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtGraphics_draw3DRect (JNIEnv *env, jobject, jint, jint, jint, jint, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtGraphics__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,18 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtGraphicsEnvironment__
+ #define __gnu_java_awt_peer_qt_QtGraphicsEnvironment__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtGraphicsEnvironment__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtImage.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtImage.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtImage.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtImage.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,31 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtImage__
+ #define __gnu_java_awt_peer_qt_QtImage__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_clear (JNIEnv *env, jobject);
+ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_qt_QtImage_getPixels (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_setPixels (JNIEnv *env, jobject, jintArray);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtImage_loadImage (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtImage_loadImageFromData (JNIEnv *env, jobject, jbyteArray);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_createImage (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_freeImage (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_createScaledImage (JNIEnv *env, jobject, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_drawPixels (JNIEnv *env, jobject, jobject, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_drawPixelsScaled (JNIEnv *env, jobject, jobject, jint, jint, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_drawPixelsTransformed (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_drawPixelsScaledFlipped (JNIEnv *env, jobject, jobject, jint, jint, jint, jboolean, jboolean, jint, jint, jint, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtImage_copyArea (JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtImage__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtLabelPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtLabelPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtLabelPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtLabelPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtLabelPeer__
+ #define __gnu_java_awt_peer_qt_QtLabelPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtLabelPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtLabelPeer_setAlignment (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtLabelPeer_setText (JNIEnv *env, jobject, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtLabelPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtListPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtListPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtListPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtListPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,25 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtListPeer__
+ #define __gnu_java_awt_peer_qt_QtListPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtListPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtListPeer_select (JNIEnv *env, jobject, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtListPeer_add (JNIEnv *env, jobject, jstring, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtListPeer_delItems (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_qt_QtListPeer_getSelectedIndexes (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtListPeer_makeVisible (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtListPeer_setMultipleMode (JNIEnv *env, jobject, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtListPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuBarPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuBarPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuBarPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuBarPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtMenuBarPeer__
+ #define __gnu_java_awt_peer_qt_QtMenuBarPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuBarPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuBarPeer_addMenu (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuBarPeer_addHelpMenu (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuBarPeer_delMenu (JNIEnv *env, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtMenuBarPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtMenuComponentPeer__
+ #define __gnu_java_awt_peer_qt_QtMenuComponentPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuComponentPeer_callInit (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuComponentPeer_dispose (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtMenuComponentPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuItemPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuItemPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuItemPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuItemPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,23 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtMenuItemPeer__
+ #define __gnu_java_awt_peer_qt_QtMenuItemPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuItemPeer_create (JNIEnv *env, jobject, jstring, jboolean, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuItemPeer_dispose (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuItemPeer_setEnabled (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuItemPeer_setLabel (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuItemPeer_setState (JNIEnv *env, jobject, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtMenuItemPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtMenuPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,26 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtMenuPeer__
+ #define __gnu_java_awt_peer_qt_QtMenuPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_allowTearOff (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_insertSeperator (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_insertItem (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_insertMenu (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_delItem (JNIEnv *env, jobject, jlong);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_setEnabled (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_setLabel (JNIEnv *env, jobject, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtMenuPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtPanelPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtPanelPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtPanelPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtPanelPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtPanelPeer__
+ #define __gnu_java_awt_peer_qt_QtPanelPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtPanelPeer_init (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtPanelPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtPopupMenuPeer__
+ #define __gnu_java_awt_peer_qt_QtPopupMenuPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtPopupMenuPeer_showNative (JNIEnv *env, jobject, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtPopupMenuPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtScreenDevice.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtScreenDevice.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtScreenDevice.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtScreenDevice.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,24 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtScreenDevice__
+ #define __gnu_java_awt_peer_qt_QtScreenDevice__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScreenDevice_init (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScreenDevice_dispose (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtScreenDevice_getBounds (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtScreenDevice_getDpiX (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtScreenDevice_getDpiY (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtScreenDevice_depth (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtScreenDevice__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtScrollPanePeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtScrollPanePeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtScrollPanePeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtScrollPanePeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,24 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtScrollPanePeer__
+ #define __gnu_java_awt_peer_qt_QtScrollPanePeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScrollPanePeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScrollPanePeer_setPolicy (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScrollPanePeer_childResized (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtScrollPanePeer_getHScrollbarHeight (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtScrollPanePeer_getVScrollbarWidth (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScrollPanePeer_setScrollPosition (JNIEnv *env, jobject, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtScrollPanePeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtScrollbarPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtScrollbarPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtScrollbarPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtScrollbarPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,23 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtScrollbarPeer__
+ #define __gnu_java_awt_peer_qt_QtScrollbarPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScrollbarPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScrollbarPeer_setOrientation (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScrollbarPeer_setLineIncrement (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScrollbarPeer_setPageIncrement (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtScrollbarPeer_setValues (JNIEnv *env, jobject, jint, jint, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtScrollbarPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtTextAreaPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtTextAreaPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtTextAreaPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtTextAreaPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,27 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtTextAreaPeer__
+ #define __gnu_java_awt_peer_qt_QtTextAreaPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextAreaPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtTextAreaPeer_getSelection (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtTextAreaPeer_getCaretPosition (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtTextAreaPeer_getIndexAtPoint (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT jstring JNICALL Java_gnu_java_awt_peer_qt_QtTextAreaPeer_getText (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextAreaPeer_setText (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextAreaPeer_select (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextAreaPeer_setEditable (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextAreaPeer_setCaretPosition (JNIEnv *env, jobject, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtTextAreaPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtTextFieldPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtTextFieldPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtTextFieldPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtTextFieldPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,29 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtTextFieldPeer__
+ #define __gnu_java_awt_peer_qt_QtTextFieldPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_getSelection (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_getMinimumSizeNative (JNIEnv *env, jobject, jint);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_getPreferredSizeNative (JNIEnv *env, jobject, jint);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_getCaretPosition (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_getText (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_select (JNIEnv *env, jobject, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_setCaretPosition (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_setEchoChar (JNIEnv *env, jobject, jchar);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_setEditable (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtTextFieldPeer_setText (JNIEnv *env, jobject, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtTextFieldPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtToolkit.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtToolkit.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtToolkit.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtToolkit.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,25 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtToolkit__
+ #define __gnu_java_awt_peer_qt_QtToolkit__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobjectArray JNICALL Java_gnu_java_awt_peer_qt_QtToolkit_nativeFontFamilies (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtToolkit_numScreens (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtToolkit_defaultScreen (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtToolkit_beep (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtToolkit_getScreenSize (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtToolkit_getScreenResolution (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtToolkit_sync (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtToolkit__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtVolatileImage.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtVolatileImage.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtVolatileImage.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtVolatileImage.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,30 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtVolatileImage__
+ #define __gnu_java_awt_peer_qt_QtVolatileImage__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_clear (JNIEnv *env, jobject);
+ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_getPixels (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_createImage (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_freeImage (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_blit__Lgnu_java_awt_peer_qt_QtImage_2 (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_blit__Lgnu_java_awt_peer_qt_QtImage_2IIII (JNIEnv *env, jobject, jobject, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_createScaledImage (JNIEnv *env, jobject, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_drawPixels (JNIEnv *env, jobject, jobject, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_drawPixelsScaled (JNIEnv *env, jobject, jobject, jint, jint, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_drawPixelsTransformed (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_drawPixelsScaledFlipped (JNIEnv *env, jobject, jobject, jint, jint, jint, jboolean, jboolean, jint, jint, jint, jint, jint, jint, jint, jint, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_copyArea (JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtVolatileImage__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtWindowPeer.h gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtWindowPeer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_awt_peer_qt_QtWindowPeer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_awt_peer_qt_QtWindowPeer.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_awt_peer_qt_QtWindowPeer__
+ #define __gnu_java_awt_peer_qt_QtWindowPeer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtWindowPeer_init (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtWindowPeer_toBack (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtWindowPeer_toFront (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtWindowPeer_setTitle (JNIEnv *env, jobject, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_awt_peer_qt_QtWindowPeer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_net_PlainDatagramSocketImpl.h gcc-4.1.0/libjava/classpath/include/gnu_java_net_PlainDatagramSocketImpl.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_net_PlainDatagramSocketImpl.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_net_PlainDatagramSocketImpl.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,29 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_net_PlainDatagramSocketImpl__
+ #define __gnu_java_net_PlainDatagramSocketImpl__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_bind (JNIEnv *env, jobject, jint, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_create (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_sendto (JNIEnv *env, jobject, jobject, jint, jbyteArray, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_receive0 (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_setOption (JNIEnv *env, jobject, jint, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_getOption (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_close (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_join (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_leave (JNIEnv *env, jobject, jobject);
+ #undef gnu_java_net_PlainDatagramSocketImpl_IP_TTL
+ #define gnu_java_net_PlainDatagramSocketImpl_IP_TTL 7777L
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_net_PlainDatagramSocketImpl__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_net_PlainSocketImpl.h gcc-4.1.0/libjava/classpath/include/gnu_java_net_PlainSocketImpl.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_net_PlainSocketImpl.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_net_PlainSocketImpl.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_net_PlainSocketImpl__
+ #define __gnu_java_net_PlainSocketImpl__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_setOption (JNIEnv *env, jobject, jint, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_java_net_PlainSocketImpl_getOption (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_shutdownInput (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_shutdownOutput (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_create (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_connect (JNIEnv *env, jobject, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_bind (JNIEnv *env, jobject, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_listen (JNIEnv *env, jobject, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_accept (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_net_PlainSocketImpl_available (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_close (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_net_PlainSocketImpl_read (JNIEnv *env, jobject, jbyteArray, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_write (JNIEnv *env, jobject, jbyteArray, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_net_PlainSocketImpl__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_nio_VMPipe.h gcc-4.1.0/libjava/classpath/include/gnu_java_nio_VMPipe.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_nio_VMPipe.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_nio_VMPipe.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_nio_VMPipe__
+ #define __gnu_java_nio_VMPipe__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_nio_VMPipe_init (JNIEnv *env, jclass, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_nio_VMPipe__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_nio_VMSelector.h gcc-4.1.0/libjava/classpath/include/gnu_java_nio_VMSelector.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_nio_VMSelector.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_nio_VMSelector.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_nio_VMSelector__
+ #define __gnu_java_nio_VMSelector__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jint JNICALL Java_gnu_java_nio_VMSelector_select (JNIEnv *env, jclass, jintArray, jintArray, jintArray, jlong);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_nio_VMSelector__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_nio_channels_FileChannelImpl.h gcc-4.1.0/libjava/classpath/include/gnu_java_nio_channels_FileChannelImpl.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_nio_channels_FileChannelImpl.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_nio_channels_FileChannelImpl.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_nio_channels_FileChannelImpl__
+ #define __gnu_java_nio_channels_FileChannelImpl__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_init (JNIEnv *env, jclass);
+ JNIEXPORT jint JNICALL Java_gnu_java_nio_channels_FileChannelImpl_open (JNIEnv *env, jobject, jstring, jint);
+ JNIEXPORT jint JNICALL Java_gnu_java_nio_channels_FileChannelImpl_available (JNIEnv *env, jobject);
+ JNIEXPORT jlong JNICALL Java_gnu_java_nio_channels_FileChannelImpl_implPosition (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_seek (JNIEnv *env, jobject, jlong);
+ JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_implTruncate (JNIEnv *env, jobject, jlong);
+ JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_unlock (JNIEnv *env, jobject, jlong, jlong);
+ JNIEXPORT jlong JNICALL Java_gnu_java_nio_channels_FileChannelImpl_size (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_implCloseChannel (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_nio_channels_FileChannelImpl_read__ (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_java_nio_channels_FileChannelImpl_read___3BII (JNIEnv *env, jobject, jbyteArray, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_write___3BII (JNIEnv *env, jobject, jbyteArray, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_write__I (JNIEnv *env, jobject, jint);
+ JNIEXPORT jobject JNICALL Java_gnu_java_nio_channels_FileChannelImpl_mapImpl (JNIEnv *env, jobject, jchar, jlong, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_force (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_java_nio_channels_FileChannelImpl_lock (JNIEnv *env, jobject, jlong, jlong, jboolean, jboolean);
+ #undef gnu_java_nio_channels_FileChannelImpl_READ
+ #define gnu_java_nio_channels_FileChannelImpl_READ 1L
+ #undef gnu_java_nio_channels_FileChannelImpl_WRITE
+ #define gnu_java_nio_channels_FileChannelImpl_WRITE 2L
+ #undef gnu_java_nio_channels_FileChannelImpl_APPEND
+ #define gnu_java_nio_channels_FileChannelImpl_APPEND 4L
+ #undef gnu_java_nio_channels_FileChannelImpl_EXCL
+ #define gnu_java_nio_channels_FileChannelImpl_EXCL 8L
+ #undef gnu_java_nio_channels_FileChannelImpl_SYNC
+ #define gnu_java_nio_channels_FileChannelImpl_SYNC 16L
+ #undef gnu_java_nio_channels_FileChannelImpl_DSYNC
+ #define gnu_java_nio_channels_FileChannelImpl_DSYNC 32L
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_nio_channels_FileChannelImpl__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_nio_charset_iconv_IconvDecoder.h gcc-4.1.0/libjava/classpath/include/gnu_java_nio_charset_iconv_IconvDecoder.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_nio_charset_iconv_IconvDecoder.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_nio_charset_iconv_IconvDecoder.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_nio_charset_iconv_IconvDecoder__
+ #define __gnu_java_nio_charset_iconv_IconvDecoder__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_nio_charset_iconv_IconvDecoder_openIconv (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jint JNICALL Java_gnu_java_nio_charset_iconv_IconvDecoder_decode (JNIEnv *env, jobject, jbyteArray, jcharArray, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_nio_charset_iconv_IconvDecoder_closeIconv (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_nio_charset_iconv_IconvDecoder__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_java_nio_charset_iconv_IconvEncoder.h gcc-4.1.0/libjava/classpath/include/gnu_java_nio_charset_iconv_IconvEncoder.h
*** gcc-4.0.2/libjava/classpath/include/gnu_java_nio_charset_iconv_IconvEncoder.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_java_nio_charset_iconv_IconvEncoder.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_java_nio_charset_iconv_IconvEncoder__
+ #define __gnu_java_nio_charset_iconv_IconvEncoder__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_nio_charset_iconv_IconvEncoder_openIconv (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jint JNICALL Java_gnu_java_nio_charset_iconv_IconvEncoder_encode (JNIEnv *env, jobject, jcharArray, jbyteArray, jint, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_java_nio_charset_iconv_IconvEncoder_closeIconv (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_java_nio_charset_iconv_IconvEncoder__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h
*** gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider__
+ #define __gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobjectArray JNICALL Java_gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider_getInputDeviceInfo_1 (JNIEnv *env, jclass);
+ JNIEXPORT jobjectArray JNICALL Java_gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider_getOutputDeviceInfo_1 (JNIEnv *env, jclass);
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider_init_1 (JNIEnv *env, jclass);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.h gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.h
*** gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.h	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice__
+ #define __gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jlong JNICALL Java_gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice_open_1 (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice_close_1 (JNIEnv *env, jobject, jlong);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h
*** gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_javax_sound_midi_alsa_AlsaPortDevice__
+ #define __gnu_javax_sound_midi_alsa_AlsaPortDevice__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_alsa_AlsaPortDevice_run_1receiver_1thread_1 (JNIEnv *env, jobject, jlong, jlong, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_javax_sound_midi_alsa_AlsaPortDevice__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h
*** gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,25 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider__
+ #define __gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jlong JNICALL Java_gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider_dlopen_1 (JNIEnv *env, jclass, jstring);
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider_dlclose_1 (JNIEnv *env, jclass, jlong);
+ JNIEXPORT jlong JNICALL Java_gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider_getDSSIHandle_1 (JNIEnv *env, jclass, jlong, jlong);
+ JNIEXPORT jstring JNICALL Java_gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider_getDSSIName_1 (JNIEnv *env, jclass, jlong);
+ JNIEXPORT jstring JNICALL Java_gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider_getDSSICopyright_1 (JNIEnv *env, jclass, jlong);
+ JNIEXPORT jstring JNICALL Java_gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider_getDSSIVendor_1 (JNIEnv *env, jclass, jlong);
+ JNIEXPORT jstring JNICALL Java_gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider_getDSSILabel_1 (JNIEnv *env, jclass, jlong);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,29 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_javax_sound_midi_dssi_DSSISynthesizer__
+ #define __gnu_javax_sound_midi_dssi_DSSISynthesizer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_noteOn_1 (JNIEnv *env, jclass, jlong, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_noteOff_1 (JNIEnv *env, jclass, jlong, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_setPolyPressure_1 (JNIEnv *env, jclass, jlong, jint, jint, jint);
+ JNIEXPORT jint JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_getPolyPressure_1 (JNIEnv *env, jclass, jlong, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_controlChange_1 (JNIEnv *env, jclass, jlong, jint, jint, jint);
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_open_1 (JNIEnv *env, jclass, jlong);
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_close_1 (JNIEnv *env, jclass, jlong);
+ JNIEXPORT jstring JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_getProgramName_1 (JNIEnv *env, jclass, jlong, jint);
+ JNIEXPORT jint JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_getProgramBank_1 (JNIEnv *env, jclass, jlong, jint);
+ JNIEXPORT jint JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_getProgramProgram_1 (JNIEnv *env, jclass, jlong, jint);
+ JNIEXPORT void JNICALL Java_gnu_javax_sound_midi_dssi_DSSISynthesizer_selectProgram_1 (JNIEnv *env, jclass, jlong, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_javax_sound_midi_dssi_DSSISynthesizer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeAttr.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeAttr.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeAttr.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeAttr.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeAttr__
+ #define __gnu_xml_libxmlj_dom_GnomeAttr__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeAttr_getSpecified (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeAttr_getValue (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeAttr_setValue (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeAttr_xmljIsId (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeAttr__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocument.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocument.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocument.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocument.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,45 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeDocument__
+ #define __gnu_xml_libxmlj_dom_GnomeDocument__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_free (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_getDoctype (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_getDocumentElement (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_createDocumentType (JNIEnv *env, jobject, jstring, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_createDocumentFragment (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_createTextNode (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_createComment (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_createCDATASection (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_createProcessingInstruction (JNIEnv *env, jobject, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_createEntityReference (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_getElementsByTagName (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_xmljImportNode (JNIEnv *env, jobject, jobject, jboolean);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_createElementNS (JNIEnv *env, jobject, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_createAttributeNS (JNIEnv *env, jobject, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_getElementsByTagNameNS (JNIEnv *env, jobject, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_xmljGetElementById (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_getInputEncoding (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_getXmlEncoding (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_getXmlStandalone (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_setXmlStandalone (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_getXmlVersion (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_setXmlVersion (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_getDocumentURI (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_setDocumentURI (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_xmljAdoptNode (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_renameNode (JNIEnv *env, jobject, jobject, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocument_evaluate (JNIEnv *env, jobject, jstring, jobject, jobject, jshort, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeDocument__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocumentBuilder.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocumentBuilder.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocumentBuilder.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocumentBuilder.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeDocumentBuilder__
+ #define __gnu_xml_libxmlj_dom_GnomeDocumentBuilder__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocumentBuilder_parseStream (JNIEnv *env, jobject, jobject, jbyteArray, jstring, jstring, jstring, jboolean, jboolean, jboolean, jboolean, jboolean);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocumentBuilder_createDocument (JNIEnv *env, jobject, jstring, jstring, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeDocumentBuilder__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocumentType.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocumentType.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocumentType.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeDocumentType.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeDocumentType__
+ #define __gnu_xml_libxmlj_dom_GnomeDocumentType__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocumentType_getPublicId (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocumentType_getSystemId (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeDocumentType_getInternalSubset (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeDocumentType__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeElement.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeElement.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeElement.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeElement.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,31 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeElement__
+ #define __gnu_xml_libxmlj_dom_GnomeElement__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_getAttribute (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_setAttribute (JNIEnv *env, jobject, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_getAttributeNode (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_setAttributeNode (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_removeAttributeNode (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_getElementsByTagName (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_getAttributeNS (JNIEnv *env, jobject, jstring, jstring);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_setAttributeNS (JNIEnv *env, jobject, jstring, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_getAttributeNodeNS (JNIEnv *env, jobject, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_setAttributeNodeNS (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_getElementsByTagNameNS (JNIEnv *env, jobject, jstring, jstring);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_hasAttribute (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeElement_hasAttributeNS (JNIEnv *env, jobject, jstring, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeElement__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeEntity.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeEntity.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeEntity.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeEntity.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeEntity__
+ #define __gnu_xml_libxmlj_dom_GnomeEntity__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeEntity_getPublicId (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeEntity_getSystemId (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeEntity_getNotationName (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeEntity__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNamedNodeMap.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNamedNodeMap.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNamedNodeMap.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNamedNodeMap.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,26 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeNamedNodeMap__
+ #define __gnu_xml_libxmlj_dom_GnomeNamedNodeMap__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_getNamedItem (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_setNamedItem (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_removeNamedItem (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_item (JNIEnv *env, jobject, jint);
+ JNIEXPORT jint JNICALL Java_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_getLength (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_getNamedItemNS (JNIEnv *env, jobject, jstring, jstring);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_setNamedItemNS (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_removeNamedItemNS (JNIEnv *env, jobject, jstring, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeNamedNodeMap__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNode.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNode.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNode.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNode.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeNode__
+ #define __gnu_xml_libxmlj_dom_GnomeNode__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNodeName (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNodeValue (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_setNodeValue (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jshort JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNodeType (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getParentNode (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getFirstChild (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getLastChild (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getPreviousSibling (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNextSibling (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getOwnerDocument (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljInsertBefore (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljReplaceChild (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljRemoveChild (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljAppendChild (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_hasChildNodes (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljCloneNode (JNIEnv *env, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_normalize (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNamespaceURI (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getPrefix (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_setPrefix (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getLocalName (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_hasAttributes (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getBaseURI (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljCompareTo (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_lookupPrefix (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_isDefaultNamespace (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_lookupNamespaceURI (JNIEnv *env, jobject, jstring);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_isEqualNode (JNIEnv *env, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeNode__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNodeList.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNodeList.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNodeList.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNodeList.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeNodeList__
+ #define __gnu_xml_libxmlj_dom_GnomeNodeList__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNodeList_item (JNIEnv *env, jobject, jint);
+ JNIEXPORT jint JNICALL Java_gnu_xml_libxmlj_dom_GnomeNodeList_getLength (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeNodeList__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNotation.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNotation.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNotation.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeNotation.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeNotation__
+ #define __gnu_xml_libxmlj_dom_GnomeNotation__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNotation_getPublicId (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNotation_getSystemId (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeNotation__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeProcessingInstruction.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeProcessingInstruction.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeProcessingInstruction.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeProcessingInstruction.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,20 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeProcessingInstruction__
+ #define __gnu_xml_libxmlj_dom_GnomeProcessingInstruction__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeProcessingInstruction_getData (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeProcessingInstruction_setData (JNIEnv *env, jobject, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeProcessingInstruction__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeTypeInfo.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeTypeInfo.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeTypeInfo.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeTypeInfo.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeTypeInfo__
+ #define __gnu_xml_libxmlj_dom_GnomeTypeInfo__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeTypeInfo_getTypeName (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeTypeInfo_getTypeNamespace (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeTypeInfo_isDerivedFrom (JNIEnv *env, jobject, jstring, jstring, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeTypeInfo__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathExpression.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathExpression.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathExpression.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathExpression.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeXPathExpression__
+ #define __gnu_xml_libxmlj_dom_GnomeXPathExpression__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathExpression_init (JNIEnv *env, jobject, jstring);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathExpression_free (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathExpression_doEvaluate (JNIEnv *env, jobject, jobject, jobject, jshort, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeXPathExpression__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathNSResolver.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathNSResolver.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathNSResolver.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathNSResolver.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,18 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeXPathNSResolver__
+ #define __gnu_xml_libxmlj_dom_GnomeXPathNSResolver__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeXPathNSResolver__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathNodeList.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathNodeList.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathNodeList.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathNodeList.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeXPathNodeList__
+ #define __gnu_xml_libxmlj_dom_GnomeXPathNodeList__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathNodeList_free (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathNodeList_getLength (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathNodeList_item (JNIEnv *env, jobject, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeXPathNodeList__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathResult.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathResult.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathResult.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_dom_GnomeXPathResult.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,28 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_dom_GnomeXPathResult__
+ #define __gnu_xml_libxmlj_dom_GnomeXPathResult__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_free (JNIEnv *env, jobject, jobject);
+ JNIEXPORT jshort JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_getResultType (JNIEnv *env, jobject);
+ JNIEXPORT jdouble JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_getNumberValue (JNIEnv *env, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_getStringValue (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_getBooleanValue (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_getSingleNodeValue (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_getInvalidIteratorState (JNIEnv *env, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_getSnapshotLength (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_iterateNext (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeXPathResult_snapshotItem (JNIEnv *env, jobject, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_dom_GnomeXPathResult__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_sax_GnomeLocator.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_sax_GnomeLocator.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_sax_GnomeLocator.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_sax_GnomeLocator.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_sax_GnomeLocator__
+ #define __gnu_xml_libxmlj_sax_GnomeLocator__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_sax_GnomeLocator_publicId (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_sax_GnomeLocator_systemId (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_xml_libxmlj_sax_GnomeLocator_lineNumber (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT jint JNICALL Java_gnu_xml_libxmlj_sax_GnomeLocator_columnNumber (JNIEnv *env, jobject, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_sax_GnomeLocator__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_sax_GnomeXMLReader.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_sax_GnomeXMLReader.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_sax_GnomeXMLReader.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_sax_GnomeXMLReader.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_sax_GnomeXMLReader__
+ #define __gnu_xml_libxmlj_sax_GnomeXMLReader__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_sax_GnomeXMLReader_parseStream (JNIEnv *env, jobject, jobject, jbyteArray, jstring, jstring, jstring, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_sax_GnomeXMLReader__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_transform_GnomeTransformer.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_transform_GnomeTransformer.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_transform_GnomeTransformer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_transform_GnomeTransformer.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,28 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_transform_GnomeTransformer__
+ #define __gnu_xml_libxmlj_transform_GnomeTransformer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_newStylesheet (JNIEnv *env, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_newStylesheetFromStream (JNIEnv *env, jobject, jobject, jbyteArray, jstring, jstring, jstring, jboolean, jboolean);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_newStylesheetFromDoc (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_transformStreamToStream (JNIEnv *env, jobject, jobject, jbyteArray, jstring, jstring, jstring, jboolean, jboolean, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_transformStreamToDoc (JNIEnv *env, jobject, jobject, jbyteArray, jstring, jstring, jstring, jboolean, jboolean);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_transformStreamToSAX (JNIEnv *env, jobject, jobject, jbyteArray, jstring, jstring, jstring, jboolean, jboolean, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_transformDocToStream (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_transformDocToDoc (JNIEnv *env, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_transformDocToSAX (JNIEnv *env, jobject, jobject, jobject);
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformer_free (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_transform_GnomeTransformer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_transform_GnomeTransformerFactory.h gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_transform_GnomeTransformerFactory.h
*** gcc-4.0.2/libjava/classpath/include/gnu_xml_libxmlj_transform_GnomeTransformerFactory.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/gnu_xml_libxmlj_transform_GnomeTransformerFactory.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __gnu_xml_libxmlj_transform_GnomeTransformerFactory__
+ #define __gnu_xml_libxmlj_transform_GnomeTransformerFactory__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_transform_GnomeTransformerFactory_freeLibxsltGlobal (JNIEnv *env, jclass);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __gnu_xml_libxmlj_transform_GnomeTransformerFactory__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_io_VMFile.h gcc-4.1.0/libjava/classpath/include/java_io_VMFile.h
*** gcc-4.0.2/libjava/classpath/include/java_io_VMFile.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_io_VMFile.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,36 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_io_VMFile__
+ #define __java_io_VMFile__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jlong JNICALL Java_java_io_VMFile_lastModified (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_setReadOnly (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_create (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jobjectArray JNICALL Java_java_io_VMFile_list (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_renameTo (JNIEnv *env, jclass, jstring, jstring);
+ JNIEXPORT jlong JNICALL Java_java_io_VMFile_length (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_exists (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_delete (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_setLastModified (JNIEnv *env, jclass, jstring, jlong);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_mkdir (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_isFile (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_canWrite (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_canRead (JNIEnv *env, jclass, jstring);
+ JNIEXPORT jboolean JNICALL Java_java_io_VMFile_isDirectory (JNIEnv *env, jclass, jstring);
+ #undef java_io_VMFile_IS_CASE_SENSITIVE
+ #define java_io_VMFile_IS_CASE_SENSITIVE 1L
+ #undef java_io_VMFile_IS_DOS_8_3
+ #define java_io_VMFile_IS_DOS_8_3 0L
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_io_VMFile__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_io_VMObjectInputStream.h gcc-4.1.0/libjava/classpath/include/java_io_VMObjectInputStream.h
*** gcc-4.0.2/libjava/classpath/include/java_io_VMObjectInputStream.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_io_VMObjectInputStream.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_io_VMObjectInputStream__
+ #define __java_io_VMObjectInputStream__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_java_io_VMObjectInputStream_allocateObject (JNIEnv *env, jclass, jclass, jclass, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_io_VMObjectInputStream__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_io_VMObjectStreamClass.h gcc-4.1.0/libjava/classpath/include/java_io_VMObjectStreamClass.h
*** gcc-4.0.2/libjava/classpath/include/java_io_VMObjectStreamClass.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_io_VMObjectStreamClass.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,28 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_io_VMObjectStreamClass__
+ #define __java_io_VMObjectStreamClass__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jboolean JNICALL Java_java_io_VMObjectStreamClass_hasClassInitializer (JNIEnv *env, jclass, jclass);
+ JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setDoubleNative (JNIEnv *env, jclass, jobject, jobject, jdouble);
+ JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setFloatNative (JNIEnv *env, jclass, jobject, jobject, jfloat);
+ JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setLongNative (JNIEnv *env, jclass, jobject, jobject, jlong);
+ JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setIntNative (JNIEnv *env, jclass, jobject, jobject, jint);
+ JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setShortNative (JNIEnv *env, jclass, jobject, jobject, jshort);
+ JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setCharNative (JNIEnv *env, jclass, jobject, jobject, jchar);
+ JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setByteNative (JNIEnv *env, jclass, jobject, jobject, jbyte);
+ JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setBooleanNative (JNIEnv *env, jclass, jobject, jobject, jboolean);
+ JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setObjectNative (JNIEnv *env, jclass, jobject, jobject, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_io_VMObjectStreamClass__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_lang_Math.h gcc-4.1.0/libjava/classpath/include/java_lang_Math.h
*** gcc-4.0.2/libjava/classpath/include/java_lang_Math.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_lang_Math.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,37 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_lang_Math__
+ #define __java_lang_Math__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_sin (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_cos (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_tan (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_asin (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_acos (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_atan (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_atan2 (JNIEnv *env, jclass, jdouble, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_exp (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_log (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_sqrt (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_pow (JNIEnv *env, jclass, jdouble, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_IEEEremainder (JNIEnv *env, jclass, jdouble, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_ceil (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_floor (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_Math_rint (JNIEnv *env, jclass, jdouble);
+ #undef java_lang_Math_E
+ #define java_lang_Math_E 0x1.5bf0a8b145769p+1
+ #undef java_lang_Math_PI
+ #define java_lang_Math_PI 0x1.921fb54442d18p+1
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_lang_Math__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_lang_VMDouble.h gcc-4.1.0/libjava/classpath/include/java_lang_VMDouble.h
*** gcc-4.0.2/libjava/classpath/include/java_lang_VMDouble.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_lang_VMDouble.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,24 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_lang_VMDouble__
+ #define __java_lang_VMDouble__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jlong JNICALL Java_java_lang_VMDouble_doubleToLongBits (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jlong JNICALL Java_java_lang_VMDouble_doubleToRawLongBits (JNIEnv *env, jclass, jdouble);
+ JNIEXPORT jdouble JNICALL Java_java_lang_VMDouble_longBitsToDouble (JNIEnv *env, jclass, jlong);
+ JNIEXPORT jstring JNICALL Java_java_lang_VMDouble_toString (JNIEnv *env, jclass, jdouble, jboolean);
+ JNIEXPORT void JNICALL Java_java_lang_VMDouble_initIDs (JNIEnv *env, jclass);
+ JNIEXPORT jdouble JNICALL Java_java_lang_VMDouble_parseDouble (JNIEnv *env, jclass, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_lang_VMDouble__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_lang_VMFloat.h gcc-4.1.0/libjava/classpath/include/java_lang_VMFloat.h
*** gcc-4.0.2/libjava/classpath/include/java_lang_VMFloat.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_lang_VMFloat.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,21 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_lang_VMFloat__
+ #define __java_lang_VMFloat__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jint JNICALL Java_java_lang_VMFloat_floatToIntBits (JNIEnv *env, jclass, jfloat);
+ JNIEXPORT jint JNICALL Java_java_lang_VMFloat_floatToRawIntBits (JNIEnv *env, jclass, jfloat);
+ JNIEXPORT jfloat JNICALL Java_java_lang_VMFloat_intBitsToFloat (JNIEnv *env, jclass, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_lang_VMFloat__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_lang_VMProcess.h gcc-4.1.0/libjava/classpath/include/java_lang_VMProcess.h
*** gcc-4.0.2/libjava/classpath/include/java_lang_VMProcess.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_lang_VMProcess.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,27 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_lang_VMProcess__
+ #define __java_lang_VMProcess__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_java_lang_VMProcess_nativeSpawn (JNIEnv *env, jobject, jobjectArray, jobjectArray, jobject);
+ JNIEXPORT jboolean JNICALL Java_java_lang_VMProcess_nativeReap (JNIEnv *env, jclass);
+ JNIEXPORT void JNICALL Java_java_lang_VMProcess_nativeKill (JNIEnv *env, jclass, jlong);
+ #undef java_lang_VMProcess_INITIAL
+ #define java_lang_VMProcess_INITIAL 0L
+ #undef java_lang_VMProcess_RUNNING
+ #define java_lang_VMProcess_RUNNING 1L
+ #undef java_lang_VMProcess_TERMINATED
+ #define java_lang_VMProcess_TERMINATED 2L
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_lang_VMProcess__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_lang_VMSystem.h gcc-4.1.0/libjava/classpath/include/java_lang_VMSystem.h
*** gcc-4.0.2/libjava/classpath/include/java_lang_VMSystem.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_lang_VMSystem.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,25 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_lang_VMSystem__
+ #define __java_lang_VMSystem__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_java_lang_VMSystem_arraycopy (JNIEnv *env, jclass, jobject, jint, jobject, jint, jint);
+ JNIEXPORT jint JNICALL Java_java_lang_VMSystem_identityHashCode (JNIEnv *env, jclass, jobject);
+ JNIEXPORT void JNICALL Java_java_lang_VMSystem_setIn (JNIEnv *env, jclass, jobject);
+ JNIEXPORT void JNICALL Java_java_lang_VMSystem_setOut (JNIEnv *env, jclass, jobject);
+ JNIEXPORT void JNICALL Java_java_lang_VMSystem_setErr (JNIEnv *env, jclass, jobject);
+ JNIEXPORT jlong JNICALL Java_java_lang_VMSystem_currentTimeMillis (JNIEnv *env, jclass);
+ JNIEXPORT jstring JNICALL Java_java_lang_VMSystem_getenv (JNIEnv *env, jclass, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_lang_VMSystem__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_lang_reflect_Array.h gcc-4.1.0/libjava/classpath/include/java_lang_reflect_Array.h
*** gcc-4.0.2/libjava/classpath/include/java_lang_reflect_Array.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_lang_reflect_Array.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_lang_reflect_Array__
+ #define __java_lang_reflect_Array__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_java_lang_reflect_Array_createObjectArray (JNIEnv *env, jclass, jclass, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_lang_reflect_Array__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_net_VMInetAddress.h gcc-4.1.0/libjava/classpath/include/java_net_VMInetAddress.h
*** gcc-4.0.2/libjava/classpath/include/java_net_VMInetAddress.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_net_VMInetAddress.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_net_VMInetAddress__
+ #define __java_net_VMInetAddress__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_java_net_VMInetAddress_getLocalHostname (JNIEnv *env, jclass);
+ JNIEXPORT jbyteArray JNICALL Java_java_net_VMInetAddress_lookupInaddrAny (JNIEnv *env, jclass);
+ JNIEXPORT jstring JNICALL Java_java_net_VMInetAddress_getHostByAddr (JNIEnv *env, jclass, jbyteArray);
+ JNIEXPORT jobjectArray JNICALL Java_java_net_VMInetAddress_getHostByName (JNIEnv *env, jclass, jstring);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_net_VMInetAddress__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_net_VMNetworkInterface.h gcc-4.1.0/libjava/classpath/include/java_net_VMNetworkInterface.h
*** gcc-4.0.2/libjava/classpath/include/java_net_VMNetworkInterface.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_net_VMNetworkInterface.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_net_VMNetworkInterface__
+ #define __java_net_VMNetworkInterface__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_java_net_VMNetworkInterface_getInterfaces (JNIEnv *env, jclass);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_net_VMNetworkInterface__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_nio_MappedByteBufferImpl.h gcc-4.1.0/libjava/classpath/include/java_nio_MappedByteBufferImpl.h
*** gcc-4.0.2/libjava/classpath/include/java_nio_MappedByteBufferImpl.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_nio_MappedByteBufferImpl.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_nio_MappedByteBufferImpl__
+ #define __java_nio_MappedByteBufferImpl__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT void JNICALL Java_java_nio_MappedByteBufferImpl_unmapImpl (JNIEnv *env, jobject);
+ JNIEXPORT jboolean JNICALL Java_java_nio_MappedByteBufferImpl_isLoadedImpl (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_java_nio_MappedByteBufferImpl_loadImpl (JNIEnv *env, jobject);
+ JNIEXPORT void JNICALL Java_java_nio_MappedByteBufferImpl_forceImpl (JNIEnv *env, jobject);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_nio_MappedByteBufferImpl__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_nio_VMDirectByteBuffer.h gcc-4.1.0/libjava/classpath/include/java_nio_VMDirectByteBuffer.h
*** gcc-4.0.2/libjava/classpath/include/java_nio_VMDirectByteBuffer.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_nio_VMDirectByteBuffer.h	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,26 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_nio_VMDirectByteBuffer__
+ #define __java_nio_VMDirectByteBuffer__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jobject JNICALL Java_java_nio_VMDirectByteBuffer_allocate (JNIEnv *env, jclass, jint);
+ JNIEXPORT void JNICALL Java_java_nio_VMDirectByteBuffer_free (JNIEnv *env, jclass, jobject);
+ JNIEXPORT jbyte JNICALL Java_java_nio_VMDirectByteBuffer_get__Lgnu_classpath_Pointer_2I (JNIEnv *env, jclass, jobject, jint);
+ JNIEXPORT void JNICALL Java_java_nio_VMDirectByteBuffer_get__Lgnu_classpath_Pointer_2I_3BII (JNIEnv *env, jclass, jobject, jint, jbyteArray, jint, jint);
+ JNIEXPORT void JNICALL Java_java_nio_VMDirectByteBuffer_put__Lgnu_classpath_Pointer_2IB (JNIEnv *env, jclass, jobject, jint, jbyte);
+ JNIEXPORT void JNICALL Java_java_nio_VMDirectByteBuffer_put__Lgnu_classpath_Pointer_2I_3BII (JNIEnv *env, jclass, jobject, jint, jbyteArray, jint, jint);
+ JNIEXPORT jobject JNICALL Java_java_nio_VMDirectByteBuffer_adjustAddress (JNIEnv *env, jclass, jobject, jint);
+ JNIEXPORT void JNICALL Java_java_nio_VMDirectByteBuffer_shiftDown (JNIEnv *env, jclass, jobject, jint, jint, jint);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_nio_VMDirectByteBuffer__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/java_util_VMTimeZone.h gcc-4.1.0/libjava/classpath/include/java_util_VMTimeZone.h
*** gcc-4.0.2/libjava/classpath/include/java_util_VMTimeZone.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/java_util_VMTimeZone.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,19 ----
+ /* DO NOT EDIT THIS FILE - it is machine generated */
+ 
+ #ifndef __java_util_VMTimeZone__
+ #define __java_util_VMTimeZone__
+ 
+ #include <jni.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ JNIEXPORT jstring JNICALL Java_java_util_VMTimeZone_getSystemTimeZoneId (JNIEnv *env, jclass);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __java_util_VMTimeZone__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/jawt.h gcc-4.1.0/libjava/classpath/include/jawt.h
*** gcc-4.0.2/libjava/classpath/include/jawt.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/jawt.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,108 ----
+ /* jawt.h -- the machine-independent parts of the AWT Native Interface
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+    This file is part of GNU Classpath.
+ 
+    GNU Classpath is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+  
+    GNU Classpath 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
+    General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GNU Classpath; see the file COPYING.  If not, write to the
+    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+    02110-1301 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
+ 
+ 
+ /*
+  * The AWT Native Interface allows direct access to native screen
+  * resources from within a Canvas's paint method.
+  */
+ 
+ #ifndef __jawt_h__
+ #define __jawt_h__
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ #define JAWT_VERSION_1_3 0x10003
+ #define JAWT_VERSION_1_4 0x10004
+ 
+ #define JAWT_LOCK_ERROR 0x1
+ #define JAWT_LOCK_CLIP_CHANGED 0x2
+ #define JAWT_LOCK_BOUNDS_CHANGED 0x4
+ #define JAWT_LOCK_SURFACE_CHANGED 0x8
+ 
+ struct _JAWT_Rectangle
+ {
+   jint x;
+   jint y;
+   jint width;
+   jint height;
+ };
+ 
+ struct _JAWT_DrawingSurfaceInfo
+ {
+   void* platformInfo;
+   struct _JAWT_DrawingSurface *ds;
+   struct _JAWT_Rectangle bounds;
+   jint clipSize;
+   struct _JAWT_Rectangle *clip;
+ };
+ 
+ struct _JAWT_DrawingSurface
+ {
+   JNIEnv* env;
+   jobject target;
+   jint (JNICALL* Lock) (struct _JAWT_DrawingSurface*);
+   struct _JAWT_DrawingSurfaceInfo* (JNICALL* GetDrawingSurfaceInfo) (struct _JAWT_DrawingSurface*);
+   void (JNICALL* FreeDrawingSurfaceInfo) (struct _JAWT_DrawingSurfaceInfo*);
+   void (JNICALL* Unlock) (struct _JAWT_DrawingSurface*);
+ };
+ 
+ struct _JAWT
+ {
+   jint version;
+   struct _JAWT_DrawingSurface* (JNICALL* GetDrawingSurface) (JNIEnv*, jobject);
+   void (JNICALL* FreeDrawingSurface) (struct _JAWT_DrawingSurface*);
+   void (JNICALL *Lock) (JNIEnv*);
+   void (JNICALL *Unlock) (JNIEnv*);
+   jobject (JNICALL *GetComponent)(JNIEnv*, void*);
+ };
+ 
+ typedef struct _JAWT_Rectangle JAWT_Rectangle;
+ typedef struct _JAWT_DrawingSurfaceInfo JAWT_DrawingSurfaceInfo;
+ typedef struct _JAWT_DrawingSurface JAWT_DrawingSurface;
+ typedef struct _JAWT JAWT;
+ 
+ JNIEXPORT jboolean JNICALL JAWT_GetAWT (JNIEnv* env, struct _JAWT* awt);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __jawt_h__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/jawt_md.h gcc-4.1.0/libjava/classpath/include/jawt_md.h
*** gcc-4.0.2/libjava/classpath/include/jawt_md.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/jawt_md.h	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,67 ----
+ /* jawt_md.h -- the X11-dependent parts of the AWT Native Interface
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+    This file is part of GNU Classpath.
+ 
+    GNU Classpath is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+  
+    GNU Classpath 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
+    General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GNU Classpath; see the file COPYING.  If not, write to the
+    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+    02110-1301 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
+ 
+ 
+ #ifndef __jawt_md_h__
+ #define __jawt_md_h__
+ 
+ #include <jni.h>
+ #include <jawt.h>
+ #include <X11/Xlib.h>
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ struct _JAWT_X11DrawingSurfaceInfo
+ {
+   Drawable drawable;
+   Display* display;
+   VisualID visualID;
+   Colormap colormapID;
+   int depth;
+   int (JNICALL *GetAWTColor)(struct _JAWT_DrawingSurface*, int, int, int);
+ };
+ 
+ typedef struct _JAWT_X11DrawingSurfaceInfo JAWT_X11DrawingSurfaceInfo;
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __jawt_md_h__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/jni.h gcc-4.1.0/libjava/classpath/include/jni.h
*** gcc-4.0.2/libjava/classpath/include/jni.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/jni.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1599 ----
+ /* jni.h
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ /* Note: this file must be compilable by the C compiler (for now,
+    assuming GNU C is ok).  This means you must never use `//'
+    comments, and all C++-specific code must be conditional on
+    __cplusplus.  */
+ 
+ #ifndef _CLASSPATH_JNI_H
+ #define _CLASSPATH_JNI_H
+ 
+ /* We include <stdio.h> for compatibility with Sun's <jni.h>.  */
+ #include <stdio.h>
+ 
+ #include <stdarg.h>
+ 
+ #include "jni_md.h"
+ 
+ /* The VM might define jobject and friends.  */
+ #ifndef _CLASSPATH_VM_JNI_TYPES_DEFINED
+ 
+ # ifdef __cplusplus
+ 
+ /* Define dummy classes and then define the JNI types as pointers.  */
+ struct __jobject {};
+ struct __jclass : __jobject {};
+ struct __jstring : __jobject {};
+ struct __jthrowable : __jobject {};
+ struct __jweak : __jobject {};
+ struct __jarray : __jobject {};
+ struct __jobjectArray : __jarray {};
+ struct __jbyteArray : __jarray {};
+ struct __jshortArray : __jarray {};
+ struct __jintArray : __jarray {};
+ struct __jlongArray : __jarray {};
+ struct __jbooleanArray : __jarray {};
+ struct __jcharArray : __jarray {};
+ struct __jfloatArray : __jarray {};
+ struct __jdoubleArray : __jarray {};
+ 
+ typedef __jobject *jobject;
+ typedef __jclass *jclass;
+ typedef __jstring *jstring;
+ typedef __jthrowable *jthrowable;
+ typedef __jweak *jweak;
+ typedef __jarray *jarray;
+ typedef __jobjectArray *jobjectArray;
+ typedef __jbyteArray *jbyteArray;
+ typedef __jshortArray *jshortArray;
+ typedef __jintArray *jintArray;
+ typedef __jlongArray *jlongArray;
+ typedef __jbooleanArray *jbooleanArray;
+ typedef __jcharArray *jcharArray;
+ typedef __jfloatArray *jfloatArray;
+ typedef __jdoubleArray *jdoubleArray;
+ 
+ #define JNI_TRUE true
+ #define JNI_FALSE false
+ 
+ typedef struct _Jv_JNIEnv JNIEnv;
+ typedef struct _Jv_JavaVM JavaVM;
+ 
+ # else /* __cplusplus */
+ 
+ /* For C, simply define the class types as generic pointers.  */
+ typedef void *jobject;
+ typedef jobject jclass;
+ typedef jobject jstring;
+ typedef jobject jthrowable;
+ typedef jobject jweak;
+ typedef jobject jarray;
+ typedef jobject jobjectArray;
+ typedef jobject jbyteArray;
+ typedef jobject jshortArray;
+ typedef jobject jintArray;
+ typedef jobject jlongArray;
+ typedef jobject jbooleanArray;
+ typedef jobject jcharArray;
+ typedef jobject jfloatArray;
+ typedef jobject jdoubleArray;
+ 
+ #define JNI_TRUE  1
+ #define JNI_FALSE 0
+ 
+ typedef const struct JNINativeInterface *JNIEnv;
+ typedef const struct JNIInvokeInterface *JavaVM;
+ 
+ # endif /* __cplusplus */
+ 
+ #endif /* _CLASSPATH_VM_JNI_TYPES_DEFINED */
+ 
+ /* 
+  * Before jni.h is #included within a typical JVM, the source code should 
+  * #define _JNI_VM_INTERNAL_TYPES_DEFINED and provide the real declarations
+  * for 'jobject', 'jfieldID', 'jmethodID' and other implementation types.
+  * If _JNI_VM_INTERNAL_TYPES_DEFINED is not defined, the following 
+  * declares the old versions of the types.
+  */
+ #ifndef _CLASSPATH_VM_INTERNAL_TYPES_DEFINED
+ struct _jfieldID;
+ struct _jmethodID;
+ typedef struct _jfieldID *jfieldID;
+ typedef struct _jmethodID *jmethodID;
+ #endif 
+ 
+ /* Version numbers.  */
+ #define JNI_VERSION_1_1 0x00010001
+ #define JNI_VERSION_1_2 0x00010002
+ #define JNI_VERSION_1_4 0x00010004
+ 
+ /* Used when releasing array elements.  */
+ #define JNI_COMMIT 1
+ #define JNI_ABORT  2
+ 
+ /* Error codes */
+ #define JNI_OK            0
+ #define JNI_ERR          (-1)
+ #define JNI_EDETACHED    (-2)
+ #define JNI_EVERSION     (-3)
+ 
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif /* __cplusplus */
+ 
+ /* These functions might be defined in libraries which we load; the
+    JNI implementation calls them at the appropriate times.  */
+ extern JNIEXPORT jint JNICALL JNI_OnLoad (JavaVM *, void *);
+ extern JNIEXPORT void JNICALL JNI_OnUnload (JavaVM *, void *);
+ 
+ /* This can be defined as JNIIMPORT or JNIEXPORT by the md file,
+    depending on whether this is the implementation or a user.  */
+ #ifndef _CLASSPATH_JNIIMPEXP
+ #define _CLASSPATH_JNIIMPEXP JNIIMPORT
+ #endif
+ 
+ /* These functions are called by user code to start using the
+    invocation API.  */
+ extern _CLASSPATH_JNIIMPEXP jint JNICALL
+ JNI_GetDefaultJavaVMInitArgs (void *);
+ 
+ extern _CLASSPATH_JNIIMPEXP jint JNICALL
+ JNI_CreateJavaVM (JavaVM **, void **, void *);
+ 
+ extern _CLASSPATH_JNIIMPEXP jint JNICALL
+ JNI_GetCreatedJavaVMs (JavaVM **, jsize, jsize *);
+ 
+ #ifdef __cplusplus
+ }
+ #endif /* __cplusplus */
+ 
+ typedef union jvalue
+ {
+   jboolean z;
+   jbyte    b;
+   jchar    c;
+   jshort   s;
+   jint     i;
+   jlong    j;
+   jfloat   f;
+   jdouble  d;
+   jobject  l;
+ } jvalue;
+ 
+ /* This structure is used when registering native methods.  */
+ typedef struct
+ {
+   char *name;
+   char *signature;
+   void *fnPtr;			/* Sigh.  */
+ } JNINativeMethod;
+ 
+ struct JNINativeInterface
+ {
+   void *reserved0;
+   void *reserved1;
+   void *reserved2;
+   void *reserved3;
+ 
+   jint     (JNICALL *GetVersion)                   (JNIEnv *);
+   jclass   (JNICALL *DefineClass)                  (JNIEnv *, const char *,
+ 						    jobject, const jbyte *,
+ 						    jsize);
+   jclass   (JNICALL *FindClass)                    (JNIEnv *, const char *);
+ 
+   jmethodID (JNICALL *FromReflectedMethod)	   (JNIEnv *, jobject);
+   jfieldID  (JNICALL *FromReflectedField)	   (JNIEnv *, jobject);
+   jobject   (JNICALL *ToReflectedMethod)	   (JNIEnv *, jclass,
+ 						    jmethodID, jboolean);
+ 
+   jclass   (JNICALL *GetSuperclass)                (JNIEnv *, jclass);
+   jboolean (JNICALL *IsAssignableFrom)             (JNIEnv *, jclass, jclass);
+ 
+   jobject  (JNICALL *ToReflectedField)		   (JNIEnv *, jclass, jfieldID,
+                                                     jboolean);
+ 
+   jint     (JNICALL *Throw)                        (JNIEnv *, jthrowable);
+   jint     (JNICALL *ThrowNew)                     (JNIEnv *, jclass, 
+                                                     const char *);
+   jthrowable (JNICALL *ExceptionOccurred)          (JNIEnv *);
+   void     (JNICALL *ExceptionDescribe)            (JNIEnv *);
+   void     (JNICALL *ExceptionClear)               (JNIEnv *);
+   void     (JNICALL *FatalError)                   (JNIEnv *, const char *);
+ 
+   jint     (JNICALL *PushLocalFrame)		   (JNIEnv *, jint);
+   jobject  (JNICALL *PopLocalFrame)		   (JNIEnv *, jobject);
+ 
+   jobject  (JNICALL *NewGlobalRef)                 (JNIEnv *, jobject);
+   void     (JNICALL *DeleteGlobalRef)              (JNIEnv *, jobject);
+   void     (JNICALL *DeleteLocalRef)               (JNIEnv *, jobject);
+   jboolean (JNICALL *IsSameObject)                 (JNIEnv *, jobject, 
+                                                     jobject);
+ 
+   jobject  (JNICALL *NewLocalRef)		   (JNIEnv *, jobject);
+   jint     (JNICALL *EnsureLocalCapacity)	   (JNIEnv *, jint);
+ 
+   jobject  (JNICALL *AllocObject)                  (JNIEnv *, jclass);
+   jobject (JNICALL *NewObject)			   (JNIEnv *, jclass, 
+                                                     jmethodID, ...);
+   jobject (JNICALL *NewObjectV)			   (JNIEnv *, jclass, 
+                                                     jmethodID, va_list);
+   jobject (JNICALL *NewObjectA)			   (JNIEnv *, jclass, 
+                                                     jmethodID, jvalue *);
+ 
+   jclass   (JNICALL *GetObjectClass)               (JNIEnv *, jobject);
+   jboolean (JNICALL *IsInstanceOf)                 (JNIEnv *, jobject, jclass);
+   jmethodID (JNICALL *GetMethodID)                 (JNIEnv *, jclass, 
+                                                     const char *, const char *);
+ 
+   jobject (JNICALL *CallObjectMethod)	   (JNIEnv *, jobject, jmethodID, ...);
+   jobject (JNICALL *CallObjectMethodV)	   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   jobject (JNICALL *CallObjectMethodA)	   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+   jboolean (JNICALL *CallBooleanMethod)	   (JNIEnv *, jobject, jmethodID,
+                                             ...);
+   jboolean (JNICALL *CallBooleanMethodV)   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   jboolean (JNICALL *CallBooleanMethodA)   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+   jbyte (JNICALL *CallByteMethod)   (JNIEnv *, jobject, jmethodID, ...);
+   jbyte (JNICALL *CallByteMethodV)	   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   jbyte (JNICALL *CallByteMethodA)	   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+   jchar (JNICALL *CallCharMethod)	   (JNIEnv *, jobject, jmethodID, ...);
+   jchar (JNICALL *CallCharMethodV)	   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   jchar (JNICALL *CallCharMethodA)	   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+   jshort (JNICALL *CallShortMethod)	   (JNIEnv *, jobject, jmethodID, ...);
+   jshort (JNICALL *CallShortMethodV)	   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   jshort (JNICALL *CallShortMethodA)	   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+   jint 	(JNICALL *CallIntMethod)	   (JNIEnv *, jobject, jmethodID, ...);
+   jint 	(JNICALL *CallIntMethodV)	   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   jint 	(JNICALL *CallIntMethodA)	   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+   jlong (JNICALL *CallLongMethod)	   (JNIEnv *, jobject, jmethodID, ...);
+   jlong (JNICALL *CallLongMethodV)	   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   jlong (JNICALL *CallLongMethodA)	   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+   jfloat (JNICALL *CallFloatMethod)	   (JNIEnv *, jobject, jmethodID, ...);
+   jfloat (JNICALL *CallFloatMethodV)	   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   jfloat (JNICALL *CallFloatMethodA)	   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+   jdouble (JNICALL *CallDoubleMethod)	   (JNIEnv *, jobject, jmethodID, ...);
+   jdouble (JNICALL *CallDoubleMethodV)	   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   jdouble (JNICALL *CallDoubleMethodA)	   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+   void  (JNICALL *CallVoidMethod)	   (JNIEnv *, jobject, jmethodID, ...);
+   void  (JNICALL *CallVoidMethodV)	   (JNIEnv *, jobject, jmethodID,
+                                             va_list);
+   void  (JNICALL *CallVoidMethodA)	   (JNIEnv *, jobject, jmethodID,
+                                             jvalue *);
+ 
+   jobject   (JNICALL *CallNonvirtualObjectMethod)  (JNIEnv *, jobject, jclass,
+                                                     jmethodID, ...);
+   jobject   (JNICALL *CallNonvirtualObjectMethodV) (JNIEnv *, jobject, jclass,
+ 					            jmethodID, va_list);
+   jobject   (JNICALL *CallNonvirtualObjectMethodA) (JNIEnv *, jobject, jclass,
+ 					            jmethodID, jvalue *);
+   jboolean  (JNICALL *CallNonvirtualBooleanMethod) (JNIEnv *, jobject, jclass,
+ 					            jmethodID, ...);
+   jboolean  (JNICALL *CallNonvirtualBooleanMethodV) (JNIEnv *, jobject, jclass,
+ 					             jmethodID, va_list);
+   jboolean  (JNICALL *CallNonvirtualBooleanMethodA) (JNIEnv *, jobject, jclass,
+ 					             jmethodID, jvalue *);
+   jbyte     (JNICALL *CallNonvirtualByteMethod)	   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, ...);
+   jbyte     (JNICALL *CallNonvirtualByteMethodV)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, va_list);
+   jbyte     (JNICALL *CallNonvirtualByteMethodA)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, jvalue *);
+   jchar     (JNICALL *CallNonvirtualCharMethod)	   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, ...);
+   jchar     (JNICALL *CallNonvirtualCharMethodV)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, va_list);
+   jchar     (JNICALL *CallNonvirtualCharMethodA)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, jvalue *);
+   jshort    (JNICALL *CallNonvirtualShortMethod)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, ...);
+   jshort    (JNICALL *CallNonvirtualShortMethodV)  (JNIEnv *, jobject, jclass,
+ 					            jmethodID, va_list);
+   jshort    (JNICALL *CallNonvirtualShortMethodA)  (JNIEnv *, jobject, jclass,
+ 					            jmethodID, jvalue *);
+   jint 	    (JNICALL *CallNonvirtualIntMethod)	   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, ...);
+   jint 	    (JNICALL *CallNonvirtualIntMethodV)	   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, va_list);
+   jint 	    (JNICALL *CallNonvirtualIntMethodA)	   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, jvalue *);
+   jlong     (JNICALL *CallNonvirtualLongMethod)	   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, ...);
+   jlong     (JNICALL *CallNonvirtualLongMethodV)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, va_list);
+   jlong     (JNICALL *CallNonvirtualLongMethodA)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, jvalue *);
+   jfloat    (JNICALL *CallNonvirtualFloatMethod)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, ...);
+   jfloat    (JNICALL *CallNonvirtualFloatMethodV)  (JNIEnv *, jobject, jclass,
+ 					            jmethodID, va_list);
+   jfloat    (JNICALL *CallNonvirtualFloatMethodA)  (JNIEnv *, jobject, jclass,
+ 					            jmethodID, jvalue *);
+   jdouble   (JNICALL *CallNonvirtualDoubleMethod)  (JNIEnv *, jobject, jclass,
+ 					            jmethodID, ...);
+   jdouble   (JNICALL *CallNonvirtualDoubleMethodV) (JNIEnv *, jobject, jclass,
+ 					            jmethodID, va_list);
+   jdouble   (JNICALL *CallNonvirtualDoubleMethodA) (JNIEnv *, jobject, jclass,
+ 					            jmethodID, jvalue *);
+   void      (JNICALL *CallNonvirtualVoidMethod)	   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, ...);
+   void      (JNICALL *CallNonvirtualVoidMethodV)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, va_list);
+   void      (JNICALL *CallNonvirtualVoidMethodA)   (JNIEnv *, jobject, jclass,
+ 					            jmethodID, jvalue *);
+ 
+   jfieldID  (JNICALL *GetFieldID)          (JNIEnv *, jclass, const char *,
+ 					    const char *);
+ 
+   jobject  (JNICALL *GetObjectField)       (JNIEnv *, jobject, jfieldID);
+   jboolean (JNICALL *GetBooleanField)      (JNIEnv *, jobject, jfieldID);
+   jbyte    (JNICALL *GetByteField)         (JNIEnv *, jobject, jfieldID);
+   jchar    (JNICALL *GetCharField)         (JNIEnv *, jobject, jfieldID);
+   jshort   (JNICALL *GetShortField)        (JNIEnv *, jobject, jfieldID);
+   jint     (JNICALL *GetIntField)          (JNIEnv *, jobject, jfieldID);
+   jlong    (JNICALL *GetLongField)         (JNIEnv *, jobject, jfieldID);
+   jfloat   (JNICALL *GetFloatField)        (JNIEnv *, jobject, jfieldID);
+   jdouble  (JNICALL *GetDoubleField)       (JNIEnv *, jobject, jfieldID);
+ 
+   void	(JNICALL *SetObjectField)	   (JNIEnv *, jobject,
+ 					    jfieldID, jobject);
+   void	(JNICALL *SetBooleanField)	   (JNIEnv *, jobject,
+ 					    jfieldID, jboolean);
+   void	(JNICALL *SetByteField)		   (JNIEnv *, jobject,
+ 					    jfieldID, jbyte);
+   void	(JNICALL *SetCharField)		   (JNIEnv *, jobject,
+ 					    jfieldID, jchar);
+   void	(JNICALL *SetShortField)	   (JNIEnv *, jobject,
+ 					    jfieldID, jshort);
+   void	(JNICALL *SetIntField)		   (JNIEnv *, jobject,
+ 					    jfieldID, jint);
+   void	(JNICALL *SetLongField)		   (JNIEnv *, jobject,
+ 					    jfieldID, jlong);
+   void	(JNICALL *SetFloatField)	   (JNIEnv *, jobject,
+ 					    jfieldID, jfloat);
+   void	(JNICALL *SetDoubleField)	   (JNIEnv *, jobject,
+ 					    jfieldID, jdouble);
+ 
+   jmethodID (JNICALL *GetStaticMethodID)   (JNIEnv *, jclass, const char *,
+ 					    const char *);
+ 
+   jobject  (JNICALL *CallStaticObjectMethod)  (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   jobject  (JNICALL *CallStaticObjectMethodV) (JNIEnv *, jclass, jmethodID,
+ 					       va_list);
+   jobject  (JNICALL *CallStaticObjectMethodA) (JNIEnv *, jclass, jmethodID,
+ 					       jvalue *);
+   jboolean (JNICALL *CallStaticBooleanMethod) (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   jboolean (JNICALL *CallStaticBooleanMethodV) (JNIEnv *, jclass, jmethodID,
+ 					        va_list);
+   jboolean (JNICALL *CallStaticBooleanMethodA) (JNIEnv *, jclass, jmethodID,
+ 					        jvalue *);
+   jbyte	   (JNICALL *CallStaticByteMethod)    (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   jbyte    (JNICALL *CallStaticByteMethodV)   (JNIEnv *, jclass, jmethodID,
+ 					       va_list);
+   jbyte    (JNICALL *CallStaticByteMethodA)   (JNIEnv *, jclass, jmethodID,
+ 					       jvalue *);
+   jchar    (JNICALL *CallStaticCharMethod)    (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   jchar    (JNICALL *CallStaticCharMethodV)   (JNIEnv *, jclass, jmethodID,
+ 					       va_list);
+   jchar    (JNICALL *CallStaticCharMethodA)   (JNIEnv *, jclass, jmethodID,
+ 					       jvalue *);
+   jshort   (JNICALL *CallStaticShortMethod)   (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   jshort   (JNICALL *CallStaticShortMethodV)  (JNIEnv *, jclass, jmethodID,
+ 					       va_list);
+   jshort   (JNICALL *CallStaticShortMethodA)  (JNIEnv *, jclass, jmethodID,
+ 					       jvalue *);
+   jint 	   (JNICALL *CallStaticIntMethod)     (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   jint 	   (JNICALL *CallStaticIntMethodV)    (JNIEnv *, jclass, jmethodID,
+ 					       va_list);
+   jint 	   (JNICALL *CallStaticIntMethodA)    (JNIEnv *, jclass, jmethodID,
+ 					       jvalue *);
+   jlong    (JNICALL *CallStaticLongMethod)    (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   jlong    (JNICALL *CallStaticLongMethodV)   (JNIEnv *, jclass, jmethodID,
+ 					       va_list);
+   jlong    (JNICALL *CallStaticLongMethodA)   (JNIEnv *, jclass, jmethodID,
+ 					       jvalue *);
+   jfloat   (JNICALL *CallStaticFloatMethod)   (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   jfloat   (JNICALL *CallStaticFloatMethodV)  (JNIEnv *, jclass, jmethodID,
+ 					       va_list);
+   jfloat   (JNICALL *CallStaticFloatMethodA)  (JNIEnv *, jclass, jmethodID,
+ 					       jvalue *);
+   jdouble  (JNICALL *CallStaticDoubleMethod)  (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   jdouble  (JNICALL *CallStaticDoubleMethodV) (JNIEnv *, jclass, jmethodID,
+ 					       va_list);
+   jdouble  (JNICALL *CallStaticDoubleMethodA) (JNIEnv *, jclass, jmethodID,
+ 					       jvalue *);
+   void     (JNICALL *CallStaticVoidMethod)    (JNIEnv *, jclass, jmethodID,
+ 					       ...);
+   void     (JNICALL *CallStaticVoidMethodV)   (JNIEnv *, jclass, jmethodID,
+ 					       va_list);
+   void     (JNICALL *CallStaticVoidMethodA)   (JNIEnv *, jclass, jmethodID,
+ 					       jvalue *);
+ 
+   jfieldID (JNICALL *GetStaticFieldID)        (JNIEnv *, jclass, const char *,
+ 					       const char *);
+ 
+   jobject  (JNICALL *GetStaticObjectField)    (JNIEnv *, jclass, jfieldID);
+   jboolean (JNICALL *GetStaticBooleanField)   (JNIEnv *, jclass, jfieldID);
+   jbyte	   (JNICALL *GetStaticByteField)      (JNIEnv *, jclass, jfieldID);
+   jchar	   (JNICALL *GetStaticCharField)      (JNIEnv *, jclass, jfieldID);
+   jshort   (JNICALL *GetStaticShortField)     (JNIEnv *, jclass, jfieldID);
+   jint	   (JNICALL *GetStaticIntField)	      (JNIEnv *, jclass, jfieldID);
+   jlong	   (JNICALL *GetStaticLongField)      (JNIEnv *, jclass, jfieldID);
+   jfloat   (JNICALL *GetStaticFloatField)     (JNIEnv *, jclass, jfieldID);
+   jdouble  (JNICALL *GetStaticDoubleField)    (JNIEnv *, jclass, jfieldID);
+ 
+   void 	(JNICALL *SetStaticObjectField)	   (JNIEnv *, jclass,
+ 					    jfieldID, jobject);
+   void 	(JNICALL *SetStaticBooleanField)   (JNIEnv *, jclass,
+ 					    jfieldID, jboolean);
+   void 	(JNICALL *SetStaticByteField)	   (JNIEnv *, jclass,
+ 					    jfieldID, jbyte);
+   void 	(JNICALL *SetStaticCharField)	   (JNIEnv *, jclass,
+ 					    jfieldID, jchar);
+   void 	(JNICALL *SetStaticShortField)	   (JNIEnv *, jclass,
+ 					    jfieldID, jshort);
+   void 	(JNICALL *SetStaticIntField)	   (JNIEnv *, jclass,
+ 					    jfieldID, jint);
+   void 	(JNICALL *SetStaticLongField)	   (JNIEnv *, jclass,
+ 					    jfieldID, jlong);
+   void 	(JNICALL *SetStaticFloatField)	   (JNIEnv *, jclass,
+ 					    jfieldID, jfloat);
+   void 	(JNICALL *SetStaticDoubleField)	   (JNIEnv *, jclass,
+ 					    jfieldID, jdouble);
+ 
+   jstring  (JNICALL *NewString)            (JNIEnv *, const jchar *, jsize);
+   jsize    (JNICALL *GetStringLength)      (JNIEnv *, jstring);
+   const jchar * (JNICALL *GetStringChars)  (JNIEnv *, jstring, jboolean *);
+   void     (JNICALL *ReleaseStringChars)   (JNIEnv *, jstring, const jchar *);
+   jstring  (JNICALL *NewStringUTF)         (JNIEnv *, const char *);
+   jsize    (JNICALL *GetStringUTFLength)   (JNIEnv *, jstring);
+   const char * (JNICALL *GetStringUTFChars) (JNIEnv *, jstring, jboolean *);
+   void     (JNICALL *ReleaseStringUTFChars) (JNIEnv *, jstring, const char *);
+   jsize    (JNICALL *GetArrayLength)       (JNIEnv *, jarray);
+   jobjectArray (JNICALL *NewObjectArray)    (JNIEnv *, jsize, jclass, jobject);
+   jobject  (JNICALL *GetObjectArrayElement) (JNIEnv *, jobjectArray, jsize);
+   void     (JNICALL *SetObjectArrayElement) (JNIEnv *, jobjectArray, jsize,
+ 					     jobject);
+ 
+   jbooleanArray (JNICALL *NewBooleanArray)	   (JNIEnv *, jsize);
+   jbyteArray    (JNICALL *NewByteArray)		   (JNIEnv *, jsize);
+   jcharArray    (JNICALL *NewCharArray)		   (JNIEnv *, jsize);
+   jshortArray   (JNICALL *NewShortArray)	   (JNIEnv *, jsize);
+   jintArray     (JNICALL *NewIntArray)		   (JNIEnv *, jsize);
+   jlongArray    (JNICALL *NewLongArray)		   (JNIEnv *, jsize);
+   jfloatArray   (JNICALL *NewFloatArray)	   (JNIEnv *, jsize);
+   jdoubleArray  (JNICALL *NewDoubleArray)	   (JNIEnv *, jsize);
+ 
+   jboolean *	(JNICALL *GetBooleanArrayElements) (JNIEnv *, jbooleanArray,
+ 					            jboolean *);
+   jbyte *	(JNICALL *GetByteArrayElements)	   (JNIEnv *, jbyteArray,
+ 					            jboolean *);
+   jchar *	(JNICALL *GetCharArrayElements)	   (JNIEnv *, jcharArray,
+ 					            jboolean *);
+   jshort *	(JNICALL *GetShortArrayElements)   (JNIEnv *, jshortArray,
+ 					            jboolean *);
+   jint *	(JNICALL *GetIntArrayElements)	   (JNIEnv *, jintArray,
+ 					            jboolean *);
+   jlong *	(JNICALL *GetLongArrayElements)	   (JNIEnv *, jlongArray,
+ 					            jboolean *);
+   jfloat *	(JNICALL *GetFloatArrayElements)   (JNIEnv *, jfloatArray,
+ 					            jboolean *);
+   jdouble *	(JNICALL *GetDoubleArrayElements)  (JNIEnv *, jdoubleArray,
+ 					            jboolean *);
+ 
+   void		(JNICALL *ReleaseBooleanArrayElements) (JNIEnv *, jbooleanArray,
+ 						        jboolean *, jint);
+   void		(JNICALL *ReleaseByteArrayElements)    (JNIEnv *, jbyteArray,
+ 					                jbyte *, jint);
+   void		(JNICALL *ReleaseCharArrayElements)    (JNIEnv *, jcharArray,
+ 						        jchar *, jint);
+   void		(JNICALL *ReleaseShortArrayElements)   (JNIEnv *, jshortArray,
+ 						        jshort *, jint);
+   void		(JNICALL *ReleaseIntArrayElements)     (JNIEnv *, jintArray,
+ 						        jint *, jint);
+   void		(JNICALL *ReleaseLongArrayElements)    (JNIEnv *, jlongArray,
+ 						        jlong *, jint);
+   void		(JNICALL *ReleaseFloatArrayElements)   (JNIEnv *, jfloatArray,
+ 						        jfloat *, jint);
+   void		(JNICALL *ReleaseDoubleArrayElements)  (JNIEnv *, jdoubleArray,
+ 						        jdouble *, jint);
+ 
+   void 		(JNICALL *GetBooleanArrayRegion)   (JNIEnv *, jbooleanArray,
+ 					            jsize, jsize, jboolean *);
+   void 		(JNICALL *GetByteArrayRegion)	   (JNIEnv *, jbyteArray,
+ 					            jsize, jsize, jbyte *);
+   void 		(JNICALL *GetCharArrayRegion)	   (JNIEnv *, jcharArray,
+ 					            jsize, jsize, jchar *);
+   void 		(JNICALL *GetShortArrayRegion)	   (JNIEnv *, jshortArray,
+ 					            jsize, jsize, jshort *);
+   void 		(JNICALL *GetIntArrayRegion)	   (JNIEnv *, jintArray,
+ 					            jsize, jsize, jint *);
+   void 		(JNICALL *GetLongArrayRegion)	   (JNIEnv *, jlongArray,
+ 					            jsize, jsize, jlong *);
+   void 		(JNICALL *GetFloatArrayRegion)	   (JNIEnv *, jfloatArray,
+ 					            jsize, jsize, jfloat *);
+   void 		(JNICALL *GetDoubleArrayRegion)	   (JNIEnv *, jdoubleArray,
+ 					            jsize, jsize, jdouble *);
+ 
+   void 		(JNICALL *SetBooleanArrayRegion)   (JNIEnv *, jbooleanArray,
+ 					            jsize, jsize, jboolean *);
+   void 		(JNICALL *SetByteArrayRegion)	   (JNIEnv *, jbyteArray,
+ 					            jsize, jsize, jbyte *);
+   void 		(JNICALL *SetCharArrayRegion)	   (JNIEnv *, jcharArray,
+ 					            jsize, jsize, jchar *);
+   void 		(JNICALL *SetShortArrayRegion)	   (JNIEnv *, jshortArray,
+ 					            jsize, jsize, jshort *);
+   void 		(JNICALL *SetIntArrayRegion)	   (JNIEnv *, jintArray,
+ 					            jsize, jsize, jint *);
+   void 		(JNICALL *SetLongArrayRegion)	   (JNIEnv *, jlongArray,
+ 					            jsize, jsize, jlong *);
+   void 		(JNICALL *SetFloatArrayRegion)	   (JNIEnv *, jfloatArray,
+ 					            jsize, jsize, jfloat *);
+   void 		(JNICALL *SetDoubleArrayRegion)	   (JNIEnv *, jdoubleArray,
+ 					            jsize, jsize, jdouble *);
+ 
+   jint     (JNICALL *RegisterNatives)              (JNIEnv *, jclass,
+ 					            const JNINativeMethod *, 
+ 						    jint);
+   jint     (JNICALL *UnregisterNatives)            (JNIEnv *, jclass);
+   jint     (JNICALL *MonitorEnter)                 (JNIEnv *, jobject);
+   jint     (JNICALL *MonitorExit)                  (JNIEnv *, jobject);
+   jint     (JNICALL *GetJavaVM)                    (JNIEnv *, JavaVM **);
+ 
+   /* ---- JNI 1.2 functions ---- */
+   void	   (JNICALL *GetStringRegion)	           (JNIEnv *, jstring, jsize,
+ 					            jsize, jchar *);
+   void     (JNICALL *GetStringUTFRegion)	   (JNIEnv *, jstring, jsize,
+ 					            jsize, char *);
+ 
+   void * (JNICALL *GetPrimitiveArrayCritical)      (JNIEnv *, jarray, 
+                                                     jboolean *);
+   void   (JNICALL *ReleasePrimitiveArrayCritical)  (JNIEnv *, jarray, void *, 
+                                                     jint);
+ 
+   const jchar * (JNICALL *GetStringCritical)       (JNIEnv *, jstring, 
+                                                     jboolean *);
+   void          (JNICALL *ReleaseStringCritical)   (JNIEnv *, jstring, 
+                                                     const jchar *);
+ 
+   jweak  (JNICALL *NewWeakGlobalRef)               (JNIEnv *, jobject);
+   void   (JNICALL *DeleteWeakGlobalRef)            (JNIEnv *, jweak);
+ 
+   jboolean	(JNICALL *ExceptionCheck)	   (JNIEnv *);
+ 
+   /* ---- JNI 1.4 functions ---- */
+   jobject (JNICALL *NewDirectByteBuffer)           (JNIEnv *, void *, jlong);
+   void *  (JNICALL *GetDirectBufferAddress)        (JNIEnv *, jobject);
+   jlong   (JNICALL *GetDirectBufferCapacity)       (JNIEnv *, jobject);
+ };
+ 
+ #ifdef __cplusplus
+ 
+ class _Jv_JNIEnv
+ {
+ public:
+   /* The method table.  */
+   struct JNINativeInterface *p;
+ 
+ #ifdef _CLASSPATH_JNIENV_CONTENTS
+   _CLASSPATH_JNIENV_CONTENTS
+ #endif
+ 
+   jint GetVersion ()
+   { return p->GetVersion (this); }
+ 
+   jclass DefineClass (const char *name, jobject obj0, const jbyte * val1,
+ 		      jsize val2)
+   { return p->DefineClass (this, name, obj0, val1, val2); }
+ 
+   jclass FindClass (const char * val0)
+   { return p->FindClass (this, val0); }
+ 
+   jmethodID FromReflectedMethod (jobject obj0)
+   { return p->FromReflectedMethod (this, obj0); }
+ 
+   jfieldID FromReflectedField (jobject obj0)
+   { return p->FromReflectedField (this, obj0); }
+ 
+   jobject ToReflectedMethod (jclass cl0, jmethodID meth1, jboolean val2)
+   { return p->ToReflectedMethod (this, cl0, meth1, val2); }
+ 
+   jclass GetSuperclass (jclass cl0)
+   { return p->GetSuperclass (this, cl0); }
+ 
+   jboolean IsAssignableFrom (jclass cl0, jclass cl1)
+   { return p->IsAssignableFrom (this, cl0, cl1); }
+ 
+   jobject ToReflectedField (jclass cl0, jfieldID fld1, jboolean val2)
+   { return p->ToReflectedField (this, cl0, fld1, val2); }
+ 
+   jint Throw (jthrowable val0)
+   { return p->Throw (this, val0); }
+ 
+   jint ThrowNew (jclass cl0, const char * val1)
+   { return p->ThrowNew (this, cl0, val1); }
+ 
+   jthrowable ExceptionOccurred ()
+   { return p->ExceptionOccurred (this); }
+ 
+   void ExceptionDescribe ()
+   { p->ExceptionDescribe (this); }
+ 
+   void ExceptionClear ()
+   { p->ExceptionClear (this); }
+ 
+   void FatalError (const char * val0)
+   { p->FatalError (this, val0); }
+ 
+   jint PushLocalFrame (jint val0)
+   { return p->PushLocalFrame (this, val0); }
+ 
+   jobject PopLocalFrame (jobject obj0)
+   { return p->PopLocalFrame (this, obj0); }
+ 
+   jobject NewGlobalRef (jobject obj0)
+   { return p->NewGlobalRef (this, obj0); }
+ 
+   void DeleteGlobalRef (jobject obj0)
+   { p->DeleteGlobalRef (this, obj0); }
+ 
+   void DeleteLocalRef (jobject obj0)
+   { p->DeleteLocalRef (this, obj0); }
+ 
+   jboolean IsSameObject (jobject obj0, jobject obj1)
+   { return p->IsSameObject (this, obj0, obj1); }
+ 
+   jobject NewLocalRef (jobject obj0)
+   { return p->NewLocalRef (this, obj0); }
+ 
+   jint EnsureLocalCapacity (jint val0)
+   { return p->EnsureLocalCapacity (this, val0); }
+ 
+   jobject AllocObject (jclass cl0)
+   { return p->AllocObject (this, cl0); }
+ 
+   jobject NewObject (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jobject result = p->NewObjectV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jobject NewObjectV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->NewObjectV (this, cl0, meth1, val2); }
+ 
+   jobject NewObjectA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->NewObjectA (this, cl0, meth1, val2); }
+ 
+   jclass GetObjectClass (jobject obj0)
+   { return p->GetObjectClass (this, obj0); }
+ 
+   jboolean IsInstanceOf (jobject obj0, jclass cl1)
+   { return p->IsInstanceOf (this, obj0, cl1); }
+ 
+   jmethodID GetMethodID (jclass cl0, const char * val1, const char * val2)
+   { return p->GetMethodID (this, cl0, val1, val2); }
+ 
+   jobject CallObjectMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jobject result = p->CallObjectMethodV (this, obj0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jobject CallObjectMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { return p->CallObjectMethodV (this, obj0, meth1, val2); }
+ 
+   jobject CallObjectMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { return p->CallObjectMethodA (this, obj0, meth1, val2); }
+ 
+   jboolean CallBooleanMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jboolean result = p->CallBooleanMethodV (this, obj0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jboolean CallBooleanMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { return p->CallBooleanMethodV (this, obj0, meth1, val2); }
+ 
+   jboolean CallBooleanMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { return p->CallBooleanMethodA (this, obj0, meth1, val2); }
+ 
+   jbyte CallByteMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jbyte result = p->CallByteMethodV (this, obj0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jbyte CallByteMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { return p->CallByteMethodV (this, obj0, meth1, val2); }
+ 
+   jbyte CallByteMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { return p->CallByteMethodA (this, obj0, meth1, val2); }
+ 
+   jchar CallCharMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jchar result = p->CallCharMethodV (this, obj0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jchar CallCharMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { return p->CallCharMethodV (this, obj0, meth1, val2); }
+ 
+   jchar CallCharMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { return p->CallCharMethodA (this, obj0, meth1, val2); }
+ 
+   jshort CallShortMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jshort result = p->CallShortMethodV (this, obj0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jshort CallShortMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { return p->CallShortMethodV (this, obj0, meth1, val2); }
+ 
+   jshort CallShortMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { return p->CallShortMethodA (this, obj0, meth1, val2); }
+ 
+   jint CallIntMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jint result = p->CallIntMethodV (this, obj0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jint CallIntMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { return p->CallIntMethodV (this, obj0, meth1, val2); }
+ 
+   jint CallIntMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { return p->CallIntMethodA (this, obj0, meth1, val2); }
+ 
+   jlong CallLongMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jlong result = p->CallLongMethodV (this, obj0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jlong CallLongMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { return p->CallLongMethodV (this, obj0, meth1, val2); }
+ 
+   jlong CallLongMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { return p->CallLongMethodA (this, obj0, meth1, val2); }
+ 
+   jfloat CallFloatMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jfloat result = p->CallFloatMethodV (this, obj0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jfloat CallFloatMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { return p->CallFloatMethodV (this, obj0, meth1, val2); }
+ 
+   jfloat CallFloatMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { return p->CallFloatMethodA (this, obj0, meth1, val2); }
+ 
+   jdouble CallDoubleMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jdouble result = p->CallDoubleMethodV (this, obj0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jdouble CallDoubleMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { return p->CallDoubleMethodV (this, obj0, meth1, val2); }
+ 
+   jdouble CallDoubleMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { return p->CallDoubleMethodA (this, obj0, meth1, val2); }
+ 
+   void CallVoidMethod (jobject obj0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     p->CallVoidMethodV (this, obj0, meth1, args);
+     va_end (args);
+   }
+ 
+   void CallVoidMethodV (jobject obj0, jmethodID meth1, va_list val2)
+   { p->CallVoidMethodV (this, obj0, meth1, val2); }
+ 
+   void CallVoidMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
+   { p->CallVoidMethodA (this, obj0, meth1, val2); }
+ 
+   jobject CallNonvirtualObjectMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     jobject result = p->CallNonvirtualObjectMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jobject CallNonvirtualObjectMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { return p->CallNonvirtualObjectMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   jobject CallNonvirtualObjectMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { return p->CallNonvirtualObjectMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   jboolean CallNonvirtualBooleanMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     jboolean result = p->CallNonvirtualBooleanMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jboolean CallNonvirtualBooleanMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { return p->CallNonvirtualBooleanMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   jboolean CallNonvirtualBooleanMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { return p->CallNonvirtualBooleanMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   jbyte CallNonvirtualByteMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     jbyte result = p->CallNonvirtualByteMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jbyte CallNonvirtualByteMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { return p->CallNonvirtualByteMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   jbyte CallNonvirtualByteMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { return p->CallNonvirtualByteMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   jchar CallNonvirtualCharMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     jchar result = p->CallNonvirtualCharMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jchar CallNonvirtualCharMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { return p->CallNonvirtualCharMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   jchar CallNonvirtualCharMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { return p->CallNonvirtualCharMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   jshort CallNonvirtualShortMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     jshort result = p->CallNonvirtualShortMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jshort CallNonvirtualShortMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { return p->CallNonvirtualShortMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   jshort CallNonvirtualShortMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { return p->CallNonvirtualShortMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   jint CallNonvirtualIntMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     jint result = p->CallNonvirtualIntMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jint CallNonvirtualIntMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { return p->CallNonvirtualIntMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   jint CallNonvirtualIntMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { return p->CallNonvirtualIntMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   jlong CallNonvirtualLongMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     jlong result = p->CallNonvirtualLongMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jlong CallNonvirtualLongMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { return p->CallNonvirtualLongMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   jlong CallNonvirtualLongMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { return p->CallNonvirtualLongMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   jfloat CallNonvirtualFloatMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     jfloat result = p->CallNonvirtualFloatMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jfloat CallNonvirtualFloatMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { return p->CallNonvirtualFloatMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   jfloat CallNonvirtualFloatMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { return p->CallNonvirtualFloatMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   jdouble CallNonvirtualDoubleMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     jdouble result = p->CallNonvirtualDoubleMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jdouble CallNonvirtualDoubleMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { return p->CallNonvirtualDoubleMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   jdouble CallNonvirtualDoubleMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { return p->CallNonvirtualDoubleMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   void CallNonvirtualVoidMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
+   {
+     va_list args;
+     va_start (args, meth2);
+     p->CallNonvirtualVoidMethodV (this, obj0, cl1, meth2, args);
+     va_end (args);
+   }
+ 
+   void CallNonvirtualVoidMethodV (jobject obj0, jclass cl1, jmethodID meth2, va_list val3)
+   { p->CallNonvirtualVoidMethodV (this, obj0, cl1, meth2, val3); }
+ 
+   void CallNonvirtualVoidMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
+   { p->CallNonvirtualVoidMethodA (this, obj0, cl1, meth2, val3); }
+ 
+   jfieldID GetFieldID (jclass cl0, const char * val1, const char * val2)
+   { return p->GetFieldID (this, cl0, val1, val2); }
+ 
+   jobject GetObjectField (jobject obj0, jfieldID fld1)
+   { return p->GetObjectField (this, obj0, fld1); }
+ 
+   jboolean GetBooleanField (jobject obj0, jfieldID fld1)
+   { return p->GetBooleanField (this, obj0, fld1); }
+ 
+   jbyte GetByteField (jobject obj0, jfieldID fld1)
+   { return p->GetByteField (this, obj0, fld1); }
+ 
+   jchar GetCharField (jobject obj0, jfieldID fld1)
+   { return p->GetCharField (this, obj0, fld1); }
+ 
+   jshort GetShortField (jobject obj0, jfieldID fld1)
+   { return p->GetShortField (this, obj0, fld1); }
+ 
+   jint GetIntField (jobject obj0, jfieldID fld1)
+   { return p->GetIntField (this, obj0, fld1); }
+ 
+   jlong GetLongField (jobject obj0, jfieldID fld1)
+   { return p->GetLongField (this, obj0, fld1); }
+ 
+   jfloat GetFloatField (jobject obj0, jfieldID fld1)
+   { return p->GetFloatField (this, obj0, fld1); }
+ 
+   jdouble GetDoubleField (jobject obj0, jfieldID fld1)
+   { return p->GetDoubleField (this, obj0, fld1); }
+ 
+   void SetObjectField (jobject obj0, jfieldID fld1, jobject obj2)
+   { p->SetObjectField (this, obj0, fld1, obj2); }
+ 
+   void SetBooleanField (jobject obj0, jfieldID fld1, jboolean val2)
+   { p->SetBooleanField (this, obj0, fld1, val2); }
+ 
+   void SetByteField (jobject obj0, jfieldID fld1, jbyte val2)
+   { p->SetByteField (this, obj0, fld1, val2); }
+ 
+   void SetCharField (jobject obj0, jfieldID fld1, jchar val2)
+   { p->SetCharField (this, obj0, fld1, val2); }
+ 
+   void SetShortField (jobject obj0, jfieldID fld1, jshort val2)
+   { p->SetShortField (this, obj0, fld1, val2); }
+ 
+   void SetIntField (jobject obj0, jfieldID fld1, jint val2)
+   { p->SetIntField (this, obj0, fld1, val2); }
+ 
+   void SetLongField (jobject obj0, jfieldID fld1, jlong val2)
+   { p->SetLongField (this, obj0, fld1, val2); }
+ 
+   void SetFloatField (jobject obj0, jfieldID fld1, jfloat val2)
+   { p->SetFloatField (this, obj0, fld1, val2); }
+ 
+   void SetDoubleField (jobject obj0, jfieldID fld1, jdouble val2)
+   { p->SetDoubleField (this, obj0, fld1, val2); }
+ 
+   jmethodID GetStaticMethodID (jclass cl0, const char * val1, const char * val2)
+   { return p->GetStaticMethodID (this, cl0, val1, val2); }
+ 
+   jobject CallStaticObjectMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jobject result = p->CallStaticObjectMethodV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jobject CallStaticObjectMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->CallStaticObjectMethodV (this, cl0, meth1, val2); }
+ 
+   jobject CallStaticObjectMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->CallStaticObjectMethodA (this, cl0, meth1, val2); }
+ 
+   jboolean CallStaticBooleanMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jboolean result = p->CallStaticBooleanMethodV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jboolean CallStaticBooleanMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->CallStaticBooleanMethodV (this, cl0, meth1, val2); }
+ 
+   jboolean CallStaticBooleanMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->CallStaticBooleanMethodA (this, cl0, meth1, val2); }
+ 
+   jbyte CallStaticByteMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jbyte result = p->CallStaticByteMethodV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jbyte CallStaticByteMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->CallStaticByteMethodV (this, cl0, meth1, val2); }
+ 
+   jbyte CallStaticByteMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->CallStaticByteMethodA (this, cl0, meth1, val2); }
+ 
+   jchar CallStaticCharMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jchar result = p->CallStaticCharMethodV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jchar CallStaticCharMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->CallStaticCharMethodV (this, cl0, meth1, val2); }
+ 
+   jchar CallStaticCharMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->CallStaticCharMethodA (this, cl0, meth1, val2); }
+ 
+   jshort CallStaticShortMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jshort result = p->CallStaticShortMethodV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jshort CallStaticShortMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->CallStaticShortMethodV (this, cl0, meth1, val2); }
+ 
+   jshort CallStaticShortMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->CallStaticShortMethodA (this, cl0, meth1, val2); }
+ 
+   jint CallStaticIntMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jint result = p->CallStaticIntMethodV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jint CallStaticIntMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->CallStaticIntMethodV (this, cl0, meth1, val2); }
+ 
+   jint CallStaticIntMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->CallStaticIntMethodA (this, cl0, meth1, val2); }
+ 
+   jlong CallStaticLongMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jlong result = p->CallStaticLongMethodV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jlong CallStaticLongMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->CallStaticLongMethodV (this, cl0, meth1, val2); }
+ 
+   jlong CallStaticLongMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->CallStaticLongMethodA (this, cl0, meth1, val2); }
+ 
+   jfloat CallStaticFloatMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jfloat result = p->CallStaticFloatMethodV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jfloat CallStaticFloatMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->CallStaticFloatMethodV (this, cl0, meth1, val2); }
+ 
+   jfloat CallStaticFloatMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->CallStaticFloatMethodA (this, cl0, meth1, val2); }
+ 
+   jdouble CallStaticDoubleMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     jdouble result = p->CallStaticDoubleMethodV (this, cl0, meth1, args);
+     va_end (args);
+     return result;
+   }
+ 
+   jdouble CallStaticDoubleMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { return p->CallStaticDoubleMethodV (this, cl0, meth1, val2); }
+ 
+   jdouble CallStaticDoubleMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { return p->CallStaticDoubleMethodA (this, cl0, meth1, val2); }
+ 
+   void CallStaticVoidMethod (jclass cl0, jmethodID meth1, ...)
+   {
+     va_list args;
+     va_start (args, meth1);
+     p->CallStaticVoidMethodV (this, cl0, meth1, args);
+     va_end (args);
+   }
+ 
+   void CallStaticVoidMethodV (jclass cl0, jmethodID meth1, va_list val2)
+   { p->CallStaticVoidMethodV (this, cl0, meth1, val2); }
+ 
+   void CallStaticVoidMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
+   { p->CallStaticVoidMethodA (this, cl0, meth1, val2); }
+ 
+   jfieldID GetStaticFieldID (jclass cl0, const char * val1, const char * val2)
+   { return p->GetStaticFieldID (this, cl0, val1, val2); }
+ 
+   jobject GetStaticObjectField (jclass cl0, jfieldID fld1)
+   { return p->GetStaticObjectField (this, cl0, fld1); }
+ 
+   jboolean GetStaticBooleanField (jclass cl0, jfieldID fld1)
+   { return p->GetStaticBooleanField (this, cl0, fld1); }
+ 
+   jbyte GetStaticByteField (jclass cl0, jfieldID fld1)
+   { return p->GetStaticByteField (this, cl0, fld1); }
+ 
+   jchar GetStaticCharField (jclass cl0, jfieldID fld1)
+   { return p->GetStaticCharField (this, cl0, fld1); }
+ 
+   jshort GetStaticShortField (jclass cl0, jfieldID fld1)
+   { return p->GetStaticShortField (this, cl0, fld1); }
+ 
+   jint GetStaticIntField (jclass cl0, jfieldID fld1)
+   { return p->GetStaticIntField (this, cl0, fld1); }
+ 
+   jlong GetStaticLongField (jclass cl0, jfieldID fld1)
+   { return p->GetStaticLongField (this, cl0, fld1); }
+ 
+   jfloat GetStaticFloatField (jclass cl0, jfieldID fld1)
+   { return p->GetStaticFloatField (this, cl0, fld1); }
+ 
+   jdouble GetStaticDoubleField (jclass cl0, jfieldID fld1)
+   { return p->GetStaticDoubleField (this, cl0, fld1); }
+ 
+   void SetStaticObjectField (jclass cl0, jfieldID fld1, jobject obj2)
+   { p->SetStaticObjectField (this, cl0, fld1, obj2); }
+ 
+   void SetStaticBooleanField (jclass cl0, jfieldID fld1, jboolean val2)
+   { p->SetStaticBooleanField (this, cl0, fld1, val2); }
+ 
+   void SetStaticByteField (jclass cl0, jfieldID fld1, jbyte val2)
+   { p->SetStaticByteField (this, cl0, fld1, val2); }
+ 
+   void SetStaticCharField (jclass cl0, jfieldID fld1, jchar val2)
+   { p->SetStaticCharField (this, cl0, fld1, val2); }
+ 
+   void SetStaticShortField (jclass cl0, jfieldID fld1, jshort val2)
+   { p->SetStaticShortField (this, cl0, fld1, val2); }
+ 
+   void SetStaticIntField (jclass cl0, jfieldID fld1, jint val2)
+   { p->SetStaticIntField (this, cl0, fld1, val2); }
+ 
+   void SetStaticLongField (jclass cl0, jfieldID fld1, jlong val2)
+   { p->SetStaticLongField (this, cl0, fld1, val2); }
+ 
+   void SetStaticFloatField (jclass cl0, jfieldID fld1, jfloat val2)
+   { p->SetStaticFloatField (this, cl0, fld1, val2); }
+ 
+   void SetStaticDoubleField (jclass cl0, jfieldID fld1, jdouble val2)
+   { p->SetStaticDoubleField (this, cl0, fld1, val2); }
+ 
+   jstring NewString (const jchar * val0, jsize val1)
+   { return p->NewString (this, val0, val1); }
+ 
+   jint GetStringLength (jstring val0)
+   { return p->GetStringLength (this, val0); }
+ 
+   const jchar * GetStringChars (jstring val0, jboolean * val1)
+   { return p->GetStringChars (this, val0, val1); }
+ 
+   void ReleaseStringChars (jstring val0, const jchar * val1)
+   { p->ReleaseStringChars (this, val0, val1); }
+ 
+   jstring NewStringUTF (const char * val0)
+   { return p->NewStringUTF (this, val0); }
+ 
+   jsize GetStringUTFLength (jstring val0)
+   { return p->GetStringUTFLength (this, val0); }
+ 
+   const char * GetStringUTFChars (jstring val0, jboolean * val1)
+   { return p->GetStringUTFChars (this, val0, val1); }
+ 
+   void ReleaseStringUTFChars (jstring val0, const char * val1)
+   { p->ReleaseStringUTFChars (this, val0, val1); }
+ 
+   jsize GetArrayLength (jarray val0)
+   { return p->GetArrayLength (this, val0); }
+ 
+   jobjectArray NewObjectArray (jsize val0, jclass cl1, jobject obj2)
+   { return p->NewObjectArray (this, val0, cl1, obj2); }
+ 
+   jobject GetObjectArrayElement (jobjectArray val0, jsize val1)
+   { return p->GetObjectArrayElement (this, val0, val1); }
+ 
+   void SetObjectArrayElement (jobjectArray val0, jsize val1, jobject obj2)
+   { p->SetObjectArrayElement (this, val0, val1, obj2); }
+ 
+   jbooleanArray NewBooleanArray (jsize val0)
+   { return p->NewBooleanArray (this, val0); }
+ 
+   jbyteArray NewByteArray (jsize val0)
+   { return p->NewByteArray (this, val0); }
+ 
+   jcharArray NewCharArray (jsize val0)
+   { return p->NewCharArray (this, val0); }
+ 
+   jshortArray NewShortArray (jsize val0)
+   { return p->NewShortArray (this, val0); }
+ 
+   jintArray NewIntArray (jsize val0)
+   { return p->NewIntArray (this, val0); }
+ 
+   jlongArray NewLongArray (jsize val0)
+   { return p->NewLongArray (this, val0); }
+ 
+   jfloatArray NewFloatArray (jsize val0)
+   { return p->NewFloatArray (this, val0); }
+ 
+   jdoubleArray NewDoubleArray (jsize val0)
+   { return p->NewDoubleArray (this, val0); }
+ 
+   jboolean * GetBooleanArrayElements (jbooleanArray val0, jboolean * val1)
+   { return p->GetBooleanArrayElements (this, val0, val1); }
+ 
+   jbyte * GetByteArrayElements (jbyteArray val0, jboolean * val1)
+   { return p->GetByteArrayElements (this, val0, val1); }
+ 
+   jchar * GetCharArrayElements (jcharArray val0, jboolean * val1)
+   { return p->GetCharArrayElements (this, val0, val1); }
+ 
+   jshort * GetShortArrayElements (jshortArray val0, jboolean * val1)
+   { return p->GetShortArrayElements (this, val0, val1); }
+ 
+   jint * GetIntArrayElements (jintArray val0, jboolean * val1)
+   { return p->GetIntArrayElements (this, val0, val1); }
+ 
+   jlong * GetLongArrayElements (jlongArray val0, jboolean * val1)
+   { return p->GetLongArrayElements (this, val0, val1); }
+ 
+   jfloat * GetFloatArrayElements (jfloatArray val0, jboolean * val1)
+   { return p->GetFloatArrayElements (this, val0, val1); }
+ 
+   jdouble * GetDoubleArrayElements (jdoubleArray val0, jboolean * val1)
+   { return p->GetDoubleArrayElements (this, val0, val1); }
+ 
+   void ReleaseBooleanArrayElements (jbooleanArray val0, jboolean * val1, jint val2)
+   { p->ReleaseBooleanArrayElements (this, val0, val1, val2); }
+ 
+   void ReleaseByteArrayElements (jbyteArray val0, jbyte * val1, jint val2)
+   { p->ReleaseByteArrayElements (this, val0, val1, val2); }
+ 
+   void ReleaseCharArrayElements (jcharArray val0, jchar * val1, jint val2)
+   { p->ReleaseCharArrayElements (this, val0, val1, val2); }
+ 
+   void ReleaseShortArrayElements (jshortArray val0, jshort * val1, jint val2)
+   { p->ReleaseShortArrayElements (this, val0, val1, val2); }
+ 
+   void ReleaseIntArrayElements (jintArray val0, jint * val1, jint val2)
+   { p->ReleaseIntArrayElements (this, val0, val1, val2); }
+ 
+   void ReleaseLongArrayElements (jlongArray val0, jlong * val1, jint val2)
+   { p->ReleaseLongArrayElements (this, val0, val1, val2); }
+ 
+   void ReleaseFloatArrayElements (jfloatArray val0, jfloat * val1, jint val2)
+   { p->ReleaseFloatArrayElements (this, val0, val1, val2); }
+ 
+   void ReleaseDoubleArrayElements (jdoubleArray val0, jdouble * val1, jint val2)
+   { p->ReleaseDoubleArrayElements (this, val0, val1, val2); }
+ 
+   void GetBooleanArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+   { p->GetBooleanArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void GetByteArrayRegion (jbyteArray val0, jsize val1, jsize val2, jbyte * val3)
+   { p->GetByteArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void GetCharArrayRegion (jcharArray val0, jsize val1, jsize val2, jchar * val3)
+   { p->GetCharArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void GetShortArrayRegion (jshortArray val0, jsize val1, jsize val2, jshort * val3)
+   { p->GetShortArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void GetIntArrayRegion (jintArray val0, jsize val1, jsize val2, jint * val3)
+   { p->GetIntArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void GetLongArrayRegion (jlongArray val0, jsize val1, jsize val2, jlong * val3)
+   { p->GetLongArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void GetFloatArrayRegion (jfloatArray val0, jsize val1, jsize val2, jfloat * val3)
+   { p->GetFloatArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void GetDoubleArrayRegion (jdoubleArray val0, jsize val1, jsize val2, jdouble * val3)
+   { p->GetDoubleArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void SetBooleanArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+   { p->SetBooleanArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void SetByteArrayRegion (jbyteArray val0, jsize val1, jsize val2, jbyte * val3)
+   { p->SetByteArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void SetCharArrayRegion (jcharArray val0, jsize val1, jsize val2, jchar * val3)
+   { p->SetCharArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void SetShortArrayRegion (jshortArray val0, jsize val1, jsize val2, jshort * val3)
+   { p->SetShortArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void SetIntArrayRegion (jintArray val0, jsize val1, jsize val2, jint * val3)
+   { p->SetIntArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void SetLongArrayRegion (jlongArray val0, jsize val1, jsize val2, jlong * val3)
+   { p->SetLongArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void SetFloatArrayRegion (jfloatArray val0, jsize val1, jsize val2, jfloat * val3)
+   { p->SetFloatArrayRegion (this, val0, val1, val2, val3); }
+ 
+   void SetDoubleArrayRegion (jdoubleArray val0, jsize val1, jsize val2, jdouble * val3)
+   { p->SetDoubleArrayRegion (this, val0, val1, val2, val3); }
+ 
+   jint RegisterNatives (jclass cl0, const JNINativeMethod * val1, jint val2)
+   { return p->RegisterNatives (this, cl0, val1, val2); }
+ 
+   jint UnregisterNatives (jclass cl0)
+   { return p->UnregisterNatives (this, cl0); }
+ 
+   jint MonitorEnter (jobject obj0)
+   { return p->MonitorEnter (this, obj0); }
+ 
+   jint MonitorExit (jobject obj0)
+   { return p->MonitorExit (this, obj0); }
+ 
+   jint GetJavaVM (JavaVM ** val0)
+   { return p->GetJavaVM (this, val0); }
+ 
+   void GetStringRegion (jstring val0, jsize val1, jsize val2, jchar * val3)
+   { p->GetStringRegion (this, val0, val1, val2, val3); }
+ 
+   void GetStringUTFRegion (jstring val0, jsize val1, jsize val2, char * val3)
+   { p->GetStringUTFRegion (this, val0, val1, val2, val3); }
+ 
+   void * GetPrimitiveArrayCritical (jarray val0, jboolean * val1)
+   { return p->GetPrimitiveArrayCritical (this, val0, val1); }
+ 
+   void ReleasePrimitiveArrayCritical (jarray val0, void * val1, jint val2)
+   { p->ReleasePrimitiveArrayCritical (this, val0, val1, val2); }
+ 
+   const jchar * GetStringCritical (jstring val0, jboolean * val1)
+   { return p->GetStringCritical (this, val0, val1); }
+ 
+   void ReleaseStringCritical (jstring val0, const jchar * val1)
+   { p->ReleaseStringCritical (this, val0, val1); }
+ 
+   jweak NewWeakGlobalRef (jobject obj0)
+   { return p->NewWeakGlobalRef (this, obj0); }
+ 
+   void DeleteWeakGlobalRef (jweak val0)
+   { p->DeleteWeakGlobalRef (this, val0); }
+ 
+   jboolean ExceptionCheck ()
+   { return p->ExceptionCheck (this); }
+ 
+   jobject NewDirectByteBuffer (void *addr, jlong capacity)
+   { return p->NewDirectByteBuffer (this, addr, capacity); }
+ 
+   void *GetDirectBufferAddress (jobject buf)
+   { return p->GetDirectBufferAddress (this, buf); }
+ 
+   jlong GetDirectBufferCapacity (jobject buf)
+   { return p->GetDirectBufferCapacity (this, buf); }
+ };
+ 
+ #endif /* __cplusplus */
+ 
+ /*
+  * Invocation API.
+  */
+ 
+ struct JNIInvokeInterface
+ {
+   void *reserved0;
+   void *reserved1;
+   void *reserved2;
+ 
+   jint (JNICALL *DestroyJavaVM)         (JavaVM *);
+   jint (JNICALL *AttachCurrentThread)   (JavaVM *, void **, void *);
+   jint (JNICALL *DetachCurrentThread)   (JavaVM *);
+   jint (JNICALL *GetEnv)                (JavaVM *, void **, jint);
+   jint (JNICALL *AttachCurrentThreadAsDaemon) (JavaVM *, void **, void *);
+ };
+ 
+ #ifdef __cplusplus
+ 
+ class _Jv_JavaVM
+ {
+ public:
+   const struct JNIInvokeInterface *functions;
+ 
+   jint DestroyJavaVM ()
+   { return functions->DestroyJavaVM (this); }
+ 
+   jint AttachCurrentThread (void **penv, void *args)
+   { return functions->AttachCurrentThread (this, penv, args); }
+ 
+   jint DetachCurrentThread ()
+   { return functions->DetachCurrentThread (this); }
+ 
+   jint GetEnv (void **penv, jint version)
+   { return functions->GetEnv (this, penv, version); }
+ 
+   jint AttachCurrentThreadAsDaemon (void **penv, void *args)
+   { return functions->AttachCurrentThreadAsDaemon (this, penv, args); }
+ };
+ 
+ #endif /* __cplusplus */
+ 
+ typedef struct JavaVMAttachArgs
+ {
+   jint version;			/* Must be JNI_VERSION_1_2.  */
+   char *name;			/* The name of the thread (or NULL).  */
+   jobject group;		/* Global ref of a ThreadGroup object
+ 				   (or NULL).  */
+ } JavaVMAttachArgs;
+ 
+ typedef struct JavaVMOption
+ {
+   char *optionString;
+   void *extraInfo;
+ } JavaVMOption;
+ 
+ typedef struct JavaVMInitArgs
+ {
+   /* Must be JNI_VERSION_1_2.  */
+   jint version;
+ 
+   /* Number of options.  */
+   jint nOptions;
+ 
+   /* Options to the VM.  */
+   JavaVMOption *options;
+ 
+   /* Whether we should ignore unrecognized options.  */
+   jboolean ignoreUnrecognized;
+ } JavaVMInitArgs;
+ 
+ 
+ 
+ /* Keep c-font-lock-extra-types in alphabetical order. */
+ /* Local Variables: */
+ /* c-font-lock-extra-types: ("\\sw+_t" 
+    "JNIEnv" "JNINativeMethod" "JavaVM" "JavaVMOption" "jarray"
+    "jboolean" "jbooleanArray" "jbyte" "jbyteArray" "jchar"  "jcharArray" 
+    "jclass" "jdouble" "jdoubleArray" "jfieldID" "jfloat" "jfloatArray"
+    "jint" "jintArray" "jlong" "jlongArray" "jmethodID" "jobject" "jstring" "jthrowable" 
+    "jvalue" "jweak") */
+ /* End: */
+ 
+ #endif /* _CLASSPATH_JNI_H */
diff -Nrcpad gcc-4.0.2/libjava/classpath/include/jni_md-x86-linux-gnu.h gcc-4.1.0/libjava/classpath/include/jni_md-x86-linux-gnu.h
*** gcc-4.0.2/libjava/classpath/include/jni_md-x86-linux-gnu.h	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/include/jni_md-x86-linux-gnu.h	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,45 ----
+ /* jni_md.h
+    Copyright (C) 2001, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ As a special exception, if you link this library with other files to
+ produce an executable, this library does not by itself cause the
+ resulting executable to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why the
+ executable file might be covered by the GNU General Public License. */
+ 
+ #ifndef __CLASSPATH_JNI_MD_H__
+ #define __CLASSPATH_JNI_MD_H__
+ 
+ /* Define some defaults */
+ #define JNICALL
+ #define JNIEXPORT
+ #define JNIIMPORT
+ 
+ typedef unsigned char jboolean;
+ typedef signed char jbyte;
+ typedef unsigned short jchar;
+ typedef short jshort;
+ typedef int jint;
+ typedef long long jlong;
+ typedef float jfloat;
+ typedef double jdouble;
+ typedef jint jsize;
+ 
+ #endif /* __CLASSPATH_JNI_MD_H__ */
diff -Nrcpad gcc-4.0.2/libjava/classpath/install-sh gcc-4.1.0/libjava/classpath/install-sh
*** gcc-4.0.2/libjava/classpath/install-sh	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/install-sh	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,251 ----
+ #!/bin/sh
+ #
+ # install - install a program, script, or datafile
+ # This comes from X11R5 (mit/util/scripts/install.sh).
+ #
+ # Copyright 1991 by the Massachusetts Institute of Technology
+ #
+ # Permission to use, copy, modify, distribute, and sell this software and its
+ # documentation for any purpose is hereby granted without fee, provided that
+ # the above copyright notice appear in all copies and that both that
+ # copyright notice and this permission notice appear in supporting
+ # documentation, and that the name of M.I.T. not be used in advertising or
+ # publicity pertaining to distribution of the software without specific,
+ # written prior permission.  M.I.T. makes no representations about the
+ # suitability of this software for any purpose.  It is provided "as is"
+ # without express or implied warranty.
+ #
+ # Calling this script install-sh is preferred over install.sh, to prevent
+ # `make' implicit rules from creating a file called install from it
+ # when there is no Makefile.
+ #
+ # This script is compatible with the BSD install script, but was written
+ # from scratch.  It can only install one file at a time, a restriction
+ # shared with many OS's install programs.
+ 
+ 
+ # set DOITPROG to echo to test this script
+ 
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
+ doit="${DOITPROG-}"
+ 
+ 
+ # put in absolute paths if you don't have them in your path; or use env. vars.
+ 
+ mvprog="${MVPROG-mv}"
+ cpprog="${CPPROG-cp}"
+ chmodprog="${CHMODPROG-chmod}"
+ chownprog="${CHOWNPROG-chown}"
+ chgrpprog="${CHGRPPROG-chgrp}"
+ stripprog="${STRIPPROG-strip}"
+ rmprog="${RMPROG-rm}"
+ mkdirprog="${MKDIRPROG-mkdir}"
+ 
+ transformbasename=""
+ transform_arg=""
+ instcmd="$mvprog"
+ chmodcmd="$chmodprog 0755"
+ chowncmd=""
+ chgrpcmd=""
+ stripcmd=""
+ rmcmd="$rmprog -f"
+ mvcmd="$mvprog"
+ src=""
+ dst=""
+ dir_arg=""
+ 
+ while [ x"$1" != x ]; do
+     case $1 in
+ 	-c) instcmd="$cpprog"
+ 	    shift
+ 	    continue;;
+ 
+ 	-d) dir_arg=true
+ 	    shift
+ 	    continue;;
+ 
+ 	-m) chmodcmd="$chmodprog $2"
+ 	    shift
+ 	    shift
+ 	    continue;;
+ 
+ 	-o) chowncmd="$chownprog $2"
+ 	    shift
+ 	    shift
+ 	    continue;;
+ 
+ 	-g) chgrpcmd="$chgrpprog $2"
+ 	    shift
+ 	    shift
+ 	    continue;;
+ 
+ 	-s) stripcmd="$stripprog"
+ 	    shift
+ 	    continue;;
+ 
+ 	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ 	    shift
+ 	    continue;;
+ 
+ 	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ 	    shift
+ 	    continue;;
+ 
+ 	*)  if [ x"$src" = x ]
+ 	    then
+ 		src=$1
+ 	    else
+ 		# this colon is to work around a 386BSD /bin/sh bug
+ 		:
+ 		dst=$1
+ 	    fi
+ 	    shift
+ 	    continue;;
+     esac
+ done
+ 
+ if [ x"$src" = x ]
+ then
+ 	echo "install:	no input file specified"
+ 	exit 1
+ else
+ 	:
+ fi
+ 
+ if [ x"$dir_arg" != x ]; then
+ 	dst=$src
+ 	src=""
+ 	
+ 	if [ -d $dst ]; then
+ 		instcmd=:
+ 		chmodcmd=""
+ 	else
+ 		instcmd=$mkdirprog
+ 	fi
+ else
+ 
+ # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad 
+ # if $src (and thus $dsttmp) contains '*'.
+ 
+ 	if [ -f "$src" ] || [ -d "$src" ]
+ 	then
+ 		:
+ 	else
+ 		echo "install:  $src does not exist"
+ 		exit 1
+ 	fi
+ 	
+ 	if [ x"$dst" = x ]
+ 	then
+ 		echo "install:	no destination specified"
+ 		exit 1
+ 	else
+ 		:
+ 	fi
+ 
+ # If destination is a directory, append the input filename; if your system
+ # does not like double slashes in filenames, you may need to add some logic
+ 
+ 	if [ -d $dst ]
+ 	then
+ 		dst="$dst"/`basename $src`
+ 	else
+ 		:
+ 	fi
+ fi
+ 
+ ## this sed command emulates the dirname command
+ dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+ 
+ # Make sure that the destination directory exists.
+ #  this part is taken from Noah Friedman's mkinstalldirs script
+ 
+ # Skip lots of stat calls in the usual case.
+ if [ ! -d "$dstdir" ]; then
+ defaultIFS='
+ 	'
+ IFS="${IFS-${defaultIFS}}"
+ 
+ oIFS="${IFS}"
+ # Some sh's can't handle IFS=/ for some reason.
+ IFS='%'
+ set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+ IFS="${oIFS}"
+ 
+ pathcomp=''
+ 
+ while [ $# -ne 0 ] ; do
+ 	pathcomp="${pathcomp}${1}"
+ 	shift
+ 
+ 	if [ ! -d "${pathcomp}" ] ;
+         then
+ 		$mkdirprog "${pathcomp}"
+ 	else
+ 		:
+ 	fi
+ 
+ 	pathcomp="${pathcomp}/"
+ done
+ fi
+ 
+ if [ x"$dir_arg" != x ]
+ then
+ 	$doit $instcmd $dst &&
+ 
+ 	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi &&
+ 	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi &&
+ 	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi &&
+ 	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi
+ else
+ 
+ # If we're going to rename the final executable, determine the name now.
+ 
+ 	if [ x"$transformarg" = x ] 
+ 	then
+ 		dstfile=`basename $dst`
+ 	else
+ 		dstfile=`basename $dst $transformbasename | 
+ 			sed $transformarg`$transformbasename
+ 	fi
+ 
+ # don't allow the sed command to completely eliminate the filename
+ 
+ 	if [ x"$dstfile" = x ] 
+ 	then
+ 		dstfile=`basename $dst`
+ 	else
+ 		:
+ 	fi
+ 
+ # Make a temp file name in the proper directory.
+ 
+ 	dsttmp=$dstdir/#inst.$$#
+ 
+ # Move or copy the file name to the temp name
+ 
+ 	$doit $instcmd $src $dsttmp &&
+ 
+ 	trap "rm -f ${dsttmp}" 0 &&
+ 
+ # and set any options; do chmod last to preserve setuid bits
+ 
+ # If any of these fail, we abort the whole thing.  If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $instcmd $src $dsttmp" command.
+ 
+ 	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi &&
+ 	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi &&
+ 	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi &&
+ 	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi &&
+ 
+ # Now rename the file to the real destination.
+ 
+ 	$doit $rmcmd -f $dstdir/$dstfile &&
+ 	$doit $mvcmd $dsttmp $dstdir/$dstfile 
+ 
+ fi &&
+ 
+ 
+ exit 0
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/applet/Applet.java gcc-4.1.0/libjava/classpath/java/applet/Applet.java
*** gcc-4.0.2/libjava/classpath/java/applet/Applet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/applet/Applet.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,592 ----
+ /* Applet.java -- Java base applet class
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.applet;
+ 
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.GraphicsEnvironment;
+ import java.awt.HeadlessException;
+ import java.awt.Image;
+ import java.awt.Panel;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.util.Locale;
+ 
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleState;
+ import javax.accessibility.AccessibleStateSet;
+ import javax.sound.sampled.AudioSystem;
+ import javax.sound.sampled.Clip;
+ import javax.sound.sampled.LineUnavailableException;
+ import javax.sound.sampled.UnsupportedAudioFileException;
+ 
+ /**
+  * This is the base applet class.  An applet is a Java program that
+  * runs inside a web browser or other applet viewer in a restricted
+  * environment.
+  *
+  * <p>To be useful, a subclass should override at least start(). Also useful
+  * are init, stop, and destroy for control purposes, and getAppletInfo and
+  * getParameterInfo for descriptive purposes.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Applet extends Panel
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -5836846270535785031L;
+ 
+   /** The applet stub for this applet. */
+   private transient AppletStub stub;
+ 
+   /** Some applets call setSize in their constructors.  In that case,
+       these fields are used to store width and height values until a
+       stub is set. */
+   private transient int width;
+   private transient int height;
+ 
+   /**
+    * The accessibility context for this applet.
+    *
+    * @serial the accessibleContext for this
+    * @since 1.2
+    */
+   private AccessibleContext accessibleContext;
+ 
+   /**
+    * Default constructor for subclasses.
+    *
+    * @throws HeadlessException if in a headless environment
+    */
+   public Applet()
+   {
+     if (GraphicsEnvironment.isHeadless())
+       throw new HeadlessException();
+   }
+ 
+   /**
+    * The browser calls this method to set the applet's stub, which is the
+    * low level interface to the browser. Manually setting this to null is
+    * asking for problems down the road.
+    *
+    * @param stub the applet stub for this applet
+    */
+   public final void setStub(AppletStub stub)
+   {
+     this.stub = stub;
+ 
+     if (width != 0 && height != 0)
+       stub.appletResize (width, height);
+   }
+ 
+   /**
+    * Tests whether or not this applet is currently active. An applet is active
+    * just before the browser invokes start(), and becomes inactive just
+    * before the browser invokes stop().
+    *
+    * @return <code>true</code> if this applet is active
+    */
+   public boolean isActive()
+   {
+     return stub.isActive();
+   }
+ 
+   /**
+    * Returns the basename URL of the document this applet is embedded in. This
+    * is everything up to the final '/'.
+    *
+    * @return the URL of the document this applet is embedded in
+    * @see #getCodeBase()
+    */
+   public URL getDocumentBase()
+   {
+     return stub.getDocumentBase();
+   }
+ 
+   /**
+    * Returns the URL of the code base for this applet.
+    *
+    * @return the URL of the code base for this applet
+    */
+   public URL getCodeBase()
+   {
+     return stub.getCodeBase();
+   }
+ 
+   /**
+    * Returns the value of the specified parameter that was specified in
+    * the <code>&lt;APPLET&gt;</code> tag for this applet.
+    *
+    * @param name the parameter name
+    * @return the parameter value, or null if the parameter does not exist
+    * @throws NullPointerException if name is null
+    */
+   public String getParameter(String name)
+   {
+     return stub.getParameter(name);
+   }
+ 
+   /**
+    * Returns the applet context for this applet.
+    *
+    * @return the applet context for this applet
+    */
+   public AppletContext getAppletContext()
+   {
+     return stub.getAppletContext();
+   }
+ 
+   /**
+    * Requests that the applet window for this applet be resized.
+    *
+    * @param width the new width in pixels
+    * @param height the new height in pixels
+    */
+   public void resize(int width, int height)
+   {
+     if (stub == null)
+       {
+         this.width = width;
+         this.height = height;
+       }
+     else
+       stub.appletResize(width, height);
+   }
+ 
+   /**
+    * Requests that the applet window for this applet be resized.
+    *
+    * @param dim the requested dimensions
+    * @throws NullPointerException if dim is null
+    */
+   public void resize(Dimension dim)
+   {
+     resize(dim.width, dim.height);
+   }
+ 
+   /**
+    * Displays the specified message in the status window if that window
+    * exists.
+    *
+    * @param message the status message, may be null
+    */
+   public void showStatus(String message)
+   {
+     getAppletContext().showStatus(message);
+   }
+ 
+   /**
+    * Returns an image from the specified URL.  Note that the image is not
+    * actually retrieved until the applet attempts to display it, so this
+    * method returns immediately.
+    *
+    * @param url the URL of the image
+    * @return the retrieved image
+    * @throws NullPointerException if url is null
+    */
+   public Image getImage(URL url)
+   {
+     return getAppletContext().getImage(url);
+   }
+ 
+   /**
+    * Returns an image from the specified absolute URL, and relative path
+    * from that URL.  Note that the image is not actually retrieved until the
+    * applet attempts to display it, so this method returns immediately.
+    * This calls <code>getImage(new URL(url, name))</code>, but if building
+    * the new URL fails, this returns null.
+    *
+    * @param url the base URL of the image
+    * @param name the name of the image relative to the URL
+    * @return the retrieved image, or null on failure
+    * @see #getImage(URL)
+    */
+   public Image getImage(URL url, String name)
+   {
+     try
+       {
+ 	return getImage(new URL(url, name));
+       }
+     catch (MalformedURLException e)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns an audio clip from the specified URL. This clip is not tied to
+    * any particular applet.
+    *
+    * @param url the URL of the audio clip
+    * @return the retrieved audio clip
+    * @throws NullPointerException if url is null
+    * @see #getAudioClip(URL)
+    * @since 1.2
+    */
+   public static final AudioClip newAudioClip(URL url)
+   {
+     return new URLAudioClip(url);
+   }
+ 
+   /**
+    * Returns an audio clip from the specified URL. Note that the clip is not
+    * actually retrieved until the applet attempts to play it, so this method
+    * returns immediately.
+    *
+    * @param url the URL of the audio clip
+    * @return the retrieved audio clip
+    * @throws NullPointerException if url is null
+    */
+   public AudioClip getAudioClip(URL url)
+   {
+     return getAppletContext().getAudioClip(url);
+   }
+ 
+   /**
+    * Returns an audio clip from the specified absolute URL, and relative path
+    * from that URL.  Note that the clip is not actually retrieved until the
+    * applet attempts to play it, so this method returns immediately. This
+    * calls <code>getAudioClip(new URL(url, name))</code>, but if building
+    * the new URL fails, this returns null.
+    *
+    * @param url the base URL of the audio clip
+    * @param name the name of the clip relative to the URL
+    * @return the retrieved audio clip, or null on failure
+    * @see #getAudioClip(URL)
+    */
+   public AudioClip getAudioClip(URL url, String name)
+   {
+     try
+       {
+ 	return getAudioClip(new URL(url, name));
+       }
+     catch (MalformedURLException e)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns a descriptive string with applet defined information.  The
+    * implementation in this class returns <code>null</code>, so subclasses
+    * must override to return information.
+    *
+    * @return a string describing the author, version, and applet copyright
+    */
+   public String getAppletInfo()
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the locale for this applet, if it has been set.  If no applet
+    * specific locale has been set, the default locale is returned.
+    *
+    * @return the locale for this applet
+    * @see Component#setLocale(Locale)
+    * @since 1.1
+    */
+   public Locale getLocale()
+   {
+     return super.getLocale();
+   }
+ 
+   /**
+    * Returns a list of parameters this applet supports.  Each element of
+    * the outer array is an array of three strings with the name of the
+    * parameter, the data type or valid values, and a description.  This
+    * method is optional and the default implementation returns null.
+    *
+    * @return the list of parameters supported by this applet
+    */
+   public String[][] getParameterInfo()
+   {
+     return null;
+   }
+ 
+   /**
+    * Loads and plays the audio clip pointed to by the specified URL. This does
+    * nothing if the URL does not point to a valid audio clip.
+    *
+    * @param url the URL of the audio clip
+    * @throws NullPointerException if url is null
+    * @see #getAudioClip(URL)
+    */
+   public void play(URL url)
+   {
+     AudioClip ac = getAudioClip(url);
+     try
+       {
+ 	ac.play();
+       }
+     catch (Exception ignored)
+       {
+       }
+   }
+ 
+   /**
+    * Loads and plays the audio clip pointed to by the specified absolute URL,
+    * and relative path from that URL. This does nothing if the URL cannot be
+    * constructed, or if it does not point to a valid audio clip.
+    *
+    * @param url the base URL of the audio clip
+    * @param name the name of the audio clip relative to the URL
+    * @see #getAudioClip(URL, String)
+    * @see #play(URL)
+    */
+   public void play(URL url, String name)
+   {
+     try
+       {
+ 	getAudioClip(url, name).play();
+       }
+     catch (Exception ignored)
+       {
+       }
+   }
+ 
+   /**
+    * This method is called when the applet is first loaded, before start().
+    * The default implementation does nothing; override to do any one-time
+    * initialization.
+    *
+    * @see #start()
+    * @see #stop()
+    * @see #destroy()
+    */
+   public void init()
+   {
+   }
+ 
+   /**
+    * This method is called when the applet should start running.  This is
+    * normally each time a web page containing it is loaded.  The default
+    * implemention does nothing; override for your applet to be useful.
+    *
+    * @see #init()
+    * @see #stop()
+    * @see #destroy()
+    */
+   public void start()
+   {
+   }
+ 
+   /**
+    * This method is called when the applet should stop running.  This is
+    * normally when the next web page is loaded.  The default implementation
+    * does nothing; override for your applet to stop using resources when
+    * it is no longer visible, but may be restarted soon.
+    *
+    * @see #init()
+    * @see #start()
+    * @see #destroy()
+    */
+   public void stop()
+   {
+   }
+ 
+   /**
+    * This method is called when the applet is being unloaded.  The default
+    * implementation does nothing; override for your applet to clean up
+    * resources on exit.
+    *
+    * @see #init()
+    * @see #start()
+    * @see #stop()
+    */
+   public void destroy()
+   {
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this applet, creating one if
+    * necessary. This always returns an instance of {@link AccessibleApplet}.
+    *
+    * @return the accessibility context of this applet
+    * @since 1.3
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleApplet();
+     return accessibleContext;
+   }
+ 
+   /**
+    * Read an applet from an object stream. This checks for a headless
+    * environment, then does the normal read.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if a class is not found
+    * @throws IOException if deserialization fails
+    * @throws HeadlessException if this is a headless environment
+    * @see GraphicsEnvironment#isHeadless()
+    * @since 1.4
+    */
+   private void readObject(ObjectInputStream s)
+     throws ClassNotFoundException, IOException
+   {
+     if (GraphicsEnvironment.isHeadless())
+       throw new HeadlessException();
+     s.defaultReadObject();
+   }
+ 
+   /**
+    * This class provides accessibility support for Applets, and is the
+    * runtime type returned by {@link #getAccessibleContext()}.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.3
+    */
+   protected class AccessibleApplet extends AccessibleAWTPanel
+   {
+     /**
+      * Compatible with JDK 1.4+.
+      */
+     private static final long serialVersionUID = 8127374778187708896L;
+ 
+     /**
+      * The default constructor.
+      */
+     protected AccessibleApplet()
+     {
+     }
+ 
+     /**
+      * Get the role of this accessible object, a frame.
+      *
+      * @return the role of the object
+      * @see AccessibleRole#FRAME
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.FRAME;
+     }
+ 
+     /**
+      * Get the state set of this accessible object. In addition to the default
+      * states of a Component, the applet can also be active.
+      *
+      * @return the role of the object
+      * @see AccessibleState
+      */
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       AccessibleStateSet s = super.getAccessibleStateSet();
+       if (isActive())
+ 	s.add(AccessibleState.ACTIVE);
+       return s;
+     }
+   } // class AccessibleApplet
+ 
+   private static class URLAudioClip implements AudioClip
+   {
+     // The URL we will try to play.
+     // This is null if we have already tried to create an
+     // audio input stream from this URL.
+     private URL url;
+ 
+     // The real audio clip.  This is null before the URL is read,
+     // and might be null afterward if we were unable to read the URL
+     // for some reason.
+     private Clip clip;
+     
+     public URLAudioClip(URL url)
+     {
+       this.url = url;
+     }
+ 
+     private synchronized Clip getClip()
+     {
+       if (url == null)
+         return clip;
+       try
+         {
+           clip = AudioSystem.getClip();
+           clip.open(AudioSystem.getAudioInputStream(url));
+         }
+       catch (LineUnavailableException _)
+         {
+           // Ignore.
+         }
+       catch (IOException _)
+         {
+           // Ignore.
+         }
+       catch (UnsupportedAudioFileException _)
+         {
+           // Ignore.
+         }
+       url = null;
+       return clip;
+     }
+ 
+     public void loop()
+     {
+       Clip myclip = getClip();
+       if (myclip != null)
+         myclip.loop(Clip.LOOP_CONTINUOUSLY);
+     }
+ 
+     public void play()
+     {
+       Clip myclip = getClip();
+       if (myclip != null)
+         myclip.start();
+     }
+ 
+     public void stop()
+     {
+       Clip myclip = getClip();
+       if (myclip != null)
+         {
+           myclip.stop();
+           myclip.setFramePosition(0);
+         }
+     }
+   }
+ } // class Applet
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/applet/AppletContext.java gcc-4.1.0/libjava/classpath/java/applet/AppletContext.java
*** gcc-4.0.2/libjava/classpath/java/applet/AppletContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/applet/AppletContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,154 ----
+ /* AppletContext.java -- access the applet's runtime environment
+    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.applet;
+ 
+ import java.awt.Image;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.util.Enumeration;
+ import java.util.Iterator;
+ 
+ /**
+  * This interface allows an applet access to the browser to retrieve
+  * additional data files and display documents.  It also allows the
+  * applet to find out other applets in the same document.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface AppletContext
+ {
+   /**
+    * Returns an audio clip from the specified URL.
+    *
+    * @param url the URL of the audio clip
+    * @return the retrieved audio clip
+    * @throws NullPointerException if url is null
+    */
+   AudioClip getAudioClip(URL url);
+ 
+   /**
+    * Returns an image from the specified URL.  Note that the image is not
+    * actually retrieved until the applet attempts to display it, so this
+    * method returns immediately.
+    *
+    * @param url the absolute URL of the image
+    * @return the retrieved image
+    * @throws NullPointerException if url is null
+    */
+   Image getImage(URL url);
+ 
+   /**
+    * Returns the applet in the document for this object that has the
+    * specified name.
+    *
+    * @param name the applet name
+    * @return the requested applet, or <code>null</code> if not found
+    */
+   Applet getApplet(String name);
+ 
+   /**
+    * Returns a list of all the applets in the document for this object.
+    *
+    * @return a list of all the applets
+    */
+   Enumeration getApplets();
+ 
+   /**
+    * Displays the web page pointed to by the specified URL in the window
+    * for this object.  This page replaces the document that is currently
+    * there.
+    *
+    * @param url the URL of the web page to load; unspecified on an error
+    */
+   void showDocument(URL url);
+ 
+   /**
+    * Displays the web page pointed to be the sepcified URL in the window
+    * with the specified name.  The standard names "_top", "_blank",
+    * "_parent", and "_self" are allowed. An applet viewer may disregard
+    * this request.
+    *
+    * @param url the URL of the web page to load
+    * @param target the target window
+    */
+   void showDocument(URL url, String target);
+ 
+   /**
+    * Displays the specified message in the status window if that window
+    * exists.
+    *
+    * @param message the status message, may be null
+    */
+   void showStatus(String message);
+ 
+   /**
+    * Associate a stream to a key for this applet context, possibly replacing
+    * the old value. Stream associations are local to the applet context, for
+    * security purposes.
+    *
+    * @param key the key to associate with
+    * @param stream the stream value to tie to the key, or null to remove
+    * @throws IOException if the stream is too large
+    * @since 1.4
+    */
+   void setStream(String key, InputStream stream) throws IOException;
+ 
+   /**
+    * Return the stream associated with a given key in this applet context, or
+    * null if nothing is associated. Stream associations are local to the
+    * applet context, for security purposes.
+    *
+    * @param key the key to look up
+    * @return the associated stream, or null
+    * @since 1.4
+    */
+   InputStream getStream(String key);
+ 
+   /**
+    * Iterate over all keys that have associated streams. Stream associated
+    * are local to the applet context, for security purposes.
+    *
+    * @return an iterator over the association keys
+    * @since 1.4
+    */
+   Iterator getStreamKeys();
+ } // interface AppletContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/applet/AppletStub.java gcc-4.1.0/libjava/classpath/java/applet/AppletStub.java
*** gcc-4.0.2/libjava/classpath/java/applet/AppletStub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/applet/AppletStub.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,103 ----
+ /* AppletStub.java -- low level interface to the browser
+    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.applet;
+ 
+ import java.net.URL;
+ 
+ /**
+  * This interface is the low level interface between the applet and the
+  * browser.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Applet#setStub(AppletStub)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface AppletStub
+ {
+   /**
+    * Tests whether or not this applet is currently active. An applet is active
+    * just before the browser invokes start(), and becomes inactive just
+    * before the browser invokes stop().
+    *
+    * @return <code>true</code> if this applet is active
+    */
+   boolean isActive();
+ 
+   /**
+    * Returns the basename URL of the document this applet is embedded in. This
+    * is everything up to the final '/'.
+    *
+    * @return the URL of the document this applet is embedded in
+    * @see #getCodeBase()
+    */
+   URL getDocumentBase();
+ 
+   /**
+    * Returns the URL of the code base for this applet.
+    *
+    * @return the URL of the code base for this applet
+    */
+   URL getCodeBase();
+ 
+   /**
+    * Returns the value of the specified parameter that was specified in
+    * the <code>&lt;APPLET&gt;</code> tag for this applet.
+    *
+    * @param name the parameter name
+    * @return the parameter value, or null if the parameter does not exist
+    * @throws NullPointerException if name is null
+    */
+   String getParameter(String name);
+ 
+   /**
+    * Returns the applet context for this applet.
+    *
+    * @return the applet context for this applet
+    */
+   AppletContext getAppletContext();
+ 
+   /**
+    * Requests that the applet window for this applet be resized.
+    *
+    * @param width the new width in pixels
+    * @param height the new height in pixels
+    */
+   void appletResize(int width, int height);
+ } // interface AppletStub
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/applet/AudioClip.java gcc-4.1.0/libjava/classpath/java/applet/AudioClip.java
*** gcc-4.0.2/libjava/classpath/java/applet/AudioClip.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/applet/AudioClip.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /* AudioClip.java -- play an audio clip in an applet
+    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.applet;
+ 
+ 
+ /**
+  * This interface provides a simple mechanism for playing audio clips.
+  * If multiple clips are played at once, the browser combines them into a
+  * composite clip.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface AudioClip
+ {
+   /**
+    * Plays the audio clip starting from the beginning.
+    */
+   void play();
+ 
+   /**
+    * Stops playing this audio clip.  There is no mechanism for restarting
+    * at the point where the clip is stopped.
+    */
+   void stop();
+ 
+   /**
+    * Plays this audio clip in a continuous loop.
+    */
+   void loop();
+ } // interface AudioClip
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/applet/package.html gcc-4.1.0/libjava/classpath/java/applet/package.html
*** gcc-4.0.2/libjava/classpath/java/applet/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/applet/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.applet package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.applet</title></head>
+ 
+ <body>
+ <p>Classes and interfaces for small embeddable applications
+ often used in web pages.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/AWTError.java gcc-4.1.0/libjava/classpath/java/awt/AWTError.java
*** gcc-4.0.2/libjava/classpath/java/awt/AWTError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/AWTError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* AWTError.java -- A serious AWT error occurred.
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This error is thrown when a critical Abstract Window Toolkit (AWT) error
+  * occurs.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class AWTError extends Error
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -1819846354050686206L;
+ 
+   /**
+    * Create a new instance with the specified descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public AWTError(String message)
+   {
+     super(message);
+   }
+ } // class AWTError
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/AWTEvent.java gcc-4.1.0/libjava/classpath/java/awt/AWTEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/AWTEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/AWTEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,278 ----
+ 
+ /* AWTEvent.java -- the root event in AWT
+    Copyright (C) 1999, 2000, 2002, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.util.EventObject;
+ 
+ /**
+  * AWTEvent is the root event class for all AWT events in the JDK 1.1 event 
+  * model. It supersedes the Event class from JDK 1.0. Subclasses outside of
+  * the java.awt package should have IDs greater than RESERVED_ID_MAX.
+  *
+  * <p>Event masks defined here are used by components in
+  * <code>enableEvents</code> to select event types not selected by registered
+  * listeners. Event masks are appropriately set when registering on
+  * components.
+  *
+  * @author Warren Levy  (warrenl@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class AWTEvent extends EventObject
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -1825314779160409405L;
+ 
+   /**
+    * The ID of the event.
+    *
+    * @see #getID()
+    * @see #AWTEvent(Object, int)
+    * @serial the identifier number of this event
+    */
+   protected int id;
+ 
+   /**
+    * Indicates if the event has been consumed. False mean it is passed to
+    * the peer, true means it has already been processed. Semantic events
+    * generated by low-level events always have the value true.
+    *
+    * @see #consume()
+    * @see #isConsumed()
+    * @serial whether the event has been consumed
+    */
+   protected boolean consumed;
+ 
+   /**
+    * Who knows? It's in the serial version.
+    *
+    * @serial No idea what this is for.
+    */
+   byte[] bdata;
+ 
+   /** Mask for selecting component events. */
+   public static final long COMPONENT_EVENT_MASK = 0x00001;
+ 
+   /** Mask for selecting container events. */
+   public static final long CONTAINER_EVENT_MASK = 0x00002;
+ 
+   /** Mask for selecting component focus events. */
+   public static final long FOCUS_EVENT_MASK = 0x00004;
+ 
+   /** Mask for selecting keyboard events. */
+   public static final long KEY_EVENT_MASK = 0x00008;
+ 
+   /** Mask for mouse button events. */
+   public static final long MOUSE_EVENT_MASK = 0x00010;
+ 
+   /** Mask for mouse motion events. */
+   public static final long MOUSE_MOTION_EVENT_MASK = 0x00020;
+ 
+   /** Mask for window events. */
+   public static final long WINDOW_EVENT_MASK = 0x00040;
+ 
+   /** Mask for action events. */
+   public static final long ACTION_EVENT_MASK = 0x00080;
+ 
+   /** Mask for adjustment events. */
+   public static final long ADJUSTMENT_EVENT_MASK = 0x00100;
+ 
+   /** Mask for item events. */
+   public static final long ITEM_EVENT_MASK = 0x00200;
+ 
+   /** Mask for text events. */
+   public static final long TEXT_EVENT_MASK = 0x00400;
+ 
+   /**
+    * Mask for input method events.
+    * @since 1.3
+    */
+   public static final long INPUT_METHOD_EVENT_MASK = 0x00800;
+ 
+   /**
+    * Mask if input methods are enabled. Package visible only.
+    */
+   static final long INPUT_ENABLED_EVENT_MASK = 0x01000;
+ 
+   /**
+    * Mask for paint events.
+    * @since 1.3
+    */
+   public static final long PAINT_EVENT_MASK = 0x02000;
+ 
+   /**
+    * Mask for invocation events.
+    * @since 1.3
+    */
+   public static final long INVOCATION_EVENT_MASK = 0x04000;
+ 
+   /**
+    * Mask for hierarchy events.
+    * @since 1.3
+    */
+   public static final long HIERARCHY_EVENT_MASK = 0x08000;
+ 
+   /**
+    * Mask for hierarchy bounds events.
+    * @since 1.3
+    */
+   public static final long HIERARCHY_BOUNDS_EVENT_MASK = 0x10000;
+ 
+   /**
+    * Mask for mouse wheel events.
+    * @since 1.4
+    */
+   public static final long MOUSE_WHEEL_EVENT_MASK = 0x20000;
+ 
+   /**
+    * Mask for window state events.
+    * @since 1.4
+    */
+   public static final long WINDOW_STATE_EVENT_MASK = 0x40000;
+ 
+   /**
+    * Mask for window focus events.
+    * @since 1.4
+    */
+   public static final long WINDOW_FOCUS_EVENT_MASK = 0x80000;
+ 
+   /**
+   * This is the highest number for event ids that are reserved for use by
+   * the AWT system itself. Subclasses outside of java.awt should use higher
+   * ids.
+   */
+   public static final int RESERVED_ID_MAX = 1999;
+ 
+ 
+   /**
+    * Initializes a new AWTEvent from the old Java 1.0 event object.
+    *
+    * @param event the old-style event
+    * @throws NullPointerException if event is null
+    */
+   public AWTEvent(Event event)
+   {
+     this(event.target, event.id);
+     consumed = event.consumed;
+   }
+ 
+   /**
+    * Create an event on the specified source object and id.
+    *
+    * @param source the object that caused the event
+    * @param id the event id
+    * @throws IllegalArgumentException if source is null
+    */
+   public AWTEvent(Object source, int id)
+   {
+     super(source);
+     this.id = id;
+   }
+ 
+   /**
+    * Retarget the event, such as converting a heavyweight component to a
+    * lightweight child of the original. This is not for general use, but
+    * is for event targeting systems like KeyboardFocusManager.
+    *
+    * @param source the new source
+    */
+   public void setSource(Object source)
+   {
+     this.source = source;
+   }
+ 
+   /**
+    * Returns the event type id.
+    *
+    * @return the id number of this event
+    */
+   public int getID()
+   {
+     return id;
+   }
+ 
+   /**
+    * Create a string that represents this event in the format
+    * <code>classname[eventstring] on sourcecomponentname</code>.
+    *
+    * @return a string representing this event
+    */
+   public String toString ()
+   {
+     String string = getClass ().getName () + "[" + paramString () + "] on "
+     + source;
+ 
+     return string;
+   }
+ 
+   /**
+    * Returns a string representation of the state of this event. It may be
+    * empty, but must not be null; it is implementation defined.
+    *
+    * @return a string representation of this event
+    */
+   public String paramString()
+   {
+     return "";
+   }
+ 
+   /**
+    * Consumes this event so that it will not be processed in the default
+    * manner.
+    */
+   protected void consume()
+   {
+     consumed = true;
+   }
+ 
+   /**
+    * Tests whether not not this event has been consumed. A consumed event
+    * is not processed in the default manner.
+    *
+    * @return true if this event has been consumed
+    */
+   protected boolean isConsumed()
+   {
+     return consumed;
+   }
+ } // class AWTEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/AWTEventMulticaster.java gcc-4.1.0/libjava/classpath/java/awt/AWTEventMulticaster.java
*** gcc-4.0.2/libjava/classpath/java/awt/AWTEventMulticaster.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/AWTEventMulticaster.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1209 ----
+ /* AWTEventMulticaster.java -- allows multicast chaining of listeners
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.awt.event.AdjustmentEvent;
+ import java.awt.event.AdjustmentListener;
+ import java.awt.event.ComponentEvent;
+ import java.awt.event.ComponentListener;
+ import java.awt.event.ContainerEvent;
+ import java.awt.event.ContainerListener;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.event.HierarchyBoundsListener;
+ import java.awt.event.HierarchyEvent;
+ import java.awt.event.HierarchyListener;
+ import java.awt.event.InputMethodEvent;
+ import java.awt.event.InputMethodListener;
+ import java.awt.event.ItemEvent;
+ import java.awt.event.ItemListener;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.KeyListener;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.awt.event.MouseMotionListener;
+ import java.awt.event.MouseWheelEvent;
+ import java.awt.event.MouseWheelListener;
+ import java.awt.event.TextEvent;
+ import java.awt.event.TextListener;
+ import java.awt.event.WindowEvent;
+ import java.awt.event.WindowFocusListener;
+ import java.awt.event.WindowListener;
+ import java.awt.event.WindowStateListener;
+ import java.io.IOException;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.lang.reflect.Array;
+ import java.util.ArrayList;
+ import java.util.EventListener;
+ 
+ /**
+  * This class is used to implement a chain of event handlers.  Dispatching
+  * using this class is thread safe.  Here is a quick example of how to
+  * add and delete listeners using this class.  For this example, we will
+  * assume are firing <code>AdjustmentEvent</code>'s.  However, this
+  * same approach is useful for all events in the <code>java.awt.event</code>
+  * package, and more if this class is subclassed.
+  *
+  * <p><code>
+  * AdjustmentListener al;
+  * public void addAdjustmentListener(AdjustmentListener listener)
+  * {
+  *   al = AWTEventMulticaster.add(al, listener);
+  * }
+  * public void removeAdjustmentListener(AdjustmentListener listener)
+  * {
+  *   al = AWTEventMulticaster.remove(al, listener);
+  * }
+  * </code>
+  *
+  * <p>When it come time to process an event, simply call <code>al</code>,
+  * assuming it is not <code>null</code>, and all listeners in the chain will
+  * be fired.
+  *
+  * <p>The first time <code>add</code> is called it is passed
+  * <code>null</code> and <code>listener</code> as its arguments.  This
+  * starts building the chain.  This class returns <code>listener</code>
+  * which becomes the new <code>al</code>.  The next time, <code>add</code>
+  * is called with <code>al</code> and <code>listener</code> and the
+  * new listener is then chained to the old.
+  *
+  * @author Bryce McKinlay
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class AWTEventMulticaster
+   implements ComponentListener, ContainerListener, FocusListener, KeyListener,
+              MouseListener, MouseMotionListener, WindowListener,
+              WindowFocusListener, WindowStateListener, ActionListener,
+              ItemListener, AdjustmentListener, TextListener,
+              InputMethodListener, HierarchyListener, HierarchyBoundsListener,
+              MouseWheelListener
+ {
+   /**
+    * A variable in the event chain.
+    */
+   protected final EventListener a;
+ 
+   /**
+    * A variable in the event chain.
+    */
+   protected final EventListener b;
+ 
+   /**
+    * Initializes a new instance of <code>AWTEventMulticaster</code> with
+    * the specified event listener parameters. The parameters should not be
+    * null, although it is not required to enforce this with a
+    * NullPointerException.
+    *
+    * @param a the "a" listener object
+    * @param b the "b" listener object
+    */
+   protected AWTEventMulticaster(EventListener a, EventListener b)
+   {
+     this.a = a;
+     this.b = b;
+   }
+ 
+   /**
+    * Removes one instance of the specified listener from this multicaster
+    * chain. This descends recursively if either child is a multicaster, and
+    * returns a multicaster chain with the old listener removed.
+    *
+    * @param oldl the object to remove from this multicaster
+    * @return the resulting multicaster with the specified listener removed
+    */
+   protected EventListener remove(EventListener oldl)
+   {
+     // If oldl is an immediate child, return the other child.
+     if (a == oldl)
+       return b;
+     if (b == oldl)
+       return a;
+     // If a and/or b are Multicaster's, search them recursively.
+     if (a instanceof AWTEventMulticaster)
+       {
+         EventListener newa = ((AWTEventMulticaster) a).remove(oldl);
+         if (newa != a)
+           return new AWTEventMulticaster(newa, b);
+       }
+     if (b instanceof AWTEventMulticaster)
+       {
+         EventListener newb = ((AWTEventMulticaster) b).remove(oldl);
+         if (newb != b)
+           return new AWTEventMulticaster(a, newb);
+       }
+     // oldl was not found.
+     return this;
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void componentResized(ComponentEvent e)
+   {
+     ((ComponentListener) a).componentResized(e);
+     ((ComponentListener) b).componentResized(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void componentMoved(ComponentEvent e)
+   {
+     ((ComponentListener) a).componentMoved(e);
+     ((ComponentListener) b).componentMoved(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void componentShown(ComponentEvent e)
+   {
+     ((ComponentListener) a).componentShown(e);
+     ((ComponentListener) b).componentShown(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void componentHidden(ComponentEvent e)
+   {
+     ((ComponentListener) a).componentHidden(e);
+     ((ComponentListener) b).componentHidden(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void componentAdded(ContainerEvent e)
+   {
+     ((ContainerListener) a).componentAdded(e);
+     ((ContainerListener) b).componentAdded(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void componentRemoved(ContainerEvent e)
+   {
+     ((ContainerListener) a).componentRemoved(e);
+     ((ContainerListener) b).componentRemoved(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void focusGained(FocusEvent e)
+   {
+     ((FocusListener) a).focusGained(e);
+     ((FocusListener) b).focusGained(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void focusLost(FocusEvent e)
+   {
+     ((FocusListener) a).focusLost(e);
+     ((FocusListener) b).focusLost(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void keyTyped(KeyEvent e)
+   {
+     ((KeyListener) a).keyTyped(e);
+     ((KeyListener) b).keyTyped(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void keyPressed(KeyEvent e)
+   {
+     ((KeyListener) a).keyPressed(e);
+     ((KeyListener) b).keyPressed(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void keyReleased(KeyEvent e)
+   {
+     ((KeyListener) a).keyReleased(e);
+     ((KeyListener) b).keyReleased(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void mouseClicked(MouseEvent e)
+   {
+     ((MouseListener) a).mouseClicked(e);
+     ((MouseListener) b).mouseClicked(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void mousePressed(MouseEvent e)
+   {
+     ((MouseListener) a).mousePressed(e);
+     ((MouseListener) b).mousePressed(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void mouseReleased(MouseEvent e)
+   {
+     ((MouseListener) a).mouseReleased(e);
+     ((MouseListener) b).mouseReleased(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void mouseEntered(MouseEvent e)
+   {
+     ((MouseListener) a).mouseEntered(e);
+     ((MouseListener) b).mouseEntered(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void mouseExited(MouseEvent e)
+   {
+     ((MouseListener) a).mouseExited(e);
+     ((MouseListener) b).mouseExited(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void mouseDragged(MouseEvent e)
+   {
+     ((MouseMotionListener) a).mouseDragged(e);
+     ((MouseMotionListener) b).mouseDragged(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void mouseMoved(MouseEvent e)
+   {
+     ((MouseMotionListener) a).mouseMoved(e);
+     ((MouseMotionListener) b).mouseMoved(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void windowOpened(WindowEvent e)
+   {
+     ((WindowListener) a).windowOpened(e);
+     ((WindowListener) b).windowOpened(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void windowClosing(WindowEvent e)
+   {
+     ((WindowListener) a).windowClosing(e);
+     ((WindowListener) b).windowClosing(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void windowClosed(WindowEvent e)
+   {
+     ((WindowListener) a).windowClosed(e);
+     ((WindowListener) b).windowClosed(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void windowIconified(WindowEvent e)
+   {
+     ((WindowListener) a).windowIconified(e);
+     ((WindowListener) b).windowIconified(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void windowDeiconified(WindowEvent e)
+   {
+     ((WindowListener) a).windowDeiconified(e);
+     ((WindowListener) b).windowDeiconified(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void windowActivated(WindowEvent e)
+   {
+     ((WindowListener) a).windowActivated(e);
+     ((WindowListener) b).windowActivated(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void windowDeactivated(WindowEvent e)
+   {
+     ((WindowListener) a).windowDeactivated(e);
+     ((WindowListener) b).windowDeactivated(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    * @since 1.4
+    */
+   public void windowStateChanged(WindowEvent e)
+   {
+     ((WindowStateListener) a).windowStateChanged(e);
+     ((WindowStateListener) b).windowStateChanged(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    * @since 1.4
+    */
+   public void windowGainedFocus(WindowEvent e)
+   {
+     ((WindowFocusListener) a).windowGainedFocus(e);
+     ((WindowFocusListener) b).windowGainedFocus(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    * @since 1.4
+    */
+   public void windowLostFocus(WindowEvent e)
+   {
+     ((WindowFocusListener) a).windowLostFocus(e);
+     ((WindowFocusListener) b).windowLostFocus(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void actionPerformed(ActionEvent e)
+   {
+     ((ActionListener) a).actionPerformed(e);
+     ((ActionListener) b).actionPerformed(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void itemStateChanged(ItemEvent e)
+   {
+     ((ItemListener) a).itemStateChanged(e);
+     ((ItemListener) b).itemStateChanged(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void adjustmentValueChanged(AdjustmentEvent e)
+   {
+     ((AdjustmentListener) a).adjustmentValueChanged(e);
+     ((AdjustmentListener) b).adjustmentValueChanged(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    */
+   public void textValueChanged(TextEvent e)
+   {
+     ((TextListener) a).textValueChanged(e);
+     ((TextListener) b).textValueChanged(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    * @since 1.2
+    */
+   public void inputMethodTextChanged(InputMethodEvent e)
+   {
+     ((InputMethodListener) a).inputMethodTextChanged(e);
+     ((InputMethodListener) b).inputMethodTextChanged(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    * @since 1.2
+    */
+   public void caretPositionChanged(InputMethodEvent e)
+   {
+     ((InputMethodListener) a).caretPositionChanged(e);
+     ((InputMethodListener) b).caretPositionChanged(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    * @since 1.3
+    */
+   public void hierarchyChanged(HierarchyEvent e)
+   {
+     ((HierarchyListener) a).hierarchyChanged(e);
+     ((HierarchyListener) b).hierarchyChanged(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    * @since 1.3
+    */
+   public void ancestorMoved(HierarchyEvent e)
+   {
+     ((HierarchyBoundsListener) a).ancestorMoved(e);
+     ((HierarchyBoundsListener) b).ancestorMoved(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    * @since 1.3
+    */
+   public void ancestorResized(HierarchyEvent e)
+   {
+     ((HierarchyBoundsListener) a).ancestorResized(e);
+     ((HierarchyBoundsListener) b).ancestorResized(e);
+   }
+ 
+   /**
+    * Handles this event by dispatching it to the "a" and "b" listener
+    * instances.
+    *
+    * @param e the event to handle
+    * @since 1.4
+    */
+   public void mouseWheelMoved(MouseWheelEvent e)
+   {
+     ((MouseWheelListener) a).mouseWheelMoved(e);
+     ((MouseWheelListener) b).mouseWheelMoved(e);
+   }
+ 
+   /**
+    * Chain <code>ComponentListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static ComponentListener add(ComponentListener a, ComponentListener b)
+   {
+     return (ComponentListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>ContainerListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static ContainerListener add(ContainerListener a, ContainerListener b)
+   {
+     return (ContainerListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>FocusListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static FocusListener add(FocusListener a, FocusListener b)
+   {
+     return (FocusListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>KeyListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static KeyListener add(KeyListener a, KeyListener b)
+   {
+     return (KeyListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>MouseListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static MouseListener add(MouseListener a, MouseListener b)
+   {
+     return (MouseListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>MouseMotionListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static MouseMotionListener add(MouseMotionListener a,
+                                         MouseMotionListener b)
+   {
+     return (MouseMotionListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>WindowListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null 
+    * @return latest entry in the chain
+    */
+   public static WindowListener add(WindowListener a, WindowListener b)
+   {
+     return (WindowListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>WindowStateListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null 
+    * @return latest entry in the chain
+    * @since 1.4
+    */
+   public static WindowStateListener add(WindowStateListener a,
+                                         WindowStateListener b)
+   {
+     return (WindowStateListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>WindowFocusListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null 
+    * @return latest entry in the chain
+    * @since 1.4
+    */
+   public static WindowFocusListener add(WindowFocusListener a,
+                                         WindowFocusListener b)
+   {
+     return (WindowFocusListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>ActionListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static ActionListener add(ActionListener a, ActionListener b)
+   {
+     return (ActionListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>ItemListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static ItemListener add(ItemListener a, ItemListener b)
+   {
+     return (ItemListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>AdjustmentListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static AdjustmentListener add(AdjustmentListener a,
+                                        AdjustmentListener b)
+   {
+     return (AdjustmentListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>AdjustmentListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    */
+   public static TextListener add(TextListener a, TextListener b)
+   {
+     return (TextListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>InputMethodListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    * @since 1.2
+    */
+   public static InputMethodListener add(InputMethodListener a,
+                                         InputMethodListener b)
+   {
+     return (InputMethodListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>HierarchyListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    * @since 1.3
+    */
+   public static HierarchyListener add(HierarchyListener a, HierarchyListener b)
+   {
+     return (HierarchyListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>HierarchyBoundsListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    * @since 1.3
+    */
+   public static HierarchyBoundsListener add(HierarchyBoundsListener a,
+                                             HierarchyBoundsListener b)
+   {
+     return (HierarchyBoundsListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Chain <code>MouseWheelListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null
+    * @return latest entry in the chain
+    * @since 1.4
+    */
+   public static MouseWheelListener add(MouseWheelListener a,
+                                        MouseWheelListener b)
+   {
+     return (MouseWheelListener) addInternal(a, b);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static ComponentListener remove(ComponentListener l,
+                                          ComponentListener oldl)
+   {
+     return (ComponentListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static ContainerListener remove(ContainerListener l,
+                                          ContainerListener oldl)
+   {
+     return (ContainerListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static FocusListener remove(FocusListener l, FocusListener oldl)
+   {
+     return (FocusListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static KeyListener remove(KeyListener l, KeyListener oldl)
+   {
+     return (KeyListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static MouseListener remove(MouseListener l, MouseListener oldl)
+   {
+     return (MouseListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static MouseMotionListener remove(MouseMotionListener l,
+                                            MouseMotionListener oldl)
+   {
+     return (MouseMotionListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static WindowListener remove(WindowListener l, WindowListener oldl)
+   {
+     return (WindowListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    * @since 1.4
+    */
+   public static WindowStateListener remove(WindowStateListener l,
+                                            WindowStateListener oldl)
+   {
+     return (WindowStateListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    * @since 1.4
+    */
+   public static WindowFocusListener remove(WindowFocusListener l,
+                                            WindowFocusListener oldl)
+   {
+     return (WindowFocusListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static ActionListener remove(ActionListener l, ActionListener oldl)
+   {
+     return (ActionListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static ItemListener remove(ItemListener l, ItemListener oldl)
+   {
+     return (ItemListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static AdjustmentListener remove(AdjustmentListener l,
+                                           AdjustmentListener oldl)
+   {
+     return (AdjustmentListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   public static TextListener remove(TextListener l, TextListener oldl)
+   {
+     return (TextListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    * @since 1.2
+    */
+   public static InputMethodListener remove(InputMethodListener l,
+                                            InputMethodListener oldl)
+   {
+     return (InputMethodListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    * @since 1.3
+    */
+   public static HierarchyListener remove(HierarchyListener l,
+                                          HierarchyListener oldl)
+   {
+     return (HierarchyListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    * @since 1.3
+    */
+   public static HierarchyBoundsListener remove(HierarchyBoundsListener l,
+                                                HierarchyBoundsListener oldl)
+   {
+     return (HierarchyBoundsListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    * @since 1.4
+    */
+   public static MouseWheelListener remove(MouseWheelListener l,
+                                           MouseWheelListener oldl)
+   {
+     return (MouseWheelListener) removeInternal(l, oldl);
+   }
+ 
+   /**
+    * Chain <code>EventListener</code> a and b.
+    *
+    * @param a the "a" listener, may be null
+    * @param b the "b" listener, may be null 
+    * @return latest entry in the chain
+    */
+   protected static EventListener addInternal(EventListener a, EventListener b)
+   {
+     if (a == null)
+       return b;
+     if (b == null)
+       return a;
+     return new AWTEventMulticaster(a, b);
+   }
+ 
+   /**
+    * Removes the listener <code>oldl</code> from the listener <code>l</code>.
+    *
+    * @param l the listener chain to reduce
+    * @param oldl the listener to remove
+    * @return the resulting listener chain
+    */
+   protected static EventListener removeInternal(EventListener l,
+                                                 EventListener oldl)
+   {
+     if (l == oldl)
+       return null;
+     if (l instanceof AWTEventMulticaster)
+       return ((AWTEventMulticaster) l).remove(oldl);
+     return l;
+   }
+ 
+   /**
+    * Saves all Serializable listeners to a serialization stream.
+    *
+    * @param s the stream to save to
+    * @param k a prefix stream put before each serializable listener
+    * @throws IOException if serialization fails
+    */
+   protected void saveInternal(ObjectOutputStream s, String k)
+     throws IOException
+   {
+     // This is not documented by Sun, but I think it is correct.
+     if (a instanceof AWTEventMulticaster)
+       ((AWTEventMulticaster) a).saveInternal(s, k);
+     else if (a instanceof Serializable)
+       {
+         s.writeObject(k);
+         s.writeObject(a);
+       }
+     if (b instanceof AWTEventMulticaster)
+       ((AWTEventMulticaster) b).saveInternal(s, k);
+     else if (b instanceof Serializable)
+       {
+         s.writeObject(k);
+         s.writeObject(b);
+       }
+   }
+ 
+   /**
+    * Saves a Serializable listener chain to a serialization stream.
+    *
+    * @param s the stream to save to
+    * @param k a prefix stream put before each serializable listener
+    * @param l the listener chain to save
+    * @throws IOException if serialization fails
+    */
+   protected static void save(ObjectOutputStream s, String k, EventListener l)
+     throws IOException
+   {
+     // This is not documented by Sun, but I think it is correct.
+     if (l instanceof AWTEventMulticaster)
+       ((AWTEventMulticaster) l).saveInternal(s, k);
+     else if (l instanceof Serializable)
+       {
+         s.writeObject(k);
+         s.writeObject(l);
+       }
+   }
+ 
+   /**
+    * Returns an array of all chained listeners of the specified type in the
+    * given chain. A null listener returns an empty array, and a listener
+    * which is not an AWTEventMulticaster returns an array of one element. If
+    * no listeners in the chain are of the specified type, an empty array is
+    * returned.
+    *
+    * @param l the listener chain to convert to an array
+    * @param type the type of listeners to collect
+    * @return an array of the listeners of that type in the chain
+    * @throws ClassCastException if type is not assignable from EventListener
+    * @throws NullPointerException if type is null
+    * @throws IllegalArgumentException if type is Void.TYPE
+    * @since 1.4
+    */
+   public static EventListener[] getListeners(EventListener l, Class type)
+   {
+     ArrayList list = new ArrayList();
+     if (l instanceof AWTEventMulticaster)
+       ((AWTEventMulticaster) l).getListeners(list, type);
+     else if (type.isInstance(l))
+       list.add(l);
+     EventListener[] r = (EventListener[]) Array.newInstance(type, list.size());
+     list.toArray(r);
+     return r;
+   }
+ 
+   /**
+    * Collects all instances of the given type in the chain into the list.
+    *
+    * @param l the list to collect into
+    * @param type the type of listeners to collect
+    * @throws NullPointerException if type is null
+    * @see #getListeners(EventListener, Class)
+    */
+   private void getListeners(ArrayList l, Class type)
+   {
+     if (a instanceof AWTEventMulticaster)
+       ((AWTEventMulticaster) a).getListeners(l, type);
+     else if (type.isInstance(a))
+       l.add(a);
+     if (b instanceof AWTEventMulticaster)
+       ((AWTEventMulticaster) b).getListeners(l, type);
+     else if (type.isInstance(b))
+       l.add(b);
+   }
+ } // class AWTEventMulticaster
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/AWTException.java gcc-4.1.0/libjava/classpath/java/awt/AWTException.java
*** gcc-4.0.2/libjava/classpath/java/awt/AWTException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/AWTException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* AWTException.java -- Generic AWT exception
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This is a generic exception that indicates an exception occurred in the
+  * Abstract Window Toolkit (AWT) system.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class AWTException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -1900414231151323879L;
+ 
+   /**
+    * Create a new instance with the  specified detailed error message.
+    *
+    * @param message the detailed error message
+    */
+   public AWTException(String message)
+   {
+     super(message);
+   }
+ } // class AWTException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/AWTKeyStroke.java gcc-4.1.0/libjava/classpath/java/awt/AWTKeyStroke.java
*** gcc-4.0.2/libjava/classpath/java/awt/AWTKeyStroke.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/AWTKeyStroke.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,672 ----
+ /* AWTKeyStroke.java -- an immutable key stroke
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.InputEvent;
+ import java.awt.event.KeyEvent;
+ import java.io.ObjectStreamException;
+ import java.io.Serializable;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.InvocationTargetException;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.security.PrivilegedActionException;
+ import java.security.PrivilegedExceptionAction;
+ import java.util.HashMap;
+ import java.util.LinkedHashMap;
+ import java.util.Map;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * This class mirrors KeyEvents, representing both low-level key presses and
+  * key releases, and high level key typed inputs. However, this class forms
+  * immutable strokes, and can be efficiently reused via the factory methods
+  * for creating them.
+  *
+  * <p>For backwards compatibility with Swing, this supports a way to build
+  * instances of a subclass, using reflection, provided the subclass has a
+  * no-arg constructor (of any accessibility).
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see #getAWTKeyStroke(char)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class AWTKeyStroke implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = -6430539691155161871L;
+ 
+   /** The mask for modifiers. */
+   private static final int MODIFIERS_MASK = 0x3fef;
+ 
+   /**
+    * The cache of recently created keystrokes. This maps KeyStrokes to
+    * KeyStrokes in a cache which removes the least recently accessed entry,
+    * under the assumption that garbage collection of a new keystroke is
+    * easy when we find the old one that it matches in the cache.
+    */
+   private static final LinkedHashMap cache = new LinkedHashMap(11, 0.75f, true)
+   {
+     /** The largest the keystroke cache can grow. */
+     private static final int MAX_CACHE_SIZE = 2048;
+ 
+     /** Prune stale entries. */
+     protected boolean removeEldestEntry(Map.Entry eldest)
+     {	// XXX - FIXME Use Map.Entry, not just Entry  as gcj 3.1 workaround.
+       return size() > MAX_CACHE_SIZE;
+     }
+   };
+ 
+   /** The most recently generated keystroke, or null. */
+   private static AWTKeyStroke recent;
+ 
+   /**
+    * The no-arg constructor of a subclass, or null to use AWTKeyStroke. Note
+    * that this will be left accessible, to get around private access; but
+    * it should not be a security risk as it is highly unlikely that creating
+    * protected instances of the subclass via reflection will do much damage.
+    */
+   private static Constructor ctor;
+ 
+   /**
+    * A table of keyCode names to values.  This is package-private to
+    * avoid an accessor method.
+    *
+    * @see #getAWTKeyStroke(String)
+    */
+   static final HashMap vktable = new HashMap();
+   static
+   {
+     // Using reflection saves the hassle of keeping this in sync with KeyEvent,
+     // at the price of an expensive initialization.
+     AccessController.doPrivileged(new PrivilegedAction()
+       {
+         public Object run()
+         {
+           Field[] fields = KeyEvent.class.getFields();
+           int i = fields.length;
+           try
+             {
+               while (--i >= 0)
+                 {
+                   Field f = fields[i];
+                   String name = f.getName();
+                   if (name.startsWith("VK_"))
+                     vktable.put(name.substring(3), f.get(null));
+                 }
+             }
+           catch (Exception e)
+             {
+               throw (Error) new InternalError().initCause(e);
+             }
+           return null;
+         }
+       });
+   }
+ 
+   /**
+    * The typed character, or CHAR_UNDEFINED for key presses and releases.
+    *
+    * @serial the keyChar
+    */
+   private char keyChar;
+ 
+   /**
+    * The virtual key code, or VK_UNDEFINED for key typed. Package visible for
+    * use by Component.
+    *
+    * @serial the keyCode
+    */
+   int keyCode;
+ 
+   /**
+    * The modifiers in effect. To match Sun, this stores the old style masks
+    * for shift, control, alt, meta, and alt-graph (but not button1); as well
+    * as the new style of extended modifiers for all modifiers.
+    *
+    * @serial bitwise or of the *_DOWN_MASK modifiers
+    */
+   private int modifiers;
+ 
+   /**
+    * True if this is a key release; should only be true if keyChar is
+    * CHAR_UNDEFINED.
+    *
+    * @serial true to distinguish key pressed from key released
+    */
+   private boolean onKeyRelease;
+ 
+   /**
+    * Construct a keystroke with default values: it will be interpreted as a
+    * key typed event with an invalid character and no modifiers. Client code
+    * should use the factory methods instead.
+    *
+    * @see #getAWTKeyStroke(char)
+    * @see #getAWTKeyStroke(Character, int)
+    * @see #getAWTKeyStroke(int, int, boolean)
+    * @see #getAWTKeyStroke(int, int)
+    * @see #getAWTKeyStrokeForEvent(KeyEvent)
+    * @see #getAWTKeyStroke(String)
+    */
+   protected AWTKeyStroke()
+   {
+     keyChar = KeyEvent.CHAR_UNDEFINED;
+   }
+ 
+   /**
+    * Construct a keystroke with the given values. Client code should use the
+    * factory methods instead.
+    *
+    * @param keyChar the character entered, if this is a key typed
+    * @param keyCode the key pressed or released, or VK_UNDEFINED for key typed
+    * @param modifiers the modifier keys for the keystroke, in old or new style
+    * @param onKeyRelease true if this is a key release instead of a press
+    * @see #getAWTKeyStroke(char)
+    * @see #getAWTKeyStroke(Character, int)
+    * @see #getAWTKeyStroke(int, int, boolean)
+    * @see #getAWTKeyStroke(int, int)
+    * @see #getAWTKeyStrokeForEvent(KeyEvent)
+    * @see #getAWTKeyStroke(String)
+    */
+   protected AWTKeyStroke(char keyChar, int keyCode, int modifiers,
+                          boolean onKeyRelease)
+   {
+     this.keyChar = keyChar;
+     this.keyCode = keyCode;
+     // No need to call extend(), as only trusted code calls this constructor.
+     this.modifiers = modifiers;
+     this.onKeyRelease = onKeyRelease;
+   }
+ 
+   /**
+    * Registers a new subclass as being the type of keystrokes to generate in
+    * the factory methods. This operation flushes the cache of stored keystrokes
+    * if the class differs from the current one. The new class must be
+    * AWTKeyStroke or a subclass, and must have a no-arg constructor (which may
+    * be private).
+    *
+    * @param subclass the new runtime type of generated keystrokes
+    * @throws IllegalArgumentException subclass doesn't have no-arg constructor
+    * @throws ClassCastException subclass doesn't extend AWTKeyStroke
+    */
+   protected static void registerSubclass(final Class subclass)
+   {
+     if (subclass == null)
+       throw new IllegalArgumentException();
+     if (subclass.equals(ctor == null ? AWTKeyStroke.class
+                         : ctor.getDeclaringClass()))
+       return;
+     if (subclass.equals(AWTKeyStroke.class))
+        {
+          cache.clear();
+          recent = null;
+          ctor = null;
+          return;
+        }
+     try
+       {
+         ctor = (Constructor) AccessController.doPrivileged
+           (new PrivilegedExceptionAction()
+             {
+               public Object run()
+                 throws NoSuchMethodException, InstantiationException,
+                        IllegalAccessException, InvocationTargetException
+               {
+                 Constructor c = subclass.getDeclaredConstructor(null);
+                 c.setAccessible(true);
+                 // Create a new instance, to make sure that we can, and
+                 // to cause any ClassCastException.
+                 AWTKeyStroke dummy = (AWTKeyStroke) c.newInstance(null);
+                 return c;
+               }
+             });
+       }
+     catch (PrivilegedActionException e)
+       {
+         // e.getCause() will not ever be ClassCastException; that should
+         // escape on its own.
+         throw (RuntimeException)
+           new IllegalArgumentException().initCause(e.getCause());
+       }
+     cache.clear();
+     recent = null;
+   }
+ 
+   /**
+    * Returns a keystroke representing a typed character.
+    *
+    * @param keyChar the typed character 
+    * @return the specified keystroke
+    */
+   public static AWTKeyStroke getAWTKeyStroke(char keyChar)
+   {
+     return getAWTKeyStroke(keyChar, KeyEvent.VK_UNDEFINED, 0, false);
+   }
+ 
+   /**
+    * Returns a keystroke representing a typed character with the given
+    * modifiers. Note that keyChar is a <code>Character</code> instead of a
+    * <code>char</code> to avoid accidental ambiguity with
+    * <code>getAWTKeyStroke(int, int)</code>. The modifiers are the bitwise
+    * or of the masks found in {@link InputEvent}; the new style (*_DOWN_MASK)
+    * is preferred, but the old style will work.
+    *
+    * @param keyChar the typed character
+    * @param modifiers the modifiers, or 0
+    * @return the specified keystroke
+    * @throws IllegalArgumentException if keyChar is null
+    */
+   public static AWTKeyStroke getAWTKeyStroke(Character keyChar, int modifiers)
+   {
+     if (keyChar == null)
+       throw new IllegalArgumentException();
+     return getAWTKeyStroke(keyChar.charValue(), KeyEvent.VK_UNDEFINED,
+                            extend(modifiers), false);
+   }
+ 
+   /**
+    * Returns a keystroke representing a pressed or released key event, with
+    * the given modifiers. The "virtual key" should be one of the VK_*
+    * constants in {@link KeyEvent}. The modifiers are the bitwise or of the
+    * masks found in {@link InputEvent}; the new style (*_DOWN_MASK) is
+    * preferred, but the old style will work.
+    *
+    * @param keyCode the virtual key
+    * @param modifiers the modifiers, or 0
+    * @param release true if this is a key release instead of a key press
+    * @return the specified keystroke
+    */
+   public static AWTKeyStroke getAWTKeyStroke(int keyCode, int modifiers,
+                                              boolean release)
+   {
+     return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, keyCode,
+                            extend(modifiers), release);
+   }
+ 
+   /**
+    * Returns a keystroke representing a pressed key event, with the given
+    * modifiers. The "virtual key" should be one of the VK_* constants in
+    * {@link KeyEvent}. The modifiers are the bitwise or of the masks found
+    * in {@link InputEvent}; the new style (*_DOWN_MASK) is preferred, but the
+    * old style will work.
+    *
+    * @param keyCode the virtual key
+    * @param modifiers the modifiers, or 0
+    * @return the specified keystroke
+    */
+   public static AWTKeyStroke getAWTKeyStroke(int keyCode, int modifiers)
+   {
+     return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, keyCode,
+                            extend(modifiers), false);
+   }
+ 
+   /**
+    * Returns a keystroke representing what caused the key event.
+    *
+    * @param event the key event to convert
+    * @return the specified keystroke, or null if the event is invalid
+    * @throws NullPointerException if event is null
+    */
+   public static AWTKeyStroke getAWTKeyStrokeForEvent(KeyEvent event)
+   {
+     switch (event.id)
+       {
+       case KeyEvent.KEY_TYPED:
+         return getAWTKeyStroke(event.getKeyChar(), KeyEvent.VK_UNDEFINED,
+                                extend(event.getModifiersEx()), false);
+       case KeyEvent.KEY_PRESSED:
+         return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, event.getKeyCode(),
+                                extend(event.getModifiersEx()), false);
+       case KeyEvent.KEY_RELEASED:
+         return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, event.getKeyCode(),
+                                extend(event.getModifiersEx()), true);
+       default:
+         return null;
+       }
+   }
+ 
+   /**
+    * Parses a string and returns the keystroke that it represents. The syntax
+    * for keystrokes is listed below, with tokens separated by an arbitrary
+    * number of spaces:
+    * <pre>
+    * keyStroke := &lt;modifiers&gt;* ( &lt;typedID&gt; | &lt;codeID&gt; )
+    * modifiers := ( shift | control | ctrl | meta | alt
+    *                | button1 | button2 | button3 )
+    * typedID := typed &lt;single Unicode character&gt;
+    * codeID := ( pressed | released )? &lt;name&gt;
+    * name := &lt;the KeyEvent field name less the leading "VK_"&gt;
+    * </pre>
+    *
+    * <p>Note that the grammar is rather weak, and not all valid keystrokes
+    * can be generated in this manner (for example, a typed space, or anything
+    * with the alt-graph modifier!). The output of AWTKeyStroke.toString()
+    * will not meet the grammar. If pressed or released is not specified,
+    * pressed is assumed. Examples:<br>
+    * <code>
+    * "INSERT" =&gt; getAWTKeyStroke(KeyEvent.VK_INSERT, 0);<br>
+    * "control DELETE" =&gt;
+    *    getAWTKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK);<br>
+    * "alt shift X" =&gt; getAWTKeyStroke(KeyEvent.VK_X,
+    *    InputEvent.ALT_MASK | InputEvent.SHIFT_MASK);<br>
+    * "alt shift released X" =&gt; getAWTKeyStroke(KeyEvent.VK_X,
+    *    InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);<br>
+    * "typed a" =&gt; getAWTKeyStroke('a');
+    * </code>      
+    *
+    * @param s the string to parse
+    * @throws IllegalArgumentException if s is null or cannot be parsed
+    * @return the specified keystroke
+    */
+   public static AWTKeyStroke getAWTKeyStroke(String s)
+   {
+     if (s == null)
+       throw new IllegalArgumentException("null argument");
+     StringTokenizer t = new StringTokenizer(s, " ");
+     if (! t.hasMoreTokens())
+       throw new IllegalArgumentException("no tokens '" + s + "'");
+     int modifiers = 0;
+     boolean released = false;
+     String token = null;
+     do
+       {
+         token = t.nextToken();
+         if ("shift".equals(token))
+ 	  {
+ 	    modifiers |= KeyEvent.SHIFT_MASK;
+ 	    modifiers |= KeyEvent.SHIFT_DOWN_MASK;
+ 	  }
+         else if ("ctrl".equals(token) || "control".equals(token))
+ 	  {
+ 	    modifiers |= KeyEvent.CTRL_MASK;
+ 	    modifiers |= KeyEvent.CTRL_DOWN_MASK;
+ 	  }
+         else if ("meta".equals(token))
+ 	  {
+ 	    modifiers |= KeyEvent.META_MASK;
+ 	    modifiers |= KeyEvent.META_DOWN_MASK;
+ 	  }
+         else if ("alt".equals(token))
+ 	  {
+ 	    modifiers |= KeyEvent.ALT_MASK;
+ 	    modifiers |= KeyEvent.ALT_DOWN_MASK;
+ 	  }
+         else if ("button1".equals(token))
+           modifiers |= KeyEvent.BUTTON1_DOWN_MASK;
+         else if ("button2".equals(token))
+           modifiers |= KeyEvent.BUTTON2_DOWN_MASK;
+         else if ("button3".equals(token))
+           modifiers |= KeyEvent.BUTTON3_DOWN_MASK;
+         else if ("typed".equals(token))
+           {
+             if (t.hasMoreTokens())
+               {
+                 token = t.nextToken();
+                 if (! t.hasMoreTokens() && token.length() == 1)
+                   return getAWTKeyStroke(token.charAt(0),
+                                          KeyEvent.VK_UNDEFINED, modifiers,
+                                          false);
+               }
+             throw new IllegalArgumentException("Invalid 'typed' argument '"
+ 			    		       + s + "'");
+           }
+         else if ("pressed".equals(token))
+           {
+             if (t.hasMoreTokens())
+               token = t.nextToken();
+             break;
+           }
+         else if ("released".equals(token))
+           {
+             released = true;
+             if (t.hasMoreTokens())
+               token = t.nextToken();
+             break;
+           }
+         else
+           break;
+       }
+     while (t.hasMoreTokens());
+     // Now token contains the VK name we must parse.
+     Integer code = (Integer) vktable.get(token);
+     if (code == null)
+       throw new IllegalArgumentException("Unknown token '" + token
+ 					 + "' in '" + s + "'");
+     if (t.hasMoreTokens())
+       throw new IllegalArgumentException("Too many tokens: " + s);
+     return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, code.intValue(),
+                            modifiers, released);
+   }
+ 
+   /**
+    * Returns the character of this keystroke, if it was typed.
+    *
+    * @return the character value, or CHAR_UNDEFINED
+    * @see #getAWTKeyStroke(char)
+    */
+   public final char getKeyChar()
+   {
+     return keyChar;
+   }
+ 
+   /**
+    * Returns the virtual key code of this keystroke, if it was pressed or
+    * released. This will be a VK_* constant from KeyEvent.
+    *
+    * @return the virtual key code value, or VK_UNDEFINED
+    * @see #getAWTKeyStroke(int, int)
+    */
+   public final int getKeyCode()
+   {
+     return keyCode;
+   }
+ 
+   /**
+    * Returns the modifiers for this keystroke. This will be a bitwise or of
+    * constants from InputEvent; it includes the old style masks for shift,
+    * control, alt, meta, and alt-graph (but not button1); as well as the new
+    * style of extended modifiers for all modifiers.
+    *
+    * @return the modifiers
+    * @see #getAWTKeyStroke(Character, int)
+    * @see #getAWTKeyStroke(int, int)
+    */
+   public final int getModifiers()
+   {
+     return modifiers;
+   }
+ 
+   /**
+    * Tests if this keystroke is a key release.
+    *
+    * @return true if this is a key release
+    * @see #getAWTKeyStroke(int, int, boolean)
+    */
+   public final boolean isOnKeyRelease()
+   {
+     return onKeyRelease;
+   }
+ 
+   /**
+    * Returns the AWT event type of this keystroke. This is one of
+    * {@link KeyEvent#KEY_TYPED}, {@link KeyEvent#KEY_PRESSED}, or
+    * {@link KeyEvent#KEY_RELEASED}.
+    *
+    * @return the key event type
+    */
+   public final int getKeyEventType()
+   {
+     return keyCode == KeyEvent.VK_UNDEFINED ? KeyEvent.KEY_TYPED
+       : onKeyRelease ? KeyEvent.KEY_RELEASED : KeyEvent.KEY_PRESSED;
+   }
+ 
+   /**
+    * Returns a hashcode for this key event. It is not documented, but appears
+    * to be: <code>(getKeyChar() + 1) * (getKeyCode() + 1)
+    * * (getModifiers() + 1) * 2 + (isOnKeyRelease() ? 1 : 2)</code>.
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     return (keyChar + 1) * (keyCode + 1) * (modifiers + 1) * 2
+       + (onKeyRelease ? 1 : 2);
+   }
+ 
+   /**
+    * Tests two keystrokes for equality.
+    *
+    * @param o the object to test
+    * @return true if it is equal
+    */
+   public final boolean equals(Object o)
+   {
+     if (! (o instanceof AWTKeyStroke))
+       return false;
+     AWTKeyStroke s = (AWTKeyStroke) o;
+     return this == o || (keyChar == s.keyChar && keyCode == s.keyCode
+                          && modifiers == s.modifiers
+                          && onKeyRelease == s.onKeyRelease);
+   }
+ 
+   /**
+    * Returns a string representation of this keystroke. For typed keystrokes,
+    * this is <code>"keyChar " + KeyEvent.getKeyModifiersText(getModifiers())
+    + getKeyChar()</code>; for pressed and released keystrokes, this is
+    * <code>"keyCode " + KeyEvent.getKeyModifiersText(getModifiers())
+    * + KeyEvent.getKeyText(getKeyCode())
+    * + (isOnKeyRelease() ? "-R" : "-P")</code>.
+    *
+    * @return a string representation
+    */
+   public String toString()
+   {
+     if (keyCode == KeyEvent.VK_UNDEFINED)
+       return "keyChar " + KeyEvent.getKeyModifiersText(modifiers) + keyChar;
+     return "keyCode " + KeyEvent.getKeyModifiersText(modifiers)
+       + KeyEvent.getKeyText(keyCode) + (onKeyRelease ? "-R" : "-P");
+   }
+ 
+   /**
+    * Returns a cached version of the deserialized keystroke, if available.
+    *
+    * @return a cached replacement
+    * @throws ObjectStreamException if something goes wrong
+    */
+   protected Object readResolve() throws ObjectStreamException
+   {
+     AWTKeyStroke s = (AWTKeyStroke) cache.get(this);
+     if (s != null)
+       return s;
+     cache.put(this, this);
+     return this;
+   }
+ 
+   /**
+    * Gets the appropriate keystroke, creating one if necessary.
+    *
+    * @param keyChar the keyChar
+    * @param keyCode the keyCode
+    * @param modifiers the modifiers
+    * @param release true for key release
+    * @return the specified keystroke
+    */
+   private static AWTKeyStroke getAWTKeyStroke(char keyChar, int keyCode,
+                                               int modifiers, boolean release)
+   {
+     // Check level 0 cache.
+     AWTKeyStroke stroke = recent; // Avoid thread races.
+     if (stroke != null && stroke.keyChar == keyChar
+         && stroke.keyCode == keyCode && stroke.modifiers == modifiers
+         && stroke.onKeyRelease == release)
+       return stroke;
+     // Create a new object, on the assumption that if it has a match in the
+     // cache, the VM can easily garbage collect it as it is temporary.
+     Constructor c = ctor; // Avoid thread races.
+     if (c == null)
+       stroke = new AWTKeyStroke(keyChar, keyCode, modifiers, release);
+     else
+       try
+         {
+           stroke = (AWTKeyStroke) c.newInstance(null);
+           stroke.keyChar = keyChar;
+           stroke.keyCode = keyCode;
+           stroke.modifiers = modifiers;
+           stroke.onKeyRelease = release;
+         }
+       catch (Exception e)
+         {
+           throw (Error) new InternalError().initCause(e);
+         }
+     // Check level 1 cache.
+     AWTKeyStroke cached = (AWTKeyStroke) cache.get(stroke);
+     if (cached == null)
+       cache.put(stroke, stroke);
+     else
+       stroke = cached;
+     return recent = stroke;
+   }
+ 
+   /**
+    * Converts the modifiers to the appropriate format.
+    *
+    * @param mod the modifiers to convert
+    * @return the adjusted modifiers
+    */
+   private static int extend(int mod)
+   {
+     if ((mod & (KeyEvent.SHIFT_MASK | KeyEvent.SHIFT_DOWN_MASK)) != 0)
+       mod |= KeyEvent.SHIFT_MASK | KeyEvent.SHIFT_DOWN_MASK;
+     if ((mod & (KeyEvent.CTRL_MASK | KeyEvent.CTRL_DOWN_MASK)) != 0)
+       mod |= KeyEvent.CTRL_MASK | KeyEvent.CTRL_DOWN_MASK;
+     if ((mod & (KeyEvent.META_MASK | KeyEvent.META_DOWN_MASK)) != 0)
+       mod |= KeyEvent.META_MASK | KeyEvent.META_DOWN_MASK;
+     if ((mod & (KeyEvent.ALT_MASK | KeyEvent.ALT_DOWN_MASK)) != 0)
+       mod |= KeyEvent.ALT_MASK | KeyEvent.ALT_DOWN_MASK;
+     if ((mod & (KeyEvent.ALT_GRAPH_MASK | KeyEvent.ALT_GRAPH_DOWN_MASK)) != 0)
+       mod |= KeyEvent.ALT_GRAPH_MASK | KeyEvent.ALT_GRAPH_DOWN_MASK;
+     if ((mod & KeyEvent.BUTTON1_MASK) != 0)
+       mod |= KeyEvent.BUTTON1_DOWN_MASK;
+     return mod & MODIFIERS_MASK;
+   }
+ } // class AWTKeyStroke
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/AWTPermission.java gcc-4.1.0/libjava/classpath/java/awt/AWTPermission.java
*** gcc-4.0.2/libjava/classpath/java/awt/AWTPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/AWTPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,121 ----
+ /* AWTPermission.java -- AWT related permissions
+    Copyright (C) 2000, 2002  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.security.BasicPermission;
+ 
+ /**
+  * This class implements permissions for AWT.  This is a named
+  * permission.  No actions are defined.
+  *
+  * <p>The following table provides a list of all the possible AWTPermission
+  * permission names with a description of what that permission allows.<br>
+  * <table border=1>
+  * <tr><th>Permission Name</th><th>Permission Allows</th><th>Risks</th</tr>
+  * <tr>
+  *   <td><code>accessClipboard</code></td>
+  *   <td>posting and reading the AWT clipboard</td>
+  *   <td>the clipboard may contain sensitive data</td></tr>
+  * <tr>
+  *   <td><code>accessEventQueue</code></td>
+  *   <td>access to the AWT event queue</td>
+  *   <td>malicious code could remove real events and replace them with bogus
+  *       ones, including simulating the user granting permission</td></tr>
+  * <tr>
+  *   <td><code>listenToAllAWTEvents</code></td>
+  *   <td>listen to system-wide AWT events</td>
+  *   <td>malicious code can read passwords entered in an AWT event, and in
+  *       combination with accessEventQueue, could fake system events</td></tr>
+  * <tr>
+  *   <td><code>showWindowWithoutWarningBanner</code></td>
+  *   <td>display a window without a banner notification of insecurity</td>
+  *   <td>malicious code could install a Trojan horse applet that looks like
+  *       a normal window, and thus steal data like passwords</td></tr>
+  * <tr>
+  *   <td><code>readDisplayPixels</code></td>
+  *   <td>read back pixels from the display screen</td>
+  *   <td>malicious code could snoop on the user's actions</td></tr>
+  * <tr>
+  *   <td><code>createRobot</code></td>
+  *   <td>create an instance of java.awt.Robot</td>
+  *   <td>these objects can generate events as though they were the user; so
+  *       malicious code could control the system</td></tr>
+  * <tr>
+  *   <td><code>fullScreenExclusive</code></td>
+  *   <td>enter full-screen exclusive mode</td>
+  *   <td>malicious code could masquerade as a trusted program</td></tr>
+  * </table>
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public final class AWTPermission extends BasicPermission
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 8890392402588814465L;
+ 
+   /**
+    * Construct a AWTPermission with the given name.
+    *
+    * @param name the permission name
+    * @throws NullPointerException if name is null
+    * @throws IllegalArgumentException if name is invalid
+    */
+   public AWTPermission(String name)
+   {
+     super(name);
+   }
+ 
+   /**
+    * Create a new permission with the specified name. The actions argument
+    * is ignored, as AWT permissions have no actions.
+    *
+    * @param name the permission name
+    * @param actions ignored
+    * @throws NullPointerException if name is null
+    * @throws IllegalArgumentException if name is invalid
+    */
+   public AWTPermission(String name, String actions)
+   {
+     super(name);
+   }
+ } // class AWTPermission
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/ActiveEvent.java gcc-4.1.0/libjava/classpath/java/awt/ActiveEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/ActiveEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/ActiveEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* ActiveEvent.java -- a self-dispatching event
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * An interface for events which can dispatch themselves in another thread.
+  * This has two uses: first, if your code is in a critical section, calling a
+  * synchronized method might deadlock. But by using an ActiveEvent to call
+  * the second section, it will not obtain the lock until you have left the
+  * critical section, avoiding deadlock. The second use is for calling
+  * untrusted code. For example, system code should use an ActiveEvent to
+  * invoke user code securely.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface ActiveEvent
+ {
+   /**
+    * Dispatch the event, according to what the event needs done. Invoked
+    * automatically if this is placed on the <code>EventDispatchQueue</code>.
+    */
+   void dispatch();
+ } // interface ActiveEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Adjustable.java gcc-4.1.0/libjava/classpath/java/awt/Adjustable.java
*** gcc-4.0.2/libjava/classpath/java/awt/Adjustable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Adjustable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,171 ----
+ /* Adjustable.java -- Objects with a numeric adjustment scale
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.AdjustmentListener;
+ 
+ /**
+  * This interface is for objects that take a numeric value that can be
+  * adjusted within a bounded range.  For example, a scroll bar.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface Adjustable
+ {
+   /** Constant for an adjustable object with horizontal orientation. */
+   int HORIZONTAL = 0;
+ 
+   /** Constant for an adjustable object with vertical orientation. */
+   int VERTICAL = 1;
+ 
+   /** Constant for an adjustable object with no orientation. */
+   int NO_ORIENTATION = 2;
+ 
+   /**
+    * Returns a constant representing the orientation of the object.
+    *
+    * @return the orientation of this object
+    * @see #HORIZONTAL
+    * @see #VERTICAL
+    * @see #NO_ORIENTATION
+    */
+   int getOrientation();
+ 
+   /**
+    * Sets the minimum value this object can have.
+    *
+    * @param minimum the new minimum value
+    */
+   void setMinimum(int minimum);
+ 
+   /**
+    * Returns the minimum value this object can have.
+    *
+    * @return the minimum value
+    */
+   int getMinimum();
+ 
+   /**
+    * Sets the maximum value this object can have.
+    *
+    * @param maximum the new maximum value
+    */
+   void setMaximum(int maximum);
+ 
+   /**
+    * Returns the maximum value this object can have.
+    *
+    * @return the maximum value
+    */
+   int getMaximum();
+ 
+   /**
+    * Sets the increment value for incrementing the value by units.
+    *
+    * @param increment the unit increment value
+    */
+   void setUnitIncrement(int increment);
+ 
+   /**
+    * Returns the increment value for incrementing the value by units.
+    *
+    * @return the unit increment value
+    */
+   int getUnitIncrement();
+ 
+   /**
+    * Sets the increment value for incrementing the value by blocks.
+    *
+    * @param increment the block increment value
+    */
+   void setBlockIncrement(int increment);
+ 
+   /**
+    * Returns the increment value for incrementing the value by blocks.
+    *
+    * @return the block increment value
+    */
+   int getBlockIncrement();
+ 
+   /**
+    * Sets the length of the indicator for this object to the specified value.
+    *
+    * @param length the indicator length
+    */
+   void setVisibleAmount(int length);
+ 
+   /**
+    * Returns the length of the indicator for this object.
+    *
+    * @return the indicator length
+    */
+   int getVisibleAmount();
+ 
+   /**
+    * Sets the current value of the object.
+    *
+    * @param value the new value
+    */
+   void setValue(int value);
+ 
+   /**
+    * Returns the current value of the object.
+    *
+    * @return the current value
+    */
+   int getValue();
+ 
+   /**
+    * Adds a listener that will receive adjustment events for this object.
+    *
+    * @param listener the adjustment listener to add
+    * @see java.awt.event.AdjustmentEvent
+    */
+   void addAdjustmentListener(AdjustmentListener listener);
+ 
+   /**
+    * Removes an adjustment listener from this object.
+    *
+    * @param listener the adjustment listener to remove
+    * @see java.awt.event.AdjustmentEvent
+    */
+   void removeAdjustmentListener(AdjustmentListener listener);
+ } // interface Adjustable
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/AlphaComposite.java gcc-4.1.0/libjava/classpath/java/awt/AlphaComposite.java
*** gcc-4.0.2/libjava/classpath/java/awt/AlphaComposite.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/AlphaComposite.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,167 ----
+ /* AlphaComposite.java -- provides a context for performing alpha compositing
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.ColorModel;
+ import java.util.LinkedHashMap;
+ import java.util.Map;
+ 
+ /**
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Composite
+  * @see CompositeContext
+  * @since 1.3
+  * @status updated to 1.4 except for createContext, needs documentation
+  */
+ public final class AlphaComposite implements Composite
+ {
+   /** Map Long to AlphaComposites. See getInstance for details. */
+   private static final LinkedHashMap cache = new LinkedHashMap(11, 0.75f, true)
+   {
+     /** The largest the alpha composite cache can grow. */
+     private static final int MAX_CACHE_SIZE = 2048;
+ 
+     /** Prune stale entries. */
+     protected boolean removeEldestEntry(Map.Entry eldest)
+     {	// XXX - FIXME Use Map.Entry, not just Entry as gcj 3.1 workaround.
+       return size() > MAX_CACHE_SIZE;
+     }
+   };
+ 
+   public static final int CLEAR = 1;
+   public static final int SRC = 2;
+   public static final int DST = 9;
+   public static final int SRC_OVER = 3;
+   public static final int DST_OVER = 4;
+   public static final int SRC_IN = 5;
+   public static final int DST_IN = 6;
+   public static final int SRC_OUT = 7;
+   public static final int DST_OUT = 8;
+   public static final int SRC_ATOP = 10;
+   public static final int DST_ATOP = 11;
+   public static final int XOR = 12;
+   public static final AlphaComposite Clear = getInstance(CLEAR);
+   public static final AlphaComposite Src = getInstance(SRC);
+   public static final AlphaComposite Dst = getInstance(DST);
+   public static final AlphaComposite SrcOver = getInstance(SRC_OVER);
+   public static final AlphaComposite DstOver = getInstance(DST_OVER);
+   public static final AlphaComposite SrcIn = getInstance(SRC_IN);
+   public static final AlphaComposite DstIn = getInstance(DST_IN);
+   public static final AlphaComposite SrcOut = getInstance(SRC_OUT);
+   public static final AlphaComposite DstOut = getInstance(DST_OUT);
+   public static final AlphaComposite SrcAtop = getInstance(SRC_ATOP);
+   public static final AlphaComposite DstAtop = getInstance(DST_ATOP);
+   public static final AlphaComposite Xor = getInstance(XOR);
+   
+   private final int rule;
+   private final float alpha;
+   private AlphaComposite(int rule, float alpha)
+   {
+     this.rule = rule;
+     this.alpha = alpha;
+   }
+ 
+   /**
+    * Creates an AlphaComposite object with the specified rule.
+    *
+    * @param rule The compositing rule.
+    *
+    * @exception IllegalArgumentException If rule is not one of the following:
+    * CLEAR, SRC, DST, SRC_OVER, DST_OVER, SRC_IN, DST_IN, SRC_OUT, DST_OUT,
+    * SRC_ATOP, DST_ATOP, or XOR.
+    */
+   public static AlphaComposite getInstance(int rule)
+   {
+     return getInstance(rule, 1);
+   }
+   
+   /**
+    * Creates an AlphaComposite object with the specified rule and the constant
+    * alpha to multiply with the alpha of the source. The source is multiplied
+    * with the specified alpha before being composited with the destination.
+    *
+    * @param rule The compositing rule.
+    *
+    * @exception IllegalArgumentException If rule is not one of the following:
+    * CLEAR, SRC, DST, SRC_OVER, DST_OVER, SRC_IN, DST_IN, SRC_OUT, DST_OUT,
+    * SRC_ATOP, DST_ATOP, or XOR.
+    */
+   public static AlphaComposite getInstance(int rule, float alpha)
+   {
+     if (rule < CLEAR || rule > XOR || ! (alpha >= 0 && alpha <= 1))
+       throw new IllegalArgumentException();
+     // This long is guaranteed unique for all valid alpha composites.
+     Long l = new Long(rule + Double.doubleToLongBits(alpha));
+     AlphaComposite a = (AlphaComposite) cache.get(l);
+     if (a == null)
+       {
+         a = new AlphaComposite(rule, alpha);
+         cache.put(l, a);
+       }
+     return a;
+   }
+   public CompositeContext createContext(ColorModel srcColorModel,
+                                         ColorModel dstColorModel,
+                                         RenderingHints hints)
+   {
+     // XXX Implement. Sun uses undocumented implementation class
+     // sun.java2d.SunCompositeContext.
+     throw new Error("not implemented");
+   }
+   public float getAlpha()
+   {
+     return alpha;
+   }
+   public int getRule()
+   {
+     return rule;
+   }
+   public int hashCode()
+   {
+     return 31 * Float.floatToIntBits(alpha) + rule;
+   }
+   public boolean equals(Object o)
+   {
+     if (! (o instanceof AlphaComposite))
+       return false;
+     AlphaComposite a = (AlphaComposite) o;
+     return rule == a.rule && alpha == a.alpha;
+   }
+ } // class AlphaComposite
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/AttributeValue.java gcc-4.1.0/libjava/classpath/java/awt/AttributeValue.java
*** gcc-4.0.2/libjava/classpath/java/awt/AttributeValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/AttributeValue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* AttributeValue.java -- parent of type-safe enums of attributes
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This class is undocumented by Sun, but it is the parent of several other
+  * classes, all of which are type-safe enumerations. This takes care of
+  * <code>equals</code>, <code>toString</code>, and <code>hashCode</code>, so
+  * that you don't have to (although hashCode is commonly overridden).
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  */
+ class AttributeValue
+ {
+   /** The value of the enumeration. Package visible for speed. */
+   final int value;
+ 
+   /** The list of enumeration names for the given subclass. */
+   private final String[] names;
+ 
+   /**
+    * Construct a type-safe enumeration element. For example,<br>
+    * <pre>
+    * class Foo extends AttributeValue
+    * {
+    *   private static final String[] names = { "one", "two" }
+    *   public static final Foo ONE = new Foo(0);
+    *   public static final Foo TWO = new Foo(1);
+    *   private Foo(int value) { super(value, names); }
+    * }
+    * </pre>
+    *
+    * @param value the position of this enumeration element, consecutive from 0
+    * @param names the constant list of enumeration names for the subclass
+    */
+   AttributeValue(int value, String[] names)
+   {
+     this.value = value;
+     this.names = names;
+   }
+ 
+   /**
+    * Returns the hashcode of this element. This is the index of the element
+    * in the enumeration. Note that equals defaults to the == relation.
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     return value;
+   }
+ 
+   /**
+    * Returns the name of this enumeration element.
+    *
+    * @return the element name
+    */
+   public String toString()
+   {
+     return names[value];
+   }
+ } // class AttributeValue
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/BasicStroke.java gcc-4.1.0/libjava/classpath/java/awt/BasicStroke.java
*** gcc-4.0.2/libjava/classpath/java/awt/BasicStroke.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/BasicStroke.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,248 ----
+ /* BasicStroke.java -- 
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.util.Arrays;
+ 
+ /**
+  * STUB CLASS ONLY
+  */
+ public class BasicStroke implements Stroke
+ {
+   public static final int JOIN_MITER = 0;
+   public static final int JOIN_ROUND = 1;
+   public static final int JOIN_BEVEL = 2;
+ 
+   public static final int CAP_BUTT = 0;
+   public static final int CAP_ROUND = 1;
+   public static final int CAP_SQUARE = 2;
+ 
+   private final float width;
+   private final int cap;
+   private final int join;
+   private final float limit;
+   private final float[] dash;
+   private final float phase;
+ 
+   /**
+    * Creates a basic stroke.
+    *
+    * @param width May not be negative .
+    * @param cap May be either CAP_BUTT, CAP_ROUND or CAP_SQUARE.
+    * @param join May be either JOIN_ROUND, JOIN_BEVEL, or JOIN_MITER.
+    * @param miterlimit the limit to trim the miter join. The miterlimit must be
+    * greater than or equal to 1.0f.
+    * @param dash The array representing the dashing pattern. There must be at
+    * least one non-zero entry.
+    * @param dashPhase is negative and dash is not null.
+    *
+    * @exception IllegalArgumentException If one input parameter doesn't meet
+    * its needs.
+    */
+   public BasicStroke(float width, int cap, int join, float miterlimit,
+                      float[] dash, float dashPhase)
+   {
+     if (width < 0.0f )
+       throw new IllegalArgumentException("width " + width + " < 0");
+     else if (cap < CAP_BUTT || cap > CAP_SQUARE)
+       throw new IllegalArgumentException("cap " + cap + " out of range ["
+ 					 + CAP_BUTT + ".." + CAP_SQUARE + "]");
+     else if (miterlimit < 1.0f && join == JOIN_MITER)
+       throw new IllegalArgumentException("miterlimit " + miterlimit
+ 					 + " < 1.0f while join == JOIN_MITER");
+     else if (join < JOIN_MITER || join > JOIN_BEVEL)
+       throw new IllegalArgumentException("join " + join + " out of range ["
+ 					 + JOIN_MITER + ".." + JOIN_BEVEL
+ 					 + "]");
+     else if (dashPhase < 0.0f && dash != null)
+       throw new IllegalArgumentException("dashPhase " + dashPhase
+ 					 + " < 0.0f while dash != null");
+     else if (dash != null)
+       if (dash.length == 0)
+ 	throw new IllegalArgumentException("dash.length is 0");
+       else
+ 	{
+ 	  boolean allZero = true;
+ 	  
+ 	  for ( int i = 0; i < dash.length; ++i)
+ 	    {
+ 	      if (dash[i] != 0.0f)
+ 		{
+ 		  allZero = false;
+ 		  break;
+ 		}
+ 	    }
+ 	  
+ 	  if (allZero)
+ 	    throw new IllegalArgumentException("all dashes are 0.0f");
+ 	}
+ 
+     this.width = width;
+     this.cap = cap;
+     this.join = join;
+     limit = miterlimit;
+     this.dash = dash == null ? null : (float[]) dash.clone();
+     phase = dashPhase;
+   }
+ 
+   /**
+    * Creates a basic stroke.
+    *
+    * @param width The width of the BasicStroke. May not be negative .
+    * @param cap May be either CAP_BUTT, CAP_ROUND or CAP_SQUARE.
+    * @param join May be either JOIN_ROUND, JOIN_BEVEL, or JOIN_MITER.
+    * @param miterlimit the limit to trim the miter join. The miterlimit must be
+    * greater than or equal to 1.0f.
+    * 
+    * @exception IllegalArgumentException If one input parameter doesn't meet
+    * its needs.
+    */
+   public BasicStroke(float width, int cap, int join, float miterlimit)
+   {
+     this(width, cap, join, miterlimit, null, 0);
+   }
+ 
+   /**
+    * Creates a basic stroke.
+    *
+    * @param width The width of the BasicStroke. May not be nehative.
+    * @param cap May be either CAP_BUTT, CAP_ROUND or CAP_SQUARE.
+    * @param join May be either JOIN_ROUND, JOIN_BEVEL, or JOIN_MITER.
+    * 
+    * @exception IllegalArgumentException If one input parameter doesn't meet
+    * its needs.
+    * @exception IllegalArgumentException FIXME
+    */
+   public BasicStroke(float width, int cap, int join)
+   {
+     this(width, cap, join, 10, null, 0);
+   }
+ 
+   /**
+    * Creates a basic stroke.
+    *
+    * @param width The width of the BasicStroke.
+    * 
+    * @exception IllegalArgumentException If width is negative.
+    */
+   public BasicStroke(float width)
+   {
+     this(width, CAP_SQUARE, JOIN_MITER, 10, null, 0);
+   }
+ 
+   /**
+    * Creates a basic stroke.
+    */
+   public BasicStroke()
+   {
+     this(1, CAP_SQUARE, JOIN_MITER, 10, null, 0);
+   }
+   
+   public Shape createStrokedShape(Shape s)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public float getLineWidth()
+   {
+     return width;
+   }
+ 
+   public int getEndCap()
+   {
+     return cap;
+   }
+ 
+   public int getLineJoin()
+   {
+     return join;
+   }
+ 
+   public float getMiterLimit()
+   {
+     return limit;
+   }
+ 
+   public float[] getDashArray()
+   {
+     return dash;
+   }
+ 
+   public float getDashPhase()
+   {
+     return phase;
+   }
+ 
+   /**
+    * Returns the hash code for this object. The hash is calculated by
+    * xoring the hash, cap, join, limit, dash array and phase values
+    * (converted to <code>int</code> first with
+    * <code>Float.floatToIntBits()</code> if the value is a
+    * <code>float</code>).
+    */
+   public int hashCode()
+   {
+     int hash = Float.floatToIntBits(width);
+     hash ^= cap;
+     hash ^= join;
+     hash ^= Float.floatToIntBits(limit);
+    
+     if (dash != null)
+       for (int i = 0; i < dash.length; i++)
+ 	hash ^=  Float.floatToIntBits(dash[i]);
+ 
+     hash ^= Float.floatToIntBits(phase);
+ 
+     return hash;
+   }
+ 
+   /**
+    * Returns true if the given Object is an instance of BasicStroke
+    * and the width, cap, join, limit, dash array and phase are all
+    * equal.
+    */
+   public boolean equals(Object o)
+   {
+     if (! (o instanceof BasicStroke))
+       return false;
+     BasicStroke s = (BasicStroke) o;
+     return width == s.width && cap == s.cap && join == s.join
+       && limit == s.limit && Arrays.equals(dash, s.dash) && phase == s.phase;
+   }
+ } // class BasicStroke
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/BorderLayout.java gcc-4.1.0/libjava/classpath/java/awt/BorderLayout.java
*** gcc-4.0.2/libjava/classpath/java/awt/BorderLayout.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/BorderLayout.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,773 ----
+ /* BorderLayout.java -- A layout manager class
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ 
+ /**
+   * This class implements a layout manager that positions components
+   * in certain sectors of the parent container.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Rolf W. Rasmussen  (rolfwr@ii.uib.no)
+   */
+ public class BorderLayout implements LayoutManager2, java.io.Serializable
+ {
+ 
+   /**
+    * Constant indicating the top of the container
+    */
+   public static final String NORTH = "North";
+ 
+   /**
+    * Constant indicating the bottom of the container
+    */
+   public static final String SOUTH = "South";
+ 
+   /**
+    * Constant indicating the right side of the container
+    */
+   public static final String EAST = "East";
+ 
+   /**
+    * Constant indicating the left side of the container
+    */
+   public static final String WEST = "West";
+ 
+   /**
+    * Constant indicating the center of the container
+    */
+   public static final String CENTER = "Center";
+ 
+ 
+   /**
+    * The constant indicating the position before the first line of the
+    * layout.  The exact position depends on the writing system: For a
+    * top-to-bottom orientation, it is the same as {@link #NORTH}, for
+    * a bottom-to-top orientation, it is the same as {@link #SOUTH}.
+    *
+    * <p>This constant is an older name for {@link #PAGE_START} which
+    * has exactly the same value.
+    *
+    * @since 1.2
+    */
+   public static final String BEFORE_FIRST_LINE = "First";
+ 
+   /**
+    * The constant indicating the position after the last line of the
+    * layout.  The exact position depends on the writing system: For a
+    * top-to-bottom orientation, it is the same as {@link #SOUTH}, for
+    * a bottom-to-top orientation, it is the same as {@link #NORTH}.
+    *
+    * <p>This constant is an older name for {@link #PAGE_END} which
+    * has exactly the same value.
+    *
+    * @since 1.2
+    */
+   public static final String AFTER_LAST_LINE = "Last";
+ 
+   /**
+    * The constant indicating the position before the first item of the
+    * layout.  The exact position depends on the writing system: For a
+    * left-to-right orientation, it is the same as {@link #WEST}, for
+    * a right-to-left orientation, it is the same as {@link #EAST}.
+    *
+    * <p>This constant is an older name for {@link #LINE_START} which
+    * has exactly the same value.
+    *
+    * @since 1.2
+    */
+   public static final String BEFORE_LINE_BEGINS = "Before";
+ 
+   /**
+    * The constant indicating the position after the last item of the
+    * layout.  The exact position depends on the writing system: For a
+    * left-to-right orientation, it is the same as {@link #EAST}, for
+    * a right-to-left orientation, it is the same as {@link #WEST}.
+    *
+    * <p>This constant is an older name for {@link #LINE_END} which
+    * has exactly the same value.
+    *
+    * @since 1.2
+    */
+   public static final String AFTER_LINE_ENDS = "After";
+ 
+   /**
+    * The constant indicating the position before the first line of the
+    * layout.  The exact position depends on the writing system: For a
+    * top-to-bottom orientation, it is the same as {@link #NORTH}, for
+    * a bottom-to-top orientation, it is the same as {@link #SOUTH}.
+    *
+    * @since 1.4
+    */
+   public static final String PAGE_START = BEFORE_FIRST_LINE;
+ 
+   /**
+    * The constant indicating the position after the last line of the
+    * layout.  The exact position depends on the writing system: For a
+    * top-to-bottom orientation, it is the same as {@link #SOUTH}, for
+    * a bottom-to-top orientation, it is the same as {@link #NORTH}.
+    *
+    * @since 1.4
+    */
+   public static final String PAGE_END = AFTER_LAST_LINE;
+ 
+   /**
+    * The constant indicating the position before the first item of the
+    * layout.  The exact position depends on the writing system: For a
+    * left-to-right orientation, it is the same as {@link #WEST}, for
+    * a right-to-left orientation, it is the same as {@link #EAST}.
+    *
+    * @since 1.4
+    */
+   public static final String LINE_START = BEFORE_LINE_BEGINS;
+ 
+   /**
+    * The constant indicating the position after the last item of the
+    * layout.  The exact position depends on the writing system: For a
+    * left-to-right orientation, it is the same as {@link #EAST}, for
+    * a right-to-left orientation, it is the same as {@link #WEST}.
+    *
+    * @since 1.4
+    */
+   public static final String LINE_END = AFTER_LINE_ENDS;
+ 
+ 
+   /**
+    * Serialization constant.
+    */
+   private static final long serialVersionUID = -8658291919501921765L;
+ 
+ 
+   /**
+    * @serial
+    */
+   private Component north;
+ 
+   /**
+    * @serial
+    */
+   private Component south;
+ 
+   /**
+    * @serial
+    */
+   private Component east;
+ 
+   /**
+    * @serial
+    */
+   private Component west;
+ 
+   /**
+    * @serial
+   */
+   private Component center;
+ 
+   /**
+    * @serial
+    */
+   private Component firstLine;
+ 
+   /**
+    * @serial
+    */
+   private Component lastLine;
+ 
+   /**
+    * @serial
+    */
+   private Component firstItem;
+ 
+   /**
+    * @serial
+    */
+   private Component lastItem;
+ 
+   /**
+    * @serial The horizontal gap between components
+    */
+   private int hgap;
+ 
+   /**
+    * @serial The vertical gap between components
+    */
+   private int vgap;
+ 
+ 
+   // Some constants for use with calcSize().
+   private static final int MIN = 0;
+   private static final int MAX = 1;
+   private static final int PREF = 2;
+ 
+ 
+   /**
+    * Initializes a new instance of <code>BorderLayout</code> with no
+    * horiztonal or vertical gaps between components.
+    */
+   public BorderLayout()
+   {
+     this(0,0);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>BorderLayout</code> with the
+    * specified horiztonal and vertical gaps between components.
+    *
+    * @param hgap The horizontal gap between components.
+    * @param vgap The vertical gap between components.
+    */
+   public BorderLayout(int hgap, int vgap)
+   {
+     this.hgap = hgap;
+     this.vgap = vgap;
+   }
+ 
+   /**
+    * Returns the horitzontal gap value.
+    *
+    * @return The horitzontal gap value.
+    */
+   public int getHgap()
+   {
+     return(hgap);
+   }
+ 
+   /**
+    * Sets the horizontal gap to the specified value.
+    *
+    * @param hgap The new horizontal gap.
+    */
+   public void setHgap(int hgap)
+   {
+     this.hgap = hgap;
+   }
+ 
+   /**
+    * Returns the vertical gap value.
+    *
+    * @return The vertical gap value.
+    */
+   public int getVgap()
+   {
+     return(vgap);
+   }
+ 
+   /**
+    * Sets the vertical gap to the specified value.
+    *
+    * @param vgap The new vertical gap value.
+    */
+   public void setVgap(int vgap)
+   {
+     this.vgap = vgap;
+   }
+ 
+   /**
+    * Adds a component to the layout in the specified constraint position, 
+    * which must be one of the string constants defined in this class.
+    *
+    * @param component The component to add.
+    * @param constraints The constraint string.
+    *
+    * @exception IllegalArgumentException If the constraint object is not
+    * a string, or is not one of the specified constants in this class.
+    */
+   public void addLayoutComponent(Component component, Object constraints)
+   {
+     if (constraints != null && ! (constraints instanceof String))
+       throw new IllegalArgumentException("Constraint must be a string");
+ 
+     addLayoutComponent((String) constraints, component);
+   }
+ 
+   /**
+    * Adds a component to the layout in the specified constraint position, 
+    * which must be one of the string constants defined in this class.
+    *
+    * @param constraints The constraint string.
+    * @param component The component to add.
+    *
+    * @exception IllegalArgumentException If the constraint object is not
+    *            one of the specified constants in this class.
+    *
+    * @deprecated This method is deprecated in favor of
+    *             <code>addLayoutComponent(Component, Object)</code>.
+    */
+   public void addLayoutComponent(String constraints, Component component)
+   {
+     String str = constraints;
+ 
+     if (str == null || str.equals(CENTER))
+       center = component;
+     else if (str.equals(NORTH))
+       north = component;
+     else if (str.equals(SOUTH))
+       south = component;
+     else if (str.equals(EAST))
+       east = component;
+     else if (str.equals(WEST))
+       west = component;
+     else if (str.equals(BEFORE_FIRST_LINE))
+       firstLine = component;
+     else if (str.equals(AFTER_LAST_LINE))
+       lastLine = component;
+     else if (str.equals(BEFORE_LINE_BEGINS))
+       firstItem = component;
+     else if (str.equals(AFTER_LINE_ENDS))
+       lastItem = component;
+     else
+       throw new IllegalArgumentException("Constraint value not valid: " + str);
+   }
+ 
+   /**
+    * Removes the specified component from the layout.
+    *
+    * @param component The component to remove from the layout.
+    */
+   public void removeLayoutComponent(Component component)
+   {
+     if (north == component)
+       north = null;
+     if (south == component)
+       south = null;
+     if (east == component)
+       east = null;
+     if (west == component)
+       west = null;
+     if (center == component)
+       center = null;
+     if (firstItem == component)
+       firstItem = null;
+     if (lastItem == component)
+       lastItem = null;
+     if (firstLine == component)
+       firstLine = null;
+     if (lastLine == component)
+       lastLine = null;
+   }
+ 
+   /**
+    * Returns the minimum size of the specified container using this layout.
+    *
+    * @param target The container to calculate the minimum size for.
+    *
+    * @return The minimum size of the container
+    */
+   public Dimension minimumLayoutSize(Container target)
+   {
+     return calcSize(target, MIN);
+   }
+ 
+   /**
+    * Returns the preferred size of the specified container using this layout.
+    *
+    * @param target The container to calculate the preferred size for.
+    *
+    * @return The preferred size of the container
+    */
+   public Dimension preferredLayoutSize(Container target)
+   {
+     return calcSize(target, PREF);
+   }
+ 
+   /**
+    * Returns the maximum size of the specified container using this layout.
+    *
+    * @param target The container to calculate the maximum size for.
+    *
+    * @return The maximum size of the container
+    */
+   public Dimension maximumLayoutSize(Container target)
+   {
+     return calcSize(target, MAX);
+   }
+ 
+   /**
+    * Returns the X axis alignment, which is a <code>float</code> indicating
+    * where along the X axis this container wishs to position its layout.
+    * 0 indicates align to the left, 1 indicates align to the right, and 0.5
+    * indicates align to the center.
+    *
+    * @param parent The parent container.
+    *
+    * @return The X alignment value.
+    */
+   public float getLayoutAlignmentX(Container parent)
+   {
+     return 0.5F;
+   }
+ 
+   /**
+    * Returns the Y axis alignment, which is a <code>float</code> indicating
+    * where along the Y axis this container wishs to position its layout.
+    * 0 indicates align to the top, 1 indicates align to the bottom, and 0.5
+    * indicates align to the center.
+    *
+    * @param parent The parent container.
+    *
+    * @return The Y alignment value.
+    */
+   public float getLayoutAlignmentY(Container parent)
+   {
+     return 0.5F;
+   }
+ 
+   /**
+    * Instructs this object to discard any layout information it might
+    * have cached.
+    *
+    * @param parent The parent container.
+    */
+   public void invalidateLayout(Container parent)
+   {
+     // Nothing to do here.
+   }
+ 
+   /**
+    * Lays out the specified container according to the constraints
+    * in this object.
+    *
+    * @param target The container to lay out.
+    */
+   public void layoutContainer(Container target)
+   {
+     synchronized (target.getTreeLock ())
+       {
+         Insets i = target.getInsets();
+ 
+         ComponentOrientation orient = target.getComponentOrientation ();
+         boolean left_to_right = orient.isLeftToRight ();
+ 
+         Component my_north = north;
+         Component my_east = east;
+         Component my_south = south;
+         Component my_west = west;
+ 
+         // Note that we currently don't handle vertical layouts.  Neither
+         // does JDK 1.3.
+         if (firstLine != null)
+           my_north = firstLine;
+         if (lastLine != null)
+           my_south = lastLine;
+         if (firstItem != null)
+           {
+             if (left_to_right)
+               my_west = firstItem;
+             else
+               my_east = firstItem;
+           }
+         if (lastItem != null)
+           {
+             if (left_to_right)
+               my_east = lastItem;
+             else
+               my_west = lastItem;
+           }
+ 
+         Dimension c = calcCompSize(center, PREF);
+         Dimension n = calcCompSize(my_north, PREF);
+         Dimension s = calcCompSize(my_south, PREF);
+         Dimension e = calcCompSize(my_east, PREF);
+         Dimension w = calcCompSize(my_west, PREF);
+         int targetWidth = target.getWidth();
+         int targetHeight = target.getHeight();
+ 
+         /*
+ 	<-> hgap     <-> hgap
+ 	+----------------------------+          }
+ 	|t                           |          } i.top
+ 	|  +----------------------+  |  --- y1  }
+ 	|  |n                     |  |
+ 	|  +----------------------+  |          } vgap
+ 	|  +---+ +----------+ +---+  |  --- y2  }        }
+ 	|  |w  | |c         | |e  |  |                   } hh
+ 	|  +---+ +----------+ +---+  |          } vgap   }
+ 	|  +----------------------+  |  --- y3  }
+ 	|  |s                     |  |
+ 	|  +----------------------+  |          }
+ 	|                            |          } i.bottom
+ 	+----------------------------+          }
+ 	|x1   |x2          |x3
+ 	<---------------------->
+ 	<-->         ww           <-->
+ 	i.left                    i.right
+         */
+ 
+         int x1 = i.left;
+         int x2 = x1 + w.width + (w.width == 0 ? 0 : hgap);
+         int x3;
+         if (targetWidth <= i.right + e.width)
+           x3 = x2 + w.width + (w.width == 0 ? 0 : hgap);
+         else
+           x3 = targetWidth - i.right - e.width;
+         int ww = targetWidth - i.right - i.left;
+ 
+         int y1 = i.top;
+         int y2 = y1 + n.height + (n.height == 0 ? 0 : vgap);
+         int midh = Math.max(e.height, Math.max(w.height, c.height));
+         int y3;
+         if (targetHeight <= i.bottom + s.height)
+           y3 = y2 + midh + vgap;
+         else
+           y3 = targetHeight - i.bottom - s.height;
+         int hh = y3-y2-(s.height == 0 ? 0 : vgap);
+ 
+         setBounds(center, x2, y2, x3-x2-(w.width == 0 ? 0 : hgap), hh);
+         setBounds(my_north, x1, y1, ww, n.height);
+         setBounds(my_south, x1, y3, ww, s.height);
+         setBounds(my_west, x1, y2, w.width, hh);
+         setBounds(my_east, x3, y2, e.width, hh);
+       }
+   }
+ 
+   /**
+    * Returns a string representation of this layout manager.
+    *
+    * @return A string representation of this object.
+    */
+   public String toString()
+   {
+     return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + "]";
+   }
+ 
+   /**
+    * This is a convenience method to set the bounds on a component.
+    * If the indicated component is null, nothing is done.
+    */
+   private void setBounds(Component comp, int x, int y, int w, int h)
+   {
+     if (comp == null)
+       return;
+     comp.setBounds(x, y, w, h);
+   }
+ 
+   private Dimension calcCompSize(Component comp, int what)
+   {
+     if (comp == null || !comp.isVisible())
+       return new Dimension(0, 0);
+     if (what == MIN)
+       return comp.getMinimumSize();
+     else if (what == MAX)
+       return comp.getMaximumSize();
+     return comp.getPreferredSize();
+   }
+ 
+   /**
+    * This is a helper function used to compute the various sizes for
+    * this layout.
+    */
+   private Dimension calcSize(Container target, int what)
+   {
+     synchronized (target.getTreeLock ())
+       {
+         Insets ins = target.getInsets();
+ 
+         ComponentOrientation orient = target.getComponentOrientation ();
+         boolean left_to_right = orient.isLeftToRight ();
+ 
+         Component my_north = north;
+         Component my_east = east;
+         Component my_south = south;
+         Component my_west = west;
+ 
+         // Note that we currently don't handle vertical layouts.  Neither
+         // does JDK 1.3.
+         if (firstLine != null)
+           my_north = firstLine;
+         if (lastLine != null)
+           my_south = lastLine;
+         if (firstItem != null)
+           {
+             if (left_to_right)
+               my_west = firstItem;
+             else
+               my_east = firstItem;
+           }
+         if (lastItem != null)
+           {
+             if (left_to_right)
+               my_east = lastItem;
+             else
+               my_west = lastItem;
+           }
+ 
+         Dimension ndim = calcCompSize(my_north, what);
+         Dimension sdim = calcCompSize(my_south, what);
+         Dimension edim = calcCompSize(my_east, what);
+         Dimension wdim = calcCompSize(my_west, what);
+         Dimension cdim = calcCompSize(center, what);
+ 
+         int width = edim.width + cdim.width + wdim.width + (hgap * 2);
+         // Check for overflow.
+         if (width < edim.width || width < cdim.width || width < cdim.width)
+           width = Integer.MAX_VALUE;
+ 
+         if (ndim.width > width)
+           width = ndim.width;
+         if (sdim.width > width)
+           width = sdim.width;
+ 
+         width += (ins.left + ins.right);
+ 
+         int height = edim.height;
+         if (cdim.height > height)
+           height = cdim.height;
+         if (wdim.height > height)
+           height = wdim.height;
+ 
+         int addedHeight = height + (ndim.height + sdim.height + (vgap * 2)
+                                     + ins.top + ins.bottom);
+         // Check for overflow.
+         if (addedHeight < height)
+           height = Integer.MAX_VALUE;
+         else
+           height = addedHeight;
+ 
+         return(new Dimension(width, height));
+       }
+   }
+ 
+   /**
+    * Return the component at the indicated location, or null if no component
+    * is at that location.  The constraints argument must be one of the 
+    * location constants specified by this class.   
+    * @param constraints the location
+    * @return the component at that location, or null
+    * @throws IllegalArgumentException if the constraints argument is not 
+    * recognized
+    * @since 1.5
+    */
+   public Component getLayoutComponent(Object constraints)
+   {
+     if (constraints == CENTER)
+       return center;
+     if (constraints == NORTH)
+       return north;
+     if (constraints == EAST)
+       return east;
+     if (constraints == SOUTH)
+       return south;
+     if (constraints == WEST)
+       return west;
+     if (constraints == PAGE_START)
+       return firstLine;
+     if (constraints == PAGE_END)
+       return lastLine;
+     if (constraints == LINE_START)
+       return firstItem;
+     if (constraints == LINE_END)
+       return lastItem;
+     throw new IllegalArgumentException("constraint " + constraints 
+                                        + " is not recognized");
+   }
+ 
+   /**
+    * Return the component at the specified location, which must be one
+    * of the absolute constants such as CENTER or SOUTH.  The container's
+    * orientation is used to map this location to the correct corresponding
+    * component, so for instance in a right-to-left container, a request
+    * for the EAST component could return the LINE_END component.  This will
+    * return null if no component is available at the given location.
+    * @param container the container whose orientation is used
+    * @param constraints the absolute location of the component
+    * @return the component at the location, or null
+    * @throws IllegalArgumentException if the constraint is not recognized
+    */
+   public Component getLayoutComponent(Container container, Object constraints)
+   {
+     ComponentOrientation orient = container.getComponentOrientation();
+     if (constraints == CENTER)
+       return center;
+     // Note that we don't support vertical layouts.
+     if (constraints == NORTH)
+       return north;
+     if (constraints == SOUTH)
+       return south;
+     if (constraints == WEST)
+       {
+         // Note that relative layout takes precedence.
+         if (orient.isLeftToRight())
+           return firstItem == null ? west : firstItem;
+         return lastItem == null ? west : lastItem;
+       }
+     if (constraints == EAST)
+       {
+         // Note that relative layout takes precedence.
+         if (orient.isLeftToRight())
+           return lastItem == null ? east : lastItem;
+         return firstItem == null ? east : firstItem;
+       }
+     throw new IllegalArgumentException("constraint " + constraints
+                                        + " is not recognized");
+   }
+ 
+   /**
+    * Return the constraint corresponding to a component in this layout.
+    * If the component is null, or is not in this layout, returns null.
+    * Otherwise, this will return one of the constraint constants defined
+    * in this class.
+    * @param c the component
+    * @return the constraint, or null
+    * @since 1.5
+    */
+   public Object getConstraints(Component c)
+   {
+     if (c == null)
+       return null;
+     if (c == center)
+       return CENTER;
+     if (c == north)
+       return NORTH;
+     if (c == east)
+       return EAST;
+     if (c == south)
+       return SOUTH;
+     if (c == west)
+       return WEST;
+     if (c == firstLine)
+       return PAGE_START;
+     if (c == lastLine)
+       return PAGE_END;
+     if (c == firstItem)
+       return LINE_START;
+     if (c == lastItem)
+       return LINE_END;
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/BufferCapabilities.java gcc-4.1.0/libjava/classpath/java/awt/BufferCapabilities.java
*** gcc-4.0.2/libjava/classpath/java/awt/BufferCapabilities.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/BufferCapabilities.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,253 ----
+ /* BufferCapabilities.java -- double-buffering capabilities descriptor
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.BufferStrategy;
+ 
+ /**
+  * A double-buffering capability descriptor.  This class exposes
+  * details about the double-buffering algorithms used by image
+  * buffers.
+  *
+  * BufferCapabilities represents algorithms that involve at least two
+  * buffers but it can also specify so-called "multi-buffer" schemes
+  * involving more than two buffers.  This class describes the
+  * capabilities of the front and back buffers as well as the results
+  * of "flipping" -- that is, what happens when an image is transferred
+  * from the back buffer to the front buffer.
+  *
+  * Flipping may or may not be supported or may be supported only in
+  * fullscreen mode.  If it is not supported then "blitting" is implied
+  * -- that is, the contents of the back buffer are copied using a fast
+  * block transfer operation from the back buffer to the front buffer.
+  *
+  * The front buffer is the one that is displayed.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  *
+  * @see BufferStrategy#getCapabilities()
+  * @see GraphicsConfiguration#getBufferCapabilities()
+  *
+  * @since 1.4
+  */
+ public class BufferCapabilities implements Cloneable
+ {
+   /**
+    * A type-safe enumeration of buffer flipping results.
+    *
+    * @see AttributeValue
+    */
+   public static final class FlipContents extends AttributeValue
+   {
+     /**
+      * The names of the different flipping results.
+      */
+     private static final String[] NAMES
+       = { "undefined", "background", "prior", "copied" };
+ 
+     /**
+      * The contents of the back buffer are undefined after flipping.
+      */
+     public static final FlipContents UNDEFINED = new FlipContents(0);
+ 
+     /**
+      * The back buffer is cleared with the background color after
+      * flipping.
+      */
+     public static final FlipContents BACKGROUND = new FlipContents(1);
+ 
+     /**
+      * The back buffer contains the pre-flipping contents of the front
+      * buffer after flipping.  In other words a true "flip" has been
+      * performed.
+      */
+     public static final FlipContents PRIOR = new FlipContents(2);
+ 
+     /**
+      * The back buffer has the same contents as the front buffer after
+      * flipping.
+      */
+     public static final FlipContents COPIED = new FlipContents(3);
+ 
+     /**
+      * Create a new flipping result descriptor.
+      *
+      * @param value the enumeration value
+      */
+     private FlipContents(int value)
+     {
+       super(value, NAMES);
+     }
+   }
+ 
+   /**
+    * Front buffer capabilities descriptor.
+    */
+   private final ImageCapabilities front;
+ 
+   /**
+    * Back buffer capabilities descriptor.
+    */
+   private final ImageCapabilities back;
+ 
+   /**
+    * Describes the results of a "flip" operation.
+    */
+   private final FlipContents flip;
+ 
+   /**
+    * Creates a buffer capabilities object.
+    *
+    * @param frontCaps front buffer capabilities descriptor
+    * @param backCaps back buffer capabilities descriptor
+    * @param flip the results of a flip operation or null if
+    * flipping is not supported
+    *
+    * @exception IllegalArgumentException if frontCaps or backCaps is
+    * null
+    */
+   public BufferCapabilities(ImageCapabilities frontCaps,
+ 			    ImageCapabilities backCaps,
+                             FlipContents flip)
+   {
+     if (frontCaps ==  null || backCaps == null)
+       throw new IllegalArgumentException();
+     this.front = frontCaps;
+     this.back = backCaps;
+     this.flip = flip;
+   }
+ 
+   /**
+    * Retrieve the front buffer's image capabilities.
+    *
+    * @return the front buffer's image capabilities
+    */
+   public ImageCapabilities getFrontBufferCapabilities()
+   {
+     return front;
+   }
+ 
+   /**
+    * Retrieve the back buffer's image capabilities.
+    *
+    * @return the back buffer's image capabilities
+    */
+   public ImageCapabilities getBackBufferCapabilities()
+   {
+     return back;
+   }
+ 
+   /**
+    * Return whether or not flipping is supported.
+    *
+    * @return true if flipping is supported, false otherwise
+    */
+   public boolean isPageFlipping()
+   {
+     return flip != null;
+   }
+ 
+   /**
+    * Retrieve the result of a flipping operation.  If this method
+    * returns null then flipping is not supported.  This implies that
+    * "blitting", a fast block transfer, is used to copy the contents
+    * of the back buffer to the front buffer.  Other possible return
+    * values are:
+    * <ul>
+    *   <li><code>FlipContents.UNDEFINED</code> the contents of the
+    *   back buffer are undefined after flipping.</li>
+    *   <li><code>FlipContents.BACKGROUND</code> the contents of the
+    *   back buffer are cleared to the background color after
+    *   flipping.</li>
+    *   <li><code>FlipContents.PRIOR</code> the back buffer contains
+    *   the pre-flipping contents of the front * buffer after
+    *   flipping.</li>
+    *   <li><code>FlipContents.COPIED</code> the back buffer has the
+    *   same contents as the front buffer after flipping.</li>
+    * </ul>
+    *
+    * @return the result of a flipping operation or null if flipping is
+    * not supported
+    */
+   public FlipContents getFlipContents()
+   {
+     return flip;
+   }
+ 
+   /**
+    * Returns true if flipping is only supported in fullscreen mode.
+    *
+    * @return true if flipping is only supported in fullscreen mode,
+    * false otherwise
+    */
+   public boolean isFullScreenRequired()
+   {
+     return true;
+   }
+ 
+   /**
+    * Returns true if flipping can involve more than two buffers.  One
+    * or more intermediate buffers may be available in addition to the
+    * front and back buffers.
+    *
+    * @return true if there are more than two buffers available for
+    * flipping, false otherwise
+    */
+   public boolean isMultiBufferAvailable()
+   {
+     return false;
+   }
+ 
+   /**
+    * Clone this buffering capability descriptor.
+    *
+    * @return a clone of this buffer capability descriptor
+    */
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Button.java gcc-4.1.0/libjava/classpath/java/awt/Button.java
*** gcc-4.0.2/libjava/classpath/java/awt/Button.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Button.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,468 ----
+ /* Button.java -- AWT button widget
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.awt.peer.ButtonPeer;
+ import java.lang.reflect.Array;
+ import java.util.EventListener;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleAction;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleValue;
+ 
+ /**
+   * This class provides a button widget for the AWT. 
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   */
+ public class Button extends Component
+   implements java.io.Serializable, Accessible
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // FIXME: Need readObject/writeObject for serialization
+ 
+ // Serialization version constant
+ private static final long serialVersionUID = -8774683716313001058L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The action command name for this button.
+   * This is package-private to avoid an accessor method.
+   */
+ String actionCommand;
+ 
+ /**
+   * @serial The label for this button.
+   * This is package-private to avoid an accessor method.
+   */
+ String label;
+ 
+ // List of ActionListeners for this class.
+ private transient ActionListener action_listeners;
+ 
+   /*
+    * The number used to generate the name returned by getName.
+    */
+   private static transient long next_button_number;
+   
+   protected class AccessibleAWTButton extends AccessibleAWTComponent
+     implements AccessibleAction, AccessibleValue
+   {
+     public static final long serialVersionUID = -5932203980244017102L;
+ 
+     protected AccessibleAWTButton()
+     {
+       // Do nothing here.
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
+      */
+     public int getAccessibleActionCount()
+     {
+       // Only 1 action possible
+       return 1;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
+      */
+     public String getAccessibleActionDescription(int i)
+     {
+       // JDK 1.4.2 returns the string "click" for action 0.  However, the API
+       // docs don't say what the string to be returned is, beyond being a
+       // description of the action.  So we return the same thing for
+       // compatibility with 1.4.2.
+       if (i == 0)
+         return "click";
+       return null;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
+      */
+     public boolean doAccessibleAction(int i)
+     {
+       if (i != 0)
+         return false;
+       processActionEvent(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand));
+       return true;
+     }
+     
+     public String getAccessibleName()
+     {
+       return label;
+     }
+     
+     public AccessibleAction getAccessibleAction()
+     {
+       return this;
+     }
+     
+     public AccessibleValue getAccessibleValue()
+     {
+       return this;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
+      */
+     public Number getCurrentAccessibleValue()
+     {
+       // Docs say return 1 if selected, but buttons can't be selected, right?
+       return new Integer(0);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
+      */
+     public boolean setCurrentAccessibleValue(Number number)
+     {
+       // Since there's no selection with buttons, we're ignoring this.
+       // TODO someone who knows shoulw check this.
+       return false;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
+      */
+     public Number getMinimumAccessibleValue()
+     {
+       return new Integer(0);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
+      */
+     public Number getMaximumAccessibleValue()
+     {
+       return new Integer(0);
+     }
+     
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.PUSH_BUTTON;
+     }
+   }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>Button</code> with no label.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+   * returns true
+   */
+ public
+ Button()
+ {
+   this("");
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Button</code> with the specified
+   * label.  The action command name is also initialized to this value.
+   *
+   * @param label The label to display on the button.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+   * returns true
+   */
+ public
+ Button(String label)
+ {
+   this.label = label;
+   actionCommand = label;
+ 
+   if (GraphicsEnvironment.isHeadless ())
+     throw new HeadlessException ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * Returns the label for this button.
+   *
+   * @return The label for this button.
+   */
+ public String
+ getLabel()
+ {
+   return(label);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the label for this button to the specified value.
+   *
+   * @param label The new label for this button.
+   */
+ public synchronized void
+ setLabel(String label)
+ {
+   this.label = label;
+   actionCommand = label;
+   if (peer != null)
+     {
+       ButtonPeer bp = (ButtonPeer) peer;
+       bp.setLabel (label);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the action command name for this button.
+   *
+   * @return The action command name for this button.
+   */
+ public String
+ getActionCommand()
+ {
+   return(actionCommand);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the action command name for this button to the specified value.
+   *
+   * @param actionCommand The new action command name.
+   */
+ public void
+ setActionCommand(String actionCommand)
+ {
+   this.actionCommand = actionCommand == null ? label : actionCommand;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds a new entry to the list of listeners that will receive
+   * action events from this button.
+   *
+   * @param listener The listener to add.
+   */
+ public synchronized void
+ addActionListener(ActionListener listener)
+ {
+   action_listeners = AWTEventMulticaster.add(action_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specified listener from the list of listeners that will
+   * receive action events from this button.
+   * 
+   * @param listener The listener to remove.
+   */
+ public synchronized void
+ removeActionListener(ActionListener listener)
+ {
+   action_listeners = AWTEventMulticaster.remove(action_listeners, listener);
+ }
+ 
+   /**
+    * Returns all added <code>ActionListener</code> objects.
+    *
+    * @return an array of listeners
+    *
+    * @since 1.4
+    */
+   public synchronized ActionListener[] getActionListeners()
+   {
+     return (ActionListener[])
+       AWTEventMulticaster.getListeners(action_listeners,
+                                        ActionListener.class);
+   }
+ 
+ /**
+  * Returns all registered EventListers of the given listenerType. 
+  * listenerType must be a subclass of EventListener, or a 
+  * ClassClassException is thrown.
+  *
+  * @param listenerType the listener type to return
+  *
+  * @return an array of listeners
+  * 
+  * @exception ClassCastException If listenerType doesn't specify a class or
+  * interface that implements @see java.util.EventListener.
+  *
+  * @since 1.3 
+  */
+   public EventListener[] getListeners(Class listenerType)
+   {
+     if (listenerType == ActionListener.class)
+       return getActionListeners();
+     return (EventListener[]) Array.newInstance(listenerType, 0);
+   }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Notifies this button that it should create its native peer object.
+   */
+ public void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit ().createButton (this);
+   super.addNotify();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes an event for this button.  If the specified event is an
+   * instance of <code>ActionEvent</code>, then the
+   * <code>processActionEvent()</code> method is called to dispatch it
+   * to any registered listeners.  Otherwise, the superclass method
+   * will be invoked.  Note that this method will not be called at all
+   * unless <code>ActionEvent</code>'s are enabled.  This will be done
+   * implicitly if any listeners are added.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processEvent(AWTEvent event)
+ {
+   if (event instanceof ActionEvent)
+     processActionEvent((ActionEvent)event);
+   else
+     super.processEvent(event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method dispatches an action event for this button to any
+   * registered listeners.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processActionEvent(ActionEvent event)
+ {
+   if (action_listeners != null)
+     action_listeners.actionPerformed(event);
+ }
+ 
+ void
+ dispatchEventImpl(AWTEvent e)
+ {
+   if (e.id <= ActionEvent.ACTION_LAST 
+       && e.id >= ActionEvent.ACTION_FIRST
+       && (action_listeners != null 
+ 	  || (eventMask & AWTEvent.ACTION_EVENT_MASK) != 0))
+     processEvent(e);
+   else
+     super.dispatchEventImpl(e);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this button.
+   *
+   * @return A debugging string for this button.
+   */
+ protected String
+ paramString()
+ {
+   return getName () + "," + getX () + "," + getY () + ","
+     + getWidth () + "x" + getHeight () + ",label=" + getLabel ();
+ }
+ 
+ /**
+  * Gets the AccessibleContext associated with this <code>Button</code>.
+  * The context is created, if necessary.
+  *
+  * @return the associated context
+  */
+ public AccessibleContext getAccessibleContext()
+ {
+   /* Create the context if this is the first request */
+   if (accessibleContext == null)
+     accessibleContext = new AccessibleAWTButton();
+   return accessibleContext;
+ }
+ 
+   /**
+    * Generate a unique name for this button.
+    *
+    * @return A unique name for this button.
+    */
+   String generateName ()
+   {
+     return "button" + getUniqueLong ();
+   }
+ 
+   private static synchronized long getUniqueLong ()
+   {
+     return next_button_number++;
+   }
+ 
+ } // class Button 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Canvas.java gcc-4.1.0/libjava/classpath/java/awt/Canvas.java
*** gcc-4.0.2/libjava/classpath/java/awt/Canvas.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Canvas.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,346 ----
+ /* Canvas.java --
+    Copyright (C) 1999, 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.BufferStrategy;
+ import java.awt.peer.ComponentPeer;
+ import java.io.Serializable;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ 
+ /**
+  * The <code>Canvas</code> component provides a blank rectangular
+  * area, which the client application can use for drawing and for
+  * capturing events.  By overriding the <code>paint()</code> method,
+  * the canvas can be used for anything from simple line drawings to
+  * full-scale custom components.
+  *
+  * @author Original author unknown
+  * @author Tom Tromey  (tromey@redhat.com)
+  * @author Andrew John Hughes  (gnu_andrew@member.fsf.org)
+  * @since 1.0
+  */
+ 
+ public class Canvas
+   extends Component
+   implements Serializable, Accessible
+ {
+ 
+   /**
+    * Compatible with Sun's JDK.
+    */
+   private static final long serialVersionUID = -2284879212465893870L;
+ 
+   /**
+    * The graphics configuration associated with the canvas.
+    */
+   transient GraphicsConfiguration graphicsConfiguration;
+ 
+   /**
+    * The buffer strategy associated with this canvas.
+    */
+   transient BufferStrategy bufferStrategy;
+ 
+   /**
+    * Initializes a new instance of <code>Canvas</code>.
+    */
+   public Canvas() 
+   { 
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Canvas</code>
+    * with the supplied graphics configuration.
+    *
+    * @param graphicsConfiguration the graphics configuration to use
+    *        for this particular canvas.
+    */
+   public Canvas(GraphicsConfiguration graphicsConfiguration)
+   {
+     this.graphicsConfiguration = graphicsConfiguration;
+   }
+ 
+   GraphicsConfiguration getGraphicsConfigurationImpl()
+   {
+     if (graphicsConfiguration != null)
+       return graphicsConfiguration;
+     return super.getGraphicsConfigurationImpl();
+   }
+ 
+   /**
+    * Creates the native peer for this object.
+    */
+   public void addNotify()
+   {
+     if (peer == null)
+       peer = (ComponentPeer) getToolkit().createCanvas(this);
+     super.addNotify();
+   }
+ 
+   /**
+    * Repaints the canvas window.  This method should be overridden by 
+    * a subclass to do something useful, as this method simply paints
+    * the window with the background color.
+    *
+    * @param gfx the <code>Graphics</code> to use for painting
+    */
+   public void paint(Graphics gfx)
+   {
+     /* This implementation doesn't make much sense since the filling
+       of background color is guaranteed for heavyweight components
+       such as this.  But there's no need to worry, since paint() is
+       usually overridden anyway.  */
+     gfx.setColor(getBackground());
+     Dimension size = getSize();
+     gfx.fillRect(0, 0, size.width, size.height);
+   }
+ 
+   /**
+    * This class provides accessibility support for the canvas.
+    */
+   protected class AccessibleAWTCanvas
+     extends AccessibleAWTComponent
+   {
+     /**
+      * For compatability with Sun's JDK
+      */
+     private static final long serialVersionUID = -6325592262103146699L;
+ 
+     /**
+      * Constructor for the accessible canvas.
+      */
+     protected AccessibleAWTCanvas()
+     {
+     }
+ 
+     /**
+      * Returns the accessible role for the canvas.
+      *
+      * @return an instance of <code>AccessibleRole</code>, describing
+      *         the role of the canvas.
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.CANVAS;
+     }
+     
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this <code>Canvas</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTCanvas();
+     return accessibleContext;
+   }
+ 
+   /**
+    * A BltBufferStrategy for canvases.
+    */
+   private class CanvasBltBufferStrategy extends BltBufferStrategy
+   {
+     /**
+      * Creates a block transfer strategy for this canvas.
+      *
+      * @param numBuffers the number of buffers in this strategy
+      * @param accelerated true if the buffer should be accelerated,
+      * false otherwise
+      */
+     CanvasBltBufferStrategy(int numBuffers, boolean accelerated)
+     {
+       super(numBuffers,
+ 	    new BufferCapabilities(new ImageCapabilities(accelerated),
+ 				   new ImageCapabilities(accelerated),
+ 				   BufferCapabilities.FlipContents.COPIED));
+     }
+   }
+ 
+   /**
+    * A FlipBufferStrategy for canvases.
+    */
+   private class CanvasFlipBufferStrategy extends FlipBufferStrategy
+   {
+     /**
+      * Creates a flip buffer strategy for this canvas.
+      *
+      * @param numBuffers the number of buffers in this strategy
+      *
+      * @throws AWTException if the requested number of buffers is not
+      * supported
+      */
+     CanvasFlipBufferStrategy(int numBuffers)
+       throws AWTException
+     {
+       super(numBuffers,
+ 	    new BufferCapabilities(new ImageCapabilities(true),
+ 				   new ImageCapabilities(true),
+ 				   BufferCapabilities.FlipContents.COPIED));
+     }
+   }
+ 
+   /**
+    * Creates a buffering strategy that manages how this canvas is
+    * repainted.  This method attempts to create the optimum strategy
+    * based on the desired number of buffers.  Hardware or software
+    * acceleration may be used.
+    *
+    * createBufferStrategy attempts different levels of optimization,
+    * but guarantees that some strategy with the requested number of
+    * buffers will be created even if it is not optimal.  First it
+    * attempts to create a page flipping strategy, then an accelerated
+    * blitting strategy, then an unaccelerated blitting strategy.
+    *
+    * Calling this method causes any existing buffer strategy to be
+    * destroyed.
+    *
+    * @param numBuffers the number of buffers in this strategy
+    *
+    * @throws IllegalArgumentException if requested number of buffers
+    * is less than one
+    * @throws IllegalStateException if this canvas is not displayable
+    *
+    * @since 1.4
+    */
+   public void createBufferStrategy(int numBuffers)
+   {
+     if (numBuffers < 1)
+       throw new IllegalArgumentException("Canvas.createBufferStrategy: number"
+ 					 + " of buffers is less than one");
+ 
+     if (!isDisplayable())
+       throw new IllegalStateException("Canvas.createBufferStrategy: canvas is"
+ 				      + " not displayable");
+ 
+     BufferStrategy newStrategy = null;
+ 
+     // try a flipping strategy
+     try
+       {
+ 	newStrategy = new CanvasFlipBufferStrategy(numBuffers);
+       }
+     catch (AWTException e)
+       {
+       }
+ 
+     // fall back to an accelerated blitting strategy
+     if (newStrategy == null)
+       newStrategy = new CanvasBltBufferStrategy(numBuffers, true);
+ 
+     bufferStrategy = newStrategy;
+   }
+ 
+   /**
+    * Creates a buffering strategy that manages how this canvas is
+    * repainted.  This method attempts to create a strategy based on
+    * the specified capabilities and throws an exception if the
+    * requested strategy is not supported.
+    *
+    * Calling this method causes any existing buffer strategy to be
+    * destroyed.
+    *
+    * @param numBuffers the number of buffers in this strategy
+    * @param caps the requested buffering capabilities
+    *
+    * @throws AWTException if the requested capabilities are not
+    * supported
+    * @throws IllegalArgumentException if requested number of buffers
+    * is less than one or if caps is null
+    *
+    * @since 1.4
+    */
+   public void createBufferStrategy(int numBuffers, BufferCapabilities caps)
+     throws AWTException
+   {
+     if (numBuffers < 1)
+       throw new IllegalArgumentException("Canvas.createBufferStrategy: number"
+ 					 + " of buffers is less than one");
+ 
+     if (caps == null)
+       throw new IllegalArgumentException("Canvas.createBufferStrategy:"
+ 					 + " capabilities object is null");
+ 
+     // a flipping strategy was requested
+     if (caps.isPageFlipping())
+       bufferStrategy = new CanvasFlipBufferStrategy(numBuffers);
+     else
+       bufferStrategy = new CanvasBltBufferStrategy(numBuffers, true);
+   }
+ 
+   /**
+    * Returns the buffer strategy used by the canvas.
+    *
+    * @return the buffer strategy.
+    * @since 1.4
+    */
+   public BufferStrategy getBufferStrategy()
+   {
+     return bufferStrategy;
+   }
+ 
+   /**
+    * Updates the canvas in response to a request to
+    * <code>repaint()</code> it.  The canvas is cleared
+    * with the current background colour, before <code>paint()</code>
+    * is called to add the new contents.  Subclasses
+    * which override this method should either call this
+    * method via <code>super.update(graphics)</code> or re-implement
+    * this behaviour, so as to ensure that the canvas is
+    * clear before painting takes place.
+    *
+    * @param graphics the graphics context.
+    */
+   public void update(Graphics graphics)
+   {
+     Dimension size;
+ 
+     /* Clear the canvas */
+     size = getSize();
+     graphics.clearRect(0, 0, size.width, size.height);
+     /* Call the paint method */
+     paint(graphics);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/CardLayout.java gcc-4.1.0/libjava/classpath/java/awt/CardLayout.java
*** gcc-4.0.2/libjava/classpath/java/awt/CardLayout.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/CardLayout.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,483 ----
+ /* CardLayout.java -- Card-based layout engine
+    Copyright (C) 1999, 2000, 2002, 2003, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ 
+ /**
+  * This class implements a card-based layout scheme.  Each included
+  * component is treated as a card.  Only one card can be shown at a
+  * time.  This class includes methods for changing which card is
+  * shown.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class CardLayout implements LayoutManager2, Serializable
+ {
+   private static final long serialVersionUID = -4328196481005934313L;
+ 
+   /**
+    * Initializes a new instance of <code>CardLayout</code> with horizontal
+    * and vertical gaps of 0.
+    */
+   public CardLayout ()
+   {
+     this (0, 0);
+   }
+ 
+   /**
+    * Create a new <code>CardLayout</code> object with the specified
+    * horizontal and vertical gaps.
+    *
+    * @param hgap The horizontal gap
+    * @param vgap The vertical gap
+    */
+   public CardLayout (int hgap, int vgap)
+   {
+     this.hgap = hgap;
+     this.vgap = vgap;
+     this.tab = new Hashtable ();
+   }
+ 
+   /**
+    * Add a new component to the layout.  The constraint must be a
+    * string which is used to name the component.  This string can
+    * later be used to refer to the particular component.
+    *
+    * @param comp The component to add
+    * @param constraints The name by which the component can later be called
+    * 
+    * @exception IllegalArgumentException If `constraints' is not a
+    * <code>String</code>
+    */
+   public void addLayoutComponent (Component comp, Object constraints)
+   {
+     if (! (constraints instanceof String))
+       throw new IllegalArgumentException ("Object " + constraints
+ 					  + " is not a string");
+     addLayoutComponent ((String) constraints, comp);
+   }
+ 
+   /**
+    * Add a new component to the layout.  The name can be used later
+    * to refer to the component.
+    * 
+    * @param name The name by which the component can later be called
+    * @param comp The component to add
+    * 
+    * @deprecated This method is deprecated in favor of
+    * <code>addLayoutComponent(Component, Object)</code>.
+    */
+   public void addLayoutComponent (String name, Component comp)
+   {
+     tab.put (name, comp);
+     // First component added is the default component.
+     comp.setVisible(tab.size() == 1);
+   }
+ 
+   /**
+    * Cause the first component in the container to be displayed.
+    *
+    * @param parent The parent container
+    */
+   public void first (Container parent)
+   {
+     gotoComponent (parent, FIRST);
+   }
+ 
+   /**
+    * Return this layout manager's horizontal gap.
+    *
+    * @return the horizontal gap
+    */
+   public int getHgap ()
+   {
+     return hgap;
+   }
+ 
+   /**
+    * Return this layout manager's x alignment.  This method always
+    * returns Component.CENTER_ALIGNMENT.
+    * 
+    * @param parent Container using this layout manager instance
+    *
+    * @return the x-axis alignment
+    */
+   public float getLayoutAlignmentX (Container parent)
+   {
+     return Component.CENTER_ALIGNMENT;
+   }
+ 
+   /**
+    * Returns this layout manager's y alignment.  This method always
+    * returns Component.CENTER_ALIGNMENT.
+    * 
+    * @param parent Container using this layout manager instance
+    *
+    * @return the y-axis alignment
+    */
+   public float getLayoutAlignmentY (Container parent)
+   {
+     return Component.CENTER_ALIGNMENT;
+   }
+ 
+   /**
+    * Return this layout manager's vertical gap.
+    *
+    * @return the vertical gap
+    */
+   public int getVgap ()
+   {
+     return vgap;
+   }
+ 
+   /**
+    * Invalidate this layout manager's state.
+    */
+   public void invalidateLayout (Container target)
+   {
+     // Do nothing.
+   }
+ 
+   /**
+    * Cause the last component in the container to be displayed.
+    * 
+    * @param parent The parent container
+    */
+   public void last (Container parent)
+   {
+     gotoComponent (parent, LAST);
+   }
+ 
+   /**
+    * Lays out the container.  This is done by resizing the child components
+    * to be the same size as the parent, less insets and gaps.
+    *
+    * @param parent The parent container.
+    */ 
+   public void layoutContainer (Container parent)
+   {
+     synchronized (parent.getTreeLock ())
+       {
+ 	int width = parent.width;
+ 	int height = parent.height;
+ 
+ 	Insets ins = parent.getInsets ();
+ 
+ 	int num = parent.ncomponents;
+ 	Component[] comps = parent.component;
+ 
+ 	int x = ins.left + hgap;
+ 	int y = ins.top + vgap;
+ 	width = width - 2 * hgap - ins.left - ins.right;
+ 	height = height - 2 * vgap - ins.top - ins.bottom;
+ 
+ 	for (int i = 0; i < num; ++i)
+ 	  comps[i].setBounds (x, y, width, height);
+       }
+   }
+ 
+   /**
+    * Get the maximum layout size of the container.
+    * 
+    * @param target The parent container
+    *
+    * @return the maximum layout size
+    */
+   public Dimension maximumLayoutSize (Container target)
+   {
+     // The JCL says that this returns Integer.MAX_VALUE for both
+     // dimensions.  But that just seems wrong to me.
+     return getSize (target, MAX);
+   }
+ 
+   /**
+    * Get the minimum layout size of the container.
+    * 
+    * @param target The parent container
+    *
+    * @return the minimum layout size
+    */
+   public Dimension minimumLayoutSize (Container target)
+   {
+     return getSize (target, MIN);
+   }
+ 
+   /**
+    * Cause the next component in the container to be displayed.  If
+    * this current card is the  last one in the deck, the first
+    * component is displayed.
+    * 
+    * @param parent The parent container
+    */
+   public void next (Container parent)
+   {
+     gotoComponent (parent, NEXT);
+   }
+ 
+   /**
+    * Get the preferred layout size of the container.
+    * 
+    * @param parent The parent container
+    *
+    * @return the preferred layout size
+    */
+   public Dimension preferredLayoutSize (Container parent)
+   {
+     return getSize (parent, PREF);
+   }
+ 
+   /**
+    * Cause the previous component in the container to be displayed.
+    * If this current card is the first one in the deck, the last
+    * component is displayed.
+    * 
+    * @param parent The parent container
+    */
+   public void previous (Container parent)
+   {
+     gotoComponent (parent, PREV);
+   }
+ 
+   /**
+    * Remove the indicated component from this layout manager.
+    * 
+    * @param comp The component to remove
+    */
+   public void removeLayoutComponent (Component comp)
+   {
+     Enumeration e = tab.keys ();
+     while (e.hasMoreElements ())
+       {
+ 	Object key = e.nextElement ();
+ 	if (tab.get (key) == comp)
+ 	  {
+ 	    tab.remove (key);
+ 	    Container parent = comp.getParent();
+ 	    next(parent);
+ 	    break;
+ 	  }
+       }
+   }
+ 
+   /**
+    * Set this layout manager's horizontal gap.
+    * 
+    * @param hgap The new gap
+    */
+   public void setHgap (int hgap)
+   {
+     this.hgap = hgap;
+   }
+ 
+   /**
+    * Set this layout manager's vertical gap.
+    * 
+    * @param vgap The new gap
+    */
+   public void setVgap (int vgap)
+   {
+     this.vgap = vgap;
+   }
+ 
+   /**
+    * Cause the named component to be shown.  If the component name is
+    * unknown, this method does nothing.
+    * 
+    * @param parent The parent container
+    * @param name The name of the component to show
+    */
+   public void show (Container parent, String name)
+   {
+     Object target = tab.get (name);
+     if (target != null)
+       {
+ 	int num = parent.ncomponents;
+ 	// This is more efficient than calling getComponents().
+ 	Component[] comps = parent.component;
+ 	for (int i = 0; i < num; ++i)
+ 	  {
+ 	    if (comps[i].isVisible())
+ 	      {
+ 		if (target == comps[i])
+ 		  return;
+ 		comps[i].setVisible (false);
+ 	      }
+ 	  }
+ 	((Component) target).setVisible (true);
+       }
+   }
+ 
+   /**
+    * Returns a string representation of this layout manager.
+    *
+    * @return A string representation of this object.
+    */
+   public String toString ()
+   {
+     return getClass ().getName () + "[" + hgap + "," + vgap + "]";
+   }
+ 
+   /**
+    * This implements first(), last(), next(), and previous().
+    * 
+    * @param parent The parent container
+    * @param what The type of goto: FIRST, LAST, NEXT or PREV
+    */
+   private void gotoComponent (Container parent, int what)
+   {
+     synchronized (parent.getTreeLock ())
+       {
+ 	int num = parent.ncomponents;
+ 	// This is more efficient than calling getComponents().
+ 	Component[] comps = parent.component;
+ 
+ 	if (num == 1)
+ 	  {
+ 	    comps[0].setVisible(true);
+ 	    return;
+ 	  }
+ 
+ 	int choice = -1;
+ 
+ 	if (what == FIRST)
+ 	  choice = 0;
+ 	else if (what == LAST)
+ 	  choice = num - 1;
+ 
+ 	for (int i = 0; i < num; ++i)
+ 	  {
+ 	    if (comps[i].isVisible ())
+ 	      {
+ 		if (what == NEXT)
+ 		  {
+ 		    choice = i + 1;
+ 		    if (choice == num)
+ 		      choice = 0;
+ 		  }
+ 		else if (what == PREV)
+ 		  {
+ 		    choice = i - 1;
+ 		    if (choice < 0)
+ 		      choice = num - 1;
+ 		  }
+ 		else if (choice == i)
+ 		  {
+ 		    // Do nothing if we're already looking at the right
+ 		    // component.
+ 		    return;
+ 		  }
+ 		comps[i].setVisible (false);
+  
+ 		if (choice >= 0)
+ 		  break;
+ 	      }
+ 	  }
+ 
+ 	if (choice >= 0 && choice < num)
+ 	  comps[choice].setVisible (true);
+       }
+   }
+ 
+   // Compute the size according to WHAT.
+   private Dimension getSize (Container parent, int what)
+   {
+     synchronized (parent.getTreeLock ())
+       {
+ 	int w = 0, h = 0, num = parent.ncomponents;
+ 	Component[] comps = parent.component;
+ 
+ 	for (int i = 0; i < num; ++i)
+ 	  {
+ 	    Dimension d;
+ 
+ 	    if (what == MIN)
+ 	      d = comps[i].getMinimumSize ();
+ 	    else if (what == MAX)
+ 	      d = comps[i].getMaximumSize ();
+ 	    else
+ 	      d = comps[i].getPreferredSize ();
+ 
+ 	    w = Math.max (d.width, w);
+ 	    h = Math.max (d.height, h);
+ 	  }
+ 
+ 	Insets i = parent.getInsets ();
+ 	w += 2 * hgap + i.right + i.left;
+ 	h += 2 * vgap + i.bottom + i.top;
+ 
+ 	// Handle overflow.
+ 	if (w < 0)
+ 	  w = Integer.MAX_VALUE;
+ 	if (h < 0)
+ 	  h = Integer.MAX_VALUE;
+ 
+ 	return new Dimension (w, h);
+       }
+   }
+ 
+   /**
+    * @serial Horizontal gap value.
+    */
+   private int hgap;
+ 
+   /**
+    * @serial Vertical gap value.
+    */
+   private int vgap;
+ 
+   /**
+    * @serial Table of named components.
+    */
+   private Hashtable tab;
+ 
+   // These constants are used by the private gotoComponent method.
+   private static final int FIRST = 0;
+   private static final int LAST = 1;
+   private static final int NEXT = 2;
+   private static final int PREV = 3;
+ 
+   // These constants are used by the private getSize method.
+   private static final int MIN = 0;
+   private static final int MAX = 1;
+   private static final int PREF = 2;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Checkbox.java gcc-4.1.0/libjava/classpath/java/awt/Checkbox.java
*** gcc-4.0.2/libjava/classpath/java/awt/Checkbox.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Checkbox.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,656 ----
+ /* Checkbox.java -- An AWT checkbox widget
+    Copyright (C) 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ItemEvent;
+ import java.awt.event.ItemListener;
+ import java.awt.peer.CheckboxPeer;
+ import java.io.Serializable;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleAction;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleState;
+ import javax.accessibility.AccessibleStateSet;
+ import javax.accessibility.AccessibleValue;
+ 
+ /**
+  * This class implements a component which has an on/off state.  Two
+  * or more Checkboxes can be grouped by a CheckboxGroup.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@redhat.com)
+  */
+ public class Checkbox extends Component
+   implements ItemSelectable, Accessible, Serializable
+ {
+ 
+ // FIXME: Need readObject/writeObject for this.
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization Constant
+ private static final long serialVersionUID = 7270714317450821763L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The checkbox group for this checkbox.
+   */
+ private CheckboxGroup group;
+ 
+ /**
+   * @serial The label on this checkbox.
+   */
+ private String label;
+ 
+ /**
+   * @serial The state of this checkbox.
+   * This is package-private to avoid an accessor method.
+   */
+ boolean state;
+ 
+ // The list of listeners for this object.
+ private transient ItemListener item_listeners;
+ 
+   /*
+    * The number used to generate the name returned by getName.
+    */
+   private static transient long next_checkbox_number;
+ 
+ /**
+  * This class provides accessibility support for the
+  * checkbox.
+  *
+  * @author Jerry Quinn  (jlquinn@optonline.net)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  */
+ protected class AccessibleAWTCheckbox
+   extends AccessibleAWTComponent
+   implements ItemListener, AccessibleAction, AccessibleValue
+ {
+   /**
+    * Serialization constant to match JDK 1.5
+    */
+   private static final long serialVersionUID = 7881579233144754107L;
+ 
+   /**
+    * Default constructor which simply calls the
+    * super class for generic component accessibility
+    * handling.
+    */
+   public AccessibleAWTCheckbox()
+   {
+     super();
+   }
+ 
+   /**
+    * Captures changes to the state of the checkbox and
+    * fires appropriate accessible property change events.
+    *
+    * @param event the event fired.
+    * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
+    */
+   public void itemStateChanged(ItemEvent event)
+   {
+     firePropertyChange(ACCESSIBLE_STATE_PROPERTY,
+ 		       state ? null : AccessibleState.CHECKED,
+                        state ? AccessibleState.CHECKED : null);
+   }
+   
+   /**
+    * Returns an implementation of the <code>AccessibleAction</code>
+    * interface for this accessible object.  In this case, the
+    * current instance is simply returned (with a more appropriate
+    * type), as it also implements the accessible action as well as
+    * the context.
+    *
+    * @return the accessible action associated with this context.
+    * @see javax.accessibility.AccessibleAction
+    */
+   public AccessibleAction getAccessibleAction()
+   {
+     return this;
+   }
+   
+   /**
+    * Returns an implementation of the <code>AccessibleValue</code>
+    * interface for this accessible object.  In this case, the
+    * current instance is simply returned (with a more appropriate
+    * type), as it also implements the accessible value as well as
+    * the context.
+    *
+    * @return the accessible value associated with this context.
+    * @see javax.accessibility.AccessibleValue
+    */
+   public AccessibleValue getAccessibleValue()
+   {
+     return this;
+   }
+   
+   /* 
+    * The following methods are implemented in the JDK (up to
+    * 1.5) as stubs.  We do likewise here.
+    */
+ 
+   /**
+    * Returns the number of actions associated with this accessible
+    * object.  This default implementation returns 0.
+    *
+    * @return the number of accessible actions available.
+    * @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
+    */
+   public int getAccessibleActionCount()
+   {
+     // 1.4.1 and 1.5 do this
+     return 0;
+   }
+ 
+   /**
+    * Returns a description of the action with the supplied id.
+    * This default implementation always returns null.
+    *
+    * @param i the id of the action whose description should be
+    *          retrieved.
+    * @return a <code>String</code> describing the action.
+    * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
+    */
+   public String getAccessibleActionDescription(int i)
+   {
+     // 1.5 does this
+     return null;
+   }
+ 
+   /**
+    * Executes the action with the specified id.  This
+    * default implementation simply returns false.
+    *
+    * @param i the id of the action to perform.
+    * @return true if the action was performed.
+    * @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
+    */
+   public boolean doAccessibleAction(int i)
+   {
+     // 1.5 does this
+     return false;
+   }
+ 
+   /**
+    * Returns the current value of this accessible object.
+    * If no value has been set, null is returned.  This
+    * default implementation always returns null, regardless.
+    *
+    * @return the numeric value of this object, or null if
+    *         no value has been set.
+    * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
+    */
+   public Number getCurrentAccessibleValue()
+   {
+     // 1.5 does this
+     return null;
+   }
+ 
+   /**
+    * Sets the current value of this accessible object
+    * to that supplied.  In this default implementation,
+    * the value is never set and the method always returns
+    * false.
+    *
+    * @param number the new accessible value.
+    * @return true if the value was set.
+    * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
+    */
+   public boolean setCurrentAccessibleValue(Number number)
+   {
+     // 1.5 does this
+     return false;
+   }
+ 
+   /**
+    * Returns the minimum acceptable accessible value used
+    * by this object, or null if no minimum value exists.
+    * This default implementation always returns null.
+    *
+    * @return the minimum acceptable accessible value, or null
+    *         if there is no minimum.
+    * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
+    */
+   public Number getMinimumAccessibleValue()
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the maximum acceptable accessible value used
+    * by this object, or null if no maximum value exists.
+    * This default implementation always returns null.
+    *
+    * @return the maximum acceptable accessible value, or null
+    *         if there is no maximum.
+    * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
+    */
+   public Number getMaximumAccessibleValue()
+   {
+     return null;
+   }
+   
+   /**
+    * Returns the role of this accessible object.
+    *
+    * @return the instance of <code>AccessibleRole</code>,
+    *         which describes this object.
+    * @see javax.accessibility.AccessibleRole
+    */
+   public AccessibleRole getAccessibleRole() 
+   {
+     return AccessibleRole.CHECK_BOX;
+   }
+   
+   /**
+    * Returns the state set of this accessible object.
+    *
+    * @return a set of <code>AccessibleState</code>s
+    *         which represent the current state of the
+    *         accessible object.
+    * @see javax.accessibility.AccessibleState
+    * @see javax.accessibility.AccessibleStateSet
+    */
+   public AccessibleStateSet getAccessibleStateSet()
+   {
+     AccessibleStateSet set = super.getAccessibleStateSet();
+     if (state)
+       set.add(AccessibleState.CHECKED);
+     return set;
+   }
+ 
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>Checkbox</code> with no label,
+   * an initial state of off, and that is not part of any checkbox group.
+   */
+ public 
+ Checkbox()
+ {
+   this("", false, null);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Checkbox</code> with the specified
+   * label, an initial state of off, and that is not part of any checkbox
+   * group.
+   *
+   * @param label The label for this checkbox.
+   */
+ public
+ Checkbox(String label)
+ {
+   this(label, false, null);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Checkbox</code> with the specified
+   * label and initial state, and that is not part of any checkbox
+   * group.
+   *
+   * @param label The label for this checkbox.
+   * @param state The initial state of the checkbox, <code>true</code> for
+   * on, <code>false</code> for off.
+   */
+ public
+ Checkbox(String label, boolean state)
+ {
+   this(label, state, null);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Checkbox</code> with the specified
+   * label, initial state, and checkbox group.
+   *
+   * @param label The label for this checkbox.
+   * @param group The checkbox group for this box, or <code>null</code>
+   * if there is no checkbox group.
+   * @param state The initial state of the checkbox, <code>true</code> for
+   * on, <code>false</code> for off.
+   */
+ public
+ Checkbox(String label, CheckboxGroup group, boolean state)
+ {
+   this(label, state, group);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Checkbox</code> with the specified
+   * label, initial state, and checkbox group.
+   *
+   * @param label The label for this checkbox.
+   * @param state The initial state of the checkbox, <code>true</code> for
+   * on, <code>false</code> for off.
+   * @param group The checkbox group for this box, or <code>null</code>
+   * if there is no checkbox group.
+   */
+ public
+ Checkbox(String label, boolean state, CheckboxGroup group)
+ {
+   this.label = label;
+   this.state = state;
+   this.group = group;
+ 
+   if ( state && group != null )
+     {
+       group.setSelectedCheckbox(this);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * Returns the label for this checkbox.
+   *
+   * @return The label for this checkbox.
+   */
+ public String
+ getLabel()
+ {
+   return(label);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the label for this checkbox to the specified value.
+   *
+   * @param label The new checkbox label.
+   */
+ public synchronized void
+ setLabel(String label)
+ {
+   this.label = label;
+   if (peer != null)
+     {
+       CheckboxPeer cp = (CheckboxPeer) peer;
+       cp.setLabel(label);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the state of this checkbox.
+   *
+   * @return The state of this checkbox, which will be <code>true</code> for
+   * on and <code>false</code> for off.
+   */
+ public boolean
+ getState()
+ {
+   return(state);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the state of this checkbox to the specified value.
+   *
+   * @param state The new state of the checkbox, which will be <code>true</code>
+   * for on or <code>false</code> for off.
+   */
+ public synchronized void
+ setState(boolean state)
+ {
+   this.state = state;
+   if (peer != null)
+     {
+       CheckboxPeer cp = (CheckboxPeer) peer;
+       cp.setState (state);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns an array of length one containing the checkbox label if this
+   * checkbox is selected.  Otherwise <code>null</code> is returned.
+   *
+   * @return The selection state of this checkbox.
+   */
+ public Object[]
+ getSelectedObjects()
+ {
+   if (state == false)
+     return(null);
+ 
+   Object[] objs = new Object[1];
+   objs[0] = label;
+ 
+   return(objs);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the checkbox group this object is a member of, if any.
+   *
+   * @return This object's checkbox group, of <code>null</code> if it is
+   * not a member of any group.
+   */
+ public CheckboxGroup
+ getCheckboxGroup()
+ {
+   return(group);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets this object's checkbox group to the specified group.
+   *
+   * @param group The new checkbox group, or <code>null</code> to make this
+   * object part of no checkbox group.
+   */
+ public synchronized void
+ setCheckboxGroup(CheckboxGroup group)
+ {
+   this.group = group;
+   if (peer != null)
+     {
+       CheckboxPeer cp = (CheckboxPeer) peer;
+       cp.setCheckboxGroup (group);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Creates this object's native peer.
+   */
+ public void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit ().createCheckbox (this);
+   super.addNotify ();
+ }
+ 
+   public ItemListener[] getItemListeners ()
+   {
+     return (ItemListener[])
+       AWTEventMulticaster.getListeners (item_listeners, ItemListener.class);
+   }
+ 
+ /**
+   * Adds a new listeners to the list of registered listeners for this object.
+   *
+   * @param listener The new listener to add.
+   */
+ public synchronized void
+ addItemListener(ItemListener listener)
+ {
+   item_listeners = AWTEventMulticaster.add(item_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes a listener from the list of registered listeners for this object.
+   *
+   * @param listener The listener to remove.
+   */
+ public synchronized void
+ removeItemListener(ItemListener listener)
+ {
+   item_listeners = AWTEventMulticaster.remove(item_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes this event by calling <code>processItemEvent()</code> if it
+   * is any instance of <code>ItemEvent</code>.  Otherwise it is passed to
+   * the superclass for processing.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processEvent(AWTEvent event)
+ {
+   if (event instanceof ItemEvent)
+     processItemEvent((ItemEvent)event);
+   else
+     super.processEvent(event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes this event by dispatching it to any registered listeners.
+   *
+   * @param event The <code>ItemEvent</code> to process.
+   */
+ protected void
+ processItemEvent(ItemEvent event)
+ {
+   if (item_listeners != null)
+     item_listeners.itemStateChanged(event);
+ }
+ 
+ void
+ dispatchEventImpl(AWTEvent e)
+ {
+   if (e.id <= ItemEvent.ITEM_LAST
+       && e.id >= ItemEvent.ITEM_FIRST
+       && (item_listeners != null 
+ 	  || (eventMask & AWTEvent.ITEM_EVENT_MASK) != 0))
+     processEvent(e);
+   else
+     super.dispatchEventImpl(e);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this object.
+   */
+ protected String
+ paramString()
+ {
+   // Note: We cannot add the checkbox group information here because this
+   // would trigger infinite recursion when CheckboxGroup.toString() is
+   // called and the box is in its selected state.
+   return ("label=" + label + ",state=" + state + "," + super.paramString());
+ }
+ 
+ /**
+  * Gets the AccessibleContext associated with this <code>Checkbox</code>.
+  * The context is created, if necessary.
+  *
+  * @return the associated context
+  */
+ public AccessibleContext getAccessibleContext()
+ {
+   /* Create the context if this is the first request */
+   if (accessibleContext == null)
+   {
+     AccessibleAWTCheckbox ac = new AccessibleAWTCheckbox();
+     accessibleContext = ac;
+     addItemListener(ac);
+   }
+   return accessibleContext;
+ }
+ 
+   /**
+    * Generate a unique name for this checkbox.
+    *
+    * @return A unique name for this checkbox.
+    */
+   String generateName()
+   {
+     return "checkbox" + getUniqueLong();
+   }
+ 
+   private static synchronized long getUniqueLong()
+   {
+     return next_checkbox_number++;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/CheckboxGroup.java gcc-4.1.0/libjava/classpath/java/awt/CheckboxGroup.java
*** gcc-4.0.2/libjava/classpath/java/awt/CheckboxGroup.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/CheckboxGroup.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,173 ----
+ /* CheckboxGroup.java -- A grouping class for checkboxes.
+    Copyright (C) 1999, 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+   * This class if for combining checkboxes into groups so that only
+   * one checkbox in the group can be selected at any one time.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@redhat.com)
+   */
+ public class CheckboxGroup implements java.io.Serializable
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization constant
+ private static final long serialVersionUID = 3729780091441768983L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The currently selected checkbox.
+   */
+ private Checkbox selectedCheckbox;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>CheckboxGroup</code>.
+   */
+ public
+ CheckboxGroup()
+ {
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the currently selected checkbox, or <code>null</code> if none
+   * of the checkboxes in this group are selected.
+   *
+   * @return The selected checkbox.
+   */
+ public Checkbox
+ getSelectedCheckbox()
+ {
+   return getCurrent ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the currently selected checkbox, or <code>null</code> if none
+   * of the checkboxes in this group are selected.
+   *
+   * @return The selected checkbox.
+   *
+   * @deprecated This method is deprecated in favor of 
+   * <code>getSelectedCheckbox()</code>.
+   */
+ public Checkbox
+ getCurrent()
+ {
+   return(selectedCheckbox);
+ } 
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method sets the specified checkbox to be the selected on in this
+   * group, and unsets all others.
+   *
+   * @param selectedCheckbox The new selected checkbox.
+   */
+ public void
+ setSelectedCheckbox(Checkbox selectedCheckbox)
+ {
+   setCurrent (selectedCheckbox);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method sets the specified checkbox to be the selected on in this
+   * group, and unsets all others.
+   *
+   * @param selectedCheckbox The new selected checkbox.
+   *
+   * @deprecated This method is deprecated in favor of
+   * <code>setSelectedCheckbox()</code>.
+   */
+ public void
+ setCurrent(Checkbox selectedCheckbox)
+ {
+   if (this.selectedCheckbox != null)
+     {
+       if (this.selectedCheckbox.getCheckboxGroup() != this)
+         return;
+ 
+       this.selectedCheckbox.setState(false);
+     }
+ 
+   this.selectedCheckbox = selectedCheckbox;
+   if (selectedCheckbox != null)
+     selectedCheckbox.setState(true);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a string representation of this checkbox group.
+   *
+   * @return A string representation of this checkbox group.
+   */
+ public String
+ toString()
+ {
+   return(getClass().getName() + "[selectedCheckbox=" + selectedCheckbox + "]");
+ }
+ 
+ } // class CheckboxGroup 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/CheckboxMenuItem.java gcc-4.1.0/libjava/classpath/java/awt/CheckboxMenuItem.java
*** gcc-4.0.2/libjava/classpath/java/awt/CheckboxMenuItem.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/CheckboxMenuItem.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,357 ----
+ /* CheckboxMenuItem.java -- A menu option with a checkbox on it.
+    Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ItemEvent;
+ import java.awt.event.ItemListener;
+ import java.awt.peer.CheckboxMenuItemPeer;
+ import java.util.EventListener;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleAction;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleValue;
+ 
+ /**
+   * This class implements a menu item that has a checkbox on it indicating
+   * the selected state of some option.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@redhat.com)
+   */
+ public class CheckboxMenuItem extends MenuItem
+   implements ItemSelectable, Accessible
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization constant
+ private static final long serialVersionUID = 6190621106981774043L;
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The state of the checkbox, with <code>true</code> being on and
+   * <code>false</code> being off.
+   */
+ private boolean state;
+ 
+ // List of registered ItemListeners
+ private transient ItemListener item_listeners;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>CheckboxMenuItem</code> with no
+   * label and an initial state of off.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+   * returns true.
+   */
+ public
+ CheckboxMenuItem()
+ {
+   this("", false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>CheckboxMenuItem</code> with the
+   * specified label and an initial state of off.
+   *
+   * @param label The label of the menu item.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+   * returns true.
+   */
+ public
+ CheckboxMenuItem(String label)
+ {
+   this(label, false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>CheckboxMenuItem</code> with the
+   * specified label and initial state.
+   *
+   * @param label The label of the menu item.
+   * @param state The initial state of the menu item, where <code>true</code>
+   * is on, and <code>false</code> is off.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+   * returns true.
+   */
+ public
+ CheckboxMenuItem(String label, boolean state)
+ {
+   super(label);
+   this.state = state;
+ 
+   if (GraphicsEnvironment.isHeadless())
+     throw new HeadlessException ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the state of this menu item.
+   *
+   * @return The state of this menu item.
+   */
+ public boolean
+ getState()
+ {
+   return(state);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the state of this menu item.
+   *
+   * @param state The initial state of the menu item, where <code>true</code>
+   * is on, and <code>false</code> is off.
+   */
+ public synchronized void
+ setState(boolean state)
+ {
+   this.state = state;
+   if (peer != null)
+     {
+       CheckboxMenuItemPeer cp = (CheckboxMenuItemPeer) peer;
+       cp.setState (state);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns an array of length 1 with the menu item label for this object
+   * if the state is on.  Otherwise <code>null</code> is returned.
+   *
+   * @return An array with this menu item's label if it has a state of on,
+   * or <code>null</code> otherwise.
+   */
+ public Object[]
+ getSelectedObjects()
+ {
+   if (state == false)
+     return(null);
+ 
+   Object[] obj = new Object[1];
+   obj[0] = getLabel();
+ 
+   return(obj);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Create's this object's native peer
+   */
+ public synchronized void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit().createCheckboxMenuItem(this);
+ 
+   super.addNotify ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified listener to the list of registered item listeners
+   * for this object.
+   *
+   * @param listener The listener to add.
+   */
+ public synchronized void
+ addItemListener(ItemListener listener)
+ {
+   item_listeners = AWTEventMulticaster.add(item_listeners, listener);
+ 
+   enableEvents(AWTEvent.ITEM_EVENT_MASK);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specified listener from the list of registered item
+   * listeners for this object.
+   *
+   * @param listener The listener to remove.
+   */
+ public synchronized void
+ removeItemListener(ItemListener listener)
+ {
+   item_listeners = AWTEventMulticaster.remove(item_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes the specified event by calling <code>processItemEvent()</code>
+   * if it is an instance of <code>ItemEvent</code> or calling the superclass
+   * method otherwise.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processEvent(AWTEvent event)
+ {
+   if (event instanceof ItemEvent)
+     processItemEvent((ItemEvent)event);
+   else
+     super.processEvent(event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes the specified event by dispatching it to any registered listeners.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processItemEvent(ItemEvent event)
+ {
+   if (item_listeners != null)
+     item_listeners.itemStateChanged(event);
+ }
+ 
+ void
+ dispatchEventImpl(AWTEvent e)
+ {
+   if (e instanceof ItemEvent)
+     {
+       synchronized (this)
+         {
+           state = (((ItemEvent) e).getStateChange() == ItemEvent.SELECTED);
+         }
+     }
+ 
+   if (e.id <= ItemEvent.ITEM_LAST 
+       && e.id >= ItemEvent.ITEM_FIRST
+       && (item_listeners != null 
+ 	  || (eventMask & AWTEvent.ITEM_EVENT_MASK) != 0))
+     processEvent(e);
+   else
+     super.dispatchEventImpl(e);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this object.
+   *
+   * @return A debugging string for this object.
+   */
+ public String
+ paramString()
+ {
+   return ("label=" + getLabel() + ",state=" + state
+ 	  + "," + super.paramString());
+ }
+ 
+   /**
+    * Returns an array of all the objects currently registered as FooListeners
+    * upon this <code>CheckboxMenuItem</code>. FooListeners are registered using
+    * the addFooListener method.
+    *
+    * @exception ClassCastException If listenerType doesn't specify a class or
+    * interface that implements java.util.EventListener.
+    */
+   public EventListener[] getListeners (Class listenerType)
+   {
+     if (listenerType == ItemListener.class)
+       return AWTEventMulticaster.getListeners (item_listeners, listenerType); 
+ 	      
+     return super.getListeners (listenerType);
+   }
+ 
+   /**
+    * Returns an aray of all item listeners currently registered to this
+    * <code>CheckBoxMenuItem</code>.
+    */
+   public ItemListener[] getItemListeners ()
+   {
+     return (ItemListener[]) getListeners (ItemListener.class);
+   }
+ 
+ 
+   protected class AccessibleAWTCheckboxMenuItem extends AccessibleAWTMenuItem
+     implements AccessibleAction, AccessibleValue
+   {
+     // I think the base class provides the necessary implementation
+     
+     private static final long serialVersionUID = -1122642964303476L;
+   }
+   
+   /**
+    * Gets the AccessibleContext associated with this <code>CheckboxMenuItem</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTCheckboxMenuItem();
+     return accessibleContext;
+   }
+ 
+ } // class CheckboxMenuItem
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Choice.java gcc-4.1.0/libjava/classpath/java/awt/Choice.java
*** gcc-4.0.2/libjava/classpath/java/awt/Choice.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Choice.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,642 ----
+ /* Choice.java -- Java choice button widget.
+    Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ItemEvent;
+ import java.awt.event.ItemListener;
+ import java.awt.peer.ChoicePeer;
+ import java.io.Serializable;
+ import java.util.EventListener;
+ import java.util.Vector;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleAction;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ 
+ /**
+   * This class implements a drop down choice list.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class Choice extends Component
+   implements ItemSelectable, Serializable, Accessible
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization constant
+ private static final long serialVersionUID = -4075310674757313071L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial A list of items for the choice box, which can be <code>null</code>.
+   * This is package-private to avoid an accessor method.
+   */
+ Vector pItems = new Vector();
+ 
+ /**
+   * @serial The index of the selected item in the choice box.
+   */
+ private int selectedIndex = -1;
+ 
+ // Listener chain
+ private ItemListener item_listeners;
+ 
+ /**
+  * This class provides accessibility support for the
+  * combo box.
+  *
+  * @author Jerry Quinn  (jlquinn@optonline.net)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  */
+   protected class AccessibleAWTChoice
+   extends AccessibleAWTComponent
+   implements AccessibleAction
+   {
+ 
+     /**
+      * Serialization constant to match JDK 1.5
+      */
+     private static final long serialVersionUID = 7175603582428509322L;
+ 
+     /**
+      * Default constructor which simply calls the
+      * super class for generic component accessibility
+      * handling.
+      */
+     public AccessibleAWTChoice()
+     {
+       super();
+     }
+ 
+     /**
+      * Returns an implementation of the <code>AccessibleAction</code>
+      * interface for this accessible object.  In this case, the
+      * current instance is simply returned (with a more appropriate
+      * type), as it also implements the accessible action as well as
+      * the context.
+      *
+      * @return the accessible action associated with this context.
+      * @see javax.accessibility.AccessibleAction
+      */
+     public AccessibleAction getAccessibleAction()
+     {
+       return this;
+     }
+ 
+     /**
+      * Returns the role of this accessible object.
+      *
+      * @return the instance of <code>AccessibleRole</code>,
+      *         which describes this object.
+      * @see javax.accessibility.AccessibleRole
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.COMBO_BOX;
+     }
+ 	  
+     /**
+      * Returns the number of actions associated with this accessible
+      * object.  In this case, it is the number of choices available.
+      *
+      * @return the number of choices available.
+      * @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
+      */
+     public int getAccessibleActionCount()
+     {
+       return pItems.size();
+     }
+ 
+     /**
+      * Returns a description of the action with the supplied id.
+      * In this case, it is the text used in displaying the particular
+      * choice on-screen.
+      *
+      * @param i the id of the choice whose description should be
+      *          retrieved.
+      * @return the <code>String</code> used to describe the choice.
+      * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
+      */
+     public String getAccessibleActionDescription(int i)
+     {
+       return (String) pItems.get(i);
+     }
+ 	  
+     /**
+      * Executes the action with the specified id.  In this case,
+      * calling this method provides the same behaviour as would
+      * choosing a choice from the list in a visual manner.
+      *
+      * @param i the id of the choice to select.
+      * @return true if a valid choice was specified.
+      * @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
+      */
+     public boolean doAccessibleAction(int i)
+     {
+       if (i < 0 || i >= pItems.size())
+ 	return false;
+ 	    
+       Choice.this.processItemEvent(new ItemEvent(Choice.this,
+ 						 ItemEvent.ITEM_STATE_CHANGED,
+ 						 this, ItemEvent.SELECTED));
+       return true;
+     }
+   }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+   /**
+    * Initializes a new instance of <code>Choice</code>.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+    * returns true
+    */
+   public Choice()
+   {
+     if (GraphicsEnvironment.isHeadless())
+       throw new HeadlessException ();
+   }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the number of items in the list.
+   *
+   * @return The number of items in the list.
+   */
+ public int
+ getItemCount()
+ {
+   return countItems ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the number of items in the list.
+   *
+   * @return The number of items in the list.
+   *
+   * @deprecated This method is deprecated in favor of <code>getItemCount</code>.
+   */
+ public int
+ countItems()
+ {
+   return(pItems.size());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the item at the specified index in the list.
+   *
+   * @param index The index into the list to return the item from.
+   *
+   * @exception ArrayIndexOutOfBoundsException If the index is invalid.
+   */
+ public String
+ getItem(int index)
+ {
+   return((String)pItems.elementAt(index));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified item to this choice box.
+   *
+   * @param item The item to add.
+   *
+   * @exception NullPointerException If the item's value is null
+   *
+   * @since 1.1
+   */
+ public synchronized void
+ add(String item)
+ {
+   if (item == null)
+     throw new NullPointerException ("item must be non-null");
+ 
+   pItems.addElement(item);
+ 
+   int i = pItems.size () - 1;
+   if (peer != null)
+     {
+       ChoicePeer cp = (ChoicePeer) peer;
+       cp.add (item, i);
+     }
+   else if (selectedIndex == -1) 
+     select(0);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified item to this choice box.
+   *
+   * This method is oboslete since Java 2 platform 1.1. Please use @see add
+   * instead.
+   *
+   * @param item The item to add.
+   *
+   * @exception NullPointerException If the item's value is equal to null
+   */
+ public synchronized void
+ addItem(String item)
+ {
+   add(item);
+ }
+ 
+ /*************************************************************************/
+ 
+ /** Inserts an item into this Choice.  Existing items are shifted
+  * upwards.  If the new item is the only item, then it is selected.
+  * If the currently selected item is shifted, then the first item is
+  * selected.  If the currently selected item is not shifted, then it
+  * remains selected.
+  *
+  * @param item The item to add.
+  * @param index The index at which the item should be inserted.
+  *
+  * @exception IllegalArgumentException If index is less than 0
+  */
+ public synchronized void
+ insert(String item, int index)
+ {
+   if (index < 0)
+     throw new IllegalArgumentException ("index may not be less then 0");
+ 
+   if (index > getItemCount ())
+     index = getItemCount ();
+ 
+   pItems.insertElementAt(item, index);
+ 
+   if (peer != null)
+     {
+       ChoicePeer cp = (ChoicePeer) peer;
+       cp.add (item, index);
+     }
+   else if (selectedIndex == -1 || selectedIndex >= index)
+     select(0);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specified item from the choice box.
+   *
+   * @param item The item to remove.
+   *
+   * @exception IllegalArgumentException If the specified item doesn't exist.
+   */
+ public synchronized void
+ remove(String item)
+ {
+   int index = pItems.indexOf(item);
+   if (index == -1)
+     throw new IllegalArgumentException ("item \""
+ 					+ item + "\" not found in Choice");
+   remove(index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the item at the specified index from the choice box.
+   *
+   * @param index The index of the item to remove.
+   *
+   * @exception IndexOutOfBoundsException If the index is not valid.
+   */
+ public synchronized void
+ remove(int index)
+ {
+   if ((index < 0) || (index > getItemCount()))
+     throw new IllegalArgumentException("Bad index: " + index);
+ 
+   pItems.removeElementAt(index);
+ 
+   if (peer != null)
+     {
+       ChoicePeer cp = (ChoicePeer) peer;
+       cp.remove (index);
+     }
+   else
+     {
+       if (getItemCount() == 0)
+ 	selectedIndex = -1;
+       else if (index == selectedIndex)
+ 	select(0);
+     }
+ 
+   if (selectedIndex > index)
+     --selectedIndex;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes all of the objects from this choice box.
+   */
+ public synchronized void
+ removeAll()
+ {
+   if (getItemCount() <= 0)
+     return;
+   
+   pItems.removeAllElements ();
+ 
+   if (peer != null)
+     {
+       ChoicePeer cp = (ChoicePeer) peer;
+       cp.removeAll ();
+     }
+ 
+   selectedIndex = -1;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the currently selected item, or null if no item is
+   * selected.
+   *
+   * @return The currently selected item.
+   */
+ public synchronized String
+ getSelectedItem()
+ {
+   return (selectedIndex == -1
+ 	  ? null
+ 	  : ((String)pItems.elementAt(selectedIndex)));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns an array with one row containing the selected item.
+   *
+   * @return An array containing the selected item.
+   */
+ public synchronized Object[]
+ getSelectedObjects()
+ {
+   if (selectedIndex == -1)
+     return null;
+ 
+   Object[] objs = new Object[1];
+   objs[0] = pItems.elementAt(selectedIndex);
+ 
+   return(objs);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the index of the selected item.
+   *
+   * @return The index of the selected item.
+   */
+ public int
+ getSelectedIndex()
+ {
+   return(selectedIndex);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Forces the item at the specified index to be selected.
+   *
+   * @param index The index of the row to make selected.
+   *
+   * @exception IllegalArgumentException If the specified index is invalid.
+   */
+ public synchronized void
+ select(int index)
+ {
+   if ((index < 0) || (index > getItemCount()))
+     throw new IllegalArgumentException("Bad index: " + index);
+ 
+   this.selectedIndex = index;
+   if (peer != null)
+     {
+       ChoicePeer cp = (ChoicePeer) peer;
+       cp.select (index);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Forces the named item to be selected.
+   *
+   * @param item The item to be selected.
+   *
+   * @exception IllegalArgumentException If the specified item does not exist.
+   */
+ public synchronized void
+ select(String item)
+ {
+   int index = pItems.indexOf(item);
+   if (index >= 0)
+     select(index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Creates the native peer for this object.
+   */
+ public void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit ().createChoice (this);
+   super.addNotify ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified listener to the list of registered listeners for
+   * this object.
+   *
+   * @param listener The listener to add.
+   */
+ public synchronized void
+ addItemListener(ItemListener listener)
+ {
+   item_listeners = AWTEventMulticaster.add(item_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specified listener from the list of registered listeners for
+   * this object.
+   *
+   * @param listener The listener to remove.
+   */
+ public synchronized void
+ removeItemListener(ItemListener listener)
+ {
+   item_listeners = AWTEventMulticaster.remove(item_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes this event by invoking <code>processItemEvent()</code> if the
+   * event is an instance of <code>ItemEvent</code>, otherwise the event
+   * is passed to the superclass.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processEvent(AWTEvent event)
+ {
+   if (event instanceof ItemEvent)
+     processItemEvent((ItemEvent)event);
+   else
+     super.processEvent(event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes item event by dispatching to any registered listeners.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processItemEvent(ItemEvent event)
+ {
+   int index = pItems.indexOf((String) event.getItem());
+   // Don't call back into the peers when selecting index here
+   if (event.getStateChange() == ItemEvent.SELECTED)
+     this.selectedIndex = index;
+   if (item_listeners != null)
+     item_listeners.itemStateChanged(event);
+ }
+ 
+ void
+ dispatchEventImpl(AWTEvent e)
+ {
+   if (e.id <= ItemEvent.ITEM_LAST
+       && e.id >= ItemEvent.ITEM_FIRST
+       && (item_listeners != null 
+ 	  || (eventMask & AWTEvent.ITEM_EVENT_MASK) != 0))
+     processEvent(e);
+   else
+     super.dispatchEventImpl(e);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this object.
+   *
+   * @return A debugging string for this object.
+   */
+ protected String
+ paramString()
+ {
+   return ("selectedIndex=" + selectedIndex + "," + super.paramString());
+ }
+ 
+   /**
+    * Returns an array of all the objects currently registered as FooListeners
+    * upon this Choice. FooListeners are registered using the addFooListener
+    * method.
+    *
+    * @exception ClassCastException If listenerType doesn't specify a class or
+    * interface that implements java.util.EventListener.
+    *
+    * @since 1.3
+    */
+   public EventListener[] getListeners (Class listenerType)
+   {
+     if (listenerType == ItemListener.class)
+       return AWTEventMulticaster.getListeners (item_listeners, listenerType);
+     
+     return super.getListeners (listenerType);
+   }
+ 
+   /**
+    * Returns all registered item listeners.
+    *
+    * @since 1.4
+    */
+   public ItemListener[] getItemListeners ()
+   {
+     return (ItemListener[]) getListeners (ItemListener.class);
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this <code>Choice</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTChoice();
+     return accessibleContext;
+   }
+ } // class Choice 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Color.java gcc-4.1.0/libjava/classpath/java/awt/Color.java
*** gcc-4.0.2/libjava/classpath/java/awt/Color.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Color.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1008 ----
+ /* Color.java -- represents a color in Java
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.color.ColorSpace;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.image.ColorModel;
+ import java.io.Serializable;
+ 
+ /**
+  * This class represents a color value in the AWT system. It uses the sRGB
+  * (standard Red-Green-Blue) system, along with an alpha value ranging from
+  * transparent (0.0f or 0) and opaque (1.0f or 255). The color is not
+  * pre-multiplied by the alpha value an any of the accessor methods. Further
+  * information about sRGB can be found at
+  * <a href="http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html">
+  * http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html</a>.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ColorSpace
+  * @see AlphaComposite
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Color implements Paint, Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 118526816881161077L;
+ 
+   /** Constant for the color white: R=255, G=255, B=255. */
+   public static final Color white = new Color(0xffffff, false);
+ 
+   /**
+    * Constant for the color white: R=255, G=255, B=255.
+    *
+    * @since 1.4
+    */
+   public static final Color WHITE = white;
+ 
+   /** Constant for the color light gray: R=192, G=192, B=192. */
+   public static final Color lightGray = new Color(0xc0c0c0, false);
+ 
+   /**
+    * Constant for the color light gray: R=192, G=192, B=192.
+    *
+    * @since 1.4
+    */
+   public static final Color LIGHT_GRAY = lightGray;
+ 
+   /** Constant for the color gray: R=128, G=128, B=128. */
+   public static final Color gray = new Color(0x808080, false);
+ 
+   /**
+    * Constant for the color gray: R=128, G=128, B=128.
+    *
+    * @since 1.4
+    */
+   public static final Color GRAY = gray;
+ 
+   /** Constant for the color dark gray: R=64, G=64, B=64. */
+   public static final Color darkGray = new Color(0x404040, false);
+ 
+   /**
+    * Constant for the color dark gray: R=64, G=64, B=64.
+    *
+    * @since 1.4
+    */
+   public static final Color DARK_GRAY = darkGray;
+ 
+   /** Constant for the color black: R=0, G=0, B=0. */
+   public static final Color black = new Color(0x000000, false);
+ 
+   /**
+    * Constant for the color black: R=0, G=0, B=0.
+    *
+    * @since 1.4
+    */
+   public static final Color BLACK = black;
+ 
+   /** Constant for the color red: R=255, G=0, B=0. */
+   public static final Color red = new Color(0xff0000, false);
+ 
+   /**
+    * Constant for the color red: R=255, G=0, B=0.
+    *
+    * @since 1.4
+    */
+   public static final Color RED = red;
+ 
+   /** Constant for the color pink: R=255, G=175, B=175. */
+   public static final Color pink = new Color(0xffafaf, false);
+ 
+   /**
+    * Constant for the color pink: R=255, G=175, B=175.
+    *
+    * @since 1.4
+    */
+   public static final Color PINK = pink;
+ 
+   /** Constant for the color orange: R=255, G=200, B=0. */
+   public static final Color orange = new Color(0xffc800, false);
+ 
+   /**
+    * Constant for the color orange: R=255, G=200, B=0.
+    *
+    * @since 1.4
+    */
+   public static final Color ORANGE = orange;
+ 
+   /** Constant for the color yellow: R=255, G=255, B=0. */
+   public static final Color yellow = new Color(0xffff00, false);
+ 
+   /**
+    * Constant for the color yellow: R=255, G=255, B=0.
+    *
+    * @since 1.4
+    */
+   public static final Color YELLOW = yellow;
+ 
+   /** Constant for the color green: R=0, G=255, B=0. */
+   public static final Color green = new Color(0x00ff00, false);
+ 
+   /**
+    * Constant for the color green: R=0, G=255, B=0.
+    *
+    * @since 1.4
+    */
+   public static final Color GREEN = green;
+ 
+   /** Constant for the color magenta: R=255, G=0, B=255. */
+   public static final Color magenta = new Color(0xff00ff, false);
+ 
+   /**
+    * Constant for the color magenta: R=255, G=0, B=255.
+    *
+    * @since 1.4
+    */
+   public static final Color MAGENTA = magenta;
+ 
+   /** Constant for the color cyan: R=0, G=255, B=255. */
+   public static final Color cyan = new Color(0x00ffff, false);
+ 
+   /**
+    * Constant for the color cyan: R=0, G=255, B=255.
+    *
+    * @since 1.4
+    */
+   public static final Color CYAN = cyan;
+ 
+   /** Constant for the color blue: R=0, G=0, B=255. */
+   public static final Color blue = new Color(0x0000ff, false);
+ 
+   /**
+    * Constant for the color blue: R=0, G=0, B=255.
+    *
+    * @since 1.4
+    */
+   public static final Color BLUE = blue;
+ 
+   /** Internal mask for red. */
+   private static final int RED_MASK = 255 << 16;
+ 
+   /** Internal mask for green. */
+   private static final int GREEN_MASK = 255 << 8;
+ 
+   /** Internal mask for blue. */
+   private static final int BLUE_MASK = 255;
+ 
+   /** Internal mask for alpha. Package visible for use in subclass. */
+   static final int ALPHA_MASK = 255 << 24;
+ 
+   /** Amount to scale a color by when brightening or darkening. */
+   private static final float BRIGHT_SCALE = 0.7f;
+ 
+   /**
+    * The color value, in sRGB. Note that the actual color may be more
+    * precise if frgbvalue or fvalue is non-null. This class stores alpha, red,
+    * green, and blue, each 0-255, packed in an int. However, the subclass
+    * SystemColor stores an index into an array. Therefore, for serial
+    * compatibility (and because of poor design on Sun's part), this value
+    * cannot be used directly; instead you must use <code>getRGB()</code>.
+    *
+    * @see #getRGB()
+    * @serial the value of the color, whether an RGB literal or array index
+    */
+   final int value;
+ 
+   /**
+    * The color value, in sRGB. This may be null if the color was constructed
+    * with ints; and it does not include alpha. This stores red, green, and
+    * blue, in the range 0.0f - 1.0f.
+    *
+    * @see #getRGBColorComponents(float[])
+    * @see #getRGBComponents(float[])
+    * @serial the rgb components of the value
+    * @since 1.2
+    */
+   private float[] frgbvalue;
+ 
+   /**
+    * The color value, in the native ColorSpace components. This may be null
+    * if the color was constructed with ints or in the sRGB color space; and
+    * it does not include alpha.
+    *
+    * @see #getRGBColorComponents(float[])
+    * @see #getRGBComponents(float[])
+    * @serial the original color space components of the color
+    * @since 1.2
+    */
+   private float[] fvalue;
+ 
+   /**
+    * The alpha value. This is in the range 0.0f - 1.0f, but is invalid if
+    * deserialized as 0.0 when frgbvalue is null.
+    *
+    * @see #getRGBComponents(float[])
+    * @see #getComponents(float[])
+    * @serial the alpha component of this color
+    * @since 1.2
+    */
+   private final float falpha;
+ 
+   /**
+    * The ColorSpace. Null means the default sRGB space.
+    *
+    * @see #getColor(String)
+    * @see #getColorSpace()
+    * @see #getColorComponents(float[])
+    * @serial the color space for this color
+    * @since 1.2
+    */
+   private final ColorSpace cs;
+ 
+   /**
+    * The paint context for this solid color. Package visible for use in
+    * subclass.
+    */
+   transient ColorPaintContext context;
+ 
+   /**
+    * Initializes a new instance of <code>Color</code> using the specified
+    * red, green, and blue values, which must be given as integers in the
+    * range of 0-255. Alpha will default to 255 (opaque). When drawing to
+    * screen, the actual color may be adjusted to the best match of hardware
+    * capabilities.
+    *
+    * @param red the red component of the RGB value
+    * @param green the green component of the RGB value
+    * @param blue the blue component of the RGB value
+    * @throws IllegalArgumentException if the values are out of range 0-255
+    * @see #getRed()
+    * @see #getGreen()
+    * @see #getBlue()
+    * @see #getRGB()
+    * @see #Color(int, int, int, int)
+    */
+   public Color(int red, int green, int blue)
+   {
+     this(red, green, blue, 255);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Color</code> using the specified
+    * red, green, blue, and alpha values, which must be given as integers in
+    * the range of 0-255. When drawing to screen, the actual color may be
+    * adjusted to the best match of hardware capabilities.
+    *
+    * @param red the red component of the RGB value
+    * @param green the green component of the RGB value
+    * @param blue the blue component of the RGB value
+    * @param alpha the alpha value of the color
+    * @throws IllegalArgumentException if the values are out of range 0-255
+    * @see #getRed()
+    * @see #getGreen()
+    * @see #getBlue()
+    * @see #getAlpha()
+    * @see #getRGB()
+    */
+   public Color(int red, int green, int blue, int alpha)
+   {
+     if ((red & 255) != red || (green & 255) != green || (blue & 255) != blue
+         || (alpha & 255) != alpha)
+       throw new IllegalArgumentException("Bad RGB values"
+                                         +" red=0x"+Integer.toHexString(red)
+                                         +" green=0x"+Integer.toHexString(green)
+                                         +" blue=0x"+Integer.toHexString(blue)
+                                         +" alpha=0x"+Integer.toHexString(alpha)  );
+ 
+     value = (alpha << 24) | (red << 16) | (green << 8) | blue;
+     falpha = 1;
+     cs = null;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Color</code> using the specified
+    * RGB value. The blue value is in bits 0-7, green in bits 8-15, and
+    * red in bits 16-23. The other bits are ignored. The alpha value is set
+    * to 255 (opaque). When drawing to screen, the actual color may be
+    * adjusted to the best match of hardware capabilities.
+    *
+    * @param value the RGB value
+    * @see ColorModel#getRGBdefault()
+    * @see #getRed()
+    * @see #getGreen()
+    * @see #getBlue()
+    * @see #getRGB()
+    * @see #Color(int, boolean)
+    */
+   public Color(int value)
+   {
+     this(value, false);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Color</code> using the specified
+    * RGB value. The blue value is in bits 0-7, green in bits 8-15, and
+    * red in bits 16-23. The alpha value is in bits 24-31, unless hasalpha
+    * is false, in which case alpha is set to 255. When drawing to screen, the
+    * actual color may be adjusted to the best match of hardware capabilities.
+    *
+    * @param value the RGB value
+    * @param hasalpha true if value includes the alpha
+    * @see ColorModel#getRGBdefault()
+    * @see #getRed()
+    * @see #getGreen()
+    * @see #getBlue()
+    * @see #getAlpha()
+    * @see #getRGB()
+    */
+   public Color(int value, boolean hasalpha)
+   {
+     // Note: SystemColor calls this constructor, setting falpha to 0; but
+     // code in getRGBComponents correctly reports falpha as 1.0 to the user
+     // for all instances of SystemColor since frgbvalue is left null here.
+     if (hasalpha)
+       falpha = ((value & ALPHA_MASK) >> 24) / 255f;
+     else
+       {
+         value |= ALPHA_MASK;
+         falpha = 1;
+       }
+     this.value = value;
+     cs = null;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Color</code> using the specified
+    * RGB values. These must be in the range of 0.0-1.0. Alpha is assigned
+    * the value of 1.0 (opaque). When drawing to screen, the actual color may
+    * be adjusted to the best match of hardware capabilities.
+    *
+    * @param red the red component of the RGB value
+    * @param green the green component of the RGB value
+    * @param blue the blue component of the RGB value
+    * @throws IllegalArgumentException tf the values are out of range 0.0f-1.0f
+    * @see #getRed()
+    * @see #getGreen()
+    * @see #getBlue()
+    * @see #getRGB()
+    * @see #Color(float, float, float, float)
+    */
+   public Color(float red, float green, float blue)
+   {
+     this(red, green, blue, 1.0f);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Color</code> using the specified
+    * RGB and alpha values. These must be in the range of 0.0-1.0. When drawing
+    * to screen, the actual color may be adjusted to the best match of
+    * hardware capabilities.
+    *
+    * @param red the red component of the RGB value
+    * @param green the green component of the RGB value
+    * @param blue the blue component of the RGB value
+    * @param alpha the alpha value of the color
+    * @throws IllegalArgumentException tf the values are out of range 0.0f-1.0f
+    * @see #getRed()
+    * @see #getGreen()
+    * @see #getBlue()
+    * @see #getAlpha()
+    * @see #getRGB()
+    */
+   public Color(float red, float green, float blue, float alpha)
+   {
+     value = convert(red, green, blue, alpha);
+     frgbvalue = new float[] {red, green, blue};
+     falpha = alpha;
+     cs = null;
+   }
+ 
+   /**
+    * Creates a color in the given ColorSpace with the specified alpha. The
+    * array must be non-null and have enough elements for the color space
+    * (for example, RGB requires 3 elements, CMYK requires 4). When drawing
+    * to screen, the actual color may be adjusted to the best match of
+    * hardware capabilities.
+    *
+    * @param space the color space of components
+    * @param components the color components, except alpha
+    * @param alpha the alpha value of the color
+    * @throws NullPointerException if cpsace or components is null
+    * @throws ArrayIndexOutOfBoundsException if components is too small
+    * @throws IllegalArgumentException if alpha or any component is out of range
+    * @see #getComponents(float[])
+    * @see #getColorComponents(float[])
+    */
+   public Color(ColorSpace space, float[] components, float alpha)
+   {
+     frgbvalue = space.toRGB(components);
+     fvalue = components;
+     falpha = alpha;
+     cs = space;
+     value = convert(frgbvalue[0], frgbvalue[1], frgbvalue[2], alpha);
+   }
+ 
+   /**
+    * Returns the red value for this color, as an integer in the range 0-255
+    * in the sRGB color space.
+    *
+    * @return the red value for this color
+    * @see #getRGB()
+    */
+   public int getRed()
+   {
+     // Do not inline getRGB() to value, because of SystemColor.
+     return (getRGB() & RED_MASK) >> 16;
+   }
+ 
+   /**
+    * Returns the green value for this color, as an integer in the range 0-255
+    * in the sRGB color space.
+    *
+    * @return the green value for this color
+    * @see #getRGB()
+    */
+   public int getGreen()
+   {
+     // Do not inline getRGB() to value, because of SystemColor.
+     return (getRGB() & GREEN_MASK) >> 8;
+   }
+ 
+   /**
+    * Returns the blue value for this color, as an integer in the range 0-255
+    * in the sRGB color space.
+    *
+    * @return the blue value for this color
+    * @see #getRGB()
+    */
+   public int getBlue()
+   {
+     // Do not inline getRGB() to value, because of SystemColor.
+     return getRGB() & BLUE_MASK;
+   }
+ 
+   /**
+    * Returns the alpha value for this color, as an integer in the range 0-255.
+    *
+    * @return the alpha value for this color
+    * @see #getRGB()
+    */
+   public int getAlpha()
+   {
+     // Do not inline getRGB() to value, because of SystemColor.
+     return (getRGB() & ALPHA_MASK) >>> 24;
+   }
+ 
+   /**
+    * Returns the RGB value for this color, in the sRGB color space. The blue
+    * value will be in bits 0-7, green in 8-15, red in 16-23, and alpha value in
+    * 24-31.
+    *
+    * @return the RGB value for this color
+    * @see ColorModel#getRGBdefault()
+    * @see #getRed()
+    * @see #getGreen()
+    * @see #getBlue()
+    * @see #getAlpha()
+    */
+   public int getRGB()
+   {
+     return value;
+   }
+ 
+   /**
+    * Returns a brighter version of this color. This is done by increasing the
+    * RGB values by an arbitrary scale factor. The new color is opaque (an
+    * alpha of 255). Note that this method and the <code>darker()</code>
+    * method are not necessarily inverses.
+    *
+    * @return a brighter version of this color
+    * @see #darker()
+    */
+   public Color brighter()
+   {
+     // Do not inline getRGB() to this.value, because of SystemColor.
+     int value = getRGB();
+     int red = (value & RED_MASK) >> 16;
+     int green = (value & GREEN_MASK) >> 8;
+     int blue = value & BLUE_MASK;
+     // We have to special case 0-2 because they won't scale by division.
+     red = red < 3 ? 3 : (int) Math.min(255, red / BRIGHT_SCALE);
+     green = green < 3 ? 3 : (int) Math.min(255, green / BRIGHT_SCALE);
+     blue = blue < 3 ? 3 : (int) Math.min(255, blue / BRIGHT_SCALE);
+     return new Color(red, green, blue, 255);
+   }
+ 
+   /**
+    * Returns a darker version of this color. This is done by decreasing the
+    * RGB values by an arbitrary scale factor. The new color is opaque (an
+    * alpha of 255). Note that this method and the <code>brighter()</code>
+    * method are not necessarily inverses.
+    *
+    * @return a darker version of this color
+    * @see #brighter()
+    */
+   public Color darker()
+   {
+     // Do not inline getRGB() to this.value, because of SystemColor.
+     int value = getRGB();
+     return new Color((int) (((value & RED_MASK) >> 16) * BRIGHT_SCALE),
+                      (int) (((value & GREEN_MASK) >> 8) * BRIGHT_SCALE),
+                      (int) ((value & BLUE_MASK) * BRIGHT_SCALE), 255);
+   }
+ 
+   /**
+    * Returns a hash value for this color. This is simply the color in 8-bit
+    * precision, in the format 0xAARRGGBB (alpha, red, green, blue).
+    *
+    * @return a hash value for this color
+    */
+   public int hashCode()
+   {
+     return value;
+   }
+ 
+   /**
+    * Tests this object for equality against the specified object.  This will
+    * be true if and only if the specified object is an instance of
+    * <code>Color</code> and has the same 8-bit integer red, green, and blue
+    * values as this object. Note that two colors may be slightly different
+    * as float values, but round to the same integer values. Also note that
+    * this does not accurately compare SystemColors, since that class does
+    * not store its internal data in RGB format like regular colors.
+    *
+    * @param obj the object to compare to
+    * @return true if the specified object is semantically equal to this one
+    */
+   public boolean equals(Object obj)
+   {
+     return obj instanceof Color && ((Color) obj).value == value;
+   }
+ 
+   /**
+    * Returns a string representation of this object. Subclasses may return
+    * any desired format, except for null, but this implementation returns
+    * <code>getClass().getName() + "[r=" + getRed() + ",g=" + getGreen()
+    * + ",b=" + getBlue() + ']'</code>.
+    *
+    * @return a string representation of this object
+    */
+   public String toString()
+   {
+     return getClass().getName() + "[r=" + ((value & RED_MASK) >> 16)
+       + ",g=" + ((value & GREEN_MASK) >> 8) + ",b=" + (value & BLUE_MASK)
+       + ']';
+   }
+ 
+   /**
+    * Converts the specified string to a number, using Integer.decode, and
+    * creates a new instance of <code>Color</code> from the value. The alpha
+    * value will be 255 (opaque).
+    *
+    * @param str the numeric color string
+    * @return a new instance of <code>Color</code> for the string
+    * @throws NumberFormatException if the string cannot be parsed
+    * @throws NullPointerException if the string is null
+    * @see Integer#decode(String)
+    * @see #Color(int)
+    * @since 1.1
+    */
+   public static Color decode(String str)
+   {
+     return new Color(Integer.decode(str).intValue(), false);
+   }
+ 
+   /**
+    * Returns a new instance of <code>Color</code> from the value of the
+    * system property named by the specified string.  If the property does not
+    * exist, or cannot be parsed, then <code>null</code> will be returned.
+    *
+    * @param prop the system property to retrieve
+    * @throws SecurityException if getting the property is denied
+    * @see #getColor(String, Color)
+    * @see Integer#getInteger(String)
+    */
+   public static Color getColor(String prop)
+   {
+     return getColor(prop, null);
+   }
+ 
+   /**
+    * Returns a new instance of <code>Color</code> from the value of the
+    * system property named by the specified string.  If the property does
+    * not exist, or cannot be parsed, then the default color value will be
+    * returned.
+    *
+    * @param prop the system property to retrieve
+    * @param defcolor the default color
+    * @throws SecurityException if getting the property is denied
+    * @see Integer#getInteger(String)
+    */
+   public static Color getColor(String prop, Color defcolor)
+   {
+     Integer val = Integer.getInteger(prop, null);
+     return val == null ? defcolor
+       : new Color(val.intValue(), false);
+   }
+ 
+   /**
+    * Returns a new instance of <code>Color</code> from the value of the
+    * system property named by the specified string.  If the property does
+    * not exist, or cannot be parsed, then the default RGB value will be
+    * used to create a return value.
+    *
+    * @param prop the system property to retrieve
+    * @param defrgb the default RGB value
+    * @throws SecurityException if getting the property is denied
+    * @see #getColor(String, Color)
+    * @see Integer#getInteger(String, int)
+    */
+   public static Color getColor(String prop, int defrgb)
+   {
+     Color c = getColor(prop, null);
+     return c == null ? new Color(defrgb, false) : c;
+   }
+ 
+   /**
+    * Converts from the HSB (hue, saturation, brightness) color model to the
+    * RGB (red, green, blue) color model. The hue may be any floating point;
+    * it's fractional portion is used to select the angle in the HSB model.
+    * The saturation and brightness must be between 0 and 1. The result is
+    * suitable for creating an RGB color with the one-argument constructor.
+    *
+    * @param hue the hue of the HSB value
+    * @param saturation the saturation of the HSB value
+    * @param brightness the brightness of the HSB value
+    * @return the RGB value
+    * @see #getRGB()
+    * @see #Color(int)
+    * @see ColorModel#getRGBdefault()
+    */
+   public static int HSBtoRGB(float hue, float saturation, float brightness)
+   {
+     if (saturation == 0)
+       return convert(brightness, brightness, brightness, 0);
+     if (saturation < 0 || saturation > 1 || brightness < 0 || brightness > 1)
+       throw new IllegalArgumentException();
+     hue = hue - (float) Math.floor(hue);
+     int i = (int) (6 * hue);
+     float f = 6 * hue - i;
+     float p = brightness * (1 - saturation);
+     float q = brightness * (1 - saturation * f);
+     float t = brightness * (1 - saturation * (1 - f));
+     switch (i)
+       {
+       case 0:
+         return convert(brightness, t, p, 0);
+       case 1:
+         return convert(q, brightness, p, 0);
+       case 2:
+         return convert(p, brightness, t, 0);
+       case 3:
+         return convert(p, q, brightness, 0);
+       case 4:
+         return convert(t, p, brightness, 0);
+       case 5:
+         return convert(brightness, p, q, 0);
+       default:
+         throw new InternalError("impossible");
+       }
+   }
+ 
+   /**
+    * Converts from the RGB (red, green, blue) color model to the HSB (hue,
+    * saturation, brightness) color model. If the array is null, a new one
+    * is created, otherwise it is recycled. The results will be in the range
+    * 0.0-1.0 if the inputs are in the range 0-255.
+    *
+    * @param red the red part of the RGB value
+    * @param green the green part of the RGB value
+    * @param blue the blue part of the RGB value
+    * @param array an array for the result (at least 3 elements), or null
+    * @return the array containing HSB value
+    * @throws ArrayIndexOutOfBoundsException of array is too small
+    * @see #getRGB()
+    * @see #Color(int)
+    * @see ColorModel#getRGBdefault()
+    */
+   public static float[] RGBtoHSB(int red, int green, int blue, float array[])
+   {
+     if (array == null)
+       array = new float[3];
+     // Calculate brightness.
+     int min;
+     int max;
+     if (red < green)
+       {
+         min = red;
+         max = green;
+       }
+     else
+       {
+         min = green;
+         max = red;
+       }
+     if (blue > max)
+       max = blue;
+     else if (blue < min)
+       min = blue;
+     array[2] = max / 255f;
+     // Calculate saturation.
+     if (max == 0)
+       array[1] = 0;
+     else
+       array[1] = ((float) (max - min)) / ((float) max);
+     // Calculate hue.
+     if (array[1] == 0)
+       array[0] = 0;
+     else
+       {
+         float delta = (max - min) * 6;
+         if (red == max)
+           array[0] = (green - blue) / delta;
+         else if (green == max)
+           array[0] = 1f / 3 + (blue - red) / delta;
+         else
+           array[0] = 2f / 3 + (red - green) / delta;
+         if (array[0] < 0)
+           array[0]++;
+       }
+     return array;
+   }
+ 
+   /**
+    * Returns a new instance of <code>Color</code> based on the specified
+    * HSB values. The hue may be any floating point; it's fractional portion
+    * is used to select the angle in the HSB model. The saturation and
+    * brightness must be between 0 and 1.
+    *
+    * @param hue the hue of the HSB value
+    * @param saturation the saturation of the HSB value
+    * @param brightness the brightness of the HSB value
+    * @return the new <code>Color</code> object
+    */
+   public static Color getHSBColor(float hue, float saturation,
+                                   float brightness)
+   {
+     return new Color(HSBtoRGB(hue, saturation, brightness), false);
+   }
+ 
+   /**
+    * Returns a float array with the red, green, and blue components, and the
+    * alpha value, in the default sRGB space, with values in the range 0.0-1.0.
+    * If the array is null, a new one is created, otherwise it is recycled.
+    *
+    * @param array the array to put results into (at least 4 elements), or null
+    * @return the RGB components and alpha value
+    * @throws ArrayIndexOutOfBoundsException if array is too small
+    */
+   public float[] getRGBComponents(float[] array)
+   {
+     if (array == null)
+       array = new float[4];
+     getRGBColorComponents(array);
+     // Stupid serialization issues require this check.
+     array[3] = (falpha == 0 && frgbvalue == null
+                 ? ((getRGB() & ALPHA_MASK) >> 24) / 255f : falpha);
+     return array;
+   }
+ 
+   /**
+    * Returns a float array with the red, green, and blue components, in the
+    * default sRGB space, with values in the range 0.0-1.0. If the array is
+    * null, a new one is created, otherwise it is recycled.
+    *
+    * @param array the array to put results into (at least 3 elements), or null
+    * @return the RGB components
+    * @throws ArrayIndexOutOfBoundsException if array is too small
+    */
+   public float[] getRGBColorComponents(float[] array)
+   {
+     if (array == null)
+       array = new float[3];
+     else if (array == frgbvalue)
+       return array; // Optimization for getColorComponents(float[]).
+     if (frgbvalue == null)
+       {
+         // Do not inline getRGB() to this.value, because of SystemColor.
+         int value = getRGB();
+         frgbvalue = new float[] { ((value & RED_MASK) >> 16) / 255f,
+                                   ((value & GREEN_MASK) >> 8) / 255f,
+                                   (value & BLUE_MASK) / 255f };
+       }
+     array[0] = frgbvalue[0];
+     array[1] = frgbvalue[1];
+     array[2] = frgbvalue[2];
+     return array;
+   }
+ 
+   /**
+    * Returns a float array containing the color and alpha components of this
+    * color in the ColorSpace it was created with (the constructors which do
+    * not take a ColorSpace parameter use a default sRGB ColorSpace). If the
+    * array is null, a new one is created, otherwise it is recycled, and must
+    * have at least one more position than components used in the color space.
+    *
+    * @param array the array to put results into, or null
+    * @return the original color space components and alpha value
+    * @throws ArrayIndexOutOfBoundsException if array is too small
+    */
+   public float[] getComponents(float[] array)
+   {
+     int numComponents = cs == null ? 3 : cs.getNumComponents();
+     if (array == null)
+       array = new float[1 + numComponents];
+     getColorComponents(array);
+     // Stupid serialization issues require this check.
+     array[numComponents] = (falpha == 0 && frgbvalue == null
+                             ? ((getRGB() & ALPHA_MASK) >> 24) / 255f : falpha);
+     return array;
+   }
+ 
+   /**
+    * Returns a float array containing the color components of this color in
+    * the ColorSpace it was created with (the constructors which do not take
+    * a ColorSpace parameter use a default sRGB ColorSpace). If the array is
+    * null, a new one is created, otherwise it is recycled, and must have at
+    * least as many positions as used in the color space.
+    *
+    * @param array the array to put results into, or null
+    * @return the original color space components
+    * @throws ArrayIndexOutOfBoundsException if array is too small
+    */
+   public float[] getColorComponents(float[] array)
+   {
+     int numComponents = cs == null ? 3 : cs.getNumComponents();
+     if (array == null)
+       array = new float[numComponents];
+     if (fvalue == null) // If fvalue is null, cs should be null too.
+       fvalue = getRGBColorComponents(frgbvalue);
+     System.arraycopy(fvalue, 0, array, 0, numComponents);
+     return array;
+   }
+ 
+   /**
+    * Returns a float array containing the color and alpha components of this
+    * color in the given ColorSpace. If the array is null, a new one is
+    * created, otherwise it is recycled, and must have at least one more
+    * position than components used in the color space.
+    *
+    * @param space the color space to translate to
+    * @param array the array to put results into, or null
+    * @return the color space components and alpha value
+    * @throws ArrayIndexOutOfBoundsException if array is too small
+    * @throws NullPointerException if space is null
+    */
+   public float[] getComponents(ColorSpace space, float[] array)
+   {
+     int numComponents = space.getNumComponents();
+     if (array == null)
+       array = new float[1 + numComponents];
+     getColorComponents(space, array);
+     // Stupid serialization issues require this check.
+     array[numComponents] = (falpha == 0 && frgbvalue == null
+                             ? ((getRGB() & ALPHA_MASK) >> 24) / 255f : falpha);
+     return array;
+   }
+ 
+   /**
+    * Returns a float array containing the color components of this color in
+    * the given ColorSpace. If the array is null, a new one is created,
+    * otherwise it is recycled, and must have at least as many positions as
+    * used in the color space.
+    *
+    * @param space the color space to translate to
+    * @return the color space components
+    * @throws ArrayIndexOutOfBoundsException if array is too small
+    * @throws NullPointerException if space is null
+    */
+   public float[] getColorComponents(ColorSpace space, float[] array)
+   {
+     float[] components = space.fromRGB(getRGBColorComponents(frgbvalue));
+     if (array == null)
+       return components;
+     System.arraycopy(components, 0, array, 0, components.length);
+     return array;
+   }
+ 
+   /**
+    * Returns the color space of this color. Except for the constructor which
+    * takes a ColorSpace argument, this will be an implementation of
+    * ColorSpace.CS_sRGB.
+    *
+    * @return the color space
+    */
+   public ColorSpace getColorSpace()
+   {
+     return cs == null ? ColorSpace.getInstance(ColorSpace.CS_sRGB) : cs;
+   }
+ 
+   /**
+    * Returns a paint context, used for filling areas of a raster scan with
+    * this color. Since the color is constant across the entire rectangle, and
+    * since it is always in sRGB space, this implementation returns the same
+    * object, regardless of the parameters. Subclasses, however, may have a
+    * mutable result.
+    *
+    * @param cm the requested color model
+    * @param deviceBounds the bounding box in device coordinates, ignored
+    * @param userBounds the bounding box in user coordinates, ignored
+    * @param xform the bounds transformation, ignored
+    * @param hints any rendering hints, ignored
+    * @return a context for painting this solid color
+    */
+   public PaintContext createContext(ColorModel cm, Rectangle deviceBounds,
+                                     Rectangle2D userBounds,
+                                     AffineTransform xform,
+                                     RenderingHints hints)
+   {
+     if (context == null || !context.getColorModel().equals(cm))
+       context = new ColorPaintContext(cm,value);
+     return context;
+   }
+ 
+   /**
+    * Returns the transparency level of this color.
+    *
+    * @return one of {@link #OPAQUE}, {@link #BITMASK}, or {@link #TRANSLUCENT}
+    */
+   public int getTransparency()
+   {
+     // Do not inline getRGB() to this.value, because of SystemColor.
+     int alpha = getRGB() & ALPHA_MASK;
+     return alpha == (255 << 24) ? OPAQUE : alpha == 0 ? BITMASK : TRANSLUCENT;
+   }
+ 
+   /**
+    * Converts float values to integer value.
+    *
+    * @param red the red value
+    * @param green the green value
+    * @param blue the blue value
+    * @param alpha the alpha value
+    * @return the integer value made of 8-bit sections
+    * @throws IllegalArgumentException if parameters are out of range 0.0-1.0
+    */
+   private static int convert(float red, float green, float blue, float alpha)
+   {
+     if (red < 0 || red > 1 || green < 0 || green > 1 || blue < 0 || blue > 1
+         || alpha < 0 || alpha > 1)
+       throw new IllegalArgumentException("Bad RGB values");
+     int redval = Math.round(255 * red);
+     int greenval = Math.round(255 * green);
+     int blueval = Math.round(255 * blue);
+     int alphaval = Math.round(255 * alpha);
+     return (alphaval << 24) | (redval << 16) | (greenval << 8) | blueval;
+   }
+ } // class Color
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/ColorPaintContext.java gcc-4.1.0/libjava/classpath/java/awt/ColorPaintContext.java
*** gcc-4.0.2/libjava/classpath/java/awt/ColorPaintContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/ColorPaintContext.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,195 ----
+ /* ColorPaintContext.java -- context for painting solid colors
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.ColorModel;
+ import java.awt.image.Raster;
+ 
+ /**
+  * This class provides a paint context which will fill a rectanglar region of
+  * a raster scan with the given color. However, it is not yet completely
+  * implemented.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  */
+ class ColorPaintContext implements PaintContext
+ {
+   /**
+    * The color to fill any raster with. Package visible for use in
+    * SystemColor.
+    */
+   final int color;
+   final ColorModel colorModel;
+ 
+   private ColorRaster cachedRaster;
+ 
+   
+   /**
+    * Create the context for a given color.
+    *
+    * @param colorRGB The solid color to use.
+    */
+   ColorPaintContext(int colorRGB)
+   {
+     this(ColorModel.getRGBdefault(), colorRGB);
+   }
+   
+   /**
+    * Create the context for a given color.
+    *
+    * @param cm The color model of this context. 
+    * @param colorRGB The solid color to use.
+    */
+   ColorPaintContext(ColorModel cm,int colorRGB)
+   {
+     color = colorRGB;
+     colorModel = cm;
+   }
+ 
+   /**
+    * Release the resources allocated for the paint. As the color is constant,
+    * there aren't any resources.
+    */
+   public void dispose()
+   {
+   }
+ 
+   /**
+    * Return the color model of this context. 
+    *
+    * @return the context color model
+    */
+   public ColorModel getColorModel()
+   {
+     return colorModel;
+   }
+ 
+   /**
+    * Return a raster containing the colors for the graphics operation.
+    *
+    * @param x the x-coordinate, in device space
+    * @param y the y-coordinate, in device space
+    * @param width the width, in device space
+    * @param height the height, in device space
+    * @return a raster for the given area and color
+    */
+   public Raster getRaster(int x, int y, int width, int height)
+   {
+    if(  cachedRaster == null 
+        || cachedRaster.getWidth() < width
+        || cachedRaster.getHeight() < height)
+    {
+      cachedRaster = new ColorRaster(colorModel, 0, 0, width, height, color);
+    }
+    return cachedRaster.createChild(0 ,0 ,width ,height ,x ,y , null);
+   }
+   
+   /**
+    * A ColorRaster is a raster that is completely filled with one color. The 
+    * data layout is taken from the color model given to the constructor.
+    */
+   private class ColorRaster extends Raster
+   {
+     
+     /**
+      * Create a raster that is compaltible with the given color model and 
+      * filled with the given color.
+      * @param cm The color model for this raster.
+      * @param x The smallest horizontal corrdinate in the raster.
+      * @param y The smallest vertical coordinate in the raster.
+      * @param width The width of the raster.
+      * @param height The height of the raster.
+      * @param rgbPixel The RGB value of the color for this raster.
+      */
+     ColorRaster(ColorModel cm,int x, int y, int width, int height, int rgbPixel)
+     {         
+       super(cm.createCompatibleSampleModel(width,height),new Point(x,y));
+       Object pixel = cm.getDataElements(rgbPixel,null);
+       getSampleModel().setDataElements(0, 0,
+                                        width, height,
+                                        multiplyData(pixel,null,width*height),
+                                        dataBuffer);
+     }
+     
+     
+     
+     private Object multiplyData(Object src, Object dest, int factor)
+     {
+       Object from;
+       int srcLength = 0;
+       if (src instanceof byte[])
+       {
+         srcLength = ((byte[])src).length;
+         
+         if (dest == null) dest = new byte[factor * srcLength];
+       }
+       else if (src instanceof short[])
+       {
+         srcLength = ((short[])src).length;
+         if (dest == null) dest = new short[factor * srcLength];
+       }
+       else if (src instanceof int[])
+       {
+         srcLength = ((int[]) src).length;
+         if (dest == null) dest = new int[factor * srcLength];
+       }
+       else
+       {
+         throw new ClassCastException("Unknown data buffer type");
+       }
+       
+       System.arraycopy(src,0,dest,0,srcLength);
+       
+       int count = 1;
+       while(count*2 < factor)
+       {
+         System.arraycopy(dest, 0, dest, count * srcLength, count*srcLength);
+         count *= 2; 
+       }
+       
+       if(factor > count)
+         System.arraycopy(dest,0, dest, count * srcLength, 
+                          (factor - count) * srcLength );
+       
+       return dest;
+     }
+     
+   }
+   
+ } // class ColorPaintContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Component.java gcc-4.1.0/libjava/classpath/java/awt/Component.java
*** gcc-4.0.2/libjava/classpath/java/awt/Component.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Component.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,6066 ----
+ /* Component.java -- a graphics component
+    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.dnd.DropTarget;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ComponentEvent;
+ import java.awt.event.ComponentListener;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.event.HierarchyBoundsListener;
+ import java.awt.event.HierarchyEvent;
+ import java.awt.event.HierarchyListener;
+ import java.awt.event.InputEvent;
+ import java.awt.event.InputMethodEvent;
+ import java.awt.event.InputMethodListener;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.KeyListener;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.awt.event.MouseMotionListener;
+ import java.awt.event.MouseWheelEvent;
+ import java.awt.event.MouseWheelListener;
+ import java.awt.event.PaintEvent;
+ import java.awt.event.WindowEvent;
+ import java.awt.im.InputContext;
+ import java.awt.im.InputMethodRequests;
+ import java.awt.image.BufferStrategy;
+ import java.awt.image.ColorModel;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.image.VolatileImage;
+ import java.awt.peer.ComponentPeer;
+ import java.awt.peer.LightweightPeer;
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyChangeSupport;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.io.Serializable;
+ import java.lang.reflect.Array;
+ import java.util.Collections;
+ import java.util.EventListener;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Locale;
+ import java.util.Set;
+ import java.util.Vector;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleComponent;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleState;
+ import javax.accessibility.AccessibleStateSet;
+ 
+ /**
+  * The root of all evil. All graphical representations are subclasses of this
+  * giant class, which is designed for screen display and user interaction.
+  * This class can be extended directly to build a lightweight component (one
+  * not associated with a native window); lightweight components must reside
+  * inside a heavyweight window.
+  *
+  * <p>This class is Serializable, which has some big implications. A user can
+  * save the state of all graphical components in one VM, and reload them in
+  * another. Note that this class will only save Serializable listeners, and
+  * ignore the rest, without causing any serialization exceptions. However, by
+  * making a listener serializable, and adding it to another element, you link
+  * in that entire element to the state of this component. To get around this,
+  * use the idiom shown in the example below - make listeners non-serializable
+  * in inner classes, rather than using this object itself as the listener, if
+  * external objects do not need to save the state of this object.
+  *
+  * <pre>
+  * import java.awt.*;
+  * import java.awt.event.*;
+  * import java.io.Serializable;
+  * class MyApp implements Serializable
+  * {
+  *   BigObjectThatShouldNotBeSerializedWithAButton bigOne;
+  *   // Serializing aButton will not suck in an instance of MyApp, with its
+  *   // accompanying field bigOne.
+  *   Button aButton = new Button();
+  *   class MyActionListener implements ActionListener
+  *   {
+  *     public void actionPerformed(ActionEvent e)
+  *     {
+  *       System.out.println("Hello There");
+  *     }
+  *   }
+  *   MyApp()
+  *   {
+  *     aButton.addActionListener(new MyActionListener());
+  *   }
+  * }
+  * </pre>
+  *
+  * <p>Status: Incomplete. The event dispatch mechanism is implemented. All
+  * other methods defined in the J2SE 1.3 API javadoc exist, but are mostly
+  * incomplete or only stubs; except for methods relating to the Drag and
+  * Drop, Input Method, and Accessibility frameworks: These methods are
+  * present but commented out.
+  *
+  * @author original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status still missing 1.4 support
+  */
+ public abstract class Component
+   implements ImageObserver, MenuContainer, Serializable
+ {
+   // Word to the wise - this file is huge. Search for '\f' (^L) for logical
+   // sectioning by fields, public API, private API, and nested classes.
+ 
+ 
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -7644114512714619750L;
+ 
+   /**
+    * Constant returned by the <code>getAlignmentY</code> method to indicate
+    * that the component wishes to be aligned to the top relative to
+    * other components.
+    *
+    * @see #getAlignmentY()
+    */
+   public static final float TOP_ALIGNMENT = 0;
+ 
+   /**
+    * Constant returned by the <code>getAlignmentY</code> and
+    * <code>getAlignmentX</code> methods to indicate
+    * that the component wishes to be aligned to the center relative to
+    * other components.
+    *
+    * @see #getAlignmentX()
+    * @see #getAlignmentY()
+    */
+   public static final float CENTER_ALIGNMENT = 0.5f;
+ 
+   /**
+    * Constant returned by the <code>getAlignmentY</code> method to indicate
+    * that the component wishes to be aligned to the bottom relative to
+    * other components.
+    *
+    * @see #getAlignmentY()
+    */
+   public static final float BOTTOM_ALIGNMENT = 1;
+ 
+   /**
+    * Constant returned by the <code>getAlignmentX</code> method to indicate
+    * that the component wishes to be aligned to the right relative to
+    * other components.
+    *
+    * @see #getAlignmentX()
+    */
+   public static final float RIGHT_ALIGNMENT = 1;
+ 
+   /**
+    * Constant returned by the <code>getAlignmentX</code> method to indicate
+    * that the component wishes to be aligned to the left relative to
+    * other components.
+    *
+    * @see #getAlignmentX()
+    */
+   public static final float LEFT_ALIGNMENT = 0;
+ 
+   /**
+    * Make the treelock a String so that it can easily be identified
+    * in debug dumps. We clone the String in order to avoid a conflict in
+    * the unlikely event that some other package uses exactly the same string
+    * as a lock object.
+    */
+   static final Object treeLock = new String("AWT_TREE_LOCK");
+ 
+   // Serialized fields from the serialization spec.
+ 
+   /**
+    * The x position of the component in the parent's coordinate system.
+    *
+    * @see #getLocation()
+    * @serial the x position
+    */
+   int x;
+ 
+   /**
+    * The y position of the component in the parent's coordinate system.
+    *
+    * @see #getLocation()
+    * @serial the y position
+    */
+   int y;
+ 
+   /**
+    * The component width.
+    *
+    * @see #getSize()
+    * @serial the width
+    */
+   int width;
+ 
+   /**
+    * The component height.
+    *
+    * @see #getSize()
+    * @serial the height
+    */
+   int height;
+ 
+   /**
+    * The foreground color for the component. This may be null.
+    *
+    * @see #getForeground()
+    * @see #setForeground(Color)
+    * @serial the foreground color
+    */
+   Color foreground;
+ 
+   /**
+    * The background color for the component. This may be null.
+    *
+    * @see #getBackground()
+    * @see #setBackground(Color)
+    * @serial the background color
+    */
+   Color background;
+ 
+   /**
+    * The default font used in the component. This may be null.
+    *
+    * @see #getFont()
+    * @see #setFont(Font)
+    * @serial the font
+    */
+   Font font;
+ 
+   /**
+    * The font in use by the peer, or null if there is no peer.
+    *
+    * @serial the peer's font
+    */
+   Font peerFont;
+ 
+   /**
+    * The cursor displayed when the pointer is over this component. This may
+    * be null.
+    *
+    * @see #getCursor()
+    * @see #setCursor(Cursor)
+    */
+   Cursor cursor;
+ 
+   /**
+    * The locale for the component.
+    *
+    * @see #getLocale()
+    * @see #setLocale(Locale)
+    */
+   Locale locale = Locale.getDefault ();
+ 
+   /**
+    * True if the object should ignore repaint events (usually because it is
+    * not showing).
+    *
+    * @see #getIgnoreRepaint()
+    * @see #setIgnoreRepaint(boolean)
+    * @serial true to ignore repaints
+    * @since 1.4
+    */
+   boolean ignoreRepaint;
+ 
+   /**
+    * True when the object is visible (although it is only showing if all
+    * ancestors are likewise visible). For component, this defaults to true.
+    *
+    * @see #isVisible()
+    * @see #setVisible(boolean)
+    * @serial true if visible
+    */
+   boolean visible = true;
+ 
+   /**
+    * True if the object is enabled, meaning it can interact with the user.
+    * For component, this defaults to true.
+    *
+    * @see #isEnabled()
+    * @see #setEnabled(boolean)
+    * @serial true if enabled
+    */
+   boolean enabled = true;
+ 
+   /**
+    * True if the object is valid. This is set to false any time a size
+    * adjustment means the component need to be layed out again.
+    *
+    * @see #isValid()
+    * @see #validate()
+    * @see #invalidate()
+    * @serial true if layout is valid
+    */
+   boolean valid;
+ 
+   /**
+    * The DropTarget for drag-and-drop operations.
+    *
+    * @see #getDropTarget()
+    * @see #setDropTarget(DropTarget)
+    * @serial the drop target, or null
+    * @since 1.2
+    */
+   DropTarget dropTarget;
+ 
+   /**
+    * The list of popup menus for this component.
+    *
+    * @see #add(PopupMenu)
+    * @serial the list of popups
+    */
+   Vector popups;
+ 
+   /**
+    * The component's name. May be null, in which case a default name is
+    * generated on the first use.
+    *
+    * @see #getName()
+    * @see #setName(String)
+    * @serial the name
+    */
+   String name;
+ 
+   /**
+    * True once the user has set the name. Note that the user may set the name
+    * to null.
+    *
+    * @see #name
+    * @see #getName()
+    * @see #setName(String)
+    * @serial true if the name has been explicitly set
+    */
+   boolean nameExplicitlySet;
+ 
+   /**
+    * Indicates if the object can be focused. Defaults to true for components.
+    *
+    * @see #isFocusable()
+    * @see #setFocusable(boolean)
+    * @since 1.4
+    */
+   boolean focusable = true;
+ 
+   /**
+    * Tracks whether this component's {@link #isFocusTraversable}
+    * method has been overridden.
+    *
+    * @since 1.4
+    */
+   int isFocusTraversableOverridden;
+ 
+   /**
+    * The focus traversal keys, if not inherited from the parent or
+    * default keyboard focus manager. These sets will contain only
+    * AWTKeyStrokes that represent press and release events to use as
+    * focus control.
+    *
+    * @see #getFocusTraversalKeys(int)
+    * @see #setFocusTraversalKeys(int, Set)
+    * @since 1.4
+    */
+   Set[] focusTraversalKeys;
+ 
+   /**
+    * True if focus traversal keys are enabled. This defaults to true for
+    * Component. If this is true, keystrokes in focusTraversalKeys are trapped
+    * and processed automatically rather than being passed on to the component.
+    *
+    * @see #getFocusTraversalKeysEnabled()
+    * @see #setFocusTraversalKeysEnabled(boolean)
+    * @since 1.4
+    */
+   boolean focusTraversalKeysEnabled = true;
+ 
+   /**
+    * Cached information on the minimum size. Should have been transient.
+    *
+    * @serial ignore
+    */
+   Dimension minSize;
+ 
+   /**
+    * Cached information on the preferred size. Should have been transient.
+    *
+    * @serial ignore
+    */
+   Dimension prefSize;
+ 
+   /**
+    * Set to true if an event is to be handled by this component, false if
+    * it is to be passed up the hierarcy.
+    *
+    * @see #dispatchEvent(AWTEvent)
+    * @serial true to process event locally
+    */
+   boolean newEventsOnly;
+ 
+   /**
+    * Set by subclasses to enable event handling of particular events, and
+    * left alone when modifying listeners. For component, this defaults to
+    * enabling only input methods.
+    *
+    * @see #enableInputMethods(boolean)
+    * @see AWTEvent
+    * @serial the mask of events to process
+    */
+   long eventMask = AWTEvent.INPUT_ENABLED_EVENT_MASK;
+ 
+   /**
+    * Describes all registered PropertyChangeListeners.
+    *
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    * @see #removePropertyChangeListener(PropertyChangeListener)
+    * @see #firePropertyChange(String, Object, Object)
+    * @serial the property change listeners
+    * @since 1.2
+    */
+   PropertyChangeSupport changeSupport;
+ 
+   /**
+    * True if the component has been packed (layed out).
+    *
+    * @serial true if this is packed
+    */
+   boolean isPacked;
+ 
+   /**
+    * The serialization version for this class. Currently at version 4.
+    *
+    * XXX How do we handle prior versions?
+    *
+    * @serial the serialization version
+    */
+   int componentSerializedDataVersion = 4;
+ 
+   /**
+    * The accessible context associated with this component. This is only set
+    * by subclasses.
+    *
+    * @see #getAccessibleContext()
+    * @serial the accessibility context
+    * @since 1.2
+    */
+   AccessibleContext accessibleContext;
+ 
+ 
+   // Guess what - listeners are special cased in serialization. See
+   // readObject and writeObject.
+ 
+   /** Component listener chain. */
+   transient ComponentListener componentListener;
+ 
+   /** Focus listener chain. */
+   transient FocusListener focusListener;
+ 
+   /** Key listener chain. */
+   transient KeyListener keyListener;
+ 
+   /** Mouse listener chain. */
+   transient MouseListener mouseListener;
+ 
+   /** Mouse motion listener chain. */
+   transient MouseMotionListener mouseMotionListener;
+ 
+   /**
+    * Mouse wheel listener chain.
+    *
+    * @since 1.4
+    */
+   transient MouseWheelListener mouseWheelListener;
+ 
+   /**
+    * Input method listener chain.
+    *
+    * @since 1.2
+    */
+   transient InputMethodListener inputMethodListener;
+ 
+   /**
+    * Hierarcy listener chain.
+    *
+    * @since 1.3
+    */
+   transient HierarchyListener hierarchyListener;
+ 
+   /**
+    * Hierarcy bounds listener chain.
+    *
+    * @since 1.3
+    */
+   transient HierarchyBoundsListener hierarchyBoundsListener;
+ 
+   // Anything else is non-serializable, and should be declared "transient".
+ 
+   /** The parent. */
+   transient Container parent;
+ 
+   /** The associated native peer. */
+   transient ComponentPeer peer;
+ 
+   /** The preferred component orientation. */
+   transient ComponentOrientation orientation = ComponentOrientation.UNKNOWN;
+ 
+   /**
+    * The associated graphics configuration.
+    *
+    * @since 1.4
+    */
+   transient GraphicsConfiguration graphicsConfig;
+ 
+   /**
+    * The buffer strategy for repainting.
+    *
+    * @since 1.4
+    */
+   transient BufferStrategy bufferStrategy;
+ 
+   /**
+    * true if requestFocus was called on this component when its
+    * top-level ancestor was not focusable.
+    */
+   private transient FocusEvent pendingFocusRequest = null;
+ 
+   /**
+    * The system properties that affect image updating.
+    */
+   private static transient boolean incrementalDraw;
+   private static transient Long redrawRate;
+ 
+   static
+   {
+     incrementalDraw = Boolean.getBoolean ("awt.image.incrementalDraw");
+     redrawRate = Long.getLong ("awt.image.redrawrate");
+   }
+ 
+   // Public and protected API.
+ 
+   /**
+    * Default constructor for subclasses. When Component is extended directly,
+    * it forms a lightweight component that must be hosted in an opaque native
+    * container higher in the tree.
+    */
+   protected Component()
+   {
+     // Nothing to do here.
+   }
+ 
+   /**
+    * Returns the name of this component.
+    *
+    * @return the name of this component
+    * @see #setName(String)
+    * @since 1.1
+    */
+   public String getName()
+   {
+     if (name == null && ! nameExplicitlySet)
+       name = generateName();
+     return name;
+   }
+ 
+   /**
+    * Sets the name of this component to the specified name.
+    *
+    * @param name the new name of this component
+    * @see #getName()
+    * @since 1.1
+    */
+   public void setName(String name)
+   {
+     nameExplicitlySet = true;
+     this.name = name;
+   }
+ 
+   /**
+    * Returns the parent of this component.
+    *
+    * @return the parent of this component
+    */
+   public Container getParent()
+   {
+     return parent;
+   }
+ 
+   /**
+    * Returns the native windowing system peer for this component. Only the
+    * platform specific implementation code should call this method.
+    *
+    * @return the peer for this component
+    * @deprecated user programs should not directly manipulate peers; use
+    *             {@link #isDisplayable()} instead
+    */
+   // Classpath's Gtk peers rely on this.
+   public ComponentPeer getPeer()
+   {
+     return peer;
+   }
+ 
+   /**
+    * Set the associated drag-and-drop target, which receives events when this
+    * is enabled.
+    *
+    * @param dt the new drop target
+    * @see #isEnabled()
+    */
+   public void setDropTarget(DropTarget dt)
+   {
+     this.dropTarget = dt;
+   }
+ 
+   /**
+    * Gets the associated drag-and-drop target, if there is one.
+    *
+    * @return the drop target
+    */
+   public DropTarget getDropTarget()
+   {
+     return dropTarget;
+   }
+ 
+   /**
+    * Returns the graphics configuration of this component, if there is one.
+    * If it has not been set, it is inherited from the parent.
+    *
+    * @return the graphics configuration, or null
+    * @since 1.3
+    */
+   public GraphicsConfiguration getGraphicsConfiguration()
+   {
+     return getGraphicsConfigurationImpl();
+   }
+ 
+   /**
+    * Returns the object used for synchronization locks on this component
+    * when performing tree and layout functions.
+    *
+    * @return the synchronization lock for this component
+    */
+   public final Object getTreeLock()
+   {
+     return treeLock;
+   }
+ 
+   /**
+    * Returns the toolkit in use for this component. The toolkit is associated
+    * with the frame this component belongs to.
+    *
+    * @return the toolkit for this component
+    */
+   public Toolkit getToolkit()
+   {
+     if (peer != null)
+       {
+         Toolkit tk = peer.getToolkit();
+         if (tk != null)
+           return tk;
+       }
+     // Get toolkit for lightweight component.
+     if (parent != null)
+       return parent.getToolkit();
+     return Toolkit.getDefaultToolkit();
+   }
+ 
+   /**
+    * Tests whether or not this component is valid. A invalid component needs
+    * to have its layout redone.
+    *
+    * @return true if this component is valid
+    * @see #validate()
+    * @see #invalidate()
+    */
+   public boolean isValid()
+   {
+     return valid;
+   }
+ 
+   /**
+    * Tests if the component is displayable. It must be connected to a native
+    * screen resource.  This reduces to checking that peer is not null.  A 
+    * containment  hierarchy is made displayable when a window is packed or 
+    * made visible.
+    *
+    * @return true if the component is displayable
+    * @see Container#add(Component)
+    * @see Container#remove(Component)
+    * @see Window#pack()
+    * @see Window#show()
+    * @see Window#dispose()
+    * @since 1.2
+    */
+   public boolean isDisplayable()
+   {
+     return peer != null;
+   }
+ 
+   /**
+    * Tests whether or not this component is visible. Except for top-level
+    * frames, components are initially visible.
+    *
+    * @return true if the component is visible
+    * @see #setVisible(boolean)
+    */
+   public boolean isVisible()
+   {
+     return visible;
+   }
+ 
+   /**
+    * Tests whether or not this component is actually being shown on
+    * the screen. This will be true if and only if it this component is
+    * visible and its parent components are all visible.
+    *
+    * @return true if the component is showing on the screen
+    * @see #setVisible(boolean)
+    */
+   public boolean isShowing()
+   {
+     if (! visible || peer == null)
+       return false;
+ 
+     return parent == null ? false : parent.isShowing();
+   }
+ 
+   /**
+    * Tests whether or not this component is enabled. Components are enabled
+    * by default, and must be enabled to receive user input or generate events.
+    *
+    * @return true if the component is enabled
+    * @see #setEnabled(boolean)
+    */
+   public boolean isEnabled()
+   {
+     return enabled;
+   }
+ 
+   /**
+    * Enables or disables this component. The component must be enabled to
+    * receive events (except that lightweight components always receive mouse
+    * events).
+    *
+    * @param enabled true to enable this component
+    * 
+    * @see #isEnabled()
+    * @see #isLightweight()
+    * 
+    * @since 1.1
+    */
+   public void setEnabled(boolean enabled)
+   {
+     enable(enabled);
+   }
+ 
+   /**
+    * Enables this component.
+    *
+    * @deprecated use {@link #setEnabled(boolean)} instead
+    */
+   public void enable()
+   {
+     this.enabled = true;
+     if (peer != null)
+       peer.setEnabled (true);
+   }
+ 
+   /**
+    * Enables or disables this component.
+    *
+    * @param enabled true to enable this component
+    * 
+    * @deprecated use {@link #setEnabled(boolean)} instead
+    */
+   public void enable(boolean enabled)
+   {
+     if (enabled)
+       enable();
+     else
+       disable();
+   }
+ 
+   /**
+    * Disables this component.
+    *
+    * @deprecated use {@link #setEnabled(boolean)} instead
+    */
+   public void disable()
+   {
+     this.enabled = false;
+     if (peer != null)
+       peer.setEnabled (false);
+   }
+ 
+   /**
+    * Checks if this image is painted to an offscreen image buffer that is
+    * later copied to screen (double buffering reduces flicker). This version
+    * returns false, so subclasses must override it if they provide double
+    * buffering.
+    *
+    * @return true if this is double buffered; defaults to false
+    */
+   public boolean isDoubleBuffered()
+   {
+     return false;
+   }
+ 
+   /**
+    * Enables or disables input method support for this component. By default,
+    * components have this enabled. Input methods are given the opportunity
+    * to process key events before this component and its listeners.
+    *
+    * @param enable true to enable input method processing
+    * @see #processKeyEvent(KeyEvent)
+    * @since 1.2
+    */
+   public void enableInputMethods(boolean enable)
+   {
+     if (enable)
+       eventMask |= AWTEvent.INPUT_ENABLED_EVENT_MASK;
+     else
+       eventMask &= ~AWTEvent.INPUT_ENABLED_EVENT_MASK;
+   }
+ 
+   /**
+    * Makes this component visible or invisible. Note that it wtill might
+    * not show the component, if a parent is invisible.
+    *
+    * @param visible true to make this component visible
+    * 
+    * @see #isVisible()
+    * 
+    * @since 1.1
+    */
+   public void setVisible(boolean visible)
+   {
+     // Inspection by subclassing shows that Sun's implementation calls
+     // show(boolean) which then calls show() or hide(). It is the show()
+     // method that is overriden in subclasses like Window.
+     show(visible);
+   }
+ 
+   /**
+    * Makes this component visible on the screen.
+    *
+    * @deprecated use {@link #setVisible(boolean)} instead
+    */
+   public void show()
+   {
+     // We must set visible before showing the peer.  Otherwise the
+     // peer could post paint events before visible is true, in which
+     // case lightweight components are not initially painted --
+     // Container.paint first calls isShowing () before painting itself
+     // and its children.
+     if(!isVisible())
+       {
+         this.visible = true;
+         // Avoid NullPointerExceptions by creating a local reference.
+         ComponentPeer currentPeer=peer;
+         if (currentPeer != null)
+             currentPeer.setVisible(true);
+ 
+         // The JDK repaints the component before invalidating the parent.
+         // So do we.
+         if (isShowing())
+           repaint();
+         // Invalidate the parent if we have one. The component itself must
+         // not be invalidated. We also avoid NullPointerException with
+         // a local reference here.
+         Container currentParent = parent;
+         if (currentParent != null)
+           currentParent.invalidate();
+ 
+         ComponentEvent ce =
+           new ComponentEvent(this,ComponentEvent.COMPONENT_SHOWN);
+         getToolkit().getSystemEventQueue().postEvent(ce);
+       }
+   }
+ 
+   /**
+    * Makes this component visible or invisible.
+    *
+    * @param visible true to make this component visible
+    * 
+    * @deprecated use {@link #setVisible(boolean)} instead
+    */
+   public void show(boolean visible)
+   {
+     if (visible)
+       show();
+     else
+       hide();
+   }
+ 
+   /**
+    * Hides this component so that it is no longer shown on the screen.
+    *
+    * @deprecated use {@link #setVisible(boolean)} instead
+    */
+   public void hide()
+   {
+     if (isVisible())
+       {
+         // Avoid NullPointerExceptions by creating a local reference.
+         ComponentPeer currentPeer=peer;
+         if (currentPeer != null)
+             currentPeer.setVisible(false);
+         boolean wasShowing = isShowing();
+         this.visible = false;
+ 
+         // The JDK repaints the component before invalidating the parent.
+         // So do we.
+         if (wasShowing)
+           repaint();
+         // Invalidate the parent if we have one. The component itself must
+         // not be invalidated. We also avoid NullPointerException with
+         // a local reference here.
+         Container currentParent = parent;
+         if (currentParent != null)
+           currentParent.invalidate();
+ 
+         ComponentEvent ce =
+           new ComponentEvent(this,ComponentEvent.COMPONENT_HIDDEN);
+         getToolkit().getSystemEventQueue().postEvent(ce);
+       }
+   }
+ 
+   /**
+    * Returns this component's foreground color. If not set, this is inherited
+    * from the parent.
+    *
+    * @return this component's foreground color, or null
+    * @see #setForeground(Color)
+    */
+   public Color getForeground()
+   {
+     if (foreground != null)
+       return foreground;
+     return parent == null ? null : parent.getForeground();
+   }
+ 
+   /**
+    * Sets this component's foreground color to the specified color. This is a
+    * bound property.
+    *
+    * @param c the new foreground color
+    * @see #getForeground()
+    */
+   public void setForeground(Color c)
+   {
+     if (peer != null)
+       peer.setForeground(c);
+     
+     Color previous = foreground;
+     foreground = c;
+     firePropertyChange("foreground", previous, c);
+   }
+ 
+   /**
+    * Tests if the foreground was explicitly set, or just inherited from the
+    * parent.
+    *
+    * @return true if the foreground has been set
+    * @since 1.4
+    */
+   public boolean isForegroundSet()
+   {
+     return foreground != null;
+   }
+ 
+   /**
+    * Returns this component's background color. If not set, this is inherited
+    * from the parent.
+    *
+    * @return the background color of the component, or null
+    * @see #setBackground(Color)
+    */
+   public Color getBackground()
+   {
+     if (background != null)
+       return background;
+     return parent == null ? null : parent.getBackground();
+   }
+ 
+   /**
+    * Sets this component's background color to the specified color. The parts
+    * of the component affected by the background color may by system dependent.
+    * This is a bound property.
+    *
+    * @param c the new background color
+    * @see #getBackground()
+    */
+   public void setBackground(Color c)
+   {
+     // return if the background is already set to that color.
+     if ((c != null) && c.equals(background))
+       return;
+ 
+     // If c is null, inherit from closest ancestor whose bg is set.
+     if (c == null && parent != null)
+       c = parent.getBackground();
+     if (peer != null && c != null)
+       peer.setBackground(c);
+     
+     Color previous = background;
+     background = c;
+     firePropertyChange("background", previous, c);
+   }
+ 
+   /**
+    * Tests if the background was explicitly set, or just inherited from the
+    * parent.
+    *
+    * @return true if the background has been set
+    * @since 1.4
+    */
+   public boolean isBackgroundSet()
+   {
+     return background != null;
+   }
+ 
+   /**
+    * Returns the font in use for this component. If not set, this is inherited
+    * from the parent.
+    *
+    * @return the font for this component
+    * @see #setFont(Font)
+    */
+   public Font getFont()
+   {
+     Font f = font;
+     if (f != null)
+       return f;
+ 
+     Component p = parent;
+     if (p != null)
+       return p.getFont();
+     if (peer != null)
+       return peer.getGraphics().getFont();
+     return null;
+   }
+ 
+   /**
+    * Sets the font for this component to the specified font. This is a bound
+    * property.
+    *
+    * @param newFont the new font for this component
+    * 
+    * @see #getFont()
+    */
+   public void setFont(Font newFont)
+   {
+     if((newFont != null && (font == null || !font.equals(newFont)))
+        || newFont == null)
+       {
+         Font oldFont = font;
+         font = newFont;
+         if (peer != null)
+           peer.setFont(font);
+         firePropertyChange("font", oldFont, newFont);
+         invalidate();
+       }
+   }
+ 
+   /**
+    * Tests if the font was explicitly set, or just inherited from the parent.
+    *
+    * @return true if the font has been set
+    * @since 1.4
+    */
+   public boolean isFontSet()
+   {
+     return font != null;
+   }
+ 
+   /**
+    * Returns the locale for this component. If this component does not
+    * have a locale, the locale of the parent component is returned.
+    *
+    * @return the locale for this component
+    * @throws IllegalComponentStateException if it has no locale or parent
+    * @see #setLocale(Locale)
+    * @since 1.1
+    */
+   public Locale getLocale()
+   {
+     if (locale != null)
+       return locale;
+     if (parent == null)
+       throw new IllegalComponentStateException
+         ("Component has no parent: can't determine Locale");
+     return parent.getLocale();
+   }
+ 
+   /**
+    * Sets the locale for this component to the specified locale. This is a
+    * bound property.
+    *
+    * @param newLocale the new locale for this component
+    */
+   public void setLocale(Locale newLocale)
+   {
+     if (locale == newLocale)
+       return;
+ 
+     Locale oldLocale = locale;
+     locale = newLocale;
+     firePropertyChange("locale", oldLocale, newLocale);
+     // New writing/layout direction or more/less room for localized labels.
+     invalidate();
+   }
+ 
+   /**
+    * Returns the color model of the device this componet is displayed on.
+    *
+    * @return this object's color model
+    * @see Toolkit#getColorModel()
+    */
+   public ColorModel getColorModel()
+   {
+     GraphicsConfiguration config = getGraphicsConfiguration();
+     return config != null ? config.getColorModel()
+       : getToolkit().getColorModel();
+   }
+ 
+   /**
+    * Returns the location of this component's top left corner relative to
+    * its parent component. This may be outdated, so for synchronous behavior,
+    * you should use a component listner.
+    *
+    * @return the location of this component
+    * @see #setLocation(int, int)
+    * @see #getLocationOnScreen()
+    * @since 1.1
+    */
+   public Point getLocation()
+   {
+     return location ();
+   }
+ 
+   /**
+    * Returns the location of this component's top left corner in screen
+    * coordinates.
+    *
+    * @return the location of this component in screen coordinates
+    * @throws IllegalComponentStateException if the component is not showing
+    */
+   public Point getLocationOnScreen()
+   {
+     if (! isShowing())
+       throw new IllegalComponentStateException("component "
+                                                + getClass().getName()
+                                                + " not showing");
+     // We know peer != null here.
+     return peer.getLocationOnScreen();
+   }
+ 
+   /**
+    * Returns the location of this component's top left corner relative to
+    * its parent component.
+    *
+    * @return the location of this component
+    * @deprecated use {@link #getLocation()} instead
+    */
+   public Point location()
+   {
+     return new Point (x, y);
+   }
+ 
+   /**
+    * Moves this component to the specified location, relative to the parent's
+    * coordinates. The coordinates are the new upper left corner of this
+    * component.
+    *
+    * @param x the new X coordinate of this component
+    * @param y the new Y coordinate of this component
+    * @see #getLocation()
+    * @see #setBounds(int, int, int, int)
+    */
+   public void setLocation(int x, int y)
+   {
+     move (x, y);
+   }
+ 
+   /**
+    * Moves this component to the specified location, relative to the parent's
+    * coordinates. The coordinates are the new upper left corner of this
+    * component.
+    *
+    * @param x the new X coordinate of this component
+    * @param y the new Y coordinate of this component
+    * @deprecated use {@link #setLocation(int, int)} instead
+    */
+   public void move(int x, int y)
+   {
+     setBounds(x, y, this.width, this.height);
+   }
+ 
+   /**
+    * Moves this component to the specified location, relative to the parent's
+    * coordinates. The coordinates are the new upper left corner of this
+    * component.
+    *
+    * @param p new coordinates for this component
+    * @throws NullPointerException if p is null
+    * @see #getLocation()
+    * @see #setBounds(int, int, int, int)
+    * @since 1.1
+    */
+   public void setLocation(Point p)
+   {
+     setLocation(p.x, p.y);
+   }
+ 
+   /**
+    * Returns the size of this object.
+    *
+    * @return the size of this object
+    * @see #setSize(int, int)
+    * @since 1.1
+    */
+   public Dimension getSize()
+   {
+     return size ();
+   }
+ 
+   /**
+    * Returns the size of this object.
+    *
+    * @return the size of this object
+    * @deprecated use {@link #getSize()} instead
+    */
+   public Dimension size()
+   {
+     return new Dimension (width, height);
+   }
+ 
+   /**
+    * Sets the size of this component to the specified width and height.
+    *
+    * @param width the new width of this component
+    * @param height the new height of this component
+    * @see #getSize()
+    * @see #setBounds(int, int, int, int)
+    */
+   public void setSize(int width, int height)
+   {
+     resize (width, height);
+   }
+ 
+   /**
+    * Sets the size of this component to the specified value.
+    *
+    * @param width the new width of the component
+    * @param height the new height of the component
+    * @deprecated use {@link #setSize(int, int)} instead
+    */
+   public void resize(int width, int height)
+   {
+     setBounds(this.x, this.y, width, height);
+   }
+ 
+   /**
+    * Sets the size of this component to the specified value.
+    *
+    * @param d the new size of this component
+    * @throws NullPointerException if d is null
+    * @see #setSize(int, int)
+    * @see #setBounds(int, int, int, int)
+    * @since 1.1
+    */
+   public void setSize(Dimension d)
+   {
+     resize (d);
+   }
+ 
+   /**
+    * Sets the size of this component to the specified value.
+    *
+    * @param d the new size of this component
+    * @throws NullPointerException if d is null
+    * @deprecated use {@link #setSize(Dimension)} instead
+    */
+   public void resize(Dimension d)
+   {
+     resize (d.width, d.height);
+   }
+ 
+   /**
+    * Returns a bounding rectangle for this component. Note that the
+    * returned rectange is relative to this component's parent, not to
+    * the screen.
+    *
+    * @return the bounding rectangle for this component
+    * @see #setBounds(int, int, int, int)
+    * @see #getLocation()
+    * @see #getSize()
+    */
+   public Rectangle getBounds()
+   {
+     return bounds ();
+   }
+ 
+   /**
+    * Returns a bounding rectangle for this component. Note that the
+    * returned rectange is relative to this component's parent, not to
+    * the screen.
+    *
+    * @return the bounding rectangle for this component
+    * @deprecated use {@link #getBounds()} instead
+    */
+   public Rectangle bounds()
+   {
+     return new Rectangle (x, y, width, height);
+   }
+ 
+   /**
+    * Sets the bounding rectangle for this component to the specified values.
+    * Note that these coordinates are relative to the parent, not to the screen.
+    *
+    * @param x the X coordinate of the upper left corner of the rectangle
+    * @param y the Y coordinate of the upper left corner of the rectangle
+    * @param w the width of the rectangle
+    * @param h the height of the rectangle
+    * @see #getBounds()
+    * @see #setLocation(int, int)
+    * @see #setLocation(Point)
+    * @see #setSize(int, int)
+    * @see #setSize(Dimension)
+    * @since 1.1
+    */
+   public void setBounds(int x, int y, int w, int h)
+   {
+     reshape (x, y, w, h);
+   }
+ 
+   /**
+    * Sets the bounding rectangle for this component to the specified values.
+    * Note that these coordinates are relative to the parent, not to the screen.
+    *
+    * @param x the X coordinate of the upper left corner of the rectangle
+    * @param y the Y coordinate of the upper left corner of the rectangle
+    * @param width the width of the rectangle
+    * @param height the height of the rectangle
+    * @deprecated use {@link #setBounds(int, int, int, int)} instead
+    */
+   public void reshape(int x, int y, int width, int height)
+   {
+     int oldx = this.x;
+     int oldy = this.y;
+     int oldwidth = this.width;
+     int oldheight = this.height;
+ 
+     if (this.x == x && this.y == y
+         && this.width == width && this.height == height)
+       return;
+     invalidate ();
+     this.x = x;
+     this.y = y;
+     this.width = width;
+     this.height = height;
+     if (peer != null)
+       peer.setBounds (x, y, width, height);
+ 
+     // Erase old bounds and repaint new bounds for lightweights.
+     if (isLightweight() && isShowing())
+       {
+         if (parent != null)
+           {
+             Rectangle oldBounds = new Rectangle(oldx, oldy, oldwidth,
+                                                 oldheight);
+             Rectangle newBounds = new Rectangle(x, y, width, height);
+             Rectangle destroyed = oldBounds.union(newBounds);
+             if (!destroyed.isEmpty())
+               parent.repaint(0, destroyed.x, destroyed.y, destroyed.width,
+                              destroyed.height);
+           }
+       }
+ 
+     // Only post event if this component is visible and has changed size.
+     if (isShowing ()
+         && (oldx != x || oldy != y))
+       {
+         ComponentEvent ce = new ComponentEvent(this,
+                                                ComponentEvent.COMPONENT_MOVED);
+         getToolkit().getSystemEventQueue().postEvent(ce);
+       }
+     if (isShowing ()
+         && (oldwidth != width || oldheight != height))
+       {
+         ComponentEvent ce = new ComponentEvent(this,
+                                                ComponentEvent.COMPONENT_RESIZED);
+         getToolkit().getSystemEventQueue().postEvent(ce);
+       }
+   }
+ 
+   /**
+    * Sets the bounding rectangle for this component to the specified
+    * rectangle. Note that these coordinates are relative to the parent, not
+    * to the screen.
+    *
+    * @param r the new bounding rectangle
+    * @throws NullPointerException if r is null
+    * @see #getBounds()
+    * @see #setLocation(Point)
+    * @see #setSize(Dimension)
+    * @since 1.1
+    */
+   public void setBounds(Rectangle r)
+   {
+     setBounds (r.x, r.y, r.width, r.height);
+   }
+ 
+   /**
+    * Gets the x coordinate of the upper left corner. This is more efficient
+    * than getBounds().x or getLocation().x.
+    *
+    * @return the current x coordinate
+    * @since 1.2
+    */
+   public int getX()
+   {
+     return x;
+   }
+ 
+   /**
+    * Gets the y coordinate of the upper left corner. This is more efficient
+    * than getBounds().y or getLocation().y.
+    *
+    * @return the current y coordinate
+    * @since 1.2
+    */
+   public int getY()
+   {
+     return y;
+   }
+ 
+   /**
+    * Gets the width of the component. This is more efficient than
+    * getBounds().width or getSize().width.
+    *
+    * @return the current width
+    * @since 1.2
+    */
+   public int getWidth()
+   {
+     return width;
+   }
+ 
+   /**
+    * Gets the height of the component. This is more efficient than
+    * getBounds().height or getSize().height.
+    *
+    * @return the current width
+    * @since 1.2
+    */
+   public int getHeight()
+   {
+     return height;
+   }
+ 
+   /**
+    * Returns the bounds of this component. This allows reuse of an existing
+    * rectangle, if r is non-null.
+    *
+    * @param r the rectangle to use, or null
+    * @return the bounds
+    */
+   public Rectangle getBounds(Rectangle r)
+   {
+     if (r == null)
+       r = new Rectangle();
+     r.x = x;
+     r.y = y;
+     r.width = width;
+     r.height = height;
+     return r;
+   }
+ 
+   /**
+    * Returns the size of this component. This allows reuse of an existing
+    * dimension, if d is non-null.
+    *
+    * @param d the dimension to use, or null
+    * @return the size
+    */
+   public Dimension getSize(Dimension d)
+   {
+     if (d == null)
+       d = new Dimension();
+     d.width = width;
+     d.height = height;
+     return d;
+   }
+ 
+   /**
+    * Returns the location of this component. This allows reuse of an existing
+    * point, if p is non-null.
+    *
+    * @param p the point to use, or null
+    * @return the location
+    */
+   public Point getLocation(Point p)
+   {
+     if (p == null)
+       p = new Point();
+     p.x = x;
+     p.y = y;
+     return p;
+   }
+ 
+   /**
+    * Tests if this component is opaque. All "heavyweight" (natively-drawn)
+    * components are opaque. A component is opaque if it draws all pixels in
+    * the bounds; a lightweight component is partially transparent if it lets
+    * pixels underneath show through. Subclasses that guarantee that all pixels
+    * will be drawn should override this.
+    *
+    * @return true if this is opaque
+    * @see #isLightweight()
+    * @since 1.2
+    */
+   public boolean isOpaque()
+   {
+     return ! isLightweight();
+   }
+ 
+   /**
+    * Return whether the component is lightweight. That means the component has
+    * no native peer, but is displayable. This applies to subclasses of
+    * Component not in this package, such as javax.swing.
+    *
+    * @return true if the component has a lightweight peer
+    * @see #isDisplayable()
+    * @since 1.2
+    */
+   public boolean isLightweight()
+   {
+     return peer instanceof LightweightPeer;
+   }
+ 
+   /**
+    * Returns the component's preferred size.
+    *
+    * @return the component's preferred size
+    * @see #getMinimumSize()
+    * @see LayoutManager
+    */
+   public Dimension getPreferredSize()
+   {
+     return preferredSize();
+   }
+ 
+   /**
+    * Returns the component's preferred size.
+    *
+    * @return the component's preferred size
+    * @deprecated use {@link #getPreferredSize()} instead
+    */
+   public Dimension preferredSize()
+   {
+     if (prefSize == null)
+       if (peer == null)
+ 	return new Dimension(width, height);
+       else 
+         prefSize = peer.getPreferredSize();
+     return prefSize;
+   }
+ 
+   /**
+    * Returns the component's minimum size.
+    *
+    * @return the component's minimum size
+    * @see #getPreferredSize()
+    * @see LayoutManager
+    */
+   public Dimension getMinimumSize()
+   {
+     return minimumSize();
+   }
+ 
+   /**
+    * Returns the component's minimum size.
+    *
+    * @return the component's minimum size
+    * @deprecated use {@link #getMinimumSize()} instead
+    */
+   public Dimension minimumSize()
+   {
+     if (minSize == null)
+       minSize = (peer != null ? peer.getMinimumSize()
+                  : new Dimension(width, height));
+     return minSize;
+   }
+ 
+   /**
+    * Returns the component's maximum size.
+    *
+    * @return the component's maximum size
+    * @see #getMinimumSize()
+    * @see #getPreferredSize()
+    * @see LayoutManager
+    */
+   public Dimension getMaximumSize()
+   {
+     return new Dimension(Short.MAX_VALUE, Short.MAX_VALUE);
+   }
+ 
+   /**
+    * Returns the preferred horizontal alignment of this component. The value
+    * returned will be between {@link #LEFT_ALIGNMENT} and
+    * {@link #RIGHT_ALIGNMENT}, inclusive.
+    *
+    * @return the preferred horizontal alignment of this component
+    */
+   public float getAlignmentX()
+   {
+     return CENTER_ALIGNMENT;
+   }
+ 
+   /**
+    * Returns the preferred vertical alignment of this component. The value
+    * returned will be between {@link #TOP_ALIGNMENT} and
+    * {@link #BOTTOM_ALIGNMENT}, inclusive.
+    *
+    * @return the preferred vertical alignment of this component
+    */
+   public float getAlignmentY()
+   {
+     return CENTER_ALIGNMENT;
+   }
+ 
+   /**
+    * Calls the layout manager to re-layout the component. This is called
+    * during validation of a container in most cases.
+    *
+    * @see #validate()
+    * @see LayoutManager
+    */
+   public void doLayout()
+   {
+     layout ();
+   }
+ 
+   /**
+    * Calls the layout manager to re-layout the component. This is called
+    * during validation of a container in most cases.
+    *
+    * @deprecated use {@link #doLayout()} instead
+    */
+   public void layout()
+   {
+     // Nothing to do unless we're a container.
+   }
+ 
+   /**
+    * Called to ensure that the layout for this component is valid. This is
+    * usually called on containers.
+    *
+    * @see #invalidate()
+    * @see #doLayout()
+    * @see LayoutManager
+    * @see Container#validate()
+    */
+   public void validate()
+   {
+     valid = true;
+   }
+ 
+   /**
+    * Invalidates this component and all of its parent components. This will
+    * cause them to have their layout redone. This is called frequently, so
+    * make it fast.
+    */
+   public void invalidate()
+   {
+     valid = false;
+     prefSize = null;
+     minSize = null;
+     if (parent != null && parent.isValid())
+       parent.invalidate();
+   }
+ 
+   /**
+    * Returns a graphics object for this component. Returns <code>null</code>
+    * if this component is not currently displayed on the screen.
+    *
+    * @return a graphics object for this component
+    * @see #paint(Graphics)
+    */
+   public Graphics getGraphics()
+   {
+     if (peer != null)
+       {
+         Graphics gfx = peer.getGraphics();
+         // Create peer for lightweights.
+         if (gfx == null && parent != null)
+           {
+             gfx = parent.getGraphics();
+             Rectangle bounds = getBounds();
+             gfx.setClip(bounds);
+             gfx.translate(bounds.x, bounds.y);
+             return gfx;
+           }
+         gfx.setFont(font);
+         return gfx;
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns the font metrics for the specified font in this component.
+    *
+    * @param font the font to retrieve metrics for
+    * @return the font metrics for the specified font
+    * @throws NullPointerException if font is null
+    * @see #getFont()
+    * @see Toolkit#getFontMetrics(Font)
+    */
+   public FontMetrics getFontMetrics(Font font)
+   {
+     return peer == null ? getToolkit().getFontMetrics(font)
+       : peer.getFontMetrics(font);
+   }
+ 
+   /**
+    * Sets the cursor for this component to the specified cursor. The cursor
+    * is displayed when the point is contained by the component, and the
+    * component is visible, displayable, and enabled. This is inherited by
+    * subcomponents unless they set their own cursor.
+    *
+    * @param cursor the new cursor for this component
+    * @see #isEnabled()
+    * @see #isShowing()
+    * @see #getCursor()
+    * @see #contains(int, int)
+    * @see Toolkit#createCustomCursor(Image, Point, String)
+    */
+   public void setCursor(Cursor cursor)
+   {
+     this.cursor = cursor;
+     if (peer != null)
+       peer.setCursor(cursor);
+   }
+ 
+   /**
+    * Returns the cursor for this component. If not set, this is inherited
+    * from the parent, or from Cursor.getDefaultCursor().
+    *
+    * @return the cursor for this component
+    */
+   public Cursor getCursor()
+   {
+     if (cursor != null)
+       return cursor;
+     return parent != null ? parent.getCursor() : Cursor.getDefaultCursor();
+   }
+ 
+   /**
+    * Tests if the cursor was explicitly set, or just inherited from the parent.
+    *
+    * @return true if the cursor has been set
+    * @since 1.4
+    */
+   public boolean isCursorSet()
+   {
+     return cursor != null;
+   }
+ 
+   /**
+    * Paints this component on the screen. The clipping region in the graphics
+    * context will indicate the region that requires painting. This is called
+    * whenever the component first shows, or needs to be repaired because
+    * something was temporarily drawn on top. It is not necessary for
+    * subclasses to call <code>super.paint(g)</code>. Components with no area
+    * are not painted.
+    *
+    * @param g the graphics context for this paint job
+    * @see #update(Graphics)
+    */
+   public void paint(Graphics g)
+   {
+     // This is a callback method and is meant to be overridden by subclasses
+     // that want to perform custom painting.
+   }
+ 
+   /**
+    * Updates this component. This is called in response to
+    * <code>repaint</code>. This method fills the component with the
+    * background color, then sets the foreground color of the specified
+    * graphics context to the foreground color of this component and calls
+    * the <code>paint()</code> method. The coordinates of the graphics are
+    * relative to this component. Subclasses should call either
+    * <code>super.update(g)</code> or <code>paint(g)</code>.
+    *
+    * @param g the graphics context for this update
+    *
+    * @see #paint(Graphics)
+    * @see #repaint()
+    *
+    * @specnote In contrast to what the spec says, tests show that the exact
+    *           behaviour is to clear the background on lightweight and
+    *           top-level components only. Heavyweight components are not
+    *           affected by this method and only call paint().
+    */
+   public void update(Graphics g)
+   {
+     // Tests show that the clearing of the background is only done in
+     // two cases:
+     // - If the component is lightweight (yes this is in contrast to the spec).
+     // or
+     // - If the component is a toplevel container.
+     if (isLightweight() || getParent() == null)
+       {
+         Rectangle clip = g.getClipBounds();
+         if (clip == null)
+           g.clearRect(0, 0, width, height);
+         else
+           g.clearRect(clip.x, clip.y, clip.width, clip.height);
+       }
+     paint(g);
+   }
+ 
+   /**
+    * Paints this entire component, including any sub-components.
+    *
+    * @param g the graphics context for this paint job
+    * 
+    * @see #paint(Graphics)
+    */
+   public void paintAll(Graphics g)
+   {
+     if (! visible)
+       return;
+     paint(g);
+   }
+ 
+   /**
+    * Repaint this entire component. The <code>update()</code> method
+    * on this component will be called as soon as possible.
+    *
+    * @see #update(Graphics)
+    * @see #repaint(long, int, int, int, int)
+    */
+   public void repaint()
+   {   
+     if (isShowing())
+       repaint(0, 0, 0, width, height);
+   }
+ 
+   /**
+    * Repaint this entire component. The <code>update()</code> method on this
+    * component will be called in approximate the specified number of
+    * milliseconds.
+    *
+    * @param tm milliseconds before this component should be repainted
+    * @see #paint(Graphics)
+    * @see #repaint(long, int, int, int, int)
+    */
+   public void repaint(long tm)
+   {
+     if (isShowing())
+       repaint(tm, 0, 0, width, height);
+   }
+ 
+   /**
+    * Repaints the specified rectangular region within this component. The
+    * <code>update</code> method on this component will be called as soon as
+    * possible. The coordinates are relative to this component.
+    *
+    * @param x the X coordinate of the upper left of the region to repaint
+    * @param y the Y coordinate of the upper left of the region to repaint
+    * @param w the width of the region to repaint
+    * @param h the height of the region to repaint
+    * @see #update(Graphics)
+    * @see #repaint(long, int, int, int, int)
+    */
+   public void repaint(int x, int y, int w, int h)
+   {
+     if (isShowing())
+       repaint(0, x, y, w, h);
+   }
+ 
+   /**
+    * Repaints the specified rectangular region within this component. The
+    * <code>update</code> method on this component will be called in
+    * approximately the specified number of milliseconds. The coordinates
+    * are relative to this component.
+    *
+    * @param tm milliseconds before this component should be repainted
+    * @param x the X coordinate of the upper left of the region to repaint
+    * @param y the Y coordinate of the upper left of the region to repaint
+    * @param width the width of the region to repaint
+    * @param height the height of the region to repaint
+    * @see #update(Graphics)
+    */
+   public void repaint(long tm, int x, int y, int width, int height)
+   {
+     if (isShowing())
+       {
+         ComponentPeer p = peer;
+         if (p != null)
+           p.repaint(tm, x, y, width, height);
+       }
+   }
+ 
+   /**
+    * Prints this component. This method is provided so that printing can be
+    * done in a different manner from painting. However, the implementation
+    * in this class simply calls the <code>paint()</code> method.
+    *
+    * @param g the graphics context of the print device
+    * 
+    * @see #paint(Graphics)
+    */
+   public void print(Graphics g)
+   {
+     paint(g);
+   }
+ 
+   /**
+    * Prints this component, including all sub-components. This method is
+    * provided so that printing can be done in a different manner from
+    * painting. However, the implementation in this class simply calls the
+    * <code>paintAll()</code> method.
+    *
+    * @param g the graphics context of the print device
+    * 
+    * @see #paintAll(Graphics)
+    */
+   public void printAll(Graphics g)
+   {
+     paintAll(g);
+   }
+ 
+   /**
+    * Called when an image has changed so that this component is repainted.
+    * This incrementally draws an image as more bits are available, when
+    * possible. Incremental drawing is enabled if the system property
+    * <code>awt.image.incrementalDraw</code> is not present or is true, in which
+    * case the redraw rate is set to 100ms or the value of the system property
+    * <code>awt.image.redrawrate</code>.
+    *
+    * <p>The coordinate system used depends on the particular flags.
+    *
+    * @param img the image that has been updated
+    * @param flags tlags as specified in <code>ImageObserver</code>
+    * @param x the X coordinate
+    * @param y the Y coordinate
+    * @param w the width
+    * @param h the height
+    * @return false if the image is completely loaded, loading has been
+    * aborted, or an error has occurred.  true if more updates are
+    * required.
+    * @see ImageObserver
+    * @see Graphics#drawImage(Image, int, int, Color, ImageObserver)
+    * @see Graphics#drawImage(Image, int, int, ImageObserver)
+    * @see Graphics#drawImage(Image, int, int, int, int, Color, ImageObserver)
+    * @see Graphics#drawImage(Image, int, int, int, int, ImageObserver)
+    * @see ImageObserver#imageUpdate(Image, int, int, int, int, int)
+    */
+   public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h)
+   {
+     if ((flags & (FRAMEBITS | ALLBITS)) != 0)
+       repaint();
+     else if ((flags & SOMEBITS) != 0)
+       {
+ 	if (incrementalDraw)
+ 	  {
+ 	    if (redrawRate != null)
+ 	      {
+ 		long tm = redrawRate.longValue();
+ 		if (tm < 0)
+ 		  tm = 0;
+                 repaint(tm);
+ 	      }
+ 	    else
+               repaint(100);
+ 	  }
+       }
+     return (flags & (ALLBITS | ABORT | ERROR)) == 0;
+   }
+ 
+   /**
+    * Creates an image from the specified producer.
+    *
+    * @param producer the image procedure to create the image from
+    * @return the resulting image
+    */
+   public Image createImage(ImageProducer producer)
+   {
+     // Sun allows producer to be null.
+     if (peer != null)
+       return peer.createImage(producer);
+     else
+       return getToolkit().createImage(producer);
+   }
+ 
+   /**
+    * Creates an image with the specified width and height for use in
+    * double buffering. Headless environments do not support images.
+    *
+    * @param width the width of the image
+    * @param height the height of the image
+    * @return the requested image, or null if it is not supported
+    */
+   public Image createImage (int width, int height)
+   {
+     Image returnValue = null;
+     if (!GraphicsEnvironment.isHeadless ())
+       {
+ 	if (isLightweight () && parent != null)
+ 	  returnValue = parent.createImage (width, height);
+ 	else if (peer != null)
+ 	  returnValue = peer.createImage (width, height);
+       }
+     return returnValue;
+   }
+ 
+   /**
+    * Creates an image with the specified width and height for use in
+    * double buffering. Headless environments do not support images.
+    *
+    * @param width the width of the image
+    * @param height the height of the image
+    * @return the requested image, or null if it is not supported
+    * @since 1.4
+    */
+   public VolatileImage createVolatileImage(int width, int height)
+   {
+     if (GraphicsEnvironment.isHeadless())
+       return null;
+     GraphicsConfiguration config = getGraphicsConfiguration();
+     return config == null ? null
+       : config.createCompatibleVolatileImage(width, height);
+   }
+ 
+   /**
+    * Creates an image with the specified width and height for use in
+    * double buffering. Headless environments do not support images. The image
+    * will support the specified capabilities.
+    *
+    * @param width the width of the image
+    * @param height the height of the image
+    * @param caps the requested capabilities
+    * @return the requested image, or null if it is not supported
+    * @throws AWTException if a buffer with the capabilities cannot be created
+    * @since 1.4
+    */
+   public VolatileImage createVolatileImage(int width, int height,
+                                            ImageCapabilities caps)
+     throws AWTException
+   {
+     if (GraphicsEnvironment.isHeadless())
+       return null;
+     GraphicsConfiguration config = getGraphicsConfiguration();
+     return config == null ? null
+       : config.createCompatibleVolatileImage(width, height, caps);
+   }
+ 
+   /**
+    * Prepares the specified image for rendering on this component.
+    *
+    * @param image the image to prepare for rendering
+    * @param observer the observer to notify of image preparation status
+    * @return true if the image is already fully prepared
+    * @throws NullPointerException if image is null
+    */
+   public boolean prepareImage(Image image, ImageObserver observer)
+   {
+     return prepareImage(image, image.getWidth(observer),
+                         image.getHeight(observer), observer);
+   }
+ 
+   /**
+    * Prepares the specified image for rendering on this component at the
+    * specified scaled width and height
+    *
+    * @param image the image to prepare for rendering
+    * @param width the scaled width of the image
+    * @param height the scaled height of the image
+    * @param observer the observer to notify of image preparation status
+    * @return true if the image is already fully prepared
+    */
+   public boolean prepareImage(Image image, int width, int height,
+                               ImageObserver observer)
+   {
+     if (peer != null)
+ 	return peer.prepareImage(image, width, height, observer);
+     else
+ 	return getToolkit().prepareImage(image, width, height, observer);
+   }
+ 
+   /**
+    * Returns the status of the loading of the specified image. The value
+    * returned will be those flags defined in <code>ImageObserver</code>.
+    *
+    * @param image the image to check on
+    * @param observer the observer to notify of image loading progress
+    * @return the image observer flags indicating the status of the load
+    * @see #prepareImage(Image, int, int, ImageObserver)
+    * @see Toolkit#checkImage(Image, int, int, ImageObserver)
+    * @throws NullPointerException if image is null
+    */
+   public int checkImage(Image image, ImageObserver observer)
+   {
+     return checkImage(image, -1, -1, observer);
+   }
+ 
+   /**
+    * Returns the status of the loading of the specified image. The value
+    * returned will be those flags defined in <code>ImageObserver</code>.
+    *
+    * @param image the image to check on
+    * @param width the scaled image width
+    * @param height the scaled image height
+    * @param observer the observer to notify of image loading progress
+    * @return the image observer flags indicating the status of the load
+    * @see #prepareImage(Image, int, int, ImageObserver)
+    * @see Toolkit#checkImage(Image, int, int, ImageObserver)
+    */
+   public int checkImage(Image image, int width, int height,
+                         ImageObserver observer)
+   {
+     if (peer != null)
+       return peer.checkImage(image, width, height, observer);
+     return getToolkit().checkImage(image, width, height, observer);
+   }
+ 
+   /**
+    * Sets whether paint messages delivered by the operating system should be
+    * ignored. This does not affect messages from AWT, except for those
+    * triggered by OS messages. Setting this to true can allow faster
+    * performance in full-screen mode or page-flipping.
+    *
+    * @param ignoreRepaint the new setting for ignoring repaint events
+    * @see #getIgnoreRepaint()
+    * @see BufferStrategy
+    * @see GraphicsDevice#setFullScreenWindow(Window)
+    * @since 1.4
+    */
+   public void setIgnoreRepaint(boolean ignoreRepaint)
+   {
+     this.ignoreRepaint = ignoreRepaint;
+   }
+ 
+   /**
+    * Test whether paint events from the operating system are ignored.
+    *
+    * @return the status of ignoring paint events
+    * @see #setIgnoreRepaint(boolean)
+    * @since 1.4
+    */
+   public boolean getIgnoreRepaint()
+   {
+     return ignoreRepaint;
+   }
+ 
+   /**
+    * Tests whether or not the specified point is contained within this
+    * component. Coordinates are relative to this component.
+    *
+    * @param x the X coordinate of the point to test
+    * @param y the Y coordinate of the point to test
+    * @return true if the point is within this component
+    * @see #getComponentAt(int, int)
+    */
+   public boolean contains(int x, int y)
+   {
+     return inside (x, y);
+   }
+ 
+   /**
+    * Tests whether or not the specified point is contained within this
+    * component. Coordinates are relative to this component.
+    *
+    * @param x the X coordinate of the point to test
+    * @param y the Y coordinate of the point to test
+    * @return true if the point is within this component
+    * @deprecated use {@link #contains(int, int)} instead
+    */
+   public boolean inside(int x, int y)
+   {
+     return x >= 0 && y >= 0 && x < width && y < height;
+   }
+ 
+   /**
+    * Tests whether or not the specified point is contained within this
+    * component. Coordinates are relative to this component.
+    *
+    * @param p the point to test
+    * @return true if the point is within this component
+    * @throws NullPointerException if p is null
+    * @see #getComponentAt(Point)
+    * @since 1.1
+    */
+   public boolean contains(Point p)
+   {
+     return contains (p.x, p.y);
+   }
+ 
+   /**
+    * Returns the component occupying the position (x,y). This will either
+    * be this component, an immediate child component, or <code>null</code>
+    * if neither of the first two occupies the specified location.
+    *
+    * @param x the X coordinate to search for components at
+    * @param y the Y coordinate to search for components at
+    * @return the component at the specified location, or null
+    * @see #contains(int, int)
+    */
+   public Component getComponentAt(int x, int y)
+   {
+     return locate (x, y);
+   }
+ 
+   /**
+    * Returns the component occupying the position (x,y). This will either
+    * be this component, an immediate child component, or <code>null</code>
+    * if neither of the first two occupies the specified location.
+    *
+    * @param x the X coordinate to search for components at
+    * @param y the Y coordinate to search for components at
+    * @return the component at the specified location, or null
+    * @deprecated use {@link #getComponentAt(int, int)} instead
+    */
+   public Component locate(int x, int y)
+   {
+     return contains (x, y) ? this : null;
+   }
+ 
+   /**
+    * Returns the component occupying the position (x,y). This will either
+    * be this component, an immediate child component, or <code>null</code>
+    * if neither of the first two occupies the specified location.
+    *
+    * @param p the point to search for components at
+    * @return the component at the specified location, or null
+    * @throws NullPointerException if p is null
+    * @see #contains(Point)
+    * @since 1.1
+    */
+   public Component getComponentAt(Point p)
+   {
+     return getComponentAt (p.x, p.y);
+   }
+ 
+   /**
+    * AWT 1.0 event delivery.
+    *
+    * Deliver an AWT 1.0 event to this Component.  This method simply
+    * calls {@link #postEvent}.
+    *
+    * @param e the event to deliver
+    * @deprecated use {@link #dispatchEvent (AWTEvent)} instead
+    */
+   public void deliverEvent (Event e)
+   {
+     postEvent (e);
+   }
+ 
+   /**
+    * Forwards AWT events to processEvent() if:<ul>
+    * <li>Events have been enabled for this type of event via
+    * <code>enableEvents()</code></li>,
+    * <li>There is at least one registered listener for this type of event</li>
+    * </ul>
+    *
+    * @param e the event to dispatch
+    */
+   public final void dispatchEvent(AWTEvent e)
+   {
+     // Some subclasses in the AWT package need to override this behavior,
+     // hence the use of dispatchEventImpl().
+     dispatchEventImpl(e);
+   }
+ 
+   /**
+    * AWT 1.0 event handler.
+    *
+    * This method simply calls handleEvent and returns the result.
+    *
+    * @param e the event to handle
+    * @return true if the event was handled, false otherwise
+    * @deprecated use {@link #dispatchEvent(AWTEvent)} instead
+    */
+   public boolean postEvent (Event e)
+   {
+     boolean handled = handleEvent (e);
+ 
+     if (!handled && getParent() != null)
+       // FIXME: need to translate event coordinates to parent's
+       // coordinate space.
+       handled = getParent ().postEvent (e);
+ 
+     return handled;
+   }
+ 
+   /**
+    * Adds the specified listener to this component. This is harmless if the
+    * listener is null, but if the listener has already been registered, it
+    * will now be registered twice.
+    *
+    * @param listener the new listener to add
+    * @see ComponentEvent
+    * @see #removeComponentListener(ComponentListener)
+    * @see #getComponentListeners()
+    * @since 1.1
+    */
+   public synchronized void addComponentListener(ComponentListener listener)
+   {
+     componentListener = AWTEventMulticaster.add(componentListener, listener);
+     if (componentListener != null)
+       enableEvents(AWTEvent.COMPONENT_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the component. This is harmless if
+    * the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see ComponentEvent
+    * @see #addComponentListener(ComponentListener)
+    * @see #getComponentListeners()
+    * @since 1.1
+    */
+   public synchronized void removeComponentListener(ComponentListener listener)
+   {
+     componentListener = AWTEventMulticaster.remove(componentListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addComponentListener(ComponentListener)
+    * @see #removeComponentListener(ComponentListener)
+    * @since 1.4
+    */
+   public synchronized ComponentListener[] getComponentListeners()
+   {
+     return (ComponentListener[])
+       AWTEventMulticaster.getListeners(componentListener,
+                                        ComponentListener.class);
+   }
+ 
+   /**
+    * Adds the specified listener to this component. This is harmless if the
+    * listener is null, but if the listener has already been registered, it
+    * will now be registered twice.
+    *
+    * @param listener the new listener to add
+    * @see FocusEvent
+    * @see #removeFocusListener(FocusListener)
+    * @see #getFocusListeners()
+    * @since 1.1
+    */
+   public synchronized void addFocusListener(FocusListener listener)
+   {
+     focusListener = AWTEventMulticaster.add(focusListener, listener);
+     if (focusListener != null)
+       enableEvents(AWTEvent.FOCUS_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the component. This is harmless if
+    * the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see FocusEvent
+    * @see #addFocusListener(FocusListener)
+    * @see #getFocusListeners()
+    * @since 1.1
+    */
+   public synchronized void removeFocusListener(FocusListener listener)
+   {
+     focusListener = AWTEventMulticaster.remove(focusListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addFocusListener(FocusListener)
+    * @see #removeFocusListener(FocusListener)
+    * @since 1.4
+    */
+   public synchronized FocusListener[] getFocusListeners()
+   {
+     return (FocusListener[])
+       AWTEventMulticaster.getListeners(focusListener, FocusListener.class);
+   }
+ 
+   /**
+    * Adds the specified listener to this component. This is harmless if the
+    * listener is null, but if the listener has already been registered, it
+    * will now be registered twice.
+    *
+    * @param listener the new listener to add
+    * @see HierarchyEvent
+    * @see #removeHierarchyListener(HierarchyListener)
+    * @see #getHierarchyListeners()
+    * @since 1.3
+    */
+   public synchronized void addHierarchyListener(HierarchyListener listener)
+   {
+     hierarchyListener = AWTEventMulticaster.add(hierarchyListener, listener);
+     if (hierarchyListener != null)
+       enableEvents(AWTEvent.HIERARCHY_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the component. This is harmless if
+    * the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see HierarchyEvent
+    * @see #addHierarchyListener(HierarchyListener)
+    * @see #getHierarchyListeners()
+    * @since 1.3
+    */
+   public synchronized void removeHierarchyListener(HierarchyListener listener)
+   {
+     hierarchyListener = AWTEventMulticaster.remove(hierarchyListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addHierarchyListener(HierarchyListener)
+    * @see #removeHierarchyListener(HierarchyListener)
+    * @since 1.4
+    */
+   public synchronized HierarchyListener[] getHierarchyListeners()
+   {
+     return (HierarchyListener[])
+       AWTEventMulticaster.getListeners(hierarchyListener,
+                                        HierarchyListener.class);
+   }
+ 
+   /**
+    * Adds the specified listener to this component. This is harmless if the
+    * listener is null, but if the listener has already been registered, it
+    * will now be registered twice.
+    *
+    * @param listener the new listener to add
+    * @see HierarchyEvent
+    * @see #removeHierarchyBoundsListener(HierarchyBoundsListener)
+    * @see #getHierarchyBoundsListeners()
+    * @since 1.3
+    */
+   public synchronized void
+     addHierarchyBoundsListener(HierarchyBoundsListener listener)
+   {
+     hierarchyBoundsListener =
+       AWTEventMulticaster.add(hierarchyBoundsListener, listener);
+     if (hierarchyBoundsListener != null)
+       enableEvents(AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the component. This is harmless if
+    * the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see HierarchyEvent
+    * @see #addHierarchyBoundsListener(HierarchyBoundsListener)
+    * @see #getHierarchyBoundsListeners()
+    * @since 1.3
+    */
+   public synchronized void
+     removeHierarchyBoundsListener(HierarchyBoundsListener listener)
+   {
+     hierarchyBoundsListener =
+       AWTEventMulticaster.remove(hierarchyBoundsListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addHierarchyBoundsListener(HierarchyBoundsListener)
+    * @see #removeHierarchyBoundsListener(HierarchyBoundsListener)
+    * @since 1.4
+    */
+   public synchronized HierarchyBoundsListener[] getHierarchyBoundsListeners()
+   {
+     return (HierarchyBoundsListener[])
+       AWTEventMulticaster.getListeners(hierarchyBoundsListener,
+                                        HierarchyBoundsListener.class);
+   }
+ 
+   /**
+    * Adds the specified listener to this component. This is harmless if the
+    * listener is null, but if the listener has already been registered, it
+    * will now be registered twice.
+    *
+    * @param listener the new listener to add
+    * @see KeyEvent
+    * @see #removeKeyListener(KeyListener)
+    * @see #getKeyListeners()
+    * @since 1.1
+    */
+   public synchronized void addKeyListener(KeyListener listener)
+   {
+     keyListener = AWTEventMulticaster.add(keyListener, listener);
+     if (keyListener != null)
+       enableEvents(AWTEvent.KEY_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the component. This is harmless if
+    * the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see KeyEvent
+    * @see #addKeyListener(KeyListener)
+    * @see #getKeyListeners()
+    * @since 1.1
+    */
+   public synchronized void removeKeyListener(KeyListener listener)
+   {
+     keyListener = AWTEventMulticaster.remove(keyListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addKeyListener(KeyListener)
+    * @see #removeKeyListener(KeyListener)
+    * @since 1.4
+    */
+   public synchronized KeyListener[] getKeyListeners()
+   {
+     return (KeyListener[])
+       AWTEventMulticaster.getListeners(keyListener, KeyListener.class);
+   }
+ 
+   /**
+    * Adds the specified listener to this component. This is harmless if the
+    * listener is null, but if the listener has already been registered, it
+    * will now be registered twice.
+    *
+    * @param listener the new listener to add
+    * @see MouseEvent
+    * @see #removeMouseListener(MouseListener)
+    * @see #getMouseListeners()
+    * @since 1.1
+    */
+   public synchronized void addMouseListener(MouseListener listener)
+   {
+     mouseListener = AWTEventMulticaster.add(mouseListener, listener);
+     if (mouseListener != null)
+       enableEvents(AWTEvent.MOUSE_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the component. This is harmless if
+    * the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see MouseEvent
+    * @see #addMouseListener(MouseListener)
+    * @see #getMouseListeners()
+    * @since 1.1
+    */
+   public synchronized void removeMouseListener(MouseListener listener)
+   {
+     mouseListener = AWTEventMulticaster.remove(mouseListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addMouseListener(MouseListener)
+    * @see #removeMouseListener(MouseListener)
+    * @since 1.4
+    */
+   public synchronized MouseListener[] getMouseListeners()
+   {
+     return (MouseListener[])
+       AWTEventMulticaster.getListeners(mouseListener, MouseListener.class);
+   }
+ 
+   /**
+    * Adds the specified listener to this component. This is harmless if the
+    * listener is null, but if the listener has already been registered, it
+    * will now be registered twice.
+    *
+    * @param listener the new listener to add
+    * @see MouseEvent
+    * @see #removeMouseMotionListener(MouseMotionListener)
+    * @see #getMouseMotionListeners()
+    * @since 1.1
+    */
+   public synchronized void addMouseMotionListener(MouseMotionListener listener)
+   {
+     mouseMotionListener = AWTEventMulticaster.add(mouseMotionListener, listener);
+     if (mouseMotionListener != null)
+       enableEvents(AWTEvent.MOUSE_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the component. This is harmless if
+    * the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see MouseEvent
+    * @see #addMouseMotionListener(MouseMotionListener)
+    * @see #getMouseMotionListeners()
+    * @since 1.1
+    */
+   public synchronized void removeMouseMotionListener(MouseMotionListener listener)
+   {
+     mouseMotionListener = AWTEventMulticaster.remove(mouseMotionListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addMouseMotionListener(MouseMotionListener)
+    * @see #removeMouseMotionListener(MouseMotionListener)
+    * @since 1.4
+    */
+   public synchronized MouseMotionListener[] getMouseMotionListeners()
+   {
+     return (MouseMotionListener[])
+       AWTEventMulticaster.getListeners(mouseMotionListener,
+                                        MouseMotionListener.class);
+   }
+ 
+   /**
+    * Adds the specified listener to this component. This is harmless if the
+    * listener is null, but if the listener has already been registered, it
+    * will now be registered twice.
+    *
+    * @param listener the new listener to add
+    * @see MouseEvent
+    * @see MouseWheelEvent
+    * @see #removeMouseWheelListener(MouseWheelListener)
+    * @see #getMouseWheelListeners()
+    * @since 1.4
+    */
+   public synchronized void addMouseWheelListener(MouseWheelListener listener)
+   {
+     mouseWheelListener = AWTEventMulticaster.add(mouseWheelListener, listener);
+     if (mouseWheelListener != null)
+       enableEvents(AWTEvent.MOUSE_WHEEL_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the component. This is harmless if
+    * the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see MouseEvent
+    * @see MouseWheelEvent
+    * @see #addMouseWheelListener(MouseWheelListener)
+    * @see #getMouseWheelListeners()
+    * @since 1.4
+    */
+   public synchronized void removeMouseWheelListener(MouseWheelListener listener)
+   {
+     mouseWheelListener = AWTEventMulticaster.remove(mouseWheelListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addMouseWheelListener(MouseWheelListener)
+    * @see #removeMouseWheelListener(MouseWheelListener)
+    * @since 1.4
+    */
+   public synchronized MouseWheelListener[] getMouseWheelListeners()
+   {
+     return (MouseWheelListener[])
+       AWTEventMulticaster.getListeners(mouseWheelListener,
+                                        MouseWheelListener.class);
+   }
+ 
+   /**
+    * Adds the specified listener to this component. This is harmless if the
+    * listener is null, but if the listener has already been registered, it
+    * will now be registered twice.
+    *
+    * @param listener the new listener to add
+    * @see InputMethodEvent
+    * @see #removeInputMethodListener(InputMethodListener)
+    * @see #getInputMethodListeners()
+    * @see #getInputMethodRequests()
+    * @since 1.2
+    */
+   public synchronized void addInputMethodListener(InputMethodListener listener)
+   {
+     inputMethodListener = AWTEventMulticaster.add(inputMethodListener, listener);
+     if (inputMethodListener != null)
+       enableEvents(AWTEvent.INPUT_METHOD_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the component. This is harmless if
+    * the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see InputMethodEvent
+    * @see #addInputMethodListener(InputMethodListener)
+    * @see #getInputMethodRequests()
+    * @since 1.2
+    */
+   public synchronized void removeInputMethodListener(InputMethodListener listener)
+   {
+     inputMethodListener = AWTEventMulticaster.remove(inputMethodListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addInputMethodListener(InputMethodListener)
+    * @see #removeInputMethodListener(InputMethodListener)
+    * @since 1.4
+    */
+   public synchronized InputMethodListener[] getInputMethodListeners()
+   {
+     return (InputMethodListener[])
+       AWTEventMulticaster.getListeners(inputMethodListener,
+                                        InputMethodListener.class);
+   }
+ 
+   /**
+    * Returns all registered EventListers of the given listenerType.
+    *
+    * @param listenerType the class of listeners to filter
+    * @return an array of registered listeners
+    * @see #getComponentListeners()
+    * @see #getFocusListeners()
+    * @see #getHierarchyListeners()
+    * @see #getHierarchyBoundsListeners()
+    * @see #getKeyListeners()
+    * @see #getMouseListeners()
+    * @see #getMouseMotionListeners()
+    * @see #getMouseWheelListeners()
+    * @see #getInputMethodListeners()
+    * @see #getPropertyChangeListeners()
+    * @since 1.3
+    */
+   public EventListener[] getListeners(Class listenerType)
+   {
+     if (listenerType == ComponentListener.class)
+       return getComponentListeners();
+     if (listenerType == FocusListener.class)
+       return getFocusListeners();
+     if (listenerType == HierarchyListener.class)
+       return getHierarchyListeners();
+     if (listenerType == HierarchyBoundsListener.class)
+       return getHierarchyBoundsListeners();
+     if (listenerType == KeyListener.class)
+       return getKeyListeners();
+     if (listenerType == MouseListener.class)
+       return getMouseListeners();
+     if (listenerType == MouseMotionListener.class)
+       return getMouseMotionListeners();
+     if (listenerType == MouseWheelListener.class)
+       return getMouseWheelListeners();
+     if (listenerType == InputMethodListener.class)
+       return getInputMethodListeners();
+     if (listenerType == PropertyChangeListener.class)
+       return getPropertyChangeListeners();
+     return (EventListener[]) Array.newInstance(listenerType, 0);
+   }
+ 
+   /**
+    * Returns the input method request handler, for subclasses which support
+    * on-the-spot text input. By default, input methods are handled by AWT,
+    * and this returns null.
+    *
+    * @return the input method handler, null by default
+    * @since 1.2
+    */
+   public InputMethodRequests getInputMethodRequests()
+   {
+     return null;
+   }
+ 
+   /**
+    * Gets the input context of this component, which is inherited from the
+    * parent unless this is overridden.
+    *
+    * @return the text input context
+    * @since 1.2
+    */
+   public InputContext getInputContext()
+   {
+     return parent == null ? null : parent.getInputContext();
+   }
+ 
+   /**
+    * Enables the specified events. The events to enable are specified
+    * by OR-ing together the desired masks from <code>AWTEvent</code>.
+    *
+    * <p>Events are enabled by default when a listener is attached to the
+    * component for that event type. This method can be used by subclasses
+    * to ensure the delivery of a specified event regardless of whether
+    * or not a listener is attached.
+    *
+    * @param eventsToEnable the desired events to enable
+    * @see #processEvent(AWTEvent)
+    * @see #disableEvents(long)
+    * @see AWTEvent
+    * @since 1.1
+    */
+   protected final void enableEvents(long eventsToEnable)
+   {
+     eventMask |= eventsToEnable;
+     // TODO: Unlike Sun's implementation, I think we should try and
+     // enable/disable events at the peer (gtk/X) level. This will avoid
+     // clogging the event pipeline with useless mousemove events that
+     // we arn't interested in, etc. This will involve extending the peer
+     // interface, but thats okay because the peer interfaces have been
+     // deprecated for a long time, and no longer feature in the
+     // API specification at all.
+     if (isLightweight() && parent != null)
+       parent.enableEvents(eventsToEnable);
+     else if (peer != null)
+       peer.setEventMask(eventMask);
+   }
+ 
+   /**
+    * Disables the specified events. The events to disable are specified
+    * by OR-ing together the desired masks from <code>AWTEvent</code>.
+    *
+    * @param eventsToDisable the desired events to disable
+    * @see #enableEvents(long)
+    * @since 1.1
+    */
+   protected final void disableEvents(long eventsToDisable)
+   {
+     eventMask &= ~eventsToDisable;
+     // forward new event mask to peer?
+   }
+ 
+   /**
+    * This is called by the EventQueue if two events with the same event id
+    * and owner component are queued. Returns a new combined event, or null if
+    * no combining is done. The coelesced events are currently mouse moves
+    * (intermediate ones are discarded) and paint events (a merged paint is
+    * created in place of the two events).
+    *
+    * @param existingEvent the event on the queue
+    * @param newEvent the new event that might be entered on the queue
+    * @return null if both events are kept, or the replacement coelesced event
+    */
+   protected AWTEvent coalesceEvents(AWTEvent existingEvent, AWTEvent newEvent)
+   {
+     switch (existingEvent.id)
+       {
+       case MouseEvent.MOUSE_MOVED:
+       case MouseEvent.MOUSE_DRAGGED:
+         // Just drop the old (intermediate) event and return the new one.
+         return newEvent;
+       case PaintEvent.PAINT:
+       case PaintEvent.UPDATE:
+         return coalescePaintEvents((PaintEvent) existingEvent,
+                                    (PaintEvent) newEvent);
+       default:
+         return null;
+       }
+   }
+ 
+   /**
+    * Processes the specified event. In this class, this method simply
+    * calls one of the more specific event handlers.
+    *
+    * @param e the event to process
+    * @throws NullPointerException if e is null
+    * @see #processComponentEvent(ComponentEvent)
+    * @see #processFocusEvent(FocusEvent)
+    * @see #processKeyEvent(KeyEvent)
+    * @see #processMouseEvent(MouseEvent)
+    * @see #processMouseMotionEvent(MouseEvent)
+    * @see #processInputMethodEvent(InputMethodEvent)
+    * @see #processHierarchyEvent(HierarchyEvent)
+    * @see #processMouseWheelEvent(MouseWheelEvent)
+    * @since 1.1
+    */
+   protected void processEvent(AWTEvent e)
+   {
+     /* Note: the order of these if statements are
+        important. Subclasses must be checked first. Eg. MouseEvent
+        must be checked before ComponentEvent, since a MouseEvent
+        object is also an instance of a ComponentEvent. */
+ 
+     if (e instanceof FocusEvent)
+       processFocusEvent((FocusEvent) e);
+     else if (e instanceof MouseWheelEvent)
+       processMouseWheelEvent((MouseWheelEvent) e);
+     else if (e instanceof MouseEvent)
+       {
+         if (e.id == MouseEvent.MOUSE_MOVED
+             || e.id == MouseEvent.MOUSE_DRAGGED)
+           processMouseMotionEvent((MouseEvent) e);
+         else
+           processMouseEvent((MouseEvent) e);
+       }
+     else if (e instanceof KeyEvent)
+       processKeyEvent((KeyEvent) e);
+     else if (e instanceof InputMethodEvent)
+       processInputMethodEvent((InputMethodEvent) e);
+     else if (e instanceof ComponentEvent)
+       processComponentEvent((ComponentEvent) e);
+     else if (e instanceof HierarchyEvent)
+       {
+         if (e.id == HierarchyEvent.HIERARCHY_CHANGED)
+           processHierarchyEvent((HierarchyEvent) e);
+         else
+           processHierarchyBoundsEvent((HierarchyEvent) e);
+       }
+   }
+ 
+   /**
+    * Called when a component event is dispatched and component events are
+    * enabled. This method passes the event along to any listeners
+    * that are attached.
+    *
+    * @param e the <code>ComponentEvent</code> to process
+    * @throws NullPointerException if e is null
+    * @see ComponentListener
+    * @see #addComponentListener(ComponentListener)
+    * @see #enableEvents(long)
+    * @since 1.1
+    */
+   protected void processComponentEvent(ComponentEvent e)
+   {
+     if (componentListener == null)
+       return;
+     switch (e.id)
+       {
+       case ComponentEvent.COMPONENT_HIDDEN:
+         componentListener.componentHidden(e);
+         break;
+       case ComponentEvent.COMPONENT_MOVED:
+         componentListener.componentMoved(e);
+         break;
+       case ComponentEvent.COMPONENT_RESIZED:
+         componentListener.componentResized(e);
+         break;
+       case ComponentEvent.COMPONENT_SHOWN:
+         componentListener.componentShown(e);
+         break;
+       }
+   }
+ 
+   /**
+    * Called when a focus event is dispatched and component events are
+    * enabled. This method passes the event along to any listeners
+    * that are attached.
+    *
+    * @param e the <code>FocusEvent</code> to process
+    * @throws NullPointerException if e is null
+    * @see FocusListener
+    * @see #addFocusListener(FocusListener)
+    * @see #enableEvents(long)
+    * @since 1.1
+    */
+   protected void processFocusEvent(FocusEvent e)
+   {
+     if (focusListener == null)
+       return;
+ 
+     switch (e.id)
+       {
+         case FocusEvent.FOCUS_GAINED:
+           focusListener.focusGained(e);
+         break;
+         case FocusEvent.FOCUS_LOST:
+           focusListener.focusLost(e);
+         break;
+       }
+   }
+ 
+   /**
+    * Called when a key event is dispatched and component events are
+    * enabled. This method passes the event along to any listeners
+    * that are attached.
+    *
+    * @param e the <code>KeyEvent</code> to process
+    * @throws NullPointerException if e is null
+    * @see KeyListener
+    * @see #addKeyListener(KeyListener)
+    * @see #enableEvents(long)
+    * @since 1.1
+    */
+   protected void processKeyEvent(KeyEvent e)
+   {
+     if (keyListener == null)
+       return;
+     switch (e.id)
+       {
+         case KeyEvent.KEY_PRESSED:
+           keyListener.keyPressed(e);
+         break;
+         case KeyEvent.KEY_RELEASED:
+           keyListener.keyReleased(e);
+         break;
+         case KeyEvent.KEY_TYPED:
+           keyListener.keyTyped(e);
+         break;
+       }
+   }
+ 
+   /**
+    * Called when a regular mouse event is dispatched and component events are
+    * enabled. This method passes the event along to any listeners
+    * that are attached.
+    *
+    * @param e the <code>MouseEvent</code> to process
+    * @throws NullPointerException if e is null
+    * @see MouseListener
+    * @see #addMouseListener(MouseListener)
+    * @see #enableEvents(long)
+    * @since 1.1
+    */
+   protected void processMouseEvent(MouseEvent e)
+   {
+     if (mouseListener == null)
+       return;
+     switch (e.id)
+       {
+         case MouseEvent.MOUSE_CLICKED:
+           mouseListener.mouseClicked(e);
+         break;
+         case MouseEvent.MOUSE_ENTERED:
+           mouseListener.mouseEntered(e);
+         break;
+         case MouseEvent.MOUSE_EXITED:
+           mouseListener.mouseExited(e);
+         break;
+         case MouseEvent.MOUSE_PRESSED:
+           mouseListener.mousePressed(e);
+         break;
+         case MouseEvent.MOUSE_RELEASED:
+           mouseListener.mouseReleased(e);
+         break;
+       }
+       e.consume();
+   }
+ 
+   /**
+    * Called when a mouse motion event is dispatched and component events are
+    * enabled. This method passes the event along to any listeners
+    * that are attached.
+    *
+    * @param e the <code>MouseMotionEvent</code> to process
+    * @throws NullPointerException if e is null
+    * @see MouseMotionListener
+    * @see #addMouseMotionListener(MouseMotionListener)
+    * @see #enableEvents(long)
+    * @since 1.1
+    */
+   protected void processMouseMotionEvent(MouseEvent e)
+   {
+     if (mouseMotionListener == null)
+       return;
+     switch (e.id)
+       {
+         case MouseEvent.MOUSE_DRAGGED:
+           mouseMotionListener.mouseDragged(e);
+         break;
+         case MouseEvent.MOUSE_MOVED:
+           mouseMotionListener.mouseMoved(e);
+         break;
+       }
+       e.consume();
+   }
+ 
+   /**
+    * Called when a mouse wheel event is dispatched and component events are
+    * enabled. This method passes the event along to any listeners that are
+    * attached.
+    *
+    * @param e the <code>MouseWheelEvent</code> to process
+    * @throws NullPointerException if e is null
+    * @see MouseWheelListener
+    * @see #addMouseWheelListener(MouseWheelListener)
+    * @see #enableEvents(long)
+    * @since 1.4
+    */
+   protected void processMouseWheelEvent(MouseWheelEvent e)
+   {
+     if (mouseWheelListener != null
+         && e.id == MouseEvent.MOUSE_WHEEL)
+     {
+       mouseWheelListener.mouseWheelMoved(e);
+       e.consume();
+     }	
+   }
+ 
+   /**
+    * Called when an input method event is dispatched and component events are
+    * enabled. This method passes the event along to any listeners that are
+    * attached.
+    *
+    * @param e the <code>InputMethodEvent</code> to process
+    * @throws NullPointerException if e is null
+    * @see InputMethodListener
+    * @see #addInputMethodListener(InputMethodListener)
+    * @see #enableEvents(long)
+    * @since 1.2
+    */
+   protected void processInputMethodEvent(InputMethodEvent e)
+   {
+     if (inputMethodListener == null)
+       return;
+     switch (e.id)
+       {
+         case InputMethodEvent.CARET_POSITION_CHANGED:
+           inputMethodListener.caretPositionChanged(e);
+         break;
+         case InputMethodEvent.INPUT_METHOD_TEXT_CHANGED:
+           inputMethodListener.inputMethodTextChanged(e);
+         break;
+       }
+   }
+ 
+   /**
+    * Called when a hierarchy change event is dispatched and component events
+    * are enabled. This method passes the event along to any listeners that are
+    * attached.
+    *
+    * @param e the <code>HierarchyEvent</code> to process
+    * @throws NullPointerException if e is null
+    * @see HierarchyListener
+    * @see #addHierarchyListener(HierarchyListener)
+    * @see #enableEvents(long)
+    * @since 1.3
+    */
+   protected void processHierarchyEvent(HierarchyEvent e)
+   {
+     if (hierarchyListener == null)
+       return;
+     if (e.id == HierarchyEvent.HIERARCHY_CHANGED)
+       hierarchyListener.hierarchyChanged(e);
+   }
+ 
+   /**
+    * Called when a hierarchy bounds event is dispatched and component events
+    * are enabled. This method passes the event along to any listeners that are
+    * attached.
+    *
+    * @param e the <code>HierarchyEvent</code> to process
+    * @throws NullPointerException if e is null
+    * @see HierarchyBoundsListener
+    * @see #addHierarchyBoundsListener(HierarchyBoundsListener)
+    * @see #enableEvents(long)
+    * @since 1.3
+    */
+   protected void processHierarchyBoundsEvent(HierarchyEvent e)
+   {
+     if (hierarchyBoundsListener == null)
+       return;
+     switch (e.id)
+       {
+         case HierarchyEvent.ANCESTOR_MOVED:
+           hierarchyBoundsListener.ancestorMoved(e);
+         break;
+         case HierarchyEvent.ANCESTOR_RESIZED:
+           hierarchyBoundsListener.ancestorResized(e);
+         break;
+       }
+   }
+ 
+   /**
+    * AWT 1.0 event handler.
+    *
+    * This method calls one of the event-specific handler methods.  For
+    * example for key events, either {@link #keyDown(Event,int)}
+    * or {@link #keyUp(Event,int)} is called.  A derived
+    * component can override one of these event-specific methods if it
+    * only needs to handle certain event types.  Otherwise it can
+    * override handleEvent itself and handle any event.
+    *
+    * @param evt the event to handle
+    * @return true if the event was handled, false otherwise
+    * @deprecated use {@link #processEvent(AWTEvent)} instead
+    */
+   public boolean handleEvent (Event evt)
+   {
+     switch (evt.id)
+       {
+ 	// Handle key events.
+       case Event.KEY_ACTION:
+       case Event.KEY_PRESS:
+ 	return keyDown (evt, evt.key);
+       case Event.KEY_ACTION_RELEASE:
+       case Event.KEY_RELEASE:
+ 	return keyUp (evt, evt.key);
+ 
+ 	// Handle mouse events.
+       case Event.MOUSE_DOWN:
+ 	return mouseDown (evt, evt.x, evt.y);
+       case Event.MOUSE_UP:
+ 	return mouseUp (evt, evt.x, evt.y);
+       case Event.MOUSE_MOVE:
+ 	return mouseMove (evt, evt.x, evt.y);
+       case Event.MOUSE_DRAG:
+ 	return mouseDrag (evt, evt.x, evt.y);
+       case Event.MOUSE_ENTER:
+ 	return mouseEnter (evt, evt.x, evt.y);
+       case Event.MOUSE_EXIT:
+ 	return mouseExit (evt, evt.x, evt.y);
+ 
+ 	// Handle focus events.
+       case Event.GOT_FOCUS:
+ 	return gotFocus (evt, evt.arg);
+       case Event.LOST_FOCUS:
+ 	return lostFocus (evt, evt.arg);
+ 
+ 	// Handle action event.
+       case Event.ACTION_EVENT:
+ 	return action (evt, evt.arg);
+       }
+     // Unknown event.
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 MOUSE_DOWN event handler.  This method is meant to be
+    * overridden by components providing their own MOUSE_DOWN handler.
+    * The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param x the x coordinate, ignored
+    * @param y the y coordinate, ignored
+    * @return false
+    * @deprecated use {@link #processMouseEvent(MouseEvent)} instead
+    */
+   public boolean mouseDown(Event evt, int x, int y)
+   {
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 MOUSE_DRAG event handler.  This method is meant to be
+    * overridden by components providing their own MOUSE_DRAG handler.
+    * The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param x the x coordinate, ignored
+    * @param y the y coordinate, ignored
+    * @return false
+    * @deprecated use {@link #processMouseMotionEvent(MouseEvent)} instead
+    */
+   public boolean mouseDrag(Event evt, int x, int y)
+   {
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 MOUSE_UP event handler.  This method is meant to be
+    * overridden by components providing their own MOUSE_UP handler.
+    * The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param x the x coordinate, ignored
+    * @param y the y coordinate, ignored
+    * @return false
+    * @deprecated use {@link #processMouseEvent(MouseEvent)} instead
+    */
+   public boolean mouseUp(Event evt, int x, int y)
+   {
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 MOUSE_MOVE event handler.  This method is meant to be
+    * overridden by components providing their own MOUSE_MOVE handler.
+    * The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param x the x coordinate, ignored
+    * @param y the y coordinate, ignored
+    * @return false
+    * @deprecated use {@link #processMouseMotionEvent(MouseEvent)} instead
+    */
+   public boolean mouseMove(Event evt, int x, int y)
+   {
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 MOUSE_ENTER event handler.  This method is meant to be
+    * overridden by components providing their own MOUSE_ENTER handler.
+    * The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param x the x coordinate, ignored
+    * @param y the y coordinate, ignored
+    * @return false
+    * @deprecated use {@link #processMouseEvent(MouseEvent)} instead
+    */
+   public boolean mouseEnter(Event evt, int x, int y)
+   {
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 MOUSE_EXIT event handler.  This method is meant to be
+    * overridden by components providing their own MOUSE_EXIT handler.
+    * The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param x the x coordinate, ignored
+    * @param y the y coordinate, ignored
+    * @return false
+    * @deprecated use {@link #processMouseEvent(MouseEvent)} instead
+    */
+   public boolean mouseExit(Event evt, int x, int y)
+   {
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 KEY_PRESS and KEY_ACTION event handler.  This method is
+    * meant to be overridden by components providing their own key
+    * press handler.  The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param key the key pressed, ignored
+    * @return false
+    * @deprecated use {@link #processKeyEvent(KeyEvent)} instead
+    */
+   public boolean keyDown(Event evt, int key)
+   {
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 KEY_RELEASE and KEY_ACTION_RELEASE event handler.  This
+    * method is meant to be overridden by components providing their
+    * own key release handler.  The default implementation simply
+    * returns false.
+    *
+    * @param evt the event to handle
+    * @param key the key pressed, ignored
+    * @return false
+    * @deprecated use {@link #processKeyEvent(KeyEvent)} instead
+    */
+   public boolean keyUp(Event evt, int key)
+   {
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 ACTION_EVENT event handler.  This method is meant to be
+    * overridden by components providing their own action event
+    * handler.  The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param what the object acted on, ignored
+    * @return false
+    * @deprecated in classes which support actions, use
+    *             <code>processActionEvent(ActionEvent)</code> instead
+    */
+   public boolean action(Event evt, Object what)
+   {
+     return false;
+   }
+ 
+   /**
+    * Called to inform this component it has been added to a container.
+    * A native peer - if any - is created at this time. This method is
+    * called automatically by the AWT system and should not be called by
+    * user level code.
+    *
+    * @see #isDisplayable()
+    * @see #removeNotify()
+    */
+   public void addNotify()
+   {
+     if (peer == null)
+       peer = getToolkit().createComponent(this);
+     /* Now that all the children has gotten their peers, we should
+        have the event mask needed for this component and its
+        lightweight subcomponents. */
+     peer.setEventMask(eventMask);
+     /* We do not invalidate here, but rather leave that job up to
+        the peer. For efficiency, the peer can choose not to
+        invalidate if it is happy with the current dimensions,
+        etc. */
+   }
+ 
+   /**
+    * Called to inform this component is has been removed from its
+    * container. Its native peer - if any - is destroyed at this time.
+    * This method is called automatically by the AWT system and should
+    * not be called by user level code.
+    *
+    * @see #isDisplayable()
+    * @see #addNotify()
+    */
+   public void removeNotify()
+   {
+     // We null our peer field before disposing of it, such that if we're
+     // not the event dispatch thread and the dispatch thread is awoken by
+     // the dispose call, there will be no race checking the peer's null
+     // status.
+ 
+     ComponentPeer tmp = peer;
+     peer = null;
+     if (tmp != null)
+       {
+         tmp.hide();
+         tmp.dispose();
+       }
+   }
+ 
+   /**
+    * AWT 1.0 GOT_FOCUS event handler.  This method is meant to be
+    * overridden by components providing their own GOT_FOCUS handler.
+    * The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param what the Object focused, ignored
+    * @return false
+    * @deprecated use {@link #processFocusEvent(FocusEvent)} instead
+    */
+   public boolean gotFocus(Event evt, Object what)
+   {
+     return false;
+   }
+ 
+   /**
+    * AWT 1.0 LOST_FOCUS event handler.  This method is meant to be
+    * overridden by components providing their own LOST_FOCUS handler.
+    * The default implementation simply returns false.
+    *
+    * @param evt the event to handle
+    * @param what the Object focused, ignored
+    * @return false
+    * @deprecated use {@link #processFocusEvent(FocusEvent)} instead
+    */
+   public boolean lostFocus(Event evt, Object what)
+   {
+     return false;
+   }
+ 
+   /**
+    * Tests whether or not this component is in the group that can be
+    * traversed using the keyboard traversal mechanism (such as the TAB key).
+    *
+    * @return true if the component is traversed via the TAB key
+    * @see #setFocusable(boolean)
+    * @since 1.1
+    * @deprecated use {@link #isFocusable()} instead
+    */
+   public boolean isFocusTraversable()
+   {
+     return enabled && visible && (peer == null || isLightweight() || peer.isFocusTraversable());
+   }
+ 
+   /**
+    * Tests if this component can receive focus.
+    *
+    * @return true if this component can receive focus
+    * @since 1.4
+    */
+   public boolean isFocusable()
+   {
+     return focusable;
+   }
+ 
+   /**
+    * Specify whether this component can receive focus. This method also
+    * sets the {@link #isFocusTraversableOverridden} field to 1, which
+    * appears to be the undocumented way {@link
+    * DefaultFocusTraversalPolicy#accept(Component)} determines whether to
+    * respect the {@link #isFocusable()} method of the component.
+    *
+    * @param focusable the new focusable status
+    * @since 1.4
+    */
+   public void setFocusable(boolean focusable)
+   {
+     firePropertyChange("focusable", this.focusable, focusable);
+     this.focusable = focusable;
+     this.isFocusTraversableOverridden = 1;
+   }
+ 
+   /**
+    * Sets the focus traversal keys for one of the three focus
+    * traversal directions supported by Components:
+    * {@link KeyboardFocusManager#FORWARD_TRAVERSAL_KEYS},
+    * {@link KeyboardFocusManager#BACKWARD_TRAVERSAL_KEYS}, or
+    * {@link KeyboardFocusManager#UP_CYCLE_TRAVERSAL_KEYS}. Normally, the
+    * default values should match the operating system's native
+    * choices. To disable a given traversal, use
+    * <code>Collections.EMPTY_SET</code>. The event dispatcher will
+    * consume PRESSED, RELEASED, and TYPED events for the specified
+    * key, although focus can only transfer on PRESSED or RELEASED.
+    *
+    * <p>The defaults are:
+    * <table>
+    *   <th><td>Identifier</td><td>Meaning</td><td>Default</td></th>
+    *   <tr><td>KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS</td>
+    *     <td>Normal forward traversal</td>
+    *     <td>TAB on KEY_PRESSED, Ctrl-TAB on KEY_PRESSED</td></tr>
+    *   <tr><td>KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS</td>
+    *     <td>Normal backward traversal</td>
+    *     <td>Shift-TAB on KEY_PRESSED, Ctrl-Shift-TAB on KEY_PRESSED</td></tr>
+    *   <tr><td>KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS</td>
+    *     <td>Go up a traversal cycle</td><td>None</td></tr>
+    * </table>
+    *
+    * If keystrokes is null, this component's focus traversal key set
+    * is inherited from one of its ancestors.  If none of its ancestors
+    * has its own set of focus traversal keys, the focus traversal keys
+    * are set to the defaults retrieved from the current
+    * KeyboardFocusManager.  If not null, the set must contain only
+    * AWTKeyStrokes that are not already focus keys and are not
+    * KEY_TYPED events.
+    *
+    * @param id one of FORWARD_TRAVERSAL_KEYS, BACKWARD_TRAVERSAL_KEYS, or
+    *        UP_CYCLE_TRAVERSAL_KEYS
+    * @param keystrokes a set of keys, or null
+    * @throws IllegalArgumentException if id or keystrokes is invalid
+    * @see #getFocusTraversalKeys(int)
+    * @see KeyboardFocusManager#FORWARD_TRAVERSAL_KEYS
+    * @see KeyboardFocusManager#BACKWARD_TRAVERSAL_KEYS
+    * @see KeyboardFocusManager#UP_CYCLE_TRAVERSAL_KEYS
+    * @since 1.4
+    */
+   public void setFocusTraversalKeys(int id, Set keystrokes)
+   {
+     if (keystrokes == null)
+       {
+         Container parent = getParent ();
+ 
+         while (parent != null)
+           {
+             if (parent.areFocusTraversalKeysSet (id))
+               {
+                 keystrokes = parent.getFocusTraversalKeys (id);
+                 break;
+               }
+             parent = parent.getParent ();
+           }
+ 
+         if (keystrokes == null)
+           keystrokes = KeyboardFocusManager.getCurrentKeyboardFocusManager ().
+             getDefaultFocusTraversalKeys (id);
+       }
+ 
+     Set sa;
+     Set sb;
+     String name;
+     switch (id)
+       {
+       case KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS:
+         sa = getFocusTraversalKeys
+           (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
+         sb = getFocusTraversalKeys
+           (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS);
+         name = "forwardFocusTraversalKeys";
+         break;
+       case KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS:
+         sa = getFocusTraversalKeys
+           (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
+         sb = getFocusTraversalKeys
+           (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS);
+         name = "backwardFocusTraversalKeys";
+         break;
+       case KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS:
+         sa = getFocusTraversalKeys
+           (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
+         sb = getFocusTraversalKeys
+           (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
+         name = "upCycleFocusTraversalKeys";
+         break;
+       default:
+         throw new IllegalArgumentException ();
+       }
+ 
+     int i = keystrokes.size ();
+     Iterator iter = keystrokes.iterator ();
+ 
+     while (--i >= 0)
+       {
+         Object o = iter.next ();
+         if (!(o instanceof AWTKeyStroke)
+             || sa.contains (o) || sb.contains (o)
+             || ((AWTKeyStroke) o).keyCode == KeyEvent.VK_UNDEFINED)
+           throw new IllegalArgumentException ();
+       }
+ 
+     if (focusTraversalKeys == null)
+       focusTraversalKeys = new Set[3];
+ 
+     keystrokes = Collections.unmodifiableSet (new HashSet (keystrokes));
+     firePropertyChange (name, focusTraversalKeys[id], keystrokes);
+ 
+     focusTraversalKeys[id] = keystrokes;
+   }
+ 
+   /**
+    * Returns the set of keys for a given focus traversal action, as
+    * defined in <code>setFocusTraversalKeys</code>.  If not set, this
+    * is inherited from the parent component, which may have gotten it
+    * from the KeyboardFocusManager.
+    *
+    * @param id one of FORWARD_TRAVERSAL_KEYS, BACKWARD_TRAVERSAL_KEYS,
+    * or UP_CYCLE_TRAVERSAL_KEYS
+    *
+    * @return set of traversal keys
+    *
+    * @throws IllegalArgumentException if id is invalid
+    * 
+    * @see #setFocusTraversalKeys (int, Set)
+    * @see KeyboardFocusManager#FORWARD_TRAVERSAL_KEYS
+    * @see KeyboardFocusManager#BACKWARD_TRAVERSAL_KEYS
+    * @see KeyboardFocusManager#UP_CYCLE_TRAVERSAL_KEYS
+    * 
+    * @since 1.4
+    */
+   public Set getFocusTraversalKeys (int id)
+   {
+     if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS)
+       throw new IllegalArgumentException();
+ 
+     Set s = null;
+ 
+     if (focusTraversalKeys != null)
+       s = focusTraversalKeys[id];
+ 
+     if (s == null && parent != null)
+       s = parent.getFocusTraversalKeys (id);
+ 
+     return s == null ? (KeyboardFocusManager.getCurrentKeyboardFocusManager()
+                         .getDefaultFocusTraversalKeys(id)) : s;
+   }
+ 
+   /**
+    * Tests whether the focus traversal keys for a given action are explicitly
+    * set or inherited.
+    *
+    * @param id one of FORWARD_TRAVERSAL_KEYS, BACKWARD_TRAVERSAL_KEYS,
+    * or UP_CYCLE_TRAVERSAL_KEYS
+    * @return true if that set is explicitly specified
+    * @throws IllegalArgumentException if id is invalid
+    * @see #getFocusTraversalKeys (int)
+    * @see KeyboardFocusManager#FORWARD_TRAVERSAL_KEYS
+    * @see KeyboardFocusManager#BACKWARD_TRAVERSAL_KEYS
+    * @see KeyboardFocusManager#UP_CYCLE_TRAVERSAL_KEYS
+    * @since 1.4
+    */
+   public boolean areFocusTraversalKeysSet (int id)
+   {
+     if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS)
+       throw new IllegalArgumentException ();
+ 
+     return focusTraversalKeys != null && focusTraversalKeys[id] != null;
+   }
+ 
+   /**
+    * Enable or disable focus traversal keys on this Component.  If
+    * they are, then the keyboard focus manager consumes and acts on
+    * key press and release events that trigger focus traversal, and
+    * discards the corresponding key typed events.  If focus traversal
+    * keys are disabled, then all key events that would otherwise
+    * trigger focus traversal are sent to this Component.
+    *
+    * @param focusTraversalKeysEnabled the new value of the flag
+    * @see #getFocusTraversalKeysEnabled ()
+    * @see #setFocusTraversalKeys (int, Set)
+    * @see #getFocusTraversalKeys (int)
+    * @since 1.4
+    */
+   public void setFocusTraversalKeysEnabled (boolean focusTraversalKeysEnabled)
+   {
+     firePropertyChange ("focusTraversalKeysEnabled",
+ 			this.focusTraversalKeysEnabled,
+ 			focusTraversalKeysEnabled);
+     this.focusTraversalKeysEnabled = focusTraversalKeysEnabled;
+   }
+ 
+   /**
+    * Check whether or not focus traversal keys are enabled on this
+    * Component.  If they are, then the keyboard focus manager consumes
+    * and acts on key press and release events that trigger focus
+    * traversal, and discards the corresponding key typed events.  If
+    * focus traversal keys are disabled, then all key events that would
+    * otherwise trigger focus traversal are sent to this Component.
+    *
+    * @return true if focus traversal keys are enabled
+    * @see #setFocusTraversalKeysEnabled (boolean)
+    * @see #setFocusTraversalKeys (int, Set)
+    * @see #getFocusTraversalKeys (int)
+    * @since 1.4
+    */
+   public boolean getFocusTraversalKeysEnabled ()
+   {
+     return focusTraversalKeysEnabled;
+   }
+ 
+   /**
+    * Request that this Component be given the keyboard input focus and
+    * that its top-level ancestor become the focused Window.
+    *
+    * For the request to be granted, the Component must be focusable,
+    * displayable and showing and the top-level Window to which it
+    * belongs must be focusable.  If the request is initially denied on
+    * the basis that the top-level Window is not focusable, the request
+    * will be remembered and granted when the Window does become
+    * focused.
+    *
+    * Never assume that this Component is the focus owner until it
+    * receives a FOCUS_GAINED event.
+    *
+    * The behaviour of this method is platform-dependent.
+    * {@link #requestFocusInWindow()} should be used instead.
+    *
+    * @see #requestFocusInWindow ()
+    * @see FocusEvent
+    * @see #addFocusListener (FocusListener)
+    * @see #isFocusable ()
+    * @see #isDisplayable ()
+    * @see KeyboardFocusManager#clearGlobalFocusOwner ()
+    */
+   public void requestFocus ()
+   {
+     if (isDisplayable ()
+ 	&& isShowing ()
+ 	&& isFocusable ())
+       {
+         synchronized (getTreeLock ())
+           {
+             // Find this Component's top-level ancestor.            
+             Container parent = (this instanceof Container) ? (Container) this
+                                                           : getParent();            
+             while (parent != null
+                    && !(parent instanceof Window))
+               parent = parent.getParent ();
+ 
+             if (parent == null)
+               return;
+             
+             Window toplevel = (Window) parent;
+             if (toplevel.isFocusableWindow ())
+               {
+                 if (peer != null && !isLightweight())
+                   // This call will cause a FOCUS_GAINED event to be
+                   // posted to the system event queue if the native
+                   // windowing system grants the focus request.
+                   peer.requestFocus ();
+                 else
+                   {
+                     // Either our peer hasn't been created yet or we're a
+                     // lightweight component.  In either case we want to
+                     // post a FOCUS_GAINED event.
+                     EventQueue eq = Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+                     synchronized (eq)
+                       {
+                         KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+                         Component currentFocusOwner = manager.getGlobalPermanentFocusOwner ();
+                         if (currentFocusOwner != null)
+                           {
+                             eq.postEvent (new FocusEvent(currentFocusOwner, FocusEvent.FOCUS_LOST,
+                                                          false, this));
+                             eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, false,
+                                                          currentFocusOwner));
+                           }
+                         else
+                           eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, false));
+                       }
+                   }
+               }
+             else
+               pendingFocusRequest = new FocusEvent(this, FocusEvent.FOCUS_GAINED);
+           }
+       }
+   }
+ 
+   /**
+    * Request that this Component be given the keyboard input focus and
+    * that its top-level ancestor become the focused Window.
+    *
+    * For the request to be granted, the Component must be focusable,
+    * displayable and showing and the top-level Window to which it
+    * belongs must be focusable.  If the request is initially denied on
+    * the basis that the top-level Window is not focusable, the request
+    * will be remembered and granted when the Window does become
+    * focused.
+    *
+    * Never assume that this Component is the focus owner until it
+    * receives a FOCUS_GAINED event.
+    *
+    * The behaviour of this method is platform-dependent.
+    * {@link #requestFocusInWindow()} should be used instead.
+    *
+    * If the return value is false, the request is guaranteed to fail.
+    * If the return value is true, the request will succeed unless it
+    * is vetoed or something in the native windowing system intervenes,
+    * preventing this Component's top-level ancestor from becoming
+    * focused.  This method is meant to be called by derived
+    * lightweight Components that want to avoid unnecessary repainting
+    * when they know a given focus transfer need only be temporary.
+    *
+    * @param temporary true if the focus request is temporary
+    * @return true if the request has a chance of success
+    * @see #requestFocusInWindow ()
+    * @see FocusEvent
+    * @see #addFocusListener (FocusListener)
+    * @see #isFocusable ()
+    * @see #isDisplayable ()
+    * @see KeyboardFocusManager#clearGlobalFocusOwner ()
+    * @since 1.4
+    */
+   protected boolean requestFocus (boolean temporary)
+   {
+     if (isDisplayable ()
+ 	&& isShowing ()
+ 	&& isFocusable ())
+       {
+         synchronized (getTreeLock ())
+           {
+             // Find this Component's top-level ancestor.
+             Container parent = getParent ();
+ 
+             while (parent != null
+                    && !(parent instanceof Window))
+               parent = parent.getParent ();
+ 
+             Window toplevel = (Window) parent;
+             if (toplevel.isFocusableWindow ())
+               {
+                 if (peer != null && !isLightweight())
+                   // This call will cause a FOCUS_GAINED event to be
+                   // posted to the system event queue if the native
+                   // windowing system grants the focus request.
+                   peer.requestFocus ();
+                 else
+                   {
+                     // Either our peer hasn't been created yet or we're a
+                     // lightweight component.  In either case we want to
+                     // post a FOCUS_GAINED event.
+                     EventQueue eq = Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+                     synchronized (eq)
+                       {
+                         KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+                         Component currentFocusOwner = manager.getGlobalPermanentFocusOwner ();
+                         if (currentFocusOwner != null)
+                           {
+                             eq.postEvent (new FocusEvent(currentFocusOwner,
+                                                          FocusEvent.FOCUS_LOST,
+                                                          temporary, this));
+                             eq.postEvent (new FocusEvent(this,
+                                                          FocusEvent.FOCUS_GAINED,
+                                                          temporary,
+                                                          currentFocusOwner));
+                           }
+                         else
+                           eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary));
+                       }
+                   }
+               }
+             else
+               // FIXME: need to add a focus listener to our top-level
+               // ancestor, so that we can post this event when it becomes
+               // the focused window.
+               pendingFocusRequest = new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary);
+           }
+       }
+     // Always return true.
+     return true;
+   }
+ 
+   /**
+    * Request that this component be given the keyboard input focus, if
+    * its top-level ancestor is the currently focused Window.  A
+    * <code>FOCUS_GAINED</code> event will be fired if and only if this
+    * request is successful. To be successful, the component must be
+    * displayable, showing, and focusable, and its ancestor top-level
+    * Window must be focused.
+    *
+    * If the return value is false, the request is guaranteed to fail.
+    * If the return value is true, the request will succeed unless it
+    * is vetoed or something in the native windowing system intervenes,
+    * preventing this Component's top-level ancestor from becoming
+    * focused.
+    *
+    * @return true if the request has a chance of success
+    * @see #requestFocus ()
+    * @see FocusEvent
+    * @see #addFocusListener (FocusListener)
+    * @see #isFocusable ()
+    * @see #isDisplayable ()
+    * @see KeyboardFocusManager#clearGlobalFocusOwner ()
+    * @since 1.4
+    */
+   public boolean requestFocusInWindow ()
+   {
+     return requestFocusInWindow (false);
+   }
+ 
+   /**
+    * Request that this component be given the keyboard input focus, if
+    * its top-level ancestor is the currently focused Window.  A
+    * <code>FOCUS_GAINED</code> event will be fired if and only if this
+    * request is successful. To be successful, the component must be
+    * displayable, showing, and focusable, and its ancestor top-level
+    * Window must be focused.
+    *
+    * If the return value is false, the request is guaranteed to fail.
+    * If the return value is true, the request will succeed unless it
+    * is vetoed or something in the native windowing system intervenes,
+    * preventing this Component's top-level ancestor from becoming
+    * focused.  This method is meant to be called by derived
+    * lightweight Components that want to avoid unnecessary repainting
+    * when they know a given focus transfer need only be temporary.
+    *
+    * @param temporary true if the focus request is temporary
+    * @return true if the request has a chance of success
+    * @see #requestFocus ()
+    * @see FocusEvent
+    * @see #addFocusListener (FocusListener)
+    * @see #isFocusable ()
+    * @see #isDisplayable ()
+    * @see KeyboardFocusManager#clearGlobalFocusOwner ()
+    * @since 1.4
+    */
+   protected boolean requestFocusInWindow (boolean temporary)
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ 
+     Window focusedWindow = manager.getFocusedWindow ();
+ 
+     if (isDisplayable ()
+ 	&& isShowing ()
+ 	&& isFocusable ())
+       {
+         if (focusedWindow != null)
+           {
+             synchronized (getTreeLock ())
+               {
+                 Container parent = getParent ();
+ 
+                 while (parent != null
+                        && !(parent instanceof Window))
+                   parent = parent.getParent ();
+ 
+                 Window toplevel = (Window) parent;
+ 
+                 // Check if top-level ancestor is currently focused window.
+                 if (focusedWindow == toplevel)
+                   {
+                     if (peer != null
+                         && !isLightweight()
+                         && !(this instanceof Window))
+                       // This call will cause a FOCUS_GAINED event to be
+                       // posted to the system event queue if the native
+                       // windowing system grants the focus request.
+                       peer.requestFocus ();
+                     else
+                       {
+                         // Either our peer hasn't been created yet or we're a
+                         // lightweight component.  In either case we want to
+                         // post a FOCUS_GAINED event.
+                         EventQueue eq = Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+                         synchronized (eq)
+                           {
+                             Component currentFocusOwner = manager.getGlobalPermanentFocusOwner ();
+                             if (currentFocusOwner != null)
+                               {
+                                 eq.postEvent (new FocusEvent(currentFocusOwner, FocusEvent.FOCUS_LOST,
+                                                              temporary, this));
+                                 eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary,
+                                                              currentFocusOwner));
+                               }
+                             else
+                               eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary));
+                           }
+                       }
+                   }
+                 else
+                   return false;
+               }
+           }
+ 
+         return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Transfers focus to the next component in the focus traversal
+    * order, as though this were the current focus owner.
+    *
+    * @see #requestFocus()
+    * @since 1.1
+    */
+   public void transferFocus ()
+   {
+     nextFocus ();
+   }
+ 
+   /**
+    * Returns the root container that owns the focus cycle where this
+    * component resides. A focus cycle root is in two cycles, one as
+    * the ancestor, and one as the focusable element; this call always
+    * returns the ancestor.
+    *
+    * @return the ancestor container that owns the focus cycle
+    * @since 1.4
+    */
+   public Container getFocusCycleRootAncestor ()
+   {
+     if (this instanceof Window
+ 	&& ((Container) this).isFocusCycleRoot ())
+       return (Container) this;
+ 
+     Container parent = getParent ();
+ 
+     while (parent != null
+ 	   && !parent.isFocusCycleRoot ())
+       parent = parent.getParent ();
+ 
+     return parent;
+   }
+ 
+   /**
+    * Tests if the container is the ancestor of the focus cycle that
+    * this component belongs to.
+    *
+    * @param c the container to test
+    * @return true if c is the focus cycle root
+    * @since 1.4
+    */
+   public boolean isFocusCycleRoot (Container c)
+   {
+     return c == getFocusCycleRootAncestor ();
+   }
+ 
+   /**
+    * AWT 1.0 focus event processor.  Transfers focus to the next
+    * component in the focus traversal order, as though this were the
+    * current focus owner.
+    *
+    * @deprecated use {@link #transferFocus ()} instead
+    */
+   public void nextFocus ()
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ 
+     manager.focusNextComponent (this);
+   }
+ 
+   /**
+    * Transfers focus to the previous component in the focus traversal
+    * order, as though this were the current focus owner.
+    *
+    * @see #requestFocus ()
+    * @since 1.4
+    */
+   public void transferFocusBackward ()
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ 
+     manager.focusPreviousComponent (this);
+   }
+ 
+   /**
+    * Transfers focus to the focus cycle root of this component.
+    * However, if this is a Window, the default focus owner in the
+    * window in the current focus cycle is focused instead.
+    *
+    * @see #requestFocus()
+    * @see #isFocusCycleRoot(Container)
+    * @since 1.4
+    */
+   public void transferFocusUpCycle ()
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ 
+     manager.upFocusCycle (this);
+   }
+ 
+   /**
+    * Tests if this component is the focus owner. Use {@link
+    * #isFocusOwner ()} instead.
+    *
+    * @return true if this component owns focus
+    * @since 1.2
+    */
+   public boolean hasFocus ()
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ 
+     Component focusOwner = manager.getFocusOwner ();
+ 
+     return this == focusOwner;
+   }
+ 
+   /**
+    * Tests if this component is the focus owner.
+    *
+    * @return true if this component owns focus
+    * @since 1.4
+    */
+   public boolean isFocusOwner()
+   {
+     return hasFocus ();
+   }
+ 
+   /**
+    * Adds the specified popup menu to this component.
+    *
+    * @param popup the popup menu to be added
+    * 
+    * @see #remove(MenuComponent)
+    * 
+    * @since 1.1
+    */
+   public synchronized void add(PopupMenu popup)
+   {
+     if (popups == null)
+       popups = new Vector();
+     popups.add(popup);
+ 
+     if (popup.parent != null)
+       popup.parent.remove(popup);
+     popup.parent = this;
+     if (peer != null)
+       popup.addNotify();
+   }
+ 
+   /**
+    * Removes the specified popup menu from this component.
+    *
+    * @param popup the popup menu to remove
+    * @see #add(PopupMenu)
+    * @since 1.1
+    */
+   public synchronized void remove(MenuComponent popup)
+   {
+     if (popups != null)
+       popups.remove(popup);
+   }
+ 
+   /**
+    * Returns a debugging string representing this component. The string may
+    * be empty but not null.
+    *
+    * @return a string representing this component
+    */
+   protected String paramString()
+   {
+     StringBuffer param = new StringBuffer();
+     String name = getName();
+     if (name != null)
+       param.append(name).append(",");
+     param.append(x).append(",").append(y).append(",").append(width)
+       .append("x").append(height);
+     if (! isValid())
+       param.append(",invalid");
+     if (! isVisible())
+       param.append(",invisible");
+     if (! isEnabled())
+       param.append(",disabled");
+     if (! isOpaque())
+       param.append(",translucent");
+     if (isDoubleBuffered())
+       param.append(",doublebuffered");
+     if (parent == null)
+       param.append(",parent=null");
+     else
+       param.append(",parent=").append(parent.getName());
+     return param.toString();
+   }
+ 
+   /**
+    * Returns a string representation of this component. This is implemented
+    * as <code>getClass().getName() + '[' + paramString() + ']'</code>.
+    *
+    * @return a string representation of this component
+    */
+   public String toString()
+   {
+     return getClass().getName() + '[' + paramString() + ']';
+   }
+ 
+   /**
+    * Prints a listing of this component to <code>System.out</code>.
+    *
+    * @see #list(PrintStream)
+    */
+   public void list()
+   {
+     list(System.out, 0);
+   }
+ 
+   /**
+    * Prints a listing of this component to the specified print stream.
+    *
+    * @param out the <code>PrintStream</code> to print to
+    */
+   public void list(PrintStream out)
+   {
+     list(out, 0);
+   }
+ 
+   /**
+    * Prints a listing of this component to the specified print stream,
+    * starting at the specified indentation point.
+    *
+    * @param out the <code>PrintStream</code> to print to
+    * @param indent the indentation point
+    */
+   public void list(PrintStream out, int indent)
+   {
+     for (int i = 0; i < indent; ++i)
+       out.print(' ');
+     out.println(toString());
+   }
+ 
+   /**
+    * Prints a listing of this component to the specified print writer.
+    *
+    * @param out the <code>PrintWrinter</code> to print to
+    * @since 1.1
+    */
+   public void list(PrintWriter out)
+   {
+     list(out, 0);
+   }
+ 
+   /**
+    * Prints a listing of this component to the specified print writer,
+    * starting at the specified indentation point.
+    *
+    * @param out the <code>PrintWriter</code> to print to
+    * @param indent the indentation point
+    * @since 1.1
+    */
+   public void list(PrintWriter out, int indent)
+   {
+     for (int i = 0; i < indent; ++i)
+       out.print(' ');
+     out.println(toString());
+   }
+ 
+   /**
+    * Adds the specified property listener to this component. This is harmless
+    * if the listener is null, but if the listener has already been registered,
+    * it will now be registered twice. The property listener ignores inherited
+    * properties. Recognized properties include:<br>
+    * <ul>
+    * <li>the font (<code>"font"</code>)</li>
+    * <li>the background color (<code>"background"</code>)</li>
+    * <li>the foreground color (<code>"foreground"</code>)</li>
+    * <li>the focusability (<code>"focusable"</code>)</li>
+    * <li>the focus key traversal enabled state
+    *     (<code>"focusTraversalKeysEnabled"</code>)</li>
+    * <li>the set of forward traversal keys
+    *     (<code>"forwardFocusTraversalKeys"</code>)</li>
+    * <li>the set of backward traversal keys
+    *     (<code>"backwardFocusTraversalKeys"</code>)</li>
+    * <li>the set of up-cycle traversal keys
+    *     (<code>"upCycleFocusTraversalKeys"</code>)</li>
+    * </ul>
+    *
+    * @param listener the new listener to add
+    * @see #removePropertyChangeListener(PropertyChangeListener)
+    * @see #getPropertyChangeListeners()
+    * @see #addPropertyChangeListener(String, PropertyChangeListener)
+    * @since 1.1
+    */
+   public void addPropertyChangeListener(PropertyChangeListener listener)
+   {
+     if (changeSupport == null)
+       changeSupport = new PropertyChangeSupport(this);
+     changeSupport.addPropertyChangeListener(listener);
+   }
+ 
+   /**
+    * Removes the specified property listener from the component. This is
+    * harmless if the listener was not previously registered.
+    *
+    * @param listener the listener to remove
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    * @see #getPropertyChangeListeners()
+    * @see #removePropertyChangeListener(String, PropertyChangeListener)
+    * @since 1.1
+    */
+   public void removePropertyChangeListener(PropertyChangeListener listener)
+   {
+     if (changeSupport != null)
+       changeSupport.removePropertyChangeListener(listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    * @see #removePropertyChangeListener(PropertyChangeListener)
+    * @see #getPropertyChangeListeners(String)
+    * @since 1.4
+    */
+   public PropertyChangeListener[] getPropertyChangeListeners()
+   {
+     return changeSupport == null ? new PropertyChangeListener[0]
+       : changeSupport.getPropertyChangeListeners();
+   }
+ 
+   /**
+    * Adds the specified property listener to this component. This is harmless
+    * if the listener is null, but if the listener has already been registered,
+    * it will now be registered twice. The property listener ignores inherited
+    * properties. The listener is keyed to a single property. Recognized
+    * properties include:<br>
+    * <ul>
+    * <li>the font (<code>"font"</code>)</li>
+    * <li>the background color (<code>"background"</code>)</li>
+    * <li>the foreground color (<code>"foreground"</code>)</li>
+    * <li>the focusability (<code>"focusable"</code>)</li>
+    * <li>the focus key traversal enabled state
+    *     (<code>"focusTraversalKeysEnabled"</code>)</li>
+    * <li>the set of forward traversal keys
+    *     (<code>"forwardFocusTraversalKeys"</code>)</li>
+ p   * <li>the set of backward traversal keys
+    *     (<code>"backwardFocusTraversalKeys"</code>)</li>
+    * <li>the set of up-cycle traversal keys
+    *     (<code>"upCycleFocusTraversalKeys"</code>)</li>
+    * </ul>
+    *
+    * @param propertyName the property name to filter on
+    * @param listener the new listener to add
+    * @see #removePropertyChangeListener(String, PropertyChangeListener)
+    * @see #getPropertyChangeListeners(String)
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    * @since 1.1
+    */
+   public void addPropertyChangeListener(String propertyName,
+                                         PropertyChangeListener listener)
+   {
+     if (changeSupport == null)
+       changeSupport = new PropertyChangeSupport(this);
+     changeSupport.addPropertyChangeListener(propertyName, listener);
+   }
+ 
+   /**
+    * Removes the specified property listener on a particular property from
+    * the component. This is harmless if the listener was not previously
+    * registered.
+    *
+    * @param propertyName the property name to filter on
+    * @param listener the listener to remove
+    * @see #addPropertyChangeListener(String, PropertyChangeListener)
+    * @see #getPropertyChangeListeners(String)
+    * @see #removePropertyChangeListener(PropertyChangeListener)
+    * @since 1.1
+    */
+   public void removePropertyChangeListener(String propertyName,
+                                            PropertyChangeListener listener)
+   {
+     if (changeSupport != null)
+       changeSupport.removePropertyChangeListener(propertyName, listener);
+   }
+ 
+   /**
+    * Returns an array of all specified listeners on the named property that
+    * are registered on this component.
+    *
+    * @return an array of listeners
+    * @see #addPropertyChangeListener(String, PropertyChangeListener)
+    * @see #removePropertyChangeListener(String, PropertyChangeListener)
+    * @see #getPropertyChangeListeners()
+    * @since 1.4
+    */
+   public PropertyChangeListener[] getPropertyChangeListeners(String property)
+   {
+     return changeSupport == null ? new PropertyChangeListener[0]
+       : changeSupport.getPropertyChangeListeners(property);
+   }
+ 
+   /**
+    * Report a change in a bound property to any registered property listeners.
+    *
+    * @param propertyName the property that changed
+    * @param oldValue the old property value
+    * @param newValue the new property value
+    */
+   protected void firePropertyChange(String propertyName, Object oldValue,
+                                     Object newValue)
+   {
+     if (changeSupport != null)
+       changeSupport.firePropertyChange(propertyName, oldValue, newValue);
+   }
+ 
+   /**
+    * Report a change in a bound property to any registered property listeners.
+    *
+    * @param propertyName the property that changed
+    * @param oldValue the old property value
+    * @param newValue the new property value
+    */
+   protected void firePropertyChange(String propertyName, boolean oldValue,
+                                     boolean newValue)
+   {
+     if (changeSupport != null)
+       changeSupport.firePropertyChange(propertyName, oldValue, newValue);
+   }
+ 
+   /**
+    * Report a change in a bound property to any registered property listeners.
+    *
+    * @param propertyName the property that changed
+    * @param oldValue the old property value
+    * @param newValue the new property value
+    */
+   protected void firePropertyChange(String propertyName, int oldValue,
+                                     int newValue)
+   {
+     if (changeSupport != null)
+       changeSupport.firePropertyChange(propertyName, oldValue, newValue);
+   }
+ 
+   /**
+    * Sets the text layout orientation of this component. New components default
+    * to UNKNOWN (which behaves like LEFT_TO_RIGHT). This method affects only
+    * the current component, while
+    * {@link #applyComponentOrientation(ComponentOrientation)} affects the
+    * entire hierarchy.
+    *
+    * @param o the new orientation
+    * @throws NullPointerException if o is null
+    * @see #getComponentOrientation()
+    */
+   public void setComponentOrientation(ComponentOrientation o)
+   {
+     if (o == null)
+       throw new NullPointerException();
+     ComponentOrientation oldOrientation = orientation;
+     orientation = o;
+     firePropertyChange("componentOrientation", oldOrientation, o);
+   }
+ 
+   /**
+    * Determines the text layout orientation used by this component.
+    *
+    * @return the component orientation
+    * @see #setComponentOrientation(ComponentOrientation)
+    */
+   public ComponentOrientation getComponentOrientation()
+   {
+     return orientation;
+   }
+ 
+   /**
+    * Sets the text layout orientation of this component. New components default
+    * to UNKNOWN (which behaves like LEFT_TO_RIGHT). This method affects the
+    * entire hierarchy, while
+    * {@link #setComponentOrientation(ComponentOrientation)} affects only the
+    * current component.
+    *
+    * @param o the new orientation
+    * @throws NullPointerException if o is null
+    * @see #getComponentOrientation()
+    * @since 1.4
+    */
+   public void applyComponentOrientation(ComponentOrientation o)
+   {
+     setComponentOrientation(o);
+   }
+ 
+   /**
+    * Returns the accessibility framework context of this class. Component is
+    * not accessible, so the default implementation returns null. Subclasses
+    * must override this behavior, and return an appropriate subclass of
+    * {@link AccessibleAWTComponent}.
+    *
+    * @return the accessibility context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     return null;
+   }
+ 
+ 
+   // Helper methods; some are package visible for use by subclasses.
+ 
+   /**
+    * Subclasses should override this to return unique component names like
+    * "menuitem0".
+    *
+    * @return the generated name for this component
+    */
+   String generateName()
+   {
+     // Component is abstract.
+     return null;
+   }
+ 
+   /**
+    * Sets the peer for this component.
+    *
+    * @param peer the new peer
+    */
+   final void setPeer(ComponentPeer peer)
+   {
+     this.peer = peer;
+   }
+ 
+   /**
+    * Implementation method that allows classes such as Canvas and Window to
+    * override the graphics configuration without violating the published API.
+    *
+    * @return the graphics configuration
+    */
+   GraphicsConfiguration getGraphicsConfigurationImpl()
+   {
+     if (peer != null)
+       {
+         GraphicsConfiguration config = peer.getGraphicsConfiguration();
+         if (config != null)
+           return config;
+       }
+ 
+     if (parent != null)
+       return parent.getGraphicsConfiguration();
+ 
+     return null;
+   }
+ 
+   /**
+    * Translate an AWT 1.1 event ({@link AWTEvent}) into an AWT 1.0
+    * event ({@link Event}).
+    *
+    * @param e an AWT 1.1 event to translate
+    *
+    * @return an AWT 1.0 event representing e
+    */
+   static Event translateEvent (AWTEvent e)
+   {
+     Component target = (Component) e.getSource ();
+     Event translated = null;
+ 
+     if (e instanceof InputEvent)
+       {
+         InputEvent ie = (InputEvent) e;
+         long when = ie.getWhen ();
+ 
+         int oldID = 0;
+         int id = e.getID ();
+ 
+         int oldMods = 0;
+         int mods = ie.getModifiersEx ();
+ 
+         if ((mods & InputEvent.BUTTON2_DOWN_MASK) != 0)
+           oldMods |= Event.META_MASK;
+         else if ((mods & InputEvent.BUTTON3_DOWN_MASK) != 0)
+           oldMods |= Event.ALT_MASK;
+ 
+         if ((mods & InputEvent.SHIFT_DOWN_MASK) != 0)
+           oldMods |= Event.SHIFT_MASK;
+ 
+         if ((mods & InputEvent.CTRL_DOWN_MASK) != 0)
+           oldMods |= Event.CTRL_MASK;
+ 
+         if ((mods & InputEvent.META_DOWN_MASK) != 0)
+           oldMods |= Event.META_MASK;
+ 
+         if ((mods & InputEvent.ALT_DOWN_MASK) != 0)
+           oldMods |= Event.ALT_MASK;
+ 
+         if (e instanceof MouseEvent)
+           {
+             if (id == MouseEvent.MOUSE_PRESSED)
+               oldID = Event.MOUSE_DOWN;
+             else if (id == MouseEvent.MOUSE_RELEASED)
+               oldID = Event.MOUSE_UP;
+             else if (id == MouseEvent.MOUSE_MOVED)
+               oldID = Event.MOUSE_MOVE;
+             else if (id == MouseEvent.MOUSE_DRAGGED)
+               oldID = Event.MOUSE_DRAG;
+             else if (id == MouseEvent.MOUSE_ENTERED)
+               oldID = Event.MOUSE_ENTER;
+             else if (id == MouseEvent.MOUSE_EXITED)
+               oldID = Event.MOUSE_EXIT;
+             else
+               // No analogous AWT 1.0 mouse event.
+               return null;
+ 
+             MouseEvent me = (MouseEvent) e;
+ 
+             translated = new Event (target, when, oldID,
+                                     me.getX (), me.getY (), 0, oldMods);
+           }
+         else if (e instanceof KeyEvent)
+           {
+             if (id == KeyEvent.KEY_PRESSED)
+               oldID = Event.KEY_PRESS;
+             else if (e.getID () == KeyEvent.KEY_RELEASED)
+               oldID = Event.KEY_RELEASE;
+             else
+               // No analogous AWT 1.0 key event.
+               return null;
+ 
+             int oldKey = 0;
+             int newKey = ((KeyEvent) e).getKeyCode ();
+             switch (newKey)
+               {
+               case KeyEvent.VK_BACK_SPACE:
+                 oldKey = Event.BACK_SPACE;
+                 break;
+               case KeyEvent.VK_CAPS_LOCK:
+                 oldKey = Event.CAPS_LOCK;
+                 break;
+               case KeyEvent.VK_DELETE:
+                 oldKey = Event.DELETE;
+                 break;
+               case KeyEvent.VK_DOWN:
+               case KeyEvent.VK_KP_DOWN:
+                 oldKey = Event.DOWN;
+                 break;
+               case KeyEvent.VK_END:
+                 oldKey = Event.END;
+                 break;
+               case KeyEvent.VK_ENTER:
+                 oldKey = Event.ENTER;
+                 break;
+               case KeyEvent.VK_ESCAPE:
+                 oldKey = Event.ESCAPE;
+                 break;
+               case KeyEvent.VK_F1:
+                 oldKey = Event.F1;
+                 break;
+               case KeyEvent.VK_F10:
+                 oldKey = Event.F10;
+                 break;
+               case KeyEvent.VK_F11:
+                 oldKey = Event.F11;
+                 break;
+               case KeyEvent.VK_F12:
+                 oldKey = Event.F12;
+                 break;
+               case KeyEvent.VK_F2:
+                 oldKey = Event.F2;
+                 break;
+               case KeyEvent.VK_F3:
+                 oldKey = Event.F3;
+                 break;
+               case KeyEvent.VK_F4:
+                 oldKey = Event.F4;
+                 break;
+               case KeyEvent.VK_F5:
+                 oldKey = Event.F5;
+                 break;
+               case KeyEvent.VK_F6:
+                 oldKey = Event.F6;
+                 break;
+               case KeyEvent.VK_F7:
+                 oldKey = Event.F7;
+                 break;
+               case KeyEvent.VK_F8:
+                 oldKey = Event.F8;
+                 break;
+               case KeyEvent.VK_F9:
+                 oldKey = Event.F9;
+                 break;
+               case KeyEvent.VK_HOME:
+                 oldKey = Event.HOME;
+                 break;
+               case KeyEvent.VK_INSERT:
+                 oldKey = Event.INSERT;
+                 break;
+               case KeyEvent.VK_LEFT:
+               case KeyEvent.VK_KP_LEFT:
+                 oldKey = Event.LEFT;
+                 break;
+               case KeyEvent.VK_NUM_LOCK:
+                 oldKey = Event.NUM_LOCK;
+                 break;
+               case KeyEvent.VK_PAUSE:
+                 oldKey = Event.PAUSE;
+                 break;
+               case KeyEvent.VK_PAGE_DOWN:
+                 oldKey = Event.PGDN;
+                 break;
+               case KeyEvent.VK_PAGE_UP:
+                 oldKey = Event.PGUP;
+                 break;
+               case KeyEvent.VK_PRINTSCREEN:
+                 oldKey = Event.PRINT_SCREEN;
+                 break;
+               case KeyEvent.VK_RIGHT:
+               case KeyEvent.VK_KP_RIGHT:
+                 oldKey = Event.RIGHT;
+                 break;
+               case KeyEvent.VK_SCROLL_LOCK:
+                 oldKey = Event.SCROLL_LOCK;
+                 break;
+               case KeyEvent.VK_TAB:
+                 oldKey = Event.TAB;
+                 break;
+               case KeyEvent.VK_UP:
+               case KeyEvent.VK_KP_UP:
+                 oldKey = Event.UP;
+                 break;
+               default:
+                 oldKey = newKey;
+               }
+ 
+             translated = new Event (target, when, oldID,
+                                     0, 0, oldKey, oldMods);
+           }
+       }
+     else if (e instanceof ActionEvent)
+       translated = new Event (target, Event.ACTION_EVENT,
+                               ((ActionEvent) e).getActionCommand ());
+ 
+     return translated;
+   }
+ 
+   /**
+    * Implementation of dispatchEvent. Allows trusted package classes
+    * to dispatch additional events first.  This implementation first
+    * translates <code>e</code> to an AWT 1.0 event and sends the
+    * result to {@link #postEvent}.  If the AWT 1.0 event is not
+    * handled, and events of type <code>e</code> are enabled for this
+    * component, e is passed on to {@link #processEvent}.
+    *
+    * @param e the event to dispatch
+    */
+ 
+   void dispatchEventImpl(AWTEvent e)
+   {
+     Event oldEvent = translateEvent (e);
+ 
+     if (oldEvent != null)
+       postEvent (oldEvent);
+ 
+     if (eventTypeEnabled (e.id))
+       {
+         // the trick we use to communicate between dispatch and redispatch
+         // is to have KeyboardFocusManager.redispatch synchronize on the
+         // object itself. we then do not redispatch to KeyboardFocusManager
+         // if we are already holding the lock.
+         if (! Thread.holdsLock(e))
+           {
+             switch (e.id)
+               {
+               case WindowEvent.WINDOW_GAINED_FOCUS:
+               case WindowEvent.WINDOW_LOST_FOCUS:
+               case KeyEvent.KEY_PRESSED:
+               case KeyEvent.KEY_RELEASED:
+               case KeyEvent.KEY_TYPED:
+               case FocusEvent.FOCUS_GAINED:
+               case FocusEvent.FOCUS_LOST:
+                 if (KeyboardFocusManager
+                     .getCurrentKeyboardFocusManager()
+                     .dispatchEvent(e))
+                     return;
+               case MouseEvent.MOUSE_PRESSED:
+                 if (isLightweight())
+                   requestFocus();
+                 break;
+               }
+           }
+         if (e.id != PaintEvent.PAINT && e.id != PaintEvent.UPDATE)
+           processEvent(e);
+       }
+ 
+     if (peer != null)
+       peer.handleEvent(e);
+   }
+ 
+   /**
+    * Tells whether or not an event type is enabled.
+    */
+   boolean eventTypeEnabled (int type)
+   {
+     if (type > AWTEvent.RESERVED_ID_MAX)
+       return true;
+ 
+     switch (type)
+       {
+       case ComponentEvent.COMPONENT_HIDDEN:
+       case ComponentEvent.COMPONENT_MOVED:
+       case ComponentEvent.COMPONENT_RESIZED:
+       case ComponentEvent.COMPONENT_SHOWN:
+         return (componentListener != null
+                 || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0);
+ 
+       case KeyEvent.KEY_PRESSED:
+       case KeyEvent.KEY_RELEASED:
+       case KeyEvent.KEY_TYPED:
+         return (keyListener != null
+                 || (eventMask & AWTEvent.KEY_EVENT_MASK) != 0);
+ 
+       case MouseEvent.MOUSE_CLICKED:
+       case MouseEvent.MOUSE_ENTERED:
+       case MouseEvent.MOUSE_EXITED:
+       case MouseEvent.MOUSE_PRESSED:
+       case MouseEvent.MOUSE_RELEASED:
+       case MouseEvent.MOUSE_MOVED:
+       case MouseEvent.MOUSE_DRAGGED:
+         return (mouseListener != null
+                 || mouseMotionListener != null
+                 || (eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0);
+         
+       case FocusEvent.FOCUS_GAINED:
+       case FocusEvent.FOCUS_LOST:
+         return (focusListener != null
+                 || (eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0);
+ 
+       case InputMethodEvent.INPUT_METHOD_TEXT_CHANGED:
+       case InputMethodEvent.CARET_POSITION_CHANGED:
+         return (inputMethodListener != null
+                 || (eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0);
+         
+       case PaintEvent.PAINT:
+       case PaintEvent.UPDATE:
+         return (eventMask & AWTEvent.PAINT_EVENT_MASK) != 0;
+         
+       default:
+         return false;
+       }
+   }
+ 
+   /**
+    * Coalesce paint events. Current heuristic is: Merge if the union of
+    * areas is less than twice that of the sum of the areas. The X server
+    * tend to create a lot of paint events that are adjacent but not
+    * overlapping.
+    *
+    * <pre>
+    * +------+
+    * |      +-----+  ...will be merged
+    * |      |     |
+    * |      |     |
+    * +------+     |
+    *        +-----+
+    *
+    * +---------------+--+
+    * |               |  |  ...will not be merged
+    * +---------------+  |
+    *                 |  |
+    *                 |  |
+    *                 |  |
+    *                 |  |
+    *                 |  |
+    *                 +--+
+    * </pre>
+    *
+    * @param queuedEvent the first paint event
+    * @param newEvent the second paint event
+    * @return the combined paint event, or null
+    */
+   private PaintEvent coalescePaintEvents(PaintEvent queuedEvent,
+                                          PaintEvent newEvent)
+   {
+     Rectangle r1 = queuedEvent.getUpdateRect();
+     Rectangle r2 = newEvent.getUpdateRect();
+     Rectangle union = r1.union(r2);
+ 
+     int r1a = r1.width * r1.height;
+     int r2a = r2.width * r2.height;
+     int ua  = union.width * union.height;
+ 
+     if (ua > (r1a+r2a)*2)
+       return null;
+     /* The 2 factor should maybe be reconsidered. Perhaps 3/2
+        would be better? */
+ 
+     newEvent.setUpdateRect(union);
+     return newEvent;
+   }
+ 
+   /**
+    * This method is used to implement transferFocus(). CHILD is the child
+    * making the request. This is overridden by Container; when called for an
+    * ordinary component there is no child and so we always return null.
+    *
+    * FIXME: is this still needed, in light of focus traversal policies?
+    *
+    * @param child the component making the request
+    * @return the next component to focus on
+    */
+   Component findNextFocusComponent(Component child)
+   {
+     return null;
+   }
+ 
+   /**
+    * Deserializes this component. This regenerates all serializable listeners
+    * which were registered originally.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if deserialization fails
+    * @throws IOException if the stream fails
+    */
+   private void readObject(ObjectInputStream s)
+     throws ClassNotFoundException, IOException
+   {
+     s.defaultReadObject();
+     String key = (String) s.readObject();
+     while (key != null)
+       {
+         Object listener = s.readObject();
+         if ("componentL".equals(key))
+           addComponentListener((ComponentListener) listener);
+         else if ("focusL".equals(key))
+           addFocusListener((FocusListener) listener);
+         else if ("keyL".equals(key))
+           addKeyListener((KeyListener) listener);
+         else if ("mouseL".equals(key))
+           addMouseListener((MouseListener) listener);
+         else if ("mouseMotionL".equals(key))
+           addMouseMotionListener((MouseMotionListener) listener);
+         else if ("inputMethodL".equals(key))
+           addInputMethodListener((InputMethodListener) listener);
+         else if ("hierarchyL".equals(key))
+           addHierarchyListener((HierarchyListener) listener);
+         else if ("hierarchyBoundsL".equals(key))
+           addHierarchyBoundsListener((HierarchyBoundsListener) listener);
+         else if ("mouseWheelL".equals(key))
+           addMouseWheelListener((MouseWheelListener) listener);
+         key = (String) s.readObject();
+       }
+   }
+ 
+   /**
+    * Serializes this component. This ignores all listeners which do not
+    * implement Serializable, but includes those that do.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the stream fails
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     s.defaultWriteObject();
+     AWTEventMulticaster.save(s, "componentL", componentListener);
+     AWTEventMulticaster.save(s, "focusL", focusListener);
+     AWTEventMulticaster.save(s, "keyL", keyListener);
+     AWTEventMulticaster.save(s, "mouseL", mouseListener);
+     AWTEventMulticaster.save(s, "mouseMotionL", mouseMotionListener);
+     AWTEventMulticaster.save(s, "inputMethodL", inputMethodListener);
+     AWTEventMulticaster.save(s, "hierarchyL", hierarchyListener);
+     AWTEventMulticaster.save(s, "hierarchyBoundsL", hierarchyBoundsListener);
+     AWTEventMulticaster.save(s, "mouseWheelL", mouseWheelListener);
+     s.writeObject(null);
+   }
+ 
+ 
+   // Nested classes.
+ 
+   /**
+    * This class provides accessibility support for subclasses of container.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.3
+    * @status updated to 1.4
+    */
+   protected abstract class AccessibleAWTComponent extends AccessibleContext
+     implements Serializable, AccessibleComponent
+   {
+     /**
+      * Compatible with JDK 1.3+.
+      */
+     private static final long serialVersionUID = 642321655757800191L;
+ 
+     /**
+      * Converts show/hide events to PropertyChange events, and is registered
+      * as a component listener on this component.
+      *
+      * @serial the component handler
+      */
+     protected ComponentListener accessibleAWTComponentHandler
+       = new AccessibleAWTComponentHandler();
+ 
+     /**
+      * Converts focus events to PropertyChange events, and is registered
+      * as a focus listener on this component.
+      *
+      * @serial the focus handler
+      */
+     protected FocusListener accessibleAWTFocusHandler
+       = new AccessibleAWTFocusHandler();
+ 
+     /**
+      * The default constructor.
+      */
+     protected AccessibleAWTComponent()
+     {
+       Component.this.addComponentListener(accessibleAWTComponentHandler);
+       Component.this.addFocusListener(accessibleAWTFocusHandler);
+     }
+ 
+     /**
+      * Adds a global property change listener to the accessible component.
+      *
+      * @param l the listener to add
+      * @see #ACCESSIBLE_NAME_PROPERTY
+      * @see #ACCESSIBLE_DESCRIPTION_PROPERTY
+      * @see #ACCESSIBLE_STATE_PROPERTY
+      * @see #ACCESSIBLE_VALUE_PROPERTY
+      * @see #ACCESSIBLE_SELECTION_PROPERTY
+      * @see #ACCESSIBLE_TEXT_PROPERTY
+      * @see #ACCESSIBLE_VISIBLE_DATA_PROPERTY
+      */
+     public void addPropertyChangeListener(PropertyChangeListener l)
+     {
+       Component.this.addPropertyChangeListener(l);
+       super.addPropertyChangeListener(l);
+     }
+ 
+     /**
+      * Removes a global property change listener from this accessible
+      * component.
+      *
+      * @param l the listener to remove
+      */
+     public void removePropertyChangeListener(PropertyChangeListener l)
+     {
+       Component.this.removePropertyChangeListener(l);
+       super.removePropertyChangeListener(l);
+     }
+ 
+     /**
+      * Returns the accessible name of this component. It is almost always
+      * wrong to return getName(), since it is not localized. In fact, for
+      * things like buttons, this should be the text of the button, not the
+      * name of the object. The tooltip text might also be appropriate.
+      *
+      * @return the name
+      * @see #setAccessibleName(String)
+      */
+     public String getAccessibleName()
+     {
+       return accessibleName == null ? getName() : accessibleName;
+     }
+ 
+     /**
+      * Returns a brief description of this accessible context. This should
+      * be localized.
+      *
+      * @return a description of this component
+      * @see #setAccessibleDescription(String)
+      */
+     public String getAccessibleDescription()
+     {
+       return accessibleDescription;
+     }
+ 
+     /**
+      * Returns the role of this component.
+      *
+      * @return the accessible role
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.AWT_COMPONENT;
+     }
+ 
+     /**
+      * Returns a state set describing this component's state.
+      *
+      * @return a new state set
+      * @see AccessibleState
+      */
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       AccessibleStateSet s = new AccessibleStateSet();
+       if (Component.this.isEnabled())
+         s.add(AccessibleState.ENABLED);
+       if (isFocusable())
+         s.add(AccessibleState.FOCUSABLE);
+       if (isFocusOwner())
+         s.add(AccessibleState.FOCUSED);
+       if (isOpaque())
+         s.add(AccessibleState.OPAQUE);
+       if (Component.this.isShowing())
+         s.add(AccessibleState.SHOWING);
+       if (Component.this.isVisible())
+         s.add(AccessibleState.VISIBLE);
+       return s;
+     }
+ 
+     /**
+      * Returns the parent of this component, if it is accessible.
+      *
+      * @return the accessible parent
+      */
+     public Accessible getAccessibleParent()
+     {
+       if (accessibleParent == null)
+         {
+           Container parent = getParent();
+           accessibleParent = parent instanceof Accessible
+             ? (Accessible) parent : null;
+         }
+       return accessibleParent;
+     }
+ 
+     /**
+      * Returns the index of this component in its accessible parent.
+      *
+      * @return the index, or -1 if the parent is not accessible
+      * @see #getAccessibleParent()
+      */
+     public int getAccessibleIndexInParent()
+     {
+       if (getAccessibleParent() == null)
+         return -1;
+       AccessibleContext context
+         = ((Component) accessibleParent).getAccessibleContext();
+       if (context == null)
+         return -1;
+       for (int i = context.getAccessibleChildrenCount(); --i >= 0; )
+         if (context.getAccessibleChild(i) == Component.this)
+           return i;
+       return -1;
+     }
+ 
+     /**
+      * Returns the number of children of this component which implement
+      * Accessible. Subclasses must override this if they can have children.
+      *
+      * @return the number of accessible children, default 0
+      */
+     public int getAccessibleChildrenCount()
+     {
+       return 0;
+     }
+ 
+     /**
+      * Returns the ith accessible child. Subclasses must override this if
+      * they can have children.
+      *
+      * @return the ith accessible child, or null
+      * @see #getAccessibleChildrenCount()
+      */
+     public Accessible getAccessibleChild(int i)
+     {
+       return null;
+     }
+ 
+     /**
+      * Returns the locale of this component.
+      *
+      * @return the locale
+      * @throws IllegalComponentStateException if the locale is unknown
+      */
+     public Locale getLocale()
+     {
+       return Component.this.getLocale();
+     }
+ 
+     /**
+      * Returns this, since it is an accessible component.
+      *
+      * @return the accessible component
+      */
+     public AccessibleComponent getAccessibleComponent()
+     {
+       return this;
+     }
+ 
+     /**
+      * Gets the background color.
+      *
+      * @return the background color
+      * @see #setBackground(Color)
+      */
+     public Color getBackground()
+     {
+       return Component.this.getBackground();
+     }
+ 
+     /**
+      * Sets the background color.
+      *
+      * @param c the background color
+      * @see #getBackground()
+      * @see #isOpaque()
+      */
+     public void setBackground(Color c)
+     {
+       Component.this.setBackground(c);
+     }
+ 
+     /**
+      * Gets the foreground color.
+      *
+      * @return the foreground color
+      * @see #setForeground(Color)
+      */
+     public Color getForeground()
+     {
+       return Component.this.getForeground();
+     }
+ 
+     /**
+      * Sets the foreground color.
+      *
+      * @param c the foreground color
+      * @see #getForeground()
+      */
+     public void setForeground(Color c)
+     {
+       Component.this.setForeground(c);
+     }
+ 
+     /**
+      * Gets the cursor.
+      *
+      * @return the cursor
+      * @see #setCursor(Cursor)
+      */
+     public Cursor getCursor()
+     {
+       return Component.this.getCursor();
+     }
+ 
+     /**
+      * Sets the cursor.
+      *
+      * @param cursor the cursor
+      * @see #getCursor()
+      */
+     public void setCursor(Cursor cursor)
+     {
+       Component.this.setCursor(cursor);
+     }
+ 
+     /**
+      * Gets the font.
+      *
+      * @return the font
+      * @see #setFont(Font)
+      */
+     public Font getFont()
+     {
+       return Component.this.getFont();
+     }
+ 
+     /**
+      * Sets the font.
+      *
+      * @param f the font
+      * @see #getFont()
+      */
+     public void setFont(Font f)
+     {
+       Component.this.setFont(f);
+     }
+ 
+     /**
+      * Gets the font metrics for a font.
+      *
+      * @param f the font to look up
+      * @return its metrics
+      * @throws NullPointerException if f is null
+      * @see #getFont()
+      */
+     public FontMetrics getFontMetrics(Font f)
+     {
+       return Component.this.getFontMetrics(f);
+     }
+ 
+     /**
+      * Tests if the component is enabled.
+      *
+      * @return true if the component is enabled
+      * @see #setEnabled(boolean)
+      * @see #getAccessibleStateSet()
+      * @see AccessibleState#ENABLED
+      */
+     public boolean isEnabled()
+     {
+       return Component.this.isEnabled();
+     }
+ 
+     /**
+      * Set whether the component is enabled.
+      *
+      * @param b the new enabled status
+      * @see #isEnabled()
+      */
+     public void setEnabled(boolean b)
+     {
+       Component.this.setEnabled(b);
+     }
+ 
+     /**
+      * Test whether the component is visible (not necesarily showing).
+      *
+      * @return true if it is visible
+      * @see #setVisible(boolean)
+      * @see #getAccessibleStateSet()
+      * @see AccessibleState#VISIBLE
+      */
+     public boolean isVisible()
+     {
+       return Component.this.isVisible();
+     }
+ 
+     /**
+      * Sets the visibility of this component.
+      *
+      * @param b the desired visibility
+      * @see #isVisible()
+      */
+     public void setVisible(boolean b)
+     {
+       Component.this.setVisible(b);
+     }
+ 
+     /**
+      * Tests if the component is showing.
+      *
+      * @return true if this is showing
+      */
+     public boolean isShowing()
+     {
+       return Component.this.isShowing();
+     }
+ 
+     /**
+      * Tests if the point is contained in this component.
+      *
+      * @param p the point to check
+      * @return true if it is contained
+      * @throws NullPointerException if p is null
+      */
+     public boolean contains(Point p)
+     {
+       return Component.this.contains(p.x, p.y);
+     }
+ 
+     /**
+      * Returns the location of this object on the screen, or null if it is
+      * not showing.
+      *
+      * @return the location relative to screen coordinates, if showing
+      * @see #getBounds()
+      * @see #getLocation()
+      */
+     public Point getLocationOnScreen()
+     {
+       return Component.this.isShowing() ? Component.this.getLocationOnScreen()
+         : null;
+     }
+ 
+     /**
+      * Returns the location of this object relative to its parent's coordinate
+      * system, or null if it is not showing.
+      *
+      * @return the location
+      * @see #getBounds()
+      * @see #getLocationOnScreen()
+      */
+     public Point getLocation()
+     {
+       return Component.this.isShowing() ? Component.this.getLocation() : null;
+     }
+ 
+     /**
+      * Sets the location of this relative to its parent's coordinate system.
+      *
+      * @param p the location
+      * @throws NullPointerException if p is null
+      * @see #getLocation()
+      */
+     public void setLocation(Point p)
+     {
+       Component.this.setLocation(p.x, p.y);
+     }
+ 
+     /**
+      * Gets the bounds of this component, or null if it is not on screen.
+      *
+      * @return the bounds
+      * @see #contains(Point)
+      * @see #setBounds(Rectangle)
+      */
+     public Rectangle getBounds()
+     {
+       return Component.this.isShowing() ? Component.this.getBounds() : null;
+     }
+ 
+     /**
+      * Sets the bounds of this component.
+      *
+      * @param r the bounds
+      * @throws NullPointerException if r is null
+      * @see #getBounds()
+      */
+     public void setBounds(Rectangle r)
+     {
+       Component.this.setBounds(r.x, r.y, r.width, r.height);
+     }
+ 
+     /**
+      * Gets the size of this component, or null if it is not showing.
+      *
+      * @return the size
+      * @see #setSize(Dimension)
+      */
+     public Dimension getSize()
+     {
+       return Component.this.isShowing() ? Component.this.getSize() : null;
+     }
+ 
+     /**
+      * Sets the size of this component.
+      *
+      * @param d the size
+      * @throws NullPointerException if d is null
+      * @see #getSize()
+      */
+     public void setSize(Dimension d)
+     {
+       Component.this.setSize(d.width, d.height);
+     }
+ 
+     /**
+      * Returns the Accessible child at a point relative to the coordinate
+      * system of this component, if one exists, or null. Since components
+      * have no children, subclasses must override this to get anything besides
+      * null.
+      *
+      * @param p the point to check
+      * @return the accessible child at that point
+      * @throws NullPointerException if p is null
+      */
+     public Accessible getAccessibleAt(Point p)
+     {
+       return null;
+     }
+ 
+     /**
+      * Tests whether this component can accept focus.
+      *
+      * @return true if this is focus traversable
+      * @see #getAccessibleStateSet ()
+      * @see AccessibleState#FOCUSABLE
+      * @see AccessibleState#FOCUSED
+      */
+     public boolean isFocusTraversable ()
+     {
+       return Component.this.isFocusTraversable ();
+     }
+ 
+     /**
+      * Requests focus for this component.
+      *
+      * @see #isFocusTraversable ()
+      */
+     public void requestFocus ()
+     {
+       Component.this.requestFocus ();
+     }
+ 
+     /**
+      * Adds a focus listener.
+      *
+      * @param l the listener to add
+      */
+     public void addFocusListener(FocusListener l)
+     {
+       Component.this.addFocusListener(l);
+     }
+ 
+     /**
+      * Removes a focus listener.
+      *
+      * @param l the listener to remove
+      */
+     public void removeFocusListener(FocusListener l)
+     {
+       Component.this.removeFocusListener(l);
+     }
+ 
+     /**
+      * Converts component changes into property changes.
+      *
+      * @author Eric Blake (ebb9@email.byu.edu)
+      * @since 1.3
+      * @status updated to 1.4
+      */
+     protected class AccessibleAWTComponentHandler implements ComponentListener
+     {
+       /**
+        * Default constructor.
+        */
+       protected AccessibleAWTComponentHandler()
+       {
+         // Nothing to do here.
+       }
+ 
+       /**
+        * Convert a component hidden to a property change.
+        *
+        * @param e the event to convert
+        */
+       public void componentHidden(ComponentEvent e)
+       {
+         AccessibleAWTComponent.this.firePropertyChange
+           (ACCESSIBLE_STATE_PROPERTY, AccessibleState.VISIBLE, null);
+       }
+ 
+       /**
+        * Convert a component shown to a property change.
+        *
+        * @param e the event to convert
+        */
+       public void componentShown(ComponentEvent e)
+       {
+         AccessibleAWTComponent.this.firePropertyChange
+           (ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.VISIBLE);
+       }
+ 
+       /**
+        * Moving a component does not affect properties.
+        *
+        * @param e ignored
+        */
+       public void componentMoved(ComponentEvent e)
+       {
+         // Nothing to do here.
+       }
+ 
+       /**
+        * Resizing a component does not affect properties.
+        *
+        * @param e ignored
+        */
+       public void componentResized(ComponentEvent e)
+       {
+         // Nothing to do here.
+       }
+     } // class AccessibleAWTComponentHandler
+ 
+     /**
+      * Converts focus changes into property changes.
+      *
+      * @author Eric Blake (ebb9@email.byu.edu)
+      * @since 1.3
+      * @status updated to 1.4
+      */
+     protected class AccessibleAWTFocusHandler implements FocusListener
+     {
+       /**
+        * Default constructor.
+        */
+       protected AccessibleAWTFocusHandler()
+       {
+         // Nothing to do here.
+       }
+ 
+       /**
+        * Convert a focus gained to a property change.
+        *
+        * @param e the event to convert
+        */
+       public void focusGained(FocusEvent e)
+       {
+         AccessibleAWTComponent.this.firePropertyChange
+           (ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.FOCUSED);
+       }
+ 
+       /**
+        * Convert a focus lost to a property change.
+        *
+        * @param e the event to convert
+        */
+       public void focusLost(FocusEvent e)
+       {
+         AccessibleAWTComponent.this.firePropertyChange
+           (ACCESSIBLE_STATE_PROPERTY, AccessibleState.FOCUSED, null);
+       }
+     } // class AccessibleAWTComponentHandler
+   } // class AccessibleAWTComponent
+ 
+   /**
+    * This class provides support for blitting offscreen surfaces to a
+    * component.
+    *
+    * @see BufferStrategy
+    *
+    * @since 1.4
+    */
+   protected class BltBufferStrategy extends BufferStrategy
+   {
+     /**
+      * The capabilities of the image buffer.
+      */
+     protected BufferCapabilities caps;
+ 
+     /**
+      * The back buffers used in this strategy.
+      */
+     protected VolatileImage[] backBuffers;
+ 
+     /**
+      * Whether or not the image buffer resources are allocated and
+      * ready to be drawn into.
+      */
+     protected boolean validatedContents;
+ 
+     /**
+      * The width of the back buffers.
+      */
+     protected int width;
+ 
+     /**
+      * The height of the back buffers.
+      */
+     protected int height;
+ 
+     /**
+      * The front buffer.
+      */
+     private VolatileImage frontBuffer;
+ 
+     /**
+      * Creates a blitting buffer strategy.
+      *
+      * @param numBuffers the number of buffers, including the front
+      * buffer
+      * @param caps the capabilities of this strategy
+      */
+     protected BltBufferStrategy(int numBuffers, BufferCapabilities caps)
+     {
+       this.caps = caps;
+       createBackBuffers(numBuffers - 1);
+       width = getWidth();
+       height = getHeight();
+     }
+ 
+     /**
+      * Initializes the backBuffers field with an array of numBuffers
+      * VolatileImages.
+      *
+      * @param numBuffers the number of backbuffers to create
+      */
+     protected void createBackBuffers(int numBuffers)
+     {
+       GraphicsConfiguration c =
+ 	GraphicsEnvironment.getLocalGraphicsEnvironment()
+ 	.getDefaultScreenDevice().getDefaultConfiguration();
+ 
+       backBuffers = new VolatileImage[numBuffers];
+ 
+       for (int i = 0; i < numBuffers; i++)
+ 	backBuffers[i] = c.createCompatibleVolatileImage(width, height);
+     }
+ 
+     /**
+      * Retrieves the capabilities of this buffer strategy.
+      *
+      * @return the capabilities of this buffer strategy
+      */
+     public BufferCapabilities getCapabilities()
+     {
+       return caps;
+     }
+ 
+     /**
+      * Retrieves a graphics object that can be used to draw into this
+      * strategy's image buffer.
+      *
+      * @return a graphics object
+      */
+     public Graphics getDrawGraphics()
+     {
+       // Return the backmost buffer's graphics.
+       return backBuffers[0].getGraphics();
+     }
+ 
+     /**
+      * Bring the contents of the back buffer to the front buffer.
+      */
+     public void show()
+     {
+       GraphicsConfiguration c =
+ 	GraphicsEnvironment.getLocalGraphicsEnvironment()
+ 	.getDefaultScreenDevice().getDefaultConfiguration();
+ 
+       // draw the front buffer.
+       getGraphics().drawImage(backBuffers[backBuffers.length - 1],
+ 			      width, height, null);
+ 
+       BufferCapabilities.FlipContents f = getCapabilities().getFlipContents();
+ 
+       // blit the back buffers.
+       for (int i = backBuffers.length - 1; i > 0 ; i--)
+ 	backBuffers[i] = backBuffers[i - 1];
+ 
+       // create new backmost buffer.
+       if (f == BufferCapabilities.FlipContents.UNDEFINED)
+ 	backBuffers[0] = c.createCompatibleVolatileImage(width, height);
+ 
+       // create new backmost buffer and clear it to the background
+       // color.
+       if (f == BufferCapabilities.FlipContents.BACKGROUND)
+ 	{
+ 	  backBuffers[0] = c.createCompatibleVolatileImage(width, height);
+ 	  backBuffers[0].getGraphics().clearRect(0, 0, width, height);
+ 	}
+ 
+       // FIXME: set the backmost buffer to the prior contents of the
+       // front buffer.  How do we retrieve the contents of the front
+       // buffer?
+       //
+       //      if (f == BufferCapabilities.FlipContents.PRIOR)
+ 
+       // set the backmost buffer to a copy of the new front buffer.
+       if (f == BufferCapabilities.FlipContents.COPIED)
+ 	backBuffers[0] = backBuffers[backBuffers.length - 1];
+     }
+ 
+     /**
+      * Re-create the image buffer resources if they've been lost.
+      */
+     protected void revalidate()
+     {
+       GraphicsConfiguration c =
+ 	GraphicsEnvironment.getLocalGraphicsEnvironment()
+ 	.getDefaultScreenDevice().getDefaultConfiguration();
+ 
+       for (int i = 0; i < backBuffers.length; i++)
+ 	{
+ 	  int result = backBuffers[i].validate(c);
+ 	  if (result == VolatileImage.IMAGE_INCOMPATIBLE)
+ 	    backBuffers[i] = c.createCompatibleVolatileImage(width, height);
+ 	}
+       validatedContents = true;
+     }
+ 
+     /**
+      * Returns whether or not the image buffer resources have been
+      * lost.
+      *
+      * @return true if the resources have been lost, false otherwise
+      */
+     public boolean contentsLost()
+     {
+       for (int i = 0; i < backBuffers.length; i++)
+ 	{
+ 	  if (backBuffers[i].contentsLost())
+ 	    {
+ 	      validatedContents = false;
+ 	      return true;
+ 	    }
+ 	}
+       // we know that the buffer resources are valid now because we
+       // just checked them
+       validatedContents = true;
+       return false;
+     }
+ 
+     /**
+      * Returns whether or not the image buffer resources have been
+      * restored.
+      *
+      * @return true if the resources have been restored, false
+      * otherwise
+      */
+     public boolean contentsRestored()
+     {
+       GraphicsConfiguration c =
+ 	GraphicsEnvironment.getLocalGraphicsEnvironment()
+ 	.getDefaultScreenDevice().getDefaultConfiguration();
+ 
+       boolean imageRestored = false;
+ 
+       for (int i = 0; i < backBuffers.length; i++)
+ 	{
+ 	  int result = backBuffers[i].validate(c);
+ 	  if (result == VolatileImage.IMAGE_RESTORED)
+ 	    imageRestored = true;
+ 	  else if (result == VolatileImage.IMAGE_INCOMPATIBLE)
+ 	    return false;
+ 	}
+       // we know that the buffer resources are valid now because we
+       // just checked them
+       validatedContents = true;
+       return imageRestored;
+     }
+   }
+ 
+   /**
+    * This class provides support for flipping component buffers. It
+    * can only be used on Canvases and Windows.
+    *
+    * @since 1.4
+    */
+   protected class FlipBufferStrategy extends BufferStrategy
+   {
+     /**
+      * The number of buffers.
+      */
+     protected int numBuffers;
+ 
+     /**
+      * The capabilities of this buffering strategy.
+      */
+     protected BufferCapabilities caps;
+ 
+     /**
+      * An Image reference to the drawing buffer.
+      */
+     protected Image drawBuffer;
+ 
+     /**
+      * A VolatileImage reference to the drawing buffer.
+      */
+     protected VolatileImage drawVBuffer;
+ 
+     /**
+      * Whether or not the image buffer resources are allocated and
+      * ready to be drawn into.
+      */
+     protected boolean validatedContents;
+ 
+     /**
+      * The width of the back buffer.
+      */
+     private int width;
+ 
+     /**
+      * The height of the back buffer.
+      */
+     private int height;
+ 
+     /**
+      * Creates a flipping buffer strategy.  The only supported
+      * strategy for FlipBufferStrategy itself is a double-buffer page
+      * flipping strategy.  It forms the basis for more complex derived
+      * strategies.
+      *
+      * @param numBuffers the number of buffers
+      * @param caps the capabilities of this buffering strategy
+      *
+      * @throws AWTException if the requested
+      * number-of-buffers/capabilities combination is not supported
+      */
+     protected FlipBufferStrategy(int numBuffers, BufferCapabilities caps)
+       throws AWTException
+     {
+       this.caps = caps;
+       width = getWidth();
+       height = getHeight();
+ 
+       if (numBuffers > 1)
+ 	createBuffers(numBuffers, caps);
+       else
+ 	{
+ 	  drawVBuffer = peer.createVolatileImage(width, height);
+ 	  drawBuffer = drawVBuffer;
+ 	}
+     }
+ 
+     /**
+      * Creates a multi-buffer flipping strategy.  The number of
+      * buffers must be greater than one and the buffer capabilities
+      * must specify page flipping.
+      *
+      * @param numBuffers the number of flipping buffers; must be
+      * greater than one
+      * @param caps the buffering capabilities; caps.isPageFlipping()
+      * must return true
+      *
+      * @throws IllegalArgumentException if numBuffers is not greater
+      * than one or if the page flipping capability is not requested
+      *
+      * @throws AWTException if the requested flipping strategy is not
+      * supported
+      */
+     protected void createBuffers(int numBuffers, BufferCapabilities caps)
+       throws AWTException
+     {
+       if (numBuffers <= 1)
+ 	throw new IllegalArgumentException("FlipBufferStrategy.createBuffers:"
+ 					   + " numBuffers must be greater than"
+ 					   + " one.");
+ 
+       if (!caps.isPageFlipping())
+ 	throw new IllegalArgumentException("FlipBufferStrategy.createBuffers:"
+ 					   + " flipping must be a specified"
+ 					   + " capability.");
+ 
+       peer.createBuffers(numBuffers, caps);
+     }
+ 
+     /**
+      * Return a direct reference to the back buffer image.
+      *
+      * @return a direct reference to the back buffer image.
+      */
+     protected Image getBackBuffer()
+     {
+       return peer.getBackBuffer();
+     }
+ 
+     /**
+      * Perform a flip operation to transfer the contents of the back
+      * buffer to the front buffer.
+      */
+     protected void flip(BufferCapabilities.FlipContents flipAction)
+     {
+       peer.flip(flipAction);
+     }
+ 
+     /**
+      * Release the back buffer's resources.
+      */
+     protected void destroyBuffers()
+     {
+       peer.destroyBuffers();
+     }
+ 
+     /**
+      * Retrieves the capabilities of this buffer strategy.
+      *
+      * @return the capabilities of this buffer strategy
+      */
+     public BufferCapabilities getCapabilities()
+     {
+       return caps;
+     }
+ 
+     /**
+      * Retrieves a graphics object that can be used to draw into this
+      * strategy's image buffer.
+      *
+      * @return a graphics object
+      */
+     public Graphics getDrawGraphics()
+     {
+       return drawVBuffer.getGraphics();
+     }
+ 
+     /**
+      * Re-create the image buffer resources if they've been lost.
+      */
+     protected void revalidate()
+     {
+       GraphicsConfiguration c =
+ 	GraphicsEnvironment.getLocalGraphicsEnvironment()
+ 	.getDefaultScreenDevice().getDefaultConfiguration();
+ 
+       if (drawVBuffer.validate(c) == VolatileImage.IMAGE_INCOMPATIBLE)
+ 	drawVBuffer = peer.createVolatileImage(width, height);
+       validatedContents = true;
+     }
+ 
+     /**
+      * Returns whether or not the image buffer resources have been
+      * lost.
+      *
+      * @return true if the resources have been lost, false otherwise
+      */
+     public boolean contentsLost()
+     {
+       if (drawVBuffer.contentsLost())
+ 	{
+ 	  validatedContents = false;
+ 	  return true;
+ 	}
+       // we know that the buffer resources are valid now because we
+       // just checked them
+       validatedContents = true;
+       return false;
+     }
+ 
+     /**
+      * Returns whether or not the image buffer resources have been
+      * restored.
+      *
+      * @return true if the resources have been restored, false
+      * otherwise
+      */
+     public boolean contentsRestored()
+     {
+       GraphicsConfiguration c =
+ 	GraphicsEnvironment.getLocalGraphicsEnvironment()
+ 	.getDefaultScreenDevice().getDefaultConfiguration();
+ 
+       int result = drawVBuffer.validate(c);
+ 
+       boolean imageRestored = false;
+ 
+       if (result == VolatileImage.IMAGE_RESTORED)
+ 	imageRestored = true;
+       else if (result == VolatileImage.IMAGE_INCOMPATIBLE)
+ 	return false;
+ 
+       // we know that the buffer resources are valid now because we
+       // just checked them
+       validatedContents = true;
+       return imageRestored;
+     }
+ 
+     /**
+      * Bring the contents of the back buffer to the front buffer.
+      */
+     public void show()
+     {
+       flip(caps.getFlipContents());
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/ComponentOrientation.java gcc-4.1.0/libjava/classpath/java/awt/ComponentOrientation.java
*** gcc-4.0.2/libjava/classpath/java/awt/ComponentOrientation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/ComponentOrientation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,215 ----
+ /* ComponentOrientation.java -- describes a component's orientation
+    Copyright (C) 2000, 2001, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * This class is used to differentiate different orientations for text layout.
+  * It controls whether text flows left-to-right or right-to-left, and whether
+  * lines are horizontal or vertical, as in this table:<br>
+  * <pre>
+  * LT      RT      TL      TR
+  * A B C   C B A   A D G   G D A
+  * D E F   F E D   B E H   H E B
+  * G H I   I H G   C F I   I F C
+  * </pre>
+  * <b>LT</b> languages are most common (left-to-right lines, top-to-bottom).
+  * This includes Western European languages, and optionally includes Japanese,
+  * Chinese, and Korean. <b>RT</b> languages (right-to-left lines,
+  * top-to-bottom) are mainly middle eastern, such as Hebrew and Arabic.
+  * <b>TR</b> languages flow top-to-bottom in a line, right-to-left, and are
+  * the basis of Japanese, Chinese, and Korean. Finally, <b>TL</b> languages
+  * flow top-to-bottom in a line, left-to-right, as in Mongolian.
+  *
+  * <p>This is a pretty poor excuse for a type-safe enum, since it is not
+  * guaranteed that orientation objects are unique (thanks to serialization),
+  * yet there is no equals() method. You would be wise to compare the output
+  * of isHorizontal() and isLeftToRight() rather than comparing objects with
+  * ==, especially since more constants may be added in the future.
+  *
+  * @author Bryce McKinlay (bryce@albatross.co.nz)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public final class ComponentOrientation implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -4113291392143563828L;
+ 
+   /** Constant for unknown orientation. */
+   private static final int UNKNOWN_ID = 1;
+ 
+   /** Constant for horizontal line orientation. */
+   private static final int HORIZONTAL_ID = 2;
+ 
+   /** Constant for left-to-right orientation. */
+   private static final int LEFT_TO_RIGHT_ID = 4;
+ 
+   /**
+    * Items run left to right, and lines flow top to bottom. Examples: English,
+    * French.
+    */
+   public static final ComponentOrientation LEFT_TO_RIGHT
+     = new ComponentOrientation(HORIZONTAL_ID | LEFT_TO_RIGHT_ID);
+ 
+   /**
+    * Items run right to left, and lines flow top to bottom. Examples: Arabic,
+    * Hebrew.
+    */
+   public static final ComponentOrientation RIGHT_TO_LEFT
+     = new ComponentOrientation(HORIZONTAL_ID);
+ 
+   /**
+    * The orientation is unknown for the locale. For backwards compatibility,
+    * this behaves like LEFT_TO_RIGHT in the instance methods.
+    */
+   public static final ComponentOrientation UNKNOWN
+     = new ComponentOrientation(UNKNOWN_ID | HORIZONTAL_ID | LEFT_TO_RIGHT_ID);
+ 
+   /**
+    * The orientation of this object; bitwise-or of unknown (1), horizontal (2),
+    * and left-to-right (4).
+    *
+    * @serial the orientation
+    */
+   private final int orientation;
+ 
+   /**
+    * Construct a given orientation.
+    *
+    * @param orientation the orientation
+    */
+   private ComponentOrientation(int orientation)
+   {
+     this.orientation = orientation;
+   }
+ 
+   /**
+    * Returns true if the lines are horizontal, in which case lines flow
+    * top-to-bottom. For example, English, Hebrew. Counterexamples: Japanese,
+    * Chinese, Korean, Mongolian.
+    *
+    * @return true if this orientation has horizontal lines
+    */
+   public boolean isHorizontal()
+   {
+     return (orientation & HORIZONTAL_ID) != 0;
+   }
+ 
+   /**
+    * If isHorizontal() returns true, then this determines whether items in
+    * the line flow left-to-right. If isHorizontal() returns false, items in
+    * a line flow top-to-bottom, and this determines if lines flow
+    * left-to-right.
+    *
+    * @return true if this orientation flows left-to-right
+    */
+   public boolean isLeftToRight()
+   {
+     return (orientation & LEFT_TO_RIGHT_ID) != 0;
+   }
+ 
+   /**
+    * Gets an orientation appropriate for the locale.
+    *
+    * @param locale the locale
+    * @return the orientation for that locale
+    * @throws NullPointerException if locale is null
+    */
+   public static ComponentOrientation getOrientation(Locale locale)
+   {
+     // Based on iterating over all languages defined in JDK 1.4, this behavior
+     // matches Sun's. However, it makes me wonder if any non-horizontal
+     // orientations even exist, as it sure contradicts their documentation.
+     String language = locale.getLanguage();
+     if ("ar".equals(language) || "fa".equals(language) || "iw".equals(language)
+         || "ur".equals(language))
+       return RIGHT_TO_LEFT;
+     return LEFT_TO_RIGHT;
+   }
+ 
+   /**
+    * Gets an orientation from a resource bundle. This tries the following:
+    *
+    * <ul>
+    * <li>Use the key "Orientation" to find an instance of ComponentOrientation
+    * in the bundle.</li>
+    * <li>Get the locale of the resource bundle, and get the orientation of
+    * that locale.</li>
+    * <li>Give up and get the orientation of the default locale.</li>
+    * </ul>
+    *
+    * @param bdl the bundle to use
+    * @return the orientation
+    * @throws NullPointerException if bdl is null
+    * @deprecated use {@link #getOrientation(Locale)} instead
+    */
+   public static ComponentOrientation getOrientation(ResourceBundle bdl)
+   {
+     ComponentOrientation r;
+     try
+       {
+         r = (ComponentOrientation) bdl.getObject("Orientation");
+         if (r != null)
+           return r;
+       }
+     catch (MissingResourceException ignored)
+       {
+       }
+     catch (ClassCastException ignored)
+       {
+       }
+     try
+       {
+         r = getOrientation(bdl.getLocale());
+         if (r != null)
+           return r;
+       }
+     catch (Exception ignored)
+       {
+       }
+     return getOrientation(Locale.getDefault());
+   }
+ } // class ComponentOrientation
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Composite.java gcc-4.1.0/libjava/classpath/java/awt/Composite.java
*** gcc-4.0.2/libjava/classpath/java/awt/Composite.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Composite.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* Composite.java -- graphics formed from composite layers
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.ColorModel;
+ 
+ /**
+  * This interface is for graphics which are formed as composites of others.
+  * It combines {@link Graphics2D} shapes according to defined rules to form
+  * the new image. Implementations of this interface must be immutable, because
+  * they are not cloned when a Graphics2D container is cloned.
+  *
+  * <p>Since this can expose pixels to untrusted code, there is a security
+  * check on custom objects, <code>readDisplayPixels</code>, to prevent leaking
+  * restricted information graphically.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see AlphaComposite
+  * @see CompositeContext
+  * @see Graphics2D#setComposite(Composite)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface Composite
+ {
+   /**
+    * Create a context state for performing the compositing operation. Several
+    * contexts may exist for this object, in a multi-threaded environment.
+    *
+    * @param srcColorModel the color model of the source
+    * @param dstColorModel the color model of the destination
+    * @param hints hints for choosing between rendering alternatives
+    */
+   CompositeContext createContext(ColorModel srcColorModel,
+                                  ColorModel dstColorModel,
+                                  RenderingHints hints);
+ } // interface Composite
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/CompositeContext.java gcc-4.1.0/libjava/classpath/java/awt/CompositeContext.java
*** gcc-4.0.2/libjava/classpath/java/awt/CompositeContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/CompositeContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* Composite.java -- the context for compositing graphics layers
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.Raster;
+ import java.awt.image.WritableRaster;
+ 
+ /**
+  * This interface provides an optimized environment for compositing graphics.
+  * Several such contexts may exist for a given <code>Composite</code> object.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Composite
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface CompositeContext
+ {
+   /**
+    * Release resources allocated for the compositing.
+    */
+   void dispose();
+ 
+   /**
+    * Compose the two source images into the composite image. The destination
+    * can be the same as one of the two inputs, and the destination must be
+    * compatible with the ColorModel chosen in {@link Composite#createContext}.
+    *
+    * @param src the lower image source in compositing
+    * @param dstIn the upper image source in compositing
+    * @param dstOut the destination for the composite
+    * @see Composite
+    */
+   void compose(Raster src, Raster dstIn, WritableRaster dstOut);
+ } // interface CompositeContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Container.java gcc-4.1.0/libjava/classpath/java/awt/Container.java
*** gcc-4.0.2/libjava/classpath/java/awt/Container.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Container.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,2225 ----
+ /* Container.java -- parent container class in AWT
+    Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ComponentListener;
+ import java.awt.event.ContainerEvent;
+ import java.awt.event.ContainerListener;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
+ import java.awt.peer.ComponentPeer;
+ import java.awt.peer.ContainerPeer;
+ import java.awt.peer.LightweightPeer;
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyChangeSupport;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.io.Serializable;
+ import java.util.Collections;
+ import java.util.EventListener;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Set;
+ 
+ import javax.accessibility.Accessible;
+ 
+ import gnu.java.awt.AWTUtilities;
+ 
+ /**
+  * A generic window toolkit object that acts as a container for other objects.
+  * Components are tracked in a list, and new elements are at the end of the
+  * list or bottom of the stacking order.
+  *
+  * @author original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  *
+  * @since 1.0
+  *
+  * @status still missing 1.4 support
+  */
+ public class Container extends Component
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 4613797578919906343L;
+ 
+   /* Serialized fields from the serialization spec. */
+   int ncomponents;
+   Component[] component;
+   LayoutManager layoutMgr;
+ 
+   LightweightDispatcher dispatcher;
+ 
+   Dimension maxSize;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean focusCycleRoot;
+ 
+   int containerSerializedDataVersion;
+ 
+   /* Anything else is non-serializable, and should be declared "transient". */
+   transient ContainerListener containerListener;
+   transient PropertyChangeSupport changeSupport; 
+ 
+   /** The focus traversal policy that determines how focus is
+       transferred between this Container and its children. */
+   private FocusTraversalPolicy focusTraversalPolicy;
+ 
+   /**
+    * The focus traversal keys, if not inherited from the parent or default
+    * keyboard manager. These sets will contain only AWTKeyStrokes that
+    * represent press and release events to use as focus control.
+    *
+    * @see #getFocusTraversalKeys(int)
+    * @see #setFocusTraversalKeys(int, Set)
+    * @since 1.4
+    */
+   transient Set[] focusTraversalKeys;
+ 
+   /**
+    * Default constructor for subclasses.
+    */
+   public Container()
+   {
+     // Nothing to do here.
+   }
+ 
+   /**
+    * Returns the number of components in this container.
+    *
+    * @return The number of components in this container.
+    */
+   public int getComponentCount()
+   {
+     return countComponents ();
+   }
+ 
+   /**
+    * Returns the number of components in this container.
+    *
+    * @return The number of components in this container.
+    *
+    * @deprecated use {@link #getComponentCount()} instead
+    */
+   public int countComponents()
+   {
+     return ncomponents;
+   }
+ 
+   /**
+    * Returns the component at the specified index.
+    *
+    * @param n The index of the component to retrieve.
+    *
+    * @return The requested component.
+    *
+    * @throws ArrayIndexOutOfBoundsException If the specified index is invalid
+    */
+   public Component getComponent(int n)
+   {
+     synchronized (getTreeLock ())
+       {
+         if (n < 0 || n >= ncomponents)
+           throw new ArrayIndexOutOfBoundsException("no such component");
+ 
+         return component[n];
+       }
+   }
+ 
+   /**
+    * Returns an array of the components in this container.
+    *
+    * @return The components in this container.
+    */
+   public Component[] getComponents()
+   {
+     synchronized (getTreeLock ())
+       {
+         Component[] result = new Component[ncomponents];
+ 
+         if (ncomponents > 0)
+           System.arraycopy(component, 0, result, 0, ncomponents);
+ 
+         return result;
+       }
+   }
+ 
+   /**
+    * Swaps the components at position i and j, in the container.
+    */
+ 
+   protected void swapComponents (int i, int j)
+   {   
+     synchronized (getTreeLock ())
+       {
+         if (i < 0 
+             || i >= component.length
+             || j < 0 
+             || j >= component.length)
+           throw new ArrayIndexOutOfBoundsException ();
+         Component tmp = component[i];
+         component[i] = component[j];
+         component[j] = tmp;
+       }
+   }
+ 
+   /**
+    * Returns the insets for this container, which is the space used for
+    * borders, the margin, etc.
+    *
+    * @return The insets for this container.
+    */
+   public Insets getInsets()
+   {
+     return insets ();
+   }
+ 
+   /**
+    * Returns the insets for this container, which is the space used for
+    * borders, the margin, etc.
+    *
+    * @return The insets for this container.
+    * @deprecated use {@link #getInsets()} instead
+    */
+   public Insets insets()
+   {
+     if (peer == null)
+       return new Insets (0, 0, 0, 0);
+ 
+     return ((ContainerPeer) peer).getInsets ();
+   }
+ 
+   /**
+    * Adds the specified component to this container at the end of the
+    * component list.
+    *
+    * @param comp The component to add to the container.
+    *
+    * @return The same component that was added.
+    */
+   public Component add(Component comp)
+   {
+     addImpl(comp, null, -1);
+     return comp;
+   }
+ 
+   /**
+    * Adds the specified component to the container at the end of the
+    * component list.  This method should not be used. Instead, use
+    * <code>add(Component, Object)</code>.
+    *
+    * @param name The name of the component to be added.
+    * @param comp The component to be added.
+    *
+    * @return The same component that was added.
+    *
+    * @see #add(Component,Object)
+    */
+   public Component add(String name, Component comp)
+   {
+     addImpl(comp, name, -1);
+     return comp;
+   }
+ 
+   /**
+    * Adds the specified component to this container at the specified index
+    * in the component list.
+    *
+    * @param comp The component to be added.
+    * @param index The index in the component list to insert this child
+    * at, or -1 to add at the end of the list.
+    *
+    * @return The same component that was added.
+    *
+    * @throws ArrayIndexOutOfBoundsException If the specified index is invalid.
+    */
+   public Component add(Component comp, int index)
+   {
+     addImpl(comp, null, index);
+     return comp;
+   }
+ 
+   /**
+    * Adds the specified component to this container at the end of the
+    * component list.  The layout manager will use the specified constraints
+    * when laying out this component.
+    *
+    * @param comp The component to be added to this container.
+    * @param constraints The layout constraints for this component.
+    */
+   public void add(Component comp, Object constraints)
+   {
+     addImpl(comp, constraints, -1);
+   }
+ 
+   /**
+    * Adds the specified component to this container at the specified index
+    * in the component list.  The layout manager will use the specified
+    * constraints when layout out this component.
+    *
+    * @param comp The component to be added.
+    * @param constraints The layout constraints for this component.
+    * @param index The index in the component list to insert this child
+    * at, or -1 to add at the end of the list.
+    *
+    * @throws ArrayIndexOutOfBoundsException If the specified index is invalid.
+    */
+   public void add(Component comp, Object constraints, int index)
+   {
+     addImpl(comp, constraints, index);
+   }
+ 
+   /**
+    * This method is called by all the <code>add()</code> methods to perform
+    * the actual adding of the component.  Subclasses who wish to perform
+    * their own processing when a component is added should override this
+    * method.  Any subclass doing this must call the superclass version of
+    * this method in order to ensure proper functioning of the container.
+    *
+    * @param comp The component to be added.
+    * @param constraints The layout constraints for this component, or
+    * <code>null</code> if there are no constraints.
+    * @param index The index in the component list to insert this child
+    * at, or -1 to add at the end of the list.
+    *
+    * @throws ArrayIndexOutOfBoundsException If the specified index is invalid.
+    */
+   protected void addImpl(Component comp, Object constraints, int index)
+   {
+     synchronized (getTreeLock ())
+       {
+         if (index > ncomponents
+             || (index < 0 && index != -1)
+             || comp instanceof Window
+             || (comp instanceof Container
+                 && ((Container) comp).isAncestorOf(this)))
+           throw new IllegalArgumentException();
+ 
+         // Reparent component, and make sure component is instantiated if
+         // we are.
+         if (comp.parent != null)
+           comp.parent.remove(comp);
+         comp.parent = this;
+ 
+         if (peer != null)
+           {
+ 	    // Notify the component that it has a new parent.
+ 	    comp.addNotify();
+ 
+             if (comp.isLightweight ())
+ 	      {
+ 		enableEvents (comp.eventMask);
+ 		if (!isLightweight ())
+ 		  enableEvents (AWTEvent.PAINT_EVENT_MASK);
+ 	      }
+           }
+ 
+         // Invalidate the layout of the added component and its ancestors.
+         comp.invalidate();
+ 
+         if (component == null)
+           component = new Component[4]; // FIXME, better initial size?
+ 
+         // This isn't the most efficient implementation.  We could do less
+         // copying when growing the array.  It probably doesn't matter.
+         if (ncomponents >= component.length)
+           {
+             int nl = component.length * 2;
+             Component[] c = new Component[nl];
+             System.arraycopy(component, 0, c, 0, ncomponents);
+             component = c;
+           }
+   
+         if (index == -1)
+           component[ncomponents++] = comp;
+         else
+           {
+             System.arraycopy(component, index, component, index + 1,
+                              ncomponents - index);
+             component[index] = comp;
+             ++ncomponents;
+           }
+ 
+         // Notify the layout manager.
+         if (layoutMgr != null)
+           {
+             if (layoutMgr instanceof LayoutManager2)
+               {
+                 LayoutManager2 lm2 = (LayoutManager2) layoutMgr;
+                 lm2.addLayoutComponent(comp, constraints);
+               }
+             else if (constraints instanceof String)
+               layoutMgr.addLayoutComponent((String) constraints, comp);
+             else
+               layoutMgr.addLayoutComponent(null, comp);
+           }
+ 
+         // We previously only sent an event when this container is showing.
+         // Also, the event was posted to the event queue. A Mauve test shows
+         // that this event is not delivered using the event queue and it is
+         // also sent when the container is not showing. 
+         ContainerEvent ce = new ContainerEvent(this,
+                                                ContainerEvent.COMPONENT_ADDED,
+                                                comp);
+         ContainerListener[] listeners = getContainerListeners();
+         for (int i = 0; i < listeners.length; i++)
+           listeners[i].componentAdded(ce);
+ 
+         // Repaint this container.
+         repaint(comp.getX(), comp.getY(), comp.getWidth(),
+                 comp.getHeight());
+       }
+   }
+ 
+   /**
+    * Removes the component at the specified index from this container.
+    *
+    * @param index The index of the component to remove.
+    */
+   public void remove(int index)
+   {
+     synchronized (getTreeLock ())
+       {
+         Component r = component[index];
+ 
+         ComponentListener[] list = r.getComponentListeners();
+         for (int j = 0; j < list.length; j++)
+               r.removeComponentListener(list[j]);
+         
+         if (r.isShowing())
+           r.removeNotify();
+ 
+         System.arraycopy(component, index + 1, component, index,
+                          ncomponents - index - 1);
+         component[--ncomponents] = null;
+ 
+         invalidate();
+ 
+         if (layoutMgr != null)
+           layoutMgr.removeLayoutComponent(r);
+ 
+         r.parent = null;
+ 
+         if (isShowing ())
+           {
+             // Post event to notify of removing the component.
+             ContainerEvent ce = new ContainerEvent(this,
+                                                    ContainerEvent.COMPONENT_REMOVED,
+                                                    r);
+             getToolkit().getSystemEventQueue().postEvent(ce);
+ 
+             // Repaint this container.
+             repaint();
+           }
+       }
+   }
+ 
+   /**
+    * Removes the specified component from this container.
+    *
+    * @param comp The component to remove from this container.
+    */
+   public void remove(Component comp)
+   {
+     synchronized (getTreeLock ())
+       {
+         for (int i = 0; i < ncomponents; ++i)
+           {
+             if (component[i] == comp)
+               {
+                 remove(i);
+                 break;
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Removes all components from this container.
+    */
+   public void removeAll()
+   {
+     synchronized (getTreeLock ())
+       {
+         while (ncomponents > 0)
+           remove(0);
+       }
+   }
+ 
+   /**
+    * Returns the current layout manager for this container.
+    *
+    * @return The layout manager for this container.
+    */
+   public LayoutManager getLayout()
+   {
+     return layoutMgr;
+   }
+ 
+   /**
+    * Sets the layout manager for this container to the specified layout
+    * manager.
+    *
+    * @param mgr The new layout manager for this container.
+    */
+   public void setLayout(LayoutManager mgr)
+   {
+     layoutMgr = mgr;
+     invalidate();
+   }
+ 
+   /**
+    * Layout the components in this container.
+    */
+   public void doLayout()
+   {
+     layout ();
+   }
+ 
+   /**
+    * Layout the components in this container.
+    *
+    * @deprecated use {@link #doLayout()} instead
+    */
+   public void layout()
+   {
+     if (layoutMgr != null)
+       layoutMgr.layoutContainer (this);
+   }
+ 
+   /**
+    * Invalidates this container to indicate that it (and all parent
+    * containers) need to be laid out.
+    */
+   public void invalidate()
+   {
+     super.invalidate();
+     if (layoutMgr != null && layoutMgr instanceof LayoutManager2)
+       {
+         LayoutManager2 lm2 = (LayoutManager2) layoutMgr;
+         lm2.invalidateLayout(this);
+       }
+   }
+ 
+   /**
+    * Re-lays out the components in this container.
+    */
+   public void validate()
+   {
+     synchronized (getTreeLock ())
+       {
+         if (! isValid() && peer != null)
+           {
+             validateTree();
+           }
+       }
+   }
+ 
+   /**
+    * Recursively invalidates the container tree.
+    */
+   void invalidateTree()
+   {
+     super.invalidate();  // Clean cached layout state.
+     for (int i = 0; i < ncomponents; i++)
+       {
+         Component comp = component[i];
+         comp.invalidate();
+         if (comp instanceof Container)
+           ((Container) comp).invalidateTree();
+       }
+ 
+     if (layoutMgr != null && layoutMgr instanceof LayoutManager2)
+       {
+         LayoutManager2 lm2 = (LayoutManager2) layoutMgr;
+         lm2.invalidateLayout(this);
+       }
+   }
+ 
+   /**
+    * Recursively validates the container tree, recomputing any invalid
+    * layouts.
+    */
+   protected void validateTree()
+   {
+     if (valid)
+       return;
+ 
+     ContainerPeer cPeer = null;
+     if (peer != null && ! (peer instanceof LightweightPeer))
+       {
+         cPeer = (ContainerPeer) peer;
+         cPeer.beginValidate();
+       }
+ 
+     for (int i = 0; i < ncomponents; ++i)
+       {
+         Component comp = component[i];
+ 
+         if (comp.getPeer () == null)
+           comp.addNotify();
+       }
+ 
+     doLayout ();
+     for (int i = 0; i < ncomponents; ++i)
+       {
+         Component comp = component[i];
+ 
+         if (! comp.isValid())
+           {
+             if (comp instanceof Container)
+               {
+                 ((Container) comp).validateTree();
+               }
+             else
+               {
+                 component[i].validate();
+               }
+           }
+       }
+ 
+     /* children will call invalidate() when they are layed out. It
+        is therefore important that valid is not set to true
+        until after the children have been layed out. */
+     valid = true;
+ 
+     if (cPeer != null)
+       cPeer.endValidate();
+   }
+ 
+   public void setFont(Font f)
+   {
+     if( (f != null && (font == null || !font.equals(f)))
+         || f == null)
+       {
+         super.setFont(f);
+         // FIXME: Although it might make more sense to invalidate only
+         // those children whose font == null, Sun invalidates all children.
+         // So we'll do the same.
+         invalidateTree();
+       }
+   }
+ 
+   /**
+    * Returns the preferred size of this container.
+    *
+    * @return The preferred size of this container.
+    */
+   public Dimension getPreferredSize()
+   {
+     return preferredSize ();
+   }
+ 
+   /**
+    * Returns the preferred size of this container.
+    *
+    * @return The preferred size of this container.
+    *
+    * @deprecated use {@link #getPreferredSize()} instead
+    */
+   public Dimension preferredSize()
+   {
+     synchronized(treeLock)
+       {  
+         if(valid && prefSize != null)
+           return new Dimension(prefSize);
+         LayoutManager layout = getLayout();
+         if (layout != null)
+           {
+             Dimension layoutSize = layout.preferredLayoutSize(this);
+             if(valid)
+               prefSize = layoutSize;
+             return new Dimension(layoutSize);
+           }
+         else
+           return super.preferredSize ();
+       }
+   }
+ 
+   /**
+    * Returns the minimum size of this container.
+    *
+    * @return The minimum size of this container.
+    */
+   public Dimension getMinimumSize()
+   {
+     return minimumSize ();
+   }
+ 
+   /**
+    * Returns the minimum size of this container.
+    *
+    * @return The minimum size of this container.
+    *
+    * @deprecated use {@link #getMinimumSize()} instead
+    */
+   public Dimension minimumSize()
+   {
+     if(valid && minSize != null)
+       return new Dimension(minSize);
+ 
+     LayoutManager layout = getLayout();
+     if (layout != null)
+       {
+         minSize = layout.minimumLayoutSize (this);
+         return minSize;
+       }    
+     else
+       return super.minimumSize ();
+   }
+ 
+   /**
+    * Returns the maximum size of this container.
+    *
+    * @return The maximum size of this container.
+    */
+   public Dimension getMaximumSize()
+   {
+     if (valid && maxSize != null)
+       return new Dimension(maxSize);
+ 
+     LayoutManager layout = getLayout();
+     if (layout != null && layout instanceof LayoutManager2)
+       {
+         LayoutManager2 lm2 = (LayoutManager2) layout;
+         maxSize = lm2.maximumLayoutSize(this);
+         return maxSize;
+       }
+     else
+       return super.getMaximumSize();
+   }
+ 
+   /**
+    * Returns the preferred alignment along the X axis.  This is a value
+    * between 0 and 1 where 0 represents alignment flush left and
+    * 1 means alignment flush right, and 0.5 means centered.
+    *
+    * @return The preferred alignment along the X axis.
+    */
+   public float getAlignmentX()
+   {
+     LayoutManager layout = getLayout();
+     float alignmentX = 0.0F;
+     if (layout != null && layout instanceof LayoutManager2)
+       {
+         LayoutManager2 lm2 = (LayoutManager2) layout;
+         alignmentX = lm2.getLayoutAlignmentX(this);
+       }
+     else
+       alignmentX = super.getAlignmentX();
+     return alignmentX;
+   }
+ 
+   /**
+    * Returns the preferred alignment along the Y axis.  This is a value
+    * between 0 and 1 where 0 represents alignment flush top and
+    * 1 means alignment flush bottom, and 0.5 means centered.
+    *
+    * @return The preferred alignment along the Y axis.
+    */
+   public float getAlignmentY()
+   {
+     LayoutManager layout = getLayout();
+     float alignmentY = 0.0F;
+     if (layout != null && layout instanceof LayoutManager2)
+       {
+         LayoutManager2 lm2 = (LayoutManager2) layout;
+         alignmentY = lm2.getLayoutAlignmentY(this);
+       }
+     else
+       alignmentY = super.getAlignmentY();
+     return alignmentY;
+   }
+ 
+   /**
+    * Paints this container.  The implementation of this method in this
+    * class forwards to any lightweight components in this container.  If
+    * this method is subclassed, this method should still be invoked as
+    * a superclass method so that lightweight components are properly
+    * drawn.
+    *
+    * @param g The graphics context for this paint job.
+    */
+   public void paint(Graphics g)
+   {
+     if (!isShowing())
+       return;
+ 
+     // Visit heavyweights as well, in case they were
+     // erased when we cleared the background for this container.
+     visitChildren(g, GfxPaintVisitor.INSTANCE, false);
+   }
+ 
+   /**
+    * Updates this container.  The implementation of this method in this
+    * class forwards to any lightweight components in this container.  If
+    * this method is subclassed, this method should still be invoked as
+    * a superclass method so that lightweight components are properly
+    * drawn.
+    *
+    * @param g The graphics context for this update.
+    *
+    * @specnote The specification suggests that this method forwards the
+    *           update() call to all its lightweight children. Tests show
+    *           that this is not done either in the JDK. The exact behaviour
+    *           seems to be that the background is cleared in heavyweight
+    *           Containers, and all other containers
+    *           directly call paint(), causing the (lightweight) children to
+    *           be painted.
+    */
+   public void update(Graphics g)
+   {
+     // It seems that the JDK clears the background of containers like Panel
+     // and Window (within this method) but not of 'plain' Containers or
+     // JComponents. This could
+     // lead to the assumption that it only clears heavyweight containers.
+     // However that is not quite true. In a test with a custom Container
+     // that overrides isLightweight() to return false, the background is
+     // also not cleared. So we do a check on !(peer instanceof LightweightPeer)
+     // instead.
+     ComponentPeer p = peer;
+     if (p != null && !(p instanceof LightweightPeer))
+       g.clearRect(0, 0, getWidth(), getHeight());
+ 
+     paint(g);
+   }
+ 
+   /**
+    * Prints this container.  The implementation of this method in this
+    * class forwards to any lightweight components in this container.  If
+    * this method is subclassed, this method should still be invoked as
+    * a superclass method so that lightweight components are properly
+    * drawn.
+    *
+    * @param g The graphics context for this print job.
+    */
+   public void print(Graphics g)
+   {
+     super.print(g);
+     visitChildren(g, GfxPrintVisitor.INSTANCE, true);
+   }
+ 
+   /**
+    * Paints all of the components in this container.
+    *
+    * @param g The graphics context for this paint job.
+    */
+   public void paintComponents(Graphics g)
+   {
+     paint(g);
+     visitChildren(g, GfxPaintAllVisitor.INSTANCE, true);
+   }
+ 
+   /**
+    * Prints all of the components in this container.
+    *
+    * @param g The graphics context for this print job.
+    */
+   public void printComponents(Graphics g)
+   {
+     super.paint(g);
+     visitChildren(g, GfxPrintAllVisitor.INSTANCE, true);
+   }
+ 
+   /**
+    * Adds the specified container listener to this object's list of
+    * container listeners.
+    *
+    * @param listener The listener to add.
+    */
+   public synchronized void addContainerListener(ContainerListener listener)
+   {
+     containerListener = AWTEventMulticaster.add(containerListener, listener);
+   }
+ 
+   /**
+    * Removes the specified container listener from this object's list of
+    * container listeners.
+    *
+    * @param listener The listener to remove.
+    */
+   public synchronized void removeContainerListener(ContainerListener listener)
+   {
+     containerListener = AWTEventMulticaster.remove(containerListener, listener);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public synchronized ContainerListener[] getContainerListeners()
+   {
+     return (ContainerListener[])
+       AWTEventMulticaster.getListeners(containerListener,
+                                        ContainerListener.class);
+   }
+ 
+   /**
+    * Returns an array of all the objects currently registered as FooListeners
+    * upon this Container. FooListeners are registered using the addFooListener
+    * method.
+    *
+    * @exception ClassCastException If listenerType doesn't specify a class or
+    * interface that implements @see java.util.EventListener.
+    *
+    * @since 1.3
+    */
+   public EventListener[] getListeners(Class listenerType)
+   {
+     if (listenerType == ContainerListener.class)
+       return getContainerListeners();
+     return super.getListeners(listenerType);
+   }
+ 
+   /**
+    * Processes the specified event.  This method calls
+    * <code>processContainerEvent()</code> if this method is a
+    * <code>ContainerEvent</code>, otherwise it calls the superclass
+    * method.
+    *
+    * @param e The event to be processed.
+    */
+   protected void processEvent(AWTEvent e)
+   {
+     if (e instanceof ContainerEvent)
+       processContainerEvent((ContainerEvent) e);
+     else
+       super.processEvent(e);
+   }
+ 
+   /**
+    * Called when a container event occurs if container events are enabled.
+    * This method calls any registered listeners.
+    *
+    * @param e The event that occurred.
+    */
+   protected void processContainerEvent(ContainerEvent e)
+   {
+     if (containerListener == null)
+       return;
+     switch (e.id)
+       {
+       case ContainerEvent.COMPONENT_ADDED:
+         containerListener.componentAdded(e);
+         break;
+ 
+       case ContainerEvent.COMPONENT_REMOVED:
+         containerListener.componentRemoved(e);
+         break;
+       }
+   }
+ 
+   /**
+    * AWT 1.0 event processor.
+    *
+    * @param e The event that occurred.
+    *
+    * @deprecated use {@link #dispatchEvent(AWTEvent)} instead
+    */
+   public void deliverEvent(Event e)
+   {
+     if (!handleEvent (e))
+       {
+         synchronized (getTreeLock ())
+           {
+             Component parent = getParent ();
+ 
+             if (parent != null)
+               parent.deliverEvent (e);
+           }
+       }
+   }
+ 
+   /**
+    * Returns the component located at the specified point.  This is done
+    * by checking whether or not a child component claims to contain this
+    * point.  The first child component that does is returned.  If no
+    * child component claims the point, the container itself is returned,
+    * unless the point does not exist within this container, in which
+    * case <code>null</code> is returned.
+    *
+    * @param x The X coordinate of the point.
+    * @param y The Y coordinate of the point.
+    *
+    * @return The component containing the specified point, or
+    * <code>null</code> if there is no such point.
+    */
+   public Component getComponentAt(int x, int y)
+   {
+     return locate (x, y);
+   }
+ 
+   /**
+    * Returns the component located at the specified point.  This is done
+    * by checking whether or not a child component claims to contain this
+    * point.  The first child component that does is returned.  If no
+    * child component claims the point, the container itself is returned,
+    * unless the point does not exist within this container, in which
+    * case <code>null</code> is returned.
+    *
+    * @param x The x position of the point to return the component at.
+    * @param y The y position of the point to return the component at.
+    *
+    * @return The component containing the specified point, or <code>null</code>
+    * if there is no such point.
+    *
+    * @deprecated use {@link #getComponentAt(int, int)} instead
+    */
+   public Component locate(int x, int y)
+   {
+     synchronized (getTreeLock ())
+       {
+         if (!contains (x, y))
+           return null;
+         for (int i = 0; i < ncomponents; ++i)
+           {
+             // Ignore invisible children...
+             if (!component[i].isVisible ())
+               continue;
+ 
+             int x2 = x - component[i].x;
+             int y2 = y - component[i].y;
+             if (component[i].contains (x2, y2))
+               return component[i];
+           }
+         return this;
+       }
+   }
+ 
+   /**
+    * Returns the component located at the specified point.  This is done
+    * by checking whether or not a child component claims to contain this
+    * point.  The first child component that does is returned.  If no
+    * child component claims the point, the container itself is returned,
+    * unless the point does not exist within this container, in which
+    * case <code>null</code> is returned.
+    *
+    * @param p The point to return the component at.
+    * @return The component containing the specified point, or <code>null</code>
+    * if there is no such point.
+    */
+   public Component getComponentAt(Point p)
+   {
+     return getComponentAt (p.x, p.y);
+   }
+ 
+   public Component findComponentAt(int x, int y)
+   {
+     synchronized (getTreeLock ())
+       {
+         if (! contains(x, y))
+           return null;
+ 
+         for (int i = 0; i < ncomponents; ++i)
+           {
+             // Ignore invisible children...
+             if (!component[i].isVisible())
+               continue;
+ 
+             int x2 = x - component[i].x;
+             int y2 = y - component[i].y;
+             // We don't do the contains() check right away because
+             // findComponentAt would redundantly do it first thing.
+             if (component[i] instanceof Container)
+               {
+                 Container k = (Container) component[i];
+                 Component r = k.findComponentAt(x2, y2);
+                 if (r != null)
+                   return r;
+               }
+             else if (component[i].contains(x2, y2))
+               return component[i];
+           }
+ 
+         return this;
+       }
+   }
+   
+   /**
+    * Finds the visible child component that contains the specified position.
+    * The top-most child is returned in the case where there is overlap.
+    * If the top-most child is transparent and has no MouseListeners attached,
+    * we discard it and return the next top-most component containing the
+    * specified position.
+    * @param x the x coordinate
+    * @param y the y coordinate
+    * @return null if the <code>this</code> does not contain the position,
+    * otherwise the top-most component (out of this container itself and 
+    * its descendants) meeting the criteria above.
+    */
+   Component findComponentForMouseEventAt(int x, int y)
+   {
+     synchronized (getTreeLock())
+       {
+         if (!contains(x, y))
+           return null;
+ 
+         for (int i = 0; i < ncomponents; ++i)
+           {
+             // Ignore invisible children...
+             if (!component[i].isVisible())
+               continue;
+ 
+             int x2 = x - component[i].x;
+             int y2 = y - component[i].y;
+             // We don't do the contains() check right away because
+             // findComponentAt would redundantly do it first thing.
+             if (component[i] instanceof Container)
+               {
+                 Container k = (Container) component[i];
+                 Component r = k.findComponentForMouseEventAt(x2, y2);
+                 if (r != null)
+                   return r;
+               }
+             else if (component[i].contains(x2, y2))
+               return component[i];
+           }
+ 
+         //don't return transparent components with no MouseListeners
+         if (this.getMouseListeners().length == 0)
+           return null;
+         return this;
+       }
+   }
+ 
+   public Component findComponentAt(Point p)
+   {
+     return findComponentAt(p.x, p.y);
+   }
+ 
+   /**
+    * Called when this container is added to another container to inform it
+    * to create its peer.  Peers for any child components will also be
+    * created.
+    */
+   public void addNotify()
+   {
+     super.addNotify();
+     addNotifyContainerChildren();
+   }
+ 
+   /**
+    * Called when this container is removed from its parent container to
+    * inform it to destroy its peer.  This causes the peers of all child
+    * component to be destroyed as well.
+    */
+   public void removeNotify()
+   {
+     synchronized (getTreeLock ())
+       {
+         for (int i = 0; i < ncomponents; ++i)
+           component[i].removeNotify();
+         super.removeNotify();
+       }
+   }
+ 
+   /**
+    * Tests whether or not the specified component is contained within
+    * this components subtree.
+    *
+    * @param comp The component to test.
+    *
+    * @return <code>true</code> if this container is an ancestor of the
+    * specified component, <code>false</code> otherwise.
+    */
+   public boolean isAncestorOf(Component comp)
+   {
+     synchronized (getTreeLock ())
+       {
+         while (true)
+           {
+             if (comp == null)
+               return false;
+             if (comp == this)
+               return true;
+             comp = comp.getParent();
+           }
+       }
+   }
+ 
+   /**
+    * Returns a string representing the state of this container for
+    * debugging purposes.
+    *
+    * @return A string representing the state of this container.
+    */
+   protected String paramString()
+   {
+     if (layoutMgr == null)
+       return super.paramString();
+ 
+     StringBuffer sb = new StringBuffer();
+     sb.append(super.paramString());
+     sb.append(",layout=");
+     sb.append(layoutMgr.getClass().getName());
+     return sb.toString();
+   }
+ 
+   /**
+    * Writes a listing of this container to the specified stream starting
+    * at the specified indentation point.
+    *
+    * @param out The <code>PrintStream</code> to write to.
+    * @param indent The indentation point.
+    */
+   public void list(PrintStream out, int indent)
+   {
+     synchronized (getTreeLock ())
+       {
+         super.list(out, indent);
+         for (int i = 0; i < ncomponents; ++i)
+           component[i].list(out, indent + 2);
+       }
+   }
+ 
+   /**
+    * Writes a listing of this container to the specified stream starting
+    * at the specified indentation point.
+    *
+    * @param out The <code>PrintWriter</code> to write to.
+    * @param indent The indentation point.
+    */
+   public void list(PrintWriter out, int indent)
+   {
+     synchronized (getTreeLock ())
+       {
+         super.list(out, indent);
+         for (int i = 0; i < ncomponents; ++i)
+           component[i].list(out, indent + 2);
+       }
+   }
+ 
+   /**
+    * Sets the focus traversal keys for a given traversal operation for this
+    * Container.
+    *
+    * @exception IllegalArgumentException If id is not one of
+    * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
+    * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
+    * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS,
+    * or KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS,
+    * or if keystrokes contains null, or if any Object in keystrokes is not an
+    * AWTKeyStroke, or if any keystroke represents a KEY_TYPED event, or if any
+    * keystroke already maps to another focus traversal operation for this
+    * Container.
+    *
+    * @since 1.4
+    */
+   public void setFocusTraversalKeys(int id, Set keystrokes)
+   {
+     if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS)
+       throw new IllegalArgumentException ();
+ 
+     if (keystrokes == null)
+       {
+         Container parent = getParent ();
+ 
+         while (parent != null)
+           {
+             if (parent.areFocusTraversalKeysSet (id))
+               {
+                 keystrokes = parent.getFocusTraversalKeys (id);
+                 break;
+               }
+             parent = parent.getParent ();
+           }
+ 
+         if (keystrokes == null)
+           keystrokes = KeyboardFocusManager.getCurrentKeyboardFocusManager ().
+             getDefaultFocusTraversalKeys (id);
+       }
+ 
+     Set sa;
+     Set sb;
+     Set sc;
+     String name;
+     switch (id)
+       {
+       case KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS:
+         sa = getFocusTraversalKeys
+           (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
+         sb = getFocusTraversalKeys
+           (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS);
+         sc = getFocusTraversalKeys
+           (KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS);
+         name = "forwardFocusTraversalKeys";
+         break;
+       case KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS:
+         sa = getFocusTraversalKeys
+           (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
+         sb = getFocusTraversalKeys
+           (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS);
+         sc = getFocusTraversalKeys
+           (KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS);
+         name = "backwardFocusTraversalKeys";
+         break;
+       case KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS:
+         sa = getFocusTraversalKeys
+           (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
+         sb = getFocusTraversalKeys
+           (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
+         sc = getFocusTraversalKeys
+           (KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS);
+         name = "upCycleFocusTraversalKeys";
+         break;
+       case KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS:
+         sa = getFocusTraversalKeys
+           (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
+         sb = getFocusTraversalKeys
+           (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
+         sc = getFocusTraversalKeys
+           (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS);
+         name = "downCycleFocusTraversalKeys";
+         break;
+       default:
+         throw new IllegalArgumentException ();
+       }
+ 
+     int i = keystrokes.size ();
+     Iterator iter = keystrokes.iterator ();
+ 
+     while (--i >= 0)
+       {
+         Object o = iter.next ();
+         if (!(o instanceof AWTKeyStroke)
+             || sa.contains (o) || sb.contains (o) || sc.contains (o)
+             || ((AWTKeyStroke) o).keyCode == KeyEvent.VK_UNDEFINED)
+           throw new IllegalArgumentException ();
+       }
+ 
+     if (focusTraversalKeys == null)
+       focusTraversalKeys = new Set[4];
+ 
+     keystrokes = Collections.unmodifiableSet (new HashSet (keystrokes));
+     firePropertyChange (name, focusTraversalKeys[id], keystrokes);
+ 
+     focusTraversalKeys[id] = keystrokes;
+   }
+   
+   /**
+    * Returns the Set of focus traversal keys for a given traversal operation for
+    * this Container.
+    *
+    * @exception IllegalArgumentException If id is not one of
+    * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
+    * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
+    * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS,
+    * or KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS.
+    *
+    * @since 1.4
+    */
+   public Set getFocusTraversalKeys (int id)
+   {
+     if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS)
+       throw new IllegalArgumentException ();
+ 
+     Set s = null;
+ 
+     if (focusTraversalKeys != null)
+       s = focusTraversalKeys[id];
+ 
+     if (s == null && parent != null)
+       s = parent.getFocusTraversalKeys (id);
+ 
+     return s == null ? (KeyboardFocusManager.getCurrentKeyboardFocusManager()
+                         .getDefaultFocusTraversalKeys(id)) : s;
+   }
+ 
+   /**
+    * Returns whether the Set of focus traversal keys for the given focus
+    * traversal operation has been explicitly defined for this Container.
+    * If this method returns false, this Container is inheriting the Set from
+    * an ancestor, or from the current KeyboardFocusManager.
+    *
+    * @exception IllegalArgumentException If id is not one of
+    * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
+    * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
+    * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS,
+    * or KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS.
+    *
+    * @since 1.4
+    */
+   public boolean areFocusTraversalKeysSet (int id)
+   {
+     if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS)
+       throw new IllegalArgumentException ();
+ 
+     return focusTraversalKeys != null && focusTraversalKeys[id] != null;
+   }
+ 
+   /**
+    * Check whether the given Container is the focus cycle root of this
+    * Container's focus traversal cycle.  If this Container is a focus
+    * cycle root itself, then it will be in two different focus cycles
+    * -- it's own, and that of its ancestor focus cycle root's.  In
+    * that case, if <code>c</code> is either of those containers, this
+    * method will return true.
+    *
+    * @param c the candidate Container
+    *
+    * @return true if c is the focus cycle root of the focus traversal
+    * cycle to which this Container belongs, false otherwise
+    *
+    * @since 1.4
+    */
+   public boolean isFocusCycleRoot (Container c)
+   {
+     if (this == c
+         && isFocusCycleRoot ())
+       return true;
+ 
+     Container ancestor = getFocusCycleRootAncestor ();
+ 
+     if (c == ancestor)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * If this Container is a focus cycle root, set the focus traversal
+    * policy that determines the focus traversal order for its
+    * children.  If non-null, this policy will be inherited by all
+    * inferior focus cycle roots.  If <code>policy</code> is null, this
+    * Container will inherit its policy from the closest ancestor focus
+    * cycle root that's had its policy set.
+    *
+    * @param policy the new focus traversal policy for this Container or null
+    *
+    * @since 1.4
+    */
+   public void setFocusTraversalPolicy (FocusTraversalPolicy policy)
+   {
+     focusTraversalPolicy = policy;
+   }
+ 
+   /**
+    * Return the focus traversal policy that determines the focus
+    * traversal order for this Container's children.  This method
+    * returns null if this Container is not a focus cycle root.  If the
+    * focus traversal policy has not been set explicitly, then this
+    * method will return an ancestor focus cycle root's policy instead.
+    *
+    * @return this Container's focus traversal policy or null
+    *
+    * @since 1.4
+    */
+   public FocusTraversalPolicy getFocusTraversalPolicy ()
+   {
+     if (!isFocusCycleRoot ())
+       return null;
+ 
+     if (focusTraversalPolicy == null)
+       {
+         Container ancestor = getFocusCycleRootAncestor ();
+ 
+ 	if (ancestor != this)
+ 	  return ancestor.getFocusTraversalPolicy ();
+ 	else
+ 	  {
+ 	    KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ 
+ 	    return manager.getDefaultFocusTraversalPolicy ();
+ 	  }
+       }
+     else
+       return focusTraversalPolicy;
+   }
+ 
+   /**
+    * Check whether this Container's focus traversal policy has been
+    * explicitly set.  If it has not, then this Container will inherit
+    * its focus traversal policy from one of its ancestor focus cycle
+    * roots.
+    *
+    * @return true if focus traversal policy is set, false otherwise
+   */
+   public boolean isFocusTraversalPolicySet ()
+   {
+     return focusTraversalPolicy == null;
+   }
+ 
+   /**
+    * Set whether or not this Container is the root of a focus
+    * traversal cycle.  This Container's focus traversal policy
+    * determines the order of focus traversal.  Some policies prevent
+    * the focus from being transferred between two traversal cycles
+    * until an up or down traversal operation is performed.  In that
+    * case, normal traversal (not up or down) is limited to this
+    * Container and all of this Container's descendents that are not
+    * descendents of inferior focus cycle roots.  In the default case
+    * however, ContainerOrderFocusTraversalPolicy is in effect, and it
+    * supports implicit down-cycle traversal operations.
+    *
+    * @param focusCycleRoot true if this is a focus cycle root, false otherwise
+    *
+    * @since 1.4
+    */
+   public void setFocusCycleRoot (boolean focusCycleRoot)
+   {
+     this.focusCycleRoot = focusCycleRoot;
+   }
+ 
+   /**
+    * Check whether this Container is a focus cycle root.
+    *
+    * @return true if this is a focus cycle root, false otherwise
+    *
+    * @since 1.4
+    */
+   public boolean isFocusCycleRoot ()
+   {
+     return focusCycleRoot;
+   }
+ 
+   /**
+    * Transfer focus down one focus traversal cycle.  If this Container
+    * is a focus cycle root, then its default component becomes the
+    * focus owner, and this Container becomes the current focus cycle
+    * root.  No traversal will occur if this Container is not a focus
+    * cycle root.
+    *
+    * @since 1.4
+    */
+   public void transferFocusDownCycle ()
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ 
+     manager.downFocusCycle (this);
+   }
+ 
+   /**
+    * Sets the ComponentOrientation property of this container and all components
+    * contained within it.
+    *
+    * @exception NullPointerException If orientation is null
+    *
+    * @since 1.4
+    */
+   public void applyComponentOrientation (ComponentOrientation orientation)
+   {
+     if (orientation == null)
+       throw new NullPointerException ();
+   }
+   
+   public void addPropertyChangeListener (PropertyChangeListener listener)
+   {
+     if (listener == null)
+       return;
+ 
+     if (changeSupport == null)
+       changeSupport = new PropertyChangeSupport (this);
+ 
+     changeSupport.addPropertyChangeListener (listener);
+   }
+   
+   public void addPropertyChangeListener (String name,
+                                          PropertyChangeListener listener)
+   {
+     if (listener == null)
+       return;
+     
+     if (changeSupport == null)
+       changeSupport = new PropertyChangeSupport (this);
+ 
+     changeSupport.addPropertyChangeListener (name, listener);
+   }
+ 
+   // Hidden helper methods.
+ 
+   /**
+    * Perform a graphics operation on the children of this container.
+    * For each applicable child, the visitChild() method will be called
+    * to perform the graphics operation.
+    *
+    * @param gfx The graphics object that will be used to derive new
+    * graphics objects for the children.
+    *
+    * @param visitor Object encapsulating the graphics operation that
+    * should be performed.
+    *
+    * @param lightweightOnly If true, only lightweight components will
+    * be visited.
+    */
+   private void visitChildren(Graphics gfx, GfxVisitor visitor,
+                              boolean lightweightOnly)
+   {
+     synchronized (getTreeLock ())
+       {
+         for (int i = ncomponents - 1; i >= 0; --i)
+           {
+             Component comp = component[i];
+             boolean applicable = comp.isVisible()
+               && (comp.isLightweight() || !lightweightOnly);
+ 
+             if (applicable)
+               visitChild(gfx, visitor, comp);
+ 	  }
+       }
+   }
+ 
+   /**
+    * Perform a graphics operation on a child. A translated and clipped
+    * graphics object will be created, and the visit() method of the
+    * visitor will be called to perform the operation.
+    *
+    * @param gfx The graphics object that will be used to derive new
+    * graphics objects for the child.
+    *
+    * @param visitor Object encapsulating the graphics operation that
+    * should be performed.
+    *
+    * @param comp The child component that should be visited.
+    */
+   private void visitChild(Graphics gfx, GfxVisitor visitor,
+                           Component comp)
+   {
+     Rectangle bounds = comp.getBounds();
+     Rectangle oldClip = gfx.getClipBounds();
+     if (oldClip == null)
+       oldClip = bounds;
+ 
+     Rectangle clip = oldClip.intersection(bounds);
+ 
+     if (clip.isEmpty()) return;
+ 
+     boolean clipped = false;
+     boolean translated = false;
+     try
+       {
+         gfx.setClip(clip.x, clip.y, clip.width, clip.height);
+         clipped = true;
+         gfx.translate(bounds.x, bounds.y);
+         translated = true;
+         visitor.visit(comp, gfx);
+       }
+     finally
+       {
+         if (translated)
+           gfx.translate (-bounds.x, -bounds.y);
+         if (clipped)
+           gfx.setClip (oldClip.x, oldClip.y, oldClip.width, oldClip.height);
+       }
+   }
+ 
+   void dispatchEventImpl(AWTEvent e)
+   {
+     // Give lightweight dispatcher a chance to handle it.
+     if (dispatcher != null && dispatcher.handleEvent (e))
+       return;
+ 
+     if ((e.id <= ContainerEvent.CONTAINER_LAST
+              && e.id >= ContainerEvent.CONTAINER_FIRST)
+         && (containerListener != null
+             || (eventMask & AWTEvent.CONTAINER_EVENT_MASK) != 0))
+       processEvent(e);
+     else
+       super.dispatchEventImpl(e);
+   }
+ 
+   /**
+    * Tests if this container has an interest in the given event id.
+    *
+    * @param eventId The event id to check.
+    *
+    * @return <code>true</code> if a listener for the event id exists or
+    *         if the eventMask is set for the event id.
+    *
+    * @see java.awt.Component#eventTypeEnabled(int)
+    */
+   boolean eventTypeEnabled(int eventId)
+   {
+     if(eventId <= ContainerEvent.CONTAINER_LAST 
+        && eventId >= ContainerEvent.CONTAINER_FIRST)
+       return containerListener != null
+         || (eventMask & AWTEvent.CONTAINER_EVENT_MASK) != 0;
+       else 
+         return super.eventTypeEnabled(eventId);
+   }
+ 
+   // This is used to implement Component.transferFocus.
+   Component findNextFocusComponent(Component child)
+   {
+     synchronized (getTreeLock ())
+       {
+         int start, end;
+         if (child != null)
+           {
+             for (start = 0; start < ncomponents; ++start)
+               {
+                 if (component[start] == child)
+                   break;
+               }
+             end = start;
+             // This special case lets us be sure to terminate.
+             if (end == 0)
+               end = ncomponents;
+             ++start;
+           }
+         else
+           {
+             start = 0;
+             end = ncomponents;
+           }
+ 
+         for (int j = start; j != end; ++j)
+           {
+             if (j >= ncomponents)
+               {
+                 // The JCL says that we should wrap here.  However, that
+                 // seems wrong.  To me it seems that focus order should be
+                 // global within in given window.  So instead if we reach
+                 // the end we try to look in our parent, if we have one.
+                 if (parent != null)
+                   return parent.findNextFocusComponent(this);
+                 j -= ncomponents;
+               }
+             if (component[j] instanceof Container)
+               {
+                 Component c = component[j];
+                 c = c.findNextFocusComponent(null);
+                 if (c != null)
+                   return c;
+               }
+             else if (component[j].isFocusTraversable())
+               return component[j];
+           }
+ 
+         return null;
+       }
+   }
+ 
+   private void addNotifyContainerChildren()
+   {
+     synchronized (getTreeLock ())
+       {
+         for (int i = ncomponents;  --i >= 0; )
+           {
+             component[i].addNotify();
+             if (component[i].isLightweight ())
+ 	      {
+ 
+                 // If we're not lightweight, and we just got a lightweight
+                 // child, we need a lightweight dispatcher to feed it events.
+                 if (!this.isLightweight() && dispatcher == null) 
+                   dispatcher = new LightweightDispatcher (this);
+ 
+                 if (dispatcher != null)
+                   dispatcher.enableEvents(component[i].eventMask);
+ 
+ 		enableEvents(component[i].eventMask);
+ 		if (peer != null && !isLightweight ())
+ 		  enableEvents (AWTEvent.PAINT_EVENT_MASK);
+ 	      }
+           }
+       }
+   }
+ 
+   /**
+    * Deserialize this Container:
+    * <ol>
+    * <li>Read from the stream the default serializable fields.</li>
+    * <li>Read a list of serializable ContainerListeners as optional
+    * data.  If the list is null, no listeners will be registered.</li>
+    * <li>Read this Container's FocusTraversalPolicy as optional data.
+    * If this is null, then this Container will use a
+    * DefaultFocusTraversalPolicy.</li>
+    * </ol>
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if deserialization fails
+    * @throws IOException if the stream fails
+    */
+   private void readObject (ObjectInputStream s)
+     throws ClassNotFoundException, IOException
+   {
+     s.defaultReadObject ();
+     String key = (String) s.readObject ();
+     while (key != null)
+       {
+         Object object = s.readObject ();
+         if ("containerL".equals (key))
+           addContainerListener((ContainerListener) object);
+         // FIXME: under what key is the focus traversal policy stored?
+         else if ("focusTraversalPolicy".equals (key))
+           setFocusTraversalPolicy ((FocusTraversalPolicy) object);
+ 
+         key = (String) s.readObject();
+       }
+   }
+ 
+   /**
+    * Serialize this Container:
+    * <ol>
+    * <li>Write to the stream the default serializable fields.</li>
+    * <li>Write the list of serializable ContainerListeners as optional
+    * data.</li>
+    * <li>Write this Container's FocusTraversalPolicy as optional data.</li>
+    * </ol>
+    *
+    * @param s the stream to write to
+    * @throws IOException if the stream fails
+    */
+   private void writeObject (ObjectOutputStream s) throws IOException
+   {
+     s.defaultWriteObject ();
+     AWTEventMulticaster.save (s, "containerL", containerListener);
+     if (focusTraversalPolicy instanceof Serializable)
+       s.writeObject (focusTraversalPolicy);
+     else
+       s.writeObject (null);
+   }
+ 
+   // Nested classes.
+ 
+   /* The following classes are used in concert with the
+      visitChildren() method to implement all the graphics operations
+      that requires traversal of the containment hierarchy. */
+ 
+   abstract static class GfxVisitor
+   {
+     public abstract void visit(Component c, Graphics gfx);
+   }
+ 
+   static class GfxPaintVisitor extends GfxVisitor
+   {
+     public static final GfxVisitor INSTANCE = new GfxPaintVisitor();
+     
+     public void visit(Component c, Graphics gfx)
+     {
+       c.paint(gfx);
+     }
+   }
+ 
+   static class GfxPrintVisitor extends GfxVisitor
+   {
+     public static final GfxVisitor INSTANCE = new GfxPrintVisitor();
+     
+     public void visit(Component c, Graphics gfx)
+     {
+       c.print(gfx);
+     }
+   }
+ 
+   static class GfxPaintAllVisitor extends GfxVisitor
+   {
+     public static final GfxVisitor INSTANCE = new GfxPaintAllVisitor();
+ 
+     public void visit(Component c, Graphics gfx)
+     {
+       c.paintAll(gfx);
+     }
+   }
+ 
+   static class GfxPrintAllVisitor extends GfxVisitor
+   {
+     public static final GfxVisitor INSTANCE = new GfxPrintAllVisitor();
+ 
+     public void visit(Component c, Graphics gfx)
+     {
+       c.printAll(gfx);
+     }
+   }
+ 
+   /**
+    * This class provides accessibility support for subclasses of container.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    *
+    * @since 1.3
+    */
+   protected class AccessibleAWTContainer extends AccessibleAWTComponent
+   {
+     /**
+      * Compatible with JDK 1.4+.
+      */
+     private static final long serialVersionUID = 5081320404842566097L;
+ 
+     /**
+      * The handler to fire PropertyChange when children are added or removed.
+      *
+      * @serial the handler for property changes
+      */
+     protected ContainerListener accessibleContainerHandler
+       = new AccessibleContainerHandler();
+ 
+     /**
+      * The default constructor.
+      */
+     protected AccessibleAWTContainer()
+     {
+       Container.this.addContainerListener(accessibleContainerHandler);
+     }
+ 
+     /**
+      * Return the number of accessible children of the containing accessible
+      * object (at most the total number of its children).
+      *
+      * @return the number of accessible children
+      */
+     public int getAccessibleChildrenCount()
+     {
+       synchronized (getTreeLock ())
+         {
+           int count = 0;
+           int i = component == null ? 0 : component.length;
+           while (--i >= 0)
+             if (component[i] instanceof Accessible)
+               count++;
+           return count;
+         }
+     }
+ 
+     /**
+      * Return the nth accessible child of the containing accessible object.
+      *
+      * @param i the child to grab, zero-based
+      * @return the accessible child, or null
+      */
+     public Accessible getAccessibleChild(int i)
+     {
+       synchronized (getTreeLock ())
+         {
+           if (component == null)
+             return null;
+           int index = -1;
+           while (i >= 0 && ++index < component.length)
+             if (component[index] instanceof Accessible)
+               i--;
+           if (i < 0)
+             return (Accessible) component[index];
+           return null;
+         }
+     }
+ 
+     /**
+      * Return the accessible child located at point (in the parent's
+      * coordinates), if one exists.
+      *
+      * @param p the point to look at
+      *
+      * @return an accessible object at that point, or null
+      *
+      * @throws NullPointerException if p is null
+      */
+     public Accessible getAccessibleAt(Point p)
+     {
+       Component c = getComponentAt(p.x, p.y);
+       return c != Container.this && c instanceof Accessible ? (Accessible) c
+         : null;
+     }
+ 
+     /**
+      * This class fires a <code>PropertyChange</code> listener, if registered,
+      * when children are added or removed from the enclosing accessible object.
+      *
+      * @author Eric Blake (ebb9@email.byu.edu)
+      *
+      * @since 1.3
+      */
+     protected class AccessibleContainerHandler implements ContainerListener
+     {
+       /**
+        * Default constructor.
+        */
+       protected AccessibleContainerHandler()
+       {
+         // Nothing to do here.
+       }
+ 
+       /**
+        * Fired when a component is added; forwards to the PropertyChange
+        * listener.
+        *
+        * @param e the container event for adding
+        */
+       public void componentAdded(ContainerEvent e)
+       {
+         AccessibleAWTContainer.this.firePropertyChange
+           (ACCESSIBLE_CHILD_PROPERTY, null, e.getChild());
+       }
+ 
+       /**
+        * Fired when a component is removed; forwards to the PropertyChange
+        * listener.
+        *
+        * @param e the container event for removing
+        */
+       public void componentRemoved(ContainerEvent e)
+       {
+         AccessibleAWTContainer.this.firePropertyChange
+           (ACCESSIBLE_CHILD_PROPERTY, e.getChild(), null);
+       }
+     } // class AccessibleContainerHandler
+   } // class AccessibleAWTContainer
+ } // class Container
+ 
+ /**
+  * There is a helper class implied from stack traces called
+  * LightweightDispatcher, but since it is not part of the public API,
+  * rather than mimic it exactly we write something which does "roughly
+  * the same thing".
+  */
+ class LightweightDispatcher implements Serializable
+ {
+   private static final long serialVersionUID = 5184291520170872969L;
+   private Container nativeContainer;
+   private Cursor nativeCursor;
+   private long eventMask;
+   
+   private transient Component pressedComponent;
+   private transient Component lastComponentEntered;
+   private transient int pressCount;
+   
+   LightweightDispatcher(Container c)
+   {
+     nativeContainer = c;
+   }
+ 
+   void enableEvents(long l)
+   {
+     eventMask |= l;
+   }
+ 
+   /**
+    * Returns the deepest visible descendent of parent that contains the 
+    * specified location and that is not transparent and MouseListener-less.
+    * @param parent the root component to begin the search
+    * @param x the x coordinate
+    * @param y the y coordinate
+    * @return null if <code>parent</code> doesn't contain the location, 
+    * parent if parent is not a container or has no child that contains the
+    * location, otherwise the appropriate component from the conditions
+    * above.
+    */
+   Component getDeepestComponentForMouseEventAt(Component parent, int x, int y)
+   {
+     if (parent == null || (! parent.contains(x, y)))
+       return null;
+ 
+     if (! (parent instanceof Container))
+       return parent;
+ 
+     Container c = (Container) parent;
+     return c.findComponentForMouseEventAt(x, y);
+   }
+   
+   Component acquireComponentForMouseEvent(MouseEvent me)
+   {
+     int x = me.getX ();
+     int y = me.getY ();
+ 
+     Component mouseEventTarget = null;
+     // Find the candidate which should receive this event.
+     Component parent = nativeContainer;
+     Component candidate = null;
+     Point p = me.getPoint();
+     while (candidate == null && parent != null)
+       {
+         candidate = getDeepestComponentForMouseEventAt(parent, p.x, p.y);
+         if (candidate == null || (candidate.eventMask & me.getID()) == 0)
+           {
+             candidate = null;
+             p = AWTUtilities.convertPoint(parent, p.x, p.y, parent.parent);
+             parent = parent.parent;
+           }
+       }
+ 
+     // If the only candidate we found was the native container itself,
+     // don't dispatch any event at all.  We only care about the lightweight
+     // children here.
+     if (candidate == nativeContainer)
+       candidate = null;
+ 
+     // If our candidate is new, inform the old target we're leaving.
+     if (lastComponentEntered != null
+         && lastComponentEntered.isShowing()
+         && lastComponentEntered != candidate)
+       {
+         // Old candidate could have been removed from 
+         // the nativeContainer so we check first.
+         if (AWTUtilities.isDescendingFrom(lastComponentEntered,
+                                           nativeContainer))
+           {
+             Point tp = AWTUtilities.convertPoint(nativeContainer, 
+                                                  x, y, lastComponentEntered);
+             MouseEvent exited = new MouseEvent (lastComponentEntered, 
+                                                 MouseEvent.MOUSE_EXITED,
+                                                 me.getWhen (), 
+                                                 me.getModifiersEx (), 
+                                                 tp.x, tp.y,
+                                                 me.getClickCount (),
+                                                 me.isPopupTrigger (),
+                                                 me.getButton ());
+             lastComponentEntered.dispatchEvent (exited); 
+           }
+         lastComponentEntered = null;
+       }
+ 
+     // If we have a candidate, maybe enter it.
+     if (candidate != null)
+       {
+         mouseEventTarget = candidate;
+         if (candidate.isLightweight() 
+             && candidate.isShowing()
+             && candidate != nativeContainer
+             && candidate != lastComponentEntered)
+ 	  {
+             lastComponentEntered = mouseEventTarget;
+             Point cp = AWTUtilities.convertPoint(nativeContainer, 
+                                                  x, y, lastComponentEntered);
+             MouseEvent entered = new MouseEvent (lastComponentEntered, 
+                                                  MouseEvent.MOUSE_ENTERED,
+                                                  me.getWhen (), 
+                                                  me.getModifiersEx (), 
+                                                  cp.x, cp.y,
+                                                  me.getClickCount (),
+                                                  me.isPopupTrigger (),
+                                                  me.getButton ());
+             lastComponentEntered.dispatchEvent (entered);
+           }
+       }
+ 
+     // Check which buttons where pressed except the last button that
+     // changed state.
+     int modifiers = me.getModifiersEx() & (MouseEvent.BUTTON1_DOWN_MASK
+                                            | MouseEvent.BUTTON2_DOWN_MASK
+                                            | MouseEvent.BUTTON3_DOWN_MASK);
+     switch(me.getButton())
+       {
+       case MouseEvent.BUTTON1:
+         modifiers &= ~MouseEvent.BUTTON1_DOWN_MASK;
+         break;
+       case MouseEvent.BUTTON2:
+         modifiers &= ~MouseEvent.BUTTON2_DOWN_MASK;
+         break;
+       case MouseEvent.BUTTON3:
+         modifiers &= ~MouseEvent.BUTTON3_DOWN_MASK;
+         break;
+       }
+ 
+     if (me.getID() == MouseEvent.MOUSE_PRESSED && modifiers > 0
+         || me.getID() == MouseEvent.MOUSE_DRAGGED)
+       {
+         // If any of the following events occur while a button is held down,
+         // they should be dispatched to the same component to which the
+         // original MOUSE_PRESSED event was dispatched:
+         //   - MOUSE_PRESSED: another button pressed while the first is held
+         //     down
+         //   - MOUSE_DRAGGED
+         if (AWTUtilities.isDescendingFrom(pressedComponent, nativeContainer))
+           mouseEventTarget = pressedComponent;
+       }
+     else if (me.getID() == MouseEvent.MOUSE_CLICKED)
+       {
+         // Don't dispatch CLICKED events whose target is not the same as the
+         // target for the original PRESSED event.
+         if (candidate != pressedComponent)
+           {
+             mouseEventTarget = null;
+             pressCount = 0;
+           }
+         else if (pressCount == 0)
+           pressedComponent = null;
+       }
+     return mouseEventTarget;
+   }
+ 
+   boolean handleEvent(AWTEvent e)
+   {
+     if (e instanceof MouseEvent)
+       {
+         MouseEvent me = (MouseEvent) e;
+ 
+         // Make the LightWeightDispatcher reentrant. This is necessary when
+         // a lightweight component does its own modal event queue.
+         Component mouseEventTarget = acquireComponentForMouseEvent(me);
+ 
+         // Avoid dispatching ENTERED and EXITED events twice.
+         if (mouseEventTarget != null
+             && mouseEventTarget.isShowing()
+             && e.getID() != MouseEvent.MOUSE_ENTERED
+             && e.getID() != MouseEvent.MOUSE_EXITED)
+           {
+             switch (e.getID())
+               {
+               case MouseEvent.MOUSE_PRESSED:
+                 if (pressCount++ == 0)
+                   pressedComponent = mouseEventTarget;
+                 break;
+               case MouseEvent.MOUSE_RELEASED:
+                 // Clear our memory of the original PRESSED event, only if
+                 // we're not expecting a CLICKED event after this. If
+                 // there is a CLICKED event after this, it will do clean up.
+                 if (--pressCount == 0
+                     && mouseEventTarget != pressedComponent)
+                   {
+                     pressedComponent = null;
+                     pressCount = 0;
+                   }
+                 break;
+               }
+ 
+             MouseEvent newEvt =
+               AWTUtilities.convertMouseEvent(nativeContainer, me,
+                                              mouseEventTarget);
+             mouseEventTarget.dispatchEvent(newEvt);
+ 
+             if (newEvt.isConsumed())
+               e.consume();
+           }
+       }
+ 
+     return e.isConsumed();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/ContainerOrderFocusTraversalPolicy.java gcc-4.1.0/libjava/classpath/java/awt/ContainerOrderFocusTraversalPolicy.java
*** gcc-4.0.2/libjava/classpath/java/awt/ContainerOrderFocusTraversalPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/ContainerOrderFocusTraversalPolicy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,413 ----
+ /* ContainerOrderFocusTraversalPolicy.java -- 
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * ContainerOrderFocusTraversalPolicy defines a focus traversal order
+  * based on the order in which Components were packed in a Container.
+  * This policy performs a pre-order traversal of the Component
+  * hierarchy starting from a given focus cycle root.  Portions of the
+  * hierarchy that are not visible and displayable are skipped.
+  *
+  * By default, this policy transfers focus down-cycle implicitly.
+  * That is, if a forward traversal is requested on a focus cycle root
+  * and the focus cycle root has focusable children, the focus will
+  * automatically be transfered down to the lower focus cycle.
+  *
+  * The default implementation of accept accepts only Components that
+  * are visible, displayable, enabled and focusable.  Derived classes
+  * can override these acceptance criteria by overriding accept.
+  *
+  * @author Michael Koch
+  * @author Thomas Fitzsimmons (fitzsim@redhat.com)
+  * @since 1.4
+  */
+ public class ContainerOrderFocusTraversalPolicy extends FocusTraversalPolicy
+   implements Serializable
+ {
+   /**
+    * Compatible to JDK 1.4+
+    */
+   static final long serialVersionUID = 486933713763926351L;
+ 
+   /**
+    * True if implicit down cycling is enabled.
+    */
+   private boolean implicitDownCycleTraversal = true;
+ 
+   /**
+    * Creates the <code>ContainerOrderFocusTraversalPolicy</code> object.
+    */
+   public ContainerOrderFocusTraversalPolicy ()
+   {
+     // Nothing to do here
+   }
+ 
+   /**
+    * Returns the Component that should receive the focus after current.
+    * root must be a focus cycle root of current.
+    *
+    * @param root a focus cycle root of current
+    * @param current a (possibly indirect) child of root, or root itself
+    *
+    * @return the next Component in the focus traversal order for root,
+    * or null if no acceptable Component exists.
+    *
+    * @exception IllegalArgumentException If root is not a focus cycle
+    * root of current, or if either root or current is null.
+    */
+   public Component getComponentAfter (Container root, Component current)
+   {
+     if (root == null)
+       throw new IllegalArgumentException ("focus cycle root is null");
+     if (current == null)
+       throw new IllegalArgumentException ("current component is null");
+ 
+     if (!root.isFocusCycleRoot ())
+       throw new IllegalArgumentException ("root is not a focus cycle root");
+ 
+     Container ancestor = current.getFocusCycleRootAncestor ();
+     Container prevAncestor = ancestor;
+     while (ancestor != root)
+       {
+ 	ancestor = current.getFocusCycleRootAncestor ();
+ 	if (ancestor == prevAncestor)
+ 	  {
+ 	    // We've reached the top focus cycle root ancestor.  Check
+ 	    // if it is root.
+ 	    if (ancestor != root)
+ 	      throw new IllegalArgumentException ("the given container is not"
+ 						  + " a focus cycle root of the"
+ 						  + " current component");
+ 	    else
+ 	      break;
+ 	  }
+ 	prevAncestor = ancestor;
+       }
+ 
+     // FIXME: is this the right thing to do here? It moves the context
+     // for traversal up one focus traversal cycle.  We'll need a test
+     // for this.
+     if ((Component) root == current)
+       root = current.getFocusCycleRootAncestor ();
+ 
+     // Check if we've reached the top of the component hierarchy.  If
+     // so then we want to loop around to the first component in the
+     // focus traversal cycle.
+     if (current instanceof Window)
+       return getFirstComponent ((Container) current);
+ 
+     Container parent = current.getParent ();
+ 
+     synchronized (parent.getTreeLock ())
+       {
+         Component[] components = parent.getComponents ();
+         int componentIndex = 0;
+         int numComponents = parent.getComponentCount ();
+ 
+         // Find component's index.
+         for (int i = 0; i < numComponents; i++)
+           {
+             if (components[i] == current)
+               componentIndex = i;
+           }
+ 
+         // Search forward for the next acceptable component.
+         for (int i = componentIndex + 1; i < numComponents; i++)
+           {
+             if (accept (components[i]))
+               return components[i];
+ 
+             if (components[i] instanceof Container)
+               {
+                 Component result = getFirstComponent ((Container) components[i]);
+ 
+                 if (result != null
+                     && implicitDownCycleTraversal)
+                   return result;
+               }
+           }
+ 
+         // No focusable components after current in its Container.  So go
+         // to the next Component after current's Container (parent).
+         Component result = getComponentAfter (root, parent);
+ 
+         return result;
+       }
+   }
+ 
+   /**
+    * Returns the Component that should receive the focus before
+    * <code>current</code>.  <code>root</code> must be a focus cycle
+    * root of current.
+    *
+    * @param root a focus cycle root of current
+    * @param current a (possibly indirect) child of root, or root itself
+    *
+    * @return the previous Component in the focus traversal order for
+    * root, or null if no acceptable Component exists.
+    *
+    * @exception IllegalArgumentException If root is not a focus cycle
+    * root of current, or if either root or current is null.
+    */
+   public Component getComponentBefore (Container root, Component current)
+   {
+     if (root == null)
+       throw new IllegalArgumentException ("focus cycle root is null");
+     if (current == null)
+       throw new IllegalArgumentException ("current component is null");
+ 
+     if (!root.isFocusCycleRoot ())
+       throw new IllegalArgumentException ("root is not a focus cycle root");
+ 
+     Container ancestor = current.getFocusCycleRootAncestor ();
+     Container prevAncestor = ancestor;
+     while (ancestor != root)
+       {
+ 	ancestor = current.getFocusCycleRootAncestor ();
+ 	if (ancestor == prevAncestor)
+ 	  {
+ 	    // We've reached the top focus cycle root ancestor.  Check
+ 	    // if it is root.
+ 	    if (ancestor != root)
+ 	      throw new IllegalArgumentException ("the given container is not"
+ 						  + " a focus cycle root of the"
+ 						  + " current component");
+ 	    else
+ 	      break;
+ 	  }
+ 	prevAncestor = ancestor;
+       }
+ 
+     // FIXME: is this the right thing to do here? It moves the context
+     // for traversal up one focus traversal cycle.  We'll need a test
+     // for this.
+     if ((Component) root == current)
+       root = current.getFocusCycleRootAncestor ();
+ 
+     // Check if we've reached the top of the component hierarchy.  If
+     // so then we want to loop around to the last component in the
+     // focus traversal cycle.
+     if (current instanceof Window)
+       return getLastComponent ((Container) current);
+ 
+     Container parent = current.getParent ();
+ 
+     synchronized (parent.getTreeLock ())
+       {
+         Component[] components = parent.getComponents ();
+         int componentIndex = 0;
+         int numComponents = parent.getComponentCount ();
+ 
+         // Find component's index.
+         for (int i = 0; i < numComponents; i++)
+           {
+             if (components[i] == current)
+               componentIndex = i;
+           }
+ 
+         // Search backward for the next acceptable component.
+         for (int i = componentIndex - 1; i >= 0; i--)
+           {
+             if (accept (components[i]))
+               return components[i];
+ 
+             if (components[i] instanceof Container)
+               {
+                 Component result = getLastComponent ((Container) components[i]);
+ 
+                 if (result != null)
+                   return result;
+               }
+           }
+ 
+         // No focusable components before current in its Container.  So go
+         // to the previous Component before current's Container (parent).
+         Component result = getComponentBefore (root, parent);
+ 
+         return result;
+       }
+   }
+ 
+   /**
+    * Returns the first Component of root that should receive the focus.
+    *
+    * @param root a focus cycle root
+    *
+    * @return the first Component in the focus traversal order for
+    * root, or null if no acceptable Component exists.
+    *
+    * @exception IllegalArgumentException If root is null.
+    */
+   public Component getFirstComponent(Container root)
+   {
+     if (root == null)
+       throw new IllegalArgumentException ();
+ 
+     if (!root.isVisible ()
+         || !root.isDisplayable ())
+       return null;
+ 
+     if (accept (root))
+       return root;
+ 
+     Component[] componentArray = root.getComponents ();
+     
+     for (int i = 0; i < componentArray.length; i++)
+       {
+         Component component = componentArray [i];
+ 	
+ 	if (accept (component))
+ 	  return component;
+ 
+         if (component instanceof Container)
+           {
+             Component result = getFirstComponent ((Container) component);
+ 
+             if (result != null)
+               return result;
+           }
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Returns the last Component of root that should receive the focus.
+    *
+    * @param root a focus cycle root
+    *
+    * @return the last Component in the focus traversal order for
+    * root, or null if no acceptable Component exists.
+    *
+    * @exception IllegalArgumentException If root is null.
+    */
+   public Component getLastComponent (Container root)
+   {
+     if (root == null)
+       throw new IllegalArgumentException ();
+ 
+     if (!root.isVisible ()
+         || !root.isDisplayable ())
+       return null;
+ 
+     if (accept (root))
+       return root;
+ 
+     Component[] componentArray = root.getComponents ();
+     
+     for (int i = componentArray.length - 1; i >= 0; i--)
+       {
+         Component component = componentArray [i];
+ 	
+ 	if (accept (component))
+ 	  return component;
+ 
+         if (component instanceof Container)
+           {
+             Component result = getLastComponent ((Container) component);
+ 
+             if (result != null)
+               return result;
+           }
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Returns the default Component of root that should receive the focus.
+    *
+    * @param root a focus cycle root
+    *
+    * @return the default Component in the focus traversal order for
+    * root, or null if no acceptable Component exists.
+    *
+    * @exception IllegalArgumentException If root is null.
+    */
+   public Component getDefaultComponent (Container root)
+   {
+     return getFirstComponent (root);
+   }
+ 
+   /**
+    * Set whether or not implicit down cycling is enabled.  If it is,
+    * then initiating a forward focus traversal operation onto a focus
+    * cycle root, the focus will be implicitly transferred into the
+    * root container's focus cycle.
+    *
+    * @param value the setting for implicit down cycling
+    */
+   public void setImplicitDownCycleTraversal (boolean value)
+   {
+     implicitDownCycleTraversal = value;
+   }
+ 
+   /**
+    * Check whether or not implicit down cycling is enabled.  If it is,
+    * then initiating a forward focus traversal operation onto a focus
+    * cycle root, the focus will be implicitly transferred into the
+    * root container's focus cycle.
+    *
+    * @return true if the focus will be transferred down-cycle
+    * implicitly
+    */
+   public boolean getImplicitDownCycleTraversal ()
+   {
+     return implicitDownCycleTraversal;
+   }
+ 
+   /**
+    * Check whether the given Component is an acceptable target for the
+    * keyboard input focus.
+    *
+    * @param current the Component to check
+    *
+    * @return true if current is acceptable, false otherwise
+    */
+   protected boolean accept (Component current)
+   {
+     return (current.visible
+             && current.isDisplayable ()
+             && current.enabled
+             && current.focusable);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Cursor.java gcc-4.1.0/libjava/classpath/java/awt/Cursor.java
*** gcc-4.0.2/libjava/classpath/java/awt/Cursor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Cursor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,224 ----
+ /* Copyright (C) 1999, 2000, 2002  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+   * This class represents various predefined cursor types.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class Cursor implements java.io.Serializable
+ {
+   static final long serialVersionUID = 8028237497568985504L;
+ 
+   /**
+   * Constant for the system default cursor type
+   */
+   public static final int DEFAULT_CURSOR = 0;
+ 
+   /**
+   * Constant for a cross-hair cursor.
+   */
+   public static final int CROSSHAIR_CURSOR = 1;
+ 
+   /**
+   * Constant for a cursor over a text field.
+   */
+   public static final int TEXT_CURSOR = 2;
+ 
+   /**
+   * Constant for a cursor to display while waiting for an action to complete.
+   */
+   public static final int WAIT_CURSOR = 3;
+ 
+   /**
+   * Cursor used over SW corner of window decorations.
+   */
+   public static final int SW_RESIZE_CURSOR = 4;
+ 
+   /**
+   * Cursor used over SE corner of window decorations.
+   */
+   public static final int SE_RESIZE_CURSOR = 5;
+ 
+   /**
+   * Cursor used over NW corner of window decorations.
+   */
+   public static final int NW_RESIZE_CURSOR = 6;
+ 
+   /**
+   * Cursor used over NE corner of window decorations.
+   */
+   public static final int NE_RESIZE_CURSOR = 7;
+ 
+   /**
+   * Cursor used over N edge of window decorations.
+   */
+   public static final int N_RESIZE_CURSOR = 8;
+ 
+   /**
+   * Cursor used over S edge of window decorations.
+   */
+   public static final int S_RESIZE_CURSOR = 9;
+ 
+   /**
+   * Cursor used over W edge of window decorations.
+   */
+   public static final int W_RESIZE_CURSOR = 10;
+ 
+   /**
+   * Cursor used over E edge of window decorations.
+   */
+   public static final int E_RESIZE_CURSOR = 11;
+ 
+   /**
+   * Constant for a hand cursor.
+   */
+   public static final int HAND_CURSOR = 12;
+ 
+   /**
+   * Constant for a cursor used during window move operations.
+   */
+   public static final int MOVE_CURSOR = 13;
+ 
+   public static final int CUSTOM_CURSOR    = 0xFFFFFFFF;
+ 
+   private static final int PREDEFINED_COUNT = 14;
+ 
+   protected static Cursor[] predefined = new Cursor[PREDEFINED_COUNT];
+   protected String name;
+ 
+   /**
+    * @serial The numeric id of this cursor.
+    */
+   int type;
+ 
+   /**
+    * Initializes a new instance of <code>Cursor</code> with the specified
+    * type.
+    *
+    * @param type The cursor type.
+    *
+    * @exception IllegalArgumentException If the specified cursor type is invalid
+    */
+   public Cursor(int type)
+   {
+     if (type < 0 || type >= PREDEFINED_COUNT)
+       throw new IllegalArgumentException ("invalid cursor " + type);
+ 
+     this.type = type;
+     // FIXME: lookup and set name?
+   }
+ 
+   /** This constructor is used internally only. 
+    * Application code should call Toolkit.createCustomCursor().
+    */
+   protected Cursor(String name)
+   {
+     this.name = name;
+     this.type = CUSTOM_CURSOR;
+   }
+ 
+   /**
+    * Returns an instance of <code>Cursor</code> for one of the specified
+    * predetermined types.
+    *
+    * @param type The type contant from this class.
+    *
+    * @return The requested predefined cursor.
+    *
+    * @exception IllegalArgumentException If the constant is not one of the
+    * predefined cursor type constants from this class.
+    */
+   public static Cursor getPredefinedCursor(int type)
+   {
+     if (type < 0 || type >= PREDEFINED_COUNT)
+       throw new IllegalArgumentException ("invalid cursor " + type);
+     if (predefined[type] == null)
+       predefined[type] = new Cursor(type);
+     return predefined[type];
+   }
+ 
+   /**
+    * Retrieves the system specific custom Cursor named Cursor names are,
+    * for example: "Invalid.16x16".
+    *
+    * @exception AWTException
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+    * returns true.
+    */
+   public static Cursor getSystemCustomCursor(String name)
+                                       throws AWTException
+   {
+     if (GraphicsEnvironment.isHeadless())
+       throw new HeadlessException ();
+ 
+     // FIXME
+     return null;
+   }
+ 
+   /**
+    * Returns an instance of the system default cursor type.
+    *
+    * @return The system default cursor.
+    */
+   public static Cursor getDefaultCursor()
+   {
+     return getPredefinedCursor(DEFAULT_CURSOR);
+   }
+ 
+   /**
+    * Returns the numeric type identifier for this cursor.
+    *
+    * @return The cursor id.
+    */
+   public int getType()
+   {
+     return type;
+   }
+ 
+   public String getName()
+   {
+     return name;
+   }
+ 
+   public String toString()
+   {
+     return (this.getClass() + "[" + getName() + "]");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/DefaultFocusTraversalPolicy.java gcc-4.1.0/libjava/classpath/java/awt/DefaultFocusTraversalPolicy.java
*** gcc-4.0.2/libjava/classpath/java/awt/DefaultFocusTraversalPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/DefaultFocusTraversalPolicy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* DefaultFocusTraversalPolicy.java -- 
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * DefaultFocusTraversalPolicy is the default focus traversal policy
+  * used by Containers.
+  *
+  * This policy sharpens ContainerOrderFocusTraversalPolicy's
+  * acceptance criteria, to reject those Components that have
+  * unfocusable peers.  Despite this extra strictness, this policy will
+  * always accept a Component that has explicitly been set focusable by
+  * any means.
+  *
+  * This AWT implementation assumes that the peers of the following
+  * Components are not focusable: Canvas, Panel, Label, ScrollPane,
+  * Scrollbar, Window, and any lightweight Component.
+  *
+  * A Component's focusability is independent of the focusability of
+  * its peer.
+  *
+  * @author Thomas Fitzsimmons (fitzsim@redhat.com)
+  * @since 1.4
+  */
+ public class DefaultFocusTraversalPolicy
+   extends ContainerOrderFocusTraversalPolicy
+ {
+   /**
+    * Construct a default focus traversal policy.
+    */
+   public DefaultFocusTraversalPolicy ()
+   {
+   }
+ 
+   /**
+    * Check whether a given Component would be acceptable as a focus
+    * owner.  The Component must be displayable, visible and enabled to
+    * be acceptable.  If the Component's focus traversability has been
+    * overridden, by overriding Component.isFocusTraversable or
+    * Component.isFocusable, or by calling Component.setFocusable, then
+    * the Component will be accepted if it is focusable.  If the
+    * Component uses the default focus traversable behaviour, then
+    * <code>comp</code> will always be rejected if it is a Canvas,
+    * Panel, Label, ScrollPane, Scrollbar, Window or lightweight
+    * Component.
+    *
+    * @param comp the Component to check
+    *
+    * @return true if the Component is an acceptable target for
+    * keyboard input focus, false otherwise
+    */
+   protected boolean accept (Component comp)
+   {
+     if (comp.visible
+ 	&& comp.isDisplayable ()
+ 	&& comp.enabled)
+       {
+ 	if (comp.isFocusTraversableOverridden != 0
+ 	    && (comp.isFocusTraversable () || comp.isFocusable()))
+           return true;
+         
+ 	if (!(comp instanceof Canvas
+               || comp instanceof Panel
+               || comp instanceof Label
+               || comp instanceof ScrollPane
+               || comp instanceof Scrollbar
+               || comp instanceof Window
+               || comp.isLightweight ()))
+           return true;
+       }
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/DefaultKeyboardFocusManager.java gcc-4.1.0/libjava/classpath/java/awt/DefaultKeyboardFocusManager.java
*** gcc-4.0.2/libjava/classpath/java/awt/DefaultKeyboardFocusManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/DefaultKeyboardFocusManager.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,536 ----
+ /* DefaultKeyboardFocusManager.java -- 
+    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ActionEvent;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.WindowEvent;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.Set;
+ import java.util.SortedSet;
+ import java.util.TreeSet;
+ 
+ // FIXME: finish documentation
+ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
+ {
+   /**
+    * This class models a request to delay the dispatch of events that
+    * arrive after a certain time, until a certain component becomes
+    * the focus owner.
+    */
+   private class EventDelayRequest implements Comparable
+   {
+     /** A {@link java.util.List} of {@link java.awt.event.KeyEvent}s
+         that are being delayed, pending this request's {@link
+         Component} receiving the keyboard focus. */
+     private LinkedList enqueuedKeyEvents = new LinkedList ();
+ 
+     /** An event timestamp.  All events that arrive after this time
+         should be queued in the {@link #enqueuedKeyEvents} {@link
+         java.util.List}. */
+     public long timestamp;
+     /** When this {@link Component} becomes focused, all events
+         between this EventDelayRequest and the next one in will be
+         dispatched from {@link #enqueuedKeyEvents}. */
+     public Component focusedComp;
+ 
+     /**
+      * Construct a new EventDelayRequest.
+      *
+      * @param timestamp events that arrive after this time will be
+      * delayed
+      * @param focusedComp the Component that needs to receive focus
+      * before events are dispatched
+      */
+     public EventDelayRequest (long timestamp, Component focusedComp)
+     {
+       this.timestamp = timestamp;
+       this.focusedComp = focusedComp;
+     }
+ 
+     public int compareTo (Object o)
+     {
+       if (!(o instanceof EventDelayRequest))
+         throw new ClassCastException ();
+ 
+       EventDelayRequest request = (EventDelayRequest) o;
+ 
+       if (request.timestamp < timestamp)
+         return -1;
+       else if (request.timestamp == timestamp)
+         return 0;
+       else
+         return 1;
+     }
+ 
+     public boolean equals (Object o)
+     {
+       if (!(o instanceof EventDelayRequest) || o == null)
+         return false;
+ 
+       EventDelayRequest request = (EventDelayRequest) o;
+ 
+       return (request.timestamp == timestamp
+               && request.focusedComp == focusedComp);
+     }
+ 
+     public void enqueueEvent (KeyEvent e)
+     {
+       KeyEvent last = (KeyEvent) enqueuedKeyEvents.getLast ();
+       if (last != null && e.getWhen () < last.getWhen ())
+         throw new RuntimeException ("KeyEvents enqueued out-of-order");
+ 
+       if (e.getWhen () <= timestamp)
+         throw new RuntimeException ("KeyEvents enqueued before starting timestamp");
+ 
+       enqueuedKeyEvents.add (e);
+     }
+ 
+     public void dispatchEvents ()
+     {
+       int size = enqueuedKeyEvents.size ();
+       for (int i = 0; i < size; i++)
+         {
+           KeyEvent e = (KeyEvent) enqueuedKeyEvents.remove (0);
+           dispatchKeyEvent (e);
+         }
+     }
+ 
+     public void discardEvents ()
+     {
+       enqueuedKeyEvents.clear ();
+     }
+   }
+ 
+   /**
+    * This flag indicates for which focus traversal key release event we
+    * possibly wait, before letting any more KEY_TYPED events through.
+    */
+   private AWTKeyStroke waitForKeyStroke = null;
+ 
+   /** The {@link java.util.SortedSet} of current 
+    * {@link EventDelayRequest}s. */
+   private SortedSet delayRequests = new TreeSet ();
+ 
+   public DefaultKeyboardFocusManager ()
+   {
+   }
+ 
+   public boolean dispatchEvent (AWTEvent e)
+   {
+     if (e instanceof WindowEvent)
+       {
+         Window target = (Window) e.getSource ();
+ 
+         if (e.id == WindowEvent.WINDOW_ACTIVATED)
+           setGlobalActiveWindow (target);
+         else if (e.id == WindowEvent.WINDOW_GAINED_FOCUS)
+           setGlobalFocusedWindow (target);
+         else if (e.id != WindowEvent.WINDOW_LOST_FOCUS
+                  && e.id != WindowEvent.WINDOW_DEACTIVATED)
+           return false;
+ 
+         redispatchEvent(target, e);
+         return true;
+       }
+     else if (e instanceof FocusEvent)
+       {
+         Component target = (Component) e.getSource ();
+ 
+         if (e.id == FocusEvent.FOCUS_GAINED)
+           {
+             if (! (target instanceof Window))
+               {
+                 if (((FocusEvent) e).isTemporary ())
+                   setGlobalFocusOwner (target);
+                 else
+                   setGlobalPermanentFocusOwner (target);
+               }
+ 
+             // Keep track of this window's focus owner.
+ 
+             // Find the target Component's top-level ancestor.  target
+             // may be a window.
+             Container parent = target.getParent ();
+ 
+             while (parent != null
+                    && !(parent instanceof Window))
+               parent = parent.getParent ();
+ 
+             // If the parent is null and target is not a window, then target is an
+             // unanchored component and so we don't want to set the focus owner.
+             if (! (parent == null && ! (target instanceof Window)))
+               {
+                 Window toplevel = parent == null ?
+                   (Window) target : (Window) parent;
+ 
+                 Component focusOwner = getFocusOwner ();
+                 if (focusOwner != null
+                     && ! (focusOwner instanceof Window))
+                   toplevel.setFocusOwner (focusOwner);
+               }
+           }
+         else if (e.id == FocusEvent.FOCUS_LOST)
+           {
+             if (((FocusEvent) e).isTemporary ())
+               setGlobalFocusOwner (null);
+             else
+               setGlobalPermanentFocusOwner (null);
+           }
+ 
+         redispatchEvent(target, e);
+ 
+         return true;
+       }
+     else if (e instanceof KeyEvent)
+       {
+         // Loop through all registered KeyEventDispatchers, giving
+         // each a chance to handle this event.
+         Iterator i = getKeyEventDispatchers().iterator();
+ 
+         while (i.hasNext ())
+           {
+             KeyEventDispatcher dispatcher = (KeyEventDispatcher) i.next ();
+             if (dispatcher.dispatchKeyEvent ((KeyEvent) e))
+               return true;
+           }
+ 
+         // processKeyEvent checks if this event represents a focus
+         // traversal key stroke.
+         Component focusOwner = getGlobalPermanentFocusOwner ();
+ 
+         if (focusOwner != null)
+           processKeyEvent (focusOwner, (KeyEvent) e);
+ 
+         if (e.isConsumed ())
+           return true;
+ 
+         if (enqueueKeyEvent ((KeyEvent) e))
+           // This event was enqueued for dispatch at a later time.
+           return true;
+         else
+           // This event wasn't handled by any of the registered
+           // KeyEventDispatchers, and wasn't enqueued for dispatch
+           // later, so send it to the default dispatcher.
+           return dispatchKeyEvent ((KeyEvent) e);
+       }
+ 
+     return false;
+   }
+ 
+   private boolean enqueueKeyEvent (KeyEvent e)
+   {
+     Iterator i = delayRequests.iterator ();
+     boolean oneEnqueued = false;
+     while (i.hasNext ())
+       {
+         EventDelayRequest request = (EventDelayRequest) i.next ();
+         if (e.getWhen () > request.timestamp)
+           {
+             request.enqueueEvent (e);
+             oneEnqueued = true;
+           }
+       }
+     return oneEnqueued;
+   }
+ 
+   public boolean dispatchKeyEvent (KeyEvent e)
+   {
+     Component focusOwner = getGlobalPermanentFocusOwner ();
+ 
+     if (focusOwner != null)
+       redispatchEvent(focusOwner, e);
+ 
+     // Loop through all registered KeyEventPostProcessors, giving
+     // each a chance to process this event.
+     Iterator i = getKeyEventPostProcessors().iterator();
+ 
+     while (i.hasNext ())
+       {
+         KeyEventPostProcessor processor = (KeyEventPostProcessor) i.next ();
+         if (processor.postProcessKeyEvent ((KeyEvent) e))
+           return true;
+       }
+ 
+     // The event hasn't been consumed yet.  Check if it is an
+     // MenuShortcut.
+     if (postProcessKeyEvent (e))
+       return true;
+ 
+     // Always return true.
+     return true;
+   }
+ 
+   public boolean postProcessKeyEvent (KeyEvent e)
+   {
+     // Check if this event represents a menu shortcut.
+ 
+     // MenuShortcuts are activated by Ctrl- KeyEvents, only on KEY_PRESSED.
+     int modifiers = e.getModifiersEx ();
+     if (e.getID() == KeyEvent.KEY_PRESSED
+         && (modifiers & KeyEvent.CTRL_DOWN_MASK) != 0)
+       {
+         Window focusedWindow = getGlobalFocusedWindow ();
+         if (focusedWindow instanceof Frame)
+           {
+             MenuBar menubar = ((Frame) focusedWindow).getMenuBar ();
+ 
+             if (menubar != null)
+               {
+                 // If there's a menubar, loop through all menu items,
+                 // checking whether each one has a shortcut, and if
+                 // so, whether this key event should activate it.
+                 int numMenus = menubar.getMenuCount ();
+ 
+                 for (int i = 0; i < numMenus; i++)
+                   {
+                     Menu menu = menubar.getMenu (i);
+                     int numItems = menu.getItemCount ();
+ 
+                     for (int j = 0; j < numItems; j++)
+                       {
+                         MenuItem item = menu.getItem (j);
+                         MenuShortcut shortcut = item.getShortcut ();
+ 
+                         if (item.isEnabled() && shortcut != null)
+                           {
+                             // Dispatch a new ActionEvent if:
+                             //
+                             //     a) this is a Shift- KeyEvent, and the
+                             //        shortcut requires the Shift modifier
+                             //
+                             // or, b) this is not a Shift- KeyEvent, and the
+                             //        shortcut does not require the Shift
+                             //        modifier.
+                             if (shortcut.getKey () == e.getKeyCode ()
+                                 && ((shortcut.usesShiftModifier ()
+                                      && (modifiers & KeyEvent.SHIFT_DOWN_MASK) != 0)
+                                     || (! shortcut.usesShiftModifier ()
+                                         && (modifiers & KeyEvent.SHIFT_DOWN_MASK) == 0)))
+                               {
+                                 item.dispatchEvent (new ActionEvent (item,
+                                                                      ActionEvent.ACTION_PERFORMED,
+                                                                      item.getActionCommand (),
+                                                                      modifiers));
+                                 // The event was dispatched.
+                                 return true;
+                               }
+                           }
+                       }
+                   }
+               }
+           }
+       }
+     return false;
+   }
+ 
+   public void processKeyEvent (Component comp, KeyEvent e)
+   {
+     AWTKeyStroke eventKeystroke = AWTKeyStroke.getAWTKeyStrokeForEvent (e);
+     // For every focus traversal keystroke, we need to also consume
+     // the other two key event types for the same key (e.g. if
+     // KEY_PRESSED TAB is a focus traversal keystroke, we also need to
+     // consume KEY_RELEASED and KEY_TYPED TAB key events).
+     // consuming KEY_RELEASED is easy, because their keyCodes matches
+     // the KEY_PRESSED event. Consuming the intermediate KEY_TYPED is
+     // very difficult because their is no clean way that we can know
+     // which KEY_TYPED belongs to a focusTraversalKey and which not.
+     // To address this problem we swallow every KEY_TYPE between the
+     // KEY_PRESSED event that matches a focusTraversalKey and the
+     // corresponding KEY_RELEASED.
+     AWTKeyStroke oppositeKeystroke = AWTKeyStroke.getAWTKeyStroke (e.getKeyCode (),
+                                                                    e.getModifiersEx (),
+                                                                    !(e.id == KeyEvent.KEY_RELEASED));
+ 
+     // Here we check if we are currently waiting for a KEY_RELEASED and
+     // swallow all KeyEvents that are to be delivered in between. This
+     // should only be the KEY_TYPED events that correspond to the
+     // focusTraversalKey's KEY_PRESSED event
+     if (waitForKeyStroke != null)
+       {
+         if (eventKeystroke.equals(waitForKeyStroke))
+           // release this lock
+           waitForKeyStroke = null;
+ 
+         // as long as we are waiting for the KEY_RELEASED, we swallow every
+         // KeyEvent, including the KEY_RELEASED
+         e.consume();
+         return;
+       }
+ 
+     Set forwardKeystrokes = comp.getFocusTraversalKeys (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
+     Set backwardKeystrokes = comp.getFocusTraversalKeys (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
+     Set upKeystrokes = comp.getFocusTraversalKeys (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS);
+     Set downKeystrokes = null;
+     if (comp instanceof Container)
+       downKeystrokes = comp.getFocusTraversalKeys (KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS);
+ 
+     if (forwardKeystrokes.contains (eventKeystroke))
+       {
+         waitForKeyStroke = oppositeKeystroke;        
+         focusNextComponent (comp);
+         e.consume ();
+       }
+     else if (backwardKeystrokes.contains (eventKeystroke))
+       {
+         waitForKeyStroke = oppositeKeystroke;        
+         focusPreviousComponent (comp);
+         e.consume ();
+       }
+     else if (upKeystrokes.contains (eventKeystroke))
+       {
+         waitForKeyStroke = oppositeKeystroke;        
+         upFocusCycle (comp);
+         e.consume ();
+       }
+     else if (comp instanceof Container
+              && downKeystrokes.contains (eventKeystroke))
+       {
+         waitForKeyStroke = oppositeKeystroke;        
+         downFocusCycle ((Container) comp);
+         e.consume ();
+       }
+   }
+ 
+   protected void enqueueKeyEvents (long after, Component untilFocused)
+   {
+     delayRequests.add (new EventDelayRequest (after, untilFocused));
+   }
+ 
+   protected void dequeueKeyEvents (long after, Component untilFocused)
+   {
+     // FIXME: need synchronization on delayRequests and enqueuedKeyEvents.
+ 
+     // Remove the KeyEvent with the oldest timestamp, which should be
+     // the first element in the SortedSet.
+     if (after < 0)
+       {
+         int size = delayRequests.size ();
+         if (size > 0)
+           delayRequests.remove (delayRequests.first ());
+       }
+     else
+       {
+         EventDelayRequest template = new EventDelayRequest (after, untilFocused);
+         if (delayRequests.contains (template))
+           {
+             EventDelayRequest actual = (EventDelayRequest) delayRequests.tailSet (template).first ();
+             delayRequests.remove (actual);
+             actual.dispatchEvents ();
+           }
+       }
+   }
+ 
+   protected void discardKeyEvents (Component comp)
+   {
+     // FIXME: need synchronization on delayRequests and enqueuedKeyEvents.
+ 
+     Iterator i = delayRequests.iterator ();
+ 
+     while (i.hasNext ())
+       {
+         EventDelayRequest request = (EventDelayRequest) i.next ();
+ 
+         if (request.focusedComp == comp
+             || (comp instanceof Container
+                 && ((Container) comp).isAncestorOf (request.focusedComp)))
+           request.discardEvents ();
+       }
+   }
+ 
+   public void focusPreviousComponent (Component comp)
+   {
+     Component focusComp = (comp == null) ? getGlobalFocusOwner () : comp;
+     Container focusCycleRoot = focusComp.getFocusCycleRootAncestor ();
+     FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
+ 
+     Component previous = policy.getComponentBefore (focusCycleRoot, focusComp);
+     if (previous != null)
+       previous.requestFocusInWindow ();
+   }
+ 
+   public void focusNextComponent (Component comp)
+   {
+     Component focusComp = (comp == null) ? getGlobalFocusOwner () : comp;
+     Container focusCycleRoot = focusComp.getFocusCycleRootAncestor ();
+     FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
+ 
+     Component next = policy.getComponentAfter (focusCycleRoot, focusComp);
+     if (next != null)
+       next.requestFocusInWindow ();
+   }
+ 
+   public void upFocusCycle (Component comp)
+   {
+     Component focusComp = (comp == null) ? getGlobalFocusOwner () : comp;
+     Container focusCycleRoot = focusComp.getFocusCycleRootAncestor ();
+ 
+     if (focusCycleRoot instanceof Window)
+       {
+         FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
+         Component defaultComponent = policy.getDefaultComponent (focusCycleRoot);
+         if (defaultComponent != null)
+           defaultComponent.requestFocusInWindow ();
+       }
+     else
+       {
+         Container parentFocusCycleRoot = focusCycleRoot.getFocusCycleRootAncestor ();
+ 
+         focusCycleRoot.requestFocusInWindow ();
+         setGlobalCurrentFocusCycleRoot (parentFocusCycleRoot);
+       }
+   }
+ 
+   public void downFocusCycle (Container cont)
+   {
+     if (cont == null)
+       return;
+ 
+     if (cont.isFocusCycleRoot (cont))
+       {
+         FocusTraversalPolicy policy = cont.getFocusTraversalPolicy ();
+         Component defaultComponent = policy.getDefaultComponent (cont);
+         if (defaultComponent != null)
+           defaultComponent.requestFocusInWindow ();        
+         setGlobalCurrentFocusCycleRoot (cont);
+       }
+   }
+ } // class DefaultKeyboardFocusManager
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Dialog.java gcc-4.1.0/libjava/classpath/java/awt/Dialog.java
*** gcc-4.0.2/libjava/classpath/java/awt/Dialog.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Dialog.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,555 ----
+ /* Dialog.java -- An AWT dialog box
+    Copyright (C) 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.peer.DialogPeer;
+ 
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleState;
+ import javax.accessibility.AccessibleStateSet;
+ 
+ /**
+  * A dialog box widget class.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@redhat.com)
+  */
+ public class Dialog extends Window
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization constant
+ private static final long serialVersionUID = 5920926903803293709L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial Indicates whether or not this dialog box is modal.
+   */
+ private boolean modal;
+ 
+ /**
+   * @serial Indicates whether or not this dialog box is resizable.
+   */
+ private boolean resizable = true;
+ 
+ /**
+   * @serial The title string for this dialog box, which can be
+   * <code>null</code>.
+   */
+ private String title;
+ 
+ /**
+   * This field indicates whether the dialog is undecorated or not.
+   */
+ private boolean undecorated = false;
+ 
+ /**
+   * Indicates that we are blocked for modality in show
+   */
+ private boolean blocked = false;
+ 
+ /**
+   * Secondary EventQueue to handle AWT events while
+   * we are blocked for modality in show
+   */
+ private EventQueue eq2 = null;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>Dialog</code> with the specified
+   * parent, that is resizable and not modal, and which has no title.
+   *
+   * @param parent The parent frame of this dialog box.
+   *
+   * @exception IllegalArgumentException If the owner's GraphicsConfiguration
+   * is not from a screen device, or if owner is null. This exception is always
+   * thrown when GraphicsEnvironment.isHeadless() returns true.
+   */
+ public
+ Dialog(Frame parent)
+ {
+   this(parent, "", false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Dialog</code> with the specified
+   * parent and modality, that is resizable and which has no title.
+   *
+   * @param parent The parent frame of this dialog box.
+   * @param modal <code>true</code> if this dialog box is modal,
+   * <code>false</code> otherwise.
+   *
+   * @exception IllegalArgumentException If the owner's GraphicsConfiguration
+   * is not from a screen device, or if owner is null. This exception is always
+   * thrown when GraphicsEnvironment.isHeadless() returns true.
+   */
+ public
+ Dialog(Frame parent, boolean modal)
+ {
+   this(parent, "", modal);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Dialog</code> with the specified
+   * parent, that is resizable and not modal, and which has the specified
+   * title.
+   *
+   * @param parent The parent frame of this dialog box.
+   * @param title The title string for this dialog box.
+   *
+   * @exception IllegalArgumentException If the owner's GraphicsConfiguration
+   * is not from a screen device, or if owner is null. This exception is always
+   * thrown when GraphicsEnvironment.isHeadless() returns true.
+   */
+ public
+ Dialog(Frame parent, String title)
+ {
+   this(parent, title, false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Dialog</code> with the specified,
+   * parent, title, and modality, that is resizable.
+   *
+   * @param parent The parent frame of this dialog box.
+   * @param title The title string for this dialog box.
+   * @param modal <code>true</code> if this dialog box is modal,
+   * <code>false</code> otherwise.
+   *
+   * @exception IllegalArgumentException If owner is null or
+   * GraphicsEnvironment.isHeadless() returns true.
+   */
+ public
+ Dialog(Frame parent, String title, boolean modal)
+ {
+   this (parent, title, modal, parent.getGraphicsConfiguration ());
+ }
+ 
+ /**
+  * Initializes a new instance of <code>Dialog</code> with the specified,
+  * parent, title, modality and <code>GraphicsConfiguration</code>,
+  * that is resizable.
+  *
+  * @param parent The parent frame of this dialog box.
+  * @param title The title string for this dialog box.
+  * @param modal <code>true</code> if this dialog box is modal,
+  * <code>false</code> otherwise.
+  * @param gc The <code>GraphicsConfiguration</code> object to use.
+  *
+  * @exception IllegalArgumentException If owner is null, the
+  * GraphicsConfiguration is not a screen device or
+  * GraphicsEnvironment.isHeadless() returns true.
+  *
+  * @since 1.4
+  */
+ public
+ Dialog (Frame parent, String title, boolean modal, GraphicsConfiguration gc)
+ {
+   super (parent, gc);
+ 
+   // A null title is equivalent to an empty title  
+   this.title = (title != null) ? title : "";
+   this.modal = modal;
+   visible = false;
+ 
+   setLayout(new BorderLayout());
+ }
+ 
+ /**
+  * Initializes a new instance of <code>Dialog</code> with the specified,
+  * parent, that is resizable.
+  *
+  * @exception IllegalArgumentException If parent is null. This exception is
+  * always thrown when GraphicsEnvironment.isHeadless() returns true.
+  *
+  * @since 1.2
+  */
+ public
+ Dialog (Dialog owner)
+ {
+   this (owner, "", false, owner.getGraphicsConfiguration ());
+ }
+ 
+ /**
+  * Initializes a new instance of <code>Dialog</code> with the specified,
+  * parent and title, that is resizable.
+  *
+  * @exception IllegalArgumentException If parent is null. This exception is
+  * always thrown when GraphicsEnvironment.isHeadless() returns true.
+  *
+  * @since 1.2
+  */
+ public
+ Dialog (Dialog owner, String title)
+ {
+   this (owner, title, false, owner.getGraphicsConfiguration ());
+ }
+ 
+ /**
+  * Initializes a new instance of <code>Dialog</code> with the specified,
+  * parent, title and modality, that is resizable.
+  *
+  * @exception IllegalArgumentException If parent is null. This exception is
+  * always thrown when GraphicsEnvironment.isHeadless() returns true.
+  *
+  * @since 1.2
+  */
+ public
+ Dialog (Dialog owner, String title, boolean modal)
+ {
+   this (owner, title, modal, owner.getGraphicsConfiguration ());
+ }
+ 
+ /**
+  * Initializes a new instance of <code>Dialog</code> with the specified,
+  * parent, title, modality and <code>GraphicsConfiguration</code>,
+  * that is resizable.
+  *
+  * @exception IllegalArgumentException If parent is null, the
+  * GraphicsConfiguration is not a screen device or
+  * GraphicsEnvironment.isHeadless() returns true.
+  *
+  * @since 1.4
+  */
+ public
+ Dialog (Dialog parent, String title, boolean modal, GraphicsConfiguration gc)
+ {
+   super (parent, parent.getGraphicsConfiguration ());
+ 
+   // A null title is equivalent to an empty title  
+   this.title = (title != null) ? title : "";
+   this.modal = modal;
+   visible = false;
+ 
+   setLayout (new BorderLayout ());
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * Returns the title of this dialog box.
+   * 
+   * @return The title of this dialog box.
+   */
+ public String
+ getTitle()
+ {
+   return(title);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the title of this dialog box to the specified string.
+   *
+   * @param title The new title.
+   */
+ public synchronized void
+ setTitle(String title)
+ {
+   // A null title is equivalent to an empty title  
+   this.title = (title != null) ? title : "";
+ 
+   if (peer != null)
+     {
+       DialogPeer d = (DialogPeer) peer;
+       d.setTitle (title);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not this dialog box is modal.
+   *
+   * @return <code>true</code> if this dialog box is modal,
+   * <code>false</code> otherwise.
+   */
+ public boolean
+ isModal()
+ {
+   return(modal);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Changes the modality of this dialog box.  This can only be done before
+   * the peer is created.
+   *
+   * @param modal <code>true</code> to make this dialog box modal,
+   * <code>false</code> to make it non-modal.
+   */
+ public void
+ setModal(boolean modal)
+ {
+   this.modal = modal;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not this dialog box is resizable.
+   *
+   * @return <code>true</code> if this dialog is resizable, <code>false</code>,
+   * otherwise.
+   */
+ public boolean
+ isResizable()
+ {
+   return(resizable);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Changes the resizability of this dialog box.
+   *
+   * @param resizable <code>true</code> to make this dialog resizable,
+   * <code>false</code> to make it non-resizable.
+   */
+ public synchronized void
+ setResizable(boolean resizable)
+ {
+   this.resizable = resizable;
+   if (peer != null)
+     {
+       DialogPeer d = (DialogPeer) peer;
+       d.setResizable (resizable);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Creates this object's native peer.
+   */
+ public synchronized void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit ().createDialog (this);
+   super.addNotify ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Makes this dialog visible and brings it to the front.
+   * If the dialog is modal and is not already visible, this call will not
+   *  return until the dialog is hidden by someone calling hide or dispose.
+   * If this is the event dispatching thread we must ensure that another event
+   *  thread runs while the one which invoked this method is blocked. 
+   */
+ public synchronized void
+ show()
+ {
+   super.show();
+   
+   if (isModal())
+     {
+       // If already shown (and blocked) just return
+       if (blocked)
+ 	return;
+ 
+       /* If show is called in the dispatch thread for a modal dialog it will
+          block so we must run another thread so the events keep being
+ 	 dispatched.*/
+       if (EventQueue.isDispatchThread ())
+         {
+ 	  EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
+           eq2 = new EventQueue ();
+ 	  eq.push (eq2);
+ 	}
+       
+       try 
+         {
+ 	  blocked = true;
+ 	  wait ();
+ 	  blocked = false;
+         } 
+       catch (InterruptedException e)
+         {
+ 	  blocked = false;
+         }
+ 	
+       if (eq2 != null)
+         {
+ 	  eq2.pop ();
+ 	  eq2 = null;
+ 	}
+     }  
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Hides the Dialog and then
+   * causes show() to return if it is currently blocked.
+   */
+ 
+ public synchronized void 
+ hide ()
+ {
+   if (blocked)
+     {
+       notifyAll ();
+     }
+ 
+   super.hide();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Disposes the Dialog and then causes show() to return
+   * if it is currently blocked.
+   */
+ 
+ public synchronized void 
+ dispose ()
+ {
+   if (blocked)
+     {
+       notifyAll ();
+     }
+ 
+   super.dispose();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this component.
+   * 
+   * @return A debugging string for this component.
+   */
+ protected String
+ paramString()
+ {
+   return ("title+" + title + ",modal=" + modal +
+ 	  ",resizable=" + resizable + "," + super.paramString());
+ }
+ 
+   /**
+    * Returns whether this frame is undecorated or not.
+    * 
+    * @since 1.4
+    */
+   public boolean isUndecorated ()
+   {
+     return undecorated;
+   }
+ 
+   /**
+    * Disables or enables decorations for this frame. This method can only be
+    * called while the frame is not displayable.
+    * 
+    * @exception IllegalComponentStateException If this frame is displayable.
+    * 
+    * @since 1.4
+    */
+   public void setUndecorated (boolean undecorated)
+   {
+     if (isDisplayable ())
+       throw new IllegalComponentStateException ();
+ 
+     this.undecorated = undecorated;
+   }
+   
+   protected class AccessibleAWTDialog extends AccessibleAWTWindow
+   {
+     private static final long serialVersionUID = 4837230331833941201L;
+ 
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.DIALOG;
+     }
+     
+     public AccessibleStateSet getAccessibleState()
+     {
+       AccessibleStateSet states = super.getAccessibleStateSet();
+       if (isResizable())
+         states.add(AccessibleState.RESIZABLE);
+       if (isModal())
+         states.add(AccessibleState.MODAL);
+       return states;
+     }
+   }
+   
+   /**
+    * Gets the AccessibleContext associated with this <code>Dialog</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTDialog();
+     return accessibleContext;
+   }
+ 
+ } // class Dialog
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Dimension.java gcc-4.1.0/libjava/classpath/java/awt/Dimension.java
*** gcc-4.0.2/libjava/classpath/java/awt/Dimension.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Dimension.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,234 ----
+ /* Dimension.java -- represents a 2-dimensional span
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.Dimension2D;
+ import java.io.Serializable;
+ 
+ /**
+  * This class holds a width and height value pair. This is used in plenty
+  * of windowing classes, but also has geometric meaning.
+  *
+  * <p>It is valid for a dimension to have negative width or height; but it
+  * is considered to have no area. Therefore, the behavior in various methods
+  * is undefined in such a case.
+  *
+  * <p>There are some public fields; if you mess with them in an inconsistent
+  * manner, it is your own fault when you get invalid results. Also, this
+  * class is not threadsafe.
+  *
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Component
+  * @see LayoutManager
+  * @since 1.0
+  * @status updated to 1.14
+  */
+ public class Dimension extends Dimension2D implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 4723952579491349524L;
+ 
+   /**
+    * The width of this object.
+    *
+    * @see #getSize()
+    * @see #setSize(double, double)
+    * @serial the width
+    */
+   public int width;
+ 
+   /**
+    * The height of this object.
+    *
+    * @see #getSize()
+    * @see #setSize(double, double)
+    * @serial the height
+    */
+   public int height;
+ 
+   /**
+    * Create a new Dimension with a width and height of zero.
+    */
+   public Dimension()
+   {
+   }
+ 
+   /**
+    * Create a new Dimension with width and height identical to that of the
+    * specified dimension.
+    *
+    * @param d the Dimension to copy
+    * @throws NullPointerException if d is null
+    */
+   public Dimension(Dimension d)
+   {
+     width = d.width;
+     height = d.height;
+   }
+ 
+   /**
+    * Create a new Dimension with the specified width and height.
+    *
+    * @param w the width of this object
+    * @param h the height of this object
+    */
+   public Dimension(int w, int h)
+   {
+     width = w;
+     height = h;
+   }
+ 
+   /**
+    * Gets the width of this dimension.
+    *
+    * @return the width, as a double
+    */
+   public double getWidth()
+   {
+     return width;
+   }
+ 
+   /**
+    * Gets the height of this dimension.
+    *
+    * @return the height, as a double
+    */
+   public double getHeight()
+   {
+     return height;
+   }
+ 
+   /**
+    * Sets the size of this dimension. The values are rounded to int.
+    *
+    * @param w the new width
+    * @param h the new height
+    * @since 1.2
+    */
+   public void setSize(double w, double h)
+   {
+     width = (int) w;
+     height = (int) h;
+   }
+ 
+   /**
+    * Returns the size of this dimension. A pretty useless method, as this is
+    * already a dimension.
+    *
+    * @return a copy of this dimension
+    * @see #setSize(Dimension)
+    * @since 1.1
+    */
+   public Dimension getSize()
+   {
+     return new Dimension(width, height);
+   }
+ 
+   /**
+    * Sets the width and height of this object to match that of the
+    * specified object.
+    *
+    * @param d the Dimension to get the new width and height from
+    * @throws NullPointerException if d is null
+    * @see #getSize()
+    * @since 1.1
+    */
+   public void setSize(Dimension d)
+   {
+     width = d.width;
+     height = d.height;
+   }
+ 
+   /**
+    * Sets the width and height of this object to the specified values.
+    *
+    * @param w the new width value
+    * @param h the new height value
+    */
+   public void setSize(int w, int h)
+   {
+     width = w;
+     height = h;
+   }
+ 
+   /**
+    * Tests this object for equality against the specified object.  This will
+    * be true if and only if the specified object is an instance of
+    * Dimension2D, and has the same width and height.
+    *
+    * @param obj the object to test against
+    * @return true if the object is equal to this
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof Dimension))
+       return false;
+     Dimension dim = (Dimension) obj;
+     return height == dim.height && width == dim.width;
+   }
+ 
+   /**
+    * Return the hashcode for this object. It is not documented, but appears
+    * to be <code>((width + height) * (width + height + 1) / 2) + width</code>.
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     // Reverse engineering this was fun!
+     return (width + height) * (width + height + 1) / 2 + width;
+   }
+ 
+   /**
+    * Returns a string representation of this object. The format is:
+    * <code>getClass().getName() + "[width=" + width + ",height=" + height
+    * + ']'</code>.
+    *
+    * @return a string representation of this object
+    */
+   public String toString()
+   {
+     return getClass().getName()
+       + "[width=" + width + ",height=" + height + ']';
+   }
+ } // class Dimension
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/DisplayMode.java gcc-4.1.0/libjava/classpath/java/awt/DisplayMode.java
*** gcc-4.0.2/libjava/classpath/java/awt/DisplayMode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/DisplayMode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,164 ----
+ /* DisplayMode.java -- a description of display mode configurations
+    Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This encapsulates information about the display mode for a graphics
+  * device configuration. They are device dependent, and may not always be
+  * available.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see GraphicsDevice
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public final class DisplayMode
+ {
+   /**
+    * Value of the bit depth if multiple depths are supported.
+    *
+    * @see #getBitDepth()
+    */
+   public static final int BIT_DEPTH_MULTI = -1;
+ 
+   /**
+    * Value of an unknown refresh rate.
+    *
+    * @see #getRefreshRate()
+    */
+   public static final int REFRESH_RATE_UNKNOWN = 0;
+ 
+   /** The width. */
+   private final int width;
+ 
+   /** The height. */
+   private final int height;
+ 
+   /** The bit depth. */
+   private final int bitDepth;
+ 
+   /** The refresh rate. */
+   private final int refreshRate;
+ 
+   /**
+    * Create a mode with the given parameters.
+    *
+    * @param width the width
+    * @param height the height
+    * @param bitDepth the bitDepth
+    * @param refreshRate the refreshRate
+    * @see #BIT_DEPTH_MULTI
+    * @see #REFRESH_RATE_UNKNOWN
+    */
+   public DisplayMode(int width, int height, int bitDepth, int refreshRate)
+   {
+     this.width = width;
+     this.height = height;
+     this.bitDepth = bitDepth;
+     this.refreshRate = refreshRate;
+   }
+ 
+   /**
+    * Returns the height, in pixels.
+    *
+    * @return the height
+    */
+   public int getHeight()
+   {
+     return height;
+   }
+ 
+   /**
+    * Returns the width, in pixels.
+    *
+    * @return the width
+    */
+   public int getWidth()
+   {
+     return width;
+   }
+ 
+   /**
+    * Returns the bit depth, in bits per pixel. This may be BIT_DEPTH_MULTI.
+    *
+    * @return the bit depth
+    * @see #BIT_DEPTH_MULTI
+    */
+   public int getBitDepth()
+   {
+     return bitDepth;
+   }
+ 
+   /**
+    * Returns the refresh rate, in hertz. This may be REFRESH_RATE_UNKNOWN.
+    *
+    * @return the refresh rate
+    * @see #REFRESH_RATE_UNKNOWN
+    */
+   public int getRefreshRate()
+   {
+     return refreshRate;
+   }
+ 
+   /**
+    * Test for equality. This returns true for two modes with identical
+    * parameters.
+    *
+    * @param dm The display mode to compare to
+    *
+    * @return true if it is equal
+    */
+   public boolean equals (DisplayMode dm)
+   {
+     return (width == dm.width
+ 	    && height == dm.height
+ 	    && bitDepth == dm.bitDepth
+ 	    && refreshRate == dm.refreshRate);
+   }
+ 
+   /**
+    * Returns a hash code for the display mode.
+    *
+    * @return the hash code
+    */
+   public int hashCode()
+   {
+     return width + height + bitDepth + refreshRate;
+   }
+ } // class DisplayMode
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Event.java gcc-4.1.0/libjava/classpath/java/awt/Event.java
*** gcc-4.0.2/libjava/classpath/java/awt/Event.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Event.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,185 ----
+ /* Copyright (C) 1999, 2000, 2002  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ public class Event implements java.io.Serializable
+ {
+   static final long serialVersionUID = 5488922509400504703L;
+ 
+   public static final int SHIFT_MASK = 1;
+   public static final int CTRL_MASK = 2;
+   public static final int META_MASK = 4;
+   public static final int ALT_MASK = 8;
+ 
+   public static final int ACTION_EVENT = 1001;
+   public static final int BACK_SPACE = 8;
+   public static final int CAPS_LOCK = 1022;
+   public static final int DELETE = 127;
+   public static final int DOWN = 1005;
+   public static final int END = 1001;
+   public static final int ENTER = 10;
+   public static final int ESCAPE = 27;
+   public static final int F1 = 1008;
+   public static final int F10 = 1017;
+   public static final int F11 = 1018;
+   public static final int F12 = 1019;
+   public static final int F2 = 1009;
+   public static final int F3 = 1010;
+   public static final int F4 = 1011;
+   public static final int F5 = 1012;
+   public static final int F6 = 1013;
+   public static final int F7 = 1014;
+   public static final int F8 = 1015;
+   public static final int F9 = 1016;
+   public static final int GOT_FOCUS = 1004;
+   public static final int HOME = 1000;
+   public static final int INSERT = 1025;
+   public static final int KEY_ACTION = 403;
+   public static final int KEY_ACTION_RELEASE = 404;
+   public static final int KEY_PRESS = 401;
+   public static final int KEY_RELEASE = 402;
+   public static final int LEFT = 1006;
+   public static final int LIST_DESELECT = 702;
+   public static final int LIST_SELECT = 701;
+   public static final int LOAD_FILE = 1002;
+   public static final int LOST_FOCUS = 1005;
+   public static final int MOUSE_DOWN = 501;
+   public static final int MOUSE_DRAG = 506;
+   public static final int MOUSE_ENTER = 504;
+   public static final int MOUSE_EXIT = 505;
+   public static final int MOUSE_MOVE = 503;
+   public static final int MOUSE_UP = 502;
+   public static final int NUM_LOCK = 1023;
+   public static final int PAUSE = 1024;
+   public static final int PGDN = 1003;
+   public static final int PGUP = 1002;
+   public static final int PRINT_SCREEN = 1020;
+   public static final int RIGHT = 1007;
+   public static final int SAVE_FILE = 1003;
+   public static final int SCROLL_ABSOLUTE = 605;
+   public static final int SCROLL_BEGIN = 606;
+   public static final int SCROLL_END = 607;
+   public static final int SCROLL_LINE_DOWN = 602;
+   public static final int SCROLL_LINE_UP = 601;
+   public static final int SCROLL_LOCK = 1021;
+   public static final int SCROLL_PAGE_DOWN = 604;
+   public static final int SCROLL_PAGE_UP = 603;
+   public static final int TAB = 9;
+   public static final int UP = 1004;
+   public static final int WINDOW_DEICONIFY = 204;
+   public static final int WINDOW_DESTROY = 201;
+   public static final int WINDOW_EXPOSE = 202;
+   public static final int WINDOW_ICONIFY = 203;
+   public static final int WINDOW_MOVED = 205;
+ 
+   public Object arg;
+   public int clickCount;
+   boolean consumed;		// Required by serialization spec.
+   public Event evt;
+   public int id;
+   public int key; 
+   public int modifiers;
+   public Object target;
+   public long when;
+   public int x;
+   public int y;
+ 
+   public Event (Object target, int id, Object arg)
+   {
+     this.id = id;
+     this.target = target;
+     this.arg = arg;
+   }
+   
+   public Event (Object target, long when, int id, int x, int y, int key, 
+ 		int modifiers)
+   {
+     this.target = target;
+     this.when = when;
+     this.id = id;
+     this.x = x;
+     this.y = y;
+     this.key = key;
+     this.modifiers = modifiers;
+   }
+ 
+   public Event (Object target, long when, int id, int x, int y, int key, 
+ 	        int modifiers, Object arg) 
+   {
+     this (target, when, id, x, y, key, modifiers);
+     this.arg = arg;
+   }
+ 
+   public boolean controlDown ()
+   {
+     return ((modifiers & CTRL_MASK) == 0 ? false : true);
+   }
+ 
+   public boolean metaDown ()
+   {
+     return ((modifiers & META_MASK) == 0 ? false : true);
+   }
+ 
+   protected String paramString ()
+   {
+     return "id=" + id + ",x=" + x + ",y=" + y
+       + ",target=" + target + ",arg=" + arg;
+   }
+ 
+   public boolean shiftDown() 
+   {
+     return ((modifiers & SHIFT_MASK) == 0 ? false : true);
+   }
+ 
+   public String toString()
+   {
+     return getClass().getName() + "[" + paramString() + "]";
+   }
+ 
+   public void translate (int x, int y)
+   {
+     this.x += x;
+     this.y += y;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/EventDispatchThread.java gcc-4.1.0/libjava/classpath/java/awt/EventDispatchThread.java
*** gcc-4.0.2/libjava/classpath/java/awt/EventDispatchThread.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/EventDispatchThread.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* EventDispatchThread.java -
+    Copyright (C) 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt;
+ 
+ /**
+  * @author Bryce McKinlay
+  * @status believed complete, but untested.
+  */
+ class EventDispatchThread extends Thread
+ {
+   private static int dispatchThreadNum;
+ 
+   private EventQueue queue;
+ 
+   EventDispatchThread(EventQueue queue)
+   {
+     super();
+     setName("AWT-EventQueue-" + ++dispatchThreadNum);
+     this.queue = queue;
+     setPriority(NORM_PRIORITY + 1);
+   }
+ 
+   public void run()
+   {
+     while (true)
+       {
+         try
+ 	{
+ 	  AWTEvent evt = queue.getNextEvent();
+ 
+           KeyboardFocusManager manager;
+           manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ 
+           // Try to dispatch this event to the current keyboard focus
+           // manager.  It will dispatch all FocusEvents, all
+           // WindowEvents related to focus, and all KeyEvents,
+           // returning true.  Otherwise, it returns false and we
+           // dispatch the event normally.
+           if (!manager.dispatchEvent (evt))
+             queue.dispatchEvent(evt);
+ 	}
+         catch (ThreadDeath death)
+         {
+           // If someone wants to kill us, let them.
+           return;
+         }
+ 	catch (InterruptedException ie)
+ 	{
+ 	  // We are interrupted when we should finish executing
+ 	  return;
+ 	}
+ 	catch (Throwable x)
+ 	{
+ 	  System.err.println("Exception during event dispatch:");
+ 	  x.printStackTrace(System.err);
+ 	}
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/EventQueue.java gcc-4.1.0/libjava/classpath/java/awt/EventQueue.java
*** gcc-4.0.2/libjava/classpath/java/awt/EventQueue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/EventQueue.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,508 ----
+ /* EventQueue.java --
+    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ActionEvent;
+ import java.awt.event.InputEvent;
+ import java.awt.event.InputMethodEvent;
+ import java.awt.event.InvocationEvent;
+ import java.lang.reflect.InvocationTargetException;
+ import java.util.EmptyStackException;
+ 
+ /* Written using on-line Java 2 Platform Standard Edition v1.3 API 
+  * Specification, as well as "The Java Class Libraries", 2nd edition 
+  * (Addison-Wesley, 1998).
+  * Status:  Believed complete, but untested.
+  */
+ 
+ /**
+  * This class manages a queue of <code>AWTEvent</code> objects that
+  * are posted to it.  The AWT system uses only one event queue for all
+  * events.
+  *
+  * @author Bryce McKinlay
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class EventQueue
+ {
+   private static final int INITIAL_QUEUE_DEPTH = 8;
+   private AWTEvent[] queue = new AWTEvent[INITIAL_QUEUE_DEPTH];
+ 
+   private int next_in = 0; // Index where next event will be added to queue
+   private int next_out = 0; // Index of next event to be removed from queue
+ 
+   private EventQueue next;
+   private EventQueue prev;
+   private AWTEvent currentEvent;
+   private long lastWhen = System.currentTimeMillis();
+ 
+   private EventDispatchThread dispatchThread = new EventDispatchThread(this);
+   private boolean shutdown = false;
+ 
+   synchronized private void setShutdown (boolean b) 
+   {
+     shutdown = b;
+   }
+ 
+   synchronized boolean isShutdown ()
+   {
+     if (shutdown)
+       return true;
+ 
+     // This is the exact self-shutdown condition specified in J2SE:
+     // http://java.sun.com/j2se/1.4.2/docs/api/java/awt/doc-files/AWTThreadIssues.html
+     
+     // FIXME: check somewhere that the native queue is empty
+     if (peekEvent() == null)
+       {
+         Frame[] frames = Frame.getFrames();
+         for (int i = 0; i < frames.length; ++i)
+           if (frames[i].isDisplayable())
+             return false;
+         return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>EventQueue</code>.
+    */
+   public EventQueue()
+   {
+   }
+ 
+   /**
+    * Returns the next event in the queue.  This method will block until
+    * an event is available or until the thread is interrupted.
+    *
+    * @return The next event in the queue.
+    *
+    * @exception InterruptedException If this thread is interrupted while
+    * waiting for an event to be posted to the queue.
+    */
+   public synchronized AWTEvent getNextEvent()
+     throws InterruptedException
+   {
+     if (next != null)
+       return next.getNextEvent();
+ 
+     while (next_in == next_out)
+       {
+         // We are not allowed to return null from this method, yet it
+         // is possible that we actually have run out of native events
+         // in the enclosing while() loop, and none of the native events
+         // happened to cause AWT events. We therefore ought to check
+         // the isShutdown() condition here, before risking a "native
+         // wait". If we check it before entering this function we may
+         // wait forever for events after the shutdown condition has
+         // arisen.
+ 
+         if (isShutdown())
+           throw new InterruptedException();
+ 
+         wait();
+       }
+ 
+     AWTEvent res = queue[next_out];
+ 
+     if (++next_out == queue.length)
+       next_out = 0;
+     return res;
+   }
+ 
+   /**
+    * Returns the next event in the queue without removing it from the queue.
+    * This method will block until an event is available or until the thread
+    * is interrupted.
+    *
+    * @return The next event in the queue.
+    * @specnote Does not block. Returns null if there are no events on the 
+    *            queue. 
+    */ 
+   public synchronized AWTEvent peekEvent()
+   {
+     if (next != null)
+       return next.peekEvent();
+ 
+     if (next_in != next_out)
+       return queue[next_out];
+     else
+       return null;
+   }
+ 
+   /**
+    * Returns the next event in the queue that has the specified id
+    * without removing it from the queue.
+    * This method will block until an event is available or until the thread
+    * is interrupted.
+    *
+    * @param id The event id to return.
+    *
+    * @return The next event in the queue.
+    *
+    * @specnote Does not block. Returns null if there are no matching events 
+    *            on the queue. 
+    */ 
+   public synchronized AWTEvent peekEvent(int id)
+   {
+     if (next != null)
+       return next.peekEvent(id);
+ 
+     int i = next_out;
+     while (i != next_in)
+       {
+         AWTEvent qevt = queue[i];
+         if (qevt.id == id)
+           return qevt;
+       }
+     return null;
+   }
+ 
+   /**
+    * Posts a new event to the queue.
+    *
+    * @param evt The event to post to the queue.
+    *
+    * @exception NullPointerException If event is null.
+    */
+   public synchronized void postEvent(AWTEvent evt)
+   {
+     if (evt == null)
+       throw new NullPointerException();
+ 
+     if (next != null)
+       {
+         next.postEvent(evt);
+         return;
+       }
+ 
+     /* Check for any events already on the queue with the same source 
+        and ID. */	
+     int i = next_out;
+     while (i != next_in)
+       {
+         AWTEvent qevt = queue[i];
+         Object src;
+         if (qevt.id == evt.id
+             && (src = qevt.getSource()) == evt.getSource()
+             && src instanceof Component)
+           {
+             /* If there are, call coalesceEvents on the source component 
+                to see if they can be combined. */
+             Component srccmp = (Component) src;
+             AWTEvent coalesced_evt = srccmp.coalesceEvents(qevt, evt);
+             if (coalesced_evt != null)
+               {
+                 /* Yes. Replace the existing event with the combined event. */
+                 queue[i] = coalesced_evt;
+                 return;
+               }
+             break;
+           }
+         if (++i == queue.length)
+           i = 0;
+       }
+ 
+     queue[next_in] = evt;    
+     if (++next_in == queue.length)
+       next_in = 0;
+ 
+     if (next_in == next_out)
+       {
+         /* Queue is full. Extend it. */
+         AWTEvent[] oldQueue = queue;
+         queue = new AWTEvent[queue.length * 2];
+ 
+         int len = oldQueue.length - next_out;
+         System.arraycopy(oldQueue, next_out, queue, 0, len);
+         if (next_out != 0)
+           System.arraycopy(oldQueue, 0, queue, len, next_out);
+ 
+         next_out = 0;
+         next_in = oldQueue.length;
+       }
+     
+     if (dispatchThread == null || !dispatchThread.isAlive())
+       {
+         dispatchThread = new EventDispatchThread(this);
+         dispatchThread.start();
+       }
+ 
+     notify();
+   }
+ 
+   /**
+    * Causes runnable to have its run method called in the dispatch thread of the
+    * EventQueue. This will happen after all pending events are processed. The
+    * call blocks until this has happened. This method will throw an Error if
+    * called from the event dispatcher thread.
+    *
+    * @exception InterruptedException If another thread has interrupted
+    * this thread.
+    * @exception InvocationTargetException If an exception is thrown when running
+    * runnable.
+    *
+    * @since 1.2
+    */
+   public static void invokeAndWait(Runnable runnable)
+     throws InterruptedException, InvocationTargetException
+   {
+     if (isDispatchThread ())
+       throw new Error("Can't call invokeAndWait from event dispatch thread");
+ 
+     EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); 
+     Thread current = Thread.currentThread();
+ 
+     InvocationEvent ie = 
+       new InvocationEvent(eq, runnable, current, true);
+ 
+     synchronized (current)
+       {
+         eq.postEvent(ie);
+         current.wait();
+       }
+ 
+     Exception exception;
+ 
+     if ((exception = ie.getException()) != null)
+       throw new InvocationTargetException(exception);
+   }
+ 
+   /**
+    * This arranges for runnable to have its run method called in the
+    * dispatch thread of the EventQueue.  This will happen after all
+    * pending events are processed.
+    *
+    * @since 1.2
+    */
+   public static void invokeLater(Runnable runnable)
+   {
+     EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); 
+ 
+     InvocationEvent ie = 
+       new InvocationEvent(eq, runnable, null, false);
+ 
+     eq.postEvent(ie);
+   }
+ 
+   /**
+    * Return true if the current thread is the current AWT event dispatch
+    * thread.
+    */
+   public static boolean isDispatchThread()
+   {
+     EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
+     
+     /* Find last EventQueue in chain */ 
+     while (eq.next != null)
+       eq = eq.next;
+ 
+     return (Thread.currentThread() == eq.dispatchThread);
+   }
+ 
+   /**
+    * Return the event currently being dispatched by the event
+    * dispatch thread.  If the current thread is not the event
+    * dispatch thread, this method returns null.
+    *
+    * @since 1.4
+    */
+   public static AWTEvent getCurrentEvent()
+   {
+     EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); 
+     Thread ct = Thread.currentThread();
+     
+     /* Find out if this thread is the dispatch thread for any of the
+        EventQueues in the chain */ 
+     while (ct != eq.dispatchThread)
+       {
+         // Try next EventQueue, if any
+         if (eq.next == null)
+            return null;  // Not an event dispatch thread
+         eq = eq.next;
+       }
+ 
+     return eq.currentEvent;
+   }
+ 
+   /**
+    * Allows a custom EventQueue implementation to replace this one. 
+    * All pending events are transferred to the new queue. Calls to postEvent,
+    * getNextEvent, and peekEvent and others are forwarded to the pushed queue
+    * until it is removed with a pop().
+    *
+    * @exception NullPointerException if newEventQueue is null.
+    */
+   public synchronized void push(EventQueue newEventQueue)
+   {
+     if (newEventQueue == null)
+       throw new NullPointerException ();
+ 
+     /* Make sure we are at the top of the stack because callers can
+        only get a reference to the one at the bottom using
+        Toolkit.getDefaultToolkit().getSystemEventQueue() */
+     if (next != null)
+       {
+         next.push (newEventQueue);
+         return;
+       }
+ 
+     /* Make sure we have a live dispatch thread to drive the queue */
+     if (dispatchThread == null)
+       dispatchThread = new EventDispatchThread(this);
+ 
+     int i = next_out;
+     while (i != next_in)
+       {
+         newEventQueue.postEvent(queue[i]);
+         next_out = i;
+         if (++i == queue.length)
+           i = 0;
+       }
+ 
+     next = newEventQueue;
+     newEventQueue.prev = this;    
+   }
+ 
+   /** Transfer any pending events from this queue back to the parent queue that
+     * was previously push()ed. Event dispatch from this queue is suspended.
+     *
+     * @exception EmptyStackException If no previous push was made on this
+     * EventQueue.
+     */
+   protected void pop() throws EmptyStackException
+   {
+     if (prev == null)
+       throw new EmptyStackException();
+ 
+     /* The order is important here, we must get the prev lock first,
+        or deadlock could occur as callers usually get here following
+        prev's next pointer, and thus obtain prev's lock before trying
+        to get this lock. */
+     synchronized (prev)
+       {
+         prev.next = next;
+         if (next != null)
+           next.prev = prev;
+ 
+         synchronized (this)
+           {
+             int i = next_out;
+             while (i != next_in)
+               {
+                 prev.postEvent(queue[i]);
+                 next_out = i;
+                 if (++i == queue.length)
+                   i = 0;
+               }
+ 	    // Empty the queue so it can be reused
+ 	    next_in = 0;
+ 	    next_out = 0;
+ 
+             setShutdown(true);
+ 	    dispatchThread = null;
+             this.notifyAll();
+           }
+       }
+   }
+ 
+   /**
+    * Dispatches an event. The manner in which the event is dispatched depends
+    * upon the type of the event and the type of the event's source object.
+    *
+    * @exception NullPointerException If event is null.
+    */
+   protected void dispatchEvent(AWTEvent evt)
+   {
+     currentEvent = evt;
+ 
+     if (evt instanceof InputEvent)
+       lastWhen = ((InputEvent) evt).getWhen();
+     else if (evt instanceof ActionEvent)
+       lastWhen = ((ActionEvent) evt).getWhen();
+     else if (evt instanceof InvocationEvent)
+       lastWhen = ((InvocationEvent) evt).getWhen();
+ 
+     if (evt instanceof ActiveEvent)
+       {
+         ActiveEvent active_evt = (ActiveEvent) evt;
+         active_evt.dispatch();
+       }
+     else
+       {
+         Object source = evt.getSource();
+ 
+         if (source instanceof Component)
+           {
+             Component srccmp = (Component) source;
+             srccmp.dispatchEvent(evt);
+           }
+         else if (source instanceof MenuComponent)
+           {
+             MenuComponent srccmp = (MenuComponent) source;
+             srccmp.dispatchEvent(evt);
+           }
+       }
+   }
+ 
+   /**
+    * Returns the timestamp of the most recent event that had a timestamp, or
+    * the initialization time of the event queue if no events have been fired.
+    * At present, only <code>InputEvent</code>s, <code>ActionEvent</code>s,
+    * <code>InputMethodEvent</code>s, and <code>InvocationEvent</code>s have
+    * timestamps, but this may be added to other events in future versions.
+    * If this is called by the event dispatching thread, it can be any
+    * (sequential) value, but to other threads, the safest bet is to return
+    * System.currentTimeMillis().
+    *
+    * @return the most recent timestamp
+    * @see InputEvent#getWhen()
+    * @see ActionEvent#getWhen()
+    * @see InvocationEvent#getWhen()
+    * @see InputMethodEvent#getWhen()
+    * @since 1.4
+    */
+   public static long getMostRecentEventTime()
+   {
+     EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); 
+     if (Thread.currentThread() != eq.dispatchThread)
+       return System.currentTimeMillis();
+     return eq.lastWhen;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/FileDialog.java gcc-4.1.0/libjava/classpath/java/awt/FileDialog.java
*** gcc-4.0.2/libjava/classpath/java/awt/FileDialog.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/FileDialog.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,318 ----
+ /* FileDialog.java -- A filename selection dialog box
+    Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.peer.FileDialogPeer;
+ import java.io.FilenameFilter;
+ import java.io.Serializable;
+ 
+ /**
+   * This class implements a file selection dialog box widget.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@redhat.com)
+   */
+ public class FileDialog extends Dialog implements Serializable
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ /**
+   * Indicates that the purpose of the dialog is for opening a file.
+   */
+ public static final int LOAD = 0;
+ 
+ /**
+   * Indicates that the purpose of the dialog is for saving a file.
+   */
+ public static final int SAVE = 1;
+ 
+ // Serialization constant
+ private static final long serialVersionUID = 5035145889651310422L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The directory for this file dialog.
+   */
+ private String dir;
+ 
+ /**
+   * @serial The filename for this file dialog
+   */
+ private String file;
+ 
+ /**
+   * @serial The filter for selecting filenames to display
+   */
+ private FilenameFilter filter;
+ 
+ /**
+   * @serial The mode of this dialog, either <code>LOAD</code> or 
+   * <code>SAVE</code>.
+   */
+ private int mode;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>FileDialog</code> with the 
+   * specified parent.  This dialog will have no title and will be for
+   * loading a file.
+   *
+   * @param parent The parent frame for this dialog.
+   */
+ public
+ FileDialog(Frame parent)
+ {
+   this(parent, "", LOAD);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initialized a new instance of <code>FileDialog</code> with the
+   * specified parent and title.  This dialog will be for opening a file.
+   *
+   * @param parent The parent frame for this dialog.
+   * @param title The title for this dialog.
+   */
+ public
+ FileDialog(Frame parent, String title)
+ {
+   this(parent, title, LOAD);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initialized a new instance of <code>FileDialog</code> with the
+   * specified parent, title, and mode.
+   *
+   * @param parent The parent frame for this dialog.
+   * @param title The title for this dialog.
+   * @param mode The mode of the dialog, either <code>LOAD</code> or
+   * <code>SAVE</code>.
+   *
+   * @exception IllegalArgumentException If an illegal file dialog mode
+   * is supplied.
+   */
+ public
+ FileDialog(Frame parent, String title, int mode)
+ {
+   super(parent, title, true);
+   
+   if ((mode != LOAD) && (mode != SAVE))
+     throw new IllegalArgumentException (
+       "Mode argument must be either LOAD or SAVE");
+ 
+   setMode (mode);
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the mode of this dialog, either <code>LOAD</code> or
+   * <code>SAVE</code>.
+   *
+   * @return The mode of this dialog.
+   */
+ public int
+ getMode()
+ {
+   return(mode);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the mode of this dialog to either <code>LOAD</code> or
+   * <code>SAVE</code>.  This method is only effective before the native
+   * peer is created.
+   *
+   * @param mode The new mode of this file dialog.
+   *
+   * @exception IllegalArgumentException If an illegal file dialog mode
+   * is supplied.
+   */
+ public void
+ setMode(int mode)
+ {
+   if ((mode != LOAD) && (mode != SAVE))
+     throw new IllegalArgumentException("Bad mode: " + mode);
+ 
+   this.mode = mode;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the directory for this file dialog.
+   *
+   * @return The directory for this file dialog.
+   */
+ public String
+ getDirectory()
+ {
+   return(dir);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the directory for this file dialog.
+   *
+   * @param dir The new directory for this file dialog.
+   */
+ public synchronized void
+ setDirectory(String dir)
+ {
+   this.dir = dir;
+   if (peer != null)
+     {
+       FileDialogPeer f = (FileDialogPeer) peer;
+       f.setDirectory (dir);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the file that is selected in this dialog.
+   *
+   * @return The file that is selected in this dialog.
+   */
+ public String
+ getFile()
+ {
+   return(file);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the selected file for this dialog.
+   *
+   * @param file The selected file for this dialog.
+   */
+ public synchronized void
+ setFile(String file)
+ {
+   this.file = file;
+   if (peer != null)
+     {
+       FileDialogPeer f = (FileDialogPeer) peer;
+       f.setFile (file);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the filename filter being used by this dialog.
+   *
+   * @return The filename filter being used by this dialog.
+   */
+ public FilenameFilter
+ getFilenameFilter()
+ {
+   return(filter);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the filename filter used by this dialog.
+   *
+   * @param filter The new filename filter for this file dialog box.
+   */
+ public synchronized void
+ setFilenameFilter(FilenameFilter filter)
+ {
+   this.filter = filter;
+   if (peer != null)
+     {
+       FileDialogPeer f = (FileDialogPeer) peer;
+       f.setFilenameFilter (filter);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Creates the native peer for this file dialog box.
+   */
+ public void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit ().createFileDialog (this);
+   super.addNotify ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this object.
+   *
+   * @return A debugging string for this object.
+   */
+ protected String
+ paramString()
+ {
+   return ("dir=" + dir + ",file=" + file +
+ 	  ",mode=" + mode + "," + super.paramString());
+ }
+ 
+ } // class FileDialog 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/FlowLayout.java gcc-4.1.0/libjava/classpath/java/awt/FlowLayout.java
*** gcc-4.0.2/libjava/classpath/java/awt/FlowLayout.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/FlowLayout.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,364 ----
+ /* FlowLayout.java -- Grid-based layout engine
+    Copyright (C) 1999, 2000, 2001, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ 
+ /** This class implements a flow-based layout.  Components are laid
+  * out in order from left to right.  When a component cannot be placed
+  * without horizontal clipping, a new row is started.  This class
+  * supports horizontal and vertical gaps.  These are used for spacing
+  * between components.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class FlowLayout implements LayoutManager, Serializable
+ {
+   /** Constant that specifies left alignment.  */
+   public static final int LEFT = 0;
+   /** Constant that specifies center alignment.  */
+   public static final int CENTER = 1;
+   /** Constant that specifies right alignment.  */
+   public static final int RIGHT = 2;
+ 
+   /** Constant that specifies alignment to leading edge of container's
+    * orientation.  */
+   public static final int LEADING = 3;
+   /** Constant that specifies alignment to trailing edge of container's
+    * orientation.  */
+   public static final int TRAILING = 4;
+ 
+   // Serialization constant
+   private static final long serialVersionUID = -7262534875583282631L;
+ 
+   /**
+    * Add a new component to the layout.  This particular implementation
+    * does nothing.
+    *
+    * @param name the name
+    * @param comp the component 
+    */
+   public void addLayoutComponent (String name, Component comp)
+   {
+     // Nothing.
+   }
+ 
+   /**
+    * Returns the current justification value for this object.
+    *
+    * @return The current justification value for this object.
+    */
+   public int getAlignment ()
+   {
+     return align;
+   }
+ 
+   /**
+    * Returns the horizontal gap between components.
+    *
+    * @return The horizontal gap between components.
+    */
+   public int getHgap ()
+   {
+     return hgap;
+   }
+ 
+   /**
+    * Returns the vertical gap between lines of components.
+    *
+    * @return The vertical gap between lines of components.
+    */
+   public int getVgap ()
+   {
+     return vgap;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>FlowLayout</code> with a center
+    * justification and a default horizontal and vertical gap of 5.
+    */
+   public FlowLayout ()
+   {
+     this (CENTER, 5, 5);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>FlowLayout</code> with the specified
+    * justification and a default horizontal and vertical gap of 5.
+    *
+    * @param align The justification setting, which should be one of the
+    * contants in this class.
+    */
+   public FlowLayout (int align)
+   {
+     this (align, 5, 5);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>FlowLayout</code> with the specified
+    * justification and gap values
+    * @param align Alignment
+    * @param hgap The horizontal gap
+    * @param vgap The vertical gap
+    * @exception IllegalArgumentException If either gap is negative
+    */
+   public FlowLayout (int align, int hgap, int vgap)
+   {
+     // Use methods to set fields so that we can have all the checking
+     // in one place.
+     setVgap (vgap);
+     setHgap (hgap);
+     setAlignment (align);
+   }
+ 
+   /** Lay out the container's components based on current settings.
+    * @param parent The parent container
+    */
+   public void layoutContainer (Container parent)
+   {
+     synchronized (parent.getTreeLock ())
+       {
+ 	int num = parent.getComponentCount ();
+ 	// This is more efficient than calling getComponents().
+ 	Component[] comps = parent.component;
+ 
+ 	Dimension d = parent.getSize ();
+ 	Insets ins = parent.getInsets ();
+ 
+ 	ComponentOrientation orient = parent.getComponentOrientation ();
+ 	boolean left_to_right = orient.isLeftToRight ();
+ 
+ 	int y = ins.top + vgap;
+ 	int i = 0;
+ 	while (i < num)
+ 	  {
+ 	    // Find the components which go in the current row.
+ 	    int new_w = ins.left + hgap + ins.right;
+ 	    int new_h = 0;
+ 	    int j;
+ 	    boolean found_one = false;
+ 	    for (j = i; j < num; ++j)
+ 	      {
+ 		// Skip invisible items.
+ 		if (! comps[j].visible)
+ 		  continue;
+ 
+ 		Dimension c = comps[j].getPreferredSize ();
+ 
+ 		int next_w = new_w + hgap + c.width;
+ 		if (next_w <= d.width || ! found_one)
+ 		  {
+ 		    new_w = next_w;
+ 		    new_h = Math.max (new_h, c.height);
+ 		    found_one = true;
+ 		  }
+ 		else
+ 		  {
+ 		    // Must start a new row, and we already found an item
+ 		    break;
+ 		  }
+ 	      }
+ 
+ 	    // Set the location of each component for this row.
+ 	    int x;
+ 
+ 	    int myalign = align;
+ 	    if (align == LEADING)
+ 	      myalign = left_to_right ? LEFT : RIGHT;
+ 	    else if (align == TRAILING)
+ 	      myalign = left_to_right ? RIGHT : LEFT;
+ 
+ 	    if (myalign == RIGHT)
+ 	      x = ins.left + (d.width - new_w) + hgap;
+ 	    else if (myalign == CENTER)
+ 	      x = ins.left + (d.width - new_w) / 2 + hgap;
+ 	    else // LEFT and all other values of align.
+ 	      x = ins.left + hgap;
+ 
+ 	    for (int k = i; k < j; ++k)
+ 	      {
+ 		if (comps[k].visible)
+ 		  {
+ 		    Dimension c = comps[k].getPreferredSize ();
+ 		    comps[k].setBounds (x, y + (new_h - c.height) / 2,
+ 					c.width, c.height);
+ 		    x += c.width + hgap;
+ 		  }
+ 	      }
+ 
+ 	    // Advance to next row.
+ 	    i = j;
+ 	    y += new_h + vgap;
+ 	  }
+       }
+   }
+ 
+   /**
+    * Returns the minimum layout size for the specified container using
+    * this layout.
+    * @param cont The parent container
+    * @return The minimum layout size.
+    */
+   public Dimension minimumLayoutSize (Container cont)
+   {
+     return getSize (cont, true);
+   }
+ 
+   /**
+    * Returns the preferred layout size for the specified container using
+    * this layout.
+    * @param cont The parent container
+    * @return The preferred layout size.
+    */
+   public Dimension preferredLayoutSize (Container cont)
+   {
+     return getSize (cont, false);
+   }
+ 
+   /** Remove the indicated component from this layout manager.
+    * This particular implementation does nothing.
+    * @param comp The component to remove
+    */
+   public void removeLayoutComponent (Component comp)
+   {
+     // Nothing.
+   }
+ 
+   /**
+    * Sets the justification value for this object to the specified value.
+    *
+    * @param align The new justification value for this object, which must
+    * be one of the constants in this class.
+    */
+   public void setAlignment (int align)
+   {
+     // The JDK accepts invalid values and treats them as
+     // LEFT during layout, so do we. The invalid value is even stored,
+     // getAlignment() returns the same invalid value.
+     this.align = align;
+   }
+ 
+   /**
+    * Sets the horizontal gap between components to the specified value.
+    *
+    * @param hgap The new horizontal gap between components.
+    */
+   public void setHgap (int hgap)
+   {
+     if (hgap < 0)
+       throw new IllegalArgumentException ("horizontal gap must be nonnegative");
+     this.hgap = hgap;
+   }
+ 
+   /**
+    * Sets the vertical gap between lines of components to the specified value.
+    *
+    * @param vgap The new vertical gap.
+    */
+   public void setVgap (int vgap)
+   {
+     if (vgap < 0)
+       throw new IllegalArgumentException ("vertical gap must be nonnegative");
+     this.vgap = vgap;
+   }
+ 
+   /** Return String description of this object.
+    * @return A string representation of this object.
+    */
+   public String toString ()
+   {
+     return ("[" + getClass ().getName () + ",hgap=" + hgap + ",vgap=" + vgap
+ 	    + ",align=" + align + "]");
+   }
+ 
+   // This method is used to compute the various sizes.
+   private Dimension getSize (Container parent, boolean is_min)
+   {
+     synchronized (parent.getTreeLock ())
+       {
+ 	int w, h, num = parent.getComponentCount ();
+ 	// This is more efficient than calling getComponents().
+ 	Component[] comps = parent.component;
+ 
+ 	w = 0;
+ 	h = 0;
+ 	for (int i = 0; i < num; ++i)
+ 	  {
+ 	    if (! comps[i].visible)
+ 	      continue;
+ 
+ 	    // FIXME: can we just directly read the fields in Component?
+ 	    // Or will that not work with subclassing?
+ 	    Dimension d;
+ 
+ 	    if (is_min)
+ 	      d = comps[i].getMinimumSize ();
+ 	    else
+ 	      d = comps[i].getPreferredSize ();
+ 
+ 	    w += d.width;
+ 	    h = Math.max (d.height, h);
+ 	  }
+ 
+ 	Insets ins = parent.getInsets ();
+ 
+ 	w += (num + 1) * hgap + ins.left + ins.right;
+ 	h += 2 * vgap + ins.top + ins.bottom;
+ 
+ 	return new Dimension (w, h);
+       }
+   }
+ 
+   /**
+    * @serial The justification alignment of the lines of components, which
+    * will be one of the constants defined in this class.
+    */
+   private int align;
+ 
+   /**
+    * @serial The horizontal gap between components.
+    */
+   private int hgap;
+ 
+   /**
+    * @serial The vertical gap between lines of components.
+    */
+   private int vgap;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/FocusTraversalPolicy.java gcc-4.1.0/libjava/classpath/java/awt/FocusTraversalPolicy.java
*** gcc-4.0.2/libjava/classpath/java/awt/FocusTraversalPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/FocusTraversalPolicy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,103 ----
+ /* FocusTraversalPolicy.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class FocusTraversalPolicy
+ {
+   /**
+    * Creates a <code>FocusTraversalPolicy</code> object.
+    */
+   public FocusTraversalPolicy()
+   {
+     // Do nothing in here.
+   }
+ 
+   /**
+    * Returns the Component that should receive the focus after a Component.
+    *
+    * @exception IllegalArgumentException If root or current is null,
+    * or if root is not a focus cycle root of current.
+    */
+   public abstract Component getComponentAfter(Container root,
+                                               Component current);
+ 
+   /**
+    * Returns the Component that should receive the focus before a Component.
+    *
+    * @exception IllegalArgumentException If root or current is null,
+    * or if root is not a focus cycle root of current.
+    */
+   public abstract Component getComponentBefore(Container root,
+                                                Component current);
+ 
+   /**
+    * Returns the first Component in the traversal cycle.
+    *
+    * @exception IllegalArgumentException If root is null.
+    */
+   public abstract Component getFirstComponent(Container root);
+ 
+   /**
+    * Returns the last Component in the traversal cycle.
+    *
+    * @exception IllegalArgumentException If root is null.
+    */
+   public abstract Component getLastComponent(Container root);
+ 
+   /**
+    * Returns the default Component to focus.
+    *
+    * @exception IllegalArgumentException If root is null.
+    */
+   public abstract Component getDefaultComponent(Container root);
+ 
+   /**
+    * Returns the Component that should receive the focus when a Window is made
+    * visible for the first time.
+    *
+    * @exception IllegalArgumentException If window is null.
+    */
+   public Component getInitialComponent(Window window)
+   {
+     return getDefaultComponent(window);
+   }
+ } // class FocusTraversalPolicy
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Font.java gcc-4.1.0/libjava/classpath/java/awt/Font.java
*** gcc-4.0.2/libjava/classpath/java/awt/Font.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Font.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1342 ----
+ /* Font.java -- Font object
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import gnu.java.awt.ClasspathToolkit;
+ import gnu.java.awt.peer.ClasspathFontPeer;
+ 
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.font.LineMetrics;
+ import java.awt.font.TextLayout;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.peer.FontPeer;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.ObjectInputStream;
+ import java.io.Serializable;
+ import java.text.AttributedCharacterIterator;
+ import java.text.CharacterIterator;
+ import java.text.StringCharacterIterator;
+ import java.util.HashMap;
+ import java.util.Locale;
+ import java.util.Map;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * This class represents a windowing system font.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Graydon Hoare (graydon@redhat.com)
+  */
+ public class Font implements Serializable
+ {
+ 
+   /**
+    * Constant indicating a "plain" font.
+    */
+   public static final int PLAIN = 0;
+ 
+   /**
+    * Constant indicating a "bold" font.
+    */
+   public static final int BOLD = 1;
+ 
+   /**
+    * Constant indicating an "italic" font.
+    */
+   public static final int ITALIC = 2;
+ 
+   /**
+    * Constant indicating the baseline mode characteristic of Roman.
+    */
+   public static final int ROMAN_BASELINE = 0;
+ 
+   /**
+    * Constant indicating the baseline mode characteristic of Chinese.
+    */
+   public static final int CENTER_BASELINE = 1;
+ 
+   /**
+    * Constant indicating the baseline mode characteristic of Devanigri.
+    */
+   public static final int HANGING_BASELINE = 2;  
+ 
+ 
+   /**
+    * Indicates to <code>createFont</code> that the supplied font data
+    * is in TrueType format.
+    *
+    * <p><em>Specification Note:</em> The Sun JavaDoc for J2SE 1.4 does
+    * not indicate whether this value also subsumes OpenType. OpenType
+    * is essentially the same format as TrueType, but allows to define
+    * glyph shapes in the same way as PostScript, using cubic bezier
+    * curves.
+    *
+    * @since 1.3
+    */
+   public static final int TRUETYPE_FONT = 0;
+ 
+ 
+   /**
+    * A flag for <code>layoutGlyphVector</code>, indicating that the
+    * orientation of a text run is from left to right.
+    *
+    * @since 1.4
+    */
+   public static final int LAYOUT_LEFT_TO_RIGHT = 0;
+ 
+ 
+   /**
+    * A flag for <code>layoutGlyphVector</code>, indicating that the
+    * orientation of a text run is from right to left.
+    *
+    * @since 1.4
+    */
+   public static final int LAYOUT_RIGHT_TO_LEFT = 1;
+ 
+ 
+   /**
+    * A flag for <code>layoutGlyphVector</code>, indicating that the
+    * text does not contain valid characters before the
+    * <code>start</code> position.  If this flag is set,
+    * <code>layoutGlyphVector</code> does not examine the text before
+    * <code>start</code>, even if this would be necessary to select the
+    * correct glyphs (e.g., for Arabic text).
+    *
+    * @since 1.4
+    */
+   public static final int LAYOUT_NO_START_CONTEXT = 2;
+ 
+ 
+   /**
+    * A flag for <code>layoutGlyphVector</code>, indicating that the
+    * text does not contain valid characters after the
+    * <code>limit</code> position.  If this flag is set,
+    * <code>layoutGlyphVector</code> does not examine the text after
+    * <code>limit</code>, even if this would be necessary to select the
+    * correct glyphs (e.g., for Arabic text).
+    *
+    * @since 1.4
+    */
+   public static final int LAYOUT_NO_LIMIT_CONTEXT = 4;
+ 
+   /**
+    * The logical name of this font.
+    *
+    * @since 1.0
+    */
+   protected String name;
+ 
+   /**
+    * The size of this font in points, rounded.
+    *
+    * @since 1.0
+    */
+   protected int size;
+ 
+   /**
+    * The size of this font in points.
+    *
+    * @since 1.0
+    */
+   protected float pointSize;
+ 
+   /**
+    * The style of this font -- PLAIN, BOLD, ITALIC or BOLD+ITALIC.
+    *
+    * @since 1.0
+    */
+   protected int style;
+ 
+ //Serialization constant
+   private static final long serialVersionUID = -4206021311591459213L;
+ 
+ 
+   // The ClasspathToolkit-provided peer which implements this font
+   private transient ClasspathFontPeer peer;
+ 
+ 
+   /**
+    * Creates a <code>Font</code> object from the specified string, which
+    * is in one of the following formats:
+    * <p>
+    * <ul>
+    * <li>fontname-style-pointsize
+    * <li>fontname-style
+    * <li>fontname-pointsize
+    * <li>fontname
+    * </ul>
+    * <p>
+    * The style should be one of BOLD, ITALIC, or BOLDITALIC.  The default
+    * style if none is specified is PLAIN.  The default size if none
+    * is specified is 12.
+    * 
+    * @param fontspec  a string specifying the required font (<code>null</code> 
+    *                  permitted, interpreted as 'Dialog-PLAIN-12').
+    * 
+    * @return A font.
+    */
+   public static Font decode(String fontspec)
+   {
+     if (fontspec == null) 
+       fontspec = "Dialog-PLAIN-12";
+     String name = null;
+     int style = PLAIN;
+     int size = 12;
+ 
+     StringTokenizer st = new StringTokenizer(fontspec, "- ");
+     while (st.hasMoreTokens())
+       {
+         String token = st.nextToken();
+         if (name == null)
+           {
+             name = token;
+             continue;
+           }
+ 
+         if (token.toUpperCase().equals("BOLD"))
+           {
+             style = BOLD;
+             continue;
+           }
+         if (token.toUpperCase().equals("ITALIC"))
+           {
+             style = ITALIC;
+             continue;
+           }
+         if (token.toUpperCase().equals("BOLDITALIC"))
+           {
+             style = BOLD | ITALIC;
+             continue;
+           }
+ 
+         int tokenval = 0;
+         try
+           {
+             tokenval = Integer.parseInt(token);
+           }
+         catch (NumberFormatException e)
+           {
+             // Ignored.
+           }
+ 
+       if (tokenval != 0)
+         size = tokenval;
+     }
+ 
+     HashMap attrs = new HashMap();
+     ClasspathFontPeer.copyStyleToAttrs(style, attrs);
+     ClasspathFontPeer.copySizeToAttrs(size, attrs);
+ 
+     return getFontFromToolkit(name, attrs);
+   }
+ 
+   /* These methods delegate to the toolkit. */
+ 
+   static ClasspathToolkit tk()
+   {
+     return (ClasspathToolkit) Toolkit.getDefaultToolkit();
+   }
+ 
+   /* Every factory method in Font should eventually call this. */
+   static Font getFontFromToolkit(String name, Map attribs)
+   {
+     return tk().getFont(name, attribs);
+   }
+ 
+   /* Every Font constructor should eventually call this. */
+   static ClasspathFontPeer getPeerFromToolkit(String name, Map attrs)
+   {
+     return tk().getClasspathFontPeer(name, attrs);
+   }
+ 
+ 
+   /**
+    * Returns a <code>Font</code> object from the passed property name.
+    *
+    * @param propname The name of the system property.
+    * @param defval Value to use if the property is not found.
+    *
+    * @return The requested font, or <code>default</code> if the property 
+    * not exist or is malformed.
+    */
+   public static Font getFont(String propname, Font defval)
+   {
+     String propval = System.getProperty(propname);
+     if (propval != null)
+       return decode(propval);
+     return defval;
+   }
+ 
+   /**
+    * Returns a <code>Font</code> object from the passed property name.
+    *
+    * @param propname The name of the system property.
+    *
+    * @return The requested font, or <code>null</code> if the property 
+    * not exist or is malformed.
+    */
+   public static Font getFont(String propname)
+   {
+     return getFont(propname, (Font) null);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Font</code> with the specified
+    * attributes.
+    *
+    * @param name The name of the font.
+    * @param style The font style.
+    * @param size The font point size.
+    */
+   public Font(String name, int style, int size)
+   {
+     HashMap attrs = new HashMap();
+     ClasspathFontPeer.copyStyleToAttrs(style, attrs);
+     ClasspathFontPeer.copySizeToAttrs(size, attrs);
+     this.peer = getPeerFromToolkit(name, attrs);
+     this.size = size;
+     this.pointSize = (float) size;
+     if (name != null)
+       this.name = name;
+     else
+       this.name = peer.getName(this);
+   }
+ 
+   public Font(Map attrs)
+   {
+     this(null, attrs);
+   }
+ 
+   /* This extra constructor is here to permit ClasspathToolkit and to
+    build a font with a "logical name" as well as attrs.
+    ClasspathToolkit.getFont(String,Map) uses reflection to call this
+    package-private constructor. */
+   Font(String name, Map attrs)
+   {
+     // If attrs is null, setting it to an empty HashMap will give this
+     // Font default attributes.
+     if (attrs == null)
+       attrs = new HashMap();
+     peer = getPeerFromToolkit(name, attrs);
+     size = (int) peer.getSize(this);
+     pointSize = peer.getSize(this);
+     if (name != null)
+       this.name = name;
+     else
+       this.name = peer.getName(this);
+   }
+ 
+   /**
+    * Returns the logical name of the font.  A logical name is the name the
+    * font was constructed with. It may be the name of a logical font (one
+    * of 6 required names in all java environments) or it may be a face
+    * name.
+    *
+    * @return The logical name of the font.
+    *
+    * @see #getFamily()
+    * @see #getFontName()
+    */
+   public String getName ()
+   {
+     return peer.getName(this);
+   }
+ 
+   /**
+    * Returns the size of the font, in typographics points (1/72 of an inch),
+    * rounded to an integer.
+    * 
+    * @return The font size
+    */
+   public int getSize()
+   {
+     return size;
+   }
+ 
+   /**
+    * Returns the size of the font, in typographics points (1/72 of an inch).
+    * 
+    * @return The font size
+    */
+   public float getSize2D()
+   {
+     return pointSize;
+   }
+ 
+   /**
+    * Tests whether or not this is a plain font.  This will be true if
+    * and only if neither the bold nor the italics style is set.
+    *
+    * @return <code>true</code> if this is a plain font, <code>false</code>
+    * otherwise.
+    */
+   public boolean isPlain()
+   {
+     return peer.isPlain(this); 
+   }
+ 
+   /**
+    * Tests whether or not this font is bold.
+    *
+    * @return <code>true</code> if this font is bold, <code>false</code>
+    * otherwise.
+    */
+   public boolean isBold()
+   {
+     return peer.isBold(this);
+   }
+ 
+   /**
+    * Tests whether or not this font is italic.
+    *
+    * @return <code>true</code> if this font is italic, <code>false</code>
+    * otherwise.
+    */
+   public boolean isItalic()
+   {
+     return peer.isItalic(this);
+   }
+ 
+   /**
+    * Returns the family name of this font. A family name describes a design
+    * or "brand name" (such as Helvetica or Palatino). It is less specific
+    * than a font face name (such as Helvetica Bold).
+    *
+    * @return A string containing the font family name.
+    *
+    * @since 1.2
+    *
+    * @see #getName()
+    * @see #getFontName()
+    * @see GraphicsEnvironment#getAvailableFontFamilyNames()
+    */
+   public String getFamily()
+   {
+     return peer.getFamily(this);
+   }
+ 
+   /**
+    * Returns integer code representing the sum of style flags of this font, a
+    * combination of either {@link #PLAIN}, {@link #BOLD}, or {@link #ITALIC}.
+    *
+    * @return code representing the style of this font.
+    *
+    * @see #isPlain()
+    * @see #isBold()
+    * @see #isItalic()
+    */
+   public int getStyle()
+   {
+     return peer.getStyle(this);
+   }
+ 
+   /**
+    * Checks if specified character maps to a glyph in this font.
+    *
+    * @param c The character to check.
+    *
+    * @return Whether the character has a corresponding glyph in this font.
+    *
+    * @since 1.2
+    */
+   public boolean canDisplay(char c)
+   {
+     return peer.canDisplay(this, c);    
+   }
+ 
+   /**
+    * Checks how much of a given string can be mapped to glyphs in 
+    * this font.
+    *
+    * @param s The string to check.
+    *
+    * @return The index of the first character in <code>s</code> which cannot
+    * be converted to a glyph by this font, or <code>-1</code> if all
+    * characters can be mapped to glyphs.
+    *
+    * @since 1.2
+    */
+   public int canDisplayUpTo(String s)
+   {
+     return peer.canDisplayUpTo(this, new StringCharacterIterator(s), 
+                                0, s.length() - 1);
+   }
+ 
+   /**
+    * Checks how much of a given sequence of text can be mapped to glyphs in
+    * this font.
+    *
+    * @param text Array containing the text to check.
+    * @param start Position of first character to check in <code>text</code>.
+    * @param limit Position of last character to check in <code>text</code>.
+    *
+    * @return The index of the first character in the indicated range which
+    * cannot be converted to a glyph by this font, or <code>-1</code> if all
+    * characters can be mapped to glyphs.
+    *
+    * @since 1.2
+    *
+    * @throws IndexOutOfBoundsException if the range [start, limit] is
+    * invalid in <code>text</code>.
+    */
+   public int canDisplayUpTo (char[] text, int start, int limit)
+   {
+     return peer.canDisplayUpTo(this,
+                                new StringCharacterIterator(new String (text)),
+                                start, limit);
+   }
+ 
+   /**
+    * Checks how much of a given sequence of text can be mapped to glyphs in
+    * this font.
+    *
+    * @param i Iterator over the text to check.
+    * @param start Position of first character to check in <code>i</code>.
+    * @param limit Position of last character to check in <code>i</code>.
+    *
+    * @return The index of the first character in the indicated range which
+    * cannot be converted to a glyph by this font, or <code>-1</code> if all
+    * characters can be mapped to glyphs.
+    *
+    * @since 1.2
+    *
+    * @throws IndexOutOfBoundsException if the range [start, limit] is
+    * invalid in <code>i</code>.
+    */
+   public int canDisplayUpTo(CharacterIterator i, int start, int limit)
+   {
+     return peer.canDisplayUpTo(this, i, start, limit);    
+   }
+ 
+   /**
+    * Creates a new font with point size 1 and {@link #PLAIN} style,
+    * reading font data from the provided input stream. The resulting font
+    * can have further fonts derived from it using its
+    * <code>deriveFont</code> method.
+    *
+    * @param fontFormat Integer code indicating the format the font data is
+    * in.Currently this can only be {@link #TRUETYPE_FONT}.
+    * @param is {@link InputStream} from which font data will be read. This
+    * stream is not closed after font data is extracted.
+    *
+    * @return A new {@link Font} of the format indicated.
+    *
+    * @throws IllegalArgumentException if <code>fontType</code> is not
+    * recognized.
+    * @throws FontFormatException if data in InputStream is not of format
+    * indicated.
+    * @throws IOException if insufficient data is present on InputStream.
+    *
+    * @since 1.3
+    */
+   public static Font createFont (int fontFormat, InputStream is)
+     throws FontFormatException, IOException
+   {
+     return tk().createFont(fontFormat, is);
+   }
+ 
+   /**
+    * Maps characters to glyphs in a one-to-one relationship, returning a new
+    * {@link GlyphVector} with a mapped glyph for each input character. This
+    * sort of mapping is often sufficient for some scripts such as Roman, but
+    * is inappropriate for scripts with special shaping or contextual layout
+    * requirements such as Arabic, Indic, Hebrew or Thai.
+    *
+    * @param ctx The rendering context used for precise glyph placement.
+    * @param str The string to convert to Glyphs.
+    *
+    * @return A new {@link GlyphVector} containing glyphs mapped from str,
+    * through the font's cmap table.
+    *
+    * @see #layoutGlyphVector(FontRenderContext, char[], int, int, int)
+    */
+   public GlyphVector createGlyphVector(FontRenderContext ctx, String str)
+   {
+     return peer.createGlyphVector(this, ctx, new StringCharacterIterator(str));
+   }
+ 
+   /**
+    * Maps characters to glyphs in a one-to-one relationship, returning a new
+    * {@link GlyphVector} with a mapped glyph for each input character. This
+    * sort of mapping is often sufficient for some scripts such as Roman, but
+    * is inappropriate for scripts with special shaping or contextual layout
+    * requirements such as Arabic, Indic, Hebrew or Thai.
+    *
+    * @param ctx The rendering context used for precise glyph placement.
+    * @param i Iterator over the text to convert to glyphs.
+    *
+    * @return A new {@link GlyphVector} containing glyphs mapped from str,
+    * through the font's cmap table.
+    *
+    * @see #layoutGlyphVector(FontRenderContext, char[], int, int, int)
+    */
+   public GlyphVector createGlyphVector(FontRenderContext ctx,
+                                        CharacterIterator i)
+   {
+     return peer.createGlyphVector(this, ctx, i);
+   }
+ 
+   /**
+    * Maps characters to glyphs in a one-to-one relationship, returning a new
+    * {@link GlyphVector} with a mapped glyph for each input character. This
+    * sort of mapping is often sufficient for some scripts such as Roman, but
+    * is inappropriate for scripts with special shaping or contextual layout
+    * requirements such as Arabic, Indic, Hebrew or Thai.
+    *
+    * @param ctx The rendering context used for precise glyph placement.
+    * @param chars Array of characters to convert to glyphs.
+    *
+    * @return A new {@link GlyphVector} containing glyphs mapped from str,
+    * through the font's cmap table.
+    *
+    * @see #layoutGlyphVector(FontRenderContext, char[], int, int, int)
+    */
+   public GlyphVector createGlyphVector(FontRenderContext ctx, char[] chars)
+   {
+     return peer.createGlyphVector(this, ctx,
+                                new StringCharacterIterator(new String(chars)));
+   }
+ 
+   /**
+    * Extracts a sequence of glyphs from a font, returning a new {@link
+    * GlyphVector} with a mapped glyph for each input glyph code. 
+    *
+    * @param ctx The rendering context used for precise glyph placement.
+    * @param glyphCodes Array of characters to convert to glyphs.
+    *
+    * @return A new {@link GlyphVector} containing glyphs mapped from str,
+    * through the font's cmap table.
+    *
+    * @see #layoutGlyphVector(FontRenderContext, char[], int, int, int)
+    *
+    * @specnote This method is documented to perform character-to-glyph
+    * conversions, in the Sun documentation, but its second parameter name is
+    * "glyphCodes" and it is not clear to me why it would exist if its
+    * purpose was to transport character codes inside integers. I assume it
+    * is mis-documented in the Sun documentation.
+    */
+   public GlyphVector createGlyphVector(FontRenderContext ctx, int[] glyphCodes)
+   {
+     return peer.createGlyphVector(this, ctx, glyphCodes);
+   }
+ 
+   /**
+    * Produces a new {@link Font} based on the current font, adjusted to a
+    * new size and style.
+    *
+    * @param style The style of the newly created font.
+    * @param size The size of the newly created font.
+    *
+    * @return A clone of the current font, with the specified size and style.
+    *
+    * @since 1.2
+    */
+   public Font deriveFont(int style, float size)
+   {
+     return peer.deriveFont(this, style, size);
+   }
+ 
+   /**
+    * Produces a new {@link Font} based on the current font, adjusted to a
+    * new size.
+    *
+    * @param size The size of the newly created font.
+    *
+    * @return A clone of the current font, with the specified size.
+    *
+    * @since 1.2
+    */
+   public Font deriveFont(float size)
+   {
+     return peer.deriveFont(this, size);
+   }
+ 
+   /**
+    * Produces a new {@link Font} based on the current font, adjusted to a
+    * new style.
+    *
+    * @param style The style of the newly created font.
+    *
+    * @return A clone of the current font, with the specified style.
+    *
+    * @since 1.2
+    */
+   public Font deriveFont(int style)
+   {
+     return peer.deriveFont(this, style);
+   }
+ 
+   /**
+    * Produces a new {@link Font} based on the current font, adjusted to a
+    * new style and subjected to a new affine transformation.
+    *
+    * @param style The style of the newly created font.
+    * @param a The transformation to apply.
+    *
+    * @return A clone of the current font, with the specified style and
+    * transform.
+    *
+    * @throws IllegalArgumentException If transformation is
+    * <code>null</code>.
+    *
+    * @since 1.2
+    */
+   public Font deriveFont(int style, AffineTransform a)
+   {
+     if (a == null)
+       throw new IllegalArgumentException("Affine transformation is null");
+ 
+     return peer.deriveFont(this, style, a);
+   }
+ 
+   /**
+    * Produces a new {@link Font} based on the current font, subjected
+    * to a new affine transformation.
+    *
+    * @param a The transformation to apply.
+    *
+    * @return A clone of the current font, with the specified transform.
+    *
+    * @throws IllegalArgumentException If transformation is
+    * <code>null</code>.
+    *
+    * @since 1.2
+    */
+   public Font deriveFont(AffineTransform a)
+   {
+     if (a == null)
+       throw new IllegalArgumentException("Affine transformation is null");
+ 
+     return peer.deriveFont(this, a);
+   }
+ 
+   /**
+    * Produces a new {@link Font} based on the current font, adjusted to a
+    * new set of attributes.
+    *
+    * @param attributes Attributes of the newly created font.
+    *
+    * @return A clone of the current font, with the specified attributes.
+    *
+    * @since 1.2
+    */
+   public Font deriveFont(Map attributes)
+   {
+     return peer.deriveFont(this, attributes);
+   }
+ 
+   /**
+    * Returns a map of chracter attributes which this font currently has set.
+    *
+    * @return A map of chracter attributes which this font currently has set.
+    *
+    * @see #getAvailableAttributes()
+    * @see java.text.AttributedCharacterIterator.Attribute
+    * @see java.awt.font.TextAttribute
+    */
+   public Map getAttributes()
+   {
+     return peer.getAttributes(this);
+   }
+ 
+   /**
+    * Returns an array of chracter attribute keys which this font understands. 
+    *
+    * @return An array of chracter attribute keys which this font understands.
+    *
+    * @see #getAttributes()
+    * @see java.text.AttributedCharacterIterator.Attribute
+    * @see java.awt.font.TextAttribute
+    */
+   public AttributedCharacterIterator.Attribute[] getAvailableAttributes()
+   {
+     return peer.getAvailableAttributes(this);
+   }
+ 
+   /**
+    * Returns a baseline code (one of {@link #ROMAN_BASELINE}, {@link
+    * #CENTER_BASELINE} or {@link #HANGING_BASELINE}) indicating which baseline
+    * this font will measure baseline offsets for, when presenting glyph
+    * metrics for a given character.
+    *
+    * Baseline offsets describe the position of a glyph relative to an
+    * invisible line drawn under, through the center of, or over a line of
+    * rendered text, respectively. Different scripts use different baseline
+    * modes, so clients should not assume all baseline offsets in a glyph
+    * vector are from a common baseline.
+    *
+    * @param c The character code to select a baseline mode for.
+    *
+    * @return The baseline mode which would be used in a glyph associated
+    * with the provided character.
+    *
+    * @since 1.2
+    *
+    * @see LineMetrics#getBaselineOffsets()
+    */
+   public byte getBaselineFor(char c)
+   {
+     return peer.getBaselineFor(this, c);
+   }
+ 
+   /**
+    * Returns the family name of this font. A family name describes a
+    * typographic style (such as Helvetica or Palatino). It is more specific
+    * than a logical font name (such as Sans Serif) but less specific than a
+    * font face name (such as Helvetica Bold).
+    *
+    * @param lc The locale in which to describe the name of the font family.
+    *
+    * @return A string containing the font family name, localized for the
+    * provided locale.
+    *
+    * @since 1.2
+    *
+    * @see #getName()
+    * @see #getFontName()
+    * @see GraphicsEnvironment#getAvailableFontFamilyNames()
+    * @see Locale
+    */
+   public String getFamily(Locale lc)
+   {
+     return peer.getFamily(this, lc); 
+   }
+ 
+   /**
+    * Returns a font appropriate for the given attribute set.
+    *
+    * @param attributes The attributes required for the new font.
+    *
+    * @return A new Font with the given attributes.
+    *
+    * @since 1.2
+    *
+    * @see java.awt.font.TextAttribute  
+    */
+   public static Font getFont(Map attributes)
+   {
+     return getFontFromToolkit(null, attributes);
+   }
+ 
+   /**
+    * Returns the font face name of the font.  A font face name describes a
+    * specific variant of a font family (such as Helvetica Bold). It is more
+    * specific than both a font family name (such as Helvetica) and a logical
+    * font name (such as Sans Serif).
+    *
+    * @return The font face name of the font.
+    *
+    * @since 1.2
+    *
+    * @see #getName()
+    * @see #getFamily()
+    */
+   public String getFontName()
+   {
+     return peer.getFontName(this);
+   }
+ 
+   /**
+    * Returns the font face name of the font.  A font face name describes a
+    * specific variant of a font family (such as Helvetica Bold). It is more
+    * specific than both a font family name (such as Helvetica).
+    *
+    * @param lc The locale in which to describe the name of the font face.
+    *
+    * @return A string containing the font face name, localized for the
+    * provided locale.
+    *
+    * @since 1.2
+    *
+    * @see #getName()
+    * @see #getFamily()
+    */
+   public String getFontName(Locale lc)
+   {
+     return peer.getFontName(this, lc);
+   }
+ 
+   /**
+    * Returns the italic angle of this font, a measurement of its slant when
+    * style is {@link #ITALIC}. The precise meaning is the inverse slope of a
+    * caret line which "best measures" the font's italic posture.
+    *
+    * @return The italic angle.
+    *
+    * @see java.awt.font.TextAttribute#POSTURE
+    */
+   public float getItalicAngle()
+   {
+     return peer.getItalicAngle(this);
+   }
+ 
+   /**
+    * Returns a {@link LineMetrics} object constructed with the specified
+    * text and {@link FontRenderContext}. 
+    *
+    * @param text The string to calculate metrics from.
+    * @param begin Index of first character in <code>text</code> to measure.
+    * @param limit Index of last character in <code>text</code> to measure.
+    * @param rc Context for calculating precise glyph placement and hints.
+    *
+    * @return A new {@link LineMetrics} object.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>text</code>.
+    */
+   public LineMetrics getLineMetrics(String text, int begin, 
+                                     int limit, FontRenderContext rc)
+   {
+     return peer.getLineMetrics(this, new StringCharacterIterator(text), 
+                                begin, limit, rc);
+   }
+ 
+   /**
+    * Returns a {@link LineMetrics} object constructed with the specified
+    * text and {@link FontRenderContext}. 
+    *
+    * @param chars The string to calculate metrics from.
+    * @param begin Index of first character in <code>text</code> to measure.
+    * @param limit Index of last character in <code>text</code> to measure.
+    * @param rc Context for calculating precise glyph placement and hints.
+    *
+    * @return A new {@link LineMetrics} object.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>chars</code>.
+    */
+   public LineMetrics getLineMetrics(char[] chars, int begin, 
+                                     int limit, FontRenderContext rc)
+   {
+     return peer.getLineMetrics(this,
+                                new StringCharacterIterator(new String(chars)), 
+                                begin, limit, rc);
+   }
+ 
+   /**
+    * Returns a {@link LineMetrics} object constructed with the specified
+    * text and {@link FontRenderContext}. 
+    *
+    * @param ci The string to calculate metrics from.
+    * @param begin Index of first character in <code>text</code> to measure.
+    * @param limit Index of last character in <code>text</code> to measure.
+    * @param rc Context for calculating precise glyph placement and hints.
+    *
+    * @return A new {@link LineMetrics} object.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>ci</code>.
+    */
+   public LineMetrics getLineMetrics(CharacterIterator ci, int begin, 
+                                     int limit, FontRenderContext rc)
+   {
+     return peer.getLineMetrics(this, ci, begin, limit, rc);
+   }
+ 
+   /**
+    * Returns the maximal bounding box of all the bounding boxes in this
+    * font, when the font's bounding boxes are evaluated in a given {@link
+    * FontRenderContext}
+    *
+    * @param rc Context in which to evaluate bounding boxes.
+    *
+    * @return The maximal bounding box.
+    */
+   public Rectangle2D getMaxCharBounds(FontRenderContext rc)
+   {
+     return peer.getMaxCharBounds(this, rc);
+   }
+ 
+   /**
+    * Returns the glyph code this font uses to represent missing glyphs. This
+    * code will be present in glyph vectors when the font was unable to
+    * locate a glyph to represent a particular character code.
+    *
+    * @return The missing glyph code.
+    *
+    * @since 1.2
+    */
+   public int getMissingGlyphCode()
+   {
+     return peer.getMissingGlyphCode(this);
+   }
+ 
+   /**
+    * Returns the overall number of glyphs in this font. This number is one
+    * more than the greatest glyph code used in any glyph vectors this font
+    * produces. In other words, glyph codes are taken from the range
+    * <code>[ 0, getNumGlyphs() - 1 ]</code>.
+    *
+    * @return The number of glyphs in this font.
+    * 
+    * @since 1.2
+    */
+   public int getNumGlyphs()
+   {
+     return peer.getMissingGlyphCode(this);
+   }
+ 
+   /**
+    * Returns the PostScript Name of this font.   
+    *
+    * @return The PostScript Name of this font.
+    *
+    * @since 1.2
+    *
+    * @see #getName()
+    * @see #getFamily()
+    * @see #getFontName()
+    */
+   public String getPSName()
+   {
+     return peer.getPostScriptName(this);
+   }
+ 
+   /**
+    * Returns the logical bounds of the specified string when rendered with this
+    * font in the specified {@link FontRenderContext}. This box will include the
+    * glyph origin, ascent, advance, height, and leading, but may not include all
+    * diacritics or accents. To get the complete visual bounding box of all the
+    * glyphs in a run of text, use the {@link TextLayout#getBounds} method of 
+    * {@link TextLayout}.
+    *
+    * @param str The string to measure.
+    * @param frc The context in which to make the precise glyph measurements.
+    * 
+    * @return A bounding box covering the logical bounds of the specified text.
+    *
+    * @see #createGlyphVector(FontRenderContext, String)
+    */
+   public Rectangle2D getStringBounds(String str, FontRenderContext frc)
+   {
+     return getStringBounds(str, 0, str.length() - 1, frc);
+   }
+ 
+   /**
+    * Returns the logical bounds of the specified string when rendered with this
+    * font in the specified {@link FontRenderContext}. This box will include the
+    * glyph origin, ascent, advance, height, and leading, but may not include all
+    * diacritics or accents. To get the complete visual bounding box of all the
+    * glyphs in a run of text, use the {@link TextLayout#getBounds} method of
+    * {@link TextLayout}.
+    *
+    * @param str The string to measure.
+    * @param begin Index of the first character in <code>str</code> to measure.
+    * @param limit Index of the last character in <code>str</code> to measure.
+    * @param frc The context in which to make the precise glyph measurements.
+    * 
+    * @return A bounding box covering the logical bounds of the specified text.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>str</code>.
+    *
+    * @since 1.2
+    *
+    * @see #createGlyphVector(FontRenderContext, String)
+    */
+   public Rectangle2D getStringBounds(String str, int begin, 
+                                      int limit, FontRenderContext frc)
+   {
+     return peer.getStringBounds(this, new StringCharacterIterator(str), begin,
+                                 limit, frc);
+   }
+ 
+   /**
+    * Returns the logical bounds of the specified string when rendered with this
+    * font in the specified {@link FontRenderContext}. This box will include the
+    * glyph origin, ascent, advance, height, and leading, but may not include all
+    * diacritics or accents. To get the complete visual bounding box of all the
+    * glyphs in a run of text, use the {@link TextLayout#getBounds} method of
+    * {@link TextLayout}.
+    *
+    * @param ci The text to measure.
+    * @param begin Index of the first character in <code>ci</code> to measure.
+    * @param limit Index of the last character in <code>ci</code> to measure.
+    * @param frc The context in which to make the precise glyph measurements.
+    * 
+    * @return A bounding box covering the logical bounds of the specified text.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>ci</code>.
+    *
+    * @since 1.2
+    *
+    * @see #createGlyphVector(FontRenderContext, CharacterIterator)
+    */
+   public Rectangle2D getStringBounds(CharacterIterator ci, int begin, 
+                                      int limit, FontRenderContext frc)
+   {
+     return peer.getStringBounds(this, ci, begin, limit, frc);
+   }
+ 
+   /**
+    * Returns the logical bounds of the specified string when rendered with this
+    * font in the specified {@link FontRenderContext}. This box will include the
+    * glyph origin, ascent, advance, height, and leading, but may not include all
+    * diacritics or accents. To get the complete visual bounding box of all the
+    * glyphs in a run of text, use the {@link TextLayout#getBounds} method of
+    * {@link TextLayout}.
+    *
+    * @param chars The text to measure.
+    * @param begin Index of the first character in <code>ci</code> to measure.
+    * @param limit Index of the last character in <code>ci</code> to measure.
+    * @param frc The context in which to make the precise glyph measurements.
+    * 
+    * @return A bounding box covering the logical bounds of the specified text.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>chars</code>.
+    *
+    * @since 1.2
+    *
+    * @see #createGlyphVector(FontRenderContext, char[])
+    */
+   public Rectangle2D getStringBounds(char[] chars, int begin, 
+                                      int limit, FontRenderContext frc)
+   {
+     return peer.getStringBounds(this,
+                                 new StringCharacterIterator(new String(chars)), 
+                                 begin, limit, frc);
+   }
+ 
+   /**
+    * Returns a copy of the affine transformation this font is currently
+    * subject to, if any.
+    *
+    * @return The current transformation.
+    */
+   public AffineTransform getTransform()
+   {
+     return peer.getTransform(this);
+   }
+ 
+   /**
+    * Indicates whether this font's line metrics are uniform. A font may be
+    * composed of several "subfonts", each covering a different code range,
+    * and each with their own line metrics. A font with no subfonts, or
+    * subfonts with identical line metrics, is said to have "uniform" line
+    * metrics.
+    *
+    * @return Whether this font has uniform line metrics.
+    *
+    * @see LineMetrics
+    * @see #getLineMetrics(String, FontRenderContext)
+    */
+   public boolean hasUniformLineMetrics()
+   {
+     return peer.hasUniformLineMetrics(this);
+   }
+ 
+   /**
+    * Indicates whether this font is subject to a non-identity affine
+    * transformation.
+    *
+    * @return <code>true</code> iff the font has a non-identity affine
+    * transformation applied to it.
+    */
+   public boolean isTransformed()
+   {
+     return peer.isTransformed(this);
+   }
+ 
+   /**
+    * Produces a glyph vector representing a full layout fo the specified
+    * text in this font. Full layouts may include complex shaping and
+    * reordering operations, for scripts such as Arabic or Hindi.
+    *
+    * Bidirectional (bidi) layout is not performed in this method; text
+    * should have its bidi direction specified with one of the flags {@link
+    * #LAYOUT_LEFT_TO_RIGHT} or {@link #LAYOUT_RIGHT_TO_LEFT}.
+    *
+    * Some types of layout (notably Arabic glyph shaping) may examine context
+    * characters beyond the bounds of the indicated range, in order to select
+    * an appropriate shape. The flags {@link #LAYOUT_NO_START_CONTEXT} and
+    * {@link #LAYOUT_NO_LIMIT_CONTEXT} can be provided to prevent these extra
+    * context areas from being examined, for instance if they contain invalid
+    * characters.
+    *
+    * @param frc Context in which to perform the layout.
+    * @param chars Text to perform layout on.
+    * @param start Index of first character to perform layout on.
+    * @param limit Index of last character to perform layout on.
+    * @param flags Combination of flags controlling layout.
+    *
+    * @return A new {@link GlyphVector} representing the specified text.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>chars</code>. 
+    */
+   public GlyphVector layoutGlyphVector(FontRenderContext frc, 
+                                        char[] chars, int start, 
+                                        int limit, int flags)
+   {
+     return peer.layoutGlyphVector(this, frc, chars, start, limit, flags);
+   }
+ 
+ 
+   /**
+    * Returns a native peer object for this font.
+    *
+    * @return A native peer object for this font.
+    *
+    * @deprecated
+    */
+   public FontPeer getPeer()
+   {
+     return peer;
+   }
+ 
+ 
+   /**
+    * Returns a hash value for this font.
+    * 
+    * @return A hash for this font.
+    */
+   public int hashCode()
+   {
+     return this.toString().hashCode();
+   }
+ 
+ 
+   /**
+    * Tests whether or not the specified object is equal to this font.  This
+    * will be true if and only if:
+    * <P>
+    * <ul>
+    * <li>The object is not <code>null</code>.
+    * <li>The object is an instance of <code>Font</code>.
+    * <li>The object has the same names, style, size, and transform as this object.
+    * </ul>
+    *
+    * @return <code>true</code> if the specified object is equal to this
+    * object, <code>false</code> otherwise.
+    */
+   public boolean equals(Object obj)
+   {
+     if (obj == null)
+       return false;
+ 
+     if (! (obj instanceof Font))
+       return false;
+ 
+     Font f = (Font) obj;
+ 
+     return (f.getName().equals(this.getName())
+             && f.getFamily().equals(this.getFamily())
+             && f.getFontName().equals(this.getFontName())
+             && f.getTransform().equals(this.getTransform ())
+             && f.getSize() == this.getSize()
+             && f.getStyle() == this.getStyle());
+   }
+ 
+   /**
+    * Returns a string representation of this font.
+    *
+    * @return A string representation of this font.
+    */
+   public String toString()
+   {
+     String styleString = "";
+ 
+     switch (getStyle())
+       {
+       case 0:
+         styleString = "plain";
+         break;
+       case 1:
+         styleString = "bold";
+         break;
+       case 2:
+         styleString = "italic";
+         break;
+       default:
+         styleString = "unknown";
+      }
+     
+     return getClass().getName() 
+              + "[family=" + getFamily ()
+              + ",name=" + getFontName ()
+              + ",style=" + styleString
+              + ",size=" + getSize () + "]";
+   }
+ 
+ 
+   /**
+    * Determines the line metrics for a run of text.
+    *
+    * @param str the text run to be measured.
+    *
+    * @param frc the font rendering parameters that are used for the
+    *        measurement. The exact placement and size of text slightly
+    *        depends on device-specific characteristics, for instance
+    *        the device resolution or anti-aliasing.  For this reason,
+    *        the returned measurement will only be accurate if the
+    *        passed <code>FontRenderContext</code> correctly reflects
+    *        the relevant parameters. Hence, <code>frc</code> should be
+    *        obtained from the same <code>Graphics2D</code> that will
+    *        be used for drawing, and any rendering hints should be set
+    *        to the desired values before obtaining <code>frc</code>.
+    *
+    * @see java.awt.Graphics2D#getFontRenderContext()
+    */
+   public LineMetrics getLineMetrics(String str, FontRenderContext frc)
+   {
+     return getLineMetrics(str, 0, str.length() - 1, frc);
+   }
+ 
+   /**
+    * Reads the normal fields from the stream and then constructs the
+    * peer from the style and size through getPeerFromToolkit().
+    */
+   private void readObject(ObjectInputStream ois)
+     throws IOException, ClassNotFoundException
+   {
+     ois.defaultReadObject();
+ 
+     HashMap attrs = new HashMap();
+     ClasspathFontPeer.copyStyleToAttrs(style, attrs);
+     ClasspathFontPeer.copySizeToAttrs(size, attrs);
+     peer = getPeerFromToolkit(name, attrs);
+ 
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/FontFormatException.java gcc-4.1.0/libjava/classpath/java/awt/FontFormatException.java
*** gcc-4.0.2/libjava/classpath/java/awt/FontFormatException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/FontFormatException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* FontFormatException.java -- the specified font is bad
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * Thrown when a specified font is bad.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Font
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public class FontFormatException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = -4481290147811361272L;
+ 
+   /**
+    * Create a new instance with the specified detailed error message.
+    *
+    * @param message the detailed error message
+    */
+   public FontFormatException(String message)
+   {
+     super(message);
+   }
+ } // class FontFormatException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/FontMetrics.java gcc-4.1.0/libjava/classpath/java/awt/FontMetrics.java
*** gcc-4.0.2/libjava/classpath/java/awt/FontMetrics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/FontMetrics.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,448 ----
+ /* FontMetrics.java -- Information about about a fonts display characteristics
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.LineMetrics;
+ import java.awt.geom.Rectangle2D;
+ import java.text.CharacterIterator;
+ 
+ // FIXME: I leave many methods basically unimplemented.  This
+ // should be reviewed.
+ 
+ /**
+   * This class returns information about the display characteristics of
+   * a font.  It is abstract, and concrete subclasses should implement at
+   * least the following methods:
+   *
+   * <ul>
+   * <li>getAscent()</li>
+   * <li>getDescent()</li>
+   * <li>getLeading()</li>
+   * <li>getMaxAdvance()</li>
+   * <li>charWidth(char)</li>
+   * <li>charsWidth(char[], int, int)</li>
+   * </ul>
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public abstract class FontMetrics implements java.io.Serializable
+ {
+   // Serialization constant.
+   private static final long serialVersionUID = 1681126225205050147L;
+ 
+   /**
+    * This is the font for which metrics will be returned.
+    */
+   protected Font font;
+ 
+   /**
+    * Initializes a new instance of <code>FontMetrics</code> for the
+    * specified font.
+    *
+    * @param font The font to return metric information for.
+    */
+   protected FontMetrics(Font font)
+   {
+     this.font = font;
+   }
+ 
+   /**
+    * Returns the font that this object is creating metric information fo.
+    *
+    * @return The font for this object.
+    */
+   public Font getFont()
+   {
+     return font;
+   }
+ 
+   /**
+    * Returns the leading, or spacing between lines, for this font.
+    *
+    * @return The font leading.
+    */
+   public int getLeading()
+   {
+     return 0;
+   }
+ 
+   /**
+    * Returns the ascent of the font, which is the distance from the base
+    * to the top of the majority of characters in the set.  Some characters
+    * can exceed this value however.
+    *
+    * @return The font ascent.
+    */
+   public int getAscent()
+   {
+     return 1;
+   }
+ 
+   /**
+    * Returns the descent of the font, which is the distance from the base
+    * to the bottom of the majority of characters in the set.  Some characters
+    * can exceed this value however.
+    *
+    * @return The font descent.
+    */
+   public int getDescent()
+   {
+     return 1;
+   }
+ 
+   /**
+    * Returns the height of a line in this font.  This will be the sum
+    * of the leading, the ascent, and the descent.
+    *
+    * @return The height of the font.
+    */
+   public int getHeight()
+   {
+     return getAscent() + getDescent() + getLeading();
+   }
+ 
+   /**
+    * Returns the maximum ascent value.  This is the maximum distance any
+    * character in the font rised above the baseline.
+    *
+    * @return The maximum ascent for this font.
+    */
+   public int getMaxAscent()
+   {
+     return getAscent();
+   }
+ 
+   /**
+    * Returns the maximum descent value.  This is the maximum distance any
+    * character in the font extends below the baseline.
+    *
+    * @return The maximum descent for this font.
+    */
+   public int getMaxDescent()
+   {
+     return getMaxDecent();
+   }
+ 
+   /**
+    * Returns the maximum descent value.  This is the maximum distance any
+    * character in the font extends below the baseline.
+    *
+    * @return The maximum descent for this font.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>getMaxDescent()</code>.
+    */
+   public int getMaxDecent()
+   {
+     return getDescent();
+   }
+ 
+   /**
+    * Returns the width of the widest character in the font.
+    *
+    * @return The width of the widest character in the font.
+    */
+   public int getMaxAdvance()
+   {
+     return -1;
+   }
+ 
+   /**
+    * Returns the width of the specified character.
+    *
+    * @param ch The character to return the width of.
+    *
+    * @return The width of the specified character.
+    */
+   public int charWidth(int ch)
+   {
+     char[] chars = Character.toChars(ch);
+     return charsWidth(chars, 0, chars.length);
+   }
+ 
+   /**
+    * Returns the width of the specified character.
+    *
+    * @param ch The character to return the width of.
+    *
+    * @return The width of the specified character.
+    */
+   public int charWidth(char ch)
+   {
+     return 1;
+   }
+ 
+   /**
+    * Returns the total width of the specified string
+    *
+    * @param str The string to return the width of.
+    *
+    * @return The width of the string.
+    */
+   public int stringWidth(String str)
+   {
+     char[] buf = new char[str.length()];
+     str.getChars(0, str.length(), buf, 0);
+ 
+     return charsWidth(buf, 0, buf.length);
+   }
+ 
+   /**
+    * Returns the total width of the specified character array.
+    *
+    * @param buf The character array containing the data.
+    * @param offset The offset into the array to start calculating from.
+    * @param len The total number of bytes to process.
+    *
+    * @return The width of the requested characters.
+    */
+   public int charsWidth(char[] buf, int offset, int len)
+   {
+     int total_width = 0;
+     int endOffset = offset + len;
+     for (int i = offset; i < endOffset; i++)
+       total_width += charWidth(buf[i]);
+     return total_width;
+   }
+ 
+   /**
+    * Returns the total width of the specified byte array.
+    *
+    * @param buf The byte array containing the data.
+    * @param offset The offset into the array to start calculating from.
+    * @param len The total number of bytes to process.
+    *
+    * @return The width of the requested characters.
+    */
+   public int bytesWidth(byte[] buf, int offset, int len)
+   {
+     int total_width = 0;
+     for (int i = offset; i < len; i++)
+       total_width = charWidth((char) buf[i]);
+ 
+     return total_width;
+   }
+ 
+   /**
+    * Returns the widths of the first 256 characters in the font.
+    *
+    * @return The widths of the first 256 characters in the font.
+    */
+   public int[] getWidths()
+   {
+     int[] result = new int[256];
+     for (char i = 0; i < 256; i++)
+       result[i] = charWidth(i);
+     return result;
+   }
+ 
+   /**
+    * Returns a string representation of this object.
+    *
+    * @return A string representation of this object.
+    */
+   public String toString()
+   {
+     return (this.getClass() + "[font=" + font + ",ascent=" + getAscent()
+             + ",descent=" + getDescent() + ",height=" + getHeight() + "]");
+   }
+ 
+   // Generic FontRenderContext used when getLineMetrics is called with a
+   // plain Graphics object.
+   private static final FontRenderContext gRC = new FontRenderContext(null,
+                                                                      false,
+                                                                      false);
+ 
+   /**
+    * Returns a {@link LineMetrics} object constructed with the
+    * specified text and the {@link FontRenderContext} of the Graphics
+    * object when it is an instance of Graphics2D or a generic
+    * FontRenderContext with a null transform, not anti-aliased and not
+    * using fractional metrics.
+    *
+    * @param text The string to calculate metrics from.
+    * @param g The Graphics object that will be used.
+    *
+    * @return A new {@link LineMetrics} object.
+    */
+   public LineMetrics getLineMetrics(String text, Graphics g)
+   {
+     return getLineMetrics(text, 0, text.length(), g);
+   }
+ 
+   /**
+    * Returns a {@link LineMetrics} object constructed with the
+    * specified text and the {@link FontRenderContext} of the Graphics
+    * object when it is an instance of Graphics2D or a generic
+    * FontRenderContext with a null transform, not anti-aliased and not
+    * using fractional metrics.
+    *
+    * @param text The string to calculate metrics from.
+    * @param begin Index of first character in <code>text</code> to measure.
+    * @param limit Index of last character in <code>text</code> to measure.
+    * @param g The Graphics object that will be used.
+    *
+    * @return A new {@link LineMetrics} object.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>text</code>.
+    */
+   public LineMetrics getLineMetrics(String text, int begin, int limit,
+                                     Graphics g)
+   {
+     FontRenderContext rc;
+     if (g instanceof Graphics2D)
+       rc = ((Graphics2D) g).getFontRenderContext();
+     else
+       rc = gRC;
+     return font.getLineMetrics(text, begin, limit, rc);
+   }
+ 
+   /**
+    * Returns a {@link LineMetrics} object constructed with the
+    * specified text and the {@link FontRenderContext} of the Graphics
+    * object when it is an instance of Graphics2D or a generic
+    * FontRenderContext with a null transform, not anti-aliased and not
+    * using fractional metrics.
+    *
+    * @param chars The string to calculate metrics from.
+    * @param begin Index of first character in <code>text</code> to measure.
+    * @param limit Index of last character in <code>text</code> to measure.
+    * @param g The Graphics object that will be used.
+    *
+    * @return A new {@link LineMetrics} object.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>text</code>.
+    */
+   public LineMetrics getLineMetrics(char[] chars, int begin, int limit,
+                                     Graphics g)
+   {
+     FontRenderContext rc;
+     if (g instanceof Graphics2D)
+       rc = ((Graphics2D) g).getFontRenderContext();
+     else
+       rc = gRC;
+     return font.getLineMetrics(chars, begin, limit, rc);
+   }
+   
+   /**
+    * Returns the bounds of the largest character in a Graphics context.
+    * @param context the Graphics context object.
+    * @return a <code>Rectangle2D</code> representing the bounds
+    */
+   public Rectangle2D getMaxCharBounds(Graphics context)
+   {
+     if( context instanceof Graphics2D )
+       return font.getMaxCharBounds(((Graphics2D)context).getFontRenderContext());
+     return font.getMaxCharBounds( gRC );
+   }
+ 
+   /**
+    * Returns a {@link LineMetrics} object constructed with the
+    * specified text and the {@link FontRenderContext} of the Graphics
+    * object when it is an instance of Graphics2D or a generic
+    * FontRenderContext with a null transform, not anti-aliased and not
+    * using fractional metrics.
+    *
+    * @param ci An iterator over the string to calculate metrics from.
+    * @param begin Index of first character in <code>text</code> to measure.
+    * @param limit Index of last character in <code>text</code> to measure.
+    * @param g The Graphics object that will be used.
+    *
+    * @return A new {@link LineMetrics} object.
+    *
+    * @throws IndexOutOfBoundsException if the range [begin, limit] is
+    * invalid in <code>text</code>.
+    */
+   public LineMetrics getLineMetrics(CharacterIterator ci, int begin,
+                                     int limit, Graphics g)
+   {
+     FontRenderContext rc;
+     if (g instanceof Graphics2D)
+       rc = ((Graphics2D) g).getFontRenderContext();
+     else
+       rc = gRC;
+     return font.getLineMetrics(ci, begin, limit, rc);
+   }
+ 
+   public Rectangle2D getStringBounds(String str, Graphics context)
+   {
+     return font.getStringBounds(str, getFontRenderContext(context));
+   }
+ 
+   public Rectangle2D getStringBounds(String str, int beginIndex, int limit,
+                                      Graphics context)
+   {
+     return font.getStringBounds(str, beginIndex, limit,
+                                 getFontRenderContext(context));
+   }
+ 
+   public Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit,
+                                      Graphics context)
+   {
+     return font.getStringBounds(chars, beginIndex, limit,
+                                 getFontRenderContext(context));
+   }
+ 
+   public Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex,
+                                      int limit, Graphics context)
+   {
+     return font.getStringBounds(ci, beginIndex, limit,
+                                 getFontRenderContext(context));
+   }
+ 
+   private FontRenderContext getFontRenderContext(Graphics context)
+   {
+     if (context instanceof Graphics2D)
+       return ((Graphics2D) context).getFontRenderContext();
+ 
+     return gRC;
+   }
+ 
+   /**
+    * Returns if the font has uniform line metrics.
+    * @see Font#hasUniformLineMetrics()
+    */
+   public boolean hasUniformLineMetrics()
+   {
+     return font.hasUniformLineMetrics();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Frame.java gcc-4.1.0/libjava/classpath/java/awt/Frame.java
*** gcc-4.0.2/libjava/classpath/java/awt/Frame.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Frame.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,626 ----
+ /* Frame.java -- AWT toplevel window
+    Copyright (C) 1999, 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.peer.FramePeer;
+ import java.lang.ref.WeakReference;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.Vector;
+ 
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleState;
+ import javax.accessibility.AccessibleStateSet;
+ 
+ /**
+   * This class is a top-level window with a title bar and window
+   * decorations.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class Frame extends Window implements MenuContainer
+ {
+ /**
+   * Constant for the default cursor.
+   * @deprecated Replaced by <code>Cursor.DEFAULT_CURSOR</code> instead.
+   */
+ public static final int DEFAULT_CURSOR = Cursor.DEFAULT_CURSOR;
+ 
+ /**
+   * Constant for a cross-hair cursor.
+   * @deprecated Use <code>Cursor.CROSSHAIR_CURSOR</code> instead.
+   */
+ public static final int CROSSHAIR_CURSOR = Cursor.CROSSHAIR_CURSOR;
+ 
+ /**
+   * Constant for a cursor over a text field.
+   * @deprecated Use <code>Cursor.TEXT_CURSOR</code> instead.
+   */
+ public static final int TEXT_CURSOR = Cursor.TEXT_CURSOR;
+ 
+ /**
+   * Constant for a cursor to display while waiting for an action to complete.
+   * @deprecated Use <code>Cursor.WAIT_CURSOR</code>.
+   */
+ public static final int WAIT_CURSOR = Cursor.WAIT_CURSOR;
+ 
+ /**
+   * Cursor used over SW corner of window decorations.
+   * @deprecated Use <code>Cursor.SW_RESIZE_CURSOR</code> instead.
+   */
+ public static final int SW_RESIZE_CURSOR = Cursor.SW_RESIZE_CURSOR;
+ 
+ /**
+   * Cursor used over SE corner of window decorations.
+   * @deprecated Use <code>Cursor.SE_RESIZE_CURSOR</code> instead.
+   */
+ public static final int SE_RESIZE_CURSOR = Cursor.SE_RESIZE_CURSOR;
+ 
+ /**
+   * Cursor used over NW corner of window decorations.
+   * @deprecated Use <code>Cursor.NW_RESIZE_CURSOR</code> instead.
+   */
+ public static final int NW_RESIZE_CURSOR = Cursor.NW_RESIZE_CURSOR;
+ 
+ /**
+   * Cursor used over NE corner of window decorations.
+   * @deprecated Use <code>Cursor.NE_RESIZE_CURSOR</code> instead.
+   */
+ public static final int NE_RESIZE_CURSOR = Cursor.NE_RESIZE_CURSOR;
+ 
+ /**
+   * Cursor used over N edge of window decorations.
+   * @deprecated Use <code>Cursor.N_RESIZE_CURSOR</code> instead.
+   */
+ public static final int N_RESIZE_CURSOR = Cursor.N_RESIZE_CURSOR;
+ 
+ /**
+   * Cursor used over S edge of window decorations.
+   * @deprecated Use <code>Cursor.S_RESIZE_CURSOR</code> instead.
+   */
+ public static final int S_RESIZE_CURSOR = Cursor.S_RESIZE_CURSOR;
+ 
+ /**
+   * Cursor used over E edge of window decorations.
+   * @deprecated Use <code>Cursor.E_RESIZE_CURSOR</code> instead.
+   */
+ public static final int E_RESIZE_CURSOR = Cursor.E_RESIZE_CURSOR;
+ 
+ /**
+   * Cursor used over W edge of window decorations.
+   * @deprecated Use <code>Cursor.W_RESIZE_CURSOR</code> instead.
+   */
+ public static final int W_RESIZE_CURSOR = Cursor.W_RESIZE_CURSOR;
+ 
+ /**
+   * Constant for a hand cursor.
+   * @deprecated Use <code>Cursor.HAND_CURSOR</code> instead.
+   */
+ public static final int HAND_CURSOR = Cursor.HAND_CURSOR;
+ 
+ /**
+   * Constant for a cursor used during window move operations.
+   * @deprecated Use <code>Cursor.MOVE_CURSOR</code> instead.
+   */
+ public static final int MOVE_CURSOR = Cursor.MOVE_CURSOR;
+ 
+ public static final int ICONIFIED = 1;
+ public static final int MAXIMIZED_BOTH = 6;
+ public static final int MAXIMIZED_HORIZ = 2;
+ public static final int MAXIMIZED_VERT = 4;
+ public static final int NORMAL = 0;
+ 
+ // Serialization version constant
+ private static final long serialVersionUID = 2673458971256075116L;
+ 
+ /**
+   * @serial The version of the class data being serialized
+   * // FIXME: what is this value?
+   */
+ private int frameSerializedDataVersion;
+ 
+ /**
+   * @serial Image used as the icon when this frame is minimized.
+   */
+ private Image icon;
+ 
+ /**
+   * @serial Constant used by the JDK Motif peer set.  Not used in
+   * this implementation.
+   */
+ private boolean mbManagement;
+ 
+ /**
+   * @serial The menu bar for this frame.
+   */
+ //private MenuBar menuBar = new MenuBar();
+ private MenuBar menuBar;
+ 
+ /**
+   * @serial A list of other top-level windows owned by this window.
+   */
+ Vector ownedWindows = new Vector();
+ 
+ /**
+   * @serial Indicates whether or not this frame is resizable.
+   */
+ private boolean resizable = true;
+ 
+ /**
+   * @serial The state of this frame.
+   * // FIXME: What are the values here?
+   * This is package-private to avoid an accessor method.
+   */
+ int state;
+ 
+ /**
+   * @serial The title of the frame.
+   */
+ private String title = "";
+ 
+   /**
+    * Maximized bounds for this frame.
+    */
+   private Rectangle maximizedBounds;
+ 
+   /**
+    * This field indicates whether the frame is undecorated or not.
+    */
+   private boolean undecorated = false;
+ 
+   /*
+    * The number used to generate the name returned by getName.
+    */
+   private static transient long next_frame_number;
+ 
+ /**
+   * Initializes a new instance of <code>Frame</code> that is not visible
+   * and has no title.
+   */
+ public
+ Frame()
+ {
+   this("");
+   noteFrame(this);
+ }
+ 
+ /**
+   * Initializes a new instance of <code>Frame</code> that is not visible
+   * and has the specified title.
+   *
+   * @param title The title of this frame.
+   */
+ public
+ Frame(String title)
+ {
+   super();
+   this.title = title;
+   // Top-level frames are initially invisible.
+   visible = false;
+   noteFrame(this);
+ }
+ 
+ public
+ Frame(GraphicsConfiguration gc)
+ {
+   super(gc);
+   visible = false;
+   noteFrame(this);
+ }
+ 
+ public
+ Frame(String title, GraphicsConfiguration gc)
+ {
+   super(gc);
+   setTitle(title);
+   visible = false;
+   noteFrame(this);
+ }
+ 
+ /**
+   * Returns this frame's title string.
+   *
+   * @return This frame's title string.
+   */
+ public String
+ getTitle()
+ {
+   return(title);
+ }
+ 
+ /*
+  * Sets this frame's title to the specified value.
+  *
+  * @param title The new frame title.
+  */
+ public synchronized void
+ setTitle(String title)
+ {
+   this.title = title;
+   if (peer != null)
+     ((FramePeer) peer).setTitle(title);
+ }
+ 
+ /**
+   * Returns this frame's icon.
+   *
+   * @return This frame's icon, or <code>null</code> if this frame does not
+   * have an icon.
+   */
+ public Image
+ getIconImage()
+ {
+   return(icon);
+ }
+ 
+ /**
+   * Sets this frame's icon to the specified value.
+   *
+   * @icon The new icon for this frame.
+   */
+ public synchronized void
+ setIconImage(Image icon)
+ {
+   this.icon = icon;
+   if (peer != null)
+     ((FramePeer) peer).setIconImage(icon);
+ }
+ 
+ /**
+   * Returns this frame's menu bar.
+   *
+   * @return This frame's menu bar, or <code>null</code> if this frame
+   * does not have a menu bar.
+   */
+ public MenuBar
+ getMenuBar()
+ {
+   return(menuBar);
+ }
+ 
+ /**
+   * Sets this frame's menu bar.
+   *
+   * @param menuBar The new menu bar for this frame.
+   */
+ public synchronized void
+ setMenuBar(MenuBar menuBar)
+ {
+   if (peer != null)
+   {
+     if (this.menuBar != null)
+       this.menuBar.removeNotify();  
+     if (menuBar != null)
+       menuBar.addNotify();
+     invalidateTree ();
+     ((FramePeer) peer).setMenuBar(menuBar);
+   }
+   this.menuBar = menuBar;
+ }
+ 
+ /**
+   * Tests whether or not this frame is resizable.  This will be 
+   * <code>true</code> by default.
+   *
+   * @return <code>true</code> if this frame is resizable, <code>false</code>
+   * otherwise.
+   */
+ public boolean
+ isResizable()
+ {
+   return(resizable);
+ }
+ 
+ /**
+   * Sets the resizability of this frame to the specified value.
+   *
+   * @param resizable <code>true</code> to make the frame resizable,
+   * <code>false</code> to make it non-resizable.
+   */
+ public synchronized void
+ setResizable(boolean resizable)
+ {
+   this.resizable = resizable;
+   if (peer != null)
+     ((FramePeer) peer).setResizable(resizable);
+ }
+ 
+ /**
+   * Returns the cursor type of the cursor for this window.  This will
+   * be one of the constants in this class.
+   *
+   * @return The cursor type for this frame.
+   *
+   * @deprecated Use <code>Component.getCursor()</code> instead.
+   */
+ public int
+ getCursorType()
+ {
+   return(getCursor().getType());
+ }
+ 
+ /**
+   * Sets the cursor for this window to the specified type.  The specified
+   * type should be one of the constants in this class.
+   *
+   * @param type The cursor type.
+   *
+   * @deprecated Use <code>Component.setCursor(Cursor)</code> instead.
+   */
+ public void
+ setCursor(int type)
+ {
+   setCursor(new Cursor(type));
+ }
+ 
+ /**
+   * Removes the specified component from this frame's menu.
+   *
+   * @param menu The menu component to remove.
+   */
+ public void
+ remove(MenuComponent menu)
+ {
+   menuBar.remove(menu);
+ }
+ 
+ public void
+ addNotify()
+ {
+   if (menuBar != null)
+     menuBar.addNotify();
+   if (peer == null)
+     peer = getToolkit ().createFrame (this);
+ 
+   super.addNotify();
+ }
+ 
+ public void removeNotify()
+ {
+   if (menuBar != null)
+     menuBar.removeNotify();
+   super.removeNotify();
+ }
+ 
+   /**
+    * Returns a debugging string describing this window.
+    *
+    * @return A debugging string describing this window.
+    */
+   protected String paramString ()
+   {
+     String title = getTitle ();
+ 
+     String resizable = "";
+     if (isResizable ())
+       resizable = ",resizable";
+ 
+     String state = "";
+     switch (getState ())
+       {
+       case NORMAL:
+         state = ",normal";
+         break;
+       case ICONIFIED:
+         state = ",iconified";
+         break;
+       case MAXIMIZED_BOTH:
+         state = ",maximized-both";
+         break;
+       case MAXIMIZED_HORIZ:
+         state = ",maximized-horiz";
+         break;
+       case MAXIMIZED_VERT:
+         state = ",maximized-vert";
+         break;
+       }
+ 
+     return super.paramString () + ",title=" + title + resizable + state;
+   }
+ 
+ private static ArrayList weakFrames = new ArrayList();
+ 
+ private static void noteFrame(Frame f)
+ {
+   weakFrames.add(new WeakReference(f));
+ }
+ 
+ public static Frame[] getFrames()
+ {
+   int n = 0;
+   synchronized (weakFrames)
+     {
+       Iterator i = weakFrames.iterator();
+       while (i.hasNext())
+         {
+           WeakReference wr = (WeakReference) i.next();
+           if (wr.get() != null)
+             ++n;
+         }
+       if (n == 0)
+         return new Frame[0];
+       else
+         {
+           Frame[] frames = new Frame[n];
+           n = 0;
+           i = weakFrames.iterator();
+           while (i.hasNext())
+             {
+               WeakReference wr = (WeakReference) i.next();
+               if (wr.get() != null)
+                 frames[n++] = (Frame) wr.get();
+             }
+           return frames;
+         }
+     }
+ }
+ 
+   public void setState (int state)
+   {
+     int current_state = getExtendedState ();
+ 
+     if (state == NORMAL
+         && (current_state & ICONIFIED) != 0)
+       setExtendedState (current_state | ICONIFIED);
+     
+     if (state == ICONIFIED
+         && (current_state & ~ICONIFIED) == 0)
+       setExtendedState (current_state & ~ICONIFIED);
+   }
+ 
+   public int getState ()
+   {
+     /* FIXME: State might have changed in the peer... Must check. */
+   
+     return (state & ICONIFIED) != 0 ? ICONIFIED : NORMAL;
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public void setExtendedState (int state)
+   {
+     this.state = state;
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public int getExtendedState ()
+   {
+     return state;
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public void setMaximizedBounds (Rectangle maximizedBounds)
+   {
+     this.maximizedBounds = maximizedBounds;
+   }
+ 
+   /**
+    * Returns the maximized bounds of this frame.
+    *
+    * @return the maximized rectangle, may be null.
+    *
+    * @since 1.4
+    */
+   public Rectangle getMaximizedBounds ()
+   {
+     return maximizedBounds;
+   }
+ 
+   /**
+    * Returns whether this frame is undecorated or not.
+    * 
+    * @since 1.4
+    */
+   public boolean isUndecorated ()
+   {
+     return undecorated;
+   }
+ 
+   /**
+    * Disables or enables decorations for this frame. This method can only be
+    * called while the frame is not displayable.
+    * 
+    * @exception IllegalComponentStateException If this frame is displayable.
+    * 
+    * @since 1.4
+    */
+   public void setUndecorated (boolean undecorated)
+   {
+     if (isDisplayable ())
+       throw new IllegalComponentStateException ();
+ 
+     this.undecorated = undecorated;
+   }
+ 
+   /**
+    * Generate a unique name for this frame.
+    *
+    * @return A unique name for this frame.
+    */
+   String generateName ()
+   {
+     return "frame" + getUniqueLong ();
+   }
+ 
+   private static synchronized long getUniqueLong ()
+   {
+     return next_frame_number++;
+   }
+   
+   protected class AccessibleAWTFrame extends AccessibleAWTWindow
+   {
+     private static final long serialVersionUID = -6172960752956030250L;
+ 
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.FRAME;
+     }
+     
+     public AccessibleStateSet getAccessibleState()
+     {
+       AccessibleStateSet states = super.getAccessibleStateSet();
+       if (isResizable())
+         states.add(AccessibleState.RESIZABLE);
+       if ((state & ICONIFIED) != 0)
+         states.add(AccessibleState.ICONIFIED);
+       return states;
+     }
+   }
+   
+   /**
+    * Gets the AccessibleContext associated with this <code>Frame</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTFrame();
+     return accessibleContext;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/GradientPaint.java gcc-4.1.0/libjava/classpath/java/awt/GradientPaint.java
*** gcc-4.0.2/libjava/classpath/java/awt/GradientPaint.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/GradientPaint.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,229 ----
+ /* GradientPaint.java -- 
+    Copyright (C) 2002, 2005, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.image.ColorModel;
+ import gnu.java.awt.GradientPaintContext;
+ 
+ /**
+  * A paint object that can be used to color a region by blending two colors. 
+  * Instances of this class are immutable.
+  */
+ public class GradientPaint implements Paint
+ {
+   private final float x1;
+   private final float y1;
+   private final Color c1;
+   private final float x2;
+   private final float y2;
+   private final Color c2;
+   private final boolean cyclic;
+ 
+   /**
+    * Creates a new acyclic <code>GradientPaint</code>.
+    * 
+    * @param x1  the x-coordinate of the anchor point for color 1.
+    * @param y1  the y-coordinate of the anchor point for color 1.
+    * @param c1  color 1 (<code>null</code> not permitted).
+    * @param x2  the x-coordinate of the anchor point for color 2.
+    * @param y2  the y-coordinate of the anchor point for color 2.
+    * @param c2  the second color (<code>null</code> not permitted).
+    */
+   public GradientPaint(float x1, float y1, Color c1,
+                        float x2, float y2, Color c2)
+   {
+     this(x1, y1, c1, x2, y2, c2, false);
+   }
+ 
+   /**
+    * Creates a new acyclic <code>GradientPaint</code>.
+    * 
+    * @param p1  anchor point 1 (<code>null</code> not permitted).
+    * @param c1  color 1 (<code>null</code> not permitted).
+    * @param p2  anchor point 2 (<code>null</code> not permitted).
+    * @param c2  color 2 (<code>null</code> not permitted).
+    */
+   public GradientPaint(Point2D p1, Color c1, Point2D p2, Color c2)
+   {
+     this((float) p1.getX(), (float) p1.getY(), c1,
+          (float) p2.getX(), (float) p2.getY(), c2, false);
+   }
+ 
+   /**
+    * Creates a new cyclic or acyclic <code>GradientPaint</code>.
+    * 
+    * @param x1  the x-coordinate of the anchor point for color 1.
+    * @param y1  the y-coordinate of the anchor point for color 1.
+    * @param c1  color 1 (<code>null</code> not permitted).
+    * @param x2  the x-coordinate of the anchor point for color 2.
+    * @param y2  the y-coordinate of the anchor point for color 2.
+    * @param c2  the second color (<code>null</code> not permitted).
+    * @param cyclic  a flag that controls whether the gradient is cyclic or
+    *                acyclic.
+    */
+   public GradientPaint(float x1, float y1, Color c1,
+                        float x2, float y2, Color c2, boolean cyclic)
+   {
+     if (c1 == null || c2 == null)
+       throw new NullPointerException();
+     this.x1 = x1;
+     this.y1 = y1;
+     this.c1 = c1;
+     this.x2 = x2;
+     this.y2 = y2;
+     this.c2 = c2;
+     this.cyclic = cyclic;
+   }
+ 
+   /**
+    * Creates a new cyclic or acyclic <code>GradientPaint</code>.
+    * 
+    * @param p1  anchor point 1 (<code>null</code> not permitted).
+    * @param c1  color 1 (<code>null</code> not permitted).
+    * @param p2  anchor point 2 (<code>null</code> not permitted).
+    * @param c2  color 2 (<code>null</code> not permitted).
+    * @param cyclic  a flag that controls whether the gradient is cyclic or
+    *                acyclic.
+    */
+   public GradientPaint(Point2D p1, Color c1, Point2D p2, Color c2,
+                        boolean cyclic)
+   {
+     this((float) p1.getX(), (float) p1.getY(), c1,
+          (float) p2.getX(), (float) p2.getY(), c2, cyclic);
+   }
+ 
+   /**
+    * Returns a point with the same coordinates as the anchor point for color 1.
+    * Note that if you modify this point, the <code>GradientPaint</code> remains
+    * unchanged.
+    * 
+    * @return A point with the same coordinates as the anchor point for color 1.
+    */
+   public Point2D getPoint1()
+   {
+     return new Point2D.Float(x1, y1);
+   }
+ 
+   /**
+    * Returns the first color.
+    * 
+    * @return The color (never <code>null</code>).
+    */
+   public Color getColor1()
+   {
+     return c1;
+   }
+ 
+   /**
+    * Returns a point with the same coordinates as the anchor point for color 2.
+    * Note that if you modify this point, the <code>GradientPaint</code> remains
+    * unchanged.
+    * 
+    * @return A point with the same coordinates as the anchor point for color 2.
+    */
+   public Point2D getPoint2()
+   {
+     return new Point2D.Float(x2, y2);
+   }
+ 
+   /**
+    * Returns the second color.
+    * 
+    * @return The color (never <code>null</code>).
+    */
+   public Color getColor2()
+   {
+     return c2;
+   }
+ 
+   /**
+    * Returns <code>true</code> if this <code>GradientPaint</code> instance is
+    * cyclic, and <code>false</code> otherwise.
+    * 
+    * @return A boolean.
+    */
+   public boolean isCyclic()
+   {
+     return cyclic;
+   }
+ 
+   /**
+    * Returns the {@link PaintContext} used to generate the color pattern.
+    * 
+    * @param cm  the color model, used as a hint (ignored in this 
+    *            implementation).
+    * @param deviceBounds  the device space bounding box of the painted area.
+    * @param userBounds  the user space bounding box of the painted area.
+    * @param xform  the transformation from user space to device space.
+    * @param hints  any hints for choosing between rendering alternatives.
+    * 
+    * @return The context for performing the paint
+    */
+   public PaintContext createContext(ColorModel cm, Rectangle deviceBounds,
+                                     Rectangle2D userBounds,
+                                     AffineTransform xform,
+                                     RenderingHints hints)
+   {
+     Point2D xp1 = xform.transform(getPoint1(), null);
+     Point2D xp2 = xform.transform(getPoint2(), null);
+     return new GradientPaintContext((float) xp1.getX(), (float) xp1.getY(), c1, 
+             (float) xp2.getX(), (float) xp2.getY(), c2, cyclic);
+   }
+ 
+   /**
+    * Returns the transparency code for this <code>GradientPaint</code> instance.
+    * This is derived from the two {@link Color} objects used in creating this
+    * object:  if both colors are opaque, this method returns 
+    * {@link Transparency#OPAQUE}, otherwise it returns 
+    * {@link Transparency#TRANSLUCENT}.
+    * 
+    * @return {@link Transparency#OPAQUE} or {@link Transparency#TRANSLUCENT}.
+    */
+   public int getTransparency()
+   {
+     if (c1.getAlpha() == 255 && c2.getAlpha() == 255)
+       return Transparency.OPAQUE;
+     else
+       return Transparency.TRANSLUCENT;   
+   }
+   
+ } // class GradientPaint
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Graphics.java gcc-4.1.0/libjava/classpath/java/awt/Graphics.java
*** gcc-4.0.2/libjava/classpath/java/awt/Graphics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Graphics.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,636 ----
+ /* Graphics.java -- Abstract Java drawing class
+    Copyright (C) 1999, 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.ImageObserver;
+ import java.text.AttributedCharacterIterator;
+ 
+ /**
+  * This is the abstract superclass of classes for drawing to graphics
+  * devices such as the screen or printers.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public abstract class Graphics
+ {
+ 
+   /**
+    * Default constructor for subclasses.
+    */
+   protected
+   Graphics()
+   {
+   }
+ 
+   /**
+    * Returns a copy of this <code>Graphics</code> object.
+    *
+    * @return A copy of this object.
+    */
+   public abstract Graphics create();
+ 
+   /**
+    * Returns a copy of this <code>Graphics</code> object.  The origin point
+    * will be translated to the point (x, y) and the cliping rectangle set
+    * to the intersection of the clipping rectangle in this object and the
+    * rectangle specified by the parameters to this method.
+    *
+    * @param x The new X coordinate of the clipping region rect.
+    * @param y The new Y coordinate of the clipping region rect.
+    * @param width The width of the clipping region intersect rectangle. 
+    * @param height The height of the clipping region intersect rectangle. 
+    *
+    * @return A copy of this object, modified as specified.
+    */
+   public Graphics create(int x, int y, int width, int height)
+   {
+     Graphics g = create();
+ 
+     g.translate(x, y);
+     // FIXME: I'm not sure if this will work.  Are the old clip rect bounds
+     // translated above?
+     g.clipRect(0, 0, width, height);
+ 
+     return(g);
+   }
+ 
+   /**
+    * Translates this context so that its new origin point is the point
+    * (x, y).
+    *
+    * @param x The new X coordinate of the origin.
+    * @param y The new Y coordinate of the origin.
+    */
+   public abstract void translate(int x, int y);
+ 
+   /**
+    * Returns the current color for this object.
+    *
+    * @return The color for this object.
+    */
+   public abstract Color getColor();
+ 
+   /**
+    * Sets the current color for this object.
+    *
+    * @param color The new color.
+    */
+   public abstract void setColor(Color color);
+ 
+   /**
+    * Sets this context into "paint" mode, where the target pixels are
+    * completely overwritten when drawn on.
+    */
+   public abstract void setPaintMode();
+ 
+   /**
+    * Sets this context info "XOR" mode, where the targe pixles are
+    * XOR-ed when drawn on. 
+    *
+    * @param color The color to XOR against.
+    */
+   public abstract void setXORMode(Color color);
+   
+   /**
+    * Returns the current font for this graphics context.
+    *
+    * @return The current font.
+    */
+   public abstract Font getFont();
+ 
+   /**
+    * Sets the font for this graphics context to the specified value.
+    *
+    * @param font The new font.
+    */
+   public abstract void setFont(Font font);
+ 
+   /**
+    * Returns the font metrics for the current font.
+    *
+    * @return The font metrics for the current font.
+    */
+   public FontMetrics getFontMetrics()
+   {
+     return getFontMetrics(getFont());
+   }
+ 
+   /**
+    * Returns the font metrics for the specified font.
+    *
+    * @param font The font to return metrics for.
+    *
+    * @return The requested font metrics.
+    */
+   public abstract FontMetrics getFontMetrics(Font font);
+ 
+   /**
+    * Returns the bounding rectangle of the clipping region for this 
+    * graphics context.
+    *
+    * @return The bounding rectangle for the clipping region.
+    */
+   public abstract Rectangle getClipBounds();
+ 
+   /**
+    * Returns the bounding rectangle of the clipping region for this 
+    * graphics context.
+    *
+    * @return The bounding rectangle for the clipping region.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>getClipBounds()</code>.
+    */
+   public Rectangle getClipRect()
+   {
+     return getClipBounds();
+   }
+ 
+   /**
+    * Sets the clipping region to the intersection of the current clipping
+    * region and the rectangle determined by the specified parameters.
+    *
+    * @param x The X coordinate of the upper left corner of the intersect rect.
+    * @param y The Y coordinate of the upper left corner of the intersect rect.
+    * @param width The width of the intersect rect.
+    * @param height The height of the intersect rect.
+    */
+   public abstract void clipRect(int x, int y, int width, int height);
+ 
+   /**
+    * Sets the clipping region to the rectangle determined by the specified
+    * parameters.
+    *
+    * @param x The X coordinate of the upper left corner of the rect.
+    * @param y The Y coordinate of the upper left corner of the rect.
+    * @param width The width of the rect.
+    * @param height The height of the rect.
+    */
+   public abstract void setClip(int x, int y, int width, int height);
+ 
+   /**
+    * Returns the current clipping region as a <code>Shape</code> object.
+    *
+    * @return The clipping region as a <code>Shape</code>.
+    */
+   public abstract Shape getClip();
+ 
+   /**
+    * Sets the clipping region to the specified <code>Shape</code>.
+    *
+    * @param clip The new clipping region.
+    */
+   public abstract void setClip(Shape clip);
+ 
+   /**
+    * Copies the specified rectangle to the specified offset location.
+    *
+    * @param x The X coordinate of the upper left corner of the copy rect.
+    * @param y The Y coordinate of the upper left corner of the copy rect.
+    * @param width The width of the copy rect.
+    * @param height The height of the copy rect.
+    * @param dx The offset from the X value to start drawing.
+    * @param dy The offset from the Y value to start drawing.
+    */
+   public abstract void copyArea(int x, int y, int width, int height, int dx,
+                                 int dy);
+ 
+   /**
+    * Draws a line between the two specified points.
+    *
+    * @param x1 The X coordinate of the first point.
+    * @param y1 The Y coordinate of the first point.
+    * @param x2 The X coordinate of the second point.
+    * @param y2 The Y coordinate of the second point.
+    */
+   public abstract void drawLine(int x1, int y1, int x2, int y2);
+ 
+   /**
+    * Fills the area bounded by the specified rectangle.
+    *
+    * @param x The X coordinate of the upper left corner of the fill rect.
+    * @param y The Y coordinate of the upper left corner of the fill rect.
+    * @param width The width of the fill rect.
+    * @param height The height of the fill rect.
+    */
+   public abstract void fillRect(int x, int y, int width, int height);
+ 
+   /**
+    * Draws the outline of the specified rectangle.
+    *
+    * @param x The X coordinate of the upper left corner of the draw rect.
+    * @param y The Y coordinate of the upper left corner of the draw rect.
+    * @param width The width of the draw rect.
+    * @param height The height of the draw rect.
+    */
+   public void drawRect(int x, int y, int width, int height)
+   {
+     int x1 = x;
+     int y1 = y;
+     int x2 = x + width;
+     int y2 = y + height;
+     drawLine(x1, y1, x2, y1);
+     drawLine(x2, y1, x2, y2);
+     drawLine(x2, y2, x1, y2);
+     drawLine(x1, y2, x1, y1);
+   }
+ 
+   /**
+    * Clears the specified rectangle.
+    *
+    * @param x The X coordinate of the upper left corner of the clear rect.
+    * @param y The Y coordinate of the upper left corner of the clear rect.
+    * @param width The width of the clear rect.
+    * @param height The height of the clear rect.
+    */
+   public abstract void clearRect(int x, int y, int width, int height);
+ 
+   /**
+    * Draws the outline of the specified rectangle with rounded cornders.
+    *
+    * @param x The X coordinate of the upper left corner of the draw rect.
+    * @param y The Y coordinate of the upper left corner of the draw rect.
+    * @param width The width of the draw rect.
+    * @param height The height of the draw rect.
+    * @param arcWidth The width of the corner arcs.
+    * @param arcHeight The height of the corner arcs.
+    */
+   public abstract void drawRoundRect(int x, int y, int width, int height,
+                                      int arcWidth, int arcHeight);
+ 
+   /**
+    * Fills the specified rectangle with rounded cornders.
+    *
+    * @param x The X coordinate of the upper left corner of the fill rect.
+    * @param y The Y coordinate of the upper left corner of the fill rect.
+    * @param width The width of the fill rect.
+    * @param height The height of the fill rect.
+    * @param arcWidth The width of the corner arcs.
+    * @param arcHeight The height of the corner arcs.
+    */
+   public abstract void fillRoundRect(int x, int y, int width, int height,
+                                      int arcWidth, int arcHeight);
+ 
+   public void draw3DRect(int x, int y, int width, int height, boolean raised)
+   {
+     Color color = getColor();
+     Color tl = color.brighter();
+     Color br = color.darker();
+     
+     if (!raised)
+       {
+         Color tmp = tl;
+         tl = br;
+         br = tmp;
+       }
+     
+     int x1 = x;
+     int y1 = y;
+     int x2 = x + width;
+     int y2 = y + height;
+     
+     setColor(tl);
+     drawLine(x1, y1, x2, y1);
+     drawLine(x1, y2, x1, y1);
+     setColor(br);
+     drawLine(x2, y1, x2, y2);
+     drawLine(x2, y2, x1, y2);
+     setColor(color);
+   }
+ 
+   /**
+    * Fills the specified rectangle with a 3D effect
+    *
+    * @param x The X coordinate of the upper left corner of the fill rect.
+    * @param y The Y coordinate of the upper left corner of the fill rect.
+    * @param width The width of the fill rect.
+    * @param height The height of the fill rect.
+    * @param raised <code>true</code> if the rectangle appears raised,
+    * <code>false</code> if it should appear etched.
+    */
+   public void fill3DRect(int x, int y, int width, int height, boolean raised)
+   {
+     fillRect(x, y, width, height);
+     draw3DRect(x, y, width-1, height-1, raised);
+   }
+ 
+   /**
+    * Draws an oval that just fits within the specified rectangle.
+    *
+    * @param x The X coordinate of the upper left corner of the rect.
+    * @param y The Y coordinate of the upper left corner of the rect.
+    * @param width The width of the rect.
+    * @param height The height of the rect.
+    */
+   public abstract void drawOval(int x, int y, int width, int height);
+ 
+   /**
+    * Fills an oval that just fits within the specified rectangle.
+    *
+    * @param x The X coordinate of the upper left corner of the rect.
+    * @param y The Y coordinate of the upper left corner of the rect.
+    * @param width The width of the rect.
+    * @param height The height of the rect.
+    */
+   public abstract void fillOval(int x, int y, int width, int height);
+ 
+   /**
+    * Draws an arc using the specified bounding rectangle and the specified
+    * angle parameter.  The arc is centered at the center of the rectangle.
+    * The arc starts at the arcAngle position and extend for arcAngle
+    * degrees.  The degree origin is at the 3 o'clock position.
+    *
+    * @param x The X coordinate of the upper left corner of the rect.
+    * @param y The Y coordinate of the upper left corner of the rect.
+    * @param width The width of the rect.
+    * @param height The height of the rect.
+    * @param arcStart The beginning angle of the arc.
+    * @param arcAngle The extent of the arc.
+    */
+   public abstract void drawArc(int x, int y, int width, int height,
+                                int arcStart, int arcAngle);
+ 
+   /**
+    * Fills the arc define by the specified bounding rectangle and the specified
+    * angle parameter.  The arc is centered at the center of the rectangle.
+    * The arc starts at the arcAngle position and extend for arcAngle
+    * degrees.  The degree origin is at the 3 o'clock position.
+    *
+    * @param x The X coordinate of the upper left corner of the rect.
+    * @param y The Y coordinate of the upper left corner of the rect.
+    * @param width The width of the rect.
+    * @param height The height of the rect.
+    * @param arcStart The beginning angle of the arc.
+    * @param arcAngle The extent of the arc.
+    */
+   public abstract void fillArc(int x, int y, int width, int height,
+                                int arcStart, int arcAngle);
+ 
+   /**
+    * Draws a series of interconnected lines determined by the arrays
+    * of corresponding x and y coordinates.
+    *
+    * @param xPoints The X coordinate array.
+    * @param yPoints The Y coordinate array.
+    * @param npoints The number of points to draw.
+    */
+   public abstract void drawPolyline(int xPoints[], int yPoints[], int npoints);
+ 
+   /**
+    * Draws a series of interconnected lines determined by the arrays
+    * of corresponding x and y coordinates.  The figure is closed if necessary
+    * by connecting the first and last points.
+    *
+    * @param xPoints The X coordinate array.
+    * @param yPoints The Y coordinate array.
+    * @param npoints The number of points to draw.
+    */
+   public abstract void drawPolygon(int xPoints[], int yPoints[], int npoints);
+ 
+   /**
+    * Draws the specified polygon.
+    *
+    * @param polygon The polygon to draw.
+    */
+   public void drawPolygon(Polygon polygon)
+   {
+     drawPolygon(polygon.xpoints, polygon.ypoints, polygon.npoints);
+   }
+ 
+   /**
+    * Fills the polygon determined by the arrays
+    * of corresponding x and y coordinates.
+    *
+    * @param xPoints The X coordinate array.
+    * @param yPoints The Y coordinate array.
+    * @param npoints The number of points to draw.
+    */
+   public abstract void fillPolygon(int xPoints[], int yPoints[], int npoints);
+ 
+   /**
+    * Fills the specified polygon
+    *
+    * @param polygon The polygon to fill.
+    */
+   public void fillPolygon(Polygon polygon)
+   {
+     fillPolygon(polygon.xpoints, polygon.ypoints, polygon.npoints);
+   }
+ 
+   /**
+    * Draws the specified string starting at the specified point.
+    *
+    * @param string The string to draw.
+    * @param x The X coordinate of the point to draw at.
+    * @param y The Y coordinate of the point to draw at.
+    */
+   public abstract void drawString(String string, int x, int y);
+ 
+   public abstract void drawString (AttributedCharacterIterator ci, int x,
+                                    int y);
+ 
+   /**
+    * Draws the specified characters starting at the specified point.
+    *
+    * @param data The array of characters to draw.
+    * @param offset The offset into the array to start drawing characters from.
+    * @param length The number of characters to draw.
+    * @param x The X coordinate of the point to draw at.
+    * @param y The Y coordinate of the point to draw at.
+    */
+   public void drawChars(char data[], int offset, int length, int x, int y)
+   {
+     drawString(new String(data, offset, length), x, y);
+   }
+ 
+   public void drawBytes(byte[] data, int offset, int length, int x, int y)
+   {
+     String str = new String(data, offset, length);
+     drawString(str, x, y);
+   }
+ 
+   /**
+    * Draws all of the image that is available and returns.  If the image
+    * is not completely loaded, <code>false</code> is returned and 
+    * the specified iamge observer is notified as more data becomes 
+    * available.
+    *
+    * @param image The image to draw.
+    * @param x The X coordinate of the point to draw at.
+    * @param y The Y coordinate of the point to draw at.
+    * @param observer The image observer to notify as data becomes available.
+    *
+    * @return <code>true</code> if all the image data is available,
+    * <code>false</code> otherwise.
+    */
+   public abstract boolean drawImage(Image image, int x, int y,
+                                     ImageObserver observer);
+  
+   /**
+    * Draws all of the image that is available and returns.  The image
+    * is scaled to fit in the specified rectangle.  If the image
+    * is not completely loaded, <code>false</code> is returned and 
+    * the specified iamge observer is notified as more data becomes 
+    * available.
+    *
+    * @param image The image to draw.
+    * @param x The X coordinate of the point to draw at.
+    * @param y The Y coordinate of the point to draw at.
+    * @param width The width of the rectangle to draw in.
+    * @param height The height of the rectangle to draw in.
+    * @param observer The image observer to notify as data becomes available.
+    *
+    * @return <code>true</code> if all the image data is available,
+    * <code>false</code> otherwise.
+    */
+   public abstract boolean drawImage(Image image, int x, int y, int width,
+                                     int height, ImageObserver observer);
+  
+   /**
+    * Draws all of the image that is available and returns.  If the image
+    * is not completely loaded, <code>false</code> is returned and 
+    * the specified iamge observer is notified as more data becomes 
+    * available.
+    *
+    * @param image The image to draw.
+    * @param x The X coordinate of the point to draw at.
+    * @param y The Y coordinate of the point to draw at.
+    * @param bgcolor The background color to use for the image.
+    * @param observer The image observer to notify as data becomes available.
+    *
+    * @return <code>true</code> if all the image data is available,
+    * <code>false</code> otherwise.
+    */
+   public abstract boolean drawImage(Image image, int x, int y, Color bgcolor,
+                                     ImageObserver observer);
+  
+   /**
+    * Draws all of the image that is available and returns.  The image
+    * is scaled to fit in the specified rectangle.  If the image
+    * is not completely loaded, <code>false</code> is returned and 
+    * the specified iamge observer is notified as more data becomes 
+    * available.
+    *
+    * @param image The image to draw.
+    * @param x The X coordinate of the point to draw at.
+    * @param y The Y coordinate of the point to draw at.
+    * @param width The width of the rectangle to draw in.
+    * @param height The height of the rectangle to draw in.
+    * @param bgcolor The background color to use for the image.
+    * @param observer The image observer to notify as data becomes available.
+    *
+    * @return <code>true</code> if all the image data is available,
+    * <code>false</code> otherwise.
+    */
+   public abstract boolean drawImage(Image image, int x, int y, int width,
+                                     int height, Color bgcolor,
+                                     ImageObserver observer);
+ 
+   /**
+    * FIXME: Write Javadocs for this when you understand it.
+    */
+   public abstract boolean drawImage(Image image, int dx1, int dy1, int dx2,
+                                     int dy2, int sx1, int sy1, int sx2,
+                                     int sy2, ImageObserver observer);
+ 
+   /**
+    * FIXME: Write Javadocs for this when you understand it.
+    */
+   public abstract boolean drawImage(Image image, int dx1, int dy1, int dx2,
+                                     int dy2, int sx1, int sy1, int sx2,
+                                     int sy2, Color bgcolor,
+                                     ImageObserver observer);
+ 
+   /**
+    * Free any resources held by this graphics context immediately instead
+    * of waiting for the object to be garbage collected and finalized.
+    */
+   public abstract void dispose();
+ 
+   /**
+    * Frees the resources held by this graphics context when it is
+    * garbage collected.
+    */
+   public void finalize()
+   {
+     dispose();
+   }
+ 
+   /**
+    * Returns a string representation of this object.
+    *
+    * @return A string representation of this object. 
+    */
+   public String toString()
+   {
+     return getClass ().getName () + "[font=" + getFont () + ",color="
+            + getColor () + "]";
+   }
+ 
+   /**
+    * Returns <code>true</code> if the specified rectangle intersects with the
+    * current clip, <code>false</code> otherwise.
+    *
+    * @param x the X coordinate of the upper left corner of the test rectangle
+    * @param y the Y coordinate of the upper left corner of the test rectangle
+    * @param width the width of the upper left corner of the test rectangle
+    * @param height the height of the upper left corner of the test rectangle
+    * @return <code>true</code> if the specified rectangle intersects with the
+    *         current clip, <code>false</code> otherwise
+    */
+   public boolean hitClip(int x, int y, int width, int height)
+   {
+     return getClip().intersects(x, y, width, height);
+   }
+ 
+   public Rectangle getClipBounds(Rectangle r)
+   {
+     Rectangle clipBounds = getClipBounds();
+   
+     if (r == null)
+       return clipBounds;
+ 
+     r.x      = clipBounds.x;
+     r.y      = clipBounds.y;
+     r.width  = clipBounds.width;
+     r.height = clipBounds.height;
+     return r;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Graphics2D.java gcc-4.1.0/libjava/classpath/java/awt/Graphics2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/Graphics2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Graphics2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,158 ----
+ /* Copyright (C) 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.GlyphVector;
+ import java.awt.geom.AffineTransform;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.BufferedImageOp;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.RenderedImage;
+ import java.awt.image.renderable.RenderableImage;
+ import java.text.AttributedCharacterIterator;
+ import java.util.Map;
+ 
+ /**
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public abstract class Graphics2D extends Graphics
+ {
+ 
+   protected Graphics2D()
+   {
+   }
+   
+   public void draw3DRect(int x, int y, int width, int height,
+ 			 boolean raised)
+   {
+     super.draw3DRect(x, y, width, height, raised);
+   }
+   
+   public void fill3DRect(int x, int y, int width, int height,
+ 			 boolean raised)
+   {
+     super.fill3DRect(x, y, width, height, raised);
+   }
+ 
+   public abstract void draw(Shape shape);
+ 
+   public abstract boolean drawImage(Image image, AffineTransform xform,
+ 				    ImageObserver obs);
+ 
+   public abstract void drawImage(BufferedImage image,
+ 				 BufferedImageOp op,
+ 				 int x,
+ 				 int y);
+ 
+   public abstract void drawRenderedImage(RenderedImage image,
+ 					 AffineTransform xform);
+ 
+   public abstract void drawRenderableImage(RenderableImage image,
+                                            AffineTransform xform);
+ 
+   public abstract void drawString(String text, int x, int y);
+ 
+   public abstract void drawString(String text, float x, float y);
+     
+   public abstract void drawString(AttributedCharacterIterator iterator,
+                                   int x, int y);
+ 
+   public abstract void drawString(AttributedCharacterIterator iterator,
+ 				  float x, float y);
+ 
+   // public abstract void drawGlyphVector(GlyphVector g, float x, float y);
+ 
+   public abstract void fill(Shape shape);
+     
+   public abstract boolean hit(Rectangle rect, Shape text,
+ 			      boolean onStroke);
+ 
+   public abstract GraphicsConfiguration getDeviceConfiguration();
+ 
+   public abstract void setComposite(Composite comp);
+     
+   public abstract void setPaint(Paint paint);
+ 
+   public abstract void setStroke(Stroke stroke);
+ 
+   public abstract void setRenderingHint(RenderingHints.Key hintKey,
+                                         Object hintValue);
+ 
+   public abstract Object getRenderingHint(RenderingHints.Key hintKey);
+   
+   public abstract void setRenderingHints(Map hints);
+ 
+   public abstract void addRenderingHints(Map hints);
+ 
+   public abstract RenderingHints getRenderingHints();
+ 
+   public abstract void translate(int x, int y);
+ 
+   public abstract void translate(double tx, double ty);
+     
+   public abstract void rotate(double theta);
+ 
+   public abstract void rotate(double theta, double x, double y);
+ 
+   public abstract void scale(double scaleX, double scaleY);
+ 
+   public abstract void shear(double shearX, double shearY);
+ 
+   public abstract void transform(AffineTransform Tx);
+   
+   public abstract void setTransform(AffineTransform Tx);
+ 
+   public abstract AffineTransform getTransform();
+ 
+   public abstract Paint getPaint();
+ 
+   public abstract Composite getComposite();
+ 
+   public abstract void setBackground(Color color);
+ 
+   public abstract Color getBackground();
+ 
+   public abstract Stroke getStroke();    
+ 
+   public abstract void clip(Shape s);
+ 
+   public abstract FontRenderContext getFontRenderContext ();
+ 
+   public abstract void drawGlyphVector (GlyphVector g, float x, float y);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/GraphicsConfigTemplate.java gcc-4.1.0/libjava/classpath/java/awt/GraphicsConfigTemplate.java
*** gcc-4.0.2/libjava/classpath/java/awt/GraphicsConfigTemplate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/GraphicsConfigTemplate.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,106 ----
+ /* GraphicsConfigTemplate.java -- a template for selecting configurations
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * This allows filtering an array of GraphicsConfigurations for the best
+  * one based on various requirements. The resulting configuration has had
+  * all non-default attributes set as required to meet or exceed the request.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see GraphicsConfiguration
+  * @see GraphicsDevice
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class GraphicsConfigTemplate implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -8061369279557787079L;
+ 
+   /** States that a feature is required to select a configuration. */
+   public static final int REQUIRED = 1;
+ 
+   /**
+    * States that a feature is preferred, but not required, to select a
+    * configuration. In the case of multiple valid configurations, the tie
+    * breaks in favor of the one with the feature.
+    */
+   public static final int PREFERRED = 2;
+ 
+   /**
+    * States that a feature is not necessary in the configuration. In the case
+    * of multiple valid configurations, the tie breaks in favor of the one
+    * without the feature, to reduce overhead.
+    */
+   public static final int UNNECESSARY = 3;
+ 
+   /**
+    * The default constructor.
+    */
+   public GraphicsConfigTemplate()
+   {
+   }
+ 
+   /**
+    * Returns the "best" match among the array of possible configurations, given
+    * the criteria of this template.
+    *
+    * @param array the array to choose from
+    * @return the best match
+    * @throws NullPointerException if array is null
+    */
+   public abstract GraphicsConfiguration getBestConfiguration
+     (GraphicsConfiguration[] array);
+ 
+   /**
+    * Returns true if the given configuration supports all the features required
+    * by this template.
+    *
+    * @param config the configuration to test
+    * @return true if it is a match
+    * @throws NullPointerException if config is null
+    */
+   public abstract boolean isGraphicsConfigSupported
+     (GraphicsConfiguration config);
+ } // class GraphicsConfigTemplate
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/GraphicsConfiguration.java gcc-4.1.0/libjava/classpath/java/awt/GraphicsConfiguration.java
*** gcc-4.0.2/libjava/classpath/java/awt/GraphicsConfiguration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/GraphicsConfiguration.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,233 ----
+ /* GraphicsConfiguration.java -- describes characteristics of graphics
+    Copyright (C) 2000, 2001, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.AffineTransform;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ import java.awt.image.VolatileImage;
+ 
+ /**
+  * This class describes the configuration of various graphics devices, such
+  * as a monitor or printer. Different configurations may exist for the same
+  * device, according to the different native modes supported.
+  *
+  * <p>Virtual devices are supported (for example, in a multiple screen
+  * environment, a virtual device covers all screens simultaneously); the
+  * configuration will have a non-zero relative coordinate system in such
+  * a case.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Window
+  * @see Frame
+  * @see GraphicsEnvironment
+  * @see GraphicsDevice
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public abstract class GraphicsConfiguration
+ {
+   /**
+    * The default constructor.
+    *
+    * @see GraphicsDevice#getConfigurations()
+    * @see GraphicsDevice#getDefaultConfiguration()
+    * @see GraphicsDevice#getBestConfiguration(GraphicsConfigTemplate)
+    * @see Graphics2D#getDeviceConfiguration()
+    */
+   protected GraphicsConfiguration ()
+   {
+   }
+ 
+   /**
+    * Gets the associated device that this configuration describes.
+    *
+    * @return the device
+    */
+   public abstract GraphicsDevice getDevice();
+ 
+   /**
+    * Returns a buffered image optimized to this device, so that blitting can
+    * be supported in the buffered image.
+    *
+    * @param w the width of the buffer
+    * @param h the height of the buffer
+    * @return the buffered image, or null if none is supported
+    */
+   public abstract BufferedImage createCompatibleImage(int w, int h);
+ 
+   /**
+    * Returns a buffered volatile image optimized to this device, so that
+    * blitting can be supported in the buffered image. Because the buffer is
+    * volatile, it can be optimized by native graphics accelerators.
+    *
+    * @param w the width of the buffer
+    * @param h the height of the buffer
+    * @return the buffered image, or null if none is supported
+    * @see Component#createVolatileImage(int, int)
+    * @since 1.4
+    */
+   public abstract VolatileImage createCompatibleVolatileImage(int w, int h);
+ 
+   /**
+    * Returns a buffered volatile image optimized to this device, and with the
+    * given capabilities, so that blitting can be supported in the buffered
+    * image. Because the buffer is volatile, it can be optimized by native
+    * graphics accelerators.
+    *
+    * @param w the width of the buffer
+    * @param h the height of the buffer
+    * @param caps the desired capabilities of the image buffer
+    * @return the buffered image, or null if none is supported
+    * @throws AWTException if the capabilities cannot be met
+    * @since 1.4
+    */
+   public VolatileImage createCompatibleVolatileImage(int w, int h,
+                                                      ImageCapabilities caps)
+     throws AWTException
+   {
+     throw new AWTException("not implemented");
+   }
+ 
+   /**
+    * Returns a buffered volatile image optimized to this device, and
+    * with the given transparency. Because the buffer is volatile, it
+    * can be optimized by native graphics accelerators.
+    *
+    * @param width the width of the buffer
+    * @param height the height of the buffer
+    * @param transparency the transparency value for the buffer
+    * @return the buffered image, or null if none is supported
+    * @since 1.5
+    */
+   public abstract VolatileImage createCompatibleVolatileImage(int width,
+                                                               int height,
+                                                               int transparency);
+ 
+   /**
+    * Returns a buffered image optimized to this device, and with the specified
+    * transparency, so that blitting can be supported in the buffered image.
+    *
+    * @param w the width of the buffer
+    * @param h the height of the buffer
+    * @param transparency the transparency of the buffer
+    * @return the buffered image, or null if none is supported
+    * @see Transparency#OPAQUE
+    * @see Transparency#BITMASK
+    * @see Transparency#TRANSLUCENT
+    */
+   public abstract BufferedImage createCompatibleImage(int w, int h,
+                                                       int transparency);
+ 
+   /**
+    * Gets the color model of the corresponding device.
+    *
+    * @return the color model
+    */
+   public abstract ColorModel getColorModel();
+ 
+   /**
+    * Gets a color model for the corresponding device which supports the desired
+    * transparency level.
+    *
+    * @param transparency the transparency of the model
+    * @return the color model, with transparency
+    * @see Transparency#OPAQUE
+    * @see Transparency#BITMASK
+    * @see Transparency#TRANSLUCENT
+    */
+   public abstract ColorModel getColorModel(int transparency);
+ 
+   /**
+    * Returns a transform that maps user coordinates to device coordinates. The
+    * preferred mapping is about 72 user units to 1 inch (2.54 cm) of physical
+    * space. This is often the identity transform. The device coordinates have
+    * the origin at the upper left, with increasing x to the right, and
+    * increasing y to the bottom.
+    *
+    * @return the transformation from user space to device space
+    * @see #getNormalizingTransform()
+    */
+   public abstract AffineTransform getDefaultTransform();
+ 
+   /**
+    * Returns a transform that maps user coordinates to device coordinates. The
+    * exact mapping is 72 user units to 1 inch (2.54 cm) of physical space.
+    * This is often the identity transform. The device coordinates have the
+    * origin at the upper left, with increasing x to the right, and increasing
+    * y to the bottom. Note that this is more accurate (and thus, sometimes more
+    * costly) than the default transform.
+    *
+    * @return the normalized transformation from user space to device space
+    * @see #getDefaultTransform()
+    */
+   public abstract AffineTransform getNormalizingTransform();
+ 
+   /**
+    * Returns the bounds of the configuration, in device coordinates. If this
+    * is a virtual device (for example, encompassing several screens), the
+    * bounds may have a non-zero origin.
+    *
+    * @return the device bounds
+    * @since 1.3
+    */
+   public abstract Rectangle getBounds();
+ 
+   /**
+    * Returns the buffering capabilities of this configuration.
+    *
+    * @return the buffer capabilities
+    * @since 1.4
+    */
+   public BufferCapabilities getBufferCapabilities()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   /**
+    * Returns the imaging capabilities of this configuration.
+    *
+    * @return the image capabilities
+    * @since 1.4
+    */
+   public ImageCapabilities getImageCapabilities()
+   {
+     throw new Error("not implemented");
+   }
+ } // class GraphicsConfiguration
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/GraphicsDevice.java gcc-4.1.0/libjava/classpath/java/awt/GraphicsDevice.java
*** gcc-4.0.2/libjava/classpath/java/awt/GraphicsDevice.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/GraphicsDevice.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,292 ----
+ /* GraphicsDevice.java -- information about a graphics device
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.VolatileImage;
+ 
+ /**
+  * This describes a graphics device available to the given environment. This
+  * includes screen and printer devices, and the different configurations for
+  * each device. Also, this allows you to create virtual devices which operate
+  * over a multi-screen environment.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see GraphicsEnvironment
+  * @see GraphicsConfiguration
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public abstract class GraphicsDevice
+ {
+   /** Device is a raster screen. */
+   public static final int TYPE_RASTER_SCREEN = 0;
+ 
+   /** Device is a printer. */
+   public static final int TYPE_PRINTER = 1;
+ 
+   /** Device is an image buffer not visible to the user. */
+   public static final int TYPE_IMAGE_BUFFER = 2;
+ 
+   /** The current full-screen window, or null if there is none. */
+   private Window full_screen;
+ 
+   /**
+    * The bounds of the fullscreen window before it has been switched to full
+    * screen.
+    */
+   private Rectangle fullScreenOldBounds;
+ 
+   /** The current display mode, or null if unknown. */
+   private DisplayMode mode;
+ 
+   /**
+    * The default constructor.
+    *
+    * @see GraphicsEnvironment#getScreenDevices()
+    * @see GraphicsEnvironment#getDefaultScreenDevice()
+    * @see GraphicsConfiguration#getDevice()
+    */
+   protected GraphicsDevice()
+   {
+   }
+ 
+   /**
+    * Returns the type of the device.
+    *
+    * @return the device type
+    * @see #TYPE_RASTER_SCREEN
+    * @see #TYPE_PRINTER
+    * @see #TYPE_IMAGE_BUFFER
+    */
+   public abstract int getType();
+ 
+   /**
+    * Returns an identification string for the device. This can be
+    * vendor-specific, and may be useful for debugging.
+    *
+    * @return the identification
+    */
+   public abstract String getIDstring();
+ 
+   /**
+    * Return all configurations valid for this device.
+    *
+    * @return an array of configurations
+    */
+   public abstract GraphicsConfiguration[] getConfigurations();
+ 
+   /**
+    * Return the default configuration for this device.
+    *
+    * @return the default configuration
+    */
+   public abstract GraphicsConfiguration getDefaultConfiguration();
+ 
+   /**
+    * Return the best configuration, according to the criteria in the given
+    * template.
+    *
+    * @param template the template to adjust by
+    * @return the best configuration
+    * @throws NullPointerException if template is null
+    */
+   public GraphicsConfiguration getBestConfiguration
+     (GraphicsConfigTemplate template)
+   {
+     return template.getBestConfiguration(getConfigurations());
+   }
+ 
+   /**
+    * Returns true if the device supports full-screen exclusive mode. The
+    * default implementation returns true; subclass it if this is not the case.
+    *
+    * @return true if full screen support is available
+    * @since 1.4
+    */
+   public boolean isFullScreenSupported()
+   {
+     return true;
+   }
+ 
+   /**
+    * Toggle the given window between full screen and normal mode. The previous
+    * full-screen window, if different, is restored; if the given window is
+    * null, no window will be full screen. If
+    * <code>isFullScreenSupported()</code> returns true, full screen mode is
+    * considered to be exclusive, which implies:<ul>
+    * <li>Windows cannot overlap the full-screen window. All other application
+    *     windows will always appear beneath the full-screen window in the
+    *     Z-order.</li>
+    * <li>Input method windows are disabled. It is advisable to call
+    *     <code>Component.enableInputMethods(false)</code> to make a component
+    *     a non-client of the input method framework.</li>
+    * </ul><br>
+    * If <code>isFullScreenSupported()</code> returns false, full-screen
+    * exclusive mode is simulated by resizing the window to the size of the
+    * screen and positioning it at (0,0). This is also what this method does.
+    * If a device supports real fullscreen mode then it should override this
+    * method as well as #isFullScreenSupported and #getFullScreenWindow.
+    *
+    * @param w the window to toggle
+    * @see #isFullScreenSupported()
+    * @see #getFullScreenWindow()
+    * @see #setDisplayMode(DisplayMode)
+    * @see Component#enableInputMethods(boolean)
+    * @since 1.4
+    */
+   public synchronized void setFullScreenWindow(Window w)
+   {
+     // Restore the previous window to normal mode and release the reference.
+     if (full_screen != null)
+       {
+ 	full_screen.setBounds(fullScreenOldBounds);
+       }
+ 
+     full_screen = null;
+ 
+     // If w != null, make it full-screen.
+     if (w != null)
+       {
+ 	fullScreenOldBounds = w.getBounds();
+ 	full_screen = w;
+ 	DisplayMode dMode = getDisplayMode();
+ 	full_screen.setBounds(0, 0, dMode.getWidth(), dMode.getHeight());
+ 	full_screen.requestFocus();
+ 	full_screen.setLocationRelativeTo(null);
+       }
+   }
+ 
+   /**
+    * Returns the current full-screen window of the device, or null if no
+    * window is full-screen.
+    *
+    * @return the full-screen window
+    * @see #setFullScreenWindow(Window)
+    * @since 1.4
+    */
+   public Window getFullScreenWindow()
+   {
+     return full_screen;
+   }
+ 
+   /**
+    * Returns whether this device supports low-level display changes. This may
+    * depend on whether full-screen exclusive mode is available.
+    *
+    * XXX The default implementation returns false for now.
+    *
+    * @return true if display changes are supported
+    * @see #setDisplayMode(DisplayMode)
+    * @since 1.4
+    */
+   public boolean isDisplayChangeSupported()
+   {
+     return false;
+   }
+ 
+   /**
+    * Sets the display mode. This may be dependent on the availability of
+    * full-screen exclusive mode.
+    *
+    * @param mode the new mode
+    * @throws IllegalArgumentException if the new mode is not in getDisplayModes
+    * @throws UnsupportedOperationException if ! isDisplayChangeSupported()
+    * @see #getDisplayMode()
+    * @see #getDisplayModes()
+    * @see #isDisplayChangeSupported()
+    * @since 1.4
+    */
+   public void setDisplayMode(DisplayMode mode)
+   {
+     DisplayMode[] array = getDisplayModes();
+     if (! isDisplayChangeSupported())
+       throw new UnsupportedOperationException();
+     int i = array == null ? 0 : array.length;
+     while (--i >= 0)
+       if (array[i].equals(mode))
+         break;
+     if (i < 0)
+       throw new IllegalArgumentException();
+     this.mode = mode;
+   }
+ 
+   /**
+    * Returns the current display mode of this device, or null if unknown.
+    *
+    * @return the current display mode
+    * @see #setDisplayMode(DisplayMode)
+    * @see #getDisplayModes()
+    * @since 1.4
+    */
+   public DisplayMode getDisplayMode()
+   {
+     return mode;
+   }
+ 
+   /**
+    * Return an array of all available display modes. This implementation
+    * returns a 0-length array, so subclasses must override this.
+    *
+    * @return the array of available modes
+    * @since 1.4
+    */
+   public DisplayMode[] getDisplayModes()
+   {
+     return new DisplayMode[0];
+   }
+ 
+   /**
+    * Return the number of bytes available in accelerated memory on this
+    * device. The device may support creation or caching on a first-come,
+    * first-served basis, depending on the operating system and driver.
+    * Memory may be a finite resource, and because of multi-threading, you
+    * are not guaranteed that the result of this method ensures your image
+    * will successfully be put in accelerated memory. A negative result means
+    * the memory is unlimited. The default implementation assumes no special
+    * memory is available, and returns 0.
+    *
+    * @return the size of accelerated memory available
+    * @see VolatileImage#flush()
+    * @see ImageCapabilities#isAccelerated()
+    */
+   public int getAvailableAcceleratedMemory()
+   {
+     return 0;
+   }
+ } // class GraphicsDevice
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/GraphicsEnvironment.java gcc-4.1.0/libjava/classpath/java/awt/GraphicsEnvironment.java
*** gcc-4.0.2/libjava/classpath/java/awt/GraphicsEnvironment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/GraphicsEnvironment.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,244 ----
+ /* GraphicsEnvironment.java -- information about the graphics environment
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import gnu.java.awt.ClasspathToolkit;
+ import gnu.classpath.SystemProperties;
+ import java.awt.image.BufferedImage;
+ import java.util.Locale;
+ 
+ /**
+  * This descibes the collection of GraphicsDevice and Font objects available
+  * on a given platform. The resources might be local or remote, and specify
+  * the valid configurations for displaying graphics.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see GraphicsDevice
+  * @see GraphicsConfiguration
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public abstract class GraphicsEnvironment
+ {
+   private static GraphicsEnvironment localGraphicsEnvironment;
+ 
+   /**
+    * The environment must be obtained from a factory or query method, hence
+    * this constructor is protected.
+    */
+   protected GraphicsEnvironment()
+   {
+   }
+ 
+   /**
+    * Returns the local graphics environment. If the java.awt.graphicsenv
+    * system property is set, it instantiates the specified class,
+    * otherwise it assume that the awt toolkit is a ClasspathToolkit
+    * and delegates to it to create the instance.
+    *
+    * @return the local environment
+    */
+   public static GraphicsEnvironment getLocalGraphicsEnvironment()
+   {
+     if (localGraphicsEnvironment != null)
+       return localGraphicsEnvironment;
+ 
+     String graphicsenv = SystemProperties.getProperty("java.awt.graphicsenv",
+                                                       null);
+     if (graphicsenv != null)
+       {
+         try
+           {
+             // We intentionally use the bootstrap class loader.
+             localGraphicsEnvironment = (GraphicsEnvironment)
+                 Class.forName(graphicsenv).newInstance();
+             return localGraphicsEnvironment;
+           }
+         catch (Exception x)
+           {
+             throw (InternalError)
+                 new InternalError("Unable to instantiate java.awt.graphicsenv")
+                     .initCause(x);
+           }
+       }
+     else
+       {
+         ClasspathToolkit tk;
+         tk = ((ClasspathToolkit) Toolkit.getDefaultToolkit());
+         localGraphicsEnvironment = tk.getLocalGraphicsEnvironment();
+         return localGraphicsEnvironment;
+       }
+   }
+ 
+   /**
+    * Check if the local environment is headless, meaning that it does not
+    * support a display, keyboard, or mouse. Many methods in the Abstract
+    * Windows Toolkit (java.awt) throw a {@link HeadlessException} if this
+    * returns true.
+    *
+    * This method returns true if the java.awt.headless property is set
+    * to "true".
+    *
+    * @return true if the environment is headless, meaning that graphics are
+    *         unsupported
+    * @since 1.4
+    */
+   public static boolean isHeadless()
+   {
+     String headless = SystemProperties.getProperty("java.awt.headless", null);
+     return "true".equalsIgnoreCase(headless);
+   }
+ 
+   /**
+    * Check if the given environment is headless, meaning that it does not
+    * support a display, keyboard, or mouse. Many methods in the Abstract
+    * Windows Toolkit (java.awt) throw a {@link HeadlessException} if this
+    * returns true. This default implementation returns isHeadless(), so
+    * subclasses need only override it if they differ.
+    *
+    * @return true if the environment is headless, meaning that graphics are
+    *         unsupported
+    * @since 1.4
+    */
+   public boolean isHeadlessInstance()
+   {
+     return isHeadless();
+   }
+ 
+   /**
+    * Get an array of all the GraphicsDevice objects.
+    *
+    * @return the available graphics devices, may be 0 length
+    * @throws HeadlessException if the environment is headless
+    */
+   public abstract GraphicsDevice[] getScreenDevices();
+ 
+   /**
+    * Get the default screen GraphicsDevice object.
+    *
+    * @return the default screen device
+    * @throws HeadlessException if the environment is headless
+    */
+   public abstract GraphicsDevice getDefaultScreenDevice();
+ 
+   /**
+    * Return a Graphics2D object which will render into the specified image.
+    *
+    * @param image the image to render into
+    * @return the object that renders into the image
+    */
+   public abstract Graphics2D createGraphics(BufferedImage image);
+ 
+   /**
+    * Returns an array of the one-point size fonts available in this
+    * environment. From there, the user can select the font and derive the
+    * correct one of proper size and attributes, using <code>deriveFont</code>.
+    * Only one master version of each font appears in this array; if a font
+    * can be derived from another, it must be created in that way.
+    *
+    * @return the array of available fonts
+    * @see #getAvailableFontFamilyNames()
+    * @see Font#deriveFont(int, float)
+    * @since 1.2
+    */
+   public abstract Font[] getAllFonts();
+ 
+   /**
+    * Returns an array of the font family names available in this environment.
+    * This allows flexibility in choosing the style of font, while still letting
+    * the Font class decide its best match.
+    *
+    * @return the array of available font families
+    * @see #getAllFonts()
+    * @see Font#getFamily()
+    * @since 1.2
+    */
+   public abstract String[] getAvailableFontFamilyNames();
+ 
+   /**
+    * Returns an array of the font family names available in this environment,
+    * localized to the current Locale if l is non-null. This allows
+    * flexibility in choosing the style of font, while still letting the Font
+    * class decide its best match.
+    *
+    * @param l the locale to use
+    * @return the array of available font families, localized
+    * @see #getAllFonts()
+    * @see Font#getFamily()
+    * @since 1.2
+    */
+   public abstract String[] getAvailableFontFamilyNames(Locale l);
+ 
+   /**
+    * Returns the point where a window should be centered. You should probably
+    * also check that the window fits within the screen bounds. The default
+    * simply returns the center of the maximum window bounds; subclasses should
+    * override this if native objects (like scrollbars) make that off-centered.
+    *
+    * @return the centering point
+    * @throws HeadlessException if the environment is headless
+    * @see #getMaximumWindowBounds()
+    * @since 1.4
+    */
+   public Point getCenterPoint()
+   {
+     Rectangle r = getMaximumWindowBounds();
+     return new Point(r.x + r.width / 2, r.y + r.height / 2);
+   }
+ 
+   /**
+    * Returns the maximum bounds for a centered window object. The default
+    * implementation simply returns the bounds of the default configuration
+    * of the default screen; subclasses should override this to if native
+    * objects (like scrollbars) reduce what is truly available. Also,
+    * subclasses should override this if the window should be centered across
+    * a multi-screen display.
+    *
+    * @return the maximum window bounds
+    * @throws HeadlessException if the environment is headless
+    * @see #getCenterPoint()
+    * @see GraphicsConfiguration#getBounds()
+    * @see Toolkit#getScreenInsets(GraphicsConfiguration)
+    * @since 1.4
+    */
+   public Rectangle getMaximumWindowBounds()
+   {
+     return getDefaultScreenDevice().getDefaultConfiguration().getBounds();
+   }
+ } // class GraphicsEnvironment
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/GridBagConstraints.java gcc-4.1.0/libjava/classpath/java/awt/GridBagConstraints.java
*** gcc-4.0.2/libjava/classpath/java/awt/GridBagConstraints.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/GridBagConstraints.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,195 ----
+ /* GridBagConstraints.java -- Constraints for GridBag layout manager
+    Copyright (C) 2000, 2001, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * This specifies the constraints for a component managed by the
+  * GridBagLayout layout manager.
+  */
+ public class GridBagConstraints implements Cloneable, Serializable
+ {
+   static final long serialVersionUID = -1000070633030801713L;
+ 
+   /** Fill in both directions.  */
+   public static final int BOTH = 1;
+   /** Don't fill.  */
+   public static final int NONE = 0;
+   /** Fill horizontally.  */
+   public static final int HORIZONTAL = 2;
+   /** Fill vertically.  */
+   public static final int VERTICAL = 3;
+ 
+   /** Position in the center.  */
+   public static final int CENTER = 10;
+   /** Position to the east.  */
+   public static final int EAST = 13;
+   /** Position to the north.  */
+   public static final int NORTH = 11;
+   /** Position to the northeast.  */
+   public static final int NORTHEAST = 12;
+   /** Position to the northwest.  */
+   public static final int NORTHWEST = 18;
+   /** Position to the south.  */
+   public static final int SOUTH = 15;
+   /** Position to the southeast.  */
+   public static final int SOUTHEAST = 14;
+   /** Position to the southwest.  */
+   public static final int SOUTHWEST = 16;
+   /** Position to the west.  */
+   public static final int WEST = 17;
+ 
+   /** Occupy all remaining cells except last cell.  */
+   public static final int RELATIVE = -1;
+   /** Occupy all remaining cells.  */
+   public static final int REMAINDER = 0;
+ 
+   /**
+    * Position to where the first text line would end. Equals to NORTHEAST for
+    * horizontal left-to-right orientations.
+    */
+   public static final int FIRST_LINE_END = 24;
+ 
+   /**
+    * Position to where the first text line would start. Equals to NORTHWEST for
+    * horizontal left-to-right orientations.
+    */
+   public static final int FIRST_LINE_START = 23;
+ 
+   /**
+    * Position to where the last text line would end. Equals to SOUTHEAST for
+    * horizontal left-to-right orientations.
+    */
+   public static final int LAST_LINE_END = 26;
+ 
+   /**
+    * Position to where the last text line would start. Equals to SOUTHWEST for
+    * horizontal left-to-right orientations.
+    */
+   public static final int LAST_LINE_START = 25;
+ 
+   /**
+    * Position to where a text line would end. Equals to EAST for
+    * left-to-right orientations.
+    */
+   public static final int LINE_END = 22;
+ 
+   /**
+    * Position to where a text line would start. Equals to WEST for
+    * left-to-right orientations.
+    */
+   public static final int LINE_START = 21;
+ 
+   /**
+    * Position to where a page ends. Equals SOUTH for horizontal orientations.
+    */
+   public static final int PAGE_END = 20;
+ 
+   /**
+    * Position to where a page starts. Equals NORTH for horizontal orientations.
+    */
+   public static final int PAGE_START = 19;
+ 
+   public int anchor;
+   public int fill;
+   public int gridheight;
+   public int gridwidth;
+   public int gridx;
+   public int gridy;
+   public Insets insets;
+   public int ipadx;
+   public int ipady;
+   public double weightx;
+   public double weighty;
+ 
+   /** Create a copy of this object.  */
+   public Object clone ()
+   {
+     try
+       {
+ 	GridBagConstraints g = (GridBagConstraints) super.clone ();
+ 	g.insets = (Insets) insets.clone ();
+ 	return g;
+       }
+     catch (CloneNotSupportedException _)
+       {
+ 	// Can't happen.
+ 	return null;
+       }
+   }
+ 
+   /** Create a new GridBagConstraints object with the default
+    * parameters.  */
+   public GridBagConstraints ()
+   {
+     this.anchor = CENTER;
+     this.fill = NONE;
+     this.gridx = RELATIVE;
+     this.gridy = RELATIVE;
+     this.gridwidth = 1;
+     this.gridheight = 1;
+     this.ipadx = 0;
+     this.ipady = 0;
+     this.insets = new Insets (0, 0, 0, 0);
+     this.weightx = 0;
+     this.weighty = 0;
+   }
+ 
+   /** Create a new GridBagConstraints object with the indicated
+    * parameters.  */
+   public GridBagConstraints (int gridx, int gridy,
+ 			     int gridwidth, int gridheight,
+ 			     double weightx, double weighty,
+ 			     int anchor, int fill,
+ 			     Insets insets, int ipadx, int ipady)
+   {
+     this.anchor = anchor;
+     this.fill = fill;
+     this.gridx = gridx;
+     this.gridy = gridy;
+     this.gridwidth = gridwidth;
+     this.gridheight = gridheight;
+     this.ipadx = ipadx;
+     this.ipady = ipady;
+     this.insets = insets;
+     this.weightx = weightx;
+     this.weighty = weighty;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/GridBagLayout.java gcc-4.1.0/libjava/classpath/java/awt/GridBagLayout.java
*** gcc-4.0.2/libjava/classpath/java/awt/GridBagLayout.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/GridBagLayout.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1068 ----
+ /* GridBagLayout - Layout manager for components according to GridBagConstraints
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.Hashtable;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  * @author Jeroen Frijters (jeroen@frijters.net)
+  */
+ public class GridBagLayout
+     implements Serializable, LayoutManager2
+ {
+     private static final long serialVersionUID = 8838754796412211005L;
+ 
+     protected static final int MINSIZE = 1;
+     protected static final int PREFERREDSIZE = 2;
+     protected static final int MAXGRIDSIZE = 512;
+ 
+     // comptable remembers the original contraints given to us.
+     // internalcomptable is used to keep track of modified constraint values
+     // that we calculate, particularly when we are given RELATIVE and
+     // REMAINDER constraints.
+     // Constraints kept in comptable are never modified, and constraints
+     // kept in internalcomptable can be modified internally only.
+     protected Hashtable comptable;
+     private Hashtable internalcomptable;
+     protected GridBagLayoutInfo layoutInfo;
+     protected GridBagConstraints defaultConstraints;
+ 
+     public double[] columnWeights;
+     public int[] columnWidths;
+     public double[] rowWeights;
+     public int[] rowHeights;
+ 
+     public GridBagLayout ()
+     {
+ 	this.comptable = new Hashtable();
+ 	this.internalcomptable = new Hashtable();
+ 	this.defaultConstraints= new GridBagConstraints();
+     }
+ 
+     /**
+      * Helper method to calc the sum of a range of elements in an int array.
+      */
+     private int sumIntArray (int[] array, int upto)
+     {
+ 	int result = 0;
+ 
+ 	for (int i = 0; i < upto; i++)
+ 	    result += array [i];
+ 
+ 	return result;
+     }
+ 
+     /**
+      * Helper method to calc the sum of all elements in an int array.
+      */
+     private int sumIntArray (int[] array)
+     {
+ 	return sumIntArray(array, array.length);
+     }
+ 
+     /**
+      * Helper method to calc the sum of all elements in an double array.
+      */
+     private double sumDoubleArray (double[] array)
+     {
+ 	double result = 0;
+ 
+ 	for (int i = 0; i < array.length; i++)
+ 	    result += array [i];
+ 
+ 	return result;
+     }
+ 
+     public void addLayoutComponent (String name, Component component)
+     {
+ 	// do nothing here.
+     }
+ 
+     public void removeLayoutComponent (Component component)
+     {
+ 	// do nothing here
+     }
+ 
+     public void addLayoutComponent (Component component, Object constraints)
+     {
+ 	if (constraints == null)
+ 	    return;
+ 
+ 	if (!(constraints instanceof GridBagConstraints))
+ 	    throw new IllegalArgumentException("constraints " 
+ 					       + constraints 
+ 					       + " are not an instance of GridBagConstraints");
+ 
+ 	setConstraints (component, (GridBagConstraints) constraints);
+     }
+ 
+     public Dimension preferredLayoutSize (Container parent)
+     {
+ 	if (parent == null)
+ 	    return new Dimension (0, 0);
+     
+ 	GridBagLayoutInfo li = getLayoutInfo (parent, PREFERREDSIZE);
+ 	return getMinSize (parent, li);
+     }
+ 
+     public Dimension minimumLayoutSize (Container parent)
+     {
+ 	if (parent == null)
+ 	    return new Dimension (0, 0);
+     
+ 	GridBagLayoutInfo li = getLayoutInfo (parent, MINSIZE);
+ 	return getMinSize (parent, li);
+     }
+ 
+     public Dimension maximumLayoutSize (Container target)
+     {
+ 	return new Dimension (Integer.MAX_VALUE, Integer.MAX_VALUE);
+     }
+ 
+     public void layoutContainer (Container parent)
+     {
+       arrangeGrid (parent);
+     }
+ 
+     public float getLayoutAlignmentX (Container target)
+     {
+ 	return Component.CENTER_ALIGNMENT;
+     }
+ 
+     public float getLayoutAlignmentY (Container target)
+     {
+ 	return Component.CENTER_ALIGNMENT;
+     }
+ 
+     public void invalidateLayout (Container target)
+     {
+ 	this.layoutInfo = null;
+     }
+ 
+     public void setConstraints (Component component,
+ 	GridBagConstraints constraints)
+     {
+ 	GridBagConstraints clone = (GridBagConstraints) constraints.clone();
+ 
+ 	if (clone.gridx < 0)
+ 	    clone.gridx = GridBagConstraints.RELATIVE;
+     
+ 	if (clone.gridy < 0)
+ 	    clone.gridy = GridBagConstraints.RELATIVE;
+ 
+ 	if (clone.gridwidth == 0)
+ 	    clone.gridwidth = GridBagConstraints.REMAINDER;
+ 	else if (clone.gridwidth < 0)
+ 	    clone.gridwidth = 1;
+     
+ 	if (clone.gridheight == 0)
+ 	    clone.gridheight = GridBagConstraints.REMAINDER;
+ 	else if (clone.gridheight < 0)
+ 	    clone.gridheight = 1;
+     
+ 	comptable.put (component, clone);
+     }
+ 
+     public GridBagConstraints getConstraints (Component component)
+     {
+ 	return (GridBagConstraints) (lookupConstraints (component).clone());
+     }
+ 
+     protected GridBagConstraints lookupConstraints (Component component)
+     {
+ 	GridBagConstraints result = (GridBagConstraints) comptable.get (component);
+ 
+ 	if (result == null)
+ 	{
+ 	    setConstraints (component, defaultConstraints);
+ 	    result = (GridBagConstraints) comptable.get (component);
+ 	}
+     
+ 	return result;
+     }
+ 
+     private GridBagConstraints lookupInternalConstraints (Component component)
+     {
+ 	GridBagConstraints result =
+             (GridBagConstraints) internalcomptable.get (component);
+ 
+ 	if (result == null)
+ 	{
+ 	    result = (GridBagConstraints) lookupConstraints(component).clone();
+ 	    internalcomptable.put (component, result);
+ 	}
+     
+ 	return result;
+     }
+ 
+     /**
+      * @since 1.1
+      */
+     public Point getLayoutOrigin ()
+     {
+ 	if (layoutInfo == null)
+ 	    return new Point (0, 0);
+     
+ 	return new Point (layoutInfo.pos_x, layoutInfo.pos_y);
+     }
+ 
+     /**
+      * @since 1.1
+      */
+     public int[][] getLayoutDimensions ()
+     {
+ 	int[][] result = new int [2][];
+ 	if (layoutInfo == null)
+ 	  {
+ 	    result[0] = new int[0];
+ 	    result[1] = new int[0];
+ 
+ 	    return result;
+ 	  }
+ 
+ 	result [0] = new int [layoutInfo.cols];
+ 	System.arraycopy (layoutInfo.colWidths, 0, result [0], 0, layoutInfo.cols);
+ 	result [1] = new int [layoutInfo.rows];
+ 	System.arraycopy (layoutInfo.rowHeights, 0, result [1], 0, layoutInfo.rows);
+ 	return result;
+     }
+ 
+     public double[][] getLayoutWeights ()
+     {
+ 	double[][] result = new double [2][];
+ 	if (layoutInfo == null)
+ 	  {
+ 	    result[0] = new double[0];
+ 	    result[1] = new double[0];
+ 
+ 	    return result;
+ 	  }
+ 
+ 	result [0] = new double [layoutInfo.cols];
+ 	System.arraycopy (layoutInfo.colWeights, 0, result [0], 0, layoutInfo.cols);
+ 	result [1] = new double [layoutInfo.rows];
+ 	System.arraycopy (layoutInfo.rowWeights, 0, result [1], 0, layoutInfo.rows);
+ 	return result;
+     }
+ 
+     /**
+      * @since 1.1
+      */
+     public Point location (int x, int y)
+     {
+ 	if (layoutInfo == null)
+ 	    return new Point (0, 0);
+ 
+ 	int col;
+ 	int row;
+ 	int pixel_x = layoutInfo.pos_x;
+ 	int pixel_y = layoutInfo.pos_y;
+ 
+ 	for (col = 0; col < layoutInfo.cols; col++)
+ 	{
+ 	    int w = layoutInfo.colWidths [col];
+ 	    if (x < pixel_x + w)
+ 		break;
+ 
+ 	    pixel_x += w;
+ 	}
+ 
+ 	for (row = 0; row < layoutInfo.rows; row++)
+ 	{
+ 	    int h = layoutInfo.rowHeights [row];
+ 	    if (y < pixel_y + h)
+ 		break;
+ 
+ 	    pixel_y += h;
+ 	}
+ 
+ 	return new Point (col, row);
+     }
+ 
+     /**
+      * Obsolete.
+      */
+     protected void AdjustForGravity (GridBagConstraints gbc, Rectangle rect)
+     {
+       // FIXME
+       throw new Error ("Not implemented");
+     }
+ 
+     /**
+      * Obsolete.
+      */
+     protected void ArrangeGrid (Container parent)
+     {
+       Component[] components = parent.getComponents();
+ 
+       if (components.length == 0)
+         return;
+ 
+       GridBagLayoutInfo info = getLayoutInfo (parent, PREFERREDSIZE);
+       if (info.cols == 0 && info.rows == 0)
+         return;
+       layoutInfo = info;
+ 
+       // DEBUG
+       //dumpLayoutInfo (layoutInfo);
+     
+       for(int i = 0; i < components.length; i++)
+ 	{
+           Component component = components [i];
+ 		
+           // If component is not visible we dont have to care about it.
+           if (!component.isVisible())
+             continue;
+ 		
+           GridBagConstraints constraints =
+               lookupInternalConstraints(component);
+ 
+           int cellx = sumIntArray(layoutInfo.colWidths, constraints.gridx);
+           int celly = sumIntArray(layoutInfo.rowHeights, constraints.gridy);
+           int cellw = sumIntArray(layoutInfo.colWidths,
+                                   constraints.gridx + constraints.gridwidth) - cellx;
+           int cellh = sumIntArray(layoutInfo.rowHeights,
+                                   constraints.gridy + constraints.gridheight) - celly;
+ 
+           Insets insets = constraints.insets;
+           if (insets != null)
+ 	    {
+               cellx += insets.left;
+               celly += insets.top;
+               cellw -= insets.left + insets.right;
+               cellh -= insets.top + insets.bottom;
+ 	    }
+ 
+           Dimension dim = component.getPreferredSize();
+ 
+           // Note: Documentation says that padding is added on both sides, but
+           // visual inspection shows that the Sun implementation only adds it
+           // once, so we do the same.
+           dim.width += constraints.ipadx;
+           dim.height += constraints.ipady;
+ 
+           switch(constraints.fill)
+ 	    {
+             case GridBagConstraints.HORIZONTAL:
+               dim.width = cellw;
+               break;
+             case GridBagConstraints.VERTICAL:
+               dim.height = cellh;
+               break;
+             case GridBagConstraints.BOTH:
+               dim.width = cellw;
+               dim.height = cellh;
+               break;
+ 	    }
+ 
+           int x;
+           int y;
+ 
+           switch(constraints.anchor)
+ 	    {
+             case GridBagConstraints.NORTH:
+               x = cellx + (cellw - dim.width) / 2;
+               y = celly;
+               break;
+             case GridBagConstraints.SOUTH:
+               x = cellx + (cellw - dim.width) / 2;
+               y = celly + cellh - dim.height;
+               break;
+             case GridBagConstraints.WEST:
+               x = cellx;
+               y = celly + (cellh - dim.height) / 2;
+               break;
+             case GridBagConstraints.EAST:
+               x = cellx + cellw - dim.width;
+               y = celly + (cellh - dim.height) / 2;
+               break;
+             case GridBagConstraints.NORTHEAST:
+               x = cellx + cellw - dim.width;
+               y = celly;
+               break;
+             case GridBagConstraints.NORTHWEST:
+               x = cellx;
+               y = celly;
+               break;
+             case GridBagConstraints.SOUTHEAST:
+               x = cellx + cellw - dim.width;
+               y = celly + cellh - dim.height;
+               break;
+             case GridBagConstraints.SOUTHWEST:
+               x = cellx;
+               y = celly + cellh - dim.height;
+               break;
+             default:
+               x = cellx + (cellw - dim.width) / 2;
+               y = celly + (cellh - dim.height) / 2;
+               break;
+ 	    }
+ 
+           component.setBounds(layoutInfo.pos_x + x, layoutInfo.pos_y + y, dim.width, dim.height);
+ 	}
+ 
+       // DEBUG
+       //dumpLayoutInfo (layoutInfo);
+     }
+ 
+     /**
+      * Obsolete.
+      */
+     protected GridBagLayoutInfo GetLayoutInfo (Container parent, int sizeflag)
+     {
+       if (sizeflag != MINSIZE && sizeflag != PREFERREDSIZE)
+         throw new IllegalArgumentException();
+ 
+       Dimension parentDim = parent.getSize ();
+       Insets parentInsets = parent.getInsets ();
+       parentDim.width -= parentInsets.left + parentInsets.right;
+       parentDim.height -= parentInsets.top + parentInsets.bottom;
+    
+       int current_y = 0;
+       int max_x = 0;
+       int max_y = 0;
+ 
+       // Guaranteed to contain the last component added to the given row
+       // or column, whose gridwidth/height is not REMAINDER.
+       HashMap lastInRow = new HashMap();
+       HashMap lastInCol = new HashMap();
+ 
+       Component[] components = parent.getComponents();
+ 
+       // Components sorted by gridwidths/heights,
+       // smallest to largest, with REMAINDER and RELATIVE at the end.
+       // These are useful when determining sizes and weights.
+       ArrayList sortedByWidth = new ArrayList(components.length);
+       ArrayList sortedByHeight = new ArrayList(components.length);
+ 
+       // STEP 1: first we figure out how many rows/columns
+       for (int i = 0; i < components.length; i++)
+ 	{
+           Component component = components [i];
+ 		
+           // If component is not visible we dont have to care about it.
+           if (!component.isVisible())
+             continue;
+ 		
+           // When looking up the constraint for the first time, check the
+           // original unmodified constraint.  After the first time, always
+           // refer to the internal modified constraint.
+           GridBagConstraints originalConstraints = lookupConstraints (component);
+           GridBagConstraints constraints = (GridBagConstraints) originalConstraints.clone();
+           internalcomptable.put(component, constraints);
+ 
+           // Cases:
+           //
+           // 1. gridy == RELATIVE, gridx == RELATIVE
+           //
+           //       use y as the row number; check for the next
+           //       available slot at row y
+           //
+           // 2. only gridx == RELATIVE
+           //
+           //       check for the next available slot at row gridy
+           //
+           // 3. only gridy == RELATIVE
+           //
+           //       check for the next available slot at column gridx
+           //
+           // 4. neither gridx or gridy == RELATIVE
+           //
+           //       nothing to check; just add it
+ 
+ 
+           // cases 1 and 2
+           if(constraints.gridx == GridBagConstraints.RELATIVE)
+             {
+               if (constraints.gridy == GridBagConstraints.RELATIVE)
+               constraints.gridy = current_y;
+ 
+               int x;
+ 
+               // Check the component that occupies the right-most spot in this
+               // row. We want to add this component after it.
+               // If this row is empty, add to the 0 position.
+               if (!lastInRow.containsKey(new Integer(constraints.gridy))) 
+                 x = 0;
+               else
+                 {
+                   Component lastComponent = (Component) lastInRow.get(new Integer(constraints.gridy));
+                   GridBagConstraints lastConstraints = lookupInternalConstraints(lastComponent);
+                   x = lastConstraints.gridx + Math.max(1, lastConstraints.gridwidth);
+                 }
+ 
+               // Determine if this component will fit in the slot vertically.
+               // If not, bump it over to where it does fit.
+               for (int y = constraints.gridy + 1; y < constraints.gridy + Math.max(1, constraints.gridheight); y++)
+                 {
+                   if (lastInRow.containsKey(new Integer(y)))
+                     {
+                       Component lastComponent = (Component) lastInRow.get(new Integer(y));
+                       GridBagConstraints lastConstraints = lookupInternalConstraints(lastComponent);
+                       x = Math.max (x,
+                                     lastConstraints.gridx + Math.max(1, lastConstraints.gridwidth));
+                     }
+                 }
+ 
+               constraints.gridx = x;
+             }
+           // case 3
+           else if(constraints.gridy == GridBagConstraints.RELATIVE)
+             {
+               int y;
+               // Check the component that occupies the bottom-most spot in
+               // this column. We want to add this component below it.
+               // If this column is empty, add to the 0 position.
+               if (!lastInCol.containsKey(new Integer(constraints.gridx))) 
+                 y = 0;
+               else
+                 {
+                   Component lastComponent = (Component)lastInCol.get(new Integer(constraints.gridx));
+                   GridBagConstraints lastConstraints = lookupInternalConstraints(lastComponent);
+                   y = lastConstraints.gridy + Math.max(1, lastConstraints.gridheight);
+                 }
+ 
+               // Determine if this component will fit in the slot horizontally.
+               // If not, bump it down to where it does fit.
+               for (int x = constraints.gridx + 1; x < constraints.gridx + Math.max(1, constraints.gridwidth); x++)
+                 {
+                   if (lastInCol.containsKey(new Integer(x)))
+                     {
+                       Component lastComponent = (Component) lastInCol.get(new Integer(x));
+                       GridBagConstraints lastConstraints = lookupInternalConstraints(lastComponent);
+                       y = Math.max (y,
+                                     lastConstraints.gridy + Math.max(1, lastConstraints.gridheight));
+                     }
+                 }
+ 
+               constraints.gridy = y;
+             }
+           // case 4: do nothing
+ 
+           max_x = Math.max(max_x, 
+                            constraints.gridx + Math.max(1, constraints.gridwidth));
+           max_y = Math.max(max_y,
+                            constraints.gridy + Math.max(1, constraints.gridheight));
+ 
+           sortBySpan(component, constraints.gridwidth, sortedByWidth, true);
+           sortBySpan(component, constraints.gridheight, sortedByHeight, false);
+ 
+           // Update our reference points for RELATIVE gridx and gridy.
+           if(constraints.gridwidth == GridBagConstraints.REMAINDER)
+ 	    {
+               current_y = constraints.gridy + Math.max(1, constraints.gridheight);
+ 	    }
+           else if (constraints.gridwidth != GridBagConstraints.REMAINDER)
+ 	    {
+               for (int y = constraints.gridy; y < constraints.gridy + Math.max(1, constraints.gridheight); y++)
+                 {
+                   if(lastInRow.containsKey(new Integer(y)))
+                     {
+                       Component lastComponent = (Component) lastInRow.get(new Integer(y));
+                       GridBagConstraints lastConstraints = lookupInternalConstraints(lastComponent);
+                       if (constraints.gridx > lastConstraints.gridx)
+                         {
+                           lastInRow.put(new Integer(y), component);
+                         }
+                     }
+                   else
+                     {
+                       lastInRow.put(new Integer(y), component);
+                     }
+                 }
+ 
+               for (int x = constraints.gridx; x < constraints.gridx + Math.max(1, constraints.gridwidth); x++)
+                 {
+                   if(lastInCol.containsKey(new Integer(x)))
+                     {
+                       Component lastComponent = (Component) lastInCol.get(new Integer(x));
+                       GridBagConstraints lastConstraints = lookupInternalConstraints(lastComponent);
+                       if (constraints.gridy > lastConstraints.gridy)
+                         {
+                           lastInCol.put(new Integer(x), component);
+                         }
+                     }
+                   else
+                     {
+                       lastInCol.put(new Integer(x), component);
+                     }
+                 }
+ 	    }
+ 	} // end of STEP 1
+ 	
+       GridBagLayoutInfo info = new GridBagLayoutInfo(max_x, max_y);
+ 
+       // Check if column widths and row heights are overridden.
+ 
+       for (int x = 0; x < max_x; x++)
+         {
+           if(columnWidths != null && columnWidths.length > x)
+             info.colWidths[x] = columnWidths[x];
+           if(columnWeights != null && columnWeights.length > x)
+             info.colWeights[x] = columnWeights[x];
+         }
+ 
+       for (int y = 0; y < max_y; y++)
+         {
+           if(rowHeights != null && rowHeights.length > y)
+             info.rowHeights[y] = rowHeights[y];
+           if(rowWeights != null && rowWeights.length > y)
+             info.rowWeights[y] = rowWeights[y];
+         }
+ 
+       // STEP 2: Fix up any cells with width/height as REMAINDER/RELATIVE.
+       for (int i = 0; i < components.length; i++)
+         {
+           Component component = components [i];
+ 			
+           // If component is not visible we dont have to care about it.
+           if (!component.isVisible())
+             continue;
+ 			
+           GridBagConstraints constraints = lookupInternalConstraints (component);
+ 
+           if(constraints.gridwidth == GridBagConstraints.REMAINDER || constraints.gridwidth == GridBagConstraints.RELATIVE)
+             {
+               if(constraints.gridwidth == GridBagConstraints.REMAINDER)
+                 {
+                   for (int y = constraints.gridy; y < constraints.gridy + Math.max(1, constraints.gridheight); y++)
+                     {
+                       if (lastInRow.containsKey(new Integer(y)))
+                         {
+                           Component lastComponent = (Component) lastInRow.get(new Integer(y));
+                           GridBagConstraints lastConstraints = lookupInternalConstraints(lastComponent);
+ 
+                           if (lastConstraints.gridwidth == GridBagConstraints.RELATIVE)
+                             {
+                               constraints.gridx = max_x - 1;
+                               break;
+                             }
+                           else
+                             {
+                               constraints.gridx = Math.max (constraints.gridx,
+                                                             lastConstraints.gridx + Math.max (1, lastConstraints.gridwidth));
+                             }
+                         }
+                     }
+                   constraints.gridwidth = max_x - constraints.gridx;
+                 }
+               else if (constraints.gridwidth == GridBagConstraints.RELATIVE)
+                 {
+                   constraints.gridwidth = max_x - constraints.gridx - 1;
+                 }
+ 
+               // Re-sort
+               sortedByWidth.remove(sortedByWidth.indexOf(component));
+               sortBySpan(component, constraints.gridwidth, sortedByWidth, true);
+             }
+ 
+           if(constraints.gridheight == GridBagConstraints.REMAINDER || constraints.gridheight == GridBagConstraints.RELATIVE)
+             {
+               if(constraints.gridheight == GridBagConstraints.REMAINDER)
+                 {
+                   for (int x = constraints.gridx; x < constraints.gridx + Math.max(1, constraints.gridwidth); x++)
+                     {
+                       if (lastInCol.containsKey(new Integer(x)))
+                         {
+                           Component lastComponent = (Component) lastInRow.get(new Integer(x));
+                           if (lastComponent != null)
+                             {
+                               GridBagConstraints lastConstraints = lookupInternalConstraints(lastComponent);
+     
+                               if (lastConstraints.gridheight == GridBagConstraints.RELATIVE)
+                                 {
+                                   constraints.gridy = max_y - 1;
+                                   break;
+                                 }
+                               else
+                                 {
+                                   constraints.gridy = Math.max (constraints.gridy,
+                                                                 lastConstraints.gridy + Math.max (1, lastConstraints.gridheight));
+                                 }
+                             }
+                         }
+                     }
+                   constraints.gridheight = max_y - constraints.gridy;
+                 }
+               else if (constraints.gridheight == GridBagConstraints.RELATIVE)
+                 {
+                   constraints.gridheight = max_y - constraints.gridy - 1;
+                 }
+ 
+               // Re-sort
+               sortedByHeight.remove(sortedByHeight.indexOf(component));
+               sortBySpan(component, constraints.gridheight, sortedByHeight, false);
+             }
+         } // end of STEP 2
+ 
+       // STEP 3: Determine sizes and weights for columns.
+       for (int i = 0; i < sortedByWidth.size(); i++)
+         {
+           Component component = (Component) sortedByWidth.get(i);
+ 			
+           // If component is not visible we dont have to care about it.
+           if (!component.isVisible())
+             continue;
+ 
+           GridBagConstraints constraints = lookupInternalConstraints (component);
+ 
+           int width = (sizeflag == PREFERREDSIZE) ?
+                       component.getPreferredSize().width :
+                       component.getMinimumSize().width;
+ 
+           if(constraints.insets != null)
+             width += constraints.insets.left + constraints.insets.right;
+ 
+           width += constraints.ipadx;
+ 
+           distributeSizeAndWeight(width,
+                                   constraints.weightx, 
+                                   constraints.gridx,
+                                   constraints.gridwidth,
+                                   info.colWidths,
+                                   info.colWeights);
+         } // end of STEP 3
+ 
+       // STEP 4: Determine sizes and weights for rows.
+       for (int i = 0; i < sortedByHeight.size(); i++)
+         {
+           Component component = (Component) sortedByHeight.get(i);
+ 			
+           // If component is not visible we dont have to care about it.
+           if (!component.isVisible())
+             continue;
+ 
+           GridBagConstraints constraints = lookupInternalConstraints (component);
+ 
+           int height = (sizeflag == PREFERREDSIZE) ?
+                        component.getPreferredSize().height :
+                        component.getMinimumSize().height;
+ 
+           if(constraints.insets != null)
+             height += constraints.insets.top + constraints.insets.bottom;
+ 
+           height += constraints.ipady;
+ 
+           distributeSizeAndWeight(height,
+                                   constraints.weighty, 
+                                   constraints.gridy,
+                                   constraints.gridheight,
+                                   info.rowHeights,
+                                   info.rowWeights);
+         } // end of STEP 4
+ 
+       // Adjust cell sizes iff parent size not zero.
+       if (parentDim.width > 0 && parentDim.height > 0)
+         {
+           calcCellSizes (info.colWidths, info.colWeights, parentDim.width);
+           calcCellSizes (info.rowHeights, info.rowWeights, parentDim.height);
+         }
+ 
+       int totalWidth = sumIntArray(info.colWidths);
+       int totalHeight = sumIntArray(info.rowHeights);
+ 
+       // Make sure pos_x and pos_y are never negative.
+       if (totalWidth >= parentDim.width)
+         info.pos_x = parentInsets.left;
+       else
+         info.pos_x = parentInsets.left + (parentDim.width - totalWidth) / 2;
+ 
+       if (totalHeight >= parentDim.height)
+         info.pos_y = parentInsets.top;
+       else
+         info.pos_y = parentInsets.top + (parentDim.height - totalHeight) / 2;
+ 
+       // DEBUG
+       //dumpLayoutInfo (info);
+ 
+       return info;
+     }
+ 
+     /**
+      * Obsolete.
+      */
+     protected Dimension GetMinSize (Container parent, GridBagLayoutInfo info)
+     {
+       if (parent == null || info == null)
+         return new Dimension (0, 0);
+ 
+       Insets insets = parent.getInsets();
+       int width = sumIntArray (info.colWidths) + insets.left + insets.right;
+       int height = sumIntArray (info.rowHeights) + insets.top + insets.bottom;
+       return new Dimension (width, height);
+     }
+ 
+     /**
+      * @since 1.4
+      */
+     protected Dimension getMinSize (Container parent, GridBagLayoutInfo info)
+     {
+       return GetMinSize (parent, info);
+     }
+ 
+     /**
+      * Helper method used by GetLayoutInfo to keep components sorted, either
+      * by gridwidth or gridheight.
+      *
+      * @param component   Component to add to the sorted list.
+      * @param span        Either the component's gridwidth or gridheight.
+      * @param list        <code>ArrayList</code> of components, sorted by
+      *                    their span.
+      * @param sortByWidth Flag indicating sorting index. If true, sort by
+      *                    width. Otherwise, sort by height.
+      * FIXME: Use a better sorting algorithm.
+      */
+     private void sortBySpan (Component component, int span, ArrayList list, boolean sortByWidth)
+     {
+       if (span == GridBagConstraints.REMAINDER
+           || span == GridBagConstraints.RELATIVE)
+         {
+           // Put all RELATIVE and REMAINDER components at the end.
+           list.add(component);
+         }
+       else
+         {
+           int i = 0;
+           if (list.size() > 0)
+             {
+               GridBagConstraints gbc = lookupInternalConstraints((Component) list.get(i));
+               int otherspan = sortByWidth ?
+                               gbc.gridwidth :
+                               gbc.gridheight;
+               while (otherspan != GridBagConstraints.REMAINDER
+                      && otherspan != GridBagConstraints.RELATIVE
+                      && span >= otherspan)
+                 {
+                   i++;
+                   if (i < list.size())
+                     {
+                       gbc = lookupInternalConstraints((Component) list.get(i));
+                       otherspan = sortByWidth ?
+                                   gbc.gridwidth :
+                                   gbc.gridheight;
+                     }
+                   else
+                     break;
+                 }
+             }
+           list.add(i, component);
+         }
+     }
+ 
+     /**
+      * Helper method used by GetLayoutInfo to distribute a component's size
+      * and weight.
+      *
+      * @param size    Preferred size of component, with inset and padding
+      *                already added.
+      * @param weight  Weight of component.
+      * @param start   Starting position of component. Either
+      *                constraints.gridx or gridy.
+      * @param span    Span of component. either contraints.gridwidth or
+      *                gridheight.
+      * @param sizes   Sizes of rows or columns.
+      * @param weights Weights of rows or columns.
+      */
+     private void distributeSizeAndWeight (int size, double weight,
+                                           int start, int span,
+                                           int[] sizes, double[] weights)
+     {
+       if (span == 1)
+         {
+           sizes[start] = Math.max(sizes[start], size);
+           weights[start] = Math.max(weights[start], weight);
+         }
+       else if (span > 1)
+         {
+           int numOccupied = span;
+           int lastOccupied = -1;
+ 
+           for(int i = start; i < start + span; i++)
+             {
+               if (sizes[i] == 0.0)
+                 numOccupied--;
+               else
+                 {
+                   size -= sizes[i];
+                   lastOccupied = i;
+                 }
+             }
+ 
+           // A component needs to occupy at least one row.
+           if(numOccupied == 0)
+             sizes[start + span - 1] = size;
+           else if (size > 0)
+             sizes[lastOccupied] += size;
+ 
+           calcCellWeights(weight, weights, start, span);
+         }
+     }
+ 
+     /**
+      * Helper method used by GetLayoutInfo to calculate weight distribution.
+      * @param weight  Weight of component.
+      * @param weights Weights of rows/columns.
+      * @param start   Starting position of component in grid (gridx/gridy).
+      * @param span    Span of component (gridwidth/gridheight).
+      */
+     private void calcCellWeights (double weight, double[] weights, int start, int span)
+     {
+       double totalWeight = 0.0;
+       for(int k = start; k < start + span; k++)
+         totalWeight += weights[k];
+ 
+       if(weight > totalWeight)
+         {
+           if (totalWeight == 0.0)
+             {
+               weights[start + span - 1] += weight;
+             }
+           else
+             {
+               double diff = weight - totalWeight ;
+               double remaining = diff;
+ 
+               for(int k = start; k < start + span; k++)
+                 {
+                   double extraWeight = diff * weights[k] / totalWeight;
+                   weights[k] += extraWeight;
+                   remaining -= extraWeight;
+                 } 
+ 
+               if (remaining > 0.0 && weights[start + span - 1] != 0.0)
+                 {
+                   weights[start + span - 1] += remaining;
+                 }
+             }
+         }
+     }
+ 
+     /**
+      * Helper method used by GetLayoutInfo to distribute extra space
+      * based on weight distribution.
+      *
+      * @param sizes   Sizes of rows/columns.
+      * @param weights Weights of rows/columns.
+      * @param range   Dimension of container.
+      */
+     private void calcCellSizes (int[] sizes, double[] weights, int range)
+     {
+       int totalSize = sumIntArray (sizes);
+       double totalWeight = sumDoubleArray (weights);
+ 
+       int diff = range - totalSize;
+ 
+       if (diff == 0)
+         return;
+ 
+       for (int i = 0; i < sizes.length; i++)
+         {
+           int newsize = (int) (sizes[i] + (((double) diff) * weights [i] / totalWeight ));
+ 
+           if (newsize > 0)
+             sizes[i] = newsize;
+         }
+     }
+ 
+     private void dumpLayoutInfo (GridBagLayoutInfo info)
+     {
+ 	System.out.println ("GridBagLayoutInfo:");
+ 	System.out.println ("cols: " + info.cols + ", rows: " + info.rows);
+ 	System.out.print ("colWidths: ");
+ 	dumpArray(info.colWidths);
+ 	System.out.print ("rowHeights: ");
+ 	dumpArray(info.rowHeights);
+ 	System.out.print ("colWeights: ");
+ 	dumpArray(info.colWeights);
+ 	System.out.print ("rowWeights: ");
+ 	dumpArray(info.rowWeights);
+     }
+ 
+     private void dumpArray(int[] array)
+     {
+ 	String sep = "";
+ 	for(int i = 0; i < array.length; i++)
+ 	{
+ 	    System.out.print(sep);
+ 	    System.out.print(array[i]);
+ 	    sep = ", ";
+ 	}
+ 	System.out.println();
+     }
+ 
+     private void dumpArray(double[] array)
+     {
+ 	String sep = "";
+ 	for(int i = 0; i < array.length; i++)
+ 	{
+ 	    System.out.print(sep);
+ 	    System.out.print(array[i]);
+ 	    sep = ", ";
+ 	}
+ 	System.out.println();
+     }
+   
+     /**
+      * @since 1.4
+      */
+     protected void arrangeGrid (Container parent)
+     {
+       ArrangeGrid (parent);
+     }
+ 
+     /**
+      * @since 1.4
+      */
+     protected GridBagLayoutInfo getLayoutInfo (Container parent, int sizeflag)
+     {
+       return GetLayoutInfo (parent, sizeflag);
+     }
+ 
+     /**
+      * @since 1.4
+      */
+     protected void adjustForGravity (GridBagConstraints gbc, Rectangle rect)
+     {
+       AdjustForGravity (gbc, rect);
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/GridBagLayoutInfo.java gcc-4.1.0/libjava/classpath/java/awt/GridBagLayoutInfo.java
*** gcc-4.0.2/libjava/classpath/java/awt/GridBagLayoutInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/GridBagLayoutInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* GridBagLayoutInfo -
+    Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ class GridBagLayoutInfo implements Serializable
+ {
+   private static final long serialVersionUID = -4899416460737170217L;
+ 
+   int pos_x;
+   int pos_y;
+   int cols;
+   int rows;
+   int colWidths[];
+   int rowHeights[];
+   double colWeights[];
+   double rowWeights[];
+ 
+   GridBagLayoutInfo (int cols, int rows)
+   {
+     this.pos_x = 0;
+     this.pos_y = 0;
+     this.cols = cols;
+     this.rows = rows;
+     this.colWidths = new int [cols];
+     this.rowHeights = new int [rows];
+     this.colWeights = new double [cols];
+     this.rowWeights = new double [rows];
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/GridLayout.java gcc-4.1.0/libjava/classpath/java/awt/GridLayout.java
*** gcc-4.0.2/libjava/classpath/java/awt/GridLayout.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/GridLayout.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,360 ----
+ /* GridLayout.java -- Grid-based layout engine
+    Copyright (C) 1999, 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ 
+ /** This class implements a grid-based layout scheme.  Components are
+  * all given the same size and are laid out from left to right and top
+  * to bottom.  A GridLayout is configured with a number of rows and a
+  * number of columns.  If both are specified, then the number of
+  * columns is ignored and is derived from the number of rows and the
+  * total number of components.  If either is zero then that dimension
+  * is computed based on the actual size of the container.  An
+  * exception is thrown if an attempt is made to set both the number of
+  * rows and the number of columns to 0.  This class also supports
+  * horizontal and vertical gaps; these are used as spacing between
+  * cells.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class GridLayout implements LayoutManager, Serializable
+ {
+   static final long serialVersionUID = -7411804673224730901L;
+   
+   /** Add a new component to the layout.  This particular implementation
+    * does nothing.
+    * @param name The name of the component to add.
+    * @param comp The component to add.
+    */
+   public void addLayoutComponent (String name, Component comp)
+   {
+     // Nothing.
+   }
+ 
+   /** Return the number of columns in this layout.  */
+   public int getColumns ()
+   {
+     return cols;
+   }
+ 
+   /** Return the horizontal gap.  */
+   public int getHgap ()
+   {
+     return hgap;
+   }
+ 
+   /** Return the number of rows in this layout.  */
+   public int getRows ()
+   {
+     return rows;
+   }
+ 
+   /** Return the vertical gap.  */
+   public int getVgap ()
+   {
+     return vgap;
+   }
+ 
+   /** Create a new <code>GridLayout</code> with one row and any number
+    * of columns.  Both gaps are set to 0.
+    */
+   public GridLayout ()
+   {
+     this (1, 0, 0, 0);
+   }
+ 
+   /** Create a new <code>GridLayout</code> with the specified number
+    * of rows and columns.  Both gaps are set to 0.  Note that the row
+    * and column settings cannot both be zero.  If both the row and
+    * column values are non-zero, the rows value takes precedence.
+    * @param rows Number of rows
+    * @param cols Number of columns
+    * @exception IllegalArgumentException If rows and columns are both
+    *        0, or if either are negative
+    */
+   public GridLayout (int rows, int cols)
+   {
+     this (rows, cols, 0, 0);
+   }
+ 
+   /** Create a new GridLayout with the specified number of rows and
+    * columns and the specified gaps.
+    * Note that the row and column settings cannot both be
+    * zero.  If both the row and column values are non-zero, the rows value
+    * takes precedence.
+    * @param rows Number of rows
+    * @param cols Number of columns
+    * @param hgap The horizontal gap
+    * @param vgap The vertical gap
+    * @exception IllegalArgumentException If rows and columns are both
+    *        0, if either are negative, or if either gap is negative
+    */
+   public GridLayout (int rows, int cols, int hgap, int vgap)
+   {
+     if (rows < 0)
+       throw new IllegalArgumentException ("number of rows cannot be negative");
+     if (cols < 0)
+       throw new IllegalArgumentException ("number of columns cannot be negative");
+     if (rows == 0 && cols == 0)
+       throw new IllegalArgumentException ("both rows and columns cannot be 0");
+     if (hgap < 0)
+       throw new IllegalArgumentException ("horizontal gap must be nonnegative");
+     if (vgap < 0)
+       throw new IllegalArgumentException ("vertical gap must be nonnegative");
+     this.rows = rows;
+     this.cols = cols;
+     this.hgap = hgap;
+     this.vgap = vgap;
+   }
+ 
+   /** Lay out the container's components based on current settings.
+    * The free space in the container is divided evenly into the specified
+    * number of rows and columns in this object.
+    * @param parent The container to lay out
+    */
+   public void layoutContainer (Container parent)
+   {
+     synchronized (parent.getTreeLock ())
+       {
+ 	int num = parent.ncomponents;
+ 
+ 	// There's no point, and handling this would mean adding special
+ 	// cases.
+ 	if (num == 0)
+ 	  return;
+ 
+ 	// This is more efficient than calling getComponents().
+ 	Component[] comps = parent.component;
+ 
+ 	int real_rows = rows;
+ 	int real_cols = cols;
+ 	if (real_rows == 0)
+ 	  real_rows = (num + real_cols - 1) / real_cols;
+ 	else
+ 	  real_cols = (num + real_rows - 1) / real_rows;
+ 
+ 	// We might have less than a single row.  In this case we expand
+ 	// to fill.
+ 	if (num < real_cols)
+ 	  real_cols = num;
+ 
+ 	Dimension d = parent.getSize ();
+ 	Insets ins = parent.getInsets ();
+ 
+ 	// Compute width and height of each cell in the grid.
+ 	int tw = d.width - ins.left - ins.right;
+ 	tw = (tw - (real_cols - 1) * hgap) / real_cols;
+ 	int th = d.height - ins.top - ins.bottom;
+ 	th = (th - (real_rows - 1) * vgap) / real_rows;
+ 
+ 	// If the cells are too small, still try to do something.
+ 	if (tw < 0)
+ 	  tw = 1;
+ 	if (th < 0)
+ 	  th = 1;
+ 
+ 	int x = ins.left;
+ 	int y = ins.top;
+ 	int i = 0;
+ 	int recount = 0;
+ 
+ 	while (i < num)
+ 	  {
+ 	    comps[i].setBounds (x, y, tw, th);
+ 
+ 	    ++i;
+ 	    ++recount;
+ 	    if (recount == real_cols)
+ 	      {
+ 		recount = 0;
+ 		y += vgap + th;
+ 		x = ins.left;
+ 	      }
+ 	    else
+ 	      x += hgap + tw;
+ 	  }
+       }
+   }
+ 
+   /** Get the minimum layout size of the container.
+    * @param cont The parent container
+    */
+   public Dimension minimumLayoutSize (Container cont)
+   {
+     return getSize (cont, true);
+   }
+ 
+   /** Get the preferred layout size of the container.
+    * @param cont The parent container
+    */
+   public Dimension preferredLayoutSize (Container cont)
+   {
+     return getSize (cont, false);
+   }
+ 
+   /** Remove the indicated component from this layout manager.
+    * This particular implementation does nothing.
+    * @param comp The component to remove
+    */
+   public void removeLayoutComponent (Component comp)
+   {
+     // Nothing.
+   }
+ 
+   /** Set the number of columns.
+    * @param newCols
+    * @exception IllegalArgumentException If the number of columns is
+    *     negative, or if the number of columns is zero and the number
+    *     of rows is already 0.
+    */
+   public void setColumns (int newCols)
+   {
+     if (newCols < 0)
+       throw new IllegalArgumentException ("number of columns cannot be negative");
+     if (newCols == 0 && rows == 0)
+       throw new IllegalArgumentException ("number of rows is already 0");
+     this.cols = newCols;
+   }
+ 
+   /** Set the horizontal gap
+    * @param hgap The horizontal gap
+    * @exception IllegalArgumentException If the hgap value is less than zero.
+    */
+   public void setHgap (int hgap)
+   {
+     if (hgap < 0)
+       throw new IllegalArgumentException ("horizontal gap must be nonnegative");
+     this.hgap = hgap;
+   }
+ 
+   /** Set the number of rows
+    * @param newRows
+    * @exception IllegalArgumentException If the number of rows is
+    *     negative, or if the number of rows is zero and the number
+    *     of columns is already 0.
+    */
+   public void setRows (int newRows)
+   {
+     if (newRows < 0)
+       throw new IllegalArgumentException ("number of rows cannot be negative");
+     if (newRows == 0 && cols == 0)
+       throw new IllegalArgumentException ("number of columns is already 0");
+     this.rows = newRows;
+   }
+ 
+   /** Set the vertical gap.
+    * @param vgap The vertical gap
+    * @exception IllegalArgumentException If the vgap value is less than zero.
+    */
+   public void setVgap (int vgap)
+   {
+     if (vgap < 0)
+       throw new IllegalArgumentException ("vertical gap must be nonnegative");
+     this.vgap = vgap;
+   }
+ 
+   /** Return String description of this object.  */
+   public String toString ()
+   {
+     return ("[" + getClass ().getName ()
+ 	    + ",hgap=" + hgap + ",vgap=" + vgap
+ 	    + ",rows=" + rows + ",cols=" + cols
+ 	    + "]");
+   }
+ 
+   // This method is used to compute the various sizes.
+   private Dimension getSize (Container parent, boolean is_min)
+   {
+     synchronized (parent.getTreeLock ())
+       {
+ 	int w = 0, h = 0, num = parent.ncomponents;
+ 	// This is more efficient than calling getComponents().
+ 	Component[] comps = parent.component;
+ 
+ 	for (int i = 0; i < num; ++i)
+ 	  {
+ 	    Dimension d;
+ 
+ 	    if (is_min)
+ 	      d = comps[i].getMinimumSize ();
+ 	    else
+ 	      d = comps[i].getPreferredSize ();
+ 
+ 	    w = Math.max (d.width, w);
+ 	    h = Math.max (d.height, h);
+ 	  }
+ 
+ 	int real_rows = rows;
+ 	int real_cols = cols;
+ 	if (real_rows == 0)
+ 	  real_rows = (num + real_cols - 1) / real_cols;
+ 	else
+ 	  real_cols = (num + real_rows - 1) / real_rows;
+ 
+ 	Insets ins = parent.getInsets ();
+ 	// We subtract out an extra gap here because the gaps are only
+ 	// between cells.
+ 	w = ins.left + ins.right + real_cols * (w + hgap) - hgap;
+ 	h = ins.top + ins.bottom + real_rows * (h + vgap) - vgap;
+ 	return new Dimension (w, h);
+       }
+   }
+ 
+   /**
+    * @serial The number of columns in the grid.
+    */
+   private int cols;
+ 
+   /**
+    * @serial The number of rows in the grid.
+    */
+   private int rows;
+ 
+   /**
+    * @serial The horizontal gap between columns
+    */
+   private int hgap;
+ 
+   /**
+    * @serial The vertical gap between rows
+    */
+   private int vgap;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/HeadlessException.java gcc-4.1.0/libjava/classpath/java/awt/HeadlessException.java
*** gcc-4.0.2/libjava/classpath/java/awt/HeadlessException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/HeadlessException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* HeadlessException.java -- operation not possible in headless environment
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This exception is thrown when code dependent on a keyboard, mouse, or
+  * display is executed in a headless environment.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class HeadlessException extends UnsupportedOperationException
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = 167183644944358563L;
+ 
+   /**
+    * Create a new instance with no detailed error message.
+    */
+   public HeadlessException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with the specified detailed error message.
+    *
+    * @param message the detailed error message
+    */
+   public HeadlessException(String message)
+   {
+     super(message);
+   }
+ } // class HeadlessException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/IllegalComponentStateException.java gcc-4.1.0/libjava/classpath/java/awt/IllegalComponentStateException.java
*** gcc-4.0.2/libjava/classpath/java/awt/IllegalComponentStateException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/IllegalComponentStateException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* IllegalComponentStateException.java -- bad component state
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This exception is thrown when the requested operation failed because
+  * a component was not in the proper state.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class IllegalComponentStateException extends IllegalStateException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -1889339587208144238L;
+ 
+   /**
+    * Create a new instance with no detailed error message.
+    */
+   public IllegalComponentStateException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with the specified detailed error message.
+    *
+    * @param message the detailed error message
+    */
+   public IllegalComponentStateException(String message)
+   {
+     super(message);
+   }
+ } // class IllegalComponentStateException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Image.java gcc-4.1.0/libjava/classpath/java/awt/Image.java
*** gcc-4.0.2/libjava/classpath/java/awt/Image.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Image.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,209 ----
+ /* Image.java -- superclass for images
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.AreaAveragingScaleFilter;
+ import java.awt.image.FilteredImageSource;
+ import java.awt.image.ImageFilter;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.image.ReplicateScaleFilter;
+ 
+ /**
+  * This is the abstract superclass of all image objects in Java.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public abstract class Image
+ {
+   /**
+    * This variable is returned whenever a property that is not defined
+    * is requested.
+    */
+   // For debug purposes, this might as well be a unique string.
+   public static final Object UndefinedProperty
+     = new String("undefined property");
+ 
+   /**
+    * Constant indicating that the default scaling algorithm should be used.
+    *
+    * @since 1.1
+    */
+   public static final int SCALE_DEFAULT = 1;
+ 
+   /**
+    * Constant indicating that a fast scaling algorithm should be used.
+    *
+    * @since 1.1
+    */
+   public static final int SCALE_FAST = 2;
+ 
+   /**
+    * Constant indicating that a smooth scaling algorithm should be used.
+    *
+    * @since 1.1
+    */
+   public static final int SCALE_SMOOTH = 4;
+ 
+   /**
+    * Constant indicating that the <code>ReplicateScaleFilter</code> class
+    * algorithm should be used for scaling.
+    *
+    * @see ReplicateScaleFilter
+    * @since 1.1
+    */
+   public static final int SCALE_REPLICATE = 8;
+ 
+   /**
+    * Constant indicating that the area averaging scaling algorithm should be
+    * used.
+    *
+    * @see java.awt.image.AreaAveragingScaleFilter
+    * @since 1.1
+    */
+   public static final int SCALE_AREA_AVERAGING = 16;
+ 
+   /**
+    * A default constructor for subclasses.
+    */
+   public Image()
+   {
+   }
+ 
+   /**
+    * Returns the width of the image, or -1 if it is unknown.  If the
+    * image width is unknown, the observer object will be notified when
+    * the value is known.
+    *
+    * @param observer the image observer for this object
+    * @return the width in pixels
+    * @see #getHeight(ImageObserver)
+    */
+   public abstract int getWidth(ImageObserver observer);
+ 
+   /**
+    * Returns the height of the image, or -1 if it is unknown.  If the
+    * image height is unknown, the observer object will be notified when
+    * the value is known.
+    *
+    * @param observer the image observer for this object
+    * @return the height in pixels
+    * @see #getWidth(ImageObserver)
+    */
+   public abstract int getHeight(ImageObserver observer);
+ 
+   /**
+    * Returns the image producer object for this object. The producer is the
+    * object which generates pixels for this image.
+    *
+    * @return the image producer for this object
+    */
+   public abstract ImageProducer getSource();
+ 
+   /**
+    * Returns a graphics context object for drawing an off-screen object.
+    * This method is only valid for off-screen objects.
+    *
+    * @return a graphics context object for an off-screen object
+    */
+   public abstract Graphics getGraphics();
+ 
+   /**
+    * This method requests a named property for an object.  The value of the
+    * property is returned. The value <code>UndefinedProperty</code> is
+    * returned if there is no property with the specified name.  The value
+    * <code>null</code> is returned if the properties for the object are
+    * not yet known.  In this case, the specified image observer is notified
+    * when the properties are known.
+    *
+    * @param name the requested property name
+    * @param observer the image observer for this object
+    * @return the named property, if available
+    * @see #UndefinedProperty
+    */
+   public abstract Object getProperty(String name, ImageObserver observer);
+ 
+   /**
+    * Scales the image to the requested dimension. A new Image with asynchronous
+    * loading will be produced according to the hints of the algorithm
+    * requested. If either the width or height is non-positive, it is adjusted
+    * to preserve the original aspect ratio.
+    *
+    * @param width the width of the scaled image
+    * @param height the height of the scaled image
+    * @param flags a value indicating the algorithm to use
+    * @return the scaled <code>Image</code> object
+    * @see #SCALE_DEFAULT
+    * @see #SCALE_FAST
+    * @see #SCALE_SMOOTH
+    * @see #SCALE_REPLICATE
+    * @see #SCALE_AREA_AVERAGING
+    * @since 1.1
+    */
+   public Image getScaledInstance(int width, int height, int flags)
+   {
+     ImageFilter filter;
+     switch (flags)
+     {
+       case SCALE_DEFAULT:
+       case SCALE_FAST:
+       case SCALE_REPLICATE:
+ 	filter = new ReplicateScaleFilter(width, height);
+ 	break;
+       case SCALE_AREA_AVERAGING:
+ 	filter = new AreaAveragingScaleFilter(width, height);
+ 	break;
+       case SCALE_SMOOTH:
+         throw new Error("SCALE_SMOOTH: not implemented");
+       default:
+         throw new Error("Unknown flag or not implemented: " + flags);
+     }
+ 
+     ImageProducer producer = new FilteredImageSource(getSource(), filter);
+     return Toolkit.getDefaultToolkit().createImage(producer);
+   }
+ 
+   /**
+    * Flushes (that is, destroys) any resources used for this image.  This
+    * includes the actual image data.
+    */
+   public abstract void flush();
+ } // class Image
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/ImageCapabilities.java gcc-4.1.0/libjava/classpath/java/awt/ImageCapabilities.java
*** gcc-4.0.2/libjava/classpath/java/awt/ImageCapabilities.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/ImageCapabilities.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,107 ----
+ /* ImageCapabilities.java -- the capabilities of an image buffer
+    Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This class represents the capabilities of an image buffer.  An
+  * image buffer may be backed by accelerated graphics resources.
+  * Those resources may or may not be volatile.  This class is used to
+  * describe these image buffer characteristics.
+  */
+ public class ImageCapabilities implements Cloneable
+ {
+   /**
+    * Whether or not this the image buffer uses accelerated graphics
+    * resources.
+    */
+   private final boolean accelerated;
+ 
+   /**
+    * Create a new image capability descriptor.
+    *
+    * @param accelerated true if the image buffer uses accelerated
+    * graphics resources
+    */
+   public ImageCapabilities(boolean accelerated)
+   {
+     this.accelerated = accelerated;
+   }
+ 
+   /**
+    * Returns whether or not the image buffer uses accelerated graphics
+    * resources.
+    *
+    * @return true if the image buffer uses accelerated graphics
+    * resources; false otherwise
+    */
+   public boolean isAccelerated()
+   {
+     return accelerated;
+   }
+ 
+   /**
+    * Returns whether or not the image buffer's resources are volatile,
+    * meaning that they can be reclaimed by the graphics system at any
+    * time.
+    *
+    * @return true if the image buffer's resources are volatile; false
+    * otherwise
+    */
+   public boolean isTrueVolatile()
+   {
+     return true;
+   }
+ 
+   /**
+    * Clone this image capability descriptor.
+    *
+    * @return a clone of this image capability descriptor
+    */
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Insets.java gcc-4.1.0/libjava/classpath/java/awt/Insets.java
*** gcc-4.0.2/libjava/classpath/java/awt/Insets.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Insets.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,158 ----
+ /* Insets.java -- information about a container border
+    Copyright (C) 1999, 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * This class represents the "margin" or space around a container.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @status 
+  */
+ public class Insets implements Cloneable, Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -2272572637695466749L;
+ 
+   /**
+    * The gap from the top.
+    *
+    * @serial the top inset
+    */
+   public int top;
+ 
+   /**
+    * The gap from the left.
+    *
+    * @serial the left inset
+    */
+   public int left;
+ 
+   /**
+    * The gap from the bottom.
+    *
+    * @serial the bottom inset
+    */
+   public int bottom;
+ 
+   /**
+    * The gap from the right.
+    *
+    * @serial the right inset
+    */
+   public int right;
+ 
+   /**
+    * Initializes a new instance of <code>Inset</code> with the specified
+    * inset values.
+    *
+    * @param top the top inset
+    * @param left the left inset
+    * @param bottom the bottom inset
+    * @param right the right inset
+    */
+   public Insets(int top, int left, int bottom, int right)
+   {
+     this.top = top;
+     this.left = left;
+     this.bottom = bottom;
+     this.right = right;
+   }
+ 
+   /**
+    * Tests whether this object is equal to the specified object. The other
+    * object must be an instance of Insets with identical field values.
+    *
+    * @param obj the object to test against
+    * @return true if the specified object is equal to this one
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof Insets))
+       return false;
+     Insets i = (Insets) obj;
+     return top == i.top && bottom == i.bottom
+       && left == i.left && right == i.right;
+   }
+ 
+   /**
+    * Returns a hashcode for this instance. The formula is unspecified, but
+    * appears to be <code>XXX what is it? </code>.
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     // This can't be right...
+     return top + bottom + left + right;
+   }
+ 
+   /**
+    * Returns a string representation of this object, which will be non-null.
+    * The format is unspecified, but appears to be <code>XXX what is it?</code>.
+    *
+    * @return a string representation of this object
+    */
+   public String toString()
+   {
+     return getClass().getName() + "(top=" + top + ",bottom=" + bottom +
+       ",left=" + left + ",right=" + right + ')';
+   }
+ 
+   /**
+    * Returns a copy of this object.
+    *
+    * @return a copy of this object
+    */
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ } // class Insets
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/ItemSelectable.java gcc-4.1.0/libjava/classpath/java/awt/ItemSelectable.java
*** gcc-4.0.2/libjava/classpath/java/awt/ItemSelectable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/ItemSelectable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* ItemSelectable.java -- items that can be selected
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ItemListener;
+ 
+ /**
+  * This interface is for objects that can have one or more items selected.
+  * For example, radio buttons.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface ItemSelectable
+ {
+   /**
+    * Returns the list of objects that are selected in this component.
+    *
+    * @return the list of selected objects, or null
+    */
+   Object[] getSelectedObjects();
+ 
+   /**
+    * Adds an item listener to this object.  It will receive selection events
+    * for this object by the user (but not programatically). If listener is
+    * null, it is ignored.
+    *
+    * @param listener the item listener to add
+    */
+   void addItemListener(ItemListener listener);
+ 
+   /**
+    * Removes an item listener from this object.
+    *
+    * @param listener the item listener to remove
+    */
+   void removeItemListener(ItemListener listener);
+ } // interface ItemSelectable
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/JobAttributes.java gcc-4.1.0/libjava/classpath/java/awt/JobAttributes.java
*** gcc-4.0.2/libjava/classpath/java/awt/JobAttributes.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/JobAttributes.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,500 ----
+ /* JobAttributes.java -- 
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * Needs documentation...
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.3
+  * @status updated to 1.4, lacks documentation
+  */
+ public final class JobAttributes implements Cloneable
+ {
+   public static final class DefaultSelectionType extends AttributeValue
+   {
+     private static final String[] NAMES = { "all", "range", "selection" };
+     public static final DefaultSelectionType ALL
+       = new DefaultSelectionType(0);
+     public static final DefaultSelectionType RANGE
+       = new DefaultSelectionType(1);
+     public static final DefaultSelectionType SELECTION
+       = new DefaultSelectionType(2);
+     private DefaultSelectionType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class DefaultSelectionType
+ 
+   public static final class DestinationType extends AttributeValue
+   {
+     private static final String[] NAMES = { "file", "printer" };
+     public static final DestinationType FILE = new DestinationType(0);
+     public static final DestinationType PRINTER = new DestinationType(1);
+     private DestinationType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class DestinationType
+ 
+   public static final class DialogType extends AttributeValue
+   {
+     private static final String[] NAMES = { "common", "native", "none" };
+     public static final DialogType COMMON = new DialogType(0);
+     public static final DialogType NATIVE = new DialogType(1);
+     public static final DialogType NONE = new DialogType(2);
+     private DialogType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class DialogType
+ 
+   public static final class MultipleDocumentHandlingType
+     extends AttributeValue
+   {
+     private static final String[] NAMES = {
+       "separate-documents-collated-copies",
+       "separate-documents-uncollated-copies"
+     };
+     public static final MultipleDocumentHandlingType
+       SEPARATE_DOCUMENTS_COLLATED_COPIES
+       = new MultipleDocumentHandlingType(0);
+     public static final MultipleDocumentHandlingType
+       SEPARATE_DOCUMENTS_UNCOLLATED_COPIES
+       = new MultipleDocumentHandlingType(1);
+     private MultipleDocumentHandlingType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class MultipleDocumentHandlingType
+ 
+   public static final class SidesType extends AttributeValue
+   {
+     private static final String[] NAMES
+       = { "one-sided", "two-sided-long-edge", "two-sided-short-edge" };
+     public static final SidesType ONE_SIDED = new SidesType(0);
+     public static final SidesType TWO_SIDED_LONG_EDGE = new SidesType(1);
+     public static final SidesType TWO_SIDED_SHORT_EDGE = new SidesType(2);
+     private SidesType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class SidesType
+ 
+   private int copies;
+   private DefaultSelectionType selection;
+   private DestinationType destination;
+   private DialogType dialog;
+   private String filename;
+   private int maxPage;
+   private int minPage;
+   private MultipleDocumentHandlingType multiple;
+   private int[][] pageRanges; // null for default value
+   private int fromPage; // 0 for default value
+   private int toPage; // 0 for default value
+   private String printer;
+   private SidesType sides;
+ 
+   public JobAttributes()
+   {
+     copies = 1;
+     selection = DefaultSelectionType.ALL;
+     destination = DestinationType.PRINTER;
+     dialog = DialogType.NATIVE;
+     maxPage = Integer.MAX_VALUE;
+     minPage = 1;
+     multiple
+       = MultipleDocumentHandlingType.SEPARATE_DOCUMENTS_UNCOLLATED_COPIES;
+     sides = SidesType.ONE_SIDED;
+   }
+ 
+   public JobAttributes(JobAttributes attr)
+   {
+     set(attr);
+   }
+ 
+   public JobAttributes(int copies, DefaultSelectionType selection,
+                        DestinationType destination, DialogType dialog,
+                        String filename, int max, int min,
+                        MultipleDocumentHandlingType multiple,
+                        int[][] pageRanges, String printer, SidesType sides)
+   {
+     if (copies <= 0 || selection == null || destination == null
+         || dialog == null || max < min || min <= 0 || multiple == null
+         || sides == null)
+       throw new IllegalArgumentException();
+     this.copies = copies;
+     this.selection = selection;
+     this.destination = destination;
+     this.dialog = dialog;
+     this.filename = filename;
+     maxPage = max;
+     minPage = min;
+     this.multiple = multiple;
+     setPageRanges(pageRanges);
+     this.printer = printer;
+     this.sides = sides;
+   }
+ 
+   public Object clone()
+   {
+     return new JobAttributes(this);
+   }
+ 
+   public void set(JobAttributes attr)
+   {
+     copies = attr.copies;
+     selection = attr.selection;
+     destination = attr.destination;
+     dialog = attr.dialog;
+     filename = attr.filename;
+     maxPage = attr.maxPage;
+     minPage = attr.minPage;
+     multiple = attr.multiple;
+     pageRanges = (int[][]) attr.pageRanges.clone();
+     printer = attr.printer;
+     sides = attr.sides;
+     fromPage = attr.fromPage;
+     toPage = attr.toPage;
+   }
+ 
+   public int getCopies()
+   {
+     return copies;
+   }
+ 
+   public void setCopies(int copies)
+   {
+     if (copies <= 0)
+       throw new IllegalArgumentException();
+     this.copies = copies;
+   }
+ 
+   public void setCopiesToDefault()
+   {
+     copies = 1;
+   }
+ 
+   public DefaultSelectionType getDefaultSelection()
+   {
+     return selection;
+   }
+ 
+   public void setDefaultSelection(DefaultSelectionType selection)
+   {
+     if (selection == null)
+       throw new IllegalArgumentException();
+     this.selection = selection;
+   }
+ 
+   public DestinationType getDestination()
+   {
+     return destination;
+   }
+ 
+   public void setDestination(DestinationType destination)
+   {
+     if (destination == null)
+       throw new IllegalArgumentException();
+     this.destination = destination;
+   }
+ 
+   public DialogType getDialog()
+   {
+     return dialog;
+   }
+ 
+   public void setDialog(DialogType dialog)
+   {
+     if (dialog == null)
+       throw new IllegalArgumentException();
+     this.dialog = dialog;
+   }
+ 
+   public String getFileName()
+   {
+     return filename;
+   }
+ 
+   public void setFileName(String filename)
+   {
+     this.filename = filename;
+   }
+ 
+   public int getFromPage()
+   {
+     return fromPage != 0 ? fromPage
+       : pageRanges != null ? pageRanges[0][0]
+       : toPage != 0 ? toPage : minPage;
+   }
+ 
+   public void setFromPage(int fromPage)
+   {
+     if (fromPage < minPage || (fromPage > toPage && toPage != 0)
+         || fromPage > maxPage)
+       throw new IllegalArgumentException();
+     if (pageRanges == null)
+       this.fromPage = fromPage;
+   }
+ 
+   public int getMaxPage()
+   {
+     return maxPage;
+   }
+ 
+   public void setMaxPage(int maxPage)
+   {
+     if (maxPage < minPage)
+       throw new IllegalArgumentException();
+     this.maxPage = maxPage;
+     if (maxPage < fromPage)
+       fromPage = maxPage;
+     if (maxPage < toPage)
+       toPage = maxPage;
+     if (pageRanges != null)
+       {
+         int i = pageRanges.length - 1;
+         while (i >= 0 && maxPage < pageRanges[i][1])
+           i--;
+         if (maxPage >= pageRanges[++i][0])
+           pageRanges[i++][1] = maxPage;
+         if (i == 0)
+           pageRanges = null;
+         else if (i < pageRanges.length)
+           {
+             int[][] tmp = new int[i][];
+             System.arraycopy(pageRanges, 0, tmp, 0, i);
+             pageRanges = tmp;
+           }
+       }
+   }
+ 
+   public int getMinPage()
+   {
+     return minPage;
+   }
+ 
+   public void setMinPage(int minPage)
+   {
+     if (minPage <= 0 || minPage > maxPage)
+       throw new IllegalArgumentException();
+     this.minPage = minPage;
+     if (minPage > toPage)
+       toPage = minPage;
+     if (minPage > fromPage)
+       fromPage = minPage;
+     if (pageRanges != null)
+       {
+         int size = pageRanges.length;
+         int i = 0;
+         while (i < size && minPage > pageRanges[i][0])
+           i++;
+         if (minPage <= pageRanges[i - 1][1])
+           pageRanges[--i][0] = minPage;
+         if (i == size)
+           pageRanges = null;
+         else if (i > 0)
+           {
+             int[][] tmp = new int[size - i][];
+             System.arraycopy(pageRanges, i, tmp, 0, size - i);
+             pageRanges = tmp;
+           }
+       }
+   }
+ 
+   public MultipleDocumentHandlingType getMultipleDocumentHandling()
+   {
+     return multiple;
+   }
+ 
+   public void setMultipleDocumentHandling
+     (MultipleDocumentHandlingType multiple)
+   {
+     if (multiple == null)
+       throw new IllegalArgumentException();
+     this.multiple = multiple;
+   }
+ 
+   public void setMultipleDocumentHandlingToDefault()
+   {
+     multiple
+       = MultipleDocumentHandlingType.SEPARATE_DOCUMENTS_UNCOLLATED_COPIES;
+   }
+ 
+   public int[][] getPageRanges()
+   {
+     if (pageRanges == null)
+       return new int[][] { { getFromPage(), getToPage() } };
+     // Perform a deep clone, so user code cannot affect original arrays.
+     int i = pageRanges.length;
+     int[][] result = new int[i][];
+     while (--i >= 0)
+       result[i] = (int[]) pageRanges[i].clone();
+     return result;
+   }
+ 
+   public void setPageRanges(int[][] pageRanges)
+   {
+     int size = pageRanges == null ? 0 : pageRanges.length;
+     if (size == 0)
+       throw new IllegalArgumentException();
+     while (--size >= 0)
+       {
+         int[] range = pageRanges[size];
+         if (range == null || range.length != 2
+             || range[0] < minPage || range[1] < range[0] || range[1] > maxPage
+             || (size != 0 && range[0] <= pageRanges[size - 1][1]))
+           throw new IllegalArgumentException();
+       }
+     size = pageRanges.length;
+     if (fromPage > 0 && pageRanges[0][0] > fromPage)
+       fromPage = pageRanges[0][0];
+     if (toPage > 0 && pageRanges[size - 1][1] < toPage)
+       toPage = pageRanges[size - 1][1];
+     this.pageRanges = new int[size][];
+     while (--size >= 0)
+       this.pageRanges[size] = (int[]) pageRanges[size].clone();
+   }
+ 
+   public String getPrinter()
+   {
+     return printer;
+   }
+ 
+   public void setPrinter(String printer)
+   {
+     this.printer = printer;
+   }
+ 
+   public SidesType getSides()
+   {
+     return sides;
+   }
+ 
+   public void setSides(SidesType sides)
+   {
+     if (sides == null)
+       throw new IllegalArgumentException();
+     this.sides = sides;
+   }
+ 
+   public void setSidesToDefault()
+   {
+     sides = SidesType.ONE_SIDED;
+   }
+ 
+   public int getToPage()
+   {
+     return toPage != 0 ? toPage
+       : pageRanges != null ? pageRanges[pageRanges.length - 1][1]
+       : fromPage != 0 ? fromPage : maxPage;
+   }
+ 
+   public void setToPage(int toPage)
+   {
+     if (toPage < minPage || (fromPage > toPage && fromPage != 0)
+         || toPage > maxPage)
+       throw new IllegalArgumentException();
+     if (pageRanges == null)
+       this.toPage = toPage;
+   }
+ 
+   public boolean equals(Object o)
+   {
+     if (this == o)
+       return true;
+     if (! (o instanceof JobAttributes))
+       return false;
+     JobAttributes ja = (JobAttributes) o;
+     if (copies != ja.copies || selection != ja.selection
+         || destination != ja.destination || dialog != ja.dialog
+         || ! filename.equals(ja.filename) || maxPage != ja.maxPage
+         || minPage != ja.minPage || multiple != ja.multiple
+         || fromPage != ja.fromPage || toPage != ja.toPage
+         || ! printer.equals(ja.printer) || sides != ja.sides
+         || (pageRanges == null) != (ja.pageRanges == null))
+       return false;
+     if (pageRanges != ja.pageRanges)
+       for (int i = pageRanges.length; --i >= 0; )
+         if (pageRanges[i][0] != ja.pageRanges[i][0]
+             || pageRanges[i][1] != ja.pageRanges[i][1])
+           return false;
+     return true;
+   }
+ 
+   public int hashCode()
+   {
+     int hash = (selection.value << 6) ^ (destination.value << 5)
+       ^ (dialog.value << 3) ^ (multiple.value << 2) ^ sides.value
+       ^ (filename == null ? 0 : filename.hashCode())
+       ^ (printer == null ? 0 : printer.hashCode());
+     // The effect of the above fields on the hashcode match the JDK. However,
+     // I am unable to reverse engineer the effect of the fields listed below,
+     // so I am using my own implementation. Note that this still satisfies
+     // the general contract of hashcode, it just doesn't match the JDK.
+     hash ^= (copies << 27) ^ (maxPage << 22) ^ (minPage << 17);
+     if (pageRanges == null)
+       hash ^= (getFromPage() << 13) ^ (getToPage() << 8);
+     else
+       for (int i = pageRanges.length; --i >= 0; )
+         hash ^= (pageRanges[i][0] << 13) ^ (pageRanges[i][1] << 8);
+     return hash;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer s = new StringBuffer("copies=").append(copies)
+       .append(",defaultSelection=").append(selection).append(",destination=")
+       .append(destination).append(",dialog=").append(dialog)
+       .append(",fileName=").append(filename).append(",fromPage=")
+       .append(getFromPage()).append(",maxPage=").append(maxPage)
+       .append(",minPage=").append(minPage)
+       .append(",multiple-document-handling=").append(multiple)
+       .append(",page-ranges=[");
+     if (pageRanges == null)
+       s.append(minPage).append(':').append(minPage).append(']');
+     else
+       for (int i = 0; i < pageRanges.length; i++)
+         s.append(pageRanges[i][0]).append(':').append(pageRanges[i][1])
+           .append(',');
+     s.setLength(s.length() - 1);
+     return s.append("],printer=").append(printer).append(",sides=")
+       .append(sides).append(",toPage=").append(getToPage()).toString();
+   }
+ } // class JobAttributes
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/KeyEventDispatcher.java gcc-4.1.0/libjava/classpath/java/awt/KeyEventDispatcher.java
*** gcc-4.0.2/libjava/classpath/java/awt/KeyEventDispatcher.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/KeyEventDispatcher.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,82 ----
+ /* KeyEventDispatcher.java -- dispatches key events
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.KeyEvent;
+ 
+ /**
+  * An instance of this interface coordinates with a KeyboardFocusManager to
+  * target and dispatch all key events. This allows retargeting, consuming,
+  * changing, or otherwise manipulating the key event before sending it on to
+  * a target.
+  *
+  * <p>By default, the KeyboardFocusManager is the sink for all key events not
+  * dispatched by other dispatchers. Therefore, it is unnecessary for the user
+  * to register the focus manager as a dispatcher.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see KeyboardFocusManager#addKeyEventDispatcher(KeyEventDispatcher)
+  * @see KeyboardFocusManager#removeKeyEventDispatcher(KeyEventDispatcher)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface KeyEventDispatcher
+ {
+   /**
+    * Called by the KeyboardFocusManager to request that a key event be
+    * dispatched. The dispatcher is free to retarget the event, consume it,
+    * dispatch it, or make other changes. This is usually done to allow
+    * delivery of key events to objects other than the window in focus, such
+    * as for navigating non-focusable components. If this dispatcher chooses
+    * to dispatch the event itself, it should call <code>redispatchEvent</code>
+    * to avoid infinite recursion.
+    *
+    * <p>If the return value is false, the KeyEvent is passed to the next
+    * dispatcher in the chain, ending with the KeyboardFocusManager. If the
+    * return value is true, the event has been consumed (although it might
+    * have been ignored), and no further action will be taken on the event. Be
+    * sure to check whether the event was consumed before dispatching it
+    * further.
+    *
+    * @param e the key event
+    * @return true if the event has been consumed
+    * @see KeyboardFocusManager#redispatchEvent(Component, AWTEvent)
+    */
+   boolean dispatchKeyEvent(KeyEvent e);
+ } // interface KeyEventDispatcher
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/KeyEventPostProcessor.java gcc-4.1.0/libjava/classpath/java/awt/KeyEventPostProcessor.java
*** gcc-4.0.2/libjava/classpath/java/awt/KeyEventPostProcessor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/KeyEventPostProcessor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,81 ----
+ /* KeyEventPostProcessor.java -- performs actions after a key event dispatch
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.KeyEvent;
+ 
+ /**
+  * An instance of this interface coordinates with a KeyboardFocusManager to
+  * target and dispatch all key events that are otherwise unconsumed. This
+  * allows events which take place when nothing has focus to still operate,
+  * such as menu keyboard shortcuts.
+  *
+  * <p>By default, the KeyboardFocusManager is the sink for all key events not
+  * post-processed elsewhere. Therefore, it is unnecessary for the user
+  * to register the focus manager as a dispatcher.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see KeyboardFocusManager#addKeyEventPostProcessor(KeyEventPostProcessor)
+  * @see KeyboardFocusManager#removeKeyEventPostProcessor(KeyEventPostProcessor)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface KeyEventPostProcessor
+ {
+   /**
+    * Called by the KeyboardFocusManager to request that a key event be
+    * post-processed. Typically, the event has already been dispatched and
+    * handled, unless no object has focus. Thus, this allows global event
+    * handling for things like menu shortcuts. If this post-processor chooses
+    * to dispatch the event, it should call <code>redispatchEvent</code>
+    * to avoid infinite recursion.
+    *
+    * <p>If the return value is false, the KeyEvent is passed to the next
+    * dispatcher in the chain, ending with the KeyboardFocusManager. If the
+    * return value is true, the event has been consumed (although it might
+    * have been ignored), and no further action will be taken on the event. Be
+    * sure to check whether the event was consumed before dispatching it
+    * further.
+    *
+    * @param e the key event
+    * @return true if the event has been consumed
+    * @see KeyboardFocusManager#redispatchEvent(Component, AWTEvent)
+    */
+   boolean postProcessKeyEvent(KeyEvent e);
+ } // interface KeyEventPostProcessor
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/KeyboardFocusManager.java gcc-4.1.0/libjava/classpath/java/awt/KeyboardFocusManager.java
*** gcc-4.0.2/libjava/classpath/java/awt/KeyboardFocusManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/KeyboardFocusManager.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1439 ----
+ /* KeyboardFocusManager.java -- manage component focusing via the keyboard
+    Copyright (C) 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.applet.Applet;
+ import java.awt.FocusTraversalPolicy;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.WindowEvent;
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyChangeSupport;
+ import java.beans.PropertyVetoException;
+ import java.beans.VetoableChangeListener;
+ import java.beans.VetoableChangeSupport;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ /**
+  * The <code>KeyboardFocusManager</code> handles the focusing of
+  * windows for receiving keyboard events.  The manager handles
+  * the dispatch of all <code>FocusEvent</code>s and
+  * <code>KeyEvent</code>s, along with <code>WindowEvent</code>s
+  * relating to the focused window.  Users can use the manager
+  * to ascertain the current focus owner and fire events.
+  * <br />
+  * <br />
+  * The focus owner is the <code>Component</code> that receives
+  * key events.  The focus owner is either the currently focused
+  * window or a component within this window.
+  * <br />
+  * <br />
+  * The underlying native windowing system may denote the active
+  * window or its children with special decorations (e.g. a highlighted
+  * title bar).  The active window is always either a <code>Frame</code>
+  * or <code>Dialog</code>, and is either the currently focused
+  * window or its owner.
+  * <br />
+  * <br />
+  * Applets may be partitioned into different applet contexts, according
+  * to their code base.  In this case, each context has its own
+  * <code>KeyboardFocusManager</code>, as opposed to the global
+  * manager maintained by applets which share the same context.
+  * Each context is insulated from the others, and they don't interact.
+  * The resulting behaviour, as with context division, depends on the browser
+  * supporting the applets.  Regardless, there can only ever be
+  * one focused window, one active window and one focus owner
+  * per <code>ClassLoader</code>.
+  * <br />
+  * <br />
+  * To support this separation of focus managers, the manager instances
+  * and the internal state information is grouped by the
+  * <code>ThreadGroup</code> to which it pertains.  With respect to
+  * applets, each code base has its own <code>ThreadGroup</code>, so the
+  * isolation of each context is enforced within the manager.
+  * <br />
+  * <br />
+  * By default, the manager defines TAB and Ctrl+TAB as the
+  * forward focus traversal keys and Shift+TAB and Ctrl+Shift+TAB
+  * as the backward focus traversal keys.  No up or down cycle
+  * traversal keys are defined by default.  Traversal takes effect
+  * on the firing of a relevant <code>KEY_PRESSED</code> event.
+  * However, all other key events related to the use of the
+  * defined focus traversal key sequence are consumed and not
+  * dispatched.
+  * <br />
+  * <br />
+  * These default traversal keys come into effect on all windows
+  * for which no alternative set of keys is defined.  This also
+  * applies recursively to any child components of such a window,
+  * which define no traversal keys of their own.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Thomas Fitzsimmons (fitzsim@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.4
+  */
+ public abstract class KeyboardFocusManager
+   implements KeyEventDispatcher, KeyEventPostProcessor
+ {
+   /** Identifies {@link AWTKeyStroke}s that move the focus forward in
+       the focus cycle. */
+   public static final int FORWARD_TRAVERSAL_KEYS = 0;
+ 
+   /** Identifies {@link AWTKeyStroke}s that move the focus backward in
+       the focus cycle. */
+   public static final int BACKWARD_TRAVERSAL_KEYS = 1;
+ 
+   /** Identifies {@link AWTKeyStroke}s that move the focus up to the
+       parent focus cycle root. */
+   public static final int UP_CYCLE_TRAVERSAL_KEYS = 2;
+ 
+   /** Identifies {@link AWTKeyStroke}s that move the focus down to the
+       child focus cycle root. */
+   public static final int DOWN_CYCLE_TRAVERSAL_KEYS = 3;
+ 
+   /** The set of {@link AWTKeyStroke}s that cause focus to be moved to
+       the next focusable Component in the focus cycle. */
+   private static final Set DEFAULT_FORWARD_KEYS;
+ 
+   /** The set of {@link AWTKeyStroke}s that cause focus to be moved to
+       the previous focusable Component in the focus cycle. */
+   private static final Set DEFAULT_BACKWARD_KEYS;
+ 
+   /** Populate the DEFAULT_FORWARD_KEYS and DEFAULT_BACKWARD_KEYS
+       {@link java.util.Set}s. */
+   static
+   {
+     Set s = new HashSet();
+     s.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, 0));
+     s.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB,
+                                        KeyEvent.CTRL_DOWN_MASK));
+     DEFAULT_FORWARD_KEYS = Collections.unmodifiableSet(s);
+     s = new HashSet();
+     s.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB,
+                                        KeyEvent.SHIFT_DOWN_MASK));
+     s.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB,
+                                        KeyEvent.SHIFT_DOWN_MASK
+                                        | KeyEvent.CTRL_DOWN_MASK));
+     DEFAULT_BACKWARD_KEYS = Collections.unmodifiableSet(s);
+   }
+ 
+   /** The global object {@link java.util.Map}s. */
+ 
+   /** For security reasons, {@link java.applet.Applet}s in different
+       codebases must be insulated from one another.  Since {@link
+       KeyboardFocusManager}s have the ability to return {@link
+       Component}s from a given {@link java.applet.Applet}, each
+       codebase must have an independent {@link KeyboardFocusManager}.
+       Since each codebase has its own {@link ThreadGroup} in which its
+       {@link Applet}s run, it makes sense to partition {@link
+       KeyboardFocusManager}s according to {@link
+       java.lang.ThreadGroup}.  Thus, currentKeyboardFocusManagers is a
+       {@link java.util.Map} keyed on {@link java.lang.ThreadGroup}. */
+   private static Map currentKeyboardFocusManagers = new HashMap ();
+ 
+   /** {@link java.applet.Applet}s in one codebase must not be allowed
+       to access {@link Component}s in {@link java.applet.Applet}s in
+       other codebases.  To enforce this restriction, we key the
+       following {@link java.util.Map}s on {@link java.lang.ThreadGroup}s (which
+       are per-codebase).  For example, if {@link
+       java.lang.ThreadGroup} A calls {@link #setGlobalFocusOwner},
+       passing {@link Component} C, currentFocusOwners[A] is assigned
+       C, and all other currentFocusOwners values are nullified.  Then
+       if {@link java.lang.ThreadGroup} A subsequently calls {@link
+       #getGlobalFocusOwner}, it will return currentFocusOwners[A],
+       that is, {@link Component} C.  If another {@link
+       java.lang.ThreadGroup} K calls {@link #getGlobalFocusOwner}, it
+       will return currentFocusOwners[K], that is, null.
+ 
+       Since this is a static field, we ensure that there is only one
+       focused {@link Component} per class loader. */
+   private static Map currentFocusOwners = new HashMap ();
+ 
+   /** A {@link java.util.Map} keyed on {@link java.lang.ThreadGroup}s
+       that stores the {@link Component} that owns the permanent
+       keyboard focus. @see currentFocusOwners */
+   private static Map currentPermanentFocusOwners = new HashMap ();
+ 
+   /** A {@link java.util.Map} keyed on {@link java.lang.ThreadGroup}s
+       that stores the focused {@link Window}. @see
+       currentFocusOwners */
+   private static Map currentFocusedWindows = new HashMap ();
+ 
+   /** A {@link java.util.Map} keyed on {@link java.lang.ThreadGroup}s
+       that stores the active {@link Window}. @see
+       currentFocusOwners */
+   private static Map currentActiveWindows = new HashMap ();
+ 
+   /** A {@link java.util.Map} keyed on {@link java.lang.ThreadGroup}s
+       that stores the focus cycle root {@link Container}. @see
+       currentFocusOwners */
+   private static Map currentFocusCycleRoots = new HashMap ();
+ 
+   /** The default {@link FocusTraversalPolicy} that focus-managing
+       {@link Container}s will use to define their initial focus
+       traversal policy. */
+   private FocusTraversalPolicy defaultPolicy;
+ 
+   /** An array that stores the {@link #FORWARD_TRAVERSAL_KEYS}, {@link
+       #BACKWARD_TRAVERSAL_KEYS}, {@link #UP_CYCLE_TRAVERSAL_KEYS} and
+       {@link #DOWN_CYCLE_TRAVERSAL_KEYS} {@link AWTKeyStroke}s {@link
+       java.util.Set}s. */
+   private Set[] defaultFocusKeys = new Set[]
+   {
+     DEFAULT_FORWARD_KEYS, DEFAULT_BACKWARD_KEYS,
+     Collections.EMPTY_SET, Collections.EMPTY_SET
+   };
+ 
+   /**
+    * A utility class to support the handling of events relating to property changes.
+    */
+   private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport (this);
+ 
+   /**
+    * A utility class to support the handling of events relating to vetoable changes.
+    */
+   private final VetoableChangeSupport vetoableChangeSupport = new VetoableChangeSupport (this);
+ 
+   /** A list of {@link KeyEventDispatcher}s that process {@link
+       KeyEvent}s before they are processed the default keyboard focus
+       manager. */
+   private final ArrayList keyEventDispatchers = new ArrayList();
+ 
+   /** A list of {@link KeyEventPostProcessor}s that process unconsumed
+       {@link KeyEvent}s. */
+   private final ArrayList keyEventPostProcessors = new ArrayList();
+ 
+   /**
+    * Construct a KeyboardFocusManager.
+    */
+   public KeyboardFocusManager ()
+   {
+   }
+ 
+   /**
+    * Retrieve the keyboard focus manager associated with the {@link
+    * java.lang.ThreadGroup} to which the calling thread belongs.
+    *
+    * @return the keyboard focus manager associated with the current
+    * thread group
+    */
+   public static KeyboardFocusManager getCurrentKeyboardFocusManager ()
+   {
+     ThreadGroup currentGroup = Thread.currentThread ().getThreadGroup ();
+ 
+     if (currentKeyboardFocusManagers.get (currentGroup) == null)
+       setCurrentKeyboardFocusManager (null);
+ 
+     return (KeyboardFocusManager) currentKeyboardFocusManagers.get (currentGroup);
+   }
+ 
+   /**
+    * Set the keyboard focus manager associated with the {@link
+    * java.lang.ThreadGroup} to which the calling thread belongs.
+    *
+    * @param m the keyboard focus manager for the current thread group
+    */
+   public static void setCurrentKeyboardFocusManager (KeyboardFocusManager m)
+   {
+     SecurityManager sm = System.getSecurityManager ();
+     if (sm != null)
+       sm.checkPermission (new AWTPermission ("replaceKeyboardFocusManager"));
+ 
+     ThreadGroup currentGroup = Thread.currentThread ().getThreadGroup ();
+     KeyboardFocusManager manager;
+ 
+     if (m == null)
+       manager = new DefaultKeyboardFocusManager();
+     else
+       manager = m;
+ 
+     currentKeyboardFocusManagers.put (currentGroup, manager);
+   }
+ 
+   /**
+    * Retrieve the {@link Component} that has the keyboard focus, or
+    * null if the focus owner was not set by a thread in the current
+    * {@link java.lang.ThreadGroup}.
+    *
+    * @return the keyboard focus owner or null
+    */
+   public Component getFocusOwner ()
+   {
+     Component owner = (Component) getObject (currentFocusOwners);
+     if (owner == null)
+       owner = (Component) getObject (currentPermanentFocusOwners);
+     return owner;
+   }
+ 
+   /**
+    * Retrieve the {@link Component} that has the keyboard focus,
+    * regardless of whether or not it was set by a thread in the
+    * current {@link java.lang.ThreadGroup}.  If there is no temporary
+    * focus owner in effect then this method will return the same value
+    * as {@link #getGlobalPermanentFocusOwner}.
+    *
+    * @return the keyboard focus owner
+    * @throws SecurityException if this is not the keyboard focus
+    * manager associated with the current {@link java.lang.ThreadGroup}
+    */
+   protected Component getGlobalFocusOwner ()
+   {
+     // Check if there is a temporary focus owner.
+     Component focusOwner = (Component) getGlobalObject (currentFocusOwners);
+ 
+     return (focusOwner == null) ? getGlobalPermanentFocusOwner () : focusOwner;
+   }
+ 
+   /**
+    * Set the {@link Component} that will be returned by {@link
+    * #getFocusOwner} (when it is called from the current {@link
+    * java.lang.ThreadGroup}) and {@link #getGlobalFocusOwner}.  This
+    * method does not actually transfer the keyboard focus.
+    *
+    * @param owner the Component to return from getFocusOwner and
+    * getGlobalFocusOwner
+    *
+    * @see Component#requestFocus()
+    * @see Component#requestFocusInWindow()
+    */
+   protected void setGlobalFocusOwner (Component owner)
+   {
+     if (owner == null || owner.focusable)
+       setGlobalObject (currentFocusOwners, owner, "focusOwner");
+   }
+ 
+   /**
+    * Clear the global focus owner and deliver a FOCUS_LOST event to
+    * the previously-focused {@link Component}.  Until another {@link
+    * Component} becomes the keyboard focus owner, key events will be
+    * discarded by top-level windows.
+    */
+   public void clearGlobalFocusOwner ()
+   {
+     synchronized (currentFocusOwners)
+       {
+         Component focusOwner = getGlobalFocusOwner ();
+         Component permanentFocusOwner = getGlobalPermanentFocusOwner ();
+ 
+         setGlobalFocusOwner (null);
+         setGlobalPermanentFocusOwner (null);
+ 
+         // Inform the old focus owner that it has lost permanent
+         // focus.
+         if (focusOwner != null)
+           {
+             // We can't cache the event queue, because of
+             // bootstrapping issues.  We need to set the default
+             // KeyboardFocusManager in EventQueue before the event
+             // queue is started.
+             EventQueue q = Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+             if (focusOwner != permanentFocusOwner)
+               q.postEvent (new FocusEvent (focusOwner, FocusEvent.FOCUS_LOST, true));
+             else
+               q.postEvent (new FocusEvent (focusOwner, FocusEvent.FOCUS_LOST, false));
+           }
+ 
+         if (focusOwner != permanentFocusOwner)
+           {
+             EventQueue q = Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+             q.postEvent (new FocusEvent (permanentFocusOwner, FocusEvent.FOCUS_LOST, false));
+           }
+       }
+   }
+ 
+   /**
+    * Retrieve the {@link Component} that has the permanent keyboard
+    * focus, or null if the focus owner was not set by a thread in the
+    * current {@link java.lang.ThreadGroup}.
+    *
+    * @return the keyboard focus owner or null
+    */
+   public Component getPermanentFocusOwner ()
+   {
+     return (Component) getObject (currentPermanentFocusOwners);
+   }
+ 
+   /**
+    * Retrieve the {@link Component} that has the permanent keyboard
+    * focus, regardless of whether or not it was set by a thread in the
+    * current {@link java.lang.ThreadGroup}.
+    *
+    * @return the keyboard focus owner
+    * @throws SecurityException if this is not the keyboard focus
+    * manager associated with the current {@link java.lang.ThreadGroup}
+    */
+   protected Component getGlobalPermanentFocusOwner ()
+   {
+     return (Component) getGlobalObject (currentPermanentFocusOwners);
+   }
+ 
+   /**
+    * Set the {@link Component} that will be returned by {@link
+    * #getPermanentFocusOwner} (when it is called from the current
+    * {@link java.lang.ThreadGroup}) and {@link
+    * #getGlobalPermanentFocusOwner}.  This method does not actually
+    * transfer the keyboard focus.
+    *
+    * @param focusOwner the Component to return from
+    * getPermanentFocusOwner and getGlobalPermanentFocusOwner
+    *
+    * @see Component#requestFocus()
+    * @see Component#requestFocusInWindow()
+    */
+   protected void setGlobalPermanentFocusOwner (Component focusOwner)
+   {
+     if (focusOwner == null || focusOwner.focusable)
+       setGlobalObject (currentPermanentFocusOwners, focusOwner,
+ 		       "permanentFocusOwner");
+   }
+ 
+   /**
+    * Retrieve the {@link Window} that is or contains the keyboard
+    * focus owner, or null if the focused window was not set by a
+    * thread in the current {@link java.lang.ThreadGroup}.
+    *
+    * @return the focused window or null
+    */
+   public Window getFocusedWindow ()
+   {
+     return (Window) getObject (currentFocusedWindows);
+   }
+ 
+   /**
+    * Retrieve the {@link Window} that is or contains the focus owner,
+    * regardless of whether or not the {@link Window} was set focused
+    * by a thread in the current {@link java.lang.ThreadGroup}.
+    *
+    * @return the focused window
+    * @throws SecurityException if this is not the keyboard focus
+    * manager associated with the current {@link java.lang.ThreadGroup}
+    */
+   protected Window getGlobalFocusedWindow ()
+   {
+     return (Window) getGlobalObject (currentFocusedWindows);
+   }
+ 
+   /**
+    * Set the {@link Window} that will be returned by {@link
+    * #getFocusedWindow} (when it is called from the current {@link
+    * java.lang.ThreadGroup}) and {@link #getGlobalFocusedWindow}.
+    * This method does not actually cause <code>window</code> to become
+    * the focused {@link Window}.
+    *
+    * @param window the Window to return from getFocusedWindow and
+    * getGlobalFocusedWindow
+    */
+   protected void setGlobalFocusedWindow (Window window)
+   {
+     if (window == null || window.focusable)
+       setGlobalObject (currentFocusedWindows, window, "focusedWindow");
+   }
+ 
+   /**
+    * Retrieve the active {@link Window}, or null if the active window
+    * was not set by a thread in the current {@link
+    * java.lang.ThreadGroup}.
+    *
+    * @return the active window or null
+    */
+   public Window getActiveWindow()
+   {
+     return (Window) getObject (currentActiveWindows);
+   }
+ 
+   /**
+    * Retrieve the active {@link Window}, regardless of whether or not
+    * the {@link Window} was made active by a thread in the current
+    * {@link java.lang.ThreadGroup}.
+    *
+    * @return the active window
+    * @throws SecurityException if this is not the keyboard focus
+    * manager associated with the current {@link java.lang.ThreadGroup}
+    */
+   protected Window getGlobalActiveWindow()
+   {
+     return (Window) getGlobalObject (currentActiveWindows);
+   }
+ 
+   /**
+    * Set the {@link Window} that will be returned by {@link
+    * #getActiveWindow} (when it is called from the current {@link
+    * java.lang.ThreadGroup}) and {@link #getGlobalActiveWindow}.  This
+    * method does not actually cause <code>window</code> to be made
+    * active.
+    *
+    * @param window the Window to return from getActiveWindow and
+    * getGlobalActiveWindow
+    */
+   protected void setGlobalActiveWindow(Window window)
+   {
+     setGlobalObject (currentActiveWindows, window, "activeWindow");
+   }
+ 
+   /**
+    * Retrieve the default {@link FocusTraversalPolicy}.
+    * Focus-managing {@link Container}s use the returned object to
+    * define their initial focus traversal policy.
+    *
+    * @return a non-null default FocusTraversalPolicy object
+    */
+   public FocusTraversalPolicy getDefaultFocusTraversalPolicy ()
+   {
+     if (defaultPolicy == null)
+       defaultPolicy = new DefaultFocusTraversalPolicy ();
+     return defaultPolicy;
+   }
+ 
+   /**
+    * Set the {@link FocusTraversalPolicy} returned by {@link
+    * #getDefaultFocusTraversalPolicy}.  Focus-managing {@link
+    * Container}s created after this call will use policy as their
+    * initial focus traversal policy.  Existing {@link Container}s'
+    * focus traversal policies will not be affected by calls to this
+    * method.
+    *
+    * @param policy the FocusTraversalPolicy that will be returned by
+    * subsequent calls to getDefaultFocusTraversalPolicy
+    * @throws IllegalArgumentException if policy is null
+    */
+   public void setDefaultFocusTraversalPolicy (FocusTraversalPolicy policy)
+   {
+     if (policy == null)
+       throw new IllegalArgumentException ();
+     firePropertyChange ("defaultFocusTraversalPolicy", defaultPolicy, policy);
+     defaultPolicy = policy;
+   }
+ 
+   /**
+    * Set the default {@link java.util.Set} of focus traversal keys for
+    * one of the focus traversal directions.
+    *
+    * @param id focus traversal direction identifier
+    * @param keystrokes set of AWTKeyStrokes
+    *
+    * @see #FORWARD_TRAVERSAL_KEYS
+    * @see #BACKWARD_TRAVERSAL_KEYS
+    * @see #UP_CYCLE_TRAVERSAL_KEYS
+    * @see #DOWN_CYCLE_TRAVERSAL_KEYS
+    */
+   public void setDefaultFocusTraversalKeys (int id, Set keystrokes)
+   {
+     if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS &&
+         id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS)
+       throw new IllegalArgumentException ();
+ 
+     if (keystrokes == null)
+       throw new IllegalArgumentException ();
+ 
+     Set sa;
+     Set sb;
+     Set sc;
+     String type;
+     switch (id)
+       {
+       case FORWARD_TRAVERSAL_KEYS:
+         sa = defaultFocusKeys[BACKWARD_TRAVERSAL_KEYS];
+         sb = defaultFocusKeys[UP_CYCLE_TRAVERSAL_KEYS];
+         sc = defaultFocusKeys[DOWN_CYCLE_TRAVERSAL_KEYS];
+         type = "forwardDefaultFocusTraversalKeys";
+         break;
+       case BACKWARD_TRAVERSAL_KEYS:
+         sa = defaultFocusKeys[FORWARD_TRAVERSAL_KEYS];
+         sb = defaultFocusKeys[UP_CYCLE_TRAVERSAL_KEYS];
+         sc = defaultFocusKeys[DOWN_CYCLE_TRAVERSAL_KEYS];
+         type = "backwardDefaultFocusTraversalKeys";
+         break;
+       case UP_CYCLE_TRAVERSAL_KEYS:
+         sa = defaultFocusKeys[FORWARD_TRAVERSAL_KEYS];
+         sb = defaultFocusKeys[BACKWARD_TRAVERSAL_KEYS];
+         sc = defaultFocusKeys[DOWN_CYCLE_TRAVERSAL_KEYS];
+         type = "upCycleDefaultFocusTraversalKeys";
+         break;
+       case DOWN_CYCLE_TRAVERSAL_KEYS:
+         sa = defaultFocusKeys[FORWARD_TRAVERSAL_KEYS];
+         sb = defaultFocusKeys[BACKWARD_TRAVERSAL_KEYS];
+         sc = defaultFocusKeys[UP_CYCLE_TRAVERSAL_KEYS];
+         type = "downCycleDefaultFocusTraversalKeys";
+         break;
+       default:
+         throw new IllegalArgumentException ();
+       }
+     int i = keystrokes.size ();
+     Iterator iter = keystrokes.iterator ();
+     while (--i >= 0)
+       {
+         Object o = iter.next ();
+         if (!(o instanceof AWTKeyStroke)
+             || sa.contains (o) || sb.contains (o) || sc.contains (o)
+             || ((AWTKeyStroke) o).keyCode == KeyEvent.VK_UNDEFINED)
+           throw new IllegalArgumentException ();
+       }
+     keystrokes = Collections.unmodifiableSet (new HashSet (keystrokes));
+     firePropertyChange (type, defaultFocusKeys[id], keystrokes);
+     defaultFocusKeys[id] = keystrokes;
+   }
+ 
+   /**
+    * Retrieve the default {@link java.util.Set} of focus traversal
+    * keys for one of the focus traversal directions.
+    *
+    * @param id focus traversal direction identifier
+    *
+    * @return the default set of AWTKeyStrokes
+    *
+    * @see #FORWARD_TRAVERSAL_KEYS
+    * @see #BACKWARD_TRAVERSAL_KEYS
+    * @see #UP_CYCLE_TRAVERSAL_KEYS
+    * @see #DOWN_CYCLE_TRAVERSAL_KEYS
+    */
+   public Set getDefaultFocusTraversalKeys (int id)
+   {
+     if (id < FORWARD_TRAVERSAL_KEYS || id > DOWN_CYCLE_TRAVERSAL_KEYS)
+       throw new IllegalArgumentException ();
+     return defaultFocusKeys[id];
+   }
+ 
+   /**
+    * Retrieve the current focus cycle root, or null if the focus owner
+    * was not set by a thread in the current {@link
+    * java.lang.ThreadGroup}.
+    *
+    * @return the current focus cycle root or null
+    */
+   public Container getCurrentFocusCycleRoot ()
+   {
+     return (Container) getObject (currentFocusCycleRoots);
+   }
+ 
+   /**
+    * Retrieve the current focus cycle root, regardless of whether or
+    * not it was made set by a thread in the current {@link
+    * java.lang.ThreadGroup}.
+    *
+    * @return the current focus cycle root
+    * @throws SecurityException if this is not the keyboard focus
+    * manager associated with the current {@link java.lang.ThreadGroup}
+    */
+   protected Container getGlobalCurrentFocusCycleRoot ()
+   {
+     return (Container) getGlobalObject (currentFocusCycleRoots);
+   }
+ 
+   /**
+    * Set the {@link Container} that will be returned by {@link
+    * #getCurrentFocusCycleRoot} (when it is called from the current
+    * {@link java.lang.ThreadGroup}) and {@link
+    * #getGlobalCurrentFocusCycleRoot}.  This method does not actually
+    * make <code>cycleRoot</code> the current focus cycle root.
+    * 
+    * @param cycleRoot the focus cycle root to return from
+    * getCurrentFocusCycleRoot and getGlobalCurrentFocusCycleRoot
+    */
+   public void setGlobalCurrentFocusCycleRoot (Container cycleRoot)
+   {
+     setGlobalObject (currentFocusCycleRoots, cycleRoot, "currentFocusCycleRoot");
+   }
+ 
+   /**
+    * Registers the supplied property change listener for receiving
+    * events caused by the following property changes:
+    *
+    * <ul>
+    * <li>the current focus owner ("focusOwner")</li>
+    * <li>the permanent focus owner ("permanentFocusOwner")</li>
+    * <li>the focused window ("focusedWindow")</li>
+    * <li>the active window ("activeWindow")</li>
+    * <li>the default focus traversal policy ("defaultFocusTraversalPolicy")</li>
+    * <li>the default set of forward traversal keys ("forwardDefaultFocusTraversalKeys")</li>
+    * <li>the default set of backward traversal keys ("backwardDefaultFocusTraversalKeys")</li>
+    * <li>the default set of up cycle traversal keys ("upCycleDefaultFocusTraversalKeys")</li>
+    * <li>the default set of down cycle traversal keys ("downCycleDefaultFocusTraversalKeys")</li>
+    * <li>the current focus cycle root ("currentFocusCycleRoot")</li>
+    * </ul>
+    *
+    * If the supplied listener is null, nothing occurs.
+    *
+    * @param l the new listener to register.
+    * @see KeyboardFocusManager#addPropertyChangeListener(String, java.beans.PropertyChangeListener)
+    */
+   public void addPropertyChangeListener(PropertyChangeListener l)
+   {
+     if (l != null)
+       propertyChangeSupport.addPropertyChangeListener(l);
+   }
+ 
+   /**
+    * Removes the supplied property change listener from the list
+    * of registered listeners.  If the supplied listener is null,
+    * nothing occurs.
+    *
+    * @param l the listener to remove.
+    */
+   public void removePropertyChangeListener(PropertyChangeListener l)
+   {
+     if (l != null)
+       propertyChangeSupport.removePropertyChangeListener(l);
+   }
+ 
+   /**
+    * Returns the currently registered property change listeners
+    * in array form.  The returned array is empty if no listeners are
+    * currently registered.
+    *
+    * @return an array of registered property change listeners.
+    */
+   public PropertyChangeListener[] getPropertyChangeListeners()
+   {
+     return propertyChangeSupport.getPropertyChangeListeners();
+   }
+ 
+   /**
+    * Registers a property change listener for receiving events relating
+    * to a change to a specified property.  The supplied property name can be
+    * either user-defined or one from the following list of properties
+    * relevant to this class:
+    *
+    * <ul>
+    * <li>the current focus owner ("focusOwner")</li>
+    * <li>the permanent focus owner ("permanentFocusOwner")</li>
+    * <li>the focused window ("focusedWindow")</li>
+    * <li>the active window ("activeWindow")</li>
+    * <li>the default focus traversal policy ("defaultFocusTraversalPolicy")</li>
+    * <li>the default set of forward traversal keys ("forwardDefaultFocusTraversalKeys")</li>
+    * <li>the default set of backward traversal keys ("backwardDefaultFocusTraversalKeys")</li>
+    * <li>the default set of up cycle traversal keys ("upCycleDefaultFocusTraversalKeys")</li>
+    * <li>the default set of down cycle traversal keys ("downCycleDefaultFocusTraversalKeys")</li>
+    * <li>the current focus cycle root ("currentFocusCycleRoot")</li>
+    * </ul>
+    *
+    * Nothing occurs if a null listener is supplied.  null is regarded as a valid property name.
+    *
+    * @param name the name of the property to handle change events for.
+    * @param l the listener to register for changes to the specified property. 
+    * @see KeyboardFocusManager#addPropertyChangeListener(java.beans.PropertyChangeListener)
+    */
+   public void addPropertyChangeListener(String name, PropertyChangeListener l)
+   {
+     if (l != null)
+       propertyChangeSupport.addPropertyChangeListener(name, l);
+   }
+ 
+   /**
+    * Removes the supplied property change listener registered for the
+    * specified property from the list of registered listeners.  If the
+    * supplied listener is null, nothing occurs.
+    *
+    * @param name the name of the property the listener is
+    *        monitoring changes to.
+    * @param l the listener to remove.
+    */
+   public void removePropertyChangeListener(String name,
+                                            PropertyChangeListener l)
+   {
+     if (l != null)
+       propertyChangeSupport.removePropertyChangeListener(name, l);
+   }
+ 
+   /**
+    * Returns the currently registered property change listeners
+    * in array form, which listen for changes to the supplied property.
+    * The returned array is empty, if no listeners are currently registered
+    * for events pertaining to the supplied property.
+    *
+    * @param name The property the returned listeners monitor for changes.
+    * @return an array of registered property change listeners which
+    *         listen for changes to the supplied property.
+    */
+   public PropertyChangeListener[] getPropertyChangeListeners(String name)
+   {
+     return propertyChangeSupport.getPropertyChangeListeners(name);
+   }
+ 
+   /**
+    * Fires a property change event as a response to a change to
+    * to the specified property.  The event is only fired if a
+    * change has actually occurred (i.e. o and n are different).
+    *
+    * @param name The name of the property to which a change occurred.
+    * @param o The old value of the property.
+    * @param n The new value of the property.
+    */
+   protected void firePropertyChange(String name, Object o, Object n)
+   {
+     propertyChangeSupport.firePropertyChange(name, o, n);
+   }
+ 
+   /**
+    * Registers a vetoable property change listener for receiving events
+    * relating to the following properties:
+    *
+    * <ul>
+    * <li>the current focus owner ("focusOwner")</li>
+    * <li>the permanent focus owner ("permanentFocusOwner")</li>
+    * <li>the focused window ("focusedWindow")</li>
+    * <li>the active window ("activeWindow")</li>
+    * </ul>
+    *
+    * Nothing occurs if a null listener is supplied.
+    *
+    * @param l the listener to register. 
+    * @see KeyboardFocusManager#addVetoableChangeListener(String, java.beans.VetoableChangeListener)
+    */
+   public void addVetoableChangeListener(VetoableChangeListener l)
+   {
+     if (l != null)
+       vetoableChangeSupport.addVetoableChangeListener(l);
+   }
+ 
+   /**
+    * Removes the supplied vetoable property change listener from
+    * the list of registered listeners.  If the supplied listener
+    * is null, nothing occurs.
+    *
+    * @param l the listener to remove.
+    */
+   public void removeVetoableChangeListener(VetoableChangeListener l)
+   {
+     if (l != null)
+       vetoableChangeSupport.removeVetoableChangeListener(l);
+   }
+ 
+   /**
+    * Returns the currently registered vetoable property change listeners
+    * in array form.  The returned array is empty if no listeners are
+    * currently registered.
+    *
+    * @return an array of registered vetoable property change listeners.
+    * @since 1.4
+    */
+   public VetoableChangeListener[] getVetoableChangeListeners()
+   {
+     return vetoableChangeSupport.getVetoableChangeListeners();
+   }
+ 
+   /**
+    * Registers a vetoable property change listener for receiving events relating
+    * to a vetoable change to a specified property.  The supplied property name can be
+    * either user-defined or one from the following list of properties
+    * relevant to this class:
+    *
+    * <ul>
+    * <li>the current focus owner ("focusOwner")</li>
+    * <li>the permanent focus owner ("permanentFocusOwner")</li>
+    * <li>the focused window ("focusedWindow")</li>
+    * <li>the active window ("activeWindow")</li>
+    * </ul>
+    *
+    * Nothing occurs if a null listener is supplied.  null is regarded as a valid property name.
+    *
+    * @param name the name of the property to handle change events for.
+    * @param l the listener to register for changes to the specified property. 
+    * @see KeyboardFocusManager#addVetoableChangeListener(java.beans.VetoableChangeListener)
+    */
+   public void addVetoableChangeListener(String name, VetoableChangeListener l)
+   {
+     if (l != null)
+       vetoableChangeSupport.addVetoableChangeListener(name, l);
+   }
+ 
+   /**
+    * Removes the supplied vetoable property change listener registered
+    * for the specified property from the list of registered listeners.
+    * If the supplied listener is null, nothing occurs.
+    *
+    * @param name the name of the vetoable property the listener is
+    *        monitoring changes to.
+    * @param l the listener to remove.
+    */
+   public void removeVetoableChangeListener(String name,
+                                            VetoableChangeListener l)
+   {
+     if (l != null)
+       vetoableChangeSupport.removeVetoableChangeListener(name, l);
+   }
+ 
+   /**
+    * Returns the currently registered vetoable property change listeners
+    * in array form, which listen for changes to the supplied property.
+    * The returned array is empty, if no listeners are currently registered
+    * for events pertaining to the supplied property.
+    *
+    * @param name The property the returned listeners monitor for changes.
+    * @return an array of registered property change listeners which
+    *         listen for changes to the supplied property.
+    * @since 1.4
+    */
+   public VetoableChangeListener[] getVetoableChangeListeners(String name)
+   {
+     return vetoableChangeSupport.getVetoableChangeListeners(name);
+   }
+ 
+   /**
+    * Fires a property change event as a response to a vetoable change to
+    * to the specified property.  The event is only fired if a
+    * change has actually occurred (i.e. o and n are different).
+    * In the event that the property change is vetoed, the following
+    * occurs:
+    *
+    * <ol>
+    * <li>
+    * This method throws a <code>PropertyVetoException</code> to
+    * the proposed change.
+    * </li>
+    * <li>
+    * A new event is fired to reverse the previous change.
+    * </li>
+    * <li>
+    * This method again throws a <code>PropertyVetoException</code>
+    * in response to the reversion.
+    * </li>
+    * </ol>
+    *
+    * @param name The name of the property to which a change occurred.
+    * @param o The old value of the property.
+    * @param n The new value of the property.
+    * @throws PropertyVetoException if one of the listeners vetos
+    *         the change by throwing this exception.
+    */
+   protected void fireVetoableChange(String name, Object o, Object n)
+     throws PropertyVetoException
+   {
+     vetoableChangeSupport.fireVetoableChange(name, o, n);
+   }
+ 
+   /**
+    * Adds a key event dispatcher to the list of registered dispatchers.
+    * When a key event is fired, each dispatcher's <code>dispatchKeyEvent</code>
+    * method is called in the order that they were added, prior to the manager
+    * dispatching the event itself.  Notifications halt when one of the
+    * dispatchers returns true.
+    * <br />
+    * <br />
+    * The same dispatcher can exist multiple times within the list
+    * of registered dispatchers, and there is no limit on the length
+    * of this list.  A null dispatcher is simply ignored.
+    *
+    * @param dispatcher The dispatcher to register.
+    */
+   public void addKeyEventDispatcher(KeyEventDispatcher dispatcher)
+   {
+     if (dispatcher != null)
+       keyEventDispatchers.add(dispatcher);
+   }
+ 
+   /**
+    * Removes the specified key event dispatcher from the list of
+    * registered dispatchers.  The manager always dispatches events,
+    * regardless of its existence within the list.  The manager
+    * can be added and removed from the list, as with any other
+    * dispatcher, but this does not affect its ability to dispatch
+    * key events.  Non-existent and null dispatchers are simply ignored
+    * by this method.
+    *
+    * @param dispatcher The dispatcher to remove.
+    */
+   public void removeKeyEventDispatcher(KeyEventDispatcher dispatcher)
+   {
+     keyEventDispatchers.remove(dispatcher);
+   }
+ 
+   /**
+    * Returns the currently registered key event dispatchers in <code>List</code>
+    * form.  At present, this only includes dispatchers explicitly registered
+    * via the <code>addKeyEventDispatcher()</code> method, but this behaviour
+    * is subject to change and should not be depended on.  The manager itself
+    * may be a member of the list, but only if explicitly registered.  If no
+    * dispatchers have been registered, the list will be empty.
+    *
+    * @return A list of explicitly registered key event dispatchers.
+    * @see KeyboardFocusManager#addKeyEventDispatcher(java.awt.KeyEventDispatcher)
+    */
+   protected List getKeyEventDispatchers ()
+   {
+     return (List) keyEventDispatchers.clone ();
+   }
+ 
+   /**
+    * Adds a key event post processor to the list of registered post processors.
+    * Post processors work in the same way as key event dispatchers, except
+    * that they are invoked after the manager has dispatched the key event,
+    * and not prior to this.  Each post processor's <code>postProcessKeyEvent</code>
+    * method is called to see if any post processing needs to be performed.  THe
+    * processors are called in the order in which they were added to the list,
+    * and notifications continue until one returns true.  As with key event
+    * dispatchers, the manager is implicitly called following this process,
+    * regardless of whether or not it is present within the list.
+    * <br />
+    * <br />
+    * The same post processor can exist multiple times within the list
+    * of registered post processors, and there is no limit on the length
+    * of this list.  A null post processor is simply ignored.
+    *
+    * @param postProcessor the post processor to register.
+    * @see KeyboardFocusManager#addKeyEventDispatcher(java.awt.KeyEventDispatcher)
+    */
+   public void addKeyEventPostProcessor (KeyEventPostProcessor postProcessor)
+   {
+     if (postProcessor != null)
+       keyEventPostProcessors.add (postProcessor);
+   }
+ 
+   /**
+    * Removes the specified key event post processor from the list of
+    * registered post processors.  The manager always post processes events,
+    * regardless of its existence within the list.  The manager
+    * can be added and removed from the list, as with any other
+    * post processor, but this does not affect its ability to post process
+    * key events.  Non-existent and null post processors are simply ignored
+    * by this method.
+    *
+    * @param postProcessor the post processor to remove.
+    */
+   public void removeKeyEventPostProcessor (KeyEventPostProcessor postProcessor)
+   {
+     keyEventPostProcessors.remove (postProcessor);
+   }
+ 
+   /**
+    * Returns the currently registered key event post processors in <code>List</code>
+    * form.  At present, this only includes post processors explicitly registered
+    * via the <code>addKeyEventPostProcessor()</code> method, but this behaviour
+    * is subject to change and should not be depended on.  The manager itself
+    * may be a member of the list, but only if explicitly registered.  If no
+    * post processors have been registered, the list will be empty.
+    *
+    * @return A list of explicitly registered key event post processors.
+    * @see KeyboardFocusManager#addKeyEventPostProcessor(java.awt.KeyEventPostProcessor)
+    */
+   protected List getKeyEventPostProcessors ()
+   {
+     return (List) keyEventPostProcessors.clone ();
+   }
+ 
+   /**
+    * The AWT event dispatcher uses this method to request that the manager
+    * handle a particular event.  If the manager fails or refuses to
+    * dispatch the supplied event (this method returns false), the
+    * AWT event dispatcher will try to dispatch the event itself.
+    * <br />
+    * <br />
+    * The manager is expected to handle all <code>FocusEvent</code>s
+    * and <code>KeyEvent</code>s, and <code>WindowEvent</code>s
+    * relating to the focus.  Dispatch is done with regard to the
+    * the focus owner and the currently focused and active windows.
+    * In handling the event, the source of the event may be overridden.
+    * <br />
+    * <br />
+    * The actual dispatching is performed by calling
+    * <code>redispatchEvent()</code>.  This avoids the infinite recursion
+    * of dispatch requests which may occur if this method is called on
+    * the target component.  
+    *
+    * @param e the event to dispatch.
+    * @return true if the event was dispatched.
+    * @see KeyboardFocusManager#redispatchEvent(java.awt.Component, java.awt.AWTEvent)
+    * @see KeyEvent
+    * @see FocusEvent
+    * @see WindowEvent
+    */
+   public abstract boolean dispatchEvent (AWTEvent e);
+ 
+   /**
+    * Handles redispatching of an event so that recursion of
+    * dispatch requests does not occur.  Event dispatch methods
+    * within this manager (<code>dispatchEvent()</code>) and
+    * the key event dispatchers should use this method to handle
+    * dispatching rather than the dispatch method of the target
+    * component.  
+    * <br />
+    * <br />
+    * <strong>
+    * This method is not intended for general consumption, and is
+    * only for the use of the aforementioned classes.
+    * </strong>
+    * 
+    * @param target the target component to which the event is
+    *        dispatched.
+    * @param e the event to dispatch.
+    */
+   public final void redispatchEvent (Component target, AWTEvent e)
+   {
+     synchronized (e)
+       {
+         e.setSource (target);
+         target.dispatchEvent (e);
+       }
+   }
+ 
+   /**
+    * Attempts to dispatch key events for which no key event dispatcher
+    * has so far succeeded.  This method is usually called by
+    * <code>dispatchEvent()</code> following the sending of the key
+    * event to any registered key event dispatchers.  If the key
+    * event reaches this stage, none of the dispatchers returned
+    * true.  This is, of course, always the case if there are no
+    * registered dispatchers.
+    * <br />
+    * <br />
+    * If this method also fails to handle the key event, then
+    * false is returned to the caller.  In the case of
+    * <code>dispatchEvent()</code>, the calling method may try
+    * to handle the event itself or simply forward on the
+    * false result to its caller.  When the event is dispatched
+    * by this method, a true result is propogated through the
+    * calling methods.
+    *
+    * @param e the key event to dispatch.
+    * @return true if the event was dispatched successfully.
+    */
+   public abstract boolean dispatchKeyEvent (KeyEvent e);
+ 
+   /**
+    * Handles the post processing of key events.  By default,
+    * this method will map unhandled key events to appropriate
+    * <code>MenuShortcut</code>s.  The event is consumed
+    * in the process and the shortcut is activated.  This
+    * method is usually called by <code>dispatchKeyEvent</code>.
+    *
+    * @param e the key event to post process.
+    * @return true by default, as the event was handled.
+    */
+   public abstract boolean postProcessKeyEvent (KeyEvent e);
+ 
+   /**
+    * Handles focus traversal operations for key events which
+    * represent focus traversal keys in relation to the supplied
+    * component.  The supplied component is assumed to have the
+    * focus, whether it does so or not, and the operation is
+    * carried out as appropriate, with this in mind.
+    *
+    * @param focused the component on which to perform focus traversal,
+    *        on the assumption that this component has the focus.
+    * @param e the possible focus traversal key event.
+    */
+   public abstract void processKeyEvent (Component focused, KeyEvent e);
+ 
+   /**
+    * Delays all key events following the specified timestamp until the
+    * supplied component has focus.  The AWT calls this method when it is
+    * determined that a focus change may occur within the native windowing
+    * system.  Any key events which occur following the time specified by
+    * after are delayed until a <code>FOCUS_GAINED</code> event is received
+    * for the untilFocused component.  The manager is responsible for ensuring
+    * this takes place.
+    *
+    * @param after the timestamp beyond which all key events are delayed until
+    *        the supplied component gains focus.
+    * @param untilFocused the component to wait on gaining focus.
+    */
+   protected abstract void enqueueKeyEvents (long after, Component untilFocused);
+ 
+   /**
+    * Removes the key event block specified by the supplied timestamp and component.
+    * All delayed key events are released for normal dispatching following its
+    * removal and subsequent key events that would have been blocked are now
+    * immediately dispatched.  If the specified timestamp is below 0, then
+    * the request with the oldest timestamp is removed.
+    *
+    * @param after the timestamp of the key event block to be removed, or a
+    *        value smaller than 0 if the oldest is to be removed.
+    * @param untilFocused the component of the key event block to be removed.
+    */
+   protected abstract void dequeueKeyEvents (long after, Component untilFocused);
+ 
+   /**
+    * Discards all key event blocks relating to focus requirements for
+    * the supplied component, regardless of timestamp.
+    *
+    * @param comp the component of the key event block(s) to be removed.
+    */
+   protected abstract void discardKeyEvents (Component comp);
+ 
+   /**
+    * Moves the current focus to the next component following
+    * comp, based on the current focus traversal policy.  By
+    * default, only visible, displayable, accepted components
+    * can receive focus.  <code>Canvas</code>es, <code>Panel</code>s,
+    * <code>Label</code>s, <code>ScrollPane</code>s, <code>Scrollbar</code>s,
+    * <code>Window</code>s and lightweight components are judged
+    * to be unacceptable by default.  See the
+    * <code>DefaultFocusTraversalPolicy</code> for more details.
+    *
+    * @param comp the component prior to the one which will
+    *        become the focus, following execution of this method.
+    * @see DefaultFocusTraversalPolicy
+    */
+   public abstract void focusNextComponent(Component comp);
+ 
+   /**
+    * Moves the current focus to the previous component, prior to
+    * comp, based on the current focus traversal policy.  By
+    * default, only visible, displayable, accepted components
+    * can receive focus.  <code>Canvas</code>es, <code>Panel</code>s,
+    * <code>Label</code>s, <code>ScrollPane</code>s, <code>Scrollbar</code>s,
+    * <code>Window</code>s and lightweight components are judged
+    * to be unacceptable by default.  See the
+    * <code>DefaultFocusTraversalPolicy</code> for more details.
+    *
+    * @param comp the component following the one which will
+    *        become the focus, following execution of this method.
+    * @see DefaultFocusTraversalPolicy
+    */
+   public abstract void focusPreviousComponent(Component comp);
+ 
+   /**
+    * Moves the current focus upwards by one focus cycle.
+    * Both the current focus owner and current focus cycle root
+    * become the focus cycle root of the supplied component.
+    * However, in the case of a <code>Window</code>, the default
+    * focus component becomes the focus owner and the focus cycle
+    * root is not changed.
+    * 
+    * @param comp the component used as part of the focus traversal.
+    */ 
+   public abstract void upFocusCycle(Component comp);
+ 
+   /**
+    * Moves the current focus downwards by one focus cycle.
+    * If the supplied container is a focus cycle root, then this
+    * becomes the current focus cycle root and the focus goes
+    * to the default component of the specified container.
+    * Nothing happens for non-focus cycle root containers. 
+    * 
+    * @param cont the container used as part of the focus traversal.
+    */ 
+   public abstract void downFocusCycle(Container cont);
+ 
+   /**
+    * Moves the current focus to the next component, based on the
+    * current focus traversal policy.  By default, only visible,
+    * displayable, accepted component can receive focus.
+    * <code>Canvas</code>es, <code>Panel</code>s,
+    * <code>Label</code>s, <code>ScrollPane</code>s, <code>Scrollbar</code>s,
+    * <code>Window</code>s and lightweight components are judged
+    * to be unacceptable by default.  See the
+    * <code>DefaultFocusTraversalPolicy</code> for more details.
+    *
+    * @see DefaultFocusTraversalPolicy
+    */
+   public final void focusNextComponent()
+   {
+     focusNextComponent (null);
+   }
+ 
+   /**
+    * Moves the current focus to the previous component, based on the
+    * current focus traversal policy.  By default, only visible,
+    * displayable, accepted component can receive focus.
+    * <code>Canvas</code>es, <code>Panel</code>s,
+    * <code>Label</code>s, <code>ScrollPane</code>s, <code>Scrollbar</code>s,
+    * <code>Window</code>s and lightweight components are judged
+    * to be unacceptable by default.  See the
+    * <code>DefaultFocusTraversalPolicy</code> for more details.
+    *
+    * @see DefaultFocusTraversalPolicy
+    */
+   public final void focusPreviousComponent()
+   {
+     focusPreviousComponent (null);
+   }
+ 
+   /**
+    * Moves the current focus upwards by one focus cycle,
+    * so that the new focus owner is the focus cycle root
+    * of the current owner.  The current focus cycle root then
+    * becomes the focus cycle root of the new focus owner.
+    * However, in the case of the focus cycle root of the
+    * current focus owner being a <code>Window</code>, the default
+    * component of this window becomes the focus owner and the
+    * focus cycle root is not changed.
+    */
+   public final void upFocusCycle()
+   {
+     upFocusCycle (null);
+   }
+ 
+   /**
+    * Moves the current focus downwards by one focus cycle,
+    * iff the current focus cycle root is a <code>Container</code>.
+    * Usually, the new focus owner is set to the default component
+    * of the container and the current focus cycle root is set
+    * to the current focus owner.  Nothing occurs if the current
+    * focus cycle root is not a container.
+    */
+   public final void downFocusCycle()
+   {
+     Component focusOwner = getGlobalFocusOwner ();
+     if (focusOwner instanceof Container
+         && ((Container) focusOwner).isFocusCycleRoot ())
+       downFocusCycle ((Container) focusOwner);
+   }
+ 
+   /**
+    * Retrieve an object from one of the global object {@link
+    * java.util.Map}s, if the object was set by the a thread in the
+    * current {@link java.lang.ThreadGroup}.  Otherwise, return null.
+    *
+    * @param globalMap one of the global object Maps
+    *
+    * @return a global object set by the current ThreadGroup, or null
+    *
+    * @see #getFocusOwner()
+    * @see #getPermanentFocusOwner()
+    * @see #getFocusedWindow()
+    * @see #getActiveWindow()
+    * @see #getCurrentFocusCycleRoot()
+    */
+   private Object getObject (Map globalMap)
+   {
+     ThreadGroup currentGroup = Thread.currentThread ().getThreadGroup ();
+     return globalMap.get (currentGroup);
+   }
+ 
+   /**
+    * Retrieve an object from one of the global object {@link
+    * java.util.Map}s, regardless of whether or not the object was set
+    * by a thread in the current {@link java.lang.ThreadGroup}.
+    *
+    * @param globalMap one of the global object Maps
+    *
+    * @return a global object set by the current ThreadGroup, or null
+    *
+    * @throws SecurityException if this is not the keyboard focus
+    * manager associated with the current {@link java.lang.ThreadGroup}
+    *
+    * @see #getGlobalFocusOwner()
+    * @see #getGlobalPermanentFocusOwner()
+    * @see #getGlobalFocusedWindow()
+    * @see #getGlobalActiveWindow()
+    * @see #getGlobalCurrentFocusCycleRoot()
+    */
+   private Object getGlobalObject (Map globalMap)
+   {
+     ThreadGroup currentGroup = Thread.currentThread ().getThreadGroup ();
+     KeyboardFocusManager managerForCallingThread
+       = (KeyboardFocusManager) currentKeyboardFocusManagers.get (currentGroup);
+ 
+     if (this != managerForCallingThread)
+       throw new SecurityException ("Attempted to retrieve an object from a "
+                                    + "keyboard focus manager that isn't "
+                                    + "associated with the current thread group.");
+ 
+     synchronized (globalMap)
+       {
+         Collection globalObjects = globalMap.values ();
+         Iterator i = globalObjects.iterator ();
+         Component globalObject;
+ 
+         while (i.hasNext ())
+           {
+             globalObject = (Component) i.next ();
+             if (globalObject != null)
+               return globalObject;
+           }
+       }
+ 
+     // No Object was found.
+     return null;
+   }
+ 
+   /**
+    * Set an object in one of the global object {@link java.util.Map}s,
+    * that will be returned by subsequent calls to getGlobalObject on
+    * the same {@link java.util.Map}.
+    *
+    * @param globalMap one of the global object Maps
+    * @param newObject the object to set
+    * @param property the property that will change
+    *
+    * @see #setGlobalFocusOwner(Component)
+    * @see #setGlobalPermanentFocusOwner(Component)
+    * @see #setGlobalFocusedWindow(Window)
+    * @see #setGlobalActiveWindow(Window)
+    * @see #setGlobalCurrentFocusCycleRoot(Container)
+    */
+   private void setGlobalObject (Map globalMap,
+                                 Object newObject,
+                                 String property)
+   {
+     synchronized (globalMap)
+       {
+         // Save old object.
+         Object oldObject = getGlobalObject (globalMap);
+ 
+         // Nullify old object.
+         Collection threadGroups = globalMap.keySet ();
+         Iterator i = threadGroups.iterator ();
+         while (i.hasNext ())
+           {
+             ThreadGroup oldThreadGroup = (ThreadGroup) i.next ();
+             if (globalMap.get (oldThreadGroup) != null)
+               {
+                 globalMap.put (oldThreadGroup, null);
+                 // There should only be one object set at a time, so
+                 // we can short circuit.
+                 break;
+               }
+           }
+ 
+         ThreadGroup currentGroup = Thread.currentThread ().getThreadGroup ();
+         firePropertyChange (property, oldObject, newObject);
+         try
+           {
+             fireVetoableChange (property, oldObject, newObject);
+             // Set new object.
+             globalMap.put (currentGroup, newObject);
+           }
+         catch (PropertyVetoException e)
+           {
+           }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Label.java gcc-4.1.0/libjava/classpath/java/awt/Label.java
*** gcc-4.0.2/libjava/classpath/java/awt/Label.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Label.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,319 ----
+ /* Label.java -- Java label widget
+    Copyright (C) 1999, 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.peer.LabelPeer;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ 
+ /**
+   * This component is used for displaying simple text strings that cannot
+   * be edited by the user.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   * @author Andrew John Hughes  (gnu_andrew@member.fsf.org)
+   */
+ public class Label extends Component implements Accessible
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ /**
+   * Alignment constant aligning the text to the left of its window.
+   */
+ public static final int LEFT = 0;
+ 
+ /**
+   * Alignment constant aligning the text in the center of its window.
+   */
+ public static final int CENTER = 1;
+ 
+ /**
+   * Alignment constant aligning the text to the right of its window.
+   */
+ public static final int RIGHT = 2;
+ 
+ // Serialization version constant:
+ private static final long serialVersionUID = 3094126758329070636L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial Indicates the alignment of the text within this label's window.
+   * This is one of the constants in this class.  The default value is 
+   * <code>LEFT</code>.
+   */
+ private int alignment;
+ 
+ /**
+   * @serial The text displayed in the label
+   */
+ private String text;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>Label</code> with no text.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ Label()
+ {
+   this("", LEFT);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Label</code> with the specified
+   * text that is aligned to the left.
+   *
+   * @param text The text of the label.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ Label(String text)
+ {
+   this(text, LEFT);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Label</code> with the specified
+   * text and alignment.
+   *
+   * @param text The text of the label.
+   * @param alignment The desired alignment for the text in this label,
+   * which must be one of <code>LEFT</code>, <code>CENTER</code>, or
+   * <code>RIGHT</code>.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ Label(String text, int alignment)
+ {
+   setAlignment (alignment);
+   setText (text);
+ 
+   if (GraphicsEnvironment.isHeadless())
+     throw new HeadlessException ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * Returns the constant indicating the alignment of the text in this
+   * label.  The value returned will be one of the alignment constants
+   * from this class.
+   *
+   * @return The alignment of the text in the label.
+   */
+ public int
+ getAlignment()
+ {
+   return(alignment);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the text alignment of this label to the specified value.
+   *
+   * @param alignment The desired alignment for the text in this label,
+   * which must be one of <code>LEFT</code>, <code>CENTER</code>, or
+   * <code>RIGHT</code>.
+   */
+ public synchronized void
+ setAlignment(int alignment)
+ {
+   if (alignment != CENTER && alignment != LEFT && alignment != RIGHT)
+     throw new IllegalArgumentException ("invalid alignment: " + alignment);
+   this.alignment = alignment;
+   if (peer != null)
+     {
+       LabelPeer lp = (LabelPeer) peer;
+       lp.setAlignment (alignment);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the text displayed in this label.
+   *
+   * @return The text for this label.
+   */
+ public String
+ getText()
+ {
+   return(text);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the text in this label to the specified value.
+   *
+   * @param text The new text for this label.
+   */
+ public synchronized void
+ setText(String text)
+ {
+   if ((this.text == null && text != null)
+       || (this.text != null && ! this.text.equals(text)))
+     {
+       this.text = text;
+ 
+       if (peer != null)
+ 	{
+ 	  LabelPeer lp = (LabelPeer) peer;
+ 	  lp.setText (text);
+ 	}
+       invalidate();
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Notifies this label that it has been added to a container, causing
+   * the peer to be created.  This method is called internally by the AWT
+   * system.
+   */
+ public void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit ().createLabel (this);
+   super.addNotify ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a parameter string useful for debugging.
+   *
+   * @return A debugging string.
+   */
+ protected String
+ paramString()
+ {
+   return ("text=" + getText() + ",alignment=" +
+ 	  getAlignment() + "," + super.paramString());
+ }
+ 
+ /**
+  * This class provides accessibility support for the label.
+  */
+ protected class AccessibleAWTLabel
+   extends AccessibleAWTComponent
+ {
+   /**
+    * For compatability with Sun's JDK 1.4.2 rev. 5
+    */
+   private static final long serialVersionUID = -3568967560160480438L;
+ 
+   /**
+    * Constructor for the accessible label.
+    */
+   public AccessibleAWTLabel()
+   {
+   }
+ 
+   /**
+    * Returns the accessible name for the label.  This is
+    * the text used in the label.
+    *
+    * @return a <code>String</code> containing the accessible
+    *         name for this label.
+    */
+   public String getAccessibleName()
+   {
+     return getText();
+   }
+ 
+   /**
+    * Returns the accessible role for the label.
+    *
+    * @return an instance of <code>AccessibleRole</code>, describing
+    *         the role of the label.
+    */
+   public AccessibleRole getAccessibleRole()
+   {
+     return AccessibleRole.LABEL;
+   }
+ 
+ }
+ 
+ /**
+  * Gets the AccessibleContext associated with this <code>Label</code>.
+  * The context is created, if necessary.
+  *
+  * @return the associated context
+  */
+ public AccessibleContext getAccessibleContext()
+ {
+   /* Create the context if this is the first request */
+   if (accessibleContext == null)
+     accessibleContext = new AccessibleAWTLabel();
+   return accessibleContext;
+ }
+ 
+ } // class Label
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/LayoutManager.java gcc-4.1.0/libjava/classpath/java/awt/LayoutManager.java
*** gcc-4.0.2/libjava/classpath/java/awt/LayoutManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/LayoutManager.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* LayoutManager.java -- lay out elements in a Container
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This interface is for laying out containers in a particular sequence.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Container
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface LayoutManager
+ {
+   /**
+    * Adds the specified component to the layout group.
+    *
+    * @param name the name of the component to add
+    * @param component the component to add
+    */
+   void addLayoutComponent(String name, Component component);
+ 
+   /**
+    * Removes the specified component from the layout group.
+    *
+    * @param component the component to remove
+    */
+   void removeLayoutComponent(Component component);
+ 
+   /**
+    * Calculates the preferred size for this container, taking into account
+    * the components it contains.
+    *
+    * @param parent the parent container to lay out
+    * @return the preferred dimensions of this container
+    * @see #minimumLayoutSize(Container)
+    */
+   Dimension preferredLayoutSize(Container parent);
+ 
+   /**
+    * Calculates the minimum size for this container, taking into account
+    * the components it contains.
+    *
+    * @param parent the parent container to lay out
+    * @return the minimum dimensions of this container
+    * @see #preferredLayoutSize(Container)
+    */
+   Dimension minimumLayoutSize(Container parent);
+ 
+   /**
+    * Lays out the components in the given container.
+    *
+    * @param parent the container to lay out
+    */
+   void layoutContainer(Container parent);
+ } // interface LayoutManager
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/LayoutManager2.java gcc-4.1.0/libjava/classpath/java/awt/LayoutManager2.java
*** gcc-4.0.2/libjava/classpath/java/awt/LayoutManager2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/LayoutManager2.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* LayoutManager2.java -- enhanced layout manager
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * Layout manager for laying out containers based on contraints. The
+  * constraints control how the layout will proceed.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see LayoutManager
+  * @see Container
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface LayoutManager2 extends LayoutManager
+ {
+   /**
+    * Adds the specified component to the layout, with the specified
+    * constraints object.
+    *
+    * @param component the component to add
+    * @param constraints the constraints to satisfy
+    */
+   void addLayoutComponent(Component component, Object constraints);
+ 
+   /**
+    * Determines the maximum size of the specified target container.
+    *
+    * @param target the container to lay out
+    * @return the maximum size of the container
+    * @see Component#getMaximumSize()
+    */
+   Dimension maximumLayoutSize(Container target);
+ 
+   /**
+    * Returns the preferred X axis alignment for the specified target
+    * container.  This value will range from 0 to 1 where 0 is alignment
+    * closest to the origin, 0.5 is centered, and 1 is aligned furthest
+    * from the origin.
+    *
+    * @param target the target container
+    * @return the x-axis alignment preference
+    */
+   float getLayoutAlignmentX(Container target);
+ 
+   /**
+    * Returns the preferred Y axis alignment for the specified target
+    * container.  This value will range from 0 to 1 where 0 is alignment
+    * closest to the origin, 0.5 is centered, and 1 is aligned furthest
+    * from the origin.
+    *
+    * @param target the target container
+    * @return the y-axis alignment preference
+    */
+   float getLayoutAlignmentY(Container target);
+ 
+   /**
+    * Forces the layout manager to purge any cached information about the
+    * layout of the target container.  This will force it to be recalculated.
+    *
+    * @param target the target container
+    */
+   void invalidateLayout(Container target);
+ } // interface LayoutManager2
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/List.java gcc-4.1.0/libjava/classpath/java/awt/List.java
*** gcc-4.0.2/libjava/classpath/java/awt/List.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/List.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1269 ----
+ /* List.java -- A listbox widget
+    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.awt.event.ItemEvent;
+ import java.awt.event.ItemListener;
+ import java.awt.peer.ListPeer;
+ import java.util.EventListener;
+ import java.util.Vector;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleSelection;
+ import javax.accessibility.AccessibleState;
+ import javax.accessibility.AccessibleStateSet;
+ 
+ /**
+   * Class that implements a listbox widget
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class List extends Component
+   implements ItemSelectable, Accessible
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization constant
+ private static final long serialVersionUID = -3304312411574666869L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ // FIXME: Need read/writeObject
+ 
+ /**
+   * @serial The items in the list.
+   */
+ private Vector items = new Vector();
+ 
+ /**
+   * @serial Indicates whether or not multiple items can be selected
+   * simultaneously.
+   */
+ private boolean multipleMode;
+ 
+ /**
+   * @serial The number of rows in the list.  This is set on creation
+   * only and cannot be modified.
+   */
+ private int rows;
+ 
+ /**
+   * @serial An array of the item indices that are selected.
+   */
+ private int[] selected;
+ 
+ /**
+   * @serial An index value used by <code>makeVisible()</code> and
+   * <code>getVisibleIndex</code>.
+   */
+ private int visibleIndex;
+ 
+ // The list of ItemListeners for this object.
+ private ItemListener item_listeners;
+ 
+ // The list of ActionListeners for this object.
+ private ActionListener action_listeners;
+ 
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>List</code> with no visible lines
+   * and multi-select disabled.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ List()
+ {
+   this(4, false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>List</code> with the specified
+   * number of visible lines and multi-select disabled.
+   *
+   * @param rows The number of visible rows in the list.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ List(int rows)
+ {
+   this(rows, false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>List</code> with the specified
+   * number of lines and the specified multi-select setting.
+   *
+   * @param rows The number of visible rows in the list.
+   * @param multipleMode <code>true</code> if multiple lines can be selected
+   * simultaneously, <code>false</code> otherwise.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public 
+ List(int rows, boolean multipleMode)
+ {
+   this.rows = rows;
+   this.multipleMode = multipleMode;
+   selected = new int[0];
+ 
+   if (GraphicsEnvironment.isHeadless())
+     throw new HeadlessException ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * Returns the number of items in this list.
+   *
+   * @return The number of items in this list.
+   */
+ public int
+ getItemCount()
+ {
+   return countItems ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the number of items in this list.
+   *
+   * @return The number of items in this list.
+   *
+   * @deprecated This method is deprecated in favor of
+   * <code>getItemCount()</code>
+   */
+ public int
+ countItems()
+ {
+   return items.size ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the complete list of items.
+   *
+   * @return The complete list of items in the list.
+   */
+ public synchronized String[]
+ getItems()
+ {
+   String[] l_items = new String[getItemCount()];
+  
+   items.copyInto(l_items);
+   return(l_items);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the item at the specified index.
+   *
+   * @param index The index of the item to retrieve.
+   *
+   * @exception IndexOutOfBoundsException If the index value is not valid.
+   */
+ public String
+ getItem(int index)
+ {
+   return((String)items.elementAt(index));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the number of visible rows in the list.
+   *
+   * @return The number of visible rows in the list.
+   */
+ public int
+ getRows()
+ {
+   return(rows);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not multi-select mode is enabled.
+   *
+   * @return <code>true</code> if multi-select mode is enabled,
+   * <code>false</code> otherwise.
+   */
+ public boolean
+ isMultipleMode()
+ {
+   return allowsMultipleSelections ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not multi-select mode is enabled.
+   *
+   * @return <code>true</code> if multi-select mode is enabled,
+   * <code>false</code> otherwise.
+   *
+   * @deprecated This method is deprecated in favor of 
+   * <code>isMultipleMode()</code>.
+   */
+ public boolean
+ allowsMultipleSelections()
+ {
+   return multipleMode;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method enables or disables multiple selection mode for this
+   * list.
+   *
+   * @param multipleMode <code>true</code> to enable multiple mode,
+   * <code>false</code> otherwise.
+   */
+ public void
+ setMultipleMode(boolean multipleMode)
+ {
+   setMultipleSelections (multipleMode);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method enables or disables multiple selection mode for this
+   * list.
+   *
+   * @param multipleMode <code>true</code> to enable multiple mode,
+   * <code>false</code> otherwise.
+   *
+   * @deprecated
+   */
+ public void
+ setMultipleSelections(boolean multipleMode)
+ {
+   this.multipleMode = multipleMode;
+ 
+   ListPeer peer = (ListPeer) getPeer ();
+   if (peer != null)
+     peer.setMultipleMode (multipleMode);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the minimum size of this component.
+   *
+   * @return The minimum size of this component.
+   */
+ public Dimension
+ getMinimumSize()
+ {
+   return getMinimumSize (getRows ());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the minimum size of this component.
+   *
+   * @return The minimum size of this component.
+   *
+   * @deprecated This method is deprecated in favor of
+   * <code>getMinimumSize</code>.
+   */
+ public Dimension
+ minimumSize()
+ {
+   return minimumSize (getRows ());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the minimum size of this component assuming it had the specified
+   * number of rows.
+   *
+   * @param rows The number of rows to size for.
+   *
+   * @return The minimum size of this component.
+   */
+ public Dimension
+ getMinimumSize(int rows)
+ {
+   return minimumSize (rows);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the minimum size of this component assuming it had the specified
+   * number of rows.
+   *
+   * @param rows The number of rows to size for.
+   *
+   * @return The minimum size of this component.
+   *
+   * @deprecated This method is deprecated in favor of 
+   * <code>getMinimumSize(int)</code>>
+   */
+ public Dimension
+ minimumSize(int rows)
+ {
+   ListPeer peer = (ListPeer) getPeer ();
+   if (peer != null)
+     return peer.minimumSize (rows);
+   else
+     return new Dimension (0, 0);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the preferred size of this component.
+   *
+   * @return The preferred size of this component.
+   */
+ public Dimension
+ getPreferredSize()
+ {
+   return getPreferredSize (getRows ());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the preferred size of this component.
+   *
+   * @return The preferred size of this component.
+   *
+   * @deprecated This method is deprecated in favor of
+   * <code>getPreferredSize</code>.
+   */
+ public Dimension
+ preferredSize()
+ {
+   return preferredSize (getRows ());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the preferred size of this component assuming it had the specified
+   * number of rows.
+   *
+   * @param rows The number of rows to size for.
+   *
+   * @return The preferred size of this component.
+   */
+ public Dimension
+ getPreferredSize(int rows)
+ {
+   return preferredSize (rows);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the preferred size of this component assuming it had the specified
+   * number of rows.
+   *
+   * @param rows The number of rows to size for.
+   *
+   * @return The preferred size of this component.
+   *
+   * @deprecated This method is deprecated in favor of 
+   * <code>getPreferredSize(int)</code>>
+   */
+ public Dimension
+ preferredSize(int rows)
+ {
+   ListPeer peer = (ListPeer) getPeer ();
+   if (peer != null)
+     return peer.preferredSize (rows);
+   else
+     return new Dimension (0, 0);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method adds the specified item to the end of the list.
+   *
+   * @param item The item to add to the list.
+   */
+ public void
+ add(String item)
+ {
+   add (item, -1);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method adds the specified item to the end of the list.
+   *
+   * @param item The item to add to the list.
+   *
+   * @deprecated Use add() instead.
+   */
+ public void
+ addItem(String item)
+ {
+   addItem (item, -1);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified item to the specified location in the list.
+   * If the desired index is -1 or greater than the number of rows
+   * in the list, then the item is added to the end.
+   *
+   * @param item The item to add to the list.
+   * @param index The location in the list to add the item, or -1 to add
+   * to the end.
+   */
+ public void
+ add(String item, int index)
+ {
+   addItem (item, index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified item to the specified location in the list.
+   * If the desired index is -1 or greater than the number of rows
+   * in the list, then the item is added to the end.
+   *
+   * @param item The item to add to the list.
+   * @param index The location in the list to add the item, or -1 to add
+   * to the end.
+   *
+   * @deprecated Use add() instead.
+   */
+ public void
+ addItem(String item, int index)
+ {
+   if ((index == -1) || (index >= items.size ()))
+     items.addElement (item);
+   else
+     items.insertElementAt (item, index);
+ 
+   ListPeer peer = (ListPeer) getPeer ();
+   if (peer != null)
+     peer.add (item, index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Deletes the item at the specified index.
+   *
+   * @param index The index of the item to delete.
+   *
+   * @exception IllegalArgumentException If the index is not valid
+   *
+   * @deprecated
+   */
+ public void
+ delItem(int index) throws IllegalArgumentException
+ {
+   items.removeElementAt (index);
+ 
+   ListPeer peer = (ListPeer) getPeer ();
+   if (peer != null)
+     peer.delItems (index, index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Deletes the item at the specified index.
+   *
+   * @param index The index of the item to delete.
+   *
+   * @exception IllegalArgumentException If the index is not valid
+   */
+ public void
+ remove(int index) throws IllegalArgumentException
+ {
+   delItem (index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Deletes all items in the specified index range.
+   *
+   * @param start The beginning index of the range to delete.
+   * @param end The ending index of the range to delete.
+   *
+   * @exception IllegalArgumentException If the indexes are not valid
+   *
+   * @deprecated This method is deprecated for some unknown reason.
+   */
+ public synchronized void
+ delItems(int start, int end) throws IllegalArgumentException
+ {
+   if ((start < 0) || (start >= items.size()))
+     throw new IllegalArgumentException("Bad list start index value: " + start);
+ 
+   if ((start < 0) || (start >= items.size()))
+     throw new IllegalArgumentException("Bad list start index value: " + start);
+ 
+   if (start > end)
+     throw new IllegalArgumentException("Start is greater than end!");
+ 
+   // We must run the loop in reverse direction.
+   for (int i = end; i >= start; --i)
+     items.removeElementAt (i);
+   if (peer != null)
+     {
+       ListPeer l = (ListPeer) peer;
+       l.delItems (start, end);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Deletes the first occurrence of the specified item from the list.
+   *
+   * @param item The item to delete.
+   *
+   * @exception IllegalArgumentException If the specified item does not exist.
+   */
+ public synchronized void
+ remove(String item) throws IllegalArgumentException
+ {
+   int index = items.indexOf(item);
+   if (index == -1)
+     throw new IllegalArgumentException("List element to delete not found");
+ 
+   remove(index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Deletes all of the items from the list.
+   */
+ public synchronized void
+ removeAll()
+ {
+   clear ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Deletes all of the items from the list.
+   * 
+   * @deprecated This method is deprecated in favor of <code>removeAll()</code>.
+   */
+ public void
+ clear()
+ {
+   items.clear();
+ 
+   ListPeer peer = (ListPeer) getPeer ();
+   if (peer != null)
+     peer.removeAll ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Replaces the item at the specified index with the specified item.
+   *
+   * @param item The new item value.
+   * @param index The index of the item to replace.
+   *
+   * @exception IllegalArgumentException If the index is not valid.
+   */
+ public synchronized void
+ replaceItem(String item, int index) throws IllegalArgumentException
+ {
+   if ((index < 0) || (index >= items.size()))
+     throw new IllegalArgumentException("Bad list index: " + index);
+ 
+   items.insertElementAt(item, index + 1);
+   items.removeElementAt (index);
+ 
+   if (peer != null)
+     {
+       ListPeer l = (ListPeer) peer;
+ 
+       /* We add first and then remove so that the selected
+ 	 item remains the same */
+       l.add (item, index + 1);
+       l.delItems (index, index);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the index of the currently selected item.  -1 will be returned
+   * if there are no selected rows or if there are multiple selected rows.
+   *
+   * @return The index of the selected row.
+   */
+ public synchronized int
+ getSelectedIndex()
+ {
+   if (peer != null)
+     {
+       ListPeer l = (ListPeer) peer;
+       selected = l.getSelectedIndexes ();
+     }
+ 
+   if (selected == null || selected.length != 1)
+     return -1;
+   return selected[0];
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns an array containing the indexes of the rows that are 
+   * currently selected.
+   *
+   * @return A list of indexes of selected rows.
+   */
+ public synchronized int[]
+ getSelectedIndexes()
+ {
+   if (peer != null)
+     {
+       ListPeer l = (ListPeer) peer;
+       selected = l.getSelectedIndexes ();
+     }
+   return selected;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the item that is currently selected, or <code>null</code> if there 
+   * is no item selected.  FIXME: What happens if multiple items selected?
+   *
+   * @return The selected item, or <code>null</code> if there is no
+   * selected item.
+   */
+ public synchronized String
+ getSelectedItem()
+ {
+   int index = getSelectedIndex();
+   if (index == -1)
+     return(null);
+ 
+   return((String)items.elementAt(index));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the list of items that are currently selected in this list.
+   *
+   * @return The list of currently selected items.
+   */
+ public synchronized String[]
+ getSelectedItems()
+ {
+   int[] indexes = getSelectedIndexes();
+   if (indexes == null)
+     return(new String[0]);
+ 
+   String[] retvals = new String[indexes.length];
+   if (retvals.length > 0)
+     for (int i = 0 ; i < retvals.length; i++)
+        retvals[i] = (String)items.elementAt(indexes[i]);
+ 
+   return(retvals);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the list of items that are currently selected in this list as
+   * an array of type <code>Object[]</code> instead of <code>String[]</code>.
+   *
+   * @return The list of currently selected items.
+   */
+ public synchronized Object[]
+ getSelectedObjects()
+ {
+   int[] indexes = getSelectedIndexes();
+   if (indexes == null)
+     return(new Object[0]);
+ 
+   Object[] retvals = new Object[indexes.length];
+   if (retvals.length > 0)
+     for (int i = 0 ; i < retvals.length; i++)
+        retvals[i] = items.elementAt(indexes[i]);
+ 
+   return(retvals);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not the specified index is selected.
+   *
+   * @param index The index to test.
+   *
+   * @return <code>true</code> if the index is selected, <code>false</code>
+   * otherwise.
+   */
+ public boolean
+ isIndexSelected(int index)
+ {
+   return isSelected (index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not the specified index is selected.
+   *
+   * @param index The index to test.
+   *
+   * @return <code>true</code> if the index is selected, <code>false</code>
+   * otherwise.
+   *
+   * @deprecated This method is deprecated in favor of
+   * <code>isIndexSelected(int)</code>.
+   */
+ public boolean
+ isSelected(int index)
+ {
+   int[] indexes = getSelectedIndexes ();
+ 
+   for (int i = 0; i < indexes.length; i++)
+     if (indexes[i] == index)
+       return true;
+ 
+   return false;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method ensures that the item at the specified index is visible.
+   *
+   * @exception IllegalArgumentException If the specified index is out of
+   * range.
+   */
+ public synchronized void
+ makeVisible(int index) throws IllegalArgumentException
+ {
+   if ((index < 0) || (index >= items.size()))
+     throw new IllegalArgumentException("Bad list index: " + index);
+ 
+   visibleIndex = index;
+   if (peer != null)
+     {
+       ListPeer l = (ListPeer) peer;
+       l.makeVisible (index);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the index of the last item that was made visible via the
+   * <code>makeVisible()</code> method.
+   *
+   * @return The index of the last item made visible via the 
+   * <code>makeVisible()</code> method.
+   */
+ public int
+ getVisibleIndex()
+ {
+   return(visibleIndex);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Makes the item at the specified index selected.
+   *
+   * @param index The index of the item to select.
+   */
+ public synchronized void
+ select(int index)
+ {
+   ListPeer lp = (ListPeer)getPeer();
+   if (lp != null)
+     lp.select(index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Makes the item at the specified index not selected.
+   *
+   * @param index The index of the item to unselect.
+   */
+ public synchronized void
+ deselect(int index)
+ {
+   ListPeer lp = (ListPeer)getPeer();
+   if (lp != null)
+     lp.deselect(index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Notifies this object to create its native peer.
+   */
+ public void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit ().createList (this);
+   super.addNotify ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Notifies this object to destroy its native peer.
+   */
+ public void
+ removeNotify()
+ {
+   super.removeNotify();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified <code>ActionListener</code> to the list of
+   * registered listeners for this object.
+   *
+   * @param listener The listener to add.
+   */
+ public synchronized void
+ addActionListener(ActionListener listener)
+ {
+   action_listeners = AWTEventMulticaster.add(action_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specified <code>ActionListener</code> from the list of
+   * registers listeners for this object.
+   *
+   * @param listener The listener to remove.
+   */
+ public synchronized void
+ removeActionListener(ActionListener listener)
+ {
+   action_listeners = AWTEventMulticaster.remove(action_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified <code>ItemListener</code> to the list of
+   * registered listeners for this object.
+   *
+   * @param listener The listener to add.
+   */
+ public synchronized void
+ addItemListener(ItemListener listener)
+ {
+   item_listeners = AWTEventMulticaster.add(item_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specified <code>ItemListener</code> from the list of
+   * registers listeners for this object.
+   *
+   * @param listener The listener to remove.
+   */
+ public synchronized void
+ removeItemListener(ItemListener listener)
+ {
+   item_listeners = AWTEventMulticaster.remove(item_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes the specified event for this object.  If the event is an
+   * instance of <code>ActionEvent</code> then the
+   * <code>processActionEvent()</code> method is called.  Similarly, if the
+   * even is an instance of <code>ItemEvent</code> then the
+   * <code>processItemEvent()</code> method is called.  Otherwise the
+   * superclass method is called to process this event.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processEvent(AWTEvent event)
+ {
+   if (event instanceof ActionEvent)
+     processActionEvent((ActionEvent)event);
+   else if (event instanceof ItemEvent)
+     processItemEvent((ItemEvent)event);
+   else
+     super.processEvent(event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method processes the specified event by dispatching it to any
+   * registered listeners.  Note that this method will only get called if
+   * action events are enabled.  This will happen automatically if any
+   * listeners are added, or it can be done "manually" by calling
+   * the <code>enableEvents()</code> method.
+   *
+   * @param event The event to process.
+   */
+ protected void 
+ processActionEvent(ActionEvent event)
+ {
+   if (action_listeners != null)
+     action_listeners.actionPerformed(event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method processes the specified event by dispatching it to any
+   * registered listeners.  Note that this method will only get called if
+   * item events are enabled.  This will happen automatically if any
+   * listeners are added, or it can be done "manually" by calling
+   * the <code>enableEvents()</code> method.
+   *
+   * @param event The event to process.
+   */
+ protected void 
+ processItemEvent(ItemEvent event)
+ {
+   if (item_listeners != null)
+     item_listeners.itemStateChanged(event);
+ }
+ 
+ void
+ dispatchEventImpl(AWTEvent e)
+ {
+   if (e.id <= ItemEvent.ITEM_LAST
+       && e.id >= ItemEvent.ITEM_FIRST
+       && (item_listeners != null 
+ 	  || (eventMask & AWTEvent.ITEM_EVENT_MASK) != 0))
+     processEvent(e);
+   else if (e.id <= ActionEvent.ACTION_LAST 
+ 	   && e.id >= ActionEvent.ACTION_FIRST
+ 	   && (action_listeners != null 
+ 	       || (eventMask & AWTEvent.ACTION_EVENT_MASK) != 0))
+     processEvent(e);
+   else
+     super.dispatchEventImpl(e);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this object.
+   *
+   * @return A debugging string for this object.
+   */
+ protected String
+ paramString()
+ {
+   return "multiple=" + multipleMode + ",rows=" + rows + super.paramString();
+ }
+ 
+   /**
+    * Returns an array of all the objects currently registered as FooListeners
+    * upon this <code>List</code>. FooListeners are registered using the 
+    * addFooListener method.
+    *
+    * @exception ClassCastException If listenerType doesn't specify a class or
+    * interface that implements java.util.EventListener.
+    */
+   public EventListener[] getListeners (Class listenerType)
+   {
+     if (listenerType == ActionListener.class)
+       return AWTEventMulticaster.getListeners (action_listeners, listenerType);
+     
+     if (listenerType == ItemListener.class)
+       return AWTEventMulticaster.getListeners (item_listeners, listenerType);
+ 
+     return super.getListeners (listenerType);
+   }
+ 
+   /**
+    * Returns all action listeners registered to this object.
+    */
+   public ActionListener[] getActionListeners ()
+   {
+     return (ActionListener[]) getListeners (ActionListener.class);
+   }
+   
+   /**
+    * Returns all action listeners registered to this object.
+    */
+   public ItemListener[] getItemListeners ()
+   {
+     return (ItemListener[]) getListeners (ItemListener.class);
+   }
+   
+   // Accessibility internal class 
+   protected class AccessibleAWTList extends AccessibleAWTComponent
+     implements AccessibleSelection, ItemListener, ActionListener
+   {
+     private static final long serialVersionUID = 7924617370136012829L;
+ 
+     protected class AccessibleAWTListChild extends AccessibleAWTComponent
+       implements Accessible
+     {
+       private static final long serialVersionUID = 4412022926028300317L;
+       
+       // Field names are fixed by serialization spec.
+       private List parent;
+       private int indexInParent;
+       
+       public AccessibleAWTListChild(List parent, int indexInParent)
+       {
+         this.parent = parent;
+         this.indexInParent = indexInParent;
+         if (parent == null)
+           this.indexInParent = -1;
+       }
+       
+       /* (non-Javadoc)
+        * @see javax.accessibility.Accessible#getAccessibleContext()
+        */
+       public AccessibleContext getAccessibleContext()
+       {
+         return this;
+       }
+       
+       public AccessibleRole getAccessibleRole()
+       {
+         return AccessibleRole.LIST_ITEM;
+       }
+       
+       public AccessibleStateSet getAccessibleStateSet()
+       {
+         AccessibleStateSet states = super.getAccessibleStateSet();
+         if (parent.isIndexSelected(indexInParent))
+           states.add(AccessibleState.SELECTED);
+         return states;
+       }
+       
+       public int getAccessibleIndexInParent()
+       {
+         return indexInParent;
+       }
+ 
+     }
+     
+     public AccessibleAWTList()
+     {
+       addItemListener(this);
+       addActionListener(this);
+     }
+     
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.LIST;
+     }
+     
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       AccessibleStateSet states = super.getAccessibleStateSet();
+       states.add(AccessibleState.SELECTABLE);
+       if (isMultipleMode())
+         states.add(AccessibleState.MULTISELECTABLE);
+       return states;
+     }
+ 
+     public int getAccessibleChildrenCount()
+     {
+       return getItemCount();
+     }
+ 
+     public Accessible getAccessibleChild(int i)
+     {
+       if (i >= getItemCount())
+         return null;
+       return new AccessibleAWTListChild(List.this, i);
+     }
+     
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleSelection#getAccessibleSelectionCount()
+      */
+     public int getAccessibleSelectionCount()
+     {
+       return getSelectedIndexes().length;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleSelection#getAccessibleSelection()
+      */
+     public AccessibleSelection getAccessibleSelection()
+     {
+       return this;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleSelection#getAccessibleSelection(int)
+      */
+     public Accessible getAccessibleSelection(int i)
+     {
+       int[] items = getSelectedIndexes();
+       if (i >= items.length)
+         return null;
+       return new AccessibleAWTListChild(List.this, items[i]);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleSelection#isAccessibleChildSelected(int)
+      */
+     public boolean isAccessibleChildSelected(int i)
+     {
+       return isIndexSelected(i);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleSelection#addAccessibleSelection(int)
+      */
+     public void addAccessibleSelection(int i)
+     {
+       select(i);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleSelection#removeAccessibleSelection(int)
+      */
+     public void removeAccessibleSelection(int i)
+     {
+       deselect(i);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleSelection#clearAccessibleSelection()
+      */
+     public void clearAccessibleSelection()
+     {
+       for (int i = 0; i < getItemCount(); i++)
+         deselect(i);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleSelection#selectAllAccessibleSelection()
+      */
+     public void selectAllAccessibleSelection()
+     {
+       if (isMultipleMode())
+         for (int i = 0; i < getItemCount(); i++)
+           select(i);
+     }
+ 
+     /* (non-Javadoc)
+      * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
+      */
+     public void itemStateChanged(ItemEvent event)
+     {
+     }
+ 
+     /* (non-Javadoc)
+      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+      */
+     public void actionPerformed(ActionEvent event)
+     {
+     }
+     
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this <code>List</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTList();
+     return accessibleContext;
+   }
+ } // class List
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/MediaTracker.java gcc-4.1.0/libjava/classpath/java/awt/MediaTracker.java
*** gcc-4.0.2/libjava/classpath/java/awt/MediaTracker.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/MediaTracker.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,697 ----
+ /* MediaTracker.java -- Class used for keeping track of images
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.ImageObserver;
+ import java.util.ArrayList;
+ 
+ /**
+   * This class is used for keeping track of the status of various media
+   * objects.
+   *
+   * Media objects are tracked by assigning them an ID. It is possible
+   * to assign the same ID to mutliple objects, effectivly grouping them
+   * together. In this case the status flags ({@link #statusID}) and error flag
+   * (@link #isErrorID} and {@link #getErrorsID}) are ORed together. This
+   * means that you cannot say exactly which media object has which status,
+   * at most you can say that there <em>are</em> certain media objects with
+   * some certain status.
+   * 
+   * At the moment only images are supported by this class.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Bryce McKinlay
+   */
+ public class MediaTracker implements java.io.Serializable
+ {
+   /** Indicates that the media is still loading. */
+   public static final int LOADING = 1 << 0;
+ 
+   /** Indicates that the loading operation has been aborted. */
+   public static final int ABORTED = 1 << 1;
+ 
+   /** Indicates that an error has occured during loading of the media. */
+   public static final int ERRORED = 1 << 2;
+ 
+   /** Indicates that the media has been successfully and completely loaded. */
+   public static final int COMPLETE = 1 << 3;
+ 
+   /** The component on which the media is eventually been drawn. */
+   Component target;
+ 
+   /** The head of the linked list of tracked media objects. */
+   MediaEntry head;
+ 
+   /** Our serialVersionUID for serialization. */
+   static final long serialVersionUID = -483174189758638095L;
+ 
+   /**
+    * This represents a media object that is tracked by a MediaTracker.
+    * It also implements a simple linked list.
+    */
+   // FIXME: The serialized form documentation says MediaEntry is a 
+   // serializable field, but the serialized form of MediaEntry itself
+   // doesn't appear to be documented.
+   class MediaEntry implements ImageObserver
+   {
+     /** The ID of the media object. */
+     int id;
+ 
+     /** The media object. (only images are supported ATM). */
+     Image image;
+ 
+     /** The link to the next entry in the list. */
+     MediaEntry next;
+ 
+     /** The tracking status. */
+     int status;
+ 
+     /** The width of the image. */
+     int width;
+ 
+     /** The height of the image. */
+     int height;
+     
+     /**
+      * Receives notification from an {@link java.awt.image.ImageProducer}
+      * that more data of the image is available.
+      *
+      * @param img the image that is updated
+      * @param flags flags from the ImageProducer that indicate the status
+      *        of the loading process
+      * @param x the X coordinate of the upper left corner of the image
+      * @param y the Y coordinate of the upper left corner of the image
+      * @param width the width of the image
+      * @param height the height of the image
+      *
+      * @return <code>true</code> if more data is needed, <code>false</code>
+      *         otherwise
+      *
+      * @see java.awt.image.ImageObserver
+      */
+     public boolean imageUpdate(Image img, int flags, int x, int y, 
+                                int width, int height)
+     {
+       if ((flags & ABORT) != 0)
+         status = ABORTED;
+       else if ((flags & ERROR) != 0)
+         status = ERRORED;
+       else if ((flags & ALLBITS) != 0)
+         status = COMPLETE;
+       else
+         status = 0;
+ 
+       synchronized (MediaTracker.this)
+         {
+           MediaTracker.this.notifyAll();
+         }
+ 
+       // If status is not COMPLETE then we need more updates.
+       return ((status & (COMPLETE | ERRORED | ABORTED)) == 0);
+     }
+   }
+ 
+   /**
+    * Constructs a new MediaTracker for the component <code>c</code>. The
+    * component should be the component that uses the media (i.e. draws it).
+    *
+    * @param c the Component that wants to use the media
+    */
+   public MediaTracker(Component c)
+   {
+     target = c;
+   }
+ 
+   /**
+    * Adds an image to the tracker with the specified <code>ID</code>.
+    *
+    * @param image the image to be added
+    * @param id the ID of the tracker list to which the image is added
+    */
+   public void addImage(Image image, int id)
+   {
+     MediaEntry e = new MediaEntry();
+     e.id = id;
+     e.image = image;
+     synchronized(this)
+       {
+         e.next = head;
+         head = e;
+       }
+   }
+ 
+   /**
+    * Adds an image to the tracker with the specified <code>ID</code>.
+    * The image is expected to be rendered with the specified width and
+    * height.
+    *
+    * @param image the image to be added
+    * @param id the ID of the tracker list to which the image is added
+    * @param width the width of the image
+    * @param height the height of the image
+    */
+   public void addImage(Image image, int id, int width, int height)
+   {
+     MediaEntry e = new MediaEntry();
+     e.id = id;
+     e.image = image;
+     e.width = width;
+     e.height = height;
+     synchronized(this)
+       {
+         e.next = head;
+         head = e;
+       }
+   }
+ 
+   /**
+    * Checks if all media objects have finished loading, i.e. are
+    * {@link #COMPLETE}, {@link #ABORTED} or {@link #ERRORED}.
+    *
+    * If the media objects are not already loading, a call to this
+    * method does <em>not</em> start loading. This is equivalent to
+    * a call to <code>checkAll(false)</code>.
+    *
+    * @return if all media objects have finished loading either by beeing
+    *         complete, have been aborted or errored.
+    */
+   public boolean checkAll()
+   {
+     return checkAll(false);
+   }
+ 
+   /**
+    * Checks if all media objects have finished loading, i.e. are
+    * {@link #COMPLETE}, {@link #ABORTED} or {@link #ERRORED}.
+    *
+    * If the media objects are not already loading, and <code>load</code>
+    * is <code>true</code> then a call to this
+    * method starts loading the media objects.
+    *
+    * @param load if <code>true</code> this method starts loading objects
+    *        that are not already loading
+    *
+    * @return if all media objects have finished loading either by beeing
+    *         complete, have been aborted or errored.
+    */
+   public boolean checkAll(boolean load)
+   {
+     MediaEntry e = head;
+     boolean result = true;
+     
+     while (e != null)
+       {
+         if ((e.status & (COMPLETE | ERRORED | ABORTED)) == 0)
+           {
+             if (load && ((e.status & LOADING) == 0))
+               {
+ 		if (target.prepareImage(e.image, e))
+ 		  e.status = COMPLETE;
+ 		else
+ 		  {
+ 		    e.status = LOADING;
+ 		    int flags = target.checkImage(e.image, e);
+ 		    if ((flags & ImageObserver.ABORT) != 0)
+ 		      e.status = ABORTED;
+ 		    else if ((flags & ImageObserver.ERROR) != 0)
+ 		      e.status = ERRORED;
+ 		    else if ((flags & ImageObserver.ALLBITS) != 0)
+ 		      e.status = COMPLETE;
+ 		  }
+ 		boolean complete = (e.status
+ 				    & (COMPLETE | ABORTED | ERRORED)) != 0;
+ 		if (!complete)
+ 		  result = false;
+ 	      }
+             else
+               result = false;
+           }
+         e = e.next;
+       }
+     return result;
+   }
+ 
+   /**
+    * Checks if any of the registered media objects has encountered an error
+    * during loading.
+    *
+    * @return <code>true</code> if at least one media object has encountered
+    *         an error during loading, <code>false</code> otherwise
+    *
+    */
+   public boolean isErrorAny()
+   {
+     MediaEntry e = head;    
+     while (e != null)
+       {
+         if ((e.status & ERRORED) != 0)
+           return true;
+         e = e.next;
+       }
+     return false;
+   }
+ 
+   /**
+    * Returns all media objects that have encountered errors during loading.
+    *
+    * @return an array of all media objects that have encountered errors
+    *         or <code>null</code> if there were no errors at all
+    */
+   public Object[] getErrorsAny()
+   {
+     MediaEntry e = head;
+     ArrayList result = null;
+     while (e != null)
+       {
+         if ((e.status & ERRORED) != 0)
+           {
+             if (result == null)
+               result = new ArrayList();
+             result.add(e.image);
+           }
+         e = e.next;
+       }
+     if (result == null)
+       return null;
+     else
+       return result.toArray();
+   }
+ 
+   /**
+    * Waits for all media objects to finish loading, either by completing
+    * successfully or by aborting or encountering an error.
+    *
+    * @throws InterruptedException if another thread interrupted the
+    *         current thread while waiting
+    */
+   public void waitForAll() throws InterruptedException
+   {
+     synchronized (this)
+     {
+       while (checkAll(true) == false)
+         wait();
+     }
+   }
+ 
+   /**
+    * Waits for all media objects to finish loading, either by completing
+    * successfully or by aborting or encountering an error.
+    *
+    * This method waits at most <code>ms</code> milliseconds. If the
+    * media objects have not completed loading within this timeframe, this
+    * method returns <code>false</code>, otherwise <code>true</code>.
+    *
+    * @param ms timeframe in milliseconds to wait for the media objects to
+    *        finish
+    *
+    * @return <code>true</code> if all media objects have successfully loaded
+    *         within the timeframe, <code>false</code> otherwise
+    *
+    * @throws InterruptedException if another thread interrupted the
+    *         current thread while waiting
+    */
+   public boolean waitForAll(long ms) throws InterruptedException
+   {
+     long start = System.currentTimeMillis();
+     boolean result = checkAll(true);
+     synchronized (this)
+     {
+       while (result == false)
+         {
+           wait(ms);
+           result = checkAll(true);
+           if ((System.currentTimeMillis() - start) > ms)
+             break;
+         }
+     }
+ 
+     return result;
+   }
+ 
+   /**
+    * Returns the status flags of all registered media objects ORed together.
+    * If <code>load</code> is <code>true</code> then media objects that
+    * are not already loading will be started to load.
+    *
+    * @param load if set to <code>true</code> then media objects that are
+    *        not already loading are started
+    *
+    * @return the status flags of all tracked media objects ORed together
+    */
+   public int statusAll(boolean load)
+   {
+     int result = 0;
+     MediaEntry e = head;
+     while (e != null)
+       {
+         if (load && e.status == 0)
+           {
+             if (target.prepareImage(e.image, e))
+               e.status = COMPLETE;
+             else
+ 	      {
+                 e.status = LOADING;
+                 int flags = target.checkImage(e.image, e);
+ 		if ((flags & ImageObserver.ABORT) != 0)
+ 		  e.status = ABORTED;
+ 		else if ((flags & ImageObserver.ERROR) != 0)
+ 		  e.status = ERRORED;
+ 		else if ((flags & ImageObserver.ALLBITS) != 0)
+ 		  e.status = COMPLETE;
+ 	      }
+           }
+         result |= e.status;
+         e = e.next;
+       }
+     return result;
+   }
+ 
+   /**
+    * Checks if the media objects with <code>ID</code> have completed loading.
+    *
+    * @param id the ID of the media objects to check
+    *
+    * @return <code>true</code> if all media objects with <code>ID</code>
+    *         have successfully finished
+    */
+   public boolean checkID(int id)
+   {
+     return checkID(id, false);
+   }
+ 
+   /**
+    * Checks if the media objects with <code>ID</code> have completed loading.
+    * If <code>load</code> is <code>true</code> then media objects that
+    * are not already loading will be started to load.
+    *
+    * @param id the ID of the media objects to check
+    * @param load if set to <code>true</code> then media objects that are
+    *        not already loading are started
+    *
+    * @return <code>true</code> if all media objects with <code>ID</code>
+    *         have successfully finished
+    */
+   public boolean checkID(int id, boolean load)
+   {
+     MediaEntry e = head;
+     boolean result = true;
+     
+     while (e != null)
+       {
+         if (e.id == id && ((e.status & (COMPLETE | ABORTED | ERRORED)) == 0))
+           {
+             if (load && ((e.status & LOADING) == 0))
+               {
+                 e.status = LOADING;
+ 		if (target.prepareImage(e.image, e))
+ 		  e.status = COMPLETE;
+ 		else
+ 		  {
+ 		    int flags = target.checkImage(e.image, e);
+ 		    if ((flags & ImageObserver.ABORT) != 0)
+ 		      e.status = ABORTED;
+ 		    else if ((flags & ImageObserver.ERROR) != 0)
+ 		      e.status = ERRORED;
+ 		    else if ((flags & ImageObserver.ALLBITS) != 0)
+ 		      e.status = COMPLETE;
+ 		  }
+ 		boolean complete = (e.status
+ 				    & (COMPLETE | ABORTED | ERRORED)) != 0;
+ 		if (!complete)
+ 		  result = false;
+               }
+             else
+               result = false;
+           }
+         e = e.next;
+       }
+     return result;
+   }
+ 
+   /**
+    * Returns <code>true</code> if any of the media objects with <code>ID</code>
+    * have encountered errors during loading, false otherwise.
+    *
+    * @param id the ID of the media objects to check
+    *
+    * @return <code>true</code> if any of the media objects with <code>ID</code>
+    *         have encountered errors during loading, false otherwise
+    */
+   public boolean isErrorID(int id)
+   {
+     MediaEntry e = head;    
+     while (e != null)
+       {
+         if (e.id == id && ((e.status & ERRORED) != 0))
+           return true;
+         e = e.next;
+       }
+     return false;
+   }
+ 
+   /**
+    * Returns all media objects with the specified ID that have encountered
+    * an error.
+    *
+    * @param id the ID of the media objects to check
+    *
+    * @return an array of all media objects  with the specified ID that
+    *         have encountered an error
+    */
+   public Object[] getErrorsID(int id)
+   {
+     MediaEntry e = head;
+     ArrayList result = null;
+     while (e != null)
+       {
+         if (e.id == id && ((e.status & ERRORED) != 0))
+           {
+             if (result == null)
+               result = new ArrayList();
+             result.add(e.image);
+           }
+         e = e.next;
+       }
+     if (result == null)
+       return null;
+     else
+       return result.toArray();
+   }
+ 
+   /**
+    * Waits for all media objects with the specified ID to finish loading,
+    * either by completing successfully or by aborting or encountering an error.
+    *
+    * @param id the ID of the media objects to wait for
+    *
+    * @throws InterruptedException if another thread interrupted the
+    *         current thread while waiting
+    */
+   public void waitForID(int id) throws InterruptedException
+   {
+     MediaEntry e = head;
+     synchronized (this)
+     {
+       while (checkID (id, true) == false)
+         wait();
+     }
+   }
+ 
+   /**
+    * Waits for all media objects with the specified ID to finish loading,
+    * either by completing successfully or by aborting or encountering an error.
+    *
+    * This method waits at most <code>ms</code> milliseconds. If the
+    * media objects have not completed loading within this timeframe, this
+    * method returns <code>false</code>, otherwise <code>true</code>.
+    *
+    * @param id the ID of the media objects to wait for
+    * @param ms timeframe in milliseconds to wait for the media objects to
+    *        finish
+    *
+    * @return <code>true</code> if all media objects have successfully loaded
+    *         within the timeframe, <code>false</code> otherwise
+    *
+    * @throws InterruptedException if another thread interrupted the
+    *         current thread while waiting
+    */
+   public boolean waitForID(int id, long ms) throws InterruptedException
+   {
+     MediaEntry e = head;
+     long start = System.currentTimeMillis();
+     boolean result = checkID(id, true);
+ 
+     synchronized (this)
+     {
+       while (result == false)
+         {
+           wait(ms);
+           result = checkID(id, true);
+           if ((System.currentTimeMillis() - start) > ms)
+             break;
+         }
+     }
+ 
+     return result;
+   }
+ 
+   /**
+    * Returns the status flags of the media objects with the specified ID
+    * ORed together.
+    *
+    * If <code>load</code> is <code>true</code> then media objects that
+    * are not already loading will be started to load.
+    *
+    * @param load if set to <code>true</code> then media objects that are
+    *        not already loading are started
+    *
+    * @return the status flags of all tracked media objects ORed together
+    */
+   public int statusID(int id, boolean load)
+   {
+     int result = 0;
+     MediaEntry e = head;
+     while (e != null)
+       {
+         if (e.id == id)
+           {
+             if (load && e.status == 0)
+               {
+ 		if (target.prepareImage(e.image, e))
+                   e.status = COMPLETE;
+ 		else
+ 		  {
+ 		    e.status = LOADING;
+ 		    int flags = target.checkImage(e.image, e);
+ 		    if ((flags & ImageObserver.ABORT) != 0)
+ 		      e.status = ABORTED;
+ 		    else if ((flags & ImageObserver.ERROR) != 0)
+ 		      e.status = ERRORED;
+ 		    else if ((flags & ImageObserver.ALLBITS) != 0)
+ 		      e.status = COMPLETE;
+ 		  }
+               }
+             result |= e.status;
+           }
+         e = e.next;
+       }
+     return result;
+   }
+ 
+   /**
+    * Removes an image from this MediaTracker.
+    *
+    * @param image the image to be removed
+    */
+   public void removeImage(Image image)
+   {
+     synchronized (this)
+       {
+         MediaEntry e = head;
+         MediaEntry prev = null;
+         while (e != null)
+           {
+             if (e.image == image)
+               {
+                 if (prev == null)
+                   head = e.next;
+                 else
+                   prev.next = e.next;
+               }
+             prev = e;
+             e = e.next;
+           }
+       }
+   }
+ 
+   /**
+    * Removes an image with the specified ID from this MediaTracker.
+    *
+    * @param image the image to be removed
+    */
+   public void removeImage(Image image, int id)
+   {
+     synchronized (this)
+       {
+         MediaEntry e = head;
+         MediaEntry prev = null;
+         while (e != null)
+           {
+             if (e.id == id && e.image == image)
+               {
+                 if (prev == null)
+                   head = e.next;
+                 else
+                   prev.next = e.next;
+               }
+             else
+               prev = e;
+             e = e.next;
+           }
+       }
+   }
+ 
+   /**
+    * Removes an image with the specified ID and scale from this MediaTracker.
+    *
+    * @param image the image to be removed
+    */
+   public void removeImage(Image image, int id, int width, int height)
+   {
+     synchronized (this)
+       {
+         MediaEntry e = head;
+         MediaEntry prev = null;
+         while (e != null)
+           {
+             if (e.id == id && e.image == image
+                 && e.width == width && e.height == height)
+               {
+                 if (prev == null)
+                   head = e.next;
+                 else
+                   prev.next = e.next;
+               }
+             else
+               prev = e;
+             e = e.next;
+           }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Menu.java gcc-4.1.0/libjava/classpath/java/awt/Menu.java
*** gcc-4.0.2/libjava/classpath/java/awt/Menu.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Menu.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,470 ----
+ /* Menu.java -- A Java AWT Menu
+    Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.peer.MenuPeer;
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ import java.util.Vector;
+ 
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ 
+ /**
+   * This class represents a pull down or tear off menu in Java's AWT.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class Menu extends MenuItem implements MenuContainer, Serializable
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization Constant
+ private static final long serialVersionUID = -8809584163345499784L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The actual items in the menu
+   */
+ private Vector items = new Vector();
+ 
+ /**
+   * @serial Flag indicating whether or not this menu is a tear off
+   */
+ private boolean tearOff;
+ 
+ /**
+   * @serial Indicates whether or not this is a help menu.
+   */
+ private boolean isHelpMenu;
+ 
+   /*
+    * @serial Unused in this implementation, but present in Sun's
+    * serialization spec.  Value obtained via reflection.
+    */
+   private int menuSerializedDataVersion = 1;
+ 
+ static final transient String separatorLabel = "-";
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>Menu</code> with no label and that
+   * is not a tearoff;
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ Menu()
+ {
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Menu</code> that is not a tearoff and
+   * that has the specified label.
+   *
+   * @param label The menu label.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ Menu(String label)
+ {
+   this(label, false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>Menu</code> with the specified
+   * label and tearoff status.
+   *
+   * @param label The label for this menu
+   * @param isTearOff <code>true</code> if this menu is a tear off menu,
+   * <code>false</code> otherwise.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ Menu(String label, boolean isTearOff)
+ {
+   super(label);
+ 
+   tearOff = isTearOff;
+ 
+   if (label.equals("Help"))
+     isHelpMenu = true;
+ 
+   if (GraphicsEnvironment.isHeadless())
+     throw new HeadlessException ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Tests whether or not this menu is a tearoff.
+   *
+   * @return <code>true</code> if this menu is a tearoff, <code>false</code>
+   * otherwise.
+   */
+ public boolean
+ isTearOff()
+ {
+   return(tearOff);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the number of items in this menu.
+   *
+   * @return The number of items in this menu.
+   */
+ public int
+ getItemCount()
+ {
+   return countItems ();
+ }
+ 
+ /**
+  * Returns the number of items in this menu.
+  *
+  * @return The number of items in this menu.
+  *
+  * @deprecated As of JDK 1.1, replaced by getItemCount().
+  */
+ public int countItems ()
+ {
+   return items.size ();
+ }
+  
+ /*************************************************************************/
+ 
+ /**
+   * Returns the item at the specified index.
+   *
+   * @return The item at the specified index.
+   *
+   * @exception ArrayIndexOutOfBoundsException If the index value is not valid.
+   */
+ public MenuItem
+ getItem(int index)
+ {
+   return((MenuItem)items.elementAt(index));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified item to this menu.  If it was previously part of
+   * another menu, it is first removed from that menu.
+   *
+   * @param item The new item to add.
+   *
+   * @return The item that was added.
+   */
+ public MenuItem
+ add(MenuItem item)
+ {
+   items.addElement(item);
+   if (item.parent != null)
+     {
+       item.parent.remove(item);
+     }
+   item.parent = this;
+ 
+   if (peer != null)
+     {
+       MenuPeer mp = (MenuPeer) peer;
+       mp.addItem(item);
+     }
+ 
+   return item;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Add an item with the specified label to this menu.
+   *
+   * @param label The label of the menu item to add.
+   */
+ public void
+ add(String label)
+ {
+   add(new MenuItem(label));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Inserts the specified menu item into this menu at the specified index.
+   *
+   * @param item The menu item to add.
+   * @param index The index of the menu item.
+   *
+   * @exception IllegalArgumentException If the index is less than zero.
+   * @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
+   */
+ public void
+ insert(MenuItem item, int index)
+ {
+   if (index < 0)
+     throw new IllegalArgumentException("Index is less than zero");
+ 
+   MenuPeer peer = (MenuPeer) getPeer();
+   if (peer == null)
+     return;
+ 
+   int count = getItemCount ();
+ 
+   if (index >= count)
+     peer.addItem (item);
+   else
+     {
+       for (int i = count - 1; i >= index; i--)
+         peer.delItem (i);
+ 
+       peer.addItem (item);
+ 
+       for (int i = index; i < count; i++)
+         peer.addItem ((MenuItem) items.elementAt (i));
+     }
+ 
+   items.insertElementAt(item, index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Inserts an item with the specified label into this menu at the specified index.
+   *
+   * @param label The label of the item to add.
+   * @param index The index of the menu item.
+   *
+   * @exception IllegalArgumentException If the index is less than zero.
+   * @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
+   */
+ public void
+ insert(String label, int index)
+ {
+   insert(new MenuItem(label), index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds a separator bar at the current menu location.
+   */
+ public void
+ addSeparator()
+ {
+   add(new MenuItem(separatorLabel));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Inserts a separator bar at the specified index value.
+   *
+   * @param index The index at which to insert a separator bar.
+   *
+   * @exception IllegalArgumentException If the index is less than zero.
+   * @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
+   */
+ public void
+ insertSeparator(int index)
+ {
+   insert(new MenuItem(separatorLabel), index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Deletes the item at the specified index from this menu.
+   *
+   * @param index The index of the item to remove.
+   * 
+   * @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
+   */
+ public synchronized void
+ remove(int index)
+ {
+   items.removeElementAt(index);
+ 
+   MenuPeer mp = (MenuPeer)getPeer();
+   if (mp != null)
+     mp.delItem(index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specifed item from the menu.  If the specified component
+   * does not exist, this method does nothing.
+   *
+   * @param item The component to remove.
+   */
+ public void
+ remove(MenuComponent item)
+ {
+   int index = items.indexOf(item);
+   if (index == -1)
+     return;
+ 
+   remove(index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes all the elements from this menu.
+   */
+ public synchronized void
+ removeAll()
+ {
+   int count = getItemCount();
+   for(int i = 0; i < count; i++)
+     {
+       // We must always remove item 0.
+       remove(0);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Creates the native peer for this object.
+   */
+ public void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit().createMenu(this);
+   Enumeration e = items.elements();
+   while (e.hasMoreElements())
+   {
+     MenuItem mi = (MenuItem)e.nextElement();
+     mi.addNotify();
+   }    
+   super.addNotify ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Destroys the native peer for this object.
+   */
+ public void
+ removeNotify()
+ {
+   Enumeration e = items.elements();
+   while (e.hasMoreElements())
+   {
+     MenuItem mi = (MenuItem) e.nextElement();
+     mi.removeNotify();
+   }
+   super.removeNotify();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this menu.
+   *
+   * @return A debugging string for this menu.
+   */
+ public String
+ paramString()
+ {
+   return (",tearOff=" + tearOff + ",isHelpMenu=" + isHelpMenu
+ 	  + super.paramString());
+ }
+ 
+   /**
+    * Basic Accessibility class for Menu.  Details get provided in derived
+    * classes.
+    */
+   protected class AccessibleAWTMenu extends AccessibleAWTMenuItem
+   {
+     private static final long serialVersionUID = 5228160894980069094L;
+ 
+     protected AccessibleAWTMenu()
+     {
+     }
+     
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.MENU;
+     }
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this <code>Menu</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTMenu();
+     return accessibleContext;
+   }
+ 
+ } // class Menu
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/MenuBar.java gcc-4.1.0/libjava/classpath/java/awt/MenuBar.java
*** gcc-4.0.2/libjava/classpath/java/awt/MenuBar.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/MenuBar.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,423 ----
+ /* MenuBar.java -- An AWT menu bar class
+    Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.peer.MenuBarPeer;
+ import java.awt.peer.MenuComponentPeer;
+ 
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ import java.util.Vector;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ 
+ /**
+   * This class implements a menu bar in the AWT system.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@redhat.com)
+   * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+   */
+ public class MenuBar extends MenuComponent
+   implements MenuContainer, Serializable, Accessible
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization Constant
+ private static final long serialVersionUID = -4930327919388951260L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The menu used for providing help information
+   */
+ private Menu helpMenu;
+ 
+ /**
+   * @serial The menus contained in this menu bar.
+   */
+ private Vector menus = new Vector();
+ 
+   /**
+    * The accessible context for this component.
+    *
+    * @see #getAccessibleContext()
+    * @serial ignored.
+    */
+   private transient AccessibleContext accessibleContext;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>MenuBar</code>.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ MenuBar()
+ {
+   if (GraphicsEnvironment.isHeadless())
+     throw new HeadlessException ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the help menu for this menu bar.  This may be <code>null</code>.
+   *
+   * @return The help menu for this menu bar.
+   */
+ public Menu
+ getHelpMenu()
+ {
+   return(helpMenu);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the help menu for this menu bar.
+   *
+   * @param menu The new help menu for this menu bar.
+   */
+ public synchronized void
+ setHelpMenu(Menu menu)
+ {
+   if (helpMenu != null)
+     {
+       helpMenu.removeNotify ();
+       helpMenu.parent = null;
+     }
+   helpMenu = menu;
+ 
+   if (menu.parent != null)
+     menu.parent.remove (menu);
+   menu.parent = this;
+ 
+   MenuBarPeer peer = (MenuBarPeer) getPeer ();
+   if (peer != null)
+     {
+       menu.addNotify();
+       peer.addHelpMenu (menu);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /** Add a menu to this MenuBar.  If the menu has already has a
+  * parent, it is first removed from its old parent before being
+  * added.
+  *
+  * @param menu The menu to add.
+  *
+  * @return The menu that was added.
+  */
+ public synchronized Menu
+ add(Menu menu)
+ {
+   if (menu.parent != null)
+     menu.parent.remove (menu);
+ 
+   menu.parent = this;
+   menus.addElement(menu);
+ 
+   if (peer != null)
+     {
+       menu.addNotify();
+     }
+ 
+   return(menu);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the menu at the specified index.
+   *
+   * @param index The index of the menu to remove from the menu bar.
+   */
+ public synchronized void
+ remove(int index)
+ {
+   Menu m = (Menu) menus.get (index);
+   menus.remove (index);
+   m.removeNotify ();
+   m.parent = null;
+ 
+   if (peer != null)
+     {
+       MenuBarPeer mp = (MenuBarPeer) peer;
+       mp.delMenu (index);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specified menu from the menu bar.
+   *
+   * @param menu The menu to remove from the menu bar.
+   */
+ public void
+ remove(MenuComponent menu)
+ {
+   int index = menus.indexOf(menu);
+   if (index == -1)
+     return;
+ 
+   remove(index);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the number of elements in this menu bar.
+   *
+   * @return The number of elements in the menu bar.
+   */
+ public int
+ getMenuCount()
+ {
+   return countMenus ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the number of elements in this menu bar.
+   *
+   * @return The number of elements in the menu bar.
+   *
+   * @deprecated This method is deprecated in favor of <code>getMenuCount()</code>.
+   */
+ public int
+ countMenus()
+ {
+   return menus.size () + (getHelpMenu () == null ? 0 : 1);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the menu at the specified index.
+   *
+   * @param index the index of the menu
+   *
+   * @return The requested menu.
+   *
+   * @exception ArrayIndexOutOfBoundsException If the index is not valid.
+   */
+ public Menu
+ getMenu(int index)
+ {
+   return((Menu)menus.elementAt(index));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Creates this object's native peer.
+   */
+ public void
+ addNotify()
+ {
+   if (getPeer() == null)
+     setPeer((MenuComponentPeer)getToolkit().createMenuBar(this));
+   Enumeration e = menus.elements();
+   while (e.hasMoreElements())
+   {
+     Menu mi = (Menu)e.nextElement();
+     mi.addNotify();
+   }
+   if (helpMenu != null)
+   {
+     helpMenu.addNotify();
+     ((MenuBarPeer) peer).addHelpMenu(helpMenu);
+   }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Destroys this object's native peer.
+   */
+ public void
+ removeNotify()
+ {
+   Enumeration e = menus.elements();
+   while (e.hasMoreElements())
+   {
+     Menu mi = (Menu) e.nextElement();
+     mi.removeNotify();
+   }
+   super.removeNotify();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a list of all shortcuts for the menus in this menu bar.
+   *
+   * @return A list of all shortcuts for the menus in this menu bar.
+   */
+ public synchronized Enumeration
+ shortcuts()
+ {
+   Vector shortcuts = new Vector();
+   Enumeration e = menus.elements();
+ 
+   while (e.hasMoreElements())
+     {
+       Menu menu = (Menu)e.nextElement();
+       if (menu.getShortcut() != null)
+         shortcuts.addElement(menu.getShortcut());
+     }
+ 
+   return(shortcuts.elements());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the menu item for the specified shortcut, or <code>null</code>
+   * if no such item exists.
+   *
+   * @param shortcut The shortcut to return the menu item for.
+   *
+   * @return The menu item for the specified shortcut.
+   */
+ public MenuItem
+ getShortcutMenuItem(MenuShortcut shortcut)
+ {
+   Enumeration e = menus.elements();
+ 
+   while (e.hasMoreElements())
+     {
+       Menu menu = (Menu)e.nextElement();
+       MenuShortcut s = menu.getShortcut();
+       if ((s != null) && (s.equals(shortcut)))
+         return(menu);
+     }
+ 
+   return(null);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Deletes the specified menu shortcut.
+   *
+   * @param shortcut The shortcut to delete.
+   */
+ public void
+ deleteShortcut(MenuShortcut shortcut)
+ {
+   MenuItem it;
+   // This is a slow implementation, but it probably doesn't matter.
+   while ((it = getShortcutMenuItem (shortcut)) != null)
+     it.deleteShortcut ();
+ }
+ 
+ /**
+  * Gets the AccessibleContext associated with this <code>MenuBar</code>.
+  * The context is created, if necessary.
+  *
+  * @return the associated context
+  */
+ public AccessibleContext getAccessibleContext()
+ {
+   /* Create the context if this is the first request */
+   if (accessibleContext == null)
+     accessibleContext = new AccessibleAWTMenuBar();
+   return accessibleContext;
+ }
+ 
+ /**
+  * This class provides accessibility support for AWT menu bars.
+  *
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  */
+ protected class AccessibleAWTMenuBar
+   extends AccessibleAWTMenuComponent
+ {
+   
+   /**
+    * Compatible with JDK 1.4.2 revision 5
+    */
+   private static final long serialVersionUID = -8577604491830083815L;
+ 
+   /**
+    * This is the default constructor, which simply calls the default
+    * constructor of the superclass.
+    */
+   protected AccessibleAWTMenuBar()
+   {
+     super();
+   }
+ 
+   /**
+    * Returns the accessible role relating to the menu bar.
+    *
+    * @return <code>AccessibleRole.MENU_BAR</code>.
+    */
+   public AccessibleRole getAccessibleRole()
+   {
+     return AccessibleRole.MENU_BAR;
+   }
+ 
+ } // class AccessibleAWTMenuBar
+ 
+ } // class MenuBar
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/MenuComponent.java gcc-4.1.0/libjava/classpath/java/awt/MenuComponent.java
*** gcc-4.0.2/libjava/classpath/java/awt/MenuComponent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/MenuComponent.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1324 ----
+ /* MenuComponent.java -- Superclass of all AWT menu components
+    Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.peer.MenuComponentPeer;
+ import java.io.Serializable;
+ import java.util.Locale;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleComponent;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleSelection;
+ import javax.accessibility.AccessibleStateSet;
+ 
+ /**
+   * This is the superclass of all menu AWT widgets. 
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+   */
+ public abstract class MenuComponent implements Serializable
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization Constant
+ private static final long serialVersionUID = -4536902356223894379L;
+ 
+ /*************************************************************************/
+   
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+  * The font for this component.
+  *
+  * @see #getFont()
+  * @see #setFont(java.awt.Font)
+  * @serial the component's font.
+  */
+   private Font font;
+ 
+   /**
+    * The name of the component.
+    *
+    * @see #getName()
+    * @see #setName(String)
+    * @serial the component's name.
+    */
+   private String name;
+ 
+   /**
+    * The parent of this component.
+    *
+    * @see #getParent()
+    * @see #setParent(java.awt.MenuContainer)
+    * @serial ignored.
+    */
+   transient MenuContainer parent;
+ 
+   /**
+    * The native peer for this component.
+    *
+    * @see #getPeer()
+    * @see #setPeer(java.awt.peer.MenuComponentPeer)
+    * @serial ignored.
+    */
+   transient MenuComponentPeer peer;
+ 
+   /**
+    * The synchronization locking object for this component.
+    *
+    * @serial ignored.
+    */
+   private transient Object tree_lock = this;
+ 
+   /**
+    * The toolkit for this object.
+    *
+    * @see #getToolkit()
+    * @serial ignored.
+    */
+   private static transient Toolkit toolkit = Toolkit.getDefaultToolkit();
+ 
+   /**
+    * The accessible context for this component.
+    *
+    * @see #getAccessibleContext()
+    * @serial the accessibility information for this component.
+    */
+   AccessibleContext accessibleContext;
+ 
+   /**
+    * Was the name of the component set?  This value defaults
+    * to false and becomes true after a call to <code>setName()</code>.
+    * Please note that this does not guarantee that name will then
+    * be non-null, as this may be the value passed to <code>setName()</code>.
+    *
+    * @see #setName(String)
+    * @serial true if the name value has been explicitly set by calling
+    *         <code>setName()</code>.
+    */
+   private boolean nameExplicitlySet;
+ 
+   /**
+    * Does this component handle new events?  Events will be handled
+    * by this component if this is true.  Otherwise, they will be forwarded
+    * up the component hierarchy.  This implementation does not use this
+    * variable; it is merely provided for serialization compatability.
+    *
+    * @see #dispatchEvent(AWTEvent)
+    * @serial true if events are to be processed locally.  Unused.
+    */
+   private boolean newEventsOnly;
+ 
+   /**
+    * The focus listener chain handler which deals with focus events for
+    * the accessible context of this component.
+    *
+    * @see AccessibleAWTMenuComponent#addFocusListener(java.awt.event.FocusListener)
+    * @serial ignored.
+    * This is package-private to avoid an accessor method.
+    */
+   transient FocusListener focusListener;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Default constructor for subclasses.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ MenuComponent()
+ {
+   if (GraphicsEnvironment.isHeadless())
+     throw new HeadlessException ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the font in use for this component.
+   *
+   * @return The font for this component.
+   */
+ public Font
+ getFont()
+ {
+   if (font != null)
+     return font;
+ 
+   if (parent != null)
+     return parent.getFont ();
+ 
+   return null;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the font for this component to the specified font.
+   *
+   * @param font The new font for this component.
+   */
+ public void
+ setFont(Font font)
+ {
+   this.font = font;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the name of this component.
+   *
+   * @return The name of this component.
+   */
+ public String
+ getName()
+ {
+   return(name);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the name of this component to the specified name.
+   *
+   * @param name The new name of this component.
+   */
+ public void
+ setName(String name)
+ {
+   this.name = name;
+   nameExplicitlySet = true;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the parent of this component.
+   * 
+   * @return The parent of this component.
+   */
+ public MenuContainer
+ getParent()
+ {
+   return(parent);
+ } 
+ 
+ /*************************************************************************/
+ 
+ // Sets the parent of this component.
+ final void
+ setParent(MenuContainer parent)
+ {
+   this.parent = parent;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the native windowing system peer for this component.
+   *
+   * @return The peer for this component.
+   *
+   * @deprecated
+   */
+ public MenuComponentPeer
+ getPeer()
+ {
+   return(peer);
+ }
+ 
+ /*************************************************************************/
+ 
+ // Sets the peer for this component.
+ final void
+ setPeer(MenuComponentPeer peer)
+ {
+   this.peer = peer;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Destroys this component's native peer
+   */
+ public void
+ removeNotify()
+ {
+   if (peer != null)
+     peer.dispose();
+   peer = null;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the toolkit in use for this component.
+   *
+   * @return The toolkit for this component.
+   */
+ final Toolkit
+ getToolkit()
+ {
+   return(toolkit);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the object used for synchronization locks on this component
+   * when performing tree and layout functions.
+   *
+   * @return The synchronization lock for this component.
+   */
+ protected final Object
+ getTreeLock()
+ {
+   return(tree_lock);
+ }
+ 
+ /*************************************************************************/
+ 
+ // The sync lock object for this component.
+ final void
+ setTreeLock(Object tree_lock)
+ {
+   this.tree_lock = tree_lock;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * AWT 1.0 event dispatcher.
+   *
+   * @deprecated Deprecated in favor of <code>dispatchEvent()</code>.
+   * @return true if the event was dispatched, false otherwise.
+   */
+ public boolean
+ postEvent(Event event)
+ {
+   // This is overridden by subclasses that support events.
+   return false;
+ }
+ /*************************************************************************/
+ 
+ /**
+   * Sends this event to this component or a subcomponent for processing.
+   *
+   * @param event The event to dispatch
+   */
+ public final void dispatchEvent(AWTEvent event)
+ {
+   // See comment in Component.dispatchEvent().
+   dispatchEventImpl(event);
+ }
+ 
+ 
+ /**
+  * Implementation of dispatchEvent. Allows trusted package classes
+  * to dispatch additional events first.  This implementation first
+  * translates <code>event</code> to an AWT 1.0 event and sends the
+  * result to {@link #postEvent}.  The event is then
+  * passed on to {@link #processEvent} for local processing.
+  *
+  * @param event the event to dispatch.
+  */
+ void dispatchEventImpl(AWTEvent event)
+ {
+   Event oldStyleEvent;
+ 
+   // This is overridden by subclasses that support events.
+   /* Convert AWT 1.1 event to AWT 1.0 event */
+   oldStyleEvent = Component.translateEvent(event);
+   if (oldStyleEvent != null)
+     {
+       postEvent(oldStyleEvent);
+     }
+   /* Do local processing */
+   processEvent(event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes the specified event.  In this class, this method simply
+   * calls one of the more specific event handlers.
+   * 
+   * @param event The event to process.
+   */
+ protected void
+ processEvent(AWTEvent event)
+ {
+   /* 
+      Pass a focus event to the focus listener for
+      the accessibility context.
+   */
+   if (event instanceof FocusEvent)
+     {
+       if (focusListener != null)
+         {
+           switch (event.id)
+             {
+             case FocusEvent.FOCUS_GAINED:
+               focusListener.focusGained((FocusEvent) event);
+               break;
+             case FocusEvent.FOCUS_LOST:
+               focusListener.focusLost((FocusEvent) event);
+               break;
+             }
+         }
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a string representation of this component.
+   *
+   * @return A string representation of this component
+   */
+ public String
+ toString()
+ {
+   return this.getClass().getName() + "[" + paramString() + "]";
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns a debugging string for this component
+  */
+ protected String
+ paramString()
+ {
+   return "name=" + getName();
+ }
+ 
+ /**
+  * Gets the AccessibleContext associated with this <code>MenuComponent</code>.
+  * As an abstract class, we return null.  Concrete subclasses should return
+  * their implementation of the accessibility context.
+  *
+  * @return null.
+  */
+ 
+ public AccessibleContext getAccessibleContext()
+ {
+   return null;
+ }
+ 
+ /**
+  * This class provides a base for the accessibility support of menu
+  * components.
+  *
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  */
+ protected abstract class AccessibleAWTMenuComponent
+   extends AccessibleContext
+   implements Serializable, AccessibleComponent, AccessibleSelection
+ {
+ 
+   /**
+    * Compatible with JDK 1.4.2 revision 5
+    */
+   private static final long serialVersionUID = -4269533416223798698L;
+ 
+   /**
+    * This is the default constructor.  It should be called by
+    * concrete subclasses to ensure necessary groundwork is completed.
+    */
+   protected AccessibleAWTMenuComponent()
+   {
+   }
+ 
+   /**
+    * Replaces or supplements the component's selection with the
+    * <code>Accessible</code> child at the supplied index.  If
+    * the component supports multiple selection, the child is
+    * added to the current selection.  Otherwise, the current
+    * selection becomes the specified child.  If the child is
+    * already selected, nothing happens.
+    * <br />
+    * <br />
+    * As the existence of children can not be determined from
+    * this abstract class, the implementation of this method
+    * is left to subclasses.
+    *
+    * @param index the index of the specified child within a
+    *        zero-based list of the component's children.
+    */
+   public void addAccessibleSelection(int index)
+   {
+     /* Subclasses with children should implement this */
+   }
+ 
+   /**
+    * Registers the specified focus listener to receive
+    * focus events from this component.
+    *
+    * @param listener the new focus listener.
+    */
+   public void addFocusListener(FocusListener listener)
+   {
+     /*
+      * Chain the new focus listener to the existing chain
+      * of focus listeners.  Each new focus listener is
+      * coupled via multicasting to the existing chain.
+      */
+     focusListener = AWTEventMulticaster.add(focusListener, listener);
+   }
+ 
+   /**
+    * Clears the component's current selection.  Following
+    * the calling of this method, no children of the component
+    * will be selected.
+    * <br />
+    * <br />
+    * As the existence of children can not be determined from
+    * this abstract class, the implementation of this method
+    * is left to subclasses.
+    */
+   public void clearAccessibleSelection()
+   {
+   }
+ 
+   /**
+    * Returns true if the specified point lies within the
+    * component.  The supplied co-ordinates are assumed to
+    * be relative to the co-ordinate system of the component
+    * itself.  Thus, the point (0,0) is the upper left corner
+    * of this component.
+    * <br />
+    * <br />
+    * Please note that this method depends on a correctly implemented
+    * version of the <code>getBounds()</code> method.  Subclasses
+    * must provide the bounding rectangle via <code>getBounds()</code>
+    * in order for this method to work.  
+    *
+    * @param point the point to check against this component.
+    * @return true if the point is within this component.
+    * @see #getBounds()
+    */
+   public boolean contains(Point point)
+   {
+     /* 
+        We can simply return the result of a
+        test for containment in the bounding rectangle 
+     */
+     return getBounds().contains(point);
+   }
+ 
+   /**
+    * Returns the <code>Accessible</code> child of this component present
+    * at the specified point.  The supplied co-ordinates are
+    * assumed to be relative to the co-ordinate system of this
+    * component (the parent of any returned accessible).  Thus,
+    * the point (0,0) is the upper left corner of this menu
+    * component.
+    * <br />
+    * <br />
+    * As the existence of children can not be determined from
+    * this abstract class, the implementation of this method
+    * is left to subclasses.
+    * 
+    * @param point the point at which the returned accessible
+    *        is located.
+    * @return null.
+    */
+   public Accessible getAccessibleAt(Point point)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the <code>Accessible</code> child at the supplied
+    * index within the list of children of this component.
+    * <br />
+    * <br />
+    * As the existence of children can not be determined from
+    * this abstract class, the implementation of this method
+    * is left to subclasses.
+    *
+    * @param index the index of the <code>Accessible</code> child
+    *        to retrieve.
+    * @return null.
+    */
+   public Accessible getAccessibleChild(int index)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the number of children of this component which
+    * implement the <code>Accessible</code> interface.  If
+    * all children of this component are accessible, then
+    * the returned value will be the same as the number of
+    * children.
+    * <br />
+    * <br />
+    *
+    * @return 0.
+    */
+   public int getAccessibleChildrenCount()
+   {
+     return 0;
+   }
+ 
+   /**
+    * Retrieves the <code>AccessibleComponent</code> associated
+    * with this accessible context and its component.  As the
+    * context itself implements <code>AccessibleComponent</code>,
+    * this is the return value.
+    *
+    * @return the context itself.
+    */
+   public AccessibleComponent getAccessibleComponent()
+   {
+     return this;
+   }
+ 
+   /**
+    * Returns the accessible name for this menu component.  This
+    * is the name given to the component, which may be null if
+    * not set using <code>setName()</code>.
+    * <br />
+    * <br />
+    * The name is not the most appropriate description of this
+    * object.  Subclasses should preferably provide a more
+    * accurate description.  For example, a File menu could
+    * have the description `Lists commands related to the
+    * file system'.
+    *
+    * @return a description of the component.  Currently,
+    *         this is just the contents of the name property.
+    * @see MenuComponent#setName(String)
+    */
+   public String getAccessibleDescription()
+   {
+     return MenuComponent.this.getName();
+   }
+ 
+   /**
+    * Retrieves the index of this component within its parent.
+    * If no parent exists, -1 is returned.
+    *
+    * @return -1 as the parent, a <code>MenuContainer</code>
+    *         is not <code>Accessible</code>.
+    */
+   public int getAccessibleIndexInParent()
+   {
+     return -1;
+   }
+ 
+   /**
+    * Returns the accessible name of this component.  This
+    * is the name given to the component, which may be null if
+    * not set using <code>setName()</code>.
+    * <br />
+    * <br />
+    * The name property is not the most suitable string to return
+    * for this method.  The string should be localized, and
+    * relevant to the operation of the component.  For example,
+    * it could be the text of a menu item.  However, this can
+    * not be used at this level of abstraction, so it is the
+    * responsibility of subclasses to provide a more appropriate
+    * name.
+    *
+    * @return a localized name for this component.  Currently, this
+    *         is just the contents of the name property.
+    * @see MenuComponent#setName(String)
+    */
+   public String getAccessibleName()
+   {
+     return MenuComponent.this.getName();
+   }
+ 
+   /**
+    * Returns the <code>Accessible</code> parent of this component.
+    * As the parent of a <code>MenuComponent</code> is a
+    * <code>MenuContainer</code>, which doesn't implement
+    * <code>Accessible</code>, this method returns null.
+    *
+    * @return null.
+    */
+   public Accessible getAccessibleParent()
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the accessible role of this component.
+    * <br />
+    * <br />
+    * The abstract implementation of this method returns
+    * <code>AccessibleRole.AWT_COMPONENT</code>,
+    * as the abstract component has no specific role.  This
+    * method should be overridden by concrete subclasses, so
+    * as to return an appropriate role for the component.
+    *
+    * @return <code>AccessibleRole.AWT_COMPONENT</code>.
+    */
+   public AccessibleRole getAccessibleRole()
+   {
+     return AccessibleRole.AWT_COMPONENT;
+   }
+ 
+   /**
+    * Retrieves the <code>AccessibleSelection</code> associated
+    * with this accessible context and its component.  As the
+    * context itself implements <code>AccessibleSelection</code>,
+    * this is the return value.
+    *
+    * @return the context itself.
+    */
+   public AccessibleSelection getAccessibleSelection()
+   {
+     return this;
+   }
+ 
+   /**
+    * Retrieves the <code>Accessible</code> selected child
+    * at the specified index.  If there are no selected children
+    * or the index is outside the range of selected children,
+    * null is returned.  Please note that the index refers
+    * to the index of the child in the list of <strong>selected
+    * children</strong>, and not the index of the child in
+    * the list of all <code>Accessible</code> children.
+    * <br />
+    * <br />
+    * As the existence of children can not be determined from
+    * this abstract class, the implementation of this method
+    * is left to subclasses.
+    *
+    * @param index the index of the selected <code>Accessible</code>
+    *        child.
+    */
+   public Accessible getAccessibleSelection(int index)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns a count of the number of <code>Accessible</code>
+    * children of this component which are currently selected.
+    * If there are no children currently selected, 0 is returned.
+    * <br />
+    * <br />
+    * As the existence of children can not be determined from
+    * this abstract class, the implementation of this method
+    * is left to subclasses.
+    *
+    * @return 0.
+    */
+   public int getAccessibleSelectionCount()
+   {
+     return 0;
+   }
+ 
+   /**
+    * Retrieves the current state of this component
+    * in an accessible form.  For example, a given component
+    * may be visible, selected, disabled, etc.
+    * <br />
+    * <br />
+    * As this class tells us virtually nothing about the component,
+    * except for its name and font, no state information can be
+    * provided.  This implementation thus returns an empty
+    * state set, and it is left to concrete subclasses to provide
+    * a more acceptable and relevant state set.  Changes to these
+    * properties also need to be handled using
+    * <code>PropertyChangeListener</code>s.
+    *
+    * @return an empty <code>AccessibleStateSet</code>.
+    */
+   public AccessibleStateSet getAccessibleStateSet()
+   {
+     return new AccessibleStateSet();
+   }
+ 
+   /**
+    * Returns the background color of the component, or null
+    * if this property is unsupported.
+    * <br />
+    * <br />
+    * This abstract class knows nothing about how the component
+    * is drawn on screen, so this method simply returns the
+    * default system background color used for rendering menus.
+    * Concrete subclasses which handle the drawing of an onscreen
+    * menu component should override this method and provide
+    * the appropriate information.
+    *
+    * @return the default system background color for menus.
+    * @see #setBackground(java.awt.Color)
+    */
+   public Color getBackground()
+   {
+     return SystemColor.menu;
+   }
+ 
+   /**
+    * Returns a <code>Rectangle</code> which represents the
+    * bounds of this component.  The returned rectangle has the
+    * height and width of the component's bounds, and is positioned
+    * at a location relative to this component's parent, the
+    * <code>MenuContainer</code>.  null is returned if bounds
+    * are not supported by the component.
+    * <br />
+    * <br />
+    * This abstract class knows nothing about how the component
+    * is drawn on screen, so this method simply returns null.
+    * Concrete subclasses which handle the drawing of an onscreen
+    * menu component should override this method and provide
+    * the appropriate information.
+    *
+    * @return null.
+    * @see #setBounds(java.awt.Rectangle)
+    */
+   public Rectangle getBounds()
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the <code>Cursor</code> displayed when the pointer
+    * is positioned over this component.  Alternatively, null
+    * is returned if the component doesn't support the cursor
+    * property.
+    * <br />
+    * <br />
+    * This abstract class knows nothing about how the component
+    * is drawn on screen, so this method simply returns the default
+    * system cursor.  Concrete subclasses which handle the drawing
+    * of an onscreen menu component may override this method and provide
+    * the appropriate information.
+    *
+    * @return the default system cursor.
+    * @see #setCursor(java.awt.Cursor)
+    */
+   public Cursor getCursor()
+   {
+     return Cursor.getDefaultCursor();
+   }
+ 
+   /**
+    * Returns the <code>Font</code> used for text created by this component.
+    *
+    * @return the current font.
+    * @see #setFont(java.awt.Font)
+    */
+   public Font getFont()
+   {
+     return MenuComponent.this.getFont();
+   }
+ 
+   /**
+    * Retrieves information on the rendering and metrics of the supplied
+    * font.  If font metrics are not supported by this component, null
+    * is returned.
+    * <br />
+    * <br />
+    * The abstract implementation of this method simply uses the toolkit
+    * to obtain the <code>FontMetrics</code>.  Concrete subclasses may
+    * find it more efficient to invoke their peer class directly, if one
+    * is available.
+    *
+    * @param font the font about which to retrieve rendering and metric
+    *        information.
+    * @return the metrics of the given font, as provided by the system
+    *         toolkit.
+    * @throws NullPointerException if the supplied font was null.
+    */
+   public FontMetrics getFontMetrics(Font font)
+   {
+     return MenuComponent.this.getToolkit().getFontMetrics(font);
+   }
+ 
+   /**
+    * Returns the foreground color of the component, or null
+    * if this property is unsupported.
+    * <br />
+    * <br />
+    * This abstract class knows nothing about how the component
+    * is drawn on screen, so this method simply returns the
+    * default system text color used for rendering menus.
+    * Concrete subclasses which handle the drawing of an onscreen
+    * menu component should override this method and provide
+    * the appropriate information.
+    *
+    * @return the default system text color for menus.
+    * @see #setForeground(java.awt.Color)
+    */
+   public Color getForeground()
+   {
+     return SystemColor.menuText;
+   }
+ 
+   /**
+    * Returns the locale currently in use by this component.
+    * <br />
+    * <br />
+    * This abstract class has no property relating to the
+    * locale used by the component, so this method simply
+    * returns the default locale for the current instance
+    * of the Java Virtual Machine (JVM).  Concrete subclasses
+    * which maintain such a property should override this method
+    * and provide the locale information more accurately.
+    *
+    * @return the default locale for this JVM instance.
+    */
+   public Locale getLocale()
+   {
+     return Locale.getDefault();
+   }
+ 
+   /**
+    * Returns the location of the component, with co-ordinates
+    * relative to the parent component and using the co-ordinate
+    * space of the screen.  Thus, the point (0,0) is the upper
+    * left corner of the parent component.
+    * <br />
+    * <br />
+    * Please note that this method depends on a correctly implemented
+    * version of the <code>getBounds()</code> method.  Subclasses
+    * must provide the bounding rectangle via <code>getBounds()</code>
+    * in order for this method to work.  
+    *
+    * @return the location of the component, relative to its parent.
+    * @see #setLocation(java.awt.Point)
+    */
+   public Point getLocation()
+   {
+     /* Simply return the location of the bounding rectangle */
+     return getBounds().getLocation();
+   }
+ 
+   /**
+    * Returns the location of the component, with co-ordinates
+    * relative to the screen.  Thus, the point (0,0) is the upper
+    * left corner of the screen.  null is returned if the component
+    * is either not on screen or if this property is unsupported.
+    * <br />
+    * <br />
+    * This abstract class knows nothing about how the component
+    * is drawn on screen, so this method simply returns null.
+    * Concrete subclasses which handle the drawing of an onscreen
+    * menu component should override this method and provide
+    * the appropriate information.
+    *
+    * @return the location of the component, relative to the screen.
+    */
+   public Point getLocationOnScreen()
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the size of the component.
+    * <br />
+    * <br />
+    * Please note that this method depends on a correctly implemented
+    * version of the <code>getBounds()</code> method.  Subclasses
+    * must provide the bounding rectangle via <code>getBounds()</code>
+    * in order for this method to work.  
+    *
+    * @return the size of the component.
+    * @see #setSize(java.awt.Dimension)
+    */
+   public Dimension getSize()
+   {
+     /* Simply return the size of the bounding rectangle */
+     return getBounds().getSize();
+   }
+ 
+   /**
+    * Returns true if the accessible child specified by the supplied index
+    * is currently selected.
+    * <br />
+    * <br />
+    * As the existence of children can not be determined from
+    * this abstract class, the implementation of this method
+    * is left to subclasses.
+    *
+    * @param index the index of the accessible child to check for selection.
+    * @return false.
+    */
+   public boolean isAccessibleChildSelected(int index)
+   {
+     return false;
+   }
+ 
+   /**
+    * Returns true if this component is currently enabled.
+    * <br />
+    * <br />
+    * As this abstract component has no properties related to
+    * its enabled or disabled state, the implementation of this
+    * method is left to subclasses.
+    *
+    * @return false.
+    * @see #setEnabled(boolean)
+    */
+   public boolean isEnabled()
+   {
+     return false;
+   }
+ 
+   /**
+    * Returns true if this component is included in the traversal
+    * of the current focus from one component to the other.
+    * <br />
+    * <br />
+    * As this abstract component has no properties related to
+    * its ability to accept the focus, the implementation of this
+    * method is left to subclasses.
+    *
+    * @return false.
+    */
+   public boolean isFocusTraversable()
+   {
+     return false;
+   }
+ 
+   /**
+    * Returns true if the component is being shown on screen.
+    * A component is determined to be shown if it is visible,
+    * and each parent component is also visible.  Please note
+    * that, even when a component is showing, it may still be
+    * obscured by other components in front.  This method only
+    * determines if the component is being drawn on the screen.
+    * <br />
+    * <br />
+    * As this abstract component and its parent have no properties
+    * relating to visibility, the implementation of this method is
+    * left to subclasses.
+    *
+    * @return false.
+    * @see #isVisible()
+    */
+   public boolean isShowing()
+   {
+     return false;
+   }
+ 
+   /**
+    * Returns true if the component is visible.  A component may
+    * be visible but not drawn on the screen if one of its parent
+    * components is not visible.  To determine if the component is
+    * actually drawn on screen, <code>isShowing()</code> should be
+    * used.
+    * <br />
+    * <br />
+    * As this abstract component has no properties relating to its
+    * visibility, the implementation of this method is left to subclasses.
+    *
+    * @return false.
+    * @see #isShowing()
+    * @see #setVisible(boolean)
+    */
+   public boolean isVisible()
+   {
+     return false;
+   }
+ 
+   /**
+    * Removes the accessible child specified by the supplied index from
+    * the list of currently selected children.  If the child specified
+    * is not selected, nothing happens.
+    * <br />
+    * <br />
+    * As the existence of children can not be determined from
+    * this abstract class, the implementation of this method
+    * is left to subclasses.
+    *
+    * @param index the index of the <code>Accessible</code> child.
+    */
+   public void removeAccessibleSelection(int index)
+   {
+     /* Subclasses with children should implement this */
+   }
+ 
+   /**
+    * Removes the specified focus listener from the list of registered
+    * focus listeners for this component.
+    *
+    * @param listener the listener to remove.
+    */
+   public void removeFocusListener(FocusListener listener)
+   {
+     /* Remove the focus listener from the chain */
+     focusListener = AWTEventMulticaster.remove(focusListener, listener);
+   }
+ 
+   /**
+    * Requests that this component gains focus.  This depends on the
+    * component being focus traversable.
+    * <br />
+    * <br />
+    * As this abstract component has no properties relating to its
+    * focus traversability, or access to a peer with request focusing
+    * abilities, the implementation of this method is left to subclasses.
+    */
+   public void requestFocus()
+   {
+     /* Ignored */
+   }
+ 
+   /**
+    * Selects all <code>Accessible</code> children of this component which
+    * it is possible to select.  The component needs to support multiple
+    * selections.
+    * <br />
+    * <br />
+    * This abstract component provides a simplistic implementation of this
+    * method, which ignores the ability of the component to support multiple
+    * selections and simply uses <code>addAccessibleSelection</code> to
+    * add each <code>Accessible</code> child to the selection.  The last
+    * <code>Accessible</code> component is thus selected for components
+    * which don't support multiple selections.  Concrete implementations should
+    * override this with a more appopriate and efficient implementation, which
+    * properly takes into account the ability of the component to support multiple
+    * selections. 
+    */
+   public void selectAllAccessibleSelection()
+   {
+     /* Simply call addAccessibleSelection() on all accessible children */
+     for (int a = 0; a < getAccessibleChildrenCount(); ++a)
+       {
+         addAccessibleSelection(a);
+       }
+   }
+ 
+   /**
+    * Sets the background color of the component to that specified.
+    * Unspecified behaviour occurs when null is given as the new
+    * background color.
+    * <br />
+    * <br />
+    * This abstract class knows nothing about how the component
+    * is drawn on screen, so this method simply ignores the supplied
+    * color and continues to use the default system color.   
+    * Concrete subclasses which handle the drawing of an onscreen
+    * menu component should override this method and provide
+    * the appropriate information.
+    *
+    * @param color the new color to use for the background.
+    * @see #getBackground()
+    */
+   public void setBackground(Color color)
+   {
+     /* Ignored */
+   }
+ 
+   /**
+    * Sets the height and width of the component, and its position
+    * relative to this component's parent, to the values specified
+    * by the supplied rectangle.  Unspecified behaviour occurs when
+    * null is given as the new bounds.
+    * <br />
+    * <br />
+    * This abstract class knows nothing about how the component
+    * is drawn on screen, so this method simply ignores the new
+    * rectangle and continues to return null from <code>getBounds()</code>.
+    * Concrete subclasses which handle the drawing of an onscreen
+    * menu component should override this method and provide
+    * the appropriate information.
+    *
+    * @param rectangle a rectangle which specifies the new bounds of
+    *        the component.
+    * @see #getBounds()
+    */
+   public void setBounds(Rectangle rectangle)
+   {
+     /* Ignored */
+   }
+ 
+   /**
+    * Sets the <code>Cursor</code> used when the pointer is positioned over the
+    * component.  Unspecified behaviour occurs when null is given as the new
+    * cursor.
+    * <br />
+    * <br />
+    * This abstract class knows nothing about how the component
+    * is drawn on screen, so this method simply ignores the new cursor
+    * and continues to return the default system cursor.  Concrete
+    * subclasses which handle the drawing of an onscreen menu component
+    * may override this method and provide the appropriate information.
+    *
+    * @param cursor the new cursor to use.
+    * @see #getCursor()
+    */
+   public void setCursor(Cursor cursor)
+   {
+     /* Ignored */
+   }
+ 
+   /**
+    * Sets the enabled/disabled state of this component.
+    * <br />
+    * <br />
+    * As this abstract component has no properties related to
+    * its enabled or disabled state, the implementation of this
+    * method is left to subclasses.
+    *
+    * @param enabled true if the component should be enabled,
+    *        false otherwise.
+    * @see #isEnabled()
+    */
+   public void setEnabled(boolean enabled)
+   {
+     /* Ignored */
+   }
+ 
+   /**
+    * Sets the <code>Font</code> used for text created by this component.
+    * Unspecified behaviour occurs when null is given as the new
+    * font.
+    *
+    * @param font the new font to use for text.
+    * @see #getFont()
+    */
+   public void setFont(Font font)
+   {
+     /* Call the method of the enclosing component */
+     MenuComponent.this.setFont(font);
+   }
+ 
+   /**
+    * Sets the foreground color of the component to that specified.
+    * Unspecified behaviour occurs when null is given as the new
+    * background color.
+    * <br />
+    * <br />
+    * This abstract class knows nothing about how the component
+    * is drawn on screen, so this method simply ignores the supplied
+    * color and continues to return the default system text color used
+    * for rendering menus.
+    * Concrete subclasses which handle the drawing of an onscreen
+    * menu component should override this method and provide
+    * the appropriate information.
+    *
+    * @param color the new foreground color.
+    * @see #getForeground()
+    */
+   public void setForeground(Color color)
+   {
+     /* Ignored */
+   }
+ 
+   /**
+    * Sets the location of the component, with co-ordinates
+    * relative to the parent component and using the co-ordinate
+    * space of the screen.  Thus, the point (0,0) is the upper
+    * left corner of the parent component.
+    * <br />
+    * <br />
+    * Please note that this method depends on a correctly implemented
+    * version of the <code>getBounds()</code> method.  Subclasses
+    * must provide the bounding rectangle via <code>getBounds()</code>
+    * in order for this method to work.  
+    *
+    * @param point the location of the component, relative to its parent.
+    * @see #getLocation()
+    */
+   public void setLocation(Point point)
+   {
+     getBounds().setLocation(point);
+   }
+ 
+   /**
+    * Sets the size of the component.
+    * <br />
+    * <br />
+    * Please note that this method depends on a correctly implemented
+    * version of the <code>getBounds()</code> method.  Subclasses
+    * must provide the bounding rectangle via <code>getBounds()</code>
+    * in order for this method to work.  
+    *
+    * @param size the new size of the component.
+    * @see #getSize()
+    */
+   public void setSize(Dimension size)
+   {
+     getBounds().setSize(size);
+   }
+ 
+   /**
+    * Sets the visibility state of the component.  A component may
+    * be visible but not drawn on the screen if one of its parent
+    * components is not visible.  To determine if the component is
+    * actually drawn on screen, <code>isShowing()</code> should be
+    * used.
+    * <br />
+    * <br />
+    * As this abstract component has no properties relating to its
+    * visibility, the implementation of this method is left to subclasses.
+    *
+    * @param visibility the new visibility of the component -- true if
+    *        the component is visible, false if not.
+    * @see #isShowing()
+    * @see #isVisible()
+    */
+   public void setVisible(boolean visibility)
+   {
+     /* Ignored */
+   }
+ 
+ } /* class AccessibleAWTMenuComponent */
+           
+ 
+ } // class MenuComponent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/MenuContainer.java gcc-4.1.0/libjava/classpath/java/awt/MenuContainer.java
*** gcc-4.0.2/libjava/classpath/java/awt/MenuContainer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/MenuContainer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* MenuContainer.java -- container for menu items
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This interface is a container for menu components.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface MenuContainer
+ {
+   /**
+    * Returns the font in use by this container.
+    *
+    * @return the menu font
+    */
+   Font getFont();
+ 
+   /**
+    * Removes the specified menu component from the menu.
+    *
+    * @param component the menu component to remove
+    */
+   void remove(MenuComponent component);
+ 
+   /**
+    * Posts an event to the listeners.
+    *
+    * @param event the event to dispatch
+    * @deprecated use {@link MenuComponent#dispatchEvent(AWTEvent)} instead
+    */
+   boolean postEvent(Event event);
+ } // interface MenuContainer
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/MenuItem.java gcc-4.1.0/libjava/classpath/java/awt/MenuItem.java
*** gcc-4.0.2/libjava/classpath/java/awt/MenuItem.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/MenuItem.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,602 ----
+ /* MenuItem.java -- An item in a menu
+    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.awt.peer.MenuItemPeer;
+ import java.io.Serializable;
+ import java.lang.reflect.Array;
+ import java.util.EventListener;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleAction;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleValue;
+ 
+ /**
+   * This class represents an item in a menu.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class MenuItem extends MenuComponent
+   implements Serializable, Accessible
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization Constant
+ private static final long serialVersionUID = -21757335363267194L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The name of the action command generated by this item.
+   * This is package-private to avoid an accessor method.
+   */
+ String actionCommand;
+ 
+ /**
+   * @serial Indicates whether or not this menu item is enabled.
+   * This is package-private to avoid an accessor method.
+   */
+ boolean enabled = true;
+ 
+ /**
+   * @serial The mask of events that are enabled for this menu item.
+   */
+ long eventMask;
+ 
+ /**
+   * @serial This menu item's label
+   * This is package-private to avoid an accessor method.
+   */
+ String label = "";
+ 
+ /**
+   * @serial The shortcut for this menu item, if any
+   */
+ private MenuShortcut shortcut;
+ 
+ // The list of action listeners for this menu item.
+ private transient ActionListener action_listeners;
+ 
+   protected class AccessibleAWTMenuItem
+     extends MenuComponent.AccessibleAWTMenuComponent
+     implements AccessibleAction, AccessibleValue
+   {
+     private static final long serialVersionUID = -217847831945965825L;
+ 
+     /** Constructor */
+     public AccessibleAWTMenuItem()
+     {
+       super();
+     }
+   
+   
+   
+     public String getAccessibleName()
+     {
+       return label;
+     }
+   
+     public AccessibleAction getAccessibleAction()
+     {
+       return this;
+     }
+   
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.MENU_ITEM;
+     }
+   
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
+      */
+     public int getAccessibleActionCount()
+     {
+       return 1;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
+      */
+     public String getAccessibleActionDescription(int i)
+     {
+       if (i == 0)
+ 	return label;
+       else
+ 	return null;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
+      */
+     public boolean doAccessibleAction(int i)
+     {
+       if (i != 0)
+ 	return false;
+       processActionEvent(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand));
+       return true;
+     }
+ 
+     public AccessibleValue getAccessibleValue()
+     {
+       return this;
+     }
+   
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
+      */
+     public Number getCurrentAccessibleValue()
+     {
+       return (enabled) ? new Integer(1) : new Integer(0);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
+      */
+     public boolean setCurrentAccessibleValue(Number number)
+     {
+       boolean result = (number.intValue() != 0);
+       // this. is required by javac 1.3, otherwise it is confused with
+       // MenuItem.this.setEnabled.
+       this.setEnabled(result);
+       return result; 
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
+      */
+     public Number getMinimumAccessibleValue()
+     {
+       return new Integer(0);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
+      */
+     public Number getMaximumAccessibleValue()
+     {
+       return new Integer(0);
+     }
+   
+   }
+ 
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>MenuItem</code> with no label
+   * and no shortcut.
+   */
+ public
+ MenuItem()
+ {
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>MenuItem</code> with the specified
+   * label and no shortcut.
+   *
+   * @param label The label for this menu item.
+   */
+ public 
+ MenuItem(String label)
+ {
+   this.label = label;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>MenuItem</code> with the specified
+   * label and shortcut.
+   *
+   * @param label The label for this menu item.
+   * @param shortcut The shortcut for this menu item.
+   */
+ public
+ MenuItem(String label, MenuShortcut shortcut)
+ {
+   this.label = label;
+   this.shortcut = shortcut;
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the label for this menu item, which may be <code>null</code>.
+   *
+   * @return The label for this menu item.
+   */
+ public String
+ getLabel()
+ {
+   return(label);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method sets the label for this menu to the specified value.
+   *
+   * @param label The new label for this menu item.
+   */
+ public synchronized void
+ setLabel(String label)
+ {
+   this.label = label;
+   if (peer != null)
+     {
+       MenuItemPeer mp = (MenuItemPeer) peer;
+       mp.setLabel (label);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not this menu item is enabled.
+   *
+   * @return <code>true</code> if this menu item is enabled, <code>false</code>
+   * otherwise.
+   */
+ public boolean
+ isEnabled()
+ {
+   return(enabled);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the enabled status of this menu item.
+   * 
+   * @param enabled <code>true</code> to enable this menu item,
+   * <code>false</code> otherwise.
+   */
+ public synchronized void
+ setEnabled(boolean enabled)
+ {
+   enable (enabled);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the enabled status of this menu item.
+   * 
+   * @param enabled <code>true</code> to enable this menu item,
+   * <code>false</code> otherwise.
+   *
+   * @deprecated This method is deprecated in favor of <code>setEnabled()</code>.
+   */
+ public void
+ enable(boolean enabled)
+ {
+   if (enabled)
+     enable ();
+   else
+     disable ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Enables this menu item.
+   *
+   * @deprecated This method is deprecated in favor of <code>setEnabled()</code>.
+   */
+ public void
+ enable()
+ {
+   if (enabled)
+     return;
+ 
+   this.enabled = true;
+   if (peer != null)
+     ((MenuItemPeer) peer).setEnabled (true);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Disables this menu item.
+   *
+   * @deprecated This method is deprecated in favor of <code>setEnabled()</code>.
+   */
+ public void
+ disable()
+ {
+   if (!enabled)
+     return;
+ 
+   this.enabled = false;
+   if (peer != null)
+     ((MenuItemPeer) peer).setEnabled (false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the shortcut for this menu item, which may be <code>null</code>.
+   *
+   * @return The shortcut for this menu item.
+   */
+ public MenuShortcut
+ getShortcut()
+ {
+   return(shortcut);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the shortcut for this menu item to the specified value.  This
+   * must be done before the native peer is created.
+   *
+   * @param shortcut The new shortcut for this menu item.
+   */
+ public void
+ setShortcut(MenuShortcut shortcut)
+ {
+   this.shortcut = shortcut;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Deletes the shortcut for this menu item if one exists.  This must be
+   * done before the native peer is created.
+   */
+ public void
+ deleteShortcut()
+ {
+   shortcut = null;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the name of the action command in the action events
+   * generated by this menu item.
+   *
+   * @return The action command name
+   */
+ public String
+ getActionCommand()
+ {
+   if (actionCommand == null)
+     return label;
+   else
+     return actionCommand;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the name of the action command in the action events generated by
+   * this menu item.
+   *
+   * @param actionCommand The new action command name.
+   */
+ public void
+ setActionCommand(String actionCommand)
+ {
+   this.actionCommand = actionCommand;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Enables the specified events.  This is done automatically when a 
+   * listener is added and does not normally need to be done by
+   * application code.
+   *
+   * @param events The events to enable, which should be the bit masks
+   * from <code>AWTEvent</code>.
+   */
+ protected final void
+ enableEvents(long events)
+ {
+   eventMask |= events;
+   // TODO: see comment in Component.enableEvents().    
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Disables the specified events.
+   *
+   * @param events The events to enable, which should be the bit masks
+   * from <code>AWTEvent</code>.
+   */
+ protected final void
+ disableEvents(long events)
+ {
+   eventMask &= ~events;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Creates the native peer for this object.
+   */
+ public void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit ().createMenuItem (this);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified listener to the list of registered action listeners
+   * for this component.
+   *
+   * @param listener The listener to add.
+   */
+ public synchronized void
+ addActionListener(ActionListener listener)
+ {
+   action_listeners = AWTEventMulticaster.add(action_listeners, listener);
+ 
+   enableEvents(AWTEvent.ACTION_EVENT_MASK);
+ }
+ 
+ public synchronized void
+ removeActionListener(ActionListener l)
+ {
+   action_listeners = AWTEventMulticaster.remove(action_listeners, l);
+ }
+ 
+   public synchronized ActionListener[] getActionListeners()
+   {
+     return (ActionListener[])
+       AWTEventMulticaster.getListeners(action_listeners,
+                                        ActionListener.class);
+   }
+ 
+ /** Returns all registered EventListers of the given listenerType. 
+  * listenerType must be a subclass of EventListener, or a 
+  * ClassClassException is thrown.
+  * @since 1.3 
+  */
+   public EventListener[] getListeners(Class listenerType)
+   {
+     if (listenerType == ActionListener.class)
+       return getActionListeners();
+     return (EventListener[]) Array.newInstance(listenerType, 0);
+   }
+ 
+ /*************************************************************************/
+ 
+ void
+ dispatchEventImpl(AWTEvent e)
+ {
+   if (e.id <= ActionEvent.ACTION_LAST 
+       && e.id >= ActionEvent.ACTION_FIRST
+       && (action_listeners != null
+ 	  || (eventMask & AWTEvent.ACTION_EVENT_MASK) != 0))
+     processEvent(e);
+ 
+   // Send the event to the parent menu if it has not yet been
+   // consumed.
+   if (!e.isConsumed ())
+     ((Menu) getParent ()).processEvent (e);
+ }
+ 
+ /**
+   * Processes the specified event by calling <code>processActionEvent()</code>
+   * if it is an instance of <code>ActionEvent</code>.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processEvent(AWTEvent event)
+ {
+   if (event instanceof ActionEvent)
+     processActionEvent((ActionEvent)event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes the specified event by dispatching it to any registered listeners.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processActionEvent(ActionEvent event)
+ {
+   if (action_listeners != null)
+     {
+       event.setSource(this);
+       action_listeners.actionPerformed(event);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this object.
+   *
+   * @return A debugging string for this object.
+   */
+ public String
+ paramString()
+ {
+   return ("label=" + label + ",enabled=" + enabled +
+ 	  ",actionCommand=" + actionCommand + "," + super.paramString());
+ }
+ 
+ /**
+  * Gets the AccessibleContext associated with this <code>MenuItem</code>.
+  * The context is created, if necessary.
+  *
+  * @return the associated context
+  */
+ public AccessibleContext getAccessibleContext()
+ {
+   /* Create the context if this is the first request */
+   if (accessibleContext == null)
+     accessibleContext = new AccessibleAWTMenuItem();
+   return accessibleContext;
+ }
+ 
+ } // class MenuItem 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/MenuShortcut.java gcc-4.1.0/libjava/classpath/java/awt/MenuShortcut.java
*** gcc-4.0.2/libjava/classpath/java/awt/MenuShortcut.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/MenuShortcut.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,207 ----
+ /* MenuShortcut.java -- A class for menu accelerators
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+   * This class implements a keyboard accelerator for a menu item.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class MenuShortcut implements java.io.Serializable
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization Constant
+ private static final long serialVersionUID = 143448358473180225L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The virtual keycode for the shortcut.
+   */
+ private int key;
+ 
+ /**
+   * @serial <code>true</code> if the shift key was used with this shortcut,
+   * or <code>false</code> otherwise.
+   */
+ private boolean usesShift;
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>MenuShortcut</code> with the
+   * specified virtual key value.
+   *
+   * @param key The virtual keycode for the shortcut.
+   */
+ public
+ MenuShortcut(int key)
+ {
+   this(key, false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>MenuShortcut</code> with the
+   * specified virtual key value and shift setting.
+   *
+   * @param key The virtual keycode for the shortcut.
+   * @param usesShift <code>true</code> if the shift key was pressed,
+   * <code>false</code> otherwise.
+   */
+ public
+ MenuShortcut(int key, boolean usesShift)
+ {
+   this.key = key;
+   this.usesShift = usesShift;
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the virtual keycode for this shortcut.
+   *
+   * @return The virtual keycode for this shortcut.
+   */
+ public int
+ getKey()
+ {
+   return(key);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the shift setting for this shortcut.
+   *
+   * @return <code>true</code> if the shift key was pressed, <code>false</code>
+   * otherwise.
+   */
+ public boolean
+ usesShiftModifier()
+ {
+   return(usesShift);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests this object for equality against the specified object.  The two
+   * objects will be considered equal if and only if the specified object
+   * is an instance of <code>MenuShortcut</code> and has the same key value
+   * and shift setting as this object.
+   *
+   * @param obj The object to test for equality against.
+   *
+   * @return <code>true</code> if the two objects are equal, <code>false</code>
+   * otherwise.
+   */
+ public boolean
+ equals(MenuShortcut obj)
+ {
+   if (obj == null)
+     return(false);
+ 
+   if (obj.key != this.key)
+     return(false);
+ 
+   if (obj.usesShift != this.usesShift)
+     return(false);
+ 
+   return(true);
+ }
+ 
+ public boolean
+ equals(Object obj)
+ {
+   if (obj instanceof MenuShortcut)
+     {
+       MenuShortcut ms = (MenuShortcut) obj;
+       return (ms.key == key && ms.usesShift == usesShift);
+     }      
+   return false;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a string representation of this shortcut.
+   *
+   * @return A string representation of this shortcut.
+   */
+ public String
+ toString()
+ {
+   return(getClass().getName() + "[" + paramString () + "]");
+ }
+ 
+ public int
+ hashCode()
+ {
+   // Arbitrary.
+   return key + (usesShift ? 23 : 57);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string for this object.
+   *
+   * @return A debugging string for this object.
+   */
+ protected String
+ paramString()
+ {
+   return "key=" + key + ",usesShift=" + usesShift;
+ }
+ 
+ } // class MenuShortcut 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/PageAttributes.java gcc-4.1.0/libjava/classpath/java/awt/PageAttributes.java
*** gcc-4.0.2/libjava/classpath/java/awt/PageAttributes.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/PageAttributes.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,482 ----
+ /* PageAttributes.java -- 
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.util.Locale;
+ 
+ /**
+  * Missing Documentation
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.3
+  * @status updated to 1.4, but missing documentation
+  */
+ public final class PageAttributes implements Cloneable
+ {
+   public static final class ColorType extends AttributeValue
+   {
+     private static final String[] NAMES = { "color", "monochrome" };
+     public static final ColorType COLOR = new ColorType(0);
+     public static final ColorType MONOCHROME = new ColorType(1);
+     private ColorType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class ColorType
+   public static final class MediaType extends AttributeValue
+   {
+     private static final String[] NAMES
+       = { "iso-4a0", "iso-2a0", "iso-a0", "iso-a1", "iso-a2", "iso-a3",
+           "iso-a4", "iso-a5", "iso-a6", "iso-a7", "iso-a8", "iso-a9",
+           "iso-a10", "iso-b0", "iso-b1", "iso-b2", "iso-b3", "iso-b4",
+           "iso-b5", "iso-b6", "iso-b7", "iso-b8", "iso-b9", "iso-b10",
+           "jis-b0", "jis-b1", "jis-b2", "jis-b3", "jis-b4", "jis-b5",
+           "jis-b6", "jis-b7", "jis-b8", "jis-b9", "jis-b10", "iso-c0",
+           "iso-c1", "iso-c2", "iso-c3", "iso-c4", "iso-c5", "iso-c6",
+           "iso-c7", "iso-c8", "iso-c9", "iso-c10", "iso-designated-long",
+           "executive", "folio", "invoice", "ledger", "na-letter", "na-legal",
+           "quarto", "a", "b", "c", "d", "e", "na-10x15-envelope",
+           "na-10x14-envelope", "na-10x13-envelope", "na-9x12-envelope",
+           "na-9x11-envelope", "na-7x9-envelope", "na-6x9-envelope",
+           "na-number-9-envelope", "na-number-10-envelope",
+           "na-number-11-envelope", "na-number-12-envelope",
+           "na-number-14-envelope", "invite-envelope", "italy-envelope",
+           "monarch-envelope", "personal-envelope" };
+     public static final MediaType ISO_4A0 = new MediaType(0);
+     public static final MediaType ISO_2A0 = new MediaType(1);
+     public static final MediaType ISO_A0 = new MediaType(2);
+     public static final MediaType ISO_A1 = new MediaType(3);
+     public static final MediaType ISO_A2 = new MediaType(4);
+     public static final MediaType ISO_A3 = new MediaType(5);
+     public static final MediaType ISO_A4 = new MediaType(6);
+     public static final MediaType ISO_A5 = new MediaType(7);
+     public static final MediaType ISO_A6 = new MediaType(8);
+     public static final MediaType ISO_A7 = new MediaType(9);
+     public static final MediaType ISO_A8 = new MediaType(10);
+     public static final MediaType ISO_A9 = new MediaType(11);
+     public static final MediaType ISO_A10 = new MediaType(12);
+     public static final MediaType ISO_B0 = new MediaType(13);
+     public static final MediaType ISO_B1 = new MediaType(14);
+     public static final MediaType ISO_B2 = new MediaType(15);
+     public static final MediaType ISO_B3 = new MediaType(16);
+     public static final MediaType ISO_B4 = new MediaType(17);
+     public static final MediaType ISO_B5 = new MediaType(18);
+     public static final MediaType ISO_B6 = new MediaType(19);
+     public static final MediaType ISO_B7 = new MediaType(20);
+     public static final MediaType ISO_B8 = new MediaType(21);
+     public static final MediaType ISO_B9 = new MediaType(22);
+     public static final MediaType ISO_B10 = new MediaType(23);
+     public static final MediaType JIS_B0 = new MediaType(24);
+     public static final MediaType JIS_B1 = new MediaType(25);
+     public static final MediaType JIS_B2 = new MediaType(26);
+     public static final MediaType JIS_B3 = new MediaType(27);
+     public static final MediaType JIS_B4 = new MediaType(28);
+     public static final MediaType JIS_B5 = new MediaType(29);
+     public static final MediaType JIS_B6 = new MediaType(30);
+     public static final MediaType JIS_B7 = new MediaType(31);
+     public static final MediaType JIS_B8 = new MediaType(32);
+     public static final MediaType JIS_B9 = new MediaType(33);
+     public static final MediaType JIS_B10 = new MediaType(34);
+     public static final MediaType ISO_C0 = new MediaType(35);
+     public static final MediaType ISO_C1 = new MediaType(36);
+     public static final MediaType ISO_C2 = new MediaType(37);
+     public static final MediaType ISO_C3 = new MediaType(38);
+     public static final MediaType ISO_C4 = new MediaType(39);
+     public static final MediaType ISO_C5 = new MediaType(40);
+     public static final MediaType ISO_C6 = new MediaType(41);
+     public static final MediaType ISO_C7 = new MediaType(42);
+     public static final MediaType ISO_C8 = new MediaType(43);
+     public static final MediaType ISO_C9 = new MediaType(44);
+     public static final MediaType ISO_C10 = new MediaType(45);
+     public static final MediaType ISO_DESIGNATED_LONG = new MediaType(46);
+     public static final MediaType EXECUTIVE = new MediaType(47);
+     public static final MediaType FOLIO = new MediaType(48);
+     public static final MediaType INVOICE = new MediaType(49);
+     public static final MediaType LEDGER = new MediaType(50);
+     public static final MediaType NA_LETTER = new MediaType(51);
+     public static final MediaType NA_LEGAL = new MediaType(52);
+     public static final MediaType QUARTO = new MediaType(53);
+     public static final MediaType A = new MediaType(54);
+     public static final MediaType B = new MediaType(55);
+     public static final MediaType C = new MediaType(56);
+     public static final MediaType D = new MediaType(57);
+     public static final MediaType E = new MediaType(58);
+     public static final MediaType NA_10X15_ENVELOPE = new MediaType(59);
+     public static final MediaType NA_10X14_ENVELOPE = new MediaType(60);
+     public static final MediaType NA_10X13_ENVELOPE = new MediaType(61);
+     public static final MediaType NA_9X12_ENVELOPE = new MediaType(62);
+     public static final MediaType NA_9X11_ENVELOPE = new MediaType(63);
+     public static final MediaType NA_7X9_ENVELOPE = new MediaType(64);
+     public static final MediaType NA_6X9_ENVELOPE = new MediaType(65);
+     public static final MediaType NA_NUMBER_9_ENVELOPE = new MediaType(66);
+     public static final MediaType NA_NUMBER_10_ENVELOPE = new MediaType(67);
+     public static final MediaType NA_NUMBER_11_ENVELOPE = new MediaType(68);
+     public static final MediaType NA_NUMBER_12_ENVELOPE = new MediaType(69);
+     public static final MediaType NA_NUMBER_14_ENVELOPE = new MediaType(70);
+     public static final MediaType INVITE_ENVELOPE = new MediaType(71);
+     public static final MediaType ITALY_ENVELOPE = new MediaType(72);
+     public static final MediaType MONARCH_ENVELOPE = new MediaType(73);
+     public static final MediaType PERSONAL_ENVELOPE = new MediaType(74);
+     public static final MediaType A0 = ISO_A0;
+     public static final MediaType A1 = ISO_A1;
+     public static final MediaType A2 = ISO_A2;
+     public static final MediaType A3 = ISO_A3;
+     public static final MediaType A4 = ISO_A4;
+     public static final MediaType A5 = ISO_A5;
+     public static final MediaType A6 = ISO_A6;
+     public static final MediaType A7 = ISO_A7;
+     public static final MediaType A8 = ISO_A8;
+     public static final MediaType A9 = ISO_A9;
+     public static final MediaType A10 = ISO_A10;
+     public static final MediaType B0 = ISO_B0;
+     public static final MediaType B1 = ISO_B1;
+     public static final MediaType B2 = ISO_B2;
+     public static final MediaType B3 = ISO_B3;
+     public static final MediaType B4 = ISO_B4;
+     public static final MediaType ISO_B4_ENVELOPE = ISO_B4;
+     public static final MediaType B5 = ISO_B5;
+     public static final MediaType ISO_B5_ENVELOPE = ISO_B4;
+     public static final MediaType B6 = ISO_B6;
+     public static final MediaType B7 = ISO_B7;
+     public static final MediaType B8 = ISO_B8;
+     public static final MediaType B9 = ISO_B9;
+     public static final MediaType B10 = ISO_B10;
+     public static final MediaType C0 = ISO_B0;
+     public static final MediaType ISO_C0_ENVELOPE = ISO_C0;
+     public static final MediaType C1 = ISO_C1;
+     public static final MediaType ISO_C1_ENVELOPE = ISO_C1;
+     public static final MediaType C2 = ISO_C2;
+     public static final MediaType ISO_C2_ENVELOPE = ISO_C2;
+     public static final MediaType C3 = ISO_C3;
+     public static final MediaType ISO_C3_ENVELOPE = ISO_C3;
+     public static final MediaType C4 = ISO_C4;
+     public static final MediaType ISO_C4_ENVELOPE = ISO_C4;
+     public static final MediaType C5 = ISO_C5;
+     public static final MediaType ISO_C5_ENVELOPE = ISO_C5;
+     public static final MediaType C6 = ISO_C6;
+     public static final MediaType ISO_C6_ENVELOPE = ISO_C6;
+     public static final MediaType C7 = ISO_C7;
+     public static final MediaType ISO_C7_ENVELOPE = ISO_C7;
+     public static final MediaType C8 = ISO_C8;
+     public static final MediaType ISO_C8_ENVELOPE = ISO_C8;
+     public static final MediaType C9 = ISO_C9;
+     public static final MediaType ISO_C9_ENVELOPE = ISO_C9;
+     public static final MediaType C10 = ISO_C10;
+     public static final MediaType ISO_C10_ENVELOPE = ISO_C10;
+     public static final MediaType ISO_DESIGNATED_LONG_ENVELOPE
+       = ISO_DESIGNATED_LONG;
+     public static final MediaType STATEMENT = INVOICE;
+     public static final MediaType TABLOID = LEDGER;
+     public static final MediaType LETTER = NA_LETTER;
+     public static final MediaType NOTE = NA_LETTER;
+     public static final MediaType LEGAL = NA_LEGAL;
+     public static final MediaType ENV_10X15 = NA_10X15_ENVELOPE;
+     public static final MediaType ENV_10X14 = NA_10X14_ENVELOPE;
+     public static final MediaType ENV_10X13 = NA_10X13_ENVELOPE;
+     public static final MediaType ENV_9X12 = NA_9X12_ENVELOPE;
+     public static final MediaType ENV_9X11 = NA_9X11_ENVELOPE;
+     public static final MediaType ENV_7X9 = NA_7X9_ENVELOPE;
+     public static final MediaType ENV_6X9 = NA_6X9_ENVELOPE;
+     public static final MediaType ENV_9 = NA_NUMBER_9_ENVELOPE;
+     public static final MediaType ENV_10 = NA_NUMBER_10_ENVELOPE;
+     public static final MediaType ENV_11 = NA_NUMBER_11_ENVELOPE;
+     public static final MediaType ENV_12 = NA_NUMBER_12_ENVELOPE;
+     public static final MediaType ENV_14 = NA_NUMBER_14_ENVELOPE;
+     public static final MediaType ENV_INVITE = INVITE_ENVELOPE;
+     public static final MediaType ENV_ITALY = ITALY_ENVELOPE;
+     public static final MediaType ENV_MONARCH = MONARCH_ENVELOPE;
+     public static final MediaType ENV_PERSONAL = PERSONAL_ENVELOPE;
+     public static final MediaType INVITE = INVITE_ENVELOPE;
+     public static final MediaType ITALY = ITALY_ENVELOPE;
+     public static final MediaType MONARCH = MONARCH_ENVELOPE;
+     public static final MediaType PERSONAL = PERSONAL_ENVELOPE;
+     private MediaType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class MediaType
+   public static final class OrientationRequestedType extends AttributeValue
+   {
+     private static final String[] NAMES = { "portrait", "landscape" };
+     public static final OrientationRequestedType PORTRAIT
+       = new OrientationRequestedType(0);
+     public static final OrientationRequestedType LANDSCAPE
+       = new OrientationRequestedType(1);
+     private OrientationRequestedType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class OrientationRequestedType
+   public static final class OriginType extends AttributeValue
+   {
+     private static final String[] NAMES = { "physical", "printable" };
+     public static final OriginType PHYSICAL = new OriginType(0);
+     public static final OriginType PRINTABLE = new OriginType(1);
+     private OriginType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class OriginType
+   public static final class PrintQualityType extends AttributeValue
+   {
+     private static final String[] NAMES = { "high", "normal", "draft" };
+     public static final PrintQualityType HIGH = new PrintQualityType(0);
+     public static final PrintQualityType NORMAL = new PrintQualityType(1);
+     public static final PrintQualityType DRAFT = new PrintQualityType(2);
+     private PrintQualityType(int value)
+     {
+       super(value, NAMES);
+     }
+   } // class PrintQualityType
+ 
+ 
+   private ColorType color;
+   private MediaType media;
+   private OrientationRequestedType orientation;
+   private OriginType origin;
+   private PrintQualityType quality;
+   private int resolutionX;
+   private int resolutionY;
+   private int resolutionScale;
+   public PageAttributes()
+   {
+     color = ColorType.MONOCHROME;
+     setMediaToDefault();
+     orientation = OrientationRequestedType.PORTRAIT;
+     origin = OriginType.PHYSICAL;
+     quality = PrintQualityType.NORMAL;
+     setPrinterResolutionToDefault();
+   }
+ 
+   public PageAttributes(PageAttributes attr)
+   {
+     set(attr);
+   }
+ 
+   public PageAttributes(ColorType color, MediaType media,
+                         OrientationRequestedType orientation,
+                         OriginType origin, PrintQualityType quality,
+                         int[] resolution)
+   {
+     if (color == null || media == null || orientation == null
+         || origin == null || quality == null)
+       throw new IllegalArgumentException();
+     setPrinterResolution(resolution);
+     this.color = color;
+     this.media = media;
+     this.orientation = orientation;
+     this.origin = origin;
+     this.quality = quality;
+   }
+ 
+   public Object clone()
+   {
+     return new PageAttributes(this);
+   }
+ 
+   public void set(PageAttributes attr)
+   {
+     color = attr.color;
+     media = attr.media;
+     orientation = attr.orientation;
+     origin = attr.origin;
+     quality = attr.quality;
+     resolutionX = attr.resolutionX;
+     resolutionY = attr.resolutionY;
+     resolutionScale = attr.resolutionScale;
+   }
+ 
+   public ColorType getColor()
+   {
+     return color;
+   }
+ 
+   public void setColor(ColorType color)
+   {
+     if (color == null)
+       throw new IllegalArgumentException();
+     this.color = color;
+   }
+ 
+   public MediaType getMedia()
+   {
+     return media;
+   }
+ 
+   public void setMedia(MediaType media)
+   {
+     if (media == null)
+       throw new IllegalArgumentException();
+     this.media = media;
+   }
+ 
+   public void setMediaToDefault()
+   {
+     String country = Locale.getDefault().getCountry();
+     media = ("US".equals(country) || "CA".equals(country)) ? MediaType.LETTER
+       : MediaType.A4;
+   }
+ 
+   public OrientationRequestedType getOrientationRequested()
+   {
+     return orientation;
+   }
+ 
+   public void setOrientationRequested(OrientationRequestedType orientation)
+   {
+     if (orientation == null)
+       throw new IllegalArgumentException();
+     this.orientation = orientation;
+   }
+ 
+   public void setOrientationRequested(int orientation)
+   {
+     if (orientation == 3)
+       this.orientation = OrientationRequestedType.PORTRAIT;
+     else if (orientation == 4)
+       this.orientation = OrientationRequestedType.LANDSCAPE;
+     else
+       throw new IllegalArgumentException();
+   }
+ 
+   public void setOrientationRequestedToDefault()
+   {
+     orientation = OrientationRequestedType.PORTRAIT;
+   }
+ 
+   public OriginType getOrigin()
+   {
+     return origin;
+   }
+ 
+   public void setOrigin(OriginType origin)
+   {
+     if (origin == null)
+       throw new IllegalArgumentException();
+     this.origin = origin;
+   }
+ 
+   public PrintQualityType getPrintQuality()
+   {
+     return quality;
+   }
+ 
+   public void setPrintQuality(PrintQualityType quality)
+   {
+     if (quality == null)
+       throw new IllegalArgumentException();
+     this.quality = quality;
+   }
+ 
+   public void setPrintQuality(int quality)
+   {
+     if (quality == 3)
+       this.quality = PrintQualityType.DRAFT;
+     else if (quality == 4)
+       this.quality = PrintQualityType.NORMAL;
+     else if (quality == 5)
+       this.quality = PrintQualityType.HIGH;
+     else
+       throw new IllegalArgumentException();
+   }
+ 
+   public void setPrintQualityToDefault()
+   {
+     quality = PrintQualityType.NORMAL;
+   }
+ 
+   public int[] getPrinterResolution()
+   {
+     return new int[] { resolutionX, resolutionY, resolutionScale };
+   }
+ 
+   public void setPrinterResolution(int[] resolution)
+   {
+     if (resolution == null || resolution.length != 3 || resolution[0] <= 0
+         || resolution[1] <= 0 || resolution[2] < 3 || resolution[2] > 4)
+       throw new IllegalArgumentException();
+     resolutionX = resolution[0];
+     resolutionY = resolution[1];
+     resolutionScale = resolution[2];
+   }
+ 
+   public void setPrinterResolution(int resolution)
+   {
+     if (resolution <= 0)
+       throw new IllegalArgumentException();
+     resolutionX = resolution;
+     resolutionY = resolution;
+     resolutionScale = 3;
+   }
+ 
+   public void setPrinterResolutionToDefault()
+   {
+     resolutionX = 72;
+     resolutionY = 72;
+     resolutionScale = 3;
+   }
+ 
+   public boolean equals(Object o)
+   {
+     if (this == o)
+       return true;
+     if (! (o instanceof PageAttributes))
+       return false;
+     PageAttributes pa = (PageAttributes) o;
+     return color == pa.color && media == pa.media
+       && orientation == pa.orientation && origin == pa.origin
+       && quality == pa.quality && resolutionX == pa.resolutionX
+       && resolutionY == pa.resolutionY
+       && resolutionScale == pa.resolutionScale;
+   }
+   public int hashCode()
+   {
+     return (color.value << 31) ^ (media.value << 24)
+       ^ (orientation.value << 23) ^ (origin.value << 22)
+       ^ (quality.value << 20) ^ (resolutionScale << 19)
+       ^ (resolutionY << 10) ^ resolutionX;
+   }
+   public String toString()
+   {
+     return "color=" + color + ",media=" + media + ",orientation-requested="
+       + orientation + ",origin=" + origin + ",print-quality=" + quality
+       + ",printer-resolution=[" + resolutionX + ',' + resolutionY + ','
+       + resolutionScale + ']';
+   }
+ } // class PageAttributes
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Paint.java gcc-4.1.0/libjava/classpath/java/awt/Paint.java
*** gcc-4.0.2/libjava/classpath/java/awt/Paint.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Paint.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* Paint.java -- generate colors for Graphics2D operations
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.image.ColorModel;
+ 
+ /**
+  * Defines how color patterns are generated for Graphics2D operations. This
+  * is used to perform the <code>draw</code> and <code>fill</code> methods
+  * of the graphics object. Instances must be immutable, because the graphics
+  * object does not clone them.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see PaintContext
+  * @see Color
+  * @see GradientPaint
+  * @see TexturePaint
+  * @see Graphics2D#setPaint(Paint)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface Paint extends Transparency
+ {
+   /**
+    * Create the context necessary for performing the color pattern generation.
+    * The color model is a hint, and may be null for Classpath implementations;
+    * however some legacy code may throw a NullPointerException when passed a
+    * null. Leaving the color model null provides the most efficiency and leeway
+    * in the generation of the color pattern.
+    *
+    * @param cm the color model, used as a hint
+    * @param deviceBounds the device space bounding box of the painted area
+    * @param userBounds the user space bounding box of the painted area
+    * @param xform the transformation from user space to device space
+    * @param hints any hints for choosing between rendering alternatives
+    * @return the context for performing the paint
+    */
+   PaintContext createContext(ColorModel cm, Rectangle deviceBounds,
+                              Rectangle2D userBounds, AffineTransform xform,
+                              RenderingHints hints);
+ } // interface Paint
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/PaintContext.java gcc-4.1.0/libjava/classpath/java/awt/PaintContext.java
*** gcc-4.0.2/libjava/classpath/java/awt/PaintContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/PaintContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* PaintContext.java -- the environment for performing a paint operation
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.image.ColorModel;
+ import java.awt.image.Raster;
+ 
+ /**
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see Paint
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface PaintContext
+ {
+   /**
+    * Release the resources allocated for the paint.
+    */
+   void dispose();
+ 
+   /**
+    * Return the color model of this context. It may be different from the
+    * hint specified during createContext, as not all contexts can generate
+    * color patterns in an arbitrary model.
+    *
+    * @return the context color model
+    */
+   ColorModel getColorModel();
+ 
+   /**
+    * Return a raster containing the colors for the graphics operation.
+    *
+    * @param x the x-coordinate, in device space
+    * @param y the y-coordinate, in device space
+    * @param w the width, in device space
+    * @param h the height, in device space
+    * @return a raster for the given area and color
+    */
+   Raster getRaster(int x, int y, int w, int h);
+ } // interface PaintContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Panel.java gcc-4.1.0/libjava/classpath/java/awt/Panel.java
*** gcc-4.0.2/libjava/classpath/java/awt/Panel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Panel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,173 ----
+ /* Panel.java -- Simple container object
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ 
+ /**
+  * A panel is a simple container class. It's default layout is the
+  * <code>FlowLayout</code> manager.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see FlowLayout
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Panel extends Container implements Accessible
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -2728009084054400034L;
+ 
+   /** The cached accessible context. */
+   private transient AccessibleContext context;
+ 
+   /** Flag set when the first system-requested paint event is
+       dispatched. */
+   private transient boolean initialSystemUpdateDone;
+ 
+   /** Flag set when the first application-requested paint event is
+       consumed. */
+   private transient boolean initialUpdateConsumed;
+ 
+   /*
+    * The number used to generate the name returned by getName.
+    */
+   private static transient long next_panel_number;
+ 
+   /**
+    * Initializes a new instance of <code>Panel</code> that has a default
+    * layout manager of <code>FlowLayout</code>.
+    */
+   public Panel()
+   {
+     this(new FlowLayout());
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Panel</code> with the specified
+    * layout manager.
+    *
+    * @param layoutManager the layout manager for this object
+    * @since 1.1
+    */
+   public Panel(LayoutManager layoutManager)
+   {
+     setLayout(layoutManager);
+   }
+ 
+   /**
+    * Notifies this object to create its native peer.
+    *
+    * @see #isDisplayable()
+    * @see #removeNotify()
+    */
+   public void addNotify()
+   {
+     if (peer == null)
+       peer = getToolkit().createPanel(this);
+     super.addNotify();
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this panel, creating one if
+    * necessary. This always returns an instance of {@link AccessibleAWTPanel}.
+    *
+    * @return the accessibility context of this panel
+    * @since 1.3
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     if (context == null)
+       context = new AccessibleAWTPanel();
+     return context;
+   }
+ 
+   /**
+    * This class provides accessibility support for Panels, and is the
+    * runtime type returned by {@link #getAccessibleContext()}.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.3
+    */
+   protected class AccessibleAWTPanel extends AccessibleAWTContainer
+   {
+     /**
+      * Compatible with JDK 1.4+.
+      */
+     private static final long serialVersionUID = -6409552226660031050L;
+ 
+     /**
+      * The default constructor.
+      */
+     protected AccessibleAWTPanel()
+     {
+     }
+ 
+     /**
+      * Get the role of this accessible object, a panel.
+      *
+      * @return the role of the object
+      * @see AccessibleRole#PANEL
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.PANEL;
+     }
+   }
+ 
+   /**
+    * Generate a unique name for this panel.
+    *
+    * @return A unique name for this panel.
+    */
+   String generateName ()
+   {
+     return "panel" + getUniqueLong ();
+   }
+ 
+   private static synchronized long getUniqueLong ()
+   {
+     return next_panel_number++;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Point.java gcc-4.1.0/libjava/classpath/java/awt/Point.java
*** gcc-4.0.2/libjava/classpath/java/awt/Point.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Point.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,249 ----
+ /* Point.java -- represents a point in 2-D space
+    Copyright (C) 1999, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.Point2D;
+ import java.io.Serializable;
+ 
+ /**
+  * This class represents a point on the screen using cartesian coordinates.
+  * Remember that in screen coordinates, increasing x values go from left to
+  * right, and increasing y values go from top to bottom.
+  *
+  * <p>There are some public fields; if you mess with them in an inconsistent
+  * manner, it is your own fault when you get invalid results. Also, this
+  * class is not threadsafe.
+  *
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Point extends Point2D implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -5276940640259749850L;
+ 
+   /**
+    * The x coordinate.
+    *
+    * @see #getLocation()
+    * @see #move(int, int)
+    * @serial the X coordinate of the point
+    */
+   public int x;
+ 
+   /**
+    * The y coordinate.
+    *
+    * @see #getLocation()
+    * @see #move(int, int)
+    * @serial The Y coordinate of the point
+    */
+   public int y;
+ 
+   /**
+    * Initializes a new instance of <code>Point</code> representing the
+    * coordiates (0,0).
+    *
+    * @since 1.1
+    */
+   public Point()
+   {
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Point</code> with coordinates
+    * identical to the coordinates of the specified points.
+    *
+    * @param p the point to copy the coordinates from
+    * @throws NullPointerException if p is null
+    */
+   public Point(Point p)
+   {
+     x = p.x;
+     y = p.y;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Point</code> with the specified
+    * coordinates.
+    *
+    * @param x the X coordinate
+    * @param y the Y coordinate
+    */
+   public Point(int x, int y)
+   {
+     this.x = x;
+     this.y = y;
+   }
+ 
+   /**
+    * Get the x coordinate.
+    *
+    * @return the value of x, as a double
+    */
+   public double getX()
+   {
+     return x;
+   }
+ 
+   /**
+    * Get the y coordinate.
+    *
+    * @return the value of y, as a double
+    */
+   public double getY()
+   {
+     return y;
+   }
+ 
+   /**
+    * Returns the location of this point. A pretty useless method, as this
+    * is already a point.
+    *
+    * @return a copy of this point
+    * @see #setLocation(Point)
+    * @since 1.1
+    */
+   public Point getLocation()
+   {
+     return new Point(x, y);
+   }
+ 
+   /**
+    * Sets this object's coordinates to match those of the specified point.
+    *
+    * @param p the point to copy the coordinates from
+    * @throws NullPointerException if p is null
+    * @since 1.1
+    */
+   public void setLocation(Point p)
+   {
+     x = p.x;
+     y = p.y;
+   }
+ 
+   /**
+    * Sets this object's coordinates to the specified values.  This method
+    * is identical to the <code>move()</code> method.
+    *
+    * @param x the new X coordinate
+    * @param y the new Y coordinate
+    */
+   public void setLocation(int x, int y)
+   {
+     this.x = x;
+     this.y = y;
+   }
+ 
+   /**
+    * Sets this object's coordinates to the specified values.  This method
+    * performs normal casting from double to int, so you may lose precision.
+    *
+    * @param x the new X coordinate
+    * @param y the new Y coordinate
+    */
+   public void setLocation(double x, double y)
+   {
+     this.x = (int) x;
+     this.y = (int) y;
+   }
+ 
+   /**
+    * Sets this object's coordinates to the specified values.  This method
+    * is identical to the <code>setLocation(int, int)</code> method.
+    *
+    * @param x the new X coordinate
+    * @param y the new Y coordinate
+    */
+   public void move(int x, int y)
+   {
+     this.x = x;
+     this.y = y;
+   }
+ 
+   /**
+    * Changes the coordinates of this point such that the specified
+    * <code>dx</code> parameter is added to the existing X coordinate and
+    * <code>dy</code> is added to the existing Y coordinate.
+    *
+    * @param dx the amount to add to the X coordinate
+    * @param dy the amount to add to the Y coordinate
+    */
+   public void translate(int dx, int dy)
+   {
+     x += dx;
+     y += dy;
+   }
+ 
+   /**
+    * Tests whether or not this object is equal to the specified object.
+    * This will be true if and only if the specified object is an instance
+    * of Point2D and has the same X and Y coordinates.
+    *
+    * @param obj the object to test against for equality
+    * @return true if the specified object is equal
+   */
+   public boolean equals(Object obj)
+   {
+     // NOTE: No special hashCode() method is required for this class,
+     // as this equals() implementation is functionally equivalent to
+     // super.equals(), which does define a proper hashCode().
+ 
+     if (! (obj instanceof Point2D))
+       return false;
+     Point2D p = (Point2D) obj;
+     return x == p.getX() && y == p.getY();
+   }
+ 
+   /**
+    * Returns a string representation of this object. The format is:
+    * <code>getClass().getName() + "[x=" + x + ",y=" + y + ']'</code>.
+    *
+    * @return a string representation of this object
+    */
+   public String toString()
+   {
+     return getClass().getName() + "[x=" + x + ",y=" + y + ']';
+   }
+ } // class Point
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Polygon.java gcc-4.1.0/libjava/classpath/java/awt/Polygon.java
*** gcc-4.0.2/libjava/classpath/java/awt/Polygon.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Polygon.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,612 ----
+ /* Polygon.java -- class representing a polygon
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Line2D;
+ import java.awt.geom.PathIterator;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ import java.io.Serializable;
+ 
+ /**
+  * This class represents a polygon, a closed, two-dimensional region in a
+  * coordinate space. The region is bounded by an arbitrary number of line
+  * segments, between (x,y) coordinate vertices. The polygon has even-odd
+  * winding, meaning that a point is inside the shape if it crosses the
+  * boundary an odd number of times on the way to infinity.
+  *
+  * <p>There are some public fields; if you mess with them in an inconsistent
+  * manner, it is your own fault when you get NullPointerException,
+  * ArrayIndexOutOfBoundsException, or invalid results. Also, this class is
+  * not threadsafe.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Polygon implements Shape, Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -6460061437900069969L;
+ 
+   /**
+    * This total number of endpoints.
+    *
+    * @serial the number of endpoints, possibly less than the array sizes
+    */
+   public int npoints;
+ 
+   /**
+    * The array of X coordinates of endpoints. This should not be null.
+    *
+    * @see #addPoint(int, int)
+    * @serial the x coordinates
+    */
+   public int[] xpoints;
+ 
+   /**
+    * The array of Y coordinates of endpoints. This should not be null.
+    *
+    * @see #addPoint(int, int)
+    * @serial the y coordinates
+    */
+   public int[] ypoints;
+ 
+   /**
+    * The bounding box of this polygon. This is lazily created and cached, so
+    * it must be invalidated after changing points.
+    *
+    * @see #getBounds()
+    * @serial the bounding box, or null
+    */
+   protected Rectangle bounds;
+ 
+   /** A big number, but not so big it can't survive a few float operations */
+   private static final double BIG_VALUE = java.lang.Double.MAX_VALUE / 10.0;
+ 
+   /**
+    * Initializes an empty polygon.
+    */
+   public Polygon()
+   {
+     // Leave room for growth.
+     xpoints = new int[4];
+     ypoints = new int[4];
+   }
+ 
+   /**
+    * Create a new polygon with the specified endpoints. The arrays are copied,
+    * so that future modifications to the parameters do not affect the polygon.
+    *
+    * @param xpoints the array of X coordinates for this polygon
+    * @param ypoints the array of Y coordinates for this polygon
+    * @param npoints the total number of endpoints in this polygon
+    * @throws NegativeArraySizeException if npoints is negative
+    * @throws IndexOutOfBoundsException if npoints exceeds either array
+    * @throws NullPointerException if xpoints or ypoints is null
+    */
+   public Polygon(int[] xpoints, int[] ypoints, int npoints)
+   {
+     this.xpoints = new int[npoints];
+     this.ypoints = new int[npoints];
+     System.arraycopy(xpoints, 0, this.xpoints, 0, npoints);
+     System.arraycopy(ypoints, 0, this.ypoints, 0, npoints);
+     this.npoints = npoints;
+   }
+ 
+   /**
+    * Reset the polygon to be empty. The arrays are left alone, to avoid object
+    * allocation, but the number of points is set to 0, and all cached data
+    * is discarded. If you are discarding a huge number of points, it may be
+    * more efficient to just create a new Polygon.
+    *
+    * @see #invalidate()
+    * @since 1.4
+    */
+   public void reset()
+   {
+     npoints = 0;
+     invalidate();
+   }
+ 
+   /**
+    * Invalidate or flush all cached data. After direct manipulation of the
+    * public member fields, this is necessary to avoid inconsistent results
+    * in methods like <code>contains</code>.
+    *
+    * @see #getBounds()
+    * @since 1.4
+    */
+   public void invalidate()
+   {
+     bounds = null;
+   }
+ 
+   /**
+    * Translates the polygon by adding the specified values to all X and Y
+    * coordinates. This updates the bounding box, if it has been calculated.
+    *
+    * @param dx the amount to add to all X coordinates
+    * @param dy the amount to add to all Y coordinates
+    * @since 1.1
+    */
+   public void translate(int dx, int dy)
+   {
+     int i = npoints;
+     while (--i >= 0)
+       {
+ 	xpoints[i] += dx;
+ 	ypoints[i] += dy;
+       }
+     if (bounds != null)
+       {
+ 	bounds.x += dx;
+ 	bounds.y += dy;
+       }
+   }
+ 
+   /**
+    * Adds the specified endpoint to the polygon. This updates the bounding
+    * box, if it has been created.
+    *
+    * @param x the X coordinate of the point to add
+    * @param y the Y coordiante of the point to add
+    */
+   public void addPoint(int x, int y)
+   {
+     if (npoints + 1 > xpoints.length)
+       {
+ 	int[] newx = new int[npoints + 1];
+ 	System.arraycopy(xpoints, 0, newx, 0, npoints);
+ 	xpoints = newx;
+       }
+     if (npoints + 1 > ypoints.length)
+       {
+ 	int[] newy = new int[npoints + 1];
+ 	System.arraycopy(ypoints, 0, newy, 0, npoints);
+ 	ypoints = newy;
+       }
+     xpoints[npoints] = x;
+     ypoints[npoints] = y;
+     npoints++;
+     if (bounds != null)
+       {
+ 	if (npoints == 1)
+ 	  {
+ 	    bounds.x = x;
+ 	    bounds.y = y;
+ 	  }
+ 	else
+ 	  {
+ 	    if (x < bounds.x)
+ 	      {
+ 		bounds.width += bounds.x - x;
+ 		bounds.x = x;
+ 	      }
+ 	    else if (x > bounds.x + bounds.width)
+ 	      bounds.width = x - bounds.x;
+ 	    if (y < bounds.y)
+ 	      {
+ 		bounds.height += bounds.y - y;
+ 		bounds.y = y;
+ 	      }
+ 	    else if (y > bounds.y + bounds.height)
+ 	      bounds.height = y - bounds.y;
+ 	  }
+       }
+   }
+ 
+   /**
+    * Returns the bounding box of this polygon. This is the smallest
+    * rectangle with sides parallel to the X axis that will contain this
+    * polygon.
+    *
+    * @return the bounding box for this polygon
+    * @see #getBounds2D()
+    * @since 1.1
+    */
+   public Rectangle getBounds()
+   {
+     return getBoundingBox();
+   }
+ 
+   /**
+    * Returns the bounding box of this polygon. This is the smallest
+    * rectangle with sides parallel to the X axis that will contain this
+    * polygon.
+    *
+    * @return the bounding box for this polygon
+    * @see #getBounds2D()
+    * @deprecated use {@link #getBounds()} instead
+    */
+   public Rectangle getBoundingBox()
+   {
+     if (bounds == null)
+       {
+ 	if (npoints == 0)
+ 	  return bounds = new Rectangle();
+ 	int i = npoints - 1;
+ 	int minx = xpoints[i];
+ 	int maxx = minx;
+ 	int miny = ypoints[i];
+ 	int maxy = miny;
+ 	while (--i >= 0)
+ 	  {
+ 	    int x = xpoints[i];
+ 	    int y = ypoints[i];
+ 	    if (x < minx)
+ 	      minx = x;
+ 	    else if (x > maxx)
+ 	      maxx = x;
+ 	    if (y < miny)
+ 	      miny = y;
+ 	    else if (y > maxy)
+ 	      maxy = y;
+ 	  }
+ 	bounds = new Rectangle(minx, miny, maxx - minx, maxy - miny);
+       }
+     return bounds;
+   }
+ 
+   /**
+    * Tests whether or not the specified point is inside this polygon.
+    *
+    * @param p the point to test
+    * @return true if the point is inside this polygon
+    * @throws NullPointerException if p is null
+    * @see #contains(double, double)
+    */
+   public boolean contains(Point p)
+   {
+     return contains(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Tests whether or not the specified point is inside this polygon.
+    *
+    * @param x the X coordinate of the point to test
+    * @param y the Y coordinate of the point to test
+    * @return true if the point is inside this polygon
+    * @see #contains(double, double)
+    * @since 1.1
+    */
+   public boolean contains(int x, int y)
+   {
+     return contains((double) x, (double) y);
+   }
+ 
+   /**
+    * Tests whether or not the specified point is inside this polygon.
+    *
+    * @param x the X coordinate of the point to test
+    * @param y the Y coordinate of the point to test
+    * @return true if the point is inside this polygon
+    * @see #contains(double, double)
+    * @deprecated use {@link #contains(int, int)} instead
+    */
+   public boolean inside(int x, int y)
+   {
+     return contains((double) x, (double) y);
+   }
+ 
+   /**
+    * Returns a high-precision bounding box of this polygon. This is the
+    * smallest rectangle with sides parallel to the X axis that will contain
+    * this polygon.
+    *
+    * @return the bounding box for this polygon
+    * @see #getBounds()
+    * @since 1.2
+    */
+   public Rectangle2D getBounds2D()
+   {
+     // For polygons, the integer version is exact!
+     return getBounds();
+   }
+ 
+   /**
+    * Tests whether or not the specified point is inside this polygon.
+    *
+    * @param x the X coordinate of the point to test
+    * @param y the Y coordinate of the point to test
+    * @return true if the point is inside this polygon
+    * @since 1.2
+    */
+   public boolean contains(double x, double y)
+   {
+     return ((evaluateCrossings(x, y, false, BIG_VALUE) & 1) != 0);
+   }
+ 
+   /**
+    * Tests whether or not the specified point is inside this polygon.
+    *
+    * @param p the point to test
+    * @return true if the point is inside this polygon
+    * @throws NullPointerException if p is null
+    * @see #contains(double, double)
+    * @since 1.2
+    */
+   public boolean contains(Point2D p)
+   {
+     return contains(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Test if a high-precision rectangle intersects the shape. This is true
+    * if any point in the rectangle is in the shape. This implementation is
+    * precise.
+    *
+    * @param x the x coordinate of the rectangle
+    * @param y the y coordinate of the rectangle
+    * @param w the width of the rectangle, treated as point if negative
+    * @param h the height of the rectangle, treated as point if negative
+    * @return true if the rectangle intersects this shape
+    * @since 1.2
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     /* Does any edge intersect? */
+     if (evaluateCrossings(x, y, false, w) != 0 /* top */
+         || evaluateCrossings(x, y + h, false, w) != 0 /* bottom */
+         || evaluateCrossings(x + w, y, true, h) != 0 /* right */
+         || evaluateCrossings(x, y, true, h) != 0) /* left */
+       return true;
+ 
+     /* No intersections, is any point inside? */
+     if ((evaluateCrossings(x, y, false, BIG_VALUE) & 1) != 0)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Test if a high-precision rectangle intersects the shape. This is true
+    * if any point in the rectangle is in the shape. This implementation is
+    * precise.
+    *
+    * @param r the rectangle
+    * @return true if the rectangle intersects this shape
+    * @throws NullPointerException if r is null
+    * @see #intersects(double, double, double, double)
+    * @since 1.2
+    */
+   public boolean intersects(Rectangle2D r)
+   {
+     return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Test if a high-precision rectangle lies completely in the shape. This is
+    * true if all points in the rectangle are in the shape. This implementation
+    * is precise.
+    *
+    * @param x the x coordinate of the rectangle
+    * @param y the y coordinate of the rectangle
+    * @param w the width of the rectangle, treated as point if negative
+    * @param h the height of the rectangle, treated as point if negative
+    * @return true if the rectangle is contained in this shape
+    * @since 1.2
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     if (! getBounds2D().intersects(x, y, w, h))
+       return false;
+ 
+     /* Does any edge intersect? */
+     if (evaluateCrossings(x, y, false, w) != 0 /* top */
+         || evaluateCrossings(x, y + h, false, w) != 0 /* bottom */
+         || evaluateCrossings(x + w, y, true, h) != 0 /* right */
+         || evaluateCrossings(x, y, true, h) != 0) /* left */
+       return false;
+ 
+     /* No intersections, is any point inside? */
+     if ((evaluateCrossings(x, y, false, BIG_VALUE) & 1) != 0)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Test if a high-precision rectangle lies completely in the shape. This is
+    * true if all points in the rectangle are in the shape. This implementation
+    * is precise.
+    *
+    * @param r the rectangle
+    * @return true if the rectangle is contained in this shape
+    * @throws NullPointerException if r is null
+    * @see #contains(double, double, double, double)
+    * @since 1.2
+    */
+   public boolean contains(Rectangle2D r)
+   {
+     return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Return an iterator along the shape boundary. If the optional transform
+    * is provided, the iterator is transformed accordingly. Each call returns
+    * a new object, independent from others in use. This class is not
+    * threadsafe to begin with, so the path iterator is not either.
+    *
+    * @param transform an optional transform to apply to the iterator
+    * @return a new iterator over the boundary
+    * @since 1.2
+    */
+   public PathIterator getPathIterator(final AffineTransform transform)
+   {
+     return new PathIterator()
+       {
+ 	/** The current vertex of iteration. */
+ 	private int vertex;
+ 
+ 	public int getWindingRule()
+ 	{
+ 	  return WIND_EVEN_ODD;
+ 	}
+ 
+ 	public boolean isDone()
+ 	{
+ 	  return vertex > npoints;
+ 	}
+ 
+ 	public void next()
+ 	{
+ 	  vertex++;
+ 	}
+ 
+ 	public int currentSegment(float[] coords)
+ 	{
+ 	  if (vertex >= npoints)
+ 	    return SEG_CLOSE;
+ 	  coords[0] = xpoints[vertex];
+ 	  coords[1] = ypoints[vertex];
+ 	  if (transform != null)
+ 	    transform.transform(coords, 0, coords, 0, 1);
+ 	  return vertex == 0 ? SEG_MOVETO : SEG_LINETO;
+ 	}
+ 
+ 	public int currentSegment(double[] coords)
+ 	{
+ 	  if (vertex >= npoints)
+ 	    return SEG_CLOSE;
+ 	  coords[0] = xpoints[vertex];
+ 	  coords[1] = ypoints[vertex];
+ 	  if (transform != null)
+ 	    transform.transform(coords, 0, coords, 0, 1);
+ 	  return vertex == 0 ? SEG_MOVETO : SEG_LINETO;
+ 	}
+       };
+   }
+ 
+   /**
+    * Return an iterator along the flattened version of the shape boundary.
+    * Since polygons are already flat, the flatness parameter is ignored, and
+    * the resulting iterator only has SEG_MOVETO, SEG_LINETO and SEG_CLOSE
+    * points. If the optional transform is provided, the iterator is
+    * transformed accordingly. Each call returns a new object, independent
+    * from others in use. This class is not threadsafe to begin with, so the
+    * path iterator is not either.
+    *
+    * @param transform an optional transform to apply to the iterator
+    * @param flatness the maximum distance for deviation from the real boundary
+    * @return a new iterator over the boundary
+    * @since 1.2
+    */
+   public PathIterator getPathIterator(AffineTransform transform,
+                                       double flatness)
+   {
+     return getPathIterator(transform);
+   }
+ 
+   /**
+    * Helper for contains, intersects, calculates the number of intersections
+    * between the polygon and a line extending from the point (x, y) along
+    * the positive X, or Y axis, within a given interval.
+    *
+    * @return the winding number.
+    * @see #contains(double, double)
+    */
+   private int evaluateCrossings(double x, double y, boolean useYaxis,
+                                 double distance)
+   {
+     double x0;
+     double x1;
+     double y0;
+     double y1;
+     double epsilon = 0.0;
+     int crossings = 0;
+     int[] xp;
+     int[] yp;
+ 
+     if (useYaxis)
+       {
+ 	xp = ypoints;
+ 	yp = xpoints;
+ 	double swap;
+ 	swap = y;
+ 	y = x;
+ 	x = swap;
+       }
+     else
+       {
+ 	xp = xpoints;
+ 	yp = ypoints;
+       }
+ 
+     /* Get a value which is small but not insignificant relative the path. */
+     epsilon = 1E-7;
+ 
+     x0 = xp[0] - x;
+     y0 = yp[0] - y;
+     for (int i = 1; i < npoints; i++)
+       {
+ 	x1 = xp[i] - x;
+ 	y1 = yp[i] - y;
+ 
+ 	if (y0 == 0.0)
+ 	  y0 -= epsilon;
+ 	if (y1 == 0.0)
+ 	  y1 -= epsilon;
+ 	if (y0 * y1 < 0)
+ 	  if (Line2D.linesIntersect(x0, y0, x1, y1, epsilon, 0.0, distance, 0.0))
+ 	    ++crossings;
+ 
+ 	x0 = xp[i] - x;
+ 	y0 = yp[i] - y;
+       }
+ 
+     // end segment
+     x1 = xp[0] - x;
+     y1 = yp[0] - y;
+     if (y0 == 0.0)
+       y0 -= epsilon;
+     if (y1 == 0.0)
+       y1 -= epsilon;
+     if (y0 * y1 < 0)
+       if (Line2D.linesIntersect(x0, y0, x1, y1, epsilon, 0.0, distance, 0.0))
+ 	++crossings;
+ 
+     return crossings;
+   }
+ } // class Polygon
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/PopupMenu.java gcc-4.1.0/libjava/classpath/java/awt/PopupMenu.java
*** gcc-4.0.2/libjava/classpath/java/awt/PopupMenu.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/PopupMenu.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,171 ----
+ /* PopupMenu.java -- An AWT popup menu
+    Copyright (C) 1999, 2000, 2001, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.peer.PopupMenuPeer;
+ 
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ 
+ /**
+   * This class implement an AWT popup menu widget
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class PopupMenu extends Menu
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization Constant
+ private static final long serialVersionUID = -4620452533522760060L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>PopupMenu</code>.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+   * returns true.
+   */
+ public
+ PopupMenu()
+ {
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>PopupMenu</code> with the specified
+   * label.
+   *
+   * @param label The label for this popup menu.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+   * returns true.
+   */
+ public
+ PopupMenu(String label)
+ {
+   super(label);
+ 
+   if (GraphicsEnvironment.isHeadless())
+     throw new HeadlessException ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Creates this object's native peer.
+   */
+ public void
+ addNotify()
+ {
+   if (peer == null)
+     peer = getToolkit ().createPopupMenu (this);
+   super.addNotify ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Displays this popup menu at the specified coordinates relative to
+   * the specified component.
+   *
+   * @param component The component to which the display coordinates are relative.
+   * @param x The X coordinate of the menu.
+   * @param y The Y coordinate of the menu.
+   */
+ public void
+ show(Component component, int x, int y)
+ {
+   if (getPeer() == null)
+     this.addNotify();
+   PopupMenuPeer pmp = (PopupMenuPeer)getPeer();
+   if (pmp != null)
+     {
+       /* XXX
+       Event e = new Event (component, Event.ACTION_EVENT, component);
+       e.x = x;
+       e.y = y;*/
+       pmp.show (component, x, y);
+     }
+ }
+ 
+   protected class AccessibleAWTPopupMenu extends AccessibleAWTMenu
+   {
+     private static final long serialVersionUID = -4282044795947239955L;
+ 
+     protected AccessibleAWTPopupMenu()
+     {
+     }
+     
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.POPUP_MENU;
+     }
+     
+   }
+   
+   /**
+    * Gets the AccessibleContext associated with this <code>PopupMenu</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTPopupMenu();
+     return accessibleContext;
+   }
+ 
+ } // class PopupMenu
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/PrintGraphics.java gcc-4.1.0/libjava/classpath/java/awt/PrintGraphics.java
*** gcc-4.0.2/libjava/classpath/java/awt/PrintGraphics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/PrintGraphics.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* PrintGraphics.java -- a print graphics context
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This interface allows the originating print job to be obtained.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface PrintGraphics
+ {
+   /**
+    * Returns the <code>PrintJob</code> that this object is being
+    * managed by.
+    *
+    * @return the print job for this object
+    */
+   PrintJob getPrintJob();
+ } // interface PrintGraphics
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/PrintJob.java gcc-4.1.0/libjava/classpath/java/awt/PrintJob.java
*** gcc-4.0.2/libjava/classpath/java/awt/PrintJob.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/PrintJob.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /* PrintJob.java -- A print job class
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.util.Properties;
+ 
+ /**
+  * This abstract class represents a print job.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Toolkit#getPrintJob(Frame, String, Properties)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public abstract class PrintJob
+ {
+   /**
+    * Create a new PrintJob.
+    */
+   public PrintJob()
+   {
+   }
+ 
+   /**
+    * Returns a graphics context suitable for rendering the next page. The
+    * return must also implement {@link PrintGraphics}.
+    *
+    * @return a graphics context for printing the next page
+    */
+   public abstract Graphics getGraphics();
+ 
+   /**
+    * Returns the dimension of the page in pixels.  The resolution will be
+    * chosen to be similar to the on screen image.
+    *
+    * @return the page dimensions
+    */
+   public abstract Dimension getPageDimension();
+ 
+   /**
+    * Returns the resolution of the page in pixels per inch. Note that this is
+    * not necessarily the printer's resolution.
+    *
+    * @return the resolution of the page in pixels per inch
+    */
+   public abstract int getPageResolution();
+ 
+   /**
+    * Tests whether or not the last page will be printed first.
+    *
+    * @return true if the last page prints first
+    */
+   public abstract boolean lastPageFirst();
+ 
+   /**
+    * Informs the print job that printing is complete or should be aborted.
+    */
+   public abstract void end();
+ 
+   /**
+    * This method explicitly ends the print job in the event the job
+    * becomes un-referenced without the application having done so.
+    */
+   public void finalize()
+   {
+     end();
+   }
+ } // class PrintJob
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Rectangle.java gcc-4.1.0/libjava/classpath/java/awt/Rectangle.java
*** gcc-4.0.2/libjava/classpath/java/awt/Rectangle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Rectangle.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,753 ----
+ /* Rectangle.java -- represents a graphics rectangle
+    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.Rectangle2D;
+ import java.io.Serializable;
+ 
+ /**
+  * This class represents a rectangle and all the interesting things you
+  * might want to do with it.  Note that the coordinate system uses
+  * the origin (0,0) as the top left of the screen, with the x and y
+  * values increasing as they move to the right and down respectively.
+  *
+  * <p>It is valid for a rectangle to have negative width or height; but it
+  * is considered to have no area or internal points. Therefore, the behavior
+  * in methods like <code>contains</code> or <code>intersects</code> is
+  * undefined unless the rectangle has positive width and height.
+  *
+  * <p>There are some public fields; if you mess with them in an inconsistent
+  * manner, it is your own fault when you get NullPointerException,
+  * ArrayIndexOutOfBoundsException, or invalid results. Also, this class is
+  * not threadsafe.
+  *
+  * @author Warren Levy  (warrenl@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Rectangle extends Rectangle2D implements Shape, Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -4345857070255674764L;
+ 
+   /**
+    * The X coordinate of the top-left corner of the rectangle.
+    *
+    * @see #setLocation(int, int)
+    * @see #getLocation()
+    * @serial the x coordinate
+    */
+   public int x;
+ 
+   /**
+    * The Y coordinate of the top-left corner of the rectangle.
+    *
+    * @see #setLocation(int, int)
+    * @see #getLocation()
+    * @serial the y coordinate
+    */
+   public int y;
+ 
+   /**
+    * The width of the rectangle.
+    *
+    * @see #setSize(int, int)
+    * @see #getSize()
+    * @serial
+    */
+   public int width;
+ 
+   /**
+    * The height of the rectangle.
+    *
+    * @see #setSize(int, int)
+    * @see #getSize()
+    * @serial
+    */
+   public int height;
+ 
+   /**
+    * Initializes a new instance of <code>Rectangle</code> with a top
+    * left corner at (0,0) and a width and height of 0.
+    */
+   public Rectangle()
+   {
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Rectangle</code> from the
+    * coordinates of the specified rectangle.
+    *
+    * @param r the rectangle to copy from
+    * @throws NullPointerException if r is null
+    * @since 1.1
+    */
+   public Rectangle(Rectangle r)
+   {
+     x = r.x;
+     y = r.y;
+     width = r.width;
+     height = r.height;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Rectangle</code> from the specified
+    * inputs.
+    *
+    * @param x the X coordinate of the top left corner
+    * @param y the Y coordinate of the top left corner
+    * @param width the width of the rectangle
+    * @param height the height of the rectangle
+    */
+   public Rectangle(int x, int y, int width, int height)
+   {
+     this.x = x;
+     this.y = y;
+     this.width = width;
+     this.height = height;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Rectangle</code> with the specified
+    * width and height. The upper left corner of the rectangle will be at
+    * the origin (0,0).
+    *
+    * @param width the width of the rectangle
+    * @param height the height of the rectange
+    */
+   public Rectangle(int width, int height)
+   {
+     this.width = width;
+     this.height = height;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Rectangle</code> with a top-left
+    * corner represented by the specified point and the width and height
+    * represented by the specified dimension.
+    *
+    * @param p the upper left corner of the rectangle
+    * @param d the width and height of the rectangle
+    * @throws NullPointerException if p or d is null
+    */
+   public Rectangle(Point p, Dimension d)
+   {
+     x = p.x;
+     y = p.y;
+     width = d.width;
+     height = d.height;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Rectangle</code> with a top left
+    * corner at the specified point and a width and height of zero.
+    *
+    * @param p the upper left corner of the rectangle
+    */
+   public Rectangle(Point p)
+   {
+     x = p.x;
+     y = p.y;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Rectangle</code> with an
+    * upper left corner at the origin (0,0) and a width and height represented
+    * by the specified dimension.
+    *
+    * @param d the width and height of the rectangle
+    */
+   public Rectangle(Dimension d)
+   {
+     width = d.width;
+     height = d.height;
+   }
+ 
+   /**
+    * Get the X coordinate of the upper-left corner.
+    *
+    * @return the value of x, as a double
+    */
+   public double getX()
+   {
+     return x;
+   }
+ 
+   /**
+    * Get the Y coordinate of the upper-left corner.
+    *
+    * @return the value of y, as a double
+    */
+   public double getY()
+   {
+     return y;
+   }
+ 
+   /**
+    * Get the width of the rectangle.
+    *
+    * @return the value of width, as a double
+    */
+   public double getWidth()
+   {
+     return width;
+   }
+ 
+   /**
+    * Get the height of the rectangle.
+    *
+    * @return the value of height, as a double
+    */
+   public double getHeight()
+   {
+     return height;
+   }
+ 
+   /**
+    * Returns the bounds of this rectangle. A pretty useless method, as this
+    * is already a rectangle; it is included to mimic the
+    * <code>getBounds</code> method in Component.
+    *
+    * @return a copy of this rectangle
+    * @see #setBounds(Rectangle)
+    * @since 1.1
+    */
+   public Rectangle getBounds()
+   {
+     return new Rectangle(this);
+   }
+ 
+   /**
+    * Returns the high-precision bounds of this rectangle. A pretty useless
+    * method, as this is already a rectangle.
+    *
+    * @return a copy of this rectangle
+    * @see #setBounds(Rectangle)
+    * @since 1.2
+    */
+   public Rectangle2D getBounds2D()
+   {
+     return new Rectangle(x, y, width, height);
+   }
+ 
+   /**
+    * Updates this rectangle to match the dimensions of the specified
+    * rectangle.
+    *
+    * @param r the rectangle to update from
+    * @throws NullPointerException if r is null
+    * @see #setBounds(int, int, int, int)
+    * @since 1.1
+    */
+   public void setBounds(Rectangle r)
+   {
+     setBounds (r.x, r.y, r.width, r.height);
+   }
+ 
+   /**
+    * Updates this rectangle to have the specified dimensions.
+    *
+    * @param x the new X coordinate of the upper left hand corner
+    * @param y the new Y coordinate of the upper left hand corner
+    * @param width the new width of this rectangle
+    * @param height the new height of this rectangle
+    * @since 1.1
+    */
+   public void setBounds(int x, int y, int width, int height)
+   {
+     reshape (x, y, width, height);
+   }
+ 
+   /**
+    * Updates this rectangle to have the specified dimensions, as rounded to
+    * integers.
+    *
+    * @param x the new X coordinate of the upper left hand corner
+    * @param y the new Y coordinate of the upper left hand corner
+    * @param width the new width of this rectangle
+    * @param height the new height of this rectangle
+    * @since 1.2
+    */
+   public void setRect(double x, double y, double width, double height)
+   {
+     this.x = (int) x;
+     this.y = (int) y;
+     this.width = (int) width;
+     this.height = (int) height;
+   }
+ 
+   /**
+    * Updates this rectangle to have the specified dimensions.
+    *
+    * @param x the new X coordinate of the upper left hand corner
+    * @param y the new Y coordinate of the upper left hand corner
+    * @param width the new width of this rectangle
+    * @param height the new height of this rectangle
+    * @deprecated use {@link #setBounds(int, int, int, int)} instead
+    */
+   public void reshape(int x, int y, int width, int height)
+   {
+     this.x = x;
+     this.y = y;
+     this.width = width;
+     this.height = height;
+   }
+ 
+   /**
+    * Returns the location of this rectangle, which is the coordinates of
+    * its upper left corner.
+    *
+    * @return the point where this rectangle is located
+    * @see #setLocation(Point)
+    * @since 1.1
+    */
+   public Point getLocation()
+   {
+     return new Point(x,y);
+   }
+ 
+   /**
+    * Moves the location of this rectangle by setting its upper left
+    * corner to the specified point.
+    *
+    * @param p the point to move the rectangle to
+    * @throws NullPointerException if p is null
+    * @see #getLocation()
+    * @since 1.1
+    */
+   public void setLocation(Point p)
+   {
+     setLocation (p.x, p.y);
+   }
+ 
+   /**
+    * Moves the location of this rectangle by setting its upper left
+    * corner to the specified coordinates.
+    *
+    * @param x the new X coordinate for this rectangle
+    * @param y the new Y coordinate for this rectangle
+    * @since 1.1
+    */
+   public void setLocation(int x, int y)
+   {
+     move (x, y);
+   }
+ 
+   /**
+    * Moves the location of this rectangle by setting its upper left
+    * corner to the specified coordinates.
+    *
+    * @param x the new X coordinate for this rectangle
+    * @param y the new Y coordinate for this rectangle
+    * @deprecated use {@link #setLocation(int, int)} instead
+    */
+   public void move(int x, int y)
+   {
+     this.x = x;
+     this.y = y;
+   }
+ 
+   /**
+    * Translate the location of this rectangle by the given amounts.
+    *
+    * @param dx the x distance to move by
+    * @param dy the y distance to move by
+    * @see #setLocation(int, int)
+    */
+   public void translate(int dx, int dy)
+   {
+     x += dx;
+     y += dy;
+   }
+ 
+   /**
+    * Returns the size of this rectangle.
+    *
+    * @return the size of this rectangle
+    * @see #setSize(Dimension)
+    * @since 1.1
+    */
+   public Dimension getSize()
+   {
+     return new Dimension(width, height);
+   }
+ 
+   /**
+    * Sets the size of this rectangle based on the specified dimensions.
+    *
+    * @param d the new dimensions of the rectangle
+    * @throws NullPointerException if d is null
+    * @see #getSize()
+    * @since 1.1
+    */
+   public void setSize(Dimension d)
+   {
+     setSize (d.width, d.height);
+   }
+ 
+   /**
+    * Sets the size of this rectangle based on the specified dimensions.
+    *
+    * @param width the new width of the rectangle
+    * @param height the new height of the rectangle
+    * @since 1.1
+    */
+   public void setSize(int width, int height)
+   {
+     resize (width, height);
+   }
+ 
+   /**
+    * Sets the size of this rectangle based on the specified dimensions.
+    *
+    * @param width the new width of the rectangle
+    * @param height the new height of the rectangle
+    * @deprecated use {@link #setSize(int, int)} instead
+    */
+   public void resize(int width, int height)
+   {
+     this.width = width;
+     this.height = height;
+   }
+ 
+   /**
+    * Tests whether or not the specified point is inside this rectangle.
+    * According to the contract of Shape, a point on the border is in only if
+    * it has an adjacent point inside the rectangle in either the increasing
+    * x or y direction.
+    *
+    * @param p the point to test
+    * @return true if the point is inside the rectangle
+    * @throws NullPointerException if p is null
+    * @see #contains(int, int)
+    * @since 1.1
+    */
+   public boolean contains(Point p)
+   {
+     return contains (p.x, p.y);
+   }
+ 
+   /**
+    * Tests whether or not the specified point is inside this rectangle.
+    * According to the contract of Shape, a point on the border is in only if
+    * it has an adjacent point inside the rectangle in either the increasing
+    * x or y direction.
+    *
+    * @param x the X coordinate of the point to test
+    * @param y the Y coordinate of the point to test
+    * @return true if the point is inside the rectangle
+    * @since 1.1
+    */
+   public boolean contains(int x, int y)
+   {
+     return inside (x, y);
+   }
+ 
+   /**
+    * Checks whether all points in the given rectangle are contained in this
+    * rectangle.
+    *
+    * @param r the rectangle to check
+    * @return true if r is contained in this rectangle
+    * @throws NullPointerException if r is null
+    * @see #contains(int, int, int, int)
+    * @since 1.1
+    */
+   public boolean contains(Rectangle r)
+   {
+     return contains (r.x, r.y, r.width, r.height);
+   }
+ 
+   /**
+    * Checks whether all points in the given rectangle are contained in this
+    * rectangle.
+    *
+    * @param x the x coordinate of the rectangle to check
+    * @param y the y coordinate of the rectangle to check
+    * @param w the width of the rectangle to check
+    * @param h the height of the rectangle to check
+    * @return true if the parameters are contained in this rectangle
+    * @since 1.1
+    */
+   public boolean contains(int x, int y, int w, int h)
+   {
+     return width > 0 && height > 0 && w > 0 && h > 0
+       && x >= this.x && x + w <= this.x + this.width
+       && y >= this.y && y + h <= this.y + this.height;
+   }
+ 
+   /**
+    * Tests whether or not the specified point is inside this rectangle.
+    *
+    * @param x the X coordinate of the point to test
+    * @param y the Y coordinate of the point to test
+    * @return true if the point is inside the rectangle
+    * @deprecated use {@link #contains(int, int)} instead
+    */
+   public boolean inside(int x, int y)
+   {
+     return width > 0 && height > 0
+       && x >= this.x && x < this.x + width
+       && y >= this.y && y < this.y + height;
+   }
+ 
+   /**
+    * Tests whether or not the specified rectangle intersects this rectangle.
+    * This means the two rectangles share at least one internal point.
+    *
+    * @param r the rectangle to test against
+    * @return true if the specified rectangle intersects this one
+    * @throws NullPointerException if r is null
+    * @since 1.2
+    */
+   public boolean intersects(Rectangle r)
+   {
+     return r.width > 0 && r.height > 0 && width > 0 && height > 0
+       && r.x < x + width && r.x + r.width > x
+       && r.y < y + height && r.y + r.height > y;
+   }
+ 
+   /**
+    * Determines the rectangle which is formed by the intersection of this
+    * rectangle with the specified rectangle. If the two do not intersect,
+    * an empty rectangle will be returned (meaning the width and/or height
+    * will be non-positive).
+    *
+    * @param r the rectange to calculate the intersection with
+    * @return a new rectangle bounding the intersection
+    * @throws NullPointerException if r is null
+    */
+   public Rectangle intersection(Rectangle r)
+   {
+     Rectangle res = new Rectangle();
+     intersect(this, r, res);
+     return res;
+   }
+ 
+   /**
+    * Returns the smallest rectangle that contains both this rectangle
+    * and the specified rectangle.
+    *
+    * @param r the rectangle to compute the union with
+    * @return the smallest rectangle containing both rectangles
+    * @throws NullPointerException if r is null
+    */
+   public Rectangle union(Rectangle r)
+   {
+     Rectangle res = new Rectangle();
+     union(this, r, res);
+     return res;
+   }
+ 
+   /**
+    * Modifies this rectangle so that it represents the smallest rectangle
+    * that contains both the existing rectangle and the specified point.
+    * However, if the point falls on one of the two borders which are not
+    * inside the rectangle, a subsequent call to <code>contains</code> may
+    * return false.
+    *
+    * @param x the X coordinate of the point to add to this rectangle
+    * @param y the Y coordinate of the point to add to this rectangle
+    */
+   public void add(int x, int y)
+   {
+     add((double) x, (double) y);
+   }
+ 
+   /**
+    * Modifies this rectangle so that it represents the smallest rectangle
+    * that contains both the existing rectangle and the specified point.
+    * However, if the point falls on one of the two borders which are not
+    * inside the rectangle, a subsequent call to <code>contains</code> may
+    * return false.
+    *
+    * @param p the point to add to this rectangle
+    * @throws NullPointerException if p is null
+    */
+   public void add(Point p)
+   {
+     add((double) p.x, (double) p.y);
+   }
+ 
+   /**
+    * Modifies this rectangle so that it represents the smallest rectangle
+    * that contains both the existing rectangle and the specified rectangle.
+    *
+    * @param r the rectangle to add to this rectangle
+    * @throws NullPointerException if r is null
+    * @see #union(Rectangle)
+    */
+   public void add(Rectangle r)
+   {
+     union(this, r, this);
+   }
+ 
+   /**
+    * Expands the rectangle by the specified amount.  The horizontal
+    * and vertical expansion values are applied both to the X,Y coordinate
+    * of this rectangle, and its width and height.  Thus the width and
+    * height will increase by 2h and 2v accordingly.
+    *
+    * @param h the horizontal expansion value
+    * @param v the vertical expansion value
+    */
+   public void grow(int h, int v)
+   {
+     x -= h;
+     y -= v;
+     width += h + h;
+     height += v + v;
+   }
+ 
+   /**
+    * Tests whether or not this rectangle is empty.  An empty rectangle
+    * has a non-positive width or height.
+    *
+    * @return true if the rectangle is empty
+    */
+   public boolean isEmpty()
+   {
+     return width <= 0 || height <= 0;
+   }
+ 
+   /**
+    * Determine where the point lies with respect to this rectangle. The
+    * result will be the binary OR of the appropriate bit masks.
+    *
+    * @param x the x coordinate to check
+    * @param y the y coordinate to check
+    * @return the binary OR of the result
+    * @see #OUT_LEFT
+    * @see #OUT_TOP
+    * @see #OUT_RIGHT
+    * @see #OUT_BOTTOM
+    * @since 1.2
+    */
+   public int outcode(double x, double y)
+   {
+     int result = 0;
+     if (width <= 0)
+       result |= OUT_LEFT | OUT_RIGHT;
+     else if (x < this.x)
+       result |= OUT_LEFT;
+     else if (x > this.x + width)
+       result |= OUT_RIGHT;
+     if (height <= 0)
+       result |= OUT_BOTTOM | OUT_TOP;
+     else if (y < this.y) // Remember that +y heads top-to-bottom.
+       result |= OUT_TOP;
+     else if (y > this.y + height)
+       result |= OUT_BOTTOM;
+     return result;
+   }
+ 
+   /**
+    * Determines the rectangle which is formed by the intersection of this
+    * rectangle with the specified rectangle. If the two do not intersect,
+    * an empty rectangle will be returned (meaning the width and/or height
+    * will be non-positive).
+    *
+    * @param r the rectange to calculate the intersection with
+    * @return a new rectangle bounding the intersection
+    * @throws NullPointerException if r is null
+    * @since 1.2
+    */
+   public Rectangle2D createIntersection(Rectangle2D r)
+   {
+     // Favor runtime type of other rectangle.
+     Rectangle2D res = r.getBounds2D();
+     intersect(this, r, res);
+     return res;
+   }
+ 
+   /**
+    * Returns the smallest rectangle that contains both this rectangle
+    * and the specified rectangle.
+    *
+    * @param r the rectangle to compute the union with
+    * @return the smallest rectangle containing both rectangles
+    * @throws NullPointerException if r is null
+    * @since 1.2
+    */
+   public Rectangle2D createUnion(Rectangle2D r)
+   {
+     // Favor runtime type of other rectangle.
+     Rectangle2D res = r.getBounds2D();
+     union(this, r, res);
+     return res;
+   }
+ 
+   /**
+    * Tests this rectangle for equality against the specified object.  This
+    * will be true if an only if the specified object is an instance of
+    * Rectangle2D with the same coordinates and dimensions.
+    *
+    * @param obj the object to test against for equality
+    * @return true if the specified object is equal to this one
+    */
+   public boolean equals(Object obj)
+   {
+     // NOTE: No special hashCode() method is required for this class,
+     // as this equals() implementation is functionally equivalent to
+     // super.equals(), which does define a proper hashCode().
+ 
+     if (! (obj instanceof Rectangle2D))
+       return false;
+     Rectangle2D r = (Rectangle2D) obj;
+     return r.getX() == x && r.getY() == y
+       && r.getWidth() == width && r.getHeight() == height;
+   }
+ 
+   /**
+    * Returns a string representation of this rectangle. This is in the form
+    * <code>getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width
+    * + ",height=" + height + ']'</code>.
+    *
+    * @return a string representation of this rectangle
+    */
+   public String toString()
+   {
+     return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width
+       + ",height=" + height + ']';
+   }
+ } // class Rectangle
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/RenderingHints.java gcc-4.1.0/libjava/classpath/java/awt/RenderingHints.java
*** gcc-4.0.2/libjava/classpath/java/awt/RenderingHints.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/RenderingHints.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,803 ----
+ /* RenderingHints.java --
+    Copyright (C) 2000, 2001, 2002, 2004, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ /**
+  * A collection of (key, value) items that provide 'hints' for the 
+  * {@link java.awt.Graphics2D} rendering pipeline.  Because these
+  * items are hints only, they may be ignored by a particular
+  * {@link java.awt.Graphics2D} implementation.
+  *
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  */
+ public class RenderingHints implements Map, Cloneable
+ {
+   /**
+    * The base class used to represent keys.
+    */
+   public abstract static class Key
+   {
+     private final int key;
+ 
+     /**
+      * Creates a new key.
+      * 
+      * @param privateKey  the private key.
+      */
+     protected Key(int privateKey)
+     {
+       key = privateKey;
+     }
+ 
+     /**
+      * Returns <code>true</code> if the specified value is compatible with
+      * this key, and <code>false</code> otherwise.
+      * 
+      * @param value  the value (<code>null</code> permitted).
+      * 
+      * @return A boolean.
+      */
+     public abstract boolean isCompatibleValue(Object value);
+ 
+     /**
+      * Returns the private key for this instance.
+      * 
+      * @return The private key.
+      */
+     protected final int intKey()
+     {
+       return key;
+     }
+ 
+     /**
+      * Returns a hash code for the key.
+      * 
+      * @return A hash code.
+      */
+     public final int hashCode()
+     {
+       return System.identityHashCode(this);
+     }
+ 
+     /**
+      * Checks this key for equality with an arbitrary object.
+      * 
+      * @param other  the object (<code>null</code> permitted)
+      * 
+      * @return A boolean.
+      */
+     public final boolean equals(Object other)
+     {
+       return this == other;
+     }
+   } // class Key
+ 
+   private static final class KeyImpl extends Key
+   {
+     final String description;
+     final Object v1;
+     final Object v2;
+     final Object v3;
+ 
+     KeyImpl(int privateKey, String description,
+             Object v1, Object v2, Object v3)
+     {
+       super(privateKey);
+       this.description = description;
+       this.v1 = v1;
+       this.v2 = v2;
+       this.v3 = v3;
+     }
+ 
+     /**
+      * Returns <code>true</code> if the specified value is compatible with
+      * this key, and <code>false</code> otherwise.
+      * 
+      * @param value  the value (<code>null</code> permitted).
+      * 
+      * @return A boolean.
+      */
+     public boolean isCompatibleValue(Object value)
+     {
+       return value == v1 || value == v2 || value == v3;
+     }
+ 
+     /**
+      * Returns a string representation of the key.
+      * 
+      * @return A string.
+      */
+     public String toString()
+     {
+       return description;
+     }
+   } // class KeyImpl
+ 
+   private HashMap hintMap = new HashMap();
+ 
+   /**
+    * A key for the 'antialiasing' hint.  Permitted values are:
+    * <p>
+    * <table>
+    * <tr>
+    *   <td>{@link #VALUE_ANTIALIAS_OFF}</td>
+    *   <td>Render without antialiasing (better speed).</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_ANTIALIAS_ON}</td>
+    *   <td>Render with antialiasing (better quality).</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_ANTIALIAS_DEFAULT}</td>
+    *   <td>Use the default value for antialiasing.</td>
+    * </tr>
+    * </table>
+    */
+   public static final Key KEY_ANTIALIASING;
+ 
+   /**
+    * This value is for use with the {@link #KEY_ANTIALIASING} key.
+    */
+   public static final Object VALUE_ANTIALIAS_ON
+     = "Antialiased rendering mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_ANTIALIASING} key.
+    */
+   public static final Object VALUE_ANTIALIAS_OFF
+     = "Nonantialiased rendering mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_ANTIALIASING} key.
+    */
+   public static final Object VALUE_ANTIALIAS_DEFAULT
+     = "Default antialiasing rendering mode";
+ 
+   /**
+    * A key for the 'rendering' hint.  Permitted values are:
+    * <p>
+    * <table>
+    * <tr>
+    *   <td>{@link #VALUE_RENDER_SPEED}</td>
+    *   <td>Prefer speed over quality when rendering.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_RENDER_QUALITY}</td>
+    *   <td>Prefer quality over speed when rendering.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_RENDER_DEFAULT}</td>
+    *   <td>Use the default value for quality vs. speed when rendering.</td>
+    * </tr>
+    * </table>
+    */
+   public static final Key KEY_RENDERING;
+ 
+   /**
+    * This value is for use with the {@link #KEY_RENDERING} key.
+    */
+   public static final Object VALUE_RENDER_SPEED
+     = "Fastest rendering methods";
+ 
+   /**
+    * This value is for use with the {@link #KEY_RENDERING} key.
+    */
+   public static final Object VALUE_RENDER_QUALITY
+     = "Highest quality rendering methods";
+ 
+   /**
+    * This value is for use with the {@link #KEY_RENDERING} key.
+    */
+   public static final Object VALUE_RENDER_DEFAULT
+     = "Default rendering methods";
+ 
+   /**
+    * A key for the 'dithering' hint.  Permitted values are:
+    * <p>
+    * <table>
+    * <tr>
+    *   <td>{@link #VALUE_DITHER_DISABLE}</td>
+    *   <td>Disable dithering.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_DITHER_ENABLE}</td>
+    *   <td>Enable dithering.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_DITHER_DEFAULT}</td>
+    *   <td>Use the default value for dithering.</td>
+    * </tr>
+    * </table>
+    */
+   public static final Key KEY_DITHERING;
+ 
+   /**
+    * This value is for use with the {@link #KEY_DITHERING} key.
+    */
+   public static final Object VALUE_DITHER_DISABLE
+     = "Nondithered rendering mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_DITHERING} key.
+    */
+   public static final Object VALUE_DITHER_ENABLE
+     = "Dithered rendering mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_DITHERING} key.
+    */
+   public static final Object VALUE_DITHER_DEFAULT
+     = "Default dithering mode";
+ 
+   /**
+    * A key for the 'text antialiasing' hint.  Permitted values are:
+    * <p>
+    * <table>
+    * <tr>
+    *   <td>{@link #VALUE_TEXT_ANTIALIAS_ON}</td>
+    *   <td>Render text with antialiasing (better quality usually).</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_TEXT_ANTIALIAS_OFF}</td>
+    *   <td>Render test without antialiasing (better speed).</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_TEXT_ANTIALIAS_DEFAULT}</td>
+    *   <td>Use the default value for text antialiasing.</td>
+    * </tr>
+    * </table>
+    */
+   public static final Key KEY_TEXT_ANTIALIASING;
+ 
+   /**
+    * This value is for use with the {@link #KEY_TEXT_ANTIALIASING} key.
+    */
+   public static final Object VALUE_TEXT_ANTIALIAS_ON
+     = "Antialiased text mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_TEXT_ANTIALIASING} key.
+    */
+   public static final Object VALUE_TEXT_ANTIALIAS_OFF
+     = "Nonantialiased text mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_TEXT_ANTIALIASING} key.
+    */
+   public static final Object VALUE_TEXT_ANTIALIAS_DEFAULT
+     = "Default antialiasing text mode";
+ 
+   /**
+    * A key for the 'fractional metrics' hint.  Permitted values are:
+    * <p>
+    * <table>
+    * <tr>
+    *   <td>{@link #VALUE_FRACTIONALMETRICS_OFF}</td>
+    *   <td>Render text with fractional metrics off.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_FRACTIONALMETRICS_ON}</td>
+    *   <td>Render text with fractional metrics on.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_FRACTIONALMETRICS_DEFAULT}</td>
+    *   <td>Use the default value for fractional metrics.</td>
+    * </tr>
+    * </table>
+    */
+   public static final Key KEY_FRACTIONALMETRICS;
+ 
+   /**
+    * This value is for use with the {@link #KEY_FRACTIONALMETRICS} key.
+    */
+   public static final Object VALUE_FRACTIONALMETRICS_OFF
+     = "Integer text metrics mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_FRACTIONALMETRICS} key.
+    */
+   public static final Object VALUE_FRACTIONALMETRICS_ON
+     = "Fractional text metrics mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_FRACTIONALMETRICS} key.
+    */
+   public static final Object VALUE_FRACTIONALMETRICS_DEFAULT
+     = "Default fractional text metrics mode";
+ 
+   /**
+    * A key for the 'interpolation' hint.  Permitted values are:
+    * <p>
+    * <table>
+    * <tr>
+    *   <td>{@link #VALUE_INTERPOLATION_NEAREST_NEIGHBOR}</td>
+    *   <td>Use nearest neighbour interpolation.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_INTERPOLATION_BILINEAR}</td>
+    *   <td>Use bilinear interpolation.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_INTERPOLATION_BICUBIC}</td>
+    *   <td>Use bicubic interpolation.</td>
+    * </tr>
+    * </table>
+    */
+   public static final Key KEY_INTERPOLATION;
+ 
+   /**
+    * This value is for use with the {@link #KEY_INTERPOLATION} key.
+    */
+   public static final Object VALUE_INTERPOLATION_NEAREST_NEIGHBOR
+     = "Nearest Neighbor image interpolation mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_INTERPOLATION} key.
+    */
+   public static final Object VALUE_INTERPOLATION_BILINEAR
+     = "Bilinear image interpolation mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_INTERPOLATION} key.
+    */
+   public static final Object VALUE_INTERPOLATION_BICUBIC
+     = "Bicubic image interpolation mode";
+ 
+   /**
+    * A key for the 'alpha interpolation' hint.  Permitted values are:
+    * <p>
+    * <table>
+    * <tr>
+    *   <td>{@link #VALUE_ALPHA_INTERPOLATION_SPEED}</td>
+    *   <td>Prefer speed over quality.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_ALPHA_INTERPOLATION_QUALITY}</td>
+    *   <td>Prefer quality over speed.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_ALPHA_INTERPOLATION_DEFAULT}</td>
+    *   <td>Use the default setting.</td>
+    * </tr>
+    * </table>
+    */
+   public static final Key KEY_ALPHA_INTERPOLATION;
+ 
+   /**
+    * This value is for use with the {@link #KEY_ALPHA_INTERPOLATION} key.
+    */
+   public static final Object VALUE_ALPHA_INTERPOLATION_SPEED
+     = "Fastest alpha blending methods";
+ 
+   /**
+    * This value is for use with the {@link #KEY_ALPHA_INTERPOLATION} key.
+    */
+   public static final Object VALUE_ALPHA_INTERPOLATION_QUALITY
+     = "Highest quality alpha blending methods";
+ 
+   /**
+    * This value is for use with the {@link #KEY_ALPHA_INTERPOLATION} key.
+    */
+   public static final Object VALUE_ALPHA_INTERPOLATION_DEFAULT
+     = "Default alpha blending methods";
+ 
+   /**
+    * A key for the 'color rendering' hint.  Permitted values are:
+    * <p>
+    * <table>
+    * <tr>
+    *   <td>{@link #VALUE_COLOR_RENDER_SPEED}</td>
+    *   <td>Prefer speed over quality.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_COLOR_RENDER_QUALITY}</td>
+    *   <td>Prefer quality over speed.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_COLOR_RENDER_DEFAULT}</td>
+    *   <td>Use the default setting.</td>
+    * </tr>
+    * </table>
+    */
+   public static final Key KEY_COLOR_RENDERING;
+ 
+   /**
+    * This value is for use with the {@link #KEY_COLOR_RENDERING} key.
+    */
+   public static final Object VALUE_COLOR_RENDER_SPEED
+     = "Fastest color rendering mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_COLOR_RENDERING} key.
+    */
+   public static final Object VALUE_COLOR_RENDER_QUALITY
+     = "Highest quality color rendering mode";
+ 
+   /**
+    * This value is for use with the {@link #KEY_COLOR_RENDERING} key.
+    */
+   public static final Object VALUE_COLOR_RENDER_DEFAULT
+     = "Default color rendering mode";
+ 
+   /**
+    * A key for the 'stroke control' hint.  Permitted values are:
+    * <p>
+    * <table>
+    * <tr>
+    *   <td>{@link #VALUE_STROKE_DEFAULT}</td>
+    *   <td>Use the default setting.</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_STROKE_NORMALIZE}</td>
+    *   <td>XXX</td>
+    * </tr>
+    * <tr>
+    *   <td>{@link #VALUE_STROKE_PURE}</td>
+    *   <td>XXX</td>
+    * </tr>
+    * </table>
+    */
+   public static final Key KEY_STROKE_CONTROL;
+ 
+   /**
+    * This value is for use with the {@link #KEY_STROKE_CONTROL} key.
+    */
+   public static final Object VALUE_STROKE_DEFAULT
+     = "Default stroke normalization";
+ 
+   /**
+    * This value is for use with the {@link #KEY_STROKE_CONTROL} key.
+    */
+   public static final Object VALUE_STROKE_NORMALIZE
+     = "Normalize strokes for consistent rendering";
+ 
+   /**
+    * This value is for use with the {@link #KEY_STROKE_CONTROL} key.
+    */
+   public static final Object VALUE_STROKE_PURE
+     = "Pure stroke conversion for accurate paths";
+ 
+   static
+   {
+     KEY_ANTIALIASING = new KeyImpl(1, "Global antialiasing enable key",
+                                    VALUE_ANTIALIAS_ON,
+                                    VALUE_ANTIALIAS_OFF,
+                                    VALUE_ANTIALIAS_DEFAULT);
+     KEY_RENDERING = new KeyImpl(2, "Global rendering quality key",
+                                 VALUE_RENDER_SPEED,
+                                 VALUE_RENDER_QUALITY,
+                                 VALUE_RENDER_DEFAULT);
+     KEY_DITHERING = new KeyImpl(3, "Dithering quality key",
+                                 VALUE_DITHER_DISABLE,
+                                 VALUE_DITHER_ENABLE,
+                                 VALUE_DITHER_DEFAULT);
+     KEY_TEXT_ANTIALIASING
+       = new KeyImpl(4, "Text-specific antialiasing enable key",
+                     VALUE_TEXT_ANTIALIAS_ON,
+                     VALUE_TEXT_ANTIALIAS_OFF,
+                     VALUE_TEXT_ANTIALIAS_DEFAULT);
+     KEY_FRACTIONALMETRICS = new KeyImpl(5, "Fractional metrics enable key",
+                                         VALUE_FRACTIONALMETRICS_OFF,
+                                         VALUE_FRACTIONALMETRICS_ON,
+                                         VALUE_FRACTIONALMETRICS_DEFAULT);
+     KEY_INTERPOLATION = new KeyImpl(6, "Image interpolation method key",
+                                     VALUE_INTERPOLATION_NEAREST_NEIGHBOR,
+                                     VALUE_INTERPOLATION_BILINEAR,
+                                     VALUE_INTERPOLATION_BICUBIC);
+     KEY_ALPHA_INTERPOLATION
+       = new KeyImpl(7, "Alpha blending interpolation method key",
+                     VALUE_ALPHA_INTERPOLATION_SPEED,
+                     VALUE_ALPHA_INTERPOLATION_QUALITY,
+                     VALUE_ALPHA_INTERPOLATION_DEFAULT);
+     KEY_COLOR_RENDERING = new KeyImpl(8, "Color rendering quality key",
+                                       VALUE_COLOR_RENDER_SPEED,
+                                       VALUE_COLOR_RENDER_QUALITY,
+                                       VALUE_COLOR_RENDER_DEFAULT);
+     KEY_STROKE_CONTROL = new KeyImpl(9, "Stroke normalization control key",
+                                      VALUE_STROKE_DEFAULT,
+                                      VALUE_STROKE_NORMALIZE,
+                                      VALUE_STROKE_PURE);
+   }
+ 
+   /**
+    * Creates a new collection of hints containing all the (key, value) pairs
+    * in the specified map.
+    * 
+    * @param init  a map containing a collection of hints (<code>null</code> 
+    *              permitted).
+    */
+   public RenderingHints(Map init)
+   {
+     if (init != null)
+       putAll(init);
+   }
+ 
+   /**
+    * Creates a new collection containing a single (key, value) pair.
+    * 
+    * @param key  the key.
+    * @param value  the value.
+    */
+   public RenderingHints(Key key, Object value)
+   {
+     put(key, value);
+   }
+ 
+   /**
+    * Returns the number of hints in the collection.
+    * 
+    * @return The number of hints.
+    */
+   public int size()
+   {
+     return hintMap.size();
+   }
+ 
+   /**
+    * Returns <code>true</code> if there are no hints in the collection,
+    * and <code>false</code> otherwise.
+    * 
+    * @return A boolean.
+    */
+   public boolean isEmpty()
+   {
+     return hintMap.isEmpty();
+   }
+ 
+   /**
+    * Returns <code>true</code> if the collection of hints contains the
+    * specified key, and <code>false</code> otherwise.
+    * 
+    * @param key  the key (<code>null</code> not permitted).
+    * 
+    * @return A boolean.
+    * 
+    * @throws NullPointerException if <code>key</code> is <code>null</code>.
+    * @throws ClassCastException if <code>key</code> is not a {@link Key}.
+    */
+   public boolean containsKey(Object key)
+   {
+     if (key == null)
+       throw new NullPointerException();
+     // don't remove the cast, it is necessary to throw the required exception
+     return hintMap.containsKey((Key) key);
+   }
+ 
+   /**
+    * Returns <code>true</code> if the collection of hints contains the
+    * specified value, and <code>false</code> otherwise.
+    * 
+    * @param value  the value.
+    * 
+    * @return A boolean.
+    */
+   public boolean containsValue(Object value)
+   {
+     return hintMap.containsValue(value);
+   }
+ 
+   /**
+    * Returns the value associated with the specified key, or <code>null</code>
+    * if there is no value defined for the key.
+    * 
+    * @param key  the key (<code>null</code> permitted).
+    * 
+    * @return The value (possibly <code>null</code>).
+    * 
+    * @throws ClassCastException if <code>key</code> is not a {@link Key}.
+    * 
+    * @see #containsKey(Object)
+    */
+   public Object get(Object key)
+   {
+     // don't remove the cast, it is necessary to throw the required exception
+     return hintMap.get((Key) key);
+   }
+ 
+   /**
+    * Adds a (key, value) pair to the collection of hints (if the
+    * collection already contains the specified key, then the 
+    * value is updated).
+    * 
+    * @param key  the key.
+    * @param value  the value.
+    * 
+    * @return  the previous value of the key or <code>null</code> if the key
+    * didn't have a value yet.
+    */
+   public Object put(Object key, Object value)
+   {
+     if (key == null || value == null)
+       throw new NullPointerException();
+     if (! ((Key) key).isCompatibleValue(value))
+       throw new IllegalArgumentException();
+     return hintMap.put(key, value);
+   }
+ 
+   /**
+    * Adds all the hints from a collection to this collection.
+    * 
+    * @param hints  the hint collection.
+    */
+   public void add(RenderingHints hints)
+   {
+     hintMap.putAll(hints);
+   }
+ 
+   /**
+    * Clears all the hints from this collection.
+    */
+   public void clear()
+   {
+     hintMap.clear();
+   }
+ 
+   /**
+    * Removes a hint from the collection.
+    * 
+    * @param key  the key.
+    * 
+    * @return The value that was associated with the key, or <code>null</code> if 
+    *         the key was not part of the collection
+    * 
+    * @throws ClassCastException if the key is not a subclass of 
+    *         {@link RenderingHints.Key}.
+    */
+   public Object remove(Object key)
+   {
+     // don't remove the (Key) cast, it is necessary to throw the exception
+     // required by the spec
+     return hintMap.remove((Key) key);  
+   }
+ 
+   /**
+    * Adds a collection of (key, value) pairs to the collection.
+    * 
+    * @param m  a map containing (key, value) items.
+    * 
+    * @throws ClassCastException if the map contains a key that is not
+    *         a subclass of {@link RenderingHints.Key}.
+    * @throws IllegalArgumentException if the map contains a value that is
+    *         not compatible with its key.
+    */
+   public void putAll(Map m)
+   {
+     // preprocess map to generate appropriate exceptions
+     Iterator iterator = m.keySet().iterator();
+     while (iterator.hasNext())
+       {
+ 	Key key = (Key) iterator.next();
+ 	if (!key.isCompatibleValue(m.get(key)))
+ 	  throw new IllegalArgumentException();
+       }
+     // map is OK, update
+     hintMap.putAll(m);
+   }
+ 
+   /**
+    * Returns a set containing the keys from this collection.
+    * 
+    * @return A set of keys.
+    */
+   public Set keySet()
+   {
+     return hintMap.keySet();
+   }
+ 
+   /**
+    * Returns a collection of the values from this hint collection.  The
+    * collection is backed by the <code>RenderingHints</code> instance, 
+    * so updates to one will affect the other.
+    * 
+    * @return A collection of values.
+    */
+   public Collection values()
+   {
+     return hintMap.values();
+   }
+ 
+   /**
+    * Returns a set of entries from the collection.
+    * 
+    * @return A set of entries.
+    */
+   public Set entrySet()
+   {
+     return Collections.unmodifiableSet(hintMap.entrySet());
+   }
+ 
+   /**
+    * Checks this collection for equality with an arbitrary object.
+    * 
+    * @param o  the object (<code>null</code> permitted)
+    * 
+    * @return A boolean.
+    */
+   public boolean equals(Object o)
+   {
+     return hintMap.equals(o);
+   }
+ 
+   /**
+    * Returns a hash code for the collection of hints.
+    * 
+    * @return A hash code.
+    */
+   public int hashCode()
+   {
+     return hintMap.hashCode();
+   }
+ 
+   /**
+    * Creates a clone of this instance.
+    * 
+    * @return A clone.
+    */
+   public Object clone()
+   {
+     try
+       {
+         RenderingHints copy = (RenderingHints) super.clone();
+         copy.hintMap = (HashMap) hintMap.clone();
+         return copy;
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ 
+   /**
+    * Returns a string representation of this instance.
+    * 
+    * @return A string.
+    */
+   public String toString()
+   {
+     return hintMap.toString();
+   }
+ } // class RenderingHints
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Robot.java gcc-4.1.0/libjava/classpath/java/awt/Robot.java
*** gcc-4.0.2/libjava/classpath/java/awt/Robot.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Robot.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,423 ----
+ /* Robot.java -- a native input event generator
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import gnu.java.awt.ClasspathToolkit;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.awt.event.InputEvent;
+ import java.awt.image.BufferedImage;
+ import java.awt.peer.RobotPeer;
+ 
+ /**
+  * The Robot class is used to simulate user interaction with graphical
+  * programs.  It can generate native windowing system input events and
+  * retrieve image data from the current screen.  Robot is used to test
+  * the AWT and Swing library implementations; it can also be used to
+  * create self-running demo programs.
+  *
+  * Since Robot generates native windowing system events, rather than
+  * simply inserting {@link AWTEvent}s on the AWT event queue, its use
+  * is not restricted to Java programs.  It can be used to
+  * programatically drive any graphical application.
+  *
+  * This implementation requires an X server that supports the XTest
+  * extension.
+  *
+  * @author Thomas Fitzsimmons (fitzsim@redhat.com)
+  *
+  * @since 1.3
+  */
+ public class Robot
+ {
+   private boolean waitForIdle;
+   private int autoDelay;
+   private RobotPeer peer;
+ 
+   /**
+    * Construct a Robot object that operates on the default screen.
+    *
+    * @exception AWTException if GraphicsEnvironment.isHeadless()
+    * returns true or if the X server does not support the XTest
+    * extension
+    * @exception SecurityException if createRobot permission is not
+    * granted
+    */
+   public Robot () throws AWTException
+   {
+     if (GraphicsEnvironment.isHeadless ())
+       throw new AWTException ("Robot: headless graphics environment");
+ 
+     SecurityManager sm = System.getSecurityManager ();
+     if (sm != null)
+       sm.checkPermission (new AWTPermission ("createRobot"));
+ 
+     ClasspathToolkit tk = (ClasspathToolkit) Toolkit.getDefaultToolkit ();
+ 
+     // createRobot will throw AWTException if XTest is not supported.
+     peer = tk.createRobot (GraphicsEnvironment.getLocalGraphicsEnvironment ()
+ 			   .getDefaultScreenDevice ());
+   }
+ 
+   /**
+    * Construct a Robot object that operates on the specified screen.
+    *
+    * @exception AWTException if GraphicsEnvironment.isHeadless()
+    * returns true or if the X server does not support the XTest
+    * extension
+    * @exception IllegalArgumentException if screen is not a screen
+    * GraphicsDevice
+    * @exception SecurityException if createRobot permission is not
+    * granted
+    */
+   public Robot (GraphicsDevice screen) throws AWTException
+   {
+     if (GraphicsEnvironment.isHeadless ())
+       throw new AWTException ("Robot: headless graphics environment");
+ 
+     if (screen.getType () != GraphicsDevice.TYPE_RASTER_SCREEN)
+       throw new IllegalArgumentException ("Robot: graphics"
+ 					  + " device is not a screen");
+ 
+     SecurityManager sm = System.getSecurityManager ();
+     if (sm != null)
+       sm.checkPermission (new AWTPermission ("createRobot"));
+ 
+     ClasspathToolkit tk = (ClasspathToolkit) Toolkit.getDefaultToolkit ();
+ 
+     // createRobot will throw AWTException if XTest is not supported.
+     peer = tk.createRobot (screen);
+   }
+ 
+   /**
+    * Move the mouse pointer to absolute coordinates (x, y).
+    *
+    * @param x the destination x coordinate
+    * @param y the destination y coordinate
+    */
+   public void mouseMove(int x, int y)
+   {
+     peer.mouseMove (x, y);
+ 
+     if (waitForIdle)
+       waitForIdle ();
+ 
+     if (autoDelay > 0)
+       delay (autoDelay);
+   }
+ 
+   /**
+    * Press one or more mouse buttons.
+    *
+    * @param buttons the buttons to press; a bitmask of one or more of
+    * these {@link InputEvent} fields:
+    *
+    * <ul>
+    *   <li>BUTTON1_MASK</li>
+    *   <li>BUTTON2_MASK</li>
+    *   <li>BUTTON3_MASK</li>
+    * </ul>
+    *
+    * @exception IllegalArgumentException if the button mask is invalid
+    */
+   public void mousePress (int buttons)
+   {
+     if ((buttons & InputEvent.BUTTON1_MASK) == 0
+ 	&& (buttons & InputEvent.BUTTON2_MASK) == 0
+ 	&& (buttons & InputEvent.BUTTON3_MASK) == 0)
+       throw new IllegalArgumentException ("Robot: mousePress:"
+ 					  + " invalid button mask");
+ 
+     peer.mousePress (buttons);
+ 
+     if (waitForIdle)
+       waitForIdle ();
+ 
+     if (autoDelay > 0)
+       delay (autoDelay);
+   }
+ 
+   /**
+    * Release one or more mouse buttons.
+    *
+    * @param buttons the buttons to release; a bitmask of one or more
+    * of these {@link InputEvent} fields:
+    *
+    * <ul>
+    *   <li>BUTTON1_MASK</li>
+    *   <li>BUTTON2_MASK</li>
+    *   <li>BUTTON3_MASK</li>
+    * </ul>
+    *
+    * @exception IllegalArgumentException if the button mask is invalid
+    */
+   public void mouseRelease(int buttons)
+   {
+     if ((buttons & InputEvent.BUTTON1_MASK) == 0
+ 	&& (buttons & InputEvent.BUTTON2_MASK) == 0
+ 	&& (buttons & InputEvent.BUTTON3_MASK) == 0)
+       throw new IllegalArgumentException ("Robot: mouseRelease:"
+ 					  + " invalid button mask");
+ 
+     peer.mouseRelease (buttons);
+ 
+     if (waitForIdle)
+       waitForIdle ();
+ 
+     if (autoDelay > 0)
+       delay (autoDelay);
+   }
+ 
+   /**
+    * Rotate the mouse scroll wheel.
+    *
+    * @param wheelAmt number of steps to rotate mouse wheel.  negative
+    * to rotate wheel up (away from the user), positive to rotate wheel
+    * down (toward the user).
+    *
+    * @since 1.4
+    */
+   public void mouseWheel (int wheelAmt)
+   {
+     peer.mouseWheel (wheelAmt);
+ 
+     if (waitForIdle)
+       waitForIdle ();
+ 
+     if (autoDelay > 0)
+       delay (autoDelay);
+   }
+ 
+   /**
+    * Press a key.
+    *
+    * @param keycode key to press, a {@link java.awt.event.KeyEvent} VK_ constant
+    *
+    * @exception IllegalArgumentException if keycode is not a valid key
+    */
+   public void keyPress (int keycode)
+   {
+     peer.keyPress (keycode);
+ 
+     if (waitForIdle)
+       waitForIdle ();
+ 
+     if (autoDelay > 0)
+       delay (autoDelay);
+   }
+ 
+   /**
+    * Release a key.
+    *
+    * @param keycode key to release, a {@link java.awt.event.KeyEvent} VK_ 
+    *                constant
+    *
+    * @exception IllegalArgumentException if keycode is not a valid key
+    */
+   public void keyRelease (int keycode)
+   {
+     peer.keyRelease (keycode);
+ 
+     if (waitForIdle)
+       waitForIdle ();
+ 
+     if (autoDelay > 0)
+       delay (autoDelay);
+   }
+ 
+   /**
+    * Return the color of the pixel at the given screen coordinates.
+    *
+    * @param x the x coordinate of the pixel
+    * @param y the y coordinate of the pixel
+    *
+    * @return the Color of the pixel at screen coodinates <code>(x, y)</code>
+    */
+   public Color getPixelColor (int x, int y)
+   {
+     return new Color (peer.getRGBPixel (x, y));
+   }
+ 
+   /**
+    * Create an image containing pixels read from the screen.  The
+    * image does not include the mouse pointer.
+    *
+    * @param screenRect the rectangle of pixels to capture, in screen
+    * coordinates
+    *
+    * @return a BufferedImage containing the requested pixels
+    *
+    * @exception IllegalArgumentException if requested width and height
+    * are not both greater than zero
+    * @exception SecurityException if readDisplayPixels permission is
+    * not granted
+    */
+   public BufferedImage createScreenCapture (Rectangle screenRect)
+   {
+     if (screenRect.width <= 0)
+       throw new IllegalArgumentException ("Robot: capture width is <= 0");
+ 
+     if (screenRect.height <= 0)
+       throw new IllegalArgumentException ("Robot: capture height is <= 0");
+ 
+     SecurityManager sm = System.getSecurityManager ();
+     if (sm != null)
+       sm.checkPermission (new AWTPermission ("readDisplayPixels"));
+ 
+     int[] pixels = peer.getRGBPixels (screenRect);
+ 
+     BufferedImage bufferedImage =
+       new BufferedImage (screenRect.width, screenRect.height,
+ 			 BufferedImage.TYPE_INT_ARGB);
+ 
+     bufferedImage.setRGB (0, 0, screenRect.width, screenRect.height,
+ 			  pixels, 0, screenRect.width);
+ 
+     return bufferedImage;
+   }
+ 
+   /**
+    * Check if this Robot automatically calls {@link #waitForIdle()} after
+    * generating an event.
+    *
+    * @return true if waitForIdle is automatically called
+    */
+   public boolean isAutoWaitForIdle ()
+   {
+     return waitForIdle;
+   }
+ 
+   /**
+    * Set whether or not this Robot automatically calls {@link
+    * #waitForIdle()} after generating an event.
+    *
+    * @param isOn true if waitForIdle should be called automatically
+    */
+   public void setAutoWaitForIdle (boolean isOn)
+   {
+     waitForIdle = isOn;
+   }
+ 
+   /**
+    * Retrieve the length of time this Robot sleeps after generating an
+    * event.
+    *
+    * @return the length of time in milliseconds
+    */
+   public int getAutoDelay ()
+   {
+     return autoDelay;
+   }
+ 
+   /**
+    * Set the length of time this Robot sleeps after generating an
+    * event.
+    *
+    * @param ms the length of time in milliseconds
+    *
+    * @exception IllegalArgumentException if ms is not between 0 and
+    * 60,000 milliseconds inclusive
+    */
+   public void setAutoDelay (int ms)
+   {
+     if (ms <= 0 || ms >= 60000)
+       throw new IllegalArgumentException ("Robot: delay length out-of-bounds");
+ 
+     autoDelay = ms;
+   }
+ 
+   /**
+    * Sleep for a specified length of time.
+    *
+    * @param ms the length of time in milliseconds
+    *
+    * @exception IllegalArgumentException if ms is not between 0 and
+    * 60,000 milliseconds inclusive
+    */
+   public void delay (int ms)
+   {
+     if (ms < 0 || ms > 60000)
+       throw new IllegalArgumentException ("Robot: delay length out-of-bounds");
+ 
+     try
+       {
+ 	Thread.sleep (ms);
+       }
+     catch (InterruptedException e)
+       {
+ 	System.err.println ("Robot: delay interrupted");
+       }
+   }
+ 
+   /**
+    * Wait until all events currently on the event queue have been
+    * dispatched.
+    */
+   public void waitForIdle ()
+   {
+     if (EventQueue.isDispatchThread ())
+       throw new IllegalThreadStateException ("Robot: waitForIdle called from "
+ 					     + "the event dispatch thread");
+ 
+     try
+       {
+ 	EventQueue.invokeAndWait (new Runnable () { public void run () { } });
+       }
+     catch (InterruptedException e)
+       {
+ 	System.err.println ("Robot: waitForIdle interrupted");
+       }
+     catch (InvocationTargetException e)
+       {
+ 	System.err.println ("Robot: waitForIdle cannot invoke target");
+       }
+   }
+ 
+   /**
+    * Return a string representation of this Robot.
+    *
+    * @return a string representation
+    */
+   public String toString ()
+   {
+     return getClass ().getName ()
+ 	+ "[ autoDelay = " + autoDelay + ", autoWaitForIdle = "
+ 	+ waitForIdle + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/ScrollPane.java gcc-4.1.0/libjava/classpath/java/awt/ScrollPane.java
*** gcc-4.0.2/libjava/classpath/java/awt/ScrollPane.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/ScrollPane.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,617 ----
+ /* ScrollPane.java -- Scrolling window
+    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.MouseEvent;
+ import java.awt.peer.ComponentPeer;
+ import java.awt.peer.ScrollPanePeer;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ 
+ /**
+   * This widget provides a scrollable region that allows a single 
+   * subcomponent to be viewed through a smaller window.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class ScrollPane extends Container implements Accessible
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ /**
+   * Constant indicating that scrollbars are created as needed in this
+   * windows.
+   */
+ public static final int SCROLLBARS_AS_NEEDED = 0;
+ 
+ /**
+   * Constant indicating that scrollbars are always displayed in this
+   * window.
+   */
+ public static final int SCROLLBARS_ALWAYS = 1;
+ 
+ /**
+   * Constant indicating that scrollbars are never displayed in this window.
+   */
+ public static final int SCROLLBARS_NEVER = 2;
+ 
+ // Serialization constant
+ private static final long serialVersionUID = 7956609840827222915L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The horizontal scrollbar for this window.  The methods
+   * <code>setMinimum()</code>, <code>setMaximum</code>, and
+   * <code>setVisibleAmount</code> must not be called on this scrollbar.
+   */
+ private ScrollPaneAdjustable hAdjustable;
+ 
+ /**
+   * @serial The vertical scrollbar for this window.  The methods
+   * <code>setMinimum()</code>, <code>setMaximum</code>, and
+   * <code>setVisibleAmount</code> must not be called on this scrollbar.
+   */
+ private ScrollPaneAdjustable vAdjustable;
+ 
+ /**
+   * @serial Indicates when scrollbars are displayed in this window, will
+   * be one of the constants from this class.
+   */
+ private int scrollbarDisplayPolicy;
+ 
+ // Current scroll position
+ private Point scrollPosition = new Point(0, 0);
+ 
+ private boolean wheelScrollingEnabled;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * Initializes a new instance of <code>ScrollPane</code> with a default
+   * scrollbar policy of <code>SCROLLBARS_AS_NEEDED</code>.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ ScrollPane()
+ {
+   this(SCROLLBARS_AS_NEEDED);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>ScrollPane</code> with the
+   * specified scrollbar policy.
+   *
+   * @param scrollbarDisplayPolicy When to display scrollbars, which must
+   * be one of the constants defined in this class.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+   */
+ public
+ ScrollPane(int scrollbarDisplayPolicy)
+ {
+   if (GraphicsEnvironment.isHeadless ())
+     throw new HeadlessException ();
+ 
+   this.scrollbarDisplayPolicy = scrollbarDisplayPolicy;
+ 
+   if (scrollbarDisplayPolicy != SCROLLBARS_ALWAYS
+       && scrollbarDisplayPolicy != SCROLLBARS_AS_NEEDED
+       && scrollbarDisplayPolicy != SCROLLBARS_NEVER)
+     throw new IllegalArgumentException("Bad scrollbarDisplayPolicy: " +
+                                        scrollbarDisplayPolicy);
+ 
+   if (scrollbarDisplayPolicy != SCROLLBARS_NEVER)
+     {
+       hAdjustable = new ScrollPaneAdjustable (this, Scrollbar.HORIZONTAL);
+       vAdjustable = new ScrollPaneAdjustable (this, Scrollbar.VERTICAL);
+     }
+ 
+   wheelScrollingEnabled = true;
+ 
+   // Default size.
+   setSize(100,100);
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * Returns the current scrollbar display policy.
+   *
+   * @return The current scrollbar display policy.
+   */
+ public int
+ getScrollbarDisplayPolicy()
+ {
+   return(scrollbarDisplayPolicy);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the horizontal scrollbar for this object.  If the scrollbar
+   * display policy is set to <code>SCROLLBARS_NEVER</code> then this
+   * will be <code>null</code>.
+   *
+   * @return The horizontal scrollbar for this window.
+   */
+ public Adjustable
+ getHAdjustable()
+ {
+   return(hAdjustable);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the vertical scrollbar for this object.  If the scrollbar
+   * display policy is set to <code>SCROLLBARS_NEVER</code> then this
+   * will be <code>null</code>.
+   *
+   * @return The horizontal scrollbar for this window.
+   */
+ public Adjustable
+ getVAdjustable()
+ {
+   return(vAdjustable);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the current viewport size.  The viewport is the region of
+   * this object's window where the child is actually displayed.
+   *
+   * @return The viewport size.
+   */
+ public Dimension getViewportSize ()
+ {
+   Dimension viewsize = getSize ();
+   Insets insets = getInsets ();
+ 
+   viewsize.width -= (insets.left + insets.right);
+   viewsize.height -= (insets.top + insets.bottom);
+ 
+   Component[] list = getComponents();
+   if ((list == null) || (list.length <= 0))
+     return viewsize;
+ 
+   Dimension dim = list[0].getPreferredSize();
+ 
+   if (dim.width <= 0 && dim.height <= 0)
+     return viewsize;
+ 
+   int vScrollbarWidth = getVScrollbarWidth ();
+   int hScrollbarHeight = getHScrollbarHeight ();
+ 
+   if (scrollbarDisplayPolicy == SCROLLBARS_ALWAYS)
+     {
+       viewsize.width -= vScrollbarWidth;
+       viewsize.height -= hScrollbarHeight;
+       return viewsize;
+     }
+ 
+   if (scrollbarDisplayPolicy == SCROLLBARS_NEVER)
+     return viewsize;
+ 
+   // The scroll policy is SCROLLBARS_AS_NEEDED, so we need to see if
+   // either scrollbar is needed.
+ 
+   // Assume we don't need either scrollbar.
+   boolean mayNeedVertical = false;
+   boolean mayNeedHorizontal = false;
+ 
+   boolean needVertical = false;
+   boolean needHorizontal = false;
+ 
+   // Check if we need vertical scrollbars.  If we do, then we need to
+   // subtract the width of the vertical scrollbar from the viewport's
+   // width.
+   if (dim.height > viewsize.height)
+     needVertical = true;
+   else if (dim.height > (viewsize.height - hScrollbarHeight))
+     // This is tricky.  In this case the child is tall enough that its
+     // bottom edge would be covered by a horizontal scrollbar, if one
+     // were present.  This means that if there's a horizontal
+     // scrollbar then we need a vertical scrollbar.
+     mayNeedVertical = true;
+ 
+   if (dim.width > viewsize.width)
+     needHorizontal = true;
+   else if (dim.width > (viewsize.width - vScrollbarWidth))
+     mayNeedHorizontal = true;
+ 
+   if (needVertical && mayNeedHorizontal)
+     needHorizontal = true;
+ 
+   if (needHorizontal && mayNeedVertical)
+     needVertical = true;
+ 
+   if (needHorizontal)
+     viewsize.height -= hScrollbarHeight;
+ 
+   if (needVertical)
+     viewsize.width -= vScrollbarWidth;
+ 
+   return viewsize;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the height of a horizontal scrollbar.
+   *
+   * @return The height of a horizontal scrollbar.
+   */
+ public int
+ getHScrollbarHeight()
+ {
+   ScrollPanePeer spp = (ScrollPanePeer)getPeer();
+   if (spp != null)
+     return(spp.getHScrollbarHeight());
+   else
+     return(0); // FIXME: What to do here?
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the width of a vertical scrollbar.
+   *
+   * @return The width of a vertical scrollbar.
+   */
+ public int
+ getVScrollbarWidth()
+ {
+   ScrollPanePeer spp = (ScrollPanePeer)getPeer();
+   if (spp != null)
+     return(spp.getVScrollbarWidth());
+   else
+     return(0); // FIXME: What to do here?
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the current scroll position of the viewport.
+   *
+   * @return The current scroll position of the viewport.
+   */
+ public Point
+ getScrollPosition()
+ {
+   int x = 0;
+   int y = 0;
+ 
+   Adjustable v = getVAdjustable();
+   Adjustable h = getHAdjustable();
+ 
+   if (v != null)
+     y = v.getValue();
+   if (h != null)
+     x = h.getValue();
+ 
+   return(new Point(x, y));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the scroll position to the specified value.
+   *
+   * @param scrollPosition The new scrollPosition.
+   *
+   * @exception IllegalArgumentException If the specified value is outside
+   * the legal scrolling range.
+   */
+ public void
+ setScrollPosition(Point scrollPosition) throws IllegalArgumentException
+ {
+   setScrollPosition(scrollPosition.x, scrollPosition.y);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the scroll position to the specified value.
+   *
+   * @param x The new X coordinate of the scroll position.
+   * @param y The new Y coordinate of the scroll position.
+   *
+   * @exception IllegalArgumentException If the specified value is outside
+   * the legal scrolling range.
+   */
+ public void
+ setScrollPosition(int x, int y)
+ {
+   Adjustable h = getHAdjustable();
+   Adjustable v = getVAdjustable();
+ 
+   if (h != null)
+     h.setValue(x);
+   if (v != null)
+     v.setValue(y);
+ 
+   ScrollPanePeer spp = (ScrollPanePeer)getPeer();
+   if (spp != null)
+     spp.setScrollPosition(x, y);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Notifies this object that it should create its native peer.
+   */
+ public void
+ addNotify()
+ {
+   if (peer != null)
+     return;
+ 
+   setPeer((ComponentPeer)getToolkit().createScrollPane(this));
+   super.addNotify();
+ 
+   Component[] list = getComponents();
+   if (list != null && list.length > 0 && ! (list[0] instanceof Panel))
+   {
+     Panel panel = new Panel();
+     panel.setLayout(new BorderLayout());
+     panel.add(list[0], BorderLayout.CENTER);
+     add(panel);
+   }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Notifies this object that it should destroy its native peers.
+   */
+ public void
+ removeNotify()
+ {
+   super.removeNotify();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds the specified child component to this container.  A 
+   * <code>ScrollPane</code> can have at most one child, so if a second
+   * one is added, then first one is removed.
+   *
+   * @param component The component to add to this container.
+   * @param constraints A list of layout constraints for this object.
+   * @param index The index at which to add the child, which is ignored
+   * in this implementation.
+   */
+   protected final void addImpl (Component component, Object constraints,
+ 				int index)
+ {
+   Component[] list = getComponents();
+   if ((list != null) && (list.length > 0))
+     remove(list[0]);
+ 
+   super.addImpl(component, constraints, -1);
+ 
+   doLayout();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Lays out this component.  This consists of resizing the sole child
+   * component to its perferred size.
+   */
+ public void
+ doLayout()
+ {
+   layout ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Lays out this component.  This consists of resizing the sole child
+   * component to its perferred size.
+   *
+   * @deprecated This method is deprecated in favor of
+   * <code>doLayout()</code>.
+   */
+ public void
+ layout()
+ {
+   Component[] list = getComponents ();
+   if ((list != null) && (list.length > 0))
+     {
+       Dimension dim = list[0].getPreferredSize ();
+       Dimension vp = getViewportSize ();
+ 
+       if (dim.width < vp.width)
+ 	dim.width = vp.width;
+ 
+       if (dim.height < vp.height)
+ 	dim.height = vp.height;
+ 
+       ScrollPanePeer peer = (ScrollPanePeer) getPeer ();
+       if (peer != null)
+ 	peer.childResized (dim.width, dim.height);
+ 
+       list[0].setSize (dim);
+ 
+       Point p = getScrollPosition ();
+       if (p.x > dim.width)
+         p.x = dim.width;
+       if (p.y > dim.height)
+         p.y = dim.height;
+ 
+       setScrollPosition (p);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method overrides its superclass method to ensure no layout
+   * manager is set for this container.  <code>ScrollPane</code>'s do
+   * not have layout managers.
+   *
+   * @param layoutManager Ignored
+   */
+ public final void
+ setLayout(LayoutManager layoutManager)
+ {
+   return;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Prints all of the components in this container.
+   *
+   * @param graphics The desired graphics context for printing.
+   */
+ public void
+ printComponents(Graphics graphics)
+ {
+   super.printComponents(graphics);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debug string for this object.
+   *
+   * @return A debug string for this object.
+   */
+ public String
+ paramString()
+ {
+   Insets insets = getInsets();
+   return getName() + ","
+          + getX() + ","
+          + getY() + ","
+          + getWidth() + "x" + getHeight() + ","
+          + "ScrollPosition=(" + scrollPosition.getX() + "," 
+                               + scrollPosition.getY() + "),"
+          + "Insets=(" + insets.top + ","
+                       + insets.left + ","
+                       + insets.bottom + ","
+                       + insets.right + "),"
+          + "ScrollbarDisplayPolicy=" + getScrollbarDisplayPolicy() + ","
+          + "wheelScrollingEnabled=" + isWheelScrollingEnabled();
+ }
+ 
+   /**
+    * Tells whether or not an event is enabled.
+    *
+    * @since 1.4
+    */
+   protected boolean eventTypeEnabled (int type)
+   {
+     if (type == MouseEvent.MOUSE_WHEEL)
+       return wheelScrollingEnabled;
+ 
+     return super.eventTypeEnabled (type);
+   }
+ 
+   /**
+    * Tells whether or not wheel scrolling is enabled.
+    *
+    * @since 1.4
+    */
+   public boolean isWheelScrollingEnabled ()
+   {
+     return wheelScrollingEnabled;
+   }
+ 
+   /**
+    * Enables/disables wheel scrolling.
+    *
+    * @since 1.4
+    */
+   public void setWheelScrollingEnabled (boolean enable)
+   {
+     wheelScrollingEnabled = enable;
+   }
+   
+   protected class AccessibleAWTScrollPane extends AccessibleAWTContainer
+   {
+     private static final long serialVersionUID = 6100703663886637L;
+ 
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.SCROLL_PANE;
+     }
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this <code>ScrollPane</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTScrollPane();
+     return accessibleContext;
+   }
+ } // class ScrollPane 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/ScrollPaneAdjustable.java gcc-4.1.0/libjava/classpath/java/awt/ScrollPaneAdjustable.java
*** gcc-4.0.2/libjava/classpath/java/awt/ScrollPaneAdjustable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/ScrollPaneAdjustable.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,204 ----
+ /* ScrollPaneAdjustable.java -- Scrollbars for a ScrollPane
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.AdjustmentListener;
+ import java.io.Serializable;
+ 
+ /**
+  * Need this class since the serialization spec for ScrollPane
+  * uses it.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.4
+  */
+ public class ScrollPaneAdjustable
+   implements Adjustable, Serializable
+ {
+   private static final long serialVersionUID = -3359745691033257079L;
+  
+   ScrollPane sp;
+   int orientation;
+   int value;
+   int minimum;
+   int maximum;
+   int visibleAmount;
+   int unitIncrement = 1;
+   int blockIncrement = 1;
+   AdjustmentListener adjustmentListener;
+ 
+   private transient boolean valueIsAdjusting = false;
+ 
+   ScrollPaneAdjustable (ScrollPane sp, int orientation)
+   {
+     this.sp = sp;
+     this.orientation = orientation;
+   }
+   
+   ScrollPaneAdjustable (ScrollPane sp, int orientation, int value, int minimum,
+                         int maximum, int visibleAmount, int unitIncrement,
+                         int blockIncrement)
+   {
+     this.sp = sp;
+     this.orientation = orientation;
+     this.value = value;
+     this.minimum = minimum;
+     this.maximum = maximum;
+     this.visibleAmount = visibleAmount;
+     this.unitIncrement = unitIncrement;
+     this.blockIncrement = blockIncrement;
+   }
+   
+   public void addAdjustmentListener (AdjustmentListener listener)
+   {
+     if (listener == null)
+       return;
+     adjustmentListener = AWTEventMulticaster.add (adjustmentListener, listener);
+   }
+   
+   public void removeAdjustmentListener (AdjustmentListener listener)
+   {
+     if (listener == null)
+       return;
+     adjustmentListener = AWTEventMulticaster.remove (adjustmentListener, listener);
+   }
+   
+   public AdjustmentListener[] getAdjustmentListeners ()
+   {
+     return (AdjustmentListener[]) AWTEventMulticaster.getListeners
+                                (adjustmentListener, AdjustmentListener.class);
+   }
+ 
+   public int getBlockIncrement ()
+   {
+     return blockIncrement;
+   }
+ 
+   public int getMaximum ()
+   {
+     return maximum;
+   }
+ 
+   public int getMinimum ()
+   {
+     return minimum;
+   }
+ 
+   public int getOrientation ()
+   {
+     return orientation;
+   }
+ 
+   public int getUnitIncrement ()
+   {
+     return unitIncrement;
+   }
+   
+   public int getValue ()
+   {
+     return value;
+   }
+ 
+   public int getVisibleAmount ()
+   {
+     return visibleAmount;
+   }
+ 
+   public void setBlockIncrement (int blockIncrement)
+   {
+     this.blockIncrement = blockIncrement;
+   }
+     
+   public void setMaximum (int maximum)
+   {
+     this.maximum = maximum;
+   }
+ 
+   public void setMinimum (int minimum)
+   {
+     this.minimum = minimum;
+   }
+ 
+   public void setUnitIncrement (int unitIncrement)
+   {
+     this.unitIncrement = unitIncrement;
+   }
+ 
+   public void setValue (int value)
+   {
+     this.value = value;
+ 
+     if (value < minimum)
+       minimum = value;
+ 
+     if (value > maximum)
+       maximum = value;
+   }
+   
+   public void setVisibleAmount (int visibleAmount)
+   {
+     this.visibleAmount = visibleAmount;
+   }
+ 
+   public String paramString ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   /**
+    * Returns true if the value is in the process of changing.
+    *
+    * @since 1.4
+    */
+   public boolean getValueIsAdjusting ()
+   {
+     return valueIsAdjusting;
+   }
+ 
+   /**
+    * Sets the value of valueIsAdjusting.
+    *
+    * @since 1.4
+    */
+   public void setValueIsAdjusting (boolean valueIsAdjusting)
+   {
+     this.valueIsAdjusting = valueIsAdjusting;
+   }
+ } // class ScrollPaneAdjustable
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Scrollbar.java gcc-4.1.0/libjava/classpath/java/awt/Scrollbar.java
*** gcc-4.0.2/libjava/classpath/java/awt/Scrollbar.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Scrollbar.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,825 ----
+ /* Scrollbar.java -- AWT Scrollbar widget
+    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.AdjustmentEvent;
+ import java.awt.event.AdjustmentListener;
+ import java.awt.peer.ScrollbarPeer;
+ import java.util.EventListener;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleState;
+ import javax.accessibility.AccessibleStateSet;
+ import javax.accessibility.AccessibleValue;
+ 
+ /**
+  * This class implements a scrollbar widget.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  */
+ public class Scrollbar extends Component implements Accessible, Adjustable
+ {
+   // FIXME: Serialization readObject/writeObject
+ 
+   /**
+    * Constant indicating that a scrollbar is horizontal.
+    */
+   public static final int HORIZONTAL = 0;
+ 
+   /**
+    * Constant indicating that a scrollbar is vertical.
+    */
+   public static final int VERTICAL = 1;
+ 
+   /**
+    * Serialization Constant.
+    */
+   private static final long serialVersionUID = 8451667562882310543L;
+ 
+   /**
+    * @serial The amount by which the value of the scrollbar is changed
+    * when incrementing in line mode.
+    */
+   private int lineIncrement;
+ 
+   /**
+    * @serial The amount by which the value of the scrollbar is changed
+    * when incrementing in page mode.
+    */
+   private int pageIncrement;
+ 
+   /**
+    * @serial The maximum value for this scrollbar
+    */
+   private int maximum;
+ 
+   /**
+    * @serial The minimum value for this scrollbar
+    */
+   private int minimum;
+ 
+   /**
+    * @serial The orientation of this scrollbar, which will be either
+    * the <code>HORIZONTAL</code> or <code>VERTICAL</code> constant
+    * from this class.
+    */
+   private int orientation;
+ 
+   /**
+    * @serial The current value of this scrollbar.
+    */
+   private int value;
+ 
+   /**
+    * @serial The width of the scrollbar's thumb, which is relative
+    * to the minimum and maximum value of the scrollbar.
+    */
+   private int visibleAmount;
+ 
+   /**
+    * List of AdjustmentListener's.
+    */
+   private AdjustmentListener adjustment_listeners;
+ 
+   /**
+    * true if the scrollbar is adjusting, false otherwise.
+    */
+   private transient boolean valueIsAdjusting = false;
+ 
+   /**
+    * The number used to generate the name returned by getName.
+    */
+   private static transient long next_scrollbar_number;
+ 
+   /**
+    * Initializes a new instance of <code>Scrollbar</code> with a
+    * vertical orientation and default values for all other parameters.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+    */
+   public Scrollbar()
+   {
+     this(VERTICAL);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Scrollbar</code> with the
+    * specified orientation and default values for all other parameters.
+    * The orientation must be either the constant <code>HORIZONTAL</code> or
+    * <code>VERTICAL</code> from this class.  An incorrect value will throw
+    * an exception.
+    *
+    * @param orientation The orientation of this scrollbar.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+    * @exception IllegalArgumentException If the orientation value is not valid.
+    */
+   public Scrollbar(int orientation) throws IllegalArgumentException
+   {
+     this(orientation, 0, 10, 0, 100);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Scrollbar</code> with the
+    * specified parameters.  The orientation must be either the constant
+    * <code>HORIZONTAL</code> or <code>VERTICAL</code>.  An incorrect value
+    * will throw an exception.  Inconsistent values for other parameters
+    * are silently corrected to valid values.
+    *
+    * @param orientation The orientation of this scrollbar.
+    * @param value The initial value of the scrollbar.
+    * @param visibleAmount The width of the scrollbar thumb.
+    * @param minimum The minimum value of the scrollbar.
+    * @param maximum The maximum value of the scrollbar.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+    * @exception IllegalArgumentException If the orientation value is not valid.
+    */
+   public Scrollbar(int orientation, int value, int visibleAmount, int minimum,
+                    int maximum) throws IllegalArgumentException
+   {
+     if (GraphicsEnvironment.isHeadless())
+       throw new HeadlessException();
+ 
+     if ((orientation != HORIZONTAL) && (orientation != VERTICAL))
+       throw new IllegalArgumentException("Bad orientation value: "
+                                          + orientation);
+ 
+     this.orientation = orientation;
+ 
+     setValues(value, visibleAmount, minimum, maximum);
+ 
+     // Default is 1 according to online docs.
+     lineIncrement = 1;
+ 
+     // Default is 10 according to javadocs.
+     pageIncrement = 10;
+   }
+ 
+   /**
+    * Returns the orientation constant for this object.
+    *
+    * @return The orientation constant for this object.
+    */
+   public int getOrientation()
+   {
+     return orientation;
+   }
+ 
+   /**
+    * Sets the orientation of this scrollbar to the specified value.  This
+    * value must be either the constant <code>HORIZONTAL</code> or
+    * <code>VERTICAL</code> from this class or an exception will be thrown.
+    *
+    * @param orientation The new orientation value.
+    *
+    * @exception IllegalArgumentException If the orientation value is not valid.
+    */
+   public void setOrientation(int orientation)
+   {
+     if ((orientation != HORIZONTAL) && (orientation != VERTICAL))
+       throw new IllegalArgumentException("Bad orientation value: "
+                                          + orientation);
+ 
+     // FIXME: Communicate to peer?  Or must this be called before peer creation?
+     this.orientation = orientation;
+   }
+ 
+   /**
+    * Returns the current value for this scrollbar.
+    *
+    * @return The current value for this scrollbar.
+    */
+   public int getValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Sets the current value for this scrollbar to the specified value.
+    * If this is inconsistent with the minimum and maximum values for this
+    * scrollbar, the value is silently adjusted.
+    *
+    * @param value The new value for this scrollbar.
+    */
+   public void setValue(int value)
+   {
+     setValues(value, visibleAmount, minimum, maximum);
+   }
+ 
+   /**
+    * Returns the maximum value for this scrollbar.
+    *
+    * @return The maximum value for this scrollbar.
+    */
+   public int getMaximum()
+   {
+     return maximum;
+   }
+ 
+   /**
+    * Sets the maximum value for this scrollbar to the specified value.
+    * If the value is less than the current minimum value, it is silent
+    * set to equal the minimum value.
+    *
+    * @param maximum The new maximum value for this scrollbar.
+    */
+   public void setMaximum(int maximum)
+   {
+     setValues(value, visibleAmount, minimum, maximum);
+   }
+ 
+   /**
+    * Returns the minimum value for this scrollbar.
+    *
+    * @return The minimum value for this scrollbar.
+    */
+   public int getMinimum()
+   {
+     return minimum;
+   }
+ 
+   /**
+    * Sets the minimum value for this scrollbar to the specified value.  If
+    * this is not consistent with the current value and maximum, it is
+    * silently adjusted to be consistent.
+    *
+    * @param minimum The new minimum value for this scrollbar.
+    */
+   public void setMinimum(int minimum)
+   {
+     setValues(value, visibleAmount, minimum, maximum);
+   }
+ 
+   /**
+    * Returns the width of the scrollbar's thumb, in units relative to the
+    * maximum and minimum value of the scrollbar.
+    *
+    * @return The width of the scrollbar's thumb.
+    */
+   public int getVisibleAmount()
+   {
+     return getVisible();
+   }
+ 
+   /**
+    * Returns the width of the scrollbar's thumb, in units relative to the
+    * maximum and minimum value of the scrollbar.
+    *
+    * @return The width of the scrollbar's thumb.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>getVisibleAmount()</code>.
+    */
+   public int getVisible()
+   {
+     return visibleAmount;
+   }
+ 
+   /**
+    * Sets the width of the scrollbar's thumb, in units relative to the
+    * maximum and minimum value of the scrollbar.
+    *
+    * @param visibleAmount The new visible amount value of the scrollbar.
+    */
+   public void setVisibleAmount(int visibleAmount)
+   {
+     setValues(value, visibleAmount, minimum, maximum);
+   }
+ 
+   /**
+    * Sets the current value, visible amount, minimum, and maximum for this
+    * scrollbar.  These values are adjusted to be internally consistent
+    * if necessary.
+    *
+    * @param value The new value for this scrollbar.
+    * @param visibleAmount The new visible amount for this scrollbar.
+    * @param minimum The new minimum value for this scrollbar.
+    * @param maximum The new maximum value for this scrollbar.
+    */
+   public synchronized void setValues(int value, int visibleAmount,
+                                      int minimum, int maximum)
+   {
+     if (maximum < minimum)
+       maximum = minimum;
+ 
+     if (value < minimum)
+       value = minimum;
+ 
+     if (value > maximum)
+       value = maximum;
+ 
+     if (visibleAmount > maximum - minimum)
+       visibleAmount = maximum - minimum;
+ 
+     ScrollbarPeer peer = (ScrollbarPeer) getPeer();
+     if (peer != null
+         && (this.value != value || this.visibleAmount != visibleAmount
+             || this.minimum != minimum || this.maximum != maximum))
+       peer.setValues(value, visibleAmount, minimum, maximum);
+ 
+     this.value = value;
+     this.visibleAmount = visibleAmount;
+     this.minimum = minimum;
+     this.maximum = maximum;
+ 
+     int range = maximum - minimum;
+     if (lineIncrement > range)
+       {
+ 	if (range == 0)
+ 	  lineIncrement = 1;
+ 	else
+ 	  lineIncrement = range;
+ 
+ 	if (peer != null)
+ 	  peer.setLineIncrement(lineIncrement);
+       }
+ 
+     if (pageIncrement > range)
+       {
+ 	if (range == 0)
+ 	  pageIncrement = 1;
+ 	else
+ 	  pageIncrement = range;
+ 
+ 	if (peer != null)
+ 	  peer.setPageIncrement(pageIncrement);
+       }
+   }
+ 
+   /**
+    * Returns the value added or subtracted when the user activates the scrollbar
+    * scroll by a "unit" amount.
+    *
+    * @return The unit increment value.
+    */
+   public int getUnitIncrement()
+   {
+     return getLineIncrement();
+   }
+ 
+   /**
+    * Returns the value added or subtracted when the user selects the scrollbar
+    * scroll by a "unit" amount control.
+    *
+    * @return The unit increment value.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>getUnitIncrement()</code>.
+    */
+   public int getLineIncrement()
+   {
+     return lineIncrement;
+   }
+ 
+   /**
+    * Sets the value added or subtracted to the scrollbar value when the
+    * user selects the scroll by a "unit" amount control.
+    *
+    * @param unitIncrement The new unit increment amount.
+    */
+   public synchronized void setUnitIncrement(int unitIncrement)
+   {
+     setLineIncrement(unitIncrement);
+   }
+ 
+   /**
+    * Sets the value added or subtracted to the scrollbar value when the
+    * user selects the scroll by a "unit" amount control.
+    *
+    * @param lineIncrement The new unit increment amount.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>setUnitIncrement()</code>.
+    */
+   public void setLineIncrement(int lineIncrement)
+   {
+     if (lineIncrement < 0)
+       throw new IllegalArgumentException("Unit increment less than zero.");
+ 
+     int range = maximum - minimum;
+     if (lineIncrement > range)
+       {
+ 	if (range == 0)
+ 	  lineIncrement = 1;
+ 	else
+ 	  lineIncrement = range;
+       }
+ 
+     if (lineIncrement == this.lineIncrement)
+       return;
+ 
+     this.lineIncrement = lineIncrement;
+ 
+     ScrollbarPeer peer = (ScrollbarPeer) getPeer();
+     if (peer != null)
+       peer.setLineIncrement(this.lineIncrement);
+   }
+ 
+   /**
+    * Returns the value added or subtracted when the user activates the scrollbar
+    * scroll by a "block" amount.
+    *
+    * @return The block increment value.
+    */
+   public int getBlockIncrement()
+   {
+     return getPageIncrement();
+   }
+ 
+   /**
+    * Returns the value added or subtracted when the user selects the scrollbar
+    * scroll by a "block" amount control.
+    *
+    * @return The block increment value.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>getBlockIncrement()</code>.
+    */
+   public int getPageIncrement()
+   {
+     return pageIncrement;
+   }
+ 
+   /**
+    * Sets the value added or subtracted to the scrollbar value when the
+    * user selects the scroll by a "block" amount control.
+    *
+    * @param blockIncrement The new block increment amount.
+    */
+   public synchronized void setBlockIncrement(int blockIncrement)
+   {
+     setPageIncrement(blockIncrement);
+   }
+ 
+   /**
+    * Sets the value added or subtracted to the scrollbar value when the
+    * user selects the scroll by a "block" amount control.
+    *
+    * @param pageIncrement The new block increment amount.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>setBlockIncrement()</code>.
+    */
+   public void setPageIncrement(int pageIncrement)
+   {
+     if (pageIncrement < 0)
+       throw new IllegalArgumentException("Block increment less than zero.");
+ 
+     int range = maximum - minimum;
+     if (pageIncrement > range)
+       {
+ 	if (range == 0)
+ 	  pageIncrement = 1;
+ 	else
+ 	  pageIncrement = range;
+       }
+ 
+     if (pageIncrement == this.pageIncrement)
+       return;
+ 
+     this.pageIncrement = pageIncrement;
+ 
+     ScrollbarPeer peer = (ScrollbarPeer) getPeer();
+     if (peer != null)
+       peer.setPageIncrement(this.pageIncrement);
+   }
+ 
+   /**
+    * Notifies this object to create its native peer.
+    */
+   public synchronized void addNotify()
+   {
+     if (peer == null)
+       peer = getToolkit().createScrollbar(this);
+     super.addNotify();
+   }
+ 
+   /**
+    * Adds a new adjustment listener to the list of registered listeners
+    * for this object.
+    *
+    * @param listener The listener to add.
+    */
+   public synchronized void addAdjustmentListener(AdjustmentListener listener)
+   {
+     adjustment_listeners = AWTEventMulticaster.add(adjustment_listeners,
+                                                    listener);
+     enableEvents(AWTEvent.ADJUSTMENT_EVENT_MASK);
+   }
+ 
+   /**
+    * Removes the specified listener from the list of registered listeners
+    * for this object.
+    *
+    * @param listener The listener to remove.
+    */
+   public synchronized void removeAdjustmentListener(AdjustmentListener listener)
+   {
+     adjustment_listeners = AWTEventMulticaster.remove(adjustment_listeners,
+                                                       listener);
+   }
+ 
+   /**
+    * Processes events for this scrollbar.  It does this by calling
+    * <code>processAdjustmentEvent()</code> if the event is an instance of
+    * <code>AdjustmentEvent</code>, otherwise it calls the superclass to
+    * process the event.
+    *
+    * @param event The event to process.
+    */
+   protected void processEvent(AWTEvent event)
+   {
+     if (event instanceof AdjustmentEvent)
+       processAdjustmentEvent((AdjustmentEvent) event);
+     else
+       super.processEvent(event);
+   }
+ 
+   /**
+    * Processes adjustment events for this object by dispatching them to
+    * any registered listeners.  Note that this method will only be called
+    * if adjustment events are enabled.  This will happen automatically if
+    * any listeners are registered.  Otherwise, it can be enabled by a
+    * call to <code>enableEvents()</code>.
+    *
+    * @param event The event to process.
+    */
+   protected void processAdjustmentEvent(AdjustmentEvent event)
+   {
+     value = event.getValue();
+     if (adjustment_listeners != null)
+       adjustment_listeners.adjustmentValueChanged(event);
+   }
+ 
+   void dispatchEventImpl(AWTEvent e)
+   {
+     if (e.id <= AdjustmentEvent.ADJUSTMENT_LAST 
+       && e.id >= AdjustmentEvent.ADJUSTMENT_FIRST
+       && (adjustment_listeners != null 
+ 	  || (eventMask & AWTEvent.ADJUSTMENT_EVENT_MASK) != 0))
+       processEvent(e);
+     else
+       super.dispatchEventImpl(e);
+   }
+ 
+   /**
+    * Returns a debugging string for this object.
+    *
+    * @return A debugging string for this object.
+    */
+   protected String paramString()
+   {
+     return ("value=" + getValue() + ",visibleAmount=" + getVisibleAmount()
+             + ",minimum=" + getMinimum() + ",maximum=" + getMaximum()
+             + ",pageIncrement=" + pageIncrement + ",lineIncrement="
+             + lineIncrement + ",orientation="
+             + (orientation == HORIZONTAL ? "HORIZONTAL" : "VERTICAL")
+             + super.paramString());
+   }
+ 
+   /**
+    * Returns an array of all the objects currently registered as FooListeners
+    * upon this <code>Scrollbar</code>. FooListeners are registered using the
+    * addFooListener method.
+    *
+    * @exception ClassCastException If listenerType doesn't specify a class or
+    * interface that implements java.util.EventListener.
+    */
+   public EventListener[] getListeners(Class listenerType)
+   {
+     if (listenerType == AdjustmentListener.class)
+       return AWTEventMulticaster.getListeners(adjustment_listeners,
+                                               listenerType);
+ 
+     return super.getListeners(listenerType);
+   }
+ 
+   /**
+    * Returns an array of all registered adjustment listeners.
+    */
+   public AdjustmentListener[] getAdjustmentListeners()
+   {
+     return (AdjustmentListener[]) getListeners(AdjustmentListener.class);
+   }
+ 
+   /**
+    * Returns true if the value is in the process of changing.
+    *
+    * @since 1.4
+    */
+   public boolean getValueIsAdjusting()
+   {
+     return valueIsAdjusting;
+   }
+ 
+   /**
+    * Sets the value of valueIsAdjusting.
+    *
+    * @since 1.4
+    */
+   public void setValueIsAdjusting(boolean valueIsAdjusting)
+   {
+     this.valueIsAdjusting = valueIsAdjusting;
+   }
+ 
+   /**
+    * Generate a unique name for this scroll bar.
+    *
+    * @return A unique name for this scroll bar.
+    */
+   String generateName()
+   {
+     return "scrollbar" + getUniqueLong();
+   }
+ 
+   private static synchronized long getUniqueLong()
+   {
+     return next_scrollbar_number++;
+   }
+ 
+   /**
+    * This class provides accessibility support for the
+    * scrollbar.
+    *
+    * @author Jerry Quinn (jlquinn@optonline.net)
+    * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+    */
+   protected class AccessibleAWTScrollBar extends AccessibleAWTComponent
+     implements AccessibleValue
+   {
+     /**
+      * Serialization constant to match JDK 1.5
+      */
+     private static final long serialVersionUID = -344337268523697807L;
+ 
+     /**
+      * Returns the role of this accessible object.
+      *
+      * @return the instance of <code>AccessibleRole</code>,
+      * which describes this object.
+      *
+      * @see javax.accessibility.AccessibleRole
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.SCROLL_BAR;
+     }
+ 
+     /**
+      * Returns the state set of this accessible object.
+      *
+      * @return a set of <code>AccessibleState</code>s which
+      * represent the current state of the accessible object.
+      *
+      * @see javax.accessibility.AccessibleState
+      * @see javax.accessibility.AccessibleStateSet
+      */
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       AccessibleStateSet states = super.getAccessibleStateSet();
+       if (getOrientation() == HORIZONTAL)
+ 	states.add(AccessibleState.HORIZONTAL);
+       else
+ 	states.add(AccessibleState.VERTICAL);
+       if (getValueIsAdjusting())
+ 	states.add(AccessibleState.BUSY);
+       return states;
+     }
+ 
+     /**
+      * Returns an implementation of the <code>AccessibleValue</code>
+      * interface for this accessible object.  In this case, the
+      * current instance is simply returned (with a more appropriate
+      * type), as it also implements the accessible value as well as
+      * the context.
+      *
+      * @return the accessible value associated with this context.
+      *
+      * @see javax.accessibility.AccessibleValue
+      */
+     public AccessibleValue getAccessibleValue()
+     {
+       return this;
+     }
+ 
+     /**
+      * Returns the current value of this accessible object.
+      * In this case, this is the same as the value for
+      * the scrollbar, wrapped in an <code>Integer</code>
+      * object.
+      *
+      * @return the numeric value of this scrollbar.
+      *
+      * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
+      */
+     public Number getCurrentAccessibleValue()
+     {
+       return new Integer(getValue());
+     }
+ 
+     /**
+      * Sets the current value of this accessible object
+      * to that supplied.  In this case, the value of the
+      * scrollbar is set, and this method always returns
+      * true.
+      *
+      * @param number the new accessible value.
+      *
+      * @return true if the value was set.
+      *
+      * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
+      */
+     public boolean setCurrentAccessibleValue(Number number)
+     {
+       setValue(number.intValue());
+       return true;
+     }
+ 
+     /**
+      * Returns the minimum acceptable accessible value used
+      * by this object.  In this case, this is the same as
+      * the minimum value of the scrollbar, wrapped in an
+      * object.
+      *
+      * @return the minimum value of this scrollbar.
+      *
+      * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
+      */
+     public Number getMinimumAccessibleValue()
+     {
+       return new Integer(getMinimum());
+     }
+ 
+     /**
+      * Returns the maximum acceptable accessible value used
+      * by this object.  In this case, this is the same as
+      * the maximum value of the scrollbar, wrapped in an
+      * object.
+      *
+      * @return the maximum value of this scrollbar.
+      *
+      * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
+      */
+     public Number getMaximumAccessibleValue()
+     {
+       return new Integer(getMaximum());
+     }
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this <code>Scrollbar</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTScrollBar();
+     
+     return accessibleContext;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Shape.java gcc-4.1.0/libjava/classpath/java/awt/Shape.java
*** gcc-4.0.2/libjava/classpath/java/awt/Shape.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Shape.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,203 ----
+ /* Shape.java -- the classic Object-Oriented shape interface
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.PathIterator;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * This interface represents an abstract shape. The shape is described by
+  * a {@link PathIterator}, and has callbacks for determining bounding box,
+  * where points and rectangles lie in relation to the shape, and tracing
+  * the trajectory.
+  *
+  * <p>A point is inside if it is completely inside, or on the boundary and
+  * adjacent points in the increasing x or y direction are completely inside.
+  * Unclosed shapes are considered as implicitly closed when performing
+  * <code>contains</code> or <code>intersects</code>.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see PathIterator
+  * @see AffineTransform
+  * @see java.awt.geom.FlatteningPathIterator
+  * @see java.awt.geom.GeneralPath
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface Shape
+ {
+   /**
+    * Returns a <code>Rectange</code> that bounds the shape. There is no
+    * guarantee that this is the minimum bounding box, particularly if
+    * the shape overflows the finite integer range of a bound. Generally,
+    * <code>getBounds2D</code> returns a tighter bound.
+    *
+    * @return the shape's bounding box
+    * @see #getBounds2D()
+    */
+   Rectangle getBounds();
+ 
+   /**
+    * Returns a high precision bounding box of the shape. There is no guarantee
+    * that this is the minimum bounding box, but at least it never overflows.
+    *
+    * @return the shape's bounding box
+    * @see #getBounds()
+    * @since 1.2
+    */
+   Rectangle2D getBounds2D();
+ 
+   /**
+    * Test if the coordinates lie in the shape.
+    *
+    * @param x the x coordinate
+    * @param y the y coordinate
+    * @return true if (x,y) lies inside the shape
+    * @since 1.2
+    */
+   boolean contains(double x, double y);
+ 
+   /**
+    * Test if the point lie in the shape.
+    *
+    * @param p the high-precision point
+    * @return true if p lies inside the shape
+    * @throws NullPointerException if p is null
+    * @since 1.2
+    */
+   boolean contains(Point2D p);
+ 
+   /**
+    * Test if a high-precision rectangle intersects the shape. This is true
+    * if any point in the rectangle is in the shape, with the caveat that the
+    * operation may include high probability estimates when the actual
+    * calculation is prohibitively expensive. The {@link java.awt.geom.Area} 
+    * class can be used for more precise answers.
+    *
+    * @param x the x coordinate of the rectangle
+    * @param y the y coordinate of the rectangle
+    * @param w the width of the rectangle, undefined results if negative
+    * @param h the height of the rectangle, undefined results if negative
+    * @return true if the rectangle intersects this shape
+    * @see java.awt.geom.Area
+    * @since 1.2
+    */
+   boolean intersects(double x, double y, double w, double h);
+ 
+   /**
+    * Test if a high-precision rectangle intersects the shape. This is true
+    * if any point in the rectangle is in the shape, with the caveat that the
+    * operation may include high probability estimates when the actual
+    * calculation is prohibitively expensive. The {@link java.awt.geom.Area} 
+    * class can be used for more precise answers.
+    *
+    * @param r the rectangle
+    * @return true if the rectangle intersects this shape
+    * @throws NullPointerException if r is null
+    * @see #intersects(double, double, double, double)
+    * @since 1.2
+    */
+   boolean intersects(Rectangle2D r);
+ 
+   /**
+    * Test if a high-precision rectangle lies completely in the shape. This is
+    * true if all points in the rectangle are in the shape, with the caveat
+    * that the operation may include high probability estimates when the actual
+    * calculation is prohibitively expensive. The {@link java.awt.geom.Area} 
+    * class can be used for more precise answers.
+    *
+    * @param x the x coordinate of the rectangle
+    * @param y the y coordinate of the rectangle
+    * @param w the width of the rectangle, undefined results if negative
+    * @param h the height of the rectangle, undefined results if negative
+    * @return true if the rectangle is contained in this shape
+    * @see java.awt.geom.Area
+    * @since 1.2
+    */
+   boolean contains(double x, double y, double w, double h);
+ 
+   /**
+    * Test if a high-precision rectangle lies completely in the shape. This is
+    * true if all points in the rectangle are in the shape, with the caveat
+    * that the operation may include high probability estimates when the actual
+    * calculation is prohibitively expensive. The {@link java.awt.geom.Area} 
+    * class can be used for more precise answers.
+    *
+    * @param r the rectangle
+    * @return true if the rectangle is contained in this shape
+    * @throws NullPointerException if r is null
+    * @see #contains(double, double, double, double)
+    * @since 1.2
+    */
+   boolean contains(Rectangle2D r);
+ 
+   /**
+    * Return an iterator along the shape boundary. If the optional transform
+    * is provided, the iterator is transformed accordingly. Each call returns
+    * a new object, independent from others in use. It is recommended, but
+    * not required, that the Shape isolate iterations from future changes to
+    * the boundary, and document this fact.
+    *
+    * @param transform an optional transform to apply to the iterator
+    * @return a new iterator over the boundary
+    * @since 1.2
+    */
+   PathIterator getPathIterator(AffineTransform transform);
+ 
+   /**
+    * Return an iterator along the flattened version of the shape boundary.
+    * Only SEG_MOVETO, SEG_LINETO, and SEG_CLOSE points are returned in the
+    * iterator. The flatness paramter controls how far points are allowed to
+    * differ from the real curve; although a limit on accuracy may cause this
+    * parameter to be enlarged if needed.
+    *
+    * <p>If the optional transform is provided, the iterator is transformed
+    * accordingly. Each call returns a new object, independent from others in
+    * use. It is recommended, but not required, that the Shape isolate
+    * iterations from future changes to the boundary, and document this fact.
+    *
+    * @param transform an optional transform to apply to the iterator
+    * @param flatness the maximum distance for deviation from the real boundary
+    * @return a new iterator over the boundary
+    * @since 1.2
+    */
+   PathIterator getPathIterator(AffineTransform transform, double flatness);
+ } // interface Shape
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Stroke.java gcc-4.1.0/libjava/classpath/java/awt/Stroke.java
*** gcc-4.0.2/libjava/classpath/java/awt/Stroke.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Stroke.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* Stroke.java -- a stroked outline of a shape
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ /**
+  * This interface allows a Graphics2D to grab the outline of a shape, as if
+  * stroked by a marking pen of appropriate size and shape. The area inked
+  * by the pen is the area of this stroke. Anything in the graphic which
+  * traces an outline will use this stroke, such as <code>drawLine</code>.
+  * Strokes must be immutable, because the graphics object does not clone
+  * them.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see BasicStroke
+  * @see Graphics2D#setStroke(Stroke)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface Stroke
+ {
+   /**
+    * Returns a shape which outlines the boundary of the given shape, in
+    * effect converting the infinitely thin line into a new shape.
+    *
+    * @param s the shape to stroke
+    * @return the stroked outline shape
+    */
+   Shape createStrokedShape(Shape s);
+ } // interface Stroke
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/SystemColor.java gcc-4.1.0/libjava/classpath/java/awt/SystemColor.java
*** gcc-4.0.2/libjava/classpath/java/awt/SystemColor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/SystemColor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,462 ----
+ /* SystemColor.java -- access dynamic system color values
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.image.ColorModel;
+ import java.io.Serializable;
+ 
+ /**
+  * This class contains the various "system colors" in use by the native
+  * windowing system. The <code>getRGB()</code> method is dynamic on systems
+  * which support dynamic system color changes, and most methods in the
+  * superclass are written to use this dynamic value when reporting colors.
+  * However, the <code>equals()</code> method is not dynamic, and does not
+  * track the actual color of instances in this class. This means that equals
+  * may give surprising results; you are better off relying on getRGB.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public final class SystemColor extends Color implements Serializable
+ {
+   // Implementation note: To be serial compatible with JDK, this class must
+   // violate the semantic meaning of super.value to be one of the
+   // NUM_COLORS constants instead of the actual RGB value. Hence there are
+   // a lot of ugly workarounds in Color and in this class. I would have
+   // designed it MUCH differently, making a separate id field in this class.
+ 
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 4503142729533789064L;
+ 
+   /**
+    * Array index of the desktop color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #desktop
+    */
+   public static final int DESKTOP = 0;
+ 
+   /**
+    * Array index of the active caption color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #activeCaption
+    */
+   public static final int ACTIVE_CAPTION = 1;
+ 
+   /**
+    * Array index of the active caption text color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #activeCaptionText
+    */
+   public static final int ACTIVE_CAPTION_TEXT = 2;
+ 
+   /**
+    * Array index of the active caption border color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #activeCaptionBorder
+    */
+   public static final int ACTIVE_CAPTION_BORDER = 3;
+ 
+   /**
+    * Array index of the inactive caption color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #inactiveCaption
+    */
+   public static final int INACTIVE_CAPTION = 4;
+ 
+   /**
+    * Array index of the inactive caption text color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #inactiveCaptionText
+    */
+   public static final int INACTIVE_CAPTION_TEXT = 5;
+ 
+   /**
+    * Array index of the inactive caption border color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #inactiveCaptionBorder
+    */
+   public static final int INACTIVE_CAPTION_BORDER = 6;
+ 
+   /**
+    * Array index of the window background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #window
+    */
+   public static final int WINDOW = 7;
+ 
+   /**
+    * Array index of the window border color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #windowBorder
+    */
+   public static final int WINDOW_BORDER = 8;
+ 
+   /**
+    * Array index of the window text color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #windowText
+    */
+   public static final int WINDOW_TEXT = 9;
+ 
+   /**
+    * Array index of the menu background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #menu
+    */
+   public static final int MENU = 10;
+ 
+   /**
+    * Array index of the menu text color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #menuText
+    */
+   public static final int MENU_TEXT = 11;
+ 
+   /**
+    * Array index of the text background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #text
+    */
+   public static final int TEXT = 12;
+ 
+   /**
+    * Array index of the text foreground color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #textText
+   */
+   public static final int TEXT_TEXT = 13;
+ 
+   /**
+    * Array index of the highlighted text background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #textHighlight
+    */
+   public static final int TEXT_HIGHLIGHT = 14;
+ 
+   /**
+    * Array index of the highlighted text foreground color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #textHighlightText
+    */
+   public static final int TEXT_HIGHLIGHT_TEXT = 15;
+ 
+   /**
+    * Array index of the inactive text foreground color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #textInactiveText
+    */
+   public static final int TEXT_INACTIVE_TEXT = 16;
+ 
+   /**
+    * Array index of the control background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #control
+    */
+   public static final int CONTROL = 17;
+ 
+   /**
+    * Array index of the control text color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #controlText
+    */
+   public static final int CONTROL_TEXT = 18;
+ 
+   /**
+    * Array index of the highlighted control background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #controlHighlight
+    */
+   public static final int CONTROL_HIGHLIGHT = 19;
+ 
+   /**
+    * Array index of the lightly highlighted control background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #controlLtHighlight
+    */
+   public static final int CONTROL_LT_HIGHLIGHT = 20;
+ 
+   /**
+    * Array index of the shadowed control background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #controlShadow
+    */
+   public static final int CONTROL_SHADOW = 21;
+ 
+   /**
+    * Array index of the darkly shadowed control background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #controlDkShadow
+    */
+   public static final int CONTROL_DK_SHADOW = 22;
+ 
+   /**
+    * Array index of the scrollbar background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #scrollbar
+    */
+   public static final int SCROLLBAR = 23;
+ 
+   /**
+    * Array index of the info background color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #info
+    */
+   public static final int INFO = 24;
+ 
+   /**
+    * Array index of the info text color.  Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    *
+    * @see #infoText
+    */
+   public static final int INFO_TEXT = 25;
+ 
+   /**
+    * The number of system colors. Used by
+    * {@link Toolkit#loadSystemColors(int[])}.
+    */
+   public static final int NUM_COLORS = 26;
+ 
+   /**
+    * The internal array used to dynamically update <code>getRGB()</code>.
+    */
+   private static final int[] colors = new int[NUM_COLORS];
+ 
+   /** The desktop color. */
+   public static final SystemColor desktop
+     = new SystemColor(DESKTOP);
+ 
+   /** The active caption background color. */
+   public static final SystemColor activeCaption
+     = new SystemColor(ACTIVE_CAPTION);
+ 
+   /** The active caption text color. */
+   public static final SystemColor activeCaptionText
+     = new SystemColor(ACTIVE_CAPTION_TEXT);
+ 
+   /** The active caption border color. */
+   public static final SystemColor activeCaptionBorder
+     = new SystemColor(ACTIVE_CAPTION_BORDER);
+ 
+   /** The inactive caption background color. */
+   public static final SystemColor inactiveCaption
+     = new SystemColor(INACTIVE_CAPTION);
+ 
+   /** The inactive caption text color. */
+   public static final SystemColor inactiveCaptionText
+     = new SystemColor(INACTIVE_CAPTION_TEXT);
+ 
+   /** The inactive caption border color. */
+   public static final SystemColor inactiveCaptionBorder
+     = new SystemColor(INACTIVE_CAPTION_BORDER);
+ 
+   /** The window background color. */
+   public static final SystemColor window
+     = new SystemColor(WINDOW);
+ 
+   /** The window border color. */
+   public static final SystemColor windowBorder
+     = new SystemColor(WINDOW_BORDER);
+ 
+   /** The window text color. */
+   public static final SystemColor windowText
+     = new SystemColor(WINDOW_TEXT);
+ 
+   /** The menu background color. */
+   public static final SystemColor menu
+     = new SystemColor(MENU);
+ 
+   /** The menu text color. */
+   public static final SystemColor menuText
+     = new SystemColor(MENU_TEXT);
+ 
+   /** The text background color. */
+   public static final SystemColor text
+     = new SystemColor(TEXT);
+ 
+   /** The text foreground color. */
+   public static final SystemColor textText
+     = new SystemColor(TEXT_TEXT);
+ 
+   /** The highlighted text background color. */
+   public static final SystemColor textHighlight
+     = new SystemColor(TEXT_HIGHLIGHT);
+ 
+   /** The highlighted text foreground color. */
+   public static final SystemColor textHighlightText
+     = new SystemColor(TEXT_HIGHLIGHT_TEXT);
+ 
+   /** The inactive text color. */
+   public static final SystemColor textInactiveText
+     = new SystemColor(TEXT_INACTIVE_TEXT);
+ 
+   /** The control background color. */
+   public static final SystemColor control
+     = new SystemColor(CONTROL);
+ 
+   /** The control text color. */
+   public static final SystemColor controlText
+     = new SystemColor(CONTROL_TEXT);
+ 
+   /** The control highlight color. */
+   public static final SystemColor controlHighlight
+     = new SystemColor(CONTROL_HIGHLIGHT);
+ 
+   /** The control light highlight color. */
+   public static final SystemColor controlLtHighlight
+     = new SystemColor(CONTROL_LT_HIGHLIGHT);
+ 
+   /** The control shadow color. */
+   public static final SystemColor controlShadow
+     = new SystemColor(CONTROL_SHADOW);
+ 
+   /** The control dark shadow color. */
+   public static final SystemColor controlDkShadow
+     = new SystemColor(CONTROL_DK_SHADOW);
+ 
+   /** The scrollbar color. */
+   public static final SystemColor scrollbar
+     = new SystemColor(SCROLLBAR);
+ 
+   /** The info text background color. */
+   public static final SystemColor info
+     = new SystemColor(INFO);
+ 
+   /** The info text foreground color. */
+   public static final SystemColor infoText
+     = new SystemColor(INFO_TEXT);
+ 
+   /**
+    * Construct a system color which is dynamically updated.
+    *
+    * @param id the color id
+    */
+   private SystemColor(int id)
+   {
+     // Note: See Color#Color(int, boolean) to explain why we use this
+     // particular constructor.
+     super(id, true);
+   }
+ 
+   /**
+    * Returns the RGB value for this color, in the sRGB color space. The blue
+    * value will be in bits 0-7, green in 8-15, red in 6-23, and the alpha
+    * value (bits 24-31) is 0xff. This is dynamically updated, so it may not
+    * match the results of <code>getRed()</code>, <code>getGreen()</code>, or
+    * <code>getBlue()</code>.
+    *
+    * @return the current RGB value
+    */
+   public int getRGB()
+   {
+     Toolkit.getDefaultToolkit().loadSystemColors(colors);
+     return colors[value] | ALPHA_MASK;
+   }
+ 
+   /**
+    * Returns a paint context, used for filling areas of a raster scan with
+    * the current value of this system color. Since the system colors may be
+    * dynamically updated, the returned value may not always be the same; but
+    * as the system color is solid, the context does not need any of the
+    * passed parameters to do its job.
+    *
+    * @param cm the requested color model
+    * @param deviceBounds the bounding box in device coordinates, ignored
+    * @param userBounds the bounding box in user coordinates, ignored
+    * @param xform the bounds transformation, ignored
+    * @param hints any rendering hints, ignored
+    * @return a context for painting this solid color
+    */
+   public PaintContext createContext(ColorModel cm, Rectangle deviceBounds,
+                                     Rectangle2D userBounds,
+                                     AffineTransform xform,
+                                     RenderingHints hints)
+   {
+     Toolkit.getDefaultToolkit().loadSystemColors(colors);
+     int color = colors[value] | ALPHA_MASK;
+     if (context == null || color != context.color || !context.getColorModel().equals(cm))
+       context = new ColorPaintContext(cm,color);
+     return context;
+   }    
+ 
+   /**
+    * Returns a string describing this color. This is in the format
+    * "java.awt.SystemColor[i=" + index + ']', where index is one of the
+    * integer constants of this class. Unfortunately, this description
+    * does not describe the current value of the color; for that you should
+    * use <code>new Color(syscolor.getRGB()).toString()</code>.
+    *
+    * @return a string describing this color
+    */
+   public String toString()
+   {
+     return "java.awt.SystemColor[i=" + value + ']';
+   }
+ } // class SystemColor
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/TextArea.java gcc-4.1.0/libjava/classpath/java/awt/TextArea.java
*** gcc-4.0.2/libjava/classpath/java/awt/TextArea.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/TextArea.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,631 ----
+ /* TextArea.java -- A multi-line text entry component
+    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.KeyEvent;
+ import java.awt.peer.ComponentPeer;
+ import java.awt.peer.TextAreaPeer;
+ import java.util.HashSet;
+ import java.util.Set;
+ 
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleStateSet;
+ 
+ 
+ /**
+  * A TextArea is a text component capable of displaying multiple lines
+  * of user-editable text.  A TextArea handles its own scrolling and
+  * can display vertical and horizontal scrollbars as navigation aids.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class TextArea extends TextComponent implements java.io.Serializable
+ {
+   /**
+    * Display both horiztonal and vertical scroll bars.
+    */
+   public static final int SCROLLBARS_BOTH = 0;
+ 
+   /**
+    * Display vertical scroll bar only.
+    */
+   public static final int SCROLLBARS_VERTICAL_ONLY = 1;
+ 
+   /**
+    * Display horizatonal scroll bar only.
+    */
+   public static final int SCROLLBARS_HORIZONTAL_ONLY = 2;
+ 
+   /**
+    * Do not display scrollbars.
+    */
+   public static final int SCROLLBARS_NONE = 3;
+ 
+   /**
+    * Serialization constant.
+    */
+   private static final long serialVersionUID = 3692302836626095722L;
+ 
+   /**
+    * @serial The number of columns used in this text area's preferred
+    * and minimum size calculations.
+    */
+   private int columns;
+ 
+   /**
+    * @serial The number of rows used in this text area's preferred and
+    * minimum size calculations.
+    */
+   private int rows;
+ 
+   /**
+    * @serial The scrollbar display policy.  One of SCROLLBARS_BOTH,
+    * SCROLLBARS_VERTICAL_ONLY, SCROLLBARS_HORIZONTAL_ONLY,
+    * SCROLLBARS_NONE.
+    */
+   private int scrollbarVisibility;
+ 
+   /*
+    * The number used to generate the name returned by getName.
+    */
+   private static transient long next_text_number;
+ 
+   /**
+    * Initialize a new instance of <code>TextArea</code> that is empty.
+    * Conceptually the <code>TextArea</code> has 0 rows and 0 columns
+    * but its initial bounds are defined by its peer or by the
+    * container in which it is packed.  Both horizontal and vertical
+    * scrollbars will be displayed.
+    *
+    * @exception HeadlessException if GraphicsEnvironment.isHeadless () is true
+    */
+   public TextArea ()
+   {
+     this ("", 0, 0, SCROLLBARS_BOTH);
+   }
+ 
+   /**
+    * Initialize a new instance of <code>TextArea</code> that contains
+    * the specified text.  Conceptually the <code>TextArea</code> has 0
+    * rows and 0 columns but its initial bounds are defined by its peer
+    * or by the container in which it is packed.  Both horizontal and
+    * veritcal scrollbars will be displayed.
+    *
+    * @param text The text to display in this text area.
+    *
+    * @exception HeadlessException if GraphicsEnvironment.isHeadless () is true
+    */
+   public TextArea (String text)
+   {
+     this (text, 0, 0, SCROLLBARS_BOTH);
+   }
+ 
+   /**
+    * Initialize a new instance of <code>TextArea</code> that is empty
+    * and can display the specified number of rows and columns of text,
+    * without the need to scroll.  Both horizontal and vertical
+    * scrollbars will be displayed.
+    *
+    * @param rows The number of rows in this text area.
+    * @param columns The number of columns in this text area.
+    *
+    * @exception HeadlessException if GraphicsEnvironment.isHeadless () is true
+    */
+   public TextArea (int rows, int columns)
+   {
+     this ("", rows, columns, SCROLLBARS_BOTH);
+   }
+ 
+   /**
+    * Initialize a new instance of <code>TextArea</code> that can
+    * display the specified number of rows and columns of text, without
+    * the need to scroll.  The TextArea initially contains the
+    * specified text.
+    *
+    * @param text The text to display in this text area.
+    * @param rows The number of rows in this text area.
+    * @param columns The number of columns in this text area.
+    *
+    * @exception HeadlessException if GraphicsEnvironment.isHeadless () is true
+    */
+   public TextArea (String text, int rows, int columns)
+   {
+     this (text, rows, columns, SCROLLBARS_BOTH);
+   }
+ 
+   /**
+    * Initialize a new instance of <code>TextArea</code> that initially
+    * contains the specified text.  The TextArea can display the
+    * specified number of rows and columns of text, without the need to
+    * scroll.  This constructor allows specification of the scroll bar
+    * display policy.
+    *
+    * @param text The text to display in this text area.
+    * @param rows The number of rows in this text area.
+    * @param columns The number of columns in this text area.
+    * @param scrollbarVisibility The scroll bar display policy. One of
+    * SCROLLBARS_BOTH, SCROLLBARS_VERTICAL_ONLY,
+    * SCROLLBARS_HORIZONTAL_ONLY, SCROLLBARS_NONE.
+    *
+    * @exception HeadlessException if GraphicsEnvironment.isHeadless () is true
+    */
+   public TextArea (String text, int rows, int columns, int scrollbarVisibility)
+   {
+     super (text);
+ 
+     if (GraphicsEnvironment.isHeadless ())
+       throw new HeadlessException ();
+ 
+     if (rows < 0 || columns < 0)
+       throw new IllegalArgumentException ("Bad row or column value");
+ 
+     if (scrollbarVisibility != SCROLLBARS_BOTH
+         && scrollbarVisibility != SCROLLBARS_VERTICAL_ONLY
+         && scrollbarVisibility != SCROLLBARS_HORIZONTAL_ONLY
+         && scrollbarVisibility != SCROLLBARS_NONE)
+       throw new IllegalArgumentException ("Bad scrollbar visibility value");
+ 
+     this.rows = rows;
+     this.columns = columns;
+     this.scrollbarVisibility = scrollbarVisibility;
+ 
+     // TextAreas need to receive tab key events so we override the
+     // default forward and backward traversal key sets.
+     Set s = new HashSet ();
+     s.add (AWTKeyStroke.getAWTKeyStroke (KeyEvent.VK_TAB,
+                                          KeyEvent.CTRL_DOWN_MASK));
+     setFocusTraversalKeys (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, s);
+     s = new HashSet ();
+     s.add (AWTKeyStroke.getAWTKeyStroke (KeyEvent.VK_TAB,
+                                          KeyEvent.SHIFT_DOWN_MASK
+                                          | KeyEvent.CTRL_DOWN_MASK));
+     setFocusTraversalKeys (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, s);
+   }
+ 
+   /**
+    * Retrieve the number of columns that this text area would prefer
+    * to display.  This value may or may not correspond to the number
+    * of columns that are actually displayed.
+    *
+    * @return The preferred number of columns.
+    */
+   public int getColumns ()
+   {
+     return columns;
+   }
+ 
+   /**
+    * Set the preferred number of columns for this text area.  This
+    * method does not cause the number of columns displayed by the text
+    * area to be updated, if the text area is currently visible.
+    *
+    * @param columns The preferred number of columns.
+    *
+    * @exception IllegalArgumentException If columns is less than zero.
+    */
+   public synchronized void setColumns (int columns)
+   {
+     if (columns < 0)
+       throw new IllegalArgumentException ("Value is less than zero: "
+                                           + columns);
+ 
+     this.columns = columns;
+   }
+ 
+   /**
+    * Retrieve the number of rows that this text area would prefer to
+    * display.  This value may or may not correspond to the number of
+    * rows that are actually displayed.
+    *
+    * @return The preferred number of rows.
+    */
+   public int getRows ()
+   {
+     return rows;
+   }
+ 
+   /**
+    * Set the preferred number of rows for this text area.  This method
+    * does not cause the number of columns displayed by the text area
+    * to be updated, if the text area is currently visible.
+    *
+    * @param rows The preferred number of rows.
+    *
+    * @exception IllegalArgumentException If rows is less than zero.
+    */
+   public synchronized void setRows (int rows)
+   {
+     if (rows < 1)
+       throw new IllegalArgumentException ("Value is less than one: " + rows);
+ 
+     this.rows = rows;
+   }
+ 
+   /**
+    * Retrieve the minimum size for this text area, considering the
+    * text area's current row and column values.  A text area's minimum
+    * size depends on the number of rows and columns of text it would
+    * prefer to display, and on the size of the font in which the text
+    * would be displayed.
+    *
+    * @return The minimum size for this text field.
+    */
+   public Dimension getMinimumSize ()
+   {
+     return getMinimumSize (getRows (), getColumns ());
+   }
+ 
+   /**
+    * Retrieve the minimum size that this text area would have if its
+    * row and column values were equal to those specified.  A text
+    * area's minimum size depends on the number of rows and columns of
+    * text it would prefer to display, and on the size of the font in
+    * which the text would be displayed.
+    *
+    * @param rows The number of rows to use in the minimum size
+    * calculation.
+    * @param columns The number of columns to use in the minimum size
+    * calculation.
+    *
+    * @return The minimum size for this text area.
+    */
+   public Dimension getMinimumSize (int rows, int columns)
+   {
+     return minimumSize (rows, columns);
+   }
+ 
+   /**
+    * Retrieve the minimum size for this text area, considering the
+    * text area's current row and column values.  A text area's minimum
+    * size depends on the number of rows and columns of text it would
+    * prefer to display, and on the size of the font in which the text
+    * would be displayed.
+    *
+    * @return The minimum size for this text area.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>getMinimumSize ()</code>.
+    */
+   public Dimension minimumSize ()
+   {
+     return minimumSize (getRows (), getColumns ());
+   }
+ 
+   /**
+    * Retrieve the minimum size that this text area would have if its
+    * row and column values were equal to those specified.  A text
+    * area's minimum size depends on the number of rows and columns of
+    * text it would prefer to display, and on the size of the font in
+    * which the text would be displayed.
+    *
+    * @param rows The number of rows to use in the minimum size
+    * calculation.
+    * @param columns The number of columns to use in the minimum size
+    * calculation.
+    *
+    * @return The minimum size for this text area.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>getMinimumSize (int, int)</code>.
+    */
+   public Dimension minimumSize (int rows, int columns)
+   {
+     TextAreaPeer peer = (TextAreaPeer) getPeer ();
+ 
+     // Sun returns Dimension (0,0) in this case.
+     if (peer == null)
+       return new Dimension (0, 0);
+ 
+     return peer.getMinimumSize (rows, columns);
+   }
+ 
+   /**
+    * Retrieve the preferred size for this text area, considering the
+    * text area's current row and column values.  A text area's preferred
+    * size depends on the number of rows and columns of text it would
+    * prefer to display, and on the size of the font in which the text
+    * would be displayed.
+    *
+    * @return The preferred size for this text field.
+    */
+   public Dimension getPreferredSize ()
+   {
+     return getPreferredSize (getRows (), getColumns ());
+   }
+ 
+   /**
+    * Retrieve the preferred size that this text area would have if its
+    * row and column values were equal to those specified.  A text
+    * area's preferred size depends on the number of rows and columns
+    * of text it would prefer to display, and on the size of the font
+    * in which the text would be displayed.
+    *
+    * @param rows The number of rows to use in the preferred size
+    * calculation.
+    * @param columns The number of columns to use in the preferred size
+    * calculation.
+    *
+    * @return The preferred size for this text area.
+    */
+   public Dimension getPreferredSize (int rows, int columns)
+   {
+     return preferredSize (rows, columns);
+   }
+ 
+   /**
+    * Retrieve the preferred size for this text area, considering the
+    * text area's current row and column values.  A text area's preferred
+    * size depends on the number of rows and columns of text it would
+    * prefer to display, and on the size of the font in which the text
+    * would be displayed.
+    *
+    * @return The preferred size for this text field.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>getPreferredSize ()</code>.
+    */
+   public Dimension preferredSize ()
+   {
+     return preferredSize (getRows (), getColumns ());
+   }
+ 
+   /**
+    * Retrieve the preferred size that this text area would have if its
+    * row and column values were equal to those specified.  A text
+    * area's preferred size depends on the number of rows and columns
+    * of text it would prefer to display, and on the size of the font
+    * in which the text would be displayed.
+    *
+    * @param rows The number of rows to use in the preferred size
+    * calculation.
+    * @param columns The number of columns to use in the preferred size
+    * calculation.
+    *
+    * @return The preferred size for this text area.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>getPreferredSize (int, int)</code>.
+    */
+   public Dimension preferredSize (int rows, int columns)
+   {
+     TextAreaPeer peer = (TextAreaPeer) getPeer ();
+ 
+     // Sun returns Dimension (0,0) in this case.
+     if (peer == null)
+       return new Dimension (0, 0);
+ 
+     return peer.getPreferredSize (rows, columns);
+   }
+ 
+   /**
+    * Retrieve the scroll bar display policy -- one of SCROLLBARS_BOTH,
+    * SCROLLBARS_VERTICAL_ONLY, SCROLLBARS_HORIZONTAL_ONLY,
+    * SCROLLBARS_NONE.
+    *
+    * @return The current scroll bar display policy.
+    */
+   public int getScrollbarVisibility ()
+   {
+     return scrollbarVisibility;
+   }
+ 
+   /**
+    * Notify this object that it should create its native peer.
+    */
+   public void addNotify ()
+   {
+     if (getPeer () == null)
+       setPeer ((ComponentPeer) getToolkit().createTextArea (this));
+   }
+ 
+   /**
+    * Append the specified text to the end of the current text.
+    *
+    * @param str The text to append.
+    */
+   public void append (String str)
+   {
+     appendText (str);
+   }
+ 
+   /**
+    * Append the specified text to the end of the current text.
+    *
+    * @param str The text to append.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>append ()</code>.
+    */
+   public void appendText (String str)
+   {
+     TextAreaPeer peer = (TextAreaPeer) getPeer ();
+ 
+     if (peer != null)
+       peer.insert (str, peer.getText().length ());
+   }
+ 
+   /**
+    * Insert the specified text at the specified position.  The first
+    * character in the text area is at position zero.
+    *
+    * @param str The text to insert.
+    * @param pos The position at which to insert text.
+    */
+   public void insert (String str, int pos)
+   {
+     insertText (str, pos);
+   }
+ 
+   /**
+    * Insert the specified text at the specified position.  The first
+    * character in the text area is at position zero.
+    *
+    * @param str The text to insert.
+    * @param pos The position at which to insert text.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>insert ()</code>.
+    */
+   public void insertText (String str, int pos)
+   {
+     TextAreaPeer peer = (TextAreaPeer) getPeer ();
+ 
+     if (peer != null)
+       peer.insert (str, pos);
+   }
+ 
+   /**
+    * Replace a range of characters with the specified text.  The
+    * character at the start position will be replaced, unless start ==
+    * end.  The character at the end posistion will not be replaced.
+    * The first character in the text area is at position zero.  The
+    * length of the replacement text may differ from the length of the
+    * text that is replaced.
+    *
+    * @param str The new text for the range.
+    * @param start The start position of the replacement range.
+    * @param end The end position of the replacement range.
+    */
+   public void replaceRange (String str, int start, int end)
+   {
+     replaceText (str, start, end);
+   }
+ 
+   /**
+    * Replace a range of characters with the specified text.  The
+    * character at the start position will be replaced, unless start ==
+    * end.  The character at the end posistion will not be replaced.
+    * The first character in the text area is at position zero.  The
+    * length of the replacement text may differ from the length of the
+    * text that is replaced.
+    *
+    * @param str The new text for the range.
+    * @param start The start position of the replacement range.
+    * @param end The end position of the replacement range.
+    *
+    * @deprecated This method is deprecated in favor of
+    * <code>replaceRange ()</code>.
+    */
+   public void replaceText (String str, int start, int end)
+   {
+     TextAreaPeer peer = (TextAreaPeer) getPeer ();
+ 
+     if (peer != null)
+       peer.replaceRange (str, start, end);
+   }
+ 
+   /**
+    * Retrieve a debugging string for this text area.
+    *
+    * @return A debugging string for this text area.
+    */
+   protected String paramString ()
+   {
+     String sbVisibility = "";
+ 
+     switch (scrollbarVisibility)
+       {
+       case SCROLLBARS_BOTH:
+ 	sbVisibility = "both";
+ 	break;
+       case SCROLLBARS_VERTICAL_ONLY:
+ 	sbVisibility = "vertical-only";
+ 	break;
+       case SCROLLBARS_HORIZONTAL_ONLY:
+ 	sbVisibility = "horizontal-only";
+ 	break;
+       case SCROLLBARS_NONE:
+ 	sbVisibility = "none";
+ 	break;
+       }
+ 
+     String editable = "";
+     if (isEditable ())
+       editable = "editable,";
+ 
+     return getName () + "," + getX () + "," + getY () + "," + getWidth ()
+            + "x" + getHeight () + "," + "text=" + getText () + "," + editable
+            + "selection=" + getSelectionStart () + "-" + getSelectionEnd ()
+            + ",rows=" + rows + ",columns=" + columns + ",scrollbarVisibility="
+            + sbVisibility;
+   }
+ 
+   /**
+    * Generate a unique name for this text area.
+    *
+    * @return A unique name for this text area.
+    */
+   String generateName ()
+   {
+     return "text" + getUniqueLong ();
+   }
+ 
+   private static synchronized long getUniqueLong ()
+   {
+     return next_text_number++;
+   }
+   
+   protected class AccessibleAWTTextArea extends AccessibleAWTTextComponent
+   {
+     private static final long serialVersionUID = 3472827823632144419L;
+ 
+     protected AccessibleAWTTextArea()
+     {
+     }
+     
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       return super.getAccessibleStateSet();
+     }
+   }
+   
+   /**
+    * Gets the AccessibleContext associated with this <code>TextArea</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTTextArea();
+     return accessibleContext;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/TextComponent.java gcc-4.1.0/libjava/classpath/java/awt/TextComponent.java
*** gcc-4.0.2/libjava/classpath/java/awt/TextComponent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/TextComponent.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,741 ----
+ /* TextComponent.java -- Widgets for entering text
+    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.TextEvent;
+ import java.awt.event.TextListener;
+ import java.awt.peer.TextComponentPeer;
+ import java.io.Serializable;
+ import java.text.BreakIterator;
+ import java.util.EventListener;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleState;
+ import javax.accessibility.AccessibleStateSet;
+ import javax.accessibility.AccessibleText;
+ import javax.swing.text.AttributeSet;
+ 
+ /**
+   * This class provides common functionality for widgets than 
+   * contain text.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class TextComponent extends Component
+   implements Serializable, Accessible
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Constant for serialization
+ private static final long serialVersionUID = -2214773872412987419L;
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial Indicates whether or not this component is editable.
+   * This is package-private to avoid an accessor method.
+   */
+ boolean editable;
+ 
+ /**
+   * @serial The starting position of the selected text region.
+   * This is package-private to avoid an accessor method.
+   */
+ int selectionStart;
+ 
+ /**
+   * @serial The ending position of the selected text region.
+   * This is package-private to avoid an accessor method.
+   */
+ int selectionEnd;
+ 
+ /**
+   * @serial The text in the component
+   * This is package-private to avoid an accessor method.
+   */
+ String text;
+ 
+ /**
+   * A list of listeners that will receive events from this object.
+   */
+ protected transient TextListener textListener;
+ 
+   protected class AccessibleAWTTextComponent
+     extends AccessibleAWTComponent
+     implements AccessibleText, TextListener
+   {
+     private static final long serialVersionUID = 3631432373506317811L;
+ 
+     // Constructor
+     // Adds a listener for tracking caret changes
+     public AccessibleAWTTextComponent()
+     {
+       TextComponent.this.addTextListener(this);
+     }
+     
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.TEXT;
+     }
+     
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       // TODO: Docs say PropertyChangeEvent will fire if this state changes.
+       // That means that the event has to fire when editable changes.
+       AccessibleStateSet ss = super.getAccessibleStateSet();
+       if (editable)
+         ss.add(AccessibleState.EDITABLE);
+       return ss;
+     }
+     
+     public AccessibleText getAccessibleText()
+     {
+       return this;
+     }
+     
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getIndexAtPoint(java.awt.Point)
+      */
+     public int getIndexAtPoint(Point point)
+     {
+       return TextComponent.this.getIndexAtPoint(point);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getCharacterBounds(int)
+      */
+     public Rectangle getCharacterBounds(int index)
+     {
+       return TextComponent.this.getCharacterBounds(index);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getCharCount()
+      */
+     public int getCharCount()
+     {
+       return text.length();
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getCaretPosition()
+      */
+     public int getCaretPosition()
+     {
+       return TextComponent.this.getCaretPosition();
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getAtIndex(int, int)
+      */
+     public String getAtIndex(int part, int index)
+     {
+       if (index < 0 || index >= text.length())
+         return null;
+       BreakIterator it = null;
+       switch (part)
+       {
+       	case CHARACTER:
+       	  return text.substring(index, index + 1);
+       	case WORD:
+       	  it = BreakIterator.getWordInstance();
+       	  break;
+       	case SENTENCE:
+       	  it = BreakIterator.getSentenceInstance();
+       	  break;
+       	default:
+       	  return null;
+       }
+   	  it.setText(text);
+   	  int start = index;
+   	  if (!it.isBoundary(index))
+   	    start = it.preceding(index); 
+   	  int end = it.following(index);
+   	  if (end == -1)
+   	    return text.substring(index);
+   	  else
+   	    return text.substring(index, end);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getAfterIndex(int, int)
+      */
+     public String getAfterIndex(int part, int index) {
+       if (index < 0 || index >= text.length())
+         return null;
+       BreakIterator it = null;
+       switch (part)
+       {
+       	case CHARACTER:
+       	  return text.substring(index, index + 1);
+       	case WORD:
+       	  it = BreakIterator.getWordInstance();
+       	  break;
+       	case SENTENCE:
+       	  it = BreakIterator.getSentenceInstance();
+       	  break;
+       	default:
+       	  return null;
+       }
+   	  it.setText(text);
+   	  int start = index;
+   	  if (!it.isBoundary(index))
+   	    start = it.following(index);
+   	  // Make sure there was a complete unit.  I.e. if index is in the middle
+   	  // of a word, return null if there is no word after the that one.
+   	  if (start == -1)
+   	    return null;
+   	  int end = it.following(start);
+   	  if (end == -1)
+   	    return text.substring(index);
+   	  else
+   	    return text.substring(index, end);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getBeforeIndex(int, int)
+      */
+     public String getBeforeIndex(int part, int index)
+     {
+       if (index < 1 || index >= text.length())
+         return null;
+       BreakIterator it = null;
+       switch (part)
+       {
+       	case CHARACTER:
+       	  return text.substring(index - 1, index);
+       	case WORD:
+       	  it = BreakIterator.getWordInstance();
+       	  break;
+       	case SENTENCE:
+       	  it = BreakIterator.getSentenceInstance();
+       	  break;
+       	default:
+       	  return null;
+       }
+   	  it.setText(text);
+   	  int end = index;
+   	  if (!it.isBoundary(index))
+   	    end = it.preceding(index); 
+   	  // Make sure there was a complete unit.  I.e. if index is in the middle
+   	  // of a word, return null if there is no word before that one.
+   	  if (end == -1)
+   	    return null;
+   	  int start = it.preceding(end);
+   	  if (start == -1)
+   	    return text.substring(0, end);
+   	  else
+   	    return text.substring(start, end);
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getCharacterAttribute(int)
+      */
+     public AttributeSet getCharacterAttribute(int index)
+     {
+       // FIXME: I suspect this really gets filled in by subclasses.
+       return null;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getSelectionStart()
+      */
+     public int getSelectionStart() {
+       // TODO Auto-generated method stub
+       return selectionStart;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getSelectionEnd()
+      */
+     public int getSelectionEnd()
+     {
+       return selectionEnd;
+     }
+ 
+     /* (non-Javadoc)
+      * @see javax.accessibility.AccessibleText#getSelectedText()
+      */
+     public String getSelectedText()
+     {
+       if (selectionEnd - selectionStart > 0)
+         return text.substring(selectionStart, selectionEnd);
+       else
+         return null;
+     }
+ 
+     /* (non-Javadoc)
+      * @see java.awt.event.TextListener#textValueChanged(java.awt.event.TextEvent)
+      */
+     public void textValueChanged(TextEvent event)
+     {
+       // TODO Auto-generated method stub
+       
+     }
+     
+   }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ TextComponent(String text)
+ {
+   this.text = text;
+   this.editable = true;
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the text in this component
+   *
+   * @return The text in this component.
+   */
+ public synchronized String
+ getText()
+ {
+   TextComponentPeer tcp = (TextComponentPeer)getPeer();
+   if (tcp != null)
+     text = tcp.getText();
+ 
+   return(text);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the text in this component to the specified string.
+   *
+   * @param text The new text for this component.
+   */
+ public synchronized void
+ setText(String text)
+ {
+   if (text == null)
+     text = "";
+ 
+   this.text = text;
+ 
+   TextComponentPeer tcp = (TextComponentPeer)getPeer();
+   if (tcp != null)
+     tcp.setText(text);
+   setCaretPosition(0);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a string that contains the text that is currently selected.
+   *
+   * @return The currently selected text region.
+   */
+ public synchronized String
+ getSelectedText()
+ {
+   String alltext = getText();
+   int start = getSelectionStart();
+   int end = getSelectionEnd();
+   
+   return(alltext.substring(start, end));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the starting position of the selected text region.
+   * If the text is not selected then caret position is returned. 
+   *
+   * @return The starting position of the selected text region.
+   */
+ public synchronized int
+ getSelectionStart()
+ {
+   TextComponentPeer tcp = (TextComponentPeer)getPeer();
+   if (tcp != null)
+     selectionStart = tcp.getSelectionStart();
+ 
+   return(selectionStart);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the starting position of the selected region to the
+   * specified value.  If the specified value is out of range, then it
+   * will be silently changed to the nearest legal value.
+   *
+   * @param selectionStart The new start position for selected text.
+   */
+ public synchronized void
+ setSelectionStart(int selectionStart)
+ {
+   select(selectionStart, getSelectionEnd());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the ending position of the selected text region.
+   * If the text is not selected, then caret position is returned 
+   *
+   * @return The ending position of the selected text region.
+   */
+ public synchronized int
+ getSelectionEnd()
+ {
+   TextComponentPeer tcp = (TextComponentPeer)getPeer();
+   if (tcp != null)
+     selectionEnd = tcp.getSelectionEnd();
+ 
+   return(selectionEnd);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the ending position of the selected region to the
+   * specified value.  If the specified value is out of range, then it
+   * will be silently changed to the nearest legal value.
+   *
+   * @param selectionEnd The new start position for selected text.
+   */
+ public synchronized void
+ setSelectionEnd(int selectionEnd)
+ {
+   select(getSelectionStart(), selectionEnd);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method sets the selected text range to the text between the
+   * specified start and end positions.  Illegal values for these
+   * positions are silently fixed.
+   *
+   * @param selectionStart The new start position for the selected text.
+   * @param selectionEnd The new end position for the selected text.
+   */
+ public synchronized void
+ select(int selectionStart, int selectionEnd)
+ {
+   if (selectionStart < 0)
+     selectionStart = 0;
+ 
+   if (selectionStart > getText().length())
+     selectionStart = text.length();
+ 
+   if (selectionEnd > text.length())
+     selectionEnd = text.length();
+ 
+   if (selectionStart > selectionEnd)
+     selectionStart = selectionEnd;
+ 
+   this.selectionStart = selectionStart;
+   this.selectionEnd = selectionEnd;
+ 
+   TextComponentPeer tcp = (TextComponentPeer)getPeer();
+   if (tcp != null)
+     tcp.select(selectionStart, selectionEnd);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Selects all of the text in the component.
+   */
+ public synchronized void
+ selectAll()
+ {
+   select(0, getText().length());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the current caret position in the text.
+   *
+   * @return The caret position in the text.
+   */
+ public synchronized int
+ getCaretPosition()
+ {
+   TextComponentPeer tcp = (TextComponentPeer)getPeer();
+   if (tcp != null)
+     return(tcp.getCaretPosition());
+   else
+     return(0);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the caret position to the specified value.
+   *
+   * @param caretPosition The new caret position.
+   *
+   * @exception IllegalArgumentException If the value supplied for position
+   * is less than zero.
+   *
+   * @since 1.1
+   */
+ public synchronized void
+ setCaretPosition(int caretPosition)
+ {
+   if (caretPosition < 0)
+     throw new IllegalArgumentException ();
+   
+   TextComponentPeer tcp = (TextComponentPeer)getPeer();
+   if (tcp != null)
+     tcp.setCaretPosition(caretPosition);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not this component's text can be edited.
+   *
+   * @return <code>true</code> if the text can be edited, <code>false</code>
+   * otherwise.
+   */
+ public boolean
+ isEditable()
+ {
+   return(editable);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets whether or not this component's text can be edited.
+   *
+   * @param editable <code>true</code> to enable editing of the text,
+   * <code>false</code> to disable it.
+   */
+ public synchronized void
+ setEditable(boolean editable)
+ {
+   this.editable = editable;
+ 
+   TextComponentPeer tcp = (TextComponentPeer)getPeer();
+   if (tcp != null)
+     tcp.setEditable(editable);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Notifies the component that it should destroy its native peer.
+   */
+ public void
+ removeNotify()
+ {
+   super.removeNotify();
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Adds a new listener to the list of text listeners for this
+   * component.
+   *
+   * @param listener The listener to be added.
+   */
+ public synchronized void
+ addTextListener(TextListener listener)
+ {
+   textListener = AWTEventMulticaster.add(textListener, listener);
+ 
+   enableEvents(AWTEvent.TEXT_EVENT_MASK);  
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specified listener from the list of listeners
+   * for this component.
+   *
+   * @param listener The listener to remove.
+   */
+ public synchronized void
+ removeTextListener(TextListener listener)
+ {
+   textListener = AWTEventMulticaster.remove(textListener, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes the specified event for this component.  Text events are
+   * processed by calling the <code>processTextEvent()</code> method.
+   * All other events are passed to the superclass method.
+   * 
+   * @param event The event to process.
+   */
+ protected void
+ processEvent(AWTEvent event)
+ {
+   if (event instanceof TextEvent)
+     processTextEvent((TextEvent)event);
+   else
+     super.processEvent(event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes the specified text event by dispatching it to any listeners
+   * that are registered.  Note that this method will only be called
+   * if text event's are enabled.  This will be true if there are any
+   * registered listeners, or if the event has been specifically
+   * enabled using <code>enableEvents()</code>.
+   *
+   * @param event The text event to process.
+   */
+ protected void
+ processTextEvent(TextEvent event)
+ {
+   if (textListener != null)
+     textListener.textValueChanged(event);
+ }
+ 
+ void
+ dispatchEventImpl(AWTEvent e)
+ {
+   if (e.id <= TextEvent.TEXT_LAST 
+       && e.id >= TextEvent.TEXT_FIRST
+       && (textListener != null 
+ 	  || (eventMask & AWTEvent.TEXT_EVENT_MASK) != 0))
+     processEvent(e);
+   else
+     super.dispatchEventImpl(e);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debugging string.
+   *
+   * @return A debugging string.
+   */
+ protected String
+ paramString()
+ {
+   return(getClass().getName() + "(text=" + getText() + ")");
+ }
+ 
+   /**
+    * Returns an array of all the objects currently registered as FooListeners
+    * upon this <code>TextComponent</code>. FooListeners are registered using
+    * the addFooListener method.
+    *
+    * @exception ClassCastException If listenerType doesn't specify a class or
+    * interface that implements java.util.EventListener.
+    */
+   public EventListener[] getListeners (Class listenerType)
+   {
+     if (listenerType == TextListener.class)
+       return AWTEventMulticaster.getListeners (textListener, listenerType);
+ 
+     return super.getListeners (listenerType);
+   }
+ 
+   /**
+    * Returns all text listeners registered to this object.
+    */
+   public TextListener[] getTextListeners ()
+   {
+     return (TextListener[]) getListeners (TextListener.class);
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this <code>TextComponent</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTTextComponent();
+     return accessibleContext;
+   }
+ 
+   
+   /*******************************/
+   // Provide AccessibleAWTTextComponent access to several peer functions that
+   // aren't publicly exposed.  This is package-private to avoid an accessor
+   // method.
+   synchronized int
+   getIndexAtPoint(Point p)
+   {
+     TextComponentPeer tcp = (TextComponentPeer)getPeer();
+     if (tcp != null)
+       return tcp.getIndexAtPoint(p.x, p.y);
+     return -1;
+   }
+   
+   synchronized Rectangle
+   getCharacterBounds(int i)
+   {
+     TextComponentPeer tcp = (TextComponentPeer)getPeer();
+     if (tcp != null)
+       return tcp.getCharacterBounds(i);
+     return null;
+   }
+   
+   
+ 
+ 
+ } // class TextComponent
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/TextField.java gcc-4.1.0/libjava/classpath/java/awt/TextField.java
*** gcc-4.0.2/libjava/classpath/java/awt/TextField.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/TextField.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,543 ----
+ /* TextField.java -- A one line text entry field
+    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.awt.peer.ComponentPeer;
+ import java.awt.peer.TextFieldPeer;
+ import java.util.EventListener;
+ 
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleStateSet;
+ 
+ /**
+   * This class implements a single line text entry field widget
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class TextField extends TextComponent
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ // Serialization constant
+ private static final long serialVersionUID = -2966288784432217853L;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * @serial The number of columns in the text entry field.
+   */
+ private int columns;
+ 
+ /**
+   * @serial The character that is echoed when doing protected input
+   */
+ private char echoChar;
+ 
+ // List of registered ActionListener's for this object.
+ private ActionListener action_listeners;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+  * Initializes a new instance of <code>TextField</code> that is empty
+  * and has one column.
+  *
+  * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+  */
+ public
+ TextField()
+ {
+   this("", 1);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>TextField</code> containing
+   * the specified text.  The number of columns will be equal to the
+   * length of the text string.
+   *
+   * @param text The text to display in the field.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+   */
+ public
+ TextField(String text)
+ {
+   this(text, text.length());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>TextField</code> that is empty
+   * and has the specified number of columns.
+   *
+   * @param columns The number of columns in the text field.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+   */
+ public
+ TextField(int columns)
+ {
+   this("", columns);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Initializes a new instance of <code>TextField</code> with the
+   * specified text and number of columns.
+   *
+   * @param text The text to display in the field.
+   * @param columns The number of columns in the field.
+   *
+   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+   */
+ public
+ TextField(String text, int columns)
+ {
+   super(text);
+   this.columns = columns;
+ 
+   if (GraphicsEnvironment.isHeadless())
+     throw new HeadlessException ();
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * Returns the number of columns in the field.
+   *
+   * @return The number of columns in the field.
+   */
+ public int
+ getColumns()
+ {
+   return(columns);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the number of columns in this field to the specified value.
+   *
+   * @param columns The new number of columns in the field.
+   *
+   * @exception IllegalArgumentException If columns is less than zero.
+   */
+ public synchronized void
+ setColumns(int columns)
+ {
+   if (columns < 0)
+     throw new IllegalArgumentException("Value is less than zero: " +
+                                        columns);
+ 
+   this.columns = columns;
+   // FIXME: How to we communicate this to our peer?
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the character that is echoed to the screen when a text 
+   * field is protected (such as when a password is being entered).
+   *
+   * @return The echo character for this text field.
+   */
+ public char
+ getEchoChar()
+ {
+   return(echoChar);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the character that is echoed when protected input such as
+   * a password is displayed.
+   *
+   * @param echoChar The new echo character.
+   */
+ public void
+ setEchoChar(char echoChar)
+ {
+   setEchoCharacter (echoChar);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the character that is echoed when protected input such as
+   * a password is displayed.
+   *
+   * @param echoChar The new echo character.
+   *
+   * @deprecated This method is deprecated in favor of 
+   * <code>setEchoChar()</code>
+   */
+ public void
+ setEchoCharacter(char echoChar)
+ {
+   this.echoChar = echoChar;
+ 
+   TextFieldPeer peer = (TextFieldPeer) getPeer ();
+   if (peer != null)
+     peer.setEchoChar (echoChar);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not this text field has an echo character set
+   * so that characters the user type are not echoed to the screen.
+   *
+   * @return <code>true</code> if an echo character is set,
+   * <code>false</code> otherwise.
+   */
+ public boolean
+ echoCharIsSet()
+ {
+   if (echoChar == '\u0000')
+     return(false);
+   else
+     return(true);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the minimum size for this text field.
+   *
+   * @return The minimum size for this text field.
+   */
+ public Dimension
+ getMinimumSize()
+ {
+   return getMinimumSize (getColumns ());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the minimum size of a text field with the specified number
+   * of columns.
+   *
+   * @param columns The number of columns to get the minimum size for.
+   */
+ public Dimension
+ getMinimumSize(int columns)
+ {
+   return minimumSize (columns);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the minimum size for this text field.
+   *
+   * @return The minimum size for this text field.
+   *
+   * @deprecated This method is deprecated in favor of
+   * <code>getMinimumSize()</code>.
+   */
+ public Dimension
+ minimumSize()
+ {
+   return minimumSize (getColumns ());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the minimum size of a text field with the specified number
+   * of columns.
+   *
+   * @param columns The number of columns to get the minimum size for.
+   *
+   * @deprecated This method is deprecated in favor of 
+   * <code>getMinimumSize(int)</code>.
+   */
+ public Dimension
+ minimumSize(int columns)
+ {
+   TextFieldPeer peer = (TextFieldPeer) getPeer ();
+   if (peer == null)
+     return null; // FIXME: What do we do if there is no peer?
+ 
+   return peer.getMinimumSize (columns);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the preferred size for this text field.
+   *
+   * @return The preferred size for this text field.
+   */
+ public Dimension
+ getPreferredSize()
+ {
+   return getPreferredSize (getColumns ());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the preferred size of a text field with the specified number
+   * of columns.
+   *
+   * @param columns The number of columns to get the preferred size for.
+   */
+ public Dimension
+ getPreferredSize(int columns)
+ {
+   return preferredSize (columns);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the preferred size for this text field.
+   *
+   * @return The preferred size for this text field.
+   *
+   * @deprecated This method is deprecated in favor of 
+   * <code>getPreferredSize()</code>.
+   */
+ public Dimension
+ preferredSize()
+ {
+   return preferredSize (getColumns ());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the preferred size of a text field with the specified number
+   * of columns.
+   *
+   * @param columns The number of columns to get the preferred size for.
+   *
+   * @deprecated This method is deprecated in favor of 
+   * <code>getPreferredSize(int)</code>.
+   */
+ public Dimension
+ preferredSize(int columns)
+ {
+   TextFieldPeer peer = (TextFieldPeer) getPeer ();
+   if (peer == null)
+     return new Dimension (0, 0);
+ 
+   return peer.getPreferredSize (columns);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Notifies this object that it should create its native peer.
+   */
+ public void
+ addNotify()
+ {
+   if (getPeer() != null)
+     return;
+ 
+   setPeer((ComponentPeer)getToolkit().createTextField(this));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Addes a new listener to the list of action listeners for this
+   * object.
+   *
+   * @param listener The listener to add to the list.
+   */
+ public synchronized void
+ addActionListener(ActionListener listener)
+ {
+   action_listeners = AWTEventMulticaster.add(action_listeners, listener);
+ 
+   enableEvents(AWTEvent.ACTION_EVENT_MASK);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Removes the specified listener from the list of action listeners
+   * for this object.
+   *
+   * @param listener The listener to remove from the list.
+   */
+ public synchronized void
+ removeActionListener(ActionListener listener)
+ {
+   action_listeners = AWTEventMulticaster.remove(action_listeners, listener);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes the specified event.  If the event is an instance of
+   * <code>ActionEvent</code> then <code>processActionEvent()</code> is
+   * called to process it, otherwise the event is sent to the
+   * superclass.
+   *
+   * @param event The event to process.
+   */
+ protected void
+ processEvent(AWTEvent event)
+ {
+   if (event instanceof ActionEvent)
+     processActionEvent((ActionEvent)event);
+   else
+     super.processEvent(event);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Processes an action event by calling any registered listeners.
+   * Note to subclasses: This method is not called unless action events
+   * are enabled on this object.  This will be true if any listeners
+   * are registered, or if action events were specifically enabled
+   * using <code>enableEvents()</code>.
+   * 
+   * @param event The event to process.
+   */
+ protected void
+ processActionEvent(ActionEvent event)
+ {
+   if (action_listeners != null)
+     action_listeners.actionPerformed(event);
+ }
+ 
+ void
+ dispatchEventImpl(AWTEvent e)
+ {
+   if (e.id <= ActionEvent.ACTION_LAST 
+       && e.id >= ActionEvent.ACTION_FIRST
+       && (action_listeners != null 
+ 	  || (eventMask & AWTEvent.ACTION_EVENT_MASK) != 0))
+     processEvent(e);
+   else
+     super.dispatchEventImpl(e);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a debug string for this object.
+   *
+   * @return A debug string for this object.
+   */
+ protected String
+ paramString()
+ {
+   return(getClass().getName() + "(columns=" + getColumns() + ",echoChar=" +
+          getEchoChar());
+ }
+ 
+   /**
+    * Returns an array of all the objects currently registered as FooListeners
+    * upon this <code>TextField</code>. FooListeners are registered using the
+    * addFooListener method.
+    *
+    * @exception ClassCastException If listenerType doesn't specify a class or
+    * interface that implements java.util.EventListener.
+    *
+    * @since 1.3
+    */
+   public EventListener[] getListeners (Class listenerType)
+   {
+     if (listenerType == ActionListener.class)
+       return AWTEventMulticaster.getListeners (action_listeners, listenerType);
+ 
+     return super.getListeners (listenerType);
+   }
+ 
+   /**
+    * Return all ActionListeners register to this <code>TextField</code> object
+    * as an array.
+    *
+    * @since 1.4
+    */
+   public ActionListener[] getActionListeners ()
+   {
+     return (ActionListener[]) getListeners (ActionListener.class);
+   }
+ 
+   protected class AccessibleAWTTextField extends AccessibleAWTTextComponent
+   {
+     private static final long serialVersionUID = 6219164359235943158L;
+ 
+     protected AccessibleAWTTextField()
+     {
+     }
+     
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       return super.getAccessibleStateSet();
+     }
+   }
+   
+   public AccessibleContext getAccessibleContext()
+   {
+     return new AccessibleAWTTextField();
+   }
+ 
+ } // class TextField
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/TexturePaint.java gcc-4.1.0/libjava/classpath/java/awt/TexturePaint.java
*** gcc-4.0.2/libjava/classpath/java/awt/TexturePaint.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/TexturePaint.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* TexturePaint.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ColorModel;
+ 
+ /** STUB CLASS ONLY */
+ public class TexturePaint implements Paint
+ {
+   private final BufferedImage texture;
+   private final Rectangle2D anchor;
+   public TexturePaint(BufferedImage texture, Rectangle2D anchor)
+   {
+     this.texture = texture;
+     this.anchor = anchor;
+   }
+   public BufferedImage getImage()
+   {
+     return texture;
+   }
+   public Rectangle2D getAnchorRect()
+   {
+     return anchor;
+   }
+   public PaintContext createContext(ColorModel cm, Rectangle deviceBounds,
+                                     Rectangle2D userBounds,
+                                     AffineTransform xform,
+                                     RenderingHints hints)
+   {
+     throw new Error("not implemented");
+   }
+   public int getTransparency()
+   {
+     throw new Error("not implemented");
+   }
+ } // class TexturePaint
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Toolkit.java gcc-4.1.0/libjava/classpath/java/awt/Toolkit.java
*** gcc-4.0.2/libjava/classpath/java/awt/Toolkit.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Toolkit.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,1001 ----
+ /* Toolkit.java -- AWT Toolkit superclass
+    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.datatransfer.Clipboard;
+ import java.awt.dnd.DragGestureEvent;
+ import java.awt.dnd.DragGestureListener;
+ import java.awt.dnd.DragGestureRecognizer;
+ import java.awt.dnd.DragSource;
+ import java.awt.dnd.peer.DragSourceContextPeer;
+ import java.awt.event.AWTEventListener;
+ import java.awt.event.KeyEvent;
+ import java.awt.im.InputMethodHighlight;
+ import java.awt.image.ColorModel;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.peer.ButtonPeer;
+ import java.awt.peer.CanvasPeer;
+ import java.awt.peer.CheckboxMenuItemPeer;
+ import java.awt.peer.CheckboxPeer;
+ import java.awt.peer.ChoicePeer;
+ import java.awt.peer.DialogPeer;
+ import java.awt.peer.FileDialogPeer;
+ import java.awt.peer.FontPeer;
+ import java.awt.peer.FramePeer;
+ import java.awt.peer.LabelPeer;
+ import java.awt.peer.LightweightPeer;
+ import java.awt.peer.ListPeer;
+ import java.awt.peer.MenuBarPeer;
+ import java.awt.peer.MenuItemPeer;
+ import java.awt.peer.MenuPeer;
+ import java.awt.peer.PanelPeer;
+ import java.awt.peer.PopupMenuPeer;
+ import java.awt.peer.ScrollPanePeer;
+ import java.awt.peer.ScrollbarPeer;
+ import java.awt.peer.TextAreaPeer;
+ import java.awt.peer.TextFieldPeer;
+ import java.awt.peer.WindowPeer;
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyChangeSupport;
+ import java.net.URL;
+ import java.util.Map;
+ import java.util.Properties;
+ 
+ /**
+  * The AWT system uses a set of native peer objects to implement its
+  * widgets.  These peers are provided by a peer toolkit, that is accessed
+  * via a subclass of this superclass.  The system toolkit is retrieved
+  * by the static methods <code>getDefaultToolkit</code>.  This method
+  * determines the system toolkit by examining the system property
+  * <code>awt.toolkit</code>.  That property is set to the name of the
+  * <code>Toolkit</code> subclass for the specified peer set.  If the
+  * <code>awt.toolkit</code> property is not set, then the default
+  * toolkit <code>gnu.java.awt.peer.gtk.GtkToolkit</code> is used.  This
+  * toolkit creates its peers using the GTK+ toolkit.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public abstract class Toolkit
+ {
+   /** The default toolkit name. */
+   private static String default_toolkit_name
+     = gnu.classpath.Configuration.default_awt_peer_toolkit;
+ 
+   /**
+    * The toolkit in use.  Once we load it, we don't ever change it
+    * if the awt.toolkit property is set.
+    */
+   private static Toolkit toolkit;
+ 
+   /** The toolkit properties. */
+   private static Properties props = new Properties();
+ 
+   protected final Map desktopProperties = new Properties();
+ 
+   protected final PropertyChangeSupport desktopPropsSupport
+     = new PropertyChangeSupport(this);
+ 
+   /**
+    * Default constructor for subclasses.
+    */
+   public Toolkit()
+   {
+   }
+ 
+   /**
+    * Creates a peer object for the specified <code>Button</code>.
+    *
+    * @param target The <code>Button</code> to create the peer for.
+    * 
+    * @return The peer for the specified <code>Button</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract ButtonPeer createButton(Button target);
+ 
+   /**
+    * Creates a peer object for the specified <code>TextField</code>.
+    *
+    * @param target The <code>TextField</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>TextField</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract TextFieldPeer createTextField(TextField target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Label</code>.
+    *
+    * @param target The <code>Label</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Label</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract LabelPeer createLabel(Label target);
+ 
+   /**
+    * Creates a peer object for the specified <code>List</code>.
+    *
+    * @param target The <code>List</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>List</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract ListPeer createList(List target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Checkbox</code>.
+    *
+    * @param target The <code>Checkbox</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Checkbox</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract CheckboxPeer createCheckbox(Checkbox target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Scrollbar</code>.
+    *
+    * @param target The <code>Scrollbar</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Scrollbar</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract ScrollbarPeer createScrollbar(Scrollbar target);
+ 
+   /**
+    * Creates a peer object for the specified <code>ScrollPane</code>.
+    *
+    * @param target The <code>ScrollPane</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>ScrollPane</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract ScrollPanePeer createScrollPane(ScrollPane target);
+ 
+   /**
+    * Creates a peer object for the specified <code>TextArea</code>.
+    *
+    * @param target The <code>TextArea</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>TextArea</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract TextAreaPeer createTextArea(TextArea target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Choice</code>.
+    *
+    * @param target The <code>Choice</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Choice</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract ChoicePeer createChoice(Choice target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Frame</code>.
+    *
+    * @param target The <code>Frame</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Frame</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract FramePeer createFrame(Frame target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Canvas</code>.
+    *
+    * @param target The <code>Canvas</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Canvas</code> object.
+    */
+   protected abstract CanvasPeer createCanvas(Canvas target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Panel</code>.
+    *
+    * @param target The <code>Panel</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Panel</code> object.
+    */
+   protected abstract PanelPeer createPanel(Panel target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Window</code>.
+    *
+    * @param target The <code>Window</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Window</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract WindowPeer createWindow(Window target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Dialog</code>.
+    *
+    * @param target The dialog to create the peer for
+    *
+    * @return The peer for the specified font name.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract DialogPeer createDialog(Dialog target);
+ 
+   /**
+    * Creates a peer object for the specified <code>MenuBar</code>.
+    *
+    * @param target The <code>MenuBar</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>MenuBar</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract MenuBarPeer createMenuBar(MenuBar target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Menu</code>.
+    *
+    * @param target The <code>Menu</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Menu</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract MenuPeer createMenu(Menu target);
+ 
+   /**
+    * Creates a peer object for the specified <code>PopupMenu</code>.
+    *
+    * @param target The <code>PopupMenu</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>PopupMenu</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract PopupMenuPeer createPopupMenu(PopupMenu target);
+ 
+   /**
+    * Creates a peer object for the specified <code>MenuItem</code>.
+    *
+    * @param target The <code>MenuItem</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>MenuItem</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract MenuItemPeer createMenuItem(MenuItem target);
+ 
+   /**
+    * Creates a peer object for the specified <code>FileDialog</code>.
+    *
+    * @param target The <code>FileDialog</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>FileDialog</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract FileDialogPeer createFileDialog(FileDialog target);
+ 
+   /**
+    * Creates a peer object for the specified <code>CheckboxMenuItem</code>.
+    *
+    * @param target The <code>CheckboxMenuItem</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>CheckboxMenuItem</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected abstract CheckboxMenuItemPeer
+     createCheckboxMenuItem(CheckboxMenuItem target);
+ 
+   /**
+    * Creates a peer object for the specified <code>Component</code>.  The
+    * peer returned by this method is not a native windowing system peer
+    * with its own native window.  Instead, this method allows the component
+    * to draw on its parent window as a "lightweight" widget.
+    *
+    * @param target The <code>Component</code> to create the peer for.
+    *
+    * @return The peer for the specified <code>Component</code> object.
+    */
+   protected LightweightPeer createComponent(Component target)
+   {
+     return new gnu.java.awt.peer.GLightweightPeer (target);
+   }
+ 
+   /**
+    * Creates a peer object for the specified font name.
+    *
+    * @param name The font to create the peer for.
+    * @param style The font style to create the peer for.
+    *
+    * @return The peer for the specified font name.
+    *
+    * @deprecated
+    */
+   protected abstract FontPeer getFontPeer(String name, int style);
+ 
+   /**
+    * Copies the current system colors into the specified array.  This is
+    * the interface used by the <code>SystemColor</code> class.  Although
+    * this method fills in the array with some default colors a real Toolkit
+    * should override this method and provide real system colors for the
+    * native GUI platform.
+    *
+    * @param systemColors The array to copy the system colors into.
+    * It must be at least 26 elements.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    *
+    * @see java.awt.SystemColor
+    */
+   protected void loadSystemColors(int systemColors[])
+   {
+     systemColors[SystemColor.DESKTOP]                 = 0xFF005C5C;
+     systemColors[SystemColor.ACTIVE_CAPTION]          = 0xFF000080;
+     systemColors[SystemColor.ACTIVE_CAPTION_TEXT]     = 0xFFFFFFFF;
+     systemColors[SystemColor.ACTIVE_CAPTION_BORDER]   = 0xFFC0C0C0;
+     systemColors[SystemColor.INACTIVE_CAPTION]        = 0xFF808080;
+     systemColors[SystemColor.INACTIVE_CAPTION_TEXT]   = 0xFFC0C0C0;
+     systemColors[SystemColor.INACTIVE_CAPTION_BORDER] = 0xFFC0C0C0;
+     systemColors[SystemColor.WINDOW]                  = 0xFFFFFFFF;
+     systemColors[SystemColor.WINDOW_BORDER]           = 0xFF000000;
+     systemColors[SystemColor.WINDOW_TEXT]             = 0xFF000000;
+     systemColors[SystemColor.MENU]                    = 0xFFC0C0C0;
+     systemColors[SystemColor.MENU_TEXT]               = 0xFF000000;
+     systemColors[SystemColor.TEXT]                    = 0xFFC0C0C0;
+     systemColors[SystemColor.TEXT_TEXT]               = 0xFF000000;
+     systemColors[SystemColor.TEXT_HIGHLIGHT]          = 0xFF000090;
+     systemColors[SystemColor.TEXT_HIGHLIGHT_TEXT]     = 0xFFFFFFFF;
+     systemColors[SystemColor.TEXT_INACTIVE_TEXT]      = 0xFF808080;
+     systemColors[SystemColor.CONTROL]                 = 0xFFC0C0C0;
+     systemColors[SystemColor.CONTROL_TEXT]            = 0xFF000000;
+     systemColors[SystemColor.CONTROL_HIGHLIGHT]       = 0xFFFFFFFF;
+     systemColors[SystemColor.CONTROL_LT_HIGHLIGHT]    = 0xFFE0E0E0;
+     systemColors[SystemColor.CONTROL_SHADOW]          = 0xFF808080;
+     systemColors[SystemColor.CONTROL_DK_SHADOW]       = 0xFF000000;
+     systemColors[SystemColor.SCROLLBAR]               = 0xFFE0E0E0;
+     systemColors[SystemColor.INFO]                    = 0xFFE0E000;
+     systemColors[SystemColor.INFO_TEXT]               = 0xFF000000;
+   }
+ 
+   /**
+    * @since 1.4
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public void setDynamicLayout(boolean dynamic)
+   {
+   }
+ 
+   /**
+    * @since 1.4
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   protected boolean isDynamicLayoutSet()
+   {
+     return false;
+   }
+ 
+   /**
+    * @since 1.4
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public boolean isDynamicLayoutActive()
+   {
+     return false;
+   }
+ 
+   /**
+    * Returns the dimensions of the screen in pixels.
+    *
+    * @return The dimensions of the screen in pixels.
+    * 
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public abstract Dimension getScreenSize();
+ 
+   /**
+    * Returns the screen resolution in dots per square inch.
+    *
+    * @return The screen resolution in dots per square inch.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public abstract int getScreenResolution();
+ 
+   /**
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    *
+    * @since 1.4
+    */
+   public Insets getScreenInsets(GraphicsConfiguration gc)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the color model of the screen.
+    *
+    * @return The color model of the screen.
+    * 
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public abstract ColorModel getColorModel();
+ 
+   /**
+    * Returns the names of the available fonts.
+    *
+    * @return The names of the available fonts.
+    *
+    * @deprecated
+    */
+   public abstract String[] getFontList();
+ 
+   /**
+    * Return the font metrics for the specified font
+    *
+    * @param name The name of the font to return metrics for.
+    *
+    * @return The requested font metrics.
+    *
+    * @deprecated
+    */
+   public abstract FontMetrics getFontMetrics(Font name);
+ 
+   /**
+    * Flushes any buffered data to the screen so that it is in sync with
+    * what the AWT system has drawn to it.
+    */
+   public abstract void sync();
+ 
+   /**
+    * Returns an instance of the default toolkit.  The default toolkit is
+    * the subclass of <code>Toolkit</code> specified in the system property
+    * <code>awt.toolkit</code>, or <code>gnu.java.awt.peer.gtk.GtkToolkit</code>
+    * if the property is not set.
+    *
+    * @return An instance of the system default toolkit.
+    *
+    * @throws AWTError If the toolkit cannot be loaded.
+    */
+   public static Toolkit getDefaultToolkit()
+   {
+     if (toolkit != null)
+       return toolkit;
+     String toolkit_name = System.getProperty("awt.toolkit",
+                                              default_toolkit_name);
+     try
+       {
+         Class cls = Class.forName(toolkit_name);
+         Object obj = cls.newInstance();
+         if (!(obj instanceof Toolkit))
+           throw new AWTError(toolkit_name + " is not a subclass of " +
+                              "java.awt.Toolkit");
+         toolkit = (Toolkit) obj;
+         return toolkit;
+       }
+     catch (ThreadDeath death)
+       {
+         throw death;
+       }
+     catch (Throwable t)
+       {
+ 	AWTError e = new AWTError("Cannot load AWT toolkit: " + toolkit_name);
+ 	throw (AWTError) e.initCause(t);
+       }
+   }
+ 
+   /**
+    * Returns an image from the specified file, which must be in a
+    * recognized format.  Supported formats vary from toolkit to toolkit.
+    *
+    * @return name The name of the file to read the image from.
+    */
+   public abstract Image getImage(String name);
+ 
+   /**
+    * Returns an image from the specified URL, which must be in a
+    * recognized format.  Supported formats vary from toolkit to toolkit.
+    *
+    * @return url The URl to read the image from.
+    */
+   public abstract Image getImage(URL url);
+ 
+   public abstract Image createImage(String filename);
+ 
+   public abstract Image createImage(URL url);
+ 
+   /**
+    * Readies an image to be rendered on the screen.  The width and height
+    * values can be set to the default sizes for the image by passing -1
+    * in those parameters.
+    *
+    * @param image The image to prepare for rendering.
+    * @param width The width of the image.
+    * @param height The height of the image.
+    * @param observer The observer to receive events about the preparation
+    * process.
+    *
+    * @return <code>true</code> if the image is already prepared for rendering,
+    * <code>false</code> otherwise.
+    */
+   public abstract boolean prepareImage(Image image, int width, int height,
+                                        ImageObserver observer);
+ 
+   /**
+    * Checks the status of specified image as it is being readied for
+    * rendering.
+    *
+    * @param image The image to prepare for rendering.
+    * @param width The width of the image.
+    * @param height The height of the image.
+    * @param observer The observer to receive events about the preparation
+    * process.
+    *
+    * @return A union of the bitmasks from
+    * <code>java.awt.image.ImageObserver</code> that indicates the current
+    * state of the imaging readying process.
+    */
+   public abstract int checkImage(Image image, int width, int height,
+                                  ImageObserver observer);
+ 
+   /**
+    * Creates an image using the specified <code>ImageProducer</code>
+    *
+    * @param producer The <code>ImageProducer</code> to create the image from.
+    *
+    * @return The created image.
+    */
+   public abstract Image createImage(ImageProducer producer);
+ 
+   /**
+    * Creates an image from the specified byte array. The array must be in
+    * a recognized format.  Supported formats vary from toolkit to toolkit.
+    *
+    * @param data The raw image data.
+    *
+    * @return The created image.
+    */
+   public Image createImage(byte[] data)
+   {
+     return createImage(data, 0, data.length);
+   }
+ 
+   /**
+    * Creates an image from the specified portion of the byte array passed.
+    * The array must be in a recognized format.  Supported formats vary from
+    * toolkit to toolkit.
+    *
+    * @param data The raw image data.
+    * @param offset The offset into the data where the image data starts.
+    * @param len The length of the image data.
+    *
+    * @return The created image.
+    */
+   public abstract Image createImage(byte[] data, int offset, int len);
+ 
+   /**
+    * Returns a instance of <code>PrintJob</code> for the specified
+    * arguments.
+    *
+    * @param frame The window initiating the print job.
+    * @param title The print job title.
+    * @param props The print job properties.
+    *
+    * @return The requested print job, or <code>null</code> if the job
+    * was cancelled.
+    *
+    * @exception NullPointerException If frame is null,
+    * or GraphicsEnvironment.isHeadless() returns true.
+    * @exception SecurityException If this thread is not allowed to initiate
+    * a print job request.
+    */
+   public abstract PrintJob getPrintJob(Frame frame, String title,
+                                        Properties props);
+ 
+   /**
+    * Returns a instance of <code>PrintJob</code> for the specified
+    * arguments.
+    *
+    * @param frame The window initiating the print job.
+    * @param title The print job title.
+    * @param jobAttr A set of job attributes which will control the print job.
+    * @param pageAttr A set of page attributes which will control the print job.
+    *
+    * @exception NullPointerException If frame is null, and either jobAttr is null
+    * or jobAttr.getDialog() returns JobAttributes.DialogType.NATIVE.
+    * @exception IllegalArgumentException If pageAttrspecifies differing cross
+    * feed and feed resolutions, or when GraphicsEnvironment.isHeadless() returns
+    * true.
+    * @exception SecurityException If this thread is not allowed to initiate
+    * a print job request.
+    *
+    * @since 1.3
+    */
+   public PrintJob getPrintJob(Frame frame, String title,
+                               JobAttributes jobAttr, PageAttributes pageAttr)
+   {
+     return null;
+   }
+ 
+   /**
+    * Causes a "beep" tone to be generated.
+    */
+   public abstract void beep();
+ 
+   /**
+    * Returns the system clipboard.
+    *
+    * @return THe system clipboard.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public abstract Clipboard getSystemClipboard();
+ 
+   /**
+    * Gets the singleton instance of the system selection as a Clipboard object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    *
+    * @since 1.4
+    */
+   public Clipboard getSystemSelection()
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the accelerator key mask for menu shortcuts. The default is
+    * <code>Event.CTRL_MASK</code>.  A toolkit must override this method
+    * to change the default.
+    *
+    * @return The key mask for the menu accelerator key.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public int getMenuShortcutKeyMask()
+   {
+     return Event.CTRL_MASK;
+   }
+ 
+   /**
+    * Returns whether the given locking key on the keyboard is currently in its
+    * "on" state.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    * @exception IllegalArgumentException If keyCode is not one of the valid keys.
+    * @exception UnsupportedOperationException If the host system doesn't allow
+    * getting the state of this key programmatically, or if the keyboard doesn't
+    * have this key.
+    */
+   public boolean getLockingKeyState(int keyCode)
+   {
+     if (keyCode != KeyEvent.VK_CAPS_LOCK
+         && keyCode != KeyEvent.VK_NUM_LOCK
+         && keyCode != KeyEvent.VK_SCROLL_LOCK)
+       throw new IllegalArgumentException();
+     
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Sets the state of the given locking key on the keyboard.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    * @exception IllegalArgumentException If keyCode is not one of the valid keys.
+    * @exception UnsupportedOperationException If the host system doesn't allow
+    * getting the state of this key programmatically, or if the keyboard doesn't
+    * have this key.
+    */
+   public void setLockingKeyState(int keyCode, boolean on)
+   {
+     if (keyCode != KeyEvent.VK_CAPS_LOCK
+         && keyCode != KeyEvent.VK_NUM_LOCK
+         && keyCode != KeyEvent.VK_SCROLL_LOCK)
+       throw new IllegalArgumentException();
+     
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Returns the native container object of the specified component.  This
+    * method is necessary because the parent component might be a lightweight
+    * component.
+    *
+    * @param component The component to fetch the native container for.
+    *
+    * @return The native container object for this component.
+    */
+   protected static Container getNativeContainer(Component component)
+   {
+     component = component.getParent();
+     while (true)
+       {
+         if (component == null)
+           return null;
+         if (! (component instanceof Container))
+           {
+             component = component.getParent();
+             continue;
+           }
+         if (component.getPeer() instanceof LightweightPeer)
+           {
+             component = component.getParent();
+             continue;
+           }
+         return (Container) component;
+       }
+   }
+ 
+   /**
+    * Creates a new custom cursor object.
+    *
+    * @exception IndexOutOfBoundsException If the hotSpot values are outside
+    * the bounds of the cursor.
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
+   {
+     // Presumably the only reason this isn't abstract is for backwards
+     // compatibility? FIXME?
+     if (GraphicsEnvironment.isHeadless())
+       throw new HeadlessException("No custom cursor in an headless graphics "
+                                   + "environment.");
+     return null;
+   }
+ 
+   /**
+    * Returns the supported cursor dimension which is closest to the
+    * desired sizes.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public Dimension getBestCursorSize(int preferredWidth, int preferredHeight)
+   {
+     if (GraphicsEnvironment.isHeadless())
+       throw new HeadlessException("No best cursor size in an headless "
+                                   + "graphics environment.");
+     return new Dimension (0,0);
+   }
+ 
+   /**
+    * Returns the maximum number of colors the Toolkit supports in a custom
+    * cursor palette.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public int getMaximumCursorColors()
+   {
+     return 0;
+   }
+ 
+   /**
+    * Returns whether Toolkit supports this state for Frames.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    * 
+    * @since 1.4
+    */
+   public boolean isFrameStateSupported(int state)
+   {
+     return false;
+   }
+ 
+   /**
+    * Returns the value of the property with the specified name, or the
+    * default value if the property does not exist.
+    *
+    * @param key The name of the property to retrieve.
+    * @param def The default value of the property.
+    */
+   public static String getProperty(String key, String def)
+   {
+     return props.getProperty(key, def);
+   }
+ 
+ 
+   /**
+    * Returns the event queue that is suitable for the calling context.
+    *
+    * <p>Despite the word &#x201c;System&#x201d; in the name of this
+    * method, a toolkit may provide different event queues for each
+    * applet. There is no guarantee that the same queue is shared
+    * system-wide.
+    *
+    * <p>The implementation first checks whether a
+    * SecurityManager has been installed. If so, its {@link
+    * java.lang.SecurityManager#checkAwtEventQueueAccess()} method gets
+    * called. The security manager will throw a SecurityException if it
+    * does not grant the permission to access the event queue.
+    *
+    * <p>Next, the call is delegated to {@link
+    * #getSystemEventQueueImpl()}.
+    *
+    * @return The event queue for this applet (or application).
+    *
+    * @throws SecurityException if a security manager has been
+    * installed, and it does not grant the permission to access the
+    * event queue.
+    */
+   public final EventQueue getSystemEventQueue()
+   {
+     SecurityManager sm;
+ 
+     sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkAwtEventQueueAccess();
+ 
+     return getSystemEventQueueImpl();
+   }
+ 
+ 
+   /**
+    * Returns the event queue that is suitable for the calling context.
+    *
+    * <p>Despite the word &#x201c;System&#x201d; in the name of this
+    * method, a toolkit may provide different event queues for each
+    * applet. There is no guarantee that the same queue is shared
+    * system-wide.
+    *
+    * <p>No security checks are performed, which is why this method
+    * may only be called by Toolkits.
+    *
+    * @see #getSystemEventQueue()
+    */
+   protected abstract EventQueue getSystemEventQueueImpl();
+ 
+ 
+   /**
+    * @since 1.3
+    */
+   public abstract DragSourceContextPeer
+     createDragSourceContextPeer(DragGestureEvent e);
+ 
+   /**
+    * @since 1.3
+    */
+   public DragGestureRecognizer
+     createDragGestureRecognizer(Class recognizer, DragSource ds,
+                                 Component comp, int actions,
+                                 DragGestureListener l)
+   {
+     return null;
+   }
+ 
+   public final Object getDesktopProperty(String propertyName)
+   {
+     return desktopProperties.get(propertyName);
+   }
+ 
+   protected final void setDesktopProperty(String name, Object newValue)
+   {
+     Object oldValue = getDesktopProperty(name);
+     desktopProperties.put(name, newValue);
+     desktopPropsSupport.firePropertyChange(name, oldValue, newValue);
+   }
+ 
+   protected Object lazilyLoadDesktopProperty(String name)
+   {
+     // FIXME - what is this??
+     return null;
+   }
+ 
+   protected void initializeDesktopProperties()
+   {
+     // Overridden by toolkit implementation?
+   }
+ 
+   public void addPropertyChangeListener(String name,
+                                         PropertyChangeListener pcl)
+   {
+     desktopPropsSupport.addPropertyChangeListener(name, pcl);
+   }
+ 
+   public void removePropertyChangeListener(String name,
+                                            PropertyChangeListener pcl)
+   {
+     desktopPropsSupport.removePropertyChangeListener(name, pcl);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public PropertyChangeListener[] getPropertyChangeListeners()
+   {
+     return desktopPropsSupport.getPropertyChangeListeners();
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public PropertyChangeListener[] getPropertyChangeListeners(String name)
+   {
+     return desktopPropsSupport.getPropertyChangeListeners(name);
+   }
+ 
+   public void addAWTEventListener(AWTEventListener listener, long eventMask)
+   {
+     // SecurityManager s = System.getSecurityManager();
+     // if (s != null)
+     //  s.checkPermission(AWTPermission("listenToAllAWTEvents"));
+     // FIXME
+   }
+ 
+   public void removeAWTEventListener(AWTEventListener listener)
+   {
+     // FIXME
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public AWTEventListener[] getAWTEventListeners()
+   {
+     return null;
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public AWTEventListener[] getAWTEventListeners(long mask)
+   {
+     return null;
+   }
+ 
+   /**
+    * @since 1.3
+    */
+   public abstract Map mapInputMethodHighlight(InputMethodHighlight highlight);
+ } // class Toolkit
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Transparency.java gcc-4.1.0/libjava/classpath/java/awt/Transparency.java
*** gcc-4.0.2/libjava/classpath/java/awt/Transparency.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Transparency.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* Transparency.java -- common transparency modes in graphics
+    Copyright (C) 2000, 2002, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt;
+ 
+ /**
+  * A common transparency mode for layering graphics.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface Transparency
+ {
+   /** Image data which is completely opaque, for an alpha value of 1.0. */
+   int OPAQUE = 1;
+ 
+   /**
+    * Image data which is either completely opaque or transparent, for an
+    * exact integer alpha value.
+    */
+   int BITMASK = 2;
+ 
+   /** Image data which is translucent, for a non-integer alpha value. */
+   int TRANSLUCENT = 3;
+ 
+   /**
+    * Return the transparency type.
+    *
+    * @return One of {@link #OPAQUE}, {@link #BITMASK}, or {@link #TRANSLUCENT}.
+    */
+   int getTransparency();
+ } // interface Transparency
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/Window.java gcc-4.1.0/libjava/classpath/java/awt/Window.java
*** gcc-4.0.2/libjava/classpath/java/awt/Window.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/Window.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1158 ----
+ /* Window.java --
+    Copyright (C) 1999, 2000, 2002, 2003, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt;
+ 
+ import java.awt.event.ComponentEvent;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.WindowAdapter;
+ import java.awt.event.WindowEvent;
+ import java.awt.event.WindowFocusListener;
+ import java.awt.event.WindowListener;
+ import java.awt.event.WindowStateListener;
+ import java.awt.image.BufferStrategy;
+ import java.awt.peer.WindowPeer;
+ import java.lang.ref.Reference;
+ import java.lang.ref.WeakReference;
+ import java.util.EventListener;
+ import java.util.Iterator;
+ import java.util.Locale;
+ import java.util.ResourceBundle;
+ import java.util.Vector;
+ 
+ import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleState;
+ import javax.accessibility.AccessibleStateSet;
+ 
+ /**
+  * This class represents a top-level window with no decorations.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy  (warrenl@cygnus.com)
+  */
+ public class Window extends Container implements Accessible
+ {
+   private static final long serialVersionUID = 4497834738069338734L;
+ 
+   // Serialized fields, from Sun's serialization spec.
+   private String warningString = null;
+   private int windowSerializedDataVersion = 0; // FIXME
+   /** @since 1.2 */
+   // private FocusManager focusMgr;  // FIXME: what is this?  
+   /** @since 1.2 */
+   private int state = 0;
+   /** @since 1.4 */
+   private boolean focusableWindowState = true;
+ 
+   // A list of other top-level windows owned by this window.
+   private transient Vector ownedWindows = new Vector();
+ 
+   private transient WindowListener windowListener;
+   private transient WindowFocusListener windowFocusListener;
+   private transient WindowStateListener windowStateListener;
+   private transient GraphicsConfiguration graphicsConfiguration;
+ 
+   private transient boolean shown;
+ 
+   // This is package-private to avoid an accessor method.
+   transient Component windowFocusOwner;
+   
+   /*
+    * The number used to generate the name returned by getName.
+    */
+   private static transient long next_window_number;
+ 
+   protected class AccessibleAWTWindow extends AccessibleAWTContainer
+   {
+     private static final long serialVersionUID = 4215068635060671780L;
+ 
+     public AccessibleRole getAccessibleRole()
+     {
+       return AccessibleRole.WINDOW;
+     }
+     
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       AccessibleStateSet states = super.getAccessibleStateSet();
+       if (isActive())
+         states.add(AccessibleState.ACTIVE);
+       return states;
+     }
+   }
+ 
+   /** 
+    * This (package access) constructor is used by subclasses that want
+    * to build windows that do not have parents.  Eg. toplevel
+    * application frames.  Subclasses cannot call super(null), since
+    * null is an illegal argument.
+    */
+   Window()
+   {
+     visible = false;
+     // Windows are the only Containers that default to being focus
+     // cycle roots.
+     focusCycleRoot = true;
+     setLayout(new BorderLayout());
+ 
+     addWindowFocusListener (new WindowAdapter ()
+       {
+         public void windowGainedFocus (WindowEvent event)
+         {
+           if (windowFocusOwner != null)
+             {
+               // FIXME: move this section and the other similar
+               // sections in Component into a separate method.
+               EventQueue eq = Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+               synchronized (eq)
+                 {
+                   KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+                   Component currentFocusOwner = manager.getGlobalPermanentFocusOwner ();
+                   if (currentFocusOwner != null)
+                     {
+                       eq.postEvent (new FocusEvent (currentFocusOwner, FocusEvent.FOCUS_LOST,
+                                                     false, windowFocusOwner));
+                       eq.postEvent (new FocusEvent (windowFocusOwner, FocusEvent.FOCUS_GAINED,
+                                                     false, currentFocusOwner));
+                     }
+                   else
+                     eq.postEvent (new FocusEvent (windowFocusOwner, FocusEvent.FOCUS_GAINED, false));
+                 }
+             }
+         }
+       });
+     
+     GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment();
+     graphicsConfiguration = g.getDefaultScreenDevice().getDefaultConfiguration();
+   }
+ 
+   Window(GraphicsConfiguration gc)
+   {
+     this();
+     graphicsConfiguration = gc;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Window</code> with the specified
+    * parent.  The window will initially be invisible.
+    *
+    * @param owner The owning <code>Frame</code> of this window.
+    *
+    * @exception IllegalArgumentException If the owner's GraphicsConfiguration
+    * is not from a screen device, or if owner is null; this exception is always
+    * thrown when GraphicsEnvironment.isHeadless returns true.
+    */
+   public Window(Frame owner)
+   {
+     this (owner, owner.getGraphicsConfiguration ());
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Window</code> with the specified
+    * parent.  The window will initially be invisible.   
+    *
+    * @exception IllegalArgumentException If the owner's GraphicsConfiguration
+    * is not from a screen device, or if owner is null; this exception is always
+    * thrown when GraphicsEnvironment.isHeadless returns true.
+    *
+    * @since 1.2
+    */
+   public Window(Window owner)
+   {
+     this (owner, owner.getGraphicsConfiguration ());
+   }
+   
+   /**
+    * Initializes a new instance of <code>Window</code> with the specified
+    * parent.  The window will initially be invisible.   
+    *
+    * @exception IllegalArgumentException If owner is null or if gc is not from a
+    * screen device; this exception is always thrown when
+    * GraphicsEnvironment.isHeadless returns true.
+    *
+    * @since 1.3
+    */
+   public Window(Window owner, GraphicsConfiguration gc)
+   {
+     this ();
+ 
+     synchronized (getTreeLock())
+       {
+ 	if (owner == null)
+ 	  throw new IllegalArgumentException ("owner must not be null");
+ 
+ 	parent = owner;
+         owner.ownedWindows.add(new WeakReference(this));
+       }
+ 
+     // FIXME: make this text visible in the window.
+     SecurityManager s = System.getSecurityManager();
+     if (s != null && ! s.checkTopLevelWindow(this))
+       warningString = System.getProperty("awt.appletWarning");
+ 
+     if (gc != null
+         && gc.getDevice().getType() != GraphicsDevice.TYPE_RASTER_SCREEN)
+       throw new IllegalArgumentException ("gc must be from a screen device");
+ 
+     if (gc == null)
+       graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment()
+                                                  .getDefaultScreenDevice()
+                                                  .getDefaultConfiguration();
+     else
+       graphicsConfiguration = gc;
+   }
+ 
+   GraphicsConfiguration getGraphicsConfigurationImpl()
+   {
+     if (graphicsConfiguration != null)
+ 	return graphicsConfiguration;
+ 
+     return super.getGraphicsConfigurationImpl();
+   }
+ 
+   /**
+    * Creates the native peer for this window.
+    */
+   public void addNotify()
+   {
+     if (peer == null)
+       peer = getToolkit().createWindow(this);
+     super.addNotify();
+   }
+ 
+   /**
+    * Relays out this window's child components at their preferred size.
+    *
+    * @specnote pack() doesn't appear to be called internally by show(), so
+    *             we duplicate some of the functionality.
+    */
+   public void pack()
+   {
+     if (parent != null && !parent.isDisplayable())
+       parent.addNotify();
+     if (peer == null)
+       addNotify();
+ 
+     setSize(getPreferredSize());
+ 
+     validate();
+   }
+ 
+   /**
+    * Shows on-screen this window and any of its owned windows for whom
+    * isVisible returns true.
+    */
+   public void show()
+   {
+     synchronized (getTreeLock())
+     {
+     if (parent != null && !parent.isDisplayable())
+       parent.addNotify();
+     if (peer == null)
+       addNotify();
+ 
+     // Show visible owned windows.
+ 	Iterator e = ownedWindows.iterator();
+ 	while(e.hasNext())
+ 	  {
+ 	    Window w = (Window)(((Reference) e.next()).get());
+ 	    if (w != null)
+ 	      {
+ 		if (w.isVisible())
+ 		  w.getPeer().setVisible(true);
+ 	      }
+      	    else
+ 	      // Remove null weak reference from ownedWindows.
+ 	      // Unfortunately this can't be done in the Window's
+ 	      // finalize method because there is no way to guarantee
+ 	      // synchronous access to ownedWindows there.
+ 	      e.remove();
+ 	  }
+     validate();
+     super.show();
+     toFront();
+ 
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+     manager.setGlobalFocusedWindow (this);
+     
+     if (!shown)
+       {
+         FocusTraversalPolicy policy = getFocusTraversalPolicy ();
+         Component initialFocusOwner = null;
+ 
+         if (policy != null)
+           initialFocusOwner = policy.getInitialComponent (this);
+ 
+         if (initialFocusOwner != null)
+           initialFocusOwner.requestFocusInWindow ();
+ 
+         shown = true;
+       }
+     }
+   }
+ 
+   public void hide()
+   {
+     // Hide visible owned windows.
+     synchronized (getTreeLock ())
+       {
+ 	Iterator e = ownedWindows.iterator();
+ 	while(e.hasNext())
+ 	  {
+ 	    Window w = (Window)(((Reference) e.next()).get());
+ 	    if (w != null)
+ 	      {
+ 		if (w.isVisible() && w.getPeer() != null)
+ 		  w.getPeer().setVisible(false);
+ 	      }
+      	    else
+ 	      e.remove();
+ 	  }
+       }
+     super.hide();
+   }
+ 
+   /**
+    * Destroys any resources associated with this window.  This includes
+    * all components in the window and all owned top-level windows.
+    */
+   public void dispose()
+   {
+     hide();
+ 
+     synchronized (getTreeLock ())
+       {
+ 	Iterator e = ownedWindows.iterator();
+ 	while(e.hasNext())
+ 	  {
+ 	    Window w = (Window)(((Reference) e.next()).get());
+ 	    if (w != null)
+ 	      w.dispose();
+ 	    else
+ 	      // Remove null weak reference from ownedWindows.
+ 	      e.remove();
+ 	  }
+ 
+ 	for (int i = 0; i < ncomponents; ++i)
+ 	  component[i].removeNotify();
+ 	this.removeNotify();
+ 
+         // Post a WINDOW_CLOSED event.
+         WindowEvent we = new WindowEvent(this, WindowEvent.WINDOW_CLOSED);
+         getToolkit().getSystemEventQueue().postEvent(we);
+       }
+   }
+ 
+   /**
+    * Sends this window to the back so that all other windows display in
+    * front of it.
+    */
+   public void toBack()
+   {
+     if (peer != null)
+       {
+ 	WindowPeer wp = (WindowPeer) peer;
+ 	wp.toBack();
+       }
+   }
+ 
+   /**
+    * Brings this window to the front so that it displays in front of
+    * any other windows.
+    */
+   public void toFront()
+   {
+     if (peer != null)
+       {
+         WindowPeer wp = (WindowPeer) peer;
+         wp.toFront();
+       }
+   }
+ 
+   /**
+    * Returns the toolkit used to create this window.
+    *
+    * @return The toolkit used to create this window.
+    *
+    * @specnote Unlike Component.getToolkit, this implementation always 
+    *           returns the value of Toolkit.getDefaultToolkit().
+    */
+   public Toolkit getToolkit()
+   {
+     return Toolkit.getDefaultToolkit();    
+   }
+ 
+   /**
+    * Returns the warning string that will be displayed if this window is
+    * popped up by an unsecure applet or application.
+    *
+    * @return The unsecure window warning message.
+    */
+   public final String getWarningString()
+   {
+     return warningString;
+   }
+ 
+   /**
+    * Returns the locale that this window is configured for.
+    *
+    * @return The locale this window is configured for.
+    */
+   public Locale getLocale()
+   {
+     return locale == null ? Locale.getDefault() : locale;
+   }
+ 
+   /*
+   /** @since 1.2
+   public InputContext getInputContext()
+   {
+     // FIXME
+   }
+   */
+ 
+   /**
+    * Sets the cursor for this window to the specifiec cursor.
+    *
+    * @param cursor The new cursor for this window.
+    */
+   public void setCursor(Cursor cursor)
+   {
+     super.setCursor(cursor);
+   }
+ 
+   public Window getOwner()
+   {
+     return (Window) parent;
+   }
+ 
+   /** @since 1.2 */
+   public Window[] getOwnedWindows()
+   {
+     Window [] trimmedList;
+     synchronized (getTreeLock ())
+       {
+ 	// Windows with non-null weak references in ownedWindows.
+ 	Window [] validList = new Window [ownedWindows.size()];
+ 
+ 	Iterator e = ownedWindows.iterator();
+ 	int numValid = 0;
+ 	while (e.hasNext())
+ 	  {
+ 	    Window w = (Window)(((Reference) e.next()).get());
+ 	    if (w != null)
+ 	      validList[numValid++] = w;
+ 	    else
+ 	      // Remove null weak reference from ownedWindows.
+ 	      e.remove();
+ 	  }
+ 
+ 	if (numValid != validList.length)
+ 	  {
+ 	    trimmedList = new Window [numValid];
+ 	    System.arraycopy (validList, 0, trimmedList, 0, numValid);
+ 	  }
+ 	else
+ 	  trimmedList = validList;
+       }
+     return trimmedList;
+   }
+ 
+   /**
+    * Adds the specified listener to the list of <code>WindowListeners</code>
+    * that will receive events for this window.
+    *
+    * @param listener The <code>WindowListener</code> to add.
+    */
+   public synchronized void addWindowListener(WindowListener listener)
+   {
+     windowListener = AWTEventMulticaster.add(windowListener, listener);
+   }
+ 
+   /**
+    * Removes the specified listener from the list of
+    * <code>WindowListeners</code> that will receive events for this window.
+    *
+    * @param listener The <code>WindowListener</code> to remove.
+    */
+   public synchronized void removeWindowListener(WindowListener listener)
+   {
+     windowListener = AWTEventMulticaster.remove(windowListener, listener);
+   }
+ 
+   /**
+    * Returns an array of all the window listeners registered on this window.
+    *
+    * @since 1.4
+    */
+   public synchronized WindowListener[] getWindowListeners()
+   {
+     return (WindowListener[])
+       AWTEventMulticaster.getListeners(windowListener,
+                                        WindowListener.class);
+   }
+ 
+   /**
+    * Returns an array of all the window focus listeners registered on this
+    * window.
+    *
+    * @since 1.4
+    */
+   public synchronized WindowFocusListener[] getWindowFocusListeners()
+   {
+     return (WindowFocusListener[])
+       AWTEventMulticaster.getListeners(windowFocusListener,
+                                        WindowFocusListener.class);
+   }
+   
+   /**
+    * Returns an array of all the window state listeners registered on this
+    * window.
+    *
+    * @since 1.4
+    */
+   public synchronized WindowStateListener[] getWindowStateListeners()
+   {
+     return (WindowStateListener[])
+       AWTEventMulticaster.getListeners(windowStateListener,
+                                        WindowStateListener.class);
+   }
+ 
+   /**
+    * Adds the specified listener to this window.
+    */
+   public void addWindowFocusListener (WindowFocusListener wfl)
+   {
+     windowFocusListener = AWTEventMulticaster.add (windowFocusListener, wfl);
+   }
+   
+   /**
+    * Adds the specified listener to this window.
+    *
+    * @since 1.4
+    */
+   public void addWindowStateListener (WindowStateListener wsl)
+   {
+     windowStateListener = AWTEventMulticaster.add (windowStateListener, wsl);  
+   }
+   
+   /**
+    * Removes the specified listener from this window.
+    */
+   public void removeWindowFocusListener (WindowFocusListener wfl)
+   {
+     windowFocusListener = AWTEventMulticaster.remove (windowFocusListener, wfl);
+   }
+   
+   /**
+    * Removes the specified listener from this window.
+    *
+    * @since 1.4
+    */
+   public void removeWindowStateListener (WindowStateListener wsl)
+   {
+     windowStateListener = AWTEventMulticaster.remove (windowStateListener, wsl);
+   }
+ 
+   /**
+    * Returns an array of all the objects currently registered as FooListeners
+    * upon this Window. FooListeners are registered using the addFooListener
+    * method.
+    *
+    * @exception ClassCastException If listenerType doesn't specify a class or
+    * interface that implements java.util.EventListener.
+    *
+    * @since 1.3
+    */
+   public EventListener[] getListeners(Class listenerType)
+   {
+     if (listenerType == WindowListener.class)
+       return getWindowListeners();
+     return super.getListeners(listenerType);
+   }
+ 
+   void dispatchEventImpl(AWTEvent e)
+   {
+     // Make use of event id's in order to avoid multiple instanceof tests.
+     if (e.id <= WindowEvent.WINDOW_LAST 
+         && e.id >= WindowEvent.WINDOW_FIRST
+         && (windowListener != null
+ 	    || windowFocusListener != null
+ 	    || windowStateListener != null
+ 	    || (eventMask & AWTEvent.WINDOW_EVENT_MASK) != 0))
+       processEvent(e);
+     else if (e.id == ComponentEvent.COMPONENT_RESIZED)
+       validate ();
+     else
+       super.dispatchEventImpl(e);
+   }
+ 
+   /**
+    * Processes the specified event for this window.  If the event is an
+    * instance of <code>WindowEvent</code>, then
+    * <code>processWindowEvent()</code> is called to process the event,
+    * otherwise the superclass version of this method is invoked.
+    *
+    * @param evt The event to process.
+    */
+   protected void processEvent(AWTEvent evt)
+   {
+     if (evt instanceof WindowEvent)
+       processWindowEvent((WindowEvent) evt);
+     else
+       super.processEvent(evt);
+   }
+ 
+   /**
+    * Dispatches this event to any listeners that are listening for
+    * <code>WindowEvents</code> on this window.  This method only gets
+    * invoked if it is enabled via <code>enableEvents()</code> or if
+    * a listener has been added.
+    *
+    * @param evt The event to process.
+    */
+   protected void processWindowEvent(WindowEvent evt)
+   {
+     int id = evt.getID();
+ 
+     if (id == WindowEvent.WINDOW_GAINED_FOCUS
+ 	|| id == WindowEvent.WINDOW_LOST_FOCUS)
+       processWindowFocusEvent (evt);
+     else if (id == WindowEvent.WINDOW_STATE_CHANGED)
+       processWindowStateEvent (evt);
+     else
+       {
+ 	if (windowListener != null)
+ 	  {
+ 	    switch (evt.getID())
+ 	      {
+ 	      case WindowEvent.WINDOW_ACTIVATED:
+ 		windowListener.windowActivated(evt);
+ 		break;
+ 
+ 	      case WindowEvent.WINDOW_CLOSED:
+ 		windowListener.windowClosed(evt);
+ 		break;
+ 
+ 	      case WindowEvent.WINDOW_CLOSING:
+ 		windowListener.windowClosing(evt);
+ 		break;
+ 
+ 	      case WindowEvent.WINDOW_DEACTIVATED:
+ 		windowListener.windowDeactivated(evt);
+ 		break;
+ 
+ 	      case WindowEvent.WINDOW_DEICONIFIED:
+ 		windowListener.windowDeiconified(evt);
+ 		break;
+ 
+ 	      case WindowEvent.WINDOW_ICONIFIED:
+ 		windowListener.windowIconified(evt);
+ 		break;
+ 
+ 	      case WindowEvent.WINDOW_OPENED:
+ 		windowListener.windowOpened(evt);
+ 		break;
+ 
+ 	      default:
+ 		break;
+ 	      }
+ 	  }
+       }
+   }
+   
+   /**
+    * Identifies if this window is active.  The active window is a Frame or
+    * Dialog that has focus or owns the active window.
+    *  
+    * @return true if active, else false.
+    * @since 1.4
+    */
+   public boolean isActive()
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+     return manager.getActiveWindow() == this;
+   }
+ 
+   /**
+    * Identifies if this window is focused.  A window is focused if it is the
+    * focus owner or it contains the focus owner.
+    * 
+    * @return true if focused, else false.
+    * @since 1.4
+    */
+   public boolean isFocused()
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+     return manager.getFocusedWindow() == this;
+   }
+   
+   /**
+    * Returns the child window that has focus if this window is active.
+    * This method returns <code>null</code> if this window is not active
+    * or no children have focus.
+    *
+    * @return The component that has focus, or <code>null</code> if no
+    * component has focus.
+    */
+   public Component getFocusOwner ()
+   {
+     KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ 
+     Window activeWindow = manager.getActiveWindow ();
+ 
+     // The currently-focused Component belongs to the active Window.
+     if (activeWindow == this)
+       return manager.getFocusOwner ();
+     else
+       return null;
+   }
+ 
+   /**
+    * Returns the child component of this window that would receive
+    * focus if this window were to become focused.  If the window
+    * already has the top-level focus, then this method returns the
+    * same component as getFocusOwner.  If no child component has
+    * requested focus within the window, then the initial focus owner
+    * is returned.  If this is a non-focusable window, this method
+    * returns null.
+    *
+    * @return the child component of this window that most recently had
+    * the focus, or <code>null</code>
+    * @since 1.4
+    */
+   public Component getMostRecentFocusOwner ()
+   {
+     return windowFocusOwner;
+   }
+ 
+   /**
+    * Set the focus owner for this window.  This method is used to
+    * remember which component was focused when this window lost
+    * top-level focus, so that when it regains top-level focus the same
+    * child component can be refocused.
+    *
+    * @param windowFocusOwner the component in this window that owns
+    * the focus.
+    */
+   void setFocusOwner (Component windowFocusOwner)
+   {
+     this.windowFocusOwner = windowFocusOwner;
+   }
+ 
+   /**
+    * Post a Java 1.0 event to the event queue.
+    *
+    * @param e The event to post.
+    *
+    * @deprecated
+    */
+   public boolean postEvent(Event e)
+   {
+     return handleEvent (e);
+   }
+ 
+   /**
+    * Tests whether or not this window is visible on the screen.
+    *
+    * In contrast to the normal behaviour of Container, which is that
+    * a container is showing if its parent is visible and showing, a Window
+    * is even showing, if its parent (i.e. an invisible Frame) is not showing.
+    *
+    * @return <code>true</code> if this window is visible, <code>false</code>
+    * otherwise.
+    */
+   public boolean isShowing()
+   {
+     return isVisible();
+   }
+ 
+   public void setLocationRelativeTo(Component c)
+   {
+     int x = 0;
+     int y = 0;
+     
+     if (c == null || !c.isShowing())
+       {
+         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+         Point center = ge.getCenterPoint();
+         x = center.x - (width / 2);
+         y = center.y - (height / 2);
+       }
+     else
+       {
+         int cWidth = c.getWidth();
+         int cHeight = c.getHeight();
+         Dimension screenSize = getToolkit().getScreenSize();
+ 
+         x = c.getLocationOnScreen().x;
+         y = c.getLocationOnScreen().y;
+         
+         // If bottom of component is cut off, window placed
+         // on the left or the right side of component
+         if ((y + cHeight) > screenSize.height)
+           {
+             // If the right side of the component is closer to the center
+             if ((screenSize.width / 2 - x) <= 0)
+               {
+                 if ((x - width) >= 0)
+                   x -= width;
+                 else
+                   x = 0;
+               }
+             else
+               {
+                 if ((x + cWidth + width) <= screenSize.width)
+                   x += cWidth;
+                 else
+                   x = screenSize.width - width;
+               }
+ 
+             y = screenSize.height - height;
+           }
+         else if (cWidth > width || cHeight > height)
+           {
+             // If right side of component is cut off
+             if ((x + width) > screenSize.width)
+               x = screenSize.width - width;
+             // If left side of component is cut off
+             else if (x < 0)
+               x = 0;
+             else
+               x += (cWidth - width) / 2;
+             
+             y += (cHeight - height) / 2;
+           }
+         else
+           {
+             // If right side of component is cut off
+             if ((x + width) > screenSize.width)
+               x = screenSize.width - width;
+             // If left side of component is cut off
+             else if (x < 0 || (x - (width - cWidth) / 2) < 0)
+               x = 0;
+             else
+               x -= (width - cWidth) / 2;
+ 
+             if ((y - (height - cHeight) / 2) > 0)
+               y -= (height - cHeight) / 2;
+             else
+               y = 0;
+           }
+       }
+ 
+     setLocation(x, y);
+   }
+ 
+   /**
+    * A BltBufferStrategy for windows.
+    */
+   private class WindowBltBufferStrategy extends BltBufferStrategy
+   {
+     /**
+      * Creates a block transfer strategy for this window.
+      *
+      * @param numBuffers the number of buffers in this strategy
+      * @param accelerated true if the buffer should be accelerated,
+      * false otherwise
+      */
+     WindowBltBufferStrategy(int numBuffers, boolean accelerated)
+     {
+       super(numBuffers,
+ 	    new BufferCapabilities(new ImageCapabilities(accelerated),
+ 				   new ImageCapabilities(accelerated),
+ 				   BufferCapabilities.FlipContents.COPIED));
+     }
+   }
+ 
+   /**
+    * A FlipBufferStrategy for windows.
+    */
+   private class WindowFlipBufferStrategy extends FlipBufferStrategy
+   {
+     /**
+      * Creates a flip buffer strategy for this window.
+      *
+      * @param numBuffers the number of buffers in this strategy
+      *
+      * @throws AWTException if the requested number of buffers is not
+      * supported
+      */
+     WindowFlipBufferStrategy(int numBuffers)
+       throws AWTException
+     {
+       super(numBuffers,
+ 	    new BufferCapabilities(new ImageCapabilities(true),
+ 				   new ImageCapabilities(true),
+ 				   BufferCapabilities.FlipContents.COPIED));
+     }
+   }
+ 
+   /**
+    * Creates a buffering strategy that manages how this window is
+    * repainted.  This method attempts to create the optimum strategy
+    * based on the desired number of buffers.  Hardware or software
+    * acceleration may be used.
+    *
+    * createBufferStrategy attempts different levels of optimization,
+    * but guarantees that some strategy with the requested number of
+    * buffers will be created even if it is not optimal.  First it
+    * attempts to create a page flipping strategy, then an accelerated
+    * blitting strategy, then an unaccelerated blitting strategy.
+    *
+    * Calling this method causes any existing buffer strategy to be
+    * destroyed.
+    *
+    * @param numBuffers the number of buffers in this strategy
+    *
+    * @throws IllegalArgumentException if requested number of buffers
+    * is less than one
+    * @throws IllegalStateException if this window is not displayable
+    *
+    * @since 1.4
+    */
+   public void createBufferStrategy(int numBuffers)
+   {
+     if (numBuffers < 1)
+       throw new IllegalArgumentException("Window.createBufferStrategy: number"
+ 					 + " of buffers is less than one");
+ 
+     if (!isDisplayable())
+       throw new IllegalStateException("Window.createBufferStrategy: window is"
+ 				      + " not displayable");
+ 
+     BufferStrategy newStrategy = null;
+ 
+     // try a flipping strategy
+     try
+       {
+ 	newStrategy = new WindowFlipBufferStrategy(numBuffers);
+       }
+     catch (AWTException e)
+       {
+       }
+ 
+     // fall back to an accelerated blitting strategy
+     if (newStrategy == null)
+       newStrategy = new WindowBltBufferStrategy(numBuffers, true);
+ 
+     bufferStrategy = newStrategy;
+   }
+ 
+   /**
+    * Creates a buffering strategy that manages how this window is
+    * repainted.  This method attempts to create a strategy based on
+    * the specified capabilities and throws an exception if the
+    * requested strategy is not supported.
+    *
+    * Calling this method causes any existing buffer strategy to be
+    * destroyed.
+    *
+    * @param numBuffers the number of buffers in this strategy
+    * @param caps the requested buffering capabilities
+    *
+    * @throws AWTException if the requested capabilities are not
+    * supported
+    * @throws IllegalArgumentException if requested number of buffers
+    * is less than one or if caps is null
+    *
+    * @since 1.4
+    */
+   public void createBufferStrategy(int numBuffers, BufferCapabilities caps)
+     throws AWTException
+   {
+     if (numBuffers < 1)
+       throw new IllegalArgumentException("Window.createBufferStrategy: number"
+ 					 + " of buffers is less than one");
+ 
+     if (caps == null)
+       throw new IllegalArgumentException("Window.createBufferStrategy:"
+ 					 + " capabilities object is null");
+ 
+     // a flipping strategy was requested
+     if (caps.isPageFlipping())
+       bufferStrategy = new WindowFlipBufferStrategy(numBuffers);
+     else
+       bufferStrategy = new WindowBltBufferStrategy(numBuffers, true);
+   }
+ 
+   /**
+    * Returns the buffer strategy used by the window.
+    *
+    * @return the buffer strategy.
+    * @since 1.4
+    */
+   public BufferStrategy getBufferStrategy()
+   {
+     return bufferStrategy;
+   }
+ 
+   /**
+    * @since 1.2
+    *
+    * @deprecated
+    */
+   public void applyResourceBundle(ResourceBundle rb)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   /**
+    * @since 1.2
+    *
+    * @deprecated
+    */
+   public void applyResourceBundle(String rbName)
+   {
+     ResourceBundle rb = ResourceBundle.getBundle(rbName, Locale.getDefault(),
+       ClassLoader.getSystemClassLoader());
+     if (rb != null)
+       applyResourceBundle(rb);    
+   }
+ 
+   /**
+    * Gets the AccessibleContext associated with this <code>Window</code>.
+    * The context is created, if necessary.
+    *
+    * @return the associated context
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     /* Create the context if this is the first request */
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleAWTWindow();
+     return accessibleContext;
+   }
+ 
+   /** 
+    * Get graphics configuration.  The implementation for Window will
+    * not ask any parent containers, since Window is a toplevel
+    * window and not actually embedded in the parent component.
+    */
+   public GraphicsConfiguration getGraphicsConfiguration()
+   {
+     if (graphicsConfiguration != null) return graphicsConfiguration;
+     if (peer != null) return peer.getGraphicsConfiguration();
+     return null;
+   }
+ 
+   protected void processWindowFocusEvent(WindowEvent event)
+   {
+     if (windowFocusListener != null)
+       {
+         switch (event.getID ())
+           {
+           case WindowEvent.WINDOW_GAINED_FOCUS:
+             windowFocusListener.windowGainedFocus (event);
+             break;
+             
+           case WindowEvent.WINDOW_LOST_FOCUS:
+             windowFocusListener.windowLostFocus (event);
+             break;
+             
+           default:
+             break;
+           }
+       }
+   }
+   
+   /**
+    * @since 1.4
+    */
+   protected void processWindowStateEvent(WindowEvent event)
+   {
+     if (windowStateListener != null
+         && event.getID () == WindowEvent.WINDOW_STATE_CHANGED)
+       windowStateListener.windowStateChanged (event);
+   }
+ 
+   /**
+    * Returns whether this <code>Window</code> can get the focus or not.
+    *
+    * @since 1.4
+    */
+   public final boolean isFocusableWindow ()
+   {
+     if (getFocusableWindowState () == false)
+       return false;
+ 
+     if (this instanceof Dialog
+         || this instanceof Frame)
+       return true;
+ 
+     // FIXME: Implement more possible cases for returning true.
+ 
+     return false;
+   }
+   
+   /**
+    * Returns the value of the focusableWindowState property.
+    * 
+    * @since 1.4
+    */
+   public boolean getFocusableWindowState ()
+   {
+     return focusableWindowState;
+   }
+ 
+   /**
+    * Sets the value of the focusableWindowState property.
+    * 
+    * @since 1.4
+    */
+   public void setFocusableWindowState (boolean focusableWindowState)
+   {
+     this.focusableWindowState = focusableWindowState;
+   }
+ 
+   /**
+    * Generate a unique name for this window.
+    *
+    * @return A unique name for this window.
+    */
+   String generateName()
+   {
+     return "win" + getUniqueLong();
+   }
+ 
+   private static synchronized long getUniqueLong()
+   {
+     return next_window_number++;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/color/CMMException.java gcc-4.1.0/libjava/classpath/java/awt/color/CMMException.java
*** gcc-4.0.2/libjava/classpath/java/awt/color/CMMException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/color/CMMException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* CMMException.java -- error in the native CMM
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.color;
+ 
+ /**
+   * Thrown when there is an error in the native CMM.
+   *
+   * @author Eric Blake (ebb9@email.byu.edu)
+   * @status updated to 1.4
+   */
+ public class CMMException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 5775558044142994965L;
+ 
+   /**
+    * Create a new instance with a specified detailed error message.
+    *
+    * @param message the message
+    */
+   public CMMException(String message)
+   {
+     super(message);
+   }
+ } // class CMMException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/color/ColorSpace.java gcc-4.1.0/libjava/classpath/java/awt/color/ColorSpace.java
*** gcc-4.0.2/libjava/classpath/java/awt/color/ColorSpace.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/color/ColorSpace.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,183 ----
+ /* ColorSpace.java -- transforms between color spaces
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.color;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * NEEDS DOCUMENTATION
+  *
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  * @since 1.2
+  */
+ public abstract class ColorSpace implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -409452704308689724L;
+ 
+   public static final int TYPE_XYZ = 0;
+   public static final int TYPE_Lab = 1;
+   public static final int TYPE_Luv = 2;
+   public static final int TYPE_YCbCr = 3;
+   public static final int TYPE_Yxy = 4;
+   public static final int TYPE_RGB = 5;
+   public static final int TYPE_GRAY = 6;
+   public static final int TYPE_HSV = 7;
+   public static final int TYPE_HLS = 8;
+   public static final int TYPE_CMYK = 9;
+   // mysterious gap in the enumeration sequenece
+   public static final int TYPE_CMY = 11;
+   public static final int TYPE_2CLR = 12;
+   public static final int TYPE_3CLR = 13;
+   public static final int TYPE_4CLR = 14;
+   public static final int TYPE_5CLR = 15;
+   public static final int TYPE_6CLR = 16;
+   public static final int TYPE_7CLR = 17;
+   public static final int TYPE_8CLR = 18;
+   public static final int TYPE_9CLR = 19;
+   public static final int TYPE_ACLR = 20;
+   public static final int TYPE_BCLR = 21;
+   public static final int TYPE_CCLR = 22;
+   public static final int TYPE_DCLR = 23;
+   public static final int TYPE_ECLR = 24;
+   public static final int TYPE_FCLR = 25;
+ 
+   public static final int CS_sRGB = 1000;
+   public static final int CS_LINEAR_RGB = 1004;
+   public static final int CS_CIEXYZ = 1001;
+   public static final int CS_PYCC = 1002;
+   public static final int CS_GRAY = 1003;
+ 
+   private static final int CS_BASE = CS_sRGB;
+   private static final int CS_END = CS_LINEAR_RGB + 1;
+   private static final int CS_COUNT = CS_END - CS_BASE;
+ 
+   // Instances are lazily instantiated
+   private static final ColorSpace[] INSTANCES = new ColorSpace[CS_COUNT];
+ 
+   /**
+    * @serial
+    */
+   // Visible in subclass.
+   final int type;
+ 
+   /**
+    * @serial
+    */
+   // Visible in subclass.
+   final int numComponents;
+ 
+   protected ColorSpace(int type, int numcomponents)
+   {
+     this.type = type;
+     numComponents = numcomponents;
+   }
+ 
+   public static ColorSpace getInstance(int colorspace)
+   {
+     if ((colorspace >= CS_BASE) && (colorspace < CS_END))
+       {
+         int instanceIndex = colorspace - CS_BASE;
+         if (INSTANCES[instanceIndex] == null)
+           {
+             ICC_Profile profile = new ICC_Profile(colorspace);
+             INSTANCES[instanceIndex] = new ICC_ColorSpace(profile);
+           }
+         return INSTANCES[instanceIndex];
+       }
+     throw new IllegalArgumentException("unknown/unsupported colorspace");
+   }
+ 
+   public boolean isCS_sRGB()
+   {
+     return type == CS_sRGB;
+   }
+ 
+   /**
+    * Transforms a color value assumed to be in this ColorSpace into a value in
+    * the default CS_sRGB color space.
+    *
+    * @exception ArrayIndexOutOfBoundsException If array length is not at least
+    * the number of components in this ColorSpace.
+    */
+   public abstract float[] toRGB(float[] colorvalue);
+ 
+   public abstract float[] fromRGB(float[] rgbvalue);
+ 
+   public abstract float[] toCIEXYZ(float[] colorvalue);
+ 
+   public abstract float[] fromCIEXYZ(float[] colorvalue);
+ 
+   public int getType()
+   {
+     return type;
+   }
+ 
+   public int getNumComponents()
+   {
+     return numComponents;
+   }
+ 
+   public String getName(int idx)
+   {
+     return "type " + type;
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public float getMinValue(int idx)
+   {
+     if (idx < 0 || idx >= numComponents)
+       throw new IllegalArgumentException();
+     return 0;
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public float getMaxValue(int idx)
+   {
+     if (idx < 0 || idx >= numComponents)
+       throw new IllegalArgumentException();
+     return 1;
+   }
+ } // class ColorSpace
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/color/ICC_ColorSpace.java gcc-4.1.0/libjava/classpath/java/awt/color/ICC_ColorSpace.java
*** gcc-4.0.2/libjava/classpath/java/awt/color/ICC_ColorSpace.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/color/ICC_ColorSpace.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,314 ----
+ /* ICC_ColorSpace.java -- the canonical color space implementation
+    Copyright (C) 2000, 2002, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.color;
+ 
+ import gnu.java.awt.color.CieXyzConverter;
+ import gnu.java.awt.color.ClutProfileConverter;
+ import gnu.java.awt.color.ColorSpaceConverter;
+ import gnu.java.awt.color.GrayProfileConverter;
+ import gnu.java.awt.color.GrayScaleConverter;
+ import gnu.java.awt.color.LinearRGBConverter;
+ import gnu.java.awt.color.PyccConverter;
+ import gnu.java.awt.color.RgbProfileConverter;
+ import gnu.java.awt.color.SrgbConverter;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ 
+ /**
+  * ICC_ColorSpace - an implementation of ColorSpace
+  *
+  * While an ICC_Profile class abstracts the data in an ICC profile file
+  * an ICC_ColorSpace performs the color space conversions defined by
+  * an ICC_Profile instance.
+  *
+  * Typically, an ICC_Profile will either be created using getInstance,
+  * either from the built-in colorspaces, or from an ICC profile file.
+  * Then a ICC_Colorspace will be used to perform transforms from the
+  * device colorspace to and from the profile color space.
+  *
+  * The PCS used by ColorSpace is CIE XYZ relative a D50 white point.
+  * (Profiles using a CIE Lab PCS will have their input and output converted
+  * to D50 CIE XYZ accordingly.
+  *
+  * Note that a valid profile may not contain transforms in both directions,
+  * in which case the output may be undefined.
+  * All built-in colorspaces have bidirectional transforms, but developers
+  * using an ICC profile file may want to check the profile class using
+  * the ICC_Profile.getProfileClass() method. Input class profiles are
+  * guaranteed to have transforms to the PCS, output class profiles are
+  * guaranteed to have transforms from the PCS to device space.
+  *
+  * @author Sven de Marothy
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  * @since 1.2
+  */
+ public class ICC_ColorSpace extends ColorSpace
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 3455889114070431483L;
+ 
+   /**
+    * @serial
+    */
+   private ICC_Profile thisProfile;
+ 
+   /**
+    * @serial
+    */
+   private float[] minVal;
+ 
+   /**
+    * @serial
+    */
+   private float[] maxVal;
+ 
+   /**
+    * @serial
+    */
+   private float[] diffMinMax;
+ 
+   /**
+    * @serial
+    */
+   private float[] invDiffMinMax;
+ 
+   /**
+    * @serial
+    */
+   private boolean needScaleInit;
+ 
+   /**
+    * Tells us if the PCS is CIE LAB (must be CIEXYZ otherwise)
+    */
+   private transient int type;
+   private transient int nComponents;
+   private transient ColorSpaceConverter converter;
+ 
+   /**
+    * Constructs a new ICC_ColorSpace from an ICC_Profile object.
+    *
+    * @exception IllegalArgumentException If profile is inappropriate for
+    * representing a ColorSpace.
+    */
+   public ICC_ColorSpace(ICC_Profile profile)
+   {
+     super(profile.getColorSpaceType(), profile.getNumComponents());
+ 
+     converter = getConverter(profile);
+     thisProfile = profile;
+     nComponents = profile.getNumComponents();
+     type = profile.getColorSpaceType();
+     makeArrays();
+   }
+ 
+   /**
+    * Return the profile
+    */
+   public ICC_Profile getProfile()
+   {
+     return thisProfile;
+   }
+ 
+   /**
+    * Transforms a color value assumed to be in this ColorSpace into a value in
+    * the default CS_sRGB color space.
+    *
+    * @exception ArrayIndexOutOfBoundsException If array length is not at least
+    * the number of components in this ColorSpace.
+    */
+   public float[] toRGB(float[] colorvalue)
+   {
+     return converter.toRGB(colorvalue);
+   }
+ 
+   /**
+    * Transforms a color value assumed to be in the default CS_sRGB color space
+    * into this ColorSpace.
+    *
+    * @exception ArrayIndexOutOfBoundsException If array length is not at
+    * least 3.
+    */
+   public float[] fromRGB(float[] rgbvalue)
+   {
+     return converter.fromRGB(rgbvalue);
+   }
+ 
+   /**
+    * Transforms a color value assumed to be in this ColorSpace into the
+    * CS_CIEXYZ conversion color space.
+    *
+    * @exception ArrayIndexOutOfBoundsException If array length is not at
+    * least the number of components in this ColorSpace.
+    */
+   public float[] toCIEXYZ(float[] colorvalue)
+   {
+     return converter.toCIEXYZ(colorvalue);
+   }
+ 
+   /**
+    * Transforms a color value assumed to be in the CS_CIEXYZ conversion color
+    * space into this ColorSpace.
+    *
+    * @exception ArrayIndexOutOfBoundsException If array length is not at
+    * least 3.
+    */
+   public float[] fromCIEXYZ(float[] colorvalue)
+   {
+     return converter.fromCIEXYZ(colorvalue);
+   }
+ 
+   public boolean isCS_sRGB()
+   {
+     return converter instanceof SrgbConverter;
+   }
+ 
+   /**
+    * Returns the minimum normalized color component value for the specified
+    * component.
+    *
+    * @exception IllegalArgumentException If component is less than 0 or greater
+    * than numComponents - 1.
+    *
+    * @since 1.4
+    */
+   public float getMinValue(int idx)
+   {
+     // FIXME: Not 100% certain of this. 
+     if (type == ColorSpace.TYPE_Lab && (idx == 1 || idx == 2))
+       return -128f;
+ 
+     if (idx < 0 || idx >= nComponents)
+       throw new IllegalArgumentException();
+     return 0;
+   }
+ 
+   /**
+    * Returns the maximum normalized color component value for the specified
+    * component.
+    *
+    * @exception IllegalArgumentException If component is less than 0 or greater
+    * than numComponents - 1.
+    *
+    * @since 1.4
+    */
+   public float getMaxValue(int idx)
+   {
+     if (type == ColorSpace.TYPE_XYZ && idx >= 0 && idx <= 2)
+       return 1 + 32767 / 32768f;
+     else if (type == ColorSpace.TYPE_Lab)
+       {
+ 	if (idx == 0)
+ 	  return 100;
+ 	if (idx == 1 || idx == 2)
+ 	  return 127;
+       }
+     if (idx < 0 || idx >= nComponents)
+       throw new IllegalArgumentException();
+     return 1;
+   }
+ 
+   /**
+    * Returns a colorspace converter suitable for a given profile
+    */
+   private ColorSpaceConverter getConverter(ICC_Profile profile)
+   {
+     ColorSpaceConverter converter;
+     switch (profile.isPredefined())
+       {
+       case CS_sRGB:
+ 	converter = new SrgbConverter();
+ 	break;
+       case CS_CIEXYZ:
+ 	converter = new CieXyzConverter();
+ 	break;
+       case CS_GRAY:
+ 	converter = new GrayScaleConverter();
+ 	break;
+       case CS_LINEAR_RGB:
+ 	converter = new LinearRGBConverter();
+ 	break;
+       case CS_PYCC:
+ 	converter = new PyccConverter();
+ 	break;
+       default:
+ 	if (profile instanceof ICC_ProfileRGB)
+ 	  converter = new RgbProfileConverter((ICC_ProfileRGB) profile);
+ 	else if (profile instanceof ICC_ProfileGray)
+ 	  converter = new GrayProfileConverter((ICC_ProfileGray) profile);
+ 	else
+ 	  converter = new ClutProfileConverter(profile);
+ 	break;
+       }
+     return converter;
+   }
+ 
+   /**
+    * Serialization compatibility requires these variable to be set,
+    * although we don't use them. Perhaps we should?
+    */
+   private void makeArrays()
+   {
+     minVal = new float[nComponents];
+     maxVal = new float[nComponents];
+ 
+     invDiffMinMax = diffMinMax = null;
+     for (int i = 0; i < nComponents; i++)
+       {
+ 	minVal[i] = getMinValue(i);
+ 	maxVal[i] = getMaxValue(i);
+       }
+     needScaleInit = true;
+   }
+ 
+   /**
+    * Deserializes the object
+    */
+   private void readObject(ObjectInputStream s)
+                    throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     // set up objects
+     converter = getConverter(thisProfile);
+     nComponents = thisProfile.getNumComponents();
+     type = thisProfile.getColorSpaceType();
+   }
+ } // class ICC_ColorSpace
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/color/ICC_Profile.java gcc-4.1.0/libjava/classpath/java/awt/color/ICC_Profile.java
*** gcc-4.0.2/libjava/classpath/java/awt/color/ICC_Profile.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/color/ICC_Profile.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1244 ----
+ /* ICC_Profile.java -- color space profiling
+    Copyright (C) 2000, 2002, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.color;
+ 
+ import gnu.java.awt.color.ProfileHeader;
+ import gnu.java.awt.color.TagEntry;
+ 
+ import java.io.FileInputStream;
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.ObjectStreamException;
+ import java.io.OutputStream;
+ import java.io.Serializable;
+ import java.io.UnsupportedEncodingException;
+ import java.nio.ByteBuffer;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ 
+ /**
+  * ICC Profile - represents an ICC Color profile.
+  * The ICC profile format is a standard file format which maps the transform
+  * from a device color space to a standard Profile Color Space (PCS), which
+  * can either be CIE L*a*b or CIE XYZ.
+  * (With the exception of device link profiles which map from one device space
+  * to another)
+  *
+  * ICC profiles calibrated to specific input/output devices are used when color
+  * fidelity is of importance.
+  *
+  * An instance of ICC_Profile can be created using the getInstance() methods,
+  * either using one of the predefined color spaces enumerated in ColorSpace,
+  * or from an ICC profile file, or from an input stream.
+  *
+  * An ICC_ColorSpace object can then be created to transform color values
+  * through the profile.
+  *
+  * The ICC_Profile class implements the version 2 format specified by
+  * International Color Consortium Specification ICC.1:1998-09,
+  * and its addendum ICC.1A:1999-04, April 1999
+  * (available at www.color.org)
+  *
+  * @author Sven de Marothy
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  * @since 1.2
+  */
+ public class ICC_Profile implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -3938515861990936766L;
+ 
+   /**
+    * ICC Profile classes
+    */
+   public static final int CLASS_INPUT = 0;
+   public static final int CLASS_DISPLAY = 1;
+   public static final int CLASS_OUTPUT = 2;
+   public static final int CLASS_DEVICELINK = 3;
+   public static final int CLASS_COLORSPACECONVERSION = 4;
+   public static final int CLASS_ABSTRACT = 5;
+   public static final int CLASS_NAMEDCOLOR = 6;
+ 
+   /**
+    * ICC Profile class signatures
+    */
+   public static final int icSigInputClass = 0x73636e72; // 'scnr'
+   public static final int icSigDisplayClass = 0x6d6e7472; // 'mntr'
+   public static final int icSigOutputClass = 0x70727472; // 'prtr'
+   public static final int icSigLinkClass = 0x6c696e6b; // 'link'
+   public static final int icSigColorSpaceClass = 0x73706163; // 'spac'
+   public static final int icSigAbstractClass = 0x61627374; // 'abst'
+   public static final int icSigNamedColorClass = 0x6e6d636c; // 'nmcl'
+ 
+   /**
+    * Color space signatures
+    */
+   public static final int icSigXYZData = 0x58595A20; // 'XYZ ' 
+   public static final int icSigLabData = 0x4C616220; // 'Lab '
+   public static final int icSigLuvData = 0x4C757620; // 'Luv '
+   public static final int icSigYCbCrData = 0x59436272; // 'YCbr'
+   public static final int icSigYxyData = 0x59787920; // 'Yxy '
+   public static final int icSigRgbData = 0x52474220; // 'RGB '
+   public static final int icSigGrayData = 0x47524159; // 'GRAY'
+   public static final int icSigHsvData = 0x48535620; // 'HSV '
+   public static final int icSigHlsData = 0x484C5320; // 'HLS '
+   public static final int icSigCmykData = 0x434D594B; // 'CMYK'
+   public static final int icSigCmyData = 0x434D5920; // 'CMY '
+   public static final int icSigSpace2CLR = 0x32434C52; // '2CLR'
+   public static final int icSigSpace3CLR = 0x33434C52; // '3CLR'
+   public static final int icSigSpace4CLR = 0x34434C52; // '4CLR'
+   public static final int icSigSpace5CLR = 0x35434C52; // '5CLR'
+   public static final int icSigSpace6CLR = 0x36434C52; // '6CLR'
+   public static final int icSigSpace7CLR = 0x37434C52; // '7CLR'
+   public static final int icSigSpace8CLR = 0x38434C52; // '8CLR'
+   public static final int icSigSpace9CLR = 0x39434C52; // '9CLR'
+   public static final int icSigSpaceACLR = 0x41434C52; // 'ACLR'
+   public static final int icSigSpaceBCLR = 0x42434C52; // 'BCLR'
+   public static final int icSigSpaceCCLR = 0x43434C52; // 'CCLR'
+   public static final int icSigSpaceDCLR = 0x44434C52; // 'DCLR'
+   public static final int icSigSpaceECLR = 0x45434C52; // 'ECLR'
+   public static final int icSigSpaceFCLR = 0x46434C52; // 'FCLR'
+ 
+   /**
+    * Rendering intents
+    */
+   public static final int icPerceptual = 0;
+   public static final int icRelativeColorimetric = 1;
+   public static final int icSaturation = 2;
+   public static final int icAbsoluteColorimetric = 3;
+ 
+   /**
+    * Tag signatures
+    */
+   public static final int icSigAToB0Tag = 0x41324230; // 'A2B0' 
+   public static final int icSigAToB1Tag = 0x41324231; // 'A2B1' 
+   public static final int icSigAToB2Tag = 0x41324232; // 'A2B2' 
+   public static final int icSigBlueColorantTag = 0x6258595A; // 'bXYZ' 
+   public static final int icSigBlueTRCTag = 0x62545243; // 'bTRC' 
+   public static final int icSigBToA0Tag = 0x42324130; // 'B2A0' 
+   public static final int icSigBToA1Tag = 0x42324131; // 'B2A1' 
+   public static final int icSigBToA2Tag = 0x42324132; // 'B2A2' 
+   public static final int icSigCalibrationDateTimeTag = 0x63616C74; // 'calt' 
+   public static final int icSigCharTargetTag = 0x74617267; // 'targ' 
+   public static final int icSigCopyrightTag = 0x63707274; // 'cprt' 
+   public static final int icSigCrdInfoTag = 0x63726469; // 'crdi' 
+   public static final int icSigDeviceMfgDescTag = 0x646D6E64; // 'dmnd' 
+   public static final int icSigDeviceModelDescTag = 0x646D6464; // 'dmdd' 
+   public static final int icSigDeviceSettingsTag = 0x64657673; // 'devs' 
+   public static final int icSigGamutTag = 0x67616D74; // 'gamt' 
+   public static final int icSigGrayTRCTag = 0x6b545243; // 'kTRC' 
+   public static final int icSigGreenColorantTag = 0x6758595A; // 'gXYZ' 
+   public static final int icSigGreenTRCTag = 0x67545243; // 'gTRC' 
+   public static final int icSigLuminanceTag = 0x6C756d69; // 'lumi' 
+   public static final int icSigMeasurementTag = 0x6D656173; // 'meas' 
+   public static final int icSigMediaBlackPointTag = 0x626B7074; // 'bkpt' 
+   public static final int icSigMediaWhitePointTag = 0x77747074; // 'wtpt' 
+   public static final int icSigNamedColor2Tag = 0x6E636C32; // 'ncl2' 
+   public static final int icSigOutputResponseTag = 0x72657370; // 'resp' 
+   public static final int icSigPreview0Tag = 0x70726530; // 'pre0' 
+   public static final int icSigPreview1Tag = 0x70726531; // 'pre1' 
+   public static final int icSigPreview2Tag = 0x70726532; // 'pre2' 
+   public static final int icSigProfileDescriptionTag = 0x64657363; // 'desc' 
+   public static final int icSigProfileSequenceDescTag = 0x70736571; // 'pseq' 
+   public static final int icSigPs2CRD0Tag = 0x70736430; // 'psd0' 
+   public static final int icSigPs2CRD1Tag = 0x70736431; // 'psd1' 
+   public static final int icSigPs2CRD2Tag = 0x70736432; // 'psd2' 
+   public static final int icSigPs2CRD3Tag = 0x70736433; // 'psd3' 
+   public static final int icSigPs2CSATag = 0x70733273; // 'ps2s' 
+   public static final int icSigPs2RenderingIntentTag = 0x70733269; // 'ps2i' 
+   public static final int icSigRedColorantTag = 0x7258595A; // 'rXYZ' 
+   public static final int icSigRedTRCTag = 0x72545243; // 'rTRC' 
+   public static final int icSigScreeningDescTag = 0x73637264; // 'scrd' 
+   public static final int icSigScreeningTag = 0x7363726E; // 'scrn' 
+   public static final int icSigTechnologyTag = 0x74656368; // 'tech' 
+   public static final int icSigUcrBgTag = 0x62666420; // 'bfd ' 
+   public static final int icSigViewingCondDescTag = 0x76756564; // 'vued' 
+   public static final int icSigViewingConditionsTag = 0x76696577; // 'view' 
+   public static final int icSigChromaticityTag = 0x6368726D; // 'chrm'
+ 
+   /**
+    * Non-ICC tag 'head' for use in retrieving the header with getData()
+    */
+   public static final int icSigHead = 0x68656164;
+ 
+   /**
+    * Header offsets
+    */
+   public static final int icHdrSize = 0;
+   public static final int icHdrCmmId = 4;
+   public static final int icHdrVersion = 8;
+   public static final int icHdrDeviceClass = 12;
+   public static final int icHdrColorSpace = 16;
+   public static final int icHdrPcs = 20;
+   public static final int icHdrDate = 24;
+   public static final int icHdrMagic = 36;
+   public static final int icHdrPlatform = 40;
+   public static final int icHdrFlags = 44;
+   public static final int icHdrManufacturer = 48;
+   public static final int icHdrModel = 52;
+   public static final int icHdrAttributes = 56;
+   public static final int icHdrRenderingIntent = 64;
+   public static final int icHdrIlluminant = 68;
+   public static final int icHdrCreator = 80;
+ 
+   /**
+    *
+    */
+   public static final int icTagType = 0;
+   public static final int icTagReserved = 4;
+   public static final int icCurveCount = 8;
+   public static final int icCurveData = 12;
+   public static final int icXYZNumberX = 8;
+ 
+   /**
+    * offset of the Tag table
+    */
+   private static final int tagTableOffset = 128;
+ 
+   /**
+    * @serial
+    */
+   private static final int iccProfileSerializedDataVersion = 1;
+ 
+   /**
+    * Constants related to generating profiles for
+    * built-in colorspace profiles
+    */
+   /**
+    * Copyright notice to stick into built-in-profile files.
+    */
+   private static final String copyrightNotice = "Generated by GNU Classpath.";
+ 
+   /**
+    * Resolution of the TRC to use for predefined profiles.
+    * 1024 should suffice.
+    */
+   private static final int TRC_POINTS = 1024;
+ 
+   /**
+    * CIE 1931 D50 white point (in Lab coordinates)
+    */
+   private static final float[] D50 = { 0.96422f, 1.00f, 0.82521f };
+ 
+   /**
+    * Color space profile ID
+    * Set to the predefined profile class (e.g. CS_sRGB) if a predefined
+    * color space is used, set to -1 otherwise.
+    * (or if the profile has been modified)
+    */
+   private transient int profileID;
+ 
+   /**
+    * The profile header data
+    */
+   private transient ProfileHeader header;
+ 
+   /**
+    * A hashtable containing the profile tags as TagEntry objects
+    */
+   private transient Hashtable tagTable;
+ 
+   /**
+    * Contructor for predefined colorspaces
+    */
+   ICC_Profile(int profileID)
+   {
+     header = null;
+     tagTable = null;
+     createProfile(profileID);
+   }
+ 
+   /**
+    * Constructs an ICC_Profile from a header and a table of loaded tags.
+    */
+   ICC_Profile(ProfileHeader h, Hashtable tags) throws IllegalArgumentException
+   {
+     header = h;
+     tagTable = tags;
+     profileID = -1; // Not a predefined color space
+   }
+ 
+   /**
+    * Constructs an ICC_Profile from a byte array of data.
+    */
+   ICC_Profile(byte[] data) throws IllegalArgumentException
+   {
+     // get header and verify it
+     header = new ProfileHeader(data);
+     header.verifyHeader(data.length);
+     tagTable = createTagTable(data);
+     profileID = -1; // Not a predefined color space
+   }
+ 
+   /**
+    * Free up the used memory.
+    */
+   protected void finalize()
+   {
+   }
+ 
+   /**
+    * Returns an ICC_Profile instance from a byte array of profile data.
+    *
+    * An instance of the specialized classes ICC_ProfileRGB or ICC_ProfileGray
+    * may be returned if appropriate.
+    *
+    * @param data - the profile data
+    * @return An ICC_Profile object
+    *
+    * @throws IllegalArgumentException if the profile data is an invalid
+    * v2 profile.
+    */
+   public static ICC_Profile getInstance(byte[] data)
+   {
+     ProfileHeader header = new ProfileHeader(data);
+ 
+     // verify it as a correct ICC header, including size
+     header.verifyHeader(data.length);
+ 
+     Hashtable tags = createTagTable(data);
+ 
+     if (isRGBProfile(header, tags))
+       return new ICC_ProfileRGB(data);
+     if (isGrayProfile(header, tags))
+       return new ICC_ProfileGray(data);
+ 
+     return new ICC_Profile(header, tags);
+   }
+ 
+   /**
+    * Returns an predefined ICC_Profile instance.
+    *
+    * This will construct an ICC_Profile instance from one of the predefined
+    * color spaces in the ColorSpace class. (e.g. CS_sRGB, CS_GRAY, etc)
+    *
+    * An instance of the specialized classes ICC_ProfileRGB or ICC_ProfileGray
+    * may be returned if appropriate.
+    *
+    * @return An ICC_Profile object
+    */
+   public static ICC_Profile getInstance(int cspace)
+   {
+     if (cspace == ColorSpace.CS_sRGB || cspace == ColorSpace.CS_LINEAR_RGB)
+       return new ICC_ProfileRGB(cspace);
+     if (cspace == ColorSpace.CS_GRAY)
+       return new ICC_ProfileGray(cspace);
+     return new ICC_Profile(cspace);
+   }
+ 
+   /**
+    * Returns an ICC_Profile instance from an ICC Profile file.
+    *
+    * An instance of the specialized classes ICC_ProfileRGB or ICC_ProfileGray
+    * may be returned if appropriate.
+    *
+    * @param filename - the file name of the profile file.
+    * @return An ICC_Profile object
+    *
+    * @throws IllegalArgumentException if the profile data is an invalid
+    * v2 profile.
+    * @throws IOException if the file could not be read.
+    */
+   public static ICC_Profile getInstance(String filename)
+                                  throws IOException
+   {
+     return getInstance(new FileInputStream(filename));
+   }
+ 
+   /**
+    * Returns an ICC_Profile instance from an InputStream.
+    *
+    * This method can be used for reading ICC profiles embedded in files
+    * which support this. (JPEG and SVG for instance).
+    *
+    * The stream is treated in the following way: The profile header
+    * (128 bytes) is read first, and the header is validated. If the profile
+    * header is valid, it will then attempt to read the rest of the profile
+    * from the stream. The stream is not closed after reading.
+    *
+    * An instance of the specialized classes ICC_ProfileRGB or ICC_ProfileGray
+    * may be returned if appropriate.
+    *
+    * @param in - the input stream to read the profile from.
+    * @return An ICC_Profile object
+    *
+    * @throws IllegalArgumentException if the profile data is an invalid
+    * v2 profile.
+    * @throws IOException if the stream could not be read.
+    */
+   public static ICC_Profile getInstance(InputStream in)
+                                  throws IOException
+   {
+     // read the header
+     byte[] headerData = new byte[ProfileHeader.HEADERSIZE];
+     if (in.read(headerData) != ProfileHeader.HEADERSIZE)
+       throw new IllegalArgumentException("Invalid profile header");
+ 
+     ProfileHeader header = new ProfileHeader(headerData);
+ 
+     // verify it as a correct ICC header, but do not verify the
+     // size as we are reading from a stream.
+     header.verifyHeader(-1);
+ 
+     // get the size
+     byte[] data = new byte[header.getSize()];
+     System.arraycopy(headerData, 0, data, 0, ProfileHeader.HEADERSIZE);
+ 
+     // read the rest
+     if (in.read(data, ProfileHeader.HEADERSIZE,
+                 header.getSize() - ProfileHeader.HEADERSIZE) != header.getSize()
+         - ProfileHeader.HEADERSIZE)
+       throw new IOException("Incorrect profile size");
+ 
+     return getInstance(data);
+   }
+ 
+   /**
+    * Returns the major version number
+    */
+   public int getMajorVersion()
+   {
+     return header.getMajorVersion();
+   }
+ 
+   /**
+    * Returns the minor version number.
+    *
+    * Only the least-significant byte contains data, in BCD form:
+    * the least-significant nibble is the BCD bug fix revision,
+    * the most-significant nibble is the BCD minor revision number.
+    *
+    * (E.g. For a v2.1.0 profile this will return <code>0x10</code>)
+    */
+   public int getMinorVersion()
+   {
+     return header.getMinorVersion();
+   }
+ 
+   /**
+    * Returns the device class of this profile,
+    *
+    * (E.g. CLASS_INPUT for a scanner profile,
+    * CLASS_OUTPUT for a printer)
+    */
+   public int getProfileClass()
+   {
+     return header.getProfileClass();
+   }
+ 
+   /**
+    * Returns the color space of this profile, in terms
+    * of the color space constants defined in ColorSpace.
+    * (For example, it may be a ColorSpace.TYPE_RGB)
+    */
+   public int getColorSpaceType()
+   {
+     return header.getColorSpace();
+   }
+ 
+   /**
+    * Returns the color space of this profile's Profile Connection Space (OCS)
+    *
+    * In terms of the color space constants defined in ColorSpace.
+    * This may be TYPE_XYZ or TYPE_Lab
+    */
+   public int getPCSType()
+   {
+     return header.getProfileColorSpace();
+   }
+ 
+   /**
+    * Writes the profile data to an ICC profile file.
+    * @param filename - The name of the file to write
+    * @throws IOException if the write failed.
+    */
+   public void write(String filename) throws IOException
+   {
+     FileOutputStream out = new FileOutputStream(filename);
+     write(out);
+     out.flush();
+     out.close();
+   }
+ 
+   /**
+    * Writes the profile data in ICC profile file-format to a stream.
+    * This is useful for embedding ICC profiles in file formats which
+    * support this (such as JPEG and SVG).
+    *
+    * The stream is not closed after writing.
+    * @param out - The outputstream to which the profile data should be written
+    * @throws IOException if the write failed.
+    */
+   public void write(OutputStream out) throws IOException
+   {
+     out.write(getData());
+   }
+ 
+   /**
+    * Returns the data corresponding to this ICC_Profile as a byte array.
+    *
+    * @return The data in a byte array,
+    * where the first element corresponds to first byte of the profile file.
+    */
+   public byte[] getData()
+   {
+     int size = getSize();
+     byte[] data = new byte[size];
+ 
+     // Header
+     System.arraycopy(header.getData(size), 0, data, 0, ProfileHeader.HEADERSIZE);
+     // # of tags
+     byte[] tt = getTagTable();
+     System.arraycopy(tt, 0, data, ProfileHeader.HEADERSIZE, tt.length);
+ 
+     Enumeration e = tagTable.elements();
+     while (e.hasMoreElements())
+       {
+ 	TagEntry tag = (TagEntry) e.nextElement();
+ 	System.arraycopy(tag.getData(), 0, 
+ 			 data, tag.getOffset(), tag.getSize());
+       }
+     return data;
+   }
+ 
+   /**
+    * Returns the ICC profile tag data
+    * The non ICC-tag icSigHead is also permitted to request the header data.
+    *
+    * @param tagSignature The ICC signature of the requested tag
+    * @return A byte array containing the tag data
+    */
+   public byte[] getData(int tagSignature)
+   {
+     if (tagSignature == icSigHead)
+       return header.getData(getSize());
+ 
+     TagEntry t = (TagEntry) tagTable.get(TagEntry.tagHashKey(tagSignature));
+     if (t == null)
+       return null;
+     return t.getData();
+   }
+ 
+   /**
+    * Sets the ICC profile tag data.
+    *
+    * Note that an ICC profile can only contain one tag of each type, if
+    * a tag already exists with the given signature, it is replaced.
+    *
+    * @param tagSignature - The signature of the tag to set
+    * @param data - A byte array containing the tag data
+    */
+   public void setData(int tagSignature, byte[] data)
+   {
+     profileID = -1; // Not a predefined color space if modified.
+ 
+     if (tagSignature == icSigHead)
+       header = new ProfileHeader(data);
+     else
+       {
+ 	TagEntry t = new TagEntry(tagSignature, data);
+ 	tagTable.put(t.hashKey(), t);
+       }
+   }
+ 
+   /**
+    * Get the number of components in the profile's device color space.
+    */
+   public int getNumComponents()
+   {
+     int[] lookup = 
+                    {
+                      ColorSpace.TYPE_RGB, 3, ColorSpace.TYPE_CMY, 3,
+                      ColorSpace.TYPE_CMYK, 4, ColorSpace.TYPE_GRAY, 1,
+                      ColorSpace.TYPE_YCbCr, 3, ColorSpace.TYPE_XYZ, 3,
+                      ColorSpace.TYPE_Lab, 3, ColorSpace.TYPE_HSV, 3,
+                      ColorSpace.TYPE_2CLR, 2, ColorSpace.TYPE_Luv, 3,
+                      ColorSpace.TYPE_Yxy, 3, ColorSpace.TYPE_HLS, 3,
+                      ColorSpace.TYPE_3CLR, 3, ColorSpace.TYPE_4CLR, 4,
+                      ColorSpace.TYPE_5CLR, 5, ColorSpace.TYPE_6CLR, 6,
+                      ColorSpace.TYPE_7CLR, 7, ColorSpace.TYPE_8CLR, 8,
+                      ColorSpace.TYPE_9CLR, 9, ColorSpace.TYPE_ACLR, 10,
+                      ColorSpace.TYPE_BCLR, 11, ColorSpace.TYPE_CCLR, 12,
+                      ColorSpace.TYPE_DCLR, 13, ColorSpace.TYPE_ECLR, 14,
+                      ColorSpace.TYPE_FCLR, 15
+                    };
+     for (int i = 0; i < lookup.length; i += 2)
+       if (header.getColorSpace() == lookup[i])
+ 	return lookup[i + 1];
+     return 3; // should never happen.
+   }
+ 
+   /**
+    * After deserializing we must determine if the class we want
+    * is really one of the more specialized ICC_ProfileRGB or
+    * ICC_ProfileGray classes.
+    */
+   protected Object readResolve() throws ObjectStreamException
+   {
+     if (isRGBProfile(header, tagTable))
+       return new ICC_ProfileRGB(getData());
+     if (isGrayProfile(header, tagTable))
+       return new ICC_ProfileGray(getData());
+     return this;
+   }
+ 
+   /**
+    * Deserializes an instance
+    */
+   private void readObject(ObjectInputStream s)
+                    throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     String predef = (String) s.readObject();
+     byte[] data = (byte[]) s.readObject();
+ 
+     if (data != null)
+       {
+ 	header = new ProfileHeader(data);
+ 	tagTable = createTagTable(data);
+ 	profileID = -1; // Not a predefined color space
+       }
+ 
+     if (predef != null)
+       {
+ 	predef = predef.intern();
+ 	if (predef.equals("CS_sRGB"))
+ 	  createProfile(ColorSpace.CS_sRGB);
+ 	if (predef.equals("CS_LINEAR_RGB"))
+ 	  createProfile(ColorSpace.CS_LINEAR_RGB);
+ 	if (predef.equals("CS_CIEXYZ"))
+ 	  createProfile(ColorSpace.CS_CIEXYZ);
+ 	if (predef.equals("CS_GRAY"))
+ 	  createProfile(ColorSpace.CS_GRAY);
+ 	if (predef.equals("CS_PYCC"))
+ 	  createProfile(ColorSpace.CS_PYCC);
+       }
+   }
+ 
+   /**
+    * Serializes an instance
+    * The format is a String and a byte array,
+    * The string is non-null if the instance is one of the built-in profiles.
+    * Otherwise the byte array is non-null and represents the profile data.
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     s.defaultWriteObject();
+     if (profileID == ColorSpace.CS_sRGB)
+       s.writeObject("CS_sRGB");
+     else if (profileID == ColorSpace.CS_LINEAR_RGB)
+       s.writeObject("CS_LINEAR_RGB");
+     else if (profileID == ColorSpace.CS_CIEXYZ)
+       s.writeObject("CS_CIEXYZ");
+     else if (profileID == ColorSpace.CS_GRAY)
+       s.writeObject("CS_GRAY");
+     else if (profileID == ColorSpace.CS_PYCC)
+       s.writeObject("CS_PYCC");
+     else
+       {
+ 	s.writeObject(null); // null string
+ 	s.writeObject(getData()); // data
+ 	return;
+       }
+     s.writeObject(null); // null data
+   }
+ 
+   /**
+    * Sorts a ICC profile byte array into TagEntry objects stored in
+    * a hash table.
+    */
+   private static Hashtable createTagTable(byte[] data)
+                                    throws IllegalArgumentException
+   {
+     ByteBuffer buf = ByteBuffer.wrap(data);
+     int nTags = buf.getInt(tagTableOffset);
+ 
+     Hashtable tagTable = new Hashtable();
+     for (int i = 0; i < nTags; i++)
+       {
+ 	TagEntry te = new TagEntry(buf.getInt(tagTableOffset
+ 	                                      + i * TagEntry.entrySize + 4),
+ 	                           buf.getInt(tagTableOffset
+ 	                                      + i * TagEntry.entrySize + 8),
+ 	                           buf.getInt(tagTableOffset
+ 	                                      + i * TagEntry.entrySize + 12),
+ 	                           data);
+ 
+ 	if (tagTable.put(te.hashKey(), te) != null)
+ 	  throw new IllegalArgumentException("Duplicate tag in profile:" + te);
+       }
+     return tagTable;
+   }
+ 
+   /**
+    * Returns the total size of the padded, stored data
+    * Note: Tags must be stored on 4-byte aligned offsets.
+    */
+   private int getSize()
+   {
+     int totalSize = ProfileHeader.HEADERSIZE; // size of header
+ 
+     int tagTableSize = 4 + tagTable.size() * TagEntry.entrySize; // size of tag table	
+     if ((tagTableSize & 0x0003) != 0)
+       tagTableSize += 4 - (tagTableSize & 0x0003); // pad
+     totalSize += tagTableSize;
+ 
+     Enumeration e = tagTable.elements();
+     while (e.hasMoreElements())
+       { // tag data
+ 	int tagSize = ((TagEntry) e.nextElement()).getSize();
+ 	if ((tagSize & 0x0003) != 0)
+ 	  tagSize += 4 - (tagSize & 0x0003); // pad
+ 	totalSize += tagSize;
+       }
+     return totalSize;
+   }
+ 
+   /**
+    * Generates the tag index table
+    */
+   private byte[] getTagTable()
+   {
+     int tagTableSize = 4 + tagTable.size() * TagEntry.entrySize;
+     if ((tagTableSize & 0x0003) != 0)
+       tagTableSize += 4 - (tagTableSize & 0x0003); // pad 
+ 
+     int offset = 4;
+     int tagOffset = ProfileHeader.HEADERSIZE + tagTableSize;
+     ByteBuffer buf = ByteBuffer.allocate(tagTableSize);
+     buf.putInt(tagTable.size()); // number of tags
+ 
+     Enumeration e = tagTable.elements();
+     while (e.hasMoreElements())
+       {
+ 	TagEntry tag = (TagEntry) e.nextElement();
+ 	buf.putInt(offset, tag.getSignature());
+ 	buf.putInt(offset + 4, tagOffset);
+ 	buf.putInt(offset + 8, tag.getSize());
+ 	tag.setOffset(tagOffset);
+ 	int tagSize = tag.getSize();
+ 	if ((tagSize & 0x0003) != 0)
+ 	  tagSize += 4 - (tagSize & 0x0003); // pad	    
+ 	tagOffset += tagSize;
+ 	offset += 12;
+       }
+     return buf.array();
+   }
+ 
+   /**
+    * Returns if the criteria for an ICC_ProfileRGB are met.
+    * This means:
+    * Color space is TYPE_RGB
+    * (r,g,b)ColorantTags included
+    * (r,g,b)TRCTags included
+    * mediaWhitePointTag included
+    */
+   private static boolean isRGBProfile(ProfileHeader header, Hashtable tags)
+   {
+     if (header.getColorSpace() != ColorSpace.TYPE_RGB)
+       return false;
+     if (tags.get(TagEntry.tagHashKey(icSigRedColorantTag)) == null)
+       return false;
+     if (tags.get(TagEntry.tagHashKey(icSigGreenColorantTag)) == null)
+       return false;
+     if (tags.get(TagEntry.tagHashKey(icSigBlueColorantTag)) == null)
+       return false;
+     if (tags.get(TagEntry.tagHashKey(icSigRedTRCTag)) == null)
+       return false;
+     if (tags.get(TagEntry.tagHashKey(icSigGreenTRCTag)) == null)
+       return false;
+     if (tags.get(TagEntry.tagHashKey(icSigBlueTRCTag)) == null)
+       return false;
+     return (tags.get(TagEntry.tagHashKey(icSigMediaWhitePointTag)) != null);
+   }
+ 
+   /**
+    * Returns if the criteria for an ICC_ProfileGray are met.
+    * This means:
+    * Colorspace is TYPE_GRAY
+    * grayTRCTag included
+    * mediaWhitePointTag included
+    */
+   private static boolean isGrayProfile(ProfileHeader header, Hashtable tags)
+   {
+     if (header.getColorSpace() != ColorSpace.TYPE_GRAY)
+       return false;
+     if (tags.get(TagEntry.tagHashKey(icSigGrayTRCTag)) == null)
+       return false;
+     return (tags.get(TagEntry.tagHashKey(icSigMediaWhitePointTag)) != null);
+   }
+ 
+   /**
+    * Returns curve data for a 'curv'-type tag
+    * If it's a gamma curve, a single entry will be returned with the
+    * gamma value (including 1.0 for linear response)
+    * Otherwise the TRC table is returned.
+    *
+    * (Package private - used by ICC_ProfileRGB and ICC_ProfileGray)
+    */
+   short[] getCurve(int signature)
+   {
+     byte[] data = getData(signature);
+     short[] curve;
+ 
+     // can't find tag?
+     if (data == null)
+       return null;
+ 
+     // not an curve type tag?
+     ByteBuffer buf = ByteBuffer.wrap(data);
+     if (buf.getInt(0) != 0x63757276) // 'curv' type
+       return null;
+     int count = buf.getInt(8);
+     if (count == 0)
+       {
+ 	curve = new short[1];
+ 	curve[0] = 0x0100; // 1.00 in u8fixed8
+ 	return curve;
+       }
+     if (count == 1)
+       {
+ 	curve = new short[1];
+ 	curve[0] = buf.getShort(12); // other u8fixed8 gamma
+ 	return curve;
+       }
+     curve = new short[count];
+     for (int i = 0; i < count; i++)
+       curve[i] = buf.getShort(12 + i * 2);
+     return curve;
+   }
+ 
+   /**
+    * Returns XYZ tristimulus values for an 'XYZ ' type tag
+    * @return the XYZ values, or null if the tag was not an 'XYZ ' type tag.
+    *
+    * (Package private - used by ICC_ProfileXYZ and ICC_ProfileGray)
+    */
+   float[] getXYZData(int signature)
+   {
+     byte[] data = getData(signature);
+ 
+     // can't find tag?
+     if (data == null)
+       return null;
+ 
+     // not an XYZData type tag?
+     ByteBuffer buf = ByteBuffer.wrap(data);
+     if (buf.getInt(0) != icSigXYZData) // 'XYZ ' type
+       return null;
+ 
+     float[] point = new float[3];
+ 
+     // get the X,Y,Z tristimulus values
+     point[0] = ((float) buf.getInt(8)) / 65536f;
+     point[1] = ((float) buf.getInt(12)) / 65536f;
+     point[2] = ((float) buf.getInt(16)) / 65536f;
+     return point;
+   }
+ 
+   /**
+    * Returns the profile ID if it's a predefined profile
+    * Or -1 for a profile loaded from an ICC profile
+    *
+    * (Package private - used by ICC_ColorSpace)
+    */
+   int isPredefined()
+   {
+     return profileID;
+   }
+ 
+   /**
+    * Creates a tag of XYZ-value type.
+    */
+   private byte[] makeXYZData(float[] values)
+   {
+     ByteBuffer buf = ByteBuffer.allocate(20);
+     buf.putInt(0, icSigXYZData); // 'XYZ '
+     buf.putInt(4, 0);
+     buf.putInt(8, (int) (values[0] * 65536.0));
+     buf.putInt(12, (int) (values[1] * 65536.0));
+     buf.putInt(16, (int) (values[2] * 65536.0));
+     return buf.array();
+   }
+ 
+   /**
+    * Creates a tag of text type
+    */
+   private byte[] makeTextTag(String text)
+   {
+     int length = text.length();
+     ByteBuffer buf = ByteBuffer.allocate(8 + length + 1);
+     byte[] data;
+     try
+       {
+ 	data = text.getBytes("US-ASCII");
+       }
+     catch (UnsupportedEncodingException e)
+       {
+ 	data = new byte[length]; // shouldn't happen
+       }
+ 
+     buf.putInt(0, (int) 0x74657874); // 'text'
+     buf.putInt(4, 0);
+     for (int i = 0; i < length; i++)
+       buf.put(8 + i, data[i]);
+     buf.put(8 + length, (byte) 0); // null-terminate
+     return buf.array();
+   }
+ 
+   /**
+    * Creates a tag of textDescriptionType
+    */
+   private byte[] makeDescTag(String text)
+   {
+     int length = text.length();
+     ByteBuffer buf = ByteBuffer.allocate(90 + length + 1);
+     buf.putInt(0, (int) 0x64657363); // 'desc'
+     buf.putInt(4, 0); // reserved 
+     buf.putInt(8, length + 1); // ASCII length, including null termination
+     byte[] data;
+ 
+     try
+       {
+ 	data = text.getBytes("US-ASCII");
+       }
+     catch (UnsupportedEncodingException e)
+       {
+ 	data = new byte[length]; // shouldn't happen
+       }
+ 
+     for (int i = 0; i < length; i++)
+       buf.put(12 + i, data[i]);
+     buf.put(12 + length, (byte) 0); // null-terminate
+ 
+     for (int i = 0; i < 39; i++)
+       buf.putShort(13 + length + (i * 2), (short) 0); // 78 bytes we can ignore
+ 
+     return buf.array();
+   }
+ 
+   /**
+    * Creates a tag of TRC type (linear curve)
+    */
+   private byte[] makeTRC()
+   {
+     ByteBuffer buf = ByteBuffer.allocate(12);
+     buf.putInt(0, 0x63757276); // 'curv' type
+     buf.putInt(4, 0); // reserved
+     buf.putInt(8, 0);
+     return buf.array();
+   }
+ 
+   /**
+    * Creates a tag of TRC type (single gamma value)
+    */
+   private byte[] makeTRC(float gamma)
+   {
+     short gammaValue = (short) (gamma * 256f);
+     ByteBuffer buf = ByteBuffer.allocate(14);
+     buf.putInt(0, 0x63757276); // 'curv' type
+     buf.putInt(4, 0); // reserved
+     buf.putInt(8, 1);
+     buf.putShort(12, gammaValue); // 1.00 in u8fixed8
+     return buf.array();
+   }
+ 
+   /**
+    * Creates a tag of TRC type (TRC curve points)
+    */
+   private byte[] makeTRC(float[] trc)
+   {
+     ByteBuffer buf = ByteBuffer.allocate(12 + 2 * trc.length);
+     buf.putInt(0, 0x63757276); // 'curv' type
+     buf.putInt(4, 0); // reserved
+     buf.putInt(8, trc.length); // number of points
+ 
+     // put the curve values 
+     for (int i = 0; i < trc.length; i++)
+       buf.putShort(12 + i * 2, (short) (trc[i] * 65535f));
+ 
+     return buf.array();
+   }
+ 
+   /**
+    * Creates an identity color lookup table.
+    */
+   private byte[] makeIdentityClut()
+   {
+     final int nIn = 3;
+     final int nOut = 3;
+     final int nInEntries = 256;
+     final int nOutEntries = 256;
+     final int gridpoints = 16;
+ 
+     // gridpoints**nIn
+     final int clutSize = 2 * nOut * gridpoints * gridpoints * gridpoints;
+     final int totalSize = clutSize + 2 * nInEntries * nIn
+                           + 2 * nOutEntries * nOut + 52;
+ 
+     ByteBuffer buf = ByteBuffer.allocate(totalSize);
+     buf.putInt(0, 0x6D667432); // 'mft2'
+     buf.putInt(4, 0); // reserved
+     buf.put(8, (byte) nIn); // number input channels
+     buf.put(9, (byte) nOut); // number output channels
+     buf.put(10, (byte) gridpoints); // number gridpoints
+     buf.put(11, (byte) 0); // padding
+ 
+     // identity matrix
+     buf.putInt(12, 65536); // = 1 in s15.16 fixed point
+     buf.putInt(16, 0);
+     buf.putInt(20, 0);
+     buf.putInt(24, 0);
+     buf.putInt(28, 65536);
+     buf.putInt(32, 0);
+     buf.putInt(36, 0);
+     buf.putInt(40, 0);
+     buf.putInt(44, 65536);
+ 
+     buf.putShort(48, (short) nInEntries); // input table entries
+     buf.putShort(50, (short) nOutEntries); // output table entries
+ 
+     // write the linear input channels, unsigned 16.16 fixed point,
+     // from 0.0 to FF.FF
+     for (int channel = 0; channel < 3; channel++)
+       for (int i = 0; i < nInEntries; i++)
+         {
+ 	  short n = (short) ((i << 8) | i); // assumes 256 entries
+ 	  buf.putShort(52 + (channel * nInEntries + i) * 2, n);
+         }
+     int clutOffset = 52 + nInEntries * nIn * 2;
+ 
+     for (int x = 0; x < gridpoints; x++)
+       for (int y = 0; y < gridpoints; y++)
+ 	for (int z = 0; z < gridpoints; z++)
+ 	  {
+ 	    int offset = clutOffset + z * 2 * nOut + y * gridpoints * 2 * nOut
+ 	                 + x * gridpoints * gridpoints * 2 * nOut;
+ 	    double xf = ((double) x) / ((double) gridpoints - 1.0);
+ 	    double yf = ((double) y) / ((double) gridpoints - 1.0);
+ 	    double zf = ((double) z) / ((double) gridpoints - 1.0);
+ 	    buf.putShort(offset, (short) (xf * 65535.0));
+ 	    buf.putShort(offset + 2, (short) (yf * 65535.0));
+ 	    buf.putShort(offset + 4, (short) (zf * 65535.0));
+ 	  }
+ 
+     for (int channel = 0; channel < 3; channel++)
+       for (int i = 0; i < nOutEntries; i++)
+         {
+ 	  short n = (short) ((i << 8) | i); // assumes 256 entries
+ 	  buf.putShort(clutOffset + clutSize + (channel * nOutEntries + i) * 2,
+ 	               n);
+         }
+ 
+     return buf.array();
+   }
+ 
+   /**
+    * Creates profile data corresponding to the built-in colorspaces.
+    */
+   private void createProfile(int colorSpace) throws IllegalArgumentException
+   {
+     this.profileID = colorSpace;
+     header = new ProfileHeader();
+     tagTable = new Hashtable();
+ 
+     switch (colorSpace)
+       {
+       case ColorSpace.CS_sRGB:
+ 	createRGBProfile();
+ 	return;
+       case ColorSpace.CS_LINEAR_RGB:
+ 	createLinearRGBProfile();
+ 	return;
+       case ColorSpace.CS_CIEXYZ:
+ 	createCIEProfile();
+ 	return;
+       case ColorSpace.CS_GRAY:
+ 	createGrayProfile();
+ 	return;
+       case ColorSpace.CS_PYCC:
+ 	createPyccProfile();
+ 	return;
+       default:
+ 	throw new IllegalArgumentException("Not a predefined color space!");
+       }
+   }
+ 
+   /**
+    * Creates an ICC_Profile representing the sRGB color space
+    */
+   private void createRGBProfile()
+   {
+     header.setColorSpace( ColorSpace.TYPE_RGB );
+     header.setProfileColorSpace( ColorSpace.TYPE_XYZ );
+     ICC_ColorSpace cs = new ICC_ColorSpace(this);
+ 
+     float[] r = { 1f, 0f, 0f };
+     float[] g = { 0f, 1f, 0f };
+     float[] b = { 0f, 0f, 1f };
+     float[] black = { 0f, 0f, 0f };
+ 
+     // CIE 1931 D50 white point (in Lab coordinates)
+     float[] white = D50;
+ 
+     // Get tristimulus values (matrix elements)
+     r = cs.toCIEXYZ(r);
+     g = cs.toCIEXYZ(g);
+     b = cs.toCIEXYZ(b);
+ 
+     // Generate the sRGB TRC curve, this is the linear->nonlinear
+     // RGB transform.
+     cs = new ICC_ColorSpace(getInstance(ICC_ColorSpace.CS_LINEAR_RGB));
+     float[] points = new float[TRC_POINTS];
+     float[] in = new float[3];
+     for (int i = 0; i < TRC_POINTS; i++)
+       {
+ 	in[0] = in[1] = in[2] = ((float) i) / ((float) TRC_POINTS - 1);
+ 	in = cs.fromRGB(in);
+ 	// Note this value is the same for all components.
+ 	points[i] = in[0];
+       }
+ 
+     setData(icSigRedColorantTag, makeXYZData(r));
+     setData(icSigGreenColorantTag, makeXYZData(g));
+     setData(icSigBlueColorantTag, makeXYZData(b));
+     setData(icSigMediaWhitePointTag, makeXYZData(white));
+     setData(icSigMediaBlackPointTag, makeXYZData(black));
+     setData(icSigRedTRCTag, makeTRC(points));
+     setData(icSigGreenTRCTag, makeTRC(points));
+     setData(icSigBlueTRCTag, makeTRC(points));
+     setData(icSigCopyrightTag, makeTextTag(copyrightNotice));
+     setData(icSigProfileDescriptionTag, makeDescTag("Generic sRGB"));
+     this.profileID = ColorSpace.CS_sRGB;
+   }
+ 
+   /**
+    * Creates an linear sRGB profile
+    */
+   private void createLinearRGBProfile()
+   {
+     header.setColorSpace(ColorSpace.TYPE_RGB);
+     header.setProfileColorSpace(ColorSpace.TYPE_XYZ);
+     ICC_ColorSpace cs = new ICC_ColorSpace(this);
+ 
+     float[] r = { 1f, 0f, 0f };
+     float[] g = { 0f, 1f, 0f };
+     float[] b = { 0f, 0f, 1f };
+     float[] black = { 0f, 0f, 0f };
+ 
+     float[] white = D50;
+ 
+     // Get tristimulus values (matrix elements)
+     r = cs.toCIEXYZ(r);
+     g = cs.toCIEXYZ(g);
+     b = cs.toCIEXYZ(b);
+ 
+     setData(icSigRedColorantTag, makeXYZData(r));
+     setData(icSigGreenColorantTag, makeXYZData(g));
+     setData(icSigBlueColorantTag, makeXYZData(b));
+ 
+     setData(icSigMediaWhitePointTag, makeXYZData(white));
+     setData(icSigMediaBlackPointTag, makeXYZData(black));
+ 
+     setData(icSigRedTRCTag, makeTRC());
+     setData(icSigGreenTRCTag, makeTRC());
+     setData(icSigBlueTRCTag, makeTRC());
+     setData(icSigCopyrightTag, makeTextTag(copyrightNotice));
+     setData(icSigProfileDescriptionTag, makeDescTag("Linear RGB"));
+     this.profileID = ColorSpace.CS_LINEAR_RGB;
+   }
+ 
+   /**
+    * Creates an CIE XYZ identity profile
+    */
+   private void createCIEProfile()
+   {
+     header.setColorSpace( ColorSpace.TYPE_XYZ );
+     header.setProfileColorSpace( ColorSpace.TYPE_XYZ );
+     header.setProfileClass( CLASS_COLORSPACECONVERSION );
+     ICC_ColorSpace cs = new ICC_ColorSpace(this);
+ 
+     float[] white = D50;
+ 
+     setData(icSigMediaWhitePointTag, makeXYZData(white));
+     setData(icSigAToB0Tag, makeIdentityClut());
+     setData(icSigBToA0Tag, makeIdentityClut());
+     setData(icSigCopyrightTag, makeTextTag(copyrightNotice));
+     setData(icSigProfileDescriptionTag, makeDescTag("CIE XYZ identity profile"));
+     this.profileID = ColorSpace.CS_CIEXYZ;
+   }
+ 
+   /**
+    * Creates a linear gray ICC_Profile
+    */
+   private void createGrayProfile()
+   {
+     header.setColorSpace(ColorSpace.TYPE_GRAY);
+     header.setProfileColorSpace(ColorSpace.TYPE_XYZ);
+ 
+     // CIE 1931 D50 white point (in Lab coordinates)
+     float[] white = D50;
+ 
+     setData(icSigMediaWhitePointTag, makeXYZData(white));
+     setData(icSigGrayTRCTag, makeTRC(1.0f));
+     setData(icSigCopyrightTag, makeTextTag(copyrightNotice));
+     setData(icSigProfileDescriptionTag, makeDescTag("Linear grayscale"));
+     this.profileID = ColorSpace.CS_GRAY;
+   }
+ 
+   /**
+    * XXX Implement me
+    */
+   private void createPyccProfile()
+   {
+     header.setColorSpace(ColorSpace.TYPE_3CLR);
+     header.setProfileColorSpace(ColorSpace.TYPE_XYZ);
+ 
+     // Create CLUTs here. :-)
+ 
+     setData(icSigCopyrightTag, makeTextTag(copyrightNotice));
+     setData(icSigProfileDescriptionTag, makeDescTag("Photo YCC"));
+     this.profileID = ColorSpace.CS_PYCC;
+   }
+ } // class ICC_Profile
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/color/ICC_ProfileGray.java gcc-4.1.0/libjava/classpath/java/awt/color/ICC_ProfileGray.java
*** gcc-4.0.2/libjava/classpath/java/awt/color/ICC_ProfileGray.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/color/ICC_ProfileGray.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,133 ----
+ /* ICC_ProfileGray.java -- the ICC profile for a Gray colorspace
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.color;
+ 
+ /**
+  * ICC_ProfileGray - a special case of ICC_Profiles.
+  *
+  * The ICC_Profile.getInstance() method will return an instance of the 
+  * ICC_ProfileGray subclass when all the following conditions are met:
+  * The device color space of the profile is TYPE_GRAY.
+  * The profile contains a gray TRCTag.
+  * The profile contains a mediaWhitePointTag.
+  *
+  * As per the ICC specification, the color space conversion can then
+  * be done through the following method:
+  * linearGray = grayTRC[deviceGray]
+  *
+  * Note that if the profile contains a CLUT for the color space conversion,
+  * it should be used instead, and the TRC information ignored. 
+  *
+  * @author Sven de Marothy
+  * @since 1.2
+  */
+ public class ICC_ProfileGray extends ICC_Profile
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -1124721290732002649L;
+   private transient float[] whitePoint;
+ 
+   /**
+    * Package-private constructor used by ICC_ColorSpace for creating an
+    * ICC_ProfileGray from a predefined ColorSpace (CS_GRAY)
+    */
+   ICC_ProfileGray(int cspace)
+   {
+     super(cspace);
+     whitePoint = getXYZData(icSigMediaWhitePointTag);
+   }
+ 
+   /**
+    * Package-private constructor used by ICC_ColorSpace for creating an
+    * ICC_ProfileGray from profile data.
+    */
+   ICC_ProfileGray(byte[] data)
+   {
+     super(data);
+     whitePoint = getXYZData(icSigMediaWhitePointTag);
+   }
+ 
+ 
+   /**
+    * Returns the media white point of the profile.
+    */
+   public float[] getMediaWhitePoint()
+   {
+     float[] wp = new float[3];
+     wp[0] = whitePoint[0];
+     wp[1] = whitePoint[1];
+     wp[2] = whitePoint[2];
+     return wp;
+   }
+ 
+   /**
+    * Returns the TRC gamma value.
+    * @throws ProfileDataException if the TRC is described by a lookup
+    * table and not a gamma value.
+    */
+   public float getGamma()
+   {
+     short[] data = getCurve(icSigGrayTRCTag);
+     if (data == null)
+       throw new IllegalArgumentException("Couldn't read Gray TRC data.");
+     if (data.length != 1)
+       throw new ProfileDataException("TRC is a table, not a gamma value.");
+ 
+     // convert the unsigned 7.8 fixed-point gamma to a float.
+     double gamma = (double) (data[0] & (0xFFFF)) / 256.0;
+     return (float) gamma;
+   }
+ 
+   /**
+    * Returns the TRC lookup table.
+    * @throws ProfileDataException if the TRC is described by a gamma value
+    * and not a lookup table.
+    */
+   public short[] getTRC()
+   {
+     short[] data = getCurve(icSigGrayTRCTag);
+     if (data == null)
+       throw new IllegalArgumentException("Couldn't read Gray TRC data.");
+     if (data.length <= 1)
+       throw new ProfileDataException("Gamma value, not a TRC table.");
+     return data;
+   }
+ } // class ICC_ProfileGray
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/color/ICC_ProfileRGB.java gcc-4.1.0/libjava/classpath/java/awt/color/ICC_ProfileRGB.java
*** gcc-4.0.2/libjava/classpath/java/awt/color/ICC_ProfileRGB.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/color/ICC_ProfileRGB.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,227 ----
+ /* ICC_ProfileRGB.java -- the ICC profile for a RGB colorspace
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.color;
+ 
+ /**
+  * ICC_ProfileRGB - a special case of ICC_Profiles.
+  *
+  * The ICC_Profile.getInstance() method will return an instance of the 
+  * ICC_ProfileRGB subclass when all the following conditions are met:
+  * The device color space of the profile is TYPE_RGB.
+  * The profile contains red, green and blue ColorantTags.
+  * The profile contains red, green and blue TRCTags.
+  * The profile contains a mediaWhitePointTag included.
+  *
+  * As per the ICC specification, the color space conversion can then
+  * be done through the following method:
+  * linearR = redTRC[deviceR]
+  * linearG = greenTRC[deviceG]
+  * linearB = blueTRC[deviceB]
+  * TRC curves are either a single gamma value, or a 1-dimensional lookup table.
+  * 
+  * Followed by the matrix transform:
+  * PCS = M*linear
+  *
+  * Where PCS is the vector of profile color space (must be XYZ) coordinates,
+  * linear is the vector of linear RGB coordinates, and the matrix M is 
+  * constructed from the ColorantTags, where the columns are red, green and
+  * blue respectively, and the rows are X, Y and Z.
+  *
+  * Note that if the profile contains a CLUT for the color space conversion,
+  * it should be used instead, and the TRC information ignored. 
+  *
+  * @author Sven de Marothy
+  * @since 1.2
+  */
+ public class ICC_ProfileRGB extends ICC_Profile
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 8505067385152579334L;
+ 
+   public static final int REDCOMPONENT = 0;
+ 
+   public static final int GREENCOMPONENT = 1;
+ 
+   public static final int BLUECOMPONENT = 2;
+ 
+   private transient float[][] matrix;
+ 
+   private transient float[] gamma;
+ 
+   private transient float[] whitePoint;
+ 
+ 
+   /**
+    * Package-private constructor used by ICC_ColorSpace for creating an
+    * ICC_ProfileRGB from a predefined ColorSpace (CS_LINEAR_RGB and CS_sRGB)
+    */
+   ICC_ProfileRGB(int cspace)
+   {
+     super(cspace);
+     matrix = createMatrix();
+     whitePoint = getXYZData(icSigMediaWhitePointTag);
+   }
+ 
+   /**
+    * Package-private constructor used by ICC_ColorSpace for creating an
+    * ICC_ProfileRGB from profile data.
+    */
+   ICC_ProfileRGB(byte[] data)
+   {
+     super(data);
+     matrix = createMatrix();
+     whitePoint = getXYZData(icSigMediaWhitePointTag);
+   }
+ 
+   /**
+    * Returns the media white point of the profile.
+    */
+   public float[] getMediaWhitePoint()
+   {
+     float[] wp = new float[3];
+     wp[0] = whitePoint[0];
+     wp[1] = whitePoint[1];
+     wp[2] = whitePoint[2];
+     return wp;
+   }
+ 
+   /**
+    * Returns the colorant matrix of the conversion.
+    */
+   public float[][] getMatrix()
+   {
+     float[][] mat = new float[3][3];
+     for (int i = 0; i < 3; i++)
+       for (int j = 0; j < 3; j++)
+ 	mat[i][j] = matrix[i][j];
+     return mat;
+   }
+ 
+   /**
+    * Returns the gamma value of a component
+    * @throws ProfileDataException if the TRC is described by a lookup
+    * table and not a gamma value.
+    */
+   public float getGamma(int component)
+   {
+     short[] data;
+     switch (component)
+       {
+       case REDCOMPONENT:
+ 	data = getCurve(icSigRedTRCTag);
+ 	break;
+       case GREENCOMPONENT:
+ 	data = getCurve(icSigGreenTRCTag);
+ 	break;
+       case BLUECOMPONENT:
+ 	data = getCurve(icSigBlueTRCTag);
+ 	break;
+       default:
+ 	throw new IllegalArgumentException("Not a valid component");
+       }
+     if (data == null)
+       throw new IllegalArgumentException("Error reading TRC");
+ 
+     if (data.length != 1)
+       throw new ProfileDataException("Not a single-gamma TRC");
+ 
+     // convert the unsigned 7.8 fixed-point gamma to a float.
+     float gamma = (float) (((int) data[0] & 0xFF00) >> 8);
+     double fraction = ((int) data[0] & 0x00FF) / 256.0;
+     gamma += (float) fraction;
+     return gamma;
+   }
+ 
+   /**
+    * Returns the TRC lookup table for a component
+    * @throws ProfileDataException if the TRC is described by a gamma
+    * value and not a lookup table.
+    */
+   public short[] getTRC(int component)
+   {
+     short[] data;
+     switch (component)
+       {
+       case REDCOMPONENT:
+ 	data = getCurve(icSigRedTRCTag);
+ 	break;
+       case GREENCOMPONENT:
+ 	data = getCurve(icSigGreenTRCTag);
+ 	break;
+       case BLUECOMPONENT:
+ 	data = getCurve(icSigBlueTRCTag);
+ 	break;
+       default:
+ 	throw new IllegalArgumentException("Not a valid component");
+       }
+     if (data == null)
+       throw new IllegalArgumentException("Error reading TRC");
+ 
+     if (data.length <= 1)
+       throw new ProfileDataException("Gamma value, not a TRC table.");
+ 
+     return data;
+   }
+ 
+   /**
+    * Creates the colorspace conversion matrix from the RGB tristimulus
+    * values.
+    */
+   private float[][] createMatrix() throws IllegalArgumentException
+   {
+     float[][] mat = new float[3][3];
+     float[] r;
+     float[] g;
+     float[] b;
+     r = getXYZData(icSigRedColorantTag);
+     g = getXYZData(icSigGreenColorantTag);
+     b = getXYZData(icSigBlueColorantTag);
+     if (r == null || g == null || b == null)
+       throw new IllegalArgumentException("Error reading colorant tags!");
+     for (int i = 0; i < 3; i++)
+       {
+ 	mat[i][0] = r[i];
+ 	mat[i][1] = g[i];
+ 	mat[i][2] = b[i];
+       }
+     return mat;
+   }
+ } // class ICC_ProfileRGB
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/color/ProfileDataException.java gcc-4.1.0/libjava/classpath/java/awt/color/ProfileDataException.java
*** gcc-4.0.2/libjava/classpath/java/awt/color/ProfileDataException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/color/ProfileDataException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* ProfileDataException.java -- error in processing an ICC_Profile
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.color;
+ 
+ /**
+   * Thrown when there is an error accessing or processing an
+   * <code>ICC_Profile</code>.
+   *
+   * @author Eric Blake (ebb9@email.byu.edu)
+   * @status updated to 1.4
+   */
+ public class ProfileDataException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 7286140888240322498L;
+ 
+   /**
+    * Create a new instance with a specified detailed error message.
+    *
+    * @param message the message
+    */
+   public ProfileDataException(String message)
+   {
+     super(message);
+   }
+ } // class ProfileDataException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/color/package.html gcc-4.1.0/libjava/classpath/java/awt/color/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/color/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/color/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.color package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.color</title></head>
+ 
+ <body>
+ <p>Classes to represent color spaces and profiles.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/Clipboard.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/Clipboard.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/Clipboard.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/Clipboard.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,207 ----
+ /* Clipboard.java -- Class for transferring data via cut and paste.
+    Copyright (C) 1999, 2001, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ import java.io.IOException;
+ import java.util.ArrayList;
+ 
+ /**
+  * This class allows data to be transferred using a cut and paste type
+  * mechanism.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Mark J. Wielaard (mark@klomp.org)
+  */
+ public class Clipboard
+ {
+   /**
+    * The data currently on this clipboard.  For use by
+    * subclasses. Also returned by the public method getContents().
+    */
+   protected Transferable contents;
+ 
+   /**
+    * The owner of this clipboard.
+    */
+   protected ClipboardOwner owner;
+ 
+   // The clipboard name
+   private final String name;
+ 
+   // The flavor listeners (most likely small).
+   private final ArrayList listeners = new ArrayList(3);
+ 
+   /**
+    * Initializes a new instance of <code>Clipboard</code> with the
+    * specified name.
+    *
+    * @param name The clipboard name.
+    */
+   public Clipboard(String name)
+   {
+     this.name = name;
+   }
+ 
+   /**
+     * Returns the name of the clipboard.
+     */
+   public String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Returns the contents of the clipboard.
+    *
+    * @param requestor The object requesting the contents. This
+    * implementation ignores this parameter.
+    *
+    * @exception IllegalStateException If the clipboard is currently unavailable
+    */
+   public synchronized Transferable getContents(Object requestor)
+   {
+     return contents;
+   }
+ 
+   /**
+    * Sets the content and owner of this clipboard.  If the given owner
+    * is different from the current owner then <code>lostOwnership()</code>
+    * is called on the current owner with the old contents of the given
+    * clipboard.
+    *
+    * @param contents The new clipboard contents.
+    * @param owner The new clipboard owner
+    *
+    * @exception IllegalStateException If the clipboard is currently unavailable
+    */
+   public synchronized void setContents(Transferable contents,
+ 				       ClipboardOwner owner)
+   {
+     Transferable oldContents = getContents(null);
+     this.contents = contents;
+     if (this.owner != owner)
+       {
+ 	ClipboardOwner oldOwner = this.owner;
+ 	this.owner = owner;
+ 	if (oldOwner != null)
+ 	  oldOwner.lostOwnership(this, oldContents);
+       }
+ 
+     FlavorListener[] fs = getFlavorListeners();
+     if (fs.length > 0)
+       {
+ 	// We are a bit optimistic here. We assume DataFlavors will be
+ 	// given in the same order. If the number of flavors is
+ 	// different or the order of the DataFlavors in the list then
+ 	// fire a change event.
+ 	boolean newFlavors = ((contents != null && oldContents == null)
+ 			      || (contents == null && oldContents != null));
+ 	if (!newFlavors && contents != null && oldContents != null)
+ 	  {
+ 	    DataFlavor[] df1 = contents.getTransferDataFlavors();
+ 	    DataFlavor[] df2 = oldContents.getTransferDataFlavors();
+ 	    newFlavors = df1.length != df2.length;
+ 	    
+ 	    for (int i = 0; !newFlavors && i < df1.length; i++)
+ 	      newFlavors = !df1[i].equals(df2[i]);
+ 	  }
+ 
+ 	if (newFlavors)
+ 	  {
+ 	    FlavorEvent e = new FlavorEvent(this);
+ 	    for (int i = 0; i < fs.length; i++)
+ 	      fs[i].flavorsChanged(e);
+ 	  }
+       }
+   }
+ 
+   public DataFlavor[] getAvailableDataFlavors()
+   {
+     Transferable c = getContents(null);
+     if (c == null)
+       return new DataFlavor[0];
+     else
+       return c.getTransferDataFlavors();
+   }
+ 
+   public boolean isDataFlavorAvailable(DataFlavor flavor)
+   {
+     DataFlavor[] fs = getAvailableDataFlavors();
+     for (int i = 0; i < fs.length; i++)
+       if (flavor.equals(fs[i]))
+ 	return true;
+ 
+     return false;
+   }
+ 
+   public Object getData(DataFlavor flavor)
+     throws UnsupportedFlavorException, IOException
+   {
+     Transferable c = getContents(null);
+     if (c == null)
+       throw new UnsupportedFlavorException(flavor);
+     else
+       return c.getTransferData(flavor);
+   }
+ 
+   public void addFlavorListener(FlavorListener listener)
+   {
+     synchronized(listeners)
+       {
+ 	listeners.add(listener);
+       }
+   }
+ 
+   public void removeFlavorListener(FlavorListener listener)
+   {
+     synchronized(listeners)
+       {
+ 	listeners.remove(listener);
+       }
+   }
+ 
+   public FlavorListener[] getFlavorListeners()
+   {
+     synchronized(listeners)
+       {
+ 	return (FlavorListener[])
+ 	  listeners.toArray(new FlavorListener[listeners.size()]);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/ClipboardOwner.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/ClipboardOwner.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/ClipboardOwner.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/ClipboardOwner.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* ClipboardOwner.java -- Interface for clipboard providers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ /**
+  * This interface is for classes that will own a clipboard object.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface ClipboardOwner
+ {
+   /**
+    * This method is called to notify this object that it no longer
+    * has ownership of the specified <code>Clipboard</code>.
+    *
+    * @param clipboard The clipboard for which ownership was lost.
+    * @param contents The contents of the clipboard which are no longer owned.
+    */
+   void lostOwnership (Clipboard clipboard, Transferable contents); 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/DataFlavor.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/DataFlavor.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/DataFlavor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/DataFlavor.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,1041 ----
+ /* DataFlavor.java -- A type of data to transfer via the clipboard.
+    Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.ObjectInput;
+ import java.io.ObjectOutput;
+ import java.io.Reader;
+ import java.io.StringReader;
+ import java.io.UnsupportedEncodingException;
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.rmi.Remote;
+ 
+ /**
+  * This class represents a particular data format used for transferring
+  * data via the clipboard.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class DataFlavor implements java.io.Externalizable, Cloneable
+ {
+   static final long serialVersionUID = 8367026044764648243L;
+ 
+   // FIXME: Serialization: Need to write methods for.
+ 
+ /**
+  * This is the data flavor used for tranferring plain text.  The MIME
+  * type is "text/plain; charset=unicode".  The representation class
+  * is <code>java.io.InputStream</code>.
+  *
+  * @deprecated The charset unicode is platform specific and InputStream
+  * deals with bytes not chars. Use <code>getRederForText()</code>.
+  */
+ public static final DataFlavor plainTextFlavor;
+ 
+ /**
+  * This is the data flavor used for transferring Java strings.  The
+  * MIME type is "application/x-java-serialized-object" and the 
+  * representation class is <code>java.lang.String</code>.
+  */
+ public static final DataFlavor stringFlavor;
+ 
+ /**
+  * This is a data flavor used for transferring lists of files.  The
+  * representation type is a <code>java.util.List</code>, with each element of 
+  * the list being a <code>java.io.File</code>.
+  */
+ public static final DataFlavor javaFileListFlavor;
+ 
+ /**
+  * This is an image flavor used for transferring images.  The
+  * representation type is a <code>java.awt.Image</code>.
+  */
+ public static final DataFlavor imageFlavor;
+ 
+ /**
+  * This is the MIME type used for transferring a serialized object.
+  * The representation class is the type of object be deserialized.
+  */
+ public static final String javaSerializedObjectMimeType =
+   "application/x-java-serialized-object";
+ 
+ /**
+  * This is the MIME type used to transfer a Java object reference within
+  * the same JVM.  The representation class is the class of the object
+  * being transferred.
+  */
+ public static final String javaJVMLocalObjectMimeType =
+   "application/x-java-jvm-local-objectref";
+ 
+ /**
+  * This is the MIME type used to transfer a link to a remote object.
+  * The representation class is the type of object being linked to.
+  */
+ public static final String javaRemoteObjectMimeType =
+   "application/x-java-remote-object";
+ 
+ static
+ {
+   plainTextFlavor
+       = new DataFlavor(java.io.InputStream.class,
+ 		       "text/plain; charset=unicode",
+ 		       "plain unicode text");
+ 
+   stringFlavor
+       = new DataFlavor(java.lang.String.class,
+ 		       "Java Unicode String");
+ 
+   javaFileListFlavor
+       = new DataFlavor(java.util.List.class,
+ 		       "application/x-java-file-list; class=java.util.List",
+ 		       "Java File List");
+ 
+   imageFlavor
+       = new DataFlavor(java.awt.Image.class,
+                        "Java Image");
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ // The MIME type for this flavor
+ private final String mimeType;
+ 
+ // The representation class for this flavor
+ private final Class representationClass;
+ 
+ // The human readable name of this flavor
+ private String humanPresentableName;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Static Methods
+  */
+ 
+ /**
+  * This method attempts to load the named class.  The following class
+  * loaders are searched in order: the bootstrap class loader, the
+  * system class loader, the context class loader (if it exists), and
+  * the specified fallback class loader.
+  *
+  * @param className The name of the class to load.
+  * @param classLoader The class loader to use if all others fail, which
+  * may be <code>null</code>.
+  *
+  * @exception ClassNotFoundException If the class cannot be loaded.
+  */
+ protected static final Class
+ tryToLoadClass(String className, ClassLoader classLoader)
+                throws ClassNotFoundException
+ {
+   try
+     {
+       return(Class.forName(className));
+     }
+   catch(Exception e) { ; }
+   // Commented out for Java 1.1
+   /*
+   try
+     {
+       return(className.getClass().getClassLoader().findClass(className));
+     }
+   catch(Exception e) { ; }
+ 
+   try
+     {
+       return(ClassLoader.getSystemClassLoader().findClass(className));
+     }
+   catch(Exception e) { ; }
+   */
+ 
+   // FIXME: What is the context class loader?
+   /*
+   try
+     {
+     }
+   catch(Exception e) { ; }
+   */
+ 
+   if (classLoader != null)
+     return(classLoader.loadClass(className));
+   else
+     throw new ClassNotFoundException(className);
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+  * Empty public constructor needed for externalization.
+  * Should not be used for normal instantiation.
+  */
+ public
+ DataFlavor()
+ {
+     mimeType = null;
+     representationClass = null;
+     humanPresentableName = null;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Private constructor.
+  */
+ private
+ DataFlavor(Class representationClass,
+ 	   String mimeType,
+ 	   String humanPresentableName)
+ {
+     this.representationClass = representationClass;
+     this.mimeType = mimeType;
+     if (humanPresentableName != null)
+ 	this.humanPresentableName = humanPresentableName;
+     else
+ 	this.humanPresentableName = mimeType;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Initializes a new instance of <code>DataFlavor</code>.  The class
+  * and human readable name are specified, the MIME type will be
+  * "application/x-java-serialized-object". If the human readable name
+  * is not specified (<code>null</code>) then the human readable name
+  * will be the same as the MIME type.
+  *
+  * @param representationClass The representation class for this object.
+  * @param humanPresentableName The display name of the object.
+  */
+ public
+ DataFlavor(Class representationClass, String humanPresentableName)
+ {
+     this(representationClass,
+        "application/x-java-serialized-object"
+        + "; class="
+        + representationClass.getName(),
+        humanPresentableName);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Initializes a new instance of <code>DataFlavor</code> with the
+  * specified MIME type and description.  If the MIME type has a
+  * "class=&lt;rep class&gt;" parameter then the representation class will
+  * be the class name specified. Otherwise the class defaults to
+  * <code>java.io.InputStream</code>. If the human readable name
+  * is not specified (<code>null</code>) then the human readable name
+  * will be the same as the MIME type.
+  *
+  * @param mimeType The MIME type for this flavor.
+  * @param humanPresentableName The display name of this flavor.
+  * @param classLoader The class loader for finding classes if the default
+  * class loaders do not work.
+  *
+  * @exception IllegalArgumentException If the representation class
+  * specified cannot be loaded.
+  * @exception ClassNotFoundException If the class is not loaded.
+  */
+ public
+ DataFlavor(String mimeType, String humanPresentableName, 
+            ClassLoader classLoader) throws ClassNotFoundException
+ {
+   this(getRepresentationClassFromMime(mimeType, classLoader),
+        mimeType, humanPresentableName);
+ }
+ 
+ private static Class
+ getRepresentationClassFromMime(String mimeString, ClassLoader classLoader)
+ {
+   String classname = getParameter("class", mimeString);
+   if (classname != null)
+     {
+       try
+         {
+           return tryToLoadClass(classname, classLoader);
+         }
+       catch(Exception e)
+         {
+           throw new IllegalArgumentException("classname: " + e.getMessage());
+         }
+     }
+   else
+     {
+       return java.io.InputStream.class;
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Initializes a new instance of <code>DataFlavor</code> with the
+  * specified MIME type and description.  If the MIME type has a
+  * "class=&lt;rep class&gt;" parameter then the representation class will
+  * be the class name specified. Otherwise the class defaults to
+  * <code>java.io.InputStream</code>. If the human readable name
+  * is not specified (<code>null</code>) then the human readable name
+  * will be the same as the MIME type. This is the same as calling
+  * <code>new DataFlavor(mimeType, humanPresentableName, null)</code>.
+  *
+  * @param mimeType The MIME type for this flavor.
+  * @param humanPresentableName The display name of this flavor.
+  *
+  * @exception IllegalArgumentException If the representation class
+  * specified cannot be loaded.
+  */
+ public
+ DataFlavor(String mimeType, String humanPresentableName)
+ {
+   this (getRepresentationClassFromMime (mimeType, null),
+ 	mimeType, humanPresentableName);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Initializes a new instance of <code>DataFlavor</code> with the specified
+  * MIME type.  This type can have a "class=" parameter to specify the
+  * representation class, and then the class must exist or an exception will
+  * be thrown. If there is no "class=" parameter then the representation class
+  * will be <code>java.io.InputStream</code>. This is the same as calling
+  * <code>new DataFlavor(mimeType, null)</code>.
+  *
+  * @param mimeType The MIME type for this flavor.
+  *
+  * @exception IllegalArgumentException If a class is not specified in
+  * the MIME type.
+  * @exception ClassNotFoundException If the class cannot be loaded.
+  */
+ public
+ DataFlavor(String mimeType) throws ClassNotFoundException
+ {
+   this(mimeType, null);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns the MIME type of this flavor.
+  *
+  * @return The MIME type for this flavor.
+  */
+ public String
+ getMimeType()
+ {
+   return(mimeType);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns the representation class for this flavor.
+  *
+  * @return The representation class for this flavor.
+  */
+ public Class
+ getRepresentationClass()
+ {
+   return(representationClass);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns the human presentable name for this flavor.
+  *
+  * @return The human presentable name for this flavor.
+  */
+ public String
+ getHumanPresentableName()
+ {
+   return(humanPresentableName);
+ } 
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns the primary MIME type for this flavor.
+  *
+  * @return The primary MIME type for this flavor.
+  */
+ public String
+ getPrimaryType()
+ {
+   int idx = mimeType.indexOf("/");
+   if (idx == -1)
+     return(mimeType);
+ 
+   return(mimeType.substring(0, idx));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns the MIME subtype for this flavor.
+  *
+  * @return The MIME subtype for this flavor.
+  */
+ public String
+ getSubType()
+ {
+   int start = mimeType.indexOf("/");
+   if (start == -1)
+     return "";
+ 
+   int end = mimeType.indexOf(";", start + 1);
+   if (end == -1)
+     return mimeType.substring(start + 1);
+   else
+     return mimeType.substring(start + 1, end);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns the value of the named MIME type parameter, or <code>null</code>
+  * if the parameter does not exist. Given the parameter name and the mime
+  * string.
+  *
+  * @param paramName The name of the parameter.
+  * @param mimeString The mime string from where the name should be found.
+  *
+  * @return The value of the parameter or null.
+  */
+ private static String
+ getParameter(String paramName, String mimeString)
+ {
+   int idx = mimeString.indexOf(paramName + "=");
+   if (idx == -1)
+     return(null);
+ 
+   String value = mimeString.substring(idx + paramName.length() + 1);
+ 
+   idx = value.indexOf(" ");
+   if (idx == -1)
+     return(value);
+   else
+     return(value.substring(0, idx));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns the value of the named MIME type parameter, or <code>null</code>
+  * if the parameter does not exist.
+  *
+  * @param paramName The name of the paramter.
+  *
+  * @return The value of the parameter.
+  */
+ public String
+ getParameter(String paramName)
+ {
+   if ("humanPresentableName".equals(paramName))
+     return getHumanPresentableName();
+ 
+   return getParameter(paramName, mimeType);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Sets the human presentable name to the specified value.
+  *
+  * @param humanPresentableName The new display name.
+  */
+ public void
+ setHumanPresentableName(String humanPresentableName)
+ {
+   this.humanPresentableName = humanPresentableName;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests the MIME type of this object for equality against the specified
+  * MIME type. Ignores parameters.
+  *
+  * @param mimeType The MIME type to test against.
+  *
+  * @return <code>true</code> if the MIME type is equal to this object's
+  * MIME type (ignoring parameters), <code>false</code> otherwise.
+  *
+  * @exception NullPointerException If mimeType is null.
+  */
+ public boolean
+ isMimeTypeEqual(String mimeType)
+ {
+   String mime = getMimeType();
+   int i = mime.indexOf(";");
+   if (i != -1)
+     mime = mime.substring(0, i);
+ 
+   i = mimeType.indexOf(";");
+   if (i != -1)
+     mimeType = mimeType.substring(0, i);
+ 
+   return mime.equals(mimeType);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests the MIME type of this object for equality against the specified
+  * data flavor's MIME type
+  *
+  * @param flavor The flavor to test against.
+  *
+  * @return <code>true</code> if the flavor's MIME type is equal to this 
+  * object's MIME type, <code>false</code> otherwise.
+  */
+ public final boolean
+ isMimeTypeEqual(DataFlavor flavor)
+ {
+   return(isMimeTypeEqual(flavor.getMimeType()));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests whether or not this flavor represents a serialized object.
+  *
+  * @return <code>true</code> if this flavor represents a serialized
+  * object, <code>false</code> otherwise.
+  */
+ public boolean
+ isMimeTypeSerializedObject()
+ {
+   return(mimeType.startsWith(javaSerializedObjectMimeType));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests whether or not this flavor has a representation class of
+  * <code>java.io.InputStream</code>.
+  *
+  * @return <code>true</code> if the representation class of this flavor
+  * is <code>java.io.InputStream</code>, <code>false</code> otherwise.
+  */
+ public boolean
+ isRepresentationClassInputStream()
+ {
+   return(representationClass.getName().equals("java.io.InputStream"));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests whether the representation class for this flavor is
+  * serializable.
+  *
+  * @return <code>true</code> if the representation class is serializable,
+  * <code>false</code> otherwise.
+  */
+ public boolean
+ isRepresentationClassSerializable()
+ {
+   Class[] interfaces = representationClass.getInterfaces();
+ 
+   int i = 0;
+   while (i < interfaces.length)
+     {
+       if (interfaces[i].getName().equals("java.io.Serializable"))
+         return(true);
+       ++i;
+     }
+ 
+   return(false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests whether the representation class for his flavor is remote.
+  *
+  * @return <code>true</code> if the representation class is remote,
+  * <code>false</code> otherwise.
+  */
+ public boolean
+ isRepresentationClassRemote()
+ {
+   return Remote.class.isAssignableFrom (representationClass);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests whether or not this flavor represents a serialized object.
+  *
+  * @return <code>true</code> if this flavor represents a serialized
+  * object, <code>false</code> otherwise.
+  */
+ public boolean
+ isFlavorSerializedObjectType()
+ {
+   // FIXME: What is the diff between this and isMimeTypeSerializedObject?
+   return(mimeType.startsWith(javaSerializedObjectMimeType));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests whether or not this flavor represents a remote object.
+  *
+  * @return <code>true</code> if this flavor represents a remote object,
+  * <code>false</code> otherwise.
+  */
+ public boolean
+ isFlavorRemoteObjectType()
+ {
+   return(mimeType.startsWith(javaRemoteObjectMimeType));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests whether or not this flavor represents a list of files.
+  *
+  * @return <code>true</code> if this flavor represents a list of files,
+  * <code>false</code> otherwise.
+  */
+ public boolean
+ isFlavorJavaFileListType()
+ {
+   if (this.mimeType.equals(javaFileListFlavor.mimeType) &&
+       this.representationClass.equals(javaFileListFlavor.representationClass))
+     return(true);
+ 
+   return(false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns a copy of this object.
+  *
+  * @return A copy of this object.
+  *
+  * @exception CloneNotSupportedException If the object's class does not support
+  * the Cloneable interface. Subclasses that override the clone method can also
+  * throw this exception to indicate that an instance cannot be cloned.
+  */
+ public Object clone () throws CloneNotSupportedException
+ {
+   try
+     {
+       return(super.clone());
+     }
+   catch(Exception e)
+     {
+       return(null);
+     }
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * This method test the specified <code>DataFlavor</code> for equality
+  * against this object.  This will be true if the MIME type and
+  * representation type are the equal.
+  *
+  * @param flavor The <code>DataFlavor</code> to test against.
+  *
+  * @return <code>true</code> if the flavor is equal to this object,
+  * <code>false</code> otherwise.
+  */
+ public boolean
+ equals(DataFlavor flavor)
+ {
+   if (flavor == null)
+     return(false);
+ 
+   if (!this.mimeType.toLowerCase().equals(flavor.mimeType.toLowerCase()))
+     return(false);
+ 
+   if (!this.representationClass.equals(flavor.representationClass))
+     return(false);
+ 
+   return(true);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * This method test the specified <code>Object</code> for equality
+  * against this object.  This will be true if the following conditions
+  * are met:
+  * <p>
+  * <ul>
+  * <li>The object is not <code>null</code>.</li>
+  * <li>The object is an instance of <code>DataFlavor</code>.</li>
+  * <li>The object's MIME type and representation class are equal to
+  * this object's.</li>
+  * </ul>
+  *
+  * @param obj The <code>Object</code> to test against.
+  *
+  * @return <code>true</code> if the flavor is equal to this object,
+  * <code>false</code> otherwise.
+  */
+ public boolean
+ equals(Object obj)
+ {
+   if (!(obj instanceof DataFlavor))
+     return(false);
+ 
+   return(equals((DataFlavor)obj));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Tests whether or not the specified string is equal to the MIME type
+  * of this object.
+  *
+  * @param str The string to test against.
+  *
+  * @return <code>true</code> if the string is equal to this object's MIME
+  * type, <code>false</code> otherwise.
+  *
+  * @deprecated Not compatible with <code>hashCode()</code>.
+  *             Use <code>isMimeTypeEqual()</code>
+  */
+ public boolean
+ equals(String str)
+ {
+   return(isMimeTypeEqual(str));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns the hash code for this data flavor.
+  * The hash code is based on the (lower case) mime type and the
+  * representation class.
+  */
+ public int
+ hashCode()
+ {
+   return(mimeType.toLowerCase().hashCode()^representationClass.hashCode());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns <code>true</code> when the given <code>DataFlavor</code>
+  * matches this one.
+  */
+ public boolean
+ match(DataFlavor dataFlavor)
+ {
+   // XXX - How is this different from equals?
+   return(equals(dataFlavor));
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * This method exists for backward compatibility.  It simply returns
+  * the same name/value pair passed in.
+  *
+  * @param name The parameter name.
+  * @param value The parameter value.
+  *
+  * @return The name/value pair.
+  *
+  * @deprecated
+  */
+ protected String
+ normalizeMimeTypeParameter(String name, String value)
+ {
+   return(name + "=" + value);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * This method exists for backward compatibility.  It simply returns
+  * the MIME type string unchanged.
+  *
+  * @param type The MIME type.
+  * 
+  * @return The MIME type.
+  *
+  * @deprecated
+  */
+ protected String
+ normalizeMimeType(String type)
+ {
+   return(type);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Serialize this class.
+  *
+  * @param stream The <code>ObjectOutput</code> stream to serialize to.
+  *
+  * @exception IOException If an error occurs.
+  */
+ public void
+ writeExternal(ObjectOutput stream) throws IOException
+ {
+   // FIXME: Implement me
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * De-serialize this class.
+  *
+  * @param stream The <code>ObjectInput</code> stream to deserialize from.
+  *
+  * @exception IOException If an error ocurs.
+  * @exception ClassNotFoundException If the class for an object being restored
+  * cannot be found.
+  */
+ public void
+ readExternal(ObjectInput stream) throws IOException, ClassNotFoundException
+ {
+   // FIXME: Implement me
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Returns a string representation of this DataFlavor. Including the
+  * representation class name, MIME type and human presentable name.
+  */
+ public String
+ toString()
+ {
+   return(getClass().getName()
+ 	 + "[representationClass=" + getRepresentationClass().getName()
+          + ",mimeType=" + getMimeType()
+          + ",humanPresentableName=" + getHumanPresentableName()
+ 	 + "]");
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * XXX - Currently returns <code>plainTextFlavor</code>.
+  */
+ public static final DataFlavor
+ getTextPlainUnicodeFlavor()
+ {
+   return(plainTextFlavor);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * XXX - Currently returns <code>java.io.InputStream</code>.
+  *
+  * @since 1.3
+  */
+ public final Class
+ getDefaultRepresentationClass()
+ {
+   return(java.io.InputStream.class);
+ }
+ /*************************************************************************/
+ 
+ /**
+  * XXX - Currently returns <code>java.io.InputStream</code>.
+  */
+ public final String
+ getDefaultRepresentationClassAsString()
+ {
+   return(getDefaultRepresentationClass().getName());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Selects the best supported text flavor on this implementation.
+  * Returns <code>null</code> when none of the given flavors is liked.
+  *
+  * The <code>DataFlavor</code> returned the first data flavor in the
+  * array that has either a representation class which is (a subclass of)
+  * <code>Reader</code> or <code>String</code>, or has a representation
+  * class which is (a subclass of) <code>InputStream</code> and has a
+  * primary MIME type of "text" and has an supported encoding.
+  */
+ public static final DataFlavor
+ selectBestTextFlavor(DataFlavor[] availableFlavors)
+ {
+   for(int i=0; i<availableFlavors.length; i++)
+     {
+       DataFlavor df = availableFlavors[i];
+       Class c = df.representationClass;
+ 
+       // A Reader or String is good.
+       if ((Reader.class.isAssignableFrom(c))
+ 	  || (String.class.isAssignableFrom(c)))
+ 	{
+ 	  return df;
+ 	}
+ 
+       // A InputStream is good if the mime primary type is "text"
+       if ((InputStream.class.isAssignableFrom(c))
+ 	  && ("text".equals(df.getPrimaryType())))
+         {
+           String encoding = availableFlavors[i].getParameter("charset");
+           if (encoding == null)
+             encoding = "us-ascii";
+           Reader r = null;
+           try
+             {
+               // Try to construct a dummy reader with the found encoding
+               r = new InputStreamReader
+                     (new ByteArrayInputStream(new byte[0]), encoding);
+             }
+           catch(UnsupportedEncodingException uee) { /* ignore */ }
+           if (r != null)
+             return df;
+         }
+     }
+ 
+   // Nothing found
+   return(null);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+  * Creates a <code>Reader</code> for a given <code>Transferable</code>.
+  *
+  * If the representation class is a (subclass of) <code>Reader</code>
+  * then an instance of the representation class is returned. If the
+  * representatation class is a <code>String</code> then a
+  * <code>StringReader</code> is returned. And if the representation class
+  * is a (subclass of) <code>InputStream</code> and the primary MIME type
+  * is "text" then a <code>InputStreamReader</code> for the correct charset
+  * encoding is returned.
+  *
+  * @param transferable The <code>Transferable</code> for which a text
+  *                     <code>Reader</code> is requested.
+  *
+  * @exception IllegalArgumentException If the representation class is not one
+  * of the seven listed above or the Transferable has null data.
+  * @exception NullPointerException If the Transferable is null.
+  * @exception UnsupportedFlavorException when the transferable doesn't
+  * support this <code>DataFlavor</code>. Or if the representable class
+  * isn't a (subclass of) <code>Reader</code>, <code>String</code>,
+  * <code>InputStream</code> and/or the primary MIME type isn't "text".
+  * @exception IOException when any IOException occurs.
+  * @exception UnsupportedEncodingException if the "charset" isn't supported
+  * on this platform.
+  */
+ public Reader getReaderForText(Transferable transferable)
+   throws UnsupportedFlavorException, IOException
+ {
+     if (!transferable.isDataFlavorSupported(this))
+         throw new UnsupportedFlavorException(this);
+ 
+     if (Reader.class.isAssignableFrom(representationClass))
+         return((Reader)transferable.getTransferData(this));
+ 
+     if (String.class.isAssignableFrom(representationClass))
+         return(new StringReader((String)transferable.getTransferData(this)));
+ 
+     if (InputStream.class.isAssignableFrom(representationClass)
+         && "text".equals(getPrimaryType()))
+       {
+         InputStream in = (InputStream)transferable.getTransferData(this);
+         String encoding = getParameter("charset");
+         if (encoding == null)
+             encoding = "us-ascii";
+         return(new InputStreamReader(in, encoding));
+       }
+ 
+     throw new UnsupportedFlavorException(this);
+ }
+ 
+   /**
+    * Returns whether the representation class for this DataFlavor is
+    * @see java.nio.ByteBuffer or a subclass thereof.
+    *
+    * @since 1.4
+    */
+   public boolean isRepresentationClassByteBuffer ()
+   {
+     return ByteBuffer.class.isAssignableFrom (representationClass);
+   }
+ 
+   /**
+    * Returns whether the representation class for this DataFlavor is
+    * @see java.nio.CharBuffer or a subclass thereof.
+    *
+    * @since 1.4
+    */
+   public boolean isRepresentationClassCharBuffer ()
+   {
+     return CharBuffer.class.isAssignableFrom (representationClass);
+   }
+ 
+   /**
+    * Returns whether the representation class for this DataFlavor is
+    * @see java.io.Reader or a subclass thereof.
+    *
+    * @since 1.4
+    */
+   public boolean isRepresentationClassReader ()
+   {
+     return Reader.class.isAssignableFrom (representationClass);
+   }
+ 
+ } // class DataFlavor
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/FlavorEvent.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/FlavorEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/FlavorEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/FlavorEvent.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,55 ----
+ /* FlavorEvent -- Event indicating a ClipBoard has different flavors available.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ import java.util.EventObject;
+ 
+ /**
+  * Event indicating a Clipboard has different flavors available.
+  * Fired by a ClipBoard for registered FlavorListeners.
+  *
+  * @author Mark J. Wielaard (mark@klomp.org)
+  */
+ public class FlavorEvent extends EventObject
+ {
+   public FlavorEvent(Clipboard board)
+   {
+     super(board);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/FlavorListener.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/FlavorListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/FlavorListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/FlavorListener.java	Fri Sep 23 19:36:46 2005
***************
*** 0 ****
--- 1,54 ----
+ /* FlavorListener -- Interface for tagging an interest in FlavorEvents. 
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * Interface for tagging an interest in FlavorEvents by a class.  The
+  * flavorsChanged() method will be called with a FlavorEvent pointing
+  * to the Clipboard which has content in different Flavors available.
+  *
+  * @author Mark J. Wielaard (mark@klomp.org)
+  */
+ public interface FlavorListener
+   extends EventListener
+ {
+   void flavorsChanged(FlavorEvent event);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/FlavorMap.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/FlavorMap.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/FlavorMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/FlavorMap.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* FlavorMap.java -- Maps between flavor names and MIME types.
+    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ import java.util.Map;
+ 
+ /**
+  * This interface maps between native platform type names and DataFlavors.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface FlavorMap
+ {
+   /**
+    * Maps the specified <code>DataFlavor</code> objects to the native
+    * data type name.  The returned <code>Map</code> has keys that are
+    * the data flavors and values that are strings.  The returned map
+    * may be modified.  This can be useful for implementing nested mappings.
+    *
+    * @param flavors An array of data flavors to map
+    *                or null for all data flavors.
+    *
+    * @return A <code>Map</code> of native data types.
+    */
+   Map getNativesForFlavors (DataFlavor[] flavors);
+ 
+   /**
+    * Maps the specified native type names to <code>DataFlavor</code>'s.
+    * The returned <code>Map</code> has keys that are strings and values
+    * that are <code>DataFlavor</code>'s.  The returned map may be
+    * modified.  This can be useful for implementing nested mappings.
+    *
+    * @param natives An array of native types to map
+    *                or null for all native types.
+    *
+    * @return A <code>Map</code> of data flavors.
+    */
+   Map getFlavorsForNatives (String[] natives);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/FlavorTable.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/FlavorTable.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/FlavorTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/FlavorTable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* FlavorTable.java -- A relaxed mapping between flavors
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ import java.util.List;
+ 
+ /**
+  * A FlavorMap which no longer requires a 1-to-1 mapping between flavors. Any
+  * native can map to multiple flavors, and any flavor can map to multiple
+  * natives; although the mappings are usually symmetric.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface FlavorTable extends FlavorMap
+ {
+   /**
+    * Returns a list of String natives corresponding to the given flavor. The
+    * list should be sorted from best to worst. The list must be modifiable
+    * without affecting this table.
+    *
+    * @param flavor the flavor to look up, or null to return all natives
+    * @return the sorted list of natives
+    */
+   List getNativesForFlavor(DataFlavor flavor);
+ 
+   /**
+    * Returns a list of flavors corresponding to the given String native. The
+    * list should be sorted from best to worst. The list must be modifiable
+    * without affecting this table.
+    *
+    * @param name the native name to look up, or null to return all flavors
+    * @return the sorted list of flavors
+    */
+   List getFlavorsForNative(String name);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/MimeTypeParseException.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/MimeTypeParseException.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/MimeTypeParseException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/MimeTypeParseException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* MimeTypeParseException.java -- thrown when MIME string couldn't be parsed
+    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ /**
+   * MIME string couldn't be parsed correctly.
+   *
+   * @author Mark Wielaard (mark@klomp.org)
+   * @status updated to 1.4
+   */
+ public class MimeTypeParseException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -5604407764691570741L;
+ 
+   /**
+    * Create a new instance without any message.
+    */
+   public MimeTypeParseException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a specified detailed error message.
+    *
+    * @param message the message
+    */
+   public MimeTypeParseException(String message)
+   {
+     super(message);
+   }
+ } // class MimeTypeParseException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/StringSelection.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/StringSelection.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/StringSelection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/StringSelection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,158 ----
+ /* StringSelection.java -- Clipboard handler for text.
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ import java.io.IOException;
+ import java.io.StringReader;
+ 
+ /**
+   * This class transfers a string as plain text using the clipboard.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class StringSelection implements Transferable, ClipboardOwner
+ {
+ 
+ /*
+  * Class Variables
+  */
+ 
+ // List of flavors we support
+ // XXX: DataFlavor.plainTextFlavor is deprecated.
+ static final DataFlavor[] supported_flavors 
+    = { DataFlavor.stringFlavor,
+        DataFlavor.plainTextFlavor };
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ // This is the data to transfer
+ private String data;
+ 
+   /**
+    * Transfer the specfied string as text.
+    *
+    * @param data the data for the string selection
+    */
+   public StringSelection(String data)
+   {
+     this.data = data;
+   }
+ 
+ /**
+   * Returns a list of supported data flavors.
+   *
+   * @return A list of supported data flavors.
+   */
+ public DataFlavor[]
+ getTransferDataFlavors()
+ {
+   return(supported_flavors);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Tests whether or not the specified data flavor is supported.
+   *
+   * @param flavor The data flavor to test.
+   *
+   * @return <code>true</code> if the data flavor is supported,
+   * <code>false</code> otherwise.
+   */
+ public boolean
+ isDataFlavorSupported(DataFlavor flavor)
+ {
+   for (int i = 0; i < supported_flavors.length; i++)
+     if (supported_flavors[i].equals(flavor))
+        return(true);
+ 
+   return(false);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the data in the requested format.
+   *
+   * @param flavor The desired data flavor.
+   *
+   * @return The transferred data.
+   *
+   * @exception UnsupportedFlavorException If the specified flavor is not
+   * supported.
+   * @exception IOException If any other error occurs.
+   */
+ public Object
+ getTransferData(DataFlavor flavor) throws UnsupportedFlavorException,
+                                           IOException
+ {
+   if (!isDataFlavorSupported(flavor))
+     throw new UnsupportedFlavorException(flavor);
+ 
+   if (DataFlavor.plainTextFlavor == flavor)
+       /* The behavior of this method for DataFlavor.plainTextFlavor and
+          equivalent DataFlavors is inconsistent with the definition of
+          DataFlavor.plainTextFlavor. We choose to do like Sun's implementation
+          and return a Reader instead of an InputString. */
+       /* return(new StringBufferInputStream(data)); */
+       return(new StringReader(data));
+   else // DataFlavor.stringFlavor
+       return data;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Called when ownership of the clipboard object is lost.
+   *
+   * @param clipboard The affected clipboard.
+   * @param contents The clipboard contents.
+   */
+ public void
+ lostOwnership(Clipboard clipboard, Transferable contents)
+ {
+   // FIXME: What does this do?
+ }
+ 
+ } // class StringSelection 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/SystemFlavorMap.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/SystemFlavorMap.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/SystemFlavorMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/SystemFlavorMap.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,169 ----
+ /* SystemFlavorMap.java -- Maps between native flavor names and MIME types.
+    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ import java.util.HashMap;
+ import java.util.List;
+ import java.util.Map;
+ 
+ /**
+   * This class maps between native platform type names and DataFlavors.
+   *
+   * XXX - The current implementation does no mapping at all.
+   *
+   * @author Mark Wielaard (mark@klomp.org)
+   *
+   * @since 1.2
+   */
+ public final class SystemFlavorMap implements FlavorMap, FlavorTable
+ {
+   /**
+    * The default (instance) flavor map.
+    */
+   private static FlavorMap defaultFlavorMap;
+ 
+   /**
+    * Private constructor.
+    */
+   private SystemFlavorMap ()
+   {
+   }
+ 
+   /**
+    * Maps the specified <code>DataFlavor</code> objects to the native
+    * data type name.  The returned <code>Map</code> has keys that are
+    * the data flavors and values that are strings.  The returned map
+    * may be modified.  This can be useful for implementing nested mappings.
+    *
+    * @param flavors An array of data flavors to map
+    *                or null for all data flavors.
+    *
+    * @return A <code>Map</code> of native data types to data flavors.
+    */
+   public Map getNativesForFlavors (DataFlavor[] flavors)
+   {
+     return new HashMap();
+   }
+ 
+   /**
+    * Maps the specified native type names to <code>DataFlavor</code>'s.
+    * The returned <code>Map</code> has keys that are strings and values
+    * that are <code>DataFlavor</code>'s.  The returned map may be
+    * modified.  This can be useful for implementing nested mappings.
+    *
+    * @param natives An array of native types to map
+    *                or null for all native types.
+    *
+    * @return A <code>Map</code> of data flavors to native type names.
+    */
+   public Map getFlavorsForNatives (String[] natives)
+   { 
+     return new HashMap();
+   }
+ 
+   /**
+    * Returns the default (instance) (System)FlavorMap.
+    */
+   public static FlavorMap getDefaultFlavorMap ()
+   {
+     if (defaultFlavorMap == null)
+       defaultFlavorMap = new SystemFlavorMap ();
+ 
+     return defaultFlavorMap;
+   }
+ 
+   /**
+    * Returns the native type name for the given java mime type.
+    */
+   public static String encodeJavaMIMEType (String mime)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the native type name for the given data flavor.
+    */
+   public static String encodeDataFlavor (DataFlavor df)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns true if the native type name can be represented as
+    * a java mime type.
+    */
+   public static boolean isJavaMIMEType (String name)
+   {
+     return false;
+   }
+ 
+   /**
+    * Returns the java mime type for the given the native type name.
+    */
+   public static String decodeJavaMIMEType (String name)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the data flavor given the native type name
+    * or null when no such data flavor exists.
+    */
+   public static DataFlavor decodeDataFlavor (String name)
+     throws ClassNotFoundException
+   {
+     String javaMIMEType = decodeJavaMIMEType (name);
+     
+     if (javaMIMEType != null)
+       return new DataFlavor (javaMIMEType);
+     else
+       return null;
+   }
+ 
+   public List getFlavorsForNative (String nat)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public List getNativesForFlavor (DataFlavor flav)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+ } // class SystemFlavorMap
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/Transferable.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/Transferable.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/Transferable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/Transferable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,83 ----
+ /* Transferable.java -- Data transfer source
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * This interface is implemented by classes that can transfer data.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface Transferable
+ {
+   /**
+    * This method returns a list of available data flavors for the data being
+    * transferred.  The array returned will be sorted from most preferred
+    * flavor at the beginning to least preferred at the end.
+    *
+    * @return adA list of data flavors for this data
+    */
+   DataFlavor[] getTransferDataFlavors();
+ 
+   /**
+    * Tests whether or not this data can be delivered in the specified data
+    * flavor.
+    *
+    * @param flavor the data flavor to test
+    * @return true if the data flavor is supported
+    */
+   boolean isDataFlavorSupported(DataFlavor flavor);
+ 
+   /**
+    * Returns the data in the specified <code>DataFlavor</code>.
+    *
+    * @param flavor the data flavor to return
+    * @return the data in the appropriate flavor
+    * @throws UnsupportedFlavorException if the flavor is not supported
+    * @throws IOException if the data is not available
+    * @see DataFlavor#getRepresentationClass
+    */
+   Object getTransferData(DataFlavor flavor)
+     throws UnsupportedFlavorException, IOException;
+ 
+ } // interface Transferable
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/UnsupportedFlavorException.java gcc-4.1.0/libjava/classpath/java/awt/datatransfer/UnsupportedFlavorException.java
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/UnsupportedFlavorException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/UnsupportedFlavorException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* UnsupportedFlavorException.java -- ata flavor is not valid
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.datatransfer;
+ 
+ /**
+  * The data flavor requested is not supported for the transfer data.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Transferable#getTransferData(DataFlavor)
+  * @status updated to 1.4
+  */
+ public class UnsupportedFlavorException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5383814944251665601L;
+ 
+   /**
+    * Initializes a new instance of <code>UnsupportedDataFlavor</code>
+    * for the specified data flavor.
+    *
+    * @param flavor the data flavor that is not supported
+    */
+   public UnsupportedFlavorException(DataFlavor flavor)
+   {
+     super(flavor == null ? null : flavor.getHumanPresentableName());
+   }
+ } // class UnsupportedFlavorException 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/datatransfer/package.html gcc-4.1.0/libjava/classpath/java/awt/datatransfer/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/datatransfer/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/datatransfer/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.datatransfer package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.datatransfer</title></head>
+ 
+ <body>
+ <p>Classes to represent different flavors of data for transferring native
+ and system types through for example a clipboard.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/Autoscroll.java gcc-4.1.0/libjava/classpath/java/awt/dnd/Autoscroll.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/Autoscroll.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/Autoscroll.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* Autoscroll.java --
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Insets;
+ import java.awt.Point;
+ 
+ /**
+  * During DnD operations it is possible that a user may wish to drop the
+  * subject of the operation on a region of a scrollable GUI control that
+  * is not currently visible to the user.
+  *
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface Autoscroll
+ {
+   /**
+    * This method returns the Insets describing the autoscrolling region or
+    * border relative to the geometry of the implementing Component
+    */
+   Insets getAutoscrollInsets ();
+ 
+   /**
+    * Notify the Component to autoscroll
+    *
+    * @param location A Point indicating the location of the cursor that
+    * triggered this operation
+    */
+   void autoscroll (Point location);
+ 
+ } // interface Autoscroll
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DnDConstants.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DnDConstants.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DnDConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DnDConstants.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* DnDConstants.java -- constants for drag-and-drop operations
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ /**
+  * This class contains various constants used in drag-and-drop operations.
+  * Why it is not an interface is beyond me.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public final class DnDConstants
+ {
+   /** No action takes place. */
+   public static final int ACTION_NONE = 0;
+ 
+   /** The copy action. */
+   public static final int ACTION_COPY = 1;
+ 
+   /** The move action. */
+   public static final int ACTION_MOVE = 2;
+ 
+   /** Either a copy or a move. */
+   public static final int ACTION_COPY_OR_MOVE = 3;
+ 
+   /**
+    * A link action. This does not copy or move, but creates a reference back
+    * to the original. However, since platforms differ on how a reference should
+    * behave, this action is not recommended for common use.
+    */
+   public static final int ACTION_LINK = 1073741824;
+ 
+   /** A synonym for {@link #ACTION_LINK}. */
+   public static final int ACTION_REFERENCE = ACTION_LINK;
+ 
+   private DnDConstants()
+   {
+     // Do nothing here.
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DnDEventMulticaster.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DnDEventMulticaster.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DnDEventMulticaster.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DnDEventMulticaster.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* DnDEventMulticaster.java -- helper class for listener chains in java.awt.dnd
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.AWTEventMulticaster;
+ import java.util.EventListener;
+ 
+ class DnDEventMulticaster extends AWTEventMulticaster
+ {
+   protected DnDEventMulticaster (EventListener a, EventListener b)
+   {
+     super (a, b);
+   }
+   
+   public static DragSourceListener add (DragSourceListener a,
+                                         DragSourceListener b)
+   {
+     return (DragSourceListener) addInternal (a, b);
+   }
+ 
+   public static DragSourceMotionListener add (DragSourceMotionListener a,
+                                               DragSourceMotionListener b)
+   {
+     return (DragSourceMotionListener) addInternal (a, b);
+   }
+   
+   public static DragSourceListener remove (DragSourceListener a,
+                                            DragSourceListener b)
+   {
+     return (DragSourceListener) removeInternal (a, b);
+   }
+ 
+   public static DragSourceMotionListener remove (DragSourceMotionListener a,
+                                                  DragSourceMotionListener b)
+   {
+     return (DragSourceMotionListener) removeInternal (a, b);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragGestureEvent.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragGestureEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragGestureEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragGestureEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,156 ----
+ /* DragGestureEvent.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Component;
+ import java.awt.Cursor;
+ import java.awt.Image;
+ import java.awt.Point;
+ import java.awt.datatransfer.Transferable;
+ import java.awt.event.InputEvent;
+ import java.util.EventObject;
+ import java.util.Iterator;
+ import java.util.List;
+ 
+ /**
+  * STUBBED
+  * @see DragGestureRecognizer
+  * @see DragGestureListener
+  * @see DragSource
+  * @since 1.2
+  */
+ public class DragGestureEvent extends EventObject
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 9080172649166731306L;
+ 
+   private DragSource dragSource;
+   private Component component;
+   private final Point origin;
+   private final int action;
+ 
+   public DragGestureEvent(DragGestureRecognizer dgr, int action, Point origin,
+                           List events)
+   {
+     super(dgr);
+     if (origin == null || events == null)
+       throw new IllegalArgumentException();
+     this.origin = origin;
+     this.action = action;
+   }
+ 
+   public DragGestureRecognizer getSourceAsDragGestureRecognizer()
+   {
+     return (DragGestureRecognizer) source;
+   }
+   public Component getComponent()
+   {
+     return null;
+   }
+   public DragSource getDragSource()
+   {
+     return null;
+   }
+   public Point getDragOrigin()
+   {
+     return origin;
+   }
+   public Iterator iterator()
+   {
+     return null;
+   }
+   public Object[] toArray()
+   {
+     return null;
+   }
+   public Object[] toArray(Object[] array)
+   {
+     return array;
+   }
+   public int getDragAction()
+   {
+     return 0;
+   }
+   public InputEvent getTriggerEvent()
+   {
+     return null;
+   }
+ 
+   /**
+    * Starts the drag given the initial Cursor to display, the Transferable
+    * object, and the DragSourceListener to use.
+    *
+    * @exception InvalidDnDOperationException If the Drag and Drop system is
+    * unable to initiate a drag operation, or if the user attempts to start
+    * a drag while an existing drag operation is still executing.
+    */
+   public void startDrag(Cursor dragCursor, Transferable trans)
+   {
+     startDrag(dragCursor, null, null, trans, null);
+   }
+ 
+   /**
+    * Starts the drag given the initial Cursor to display, the Transferable
+    * object, and the DragSourceListener to use.
+    *
+    * @exception InvalidDnDOperationException If the Drag and Drop system is
+    * unable to initiate a drag operation, or if the user attempts to start
+    * a drag while an existing drag operation is still executing.
+    */
+   public void startDrag(Cursor dragCursor, Transferable trans,
+                         DragSourceListener l)
+   {
+     startDrag(dragCursor, null, null, trans, l);
+   }
+ 
+   /**
+    * Starts the drag given the initial Cursor to display, the Transferable
+    * object, and the DragSourceListener to use.
+    *
+    * @exception InvalidDnDOperationException If the Drag and Drop system is
+    * unable to initiate a drag operation, or if the user attempts to start
+    * a drag while an existing drag operation is still executing.
+    */
+   public void startDrag(Cursor dragCursor, Image dragImage, Point imageOffset,
+                         Transferable trans, DragSourceListener l)
+   {
+   }
+ } // class DragGestureEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragGestureListener.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragGestureListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragGestureListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragGestureListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* DragGestureListener.java --
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This is a listener for starting a drag-and-drop gesture. Upon receiving
+  * notification, the implementor then starts the drag operation.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see DragGestureRecognizer
+  * @see DragGestureEvent
+  * @see DragSource
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface DragGestureListener extends EventListener
+ {
+   /**
+    * Called when the native platform notifies the virtual machine that a
+    * drag-and-drop has been initiated.
+    *
+    * @param e the event
+    */
+   void dragGestureRecognized(DragGestureEvent e);
+ } // interface DragGestureListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragGestureRecognizer.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragGestureRecognizer.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragGestureRecognizer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragGestureRecognizer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,179 ----
+ /* DragGestureRecognizer.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Component;
+ import java.awt.Point;
+ import java.awt.event.InputEvent;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.util.ArrayList;
+ import java.util.TooManyListenersException;
+ 
+ /**
+  * STUBBED
+  * @since 1.2
+  */
+ public abstract class DragGestureRecognizer implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 8996673345831063337L;
+ 
+   protected DragSource dragSource;
+   protected Component component;
+   protected transient DragGestureListener dragGestureListener;
+   protected int sourceActions;
+   protected ArrayList events = new ArrayList();
+ 
+   protected DragGestureRecognizer(DragSource ds, Component c, int sa,
+                                   DragGestureListener dgl)
+   {
+     if (ds == null)
+       throw new IllegalArgumentException();
+     dragSource = ds;
+     component = c;
+     sourceActions = sa;
+     dragGestureListener = dgl;
+   }
+ 
+   protected DragGestureRecognizer(DragSource ds, Component c, int sa)
+   {
+     this(ds, c, sa, null);
+   }
+ 
+   protected DragGestureRecognizer(DragSource ds, Component c)
+   {
+     this(ds, c, 0, null);
+   }
+ 
+   protected DragGestureRecognizer(DragSource ds)
+   {
+     this(ds, null, 0, null);
+   }
+ 
+   protected abstract void registerListeners();
+ 
+   protected abstract void unregisterListeners();
+ 
+   public DragSource getDragSource()
+   {
+     return dragSource;
+   }
+ 
+   public Component getComponent()
+   {
+     return component;
+   }
+ 
+   public void setComponent(Component c)
+   {
+     component = c;
+   }
+ 
+   public int getSourceActions()
+   {
+     return sourceActions;
+   }
+ 
+   public void setSourceActions(int sa)
+   {
+     sourceActions = sa;
+   }
+ 
+   public InputEvent getTriggerEvent()
+   {
+     return events.size() > 0 ? (InputEvent) events.get(0) : null;
+   }
+ 
+   public void resetRecognizer()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   /**
+    * Register a new DragGestureListener.
+    *
+    * @exception TooManyListenersException If a DragGestureListener has already
+    * been added.
+    */
+   public void addDragGestureListener(DragGestureListener dgl)
+     throws TooManyListenersException
+   {
+     if (dragGestureListener != null)
+       throw new TooManyListenersException();
+     dragGestureListener = dgl;
+   }
+ 
+   public void removeDragGestureListener(DragGestureListener dgl)
+   {
+     if (dragGestureListener != dgl)
+       throw new IllegalArgumentException();
+     dragGestureListener = null;
+   }
+ 
+   protected void fireDragGestureRecognized(int dragAction, Point p)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   protected void appendEvent(InputEvent e)
+   {
+     if (e == null)
+       return;
+     events.add(e);
+   }
+ 
+   private void readObject(ObjectInputStream s)
+     throws ClassNotFoundException, IOException
+   {
+     s.defaultReadObject();
+     dragGestureListener = (DragGestureListener) s.readObject();
+   }
+ 
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     s.defaultWriteObject();
+     s.writeObject(dragGestureListener instanceof Serializable
+                   ? dragGestureListener : null);
+   }
+ } // class DragGestureRecognizer
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSource.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSource.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSource.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,257 ----
+ /* DragSource.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Component;
+ import java.awt.Cursor;
+ import java.awt.GraphicsEnvironment;
+ import java.awt.HeadlessException;
+ import java.awt.Image;
+ import java.awt.Point;
+ import java.awt.Toolkit;
+ import java.awt.datatransfer.FlavorMap;
+ import java.awt.datatransfer.SystemFlavorMap;
+ import java.awt.datatransfer.Transferable;
+ import java.awt.dnd.peer.DragSourceContextPeer;
+ import java.io.Serializable;
+ import java.util.EventListener;
+ 
+ /**
+  * @since 1.2
+  */
+ public class DragSource implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 6236096958971414066L;
+ 
+   public static final Cursor DefaultCopyDrop = null;
+   public static final Cursor DefaultMoveDrop = null;
+   public static final Cursor DefaultLinkDrop = null;
+   public static final Cursor DefaultCopyNoDrop = null;
+   public static final Cursor DefaultMoveNoDrop = null;
+   public static final Cursor DefaultLinkNoDrop = null;
+ 
+   private transient FlavorMap flavorMap = SystemFlavorMap.getDefaultFlavorMap ();
+ 
+   private transient DragSourceListener dragSourceListener;
+   private transient DragSourceMotionListener dragSourceMotionListener;
+ 
+   /**
+    * Initializes the drag source.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public DragSource()
+   {
+     if (GraphicsEnvironment.isHeadless())
+       throw new HeadlessException ();
+   }
+ 
+   /**
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+    */
+   public static DragSource getDefaultDragSource()
+   {
+     return null;
+   }
+ 
+   public static boolean isDragImageSupported()
+   {
+     return false;
+   }
+ 
+   /**
+    * Start a drag, given the DragGestureEvent that initiated the drag.
+    *
+    * @exception InvalidDnDOperationException If the Drag and Drop system is
+    * unable to initiate a drag operation, or if the user attempts to start
+    * a drag while an existing drag operation is still executing.
+    */
+   public void startDrag(DragGestureEvent trigger, Cursor dragCursor,
+                         Image dragImage, Point imageOffset,
+                         Transferable trans, DragSourceListener dsl,
+                         FlavorMap map)
+   {
+   }
+ 
+   /**
+    * Start a drag, given the DragGestureEvent that initiated the drag.
+    *
+    * @exception InvalidDnDOperationException If the Drag and Drop system is
+    * unable to initiate a drag operation, or if the user attempts to start
+    * a drag while an existing drag operation is still executing.
+    */
+   public void startDrag(DragGestureEvent trigger, Cursor dragCursor,
+                         Transferable trans, DragSourceListener dsl,
+                         FlavorMap map)
+   {
+     startDrag(trigger, dragCursor, null, null, trans, dsl, map);
+   }
+ 
+   /**
+    * Start a drag, given the DragGestureEvent that initiated the drag.
+    *
+    * @exception InvalidDnDOperationException If the Drag and Drop system is
+    * unable to initiate a drag operation, or if the user attempts to start
+    * a drag while an existing drag operation is still executing.
+    */
+   public void startDrag(DragGestureEvent trigger, Cursor dragCursor,
+                         Image dragImage, Point imageOffset,
+                         Transferable trans, DragSourceListener dsl)
+   {
+     startDrag(trigger, dragCursor, dragImage, imageOffset, trans, dsl, null);
+   }
+ 
+   /**
+    * Start a drag, given the DragGestureEvent that initiated the drag.
+    *
+    * @exception InvalidDnDOperationException If the Drag and Drop system is
+    * unable to initiate a drag operation, or if the user attempts to start
+    * a drag while an existing drag operation is still executing.
+    */
+   public void startDrag(DragGestureEvent trigger, Cursor dragCursor,
+                         Transferable trans, DragSourceListener dsl)
+   {
+     startDrag(trigger, dragCursor, null, null, trans, dsl, null);
+   }
+ 
+   /**
+    * Creates the DragSourceContext to handle this drag.
+    *
+    * @exception IllegalArgumentException FIXME
+    * @exception NullPointerException If dscp, dgl, dragImage or t is null.
+    */
+   protected DragSourceContext
+     createDragSourceContext(DragSourceContextPeer peer, DragGestureEvent dge,
+                             Cursor cursor, Image image, Point offset,
+                             Transferable t, DragSourceListener dsl)
+   {
+     return null;
+   }
+ 
+   public FlavorMap getFlavorMap()
+   {
+     return flavorMap;
+   }
+ 
+   public DragGestureRecognizer
+     createDragGestureRecognizer(Class recognizer, Component c, int actions,
+                                 DragGestureListener dgl)
+   {
+     return Toolkit.getDefaultToolkit ()
+                   .createDragGestureRecognizer (recognizer, this, c, actions,
+                                                 dgl);
+   }
+ 
+   public DragGestureRecognizer
+     createDefaultDragGestureRecognizer(Component c, int actions,
+                                        DragGestureListener dgl)
+   {
+     return createDragGestureRecognizer (MouseDragGestureRecognizer.class, c,
+                                         actions, dgl);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public void addDragSourceListener(DragSourceListener l)
+   {
+     DnDEventMulticaster.add (dragSourceListener, l);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public void removeDragSourceListener(DragSourceListener l)
+   {
+     DnDEventMulticaster.remove (dragSourceListener, l);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public DragSourceListener[] getDragSourceListeners()
+   {
+     return (DragSourceListener[]) getListeners (DragSourceListener.class);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public void addDragSourceMotionListener(DragSourceMotionListener l)
+   {
+     DnDEventMulticaster.add (dragSourceMotionListener, l);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public void removeDragSourceMotionListener(DragSourceMotionListener l)
+   {
+     DnDEventMulticaster.remove (dragSourceMotionListener, l);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public DragSourceMotionListener[] getDragSourceMotionListeners ()
+   {
+     return (DragSourceMotionListener[]) getListeners
+                                          (DragSourceMotionListener.class);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public EventListener[] getListeners (Class listenerType)
+   {
+     if (listenerType == DragSourceListener.class)
+       return DnDEventMulticaster.getListeners (dragSourceListener,
+                                                listenerType);
+ 
+     if (listenerType == DragSourceMotionListener.class)
+       return DnDEventMulticaster.getListeners (dragSourceMotionListener,
+                                                listenerType);
+ 
+     // Return an empty EventListener array.
+     return new EventListener [0];
+   }
+ } // class DragSource
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceAdapter.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,126 ----
+ /* DragSourceAdapter.java -- drag-and-drop listener adapter
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ /**
+  * This class implements <code>DragSourceListener</code> and
+  * <code>DragSourceMotionListener</code>, and implements all methods
+  * with empty bodies.  This allows a listener interested in implementing only
+  * a subset of these interfaces to extend this class and override only the
+  * desired methods.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see DragSourceEvent
+  * @see DragSourceListener
+  * @see DragSourceMotionListener
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public abstract class DragSourceAdapter
+   implements DragSourceListener, DragSourceMotionListener
+ {
+   /**
+    * Default constructor.
+    */
+   public DragSourceAdapter()
+   {
+   }
+ 
+   /**
+    * Called when the cursor hotspot enters a drop site which will accept the
+    * drag.
+    *
+    * @param e the event
+    */
+   public void dragEnter(DragSourceDragEvent e)
+   {
+   }
+ 
+   /**
+    * Called when the cursor hotspot moves inside of a drop site which will
+    * accept the drag.
+    *
+    * @param e the event
+    */
+   public void dragOver(DragSourceDragEvent e)
+   {
+   }
+ 
+   /**
+    * Called whenever the mouse is moved during a drag-and-drop operation.
+    *
+    * @param e the event
+    */
+   public void dragMouseMoved(DragSourceDragEvent e)
+   {
+   }
+ 
+   /**
+    * Called when the user modifies the drop gesture. This is often the case
+    * when additional mouse or key events are received during the drag.
+    *
+    * @param e the event
+    */
+   public void dropActionChanged(DragSourceDragEvent e)
+   {
+   }
+ 
+   /**
+    * Called when the cursor hotspot moves outside of a drop site which will
+    * accept the drag. This could also happen if the drop site is no longer
+    * active, or no longer accepts the drag.
+    *
+    * @param e the event
+    */
+   public void dragExit(DragSourceEvent e)
+   {
+   }
+ 
+   /**
+    * Called when the drag and drop operation is complete. After this event,
+    * <code>getDropSuccess</code> of the event is valid, and
+    * <code>getDropAction</code> holds the action requested by the drop site.
+    * Furthermore, the <code>DragSourceContext</code> is invalidated.
+    *
+    * @param e the event
+    */
+   public void dragDropEnd(DragSourceDropEvent e)
+   {
+   }
+ } // class DragSourceAdapter
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceContext.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceContext.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,200 ----
+ /* DragSourceContext.java --
+    Copyright (C) 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Component;
+ import java.awt.Cursor;
+ import java.awt.Image;
+ import java.awt.Point;
+ import java.awt.datatransfer.Transferable;
+ import java.awt.dnd.peer.DragSourceContextPeer;
+ import java.io.Serializable;
+ import java.util.TooManyListenersException;
+ 
+ /**
+  * @since 1.2
+  */
+ public class DragSourceContext
+   implements DragSourceListener, DragSourceMotionListener, Serializable
+ {
+   /**
+    * Compatible with JDK 1.2+
+    */
+   static final long serialVersionUID = -115407898692194719L;
+ 
+   protected static final int DEFAULT = 0;
+   protected static final int ENTER = 1;
+   protected static final int OVER = 2;
+   protected static final int CHANGED = 3;
+ 
+   private DragSourceContextPeer peer;
+   private Cursor cursor;
+   private Transferable transferable;
+   private DragGestureEvent trigger;
+   private DragSourceListener dragSourceListener;
+   private boolean useCustomCursor; // FIXME: currently unused but needed for serialization.
+   private int sourceActions; // FIXME: currently unused but needed for serialization.
+   private Image image;
+   private Point offset;
+   
+   /**
+    * Initializes a drag source context.
+    *
+    * @exception IllegalArgumentException If Component or DragSource of trigger
+    * are null, the drag action for the trigger event is DnDConstants.ACTION_NONE
+    * or if the source actions for the DragGestureRecognizer associated with the
+    * trigger event are equal to DnDConstants.ACTION_NONE.
+    * @exception NullPointerException If peer or trigger is null.
+    */
+   public DragSourceContext (DragSourceContextPeer peer,
+                             DragGestureEvent trigger, Cursor cursor,
+                             Image image, Point offset, Transferable trans,
+                             DragSourceListener dsl)
+   {
+     if (peer == null
+         || trigger == null)
+       throw new NullPointerException ();
+ 
+     if (trigger.getComponent () == null
+         || trigger.getDragSource () == null
+         || trigger.getDragAction () == DnDConstants.ACTION_NONE
+         || trigger.getSourceAsDragGestureRecognizer ()
+               .getSourceActions () == DnDConstants.ACTION_NONE)
+       throw new IllegalArgumentException ();
+ 
+     this.peer = peer;
+     this.trigger = trigger;
+     this.cursor = cursor;
+     this.image = image;
+     this.offset = offset;
+     this.transferable = trans;
+     this.dragSourceListener = dsl;
+     
+     throw new Error ("not implemented");
+   }
+ 
+   public DragSource getDragSource()
+   {
+     return trigger.getDragSource ();
+   }
+ 
+   public Component getComponent()
+   {
+     return trigger.getComponent ();
+   }
+ 
+   public DragGestureEvent getTrigger()
+   {
+     return trigger;
+   }
+ 
+   public int getSourceActions()
+   {
+     return trigger.getSourceAsDragGestureRecognizer ().getSourceActions ();
+   }
+ 
+   public void setCursor (Cursor cursor)
+   {
+     this.cursor = cursor;
+     // FIXME: Check if we need to do more here
+   }
+ 
+   public Cursor getCursor()
+   {
+     return cursor;
+   }
+ 
+   /**
+    * Adds a <code>DragSourceListener</code>.
+    *
+    * @exception TooManyListenersException If a <code>DragSourceListener</code>
+    * has already been added.
+    */
+   public void addDragSourceListener (DragSourceListener dsl)
+     throws TooManyListenersException
+   {
+     if (dragSourceListener != null)
+       throw new TooManyListenersException ();
+ 
+     dragSourceListener = dsl;
+   }
+ 
+   public void removeDragSourceListener (DragSourceListener dsl)
+   {
+     if (dragSourceListener == dsl)
+       dragSourceListener = null;
+   }
+ 
+   public void transferablesFlavorsChanged()
+   {
+   }
+ 
+   public void dragEnter(DragSourceDragEvent e)
+   {
+   }
+ 
+   public void dragOver(DragSourceDragEvent e)
+   {
+   }
+ 
+   public void dragExit(DragSourceEvent e)
+   {
+   }
+ 
+   public void dropActionChanged(DragSourceDragEvent e)
+   {
+   }
+ 
+   public void dragDropEnd(DragSourceDropEvent e)
+   {
+   }
+ 
+   public void dragMouseMoved(DragSourceDragEvent e)
+   {
+   }
+ 
+   public Transferable getTransferable()
+   {
+     return transferable;
+   }
+ 
+   protected void updateCurrentCursor(int dropOp, int targetAct, int status)
+   {
+   }
+ } // class DragSourceContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceDragEvent.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceDragEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceDragEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceDragEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* DragSourceDragEvent.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import gnu.java.awt.EventModifier;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.2
+  */
+ public class DragSourceDragEvent extends DragSourceEvent
+ {
+   /**
+    * Compatible with JDK 1.2+
+    */
+   private static final long serialVersionUID = 481346297933902471L;
+ 
+   private final int dropAction;
+   private final int targetActions;
+   private final int gestureModifiers;
+ 
+   public DragSourceDragEvent(DragSourceContext context, int dropAction,
+                              int actions, int modifiers)
+   {
+     super(context);
+     this.dropAction = dropAction;
+     targetActions = actions;
+     gestureModifiers = EventModifier.extend(modifiers);
+   }
+ 
+   public DragSourceDragEvent(DragSourceContext context, int dropAction,
+                              int actions, int modifiers, int x, int y)
+   {
+     super(context, x, y);
+     this.dropAction = dropAction;
+     targetActions = actions;
+     gestureModifiers = EventModifier.extend(modifiers);
+   }
+ 
+   public int getTargetActions()
+   {
+     return targetActions;
+   }
+ 
+   public int getGestureModifiers()
+   {
+     return EventModifier.revert(gestureModifiers);
+   }
+ 
+   public int getGestureModifiersEx()
+   {
+     return gestureModifiers;
+   }
+ 
+   public int getUserAction()
+   {
+     return dropAction;
+   }
+ 
+   public int getDropAction()
+   {
+     return (dropAction
+             & targetActions
+             & ((DragSourceContext) source).getSourceActions());
+   }
+ } // class DragSourceDragEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceDropEvent.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceDropEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceDropEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceDropEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* DragSourceDragEvent.java --
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.dnd;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.2
+  *
+  * Written using JDK 1.4.1 Online API
+  * Status: JDK 1.4 complete
+  */
+ public class DragSourceDropEvent extends DragSourceEvent
+ {
+   /**
+    * Compatible with JDK 1.2+
+    */
+   private static final long serialVersionUID = -5571321229470821891L;
+ 
+   private final int dropAction;
+   private final boolean dropSuccess;
+ 
+   public DragSourceDropEvent (DragSourceContext context)
+   {
+     super (context);
+     this.dropAction = 0;
+     this.dropSuccess = false;
+   }
+   
+   public DragSourceDropEvent (DragSourceContext context, int dropAction,
+                               boolean dropSuccess)
+   {
+     super (context);
+     this.dropAction = dropAction;
+     this.dropSuccess = dropSuccess;
+   }
+ 
+   public DragSourceDropEvent (DragSourceContext context, int dropAction,
+                               boolean dropSuccess, int x, int y)
+   {
+     super (context, x, y);
+     this.dropAction = dropAction;
+     this.dropSuccess = dropSuccess;
+   }
+ 
+   public int getDropAction()
+   {
+     return dropAction & ((DragSourceContext) source).getSourceActions();
+   }
+ 
+   public boolean getDropSuccess()
+   {
+     return dropSuccess;
+   }
+ } // class DragSourceDropEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceEvent.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,93 ----
+ /* DragSourceEvent.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Point;
+ import java.util.EventObject;
+ 
+ /**
+  * @since 1.2
+  */
+ public class DragSourceEvent extends EventObject
+ {
+   /**
+    * Compatible with JDK 1.2+
+    */
+   private static final long serialVersionUID = -763287114604032641L;
+   
+   private final boolean locationSpecified;
+   private final int x;
+   private final int y;
+ 
+   public DragSourceEvent(DragSourceContext context)
+   {
+     super(context);
+     locationSpecified = false;
+     x = 0;
+     y = 0;
+   }
+ 
+   public DragSourceEvent(DragSourceContext context, int x, int y)
+   {
+     super(context);
+     locationSpecified = true;
+     this.x = x;
+     this.y = y;
+   }
+ 
+   public DragSourceContext getDragSourceContext()
+   {
+     return (DragSourceContext) source;
+   }
+ 
+   public Point getLocation()
+   {
+     return locationSpecified ? new Point(x, y) : null;
+   }
+ 
+   public int getX()
+   {
+     return x;
+   }
+ 
+   public int getY()
+   {
+     return y;
+   }
+ } // class DragSourceEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceListener.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /* DragSourceListener.java -- listen to events during the drag
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This class allows an object to listen for drag and drop events. It can
+  * be used to provide appropriate feedback for "drag over" actions. You can
+  * also use a <code>DragSourceAdapter</code> to filter the events you are
+  * interested in.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface DragSourceListener extends EventListener
+ {
+   /**
+    * Called when the cursor hotspot enters a drop site which will accept the
+    * drag.
+    *
+    * @param e the drag source drag event
+    */
+   void dragEnter(DragSourceDragEvent e);
+ 
+   /**
+    * Called when the cursor hotspot moves inside of a drop site which will
+    * accept the drag.
+    *
+    * @param e the drag source drag event
+    */
+   void dragOver(DragSourceDragEvent e);
+ 
+   /**
+    * Called when the user modifies the drop gesture. This is often the case
+    * when additional mouse or key events are received during the drag.
+    *
+    * @param e the drag source drag event
+    */
+   void dropActionChanged(DragSourceDragEvent e);
+ 
+   /**
+    * Called when the cursor hotspot moves outside of a drop site which will
+    * accept the drag. This could also happen if the drop site is no longer
+    * active, or no longer accepts the drag.
+    *
+    * @param e the drag source drag event
+    */
+   void dragExit(DragSourceEvent e);
+ 
+   /**
+    * Called when the drag and drop operation is complete. After this event,
+    * <code>getDropSuccess</code> of the event is valid, and
+    * <code>getDropAction</code> holds the action requested by the drop site.
+    * Furthermore, the <code>DragSourceContext</code> is invalidated.
+    *
+    * @param e the drag source drag event
+    */
+   void dragDropEnd(DragSourceDropEvent e);
+ } // interface DragSourceListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceMotionListener.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceMotionListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DragSourceMotionListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DragSourceMotionListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* DragSourceMotionListener.java -- tracks motion in the drag source
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This is a listener for mouse motion in the drag source before the drop
+  * event occurs. You can also use a <code>DragSourceAdapter</code> to filter
+  * the events you are interested in.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see DragSourceDragEvent
+  * @see DragSource
+  * @see DragSourceListener
+  * @see DragSourceAdapter
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface DragSourceMotionListener extends EventListener
+ {
+   /**
+    * Called whenever the mouse is moved during a drag-and-drop operation.
+    *
+    * @param e the event
+    */
+   void dragMouseMoved(DragSourceDragEvent e);
+ } // interface DragSourceMotionListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTarget.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTarget.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTarget.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTarget.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,293 ----
+ /* DropTarget.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Component;
+ import java.awt.GraphicsEnvironment;
+ import java.awt.HeadlessException;
+ import java.awt.Point;
+ import java.awt.datatransfer.FlavorMap;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.io.Serializable;
+ import java.util.EventListener;
+ import java.util.TooManyListenersException;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.2
+  */
+ public class DropTarget
+   implements DropTargetListener, EventListener, Serializable
+ {
+   /**
+    * Compatible with JDK 1.2+
+    */
+   private static final long serialVersionUID = -6283860791671019047L;
+ 
+   /** @specnote According to the online documentation, this is
+    * protected, but in reality it is public.  */
+   public static class DropTargetAutoScroller
+     implements ActionListener
+   {
+     private Component component;
+     private Point point;
+     
+     protected DropTargetAutoScroller (Component c, Point p)
+     {
+       component = c;
+       point = p;
+     }
+ 
+     protected void updateLocation (Point newLocn)
+     {
+       point = newLocn;
+     }
+ 
+     protected void stop ()
+     {
+     }
+ 
+     public void actionPerformed (ActionEvent e)
+     {
+     }
+   }
+ 
+   private Component component;
+   private FlavorMap flavorMap;
+   private int actions;
+   private DropTargetContext dropTargetContext;
+   private DropTargetListener dropTargetListener;
+   private boolean active = true;
+     
+   /**
+    * Creates a <code>DropTarget</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+    * returns true.
+    */
+   public DropTarget ()
+   {
+     this (null, 0, null, true, null);
+   }
+   
+   /**
+    * Creates a <code>DropTarget</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+    * returns true.
+    */
+   public DropTarget (Component c, DropTargetListener dtl)
+   {
+     this (c, 0, dtl, true, null);
+   }
+   
+   /**
+    * Creates a <code>DropTarget</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+    * returns true.
+    */
+   public DropTarget (Component c, int i, DropTargetListener dtl)
+   {
+     this (c, i, dtl, true, null);
+   }
+   
+   /**
+    * Creates a <code>DropTarget</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+    * returns true.
+    */
+   public DropTarget (Component c, int i, DropTargetListener dtl, boolean b)
+   {
+     this (c, i, dtl, b, null);
+   }
+   
+   /**
+    * Creates a <code>DropTarget</code> object.
+    *
+    * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+    * returns true.
+    */
+   public DropTarget (Component c, int i, DropTargetListener dtl, boolean b,
+                      FlavorMap fm)
+   {
+     if (GraphicsEnvironment.isHeadless ())
+       throw new HeadlessException ();
+ 
+     component = c;
+     actions = i;
+     dropTargetListener = dtl;
+     flavorMap = fm;
+     
+     setActive (b);
+   }
+ 
+   /**
+    * Sets the component associated with this drop target object.
+    */
+   public void setComponent (Component c)
+   {
+     component = c;
+   }
+ 
+   /**
+    * Returns the component associated with this drop target object.
+    */
+   public Component getComponent ()
+   {
+     return component;
+   }
+ 
+   /**
+    * Sets the default actions.
+    */
+   public void setDefaultActions (int ops)
+   {
+     actions = ops;
+   }
+ 
+   /**
+    * Returns the default actions.
+    */
+   public int getDefaultActions ()
+   {
+     return actions;
+   }
+ 
+   public void setActive (boolean active)
+   {
+     this.active = active;
+   }
+ 
+   public boolean isActive()
+   {
+     return active;
+   }
+ 
+   /**
+    * Adds a new <code>DropTargetListener</code>.
+    * 
+    * @exception TooManyListenersException Sun's JDK does not, despite
+    * documentation, throw this exception here when you install an additional
+    * <code>DropTargetListener</code>.  So to be compatible, we do the same
+    * thing.
+    */
+   public void addDropTargetListener (DropTargetListener dtl)
+     throws TooManyListenersException
+   {
+     dropTargetListener = dtl;
+   }
+ 
+   public void removeDropTargetListener(DropTargetListener dtl)
+   {
+     // FIXME: Do we need to do something with dtl ?
+     dropTargetListener = null;
+   }
+ 
+   public void dragEnter(DropTargetDragEvent dtde)
+   {
+   }
+ 
+   public void dragOver(DropTargetDragEvent dtde)
+   {
+   }
+ 
+   public void dropActionChanged(DropTargetDragEvent dtde)
+   {
+   }
+ 
+   public void dragExit(DropTargetEvent dte)
+   {
+   }
+ 
+   public void drop(DropTargetDropEvent dtde)
+   {
+   }
+ 
+   public FlavorMap getFlavorMap()
+   {
+     return flavorMap;
+   }
+ 
+   public void setFlavorMap(FlavorMap fm)
+   {
+     flavorMap = fm;
+   }
+ 
+   public void addNotify(java.awt.peer.ComponentPeer peer)
+   {
+   }
+ 
+   public void removeNotify(java.awt.peer.ComponentPeer peer)
+   {
+   }
+ 
+   public DropTargetContext getDropTargetContext()
+   {
+     if (dropTargetContext == null)
+       dropTargetContext = createDropTargetContext ();
+     
+     return dropTargetContext;
+   }
+ 
+   protected DropTargetContext createDropTargetContext()
+   {
+     return new DropTargetContext (this);
+   }
+ 
+   protected DropTarget.DropTargetAutoScroller createDropTargetAutoScroller
+                                                        (Component c, Point p)
+   {
+     return new DropTarget.DropTargetAutoScroller (c, p);
+   }
+ 
+   protected void initializeAutoscrolling(Point p)
+   {
+   }
+ 
+   protected void updateAutoscroll(Point dragCursorLocn)
+   {
+   }
+ 
+   protected void clearAutoscroll()
+   {
+   }
+ } // class DropTarget
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetAdapter.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* DragSourceAdapter.java -- drag-and-drop listener adapter
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.dnd;
+ 
+ /**
+  * This class implements <code>DropTargetListener</code>, and implements all methods
+  * with empty bodies.  This allows a listener interested in implementing only
+  * a subset of these interfaces to extend this class and override only the
+  * desired methods.
+  *
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public abstract class DropTargetAdapter
+   implements DropTargetListener
+ {
+   /**
+    * Default constructor.
+    */
+   public DropTargetAdapter()
+   {
+   }
+ 
+   /**
+    * Called when the cursor hotspot enters a drop site which will accept the
+    * drag.
+    *
+    * @param e the event
+    */
+   public void dragEnter (DropTargetDragEvent e)
+   {
+   }
+ 
+   /**
+    * Called when the cursor hotspot moves inside of a drop site which will
+    * accept the drag.
+    *
+    * @param e the event
+    */
+   public void dragOver (DropTargetDragEvent e)
+   {
+   }
+ 
+   /**
+    * Called when the user modifies the drop gesture. This is often the case
+    * when additional mouse or key events are received during the drag.
+    *
+    * @param e the event
+    */
+   public void dropActionChanged (DropTargetDragEvent e)
+   {
+   }
+ 
+   /**
+    * Called when the cursor hotspot moves outside of a drop site which will
+    * accept the drag. This could also happen if the drop site is no longer
+    * active, or no longer accepts the drag.
+    *
+    * @param e the event
+    */
+   public void dragExit(DropTargetEvent e)
+   {
+   }
+ } // class DropTargetAdapter
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetContext.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetContext.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,188 ----
+ /* DropTargetContext.java --
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Component;
+ import java.awt.datatransfer.DataFlavor;
+ import java.awt.datatransfer.Transferable;
+ import java.awt.datatransfer.UnsupportedFlavorException;
+ import java.io.IOException;
+ import java.io.Serializable;
+ import java.util.Arrays;
+ import java.util.List;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.2
+  */
+ public class DropTargetContext implements Serializable
+ {
+   static final long serialVersionUID = -634158968993743371L;
+ 
+   /** @specnote According to the online documentation, this is
+    * protected, but in reality it is public.  */
+   public class TransferableProxy implements Transferable
+   {
+     protected boolean isLocal;
+     protected Transferable transferable;
+ 
+     TransferableProxy (Transferable t, boolean local)
+     {
+       this.transferable = t;
+       this.isLocal = local;
+     }
+     
+     public DataFlavor[] getTransferDataFlavors ()
+     {
+       return transferable.getTransferDataFlavors ();
+     }
+ 
+     public boolean isDataFlavorSupported (DataFlavor flavor)
+     {
+       return transferable.isDataFlavorSupported (flavor);
+     }
+ 
+     public Object getTransferData (DataFlavor flavor)
+       throws UnsupportedFlavorException, IOException
+     {
+       return transferable.getTransferData (flavor);
+     }
+   }
+ 
+   private DropTarget dropTarget;
+   private int targetActions;
+   private java.awt.dnd.peer.DropTargetContextPeer dtcp;
+ 
+   // package private
+   DropTargetContext (DropTarget dropTarget)
+   {
+     this.dropTarget = dropTarget;
+   }
+ 
+   public DropTarget getDropTarget ()
+   {
+     return dropTarget;
+   }
+ 
+   public Component getComponent ()
+   {
+     return dropTarget.getComponent ();
+   }
+ 
+   public void addNotify (java.awt.dnd.peer.DropTargetContextPeer dtcp)
+   {
+     this.dtcp = dtcp;
+   }
+ 
+   public void removeNotify ()
+   {
+     this.dtcp = null;
+   }
+ 
+   protected void setTargetActions (int actions)
+   {
+     targetActions = actions;
+   }
+ 
+   protected int getTargetActions()
+   {
+     return targetActions;
+   }
+ 
+   /**
+    * Signals that the drop is completed.
+    *
+    * @exception InvalidDnDOperationException If a drop is not outstanding.
+    */
+   public void dropComplete (boolean success)
+   {
+     // FIXME: implement this
+   }
+ 
+   protected void acceptDrag (int dragOperation)
+   {
+     // FIXME: implement this
+   }
+ 
+   protected void rejectDrag ()
+   {
+     // FIXME: implement this
+   }
+ 
+   protected void acceptDrop (int dropOperation)
+   {
+     // FIXME: implement this
+   }
+ 
+   protected void rejectDrop ()
+   {
+     // FIXME: implement this
+   }
+ 
+   protected DataFlavor[] getCurrentDataFlavors ()
+   {
+     // FIXME: implement this
+     return null;
+   }
+ 
+   protected List getCurrentDataFlavorsAsList ()
+   {
+     return Arrays.asList (getCurrentDataFlavors ());
+   }
+ 
+   protected boolean isDataFlavorSupported (DataFlavor flavor)
+   {
+     return getCurrentDataFlavorsAsList ().contains (flavor);
+   }
+ 
+   /**
+    * Return the <code>Transferable</code> operandof this operation.
+    *
+    * @exception InvalidDnDOperationException If a drag is not outstanding.
+    */
+   protected Transferable getTransferable() throws InvalidDnDOperationException
+   {
+     // FIXME: implement this
+     return null;
+   }
+ 
+   protected Transferable createTransferableProxy(Transferable t, boolean local)
+   {
+     return new TransferableProxy (t, local);
+   }
+ } // class DropTargetContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetDragEvent.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetDragEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetDragEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetDragEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* DropTargetDragEvent.java --
+    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Point;
+ import java.awt.datatransfer.DataFlavor;
+ import java.util.List;
+ 
+ /**
+  * @since 1.2
+  */
+ public class DropTargetDragEvent extends DropTargetEvent
+ {
+   /**
+    * Compatible with 1.2+
+    */
+   private static final long serialVersionUID = -8422265619058953682L;
+ 
+   private final int dropAction;
+   private final int srcActions;
+   private final Point location;
+ 
+   /**
+    * Initializes a <code>DropTargetDragEvent</code>.
+    *
+    * @exception IllegalArgumentException If dropAction is not one of DnDConstants,
+    * srcActions is not a bitwise mask of DnDConstants, or dtc is null.
+    * @exception NullPointerException If location is null.
+    */
+   public DropTargetDragEvent (DropTargetContext context, Point location,
+                               int dropAction, int srcActions)
+   {
+     super (context);
+ 
+     if (location == null)
+       throw new NullPointerException ();
+ 
+     if (context == null)
+       throw new IllegalArgumentException ();
+ 
+     if (dropAction != DnDConstants.ACTION_NONE
+         && dropAction != DnDConstants.ACTION_COPY
+         && dropAction != DnDConstants.ACTION_MOVE
+         && dropAction != DnDConstants.ACTION_COPY_OR_MOVE
+         && dropAction != DnDConstants.ACTION_LINK
+         && dropAction != DnDConstants.ACTION_REFERENCE)
+       throw new IllegalArgumentException ();
+ 
+     int srcActionsMask = DnDConstants.ACTION_NONE
+                          | DnDConstants.ACTION_COPY
+                          | DnDConstants.ACTION_MOVE
+                          | DnDConstants.ACTION_COPY_OR_MOVE
+                          | DnDConstants.ACTION_LINK
+                          | DnDConstants.ACTION_REFERENCE;
+     
+     if (~(srcActions ^ srcActionsMask) != 0)
+       throw new IllegalArgumentException ();
+     
+     this.dropAction = dropAction;
+     this.srcActions = srcActions;
+     this.location = location;
+   }
+ 
+   public void acceptDrag (int dragOperation)
+   {
+     context.acceptDrag (dragOperation);
+   }
+ 
+   public DataFlavor[] getCurrentDataFlavors ()
+   {
+     return context.getCurrentDataFlavors ();
+   }
+   
+   public List getCurrentDataFlavorsAsList ()
+   {
+     return context.getCurrentDataFlavorsAsList ();
+   }
+   
+   public int getDropAction()
+   {
+     return 0; 
+     //return dropAction & ((DropTargetContext) source).getTargetActions();
+   }
+ 
+   public Point getLocation ()
+   {
+     return location;
+   }
+ 
+   public int getSourceActions ()
+   {
+     return srcActions;
+   }
+ 
+   public boolean isDataFlavorSupported (DataFlavor df)
+   {
+     return context.isDataFlavorSupported (df);
+   }
+ 
+   public void rejectDrag ()
+   {
+     context.rejectDrag ();
+   }
+ } // class DropTargetDragEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetDropEvent.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetDropEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetDropEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetDropEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,170 ----
+ /* DropTargetDropEvent.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Point;
+ import java.awt.datatransfer.DataFlavor;
+ import java.awt.datatransfer.Transferable;
+ import java.util.List;
+ 
+ /**
+  * @since 1.2
+  */
+ public class DropTargetDropEvent extends DropTargetEvent
+ {
+   /**
+    * Compatible with JDK 1.2+
+    */
+   private static final long serialVersionUID = -1721911170440459322L;
+ 
+   private final int dropAction;
+   private final int actions;
+   private final Point location;
+   private final boolean isLocalTx;
+   
+   /**
+    * Initializes a <code>DropTargetDropEvent</code>. By default this constructor
+    * assumes that the target is not int same JVM.
+    *
+    * @exception IllegalArgumentException If dropAction is not one of DnDConstants,
+    * actions is not a bitwise mask of DnDConstants, or dtc is null.
+    * @exception NullPointerException If location is null.
+    */
+   public DropTargetDropEvent (DropTargetContext dtc, Point location,
+                               int dropAction, int actions)
+   {
+     this (dtc, location, dropAction, actions, false);
+   }
+ 
+   /**
+    * Initializes a <code>DropTargetDropEvent</code>.
+    *
+    * @exception IllegalArgumentException If dropAction is not one of DnDConstants,
+    * actions is not a bitwise mask of DnDConstants, or dtc is null.
+    * @exception NullPointerException If location is null.
+    */
+   public DropTargetDropEvent (DropTargetContext dtc, Point location,
+                               int dropAction, int actions, boolean isLocalTx)
+   {
+     super (dtc);
+ 
+     if (location == null)
+       throw new NullPointerException ();
+ 
+     if (dtc == null)
+       throw new IllegalArgumentException ();
+ 
+     if (dropAction != DnDConstants.ACTION_NONE
+         && dropAction != DnDConstants.ACTION_COPY
+         && dropAction != DnDConstants.ACTION_MOVE
+         && dropAction != DnDConstants.ACTION_COPY_OR_MOVE
+         && dropAction != DnDConstants.ACTION_LINK
+         && dropAction != DnDConstants.ACTION_REFERENCE)
+       throw new IllegalArgumentException ();
+ 
+     int actionsMask = DnDConstants.ACTION_NONE
+                       | DnDConstants.ACTION_COPY
+                       | DnDConstants.ACTION_MOVE
+                       | DnDConstants.ACTION_COPY_OR_MOVE
+                       | DnDConstants.ACTION_LINK
+                       | DnDConstants.ACTION_REFERENCE;
+     
+     if (~(actions ^ actionsMask) != 0)
+       throw new IllegalArgumentException ();
+     
+     this.dropAction = dropAction;
+     this.actions = actions;
+     this.location = location;
+     this.isLocalTx = isLocalTx;
+   }
+   
+   public Point getLocation ()
+   {
+     return location;
+   }
+ 
+   public DataFlavor[] getCurrentDataFlavors ()
+   {
+     return context.getCurrentDataFlavors ();
+   }
+ 
+   public List getCurrentDataFlavorsAsList ()
+   {
+     return context.getCurrentDataFlavorsAsList ();
+   }
+ 
+   public boolean isDataFlavorSupported (DataFlavor flavor)
+   {
+     return context.isDataFlavorSupported (flavor);
+   }
+ 
+   public int getSourceActions ()
+   {
+     return actions;
+   }
+ 
+   public int getDropAction ()
+   {
+     return dropAction;
+   }
+ 
+   public Transferable getTransferable ()
+   {
+     return context.getTransferable ();
+   }
+ 
+   public void acceptDrop (int dropAction)
+   {
+     context.acceptDrop (dropAction);
+   }
+ 
+   public void rejectDrop ()
+   {
+     context.rejectDrop ();
+   }
+ 
+   public void dropComplete (boolean success)
+   {
+     // FIXME: implement this
+   }
+ 
+   public boolean isLocalTransfer()
+   {
+     return isLocalTx;
+   }
+ } // class DropTargetDropEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetEvent.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /* DropTarget.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.dnd;
+ 
+ import java.util.EventObject;
+ 
+ public class DropTargetEvent extends EventObject
+ {
+   protected DropTargetContext context;
+ 
+   public DropTargetEvent (DropTargetContext context)
+   {
+     super (context);
+     this.context = context;
+   }
+   
+   public DropTargetContext getDropTargetContext ()
+   {
+     return context;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetListener.java gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/DropTargetListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/DropTargetListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* DropTargetListener.java -- listen to events during the drop
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface DropTargetListener extends EventListener
+ {
+   /**
+    * Called when the cursor hotspot enters a drop site which will accept the
+    * drag.
+    *
+    * @param e the drag source drag event
+    */
+   void dragEnter (DropTargetDragEvent e);
+ 
+   /**
+    * Called when the cursor hotspot moves inside of a drop site which will
+    * accept the drag.
+    *
+    * @param e the drag source drag event
+    */
+   void dragOver (DropTargetDragEvent e);
+ 
+   /**
+    * Called when the user modifies the drop gesture. This is often the case
+    * when additional mouse or key events are received during the drag.
+    *
+    * @param e the drag source drag event
+    */
+   void dropActionChanged (DropTargetDragEvent e);
+ 
+   /**
+    * Called when the cursor hotspot moves outside of a drop site which will
+    * accept the drag. This could also happen if the drop site is no longer
+    * active, or no longer accepts the drag.
+    *
+    * @param e the drag source drag event
+    */
+   void dragExit (DropTargetEvent e);
+ 
+   /**
+    * Called when the drag operation has terminated with a drop.
+    *
+    * @param e the drag source drag event
+    */
+   void drop (DropTargetDropEvent e);
+ } // interface DropTargetListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/InvalidDnDOperationException.java gcc-4.1.0/libjava/classpath/java/awt/dnd/InvalidDnDOperationException.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/InvalidDnDOperationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/InvalidDnDOperationException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* InvalidDnDOperationException.java -- thrown when drag-and-drop fails
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd;
+ 
+ /**
+  * Thrown when a method in the java.awt.dnd package is unable to perform a
+  * requested operation, usually because the underlying DnD system is in the
+  * wrong state.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class InvalidDnDOperationException extends IllegalStateException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -6062568741193956678L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public InvalidDnDOperationException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public InvalidDnDOperationException(String s)
+   {
+     super(s);
+   }
+ } // class InvalidDnDOperationException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/MouseDragGestureRecognizer.java gcc-4.1.0/libjava/classpath/java/awt/dnd/MouseDragGestureRecognizer.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/MouseDragGestureRecognizer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/MouseDragGestureRecognizer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,131 ----
+ /* MouseDragGestureRecognizer.java --
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.dnd;
+ 
+ import java.awt.Component;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.awt.event.MouseMotionListener;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class MouseDragGestureRecognizer 
+   extends DragGestureRecognizer
+   implements MouseListener, MouseMotionListener
+ {
+   /**
+    * Creates a <code>MouseDragGestureRecognizer</code> object.
+    */
+   protected MouseDragGestureRecognizer (DragSource ds, Component c, int act,
+ 		                        DragGestureListener dgl)
+   {
+     super (ds, c, act, dgl);
+   }
+ 
+   /**
+    * Creates a <code>MouseDragGestureRecognizer</code> object.
+    */
+   protected MouseDragGestureRecognizer (DragSource ds, Component c, int act)
+   {
+     super (ds, c, act);
+   }
+ 
+   /**
+    * Creates a <code>MouseDragGestureRecognizer</code> object.
+    */
+   protected MouseDragGestureRecognizer (DragSource ds, Component c)
+   {
+     super (ds, c);
+   }
+ 
+   /**
+    * Creates a <code>MouseDragGestureRecognizer</code> object.
+    */
+   protected MouseDragGestureRecognizer (DragSource ds)
+   {
+     super (ds);
+   }
+ 
+   protected void registerListeners ()
+   {
+     component.addMouseListener (this);
+     component.addMouseMotionListener (this);
+   }
+ 
+   protected void unregisterListeners ()
+   {
+     component.removeMouseListener (this);
+     component.removeMouseMotionListener (this);
+   }
+ 
+   public void mouseClicked (MouseEvent e)
+   {
+     // Do nothing in here by default.
+   }
+ 
+   public void mousePressed (MouseEvent e)
+   {
+     // Do nothing in here by default.
+   }
+ 
+   public void mouseReleased (MouseEvent e)
+   {
+     // Do nothing in here by default.
+   }
+ 
+   public void mouseEntered (MouseEvent e)
+   {
+     // Do nothing in here by default.
+   }
+ 
+   public void mouseExited (MouseEvent e)
+   {
+     // Do nothing in here by default.
+   }
+ 
+   public void mouseDragged (MouseEvent e)
+   {
+     // Do nothing in here by default.
+   }
+ 
+   public void mouseMoved (MouseEvent e)
+   {
+     // Do nothing in here by default.
+   }
+ } // class MouseDragGestureRecognizer
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/package.html gcc-4.1.0/libjava/classpath/java/awt/dnd/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.dnd package.
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.dnd</title></head>
+ 
+ <body>
+ <p>Events and listeners for drag and drop sources and targets.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/peer/DragSourceContextPeer.java gcc-4.1.0/libjava/classpath/java/awt/dnd/peer/DragSourceContextPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/peer/DragSourceContextPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/peer/DragSourceContextPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* DragSourceContextPeer.java -- interface for drag-and-drop peers
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd.peer;
+ 
+ import java.awt.Cursor;
+ import java.awt.Image;
+ import java.awt.Point;
+ import java.awt.dnd.DragSourceContext;
+ import java.awt.dnd.InvalidDnDOperationException;
+ 
+ /**
+  * STUBBED
+  */
+ public interface DragSourceContextPeer
+ {
+   void startDrag(DragSourceContext context, Cursor c, Image i, Point p)
+     throws InvalidDnDOperationException;
+   Cursor getCursor();
+   void setCursor(Cursor c) throws InvalidDnDOperationException;
+   void transferablesFlavorsChanged();
+ } // interface DragSourceContextPeer
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/peer/DropTargetContextPeer.java gcc-4.1.0/libjava/classpath/java/awt/dnd/peer/DropTargetContextPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/peer/DropTargetContextPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/peer/DropTargetContextPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /* DropTargetContextPeer.java -- interface for drag-and-drop peers
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.dnd.peer;
+ 
+ import java.awt.datatransfer.DataFlavor;
+ import java.awt.datatransfer.Transferable;
+ import java.awt.dnd.DropTarget;
+ import java.awt.dnd.InvalidDnDOperationException;
+ 
+ 
+ /**
+  * Used to control state of recipient protocol from the 
+  * <code>DropTargetListener</code>.  Occurs when a <code>Component</code>
+  * with an associated <code>DropTarget</code> and visible geometry is first 
+  * intersected by a logical cursor.
+  * 
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface DropTargetContextPeer
+ {
+   void setTargetActions(int actions);
+   int getTargetActions();
+   DropTarget getDropTarget();
+   DataFlavor[] getTransferDataFlavors();
+   Transferable getTransferable() throws InvalidDnDOperationException;
+   boolean isTransferableJVMLocal();
+   void acceptDrag(int dragAction);
+   void rejectDrag();
+   void acceptDrop(int dropAction);
+   void rejectDrop();
+   void dropComplete(boolean success);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/peer/DropTargetPeer.java gcc-4.1.0/libjava/classpath/java/awt/dnd/peer/DropTargetPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/peer/DropTargetPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/peer/DropTargetPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,48 ----
+ /* DropTargetPeer.java -- interface for drag-and-drop peers
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.dnd.peer;
+ 
+ import java.awt.dnd.DropTarget;
+ 
+ /**
+  */
+ public interface DropTargetPeer
+ {
+   void addDropTarget (DropTarget target);
+   void removeDropTarget (DropTarget target);
+ } // interface DropTargetContextPeer
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/dnd/peer/package.html gcc-4.1.0/libjava/classpath/java/awt/dnd/peer/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/dnd/peer/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/dnd/peer/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.dnd.peer package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.dnd.peer</title></head>
+ 
+ <body>
+ <p>Interfaces for using native interface components.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/AWTEventListener.java gcc-4.1.0/libjava/classpath/java/awt/event/AWTEventListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/AWTEventListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/AWTEventListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* AWTEventListener.java -- listen for all events in the AWT system
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Toolkit;
+ import java.util.EventListener;
+ 
+ /**
+  * This listener is for classes that need to listen to all events in the AWT
+  * system. In general, this should not be used except for classes like
+  * javax.accessibility or by event recorders.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see AWTEvent
+  * @see Toolkit#addAWTEventListener(AWTEventListener, long)
+  * @see Toolkit#removeAWTEventListener(AWTEventListener)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AWTEventListener extends EventListener
+ {
+   /**
+    * This method is called when any event in the AWT system is dispatched.
+    *
+    * @param event the AWTEvent that was dispatched
+    */
+   void eventDispatched(AWTEvent event);
+ } // interface AWTEventListener 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/AWTEventListenerProxy.java gcc-4.1.0/libjava/classpath/java/awt/event/AWTEventListenerProxy.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/AWTEventListenerProxy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/AWTEventListenerProxy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,155 ----
+ /* AWTEventListenerProxy.java -- wrapper/filter for AWTEventListener
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Toolkit;
+ import java.util.EventListenerProxy;
+ 
+ /**
+  * This class allows adding an AWTEventListener which only pays attention to
+  * a specific event mask.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Toolkit
+  * @see EventListenerProxy
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class AWTEventListenerProxy extends EventListenerProxy
+   implements AWTEventListener
+ {
+   /** The event mask. */
+   private final long mask;
+ 
+   /**
+    * Construct an AWT Event Listener which only listens to events in the given
+    * mask, passing the work on to the real listener.
+    *
+    * @param eventMask the mask of events to listen to
+    * @param listener the wrapped listener
+    */
+   public AWTEventListenerProxy(long eventMask, AWTEventListener listener)
+   {
+     super(listener);
+     mask = eventMask;
+   }
+ 
+   /**
+    * Forwards events on to the delegate if they meet the event mask.
+    *
+    * @param event the property change event to filter
+    * @throws NullPointerException if the delegate this was created with is null
+    */
+   public void eventDispatched(AWTEvent event)
+   {
+     int id = event == null ? 0 : event.getID();
+     if (((mask & AWTEvent.ACTION_EVENT_MASK) != 0
+          && event instanceof ActionEvent)
+         || ((mask & AWTEvent.ADJUSTMENT_EVENT_MASK) != 0
+             && event instanceof AdjustmentEvent)
+         || ((mask & AWTEvent.COMPONENT_EVENT_MASK) != 0
+             && event instanceof ComponentEvent
+             && (id >= ComponentEvent.COMPONENT_FIRST
+                 && id <= ComponentEvent.COMPONENT_LAST))
+         || ((mask & AWTEvent.CONTAINER_EVENT_MASK) != 0
+             && event instanceof ContainerEvent)
+         || ((mask & AWTEvent.FOCUS_EVENT_MASK) != 0
+             && event instanceof FocusEvent)
+         || ((mask & AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK) != 0
+             && event instanceof HierarchyEvent
+             && (id == HierarchyEvent.ANCESTOR_MOVED
+                 || id == HierarchyEvent.ANCESTOR_RESIZED))
+         || ((mask & AWTEvent.HIERARCHY_EVENT_MASK) != 0
+             && event instanceof HierarchyEvent
+             && id == HierarchyEvent.HIERARCHY_CHANGED)
+         || ((mask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0
+             && event instanceof InputMethodEvent)
+         || ((mask & AWTEvent.INVOCATION_EVENT_MASK) != 0
+             && event instanceof InvocationEvent)
+         || ((mask & AWTEvent.ITEM_EVENT_MASK) != 0
+             && event instanceof ItemEvent)
+         || ((mask & AWTEvent.KEY_EVENT_MASK) != 0
+             && event instanceof KeyEvent)
+         || ((mask & AWTEvent.MOUSE_EVENT_MASK) != 0
+             && event instanceof MouseEvent
+             && (id == MouseEvent.MOUSE_PRESSED
+                 || id == MouseEvent.MOUSE_RELEASED
+                 || id == MouseEvent.MOUSE_CLICKED
+                 || id == MouseEvent.MOUSE_ENTERED
+                 || id == MouseEvent.MOUSE_EXITED))
+         || ((mask & AWTEvent.MOUSE_MOTION_EVENT_MASK) != 0
+             && event instanceof MouseEvent
+             && (id == MouseEvent.MOUSE_MOVED
+                 || id == MouseEvent.MOUSE_DRAGGED))
+         || ((mask & AWTEvent.MOUSE_WHEEL_EVENT_MASK) != 0
+             && event instanceof MouseWheelEvent)
+         || ((mask & AWTEvent.PAINT_EVENT_MASK) != 0
+             && event instanceof PaintEvent)
+         || ((mask & AWTEvent.TEXT_EVENT_MASK) != 0
+             && event instanceof TextEvent)
+         || ((mask & AWTEvent.WINDOW_EVENT_MASK) != 0
+             && event instanceof WindowEvent
+             && (id == WindowEvent.WINDOW_OPENED
+                 || id == WindowEvent.WINDOW_CLOSING
+                 || id == WindowEvent.WINDOW_CLOSED
+                 || id == WindowEvent.WINDOW_ICONIFIED
+                 || id == WindowEvent.WINDOW_DEICONIFIED
+                 || id == WindowEvent.WINDOW_ACTIVATED
+                 || id == WindowEvent.WINDOW_DEACTIVATED))
+         || ((mask & AWTEvent.WINDOW_FOCUS_EVENT_MASK) != 0
+             && event instanceof WindowEvent
+             && (id == WindowEvent.WINDOW_GAINED_FOCUS
+                 || id == WindowEvent.WINDOW_LOST_FOCUS))
+         || ((mask & AWTEvent.WINDOW_STATE_EVENT_MASK) != 0
+             && event instanceof WindowEvent
+             && id == WindowEvent.WINDOW_STATE_CHANGED))
+       ((AWTEventListener) getListener()).eventDispatched(event);
+   }
+ 
+   /**
+    * This returns the event mask associated with this listener.
+    *
+    * @return the event mask
+    */
+   public long getEventMask()
+   {
+     return mask;
+   }
+ } // class AWTEventListenerProxy
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ActionEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/ActionEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ActionEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ActionEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,226 ----
+ /* ActionEvent.java -- an action has been triggered
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.EventQueue;
+ 
+ /**
+  * This event is generated when an action on a component (such as a
+  * button press) occurs.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ActionListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ActionEvent extends AWTEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -7671078796273832149L;
+ 
+   /** Bit mask indicating the shift key was pressed. */
+   public static final int SHIFT_MASK = InputEvent.SHIFT_MASK;
+ 
+   /** Bit mask indicating the control key was pressed. */
+   public static final int CTRL_MASK = InputEvent.CTRL_MASK;
+ 
+   /** Bit mask indicating the that meta key was pressed. */
+   public static final int META_MASK = InputEvent.META_MASK;
+ 
+   /** Bit mask indicating that the alt key was pressed. */
+   public static final int ALT_MASK = InputEvent.ALT_MASK;
+ 
+   /** The first id number in the range of action id's. */
+   public static final int ACTION_FIRST = 1001;
+ 
+   /** The last id number in the range of action id's. */
+   public static final int ACTION_LAST = 1001;
+ 
+   /** An event id indicating that an action has occurred. */
+   public static final int ACTION_PERFORMED = 1001;
+ 
+   /**
+    * A nonlocalized string that gives more specific details of the event cause.
+    *
+    * @see #getActionCommand()
+    * @serial the command for this event
+    */
+   private final String actionCommand;
+ 
+   /**
+    * The bitmask of the modifiers that were pressed during the action.
+    *
+    * @see #getModifiers()
+    * @serial modifiers for this event
+    */
+   private final int modifiers;
+ 
+   /**
+    * The timestamp of this event; usually the same as the underlying input
+    * event.
+    *
+    * @see #getWhen()
+    * @serial the timestamp of the event
+    * @since 1.4
+    */
+   private final long when;
+ 
+   /**
+    * Initializes a new instance of <code>ActionEvent</code> with the
+    * specified source, id, and command. Note that an invalid id leads to
+    * unspecified results.
+    *
+    * @param source the event source
+    * @param id the event id
+    * @param command the command string for this action
+    * @throws IllegalArgumentException if source is null
+    */
+   public ActionEvent(Object source, int id, String command)
+   {
+     this(source, id, command, EventQueue.getMostRecentEventTime(), 0);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>ActionEvent</code> with the
+    * specified source, id, command, and modifiers. Note that an invalid id
+    * leads to unspecified results.
+    *
+    * @param source the event source
+    * @param id the event id
+    * @param command the command string for this action
+    * @param modifiers the bitwise or of modifier keys down during the action
+    * @throws IllegalArgumentException if source is null
+    */
+   public ActionEvent(Object source, int id, String command, int modifiers)
+   {
+     this(source, id, command, EventQueue.getMostRecentEventTime(), modifiers);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>ActionEvent</code> with the
+    * specified source, id, command, and modifiers, and timestamp. Note that
+    * an invalid id leads to unspecified results.
+    *
+    * @param source the event source
+    * @param id the event id
+    * @param command the command string for this action
+    * @param when the timestamp of the event
+    * @param modifiers the bitwise or of modifier keys down during the action
+    * @throws IllegalArgumentException if source is null
+    * @since 1.4
+    */
+   public ActionEvent(Object source, int id, String command, long when,
+                      int modifiers)
+   {
+     super(source, id);
+     actionCommand = command;
+     this.when = when;
+     this.modifiers = modifiers;
+   }
+ 
+   /**
+    * Returns the command string associated with this action.
+    *
+    * @return the command string associated with this action
+    */
+   public String getActionCommand()
+   {
+     return actionCommand;
+   }
+ 
+   /**
+    * Gets the timestamp of when this action took place. Usually, this
+    * corresponds to the timestamp of the underlying InputEvent.
+    *
+    * @return the timestamp of this action
+    * @since 1.4
+    */
+   public long getWhen()
+   {
+     return when;
+   }
+ 
+   /**
+    * Returns the keys held down during the action.  This value will be a
+    * combination of the bit mask constants defined in this class, or 0 if no
+    * modifiers were pressed.
+    *
+    * @return the modifier bits
+    */
+   public int getModifiers()
+   {
+     return modifiers;
+   }
+ 
+   /**
+    * Returns a string that identifies the action event. This is in the format
+    * <code>"ACTION_PERFORMED,cmd=" + getActionCommand() + ",when=" + getWhen()
+    * + ",modifiers=" + &lt;modifier string&gt;</code>, where the modifier
+    * string is in the order "Meta", "Ctrl", "Alt", "Shift", "Alt Graph", and
+    * "Button1", separated by '+', according to the bits set in getModifiers().
+    *
+    * @return a string identifying the event
+    */
+   public String paramString()
+   {
+     StringBuffer s = new StringBuffer(id == ACTION_PERFORMED
+                                       ? "ACTION_PERFORMED,cmd="
+                                       : "unknown type,cmd=");
+     s.append(actionCommand).append(",when=").append(when).append(",modifiers");
+     int len = s.length();
+     s.setLength(len + 1);
+     if ((modifiers & META_MASK) != 0)
+       s.append("+Meta");
+     if ((modifiers & CTRL_MASK) != 0)
+       s.append("+Ctrl");
+     if ((modifiers & ALT_MASK) != 0)
+       s.append("+Alt");
+     if ((modifiers & SHIFT_MASK) != 0)
+       s.append("+Shift");
+     if ((modifiers & InputEvent.ALT_GRAPH_MASK) != 0)
+       s.append("+Alt Graph");
+     if ((modifiers & InputEvent.BUTTON1_MASK) != 0)
+       s.append("+Button1");
+     s.setCharAt(len, '=');
+     return s.toString();
+   }
+ } // class ActionEvent 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ActionListener.java gcc-4.1.0/libjava/classpath/java/awt/event/ActionListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ActionListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ActionListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* ActionListener.java -- listens for action events
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that listen for action events.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ActionEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface ActionListener extends EventListener
+ {
+   /**
+    * This method is invoked when an action occurs.
+    *
+    * @param event the <code>ActionEvent</code> that occurred
+    */
+   void actionPerformed(ActionEvent event);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/AdjustmentEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/AdjustmentEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/AdjustmentEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/AdjustmentEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,222 ----
+ /* AdjustmentEvent.java -- an adjustable value was changed
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Adjustable;
+ 
+ /**
+  * This class represents an event that is generated when an adjustable
+  * value is changed.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Adjustable
+  * @see AdjustmentListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class AdjustmentEvent extends AWTEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5700290645205279921L;
+ 
+   /** This is the first id in the range of ids used by adjustment events. */
+   public static final int ADJUSTMENT_FIRST = 601;
+ 
+   /** This is the last id in the range of ids used by adjustment events. */
+   public static final int ADJUSTMENT_LAST = 601;
+ 
+   /** This is the id indicating an adjustment value changed. */
+   public static final int ADJUSTMENT_VALUE_CHANGED = 601;
+ 
+   /** Adjustment type for unit increments. */
+   public static final int UNIT_INCREMENT = 1;
+ 
+   /** Adjustment type for unit decrements. */
+   public static final int UNIT_DECREMENT = 2;
+ 
+   /** Adjustment type for block decrements. */
+   public static final int BLOCK_DECREMENT = 3;
+ 
+   /** Adjustment type for block increments. */
+   public static final int BLOCK_INCREMENT = 4;
+ 
+   /** Adjustment type for tracking adjustments. */
+   public static final int TRACK = 5;
+ 
+   /**
+    * The adjustable object that caused the event.
+    *
+    * @see #getAdjustable()
+    * @serial the cause
+    */
+   private final Adjustable adjustable;
+ 
+   /**
+    * The type of adjustment, one of {@link #UNIT_INCREMENT},
+    * {@link #UNIT_DECREMENT}, {@link #BLOCK_INCREMENT},
+    * {@link #BLOCK_DECREMENT}, or {@link #TRACK}.
+    *
+    * @see #getAdjustmentType()
+    * @serial the adjustment type
+    */
+   private final int adjustmentType;
+ 
+   /**
+    * The new value of the adjustable; it should be in the range of the
+    * adjustable cause.
+    *
+    * @see #getValue()
+    * @serial the adjustment value
+    */
+   private final int value;
+ 
+   /**
+    * True if this is in a series of multiple adjustment events.
+    *
+    * @see #getValueIsAdjusting()
+    * @serial true if this is not the last adjustment
+    * @since 1.4
+    */
+   private final boolean isAdjusting;
+ 
+   /**
+    * Initializes an instance of <code>AdjustmentEvent</code> with the
+    * specified source, id, type, and value. Note that an invalid id leads to
+    * unspecified results.
+    *
+    * @param source the source of the event
+    * @param id the event id
+    * @param type the event type, one of the constants of this class
+    * @param value the value of the adjustment
+    * @throws IllegalArgumentException if source is null
+    */
+   public AdjustmentEvent(Adjustable source, int id, int type, int value)
+   {
+     this(source, id, type, value, false);
+   }
+ 
+   /**
+    * Initializes an instance of <code>AdjustmentEvent</code> with the
+    * specified source, id, type, and value. Note that an invalid id leads to
+    * unspecified results.
+    *
+    * @param source the source of the event
+    * @param id the event id
+    * @param type the event type, one of the constants of this class
+    * @param value the value of the adjustment
+    * @param isAdjusting if this event is in a chain of adjustments
+    * @throws IllegalArgumentException if source is null
+    * @since 1.4
+    */
+   public AdjustmentEvent(Adjustable source, int id, int type, int value,
+                          boolean isAdjusting)
+   {
+     super(source, id);
+     this.adjustmentType = type;
+     this.value = value;
+     adjustable = source;
+     this.isAdjusting = isAdjusting;
+   }
+ 
+   /**
+    * This method returns the source of the event as an <code>Adjustable</code>.
+    *
+    * @return the <code>Adjustable</code> source of the event
+    */
+   public Adjustable getAdjustable()
+   {
+     return adjustable;
+   }
+ 
+   /**
+    * Returns the new value of the adjustable object.
+    *
+    * @return the value of the event
+    */
+   public int getValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Returns the type of the event, which will be one of
+    * {@link #UNIT_INCREMENT}, {@link #UNIT_DECREMENT},
+    * {@link #BLOCK_INCREMENT}, {@link #BLOCK_DECREMENT}, or {@link #TRACK}.
+    *
+    * @return the type of the event
+    */
+   public int getAdjustmentType()
+   {
+     return adjustmentType;
+   }
+ 
+   /**
+    * Test if this event is part of a sequence of multiple adjustements.
+    *
+    * @return true if this is not the last adjustment
+    * @since 1.4
+    */
+   public boolean getValueIsAdjusting()
+   {
+     return isAdjusting;
+   }
+ 
+   /**
+    * Returns a string that describes the event. This is in the format
+    * <code>"ADJUSTMENT_VALUE_CHANGED,adjType=" + &lt;type&gt; + ",value="
+    * + getValue() + ",isAdjusting=" + getValueIsAdjusting()</code>, where
+    * type is the name of the constant returned by getAdjustmentType().
+    *
+    * @return a string that describes the event
+    */
+   public String paramString()
+   {
+     return (id == ADJUSTMENT_VALUE_CHANGED
+             ? "ADJUSTMENT_VALUE_CHANGED,adjType=" : "unknown type,adjType=")
+       + (adjustmentType == UNIT_INCREMENT ? "UNIT_INCREMENT,value="
+          : adjustmentType == UNIT_DECREMENT ? "UNIT_DECREMENT,value="
+          : adjustmentType == BLOCK_INCREMENT ? "BLOCK_INCREMENT,value="
+          : adjustmentType == BLOCK_DECREMENT ? "BLOCK_DECREMENT,value="
+          : adjustmentType == TRACK ? "TRACK,value=" : "unknown type,value=")
+       + value + ",isAdjusting=" + isAdjusting;
+   }
+ } // class AdjustmentEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/AdjustmentListener.java gcc-4.1.0/libjava/classpath/java/awt/event/AdjustmentListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/AdjustmentListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/AdjustmentListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* AdjustmentListener.java -- listen for adjustment events
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * Interface for classes that listen for adjustment events.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface AdjustmentListener extends EventListener
+ {
+   /**
+    * This method is called when an adjustable value changes.
+    *
+    * @param event the <code>AdjustmentEvent</code> that occurred
+    */
+   void adjustmentValueChanged(AdjustmentEvent event);
+ } // interface AdjustmentListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ComponentAdapter.java gcc-4.1.0/libjava/classpath/java/awt/event/ComponentAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ComponentAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ComponentAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /* ComponentAdapter.java -- convenience class for writing component listeners
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ /**
+  * This class implements <code>ComponentListener</code> and implements
+  * all methods with empty bodies.  This allows a listener interested in
+  * implementing only a subset of the <code>ComponentListener</code>
+  * interface to extend this class and override only the desired methods.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ComponentEvent
+  * @see ComponentListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class ComponentAdapter implements ComponentListener
+ {
+   /**
+    * Do nothing default constructor for subclasses.
+    */
+   public ComponentAdapter()
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void componentResized(ComponentEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void componentMoved(ComponentEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void componentShown(ComponentEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void componentHidden(ComponentEvent event)
+   {
+   }
+ } // class ComponentAdapter 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ComponentEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/ComponentEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ComponentEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ComponentEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /* ComponentEvent.java -- notification of events for components
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Component;
+ 
+ /**
+  * This class is for events generated when a component is moved, resized,
+  * hidden, or shown.  These events normally do not need to be handled by the
+  * application, since the AWT system automatically takes care of them. This
+  * is also the superclass for other events on components, but
+  * ComponentListeners ignore such subclasses.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ComponentAdapter
+  * @see ComponentListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ComponentEvent extends AWTEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 8101406823902992965L;
+ 
+   /** This is the first id in the range of ids used by this class. */
+   public static final int COMPONENT_FIRST = 100;
+ 
+   /** This is the last id in the range of ids used by this class. */
+   public static final int COMPONENT_LAST = 103;
+ 
+   /** This id indicates that a component was moved. */
+   public static final int COMPONENT_MOVED = 100;
+ 
+   /** This id indicates that a component was resized. */
+   public static final int COMPONENT_RESIZED = 101;
+ 
+   /** This id indicates that a component was shown. */
+   public static final int COMPONENT_SHOWN = 102;
+ 
+   /** This id indicates that a component was hidden. */
+   public static final int COMPONENT_HIDDEN = 103;
+ 
+   /**
+    * Initializes a new instance of <code>ComponentEvent</code> with the
+    * specified source and id. Note that an invalid id leads to unspecified
+    * results.
+    *
+    * @param source the source of the event
+    * @param id the event id
+    * @throws IllegalArgumentException if source is null
+    */
+   public ComponentEvent(Component source, int id)
+   {
+     super(source, id);
+   }
+ 
+   /**
+    * This method returns the event source as a <code>Component</code>. If the
+    * source has subsequently been modified to a non-Component, this returns
+    * null.
+    *
+    * @return the event source as a <code>Component</code>, or null
+    */
+   public Component getComponent()
+   {
+     return source instanceof Component ? (Component) source : null;
+   }
+ 
+   /**
+    * This method returns a string identifying this event. This is the field
+    * name of the id type, and for COMPONENT_MOVED or COMPONENT_RESIZED, the
+    * new bounding box of the component.
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     // Unlike Sun, we don't throw NullPointerException or ClassCastException
+     // when source was illegally changed.
+     switch (id)
+       {
+       case COMPONENT_MOVED:
+         return "COMPONENT_MOVED "
+           + (source instanceof Component
+              ? ((Component) source).getBounds() : (Object) "");
+       case COMPONENT_RESIZED:
+         return "COMPONENT_RESIZED "
+           + (source instanceof Component
+              ? ((Component) source).getBounds() : (Object) "");
+       case COMPONENT_SHOWN:
+         return "COMPONENT_SHOWN";
+       case COMPONENT_HIDDEN:
+         return "COMPONENT_HIDDEN";
+       default:
+         return "unknown type";
+       }
+   }
+ } // class ComponentEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ComponentListener.java gcc-4.1.0/libjava/classpath/java/awt/event/ComponentListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ComponentListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ComponentListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,84 ----
+ /* ComponentListener.java -- receive all events for a component
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that receive all events from a component.
+  * Normally it is not necessary to process these events since the AWT
+  * handles them internally, taking all appropriate actions. To watch a subset
+  * of these events, use a ComponentAdapter.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ComponentAdapter
+  * @see ComponentEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface ComponentListener extends EventListener
+ {
+   /**
+    * This method is called when the component is resized.
+    *
+    * @param event the <code>ComponentEvent</code> indicating the resize
+    */
+   void componentResized(ComponentEvent event);
+ 
+   /**
+    * This method is called when the component is moved.
+    *
+    * @param event the <code>ComponentEvent</code> indicating the move
+    */
+   void componentMoved(ComponentEvent event);
+ 
+   /**
+    * This method is called when the component is made visible.
+    *
+    * @param event the <code>ComponentEvent</code> indicating the visibility
+    */
+   void componentShown(ComponentEvent event);
+ 
+   /**
+    * This method is called when the component is hidden.
+    *
+    * @param event the <code>ComponentEvent</code> indicating the visibility
+    */
+   void componentHidden(ComponentEvent event);
+ } // interface ComponentListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ContainerAdapter.java gcc-4.1.0/libjava/classpath/java/awt/event/ContainerAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ContainerAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ContainerAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* ContainerAdapter.java -- convenience class for writing container listeners
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ /**
+  * This class implements <code>ContainerListener</code> and implements
+  * all methods with empty bodies.  This allows a listener interested in
+  * implementing only a subset of the <code>ContainerListener</code>
+  * interface to extend this class and override only the desired methods.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ContainerEvent
+  * @see ContainerListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class ContainerAdapter implements ContainerListener
+ {
+   /**
+    * Do nothing default constructor for subclasses.
+    */
+   public ContainerAdapter()
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void componentAdded(ContainerEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void componentRemoved(ContainerEvent event)
+   {
+   }
+ } // class ContainerAdapter
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ContainerEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/ContainerEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ContainerEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ContainerEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,135 ----
+ /* ContainerEvent.java -- components added/removed from a container
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.Component;
+ import java.awt.Container;
+ 
+ /**
+  * This event is generated when a component is added or removed from a
+  * container.  Applications do not ordinarily need to handle these events
+  * since the AWT system handles them internally.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ContainerAdapter
+  * @see ContainerListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ContainerEvent extends ComponentEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -4114942250539772041L;
+ 
+   /** This is the first id in the id range used by this class. */
+   public static final int CONTAINER_FIRST = 300;
+ 
+   /** This is the last id in the id range used by this class. */
+   public static final int CONTAINER_LAST = 301;
+ 
+   /** This id indicates a component was added to the container. */
+   public static final int COMPONENT_ADDED = 300;
+ 
+   /** This id indicates a component was removed from the container. */
+   public static final int COMPONENT_REMOVED = 301;
+ 
+   /**
+    * The non-null child component that was added or removed.
+    *
+    * @serial the child component that changed
+    */
+   private final Component child;
+ 
+   /**
+    * Initializes a new instance of <code>ContainerEvent</code> with the
+    * specified source and id.  Additionally, the affected child component
+    * is also passed as a parameter. Note that an invalid id leads to
+    * unspecified results.
+    *
+    * @param source the source container of the event
+    * @param id the event id
+    * @param child the child component affected by this event
+    * @throws IllegalArgumentException if source is null
+    */
+   public ContainerEvent(Component source, int id, Component child)
+   {
+     super(source, id);
+     this.child = child;
+   }
+ 
+   /**
+    * Returns the source of this event as a <code>Container</code>.
+    *
+    * @return the source of the event
+    * @throws ClassCastException if the source is changed to a non-Container
+    */
+   public Container getContainer()
+   {
+     return (Container) source;
+   }
+ 
+   /**
+    * This method returns the child object that was added or removed from
+    * the container.
+    *
+    * @return the child object added or removed
+    */
+   public Component getChild()
+   {
+     return child;
+   }
+ 
+   /**
+    * This method returns a string identifying this event. It is formatted as:
+    * <code>(getID() == COMPONENT_ADDED ? "COMPONENT_ADDED"
+    * : "COMPONENT_REMOVED") + ",child=" + getChild().getName()</code>.
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     // Unlike Sun, we don't throw NullPointerException if child is illegally
+     // null.
+     return (id == COMPONENT_ADDED ? "COMPONENT_ADDED,child="
+             : id == COMPONENT_REMOVED ? "COMPONENT_REMOVED,child="
+             : "unknown type,child=") + (child == null ? "" : child.getName());
+   }
+ } // class ContainerEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ContainerListener.java gcc-4.1.0/libjava/classpath/java/awt/event/ContainerListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ContainerListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ContainerListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* ContainerListener.java -- listen for container events
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to listen for all events from
+  * container objects.  This is normally not necessary since the AWT system
+  * listens for and processes these events. To watch a subset of these events,
+  * use a ContainerAdapter.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ContainerAdapter
+  * @see ContainerEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface ContainerListener extends EventListener
+ {
+   /**
+    * This method is called when a component is added to the container.
+    *
+    * @param event the <code>ContainerEvent</code> indicating component addition
+    */
+   void componentAdded(ContainerEvent event);
+ 
+   /**
+    * This method is called when a component is removed from the container.
+    *
+    * @param event the <code>ContainerEvent</code> indicating component removal
+    */
+   void componentRemoved(ContainerEvent event);
+ } // interface ContainerListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/FocusAdapter.java gcc-4.1.0/libjava/classpath/java/awt/event/FocusAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/FocusAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/FocusAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* FocusAdapter.java -- convenience class for writing focus listeners
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ /**
+  * This class implements <code>FocusListener</code> and implements all
+  * methods with empty bodies.  This allows a listener interested in
+  * implementing only a subset of the <code>FocusListener</code> interface to
+  * extend this class and override only the desired methods.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see FocusEvent
+  * @see FocusListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class FocusAdapter implements FocusListener
+ {
+   /**
+    * Do nothing default constructor for subclasses.
+    */
+   public FocusAdapter()
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void focusGained(FocusEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void focusLost(FocusEvent event)
+   {
+   }
+ } // class FocusAdapter
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/FocusEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/FocusEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/FocusEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/FocusEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,181 ----
+ /* FocusEvent.java -- generated for a focus change
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.Component;
+ 
+ /**
+  * This class represents an event generated when a focus change occurs for a
+  * component. There are both temporary changes, such as when focus is stolen
+  * during a sroll then returned, and permanent changes, such as when the user
+  * TABs through focusable components.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see FocusAdapter
+  * @see FocusListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class FocusEvent extends ComponentEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 523753786457416396L;
+ 
+   /** This is the first id in the range of ids used by this class. */
+   public static final int FOCUS_FIRST = 1004;
+ 
+   /** This is the last id in the range of ids used by this class. */
+   public static final int FOCUS_LAST = 1005;
+ 
+   /** This is the event id for a focus gained event. */
+   public static final int FOCUS_GAINED = 1004;
+ 
+   /** This is the event id for a focus lost event. */
+   public static final int FOCUS_LOST = 1005;
+ 
+   /**
+    * Indicates whether or not the focus change is temporary.
+    *
+    * @see #isTemporary()
+    * @serial true if the focus change is temporary
+    */
+   private final boolean temporary;
+ 
+   /**
+    * The other component which is giving up or stealing focus from this
+    * component, if known.
+    *
+    * @see #getOppositeComponent()
+    * @serial the component with the opposite focus event, or null
+    * @since 1.4
+    */
+   private final Component opposite;
+ 
+   /**
+    * Initializes a new instance of <code>FocusEvent</code> with the
+    * specified source, id, temporary status, and opposite counterpart. Note
+    * that an invalid id leads to unspecified results.
+    *
+    * @param source the component that is gaining or losing focus
+    * @param id the event id
+    * @param temporary true if the focus change is temporary
+    * @param opposite the component receiving the opposite focus event, or null
+    * @throws IllegalArgumentException if source is null
+    */
+   public FocusEvent(Component source, int id, boolean temporary,
+                     Component opposite)
+   {
+     super(source, id);
+     this.temporary = temporary;
+     this.opposite = opposite;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>FocusEvent</code> with the
+    * specified source, id, and temporary status. Note that an invalid id
+    * leads to unspecified results.
+    *
+    * @param source the component that is gaining or losing focus
+    * @param id the event id
+    * @param temporary true if the focus change is temporary
+    * @throws IllegalArgumentException if source is null
+    */
+   public FocusEvent(Component source, int id, boolean temporary)
+   {
+     this(source, id, temporary, null);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>FocusEvent</code> with the
+    * specified source and id. Note that an invalid id leads to unspecified
+    * results.
+    *
+    * @param source the component that is gaining or losing focus
+    * @param id the event id
+    * @throws IllegalArgumentException if source is null
+    */
+   public FocusEvent(Component source, int id)
+   {
+     this(source, id, false, null);
+   }
+ 
+   /**
+    * This method tests whether or not the focus change is temporary or
+    * permanent.
+    *
+    * @return true if the focus change is temporary
+    */
+   public boolean isTemporary()
+   {
+     return temporary;
+   }
+ 
+   /**
+    * Returns the component which received the opposite focus event. If this
+    * component gained focus, the opposite lost focus; likewise if this
+    * component is giving up focus, the opposite is gaining it. If this
+    * information is unknown, perhaps because the opposite is a native
+    * application, this returns null.
+    *
+    * @return the component with the focus opposite, or null
+    * @since 1.4
+    */
+   public Component getOppositeComponent()
+   {
+     return opposite;
+   }
+ 
+   /**
+    * Returns a string identifying this event. This is formatted as:
+    * <code>(getID() == FOCUS_GAINED ? "FOCUS_GAINED" : "FOCUS_LOST")
+    * + (isTemporary() ? ",temporary," : ",permanent,") + "opposite="
+    * + getOppositeComponent()</code>.
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     return (id == FOCUS_GAINED ? "FOCUS_GAINED"
+             : id == FOCUS_LOST ? "FOCUS_LOST" : "unknown type")
+       + (temporary ? ",temporary,opposite=" : ",permanent,opposite=")
+       + opposite;
+   }
+ } // class FocusEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/FocusListener.java gcc-4.1.0/libjava/classpath/java/awt/event/FocusListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/FocusListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/FocusListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* FocusListener.java -- listen for focus changes
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to be notified of changes of
+  * keyboard focus for a component. To watch a subset of these events, use a
+  * FocusAdapter.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see FocusAdapter
+  * @see FocusEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface FocusListener extends EventListener
+ {
+   /**
+    * This method is called when a component gains the keyboard focus.
+    *
+    * @param event the <code>FocusEvent</code> indicating that focus was gained
+    */
+   void focusGained(FocusEvent event);
+ 
+   /**
+    * This method is invoked when a component loses the keyboard focus.
+    *
+    * @param event the <code>FocusEvent</code> indicating that focus was lost
+    */
+   void focusLost(FocusEvent event);
+ } // interface FocusListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/HierarchyBoundsAdapter.java gcc-4.1.0/libjava/classpath/java/awt/event/HierarchyBoundsAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/HierarchyBoundsAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/HierarchyBoundsAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* HierarchyBoundsAdapter.java -- convenience class for writing listeners
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.event;
+ 
+ /**
+  * This class implements <code>HierarchyBoundsListener</code> and implements
+  * all methods with empty bodies.  This allows a listener interested in
+  * implementing only a subset of the <code>HierarchyBoundsListener</code>
+  * interface to extend this class and override only the desired methods.
+  *
+  * @author Bryce McKinlay
+  * @see HierarchyBoundsListener
+  * @see HierarchyEvent
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public abstract class HierarchyBoundsAdapter implements HierarchyBoundsListener
+ {
+   /**
+    * Do nothing default constructor for subclasses.
+    */
+   public HierarchyBoundsAdapter()
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void ancestorMoved(HierarchyEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void ancestorResized(HierarchyEvent event)
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/HierarchyBoundsListener.java gcc-4.1.0/libjava/classpath/java/awt/event/HierarchyBoundsListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/HierarchyBoundsListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/HierarchyBoundsListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* HierarchyBoundsListener.java -- listens to bounds changes of parents
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This listens for changes in an ancestors size or location. Normally it is
+  * not necessary to process these events since the AWT handles them
+  * internally, taking all appropriate actions. To watch a subset of these
+  * events, use a HierarchyBoundsAdapter.
+  *
+  * @author Bryce McKinlay
+  * @see HierarchyBoundsAdapter
+  * @see HierarchyEvent
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public interface HierarchyBoundsListener extends EventListener
+ {
+   /**
+    * Called when an ancestor component of the source is moved.
+    *
+    * @param e the event describing the ancestor's motion
+    */
+   void ancestorMoved(HierarchyEvent e);
+ 
+   /**
+    * Called when an ancestor component is resized.
+    *
+    * @param e the event describing the ancestor's resizing
+    */
+   void ancestorResized(HierarchyEvent e);
+ } // interface HierarchyBoundsListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/HierarchyEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/HierarchyEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/HierarchyEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/HierarchyEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,253 ----
+ /* HierarchyEvent.java -- generated for a change in hierarchy
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Component;
+ import java.awt.Container;
+ 
+ /**
+  * This class represents an event generated for an ancestor component which
+  * may affect this component. These events normally do not need to be handled
+  * by the application, since the AWT system automatically takes care of them.
+  *
+  * <p>There are two types of hierarchy events. The first type is handled by
+  * HierarchyListener, and includes addition or removal of an ancestor, or
+  * an ancestor changing its on-screen status (visible and/or displayble). The
+  * second type is handled by HierarchyBoundsListener, and includes resizing
+  * or moving of an ancestor.
+  *
+  * @author Bryce McKinlay
+  * @see HierarchyListener
+  * @see HierarchyBoundsAdapter
+  * @see HierarchyBoundsListener
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public class HierarchyEvent extends AWTEvent
+ {
+   /**
+    * Compatible with JDK 1.3+.
+    */
+   private static final long serialVersionUID = -5337576970038043990L;
+ 
+   /** This is the first id in the range of ids used by this class. */
+   public static final int HIERARCHY_FIRST = 1400;
+ 
+   /** This id indicates that the hierarchy tree changed. */
+   public static final int HIERARCHY_CHANGED = 1400;
+ 
+   /** This id indicates that an ancestor was moved. */
+   public static final int ANCESTOR_MOVED = 1401;
+ 
+   /** This id indicates that an ancestor was resized. */
+   public static final int ANCESTOR_RESIZED = 1402;
+ 
+   /** This is the last id in the range of ids used by this class. */
+   public static final int HIERARCHY_LAST = 1402;
+ 
+   /** This indicates that the HIERARCHY_CHANGED is a changed parent. */
+   public static final int PARENT_CHANGED = 1;
+ 
+   /**
+    * This indicates that the HIERARCHY_CHANGED is caused by a change in
+    * displayability.
+    *
+    * @see Component#isDisplayable()
+    * @see Component#addNotify()
+    * @see Component#removeNotify()
+    */
+   public static final int DISPLAYABILITY_CHANGED = 2;
+ 
+   /**
+    * This indicates that the HIERARCHY_CHANGED is a changed visibility.
+    *
+    * @see Component#isShowing()
+    * @see Component#addNotify()
+    * @see Component#removeNotify()
+    * @see Component#show()
+    * @see Component#hide()
+    */
+   public static final int SHOWING_CHANGED = 4;
+ 
+   /**
+    * The component at the top of the changed hierarchy.
+    *
+    * @serial the top component changed
+    */
+   private final Component changed;
+ 
+   /**
+    * The parent of this component, either before or after the change depending
+    * on the type of change.
+    *
+    * @serial the parent component changed
+    */
+   private final Container changedParent;
+ 
+   /**
+    * The bitmask of HIERARCHY_CHANGED event types.
+    *
+    * @serial the change flags
+    */
+   private final long changeFlags;
+ 
+   /**
+    * Initializes a new instance of <code>HierarchyEvent</code> with the
+    * specified parameters. Note that an invalid id leads to unspecified
+    * results.
+    *
+    * @param source the component whose hierarchy changed
+    * @param id the event id
+    * @param changed the top component in the tree of changed hierarchy
+    * @param changedParent the updated parent of this object
+    * @throws IllegalArgumentException if source is null
+    */
+   public HierarchyEvent(Component source, int id, Component changed,
+                         Container changedParent)
+   {
+     this(source, id, changed, changedParent, 0);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>HierarchyEvent</code> with the
+    * specified parameters. Note that an invalid id leads to unspecified
+    * results.
+    *
+    * @param source the component whose hierarchy changed
+    * @param id the event id
+    * @param changed the top component in the tree of changed hierarchy
+    * @param changedParent the updated parent of this object
+    * @param changeFlags the bitmask of specific HIERARCHY_CHANGED events
+    * @throws IllegalArgumentException if source is null
+    */
+   public HierarchyEvent(Component source, int id, Component changed,
+                         Container changedParent, long changeFlags)
+   {
+     super(source, id);
+     this.changed = changed;
+     this.changedParent = changedParent;
+     this.changeFlags = changeFlags;
+   }
+ 
+   /**
+    * This method returns the event source as a <code>Component</code>. If the
+    * source has subsequently been modified to a non-Component, this returns
+    * null.
+    *
+    * @return the event source as a <code>Component</code>, or null
+    */
+   public Component getComponent()
+   {
+     return source instanceof Component ? (Component) source : null;
+   }
+ 
+   /**
+    * Returns the component at the top of the hierarchy which changed.
+    *
+    * @return the top changed component
+    */
+   public Component getChanged()
+   {
+     return changed;
+   }
+ 
+   /**
+    * Returns the parent of the component listed in <code>getChanged()</code>.
+    * If the cause of this event was <code>Container.add</code>, this is the
+    * new parent; if the cause was <code>Container.remove</code>, this is the
+    * old parent; otherwise it is the unchanged parent.
+    *
+    * @return the parent container of the changed component
+    */
+   public Container getChangedParent()
+   {
+     return changedParent;
+   }
+ 
+   /**
+    * If this is a HIERARCHY_CHANGED event, this returns a bitmask of the
+    * types of changes that took place.
+    *
+    * @return the bitwise or of hierarchy change types, or 0
+    * @see #PARENT_CHANGED
+    * @see #DISPLAYABILITY_CHANGED
+    * @see #SHOWING_CHANGED
+    */
+   public long getChangeFlags()
+   {
+     return changeFlags;
+   }
+ 
+   /**
+    * This method returns a string identifying this event. This is the field
+    * name of the id type, followed by a parenthesized listing of the changed
+    * component and its parent container. In addition, if the type is
+    * HIERARCHY_CHANGED, the flags preceed the changed component, in the
+    * order PARENT_CHANGED, DISPLAYABILITY_CHANGED, and SHOWING_CHANGED.
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     StringBuffer r = new StringBuffer();
+     switch (id)
+       {
+       case HIERARCHY_CHANGED:
+         r.append("HIERARCHY_CHANGED (");
+         if ((changeFlags & PARENT_CHANGED) != 0)
+           r.append("PARENT_CHANGED,");
+         if ((changeFlags & DISPLAYABILITY_CHANGED) != 0)
+           r.append("DISPLAYABILITY_CHANGED,");
+         if ((changeFlags & SHOWING_CHANGED) != 0)
+           r.append("SHOWING_CHANGED,");
+         break;
+       case ANCESTOR_MOVED:
+         r.append("ANCESTOR_MOVED (");
+         break;
+       case ANCESTOR_RESIZED:
+         r.append("ANCESTOR_RESIZED (");
+         break;
+       default:
+         return "unknown type";
+       }
+     r.append(changed).append(',').append(changedParent).append(')');
+     return r.toString();
+   }
+ } // class HierarchyEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/HierarchyListener.java gcc-4.1.0/libjava/classpath/java/awt/event/HierarchyListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/HierarchyListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/HierarchyListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* HierarchyListener.java -- listens to changes in the component hierarchy
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This listens for changes in the hierarchy tree of components. Normally it is
+  * not necessary to process these events since the AWT handles them
+  * internally, taking all appropriate actions.
+  *
+  * @author Bryce McKinlay
+  * @see HierarchyEvent
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public interface HierarchyListener extends EventListener
+ {
+   /**
+    * Called when the hierarchy of this component changes. Use
+    * <code>getChangeFlags()</code> on the event to see what exactly changed.
+    *
+    * @param e the event describing the change
+    */
+   void hierarchyChanged(HierarchyEvent e);
+ } // interface HierarchyListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/InputEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/InputEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/InputEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/InputEvent.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,398 ----
+ /* InputEvent.java -- common superclass of component input events
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import gnu.java.awt.EventModifier;
+ 
+ import java.awt.Component;
+ 
+ /**
+  * This is the common superclass for all component input classes. These are
+  * passed to listeners before the component, so that listeners can consume
+  * the event before it does its default behavior.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see KeyEvent
+  * @see KeyAdapter
+  * @see MouseEvent
+  * @see MouseAdapter
+  * @see MouseMotionAdapter
+  * @see MouseWheelEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class InputEvent extends ComponentEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -2482525981698309786L;
+ 
+   /**
+    * This is the bit mask which indicates the shift key is down. It is
+    * recommended that SHIFT_DOWN_MASK be used instead.
+    *
+    * @see #SHIFT_DOWN_MASK
+    */
+   public static final int SHIFT_MASK = 1;
+ 
+   /**
+    * This is the bit mask which indicates the control key is down. It is
+    * recommended that CTRL_DOWN_MASK be used instead.
+    *
+    * @see #CTRL_DOWN_MASK
+    */
+   public static final int CTRL_MASK = 2;
+ 
+   /**
+    * This is the bit mask which indicates the meta key is down. It is
+    * recommended that META_DOWN_MASK be used instead.
+    *
+    * @see #META_DOWN_MASK
+    */
+   public static final int META_MASK = 4;
+ 
+   /**
+    * This is the bit mask which indicates the alt key is down. It is
+    * recommended that ALT_DOWN_MASK be used instead.
+    *
+    * @see #ALT_DOWN_MASK
+    */
+   public static final int ALT_MASK = 8;
+ 
+   /**
+    * This is the bit mask which indicates the alt-graph modifier is in effect.
+    * It is recommended that ALT_GRAPH_DOWN_MASK be used instead.
+    *
+    * @see #ALT_GRAPH_DOWN_MASK
+    */
+   public static final int ALT_GRAPH_MASK = 0x20;
+ 
+   /**
+    * This bit mask indicates mouse button one is down. It is recommended that
+    * BUTTON1_DOWN_MASK be used instead.
+    *
+    * @see #BUTTON1_DOWN_MASK
+    */
+   public static final int BUTTON1_MASK = 0x10;
+ 
+   /**
+    * This bit mask indicates mouse button two is down. It is recommended that
+    * BUTTON2_DOWN_MASK be used instead.
+    *
+    * @see #BUTTON2_DOWN_MASK
+    */
+   public static final int BUTTON2_MASK = 8;
+ 
+   /**
+    * This bit mask indicates mouse button three is down. It is recommended
+    * that BUTTON3_DOWN_MASK be used instead.
+    *
+    * @see #BUTTON3_DOWN_MASK
+    */
+   public static final int BUTTON3_MASK = 4;
+ 
+   /**
+    * The SHIFT key extended modifier.
+    *
+    * @since 1.4
+    */
+   public static final int SHIFT_DOWN_MASK = 0x0040;
+ 
+   /**
+    * The CTRL key extended modifier.
+    *
+    * @since 1.4
+    */
+   public static final int CTRL_DOWN_MASK = 0x0080;
+ 
+   /**
+    * The META key extended modifier.
+    *
+    * @since 1.4
+    */
+   public static final int META_DOWN_MASK = 0x0100;
+ 
+   /**
+    * The ALT key extended modifier.
+    *
+    * @since 1.4
+    */
+   public static final int ALT_DOWN_MASK = 0x0200;
+ 
+   /**
+    * The mouse button1 key extended modifier.
+    *
+    * @since 1.4
+    */
+   public static final int BUTTON1_DOWN_MASK = 0x0400;
+ 
+   /**
+    * The mouse button2 extended modifier.
+    *
+    * @since 1.4
+    */
+   public static final int BUTTON2_DOWN_MASK = 0x0800;
+ 
+   /**
+    * The mouse button3 extended modifier.
+    *
+    * @since 1.4
+    */
+   public static final int BUTTON3_DOWN_MASK = 0x1000;
+ 
+   /**
+    * The ALT_GRAPH key extended modifier.
+    *
+    * @since 1.4
+    */
+   public static final int ALT_GRAPH_DOWN_MASK = 0x2000;
+ 
+   /** The mask to convert new to old, package visible for use in subclasses. */
+   static final int CONVERT_MASK
+     = EventModifier.NEW_MASK & ~(BUTTON2_DOWN_MASK | BUTTON3_DOWN_MASK);
+ 
+   /**
+    * The timestamp when this event occurred.
+    *
+    * @see #getWhen()
+    * @serial the timestamp
+    */
+   private final long when;
+ 
+   /**
+    * The old-style modifiers in effect for this event. Package visible
+    * for use by subclasses. The old style (bitmask 0x3f) should not be
+    * mixed with the new style (bitmasks 0xffffffc0).
+    *
+    * @see #getModifiers()
+    * @see MouseEvent
+    * @serial the modifier state, stored in the old style
+    */
+   int modifiers;
+ 
+   /**
+    * The new-style modifiers in effect for this event. Package visible
+    * for use by subclasses. The old style (bitmask 0x3f) should not be
+    * mixed with the new style (bitmasks 0xffffffc0).
+    *
+    * @see #getModifiersEx()
+    * @see MouseEvent
+    * @serial the modifier state, stored in the new style
+    */
+   int modifiersEx;
+ 
+   /**
+    * Initializes a new instance of <code>InputEvent</code> with the specified
+    * source, id, timestamp, and modifiers. Note that an invalid id leads to
+    * unspecified results.
+    *
+    * @param source the source of the event
+    * @param id the event id
+    * @param when the timestamp when the event occurred
+    * @param modifiers the modifiers in effect for this event, old or new style
+    * @throws IllegalArgumentException if source is null
+    */
+   InputEvent(Component source, int id, long when, int modifiers)
+   {
+     super(source, id);
+     this.when = when;
+     this.modifiers = modifiers & EventModifier.OLD_MASK;
+     this.modifiersEx = modifiers & EventModifier.NEW_MASK;
+   }
+ 
+   /**
+    * This method tests whether or not the shift key was down during the event.
+    *
+    * @return true if the shift key is down
+    */
+   public boolean isShiftDown()
+   {
+     return ((modifiers & SHIFT_MASK) != 0)
+       || ((modifiersEx & SHIFT_DOWN_MASK) != 0);
+   }
+ 
+   /**
+    * This method tests whether or not the control key was down during the
+    * event.
+    *
+    * @return true if the control key is down
+    */
+   public boolean isControlDown()
+   {
+     return ((modifiers & CTRL_MASK) != 0)
+       || ((modifiersEx & CTRL_DOWN_MASK) != 0);
+   }
+ 
+   /**
+    * This method tests whether or not the meta key was down during the event.
+    *
+    * @return true if the meta key is down
+    */
+   public boolean isMetaDown()
+   {
+     return ((modifiers & META_MASK) != 0)
+       || ((modifiersEx & META_DOWN_MASK) != 0);
+   }
+ 
+   /**
+    * This method tests whether or not the alt key was down during the event.
+    *
+    * @return true if the alt key is down
+    */
+   public boolean isAltDown()
+   {
+     return ((modifiers & ALT_MASK) != 0)
+       || ((modifiersEx & ALT_DOWN_MASK) != 0);
+   }
+ 
+   /**
+    * This method tests whether or not the alt-graph modifier was in effect
+    * during the event.
+    *
+    * @return true if the alt-graph modifier is down
+    */
+   public boolean isAltGraphDown()
+   {
+     return ((modifiers & ALT_GRAPH_MASK) != 0)
+       || ((modifiersEx & ALT_GRAPH_DOWN_MASK) != 0);
+   }
+ 
+   /**
+    * This method returns the timestamp when this event occurred.
+    *
+    * @return the timestamp when this event occurred
+    */
+   public long getWhen()
+   {
+     return when;
+   }
+ 
+   /**
+    * This method returns the old-style modifiers in effect for this event. 
+    * Note that this is ambiguous between button2 and alt, and between
+    * button3 and meta. Also, code which generated these modifiers tends to
+    * only list the modifier that just changed, even if others were down at
+    * the time. Consider using getModifiersEx instead. This will be a union
+    * of the bit masks defined in this class that are applicable to the event.
+    *
+    * @return the modifiers in effect for this event
+    * @see #getModifiersEx()
+    */
+   public int getModifiers()
+   {
+     return modifiers;
+   }
+ 
+   /**
+    * Returns the extended modifiers (new-style) for this event. This represents
+    * the state of all modal keys and mouse buttons at the time of the event,
+    * and does not suffer from the problems mentioned in getModifiers.
+    *
+    * <p>For an example of checking multiple modifiers, this code will return
+    * true only if SHIFT and BUTTON1 were pressed and CTRL was not:
+    * <pre>
+    * int onmask = InputEvent.SHIFT_DOWN_MASK | InputEvent.BUTTON1_DOWN_MASK;
+    * int offmask = InputEvent.CTRL_DOWN_MASK;
+    * return (event.getModifiersEx() & (onmask | offmask)) == onmask;
+    * </pre>
+    *
+    * @return the bitwise or of all modifiers pressed during the event
+    * @since 1.4
+    */
+   public int getModifiersEx()
+   {
+     return modifiersEx;
+   }
+ 
+   /**
+    * Consumes this event.  A consumed event is not processed further by the AWT
+    * system.
+    */
+   public void consume()
+   {
+     consumed = true;
+   }
+ 
+   /**
+    * This method tests whether or not this event has been consumed.
+    *
+    * @return true if this event has been consumed
+    */
+   public boolean isConsumed()
+   {
+     return consumed;
+   }
+ 
+   /**
+    * Convert the extended modifier bitmask into a String, such as "Shift" or
+    * "Ctrl+Button1".
+    *
+    * XXX Sun claims this can be localized via the awt.properties file - how
+    * do we implement that?
+    *
+    * @param modifiers the modifiers
+    * @return a string representation of the modifiers in this bitmask
+    * @since 1.4
+    */
+   public static String getModifiersExText(int modifiers)
+   {
+     modifiers &= EventModifier.NEW_MASK;
+     if (modifiers == 0)
+       return "";
+     StringBuffer s = new StringBuffer();
+     if ((modifiers & META_DOWN_MASK) != 0)
+       s.append("Meta+");
+     if ((modifiers & CTRL_DOWN_MASK) != 0)
+       s.append("Ctrl+");
+     if ((modifiers & ALT_DOWN_MASK) != 0)
+       s.append("Alt+");
+     if ((modifiers & SHIFT_DOWN_MASK) != 0)
+       s.append("Shift+");
+     if ((modifiers & ALT_GRAPH_DOWN_MASK) != 0)
+       s.append("Alt Graph+");
+     if ((modifiers & BUTTON1_DOWN_MASK) != 0)
+       s.append("Button1+");
+     if ((modifiers & BUTTON2_DOWN_MASK) != 0)
+       s.append("Button2+");
+     if ((modifiers & BUTTON3_DOWN_MASK) != 0)
+       s.append("Button3+");
+     return s.substring(0, s.length() - 1);
+   }
+ } // class InputEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/InputMethodEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/InputMethodEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/InputMethodEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/InputMethodEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,303 ----
+ /* InputMethodEvent.java -- events from a text input method
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Component;
+ import java.awt.EventQueue;
+ import java.awt.font.TextHitInfo;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.text.AttributedCharacterIterator;
+ 
+ /**
+  * This class is for event generated by change in a text input method.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see InputMethodListener
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class InputMethodEvent extends AWTEvent
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 4727190874778922661L;
+ 
+   /** This is the first id in the range of event ids used by this class. */
+   public static final int INPUT_METHOD_FIRST = 1100;
+ 
+   /** This event id indicates that the text in the input method has changed. */
+   public static final int INPUT_METHOD_TEXT_CHANGED = 1100;
+ 
+   /** This event id indicates that the input method curor point has changed. */
+   public static final int CARET_POSITION_CHANGED = 1101;
+ 
+   /** This is the last id in the range of event ids used by this class. */
+   public static final int INPUT_METHOD_LAST = 1101;
+ 
+   /**
+    * The timestamp when this event was created.
+    *
+    * @serial the timestamp
+    * @since 1.4
+    */
+   private long when;
+ 
+   /** The input method text. */
+   private final transient AttributedCharacterIterator text;
+ 
+   /** The number of committed characters in the text. */
+   private final transient int committedCharacterCount;
+ 
+   /** The caret. */
+   private final transient TextHitInfo caret;
+ 
+   /** The most important position to be visible. */
+   private final transient TextHitInfo visiblePosition;
+ 
+   /**
+    * Initializes a new instance of <code>InputMethodEvent</code> with the
+    * specified source, id, timestamp, text, char count, caret, and visible
+    * position.
+    *
+    * @param source the source that generated the event
+    * @param id the event id
+    * @param when the timestamp of the event
+    * @param text the input text
+    * @param committedCharacterCount the number of committed characters
+    * @param caret the caret position
+    * @param visiblePosition the position most important to make visible
+    * @throws IllegalArgumentException if source is null, id is invalid, id is
+    *         CARET_POSITION_CHANGED and text is non-null, or if
+    *         committedCharacterCount is out of range
+    * @since 1.4
+    */
+   public InputMethodEvent(Component source, int id, long when,
+                           AttributedCharacterIterator text,
+                           int committedCharacterCount, TextHitInfo caret,
+                           TextHitInfo visiblePosition)
+   {
+     super(source, id);
+     this.when = when;
+     this.text = text;
+     this.committedCharacterCount = committedCharacterCount;
+     this.caret = caret;
+     this.visiblePosition = visiblePosition;
+     if (id < INPUT_METHOD_FIRST || id > INPUT_METHOD_LAST
+         || (id == CARET_POSITION_CHANGED && text != null)
+         || committedCharacterCount < 0
+         || (committedCharacterCount
+             > (text == null ? 0 : text.getEndIndex() - text.getBeginIndex())))
+       throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Initializes a new instance of <code>InputMethodEvent</code> with the
+    * specified source, id, text, char count, caret, and visible position.
+    *
+    * @param source the source that generated the event
+    * @param id the event id
+    * @param text the input text
+    * @param committedCharacterCount the number of committed characters
+    * @param caret the caret position
+    * @param visiblePosition the position most important to make visible
+    * @throws IllegalArgumentException if source is null, id is invalid, id is
+    *         CARET_POSITION_CHANGED and text is non-null, or if
+    *         committedCharacterCount is out of range
+    * @since 1.4
+    */
+   public InputMethodEvent(Component source, int id,
+                           AttributedCharacterIterator text,
+                           int committedCharacterCount, TextHitInfo caret,
+                           TextHitInfo visiblePosition)
+   {
+     this(source, id, EventQueue.getMostRecentEventTime(), text,
+          committedCharacterCount, caret, visiblePosition);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>InputMethodEvent</code> with the
+    * specified source, id, caret, and visible position, and with a null
+    * text and char count.
+    *
+    * @param source the source that generated the event
+    * @param id the event id
+    * @param caret the caret position
+    * @param visiblePosition the position most important to make visible
+    * @throws IllegalArgumentException if source is null or id is invalid
+    * @since 1.4
+    */
+   public InputMethodEvent(Component source, int id, TextHitInfo caret,
+                           TextHitInfo visiblePosition)
+   {
+     this(source, id, EventQueue.getMostRecentEventTime(), null, 0, caret,
+          visiblePosition);
+   }
+ 
+   /**
+    * This method returns the input method text. This can be <code>null</code>,
+    * and will always be null for <code>CARET_POSITION_CHANGED</code> events.
+    * Characters from 0 to <code>getCommittedCharacterCount()-1</code> have
+    * been committed, the remaining characters are composed text.
+    *
+    * @return the input method text, or null
+    */
+   public AttributedCharacterIterator getText()
+   {
+     return text;
+   }
+ 
+   /**
+    * Returns the number of committed characters in the input method text.
+    *
+    * @return the number of committed characters in the input method text
+    */
+   public int getCommittedCharacterCount()
+   {
+     return committedCharacterCount;
+   }
+ 
+   /**
+    * Returns the caret position. The caret offset is relative to the composed
+    * text of the most recent <code>INPUT_METHOD_TEXT_CHANGED</code> event.
+    *
+    * @return the caret position, or null
+    */
+   public TextHitInfo getCaret()
+   {
+     return caret;
+   }
+ 
+   /**
+    * Returns the position that is most important to be visible, or null if
+    * such a hint is not necessary. The caret offset is relative to the composed
+    * text of the most recent <code>INPUT_METHOD_TEXT_CHANGED</code> event.
+    *
+    * @return the position that is most important to be visible
+    */
+   public TextHitInfo getVisiblePosition()
+   {
+     return visiblePosition;
+   }
+ 
+   /**
+    * This method consumes the event.  A consumed event is not processed
+    * in the default manner by the component that generated it.
+    */
+   public void consume()
+   {
+     consumed = true;
+   }
+ 
+   /**
+    * This method tests whether or not this event has been consumed.
+    *
+    * @return true if the event has been consumed
+    */
+   public boolean isConsumed()
+   {
+     return consumed;
+   }
+ 
+   /**
+    * Return the timestamp of this event.
+    *
+    * @return the timestamp
+    * @since 1.4
+    */
+   public long getWhen()
+   {
+     return when;
+   }
+ 
+   /**
+    * This method returns a string identifying the event. This contains the
+    * event ID, the committed and composed characters separated by '+', the
+    * number of committed characters, the caret, and the visible position.
+    *
+    * @return a string identifying the event
+    */
+   public String paramString()
+   {
+     StringBuffer s
+       = new StringBuffer(80 + (text == null ? 0
+                                : text.getEndIndex() - text.getBeginIndex()));
+     s.append(id == INPUT_METHOD_TEXT_CHANGED ? "INPUT_METHOD_TEXT_CHANGED, "
+              : "CARET_POSITION_CHANGED, ");
+     if (text == null)
+       s.append("no text, 0 characters committed, caret: ");
+     else
+       {
+         s.append('"');
+         int i = text.getBeginIndex();
+         int j = committedCharacterCount;
+         while (--j >= 0)
+           s.append(text.setIndex(i++));
+         s.append("\" + \"");
+         j = text.getEndIndex() - i;
+         while (--j >= 0)
+           s.append(text.setIndex(i++));
+         s.append("\", ").append(committedCharacterCount)
+           .append(" characters committed, caret: ");          
+       }
+     s.append(caret == null ? (Object) "no caret" : caret).append(", ")
+       .append(visiblePosition == null ? (Object) "no visible position"
+               : visiblePosition);
+     return s.toString();
+   }
+ 
+   /**
+    * Reads in the object from a serial stream, updating when to
+    * {@link EventQueue#getMostRecentEventTime()} if necessary.
+    *
+    * @param s the stream to read from
+    * @throws IOException if deserialization fails
+    * @throws ClassNotFoundException if deserialization fails
+    * @serialData default, except for updating when
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     if (when == 0)
+       when = EventQueue.getMostRecentEventTime();
+   }
+ } // class InputMethodEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/InputMethodListener.java gcc-4.1.0/libjava/classpath/java/awt/event/InputMethodListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/InputMethodListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/InputMethodListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* InputMethodListener.java -- listen for input method events
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.im.InputMethodRequests;
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to receive events from an input
+  * method. For a text component to use input methods, it must also install
+  * an InputMethodRequests handler.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see InputMethodEvent
+  * @see InputMethodRequests
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface InputMethodListener extends EventListener
+ {
+   /**
+    * This method is called when the text is changed.
+    *
+    * @param event the <code>InputMethodEvent</code> indicating the text change
+    */
+   void inputMethodTextChanged(InputMethodEvent event);
+ 
+   /**
+    * This method is called when the cursor position within the text is changed.
+    *
+    * @param event the <code>InputMethodEvent</code> indicating the change
+    */
+   void caretPositionChanged(InputMethodEvent event);
+ } // interface InputMethodListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/InvocationEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/InvocationEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/InvocationEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/InvocationEvent.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,258 ----
+ /* InvocationEvent.java -- call a runnable when dispatched
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.ActiveEvent;
+ import java.awt.EventQueue;
+ 
+ /**
+  * This event executes {@link Runnable#run()} of a target object when it is
+  * dispatched. This class is used by calls to <code>invokeLater</code> and
+  * <code>invokeAndWait</code>, so client code can use this fact to avoid
+  * writing special-casing AWTEventListener objects.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ActiveEvent
+  * @see EventQueue#invokeLater(Runnable)
+  * @see EventQueue#invokeAndWait(Runnable)
+  * @see AWTEventListener
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class InvocationEvent extends AWTEvent implements ActiveEvent
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 436056344909459450L;
+ 
+   /** This is the first id in the range of event ids used by this class. */
+   public static final int INVOCATION_FIRST = 1200;
+ 
+   /** This is the default id for this event type. */
+   public static final int INVOCATION_DEFAULT = 1200;
+ 
+   /** This is the last id in the range of event ids used by this class. */
+   public static final int INVOCATION_LAST = 1200;
+ 
+   /**
+    * This is the <code>Runnable</code> object to call when dispatched.
+    *
+    * @serial the runnable to execute
+    */
+   protected Runnable runnable;
+ 
+   /**
+    * This is the object to call <code>notifyAll()</code> on when
+    * the call to <code>run()</code> returns, or <code>null</code> if no
+    * object is to be notified.
+    *
+    * @serial the object to notify
+    */
+   protected Object notifier;
+ 
+   /**
+    * This variable is set to <code>true</code> if exceptions are caught
+    * and stored in a variable during the call to <code>run()</code>, otherwise
+    * exceptions are ignored and propagate up.
+    *
+    * @serial true to catch exceptions
+    */
+   protected boolean catchExceptions;
+ 
+   /**
+    * This is the caught exception thrown in the <code>run()</code> method. It
+    * is null if exceptions are ignored, the run method hasn't completed, or
+    * there were no exceptions.
+    *
+    * @serial the caught exception, if any
+    */
+   private Exception exception;
+ 
+   /**
+    * This is the caught Throwable thrown in the <code>run()</code> method.
+    * It is null if throwables are ignored, the run method hasn't completed, 
+    * or there were no throwables thrown.
+    */
+   private Throwable throwable;
+   
+   /**
+    * The timestamp when this event was created.
+    *
+    * @see #getWhen()
+    * @serial the timestamp
+    * @since 1.4
+    */
+   private final long when = EventQueue.getMostRecentEventTime();
+ 
+   /**
+    * Initializes a new instance of <code>InvocationEvent</code> with the
+    * specified source and runnable.
+    *
+    * @param source the source of the event
+    * @param runnable the <code>Runnable</code> object to invoke
+    * @throws IllegalArgumentException if source is null
+    */
+   public InvocationEvent(Object source, Runnable runnable)
+   {
+     this(source, INVOCATION_DEFAULT, runnable, null, false);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>InvocationEvent</code> with the
+    * specified source, runnable, and notifier.  It will also catch exceptions
+    * if specified. If notifier is non-null, this will call notifyAll() on
+    * the object when the runnable is complete. If catchExceptions is true,
+    * this traps any exception in the runnable, otherwise it lets the exception
+    * propagate up the Event Dispatch thread.
+    *
+    * @param source the source of the event
+    * @param runnable the <code>Runnable</code> object to invoke
+    * @param notifier the object to notify, or null
+    * @param catchExceptions true to catch exceptions from the runnable
+    */
+   public InvocationEvent(Object source, Runnable runnable, Object notifier,
+                          boolean catchExceptions)
+   {
+     this(source, INVOCATION_DEFAULT, runnable, notifier, catchExceptions);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>InvocationEvent</code> with the
+    * specified source, runnable, and notifier.  It will also catch exceptions
+    * if specified. If notifier is non-null, this will call notifyAll() on
+    * the object when the runnable is complete. If catchExceptions is true,
+    * this traps any exception in the runnable, otherwise it lets the exception
+    * propagate up the Event Dispatch thread. Note that an invalid id leads to
+    * unspecified results.
+    *
+    * @param source the source of the event
+    * @param id the event id
+    * @param runnable the <code>Runnable</code> object to invoke
+    * @param notifier the object to notify, or null
+    * @param catchExceptions true to catch exceptions from the runnable
+    */
+   protected InvocationEvent(Object source, int id, Runnable runnable,
+                             Object notifier, boolean catchExceptions)
+   {
+     super(source, id);
+     this.runnable = runnable;
+     this.notifier = notifier;
+     this.catchExceptions = catchExceptions;
+   }
+ 
+   /**
+    * This method calls the <code>run()</code> method of the runnable, traps
+    * exceptions if instructed to do so, and calls <code>notifyAll()</code>
+    * on any notifier if all worked successfully.
+    */
+   public void dispatch()
+   {
+     if (catchExceptions)
+       try
+         {
+           runnable.run();
+         }
+       catch (Throwable t)
+         {
+           throwable = t;
+           if (t instanceof Exception)
+             exception = (Exception)t;
+         }
+     else
+       runnable.run();
+ 
+     Object o = notifier;
+     if (o != null)
+       synchronized(o)
+ 	{
+ 	  o.notifyAll();
+ 	}
+   }
+ 
+   /**
+    * This method returns the exception that occurred during the execution of
+    * the runnable, or <code>null</code> if not exception was thrown or
+    * exceptions were not caught.
+    *
+    * @return the exception thrown by the runnable
+    */
+   public Exception getException()
+   {
+     return exception;
+   }
+ 
+   /**
+    * Returns a throwable caught while executing the Runnable's run() method.
+    * Null if none was thrown or if this InvocationEvent doesn't catch
+    * throwables.
+    * @return the caught Throwable
+    * @since 1.5
+    */
+   public Throwable getThrowable()
+   {
+     return throwable;
+   }
+   
+   /**
+    * Gets the timestamp of when this event was created.
+    *
+    * @return the timestamp of this event
+    * @since 1.4
+    */
+   public long getWhen()
+   {
+     return when;
+   }
+ 
+   /**
+    * This method returns a string identifying this event. This is formatted as:
+    * <code>"INVOCATION_DEFAULT,runnable=" + runnable + ",notifier=" + notifier
+    * + ",catchExceptions=" + catchExceptions + ",when=" + getWhen()</code>.
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     return (id == INVOCATION_DEFAULT ? "INVOCATION_DEFAULT,runnable="
+             : "unknown type,runnable=") + runnable + ",notifier=" + notifier
+       + ",catchExceptions=" + catchExceptions + ",when=" + when;
+   }
+ } // class InvocationEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ItemEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/ItemEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ItemEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ItemEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,155 ----
+ /* ItemEvent.java -- event for item state changes
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.ItemSelectable;
+ 
+ /**
+  * This event is generated when a selection item changes state. This is an
+  * abstraction that distills a large number of individual mouse or keyboard
+  * events into a simpler "item selected" and "item deselected" events.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ItemSelectable
+  * @see ItemListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ItemEvent extends AWTEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -608708132447206933L;
+ 
+   /** This is the first id in the event id range used by this class. */
+   public static final int ITEM_FIRST = 701;
+ 
+   /** This is the last id in the event id range used by this class. */
+   public static final int ITEM_LAST = 701;
+ 
+   /** This event id indicates a state change occurred. */
+   public static final int ITEM_STATE_CHANGED = 701;
+ 
+   /** This type indicates that the item was selected. */
+   public static final int SELECTED = 1;
+ 
+   /** This type indicates that the item was deselected. */
+   public static final int DESELECTED = 2;
+ 
+   /**
+    * The item affected by this event.
+    *
+    * @serial the item of the selection
+    */
+   private final Object item;
+ 
+   /**
+    * The state change direction, one of {@link #SELECTED} or
+    * {@link #DESELECTED}.
+    *
+    * @serial the selection state
+    */
+   private final int stateChange;
+ 
+   /**
+    * Initializes a new instance of <code>ItemEvent</code> with the specified
+    * source, id, and state change constant. Note that an invalid id leads to
+    * unspecified results.
+    *
+    * @param source the source of the event
+    * @param id the event id
+    * @param item the item affected by the state change
+    * @param stateChange one of {@link #SELECTED} or {@link #DESELECTED}
+    */
+   public ItemEvent(ItemSelectable source, int id, Object item, int stateChange)
+   {
+     super(source, id);
+     this.item = item;
+     this.stateChange = stateChange;
+   }
+ 
+   /**
+    * This method returns the event source as an <code>ItemSelectable</code>.
+    *
+    * @return the event source as an <code>ItemSelected</code>
+    * @throws ClassCastException if source is changed to a non-ItemSelectable
+    */
+   public ItemSelectable getItemSelectable()
+   {
+     return (ItemSelectable) source;
+   }
+ 
+   /**
+    * Returns the item affected by this state change.
+    *
+    * @return the item affected by this state change
+    */
+   public Object getItem()
+   {
+     return item;
+   }
+ 
+   /**
+    * Returns the type of state change, either {@link #SELECTED} or
+    * {@link #DESELECTED}.
+    *
+    * @return the type of state change
+    */
+   public int getStateChange()
+   {
+     return stateChange;
+   }
+ 
+   /**
+    * Returns a string identifying this event. This is in the format:
+    * <code>"ITEM_STATE_CHANGED,item=" + item + ",stateChange="
+    * + (getStateChange() == DESELECTED ? "DESELECTED" : "SELECTED")</code>.
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     return (id == ITEM_STATE_CHANGED ? "ITEM_STATE_CHANGED,item="
+             : "unknown type,item=") + item + ",stateChange="
+       + (stateChange == SELECTED ? "SELECTED"
+          : stateChange == DESELECTED ? "DESELECTED" : "unknown type");
+   }
+ } // class ItemEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/ItemListener.java gcc-4.1.0/libjava/classpath/java/awt/event/ItemListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/ItemListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/ItemListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* ItemListener.java -- listen for item events
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.ItemSelectable;
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to receive events when an
+  * item's selection state changes.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ItemSelectable
+  * @see ItemEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface ItemListener extends EventListener
+ {
+   /**
+    * This method is called when an item's state is changed.
+    *
+    * @param event the <code>ItemEvent</code> indicating the change
+    */
+   void itemStateChanged(ItemEvent event);
+ } // interface ItemListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/KeyAdapter.java gcc-4.1.0/libjava/classpath/java/awt/event/KeyAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/KeyAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/KeyAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* KeyAdapter.java -- convenience class for writing key listeners
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ /**
+  * This class implements <code>KeyListener</code> and implements all methods
+  * with empty bodies.  This allows a listener interested in implementing only
+  * a subset of the <code>KeyListener</code> interface to extend this class
+  * and override only the desired methods.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see KeyEvent
+  * @see KeyListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class KeyAdapter implements KeyListener
+ {
+   /**
+    * Do nothing default constructor for subclasses.
+    */
+   public KeyAdapter()
+   {
+   }
+ 
+   /**
+    * Implements this method in the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void keyTyped(KeyEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method in the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void keyPressed(KeyEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method in the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void keyReleased(KeyEvent event)
+   {
+   }
+ } // class KeyAdapter
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/KeyEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/KeyEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/KeyEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/KeyEvent.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1740 ----
+ /* KeyEvent.java -- event for key presses
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import gnu.java.awt.EventModifier;
+ 
+ import java.awt.Component;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ 
+ /**
+  * This event is generated when a key is pressed or released. There are two
+  * categories of key events:
+  *
+  * <p><em>"Key typed" events</em> are higher-level, and have already
+  * compensated for modifiers and keyboard layout to generate a single Unicode
+  * character. It may take several key press events to generate one key typed.
+  * The <code>getKeyCode</code> method will return <code>VK_UNDEFINED</code>,
+  * and <code>getKeyChar</code> will return a valid Unicode character or
+  * <code>CHAR_UNDEFINED</code>.
+  *
+  * <p><em>"Key pressed" and "key released" events</em> are lower-level, and
+  * are platform and keyboard dependent. They correspond to the actaul motion
+  * on a keyboard, and return a virtual key code which labels the key that was
+  * pressed. The <code>getKeyCode</code> method will return one of the
+  * <code>VK_*</code> constants (except VK_UNDEFINED), and the
+  * <code>getKeyChar</code> method is undefined.
+  *
+  * <p>Some keys do not generate key typed events, such as the F1 or HELP keys.
+  * Not all keyboards can generate all virtual keys, and no attempt is made to
+  * simulate the ones that can't be typed. Virtual keys correspond to the
+  * keyboard layout, so for example, VK_Q in English is VK_A in French. Also,
+  * there are some additional virtual keys to ease handling of actions, such
+  * as VK_ALL_CANDIDATES in place of ALT+VK_CONVERT. Do not rely on the value
+  * of the VK_* constants, except for VK_ENTER, VK_BACK_SPACE, and VK_TAB.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see KeyAdapter
+  * @see KeyListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class KeyEvent extends InputEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -2352130953028126954L;
+ 
+   /** This is the first id in the range of event ids used by this class. */
+   public static final int KEY_FIRST = 400;
+ 
+   /** This is the last id in the range of event ids used by this class. */
+   public static final int KEY_LAST = 402;
+ 
+   /**
+    * This event id indicates a key was typed, which is a key press followed
+    * by a key release to generate an actual Unicode character. It may take
+    * several key presses to generate one key typed event, and some action
+    * keys have no corresponding key typed.
+    */
+   public static final int KEY_TYPED = 400;
+ 
+   /** This event id indicates a key was pressed. */
+   public static final int KEY_PRESSED = 401;
+ 
+   /** This event it indicates a key was released. */
+   public static final int KEY_RELEASED = 402;
+ 
+   /** The virtual key Enter, which will always map to '\n'. */
+   public static final int VK_ENTER = '\n';
+ 
+   /** The virtual key Backspace, which will always map to '\b'. */
+   public static final int VK_BACK_SPACE = '\b';
+ 
+   /** The virtual key Tab, which will always map to '\t'. */
+   public static final int VK_TAB = '\t';
+ 
+   /** The virtual key Cancel. */
+   public static final int VK_CANCEL = 3;
+ 
+   /** The virtual key VK_CLEAR. */
+   public static final int VK_CLEAR = 12;
+ 
+   /** The virtual key VK_SHIFT. */
+   public static final int VK_SHIFT = 16;
+ 
+   /** The virtual key VK_CONTROL. */
+   public static final int VK_CONTROL = 17;
+ 
+   /** The virtual key VK_ALT. */
+   public static final int VK_ALT = 18;
+ 
+   /** The virtual key VK_PAUSE. */
+   public static final int VK_PAUSE = 19;
+ 
+   /** The virtual key VK_CAPS_LOCK. */
+   public static final int VK_CAPS_LOCK = 20;
+ 
+   /** The virtual key VK_ESCAPE. */
+   public static final int VK_ESCAPE = 27;
+ 
+   /** The virtual key VK_SPACE. */
+   public static final int VK_SPACE = ' ';
+ 
+   /** The virtual key VK_PAGE_UP. */
+   public static final int VK_PAGE_UP = 33;
+ 
+   /** The virtual key VK_PAGE_DOWN. */
+   public static final int VK_PAGE_DOWN = 34;
+ 
+   /** The virtual key VK_END. */
+   public static final int VK_END = 35;
+ 
+   /** The virtual key VK_HOME. */
+   public static final int VK_HOME = 36;
+ 
+   /**
+    * The virtual key for the non-numpad VK_LEFT.
+    *
+    * @see #VK_KP_LEFT
+    */
+   public static final int VK_LEFT = 37;
+ 
+   /**
+    * The virtual key for the non-numpad VK_UP.
+    *
+    * @see #VK_KP_UP
+    */
+   public static final int VK_UP = 38;
+ 
+   /**
+    * The virtual key for the non-numpad VK_RIGHT.
+    *
+    * @see #VK_KP_RIGHT
+    */
+   public static final int VK_RIGHT = 39;
+ 
+   /**
+    * The virtual key for the non-numpad VK_DOWN.
+    *
+    * @see #VK_KP_DOWN
+    */
+   public static final int VK_DOWN = 40;
+ 
+   /** The virtual key VK_COMMA. */
+   public static final int VK_COMMA = ',';
+ 
+   /**
+    * The virtual key VK_MINUS.
+    *
+    * @since 1.2
+    */
+   public static final int VK_MINUS = '-';
+ 
+   /** The virtual key VK_PERIOD. */
+   public static final int VK_PERIOD = '.';
+ 
+   /** The virtual key VK_SLASH. */
+   public static final int VK_SLASH = '/';
+ 
+   /** The virtual key VK_0. */
+   public static final int VK_0 = '0';
+ 
+   /** The virtual key VK_1. */
+   public static final int VK_1 = '1';
+ 
+   /** The virtual key VK_2. */
+   public static final int VK_2 = '2';
+ 
+   /** The virtual key VK_3. */
+   public static final int VK_3 = '3';
+ 
+   /** The virtual key VK_4. */
+   public static final int VK_4 = '4';
+ 
+   /** The virtual key VK_5. */
+   public static final int VK_5 = '5';
+ 
+   /** The virtual key VK_6. */
+   public static final int VK_6 = '6';
+ 
+   /** The virtual key VK_7. */
+   public static final int VK_7 = '7';
+ 
+   /** The virtual key VK_8. */
+   public static final int VK_8 = '8';
+ 
+   /** The virtual key VK_9. */
+   public static final int VK_9 = '9';
+ 
+   /** The virtual key VK_SEMICOLON. */
+   public static final int VK_SEMICOLON = ';';
+ 
+   /** The virtual key VK_EQUALS. */
+   public static final int VK_EQUALS = '=';
+ 
+   /** The virtual key VK_A. */
+   public static final int VK_A = 'A';
+ 
+   /** The virtual key VK_B. */
+   public static final int VK_B = 'B';
+ 
+   /** The virtual key VK_C. */
+   public static final int VK_C = 'C';
+ 
+   /** The virtual key VK_D. */
+   public static final int VK_D = 'D';
+ 
+   /** The virtual key VK_E. */
+   public static final int VK_E = 'E';
+ 
+   /** The virtual key VK_F. */
+   public static final int VK_F = 'F';
+ 
+   /** The virtual key VK_G. */
+   public static final int VK_G = 'G';
+ 
+   /** The virtual key VK_H. */
+   public static final int VK_H = 'H';
+ 
+   /** The virtual key VK_I. */
+   public static final int VK_I = 'I';
+ 
+   /** The virtual key VK_J. */
+   public static final int VK_J = 'J';
+ 
+   /** The virtual key VK_K. */
+   public static final int VK_K = 'K';
+ 
+   /** The virtual key VK_L. */
+   public static final int VK_L = 'L';
+ 
+   /** The virtual key VK_M. */
+   public static final int VK_M = 'M';
+ 
+   /** The virtual key VK_N. */
+   public static final int VK_N = 'N';
+ 
+   /** The virtual key VK_O. */
+   public static final int VK_O = 'O';
+ 
+   /** The virtual key VK_P. */
+   public static final int VK_P = 'P';
+ 
+   /** The virtual key VK_Q. */
+   public static final int VK_Q = 'Q';
+ 
+   /** The virtual key VK_R. */
+   public static final int VK_R = 'R';
+ 
+   /** The virtual key VK_S. */
+   public static final int VK_S = 'S';
+ 
+   /** The virtual key VK_T. */
+   public static final int VK_T = 'T';
+ 
+   /** The virtual key VK_U. */
+   public static final int VK_U = 'U';
+ 
+   /** The virtual key VK_V. */
+   public static final int VK_V = 'V';
+ 
+   /** The virtual key VK_W. */
+   public static final int VK_W = 'W';
+ 
+   /** The virtual key VK_X. */
+   public static final int VK_X = 'X';
+ 
+   /** The virtual key VK_Y. */
+   public static final int VK_Y = 'Y';
+ 
+   /** The virtual key VK_Z. */
+   public static final int VK_Z = 'Z';
+ 
+   /** The virtual key VK_OPEN_BRACKET. */
+   public static final int VK_OPEN_BRACKET = '[';
+ 
+   /** The virtual key VK_BACK_SLASH. */
+   public static final int VK_BACK_SLASH = '\\';
+ 
+   /** The virtual key VK_CLOSE_BRACKET. */
+   public static final int VK_CLOSE_BRACKET = ']';
+ 
+   /** The virtual key VK_NUMPAD0. */
+   public static final int VK_NUMPAD0 = 96;
+ 
+   /** The virtual key VK_NUMPAD1. */
+   public static final int VK_NUMPAD1 = 97;
+ 
+   /** The virtual key VK_NUMPAD2. */
+   public static final int VK_NUMPAD2 = 98;
+ 
+   /** The virtual key VK_NUMPAD3. */
+   public static final int VK_NUMPAD3 = 99;
+ 
+   /** The virtual key VK_NUMPAD4. */
+   public static final int VK_NUMPAD4 = 100;
+ 
+   /** The virtual key VK_NUMPAD5. */
+   public static final int VK_NUMPAD5 = 101;
+ 
+   /** The virtual key VK_NUMPAD6. */
+   public static final int VK_NUMPAD6 = 102;
+ 
+   /** The virtual key VK_NUMPAD7. */
+   public static final int VK_NUMPAD7 = 103;
+ 
+   /** The virtual key VK_NUMPAD8. */
+   public static final int VK_NUMPAD8 = 104;
+ 
+   /** The virtual key VK_NUMPAD9. */
+   public static final int VK_NUMPAD9 = 105;
+ 
+   /** The virtual key VK_MULTIPLY. */
+   public static final int VK_MULTIPLY = 106;
+ 
+   /** The virtual key VK_ADD. */
+   public static final int VK_ADD = 107;
+ 
+   /**
+    * The virtual key VK_SEPARATOR, handily mispelled for those who can't
+    * figure it out.
+    *
+    * @deprecated use {@link #VK_SEPARATOR}
+    */
+   public static final int VK_SEPARATER = 108;
+ 
+   /**
+    * The virtual key VK_SEPARATOR.
+    *
+    * @since 1.4
+    */
+   public static final int VK_SEPARATOR = 108;
+ 
+   /** The virtual key VK_SUBTRACT. */
+   public static final int VK_SUBTRACT = 109;
+ 
+   /** The virtual key VK_DECIMAL. */
+   public static final int VK_DECIMAL = 110;
+ 
+   /** The virtual key VK_DIVIDE. */
+   public static final int VK_DIVIDE = 111;
+ 
+   /** The virtual key VK_DELETE. */
+   public static final int VK_DELETE = 127;
+ 
+   /** The virtual key VK_NUM_LOCK. */
+   public static final int VK_NUM_LOCK = 144;
+ 
+   /** The virtual key VK_SCROLL_LOCK. */
+   public static final int VK_SCROLL_LOCK = 145;
+ 
+   /** The virtual key VK_F1. */
+   public static final int VK_F1 = 112;
+ 
+   /** The virtual key VK_F2. */
+   public static final int VK_F2 = 113;
+ 
+   /** The virtual key VK_F3. */
+   public static final int VK_F3 = 114;
+ 
+   /** The virtual key VK_F4. */
+   public static final int VK_F4 = 115;
+ 
+   /** The virtual key VK_F5. */
+   public static final int VK_F5 = 116;
+ 
+   /** The virtual key VK_F6. */
+   public static final int VK_F6 = 117;
+ 
+   /** The virtual key VK_F7. */
+   public static final int VK_F7 = 118;
+ 
+   /** The virtual key VK_F8. */
+   public static final int VK_F8 = 119;
+ 
+   /** The virtual key VK_F9. */
+   public static final int VK_F9 = 120;
+ 
+   /** The virtual key VK_F10. */
+   public static final int VK_F10 = 121;
+ 
+   /** The virtual key VK_F11. */
+   public static final int VK_F11 = 122;
+ 
+   /** The virtual key VK_F12. */
+   public static final int VK_F12 = 123;
+ 
+   /**
+    * The virtual key VK_F13.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F13 = 61440;
+ 
+   /**
+    * The virtual key VK_F14.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F14 = 61441;
+ 
+   /**
+    * The virtual key VK_F15.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F15 = 61442;
+ 
+   /**
+    * The virtual key VK_F16.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F16 = 61443;
+ 
+   /**
+    * The virtual key VK_F17.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F17 = 61444;
+ 
+   /**
+    * The virtual key VK_F18.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F18 = 61445;
+ 
+   /**
+    * The virtual key VK_F19.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F19 = 61446;
+ 
+   /**
+    * The virtual key VK_F20.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F20 = 61447;
+ 
+   /**
+    * The virtual key VK_F21.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F21 = 61448;
+ 
+   /**
+    * The virtual key VK_F22.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F22 = 61449;
+ 
+   /**
+    * The virtual key VK_F23.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F23 = 61450;
+ 
+   /**
+    * The virtual key VK_F24.
+    *
+    * @since 1.2
+    */
+   public static final int VK_F24 = 61451;
+ 
+   /** The virtual key VK_PRINTSCREEN. */
+   public static final int VK_PRINTSCREEN = 154;
+ 
+   /** The virtual key VK_INSERT. */
+   public static final int VK_INSERT = 155;
+ 
+   /** The virtual key VK_HELP. */
+   public static final int VK_HELP = 156;
+ 
+   /** The virtual key VK_META. */
+   public static final int VK_META = 157;
+ 
+   /** The virtual key VK_BACK_QUOTE. */
+   public static final int VK_BACK_QUOTE = 192;
+ 
+   /** The virtual key VK_QUOTE. */
+   public static final int VK_QUOTE = 222;
+ 
+   /**
+    * The virtual key for the numpad VK_KP_UP.
+    *
+    * @see #VK_UP
+    * @since 1.2
+    */
+   public static final int VK_KP_UP = 224;
+ 
+   /**
+    * The virtual key for the numpad VK_KP_DOWN.
+    *
+    * @see #VK_DOWN
+    * @since 1.2
+    */
+   public static final int VK_KP_DOWN = 225;
+ 
+   /**
+    * The virtual key for the numpad VK_KP_LEFT.
+    *
+    * @see #VK_LEFT
+    * @since 1.2
+    */
+   public static final int VK_KP_LEFT = 226;
+ 
+   /**
+    * The virtual key for the numpad VK_KP_RIGHT.
+    *
+    * @see #VK_RIGHT
+    * @since 1.2
+    */
+   public static final int VK_KP_RIGHT = 227;
+ 
+   /**
+    * The virtual key VK_DEAD_GRAVE.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_GRAVE = 128;
+ 
+   /**
+    * The virtual key VK_DEAD_ACUTE.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_ACUTE = 129;
+ 
+   /**
+    * The virtual key VK_DEAD_CIRCUMFLEX.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_CIRCUMFLEX = 130;
+ 
+   /**
+    * The virtual key VK_DEAD_TILDE.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_TILDE = 131;
+ 
+   /**
+    * The virtual key VK_DEAD_MACRON.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_MACRON = 132;
+ 
+   /**
+    * The virtual key VK_DEAD_BREVE.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_BREVE = 133;
+ 
+   /**
+    * The virtual key VK_DEAD_ABOVEDOT.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_ABOVEDOT = 134;
+ 
+   /**
+    * The virtual key VK_DEAD_DIAERESIS.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_DIAERESIS = 135;
+ 
+   /**
+    * The virtual key VK_DEAD_ABOVERING.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_ABOVERING = 136;
+ 
+   /**
+    * The virtual key VK_DEAD_DOUBLEACUTE.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_DOUBLEACUTE = 137;
+ 
+   /**
+    * The virtual key VK_DEAD_CARON.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_CARON = 138;
+ 
+   /**
+    * The virtual key VK_DEAD_CEDILLA.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_CEDILLA = 139;
+ 
+   /**
+    * The virtual key VK_DEAD_OGONEK.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_OGONEK = 140;
+ 
+   /**
+    * The virtual key VK_DEAD_IOTA.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_IOTA = 141;
+ 
+   /**
+    * The virtual key VK_DEAD_VOICED_SOUND.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_VOICED_SOUND = 142;
+ 
+   /**
+    * The virtual key VK_DEAD_SEMIVOICED_SOUND.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DEAD_SEMIVOICED_SOUND = 143;
+ 
+   /**
+    * The virtual key VK_AMPERSAND.
+    *
+    * @since 1.2
+    */
+   public static final int VK_AMPERSAND = 150;
+ 
+   /**
+    * The virtual key VK_ASTERISK.
+    *
+    * @since 1.2
+    */
+   public static final int VK_ASTERISK = 151;
+ 
+   /**
+    * The virtual key VK_QUOTEDBL.
+    *
+    * @since 1.2
+    */
+   public static final int VK_QUOTEDBL = 152;
+ 
+   /**
+    * The virtual key VK_LESS.
+    *
+    * @since 1.2
+    */
+   public static final int VK_LESS = 153;
+ 
+   /**
+    * The virtual key VK_GREATER.
+    *
+    * @since 1.2
+    */
+   public static final int VK_GREATER = 160;
+ 
+   /**
+    * The virtual key VK_BRACELEFT.
+    *
+    * @since 1.2
+    */
+   public static final int VK_BRACELEFT = 161;
+ 
+   /**
+    * The virtual key VK_BRACERIGHT.
+    *
+    * @since 1.2
+    */
+   public static final int VK_BRACERIGHT = 162;
+ 
+   /**
+    * The virtual key VK_AT.
+    *
+    * @since 1.2
+    */
+   public static final int VK_AT = 512;
+ 
+   /**
+    * The virtual key VK_COLON.
+    *
+    * @since 1.2
+    */
+   public static final int VK_COLON = 513;
+ 
+   /**
+    * The virtual key VK_CIRCUMFLEX.
+    *
+    * @since 1.2
+    */
+   public static final int VK_CIRCUMFLEX = 514;
+ 
+   /**
+    * The virtual key VK_DOLLAR.
+    *
+    * @since 1.2
+    */
+   public static final int VK_DOLLAR = 515;
+ 
+   /**
+    * The virtual key VK_EURO_SIGN.
+    *
+    * @since 1.2
+    */
+   public static final int VK_EURO_SIGN = 516;
+ 
+   /**
+    * The virtual key VK_EXCLAMATION_MARK.
+    *
+    * @since 1.2
+    */
+   public static final int VK_EXCLAMATION_MARK = 517;
+ 
+   /**
+    * The virtual key VK_INVERTED_EXCLAMATION_MARK.
+    *
+    * @since 1.2
+    */
+   public static final int VK_INVERTED_EXCLAMATION_MARK = 518;
+ 
+   /**
+    * The virtual key VK_LEFT_PARENTHESIS.
+    *
+    * @since 1.2
+    */
+   public static final int VK_LEFT_PARENTHESIS = 519;
+ 
+   /**
+    * The virtual key VK_NUMBER_SIGN.
+    *
+    * @since 1.2
+    */
+   public static final int VK_NUMBER_SIGN = 520;
+ 
+   /**
+    * The virtual key VK_PLUS.
+    *
+    * @since 1.2
+    */
+   public static final int VK_PLUS = 521;
+ 
+   /**
+    * The virtual key VK_RIGHT_PARENTHESIS.
+    *
+    * @since 1.2
+    */
+   public static final int VK_RIGHT_PARENTHESIS = 522;
+ 
+   /**
+    * The virtual key VK_UNDERSCORE.
+    *
+    * @since 1.2
+    */
+   public static final int VK_UNDERSCORE = 523;
+ 
+   /** The virtual key VK_FINAL. */
+   public static final int VK_FINAL = 24;
+ 
+   /** The virtual key VK_CONVERT. */
+   public static final int VK_CONVERT = 28;
+ 
+   /** The virtual key VK_NONCONVERT. */
+   public static final int VK_NONCONVERT = 29;
+ 
+   /** The virtual key VK_ACCEPT. */
+   public static final int VK_ACCEPT = 30;
+ 
+   /** The virtual key VK_MODECHANGE. */
+   public static final int VK_MODECHANGE = 31;
+ 
+   /** The virtual key VK_KANA. */
+   public static final int VK_KANA = 21;
+ 
+   /** The virtual key VK_KANJI. */
+   public static final int VK_KANJI = 25;
+ 
+   /**
+    * The virtual key VK_ALPHANUMERIC.
+    *
+    * @since 1.2
+    */
+   public static final int VK_ALPHANUMERIC = 240;
+ 
+   /**
+    * The virtual key VK_KATAKANA.
+    *
+    * @since 1.2
+    */
+   public static final int VK_KATAKANA = 241;
+ 
+   /**
+    * The virtual key VK_HIRAGANA.
+    *
+    * @since 1.2
+    */
+   public static final int VK_HIRAGANA = 242;
+ 
+   /**
+    * The virtual key VK_FULL_WIDTH.
+    *
+    * @since 1.2
+    */
+   public static final int VK_FULL_WIDTH = 243;
+ 
+   /**
+    * The virtual key VK_HALF_WIDTH.
+    *
+    * @since 1.2
+    */
+   public static final int VK_HALF_WIDTH = 244;
+ 
+   /**
+    * The virtual key VK_ROMAN_CHARACTERS.
+    *
+    * @since 1.2
+    */
+   public static final int VK_ROMAN_CHARACTERS = 245;
+ 
+   /**
+    * The virtual key VK_ALL_CANDIDATES.
+    *
+    * @since 1.2
+    */
+   public static final int VK_ALL_CANDIDATES = 256;
+ 
+   /**
+    * The virtual key VK_PREVIOUS_CANDIDATE.
+    *
+    * @since 1.2
+    */
+   public static final int VK_PREVIOUS_CANDIDATE = 257;
+ 
+   /**
+    * The virtual key VK_CODE_INPUT.
+    *
+    * @since 1.2
+    */
+   public static final int VK_CODE_INPUT = 258;
+ 
+   /**
+    * The virtual key VK_JAPANESE_KATAKANA.
+    *
+    * @since 1.2
+    */
+   public static final int VK_JAPANESE_KATAKANA = 259;
+ 
+   /**
+    * The virtual key VK_JAPANESE_HIRAGANA.
+    *
+    * @since 1.2
+    */
+   public static final int VK_JAPANESE_HIRAGANA = 260;
+ 
+   /**
+    * The virtual key VK_JAPANESE_ROMAN.
+    *
+    * @since 1.2
+    */
+   public static final int VK_JAPANESE_ROMAN = 261;
+ 
+   /**
+    * The virtual key VK_KANA_LOCK.
+    *
+    * @since 1.3
+    */
+   public static final int VK_KANA_LOCK = 262;
+ 
+   /**
+    * The virtual key VK_INPUT_METHOD_ON_OFF.
+    *
+    * @since 1.3
+    */
+   public static final int VK_INPUT_METHOD_ON_OFF = 263;
+ 
+   /**
+    * The virtual key VK_CUT.
+    *
+    * @since 1.2
+    */
+   public static final int VK_CUT = 65489;
+ 
+   /**
+    * The virtual key VK_COPY.
+    *
+    * @since 1.2
+    */
+   public static final int VK_COPY = 65485;
+ 
+   /**
+    * The virtual key VK_PASTE.
+    *
+    * @since 1.2
+    */
+   public static final int VK_PASTE = 65487;
+ 
+   /**
+    * The virtual key VK_UNDO.
+    *
+    * @since 1.2
+    */
+   public static final int VK_UNDO = 65483;
+ 
+   /**
+    * The virtual key VK_AGAIN.
+    *
+    * @since 1.2
+    */
+   public static final int VK_AGAIN = 65481;
+ 
+   /**
+    * The virtual key VK_FIND.
+    *
+    * @since 1.2
+    */
+   public static final int VK_FIND = 65488;
+ 
+   /**
+    * The virtual key VK_PROPS.
+    *
+    * @since 1.2
+    */
+   public static final int VK_PROPS = 65482;
+ 
+   /**
+    * The virtual key VK_STOP.
+    *
+    * @since 1.2
+    */
+   public static final int VK_STOP = 65480;
+ 
+   /**
+    * The virtual key VK_COMPOSE.
+    *
+    * @since 1.2
+    */
+   public static final int VK_COMPOSE = 65312;
+ 
+   /**
+    * The virtual key VK_ALT_GRAPH.
+    *
+    * @since 1.2
+    */
+   public static final int VK_ALT_GRAPH = 65406;
+ 
+   /**
+    * The virtual key VK_UNDEFINED. This is used for key typed events, which
+    * do not have a virtual key.
+    */
+   public static final int VK_UNDEFINED = 0;
+ 
+   /**
+    * The only char with no valid Unicode interpretation. This is used for
+    * key pressed and key released events which do not have a valid keyChar.
+    */
+   public static final char CHAR_UNDEFINED = '\uffff';
+ 
+   /**
+    * Indicates unknown or irrelavent key location. This is also used for
+    * key typed events, which do not need a location.
+    *
+    * @since 1.4
+    */
+   public static final int KEY_LOCATION_UNKNOWN = 0;
+ 
+   /**
+    * Indicates a standard key location, with no left/right variants and not
+    * on the numeric pad.
+    *
+    * @since 1.4
+    */
+   public static final int KEY_LOCATION_STANDARD = 1;
+ 
+   /**
+    * Indicates the key is on the left side of the keyboard, such as the left
+    * shift.
+    *
+    * @since 1.4
+    */
+   public static final int KEY_LOCATION_LEFT = 2;
+ 
+   /**
+    * Indicates the key is on the right side of the keyboard, such as the right
+    * shift.
+    *
+    * @since 1.4
+    */
+   public static final int KEY_LOCATION_RIGHT = 3;
+ 
+   /**
+    * Indicates the key is on the numeric pad, such as the numpad 0.
+    *
+    * @since 1.4
+    */
+   public static final int KEY_LOCATION_NUMPAD = 4;
+ 
+   /**
+    * The code assigned to the physical keyboard location (as adjusted by the
+    * keyboard layout). Use the symbolic VK_* names instead of numbers.
+    *
+    * @see #getKeyCode()
+    * @serial the VK_ code for this key
+   */
+   private int keyCode;
+ 
+   /**
+    * The Unicode character produced by the key type event. This has no meaning
+    * for key pressed and key released events.
+    *
+    * @see #getKeyChar()
+    * @serial the Unicode value for this key
+    */
+   private char keyChar;
+ 
+   /**
+    * The keyboard location of the key. One of {@link #KEY_LOCATION_UNKNOWN},
+    * {@link #KEY_LOCATION_STANDARD}, {@link #KEY_LOCATION_LEFT},
+    * {@link #KEY_LOCATION_RIGHT}, or {@link #KEY_LOCATION_NUMPAD}.
+    *
+    * @see #getKeyLocation()
+    * @serial the key location
+    * @since 1.4
+    */
+   private final int keyLocation;
+ 
+   /**
+    * Stores the state of the native event dispatching system, to correctly
+    * dispatch in Component#dispatchEventImpl when a proxy is active.
+    *
+    * XXX Does this matter in Classpath?
+    *
+    * @serial whether the proxy is active
+    */
+   private boolean isProxyActive;
+ 
+ 
+   /**
+    * Initializes a new instance of <code>KeyEvent</code> with the specified
+    * information. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the component that generated this event
+    * @param id the event id
+    * @param when the timestamp when the even occurred
+    * @param modifiers the modifier keys during the event, in old or new style
+    * @param keyCode the integer constant for the virtual key type
+    * @param keyChar the Unicode value of the key
+    * @param keyLocation the location of the key
+    * @throws IllegalArgumentException if source is null, if keyLocation is
+    *         invalid, or if (id == KEY_TYPED && (keyCode != VK_UNDEFINED
+    *         || keyChar == CHAR_UNDEFINED))
+    */
+   public KeyEvent(Component source, int id, long when, int modifiers,
+                   int keyCode, char keyChar, int keyLocation)
+   {
+     super(source, id, when, modifiers);
+     this.keyCode = keyCode;
+     this.keyChar = keyChar;
+     this.keyLocation = keyLocation;
+     if ((id == KEY_TYPED && (keyCode != VK_UNDEFINED
+                              || keyChar == CHAR_UNDEFINED))
+         || keyLocation < KEY_LOCATION_UNKNOWN
+         || keyLocation > KEY_LOCATION_NUMPAD)
+       throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Initializes a new instance of <code>KeyEvent</code> with the specified
+    * information. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the component that generated this event
+    * @param id the event id
+    * @param when the timestamp when the even occurred
+    * @param modifiers the modifier keys during the event, in old or new style
+    * @param keyCode the integer constant for the virtual key type
+    * @param keyChar the Unicode value of the key
+    * @throws IllegalArgumentException if source is null, or if
+    *         (id == KEY_TYPED && (keyCode != VK_UNDEFINED
+    *         || keyChar == CHAR_UNDEFINED))
+    */
+   public KeyEvent(Component source, int id, long when, int modifiers,
+                   int keyCode, char keyChar)
+   {
+     this(source, id, when, modifiers, keyCode, keyChar, KEY_LOCATION_UNKNOWN);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>KeyEvent</code> with the specified
+    * information. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the component that generated this event
+    * @param id the event id
+    * @param when the timestamp when the even occurred
+    * @param modifiers the modifier keys during the event, in old or new style
+    * @param keyCode the integer constant for the virtual key type
+    * @throws IllegalArgumentException if source is null, or if
+    *         id == KEY_TYPED but keyCode != VK_UNDEFINED
+    *
+    * @deprecated
+    */
+   public KeyEvent(Component source, int id, long when, int modifiers,
+                   int keyCode)
+   {
+     this(source, id, when, modifiers, keyCode, '\0', KEY_LOCATION_UNKNOWN);
+   }
+ 
+   /**
+    * Returns the key code for the event key.  This will be one of the
+    * <code>VK_*</code> constants defined in this class. If the event type is
+    * KEY_TYPED, the result will be VK_UNDEFINED.
+    *
+    * @return the key code for this event
+    */
+   public int getKeyCode()
+   {
+     return keyCode;
+   }
+ 
+   /**
+    * Sets the key code for this event.  This must be one of the
+    * <code>VK_*</code> constants defined in this class.
+    *
+    * @param keyCode the new key code for this event
+    */
+   public void setKeyCode(int keyCode)
+   {
+     this.keyCode = keyCode;
+   }
+ 
+   /**
+    * Returns the Unicode value for the event key.  This will be
+    * <code>CHAR_UNDEFINED</code> if there is no Unicode equivalent for
+    * this key, usually when this is a KEY_PRESSED or KEY_RELEASED event.
+    *
+    * @return the Unicode character for this event
+    */
+   public char getKeyChar()
+   {
+     return keyChar;
+   }
+ 
+   /**
+    * Sets the Unicode character for this event to the specified value.
+    *
+    * @param keyChar the new Unicode character for this event
+    */
+   public void setKeyChar(char keyChar)
+   {
+     this.keyChar = keyChar;
+   }
+ 
+   /**
+    * Sets the modifier keys to the specified value. This should be a union
+    * of the bit mask constants from <code>InputEvent</code>. The use of this
+    * method is not recommended, particularly for KEY_TYPED events, which do
+    * not check if the modifiers were changed.
+    *
+    * @param modifiers the new modifier value, in either old or new style
+    * @see InputEvent
+    *
+    * @deprecated
+    */
+   public void setModifiers(int modifiers)
+   {
+     this.modifiers = EventModifier.extend(modifiers);
+   }
+ 
+   /**
+    * Returns the keyboard location of the key that generated this event. This
+    * provides a way to distinguish between keys like left and right shift
+    * which share a common key code. The result will be one of
+    * {@link #KEY_LOCATION_UNKNOWN}, {@link #KEY_LOCATION_STANDARD},
+    * {@link #KEY_LOCATION_LEFT}, {@link #KEY_LOCATION_RIGHT}, or
+    * {@link #KEY_LOCATION_NUMPAD}.
+    *
+    * @return the key location
+    * @since 1.4
+    */
+   public int getKeyLocation()
+   {
+     return keyLocation;
+   }
+ 
+   /**
+    * Returns the text name of key code, such as "HOME", "F1", or "A".
+    *
+    * XXX Sun claims this can be localized via the awt.properties file - how
+    * do we implement that?
+    *
+    * @return the text name of the key code
+    */
+   public static String getKeyText(int keyCode)
+   {
+     switch (keyCode)
+       {
+       case VK_CANCEL:
+         return "Cancel";
+       case VK_BACK_SPACE:
+         return "Backspace";
+       case VK_TAB:
+         return "Tab";
+       case VK_ENTER:
+         return "Enter";
+       case VK_CLEAR:
+         return "Clear";
+       case VK_SHIFT:
+         return "Shift";
+       case VK_CONTROL:
+         return "Ctrl";
+       case VK_ALT:
+         return "Alt";
+       case VK_PAUSE:
+         return "Pause";
+       case VK_CAPS_LOCK:
+         return "Caps Lock";
+       case VK_KANA:
+         return "Kana";
+       case VK_FINAL:
+         return "Final";
+       case VK_KANJI:
+         return "Kanji";
+       case VK_ESCAPE:
+         return "Escape";
+       case VK_CONVERT:
+         return "Convert";
+       case VK_NONCONVERT:
+         return "No Convert";
+       case VK_ACCEPT:
+         return "Accept";
+       case VK_MODECHANGE:
+         return "Mode Change";
+       case VK_SPACE:
+         return "Space";
+       case VK_PAGE_UP:
+         return "Page Up";
+       case VK_PAGE_DOWN:
+         return "Page Down";
+       case VK_END:
+         return "End";
+       case VK_HOME:
+         return "Home";
+       case VK_LEFT:
+       case VK_KP_LEFT:
+         return "Left";
+       case VK_UP:
+       case VK_KP_UP:
+         return "Up";
+       case VK_RIGHT:
+       case VK_KP_RIGHT:
+         return "Right";
+       case VK_DOWN:
+       case VK_KP_DOWN:
+         return "Down";
+       case VK_MINUS:
+         return "Minus";
+       case VK_MULTIPLY:
+         return "NumPad *";
+       case VK_ADD:
+         return "NumPad +";
+       case VK_SEPARATOR:
+         return "NumPad ,";
+       case VK_SUBTRACT:
+         return "NumPad -";
+       case VK_DECIMAL:
+         return "NumPad .";
+       case VK_DIVIDE:
+         return "NumPad /";
+       case VK_DELETE:
+         return "Delete";
+       case VK_DEAD_GRAVE:
+         return "Dead Grave";
+       case VK_DEAD_ACUTE:
+         return "Dead Acute";
+       case VK_DEAD_CIRCUMFLEX:
+         return "Dead Circumflex";
+       case VK_DEAD_TILDE:
+         return "Dead Tilde";
+       case VK_DEAD_MACRON:
+         return "Dead Macron";
+       case VK_DEAD_BREVE:
+         return "Dead Breve";
+       case VK_DEAD_ABOVEDOT:
+         return "Dead Above Dot";
+       case VK_DEAD_DIAERESIS:
+         return "Dead Diaeresis";
+       case VK_DEAD_ABOVERING:
+         return "Dead Above Ring";
+       case VK_DEAD_DOUBLEACUTE:
+         return "Dead Double Acute";
+       case VK_DEAD_CARON:
+         return "Dead Caron";
+       case VK_DEAD_CEDILLA:
+         return "Dead Cedilla";
+       case VK_DEAD_OGONEK:
+         return "Dead Ogonek";
+       case VK_DEAD_IOTA:
+         return "Dead Iota";
+       case VK_DEAD_VOICED_SOUND:
+         return "Dead Voiced Sound";
+       case VK_DEAD_SEMIVOICED_SOUND:
+         return "Dead Semivoiced Sound";
+       case VK_NUM_LOCK:
+         return "Num Lock";
+       case VK_SCROLL_LOCK:
+         return "Scroll Lock";
+       case VK_AMPERSAND:
+         return "Ampersand";
+       case VK_ASTERISK:
+         return "Asterisk";
+       case VK_QUOTEDBL:
+         return "Double Quote";
+       case VK_LESS:
+         return "Less";
+       case VK_PRINTSCREEN:
+         return "Print Screen";
+       case VK_INSERT:
+         return "Insert";
+       case VK_HELP:
+         return "Help";
+       case VK_META:
+         return "Meta";
+       case VK_GREATER:
+         return "Greater";
+       case VK_BRACELEFT:
+         return "Left Brace";
+       case VK_BRACERIGHT:
+         return "Right Brace";
+       case VK_BACK_QUOTE:
+         return "Back Quote";
+       case VK_QUOTE:
+         return "Quote";
+       case VK_ALPHANUMERIC:
+         return "Alphanumeric";
+       case VK_KATAKANA:
+         return "Katakana";
+       case VK_HIRAGANA:
+         return "Hiragana";
+       case VK_FULL_WIDTH:
+         return "Full-Width";
+       case VK_HALF_WIDTH:
+         return "Half-Width";
+       case VK_ROMAN_CHARACTERS:
+         return "Roman Characters";
+       case VK_ALL_CANDIDATES:
+         return "All Candidates";
+       case VK_PREVIOUS_CANDIDATE:
+         return "Previous Candidate";
+       case VK_CODE_INPUT:
+         return "Code Input";
+       case VK_JAPANESE_KATAKANA:
+         return "Japanese Katakana";
+       case VK_JAPANESE_HIRAGANA:
+         return "Japanese Hiragana";
+       case VK_JAPANESE_ROMAN:
+         return "Japanese Roman";
+       case VK_KANA_LOCK:
+         return "Kana Lock";
+       case VK_INPUT_METHOD_ON_OFF:
+         return "Input Method On/Off";
+       case VK_AT:
+         return "At";
+       case VK_COLON:
+         return "Colon";
+       case VK_CIRCUMFLEX:
+         return "Circumflex";
+       case VK_DOLLAR:
+         return "Dollar";
+       case VK_EURO_SIGN:
+         return "Euro";
+       case VK_EXCLAMATION_MARK:
+         return "Exclamation Mark";
+       case VK_INVERTED_EXCLAMATION_MARK:
+         return "Inverted Exclamation Mark";
+       case VK_LEFT_PARENTHESIS:
+         return "Left Parenthesis";
+       case VK_NUMBER_SIGN:
+         return "Number Sign";
+       case VK_PLUS:
+         return "Plus";
+       case VK_RIGHT_PARENTHESIS:
+         return "Right Parenthesis";
+       case VK_UNDERSCORE:
+         return "Underscore";
+       case VK_COMPOSE:
+         return "Compose";
+       case VK_ALT_GRAPH:
+         return "Alt Graph";
+       case VK_STOP:
+         return "Stop";
+       case VK_AGAIN:
+         return "Again";
+       case VK_PROPS:
+         return "Props";
+       case VK_UNDO:
+         return "Undo";
+       case VK_COPY:
+         return "Copy";
+       case VK_PASTE:
+         return "Paste";
+       case VK_FIND:
+         return "Find";
+       case VK_CUT:
+         return "Cut";
+       case VK_COMMA:
+       case VK_PERIOD:
+       case VK_SLASH:
+       case VK_0:
+       case VK_1:
+       case VK_2:
+       case VK_3:
+       case VK_4:
+       case VK_5:
+       case VK_6:
+       case VK_7:
+       case VK_8:
+       case VK_9:
+       case VK_SEMICOLON:
+       case VK_EQUALS:
+       case VK_A:
+       case VK_B:
+       case VK_C:
+       case VK_D:
+       case VK_E:
+       case VK_F:
+       case VK_G:
+       case VK_H:
+       case VK_I:
+       case VK_J:
+       case VK_K:
+       case VK_L:
+       case VK_M:
+       case VK_N:
+       case VK_O:
+       case VK_P:
+       case VK_Q:
+       case VK_R:
+       case VK_S:
+       case VK_T:
+       case VK_U:
+       case VK_V:
+       case VK_W:
+       case VK_X:
+       case VK_Y:
+       case VK_Z:
+       case VK_OPEN_BRACKET:
+       case VK_BACK_SLASH:
+       case VK_CLOSE_BRACKET:
+         return "" + (char) keyCode;
+       case VK_NUMPAD0:
+       case VK_NUMPAD1:
+       case VK_NUMPAD2:
+       case VK_NUMPAD3:
+       case VK_NUMPAD4:
+       case VK_NUMPAD5:
+       case VK_NUMPAD6:
+       case VK_NUMPAD7:
+       case VK_NUMPAD8:
+       case VK_NUMPAD9:
+         return "NumPad-" + (keyCode - VK_NUMPAD0);
+       case VK_F1:
+       case VK_F2:
+       case VK_F3:
+       case VK_F4:
+       case VK_F5:
+       case VK_F6:
+       case VK_F7:
+       case VK_F8:
+       case VK_F9:
+       case VK_F10:
+       case VK_F11:
+       case VK_F12:
+         return "F" + (keyCode - (VK_F1 - 1));
+       case VK_F13:
+       case VK_F14:
+       case VK_F15:
+       case VK_F16:
+       case VK_F17:
+       case VK_F18:
+       case VK_F19:
+       case VK_F20:
+       case VK_F21:
+       case VK_F22:
+       case VK_F23:
+       case VK_F24:
+         return "F" + (keyCode - (VK_F13 - 13));
+       default:
+         // This is funky on negative numbers, but that's Sun's fault.
+         return "Unknown keyCode: 0x" + (keyCode < 0 ? "-" : "")
+           + Integer.toHexString(Math.abs(keyCode));
+       }
+   }
+ 
+   /**
+    * Returns a string describing the modifiers, such as "Shift" or
+    * "Ctrl+Button1".
+    *
+    * XXX Sun claims this can be localized via the awt.properties file - how
+    * do we implement that?
+    *
+    * @param modifiers the old-style modifiers to convert to text
+    * @return a string representation of the modifiers in this bitmask
+    */
+   public static String getKeyModifiersText(int modifiers)
+   {
+     return getModifiersExText(EventModifier.extend(modifiers
+                                                    & EventModifier.OLD_MASK));
+   }
+ 
+   /**
+    * Tests whether or not this key is an action key. An action key typically
+    * does not fire a KEY_TYPED event, and is not a modifier.
+    *
+    * @return true if this is an action key
+    */
+   public boolean isActionKey()
+   {
+     switch (keyCode)
+       {
+       case VK_PAUSE:
+       case VK_CAPS_LOCK:
+       case VK_KANA:
+       case VK_FINAL:
+       case VK_KANJI:
+       case VK_CONVERT:
+       case VK_NONCONVERT:
+       case VK_ACCEPT:
+       case VK_MODECHANGE:
+       case VK_PAGE_UP:
+       case VK_PAGE_DOWN:
+       case VK_END:
+       case VK_HOME:
+       case VK_LEFT:
+       case VK_UP:
+       case VK_RIGHT:
+       case VK_DOWN:
+       case VK_F1:
+       case VK_F2:
+       case VK_F3:
+       case VK_F4:
+       case VK_F5:
+       case VK_F6:
+       case VK_F7:
+       case VK_F8:
+       case VK_F9:
+       case VK_F10:
+       case VK_F11:
+       case VK_F12:
+       case VK_NUM_LOCK:
+       case VK_SCROLL_LOCK:
+       case VK_PRINTSCREEN:
+       case VK_INSERT:
+       case VK_HELP:
+       case VK_KP_UP:
+       case VK_KP_DOWN:
+       case VK_KP_LEFT:
+       case VK_KP_RIGHT:
+       case VK_ALPHANUMERIC:
+       case VK_KATAKANA:
+       case VK_HIRAGANA:
+       case VK_FULL_WIDTH:
+       case VK_HALF_WIDTH:
+       case VK_ROMAN_CHARACTERS:
+       case VK_ALL_CANDIDATES:
+       case VK_PREVIOUS_CANDIDATE:
+       case VK_CODE_INPUT:
+       case VK_JAPANESE_KATAKANA:
+       case VK_JAPANESE_HIRAGANA:
+       case VK_JAPANESE_ROMAN:
+       case VK_KANA_LOCK:
+       case VK_INPUT_METHOD_ON_OFF:
+       case VK_F13:
+       case VK_F14:
+       case VK_F15:
+       case VK_F16:
+       case VK_F17:
+       case VK_F18:
+       case VK_F19:
+       case VK_F20:
+       case VK_F21:
+       case VK_F22:
+       case VK_F23:
+       case VK_F24:
+       case VK_STOP:
+       case VK_AGAIN:
+       case VK_PROPS:
+       case VK_UNDO:
+       case VK_COPY:
+       case VK_PASTE:
+       case VK_FIND:
+       case VK_CUT:
+         return true;
+       default:
+         return false;
+       }
+   }
+ 
+   /**
+    * Returns a string identifying the event.  This is formatted as the
+    * field name of the id type, followed by the keyCode, then the
+    * keyChar, modifiers (if any), extModifiers (if any), and
+    * keyLocation.
+    *
+    * @return a string identifying the event
+    */
+   public String paramString()
+   {
+     StringBuffer s = new StringBuffer();
+ 
+     switch (id)
+       {
+       case KEY_PRESSED:
+         s.append("KEY_PRESSED");
+         break;
+       case KEY_RELEASED:
+         s.append("KEY_RELEASED");
+         break;
+       case KEY_TYPED:
+         s.append("KEY_TYPED");
+         break;
+       default:
+         s.append("unknown type");
+       }
+ 
+     s.append(",keyCode=").append(keyCode);
+ 
+     s.append(",keyText=").append(getKeyText(keyCode));
+ 
+     s.append(",keyChar=");
+     if (isActionKey()
+         || keyCode == VK_SHIFT
+         || keyCode == VK_CONTROL
+         || keyCode == VK_ALT)
+       s.append("Undefined keyChar");
+     else
+       {
+         /* This output string must be selected by examining keyChar
+          * rather than keyCode, because key code information is not
+          * included in KEY_TYPED events.
+          */
+         if (keyChar == VK_BACK_SPACE
+             || keyChar == VK_TAB
+             || keyChar == VK_ENTER
+             || keyChar == VK_ESCAPE
+             || keyChar == VK_DELETE)
+           s.append(getKeyText(keyChar));
+         else
+           s.append("'").append(keyChar).append("'");
+       }
+ 
+     if ((modifiers & CONVERT_MASK) != 0)
+       s.append(",modifiers=").append(getModifiersExText(modifiers
+                                                         & CONVERT_MASK));
+     if (modifiers != 0)
+       s.append(",extModifiers=").append(getModifiersExText(modifiers));
+ 
+     s.append(",keyLocation=KEY_LOCATION_");
+     switch (keyLocation)
+       {
+       case KEY_LOCATION_UNKNOWN:
+         s.append("UNKNOWN");
+         break;
+       case KEY_LOCATION_STANDARD:
+         s.append("STANDARD");
+         break;
+       case KEY_LOCATION_LEFT:
+         s.append("LEFT");
+         break;
+       case KEY_LOCATION_RIGHT:
+         s.append("RIGHT");
+         break;
+       case KEY_LOCATION_NUMPAD:
+         s.append("NUMPAD");
+       }
+ 
+     return s.toString();
+   }
+ 
+   /**
+    * Reads in the object from a serial stream.
+    *
+    * @param s the stream to read from
+    * @throws IOException if deserialization fails
+    * @throws ClassNotFoundException if deserialization fails
+    * @serialData default, except that the modifiers are converted to new style
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     modifiersEx = EventModifier.extend(modifiers) & EventModifier.NEW_MASK;
+   }
+ } // class KeyEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/KeyListener.java gcc-4.1.0/libjava/classpath/java/awt/event/KeyListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/KeyListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/KeyListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* KeyListener.java -- listen for keyboard presses
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to receive keyboard events. To
+  * watch a subset of these events, use a KeyAdapter.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see KeyAdapter
+  * @see KeyEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface KeyListener extends EventListener
+ {
+   /**
+    * This method is called when a key is typed.  A key is considered typed
+    * when it and all modifiers have been pressed and released, mapping to
+    * a single virtual key.
+    *
+    * @param event the <code>KeyEvent</code> indicating that a key was typed
+    */
+   void keyTyped(KeyEvent event);
+ 
+   /**
+    * This method is called when a key is pressed.
+    *
+    * @param event the <code>KeyEvent</code> indicating the key press
+    */
+   void keyPressed(KeyEvent event);
+ 
+   /**
+    * This method is called when a key is released.
+    *
+    * @param event the <code>KeyEvent</code> indicating the key release
+    */
+   void keyReleased(KeyEvent event);
+ } // interface KeyListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/MouseAdapter.java gcc-4.1.0/libjava/classpath/java/awt/event/MouseAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/MouseAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/MouseAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,106 ----
+ /* MouseAdapter.java -- convenience class for writing mouse listeners
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ /**
+  * This class implements <code>MouseListener</code> and implements all methods
+  * with empty bodies.  This allows a listener interested in implementing only
+  * a subset of the <code>MouseListener</code> interface to extend this class
+  * and override only the desired methods.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see MouseEvent
+  * @see MouseListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class MouseAdapter implements MouseListener
+ {
+   /**
+    * Do nothing default constructor for subclasses.
+    */
+   public MouseAdapter()
+   {
+   }
+ 
+   /**
+    * Implements this method in the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void mouseClicked(MouseEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method in the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void mousePressed(MouseEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method in the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void mouseReleased(MouseEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method in the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void mouseEntered(MouseEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method in the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void mouseExited(MouseEvent event)
+   {
+   }
+ } // class MouseAdapter
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/MouseEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/MouseEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/MouseEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/MouseEvent.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,431 ----
+ /* MouseEvent.java -- a mouse event
+    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import gnu.java.awt.EventModifier;
+ 
+ import java.awt.Component;
+ import java.awt.Point;
+ import java.awt.PopupMenu;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ 
+ /**
+  * This event is generated for a mouse event. There are three main categories
+  * of mouse events: Regular events include pressing, releasing, and clicking
+  * buttons, as well as moving over the boundary of the unobscured portion of
+  * a component. Motion events include movement and dragging. Wheel events are
+  * covered separately by the subclass MouseWheelEvent.
+  *
+  * <p>A mouse event is tied to the unobstructed visible component that the
+  * mouse cursor was over at the time of the action. The button that was
+  * most recently pressed is the only one that shows up in
+  * <code>getModifiers</code>, and is returned by <code>getButton</code>,
+  * while all buttons that are down show up in <code>getModifiersEx</code>.
+  *
+  * <p>Drag events may be cut short if native drag-and-drop operations steal
+  * the event. Likewise, if a mouse drag exceeds the bounds of a window or
+  * virtual device, some platforms may clip the path to fit in the bounds of
+  * the component.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see MouseAdapter
+  * @see MouseListener
+  * @see MouseMotionAdapter
+  * @see MouseMotionListener
+  * @see MouseWheelListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class MouseEvent extends InputEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -991214153494842848L;
+ 
+   /** This is the first id in the range of event ids used by this class. */
+   public static final int MOUSE_FIRST = 500;
+ 
+   /** This is the last id in the range of event ids used by this class. */
+   public static final int MOUSE_LAST = 507;
+ 
+   /** This event id indicates that the mouse was clicked. */
+   public static final int MOUSE_CLICKED = 500;
+ 
+   /** This event id indicates that the mouse was pressed. */
+   public static final int MOUSE_PRESSED = 501;
+ 
+   /** This event id indicates that the mouse was released. */
+   public static final int MOUSE_RELEASED = 502;
+ 
+   /** This event id indicates that the mouse was moved. */
+   public static final int MOUSE_MOVED = 503;
+ 
+   /** This event id indicates that the mouse entered a component. */
+   public static final int MOUSE_ENTERED = 504;
+ 
+   /** This event id indicates that the mouse exited a component. */
+   public static final int MOUSE_EXITED = 505;
+ 
+   /**
+    * This indicates that no button changed state.
+    *
+    * @see #getButton()
+    * @since 1.4
+    */
+   public static final int NOBUTTON = 0;
+ 
+   /**
+    * This indicates that button 1 changed state.
+    *
+    * @see #getButton()
+    * @since 1.4
+    */
+   public static final int BUTTON1 = 1;
+ 
+   /**
+    * This indicates that button 2 changed state.
+    *
+    * @see #getButton()
+    * @since 1.4
+    */
+   public static final int BUTTON2 = 2;
+ 
+   /**
+    * This indicates that button 3 changed state.
+    *
+    * @see #getButton()
+    * @since 1.4
+    */
+   public static final int BUTTON3 = 3;
+ 
+   /** This event id indicates that the mouse was dragged over a component. */
+   public static final int MOUSE_DRAGGED = 506;
+ 
+   /**
+    * This event id indicates that the mouse wheel was rotated.
+    *
+    * @since 1.4
+    */
+   public static final int MOUSE_WHEEL = 507;
+ 
+   /**
+    * The X coordinate of the mouse cursor at the time of the event.
+    *
+    * @see #getX()
+    * @serial the x coordinate
+   */
+   private int x;
+ 
+   /**
+    * The Y coordinate of the mouse cursor at the time of the event.
+    *
+    * @see #getY()
+    * @serial the y coordinate
+    */
+   private int y;
+ 
+   /**
+    * The number of clicks that took place. For MOUSE_CLICKED, MOUSE_PRESSED,
+    * and MOUSE_RELEASED, this will be at least 1; otherwise it is 0.
+    *
+    * see #getClickCount()
+    * @serial the number of clicks
+    */
+   private final int clickCount;
+ 
+   /**
+    * Indicates which mouse button changed state. Can only be one of
+    * {@link #NOBUTTON}, {@link #BUTTON1}, {@link #BUTTON2}, or
+    * {@link #BUTTON3}.
+    *
+    * @see #getButton()
+    * @since 1.4
+    */
+   private int button;
+ 
+   /**
+    * Whether or not this event should trigger a popup menu.
+    *
+    * @see PopupMenu
+    * @see #isPopupTrigger()
+    * @serial true if this is a popup trigger
+    */
+   private final boolean popupTrigger;
+ 
+   /**
+    * Initializes a new instance of <code>MouseEvent</code> with the specified
+    * information. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the source of the event
+    * @param id the event id
+    * @param when the timestamp of when the event occurred
+    * @param modifiers the modifier keys during the event, in old or new style
+    * @param x the X coordinate of the mouse point
+    * @param y the Y coordinate of the mouse point
+    * @param clickCount the number of mouse clicks for this event
+    * @param popupTrigger true if this event triggers a popup menu
+    * @param button the most recent mouse button to change state
+    * @throws IllegalArgumentException if source is null or button is invalid
+    * @since 1.4
+    */
+   public MouseEvent(Component source, int id, long when, int modifiers,
+                     int x, int y, int clickCount, boolean popupTrigger,
+                     int button)
+   {
+     super(source, id, when, modifiers);
+     this.x = x;
+     this.y = y;
+     this.clickCount = clickCount;
+     this.popupTrigger = popupTrigger;
+     this.button = button;
+     if (button < NOBUTTON || button > BUTTON3)
+       throw new IllegalArgumentException();
+     if ((modifiers & EventModifier.OLD_MASK) != 0)
+       {
+         if ((modifiers & BUTTON1_MASK) != 0)
+           this.button = BUTTON1;
+         else if ((modifiers & BUTTON2_MASK) != 0)
+           this.button = BUTTON2;
+         else if ((modifiers & BUTTON3_MASK) != 0)
+           this.button = BUTTON3;
+       }
+     // clear the mouse button modifier masks if this is a button
+     // release event.
+     if (id == MOUSE_RELEASED)
+       this.modifiersEx &= ~(BUTTON1_DOWN_MASK
+ 			    | BUTTON2_DOWN_MASK
+ 			    | BUTTON3_DOWN_MASK);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>MouseEvent</code> with the specified
+    * information. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the source of the event
+    * @param id the event id
+    * @param when the timestamp of when the event occurred
+    * @param modifiers the modifier keys during the event, in old or new style
+    * @param x the X coordinate of the mouse point
+    * @param y the Y coordinate of the mouse point
+    * @param clickCount the number of mouse clicks for this event
+    * @param popupTrigger true if this event triggers a popup menu
+    * @throws IllegalArgumentException if source is null
+    */
+   public MouseEvent(Component source, int id, long when, int modifiers,
+                     int x, int y, int clickCount, boolean popupTrigger)
+   {
+     this(source, id, when, modifiers, x, y, clickCount, popupTrigger,
+          NOBUTTON);
+   }
+ 
+   /**
+    * This method returns the X coordinate of the mouse position. This is
+    * relative to the source component.
+    *
+    * @return the x coordinate
+    */
+   public int getX()
+   {
+     return x;
+   }
+ 
+   /**
+    * This method returns the Y coordinate of the mouse position. This is
+    * relative to the source component.
+    *
+    * @return the y coordinate
+    */
+   public int getY()
+   {
+     return y;
+   }
+ 
+   /**
+    * This method returns a <code>Point</code> for the x,y position of
+    * the mouse pointer. This is relative to the source component.
+    *
+    * @return a <code>Point</code> for the event position
+    */
+   public Point getPoint()
+   {
+     return new Point(x, y);
+   }
+ 
+   /**
+    * Translates the event coordinates by the specified x and y offsets.
+    *
+    * @param dx the value to add to the X coordinate of this event
+    * @param dy the value to add to the Y coordiante of this event
+    */
+   public void translatePoint(int dx, int dy)
+   {
+     x += dx;
+     y += dy;
+   }
+ 
+   /**
+    * This method returns the number of mouse clicks associated with this
+    * event.
+    *
+    * @return the number of mouse clicks for this event
+    */
+   public int getClickCount()
+   {
+     return clickCount;
+   }
+ 
+   /**
+    * Returns which button, if any, was the most recent to change state. This
+    * will be one of {@link #NOBUTTON}, {@link #BUTTON1}, {@link #BUTTON2}, or
+    * {@link #BUTTON3}.
+    *
+    * @return the button that changed state
+    * @since 1.4
+    */
+   public int getButton()
+   {
+     return button;
+   }
+ 
+   /**
+    * This method tests whether or not the event is a popup menu trigger. This
+    * should be checked in both MousePressed and MouseReleased to be
+    * cross-platform compatible, as different systems have different popup
+    * triggers.
+    *
+    * @return true if the event is a popup menu trigger
+    */
+   public boolean isPopupTrigger()
+   {
+     return popupTrigger;
+   }
+ 
+   /**
+    * Returns a string describing the modifiers, such as "Shift" or
+    * "Ctrl+Button1".
+    *
+    * XXX Sun claims this can be localized via the awt.properties file - how
+    * do we implement that?
+    *
+    * @param modifiers the old-style modifiers to convert to text
+    * @return a string representation of the modifiers in this bitmask
+    */
+   public static String getMouseModifiersText(int modifiers)
+   {
+     modifiers &= EventModifier.OLD_MASK;
+     if ((modifiers & BUTTON2_MASK) != 0)
+       modifiers |= BUTTON2_DOWN_MASK;
+     if ((modifiers & BUTTON3_MASK) != 0)
+       modifiers |= BUTTON3_DOWN_MASK;
+     return getModifiersExText(EventModifier.extend(modifiers));
+   }
+ 
+   /**
+    * Returns a string identifying this event. This is formatted as the field
+    * name of the id type, followed by the (x,y) point, the most recent button
+    * changed, modifiers (if any), extModifiers (if any), and clickCount.
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     StringBuffer s = new StringBuffer();
+     switch (id)
+       {
+       case MOUSE_CLICKED:
+         s.append("MOUSE_CLICKED,(");
+         break;
+       case MOUSE_PRESSED:
+         s.append("MOUSE_PRESSED,(");
+         break;
+       case MOUSE_RELEASED:
+         s.append("MOUSE_RELEASED,(");
+         break;
+       case MOUSE_MOVED:
+         s.append("MOUSE_MOVED,(");
+         break;
+       case MOUSE_ENTERED:
+         s.append("MOUSE_ENTERED,(");
+         break;
+       case MOUSE_EXITED:
+         s.append("MOUSE_EXITED,(");
+         break;
+       case MOUSE_DRAGGED:
+         s.append("MOUSE_DRAGGED,(");
+         break;
+       case MOUSE_WHEEL:
+         s.append("MOUSE_WHEEL,(");
+         break;
+       default:
+         s.append("unknown type,(");
+       }
+     s.append(x).append(',').append(y).append("),button=").append(button);
+     // FIXME: need a mauve test for this method
+     if (modifiersEx != 0)
+       s.append(",extModifiers=").append(getModifiersExText(modifiersEx));
+     return s.append(",clickCount=").append(clickCount).toString();
+   }
+ 
+   /**
+    * Reads in the object from a serial stream.
+    *
+    * @param s the stream to read from
+    * @throws IOException if deserialization fails
+    * @throws ClassNotFoundException if deserialization fails
+    * @serialData default, except that the modifiers are converted to new style
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     if ((modifiers & EventModifier.OLD_MASK) != 0)
+       {
+         if ((modifiers & BUTTON1_MASK) != 0)
+           button = BUTTON1;
+         else if ((modifiers & BUTTON2_MASK) != 0)
+           button = BUTTON2;
+         else if ((modifiers & BUTTON3_MASK) != 0)
+           button = BUTTON3;
+         modifiersEx = EventModifier.extend(modifiers) & EventModifier.NEW_MASK;
+       }
+   }
+ } // class MouseEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/MouseListener.java gcc-4.1.0/libjava/classpath/java/awt/event/MouseListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/MouseListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/MouseListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* MouseListener.java -- listen for mouse clicks and crossing component edges
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to receive mouse events other than
+  * simple motion events. This includes clicks (but not mouse wheel events),
+  * and crossing component boundaries without change in button status. To
+  * track moves and drags, use MouseMotionListener, and to track wheel events,
+  * use MouseWheelListener. To watch a subset of these events, use a
+  * MouseAdapter.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see MouseAdapter
+  * @see MouseEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface MouseListener extends EventListener
+ {
+   /**
+    * This method is called when the mouse is clicked (pressed and released
+    * in short succession) on a component.
+    *
+    * @param event the <code>MouseEvent</code> indicating the click
+    */
+   void mouseClicked(MouseEvent event);
+ 
+   /**
+    * This method is called when the mouse is pressed over a component.
+    *
+    * @param event the <code>MouseEvent</code> for the press
+    */
+   void mousePressed(MouseEvent event);
+ 
+   /**
+    * This method is called when the mouse is released over a component.
+    *
+    * @param event the <code>MouseEvent</code> for the release
+    */
+   void mouseReleased(MouseEvent event);
+ 
+   /**
+    * This method is called when the mouse enters a component.
+    *
+    * @param event the <code>MouseEvent</code> for the entry
+    */
+   void mouseEntered(MouseEvent event);
+ 
+   /** 
+    * This method is called when the mouse exits a component.
+    *
+    * @param event the <code>MouseEvent</code> for the exit
+    */
+   void mouseExited(MouseEvent event);
+ } // interface MouseListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/MouseMotionAdapter.java gcc-4.1.0/libjava/classpath/java/awt/event/MouseMotionAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/MouseMotionAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/MouseMotionAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* MouseMotionAdapter.java -- convenience class for mouse motion listeners
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ /**
+  * This class implements <code>MouseMotionListener</code> and implements all
+  * methods with empty bodies.  This allows a listener interested in
+  * implementing only a subset of the <code>MouseMotionListener</code>
+  * interface to extend this class and override only the desired methods.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see MouseEvent
+  * @see MouseMotionListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class MouseMotionAdapter implements MouseMotionListener
+ {
+   /**
+    * Do nothing default constructor for subclasses.
+    */
+   public MouseMotionAdapter()
+   {
+   }
+ 
+   /**
+    * Implement this method in the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void mouseDragged(MouseEvent event)
+   {
+   }
+ 
+   /**
+    * Implement this method in the interface with an empty body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void mouseMoved(MouseEvent event)
+   {
+   }
+ } // class MouseMotionAdapter
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/MouseMotionListener.java gcc-4.1.0/libjava/classpath/java/awt/event/MouseMotionListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/MouseMotionListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/MouseMotionListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* MouseMotionListener.java -- listen to mouse motion events
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to be notified of mouse movements.
+  * This includes moves and drags, but not crossing component boundaries. To
+  * track other mouse events, use MouseListener or MouseWheelListener. To
+  * watch a subset of these events, use a MouseMotionAdapter.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see MouseMotionAdapter
+  * @see MouseEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface MouseMotionListener extends EventListener
+ {
+   /**
+    * This method is called when the mouse is moved over a component
+    * while a button has been pressed.
+    *
+    * @param event the <code>MouseEvent</code> indicating the motion
+    */
+   void mouseDragged(MouseEvent event);
+ 
+   /**
+    * This method is called when the mouse is moved over a component
+    * while no button is pressed.
+    *
+    * @param event the <code>MouseEvent</code> indicating the motion
+    */
+   void mouseMoved(MouseEvent event);
+ } // interface MouseMotionListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/MouseWheelEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/MouseWheelEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/MouseWheelEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/MouseWheelEvent.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,232 ----
+ /* MouseWheelEvent.java -- a mouse wheel event
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.Adjustable;
+ import java.awt.Component;
+ import java.awt.Rectangle;
+ import java.awt.ScrollPane;
+ 
+ import javax.swing.JScrollPane;
+ import javax.swing.Scrollable;
+ 
+ /**
+  * This event is generated for a mouse wheel rotation. The wheel (the middle
+  * mouse button on most modern mice) can be rotated towards or away from the
+  * user, and is often used for scrolling.
+  *
+  * <p>Because of the special use for scrolling components, MouseWheelEvents
+  * often affect a different component than the one located at the point of
+  * the event. If the component under the mouse cursor does not accept wheel
+  * events, the event is passed to the first ancestor container which does. This
+  * is often a ScrollPane, which knows how to scroll. If an AWT component is
+  * built from a native widget that knows how to use mouse wheel events, that
+  * component will consume the event.
+  *
+  * <p>The two most common scroll types are "units" (lines at a time) or
+  * "blocks" (pages at a time). The initial setting is taken from the platform,
+  * although the user can adjust the setting at any time.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see MouseWheelListener
+  * @see ScrollPane
+  * @see ScrollPane#setWheelScrollingEnabled(boolean)
+  * @see JScrollPane
+  * @see JScrollPane#setWheelScrollingEnabled(boolean)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class MouseWheelEvent extends MouseEvent
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = 6459879390515399677L;
+ 
+   /**
+    * Indicates scrolling by units (lines).
+    *
+    * @see #getScrollType()
+    */
+   public static final int WHEEL_UNIT_SCROLL = 0;
+ 
+   /**
+    * Indicates scrolling by blocks (pages).
+    *
+    * @see #getScrollType()
+    */
+   public static final int WHEEL_BLOCK_SCROLL = 1;
+ 
+   /**
+    * Indicates what scroll type should take place. This should be limited
+    * to {@link #WHEEL_UNIT_SCROLL} and {@link #WHEEL_BLOCK_SCROLL}.
+    *
+    * @serial the scroll type
+    */
+   private final int scrollType;
+ 
+   /**
+    * Indicates the scroll amount. This is only meaningful if scrollType is
+    * WHEEL_UNIT_SCROLL.
+    *
+    * @serial the number of lines to scroll
+    */
+   private final int scrollAmount;
+ 
+   /**
+    * Indicates how far the mouse wheel was rotated.
+    *
+    * @serial the rotation amount
+    */
+   private final int wheelRotation;
+ 
+   /**
+    * Initializes a new instance of <code>MouseWheelEvent</code> with the
+    * specified information. Note that an invalid id leads to unspecified
+    * results.
+    *
+    * @param source the source of the event
+    * @param id the event id
+    * @param when the timestamp of when the event occurred
+    * @param modifiers any modifier bits for this event
+    * @param x the X coordinate of the mouse point
+    * @param y the Y coordinate of the mouse point
+    * @param clickCount the number of mouse clicks for this event
+    * @param popupTrigger true if this event triggers a popup menu
+    * @param scrollType one of {@link #WHEEL_UNIT_SCROLL},
+    *        {@link #WHEEL_BLOCK_SCROLL}
+    * @param scrollAmount the number of units to scroll, ignored for block type
+    * @param wheelRotation the number of rotation "clicks"
+    * @throws IllegalArgumentException if source is null
+    * @see MouseEvent#MouseEvent(Component, int, long, int, int, int, int,
+    *      boolean) 
+    */
+   public MouseWheelEvent(Component source, int id, long when, int modifiers,
+                          int x, int y, int clickCount, boolean popupTrigger,
+                          int scrollType, int scrollAmount, int wheelRotation)
+   {
+     super(source, id, when, modifiers, x, y, clickCount, popupTrigger);
+     this.scrollType = scrollType;
+     this.scrollAmount = scrollAmount;
+     this.wheelRotation = wheelRotation;
+   }
+ 
+   /**
+    * This method returns the scrolling pattern this event requests. Legal
+    * values are {@link #WHEEL_UNIT_SCROLL} and {@link #WHEEL_BLOCK_SCROLL}.
+    *
+    * @return the scroll type
+    * @see Adjustable#getUnitIncrement()
+    * @see Adjustable#getBlockIncrement()
+    * @see Scrollable#getScrollableUnitIncrement(Rectangle, int, int)
+    * @see Scrollable#getScrollableBlockIncrement(Rectangle, int, int)
+    */
+   public int getScrollType()
+   {
+     return scrollType;
+   }
+ 
+   /**
+    * Returns the number of units to scroll in response to this event. This
+    * only makes sense when the scroll type is WHEEL_UNIT_SCROLL.
+    *
+    * @return the number of scroll units, if defined
+    * @see #getScrollType()
+    */
+   public int getScrollAmount()
+   {
+     return scrollAmount;
+   }
+ 
+   /**
+    * Gets the number of "clicks" the wheel was rotated. Negative values move
+    * up (away) from the user, positive values move down (towards) the user.
+    *
+    * @return the number of rotation clicks
+    */
+   public int getWheelRotation()
+   {
+     return wheelRotation;
+   }
+ 
+   /**
+    * This is a convenience method which aids in a common listener for scrolling
+    * a scrollpane (although this is already built into ScrollPane and
+    * JScrollPane). This method only makes sense when getScrollType() returns
+    * WHEEL_UNIT_SCROLL.
+    *
+    * <p>This accounts for direction of scroll and amount of wheel movement, as
+    * interpreted by the platform settings.
+    *
+    * @return the number of units to scroll
+    * @see #getScrollType()
+    * @see #getScrollAmount()
+    * @see MouseWheelListener
+    * @see Adjustable
+    * @see Adjustable#getUnitIncrement()
+    * @see Scrollable
+    * @see Scrollable#getScrollableUnitIncrement(Rectangle, int, int)
+    * @see ScrollPane
+    * @see ScrollPane#setWheelScrollingEnabled(boolean)
+    * @see JScrollPane
+    * @see JScrollPane#setWheelScrollingEnabled(boolean)
+    */
+   public int getUnitsToScroll()
+   {
+     return wheelRotation * scrollAmount;
+   }
+ 
+   /**
+    * Returns a string identifying this event. For mouse wheel events, this
+    * is <code>super.paramString() + ",scrollType=WHEEL_" +
+    * (getScrollType() == WHEEL_UNIT_SCROLL ? "UNIT" : "BLOCK")
+    * + "_SCROLL,scrollAmount=" + getScrollAmount() + ",wheelRotation="
+    * + getWheelRotation()</code>.
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     return super.paramString() + ",scrollType="
+       + (scrollType == WHEEL_UNIT_SCROLL ? "WHEEL_UNIT_SCROLL"
+          : scrollType == WHEEL_BLOCK_SCROLL ? "WHEEL_BLOCK_SCROLL"
+          : "unknown scroll type")
+       + ",scrollAmount=" + scrollAmount + ",wheelRotation=" + wheelRotation;
+   }
+ } // class MouseWheelEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/MouseWheelListener.java gcc-4.1.0/libjava/classpath/java/awt/event/MouseWheelListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/MouseWheelListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/MouseWheelListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* MouseWheelListener.java -- listen for mouse wheel events
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to receive mouse wheel events. For
+  * other events, use MouseListener or MouseMotionListener.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see MouseWheelEvent
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface MouseWheelListener extends EventListener
+ {
+   /**
+    * This method is called when the mouse wheel is rotated.
+    *
+    * @param event the <code>MouseWheelEvent</code> indicating the rotation
+    */
+   void mouseWheelMoved(MouseWheelEvent event);
+ } // interface MouseWheelListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/PaintEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/PaintEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/PaintEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/PaintEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,127 ----
+ /* PaintEvent.java -- an area of the screen needs to be repainted
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.Component;
+ import java.awt.Rectangle;
+ 
+ /**
+  * This event is generated when an area of the screen needs to be painted.
+  * This event is not meant for users, but exists to allow proper serialization
+  * behavior in the EventQueue with user-accessible events.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class PaintEvent extends ComponentEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 1267492026433337593L;
+ 
+   /** This is the first id in the range of event ids used by this class. */
+   public static final int PAINT_FIRST = 800;
+ 
+   /** This is the last id in the range of event ids used by this class. */
+   public static final int PAINT_LAST = 801;
+ 
+   /** This id is for paint event types. */
+   public static final int PAINT = 800;
+ 
+   /** This id is for update event types. */
+   public static final int UPDATE = 801;
+ 
+   /**
+    * This is the rectange to be painted or updated.
+    *
+    * @see #getUpdateRect()
+    * @see #setUpdateRect(Rectangle)
+    * @serial the non-null rectangle to be painted
+    */
+   private Rectangle updateRect;
+ 
+   /**
+    * Initializes a new instance of <code>PaintEvent</code> with the specified
+    * source, id, and update region. Note that an invalid id leads to
+    * unspecified results.
+    *
+    * @param source the event source
+    * @param id the event id
+    * @param updateRect the rectangle to repaint
+    * @throws IllegalArgumentException if source is null
+    */
+   public PaintEvent(Component source, int id, Rectangle updateRect)
+   {
+     super(source, id);
+     this.updateRect = updateRect;
+   }
+ 
+   /**
+    * Returns the rectange to be updated for this event.
+    *
+    * @return the rectangle to update
+    */
+   public Rectangle getUpdateRect()
+   {
+     return updateRect;
+   }
+ 
+   /**
+    * Sets the rectangle to be updated for this event.
+    *
+    * @param updateRect the new update rectangle for this event
+    */
+   public void setUpdateRect(Rectangle updateRect)
+   {
+     this.updateRect = updateRect;
+   }
+ 
+   /**
+    * Returns a string identifying this event.
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     return (id == PAINT ? "PAINT,updateRect=" : id == UPDATE
+             ? "UPDATE,updateRect=" : "unknown type,updateRect=") + updateRect;
+   }
+ } // class PaintEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/TextEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/TextEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/TextEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/TextEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,93 ----
+ /* TextEvent.java -- event for text changes
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.TextComponent;
+ 
+ /**
+  * This event is generated when a text box changes contents. This is an
+  * abstraction that distills a large number of individual mouse or keyboard
+  * events into a simpler "text changed" event.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see TextComponent
+  * @see TextListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class TextEvent extends AWTEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 6269902291250941179L;
+ 
+   /** This is the first id in the range of event ids used by this class. */
+   public static final int TEXT_FIRST = 900;
+ 
+   /** This is the last id in the range of event ids used by this class. */
+   public static final int TEXT_LAST = 900;
+ 
+   /** This event id indicates that the text of an object has changed. */
+   public static final int TEXT_VALUE_CHANGED = 900;
+ 
+   /**
+    * Initializes a new instance of <code>TextEvent</code> with the specified
+    * source and id. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the (TextComponent) object that generated this event
+    * @param id the event id
+    * @throws IllegalArgumentException if source is null
+    */
+   public TextEvent(Object source, int id)
+   {
+     super(source, id);
+   }
+ 
+   /**
+    * Returns a string identifying this event. This is "TEXT_VALUE_CHANGED".
+    *
+    * @return a string identifying this event
+    */
+   public String paramString()
+   {
+     return id == TEXT_VALUE_CHANGED ? "TEXT_VALUE_CHANGED" : "unknown type";
+   }
+ } // class TextEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/TextListener.java gcc-4.1.0/libjava/classpath/java/awt/event/TextListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/TextListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/TextListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* TextListener.java -- listen for text changes
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to be notified when text changes
+  * in a component.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see TextEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface TextListener extends EventListener
+ {
+   /**
+    * This method is called when the text being monitored changes.
+    *
+    * @param event the <code>TextEvent</code> indicating the change
+    */
+   void textValueChanged(TextEvent event);
+ } // interface TextListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/WindowAdapter.java gcc-4.1.0/libjava/classpath/java/awt/event/WindowAdapter.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/WindowAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/WindowAdapter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,156 ----
+ /* WindowAdapter.java -- convenience class for writing window listeners
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ /**
+  * This class implements <code>WindowListener</code>,
+  * <code>WindowStateListener</code>, and <code>WindowFocusListener</code>, and
+  * implements all methods with empty bodies.  This allows a listener
+  * interested in listening to only a subset of any <code>WindowEvent</code>
+  * actions to extend this class and override only the desired methods.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see ComponentEvent
+  * @see ComponentListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class WindowAdapter
+   implements WindowListener, WindowStateListener, WindowFocusListener
+ {
+   /**
+    * Do nothing default constructor for subclasses.
+    */
+   public WindowAdapter()
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void windowOpened(WindowEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void windowClosing(WindowEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void windowClosed(WindowEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void windowIconified(WindowEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void windowDeiconified(WindowEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void windowActivated(WindowEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    */
+   public void windowDeactivated(WindowEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    * @since 1.4
+    */
+   public void windowStateChanged(WindowEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    * @since 1.4
+    */
+   public void windowGainedFocus(WindowEvent event)
+   {
+   }
+ 
+   /**
+    * Implements this method from the interface with an empty method body.
+    *
+    * @param event the event, ignored in this implementation
+    * @since 1.4
+    */
+   public void windowLostFocus(WindowEvent event)
+   {
+   }
+ } // class WindowAdapter
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/WindowEvent.java gcc-4.1.0/libjava/classpath/java/awt/event/WindowEvent.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/WindowEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/WindowEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,312 ----
+ /* WindowEvent.java -- window change event
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.Frame;
+ import java.awt.Window;
+ 
+ /**
+  * This event is generated when there is a change in a window. This includes
+  * creation, closing, iconification, activation, and focus changes. There
+  * are three listeners, for three types of events: WindowListeners deal with
+  * the lifecycle of a window, WindowStateListeners deal with window state
+  * like maximization, and WindowFocusListeners deal with focus switching to
+  * or from a window. 
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see WindowAdapter
+  * @see WindowListener
+  * @see WindowFocusListener
+  * @see WindowStateListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class WindowEvent extends ComponentEvent
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -1567959133147912127L;
+ 
+   /** This is the first id in the range of event ids used by this class. */
+   public static final int WINDOW_FIRST = 200;
+ 
+   /** This is the id for a window that is opened. */
+   public static final int WINDOW_OPENED = 200;
+ 
+   /** This is the id for a window that is about to close. */
+   public static final int WINDOW_CLOSING = 201;
+ 
+   /** This is the id for a window that finished closing. */
+   public static final int WINDOW_CLOSED = 202;
+ 
+   /** This is the id for a window that is iconified. */
+   public static final int WINDOW_ICONIFIED = 203;
+ 
+   /** This is the id for a window that is de-iconified. */
+   public static final int WINDOW_DEICONIFIED = 204;
+ 
+   /** This is the id for a window that is activated. */
+   public static final int WINDOW_ACTIVATED = 205;
+ 
+   /** This is the id for a window that is de-activated. */
+   public static final int WINDOW_DEACTIVATED = 206;
+ 
+   /**
+    * This is the id for a window becoming the focused window.
+    *
+    * @since 1.4
+    */
+   public static final int WINDOW_GAINED_FOCUS = 207;
+ 
+   /**
+    * This is the id for a window losing all focus.
+    *
+    * @since 1.4
+    */
+   public static final int WINDOW_LOST_FOCUS = 208;
+ 
+   /**
+    * This is the id for a window state change, such as maximization.
+    *
+    * @since 1.4
+    */
+   public static final int WINDOW_STATE_CHANGED = 209;
+ 
+   /** This is the last id in the range of event ids used by this class. */
+   public static final int WINDOW_LAST = 209;
+ 
+   /**
+    * The other Window involved in a focus or activation change. For
+    * WINDOW_ACTIVATED and WINDOW_GAINED_FOCUS events, this is the window that
+    * lost focus; for WINDOW_DEACTIVATED and WINDOW_LOST_FOCUS, this is the
+    * window that stole focus; and for other events (or when native
+    * implementation does not have the data available), this is null.
+    *
+    * @see #getOppositeWindow()
+    * @serial the opposite window, or null
+    * @since 1.4
+    */
+   private final Window opposite;
+ 
+   /**
+    * The former state of the window.
+    *
+    * @serial bitmask of the old window state
+    * @since 1.4
+    */
+   private final int oldState;
+ 
+   /**
+    * The present state of the window.
+    *
+    * @serial bitmask of the new window state
+    * @since 1.4
+    */
+   private final int newState;
+ 
+   /**
+    * Initializes a new instance of <code>WindowEvent</code> with the specified
+    * parameters. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the window that generated this event
+    * @param id the event id
+    * @param opposite the window that received the opposite event, or null
+    * @param oldState the previous state of this window
+    * @param newState the new state of this window
+    * @throws IllegalArgumentException if source is null
+    * @since 1.4
+    */
+   public WindowEvent(Window source, int id, Window opposite,
+                      int oldState, int newState)
+   {
+     super(source, id);
+     this.opposite = opposite;
+     this.oldState = oldState;
+     this.newState = newState;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>WindowEvent</code> with the specified
+    * parameters. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the window that generated this event
+    * @param id the event id
+    * @param opposite the window that received the opposite event, or null
+    * @throws IllegalArgumentException if source is null
+    * @since 1.4
+    */
+   public WindowEvent(Window source, int id, Window opposite)
+   {
+     this(source, id, opposite, 0, 0);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>WindowEvent</code> with the specified
+    * parameters. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the window that generated this event
+    * @param id the event id
+    * @param oldState the previous state of this window
+    * @param newState the new state of this window
+    * @throws IllegalArgumentException if source is null
+    * @since 1.4
+    */
+   public WindowEvent(Window source, int id, int oldState, int newState)
+   {
+     this(source, id, null, oldState, newState);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>WindowEvent</code> with the specified
+    * parameters. Note that an invalid id leads to unspecified results.
+    *
+    * @param source the window that generated this event
+    * @param id the event id
+    * @throws IllegalArgumentException if source is null
+    */
+   public WindowEvent(Window source, int id)
+   {
+     this(source, id, null, 0, 0);
+   }
+ 
+   /**
+    * Returns the event source as a <code>Window</code>. If the source has
+    * subsequently been modified to a non-Window, this returns null.
+   *
+   * @return the event source as a <code>Window</code>
+   */
+   public Window getWindow()
+   {
+     return source instanceof Window ? (Window) source : null;
+   }
+ 
+   /**
+    * Returns the opposite window if this window was involved in an activation
+    * or focus change. For WINDOW_ACTIVATED and WINDOW_GAINED_FOCUS events,
+    * this is the window that lost focus; for WINDOW_DEACTIVATED and
+    * WINDOW_LOST_FOCUS, this is the window that stole focus; and for other
+    * events (or when native implementation does not have the data available),
+    * this is null.
+    *
+    * @return the opposite window, or null
+    * @since 1.4
+    */
+   public Window getOppositeWindow()
+   {
+     return opposite;
+   }
+ 
+   /**
+    * Returns the state of this window before the event. This is the bitwise
+    * or of fields in Frame: NORMAL, ICONIFIED, MAXIMIZED_HORIZ, MAXIMIZED_VERT,
+    * and MAXIMIZED_BOTH.
+    *
+    * @return the former state
+    * @see Frame#getExtendedState()
+    * @since 1.4
+    */
+   public int getOldState()
+   {
+     return oldState;
+   }
+ 
+   /**
+    * Returns the state of this window after the event. This is the bitwise
+    * or of fields in Frame: NORMAL, ICONIFIED, MAXIMIZED_HORIZ, MAXIMIZED_VERT,
+    * and MAXIMIZED_BOTH.
+    *
+    * @return the updated state
+    * @see Frame#getExtendedState()
+    * @since 1.4
+    */
+   public int getNewState()
+   {
+     return newState;
+   }
+ 
+   /**
+    * Returns a string that identifies this event. This is formatted as the
+    * field name of the id, followed by the opposite window, old state, and
+    * new state.
+    *
+    * @return a string that identifies this event
+    */
+   public String paramString()
+   {
+     StringBuffer s = new StringBuffer();
+     switch (id)
+       {
+       case WINDOW_OPENED:
+         s.append("WINDOW_OPENED,opposite=");
+         break;
+       case WINDOW_CLOSING:
+         s.append("WINDOW_CLOSING,opposite=");
+         break;
+       case WINDOW_CLOSED:
+         s.append("WINDOW_CLOSED,opposite=");
+         break;
+       case WINDOW_ICONIFIED:
+         s.append("WINDOW_ICONIFIED,opposite=");
+         break;
+       case WINDOW_DEICONIFIED:
+         s.append("WINDOW_DEICONIFIED,opposite=");
+         break;
+       case WINDOW_ACTIVATED:
+         s.append("WINDOW_ACTIVATED,opposite=");
+         break;
+       case WINDOW_DEACTIVATED:
+         s.append("WINDOW_DEACTIVATED,opposite=");
+         break;
+       case WINDOW_GAINED_FOCUS:
+         s.append("WINDOW_GAINED_FOCUS,opposite=");
+         break;
+       case WINDOW_LOST_FOCUS:
+         s.append("WINDOW_LOST_FOCUS,opposite=");
+         break;
+       case WINDOW_STATE_CHANGED:
+         s.append("WINDOW_STATE_CHANGED,opposite=");
+         break;
+       default:
+         s.append("unknown type,opposite=");
+       }
+     return s.append(opposite).append(",oldState=").append(oldState)
+       .append(",newState=").append(newState).toString();
+   }
+ } // class WindowEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/WindowFocusListener.java gcc-4.1.0/libjava/classpath/java/awt/event/WindowFocusListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/WindowFocusListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/WindowFocusListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /* WindowFocusListener.java -- listens for window focus events
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to monitor events for window
+  * focus changes. To watch a subset of these events, use a WindowAdapter.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see WindowAdapter
+  * @see WindowEvent
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface WindowFocusListener extends EventListener
+ {
+   /**
+    * This method is called when a window gains focus.
+    *
+    * @param event the <code>WindowEvent</code> indicating the focus change
+    */
+   void windowGainedFocus(WindowEvent event);
+ 
+   /**
+    * This method is called when a window loses focus.
+    *
+    * @param event the <code>WindowEvent</code> indicating the focus change
+    */
+   void windowLostFocus(WindowEvent event);
+ } // interface WindowFocusListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/WindowListener.java gcc-4.1.0/libjava/classpath/java/awt/event/WindowListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/WindowListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/WindowListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* WindowListener.java -- listens for window events
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.awt.Frame;
+ import java.awt.Image;
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to monitor events for window
+  * changes. To watch a subset of these events, use a WindowAdapter.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see WindowAdapter
+  * @see WindowEvent
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface WindowListener extends EventListener
+ {
+   /**
+    * This method is called when the window is made visible.
+    *
+    * @param event the <code>WindowEvent</code> indicating the change
+    */
+   void windowOpened(WindowEvent event);
+ 
+   /**
+    * This method is called when the user calls the system menu close
+    * function, giving the program a chance to cancel the close.
+    *
+    * @param event the <code>WindowEvent</code> indicating the close attempt
+    */
+   void windowClosing(WindowEvent event);
+ 
+   /**
+    * This method is called when the window is closed.
+    *
+    * @param event the <code>WindowEvent</code> indicating the dispose
+    */
+   void windowClosed(WindowEvent event);
+ 
+   /**
+    * This method is called when the window is iconified.
+    *
+    * @param event the <code>WindowEvent</code> indicating the iconification
+    * @see Frame#setIconImage(Image)
+    */
+   void windowIconified(WindowEvent event);
+ 
+   /**
+    * This method is called when the window is deiconified.
+    *
+    * @param event the <code>WindowEvent</code> indicating the deiconification
+    */
+   void windowDeiconified(WindowEvent event);
+ 
+   /**
+    * This method is called when a window is activated. Only Frames and Dialogs
+    * can be active, and the active window always contains the component with
+    * focus.
+    *
+    * @param event the <code>WindowEvent</code> indicating the activation
+    */
+   void windowActivated(WindowEvent event);
+ 
+   /**
+    * This method is called when the window is deactivated.
+    *
+    * @param event the <code>WindowEvent</code> indicating the deactivation
+    */
+   void windowDeactivated(WindowEvent event);
+ } // interface WindowListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/WindowStateListener.java gcc-4.1.0/libjava/classpath/java/awt/event/WindowStateListener.java
*** gcc-4.0.2/libjava/classpath/java/awt/event/WindowStateListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/WindowStateListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* WindowStateListener.java -- listens for window state changes
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This interface is for classes that wish to monitor events for window
+  * state changes.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see WindowAdapter
+  * @see WindowEvent
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface WindowStateListener extends EventListener
+ {
+   /**
+    * This method is called when the window state is changed, because of
+    * iconification or maximization.
+    *
+    * @param event the <code>WindowEvent</code> indicating the change
+    */
+   void windowStateChanged(WindowEvent event);
+ } // interface WindowStateListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/event/package.html gcc-4.1.0/libjava/classpath/java/awt/event/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/event/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/event/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.event package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.event</title></head>
+ 
+ <body>
+ <p>Listeners and adapters for different kinds of AWT events.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/FontRenderContext.java gcc-4.1.0/libjava/classpath/java/awt/font/FontRenderContext.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/FontRenderContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/FontRenderContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,126 ----
+ /* FontRenderContext.java
+    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.awt.geom.AffineTransform;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public class FontRenderContext
+ {
+   private AffineTransform affineTransform;
+   private boolean isAntiAliased;
+   private boolean usesFractionalMetrics;
+  
+   /**
+    * Construct a new <code>FontRenderContext</code>.
+    */
+   protected FontRenderContext()
+   {
+     // Do nothing here.
+   }
+  
+   /**
+    * Construct a new <code>FontRenderContext</code>.
+    */
+   public FontRenderContext (AffineTransform tx, boolean isAntiAliased,
+                             boolean usesFractionalMetrics)
+   {
+     if (tx != null
+         && !tx.isIdentity ())
+       {
+         this.affineTransform = new AffineTransform (tx);
+       }
+     
+     this.isAntiAliased = isAntiAliased;
+     this.usesFractionalMetrics = usesFractionalMetrics;
+   }
+ 
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof FontRenderContext))
+       return false;
+ 
+     return equals ((FontRenderContext) obj);
+   }
+ 
+   public boolean equals (FontRenderContext rhs)
+   {
+     return (affineTransform.equals (rhs.getTransform ())
+             && isAntiAliased == rhs.isAntiAliased ()
+             && usesFractionalMetrics == rhs.usesFractionalMetrics ());
+   }
+ 
+ 
+   /**
+    * Retrieves the affine transform for scaling typographical points
+    * to raster pixels.
+    *
+    * @return a clone of the transform object.
+    */
+   public AffineTransform getTransform ()
+   {
+     if (affineTransform == null)
+       return new AffineTransform ();
+     else
+       return new AffineTransform (affineTransform);
+   }
+ 
+ 
+   /**
+    * Returns the hash code of the font render context.
+    */
+   public int hashCode ()
+   {
+     // FIXME: check what SUN does here.
+     return affineTransform == null ? 0 : affineTransform.hashCode ();
+   }
+ 
+   public boolean isAntiAliased ()
+   {
+     return isAntiAliased;
+   }
+ 
+   public boolean usesFractionalMetrics ()
+   {
+     return usesFractionalMetrics;
+   }
+ }
+  
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/GlyphJustificationInfo.java gcc-4.1.0/libjava/classpath/java/awt/font/GlyphJustificationInfo.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/GlyphJustificationInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/GlyphJustificationInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* GlyphJustificationInfo.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class GlyphJustificationInfo
+ {
+   public static final int PRIORITY_KASHIDA = 0;
+   public static final int PRIORITY_WHITESPACE = 1;
+   public static final int PRIORITY_INTERCHAR = 2;
+   public static final int PRIORITY_NONE = 3;
+   
+   public final float weight;
+   public final int growPriority;
+   public final boolean growAbsorb;
+   public final float growLeftLimit;
+   public final float growRightLimit;
+   public final int shrinkPriority;
+   public final boolean shrinkAbsorb;
+   public final float shrinkLeftLimit;
+   public final float shrinkRightLimit;
+ 	
+   public GlyphJustificationInfo (float weight, boolean growAbsorb,
+                                  int growPriority, float growLeftLimit,
+                                  float growRightLimit, boolean shrinkAbsorb,
+                                  int shrinkPriority, float shrinkLeftLimit,
+                                  float shrinkRightLimit)
+   {
+     this.weight = weight;
+     this.growAbsorb = growAbsorb;
+     this.growPriority = growPriority;
+     this.growLeftLimit = growLeftLimit;
+     this.growRightLimit = growRightLimit;
+     this.shrinkAbsorb = shrinkAbsorb;
+     this.shrinkPriority = shrinkPriority;
+     this.shrinkLeftLimit = shrinkLeftLimit;
+     this.shrinkRightLimit = shrinkRightLimit;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/GlyphMetrics.java gcc-4.1.0/libjava/classpath/java/awt/font/GlyphMetrics.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/GlyphMetrics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/GlyphMetrics.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,134 ----
+ /* GlyphMetrics.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class GlyphMetrics
+ {
+   public static final byte COMBINING = 2;
+   public static final byte COMPONENT = 3;
+   public static final byte LIGATURE = 1;
+   public static final byte STANDARD = 0;
+   public static final byte WHITESPACE = 4;
+  
+   private boolean horizontal;
+   private float advanceX;
+   private float advanceY;
+   private Rectangle2D bounds;
+   private byte glyphType;
+   
+   public GlyphMetrics (boolean horizontal, float advanceX, float advanceY,
+                        Rectangle2D bounds, byte glyphType)
+   {
+     this.horizontal = horizontal;
+     this.advanceX = advanceX;
+     this.advanceY = advanceY;
+     this.bounds = bounds;
+     this.glyphType = glyphType;
+   }
+   
+   public GlyphMetrics (float advance, Rectangle2D bounds, byte glyphType)
+   {
+     this (true, advance, advance, bounds, glyphType);
+   }
+ 
+   public float getAdvance ()
+   {
+     return horizontal ? advanceX : advanceY;
+   }
+ 
+   public float getAdvanceX ()
+   {
+     return advanceX;
+   }
+ 
+   public float getAdvanceY ()
+   {
+     return advanceY;
+   }
+ 
+   public Rectangle2D getBounds2D ()
+   {
+     return bounds;
+   }
+ 
+   public float getLSB ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public float getRSB ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public int getType ()
+   {
+     return glyphType;
+   }
+ 
+   public boolean isCombining ()
+   {
+     return (glyphType == COMBINING);
+   }
+ 
+   public boolean isComponent ()
+   {
+     return (glyphType == COMPONENT);
+   }
+ 
+   public boolean isLigature()
+   {
+     return (glyphType == LIGATURE);
+   }
+ 
+   public boolean isStandard()
+   {
+     return (glyphType == STANDARD);
+   }
+ 
+   public boolean isWhitespace()
+   {
+     return (glyphType == WHITESPACE);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/GlyphVector.java gcc-4.1.0/libjava/classpath/java/awt/font/GlyphVector.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/GlyphVector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/GlyphVector.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,145 ----
+ /* GlyphVector.java
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.awt.Font;
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public abstract class GlyphVector implements Cloneable
+ {
+   public static final int FLAG_COMPLEX_GLYPHS = 8;
+   public static final int FLAG_HAS_POSITION_ADJUSTMENTS = 2;
+   public static final int FLAG_HAS_TRANSFORMS = 1;
+   public static final int FLAG_MASK = 15;
+   public static final int FLAG_RUN_RTL = 4;
+ 
+   /**
+    * Constructs a <code>GlyphVector</code> object.
+    */
+   public GlyphVector ()
+   {
+   }
+ 
+   public abstract boolean equals (GlyphVector set);
+ 
+   public abstract Font getFont ();
+ 
+   public abstract FontRenderContext getFontRenderContext ();
+     
+   public int getGlyphCharIndex (int glyphIndex)
+   {
+     throw new Error ("not implemented");
+   }
+     
+   public int[] getGlyphCharIndices (int beginGlyphIndex, int numEntries,
+                                     int[] codeReturn)
+   {
+     throw new Error ("not implemented");
+   }
+     
+   public abstract int getGlyphCode (int glyphIndex);
+ 
+   public abstract int[] getGlyphCodes (int beginGlyphIndex, int numEntries,
+                                        int[] codeReturn);
+ 
+   public abstract GlyphJustificationInfo getGlyphJustificationInfo
+     (int glyphIndex);
+ 
+   public abstract Shape getGlyphLogicalBounds (int glyphIndex);
+ 
+   public abstract GlyphMetrics getGlyphMetrics (int glyphIndex);
+ 
+   public abstract Shape getGlyphOutline (int glyphIndex);
+ 
+   public Shape getGlyphOutline (int glyphIndex, float x, float y)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public Rectangle getGlyphPixelBounds (int index, FontRenderContext renderFRC,
+                                         float x, float y)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public abstract Point2D getGlyphPosition (int glyphIndex);
+ 
+   public abstract float[] getGlyphPositions (int beginGlyphIndex,
+                                              int numEntries,
+                                              float[] positionReturn);
+ 
+   public abstract AffineTransform getGlyphTransform (int glyphIndex);
+ 
+   public abstract Shape getGlyphVisualBounds (int glyphIndex);
+ 
+   public int getLayoutFlags ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public abstract Rectangle2D getLogicalBounds ();
+ 
+   public abstract int getNumGlyphs ();
+   
+   public abstract Shape getOutline ();
+ 
+   public abstract Shape getOutline (float x, float y);
+ 
+   public Rectangle getPixelBounds (FontRenderContext renderFRC,
+                                    float x, float y)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public abstract Rectangle2D getVisualBounds ();
+ 
+   public abstract void performDefaultLayout ();
+ 
+   public abstract void setGlyphPosition (int glyphIndex, Point2D newPos);
+ 
+   public abstract void setGlyphTransform (int glyphIndex,
+                                           AffineTransform newTX);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/GraphicAttribute.java gcc-4.1.0/libjava/classpath/java/awt/font/GraphicAttribute.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/GraphicAttribute.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/GraphicAttribute.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,84 ----
+ /* GraphicAttribute.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.awt.Graphics2D;
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public abstract class GraphicAttribute
+ {
+   public static final int BOTTOM_ALIGNMENT = -2;
+   public static final int CENTER_BASELINE = 1;
+   public static final int HANGING_BASELINE = 2;
+   public static final int ROMAN_BASELINE = 0;
+   public static final int TOP_ALIGNMENT = -1;
+ 
+   private int alignment;
+   
+   protected GraphicAttribute (int alignment)
+   {
+     this.alignment = alignment;
+   }
+ 
+   public abstract void draw (Graphics2D graphics, float x, float y);
+ 
+   public abstract float getAdvance ();
+ 
+   public final int getAlignment ()
+   {
+     return alignment;
+   }
+ 
+   public abstract float getAscent ();
+ 
+   public Rectangle2D getBounds ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public abstract float getDescent ();
+ 
+   public GlyphJustificationInfo getJustificationInfo ()
+   {
+     throw new Error ("not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/ImageGraphicAttribute.java gcc-4.1.0/libjava/classpath/java/awt/font/ImageGraphicAttribute.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/ImageGraphicAttribute.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/ImageGraphicAttribute.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* ImageGraphicAttribute.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.awt.Graphics2D;
+ import java.awt.Image;
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class ImageGraphicAttribute extends GraphicAttribute
+ {
+   private Image image;
+   
+   public ImageGraphicAttribute (Image image, int alignment)
+   {
+     super (alignment);
+     this.image = image;
+   }
+ 
+   public ImageGraphicAttribute (Image image, int alignment, float originX,
+                                 float originY)
+   {
+     super (alignment);
+     this.image = image;
+     
+     throw new Error ("not implemented");
+   }
+ 
+   public void draw (Graphics2D graphics, float x, float y)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof ImageGraphicAttribute))
+       return false;
+ 
+     return equals ((ImageGraphicAttribute) obj);
+   }
+ 
+   public boolean equals (ImageGraphicAttribute rhs)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public float getAdvance ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public float getAscent ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public Rectangle2D getBounds () 
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public float getDescent ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public int hashCode ()
+   {
+     throw new Error ("not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/LineBreakMeasurer.java gcc-4.1.0/libjava/classpath/java/awt/font/LineBreakMeasurer.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/LineBreakMeasurer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/LineBreakMeasurer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* LineBreakMeasurer.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.text.AttributedCharacterIterator;
+ import java.text.BreakIterator;
+ 
+ public final class LineBreakMeasurer
+ {
+   private AttributedCharacterIterator ci;
+   private FontRenderContext frc;
+   private BreakIterator bi;
+ 
+   /**
+    * Constructs a <code>LineBreakMeasurer</code> object.
+    */
+   public LineBreakMeasurer (AttributedCharacterIterator text,
+                             FontRenderContext frc)
+   {
+     this (text, null, frc);
+   }
+ 
+   /**
+    * Constructs a <code>LineBreakMeasurer</code> object.
+    */
+   public LineBreakMeasurer (AttributedCharacterIterator text,
+                             BreakIterator breakIter, FontRenderContext frc) 
+   {
+     this.ci = text;
+     this.bi = breakIter;
+     this.frc = frc;
+   }
+ 
+   public void deleteChar (AttributedCharacterIterator newParagraph,
+                           int deletePos)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public int getPosition ()
+   {
+     return ci.getIndex ();
+   }
+ 
+   public void insertChar (AttributedCharacterIterator newParagraph,
+                           int insertPos)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public TextLayout nextLayout (float wrappingWidth)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public TextLayout nextLayout (float wrappingWidth, int offsetLimit,
+                                 boolean requireNextWord)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public int nextOffset (float wrappingWidth)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public int nextOffset (float wrappingWidth, int offsetLimit,
+                          boolean requireNextWord)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public void setPosition (int newPosition)
+   {
+     ci.setIndex (newPosition);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/LineMetrics.java gcc-4.1.0/libjava/classpath/java/awt/font/LineMetrics.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/LineMetrics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/LineMetrics.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* LineMetrics.java -- Information about about a line display characteristics
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public abstract class LineMetrics
+ {
+   public abstract float getAscent();
+   
+   public abstract int getBaselineIndex();
+   
+   public abstract float[] getBaselineOffsets();
+   
+   public abstract float getDescent();
+   
+   public abstract float getHeight();
+   
+   public abstract float getLeading();
+   
+   public abstract int getNumChars();
+   
+   public abstract float getStrikethroughOffset();
+   
+   public abstract float getStrikethroughThickness();
+   
+   public abstract float getUnderlineOffset();
+   
+   public abstract float getUnderlineThickness();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/MultipleMaster.java gcc-4.1.0/libjava/classpath/java/awt/font/MultipleMaster.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/MultipleMaster.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/MultipleMaster.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* MultipleMaster.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.awt.Font;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public interface MultipleMaster
+ {
+   Font deriveMMFont (float[] axes);
+   
+   Font deriveMMFont (float[] glyphWidths, float avgStemWidth,
+                      float typicalCapHeight, float typicalXHeight,
+                      float italicAngle);
+   
+   float[] getDesignAxisDefaults();
+   
+   String[] getDesignAxisNames();
+   
+   float[] getDesignAxisRanges();
+   
+   int getNumDesignAxes();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/NumericShaper.java gcc-4.1.0/libjava/classpath/java/awt/font/NumericShaper.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/NumericShaper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/NumericShaper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /* NumericShaper.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public final class NumericShaper implements Serializable
+ {
+   private static final long serialVersionUID = -8022764705923730308L;
+   
+   public static final int ALL_RANGES  = 524287;
+   public static final int ARABIC  = 2;
+   public static final int BENGALI  = 16;
+   public static final int DEVANAGARI  = 8;
+   public static final int EASTERN_ARABIC  = 4;
+   public static final int ETHIOPIC  = 65536;
+   public static final int EUROPEAN  = 1;
+   public static final int GUJARATI  = 64;
+   public static final int GURMUKHI  = 32;
+   public static final int KANNADA  = 1024;
+   public static final int KHMER  = 131072;
+   public static final int LAO  = 8192;
+   public static final int MALAYALAM  = 2048;
+   public static final int MONGOLIAN  = 262144;
+   public static final int MYANMAR  = 32768;
+   public static final int ORIYA  = 128;
+   public static final int TAMIL  = 256;
+   public static final int TELUGU  = 512;
+   public static final int THAI  = 4096;
+   public static final int TIBETAN  = 16384;
+ 
+   private int ranges;
+   private int context;
+   
+   private NumericShaper (int ranges, int context)
+   {
+     this.ranges = ranges;
+     this.context = context;
+   }
+ 
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof NumericShaper))
+       return false;
+ 
+     NumericShaper tmp = (NumericShaper) obj;
+     
+     return (ranges == tmp.ranges
+             && context == tmp.context);
+   }
+ 
+   public static NumericShaper getContextualShaper (int ranges)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public static NumericShaper getContextualShaper (int ranges,
+                                                    int defaultContext)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public int getRanges ()
+   {
+     return ranges;
+   }
+ 
+   public static NumericShaper getShaper (int singleRange)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public int hashCode ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public boolean isContextual ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public void shape (char[] text, int start, int count)
+   {
+     shape (text, start, count, context);
+   }
+ 
+   public void shape (char[] text, int start, int count, int context)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public String toString ()
+   {
+     throw new Error ("not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/OpenType.java gcc-4.1.0/libjava/classpath/java/awt/font/OpenType.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/OpenType.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/OpenType.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /* OpenType.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public interface OpenType
+ {
+   int TAG_ACNT = 1633906292;
+   int TAG_AVAR = 1635148146;
+   int TAG_BASE = 1111577413;
+   int TAG_BDAT = 1650745716;
+   int TAG_BLOC = 1651273571;
+   int TAG_BSLN = 1651731566;
+   int TAG_CFF = 1128678944;
+   int TAG_CMAP = 1668112752;
+   int TAG_CVAR = 1668702578;
+   int TAG_CVT = 1668707360;
+   int TAG_DSIG = 1146308935;
+   int TAG_EBDT = 1161970772;
+   int TAG_EBLC = 1161972803;
+   int TAG_EBSC = 1161974595;
+   int TAG_FDSC = 1717859171;
+   int TAG_FEAT = 1717920116;
+   int TAG_FMTX = 1718449272;
+   int TAG_FPGM = 1718642541;
+   int TAG_FVAR = 1719034226;
+   int TAG_GASP = 1734439792;
+   int TAG_GDEF = 1195656518;
+   int TAG_GLYF = 1735162214;
+   int TAG_GPOS = 1196445523;
+   int TAG_GSUB = 1196643650;
+   int TAG_GVAR = 1735811442;
+   int TAG_HDMX = 1751412088;
+   int TAG_HEAD = 1751474532;
+   int TAG_HHEA = 1751672161;
+   int TAG_HMTX = 1752003704;
+   int TAG_JSTF = 1246975046;
+   int TAG_JUST = 1786082164;
+   int TAG_KERN = 1801810542;
+   int TAG_LCAR = 1818452338;
+   int TAG_LOCA = 1819239265;
+   int TAG_LTSH = 1280594760;
+   int TAG_MAXP = 1835104368;
+   int TAG_MMFX = 1296909912;
+   int TAG_MMSD = 1296913220;
+   int TAG_MORT = 1836020340;
+   int TAG_NAME = 1851878757;
+   int TAG_OPBD = 1836020340;
+   int TAG_OS2 = 1330851634;
+   int TAG_PCLT = 1346587732;
+   int TAG_POST = 1886352244;
+   int TAG_PREP = 1886545264;
+   int TAG_PROP = 1886547824;
+   int TAG_TRAK = 1953653099;
+   int TAG_TYP1 = 1954115633;
+   int TAG_VDMX = 1447316824;
+   int TAG_VHEA = 1986553185;
+   int TAG_VMTX = 1986884728;
+   
+   byte[] getFontTable (int sfntTag);
+   
+   byte[] getFontTable (int sfntTag, int offset, int count);
+   
+   byte[] getFontTable (String strSfntTag);
+   
+   byte[] getFontTable (String strSfntTag, int offset, int count);
+   
+   int getFontTableSize (int sfntTag);
+   
+   int getFontTableSize (String strSfntTag);
+   
+   int getVersion ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/ShapeGraphicAttribute.java gcc-4.1.0/libjava/classpath/java/awt/font/ShapeGraphicAttribute.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/ShapeGraphicAttribute.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/ShapeGraphicAttribute.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,105 ----
+ /* ShapeGraphicAttribute.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.awt.Graphics2D;
+ import java.awt.Shape;
+ import java.awt.geom.Rectangle2D;
+ 
+ public final class ShapeGraphicAttribute extends GraphicAttribute
+ {
+   public static final boolean FILL = false;
+   public static final boolean STROKE = true;
+ 
+   private Shape shape;
+   private boolean stroke;
+   
+   public ShapeGraphicAttribute (Shape shape, int alignment, boolean stroke)
+   {
+     super (alignment);
+     this.shape = shape;
+     this.stroke = stroke;
+   }
+ 
+   public void draw (Graphics2D graphics, float x, float y)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof ShapeGraphicAttribute))
+       return false;
+ 
+     return equals ((ShapeGraphicAttribute) obj);
+   }
+ 
+   public boolean equals (ShapeGraphicAttribute rhs)
+   {
+     return (shape.equals (rhs.shape)
+             && getAlignment () == rhs.getAlignment ()
+             && stroke == rhs.stroke);
+   }
+ 
+   public float getAdvance ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public float getAscent ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public Rectangle2D getBounds ()
+   {
+     return shape.getBounds2D ();
+   }
+ 
+   public float getDescent ()
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public int hashCode ()
+   {
+     // FIXME: Check what SUN does here
+     return shape.hashCode ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/TextAttribute.java gcc-4.1.0/libjava/classpath/java/awt/font/TextAttribute.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/TextAttribute.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/TextAttribute.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,309 ----
+ /* TextAttribute.java --
+    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.io.InvalidObjectException;
+ import java.text.AttributedCharacterIterator;
+ 
+ /**
+  * Attributes (and associated values) that can be used to define an
+  * {@link java.text.AttributedString}.
+  */
+ public final class TextAttribute extends AttributedCharacterIterator.Attribute
+ {
+   private static final long serialVersionUID = 7744112784117861702L;
+   
+   /** A key for the background paint attribute. */
+   public static final TextAttribute BACKGROUND =
+     new TextAttribute("background");
+   
+   /** A key for the BIDI_EMBEDDING attribute. */
+   public static final TextAttribute BIDI_EMBEDDING =
+     new TextAttribute("bidi_embedding");
+   
+   /** A key for the CHAR_REPLACEMENT attribute. */
+   public static final TextAttribute CHAR_REPLACEMENT =
+     new TextAttribute("char_replacement");
+   
+   /** A key for the FAMILY attribute. */
+   public static final TextAttribute FAMILY = new TextAttribute("family");
+   
+   /** A key for the font attribute. */
+   public static final TextAttribute FONT = new TextAttribute("font");
+   
+   /** A key for the foreground paint attribute. */
+   public static final TextAttribute FOREGROUND = 
+     new TextAttribute("foreground");
+   
+   /** A key for the INPUT_METHOD_HIGHLIGHT attribute. */
+   public static final TextAttribute INPUT_METHOD_HIGHLIGHT =
+     new TextAttribute("input method highlight");
+   
+   /** A key for the INPUT_METHOD_UNDERLINE attribute. */
+   public static final TextAttribute INPUT_METHOD_UNDERLINE =
+     new TextAttribute("input method underline");
+   
+   /** A key for the text justification attribute. */
+   public static final TextAttribute JUSTIFICATION =
+     new TextAttribute("justification");
+   
+   /** 
+    * A value that can be used with the {@link #JUSTIFICATION} attribute to
+    * indicate full justification of the text. 
+    */
+   public static final Float JUSTIFICATION_FULL = new Float(1.0);
+   
+   /** 
+    * A value that can be used with the {@link #JUSTIFICATION} attribute to
+    * indicate no justification of the text. 
+    */
+   public static final Float JUSTIFICATION_NONE = new Float(0.0);
+   
+   /** A key for the NUMERIC_SHAPING attribute. */
+   public static final TextAttribute NUMERIC_SHAPING =
+     new TextAttribute("numeric_shaping");
+   
+   /** A key for the POSTURE attribute. */
+   public static final TextAttribute POSTURE = new TextAttribute("posture");
+   
+   /** A value that can be used with the {@link #POSTURE} attribute. */
+   public static final Float POSTURE_OBLIQUE = new Float(0.2);
+   
+   /** A value that can be used with the {@link #POSTURE} attribute. */
+   public static final Float POSTURE_REGULAR = new Float(0.0);
+   
+   /** A key for the RUN_DIRECTION attribute. */
+   public static final TextAttribute RUN_DIRECTION =
+     new TextAttribute("run_direction");
+   
+   /** A value that can be used with the {@link #RUN_DIRECTION} attribute. */
+   public static final Boolean RUN_DIRECTION_LTR = Boolean.FALSE;
+   
+   /** A value that can be used with the {@link #RUN_DIRECTION} attribute. */
+   public static final Boolean RUN_DIRECTION_RTL = Boolean.TRUE;
+   
+   /** A key for the text size attribute. */
+   public static final TextAttribute SIZE = new TextAttribute("size");
+   
+   /** A key for the STRIKETHROUGH attribute. */
+   public static final TextAttribute STRIKETHROUGH =
+     new TextAttribute("strikethrough");
+   
+   /** A value that can be used with the {@link #STRIKETHROUGH} attribute. */
+   public static final Boolean STRIKETHROUGH_ON = Boolean.TRUE;
+   
+   /** A key for the SUPERSCRIPT attribute. */
+   public static final TextAttribute SUPERSCRIPT =
+     new TextAttribute("superscript");
+   
+   /** A value that can be used with the {@link #SUPERSCRIPT} attribute. */
+   public static final Integer SUPERSCRIPT_SUB = new Integer(-1);
+   
+   /** A value that can be used with the {@link #SUPERSCRIPT} attribute. */
+   public static final Integer SUPERSCRIPT_SUPER = new Integer(1);
+   
+   /** A key for the SWAP_COLORS attribute. */
+   public static final TextAttribute SWAP_COLORS =
+     new TextAttribute("swap_colors");
+   
+   /** A value that can be used with the {@link #SWAP_COLORS} attribute. */
+   public static final Boolean SWAP_COLORS_ON = Boolean.TRUE;
+   
+   /** A key for the TRANFORM attribute. */
+   public static final TextAttribute TRANSFORM = new TextAttribute("transform");
+   
+   /** A key for the UNDERLINE attribute. */
+   public static final TextAttribute UNDERLINE = new TextAttribute("underline");
+   
+   /** A value that can be used with the {@link #UNDERLINE} attribute. */
+   public static final Integer UNDERLINE_LOW_DASHED = new Integer(5);
+   
+   /** A value that can be used with the {@link #UNDERLINE} attribute. */
+   public static final Integer UNDERLINE_LOW_DOTTED = new Integer(3);
+   
+   /** A value that can be used with the {@link #UNDERLINE} attribute. */
+   public static final Integer UNDERLINE_LOW_GRAY = new Integer(4);
+   
+   /** A value that can be used with the {@link #UNDERLINE} attribute. */
+   public static final Integer UNDERLINE_LOW_ONE_PIXEL = new Integer(1);
+   
+   /** A value that can be used with the {@link #UNDERLINE} attribute. */
+   public static final Integer UNDERLINE_LOW_TWO_PIXEL = new Integer(2);
+   
+   /** A value that can be used with the {@link #UNDERLINE} attribute. */
+   public static final Integer UNDERLINE_ON = new Integer(0);
+   
+   /** A key for the WEIGHT attribute. */
+   public static final TextAttribute WEIGHT = new TextAttribute("weight");
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_BOLD = new Float(2.0);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_DEMIBOLD = new Float(1.75);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_DEMILIGHT = new Float(0.875);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_EXTRA_LIGHT = new Float(0.5);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_EXTRABOLD = new Float(2.5);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_HEAVY = new Float(2.25);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_LIGHT = new Float(0.75);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_MEDIUM = new Float(1.5);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_REGULAR = new Float(1.0);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_SEMIBOLD = new Float(1.25);
+   
+   /** A value that can be used with the {@link #WEIGHT} attribute. */
+   public static final Float WEIGHT_ULTRABOLD = new Float(2.75);
+   
+   /** A key for the WIDTH attribute. */
+   public static final TextAttribute WIDTH = new TextAttribute("width");
+   
+   /** A value that can be used with the {@link #WIDTH} attribute. */
+   public static final Float WIDTH_CONDENSED = new Float(0.75);
+   
+   /** A value that can be used with the {@link #WIDTH} attribute. */
+   public static final Float WIDTH_EXTENDED = new Float(1.5);
+   
+   /** A value that can be used with the {@link #WIDTH} attribute. */
+   public static final Float WIDTH_REGULAR = new Float(1.0);
+   
+   /** A value that can be used with the {@link #WIDTH} attribute. */
+   public static final Float WIDTH_SEMI_CONDENSED = new Float(0.875);
+   
+   /** A value that can be used with the {@link #WIDTH} attribute. */
+   public static final Float WIDTH_SEMI_EXTENDED = new Float(1.25);
+           
+   /**
+    * Creates a new attribute.
+    * 
+    * @param name  the name.
+    */
+   protected TextAttribute(String name)
+   {
+     super(name);
+   }
+   
+   /**
+    * After deserialization, this method ensures that only one instance of
+    * each attribute is used.
+    * 
+    * @return The (single) attribute instance.
+    * 
+    * @throws InvalidObjectException if the attribute is not recognised.
+    */
+   protected Object readResolve()
+     throws InvalidObjectException
+   {
+     if (this.getName().equals("background"))
+       return BACKGROUND;
+ 
+     if (this.getName().equals("bidi_embedding"))
+       return BIDI_EMBEDDING;
+ 
+     if (this.getName().equals("char_replacement"))
+       return CHAR_REPLACEMENT;
+ 
+     if (this.getName().equals("family"))
+       return FAMILY;
+ 
+     if (this.getName().equals("font"))
+       return FONT;
+ 
+     if (this.getName().equals("foreground"))
+       return FOREGROUND;
+ 
+     if (this.getName().equals("input method highlight"))
+       return INPUT_METHOD_HIGHLIGHT;
+ 
+     if (this.getName().equals("input method underline"))
+       return INPUT_METHOD_UNDERLINE;
+ 
+     if (this.getName().equals("justification"))
+       return JUSTIFICATION;
+ 
+     if (this.getName().equals("numeric_shaping"))
+       return NUMERIC_SHAPING;
+ 
+     if (this.getName().equals("posture"))
+       return POSTURE;
+ 
+     if (this.getName().equals("run_direction"))
+       return RUN_DIRECTION;
+ 
+     if (this.getName().equals("size"))
+       return SIZE;
+ 
+     if (this.getName().equals("strikethrough"))
+       return STRIKETHROUGH;
+ 
+     if (this.getName().equals("superscript"))
+       return SUPERSCRIPT;
+ 
+     if (this.getName().equals("swap_colors"))
+       return SWAP_COLORS;
+ 
+     if (this.getName().equals("transform"))
+       return TRANSFORM;
+ 
+     if (this.getName().equals("underline"))
+       return UNDERLINE;
+ 
+     if (this.getName().equals("weight"))
+       return WEIGHT;
+ 
+     if (this.getName().equals("width"))
+       return WIDTH;
+ 
+     throw new InvalidObjectException("Can't resolve Attribute: " + getName());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/TextHitInfo.java gcc-4.1.0/libjava/classpath/java/awt/font/TextHitInfo.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/TextHitInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/TextHitInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,125 ----
+ /* TextHitInfo.java -- 
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.font;
+ 
+ /**
+  * @author John Leuner (jewel@debian.org)
+  */
+ public final class TextHitInfo
+ {
+   private int charIndex;
+   private boolean leadingEdge;
+   
+   TextHitInfo (int charIndex, boolean leadingEdge)
+   {
+     this.charIndex = charIndex;
+     this.leadingEdge = leadingEdge;
+   }
+   
+   public int getCharIndex()
+   {
+     return charIndex;
+   }
+ 
+   public boolean isLeadingEdge()
+   {
+     return leadingEdge;
+   }
+ 
+   public int getInsertionIndex()
+   {
+     return (leadingEdge ? charIndex : charIndex + 1);
+   }
+ 
+   public int hashCode()
+   {
+     return charIndex;
+   }
+ 
+   public boolean equals(Object obj)
+   {
+     if(obj instanceof TextHitInfo)
+       return this.equals((TextHitInfo) obj);
+     
+     return false;
+   }
+ 
+   public boolean equals(TextHitInfo hitInfo)
+   {
+     return (charIndex == hitInfo.getCharIndex ())
+             && (leadingEdge == hitInfo.isLeadingEdge ());
+   }
+ 
+   public static TextHitInfo leading(int charIndex)
+   {
+     return new TextHitInfo (charIndex, true);
+   }
+ 
+   public static TextHitInfo trailing(int charIndex)
+   {
+     return new TextHitInfo (charIndex, false);
+   }
+ 
+   public static TextHitInfo beforeOffset(int offset)
+   {
+     return new TextHitInfo (offset, false);
+   }
+ 
+   public static TextHitInfo afterOffset(int offset)
+   {
+     return new TextHitInfo (offset, true);
+   }
+ 
+   public TextHitInfo getOtherHit()
+   {
+     return (leadingEdge ? trailing (charIndex - 1) : leading (charIndex + 1));
+   }
+ 
+   public TextHitInfo getOffsetHit(int offset)
+   {
+     return new TextHitInfo (charIndex + offset, leadingEdge);
+   }
+ 
+   public String toString()
+   {
+     return "TextHitInfo["
+             + charIndex
+             + (leadingEdge ? "L" : "T" )
+             + "]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/TextLayout.java gcc-4.1.0/libjava/classpath/java/awt/font/TextLayout.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/TextLayout.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/TextLayout.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,332 ----
+ /* TextLayout.java --
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import gnu.java.awt.ClasspathToolkit;
+ import gnu.java.awt.peer.ClasspathTextLayoutPeer;
+ 
+ import java.awt.Font;
+ import java.awt.Graphics2D;
+ import java.awt.Shape;
+ import java.awt.Toolkit;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.Rectangle2D;
+ import java.text.AttributedCharacterIterator;
+ import java.text.AttributedString;
+ import java.util.Map;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public final class TextLayout implements Cloneable
+ {
+   public static final CaretPolicy DEFAULT_CARET_POLICY = new CaretPolicy ();
+   ClasspathTextLayoutPeer peer;
+ 
+   public static class CaretPolicy
+   {
+     public CaretPolicy ()
+     {
+       // Do nothing here.
+     }
+ 
+     public TextHitInfo getStrongCaret (TextHitInfo hit1, TextHitInfo hit2,
+                                        TextLayout layout)
+     {
+       return layout.peer.getStrongCaret(hit1, hit2);
+     }
+   }
+ 
+   public TextLayout (AttributedCharacterIterator text, FontRenderContext frc)
+   {    
+     AttributedString as = new AttributedString (text);
+     ClasspathToolkit tk = (ClasspathToolkit)(Toolkit.getDefaultToolkit ());
+     peer = tk.getClasspathTextLayoutPeer(as, frc);
+   }
+ 
+   public TextLayout (String string, Font font, FontRenderContext frc) 
+   {
+     AttributedString as = new AttributedString (string);
+     as.addAttribute (TextAttribute.FONT, font);
+     ClasspathToolkit tk = (ClasspathToolkit)(Toolkit.getDefaultToolkit ());
+     peer = tk.getClasspathTextLayoutPeer(as, frc);
+   }
+ 
+   public TextLayout (String string, Map attributes, FontRenderContext frc)  
+   {
+     AttributedString as = new AttributedString (string, attributes);
+     ClasspathToolkit tk = (ClasspathToolkit)(Toolkit.getDefaultToolkit ());
+     peer = tk.getClasspathTextLayoutPeer(as, frc);
+   }
+ 
+   protected Object clone ()
+   {
+     try
+       {
+         TextLayout tl = (TextLayout) super.clone ();
+         tl.peer = (ClasspathTextLayoutPeer) this.peer.clone();
+         return tl;
+       }
+     catch (CloneNotSupportedException e)
+       {
+         // This should never occur
+         throw new InternalError ();
+       }
+   }
+ 
+ 
+   public void draw (Graphics2D g2, float x, float y) 
+   {
+     peer.draw(g2, x, y);
+   }
+ 
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof TextLayout))
+       return false;
+ 
+     return equals ((TextLayout) obj);
+   }
+ 
+   public boolean equals (TextLayout tl)
+   {
+     return this.peer.equals(tl.peer);
+   }
+ 
+   public float getAdvance ()
+   {
+     return peer.getAdvance();
+   }
+ 
+   public float getAscent ()
+   {
+     return peer.getAscent();
+   }
+ 
+   public byte getBaseline ()
+   {
+     return peer.getBaseline();
+   }
+ 
+   public float[] getBaselineOffsets ()
+   {
+     return peer.getBaselineOffsets();
+   }
+ 
+   public Shape getBlackBoxBounds (int firstEndpoint, int secondEndpoint)
+   {
+     return peer.getBlackBoxBounds(firstEndpoint, secondEndpoint);
+   }
+ 
+   public Rectangle2D getBounds()
+   {
+     return peer.getBounds();
+   }
+ 
+   public float[] getCaretInfo (TextHitInfo hit)
+   {
+     return getCaretInfo(hit, getBounds());
+   }
+ 
+   public float[] getCaretInfo (TextHitInfo hit, Rectangle2D bounds)
+   {
+     return peer.getCaretInfo(hit, bounds);
+   }
+ 
+   public Shape getCaretShape (TextHitInfo hit)
+   {
+     return getCaretShape(hit, getBounds());
+   }
+ 
+   public Shape getCaretShape (TextHitInfo hit, Rectangle2D bounds)
+   {
+     return peer.getCaretShape(hit, bounds);
+   }
+ 
+   public Shape[] getCaretShapes (int offset)
+   {
+     return getCaretShapes(offset, getBounds());
+   }
+ 
+   public Shape[] getCaretShapes (int offset, Rectangle2D bounds)
+   {
+     return getCaretShapes(offset, getBounds(), DEFAULT_CARET_POLICY);
+   }
+ 
+   public Shape[] getCaretShapes (int offset, Rectangle2D bounds,
+                                  TextLayout.CaretPolicy policy)
+   {
+     return peer.getCaretShapes(offset, bounds, policy);
+   }
+ 
+   public int getCharacterCount ()
+   {
+     return peer.getCharacterCount();
+   }
+ 
+   public byte getCharacterLevel (int index)
+   {
+     return peer.getCharacterLevel(index);
+   }
+ 
+   public float getDescent ()
+   {
+     return peer.getDescent();
+   }
+ 
+   public TextLayout getJustifiedLayout (float justificationWidth)
+   {
+     return peer.getJustifiedLayout(justificationWidth);
+   }
+ 
+   public float getLeading ()
+   {
+     return peer.getLeading();
+   }
+ 
+   public Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint)
+   {
+     return getLogicalHighlightShape (firstEndpoint, secondEndpoint, getBounds());
+   }
+ 
+   public Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint,
+                                          Rectangle2D bounds)
+   {
+     return peer.getLogicalHighlightShape(firstEndpoint, secondEndpoint, bounds);
+   }
+ 
+   public int[] getLogicalRangesForVisualSelection (TextHitInfo firstEndpoint,
+                                                    TextHitInfo secondEndpoint)
+   {
+     return peer.getLogicalRangesForVisualSelection(firstEndpoint, secondEndpoint);
+   }
+ 
+   public TextHitInfo getNextLeftHit (int offset)
+   {
+     return getNextLeftHit(offset, DEFAULT_CARET_POLICY);
+   }
+ 
+   public TextHitInfo getNextLeftHit (int offset, TextLayout.CaretPolicy policy)
+   {
+     return peer.getNextLeftHit(offset, policy);
+   }
+ 
+   public TextHitInfo getNextLeftHit (TextHitInfo hit)
+   {
+     return getNextLeftHit(hit.getCharIndex());
+   }
+ 
+   public TextHitInfo getNextRightHit (int offset)
+   {
+     return getNextRightHit(offset, DEFAULT_CARET_POLICY);
+   }
+ 
+   public TextHitInfo getNextRightHit (int offset, TextLayout.CaretPolicy policy)
+   {
+     return peer.getNextRightHit(offset, policy);
+   }
+ 
+   public TextHitInfo getNextRightHit (TextHitInfo hit)
+   {
+     return getNextRightHit(hit.getCharIndex());
+   }
+ 
+   public Shape getOutline (AffineTransform tx)
+   {
+     return peer.getOutline(tx);
+   }
+ 
+   public float getVisibleAdvance ()
+   {
+     return peer.getVisibleAdvance();
+   }
+ 
+   public Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
+                                         TextHitInfo secondEndpoint)
+   {
+     return getVisualHighlightShape(firstEndpoint, secondEndpoint, getBounds());
+   }
+ 
+   public Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
+                                         TextHitInfo secondEndpoint,
+                                         Rectangle2D bounds)
+   {
+     return peer.getVisualHighlightShape(firstEndpoint, secondEndpoint, bounds);
+   }
+ 
+   public TextHitInfo getVisualOtherHit (TextHitInfo hit)
+   {
+     return peer.getVisualOtherHit(hit);
+   }
+ 
+   protected void handleJustify (float justificationWidth)
+   {
+     peer.handleJustify(justificationWidth);
+   }
+ 
+   public int hashCode ()
+   {
+     return peer.hashCode();
+   }
+ 
+   public TextHitInfo hitTestChar (float x, float y)
+   {
+     return hitTestChar(x, y, getBounds());
+   }
+ 
+   public TextHitInfo hitTestChar (float x, float y, Rectangle2D bounds)
+   {
+     return peer.hitTestChar(x, y, bounds);
+   }
+ 
+   public boolean isLeftToRight ()
+   {
+     return peer.isLeftToRight();
+   }
+ 
+   public boolean isVertical ()
+   {
+     return peer.isVertical();
+   }
+ 
+   public String toString ()
+   {
+     return peer.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/TextMeasurer.java gcc-4.1.0/libjava/classpath/java/awt/font/TextMeasurer.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/TextMeasurer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/TextMeasurer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /* TextMeasurer.java
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.text.AttributedCharacterIterator;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.3
+  */
+ public final class TextMeasurer implements Cloneable
+ {
+   private AttributedCharacterIterator ci;
+   private FontRenderContext frc;
+   
+   public TextMeasurer (AttributedCharacterIterator text, FontRenderContext frc)
+   {
+     this.ci = text;
+     this.frc = frc;
+   }
+ 
+   protected Object clone ()
+   {
+     try
+       {
+         return super.clone ();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         // This may never occur
+         throw new InternalError ();
+       }
+   }
+ 
+   public void deleteChar (AttributedCharacterIterator newParagraph,
+                           int deletePos)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public float getAdvanceBetween (int start, int limit)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public TextLayout getLayout (int start, int limit)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public int getLineBreakIndex (int start, float maxAdvance)
+   {
+     throw new Error ("not implemented");
+   }
+ 
+   public void insertChar (AttributedCharacterIterator newParagraph,
+                           int insertPos)
+   {
+     throw new Error ("not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/TransformAttribute.java gcc-4.1.0/libjava/classpath/java/awt/font/TransformAttribute.java
*** gcc-4.0.2/libjava/classpath/java/awt/font/TransformAttribute.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/TransformAttribute.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* TransformAttribute.java --
+    Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.font;
+ 
+ import java.awt.geom.AffineTransform;
+ import java.io.Serializable;
+ 
+ /**
+  * This class provides a mechanism for using an {@link AffineTransform} as
+  * an <i>immutable</i> attribute (for example, in the 
+  * {@link java.text.AttributedString} class).  Any transform passed to 
+  * this class is copied before being stored, and any transform handed out
+  * by this class is a copy of the stored transform.  In this way, it is 
+  * not possible to modify the stored transform.
+  * 
+  * @author Michael Koch
+  */
+ public final class TransformAttribute implements Serializable
+ {
+   private static final long serialVersionUID = 3356247357827709530L;
+ 
+   private AffineTransform affineTransform;
+   
+   /**
+    * Creates a new attribute that contains a copy of the given transform.
+    * 
+    * @param transform  the transform (<code>null</code> not permitted).
+    * 
+    * @throws IllegalArgumentException if <code>transform</code> is 
+    *         <code>null</code>.
+    */
+   public TransformAttribute (AffineTransform transform) 
+   {
+     if (transform == null)
+       {
+         throw new IllegalArgumentException("Null 'transform' not permitted.");
+       }
+     this.affineTransform = new AffineTransform (transform);
+   }
+ 
+   /**
+    * Returns a copy of the transform contained by this attribute.
+    * 
+    * @return A copy of the transform.
+    */
+   public AffineTransform getTransform ()
+   {
+     return (AffineTransform) affineTransform.clone();
+   }
+ 
+   /**
+    * Returns <code>true</code> if the transform contained by this attribute is
+    * an identity transform, and <code>false</code> otherwise.
+    * 
+    * @return <code>true</code> if the transform contained by this attribute is
+    * an identity transform, and <code>false</code> otherwise.
+    * 
+    * @since 1.4
+    */
+   public boolean isIdentity ()
+   {
+     return (affineTransform == null ? false : affineTransform.isIdentity ());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/font/package.html gcc-4.1.0/libjava/classpath/java/awt/font/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/font/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/font/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.font package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.font</title></head>
+ 
+ <body>
+ <p>Representations of different kind of characters and fonts.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/AffineTransform.java gcc-4.1.0/libjava/classpath/java/awt/geom/AffineTransform.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/AffineTransform.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/AffineTransform.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1487 ----
+ /* AffineTransform.java -- transform coordinates between two 2-D spaces
+    Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.geom;
+ 
+ import java.awt.Shape;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * This class represents an affine transformation between two coordinate
+  * spaces in 2 dimensions. Such a transform preserves the "straightness"
+  * and "parallelness" of lines. The transform is built from a sequence of
+  * translations, scales, flips, rotations, and shears.
+  *
+  * <p>The transformation can be represented using matrix math on a 3x3 array.
+  * Given (x,y), the transformation (x',y') can be found by:
+  * <pre>
+  * [ x']   [ m00 m01 m02 ] [ x ]   [ m00*x + m01*y + m02 ]
+  * [ y'] = [ m10 m11 m12 ] [ y ] = [ m10*x + m11*y + m12 ]
+  * [ 1 ]   [  0   0   1  ] [ 1 ]   [          1          ]
+  * </pre>
+  * The bottom row of the matrix is constant, so a transform can be uniquely
+  * represented (as in {@link #toString()}) by 
+  * "[[m00, m01, m02], [m10, m11, m12]]".
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status partially updated to 1.4, still has some problems
+  */
+ public class AffineTransform implements Cloneable, Serializable
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 1330973210523860834L;
+ 
+   /**
+    * The transformation is the identity (x' = x, y' = y). All other transforms
+    * have either a combination of the appropriate transform flag bits for
+    * their type, or the type GENERAL_TRANSFORM.
+    *
+    * @see #TYPE_TRANSLATION
+    * @see #TYPE_UNIFORM_SCALE
+    * @see #TYPE_GENERAL_SCALE
+    * @see #TYPE_FLIP
+    * @see #TYPE_QUADRANT_ROTATION
+    * @see #TYPE_GENERAL_ROTATION
+    * @see #TYPE_GENERAL_TRANSFORM
+    * @see #getType()
+    */
+   public static final int TYPE_IDENTITY = 0;
+ 
+   /**
+    * The transformation includes a translation - shifting in the x or y
+    * direction without changing length or angles.
+    *
+    * @see #TYPE_IDENTITY
+    * @see #TYPE_UNIFORM_SCALE
+    * @see #TYPE_GENERAL_SCALE
+    * @see #TYPE_FLIP
+    * @see #TYPE_QUADRANT_ROTATION
+    * @see #TYPE_GENERAL_ROTATION
+    * @see #TYPE_GENERAL_TRANSFORM
+    * @see #getType()
+    */
+   public static final int TYPE_TRANSLATION = 1;
+ 
+   /**
+    * The transformation includes a uniform scale - length is scaled in both
+    * the x and y directions by the same amount, without affecting angles.
+    * This is mutually exclusive with TYPE_GENERAL_SCALE.
+    *
+    * @see #TYPE_IDENTITY
+    * @see #TYPE_TRANSLATION
+    * @see #TYPE_GENERAL_SCALE
+    * @see #TYPE_FLIP
+    * @see #TYPE_QUADRANT_ROTATION
+    * @see #TYPE_GENERAL_ROTATION
+    * @see #TYPE_GENERAL_TRANSFORM
+    * @see #TYPE_MASK_SCALE
+    * @see #getType()
+    */
+   public static final int TYPE_UNIFORM_SCALE = 2;
+ 
+   /**
+    * The transformation includes a general scale - length is scaled in either
+    * or both the x and y directions, but by different amounts; without
+    * affecting angles. This is mutually exclusive with TYPE_UNIFORM_SCALE.
+    *
+    * @see #TYPE_IDENTITY
+    * @see #TYPE_TRANSLATION
+    * @see #TYPE_UNIFORM_SCALE
+    * @see #TYPE_FLIP
+    * @see #TYPE_QUADRANT_ROTATION
+    * @see #TYPE_GENERAL_ROTATION
+    * @see #TYPE_GENERAL_TRANSFORM
+    * @see #TYPE_MASK_SCALE
+    * @see #getType()
+    */
+   public static final int TYPE_GENERAL_SCALE = 4;
+ 
+   /**
+    * This constant checks if either variety of scale transform is performed.
+    *
+    * @see #TYPE_UNIFORM_SCALE
+    * @see #TYPE_GENERAL_SCALE
+    */
+   public static final int TYPE_MASK_SCALE = 6;
+ 
+   /**
+    * The transformation includes a flip about an axis, swapping between
+    * right-handed and left-handed coordinate systems. In a right-handed
+    * system, the positive x-axis rotates counter-clockwise to the positive
+    * y-axis; in a left-handed system it rotates clockwise.
+    *
+    * @see #TYPE_IDENTITY
+    * @see #TYPE_TRANSLATION
+    * @see #TYPE_UNIFORM_SCALE
+    * @see #TYPE_GENERAL_SCALE
+    * @see #TYPE_QUADRANT_ROTATION
+    * @see #TYPE_GENERAL_ROTATION
+    * @see #TYPE_GENERAL_TRANSFORM
+    * @see #getType()
+    */
+   public static final int TYPE_FLIP = 64;
+ 
+   /**
+    * The transformation includes a rotation of a multiple of 90 degrees (PI/2
+    * radians). Angles are rotated, but length is preserved. This is mutually
+    * exclusive with TYPE_GENERAL_ROTATION.
+    *
+    * @see #TYPE_IDENTITY
+    * @see #TYPE_TRANSLATION
+    * @see #TYPE_UNIFORM_SCALE
+    * @see #TYPE_GENERAL_SCALE
+    * @see #TYPE_FLIP
+    * @see #TYPE_GENERAL_ROTATION
+    * @see #TYPE_GENERAL_TRANSFORM
+    * @see #TYPE_MASK_ROTATION
+    * @see #getType()
+    */
+   public static final int TYPE_QUADRANT_ROTATION = 8;
+ 
+   /**
+    * The transformation includes a rotation by an arbitrary angle. Angles are
+    * rotated, but length is preserved. This is mutually exclusive with
+    * TYPE_QUADRANT_ROTATION.
+    *
+    * @see #TYPE_IDENTITY
+    * @see #TYPE_TRANSLATION
+    * @see #TYPE_UNIFORM_SCALE
+    * @see #TYPE_GENERAL_SCALE
+    * @see #TYPE_FLIP
+    * @see #TYPE_QUADRANT_ROTATION
+    * @see #TYPE_GENERAL_TRANSFORM
+    * @see #TYPE_MASK_ROTATION
+    * @see #getType()
+    */
+   public static final int TYPE_GENERAL_ROTATION = 16;
+ 
+   /**
+    * This constant checks if either variety of rotation is performed.
+    *
+    * @see #TYPE_QUADRANT_ROTATION
+    * @see #TYPE_GENERAL_ROTATION
+    */
+   public static final int TYPE_MASK_ROTATION = 24;
+ 
+   /**
+    * The transformation is an arbitrary conversion of coordinates which
+    * could not be decomposed into the other TYPEs.
+    *
+    * @see #TYPE_IDENTITY
+    * @see #TYPE_TRANSLATION
+    * @see #TYPE_UNIFORM_SCALE
+    * @see #TYPE_GENERAL_SCALE
+    * @see #TYPE_FLIP
+    * @see #TYPE_QUADRANT_ROTATION
+    * @see #TYPE_GENERAL_ROTATION
+    * @see #getType()
+    */
+   public static final int TYPE_GENERAL_TRANSFORM = 32;
+ 
+   /**
+    * The X coordinate scaling element of the transform matrix.
+    *
+    * @serial matrix[0,0]
+    */
+   private double m00;
+ 
+   /**
+    * The Y coordinate shearing element of the transform matrix.
+    *
+    * @serial matrix[1,0]
+    */
+   private double m10;
+ 
+   /**
+    * The X coordinate shearing element of the transform matrix.
+    *
+    * @serial matrix[0,1]
+    */
+   private double m01;
+ 
+   /**
+    * The Y coordinate scaling element of the transform matrix.
+    *
+    * @serial matrix[1,1]
+    */
+   private double m11;
+ 
+   /**
+    * The X coordinate translation element of the transform matrix.
+    *
+    * @serial matrix[0,2]
+    */
+   private double m02;
+ 
+   /**
+    * The Y coordinate translation element of the transform matrix.
+    *
+    * @serial matrix[1,2]
+    */
+   private double m12;
+ 
+   /** The type of this transform. */
+   private transient int type;
+ 
+   /**
+    * Construct a new identity transform:
+    * <pre>
+    * [ 1 0 0 ]
+    * [ 0 1 0 ]
+    * [ 0 0 1 ]
+    * </pre>
+    */
+   public AffineTransform()
+   {
+     m00 = m11 = 1;
+   }
+ 
+   /**
+    * Create a new transform which copies the given one.
+    *
+    * @param tx the transform to copy
+    * @throws NullPointerException if tx is null
+    */
+   public AffineTransform(AffineTransform tx)
+   {
+     setTransform(tx);
+   }
+ 
+   /**
+    * Construct a transform with the given matrix entries:
+    * <pre>
+    * [ m00 m01 m02 ]
+    * [ m10 m11 m12 ]
+    * [  0   0   1  ]
+    * </pre>
+    *
+    * @param m00 the x scaling component
+    * @param m10 the y shearing component
+    * @param m01 the x shearing component
+    * @param m11 the y scaling component
+    * @param m02 the x translation component
+    * @param m12 the y translation component
+    */
+   public AffineTransform(float m00, float m10,
+                          float m01, float m11,
+                          float m02, float m12)
+   {
+     this.m00 = m00;
+     this.m10 = m10;
+     this.m01 = m01;
+     this.m11 = m11;
+     this.m02 = m02;
+     this.m12 = m12;
+     updateType();
+   }
+ 
+   /**
+    * Construct a transform from a sequence of float entries. The array must
+    * have at least 4 entries, which has a translation factor of 0; or 6
+    * entries, for specifying all parameters:
+    * <pre>
+    * [ f[0] f[2] (f[4]) ]
+    * [ f[1] f[3] (f[5]) ]
+    * [  0     0    1    ]
+    * </pre>
+    *
+    * @param f the matrix to copy from, with at least 4 (6) entries
+    * @throws NullPointerException if f is null
+    * @throws ArrayIndexOutOfBoundsException if f is too small
+    */
+   public AffineTransform(float[] f)
+   {
+     m00 = f[0];
+     m10 = f[1];
+     m01 = f[2];
+     m11 = f[3];
+     if (f.length >= 6)
+       {
+         m02 = f[4];
+         m12 = f[5];
+       }
+     updateType();
+   }
+ 
+   /**
+    * Construct a transform with the given matrix entries:
+    * <pre>
+    * [ m00 m01 m02 ]
+    * [ m10 m11 m12 ]
+    * [  0   0   1  ]
+    * </pre>
+    *
+    * @param m00 the x scaling component
+    * @param m10 the y shearing component
+    * @param m01 the x shearing component
+    * @param m11 the y scaling component
+    * @param m02 the x translation component
+    * @param m12 the y translation component
+    */
+   public AffineTransform(double m00, double m10, double m01,
+                          double m11, double m02, double m12)
+   {
+     this.m00 = m00;
+     this.m10 = m10;
+     this.m01 = m01;
+     this.m11 = m11;
+     this.m02 = m02;
+     this.m12 = m12;
+     updateType();
+   }
+ 
+   /**
+    * Construct a transform from a sequence of double entries. The array must
+    * have at least 4 entries, which has a translation factor of 0; or 6
+    * entries, for specifying all parameters:
+    * <pre>
+    * [ d[0] d[2] (d[4]) ]
+    * [ d[1] d[3] (d[5]) ]
+    * [  0     0    1    ]
+    * </pre>
+    *
+    * @param d the matrix to copy from, with at least 4 (6) entries
+    * @throws NullPointerException if d is null
+    * @throws ArrayIndexOutOfBoundsException if d is too small
+    */
+   public AffineTransform(double[] d)
+   {
+     m00 = d[0];
+     m10 = d[1];
+     m01 = d[2];
+     m11 = d[3];
+     if (d.length >= 6)
+       {
+         m02 = d[4];
+         m12 = d[5];
+       }
+     updateType();
+   }
+ 
+   /**
+    * Returns a translation transform:
+    * <pre>
+    * [ 1 0 tx ]
+    * [ 0 1 ty ]
+    * [ 0 0 1  ]
+    * </pre>
+    *
+    * @param tx the x translation distance
+    * @param ty the y translation distance
+    * @return the translating transform
+    */
+   public static AffineTransform getTranslateInstance(double tx, double ty)
+   {
+     AffineTransform t = new AffineTransform();
+     t.setToTranslation(tx, ty);
+     return t;
+   }
+ 
+   /**
+    * Returns a rotation transform. A positive angle (in radians) rotates
+    * the positive x-axis to the positive y-axis:
+    * <pre>
+    * [ cos(theta) -sin(theta) 0 ]
+    * [ sin(theta)  cos(theta) 0 ]
+    * [     0           0      1 ]
+    * </pre>
+    *
+    * @param theta the rotation angle
+    * @return the rotating transform
+    */
+   public static AffineTransform getRotateInstance(double theta)
+   {
+     AffineTransform t = new AffineTransform();
+     t.setToRotation(theta);
+     return t;
+   }
+ 
+   /**
+    * Returns a rotation transform about a point. A positive angle (in radians)
+    * rotates the positive x-axis to the positive y-axis. This is the same
+    * as calling:
+    * <pre>
+    * AffineTransform tx = new AffineTransform();
+    * tx.setToTranslation(x, y);
+    * tx.rotate(theta);
+    * tx.translate(-x, -y);
+    * </pre>
+    *
+    * <p>The resulting matrix is: 
+    * <pre>
+    * [ cos(theta) -sin(theta) x-x*cos+y*sin ]
+    * [ sin(theta)  cos(theta) y-x*sin-y*cos ]
+    * [     0           0            1       ]
+    * </pre>
+    *
+    * @param theta the rotation angle
+    * @param x the x coordinate of the pivot point
+    * @param y the y coordinate of the pivot point
+    * @return the rotating transform
+    */
+   public static AffineTransform getRotateInstance(double theta,
+                                                   double x, double y)
+   {
+     AffineTransform t = new AffineTransform();
+     t.setToTranslation(x, y);
+     t.rotate(theta);
+     t.translate(-x, -y);
+     return t;
+   }
+ 
+   /**
+    * Returns a scaling transform:
+    * <pre>
+    * [ sx 0  0 ]
+    * [ 0  sy 0 ]
+    * [ 0  0  1 ]
+    * </pre>
+    *
+    * @param sx the x scaling factor
+    * @param sy the y scaling factor
+    * @return the scaling transform
+    */
+   public static AffineTransform getScaleInstance(double sx, double sy)
+   {
+     AffineTransform t = new AffineTransform();
+     t.setToScale(sx, sy);
+     return t;
+   }
+ 
+   /**
+    * Returns a shearing transform (points are shifted in the x direction based
+    * on a factor of their y coordinate, and in the y direction as a factor of
+    * their x coordinate):
+    * <pre>
+    * [  1  shx 0 ]
+    * [ shy  1  0 ]
+    * [  0   0  1 ]
+    * </pre>
+    *
+    * @param shx the x shearing factor
+    * @param shy the y shearing factor
+    * @return the shearing transform
+    */
+   public static AffineTransform getShearInstance(double shx, double shy)
+   {
+     AffineTransform t = new AffineTransform();
+     t.setToShear(shx, shy);
+     return t;
+   }
+ 
+   /**
+    * Returns the type of this transform. The result is always valid, although
+    * it may not be the simplest interpretation (in other words, there are
+    * sequences of transforms which reduce to something simpler, which this
+    * does not always detect). The result is either TYPE_GENERAL_TRANSFORM,
+    * or a bit-wise combination of TYPE_TRANSLATION, the mutually exclusive
+    * TYPE_*_ROTATIONs, and the mutually exclusive TYPE_*_SCALEs.
+    *
+    * @return The type.
+    * 
+    * @see #TYPE_IDENTITY
+    * @see #TYPE_TRANSLATION
+    * @see #TYPE_UNIFORM_SCALE
+    * @see #TYPE_GENERAL_SCALE
+    * @see #TYPE_QUADRANT_ROTATION
+    * @see #TYPE_GENERAL_ROTATION
+    * @see #TYPE_GENERAL_TRANSFORM
+    */
+   public int getType()
+   {
+     return type;
+   }
+ 
+   /**
+    * Return the determinant of this transform matrix. If the determinant is
+    * non-zero, the transform is invertible; otherwise operations which require
+    * an inverse throw a NoninvertibleTransformException. A result very near
+    * zero, due to rounding errors, may indicate that inversion results do not
+    * carry enough precision to be meaningful.
+    *
+    * <p>If this is a uniform scale transformation, the determinant also
+    * represents the squared value of the scale. Otherwise, it carries little
+    * additional meaning. The determinant is calculated as:
+    * <pre>
+    * | m00 m01 m02 |
+    * | m10 m11 m12 | = m00 * m11 - m01 * m10
+    * |  0   0   1  |
+    * </pre>
+    *
+    * @return the determinant
+    * @see #createInverse()
+    */
+   public double getDeterminant()
+   {
+     return m00 * m11 - m01 * m10;
+   }
+ 
+   /**
+    * Return the matrix of values used in this transform. If the matrix has
+    * fewer than 6 entries, only the scale and shear factors are returned;
+    * otherwise the translation factors are copied as well. The resulting
+    * values are:
+    * <pre>
+    * [ d[0] d[2] (d[4]) ]
+    * [ d[1] d[3] (d[5]) ]
+    * [  0     0    1    ]
+    * </pre>
+    *
+    * @param d the matrix to store the results into; with 4 (6) entries
+    * @throws NullPointerException if d is null
+    * @throws ArrayIndexOutOfBoundsException if d is too small
+    */
+   public void getMatrix(double[] d)
+   {
+     d[0] = m00;
+     d[1] = m10;
+     d[2] = m01;
+     d[3] = m11;
+     if (d.length >= 6)
+       {
+         d[4] = m02;
+         d[5] = m12;
+       }
+   }
+ 
+   /**
+    * Returns the X coordinate scaling factor of the matrix.
+    *
+    * @return m00
+    * @see #getMatrix(double[])
+    */
+   public double getScaleX()
+   {
+     return m00;
+   }
+ 
+   /**
+    * Returns the Y coordinate scaling factor of the matrix.
+    *
+    * @return m11
+    * @see #getMatrix(double[])
+    */
+   public double getScaleY()
+   {
+     return m11;
+   }
+ 
+   /**
+    * Returns the X coordinate shearing factor of the matrix.
+    *
+    * @return m01
+    * @see #getMatrix(double[])
+    */
+   public double getShearX()
+   {
+     return m01;
+   }
+ 
+   /**
+    * Returns the Y coordinate shearing factor of the matrix.
+    *
+    * @return m10
+    * @see #getMatrix(double[])
+    */
+   public double getShearY()
+   {
+     return m10;
+   }
+ 
+   /**
+    * Returns the X coordinate translation factor of the matrix.
+    *
+    * @return m02
+    * @see #getMatrix(double[])
+    */
+   public double getTranslateX()
+   {
+     return m02;
+   }
+ 
+   /**
+    * Returns the Y coordinate translation factor of the matrix.
+    *
+    * @return m12
+    * @see #getMatrix(double[])
+    */
+   public double getTranslateY()
+   {
+     return m12;
+   }
+ 
+   /**
+    * Concatenate a translation onto this transform. This is equivalent, but
+    * more efficient than
+    * <code>concatenate(AffineTransform.getTranslateInstance(tx, ty))</code>.
+    *
+    * @param tx the x translation distance
+    * @param ty the y translation distance
+    * @see #getTranslateInstance(double, double)
+    * @see #concatenate(AffineTransform)
+    */
+   public void translate(double tx, double ty)
+   {
+     m02 += tx * m00 + ty * m01;
+     m12 += tx * m10 + ty * m11;
+     updateType();
+   }
+ 
+   /**
+    * Concatenate a rotation onto this transform. This is equivalent, but
+    * more efficient than
+    * <code>concatenate(AffineTransform.getRotateInstance(theta))</code>.
+    *
+    * @param theta the rotation angle
+    * @see #getRotateInstance(double)
+    * @see #concatenate(AffineTransform)
+    */
+   public void rotate(double theta)
+   {
+     double c = Math.cos(theta);
+     double s = Math.sin(theta);
+     double n00 = m00 *  c + m01 * s;
+     double n01 = m00 * -s + m01 * c;
+     double n10 = m10 *  c + m11 * s;
+     double n11 = m10 * -s + m11 * c;
+     m00 = n00;
+     m01 = n01;
+     m10 = n10;
+     m11 = n11;
+     updateType();
+   }
+ 
+   /**
+    * Concatenate a rotation about a point onto this transform. This is
+    * equivalent, but more efficient than
+    * <code>concatenate(AffineTransform.getRotateInstance(theta, x, y))</code>.
+    *
+    * @param theta the rotation angle
+    * @param x the x coordinate of the pivot point
+    * @param y the y coordinate of the pivot point
+    * @see #getRotateInstance(double, double, double)
+    * @see #concatenate(AffineTransform)
+    */
+   public void rotate(double theta, double x, double y)
+   {
+     translate(x, y);
+     rotate(theta);
+     translate(-x, -y);
+   }
+ 
+   /**
+    * Concatenate a scale onto this transform. This is equivalent, but more
+    * efficient than
+    * <code>concatenate(AffineTransform.getScaleInstance(sx, sy))</code>.
+    *
+    * @param sx the x scaling factor
+    * @param sy the y scaling factor
+    * @see #getScaleInstance(double, double)
+    * @see #concatenate(AffineTransform)
+    */
+   public void scale(double sx, double sy)
+   {
+     m00 *= sx;
+     m01 *= sy;
+     m10 *= sx;
+     m11 *= sy;
+     updateType();
+   }
+ 
+   /**
+    * Concatenate a shearing onto this transform. This is equivalent, but more
+    * efficient than
+    * <code>concatenate(AffineTransform.getShearInstance(sx, sy))</code>.
+    *
+    * @param shx the x shearing factor
+    * @param shy the y shearing factor
+    * @see #getShearInstance(double, double)
+    * @see #concatenate(AffineTransform)
+    */
+   public void shear(double shx, double shy)
+   {
+     double n00 = m00 + (shy * m01);
+     double n01 = m01 + (shx * m00);
+     double n10 = m10 + (shy * m11);
+     double n11 = m11 + (shx * m10);
+     m00 = n00;
+     m01 = n01;
+     m10 = n10;
+     m11 = n11;
+     updateType();
+   }
+ 
+   /**
+    * Reset this transform to the identity (no transformation):
+    * <pre>
+    * [ 1 0 0 ]
+    * [ 0 1 0 ]
+    * [ 0 0 1 ]
+    * </pre>
+    */
+   public void setToIdentity()
+   {
+     m00 = m11 = 1;
+     m01 = m02 = m10 = m12 = 0;
+     type = TYPE_IDENTITY;
+   }
+ 
+   /**
+    * Set this transform to a translation:
+    * <pre>
+    * [ 1 0 tx ]
+    * [ 0 1 ty ]
+    * [ 0 0 1  ]
+    * </pre>
+    *
+    * @param tx the x translation distance
+    * @param ty the y translation distance
+    */
+   public void setToTranslation(double tx, double ty)
+   {
+     m00 = m11 = 1;
+     m01 = m10 = 0;
+     m02 = tx;
+     m12 = ty;
+     type = (tx == 0 && ty == 0) ? TYPE_UNIFORM_SCALE : TYPE_TRANSLATION;
+   }
+ 
+   /**
+    * Set this transform to a rotation. A positive angle (in radians) rotates
+    * the positive x-axis to the positive y-axis:
+    * <pre>
+    * [ cos(theta) -sin(theta) 0 ]
+    * [ sin(theta)  cos(theta) 0 ]
+    * [     0           0      1 ]
+    * </pre>
+    *
+    * @param theta the rotation angle
+    */
+   public void setToRotation(double theta)
+   {
+     double c = Math.cos(theta);
+     double s = Math.sin(theta);
+     m00 = c;
+     m01 = -s;
+     m02 = 0;
+     m10 = s;
+     m11 = c;
+     m12 = 0;
+     type = (c == 1 ? TYPE_IDENTITY
+             : c == 0 || c == -1 ? TYPE_QUADRANT_ROTATION
+             : TYPE_GENERAL_ROTATION);
+   }
+ 
+   /**
+    * Set this transform to a rotation about a point. A positive angle (in
+    * radians) rotates the positive x-axis to the positive y-axis. This is the
+    * same as calling:
+    * <pre>
+    * tx.setToTranslation(x, y);
+    * tx.rotate(theta);
+    * tx.translate(-x, -y);
+    * </pre>
+    *
+    * <p>The resulting matrix is: 
+    * <pre>
+    * [ cos(theta) -sin(theta) x-x*cos+y*sin ]
+    * [ sin(theta)  cos(theta) y-x*sin-y*cos ]
+    * [     0           0            1       ]
+    * </pre>
+    *
+    * @param theta the rotation angle
+    * @param x the x coordinate of the pivot point
+    * @param y the y coordinate of the pivot point
+    */
+   public void setToRotation(double theta, double x, double y)
+   {
+     double c = Math.cos(theta);
+     double s = Math.sin(theta);
+     m00 = c;
+     m01 = -s;
+     m02 = x - x * c + y * s;
+     m10 = s;
+     m11 = c;
+     m12 = y - x * s - y * c;
+     updateType();
+   }
+ 
+   /**
+    * Set this transform to a scale:
+    * <pre>
+    * [ sx 0  0 ]
+    * [ 0  sy 0 ]
+    * [ 0  0  1 ]
+    * </pre>
+    *
+    * @param sx the x scaling factor
+    * @param sy the y scaling factor
+    */
+   public void setToScale(double sx, double sy)
+   {
+     m00 = sx;
+     m01 = m02 = m10 = m12 = 0;
+     m11 = sy;
+     type = (sx != sy ? TYPE_GENERAL_SCALE
+             : sx == 1 ? TYPE_IDENTITY : TYPE_UNIFORM_SCALE);
+   }
+ 
+   /**
+    * Set this transform to a shear (points are shifted in the x direction based
+    * on a factor of their y coordinate, and in the y direction as a factor of
+    * their x coordinate):
+    * <pre>
+    * [  1  shx 0 ]
+    * [ shy  1  0 ]
+    * [  0   0  1 ]
+    * </pre>
+    *
+    * @param shx the x shearing factor
+    * @param shy the y shearing factor
+    */
+   public void setToShear(double shx, double shy)
+   {
+     m00 = m11 = 1;
+     m01 = shx;
+     m10 = shy;
+     m02 = m12 = 0;
+     updateType();
+   }
+ 
+   /**
+    * Set this transform to a copy of the given one.
+    *
+    * @param tx the transform to copy
+    * @throws NullPointerException if tx is null
+    */
+   public void setTransform(AffineTransform tx)
+   {
+     m00 = tx.m00;
+     m01 = tx.m01;
+     m02 = tx.m02;
+     m10 = tx.m10;
+     m11 = tx.m11;
+     m12 = tx.m12;
+     type = tx.type;
+   }
+ 
+   /**
+    * Set this transform to the given values:
+    * <pre>
+    * [ m00 m01 m02 ]
+    * [ m10 m11 m12 ]
+    * [  0   0   1  ]
+    * </pre>
+    *
+    * @param m00 the x scaling component
+    * @param m10 the y shearing component
+    * @param m01 the x shearing component
+    * @param m11 the y scaling component
+    * @param m02 the x translation component
+    * @param m12 the y translation component
+    */
+   public void setTransform(double m00, double m10, double m01,
+                            double m11, double m02, double m12)
+   {
+     this.m00 = m00;
+     this.m10 = m10;
+     this.m01 = m01;
+     this.m11 = m11;
+     this.m02 = m02;
+     this.m12 = m12;
+     updateType();
+   }
+ 
+   /**
+    * Set this transform to the result of performing the original version of
+    * this followed by tx. This is commonly used when chaining transformations
+    * from one space to another. In matrix form:
+    * <pre>
+    * [ this ] = [ this ] x [ tx ]
+    * </pre>
+    *
+    * @param tx the transform to concatenate
+    * @throws NullPointerException if tx is null
+    * @see #preConcatenate(AffineTransform)
+    */
+   public void concatenate(AffineTransform tx)
+   {
+     double n00 = m00 * tx.m00 + m01 * tx.m10;
+     double n01 = m00 * tx.m01 + m01 * tx.m11;
+     double n02 = m00 * tx.m02 + m01 * tx.m12 + m02;
+     double n10 = m10 * tx.m00 + m11 * tx.m10;
+     double n11 = m10 * tx.m01 + m11 * tx.m11;
+     double n12 = m10 * tx.m02 + m11 * tx.m12 + m12;
+     m00 = n00;
+     m01 = n01;
+     m02 = n02;
+     m10 = n10;
+     m11 = n11;
+     m12 = n12;
+     updateType();
+   }
+ 
+   /**
+    * Set this transform to the result of performing tx followed by the
+    * original version of this. This is less common than normal concatenation,
+    * but can still be used to chain transformations from one space to another.
+    * In matrix form:
+    * <pre>
+    * [ this ] = [ tx ] x [ this ]
+    * </pre>
+    *
+    * @param tx the transform to concatenate
+    * @throws NullPointerException if tx is null
+    * @see #concatenate(AffineTransform)
+    */
+   public void preConcatenate(AffineTransform tx)
+   {
+     double n00 = tx.m00 * m00 + tx.m01 * m10;
+     double n01 = tx.m00 * m01 + tx.m01 * m11;
+     double n02 = tx.m00 * m02 + tx.m01 * m12 + tx.m02;
+     double n10 = tx.m10 * m00 + tx.m11 * m10;
+     double n11 = tx.m10 * m01 + tx.m11 * m11;
+     double n12 = tx.m10 * m02 + tx.m11 * m12 + tx.m12;
+     m00 = n00;
+     m01 = n01;
+     m02 = n02;
+     m10 = n10;
+     m11 = n11;
+     m12 = n12;
+     updateType();
+   }
+ 
+   /**
+    * Returns a transform, which if concatenated to this one, will result in
+    * the identity transform. This is useful for undoing transformations, but
+    * is only possible if the original transform has an inverse (ie. does not
+    * map multiple points to the same line or point). A transform exists only
+    * if getDeterminant() has a non-zero value.
+    *
+    * The inverse is calculated as:
+    * 
+    * <pre>
+    *
+    * Let A be the matrix for which we want to find the inverse:
+    *
+    * A = [ m00 m01 m02 ]
+    *     [ m10 m11 m12 ]
+    *     [ 0   0   1   ] 
+    *
+    *
+    *                 1    
+    * inverse (A) =  ---   x  adjoint(A) 
+    *                det 
+    *
+    *
+    *
+    *             =   1       [  m11  -m01   m01*m12-m02*m11  ]
+    *                ---   x  [ -m10   m00  -m00*m12+m10*m02  ]
+    *                det      [  0     0     m00*m11-m10*m01  ]
+    *
+    *
+    *
+    *             = [  m11/det  -m01/det   m01*m12-m02*m11/det ]
+    *               [ -m10/det   m00/det  -m00*m12+m10*m02/det ]
+    *               [   0           0          1               ]
+    *
+    *
+    * </pre>
+    *
+    *
+    *
+    * @return a new inverse transform
+    * @throws NoninvertibleTransformException if inversion is not possible
+    * @see #getDeterminant()
+    */
+   public AffineTransform createInverse()
+     throws NoninvertibleTransformException
+   {
+     double det = getDeterminant();
+     if (det == 0)
+       throw new NoninvertibleTransformException("can't invert transform");
+     
+     double im00 = m11 / det;
+     double im10 = -m10 / det;
+     double im01 = -m01 / det;
+     double im11 = m00 / det;
+     double im02 = (m01 * m12 - m02 * m11) / det;
+     double im12 = (-m00 * m12 + m10 * m02) / det;
+     
+     return new AffineTransform (im00, im10, im01, im11, im02, im12);
+   }
+ 
+   /**
+    * Perform this transformation on the given source point, and store the
+    * result in the destination (creating it if necessary). It is safe for
+    * src and dst to be the same.
+    *
+    * @param src the source point
+    * @param dst the destination, or null
+    * @return the transformation of src, in dst if it was non-null
+    * @throws NullPointerException if src is null
+    */
+   public Point2D transform(Point2D src, Point2D dst)
+   {
+     if (dst == null)
+       dst = new Point2D.Double();
+     double x = src.getX();
+     double y = src.getY();
+     double nx = m00 * x + m01 * y + m02;
+     double ny = m10 * x + m11 * y + m12;
+     dst.setLocation(nx, ny);
+     return dst;
+   }
+ 
+   /**
+    * Perform this transformation on an array of points, storing the results
+    * in another (possibly same) array. This will not create a destination
+    * array, but will create points for the null entries of the destination.
+    * The transformation is done sequentially. While having a single source
+    * and destination point be the same is safe, you should be aware that
+    * duplicate references to the same point in the source, and having the
+    * source overlap the destination, may result in your source points changing
+    * from a previous transform before it is their turn to be evaluated.
+    *
+    * @param src the array of source points
+    * @param srcOff the starting offset into src
+    * @param dst the array of destination points (may have null entries)
+    * @param dstOff the starting offset into dst
+    * @param num the number of points to transform
+    * @throws NullPointerException if src or dst is null, or src has null
+    *         entries
+    * @throws ArrayIndexOutOfBoundsException if array bounds are exceeded
+    * @throws ArrayStoreException if new points are incompatible with dst
+    */
+   public void transform(Point2D[] src, int srcOff,
+                         Point2D[] dst, int dstOff, int num)
+   {
+     while (--num >= 0)
+       dst[dstOff] = transform(src[srcOff++], dst[dstOff++]);
+   }
+ 
+   /**
+    * Perform this transformation on an array of points, in (x,y) pairs,
+    * storing the results in another (possibly same) array. This will not
+    * create a destination array. All sources are copied before the
+    * transformation, so that no result will overwrite a point that has not yet
+    * been evaluated.
+    *
+    * @param srcPts the array of source points
+    * @param srcOff the starting offset into src
+    * @param dstPts the array of destination points
+    * @param dstOff the starting offset into dst
+    * @param num the number of points to transform
+    * @throws NullPointerException if src or dst is null
+    * @throws ArrayIndexOutOfBoundsException if array bounds are exceeded
+    */
+   public void transform(float[] srcPts, int srcOff,
+                         float[] dstPts, int dstOff, int num)
+   {
+     if (srcPts == dstPts && dstOff > srcOff
+         && num > 1 && srcOff + 2 * num > dstOff)
+       {
+         float[] f = new float[2 * num];
+         System.arraycopy(srcPts, srcOff, f, 0, 2 * num);
+         srcPts = f;
+       }
+     while (--num >= 0)
+       {
+         float x = srcPts[srcOff++];
+         float y = srcPts[srcOff++];
+         dstPts[dstOff++] = (float) (m00 * x + m01 * y + m02);
+         dstPts[dstOff++] = (float) (m10 * x + m11 * y + m12);
+       }
+   }
+ 
+   /**
+    * Perform this transformation on an array of points, in (x,y) pairs,
+    * storing the results in another (possibly same) array. This will not
+    * create a destination array. All sources are copied before the
+    * transformation, so that no result will overwrite a point that has not yet
+    * been evaluated.
+    *
+    * @param srcPts the array of source points
+    * @param srcOff the starting offset into src
+    * @param dstPts the array of destination points
+    * @param dstOff the starting offset into dst
+    * @param num the number of points to transform
+    * @throws NullPointerException if src or dst is null
+    * @throws ArrayIndexOutOfBoundsException if array bounds are exceeded
+    */
+   public void transform(double[] srcPts, int srcOff,
+                         double[] dstPts, int dstOff, int num)
+   {
+     if (srcPts == dstPts && dstOff > srcOff
+         && num > 1 && srcOff + 2 * num > dstOff)
+       {
+         double[] d = new double[2 * num];
+         System.arraycopy(srcPts, srcOff, d, 0, 2 * num);
+         srcPts = d;
+       }
+     while (--num >= 0)
+       {
+         double x = srcPts[srcOff++];
+         double y = srcPts[srcOff++];
+         dstPts[dstOff++] = m00 * x + m01 * y + m02;
+         dstPts[dstOff++] = m10 * x + m11 * y + m12;
+       }
+   }
+ 
+   /**
+    * Perform this transformation on an array of points, in (x,y) pairs,
+    * storing the results in another array. This will not create a destination
+    * array.
+    *
+    * @param srcPts the array of source points
+    * @param srcOff the starting offset into src
+    * @param dstPts the array of destination points
+    * @param dstOff the starting offset into dst
+    * @param num the number of points to transform
+    * @throws NullPointerException if src or dst is null
+    * @throws ArrayIndexOutOfBoundsException if array bounds are exceeded
+    */
+   public void transform(float[] srcPts, int srcOff,
+                         double[] dstPts, int dstOff, int num)
+   {
+     while (--num >= 0)
+       {
+         float x = srcPts[srcOff++];
+         float y = srcPts[srcOff++];
+         dstPts[dstOff++] = m00 * x + m01 * y + m02;
+         dstPts[dstOff++] = m10 * x + m11 * y + m12;
+       }
+   }
+ 
+   /**
+    * Perform this transformation on an array of points, in (x,y) pairs,
+    * storing the results in another array. This will not create a destination
+    * array.
+    *
+    * @param srcPts the array of source points
+    * @param srcOff the starting offset into src
+    * @param dstPts the array of destination points
+    * @param dstOff the starting offset into dst
+    * @param num the number of points to transform
+    * @throws NullPointerException if src or dst is null
+    * @throws ArrayIndexOutOfBoundsException if array bounds are exceeded
+    */
+   public void transform(double[] srcPts, int srcOff,
+                         float[] dstPts, int dstOff, int num)
+   {
+     while (--num >= 0)
+       {
+         double x = srcPts[srcOff++];
+         double y = srcPts[srcOff++];
+         dstPts[dstOff++] = (float) (m00 * x + m01 * y + m02);
+         dstPts[dstOff++] = (float) (m10 * x + m11 * y + m12);
+       }
+   }
+ 
+   /**
+    * Perform the inverse of this transformation on the given source point,
+    * and store the result in the destination (creating it if necessary). It
+    * is safe for src and dst to be the same.
+    *
+    * @param src the source point
+    * @param dst the destination, or null
+    * @return the inverse transformation of src, in dst if it was non-null
+    * @throws NullPointerException if src is null
+    * @throws NoninvertibleTransformException if the inverse does not exist
+    * @see #getDeterminant()
+    */
+   public Point2D inverseTransform(Point2D src, Point2D dst)
+     throws NoninvertibleTransformException
+   {
+     return createInverse().transform(src, dst);
+   }
+ 
+   /**
+    * Perform the inverse of this transformation on an array of points, in
+    * (x,y) pairs, storing the results in another (possibly same) array. This
+    * will not create a destination array. All sources are copied before the
+    * transformation, so that no result will overwrite a point that has not yet
+    * been evaluated.
+    *
+    * @param srcPts the array of source points
+    * @param srcOff the starting offset into src
+    * @param dstPts the array of destination points
+    * @param dstOff the starting offset into dst
+    * @param num the number of points to transform
+    * @throws NullPointerException if src or dst is null
+    * @throws ArrayIndexOutOfBoundsException if array bounds are exceeded
+    * @throws NoninvertibleTransformException if the inverse does not exist
+    * @see #getDeterminant()
+    */
+   public void inverseTransform(double[] srcPts, int srcOff,
+                                double[] dstPts, int dstOff, int num)
+     throws NoninvertibleTransformException
+   {
+     createInverse().transform(srcPts, srcOff, dstPts, dstOff, num);
+   }
+ 
+   /**
+    * Perform this transformation, less any translation, on the given source
+    * point, and store the result in the destination (creating it if
+    * necessary). It is safe for src and dst to be the same. The reduced
+    * transform is equivalent to:
+    * <pre>
+    * [ x' ] = [ m00 m01 ] [ x ] = [ m00 * x + m01 * y ]
+    * [ y' ]   [ m10 m11 ] [ y ] = [ m10 * x + m11 * y ]
+    * </pre>
+    *
+    * @param src the source point
+    * @param dst the destination, or null
+    * @return the delta transformation of src, in dst if it was non-null
+    * @throws NullPointerException if src is null
+    */
+   public Point2D deltaTransform(Point2D src, Point2D dst)
+   {
+     if (dst == null)
+       dst = new Point2D.Double();
+     double x = src.getX();
+     double y = src.getY();
+     double nx = m00 * x + m01 * y;
+     double ny = m10 * x + m11 * y;
+     dst.setLocation(nx, ny);
+     return dst;
+   }
+ 
+   /**
+    * Perform this transformation, less any translation, on an array of points,
+    * in (x,y) pairs, storing the results in another (possibly same) array.
+    * This will not create a destination array. All sources are copied before
+    * the transformation, so that no result will overwrite a point that has
+    * not yet been evaluated. The reduced transform is equivalent to:
+    * <pre>
+    * [ x' ] = [ m00 m01 ] [ x ] = [ m00 * x + m01 * y ]
+    * [ y' ]   [ m10 m11 ] [ y ] = [ m10 * x + m11 * y ]
+    * </pre>
+    *
+    * @param srcPts the array of source points
+    * @param srcOff the starting offset into src
+    * @param dstPts the array of destination points
+    * @param dstOff the starting offset into dst
+    * @param num the number of points to transform
+    * @throws NullPointerException if src or dst is null
+    * @throws ArrayIndexOutOfBoundsException if array bounds are exceeded
+    */
+   public void deltaTransform(double[] srcPts, int srcOff,
+                               double[] dstPts, int dstOff,
+                               int num)
+   {
+     if (srcPts == dstPts && dstOff > srcOff
+         && num > 1 && srcOff + 2 * num > dstOff)
+       {
+         double[] d = new double[2 * num];
+         System.arraycopy(srcPts, srcOff, d, 0, 2 * num);
+         srcPts = d;
+       }
+     while (--num >= 0)
+       {
+         double x = srcPts[srcOff++];
+         double y = srcPts[srcOff++];
+         dstPts[dstOff++] = m00 * x + m01 * y;
+         dstPts[dstOff++] = m10 * x + m11 * y;
+       }
+   }
+ 
+   /**
+    * Return a new Shape, based on the given one, where the path of the shape
+    * has been transformed by this transform. Notice that this uses GeneralPath,
+    * which only stores points in float precision.
+    *
+    * @param src the shape source to transform
+    * @return the shape, transformed by this, <code>null</code> if src is 
+    * <code>null</code>.
+    * @see GeneralPath#transform(AffineTransform)
+    */
+   public Shape createTransformedShape(Shape src)
+   {
+     if(src == null) 
+       return null;
+     GeneralPath p = new GeneralPath(src);
+     p.transform(this);
+     return p;
+   }
+ 
+   /**
+    * Returns a string representation of the transform, in the format:
+    * <code>"AffineTransform[[" + m00 + ", " + m01 + ", " + m02 + "], ["
+    *   + m10 + ", " + m11 + ", " + m12 + "]]"</code>.
+    *
+    * @return the string representation
+    */
+   public String toString()
+   {
+     return "AffineTransform[[" + m00 + ", " + m01 + ", " + m02 + "], ["
+       + m10 + ", " + m11 + ", " + m12 + "]]";
+   }
+ 
+   /**
+    * Tests if this transformation is the identity:
+    * <pre>
+    * [ 1 0 0 ]
+    * [ 0 1 0 ]
+    * [ 0 0 1 ]
+    * </pre>
+    *
+    * @return true if this is the identity transform
+    */
+   public boolean isIdentity()
+   {
+     // Rather than rely on type, check explicitly.
+     return (m00 == 1 && m01 == 0 && m02 == 0
+             && m10 == 0 && m11 == 1 && m12 == 0);
+   }
+ 
+   /**
+    * Create a new transform of the same run-time type, with the same
+    * transforming properties as this one.
+    *
+    * @return the clone
+    */
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ 
+   /**
+    * Return the hashcode for this transformation. The formula is not
+    * documented, but appears to be the same as:
+    * <pre>
+    * long l = Double.doubleToLongBits(getScaleX());
+    * l = l * 31 + Double.doubleToLongBits(getShearY());
+    * l = l * 31 + Double.doubleToLongBits(getShearX());
+    * l = l * 31 + Double.doubleToLongBits(getScaleY());
+    * l = l * 31 + Double.doubleToLongBits(getTranslateX());
+    * l = l * 31 + Double.doubleToLongBits(getTranslateY());
+    * return (int) ((l >> 32) ^ l);
+    * </pre>
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     long l = Double.doubleToLongBits(m00);
+     l = l * 31 + Double.doubleToLongBits(m10);
+     l = l * 31 + Double.doubleToLongBits(m01);
+     l = l * 31 + Double.doubleToLongBits(m11);
+     l = l * 31 + Double.doubleToLongBits(m02);
+     l = l * 31 + Double.doubleToLongBits(m12);
+     return (int) ((l >> 32) ^ l);
+   }
+ 
+   /**
+    * Compares two transforms for equality. This returns true if they have the
+    * same matrix values.
+    *
+    * @param obj the transform to compare
+    * @return true if it is equal
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof AffineTransform))
+       return false;
+     AffineTransform t = (AffineTransform) obj;
+     return (m00 == t.m00 && m01 == t.m01 && m02 == t.m02
+             && m10 == t.m10 && m11 == t.m11 && m12 == t.m12);
+   }
+ 
+   /**
+    * Helper to decode the type from the matrix. This is not guaranteed
+    * to find the optimal type, but at least it will be valid.
+    */
+   private void updateType()
+   {
+     double det = getDeterminant();
+     if (det == 0)
+       {
+         type = TYPE_GENERAL_TRANSFORM;
+         return;
+       }
+     // Scale (includes rotation by PI) or translation.
+     if (m01 == 0 && m10 == 0)
+       {
+         if (m00 == m11)
+           type = m00 == 1 ? TYPE_IDENTITY : TYPE_UNIFORM_SCALE;
+         else
+           type = TYPE_GENERAL_SCALE;
+         if (m02 != 0 || m12 != 0)
+           type |= TYPE_TRANSLATION;
+       }
+     // Rotation.
+     else if (m00 == m11 && m01 == -m10)
+       {
+         type = m00 == 0 ? TYPE_QUADRANT_ROTATION : TYPE_GENERAL_ROTATION;
+         if (det != 1)
+           type |= TYPE_UNIFORM_SCALE;
+         if (m02 != 0 || m12 != 0)
+           type |= TYPE_TRANSLATION;
+       }
+     else
+       type = TYPE_GENERAL_TRANSFORM;
+   }
+ 
+   /**
+    * Reads a transform from an object stream.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if there is a problem deserializing
+    * @throws IOException if there is a problem deserializing
+    */
+   private void readObject(ObjectInputStream s)
+     throws ClassNotFoundException, IOException
+   {
+     s.defaultReadObject();
+     updateType();
+   }
+ } // class AffineTransform
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/Arc2D.java gcc-4.1.0/libjava/classpath/java/awt/geom/Arc2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/Arc2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/Arc2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1399 ----
+ /* Arc2D.java -- represents an arc in 2-D space
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ import java.util.NoSuchElementException;
+ 
+ 
+ /**
+  * This class represents all arcs (segments of an ellipse in 2-D space). The
+  * arcs are defined by starting angle and extent (arc length) in degrees, as
+  * opposed to radians (like the rest of Java), and can be open, chorded, or
+  * wedge shaped. The angles are skewed according to the ellipse, so that 45
+  * degrees always points to the upper right corner (positive x, negative y)
+  * of the bounding rectangle. A positive extent draws a counterclockwise arc,
+  * and while the angle can be any value, the path iterator only traverses the
+  * first 360 degrees. Storage is up to the subclasses.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Sven de Marothy (sven@physto.se)
+  * @since 1.2
+  */
+ public abstract class Arc2D extends RectangularShape
+ {
+   /**
+    * An open arc, with no segment connecting the endpoints. This type of
+    * arc still contains the same points as a chorded version.
+    */
+   public static final int OPEN = 0;
+ 
+   /**
+    * A closed arc with a single segment connecting the endpoints (a chord).
+    */
+   public static final int CHORD = 1;
+ 
+   /**
+    * A closed arc with two segments, one from each endpoint, meeting at the
+    * center of the ellipse.
+    */
+   public static final int PIE = 2;
+ 
+   /** The closure type of this arc.  This is package-private to avoid an
+    * accessor method.  */
+   int type;
+ 
+   /**
+    * Create a new arc, with the specified closure type.
+    *
+    * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}.
+    * @throws IllegalArgumentException if type is invalid
+    */
+   protected Arc2D(int type)
+   {
+     if (type < OPEN || type > PIE)
+       throw new IllegalArgumentException();
+     this.type = type;
+   }
+ 
+   /**
+    * Get the starting angle of the arc in degrees.
+    *
+    * @return the starting angle
+    * @see #setAngleStart(double)
+    */
+   public abstract double getAngleStart();
+ 
+   /**
+    * Get the extent angle of the arc in degrees.
+    *
+    * @return the extent angle
+    * @see #setAngleExtent(double)
+    */
+   public abstract double getAngleExtent();
+ 
+   /**
+    * Return the closure type of the arc.
+    *
+    * @return the closure type
+    * @see #OPEN
+    * @see #CHORD
+    * @see #PIE
+    * @see #setArcType(int)
+    */
+   public int getArcType()
+   {
+     return type;
+   }
+ 
+   /**
+    * Returns the starting point of the arc.
+    *
+    * @return the start point
+    */
+   public Point2D getStartPoint()
+   {
+     double angle = Math.toRadians(getAngleStart());
+     double rx = getWidth() / 2;
+     double ry = getHeight() / 2;
+     double x = getX() + rx + rx * Math.cos(angle);
+     double y = getY() + ry - ry * Math.sin(angle);
+     return new Point2D.Double(x, y);
+   }
+ 
+   /**
+    * Returns the ending point of the arc.
+    *
+    * @return the end point
+    */
+   public Point2D getEndPoint()
+   {
+     double angle = Math.toRadians(getAngleStart() + getAngleExtent());
+     double rx = getWidth() / 2;
+     double ry = getHeight() / 2;
+     double x = getX() + rx + rx * Math.cos(angle);
+     double y = getY() + ry - ry * Math.sin(angle);
+     return new Point2D.Double(x, y);
+   }
+ 
+   /**
+    * Set the parameters of the arc. The angles are in degrees, and a positive
+    * extent sweeps counterclockwise (from the positive x-axis to the negative
+    * y-axis).
+    *
+    * @param x the new x coordinate of the upper left of the bounding box
+    * @param y the new y coordinate of the upper left of the bounding box
+    * @param w the new width of the bounding box
+    * @param h the new height of the bounding box
+    * @param start the start angle, in degrees
+    * @param extent the arc extent, in degrees
+    * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+    * @throws IllegalArgumentException if type is invalid
+    */
+   public abstract void setArc(double x, double y, double w, double h,
+                               double start, double extent, int type);
+ 
+   /**
+    * Set the parameters of the arc. The angles are in degrees, and a positive
+    * extent sweeps counterclockwise (from the positive x-axis to the negative
+    * y-axis).
+    *
+    * @param p the upper left point of the bounding box
+    * @param d the dimensions of the bounding box
+    * @param start the start angle, in degrees
+    * @param extent the arc extent, in degrees
+    * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+    * @throws IllegalArgumentException if type is invalid
+    * @throws NullPointerException if p or d is null
+    */
+   public void setArc(Point2D p, Dimension2D d, double start, double extent,
+                      int type)
+   {
+     setArc(p.getX(), p.getY(), d.getWidth(), d.getHeight(), start, extent, type);
+   }
+ 
+   /**
+    * Set the parameters of the arc. The angles are in degrees, and a positive
+    * extent sweeps counterclockwise (from the positive x-axis to the negative
+    * y-axis).
+    *
+    * @param r the new bounding box
+    * @param start the start angle, in degrees
+    * @param extent the arc extent, in degrees
+    * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+    * @throws IllegalArgumentException if type is invalid
+    * @throws NullPointerException if r is null
+    */
+   public void setArc(Rectangle2D r, double start, double extent, int type)
+   {
+     setArc(r.getX(), r.getY(), r.getWidth(), r.getHeight(), start, extent, type);
+   }
+ 
+   /**
+    * Set the parameters of the arc from the given one.
+    *
+    * @param a the arc to copy
+    * @throws NullPointerException if a is null
+    */
+   public void setArc(Arc2D a)
+   {
+     setArc(a.getX(), a.getY(), a.getWidth(), a.getHeight(), a.getAngleStart(),
+            a.getAngleExtent(), a.getArcType());
+   }
+ 
+   /**
+    * Set the parameters of the arc. The angles are in degrees, and a positive
+    * extent sweeps counterclockwise (from the positive x-axis to the negative
+    * y-axis). This controls the center point and radius, so the arc will be
+    * circular.
+    *
+    * @param x the x coordinate of the center of the circle
+    * @param y the y coordinate of the center of the circle
+    * @param r the radius of the circle
+    * @param start the start angle, in degrees
+    * @param extent the arc extent, in degrees
+    * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+    * @throws IllegalArgumentException if type is invalid
+    */
+   public void setArcByCenter(double x, double y, double r, double start,
+                              double extent, int type)
+   {
+     setArc(x - r, y - r, r + r, r + r, start, extent, type);
+   }
+ 
+   /**
+    * Sets the parameters of the arc by finding the tangents of two lines, and
+    * using the specified radius. The arc will be circular, will begin on the
+    * tangent point of the line extending from p1 to p2, and will end on the
+    * tangent point of the line extending from p2 to p3.
+    *
+    * XXX What happens if the points are colinear, or the radius negative?
+    *
+    * @param p1 the first point
+    * @param p2 the tangent line intersection point
+    * @param p3 the third point
+    * @param r the radius of the arc
+    * @throws NullPointerException if any point is null
+    */
+   public void setArcByTangent(Point2D p1, Point2D p2, Point2D p3, double r)
+   {
+     if ((p2.getX() - p1.getX()) * (p3.getY() - p1.getY())
+         - (p3.getX() - p1.getX()) * (p2.getY() - p1.getY()) > 0)
+       {
+ 	Point2D p = p3;
+ 	p3 = p1;
+ 	p1 = p;
+       }
+ 
+     // normalized tangent vectors
+     double dx1 = (p1.getX() - p2.getX()) / p1.distance(p2);
+     double dy1 = (p1.getY() - p2.getY()) / p1.distance(p2);
+     double dx2 = (p2.getX() - p3.getX()) / p3.distance(p2);
+     double dy2 = (p2.getY() - p3.getY()) / p3.distance(p2);
+     double theta1 = Math.atan2(dx1, dy1);
+     double theta2 = Math.atan2(dx2, dy2);
+ 
+     double dx = r * Math.cos(theta2) - r * Math.cos(theta1);
+     double dy = -r * Math.sin(theta2) + r * Math.sin(theta1);
+ 
+     if (theta1 < 0)
+       theta1 += 2 * Math.PI;
+     if (theta2 < 0)
+       theta2 += 2 * Math.PI;
+     if (theta2 < theta1)
+       theta2 += 2 * Math.PI;
+ 
+     // Vectors of the lines, not normalized, note we change 
+     // the direction of line 2.
+     dx1 = p1.getX() - p2.getX();
+     dy1 = p1.getY() - p2.getY();
+     dx2 = p3.getX() - p2.getX();
+     dy2 = p3.getY() - p2.getY();
+ 
+     // Calculate the tangent point to the second line
+     double t2 = -(dx1 * dy - dy1 * dx) / (dx2 * dy1 - dx1 * dy2);
+     double x2 = t2 * (p3.getX() - p2.getX()) + p2.getX();
+     double y2 = t2 * (p3.getY() - p2.getY()) + p2.getY();
+ 
+     // calculate the center point
+     double x = x2 - r * Math.cos(theta2);
+     double y = y2 + r * Math.sin(theta2);
+ 
+     setArc(x - r, y - r, 2 * r, 2 * r, Math.toDegrees(theta1),
+            Math.toDegrees(theta2 - theta1), getArcType());
+   }
+ 
+   /**
+    * Set the start, in degrees.
+    *
+    * @param start the new start angle
+    * @see #getAngleStart()
+    */
+   public abstract void setAngleStart(double start);
+ 
+   /**
+    * Set the extent, in degrees.
+    *
+    * @param extent the new extent angle
+    * @see #getAngleExtent()
+    */
+   public abstract void setAngleExtent(double extent);
+ 
+   /**
+    * Sets the starting angle to the angle of the given point relative to
+    * the center of the arc. The extent remains constant; in other words,
+    * this rotates the arc.
+    *
+    * @param p the new start point
+    * @throws NullPointerException if p is null
+    * @see #getStartPoint()
+    * @see #getAngleStart()
+    */
+   public void setAngleStart(Point2D p)
+   {
+     // Normalize.
+     double x = p.getX() - (getX() + getWidth() / 2);
+     double y = p.getY() - (getY() + getHeight() / 2);
+     setAngleStart(Math.toDegrees(Math.atan2(-y, x)));
+   }
+ 
+   /**
+    * Sets the starting and extent angles to those of the given points
+    * relative to the center of the arc. The arc will be non-empty, and will
+    * extend counterclockwise.
+    *
+    * @param x1 the first x coordinate
+    * @param y1 the first y coordinate
+    * @param x2 the second x coordinate
+    * @param y2 the second y coordinate
+    * @see #setAngleStart(Point2D)
+    */
+   public void setAngles(double x1, double y1, double x2, double y2)
+   {
+     // Normalize the points.
+     double mx = getX();
+     double my = getY();
+     double mw = getWidth();
+     double mh = getHeight();
+     x1 = x1 - (mx + mw / 2);
+     y1 = y1 - (my + mh / 2);
+     x2 = x2 - (mx + mw / 2);
+     y2 = y2 - (my + mh / 2);
+     double start = Math.toDegrees(Math.atan2(-y1, x1));
+     double extent = Math.toDegrees(Math.atan2(-y2, x2)) - start;
+     if (extent < 0)
+       extent += 360;
+     setAngleStart(start);
+     setAngleExtent(extent);
+   }
+ 
+   /**
+    * Sets the starting and extent angles to those of the given points
+    * relative to the center of the arc. The arc will be non-empty, and will
+    * extend counterclockwise.
+    *
+    * @param p1 the first point
+    * @param p2 the second point
+    * @throws NullPointerException if either point is null
+    * @see #setAngleStart(Point2D)
+    */
+   public void setAngles(Point2D p1, Point2D p2)
+   {
+     setAngles(p1.getX(), p1.getY(), p2.getX(), p2.getY());
+   }
+ 
+   /**
+    * Set the closure type of this arc.
+    *
+    * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+    * @throws IllegalArgumentException if type is invalid
+    * @see #getArcType()
+    */
+   public void setArcType(int type)
+   {
+     if (type < OPEN || type > PIE)
+       throw new IllegalArgumentException();
+     this.type = type;
+   }
+ 
+   /**
+    * Sets the location and bounds of the ellipse of which this arc is a part.
+    *
+    * @param x the new x coordinate
+    * @param y the new y coordinate
+    * @param w the new width
+    * @param h the new height
+    * @see #getFrame()
+    */
+   public void setFrame(double x, double y, double w, double h)
+   {
+     setArc(x, y, w, h, getAngleStart(), getAngleExtent(), type);
+   }
+ 
+   /**
+    * Gets the bounds of the arc. This is much tighter than
+    * <code>getBounds</code>, as it takes into consideration the start and
+    * end angles, and the center point of a pie wedge, rather than just the
+    * overall ellipse.
+    *
+    * @return the bounds of the arc
+    * @see #getBounds()
+    */
+   public Rectangle2D getBounds2D()
+   {
+     double extent = getAngleExtent();
+     if (Math.abs(extent) >= 360)
+       return makeBounds(getX(), getY(), getWidth(), getHeight());
+ 
+     // Find the minimal bounding box.  This determined by its extrema,
+     // which are the center, the endpoints of the arc, and any local
+     // maximum contained by the arc.
+     double rX = getWidth() / 2;
+     double rY = getHeight() / 2;
+     double centerX = getX() + rX;
+     double centerY = getY() + rY;
+ 
+     Point2D p1 = getStartPoint();
+     Rectangle2D result = makeBounds(p1.getX(), p1.getY(), 0, 0);
+     result.add(getEndPoint());
+ 
+     if (type == PIE)
+       result.add(centerX, centerY);
+     if (containsAngle(0))
+       result.add(centerX + rX, centerY);
+     if (containsAngle(90))
+       result.add(centerX, centerY - rY);
+     if (containsAngle(180))
+       result.add(centerX - rX, centerY);
+     if (containsAngle(270))
+       result.add(centerX, centerY + rY);
+ 
+     return result;
+   }
+ 
+   /**
+    * Construct a bounding box in a precision appropriate for the subclass.
+    *
+    * @param x the x coordinate
+    * @param y the y coordinate
+    * @param w the width
+    * @param h the height
+    * @return the rectangle for use in getBounds2D
+    */
+   protected abstract Rectangle2D makeBounds(double x, double y, double w,
+                                             double h);
+ 
+   /**
+    * Tests if the given angle, in degrees, is included in the arc.
+    * All angles are normalized to be between 0 and 360 degrees.
+    *
+    * @param a the angle to test
+    * @return true if it is contained
+    */
+   public boolean containsAngle(double a)
+   {
+     double start = getAngleStart();
+     double extent = getAngleExtent();
+     double end = start + extent;
+ 
+     if (extent == 0)
+       return false;
+ 
+     if (extent >= 360 || extent <= -360)
+       return true;
+ 
+     if (extent < 0)
+       {
+ 	end = start;
+ 	start += extent;
+       }
+ 
+     start %= 360;
+     while (start < 0)
+       start += 360;
+ 
+     end %= 360;
+     while (end < start)
+       end += 360;
+ 
+     a %= 360;
+     while (a < start)
+       a += 360;
+ 
+     return a >= start && a < end; // starting angle included, ending angle not
+   }
+ 
+   /**
+    * Determines if the arc contains the given point. If the bounding box
+    * is empty, then this will return false.
+    *
+    * The area considered 'inside' an arc of type OPEN is the same as the
+    * area inside an equivalent filled CHORD-type arc. The area considered
+    * 'inside' a CHORD-type arc is the same as the filled area.
+    *
+    * @param x the x coordinate to test
+    * @param y the y coordinate to test
+    * @return true if the point is inside the arc
+    */
+   public boolean contains(double x, double y)
+   {
+     double w = getWidth();
+     double h = getHeight();
+     double extent = getAngleExtent();
+     if (w <= 0 || h <= 0 || extent == 0)
+       return false;
+ 
+     double mx = getX() + w / 2;
+     double my = getY() + h / 2;
+     double dx = (x - mx) * 2 / w;
+     double dy = (y - my) * 2 / h;
+     if ((dx * dx + dy * dy) >= 1.0)
+       return false;
+ 
+     double angle = Math.toDegrees(Math.atan2(-dy, dx));
+     if (getArcType() == PIE)
+       return containsAngle(angle);
+ 
+     double a1 = Math.toRadians(getAngleStart());
+     double a2 = Math.toRadians(getAngleStart() + extent);
+     double x1 = mx + getWidth() * Math.cos(a1) / 2;
+     double y1 = my - getHeight() * Math.sin(a1) / 2;
+     double x2 = mx + getWidth() * Math.cos(a2) / 2;
+     double y2 = my - getHeight() * Math.sin(a2) / 2;
+     double sgn = ((x2 - x1) * (my - y1) - (mx - x1) * (y2 - y1)) * ((x2 - x1) * (y
+                  - y1) - (x - x1) * (y2 - y1));
+ 
+     if (Math.abs(extent) > 180)
+       {
+ 	if (containsAngle(angle))
+ 	  return true;
+ 	return sgn > 0;
+       }
+     else
+       {
+ 	if (! containsAngle(angle))
+ 	  return false;
+ 	return sgn < 0;
+       }
+   }
+ 
+   /**
+    * Tests if a given rectangle intersects the area of the arc.
+    *
+    * For a definition of the 'inside' area, see the contains() method.
+    * @see #contains(double, double)
+    *
+    * @param x the x coordinate of the rectangle
+    * @param y the y coordinate of the rectangle
+    * @param w the width of the rectangle
+    * @param h the height of the rectangle
+    * @return true if the two shapes share common points
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     double extent = getAngleExtent();
+     if (extent == 0)
+       return false;
+ 
+     if (contains(x, y) || contains(x, y + h) || contains(x + w, y)
+         || contains(x + w, y + h))
+       return true;
+ 
+     Rectangle2D rect = new Rectangle2D.Double(x, y, w, h);
+ 
+     double a = getWidth() / 2.0;
+     double b = getHeight() / 2.0;
+ 
+     double mx = getX() + a;
+     double my = getY() + b;
+     double x1 = mx + a * Math.cos(Math.toRadians(getAngleStart()));
+     double y1 = my - b * Math.sin(Math.toRadians(getAngleStart()));
+     double x2 = mx + a * Math.cos(Math.toRadians(getAngleStart() + extent));
+     double y2 = my - b * Math.sin(Math.toRadians(getAngleStart() + extent));
+ 
+     if (getArcType() != CHORD)
+       {
+ 	// check intersections against the pie radii
+ 	if (rect.intersectsLine(mx, my, x1, y1))
+ 	  return true;
+ 	if (rect.intersectsLine(mx, my, x2, y2))
+ 	  return true;
+       }
+     else// check the chord
+     if (rect.intersectsLine(x1, y1, x2, y2))
+       return true;
+ 
+     // Check the Arc segment against the four edges
+     double dx;
+ 
+     // Check the Arc segment against the four edges
+     double dy;
+     dy = y - my;
+     dx = a * Math.sqrt(1 - ((dy * dy) / (b * b)));
+     if (! java.lang.Double.isNaN(dx))
+       {
+ 	if (mx + dx >= x && mx + dx <= x + w
+ 	    && containsAngle(Math.toDegrees(Math.atan2(-dy, dx))))
+ 	  return true;
+ 	if (mx - dx >= x && mx - dx <= x + w
+ 	    && containsAngle(Math.toDegrees(Math.atan2(-dy, -dx))))
+ 	  return true;
+       }
+     dy = (y + h) - my;
+     dx = a * Math.sqrt(1 - ((dy * dy) / (b * b)));
+     if (! java.lang.Double.isNaN(dx))
+       {
+ 	if (mx + dx >= x && mx + dx <= x + w
+ 	    && containsAngle(Math.toDegrees(Math.atan2(-dy, dx))))
+ 	  return true;
+ 	if (mx - dx >= x && mx - dx <= x + w
+ 	    && containsAngle(Math.toDegrees(Math.atan2(-dy, -dx))))
+ 	  return true;
+       }
+     dx = x - mx;
+     dy = b * Math.sqrt(1 - ((dx * dx) / (a * a)));
+     if (! java.lang.Double.isNaN(dy))
+       {
+ 	if (my + dy >= y && my + dy <= y + h
+ 	    && containsAngle(Math.toDegrees(Math.atan2(-dy, dx))))
+ 	  return true;
+ 	if (my - dy >= y && my - dy <= y + h
+ 	    && containsAngle(Math.toDegrees(Math.atan2(dy, dx))))
+ 	  return true;
+       }
+ 
+     dx = (x + w) - mx;
+     dy = b * Math.sqrt(1 - ((dx * dx) / (a * a)));
+     if (! java.lang.Double.isNaN(dy))
+       {
+ 	if (my + dy >= y && my + dy <= y + h
+ 	    && containsAngle(Math.toDegrees(Math.atan2(-dy, dx))))
+ 	  return true;
+ 	if (my - dy >= y && my - dy <= y + h
+ 	    && containsAngle(Math.toDegrees(Math.atan2(dy, dx))))
+ 	  return true;
+       }
+ 
+     // Check whether the arc is contained within the box
+     if (rect.contains(mx, my))
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Tests if a given rectangle is contained in the area of the arc.
+    *
+    * @param x the x coordinate of the rectangle
+    * @param y the y coordinate of the rectangle
+    * @param w the width of the rectangle
+    * @param h the height of the rectangle
+    * @return true if the arc contains the rectangle
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     double extent = getAngleExtent();
+     if (extent == 0)
+       return false;
+ 
+     if (! (contains(x, y) && contains(x, y + h) && contains(x + w, y)
+         && contains(x + w, y + h)))
+       return false;
+ 
+     Rectangle2D rect = new Rectangle2D.Double(x, y, w, h);
+ 
+     double a = getWidth() / 2.0;
+     double b = getHeight() / 2.0;
+ 
+     double mx = getX() + a;
+     double my = getY() + b;
+     double x1 = mx + a * Math.cos(Math.toRadians(getAngleStart()));
+     double y1 = my - b * Math.sin(Math.toRadians(getAngleStart()));
+     double x2 = mx + a * Math.cos(Math.toRadians(getAngleStart() + extent));
+     double y2 = my - b * Math.sin(Math.toRadians(getAngleStart() + extent));
+     if (getArcType() != CHORD)
+       {
+ 	// check intersections against the pie radii
+ 	if (rect.intersectsLine(mx, my, x1, y1))
+ 	  return false;
+ 
+ 	if (rect.intersectsLine(mx, my, x2, y2))
+ 	  return false;
+       }
+     else if (rect.intersectsLine(x1, y1, x2, y2))
+       return false;
+     return true;
+   }
+ 
+   /**
+    * Tests if a given rectangle is contained in the area of the arc.
+    *
+    * @param r the rectangle
+    * @return true if the arc contains the rectangle
+    */
+   public boolean contains(Rectangle2D r)
+   {
+     return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Returns an iterator over this arc, with an optional transformation.
+    * This iterator is threadsafe, so future modifications to the arc do not
+    * affect the iteration.
+    *
+    * @param at the transformation, or null
+    * @return a path iterator
+    */
+   public PathIterator getPathIterator(AffineTransform at)
+   {
+     return new ArcIterator(this, at);
+   }
+ 
+   /**
+    * This class is used to iterate over an arc. Since ellipses are a subclass
+    * of arcs, this is used by Ellipse2D as well.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   static final class ArcIterator implements PathIterator
+   {
+     /** The current iteration. */
+     private int current;
+ 
+     /** The last iteration. */
+     private final int limit;
+ 
+     /** The optional transformation. */
+     private final AffineTransform xform;
+ 
+     /** The x coordinate of the bounding box. */
+     private final double x;
+ 
+     /** The y coordinate of the bounding box. */
+     private final double y;
+ 
+     /** The width of the bounding box. */
+     private final double w;
+ 
+     /** The height of the bounding box. */
+     private final double h;
+ 
+     /** The start angle, in radians (not degrees). */
+     private final double start;
+ 
+     /** The extent angle, in radians (not degrees). */
+     private final double extent;
+ 
+     /** The arc closure type. */
+     private final int type;
+ 
+     /**
+      * Construct a new iterator over an arc.
+      *
+      * @param a the arc
+      * @param xform the transform
+      */
+     public ArcIterator(Arc2D a, AffineTransform xform)
+     {
+       this.xform = xform;
+       x = a.getX();
+       y = a.getY();
+       w = a.getWidth();
+       h = a.getHeight();
+       double start = a.getAngleStart() * (Math.PI / 180);
+       double extent = a.getAngleExtent() * (Math.PI / 180);
+ 
+       if (extent < 0)
+         {
+ 	  extent = -extent;
+ 	  start = 2 * Math.PI - extent + start;
+         }
+       this.start = start;
+       this.extent = extent;
+ 
+       type = a.type;
+       if (w < 0 || h < 0)
+ 	limit = -1;
+       else if (extent == 0)
+ 	limit = type;
+       else if (extent <= Math.PI / 2.0)
+ 	limit = type + 1;
+       else if (extent <= Math.PI)
+ 	limit = type + 2;
+       else if (extent <= 3.0 * (Math.PI / 2.0))
+ 	limit = type + 3;
+       else
+ 	limit = type + 4;
+     }
+ 
+     /**
+      * Construct a new iterator over an ellipse.
+      *
+      * @param e the ellipse
+      * @param xform the transform
+      */
+     public ArcIterator(Ellipse2D e, AffineTransform xform)
+     {
+       this.xform = xform;
+       x = e.getX();
+       y = e.getY();
+       w = e.getWidth();
+       h = e.getHeight();
+       start = 0;
+       extent = 2 * Math.PI;
+       type = CHORD;
+       limit = (w < 0 || h < 0) ? -1 : 5;
+     }
+ 
+     /**
+      * Return the winding rule.
+      *
+      * @return {@link PathIterator#WIND_NON_ZERO}
+      */
+     public int getWindingRule()
+     {
+       return WIND_NON_ZERO;
+     }
+ 
+     /**
+      * Test if the iteration is complete.
+      *
+      * @return true if more segments exist
+      */
+     public boolean isDone()
+     {
+       return current > limit;
+     }
+ 
+     /**
+      * Advance the iterator.
+      */
+     public void next()
+     {
+       current++;
+     }
+ 
+     /**
+      * Put the current segment into the array, and return the segment type.
+      *
+      * @param coords an array of 6 elements
+      * @return the segment type
+      * @throws NullPointerException if coords is null
+      * @throws ArrayIndexOutOfBoundsException if coords is too small
+      */
+     public int currentSegment(float[] coords)
+     {
+       double[] double_coords = new double[6];
+       int code = currentSegment(double_coords);
+       for (int i = 0; i < 6; ++i)
+ 	coords[i] = (float) double_coords[i];
+       return code;
+     }
+ 
+     /**
+      * Put the current segment into the array, and return the segment type.
+      *
+      * @param coords an array of 6 elements
+      * @return the segment type
+      * @throws NullPointerException if coords is null
+      * @throws ArrayIndexOutOfBoundsException if coords is too small
+      */
+     public int currentSegment(double[] coords)
+     {
+       double rx = w / 2;
+       double ry = h / 2;
+       double xmid = x + rx;
+       double ymid = y + ry;
+ 
+       if (current > limit)
+ 	throw new NoSuchElementException("arc iterator out of bounds");
+ 
+       if (current == 0)
+         {
+ 	  coords[0] = xmid + rx * Math.cos(start);
+ 	  coords[1] = ymid - ry * Math.sin(start);
+ 	  if (xform != null)
+ 	    xform.transform(coords, 0, coords, 0, 1);
+ 	  return SEG_MOVETO;
+         }
+ 
+       if (type != OPEN && current == limit)
+ 	return SEG_CLOSE;
+ 
+       if ((current == limit - 1) && (type == PIE))
+         {
+ 	  coords[0] = xmid;
+ 	  coords[1] = ymid;
+ 	  if (xform != null)
+ 	    xform.transform(coords, 0, coords, 0, 1);
+ 	  return SEG_LINETO;
+         }
+ 
+       // note that this produces a cubic approximation of the arc segment,
+       // not a true ellipsoid. there's no ellipsoid path segment code,
+       // unfortunately. the cubic approximation looks about right, though.
+       double kappa = (Math.sqrt(2.0) - 1.0) * (4.0 / 3.0);
+       double quad = (Math.PI / 2.0);
+ 
+       double curr_begin = start + (current - 1) * quad;
+       double curr_extent = Math.min((start + extent) - curr_begin, quad);
+       double portion_of_a_quadrant = curr_extent / quad;
+ 
+       double x0 = xmid + rx * Math.cos(curr_begin);
+       double y0 = ymid - ry * Math.sin(curr_begin);
+ 
+       double x1 = xmid + rx * Math.cos(curr_begin + curr_extent);
+       double y1 = ymid - ry * Math.sin(curr_begin + curr_extent);
+ 
+       AffineTransform trans = new AffineTransform();
+       double[] cvec = new double[2];
+       double len = kappa * portion_of_a_quadrant;
+       double angle = curr_begin;
+ 
+       // in a hypothetical "first quadrant" setting, our first control
+       // vector would be sticking up, from [1,0] to [1,kappa].
+       //
+       // let us recall however that in java2d, y coords are upside down
+       // from what one would consider "normal" first quadrant rules, so we
+       // will *subtract* the y value of this control vector from our first
+       // point.
+       cvec[0] = 0;
+       cvec[1] = len;
+       trans.scale(rx, ry);
+       trans.rotate(angle);
+       trans.transform(cvec, 0, cvec, 0, 1);
+       coords[0] = x0 + cvec[0];
+       coords[1] = y0 - cvec[1];
+ 
+       // control vector #2 would, ideally, be sticking out and to the
+       // right, in a first quadrant arc segment. again, subtraction of y.
+       cvec[0] = 0;
+       cvec[1] = -len;
+       trans.rotate(curr_extent);
+       trans.transform(cvec, 0, cvec, 0, 1);
+       coords[2] = x1 + cvec[0];
+       coords[3] = y1 - cvec[1];
+ 
+       // end point
+       coords[4] = x1;
+       coords[5] = y1;
+ 
+       if (xform != null)
+ 	xform.transform(coords, 0, coords, 0, 3);
+ 
+       return SEG_CUBICTO;
+     }
+   } // class ArcIterator
+ 
+   /**
+    * This class implements an arc in double precision.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.2
+    */
+   public static class Double extends Arc2D
+   {
+     /** The x coordinate of the box bounding the ellipse of this arc. */
+     public double x;
+ 
+     /** The y coordinate of the box bounding the ellipse of this arc. */
+     public double y;
+ 
+     /** The width of the box bounding the ellipse of this arc. */
+     public double width;
+ 
+     /** The height of the box bounding the ellipse of this arc. */
+     public double height;
+ 
+     /** The start angle of this arc, in degrees. */
+     public double start;
+ 
+     /** The extent angle of this arc, in degrees. */
+     public double extent;
+ 
+     /**
+      * Create a new, open arc at (0,0) with 0 extent.
+      */
+     public Double()
+     {
+       super(OPEN);
+     }
+ 
+     /**
+      * Create a new arc of the given type at (0,0) with 0 extent.
+      *
+      * @param type the arc type: {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+      * @throws IllegalArgumentException if type is invalid
+      */
+     public Double(int type)
+     {
+       super(type);
+     }
+ 
+     /**
+      * Create a new arc with the given dimensions.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      * @param start the start angle, in degrees
+      * @param extent the extent, in degrees
+      * @param type the arc type: {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+      * @throws IllegalArgumentException if type is invalid
+      */
+     public Double(double x, double y, double w, double h, double start,
+                   double extent, int type)
+     {
+       super(type);
+       this.x = x;
+       this.y = y;
+       width = w;
+       height = h;
+       this.start = start;
+       this.extent = extent;
+     }
+ 
+     /**
+      * Create a new arc with the given dimensions.
+      *
+      * @param r the bounding box
+      * @param start the start angle, in degrees
+      * @param extent the extent, in degrees
+      * @param type the arc type: {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+      * @throws IllegalArgumentException if type is invalid
+      * @throws NullPointerException if r is null
+      */
+     public Double(Rectangle2D r, double start, double extent, int type)
+     {
+       super(type);
+       x = r.getX();
+       y = r.getY();
+       width = r.getWidth();
+       height = r.getHeight();
+       this.start = start;
+       this.extent = extent;
+     }
+ 
+     /**
+      * Return the x coordinate of the bounding box.
+      *
+      * @return the value of x
+      */
+     public double getX()
+     {
+       return x;
+     }
+ 
+     /**
+      * Return the y coordinate of the bounding box.
+      *
+      * @return the value of y
+      */
+     public double getY()
+     {
+       return y;
+     }
+ 
+     /**
+      * Return the width of the bounding box.
+      *
+      * @return the value of width
+      */
+     public double getWidth()
+     {
+       return width;
+     }
+ 
+     /**
+      * Return the height of the bounding box.
+      *
+      * @return the value of height
+      */
+     public double getHeight()
+     {
+       return height;
+     }
+ 
+     /**
+      * Return the start angle of the arc, in degrees.
+      *
+      * @return the value of start
+      */
+     public double getAngleStart()
+     {
+       return start;
+     }
+ 
+     /**
+      * Return the extent of the arc, in degrees.
+      *
+      * @return the value of extent
+      */
+     public double getAngleExtent()
+     {
+       return extent;
+     }
+ 
+     /**
+      * Tests if the arc contains points.
+      *
+      * @return true if the arc has no interior
+      */
+     public boolean isEmpty()
+     {
+       return width <= 0 || height <= 0;
+     }
+ 
+     /**
+      * Sets the arc to the given dimensions.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      * @param start the start angle, in degrees
+      * @param extent the extent, in degrees
+      * @param type the arc type: {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+      * @throws IllegalArgumentException if type is invalid
+      */
+     public void setArc(double x, double y, double w, double h, double start,
+                        double extent, int type)
+     {
+       this.x = x;
+       this.y = y;
+       width = w;
+       height = h;
+       this.start = start;
+       this.extent = extent;
+       setArcType(type);
+     }
+ 
+     /**
+      * Sets the start angle of the arc.
+      *
+      * @param start the new start angle
+      */
+     public void setAngleStart(double start)
+     {
+       this.start = start;
+     }
+ 
+     /**
+      * Sets the extent angle of the arc.
+      *
+      * @param extent the new extent angle
+      */
+     public void setAngleExtent(double extent)
+     {
+       this.extent = extent;
+     }
+ 
+     /**
+      * Creates a tight bounding box given dimensions that more precise than
+      * the bounding box of the ellipse.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      */
+     protected Rectangle2D makeBounds(double x, double y, double w, double h)
+     {
+       return new Rectangle2D.Double(x, y, w, h);
+     }
+   } // class Double
+ 
+   /**
+    * This class implements an arc in float precision.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.2
+    */
+   public static class Float extends Arc2D
+   {
+     /** The x coordinate of the box bounding the ellipse of this arc. */
+     public float x;
+ 
+     /** The y coordinate of the box bounding the ellipse of this arc. */
+     public float y;
+ 
+     /** The width of the box bounding the ellipse of this arc. */
+     public float width;
+ 
+     /** The height of the box bounding the ellipse of this arc. */
+     public float height;
+ 
+     /** The start angle of this arc, in degrees. */
+     public float start;
+ 
+     /** The extent angle of this arc, in degrees. */
+     public float extent;
+ 
+     /**
+      * Create a new, open arc at (0,0) with 0 extent.
+      */
+     public Float()
+     {
+       super(OPEN);
+     }
+ 
+     /**
+      * Create a new arc of the given type at (0,0) with 0 extent.
+      *
+      * @param type the arc type: {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+      * @throws IllegalArgumentException if type is invalid
+      */
+     public Float(int type)
+     {
+       super(type);
+     }
+ 
+     /**
+      * Create a new arc with the given dimensions.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      * @param start the start angle, in degrees
+      * @param extent the extent, in degrees
+      * @param type the arc type: {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+      * @throws IllegalArgumentException if type is invalid
+      */
+     public Float(float x, float y, float w, float h, float start,
+                  float extent, int type)
+     {
+       super(type);
+       this.x = x;
+       this.y = y;
+       width = w;
+       height = h;
+       this.start = start;
+       this.extent = extent;
+     }
+ 
+     /**
+      * Create a new arc with the given dimensions.
+      *
+      * @param r the bounding box
+      * @param start the start angle, in degrees
+      * @param extent the extent, in degrees
+      * @param type the arc type: {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+      * @throws IllegalArgumentException if type is invalid
+      * @throws NullPointerException if r is null
+      */
+     public Float(Rectangle2D r, float start, float extent, int type)
+     {
+       super(type);
+       x = (float) r.getX();
+       y = (float) r.getY();
+       width = (float) r.getWidth();
+       height = (float) r.getHeight();
+       this.start = start;
+       this.extent = (float) extent;
+     }
+ 
+     /**
+      * Return the x coordinate of the bounding box.
+      *
+      * @return the value of x
+      */
+     public double getX()
+     {
+       return x;
+     }
+ 
+     /**
+      * Return the y coordinate of the bounding box.
+      *
+      * @return the value of y
+      */
+     public double getY()
+     {
+       return y;
+     }
+ 
+     /**
+      * Return the width of the bounding box.
+      *
+      * @return the value of width
+      */
+     public double getWidth()
+     {
+       return width;
+     }
+ 
+     /**
+      * Return the height of the bounding box.
+      *
+      * @return the value of height
+      */
+     public double getHeight()
+     {
+       return height;
+     }
+ 
+     /**
+      * Return the start angle of the arc, in degrees.
+      *
+      * @return the value of start
+      */
+     public double getAngleStart()
+     {
+       return start;
+     }
+ 
+     /**
+      * Return the extent of the arc, in degrees.
+      *
+      * @return the value of extent
+      */
+     public double getAngleExtent()
+     {
+       return extent;
+     }
+ 
+     /**
+      * Tests if the arc contains points.
+      *
+      * @return true if the arc has no interior
+      */
+     public boolean isEmpty()
+     {
+       return width <= 0 || height <= 0;
+     }
+ 
+     /**
+      * Sets the arc to the given dimensions.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      * @param start the start angle, in degrees
+      * @param extent the extent, in degrees
+      * @param type the arc type: {@link #OPEN}, {@link #CHORD}, or {@link #PIE}
+      * @throws IllegalArgumentException if type is invalid
+      */
+     public void setArc(double x, double y, double w, double h, double start,
+                        double extent, int type)
+     {
+       this.x = (float) x;
+       this.y = (float) y;
+       width = (float) w;
+       height = (float) h;
+       this.start = (float) start;
+       this.extent = (float) extent;
+       setArcType(type);
+     }
+ 
+     /**
+      * Sets the start angle of the arc.
+      *
+      * @param start the new start angle
+      */
+     public void setAngleStart(double start)
+     {
+       this.start = (float) start;
+     }
+ 
+     /**
+      * Sets the extent angle of the arc.
+      *
+      * @param extent the new extent angle
+      */
+     public void setAngleExtent(double extent)
+     {
+       this.extent = (float) extent;
+     }
+ 
+     /**
+      * Creates a tight bounding box given dimensions that more precise than
+      * the bounding box of the ellipse.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      */
+     protected Rectangle2D makeBounds(double x, double y, double w, double h)
+     {
+       return new Rectangle2D.Float((float) x, (float) y, (float) w, (float) h);
+     }
+   } // class Float
+ } // class Arc2D
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/Area.java gcc-4.1.0/libjava/classpath/java/awt/geom/Area.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/Area.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/Area.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,3312 ----
+ /* Area.java -- represents a shape built by constructive area geometry
+    Copyright (C) 2002, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ import java.util.Vector;
+ 
+ 
+ /**
+  * The Area class represents any area for the purpose of
+  * Constructive Area Geometry (CAG) manipulations. CAG manipulations
+  * work as an area-wise form of boolean logic, where the basic operations are:
+  * <P><li>Add (in boolean algebra: A <B>or</B> B)<BR>
+  * <li>Subtract (in boolean algebra: A <B>and</B> (<B>not</B> B) )<BR>
+  * <li>Intersect (in boolean algebra: A <B>and</B> B)<BR>
+  * <li>Exclusive Or <BR>
+  * <img src="doc-files/Area-1.png" width="342" height="302"
+  * alt="Illustration of CAG operations" /><BR>
+  * Above is an illustration of the CAG operations on two ring shapes.<P>
+  *
+  * The contains and intersects() methods are also more accurate than the
+  * specification of #Shape requires.<P>
+  *
+  * Please note that constructing an Area can be slow
+  * (Self-intersection resolving is proportional to the square of
+  * the number of segments).<P>
+  * @see #add(Area)
+  * @see #subtract(Area)
+  * @see #intersect(Area)
+  * @see #exclusiveOr(Area)
+  *
+  * @author Sven de Marothy (sven@physto.se)
+  *
+  * @since 1.2
+  * @status Works, but could be faster and more reliable.
+  */
+ public class Area implements Shape, Cloneable
+ {
+   /**
+    * General numerical precision
+    */
+   private static final double EPSILON = 1E-11;
+ 
+   /**
+    * recursive subdivision epsilon - (see getRecursionDepth)
+    */
+   private static final double RS_EPSILON = 1E-13;
+ 
+   /**
+    * Snap distance - points within this distance are considered equal
+    */
+   private static final double PE_EPSILON = 1E-11;
+ 
+   /**
+    * Segment vectors containing solid areas and holes
+    * This is package-private to avoid an accessor method.
+    */
+   Vector solids;
+ 
+   /**
+    * Segment vectors containing solid areas and holes
+    * This is package-private to avoid an accessor method.
+    */
+   Vector holes;
+ 
+   /**
+    * Vector (temporary) storing curve-curve intersections
+    */
+   private Vector cc_intersections;
+ 
+   /**
+    * Winding rule WIND_NON_ZERO used, after construction,
+    * this is irrelevant.
+    */
+   private int windingRule;
+ 
+   /**
+    * Constructs an empty Area
+    */
+   public Area()
+   {
+     solids = new Vector();
+     holes = new Vector();
+   }
+ 
+   /**
+    * Constructs an Area from any given Shape. <P>
+    *
+    * If the Shape is self-intersecting, the created Area will consist
+    * of non-self-intersecting subpaths, and any inner paths which
+    * are found redundant in accordance with the Shape's winding rule
+    * will not be included.
+    * 
+    * @param s  the shape (<code>null</code> not permitted).
+    * 
+    * @throws NullPointerException if <code>s</code> is <code>null</code>.
+    */
+   public Area(Shape s)
+   {
+     this();
+ 
+     Vector p = makeSegment(s);
+ 
+     // empty path
+     if (p == null)
+       return;
+ 
+     // delete empty paths
+     for (int i = 0; i < p.size(); i++)
+       if (((Segment) p.elementAt(i)).getSignedArea() == 0.0)
+ 	p.remove(i--);
+ 
+     /*
+      * Resolve self intersecting paths into non-intersecting
+      * solids and holes.
+      * Algorithm is as follows:
+      * 1: Create nodes at all self intersections
+      * 2: Put all segments into a list
+      * 3: Grab a segment, follow it, change direction at each node,
+      *    removing segments from the list in the process
+      * 4: Repeat (3) until no segments remain in the list
+      * 5: Remove redundant paths and sort into solids and holes
+      */
+     Vector paths = new Vector();
+     Segment v;
+ 
+     for (int i = 0; i < p.size(); i++)
+       {
+ 	Segment path = (Segment) p.elementAt(i);
+ 	createNodesSelf(path);
+       }
+ 
+     if (p.size() > 1)
+       {
+ 	for (int i = 0; i < p.size() - 1; i++)
+ 	  for (int j = i + 1; j < p.size(); j++)
+ 	    {
+ 	      Segment path1 = (Segment) p.elementAt(i);
+ 	      Segment path2 = (Segment) p.elementAt(j);
+ 	      createNodes(path1, path2);
+ 	    }
+       }
+ 
+     // we have intersecting points.
+     Vector segments = new Vector();
+ 
+     for (int i = 0; i < p.size(); i++)
+       {
+ 	Segment path = v = (Segment) p.elementAt(i);
+ 	do
+ 	  {
+ 	    segments.add(v);
+ 	    v = v.next;
+ 	  }
+ 	while (v != path);
+       }
+ 
+     paths = weilerAtherton(segments);
+     deleteRedundantPaths(paths);
+   }
+ 
+   /**
+    * Performs an add (union) operation on this area with another Area.<BR>
+    * @param area - the area to be unioned with this one
+    */
+   public void add(Area area)
+   {
+     if (equals(area))
+       return;
+     if (area.isEmpty())
+       return;
+ 
+     Area B = (Area) area.clone();
+ 
+     Vector pathA = new Vector();
+     Vector pathB = new Vector();
+     pathA.addAll(solids);
+     pathA.addAll(holes);
+     pathB.addAll(B.solids);
+     pathB.addAll(B.holes);
+ 
+     int nNodes = 0;
+ 
+     for (int i = 0; i < pathA.size(); i++)
+       {
+ 	Segment a = (Segment) pathA.elementAt(i);
+ 	for (int j = 0; j < pathB.size(); j++)
+ 	  {
+ 	    Segment b = (Segment) pathB.elementAt(j);
+ 	    nNodes += createNodes(a, b);
+ 	  }
+       }
+ 
+     Vector paths = new Vector();
+     Segment v;
+ 
+     // we have intersecting points.
+     Vector segments = new Vector();
+ 
+     // In a union operation, we keep all
+     // segments of A oustide B and all B outside A
+     for (int i = 0; i < pathA.size(); i++)
+       {
+ 	v = (Segment) pathA.elementAt(i);
+ 	Segment path = v;
+ 	do
+ 	  {
+ 	    if (v.isSegmentOutside(area))
+ 	      segments.add(v);
+ 	    v = v.next;
+ 	  }
+ 	while (v != path);
+       }
+ 
+     for (int i = 0; i < pathB.size(); i++)
+       {
+ 	v = (Segment) pathB.elementAt(i);
+ 	Segment path = v;
+ 	do
+ 	  {
+ 	    if (v.isSegmentOutside(this))
+ 	      segments.add(v);
+ 	    v = v.next;
+ 	  }
+ 	while (v != path);
+       }
+ 
+     paths = weilerAtherton(segments);
+     deleteRedundantPaths(paths);
+   }
+ 
+   /**
+    * Performs a subtraction operation on this Area.<BR>
+    * @param area the area to be subtracted from this area.
+    * @throws NullPointerException if <code>area</code> is <code>null</code>.
+    */
+   public void subtract(Area area)
+   {
+     if (isEmpty() || area.isEmpty())
+       return;
+ 
+     if (equals(area))
+       {
+ 	reset();
+ 	return;
+       }
+ 
+     Vector pathA = new Vector();
+     Area B = (Area) area.clone();
+     pathA.addAll(solids);
+     pathA.addAll(holes);
+ 
+     // reverse the directions of B paths.
+     setDirection(B.holes, true);
+     setDirection(B.solids, false);
+ 
+     Vector pathB = new Vector();
+     pathB.addAll(B.solids);
+     pathB.addAll(B.holes);
+ 
+     int nNodes = 0;
+ 
+     // create nodes
+     for (int i = 0; i < pathA.size(); i++)
+       {
+ 	Segment a = (Segment) pathA.elementAt(i);
+ 	for (int j = 0; j < pathB.size(); j++)
+ 	  {
+ 	    Segment b = (Segment) pathB.elementAt(j);
+ 	    nNodes += createNodes(a, b);
+ 	  }
+       }
+ 
+     Vector paths = new Vector();
+ 
+     // we have intersecting points.
+     Vector segments = new Vector();
+ 
+     // In a subtraction operation, we keep all
+     // segments of A oustide B and all B within A
+     // We outsideness-test only one segment in each path
+     // and the segments before and after any node
+     for (int i = 0; i < pathA.size(); i++)
+       {
+ 	Segment v = (Segment) pathA.elementAt(i);
+ 	Segment path = v;
+ 	if (v.isSegmentOutside(area) && v.node == null)
+ 	  segments.add(v);
+ 	boolean node = false;
+ 	do
+ 	  {
+ 	    if ((v.node != null || node))
+ 	      {
+ 		node = (v.node != null);
+ 		if (v.isSegmentOutside(area))
+ 		  segments.add(v);
+ 	      }
+ 	    v = v.next;
+ 	  }
+ 	while (v != path);
+       }
+ 
+     for (int i = 0; i < pathB.size(); i++)
+       {
+ 	Segment v = (Segment) pathB.elementAt(i);
+ 	Segment path = v;
+ 	if (! v.isSegmentOutside(this) && v.node == null)
+ 	  segments.add(v);
+ 	v = v.next;
+ 	boolean node = false;
+ 	do
+ 	  {
+ 	    if ((v.node != null || node))
+ 	      {
+ 		node = (v.node != null);
+ 		if (! v.isSegmentOutside(this))
+ 		  segments.add(v);
+ 	      }
+ 	    v = v.next;
+ 	  }
+ 	while (v != path);
+       }
+ 
+     paths = weilerAtherton(segments);
+     deleteRedundantPaths(paths);
+   }
+ 
+   /**
+    * Performs an intersection operation on this Area.<BR>
+    * @param area - the area to be intersected with this area.
+    * @throws NullPointerException if <code>area</code> is <code>null</code>.
+    */
+   public void intersect(Area area)
+   {
+     if (isEmpty() || area.isEmpty())
+       {
+ 	reset();
+ 	return;
+       }
+     if (equals(area))
+       return;
+ 
+     Vector pathA = new Vector();
+     Area B = (Area) area.clone();
+     pathA.addAll(solids);
+     pathA.addAll(holes);
+ 
+     Vector pathB = new Vector();
+     pathB.addAll(B.solids);
+     pathB.addAll(B.holes);
+ 
+     int nNodes = 0;
+ 
+     // create nodes
+     for (int i = 0; i < pathA.size(); i++)
+       {
+ 	Segment a = (Segment) pathA.elementAt(i);
+ 	for (int j = 0; j < pathB.size(); j++)
+ 	  {
+ 	    Segment b = (Segment) pathB.elementAt(j);
+ 	    nNodes += createNodes(a, b);
+ 	  }
+       }
+ 
+     Vector paths = new Vector();
+ 
+     // we have intersecting points.
+     Vector segments = new Vector();
+ 
+     // In an intersection operation, we keep all
+     // segments of A within B and all B within A
+     // (The rest must be redundant)
+     // We outsideness-test only one segment in each path
+     // and the segments before and after any node
+     for (int i = 0; i < pathA.size(); i++)
+       {
+ 	Segment v = (Segment) pathA.elementAt(i);
+ 	Segment path = v;
+ 	if (! v.isSegmentOutside(area) && v.node == null)
+ 	  segments.add(v);
+ 	boolean node = false;
+ 	do
+ 	  {
+ 	    if ((v.node != null || node))
+ 	      {
+ 		node = (v.node != null);
+ 		if (! v.isSegmentOutside(area))
+ 		  segments.add(v);
+ 	      }
+ 	    v = v.next;
+ 	  }
+ 	while (v != path);
+       }
+ 
+     for (int i = 0; i < pathB.size(); i++)
+       {
+ 	Segment v = (Segment) pathB.elementAt(i);
+ 	Segment path = v;
+ 	if (! v.isSegmentOutside(this) && v.node == null)
+ 	  segments.add(v);
+ 	v = v.next;
+ 	boolean node = false;
+ 	do
+ 	  {
+ 	    if ((v.node != null || node))
+ 	      {
+ 		node = (v.node != null);
+ 		if (! v.isSegmentOutside(this))
+ 		  segments.add(v);
+ 	      }
+ 	    v = v.next;
+ 	  }
+ 	while (v != path);
+       }
+ 
+     paths = weilerAtherton(segments);
+     deleteRedundantPaths(paths);
+   }
+ 
+   /**
+    * Performs an exclusive-or operation on this Area.<BR>
+    * @param area - the area to be XORed with this area.
+    * @throws NullPointerException if <code>area</code> is <code>null</code>.
+    */
+   public void exclusiveOr(Area area)
+   {
+     if (area.isEmpty())
+       return;
+ 
+     if (isEmpty())
+       {
+ 	Area B = (Area) area.clone();
+ 	solids = B.solids;
+ 	holes = B.holes;
+ 	return;
+       }
+     if (equals(area))
+       {
+ 	reset();
+ 	return;
+       }
+ 
+     Vector pathA = new Vector();
+ 
+     Area B = (Area) area.clone();
+     Vector pathB = new Vector();
+     pathA.addAll(solids);
+     pathA.addAll(holes);
+ 
+     // reverse the directions of B paths.
+     setDirection(B.holes, true);
+     setDirection(B.solids, false);
+     pathB.addAll(B.solids);
+     pathB.addAll(B.holes);
+ 
+     int nNodes = 0;
+ 
+     for (int i = 0; i < pathA.size(); i++)
+       {
+ 	Segment a = (Segment) pathA.elementAt(i);
+ 	for (int j = 0; j < pathB.size(); j++)
+ 	  {
+ 	    Segment b = (Segment) pathB.elementAt(j);
+ 	    nNodes += createNodes(a, b);
+ 	  }
+       }
+ 
+     Vector paths = new Vector();
+     Segment v;
+ 
+     // we have intersecting points.
+     Vector segments = new Vector();
+ 
+     // In an XOR operation, we operate on all segments
+     for (int i = 0; i < pathA.size(); i++)
+       {
+ 	v = (Segment) pathA.elementAt(i);
+ 	Segment path = v;
+ 	do
+ 	  {
+ 	    segments.add(v);
+ 	    v = v.next;
+ 	  }
+ 	while (v != path);
+       }
+ 
+     for (int i = 0; i < pathB.size(); i++)
+       {
+ 	v = (Segment) pathB.elementAt(i);
+ 	Segment path = v;
+ 	do
+ 	  {
+ 	    segments.add(v);
+ 	    v = v.next;
+ 	  }
+ 	while (v != path);
+       }
+ 
+     paths = weilerAtherton(segments);
+     deleteRedundantPaths(paths);
+   }
+ 
+   /**
+    * Clears the Area object, creating an empty area.
+    */
+   public void reset()
+   {
+     solids = new Vector();
+     holes = new Vector();
+   }
+ 
+   /**
+    * Returns whether this area encloses any area.
+    * @return true if the object encloses any area.
+    */
+   public boolean isEmpty()
+   {
+     if (solids.size() == 0)
+       return true;
+ 
+     double totalArea = 0;
+     for (int i = 0; i < solids.size(); i++)
+       totalArea += Math.abs(((Segment) solids.elementAt(i)).getSignedArea());
+     for (int i = 0; i < holes.size(); i++)
+       totalArea -= Math.abs(((Segment) holes.elementAt(i)).getSignedArea());
+     if (totalArea <= EPSILON)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Determines whether the Area consists entirely of line segments
+    * @return true if the Area lines-only, false otherwise
+    */
+   public boolean isPolygonal()
+   {
+     for (int i = 0; i < holes.size(); i++)
+       if (! ((Segment) holes.elementAt(i)).isPolygonal())
+ 	return false;
+     for (int i = 0; i < solids.size(); i++)
+       if (! ((Segment) solids.elementAt(i)).isPolygonal())
+ 	return false;
+     return true;
+   }
+ 
+   /**
+    * Determines if the Area is rectangular.<P>
+    *
+    * This is strictly qualified. An area is considered rectangular if:<BR>
+    * <li>It consists of a single polygonal path.<BR>
+    * <li>It is oriented parallel/perpendicular to the xy axis<BR>
+    * <li>It must be exactly rectangular, i.e. small errors induced by
+    * transformations may cause a false result, although the area is
+    * visibly rectangular.<P>
+    * @return true if the above criteria are met, false otherwise
+    */
+   public boolean isRectangular()
+   {
+     if (isEmpty())
+       return true;
+ 
+     if (holes.size() != 0 || solids.size() != 1)
+       return false;
+ 
+     Segment path = (Segment) solids.elementAt(0);
+     if (! path.isPolygonal())
+       return false;
+ 
+     int nCorners = 0;
+     Segment s = path;
+     do
+       {
+ 	Segment s2 = s.next;
+ 	double d1 = (s.P2.getX() - s.P1.getX())*(s2.P2.getX() - s2.P1.getX())/
+ 	    ((s.P1.distance(s.P2)) * (s2.P1.distance(s2.P2)));
+ 	double d2 = (s.P2.getY() - s.P1.getY())*(s2.P2.getY() - s2.P1.getY())/ 
+ 	    ((s.P1.distance(s.P2)) * (s2.P1.distance(s2.P2)));
+ 	double dotproduct = d1 + d2;
+ 
+ 	// For some reason, only rectangles on the XY axis count.
+ 	if (d1 != 0 && d2 != 0)
+ 	  return false;
+ 
+ 	if (Math.abs(dotproduct) == 0) // 90 degree angle
+ 	  nCorners++;
+ 	else if ((Math.abs(1.0 - dotproduct) > 0)) // 0 degree angle?
+ 	  return false; // if not, return false
+ 
+ 	s = s.next;
+       }
+     while (s != path);
+ 
+     return nCorners == 4;
+   }
+ 
+   /**
+    * Returns whether the Area consists of more than one simple
+    * (non self-intersecting) subpath.
+    *
+    * @return true if the Area consists of none or one simple subpath,
+    * false otherwise.
+    */
+   public boolean isSingular()
+   {
+     return (holes.size() == 0 && solids.size() <= 1);
+   }
+ 
+   /**
+    * Returns the bounding box of the Area.<P> Unlike the CubicCurve2D and
+    * QuadraticCurve2D classes, this method will return the tightest possible
+    * bounding box, evaluating the extreme points of each curved segment.<P>
+    * @return the bounding box
+    */
+   public Rectangle2D getBounds2D()
+   {
+     if (solids.size() == 0)
+       return new Rectangle2D.Double(0.0, 0.0, 0.0, 0.0);
+ 
+     double xmin;
+     double xmax;
+     double ymin;
+     double ymax;
+     xmin = xmax = ((Segment) solids.elementAt(0)).P1.getX();
+     ymin = ymax = ((Segment) solids.elementAt(0)).P1.getY();
+ 
+     for (int path = 0; path < solids.size(); path++)
+       {
+ 	Rectangle2D r = ((Segment) solids.elementAt(path)).getPathBounds();
+ 	xmin = Math.min(r.getMinX(), xmin);
+ 	ymin = Math.min(r.getMinY(), ymin);
+ 	xmax = Math.max(r.getMaxX(), xmax);
+ 	ymax = Math.max(r.getMaxY(), ymax);
+       }
+ 
+     return (new Rectangle2D.Double(xmin, ymin, (xmax - xmin), (ymax - ymin)));
+   }
+ 
+   /**
+    * Returns the bounds of this object in Rectangle format.
+    * Please note that this may lead to loss of precision.
+    * 
+    * @return The bounds.
+    * @see #getBounds2D()
+    */
+   public Rectangle getBounds()
+   {
+     return getBounds2D().getBounds();
+   }
+ 
+   /**
+    * Create a new area of the same run-time type with the same contents as
+    * this one.
+    *
+    * @return the clone
+    */
+   public Object clone()
+   {
+     try
+       {
+ 	Area clone = new Area();
+ 	for (int i = 0; i < solids.size(); i++)
+ 	  clone.solids.add(((Segment) solids.elementAt(i)).cloneSegmentList());
+ 	for (int i = 0; i < holes.size(); i++)
+ 	  clone.holes.add(((Segment) holes.elementAt(i)).cloneSegmentList());
+ 	return clone;
+       }
+     catch (CloneNotSupportedException e)
+       {
+ 	throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ 
+   /**
+    * Compares two Areas.
+    * 
+    * @param area  the area to compare against this area (<code>null</code>
+    *              permitted).
+    * @return <code>true</code> if the areas are equal, and <code>false</code>
+    *         otherwise.
+    */
+   public boolean equals(Area area)
+   {
+     if (area == null)
+       return false;
+ 
+     if (! getBounds2D().equals(area.getBounds2D()))
+       return false;
+ 
+     if (solids.size() != area.solids.size()
+         || holes.size() != area.holes.size())
+       return false;
+ 
+     Vector pathA = new Vector();
+     pathA.addAll(solids);
+     pathA.addAll(holes);
+     Vector pathB = new Vector();
+     pathB.addAll(area.solids);
+     pathB.addAll(area.holes);
+ 
+     int nPaths = pathA.size();
+     boolean[][] match = new boolean[2][nPaths];
+ 
+     for (int i = 0; i < nPaths; i++)
+       {
+ 	for (int j = 0; j < nPaths; j++)
+ 	  {
+ 	    Segment p1 = (Segment) pathA.elementAt(i);
+ 	    Segment p2 = (Segment) pathB.elementAt(j);
+ 	    if (! match[0][i] && ! match[1][j])
+ 	      if (p1.pathEquals(p2))
+ 		match[0][i] = match[1][j] = true;
+ 	  }
+       }
+ 
+     boolean result = true;
+     for (int i = 0; i < nPaths; i++)
+       result = result && match[0][i] && match[1][i];
+     return result;
+   }
+ 
+   /**
+    * Transforms this area by the AffineTransform at.
+    * 
+    * @param at  the transform.
+    */
+   public void transform(AffineTransform at)
+   {
+     for (int i = 0; i < solids.size(); i++)
+       ((Segment) solids.elementAt(i)).transformSegmentList(at);
+     for (int i = 0; i < holes.size(); i++)
+       ((Segment) holes.elementAt(i)).transformSegmentList(at);
+ 
+     // Note that the orientation is not invariant under inversion
+     if ((at.getType() & AffineTransform.TYPE_FLIP) != 0)
+       {
+ 	setDirection(holes, false);
+ 	setDirection(solids, true);
+       }
+   }
+ 
+   /**
+    * Returns a new Area equal to this one, transformed
+    * by the AffineTransform at.
+    * @param at  the transform.
+    * @return the transformed area
+    * @throws NullPointerException if <code>at</code> is <code>null</code>.
+    */
+   public Area createTransformedArea(AffineTransform at)
+   {
+     Area a = (Area) clone();
+     a.transform(at);
+     return a;
+   }
+ 
+   /**
+    * Determines if the point (x,y) is contained within this Area.
+    *
+    * @param x the x-coordinate of the point.
+    * @param y the y-coordinate of the point.
+    * @return true if the point is contained, false otherwise.
+    */
+   public boolean contains(double x, double y)
+   {
+     int n = 0;
+     for (int i = 0; i < solids.size(); i++)
+       if (((Segment) solids.elementAt(i)).contains(x, y))
+ 	n++;
+ 
+     for (int i = 0; i < holes.size(); i++)
+       if (((Segment) holes.elementAt(i)).contains(x, y))
+ 	n--;
+ 
+     return (n != 0);
+   }
+ 
+   /**
+    * Determines if the Point2D p is contained within this Area.
+    *
+    * @param p the point.
+    * @return <code>true</code> if the point is contained, <code>false</code> 
+    *         otherwise.
+    * @throws NullPointerException if <code>p</code> is <code>null</code>.
+    */
+   public boolean contains(Point2D p)
+   {
+     return contains(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Determines if the rectangle specified by (x,y) as the upper-left
+    * and with width w and height h is completely contained within this Area,
+    * returns false otherwise.<P>
+    *
+    * This method should always produce the correct results, unlike for other
+    * classes in geom.
+    * 
+    * @param x the x-coordinate of the rectangle.
+    * @param y the y-coordinate of the rectangle.
+    * @param w the width of the the rectangle.
+    * @param h the height of the rectangle.
+    * @return <code>true</code> if the rectangle is considered contained
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     LineSegment[] l = new LineSegment[4];
+     l[0] = new LineSegment(x, y, x + w, y);
+     l[1] = new LineSegment(x, y + h, x + w, y + h);
+     l[2] = new LineSegment(x, y, x, y + h);
+     l[3] = new LineSegment(x + w, y, x + w, y + h);
+ 
+     // Since every segment in the area must a contour
+     // between inside/outside segments, ANY intersection
+     // will mean the rectangle is not entirely contained.
+     for (int i = 0; i < 4; i++)
+       {
+ 	for (int path = 0; path < solids.size(); path++)
+ 	  {
+ 	    Segment v;
+ 	    Segment start;
+ 	    start = v = (Segment) solids.elementAt(path);
+ 	    do
+ 	      {
+ 		if (l[i].hasIntersections(v))
+ 		  return false;
+ 		v = v.next;
+ 	      }
+ 	    while (v != start);
+ 	  }
+ 	for (int path = 0; path < holes.size(); path++)
+ 	  {
+ 	    Segment v;
+ 	    Segment start;
+ 	    start = v = (Segment) holes.elementAt(path);
+ 	    do
+ 	      {
+ 		if (l[i].hasIntersections(v))
+ 		  return false;
+ 		v = v.next;
+ 	      }
+ 	    while (v != start);
+ 	  }
+       }
+ 
+     // Is any point inside?
+     if (! contains(x, y))
+       return false;
+ 
+     // Final hoop: Is the rectangle non-intersecting and inside, 
+     // but encloses a hole?
+     Rectangle2D r = new Rectangle2D.Double(x, y, w, h);
+     for (int path = 0; path < holes.size(); path++)
+       if (! ((Segment) holes.elementAt(path)).isSegmentOutside(r))
+         return false;
+ 
+     return true;
+   }
+ 
+   /**
+    * Determines if the Rectangle2D specified by r is completely contained
+    * within this Area, returns false otherwise.<P>
+    *
+    * This method should always produce the correct results, unlike for other
+    * classes in geom.
+    * 
+    * @param r the rectangle.
+    * @return <code>true</code> if the rectangle is considered contained
+    * 
+    * @throws NullPointerException if <code>r</code> is <code>null</code>.
+    */
+   public boolean contains(Rectangle2D r)
+   {
+     return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Determines if the rectangle specified by (x,y) as the upper-left
+    * and with width w and height h intersects any part of this Area.
+    * 
+    * @param x  the x-coordinate for the rectangle.
+    * @param y  the y-coordinate for the rectangle.
+    * @param w  the width of the rectangle.
+    * @param h  the height of the rectangle.
+    * @return <code>true</code> if the rectangle intersects the area, 
+    *         <code>false</code> otherwise.
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     if (solids.size() == 0)
+       return false;
+ 
+     LineSegment[] l = new LineSegment[4];
+     l[0] = new LineSegment(x, y, x + w, y);
+     l[1] = new LineSegment(x, y + h, x + w, y + h);
+     l[2] = new LineSegment(x, y, x, y + h);
+     l[3] = new LineSegment(x + w, y, x + w, y + h);
+ 
+     // Return true on any intersection
+     for (int i = 0; i < 4; i++)
+       {
+ 	for (int path = 0; path < solids.size(); path++)
+ 	  {
+ 	    Segment v;
+ 	    Segment start;
+ 	    start = v = (Segment) solids.elementAt(path);
+ 	    do
+ 	      {
+ 		if (l[i].hasIntersections(v))
+ 		  return true;
+ 		v = v.next;
+ 	      }
+ 	    while (v != start);
+ 	  }
+ 	for (int path = 0; path < holes.size(); path++)
+ 	  {
+ 	    Segment v;
+ 	    Segment start;
+ 	    start = v = (Segment) holes.elementAt(path);
+ 	    do
+ 	      {
+ 		if (l[i].hasIntersections(v))
+ 		  return true;
+ 		v = v.next;
+ 	      }
+ 	    while (v != start);
+ 	  }
+       }
+ 
+     // Non-intersecting, Is any point inside?
+     if (contains(x + w * 0.5, y + h * 0.5))
+       return true;
+ 
+     // What if the rectangle encloses the whole shape?
+     Point2D p = ((Segment) solids.elementAt(0)).getMidPoint();
+     if ((new Rectangle2D.Double(x, y, w, h)).contains(p))
+       return true;
+     return false;
+   }
+ 
+   /**
+    * Determines if the Rectangle2D specified by r intersects any
+    * part of this Area.
+    * @param r  the rectangle to test intersection with (<code>null</code>
+    *           not permitted).
+    * @return <code>true</code> if the rectangle intersects the area, 
+    *         <code>false</code> otherwise.
+    * @throws NullPointerException if <code>r</code> is <code>null</code>.
+    */
+   public boolean intersects(Rectangle2D r)
+   {
+     return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Returns a PathIterator object defining the contour of this Area,
+    * transformed by at.
+    * 
+    * @param at  the transform.
+    * @return A path iterator.
+    */
+   public PathIterator getPathIterator(AffineTransform at)
+   {
+     return (new AreaIterator(at));
+   }
+ 
+   /**
+    * Returns a flattened PathIterator object defining the contour of this
+    * Area, transformed by at and with a defined flatness.
+    * 
+    * @param at  the transform.
+    * @param flatness the flatness.
+    * @return A path iterator.
+    */
+   public PathIterator getPathIterator(AffineTransform at, double flatness)
+   {
+     return new FlatteningPathIterator(getPathIterator(at), flatness);
+   }
+ 
+   //---------------------------------------------------------------------
+   // Non-public methods and classes 
+ 
+   /**
+    * Private pathiterator object.
+    */
+   private class AreaIterator implements PathIterator
+   {
+     private Vector segments;
+     private int index;
+     private AffineTransform at;
+ 
+     // Simple compound type for segments
+     class IteratorSegment
+     {
+       int type;
+       double[] coords;
+ 
+       IteratorSegment()
+       {
+ 	coords = new double[6];
+       }
+     }
+ 
+     /**
+      * The contructor here does most of the work,
+      * creates a vector of IteratorSegments, which can
+      * readily be returned
+      */
+     public AreaIterator(AffineTransform at)
+     {
+       this.at = at;
+       index = 0;
+       segments = new Vector();
+       Vector allpaths = new Vector();
+       allpaths.addAll(solids);
+       allpaths.addAll(holes);
+ 
+       for (int i = 0; i < allpaths.size(); i++)
+         {
+ 	  Segment v = (Segment) allpaths.elementAt(i);
+ 	  Segment start = v;
+ 
+ 	  IteratorSegment is = new IteratorSegment();
+ 	  is.type = SEG_MOVETO;
+ 	  is.coords[0] = start.P1.getX();
+ 	  is.coords[1] = start.P1.getY();
+ 	  segments.add(is);
+ 
+ 	  do
+ 	    {
+ 	      is = new IteratorSegment();
+ 	      is.type = v.pathIteratorFormat(is.coords);
+ 	      segments.add(is);
+ 	      v = v.next;
+ 	    }
+ 	  while (v != start);
+ 
+ 	  is = new IteratorSegment();
+ 	  is.type = SEG_CLOSE;
+ 	  segments.add(is);
+         }
+     }
+ 
+     public int currentSegment(double[] coords)
+     {
+       IteratorSegment s = (IteratorSegment) segments.elementAt(index);
+       if (at != null)
+ 	at.transform(s.coords, 0, coords, 0, 3);
+       else
+ 	for (int i = 0; i < 6; i++)
+ 	  coords[i] = s.coords[i];
+       return (s.type);
+     }
+ 
+     public int currentSegment(float[] coords)
+     {
+       IteratorSegment s = (IteratorSegment) segments.elementAt(index);
+       double[] d = new double[6];
+       if (at != null)
+         {
+ 	  at.transform(s.coords, 0, d, 0, 3);
+ 	  for (int i = 0; i < 6; i++)
+ 	    coords[i] = (float) d[i];
+         }
+       else
+ 	for (int i = 0; i < 6; i++)
+ 	  coords[i] = (float) s.coords[i];
+       return (s.type);
+     }
+ 
+     // Note that the winding rule should not matter here,
+     // EVEN_ODD is chosen because it renders faster.
+     public int getWindingRule()
+     {
+       return (PathIterator.WIND_EVEN_ODD);
+     }
+ 
+     public boolean isDone()
+     {
+       return (index >= segments.size());
+     }
+ 
+     public void next()
+     {
+       index++;
+     }
+   }
+ 
+   /**
+    * Performs the fundamental task of the Weiler-Atherton algorithm,
+    * traverse a list of segments, for each segment:
+    * Follow it, removing segments from the list and switching paths
+    * at each node. Do so until the starting segment is reached.
+    *
+    * Returns a Vector of the resulting paths.
+    */
+   private Vector weilerAtherton(Vector segments)
+   {
+     Vector paths = new Vector();
+     while (segments.size() > 0)
+       {
+ 	// Iterate over the path
+ 	Segment start = (Segment) segments.elementAt(0);
+ 	Segment s = start;
+ 	do
+ 	  {
+ 	    segments.remove(s);
+ 	    if (s.node != null)
+ 	      { // switch over
+ 		s.next = s.node;
+ 		s.node = null;
+ 	      }
+ 	    s = s.next; // continue
+ 	  }
+ 	while (s != start);
+ 
+ 	paths.add(start);
+       }
+     return paths;
+   }
+ 
+   /**
+    * A small wrapper class to store intersection points
+    */
+   private class Intersection
+   {
+     Point2D p; // the 2D point of intersection
+     double ta; // the parametric value on a
+     double tb; // the parametric value on b
+     Segment seg; // segment placeholder for node setting
+ 
+     public Intersection(Point2D p, double ta, double tb)
+     {
+       this.p = p;
+       this.ta = ta;
+       this.tb = tb;
+     }
+   }
+ 
+   /**
+    * Returns the recursion depth necessary to approximate the
+    * curve by line segments within the error RS_EPSILON.
+    *
+    * This is done with Wang's formula:
+    * L0 = max{0<=i<=N-2}(|xi - 2xi+1 + xi+2|,|yi - 2yi+1 + yi+2|)
+    * r0 = log4(sqrt(2)*N*(N-1)*L0/8e)
+    * Where e is the maximum distance error (RS_EPSILON)
+    */
+   private int getRecursionDepth(CubicSegment curve)
+   {
+     double x0 = curve.P1.getX();
+     double y0 = curve.P1.getY();
+ 
+     double x1 = curve.cp1.getX();
+     double y1 = curve.cp1.getY();
+ 
+     double x2 = curve.cp2.getX();
+     double y2 = curve.cp2.getY();
+ 
+     double x3 = curve.P2.getX();
+     double y3 = curve.P2.getY();
+ 
+     double L0 = Math.max(Math.max(Math.abs(x0 - 2 * x1 + x2),
+                                   Math.abs(x1 - 2 * x2 + x3)),
+                          Math.max(Math.abs(y0 - 2 * y1 + y2),
+                                   Math.abs(y1 - 2 * y2 + y3)));
+ 
+     double f = Math.sqrt(2) * 6.0 * L0 / (8.0 * RS_EPSILON);
+ 
+     int r0 = (int) Math.ceil(Math.log(f) / Math.log(4.0));
+     return (r0);
+   }
+ 
+   /**
+    * Performs recursive subdivision:
+    * @param c1 - curve 1
+    * @param c2 - curve 2
+    * @param depth1 - recursion depth of curve 1
+    * @param depth2 - recursion depth of curve 2
+    * @param t1 - global parametric value of the first curve's starting point
+    * @param t2 - global parametric value of the second curve's starting point
+    * @param w1 - global parametric length of curve 1
+    * @param w2 - global parametric length of curve 2
+    *
+    * The final four parameters are for keeping track of the parametric
+    * value of the curve. For a full curve t = 0, w = 1, w is halved with
+    * each subdivision.
+    */
+   private void recursiveSubdivide(CubicCurve2D c1, CubicCurve2D c2,
+                                   int depth1, int depth2, double t1,
+                                   double t2, double w1, double w2)
+   {
+     boolean flat1 = depth1 <= 0;
+     boolean flat2 = depth2 <= 0;
+ 
+     if (flat1 && flat2)
+       {
+ 	double xlk = c1.getP2().getX() - c1.getP1().getX();
+ 	double ylk = c1.getP2().getY() - c1.getP1().getY();
+ 
+ 	double xnm = c2.getP2().getX() - c2.getP1().getX();
+ 	double ynm = c2.getP2().getY() - c2.getP1().getY();
+ 
+ 	double xmk = c2.getP1().getX() - c1.getP1().getX();
+ 	double ymk = c2.getP1().getY() - c1.getP1().getY();
+ 	double det = xnm * ylk - ynm * xlk;
+ 
+ 	if (det + 1.0 == 1.0)
+ 	  return;
+ 
+ 	double detinv = 1.0 / det;
+ 	double s = (xnm * ymk - ynm * xmk) * detinv;
+ 	double t = (xlk * ymk - ylk * xmk) * detinv;
+ 	if ((s < 0.0) || (s > 1.0) || (t < 0.0) || (t > 1.0))
+ 	  return;
+ 
+ 	double[] temp = new double[2];
+ 	temp[0] = t1 + s * w1;
+ 	temp[1] = t2 + t * w1;
+ 	cc_intersections.add(temp);
+ 	return;
+       }
+ 
+     CubicCurve2D.Double c11 = new CubicCurve2D.Double();
+     CubicCurve2D.Double c12 = new CubicCurve2D.Double();
+     CubicCurve2D.Double c21 = new CubicCurve2D.Double();
+     CubicCurve2D.Double c22 = new CubicCurve2D.Double();
+ 
+     if (! flat1 && ! flat2)
+       {
+ 	depth1--;
+ 	depth2--;
+ 	w1 = w1 * 0.5;
+ 	w2 = w2 * 0.5;
+ 	c1.subdivide(c11, c12);
+ 	c2.subdivide(c21, c22);
+ 	if (c11.getBounds2D().intersects(c21.getBounds2D()))
+ 	  recursiveSubdivide(c11, c21, depth1, depth2, t1, t2, w1, w2);
+ 	if (c11.getBounds2D().intersects(c22.getBounds2D()))
+ 	  recursiveSubdivide(c11, c22, depth1, depth2, t1, t2 + w2, w1, w2);
+ 	if (c12.getBounds2D().intersects(c21.getBounds2D()))
+ 	  recursiveSubdivide(c12, c21, depth1, depth2, t1 + w1, t2, w1, w2);
+ 	if (c12.getBounds2D().intersects(c22.getBounds2D()))
+ 	  recursiveSubdivide(c12, c22, depth1, depth2, t1 + w1, t2 + w2, w1, w2);
+ 	return;
+       }
+ 
+     if (! flat1)
+       {
+ 	depth1--;
+ 	c1.subdivide(c11, c12);
+ 	w1 = w1 * 0.5;
+ 	if (c11.getBounds2D().intersects(c2.getBounds2D()))
+ 	  recursiveSubdivide(c11, c2, depth1, depth2, t1, t2, w1, w2);
+ 	if (c12.getBounds2D().intersects(c2.getBounds2D()))
+ 	  recursiveSubdivide(c12, c2, depth1, depth2, t1 + w1, t2, w1, w2);
+ 	return;
+       }
+ 
+     depth2--;
+     c2.subdivide(c21, c22);
+     w2 = w2 * 0.5;
+     if (c1.getBounds2D().intersects(c21.getBounds2D()))
+       recursiveSubdivide(c1, c21, depth1, depth2, t1, t2, w1, w2);
+     if (c1.getBounds2D().intersects(c22.getBounds2D()))
+       recursiveSubdivide(c1, c22, depth1, depth2, t1, t2 + w2, w1, w2);
+   }
+ 
+   /**
+    * Returns a set of interesections between two Cubic segments
+    * Or null if no intersections were found.
+    *
+    * The method used to find the intersection is recursive midpoint
+    * subdivision. Outline description:
+    *
+    * 1) Check if the bounding boxes of the curves intersect,
+    * 2) If so, divide the curves in the middle and test the bounding
+    * boxes again,
+    * 3) Repeat until a maximum recursion depth has been reached, where
+    * the intersecting curves can be approximated by line segments.
+    *
+    * This is a reasonably accurate method, although the recursion depth
+    * is typically around 20, the bounding-box tests allow for significant
+    * pruning of the subdivision tree.
+    * 
+    * This is package-private to avoid an accessor method.
+    */
+   Intersection[] cubicCubicIntersect(CubicSegment curve1, CubicSegment curve2)
+   {
+     Rectangle2D r1 = curve1.getBounds();
+     Rectangle2D r2 = curve2.getBounds();
+ 
+     if (! r1.intersects(r2))
+       return null;
+ 
+     cc_intersections = new Vector();
+     recursiveSubdivide(curve1.getCubicCurve2D(), curve2.getCubicCurve2D(),
+                        getRecursionDepth(curve1), getRecursionDepth(curve2),
+                        0.0, 0.0, 1.0, 1.0);
+ 
+     if (cc_intersections.size() == 0)
+       return null;
+ 
+     Intersection[] results = new Intersection[cc_intersections.size()];
+     for (int i = 0; i < cc_intersections.size(); i++)
+       {
+ 	double[] temp = (double[]) cc_intersections.elementAt(i);
+ 	results[i] = new Intersection(curve1.evaluatePoint(temp[0]), temp[0],
+ 	                              temp[1]);
+       }
+     cc_intersections = null;
+     return (results);
+   }
+ 
+   /**
+    * Returns the intersections between a line and a quadratic bezier
+    * Or null if no intersections are found1
+    * This is done through combining the line's equation with the
+    * parametric form of the Bezier and solving the resulting quadratic.
+    * This is package-private to avoid an accessor method.
+    */
+   Intersection[] lineQuadIntersect(LineSegment l, QuadSegment c)
+   {
+     double[] y = new double[3];
+     double[] x = new double[3];
+     double[] r = new double[3];
+     int nRoots;
+     double x0 = c.P1.getX();
+     double y0 = c.P1.getY();
+     double x1 = c.cp.getX();
+     double y1 = c.cp.getY();
+     double x2 = c.P2.getX();
+     double y2 = c.P2.getY();
+ 
+     double lx0 = l.P1.getX();
+     double ly0 = l.P1.getY();
+     double lx1 = l.P2.getX();
+     double ly1 = l.P2.getY();
+     double dx = lx1 - lx0;
+     double dy = ly1 - ly0;
+ 
+     // form r(t) = y(t) - x(t) for the bezier
+     y[0] = y0;
+     y[1] = 2 * (y1 - y0);
+     y[2] = (y2 - 2 * y1 + y0);
+ 
+     x[0] = x0;
+     x[1] = 2 * (x1 - x0);
+     x[2] = (x2 - 2 * x1 + x0);
+ 
+     // a point, not a line
+     if (dy == 0 && dx == 0)
+       return null;
+ 
+     // line on y axis
+     if (dx == 0 || (dy / dx) > 1.0)
+       {
+ 	double k = dx / dy;
+ 	x[0] -= lx0;
+ 	y[0] -= ly0;
+ 	y[0] *= k;
+ 	y[1] *= k;
+ 	y[2] *= k;
+       }
+     else
+       {
+ 	double k = dy / dx;
+ 	x[0] -= lx0;
+ 	y[0] -= ly0;
+ 	x[0] *= k;
+ 	x[1] *= k;
+ 	x[2] *= k;
+       }
+ 
+     for (int i = 0; i < 3; i++)
+       r[i] = y[i] - x[i];
+ 
+     if ((nRoots = QuadCurve2D.solveQuadratic(r)) > 0)
+       {
+ 	Intersection[] temp = new Intersection[nRoots];
+ 	int intersections = 0;
+ 	for (int i = 0; i < nRoots; i++)
+ 	  {
+ 	    double t = r[i];
+ 	    if (t >= 0.0 && t <= 1.0)
+ 	      {
+ 		Point2D p = c.evaluatePoint(t);
+ 
+ 		// if the line is on an axis, snap the point to that axis.
+ 		if (dx == 0)
+ 		  p.setLocation(lx0, p.getY());
+ 		if (dy == 0)
+ 		  p.setLocation(p.getX(), ly0);
+ 
+ 		if (p.getX() <= Math.max(lx0, lx1)
+ 		    && p.getX() >= Math.min(lx0, lx1)
+ 		    && p.getY() <= Math.max(ly0, ly1)
+ 		    && p.getY() >= Math.min(ly0, ly1))
+ 		  {
+ 		    double lineparameter = p.distance(l.P1) / l.P2.distance(l.P1);
+ 		    temp[i] = new Intersection(p, lineparameter, t);
+ 		    intersections++;
+ 		  }
+ 	      }
+ 	    else
+ 	      temp[i] = null;
+ 	  }
+ 	if (intersections == 0)
+ 	  return null;
+ 
+ 	Intersection[] rValues = new Intersection[intersections];
+ 
+ 	for (int i = 0; i < nRoots; i++)
+ 	  if (temp[i] != null)
+ 	    rValues[--intersections] = temp[i];
+ 	return (rValues);
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns the intersections between a line and a cubic segment
+    * This is done through combining the line's equation with the
+    * parametric form of the Bezier and solving the resulting quadratic.
+    * This is package-private to avoid an accessor method. 
+    */
+   Intersection[] lineCubicIntersect(LineSegment l, CubicSegment c)
+   {
+     double[] y = new double[4];
+     double[] x = new double[4];
+     double[] r = new double[4];
+     int nRoots;
+     double x0 = c.P1.getX();
+     double y0 = c.P1.getY();
+     double x1 = c.cp1.getX();
+     double y1 = c.cp1.getY();
+     double x2 = c.cp2.getX();
+     double y2 = c.cp2.getY();
+     double x3 = c.P2.getX();
+     double y3 = c.P2.getY();
+ 
+     double lx0 = l.P1.getX();
+     double ly0 = l.P1.getY();
+     double lx1 = l.P2.getX();
+     double ly1 = l.P2.getY();
+     double dx = lx1 - lx0;
+     double dy = ly1 - ly0;
+ 
+     // form r(t) = y(t) - x(t) for the bezier
+     y[0] = y0;
+     y[1] = 3 * (y1 - y0);
+     y[2] = 3 * (y2 + y0 - 2 * y1);
+     y[3] = y3 - 3 * y2 + 3 * y1 - y0;
+ 
+     x[0] = x0;
+     x[1] = 3 * (x1 - x0);
+     x[2] = 3 * (x2 + x0 - 2 * x1);
+     x[3] = x3 - 3 * x2 + 3 * x1 - x0;
+ 
+     // a point, not a line
+     if (dy == 0 && dx == 0)
+       return null;
+ 
+     // line on y axis
+     if (dx == 0 || (dy / dx) > 1.0)
+       {
+ 	double k = dx / dy;
+ 	x[0] -= lx0;
+ 	y[0] -= ly0;
+ 	y[0] *= k;
+ 	y[1] *= k;
+ 	y[2] *= k;
+ 	y[3] *= k;
+       }
+     else
+       {
+ 	double k = dy / dx;
+ 	x[0] -= lx0;
+ 	y[0] -= ly0;
+ 	x[0] *= k;
+ 	x[1] *= k;
+ 	x[2] *= k;
+ 	x[3] *= k;
+       }
+     for (int i = 0; i < 4; i++)
+       r[i] = y[i] - x[i];
+ 
+     if ((nRoots = CubicCurve2D.solveCubic(r)) > 0)
+       {
+ 	Intersection[] temp = new Intersection[nRoots];
+ 	int intersections = 0;
+ 	for (int i = 0; i < nRoots; i++)
+ 	  {
+ 	    double t = r[i];
+ 	    if (t >= 0.0 && t <= 1.0)
+ 	      {
+ 		// if the line is on an axis, snap the point to that axis.
+ 		Point2D p = c.evaluatePoint(t);
+ 		if (dx == 0)
+ 		  p.setLocation(lx0, p.getY());
+ 		if (dy == 0)
+ 		  p.setLocation(p.getX(), ly0);
+ 
+ 		if (p.getX() <= Math.max(lx0, lx1)
+ 		    && p.getX() >= Math.min(lx0, lx1)
+ 		    && p.getY() <= Math.max(ly0, ly1)
+ 		    && p.getY() >= Math.min(ly0, ly1))
+ 		  {
+ 		    double lineparameter = p.distance(l.P1) / l.P2.distance(l.P1);
+ 		    temp[i] = new Intersection(p, lineparameter, t);
+ 		    intersections++;
+ 		  }
+ 	      }
+ 	    else
+ 	      temp[i] = null;
+ 	  }
+ 
+ 	if (intersections == 0)
+ 	  return null;
+ 
+ 	Intersection[] rValues = new Intersection[intersections];
+ 	for (int i = 0; i < nRoots; i++)
+ 	  if (temp[i] != null)
+ 	    rValues[--intersections] = temp[i];
+ 	return (rValues);
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns the intersection between two lines, or null if there is no
+    * intersection.
+    * This is package-private to avoid an accessor method.
+    */
+   Intersection linesIntersect(LineSegment a, LineSegment b)
+   {
+     Point2D P1 = a.P1;
+     Point2D P2 = a.P2;
+     Point2D P3 = b.P1;
+     Point2D P4 = b.P2;
+ 
+     if (! Line2D.linesIntersect(P1.getX(), P1.getY(), P2.getX(), P2.getY(),
+                                 P3.getX(), P3.getY(), P4.getX(), P4.getY()))
+       return null;
+ 
+     double x1 = P1.getX();
+     double y1 = P1.getY();
+     double rx = P2.getX() - x1;
+     double ry = P2.getY() - y1;
+ 
+     double x2 = P3.getX();
+     double y2 = P3.getY();
+     double sx = P4.getX() - x2;
+     double sy = P4.getY() - y2;
+ 
+     double determinant = sx * ry - sy * rx;
+     double nom = (sx * (y2 - y1) + sy * (x1 - x2));
+ 
+     // Parallel lines don't intersect. At least we pretend they don't.
+     if (Math.abs(determinant) < EPSILON)
+       return null;
+ 
+     nom = nom / determinant;
+ 
+     if (nom == 0.0)
+       return null;
+     if (nom == 1.0)
+       return null;
+ 
+     Point2D p = new Point2D.Double(x1 + nom * rx, y1 + nom * ry);
+ 
+     return new Intersection(p, p.distance(P1) / P1.distance(P2),
+                             p.distance(P3) / P3.distance(P4));
+   }
+ 
+   /**
+    * Determines if two points are equal, within an error margin
+    * 'snap distance'
+    * This is package-private to avoid an accessor method.
+    */
+   boolean pointEquals(Point2D a, Point2D b)
+   {
+     return (a.equals(b) || a.distance(b) < PE_EPSILON);
+   }
+ 
+   /**
+    * Helper method
+    * Turns a shape into a Vector of Segments
+    */
+   private Vector makeSegment(Shape s)
+   {
+     Vector paths = new Vector();
+     PathIterator pi = s.getPathIterator(null);
+     double[] coords = new double[6];
+     Segment subpath = null;
+     Segment current = null;
+     double cx;
+     double cy;
+     double subpathx;
+     double subpathy;
+     cx = cy = subpathx = subpathy = 0.0;
+ 
+     this.windingRule = pi.getWindingRule();
+ 
+     while (! pi.isDone())
+       {
+ 	Segment v;
+ 	switch (pi.currentSegment(coords))
+ 	  {
+ 	  case PathIterator.SEG_MOVETO:
+ 	    if (subpath != null)
+ 	      { // close existing open path
+ 		current.next = new LineSegment(cx, cy, subpathx, subpathy);
+ 		current = current.next;
+ 		current.next = subpath;
+ 	      }
+ 	    subpath = null;
+ 	    subpathx = cx = coords[0];
+ 	    subpathy = cy = coords[1];
+ 	    break;
+ 
+ 	  // replace 'close' with a line-to.
+ 	  case PathIterator.SEG_CLOSE:
+ 	    if (subpath != null && (subpathx != cx || subpathy != cy))
+ 	      {
+ 		current.next = new LineSegment(cx, cy, subpathx, subpathy);
+ 		current = current.next;
+ 		current.next = subpath;
+ 		cx = subpathx;
+ 		cy = subpathy;
+ 		subpath = null;
+ 	      }
+ 	    else if (subpath != null)
+ 	      {
+ 		current.next = subpath;
+ 		subpath = null;
+ 	      }
+ 	    break;
+ 	  case PathIterator.SEG_LINETO:
+ 	    if (cx != coords[0] || cy != coords[1])
+ 	      {
+ 		v = new LineSegment(cx, cy, coords[0], coords[1]);
+ 		if (subpath == null)
+ 		  {
+ 		    subpath = current = v;
+ 		    paths.add(subpath);
+ 		  }
+ 		else
+ 		  {
+ 		    current.next = v;
+ 		    current = current.next;
+ 		  }
+ 		cx = coords[0];
+ 		cy = coords[1];
+ 	      }
+ 	    break;
+ 	  case PathIterator.SEG_QUADTO:
+ 	    v = new QuadSegment(cx, cy, coords[0], coords[1], coords[2],
+ 	                        coords[3]);
+ 	    if (subpath == null)
+ 	      {
+ 		subpath = current = v;
+ 		paths.add(subpath);
+ 	      }
+ 	    else
+ 	      {
+ 		current.next = v;
+ 		current = current.next;
+ 	      }
+ 	    cx = coords[2];
+ 	    cy = coords[3];
+ 	    break;
+ 	  case PathIterator.SEG_CUBICTO:
+ 	    v = new CubicSegment(cx, cy, coords[0], coords[1], coords[2],
+ 	                         coords[3], coords[4], coords[5]);
+ 	    if (subpath == null)
+ 	      {
+ 		subpath = current = v;
+ 		paths.add(subpath);
+ 	      }
+ 	    else
+ 	      {
+ 		current.next = v;
+ 		current = current.next;
+ 	      }
+ 
+ 	    // check if the cubic is self-intersecting
+ 	    double[] lpts = ((CubicSegment) v).getLoop();
+ 	    if (lpts != null)
+ 	      {
+ 		// if it is, break off the loop into its own path.
+ 		v.subdivideInsert(lpts[0]);
+ 		v.next.subdivideInsert((lpts[1] - lpts[0]) / (1.0 - lpts[0]));
+ 
+ 		CubicSegment loop = (CubicSegment) v.next;
+ 		v.next = loop.next;
+ 		loop.next = loop;
+ 
+ 		v.P2 = v.next.P1 = loop.P2 = loop.P1; // snap points
+ 		paths.add(loop);
+ 		current = v.next;
+ 	      }
+ 
+ 	    cx = coords[4];
+ 	    cy = coords[5];
+ 	    break;
+ 	  }
+ 	pi.next();
+       }
+ 
+     if (subpath != null)
+       { // close any open path
+ 	if (subpathx != cx || subpathy != cy)
+ 	  {
+ 	    current.next = new LineSegment(cx, cy, subpathx, subpathy);
+ 	    current = current.next;
+ 	    current.next = subpath;
+ 	  }
+ 	else
+ 	  current.next = subpath;
+       }
+ 
+     if (paths.size() == 0)
+       return (null);
+ 
+     return (paths);
+   }
+ 
+   /**
+    * Find the intersections of two separate closed paths,
+    * A and B, split the segments at the intersection points,
+    * and create nodes pointing from one to the other
+    */
+   private int createNodes(Segment A, Segment B)
+   {
+     int nNodes = 0;
+ 
+     Segment a = A;
+     Segment b = B;
+ 
+     do
+       {
+ 	do
+ 	  {
+ 	    nNodes += a.splitIntersections(b);
+ 	    b = b.next;
+ 	  }
+ 	while (b != B);
+ 
+ 	a = a.next; // move to the next segment
+       }
+     while (a != A); // until one wrap.
+ 
+     return (nNodes);
+   }
+ 
+   /**
+    * Find the intersections of a path with itself.
+    * Splits the segments at the intersection points,
+    * and create nodes pointing from one to the other.
+    */
+   private int createNodesSelf(Segment A)
+   {
+     int nNodes = 0;
+     Segment a = A;
+ 
+     if (A.next == A)
+       return 0;
+ 
+     do
+       {
+ 	Segment b = a.next;
+ 	do
+ 	  {
+ 	    if (b != a) // necessary
+ 	      nNodes += a.splitIntersections(b);
+ 	    b = b.next;
+ 	  }
+ 	while (b != A);
+ 	a = a.next; // move to the next segment
+       }
+     while (a != A); // until one wrap.
+ 
+     return (nNodes);
+   }
+ 
+   /**
+    * Deletes paths which are redundant from a list, (i.e. solid areas within
+    * solid areas) Clears any nodes. Sorts the remaining paths into solids
+    * and holes, sets their orientation and sets the solids and holes lists.
+    */
+   private void deleteRedundantPaths(Vector paths)
+   {
+     int npaths = paths.size();
+ 
+     int[][] contains = new int[npaths][npaths];
+     int[][] windingNumbers = new int[npaths][2];
+     int neg;
+     Rectangle2D[] bb = new Rectangle2D[npaths]; // path bounding boxes
+ 
+     neg = ((windingRule == PathIterator.WIND_NON_ZERO) ? -1 : 1);
+ 
+     for (int i = 0; i < npaths; i++)
+       bb[i] = ((Segment) paths.elementAt(i)).getPathBounds();
+ 
+     // Find which path contains which, assign winding numbers
+     for (int i = 0; i < npaths; i++)
+       {
+ 	Segment pathA = (Segment) paths.elementAt(i);
+ 	pathA.nullNodes(); // remove any now-redundant nodes, in case.
+ 	int windingA = pathA.hasClockwiseOrientation() ? 1 : neg;
+ 
+ 	for (int j = 0; j < npaths; j++)
+ 	  if (i != j)
+ 	    {
+ 	      Segment pathB = (Segment) paths.elementAt(j);
+ 
+ 	      // A contains B
+ 	      if (bb[i].intersects(bb[j]))
+ 	        {
+ 		  Segment s = pathB.next;
+ 		  while (s.P1.getY() == s.P2.getY() && s != pathB)
+ 		    s = s.next;
+ 		  Point2D p = s.getMidPoint();
+ 		  if (pathA.contains(p.getX(), p.getY()))
+ 		    contains[i][j] = windingA;
+ 	        }
+ 	      else
+ 		// A does not contain B
+ 		contains[i][j] = 0;
+ 	    }
+ 	  else
+ 	    contains[i][j] = windingA; // i == j
+       }
+ 
+     for (int i = 0; i < npaths; i++)
+       {
+ 	windingNumbers[i][0] = 0;
+ 	for (int j = 0; j < npaths; j++)
+ 	  windingNumbers[i][0] += contains[j][i];
+ 	windingNumbers[i][1] = contains[i][i];
+       }
+ 
+     Vector solids = new Vector();
+     Vector holes = new Vector();
+ 
+     if (windingRule == PathIterator.WIND_NON_ZERO)
+       {
+ 	for (int i = 0; i < npaths; i++)
+ 	  {
+ 	    if (windingNumbers[i][0] == 0)
+ 	      holes.add(paths.elementAt(i));
+ 	    else if (windingNumbers[i][0] - windingNumbers[i][1] == 0
+ 	             && Math.abs(windingNumbers[i][0]) == 1)
+ 	      solids.add(paths.elementAt(i));
+ 	  }
+       }
+     else
+       {
+ 	windingRule = PathIterator.WIND_NON_ZERO;
+ 	for (int i = 0; i < npaths; i++)
+ 	  {
+ 	    if ((windingNumbers[i][0] & 1) == 0)
+ 	      holes.add(paths.elementAt(i));
+ 	    else if ((windingNumbers[i][0] & 1) == 1)
+ 	      solids.add(paths.elementAt(i));
+ 	  }
+       }
+ 
+     setDirection(holes, false);
+     setDirection(solids, true);
+     this.holes = holes;
+     this.solids = solids;
+   }
+ 
+   /**
+    * Sets the winding direction of a Vector of paths
+    * @param clockwise gives the direction,
+    * true = clockwise, false = counter-clockwise
+    */
+   private void setDirection(Vector paths, boolean clockwise)
+   {
+     Segment v;
+     for (int i = 0; i < paths.size(); i++)
+       {
+ 	v = (Segment) paths.elementAt(i);
+ 	if (clockwise != v.hasClockwiseOrientation())
+ 	  v.reverseAll();
+       }
+   }
+ 
+   /**
+    * Class representing a linked-list of vertices forming a closed polygon,
+    * convex or concave, without holes.
+    */
+   private abstract class Segment implements Cloneable
+   {
+     // segment type, PathIterator segment types are used.
+     Point2D P1;
+     Point2D P2;
+     Segment next;
+     Segment node;
+ 
+     Segment()
+     {
+       P1 = P2 = null;
+       node = next = null;
+     }
+ 
+     /**
+      * Reverses the direction of a single segment
+      */
+     abstract void reverseCoords();
+ 
+     /**
+      * Returns the segment's midpoint
+      */
+     abstract Point2D getMidPoint();
+ 
+     /**
+      * Returns the bounding box of this segment
+      */
+     abstract Rectangle2D getBounds();
+ 
+     /**
+      * Transforms a single segment
+      */
+     abstract void transform(AffineTransform at);
+ 
+     /**
+      * Returns the PathIterator type of a segment
+      */
+     abstract int getType();
+ 
+     /**
+      */
+     abstract int splitIntersections(Segment b);
+ 
+     /**
+      * Returns the PathIterator coords of a segment
+      */
+     abstract int pathIteratorFormat(double[] coords);
+ 
+     /**
+      * Returns the number of intersections on the positive X axis,
+      * with the origin at (x,y), used for contains()-testing
+      *
+      * (Although that could be done by the line-intersect methods,
+      * a dedicated method is better to guarantee consitent handling
+      * of endpoint-special-cases)
+      */
+     abstract int rayCrossing(double x, double y);
+ 
+     /**
+      * Subdivides the segment at parametric value t, inserting
+      * the new segment into the linked list after this,
+      * such that this becomes [0,t] and this.next becomes [t,1]
+      */
+     abstract void subdivideInsert(double t);
+ 
+     /**
+      * Returns twice the area of a curve, relative the P1-P2 line
+      * Used for area calculations.
+      */
+     abstract double curveArea();
+ 
+     /**
+      * Compare two segments.
+      */
+     abstract boolean equals(Segment b);
+ 
+     /**
+      * Determines if this path of segments contains the point (x,y)
+      */
+     boolean contains(double x, double y)
+     {
+       Segment v = this;
+       int crossings = 0;
+       do
+         {
+ 	  int n = v.rayCrossing(x, y);
+ 	  crossings += n;
+ 	  v = v.next;
+         }
+       while (v != this);
+       return ((crossings & 1) == 1);
+     }
+ 
+     /**
+      * Nulls all nodes of the path. Clean up any 'hairs'.
+      */
+     void nullNodes()
+     {
+       Segment v = this;
+       do
+         {
+ 	  v.node = null;
+ 	  v = v.next;
+         }
+       while (v != this);
+     }
+ 
+     /**
+      * Transforms each segment in the closed path
+      */
+     void transformSegmentList(AffineTransform at)
+     {
+       Segment v = this;
+       do
+         {
+ 	  v.transform(at);
+ 	  v = v.next;
+         }
+       while (v != this);
+     }
+ 
+     /**
+      * Determines the winding direction of the path
+      * By the sign of the area.
+      */
+     boolean hasClockwiseOrientation()
+     {
+       return (getSignedArea() > 0.0);
+     }
+ 
+     /**
+      * Returns the bounds of this path
+      */
+     public Rectangle2D getPathBounds()
+     {
+       double xmin;
+       double xmax;
+       double ymin;
+       double ymax;
+       xmin = xmax = P1.getX();
+       ymin = ymax = P1.getY();
+ 
+       Segment v = this;
+       do
+         {
+ 	  Rectangle2D r = v.getBounds();
+ 	  xmin = Math.min(r.getMinX(), xmin);
+ 	  ymin = Math.min(r.getMinY(), ymin);
+ 	  xmax = Math.max(r.getMaxX(), xmax);
+ 	  ymax = Math.max(r.getMaxY(), ymax);
+ 	  v = v.next;
+         }
+       while (v != this);
+ 
+       return (new Rectangle2D.Double(xmin, ymin, (xmax - xmin), (ymax - ymin)));
+     }
+ 
+     /**
+      * Calculates twice the signed area of the path;
+      */
+     double getSignedArea()
+     {
+       Segment s;
+       double area = 0.0;
+ 
+       s = this;
+       do
+         {
+ 	  area += s.curveArea();
+ 
+ 	  area += s.P1.getX() * s.next.P1.getY()
+ 	  - s.P1.getY() * s.next.P1.getX();
+ 	  s = s.next;
+         }
+       while (s != this);
+ 
+       return area;
+     }
+ 
+     /**
+      * Reverses the orientation of the whole polygon
+      */
+     void reverseAll()
+     {
+       reverseCoords();
+       Segment v = next;
+       Segment former = this;
+       while (v != this)
+         {
+ 	  v.reverseCoords();
+ 	  Segment vnext = v.next;
+ 	  v.next = former;
+ 	  former = v;
+ 	  v = vnext;
+         }
+       next = former;
+     }
+ 
+     /**
+      * Inserts a Segment after this one
+      */
+     void insert(Segment v)
+     {
+       Segment n = next;
+       next = v;
+       v.next = n;
+     }
+ 
+     /**
+      * Returns if this segment path is polygonal
+      */
+     boolean isPolygonal()
+     {
+       Segment v = this;
+       do
+         {
+ 	  if (! (v instanceof LineSegment))
+ 	    return false;
+ 	  v = v.next;
+         }
+       while (v != this);
+       return true;
+     }
+ 
+     /**
+      * Clones this path
+      */
+     Segment cloneSegmentList() throws CloneNotSupportedException
+     {
+       Vector list = new Vector();
+       Segment v = next;
+ 
+       while (v != this)
+         {
+ 	  list.add(v);
+ 	  v = v.next;
+         }
+ 
+       Segment clone = (Segment) this.clone();
+       v = clone;
+       for (int i = 0; i < list.size(); i++)
+         {
+ 	  clone.next = (Segment) ((Segment) list.elementAt(i)).clone();
+ 	  clone = clone.next;
+         }
+       clone.next = v;
+       return v;
+     }
+ 
+     /**
+      * Creates a node between this segment and segment b
+      * at the given intersection
+      * @return the number of nodes created (0 or 1)
+      */
+     int createNode(Segment b, Intersection i)
+     {
+       Point2D p = i.p;
+       if ((pointEquals(P1, p) || pointEquals(P2, p))
+           && (pointEquals(b.P1, p) || pointEquals(b.P2, p)))
+ 	return 0;
+ 
+       subdivideInsert(i.ta);
+       b.subdivideInsert(i.tb);
+ 
+       // snap points
+       b.P2 = b.next.P1 = P2 = next.P1 = i.p;
+ 
+       node = b.next;
+       b.node = next;
+       return 1;
+     }
+ 
+     /**
+      * Creates multiple nodes from a list of intersections,
+      * This must be done in the order of ascending parameters,
+      * and the parameters must be recalculated in accordance
+      * with each split.
+      * @return the number of nodes created
+      */
+     protected int createNodes(Segment b, Intersection[] x)
+     {
+       Vector v = new Vector();
+       for (int i = 0; i < x.length; i++)
+         {
+ 	  Point2D p = x[i].p;
+ 	  if (! ((pointEquals(P1, p) || pointEquals(P2, p))
+ 	      && (pointEquals(b.P1, p) || pointEquals(b.P2, p))))
+ 	    v.add(x[i]);
+         }
+ 
+       int nNodes = v.size();
+       Intersection[] A = new Intersection[nNodes];
+       Intersection[] B = new Intersection[nNodes];
+       for (int i = 0; i < nNodes; i++)
+ 	A[i] = B[i] = (Intersection) v.elementAt(i);
+ 
+       // Create two lists sorted by the parameter
+       // Bubble sort, OK I suppose, since the number of intersections
+       // cannot be larger than 9 (cubic-cubic worst case) anyway
+       for (int i = 0; i < nNodes - 1; i++)
+         {
+ 	  for (int j = i + 1; j < nNodes; j++)
+ 	    {
+ 	      if (A[i].ta > A[j].ta)
+ 	        {
+ 		  Intersection swap = A[i];
+ 		  A[i] = A[j];
+ 		  A[j] = swap;
+ 	        }
+ 	      if (B[i].tb > B[j].tb)
+ 	        {
+ 		  Intersection swap = B[i];
+ 		  B[i] = B[j];
+ 		  B[j] = swap;
+ 	        }
+ 	    }
+         }
+       // subdivide a
+       Segment s = this;
+       for (int i = 0; i < nNodes; i++)
+         {
+ 	  s.subdivideInsert(A[i].ta);
+ 
+ 	  // renormalize the parameters
+ 	  for (int j = i + 1; j < nNodes; j++)
+ 	    A[j].ta = (A[j].ta - A[i].ta) / (1.0 - A[i].ta);
+ 
+ 	  A[i].seg = s;
+ 	  s = s.next;
+         }
+ 
+       // subdivide b, set nodes
+       s = b;
+       for (int i = 0; i < nNodes; i++)
+         {
+ 	  s.subdivideInsert(B[i].tb);
+ 
+ 	  for (int j = i + 1; j < nNodes; j++)
+ 	    B[j].tb = (B[j].tb - B[i].tb) / (1.0 - B[i].tb);
+ 
+ 	  // set nodes
+ 	  B[i].seg.node = s.next; // node a -> b 
+ 	  s.node = B[i].seg.next; // node b -> a 
+ 
+ 	  // snap points
+ 	  B[i].seg.P2 = B[i].seg.next.P1 = s.P2 = s.next.P1 = B[i].p;
+ 	  s = s.next;
+         }
+       return nNodes;
+     }
+ 
+     /**
+      * Determines if two paths are equal.
+      * Colinear line segments are ignored in the comparison.
+      */
+     boolean pathEquals(Segment B)
+     {
+       if (! getPathBounds().equals(B.getPathBounds()))
+ 	return false;
+ 
+       Segment startA = getTopLeft();
+       Segment startB = B.getTopLeft();
+       Segment a = startA;
+       Segment b = startB;
+       do
+         {
+ 	  if (! a.equals(b))
+ 	    return false;
+ 
+ 	  if (a instanceof LineSegment)
+ 	    a = ((LineSegment) a).lastCoLinear();
+ 	  if (b instanceof LineSegment)
+ 	    b = ((LineSegment) b).lastCoLinear();
+ 
+ 	  a = a.next;
+ 	  b = b.next;
+         }
+       while (a != startA && b != startB);
+       return true;
+     }
+ 
+     /**
+      * Return the segment with the top-leftmost first point
+      */
+     Segment getTopLeft()
+     {
+       Segment v = this;
+       Segment tl = this;
+       do
+         {
+ 	  if (v.P1.getY() < tl.P1.getY())
+ 	    tl = v;
+ 	  else if (v.P1.getY() == tl.P1.getY())
+ 	    {
+ 	      if (v.P1.getX() < tl.P1.getX())
+ 		tl = v;
+ 	    }
+ 	  v = v.next;
+         }
+       while (v != this);
+       return tl;
+     }
+ 
+     /**
+      * Returns if the path has a segment outside a shape
+      */
+     boolean isSegmentOutside(Shape shape)
+     {
+       return ! shape.contains(getMidPoint());
+     }
+   } // class Segment
+ 
+   private class LineSegment extends Segment
+   {
+     public LineSegment(double x1, double y1, double x2, double y2)
+     {
+       super();
+       P1 = new Point2D.Double(x1, y1);
+       P2 = new Point2D.Double(x2, y2);
+     }
+ 
+     public LineSegment(Point2D p1, Point2D p2)
+     {
+       super();
+       P1 = (Point2D) p1.clone();
+       P2 = (Point2D) p2.clone();
+     }
+ 
+     /**
+      * Clones this segment
+      */
+     public Object clone()
+     {
+       return new LineSegment(P1, P2);
+     }
+ 
+     /**
+      * Transforms the segment
+      */
+     void transform(AffineTransform at)
+     {
+       P1 = at.transform(P1, null);
+       P2 = at.transform(P2, null);
+     }
+ 
+     /**
+      * Swap start and end points
+      */
+     void reverseCoords()
+     {
+       Point2D p = P1;
+       P1 = P2;
+       P2 = p;
+     }
+ 
+     /**
+      * Returns the segment's midpoint
+      */
+     Point2D getMidPoint()
+     {
+       return (new Point2D.Double(0.5 * (P1.getX() + P2.getX()),
+                                  0.5 * (P1.getY() + P2.getY())));
+     }
+ 
+     /**
+      * Returns twice the area of a curve, relative the P1-P2 line
+      * Obviously, a line does not enclose any area besides the line
+      */
+     double curveArea()
+     {
+       return 0;
+     }
+ 
+     /**
+      * Returns the PathIterator type of a segment
+      */
+     int getType()
+     {
+       return (PathIterator.SEG_LINETO);
+     }
+ 
+     /**
+      * Subdivides the segment at parametric value t, inserting
+      * the new segment into the linked list after this,
+      * such that this becomes [0,t] and this.next becomes [t,1]
+      */
+     void subdivideInsert(double t)
+     {
+       Point2D p = new Point2D.Double((P2.getX() - P1.getX()) * t + P1.getX(),
+                                      (P2.getY() - P1.getY()) * t + P1.getY());
+       insert(new LineSegment(p, P2));
+       P2 = p;
+       next.node = node;
+       node = null;
+     }
+ 
+     /**
+      * Determines if two line segments are strictly colinear
+      */
+     boolean isCoLinear(LineSegment b)
+     {
+       double x1 = P1.getX();
+       double y1 = P1.getY();
+       double x2 = P2.getX();
+       double y2 = P2.getY();
+       double x3 = b.P1.getX();
+       double y3 = b.P1.getY();
+       double x4 = b.P2.getX();
+       double y4 = b.P2.getY();
+ 
+       if ((y1 - y3) * (x4 - x3) - (x1 - x3) * (y4 - y3) != 0.0)
+ 	return false;
+ 
+       return ((x2 - x1) * (y4 - y3) - (y2 - y1) * (x4 - x3) == 0.0);
+     }
+ 
+     /**
+      * Return the last segment colinear with this one.
+      * Used in comparing paths.
+      */
+     Segment lastCoLinear()
+     {
+       Segment prev = this;
+       Segment v = next;
+ 
+       while (v instanceof LineSegment)
+         {
+ 	  if (isCoLinear((LineSegment) v))
+ 	    {
+ 	      prev = v;
+ 	      v = v.next;
+ 	    }
+ 	  else
+ 	    return prev;
+         }
+       return prev;
+     }
+ 
+     /**
+      * Compare two segments.
+      * We must take into account that the lines may be broken into colinear
+      * subsegments and ignore them.
+      */
+     boolean equals(Segment b)
+     {
+       if (! (b instanceof LineSegment))
+ 	return false;
+       Point2D p1 = P1;
+       Point2D p3 = b.P1;
+ 
+       if (! p1.equals(p3))
+ 	return false;
+ 
+       Point2D p2 = lastCoLinear().P2;
+       Point2D p4 = ((LineSegment) b).lastCoLinear().P2;
+       return (p2.equals(p4));
+     }
+ 
+     /**
+      * Returns a line segment
+      */
+     int pathIteratorFormat(double[] coords)
+     {
+       coords[0] = P2.getX();
+       coords[1] = P2.getY();
+       return (PathIterator.SEG_LINETO);
+     }
+ 
+     /**
+      * Returns if the line has intersections.
+      */
+     boolean hasIntersections(Segment b)
+     {
+       if (b instanceof LineSegment)
+ 	return (linesIntersect(this, (LineSegment) b) != null);
+ 
+       if (b instanceof QuadSegment)
+ 	return (lineQuadIntersect(this, (QuadSegment) b) != null);
+ 
+       if (b instanceof CubicSegment)
+ 	return (lineCubicIntersect(this, (CubicSegment) b) != null);
+ 
+       return false;
+     }
+ 
+     /**
+      * Splits intersections into nodes,
+      * This one handles line-line, line-quadratic, line-cubic
+      */
+     int splitIntersections(Segment b)
+     {
+       if (b instanceof LineSegment)
+         {
+ 	  Intersection i = linesIntersect(this, (LineSegment) b);
+ 
+ 	  if (i == null)
+ 	    return 0;
+ 
+ 	  return createNode(b, i);
+         }
+ 
+       Intersection[] x = null;
+ 
+       if (b instanceof QuadSegment)
+ 	x = lineQuadIntersect(this, (QuadSegment) b);
+ 
+       if (b instanceof CubicSegment)
+ 	x = lineCubicIntersect(this, (CubicSegment) b);
+ 
+       if (x == null)
+ 	return 0;
+ 
+       if (x.length == 1)
+ 	return createNode(b, (Intersection) x[0]);
+ 
+       return createNodes(b, x);
+     }
+ 
+     /**
+      * Returns the bounding box of this segment
+      */
+     Rectangle2D getBounds()
+     {
+       return (new Rectangle2D.Double(Math.min(P1.getX(), P2.getX()),
+                                      Math.min(P1.getY(), P2.getY()),
+                                      Math.abs(P1.getX() - P2.getX()),
+                                      Math.abs(P1.getY() - P2.getY())));
+     }
+ 
+     /**
+      * Returns the number of intersections on the positive X axis,
+      * with the origin at (x,y), used for contains()-testing
+      */
+     int rayCrossing(double x, double y)
+     {
+       double x0 = P1.getX() - x;
+       double y0 = P1.getY() - y;
+       double x1 = P2.getX() - x;
+       double y1 = P2.getY() - y;
+ 
+       if (y0 * y1 > 0)
+ 	return 0;
+ 
+       if (x0 < 0 && x1 < 0)
+ 	return 0;
+ 
+       if (y0 == 0.0)
+ 	y0 -= EPSILON;
+ 
+       if (y1 == 0.0)
+ 	y1 -= EPSILON;
+ 
+       if (Line2D.linesIntersect(x0, y0, x1, y1, 
+ 				EPSILON, 0.0, Double.MAX_VALUE, 0.0))
+ 	return 1;
+       return 0;
+     }
+   } // class LineSegment
+ 
+   /**
+    * Quadratic Bezier curve segment
+    *
+    * Note: Most peers don't support quadratics directly, so it might make
+    * sense to represent them as cubics internally and just be done with it.
+    * I think we should be peer-agnostic, however, and stay faithful to the
+    * input geometry types as far as possible.
+    */
+   private class QuadSegment extends Segment
+   {
+     Point2D cp; // control point
+ 
+     /**
+      * Constructor, takes the coordinates of the start, control,
+      * and end point, respectively.
+      */
+     QuadSegment(double x1, double y1, double cx, double cy, double x2,
+                 double y2)
+     {
+       super();
+       P1 = new Point2D.Double(x1, y1);
+       P2 = new Point2D.Double(x2, y2);
+       cp = new Point2D.Double(cx, cy);
+     }
+ 
+     /**
+      * Clones this segment
+      */
+     public Object clone()
+     {
+       return new QuadSegment(P1.getX(), P1.getY(), cp.getX(), cp.getY(),
+                              P2.getX(), P2.getY());
+     }
+ 
+     /**
+      * Returns twice the area of a curve, relative the P1-P2 line
+      *
+      * The area formula can be derived by using Green's formula in the
+      * plane on the parametric form of the bezier.
+      */
+     double curveArea()
+     {
+       double x0 = P1.getX();
+       double y0 = P1.getY();
+       double x1 = cp.getX();
+       double y1 = cp.getY();
+       double x2 = P2.getX();
+       double y2 = P2.getY();
+ 
+       double P = (y2 - 2 * y1 + y0);
+       double Q = 2 * (y1 - y0);
+ 
+       double A = (x2 - 2 * x1 + x0);
+       double B = 2 * (x1 - x0);
+ 
+       double area = (B * P - A * Q) / 3.0;
+       return (area);
+     }
+ 
+     /**
+      * Compare two segments.
+      */
+     boolean equals(Segment b)
+     {
+       if (! (b instanceof QuadSegment))
+ 	return false;
+ 
+       return (P1.equals(b.P1) && cp.equals(((QuadSegment) b).cp)
+              && P2.equals(b.P2));
+     }
+ 
+     /**
+      * Returns a Point2D corresponding to the parametric value t
+      * of the curve
+      */
+     Point2D evaluatePoint(double t)
+     {
+       double x0 = P1.getX();
+       double y0 = P1.getY();
+       double x1 = cp.getX();
+       double y1 = cp.getY();
+       double x2 = P2.getX();
+       double y2 = P2.getY();
+ 
+       return new Point2D.Double(t * t * (x2 - 2 * x1 + x0) + 2 * t * (x1 - x0)
+                                 + x0,
+                                 t * t * (y2 - 2 * y1 + y0) + 2 * t * (y1 - y0)
+                                 + y0);
+     }
+ 
+     /**
+      * Returns the bounding box of this segment
+      */
+     Rectangle2D getBounds()
+     {
+       double x0 = P1.getX();
+       double y0 = P1.getY();
+       double x1 = cp.getX();
+       double y1 = cp.getY();
+       double x2 = P2.getX();
+       double y2 = P2.getY();
+       double r0;
+       double r1;
+ 
+       double xmax = Math.max(x0, x2);
+       double ymax = Math.max(y0, y2);
+       double xmin = Math.min(x0, x2);
+       double ymin = Math.min(y0, y2);
+ 
+       r0 = 2 * (y1 - y0);
+       r1 = 2 * (y2 - 2 * y1 + y0);
+       if (r1 != 0.0)
+         {
+ 	  double t = -r0 / r1;
+ 	  if (t > 0.0 && t < 1.0)
+ 	    {
+ 	      double y = evaluatePoint(t).getY();
+ 	      ymax = Math.max(y, ymax);
+ 	      ymin = Math.min(y, ymin);
+ 	    }
+         }
+       r0 = 2 * (x1 - x0);
+       r1 = 2 * (x2 - 2 * x1 + x0);
+       if (r1 != 0.0)
+         {
+ 	  double t = -r0 / r1;
+ 	  if (t > 0.0 && t < 1.0)
+ 	    {
+ 	      double x = evaluatePoint(t).getY();
+ 	      xmax = Math.max(x, xmax);
+ 	      xmin = Math.min(x, xmin);
+ 	    }
+         }
+ 
+       return (new Rectangle2D.Double(xmin, ymin, xmax - xmin, ymax - ymin));
+     }
+ 
+     /**
+      * Returns a cubic segment corresponding to this curve
+      */
+     CubicSegment getCubicSegment()
+     {
+       double x1 = P1.getX() + 2.0 * (cp.getX() - P1.getX()) / 3.0;
+       double y1 = P1.getY() + 2.0 * (cp.getY() - P1.getY()) / 3.0;
+       double x2 = cp.getX() + (P2.getX() - cp.getX()) / 3.0;
+       double y2 = cp.getY() + (P2.getY() - cp.getY()) / 3.0;
+ 
+       return new CubicSegment(P1.getX(), P1.getY(), x1, y1, x2, y2, P2.getX(),
+                               P2.getY());
+     }
+ 
+     /**
+      * Returns the segment's midpoint
+      */
+     Point2D getMidPoint()
+     {
+       return evaluatePoint(0.5);
+     }
+ 
+     /**
+      * Returns the PathIterator type of a segment
+      */
+     int getType()
+     {
+       return (PathIterator.SEG_QUADTO);
+     }
+ 
+     /**
+      * Returns the PathIterator coords of a segment
+      */
+     int pathIteratorFormat(double[] coords)
+     {
+       coords[0] = cp.getX();
+       coords[1] = cp.getY();
+       coords[2] = P2.getX();
+       coords[3] = P2.getY();
+       return (PathIterator.SEG_QUADTO);
+     }
+ 
+     /**
+      * Returns the number of intersections on the positive X axis,
+      * with the origin at (x,y), used for contains()-testing
+      */
+     int rayCrossing(double x, double y)
+     {
+       double x0 = P1.getX() - x;
+       double y0 = P1.getY() - y;
+       double x1 = cp.getX() - x;
+       double y1 = cp.getY() - y;
+       double x2 = P2.getX() - x;
+       double y2 = P2.getY() - y;
+       double[] r = new double[3];
+       int nRoots;
+       int nCrossings = 0;
+ 
+       /* check if curve may intersect X+ axis. */
+       if ((x0 > 0.0 || x1 > 0.0 || x2 > 0.0) && (y0 * y1 <= 0 || y1 * y2 <= 0))
+         {
+ 	  if (y0 == 0.0)
+ 	    y0 -= EPSILON;
+ 	  if (y2 == 0.0)
+ 	    y2 -= EPSILON;
+ 
+ 	  r[0] = y0;
+ 	  r[1] = 2 * (y1 - y0);
+ 	  r[2] = (y2 - 2 * y1 + y0);
+ 
+ 	  nRoots = QuadCurve2D.solveQuadratic(r);
+ 	  for (int i = 0; i < nRoots; i++)
+ 	    if (r[i] > 0.0f && r[i] < 1.0f)
+ 	      {
+ 		double t = r[i];
+ 		if (t * t * (x2 - 2 * x1 + x0) + 2 * t * (x1 - x0) + x0 > 0.0)
+ 		  nCrossings++;
+ 	      }
+         }
+       return nCrossings;
+     }
+ 
+     /**
+      * Swap start and end points
+      */
+     void reverseCoords()
+     {
+       Point2D temp = P1;
+       P1 = P2;
+       P2 = temp;
+     }
+ 
+     /**
+      * Splits intersections into nodes,
+      * This one handles quadratic-quadratic only,
+      * Quadratic-line is passed on to the LineSegment class,
+      * Quadratic-cubic is passed on to the CubicSegment class
+      */
+     int splitIntersections(Segment b)
+     {
+       if (b instanceof LineSegment)
+ 	return (b.splitIntersections(this));
+ 
+       if (b instanceof CubicSegment)
+ 	return (b.splitIntersections(this));
+ 
+       if (b instanceof QuadSegment)
+         {
+ 	  // Use the cubic-cubic intersection routine for quads as well,
+ 	  // Since a quadratic can be exactly described as a cubic, this
+ 	  // should not be a problem; 
+ 	  // The recursion depth will be the same in any case.
+ 	  Intersection[] x = cubicCubicIntersect(getCubicSegment(),
+ 	                                         ((QuadSegment) b)
+ 	                                         .getCubicSegment());
+ 	  if (x == null)
+ 	    return 0;
+ 
+ 	  if (x.length == 1)
+ 	    return createNode(b, (Intersection) x[0]);
+ 
+ 	  return createNodes(b, x);
+         }
+       return 0;
+     }
+ 
+     /**
+      * Subdivides the segment at parametric value t, inserting
+      * the new segment into the linked list after this,
+      * such that this becomes [0,t] and this.next becomes [t,1]
+      */
+     void subdivideInsert(double t)
+     {
+       double x0 = P1.getX();
+       double y0 = P1.getY();
+       double x1 = cp.getX();
+       double y1 = cp.getY();
+       double x2 = P2.getX();
+       double y2 = P2.getY();
+ 
+       double p10x = x0 + t * (x1 - x0);
+       double p10y = y0 + t * (y1 - y0);
+       double p11x = x1 + t * (x2 - x1);
+       double p11y = y1 + t * (y2 - y1);
+       double p20x = p10x + t * (p11x - p10x);
+       double p20y = p10y + t * (p11y - p10y);
+ 
+       insert(new QuadSegment(p20x, p20y, p11x, p11y, x2, y2));
+       P2 = next.P1;
+       cp.setLocation(p10x, p10y);
+ 
+       next.node = node;
+       node = null;
+     }
+ 
+     /**
+      * Transforms the segment
+      */
+     void transform(AffineTransform at)
+     {
+       P1 = at.transform(P1, null);
+       P2 = at.transform(P2, null);
+       cp = at.transform(cp, null);
+     }
+   } // class QuadSegment
+ 
+   /**
+    * Cubic Bezier curve segment
+    */
+   private class CubicSegment extends Segment
+   {
+     Point2D cp1; // control points
+     Point2D cp2; // control points
+ 
+     /**
+      * Constructor - takes coordinates of the starting point,
+      * first control point, second control point and end point,
+      * respecively.
+      */
+     public CubicSegment(double x1, double y1, double c1x, double c1y,
+                         double c2x, double c2y, double x2, double y2)
+     {
+       super();
+       P1 = new Point2D.Double(x1, y1);
+       P2 = new Point2D.Double(x2, y2);
+       cp1 = new Point2D.Double(c1x, c1y);
+       cp2 = new Point2D.Double(c2x, c2y);
+     }
+ 
+     /**
+      * Clones this segment
+      */
+     public Object clone()
+     {
+       return new CubicSegment(P1.getX(), P1.getY(), cp1.getX(), cp1.getY(),
+                               cp2.getX(), cp2.getY(), P2.getX(), P2.getY());
+     }
+ 
+     /**
+      * Returns twice the area of a curve, relative the P1-P2 line
+      *
+      * The area formula can be derived by using Green's formula in the
+      * plane on the parametric form of the bezier.
+      */
+     double curveArea()
+     {
+       double x0 = P1.getX();
+       double y0 = P1.getY();
+       double x1 = cp1.getX();
+       double y1 = cp1.getY();
+       double x2 = cp2.getX();
+       double y2 = cp2.getY();
+       double x3 = P2.getX();
+       double y3 = P2.getY();
+ 
+       double P = y3 - 3 * y2 + 3 * y1 - y0;
+       double Q = 3 * (y2 + y0 - 2 * y1);
+       double R = 3 * (y1 - y0);
+ 
+       double A = x3 - 3 * x2 + 3 * x1 - x0;
+       double B = 3 * (x2 + x0 - 2 * x1);
+       double C = 3 * (x1 - x0);
+ 
+       double area = (B * P - A * Q) / 5.0 + (C * P - A * R) / 2.0
+                     + (C * Q - B * R) / 3.0;
+ 
+       return (area);
+     }
+ 
+     /**
+      * Compare two segments.
+      */
+     boolean equals(Segment b)
+     {
+       if (! (b instanceof CubicSegment))
+ 	return false;
+ 
+       return (P1.equals(b.P1) && cp1.equals(((CubicSegment) b).cp1)
+              && cp2.equals(((CubicSegment) b).cp2) && P2.equals(b.P2));
+     }
+ 
+     /**
+      * Returns a Point2D corresponding to the parametric value t
+      * of the curve
+      */
+     Point2D evaluatePoint(double t)
+     {
+       double x0 = P1.getX();
+       double y0 = P1.getY();
+       double x1 = cp1.getX();
+       double y1 = cp1.getY();
+       double x2 = cp2.getX();
+       double y2 = cp2.getY();
+       double x3 = P2.getX();
+       double y3 = P2.getY();
+ 
+       return new Point2D.Double(-(t * t * t) * (x0 - 3 * x1 + 3 * x2 - x3)
+                                 + 3 * t * t * (x0 - 2 * x1 + x2)
+                                 + 3 * t * (x1 - x0) + x0,
+                                 -(t * t * t) * (y0 - 3 * y1 + 3 * y2 - y3)
+                                 + 3 * t * t * (y0 - 2 * y1 + y2)
+                                 + 3 * t * (y1 - y0) + y0);
+     }
+ 
+     /**
+      * Returns the bounding box of this segment
+      */
+     Rectangle2D getBounds()
+     {
+       double x0 = P1.getX();
+       double y0 = P1.getY();
+       double x1 = cp1.getX();
+       double y1 = cp1.getY();
+       double x2 = cp2.getX();
+       double y2 = cp2.getY();
+       double x3 = P2.getX();
+       double y3 = P2.getY();
+       double[] r = new double[3];
+ 
+       double xmax = Math.max(x0, x3);
+       double ymax = Math.max(y0, y3);
+       double xmin = Math.min(x0, x3);
+       double ymin = Math.min(y0, y3);
+ 
+       r[0] = 3 * (y1 - y0);
+       r[1] = 6.0 * (y2 + y0 - 2 * y1);
+       r[2] = 3.0 * (y3 - 3 * y2 + 3 * y1 - y0);
+ 
+       int n = QuadCurve2D.solveQuadratic(r);
+       for (int i = 0; i < n; i++)
+         {
+ 	  double t = r[i];
+ 	  if (t > 0 && t < 1.0)
+ 	    {
+ 	      double y = evaluatePoint(t).getY();
+ 	      ymax = Math.max(y, ymax);
+ 	      ymin = Math.min(y, ymin);
+ 	    }
+         }
+ 
+       r[0] = 3 * (x1 - x0);
+       r[1] = 6.0 * (x2 + x0 - 2 * x1);
+       r[2] = 3.0 * (x3 - 3 * x2 + 3 * x1 - x0);
+       n = QuadCurve2D.solveQuadratic(r);
+       for (int i = 0; i < n; i++)
+         {
+ 	  double t = r[i];
+ 	  if (t > 0 && t < 1.0)
+ 	    {
+ 	      double x = evaluatePoint(t).getX();
+ 	      xmax = Math.max(x, xmax);
+ 	      xmin = Math.min(x, xmin);
+ 	    }
+         }
+       return (new Rectangle2D.Double(xmin, ymin, (xmax - xmin), (ymax - ymin)));
+     }
+ 
+     /**
+      * Returns a CubicCurve2D object corresponding to this segment.
+      */
+     CubicCurve2D getCubicCurve2D()
+     {
+       return new CubicCurve2D.Double(P1.getX(), P1.getY(), cp1.getX(),
+                                      cp1.getY(), cp2.getX(), cp2.getY(),
+                                      P2.getX(), P2.getY());
+     }
+ 
+     /**
+      * Returns the parametric points of self-intersection if the cubic
+      * is self-intersecting, null otherwise.
+      */
+     double[] getLoop()
+     {
+       double x0 = P1.getX();
+       double y0 = P1.getY();
+       double x1 = cp1.getX();
+       double y1 = cp1.getY();
+       double x2 = cp2.getX();
+       double y2 = cp2.getY();
+       double x3 = P2.getX();
+       double y3 = P2.getY();
+       double[] r = new double[4];
+       double k;
+       double R;
+       double T;
+       double A;
+       double B;
+       double[] results = new double[2];
+ 
+       R = x3 - 3 * x2 + 3 * x1 - x0;
+       T = y3 - 3 * y2 + 3 * y1 - y0;
+ 
+       // A qudratic
+       if (R == 0.0 && T == 0.0)
+ 	return null;
+ 
+       // true cubic
+       if (R != 0.0 && T != 0.0)
+         {
+ 	  A = 3 * (x2 + x0 - 2 * x1) / R;
+ 	  B = 3 * (x1 - x0) / R;
+ 
+ 	  double P = 3 * (y2 + y0 - 2 * y1) / T;
+ 	  double Q = 3 * (y1 - y0) / T;
+ 
+ 	  if (A == P || Q == B)
+ 	    return null;
+ 
+ 	  k = (Q - B) / (A - P);
+         }
+       else
+         {
+ 	  if (R == 0.0)
+ 	    {
+ 	      // quadratic in x
+ 	      k = -(3 * (x1 - x0)) / (3 * (x2 + x0 - 2 * x1));
+ 	      A = 3 * (y2 + y0 - 2 * y1) / T;
+ 	      B = 3 * (y1 - y0) / T;
+ 	    }
+ 	  else
+ 	    {
+ 	      // quadratic in y
+ 	      k = -(3 * (y1 - y0)) / (3 * (y2 + y0 - 2 * y1));
+ 	      A = 3 * (x2 + x0 - 2 * x1) / R;
+ 	      B = 3 * (x1 - x0) / R;
+ 	    }
+         }
+ 
+       r[0] = -k * k * k - A * k * k - B * k;
+       r[1] = 3 * k * k + 2 * k * A + 2 * B;
+       r[2] = -3 * k;
+       r[3] = 2;
+ 
+       int n = CubicCurve2D.solveCubic(r);
+       if (n != 3)
+ 	return null;
+ 
+       // sort r
+       double t;
+       for (int i = 0; i < 2; i++)
+ 	for (int j = i + 1; j < 3; j++)
+ 	  if (r[j] < r[i])
+ 	    {
+ 	      t = r[i];
+ 	      r[i] = r[j];
+ 	      r[j] = t;
+ 	    }
+ 
+       if (Math.abs(r[0] + r[2] - k) < 1E-13)
+ 	if (r[0] >= 0.0 && r[0] <= 1.0 && r[2] >= 0.0 && r[2] <= 1.0)
+ 	  if (evaluatePoint(r[0]).distance(evaluatePoint(r[2])) < PE_EPSILON * 10)
+ 	    { // we snap the points anyway
+ 	      results[0] = r[0];
+ 	      results[1] = r[2];
+ 	      return (results);
+ 	    }
+       return null;
+     }
+ 
+     /**
+      * Returns the segment's midpoint
+      */
+     Point2D getMidPoint()
+     {
+       return evaluatePoint(0.5);
+     }
+ 
+     /**
+      * Returns the PathIterator type of a segment
+      */
+     int getType()
+     {
+       return (PathIterator.SEG_CUBICTO);
+     }
+ 
+     /**
+      * Returns the PathIterator coords of a segment
+      */
+     int pathIteratorFormat(double[] coords)
+     {
+       coords[0] = cp1.getX();
+       coords[1] = cp1.getY();
+       coords[2] = cp2.getX();
+       coords[3] = cp2.getY();
+       coords[4] = P2.getX();
+       coords[5] = P2.getY();
+       return (PathIterator.SEG_CUBICTO);
+     }
+ 
+     /**
+      * Returns the number of intersections on the positive X axis,
+      * with the origin at (x,y), used for contains()-testing
+      */
+     int rayCrossing(double x, double y)
+     {
+       double x0 = P1.getX() - x;
+       double y0 = P1.getY() - y;
+       double x1 = cp1.getX() - x;
+       double y1 = cp1.getY() - y;
+       double x2 = cp2.getX() - x;
+       double y2 = cp2.getY() - y;
+       double x3 = P2.getX() - x;
+       double y3 = P2.getY() - y;
+       double[] r = new double[4];
+       int nRoots;
+       int nCrossings = 0;
+ 
+       /* check if curve may intersect X+ axis. */
+       if ((x0 > 0.0 || x1 > 0.0 || x2 > 0.0 || x3 > 0.0)
+           && (y0 * y1 <= 0 || y1 * y2 <= 0 || y2 * y3 <= 0))
+         {
+ 	  if (y0 == 0.0)
+ 	    y0 -= EPSILON;
+ 	  if (y3 == 0.0)
+ 	    y3 -= EPSILON;
+ 
+ 	  r[0] = y0;
+ 	  r[1] = 3 * (y1 - y0);
+ 	  r[2] = 3 * (y2 + y0 - 2 * y1);
+ 	  r[3] = y3 - 3 * y2 + 3 * y1 - y0;
+ 
+ 	  if ((nRoots = CubicCurve2D.solveCubic(r)) > 0)
+ 	    for (int i = 0; i < nRoots; i++)
+ 	      {
+ 		if (r[i] > 0.0 && r[i] < 1.0)
+ 		  {
+ 		    double t = r[i];
+ 		    if (-(t * t * t) * (x0 - 3 * x1 + 3 * x2 - x3)
+ 		        + 3 * t * t * (x0 - 2 * x1 + x2) + 3 * t * (x1 - x0)
+ 		        + x0 > 0.0)
+ 		      nCrossings++;
+ 		  }
+ 	      }
+         }
+       return nCrossings;
+     }
+ 
+     /**
+      * Swap start and end points
+      */
+     void reverseCoords()
+     {
+       Point2D p = P1;
+       P1 = P2;
+       P2 = p;
+       p = cp1; // swap control points
+       cp1 = cp2;
+       cp2 = p;
+     }
+ 
+     /**
+      * Splits intersections into nodes,
+      * This one handles cubic-cubic and cubic-quadratic intersections
+      */
+     int splitIntersections(Segment b)
+     {
+       if (b instanceof LineSegment)
+ 	return (b.splitIntersections(this));
+ 
+       Intersection[] x = null;
+ 
+       if (b instanceof QuadSegment)
+ 	x = cubicCubicIntersect(this, ((QuadSegment) b).getCubicSegment());
+ 
+       if (b instanceof CubicSegment)
+ 	x = cubicCubicIntersect(this, (CubicSegment) b);
+ 
+       if (x == null)
+ 	return 0;
+ 
+       if (x.length == 1)
+ 	return createNode(b, x[0]);
+ 
+       return createNodes(b, x);
+     }
+ 
+     /**
+      * Subdivides the segment at parametric value t, inserting
+      * the new segment into the linked list after this,
+      * such that this becomes [0,t] and this.next becomes [t,1]
+      */
+     void subdivideInsert(double t)
+     {
+       CubicSegment s = (CubicSegment) clone();
+       double p1x = (s.cp1.getX() - s.P1.getX()) * t + s.P1.getX();
+       double p1y = (s.cp1.getY() - s.P1.getY()) * t + s.P1.getY();
+ 
+       double px = (s.cp2.getX() - s.cp1.getX()) * t + s.cp1.getX();
+       double py = (s.cp2.getY() - s.cp1.getY()) * t + s.cp1.getY();
+ 
+       s.cp2.setLocation((s.P2.getX() - s.cp2.getX()) * t + s.cp2.getX(),
+                         (s.P2.getY() - s.cp2.getY()) * t + s.cp2.getY());
+ 
+       s.cp1.setLocation((s.cp2.getX() - px) * t + px,
+                         (s.cp2.getY() - py) * t + py);
+ 
+       double p2x = (px - p1x) * t + p1x;
+       double p2y = (py - p1y) * t + p1y;
+ 
+       double p3x = (s.cp1.getX() - p2x) * t + p2x;
+       double p3y = (s.cp1.getY() - p2y) * t + p2y;
+       s.P1.setLocation(p3x, p3y);
+ 
+       // insert new curve
+       insert(s);
+ 
+       // set this curve
+       cp1.setLocation(p1x, p1y);
+       cp2.setLocation(p2x, p2y);
+       P2 = s.P1;
+       next.node = node;
+       node = null;
+     }
+ 
+     /**
+      * Transforms the segment
+      */
+     void transform(AffineTransform at)
+     {
+       P1 = at.transform(P1, null);
+       P2 = at.transform(P2, null);
+       cp1 = at.transform(cp1, null);
+       cp2 = at.transform(cp2, null);
+     }
+   } // class CubicSegment
+ } // class Area
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/CubicCurve2D.java gcc-4.1.0/libjava/classpath/java/awt/geom/CubicCurve2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/CubicCurve2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/CubicCurve2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1724 ----
+ /* CubicCurve2D.java -- represents a parameterized cubic curve in 2-D space
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ import java.util.NoSuchElementException;
+ 
+ 
+ /**
+  * A two-dimensional curve that is parameterized with a cubic
+  * function.
+  *
+  * <p><img src="doc-files/CubicCurve2D-1.png" width="350" height="180"
+  * alt="A drawing of a CubicCurve2D" />
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Graydon Hoare (graydon@redhat.com)
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  * @author Sven de Marothy (sven@physto.se)
+  *
+  * @since 1.2
+  */
+ public abstract class CubicCurve2D implements Shape, Cloneable
+ {
+   private static final double BIG_VALUE = java.lang.Double.MAX_VALUE / 10.0;
+   private static final double EPSILON = 1E-10;
+ 
+   /**
+    * Constructs a new CubicCurve2D. Typical users will want to
+    * construct instances of a subclass, such as {@link
+    * CubicCurve2D.Float} or {@link CubicCurve2D.Double}.
+    */
+   protected CubicCurve2D()
+   {
+   }
+ 
+   /**
+    * Returns the <i>x</i> coordinate of the curve&#x2019;s start
+    * point.
+    */
+   public abstract double getX1();
+ 
+   /**
+    * Returns the <i>y</i> coordinate of the curve&#x2019;s start
+    * point.
+    */
+   public abstract double getY1();
+ 
+   /**
+    * Returns the curve&#x2019;s start point.
+    */
+   public abstract Point2D getP1();
+ 
+   /**
+    * Returns the <i>x</i> coordinate of the curve&#x2019;s first
+    * control point.
+    */
+   public abstract double getCtrlX1();
+ 
+   /**
+    * Returns the <i>y</i> coordinate of the curve&#x2019;s first
+    * control point.
+    */
+   public abstract double getCtrlY1();
+ 
+   /**
+    * Returns the curve&#x2019;s first control point.
+    */
+   public abstract Point2D getCtrlP1();
+ 
+   /**
+    * Returns the <i>x</i> coordinate of the curve&#x2019;s second
+    * control point.
+    */
+   public abstract double getCtrlX2();
+ 
+   /**
+    * Returns the <i>y</i> coordinate of the curve&#x2019;s second
+    * control point.
+    */
+   public abstract double getCtrlY2();
+ 
+   /**
+    * Returns the curve&#x2019;s second control point.
+    */
+   public abstract Point2D getCtrlP2();
+ 
+   /**
+    * Returns the <i>x</i> coordinate of the curve&#x2019;s end
+    * point.
+    */
+   public abstract double getX2();
+ 
+   /**
+    * Returns the <i>y</i> coordinate of the curve&#x2019;s end
+    * point.
+    */
+   public abstract double getY2();
+ 
+   /**
+    * Returns the curve&#x2019;s end point.
+    */
+   public abstract Point2D getP2();
+ 
+   /**
+    * Changes the curve geometry, separately specifying each coordinate
+    * value.
+    *
+    * <p><img src="doc-files/CubicCurve2D-1.png" width="350" height="180"
+    * alt="A drawing of a CubicCurve2D" />
+    *
+    * @param x1 the <i>x</i> coordinate of the curve&#x2019;s new start
+    * point.
+    *
+    * @param y1 the <i>y</i> coordinate of the curve&#x2019;s new start
+    * point.
+    *
+    * @param cx1 the <i>x</i> coordinate of the curve&#x2019;s new
+    * first control point.
+    *
+    * @param cy1 the <i>y</i> coordinate of the curve&#x2019;s new
+    * first control point.
+    *
+    * @param cx2 the <i>x</i> coordinate of the curve&#x2019;s new
+    * second control point.
+    *
+    * @param cy2 the <i>y</i> coordinate of the curve&#x2019;s new
+    * second control point.
+    *
+    * @param x2 the <i>x</i> coordinate of the curve&#x2019;s new end
+    * point.
+    *
+    * @param y2 the <i>y</i> coordinate of the curve&#x2019;s new end
+    * point.
+    */
+   public abstract void setCurve(double x1, double y1, double cx1, double cy1,
+                                 double cx2, double cy2, double x2, double y2);
+ 
+   /**
+    * Changes the curve geometry, specifying coordinate values in an
+    * array.
+    *
+    * @param coords an array containing the new coordinate values.  The
+    * <i>x</i> coordinate of the new start point is located at
+    * <code>coords[offset]</code>, its <i>y</i> coordinate at
+    * <code>coords[offset + 1]</code>.  The <i>x</i> coordinate of the
+    * new first control point is located at <code>coords[offset +
+    * 2]</code>, its <i>y</i> coordinate at <code>coords[offset +
+    * 3]</code>.  The <i>x</i> coordinate of the new second control
+    * point is located at <code>coords[offset + 4]</code>, its <i>y</i>
+    * coordinate at <code>coords[offset + 5]</code>.  The <i>x</i>
+    * coordinate of the new end point is located at <code>coords[offset
+    * + 6]</code>, its <i>y</i> coordinate at <code>coords[offset +
+    * 7]</code>.
+    *
+    * @param offset the offset of the first coordinate value in
+    * <code>coords</code>.
+    */
+   public void setCurve(double[] coords, int offset)
+   {
+     setCurve(coords[offset++], coords[offset++], coords[offset++],
+              coords[offset++], coords[offset++], coords[offset++],
+              coords[offset++], coords[offset++]);
+   }
+ 
+   /**
+    * Changes the curve geometry, specifying coordinate values in
+    * separate Point objects.
+    *
+    * <p><img src="doc-files/CubicCurve2D-1.png" width="350" height="180"
+    * alt="A drawing of a CubicCurve2D" />
+    *
+    * <p>The curve does not keep any reference to the passed point
+    * objects. Therefore, a later change to <code>p1</code>,
+    * <code>c1</code>, <code>c2</code> or <code>p2</code> will not
+    * affect the curve geometry.
+    *
+    * @param p1 the new start point.
+    * @param c1 the new first control point.
+    * @param c2 the new second control point.
+    * @param p2 the new end point.
+    */
+   public void setCurve(Point2D p1, Point2D c1, Point2D c2, Point2D p2)
+   {
+     setCurve(p1.getX(), p1.getY(), c1.getX(), c1.getY(), c2.getX(), c2.getY(),
+              p2.getX(), p2.getY());
+   }
+ 
+   /**
+    * Changes the curve geometry, specifying coordinate values in an
+    * array of Point objects.
+    *
+    * <p><img src="doc-files/CubicCurve2D-1.png" width="350" height="180"
+    * alt="A drawing of a CubicCurve2D" />
+    *
+    * <p>The curve does not keep references to the passed point
+    * objects. Therefore, a later change to the <code>pts</code> array
+    * or any of its elements will not affect the curve geometry.
+    *
+    * @param pts an array containing the points. The new start point
+    * is located at <code>pts[offset]</code>, the new first control
+    * point at <code>pts[offset + 1]</code>, the new second control
+    * point at <code>pts[offset + 2]</code>, and the new end point
+    * at <code>pts[offset + 3]</code>.
+    *
+    * @param offset the offset of the start point in <code>pts</code>.
+    */
+   public void setCurve(Point2D[] pts, int offset)
+   {
+     setCurve(pts[offset].getX(), pts[offset++].getY(), pts[offset].getX(),
+              pts[offset++].getY(), pts[offset].getX(), pts[offset++].getY(),
+              pts[offset].getX(), pts[offset++].getY());
+   }
+ 
+   /**
+    * Changes the curve geometry to that of another curve.
+    *
+    * @param c the curve whose coordinates will be copied.
+    */
+   public void setCurve(CubicCurve2D c)
+   {
+     setCurve(c.getX1(), c.getY1(), c.getCtrlX1(), c.getCtrlY1(),
+              c.getCtrlX2(), c.getCtrlY2(), c.getX2(), c.getY2());
+   }
+ 
+   /**
+    * Calculates the squared flatness of a cubic curve, directly
+    * specifying each coordinate value. The flatness is the maximal
+    * distance of a control point to the line between start and end
+    * point.
+    *
+    * <p><img src="doc-files/CubicCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  In comparison to C1,
+    * control point C2 is father away from the gray line. Therefore,
+    * the result will be the square of the distance between C2 and the
+    * gray line, i.e. the squared length of the red line.
+    *
+    * @param x1 the <i>x</i> coordinate of the start point P1.
+    * @param y1 the <i>y</i> coordinate of the start point P1.
+    * @param cx1 the <i>x</i> coordinate of the first control point C1.
+    * @param cy1 the <i>y</i> coordinate of the first control point C1.
+    * @param cx2 the <i>x</i> coordinate of the second control point C2.
+    * @param cy2 the <i>y</i> coordinate of the second control point C2.
+    * @param x2 the <i>x</i> coordinate of the end point P2.
+    * @param y2 the <i>y</i> coordinate of the end point P2.
+    */
+   public static double getFlatnessSq(double x1, double y1, double cx1,
+                                      double cy1, double cx2, double cy2,
+                                      double x2, double y2)
+   {
+     return Math.max(Line2D.ptSegDistSq(x1, y1, x2, y2, cx1, cy1),
+                     Line2D.ptSegDistSq(x1, y1, x2, y2, cx2, cy2));
+   }
+ 
+   /**
+    * Calculates the flatness of a cubic curve, directly specifying
+    * each coordinate value. The flatness is the maximal distance of a
+    * control point to the line between start and end point.
+    *
+    * <p><img src="doc-files/CubicCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  In comparison to C1,
+    * control point C2 is father away from the gray line. Therefore,
+    * the result will be the distance between C2 and the gray line,
+    * i.e. the length of the red line.
+    *
+    * @param x1 the <i>x</i> coordinate of the start point P1.
+    * @param y1 the <i>y</i> coordinate of the start point P1.
+    * @param cx1 the <i>x</i> coordinate of the first control point C1.
+    * @param cy1 the <i>y</i> coordinate of the first control point C1.
+    * @param cx2 the <i>x</i> coordinate of the second control point C2.
+    * @param cy2 the <i>y</i> coordinate of the second control point C2.
+    * @param x2 the <i>x</i> coordinate of the end point P2.
+    * @param y2 the <i>y</i> coordinate of the end point P2.
+    */
+   public static double getFlatness(double x1, double y1, double cx1,
+                                    double cy1, double cx2, double cy2,
+                                    double x2, double y2)
+   {
+     return Math.sqrt(getFlatnessSq(x1, y1, cx1, cy1, cx2, cy2, x2, y2));
+   }
+ 
+   /**
+    * Calculates the squared flatness of a cubic curve, specifying the
+    * coordinate values in an array. The flatness is the maximal
+    * distance of a control point to the line between start and end
+    * point.
+    *
+    * <p><img src="doc-files/CubicCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  In comparison to C1,
+    * control point C2 is father away from the gray line. Therefore,
+    * the result will be the square of the distance between C2 and the
+    * gray line, i.e. the squared length of the red line.
+    *
+    * @param coords an array containing the coordinate values.  The
+    * <i>x</i> coordinate of the start point P1 is located at
+    * <code>coords[offset]</code>, its <i>y</i> coordinate at
+    * <code>coords[offset + 1]</code>.  The <i>x</i> coordinate of the
+    * first control point C1 is located at <code>coords[offset +
+    * 2]</code>, its <i>y</i> coordinate at <code>coords[offset +
+    * 3]</code>. The <i>x</i> coordinate of the second control point C2
+    * is located at <code>coords[offset + 4]</code>, its <i>y</i>
+    * coordinate at <code>coords[offset + 5]</code>. The <i>x</i>
+    * coordinate of the end point P2 is located at <code>coords[offset
+    * + 6]</code>, its <i>y</i> coordinate at <code>coords[offset +
+    * 7]</code>.
+    *
+    * @param offset the offset of the first coordinate value in
+    * <code>coords</code>.
+    */
+   public static double getFlatnessSq(double[] coords, int offset)
+   {
+     return getFlatnessSq(coords[offset++], coords[offset++], coords[offset++],
+                          coords[offset++], coords[offset++], coords[offset++],
+                          coords[offset++], coords[offset++]);
+   }
+ 
+   /**
+    * Calculates the flatness of a cubic curve, specifying the
+    * coordinate values in an array. The flatness is the maximal
+    * distance of a control point to the line between start and end
+    * point.
+    *
+    * <p><img src="doc-files/CubicCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  In comparison to C1,
+    * control point C2 is father away from the gray line. Therefore,
+    * the result will be the distance between C2 and the gray line,
+    * i.e. the length of the red line.
+    *
+    * @param coords an array containing the coordinate values.  The
+    * <i>x</i> coordinate of the start point P1 is located at
+    * <code>coords[offset]</code>, its <i>y</i> coordinate at
+    * <code>coords[offset + 1]</code>.  The <i>x</i> coordinate of the
+    * first control point C1 is located at <code>coords[offset +
+    * 2]</code>, its <i>y</i> coordinate at <code>coords[offset +
+    * 3]</code>. The <i>x</i> coordinate of the second control point C2
+    * is located at <code>coords[offset + 4]</code>, its <i>y</i>
+    * coordinate at <code>coords[offset + 5]</code>. The <i>x</i>
+    * coordinate of the end point P2 is located at <code>coords[offset
+    * + 6]</code>, its <i>y</i> coordinate at <code>coords[offset +
+    * 7]</code>.
+    *
+    * @param offset the offset of the first coordinate value in
+    * <code>coords</code>.
+    */
+   public static double getFlatness(double[] coords, int offset)
+   {
+     return Math.sqrt(getFlatnessSq(coords[offset++], coords[offset++],
+                                    coords[offset++], coords[offset++],
+                                    coords[offset++], coords[offset++],
+                                    coords[offset++], coords[offset++]));
+   }
+ 
+   /**
+    * Calculates the squared flatness of this curve.  The flatness is
+    * the maximal distance of a control point to the line between start
+    * and end point.
+    *
+    * <p><img src="doc-files/CubicCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  In comparison to C1,
+    * control point C2 is father away from the gray line. Therefore,
+    * the result will be the square of the distance between C2 and the
+    * gray line, i.e. the squared length of the red line.
+    */
+   public double getFlatnessSq()
+   {
+     return getFlatnessSq(getX1(), getY1(), getCtrlX1(), getCtrlY1(),
+                          getCtrlX2(), getCtrlY2(), getX2(), getY2());
+   }
+ 
+   /**
+    * Calculates the flatness of this curve.  The flatness is the
+    * maximal distance of a control point to the line between start and
+    * end point.
+    *
+    * <p><img src="doc-files/CubicCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  In comparison to C1,
+    * control point C2 is father away from the gray line. Therefore,
+    * the result will be the distance between C2 and the gray line,
+    * i.e. the length of the red line.
+    */
+   public double getFlatness()
+   {
+     return Math.sqrt(getFlatnessSq(getX1(), getY1(), getCtrlX1(), getCtrlY1(),
+                                    getCtrlX2(), getCtrlY2(), getX2(), getY2()));
+   }
+ 
+   /**
+    * Subdivides this curve into two halves.
+    *
+    * <p><img src="doc-files/CubicCurve2D-3.png" width="700"
+    * height="180" alt="A drawing that illustrates the effects of
+    * subdividing a CubicCurve2D" />
+    *
+    * @param left a curve whose geometry will be set to the left half
+    * of this curve, or <code>null</code> if the caller is not
+    * interested in the left half.
+    *
+    * @param right a curve whose geometry will be set to the right half
+    * of this curve, or <code>null</code> if the caller is not
+    * interested in the right half.
+    */
+   public void subdivide(CubicCurve2D left, CubicCurve2D right)
+   {
+     // Use empty slots at end to share single array.
+     double[] d = new double[]
+                  {
+                    getX1(), getY1(), getCtrlX1(), getCtrlY1(), getCtrlX2(),
+                    getCtrlY2(), getX2(), getY2(), 0, 0, 0, 0, 0, 0
+                  };
+     subdivide(d, 0, d, 0, d, 6);
+     if (left != null)
+       left.setCurve(d, 0);
+     if (right != null)
+       right.setCurve(d, 6);
+   }
+ 
+   /**
+    * Subdivides a cubic curve into two halves.
+    *
+    * <p><img src="doc-files/CubicCurve2D-3.png" width="700"
+    * height="180" alt="A drawing that illustrates the effects of
+    * subdividing a CubicCurve2D" />
+    *
+    * @param src the curve to be subdivided.
+    *
+    * @param left a curve whose geometry will be set to the left half
+    * of <code>src</code>, or <code>null</code> if the caller is not
+    * interested in the left half.
+    *
+    * @param right a curve whose geometry will be set to the right half
+    * of <code>src</code>, or <code>null</code> if the caller is not
+    * interested in the right half.
+    */
+   public static void subdivide(CubicCurve2D src, CubicCurve2D left,
+                                CubicCurve2D right)
+   {
+     src.subdivide(left, right);
+   }
+ 
+   /**
+    * Subdivides a cubic curve into two halves, passing all coordinates
+    * in an array.
+    *
+    * <p><img src="doc-files/CubicCurve2D-3.png" width="700"
+    * height="180" alt="A drawing that illustrates the effects of
+    * subdividing a CubicCurve2D" />
+    *
+    * <p>The left end point and the right start point will always be
+    * identical. Memory-concious programmers thus may want to pass the
+    * same array for both <code>left</code> and <code>right</code>, and
+    * set <code>rightOff</code> to <code>leftOff + 6</code>.
+    *
+    * @param src an array containing the coordinates of the curve to be
+    * subdivided.  The <i>x</i> coordinate of the start point P1 is
+    * located at <code>src[srcOff]</code>, its <i>y</i> at
+    * <code>src[srcOff + 1]</code>.  The <i>x</i> coordinate of the
+    * first control point C1 is located at <code>src[srcOff +
+    * 2]</code>, its <i>y</i> at <code>src[srcOff + 3]</code>.  The
+    * <i>x</i> coordinate of the second control point C2 is located at
+    * <code>src[srcOff + 4]</code>, its <i>y</i> at <code>src[srcOff +
+    * 5]</code>. The <i>x</i> coordinate of the end point is located at
+    * <code>src[srcOff + 6]</code>, its <i>y</i> at <code>src[srcOff +
+    * 7]</code>.
+    *
+    * @param srcOff an offset into <code>src</code>, specifying
+    * the index of the start point&#x2019;s <i>x</i> coordinate.
+    *
+    * @param left an array that will receive the coordinates of the
+    * left half of <code>src</code>. It is acceptable to pass
+    * <code>src</code>. A caller who is not interested in the left half
+    * can pass <code>null</code>.
+    *
+    * @param leftOff an offset into <code>left</code>, specifying the
+    * index where the start point&#x2019;s <i>x</i> coordinate will be
+    * stored.
+    *
+    * @param right an array that will receive the coordinates of the
+    * right half of <code>src</code>. It is acceptable to pass
+    * <code>src</code> or <code>left</code>. A caller who is not
+    * interested in the right half can pass <code>null</code>.
+    *
+    * @param rightOff an offset into <code>right</code>, specifying the
+    * index where the start point&#x2019;s <i>x</i> coordinate will be
+    * stored.
+    */
+   public static void subdivide(double[] src, int srcOff, double[] left,
+                                int leftOff, double[] right, int rightOff)
+   {
+     // To understand this code, please have a look at the image
+     // "CubicCurve2D-3.png" in the sub-directory "doc-files".
+     double src_C1_x;
+     double src_C1_y;
+     double src_C2_x;
+     double src_C2_y;
+     double left_P1_x;
+     double left_P1_y;
+     double left_C1_x;
+     double left_C1_y;
+     double left_C2_x;
+     double left_C2_y;
+     double right_C1_x;
+     double right_C1_y;
+     double right_C2_x;
+     double right_C2_y;
+     double right_P2_x;
+     double right_P2_y;
+     double Mid_x; // Mid = left.P2 = right.P1
+     double Mid_y; // Mid = left.P2 = right.P1
+ 
+     left_P1_x = src[srcOff];
+     left_P1_y = src[srcOff + 1];
+     src_C1_x = src[srcOff + 2];
+     src_C1_y = src[srcOff + 3];
+     src_C2_x = src[srcOff + 4];
+     src_C2_y = src[srcOff + 5];
+     right_P2_x = src[srcOff + 6];
+     right_P2_y = src[srcOff + 7];
+ 
+     left_C1_x = (left_P1_x + src_C1_x) / 2;
+     left_C1_y = (left_P1_y + src_C1_y) / 2;
+     right_C2_x = (right_P2_x + src_C2_x) / 2;
+     right_C2_y = (right_P2_y + src_C2_y) / 2;
+     Mid_x = (src_C1_x + src_C2_x) / 2;
+     Mid_y = (src_C1_y + src_C2_y) / 2;
+     left_C2_x = (left_C1_x + Mid_x) / 2;
+     left_C2_y = (left_C1_y + Mid_y) / 2;
+     right_C1_x = (Mid_x + right_C2_x) / 2;
+     right_C1_y = (Mid_y + right_C2_y) / 2;
+     Mid_x = (left_C2_x + right_C1_x) / 2;
+     Mid_y = (left_C2_y + right_C1_y) / 2;
+ 
+     if (left != null)
+       {
+ 	left[leftOff] = left_P1_x;
+ 	left[leftOff + 1] = left_P1_y;
+ 	left[leftOff + 2] = left_C1_x;
+ 	left[leftOff + 3] = left_C1_y;
+ 	left[leftOff + 4] = left_C2_x;
+ 	left[leftOff + 5] = left_C2_y;
+ 	left[leftOff + 6] = Mid_x;
+ 	left[leftOff + 7] = Mid_y;
+       }
+ 
+     if (right != null)
+       {
+ 	right[rightOff] = Mid_x;
+ 	right[rightOff + 1] = Mid_y;
+ 	right[rightOff + 2] = right_C1_x;
+ 	right[rightOff + 3] = right_C1_y;
+ 	right[rightOff + 4] = right_C2_x;
+ 	right[rightOff + 5] = right_C2_y;
+ 	right[rightOff + 6] = right_P2_x;
+ 	right[rightOff + 7] = right_P2_y;
+       }
+   }
+ 
+   /**
+    * Finds the non-complex roots of a cubic equation, placing the
+    * results into the same array as the equation coefficients. The
+    * following equation is being solved:
+    *
+    * <blockquote><code>eqn[3]</code> &#xb7; <i>x</i><sup>3</sup>
+    * + <code>eqn[2]</code> &#xb7; <i>x</i><sup>2</sup>
+    * + <code>eqn[1]</code> &#xb7; <i>x</i>
+    * + <code>eqn[0]</code>
+    * = 0
+    * </blockquote>
+    *
+    * <p>For some background about solving cubic equations, see the
+    * article <a
+    * href="http://planetmath.org/encyclopedia/CubicFormula.html"
+    * >&#x201c;Cubic Formula&#x201d;</a> in <a
+    * href="http://planetmath.org/" >PlanetMath</a>.  For an extensive
+    * library of numerical algorithms written in the C programming
+    * language, see the <a href= "http://www.gnu.org/software/gsl/">GNU
+    * Scientific Library</a>, from which this implementation was
+    * adapted.
+    *
+    * @param eqn an array with the coefficients of the equation. When
+    * this procedure has returned, <code>eqn</code> will contain the
+    * non-complex solutions of the equation, in no particular order.
+    *
+    * @return the number of non-complex solutions. A result of 0
+    * indicates that the equation has no non-complex solutions. A
+    * result of -1 indicates that the equation is constant (i.e.,
+    * always or never zero).
+    *
+    * @see #solveCubic(double[], double[])
+    * @see QuadCurve2D#solveQuadratic(double[],double[])
+    *
+    * @author Brian Gough (bjg@network-theory.com)
+    * (original C implementation in the <a href=
+    * "http://www.gnu.org/software/gsl/">GNU Scientific Library</a>)
+    *
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    * (adaptation to Java)
+    */
+   public static int solveCubic(double[] eqn)
+   {
+     return solveCubic(eqn, eqn);
+   }
+ 
+   /**
+    * Finds the non-complex roots of a cubic equation. The following
+    * equation is being solved:
+    *
+    * <blockquote><code>eqn[3]</code> &#xb7; <i>x</i><sup>3</sup>
+    * + <code>eqn[2]</code> &#xb7; <i>x</i><sup>2</sup>
+    * + <code>eqn[1]</code> &#xb7; <i>x</i>
+    * + <code>eqn[0]</code>
+    * = 0
+    * </blockquote>
+    *
+    * <p>For some background about solving cubic equations, see the
+    * article <a
+    * href="http://planetmath.org/encyclopedia/CubicFormula.html"
+    * >&#x201c;Cubic Formula&#x201d;</a> in <a
+    * href="http://planetmath.org/" >PlanetMath</a>.  For an extensive
+    * library of numerical algorithms written in the C programming
+    * language, see the <a href= "http://www.gnu.org/software/gsl/">GNU
+    * Scientific Library</a>, from which this implementation was
+    * adapted.
+    *
+    * @see QuadCurve2D#solveQuadratic(double[],double[])
+    *
+    * @param eqn an array with the coefficients of the equation.
+    *
+    * @param res an array into which the non-complex roots will be
+    * stored.  The results may be in an arbitrary order. It is safe to
+    * pass the same array object reference for both <code>eqn</code>
+    * and <code>res</code>.
+    *
+    * @return the number of non-complex solutions. A result of 0
+    * indicates that the equation has no non-complex solutions. A
+    * result of -1 indicates that the equation is constant (i.e.,
+    * always or never zero).
+    *
+    * @author Brian Gough (bjg@network-theory.com)
+    * (original C implementation in the <a href=
+    * "http://www.gnu.org/software/gsl/">GNU Scientific Library</a>)
+    *
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    * (adaptation to Java)
+    */
+   public static int solveCubic(double[] eqn, double[] res)
+   {
+     // Adapted from poly/solve_cubic.c in the GNU Scientific Library
+     // (GSL), revision 1.7 of 2003-07-26. For the original source, see
+     // http://www.gnu.org/software/gsl/
+     //
+     // Brian Gough, the author of that code, has granted the
+     // permission to use it in GNU Classpath under the GNU Classpath
+     // license, and has assigned the copyright to the Free Software
+     // Foundation.
+     //
+     // The Java implementation is very similar to the GSL code, but
+     // not a strict one-to-one copy. For example, GSL would sort the
+     // result.
+     
+     double a;
+     double b;
+     double c;
+     double q;
+     double r;
+     double Q;
+     double R;
+     double c3;
+     double Q3;
+     double R2;
+     double CR2;
+     double CQ3;
+ 
+     // If the cubic coefficient is zero, we have a quadratic equation.
+     c3 = eqn[3];
+     if (c3 == 0)
+       return QuadCurve2D.solveQuadratic(eqn, res);
+ 
+     // Divide the equation by the cubic coefficient.
+     c = eqn[0] / c3;
+     b = eqn[1] / c3;
+     a = eqn[2] / c3;
+ 
+     // We now need to solve x^3 + ax^2 + bx + c = 0.
+     q = a * a - 3 * b;
+     r = 2 * a * a * a - 9 * a * b + 27 * c;
+ 
+     Q = q / 9;
+     R = r / 54;
+ 
+     Q3 = Q * Q * Q;
+     R2 = R * R;
+ 
+     CR2 = 729 * r * r;
+     CQ3 = 2916 * q * q * q;
+ 
+     if (R == 0 && Q == 0)
+       {
+ 	// The GNU Scientific Library would return three identical
+ 	// solutions in this case.
+ 	res[0] = -a / 3;
+ 	return 1;
+       }
+ 
+     if (CR2 == CQ3)
+       {
+ 	/* this test is actually R2 == Q3, written in a form suitable
+ 	   for exact computation with integers */
+ 	/* Due to finite precision some double roots may be missed, and
+ 	   considered to be a pair of complex roots z = x +/- epsilon i
+ 	   close to the real axis. */
+ 	double sqrtQ = Math.sqrt(Q);
+ 
+ 	if (R > 0)
+ 	  {
+ 	    res[0] = -2 * sqrtQ - a / 3;
+ 	    res[1] = sqrtQ - a / 3;
+ 	  }
+ 	else
+ 	  {
+ 	    res[0] = -sqrtQ - a / 3;
+ 	    res[1] = 2 * sqrtQ - a / 3;
+ 	  }
+ 	return 2;
+       }
+ 
+     if (CR2 < CQ3) /* equivalent to R2 < Q3 */
+       {
+ 	double sqrtQ = Math.sqrt(Q);
+ 	double sqrtQ3 = sqrtQ * sqrtQ * sqrtQ;
+ 	double theta = Math.acos(R / sqrtQ3);
+ 	double norm = -2 * sqrtQ;
+ 	res[0] = norm * Math.cos(theta / 3) - a / 3;
+ 	res[1] = norm * Math.cos((theta + 2.0 * Math.PI) / 3) - a / 3;
+ 	res[2] = norm * Math.cos((theta - 2.0 * Math.PI) / 3) - a / 3;
+ 
+ 	// The GNU Scientific Library sorts the results. We don't.
+ 	return 3;
+       }
+ 
+     double sgnR = (R >= 0 ? 1 : -1);
+     double A = -sgnR * Math.pow(Math.abs(R) + Math.sqrt(R2 - Q3), 1.0 / 3.0);
+     double B = Q / A;
+     res[0] = A + B - a / 3;
+     return 1;
+   }
+ 
+   /**
+    * Determines whether a position lies inside the area bounded
+    * by the curve and the straight line connecting its end points.
+    *
+    * <p><img src="doc-files/CubicCurve2D-5.png" width="350" height="180"
+    * alt="A drawing of the area spanned by the curve" />
+    *
+    * <p>The above drawing illustrates in which area points are
+    * considered &#x201c;inside&#x201d; a CubicCurve2D.
+    */
+   public boolean contains(double x, double y)
+   {
+     if (! getBounds2D().contains(x, y))
+       return false;
+ 
+     return ((getAxisIntersections(x, y, true, BIG_VALUE) & 1) != 0);
+   }
+ 
+   /**
+    * Determines whether a point lies inside the area bounded
+    * by the curve and the straight line connecting its end points.
+    *
+    * <p><img src="doc-files/CubicCurve2D-5.png" width="350" height="180"
+    * alt="A drawing of the area spanned by the curve" />
+    *
+    * <p>The above drawing illustrates in which area points are
+    * considered &#x201c;inside&#x201d; a CubicCurve2D.
+    */
+   public boolean contains(Point2D p)
+   {
+     return contains(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Determines whether any part of a rectangle is inside the area bounded
+    * by the curve and the straight line connecting its end points.
+    *
+    * <p><img src="doc-files/CubicCurve2D-5.png" width="350" height="180"
+    * alt="A drawing of the area spanned by the curve" />
+    *
+    * <p>The above drawing illustrates in which area points are
+    * considered &#x201c;inside&#x201d; in a CubicCurve2D.
+    * @see #contains(double, double)
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     if (! getBounds2D().contains(x, y, w, h))
+       return false;
+ 
+     /* Does any edge intersect? */
+     if (getAxisIntersections(x, y, true, w) != 0 /* top */
+         || getAxisIntersections(x, y + h, true, w) != 0 /* bottom */
+         || getAxisIntersections(x + w, y, false, h) != 0 /* right */
+         || getAxisIntersections(x, y, false, h) != 0) /* left */
+       return true;
+ 
+     /* No intersections, is any point inside? */
+     if ((getAxisIntersections(x, y, true, BIG_VALUE) & 1) != 0)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Determines whether any part of a Rectangle2D is inside the area bounded 
+    * by the curve and the straight line connecting its end points.
+    * @see #intersects(double, double, double, double)
+    */
+   public boolean intersects(Rectangle2D r)
+   {
+     return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Determine whether a rectangle is entirely inside the area that is bounded
+    * by the curve and the straight line connecting its end points.
+    *
+    * <p><img src="doc-files/CubicCurve2D-5.png" width="350" height="180"
+    * alt="A drawing of the area spanned by the curve" />
+    *
+    * <p>The above drawing illustrates in which area points are
+    * considered &#x201c;inside&#x201d; a CubicCurve2D.
+    * @see #contains(double, double)
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     if (! getBounds2D().intersects(x, y, w, h))
+       return false;
+ 
+     /* Does any edge intersect? */
+     if (getAxisIntersections(x, y, true, w) != 0 /* top */
+         || getAxisIntersections(x, y + h, true, w) != 0 /* bottom */
+         || getAxisIntersections(x + w, y, false, h) != 0 /* right */
+         || getAxisIntersections(x, y, false, h) != 0) /* left */
+       return false;
+ 
+     /* No intersections, is any point inside? */
+     if ((getAxisIntersections(x, y, true, BIG_VALUE) & 1) != 0)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Determine whether a Rectangle2D is entirely inside the area that is 
+    * bounded by the curve and the straight line connecting its end points.
+    *
+    * <p><img src="doc-files/CubicCurve2D-5.png" width="350" height="180"
+    * alt="A drawing of the area spanned by the curve" />
+    *
+    * <p>The above drawing illustrates in which area points are
+    * considered &#x201c;inside&#x201d; a CubicCurve2D.
+    * @see #contains(double, double)
+    */
+   public boolean contains(Rectangle2D r)
+   {
+     return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Determines the smallest rectangle that encloses the
+    * curve&#x2019;s start, end and control points.
+    */
+   public Rectangle getBounds()
+   {
+     return getBounds2D().getBounds();
+   }
+ 
+   public PathIterator getPathIterator(final AffineTransform at)
+   {
+     return new PathIterator()
+       {
+ 	/** Current coordinate. */
+ 	private int current = 0;
+ 
+ 	public int getWindingRule()
+ 	{
+ 	  return WIND_NON_ZERO;
+ 	}
+ 
+ 	public boolean isDone()
+ 	{
+ 	  return current >= 2;
+ 	}
+ 
+ 	public void next()
+ 	{
+ 	  current++;
+ 	}
+ 
+ 	public int currentSegment(float[] coords)
+ 	{
+ 	  int result;
+ 	  switch (current)
+ 	    {
+ 	    case 0:
+ 	      coords[0] = (float) getX1();
+ 	      coords[1] = (float) getY1();
+ 	      result = SEG_MOVETO;
+ 	      break;
+ 	    case 1:
+ 	      coords[0] = (float) getCtrlX1();
+ 	      coords[1] = (float) getCtrlY1();
+ 	      coords[2] = (float) getCtrlX2();
+ 	      coords[3] = (float) getCtrlY2();
+ 	      coords[4] = (float) getX2();
+ 	      coords[5] = (float) getY2();
+ 	      result = SEG_CUBICTO;
+ 	      break;
+ 	    default:
+ 	      throw new NoSuchElementException("cubic iterator out of bounds");
+ 	    }
+ 	  if (at != null)
+ 	    at.transform(coords, 0, coords, 0, 3);
+ 	  return result;
+ 	}
+ 
+ 	public int currentSegment(double[] coords)
+ 	{
+ 	  int result;
+ 	  switch (current)
+ 	    {
+ 	    case 0:
+ 	      coords[0] = getX1();
+ 	      coords[1] = getY1();
+ 	      result = SEG_MOVETO;
+ 	      break;
+ 	    case 1:
+ 	      coords[0] = getCtrlX1();
+ 	      coords[1] = getCtrlY1();
+ 	      coords[2] = getCtrlX2();
+ 	      coords[3] = getCtrlY2();
+ 	      coords[4] = getX2();
+ 	      coords[5] = getY2();
+ 	      result = SEG_CUBICTO;
+ 	      break;
+ 	    default:
+ 	      throw new NoSuchElementException("cubic iterator out of bounds");
+ 	    }
+ 	  if (at != null)
+ 	    at.transform(coords, 0, coords, 0, 3);
+ 	  return result;
+ 	}
+       };
+   }
+ 
+   public PathIterator getPathIterator(AffineTransform at, double flatness)
+   {
+     return new FlatteningPathIterator(getPathIterator(at), flatness);
+   }
+ 
+   /**
+    * Create a new curve with the same contents as this one.
+    *
+    * @return the clone.
+    */
+   public Object clone()
+   {
+     try
+       {
+ 	return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+ 	throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ 
+   /**
+    * Helper method used by contains() and intersects() methods, that
+    * returns the number of curve/line intersections on a given axis
+    * extending from a certain point.
+    *
+    * @param x x coordinate of the origin point
+    * @param y y coordinate of the origin point
+    * @param useYaxis axis used, if true the positive Y axis is used,
+    * false uses the positive X axis.
+    *
+    * This is an implementation of the line-crossings algorithm,
+    * Detailed in an article on Eric Haines' page:
+    * http://www.acm.org/tog/editors/erich/ptinpoly/
+    *
+    * A special-case not adressed in this code is self-intersections
+    * of the curve, e.g. if the axis intersects the self-itersection,
+    * the degenerate roots of the polynomial will erroneously count as 
+    * a single intersection of the curve, and not two.
+    */
+   private int getAxisIntersections(double x, double y, boolean useYaxis,
+                                    double distance)
+   {
+     int nCrossings = 0;
+     double a0;
+     double a1;
+     double a2;
+     double a3;
+     double b0;
+     double b1;
+     double b2;
+     double b3;
+     double[] r = new double[4];
+     int nRoots;
+ 
+     a0 = a3 = 0.0;
+ 
+     if (useYaxis)
+       {
+ 	a0 = getY1() - y;
+ 	a1 = getCtrlY1() - y;
+ 	a2 = getCtrlY2() - y;
+ 	a3 = getY2() - y;
+ 	b0 = getX1() - x;
+ 	b1 = getCtrlX1() - x;
+ 	b2 = getCtrlX2() - x;
+ 	b3 = getX2() - x;
+       }
+     else
+       {
+ 	a0 = getX1() - x;
+ 	a1 = getCtrlX1() - x;
+ 	a2 = getCtrlX2() - x;
+ 	a3 = getX2() - x;
+ 	b0 = getY1() - y;
+ 	b1 = getCtrlY1() - y;
+ 	b2 = getCtrlY2() - y;
+ 	b3 = getY2() - y;
+       }
+ 
+     /* If the axis intersects a start/endpoint, shift it up by some small 
+        amount to guarantee the line is 'inside'
+        If this is not done, bad behaviour may result for points on that axis.*/
+     if (a0 == 0.0 || a3 == 0.0)
+       {
+ 	double small = getFlatness() * EPSILON;
+ 	if (a0 == 0.0)
+ 	  a0 -= small;
+ 	if (a3 == 0.0)
+ 	  a3 -= small;
+       }
+ 
+     if (useYaxis)
+       {
+ 	if (Line2D.linesIntersect(b0, a0, b3, a3, EPSILON, 0.0, distance, 0.0))
+ 	  nCrossings++;
+       }
+     else
+       {
+ 	if (Line2D.linesIntersect(a0, b0, a3, b3, 0.0, EPSILON, 0.0, distance))
+ 	  nCrossings++;
+       }
+ 
+     r[0] = a0;
+     r[1] = 3 * (a1 - a0);
+     r[2] = 3 * (a2 + a0 - 2 * a1);
+     r[3] = a3 - 3 * a2 + 3 * a1 - a0;
+ 
+     if ((nRoots = solveCubic(r)) != 0)
+       for (int i = 0; i < nRoots; i++)
+         {
+ 	  double t = r[i];
+ 	  if (t >= 0.0 && t <= 1.0)
+ 	    {
+ 	      double crossing = -(t * t * t) * (b0 - 3 * b1 + 3 * b2 - b3)
+ 	                        + 3 * t * t * (b0 - 2 * b1 + b2)
+ 	                        + 3 * t * (b1 - b0) + b0;
+ 	      if (crossing > 0.0 && crossing <= distance)
+ 		nCrossings++;
+ 	    }
+         }
+ 
+     return (nCrossings);
+   }
+ 
+   /**
+    * A two-dimensional curve that is parameterized with a cubic
+    * function and stores coordinate values in double-precision
+    * floating-point format.
+    *
+    * @see CubicCurve2D.Float
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    */
+   public static class Double extends CubicCurve2D
+   {
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s start point.
+      */
+     public double x1;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s start point.
+      */
+     public double y1;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s first control point.
+      */
+     public double ctrlx1;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s first control point.
+      */
+     public double ctrly1;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s second control point.
+      */
+     public double ctrlx2;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s second control point.
+      */
+     public double ctrly2;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s end point.
+      */
+     public double x2;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s end point.
+      */
+     public double y2;
+ 
+     /**
+      * Constructs a new CubicCurve2D that stores its coordinate values
+      * in double-precision floating-point format. All points are
+      * initially at position (0, 0).
+      */
+     public Double()
+     {
+     }
+ 
+     /**
+      * Constructs a new CubicCurve2D that stores its coordinate values
+      * in double-precision floating-point format, specifying the
+      * initial position of each point.
+      *
+      * <p><img src="doc-files/CubicCurve2D-1.png" width="350" height="180"
+      * alt="A drawing of a CubicCurve2D" />
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s start
+      * point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s start
+      * point.
+      *
+      * @param cx1 the <i>x</i> coordinate of the curve&#x2019;s first
+      * control point.
+      *
+      * @param cy1 the <i>y</i> coordinate of the curve&#x2019;s first
+      * control point.
+      *
+      * @param cx2 the <i>x</i> coordinate of the curve&#x2019;s second
+      * control point.
+      *
+      * @param cy2 the <i>y</i> coordinate of the curve&#x2019;s second
+      * control point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s end
+      * point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public Double(double x1, double y1, double cx1, double cy1, double cx2,
+                   double cy2, double x2, double y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       ctrlx1 = cx1;
+       ctrly1 = cy1;
+       ctrlx2 = cx2;
+       ctrly2 = cy2;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s start
+      * point.
+      */
+     public double getX1()
+     {
+       return x1;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s start
+      * point.
+      */
+     public double getY1()
+     {
+       return y1;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s start point.
+      */
+     public Point2D getP1()
+     {
+       return new Point2D.Double(x1, y1);
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s first
+      * control point.
+      */
+     public double getCtrlX1()
+     {
+       return ctrlx1;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s first
+      * control point.
+      */
+     public double getCtrlY1()
+     {
+       return ctrly1;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s first control point.
+      */
+     public Point2D getCtrlP1()
+     {
+       return new Point2D.Double(ctrlx1, ctrly1);
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s second
+      * control point.
+      */
+     public double getCtrlX2()
+     {
+       return ctrlx2;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s second
+      * control point.
+      */
+     public double getCtrlY2()
+     {
+       return ctrly2;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s second control point.
+      */
+     public Point2D getCtrlP2()
+     {
+       return new Point2D.Double(ctrlx2, ctrly2);
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public double getX2()
+     {
+       return x2;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public double getY2()
+     {
+       return y2;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s end point.
+      */
+     public Point2D getP2()
+     {
+       return new Point2D.Double(x2, y2);
+     }
+ 
+     /**
+      * Changes the curve geometry, separately specifying each coordinate
+      * value.
+      *
+      * <p><img src="doc-files/CubicCurve2D-1.png" width="350" height="180"
+      * alt="A drawing of a CubicCurve2D" />
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s new start
+      * point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s new start
+      * point.
+      *
+      * @param cx1 the <i>x</i> coordinate of the curve&#x2019;s new
+      * first control point.
+      *
+      * @param cy1 the <i>y</i> coordinate of the curve&#x2019;s new
+      * first control point.
+      *
+      * @param cx2 the <i>x</i> coordinate of the curve&#x2019;s new
+      * second control point.
+      *
+      * @param cy2 the <i>y</i> coordinate of the curve&#x2019;s new
+      * second control point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s new end
+      * point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s new end
+      * point.
+      */
+     public void setCurve(double x1, double y1, double cx1, double cy1,
+                          double cx2, double cy2, double x2, double y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       ctrlx1 = cx1;
+       ctrly1 = cy1;
+       ctrlx2 = cx2;
+       ctrly2 = cy2;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Determines the smallest rectangle that encloses the
+      * curve&#x2019;s start, end and control points. As the
+      * illustration below shows, the invisible control points may cause
+      * the bounds to be much larger than the area that is actually
+      * covered by the curve.
+      *
+      * <p><img src="doc-files/CubicCurve2D-2.png" width="350" height="180"
+      * alt="An illustration of the bounds of a CubicCurve2D" />
+      */
+     public Rectangle2D getBounds2D()
+     {
+       double nx1 = Math.min(Math.min(x1, ctrlx1), Math.min(ctrlx2, x2));
+       double ny1 = Math.min(Math.min(y1, ctrly1), Math.min(ctrly2, y2));
+       double nx2 = Math.max(Math.max(x1, ctrlx1), Math.max(ctrlx2, x2));
+       double ny2 = Math.max(Math.max(y1, ctrly1), Math.max(ctrly2, y2));
+       return new Rectangle2D.Double(nx1, ny1, nx2 - nx1, ny2 - ny1);
+     }
+   }
+ 
+   /**
+    * A two-dimensional curve that is parameterized with a cubic
+    * function and stores coordinate values in single-precision
+    * floating-point format.
+    *
+    * @see CubicCurve2D.Float
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    */
+   public static class Float extends CubicCurve2D
+   {
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s start point.
+      */
+     public float x1;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s start point.
+      */
+     public float y1;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s first control point.
+      */
+     public float ctrlx1;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s first control point.
+      */
+     public float ctrly1;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s second control point.
+      */
+     public float ctrlx2;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s second control point.
+      */
+     public float ctrly2;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s end point.
+      */
+     public float x2;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s end point.
+      */
+     public float y2;
+ 
+     /**
+      * Constructs a new CubicCurve2D that stores its coordinate values
+      * in single-precision floating-point format. All points are
+      * initially at position (0, 0).
+      */
+     public Float()
+     {
+     }
+ 
+     /**
+      * Constructs a new CubicCurve2D that stores its coordinate values
+      * in single-precision floating-point format, specifying the
+      * initial position of each point.
+      *
+      * <p><img src="doc-files/CubicCurve2D-1.png" width="350" height="180"
+      * alt="A drawing of a CubicCurve2D" />
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s start
+      * point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s start
+      * point.
+      *
+      * @param cx1 the <i>x</i> coordinate of the curve&#x2019;s first
+      * control point.
+      *
+      * @param cy1 the <i>y</i> coordinate of the curve&#x2019;s first
+      * control point.
+      *
+      * @param cx2 the <i>x</i> coordinate of the curve&#x2019;s second
+      * control point.
+      *
+      * @param cy2 the <i>y</i> coordinate of the curve&#x2019;s second
+      * control point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s end
+      * point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public Float(float x1, float y1, float cx1, float cy1, float cx2,
+                  float cy2, float x2, float y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       ctrlx1 = cx1;
+       ctrly1 = cy1;
+       ctrlx2 = cx2;
+       ctrly2 = cy2;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s start
+      * point.
+      */
+     public double getX1()
+     {
+       return x1;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s start
+      * point.
+      */
+     public double getY1()
+     {
+       return y1;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s start point.
+      */
+     public Point2D getP1()
+     {
+       return new Point2D.Float(x1, y1);
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s first
+      * control point.
+      */
+     public double getCtrlX1()
+     {
+       return ctrlx1;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s first
+      * control point.
+      */
+     public double getCtrlY1()
+     {
+       return ctrly1;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s first control point.
+      */
+     public Point2D getCtrlP1()
+     {
+       return new Point2D.Float(ctrlx1, ctrly1);
+     }
+ 
+     /**
+      * Returns the <i>s</i> coordinate of the curve&#x2019;s second
+      * control point.
+      */
+     public double getCtrlX2()
+     {
+       return ctrlx2;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s second
+      * control point.
+      */
+     public double getCtrlY2()
+     {
+       return ctrly2;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s second control point.
+      */
+     public Point2D getCtrlP2()
+     {
+       return new Point2D.Float(ctrlx2, ctrly2);
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public double getX2()
+     {
+       return x2;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public double getY2()
+     {
+       return y2;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s end point.
+      */
+     public Point2D getP2()
+     {
+       return new Point2D.Float(x2, y2);
+     }
+ 
+     /**
+      * Changes the curve geometry, separately specifying each coordinate
+      * value as a double-precision floating-point number.
+      *
+      * <p><img src="doc-files/CubicCurve2D-1.png" width="350" height="180"
+      * alt="A drawing of a CubicCurve2D" />
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s new start
+      * point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s new start
+      * point.
+      *
+      * @param cx1 the <i>x</i> coordinate of the curve&#x2019;s new
+      * first control point.
+      *
+      * @param cy1 the <i>y</i> coordinate of the curve&#x2019;s new
+      * first control point.
+      *
+      * @param cx2 the <i>x</i> coordinate of the curve&#x2019;s new
+      * second control point.
+      *
+      * @param cy2 the <i>y</i> coordinate of the curve&#x2019;s new
+      * second control point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s new end
+      * point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s new end
+      * point.
+      */
+     public void setCurve(double x1, double y1, double cx1, double cy1,
+                          double cx2, double cy2, double x2, double y2)
+     {
+       this.x1 = (float) x1;
+       this.y1 = (float) y1;
+       ctrlx1 = (float) cx1;
+       ctrly1 = (float) cy1;
+       ctrlx2 = (float) cx2;
+       ctrly2 = (float) cy2;
+       this.x2 = (float) x2;
+       this.y2 = (float) y2;
+     }
+ 
+     /**
+      * Changes the curve geometry, separately specifying each coordinate
+      * value as a single-precision floating-point number.
+      *
+      * <p><img src="doc-files/CubicCurve2D-1.png" width="350" height="180"
+      * alt="A drawing of a CubicCurve2D" />
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s new start
+      * point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s new start
+      * point.
+      *
+      * @param cx1 the <i>x</i> coordinate of the curve&#x2019;s new
+      * first control point.
+      *
+      * @param cy1 the <i>y</i> coordinate of the curve&#x2019;s new
+      * first control point.
+      *
+      * @param cx2 the <i>x</i> coordinate of the curve&#x2019;s new
+      * second control point.
+      *
+      * @param cy2 the <i>y</i> coordinate of the curve&#x2019;s new
+      * second control point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s new end
+      * point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s new end
+      * point.
+      */
+     public void setCurve(float x1, float y1, float cx1, float cy1, float cx2,
+                          float cy2, float x2, float y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       ctrlx1 = cx1;
+       ctrly1 = cy1;
+       ctrlx2 = cx2;
+       ctrly2 = cy2;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Determines the smallest rectangle that encloses the
+      * curve&#x2019;s start, end and control points. As the
+      * illustration below shows, the invisible control points may cause
+      * the bounds to be much larger than the area that is actually
+      * covered by the curve.
+      *
+      * <p><img src="doc-files/CubicCurve2D-2.png" width="350" height="180"
+      * alt="An illustration of the bounds of a CubicCurve2D" />
+      */
+     public Rectangle2D getBounds2D()
+     {
+       float nx1 = (float) Math.min(Math.min(x1, ctrlx1), Math.min(ctrlx2, x2));
+       float ny1 = (float) Math.min(Math.min(y1, ctrly1), Math.min(ctrly2, y2));
+       float nx2 = (float) Math.max(Math.max(x1, ctrlx1), Math.max(ctrlx2, x2));
+       float ny2 = (float) Math.max(Math.max(y1, ctrly1), Math.max(ctrly2, y2));
+       return new Rectangle2D.Float(nx1, ny1, nx2 - nx1, ny2 - ny1);
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/Dimension2D.java gcc-4.1.0/libjava/classpath/java/awt/geom/Dimension2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/Dimension2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/Dimension2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,118 ----
+ /* Dimension2D.java -- abstraction of a dimension
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.geom;
+ 
+ /**
+  * This stores a dimension in 2-dimensional space - a width (along the x-axis)
+  * and height (along the y-axis). The storage is left to subclasses.
+  *
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class Dimension2D implements Cloneable
+ {
+   /**
+    * The default constructor.
+    */
+   protected Dimension2D()
+   {
+   }
+ 
+   /**
+    * Get the width of this dimension. A negative result, while legal, is
+    * undefined in meaning.
+    *
+    * @return the width
+    */
+   public abstract double getWidth();
+ 
+   /**
+    * Get the height of this dimension. A negative result, while legal, is
+    * undefined in meaning.
+    *
+    * @return the height
+    */
+   public abstract double getHeight();
+ 
+   /**
+    * Set the size of this dimension to the requested values. Loss of precision
+    * may occur.
+    *
+    * @param w the new width
+    * @param h the new height
+    */
+   public abstract void setSize(double w, double h);
+ 
+   /**
+    * Set the size of this dimension to the requested value. Loss of precision
+    * may occur.
+    *
+    * @param d the dimension containing the new values
+    *
+    * @throws NullPointerException if d is null
+    */
+   public void setSize(Dimension2D d)
+   {
+     setSize(d.getWidth(), d.getHeight());
+   }
+ 
+   /**
+    * Create a new dimension of the same run-time type with the same contents
+    * as this one.
+    *
+    * @return the clone
+    *
+    * @exception OutOfMemoryError If there is not enough memory available.
+    *
+    * @since 1.2
+    */
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ } // class Dimension2D
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/Ellipse2D.java gcc-4.1.0/libjava/classpath/java/awt/geom/Ellipse2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/Ellipse2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/Ellipse2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,413 ----
+ /* Ellipse2D.java -- represents an ellipse in 2-D space
+    Copyright (C) 2000, 2002, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ 
+ /**
+  * Ellipse2D is the shape of an ellipse.
+  * <BR>
+  * <img src="doc-files/Ellipse-1.png" width="347" height="221"
+  * alt="A drawing of an ellipse" /><BR>
+  * The ellipse is defined by it's bounding box (shown in red),
+  * and is defined by the implicit curve:<BR>
+  * <blockquote>(<i>x</i>/<i>a</i>)<sup>2</sup> +
+  * (<i>y</i>/<i>b</i>)<sup>2</sup> = 1<BR><BR></blockquote>
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  *
+  * @since 1.2
+  */
+ public abstract class Ellipse2D extends RectangularShape
+ {
+   /**
+    * Ellipse2D is defined as abstract.
+    * Implementing classes are Ellipse2D.Float and Ellipse2D.Double.
+    */
+   protected Ellipse2D()
+   {
+   }
+ 
+   /**
+    * Determines if a point is contained within the ellipse. <P>
+    * @param x - x coordinate of the point.
+    * @param y - y coordinate of the point.
+    * @return true if the point is within the ellipse, false otherwise.
+    */
+   public boolean contains(double x, double y)
+   {
+     double rx = getWidth() / 2;
+     double ry = getHeight() / 2;
+     double tx = (x - (getX() + rx)) / rx;
+     double ty = (y - (getY() + ry)) / ry;
+     return tx * tx + ty * ty < 1.0;
+   }
+ 
+   /**
+    * Determines if a rectangle is completely contained within the
+    * ellipse. <P>
+    * @param x - x coordinate of the upper-left corner of the rectangle
+    * @param y - y coordinate of the upper-left corner of the rectangle
+    * @param w - width of the rectangle
+    * @param h - height of the rectangle
+    * @return true if the rectangle is completely contained, false otherwise.
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     double x2 = x + w;
+     double y2 = y + h;
+     return (contains(x, y) && contains(x, y2) && contains(x2, y)
+            && contains(x2, y2));
+   }
+ 
+   /**
+    * Returns a PathIterator object corresponding to the ellipse.<P>
+    *
+    * Note: An ellipse cannot be represented exactly in PathIterator
+    * segments, the outline is thefore approximated with cubic
+    * Bezier segments.
+    * 
+    * @param at an optional transform.
+    * @return A path iterator.
+    */
+   public PathIterator getPathIterator(AffineTransform at)
+   {
+     // An ellipse is just a complete arc.
+     return new Arc2D.ArcIterator(this, at);
+   }
+ 
+   /**
+    * Determines if a rectangle intersects any part of the ellipse.<P>
+    * @param x - x coordinate of the upper-left corner of the rectangle
+    * @param y - y coordinate of the upper-left corner of the rectangle
+    * @param w - width of the rectangle
+    * @param h - height of the rectangle
+    * @return true if the rectangle intersects the ellipse, false otherwise.
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     Rectangle2D r = new Rectangle2D.Double(x, y, w, h);
+     if (! r.intersects(getX(), getY(), getWidth(), getHeight()))
+       return false;
+ 
+     if (contains(x, y) || contains(x, y + h) || contains(x + w, y)
+         || contains(x + w, y + h))
+       return true;
+ 
+     Line2D l1 = new Line2D.Double(getX(), getY() + (getHeight() / 2),
+                                   getX() + getWidth(),
+                                   getY() + (getHeight() / 2));
+     Line2D l2 = new Line2D.Double(getX() + (getWidth() / 2), getY(),
+                                   getX() + (getWidth() / 2),
+                                   getY() + getHeight());
+ 
+     if (l1.intersects(r) || l2.intersects(r))
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * An {@link Ellipse2D} that stores its coordinates using <code>double</code>
+    * primitives.
+    */
+   public static class Double extends Ellipse2D
+   {
+     /**
+      * The height of the ellipse.
+      */
+     public double height;
+ 
+     /**
+      * The width of the ellipse.
+      */
+     public double width;
+ 
+     /**
+      * The upper-left x coordinate of the bounding-box
+      */
+     public double x;
+ 
+     /**
+      * The upper-left y coordinate of the bounding-box
+      */
+     public double y;
+ 
+     /**
+      * Creates a new Ellipse2D with an upper-left coordinate of (0,0)
+      * and a zero size.
+      */
+     public Double()
+     {
+     }
+ 
+     /**
+      * Creates a new Ellipse2D within a given rectangle
+      * using double-precision coordinates.<P>
+      * @param x - x coordinate of the upper-left of the bounding rectangle
+      * @param y - y coordinate of the upper-left of the bounding rectangle
+      * @param w - width of the ellipse
+      * @param h - height of the ellipse
+      */
+     public Double(double x, double y, double w, double h)
+     {
+       this.x = x;
+       this.y = y;
+       height = h;
+       width = w;
+     }
+ 
+     /**
+      * Returns the bounding-box of the ellipse.
+      * @return The bounding box.
+      */
+     public Rectangle2D getBounds2D()
+     {
+       return new Rectangle2D.Double(x, y, width, height);
+     }
+ 
+     /**
+      * Returns the height of the ellipse.
+      * @return The height of the ellipse.
+      */
+     public double getHeight()
+     {
+       return height;
+     }
+ 
+     /**
+      * Returns the width of the ellipse.
+      * @return The width of the ellipse.
+      */
+     public double getWidth()
+     {
+       return width;
+     }
+ 
+     /**
+      * Returns x coordinate of the upper-left corner of
+      * the ellipse's bounding-box.
+      * @return The x coordinate.
+      */
+     public double getX()
+     {
+       return x;
+     }
+ 
+     /**
+      * Returns y coordinate of the upper-left corner of
+      * the ellipse's bounding-box.
+      * @return The y coordinate.
+      */
+     public double getY()
+     {
+       return y;
+     }
+ 
+     /**
+      * Returns <code>true</code> if the ellipse encloses no area, and
+      * <code>false</code> otherwise.
+      * 
+      * @return A boolean.
+      */
+     public boolean isEmpty()
+     {
+       return height <= 0 || width <= 0;
+     }
+ 
+     /**
+      * Sets the geometry of the ellipse's bounding box.<P>
+      *
+      * @param x - x coordinate of the upper-left of the bounding rectangle
+      * @param y - y coordinate of the upper-left of the bounding rectangle
+      * @param w - width of the ellipse
+      * @param h - height of the ellipse
+      */
+     public void setFrame(double x, double y, double w, double h)
+     {
+       this.x = x;
+       this.y = y;
+       height = h;
+       width = w;
+     }
+   } // class Double
+ 
+   /**
+    * An {@link Ellipse2D} that stores its coordinates using <code>float</code>
+    * primitives.
+    */
+   public static class Float extends Ellipse2D
+   {
+     /**
+      * The height of the ellipse.
+      */
+     public float height;
+ 
+     /**
+      * The width of the ellipse.
+      */
+     public float width;
+ 
+     /**
+      * The upper-left x coordinate of the bounding-box
+      */
+     public float x;
+ 
+     /**
+      * The upper-left y coordinate of the bounding-box
+      */
+     public float y;
+ 
+     /**
+      * Creates a new Ellipse2D with an upper-left coordinate of (0,0)
+      * and a zero size.
+      */
+     public Float()
+     {
+     }
+ 
+     /**
+      * Creates a new Ellipse2D within a given rectangle
+      * using floating-point precision.<P>
+      * @param x - x coordinate of the upper-left of the bounding rectangle
+      * @param y - y coordinate of the upper-left of the bounding rectangle
+      * @param w - width of the ellipse
+      * @param h - height of the ellipse
+      *
+      */
+     public Float(float x, float y, float w, float h)
+     {
+       this.x = x;
+       this.y = y;
+       this.height = h;
+       this.width = w;
+     }
+ 
+     /**
+      * Returns the bounding-box of the ellipse.
+      * @return The bounding box.
+      */
+     public Rectangle2D getBounds2D()
+     {
+       return new Rectangle2D.Float(x, y, width, height);
+     }
+ 
+     /**
+      * Returns the height of the ellipse.
+      * @return The height of the ellipse.
+      */
+     public double getHeight()
+     {
+       return height;
+     }
+ 
+     /**
+      * Returns the width of the ellipse.
+      * @return The width of the ellipse.
+      */
+     public double getWidth()
+     {
+       return width;
+     }
+ 
+     /**
+      * Returns x coordinate of the upper-left corner of
+      * the ellipse's bounding-box.
+      * @return The x coordinate.
+      */
+     public double getX()
+     {
+       return x;
+     }
+ 
+     /**
+      * Returns y coordinate of the upper-left corner of
+      * the ellipse's bounding-box.
+      * @return The y coordinate.
+      */
+     public double getY()
+     {
+       return y;
+     }
+ 
+     /**
+      * Returns <code>true</code> if the ellipse encloses no area, and
+      * <code>false</code> otherwise.
+      * 
+      * @return A boolean.
+      */
+     public boolean isEmpty()
+     {
+       return height <= 0 || width <= 0;
+     }
+ 
+     /**
+      * Sets the geometry of the ellipse's bounding box.<P>
+      *
+      * @param x - x coordinate of the upper-left of the bounding rectangle
+      * @param y - y coordinate of the upper-left of the bounding rectangle
+      * @param w - width of the ellipse
+      * @param h - height of the ellipse
+      */
+     public void setFrame(float x, float y, float w, float h)
+     {
+       this.x = x;
+       this.y = y;
+       height = h;
+       width = w;
+     }
+ 
+     /**
+      * Sets the geometry of the ellipse's bounding box.
+      *
+      * Note: This leads to a loss of precision.<P>
+      *
+      * @param x - x coordinate of the upper-left of the bounding rectangle
+      * @param y - y coordinate of the upper-left of the bounding rectangle
+      * @param w - width of the ellipse
+      * @param h - height of the ellipse
+      */
+     public void setFrame(double x, double y, double w, double h)
+     {
+       this.x = (float) x;
+       this.y = (float) y;
+       height = (float) h;
+       width = (float) w;
+     }
+   } // class Float
+ } // class Ellipse2D
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/FlatteningPathIterator.java gcc-4.1.0/libjava/classpath/java/awt/geom/FlatteningPathIterator.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/FlatteningPathIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/FlatteningPathIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,579 ----
+ /* FlatteningPathIterator.java -- Approximates curves by straight lines
+    Copyright (C) 2003 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.geom;
+ 
+ import java.util.NoSuchElementException;
+ 
+ 
+ /**
+  * A PathIterator for approximating curved path segments by sequences
+  * of straight lines. Instances of this class will only return
+  * segments of type {@link PathIterator#SEG_MOVETO}, {@link
+  * PathIterator#SEG_LINETO}, and {@link PathIterator#SEG_CLOSE}.
+  *
+  * <p>The accuracy of the approximation is determined by two
+  * parameters:
+  *
+  * <ul><li>The <i>flatness</i> is a threshold value for deciding when
+  * a curved segment is consided flat enough for being approximated by
+  * a single straight line. Flatness is defined as the maximal distance
+  * of a curve control point to the straight line that connects the
+  * curve start and end. A lower flatness threshold means a closer
+  * approximation.  See {@link QuadCurve2D#getFlatness()} and {@link
+  * CubicCurve2D#getFlatness()} for drawings which illustrate the
+  * meaning of flatness.</li>
+  *
+  * <li>The <i>recursion limit</i> imposes an upper bound for how often
+  * a curved segment gets subdivided. A limit of <i>n</i> means that
+  * for each individual quadratic and cubic B&#xe9;zier spline
+  * segment, at most 2<sup><small><i>n</i></small></sup> {@link
+  * PathIterator#SEG_LINETO} segments will be created.</li></ul>
+  *
+  * <p><b>Memory Efficiency:</b> The memory consumption grows linearly
+  * with the recursion limit. Neither the <i>flatness</i> parameter nor
+  * the number of segments in the flattened path will affect the memory
+  * consumption.
+  *
+  * <p><b>Thread Safety:</b> Multiple threads can safely work on
+  * separate instances of this class. However, multiple threads should
+  * not concurrently access the same instance, as no synchronization is
+  * performed.
+  *
+  * @see <a href="doc-files/FlatteningPathIterator-1.html"
+  * >Implementation Note</a>
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  *
+  * @since 1.2
+  */
+ public class FlatteningPathIterator
+   implements PathIterator
+ {
+   /**
+    * The PathIterator whose curved segments are being approximated.
+    */
+   private final PathIterator srcIter;
+ 
+ 
+   /**
+    * The square of the flatness threshold value, which determines when
+    * a curve segment is considered flat enough that no further
+    * subdivision is needed.
+    *
+    * <p>Calculating flatness actually produces the squared flatness
+    * value. To avoid the relatively expensive calculation of a square
+    * root for each curve segment, we perform all flatness comparisons
+    * on squared values.
+    *
+    * @see QuadCurve2D#getFlatnessSq()
+    * @see CubicCurve2D#getFlatnessSq()
+    */
+   private final double flatnessSq;
+ 
+ 
+   /**
+    * The maximal number of subdivions that are performed to
+    * approximate a quadratic or cubic curve segment.
+    */
+   private final int recursionLimit;
+ 
+ 
+   /**
+    * A stack for holding the coordinates of subdivided segments.
+    *
+    * @see <a href="doc-files/FlatteningPathIterator-1.html"
+    * >Implementation Note</a>
+    */
+   private double[] stack;
+ 
+ 
+   /**
+    * The current stack size.
+    *
+    * @see <a href="doc-files/FlatteningPathIterator-1.html"
+    * >Implementation Note</a>
+    */
+   private int stackSize;
+ 
+ 
+   /**
+    * The number of recursions that were performed to arrive at
+    * a segment on the stack.
+    *
+    * @see <a href="doc-files/FlatteningPathIterator-1.html"
+    * >Implementation Note</a>
+    */
+   private int[] recLevel;
+ 
+   
+   
+   private final double[] scratch = new double[6];
+ 
+ 
+   /**
+    * The segment type of the last segment that was returned by
+    * the source iterator.
+    */
+   private int srcSegType;
+ 
+ 
+   /**
+    * The current <i>x</i> position of the source iterator.
+    */
+   private double srcPosX;
+ 
+ 
+   /**
+    * The current <i>y</i> position of the source iterator.
+    */
+   private double srcPosY;
+ 
+ 
+   /**
+    * A flag that indicates when this path iterator has finished its
+    * iteration over path segments.
+    */
+   private boolean done;
+ 
+ 
+   /**
+    * Constructs a new PathIterator for approximating an input
+    * PathIterator with straight lines. The approximation works by
+    * recursive subdivisons, until the specified flatness threshold is
+    * not exceeded.
+    *
+    * <p>There will not be more than 10 nested recursion steps, which
+    * means that a single <code>SEG_QUADTO</code> or
+    * <code>SEG_CUBICTO</code> segment is approximated by at most
+    * 2<sup><small>10</small></sup> = 1024 straight lines.
+    */
+   public FlatteningPathIterator(PathIterator src, double flatness)
+   {
+     this(src, flatness, 10);
+   }
+ 
+ 
+   /**
+    * Constructs a new PathIterator for approximating an input
+    * PathIterator with straight lines. The approximation works by
+    * recursive subdivisons, until the specified flatness threshold is
+    * not exceeded.  Additionally, the number of recursions is also
+    * bound by the specified recursion limit.
+    */
+   public FlatteningPathIterator(PathIterator src, double flatness,
+                                 int limit)
+   {
+     if (flatness < 0 || limit < 0)
+       throw new IllegalArgumentException();
+ 
+     srcIter = src;
+     flatnessSq = flatness * flatness;
+     recursionLimit = limit;
+     fetchSegment();
+   }
+ 
+ 
+   /**
+    * Returns the maximally acceptable flatness.
+    *
+    * @see QuadCurve2D#getFlatness()
+    * @see CubicCurve2D#getFlatness()
+    */
+   public double getFlatness()
+   {
+     return Math.sqrt(flatnessSq);
+   }
+ 
+ 
+   /**
+    * Returns the maximum number of recursive curve subdivisions.
+    */
+   public int getRecursionLimit()
+   {
+     return recursionLimit;
+   }
+ 
+ 
+   // Documentation will be copied from PathIterator.
+   public int getWindingRule()
+   {
+     return srcIter.getWindingRule();
+   }
+ 
+ 
+   // Documentation will be copied from PathIterator.
+   public boolean isDone()
+   {
+     return done;
+   }
+ 
+ 
+   // Documentation will be copied from PathIterator.
+   public void next()
+   {
+     if (stackSize > 0)
+     {
+       --stackSize;
+       if (stackSize > 0)
+       {
+         switch (srcSegType)
+         {
+         case PathIterator.SEG_QUADTO:
+           subdivideQuadratic();
+           return;
+ 
+         case PathIterator.SEG_CUBICTO:
+           subdivideCubic();
+           return;
+ 
+         default:
+           throw new IllegalStateException();
+         }
+       }
+     }
+ 
+     srcIter.next();
+     fetchSegment();
+   }
+ 
+ 
+   // Documentation will be copied from PathIterator.
+   public int currentSegment(double[] coords)
+   {
+     if (done)
+       throw new NoSuchElementException();
+ 
+     switch (srcSegType)
+     {
+     case PathIterator.SEG_CLOSE:
+       return srcSegType;
+ 
+     case PathIterator.SEG_MOVETO:
+     case PathIterator.SEG_LINETO:
+       coords[0] = srcPosX;
+       coords[1] = srcPosY;
+       return srcSegType;
+ 
+     case PathIterator.SEG_QUADTO:
+       if (stackSize == 0)
+       {
+         coords[0] = srcPosX;
+         coords[1] = srcPosY;
+       }
+       else
+       {
+         int sp = stack.length - 4 * stackSize;
+         coords[0] = stack[sp + 2];
+         coords[1] = stack[sp + 3];
+       }
+       return PathIterator.SEG_LINETO;
+ 
+     case PathIterator.SEG_CUBICTO:
+       if (stackSize == 0)
+       {
+         coords[0] = srcPosX;
+         coords[1] = srcPosY;
+       }
+       else
+       {
+         int sp = stack.length - 6 * stackSize;
+         coords[0] = stack[sp + 4];
+         coords[1] = stack[sp + 5];
+       }
+       return PathIterator.SEG_LINETO;
+     }
+ 
+     throw new IllegalStateException();
+   }
+ 
+ 
+   // Documentation will be copied from PathIterator.
+   public int currentSegment(float[] coords)
+   {
+     if (done)
+       throw new NoSuchElementException();
+ 
+     switch (srcSegType)
+     {
+     case PathIterator.SEG_CLOSE:
+       return srcSegType;
+ 
+     case PathIterator.SEG_MOVETO:
+     case PathIterator.SEG_LINETO:
+       coords[0] = (float) srcPosX;
+       coords[1] = (float) srcPosY;
+       return srcSegType;
+ 
+     case PathIterator.SEG_QUADTO:
+       if (stackSize == 0)
+       {
+         coords[0] = (float) srcPosX;
+         coords[1] = (float) srcPosY;
+       }
+       else
+       {
+         int sp = stack.length - 4 * stackSize;
+         coords[0] = (float) stack[sp + 2];
+         coords[1] = (float) stack[sp + 3];
+       }
+       return PathIterator.SEG_LINETO;
+ 
+     case PathIterator.SEG_CUBICTO:
+       if (stackSize == 0)
+       {
+         coords[0] = (float) srcPosX;
+         coords[1] = (float) srcPosY;
+       }
+       else
+       {
+         int sp = stack.length - 6 * stackSize;
+         coords[0] = (float) stack[sp + 4];
+         coords[1] = (float) stack[sp + 5];
+       }
+       return PathIterator.SEG_LINETO;
+     }
+ 
+     throw new IllegalStateException();
+   }
+ 
+ 
+   /**
+    * Fetches the next segment from the source iterator.
+    */
+   private void fetchSegment()
+   {
+     int sp;
+ 
+     if (srcIter.isDone())
+     {
+       done = true;
+       return;
+     }
+ 
+     srcSegType = srcIter.currentSegment(scratch);
+     
+     switch (srcSegType)
+     {
+     case PathIterator.SEG_CLOSE:
+       return;
+ 
+     case PathIterator.SEG_MOVETO:
+     case PathIterator.SEG_LINETO:
+       srcPosX = scratch[0];
+       srcPosY = scratch[1];
+       return;
+ 
+     case PathIterator.SEG_QUADTO:
+       if (recursionLimit == 0)
+       {
+         srcPosX = scratch[2];
+         srcPosY = scratch[3];
+         stackSize = 0;
+         return;
+       }
+       sp = 4 * recursionLimit;
+       stackSize = 1;
+       if (stack == null)
+       {
+         stack = new double[sp + /* 4 + 2 */ 6];
+         recLevel = new int[recursionLimit + 1];
+       }
+       recLevel[0] = 0;
+       stack[sp] = srcPosX;                  // P1.x
+       stack[sp + 1] = srcPosY;              // P1.y
+       stack[sp + 2] = scratch[0];           // C.x
+       stack[sp + 3] = scratch[1];           // C.y
+       srcPosX = stack[sp + 4] = scratch[2]; // P2.x
+       srcPosY = stack[sp + 5] = scratch[3]; // P2.y
+       subdivideQuadratic();
+       break;
+ 
+     case PathIterator.SEG_CUBICTO:
+       if (recursionLimit == 0)
+       {
+         srcPosX = scratch[4];
+         srcPosY = scratch[5];
+         stackSize = 0;
+         return;
+       }
+       sp = 6 * recursionLimit;
+       stackSize = 1;
+       if ((stack == null) || (stack.length < sp + 8))
+       {
+         stack = new double[sp + /* 6 + 2 */ 8];
+         recLevel = new int[recursionLimit + 1];
+       }
+       recLevel[0] = 0;
+       stack[sp] = srcPosX;                  // P1.x
+       stack[sp + 1] = srcPosY;              // P1.y
+       stack[sp + 2] = scratch[0];           // C1.x
+       stack[sp + 3] = scratch[1];           // C1.y
+       stack[sp + 4] = scratch[2];           // C2.x
+       stack[sp + 5] = scratch[3];           // C2.y
+       srcPosX = stack[sp + 6] = scratch[4]; // P2.x
+       srcPosY = stack[sp + 7] = scratch[5]; // P2.y
+       subdivideCubic();
+       return;
+     }
+   }
+ 
+ 
+   /**
+    * Repeatedly subdivides the quadratic curve segment that is on top
+    * of the stack. The iteration terminates when the recursion limit
+    * has been reached, or when the resulting segment is flat enough.
+    */
+   private void subdivideQuadratic()
+   {
+     int sp;
+     int level;
+ 
+     sp = stack.length - 4 * stackSize - 2;
+     level = recLevel[stackSize - 1];
+     while ((level < recursionLimit)
+            && (QuadCurve2D.getFlatnessSq(stack, sp) >= flatnessSq))
+     {
+       recLevel[stackSize] = recLevel[stackSize - 1] = ++level;
+       QuadCurve2D.subdivide(stack, sp, stack, sp - 4, stack, sp);
+       ++stackSize;
+       sp -= 4;
+     }
+   }
+ 
+ 
+   /**
+    * Repeatedly subdivides the cubic curve segment that is on top
+    * of the stack. The iteration terminates when the recursion limit
+    * has been reached, or when the resulting segment is flat enough.
+    */
+   private void subdivideCubic()
+   {
+     int sp;
+     int level;
+ 
+     sp = stack.length - 6 * stackSize - 2;
+     level = recLevel[stackSize - 1];
+     while ((level < recursionLimit)
+            && (CubicCurve2D.getFlatnessSq(stack, sp) >= flatnessSq))
+     {
+       recLevel[stackSize] = recLevel[stackSize - 1] = ++level;
+       
+       CubicCurve2D.subdivide(stack, sp, stack, sp - 6, stack, sp);
+       ++stackSize;
+       sp -= 6;
+     }
+   }
+ 
+ 
+   /* These routines were useful for debugging. Since they would
+    * just bloat the implementation, they are commented out.
+    *
+    *
+ 
+   private static String segToString(int segType, double[] d, int offset)
+   {
+     String s;
+ 
+     switch (segType)
+     {
+     case PathIterator.SEG_CLOSE:
+       return "SEG_CLOSE";
+ 
+     case PathIterator.SEG_MOVETO:
+       return "SEG_MOVETO (" + d[offset] + ", " + d[offset + 1] + ")";
+ 
+     case PathIterator.SEG_LINETO:
+       return "SEG_LINETO (" + d[offset] + ", " + d[offset + 1] + ")";
+ 
+     case PathIterator.SEG_QUADTO:
+       return "SEG_QUADTO (" + d[offset] + ", " + d[offset + 1]
+         + ") (" + d[offset + 2] + ", " + d[offset + 3] + ")";
+ 
+     case PathIterator.SEG_CUBICTO:
+       return "SEG_CUBICTO (" + d[offset] + ", " + d[offset + 1]
+         + ") (" + d[offset + 2] + ", " + d[offset + 3]
+         + ") (" + d[offset + 4] + ", " + d[offset + 5] + ")";
+     }
+ 
+     throw new IllegalStateException();
+   }
+ 
+ 
+   private void dumpQuadraticStack(String msg)
+   {
+     int sp = stack.length - 4 * stackSize - 2;
+     int i = 0;
+     System.err.print("    " + msg + ":");
+     while (sp < stack.length)
+     {
+       System.err.print(" (" + stack[sp] + ", " + stack[sp+1] + ")");
+       if (i < recLevel.length)
+         System.out.print("/" + recLevel[i++]);
+       if (sp + 3 < stack.length)
+         System.err.print(" [" + stack[sp+2] + ", " + stack[sp+3] + "]");
+       sp += 4;
+     }
+     System.err.println();
+   }
+ 
+ 
+   private void dumpCubicStack(String msg)
+   {
+     int sp = stack.length - 6 * stackSize - 2;
+     int i = 0;
+     System.err.print("    " + msg + ":");
+     while (sp < stack.length)
+     {
+       System.err.print(" (" + stack[sp] + ", " + stack[sp+1] + ")");
+       if (i < recLevel.length)
+         System.out.print("/" + recLevel[i++]);
+       if (sp + 3 < stack.length)
+       {
+         System.err.print(" [" + stack[sp+2] + ", " + stack[sp+3] + "]");
+         System.err.print(" [" + stack[sp+4] + ", " + stack[sp+5] + "]");
+       }
+       sp += 6;
+     }
+     System.err.println();
+   }
+ 
+   *
+   *
+   */
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/GeneralPath.java gcc-4.1.0/libjava/classpath/java/awt/geom/GeneralPath.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/GeneralPath.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/GeneralPath.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,959 ----
+ /* GeneralPath.java -- represents a shape built from subpaths
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.geom;
+ 
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ 
+ 
+ /**
+  * A general geometric path, consisting of any number of subpaths
+  * constructed out of straight lines and cubic or quadratic Bezier
+  * curves.
+  *
+  * <p>The inside of the curve is defined for drawing purposes by a winding
+  * rule. Either the WIND_EVEN_ODD or WIND_NON_ZERO winding rule can be chosen.
+  *
+  * <p><img src="doc-files/GeneralPath-1.png" width="300" height="210"
+  * alt="A drawing of a GeneralPath" />
+  * <p>The EVEN_ODD winding rule defines a point as inside a path if:
+  * A ray from the point towards infinity in an arbitrary direction
+  * intersects the path an odd number of times. Points <b>A</b> and
+  * <b>C</b> in the image are considered to be outside the path.
+  * (both intersect twice)
+  * Point <b>B</b> intersects once, and is inside.
+  *
+  * <p>The NON_ZERO winding rule defines a point as inside a path if:
+  * The path intersects the ray in an equal number of opposite directions.
+  * Point <b>A</b> in the image is outside (one intersection in the 
+  * &#x2019;up&#x2019;
+  * direction, one in the &#x2019;down&#x2019; direction) Point <b>B</b> in 
+  * the image is inside (one intersection &#x2019;down&#x2019;)
+  * Point <b>C</b> in the image is outside (two intersections 
+  * &#x2019;down&#x2019;)
+  *
+  * @see Line2D
+  * @see CubicCurve2D
+  * @see QuadCurve2D
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  * @author Sven de Marothy (sven@physto.se)
+  *
+  * @since 1.2
+  */
+ public final class GeneralPath implements Shape, Cloneable
+ {
+   public static final int WIND_EVEN_ODD = PathIterator.WIND_EVEN_ODD;
+   public static final int WIND_NON_ZERO = PathIterator.WIND_NON_ZERO;
+ 
+   /** Initial size if not specified. */
+   private static final int INIT_SIZE = 10;
+ 
+   /** A big number, but not so big it can't survive a few float operations */
+   private static final double BIG_VALUE = java.lang.Double.MAX_VALUE / 10.0;
+ 
+   /** The winding rule.
+    * This is package-private to avoid an accessor method.
+    */
+   int rule;
+ 
+   /**
+    * The path type in points. Note that xpoints[index] and ypoints[index] maps
+    * to types[index]; the control points of quad and cubic paths map as
+    * well but are ignored.
+    * This is package-private to avoid an accessor method.
+    */
+   byte[] types;
+ 
+   /**
+    * The list of all points seen. Since you can only append floats, it makes
+    * sense for these to be float[]. I have no idea why Sun didn't choose to
+    * allow a general path of double precision points.
+    * Note: Storing x and y coords seperately makes for a slower transforms,
+    * But it speeds up and simplifies box-intersection checking a lot.
+    * These are package-private to avoid accessor methods.
+    */
+   float[] xpoints;
+   float[] ypoints;
+ 
+   /** The index of the most recent moveto point, or null. */
+   private int subpath = -1;
+ 
+   /** The next available index into points.
+    * This is package-private to avoid an accessor method.
+    */
+   int index;
+ 
+   /**
+    * Constructs a GeneralPath with the default (NON_ZERO)
+    * winding rule and initial capacity (20).
+    */
+   public GeneralPath()
+   {
+     this(WIND_NON_ZERO, INIT_SIZE);
+   }
+ 
+   /**
+    * Constructs a GeneralPath with a specific winding rule
+    * and the default initial capacity (20).
+    * @param rule the winding rule (WIND_NON_ZERO or WIND_EVEN_ODD)
+    */
+   public GeneralPath(int rule)
+   {
+     this(rule, INIT_SIZE);
+   }
+ 
+   /**
+    * Constructs a GeneralPath with a specific winding rule
+    * and the initial capacity. The initial capacity should be
+    * the approximate number of path segments to be used.
+    * @param rule the winding rule (WIND_NON_ZERO or WIND_EVEN_ODD)
+    * @param capacity the inital capacity, in path segments
+    */
+   public GeneralPath(int rule, int capacity)
+   {
+     if (rule != WIND_EVEN_ODD && rule != WIND_NON_ZERO)
+       throw new IllegalArgumentException();
+     this.rule = rule;
+     if (capacity < INIT_SIZE)
+       capacity = INIT_SIZE;
+     types = new byte[capacity];
+     xpoints = new float[capacity];
+     ypoints = new float[capacity];
+   }
+ 
+   /**
+    * Constructs a GeneralPath from an arbitrary shape object.
+    * The Shapes PathIterator path and winding rule will be used.
+    * @param s the shape
+    */
+   public GeneralPath(Shape s)
+   {
+     types = new byte[INIT_SIZE];
+     xpoints = new float[INIT_SIZE];
+     ypoints = new float[INIT_SIZE];
+     PathIterator pi = s.getPathIterator(null);
+     setWindingRule(pi.getWindingRule());
+     append(pi, false);
+   }
+ 
+   /**
+    * Adds a new point to a path.
+    */
+   public void moveTo(float x, float y)
+   {
+     subpath = index;
+     ensureSize(index + 1);
+     types[index] = PathIterator.SEG_MOVETO;
+     xpoints[index] = x;
+     ypoints[index++] = y;
+   }
+ 
+   /**
+    * Appends a straight line to the current path.
+    * @param x x coordinate of the line endpoint.
+    * @param y y coordinate of the line endpoint.
+    */
+   public void lineTo(float x, float y)
+   {
+     ensureSize(index + 1);
+     types[index] = PathIterator.SEG_LINETO;
+     xpoints[index] = x;
+     ypoints[index++] = y;
+   }
+ 
+   /**
+    * Appends a quadratic Bezier curve to the current path.
+    * @param x1 x coordinate of the control point
+    * @param y1 y coordinate of the control point
+    * @param x2 x coordinate of the curve endpoint.
+    * @param y2 y coordinate of the curve endpoint.
+    */
+   public void quadTo(float x1, float y1, float x2, float y2)
+   {
+     ensureSize(index + 2);
+     types[index] = PathIterator.SEG_QUADTO;
+     xpoints[index] = x1;
+     ypoints[index++] = y1;
+     xpoints[index] = x2;
+     ypoints[index++] = y2;
+   }
+ 
+   /**
+    * Appends a cubic Bezier curve to the current path.
+    * @param x1 x coordinate of the first control point
+    * @param y1 y coordinate of the first control point
+    * @param x2 x coordinate of the second control point
+    * @param y2 y coordinate of the second control point
+    * @param x3 x coordinate of the curve endpoint.
+    * @param y3 y coordinate of the curve endpoint.
+    */
+   public void curveTo(float x1, float y1, float x2, float y2, float x3,
+                       float y3)
+   {
+     ensureSize(index + 3);
+     types[index] = PathIterator.SEG_CUBICTO;
+     xpoints[index] = x1;
+     ypoints[index++] = y1;
+     xpoints[index] = x2;
+     ypoints[index++] = y2;
+     xpoints[index] = x3;
+     ypoints[index++] = y3;
+   }
+ 
+   /**
+    * Closes the current subpath by drawing a line
+    * back to the point of the last moveTo.
+    */
+   public void closePath()
+   {
+     ensureSize(index + 1);
+     types[index] = PathIterator.SEG_CLOSE;
+     xpoints[index] = xpoints[subpath];
+     ypoints[index++] = ypoints[subpath];
+   }
+ 
+   /**
+    * Appends the segments of a Shape to the path. If <code>connect</code> is 
+    * true, the new path segments are connected to the existing one with a line.
+    * The winding rule of the Shape is ignored.
+    */
+   public void append(Shape s, boolean connect)
+   {
+     append(s.getPathIterator(null), connect);
+   }
+ 
+   /**
+    * Appends the segments of a PathIterator to this GeneralPath.
+    * Optionally, the initial {@link PathIterator#SEG_MOVETO} segment
+    * of the appended path is changed into a {@link
+    * PathIterator#SEG_LINETO} segment.
+    *
+    * @param iter the PathIterator specifying which segments shall be
+    * appended.
+    *
+    * @param connect <code>true</code> for substituting the initial
+    * {@link PathIterator#SEG_MOVETO} segment by a {@link
+    * PathIterator#SEG_LINETO}, or <code>false</code> for not
+    * performing any substitution. If this GeneralPath is currently
+    * empty, <code>connect</code> is assumed to be <code>false</code>,
+    * thus leaving the initial {@link PathIterator#SEG_MOVETO}
+    * unchanged.
+    */
+   public void append(PathIterator iter, boolean connect)
+   {
+     // A bad implementation of this method had caused Classpath bug #6076.
+     float[] f = new float[6];
+     while (! iter.isDone())
+       {
+ 	switch (iter.currentSegment(f))
+ 	  {
+ 	  case PathIterator.SEG_MOVETO:
+ 	    if (! connect || (index == 0))
+ 	      {
+ 		moveTo(f[0], f[1]);
+ 		break;
+ 	      }
+ 	    if ((index >= 1) && (types[index - 1] == PathIterator.SEG_CLOSE)
+ 	        && (f[0] == xpoints[index - 1])
+ 	        && (f[1] == ypoints[index - 1]))
+ 	      break;
+ 
+ 	  // Fall through.
+ 	  case PathIterator.SEG_LINETO:
+ 	    lineTo(f[0], f[1]);
+ 	    break;
+ 	  case PathIterator.SEG_QUADTO:
+ 	    quadTo(f[0], f[1], f[2], f[3]);
+ 	    break;
+ 	  case PathIterator.SEG_CUBICTO:
+ 	    curveTo(f[0], f[1], f[2], f[3], f[4], f[5]);
+ 	    break;
+ 	  case PathIterator.SEG_CLOSE:
+ 	    closePath();
+ 	    break;
+ 	  }
+ 
+ 	connect = false;
+ 	iter.next();
+       }
+   }
+ 
+   /**
+    * Returns the path&#x2019;s current winding rule.
+    */
+   public int getWindingRule()
+   {
+     return rule;
+   }
+ 
+   /**
+    * Sets the path&#x2019;s winding rule, which controls which areas are 
+    * considered &#x2019;inside&#x2019; or &#x2019;outside&#x2019; the path 
+    * on drawing. Valid rules are WIND_EVEN_ODD for an even-odd winding rule, 
+    * or WIND_NON_ZERO for a non-zero winding rule.
+    */
+   public void setWindingRule(int rule)
+   {
+     if (rule != WIND_EVEN_ODD && rule != WIND_NON_ZERO)
+       throw new IllegalArgumentException();
+     this.rule = rule;
+   }
+ 
+   /**
+    * Returns the current appending point of the path.
+    */
+   public Point2D getCurrentPoint()
+   {
+     if (subpath < 0)
+       return null;
+     return new Point2D.Float(xpoints[index - 1], ypoints[index - 1]);
+   }
+ 
+   /**
+    * Resets the path. All points and segments are destroyed.
+    */
+   public void reset()
+   {
+     subpath = -1;
+     index = 0;
+   }
+ 
+   /**
+    * Applies a transform to the path.
+    */
+   public void transform(AffineTransform xform)
+   {
+     double nx;
+     double ny;
+     double[] m = new double[6];
+     xform.getMatrix(m);
+     for (int i = 0; i < index; i++)
+       {
+ 	nx = m[0] * xpoints[i] + m[2] * ypoints[i] + m[4];
+ 	ny = m[1] * xpoints[i] + m[3] * ypoints[i] + m[5];
+ 	xpoints[i] = (float) nx;
+ 	ypoints[i] = (float) ny;
+       }
+   }
+ 
+   /**
+    * Creates a transformed version of the path.
+    * @param xform the transform to apply
+    * @return a new transformed GeneralPath
+    */
+   public Shape createTransformedShape(AffineTransform xform)
+   {
+     GeneralPath p = new GeneralPath(this);
+     p.transform(xform);
+     return p;
+   }
+ 
+   /**
+    * Returns the path&#x2019;s bounding box.
+    */
+   public Rectangle getBounds()
+   {
+     return getBounds2D().getBounds();
+   }
+ 
+   /**
+    * Returns the path&#x2019;s bounding box, in <code>float</code> precision
+    */
+   public Rectangle2D getBounds2D()
+   {
+     float x1;
+     float y1;
+     float x2;
+     float y2;
+ 
+     if (index > 0)
+       {
+ 	x1 = x2 = xpoints[0];
+ 	y1 = y2 = ypoints[0];
+       }
+     else
+       x1 = x2 = y1 = y2 = 0.0f;
+ 
+     for (int i = 0; i < index; i++)
+       {
+ 	x1 = Math.min(xpoints[i], x1);
+ 	y1 = Math.min(ypoints[i], y1);
+ 	x2 = Math.max(xpoints[i], x2);
+ 	y2 = Math.max(ypoints[i], y2);
+       }
+     return (new Rectangle2D.Float(x1, y1, x2 - x1, y2 - y1));
+   }
+ 
+   /**
+    * Evaluates if a point is within the GeneralPath,
+    * The NON_ZERO winding rule is used, regardless of the
+    * set winding rule.
+    * @param x x coordinate of the point to evaluate
+    * @param y y coordinate of the point to evaluate
+    * @return true if the point is within the path, false otherwise
+    */
+   public boolean contains(double x, double y)
+   {
+     return (getWindingNumber(x, y) != 0);
+   }
+ 
+   /**
+    * Evaluates if a Point2D is within the GeneralPath,
+    * The NON_ZERO winding rule is used, regardless of the
+    * set winding rule.
+    * @param p The Point2D to evaluate
+    * @return true if the point is within the path, false otherwise
+    */
+   public boolean contains(Point2D p)
+   {
+     return contains(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Evaluates if a rectangle is completely contained within the path.
+    * This method will return false in the cases when the box
+    * intersects an inner segment of the path.
+    * (i.e.: The method is accurate for the EVEN_ODD winding rule)
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     if (! getBounds2D().intersects(x, y, w, h))
+       return false;
+ 
+     /* Does any edge intersect? */
+     if (getAxisIntersections(x, y, false, w) != 0 /* top */
+         || getAxisIntersections(x, y + h, false, w) != 0 /* bottom */
+         || getAxisIntersections(x + w, y, true, h) != 0 /* right */
+         || getAxisIntersections(x, y, true, h) != 0) /* left */
+       return false;
+ 
+     /* No intersections, is any point inside? */
+     if (getWindingNumber(x, y) != 0)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Evaluates if a rectangle is completely contained within the path.
+    * This method will return false in the cases when the box
+    * intersects an inner segment of the path.
+    * (i.e.: The method is accurate for the EVEN_ODD winding rule)
+    * @param r the rectangle
+    * @return <code>true</code> if the rectangle is completely contained
+    * within the path, <code>false</code> otherwise
+    */
+   public boolean contains(Rectangle2D r)
+   {
+     return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Evaluates if a rectangle intersects the path.
+    * @param x x coordinate of the rectangle
+    * @param y y coordinate of the rectangle
+    * @param w width of the rectangle
+    * @param h height of the rectangle
+    * @return <code>true</code> if the rectangle intersects the path,
+    * <code>false</code> otherwise
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     /* Does any edge intersect? */
+     if (getAxisIntersections(x, y, false, w) != 0 /* top */
+         || getAxisIntersections(x, y + h, false, w) != 0 /* bottom */
+         || getAxisIntersections(x + w, y, true, h) != 0 /* right */
+         || getAxisIntersections(x, y, true, h) != 0) /* left */
+       return true;
+ 
+     /* No intersections, is any point inside? */
+     if (getWindingNumber(x, y) != 0)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Evaluates if a Rectangle2D intersects the path.
+    * @param r The rectangle
+    * @return <code>true</code> if the rectangle intersects the path,
+    * <code>false</code> otherwise
+    */
+   public boolean intersects(Rectangle2D r)
+   {
+     return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * A PathIterator that iterates over the segments of a GeneralPath.
+    *
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    */
+   private static class GeneralPathIterator implements PathIterator
+   {
+     /**
+      * The number of coordinate values for each segment type.
+      */
+     private static final int[] NUM_COORDS = { 
+                                             /* 0: SEG_MOVETO */ 1, 
+                                             /* 1: SEG_LINETO */ 1, 
+                                             /* 2: SEG_QUADTO */ 2, 
+                                             /* 3: SEG_CUBICTO */ 3, 
+                                             /* 4: SEG_CLOSE */ 0};
+ 
+     /**
+      * The GeneralPath whose segments are being iterated.
+      * This is package-private to avoid an accessor method.
+      */
+     final GeneralPath path;
+ 
+     /**
+      * The affine transformation used to transform coordinates.
+      */
+     private final AffineTransform transform;
+ 
+     /**
+      * The current position of the iterator.
+      */
+     private int pos;
+ 
+     /**
+      * Constructs a new iterator for enumerating the segments of a
+      * GeneralPath.
+      *
+      * @param path the path to enumerate
+      * @param transform an affine transformation for projecting the returned
+      * points, or <code>null</code> to return the original points
+      * without any mapping.
+      */
+     GeneralPathIterator(GeneralPath path, AffineTransform transform)
+     {
+       this.path = path;
+       this.transform = transform;
+     }
+ 
+     /**
+      * Returns the current winding rule of the GeneralPath.
+      */
+     public int getWindingRule()
+     {
+       return path.rule;
+     }
+ 
+     /**
+      * Determines whether the iterator has reached the last segment in
+      * the path.
+      */
+     public boolean isDone()
+     {
+       return pos >= path.index;
+     }
+ 
+     /**
+      * Advances the iterator position by one segment.
+      */
+     public void next()
+     {
+       int seg;
+ 
+       /*
+        * Increment pos by the number of coordinate pairs.
+        */
+       seg = path.types[pos];
+       if (seg == SEG_CLOSE)
+ 	pos++;
+       else
+ 	pos += NUM_COORDS[seg];
+     }
+ 
+     /**
+      * Returns the current segment in float coordinates.
+      */
+     public int currentSegment(float[] coords)
+     {
+       int seg;
+       int numCoords;
+ 
+       seg = path.types[pos];
+       numCoords = NUM_COORDS[seg];
+       if (numCoords > 0)
+         {
+ 	  for (int i = 0; i < numCoords; i++)
+ 	    {
+ 	      coords[i << 1] = path.xpoints[pos + i];
+ 	      coords[(i << 1) + 1] = path.ypoints[pos + i];
+ 	    }
+ 
+ 	  if (transform != null)
+ 	    transform.transform( /* src */
+ 	    coords, /* srcOffset */
+ 	    0, /* dest */ coords, /* destOffset */
+ 	    0, /* numPoints */ numCoords);
+         }
+       return seg;
+     }
+ 
+     /**
+      * Returns the current segment in double coordinates.
+      */
+     public int currentSegment(double[] coords)
+     {
+       int seg;
+       int numCoords;
+ 
+       seg = path.types[pos];
+       numCoords = NUM_COORDS[seg];
+       if (numCoords > 0)
+         {
+ 	  for (int i = 0; i < numCoords; i++)
+ 	    {
+ 	      coords[i << 1] = (double) path.xpoints[pos + i];
+ 	      coords[(i << 1) + 1] = (double) path.ypoints[pos + i];
+ 	    }
+ 	  if (transform != null)
+ 	    transform.transform( /* src */
+ 	    coords, /* srcOffset */
+ 	    0, /* dest */ coords, /* destOffset */
+ 	    0, /* numPoints */ numCoords);
+         }
+       return seg;
+     }
+   }
+ 
+   /**
+    * Creates a PathIterator for iterating along the segments of the path.
+    *
+    * @param at an affine transformation for projecting the returned
+    * points, or <code>null</code> to let the created iterator return
+    * the original points without any mapping.
+    */
+   public PathIterator getPathIterator(AffineTransform at)
+   {
+     return new GeneralPathIterator(this, at);
+   }
+ 
+   /**
+    * Creates a new FlatteningPathIterator for the path
+    */
+   public PathIterator getPathIterator(AffineTransform at, double flatness)
+   {
+     return new FlatteningPathIterator(getPathIterator(at), flatness);
+   }
+ 
+   /**
+    * Creates a new shape of the same run-time type with the same contents 
+    * as this one.
+    *
+    * @return the clone
+    *
+    * @exception OutOfMemoryError If there is not enough memory available.
+    *
+    * @since 1.2
+    */
+   public Object clone()
+   {
+     // This class is final; no need to use super.clone().
+     return new GeneralPath(this);
+   }
+ 
+   /**
+    * Helper method - ensure the size of the data arrays,
+    * otherwise, reallocate new ones twice the size
+    */
+   private void ensureSize(int size)
+   {
+     if (subpath < 0)
+       throw new IllegalPathStateException("need initial moveto");
+     if (size <= xpoints.length)
+       return;
+     byte[] b = new byte[types.length << 1];
+     System.arraycopy(types, 0, b, 0, index);
+     types = b;
+     float[] f = new float[xpoints.length << 1];
+     System.arraycopy(xpoints, 0, f, 0, index);
+     xpoints = f;
+     f = new float[ypoints.length << 1];
+     System.arraycopy(ypoints, 0, f, 0, index);
+     ypoints = f;
+   }
+ 
+   /**
+    * Helper method - Get the total number of intersections from (x,y) along 
+    * a given axis, within a given distance.
+    */
+   private int getAxisIntersections(double x, double y, boolean useYaxis,
+                                    double distance)
+   {
+     return (evaluateCrossings(x, y, false, useYaxis, distance));
+   }
+ 
+   /**
+    * Helper method - returns the winding number of a point.
+    */
+   private int getWindingNumber(double x, double y)
+   {
+     /* Evaluate the crossings from x,y to infinity on the y axis (arbitrary 
+        choice). Note that we don't actually use Double.INFINITY, since that's 
+        slower, and may cause problems. */
+     return (evaluateCrossings(x, y, true, true, BIG_VALUE));
+   }
+ 
+   /**
+    * Helper method - evaluates the number of intersections on an axis from 
+    * the point (x,y) to the point (x,y+distance) or (x+distance,y).
+    * @param x x coordinate.
+    * @param y y coordinate.
+    * @param neg True if opposite-directed intersections should cancel, 
+    * false to sum all intersections.
+    * @param useYaxis Use the Y axis, false uses the X axis.
+    * @param distance Interval from (x,y) on the selected axis to find 
+    * intersections.
+    */
+   private int evaluateCrossings(double x, double y, boolean neg,
+                                 boolean useYaxis, double distance)
+   {
+     float cx = 0.0f;
+     float cy = 0.0f;
+     float firstx = 0.0f;
+     float firsty = 0.0f;
+ 
+     int negative = (neg) ? -1 : 1;
+     double x0;
+     double x1;
+     double x2;
+     double x3;
+     double y0;
+     double y1;
+     double y2;
+     double y3;
+     double[] r = new double[4];
+     int nRoots;
+     double epsilon = 0.0;
+     int pos = 0;
+     int windingNumber = 0;
+     boolean pathStarted = false;
+ 
+     if (index == 0)
+       return (0);
+     if (useYaxis)
+       {
+ 	float[] swap1;
+ 	swap1 = ypoints;
+ 	ypoints = xpoints;
+ 	xpoints = swap1;
+ 	double swap2;
+ 	swap2 = y;
+ 	y = x;
+ 	x = swap2;
+       }
+ 
+     /* Get a value which is hopefully small but not insignificant relative
+      the path. */
+     epsilon = ypoints[0] * 1E-7;
+ 
+     if(epsilon == 0) 
+       epsilon = 1E-7;
+ 
+     pos = 0;
+     while (pos < index)
+       {
+ 	switch (types[pos])
+ 	  {
+ 	  case PathIterator.SEG_MOVETO:
+ 	    if (pathStarted) // close old path
+ 	      {
+ 		x0 = cx;
+ 		y0 = cy;
+ 		x1 = firstx;
+ 		y1 = firsty;
+ 
+ 		if (y0 == 0.0)
+ 		  y0 -= epsilon;
+ 		if (y1 == 0.0)
+ 		  y1 -= epsilon;
+ 		if (Line2D.linesIntersect(x0, y0, x1, y1, 
+ 					  epsilon, 0.0, distance, 0.0))
+ 		  windingNumber += (y1 < y0) ? 1 : negative;
+ 
+ 		cx = firstx;
+ 		cy = firsty;
+ 	      }
+ 	    cx = firstx = xpoints[pos] - (float) x;
+ 	    cy = firsty = ypoints[pos++] - (float) y;
+ 	    pathStarted = true;
+ 	    break;
+ 	  case PathIterator.SEG_CLOSE:
+ 	    x0 = cx;
+ 	    y0 = cy;
+ 	    x1 = firstx;
+ 	    y1 = firsty;
+ 
+ 	    if (y0 == 0.0)
+ 	      y0 -= epsilon;
+ 	    if (y1 == 0.0)
+ 	      y1 -= epsilon;
+ 	    if (Line2D.linesIntersect(x0, y0, x1, y1, 
+ 				      epsilon, 0.0, distance, 0.0))
+ 	      windingNumber += (y1 < y0) ? 1 : negative;
+ 
+ 	    cx = firstx;
+ 	    cy = firsty;
+ 	    pos++;
+ 	    pathStarted = false;
+ 	    break;
+ 	  case PathIterator.SEG_LINETO:
+ 	    x0 = cx;
+ 	    y0 = cy;
+ 	    x1 = xpoints[pos] - (float) x;
+ 	    y1 = ypoints[pos++] - (float) y;
+ 
+ 	    if (y0 == 0.0)
+ 	      y0 -= epsilon;
+ 	    if (y1 == 0.0)
+ 	      y1 -= epsilon;
+ 	    if (Line2D.linesIntersect(x0, y0, x1, y1, 
+ 				      epsilon, 0.0, distance, 0.0))
+ 	      windingNumber += (y1 < y0) ? 1 : negative;
+ 
+ 	    cx = xpoints[pos - 1] - (float) x;
+ 	    cy = ypoints[pos - 1] - (float) y;
+ 	    break;
+ 	  case PathIterator.SEG_QUADTO:
+ 	    x0 = cx;
+ 	    y0 = cy;
+ 	    x1 = xpoints[pos] - x;
+ 	    y1 = ypoints[pos++] - y;
+ 	    x2 = xpoints[pos] - x;
+ 	    y2 = ypoints[pos++] - y;
+ 
+ 	    /* check if curve may intersect X+ axis. */
+ 	    if ((x0 > 0.0 || x1 > 0.0 || x2 > 0.0)
+ 	        && (y0 * y1 <= 0 || y1 * y2 <= 0))
+ 	      {
+ 		if (y0 == 0.0)
+ 		  y0 -= epsilon;
+ 		if (y2 == 0.0)
+ 		  y2 -= epsilon;
+ 
+ 		r[0] = y0;
+ 		r[1] = 2 * (y1 - y0);
+ 		r[2] = (y2 - 2 * y1 + y0);
+ 
+ 		/* degenerate roots (=tangent points) do not
+ 		   contribute to the winding number. */
+ 		if ((nRoots = QuadCurve2D.solveQuadratic(r)) == 2)
+ 		  for (int i = 0; i < nRoots; i++)
+ 		    {
+ 		      float t = (float) r[i];
+ 		      if (t > 0.0f && t < 1.0f)
+ 		        {
+ 			  double crossing = t * t * (x2 - 2 * x1 + x0)
+ 			                    + 2 * t * (x1 - x0) + x0;
+ 			  if (crossing >= 0.0 && crossing <= distance)
+ 			    windingNumber += (2 * t * (y2 - 2 * y1 + y0)
+ 			                   + 2 * (y1 - y0) < 0) ? 1 : negative;
+ 		        }
+ 		    }
+ 	      }
+ 
+ 	    cx = xpoints[pos - 1] - (float) x;
+ 	    cy = ypoints[pos - 1] - (float) y;
+ 	    break;
+ 	  case PathIterator.SEG_CUBICTO:
+ 	    x0 = cx;
+ 	    y0 = cy;
+ 	    x1 = xpoints[pos] - x;
+ 	    y1 = ypoints[pos++] - y;
+ 	    x2 = xpoints[pos] - x;
+ 	    y2 = ypoints[pos++] - y;
+ 	    x3 = xpoints[pos] - x;
+ 	    y3 = ypoints[pos++] - y;
+ 
+ 	    /* check if curve may intersect X+ axis. */
+ 	    if ((x0 > 0.0 || x1 > 0.0 || x2 > 0.0 || x3 > 0.0)
+ 	        && (y0 * y1 <= 0 || y1 * y2 <= 0 || y2 * y3 <= 0))
+ 	      {
+ 		if (y0 == 0.0)
+ 		  y0 -= epsilon;
+ 		if (y3 == 0.0)
+ 		  y3 -= epsilon;
+ 
+ 		r[0] = y0;
+ 		r[1] = 3 * (y1 - y0);
+ 		r[2] = 3 * (y2 + y0 - 2 * y1);
+ 		r[3] = y3 - 3 * y2 + 3 * y1 - y0;
+ 
+ 		if ((nRoots = CubicCurve2D.solveCubic(r)) != 0)
+ 		  for (int i = 0; i < nRoots; i++)
+ 		    {
+ 		      float t = (float) r[i];
+ 		      if (t > 0.0 && t < 1.0)
+ 		        {
+ 			  double crossing = -(t * t * t) * (x0 - 3 * x1
+ 			                    + 3 * x2 - x3)
+ 			                    + 3 * t * t * (x0 - 2 * x1 + x2)
+ 			                    + 3 * t * (x1 - x0) + x0;
+ 			  if (crossing >= 0 && crossing <= distance)
+ 			    windingNumber += (3 * t * t * (y3 + 3 * y1
+ 			                     - 3 * y2 - y0)
+ 			                     + 6 * t * (y0 - 2 * y1 + y2)
+ 			                   + 3 * (y1 - y0) < 0) ? 1 : negative;
+ 		        }
+ 		    }
+ 	      }
+ 
+ 	    cx = xpoints[pos - 1] - (float) x;
+ 	    cy = ypoints[pos - 1] - (float) y;
+ 	    break;
+ 	  }
+       }
+ 
+     // swap coordinates back
+     if (useYaxis)
+       {
+ 	float[] swap;
+ 	swap = ypoints;
+ 	ypoints = xpoints;
+ 	xpoints = swap;
+       }
+     return (windingNumber);
+   }
+ } // class GeneralPath
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/IllegalPathStateException.java gcc-4.1.0/libjava/classpath/java/awt/geom/IllegalPathStateException.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/IllegalPathStateException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/IllegalPathStateException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* IllegalPathStateException.java -- an operation was in an illegal path state
+    Copyright (C) 2000, 2002  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ /**
+  * Thrown when an operation on a path is in an illegal state, such as appending
+  * a segment to a <code>GeneralPath</code> without an initial moveto.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see GeneralPath
+  * @status updated to 1.4
+  */
+ public class IllegalPathStateException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -5158084205220481094L;
+ 
+   /**
+    * Create an exception with no message.
+    */
+   public IllegalPathStateException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param msg the message
+    */
+   public IllegalPathStateException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/Line2D.java gcc-4.1.0/libjava/classpath/java/awt/geom/Line2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/Line2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/Line2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1182 ----
+ /* Line2D.java -- represents a line in 2-D space, plus operations on a line
+    Copyright (C) 2000, 2001, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ import java.util.NoSuchElementException;
+ 
+ /**
+  * Represents a directed line bewteen two points in (x,y) Cartesian space.
+  * Remember, on-screen graphics have increasing x from left-to-right, and
+  * increasing y from top-to-bottom. The storage is left to subclasses.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author David Gilbert
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class Line2D implements Shape, Cloneable
+ {
+   /**
+    * The default constructor.
+    */
+   protected Line2D()
+   {
+   }
+ 
+   /**
+    * Return the x coordinate of the first point.
+    *
+    * @return the starting x coordinate
+    */
+   public abstract double getX1();
+ 
+   /**
+    * Return the y coordinate of the first point.
+    *
+    * @return the starting y coordinate
+    */
+   public abstract double getY1();
+ 
+   /**
+    * Return the first point.
+    *
+    * @return the starting point
+    */
+   public abstract Point2D getP1();
+ 
+   /**
+    * Return the x coordinate of the second point.
+    *
+    * @return the ending x coordinate
+    */
+   public abstract double getX2();
+ 
+   /**
+    * Return the y coordinate of the second point.
+    *
+    * @return the ending y coordinate
+    */
+   public abstract double getY2();
+ 
+   /**
+    * Return the second point.
+    *
+    * @return the ending point
+    */
+   public abstract Point2D getP2();
+ 
+   /**
+    * Set the coordinates of the line to the given coordinates. Loss of
+    * precision may occur due to rounding issues.
+    *
+    * @param x1 the first x coordinate
+    * @param y1 the first y coordinate
+    * @param x2 the second x coordinate
+    * @param y2 the second y coordinate
+    */
+   public abstract void setLine(double x1, double y1, double x2, double y2);
+ 
+   /**
+    * Set the coordinates to the given points.
+    *
+    * @param p1 the first point
+    * @param p2 the second point
+    * @throws NullPointerException if either point is null
+    */
+   public void setLine(Point2D p1, Point2D p2)
+   {
+     setLine(p1.getX(), p1.getY(), p2.getX(), p2.getY());
+   }
+ 
+   /**
+    * Set the coordinates to those of the given line.
+    *
+    * @param l the line to copy
+    * @throws NullPointerException if l is null
+    */
+   public void setLine(Line2D l)
+   {
+     setLine(l.getX1(), l.getY1(), l.getX2(), l.getY2());
+   }
+ 
+   /**
+    * Computes the relative rotation direction needed to pivot the line about
+    * the first point in order to have the second point colinear with point p.
+    * Because of floating point rounding, don't expect this to be a perfect
+    * measure of colinearity. The answer is 1 if the line has a shorter rotation
+    * in the direction of the positive X axis to the negative Y axis
+    * (counter-clockwise in the default Java coordinate system), or -1 if the
+    * shortest rotation is in the opposite direction (clockwise). If p
+    * is already colinear, the return value is -1 if it lies beyond the first
+    * point, 0 if it lies in the segment, or 1 if it lies beyond the second
+    * point. If the first and second point are coincident, this returns 0.
+    *
+    * @param x1 the first x coordinate
+    * @param y1 the first y coordinate
+    * @param x2 the second x coordinate
+    * @param y2 the second y coordinate
+    * @param px the reference x coordinate
+    * @param py the reference y coordinate
+    * @return the relative rotation direction
+    */
+   public static int relativeCCW(double x1, double y1, double x2, double y2,
+                                 double px, double py)
+   {
+     if ((x1 == x2 && y1 == y2)
+         || (x1 == px && y1 == py))
+       return 0; // Coincident points.
+     // Translate to the origin.
+     x2 -= x1;
+     y2 -= y1;
+     px -= x1;
+     py -= y1;
+     double slope2 = y2 / x2;
+     double slopep = py / px;
+     if (slope2 == slopep || (x2 == 0 && px == 0))
+       return y2 > 0 // Colinear.
+         ? (py < 0 ? -1 : py > y2 ? 1 : 0)
+         : (py > 0 ? -1 : py < y2 ? 1 : 0);
+     if (x2 >= 0 && slope2 >= 0)
+       return px >= 0 // Quadrant 1.
+         ? (slope2 > slopep ? 1 : -1)
+         : (slope2 < slopep ? 1 : -1);
+     if (y2 > 0)
+       return px < 0 // Quadrant 2.
+         ? (slope2 > slopep ? 1 : -1)
+         : (slope2 < slopep ? 1 : -1);
+     if (slope2 >= 0.0)
+       return px >= 0 // Quadrant 3.
+         ? (slope2 < slopep ? 1 : -1)
+         : (slope2 > slopep ? 1 : -1);
+     return px < 0 // Quadrant 4.
+       ? (slope2 < slopep ? 1 : -1)
+       : (slope2 > slopep ? 1 : -1);
+   }
+ 
+   /**
+    * Computes the relative rotation direction needed to pivot this line about
+    * the first point in order to have the second point colinear with point p.
+    * Because of floating point rounding, don't expect this to be a perfect
+    * measure of colinearity. The answer is 1 if the line has a shorter rotation
+    * in the direction of the positive X axis to the negative Y axis
+    * (counter-clockwise in the default Java coordinate system), or -1 if the
+    * shortest rotation is in the opposite direction (clockwise). If p
+    * is already colinear, the return value is -1 if it lies beyond the first
+    * point, 0 if it lies in the segment, or 1 if it lies beyond the second
+    * point. If the first and second point are coincident, this returns 0.
+    *
+    * @param px the reference x coordinate
+    * @param py the reference y coordinate
+    * @return the relative rotation direction
+    * @see #relativeCCW(double, double, double, double, double, double)
+    */
+   public int relativeCCW(double px, double py)
+   {
+     return relativeCCW(getX1(), getY1(), getX2(), getY2(), px, py);
+   }
+ 
+   /**
+    * Computes the relative rotation direction needed to pivot this line about
+    * the first point in order to have the second point colinear with point p.
+    * Because of floating point rounding, don't expect this to be a perfect
+    * measure of colinearity. The answer is 1 if the line has a shorter rotation
+    * in the direction of the positive X axis to the negative Y axis
+    * (counter-clockwise in the default Java coordinate system), or -1 if the
+    * shortest rotation is in the opposite direction (clockwise). If p
+    * is already colinear, the return value is -1 if it lies beyond the first
+    * point, 0 if it lies in the segment, or 1 if it lies beyond the second
+    * point. If the first and second point are coincident, this returns 0.
+    *
+    * @param p the reference point
+    * @return the relative rotation direction
+    * @throws NullPointerException if p is null
+    * @see #relativeCCW(double, double, double, double, double, double)
+    */
+   public int relativeCCW(Point2D p)
+   {
+     return relativeCCW(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY());
+   }
+ 
+   /**
+    * Computes twice the (signed) area of the triangle defined by the three
+    * points.  This method is used for intersection testing.
+    * 
+    * @param x1  the x-coordinate of the first point.
+    * @param y1  the y-coordinate of the first point.
+    * @param x2  the x-coordinate of the second point.
+    * @param y2  the y-coordinate of the second point.
+    * @param x3  the x-coordinate of the third point.
+    * @param y3  the y-coordinate of the third point.
+    * 
+    * @return Twice the area.
+    */
+   private static double area2(double x1, double y1,
+                              double x2, double y2,
+                              double x3, double y3) 
+   {
+     return (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1);    
+   }
+ 
+   /**
+    * Returns <code>true</code> if (x3, y3) lies between (x1, y1) and (x2, y2),
+    * and false otherwise,  This test assumes that the three points are 
+    * collinear, and is used for intersection testing.
+    * 
+    * @param x1  the x-coordinate of the first point.
+    * @param y1  the y-coordinate of the first point.
+    * @param x2  the x-coordinate of the second point.
+    * @param y2  the y-coordinate of the second point.
+    * @param x3  the x-coordinate of the third point.
+    * @param y3  the y-coordinate of the third point.
+    * 
+    * @return A boolean.
+    */
+   private static boolean between(double x1, double y1, 
+                                 double x2, double y2, 
+                                 double x3, double y3) 
+   {
+     if (x1 != x2) {
+       return (x1 <= x3 && x3 <= x2) || (x1 >= x3 && x3 >= x2);   
+     }
+     else {
+       return (y1 <= y3 && y3 <= y2) || (y1 >= y3 && y3 >= y2);   
+     }
+   }
+ 
+   /**
+    * Test if the line segment (x1,y1)-&gt;(x2,y2) intersects the line segment 
+    * (x3,y3)-&gt;(x4,y4).
+    *
+    * @param x1 the first x coordinate of the first segment
+    * @param y1 the first y coordinate of the first segment 
+    * @param x2 the second x coordinate of the first segment
+    * @param y2 the second y coordinate of the first segment
+    * @param x3 the first x coordinate of the second segment
+    * @param y3 the first y coordinate of the second segment
+    * @param x4 the second x coordinate of the second segment
+    * @param y4 the second y coordinate of the second segment
+    * @return true if the segments intersect
+    */
+   public static boolean linesIntersect(double x1, double y1,
+                                       double x2, double y2,
+                                       double x3, double y3,
+                                       double x4, double y4)
+   {
+     double a1, a2, a3, a4;
+   
+     // deal with special cases
+     if ((a1 = area2(x1, y1, x2, y2, x3, y3)) == 0.0) 
+     {
+       // check if p3 is between p1 and p2 OR
+       // p4 is collinear also AND either between p1 and p2 OR at opposite ends
+       if (between(x1, y1, x2, y2, x3, y3)) 
+       {
+         return true;
+       }
+       else 
+       {
+         if (area2(x1, y1, x2, y2, x4, y4) == 0.0) 
+         {
+           return between(x3, y3, x4, y4, x1, y1) 
+                  || between (x3, y3, x4, y4, x2, y2);
+         }
+         else {
+           return false;
+         }
+       }
+     }
+     else if ((a2 = area2(x1, y1, x2, y2, x4, y4)) == 0.0) 
+     {
+       // check if p4 is between p1 and p2 (we already know p3 is not
+       // collinear)
+       return between(x1, y1, x2, y2, x4, y4);
+     }
+   
+     if ((a3 = area2(x3, y3, x4, y4, x1, y1)) == 0.0) {
+       // check if p1 is between p3 and p4 OR
+       // p2 is collinear also AND either between p1 and p2 OR at opposite ends
+       if (between(x3, y3, x4, y4, x1, y1)) {
+         return true;
+       }
+       else {
+         if (area2(x3, y3, x4, y4, x2, y2) == 0.0) {
+           return between(x1, y1, x2, y2, x3, y3) 
+                  || between (x1, y1, x2, y2, x4, y4);
+         }
+         else {
+           return false;
+         }
+       }
+     }
+     else if ((a4 = area2(x3, y3, x4, y4, x2, y2)) == 0.0) {
+       // check if p2 is between p3 and p4 (we already know p1 is not
+       // collinear)
+       return between(x3, y3, x4, y4, x2, y2);
+     }
+     else {  // test for regular intersection
+       return ((a1 > 0.0) ^ (a2 > 0.0)) && ((a3 > 0.0) ^ (a4 > 0.0));
+     } 
+   }
+ 
+   /**
+    * Test if this line intersects the line given by (x1,y1)-&gt;(x2,y2).
+    *
+    * @param x1 the first x coordinate of the other segment
+    * @param y1 the first y coordinate of the other segment
+    * @param x2 the second x coordinate of the other segment
+    * @param y2 the second y coordinate of the other segment
+    * @return true if the segments intersect
+    * @see #linesIntersect(double, double, double, double,
+    *                      double, double, double, double)
+    */
+   public boolean intersectsLine(double x1, double y1, double x2, double y2)
+   {
+     return linesIntersect(getX1(), getY1(), getX2(), getY2(),
+                           x1, y1, x2, y2);
+   }
+ 
+   /**
+    * Test if this line intersects the given line.
+    *
+    * @param l the other segment
+    * @return true if the segments intersect
+    * @throws NullPointerException if l is null
+    * @see #linesIntersect(double, double, double, double,
+    *                      double, double, double, double)
+    */
+   public boolean intersectsLine(Line2D l)
+   {
+     return linesIntersect(getX1(), getY1(), getX2(), getY2(),
+                           l.getX1(), l.getY1(), l.getX2(), l.getY2());
+   }
+ 
+   /**
+    * Measures the square of the shortest distance from the reference point
+    * to a point on the line segment. If the point is on the segment, the
+    * result will be 0.
+    *
+    * @param x1 the first x coordinate of the segment
+    * @param y1 the first y coordinate of the segment
+    * @param x2 the second x coordinate of the segment
+    * @param y2 the second y coordinate of the segment
+    * @param px the x coordinate of the point
+    * @param py the y coordinate of the point
+    * @return the square of the distance from the point to the segment
+    * @see #ptSegDist(double, double, double, double, double, double)
+    * @see #ptLineDistSq(double, double, double, double, double, double)
+    */
+   public static double ptSegDistSq(double x1, double y1, double x2, double y2,
+                                    double px, double py)
+   {
+     double pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
+ 
+     double x, y;
+     if (pd2 == 0)
+       {
+         // Points are coincident.
+         x = x1;
+         y = y2;
+       }
+     else
+       {
+         double u = ((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / pd2;
+ 
+         if (u < 0)
+           {
+             // "Off the end"
+             x = x1;
+             y = y1;
+           }
+         else if (u > 1.0)
+           {
+             x = x2;
+             y = y2;
+           }
+         else
+           {
+             x = x1 + u * (x2 - x1);
+             y = y1 + u * (y2 - y1);
+           }
+       }
+ 
+     return (x - px) * (x - px) + (y - py) * (y - py);
+   }
+ 
+   /**
+    * Measures the shortest distance from the reference point to a point on
+    * the line segment. If the point is on the segment, the result will be 0.
+    *
+    * @param x1 the first x coordinate of the segment
+    * @param y1 the first y coordinate of the segment
+    * @param x2 the second x coordinate of the segment
+    * @param y2 the second y coordinate of the segment
+    * @param px the x coordinate of the point
+    * @param py the y coordinate of the point
+    * @return the distance from the point to the segment
+    * @see #ptSegDistSq(double, double, double, double, double, double)
+    * @see #ptLineDist(double, double, double, double, double, double)
+    */
+   public static double ptSegDist(double x1, double y1, double x2, double y2,
+                                  double px, double py)
+   {
+     return Math.sqrt(ptSegDistSq(x1, y1, x2, y2, px, py));
+   }
+ 
+   /**
+    * Measures the square of the shortest distance from the reference point
+    * to a point on this line segment. If the point is on the segment, the
+    * result will be 0.
+    *
+    * @param px the x coordinate of the point
+    * @param py the y coordinate of the point
+    * @return the square of the distance from the point to the segment
+    * @see #ptSegDistSq(double, double, double, double, double, double)
+    */
+   public double ptSegDistSq(double px, double py)
+   {
+     return ptSegDistSq(getX1(), getY1(), getX2(), getY2(), px, py);
+   }
+ 
+   /**
+    * Measures the square of the shortest distance from the reference point
+    * to a point on this line segment. If the point is on the segment, the
+    * result will be 0.
+    *
+    * @param p the point
+    * @return the square of the distance from the point to the segment
+    * @throws NullPointerException if p is null
+    * @see #ptSegDistSq(double, double, double, double, double, double)
+    */
+   public double ptSegDistSq(Point2D p)
+   {
+     return ptSegDistSq(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY());
+   }
+ 
+   /**
+    * Measures the shortest distance from the reference point to a point on
+    * this line segment. If the point is on the segment, the result will be 0.
+    *
+    * @param px the x coordinate of the point
+    * @param py the y coordinate of the point
+    * @return the distance from the point to the segment
+    * @see #ptSegDist(double, double, double, double, double, double)
+    */
+   public double ptSegDist(double px, double py)
+   {
+     return ptSegDist(getX1(), getY1(), getX2(), getY2(), px, py);
+   }
+ 
+   /**
+    * Measures the shortest distance from the reference point to a point on
+    * this line segment. If the point is on the segment, the result will be 0.
+    *
+    * @param p the point
+    * @return the distance from the point to the segment
+    * @throws NullPointerException if p is null
+    * @see #ptSegDist(double, double, double, double, double, double)
+    */
+   public double ptSegDist(Point2D p)
+   {
+     return ptSegDist(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY());
+   }
+ 
+   /**
+    * Measures the square of the shortest distance from the reference point
+    * to a point on the infinite line extended from the segment. If the point
+    * is on the segment, the result will be 0. If the segment is length 0,
+    * the distance is to the common endpoint.
+    *
+    * @param x1 the first x coordinate of the segment
+    * @param y1 the first y coordinate of the segment
+    * @param x2 the second x coordinate of the segment
+    * @param y2 the second y coordinate of the segment
+    * @param px the x coordinate of the point
+    * @param py the y coordinate of the point
+    * @return the square of the distance from the point to the extended line
+    * @see #ptLineDist(double, double, double, double, double, double)
+    * @see #ptSegDistSq(double, double, double, double, double, double)
+    */
+   public static double ptLineDistSq(double x1, double y1, double x2, double y2,
+                                     double px, double py)
+   {
+     double pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
+ 
+     double x, y;
+     if (pd2 == 0)
+       {
+         // Points are coincident.
+         x = x1;
+         y = y2;
+       }
+     else
+       {
+         double u = ((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / pd2;
+         x = x1 + u * (x2 - x1);
+         y = y1 + u * (y2 - y1);
+       }
+ 
+     return (x - px) * (x - px) + (y - py) * (y - py);
+   }
+ 
+   /**
+    * Measures the shortest distance from the reference point to a point on
+    * the infinite line extended from the segment. If the point is on the
+    * segment, the result will be 0. If the segment is length 0, the distance
+    * is to the common endpoint.
+    *
+    * @param x1 the first x coordinate of the segment
+    * @param y1 the first y coordinate of the segment
+    * @param x2 the second x coordinate of the segment
+    * @param y2 the second y coordinate of the segment
+    * @param px the x coordinate of the point
+    * @param py the y coordinate of the point
+    * @return the distance from the point to the extended line
+    * @see #ptLineDistSq(double, double, double, double, double, double)
+    * @see #ptSegDist(double, double, double, double, double, double)
+    */
+   public static double ptLineDist(double x1, double y1,
+                                    double x2, double y2,
+                                    double px, double py)
+   {
+     return Math.sqrt(ptLineDistSq(x1, y1, x2, y2, px, py));
+   }
+ 
+   /**
+    * Measures the square of the shortest distance from the reference point
+    * to a point on the infinite line extended from this segment. If the point
+    * is on the segment, the result will be 0. If the segment is length 0,
+    * the distance is to the common endpoint.
+    *
+    * @param px the x coordinate of the point
+    * @param py the y coordinate of the point
+    * @return the square of the distance from the point to the extended line
+    * @see #ptLineDistSq(double, double, double, double, double, double)
+    */
+   public double ptLineDistSq(double px, double py)
+   {
+     return ptLineDistSq(getX1(), getY1(), getX2(), getY2(), px, py);
+   }
+ 
+   /**
+    * Measures the square of the shortest distance from the reference point
+    * to a point on the infinite line extended from this segment. If the point
+    * is on the segment, the result will be 0. If the segment is length 0,
+    * the distance is to the common endpoint.
+    *
+    * @param p the point
+    * @return the square of the distance from the point to the extended line
+    * @throws NullPointerException if p is null
+    * @see #ptLineDistSq(double, double, double, double, double, double)
+    */
+   public double ptLineDistSq(Point2D p)
+   {
+     return ptLineDistSq(getX1(), getY1(), getX2(), getY2(),
+                         p.getX(), p.getY());
+   }
+ 
+   /**
+    * Measures the shortest distance from the reference point to a point on
+    * the infinite line extended from this segment. If the point is on the
+    * segment, the result will be 0. If the segment is length 0, the distance
+    * is to the common endpoint.
+    *
+    * @param px the x coordinate of the point
+    * @param py the y coordinate of the point
+    * @return the distance from the point to the extended line
+    * @see #ptLineDist(double, double, double, double, double, double)
+    */
+   public double ptLineDist(double px, double py)
+   {
+     return ptLineDist(getX1(), getY1(), getX2(), getY2(), px, py);
+   }
+ 
+   /**
+    * Measures the shortest distance from the reference point to a point on
+    * the infinite line extended from this segment. If the point is on the
+    * segment, the result will be 0. If the segment is length 0, the distance
+    * is to the common endpoint.
+    *
+    * @param p the point
+    * @return the distance from the point to the extended line
+    * @throws NullPointerException if p is null
+    * @see #ptLineDist(double, double, double, double, double, double)
+    */
+   public double ptLineDist(Point2D p)
+   {
+     return ptLineDist(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY());
+   }
+ 
+   /**
+    * Test if a point is contained inside the line. Since a line has no area,
+    * this returns false.
+    *
+    * @param x the x coordinate
+    * @param y the y coordinate
+    * @return false; the line does not contain points
+    */
+   public boolean contains(double x, double y)
+   {
+     return false;
+   }
+ 
+   /**
+    * Test if a point is contained inside the line. Since a line has no area,
+    * this returns false.
+    *
+    * @param p the point
+    * @return false; the line does not contain points
+    */
+   public boolean contains(Point2D p)
+   {
+     return false;
+   }
+ 
+   /**
+    * Tests if this line intersects the interior of the specified rectangle.
+    *
+    * @param x the x coordinate of the rectangle
+    * @param y the y coordinate of the rectangle
+    * @param w the width of the rectangle
+    * @param h the height of the rectangle
+    * @return true if the line intersects the rectangle
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     if (w <= 0 || h <= 0)
+       return false;
+     double x1 = getX1();
+     double y1 = getY1();
+     double x2 = getX2();
+     double y2 = getY2();
+ 
+     if (x1 >= x && x1 <= x + w && y1 >= y && y1 <= y + h)
+       return true;
+     if (x2 >= x && x2 <= x + w && y2 >= y && y2 <= y + h)
+       return true;
+ 
+     double x3 = x + w;
+     double y3 = y + h;
+ 
+     return (linesIntersect(x1, y1, x2, y2, x, y, x, y3)
+             || linesIntersect(x1, y1, x2, y2, x, y3, x3, y3)
+             || linesIntersect(x1, y1, x2, y2, x3, y3, x3, y)
+             || linesIntersect(x1, y1, x2, y2, x3, y, x, y));
+   }
+ 
+   /**
+    * Tests if this line intersects the interior of the specified rectangle.
+    *
+    * @param r the rectangle
+    * @return true if the line intersects the rectangle
+    * @throws NullPointerException if r is null
+    */
+   public boolean intersects(Rectangle2D r)
+   {
+     return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Tests if the line contains a rectangle. Since lines have no area, this
+    * always returns false.
+    *
+    * @param x the x coordinate of the rectangle
+    * @param y the y coordinate of the rectangle
+    * @param w the width of the rectangle
+    * @param h the height of the rectangle
+    * @return false; the line does not contain points
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     return false;
+   }
+ 
+   /**
+    * Tests if the line contains a rectangle. Since lines have no area, this
+    * always returns false.
+    *
+    * @param r the rectangle
+    * @return false; the line does not contain points
+    */
+   public boolean contains(Rectangle2D r)
+   {
+     return false;
+   }
+ 
+   /**
+    * Gets a bounding box (not necessarily minimal) for this line.
+    *
+    * @return the integer bounding box
+    * @see #getBounds2D()
+    */
+   public Rectangle getBounds()
+   {
+     return getBounds2D().getBounds();
+   }
+ 
+   /**
+    * Return a path iterator, possibly applying a transform on the result. This
+    * iterator is not threadsafe.
+    *
+    * @param at the transform, or null
+    * @return a new path iterator
+    */
+   public PathIterator getPathIterator(final AffineTransform at)
+   {
+     return new PathIterator()
+     {
+       /** Current coordinate. */
+       private int current = 0;
+ 
+       public int getWindingRule()
+       {
+         return WIND_NON_ZERO;
+       }
+ 
+       public boolean isDone()
+       {
+         return current >= 2;
+       }
+ 
+       public void next()
+       {
+         current++;
+       }
+ 
+       public int currentSegment(float[] coords)
+       {
+         int result;
+         switch (current)
+           {
+           case 0:
+             coords[0] = (float) getX1();
+             coords[1] = (float) getY1();
+             result = SEG_MOVETO;
+             break;
+           case 1:
+             coords[0] = (float) getX2();
+             coords[1] = (float) getY2();
+             result = SEG_LINETO;
+             break;
+           default:
+             throw new NoSuchElementException("line iterator out of bounds");
+           }
+         if (at != null)
+           at.transform(coords, 0, coords, 0, 1);
+         return result;
+       }
+ 
+       public int currentSegment(double[] coords)
+       {
+         int result;
+         switch (current)
+           {
+           case 0:
+             coords[0] = getX1();
+             coords[1] = getY1();
+             result = SEG_MOVETO;
+             break;
+           case 1:
+             coords[0] = getX2();
+             coords[1] = getY2();
+             result = SEG_LINETO;
+             break;
+           default:
+             throw new NoSuchElementException("line iterator out of bounds");
+           }
+         if (at != null)
+           at.transform(coords, 0, coords, 0, 1);
+         return result;
+       }
+     };
+   }
+ 
+   /**
+    * Return a flat path iterator, possibly applying a transform on the result.
+    * This iterator is not threadsafe.
+    *
+    * @param at the transform, or null
+    * @param flatness ignored, since lines are already flat
+    * @return a new path iterator
+    * @see #getPathIterator(AffineTransform)
+    */
+   public PathIterator getPathIterator(AffineTransform at, double flatness)
+   {
+     return getPathIterator(at);
+   }
+ 
+   /**
+    * Create a new line of the same run-time type with the same contents as
+    * this one.
+    *
+    * @return the clone
+    *
+    * @exception OutOfMemoryError If there is not enough memory available.
+    *
+    * @since 1.2
+    */
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ 
+   /**
+    * This class defines a point in <code>double</code> precision.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.2
+    * @status updated to 1.4
+    */
+   public static class Double extends Line2D
+   {
+     /** The x coordinate of the first point. */
+     public double x1;
+ 
+     /** The y coordinate of the first point. */
+     public double y1;
+ 
+     /** The x coordinate of the second point. */
+     public double x2;
+ 
+     /** The y coordinate of the second point. */
+     public double y2;
+ 
+     /**
+      * Construct the line segment (0,0)-&gt;(0,0).
+      */
+     public Double()
+     {
+     }
+ 
+     /**
+      * Construct the line segment with the specified points.
+      *
+      * @param x1 the x coordinate of the first point
+      * @param y1 the y coordinate of the first point
+      * @param x2 the x coordinate of the second point
+      * @param y2 the y coordinate of the second point
+      */
+     public Double(double x1, double y1, double x2, double y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Construct the line segment with the specified points.
+      *
+      * @param p1 the first point
+      * @param p2 the second point
+      * @throws NullPointerException if either point is null
+      */
+     public Double(Point2D p1, Point2D p2)
+     {
+       x1 = p1.getX();
+       y1 = p1.getY();
+       x2 = p2.getX();
+       y2 = p2.getY();
+     }
+ 
+     /**
+      * Return the x coordinate of the first point.
+      *
+      * @return the value of x1
+      */
+     public double getX1()
+     {
+       return x1;
+     }
+ 
+     /**
+      * Return the y coordinate of the first point.
+      *
+      * @return the value of y1
+      */
+     public double getY1()
+     {
+       return y1;
+     }
+ 
+     /**
+      * Return the first point.
+      *
+      * @return the point (x1,y1)
+      */
+     public Point2D getP1()
+     {
+       return new Point2D.Double(x1, y1);
+     }
+ 
+     /**
+      * Return the x coordinate of the second point.
+      *
+      * @return the value of x2
+      */
+     public double getX2()
+     {
+       return x2;
+     }
+ 
+     /**
+      * Return the y coordinate of the second point.
+      *
+      * @return the value of y2
+      */
+     public double getY2()
+     {
+       return y2;
+     }
+ 
+     /**
+      * Return the second point.
+      *
+      * @return the point (x2,y2)
+      */
+     public Point2D getP2()
+     {
+       return new Point2D.Double(x2, y2);
+     }
+ 
+     /**
+      * Set this line to the given points.
+      *
+      * @param x1 the new x coordinate of the first point
+      * @param y1 the new y coordinate of the first point
+      * @param x2 the new x coordinate of the second point
+      * @param y2 the new y coordinate of the second point
+      */
+     public void setLine(double x1, double y1, double x2, double y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Return the exact bounds of this line segment.
+      *
+      * @return the bounding box
+      */
+     public Rectangle2D getBounds2D()
+     {
+       double x = Math.min(x1, x2);
+       double y = Math.min(y1, y2);
+       double w = Math.abs(x1 - x2);
+       double h = Math.abs(y1 - y2);
+       return new Rectangle2D.Double(x, y, w, h);
+     }
+   } // class Double
+ 
+   /**
+    * This class defines a point in <code>float</code> precision.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.2
+    * @status updated to 1.4
+    */
+   public static class Float extends Line2D
+   {
+     /** The x coordinate of the first point. */
+     public float x1;
+ 
+     /** The y coordinate of the first point. */
+     public float y1;
+ 
+     /** The x coordinate of the second point. */
+     public float x2;
+ 
+     /** The y coordinate of the second point. */
+     public float y2;
+ 
+     /**
+      * Construct the line segment (0,0)-&gt;(0,0).
+      */
+     public Float()
+     {
+     }
+ 
+     /**
+      * Construct the line segment with the specified points.
+      *
+      * @param x1 the x coordinate of the first point
+      * @param y1 the y coordinate of the first point
+      * @param x2 the x coordinate of the second point
+      * @param y2 the y coordinate of the second point
+      */
+     public Float(float x1, float y1, float x2, float y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Construct the line segment with the specified points.
+      *
+      * @param p1 the first point
+      * @param p2 the second point
+      * @throws NullPointerException if either point is null
+      */
+     public Float(Point2D p1, Point2D p2)
+     {
+       x1 = (float) p1.getX();
+       y1 = (float) p1.getY();
+       x2 = (float) p2.getX();
+       y2 = (float) p2.getY();
+     }
+ 
+     /**
+      * Return the x coordinate of the first point.
+      *
+      * @return the value of x1
+      */
+     public double getX1()
+     {
+       return x1;
+     }
+ 
+     /**
+      * Return the y coordinate of the first point.
+      *
+      * @return the value of y1
+      */
+     public double getY1()
+     {
+       return y1;
+     }
+ 
+     /**
+      * Return the first point.
+      *
+      * @return the point (x1,y1)
+      */
+     public Point2D getP1()
+     {
+       return new Point2D.Float(x1, y1);
+     }
+ 
+     /**
+      * Return the x coordinate of the second point.
+      *
+      * @return the value of x2
+      */
+     public double getX2()
+     {
+       return x2;
+     }
+ 
+     /**
+      * Return the y coordinate of the second point.
+      *
+      * @return the value of y2
+      */
+     public double getY2()
+     {
+       return y2;
+     }
+ 
+     /**
+      * Return the second point.
+      *
+      * @return the point (x2,y2)
+      */
+     public Point2D getP2()
+     {
+       return new Point2D.Float(x2, y2);
+     }
+ 
+     /**
+      * Set this line to the given points.
+      *
+      * @param x1 the new x coordinate of the first point
+      * @param y1 the new y coordinate of the first point
+      * @param x2 the new x coordinate of the second point
+      * @param y2 the new y coordinate of the second point
+      */
+     public void setLine(double x1, double y1, double x2, double y2)
+     {
+       this.x1 = (float) x1;
+       this.y1 = (float) y1;
+       this.x2 = (float) x2;
+       this.y2 = (float) y2;
+     }
+ 
+     /**
+      * Set this line to the given points.
+      *
+      * @param x1 the new x coordinate of the first point
+      * @param y1 the new y coordinate of the first point
+      * @param x2 the new x coordinate of the second point
+      * @param y2 the new y coordinate of the second point
+      */
+     public void setLine(float x1, float y1, float x2, float y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Return the exact bounds of this line segment.
+      *
+      * @return the bounding box
+      */
+     public Rectangle2D getBounds2D()
+     {
+       float x = Math.min(x1, x2);
+       float y = Math.min(y1, y2);
+       float w = Math.abs(x1 - x2);
+       float h = Math.abs(y1 - y2);
+       return new Rectangle2D.Float(x, y, w, h);
+     }
+   } // class Float
+ } // class Line2D
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/NoninvertibleTransformException.java gcc-4.1.0/libjava/classpath/java/awt/geom/NoninvertibleTransformException.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/NoninvertibleTransformException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/NoninvertibleTransformException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* NoninvertibleTransformException.java -- a transform can't be inverted
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ /**
+  * Thrown if an operation requires an inverse of an
+  * <code>AffineTransform</code>, but the transform is in a non-invertible
+  * state.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see AffineTransform
+  * @status updated to 1.4
+  */
+ public class NoninvertibleTransformException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 6137225240503990466L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public NoninvertibleTransformException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/PathIterator.java gcc-4.1.0/libjava/classpath/java/awt/geom/PathIterator.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/PathIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/PathIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,189 ----
+ /* PathIterator.java -- describes a shape by iterating over its vertices
+    Copyright (C) 2000, 2002, 2003 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ /**
+  * This interface provides a directed path over the boundary of a shape. The
+  * path can contain 1st through 3rd order Bezier curves (lines, and quadratic
+  * and cubic splines). A shape can have multiple disjoint paths via the
+  * MOVETO directive, and can close a circular path back to the previos
+  * MOVETO via the CLOSE directive.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see java.awt.Shape
+  * @see java.awt.Stroke
+  * @see FlatteningPathIterator
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface PathIterator
+ {
+   /**
+    * The even-odd winding mode: a point is internal to the shape if a ray
+    * from the point to infinity (in any direction) crosses an odd number of
+    * segments.
+    */
+   int WIND_EVEN_ODD = 0;
+ 
+   /**
+    * The non-zero winding mode: a point is internal to the shape if a ray
+    * from the point to infinity (in any direction) crosses a different number
+    * of segments headed clockwise than those headed counterclockwise.
+    */
+   int WIND_NON_ZERO = 1;
+ 
+   /**
+    * Starts a new subpath. There is no segment from the previous vertex.
+    */
+   int SEG_MOVETO = 0;
+ 
+   /**
+    * The current segment is a line.
+    */
+   int SEG_LINETO = 1;
+ 
+   /**
+    * The current segment is a quadratic parametric curve. It is interpolated
+    * as t varies from 0 to 1 over the current point (CP), first control point
+    * (P1), and final interpolated control point (P2):
+    * <pre>
+    *  P(t) = B(2,0)*CP + B(2,1)*P1 + B(2,2)*P2
+    *    0 &lt;= t &lt;= 1
+    *  B(n,m) = mth coefficient of nth degree Bernstein polynomial
+    *         = C(n,m) * t^(m) * (1 - t)^(n-m)
+    *  C(n,m) = Combinations of n things, taken m at a time
+    *         = n! / (m! * (n-m)!)
+    * </pre>
+    */
+   int SEG_QUADTO = 2;
+ 
+   /**
+    * The current segment is a cubic parametric curve (more commonly known as
+    * a Bezier curve). It is interpolated as t varies from 0 to 1 over the
+    * current point (CP), first control point (P1), the second control point
+    * (P2), and final interpolated control point (P3):
+    * <pre>
+    *  P(t) = B(3,0)*CP + B(3,1)*P1 + B(3,2)*P2 + B(3,3)*P3
+    *    0 &lt;= t &lt;= 1
+    *  B(n,m) = mth coefficient of nth degree Bernstein polynomial
+    *         = C(n,m) * t^(m) * (1 - t)^(n-m)
+    *  C(n,m) = Combinations of n things, taken m at a time
+    *         = n! / (m! * (n-m)!)
+    * </pre>
+    */
+   int SEG_CUBICTO = 3;
+ 
+   /**
+    * The current segment closes a loop by an implicit line to the previous
+    * SEG_MOVETO coordinate.
+    */
+   int SEG_CLOSE = 4;
+ 
+   /**
+    * Returns the winding rule to determine which points are inside this path.
+    *
+    * @return the winding rule
+    * @see #WIND_EVEN_ODD
+    * @see #WIND_NON_ZERO
+    */
+   int getWindingRule();
+ 
+   /**
+    * Tests if the iterator is exhausted. If this returns true, currentSegment
+    * and next may throw a NoSuchElementException (although this is not
+    * required).
+    *
+    * @return true if the iteration is complete
+    */
+   boolean isDone();
+ 
+   /**
+    * Advance to the next segment in the iteration. It is not specified what
+    * this does if called when isDone() returns true.
+    *
+    * @throws java.util.NoSuchElementException optional when isDone() is true
+    */
+   void next();
+ 
+   /**
+    * Returns the coordinates of the next point(s), as well as the type of
+    * line segment. The input array must be at least a float[6], to accomodate
+    * up to three (x,y) point pairs (although if you know the iterator is
+    * flat, you can probably get by with a float[2]). If the returned type is
+    * SEG_MOVETO or SEG_LINETO, the first point in the array is modified; if
+    * the returned type is SEG_QUADTO, the first two points are modified; if
+    * the returned type is SEG_CUBICTO, all three points are modified; and if
+    * the returned type is SEG_CLOSE, the array is untouched.
+    *
+    * @param coords the array to place the point coordinates in
+    * @return the segment type
+    * @throws NullPointerException if coords is null
+    * @throws ArrayIndexOutOfBoundsException if coords is too small
+    * @throws java.util.NoSuchElementException optional when isDone() is true
+    * @see #SEG_MOVETO
+    * @see #SEG_LINETO
+    * @see #SEG_QUADTO
+    * @see #SEG_CUBICTO
+    * @see #SEG_CLOSE
+    */
+   int currentSegment(float[] coords);
+ 
+   /**
+    * Returns the coordinates of the next point(s), as well as the type of
+    * line segment. The input array must be at least a double[6], to accomodate
+    * up to three (x,y) point pairs (although if you know the iterator is
+    * flat, you can probably get by with a double[2]). If the returned type is
+    * SEG_MOVETO or SEG_LINETO, the first point in the array is modified; if
+    * the returned type is SEG_QUADTO, the first two points are modified; if
+    * the returned type is SEG_CUBICTO, all three points are modified; and if
+    * the returned type is SEG_CLOSE, the array is untouched.
+    *
+    * @param coords the array to place the point coordinates in
+    * @return the segment type
+    * @throws NullPointerException if coords is null
+    * @throws ArrayIndexOutOfBoundsException if coords is too small
+    * @throws java.util.NoSuchElementException optional when isDone() is true
+    * @see #SEG_MOVETO
+    * @see #SEG_LINETO
+    * @see #SEG_QUADTO
+    * @see #SEG_CUBICTO
+    * @see #SEG_CLOSE
+    */
+   int currentSegment(double[] coords);
+ } // interface PathIterator
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/Point2D.java gcc-4.1.0/libjava/classpath/java/awt/geom/Point2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/Point2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/Point2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,396 ----
+ /* Point2D.java -- generic point in 2-D space
+    Copyright (C) 1999, 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.geom;
+ 
+ /**
+  * This class implements a generic point in 2D Cartesian space. The storage
+  * representation is left up to the subclass. Point includes two useful
+  * nested classes, for float and double storage respectively.
+  *
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class Point2D implements Cloneable
+ {
+   /**
+    * The default constructor.
+    *
+    * @see java.awt.Point
+    * @see Point2D.Float
+    * @see Point2D.Double
+    */
+   protected Point2D()
+   {
+   }
+ 
+   /**
+    * Get the X coordinate, in double precision.
+    *
+    * @return the x coordinate
+    */
+   public abstract double getX();
+ 
+   /**
+    * Get the Y coordinate, in double precision.
+    *
+    * @return the y coordinate
+    */
+   public abstract double getY();
+ 
+   /**
+    * Set the location of this point to the new coordinates. There may be a
+    * loss of precision.
+    *
+    * @param x the new x coordinate
+    * @param y the new y coordinate
+    */
+   public abstract void setLocation(double x, double y);
+ 
+   /**
+    * Set the location of this point to the new coordinates. There may be a
+    * loss of precision.
+    *
+    * @param p the point to copy
+    * @throws NullPointerException if p is null
+    */
+   public void setLocation(Point2D p)
+   {
+     setLocation(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Return the square of the distance between two points.
+    *
+    * @param x1 the x coordinate of point 1
+    * @param y1 the y coordinate of point 1
+    * @param x2 the x coordinate of point 2
+    * @param y2 the y coordinate of point 2
+    * @return (x2 - x1)^2 + (y2 - y1)^2
+    */
+   public static double distanceSq(double x1, double y1, double x2, double y2)
+   {
+     x2 -= x1;
+     y2 -= y1;
+     return x2 * x2 + y2 * y2;
+   }
+ 
+   /**
+    * Return the distance between two points.
+    *
+    * @param x1 the x coordinate of point 1
+    * @param y1 the y coordinate of point 1
+    * @param x2 the x coordinate of point 2
+    * @param y2 the y coordinate of point 2
+    * @return the distance from (x1,y1) to (x2,y2)
+    */
+   public static double distance(double x1, double y1, double x2, double y2)
+   {
+     return Math.sqrt(distanceSq(x1, y1, x2, y2));
+   }
+ 
+   /**
+    * Return the square of the distance from this point to the given one.
+    *
+    * @param x the x coordinate of the other point
+    * @param y the y coordinate of the other point
+    * @return the square of the distance
+    */
+   public double distanceSq(double x, double y)
+   {
+     return distanceSq(getX(), x, getY(), y);
+   }
+ 
+   /**
+    * Return the square of the distance from this point to the given one.
+    *
+    * @param p the other point
+    * @return the square of the distance
+    * @throws NullPointerException if p is null
+    */
+   public double distanceSq(Point2D p)
+   {
+     return distanceSq(getX(), p.getX(), getY(), p.getY());
+   }
+ 
+   /**
+    * Return the distance from this point to the given one.
+    *
+    * @param x the x coordinate of the other point
+    * @param y the y coordinate of the other point
+    * @return the distance
+    */
+   public double distance(double x, double y)
+   {
+     return distance(getX(), x, getY(), y);
+   }
+ 
+   /**
+    * Return the distance from this point to the given one.
+    *
+    * @param p the other point
+    * @return the distance
+    * @throws NullPointerException if p is null
+    */
+   public double distance(Point2D p)
+   {
+     return distance(getX(), p.getX(), getY(), p.getY());
+   }
+ 
+   /**
+    * Create a new point of the same run-time type with the same contents as
+    * this one.
+    *
+    * @return the clone
+    */
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ 
+   /**
+    * Return the hashcode for this point. The formula is not documented, but
+    * appears to be the same as:
+    * <pre>
+    * long l = Double.doubleToLongBits(getY());
+    * l = l * 31 ^ Double.doubleToLongBits(getX());
+    * return (int) ((l >> 32) ^ l);
+    * </pre>
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     // Talk about a fun time reverse engineering this one!
+     long l = java.lang.Double.doubleToLongBits(getY());
+     l = l * 31 ^ java.lang.Double.doubleToLongBits(getX());
+     return (int) ((l >> 32) ^ l);
+   }
+ 
+   /**
+    * Compares two points for equality. This returns true if they have the
+    * same coordinates.
+    *
+    * @param o the point to compare
+    * @return true if it is equal
+    */
+   public boolean equals(Object o)
+   {
+     if (! (o instanceof Point2D))
+       return false;
+     Point2D p = (Point2D) o;
+     return getX() == p.getX() && getY() == p.getY();
+   }
+ 
+   /**
+    * This class defines a point in <code>double</code> precision.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.2
+    * @status updated to 1.4
+    */
+   public static class Double extends Point2D
+   {
+     /** The X coordinate. */
+     public double x;
+ 
+     /** The Y coordinate. */
+     public double y;
+ 
+     /**
+      * Create a new point at (0,0).
+      */
+     public Double()
+     {
+     }
+ 
+     /**
+      * Create a new point at (x,y).
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      */
+     public Double(double x, double y)
+     {
+       this.x = x;
+       this.y = y;
+     }
+ 
+     /**
+      * Return the x coordinate.
+      *
+      * @return the x coordinate
+      */
+     public double getX()
+     {
+       return x;
+     }
+ 
+     /**
+      * Return the y coordinate.
+      *
+      * @return the y coordinate
+      */
+     public double getY()
+     {
+       return y;
+     }
+ 
+     /**
+      * Sets the location of this point.
+      *
+      * @param x the new x coordinate
+      * @param y the new y coordinate
+      */
+     public void setLocation(double x, double y)
+     {
+       this.x = x;
+       this.y = y;
+     }
+ 
+     /**
+      * Returns a string representation of this object. The format is:
+      * <code>"Point2D.Double[" + x + ", " + y + ']'</code>.
+      *
+      * @return a string representation of this object
+      */
+     public String toString()
+     {
+       return "Point2D.Double[" + x + ", " + y + ']';
+     }
+   } // class Double
+ 
+   /**
+    * This class defines a point in <code>float</code> precision.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.2
+    * @status updated to 1.4
+    */
+   public static class Float extends Point2D
+   {
+     /** The X coordinate. */
+     public float x;
+ 
+     /** The Y coordinate. */
+     public float y;
+ 
+     /**
+      * Create a new point at (0,0).
+      */
+     public Float()
+     {
+     }
+ 
+     /**
+      * Create a new point at (x,y).
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      */
+     public Float(float x, float y)
+     {
+       this.x = x;
+       this.y = y;
+     }
+ 
+     /**
+      * Return the x coordinate.
+      *
+      * @return the x coordinate
+      */
+     public double getX()
+     {
+       return x;
+     }
+ 
+     /**
+      * Return the y coordinate.
+      *
+      * @return the y coordinate
+      */
+     public double getY()
+     {
+       return y;
+     }
+ 
+     /**
+      * Sets the location of this point.
+      *
+      * @param x the new x coordinate
+      * @param y the new y coordinate
+      */
+     public void setLocation(double x, double y)
+     {
+       this.x = (float) x;
+       this.y = (float) y;
+     }
+ 
+     /**
+      * Sets the location of this point.
+      *
+      * @param x the new x coordinate
+      * @param y the new y coordinate
+      */
+     public void setLocation(float x, float y)
+     {
+       this.x = x;
+       this.y = y;
+     }
+ 
+     /**
+      * Returns a string representation of this object. The format is:
+      * <code>"Point2D.Float[" + x + ", " + y + ']'</code>.
+      *
+      * @return a string representation of this object
+      */
+     public String toString()
+     {
+       return "Point2D.Float[" + x + ", " + y + ']';
+     }
+   } // class Float
+ } // class Point2D
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/QuadCurve2D.java gcc-4.1.0/libjava/classpath/java/awt/geom/QuadCurve2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/QuadCurve2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/QuadCurve2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1467 ----
+ /* QuadCurve2D.java -- represents a parameterized quadratic curve in 2-D space
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ import java.util.NoSuchElementException;
+ 
+ /**
+  * A two-dimensional curve that is parameterized with a quadratic
+  * function.
+  *
+  * <p><img src="doc-files/QuadCurve2D-1.png" width="350" height="180"
+  * alt="A drawing of a QuadCurve2D" />
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Graydon Hoare (graydon@redhat.com)
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  * @author Sven de Marothy (sven@physto.se)
+  *
+  * @since 1.2
+  */
+ public abstract class QuadCurve2D implements Shape, Cloneable
+ {
+   private static final double BIG_VALUE = java.lang.Double.MAX_VALUE / 10.0;
+   private static final double EPSILON = 1E-10;
+ 
+   /**
+    * Constructs a new QuadCurve2D. Typical users will want to
+    * construct instances of a subclass, such as {@link
+    * QuadCurve2D.Float} or {@link QuadCurve2D.Double}.
+    */
+   protected QuadCurve2D()
+   {
+   }
+ 
+   /**
+    * Returns the <i>x</i> coordinate of the curve&#x2019;s start
+    * point.
+    */
+   public abstract double getX1();
+ 
+   /**
+    * Returns the <i>y</i> coordinate of the curve&#x2019;s start
+    * point.
+    */
+   public abstract double getY1();
+ 
+   /**
+    * Returns the curve&#x2019;s start point.
+    */
+   public abstract Point2D getP1();
+ 
+   /**
+    * Returns the <i>x</i> coordinate of the curve&#x2019;s control
+    * point.
+    */
+   public abstract double getCtrlX();
+ 
+   /**
+    * Returns the <i>y</i> coordinate of the curve&#x2019;s control
+    * point.
+    */
+   public abstract double getCtrlY();
+ 
+   /**
+    * Returns the curve&#x2019;s control point.
+    */
+   public abstract Point2D getCtrlPt();
+ 
+   /**
+    * Returns the <i>x</i> coordinate of the curve&#x2019;s end
+    * point.
+    */
+   public abstract double getX2();
+ 
+   /**
+    * Returns the <i>y</i> coordinate of the curve&#x2019;s end
+    * point.
+    */
+   public abstract double getY2();
+ 
+   /**
+    * Returns the curve&#x2019;s end point.
+    */
+   public abstract Point2D getP2();
+ 
+   /**
+    * Changes the curve geometry, separately specifying each coordinate
+    * value.
+    *
+    * @param x1 the <i>x</i> coordinate of the curve&#x2019;s new start
+    * point.
+    *
+    * @param y1 the <i>y</i> coordinate of the curve&#x2019;s new start
+    * point.
+    *
+    * @param cx the <i>x</i> coordinate of the curve&#x2019;s new
+    * control point.
+    *
+    * @param cy the <i>y</i> coordinate of the curve&#x2019;s new
+    * control point.
+    *
+    * @param x2 the <i>x</i> coordinate of the curve&#x2019;s new end
+    * point.
+    *
+    * @param y2 the <i>y</i> coordinate of the curve&#x2019;s new end
+    * point.
+    */
+   public abstract void setCurve(double x1, double y1, double cx, double cy,
+                                 double x2, double y2);
+ 
+   /**
+    * Changes the curve geometry, passing coordinate values in an
+    * array.
+    *
+    * @param coords an array containing the new coordinate values.  The
+    * <i>x</i> coordinate of the new start point is located at
+    * <code>coords[offset]</code>, its <i>y</i> coordinate at
+    * <code>coords[offset + 1]</code>.  The <i>x</i> coordinate of the
+    * new control point is located at <code>coords[offset + 2]</code>,
+    * its <i>y</i> coordinate at <code>coords[offset + 3]</code>. The
+    * <i>x</i> coordinate of the new end point is located at
+    * <code>coords[offset + 4]</code>, its <i>y</i> coordinate at
+    * <code>coords[offset + 5]</code>.
+    *
+    * @param offset the offset of the first coordinate value in
+    * <code>coords</code>.
+    */
+   public void setCurve(double[] coords, int offset)
+   {
+     setCurve(coords[offset++], coords[offset++], coords[offset++],
+              coords[offset++], coords[offset++], coords[offset++]);
+   }
+ 
+   /**
+    * Changes the curve geometry, specifying coordinate values in
+    * separate Point objects.
+    *
+    * <p><img src="doc-files/QuadCurve2D-1.png" width="350" height="180"
+    * alt="A drawing of a QuadCurve2D" />
+    *
+    * <p>The curve does not keep any reference to the passed point
+    * objects. Therefore, a later change to <code>p1</code>,
+    * <code>c</code> <code>p2</code> will not affect the curve
+    * geometry.
+    *
+    * @param p1 the new start point.
+    * @param c the new control point.
+    * @param p2 the new end point.
+    */
+   public void setCurve(Point2D p1, Point2D c, Point2D p2)
+   {
+     setCurve(p1.getX(), p1.getY(), c.getX(), c.getY(), p2.getX(), p2.getY());
+   }
+ 
+   /**
+    * Changes the curve geometry, specifying coordinate values in an
+    * array of Point objects.
+    *
+    * <p><img src="doc-files/QuadCurve2D-1.png" width="350" height="180"
+    * alt="A drawing of a QuadCurve2D" />
+    *
+    * <p>The curve does not keep references to the passed point
+    * objects. Therefore, a later change to the <code>pts</code> array
+    * or any of its elements will not affect the curve geometry.
+    *
+    * @param pts an array containing the points. The new start point
+    * is located at <code>pts[offset]</code>, the new control
+    * point at <code>pts[offset + 1]</code>, and the new end point
+    * at <code>pts[offset + 2]</code>.
+    *
+    * @param offset the offset of the start point in <code>pts</code>.
+    */
+   public void setCurve(Point2D[] pts, int offset)
+   {
+     setCurve(pts[offset].getX(), pts[offset].getY(), pts[offset + 1].getX(),
+              pts[offset + 1].getY(), pts[offset + 2].getX(),
+              pts[offset + 2].getY());
+   }
+ 
+   /**
+    * Changes the geometry of the curve to that of another curve.
+    *
+    * @param c the curve whose coordinates will be copied.
+    */
+   public void setCurve(QuadCurve2D c)
+   {
+     setCurve(c.getX1(), c.getY1(), c.getCtrlX(), c.getCtrlY(), c.getX2(),
+              c.getY2());
+   }
+ 
+   /**
+    * Calculates the squared flatness of a quadratic curve, directly
+    * specifying each coordinate value. The flatness is the distance of
+    * the control point to the line between start and end point.
+    *
+    * <p><img src="doc-files/QuadCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  The result will be the
+    * the square of the distance between C and the gray line, i.e.
+    * the squared length of the red line.
+    *
+    * @param x1 the <i>x</i> coordinate of the start point P1.
+    * @param y1 the <i>y</i> coordinate of the start point P1.
+    * @param cx the <i>x</i> coordinate of the control point C.
+    * @param cy the <i>y</i> coordinate of the control point C.
+    * @param x2 the <i>x</i> coordinate of the end point P2.
+    * @param y2 the <i>y</i> coordinate of the end point P2.
+    */
+   public static double getFlatnessSq(double x1, double y1, double cx,
+                                      double cy, double x2, double y2)
+   {
+     return Line2D.ptSegDistSq(x1, y1, x2, y2, cx, cy);
+   }
+ 
+   /**
+    * Calculates the flatness of a quadratic curve, directly specifying
+    * each coordinate value. The flatness is the distance of the
+    * control point to the line between start and end point.
+    *
+    * <p><img src="doc-files/QuadCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  The result will be the
+    * the distance between C and the gray line, i.e. the length of
+    * the red line.
+    *
+    * @param x1 the <i>x</i> coordinate of the start point P1.
+    * @param y1 the <i>y</i> coordinate of the start point P1.
+    * @param cx the <i>x</i> coordinate of the control point C.
+    * @param cy the <i>y</i> coordinate of the control point C.
+    * @param x2 the <i>x</i> coordinate of the end point P2.
+    * @param y2 the <i>y</i> coordinate of the end point P2.
+    */
+   public static double getFlatness(double x1, double y1, double cx, double cy,
+                                    double x2, double y2)
+   {
+     return Line2D.ptSegDist(x1, y1, x2, y2, cx, cy);
+   }
+ 
+   /**
+    * Calculates the squared flatness of a quadratic curve, specifying
+    * the coordinate values in an array. The flatness is the distance
+    * of the control point to the line between start and end point.
+    *
+    * <p><img src="doc-files/QuadCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  The result will be the
+    * the square of the distance between C and the gray line, i.e.
+    * the squared length of the red line.
+    *
+    * @param coords an array containing the coordinate values.  The
+    * <i>x</i> coordinate of the start point P1 is located at
+    * <code>coords[offset]</code>, its <i>y</i> coordinate at
+    * <code>coords[offset + 1]</code>.  The <i>x</i> coordinate of the
+    * control point C is located at <code>coords[offset + 2]</code>,
+    * its <i>y</i> coordinate at <code>coords[offset + 3]</code>. The
+    * <i>x</i> coordinate of the end point P2 is located at
+    * <code>coords[offset + 4]</code>, its <i>y</i> coordinate at
+    * <code>coords[offset + 5]</code>.
+    *
+    * @param offset the offset of the first coordinate value in
+    * <code>coords</code>.
+    */
+   public static double getFlatnessSq(double[] coords, int offset)
+   {
+     return Line2D.ptSegDistSq(coords[offset], coords[offset + 1],
+                               coords[offset + 4], coords[offset + 5],
+                               coords[offset + 2], coords[offset + 3]);
+   }
+ 
+   /**
+    * Calculates the flatness of a quadratic curve, specifying the
+    * coordinate values in an array. The flatness is the distance of
+    * the control point to the line between start and end point.
+    *
+    * <p><img src="doc-files/QuadCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  The result will be the
+    * the the distance between C and the gray line, i.e.  the length of
+    * the red line.
+    *
+    * @param coords an array containing the coordinate values.  The
+    * <i>x</i> coordinate of the start point P1 is located at
+    * <code>coords[offset]</code>, its <i>y</i> coordinate at
+    * <code>coords[offset + 1]</code>.  The <i>x</i> coordinate of the
+    * control point C is located at <code>coords[offset + 2]</code>,
+    * its <i>y</i> coordinate at <code>coords[offset + 3]</code>. The
+    * <i>x</i> coordinate of the end point P2 is located at
+    * <code>coords[offset + 4]</code>, its <i>y</i> coordinate at
+    * <code>coords[offset + 5]</code>.
+    *
+    * @param offset the offset of the first coordinate value in
+    * <code>coords</code>.
+    */
+   public static double getFlatness(double[] coords, int offset)
+   {
+     return Line2D.ptSegDist(coords[offset], coords[offset + 1],
+                             coords[offset + 4], coords[offset + 5],
+                             coords[offset + 2], coords[offset + 3]);
+   }
+ 
+   /**
+    * Calculates the squared flatness of this curve. The flatness is
+    * the distance of the control point to the line between start and
+    * end point.
+    *
+    * <p><img src="doc-files/QuadCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  The result will be the
+    * the square of the distance between C and the gray line, i.e. the
+    * squared length of the red line.
+    */
+   public double getFlatnessSq()
+   {
+     return Line2D.ptSegDistSq(getX1(), getY1(), getX2(), getY2(), getCtrlX(),
+                               getCtrlY());
+   }
+ 
+   /**
+    * Calculates the flatness of this curve. The flatness is the
+    * distance of the control point to the line between start and end
+    * point.
+    *
+    * <p><img src="doc-files/QuadCurve2D-4.png" width="350" height="180"
+    * alt="A drawing that illustrates the flatness" />
+    *
+    * <p>In the above drawing, the straight line connecting start point
+    * P1 and end point P2 is depicted in gray.  The result will be the
+    * the distance between C and the gray line, i.e.  the length of the
+    * red line.
+    */
+   public double getFlatness()
+   {
+     return Line2D.ptSegDist(getX1(), getY1(), getX2(), getY2(), getCtrlX(),
+                             getCtrlY());
+   }
+ 
+   /**
+    * Subdivides this curve into two halves.
+    *
+    * <p><img src="doc-files/QuadCurve2D-3.png" width="700"
+    * height="180" alt="A drawing that illustrates the effects of
+    * subdividing a QuadCurve2D" />
+    *
+    * @param left a curve whose geometry will be set to the left half
+    * of this curve, or <code>null</code> if the caller is not
+    * interested in the left half.
+    *
+    * @param right a curve whose geometry will be set to the right half
+    * of this curve, or <code>null</code> if the caller is not
+    * interested in the right half.
+    */
+   public void subdivide(QuadCurve2D left, QuadCurve2D right)
+   {
+     // Use empty slots at end to share single array.
+     double[] d = new double[]
+                  {
+                    getX1(), getY1(), getCtrlX(), getCtrlY(), getX2(), getY2(),
+                    0, 0, 0, 0
+                  };
+     subdivide(d, 0, d, 0, d, 4);
+     if (left != null)
+       left.setCurve(d, 0);
+     if (right != null)
+       right.setCurve(d, 4);
+   }
+ 
+   /**
+    * Subdivides a quadratic curve into two halves.
+    *
+    * <p><img src="doc-files/QuadCurve2D-3.png" width="700"
+    * height="180" alt="A drawing that illustrates the effects of
+    * subdividing a QuadCurve2D" />
+    *
+    * @param src the curve to be subdivided.
+    *
+    * @param left a curve whose geometry will be set to the left half
+    * of <code>src</code>, or <code>null</code> if the caller is not
+    * interested in the left half.
+    *
+    * @param right a curve whose geometry will be set to the right half
+    * of <code>src</code>, or <code>null</code> if the caller is not
+    * interested in the right half.
+    */
+   public static void subdivide(QuadCurve2D src, QuadCurve2D left,
+                                QuadCurve2D right)
+   {
+     src.subdivide(left, right);
+   }
+ 
+   /**
+    * Subdivides a quadratic curve into two halves, passing all
+    * coordinates in an array.
+    *
+    * <p><img src="doc-files/QuadCurve2D-3.png" width="700"
+    * height="180" alt="A drawing that illustrates the effects of
+    * subdividing a QuadCurve2D" />
+    *
+    * <p>The left end point and the right start point will always be
+    * identical. Memory-concious programmers thus may want to pass the
+    * same array for both <code>left</code> and <code>right</code>, and
+    * set <code>rightOff</code> to <code>leftOff + 4</code>.
+    *
+    * @param src an array containing the coordinates of the curve to be
+    * subdivided.  The <i>x</i> coordinate of the start point is
+    * located at <code>src[srcOff]</code>, its <i>y</i> at
+    * <code>src[srcOff + 1]</code>.  The <i>x</i> coordinate of the
+    * control point is located at <code>src[srcOff + 2]</code>, its
+    * <i>y</i> at <code>src[srcOff + 3]</code>.  The <i>x</i>
+    * coordinate of the end point is located at <code>src[srcOff +
+    * 4]</code>, its <i>y</i> at <code>src[srcOff + 5]</code>.
+    *
+    * @param srcOff an offset into <code>src</code>, specifying
+    * the index of the start point&#x2019;s <i>x</i> coordinate.
+    *
+    * @param left an array that will receive the coordinates of the
+    * left half of <code>src</code>. It is acceptable to pass
+    * <code>src</code>. A caller who is not interested in the left half
+    * can pass <code>null</code>.
+    *
+    * @param leftOff an offset into <code>left</code>, specifying the
+    * index where the start point&#x2019;s <i>x</i> coordinate will be
+    * stored.
+    *
+    * @param right an array that will receive the coordinates of the
+    * right half of <code>src</code>. It is acceptable to pass
+    * <code>src</code> or <code>left</code>. A caller who is not
+    * interested in the right half can pass <code>null</code>.
+    *
+    * @param rightOff an offset into <code>right</code>, specifying the
+    * index where the start point&#x2019;s <i>x</i> coordinate will be
+    * stored.
+    */
+   public static void subdivide(double[] src, int srcOff, double[] left,
+                                int leftOff, double[] right, int rightOff)
+   {
+     double x1;
+     double y1;
+     double xc;
+     double yc;
+     double x2;
+     double y2;
+ 
+     x1 = src[srcOff];
+     y1 = src[srcOff + 1];
+     xc = src[srcOff + 2];
+     yc = src[srcOff + 3];
+     x2 = src[srcOff + 4];
+     y2 = src[srcOff + 5];
+ 
+     if (left != null)
+       {
+ 	left[leftOff] = x1;
+ 	left[leftOff + 1] = y1;
+       }
+ 
+     if (right != null)
+       {
+ 	right[rightOff + 4] = x2;
+ 	right[rightOff + 5] = y2;
+       }
+ 
+     x1 = (x1 + xc) / 2;
+     x2 = (xc + x2) / 2;
+     xc = (x1 + x2) / 2;
+     y1 = (y1 + yc) / 2;
+     y2 = (y2 + yc) / 2;
+     yc = (y1 + y2) / 2;
+ 
+     if (left != null)
+       {
+ 	left[leftOff + 2] = x1;
+ 	left[leftOff + 3] = y1;
+ 	left[leftOff + 4] = xc;
+ 	left[leftOff + 5] = yc;
+       }
+ 
+     if (right != null)
+       {
+ 	right[rightOff] = xc;
+ 	right[rightOff + 1] = yc;
+ 	right[rightOff + 2] = x2;
+ 	right[rightOff + 3] = y2;
+       }
+   }
+ 
+   /**
+    * Finds the non-complex roots of a quadratic equation, placing the
+    * results into the same array as the equation coefficients. The
+    * following equation is being solved:
+    *
+    * <blockquote><code>eqn[2]</code> &#xb7; <i>x</i><sup>2</sup>
+    * + <code>eqn[1]</code> &#xb7; <i>x</i>
+    * + <code>eqn[0]</code>
+    * = 0
+    * </blockquote>
+    *
+    * <p>For some background about solving quadratic equations, see the
+    * article <a href=
+    * "http://planetmath.org/encyclopedia/QuadraticFormula.html"
+    * >&#x201c;Quadratic Formula&#x201d;</a> in <a href=
+    * "http://planetmath.org/">PlanetMath</a>. For an extensive library
+    * of numerical algorithms written in the C programming language,
+    * see the <a href="http://www.gnu.org/software/gsl/">GNU Scientific
+    * Library</a>.
+    *
+    * @see #solveQuadratic(double[], double[])
+    * @see CubicCurve2D#solveCubic(double[], double[])
+    *
+    * @param eqn an array with the coefficients of the equation. When
+    * this procedure has returned, <code>eqn</code> will contain the
+    * non-complex solutions of the equation, in no particular order.
+    *
+    * @return the number of non-complex solutions. A result of 0
+    * indicates that the equation has no non-complex solutions. A
+    * result of -1 indicates that the equation is constant (i.e.,
+    * always or never zero).
+    *
+    * @author Brian Gough (bjg@network-theory.com)
+    * (original C implementation in the <a href=
+    * "http://www.gnu.org/software/gsl/">GNU Scientific Library</a>)
+    *
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    * (adaptation to Java)
+    */
+   public static int solveQuadratic(double[] eqn)
+   {
+     return solveQuadratic(eqn, eqn);
+   }
+ 
+   /**
+    * Finds the non-complex roots of a quadratic equation. The
+    * following equation is being solved:
+    *
+    * <blockquote><code>eqn[2]</code> &#xb7; <i>x</i><sup>2</sup>
+    * + <code>eqn[1]</code> &#xb7; <i>x</i>
+    * + <code>eqn[0]</code>
+    * = 0
+    * </blockquote>
+    *
+    * <p>For some background about solving quadratic equations, see the
+    * article <a href=
+    * "http://planetmath.org/encyclopedia/QuadraticFormula.html"
+    * >&#x201c;Quadratic Formula&#x201d;</a> in <a href=
+    * "http://planetmath.org/">PlanetMath</a>. For an extensive library
+    * of numerical algorithms written in the C programming language,
+    * see the <a href="http://www.gnu.org/software/gsl/">GNU Scientific
+    * Library</a>.
+    *
+    * @see CubicCurve2D#solveCubic(double[],double[])
+    *
+    * @param eqn an array with the coefficients of the equation.
+    *
+    * @param res an array into which the non-complex roots will be
+    * stored.  The results may be in an arbitrary order. It is safe to
+    * pass the same array object reference for both <code>eqn</code>
+    * and <code>res</code>.
+    *
+    * @return the number of non-complex solutions. A result of 0
+    * indicates that the equation has no non-complex solutions. A
+    * result of -1 indicates that the equation is constant (i.e.,
+    * always or never zero).
+    *
+    * @author Brian Gough (bjg@network-theory.com)
+    * (original C implementation in the <a href=
+    * "http://www.gnu.org/software/gsl/">GNU Scientific Library</a>)
+    *
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    * (adaptation to Java)
+    */
+   public static int solveQuadratic(double[] eqn, double[] res)
+   {
+     // Taken from poly/solve_quadratic.c in the GNU Scientific Library
+     // (GSL), cvs revision 1.7 of 2003-07-26. For the original source,
+     // see http://www.gnu.org/software/gsl/
+     //
+     // Brian Gough, the author of that code, has granted the
+     // permission to use it in GNU Classpath under the GNU Classpath
+     // license, and has assigned the copyright to the Free Software
+     // Foundation.
+     //
+     // The Java implementation is very similar to the GSL code, but
+     // not a strict one-to-one copy. For example, GSL would sort the
+     // result.
+     double a;
+     double b;
+     double c;
+     double disc;
+ 
+     c = eqn[0];
+     b = eqn[1];
+     a = eqn[2];
+ 
+     // Check for linear or constant functions. This is not done by the
+     // GNU Scientific Library.  Without this special check, we
+     // wouldn't return -1 for constant functions, and 2 instead of 1
+     // for linear functions.
+     if (a == 0)
+       {
+ 	if (b == 0)
+ 	  return -1;
+ 
+ 	res[0] = -c / b;
+ 	return 1;
+       }
+ 
+     disc = b * b - 4 * a * c;
+ 
+     if (disc < 0)
+       return 0;
+ 
+     if (disc == 0)
+       {
+ 	// The GNU Scientific Library returns two identical results here.
+ 	// We just return one.
+ 	res[0] = -0.5 * b / a;
+ 	return 1;
+       }
+ 
+     // disc > 0
+     if (b == 0)
+       {
+ 	double r;
+ 
+ 	r = Math.abs(0.5 * Math.sqrt(disc) / a);
+ 	res[0] = -r;
+ 	res[1] = r;
+       }
+     else
+       {
+ 	double sgnb;
+ 	double temp;
+ 
+ 	sgnb = (b > 0 ? 1 : -1);
+ 	temp = -0.5 * (b + sgnb * Math.sqrt(disc));
+ 
+ 	// The GNU Scientific Library sorts the result here. We don't.
+ 	res[0] = temp / a;
+ 	res[1] = c / temp;
+       }
+     return 2;
+   }
+ 
+   /**
+    * Determines whether a point is inside the area bounded
+    * by the curve and the straight line connecting its end points.
+    *
+    * <p><img src="doc-files/QuadCurve2D-5.png" width="350" height="180"
+    * alt="A drawing of the area spanned by the curve" />
+    *
+    * <p>The above drawing illustrates in which area points are
+    * considered &#x201c;inside&#x201d; a QuadCurve2D.
+    */
+   public boolean contains(double x, double y)
+   {
+     if (! getBounds2D().contains(x, y))
+       return false;
+ 
+     return ((getAxisIntersections(x, y, true, BIG_VALUE) & 1) != 0);
+   }
+ 
+   /**
+    * Determines whether a point is inside the area bounded
+    * by the curve and the straight line connecting its end points.
+    *
+    * <p><img src="doc-files/QuadCurve2D-5.png" width="350" height="180"
+    * alt="A drawing of the area spanned by the curve" />
+    *
+    * <p>The above drawing illustrates in which area points are
+    * considered &#x201c;inside&#x201d; a QuadCurve2D.
+    */
+   public boolean contains(Point2D p)
+   {
+     return contains(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Determines whether any part of a rectangle is inside the area bounded
+    * by the curve and the straight line connecting its end points.
+    *
+    * <p><img src="doc-files/QuadCurve2D-5.png" width="350" height="180"
+    * alt="A drawing of the area spanned by the curve" />
+    *
+    * <p>The above drawing illustrates in which area points are
+    * considered &#x201c;inside&#x201d; in a CubicCurve2D.
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     if (! getBounds2D().contains(x, y, w, h))
+       return false;
+ 
+     /* Does any edge intersect? */
+     if (getAxisIntersections(x, y, true, w) != 0 /* top */
+         || getAxisIntersections(x, y + h, true, w) != 0 /* bottom */
+         || getAxisIntersections(x + w, y, false, h) != 0 /* right */
+         || getAxisIntersections(x, y, false, h) != 0) /* left */
+       return true;
+ 
+     /* No intersections, is any point inside? */
+     if ((getAxisIntersections(x, y, true, BIG_VALUE) & 1) != 0)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Determines whether any part of a Rectangle2D is inside the area bounded 
+    * by the curve and the straight line connecting its end points.
+    * @see #intersects(double, double, double, double)
+    */
+   public boolean intersects(Rectangle2D r)
+   {
+     return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Determines whether a rectangle is entirely inside the area bounded
+    * by the curve and the straight line connecting its end points.
+    *
+    * <p><img src="doc-files/QuadCurve2D-5.png" width="350" height="180"
+    * alt="A drawing of the area spanned by the curve" />
+    *
+    * <p>The above drawing illustrates in which area points are
+    * considered &#x201c;inside&#x201d; a QuadCurve2D.
+    * @see #contains(double, double)
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     if (! getBounds2D().intersects(x, y, w, h))
+       return false;
+ 
+     /* Does any edge intersect? */
+     if (getAxisIntersections(x, y, true, w) != 0 /* top */
+         || getAxisIntersections(x, y + h, true, w) != 0 /* bottom */
+         || getAxisIntersections(x + w, y, false, h) != 0 /* right */
+         || getAxisIntersections(x, y, false, h) != 0) /* left */
+       return false;
+ 
+     /* No intersections, is any point inside? */
+     if ((getAxisIntersections(x, y, true, BIG_VALUE) & 1) != 0)
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Determines whether a Rectangle2D is entirely inside the area that is 
+    * bounded by the curve and the straight line connecting its end points.
+    * @see #contains(double, double, double, double)
+    */
+   public boolean contains(Rectangle2D r)
+   {
+     return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Determines the smallest rectangle that encloses the
+    * curve&#x2019;s start, end and control point. As the illustration
+    * below shows, the invisible control point may cause the bounds to
+    * be much larger than the area that is actually covered by the
+    * curve.
+    *
+    * <p><img src="doc-files/QuadCurve2D-2.png" width="350" height="180"
+    * alt="An illustration of the bounds of a QuadCurve2D" />
+    */
+   public Rectangle getBounds()
+   {
+     return getBounds2D().getBounds();
+   }
+ 
+   public PathIterator getPathIterator(final AffineTransform at)
+   {
+     return new PathIterator()
+       {
+ 	/** Current coordinate. */
+ 	private int current = 0;
+ 
+ 	public int getWindingRule()
+ 	{
+ 	  return WIND_NON_ZERO;
+ 	}
+ 
+ 	public boolean isDone()
+ 	{
+ 	  return current >= 2;
+ 	}
+ 
+ 	public void next()
+ 	{
+ 	  current++;
+ 	}
+ 
+ 	public int currentSegment(float[] coords)
+ 	{
+ 	  int result;
+ 	  switch (current)
+ 	    {
+ 	    case 0:
+ 	      coords[0] = (float) getX1();
+ 	      coords[1] = (float) getY1();
+ 	      result = SEG_MOVETO;
+ 	      break;
+ 	    case 1:
+ 	      coords[0] = (float) getCtrlX();
+ 	      coords[1] = (float) getCtrlY();
+ 	      coords[2] = (float) getX2();
+ 	      coords[3] = (float) getY2();
+ 	      result = SEG_QUADTO;
+ 	      break;
+ 	    default:
+ 	      throw new NoSuchElementException("quad iterator out of bounds");
+ 	    }
+ 	  if (at != null)
+ 	    at.transform(coords, 0, coords, 0, 2);
+ 	  return result;
+ 	}
+ 
+ 	public int currentSegment(double[] coords)
+ 	{
+ 	  int result;
+ 	  switch (current)
+ 	    {
+ 	    case 0:
+ 	      coords[0] = getX1();
+ 	      coords[1] = getY1();
+ 	      result = SEG_MOVETO;
+ 	      break;
+ 	    case 1:
+ 	      coords[0] = getCtrlX();
+ 	      coords[1] = getCtrlY();
+ 	      coords[2] = getX2();
+ 	      coords[3] = getY2();
+ 	      result = SEG_QUADTO;
+ 	      break;
+ 	    default:
+ 	      throw new NoSuchElementException("quad iterator out of bounds");
+ 	    }
+ 	  if (at != null)
+ 	    at.transform(coords, 0, coords, 0, 2);
+ 	  return result;
+ 	}
+       };
+   }
+ 
+   public PathIterator getPathIterator(AffineTransform at, double flatness)
+   {
+     return new FlatteningPathIterator(getPathIterator(at), flatness);
+   }
+ 
+   /**
+    * Creates a new curve with the same contents as this one.
+    *
+    * @return the clone.
+    */
+   public Object clone()
+   {
+     try
+       {
+ 	return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+ 	throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ 
+   /**
+    * Helper method used by contains() and intersects() methods
+    * Return the number of curve/line intersections on a given axis
+    * extending from a certain point. useYaxis is true for using the Y axis,
+    * @param x x coordinate of the origin point
+    * @param y y coordinate of the origin point
+    * @param useYaxis axis to follow, if true the positive Y axis is used,
+    * false uses the positive X axis.
+    *
+    * This is an implementation of the line-crossings algorithm,
+    * Detailed in an article on Eric Haines' page:
+    * http://www.acm.org/tog/editors/erich/ptinpoly/
+    */
+   private int getAxisIntersections(double x, double y, boolean useYaxis,
+                                    double distance)
+   {
+     int nCrossings = 0;
+     double a0;
+     double a1;
+     double a2;
+     double b0;
+     double b1;
+     double b2;
+     double[] r = new double[3];
+     int nRoots;
+ 
+     a0 = a2 = 0.0;
+ 
+     if (useYaxis)
+       {
+ 	a0 = getY1() - y;
+ 	a1 = getCtrlY() - y;
+ 	a2 = getY2() - y;
+ 	b0 = getX1() - x;
+ 	b1 = getCtrlX() - x;
+ 	b2 = getX2() - x;
+       }
+     else
+       {
+ 	a0 = getX1() - x;
+ 	a1 = getCtrlX() - x;
+ 	a2 = getX2() - x;
+ 	b0 = getY1() - y;
+ 	b1 = getCtrlY() - y;
+ 	b2 = getY2() - y;
+       }
+ 
+     /* If the axis intersects a start/endpoint, shift it up by some small 
+        amount to guarantee the line is 'inside'
+        If this is not done,bad behaviour may result for points on that axis. */
+     if (a0 == 0.0 || a2 == 0.0)
+       {
+ 	double small = getFlatness() * EPSILON;
+ 	if (a0 == 0.0)
+ 	  a0 -= small;
+ 
+ 	if (a2 == 0.0)
+ 	  a2 -= small;
+       }
+ 
+     r[0] = a0;
+     r[1] = 2 * (a1 - a0);
+     r[2] = (a2 - 2 * a1 + a0);
+ 
+     nRoots = solveQuadratic(r);
+     for (int i = 0; i < nRoots; i++)
+       {
+ 	double t = r[i];
+ 	if (t >= 0.0 && t <= 1.0)
+ 	  {
+ 	    double crossing = t * t * (b2 - 2 * b1 + b0) + 2 * t * (b1 - b0)
+ 	                      + b0;
+ 	    /* single root is always doubly degenerate in quads */
+ 	    if (crossing > 0 && crossing < distance)
+ 	      nCrossings += (nRoots == 1) ? 2 : 1;
+ 	  }
+       }
+ 
+     if (useYaxis)
+       {
+ 	if (Line2D.linesIntersect(b0, a0, b2, a2, EPSILON, 0.0, distance, 0.0))
+ 	  nCrossings++;
+       }
+     else
+       {
+ 	if (Line2D.linesIntersect(a0, b0, a2, b2, 0.0, EPSILON, 0.0, distance))
+ 	  nCrossings++;
+       }
+ 
+     return (nCrossings);
+   }
+ 
+   /**
+    * A two-dimensional curve that is parameterized with a quadratic
+    * function and stores coordinate values in double-precision
+    * floating-point format.
+    *
+    * @see QuadCurve2D.Float
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    */
+   public static class Double extends QuadCurve2D
+   {
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s start point.
+      */
+     public double x1;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s start point.
+      */
+     public double y1;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s control point.
+      */
+     public double ctrlx;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s control point.
+      */
+     public double ctrly;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s end point.
+      */
+     public double x2;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s end point.
+      */
+     public double y2;
+ 
+     /**
+      * Constructs a new QuadCurve2D that stores its coordinate values
+      * in double-precision floating-point format. All points are
+      * initially at position (0, 0).
+      */
+     public Double()
+     {
+     }
+ 
+     /**
+      * Constructs a new QuadCurve2D that stores its coordinate values
+      * in double-precision floating-point format, specifying the
+      * initial position of each point.
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s start
+      * point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s start
+      * point.
+      *
+      * @param cx the <i>x</i> coordinate of the curve&#x2019;s control
+      * point.
+      *
+      * @param cy the <i>y</i> coordinate of the curve&#x2019;s control
+      * point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s end
+      * point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public Double(double x1, double y1, double cx, double cy, double x2,
+                   double y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       ctrlx = cx;
+       ctrly = cy;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s start
+      * point.
+      */
+     public double getX1()
+     {
+       return x1;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s start
+      * point.
+      */
+     public double getY1()
+     {
+       return y1;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s start point.
+      */
+     public Point2D getP1()
+     {
+       return new Point2D.Double(x1, y1);
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s control
+      * point.
+      */
+     public double getCtrlX()
+     {
+       return ctrlx;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s control
+      * point.
+      */
+     public double getCtrlY()
+     {
+       return ctrly;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s control point.
+      */
+     public Point2D getCtrlPt()
+     {
+       return new Point2D.Double(ctrlx, ctrly);
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public double getX2()
+     {
+       return x2;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public double getY2()
+     {
+       return y2;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s end point.
+      */
+     public Point2D getP2()
+     {
+       return new Point2D.Double(x2, y2);
+     }
+ 
+     /**
+      * Changes the geometry of the curve.
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s new
+      * start point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s new
+      * start point.
+      *
+      * @param cx the <i>x</i> coordinate of the curve&#x2019;s new
+      * control point.
+      *
+      * @param cy the <i>y</i> coordinate of the curve&#x2019;s new
+      * control point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s new
+      * end point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s new
+      * end point.
+      */
+     public void setCurve(double x1, double y1, double cx, double cy,
+                          double x2, double y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       ctrlx = cx;
+       ctrly = cy;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Determines the smallest rectangle that encloses the
+      * curve&#x2019;s start, end and control point. As the
+      * illustration below shows, the invisible control point may cause
+      * the bounds to be much larger than the area that is actually
+      * covered by the curve.
+      *
+      * <p><img src="doc-files/QuadCurve2D-2.png" width="350" height="180"
+      * alt="An illustration of the bounds of a QuadCurve2D" />
+      */
+     public Rectangle2D getBounds2D()
+     {
+       double nx1 = Math.min(Math.min(x1, ctrlx), x2);
+       double ny1 = Math.min(Math.min(y1, ctrly), y2);
+       double nx2 = Math.max(Math.max(x1, ctrlx), x2);
+       double ny2 = Math.max(Math.max(y1, ctrly), y2);
+       return new Rectangle2D.Double(nx1, ny1, nx2 - nx1, ny2 - ny1);
+     }
+   }
+ 
+   /**
+    * A two-dimensional curve that is parameterized with a quadratic
+    * function and stores coordinate values in single-precision
+    * floating-point format.
+    *
+    * @see QuadCurve2D.Double
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    */
+   public static class Float extends QuadCurve2D
+   {
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s start point.
+      */
+     public float x1;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s start point.
+      */
+     public float y1;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s control point.
+      */
+     public float ctrlx;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s control point.
+      */
+     public float ctrly;
+ 
+     /**
+      * The <i>x</i> coordinate of the curve&#x2019;s end point.
+      */
+     public float x2;
+ 
+     /**
+      * The <i>y</i> coordinate of the curve&#x2019;s end point.
+      */
+     public float y2;
+ 
+     /**
+      * Constructs a new QuadCurve2D that stores its coordinate values
+      * in single-precision floating-point format. All points are
+      * initially at position (0, 0).
+      */
+     public Float()
+     {
+     }
+ 
+     /**
+      * Constructs a new QuadCurve2D that stores its coordinate values
+      * in single-precision floating-point format, specifying the
+      * initial position of each point.
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s start
+      * point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s start
+      * point.
+      *
+      * @param cx the <i>x</i> coordinate of the curve&#x2019;s control
+      * point.
+      *
+      * @param cy the <i>y</i> coordinate of the curve&#x2019;s control
+      * point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s end
+      * point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public Float(float x1, float y1, float cx, float cy, float x2, float y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       ctrlx = cx;
+       ctrly = cy;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s start
+      * point.
+      */
+     public double getX1()
+     {
+       return x1;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s start
+      * point.
+      */
+     public double getY1()
+     {
+       return y1;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s start point.
+      */
+     public Point2D getP1()
+     {
+       return new Point2D.Float(x1, y1);
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s control
+      * point.
+      */
+     public double getCtrlX()
+     {
+       return ctrlx;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s control
+      * point.
+      */
+     public double getCtrlY()
+     {
+       return ctrly;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s control point.
+      */
+     public Point2D getCtrlPt()
+     {
+       return new Point2D.Float(ctrlx, ctrly);
+     }
+ 
+     /**
+      * Returns the <i>x</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public double getX2()
+     {
+       return x2;
+     }
+ 
+     /**
+      * Returns the <i>y</i> coordinate of the curve&#x2019;s end
+      * point.
+      */
+     public double getY2()
+     {
+       return y2;
+     }
+ 
+     /**
+      * Returns the curve&#x2019;s end point.
+      */
+     public Point2D getP2()
+     {
+       return new Point2D.Float(x2, y2);
+     }
+ 
+     /**
+      * Changes the geometry of the curve, specifying coordinate values
+      * as double-precision floating-point numbers.
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s new
+      * start point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s new
+      * start point.
+      *
+      * @param cx the <i>x</i> coordinate of the curve&#x2019;s new
+      * control point.
+      *
+      * @param cy the <i>y</i> coordinate of the curve&#x2019;s new
+      * control point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s new
+      * end point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s new
+      * end point.
+      */
+     public void setCurve(double x1, double y1, double cx, double cy,
+                          double x2, double y2)
+     {
+       this.x1 = (float) x1;
+       this.y1 = (float) y1;
+       ctrlx = (float) cx;
+       ctrly = (float) cy;
+       this.x2 = (float) x2;
+       this.y2 = (float) y2;
+     }
+ 
+     /**
+      * Changes the geometry of the curve, specifying coordinate values
+      * as single-precision floating-point numbers.
+      *
+      * @param x1 the <i>x</i> coordinate of the curve&#x2019;s new
+      * start point.
+      *
+      * @param y1 the <i>y</i> coordinate of the curve&#x2019;s new
+      * start point.
+      *
+      * @param cx the <i>x</i> coordinate of the curve&#x2019;s new
+      * control point.
+      *
+      * @param cy the <i>y</i> coordinate of the curve&#x2019;s new
+      * control point.
+      *
+      * @param x2 the <i>x</i> coordinate of the curve&#x2019;s new
+      * end point.
+      *
+      * @param y2 the <i>y</i> coordinate of the curve&#x2019;s new
+      * end point.
+      */
+     public void setCurve(float x1, float y1, float cx, float cy, float x2,
+                          float y2)
+     {
+       this.x1 = x1;
+       this.y1 = y1;
+       ctrlx = cx;
+       ctrly = cy;
+       this.x2 = x2;
+       this.y2 = y2;
+     }
+ 
+     /**
+      * Determines the smallest rectangle that encloses the
+      * curve&#x2019;s start, end and control point. As the
+      * illustration below shows, the invisible control point may cause
+      * the bounds to be much larger than the area that is actually
+      * covered by the curve.
+      *
+      * <p><img src="doc-files/QuadCurve2D-2.png" width="350" height="180"
+      * alt="An illustration of the bounds of a QuadCurve2D" />
+      */
+     public Rectangle2D getBounds2D()
+     {
+       float nx1 = (float) Math.min(Math.min(x1, ctrlx), x2);
+       float ny1 = (float) Math.min(Math.min(y1, ctrly), y2);
+       float nx2 = (float) Math.max(Math.max(x1, ctrlx), x2);
+       float ny2 = (float) Math.max(Math.max(y1, ctrly), y2);
+       return new Rectangle2D.Float(nx1, ny1, nx2 - nx1, ny2 - ny1);
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/Rectangle2D.java gcc-4.1.0/libjava/classpath/java/awt/geom/Rectangle2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/Rectangle2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/Rectangle2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,992 ----
+ /* Rectangle2D.java -- generic rectangles in 2-D space
+    Copyright (C) 2000, 2001, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.geom;
+ 
+ import java.util.NoSuchElementException;
+ 
+ /**
+  * This class describes a rectangle by a point (x,y) and dimension (w x h).
+  * The actual storage is left up to subclasses.
+  *
+  * <p>It is valid for a rectangle to have negative width or height; but it
+  * is considered to have no area or internal points. Therefore, the behavior
+  * in methods like <code>contains</code> or <code>intersects</code> is
+  * undefined unless the rectangle has positive width and height.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class Rectangle2D extends RectangularShape
+ {
+   /**
+    * The point lies left of the rectangle (p.x &lt; r.x).
+    *
+    * @see #outcode(double, double)
+    */
+   public static final int OUT_LEFT = 1;
+ 
+   /**
+    * The point lies above the rectangle (p.y &lt; r.y).
+    *
+    * @see #outcode(double, double)
+    */
+   public static final int OUT_TOP = 2;
+ 
+   /**
+    * The point lies right of the rectangle (p.x &gt; r.maxX).
+    *
+    * @see #outcode(double, double)
+    */
+   public static final int OUT_RIGHT = 4;
+ 
+   /**
+    * The point lies below of the rectangle (p.y &gt; r.maxY).
+    *
+    * @see #outcode(double, double)
+    */
+   public static final int OUT_BOTTOM = 8;
+ 
+   /**
+    * Default constructor.
+    */
+   protected Rectangle2D()
+   {
+   }
+ 
+   /**
+    * Set the bounding box of this rectangle.
+    *
+    * @param x the new X coordinate
+    * @param y the new Y coordinate
+    * @param w the new width
+    * @param h the new height
+    */
+   public abstract void setRect(double x, double y, double w, double h);
+ 
+   /**
+    * Set the bounding box of this rectangle from the given one.
+    *
+    * @param r rectangle to copy
+    * @throws NullPointerException if r is null
+    */
+   public void setRect(Rectangle2D r)
+   {
+     setRect(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Tests if the specified line intersects the interior of this rectangle.
+    *
+    * @param x1 the first x coordinate of line segment
+    * @param y1 the first y coordinate of line segment
+    * @param x2 the second x coordinate of line segment
+    * @param y2 the second y coordinate of line segment
+    * @return true if the line intersects the rectangle
+    */
+   public boolean intersectsLine(double x1, double y1, double x2, double y2)
+   {
+     double x = getX();
+     double y = getY();
+     double w = getWidth();
+     double h = getHeight();
+     if (w <= 0 || h <= 0)
+       return false;
+ 
+     if (x1 >= x && x1 <= x + w && y1 >= y && y1 <= y + h)
+       return true;
+     if (x2 >= x && x2 <= x + w && y2 >= y && y2 <= y + h)
+       return true;
+ 
+     double x3 = x + w;
+     double y3 = y + h;
+ 
+     return (Line2D.linesIntersect(x1, y1, x2, y2, x, y, x, y3)
+             || Line2D.linesIntersect(x1, y1, x2, y2, x, y3, x3, y3)
+             || Line2D.linesIntersect(x1, y1, x2, y2, x3, y3, x3, y)
+             || Line2D.linesIntersect(x1, y1, x2, y2, x3, y, x, y));
+   }
+ 
+   /**
+    * Tests if the specified line intersects the interior of this rectangle.
+    *
+    * @param l the line segment
+    * @return true if the line intersects the rectangle
+    * @throws NullPointerException if l is null
+    */
+   public boolean intersectsLine(Line2D l)
+   {
+     return intersectsLine(l.getX1(), l.getY1(), l.getX2(), l.getY2());
+   }
+ 
+   /**
+    * Determine where the point lies with respect to this rectangle. The
+    * result will be the binary OR of the appropriate bit masks.
+    *
+    * @param x the x coordinate to check
+    * @param y the y coordinate to check
+    * @return the binary OR of the result
+    * @see #OUT_LEFT
+    * @see #OUT_TOP
+    * @see #OUT_RIGHT
+    * @see #OUT_BOTTOM
+    */
+   public abstract int outcode(double x, double y);
+ 
+   /**
+    * Determine where the point lies with respect to this rectangle. The
+    * result will be the binary OR of the appropriate bit masks.
+    *
+    * @param p the point to check
+    * @return the binary OR of the result
+    * @throws NullPointerException if p is null
+    * @see #OUT_LEFT
+    * @see #OUT_TOP
+    * @see #OUT_RIGHT
+    * @see #OUT_BOTTOM
+    */
+   public int outcode(Point2D p)
+   {
+     return outcode(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Set the bounding box of this rectangle.
+    *
+    * @param x the new X coordinate
+    * @param y the new Y coordinate
+    * @param w the new width
+    * @param h the new height
+    */
+   public void setFrame(double x, double y, double w, double h)
+   {
+     setRect(x, y, w, h);
+   }
+ 
+   /**
+    * Returns the bounds of this rectangle. A pretty useless method, as this
+    * is already a rectangle.
+    *
+    * @return a copy of this rectangle
+    */
+   public Rectangle2D getBounds2D()
+   {
+     return (Rectangle2D) clone();
+   }
+ 
+   /**
+    * Test if the given point is contained in the rectangle.
+    *
+    * @param x the x coordinate of the point
+    * @param y the y coordinate of the point
+    * @return true if (x,y) is in the rectangle
+    */
+   public boolean contains(double x, double y)
+   {
+     double mx = getX();
+     double my = getY();
+     double w = getWidth();
+     double h = getHeight();
+     return w > 0 && h > 0 && x >= mx && x < mx + w && y >= my && y < my + h;
+   }
+ 
+   /**
+    * Tests if the given rectangle intersects this one. In other words, test if
+    * the two rectangles share at least one internal point.
+    *
+    * @param x the x coordinate of the other rectangle
+    * @param y the y coordinate of the other rectangle
+    * @param w the width of the other rectangle
+    * @param h the height of the other rectangle
+    * @return true if the rectangles intersect
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     double mx = getX();
+     double my = getY();
+     double mw = getWidth();
+     double mh = getHeight();
+     return w > 0 && h > 0 && mw > 0 && mh > 0
+       && x < mx + mw && x + w > mx && y < my + mh && y + h > my;
+   }
+ 
+   /**
+    * Tests if this rectangle contains the given one. In other words, test if
+    * this rectangle contains all points in the given one.
+    *
+    * @param x the x coordinate of the other rectangle
+    * @param y the y coordinate of the other rectangle
+    * @param w the width of the other rectangle
+    * @param h the height of the other rectangle
+    * @return true if this rectangle contains the other
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     double mx = getX();
+     double my = getY();
+     double mw = getWidth();
+     double mh = getHeight();
+     return w > 0 && h > 0 && mw > 0 && mh > 0
+       && x >= mx && x + w <= mx + mw && y >= my && y + h <= my + mh;
+   }
+ 
+   /**
+    * Return a new rectangle which is the intersection of this and the given
+    * one. The result will be empty if there is no intersection.
+    *
+    * @param r the rectangle to be intersected
+    * @return the intersection
+    * @throws NullPointerException if r is null
+    */
+   public abstract Rectangle2D createIntersection(Rectangle2D r);
+ 
+   /**
+    * Intersects a pair of rectangles, and places the result in the
+    * destination; this can be used to avoid object creation. This method
+    * even works when the destination is also a source, although you stand
+    * to lose the original data.
+    *
+    * @param src1 the first source
+    * @param src2 the second source
+    * @param dest the destination for the intersection
+    * @throws NullPointerException if any rectangle is null
+    */
+   public static void intersect(Rectangle2D src1, Rectangle2D src2,
+                                Rectangle2D dest)
+   {
+     double x = Math.max(src1.getX(), src2.getX());
+     double y = Math.max(src1.getY(), src2.getY());
+     double maxx = Math.min(src1.getMaxX(), src2.getMaxX());
+     double maxy = Math.min(src1.getMaxY(), src2.getMaxY());
+     dest.setRect(x, y, maxx - x, maxy - y);
+   }
+ 
+   /**
+    * Return a new rectangle which is the union of this and the given one.
+    *
+    * @param r the rectangle to be merged
+    * @return the union
+    * @throws NullPointerException if r is null
+    */
+   public abstract Rectangle2D createUnion(Rectangle2D r);
+ 
+   /**
+    * Joins a pair of rectangles, and places the result in the destination;
+    * this can be used to avoid object creation. This method even works when
+    * the destination is also a source, although you stand to lose the
+    * original data.
+    *
+    * @param src1 the first source
+    * @param src2 the second source
+    * @param dest the destination for the union
+    * @throws NullPointerException if any rectangle is null
+    */
+   public static void union(Rectangle2D src1, Rectangle2D src2,
+                            Rectangle2D dest)
+   {
+     double x = Math.min(src1.getX(), src2.getX());
+     double y = Math.min(src1.getY(), src2.getY());
+     double maxx = Math.max(src1.getMaxX(), src2.getMaxX());
+     double maxy = Math.max(src1.getMaxY(), src2.getMaxY());
+     dest.setRect(x, y, maxx - x, maxy - y);
+   }
+ 
+   /**
+    * Modifies this rectangle so that it represents the smallest rectangle
+    * that contains both the existing rectangle and the specified point.
+    * However, if the point falls on one of the two borders which are not
+    * inside the rectangle, a subsequent call to <code>contains</code> may
+    * return false.
+    *
+    * @param newx the X coordinate of the point to add to this rectangle
+    * @param newy the Y coordinate of the point to add to this rectangle
+    */
+   public void add(double newx, double newy)
+   {
+     double minx = Math.min(getX(), newx);
+     double maxx = Math.max(getMaxX(), newx);
+     double miny = Math.min(getY(), newy);
+     double maxy = Math.max(getMaxY(), newy);
+     setRect(minx, miny, maxx - minx, maxy - miny);
+   }
+ 
+   /**
+    * Modifies this rectangle so that it represents the smallest rectangle
+    * that contains both the existing rectangle and the specified point.
+    * However, if the point falls on one of the two borders which are not
+    * inside the rectangle, a subsequent call to <code>contains</code> may
+    * return false.
+    *
+    * @param p the point to add to this rectangle
+    * @throws NullPointerException if p is null
+    */
+   public void add(Point2D p)
+   {
+     add(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Modifies this rectangle so that it represents the smallest rectangle
+    * that contains both the existing rectangle and the specified rectangle.
+    *
+    * @param r the rectangle to add to this rectangle
+    * @throws NullPointerException if r is null
+    * @see #union(Rectangle2D, Rectangle2D, Rectangle2D)
+    */
+   public void add(Rectangle2D r)
+   {
+     union(this, r, this);
+   }
+ 
+   /**
+    * Return an iterator along the shape boundary. If the optional transform
+    * is provided, the iterator is transformed accordingly. Each call returns
+    * a new object, independent from others in use. This iterator is thread
+    * safe; modifications to the rectangle do not affect the results of this
+    * path instance.
+    *
+    * @param at an optional transform to apply to the iterator
+    * @return a new iterator over the boundary
+    * @since 1.2
+    */
+   public PathIterator getPathIterator(final AffineTransform at)
+   {
+     final double minx = getX();
+     final double miny = getY();
+     final double maxx = minx + getWidth();
+     final double maxy = miny + getHeight();
+     return new PathIterator()
+     {
+       /** Current coordinate. */
+       private int current = (maxx <= minx && maxy <= miny) ? 6 : 0;
+ 
+       public int getWindingRule()
+       {
+         // A test program showed that Sun J2SE 1.3.1 and 1.4.1_01
+         // return WIND_NON_ZERO paths.  While this does not really
+         // make any difference for rectangles (because they are not
+         // self-intersecting), it seems appropriate to behave
+         // identically.
+ 
+         return WIND_NON_ZERO;
+       }
+ 
+       public boolean isDone()
+       {
+         return current > 5;
+       }
+ 
+       public void next()
+       {
+         current++;
+       }
+ 
+       public int currentSegment(float[] coords)
+       {
+         switch (current)
+           {
+           case 1:
+             coords[0] = (float) maxx;
+             coords[1] = (float) miny;
+             break;
+           case 2:
+             coords[0] = (float) maxx;
+             coords[1] = (float) maxy;
+             break;
+           case 3:
+             coords[0] = (float) minx;
+             coords[1] = (float) maxy;
+             break;
+           case 0:
+           case 4:
+             coords[0] = (float) minx;
+             coords[1] = (float) miny;
+             break;
+           case 5:
+             return SEG_CLOSE;
+           default:
+             throw new NoSuchElementException("rect iterator out of bounds");
+           }
+         if (at != null)
+           at.transform(coords, 0, coords, 0, 1);
+         return current == 0 ? SEG_MOVETO : SEG_LINETO;
+       }
+ 
+       public int currentSegment(double[] coords)
+       {
+         switch (current)
+           {
+           case 1:
+             coords[0] = maxx;
+             coords[1] = miny;
+             break;
+           case 2:
+             coords[0] = maxx;
+             coords[1] = maxy;
+             break;
+           case 3:
+             coords[0] = minx;
+             coords[1] = maxy;
+             break;
+           case 0:
+           case 4:
+             coords[0] = minx;
+             coords[1] = miny;
+             break;
+           case 5:
+             return SEG_CLOSE;
+           default:
+             throw new NoSuchElementException("rect iterator out of bounds");
+           }
+         if (at != null)
+           at.transform(coords, 0, coords, 0, 1);
+         return current == 0 ? SEG_MOVETO : SEG_LINETO;
+       }
+     };
+   }
+ 
+   /**
+    * Return an iterator along the shape boundary. If the optional transform
+    * is provided, the iterator is transformed accordingly. Each call returns
+    * a new object, independent from others in use. This iterator is thread
+    * safe; modifications to the rectangle do not affect the results of this
+    * path instance. As the rectangle is already flat, the flatness parameter
+    * is ignored.
+    *
+    * @param at an optional transform to apply to the iterator
+    * @param flatness the maximum distance for deviation from the real boundary
+    * @return a new iterator over the boundary
+    * @since 1.2
+    */
+   public PathIterator getPathIterator(AffineTransform at, double flatness)
+   {
+     return getPathIterator(at);
+   }
+ 
+   /**
+    * Return the hashcode for this rectangle. The formula is not documented, but
+    * appears to be the same as:
+    * <pre>
+    * long l = Double.doubleToLongBits(getX())
+    *   + 37 * Double.doubleToLongBits(getY())
+    *   + 43 * Double.doubleToLongBits(getWidth())
+    *   + 47 * Double.doubleToLongBits(getHeight());
+    * return (int) ((l &gt;&gt; 32) ^ l);
+    * </pre>
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     // Talk about a fun time reverse engineering this one!
+     long l = java.lang.Double.doubleToLongBits(getX())
+       + 37 * java.lang.Double.doubleToLongBits(getY())
+       + 43 * java.lang.Double.doubleToLongBits(getWidth())
+       + 47 * java.lang.Double.doubleToLongBits(getHeight());
+     return (int) ((l >> 32) ^ l);
+   }
+ 
+   /**
+    * Tests this rectangle for equality against the specified object.  This
+    * will be true if an only if the specified object is an instance of
+    * Rectangle2D with the same coordinates and dimensions.
+    *
+    * @param obj the object to test against for equality
+    * @return true if the specified object is equal to this one
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof Rectangle2D))
+       return false;
+     Rectangle2D r = (Rectangle2D) obj;
+     return r.getX() == getX() && r.getY() == getY()
+       && r.getWidth() == getWidth() && r.getHeight() == getHeight();
+   }
+ 
+   /**
+    * This class defines a rectangle in <code>double</code> precision.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.2
+    * @status updated to 1.4
+    */
+   public static class Double extends Rectangle2D
+   {
+     /** The x coordinate of the lower left corner. */
+     public double x;
+ 
+     /** The y coordinate of the lower left corner. */
+     public double y;
+ 
+     /** The width of the rectangle. */
+     public double width;
+ 
+     /** The height of the rectangle. */
+     public double height;
+ 
+     /**
+      * Create a rectangle at (0,0) with width 0 and height 0.
+      */
+     public Double()
+     {
+     }
+ 
+     /**
+      * Create a rectangle with the given values.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      */
+     public Double(double x, double y, double w, double h)
+     {
+       this.x = x;
+       this.y = y;
+       width = w;
+       height = h;
+     }
+ 
+     /**
+      * Return the X coordinate.
+      *
+      * @return the value of x
+      */
+     public double getX()
+     {
+       return x;
+     }
+ 
+     /**
+      * Return the Y coordinate.
+      *
+      * @return the value of y
+      */
+     public double getY()
+     {
+       return y;
+     }
+ 
+     /**
+      * Return the width.
+      *
+      * @return the value of width
+      */
+     public double getWidth()
+     {
+       return width;
+     }
+ 
+     /**
+      * Return the height.
+      *
+      * @return the value of height
+      */
+     public double getHeight()
+     {
+       return height;
+     }
+ 
+     /**
+      * Test if the rectangle is empty.
+      *
+      * @return true if width or height is not positive
+      */
+     public boolean isEmpty()
+     {
+       return width <= 0 || height <= 0;
+     }
+ 
+     /**
+      * Set the contents of this rectangle to those specified.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      */
+     public void setRect(double x, double y, double w, double h)
+     {
+       this.x = x;
+       this.y = y;
+       width = w;
+       height = h;
+     }
+ 
+     /**
+      * Set the contents of this rectangle to those specified.
+      *
+      * @param r the rectangle to copy
+      * @throws NullPointerException if r is null
+      */
+     public void setRect(Rectangle2D r)
+     {
+       x = r.getX();
+       y = r.getY();
+       width = r.getWidth();
+       height = r.getHeight();
+     }
+ 
+     /**
+      * Determine where the point lies with respect to this rectangle. The
+      * result will be the binary OR of the appropriate bit masks.
+      *
+      * @param x the x coordinate to check
+      * @param y the y coordinate to check
+      * @return the binary OR of the result
+      * @see #OUT_LEFT
+      * @see #OUT_TOP
+      * @see #OUT_RIGHT
+      * @see #OUT_BOTTOM
+      * @since 1.2
+      */
+     public int outcode(double x, double y)
+     {
+       int result = 0;
+       if (width <= 0)
+         result |= OUT_LEFT | OUT_RIGHT;
+       else if (x < this.x)
+         result |= OUT_LEFT;
+       else if (x > this.x + width)
+         result |= OUT_RIGHT;
+       if (height <= 0)
+         result |= OUT_BOTTOM | OUT_TOP;
+       else if (y < this.y) // Remember that +y heads top-to-bottom.
+         result |= OUT_TOP;
+       else if (y > this.y + height)
+         result |= OUT_BOTTOM;
+       return result;
+     }
+ 
+     /**
+      * Returns the bounds of this rectangle. A pretty useless method, as this
+      * is already a rectangle.
+      *
+      * @return a copy of this rectangle
+      */
+     public Rectangle2D getBounds2D()
+     {
+       return new Double(x, y, width, height);
+     }
+ 
+     /**
+      * Return a new rectangle which is the intersection of this and the given
+      * one. The result will be empty if there is no intersection.
+      *
+      * @param r the rectangle to be intersected
+      * @return the intersection
+      * @throws NullPointerException if r is null
+      */
+     public Rectangle2D createIntersection(Rectangle2D r)
+     {
+       Double res = new Double();
+       intersect(this, r, res);
+       return res;
+     }
+ 
+     /**
+      * Return a new rectangle which is the union of this and the given one.
+      *
+      * @param r the rectangle to be merged
+      * @return the union
+      * @throws NullPointerException if r is null
+      */
+     public Rectangle2D createUnion(Rectangle2D r)
+     {
+       Double res = new Double();
+       union(this, r, res);
+       return res;
+     }
+ 
+     /**
+      * Returns a string representation of this rectangle. This is in the form
+      * <code>getClass().getName() + "[x=" + x + ",y=" + y + ",w=" + width
+      * + ",h=" + height + ']'</code>.
+      *
+      * @return a string representation of this rectangle
+      */
+     public String toString()
+     {
+       return getClass().getName() + "[x=" + x + ",y=" + y + ",w=" + width
+         + ",h=" + height + ']';
+     }
+   }
+ 
+   /**
+    * This class defines a rectangle in <code>float</code> precision.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.2
+    * @status updated to 1.4
+    */
+   public static class Float extends Rectangle2D
+   {
+     /** The x coordinate of the lower left corner. */
+     public float x;
+ 
+     /** The y coordinate of the lower left corner. */
+     public float y;
+ 
+     /** The width of the rectangle. */
+     public float width;
+ 
+     /** The height of the rectangle. */
+     public float height;
+ 
+     /**
+      * Create a rectangle at (0,0) with width 0 and height 0.
+      */
+     public Float()
+     {
+     }
+ 
+     /**
+      * Create a rectangle with the given values.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      */
+     public Float(float x, float y, float w, float h)
+     {
+       this.x = x;
+       this.y = y;
+       width = w;
+       height = h;
+     }
+ 
+     /**
+      * Create a rectangle with the given values.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      */
+     Float(double x, double y, double w, double h)
+     {
+       this.x = (float) x;
+       this.y = (float) y;
+       width = (float) w;
+       height = (float) h;
+     }
+ 
+     /**
+      * Return the X coordinate.
+      *
+      * @return the value of x
+      */
+     public double getX()
+     {
+       return x;
+     }
+ 
+     /**
+      * Return the Y coordinate.
+      *
+      * @return the value of y
+      */
+     public double getY()
+     {
+       return y;
+     }
+ 
+     /**
+      * Return the width.
+      *
+      * @return the value of width
+      */
+     public double getWidth()
+     {
+       return width;
+     }
+ 
+     /**
+      * Return the height.
+      *
+      * @return the value of height
+      */
+     public double getHeight()
+     {
+       return height;
+     }
+ 
+     /**
+      * Test if the rectangle is empty.
+      *
+      * @return true if width or height is not positive
+      */
+     public boolean isEmpty()
+     {
+       return width <= 0 || height <= 0;
+     }
+ 
+     /**
+      * Set the contents of this rectangle to those specified.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      */
+     public void setRect(float x, float y, float w, float h)
+     {
+       this.x = x;
+       this.y = y;
+       width = w;
+       height = h;
+     }
+ 
+     /**
+      * Set the contents of this rectangle to those specified.
+      *
+      * @param x the x coordinate
+      * @param y the y coordinate
+      * @param w the width
+      * @param h the height
+      */
+     public void setRect(double x, double y, double w, double h)
+     {
+       this.x = (float) x;
+       this.y = (float) y;
+       width = (float) w;
+       height = (float) h;
+     }
+ 
+     /**
+      * Set the contents of this rectangle to those specified.
+      *
+      * @param r the rectangle to copy
+      * @throws NullPointerException if r is null
+      */
+     public void setRect(Rectangle2D r)
+     {
+       x = (float) r.getX();
+       y = (float) r.getY();
+       width = (float) r.getWidth();
+       height = (float) r.getHeight();
+     }
+ 
+     /**
+      * Determine where the point lies with respect to this rectangle. The
+      * result will be the binary OR of the appropriate bit masks.
+      *
+      * @param x the x coordinate to check
+      * @param y the y coordinate to check
+      * @return the binary OR of the result
+      * @see #OUT_LEFT
+      * @see #OUT_TOP
+      * @see #OUT_RIGHT
+      * @see #OUT_BOTTOM
+      * @since 1.2
+      */
+     public int outcode(double x, double y)
+     {
+       int result = 0;
+       if (width <= 0)
+         result |= OUT_LEFT | OUT_RIGHT;
+       else if (x < this.x)
+         result |= OUT_LEFT;
+       else if (x > this.x + width)
+         result |= OUT_RIGHT;
+       if (height <= 0)
+         result |= OUT_BOTTOM | OUT_TOP;
+       else if (y < this.y) // Remember that +y heads top-to-bottom.
+         result |= OUT_TOP;
+       else if (y > this.y + height)
+         result |= OUT_BOTTOM;
+       return result;
+     }
+ 
+     /**
+      * Returns the bounds of this rectangle. A pretty useless method, as this
+      * is already a rectangle.
+      *
+      * @return a copy of this rectangle
+      */
+     public Rectangle2D getBounds2D()
+     {
+       return new Float(x, y, width, height);
+     }
+ 
+     /**
+      * Return a new rectangle which is the intersection of this and the given
+      * one. The result will be empty if there is no intersection.
+      *
+      * @param r the rectangle to be intersected
+      * @return the intersection
+      * @throws NullPointerException if r is null
+      */
+     public Rectangle2D createIntersection(Rectangle2D r)
+     {
+       Float res = new Float();
+       intersect(this, r, res);
+       return res;
+     }
+ 
+     /**
+      * Return a new rectangle which is the union of this and the given one.
+      *
+      * @param r the rectangle to be merged
+      * @return the union
+      * @throws NullPointerException if r is null
+      */
+     public Rectangle2D createUnion(Rectangle2D r)
+     {
+       Float res = new Float();
+       union(this, r, res);
+       return res;
+     }
+ 
+     /**
+      * Returns a string representation of this rectangle. This is in the form
+      * <code>getClass().getName() + "[x=" + x + ",y=" + y + ",w=" + width
+      * + ",h=" + height + ']'</code>.
+      *
+      * @return a string representation of this rectangle
+      */
+     public String toString()
+     {
+       return getClass().getName() + "[x=" + x + ",y=" + y + ",w=" + width
+         + ",h=" + height + ']';
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/RectangularShape.java gcc-4.1.0/libjava/classpath/java/awt/geom/RectangularShape.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/RectangularShape.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/RectangularShape.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,385 ----
+ /* RectangularShape.java -- a rectangular frame for several generic shapes
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.geom;
+ 
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ 
+ /**
+  * This class provides a generic framework, and several helper methods, for
+  * subclasses which represent geometric objects inside a rectangular frame.
+  * This does not specify any geometry except for the bounding box.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @see Arc2D
+  * @see Ellipse2D
+  * @see Rectangle2D
+  * @see RoundRectangle2D
+  * @status updated to 1.4
+  */
+ public abstract class RectangularShape implements Shape, Cloneable
+ {
+   /**
+    * Default constructor.
+    */
+   protected RectangularShape()
+   {
+   }
+ 
+   /**
+    * Get the x coordinate of the upper-left corner of the framing rectangle.
+    *
+    * @return the x coordinate
+    */
+   public abstract double getX();
+ 
+   /**
+    * Get the y coordinate of the upper-left corner of the framing rectangle.
+    *
+    * @return the y coordinate
+    */
+   public abstract double getY();
+ 
+   /**
+    * Get the width of the framing rectangle.
+    *
+    * @return the width
+    */
+   public abstract double getWidth();
+ 
+   /**
+    * Get the height of the framing rectangle.
+    *
+    * @return the height
+    */
+   public abstract double getHeight();
+ 
+   /**
+    * Get the minimum x coordinate in the frame. This is misnamed, or else
+    * Sun has a bug, because the implementation returns getX() even when
+    * getWidth() is negative.
+    *
+    * @return the minimum x coordinate
+    */
+   public double getMinX()
+   {
+     return getX();
+   }
+ 
+   /**
+    * Get the minimum y coordinate in the frame. This is misnamed, or else
+    * Sun has a bug, because the implementation returns getY() even when
+    * getHeight() is negative.
+    *
+    * @return the minimum y coordinate
+    */
+   public double getMinY()
+   {
+     return getY();
+   }
+ 
+   /**
+    * Get the maximum x coordinate in the frame. This is misnamed, or else
+    * Sun has a bug, because the implementation returns getX()+getWidth() even
+    * when getWidth() is negative.
+    *
+    * @return the maximum x coordinate
+    */
+   public double getMaxX()
+   {
+     return getX() + getWidth();
+   }
+ 
+   /**
+    * Get the maximum y coordinate in the frame. This is misnamed, or else
+    * Sun has a bug, because the implementation returns getY()+getHeight() even
+    * when getHeight() is negative.
+    *
+    * @return the maximum y coordinate
+    */
+   public double getMaxY()
+   {
+     return getY() + getHeight();
+   }
+ 
+   /**
+    * Return the x coordinate of the center point of the framing rectangle.
+    *
+    * @return the central x coordinate
+    */
+   public double getCenterX()
+   {
+     return getX() + getWidth() / 2;
+   }
+ 
+   /**
+    * Return the y coordinate of the center point of the framing rectangle.
+    *
+    * @return the central y coordinate
+    */
+   public double getCenterY()
+   {
+     return getY() + getHeight() / 2;
+   }
+ 
+   /**
+    * Return the frame around this object. Note that this may be a looser
+    * bounding box than getBounds2D.
+    *
+    * @return the frame, in double precision
+    * @see #setFrame(double, double, double, double)
+    */
+   public Rectangle2D getFrame()
+   {
+     return new Rectangle2D.Double(getX(), getY(), getWidth(), getHeight());
+   }
+ 
+   /**
+    * Test if the shape is empty, meaning that no points are inside it.
+    *
+    * @return true if the shape is empty
+    */
+   public abstract boolean isEmpty();
+ 
+   /**
+    * Set the framing rectangle of this shape to the given coordinate and size.
+    *
+    * @param x the new x coordinate
+    * @param y the new y coordinate
+    * @param w the new width
+    * @param h the new height
+    * @see #getFrame()
+    */
+   public abstract void setFrame(double x, double y, double w, double h);
+ 
+   /**
+    * Set the framing rectangle of this shape to the given coordinate and size.
+    *
+    * @param p the new point
+    * @param d the new dimension
+    * @throws NullPointerException if p or d is null
+    * @see #getFrame()
+    */
+   public void setFrame(Point2D p, Dimension2D d)
+   {
+     setFrame(p.getX(), p.getY(), d.getWidth(), d.getHeight());
+   }
+ 
+   /**
+    * Set the framing rectangle of this shape to the given rectangle.
+    *
+    * @param r the new framing rectangle
+    * @throws NullPointerException if r is null
+    * @see #getFrame()
+    */
+   public void setFrame(Rectangle2D r)
+   {
+     setFrame(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Set the framing rectangle of this shape using two points on a diagonal.
+    * The area will be positive.
+    *
+    * @param x1 the first x coordinate
+    * @param y1 the first y coordinate
+    * @param x2 the second x coordinate
+    * @param y2 the second y coordinate
+    */
+   public void setFrameFromDiagonal(double x1, double y1, double x2, double y2)
+   {
+     if (x1 > x2)
+       {
+ 	double t = x2;
+ 	x2 = x1;
+ 	x1 = t;
+       }
+     if (y1 > y2)
+       {
+ 	double t = y2;
+ 	y2 = y1;
+ 	y1 = t;
+       }
+     setFrame(x1, y1, x2 - x1, y2 - y1);
+   }
+ 
+   /**
+    * Set the framing rectangle of this shape using two points on a diagonal.
+    * The area will be positive.
+    *
+    * @param p1 the first point
+    * @param p2 the second point
+    * @throws NullPointerException if either point is null
+    */
+   public void setFrameFromDiagonal(Point2D p1, Point2D p2)
+   {
+     setFrameFromDiagonal(p1.getX(), p1.getY(), p2.getX(), p2.getY());
+   }
+ 
+   /**
+    * Set the framing rectangle of this shape using the center of the frame,
+    * and one of the four corners. The area will be positive.
+    *
+    * @param centerX the x coordinate at the center
+    * @param centerY the y coordinate at the center
+    * @param cornerX the x coordinate at a corner
+    * @param cornerY the y coordinate at a corner
+    */
+   public void setFrameFromCenter(double centerX, double centerY,
+                                  double cornerX, double cornerY)
+   {
+     double halfw = Math.abs(cornerX - centerX);
+     double halfh = Math.abs(cornerY - centerY);
+     setFrame(centerX - halfw, centerY - halfh, halfw + halfw, halfh + halfh);
+   }
+ 
+   /**
+    * Set the framing rectangle of this shape using the center of the frame,
+    * and one of the four corners. The area will be positive.
+    *
+    * @param center the center point
+    * @param corner a corner point
+    * @throws NullPointerException if either point is null
+    */
+   public void setFrameFromCenter(Point2D center, Point2D corner)
+   {
+     setFrameFromCenter(center.getX(), center.getY(),
+                        corner.getX(), corner.getY());
+   }
+ 
+   /**
+    * Tests if a point is inside the boundary of the shape.
+    *
+    * @param p the point to test
+    * @return true if the point is inside the shape
+    * @throws NullPointerException if p is null
+    * @see #contains(double, double)
+    */
+   public boolean contains(Point2D p)
+   {
+     return contains(p.getX(), p.getY());
+   }
+ 
+   /**
+    * Tests if a rectangle and this shape share common internal points.
+    *
+    * @param r the rectangle to test
+    * @return true if the rectangle intersects this shpae
+    * @throws NullPointerException if r is null
+    * @see #intersects(double, double, double, double)
+    */
+   public boolean intersects(Rectangle2D r)
+   {
+     return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Tests if the shape completely contains the given rectangle.
+    *
+    * @param r the rectangle to test
+    * @return true if r is contained in this shape
+    * @throws NullPointerException if r is null
+    * @see #contains(double, double, double, double)
+    */
+   public boolean contains(Rectangle2D r)
+   {
+     return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+   }
+ 
+   /**
+    * Returns a bounding box for this shape, in integer format. Notice that you
+    * may get a tighter bound with getBounds2D. If the frame is empty, the
+    * box is the default empty box at the origin.
+    *
+    * @return a bounding box
+    */
+   public Rectangle getBounds()
+   {
+     if (isEmpty())
+       return new Rectangle();
+     double x = getX();
+     double y = getY();
+     double maxx = Math.ceil(x + getWidth());
+     double maxy = Math.ceil(y + getHeight());
+     x = Math.floor(x);
+     y = Math.floor(y);
+     return new Rectangle((int) x, (int) y, (int) (maxx - x), (int) (maxy - y));
+   }
+ 
+   /**
+    * Return an iterator along the shape boundary. If the optional transform
+    * is provided, the iterator is transformed accordingly. The path is
+    * flattened until all segments differ from the curve by at most the value
+    * of the flatness parameter, within the limits of the default interpolation
+    * recursion limit of 1024 segments between actual points. Each call
+    * returns a new object, independent from others in use. The result is
+    * threadsafe if and only if the iterator returned by
+    * {@link #getPathIterator(AffineTransform)} is as well.
+    *
+    * @param at an optional transform to apply to the iterator
+    * @param flatness the desired flatness
+    * @return a new iterator over the boundary
+    * @throws IllegalArgumentException if flatness is invalid
+    * @since 1.2
+    */
+   public PathIterator getPathIterator(AffineTransform at, double flatness)
+   {
+     return new FlatteningPathIterator(getPathIterator(at), flatness);
+   }
+ 
+   /**
+    * Create a new shape of the same run-time type with the same contents as
+    * this one.
+    *
+    * @return the clone
+    */
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ } // class RectangularShape
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/RoundRectangle2D.java gcc-4.1.0/libjava/classpath/java/awt/geom/RoundRectangle2D.java
*** gcc-4.0.2/libjava/classpath/java/awt/geom/RoundRectangle2D.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/RoundRectangle2D.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,533 ----
+ /* RoundRectangle2D.java -- represents a rectangle with rounded corners
+    Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.geom;
+ 
+ import java.util.NoSuchElementException;
+ 
+ 
+ /** This class implements a rectangle with rounded corners.
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @date December 3, 2000
+  */
+ public abstract class RoundRectangle2D extends RectangularShape
+ {
+   /** Return the arc height of this round rectangle.  */
+   public abstract double getArcHeight();
+ 
+   /** Return the arc width of this round rectangle.  */
+   public abstract double getArcWidth();
+ 
+   /** Set the values of this round rectangle
+    * @param x The x coordinate
+    * @param y The y coordinate
+    * @param w The width
+    * @param h The height
+    * @param arcWidth The arc width
+    * @param arcHeight The arc height
+    */
+   public abstract void setRoundRect(double x, double y, double w, double h,
+                                     double arcWidth, double arcHeight);
+ 
+   /** Create a RoundRectangle2D.  This is protected because this class
+    * is abstract and cannot be instantiated.
+    */
+   protected RoundRectangle2D()
+   {
+   }
+ 
+   /** Return true if this object contains the specified point.
+    * @param x The x coordinate
+    * @param y The y coordinate
+    */
+   public boolean contains(double x, double y)
+   {
+     double mx = getX();
+     double mw = getWidth();
+     if (x < mx || x >= mx + mw)
+       return false;
+     double my = getY();
+     double mh = getHeight();
+     if (y < my || y >= my + mh)
+       return false;
+ 
+     // Now check to see if the point is in range of an arc.
+     double dy = Math.min(Math.abs(my - y), Math.abs(my + mh - y));
+     double dx = Math.min(Math.abs(mx - x), Math.abs(mx + mw - x));
+ 
+     // The arc dimensions are that of the corresponding ellipse
+     // thus a 90 degree segment is half of that.
+     double aw = getArcWidth() / 2.0;
+     double ah = getArcHeight() / 2.0;
+     if (dx > aw || dy > ah)
+       return true;
+ 
+     // At this point DX represents the distance from the nearest edge
+     // of the rectangle.  But we want to transform it to represent the
+     // scaled distance from the center of the ellipse that forms the
+     // arc.  Hence this code:
+     dy = (ah - dy) / ah;
+     dx = (aw - dx) / aw;
+ 
+     return dx * dx + dy * dy <= 1.0;
+   }
+ 
+   /** Return true if this object contains the specified rectangle
+    * @param x The x coordinate
+    * @param y The y coordinate
+    * @param w The width
+    * @param h The height
+    */
+   public boolean contains(double x, double y, double w, double h)
+   {
+     // We have to check all four points here (for ordinary rectangles
+     // we can just check opposing corners).
+     return (contains(x, y) && contains(x, y + h) && contains(x + w, y + h)
+            && contains(x + w, y));
+   }
+ 
+   /** Return a new path iterator which iterates over this rectangle.
+    * @param at An affine transform to apply to the object
+    */
+   public PathIterator getPathIterator(final AffineTransform at)
+   {
+     final double minx = getX();
+     final double miny = getY();
+     final double maxx = minx + getWidth();
+     final double maxy = miny + getHeight();
+     final double arcwidth = getArcWidth();
+     final double archeight = getArcHeight();
+     return new PathIterator()
+       {
+ 	/** We iterate counterclockwise around the rectangle, starting in the
+ 	 * upper right.  This variable tracks our current point, which
+ 	 * can be on either side of a given corner.  */
+ 	private int current = 0;
+ 
+ 	/** Child path iterator, used for corners.  */
+ 	private PathIterator corner;
+ 
+ 	/** This is used when rendering the corners.  We re-use the arc
+ 	 * for each corner.  */
+ 	private Arc2D arc = new Arc2D.Double();
+ 
+ 	/** Temporary array used by getPoint.  */
+ 	private double[] temp = new double[2];
+ 
+ 	public int getWindingRule()
+ 	{
+ 	  return WIND_NON_ZERO;
+ 	}
+ 
+ 	public boolean isDone()
+ 	{
+ 	  return current > 9;
+ 	}
+ 
+ 	private void getPoint(int val)
+ 	{
+ 	  switch (val)
+ 	    {
+ 	    case 0:
+ 	    case 8:
+ 	      temp[0] = maxx;
+ 	      temp[1] = miny + archeight;
+ 	      break;
+ 	    case 7:
+ 	      temp[0] = maxx;
+ 	      temp[1] = maxy - archeight;
+ 	      break;
+ 	    case 6:
+ 	      temp[0] = maxx - arcwidth;
+ 	      temp[1] = maxy;
+ 	      break;
+ 	    case 5:
+ 	      temp[0] = minx + arcwidth;
+ 	      temp[1] = maxy;
+ 	      break;
+ 	    case 4:
+ 	      temp[0] = minx;
+ 	      temp[1] = maxy - archeight;
+ 	      break;
+ 	    case 3:
+ 	      temp[0] = minx;
+ 	      temp[1] = miny + archeight;
+ 	      break;
+ 	    case 2:
+ 	      temp[0] = minx + arcwidth;
+ 	      temp[1] = miny;
+ 	      break;
+ 	    case 1:
+ 	      temp[0] = maxx - arcwidth;
+ 	      temp[1] = miny;
+ 	      break;
+ 	    }
+ 	}
+ 
+ 	public void next()
+ 	{
+ 	  if (current >= 8)
+ 	    ++current;
+ 	  else if (corner != null)
+ 	    {
+ 	      // We're iterating through the corner.  Work on the child
+ 	      // iterator; if it finishes, reset and move to the next
+ 	      // point along the rectangle.
+ 	      corner.next();
+ 	      if (corner.isDone())
+ 	        {
+ 		  corner = null;
+ 		  ++current;
+ 	        }
+ 	    }
+ 	  else
+ 	    {
+ 	      // Make an arc between this point on the rectangle and
+ 	      // the next one, and then iterate over this arc.
+ 	      getPoint(current);
+ 	      double x1 = temp[0];
+ 	      double y1 = temp[1];
+ 	      getPoint(current + 1);
+ 	      Rectangle2D.Double r = new Rectangle2D.Double(Math.min(x1,
+ 	                                                             temp[0]),
+ 	                                                    Math.min(y1,
+ 	                                                             temp[1]),
+ 	                                                    Math.abs(x1
+ 	                                                             - temp[0]),
+ 	                                                    Math.abs(y1
+ 	                                                             - temp[1]));
+ 	      arc.setArc(r, (current >> 1) * 90.0, 90.0, Arc2D.OPEN);
+ 	      corner = arc.getPathIterator(at);
+ 	    }
+ 	}
+ 
+ 	public int currentSegment(float[] coords)
+ 	{
+ 	  if (corner != null)
+ 	    {
+ 	      int r = corner.currentSegment(coords);
+ 	      if (r == SEG_MOVETO)
+ 		r = SEG_LINETO;
+ 	      return r;
+ 	    }
+ 
+ 	  if (current < 9)
+ 	    {
+ 	      getPoint(current);
+ 	      coords[0] = (float) temp[0];
+ 	      coords[1] = (float) temp[1];
+ 	    }
+ 	  else if (current == 9)
+ 	    return SEG_CLOSE;
+ 	  else
+ 	    throw new NoSuchElementException("rect iterator out of bounds");
+ 
+ 	  if (at != null)
+ 	    at.transform(coords, 0, coords, 0, 1);
+ 	  return current == 0 ? SEG_MOVETO : SEG_LINETO;
+ 	}
+ 
+ 	public int currentSegment(double[] coords)
+ 	{
+ 	  if (corner != null)
+ 	    {
+ 	      int r = corner.currentSegment(coords);
+ 	      if (r == SEG_MOVETO)
+ 		r = SEG_LINETO;
+ 	      return r;
+ 	    }
+ 
+ 	  if (current < 9)
+ 	    {
+ 	      getPoint(current);
+ 	      coords[0] = temp[0];
+ 	      coords[1] = temp[1];
+ 	    }
+ 	  else if (current == 9)
+ 	    return SEG_CLOSE;
+ 	  else
+ 	    throw new NoSuchElementException("rect iterator out of bounds");
+ 
+ 	  if (at != null)
+ 	    at.transform(coords, 0, coords, 0, 1);
+ 	  return current == 0 ? SEG_MOVETO : SEG_LINETO;
+ 	}
+       };
+   }
+ 
+   /** Return true if the given rectangle intersects this shape.
+    * @param x The x coordinate
+    * @param y The y coordinate
+    * @param w The width
+    * @param h The height
+    */
+   public boolean intersects(double x, double y, double w, double h)
+   {
+     // Check if any corner is within the rectangle
+     return (contains(x, y) || contains(x, y + h) || contains(x + w, y + h)
+            || contains(x + w, y));
+   }
+ 
+   /** Set the boundary of this round rectangle.
+    * @param x The x coordinate
+    * @param y The y coordinate
+    * @param w The width
+    * @param h The height
+    */
+   public void setFrame(double x, double y, double w, double h)
+   {
+     // This is a bit lame.
+     setRoundRect(x, y, w, h, getArcWidth(), getArcHeight());
+   }
+ 
+   /** Set the values of this round rectangle to be the same as those
+    * of the argument.
+    * @param rr The round rectangle to copy
+    */
+   public void setRoundRect(RoundRectangle2D rr)
+   {
+     setRoundRect(rr.getX(), rr.getY(), rr.getWidth(), rr.getHeight(),
+                  rr.getArcWidth(), rr.getArcHeight());
+   }
+ 
+   /** A subclass of RoundRectangle which keeps its parameters as
+    * doubles.  */
+   public static class Double extends RoundRectangle2D
+   {
+     /** The height of the corner arc.  */
+     public double archeight;
+ 
+     /** The width of the corner arc.  */
+     public double arcwidth;
+ 
+     /** The x coordinate of this object.  */
+     public double x;
+ 
+     /** The y coordinate of this object.  */
+     public double y;
+ 
+     /** The width of this object.  */
+     public double width;
+ 
+     /** The height of this object.  */
+     public double height;
+ 
+     /** Construct a new instance, with all parameters set to 0.  */
+     public Double()
+     {
+     }
+ 
+     /** Construct a new instance with the given arguments.
+      * @param x The x coordinate
+      * @param y The y coordinate
+      * @param w The width
+      * @param h The height
+      * @param arcWidth The arc width
+      * @param arcHeight The arc height
+      */
+     public Double(double x, double y, double w, double h, double arcWidth,
+                   double arcHeight)
+     {
+       this.x = x;
+       this.y = y;
+       this.width = w;
+       this.height = h;
+       this.arcwidth = arcWidth;
+       this.archeight = arcHeight;
+     }
+ 
+     public double getArcHeight()
+     {
+       return archeight;
+     }
+ 
+     public double getArcWidth()
+     {
+       return arcwidth;
+     }
+ 
+     public Rectangle2D getBounds2D()
+     {
+       return new Rectangle2D.Double(x, y, width, height);
+     }
+ 
+     public double getX()
+     {
+       return x;
+     }
+ 
+     public double getY()
+     {
+       return y;
+     }
+ 
+     public double getWidth()
+     {
+       return width;
+     }
+ 
+     public double getHeight()
+     {
+       return height;
+     }
+ 
+     public boolean isEmpty()
+     {
+       return width <= 0 || height <= 0;
+     }
+ 
+     public void setRoundRect(double x, double y, double w, double h,
+                              double arcWidth, double arcHeight)
+     {
+       this.x = x;
+       this.y = y;
+       this.width = w;
+       this.height = h;
+       this.arcwidth = arcWidth;
+       this.archeight = arcHeight;
+     }
+   } // class Double
+ 
+   /** A subclass of RoundRectangle which keeps its parameters as
+    * floats.  */
+   public static class Float extends RoundRectangle2D
+   {
+     /** The height of the corner arc.  */
+     public float archeight;
+ 
+     /** The width of the corner arc.  */
+     public float arcwidth;
+ 
+     /** The x coordinate of this object.  */
+     public float x;
+ 
+     /** The y coordinate of this object.  */
+     public float y;
+ 
+     /** The width of this object.  */
+     public float width;
+ 
+     /** The height of this object.  */
+     public float height;
+ 
+     /** Construct a new instance, with all parameters set to 0.  */
+     public Float()
+     {
+     }
+ 
+     /** Construct a new instance with the given arguments.
+      * @param x The x coordinate
+      * @param y The y coordinate
+      * @param w The width
+      * @param h The height
+      * @param arcWidth The arc width
+      * @param arcHeight The arc height
+      */
+     public Float(float x, float y, float w, float h, float arcWidth,
+                  float arcHeight)
+     {
+       this.x = x;
+       this.y = y;
+       this.width = w;
+       this.height = h;
+       this.arcwidth = arcWidth;
+       this.archeight = arcHeight;
+     }
+ 
+     public double getArcHeight()
+     {
+       return archeight;
+     }
+ 
+     public double getArcWidth()
+     {
+       return arcwidth;
+     }
+ 
+     public Rectangle2D getBounds2D()
+     {
+       return new Rectangle2D.Float(x, y, width, height);
+     }
+ 
+     public double getX()
+     {
+       return x;
+     }
+ 
+     public double getY()
+     {
+       return y;
+     }
+ 
+     public double getWidth()
+     {
+       return width;
+     }
+ 
+     public double getHeight()
+     {
+       return height;
+     }
+ 
+     public boolean isEmpty()
+     {
+       return width <= 0 || height <= 0;
+     }
+ 
+     public void setRoundRect(float x, float y, float w, float h,
+                              float arcWidth, float arcHeight)
+     {
+       this.x = x;
+       this.y = y;
+       this.width = w;
+       this.height = h;
+       this.arcwidth = arcWidth;
+       this.archeight = arcHeight;
+     }
+ 
+     public void setRoundRect(double x, double y, double w, double h,
+                              double arcWidth, double arcHeight)
+     {
+       this.x = (float) x;
+       this.y = (float) y;
+       this.width = (float) w;
+       this.height = (float) h;
+       this.arcwidth = (float) arcWidth;
+       this.archeight = (float) arcHeight;
+     }
+   } // class Float
+ } // class RoundRectangle2D
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/Area-1.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/Area-1.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/Area-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/Area-1.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ ‰PNG
+ 
+ 
IHDRV.ÕÞ:/bKGDùC»	pHYsšœtIMEÔ ô‘eÂ IDATxÚì�t”õ�ï_â€ÏtÃÝ™Slg¼Ðf¶à2ÔIQI”­‰º[ƒ¬Jï%Ï5A]ˆ–Óv½à¯“p{iB­mj%t…$tM{BO-‰-MbE2Ñ+”ÉÌ3»PfZ(ó\’ú½#È�|'$3Còyyr$“ï<ó™g¾ï÷|žÏ÷Çs�RJ!‚ ¶T0B„ A'´ïo'p €yÐÄê±°l½ÿ6z›Ñûoœ6'žñ|^y“óðŽõâÄ)Ÿº CÊ5©–±š˜4u7QûV-­m­DOE{í?
˜LÒ�ÑëŽû� pª×|½†—¼y”L/Á=Ú-½@„ág¬tà7ýÔÖÕ=È¦ö!xÁð°=|+g¯$×“+=B„«×X#D¨ŠUáßê§ó`'¸€¹�”+õ°�ò¦äQ1··]2YA®c51Yi®dÃ¦
½Ì>{‰Ÿ"¸ö¹ð|Ïƒ5µ5ÒCáB!XöÝ¡UTü ˜Ü�œ”dkˆËBËhØÜã€Ct™?@ÒI§x_1ÑMQ¼½,(Àn·K tžøV�¿Øx�| ïä åß/bæ¬9I‰4Ö1–[ÆÚŸ­í½ÜŸ‡ÞÀS‚pà`é‘¥Xë,¼“½Î+L©ø!™D"ðÄR“ÚŸùÏjáEZUá»5Dum	^)¡
¹±ÖPÃÂ�±NYðHje¨EÝEx^ô``Pòd‰d¨‚p®]þžXR�e”ô#à†á'ol©Y6â““!1V“™�™¶z/ùS¬“N:Ëö,£cSË¾½�GêD‚ÐwÙ‚9ßl'ðN°,N‡p�¯ òGÅÌ™�)Æ:Xì`ßØø
¬±VïÀTŠQÐ]€·Ü‹Ûå¦¸¨XT$ç^en„ùÅeÐã®@¶*òg›l©Y9"³×A5Ö’H	k×­í­£bèÀ�Óƒ±ßÀ~ÀNìh;v6"XŸü7Î/„¦„0¯7Yzd)¡òËž\†g’d©‚Ðw!ƒ…Å&µ›Ë�¥^:{õN®`GãJ<ž‘U{c�áÎÀ�waWü
e`�K.Þ}^Œf#Ú»LÕírãõzñLôàv÷ÿAEŽE¼ ¸/ˆyÜ`ÅÓ+®¸–#F#�Ôî©¥©¹	:aË‚-äfÉá*5Ö“122¿JÆÄ"§ò¼“y¶¶:ý�÷uðLj'f5ÒÜ\ËÞÖ½ØÇŽœ1Œ+6Ö!²wgŽ†aÖ•“Eyûò`ÐÞ©^rïÎÅéL�õýM4QÖVFóÎæÞ|ÀÝ€?pP1©‚âYR^®nƒmz³‰æÝm„@èh�w²µž›s/äfµbõ4‚
|>_Jé÷ª1ÖvÚ¹gÛ=DÓ¢�3ð w/Æ³ÉC´3ŠÏçcÎsR¦.#†?ægÕ¦UDFaðõ‹gåÆFƒ=+XY´R*\ýtÃŽ_ì a[3¡ —¶w
+ °¬ó³N#
+ Äð¸j‰ž
+ ’3#‡™_Ÿ)³j¬­´rgí�½SÛ|»Ü/ŠáÙäÁ:nQ¼ ÷„Ô©ÃÄˆ±æäV­[Õ;]lz+ÄvÂâ}‹ñ?åa
+ Ã†P(„]­mïôN½*z4†{œ«'Jñ‚b·¸Rcm§�¯Ö~µ×P½ñ¿hyäÕåÅ(\P¨U/M4ÙÏfÓfµÁ“À„8ŸÜKw/¥â©
+ éaÂ°Â<bRVîÇ:ÁírR²¨$¥¢«ÖXC„ÈÜ–It|4îLÕ…‹²`f�IþÜ|2¼©»®c_Ë_YNû‚vÂ·…ã~¾c§ƒæ
+ –-“^&;b±˜,¨,c�!cwážpÜ5Õ|òÉÝ�‹k¬‹9sç\5'È¿ÁOÕñ*ßÄ]7rÕº¨[Aá¬Béi‚ Æzq2�ãý/�”c­³(œWxU®r
+ Qüãbš—7Ç]HÿQ:U·UÉT,Ac½�’H	k7­…oÅq9ŒƒÊ}•D›£”,*¹ºG
+ »¡ð¹Bf5`eÅ7ÁÏ÷¬��î�Z” ˆ±~ÊvðÀÿz–£mŽ.\T´U`„
æÌž3lNXÙÚ2Ö¸×��Ë”ó–æ±cÍÙ9KÄX{7Tù›�ƒ5ÃÒ^å–N:oTàÄIî}ÃïØ_ëgeÏJ¢Ça®!XQ·‚²§Ê¤×	Â0gT
ffb9õMÕ…‹Š7*pîaiª%%T:+qltè?É
®Ú÷´K¯„‘l¬5Ôôný§9XåÀAE[o¦š=#{XŸ¸ÂY…”ÙË0¶ÚÏ	>ä™ºgzï+ÂÈ3Ö1n\Ø»âH“Ê}•acØfªd®sKXzl)ìÑNÓ“MT¬“…‚0"�uÙ±e½K95Kå‘r¢ÍÑa5P¥CÙceäíÌS¯½5Á¢�Ì#¦ô>AIÆ"ÄÚWÖöÞNEƒ|ò±ÖY½SªF ;žÞ�÷Eýµ½m‹ÚXó³5Òûa$ë²Ð2�Ö=ª\¸ÈÝ�;²oÂ7êÕcüÈÐnßšÞJG°Cz  Œc51{oQ=OóR8X†k¬kÄß7*Ã“AÉ¸Ø§™µ>ÜÆ†º
Òa$ëJs%ŒC+ûÌ#³Î¼ªÖþ%xëôK­é­„B!9q‚0œ�5B„
›6hÍ00È«Ë#n¾œÅsX¿`=lÔk˜ js•œ4AÎÆZ;+r�ÚjQ¬ˆX(–Ò[ÿ%ƒìIÙd…³ Ö[k´EÀ;“'ÃÕXý[ýÚ·¬ölòP¸@¶Ã»5�ÔÀ+zm;ævP[W+'M†£±vÐAçÁN­Û�,î^ŒuÜJÉ�ÿSÏõ²,½¬µsB'­G[å¤	Âp4V¿é—~¶Z¼@îFz9*æUÀf½¶áñaY0 ÃÑXkëjanÿOÈ"‹hgTöí‡ì	Ù¤M×jÛ>»�†­
rÒa8«‰Iôx4nÿ�·/ŸÏ'gNƒ9·ÍÑÚG ìŠÊ´+AVÆÚÔÝ‹†Øs�y«:”Þ_
+ ;õÚ†Œ�Ì„ád¬µoÕBVÿ�sÉ…d|MìØIG¯É‰ÐôÛ&9i‚0\Œµµ­¦÷ßØ»Ï‹wªWÎZäÝ–§UÞ$°' 'L†ƒ±Fˆµ¢Z‹ŒfƒÜ»ån£ñP|W1ìî¿]xt˜hOTN˜ c
ÔjèÀ�5p:�rÖâ sl&FTo×+Ó&S®aXkàdÒúoèCf—Ms‚°LSÌU®zcmßß®µÚÊczp»dîê@ðŒ÷À‘þÛY“,BeÚ• \ýë�Lî¿¡±ßÀë•�«��=5Þï¿]db„à� œ0A¸Ú�Õ<h¢3#È~ÀŽg¢GÎØÈš˜42V—…–R€ \õÆjõXZóRcGc²éÊ@KNhø›£ÍÞyÂ‚ \ÝÆ*§`èq£÷…E¦[	ÂðÈXm–VC§M¦Y
C+µ°äd	Â°0VM1r¶ˆ]gõÅYcµzÄ\AJ‚6ÍìÖ&_`‚pÕ«n&*—©'FL«``HÆ*#ÉX#Däl
)·ÂH+èNï‘i@ÆDonª‡”a$e¬2hà„	kÕXu§e	‚�âÆê´9¡[£åxÙ d #ApôßÎÙíÔä!…�Õ3Ñ�ý7”
BNëÁV­�na‡lt#ÃÁX}“|°¿ÿ†æd“`P6�}˜¢a¬x'ÉF7‚pÕkîä\­
B‚î l2@BGC0¡ÿv²Ñ� —Œu¬Nõß0JT{t[ø”:´ç¦aC6º„á`¬Nœ8tFV€°#L$"óYã¡ùd³ÖÀ•—Li„áb¬Ã·´7sLšÞ”[4ÇCÕo«`Fÿí²»³e« 'cÍËÊƒ·úo˜èˆ´ˆë½¥õmý·õ¾ëÅw›ÜWL†�±–L/�¶þ[XmA½y¯
4ÄQ3€Ü»äÖâ‚0lŒÕ=Ú�ÃÒ«³gÙ²}‹œ9
Ví\÷÷ß.�t8ö±v9i‚0\ŒÀ7Î‡Î>+Á©AšRgí�!‚{‚Ze€9‘9¸ÇÉlAvÆZ6·êôžLb‘©W—cå‘•0^¯­c«ƒüÙùrÒa¸k¶;WØ¥õ¤æÍø7ùåì]‚j7×Â¼þÛzñÂQpO�ŒU†�±äMÌÓZ…Åhh×*›²\*[=¶Ð¹#Kþ‘|ÜãÅTaØkÙì2Øª÷Ä¶m’µ^“µ?[�ößÖÀÀ¨3(˜[ 'N†«±ºín²ÈÒZ,`Ù-=�t;ä,žCá�Bpée«Ý`ÉlAÖÆ
+ P¹ 6é=907ÀªºUrÏ²ƒ4oj†‡õÚ{7{)œW('N†»±fº3ñ÷i/hœÛHU]Õˆ?‘1bÌ¯�sõÚP@ô`�Gv³„ao¬•ó*a³Þ¢Þ(þ“~B¡‘½	ö7Bß z<
+ SõÚû6ú(˜'µUA1ÆšíÉ&ë¨^­ Pà‰ÍOŒØ¥®UÝU4®k„oéµ_Ü½«Ó"Ã›!=PFŠ±lytÆÏôw[j\ÔÈ²uËFÜ	l¥•…ß[ßÖkïÀ�{�›âGŠ¥÷	ÂH3V÷õnŠÒŠ@÷
+ ß	þ?þ­#g
+ Vˆ÷üôžÞý4§¢®8²'NY #ÑXüûIß”®}0kªÅJ×JjÞ¨ö'ÎÄ$³.ëzKk?€rÿ8LÉ¢éy‚0R� jVÆVý’@4+Ê2–±c÷ŽamªÛ2ˆÆ¢0[ï9s6Îé]0Z:ž ŒhcÍõåRr²D¿$„ï3ßšOÕÃoVˆuD#Qíùª¡
+ bá™·eJ¯„aÎ5J)¥Ó0ûeÓ¶¼-®lËh3X^ÁÊÙ+‡ÅÉj¥•{ÖÞƒå¶´3U€¢î"Œ¥þ5~ÉVA2ÖOÙ±héëÒã:¸•eñÌÄg˜ó£9WýT¬ªî*îüŸwbùâ3Õ,²p—ºY¹|¥˜ª ˆ±ž�Óé¤fF
ŽmŽø^a*4,h £<ƒŽÐÕ·¯@Œ3ÌdáÒ…°ÈÒ®/ù?Ê'ïþ<™ R
+ ¸45»kx¢ç	¢9Ñ¸_ÌØ`°tìÒÞMµ¯v°ƒoüôXQ«wžj§+kW’>6�™³fJO1ÖËãßæç‰ñOÀ@n*„ôºtªæV‘ëMÝ›çî+¤ö•ZX€ötª¾/*wV‚	ÅE²@^˜GÀ²bx&É®lW\
+ 8—’Y%”K!8€'{¡óÙNîyÿ²¿ŸM‡™šåO�‡#ÃeÄõ<ƒÊ=•DöEÄT…aEä?frÃß¬äon\Fæm+éØ'›ÝZÆú	eµe¬ñ®!ê‹ì1`dÏ¢bAÙ²SêäÄNÆX³n
m§Úh_ÐNxR¸ßËÿ²�eDöEXöÔ2é]Â° tV–†¨Ý\= „Þ
‡c`óã»5JÅ÷‹ÉÍ‘�ÚÅXª¶U±2m%áœðÀÒÝk°®£.ò§æSñ@öÑ©s™‹Å¨ÝTKãÁFÌ&�¯°F[ŸIÄ½”l,Áè1$S®zb'¡¡VýxÁw›{/5)àâ;¸Ç€Z\éA
+ gçPúÌLìN1Vu¥ÙÑ¼ƒ'N=Aç¬Î+�h°
Ò{ÒÉ�šKñÝÅd;S'“mmk¥qg#!BD}Q:îîÀít“÷ƒ<|“|2P%\µt¡q[„Úº&ï  ˆG­`k$=rs|”<šKæm#ÏeÅXÚí,Û½ŒæEÍƒ7_sÐFÔÀ…�Ëƒ×ë%wb.^·;v8pÒûÁEˆ%Ú÷ÿÖc­ÞÐ¾¯�ðñ0¹=¹Ô?S�Ý>8Ùpûžvšš›u†(\PHvV¶¨S¸:3ÔHŒþæ«D£gÍt0V¶ã»µ«§–½­{GÔ-ˆÍX"‘ËÖ-£v^-–ÇühM`?½ƒfÇ5Ú�;{3¸8éåéìxr“d/TA8O^GL
+ ‹Êhþí2°®¬^j¤Aé!B�¬\¾rÄÍãTcýÿF?~§Ÿà¬`ê½ãnp”;(vSQT!j„ÏècÙŠ2·¹	îØXAÎ½�w_V�9bW‰±~RXµmMšˆz¢©÷Î÷€w“—úo×“á‘ìUÎÓïžv–ýÏ*ÚÞZ†uJ/{u8`ÅÓ!BG+(^P<¢72cý„ª�UÔœª¡ù‘f­[B'úÛÙxÑ �<ªŸ¬´Ú« —ìµì{4î„¶wJ çú°AÑ£1<.?†Ë¾½lÄï‹1äÆ
+ 9aÕ+«hßJÛ¼¶Ô;éGÀ±ÎAþÄ|ªTÉf)‚pæ“²ïù	ìñÐönñÙÙ½†Z0|ÓªˆFC”,*‘=1i¬Ÿ
+ …¨Ú\Eë¸VÚ´aÙ­Ô:06L, rA¥d°‚pny ÐŽ]-Á �'ïä¢Ñ EŠÈ˜*å´¤kß7 iâßä'H�àì ÁI©1ÈåÃGÞ¾<‚ßb`PS[#=D>› Qµ©ŠâÅx&Éj«”1ÖOˆÅb4lm õ`+�®NÚç¶v†ƒ/9ÇrpÖ9±:-|S|äÏÍ—lU„«ÓX?›Å6Ô5:"d„°²,:¦wÐiïÔ×qá"/–‡û-7Ön£ÇÀáp0gö<ùöaëytCë[­´¶µ>î]Iåˆ‚"#XéÑÑQbÄˆžýÀqö¿OVd¹»Ý8:û
ììíÝ}Ê0rgä’==[ªA!Æz±²ÁÉÁýA‚‚„:CŸŽLžÅêùt Ì°�ÝêÏžñ½Ë`½“½#jI� b¬‚ Ã†Qr
+ AÄXAÄXAÄXA1VA1ÖqÍ5×pÍ5×P__/Ÿ¶ #ÛXÿð‡?°páBÜn76›�´´4222ø§ú§A­éÓ§3}útš››öþ’ñšÂÈN®Ö>w5ÆmKÕÀæÏŸÏ/~ñ¾ð…/ðÈ#�ðÞ{ï±sçÎA­ßýîw}fÞ===Øl¶„¾¦ $ºŸë0XZ–ZQ)Ê˜1c ~úÓŸž÷ø‰'úþ
(@ÕÕÕ)¥”ª««ë{ì³mJKKÕwÜ¡®»î:5}útõïÿþïçýý³?çþíé§ŸV·Ür‹²Ùlê�7ÞPµµµ*##CýÕ_ý•ºöÚkÕ¿øEõðÃ«cÇŽ�ë¦M›Ô´iÓ”ÝnW×]w�ºõÖ[UWW×e_Súã³ýþÜÇþùŸÿYeffªÑ£G«›nºI�~û¹RJýä'?Q7Ýt“3fŒúüç?A¾”~ýë_«;ï¼S¥¥¥©k¯½V¹\.•““£~ÿûßk{8j%e#¼ñÆ ‡š?¾òûýª££ã²ìrÆš––¦.\ØwÜŒŒõ—¿üE-Y²¤¯ÍÌ™3Õ’%KÔ’%KÎ{î5×\£zè!õÈ#�¨={ö¨ÿý¿ÿ·úú×¿®-Z¤{ì1õ¥/}I*??¿ïu×­[×÷üûï¿_-Z´HÝrË-*^ö5áJŒuÌ˜1êü�ÿÑ×'§OŸ®”R—ís/½ô’Ô
7Ü üq5}út¨;î¸C}üñÇ—ÕÂ
7Ü uË-·¨’’5{ölår¹T[[›ö±‡£VRÖX÷ìÙ£222.ø¦úoÿí¿]ðaëë³Ï>«”Rê½÷Þë{ìw¿ûÝ%;ê¹�/\¸ð¼Ç?þøcµsçNõüóÏ«oûÛêþá ÆŽÛ×æ+_ùŠTIIÉyÏíéé¹ìk
+ Â•ëw¿û]¥”R¯¼òJŸÑ^îyJ)åñx xàµdÉµhÑ¢¾¶o¿ýöeµàp8 æÏŸ¯šššÔüÇœ×ÏuŽ=µ’²5ÖiÓ¦ñÁÙ½{7¯½ö»víâ_ÿõ_yâ‰'¸ë®».xÎ_þò—Kïoÿöo¸ñÆû3MS+–¯}íkçýþøã�óÊ+¯\ÐîäÉ“}ÿþ¿ÿ÷ÿ\çµ×^+Å>aÈ¸õÖ[p8œ9s¦ßç9r€íÛ·_ôo·ÝvÛ%µð“Ÿü„åË—S]]Muu5÷Þ{/Û¶mãÚk¯Õ:öpÔJÊÎ
+ ødÐëõòØc��7úÇ?þ€Ñ£GŸ÷{GGÇ%�÷ïÿþï|øá‡}�¹Ýî¾QV€�?þø¢Ï5ã¼ß7mÚÀóÏ?Oww7•••<çK_ú---5ÿþ^S4}™Á¤Kõ¹ñãÇð/ÿò/œ½ŠE)Egg'ùùù—ÕÂC=ÄáÃ‡ùè£�ú4ú«_ýŠ7ß|SûØÃR+©|¹ó¥/}IÍ›7O-^¼Xeffö]nÿáPJ)uÇw(@Mž<Y=õÔS*--M»Æ:yòdõ—¿üE)¥Ô„	 n¾ùfõ­o}ë‚ë¥.�nºé&U\\¬œNç¯»víÚ¾ÇòòòúÞC0¼ìk
+ Â•”.W»TŸ[³f�”ÝnWêñÇWÙÙÙjÔ¨Qý–ÆŽ«òòòTII‰zà�úÚíÙ³GûØÃQ+)k¬ßùÎwÔ´iÓÔ_ÿõ_«Ï}îsêöÛoWÏ?ÿ¼êìììksìØ1µeËõãÿX­]»V544¨üü|•‘‘qÉYcÆŒQ·ß~{ß‡¦”Rÿöoÿ¦n¼ñFuíµ×^tVÀg;Ó¯ýkuã�7*›Í¦n¹åõÜsÏ]t´rãÆ�ê«_ýª2£o¤ó£�>ºìk
+ ÂPëåúÜºuëÔÔ©SÕ˜1c”ajêÔ©jùòåýëœ9sÔ—¿üe5zôh5zôhåõz•ßï?¯MÇŽZ‘ýXAFJ�UAŒUAcAcAcAcAÄXAÄXAÄXA1VA1VA1VAAŒUAŒUAŒUAcAcAcAcAÄXAÄXAÄXA1VA1VA1VAAŒUAŒUAŒUAŒUAcAcAcAÄXAÄXAÄXA1VA1VA1VAAŒUAŒUAŒUAŒUAcAcAcAÄXAÄXAÄXA1VA1VA1VAAŒUAŒUAŒUAŒUAcAcAcAÄXAÄXAÄXA1VA1VA1VAaøë5×\Ã5×\C}}}JS1ÖA7©Ïþüä'?IÙ“³dÉ–,YÂ¤I“†ôuÂá0‹/æË_þ2cÆŒáóŸÿ<3gÎd÷îÝÒC…a‘ÔŒ´$Å–èœ9s&'Nìûýæ›oNÙ“óÃþpÈ_ã£�>âŽ;îà£�>bâÄ‰sðàAùÅ/~ÁæÍ›ùæ7¿yÉç÷ôô`³ÙDÝÂ ðàƒòúë¯°téR***ä¤• ¨ºººþ¶eË¨qãÆ©p8¬º»»Õí·ß®õÔSOõµÛ´i“š6mš²Ûíêºë®S·Þz«êêêºèñ?û{]]]ßcŸðë_ÿZÝyç�*--M]{íµÊår©œœõûßÿþ‚c<òÈ#
+ P�=öXßówìØ¡õÅ/~Q�9sF)¥ÔO~òuÓM7©1cÆ¨Ïþóêá‡VÇŽ»äy)**R€š2eŠ:}útßãË—/W€úÂ¾ þßÿûçÅóôÓO«[n¹EÙl6õÆo(AÂá°²Ùl}ýì‹_ü¢êîî¾"mÇÓf8‘pc�9s¦Z²dIßÏüÇ(¥”Z´h‘Ô¬Y³Ô³Ï>«•••Õ÷Á®[·®ï÷ß¿Z´h‘ºå–[T0°±ÞpÃ
+ P·Ür‹*))Q³gÏV.—Kµµµ]pŒÖÖV(§ÓÙgtóæÍS€úîw¿«”Rê¥—^R€ºá†Ôã�?®¦OŸ®uÇw¨�?þø¢çÅív+@½øâ‹ç=~øðá¾×omm=/žk®¹F=ôÐCê‘GQ{öìG…ïÿû
+ P“&MRÿå¿ü¨­[·ž×Æ²,U\\¬þê¯þJM˜0AÕÔÔ\ 5�6b¬ƒl¬ŸýùÄc±˜ºùæ›ûŒÃáp¨ÎÎÎ¾çå+_Q€*))9ï¸===6V‡Ã¡5þ|ÕÔÔÔgò—:æM7ÝÔ×ÙNž<©>÷¹Ï)@}øá‡J)¥<�Ô< –,YÒ÷e¨·ß~û¢çå“áç?ÿùy�www÷=÷ÿüŸÿs^<.¯×«õÜsÏ©ùóç÷%:çòôÓO+@ÙívµpáB5yòät¢ÓFŒ5¥€s/õ?i÷YýÄ€6oÞ¬uüÏþþóŸÿücýùÏ®&L˜pžÑß{ï½*‹]ô/¾ø¢Ôœ9sÔÆ� î¾ûîb¼ØÏ–-[.·ËåºhÆzäÈ‘¾ç¶´´œÏ¦M›Ä„A¥­­­¯utt¨×_]Êf³©p8Ü×nüøñ}æ«”Rï½÷Þ:Ñi3ÜI™éVøÃøçþg®»î:~úÓŸòöÛo÷ýýK_ú---ç=ï/ùËE�7zôhþøÇ?ÐÑÑqA›‡zˆÃ‡óÑGõ�VþêW¿âÍ7ß¼è1,XÀu×]ÇöíÛY·n.ìûûøñãø—ùÎ~i¡”¢³³“üüü‹y	j IDATóþûïàg?û±X¬ïq¿ßÀõ×_Ï´iÓÎ{Ža28 *6l`Ê”)x½^þáþ�¿þë¿¦§§‡�7öµ3M€o¼ñ¼ÿŸ‹N¼âkKK‹úøã�ÕÌ™3 þéŸþI½üòË
+ P�Gýñ�TJ)µvíÚ¾cäåå©Å‹«ÌÌÌKÖXï¸ã¨É“'«§žzJ¥¥¥]�±Ž;Vååå©’’õÀôýý“ºåÅ¾eÿûÿï}�;�Î¾ìV)¥Ö¬YÓw	TPP üq•��­F�uÉóräÈ‘¾:ë�7Þ¨-Z¤î»ï>¨Q£F�—¡�´o}!1üùÏî«©^ìÇëõ^�±>ûì³ýf¬—k#¥€!®±®[·®Ï�&Mš¤þüç?+¥”zè¡‡ ¾ùÍoöcãÆ�ê«_ýª2£oVÀG}tQÓÙ»w¯ºé¦›”ÍfSS¦LQßùÎw.0Ö9sæ¨/ùËjôèÑjôèÑÊëõ*¿ßY#ÛµkWßãO>ùäïsÝºujêÔ©jÌ˜1Ê05uêTµ|ùòËž›�>úH=öØcjÂ„	Êf³)§Ó©¾þõ¯«7ß|3îrŠ ÄË«¯¾Ú7¶ñ�ÿø�êÁT>ø úû¿ÿûPÏ­Ÿ«o¼ñ²5ÖKµcaXs÷Ýw+@ýã?þã›2eÊy¦ŸŒøîsŸSŸÿüçÕ~ðƒKÎ
+ ¸\›áÎ5g3!Aa��MXAÄXAÄXAÄXA1VA1VA„áÊU°‘g; ¸¿�à�¡ƒ&V�€a³€Þ[=†í“åžØœxÆ{ðz}x'çaëœC_ˆØÉ6‚û[	ƒ„ŽšÐóIL½ñ¶³1qN|8ñLôà�äÃ;9ûXßÄ'k"Ø$|§�à¾¡°‰eYÐ†e�u¶/Fïrh`�æÄ“îÁ{›ï}yØ§xÁéüø†ˆíi#øÖY}„ÍÞ˜zè�Ó²zUa½?çÆ7Ñƒ×çÃ›“‹ýVßàÇ7D¤à<Vº›h}«–Ö¶V¢§¢60ÒÀ;	2&ƒ'­q¨n…Žý‚uê¬ù^rgä‘=½F»_Óî¦ÞŽ8Œ¯:žŸGš‡ì¬�Æ'kLv6ÑZWKë[­D£Ñ¾¯k/�xâ8\è‚gÓ+ÍÀ˜è%wVÙ�–Àwüñ½ÑDëæZš~Û„uê¬>+>‡ÇDÙ÷å‘½hñ�,cíÀ4ý4ÔÕb�b��YÓÁnüW‹Å í-hÝ}ÖÈ>æÌ^‰Ç“{ÉøB¡5lÙÚÐÛ‘m�=#ñµ=œùsËp»³ÅXF"ÁÌu~6ŸÕ�
dCÐýˆm@+`�sà˜âcÎ³+ñää^2¾Ð‹kØ²­�h8±ñápàœæ#ÿÙ2Ü3RGI4Ö±X
[ý„vâvAþÜädú‘Ôn†P§ß”<òçV`·½ñÕ­!ð~O:ÌK^|
u`†]x&æ‘?»»]2ÙaÍ±±MU4üØO¨³7�Ÿ¤BQ¨B.¾ûóÈ_U�Ý0zã{q
�Î0  ‰ñ5¦Ë…ç¾<òW•aOr&›c51Í•ÔlêÝ¦lÎlðLJ�þÜ±ÏÅªïy¨ÝÜFÁ<ƒO[dLM�øB`ËV€,
+ TâvgŠ	
'Ž˜˜Ï�ÕGÌ‰óÒyè¯-¡ÁQÀÑÓkö)_Øb¦eQø£JÜ·%G	4Ö¡Ð2j67à†æ2zà¤Ó±¯˜
›¢x'zÉŸ›OC]Áƒ
-h'cj8¥ô‹Aí&0�û(œW‰Ç#e‚«š!BÏ�ÕÇÙìÏ.gåŠÊµ€9ÍGá÷+ñä$V	0Ö‘cË¨úÙZÜ.(œ‡ÞÀNÂp`YŠ�…w²—Ây…çÇ×
U›ª¬¡dQî	Vjõ n¨Ù¡£Y”<ºçõR"¸ª8#òÝeT­[‹(”32èÔ¡»²(©Ý‚3A%‚!6Öj6.$zÊ¢è‘TËP�î"*^ô%O–`¿L€±Xÿ�×
,ûv Å¾z3Ø
?3p¤Qø°_Ôt5P[CÍãgõ!ê�g°ÒŠ(\›}Ín„]jo»O•¾€:tè¼»”¤ÈOºÚûv¥ZüäbuèÐ¡¸ÞÙ¡C‡Ôâ'óÕÞ·])ø¾zÏwééjoû.Ùh4U9Ü¥öNó©RP‡@)ùIØÏ!P¥ééjï/w]mû±î fã70ÆZÌ™�‚_]Ý”•{q»Üø0Uª0ÃkX¹<˜rÙ+ÀŽmÑH	…WHº’JlÛAÍ7¿�aYÌ‘³‘<}ÑE%þ`hô1¨Æ‰”à_·–ÂyàÔ¡LàÃ4=÷„Ø	ýäÆ{v›ãì¿-z'_ô®vrŽ³ðzÁ7%„ózóÈRÊÊC,{ržIW`è@ˆŠ³ry÷/‘c^ïƒ9nñÉê*0úV`õ^”€a‹âv�g’…w²‰Û¤w¬uð… fs%‹vàtÊŠ®d×Â#KÎêƒAéç€[}˜<ÓBØ	õÄÎ®`²cgõaYÐéýÿ)§eá��/ÂÙ‚ãÑ¡yïã0ÙKd’—€Ã Ø‘ëì*+'gWˆY±Þc§¢¸{À³ð7qïz|! æ®,Jvà¼Þ™ŠÆ¡=p'm»ƒ”,b28È¥cŸ—æfƒH´w¨ÛåÆëõâ™èÁíî¿9!ð~€à¾v¶l}†æ7-J_ð‘w1™·]IU+4Ò¾§–Æ�M<ó\”œ»³˜3»ïT/¾)>­Ê4MBCƒAÌ°‰Õcâ&'Ç$cj€O–ê^© ýë\dÍØB¦Of$…cÚsï¤íý %ƒq<Ã€{séðzi¶DŒ+ÔÇžv¶”>ÃœSÖàÄ÷üéélïfÎÜ+ÔGØÄm†É9n’ñN o©îÇ7ÞEÖÆ-dâÌ�A0Ö­»³‰DÃÌœu¥ádÑ±/�†m@x§zÉ½;÷
+ ³-“Û2	³ì;;	MoB[`ó’w	ÙYºÝ©‰Ö¶2w6àóAîÝ½‹*~àÀ;©‚™³Š¯èD"šÞl"¸/¶ ù³‚dL
BiÀ�ÓQIöwN(¡­ÙÙDÂaf^é±îÊ¢ã¾<zÛ éãˆÉŽìL‚GÃ,ÂÓP1Î�wu3‹I{’ß$ãÝAÐ‡Ë�óG•dÏ}\¡±¶³cÛ=ØÓ¢äæ\IVµ˜ªMB�Q|>s˜3HuËª6|ÃfQøðÅ³¹¿€æÝÞ‰ù,¨Änw^��Æb~j7­"x0JÎ˜ùõ‹gå5
¬ž­´ËÇ-Û·4áIR¼ ùŠÎKS³ƒØ©2fÎ*ÃK�vväÞƒ=%w Ç°�,¦j¢‡Ð©AÖÇ¾ª²¿ŠqÊJÈ4¯š4kù
+ ŠŸd}47áÙ¤ø·ÍÐsúp8ˆ½PÆÌo
‚>>îÕ¢ªkP{Û:‚m¨Ó§«õ/—«ÒU¥ªëp× �Ëµ¨òÕ¨í�ú£é+ž1Tùê<uúO'”R§Õé?•ªòÕ†ZñêÐ‡zÇÙÞˆ*_½xðçYîR¥«V¨õ/ç¨Ó§�ÏØÛŽª®)•‘ù¡æ7-ªÚ@íè¶a¨ÓO.VëW‘>~Ó¢Êm¨í	•ßn Ê
‘>ž^¡Öß�£NÆ€ãÛk ªŸ¹r}ÐX÷ªêÔ5Õ<UÿZ¥*_]®ººº† W ÊW£ö¾l]‡QK—û –.ïý=Þc´´¢ÊW/š‰l]]ª|õRUÿšoÀæúAªþµr1¿¡¢}¯ª6PÔ€ÈSõþ!ÔÇ{¨rÛ˜þÜ|µ}zÖ€Í«Å@•{õñôRU«oÀñ}` êW_™>®}þùçŸ�·¦ºcÛ�x¾bqsÜkè]tÈËëü]N>ô cÇŽä“ª
7áùJ_ûZüñøð9ÞnOcÉ’%„:-&}å$îÿz*®£L˜‘?Ù½Û6èFcÇŽ%ûÎ¿‡Q3xy]”q_8Âõ×ÇWÄ¿þz°Îì¡ý�ë¹ñoe¯�Á®©îÈ¾Ï)‹›ã}îxßû!/;üÝÌ!ÒÇ“ªÌ›ðX=|mñµ—>GÙ™&Ì/ÄÿçS¸ÿt÷©8õÑ‘ýAv�±‘™5ú¸çïák3xùD”qá#\:N}ô€õÎÚ¿p=7ú¨�ø|ø„jù�KíjH¦”¯ÖWUªú×ê‡0U8¡¶¿îRÕ5ˆïL�*_]ªÖW­?ïˆë«*UùjŸRgâ?fu�Km½zH“£ú×Ö«õUË^w5¹TËo¶K†9Xüç	Õâr©]É”ÊWëýC¬�'Ôöñ.U=�øæ¨ò.¢¥*Ÿ2°ì°ÚåRÛk†XUëÕúf¯»\.ÕòúÀô—±îm÷ªí¯Ç/à'zëDñ®rŠ�Óª¥Õ«*_Èåyï*¬/ß¡©ÅOæ¨,PùRºjiÚU‡R¥«òÔ‰ñÇ·ýõtµ·}¯˜â•rF©½“½ñ×,m¨« �Ó§UËd¯ª@|]«5ôqwŽê²Åo^•ééª¥)úx O�@|Û'¦«½oï:c=qbñLË¡>x¯ZU¾T©Ô™¡í×]‡ÔŠgâ�¯¥u½ZñôŠþã;£ÔŠ§TKküG+žñ
ÁàÜ…ñU¾´T}ðž1óÏQ'Nœs¼’dpÑâøMËáPÔ$Hó
+ ÔŠxãçP-/Ç¡�ª%-þ�£·&Hß^ª>@|•wÇ¯McÝ®JWçå°Kµ´V«ú†ú¡ïÕgªÕâ'ã�/]Õ7TªJe\/Ué/Uõ
Ž8Ë¨ÅOæ
¹x”Rª¾¡Rµ´Æ_éª"qÇ�òúvU¯i�w©–šé£ªZ-Ž7¾ôtUï€>^(Uõãq›×â¯'H/Uª–ÄWº h°�µKU¿jÄ¹™JºÚõËzµë—‰Ø¤K•¯&îøª_x=«º¦RU¿Ÿy:„*_½"!:ï=÷®8ã3Tõ«•b’ñr¸KUF|›©LLW»j¤�Ã]ªÜFÜñU¿túðWªê8Íë��*:Aú¨©W»\®øâK3Tõ}}ô;+ =ð5zº�rûú#ëMoüÃpów97äƒ°í{¾†e…ù»»uŸ‘NÍÆe8œé<8ûÁ½æÍSoçÈá	ìù]7ß¢7âètBè÷Çé9“…û¿íž�ž¯d`vy9ða#ž¯èÆ×Ã�C!,+Kk9¤p¶ÿÝû5zåö8FÖ›VýcB‚ôq÷×°ºÂh¿Rz:5K–áð\�>n»�#ã&°§µ‰›5Gä�=:~œž; �©˜_ñr`W#ÝøÎôp +„•¥©�~¾{TéñÖ,«”©*¥Î¬WK—Ç_}Ãà�¼Ö¿V©êâ«i.]ž˜KžÞÌu}Ü5áÒò%Õ¥¦:¾€Ã¡Zj¨ÿzµ4Îšjý ÎL¨÷Wªú8kšKïM >^^wM¸t®ž>.c¬§ã.|ð^‚jF½Ãªò%#®‘ú½o¯Wë_^?¨Q¬yE\ºªò¥ÄMÎ¯o(U¼OIÀ¡ª_]/¦Ù:­ªÓâ(ØPÔ$P'N¨JÃP]qÄ·÷å!ÐÇòq-Dèrªruõ±ª4®…‡Æ9TµÆ9uÉÍŽ-#zÊÒÞþ/)§¹9ÊœÙ‰ÙeÒ<ò`áž ÙÞ,§q§IñcÅƒGñce4îÌÃ4õÚ÷ÞÚ¥óˆ™�ó4göJš›ó‰D4/“<Q¢§jˆ‹ \¦¿÷¬>tÛ¯*§ùxõ±ä	°,t/ªÍÕå4†‡@ß/£ñ�<t{»;jÁÖêã®¤yn>º½Ýs<Jt³†>.î·‡Té*ÔéÓú“ÿKW•&,…WêPo‰B{@�Zº|éÐÅwF©¥Ë½ñ�Â¿°4qÙÕ¥JWÅßª¥’•^Š©RP§ã˜üŸP}œ�/žÉÿC®�ÉÞ¸æÎ–>™`}Äßò¥ñg¬¡Ð2<ãuïQå¢jCî…7áB:‚OàIGóõ\øä£dQÉÐÅ7JÕãÿ‘¡ÝÞ“ÞJG°#1'l4Î«§jCñ�o%
+ Ijz1}<·š»ùŽwQu_‚õñ­'ô7ÒïÂkôñZ=~‡fÿëÏžëãµzªâŒïrú¸ˆ±šÔlnè½›ª–É•áëÂãIÔÝÏC4Ô5^|À‹Å·o%Žqî!�ÏãÉÀ1®„Ž}zín£¡nCÂÌÀãÉÀ1v)š[WÎk£fs•¸èg9rVº&÷tŽë¨�!~ÑG|+qŒO€>¦fàx´]«,|«�†W¨�©8]ªßoÛ¨YW¥o¬¦¹÷8Ýl0�†:“9sw÷žPhYo¶ªE>µu&…‰ÙÜ¹° ‚Ú:¯þ‡™žØ¬pÎÜ2ê4OÞhp�kÅ4M„sôñÜJíº%äÑp<Áú8›Mk17ŸÚpõñý
+ j'Ç¡�@‚õñý2&jê£Ü{.£�ÏŽ´—¯Ö­­ªþµJõAÇ	,n�ˆcXï„÷K­o²êï‡-ªúUÝZ¦¡JW­Hh|tìRõ¯éÅwú´‘°E
W'N¨r›fmÕ0T½?ÁúøÏªÔ¦¿ßkõKIÐÇoZTu1–>�`}ür—ª×Œï´a¨ògVô_c�ÅzS[�Új,VD(#Ã›‘°o”ØI?†¡—MÇbE˜áØ Ü40®KŠIÙ˜á,b1�¬ÐÂ0ÄNÆ_†7—PH/>»Ý‚Äb1ˆý¬
+ zôj«±G‹�J°>^ñchî [T„i%A3²1§g¡Õ£,c_‚õq_.!Íøì–�Kèã¼å5éÚ;å¯y¨6©¾Ìœ¸*—æ¼ÕÞ¹¢'þ39‹œøÏCÚÖtN¿`+¶¡¦«ëµþeÍy­zUõoívµP�ž®7oÕ†Z¿:	úp¹ôæ­†ª\•D}|xHUjf…]éIÐÇ{¨õºóZ§\\çd¬„vâ™¤aÕÝ‹1�[	^úØŽy4¬5o5+ f1è·´ÕÅy½‡˜¥—º'tbmMh|nwæñ,èÖÉÀƒ„¶2â	vêìÔ«_>²³'ÁúØÓŽkÕc�³%Q“<Ä¦ée…îÎNÌ·¬�©˜Ó²ô2ð÷ƒ„.ß¨O­ü¸]z/\µÉCñ‚â„¾YóHîñzmk7{{§·$‘ÂyÔnÖü Ç‡6!úŠTPµI3>WçˆÄ2×ùµ­ª&&A?«ÒŽ¯6=ôñƒ
+ ju�îHôñ£
+ tçÄ¸\¨�>cm¨«%®Îa²uFqOHìF
[kÉŸ­Ó2ó¨•ðø.ÌD³1�ê�0æÏn§akCÂãuê}“æÏí ¡®�‘LÃæZòuÞ•EèTôQ§ß½9˜V
+ è#+3]Sû“ �¬lBã5õqðB}œ5Vóx�Û“wìËÃçó%øc‰êÅ×¾'ßm¾”£ï¶9´ïÑ¸4r†‰D?ßçË×šwëtvbÁ‹Ì³úÐhÚq_ôq DD3¾ö)¤�¹sh×)t†‰L‚>fçkÍkuìÄì]ÄX»›zGÛûÅ a½÷5O ±“�Úñ5î´˜yÿÌ”è83ï/¥q§^[Ã%tô`Î4lÓ�O§&;,ÙÙ„^÷3hèI‚>v6jÇ×Ø“Búx¡”F›fÿ'A/TÐ ßÑóõ1
+  õ­Z²µjµ¹ÐCÂ–æ}BÓokÈÍÑŒ#…iô.wrs"4ý¶)±á�¶C�^|ÙY­o�ÌA¬ÖºZ´î%zo.Ø’ �ºrµãK!}Øí YÈ=–}8õãË>y¾>z�µ­•¬é:e/Þ©Þ„ŸÿÀž™·ê”|)s™ói9 O«�yk�Àž@ÂãóNÍÕ*dMï µm„ë[­èäÞ$éãÝ:7inŸš‚ú¸?O«�y0Iú˜‘«UÈzÿ|}Œ‚–ÕZÐÜl�{wn‚ßZ«ÇÒÊšv[äÞ•›R'÷®bšvëd�a¬žhâã»»˜æf�ä¢ËŠ2âˆD°¢Q­EÍ¶$èãXë”Þ.øM=)¨�GŠÑÊC�†±N%A�£!ìG;±¢Ñs�UsWD¢Ng¢ç¾0lzñE£ö±ö”ê8ö±™D£z—_†-ñSšœÎl"QÝËÃ8åj¿¦>Æ9ˆIÐÇ»½â×8Q#õáË$jhê#œ}deÑŒ�ãŸÆ7*v2€‘¦•´'åÄ›f«æüÚì”Õ¦aÓ›¶áv‘¤ù¢zñiÑ„ $›X@Ó¸nM’>ö´êÍ_�–ÂúÐœÖäîI’>\šú8õ©>F÷·ãÕXmešÜ®ÄÏ}h­3�¸ð¤{R²ã¸Ç{0�ôßÎ3É"”„i%n—GëÞIÔÍà†	ÁwÚÑ©šš’¤�=­Õ`æ„ÖGºGëZÈK’>4ãóö|ª�QÁ2&kt°ý^oâóÁA¼ûo×þ¾�oª/%;Žoj6íïk|0#$Þ¸¼^/Áýý·Ë˜œœø’j¬ûèl£LK’>µŒ¿=-…õ‘•­5€å=•$}LõjL3"ŸÆ7*tÐÔÚß4tÀŽgbâ¿ñÌpD«Ðy€¤Ä§ƒgb�t2G3	u$ÏÄ\BñyÒ““1$“PØÔÊC$IÑˆV) ÓJa}ø²èÔÉ£IÒÇŒ\tz½'ú©>FéŽ¸‡ŽÆ’s¿yÍø"Q’0°¦‡Óé!¢3 9Úì�'œèK·3¬_´w†ÆÂ²ôÞo¨'IúÐœ±¥°>&{ônæw<Iú˜ìÕ¶µ>ÕÇ¨”ïØÚBv¦ð»Ð\²¦3Ù±´:ìÜ—UWÈ¶$éCÓø1RXã4õM’>Òìh�åSŸêc”aÓû`[²>½ø¬žTV§¡_²²A‡æ”¶(F*­ÜIÄ'§i\FZ’ô¡™xX¶T>É†^Ï·’¤‡CofHôS}ŒÒóÈÔ`g„º_"É¹ÔÖ5…¸@@WÌÉúÂIñŒZÏZ4õÑ“$}è~iž:o�@Šgº› ¤x&5\Þ‡�j×BºíŒáñ>®}ŒÒKÉIÃu/ñS{P%¦ù>Œ$½�ˆf;Çt.Ý{Í'I¶a +¦ç.¶$éã”¦>Ò1ÖH²zvJÿàÆ–¬ocÝK|1ÖKÄIÒ‡-µ�_ïÜYƒûYº<4õá8ÇXõ3Âd]Bë®³OåkÝ¹wŽ$]êèfÔö‘7ÝÊ6¸Þ0ø¾¯©+…õq\SŽ$éã”fF�f?wº•n É¸HõøtkÖXÝ)Ÿd¬—_²¦iÆMa}
ë©Ü•$}„5ã;·`ØœzwëŸ¤
l†V|ND"‘”ì7‘H§Ž'u;“2z«½ÑM·{äM·ÒöXIÒ‡¦±:{RXÁ Þ¼G’ô¡»Ñ�ëS}ŒòLôêÔè8ÉÜ DcUPú¤Ô]n:ØJºÎF2aGJotêt¥ì²È¡Â3Ñ£·œ±;‰úÐh—Ka}¼ÕªuŸ
ÓíHé�nB×ª�QÞI>:46àðN6	“°Â¤L‚ûo—9%B`_ %;N`_€Ì)ý·tà�”„�<‚A¼ñtì')ñ%¯Ï§µƒ¼÷x’ôáËÔÚ $3šâúÐé§Ž$éc¿ÞF7Æ§úå�œKPgƒw0I„dimâžÀ<šš1›GC¸'h|ã%m£›:ËÜƒÀ;y„kN®–q¹÷'IYYZµûýÖÇÁ�Ö¥vÒ6ºéÔ‹/È§úeëÃ:¥sø(ÉØAÞíÎÕÛ „(VO*vœí‘t3l$a#�´—
Ÿr¦ÜôC�ýVŸÞÙ9…$«ûî\=U�b…SPÁíýL[ô±¯C{Ê‡•ö©>Fõ.gÔíu:ÂI(€;±zô
+ ôG8åv¸��l>wzÛep%eJ[$Ò 7°F:#rY³Ó‰æˆÓL‚>®wbi`9Ž§ >ÞhÖsŸñ.¬$t¿È¶½�µôôóf�Œ01�ó�“cÒôfSÂßœaÓKÿsg˜‰¿En?4ý¶ŠÜ
»³“2âÞôf9·�ÅrµçL7Œ‰­}½rŽ'IšwÈ5SP›ªônÝ�•$}lm@CÄfœ¯�QÙYy´½Õÿ“3¦&¡î»-GïÒ·ìiK¥ïãÞ[wßÖËöw½I¸5q¬w‡ü©ý·l{ËMvVêÞ7i(É¾/�^•ñN€`nÑìËÉÑ»…ô;m)¤�XLÿÖÝ“ �“1‚ïêÝA¢müùúè5Öé%´j�olA­y¥ƒIî]%45kÆG*Ý:¤Aÿ›±™Äßš¸»V{^`kdO¡Æº¨„V­îgA0	úx´DïÒ–¥×ÙD°µA{w®¦ž$ècs­v|­œ¯�ÞÝ­F»±,½:Rþ¬ [¶oIèû³�ÍÐŽ/ïþ;vîH‰~³cç*òî×*Ð=EÂ†¶l/#–NKooý~4#“	n¬qšúèL‚>¦f`iÖ�óB)¤�òUäé4œ˜NÔH‚>^,#_§ádoïÒçsôÑ·m {œ�º{ÆÔ �@âë4N‡^|½å€Æè6!{‚Ze€HdîqîÄÇèÔ*D"yIˆ/µpßêÓÚ†(ãÝ �æ$ècš^|™ï¼‘ú…¼Ô*Df%A¡�ý�Ze€Èýê£ÏXóç–ÑP§÷šžô æ‘ÄNÝÈŸ½”†­š"Ÿøø>‹y¯8õž<IDATd%îñšƒ­ògç'<>Oºf|uòçæ3’É¶L»°ãÙ—}|k©v|î@
+ è£t¥öÎ
iIÐÇs+Ñ�1Ûà¸PŸf¬îlÌ°Kë@Åš©ÚäOlÆ0a&æQ½Ë�‚ymÔl®Jb·‰P³¹–‚yz—ÙæQpOHä7²IÕ¦ZŠè´õa†IÎ�òR)c�‘�éÒÔÇo›©Z—`}Ìš‰©Y®(x«�šW’¨�cj6ÕR y™mÚ¬ó¬>tÚNóar¡>Î»ƒ€gbžÖ*'Fƒ{\kÂ7�p�ÏÅ<Ò;»ÝÂn49–œM'"ÇVb7À®Q2�äãŸXÓ2Í2ÜãÐ»;ï�¼·?À%3Ñûò´V9Ñî¶$è#Go±€Ý²°ïN¢>JWbïÑ»a‘97	úx®L;›Ý	}¨s8}ºK•¯F)ÕÿÏéÓ†*_½B%’ÓêRåkR7¾^zÏáéÓ:qª|M©:ý§Ó	ŒïP|ñ­.U§OŸV‚R§»ºT¹
¥èÿç´a¨ò§¬�Ã©ŸRJ©³1žÖˆQ†*!Áú8t(¾øž¹¸>F�Ÿé¹�,­Åv»…ÇÓHG°#aß$ö±n,Ë§5�Ån·p»	HìŽ>¡…¸]zÙ*ÝXVbG;;‚…x<zñÅbE€�Ý>²–±^²O¹Ý0-Kk±€Ý²ðìL°>&¸±nÕ›ëi·,Üo$A�âÖÌV™W€eK°>Š
+ ñhÆ{¤Ò.¡�ò­®½jýËzY¡R¨Ò
+ ú…wèP‹ª~U?¾Ï$2¾íjÅ3ú±U¿Z®:”ÐøJ_Ð�oýËåª««KRÕsõñö^µ½¬P�*�—`}4µ¨ê8â[‘Èø·«qÄV½:Áúx}»*Õ�Ï†Z¿úÒú¸à.­nw&æqŸö$çü¹�l©K\!ÜãÉ&xP‡¥‚¹MÔÔÖ$ ²5µó)˜«ÁƒQ<žDÕ/#l©›O¾n|ÝE˜Ç­?hu�>nËÄœ¦¿(ÿ�F¶lH >r²	N‰CÍMÔlH€>NÆ¨)˜¯7`u6[
žJ >"¶<<í¹Š0{.­�‹Þþºp^%5›õŽŸá�=é'JÜ%EÁ¼Jj6jÆ75Lôøš!�/úÑãQ­y¡5}Ì+HØ9…æ=%CSs5›½Î+'½˜>~P‰®e�ýq‚õO|á0Ñ'@ß �jÍÅ5Ó¬�oÎ�/¾É—×Ç¨Ke…¡£zµV€â¢5›ŸHØR¾o.¡Ný¬ºä[üë†0¾î*üë)ù–nûÅ„:-2¼‰9aÝ~j67R\¤™{Ç:j%0›¾ºðÌÈ&4]¯Ö
+ Pün€šo%P÷åŠ#«.y7€ñÆ·¶
+ ÿöFJtÛ?²˜Ð©êã~j~Õ¨7½
+ ˆ-ZL¨§}\ªÜpâ?»T¥ßÐ®Ç�8�ª|iiâj]‡?P•/éÇ×Õ…*}¡h"iQ¥/ô_/‡ª|©TuNTí²EU¾ÔûùèÅçR•þruâ?OHAõ2œ8Ü¥*Óízá	ªòÛ	ÔGÇªÒÐ�¯Ë†*}dôñ›U
+ ªK·v9Î¡*W%P­-ªÔ	Ýø\.U¹¦}Œº”á:¯wãH+B÷
+ Áé„œ?[¶&fb´{B�¯5¯µ·vy÷×RõÓ²Á¼€ ê§÷�w?è–"Í#+g‚&<w°eë=ääô~>z%ƒ¥8ÒÜ8¯w"\¦¿OpãXP„î´³r^ñ³åG	Ò‡7fçkoMïî�¼­µTý¯AÔG(DUÞ=ä¡ÿasù
+ HK�>‚lÉ½‡@··‡ž^Šcœ†>ú3ôÒÒµ³B¥P-­µë—Õ‰ù¶9£ÔÒå®¸â«op¨ú×ÖÊ|Õú×ª¾�8^?G-]¾T©3‰™O»ë—ÕÒ_|¥/”J:¥ééÚY¡Õ2Î¡vÕ$Pã]qÅW?Î¡êýƒ �Ã]½ÇŠãµÕÝ	ÔÇá.µkœCµÄŸ®>ú5Ö½í»T}ƒ—yíú¥Kµüf{BúÎÞ··Ç5ýªwš“Km½úŠLkûëŽ8_×PÕ¯Vª½oïMˆ©¶üÆ¥vý2žøjûëëÕÞö½â–ñô¿_îRõq\r+P»\.ÕÒ� }¼¾]UÄ_µË¥¶¿zúèêRÛ]Ž¸¦}©4CU¿” }îR-ã]jW<ñ9j{•¾>Fõ—úfúr±N–Ï aî}a,k>Moý4“ÌÛfb†âŠ¯ðá0ÑÈl©ÈeYˆ-uD#Q
+ Žçª¨3#ó¶Ì!>#4½‘�e…É½/¾ø¢ƒL_&Býï¾\¬E%Ä3¦žc=6Ÿ¦Ÿ&@³fbÎ.ˆ+¾Âp˜èÒ'V¶8bËÍDÃQâ™Sz¡ÓJ€>‚4ef`
Ïî®¡ÕDmqèCû’gU–RgâË[Z
Uß�€KË3J-~Òw|õ
†ªôÇ3 Ð¢*ýFœ—ÿ(u¦H-~rq.qZT}ƒçå?J�YªJWI	àŠJweÅ•*P-iÿ¿½ó
mãÌóøgÁ…xa	H�
8�	é]ˆÌbs/¶Ê¶öåEm¼Pçú"vÃÑµsGpÂS|r·„•Ý³²ÜFr qˆeï±»lj¹4ØZ6±eš 1i°Ì%xÄÖDCcøÝÉiÚMZëÏ8j«/RÈxü�gæûõóüžç÷{Ü&}ìÓKæ7Ö¨HèD	úHÎH¨Q)mø"om“>’32¦(¥
ÿAäxéúØ²±®­­Iè\iñVdá¯Hè\›í�¶r?#§]%ó›I"'ýßÍïË8Ié¦%>8=`ÿ,ç—!	�+´w©üBçB²¶V_PÑ*�ÿ[“P‰ñVY	ýrô‘ÉÈ€ËUºùƒü|ú�È@ñü’~Ç~ŸœÜ}¼’P±½Kåz¿t}PÊÉsó3’¸®–l^kkH`P—LfÁÞþZò†„Î•Îoå>ÒsÜ#™ÏžÇï±d>óKÏñÂy¥][—Ð¹ Ì$gì”´d2~	–²¤jóðHâz´W­V<sjF.µdóZ	ìÑ%óW›õñ§ÚQ:¿�ž&Ïóùýí±d~á—žR–Tm{t	
Ù¬�µ5Éü³_¥,©Ú<š<’øŸòôAÉçÏQ¹1Uºy‰ #EÆ.Û[Q'q=*Ñ˜R:¿/‘à�"#‘žg¯&#*…Š__–z¿.‰ÆB’¸nç$EBÆ.«2¡Œçá’SQ™ùóLÝ«i^—£rC-Ý¼dDUdì„ÍúˆD%Ú¨”Å/Ø¨ÈÈ»Ïèc2!#ª"Á2®%.—DÏÙ¬�ë	SÕ’j;<ËïF¬|}Pžy…dnž²Ìua	œñÈÂâ
ÛÚs$�Ädyüæ>EzŽ{%+ôRç>-ç:Š$&Gd$2bÓfdaÑ'�3…ö,‡ßÜ|ÔfÓÿñ"q.$s
+ e™×H É#²Qg’(“ß\±÷:¶ß'=Å—|�FEaõ‘ÉÈÂAŸÊúùÍÅ*Óåþ`4(SÔÅ‰£ËHpÈ'++ö‚C=e˜¢*+÷dàdŸÒw¢EVî+¥›Ö§#
+ Ú)“••	Ú¯¼¶Wda1*ÑíZKù#Eôt@Ê4/k@‚ÿä“›ÂÁc=e›¿€$Êü9iTdîC›ô±²"+o÷H°�Ò'Ðžá·«\TôòÄ27¯–m®�##"�AŸ¬ÜŸ±Á\û$1¹~É|6 §$8|ZX÷ñßKp( §ý’ùl+c.ILÚñÒddå~‡íµµ"ÕÏç77•±ËcuçÛs
+ È\™a¡Ply$ðšOVlˆCßí“DüÊ^'Â6è#“‘•®	ÛëqüæbÕÑÇODD*Y61ÁÑxŠÖ–Õ
+ Š„@ä"d¸Ð_m£ýÃðJuŠÛF.£4¼Oç¯¾ÉO�'mLü¯ÎôÍz“NGWÇs‹ÖæóyF/Ž’¾7IË�,‡~ž‚W¬oœ¥ûC/Ö†ÂÑî£U`ž‡'£\Mœ%•ZFóPØ£ªì-¨=LMŸ%¿®rèð¡úÔmÂÄ…Ž�S´®®VöÙ].ô7Úh?3Î*éã¿†Q>xŸÎ
+ ù}'öèÄŽõb5VI_äáÒ(W?8Kji
¨èªM¦Îœ%ÿÓêè£bc˜šž ¿þ‡/W¾¼ý6ÄÇ�
ú«­´<ŠÓÙ\ÙË=#}÷ý¿v`š>¦>r“JþÏÿºŸfßÖ¯ŸœM2ùÇIÀÀëÍÑzp§ÓÍðoüè»½>”EL3ÎÔGqÒ·SÐm‡Ùr)ÂÃËÄxNU£ù@sÝí¶Sãäý‡îUA@¼ðxÐ´ÒúöQœ¾
+ õ1#ý§è°lOì÷1|Ø�þj…ú¸½ˆ9gêZœô_R°m@Å5°^ó2q¼§V=}TÅXæSóÌÞì§÷Øt½ª¿7Ùéi0s
+ àÂíÒÐu­©·[§°�‚úL	È=ý4&IÝI‘¾=ÏÕkËL�3ü¯û«’á1kžÉ?rú?ã´Ti?¢£ë^¼ûZqîÔŠ¼žÇ/¬’Í&1î¥H§Ó”§
+ --Õ0ÓÍÑ@áó¾¾zVÕKÄü­yfÿ½ŸÞ�¦«˜cÓ€©(àráöhè^Í×Š{��PUh,¾9Ös…Ï\óV’ÔÍé;ó\}°Œúm¸÷°¢pUQhß§£ÿÌ‹÷@+N�ªÕÂ'Àz�ëyX]%{+‰q+Ez)�±l XN ¥fº‰ã}„=¾–êê£jÆ
+ `š&áóýt¾9Š¦YU@Ù,¤— �óÑwŸïÜºÞ}àÜ	ÙÏálÐCÿñ	´Ý•>š<ÆÝaø·“œ:îó!¤î<ŸŸµJÃ×¿»] í}ÏÖ«cm*†1LìR–Þc½8�õjU/¦iþ·~:¯�¢­Û  ]<¶²ÿªÐ/[¯îTÑý©ð³
+ Á¹¯}wZ‘cõå¡b
{d�>ªj¬›ˆý!ŒêsèpºöÞî'p6¨âvåh÷p¹ƒ;"ÚÉ®æ8u‚ªõÐ«‡&Æ;É™
+ �¿ªïPkˆý&Œúû0‡î¤ë�ñ2p°…‰®Nr
öéÃcÝ
LŽÒÙ5…¦åjph‘‹:ýïŽ¡i[í½šÆ¿2üAœ£]ð�?«µ»ra}Ä.ZøûëCÿZ
¤æ™|o�Îé)´G¹zƒl‹<\'ûˆåì×‡mÆúUï5Bn=F÷[ÓÔÜ.ÊO`øðÓ{<ú­Û<çóÃ„{°è·öz©ù|~¯¡6ºë½ÔïSïõwr—bt<�c£Þ¶ ¡°�Ê�†ºc{ôa»±˜MÂÿ=ˆ¶+Iç›³5gJÙÏ!|^EkjãhWäëüžÄˆ\|ã^ŽÞc…Xjmýqè&vIÇx`Ñûvo½òÿ÷æC“ð{ƒh©$�ÏBÝ`«f¨tuÛ£cll¯>¶ÅX7a±KÜ;’ttÍâpX5õæS0zIAoê íH3ñ+ý¤ïåèîªâ,}U �Ïw3zQ#ûÈ¢óÍÎúÆ?†Aì|÷­$ŸÌâ°¬Ú$ª§™j˜_þ­nF=Ù�—£�m5Ö§=Äl–ØÅ0�¦ý�4ÚîZ	â{Y¼ígð½4£—ât¼éeà¤ÅÞWk‡Ÿq×ÏÕk
+  ÐÙÕùÂ}Íëøþ"›Í;†Tšöå4Z­Lr½æeñu?ñ
ÈæLÜŸ/ÓvÏ`ïRíð3^÷s_®>^Š±n"ŸÏ¿Ç¸—ÄíZ¦íÈ<Nçê6³Ð1¶0zÅ‰±láÝç¥íH‡£ÀïJœÔ�)4�AÇçÎåmæçÁ4Û‰_QÉ®‚Ö¤ÑöFÛ·Æƒëøaà©>>Iâ¾»LÛÒ<ÎåmÖÇ>³¥…QÕ‰a½@O¡œKÛ¬�&æávâªJ–ÚÑÇK5Öoþ•Ž_‰“}d (Í>ßþEŽj?(ù¼ŸÙOÜ$oZX
+ ªªÒþFû·Ã`r|²À¯Á ù€…o‡£Ú3ºòùÖ¿ÙÂhË½ÃMÛ‘¶zïôGÞ‹�_‰“]6P4aá»³ˆ£ÚÙR»\ä[üÌîr“Ü°°”õñ,¿¿$q¬VYù­~€ÕP›ú¨cýž@ò“$ÉÙ$¹õUÀDUsè:ìm2Ñ<¼²™Á”+PÈrRyš‘õÄ�±¬²¸¤�¾ë —PP…Ö­4ïo.o"­Èoêæ–eYTÕBßm±wO©ü\,.Aú.XëÎ§üš}Íåó«ã‡�gõñh™¨ë9t`¯i¢å,°ŠL¹\!Û
+ ŠYXêWY;Ü;U…4r
+  TY9rYÔu}Ã*ð[·
+ œÖóÅL°"¿FµÈÑQøîrcìt±¨’
+ ¬FçS~µ®�Ú4Öç
‹¾È“^J“¾[HoûæÌ©µñU ]i(×@ÛUHƒÕ÷è8~ê°—ß½t!=õü6ymrU´&
}·ýüêø�‡
êú¨)ü?¬ézJ2XÖIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-1.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-1.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-1.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,27 ----
+ ‰PNG
+ 
+ 
IHDR^´SáÓgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ &OŠçIDATxœìÝ	PWþð‡A<PŠ'* Ä#jEý‹ñ »fÅ0«•”gÄ5ºV™�Te£åVDÝ�ë]“ŠÁdÕh*‘�±P“¸Þ¢ €â•DDàÿ{ý`2bsÉÌt÷Ì÷SVWÓÎñÄéïü^ï9TTT0€g5Qº Fˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ�á€épmL||<-ýüü\\\”nhªÛ‘œœìåå$¡•èèh±}éÒ¥"/LÑ‡x‰ƒ	�Ng0Äch…^Š^ÖŠÿPDƒí ½š*½^O•`hhhXX˜H„eË–=
Õ¬_¿>...**ŠÎ¤@ñ÷÷§�IvÅQé€yÄÄÄdddÐîíééÉ¤]ÝÃÃƒVèkŸIé F+			´4}:u@F�E+Û·o§×i‹±ô{ƒh°¢ì»7¡ò�¾öÅ
+ }ùÏ”ˆýœráÝwß•}:…­PÅÁªº!ˆ»…h°qTÐ’*QM�½{÷R^TëbˆN¡\ ŠÃªMUÂ±!"ÀxÈPA¤^Æó�”=sA=‘
+ ‰‹64Ñ`#¨+A»tXXu
+ (¨
+  ˜yA233�Gê
+ A¹@ßü:�ÎËËKüHýÑ‰GÅQI€zÂ%O¶—<�Y @Ž5€DÈ@4€DÈ@4Øµ3gØ•+J7T	Ñ`§âãÙ€lð`¶f�ÒMUB4Ø—[·*WZ¶äËÏ>ck×ò½žÍ˜Á>T¬a 6¸®Á.”–²/¿d_|Á23y:4kVý{ö°)SØÀ�lÿ~ææ¦DAeP5ØGGöÏò•O>a²ßo¿Íöîe×®ñ?Uƒ­zð€íØÁË„¿ÿ��Ç·Ü¹ÃÚ·¯ûY­[[¡u ¨lÓŠlÞ<¾òÒK•[êÌbÌ…�?fÇŽY¦e ¨l„(òòØ’%üÇ›7ù1…Aƒ^ä¥îßgC†°¬,¶{7	1o3A3
¶ ;›õîÍÏ/²£G™ƒCc_ðî]Þ
ññáqö	Ñ UT&ìÚÅ¦Og-Zð—/gcÇ¾`™ ‹‚¦iSæäd¶mA4hÒ²eüŒí½ßÏt:Ë¾×Å‹lçN~8³ñÅhCj•	Æ1ÜÚµc“'³Ó§-ž„Òç“OxyRZjñ÷õ@Õ ™™ìÿàÝ‡‘#ù%IÖ·z5?åqò$ëÓG�wE Ô‹¾¥©·Ï¤«˜}}Ù;ï°¹sY@€2�ÉÍe;*óÖ t(ÔèÌöÞ{¬sg–ŸÏôòâg%·nU,ˆ1""øyMhŒ   ã$£¦³“nØ°�þJ§ÓÕ9¡ Ôèý÷y÷A§c%%•[š7W´AU¨~Ù´‰Ÿ"MKSº)ççç'¡1EDxx¸˜@
³c°yU 2á‹/èÁïq"ô-âî®Æk–©~9r„�ÃK˜
”n�–¹¸¸g!ó•nß¾�rALFÕm4N#¢Dƒò¢¢Ø¬YÌÙ™õìY¹¥woET«~ýx�uè t;4Î`0ˆ^ÃÆ�iéééI„ø+±Ý8¡b*@	§OW¬[W¹~÷nÅgŸU*Ú ’˜X­t#4ÈX/0)¢¢¢ŒEëTPP½ \ë*!¬­¤¤bàÀ
+ ÊäÖ­+
+ 
+ ”nMãL›Æÿ!«V)Ý­%y~ûÌ™3),,X`ý&=‡!­„ŠpqºÁÉ‰�Á‡Wºy“i}~©mÛØÔ©,2’ŸÚ„FZºtitt4¥Ã[o½E}
+ Åç(Åu
÷Ãô¿Î’’ø¥Í~¨tkÌ�>>z=ëÑCévhJPP“f'7Ýèêêj0Œ?FDDPXX¹a¦pÒRèYâ¿›Êú‚µ=•¹P^Î³oþ|~<jW-„‚‚ë·¤¨ÌìÑ#öÕWüLd“&,1‘o¡_°=Ü˜tü8ï(atI›�c
fVRÂÂÃùÊìÙ•£0ÚC.�À@>ºdJ
+ û÷¿•n
+ ˜ª†ÆÃ+mÝÊÇDòñá[22˜âç¤•ré¿(ÃNÒÐ¶¡jh¬Y³ø(Œ°wïVn±Û\ }úTæÂÑ£]RÛP54˜(Z¶äsº�äd~‹¤‡W²
C‡²óç1º¤†!æÔ)ö»ßñá•t:>Æ	ÔDŒ.yë»zU-÷†Aƒ CQ71
+ £àçÇÂÂøðJÈ…Ú¹¹±Ã‡ÙÏ?#ê¦×ëCBB¶lÙB+J·å7¨êðÁ|J8*¨ãàë«tk´ééS~ÙìÙ8<)oóæÍññ©Íš=(,,Ü·oŸÒÍ©„ªA•	â¢f&]É#FaD.¼°o¿esæ`tÉíÙóíÁƒëSRÂÆ�¯t[~ƒhxFzzåðJ+WVnÙ´‰Ÿ˜ÄQÆÆ l]µŠ»5öËÀ(;;ûúu×¢¢%%G'Nœ¨ts~ƒ¥9ã‹üãKe1¤
+ ˜ËÂ…ìõ×Ù°aJ·C}vïÞÝ¥Ëð{÷žøøüê¦¦ËHíýXƒ^éÄ	vá¿´™ºZdx¥òòò'&JKK_zé¥fÍš9Ih¥I{©àââ˜·7ëÞ]év¨Ã Aƒ‚ƒƒËÊXÏžÞ3Äùpu°ëhxò„uíÊïz 2aíZÖ¦M½žE{u~~þ½{÷ò«<¿^TTôäY
µ¿,%…È§*´Þ¦M›—%...Æ%quuíÐ¡CÇŽiÙBL_¥%%üšQúÐ8ÀŒ²s×®]ó÷÷ß´iÓþýû·mÛÖZMcþÙ]‡B”	ï½ÇæC'üðëÛW¾L ÈÊÊÊÈÈÐëõ¦ËÛ·o["OËÊÊKúDú<‰Œè(éÚµk÷*´ÞTŒW¯Íš±ØX>º$}Až=kïç,>ÿüsŸ·²²Ú¶oß^U¹Àì­jX¶Œ�àìÌ6ofÒ€:¿ÉÎÎ>/¹|ù²H�›7oÖùU_Ô_µí«b…² ¤¤DÔ´bÆ÷2}ÓN�:yxxPLxzzöìÙó	m4û{5HV/^yEÙV(,//ÏËËËÝýpNÎk»v?~œÒ-z†íG•	¿þÊçw!))üÂþ©S©^(IKKYpáÂZRG ž/H•;IÛ¶mkZ¡Ž€Ó³ê<”@I!2Â¤°°Ð`0Ü—˜®Pksssó$ôà†þNèŠB$-ûHZ¶lÙÐ×i¼âb~Y”šÎÙYÏG}´fÍZgç"oïkÉÉý•nNu¶
99üZÝ¤$Ö­»~½ìÒ¥´Ÿ~úéÜ¹s¢4xúôiíO§�ÙÝÝ�rÝS"VhIU:¥ƒ5þõCI!b‚–ÔÙ¹qãFfff–$''§žÅýcéŸÖÏD¯^½¬ÐY±‚ýíoüÔæÂ…–~+u¹{÷.}œÜÜ|:wþ>$äñâÅ}•nQu6
‰‰ÌßŸ¾ÛÙÓ§eãÆ•té’’“³æØ±EEEµ<ËÅÅåµ×^óõõíß¿�=è¿�ŠpµuÔª´´”ºE”×¯_¿zõê•+WhI¥G�Ïutt¤‚‚~þU¨?l�òÏwìà§-L†Y¶}.ŒŒŒ

�5kVˆ*oA³©hØ¹“EF–Ÿ?ßdíÚ+¥¥{£££ÓÓÓeI_’ÞÞÞ¾U(¨CnåÖ*èÎ�;"#®H¨oEëÔ£©ýYTCù›0×D	ôüñGûºA“êÖÁƒSOpÉ’%S¦L¡MéÉ°…hxü˜Ê³ôq_¹²Í±c­Ú´ù&3sEqñ�j£�ÄˆÃ†
óóó£‚Ùcš())¡MMM¥˜H•dddÔþÙ :‹"  `�Ä,I‘�Àçõ´íÿ™ââbú¥ÑïÙÙ¹û¸q¿DFú¨ó[IÃÑ�ŸÿdÍšœ={\ÜÝ
Ó§:yòd\ÜQ½þŠécz÷î=|øð‘#GR(tëÖM©¦jÑÃ‡Å‘Ú$É…=zTËãÝÜÜŒ1A+�;wnè;Þ¹Ã'ÎëÛ×ÆG—üàƒ>ýôSZéÛ÷“´´Å§O«ô2|íEÃ½{÷nß¾�—ç¾té„N�r\\¾ÎÌ\*® žõFH(:`63¡îu=’LÔ~N‡z"&¨r¦åË/¿\ŸwÙ·�ŸK=šý÷¿fj·Ê:thÌ˜1b§{óÍÜ¤¤¹¹*½¸C3Ñ�““óõ×1´Óë‡,^ü?êFP™pèPNvv,“ŠÛààà��ú½»h}â�ÈÊÊ:{öì™3g%µŒ•îàà@Ýé!C†PLÐ’²»–ã»Ç�óKTmò2jú]�=Zž4iÒìÙßÞºÅ�Âª“Ú£�j�˜˜˜ƒ::::´êÆ
7*<=�?ÿ-ý•··7ÅÁ„	¨@ (ÝX»víÚ5
+ ˆ3’sçÎQ¤¦G¶hÑbÀ€ÿ'¡¤¨©£WTÄo„
°X‹­Ë4¨¤JMMUùw˜J£�ZuäÈ‘èèï{
ÔzäÈŠ'Ož|÷Ýƒ””#·oï£�”H„W_}Ué–‚ŒòòòK—.‰˜8uêÔ…Jkª¡K—."#h`¼òêÏæ3zØÆè’¦¹@�Ü_~ù¥Ÿêo Q]4P‡ö«¯¾JHHprzçèÑ¹Ož42äŒ³ó¢'N:têÔ©
+ –8Á–S\\œ””tªJ-ÃœQé×¿½z
ûË_¼“’.^Ôö%Õ{öì™3gŽ1>Ü·oß)SøÈºï¿¯tãj¦–h(,,ÜÁýððaÿ?þ±u÷îÝoÝrŠŽv/*Z×¦Íå3fL›6
§lC^^ÄI	}�>xð ¦Gº¹y„†~9ož+ÕŒžžžŠßúÑPƒaþüùô±?R.ÄÅÅQ©›ŸOë,"‚-Y¢lk£–hìÔ)`ÿþµååMþú×u§N¸|ù²N§£P¤Îs;`Ôõ¸xñ"e„Z¯ve7ÕúÓŸ¨`ÜµëzjjÔ�!ƒÅ‰��ª¼¯þóÏ?‡……egg‹{ôè±oß>ÑÞ¹“ßÈ£ÚÓ–‚Z¢aË–-Ç�¿xqR~þ*(‚ƒƒµ~�24U§OŸ6v=rss™t‚#8øÃØØUÞÞ‰¿þ:²¬¬Xlôöö¦€0`€¯¯o»ví”n~¥ØØØÈÈÈøøxãJ·
6´jÕJüXRÂ§ðyã
•ž¶Ô
Ô¡3fÌÔ©S'OžÜ¶m[¥›ª�™™)’‚–sRS§
ð¿´´Ñ%´o=§k×®~&è[ÚÁº{õzöìÙC¡�’’bÜH�ˆ­[·N˜0Áš-1µD@íÊÊÊ6o¾;hÐÃ{÷.®^½šÂ¢ö»Ñ[·nÝ¯_¿>&<==-1ÊåW¬äðáÃ¦·ð999MŸ>}åÊ•ÕŽšS¬5kföV˜¢´§ €_&ÿ~JbbâÙ³g“““é‹º¸¸¸ög5oÞ¼gÏž>>>’îÝ»‹•õD=zd¼-�œ9sæÒ¥KÕC©4wîÜ¸»»?ÿ
+ Ë—óÉÄ¯^U{@ @{BBø0¦£KRMqùòåä*çÏŸÏËË«ç«9::ºJ¨'KËV­Z5©B]ê¼Ü¯RPP@/[Ë.Cµ	U
+ óæÍ«åéÐ¡|yâDýÿ¹Ê@4€ö¤¦òÑ%©J ï^WWùÇäää¤¥¥ÑWzzzú%ÉíÛ·-Ñ˜–-[¾ñÆcÇŽ
®óöÓÇ�™‡›?_Õ§-DhRV‹�g
œÝ`0PLèõz1
+ –q,¬ÂÂÂú¿ˆ“““··wÏ*½{÷hÞ�‰=ËËy¨)1Ú^Ã @óÒÓYïÞ/þtê2˜(***//¯¨Ò´iSÓñþ;vì¨ªáÿ,ÑÚvø0¿‰{Å
+ 
Œ.I»ÚÉ“|–Md‹½Ì˜¶jøp>ÃÐ¢E|•KLd��|r`MPK49TñòòŠŽŽ6þÕ†
ÂÃÃ•k¨ZÓ¦ìë¯ÙêÕ˜¦46–OžH5Ž&¨%ˆŸŸ_œ„VÂÂÂ222âããi…r!99YéÖ�z98°�>bâÚ;wXÍ#E(¬ysÊTs=wT4ü‰‹‹Ë¨ªñÆcbb(˜4Ö«¹F.›W^Îg¡¤Pçè’”_¢¢h0âŽ”�7ÒRLCa‘�� pË@#¨\ÿøc>º$}Å$%1Ü�×*Šê51)¢¢¢P,À	a?ýÄôzÕåÂŽ|µ#”nG½©(¨@ˆ‹‹Sº yÃ†ñ?Â­[¬KE[#©¨`ááìÐR4¨è0$€y}ó
9nß>¥Û!�¶¼s‡+ÝŽ†@4€ÍúýïùýW:?k¨,WW¶`{óM…›Ñ ¸lÙÃ‡üÀäòå¬j€%¨/DØ‹ü|~íƒšÇ\St(À.PùðúëlútVó„–òã�lÎÖ�Û;UÑvÁÙ™ÍœÉÏ Nšdí·Þ½›ÅÄ°Ö­­ý¾�¤¢“—µp!ŸýÁÊ»(õ×ä§-5×‘Á±°S³ÂD´{�8Ák__‹¿—y¡Cöhóf~^3-ÍâoDÅB` ör�!À>‰ûø†g&SFX„v‹rDØ#*Žç·H[t¢Ýü|Ö±#ûî;¾…å ÀNuïÎ¶mcbÀW
ñpð ¿>šÞH‹
`ïòòXÿþ|œ(³;vŒµoÏÌÿÊV€h{çêÊ�.ZÄ/6ó+ÿë_ìÜ9í�¶p]Ø;1ºd§Nü¨¤Ùuíjþ×´\×P�Yf¬ÍÈàCE89™£AJ@‡àË—óWîÞmìëLžÌ/‚Ô.DÀ3üýùÅ¯¿Î3Ef~>;}šIãj¢àbtI
+ ˆÆŒ
+ Ÿ™É¼½ÙØ±æk–ÕáX@mJKU7­u j¨QFëÓG£KZ¢ F­Zñn…NÇÏnÖßõë|€†’‹5Ë*
5rsã3q�Ï<<ð¬;ØÄ‰¬¨ÈbÍ²
+ k¨/±¯ÔyuãÐ¡|yâ„ÅÛcQ¸ ¾>ü�åæ²¨¨:LŽÍl`ê5D@}uèÀÖ­ãWCíÝËZ´¨ñaË—[±Mƒh¨/1ºäÁƒf¸ŒZýp¬àÑ®Sí¸m™;—]¨P›Ìg(^Dz:¿b²Úè’‰‰lëV~)¤
@4¼ˆ²2~Ðaøp>�œQl,kÒDcs[ÖÇ^Dß¾<&N|æ¶ë·ßfÝº5êæõÀ±��€Ì™c‘Ñ%„hh¬§OÙ£G|tÉéÓ•nŠùàX@c9:òû¯Ú·7ÃØPê�c
f“›Ëç¤±
ˆ��c
 Ñ2
 Ñ2
 g(,>>ž–~~~...J·ÅRP54@rr²——W�„V¢££Åö¥K—Š¼0E[â%&t:�Á`¯F/EO[ÔÑÐ´WS¥ ×ë©Ü

¥[$Â²eËž�†jÖ¯_E�¯Fé0räÈ�7ÒKY¾ù
€¥ê+&&&##ƒvoOiXXÚÕ=¤Qèƒ¤É-)ÄÃh%"""!!�–¦O§È¨Q£heûöíô:´Ü»w/EÌÿ·wG§
ÃP@³I»‚'r½™7òÞÀ´?Jû 
+ …`è9F1²É�®ôd“|½ü"DŒÊŸc
ïÈò!…@5¦iz;U‰‘\˜ç¹½<q�Fâ ÷¹ïô¥ÿëÅ~…Z4À_e9�cV÷á�µ@òâ[‰QED$²â¨öq)+Ò3—<í�°×£*jò¿�£:¥DªŒŸ=Û'©DÞO·ÏMÍ¬#¶m«²â:DŒJ	�!½,Ksr!«€ŒíÊ‹Ø÷=çÇïVÉr;÷,ÒþuóÉ0*¹�™?ëÿLõõ1£ºŠˆ¤Æº®/�ü7fú×ËÜ°Î\ê%#¯<ÁÃþÃ+O¢hØk¢hˆ !€†h¢hˆ !€†h¢hˆ !€†h¢hˆ !€Æ¸g�ŒsIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-2.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-2.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-2.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-2.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,29 ----
+ ‰PNG
+ 
+ 
IHDR^´SáÓgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ {ëÕZþIDATxœíÝ	pUþð—›#7�„`€0ÜÇ‚ËŠœKDduK¡\Q6¨BØ²J‘EX—’  Å.Ô.ÄU„U‰¸º²“¨(„(‡@H Ç$1dÈIÌäæÿ{ý†Îzr13Ý3óýÕÕiæx„éïüÞëî×n·nÝbwrW» EˆP€hˆP€hˆP€hˆP€hˆP€hˆP€hˆP€hˆP€hˆ77·W_}Õ¯œ––F/NK[¼¸� @¢ Å¹sç"##éþ¹çž[¨Ž
+ 
+ ¢-Ó¦M;{ö¬ØB?Š¿�&+ãÆ�£¥xdEEmÜ¿�$11Q<ž¶Ó+»IhE<L›
-¨æß.¡½úÍ7ß¤åÆ�7lØ�ššJ»ñ‚Úx.ÇâÅ‹é¹ô"ô\�NG;ÿc�=–””$2…IaAh‹x‹�?þØ.ÿ¬®ðT»òì³ÏÒÎL+ô=äÈ‘ÀÀÀ±cÇ®^½š¶P@P4È;ùÝzè!z:­¬Y³†I)@KŠzñ\ú‘ÖiIqC¦€ï¥M¨Zˆ±S¥ VÌ·têÅ³ä¡ì D \ Ê‚ÂB„ˆ6!ZP±@;?•´ëÎ—ÐŠ¨vìØA{8íÕâ‘´‘ºmTnÐ’zâ¹b£ˆ*"Îœ9Chãéê»v{+å9(öíÛGËÏÏ—k��ÒhãCùuhç§Ñ¿�_655•Á¼¡
+ Bµm{ÜnáîUft9˜T P)A»·¼W‹ÊÂ|‹%¢.�G'8täé*B4€Œ5€D(@4´øñÇ÷ìÙsòäIµ¢>D@‹äääøøø�>úHí†¨Ñ
+ 
 Ñ
+ 
 Ñ
+ 
 Ñ
+ 
 Ñ
+ 
 ÑÀét:ùê	q%mQ»QjÂ|
\UUUDD-Å�þþþEEE´T·U*BÕÀQ
+ ¬ZµJþ‘Ö]9ª™\8 d`¨drá€’�¡j0G%Ãˆ#.^¼ˆh@4Ü!33søðáj·B}ˆP •h�o=àš4²'Ê4t;Ü[ù©j7ÁUœ=ËÞ~›åä°¸8¶v­Ú­újŒœ¦vZÃ
+ rã†iÅÇ‡/×¬a+Vð•’¶e3Ukh�†ª°‘ÆFößÿ²ÿü‡ìÃ™·76ŒíÝÛò€¬,öå—¬¨ˆ½þ:»}§h°7êSkªO�ªÁùyx°ƒùÊÒ¥Ê˜6�mÚÄŠ‹ùA+AÅ#c
VRSÃŽãeÂ’%lÒ$¾¥¢‚µ{ãUzV�vh(c
ÙT
NèÝwÙöí|…ê¡#7d–sáÿ`çÏÛ¦eà8P58Q&”—³Å‹ù�×¯³ÒR6thW^ªºš�MlÃkÝf‚E¨Àú(œ—	L|´z÷îb.__¶k‹Šb))Vl#8T
‰Ê„/¿d³f™C&&²‰»w3™§'óò²ÚBÛ4X5àà¥ãÙ¿Ÿ:ÄjkùÂ/É·ˆ~„uïnZÑéx-YÂp¶ª«A48*ªªXX_`?ÌæÍ³f™`É7ßðAM½ž­_ÏëpøßÖ:Ú-ÿõ/Þó3†Ÿ’D,°ß»ÿîwü0Ç{ïñS°ßû‚ê
ÕØhú–¦îgj*/}T�–,ZÄæÌaÁÁê¼;¨Ã�š“•ÅÏV:~œ½óŽé´åúz~v³ìÛÇæÎe¡¡j·Ãéhp/5gçNÞ}˜2…54˜¶h$JJØáÃlåJ–Ÿ¯vSÀöP5¨O”	ãÆ±3ø�……,$D£ç,S(¬[Ç~õ+`E¬0Ö ²Ï?g[·²nÝXD„iKÿþª6¨M‘‘ìoëÐi×àèP5¨€Ê„óçÙoË×++ÙW_ñzA›eB²³y1gŽÚíp
+ ¨\]C/Å/_æçýú×ü¬ä€Õ=Ü£?än”•ñCà|
ö@eBß¾<¼¼ØèÑ|Ú5G,ZY¿ž/Ä¡Mç„…m}û-?¯9'‡ýñ�ìÉ'Õn�µÑg§¤„…‡«ÝÇ§Á^ÚDuõ+kÖðóš��››)š›Ù�˜]Ò© j°¦ÚZ–œÌ�Dº»³¿ÿ�o¡ß®+\˜tá[µŠÝ?f—ì"T
N®¡�½õ_‰‹3M�à
+ ¹@FŽä³Kæå±Ï>S»)`%¨î‰˜^éÓOùœHýúñ-z½éúHTPÀOÊp‘4´.T
Îæ¯åÓ+Ñhe¥i‹Ëæ0À”çÏcvI‡‡ª¡sD™àãÃfÏæ?æäðK$í0o‚cY±‚åæbvÉN@ÕàØ23M³0?nÚ2x0rAÁ_þÂg—¤_T}½ÚM�®Â)Oí 2áÄ	6}:_§ ˜3‡×ˆƒ¶°„>Ÿ­F®Õ²’’’�;wªÝ
+ ˆ†¶ìÚÅo	W[Ë{Ñ”ôA_µJí69ˆîÝM×‰55ñKÈââ0<©ìäÉ“ÞÞ½Õn…t(Z£2ASlnæÓ+íÞÍsº&-�mÛÆo·ÛØ¨vS4)55íÔ©ÿS»
+ P5´(,ä35§¤ðë�–/ç[P#Ü;ê‹üî»&˜ÆnAvýúõ«Wýjk}ÔnˆDCË	‹z=Ï*ÄÈXË¢ElÔ(þZIIIéÕkTUUCûµ;—>x)¦WÊÌäwytwçÝ‡ÚZ›\ÙÜÜÜØØØÐÐ /=<<¼¼¼<==½$îî®Ò³;s†_v�Ù%…øøø˜˜úà-}í¦±ƒ—®[544°?ý‰ÕÕñ2Áhd={òth7h¯®2SYYyóæM±BKZ§£ÑØ*Úý/§h�cB^éy›¯¯¯XŠ??¿ÀÀÀ ‰��kQKêëù Ùº•OåâŠ‹‹,XpâÄ	µÛ¢Àµ¢A”	�<Â†
ãS'ÐÇtà@å8 ýÙ`0èo+))Ë²²2[4ŒÊŠzIgŸØ½{÷ 3½{÷

íÓ§-iÝScw•ñöæ¡°nÿÍïÙãêÇ,>ùä“~ý¦<èÕn‹êPìßÏï
Ù­\l5mÙõë×srrrss‹ŠŠD
+ Ü¸qÃŠ¿ú×‰ZÀSB+MMMrYAlñ¿@o*	»ï¶`µç]1xÉvß}ê¶Beååå.	I(-ôÊ+§c½ÄÐ¡°'*®^å]2u*ŸŒhÆæéYù².×u:ø‚Tùû·‡j~9Ä²Ý¡J
+ 9&h…ÊZ©©©©–üüóÏb)V¨çR.©¨¨h´|H�>g¥’ÌÌLóíThÈ1Ñ¿ÿt£È´y �Š¤~`“&Ùí�5äÐ¡Cuuõ”ýúOÒä¯Ài£¡´”%ääð;ÊO�ÚTP ûþûï¯\¹’””K<*àÛ~:}å†„„ôíÛ7L"¯P•îááaõÖzHº0p@IA}ÊJ
+ Z¹víšAB+
+ ŠßBF£ñŠDÞBÿXúFš¡È°CgäßÿæÀË–¹Üì’•••GŽ	
�
+ .��Õh·ÊÙ¢!;›ŸžD;o``S``ÃìÙyee‡æÍ;U[[ÛÆ³è{~�$**J¤áZë¨+c“ý•&¨§‚‚ºE")®^½úÓO?Qw©¸¸˜J�V�¤¹*ùöÛoÅ*s(è·1xðà![ô‡ŸzŠ_Ç½w/>œ�kõ—×®ƒÒrüø°¹su±Z½ÍyÆŽ£ßxsn®ûòåE��ß=z”öKïNA@Ÿ{a®t)5•"#hIy‘ŸŸOëí–QTCÉ1A¬õ£Oß‰®u�fNNÎòåË)¸Ÿyæ™éÓ§‹X×à•—
uuTž]£�û{ïõ¼p¡{Ïž)zý»

•­FUÀèÑ£GŽIŸo*˜©¿m�V;‰úúzêdQFètº|‰^¯oû)TgQ@DGG•X%)ÎžeÑÑÌ¹ÿgèWO¿çnÝúÄÄ$ÄÇ÷¿9DƒE��†ÊÊ†C‡JÓÒ|CBªgÍú>33óÌ™ózýOæ�¡’˜â`Œ¤OŸ>Ön²33�ôñÍÍÍ£yyyu”Á–ùûûË1A+½zõêì;VT°…ù±dçž]r×®]‡¦•�¯Ó=½{·é*^DƒEŒ†ªªªsçÎ••••—‡$&N
+ *õõM6ö‹3èE¨w@A0Zdû†»„¦¦&êzˆ˜ z˜–mÓ¡Þ‡HŠaÃ†ÑŠ¯¯oGÞå»ïØÆ�üR‹Í›­Ôn�ÉÈÈX·n�XŸ0áð•+AII¦“;
µ
¥¥¥ÉÉÇO�ò/)öôÓç©AeBFFé�§˜TÜÆÄÄÄÆÆ>øàƒüÂ=2—/_ÎÊÊÊ–TË³ë+¡òmøðá")
ÔÆøî…üˆ’SžFM¿«µk×Š1à©S§ÆÅm,-åw0
)F±Ç�§¬õððÈÈøÃõëT&„…íÉÍM£2!<<|Ò¤I“'O¦Á¡ãŠ‹‹) ²$TS´q<ÈÛÛûþûï.¡¤°ÔÑ3ù…°ÑÑ6k±}™ç•Tûöíkõ†h°È<¨IÔk8zôëììˆ¡C{Œs«±±ñë¯kòò~,+ûŽ>R±’�Ô1íinn.((IqéÒ¥ÜÜ\ê�Xzp¯^½DFÐ’ºò™W		ìÿs’Ù%Ís!000!!!ò®H
‰h(**JNN>{ö¬—×ÃçÏÏklô6,«[·=/^1bÄŒ3(´yÂ9XBõÕ”Ô¤eÇ>ÜÝÝ£¢¢DLôï?jçÎð+WÜû”êÔÔÔmÛ¶µÊ…M›Øˆì7¿iy¢Á"Š†•�<`4FM�ÚƒŠÌÒR¯£GCŒÆzô(œ={öÌ™3qˆÁ9”——‹˜ ôuj´|3<ÿÐ)S^œ?ß�jÆ°°0Õ/ýè¬êêê;v;vLüH¹°}ûv*u++Ù‚lñbþG†h°ˆ¢aÆà/š›ÝžzêƒK—NQù0eÊ
+ …¡˜¡Õy‰®Gæm´ÞêÓHuD\\))Wóó?§‚BíøQµüðÃ¯¿þú�7Ä�}ûöÝ²e‹èSVlÞÌäÃ–¢Á"Š†¥36UU}}kÖ¬Y111qž2XQMMÍ%3T_ˆí11O¦§ÿ!<<»¤dUs³iB¤ððp‘C†4hP€fÎ…HOOÿý÷Ï�;'o™;wîÊ•+å³ìêëùý{~ñ‹;®IG4XDÑp8á…éÓ§ûûû«ÝÐ½^/2ÉÍ›ótº™C†ü¨Ó­mhP˜.MœÇ-£àp³ïlÔª´´4
+ …üü|y#u"Ö®];yòävŸŽh°ÈQî^ªhjjJJª:´öæÍ‚Pd´q5:“.<�ŒŒ W�‡……Ùb–=Ê¯S§NQ¥púôióC¶TóRñ»lÙ²V£æT2(Þ›Ñ`¢:èæMVUÕP]�—��}ùòåœœœ¼¼<ÅRÂœ——WDDD¿~ýBïÔ©žíü?IÄ•i”P………­C©4oÞ¼'žx¢wo…»K$&ò›‰¿ûnë€Ð`4 ?fË–“ãµukô£�šÎˆ¢š‚öÕœÛrss+**Z=‹²#OÒj;•~fhÇ¦-ôE%Jz–<ƒ‘‡?QyB•ÂüùóÛ"MO§¾�cÜÔU8êË¯[Ç+súîõóS~Lii©N§+(( oõIÛ{u—ùøøŒ7nâÄ‰111í^~ZWÇž|Òtä²
V
ˆp<¿‚»S7¼¡ï|Š‰’’ƒ™k×®ÕÔÔtüE<==ÃÃÃ©c"Ï�íÝ™ ¹™‡ÚÝ³í!,B4@×Pg_iŽ«Žª¯¯§Ô¸y›Ñh¼u“&æ“gú§ePP��®ÖÑ`4`¬ØéÓlíZ¶ti×g—¤ïü`‰UÛ¥€öúÌL~š“£\	è*7M§4z4¿áÞ½,)Ií¦´';›­\É¾úJívtªp`žžì¥—XT”Ü¦4=�Ÿþ8~¼Úíè0D86Úß.4­WT0�Î.éíÍ¦Lq¤¹í0	N¢¹™­XÁ“Âg—Ôà0$ÆÀI¸»³gžayylõjÖæYÔÐ!èP€óˆ�eo¼Áôz¦µ«v¿ø‚õéÃÆŒQ»��ªœÊ¨QlæLÓúíÙTF½„·ßfŸ~ªv;:	ÑÎ)%…=ý4ŸÀ^uÙÙ¬²’ÅÄ¨ÝŽNB4€s?žEF²—_æG
ÕåçÇœß_Ã±à8-£‘ýóŸlÉ�Î4§Á#ˆp	TÒûû3ûÎüÔ	Œt(ÀùQùðüó|¢ûÔ<q‚4‘æšw0ˆp~Ô¡˜3‡Oå¼aƒ½ß:%…?Îzô°÷ûÞ;�ÿ°�E‹XP�½wQêdd°ÐnG¦
kWT]Íìp#Ú·.^ä·ÜÎ#1Ö ¾¤$öÜsÌlRx[¡baäÈösA›
àrÆŽåË^`wM"keZ*:
Ñ.'2’½õ¿DÚ¦7Ú÷¶t ¹[ZA4€+
+ 
eë×›&}·|GÞ{’‘ÁÓ�ÞÈA!À¥•—óÓ%°þ+_¸À§�ˆŽ¶þ+Û¢\šŸ)Ü»—ÿ±®Õ«ùk:âaKç5€K³Kóh­NéÖvç5ÜÁÒk;E¯g½z1/¯Ž>ç5hZb"[µŠÞ£?ÿ™½ø¢5¤D@‹!CøÉÏ?ÏÊÊºþ"”,YYlÜ8ë5K
ˆ€bvÉÁƒùÜ]f0°ðp6q¢õš¥Œ5XÔØh§h1Öà0ôz~·{-Ì.©
+ D€²îÝy·âå—Yrr'žU\Ì'h¨¯·Y³ìÑ , €%$°I“:w²ó±cì•Wluòµ=á”'‹¨pxí5Óºh÷ìÆôt6t¨ãÝYïnˆ€Ù½›_p±~};“&°°0{µÉ–
È>ø€Ÿ³°i¿·%K–Ø±M¶„hè1»dFF'Nvh8¯ +h¿i5î@[¶mãSW�ÙéWÃy
Î °�-[ÖzvÉìlöÙgüTHç€hè´¦&>èðÂ|¾Yz:¯#îÞ–– :MÌ.~Ç¸Ã´iüjK'8l)`¬@}kpBo¼a“Ù%Õ…h¸'MM¬®ŽO¹y³ÚM±*
u(Ôn€Ê4²3
+ Z‰sˆ	pMšÚµ
 :Œ5€D(@4€D(@4€D(@4€D(@4€D(@4€D(@4€D(@4€D(@4€D(@4€D(@4€D(@4€D(@4€D(ø<+–uXÏ
IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-3.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-3.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-3.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-3.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,50 ----
+ ‰PNG
+ 
+ 
IHDR¼´ùhPgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ *Œ¡€¿ IDATxœì�pTÕýÇOx!	 IIÖð�$‰"…$µ�’2U+	CE*šÐ¢0­Bv¨¨š0Ta°’¤ÿ3&‘¢(-	S3"áÞˆ�<x„GÀ%“ðÈíïÜßæzÙ¼6°»wßÏdîœ½¯ýÝÍ=ç|ÏïüÎ9~Š¢€¶è`´ð `
°ˆØDì¢vÑ»€h€]@4À. `
°ˆØDì¢vÑ»€h€]@4À. `
°ˆØDì¢vÑ»€h€]@4À. `~Š¢mh‹¥¸¸˜111FÛÀ·€§Á“ÈÊÊ2™L±*”`õÀdddÌ›7Ï@Ûx=
CYYYRRR||ü*���$,KAAí'Å ×€Ã�hp5¹¹¹&“ÉÏÏ�¶”¦=±�¤¦¦’HHH £AAA6žƒ•+W’PHOOTÉÌÌLNN¦óéPhhhXX˜!�Àw@Lƒ«!5Cõ=iªòKKKI.$&&Î˜1#;;›”	‚²²2:�´Ÿ/¤Óh›ŸŸßìm[?
+ Ü=�Œ6Àç$‰@	’ñññ¼3""‚ô�Pëþ””ÞO;á?à> {ÂÕäçç/^¼˜f³922²¬¬L¨JB;!  €111zÑ@Bµ@Êƒ_¸ˆ—Bµ¾Éd¢DNNNff¦Åb±©õIäååñ¸J??¿¬¬,©©©t(..Žö'%%ñUÜ»W—ÑàRH$&&R}O‚ !!!FEBzz:	‚   ÈÈH:D'“h0›ÍBu<�ÎÈÍÍ¥£¤<H1p�àie*���¤!še7CëG&wàr `èž€]@4À. `
°ˆO¢¨H?n´|ˆÏ  @Œ%¢¢DZšÑ¦ðU Üš³g­‰{ï•ÛÕ«ÅŠ2QZ*^xA\»f˜a|ÌÓàŽÜ¸!>üP¬]+ÊË¥nèÒÅö„O>Ó¦‰Ñ£Å–-¢wo#Là{ÀÓàŽtê$–/—‰·ÞÍŠºgž99¢¤Dþ®ž·àêU±~½t-,Y"&N”{.^÷ßßöUÝ»»À:@Oƒ[°t©˜3G&:v´îiS1šbxóMQXèË€Fài0v-\¸ -’Ïœ‘±cÆÜÉ­®\�>***Ä¦MbòdÇš	üDƒœ>-zHŽ}xüqñõ×ÂÏïnoXU%;5”BpèžpW¯Ê�…ÚZ™	¯¿.ví’}
+ w¯ˆÞ½Åöí"3Ó·÷'55Õ¯…ÒÓb±DFFÒÑ:Óæ?tfqq1_5oÞ¼ØØØ¤¤¤²²2'›ïÁ@4¸³Yôë'fÏ[·Z÷,Zt‡�-Ñ­›ð÷—‰#GÄo4?æ¼žb•ôôôˆˆ
f*›�˜˜˜ŸŸŸ““Cé„„Ú’bÈÊÊŠŽŽ¦kII¸ÚhÏ¢ÁY\½*4µÚ«—˜:UºÔ—Ó¹|ú©¨ùÛßÊÉÀ»á:ÞÏÏÏd2Q­O{bcc…*222X14õI„††ÆÄÄÄÇÇÇÅÅ±_�®%%‘ššJjÃb±�Úpísx�Œ6À)/ù‹Ø¸QDGËÉ—ˆ¹s]÷ío¼!:w–Ã1JJÄÐ¡®û^p=			���ùùùyyyIII$¨Ö'Å@[Òååå¤è¨ÍU´Ÿd‰º*,,Œöhá},x'h
+ <
CkÙ74È�S§Šæ¼b®`Á¹®ÃÝCÅ‡¾û“Š'*e„Ú¸¡â‰4Ô.á=×C9´¬¬Œ»!„ê0 �” -Uü¡¡¡”&%as!�Fù—;&¸“‚!µa6›SRR Z¢Á‰ßýNF-\º$?šLr,åˆG1Ì¤¾}­‰Å‹åhLp7P“…Z*™™™T0Q™"ÔÆ
é†èèè•+W’z0Ú@àÍ°«Þr{X¼xqS}ÐÒ™ŠÊ¾}ûXdpø$‰	Êé”å�khcƒ¤¥k³ažnÔ	Ñà^yEvF�f­¯·î¹çC
j¤´T¬Z%v>l´)†B‰òeª   Îuœ'i«uÒ!½/A•)T%&&R‚r 7n¨Ð¡Ë“““sss]ÿDÀƒà7­ÙCTEÑQ~	éœ¦U�`2™bU(ÁU“‘‘ÁÖ—áú^¨¿¥wìØÑ¬ç�Øfa
n	P¾ãž§XÜYKMÍ~{p— N´Ÿ]»”Y³”õë­�Uª«
5¨eT‚ƒ•äd£í0”øøx*(_QîRK•RÑ T§e¦ŠPÝ	”ëéíBî
+ Õ<
6G	ºÝÙå<	¡k×Ú@ïUÔØmö4zQ¹JøA…Î¤7�Ú›L—;ß|7…³0%8cruÆ?g[ÚRš3µhYà_¸éOMÿ›š‘/w†ÍìÑ™’’"Ô(
+ *©ØT>SÛOæéÃ2ô÷Ô?‹ö›ðµ6?…£€hh7ëÖÑ¿DéÖMY¶ÌhSìãìYåæM£�0­„¥LÅ4ç.*•Æ‚›ÏÜ§¢]h?EYš/!(ÁŽP*•\þ@À“ÐŠu*Ç¹ã‰_B~35§º¾2ãóµWŽÞL:JJ‚^Knû²hÐÃBJŸsÝ}[E«Î¹+Dk´ØˆÞÉ/—c6
+ @è<
ÆÑôé�qàS@4ØÅ®]Ê_ÿjMWU)«W»¯k¡vïV²²Œ6Â(¿Q.¥¬ÅÁM”»4I®¨¢¡¥Â·%�NÅådn8Õrà°Ð;´èÍ¡·‘Šò–ª\úëË÷VÞÌ6�7DßVÑÊ}£…]ŠÎg èþÑú�úV�æµÒß�]1
mpýºŒgŒŠ’…ÜÉÕ«—xé%�\^2#ƒJ%ñî»FÛárL&S^^•Ú\4ë;†…šÓx6‹ÅBgrèPjjjKDtwBc<7°ŸììlÒ
+ ôÂÐ›F‰¬¬,Úª°têäÚ÷z´ÎGáâ Nˆ†æ)*²…ð÷&ˆÕ«åšRŽþ_»šuëÄôébÙ2qþ¼Ñ¦¸Ê6¹¹¹É�<ýQÊr”�)�ÑQþHrÁl6·$(+ZT8BÍùO¼Šèèh­o¢XÎjIžÒË†Ž½Œ¸¸8ú/gddPÅ“SµŽñA�Žu\xyyJd¤ŒZX¾ÜhSœ@Cƒrâ„ÑF÷z¶ÔúQî¡*QP ¶ wNÇÇÇ+·w1ˆÆî	YP=Ø©õeh·õñî‰ÖCüšõäk?¬}mhãÞ§_žZê´Yo•Þ~nÆ4
„ä3µ´›uB4Xi6R²³¥hðÐ¨û¹uKyç¥¦Æh;ðv¸X×"g…ê æøY}ÅÏG«h†~h€M��‹nhQ¢64+ZŠ	hHH?»öïp‚í·ÁR†ÈÐ—Ò¿ÛÙßx—øºh¸vMêR	£G[÷P[Ü(,T:vT¢¢”‹�6Ÿ�ÇÎµTÕ5K›N2ßÁeCI4hßåì‡*--Õ²8Ö·á|}í‰úz1ožœqyÖ,¹2¤ŸŸcÖªv\ääˆgŸÿ»X¸Ðhkð
Ú5™CMO;g9ôvìØ1cÆíc†Jzz:U½M§gÍÉÉ¡�f³™ÇOÙ¹÷4;“’Ã¡o$ÝÀ
+ <‡¾ônð9ÑpõªX¿^Îñ¼i“8P‰£G…o,Ož,öì=d´`7Üµ¯…RMOu-;HO�€ÐÎä�+W®$A@—´²G Ò}ôëP¸Ò…>7zbæL1gŽt*TUY÷ø¦b`†µzV¾þZm
´…†,‚Vð~ÑpõªX³FüãÖ�þ³ØµKìÝ+{ÌP³ÜŒ×^O>)6o6Ú|*©´Åk¨€ÂÈJ;qÆ�EÐ
+ ^.¾ýV.>9gŽÐ"9fŒ¡6¹%$FŒ¿ÿ½¨«3ÚàPZY-IèÓkvU=›sô`‚
+ ²¿u™Ü�­{fÏ–‹åöé#´ÑsÈ˜-‘’’’˜˜8O¥u'?Gð{k6›!îCÃ0�Buµ²aƒ5]W§Ì�+'�mRS£;f´žÀÉ“''MšôÞ{ïQÂh[ÚF´®…‹óôÍžÓì!ïçX–/—kÙÌš%——cŠ‹•5k”¤¤Ÿ†‚›LÊ AÊóÏ+—.e¦›âqC=oó4$'KÁ>mšïD—.rmh¸ì¡[71dˆLÜ¼)EoŸõüÄ–-[ºt	.,,|õÕW
4#77×d2ùùùÑ–—çÖ·þõ†ýû÷ó™Zl9µÉøÂýœOÔX0¾–¶ÚZºAAA¼Æ.âù³y)gmŽ9^»™vÒU6ósƒ–(*’®…ßüÆúñ¥—De¥ÌtÃ‡[÷Œ)�
ëÖYg¡¥ÌHéè7ßˆ=äž†úO‰W^ÿü§Lû2aaaÙÙÙA*Ÿ5Øb´jqÕÕr)fî\)ØáZ¸6l�bNŸ®\¿n´)nÉøñî»ïÇ#¶­¡Æ qðÚwÔÌÒf¤±™^P›0Ž§ÒÓ³Y
+ \Ü>¥F‡‘óÊŠ|(11Q+ú.míf^w«„ÛÃ©SJ‡Òµðâ‹w>+•x±±J÷îÊX÷ÔÔ(o¾©lÞ¬œ?ï(K=	žÊ¢]`x®q‚zö�ËcÇÄŠ²#�¤zZšÜ³j•Ñ6y>S§ŠŠ
+ 9yÃSO‰^0Ú7ãôéÓ'NÕÔt­¯ÿzÊ”¹Z¢�:›1cÏiÓ<i±P×LÊËËjçn³CÔ„ºjsRRÝ™ñ¼Å¹�AYYYt•v+Þ#Ôe–è|žåžð Ác.£¨H:–.½{‹�bE?ÒÝ,z×«—Ø¾]úÎœ±î¡Âðí·¥›pøpqð Üc±ˆC‡ÄèÑ¢kW<‚›ƒ·Nèœ _|ñÅf§…µ{d÷„æ9/+“Š�*¹iÓ5ÈëX°@Â„bhÊ¦M›ú÷Ï=×<Ù›jãà®\¡†tEFF¶²ŽQ@@'´±jZB;¤ÁÒ¤ôSè´t+
’¼@NûÅË™9S.“»aƒœ…™<Ù1Ëävè ~ö3kšÄAuµøïe;Š!U1~¼ìÎxñEëžë×}¢/ã£�>Z²dÉ‘#GŒ6ÄÕ|òÉÿùeúÁƒI“&MrÞ·x˜hà¾À#¬¯>5…¹/pÔ(QCCC]]]uuuUUÕÙ³gËËË©‰yñâÅ+W®ÔÖÖ6ø@Î7ÎšÈÏ—ŽÀ|üñÇO?]ýÇ?¾õì³OhFqq±ÉdêD7™™™‹…Em)­ù˜ììl^‘¹   ...""‚¼8;l ­@'Ð­lt¡þV¢q~C
+ ?±cÇç<®çA%ÕßÌ”)r™\*©~ùKç~i×®âç?—¥"ó‹_ÈQQŠ±c­{²²d�í'ãÅPŽX´h‘¯-z»tŠó¾È“º'H&Oœ(~üQºjj¤‚&¡Ý¦`¿qãÆ¥K—._¾|©‘¦éšššë·Ó¦,èØ±£¿¿—.]ü¡t�=T¨¦m‰   >}úôíÛ—¶]=ÊWX_/ý
Š"¶ný)JËg)))9vìØË/¿¼eË–æh	ÕÖÚ03¡úf	^­›^6›	jè=äU¿ù*¡UçhÇf§²á
+ ÚÚ¸
¨,Ž��¥[Ñ
ù�“’’’¤"Ô(
+ x$Õ%‡JFGÓG¥–!�> §¾ÍIÍ-²m×®Ÿ¦¶#5³m›xôQç=“Ã8p€¶�ÒSùì½|ÙéNP?Å½£äI°¯]+½QQòãÎ�bØ°æ…‰ƒŠŠ
+ R—¥¥¥úí¹sçÜê»wïÎê¡¯JHHÈ€F(Ý¹sg£
´åÐ!ñ«_É!ã{öøÊÂ-1þüÿüç\BÂ3çÎm}ÿý÷�6GúªÂµºŸ÷4íßmºŸ£Ú[Ç³›Áf†|¾ùÜÍ›øî;ëà£Ë—¥J ºyútÇôAØ@í}ó†Ê=jÀh­JtèÐÿqF† ¹¤DŽÔPõ¤œ_ßb‘å-)ŒNžÔ¨´räÈ‘aÃ†QYzêÔ)£mq)cÆŒyúé§oÝƒ‡¿àÌ®e·
f³HM•Cÿö7ë­qúôéý*ß}÷ëƒ3gÎ8°×€2gBªÅ9qëÖ­úúzÎ¨”pF}é<J‚ÊßÁƒR¡�ÿ®vQQ!]ƒk…Á\¸pÁd2o¯¬|xãÆí“&Ô~nÆÈözq±¬z|°º�´k×þýúQëô¡úE>ÿ\Þgóf«—âÛoEß¾3Ý~ffæÌ™3Ÿ{î¹�ÚTY>@IIIddäªU«>ÿüó?ü°»3äj#n§$‹ŠÄÉ“rõEâ×¿–/+	vÿú½{³J8pàm)GÙyCÊB½TzöìÙR‚r”ÿí´©ÖIC°zÐdQ]]MM±+*úY{þüù*trK÷¤âà¬Ê7ß|£ßOoIÖ´ªrï½÷ÚùÜ=XuuâßÿÎ²q_ÒÒÒjkëH1„‡—@1jÒuì(Ÿ}&·Ô^ïÓ§ù3]ì¥¢©V¥½jNÐ)SÆúû�¿r¥Ó¾}ý©Åòüó}KJ:Ü¿ŒÒ`oÊ�?
+ ?ícçÎ�´}ÌÇ–	X³fMxøÿUTô$éçTÅ ÜÊÓPY)Eî¾}2øÄ‰[G�Þ¶mÛÞ½{Ù�póæÍÖ/§j>88˜Ú‚ì&åmCBB:rævHC°€ -•§N�*//¯P©¬¬´Ó�AK�6\Ç�!C\Ðµ±t©\¼ã�wäð
+ Ÿ¢ªªŠ^§Þ½öë÷éäÉµúÓ0£-ÆÀËä®]+6œ®]“ÞP
/s‚RáÙ§ÏS=z<Ù¹ó¸””ãáá!T'=ùdD@@CT”²n�¿þÙÝ�GydÏž=»wï=z´Ñ¶¸;A�
»w‹ÈH©ÙoÞ¼5qb}ÿþ++Ó
+ ·ÖÔÔ´rU``àÃ?<räÈ#F<øàƒT 0À
ÚµH¨|!õ@2âÄ‰ßÿýñãÇi{åÊ•6¯íÔ©ÓàÁƒé×ˆlä~j8ÞB‘”$Íü|áSã¢,X°lÙ²øøø™3gNž<ÙhsÜš#GŽ�RïÁ3z}$Cƒ©ÈZ¸P<óŒ Júðaïw‚jtíÚ54t�¸~=¢¶6xùò/ÉÂÎ�ï{íµˆ¡C¯�+fÏîéJ'¨
µµµ<*˜žÎ³BÎï†×_=-mE·n5áá%ÅÅ#œýuFŠ†
Ä²e
û÷wX±âø�9YYYÇŽköLÊ'ááá#!¹À+£û/^dõp\…
+ )JSÑÐúUÁÁÁ‘:¤FïË¿þ%|ªÞ¤š **ŠŠÔE‹M›6m»hA¤¥¥-Y²dþüùÉÉÉ^ ØµPX(å‚�~…[yy'++?ƒT¨�8°_¿1ûö½vî\HÏž×Þ}7—ê”~ðÛ¹sØ¨Q×Ÿx‚Zwƒ\Ðœ»téÒØ±céWýê«¯
Då¤³¿ÑMp½ÔÑP[KÏyŠ*Â·ßîQXx_�——/­«»hsÉ‚	&Œ7.""bøðáÝÜÍf(Ôt �uèÐ!‡TÊÊÊZÿWþ�½3‹âHÿx!‡r	”[@N‚%«Qüq-$#(ä0É�ä‰1>îº“èæ0ëf“M6`%}„UD‰
+ x�2ˆ€€Ép(È*Ã±owIï„{†™é™¡>ôÓS]ÝSSÓUõ­·ªÞ2éàíííC#
‘“ƒ¼½‘zÿ3B¡2
òY_ßfíÚû÷;N&½*
 Þ{ï=8Å êÒúÞVV Ú‘»{÷–-©§N}Ÿ““CŒ ÃA55§ZZú8;ëB¯·wÅ7ß¼�NN�QQ_wttôõN›fµd‰…œŒ h``ŸC†§¤¤ÈÕ]�’ x#¨âDŸßýÙg
ÇŽ[Z¶EGgæååee]ár§]\\–.]rÁšquF�›IiŠ‹‹¡ ŽßÌÌŒp2kÖ,I¿jR{{jlz:bÕ5¢|�6ï‹/¾€w÷½¥¥;oÜ ûŸ�#0*'°iaùònƒõõõû÷?ÈÏOª©9>ldbÉª¯okn2k–ù’%�ííí9÷o¿]¢¯/œ??ËÙù˜žžž¹¹9N••ÞºÏðn…††rq¦–°b•»hhiimÎãñšš,wï±°h06þ¡¦f7žÜEŠÙ2�3GšL�(·P†Å}¨Õú4ð
+ Âq¨wáa9uŠš¶r%¢74PC233W¯^�ËÈªU�……3ÙtVZOWf ÓNœ81(PU¤ÃÞ½-}d$j>÷Ü/"Ñ§¹¹¹C—!#(vË1ì¥a� ææÞ‘-öðxBù–:{ÖõâE{cã;3fœ¶¶æ‚°ÀÝ©5¼xÏÑN7ÝÜÜà�Sò7mâ°e•—hhhhøá‡Ô³gM¹\ß�;/#Ô	•]ffÃ½{ˆ¶àC�<Ô‰=AÔÖÖäççshZ[[GŠ	%«¯¯/8‚ªÅ¸zíe¿eÖdª�W+W®ÄØÈÈÈW_ý¹¾
l.Íƒ:ñ*‡rJ>¿;#£ÒÔ´V \½ª{æŒA{ûçõõ¿ÂÄÊmó‡~x™ñ’=C� 8gÎ]ÝõÍÍ!MMsž¾pùò_¡	LM5ár5´µlmë-r�ÔŠgAêêê‚bÝ åÏS#¨›ÛGeeV˜TÆ¢þ¶ÔÔÔsçÎiiief~ZWgfaÑ`g·£¨èg¸äààB!$$ŠŸ–*:S#îÞ½Ò!ŸææÍ›P°GŠ	…pÑ¢E‹i@CŒTc¶·Sûìy{Ë-ÅŠE\1XZZB‡IÔ­ª‹Œ••49¬»�lii9}:÷ë¯í9'CÃ®-[rr²Ó1‚Kuu54äxSé”ßP#¨¶¶®££�££ciéÛ7o.ìë›²ys–µu~UUU~þt‘¨ÙÑ±ÃÇÇs<FÐÀÀ@hJCCC¥ý}*‹FPÙˆxÈ¥K—’“Op8Î>>ýÝÝÝ'N<.)¹Äã�‚Æk…É þT‘¾¾¾òòr, ®_¿]‘H4RäÙ³gcõG¨>˜åUo¼�¾ÿžòA«+Ä´.\ðPŽ�7T]4@3uú¶mÛX´4444üøcêýûffÐ¥±}ÿý03³BÆ´@Œ £r
+ J=6@çPVm³¸´¨¨rêTW×èdîß}ÿ¾‰¶vOtôWÁ�}}óæÙŒdeÜD�¯ """^{í¸"� 
 ¿ÿžšQ¬£ó§+W^ïîÖöõÍ××ß‚ÝÏÏoýúõPüä4W– '„B!Èÿëp¹Ü‘bjiiÍ›7gçgÞ~Û¡°P£¬LµN;vlÓ¦MŒb¸xñ¢»»ûK/Q[nÙÂrÚ†�. l;ñ‚u¹€� GŽTüúk`uµßöí™::7³³³¯]».
+ ˆt<¼üòËIIIøü­·Þ:xð <¾EÜz÷n—žÞ³ZZKÂÂ
+ œœfÃ_³uëó½¦¦•¶¶{+LMM}|| þ‰ŒŒ”Gb”Ö� RŠ†G�¦ø�@0ï�4°±±©¯×IN¶ÁnhX±aÃ†¨¨¨I>ò§6455�tÈ£�÷õñãÇ#Å43³
û÷›oštwwƒÞg}ËIikkÛ¼y3¼Öø#(†¬¬,777>Ÿò�þúWv¨]=Á¢\ÀFÐ#GŽÜ¿Ôíùó/æåÁ»™ÛÙùÁýûÙÄ:~˜i†ÅøB7‚‚’hk{¬¡±¹·×G °Û»÷Ì”)¨»»ïÃõôîßéï¿leÕ?ÔªN(ƒTJÑàïïoaá�žþÿ}}SÞ{ïóë×ÏVTT„‡‡ƒ\ð!+ÒÔ(Ãeee °Œ€óA._ +ðÊ+¯øùù¥¤TÝ¾�äëû4^”áåå¥äÆÞóçÏÇÆÆÞ»wœ3gÎ©S§p[räµ
+ Yl9NÄý4°(°ôôéÆÎÎhGÇé/¼PR[[{î\QAÁ%ÿyÄ*"‘hÙ²ePðƒ‚‚ ¤¤¥¥)x,@Ü
+ •Ô6––^EE;x<kSS¢}øpÇ³ÏêéI¯®®ÖÓ›îåå‰ÇR���5T‹^%1‚J)¾üòËk×®••Eòù?z{÷ƒV€×HÕ˜$åñãÇ7nÜ`2½ø"(h[FÆ§œß~èíâ@�ÐX´hÑ‚L¡”+û÷ïÏÎÎfB@÷$&&NŸ>ìêBW® ÀÀÉ¾3ø8Á!Ù’ØzôèQMMM;»èï¾‹ÑÑÍ�{¾£c³ŽŽ1‚N333>ŸÏãñÌÍÍÙN‹¸4_ °ÖÑñmlô	)óð Z¢}ûVµ´h•|ø°ÄÖÖ¯ˆt"H?<±zõjPëëÖ­›1c†Ì“EPEjjj°†€cþÌÆ–ÃIDATkë¦Û·£-º\Zº²ZÝ!XYY-zö
+ î
+ twwƒr¹PRRÂBiüæ›oBBB™5ƒÝ½'üýý­­ÝŸž6M§¦¦ö§Ÿ¦¶µý;"b1‚Nœ{÷î�Þ‚?·®®Ží´FÜZTT¥»·÷Ýöö§›šì>þ8ÍØ¸³££ã«¯<»ºª…ÂlmíKóç»#¨t°¿aA-éíí=x°ÙÇGÐÒR¶oß>�£o‡c``àááá*†��Ý˜{óH(›š‹/Šû†nhttô'Ÿ|2Èd
‚gêT™§‚ /°!cç¼»»;1‚Ê�´´´°°0ÈÏôôt¶Ó2ŒTDmm�‘‘‘½½SfæG<ÞLè›üóŸGZZîUUU]¾ìÔÖvÁÀ ÆËk!1‚Ž"r§µ•òŸóða	‡Ã)((¸uëtî…BáèwM›6mîÜ¹ŽŽŽ¶4666øD¢"
ÝÆÇ-�ŸŸ_^^>(è•×_=..ÎÒÒrèöìAß~‹*+‰tP
ˆT~ìÜ¹Tõž={víÚÅvZ$ƒ1‚r8wM�œZLLÆÇoDÔ:[Áo|Dï©ñÛÝ»mÆÆ]Ä:
+ D4äNp0*,DgÏ"fžooooEEÅ­ŠŠŠšššÆù4---hà¢{ÊP¶»ººÐÚÚ
+ �å
wuu�ŽŽ~óÍ7G±OúùQÇÜÜñÿ\A=Y»ví™3gÒÓÓƒ‚‚ØN‹ô@åSVV†Wd””´77;Úq¡[RW7s÷îÿ31i³¶æ˜›ïQ[[«««KŒ âÑ@�;·o£Õ«‘PHõ×ML†�ÓÐÐPZZZ^^~çÎ�r�'�Äèéé®Y³*¾1ç~wv"[[´y3YlI  ‹ÆÆÆºº:+++¶Ó"3 [z‡½—ÚÚžš¿®.ÏÙ³û_~™êå›=:oúôÛ¥77åóùhÒA‰h (‚ÚZ”��6l�à–¶¶6\.8Þ“·–æÑ£Gãˆt‡¹¸¸¸x{{C™ÿúú(¹£ŽK¾		PæY�2„1‚Â$—ëXRÆãYTFEÝ€JéÒ¥þ²2C�à�wZ$ú]]4IŒ D4Í�;ÈÅEúÛ¡ìµŠÑÞÞÞ×××?€¶¶¶
68š››kjjÊ.íÂ$E…fAÊ–†††ââ²ª*^O¿§§çüù¥ÔZ…ÐÐBOÏÿTUUÝ¾-ª­åòù×'øEªbU¨hÈÎÎ^±bó^Á¤¤$¬¤@Á…‡‡'$$,\¸Paé!(ž‹©­´?þ½ÿ>ÛI(yyèé§QBqqññãÇ,XÁvZX¦ªêaFFËŒÍ³fµkiiÅÇ;eeYèëŸ}öG„NUQp…ÂŽÑ¢ºFPDVÕÕÕï¼óÖ
»wï>tè„dee-_¾\aé!(‘ˆÚXåðaô÷¿S2Y™ÉÏ§CJ
+ zñE¶“B ”•Š
+ tù2ÕÁØ²¥ÇÉ©ˆˆÐmhèwwo	ùUW·©««K�Œ ÒL½uë´ý&&&ÐÞCá#±!Ô\‚�ððð¶¶¶A·ƒbeƒ¥$Za’ ­�~øíÛ‡^z‰í¤ŒEFš2…²‹ÂH8;£W_¥æ$.X ¥§§š`Íš©––ÓÎžµX¶lYddäúõëKK£<ø“¹ùj__?WW×Ù³gOD1@O?7õöÊðGH€4¢áƒ>ÀV�°°0|ŽÃsrr6nÜ˜œœœ˜˜òäÉììlƒnÍá
NðÈ
¨
¸qB¿ƒ :hh íÛ^BÿàØNÐL›†ÂÂ�Ò8z!ŒÜ�öt`<==áj6
îðˆ£!Ä„
+ Š¹U–ÜRMPa_�Û¶¡_~�÷�švôô £G©í!¼½³ß_Nyï¿1àp�¿?úùg©“<!¤Ù”�………Ì”
P	piÅŠ.Œ‹‹ƒ�ags024GBB‚té&¨}}híZJC¤§#33¶S3P6u;ÁÃ£Ð±�l¨nˆ‰‰�È¸ÎårA+:tD†-nb@Fai5iMÅÅÅÅëÖ­+--z‰1%hi¡ß~CuuQ!õõ�cT„Å‹)—Ž’Â®TK”º¤¤$P–@�§¦¦âpfqs‚=j
º=++OtÇ"CÚ”TxïwíB%%Tù‰ØN
A½€ÆÛìíí±‘€<ÅŠÑ¦…Aw�2€öú3¡¡¡Œ
zGŠL¹"ÁÃÊÃ^‚Lƒ«8Ó Ž¸3c&äí
+ 8a3�½’kè-j†H$ŠŽŽ.+++((3²µ5ÕGÂ˜š¢ÌLô—¿<Y6	@5hcƒÖ­£FoÇ„]#¨4¢Þ�´´4Ð
………ˆ.œâWA%`E"bÆÆÆBÙƒwŽ)�Cp0eÇÛ±)Ûæ‡£K—ØNa@£…è.
+ (\a»&chðÕAwÕÔÔ@S!fßgˆ9R³ªÞ@Ÿ*sœi ±)ÈOÈUÈ[¼òÛ˜¡Î%²÷!dPë fÄÇÇÃÉ‰'$ºqêTÊN¯Õßþö$zPÏ<ƒ®^EiiOBŠŠ¨P=ÅØ¾Iø…2¥_r@.0·C¹âr¹�wÌ£àbF%ðU\2³h�˜¥AœQ.&÷ï³�š¾¾þ§žê�Šb;ÉÁu®O ½�§Atý.^ÉˆWYâ#4{Ð)¿·(ðw(æwÅÅÅa»/Ö8=îÀ=ˆçŽ1ñGÈ+¸
+ µ=D†¬ôpµ$77—Ù
Z:Y=¶³óÉÉ×_÷kjBöoÚô$¤®®¿¶VVß#=ÒÌi€¢/–øPÖn|Þ$xu°,ÅWq†2eØgBÌ‘.&	?ý„^y…:³œ‡š¡©Êþõ	¿š®qºCÌIhWÀ³× ®~‡ò!�îóbKƒ§§'cžÁ@ýâ`èH4c¼ÁMÀ˜NŠT”ÎÎÎ
6ˆFU«««óòò/^<ñ'3ž6m¢F+òòÐÌ™OBà¯øüsäèˆþõ/$æðHÑH¹ë¼+â
+ t(£_%†ò‡?P;Z…‡SÓ|ØÅÄÅÅ¡U«XNAj˜©T à<''gèÚo4Ð°
;`?©8tè´îxV#œ€†€£1
£lmmÇ¯à	áááp£¸ÎP'tuuSSS÷ìÙƒhaqýúD=BÅÀ€ÅX°àÉÇ×^£ÜÛx{#v}rÊ~«.A:ÌÌ(‘o¿�–.e9% åAÔ“Å–ª´vIIIP­co1ˆ¶º‹GÀ½d<Ëoè€ýd&  €›<w�ùˆ÷á‰k±4 ð¤7uÅÍÍÍÐÐNV­Zuüøñ­[·Êû]\(‡x))è³ÏäýU£!Íð� 'ôõ)û†Ï§|9(v#{‚ÊÃ•2£¨¸»Œ~?FƒÏÇ<ý’€džÖ*SSSSMƒ]\„††&&&‚8HHH€øx!=Ü—’““!ó!Ä´£QôïQ•••ptrrb;!
+ …XÊˆ@€–,AÑÑ,,Å<}šM”d+M‚’‚GQÉv6c¹äééibb’šš:ÔÕdc2
è¼ZB°-n±··Ý€'È8pÑÃx)¦z{Äâr¹ˆ^NÈvB
+ Ùå’ ¤ìÛG-Å	ùß$ÅJåÜ9ÔØHŒ„É^'/>½qL&¹s§¹sçVVVÍŸ?Ÿí´("Êt]Pd¤â¾Jƒ¹9zî¹q¹X!“==½ÎÎÎ‡âÉ
JŽ¬ž (/±±ÿSÃ
³Ê…ÔTÊu<�@ ŒBuu5(SSS¹*<Ê3ÒÕazÊÛ}'
ààAj5æpþÝeŒ†µ³Æ‰@ †ïS%ïY�	4Ý"o÷�D4TlN[º”òÐ.WÈ`�@xé„<Ö†hhh@ooo�·‰Æ+S E‡¸Å
EEEL8Ø`eÐfl¡âûÞHJJÚºu+ˆÆSøÉ“'edMOòˆh ¨èÚ5j�¹Êz>ŸšÐÀ¦Sw� "xyyíÚµ+R>S® ýÆ+`™PÐÞgee
Z‹7n�‰‰ILLÄçˆ^o<ºûN�ðpxö¥!‘ûNâ§� ØØ ï¾{r.PdÎ¹s”÷hø"�@�ù4rz84ùâ£Ð¨ƒVÀÞÐ¡É_ÈºqãF�  âàIŽ’ºïÄƒãtßI,
£©	Í›G-È”9W¯¢§ž¢¼´‹Éði²ußIDAÅ01¡æ*îØ�vî”ñ“ÿñtó&qÏ@ dtý³i&øœåË—ãŽxîÂè`÷�Øw'|

…”€8€#„c§ŸCÝwb1&D4TmmÊ‰Â»ïÊe‹
+ ++Ù?“@ ¨ò^åˆè…ŽãiûÅ9yò$´ôxfÃè1åî¾“µM¹	!Êà!\nW—žC TšBš‘®"Úëö˜�ØÃ4tâñ*G<N²²²ðÔ¼Êø�çƒn€¼Ò!!!A¢Ûüí€¤7‚XªÍž=hÙ2ÔÜ<Ñç¬[G9‚$“…­rDÎR'<<ïÚ*Ýžãx+–‰;ü&¢� ÚxzRÎ–,A<žôáóÑ�hd“$�@Ps³ÊÚl|"iòà..—‹IãßDæ�%—Õ&8ýòå2ÒÔTú‡ÔÔ ´f�ì’E T
+ E®r”%ÙgœX*Ï3Ï ”j‚$ðßöîßµÉ-Žð[E¬ƒ:	Í(.UpprM\Dlt´ÕÁÍF7§ÖÙ!ñ/ˆâà˜Nºí"ˆ d­ËÍ¢ (Þï›Wjõr¯ÇëmßæÍóáô¼?8�”óá¼ç¼ç¿m¥}òdöæMvêÔÿÛ.`llÛ*Çq'4Pñ/yìXöôiÙíÆÜ­rÜêfo¡�êØ¿?HÑlþÚÆÖoßæ;[~ü¸eÍÆÐV¬r¬€©/¶è¡BÞ¿Ï.]ÊnÞÌ—T$ºw/‹ówï~kVP1ív{vv¶ÑhDßßl6—––æççé‘Š‡¿¿faç¨¬â§ýÓ7<ž>�¾x±åíÆH„†bØ ÍQè÷û%®YØ9„*ëÖ­l}=ët¾Î‘ü'wîd33ÙÕ«ÛÕ,`LF"+Dh(»-;…Ð@eÝ¿ŸoQqî\Öëeûö•Ý€ñç=
TÖíÛÙáÃù†×{÷–Ý€J0ÒÀ¤ˆ_úó¢æúõln.ß6€Ÿ²ä’‰ðúuþÂéW¯¾«|ù2{ø0$)„&ÂçÏù¦VgÎdÏŸ«|ö,Ûµ+;{¶¼fŒs˜Ç�çqáÂ…lÏžo•/fG�z=@*s€$O0‰®]ËdðK„&Î§OÙ‡ù+._.»)cÅœ&ÎîÝùŽV‡åS#HgN“k}=;r¤ìFŒ¡HbN�Dh’
@¡H"4I¬ž€ï‡Ãµµµ(Ôëõ²Û°³i€oºÝn­Vûc$
+ EzËËËQÓl6WVVJm @™„øj0´Z­F£ñçÈôôt…ápIbaaavv6Î‰š�$0i„ªæñãÇµZmjj*>£œ�zúB»ÝŽÐl6ãèÁƒ#
+ l¾ðÁƒ–––¦G:�Î�7âüG�Ebˆú^¯WÜ¿œ/P6¡�ªiµZÑÇ÷ûýèø7bÁÊÊÊÌÌL½^�š(G÷¿¸¸¸¼¼Üív7.\[[‹ãªâÏ(GÈˆ«âV«««ÅMâ3j¶÷ì6¬¢j¢×/z÷+W®4�¢2@§ÓÉF£óóóE}T¦'€�‡sss[Ðj€1`¤�ªé÷û‹‹‹Q¸{÷î‰'ƒA6J'8p (ÔëõÍ¡!Áæù
+ ‘<"a—·F".C“Ih R¢×¯ÕjQèõz�Ng8½þ†HOž<)ÖUNMMu»Ýív;�?>ê#W-,,D!RE�Ó"1Ä	qò7˜ _ Z6?>¨×ëQS)Žs6-†%Š£‘36ŽF\X]]�ÊÍ£!Î/ç‹”ÍË�¨ ÁHtöÅ:ÉÃÿ~4ór'€¿€$æ4I„ ‰Ð$€$B�Dh’
@¡H"4I„ ‰Ð$€$B�Dh’
@¡H"4I„ É_rk>�Ø
+ ôÖIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-4.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-4.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-4.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-4.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,36 ----
+ ‰PNG
+ 
+ 
IHDR^´SáÓgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ 1–wk}þIDATxœì�	TWºÇoâB« **«¢‚‚2ê¸�#‰çå(!#Æ¸<M"'cô˜IÄLã2`â1yq0N4Ñ$bŒƒqaqŒ(‹ (˜ne‘¥UA¡ßwëB§…¢é¦«÷ïw8unWWW]ºëþïÿ»u‘\.'‚ Oceè bŒ 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 ÂJ‚ < 4 Âƒ—Ã59ÒÓÓa ‹
�ÄlA×`Jäääxxx„r@"))Iñèì4\ÖsÃÆÐ@4 22œ‚D"qww�ápçØ±cÈ„L&3tó¥ÁdHNN–J¥iii ð2>>ÞÍÍ�½åèèñ4D°­Ádˆ‹‹Û´iSW¿—êwDS°­APL×É^Êd²ÐÐPˆ2š)ÄlAi0fÍš%‹cbb¤R)èBll,ÈÓl†4@ÒÒÒ"##=<<ØËøøxÖ$‰ ‚ƒÍ�¦vyBôJ‚ <`[‚ < 4 ÂJ‚ < 4 ÂJƒ‰‘™I®Ÿÿ™Tï1tF3¥ÁdHO'��dòd²í3Òk�¡³ƒ˜9(
ÆÎíÛm	ºýì3²ýÍÍ¤î°DB^~™<x`À¬!æök0R?&_~I¾ø‚”–Ru°³Sz¯ôMRýÅÉýE‹È¤IäèQâäd°|"æ
+ º#ÅÆ†lÝJ|@:ª·�imøŸM‡‘’ú‡ ‚ƒc(Œ…û÷É7ßP›ð��¹s‰HDÎŸ'ÎÎ|‡öâLÂ“šˆW©”ôë§ßŒ"–ºcáÃÉÊ•4amÝ¶‡_ç€Ç5°QèÂ;ï�_Õm‹¥Á`€MøüsòÞ{m/W¯&/’Ë—Éœ9Ý}Ò¦Í5(vÜ½K$aaäÈÝä±<PCy9:”Ú„_~ikJpu%ÁÁê}¸WGipt$gÎ�ñãÉ·ßê ¯ˆE‚Ò ?À&|ñil¤éáÃÉ[oQ›Q€H¤á‰”
+ NN$5•$&
+ ”WÄâAiÐ›6Q›°|99v¬mÏ»ïªm:`3�‘²k`ôéClmiâêUò÷¿wz®� š€Ò CÀ&H¥méAƒÈÂ…Ô&DFj}^‘5±ÐYüø#}äM;G HÏÀ‡—:¡´”¼ÿ>Ù¿ŸÌœI»$®•QHz9u(”ËÐ«}äQRBÆŽôºˆÅ€½!…ji(“€DBüýÉ‹/Ò"(HW*˜F¬ÈØ*©ª"..:¸4b`@!™™äÕWikBm-}éáAª«ÉîÝºÑÂµD>¹£ú….lÜHÊÊt“
Ä|Ai†×^£áCd$ijjÛco¯Ëë©(”ÿòé§dêTRP Ëü fJCa6aß¾¶—{ö�Š
+ j†
ÓËåmœÉ“Zuÿrú4M@ÞD}PzBb"�7lÂ­[m{||ô;–
+ ù#ÒÒ Î±~~TÈ¶o×už,…ÐÐPQ;IIIlBB¼ië£4¨”®øø¶ô¼ytÞ°	k×(7�:DªfèÐ¶¡—.QƒƒhI@@@$Øzb ±±±l11Åúƒ¦>¼ìžæf«C¡_CÄbÚIaÅ
+ ƒæIÑ!ÒÎ]£Ï%$�ÿ›TV’uët‘-KA,Ïš5‹¥“““AöìÙºÏÕà&`§©¯9ˆÒÐ%`<=©
+ ØÚ’3ÈÒ¥$*ÊhF@wa¥&_}E{InÙB/ÆG›=G&“±¨aÇŽ°uwwÁÞbûÍaÁA9Ò‰Ã‡å'Êá»ÙºÕÐYéŠÆbùy"¿³·mm•ß¸!x†,…_ œ$&&*Þ‚4
+ ð†Ë�``[ÃïÈdO%>ûŒvX2RøFX©‰HDÝÐÚJ>þg—ì	 ¬üH$’Å`À8b8àevv¶As'(
äáC:oB` ùÓŸÚöDGÓyV¬0šð¡3ÖŽ4Ô< PæüyòöÛä™gH�V§A(qqqIII Ï=÷ÄRÅà“¥�vRŠ�¥‰¥KÛF+j<JZÿ@mi)
S§’C‡È•+ä_ÿ*[–ktuåP<Ñ4],q›…q÷nòÝwÄÛ›î‰7½f£<?b?†Œþ^ËÓ’1cLA
ýb‰®aÉ:½H¢ÂH›ž.6ŒB€H`ìØ6]8sg—D~Ç"\³	tM '‡‘ìá4*ÆÃõäQ™�/Ôù¦L!¹¹ÔIEDuJÄ„1i¸p�<û,m‡�Œ¤sœ˜’¤.™Lªê|à¡æÎ¥Ëáëxlb
+ ˜g@6aÿþ¶t@íÂxñ¢yéaE­€Ó¼±Ù%OžD]è‰D±k×.H:/ºÂ]ÃoÐ%áÀ&@ààïoèÜèŽŠRK&Õ›‚ŸûÉ:„léRKož„ÒñèÑ£‡�8xð`]�•�Ýý{÷î1ÓþÍ¤£4Ø„æfÚ©™p=y.$Ë–™µ.¥V:�†ƒé˜‘A‚Í[e~455A!ðàl;—FçÚØØœ<yêÎ�|�_W­º¡ÿœë“—†¢":ÜÂ‡+È¶mtÏ§Ÿ:OúÁ†[Üêq
±%ø¹A[ËÊÈúõdöì¶¶[âÉ“'¼…üIeåä-[rBC¼½áe+Ô!OceeÕ»woggg‡Nôá¨¬¬Üµ+³¡¡wSÓ™^vÎO#ÂT¥Â æu¥Rªp+/Zdè<é
ÇekÊºuä�$Ó¦éèô=¡¥¥EEõÎÒÐáƒ"‘ÈÞÞ¾¿µõ�k×†6�Õ¹Øöêµ²|÷ÝwÃ†M¯«kööþÍÉ|)7½¶†ÌLºÐË¹s$/dž†è¤G3Ô*ÍJ<~üØÚÚÚÎÎÎ–PÉUõi*%9îÄó+â£ëK¥¥//2r¤®Îß!¤g&¿3MŠÙõ”€ßB¹Vç-óàD¬&éÝ›ÎÕ·e‹6¹
oi!£G{½lržJmLÌ547Ól‚Mhh ýûSuèV T×ÖÖÖÕÕÕ¶Ó9ÝÐÐÐü4�
g@)˜FØ¶éþýû;rˆÅbÅ0`ÀàÁƒ]\\`wªß…#¬4Ê#ÜÿPƒ;F'ŒÒüãMªëy!½¢lÃ·Ç[æA4hgg-GŒ”””­ZµêèÑ£ëÖýM›S9& 
Ì&¼ú*�sÍÖ–üôñõå—�€²²2©T*‘H”·êÂ1ÛÈVªÓ„~ýú1�pá>|øÈv ÝKÍv?ë>Dd¯»€B��II¡‹ô‚@\ºôû3ø¶Õ)ó¼!½¢lÃ—ÐU™iþŸÿ¯�4|þùçÞÞÏ••
tvvîg¼ÃïÀØŠM›H\]²mçNÒ>øµ�òòò\Žk×®1¸uëV·U½úÀÌ¼”U–-€:�y
+ Hx-å‹2ÄÍÍ
dÂÝÝ}ôèÑ£8`'ÏÑÙ#ˆãlâù¥°yà
éËË­
æéÙ’——ú{º
+ éy‹º²áo%l†5`ölê6ÏžíÙ§«««=<<\]S+*&ìßŸú—¿Ì6wF…1º°	¿ýF×wžžNF~¡éòå¦pwÂ5OÎÇÀ�»J@ `û4Ý:U(BL#bÜ»wO&“ÝåPN@n«ªªª9àà®Î	rs›ãÜ¹sÊû¡‚�`JÛ±6êN9Ï€j Ûf¼®Bz(Ïwï::9M;vbIÉ˜àà[ªBz£\ƒÃ¥·mÛÖØøtÁË«Ä¼u�›k¨¨ M	ÙÙdÄrãFKaaÁ‰'._¾Ì¬AçjªP˜]]]A×Ý9X¶àÒ­Ù¬©Æ(“	ØB°sóæÍÒÒÒ2ŽŠŠ
+ 5Íü³®v~Þö~Sÿ×ÏÏôþMfò»jÆã�}”Cú®šñ…P~ø!�åaófÓœ]òõ×éÜ˜jW*ÊÔÔÔÀíäää=tè��6ø
+ ž;£Â(\CV™8‘NyììÜâìÜ´xñ•ŠŠmkhP5™ºX,ž0a‚¿¿ÿøñã===ág®n nPÄ>>>�ß‚²
ahˆÅ�7Š‹‹‹ŠŠJJJÀŒt8äÆÍFø;œöÛ¥ìDïC‡…”ÂÉÉ‰l¡BúµkéJÜë×“�¢4š‰®A&¿G4¯*¶nÝ
+ šæ±dIA„A3°4ìÛG¶liÍÍµÚ¾ýúãÇ‡’’’ $ð	÷½———; 
+ �ë9·Âñˆjcïèè8nÜ8°p0Ü”µJÔptp| w8
+ ÚWª5±___Aæ2íÝ»—†{¦§„“øÒjkÉàÁ}|kBB$àÆc¿ˆÙcic[SsnâC‡úWW÷õñùöí·?|ô¨ã"ŽPøgÌ˜1mÚ´€€ðÌPÅ$·šE”·ã½føy[ ¤gõ9{ŠÁÛŒgoo!}SSÈh~~>A>‡T*í ·8~þùgö¬
+ hDPPP0G�•B$ú}àvF]×ÓD~N7ÈTi€_3**
+ ~¯>}FEÛÛ{ë*{Æ„^Ûjk›·m«8p@ìê*‹Ž>~þüù´´3ÉuåcÆŒ3}úô™3g‚(Œ1BoySÕe^EH‘ŽŠ¦ûÎ!}Å™€ú-›#//ï!_n(d†hzÅ;wèÂy¾¾äèQbÝSSé}Ð³3ÔÿÐo¼ñÉ'Ÿ@Â×÷ƒ‚‚
/šþdj i¨««ËÈÈ¨¬¬¬®v�‹›7dH…X¼·´4Ž!(`Òfp€(ÖÐé	…òSú®šñ€Î_—µµµ¢ã½Šf<�<¥W	,×¯_ÏVBõ3ˆ>˜LLž<¶Î¨s•#GhpF(ß:%/�Žºûþ{òÂj~âøñãsæÌa¿ûìÙUÙÙƒ«ª,b@ª¥¡¢¢bïÞäcÇI$!6üÂ°	Ç�W”—§ÎÜ†‡‡GDDÀ÷iå�¨Ò3-€Ã:|L»¢Ì«À�Oé5¤¬¬ìÒ¥K™™™Yõõõ]	ÿ»��OHHÈlA»U´ïž=K†×a7j!¹}$�Î ®Þ:ð]………Ý½{Ò,Xºô œ FçÓ�á¥¼@rrò/¿üõäñã›oÞt›àî¾>7÷ ¼ååår0oÞ<0ZV¤Ò«ó”ž7¤WÝ3‡ÁBzmrhä”””€@dr\¾|ùA×+R€Dþ�”¢«@¯¡�„
+ ÒYŽµn�ò÷ß§`»CYÀRåççë´36“8ÏéÓ§“’~ÈÊò	î7s¦Êä?Ü¿råteå¸¥˜"Œ7N�S©îxÏ?„ý�?«:¤g†nt�Œ2>@g™L\¸p!//"¬®6lÓØÁWÊö¯XA¾þÚèg—„@iÉ’ß—6îe]€ ÷Ô©S~=@bÊ 
Ð~ýõ×¶¶/ž9³¼¹¹WHHfŸ>ëÏ�;7eÊ”¨¨(gggv0èE·õ|W!}·õ¼ABz³d7;;ûB;*¦9ƒ/|üøñL&||¦½þºWv¶èêU2JøI$ÂË‹®À±w¯ŠC8°lÙ2….¤¦¦úúú.ZDgÖ}í5}åÓÐô\îÝ»÷
å§Æ?ÿ|¿‘#GÞ¾m›”äÚÐðO;»¼9sæÌš5«oß¾Ê¼ê�^E3ž­­­Öÿ,ÒCª««A Îs@uzÿþý®Žtrr›?ÿË•+@àîîÎ?ôÃ°„„��éˆ1>d2ÙêÕ«á¶f/AÒÒÒÀê²ž7’wßÕcV
JÏ¥aêÔ©C†=º½µÕjíÚ^¸pê™Q£FùûûC`ÆŽÁ�Þü€ÐãêÕ« L, Ý¡g7øˆW^yãþý7òóCB&³“&M2ŠX}î\�::P§'OžŒ‰‰)//g/===�9ÂBà}ûè@ylÉè¹4ìÚµëìÙ³W¯.¨©Ù;rdUxxø³Ï>Û¿E™Ç�ÞqñâEEèQUUE8'þ·””Í^^Y¿ý6³¥åÛéååUÈ 6™§žùë_ÉéÓäé)%%eË–-éééŠ= n			`{ÙË¦&º„Ï3ÏXÄcK†VD
QQQ.
A)--eJÛúúeùù/þ·  Œw4çðáÃ”€ZZþñÍ7éü\LQÏ�@®\¹¢x‚ˆÝ»wÏ›7Oç91nŒkä%bN´´´ìÜYü ®îêÇb¡b4:ážûùù�UÂÝÝ]xãùÑG¥6¤|òIÊÉ“©©©ÊCølmm£££?úè#E«9dÍt:¯J¢êëi7ù»w¯dee]ºt)''*jÞÇÏÊØÛÛ�=ÚÛÛÛ�cäÈ‘,¡Q$òðáÃâââëíd?^XÙqÉ/P¥åË—¯Y³FÑL¦Ì{ïÑÅÄ‹‹-K P}A§áPž]<Åµk×rÚÉÍÍ­®®Vól6668 ’…mß¾}­ÚaÏî¶S__§Uq“ƒ7§°råJM¤S¦ÐíÓsë˜?(
ˆ>ÈÏ§³K‚K€ºw@KêTTTrTvªÞÁ��gþð‡?GG‡‡‡w;ü´±‘¸¹‘Õ«-è±%¥Ñee$=]³od2È„D"a³`)æÂê<±�
+ lmm½¼¼F·3ÆÞ>(:ÚþÛoÛ¦TƒÖV*jí}>-”Ä‘1czþqê•hhhhmm•·Ó«W/åùþ]\\žšþïÎÚ{içN²j•öÿˆ9#×‚YJý€1KLLT¼¿fÍmNŽ˜+§NÉ­¬ä›7èòOžÈE"y\œ:Ç‚àœ=K?a�hûd(   �111R©4==±±±999Zž1K¦O§+­_OknbÀêÔ +‹Ž·8xP×y2F´ŒžMá’““¥ÜLÞnnn‚LCˆ˜%lvÉ	·L©ÚÕ¤¤ÐåÑÂÂt�!cD[i�Éd¬{éŽ;V Úg1WD"òÖ[mi¨¿ô;»¤ÚÒ`oOæÏ'éÏmp´•ˆBCCI{[šD#Z[ép'P
+ ½Î.éì¬æB5
+ ý²@´mkƒÀ-$Éâ+Ï!Hw€]çrå
+ �º¾ë¹c„Fë•/-‰˜ˆrâm•ÔßêB 
µµÝõÍ7tˆ¦.=MGWCË¤R)¼+Õb=¾ž�Ò€žiÓÈK/µ¥oßÖýõ@="*×F“ËIl,Ù½[WY‹�ÖŽj»
¢°iÓ&ýKƒVýDXöï—;8ÈúIÇ—IL”Ã�/‘¨8äâEzÈ¾}:¹>”»�7*ï�—¬0fgg³G~b±˜õRUx+  €Ûúúz8c@æÏŸÏöÀÙØ8NÈ»§ûL
+ ý_#HÏ¹sG>y²ÜÚZþŸÿèò2GŽÐrŸ™©â�âb(rrnñÀžsóæÍ¬¬¬sçÎýGnn.ÛO¸fûYíÈ•¤Š7”áC‡±=PŒã¹naÅž‰Bbb"ÛùÿíÝKhSYð?X„NµF´ZÅ'Ú…ÔGƒÒUk
ŒÑRp%ÙdåÂ‚`ÄZ7
+ b#(ø@S\Xš"(ºÐnT�©‹ ¥)º‰z5(ê@[œïÜc319Í¤6�äæ~¿E¹9É½9ˆ÷ËÿÜÇ¹ø–õ»XÛD‚Uô[hÁ¦Œ-¹tž“¬RA¥ïž:0ÙØ8Í_#’z$òë×¯Ç�ß±cGCCƒnY½:Û¤Ó?~|ùò%ðËX}``@ìâß²¬‘‘‘gÏže®uäÈ‘õë×ëeìÆMMM™ŸÁÞ‰D¢Ñ¨>ýŸH$P&ˆ}maòg_@Z1à¹zõ*6…�a,tuuéLAûðð0"YƒwÓZrùGb4Pq©¨�Ó§¿/[–šá5ÿ3?ý
½½½û÷ïýúµÞoûûûñ7�ëI"õ¼ûØáõh`|p¡Ñ¼yóôé|ýŒŸÔ'- ÚÛÛ3Wñù|ø¢}ûöíÚµ+uBº\4Ùð�(�/$Å™3gô³ËÒZþskŒ*RŸ?~Â7nDýœï“ãÑ€ß|ÔoÝº¥›÷ÚrÙös�#K–,Y¸p!6¢£"XF‹ŒgÁOt
q€.!5tQ�„¢@—iÐˆ·P °
+ 
+ „P(„ìüz#![ZK.=a4P‘Bù€Â¹­MMã˜çjÎ™#ee±ÁA¿ßŸyä¿¦¦Æ²*?}ªjôËÊÊÊòòrý›�=pZg»Å`AïÌú°‚PèÝÞ
> ¼^¯ØG.Ãá0VÄØA·è`›i-¹ô„7eSQCÉ0{¶ìÙ“ïíVW«K ÏŸïîî¾xñâÝ»wÑ/\¸€uÀ¶mÙŸb3�P8èr_é C$9W•nIÝNfKvŒrŒDBòö ‹µkÕŒ7nèW¨–eéhxôHÕ,6äé»œ‰Ñ@Îpö¬œ8!wîHmm>6§ožäq>WáÕ�äz_nl””GFLÁüùMÙÀßJ�Ñ@Î€ÀÃ‡êø@~´;ÁV–¥4twçã+ŽÑ@Ž±l™\¹¢æPûÔæ” Þ¿Ï¬0`A1�/"F9Ï›7²n�œ<9…MTUÉè¨Ø—	¦zð@½³iÓTzW"
ä<sçª)ÛÚäðáŸÝDÆµÒÚ¹sòä‰‹žy›/y"çÑ³KVWOáV‹d4dº°¯f$F9~ØO�ú÷å¤ŸXkªb1Y¼XfÎÌGÿœ�
+ r¼ŽÙ¼y’Sº™¢aï^u$iŒr<¯W]ìÐÐ “xDfF4X–<~,öÈ¤0Èñôì’ˆIÜ÷TQ¡Î‚¦DÃð°¬Z%Û·OG‰JS©Éí&î¥KÅï—Ë—§½CÎÄª�JJ,&kÖÈÍ›9|”SÎgÅh ’2k–V47çpKuJ4J$¢NsP£�JŠž]rçNY¾<‡�ŽGÃµkÒÒ’}öy×áu
Tj**¤§çû²>’f¾º1%nß–úz—>Ûr"Œ*eJ<>Áì’ˆ†dlLfÌØºUø´Ö4Œ*e¨ù©Q Ž(/ÿñ=DŠ
+ ËÂ‡::
+ Ó½bÆc
TÊR÷q{<¦Ë¨'¸ÃŠ4F•¸@@®_W�ä–´œìhøöö]0¨&‰¡4Œr‹/Ô“ÏŸ�¿®ªÂŸ?£e—.©K!)
£�ÜblL�Çk»j¸Ý¿…ß_Ø®#†$·¨­U¡ÐÒ2~Ûµ}®ò·_ß/õñ´¥ï¡ [´H=«¾¾Ðý(FP�KƒrrÃ¼:z"P��ŽÊ—/ÒvÇ÷×ß¯~ï+toŠ£�Ü¨¬LÝUõvàÝ—_
+ Ý—"Åc
äjñ¸z&
eb4‘C‘£�ˆ8  ÷êëëÃßºº:�ÇSè¾V
äFÑhtåÊ•>ºººt{$innFc²Åµ
äFØÿQ)

¡jÞ½{w @‹ÅÐ.v�–P(Tèn¯k ×Ai€¸ÿþ
+ {j§ÎÎÎåöL’ºR‡ÃH
”½½½(hO‰ÇÈuÚÛÛ�;–å~"‘À(ÕbâÿìXQá€‚è¨¼^/Ž=Zè¾£�\§®®NìÐ/Q#ø|>Œ2ÄS 0ÐZáî™d9  ×Ñãìù===�§µµ¹ðôéÓX,†Œ@ptvvâcxK‡ˆK}#rA²(@„Ãáoö©ŠÔ]cË–-…îf!±j ÷â%OY0ˆÈ€‡!‰È€Ñ@DŒ"2`4‘£�ˆ
DdÀh "F0ˆÈ€Ñ@DŒ"2`4‘£�ˆ
DdÀh "F0ˆÈ€Ñ@DŒ"2øv‘š°%a'IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-5.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-5.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-5.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/CubicCurve2D-5.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,23 ----
+ ‰PNG
+ 
+ 
IHDR^´SáÓgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ 	-8ØùjXWIDATxœíÝpTåÙð'!„,r	P ‰—Æ	P-0k‹J+–­+%µíÔ�|c+ÓŽäÒÒ‘RIëÐkR;\´Ó¦8ÈÔiBGÅ´Äk‘J³a0\$²\’°¹ì~Ï³gÉÍ“d“=»ç={þ¿Ù9ž=�Ý—¸ç¿ÏûžsÞç÷û	 §x³*B4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Ž8Ü¢Æžªªªx™��íp8Ìn¨UƒíÔÖÖfee9x¥¼¼¼óGœ¼Ñ¼¦�BÌnD›ËåâJ¡®®.333/ 3`óæÍ�Çì‚
ö²k×.·Û]YYÉYÀOKJJ222´¥¥¥qÿBëh`¬Á^
+ ‹ŠŠúúŸÞÿOÁV0Ö:
öÂ]
+ ŒDjO=�Óéä^†©�!ì%77×ápäåå¹ÝnÎ…üü|Ž	-/ºÃ0¤½p.TVVº\®¬¬,íiII‰6$	Ð†!m
+ §<Aÿ
 c
 Ñ:
 Ñ`_o¿MÇŽ™ÝP¢ÁŽªªhÖ,ºõVúÍoÌn
+ ¨
+ Ñ`#

Á•#d¹e=÷œ¬ÔÕÑÃSS“i
áàeìkk£ßÿž^|‘êë%’“{ÿ�×^£åËiölzýu7ÎŒ&‚zP5Ä¾„Ú¸QVÖ¯'Ý/‚eË¨¢‚>þXT
1èÒ%Ú¶MÊ„_ü‚¾ùMÙòé§4~üÀ+55
+ ­k@Õƒ~õ+úáeeØ°à–s�uæÂ3ÏÐ�‘iXª†X •	gÏÒºuòô“OdLáË_ÊK]¸@·ÝF'NÐ«¯Ò’%Æ6¬Ñ`y'OÒôér|aÞ<zë-Š‹÷Ï�“nÈõ×KÜ€m!,‰Ë„;hÅ
+ JI‘§ÅÅ´xñË]4‰‰””dØ‚å ¬§¨HŽ8ðÞû—¿�ËÙ÷úðCÚ¾]†3Ã/FÀZ0i
\&¸ÝÁõ±céÁéðáˆçãôY¿^Ê“¶¶ˆ¿(Uƒêêëé—¿”îÃí·Ë)IÑ·aƒò8tˆfÌ0áÝÁ,ˆEñ·4÷ö)póÌ™ôÀôÄ4gŽ9�9s†ÒÓÍyk0¢A9o¿-g+UTÐGIß�]¹BÃ‡›Ý¬€‚zôQš6Íìv@äa¬A9O>)Ý—‹¼ÞàEr�ë—çŸ—C¤|`vS ò
æã2á±Çä@€¦¼œN�¢­[iòdS›õ9YYô�È
+ ·
b¢Ádee2o—	Ÿ|Ü2}ºº×2Üt“™v)7„ÎétÆ]Õýîä¥¥¥ü#—Ë¥à­F
&à½«¤$¸~ï½2o—	?ù‰©m
+ Ù¤IÁK3þõ/úÃÌn�udggWðŠv‹ ˆüü|íþ@�·S…¢ÈëõÏžíçßzjªÿüy³[ž‡’È³ÏšÝ+È
ÐÖ9x¿ã%oá\Ð6’ñ˜Ö>=¸{U4p™píµr¸!)‰.¤U«è{ßS·×¢—_–Ù~ýkZ¹‡6æñx´^ÃæÍ›y™™™©e]½]�r÷3;›bÜîÝþœùvÝ¸Ñì¦D€Ïç?~ÜìFX�{G@YYYç�xÝápt–êÀXCDx<=V¶l‘–bO\œTCÌç““&1»d?:;uuu+¹Ð
+ Èà§GŽ1µu:pÊ“‘š›é•Wä„¥øxª©‘-üÛµÃ…IJG	³KöÅétR`|¡ûÆÂÂÂ¢¢"Î…Gy„Õ„R}
+ T
Fòz)?_VV­
+ ÎÂh‡\`óæÉé›ï½G/½dvS¬Ct(//wtÑTª†°hÓ+mÝ*s"]½lq»I¥è�ªÿüGNÊ°IÆ<T
aùþ÷eFN×sç‚[l›lÆŒ`.¼õf—´<T
ƒ£•	#FÈ=]Xm­\"iàôJ±aî\zçÌ.imˆ†Aøç?ék_“qx—Kæ8�¾h³K64Ðÿ«Êµa0Xˆ†p™°g�ÌªD�QÆ§ž’zeÂ€8@Ož¤/}ÉìvÀP!ú³zµÜŽ?åÜq˜9ÓìÖXS{»\B¶j†'ûÄE–‚G|q¢to\&´¶çPñù¤^xüqäÂÐýéOòÜ¿_B›·Ê^ü>òµ“¯�:Út—þö¶îJšy÷¬M›ÌnjOˆ†.G�ÊåÆ;vÐ~¼»üóÏ›Ý&ëãl=q‚Ö®¥;ïŽÝÆ
+ ¿ìó}ìðÝ–íý¿ÊGGéø©I«Ôë¢"ºNXt»%ø£¼|¹ÙmŠ-O?MóçÓW¿jv;BçïÐÛÏ[{o4BC5Ç¥snªÆÖc
Ú,ŒÕÕôî»rj3wšš,A¤â*+éºëÌ›]’÷ù�¿ê[õo(!É£;&Ìê¼;©:ì[5´¶Ê¶æf)._¦Ñ£%�åõJŸ‚÷»7Þ�	£Œ4P—^–²Ïû}W#ŒJW0ÈnUƒV&<ö˜Ì¹Æ¢o4"äsèUjþò·o”ß­_–ò‰ô_}êëº¾".žÿ#KytGñ	½Cüï¿OwßM&È$Q¡³0¦K¯¦:wÜÅÑsgÎRñ‚6ªŠŠ¨°�FŽ”N¯
_ùJˆÕOí^êðRûYá%¯w¦/£ó]?¬[R$Ò°$y$$W†ñJ¢úñÁÅÂÁƒR>H.ø=o\—^M¿{e|Ùž¤3gT<²ãÑÀeÂÿþ'÷waßþ¶LF4ÀôJüYl½Lm-Áý_Ë^Q¡¶òuÈƒ¼}þ©5ƒa‘�B‰ü!+¼%Ê‘Ñ£Kß\—ÙÕ§%´Q\Õ·µzý\;Ì�Õ¦©ÃOq;ßÈ¼ë.s�b8N�’¡„#GhêTúÎwdáæ›åÑ‚[›¨­©kÉ_ëâü’QôÏý¸‡’0\b‚ÃB‹Œ!ç…¡]ú×^“3Ê¸gÏCB—|éó�#î¿ßìvô!ÖÆjj('G¦<æ—	É=ÊþÔz/H] eW¶ÅyÑ=)88’Fu~±G§KßÞ.sC½ù¦Ì¯˜WÙN¸TøÂmÙªŠ�hØ¾]ÎSâ2á¯¥{îéöƒ¶f‰ƒ+diÏ,�AŠD‰èÉE—Qüë’è¼ú�.Lñ§¯ºZf‚±�ÔÉ4ö‹f7¢?–ïP´´PJŠ¬¼÷ž,·l¡ÛúÈ{)˜Þ‹±<ŽÅßüîð¼ŒyVŽ¸a””*�Ní-=’¢½ï‘Ž¡ýâºr¡¶V.ÇÒþoÆ¸a‰�™›~.§�gd˜Ý˜>XµjÐæMxñE9úøÇ?Ê–¶¦Ë‰í�Ôò™ä‚‚‡¯%xð²×~žÔ{·�‹úqm˜–üK–ñÚf£^Øã‘L23éÙg)-Í¨WUUú-Û+®á®îáÃê^ÅkÕhàŽÃ¬Y4{VÇÿýÈ³|)'B£á_h‘Âû|(_õ– �ãkŠ@X„ñq:xP0Ï™Cë×ØDõ¤M£1×®XAûö‘š‡-5–‰­LØ¹“öî¥”$/57{§ñ‹SÏ+T „Þ¥�UüÿB
+ Š‹¼üÈÎûïÓøñ1}Ã›ái41›?œ

”—gv{úf™hàáã/-œsî…��“.Gõ½
ïÒÛ÷>8 ¼—‚a1˜AŸ–¹^3Öf‚IH¦‰9*•èNÝhÐÊ„éÓ)wþj:{èÍÓŽ‘ÍüÔHÚ9BîöÑïÒÇ¤ö–@RÂ‚“¢ßÞ¦MRoÄÐÁ‹ÄJŸi•\ e£¡¢‚V>Ü>‚Î­~ôôÚ5ž�ÿÂçõîÒn�—ñ–?@cUZ×Cëwèu=.\�)Ž“›qO™bJ
•4RraXðZ‰åËåÐ'Ÿ4·MPhßà2áÐ!Z´ÈO-çoÍ:ýó‡ÏÝ»Ä§S& K¸ó•<Z©_�§Á®ÇÕÞ‡¯=-M
+ ‡êê˜È…äTJ¿¥sh¹±QæÚ6¸þ�Uª†“')ç¦æÑ‰Ÿ9øÙèÑ~témMÎR»:–8êaÕ›ßp‹Ó¦QZF÷íöí¤øaK�*ÑÀŠ‹iñbÕ_mþŽ£ï^^|ÇÅeßº´~ÝÅºbvƒB–4ŠÆM—eO^¯ÜÂçŽ;TO:…¢ /6ÈÐÃêÕTú\kð
+ m,SÍ“Y¸¼=•Ò¦ZºW‹hkØ¹“rsiâÄž[;Z»Î¶Ò®¦7×£§ÐÈ	}u{¹dHNŽr›†Ñsþ¼ŒXëÏ.ÙuyXt¯²OH¦ác(u%pŽ7÷š_zInê¥~@ Àb–,‘ÓäC�]Ò×.çSp5Á‘¡­ðÒ�+î¸×ÀA�2FB!qDˆI›·¦ºÚ€÷�4DXŒ6»ä•+òÝ;fÌ�^ÂïÌyã
Î|Óî•£§2KMGpRO_`É�‚øaWgîÌ¾'3â¤È2!e'Å´´Èu–?þ1­[7¤fG—ZÑàt:«ªª´õÌÌÌ‚‚‚•+WjOKKKëëëKJJÌj¨ãÄ	â�‰oxãóI¨�µÈ0“rçdggWðJ^^žÛíæ°à•üüüÚÚZ³[J˜6­+Ž5µ)ƒo�\ £Áápä¬^½šäŽRn^fddpanÃ@Aÿ»LØ±aƒÙí�6ŸUGd'Í2’B'Jk<�Ö§Ø¼y3ºŒ“bÿþý&·Ô³`�L³v­ÜC€ûð*«©‘KÅvì ï~×ì¦„F¹hà^ƒÓé¤@(”••¡X€~$&Ê_·Üb�9©÷î•ÞÄ¢Ef·#dÊE•••f·,#.Ž~úÓàú§ŸJOž+
NK—ÒØ±f·#dÊEÀÐø|rçNŠ×_§qãÌnÍçtæ—U(7	04\®?óŒL,ž›Km±;‹xÔ¨u^@˜ º:zè!³ÛÑÓ¶mrµ…ÍnÇ`  f54ÐäÉf7"pØ2=]n¤¦ÝÁ*Ð¡€Ø´s'ÝpƒÜÊÌt552>ú�o˜ÝŽAB4@lúú×åú+—KŽškÌZ³†î¼Óäf:³ššd`²¸˜Fõži	†h[hl¤k®Q}Î5¥ C±�Ë‡ùóiÅ
+ jîÙ#÷¼½x1Úï>DÄ¾‘#iåJ9‚xÿýÑ~ëW_¥]»(5uà?©œ
	¶ðôÓ4aB´wQî¬ïÛ'‡-­Ø‘ÁXØ‘ÇCGÄßE»›k–™3#þ^†C‡lç·¿•ãš|ñ7âbaÞ<Kæ!À†rse¹`�\pQ–®È
`;\2<(—HßpCß¥±QÎ�þóŸ#ø…h;š6�^~YæP À¡ÍHØ·OÎ�Ö¿_† ÀÖÎž¥›oŽÈì’Ðøñ4gŽñ¯ˆ°µ1cd¤píZúÙÏ~å^ ÿÛ’‡-58¯lM›]râD•4Ü”)Æ¿fÔà¼€¹c­Û-SE$%Ñ “ CÐ¥¸Xæb:w.Ü×yðA9	ÒÒ
]rräd‡ùóéôé¡¿Hc#>L�[&X¢ Ë’%ô·¿I@„3+|}=]w-^l\³Ì€±€>µµÉ8¥=¡jÐçvÓŒJÌ.i
+ D€¾Q£¤[ár
n&èãÇe‚¯7bÍŠD€¾qãäNÜ÷ÜCƒø[Û¶Ñ}÷ÑåËkV´`¬ $ÚŽ2àÙ�sçÊ²º:âí‰4œ
	’§ž¢3g¨¬l€�ÉE‹(6îîŽhÉ„	´i“œ
UQA))}þ±ââ(¶)’
!Ñf—Ü·Ï€Ó¨-c
CÁûM¯qÞòÄ2uõ¼y&µÉP8B0hG�Ê“½f—¬©¡­[åTÈØ€h´ŽtX°@&’ë´w/ÅÇ[ïÞ–}ÁXÀ Ýx£„Â}÷õ¸ìzÙ2š:5¬‹/”‚±Ð�@¸<"³KšÑ–övjn–Ù%W¬0»)†ÂX@Xäú«ñã
˜J)k0Æ™3rOš˜�hkˆÐ�hk0FUU/³³³‡Ùm1ª€pÕÖÖfee9x¥¼¼\Û¾k×.—ËÅ;·X¢ \¼ÿs¥PWWÇ5øÒ¥Kóòò¸‚p»Ý¼�uo)--5»™ƒƒSžÂÂ¥§@eeef`â·’’’ŒÀ<³Z¥PVVÆ©ÁeÅîÝ»×¬YcjKc
a),,,**êg?òx<ÜËàj‚c"š
:ÄõBNN¯˜Ý–ÁA4„%;;› =åÁétr/ƒ}
+ ÎîhÔÕÕeZmžit(Â¢õxÏ¯¨¨p8ùùùœGŽq»Ýœ%%%üÇøGZˆX†ÂÃAÐYp”••ù‡*ºïh¹¹¹f7spP5#ÆNyB4€C€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Dè@4€Žÿã©uò—¹Ê$IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/Ellipse-1.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/Ellipse-1.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/Ellipse-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/Ellipse-1.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,81 ----
+ ‰PNG
+ 
+ 
IHDR[ÝQÑœbKGDÿÿÿ ½§“	pHYsšœtIMEÔ7#Ç–otEXtCommentCreated with The GIMPïd%n IDATxÚì�wxTÕÖ‡ßé“F:©$”ÐÁÐMŠrADªzA”ŽH½ŠR¤AéE¥(EŠ é¡HI€$RI™zæû#Â‡Ò’�žýúø�LfÎì³ö>ëüÎÚk¯-³X,�@�§(Ÿzeôh–‚ì~øÌ?ÉžR¶îî0>88Ã	r£Ñˆ.C‡^¯GgÒaÒ›0
FÒ
éHz‰c:ƒI/¡7è1ê�¤Ó1ëÍè
zFJ¹…Z��ÚµZ�\#ÇZe�R£D­R£ÑjPª•¨Ô*¬UÖ¨ÕêÌÿ5™ÿ«T*lllD‡r—³ga×.Ø³'‹Ê iSpsÆü³ÙŒAo@§×‘¡Ë@¯ÓcÐH×¥£×ëI˜Î�Ø;Ü¿wŸØ¸XnÇÜ&.>ŽÄ¤D1êŒÈrd
+ J……B�\.G®�£�+P((äŠÌßŠÇ¯kµZ4Ö´Z-F™…ðËá”ñ.ƒ\��N§Ãd4a6›‘Ìf³9ógIÂ,™‘LÒãßMf&É„ÅlÁ"·àhëˆ�½¥]Kãæî†›«ÞÞÞ¸¹¹áàä€�µ
��6ó»µZmæïV4J
ÈÄ˜<)]e™Î6Ëa™D·Ä#™$îÇÝ'&&†Ø»±Üºu‹Ø{±<L|Hbr"	‰	$%%‘š’ŠÙb¨•jJ9–ÂÁÞG{GÜ<Üð¯ä�ƒ£ÎŽÎ8Ø;`ee…B£@«Ò>V™Jµ�2Ó©©T*Tjµ•ZE|\<ž�Ûuâä	ÀÔéS©[§îÿßŒ†L•l4bÐgªeƒÉ€A—ùšÑ`DgÐ¡3fªæ¤”$’“’IJJ"!)ó\®_¿ÎñÓÇIIJ!5=…E�j�p(å€½³=®Ž®¸y¸Q¦L¼<½ððð T©Rbà²ál%‹ÅÂ�{w¸~õ:—#8ÿ×y"nDÿ ž¤¤$:¶¸ûºãéê‰§§'uëÕÅ­´N.NØYÛ¡Ñj°ÒZ¡µÖ¢Õh3¶Ò¢V«‘Ér.wïÜMß÷úþ[%‹åÇT(X)¬°ÒZåX±gè20è¤e¤¡×éÑétddd*ç””bïÆr÷î]îß¿ÏÍë7ù#öîÄÞAf‘QÊ®vvvøøúP)¿J~ÔªZ‹²Ê¢ÑjÄg[bÿ%3)SHŒOÌTr¿ÎÅó¹~ã:×b®aÊ0akk‹�­^^^Ô¬Y“ê•ªSµFUü*ø¡µÑ>vpÿþ7¯Ðô¬X½‚î=»ceeõØÙb™<÷¾[¡P`kc6à„ÓsoHÿþÙh1r'æW®\!<<œ‹/rpßA~þåg¦>DgÐáèèHÕŠUñ¯ê�¿¿?ÊW T©RØ;Øãêì*œq‰v¶"ŒP,Ð¥ëˆŠŽâJÄÂÿ
+ çÒµK\»|�ÄäDÔ5înîxy{Ñ°aC‚»ã[ÖO/OÊx•Á¡�LŽ†_çAüŽ>FË6-;:2ä2y¾¶åÉË£Ÿ5hð-ç‹o9_Þh÷ƒ�¸¸8¢nFs+†Ø[±ÄDÇ~%œ}û÷‘œ�Œ\)ÇÃËƒUkà_Ùÿ
+ þøUñÃ£´‡ˆe+(
+ ¡€Ø»±œ=}–£åÄéÜ¿wŸŒôÊ–+K�Ú5h?¼=Þe¼)U*3®joo���
r¹¼PžÓ¥‹—x÷€ƒ|ìl%‹„„”çª:§¨Õj¼¼¼ðòòzüšAo %%…¤”$R’SˆOˆçZÄ5Ž=ÊŽ½;Ð§êqqq¡bÅŠ¼Vï5š4iB@@�P½BÙ
+ 
+ I’HII!11‘ñ¸xþ"'�Ÿ$ì\÷îaokOß2´kÓŽúõëS»Vm´Ö™!™\†¬ˆH'£ÑÈ©§ˆ»Çþýû;f,VÖV™“q2PÈE¦ÏÔ5.®.¸¸º<~­UP+€Åbá~ì}=Äñ?Ž³yóf–,Y‚Ùb¦¼oyê7®OÃz
ñòòÂÉÙ	'G'á„…²ä™ƒµHÜ¾}›sçÏqåâþºü7"o�‘š�³›3~üx»÷ÛT¨†¿Ÿ?…V­f•ÛwnsæìbïÄr.ì
5ÈŒÙB¡U¶Ù	K(™7Ï2žôx«=Þê�N§#üj8W._áÊµ+\¾t™];va4ñðô  rý*R§v*W©ü8–-ÊVð
+ ¤$¥pðØA~ßþ;žü“¤”$Ê–-Kã�éÜ¥3e½Ëââæ‚‹‹KŽgâ+wcïr.ìwbïpæì™:[yñnjµZjÔ¬A�š5°X,$$&w?.ó)æâENœ8ÁÞÝ{É0dà[Á—fM›Ñ±cG*ûW¹¸f„²¼\½š%ââ‰½ËùóçÙ¾s;gÏžÍ¼øjÔ`ôèÑ4oÖ'‡ÌÄyñ½²,?nø‘øøxÒÓÓÙ¹{']ºvÁ`2 R¨Šõù?©~��œqvr q£Æü÷ýÿ"™%Îüu†�[vòÛo¿±bÅ
+ �iñzÚ´mƒOYJ»–ÆÚÚºÈ?g+È5âîÇqúìéÌØë©“DDDàäèD­šµèÒ•zõêáããS¤b”¯ÊÃ‡Ùºië?^;uüá˜�æÌ›�¬äÉ¸G¡…BAýÚõ©_»>iéiœ=s–?ÿü“a5j¶v¶T¯Q�úuëS»nm*V¬(â¼"ŒP21êŒ:rˆÝ»vsüÄqîÄÞÁÛÛ›Ö­[3dð¼½½ñðô(±ÈÕËW±w´§Ž},2’LB!)¿Ž‡—
+ …B(¶¿±±¶¡I“&4jÔˆä¤d¢c¢¹téö`ÆìÈerü*úÑ®M;Ú¾Ñ–2eÊˆô2¡l‹/f³™ûq÷¹rå
+ ÛÝÎ¯¿ýŠF©¡bÅŠôíÕ—ÖíZSÚ­4J¥²D<¿Œº¯ÕåÄ±O½.—ËÙ²ur¥¼ØÆlsŠ\.ÇÑÉG'GjÖ¨I÷nÝÑétœ:uŠ�¿ídÅªÌš3ï2ÞôìÙ“¦M›âéá‰���¸qåîã‡P¶�É`âÜ¹s=z”=ûöy#’Ê•9|$Í›5§|ùò¨T*a¨g8µZýÌ¿Ì†Ì"52qSzQ¸A©TbkkKóæÍiÞ¼9	‰	?qœ?ÿÁªïV±xáb4l@‹ 4mØ×Ò®Bñæ/ð�BÙæiéiüqøÖþ°–ÓgN£ÒªèÚ¹+cÆ�Á¯¢.N.BMä=(J¡l³‰“£o´}ƒ ADEGv:Œ­[·òÉèO(W¶Í[5§çÛ=)_¶¼0V¾…„²Í6’$‘��@ôÍh~ýõW6oÙŒAoàµz¯1gþÔm€µµõã¼JAÎ1š�¨ê5a˜›¨Õjüýüñ«èGpH0wïÞeÍkØ¹k'«¿]M�uèÖ£uêÔÁÓÓSÔnÈSg+Èz˜Àd"òz$‡â÷ßç¯KáëëKŸÞ}
+ 
+ ¢Z@5á`s³ÑŒL!O¹jP©T”)S†qcÇñÁpàÀvïÚÍŒ3PiTµ¢qãÆ4hÐ{{{a4ál†ð«á,Y¼„Ã‡“ž–N›mè÷^?ªTÇÓÓS8ƒ<BgÒ¡”+EÌ6—qtp$¸K0mZ·áFä
ŽýyŒõ?­gÝOë¨ä_‰^ýzñF»7°³µÆa„¼'))‰/ðý�ßs`÷|+ú2hØ º´ï‚�½�HIÊek0#Weîö È}lll¨^­:UèÕ«×Ã¯óýêï™üédfÏ™Í‡ï}HË6-qwwG­Rƒ	e›»$'%sôÏ£lúeGŽ¡JÕ*L�2•¶o´Õù@ÙÊrqSËcär9ÖZkª×¨Î—3¾¤gŸžüºéW/[ÌÊÕ+éøfG:vèH•ÊU„±„²Í$ØùûNV.[É™sg¨ß >sfÏ¡N�:¸º¸Š¾ ”­ÉŒ\.œm~¢P(¨U£Õ*W#¸k0¿ýök×®eã†�„‡Ðó�žxy{™ŠrBÙ,Rf]ØccÅŠÄÜŠ¡QãFüôÓOT¨†F£zAÞÿZ…¥\Ý|wj%ÕªW£JÕ*¼ûßwÙ´q+V®`õªÕtîÒ™^}záãã#v.Êö%±EâÖ­[Úwˆ7üÈí;·iÞ¬9Ÿ}öõÔC!Y…½Y/Â…@é:98ñÞûïÑ¡SvlÛÁ–-[x§ç;´hÕ‚Ž�:Ò¨~#Q�A(Û§1™L¬ûq+–¯ >>žNÿéÄ”7§P©R%¬m¬…�
+ :“N,×-D¸»¹ÓïÝ~´iÛ†?ÿÁš×0xç`Z·lÍƒ? ’_%qcÎ6³ºÔŸ'þdþ¼ùÄÜŠ¡ë[]éÓ³îbm!#È”2álr™oooº½Õ�7»¼É©§˜:›n]»Ñ»goÞéûnnn(•%[Û•È0‚Édââ…‹¬^¹š=‡öÐ¨a#¾˜ò5kÔWN!Çl2£–«EX§0:]¹+++š¾Þ”ê5«³yófÖ®YËŽ½;èÝ«7]Þì‚³³³p¶%…„„–.]ÊúuëñòñbæŒ™4lÐP¬�)*ÎÖ ²ŠôéÓ‡Æ�óãO?2wî\~Ýö+cF�¡~`ýYÝN^”­Åb!þA<?oø™öíÚ³cûFŽÉk~ m›¶ÂÑ!ôf½(EY„”®Ÿ¿ãÆ�cÃ†
”v)Íûï¾Ï��†pñÂEƒP¶ÅêâÔë9°ïß®ü–ë×	¦o¿¾xûx‹«¡b4QY©DÌ¶¡R©¨ì_™ó°sÇN¾[ý}{÷¥Oß>t
+ îD¹²åJÄòëâël-y=’¯Íï;§qÃÆÌ›7�À�¨Ôbò«ÈbB¤~a§ÛéÍNÔ{­ÛÛÎ¢…‹Ø´uƒâ­ÿ¼Uì¥_±#X,Ä?`þ¼ùt
+ îÄå°Ë,œ¿�yóçÑ¨i#áh‹8©æTQˆ¦#“ÉðôôäÝ¾ï²å—-´hÞ‚i_N£ÛÛÝøãèèõúäl‹ò#¦ÁÈ¡C‡ôÑ V¬^Á€ðÃºhÖ¢Z­V¨¡b€Yoy¶Å…BAŸ2|öég,]¶¹\Î �1ÿëùÜ»¯„„Š¨²MÓ§±`î¾ûá;ªV®ÊâE‹©S·*¥P²Å
+ #%f+ó’!u!ðµ@æ}=��›6²dþNœ>ÁˆQ#x­îkE¯Hü]‘±F£‘ÃGÓ=¤;?­ÿ‰�G~Ìò¥Ë	Ž¶’aÎÊ¶†ÜÝÜùàýØôË&� _¯~„Î%>!KQ/hk‘ŽÙ¦¦¥òíòo9l$ö¥ìYõÝ*ú÷ë�½ƒ½S,z
+ ™9BÙ»Çl¥’ŠþY¶l�ú˜
?oàÃÁròäIL&S‘?¿";boÝ¼Å§Ÿ~ÊüùóéÝ·7sçÎ¥FµbÄsL’)3ø%î¥Å–Rö¥èÿ^.Xˆ!ÃÀ‡}Èú
ë‹þÍ¤¨5X¯×søða¦|1¥RÉ÷ßO@õQË „`0PÉE_w
+ õ^«Ç²¥Ëøvù·L›6�ÓgN3tÈPÊx—)’1û"F¸{—ùç3bøš4nÂªïWQ«N-áhK2“Ll¢YRúZ&ÃÅÕ…O>ù„™3gröøY
Äžý{„²ÍKbbb˜4qÇÃŽóÙ§ŸÑî�vØÙ‰ÍçJ’IB¡Î¶dÉ\h×¶eÊ”aîÜ¹ŒùdiãÒèÜ•¢è­B¯l�F#§Ïœæíos÷Á]V.[IHHˆp´%#FÔ
+ ±Ñ`IC.—S­Z5¾þúkz½Ó‹ñÇ3kÚ,Ä=Ê67HÏHç—ŸaVè,š4hÂ¸qãDMƒŽÙh!lKfX6Ö66æÌžCTTc'Œ¥|ùòBÙæ„Î
eæŒ™tîÔ™/¦|!­½Y_ôÝ¹UP(èÒ�¹óæ~=œaÃ‡qòäI,RáNY-tSz‹…¸ûqŒ3‚_ÖÿÂø	ã;~l‰.:,ø$IB®9¶%•ZEãÆ�Y³v
¥¬K1hà vîÚY¨óqÝ¨�ºÅè�GsôÈQæ†Î¥G�XkÅ>`‚¿�­Y*R“"‚<+Èdx{zóÕ×_Ô:ˆÃGðó/?“žž^(Û[¨j#ÜŒ¹ÉÈ#IIOaÖÌY4iÚDŒ(Á?0Kfä
+ ¡lÿOéÒ¥óÉœ�œ?~<âÐ¿¬­—H+df³™Ó§O3aülìlXºh)¾}E±ÁÓÊÖ(!Sˆåc‚âäìÄ�¡Cp(åÀìy³‰½Ëø±ã±¶*<·P(Û£G�2aâ¼¼½˜7o¥]J‹Ñ#xKfA£Ô[žÂÊÊŠwß{'W'¾øü´-ƒ>„³Sá˜ï)pe{ñÜEÆŽKÅ
+ ™<y²p´‚øZf³Yd#žïÐÔJ:wF£Õ0vôXL&#GŒ¤”]©’ëlÍf3Çþ<Æ¸±ã¨ÀÔéSqqv£¥„“˜˜Hbb"žžžhµÚ§Ã&	™R„ÏG¥PÑþ�ö˜Íf>ÿìsL:ã'Ž/ðn�åÙ8t€qcÇáWÁ�Ð¹¡¸º¸Š²ˆæÌ™ƒŸŸ'Nœxæß�’QL�	^ŠB¡ sÇÎL›:�_·ÿÊ¬™³ˆ��/yÊöÊå+L˜0�êU«óÅg_`g+–Þ
+ ²GÀ"YDÕ/A–�)d´y£
r…œ‘�D®’3|Øðó7ùªl%Iââ…‹|4ô#ªT¬Â—Ó¿ÄÃÛCŒ
+ Á?}ªÅÂ¦M›hÞ¼9AAA\¾|ù±ªµÈ,¢ê— ë
+ W® uëÖLž:™�?mdÉò%�ÆBâló�ðˆpÆ��•ÖŠÐ¹¡¸¸¸ˆ"Ð‚gýØÑŽ7Ž´´4ÌúÌÉ1¥B)$Èº“SÈy³Ã›|2î–.\Ê�?ýˆN§Ë#9-ËF!�”mrJ2ã'ŽGgÔ:;GGG1
+ Ï¯2úõëGPP;wî$**Š{÷îáäâ„L.%ÙF©TBZZS§LÅÆÚ†.�»äþXz�ïÌ‰�˜˜ÈØ	c‰»Çüùó	“a‚†bbbˆ‰‰!==+++¬¬¬0ëÍ™OBÂ×
+ r€V£¥Oï>ÄÝ�ã³/>ÃÚÁš7‚Þ(>a„Ô´Tæ~=—GN0÷›¹Ô¬QS¬¼”
6Ð·o_bccéÞ½;îîîÌr…¨g+È¹ÃÕjüÑ`:´ëÀ„Ñ¸zõjþ©ë¼#lß²�-¿laÄ¨Ô®^[ô¶à…S¾|yªV­Jtt4*•Š6mÚ “É0MÈerQˆFðJØ;Ø3tèP®^»ÊgŸ}ÆœÙsðôö,g›KH‰°°0þ7åôïÝŸîÝ»E+x)uêÔ¡N�:Ô¯_ÿ3ÍÈä2QAðÊxyy1/t]Bº0ç«9L˜8!Ïç‘ò,õëò•Ë6˜ö­Û3tÈP¬¬¬D^	£ÉˆL.‹¹‚OYBg†²wÏ^–|»òx-WžŒÚ¤Ä$~³k�5�ý[Ñ³‚WÆd4!“	g+Èd2�7æƒ?`õ·«9qüDÑR¶‹…�¿läÄñ|ö¿Ïðr÷½*Ètfr¹\äÙ
+ r
�VCŸ>}jÄ¤I“ˆŽŽ.:ÊöüùóÌš=‹÷?xŸ†�Š/A®a1ZÄ™ ×±²²âóO?'==�¹_Í%%9¥ð;Û;wî0å‹)4mÔ”·º½…R)ˆ ÷Ð›ôÈerFä:ŽŽŽŒþd4dûÎíyò¹–ú•šžÊÂ¥	�gÇ¯;ppp=(ÈUr¹P¶‚ÜG&“Ô*ˆóÏ3}êt^|�Šå+Ne»oÿ>6­ßÄ¤ÿMÂÓÓSôž ×1›2S¿Äîº‚¼@«ÕòÑÀ�¨R¥
+ ÿÿ?’“òØÙæ@Ù¦g¤3?t>M›7¥E‹"N+ÈL™
+ DTýä¥K1zÌhN�>ÅöíÛ1›Í…GÙšÍf–}»Œ¸¤8>øà>ä:“NTýä9µjÖ¢çÛ=Y¾t9‘×#‰³µÀ©“§Xºh)#†� V�Z¢§yFÐ›‘ËDê— oQ(ô{·J�’%‹– Y¤‚#¤¤¤ðÃ?P¾\yBBBD/	ò½IŸ9bEÈV�Çøøøðþûï³mç6ÎŸ;_ðÊöÔÙS:xˆáÃ‡‹Ub‚¼W¶O�‰”BAž«[¹‚7;½I`` _ÍýŠ´ô´‚S¶ƒ�ÐÐPš5ãµú¯‰Þä9“!s¹®(h$È¬¬­ødÜ'œ8q‚�;v"I¯NÈñ¨=°÷×#¯Ó³GÏB±'» øc2˜PÈ¨”"ÏV�?Tö¯LëÖ­Y·~qâò_Ù&Ä%ðÕ×_Ü)˜zuë‰ä_A¢äg8A¡ w¯ÞDÝˆâà�ƒù«lMfë^Ï­˜[Œ9RÄÏù†Î(
+ ÑòŸš5kÒ©k'æÌžCjzjþ9Û{÷î±eÛº†tÅÙÙYô„ ÿÂ&“XA&ÈwÔj5!]Bx˜þ�ßû=ÿÂgOŸåîí»¼ÙñM1Q!È_Œˆ0‚ @¨\©2íÞhÇòUËy˜ü0ï•­d’X¼p1-Z¶ J@Ñ‚|Å`4d.j�‰0‚ Q(|4ð#®^¾ÊîßwcÉA±®l)Û°°0®^¿JÛvm±¶¶= È÷0‚B¡ÈÜÎ\ ÈgÊú–%00�»v�”œý"5YV¶’$±råJªT§Y“fÂò‚|GoÖ£P‰"4‚‚S·ïô~‡“ÇNõì7½ W–•íÕ«W9xø ï¾÷®Ø¼QP ˜õfÔ*µ0„ À¨]³6å*”cÇÎÏ~ÃÂYR¶‹…£Ål6Óôõ¦Ââ‚AgÒ¡Qj„!Fi×Ò4jØˆÛv`–²W~1KÎ699™cGŽÑüõæØÙØ	‹
+ É$!S‹€­ àP*•4kÚŒ„„Î„�yEgûŒ0Btd4gNŸ¡k×®"ÝKP`˜Œ&4*¡lK½×êQµjU~úþ§lÕKÈ’ç<uú®®®øUô–¦±bQPà¨ÕjB‚CøãøÜ¹w'w•íï¿ÿN�:5pót–DA¡ Ímˆ�‹ç¯óåž²ÍHËàLØÑ¨Å#œ }­Ù€B)R¿�££#•ü+qêÌ©,ïSöRg{âÔ	¬´VÔª)¶¼,zƒ^d#
+ r¹œ&M›pñÜEs'Œðûžß©P¡¾å|……ŠÅlA©1[AÁ#“É¬HDTwïÝ}ue›˜”ÈþCûéøFG11!(xekÔ‹P– ÐP®l9JiKqùÒåWW¶áWÂ‰‹�£q£ÆÂ²‚Çd4‰Z¶‚Bƒ‹«åýÊsäð‘WW¶‘˜$å*––8F£Qd#
+ 
¶¶¶”+WŽÓN¿š²5›ÍD^�Ä¯¼*•à‚BF0ë‘©Ä
+ 2Aá@.“SÉ¯wnÜ!###çÊ6åa
+ QÔ¨‰L&¸ €±&Ä™ Pá[Þµ•š‹]Ì¹³MNLææ�›T©%Š„
+ ³ÙŒE² •k…1…_ìJÙq6ìlÎÃÉ)É$$&à_Á_([A�#™$,’…Z,jJ;—¦œw9Â/…ç\Ùêt:�ƒÖF(	A!P¶’É"‰0‚ ÐáéãÉ­;·^ú>ås•mB2j¥+aMA¾�”˜ÄÚ×réÊ%”’“Ü”9˜�=éÒ³ÅŒJ!&k…//ÎŸ?Ÿ™ž-gû7‘·"q-íŠ­­­°¦ _°¶±&ön,K—,Åh0>~½SÇNô{¯H UŠ'-Aá¢lù²¤=LãaòÃl:Û¿•íí˜Û8:9Š-pù†Z­¦y‹æ¬^½š›Ñ7ÿŽ2þÓí?¨¬T˜-f»â¼2gÎœaïÞ½<|ø;;;š6mJ½zõÄ*ÑâííMZF)SpyÁûž³½{GGG¬¬…³ä
ê7 b…Š�·±±¡sçÎ`$Pª²ær²ÕtIáèÑ£ìß¿Ÿ‹/²xñbF�EXX˜0LÇ��§º©©©/|ßóól“S°µ¶ì	òkºþ§ëãßC:‡`oo�I2!Y¤—® KHLàØŸÇX¾|917c„AŸAÓ¦M©Q£jµ{{{Nœ8ÁÕ«W…až ::šåË—óçñ?ILzqU/GŒF#z�þ…ï{nA—®C¥Q¡PˆTAþÒ¶mÛÇ?·jÛ
+ øÿÔ/+å³Ÿ´Nœ:Á¹³ç8rôD&—Q·^]Êø”ý£G�æâÅ‹ãææÆÙ³g1™LÂ0Op?î>S¿œŠ¯¿þ:M7¡fíš¼V÷µ§Þk«µÅb¶`0²élÿ&CŸ�J£9¶‚|§|¹òøWò'55•€jÍÆÌ˜­"óñÎb±ðçÙ?9´ÿ‡ö"""‚û÷îóðáC,ÊU@nûå=Sý'$`±X�ËåÄÇÇƒ<ë‘ß"G!)¸}ƒè¨h6ý²‰Òn¥ñ÷÷§Y‹f¼Þâuk"“ÉP((UJÌFsÎ”mjF*ÖZkauA¾#“Éh×±#(íZ:ÓÙJF$‹„Ao`ë/[Y»n-áááÜ½w—ñ0ÿ©ÌÌr3’LÆ|óçÏ'44”øøxzôè���Â0O É$ÌòLçi±XHII!%%…è¨hÎž>Ëº5ëð÷÷§ç[=y=èu”%:ƒ.gÊÖd4¡U‹4AÁ8ÛF
¡‘kp-íú÷€$pp1ƒ/{ IDATv y³ætéÌ�k7¸pñáá=r”°°0nÞº™­OK"
4`Ã†
�9r¤0Ê‹T®\ŽOj×ªMÃÆ
ñ÷÷§FµøVÈÜPÁl6£Uks l}�LŽÌ"B‚‚¡ªUä&9jµ3f¢µ1¤¶3pÉ5‚ÚÔ¦¥(_±<å+–àn¯»Ü»w�ý‡÷³vÕZEAðJa¥EIýzõéÙ·'¯7ywwwÜÜÝžû~äG²F°V[q-‚S§NaÁ‚Œœ;^™)Y9Æ“ßõªßû¢cdõõ¬¶áßíÎêù¾Ê9gû?Lyˆ•�'O�$Þ*‘o¼—s{r³äxx7•fw¢’”O}®IÃ&Ö
$""‚ñ8uêT‰·ÿ³¾;«¯çdüçVÛsÓþ2dY:Î£÷$&&ò¿IÿÃÏßµJ�Ñd$æV1·žÎp‘Ì©i©™ûã½ ]ì¹ÊV©Q²qÃF9Œ3
+ �óè¿G¯=3æ�ô�{òýOïIÌdÊð—½ïymxôšü‰Œ¶ãÑï�þ}ÔÎGm5cFŽüñqž×†gµçÑ÷þû<^t./;ÖóÎAöÄ/;Î¿ßÿïs~²Ï$$”‹µùymø÷gžeß'íþ¨­�Î÷ÑëÒã~2ø™‰œ‡¡œ‰hSsvÎãÇeß!Ïx¶�þ}ÂþY·ÿ¿¯­çµõYíyÒG˜0¡BõÜvdõXÏ;‡'¯Ñ—çßïV?j÷£Ï¼¨ŸþÝ™E†>CÿÒ"IÏU¶6V6´y£
ú™\–í;õ‹î"ÙU;Ù½cg§]9=NvÛ–…�Û¾Ê{
+ “ý³òšdeá{Ç
,Õ‡*AIEcyÆ}>wG÷<QZY9‡¬(Õœ¨úì(àÇ—l6Î3'öÏ
5šÛöÏŠRÍKôdz=º÷xéRòç*[[œ�œ©U«*µ(þ!ø'F£‘ˆˆÌf3Õ«WÏõã®]»†$IT¨FÂåD6/ý™Ï‡†Þ6�Më61qÂDÊ•+'ÒJB\
+ ¥â¥éž«lK9”"%-�Q'œ­à)®^½J¿~ý
+ 
+ bÆŒDFF²mÛ6222 }ûö/u„iii>|˜óçÏãèèHPPåË—Ç`0°téRöîÝË�pH.…v›œæ5Á§»Þv^Ì˜1ƒwß}—zõê!—‹É0AÁŸ�J­B«Í¡²uóvãJØôézìlì„Eÿ¯2›Ù¶m111pçÎFŽÉ¹sçpvvféÒ¥˜L¦ÌºÏ{³XØ¼y3&L L™2Üºu‹0kÖ,<==iÑ¢ë×¯gÃ†
Ô¨V#³x¸R�R©¤cÇŽ¨T*öíÛ‡ƒƒþþþ¢cÂ½Û÷°¶²¦”m©¾ï¹r ’O%bãbIIKÖ<õˆÿÃ?€··7[¶láÐ¡CLš4‰Í›7cmmÍüùóyøðá�öŒ3ðõõeõêÕŒ3†uëÖqâÄ	êÕ«‡»»;ëÖ­#1%É"¡V«ÿ~“Ñ®];úôéÃÌ™3Ù¹sgfÁ{� Ÿ¹}kkJ9d×ÙþFpñt!5%]ºÀ‚"I×®]£téÒ��nß¾Mzz:>>>¸¹¹aeeERRqqq/T¶”.]úñ¶Ðf³™ë×¯àêêŠµµ5‰‰‰Ü¹sI’žªúåééÉ„	Ø¶m?ýôiii¢ƒùJLL¥ìJ½´ö÷s•­ƒ�&“‰ôôtaMÁS(
+ $Iz\†N.—#“É¿f±X�Éd/�¥ÊåòÇŸy´òëQñ£G¯Ëd2d’, ‘?]žÙ××—‘#GrñâE–-[&Ê+
+ ò•Û·nSÚ½ôK‹v=WÙÚXÛ —ËIJNÖü¥RIýúõ‰ŒŒ|\Ã³zõêØÛÛsèÐ!<HBB+VÄÓÓ“óçÏFFFÆSŽ¶Y³fDDDpáÂ8€½½=µjÕ **ŠäädÊ•+‡»‡{æ>dÚg/Å­P¡“&M"99™É“'sÿþ}ÑQ‚<Çl6s#òåÊ–{é{Ÿ+;ìJÙáêêJDx„P
+ ‚ R©		!**Š7nÐ²eKºwïÎêÕ«:t(ÎÎÎ2µZÍÀ�éß¿?7oÞ|ÊÙ6µZÍ¨Q£Ø´ixœJvöìYîß¿OÏž=‘ÉeX,4Šço<bkkË¸qã°²²bîÜ¹DEE‰Îä)wïfBªZµêËEÊó”­ƒƒå}ËsöÜÙÇ�rÁ#'Ù®];6nÜÈÚµk	
+ 
+ ÂÙÙ™O?ý”nÝºa4qss£J•*<xð½^O@@^^^ÿj2Z¶lI¹råˆ��ÅÊÊ
+ ???œ��ILLdÏž=øûûÓ¡CöìÝ“él•š¶M­V3hÐ Ö­[ÇÑ£G±··ÇÑÑQtš O¸yƒäädjÖ®	·c³él)[[;ü*ù±î§uÂ¢‚§ðõõe÷îÝÿxÍÙÙ™&Mšüãµ›7oRµjUfÏžýÌ	µZMåÊ•©\¹ò?^wpp`É’%�ÃFSf‰E¹òåù´¶¶¶ôïßŸ«W¯2dÈ†
FíÚµÅ[‚\'""¹\Ž_%¿—:Ûç�\Yfçqx˜þPXUð”*U*•/u`uêÔaÍš5¸»»¿Òñ%“„R–ug)—Ë©R¥
+ }ûöå»ï¾cß¾}"&ÈUÌf3Q‘Qøúù¢’½|á×sÃ�Ô‹ÖJËõðëÔ©SGXWP`H’„B•ý-šZ´hA©R¥X°`r¹œV­Z	c
+ r…‡)¹u“º5êfM¼è�ÕªQÞ¿<Û·o–(&“	µ,û›�*•J™3gk×®åÛo¿}é.¨AV¸}ç6WÃ¯Ô&(‡Îö	e«T+y½éë9z„ô‘o+(@ek–°¨r�Éd¸¸¸ðùçŸÁâÅ‹ŸJC²Kdd$r¥œ2ÞYÛTô¥³
-‚Zp+ú×Ã¯ë
+ 
+ ƒÅ€\ñjÅfÊ”)Ã°aÃHKKãÜ¹sBá
+ r~ó—$;ŒŸŸ®®®¹ãlëÖ¬‹J­âøÉãÂÂ‚‚Ü&	­âÕ÷ÄswwgÂ„	Ü¼y“I“&=Î²ƒÙlæÐžCÖÄÑ!k©…/#<zkØ�°°0ÒÓD(APpƒ[!WäÊ±U
«V­sçÎåÚµkÂÀ‚lMBRÕ«e½–s–žËZ¶nÉ™°3ÜºsKXYP@Þ–d…gkkkzôèAÛ¶m™<y2.\6d™­;·âîáN@µ€Wp¶ÿR¶5kÕD’$NŸ:-r‚ÑdD)ÏÝE	Z­–öíÛ3pà@æÎ�Ë®]»Ä6è‚—’’˜Â–
[é‚“ƒSî*[///ê7¨Ï–Í[„³X!+«Ç²‹L&£Aƒ|ðÁ¬_¿žíÛ·c4…ÁÏå�£p/öo¿™­ÏeIÙZ[[Ó¸AcNŸ>M||¼°¶ ÿ�­d~ål„ç^r9õêÕcÌ˜1üñÇ„‡‡c6›…ÑOa08öÇ1|ËûâSÖç�í³îþÈhÖ¬nn¬[/j%òÉ(¡V¨óìø2™F�ÍÖ­[™7oÞw™”L¢£¢9pè=zö@.ËÞÍ?Ëïvww§UëVüòó/Ä=ˆVä+&É„B©Èóïqvvæý÷ß'##ƒùóçsïÞ=a|�¹³È‰ã'Ðéu4¨ß ûOPY	#<âÝ¾ïu#Šýû÷ËòWÙš¥\Kýz®®®:­VKhh(±±±¢˜ÍfV¿š¦Íšâíã�ÎöøøøÐ¶c[6ý²é…{K	¹îlMRžL�=;;;
D�5/~“Ã%›£G�}3šà�`l¬mòVÙ"ƒ^=zñ×¥¿8î¼°¾ Ÿžß2Ãù]�V«ÕòöÛoÓ±cGfÍšÅÉ“'ÅÄY	E§×±|Ér5lD`�À#ÛR¡r•ÊT¯V��¿l9‰‚üñµ’YB©Èÿâß
+ …‚Ž;Ò¥K8À�;w„Â-�œ>}šã'�Óïý~¨µ9›¨Íž²œœœx»ÇÛìú}.ŠU7‚¼Çl1c�(´Šù~™LFëÖ­			aêÔ©ìÚµ½^/:¦„�œœÌ÷«¿§fõš4iØ$ÇÇ‘çdàµhÙ‚ &A„††’––&zC�§Hf	“É„V©-°6Èår*T¨ÀØ±cùõ×_ùñÇEjX	yªúóÏ?9qâƒ†B.Ïù¼AŽ>iccÃ�aC8rôûŠÌA;[‹”YˆF¦(ð¶”+WŽQ£Fqùòe–-[†ÉdTœŸªÌf–-_Fý×êS§ö«íV“í0Â#ª×¬Np‡`V®\Iì]‘#ÈKo£¹F^(šãëëËØ±cIKKcÚ´i<xð@Äq‹)¿ýþW¯\¥O¿>ØÛÛç²³ÍF8¡Ï»}¸}‹=»÷ˆÁ&ÈÓG9É"háßcßÑÑ‘±cÇbccÃœ9sˆŒŒUÌ¸{ï.ßÌý†.ov¡þkõ_ùx9V¶þ~þ´k×Ž¯|MRJ’èAÞ<ÊYÌ%#*¥ªPµK¥R1pà@|}}9xð ˆá#Œ&#ëÖ¯#úf4>�+9Þ¯t+++ú¿Û;;f|9ƒÁ zI�ûÊV² ™$Ð¾¶ÙÚÚÒ¯_?jÔ¨Á�!C8{ö¬ˆãNŸ:Íê•«1be¼ÊäÊ1_IÙBæ„Áè�GóËÏ¿°ÿ~Nä:’”9Af­°.”íS©TÔ­[—¾}û²lÙ2öîÝ+rÐ‹0z½žyóçQ¡B‚;çÚqs%K<¨u���,[±Œ5jàáá!zL�{ÊÖbÉ\¹¥*ÜílÚ´)ÖÖÖ,[¶³ÙLûöíEçAöìÝÃ™Sg˜ûÕ\\J»äÚqsezW­RóÉ˜OˆŒˆä§ïK¹F0K¨•êBÝN¥RI`` _|ñ›7ofÕªU"½ˆq5â*“¦Lâ­îoÑºuël—QÌÓ0Â#ªT©ÂàaƒY²r	'Oœ½&È5Ì3Fsá› {2™OOO&MšÄ•+WX¼x±Ø2½ˆOèìPœl�1jD®×âÈ5·­R©éBË –Lž<™;·ïˆÞä
+ ’EÂ(Ñ¨5E¦Ížžž>œÔÔTN�:…N§Y˜Ç˜$±uóVN�<Å˜qcp´wÌõïÈ5ePªT)¾üüK“™;g®H…äNÁlÉó�òwww>ùäbccùôÓO‰ŽŽÈ…”Ë—/óåœ/ðß4mÒ4O¾#×—äØ;Ûóù¤ÏÙ¿o?›7o³²‚\Q¶&³	™FVäÚneeE×®]©Q£_ý5W¯^ZÈˆ½ËÄ	iÑ´=Þî�J•7áª<YÿØ¤q‚»:'”ð«á¢7¯ìl%IÊõ­Ìó�FÃþóš7oÎìÙ³	�ZHHMMeÉâ%DFE2vìXòì»r5ŒðønnmÅ Áƒ¨]»6#†ŽàF´¨r/xÅ0‚IB¡VÙsÐjµtèÐ�þýûóÍ7ß°wï^±ø¡€1›Ì|¿ú{Öÿ²žéÓ¦ã[Î7O¿/Ï*{8:;2mÚ4Œ&#S?ŸÊý¸û¢w9S¶H-ÆBS!Ç›\N£F�øðÃÙ°aÛ¶mÃh4Š.�;88x€9óæ0tðPZµÌûþÏeûw&~:‘sÎ±bÉ
+ ‘+È©·h”š"*2™Œ:uê0räHŽ;ÆåË—…Ã-Î_8Ï§“>¥Ó›�xûí·Qkò~ò5ÏkÖ5mÚ”�G}Ìk~`Ãæ
b`	²ïk%	³ÉŒ¤)“­2™FŒÁ¶mÛX¸p!)))¢£ó‰ë×®óùŸãääÄäO'cï`Ÿ/ß›§Ê@¡TÒ5„ÁCóÅÿ¾`Û¶mŒ¢`� {ÎÖd6¡QhŠÕy¹»»3pà@>|Èüùó¹wïžèì<æAÜ>ýôS’�Š��M¾}w¾TcV©Uô¯?�ºtbÊä);rLL˜	²ŒÅbÁ,™ó}wÝüÀÙÙ™aÃ†=®‹{ëÖ-ÑáyDÊÃ¦9�k×®1mò4*úUÌ×ïÏ·Ò÷Z­–O>þ„A-2býõ—p¸‚¬9[éïE
*u±<?;;;þûßÿÀÔ©S‰ŒŒ×F.“”œÄŒé3ømÏo,\¸�úõë¿Ò~b…2Œð�»¸“3£?MÓ&M4hgÏ�E²ˆE‚c¶˜1YLÅÖÙX[[óÎ;ïÐ¾}{fÌ˜ÁÉ“'Å„r.‘¡Ë`îÜ¹ìØ¹ƒY_Î¢n½ºyçhe²‚W¶�psucÂÄ	¸¸¹0fÌ.^º(Fƒà¥ÊÖl.ža„'Q(tìØ‘��~ÿýw±¼70˜,Yº„
60bÄZ¶Êã¯ôW¾*ÛGxº{2gÖJ»”fÐ€A„‡‡‹A%x.’”¹•¹\!/öç*“ÉhÙ²%]»veöìÙìÚµKì€’C¦>dîWsYºh)“?ŸL�·z ÑÜ$k��^___¾üòKü*ùñî€w9söŒ¨£ xŽX°€drY‰8_…BA•*U;v,¿þú+k×®E�²:ÈÈ 44”ÖþÀÄ‰éÒµº`ÃP¢láããÃ”ÉSðt÷dÌè1œ?w^(\Á3Ãräù>¡QÐøøø0zôh®^½Ê²eËD™Æ,¢3èX¼`16l`Ô¨Qt
éZ(ÚUà£×ÛË›Y3fáååÅûÞçÌ¹3bb@ðÏ0‚EÂ"³ “ÉJÜ¹—-[–Q£F‘––ÆÌ™3IJJ‚ä<ˆÀÔiSYòí¦M�F�î=ÐjÇ2oyaPÓgL§iã¦¼×ï=vîØ‰^§#GðXÙ*$
+ ™¢Ä�»L&ÃÅÅ…qãÆaggÇôéÓ¹qCvz±wb?n<[7oeÊSèÜ¹s�‡
+ MáI<<<øßgÿ£uÛÖŒ›8ŽõëÖ…+Èt¶%,fû,”J%ÄÏÏ�½{÷’�� ÆDGG3aüÎœ=Ãô/§óæ›oº6ª ˜“£&L wïÞL™>…åK–“žž.FRI#HÈ(q1ÛcmmM¯^½`ôèÑœ?¾ÄÉ"v&Œ!
áJø¾ÿö{Ú´iS¨íãfaQ¶�p(åÀˆa#ððð`Ö—³¸y�ÁÃSÆ»2dJæe¡dÆlÿ�F£¡qãÆ,X°€àà`ZµjUìs�Ÿ…Ñdäà�ƒ|:þSÜ¼ÝXóÝÊû•/¼O'…±Q*•ŠwÞ~­
3Cgr#ò¡³B)ë[VxžˆY2ƒE(Û'iÐ 
+ …‚ï¾û½^OçÎ�KÔùgdd°~ýzBCCiÓ¦
ƒ¦lÙÂí
+ íè•ËåtîÒ™…ób2˜èûn_Ž9&J4–Hi›9QT’c¶ÿF¡PÈØ±cÙ±cË—/'##£Dœ{BbS¦Laú—Óyÿ½÷™4iåÊ•+ôO>…f‚ìyªN�:|·ê;*W®Ì ¡ƒXµrºt‘oX¢”­ÅŒÅ’™k+ø§ )[¶,S¦LáÊ•+,\¸�äääâ{Ï•$®^¾Ê°ÃØ½g73gÍäÃ?ÄÖÖ¶hôWQh¤½“=S§M¥{�îÌûfS¾œÂ½û¢ögIÁb±`–›¾öÙ¸ººòñÇ“‘‘Á‘#GHKK+~7\³™ßvýÆ~Àý¸û,^°˜öíÛ£T�Xu¡V¶OâìèÌˆ¡#Xôõ"vý¾‹ÿ¾÷_Ž;*6Í+	QIB†LÄl_€»»;Ã‡'11‘I“&qóæÍb‘‹k±Xx˜ø�9sç0rÄHjÕªÅ’…K¨[¯.
+ EÑÊ».R£×JkEÓMÙ´nÞ^Þ|0àV}»Š„x‘sX¬•­dAn‘#—	gû"lmméÖ­Õ«W'44”K—.m5+™9zü(ï
x��ë62õó©Ìš>‹reËÉó)2ÊöI¼Ëz3uÚTFŒÁ‚o0qâDÂ¯ŠÊaÅ9Œˆ	², ÑhèÞ½;AAA|óÍ7œ9s¦Hž‡Á``Ýºu:¾š÷!ÝCPjŠnŠ[‘•
+ ŽNŽôîÕ›EËÅ[=ßbÛæm™‹ „Ï-vaI&	g›E´Z-:t wïÞÌŸ?Ÿýû÷™Å’YâjDæ$Øä/&Ó­k7.XHÃ
)êiöE:Z©TÒ AV®\É’¥K3~Ív5cà€�Ô¬USÄøŠ‹³5I¨äªY!§(
+ 5j„��
‹-"11‘N�:¡R©
+ m›’Ø½s7³BgáääÄ7_C«Ö­ŠMŸÉ0Â¿qswcÌø1LŸ1�È¨H>üðC~XûF�ÈÉ-˜L&T2ál³‹L&£V­ZŒ9’ãÇ�söìYôúÂWàÉb±ð×Å¿?~<ŸMúŒ�à–,Y’÷»*ˆ0BÎÐ(5tìØ‘ËWÐ©S'¦N™ÊÀ�rñÂE±¢ˆc0�«ä"õ+‡TªT‰¡C‡²k×.–,YRh
+ ‘K’ÄÃ”‡¬ù~
o¿ó6áá,Z¼ˆ‘£FRÞ·|±›-ÊöñÉÈåx{{3~Âx–._JRRÝÞêFè¬P"""0™EšXQu¶2…LÔFx¼¼¼<x0ÉÉÉÌ›7�{÷
+ 6OýaêC¶nÛJ�^=˜7oýûôgÝOëhÙ¢e¡©?+”miÖ¸K-aü„ñìØµƒÿÀŠå+HOUÄŠFPÈb‚ìqttdÄˆØÛÛóÕW_qóæÍQ³çÎ�cÌØ1Lš0	ß²¾,X¸€a#‡áêìZ¬í_¬”í?Ï\K»Òóíž|·ê;Z·iÍâE‹y»ÏÛ?z\l1R””­Á€R¡y¶¹€­­-ï½÷UªTaúôéDEEåKÊ¤d–ˆ‹‹cÚôiôéß‡ë‘×ùfá7|9íKKDßû3TÈøúú2~üxÖo\�‡«ï|Ÿ‘#GròôIÏ-d˜2�«äBÙæÖÖÖôîÝ›:0eÊN�:•g©a‹…»÷î²öÇµt	îÂ¾ß÷1jø(6oÜLÓ¦M±³³+1á¡UÓ¯¢sæÌaïÞ½¬ü~%ƒ?Ìºý‡ÞïôÆÝË]\……“É„B®Ê67U–\NûöíÑjµlÛ¶
*W®œ»é’fØ»/‹/":2š®]»Ò£GÊ—/OI,M]èŠ‡çù]ÝÆš;Ð°QCvnßÉ7¿aË–-|<úcÚ´iƒV«ù¹….Žj¹Z¤~å22™ŒæÍ›ãêêÊ‚èÔ©S®"7�DEE±hñ"vïÞMÃ&
?a<ÕªVC£Ñ”Ü\I½«»¸¸Ð»oo¶lÝÂÞà‹Ï¿à�Þï°ñ—�Ü½{W\‰…�I‡\)Ây�B¡ F�Œ7ŽÍ›7³fÍRRRrÖO:ÂÂÂ˜=s6!!!\‹¸ÆWs¿bÙ¢eÔ­]·D;Ú©lÿ�‡›cÆŽ¡yóæ¬[¿Ž/¦|�ºtíBÇvqrvWd!#ÈÂÙæ%ÞÞÞL˜0�E‹±|ùrˆ��MÖ>l�ÓgNóÓ�?±ÿ~\\]>j8o´ywwž+ÑÊö©;Ž\I£†�˜6e?®ù___¦O™N—®]øaõ$¥$‰�~£Ù˜élEžmž;ÜáÃ‡“ššÊ¬Y³HMM}¡ƒÍÐep.ìC†¡_ÿ~œ¹p†�Ç|ÌŠoWÐ·w_<<<DŸ	gË3½[[[ªW«ÎìY³Ù±cmZ´áëo¾æ�¶oðõü¯¹tùF“È^ÈW,`6˜Q+Õ"–ž×@éÒ¥™0aNNNLš4‰7nü#5Ìb±�ŸÀ¾=ûôÑ ºuïÆÍ;7™:y*»¶í¢G÷xyz¡�‹øº#dqÐ•ó-ÇÄÏ&Ìöß¶³aý~Þø3íÞhG×�®Tö«,.þ|ñµ–Ì0‚\Ô³Í/
+ `íÚµlüyÕkvÇ®”3žiœ=½‹Ÿ7näÜùsÖä«¯¾¢Q£F8::
+ ÃeÛÙ
+ žðºP=¿J~ôx«[·oeõÊÕ¬]·–ÿtúýßï�—‡Wæõâi)ïÂ#J¥RÄló­VK×�ž|½(ŠG›P(ÓÑ*¶bH™E“&µX°p5«×NV(ÛÜE­VãããÃàAƒéÝ³7Û~ÝÆÊïV²aãš7kÎ›]Þ¤Fõ¸y¸½rÚŒàit’NÄló™ÔÔTÂÎ]cßQnÞvÅbw×–lø®>�ë— 66–Ý»wS»vm\]óf©mFFaaah4êÔ©#”mIÂÞÞžwz½C‹ ìÛ³�=û÷0jô(|}|iÜ¨1mÛ·¥V­ZEn¤B�J…Ûä1‹…¸q9p„�»wrêäe’Œý°µí�Å¢¡Yc7ªøÿÿ{gÎœÉÑ£GYµjUž9[“ÉÄªU«8{ö,;wîÄÙÙY(Û’†§‡'=ßéI‡N¸}“­;¶²eóÖ®[KõêÕéÑ£¯7[[¡v_5Œ`4Šdyè`õz=·bnñÓúŸØùëNî'Ü'°^ S¦LÄÉµ.GN¨Ðé èu(e—ù¹sçÎ±uëVÞ|óMüüü0�èt:4
*•Š´´4är9VVV/}"±X,¤¦¦¢R©Ðh4H’DFF
+ …;;;Ú´iÃöíÛÙ¸q#Ê¶$"—ËqtpÄÑÁ‘š5kòÉÇŸðÇ�?X³n
“>›rèØ¥#AMƒ¨P·ÒnÂh9@oÔ‹E
¹ýx®ËàfôMNŸ>Í†õ¸|é2eÊ•¡[Ïn„tÁÛÇû±“lXÿéÏÿ9Oˆk.IDATöÛo¤¦¦Ò¸qc”J%ûöí£W¯^ôêÕ‹öíÛÓ¯_?Ú´iÃ¬Y³°··a[iÐ õêÕcÁ‚\ºt‰Þ½{ÓµkWfÏžM`` ÖÖÖlÛ¶�wÞy[[[álK:•†–­[Ò¸Yc"Â#8rä¿íþ�-ë·àWÅ�–A-iÕ²~ýÄ#q60ÌXY[	e›¤¦§rôÐQvîÞÉñÇ1Í´x½ï½ûõÕÇÕ%ká€˜˜Ìf3nn™¢qãÆ8�•+W²gÏ¼¼¼:tèK-dV"ëÞ½;ß~û-7oÞäüùó$$$Ð¹sgÜÜÜÐh4$$$_Œœ­#¼ºÓÕh¨V½U«V%¸k0‘Ñ‘lÚ´‰E±hÑ"7jLH÷^«õ666¨T*1ùót6J¡ls€ÉlÂd4s;†-Û¶°û·ÝÄDÆP©B%>ðõÕÇËÓ+k«l÷Ñ^f�ªæi4ºvíÊöíÛ¹xñ"“'O¦råÊY:–Z­¦U«V¬Y³†-[¶F½zõðóó{ü’$¡P(ŠtHN(Û¼3(ä¸¹¹áææFƒÀŒ?ž={ö°iý&ÆŒƒÉ`¢v½Ú´jÛŠª•ªRÖ§,Î.ÎBÁý‹Á‚J¡vÉFˆàÎ�;\¿~�#ÇŽpäÀnÝ¾EÙ2eiÜ°1ÝC»SµjÕWúŽ:uê°nÝ:®\¹BË–-ÑëõlÚ´‰Û·oS¾|y6lØ@Û¶m	x,$ôz={öì¡L™2T­ZõŽ³V­Z¼þúë,[¶�NÇÄ‰qqq ""‚ŒŒüüü+i¡l/ÄÞÎž�àºtìÂÕð«\¸p�Ó§OóíÒoINIÆ¯¢õ^«Gý×êS§nììì„Ñ“AÔFx’Y"æf‡�æÏ?ÿäÒ…K$§ü_{çÛF•ÆñŸ=ßßíØIêÍÅqš¤Mš´R¡éM�bQW Dµ QÑvY¶ïðŠ´EÚ
+ ´‰OP	¡UÅ¥âRÁC¹¤Ùh#ÑBÚ�'isqš8v|ÏŒ÷ÁµtwZØ¦áü$kÆ>s4ãsÎ|úŸo¾óM†D"Á}÷ÝÇŽþôv÷Ör}üÍ888H(âÜ¹s<þøã|úé§¼òÊ+>|˜{î¹‡#GŽpâÄ	Ž?¾îJH§ÓÜÿý9r„ãÇ�ß0¾=wß}7o½õáp˜]»v­ãááaŠÅ"=ô�P¶‚‡$KtvuÒÙÕÉ<@j)Åü•yÎ||†wN½Ã«{•P0ÄÁÁƒÜ{ï½lëÞ†ÅjA’¤_¤»¡¬‰d7W]§R©�YÉðþ™÷9ýîiÆ'ÆQJ
+ ý;û¢wG/áp�Çó“‡"F£QŽ=ÊK/½Ä…èééáÔ©SÄb1Ün7o¿ý6PKTþÉd¯×ËîÝ»oøý»ÿ300@ `Û¶môôô�J¥8{ö,<xð¶î3¡lo16»�X,F,c÷žš«!ùM’Óï�æÌgxóïo"™$Ø¿?ñ¶8Ñú(>ŸoÝo¶ÙÑ*&£x-ÎÚÚ©TŠÅùE†Ï
óÁ™H~“$²³'�þöQÞdÈ~O>ùä
¡X×Oñÿ�›bnnŽcÇŽñðÃßdüÇÆÆxöÙg‘$‰¡¡¡õŒc¡Pˆ×^{mSôŸP¶£ÑHKkOýá)žøÝ\œ¼Èÿü‚‘‘^8ñ¹RŽæÆfâ-q¶vl¥c{‰x�Ç³iU¯ª©¿He«iÓÉiÎyžK—¸8~‘Ë—/“Ëähjnbÿþý<ýÇ§éíí%‰nø%ã‡ú�eN§“044Äààà¦ìOal7¸êÝ±}½Ûz9ô›C\[ºÆ\jŽ±Ñ1FGFùð£)¸<.ºÚ»¸càîÜu'-ñÌfsm!€tû«AES0�6iŠjµŠ¦ièºN6›edx„ÏÏ}ÎØèWæ¯P*•hŒ6²óŽ�<øë‰5Ç¨×ã÷ù7Í‚™D"A"‘ØÔ÷³p#Ü\..—‹æ–föìÞÔü\SSSŒþc”OÎ}ÂÉ“'yñ//R­V‰'âôõõÑÓßÃ–†-A�Àm™-_UUdió¸LôªNn-Gj1Ej1Åä7“Œ|6Âè£,/-ãõxkn¥½»Ù·g½}½Ô¹êÄ� ”­àVºâñ8ñxœG}„l&Kr*É¥©Ú”süâ8ï½ûµ@c¸‘æÖfbÍ1¶D·°%¶…ÆX#á@“¼±‡�®êH¦Û7×D&—a~vž™«3ÌLÏ0=;Í•é+LMN‘[Ëáøèìêä±Ã�ÑÒÒBGG���b™·P¶‚
©~1àv»ééë¡§¯UUÉd2¤Óiææ9þ<ÃŸsö³³d–3˜ÍfìN;>·�¶x]]]´u´ÑÙÞI$ZË°o4×··tš­U7l2êjµJµZE×uôªN±P$9�äÂùŒ5ÎÄ×LÏLSÈÈòLššèÛÞÇ±?£¹µ�×ƒßçÇawˆT�BÙ
+ n»Ž5™ðûýøý~ÚÚÚØ;°—£¿?
+ @!Wàrò2_^ø’ñ¯ÇŸç�7ß ›Í²–YC2IDë£´¶·ÒÕÝEkK+¡`·Û�ÍfÃfµa³Û°Ú¬XÌ–ŸýÁœ¢)·t¤jšF±X¤T,Q((äsyV²+Ì^žerb’ÉK“\J^"³šÁj¶âöºñûü4ýª‰}ö±µ}+ííí465ŠÕ‚ÂØ
+ ~)Ø�vº»»éîî^Wgélš…ù¯.2se†…¹f¯ÎòñGóúÉ×)ŠÈ²Œ·ÎK�»¯·¶u¹]=Aê|u¸=nBÞ.Ÿ‹€;€ÛçÆétþÏ![Uµú³úlËå2ÙÕ,élšôµ4+«+¤3iV¯­²šùö“^%›ùö˜Õ4ù|€ˆ?B´)Jk¢•w ¡¡�H$B´1J}°“YÜbáF¬w¹ŸÛ‡Ïí£³£©ë:…b�µì¹|ŽÜZŽåô2©¥©ùsós,.,215ÁÊÒ
+ ÙL–b©ˆY6#[dlff‹»ÃN(¢¾¾žP0„§Îƒl—±YmØ­v6‹«ÝŠÝnÇbµ`µX±Ùl8¬d³Œ®êªÔŠº>Í¾þ½XT [ÌR*—(—Êäóy
+ Jµ¬’ÏÕöK…ZY±T¤R¨°°´P‹Y]\dyy¥¬PVÊ”KeÊJ#µŒnuî:|‘H„îíÝÔëihhÀðáp:p»Ü8]NNGí��P¶‚ƒÑhÄépâtüðK•R…¹Å9–¸¶p­f�S‹,/,3}µ/ª**ªª¢iš®¡«:º¦SÑ*hšFU«¢©Š®PÕª¨š
+ :<ÿççyù¯/ƒÐAQTUE)+0`4‘Œ’$!™$LFSmÅ�É€,Éµ2“´~ŒËé"ÒÙÙI$!ãûiŠ4ñÖy7EØœ@([Á&D¶Êë«ánöÔB¸ÊJM9*¥¢ )¥B©RBQôŠNE©P¨Ð�²ZF-«”+µ:jEÅd4a’MXÍV$³„ÙdÆd1a6™1Ëµ}«lE–e$«„ÕdE6É˜-fdI®)o›Mt˜`(Ûgž�çž»Ñß ÿ�²�RWœgC\£éÛçm!ÆÅfl‹ÙÙ›Ë®?¬ZýžŒýê+PU¸>•Ù÷•îõßÿ[ÙF©+Î#ÚB´…h‹ÿGÝ½{¡¿ÿ[�@ üäˆ'�@ Œ­@ c+al�`ãð/ÌßÂ46¥IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/FlatteningPathIterator-1.html gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/FlatteningPathIterator-1.html
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/FlatteningPathIterator-1.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/FlatteningPathIterator-1.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,481 ----
+ <?xml version="1.0" encoding="US-ASCII"?>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+   <title>The GNU Implementation of java.awt.geom.FlatteningPathIterator</title>
+   <meta name="author" content="Sascha Brawer" />
+   <style type="text/css"><!--
+     td { white-space: nowrap; }
+     li { margin: 2mm 0; }
+   --></style>
+ </head>
+ <body>
+ 
+ <h1>The GNU Implementation of FlatteningPathIterator</h1>
+ 
+ <p><i><a href="http://www.dandelis.ch/people/brawer/">Sascha
+ Brawer</a>, November 2003</i></p>
+ 
+ <p>This document describes the GNU implementation of the class
+ <code>java.awt.geom.FlatteningPathIterator</code>. It does
+ <em>not</em> describe how a programmer should use this class; please
+ refer to the generated API documentation for this purpose. Instead, it
+ is intended for maintenance programmers who want to understand the
+ implementation, for example because they want to extend the class or
+ fix a bug.</p>
+ 
+ 
+ <h2>Data Structures</h2>
+ 
+ <p>The algorithm uses a stack. Its allocation is delayed to the time
+ when the source path iterator actually returns the first curved
+ segment (either <code>SEG_QUADTO</code> or <code>SEG_CUBICTO</code>).
+ If the input path does not contain any curved segments, the value of
+ the <code>stack</code> variable stays <code>null</code>. In this quite
+ common case, the memory consumption is minimal.</p>
+ 
+ <dl><dt><code>stack</code></dt><dd>The variable <code>stack</code> is
+ a <code>double</code> array that holds the start, control and end
+ points of individual sub-segments.</dd>
+ 
+ <dt><code>recLevel</code></dt><dd>The variable <code>recLevel</code>
+ holds how many recursive sub-divisions were needed to calculate a
+ segment. The original curve has recursion level 0. For each
+ sub-division, the corresponding recursion level is increased by
+ one.</dd>
+ 
+ <dt><code>stackSize</code></dt><dd>Finally, the variable
+ <code>stackSize</code> indicates how many sub-segments are stored on
+ the stack.</dd></dl>
+ 
+ <h2>Algorithm</h2>
+ 
+ <p>The implementation separately processes each segment that the
+ base iterator returns.</p>
+ 
+ <p>In the case of <code>SEG_CLOSE</code>,
+ <code>SEG_MOVETO</code> and <code>SEG_LINETO</code> segments, the
+ implementation simply hands the segment to the consumer, without actually
+ doing anything.</p>
+ 
+ <p>Any <code>SEG_QUADTO</code> and <code>SEG_CUBICTO</code> segments
+ need to be flattened. Flattening is performed with a fixed-sized
+ stack, holding the coordinates of subdivided segments. When the base
+ iterator returns a <code>SEG_QUADTO</code> and
+ <code>SEG_CUBICTO</code> segments, it is recursively flattened as
+ follows:</p>
+ 
+ <ol><li>Intialization: Allocate memory for the stack (unless a
+ sufficiently large stack has been allocated previously). Push the
+ original quadratic or cubic curve onto the stack. Mark that segment as
+ having a <code>recLevel</code> of zero.</li>
+ 
+ <li>If the stack is empty, flattening the segment is complete,
+ and the next segment is fetched from the base iterator.</li>
+ 
+ <li>If the stack is not empty, pop a curve segment from the
+ stack.
+ 
+   <ul><li>If its <code>recLevel</code> exceeds the recursion limit,
+   hand the current segment to the consumer.</li>
+ 
+   <li>Calculate the squared flatness of the segment. If it smaller
+   than <code>flatnessSq</code>, hand the current segment to the
+   consumer.</li>
+ 
+   <li>Otherwise, split the segment in two halves. Push the right
+   half onto the stack. Then, push the left half onto the stack.
+   Continue with step two.</li></ul></li>
+ </ol>
+ 
+ <p>The implementation is slightly complicated by the fact that
+ consumers <em>pull</em> the flattened segments from the
+ <code>FlatteningPathIterator</code>. This means that we actually
+ cannot &#x201c;hand the curent segment over to the consumer.&#x201d;
+ But the algorithm is easier to understand if one assumes a
+ <em>push</em> paradigm.</p>
+ 
+ 
+ <h2>Example</h2>
+ 
+ <p>The following example shows how a
+ <code>FlatteningPathIterator</code> processes a
+ <code>SEG_QUADTO</code> segment. It is (arbitrarily) assumed that the
+ recursion limit was set to 2.</p>
+ 
+ <blockquote>
+ <table border="1" cellspacing="0" cellpadding="8">
+   <tr align="center" valign="baseline">
+     <th></th><th>A</th><th>B</th><th>C</th>
+     <th>D</th><th>E</th><th>F</th><th>G</th><th>H</th>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[0]</code></th>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td><i>S<sub>ll</sub>.x</i></td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[1]</code></th>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td><i>S<sub>ll</sub>.y</i></td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[2]</code></th>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td><i>C<sub>ll</sub>.x</i></td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[3]</code></th>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td><i>C<sub>ll</sub>.y</i></td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[4]</code></th>
+     <td>&#x2014;</td>
+     <td><i>S<sub>l</sub>.x</i></td>
+     <td><i>E<sub>ll</sub>.x</i>
+              = <i>S<sub>lr</sub>.x</i></td>
+     <td><i>S<sub>lr</sub>.x</i></td>
+     <td>&#x2014;</td>
+     <td><i>S<sub>rl</sub>.x</i></td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[5]</code></th>
+     <td>&#x2014;</td>
+     <td><i>S<sub>l</sub>.y</i></td>
+     <td><i>E<sub>ll</sub>.x</i>
+              = <i>S<sub>lr</sub>.y</i></td>
+     <td><i>S<sub>lr</sub>.y</i></td>
+     <td>&#x2014;</td>
+     <td><i>S<sub>rl</sub>.y</i></td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[6]</code></th>
+     <td>&#x2014;</td>
+     <td><i>C<sub>l</sub>.x</i></td>
+     <td><i>C<sub>lr</sub>.x</i></td>
+     <td><i>C<sub>lr</sub>.x</i></td>
+     <td>&#x2014;</td>
+     <td><i>C<sub>rl</sub>.x</i></td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[7]</code></th>
+     <td>&#x2014;</td>
+     <td><i>C<sub>l</sub>.y</i></td>
+     <td><i>C<sub>lr</sub>.y</i></td>
+     <td><i>C<sub>lr</sub>.y</i></td>
+     <td>&#x2014;</td>
+     <td><i>C<sub>rl</sub>.y</i></td>
+     <td>&#x2014;</td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[8]</code></th>
+     <td><i>S.x</i></td>
+     <td><i>E<sub>l</sub>.x</i>
+              = <i>S<sub>r</sub>.x</i></td>
+     <td><i>E<sub>lr</sub>.x</i>
+              = <i>S<sub>r</sub>.x</i></td>
+     <td><i>E<sub>lr</sub>.x</i>
+              = <i>S<sub>r</sub>.x</i></td>
+     <td><i>S<sub>r</sub>.x</i></td>
+     <td><i>E<sub>rl</sub>.x</i>
+              = <i>S<sub>rr</sub>.x</i></td>
+     <td><i>S<sub>rr</sub>.x</i></td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[9]</code></th>
+     <td><i>S.y</i></td>
+     <td><i>E<sub>l</sub>.y</i>
+              = <i>S<sub>r</sub>.y</i></td>
+     <td><i>E<sub>lr</sub>.y</i>
+              = <i>S<sub>r</sub>.y</i></td>
+     <td><i>E<sub>lr</sub>.y</i>
+              = <i>S<sub>r</sub>.y</i></td>
+     <td><i>S<sub>r</sub>.y</i></td>
+     <td><i>E<sub>rl</sub>.y</i>
+              = <i>S<sub>rr</sub>.y</i></td>
+     <td><i>S<sub>rr</sub>.y</i></td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[10]</code></th>
+     <td><i>C.x</i></td>
+     <td><i>C<sub>r</sub>.x</i></td>
+     <td><i>C<sub>r</sub>.x</i></td>
+     <td><i>C<sub>r</sub>.x</i></td>
+     <td><i>C<sub>r</sub>.x</i></td>
+     <td><i>C<sub>rr</sub>.x</i></td>
+     <td><i>C<sub>rr</sub>.x</i></td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[11]</code></th>
+     <td><i>C.y</i></td>
+     <td><i>C<sub>r</sub>.y</i></td>
+     <td><i>C<sub>r</sub>.y</i></td>
+     <td><i>C<sub>r</sub>.y</i></td>
+     <td><i>C<sub>r</sub>.y</i></td>
+     <td><i>C<sub>rr</sub>.y</i></td>
+     <td><i>C<sub>rr</sub>.y</i></td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[12]</code></th>
+     <td><i>E.x</i></td>
+     <td><i>E<sub>r</sub>.x</i></td>
+     <td><i>E<sub>r</sub>.x</i></td>
+     <td><i>E<sub>r</sub>.x</i></td>
+     <td><i>E<sub>r</sub>.x</i></td>
+     <td><i>E<sub>rr</sub>.x</i></td>
+     <td><i>E<sub>rr</sub>.x</i></td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+     <th><code>stack[13]</code></th>
+     <td><i>E.y</i></td>
+     <td><i>E<sub>r</sub>.y</i></td>
+     <td><i>E<sub>r</sub>.y</i></td>
+     <td><i>E<sub>r</sub>.y</i></td>
+     <td><i>E<sub>r</sub>.y</i></td>
+     <td><i>E<sub>rr</sub>.y</i></td>
+     <td><i>E<sub>rr</sub>.x</i></td>
+     <td>&#x2014;</td>
+   </tr>
+   <tr align="center" valign="baseline">
+      <th><code>stackSize</code></th>
+      <td>1</td>
+      <td>2</td>
+      <td>3</td>
+      <td>2</td>
+      <td>1</td>
+      <td>2</td>
+      <td>1</td>
+      <td>0</td>
+    </tr>
+    <tr align="center" valign="baseline">
+      <th><code>recLevel[2]</code></th>
+      <td>&#x2014;</td>
+      <td>&#x2014;</td>
+      <td>2</td>
+      <td>&#x2014;</td>
+      <td>&#x2014;</td>
+      <td>&#x2014;</td>
+      <td>&#x2014;</td>
+      <td>&#x2014;</td>
+    </tr>
+    <tr align="center" valign="baseline">
+      <th><code>recLevel[1]</code></th>
+      <td>&#x2014;</td>
+      <td>1</td>
+      <td>2</td>
+      <td>2</td>
+      <td>&#x2014;</td>
+      <td>2</td>
+      <td>&#x2014;</td>
+      <td>&#x2014;</td>
+    </tr>
+    <tr align="center" valign="baseline">
+      <th><code>recLevel[0]</code></th>
+      <td>0</td>
+      <td>1</td>
+      <td>1</td>
+      <td>1</td>
+      <td>1</td>
+      <td>2</td>
+      <td>2</td>
+      <td>&#x2014;</td>
+    </tr>
+  </table>
+ </blockquote>
+ 
+ <ol>
+ 
+ <li>The data structures are initialized as follows.
+    
+ <ul><li>The segment&#x2019;s end point <i>E</i>, control point
+ <i>C</i>, and start point <i>S</i> are pushed onto the stack.</li>
+    
+   <li>Currently, the curve in the stack would be approximated by one
+   single straight line segment (<i>S</i> &#x2013; <i>E</i>).
+   Therefore, <code>stackSize</code> is set to 1.</li>
+    
+   <li>This single straight line segment is approximating the original
+   curve, which can be seen as the result of zero recursive
+   splits. Therefore, <code>recLevel[0]</code> is set to
+   zero.</li></ul>
+    
+ Column A shows the state after the initialization step.</li>
+    
+ <li>The algorithm proceeds by taking the topmost curve segment
+ (<i>S</i> &#x2013; <i>C</i> &#x2013; <i>E</i>) from the stack.
+    
+   <ul><li>The recursion level of this segment (stored in
+   <code>recLevel[0]</code>) is zero, which is smaller than
+   the limit 2.</li>
+    
+   <li>The method <code>java.awt.geom.QuadCurve2D.getFlatnessSq</code>
+   is called to calculate the squared flatness.</li>
+    
+   <li>For the sake of argument, we assume that the squared flatness is
+   exceeding the threshold stored in <code>flatnessSq</code>. Thus, the
+   curve segment <i>S</i> &#x2013; <i>C</i> &#x2013; <i>E</i> gets
+   subdivided into a left and a right half, namely
+   <i>S<sub>l</sub></i> &#x2013; <i>C<sub>l</sub></i> &#x2013;
+   <i>E<sub>l</sub></i> and <i>S<sub>r</sub></i> &#x2013;
+   <i>C<sub>r</sub></i> &#x2013; <i>E<sub>r</sub></i>. Both halves are
+   pushed onto the stack, so the left half is now on top.
+    
+   <br />&nbsp;<br />The left half starts at the same point
+   as the original curve, so <i>S<sub>l</sub></i> has the same
+   coordinates as <i>S</i>.  Similarly, the end point of the right
+   half and of the original curve are identical
+   (<i>E<sub>r</sub></i> = <i>E</i>).  More interestingly, the left
+   half ends where the right half starts. Because
+   <i>E<sub>l</sub></i> = <i>S<sub>r</sub></i>, their coordinates need
+   to be stored only once, which amounts to saving 16 bytes (two
+   <code>double</code> values) for each iteration.</li></ul>
+ 
+ Column B shows the state after the first iteration.</li>
+ 
+ <li>Again, the topmost curve segment (<i>S<sub>l</sub></i>
+ &#x2013; <i>C<sub>l</sub></i> &#x2013; <i>E<sub>l</sub></i>) is
+ taken from the stack.
+ 
+   <ul><li>The recursion level of this segment (stored in
+   <code>recLevel[1]</code>) is 1, which is smaller than
+   the limit 2.</li>
+    
+   <li>The method <code>java.awt.geom.QuadCurve2D.getFlatnessSq</code>
+   is called to calculate the squared flatness.</li>
+ 
+   <li>Assuming that the segment is still not considered
+   flat enough, it gets subdivided into a left
+   (<i>S<sub>ll</sub></i> &#x2013; <i>C<sub>ll</sub></i> &#x2013;
+   <i>E<sub>ll</sub></i>) and a right (<i>S<sub>lr</sub></i>
+   &#x2013; <i>C<sub>lr</sub></i> &#x2013; <i>E<sub>lr</sub></i>)
+   half.</li></ul>
+ 
+ Column C shows the state after the second iteration.</li>
+  
+ <li>The topmost curve segment (<i>S<sub>ll</sub></i> &#x2013;
+ <i>C<sub>ll</sub></i> &#x2013; <i>E<sub>ll</sub></i>) is popped from
+ the stack.
+ 
+   <ul><li>The recursion level of this segment (stored in
+   <code>recLevel[2]</code>) is 2, which is <em>not</em> smaller than
+   the limit 2. Therefore, a <code>SEG_LINETO</code> (from
+   <i>S<sub>ll</sub></i> to <i>E<sub>ll</sub></i>) is passed to the
+   consumer.</li></ul>
+ 
+   The new state is shown in column D.</li>
+ 
+ 
+ <li>The topmost curve segment (<i>S<sub>lr</sub></i> &#x2013;
+ <i>C<sub>lr</sub></i> &#x2013; <i>E<sub>lr</sub></i>) is popped from
+ the stack.
+ 
+   <ul><li>The recursion level of this segment (stored in
+   <code>recLevel[1]</code>) is 2, which is <em>not</em> smaller than
+   the limit 2. Therefore, a <code>SEG_LINETO</code> (from
+   <i>S<sub>lr</sub></i> to <i>E<sub>lr</sub></i>) is passed to the
+   consumer.</li></ul>
+ 
+   The new state is shown in column E.</li>
+ 
+ <li>The algorithm proceeds by taking the topmost curve segment
+ (<i>S<sub>r</sub></i> &#x2013; <i>C<sub>r</sub></i> &#x2013;
+ <i>E<sub>r</sub></i>) from the stack.
+    
+   <ul><li>The recursion level of this segment (stored in
+   <code>recLevel[0]</code>) is 1, which is smaller than
+   the limit 2.</li>
+   
+   <li>The method <code>java.awt.geom.QuadCurve2D.getFlatnessSq</code>
+   is called to calculate the squared flatness.</li>
+    
+   <li>For the sake of argument, we again assume that the squared
+   flatness is exceeding the threshold stored in
+   <code>flatnessSq</code>. Thus, the curve segment
+   (<i>S<sub>r</sub></i> &#x2013; <i>C<sub>r</sub></i> &#x2013;
+   <i>E<sub>r</sub></i>) is subdivided into a left and a right half,
+   namely
+   <i>S<sub>rl</sub></i> &#x2013; <i>C<sub>rl</sub></i> &#x2013;
+   <i>E<sub>rl</sub></i> and <i>S<sub>rr</sub></i> &#x2013;
+   <i>C<sub>rr</sub></i> &#x2013; <i>E<sub>rr</sub></i>. Both halves
+   are pushed onto the stack.</li></ul>
+ 
+   The new state is shown in column F.</li>
+ 
+ <li>The topmost curve segment (<i>S<sub>rl</sub></i> &#x2013;
+ <i>C<sub>rl</sub></i> &#x2013; <i>E<sub>rl</sub></i>) is popped from
+ the stack.
+ 
+   <ul><li>The recursion level of this segment (stored in
+   <code>recLevel[2]</code>) is 2, which is <em>not</em> smaller than
+   the limit 2. Therefore, a <code>SEG_LINETO</code> (from
+   <i>S<sub>rl</sub></i> to <i>E<sub>rl</sub></i>) is passed to the
+   consumer.</li></ul>
+ 
+   The new state is shown in column G.</li>
+ 
+ <li>The topmost curve segment (<i>S<sub>rr</sub></i> &#x2013;
+ <i>C<sub>rr</sub></i> &#x2013; <i>E<sub>rr</sub></i>) is popped from
+ the stack.
+ 
+   <ul><li>The recursion level of this segment (stored in
+   <code>recLevel[2]</code>) is 2, which is <em>not</em> smaller than
+   the limit 2. Therefore, a <code>SEG_LINETO</code> (from
+   <i>S<sub>rr</sub></i> to <i>E<sub>rr</sub></i>) is passed to the
+   consumer.</li></ul>
+ 
+   The new state is shown in column H.</li>
+ 
+ <li>The stack is now empty. The FlatteningPathIterator will fetch the
+ next segment from the base iterator, and process it.</li>
+ 
+ </ol>
+ 
+ <p>In order to split the most recently pushed segment, the
+ <code>subdivideQuadratic()</code> method passes <code>stack</code>
+ directly to
+ <code>QuadCurve2D.subdivide(double[],int,double[],int,double[],int)</code>.
+ Because the stack grows towards the beginning of the array, no data
+ needs to be copied around: <code>subdivide</code> will directly store
+ the result into the stack, which will have the contents shown to the
+ right.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/GeneralPath-1.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/GeneralPath-1.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/GeneralPath-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/GeneralPath-1.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,49 ----
+ ‰PNG
+ 
+ 
IHDR,ÒÇL
šPLTE
‚`*## ! \"$!‹&#%'%#"A&'%‚".#(-%*)9+,*-+.'‚2/@2306470=1796=85=?<C=9G�B@DAB@B@T98›(V+5BuB=w3S5??�NE:FHEBDlF<�MGBJHKCODPNQNPMTOLNO]DYDZQFN[PWUYUWT[UOOP”PcP\^[Bq==j|d]XJmJ_`rcae^\—Y[ªl`amcXdfc>‚>XpZle`anblnkll~tmdpmohh»pl”Aˆmk¥]‚\surj|iƒqb{tkwtvƒriZ�\xzwLšR‰yi…{oƒ{u~€}�~€‡‚�Y _}{È€|¼„†ƒ}‹Ž„{ŠƒŽeže“„sP¦|Œ‡†R¯Tmžq�ƒ¬ŠŒ‰h¦fŽŒ’yœy•�„Ž����|‰œ‡eµh•–“j²w�•�Ÿ““¡Ž©š—œ’’Î¦–„¥™š~³€žŸœ§��¢™¶¥ž—¢ž¡nÄv±ŸŽ_ÑfpÊpŽµ�¥§¥­¥ž±¦š´¡³©£Ïž²¡{À»yÅ´½¨—¸«™Á©�­¯­µ®§~Ò°¦åÀ¨±‘Ç’º¯£ŠÍ‰¸¨Ü³´²yÕ¥Æ°�À³¡Ã¯²nçrsäy½¬á‚ßƒ¸º·šÏ›Îµ™Ã³ÜËº¨À¹Õ§Ï¤¾À¼xð{È½³Á¾ÃÒ»¥ŒãŽ¸¹ÿÊ½¾™ÝŸ×Àªžáœxû|ÔÄ²Ô¿ÒÜÃ§xÿxÐÂÐÐÆ»ÇÉÆÂÁÿ„÷‰§àª€û„ÊÈÌÝÆ°”ò”ÅÇÿÝÄÎÊÉçÖÉÉ™ò�ÎÐÌãÌ¶èÊ¸ÒÐÔÞÏ½æÊÌèÎ²ÓÕÒàÓÆëÑÈçÖÄØÚØáØÑãÖ×ðÖ¹îÖÀÖ×ÿôÖÃàâßßÞýëàÓúÞ»øÞÁöÞÇýÜÁñàÍÿÞ½éëèèèÿíëïïëýòôñõóúùûøüùþþüÿþÿüÐ
+ ¬	pHYsšœtIMEÔ5¸EKtEXtCommentCreated with The GIMPïd%n IDATxÚí}
|Tg™ïds'Nq6‘æšÕÍhF6ÑýÝëR‰¡«†*{£Ñ_³¥HºW©MåÚ�®¥¸½¹5"Ð¥e³X(‘ÝnÛêon[Q¢˜´•:Ð¹°q ~@š
+ -é%MÚyß''f‡É™{¾ß�óž3“!ÔžÒùÎ|üÏóþßÿóñ>¯/óö‘óá{‚·Áz¬·Áz¬�}èWoƒ•3Xóæ}èG—Þ+—CùÑ<õøÜcoƒåuLOŽœìíêìhÿˆ†Öõù|óš5k×µoï:tjd2•þƒ+59~þä@W[Cm´4àóûüÁÂP8ü®yúñÇï*)))*
+ …~¿?PTU×ÔÞuèäùñÉôXéñ#]íMµU‘B¿/XZY³¬±éŽ/Ý·yÛŽ=[ß§CõõŸë;Øwpß®m›ïûÊ—V7.«Ž–TÐJ«Ölê>9®üa€•ž:²¥±*ZRð-¨l\ÛñÏ?|öô¹¡Q,€,Ëÿrý¼ëç}ý§ #IYN&eõ&zñÙÞß¹nEµŠX¨$ºxu×xú÷¬ôäù�Ž†r¿TTV±¤eÇ	
YE$‰4LÔ©à\ýû¾ ‡Žžö¢¤öŸú*H}ÝhÿÆUK¢¥A_¨f­jc©ßC°Ò'·7×F¥‚²šÕ÷í:vQE™�ÐWÿóï_¦•Á~F¶Ø‰ž]w.�†
+ B5Í[N¦~ŸÀJ§�´Ö”,ÛðÃ_ÖìÇ2óx@¨#É<ŽÈm@/Ø³&"J*›]-ÚŸ]°Òã§ÚkþpyýÎ×µ_I@dƒd>ˆè!hØ•zË¸¶@¸I¸»o®X�wž�üÝK™h­)*(¯»oß
(�¡¬áLÔˆc.è1ªþj¼KÊ£×¯ˆú‹–nºòrÖÀJŸ]]–JWxá"X#ÏUYFY’c±wÀB¿°«±HUc[®ð9+`¥'šJüÅ•«Ž©Ö„´±<#!!c9yQØð“‚>&µ)U3Ûäþ›+‚�šî‘éß)°Òç7Ô–Þµx;P¬Õ ›¢ˆEé¨èœf1yÀ—Dý¾còÂ¶›ËüW¤~gÀJ÷Ö—IV?;¤2e
+ dt¹222a&pòfJ&ƒ$<Û±° hñöôïXé³"RdÉþ	¢
ø¡…xÆ{Œéfƒd
+ $ÇÐDÆ¢`O&“plUTŠlN_ã`¥šK¥êûúe@ìBæèGI€<˜i�…Øxo)dl
ÝW)EÖ�M_Ã`¥OÖ-�–î8­ilS$8ËÄ†±@ˆ~-²HL#DÔ8³€™'@µ9½£:PÒ8’¾FÁšê¬,(]Þ/›ŸÌÈ$óÛ&aŽ'$ÖXHCQò�‘¬ `,ÄwýÖþ›Š«O¥¯A°.uÖDîìK“3 V\Ùœ­=€yh,$;&
+ êïñ¾å�Ò
#×Xé“‹çZ^DI$V	!c�I[ˆd&Œ…,°(»†ü´÷U¢[Ò×X©Þº‚²æs²Ã%Fô$¦2“Ð+ä5"…Èð2(ÌŒUé`	2†±Àv*“ ï¨,ìš¼VÀJ7‹šžEà”=DtÜ�Sc!Nh±^!25ª­0�Hc!êÌ 
+ ;$¿¸1\>|m€•ÞP&-ïEìÈ±9ÆŸ8ŽeZÅ8ÈÓ+Dö”ÁLÌŒaLÈ÷­”vL^}°¦zI‹öè®ñƒY%„9˜ˆµ=ÙIäNl€�LŽB$nƒòCô'%û*Us’˜	XçCÅmCöï`‹™¹€#ÄgJ
+ `4ÁlÚ²=GÊC`|DÛ©$d�^¹«¸dÃÔ•K!yåRWTZÞ‡„½B›«ä€q9‰Ïi,DÔ*o�@›n2yb¡´”$…åJ€õÛç­Üú¿uY |g-ÖCˆ¢Þ‡ Ž%çÇb'
+ ø�&ê€.¶„n³Â—žÿmÞøŒôöžÌu¾ù¼‰Ú=ï®8A|_àŒßâÁï–±?y‚êà<pÓXÖi%¼ëƒŸüZJ3)åù7ó�þÖùýÑI'Xé”€•ß>¯}Þ¥¯^ÞÍ
+ Jf¼ð^¡)¬ÿ7£¨ð’Y²3lYi–SI}1ëºï3ŸkPýôóÿžÿÀ›”|¾Â.…kªÎ_6"DëRúW·Ô¿õ‰dÞ+d0ârÿÈ-Žåd,äœl“òDËmìUÇ`þŒ¥lñE£þ†Ö2ŸÏí:Ä½‡zyþk_¸®agÏ¾½=ûzöö¨Ç�Ú…~ë ~£O½êïé?x _»2.�[}=ýýÖ¿óžè¿¾ûOXwôGõ7S/ì?ÐÓ×s°_½PïšŸ~ð€öùÚõý¡}=Æ7Ô¿kÏ¾}Ÿÿäû¿óHï¡¼Ý[©ñ¯îòÙFd�¥øÔÃßp7s´©Gkó?÷'Ë×èW­­mæ³ê�¶uwk÷Úìg­?Õ/ÍWš�Ð÷ØƒyÆ¾Óz·ý©úg˜O´šßL½Ñª½i«zØ/6¾aÛZý{®kýümï®i½;Ÿc�j�ÊÉp¨+ôwñ`U¨`•žWø#=ü™Ï}æ™1”¤ý²¤açzÞa®�€¤»ðäªÜÄÿQ%eK#’¡¶$)Èü¼l“½q=ú¿ÿïW¯kN)ù�·útö–ûª¬ñÅ¾âS¼ÊR2ÃñÉ¯Müæ™wî¨Ÿ¹Ìi‚ÇÁžÂØùÍW>#";ôw<óKôÿî¹®5_çg¼Æïóû}¾‚qŽ³”©³Ãž
+ •Þèm[Uóyí;Hà¨p18f®·’õÀÎkVâ�í+Y/;.aZbòœ«n74±�E[Ñ~ç5õ‰·¾hÎ­�_óÚÖ•üxé dœ³Fçûoë×Úož“�ò‰SóôÓú˜™Üñ/G�z¸)Và‚fZvì�{æ7Æ‰ùêu�ùxŠJ¦ÁWªŽ®K+}'Ùa(˜_Ó�rÏOµ„“ú´‘h}y„À’ZfHI?¬ØçÅ™¶D^»TÆ(l•k˜)e„Æmà˜'HDRÅÊø‚c÷\×œ�§¨tmèÖ®Omêœâ†¡3Ê×QXuÊ>o¯¹pºÆ²©
+ å"ë™pŒJî#^³’±òØ
+ ©5¯šh…5$ww'Ý^Xý*5&.´˜±�+cY‰Ý$�4…ÅPÖ+â½qgDŒjMÃ�ÓúÆ†1ÖIkó
7+Ä’\ÁJwJÕ'Œy›D™<‹Ï*dg,ÄE.H”�a,ä–Ç@\b’r
û&Éä«K¥ísuPÒ]a+“#èÁbÇ�MÄ´P»p×#ÀYÉ(;c!«Äd,¤YŒ…èw@ºI"2Õ]
+ ùcÕ¥½sVg(zAP�3
+ €+û ÚI†¬‡ÆBÞz*Ž½3rjŽÀ:Y\Þ�—t0
°CÄXhp�5§™�0 ³6,c‰²ŽˆÇšÄ?kÇqIÂ¶…+§æ¬áêÒ}t�•·sa,DÑr02ªÈMc!Ùˆ4r~¶…˜É\‚úíÛ¯¬IÏ>XÊHMpORfÑ‘^â¬�‘4¸‘H�02iD¤±œÂ�ù²­dÅ¬Ì.¢MžÑX¦¨g‚ÕThE #=û`5ÖS<7MÙtQ.rÑX Æ¼—W(³'4¹5T99Û`¥·K�™3ƒÀé"O¯	!Ðà˜ai§WˆŒ•·W(Û–Ìäkå]…5éÙKéß8$;¬¼�=ûó¹bD{…ˆH®^!z…ˆNºææÊ”WÈ¼‰�-Po¶H›Ò³
+ ÖHu¨Ï
+  Ä’
˜§�—Wˆh&�xy…ˆ)02ÿ3¨ô5tl‹f,s–E"A§½úÜ¢’#³	–Ò$m¥S€fWcÍ(Ž%ÔXr.Œ…HÝ	]Šy"°|rÁêö­¸ÈÐB¯åÇ™‰cÉ3‰c‘wdm‰ç3Æ+¤ˆ^óä�ŽYKYX~Ì1›1q,ÙÍ+ÌÇrÉ:ãX|q cY¶Ê1­±(rxqá‚ÉÙ+Õ,í¶óËÙ ªAg$“±dÏ8–ìÔXÀUÀ3å5tÉƒ=ñÛq,—±H1–èeD›>h›%°”î@MS¢O�I6™O¿Ê ÌÊòŒ6“ˆ™ÇwBÀHãLà¥%§f¬éêH€lÙ”†È�v!¼~ÐX¹%9Šx�j vÙ™üÚñ~i¥dþÅå�•î*¸ÍÄ€�Ky?K­9¿]N¶Šr0zDÚ™�~£.¬éxåod/Ý›ÔÒ
€k$Z1ÄX›yÇ.e®n¿5Ë›`×»ØùV8·±i“ßáGB
š]½‘=«?à×zTu¦`)íÒNG¡0÷]Ee8G‹ÀŽB¶øÓ…$Ìó9œ&ì¢Ã˜RLMž Çn�¦Ò9ØU&sÄç«[Y^9/k$AÔ'`ëâlµ²[¡ÎOR
âQiC�&Á3Ø.®�úòÍ¼BDˆ�Í?öîVÕ®r(ðùÎ¦z}N°ÃÊÊ¥X`+Üc˜G‚ã›lV�=KoL“Y`˜ðq¿ßwçÐÐ«CæqzèØÐéÓê?õxA?ú^è¿ç?=vê|¶C†¾ö®õˆ¬TqÍË2ˆço°Ï¬×èòâ�‹³0v÷˜œ£Ð^¿VàÒÚÚ¢U‹´Ü½V«1®´ÿõË»[›?ûá¿6îzÆ0T±/X{É–Ò)Ýô‚w<ØŸØÛd:½À�‹9d˜wÀ¹Q#È?,Pž¤ZÔ¹sêÿ/Ÿ;§]i—êÿõËsç;úð¯&³XšeŸt€5U]>d�@ê—`÷‹t‚evpbŠÝèß³Å"!ØÂÎ|ò;IèÒ}›ß÷Ÿ5¶HNšå®Ú­"G/18|<Ù¼çÍªhTÎV&}¾NX½¡;Ü‚Øª"×³�³MQØxŽë€˜.û1@´éòØ²	¹`Û}?L:"&È
+ ó¨Çáã²Ülý·7rš
�l÷ùºy°RMÒëŒjvZWshÎ´RÔ¾�y]örµ˜€q>n˜œ<|\õH‡jŠ/ýâÍ\fÃPQÀW=Ì×g
—Õ"	ã§8Ò©›”a`°þs
+ Ê¾G‡d€vIÌÚò–È¼¦
³>ºñNX°’Ì´×ŽëW÷(Ïg_%±L=:Æ
+ ~{Á.Š±ˆ¸—ÌR†á‹3„æàs @�>²l
+ ¨/K"$~‹Ì°*˜ÙE`ùƒÅ+s)s0¹‹K©�¼Àš‹‡K‡e™^AGµõàë÷é_‡eðŒƒÎÄ�$1!Íª±ÈÁaÂ
@-­B0±(šcX‹†Ëk²`v=oZXìç‹¢éM(¼ùOEútý·h
äÄsóÊ-áÞ¼C4J·´YäéçÓB@<�©#ú›SPŠà!öÙ9P®Æ©×ÕôKmyƒ•nˆssúø�"<Eã"Xþ
Ù|Aág8<-ÍÒsj�2{
†™ª³ˆJOf›bøÐ#’¦òK/»›´Â†°wVÅ�Ú ØcøÑšK(°(³ƒ½¿WyÁ0¢næ¾4z>_Ëê�¿^hì`Îhö¹µ#ÜØs$a�gƒÙé‹åÙø�i¾Ä˜Ü#æQÏ�±ìÞ8›ìXÂŒ-«ÝßÏº§ì/—Œƒ‹‚eƒ –NgÑYSË’²—ø…™0–vu@Ú’'X©†B6ºìT%VA–SD†	¥¹ú˜1XœíGaGtÃ-èhÅðu}e¤±µ+£"QFlÍ¾þž�,WòKQFªªè)¦œBò¸X+`÷ßÆÿ0pÌbž�±ŽíÒ![‘QÑ^¡��úý¹s5Ñ<-k8¼¹èj‡ûÙ=2,ðž1›u¡ŒPv¯‹`l—2ë D¤7ŽŒW\Ê¬nßâ�qpÑ'3Ã8uôŒGG°#Ñã$Ó@1íí-b™êF9ã‚0c©/ýJÁÉ¼ÀRÚƒ/òoî±Ofä`~ÜQ¢ó	I±pË&e¦ÙÇxÄ5–³TÐªˆ;�Ž¨�©¾t[°+?°Ê^ }v,Ë¢iÞõDa‘Çæ…ºíõb~"Ã²ëš}gœ‡H<äáÒË×I~õµæ7+«F]CwÖàÀ.Þ!öˆB‰£&.{DÇ@£O(ÊæFq­&Ž•5ä7†—�¸Ð³eäa�µØž?äÁ"•Šy–÷´!ì�!W/R3þj¢¼z:ËJûš�Í; ÓùBðÌ�ažžh¼{§E	‚=´/CaØ™à&Nc5Ÿ9GiX°¦|_’Ýríôäˆ�‚‘™¿˜x8ra"s¤²ðÄ8‰ðƒÏ–Çé@a–¼)2’Xgý÷¹hm&jG€ÜBåB¤œ!�ló/{BcÓXö¶]àV!èW7—
çÃYG›-fÂ¶}àl`±8ºá‚VØ=>åž+ÂNúÇüä‰Ùlá ÃêEKÑ@>`õwÍÄ,Ï ‰sÒj’8„âjZ2ÙïìˆÇc—�†·{%Ž`›:~cøP>`u†vjYÐhÔ#\ gKI2ê²8
+ X3v‹‘ºËˆcŽj$¶/8È…ºóá¬Žp�˜€­óŽyO²ÌlX¦½¨4À£8ÈôÂ~0É5Ìë/,ó.¬xZÐ¯vÏXÂë`m�¿—b)f‹DnØ‹0ÜÇÖÅ›Å¢Tˆ£2“•4�3›]cGªˆÓvCAHîä–²%ÜâÀ“]�+cö¬?%3�Å9F,HÅÈ‚Ð²Û$ŒàáE)PñæýÁÎ|Àêïp“AŽÑŽ\¦‚÷E¡²0Wˆù™�U(àéaGFæ=˜ µžAÜ/åVfËüîG‹Ä»È	Ä–rÞ�&\CÓMÈàïÃ¶^Á8Ä\0ÐÒ]|ƒ›ÀâY~¦4…F~`)�á]¢ø	ð‘qN›Á‚°ð¶éA5óæ}äë ¶úc¹)MèšƒÈÓ¼Î¬AÏofº{ÅQqXNMé@¤ƒœÚà‘yóæ}è_Æ°‘ìãìç L\–^¸ÐE‚ÝR^HÚL¥·˜Ú›déˆ'vÉ"
+ ’Ÿ²˜
+ UìÞz¹ïÀ®[?ÿÇúva7üE]]cCK[Ç®½Ž½<lÈUüÆl@Âç¤0²óä;óš
3§¤ÍN¹œUŽÒ°“§Yx½ó�7.‰”ý~ŸµÝx×Âhé;%ŸßŽTß´j}Ïë˜s.±³4Ev‰…`:—ÀM³öŸm�ß›XÃ�¯€ÓcpÿBØ°EJ‚\PÙhŒñë;WT…B¡w|àS·ßûø÷žzú¿è[¾ïÁ|ê©§ž~êé<~ï­}Ïü¢pqÙŠÎ!Sœa‘–s-Ëpká‰™^¼Éõyù†™”¯<Ä7!ÎÂÚ´}Ù	fõbâÙ�õeþÂòÅùå‡þR<Sÿ%¾}½ŠÕŸþ×X,¦ß×®ãñÄÏ¿{ÿ_~4ôG›w�a�Â§¬E5 ~V›[Š�(ypV&Ø€ÁÍ¥¢ü8,fÌˆ8=öêúš"QíÝ÷äs&ñD<¡¡ó§óæ½ë¿?­C3ÑÒñŠÇ_zòïn¯
ú¢+z0?¶í4Ð¥†à¨
+ Áj4o9¹"r6¯|d)¶“)œÁ¹ElÁMèN|«<|ï­�?•4ðÐÍHû÷…O>¨A¥b³ìÊBLô'Ï=þÑâpEÇ�ÀÈÂÖÖn"`J3¨ýñ²©¼Àª�¾®#‰NKcÊÉÃ@eÀ€æÒ3îk
+ ûÝòðRB3#ý®aP‰¸y+fÜ4ÁÒ.ðåÊ`‰Ñ²ÌÁXì4°‰*³
=ZTžX«‹_¤3¸þ1!@LÍ ÛžúiÙ7žK?ßÀÉ*fa¦–‰˜v­Û—‰V<öÜýµ�èN.‘&ð:eA15j Œ×”W§óà,Õ“.8 rnø|(xè¾tÄfVÎÿÄ�u€l»±ÍÈÄÊ€ÉzÆ|ˆzqì'�¿7tc?ð93r";b£ª˜¤Ì¯DêòËøº©¹‹”å��0qT©Ì:kd¦2zwQèÖê$ÌGÊm&jæ3öµ˜EqßÿrqÉ6¶8³¥Ø�RÅÓ|ß‚5y†ÌoÈ¥))fµ8æ"Çn,Xü�—tÒ¶¬$nr¸MR4VÆ�ŒQs£Áqú#VZ1xIœk}–ö3w…:òK©Z*dJn¼x,“È�ÕÛá[%ÁûKØ¬dŽ²x"f[
a/ëé„=]&ìñh ö³O…š'<etj~,Ó£6Ê¬TC@Ì¢¢ü€‡ý¡�þE�Æl²Áˆ%(ÃJÄãÖ|#�Æ93'…ø§ýMÂRK÷!€é¸&ýàßx~Ã0½.ð–s„»t¢ð,u pq�ô±ç$“áãq2'�böµmSäÂ’*Ï*°(/Øº#àõÅ+‚Óù�¥twSâÚ6ÌU?ÐºÊ,k–>ú”ÉãÔäGqºmX¦Ù˜šÔ¼`$†æé·öÑ’~ÑYÃÂ`%p‹|ÐPÍÂ|«•ÏFV9kT\2å¹,@°SúØOˆª²'5›¸mujŠú¹„©³lñJ¬î{…Ë°[½˜(1|®ÄzÕ³¥
y‚¥¤ª*&˜N:àÌð`R®ë
ûÊ¢G‰ù0Ù²!n3VÂ²*óm
+ ˆ±4–0­°%°›ÉbvƒjÌy]ŽºDkÏ²þ|«•3ÊêÒc\9#–�´Ž3jªVÌ´†êý?¶^Ü6
",ƒI˜#’<bÂj�K4¾ù¢*«“©>\¸Òv€`*Ñß)Ê¬Lo`³kÇnè3ªÙÑË@oOp�MB	F‘Æã´vŠ[Œ`eÛ”Åw¶)êÞâÇLf(ß¸pœ�!tõ�l*Î¬)ß*$tK±Óc‡ìK±—¥ç98ËÖ¶=YŒEÄ*‘£´*µ±�ý�ÔÏ¦HDµ†î«b¬#Z3ž/g)Jutˆß@òagÇ>Lç1elè×þÛmÃ°m‡gôA"N¹7¶-ÚÀ%bôà�¯¸ÅQü^©	6ÖeµÁ.X™ÊÛ²”Mæ	ãDŒ3Â–Ée9�Òðw…¾�0LÇ`fJ¥ÇãsÇñIÍ{	[t˜ƒÕzÑÑH=µ±¡81.sˆÔ7[Òïß äÖI+_vèžÈQ–ÿ<z”874»›“š-¿Ly@‡ b6ç›aÍ—&\Gþ¹`1G¥¨®’Ôµ¡õ—±83“žZ\É–È=åeuO™¾ñ¢ÿ9FOw6ëè˜¢œ·-ÊC¤†],NyŒƒÚSGËo"µ^Ù«ç¡·1ýjIùHfúRžÒ!3Ý*ýå
s›ua{e<[TŠyŸŽE>MÂ¶ŠŠQZ4fOŒ”_HQ$ŽRì‰U¯�–}ÜhÎ ;Ý¾ý†Ìr­þ=Wï¾©S29´v˜<´}{÷Y¾%”’é
o”½ë‡�L,Š:€ªHo±%ãÊ��Ûs"#¬aÜö§c$bÿ_*Zß+i‘Ÿù¥;P
+ ŒÖZvþRz×üM™ö[;R
+ ø‘a,eª²â-L$µ!.e7èDÙ§m²\–xÜœÖè€
y0Îh.&(§K­o;ÿÒ{i¤ûp-t—ÿÔ/ÞÌÆðÊ©2ßÂMÝ›ª�½h”¶ÐZ¿cž)ÝÒšÎ×+*g1Œ‹Qs¡åÙ˜Þ1Å÷FrL»ÿ�ÿíŸb1ZqYƒò‰ý¢ôÌq™ë–Xö*®äKÿèÆÐ¿åÐ™m¹¯d\Q}Ái'X#¾f:ºBÚª;!hlˆ*?ð“¼±f=Úy¶´+dxú�¤wüêY“ÿ´{OÜðáãÜB ò$õ¦:¹þÏÜðÉ7³c¥„}Ízßº3ÛâòQ·Rs¦Ü˜îÜÊ—@éuuhEéÑ?D‡'F‡¸(|,þŸÏºý�í÷>°é�{¸wÓ½ê�{Õõÿ•þìÆ­[¶ªG‡õoëÖ¶Mê
ýÖóAíã9ý¥Æ±uË–M[ÛÚ6lløð_·µg9T@ü¾ö�eYJ§o‡0m‰5SŽRS¦ñÉ~éoHh&NÅ“µ¡GEBãq;­j1œ>b´–a_|Ø<¾ûàÃßµn?üÙþáë{´c—õoŸqwŸ~×¸Ü³×x…ñ”úè.í0îô¨×Ú›t÷zÚ’&“këÍó‘›d¦œçV^àœ2/n¤Ç™EH1¢àã¬ïhg,ô‹¿R±ú³§l�jN›ÔO¼{ù¹ÃÇ“É¤½ÛšÙKÛ/™D`ÜAÆ³`¼P[7-›iÏ¼»vRå¬¬ý³|aÍ�´{oÒ=ÿRÍ�W¹4ØJ†)ÓÂ ¬Á¦íÕ-xÒ2›	$Çm½N‹)>¯Ýþ«?ú3&—a^%ž¸aþž$R¥’Öô!j_
£ÑŒÞ]U£Èìií9bí}3vøiƒ¢üâ
o¤ÔÑw6ê/[×Õ=)j½ÙnñTçÌ*ì•gÚl%‚*ÁzwyGÈ27£0¦JJ›ÿ?ñõp£ö¹‡I*ÓØòvð–òÚw;||Uñ@&M:}²®(à.ìè¤¤––A.mÞ1],‹é¸ª¹Ôc¨¶ðgÄ	6“Îq’¹‰äEé	K[ ÆX½Ñ(³Ú«!—‘9?º¶¦yæ—V§4ÖÎÚ«TÉLéî8›uÀUºµOØÑlDdÎ±§evßn7Ä;’°{•IDAT˜ü�…­!H�hþ«ˆYJ-Ñ!5ÉŽE†²£¸€Û¬˜M«ÇÐ®Ð&}0åRòA’â�Õ”T¤jŒÞ?Ü¥ ÅMýYßNeÜ~4A99T‚Ñ1’õ!9i* ÈàõýpåiÛ]ºK=µ-µ’ÜÞØšl¡ÙÜªÀH†‘yöƒ_'í’	ÑÂÏ9H­ý*:ZüRœ(+*ÆN¢
+ ”ÊŠë¢ôqš´;g>Ú�5a93–Áõ/T–Ï!Åµüùò(W(ƒ³,EÅt(•Ú~^Þ"Ý:Èô(×‡9Äé„†9Jq.³cL¿\Ð’”ívýžŒåµpo`Óìì40Ý<!ÏäG*Ñ"ŒÑå…�’AF9öô�Û!c:èGŠ�Ì¸Ÿ…å7Â5\µ±ƒ±@ÀXúìyS©
+ ñ†§Jë&€_9ƒEÎ<vÍ¯ÅÀrô=ß·]š8	ÂÇ)!ÊÖ„˜‘Tb_TŒ4v´8ÒŸäËÜ‚ËÚ�ˆf,]fYÛJØ;¢ÊðV0ï
Rx°ÒÍáaâ‚	=ÕÙ[!»oœU>G‡(œ(oÑ–«$Õ'S¥eX‰£Kö%ewÆBYÚ«ØY ‡�Ê,�¥ŒëG)ÀYÕŽùÉË ò�’É‡
+ kÎ)ÊNw±MN1:ˆCŠ�âvúh�¾4Œ-'/ƒ±Ð¢èHf–ÀÊdšŒ4fú%`·ú>ËÃl¨wñ.éÖ3LÌŠø
+ =AgÆâTF?NWƒhCóÌ'¤VÙa;ô&Z‚/`ìºI7[AŠW*³Öp¤Ü‘X¸��Þj†6ª{G°ñ‰fYã0Á•ÿ‘üO"nÒ‰�i/ûYcpÍ(�¦Hˆì‰l8�¹Ñ²:üÙ»«!«w¢úVœÏÌXéµ�ŸÚFŽ¹LìÞÒŽÔ¬€) V6œ± òËT*šNÚ‘Û±Œvµ;CŒ¬!yj,KÿÉ/”Ugf,E9[¶xœŽ³hY>–½kY>·J‰	¶‚†ª˜¤´=éDœŽ8hb4ØŒ±" Ë8É2¿¿ Ã£[g¼"ÓÓ²2™öÀàÊuÀ¥r“Ëk‚³
+ ábKáò3t£Oã”Œ'±@jÊT¡ûù'Ô1(Ø[›Þ!Ñ÷0ãXäU•ùÓ»,%Ubî(Ãè—l¹9BŒ+¦ÞM¢;‚Õß§ÜD»ÂÎÙ±@Ëc6lËd¶£uRë(‰”™Å
+ ˆZ«
6ô†’Tƒk{31ùDAëôìZVf»´Q°Ž«ÉrÕ¤ˆ³�sCx’Ìnf¬*AÌ(&(Î²¨-q4\‡Ý’Z®Å«	¹d}ñåì�,²,e¼6ð:¸/†g]
»ƒã	Ô³`ÁãƒFñ£YoÄ”ˆ0Ì£lL½ù`yñ6:¶€rÛÖ¥Šº¯xùìîœ©‡L‹›±¸Ò±|Ûó9fÎ+µ%œœì®=0HÒ­1®È�ÄŽIªÇ0¬¿]Pº×Œ€œ;*â+ UÒ)e¶ÁÊ¤I[ìÑÊ±zÚÚVÙ+¬�nªýµ�O=�à–ìXAS¢RYXs8s(º�ŽûVØ;YniÖ#•³¼�­~Œ‡–LÐICL×®ÉàAµÊ¦�#.®|ç{LBfÑnU,øÜòÀÒcîÛ’�íP#³wÌï×.u+³–¢¨ò¡
<ÚwçÒË•!ãäÅ�Ñð7”KmmìušvÍŒi^OVÞ<Á.Ñ¬Ruú‚ÖÆ1± z<3–5=µ8<áZ‹Î.vœÊj£ps à¾…�O�QŸUÏG/+Ð
kðá÷„Ö«.³å–±#O	9lÍbøa;íÓsV:Ý®çû¹Ûy94è)=j»OkÖN¢¡Õá²Ù"­xŒ,R¡óÒƒkCeG¬éB¼8¿ƒìXþO-O¹°0zy†å–¢e\w[E
Xpþ [;Qv„h?79±'ZyÆÎMõiÉ.ËeL<ù1é¦‚VÄÎ.@÷ÜµF÷�
?û¡àeNÀRÑš,Š¾ìœuÅP {í§G-YÓ·Mèk~àÑAºêˆ©ÆµÊ²�JkÏñ>3)IaŠ/ Ké¦õ�†jC“™¹KëP\�…•lXÇBÈô>wöQrwYxõ`Â\qbë+jk<ñÒ-�ònšû\/Øväl¢Àmœ‹ä=ë2s–¢L5øûA´
+ …9¯¢¥¥&·#ªµ—¹•³j]'–«MÄ˜ºÀ8Œ·Zj|‘_ªŽ½—à\®I1®ö}p´|$3w–•9Y4!³MB°ØeÌ21Õ&És�Å¡Oÿœ^`øŒFëÌýáPû[ÿˆÛl0ë5�{_þ¤ÖKs	–ÒhÂÀ¤E‹ÌÓ‡ÁY\	ìþ^FÀ2‰N¯,.}àÒ2À|®VZÚ—ä¥æ§]ï¾²‚søÖÂ…ã™9KQ¦—÷ˆ¢ÿÀvô^l?ÇÅÔÇ'î©,ýÞ IÔ›ˆ½ô@8¼ê‚­/³7¥¨šU´£…#y¢â×_Îž÷¹XV&3\^ê\†(Þþ†¡V„Øne¦®4“wšæzeíüwÞ>ÈVBÄ~ü±@U’í:5¦í˜Ë)Ø™‡"eû¶5U—NÍ1XJº;T�7ÙÑÍ‘í‹†]+¸Ì¤üúÒÂß4h�·¿YX¼!kúa�Än3µñ–ƒ)´“×V°=3×`)éVÿÆì½@Ü·–Þ¨�ÞåÝÌXã‹¥ª¿=c-Yùn] ¶96Œb'7z¨1IG¿sæìâpÍø\ƒ¥­Ç(�¼žCê\b™b2ÛF&™ÚPúÎOü\ç­3÷[Ï11€(¨M¿‘Kd¬n“öûÜìTæ,EXP1Æzî�hiCÄ¥3‡P=qMîB¯´„ŸN~;X|qEõÂ,‰]¸ãÙ3›}¸¯hi*s,+“Þ\Ko©kÑç¥‘�L¸ö‰€ŒE4ê¯/Œ|ñ©¼eBNÚ›};œÈ\#A®÷gå.U®šÖK§2W,UÈ×îql¾â/â…ˆlOE¯53@í–ü¾ÒsÄ§ü°‹¦¢úMbhSŠÎúç/S®XZf¬¬ü´Çrhìá÷ÈÈAÒü8»¸¯ÒW•JÛÎ‘\—3˜Ë`cC\d, ÊâÙ1¬ì`)ŠÒZ2Áú‚ÀOc>“Hy…¶áPÞé¦`Iûä¥ubÜxAÜ	ˆî]é–ÍÄ.¶…G'u¥,+“¹´.°8B<+²Ûî�#•Ž¨PÂèÆò‚ºSÓJ&=ÒYŒîÇVâØÙn€#)Q+xñ†ÂC•‘%sÅÀRRMÁÍÌÞ%.paOÍò
+ YÆ‚Ñžò`´7mÚïÔ–h°j7 ‡CÝWò¨³ÍTàN©;“¹r`e”©h¤_È%à:3!®8¯g¹m'[+ã­åþº�²S¹{zŸcj¨¿tÆ­ý.‡àõ5Á%Ñ	—Í—„­½ø¡Sc�ÞUhV˜�I�_öWíž¶1’íVXöv£ôÑêU®¤ei¿cûüzÌ"Üétß3¸1‰�k_à_vRá>F5²©öò`E'õ¦7�.ÄŽ…H©Ô¸¿`õ¥Ì†ê¹Ôêo¡öÇàØY[,©ÕüdÂîZ_u—â\ã á5ÕZé_´õUÉ,Gç`ì–À4Ÿ­ˆœÏ\a°Ôu©6´_�Â\ìF¼ü‚ÒX}K‚…ãiE/gPF:Jý[1ÇHÈGØ—šiØ�×Ké+
–vŒTžðöÆ²nI«~ÿ¾º`Yó¸¢x¬+R&»*%­ç˜½31Ýd¼Ì‰ŠÏ"V¹ƒ¥dŽD
¹físÜ'õÝ
+ 7kãÍ[	§¶,õÝÑÇôJpFX•k}©>_P®<XÚùžîöß4&eØ±ÃÞ%†žh‰ø–Lf_�¥é®�Ú@QC?ö*6¶EüEã¯z¤¦TæjX–öÚ�$iáßèh»]Û¦¢ÂÚ#¹,]3^‘>»²Ä_Ñ=æìû!ŠÜfôêÝeÇ•«–J%+ý1»ÝSf.+8�vªÛ*¤ê®)%çOÓøk¸u‘T±~Ûº
+ XážˆV��îLæjY–ª±kÃûj�jmJCÅl¸óÐ¢`¤cjÆ'Zîˆú+î|Ýµ ‰,¸åÊì «p™r5ÁÊLEÃ{ùAˆ-ÚaPYÉžŠ`´=5ã™I3®ô¥�ê"íž1ìæx
+ 
+ Ü´gJÊÏg®"Xêq$R:Ä˜¸•È*(¼­º ºiÄî0C¼ÒJêPs™¿rë«ØZ gïèn9Àw;§¯*Xê¯í
+ -yÕ– Î6[l*Vdÿ’`IûùË*ÄÓg·–ûËn~Å¹´øœ¢É¢=áºÉÌU¶,-§ã)„¢77QÊØžê@d]J¹\öP
¬·®$PÓ=
+ 'Â23°¿ÉPux<sõÁÊ´ëRSeŒTzí«
”µ�(³@´ê{¤N6GýÕëû<Jìu(-�-™«–Ö…Åß6‘C:’wß·ž�¨Á¯êúóÛ£RÉÍ'0•tB¥>Ô/-�R®°”ÔjÿWD•¦,ÍŽí©’ÊZR³ú•UÎLi(ñG¶¾,l*dùõCÑèpæZ°,-pZÚLb˜)ù4µÄèæÊ@Ùºá´¢Ìò	VÉëdÛ’‚â{'¨À
ç‚®*èJ+×X™ó5�]T°œ“ñªøP…´`Ã°2ë_Ø�éñî:)¸¨å-.˜f-¢í
+ Ô¥3×ˆe©_wdiÑäÜãÖ€khCI ¢#•™«C×kSwW…Bõ0v†bÏ…+G”k,Í¶Ê‹ö0ÅköÖŸÚÊ
+ ª;Ç3swè!V%=ÙÕP,U­ïŸ JltµZ_Ø57ìË÷ûþ´¬èU*JjáöVSÄ·¤s\ÉÌý¡:öÃ›J%õ»™Frhg )¥\S`)ÊÉH¤ŸÏ=÷Õûç×v_	¤líu¤©4jî³÷ÿ9° <­\S–¥}Ó#á…'olW} \(¥\1°À†·.ùo6Ä—<QY<0W_À—7o(™Îpäu{üMôTšOM]Q¤Ì¯2yjm™¿äÆÿ£‰‰õÒÚ9›Z|—ó%»#¿6dÎËÊ¤ŠÖqåÊCe~—éC�eR¸éÙÍ¡†KÊµ–’î.¬:¡ÚÖ±»ÊýUíãW)}zT2#[—ÎŒÌÝçø.ï|~«pá[C+J¤Šîñé«fV61L�ZíÌ\£`e2Ó�%’¿¸îT*sÕýT¥çô„ù.÷
¶G›{3WÙ¨èÁ¨\»`©¼u>u- uEßåŸÐ?¬2ÿ`W•ÍrqkIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-1.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-1.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-1.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,26 ----
+ ‰PNG
+ 
+ 
IHDR^´SáÓgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ 4"\âI:IDATxœì�	PTWÖÇo³‰�l
²¨ZdQÄ8²ôÃ™ôsÜò)F#�Šk2£GÇÊ6	˜J2S–ŠL“ŒXi«ÆeÆ (‘È¢,\@Ü�f‘æ;÷]è´Ú`#Ð÷Ñ}~EÝºïö[N5ýþïœwï=WÒÙÙIAÇ„·‚ˆ”A´€Ò€ ˆPÑJ‚ Z@i@D(
‚h¥A- 4 ¢”A´€Ò€ ˆPÑJ‚ Z@i@D(
‚h¥A- 4 ¢”A´€Ò€ ˆPÑ‚D$icëëë‹‹‹¡ÁÛAÄá5ìÞ½[.—G
+ @…iDŸtÙ3''G"‘äH4HHHmêý­ŸVWW§¤¤@Ù'ƒDüð—¸¯–/_þÊ+¯Ü°³³�èéFÕJ†Às\:555;;;==îüuëÖiÝ'00ö�²'ãß}÷]”ÄéäMrr2ÈˆÛ,**Ú¼ysUU´$&&2#¡Âv€pîRt@	�°3Û6á†
+ ;!ìüÃ?¸»»C”P‡¶C¶«°‹FèrXb'‚Ò©‹©O… †¯Â¸Ûáfc›PîLxŒ+Š ¢~ªÃþË–-ƒ><êÓÒÒà^
€¶ì¼víZx’C˜ÀôJ¨?ýl‡SÁI �
+ \Q—C …Éx:Dð;XÙ“[� CÞÚôëû	@,àùÏêjG@sg0\ÍFö`gO{vÓ2_JÒ>
@
gt9„yÌUéÔð)ùKB}Ãßk€ç­æ{GxŒGFFÂÃ¹¾¾ÞÖÖ–5BE÷·Ìaû³ºf‹&ê[ÔöÑå1øKC||<Ü�àŸC	Š�TÀc‡'yFFF½T`³—“¨û>Õ°ý!âP—½ŸáùaÀ¥QDƒ¿4@,�žž®P(ìííår9Üc°I„`J{õ¦VÂÃÃáæ|¢‹œC Q"‘@	õg¾xŽCÜ`ç¾v¸"ˆÈû�'6 à¹ÇAU°xðAÃƒ§4lÙ²ÊM›6ñ2A�žà&



nnnPž={6  €‹
‚ô·w
ûöí]
+ 
+ B]@¢oihooW*•Pùâ‹/ \»v­ž
@DÌô|=sssWW×yóæØØØÄÇÇëÙAt�C@aff¶}ûv¨Èd²ƒ‚¡éÒàààÀ*ÕÕÕ6lÀi‹"B8Hƒ³³3«åååyzzêßAz‡ƒ4@e\\\nn®Z&¤ÁÅÅeÕªU
+ …bøðáú¿:‚ ºÀaÈSyy¹¯¯¯ž/Š HŸË
+ ADÿ™—‚ˆÒðÆd×.‚]–"fôP,\H23IG=šÔÔÐ–¶6rÿ>Áž
+ ú–†ÒR"‘Ð¿ÚZC[~ü‘VüüÈÒ¥äí·õi‚ =¢ï9'vUÔ}^^ä£�HV¹w¯«%;›üç?$*ŠÌ˜A¤R=ˆ EŒ=Ÿ|B6n¤�Æ¦Mä½÷hËíÛÄÎŽ˜›ó¶AŒ}¿†!_àÃ{Ûgýzúö1ÉÉÄÞžÌžM~þY6"¢÷€B"!wï’üügìqDlì¯›‰‰ÄÁ�=ú«ã°u+±µ%ÑÑdÂ„Á2AŒÅ¼y¤¼œœ?ß¯“LšDÎ�£•Ë—‰\N+7o—0AÂEª«ÉðáÐ[	çùé'²x1­75™Œ¸¹‘—^"ÿøõMéb|
ù46’ŒqÔ×Ó¸u‹q„‡“îõ4Ñ‘†§ÉÎ&¿ûyø�DD¶À%ÔÁ›ÀÞPÑ¥U*âíMRR÷*‘‘´›#7—¼ûnWËW_Ñnp"þõ¯Á½4‚úî¡LLè_IÉ _ÈÜœv”ª™6�¬[GÇVÝ¾ÝÕ²w/}aE&O¦&!¢†ƒ4a(ä/¿èû¢��ä‰%,ÿû_²c­€Cñê«´rïrP!ˆ±Ãç]Ã�;ÄÆ†XXèÿÊOrë}mMœœèfH�ôÁÈÐþ1Zö5äó‘‘A]‰ãÇé40[[Ú²a	 AÎ
EŒ
+ žÒÐÚJ†
ãuq�¸ŸxxÐR*¥Ý¢l,&T°71xø¼|ëè !ýÖ­\.ÞìíiìsæÍ=Ãt¼	w@Ä� i05¥þyY—‹÷
D,èÚá/¡£9A#çÎÑþÑ'®Â…ÜŠyóÈõëäÔ).H¶o§)íT*’”DÇhaÔ6 ØŠi¸ICK±´ärå�§¾ž;FÆŒ¡þ&•§§ÓQ˜PyñEÞÆ!ÈsÁg\`0º@„(CsÅïØXÒÐ@ÇVAÉØ±ƒ:QQÄÝ�‡}ÒwxöP47ÓTNÆð¶?,ŒäåÑJ~>™:•V‰µ5_£¤7¸ÄííT>ý”×õõÊ©S4EÅçŸÓÙDHu%—Ó4™o¾I”JÞÆ!ˆ6¸Iƒ¹920$:)„	Èš5ÄLàZ[ÉŸþDßM<HØºŸÐ²amž‚ˆžÅÂ…ôeþ¿ÿÍëúü�ïže�),¤A„Wþþ]Ù«XW(fÊEx�¥Åø'NÐò•Wè¦BAg|Í˜Asç²LV¢O¸õP OðD¦\¹œ¼ö�ú¥Ž¹²³i3å"ú�³×põ*�‰é^{At$'“mÛh%5•Ö¥²ëU‚8<‡ìAhíáA¾ü’£	Cu
+ Ü´4RUEvî$¿ýmWË‚ô|ýurñ"/ëƒ…§4€¿0~¼uRôwweÀ—ÆHH I÷÷íûu��ýûéèLé'œŠ•+é«øŒŽ&yTª®ùðM:;Ó)äff¤®ŽN%†5 Ñ'ØCaP€:œ>MŠ‹Éþ@7oß¦¹ªBCéš€6ð6R 42·nÑw–YYÄÊŠääÐ–k×Èwßa¦\äÙp–p†‹Šhrœw4¨ttÐèÂ¢E´2~WÒ}p4p`ò4œ�Ñð»vñµÂðaº@„¨7o’={ÈªU]-iidÔ(²d	�WŽ j8Kƒ……qÍ¤ÎÎÔqxé¥®ÍI“hí£GéÂÂ…‚|û-
Fc†ÿ»†uëh×½‘LÁ3àÁ±Ù_±±äÈZ9|˜ÌšE+t!ü¥Á€/ùÑ£Gíííš¥J¥20777Ó@Â{�oöüˆ•+»z@ýýé°Ë¨(:a”µ JÃsÒÖÖvãÆ�ÚÚÚëuuu


<Ð,�ÆÆFP�ŽŽÝÏljj
+ aee5¢¬­­e2™ÃãØØØ’¦ÀdËÚÍQ\L£6JâÃin»ÐPô&þÒÎê�?ÒÙD>>|
é¸ÿ+**~ùå(/^¼ÈäàÎ�;¼ízPµ^Œ9rÔ¨Q®®®¬dGGÇ~j‡:¬¨ª¢#2Á¹ps£³`ˆ ð‡½¡†ihk£½î6�÷ÞãkHÍÍÍ§OŸ...fŠÐÔÔÔÏsÂ=©Ô¥‰‰	x,¾PÀ ýGàŠÎÎÎL&F�ý‚...}U
–)÷ömtyy$.ŽfÊ�7�vv ÿIÙb˜I�——wZ ¤¤îÏgwÜQìN n+Ž½f	XXX˜ª;uôxøða“˜hÖïÝ»w·ð_ „ÆÞOÒS#ðôGÃ†
sss{áq<<<ÆŒÓ“d<‘)×ÚšŠÐÎ¤áìYRP€™r‡0ü½`ófê©¾óŽ^/
+ ÷^VVÖA�k×®õ²'øçÞŒ;´¹¿/Ôî|µXÜºuëÆ�õ¨KÔ¤¯ç´´´�¯�§§'ˆˆIÏ‘ƒz±BøŸ270%…Ö‰Æ°+dH 
+ iÐ'µµµ{÷î=pàÀñãÇÛ ˜y
+ ðöýüüBCC§N�êïïïååeo/å[[[™F€X€^½zµººúŠ¨‰îç'hÜ¸qL)@('8±…Æ§¼œvs„†v%ÑNJ"'OR?bõjñ¾WBÔ‹4´´´(ŠÝ»w9rD¥R=ñ©ƒƒCtt4ÈAHHÈ”)S¤R)#yÔ•ÇÕ¸téR]]�Žg�Édºñññ�ÒÝÝý	¯*=�|ÿ=MrwèùÍohË7ß€GF“ÜÙ÷=4…4´´Ðñü“&Ñ¿§  `ÇŽß}÷]ýãiÀ+!˜-B/N²ÑÒÐÐp±›.°ÊÍ›7u9vøðájŸÂ_|
‹övV°/{ÌpâèË¦óçÉ¸q´E=ÁáŽ(¤a�:)Ž;¶uëÖ#ld_7¦¦¦±±±¯¾ú*(<ëòzÆASS“Z,***ÎŸ?å3_‚VVV'Nô×@*u'¢Œ”:"~nndÊt¬_�ÁQH–iðõ},aQ8|ø0ˆÂ	øÝi0iÒ¤¥K—.^¼ØsQ4555ç˜X·t˜ƒáêêª–‰ÀÀ@WWß¿þÕüèQª••t‡†òÏb¦\>ˆEþö7p®^Ýßó­^½:�-#'`nn>Brrr@@@ÏŽèÌýû÷™F”———””œ;wî™baffæëë;yòäàà™11/Êåòìl‹Ù³éG³fÑ	D#‰.2ØˆEúø´›6múüóÏÕ£’¥Réë¯¿¾~ýz7ðSÞÜ¾}»DdÊ²²²æ^×ê’H$aa‹æ{{»­ZecbbòÕW4ú€ˆcñb:a<D233Á/¨­­e›––– ÐâèèÈ×0¤'T*ÕåË—™L0½¸xñbï¿Æèèè€€u%%3ÏœñÇ?J6n¤�Ç�Ót˜ááF±®²>‹4<|HþþwÚ§Ú·[ZZ ‚HOOW·Ì™3ç³Ï>Ç^y#CðûÎž=[XXX$‘H;[Þï)LLÌ‚‚¦Ï�û?À–-þûö™H$�ß~+Y°@Ï&2b‘†çë¤¸zõêÜ¹s
+ 
+ Ø¦»»û¶mÛ^~ùåA1Ñ/mmm¥¥¥j¥·â!<@žÂÜ\:qâ
+ ;»yÉÉ²¸¸	fff³fu*•àbHÞxƒhŠ…è„X¤ðñ!~~}è¤ÈÊÊZ¸p¡zä²eË¾üòKc­d<@RYY	O‚3gÎ@ùô´7++«ðððööwjk'UT¯©‘8:¶777gfZš`¦Ü>!"iØ¾�ØØÐä…º�™™¹hÑ"6jØ°aà,$%%
®}ˆ˜¥¨¨¨ø¹ˆDZ[[5w°³s‹Ž‰ŠŠ
+ 	‰	
õT©ˆ£cg~þu™l„­­-/³‡"’ÝÙ¿ÿüùóY :vìX�‰©l˜>b¬À�"ð&˜R”••i¦Ïqrò÷ôLrvž–š:~0ÕÕdÚ4UppcttËš5ö--CO80wî\63ÊËË+''ÇÕÕ•·Qˆ¸€ BÐˆ<�+W®¨?’Ëå!!KjjVVVŽ	6=x�\»v-?¿®´Ô:>âü-u!"ihh [·Òµ^ÙÜ­äææÆÄÄ0×ÑÓÓtaÔ¨Qú3šÜ¼yóÔ©SL&À³P�§˜0aZll(ee/mÜHßR%&Þýýïóá¦pssóóó3æ™5"’†gvRÜ¹s'00�
^?~<èÂèÑ£õj"2ôyôè„yÝ\¸p�ÐáU¦¾¾KFŽ\ë²v­�T*MIQíÝ«ôð¸vqútÛàà`+øu"’Òk'Ø9gÎœC‡AÝÞÞ¾°°Ðó!ýæîÝ»L#À­8}útSS“……EXX˜½}rUUdy¹Í7ßHâãÛàÓÌÌ&“æéÓMgÎ3†V\Òðý÷tL[ûà	>þøã·ß~›Õ÷ïß�ƒ�§£££¸¸ød7àŸJ¥Ž3f„ÅÄÌ„ #1qrI‰D*íüàƒŸ�)•Jx8Íœ9[Þ†
+ â’†ž¯?Ö%ñÖ[o}òÉ'¼-BŸêêê'N0™(++³¶vóñI²´ŒûôÓaS¦Ð4U~~�FŒ¸ek[àãsÂÇ‡ÊüJE•°?
i˜?~ff&T‚‚‚Àµ3ÇÅýR__?<Ð‹üü|[[ÛððÙ×¯ÿ¹ªj\c£ùÝ»¤®îÆ‘#G32:�œÊBBœ@&û”.XlˆKîÝ£9<–,ùuEFþ¡Ý3+rssgÌ˜ÁÇ8ïµ°°4âØ±cPZ[Ëcc§@Ä!“ÅÌžM§ó)“’¾)iii	rÏ3qIƒÖNŠˆˆˆcÂ*Îñññ
+ …‚›qò*•ª¤¤äx7ÖÖ¡£GÿŸ——÷G¹ÙÛÛge‘¤¤–Q£*$…­maHHHdd$”CB&Ä%
ä©tOà&€oF„Äm¥¥¥>˜Š1 ð$ƒß­³³³§çŠÊÊÿ=ÞaÅ
+ Ijjø_}îôé+2YùÌ™Á  ›™ñ_F+¢“†C‡ˆ£#Q�{^¹råÎ�;¡²téÒŒŒž–!H_¨ªªb2qòd¾L6völ:¶êë¯§oßnjnÞ¹vm¥Tº‚KKKxø�LLž<YT#¬D'
š(•J—††¨çää@ÌÆÛ"yjkkA#²³³Ož,’JcGŒxyÅ
+ ›%K|@ÛKKëGŒÈomÝéâÒ	á3È„¿¿?÷žQKÃž={–Ë¤ÉåòK—.qÿ²¤ÿ\»v-[   ÀÃÃ£µõÏ••“.]²,*"/¼p�;vÔÕÔd{z>�ˆ‰‰ñòòâb§è¤¡®Ž¼öÍGó5<x�ÐUÒ6§¤¤ð6
A˜Ë—/3™(*ºà=eŠ¼©‰89u¼ùæöÂÂ÷
Tžõ>":iPwR¤¤¨ìììØÞÞÞ¼MC�A¤²²’ÉDyy³­m‚T:=.î°™™Ùš5k¸Ø#:i Ý3)RRJXzx''']5@ƒ¡¼¼4âèÑ£ï¿ÿ>¯€BŒ'»vÑ¥³³O±ÍiÓ¦ñµAôŒ¯/�!¢Î5Ó§OO:’m†……ñµAŒ1JãÁƒ¬‚Ò€ úGŒÒpý:		!

QlÓÃÃƒ¯=b„ˆQIaag[ÛD"¬næììÌÛ"1:Ä(
à)¥’.?%“É†Ä\"##%ÝÈåòÝ»w³ö´´4ø(!!!''g�.-FivïnLKSB]ÄÈ	dã ²|ùòêêjˆuëÖÁ&´£¸¸x0®+ÆÎKÀÕõž››ÜÂÂ×³EŒ;;»ˆˆVW( 
 ©©©Dˆ¸¡‘ÉÄÀ"RiP*•¦¦¦ÞÞÞ"‘… ú¤¾¾žE
Û¶m#ÂÂ®àA°�Xû åOi@Q]Ý)—kë=­•Œ FÄ‘PIOOW„			à/$&&ÆuE*
²ÿoïŽUÓŠÂŽ_°Q,&C—A§Œíêtõ2Y]3å=Ò'è;ô	Ü…€B–`§"¦ƒ=Q�Ð|Ùâ½üý¦ëtÏôçÜ£÷óÓúáasròu÷/Up´ÒÓÄfk6›í+p¹•>N§ÓÝ7Ó44›µvûi½îÙ5ÀnnnÒ–!ua0¤gŠù|~ˆ»dš†F£q}ýóööÏjµªz-�—Ý¡CªÃîAcÿ�æûÊôòüüüññÇÅÅ·ÅbQõZ 2ûÇ—–Ëe	·Ît×ÐjµÒ6©VûÐéôÔÊ—iŠç7)>ž�§§—/ÿ(G¾ih6¯V›zý‹4@ùòMC»ý¹Óù[]i€òez™ôz½««ïõúÓÝÝ¯ª×G'ß]C¿ß¿¿~od8V½8:9Ž�*—ï®¨�4iÒ¤HÈ(
o
Ï-¶ósG£QuKƒ£“QŠhxîx<N©›„òú¡ôëá¹é¢Ûíh0&ð–¼Òðzxn’b1™L*^™¼Ò°ž[l£ðrx.P²¼Ò�6áÄ+ dyC™� à¥l `×¤H�  
@@€€4iÒ¤H�  
@@€€4iÒ¤H�  
@@€€4iÒ¤Høä“¤B¯]–IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-2.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-2.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-2.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-2.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,28 ----
+ ‰PNG
+ 
+ 
IHDR^´SáÓgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ ,÷Ži¡OIDATxœìÝ
PUeþð‡÷÷wï®ˆI‘«’Žå¦‘–iY«fm%m�¹j›5µ5Í®/M;³îÌ¦íö¶Ù˜oËµFÝÖ²¬³ñÝ¤‚€€ 
+ B‚¼\þ¿ç<—+éAï=çÀý~†9sÎñ¾<Â=ßû{ÎËs\ÚÛÛÀ¯¹ªÝÐ"DÈ@4€DÈ@4€DÈ@4€DÈ@4€DÈ@4€DÈ@4€DÈ@4€DÈ@4€DÈ@4€DÈ@4€DÈ@4€D€<—+V8â•÷îÝK/NSG¼¸½ @¢ KYYYÑÑÑô
ÿÌ3Ïˆ5TG„„„ÐšÉ“'gffŠ5´(þu²DÌ$''ÓT<²¦¦†V®_¿>D²aÃñxZO¯ì"¡ñ0�@4t‰jþÕÚª×¬YCÓ•+W._¾<==�6ãGy¤›çRpÌŸ?ŸžK/BÏ-..¦�Ö¬YÛ·o™Â¤° ´F¼ÅŽ;ùoõˆ»Ú
Ð®´´4Ú˜i†¾çwîÜ<zôè¥K—Ò
+ ŠÛF~£{î¹‡žN3/½ô“R€¦ô"â¹´Hó4¥¸¡S@ˆ÷ÒT
]
+ 
+ 
+ 3b¦JAÌt^Ó«Ï²½e%åU"D4ÑÐ%*hã§Ò€6Ý‡%4#*…wÞy‡¶pÚªÅ#i%uº)"¨Ü )õ,ÄsÅJTD˜Ífz@7OWA;ÈaÛ³˜¹$±eåÂ'Ÿ|B+**²ÕF£‘@+ï‘Ø^‡6~šýÛË¦§§S"t.C¨‚Pí{—v©é «XbK&TJÐæmÛªEeÑyMWD]`KAœàÐ“§+	Ñ2°¯d @¢ KÙÙÙ}ôÑÁƒÕnˆ
+ 
]úöÛoŸþù/¾øBí†¨Ñ2
 Ñ2
 Ñ2
 Ñ2
 Ñ2
 Ñ £¸¸Øvõ„¸’‚Ö¨Ý(Ea¼—/_<x0MÅb```ii)MÕm•’P5È xñÅm‹4ïT¹ÀP5tÅV88aÉÀP5tÅV88aÉÀP5tƒJ†ÄÄÄ“'O"àWN�:5bÄµ[¡DÈP.lw€›Rý;[ÑÛáNšÞÖÆ`Û¶ñÅ–VWÇBC•l@à=Yí&(
Lµ«ª².fg³W^aF#›:•=þ¸’
€›P4¢£ù”²@ˆŒdÏ?ÏŽçµƒ`6³#GXr29’y{+Ù4m¡¸º}
+ E÷5´¥wÿ˜­[yeÑÚÊžzŠýþ÷|MM
ó÷gîŠ&€ÊD‡Â‰¢aÉŒô	ØOt÷°¦&öóÏÌ``ƒñÅ·Þb?ýÄ‹JŠáÃ•i)€Ê´
Š~×Ö²ÜÜ›<†úãÆ][¼ÿ~È;¶ÂaÓ&^G˜LlÈGµ�£‘õöÂÖ±cùOg{÷²ÂB>³e‹ˆà3ÕÕ8Ì`gŠv(.H÷ô´Ãf\^ÎNœ`©©|¾±‘ÍœÉôz6f{ùe†“' pºEx¸Ý^ÇöRôÛ[¼˜æ8wÎšTDlÞÌ{£Gó®Üm¡°³™½ñß�™”ÄÖ¬ák¨² ÔÀÑPè+œ®jhkcóç³{ïeii|—ädöå—,'‡¿�°gû×¿ØˆlÖ,6YýÓÌúE£ÁÕ•{‹�ˆåîÎ�wÚP(Ì™ÃŽãgI{÷ò"qq¼Up¥Ï%2Yi©ÂïÉbcùOgGŽ°¯¾â3Ôõ¸ï>>sù2s¾Kòº¤ô¾†ÚZæëË<<”yÏîTWó½&	á‹²ÊJ^G,XÀ�w¨Èéö5�  …ß°K¡¡|¯‡Í¬YìèQ–•Å“Køè#ÃÃ'M€Rç…ÅÂ<=•yÛ[TWÇOè®¯g^^ìÿ³ž‹I‹8
+ 
+ pÆªáêUþýüÈ#Ö«§4+ €íÜÉòóYY™5ŠŠØ³Ï²aÃØ¤I7¹ Pzï¼›ïÛ÷‰û¹º²øx6eŠu‘ê…§ŸæEe„pæ[¿ž_ÖÚªVE…«��Æk£¹ô!:?£ó§N±�Ù†
üLí—_ækyvàh(ô*ìkÐþŽ†ž«¯g™™<5¨¾ ï¿Ï¾þšŸ =wî¯N¬ègÜ×@úM.0©—q×]×ÇŽeW®ð:¬kvíâgy™Lv»~@êŸÔÔÄûçýooJ
+ ÿéŒ¢!'‡Ï|ð�u(J
ÛñQÍR!(fÌà;ù5~�Â.¨‹qö,¯#ââø"Uˆ�?ÎO”HNæãbzy©Ý>€.¨°ÇÌÝ��ïÖ'RØÅ�!ü`­›ŸoiáÑ Ó±C‡¬¹`±ðs«Žá•€v¨Ó¡ˆ�å;ó��§'›7�ÿØv0QDnÛÆ>ý”·½n_#…b¤\PW?¯¡Ï#å67[÷hîßÏþúW~€cêTëHVàlœô\çº‘rÃÃÙðK¿l}.1�‘rAIªECE¿þW.Ýˆz[ü#Ÿ±}güôûâ>³x1›=›ÏP‰�]˜àPêt(ZZø(ò¿û�S¤°‹òr~˜#)Éz{Ž7ÞàuDr2?Ð#Ö@¢……:çôR½@hç9Hqû¨—1}úµ¸ûn~Áø¾}×ðùç|'E}½*­ƒ~HµÅÈ‘¸*éÖ=ðÿik³^¯A¿É
x.ÐâŽü²QÖ¿NHåáE?Aé�“Ã
+ 
+ ø9LºWèÜ¹,!�Ÿ�I7è[œ·Cv'FÊ¹À¤Á»gÏæ‡E�±®¹x‘}ö;}úÚ@ÛÝP­CAÐü|>®;r„ÐP>È%“ÆÎNœ`ÿþ7ŸùÍoØŠ|†
+ 
œX]Qí£AÙE‹p�ÂáÄ	ÚdÊ~µ¸ÙÌ‚ƒ­k>ÿœŸˆ™œÌ/i¡èLµR(OŒ”;fŒuQŠ{ü8»pÁºfÿ~öý÷|¬m5Ê”Ü½VMãÆYÏÂ´u:vìà7ò!«VY¯.G§Ãiá…cÑ¯÷êÕ«­­­¶)ikks“¸»»»uâ¢vRŠ@ÔéxðAëÐgžá§]šLü‚Q± …#ˆ†^kiiùå—_ªªªÄ´¦¦æJ'


õõõbF¤@Ï_ÙÕÕ•ÂÛÛÛ§¾¾¾���AAA�üüü”)ôÑØ¸‘÷8
+ 
+ ØöíÖ³$¶lá‡BPM8�³G«T¾FD°¨(ešÐk•••%%%¥¥¥4-++«’\¾|Yívý
+ Š-&‚ƒƒJÓ°°01C9r›ÙaëV\¸À÷ÓGF§cÿù_Cóôƒ‘ríËÙ£AkWR455ååååää”Hšì1¾Š­ã`ë>ÐÆLÕ„­a›¹ý÷êª!!!”$%ááá4¥ìèmjˆ‘rkky§ƒIÃj¿ö?À1i’õî¡pû´
j…Z8HAÛÿ)	%BaaaOêÚÒh‹
+ “ˆ¯h¿PåOS‘=oŒÊ£ÆN¨cÒyñr‡Z	Í4ÞlTzMQïœ>}úºòððÐét"&l‘a0heW‘qÝH¹>><¨ÓAëE4Pï#/#åöy*ïkøä^©>õ”2M°¢méøñã‡:xð uºy$•âƒŽŠŠ,¡-‡â€ŠvÕ÷vFE‡H
+ š^ºté—”ÕÕÕ4SWW×Û×¤Èt½^ïÚuÏÁvÉýM7nä3óç[oÛAõPo4Q58ÑnHJ�ŒŒŒdgg·Ê]ÚEŸûèèè„„„áÃ‡ÓeA@¿Ø)o±XDFPXÐ/¡¢¢¢¼¼¼BÒ«ý&TEDDˆ˜ˆ’2$DÜhü×¨4›ù®J1ˆö?þÁÏÅLNæ÷4Ôì~%MA4(�6Œýû÷ïÞ½ûèÑ£7þgM&S‚$..ÎÛÛ[ùªˆ
+ ¨Š"/hzþüùššš¾¥'„ˆ	1¥.ÉuUÕ×_³ôt>ÈÝªUlÔ(¾fÏ~RæÈ‘ÌÉ~ß=…hàU(}hbbøÐFvG]ë]»výðÃW®\¹®%T¤Hh¦›"ÙiÑo¬¬Ã¹sçÄõVzò\OOO*¸†H†Jõ—Á` ß9jô›¿ì9søÍ
©/¹a^œ±k˜C40‡¤ÈÌÌÜ¼yó1qf_Š€±cÇÞwß}”T,Øóýœ•¶°())9{ö,Moº”ñÁ/½£%C;xyQA½Œ´4~F,}æÎå·ê0™ø2ÑÀ=ý4¿Aî›oÚç]>¼iÓ¦ô¡ë$&&fêÔ©©©©¡‹ÒÞ*++ÏJlaÑ“â‚þ"#(/bccÃÂŒ›6¹›Í<#6oæ :ïÛo�w¤\D·u+?wÖ¬Û}ýüüüÕ«WçˆÛÈIÜÜÜ¨F˜={6EÃí¾:ôX]]ÝÙ…’›†tF£1...>~Ô˜1wDDD˜Í¯½ÆÿiÜ8ö÷¿óúœjé¸�c!ì£¡¡aÝºuÛ·o·�•àåå5cÆŒ¹sçêõzG¼#ôJMMMa'ÅÅÅÍÍÍÝ?Å`0$&ÞxOT”~Æ_Ê*"Ö¯ç‡9RSù´C4ØAFFÆ»ï¾[UU%=<<{ì1ª‚‚‚ìþ^`”à.\8sæÅDQQÍ”••uÿ“É4tèìÂÂ¤Ó§}æÍsyòI¾2+‹*~"fÿ»¯2¢�kldÿý/?Ž5bDï^Ðb±Pb÷îÝ¶5ãÇ�á…b—7ôT÷Q@äååQ¯°  €ÊŠ®Nwqq6ìŽI“îLIIÙ´iè¾}®´ýå/.S¦(ÜdÇB4p·v�¢¢¢bÙ²eôa‹¤P˜8q¢]š
+ êjii¡j"¿²³¸¹yEGO÷÷Ÿ4{vàøñCÜÜÜ^}µ�z*&“ËÃ3¹S±úDƒUoR;vìÍ7ß´�É7mÚ´¥K—:ÛÙJÎƒ: çÎ�£Œ o‚Ó’“‚þúIII­­OUUÅ””xmÛæÔJËÈð��u�‹ëcD
V_~ÉüüXkÂŒŒÊ±ÇÑÃÃcÉ’%=ô�Û	Gú’’’ÜÜ\ÊšRO„ªŒÎðóÓ�“�œœœ�0öˆ¤x``û‡Vøø÷‘Ýˆ†^Û¿ÿŠ+DGT¯×¯\¹r¸8MœUkk+¥ƒ¨&()Š‹‹;_>93$dÄâÅÁÔë,/g‹µÅÇ7˜L–Y³è«EÅ–wÑÐ;X¶l™¸2*22rÍš5aaavjôÔ‰ ®Å„¸Ö¾¢¢ÂöOááá		©••––êâãÝV­b/^ÌÉ¹TTä{×]ÔïÐÐg	Ñ`uå
+ ?nÂëµ7²²³³_yåQ:4ˆraÀ€j*ôÕÕÕ'Ož1Aya;Ÿ"**aÜ¸Ôé(.óñÇ|/Õ´iµ“'çÒæ@Õ¨ÑhT÷ÊDƒÕMRÔÖÖ>÷ÜsâäƒÁ@¹ Óé×Tè—¨J]�S:N¦p5Sƒ‚&�úÛßFy{{¯_ß¶wo³ÁP‘˜X–˜èïãã£pS
×ts�‚Zøúë¯>|˜ñ!†ü×®]Žñƒà¶Ñ÷Í©N¨'âîîž˜˜èï?»¼|tq±ßŸÿì2qb�®®Í‰‰®II‰Êôaµ
Z8-­ËsÚ¶nÝ*r�PF À.‚‚‚&H˜TPœ°z‡êS/¯À]»+*’¨Ó‘••TTä²kWû‚'¾¦^	}“’’"##ÕþO8�Vª†®œ;w.--M’˜3gÎ¢E‹Ð4€_)//ÿYB9Q\\ìë«�Ššééyç¢EžÃ†ñaªè#éãSíç—õsT�	£ÑhÇaµP5h=–/_¾oß>š6lØ{ï½çŽ›€²êëë©OAAI‘““ãçç7ztJUÕ.Ýwîd55¿=zü›oXppQBBÈ¨Q£bcc{5\ð�´
ZÙÒ._fï¿Ï‡$¶Ý‘‘Ð_BäY²d	r”çïï§„IçPäååQF45}ØÔô³Ÿ_ÄÛoÇ™L¦��³™_ÎWVÖìã³gÇŽ‹%&&†ª‰øøø>ú¹ÕJÕ {�béÒ¥YYY43qâÄ·ÞzK�FôP[[[aaavv6}Diêë›0`ÀÔÈÈÁêŽco¿m	+qqÙOýŽ„„„Ñ£GÓ´‡1�ªášïI!~éLçcÁ‚j5@},c%�>ú(“nh’Å}úì³Ù!!!‘‘úûÿ&//fúôØÅ‹¯æççïÙsæƒŽœ¥J‚b‚ª‰Ûìt8šV¢�,^Ì:�±ð
õÞ$©©©Q¢´MŒ¾?sæLÆoÿw�BÂÓóÃ††ÜÜ\ý¦M	Ôé°XîÏÉ¡4h7Kú~ÝºužžžÔã ˜ˆ‹‹ÓàØÅZéP\§¹¹™Â¸¡¡�æW¯^M¿>G6
ÀQ*++)&Ìfó‰ÞÞc}|&NŸîK_v”û[kQQ½�OŽÅòUhh;}È“““‡J[
+ :]úñÇE.ˆÈj7àétºT	Í_¼x‘2âøqógŸå†––'êëcóò&¬];aàÀºÌÌÌµkOVVþ_d¤£î~Ú+Š†K—ø¡?ÌÆ�gß}÷�X9mÚ4MÝEà–éõúiš?þ<ÅDfæv�ª-[BÇŒ1%%™²²"ššª®¦hHU»±ZŠvø0¿AJJ[vv¶X9¥Ÿ�ì 1H”n7^ZZJ1±nÝÚˆˆ&?¿»½½Y¦ÚíÓT4ØR‹Ÿc$ô{âfËbD"úð›ÍÇØçj·ISÑ@þô'~+D³ù¤XÑÛ‘dú8£„½üOµÂ´uÈäŽ;Xd$ËÍÍ‹‰‰‰ê¶Àii+„úúz1ƒª@-ÚŠ†ª*¶p!kh0‰ÅAƒ©Û§¥­h
+ bùùí--Ñb1¤OßK /ÓV4xx0ƒ�Y,4ØG/Yè´
Œ�ãÔ°d‰…¡dP•æ¾–ÃÂêtºpªp?[i®jhnnvss<x°º×–89ÍECyyû¼yÌ×wº¸
¨BsÑÐRYÙîî‡hP‘æ¢ÁËËU§k±Xˆi.<<<ž|òø«¯6ÚîAÊÓ\4ètºêê¼¨¨A555j·Àyi.|||ÊËË]]ÝôúˆK—.©Ý'¥¹h`üJ
+ ¯éÓ™¯ï�ï€JÒb4xyÕZ,í±ˆµh1ôú½¾•±�Ô³P»-NJÑÁæ•y#€þAÝ‚•«Ú%Š½ÜåªèC´¸¯T‡hˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ��hˆ†ÿo§ù[/0BA5C
ÀP0Ô5C
ÀP0Ô5C
ÀP0Ô5#dŸ§${ÄxIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-3.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-3.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-3.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-3.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ ‰PNG
+ 
+ 
IHDR¼´ùhPgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ êŸó IDATxœìÝ}pTÕùð'@@’•(�’¨D
+ ¨Iu”©Ì�ààµ$ê¨Ó:&±¾L§Ø„ŠvøC�¢©ŽI¨ãŒ/5Ä—ÂøÒ„±EIÕ�bG¬Mø)à’("Ay#	&$ûûžû,×uóÂf÷†}É÷3Ì�³gï=÷,°{ž{î¹çD¹\.!""":•1Á®…
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä
DDDä“(—ËuNSSSÓÒÒ’d9
§#"""Ç�xOb…ŒŒŒ´´4l“““—/_>¬ÃV¯^�­/;gX4uNºaÃ†S2 
–aU˜ˆˆ(R�xÐ€(¡¦¦¦¢¢Âår"ðýp„kÖ¬ñ1hð”ššZaA"77w°
+ ,ƒRbî©‰ˆˆ"’OACKKÚ]½pG/·mÛ†4‚øøx±®ÈqA�œ´´4„žâ­¼¼¼ôôt¼ÌÉÉA­w(ÊÊÊôl‘FŽ–‰òã-z‰o÷àÝŒ“vô¯’W�ãââÒ-8»XÁÇ€‡,·è)´;ïb‹wq–m–!º"ˆˆˆFŸ‚í¥/--E“�„¶ñb5üh’Ñ£
FóŒËzdfeeÙj¡ƒÊÏÏGè€C°›‚-ÒvO8”)VO€nSSSÅ
+ ,ðAK�³—Z�è×C#(**ÂKuÊCPÛììlœG¢ž©–!º"ˆˆˆF—Š‹‹ÅêðG“�9hzÕªUH777#]__¯w"”îæ™£´ÖC°+,ðÜYËô*±ê %ÄÅÅ¡2šF/uÐ„ý. þ¾¢	Š
+ xe�rã|	,pÍ�&¶²²R/ÁÑâ.]ºT¬[ö>šöz>B»po·â¹¹¹3gÎô<D·ýï/È>#ö���Õ4ý·{>l§<„ˆˆˆ†àÓí‰¬¬¬åË—ãâ»ººq€ç¨9èì™œœŒ„Ð�kÖ¬A™8°öÏÌÌÔ—öVs£Olzæ`ÿ’’’Cî÷!b…^Ÿ—ˆˆhtò)h@¸€¶3>>>**ª¡¡A‡Ú2-:ÆÁ�Þz°…ÒÒRD	:À‘G~~>vÖ;xigjäÑŸv]è#^UÂV‡LÚ/Où)†{ÈÂ…qÞá>&JDD‘†1¹“hÝ=ïJØ´3`èw½n^4X™ñI«ä9‚a$!"""9m3BQ¸ãÚDDDä“€‚†òòòªªª¶¶6§jCDDD!+ Û)))µµµ;wî¼ôÒK¬… €‚†˜˜˜®®®ÖÖÖÉ“';X'"""
+ Aþßž8rä"†É+DDDD¡Éÿ AW‹˜1c†cu!""¢æÐðÕW_‰5ù’cu!""¢hÐÀž""¢QÂ§«¼”——744lÙ²E4�þ<=Q[[›’’b¿ŒŽŽ®««cô@DDÙü¹=1kÖ¬ùóçÛ/W¬XÁˆ�ˆˆ(âù9¦áÎ;ïÔˆ5kÖ8W"""
+ Q~NîtøðáÄÄÄžžž�>úÈ³×�ˆˆˆ"•?!!!!añâÅ^÷)ˆˆˆ(‚ù?�tEEÅå—_Îé ‰ˆˆF‰€Öž ""¢Ñ# ¥±‰ˆˆhô`Ð@DDD>	(høõ¯å¥—ÄZ¸Šˆˆˆ"œÿcî¸CÞ|Sz{eút±–¡�înin–„'ëGDDD!Âÿ áÓO%*Êü9xP/69ï½gsçÊ]wÉÃ;YK"""
+ :?çi€yóÜ‰9sÜ‰”ùÓŸäý÷åèQwNE…lÝ*‹É‚H=‰ˆh´k°ÄÅÅ¥¦¦».£”“!ô#yè!y÷]yâ	wÎÿþ'rÝußç|û­ôô8xN""
+ iQQQ«W¯ð­mÛ¶á]l=3`ÿ†~Ãå–/_žœœœ‘‘‘––†mKKË°ª�2½N4Äž¨•�Pñññ¨À)Î;Øß@Øñ?hp¹LÿÁºuCíóàƒf”ÃÖ­æ†…ÊÏ—øx¹þzùä¿ÏLDDa£¢¢"''Ç÷ý.¬Y³Æ+hØ°aCaaaAA�Ëåª®®®©©ÉÊÊV5P¦�Aƒ—
+ K^^*€j¸> ö¬œ7biò?h@Puäˆüç?§Ø-&F®½V.ºÈýÿsî¾ÛœŒŽvç<þ¸<óŒìÙãwEˆˆ(„hÿ®ËquŽ—ÚÖboÉÍÍõì`())Ñ|Ý
ûëÖ³�/**JOOÏÇu§HjjjqqñÂ…‘Fô€=µ'À¾šÇK„ÉÉÉZ
»L´Ü«-Úù¡™HàXäà%JëÿqÒ-Z¸†2ýAÍíÒô¤Ø¢x×Ž†èŠ#Ýž˜3GvïÞ!‹Ëúõf¥}Cêõ×å�LQõõîœÆÆ@*EDDÁWVV†«sû%šOÄ
+ ™™™¥¥¥^m3Zbd&%%i_PP [Ï�8D£…r´GpÐÒÒ‚«üU«V¡m¶{°?JÈÉÉ),,D³­eæXt‡ÊÊÊììlì�£p,J@9ö^l³èéPI_|"¼‹O„O¡'¢+"œ¸P_ïjl¤€ïËyí5wº½Ýíºà×}÷¹úú(œˆˆN'mÑjêK¤WY�hnnFÞ’“Ýþš@¦î`®™6-ÄëDÕÕÕž'BóŒ`ÂsgÏ¢ìLÏš`¥‡k­P¦]M¨¸¸¸üü|Ñwµ‹Â+3Üùÿô„˜˜+�£PŽ]þeŸ~Z>ø@jkEûr6·0®¹FeÆÅ9sF""QqŽþ^£�Þ¹s§ý²°°°²²R{2ì!áûèH=
+ û{®9^{º~81�/‡D°�›Fú¬³dÙ2ùÛßLÜ vï6óNffŠÝ	ÔÑ!��Áª 
.ÐÅzÂÇQ�555hŒ7XðréÒ¥eeeˆää¸Â¤¤$\Ç£Ù.**Òý‘�Ý†(ó‹/¾ð_‰ýq”Þ.A9(
e]1?Qþ
Ã5
}}rñÅ2Ò’dd˜G0¶oû¿Ù+¯˜G0.4ã!ˆˆ(ô¥¦¦ áÏÊÊz–…$Â4Ì%±æççëÃŒŒ” }þ(SÇ]¦¥¥¡ñâ1
¼k‡ 6ì�|«3uèÃÐü8µEl¡#%Ã] KcÿøÇfã[o9UŸ ÂÛ´ÉÌ"…ÿ¿ù�Éyã
³Æ¢E’–&cB®÷„ˆh´Ã%>l€¶¿°°°ººz¸s4
8¹SKKÂ‹@f|Ò^
mÚGî�ÈhÐpË-òùçæiˆàº÷^yñE“xå¹óN“8zT¦L	n¥ˆˆè{žOQâz½¸¸8¨Õ!445ÉäÉ2~¼SõñßáÃfÄ5×ÈÔ©æå•WšÙ 22Ìd”‰‰Á®�¼@×Á®ù#Ð !d•”Hy¹üë_¦$6Öä¬\)—^jnapN¢QŽKùÇ™ûÿß}çH1NÊÎ–×^“ÜCs³<÷œüârÁß/~1š“!Š.X`ÓÙuñ.a
+ ÊËË«ªªÚÚÚ‚]r@ ACo¯:ðøãŽTfÅÇ›;)ÿý¯yzSg°þôS9ûlsÃ^L‹ˆ"À†
tâ?.a"–-[vÅWô�Þ(4Œkzû?ûÌ‘ÊŒ¬1cäòËåöÛÝ/ãâäÑGåÌ3¿Å¹k—yªóÃ¹'QxÐI|=/ßõ©6}²ŽK„ˆ¯¾úJ¬)ƒ]rBà“JÞ|³kþüÀ‹	¾çžs�ãÂ_Éý÷»sÚÛ]½½A­õcÏ
Œëò¸¸¸ÒÒR‡�­Î+Œüúúz{	�0XÉ@³š4Ä(S�BQº3òQ¾½v€gù:Oâ€b‹žû åò˜<XÚÓ iApƒ³ëôAøv5NÃ_²SšššPçÉ“'»"äŒ€¦‘V¯½&gœx1Áwß}rÛmRY)3f¸sðµÅ÷:=Ý¬ñ}õÕA­õƒër´¦z�ŽF·¤¤D›Õ™3gj 'çÕº” k&igÊÙ¼y³•���™™‰ô†‚–©åë±Ú¨ë„EÚ��ö/ûw6h‚.a€Â}9D#�ñâ¼b…)~þ}ƒö©Ì°U)Ì94DFÄ ðÛâ9	éµ×J[›™EÊÁóâ‹æ6Ç¢EŽ­»ADŽ@ëîK8—08Íxo"Â8óôDggd>‰pÝuòÂRW'7ÜàÎùË_äW¿’ädùäwN{{°jG4Ú!@C«îhûjÇ%‚Kƒö4D‚†žs�þôÓ�—>úÈ, õÌ3f¾j±ÖäD1ožüö·ÒÕìÊÑ(££ð{×ëy¿¡÷ñ”aq®š#¨¸¸A|||rr2Zq¯u¸„Ap•——?ÿüó[¶l
Ä™É�‚²E(8~\þügsÿbß>óG¬)+ð3Ž/õ‚ìúQDCcƒo°¸ù¸ŒÆ\'2ð*vÀ·´MâÁ¿P£WÞÃºÓÏ%NƒÚÚÚ””ûettt]]£‡°çÈpÊÛow-YâHIáª¯Ï�¨ªr�oÁ¸äwNw·ùCä»ÒÒR½¬C÷‘£ôô]99þ_¬å†uO\¶ê»:°™º±Ëc@>J@ã¤»ép<û­ææfmtu=®ãµpäTWWŸæ¿ŠóçÏ·Ûš•+W»:ägÆ4lÚ$ÿ»#%…+»‹÷'?1³OnÝ*øƒ;çÿ0SK]½üõ¯Áª…™ÜÜ\}üMû³Šu‘]`Ñ9‹ì™‹´³Ýkçììl½®-++Ã/í·´ÊÒ¥Kõ.;.ÄQ
DZ�áÎ€Dwêú�"³fÍ
+ Çi©¨?.#í¼˜óØ…u™g$'ËÝw›Õ³ì)°**Ì¨ˆ={‚UA
+ uh¤Ñä¡]ú6ANNNfff~~>‚ŒÍ›7—””èS|ÈìW^ûPreeeªÅ~KgQ´‹Ò±ž-ÄþIIIˆ!ÂbüÝ®]»Ö®]ûÖ(¼W’n½õÖhk
+ Þ—_~Yî¾üR�*,¢\v™¬_oæ�|ì1wÎæÍòÀfˆ5‚Ûà JòdO„‹³´´´!æß�ÕµU~ø¸ ×[6¼…°±EYY™g7Ã`EÙ: >añÔ\UUÕ£�>ºqãÆ`W„Œ„„„Å‹çååyÞ§ °æLÐÐÝ-^(Ï>ëHaË¾…�X¡¾Þ<½ù³Ÿ¹sn¿ÝüÞ{¯{4%�f555ÉÉÉbÍ¤OhÐ€­ÞYðÜ¹¤¤D‡ïéS‚©©©ú2õa/ˆ°ŠÊ´»Â,8Ð³(99‹hYYY92×a³fÍk^°+Bn+V¬øƒ}³–"€Sƒ#fÏ6óI“^zÉ••åŠ�wÕÖºs
+ 
+ \ee.�Ùoiñ¼³ c@èKmËí��ö-$š-ž9òÃ��Jû4m¿U]]­Øê¼®“c*Õ€S/‡ F«Ã““�g¹„{î16tmC¾êë3ÓMŠ5õEB‚P9nœ|ó�G)Öã�‘4ù&
­ÿ3�ƒ=9Ù?_G!÷n‚v3x=û§…ûQZÅÆÆ¶µµ!zHÀ·ˆˆåXÐ@ÎBÜðñÇRS#Ë–™—ß~+‰‰rÕUæ)Œ•+ƒ]9¢vÅWTUUmß¾}Á‚Á®Q¤áÓ!*:ÚL¥ƒX�ùùfºî­[Ý9È“OJU•y‹ˆlÚ)²{÷î`W„(94 éB6ø(o
+ HB‚<ñ„Yðâý÷Ý9ÿþ·<ü0.ªäŽ;Ü9==ÁªQ™3gŽœ\ò€FZo¯éÝ³Gì>ëuëäw¿“»î’'Ìüúa2‚–|åXÐ€ÿóçËK/9U
lìXw±Bc£™0ê¾ûÜ9……2mšüò—ü–ÒHÁå{›½äkH²c…M›6-Y²¤¸¸8¸õ	k--æy®;ÌÏ»ZµÊ¬Ø·t©;æÎ9÷\™:Õ<@ÞÜìÎyê)³ð‡šçðßxÃ,ø§ÊÊdãF9|øô~rš“cfÏ–¹sGã
+ !¢¼ÜDýàùã%7×äà[ÚÕeòæ€0rÄSO=µvíÚ+VäååMž<9ØÕñväÈ‘¹sçöh—>ûì3íx /˜ö»©IÒÓÝ#¬ÿ{Ù¿ßä ¥G(Ó§Ë×_›šÿÄD“À�|G‡œsŽ¼óŽœwžÉY¿Þ\É çç?—3Ï49==â9�ŽqãLâÚkåŸÿ4‰wß5÷ß“Â‚“AÃòåf*‚Q²Üe(ã·”F‚†‡zH¬gC3tØ²eË’%K4�pá3{ÖH„_ï'Nôôôxn‘_W7¡©i|kkô
7H|üXxðÁ±»wG! À…ÄÌ™æØ”ÑÉ,öî•‹/6‰…u™æÿ•WÜ!Â«¯š-rð–�èë“êjsUsÏ=î'Â.¹Ä‹«Ä+šC¡�OOÏ€ßÒ¾¾¾q–èèèq[�ø´á·”œe
*4C‡üüü¢¢"$yä‘°›V¨»»ûÐ¡CüÚòÍ7ß´µµµ¶¶¶··ã-üà47_xüøÔžžØ™3«¦Lé›4iÒŽÙMM3�Ÿ´lÙ»\p\Ì¿éÀ�)bV:};)éhggç³Ï.ji9sÂ„öÞŒ‰9ŒŸ¬††yøý?ãŒcS§~=aBßøñãÏ:ë¬)S¦œýCø—¡ß1´<k×šAZ55¦ÏC{;Ö­“«¯6�‰ñÚ&d1hô[ê¹Õ/-âƒÞÞ^ßKF€�ÐaâÄ‰“Áo)ÙvíÚµcÇŽ`×âÊËËû/ëj¡CWW×e—]V[[â÷&ð›³wïÞÏ?ÿ|Ïžƒ

�G�Ž3æó¨¨6ü246ÞzìØ¬	¦ßtSÌ/ŒïìŒyðÁ÷/¼°	G=öØ
ûöM³hä;IIð»´qãÂ#G&FG·ÎžýºÈ>ä:tagçñï¾;ØÕõiGÇÑ¾ž°Â/˜ýuî¹çN›6íüóÏ×­&Î9çœ¯ìîÏúz¹è"s©“˜hnˆˆõ“…?cø�_(q2hÀ¿ý{ï™õ™fÏvªH‡ÙßRl÷íÛ§�BSSS°ëõü–ŽN^ña'¤B„_÷ßÿÎ�;ƒ]9tÈøö[™3çxkkm]]Ý«¯NÝ»wJ{û„o¬˜=»WO>yýž=ç‹™q¹|Þ¼Cb5§××O‰�í¹í¶Ž·ß>,Òœ˜X*R‹€ ©iZGGgW×�ŽŽý½½Ýv§½Eè�kíµ;Da„®qÆ„„ýiš>}úLç�wÞp©ZZÌ8nüuÝs�y‰(úÆÍ¨‹[n1C¼)84twËÄ‰fê¡éììì¬ªªúøã�kjj4V8fùõ¾ü–ÒH÷ AÍ˜1cûöí¡0}dmm­®C1röï7™ã¢ã§?uX·Î\8!çé§%#CZ[[o¾yÜLÄ[yyii_â¢ÿ…®Ú¿ÿÜ3Î8vå•¥“&ý~”êêf··GŸ8ÑØ×·£»»qâÄ‰¸l˜fÁ7:Ö‚PÌsãÇ�k?LåüFáG©££ã˜D!žé£ÿÏÞ¹Eqä|–G §€<DE–E—åX•Dy§QB"˜RÐKLÐpÆ\ÕUP–¥©$Çb¢WšäVïÎ‹‰ø.eÄÄÃC	H4¨D‚¢ÿßLã¸áå;�…ß§¬©žÞÙ™^éß¯¿Ýóëî[·½)8Bæ°ÿÌÌÌœœœœ�««+TÝTy9=)ìøqÚ#‘©y ‹Šè¬"¨bc=¿žpw§çÞ8�Ät2
+ ÊÊÊ°S…Ú`°LÒ£•¢•
+ …¡‹0�¤¤¤×_]#
#áçŸéæ?(¨'NpëVzZÈÉÈ ç±±Ô�tbÿ~*.ŽNüõ¯ÔÉ“] æÍû®±ñóÚÚÚ+WœïÜ1ik«ëè8ÛÚz
z2¬Ëµ³³sÓbêÔ©à SðX(m Ä:¨ë×¯ÿúë¯×®]c�x°¡ÞÓÜÜœÒ4-@Þ�ã2x„³­
œ�HMíé”¦¥QÌÆ)ôBCñÊÈHÑ³h€¿¢‰	õæ›z¼åã�Vùøñã_0\¹re�+ÑJÑJEK¿áb£ßÀƒ�àçººzêmq1-…¡ù£T*:gËz¦«VÑ9k×öˆæ={èíg�íÛAÐS	^y…Z =ýÛotŽ³3ÕÜ\wðàÁ#GŽœ<y²½½½o¤R©§§çìÙ³ýýý½½½
+ …õ¨Enkk#~	¸ßË—/×ÔÔÔ2€Óý>Ð%“ËåÄ;�svg°··ï{eEÜ={6åïOŸ®[G¯t½šÄDñ¾Mp d]Z)Z)Â+}gOˆ_.€äÝµ‹žL¨VSë×Ó9þ3õþût"3“N»wSyytóÛ#ªªèõ‹ b�áû÷ïgggïÝ»÷Ø±c}ã
'L˜ðì³Ï‚š5k–ŸŸŸ……7?Q¤@w®ö÷€§ªªªjhhÐñ666îQ*•p”Éd½úx
õé§ôZR_~IÍ›GçìßO¯31w.5Æþ¿yÂðDZé  •"œ¢½NƒøåÂýûÔgŸÑ¡ˆÕÕtó¿t)-|�úzú#¨±––Ã¿yQQÑG}tàÀ�ææfí|###p>‹ »2È`ž.\½zuÊ”)#¹ƒiiiùå!/^$	²§ùcyâ‰'ØŽ7ô|ÀAutÐÃHä?þÃêê SD/n-—Ó9ìÂÈÈÑ³h VêãCÿÓ;üXé¨­ÑdEHñËG¡Ùùùù[·n=FÖM{ˆ±±ñ‚^|ñEðB ¼õò ŽŽ…BqôèQ®#:ÅÀ�;wXUYYyþüy8êàeiiéååå­………-ti¾ý–~£
+ ý¨NN”Ÿ=8ºq#ú¥‘¢gÑ`èV:¦@+E†JEEt|Å/XôšýÕW_�#:u]ŸU«VÅÅÅM$ë*ë²º%x¹¯ÙÍmÇW¯^=Ï@p]‡½+Y×GG�­[MOœ ýÒ…ô--Ô¿þE=û,]=�¡¢ÿ×m¥Z)2šx÷]ú•YbâHïSRR’˜˜¨jbb=–äää§žzj¤w€…=zYYYË—/çè)†ESSñK _ËÊÊÎ�;÷X%•J=<<T4ÏÏR('O>±hýÑÂ…ôû'+¦hxQ£Ñ`ÐVŠô­ËÜ¾}{óæÍ|ð»¬……ÅK/½´qãF'²87€|—Ëåd/‰)S¦”——ÐŸÜ¸q£Œ\á?êîÝ»ƒ\/‘H\]]ýü¢Æ�‹pssJL´�?è¿ÿM�’††ÒSgCBx+»A"Æ@H¡¬Ñ´RdŒ]|è¥ÔÕÕ‘SsssðB�ckkËõ£ßzë­-[¶°§IIIjµšë‡Žººº.]ºD\ñQ¿üòËàÍÜÌ™3•ÊõUU‹ÊËíRR:ÓÒL!óäIz³ï  ÊÊŠ¯¢¢
Z)2<ÐJÑÒÚJýãô2oBwîß¿Ÿ˜˜¨ÑhØœ%K–ìØ±CN}¹gÓ¦M---{öì¡è¡»çÌ™ƒ#¬Ãz¡gÏž-...a¨¨¨ ã7}‘HŒe2·À@ÿ���ÿügÙ7ßXK$ÝŸ|"yáž‹,jô/×J}�VŠˆ„á…f_¾|9**ª¨¨ˆœÊd²ÌÌÌeË–qRÄA�ÎRccc}}½ƒƒÿO•´··ÿôÓO¬w‚NN+4Z}066Ÿ2e¹…ÅÒÈÈÛaa®ööö6L{ðÀ$,ÌèÕW©þ–³+è_4º•"z­¥’òôBhöñãÇW¬XÁîc·zõê]»v	µâ‹§§'hn�à8ÌÀ]]].\¿­Ï�?þÇ¾[™™™)•Ê675Ô×;:ôÃôéOŽ?þë¯'ùú©Tck‚'¯'ÚJ®A+EødÏjÜ8jÅ
+ �.ÎÊÊŠ��%{Ö@%„®Ëºuë¸-ß „††æææž8q"x¼Seeå™‡€\kkkÓ¾ÀÂÂÁÓsª»»»\®JOOêî–XYu;v^.Ÿ2Ffþs"ÚJžA+EDBNNNLLy•6uêTpMþdátáˆŽŽ>tèÐ'Ÿ|²BGŠè¨çÎ�ƒ¾
ñNååålx>E¯‹:ÝÁ!vüxß¸¸ðE­­vo¾ªR5/\ø 9ÙÞÔÔTÀ’s‡À��"´RDXÐJA8räHTTÙÅF¡Päåå9::
+ ](jÃ†
;wîT«ÕIIIB—¡îÞ½[RR~é{†ÚÚZö#;;;—MMIõõ2YÓ¦M¹‰äÖ­qõõ.11TªI[¿)Äi¥ˆ¨@+EFHK½«õsÏõì“Ò/óçÏ'C\Ó§O_4i’(êÏ¡C‡Îž=�1
"¤¾¾þôéÓÄ5A?‡�y>i’»——“‡‡ÇÕ«Ë³²æBNHHqTÔwöööJ¥ÒËËË ÷:àD4´•"bflZ)2š}óæM___2Í{Ú´ià‹&OžÌkÃçÁƒdãxÂÅ‹)fvØ¤IKÆ�‹ðôì\° ÛÔÔ4;û©3gäòšàà+¡¡þþþ–#Ù6M8
h¥Œ+EFÈ ¡Ùà—,Yòå—_BÚÚÚº¸¸X&“ñ\<dôÑØØHütr
+ ïÜ¹#•J¡±qðu‹�IDAT³°xõÆ�¥×®M]·®`ÆŒKUUUçÏ;O˜`ö‡ÀÀƒkçêõZ)Â3£ØJ‘òé§ôŠaöóÑ;ï¼óÆo�tNNNóFôNgggiié·�Þ²©©•Báêå5ÝÝÝýÃ7\½jcjÚñüó˜˜”YYYyzzŠvkS®DZ)" £ÌJŽ¸xñ"üéI ö_þò—÷Þ{Oè!£ŸšššS§N×T^^nn>ÑÑq…‰ÉÂØØsÎÎvpÁßþ¶ÄÜ¼nÜ¸gÎ,U©ÜÁ5A-•ˆf«¾!ÑJþ1t+E8"&&&++3fÌ8}ú´‰‰‰Ð%BÆÍÍÍPñÀ/�ƒúá‡ÌÌÌÜÜ|›šÒoÞô¹wï‰�;Ü¾ÝüÓOçÝ\]/Ï›ç®É×××ØØXÀ2ó-ÐJa1D+EFÈ­[ÔÆ�ÔÊ•TXØ£LøëÏ~¸Ö}AAÁÜ¹sù,RZZZzzz¿îªhHHHiiinn.œæååÁÅÚhËY¨œ�Žð-¸!|K&“¥¦¦â;_ƒúÒÅÅÅà—òóóáhddïå5ÑÃÃÃÒ2ðÝwéU:d²«!!oÕÖÖZ[[Ïœ93((Žü·¡\‰Z)‚ôÂP¬!ý†fÃßáááÙÙÙ<iÑ*DCFFF||¼Z­î{ˆøhõêÕD(À±ºº:!!~ERRRNNNMMMSS_?Ñ?]]]eee'BQÖÖË'Nt|á…‹òò‰ûöùYYK¥ŸËdÕPafÍšÅ“kêæ†¶¶n©´{óæße‚Ï%+åè¹2<HÄŽ;¢££íi‚ÝÜÞ
+ ÊÚµk×Þ½{7múÊÞ¾A¡øÊÃcýâÅ‹·lÙ"£½½]èR#º¢TvGE=:e1�±±ñùóçù/Ojj*q¿%%%¾¾¾³áŽF£éÖÒäš¾Žš|Ôë>pLNN†Ÿ€#¯¿á¨¢»wïŽ‹‹srrrqq™3ç
™¬ÒÔ´=,¬êÔ�ùó7*-ŠÚ¶mÛ÷ßÝ!î
+ #åH‹˜šRÓ¦Qåå�r
+ 
+ 
+ ˆ®+Ý¾};GÏE�áaddäÃðÚk¯Áiee%´+ùùÿ·m[�T*upˆ±°�ÕÔ„N�‰)„ž\zúáÚÚrùµ  z‹Î3fÀeBÿd@þþwÊÖöÑé¾}ûHbåÊ•J¥R˜21DFFZYYAŸ“““��œ‘‘‘’’ÇˆˆˆÚÚZÐ¬DhùyyyÍÍÍð-ò&¢û¡Ú€|Š‘ |þ
+ „S”/¿ü2¤«««×ôö©Sàˆ,ÿ÷¿)îîîk/\p¯ªê”Hr
+ ·Cõ˜<y2ôÒÁ5©T*ý®RÃ¡›­•"Èc••"#ç�|”¾wïÞÁƒIzÍš5Âˆx ñññ�?~<ä€DÝ@1Á
+ Ðð;;;SÌ›”^_ÜË@.;|ø0›jC­V'''£h­¸0¬^½ÒuuuÐMùë¯+e2sóÅNN7Â%ÉGÍÞ¹“úøãï(j“R9ª¸&ooï‘Çws(Äi¥2T·RD¿@+ÛÒÒB1ÙÀÀ@¡‹óˆÔÔÔ¾ú` +{EG’ðI� �T¥CDtTâ }åÊ•\šÓo¿ý½¥¥eGÇîÞ�WS³&=ÝÖÎ®®²²R£ilm}ÓÇÇêÉüùó
+ ÅðÊÓ€ªh­A†„ VŠŒœ†è®P‰‰ÔâÅÔþýûIæªU«„•t$š�bâ"³³³333!ÇÊÊª×eyyy &àš`†~oYZZš‘‘!“Éàú~ïƒŒbœœœV1@úÒ¥KŒkJ),¬ùâ‹NOO77ÏÊÊ×ÚÚLZ)*åÄ‰‡ú]{Q8
â´RÑ¼Y)2r ýúkÊÏ�Z´¨«  €dÆÆÆ
+ ]*+�F“’’BÞ5€ ˆˆˆ A	ÒöƒèìîîNOO§ú{U€\ ß‚[‘¨‹:Z £9ÃÚµk!}áÂÆ5å:9-62
+ 35�en~7  tØ7çp�všSZZÔûÛ·oSL|™››GOD1ÀZiQQ#±RŸ�Ö¯_/tÑÆ4dmû´´2²c¤½½ýõë×….Mss3´úà$Ù�á‚ŠŠ
+ ðKÐ�Ù¶mÛ°>¹]ÜI´VŠ ü +EôÂwßQvvÐß³nÝ:8]¶lYNNŽÐ…BƒÛ˜†þ“Xéir:gÎN‡ bÃƒÇÄÀÓOÓÇíÛÉi@@€�¥AÃ„Û‰a`¥Ó§S……h¥‚ˆ‚ºº:’@w„ Ã€�Ùäh¥‚ÎµkÔ¬YÔ�Ï�SWWW“——'‘H´cµIKKë0Þw
+ ŠYRšE¥R•––²%$$�øJÑ#ÜŠQY)‚ c[[ª¸¸ûÞ=wŠik,Œ¯¯onnî�"A4�	½ˆ��‡[‘%ž"##)fé§��8ÖÔÔè©¼Ò·¢ATVŠ ÈXÆÔ”’Ë»ÛÛ§CÚÆÆ†ÿ�ÇÈøÉ&–äH1ó$!ßÅÅš|í6ŸÌ¨$Š¡ï„³³3™«Îªv£Ñ/ÜŠÁ­A„e×®ëqqô8v`òóóÉê¢5CCß·‡&[Yúúú’uÚ‡";;›Ý‡®ìû"Aôç1
b°RAŠöB7åòqR©ÔV{_~ ½Ì3´ô ’““#""z-ÿLö¬‚OA7XYY
²EHHy1¡½‚pç¢AVŠ tvvJ$GGGN×§½¯îÌn“Íî²� ÜÁ¹hƒ•"Ï�ØxèBg‘b–ûMHH€~aZZÉAø¤®NúúëËÍÍWutt]–ÂÃÃ¡V¨Õêììl]&;�WPšy�Œ8�bþ'%%|x¤!Ìr.Dh¥Â¹¹¹�,™l
+ @v
+ 
+ 
+ ÊÌÌ[º€cŽ	ÚoÝ²06öiooº,=$''ÇÇÇ§0¾[»¤ÓÓÓQ4Œz8�bCv<_	”ÄŠÕÍ1§Ou*•Ÿùùùqý,Ñ/%%%Ä�ƒ³&ƒÀp¤na§àñÉhsDDDSSûE­GrJ6'$™`·ì}øÿEcœ³gÏÚÚÞtu-öööº,=@­€ÊÐÄ•ª“Ð%B„DÛÃh»p5�–Édàjˆë W²ùà¬´ƒdµïIi½Ãb=ùnwgõX8i°°�ÚØ4utLÃ‘ÄàÍ^SSæ†JÒ$ŸÀƒNW«Õ`„ Ø±mÈL9¸`ÕDg›‡;�@w„OÌÌÌ–.U¯YóÍ½{÷„.KP
öíÛgÍµ%##Cè!ÂÃÃðE¤²‘êîŽ¸Ý{‚zh¥Ó¦�ÓhÄb¥¢#Ðí¡ÖBžµ+°R2PLâÞ©LŽ• ØÆÌ;22ÝùgòäÉ¿ýVáèø\}}½ÐeéjNuu5qÜä„Ð%B„‡xV°Sl(FO€€`¯$Ž%33ó±SlHÄÜGÛó€�‚»Á�E$Dh¥¢#`� ÀJ¡/Ò�56Ö³³‰~ß;‚Þïe½dIøºÂ“O>ÙÒÒ"‘YYÙ644ØÛÛ]¢�f@Æ\L±é 	"|tŠ4M¯¹¾ƒÃùë‰^VÊõãD�¸¸¸€Æ£‚6žbš|íO¡Õ/eóƒ+I2Xæ@¡ÈÄJ)F‹@Ùáþý)¯¼gnþbmm­ÐeA�àbŠ
	Ê1!“Éà2Ý'sñ±aZ)b @ëV*‘H¬­­Á´zéq°7è¨T*ø”œ’w‰°öf0×îÒ›	Z;:Œ¥Ò§Ð!†‚Þ§Ø�p+Šy=A|Q¯Ñ Hº¹_>!"âùÏ?? PÚ²EÍõãD�@OÌi [%¶‡ÃË†BRRÒÿû–­mÕŸþT°qãF¡‹ƒ �'��Ä4�‚¦¦&¡
+ ÃyLEï§âhc¿Ð¹¶¶€‡Ç!ˆÙ>¸ @¹`XÈåòÐÐ7¤Òû?ÿl)tYD'Èv�F#`aø
h¥‚ˆ„§Ÿ~º¼¼ÜÃÃÿ™gžº,¢¢šbÃÇë‰3gÎ|øá‡`¥þþþ\?AA.àC4 ‚ 2
+ àcö‚ ‚ £
‚ ‚èŠAAtE‚ ‚ :�¢AA�@Ñ€ ‚ ˆN h@d”�––&‘Húý¨¹¹Y¥RÁ§dEÞ^;þ-àJí¥øtÙ%AÆ¢
`ÃÚÉî¸E6Ô}/
A�¾�ýH322|}}Áá°+òjŸ››K6@/D1{Œ�ÿ�ã@›�!ÈXC¢�ö«ÑhÀ¤SRR(¦ß’H»v"‚€> ã
+ ...d�€ìûŽE­VÅÐwLÂÙÙ9888"""<<œU	AAA|–ADŽ>Eêÿ·wGÇiÄP@·èè T@)„J(w[CÔ@%É�}“LFIöÃ±ÏùðÈhwÌÏWÒb¥2ëáZý«ÕÂü+6]k	£ÌR±	ûiŒë4 àOÕ:A&!I»Ý.ãIæ$Ý03ù>¨Þ‡»n·[¦(§Ó©ïûårÙ
kÏð•M’ßSœU¨Õ®×/—Ëv»MÞOÆßï÷Çãq\K¸W'|ç²4ªbS®¹qÂw|zF2øÔ6Äl6ë†]†üÚ
3“Œ-‹Å¢{oBR›8j“x0å)—óù<µš¸°Ùl®×k}ðwCù¥+Õ˜Š­ÁÇ®{cŒHæ¨iÀ?ÊD¥qÁ2WZW€ß›r¥!Ÿô‡Ã¡Nþ^¯×§Ó©^Ïñß·ŸÏçƒ
+ ¾1àëÇ–$€´/—Ë»EÕAÃ¹¦@‹)CÃjµêû>¹áz½vÃvÃ}oª·`NçÊÚhLÅz,˜P¦…2i©Ç§ºañòþ‚ŒEµöÙ
›ªB´›òhì···D�j/—ËóùœWR“õ'ê{Òª7íÔm=ŽT�çUÄÔó«.€W2àdŠ’pð¼¨	üµ)CC÷«P»×ßz¨P/ÀgâÐ|VèŸ;™Ð4€&BÐDhš
@¡h"4M„ ‰Ð4€&BÐDhš
@¡h"4M„ ‰Ð4€&BÐä'-wûlÖ^j9IEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-4.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-4.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-4.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-4.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,26 ----
+ ‰PNG
+ 
+ 
IHDR^´SáÓgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ Ûc&ÍÔIDATxœì�	XGÇDDQ‚rƒ"¨¨(@Í¼7QcÀ¬ßšÄ QWü²F4u×èj4¢{E%*"Áõˆ(cTb¼ÁP…Ádf_uÃ�0Ã\Ì¼ßÇ×_uMuOÍ0ýï÷^W½2‹ÅA¤>†šî‚ ÚJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚  4 ÂJ‚ àÂvMqâÄ	Øzyyñx<M÷AÔ
Z
dee¹¸¸1@!!!AÓ=BuƒÒÀÁøñãÁRÈËË“jÜ¸qQQQ¬� úƒ‘¦; u¤¦¦æççóù|gggØ]·n�“““¦;… êc

‰‹‹[ºt)~-ˆžƒ‚  44ÄËË‹0‘HvW �—¡ÑN!ˆºAihH`` �Ç‹ŠŠÊÏÏ]˜;w.È«¢?`²! |>üøñ...ìîºuëØ�$‚è†lò„è3(
‚p€±A8@i@„”†·rútù‘³šî‚h”†&
+ ÉÙ<k+úG,&+V�œM÷	AÔJC“<H†|ä~æ‹$(_½JââHŸ>ä½÷4Ý-Qø„¢IþøGrêxUa•u»°[RB’’ˆHDæÎ¥¯^»F®_'cÆSS
÷ATZ
MbnN¢F´{ùŒº„¼ó‰‰‘è°};ùðCÒ­ILÔd'DE 44É�?’•“.ÒRiiãWW¯&|>™4‰ôê%©9pƒˆî€Å[IM%ãÇ“Ë—Iss(ÀÑ°³#�ooªÝ»«§¢*Ðjà¬„Å‹IQ!]»Òý'Oš=ÄÐ�dg“þ“Šx@M
Ù»—TVª¸¯¢P8Ø³‡,_NÊËå�RŒ“ÁÀ€îfd�> 2±h‘*ûŠ ª¥�ƒ]»Hÿþ¤o_ù¤¡!!’`„‰‰¤&7ƒH›'esð×¿Ö–:w¦6€BÒÇÒ?)ß~Kh0â»ïH@@ë»‰ *¥�ƒ±ckKíÚ++Å¤¡1«WÓhfb"éØQRsþ<ñôÄ‘ˆ6‚O(šÃÃƒ^Ð?ý¤ô…4!Q§cÃ†:½@mc
õ¸~�ŽS8wN¦ªkWeY

06&û÷S]ÈÊ’èBu5#m¥¡»v‘¼<Âd~«EeÒÀ#þórñ¢¤æÐ!:Mcð`²c‡*ÞAä¥¡pqkk™*•ICc†¥##€›7%5ÅÅ82Ñk¨øÿ%%ÄÁA¦*6–^¯¯_«³554
+ LžLÕ
+ œè…››:»€è;h5Ô£C‡úº@«ãùsuvƒÕàÓO©.$'³3¼(�«³#ˆþ‚Ò nÔ—.q½Àzêò)0|8
F€!ãéIw_¾$={Ò`Äúõ´Ã¢:P$ddÐÁH`½7¤"•Ø2R–/§ÛýKbYTWc0Q	(
’’ˆ¥%�A6D¤AJÇŽtšÆ…ä·ß$5))tpÄŒä,¦°D”
+ Jƒss2}z½û³m’)’‚‡‡$qô¨¤F½SDgÁ'ÍQQAx<²vm]‚'í|
+ ð,X½˜0�Ü¿O¦M£J‡Ën!
+ ƒVCs€›ad¤mVCLMëìˆÐPº�3§.7,@i Ï%.$ùùM·Pã¨§Ö3k
FÜ»'F��
F0+x"HKAi þþwš»­IÚ”4°HÇz¿|IÂÃi0bÞ<�vik 4Ðy®®dÈ�¦[´Ai�bkKGF€ðIçŽnß.QR¢Ñž!Ú
æk _~ÙÜXG�†7ÔÔÕ`jZ7ÎÚÒ’nçÌ!UUdÁ
v
+ Ñjð	E÷=%EÇ†(çäÐd–]ºÐòäÉÄÌŒ>Ô�$¶Dt(ZX
eeD·4´wo‰.f”Dr29’>õD½–†‚âìÜ‚Ð=HÃ›7D PC—4Â–-4ñË/ÄÉ‰î>}Jüü0¡ïèµ4$%Ñûd½Ä-œhå€Håbj*ÒTsæ�‰5Ú'D£èuòÈâï/¹UJùüóÏ­¬¬fÎœioo/©b¥¡´TOR&ôïOGFää�gÏ$5;wÒégŒÐ+ä³êÇ`ÐÄ�%??^ÍÛX"
“žN
‡TWWóÍ7ãÆ�;ÄÎÄÔ«¡1½{__I¹¸˜#‚‚ÈÖ­í¢Fä¶>þøãéÓ§³eggç„„„¦Z‚(,]º400š)Ú=å½zúôieeå
æydnnî³gÏì²-fpss;š�àLôNd™?Ÿ|öIK«›™:{6Í1y2}Ì�è&by€öK–,‘­�]ö$—/_dÖcáñxsæÌ‘}&Êçóá%///¶lËËË¡4ã1€àþÌÖÀÙØh'ä¬iŠªªª©©©[¶lÙ¸qãL†°°0ooï>}ú(ðåÀ±·oß¿|	F¼zµ\ß•#Š}|èWÒ¡ƒ˜ù¿!:ˆÜÒ&@`-bi€Ë®áýû÷³5p¯[·
+ °…Ëž…ü‘­„6Pf_…Càœ`ŒÀ!ìKP§â¬a»‘œœÌ^öÞ666-¿Ú¡1âááMÈÌàà™Ë–-ÛÂÀÊÊ£G�’ÃÞÞ
+ uŸÜÄD¼`�Ò¾u�àÆ
ñ¿ÿ-)‹££Å|¾X$ÒhŸå!·C—q×ªlpõÂí:++ë×_…]�@àÅ,<[ém®m(Ìef7oÛ¶
NÍàÖ1a5ê
+ 
+ @2@kÌóBÙö½ÀøßÊåõöïß¿}ûö]ºta]v´€
(²»lË˜:Ÿjÿ~Ò©SÃ“@ã˜˜�édFÂ¤�Óc‡‚“Þ½éKv6
Fü÷¿äORÅj>ˆ�[@âââ×�?}úô±cÇž�s–_\Ï`&€¾€¸€R¬_¿þ2CƒBžËZ
+ à&˜ššJµ å˜›“�>âÐ`CÃÚ¶<�B
ŒEGF¤¥Õ
£¥(,Ä`D[F.ƒ4k tX>
1À–0ñ€È8¬"=	h€K^k,Ö×`
+ ìI×(ÃPRˆÐP±ŸŸÆÞ½
EƒFFâƒ5ÝD!”&
¬³@Ç�0þE^^{3gÃ�
¤A€ LäÚC
ëƒ°°mÔ(çC+ÀäÉb77�½{ÛäÆ
ñ¢Eâ²2ÉîŠŒhK(szøÎ-?$++‹�Jðjs•±5²çi\Ó„B²hùË_èÚ–rðÅtµ¹²²Öw@?�oÎÕ•æ•éÑƒ¦ª�ù Ú‹ÞÍ¼Ü¿ŸfOLO'!!ò¶l‰‹£ã‡¥«Ç rRYIƒ¹¹äo£»’}û0¡½èÝŠ]»ˆ�
Ø']»Ò™—OŸª¤OJ´þÍ›7B¡ðÕ«WBé¢WZ€©)}~ÁêaF©Ï™C“ÓqµÍ£ws(fÏ¦ÙÙå¾÷KÇJ«ñW]]]\\\XXXÄPRRRQQñ¬/^¼-‰D5�ÍÀ2˜˜˜°‹Îµ€7'[°¶¶îÞ½{ÇŽUúé>ù„.ÿ›˜HSN±üòMö�Ó4´½s($#ƒþõW2b„*Np³–;wî€€"<yòDƒÿÐŽî¶¶¶²[ggg{{ûv*p¬†
#™™ÄÑ‘¤¦’�•~zD>ôÎjP¥Î°‚ûü…Î�;wíÚ5Ð‚[·nI'n´ƒvµ€QUU¥˜¾°&	ô­ñKíÛ·wtttqqquue·l¡‹tTƒB¤§“Ÿ&»wÓÙ,;v�°0Fh=²JKÉ A$>žfX–›¢"êoÙBfÎTà­á8{ö,ÈloÜ¸ö³GÁµÝ­[7[;;;([ZZZ4¢S§NFFF¬6ž+¬åõë×Ò\öå2i<°b^Ë¿tÆÝÝ½OŸ>½kÉPØ¾¸w�>Î02"cÆÐ€%¢fôÈjØ³‡FÅ|*MÙ ÷îÝû…!##ãù[SÓ‚‡ïáááÎ�¸Ôên=Øà‚¼G�F€@°a¶À>òòò=zÄyG¹9Ï ûÖnnn¬L€dxzzÂ§k¡X¸ºÒd½‰‰äÕ+I
üûîÜÁ`„šÐ#«aìX:o";[Ñã-,èJ/ÌÍ·ðòåKVîÀ™¸ÉÃEòî»ïz{{Ã5rðN›2šÁ �ác·Ò8JÍkbbÒ¯_¿8ÐËË«ÿþæææ-|ßeËÈ’%4±r%‰ŒlÝg@šC�¤LøÂBâà èñ`ÝúûÓ»àÒ>|8)))--­’kY{'''_P„Aƒ™™™)Úí<‘ð˜ØXo?ÜŸž={z1€X<ØÚÚº©Æð½þü3ý€WB€�âä„Á• GÒÐZ|}‰•9|X¶N$ñù|P„}ûö	å•íÔ©SPPPXXØ¨Q£zJckú¸7oÞ”ŠEvvöýæ²V»¸¸Èj(XoiìáAîÞ¥¡ÊøøVˆ>Â…¾HÃo¿Ñõ©Zå¹‡‡ÓËµŽ4øÛñññ[·n¼AC0˜#""@üýýÛã�àú”••eÉzñæÍ›¦Ã·+°Ï«A�5'‡�sçè�*àÌú�Æ`DëÑi¸~�xz*üx¡–éÓÉÉ“$/ïìÙ³ßÿýž={ª««e_»àÃ?œ<y²b¥ô¡PxíÚ5V&.1¼åÉ�ÇóóóÎàããÓ8¶š•ED8:’?ÿ¹nØ%¢z!
_}E¼-*"M»±ÍS3wîO›7o0àÜ¡d°µµea°tX¢( ¶W®\añ·nÝjê÷	º¦hÄ°aÃÀ:³d–ë“#Þy‡0YÄ$Ki`0BÔ=ÕS¬\)þè#Å‰DIII½�ç�ßåÞ½{á×¬¼ž"õG�]¾|98hoyˆchhèåå5{öl0åÀ¿“=ÃÂ…4gDx¸83SS¢­¢VCkHKK[¼x1ÜÊ¤5¦¦¦‘‘‘ðC0`€;¦‡äåå�ª…s˜&Kß¾}ƒƒƒGŽøè‘å¶mt�~�u»Ÿ,1Ñ,(
M’‘‘±hÑ"Y÷¡3!ó>ûlÖ²eVVVìB˜¥§OŸfe"++«¦¦¦q›víÚy{{�¤:ÌÌÌ~ì=zh;e
+ ‰�%²Ù?‘è¸4À�`þ|Múõ“ã¨Ç�ùå—»ví’ÖtêÔ)füøùÛ·[;V·¢<þüÌ™3¬LüþûïœSÑ;tèàççfl<åÄ	‡‹
< ÆÆô¥ÒÒV¡t
;4*æèQš¡0%¥¥íE"Q||¼4åaÜ‡ùóç—––Ò|fp®Ÿ~Re‘ÖòêÕ«ôôôØØXŸ¦Fd[ZZFFF:t¨¢¢â÷ßi0â§¦jºëZ†ŽKCT”ØÒRüúu‹gggÃ�Eö74eÊ”¢¢"ÉË%%T6nT]oåR^^žšš:{öì·<Nöóûàý÷¯ØÚVGEÕ°G½x�	,):.
gÏŠwìh¾«W¯62ª›lææævìØ±z�Þ¼ˆãâTÔUD¥ïÜ¹3::ÚÑÑ‘K"¼¼FlØ°áêÕ«³f½vt¤	oóó5Ýi�¢ãÒÐJJJF�-ý�€SºdÉ’×œ–†••øóÏÕÞADÉäää¬]»6,,¬ñ(lcccw÷ù½zå¶k'JJ*}÷qK­NC—Ã�ðÉš}FÅçóÁk�v‡"!!¡WSÙ¦ÝÝiÊ‡Æ«k#m“ÊÊÊ'N9räðáÃ¹¹¹²/™›»úû÷
+ 
+ 
+ ðõõ›:Õ¿_?ƒ¨(£‰‰‘þ¤1Ð´6©ŠgÏÄööâÝ»›lNÄ×_-Mˆ```ÛÌø%qp°Ò»ŠhwïÞÝ´iSDDDƒ¤˜Ý»÷ôðHáñ*x¼×/f‰DzŒÐY«aûv:é��lÓð¦M›–œœÌîÚØØ$&&†††6sÒ±cIA©�è.UUU§N�:ÀpïÞ½Újƒ=B‚‚œ\RÒ{ãÆwÇŒyÓÙÓSw­Mk“ª˜:UìêÊýÒ“'O†*ýBBBØ´EÍ3c†ØÎN‰�D´œk×®­\¹Òßß_j]{zF»¸Ü04¬	
½•’’’™™ùêÕ+M÷Tùè¬Õ«°�0Kd×îï½÷ÞíÛ·ÙÝ˜˜˜µk×¶4ÏZl,Y¿žpejAt›ÒÒÒƒ‚qôèQ6™•¹¹«··ïÈ‘NNN;wú>~Ü1<¼,&ÆÅÆFG†Xê¬4prþüùðððR&Å#ÈÁwß}Ç®²ÛRÖ¬!�çÏI‹s–!:†P(äóù¬»ñàÁ¨±³³³²ZýàA„@`±`Á;»{ööö]Ù|¢mÝ\½*3“4ÎrñâÅÐÐPVLMM“““åÓ¢ä”óH[¤C‡£G�Þ´iÓýû÷áõÕW_YXX\½:U à99M++K311©¨x9p`Íðá§V¬Hi6žÖ¢ƒVCAqq!ÿø™7¯®òÊ•+AAAeÌz¶ ç ùC8ã“oçÿ#4Ñ¦f@d¸yóæ¾}ûRRR.]ºÄ#BÊË×¸[ZV~ñÅš²²§îîîcÆŒqhS9êtÐj`‡LšTW“““ö«]ºtÉÈÈPDZ
7`>€‘ŸŸ¿jÕ*3³gžffnnn‹


¼½½óòz<ÞºvíæÆµ´¾ÿžœ>MAb¹sçÎˆ#Øÿ�Ç;~üø Aƒ<õ�;ÄÍ�fš:UI�Et“Ç�§¦¦‚Áçó­­­çÝ¼ù‰@`šåä´I(ÂÍiÒ¤IÚ¼È€Jƒ,Ož<ñññ-'ÌÄêôôt___ÅO'�Î�éRò)}…�âµ{÷îcÇŽÛÙEb;r¤³‰‰Ib¢Gaa‘“ÓÉ	zO˜0Ac–º,
ÕÕÕ!!!'Ož„²™™Ù‘#G†Þª3ÂwelL.$Ë—+§‹ˆÞðôéS0"@#233½¼¼ÊËÈÍ Îšµ9/�/#""@#dh]“†¹séºF>>´<kÖ¬øøxÂ<§LKKWd­ËFtëFÆ�#ÌiDJJJöíÛqéÒC‡O?øà¹³³³PHÖ¬`h¸¿oß»‘‘ãßÿ}Ö"T2n¥tÎœ¡¶m£åÍ›7K?ãªU«”ö}ûŠ'NTÚÙ=¦¨¨hÃ†
C‡µµµ5j.�W¿^‡Ò3f€}üøñššMuO§¬†˜²u+Í/~ùòIp%Øu""##wîÜ©´÷¤Û'”vBDïyøðáÞ½{wý¿½ûiëŠã~ýKŒÚh¬ÿPW-£v´[×‡‚ØÙq¢±
Ýƒƒ‚úÐ‡B!µà OFú0Xé´lUÛQÐ¬²B¬b·t´JÁ*²Ða[mü7Q§Æ¸Ÿ¹í%õžD;s¯ÞÛïçABLr®1ç{ÎïæÞs[Z''¿ÈÌ<YVFõ…Íiµ†ý\X˜QYYyüøq™·JUÑðìÙÆ©OÅÅ3G�¥H¦{²³³ûúú"ø„ÁÀ
sv{À^à½‘‘Æ(&t:]hèåG�¾v»ƒ
+ î»Ýæ™™™’’ç222äÙUE¯¢¢¢­­�Û¸0IÂ“'ORÅçQìDU×ÞÎ½yÈ×ø�Ífkiiéèø]£1æç¯fgëÜnwssÜ«W�m••¥åååR/k®žhàn¹{÷.½kü=‹¥¸¸8ÀÍ\¾Ì]»Æ­¬àJ �õ�¥¥þ�ŸŸïîî¦IÄÐÐÐ‰_öö~?9©×hV
+ 
+ j§¦žó_½IG%g›//s‡q/.šLßò÷œ?>ð¹Àyˆt¹Þàðñ–——èçÒÒÒ¢Âã©(>vìØ‹/tºS§bc
Zíl~~…ÔÛ©’hèìÜ¸*QW×üÑÐééé


’´Ä_±ÀéD4À&.—ËW?çñq@¥Á¦'GDDh=âããµ"‘¡¡¡N§“æÅmmScé¨¤ ¸p�kksMOG¬¯»è�¶Z­¹¹¹’´ÔÝÍp�q.K*¶¶¶ægxº½Kt¶oPP�F£wõMÄ«×î*™5˜ÍØuMMÿ›êêj©r�ÃVªÂ—ô›Fu1æå°ÂÃÃ…!=!!�Ùçi.¤Ø}R*‰»ÝÞÛ»qÆeRRR]]�„-!‚/é·$~"ÍÛ…¾ËìóÛ]L±Ô
÷ïÏ
õ���Ñíúúúèèh	C4ì¶ÕÕÕíôyfI/ôm_ã<_ÒïÊßµ×(þ]xû–+*ŠÊÌLâ<ûrÏ�;'m{‘‘U†ˆ	lYÒó~ÿ%=�ó)))âO?wÿ¬EQ|446¾v»“§¦6Î˜0›ÍrLóhâ€høTÒo¹ÏWIOý™ïÞQQQª,é÷,ÅGÃÄÄ_‡ÿ3<l-//ÏÉÉ‘£IDƒï’Þ×n¼%ÖÜÞ%½^¯göy¢ú’Þ�¼¼¼ž÷gë¤§§›L&~RLC`GGGLLLuuõWüI=Pv4ØíöœœÑ×¯¿	¾zõªL­~Ñð¿Kú��á[úÄÄD”ô;‘••Å¡ÓØØh4)(,jkkkjjeÇÀÀ=FŠ¦•ýïéìì¤ŸÍf3>/Tp
OŸÊÔ–¨¤ßNŸg–ôBŸ§q>55•ÙíQÒM
„yA{{;ÅÁ­[·„¼ ÿÝ‰hØlttÔbÉ=xð¹Óé¼té’|
ïÕY
àÞßÒ‹ñþ••ñs…’>::Z<Ôó»ñ4
Jz™ÍÎÎò5Í8OYaµZù_ñ÷Ó=5­àh¨¯oïï¿ètþYXX(Qp²Q4ÌÌÐàKSgÙÚôßçý”ôaaa(é•kpp�ªÎMMMB477SYA{é¾’Sj4LLL<~üyp°{|¼áæÍŸdm›¢a}�›ž~w>ÅÎx—ô¾vã-z.©¸é‰Þ%}RR’¯>�’^Ñ¨š¦	£ÑHÑPSS#Õ‰BJýÜÐ[S\ÿÙg¿,,¤x_ÛVÂQO~£a;%=e=lÓ½Kú¸¸¸´´4”ô ¸rå
+ }øi²PRRB5Eº‡
)5<xpöìÙþþëUUU27íÖëiò=;::§ÕúéöÌ’^82gß¾}¾†z”ôà¿Ó¡Ùƒn˜L&
+ )Rd4ôöö&&&ÓT|ll¬¬¬,P/K“vÿÞó~�ÃAiÔ}ûöðÀ€ð\ï’ž†zæn<š ¤‡í—œçÂò´®Èh¸qãÇ®®ë/_þVZZºÍuißrzï«¤zxrr2ýŒ>rÄ•uæÌÉÌL”ô VÊû@ÏÍÍÙl‘SSºññ?¿q¹\ÂA¸~vãù/é÷ïßïk7^xx8c#ŠŠäøSv�ò¢¡µµU«-Ôh–×Ö~íêŠ³X,âÇ%½N§ã‡z”ôEy«<�>}:--mi)F¯_6â>�’`ç”
üòxwîÜ¹wïÞ¼ˆ(€:(/@˜x¢
À€h%EC^^^Ð{ü1ä<³Ù\[[»{› 6JŠÎ³–Õƒn�F‡ÃÑÓÓC7(w{ëÔCaGCŠ×Ã¢�n­€O“Â¢A¼¡°xøðá.o€º(,|­‡�¥°h`®‡§°Ý� D0àô*`À¬
À€hD0 €Ñˆ`@4¢
À€hD0 €Ñˆ`@4¢
À€hD0 €Ñˆ`øºÐ;_rIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-5.png gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-5.png
*** gcc-4.0.2/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-5.png	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/doc-files/QuadCurve2D-5.png	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,16 ----
+ ‰PNG
+ 
+ 
IHDR^´SáÓgAMAÙBÖO¡	pHYsšœ$tEXtSoftwareQuickTime 6.0.2 (Mac OS X)Ån*�tIMEÓ
+ 	!Hù§¨ôIDATxœíÝpTÕ½ðßîfó?Ù
 )Š%)¶QHõµ±Jk[‡d˜*UÛ!”ÖQûjRfÚ�7m3â«Mè8­¥–$ÚÚRk'8N$üQÀZPáÉ£dÂËÈ?Éæï;¿½—
„Cþ�Ý{Îî~?“¹s÷&Ã#ûåüÎ9÷\Ûàà \É®º #DH @Ñˆ�@4€¢$
 �h	DH @Ñˆ�@4€¢$
 �h	DH @Ñˆ�@4€¢$
 �h	DH @Ñˆ�°)yRvuuµ8fdd¸ÝnëßFeu¯¡¶¶6===ÛGœ”——[Ü«£!//OôêêêDo%777??ßèA€V¢¬|³ÊÊJ�ÇSUU•––&^–””Ì˜1ÃÊÀY:ÖP\\¼nÝ:%£0.˜¡	K£!##ƒ|#‘ÆË¶¶¶ììlQeXÙK£!++Ëívççç{<‘………"&Œ¼­X:)r¡ªª*///==ÝxYRRbI€V°ä	$ÔDh3 �h	DH @BY4<þ8mÙB�ª÷€‘¨™¡X¾œþúWêï§›n¢Ó§ùJOµ¶Rjªõm	5Ñðá‡d³ñW}=Ýw_Ù±ƒOæÌ¡ï~—~òë[W°t5¤ßm·™'·Þjž|áôì³´s'µ´˜WªªhûvÊÉ¡ùó)>^A#"™¾Kžž{ŽÖ®åBãg?£õëùJs3¹Ýätªn@P3)âHô6négV¯æÑÑq%†¡ €RRhÉúç?-h#@DSSPØltî½÷Þ(?&êˆE‹†^®XA“'Ó®]C‡
Èå¢höì`5 2)+(–-££GéØ±	ý!óæÑ‘#|rò$ùnæ¤†úÌgÐ<€§,<Š‹Àl¥øsÞ}—~˜Ï;;iÒ$ºùfZ¸�^x�û&p}ô†¼çÏSEWmm|¹èÇ½÷îÿ»°Š†«UUÑÐ…”•Åç‚8½	Ì†ŒLÙBé�úâ©¸8¸ï’�ÍÓ{÷Òºuæ•—_æiÑ‰øË_‚ûÖ!MÍ…`·ó×ý�œNž(õ»ë.*,äµUÍÍæ•W_å‹œúÒ—¸I@
+ £�|K!?þØê7ÍÈ aûÔ¾ý6½ø"ŸˆÅ£�òIKgD2•c
gÏRr2EG«zÿ!��<l¹`M�Ê/¿ò¾éK#Ï<Ãó(Ì‡!¯OEw%öìáÛÀ\.¾²f
Í�ËEî
…¡>¼^Š‰QÛ„Q´¶ÒÌ™|Œ�çiQc-¦8Ál(„1•Ãnýý\ÒoØ °	c’’ÂµÏûïóÞ3F.ˆÞÄäÉ\wˆŠ ,©Œ‡ƒûç}¤°	ce·Ó�wÒC™/Eáç?çÕœ"#GŽðüè¾}ÔÛ«ª��¤¸ X¶ŒÎœ¡ýû6!06oæ-íè±Çx�6ùVm‹³¡¢GCw7ÅÆ*|ÿ@jk£Ý»iútî_�ï¦ò²2^…)Nî¹GuãÆIåº!lr�|UÆÒ¥C/-¢Ž^[%Ž†_äNDNá)Ÿ ?õ3/òVN‘0ÚÿÕ¯Ò�|òÞ{ôå/óÉùó””¤¶QrŠKáÞ^…_þRm+,²?oQñüó¼"›|[]¥§ó6™?úuu©nÀ•GƒÓÉKBb’" fÏ¦'Ÿ¤(_çõÒOÊcÿ;OvWÖ¬áÕV¢' –ú‚bùrÌã
µ­PIü0v�9tˆ‹Q^Ý~»¹{•1Š�rÁzê£.'úûöñ17—_VVò_óçóÞ¹ÆNVÖP<CÃÛ)7=�V®ä[¿ü5WUŸc§\6-z
Ÿ~Ê÷_b»×ø‹Ž‚Ú´‰OJJø\èê2‡*Hýb=QZÏœI¿þµêvèÍ¿ni)ÕÕÑïOßü¦yå¡‡øøýïÓ‰ªZaH}4ˆþÂ-·DÐ$ÅÄ¥¥q•!~i†¼<Þtÿµ×†~@ÄÇ¶m¼:àºiQP¬ZÅCñªÛÊÌû5Äo25•o!�Š¢¦&¾m”ÂkA:XC‹h€Àépð ÕÖÒÈ/››y¯ªÌL~&àš5ª!ÑþyÌrçNJH êj¾rêýùÏØ)F¢E4ˆÎpM
oŽ‚ûŽ‚ª¿Ÿ÷ÈD.|ûÛ|ò­o™›î‹ŽVÁå´ø'£¯�÷€ß²Eu;Â�‘ä[�ÚÐ@¯¼B?ø�y¥´”n¼‘y„ï+ M¢!::²î¤ÐAj*w.4_Î›Ç;hïÚÅ6TVÒŸþÄÅD&-
+ 
+ ¡°�§î#äL�‰œq÷×¢Eô�ðÉ[oÑâÅ|‚¢#¢è
 cHô#V­2g@o¿�—]æäð
£Æcˆñ×äé§yš£¶–«c•ÄÆ�¼·]f&zaH—h�Õ;øn¢Y³T7e"h°ŸúhÀ8ö
½ß¢Aþ„]~ä‹Æ*h›ühs�ÝqÍ#ÙFkPàùËŠº:^‘):7ßÌwÁ�/>ÄfCÃƒ.ÑÐÓÃ³îkÖÐúõª›2*ñQï½Hý^êï¡>ßÑ.¾e%{9œdw�8|çæ‰“¢bø4ÆN¹ÍÍ\tÐý÷óN¹Ë–ñd„4]nÊÖ÷NŠ¾.óËw.R@FÇ„FÜ=Nt=Ñäˆñ£9,ŒqeÂÁ1l§Ü¤$QtˆëF4>LÿúvÊ
IºDƒðàƒz”¬½äí ïyß±ÃêŽ@À‰^¡èÎˆ/)Q•pFÄ^úºt.²cüÕÊœ9ô»ßñ‰÷Ò»ýíof7°¸˜ŠŠøÄ¿ì
+ 4§KA¡˜ˆƒ®Vêj!o;w
€û¾˜pÆQTÜÐÑ6î�õÑ£<Í‘™in¢ýØcôÎ;Ü�xâ‰W
+ w‘
ƒÔÓÉqÀ‰ÐA‘û{Ñ›0c"þúò¢¬Œ¶nåMîÞ|“¾ö5¾òÇ?Ò
7ð&wññÁj5\�¢¡»›×óÏ›Ç_ÁÕ×E�
ÔÙH}ÝA~§È ÊN
+ ã+��\�Œ¤·—Ë
+ c.cútª¯çÁ¦cÇèsŸã+þÌA!�ÆÄß†ï}�')‚
}t¡‰.4Rw{pÞ Rc¢"ó³G™I�`žˆÚä²Á‹Ë•ŽçN„¨2ÒÓùeOÏ†Þq«W##”Ñ¨×@¾Ç4ÜzëF¿—ÚOÑù3æ:°žÍî‹‰>F'òÉ5z­­<`¹kg„H
¡£ƒ^z	;åZM¯høÅ/¸à|â‰Àý‰¢vhÿ”Ë�þ3�9œfF˜a?lÌââEsôaûvÞ„FX¼˜oè Ë6Ñ…àÑ+IôZOò€„
+ g'EL'…ørÄø¿ãñp?B$Åòåüòå—y6TT?Ì7ŒB0h4Ö8ƒÔQOmu¼<B¯(ë¢‹gÍ—Ü­0c"mzÒÊ•C£7Þhî”›žnFÃž=\‰Ü{oD<WÙzõ.\ ßü†ç´23¯÷�ðvÐ¹ã<+	aÆîðÅÄ¥>…3~`ÐîõšÏàxðAzõU³|åÞ}&N¯h˜Ø�ƒÔö	µyÝ(Ð�k&úª�$qì¥øƒm;wò�™Ž%Køá=¢èxüqš:UukC�^Ñ ÌšÅëmÇ=I1ÐKÍÇxñD&îS$ù“‚¢âŠŠøä55¼Gî´iü#ee4w.vÊ+í¢aófJN6G›ÆJ”Mbý1Æ)b’:{’''‘#¦½�&MâÅT7Ü@§Oó
+ +™vÑ0nÞvj<‚GITÅ$7w$ï>�|Ü“´ö¿¸ÛàñÐÝwó(æ7¾�§�K„x4 `¼l6_‡"ùd}òú�ÉÛwÆŠC”ä‹ýûyx"5Uu#5 ]4ttÐ†
ü¬WãÞ›‘x;¨ñ0r&Ä}¾'9iJ²‹_ý6é©^vµz5¯¾‹pÚEÃX')z/Òÿ
+ ùÍ@'ƒ¶�O&ì{ßuËWö’dŠŠ	ßxƒûßù�ŽGí–<�é™ƒÔ|¹�e·
ÎžÙ)¾ˆêé4�PÌ�æ:ìvm~Þuç�	sæð‚«·Þ¢ÄÄˆØ)W»^ƒ°u+¯i3ž} wî8ß+`‰în²G9¢“\¢è˜¿Ðu &96Î±gßÆtŒ†Q\l¦&
÷�„ˆÐÙIµ‡m%>ùcW\Š×¼;¢E?W«V™{ð‡‡P‹†Á~:}P£�[!²y½ôÜ¯âv¾ã>Õä:VçvÄÄö÷ó-äÙÙ!¿S®ŽÑÐÒÂCÄ�<2ôDÆ!m,…
µ·“ËEûÑ¿]÷=ànïvÝ‘¿w¯êfM€vÃ�Bb"ýá¼ÕÏðh�…ŽSjÚ0"Î¡¯{ÎŒîw_o¬©¡¾ÁhjvS¬«j¿û?Ÿ“cËË¥[ÈuŒ†k>“¢ý¬bý‰RÂWMôø6lšÔE‹f;÷½îrÛ]Ù÷¸):ñÈ[Cƒî;åêXPo¾IS¦˜Û“›ûéÔ»ˆQ}}|'hRoœùô»7¿ä¾Ðï~¶4aÕ*M÷«Ò4$:èìÿ¨n@twÓð]¡_ÏvÎÊE‡ûÉÕî“§rrèÑGÍûD•�hh¨¥î6Õ�ŠòrÚQ]sÌ½u›û¶ÿp“3þõ×éóŸW¹S®¦ÑÐÔD+Wòþ±÷ßï{Ý×M§(n@�µ´PJ
+ ßÿÕG1we¹Ï´¸cÝî÷kã&MRÐ‡!É÷œÕíÛyµ™
]ç7 àD\þXs‡s’Ë<�r8_{ÛY½×YsØ©$HÛ^
Ûîéì1ì

¡D|æ/}à¯}ŒºŽg[FÓ^ƒ°eoÈcòv¨l
+ €ŸÍ.ûœG¿¨ñg~Œôí5éïáiK€ ŸùÑÿ©�æ‹úö†ôœWÝeW•ô’#æÇñ¼ïH o4œ9C¹¹´v-å.ðªnè*ôKzmé
S¦ðš�C‡(7÷YF»c´|˜”ôÚÒ7†¶{Â-ØáDZÒ‹þü°�}Ä”ô~ÙÙÙÕÕÕÆyZZZQQÑŠ+Äyiié¶mÛÜn÷SO=•••eY{´†¹�šJS>z"h%ýÄˆhhkk+))ç›6mª¬¬¬««a‘ŸŸ_PPàñxÄ•šššŒŒkÚ£o¯A07êlèUÜSIî›%Ÿèøû"DTTTˆ,0òÂf³‰‹ˆ†Ë¡ž”ô:½£¦½ò•UUUÆ·Œëin¥u4|ò	‰}a�mñ×U7%äÈWæ\uŒ¼’^gµµµÙ¾Í^D”••ùƒ ¼¼¼°°PôŒÑkh
Ó¦ñã	ÿ÷„Ñ0D^Ò_µ%}Õ„¿›à—ŸŸ/¢¡  À(+,£u4“'OFLo%=\©¸¸Xä‚è,,]ºTÔi>Ö¼µÖ3B}=Mµuö4©nÈÄ ¤‡Ñ¥Ä°^CJJJ[ÛÐ6%EEE",¬i�îÑÀZÿMíºî‹’Â”Ö…aÐ;ÐO‹kg.éÇðï<JzSºGÃ‰´ðî˜-ÏðÓ�f,«ñìºÿf‚J÷Àg?Km�±ÏØ~%=@€è
ÑÑtÓŒØ†F;E¡¤°NCvvòó¬ÀJ!
`=ôÀ@Ñˆ�@4€¢$´Ž†ììlÛ%éééåååþo•––ªk@˜Ó:„ŒŒŒ*q’ŸŸïñxŒÝòD.ÔÖÖªn@ØÒ}5äÕ»å‰“3fX¹@Ò=®Þ-Oa±{÷nÅ-kºGÃµvË€ Ò=¤»å@°é>	J @w^€z
 �h	DH @Ñˆ�@4€¢$
 �h	DH @Ñˆ�@4€¢$
 �h	DH @Ñˆ�@4€¢$
 �h	DH @âÿ‚8Ø|óZIEND®B`‚
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/geom/package.html gcc-4.1.0/libjava/classpath/java/awt/geom/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/geom/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/geom/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.geom package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.geom</title></head>
+ 
+ <body>
+ <p>Classes to represent 2D objects and different path transformations.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/im/InputContext.java gcc-4.1.0/libjava/classpath/java/awt/im/InputContext.java
*** gcc-4.0.2/libjava/classpath/java/awt/im/InputContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/im/InputContext.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,435 ----
+ /* InputContext.java -- provides the context for text input
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.im;
+ 
+ import gnu.java.util.EmptyEnumeration;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.AWTException;
+ import java.awt.Component;
+ import java.awt.im.spi.InputMethod;
+ import java.awt.im.spi.InputMethodDescriptor;
+ import java.io.BufferedReader;
+ import java.io.IOException;
+ import java.io.InputStreamReader;
+ import java.net.URL;
+ import java.text.AttributedCharacterIterator.Attribute;
+ import java.util.ArrayList;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Locale;
+ 
+ /**
+  * Provides a context for controlling input methods and keyboard layouts.
+  * This class provides the communication layer between the client component,
+  * and the various locale-dependent text entry input methods that can be used
+  * for the client. By default, there is one instance per Window, shared among
+  * all components, but this limits text entry to one component at a time.
+  * Thus, text components can create their own instance to allow text entry
+  * in multiple components at a time.
+  *
+  * <p>By using the interfaces of {@link java.awt.im.spi}, you can install
+  * extensions which allow additional input methods. Some of these may use
+  * platform native input methods, or keyboard layouts provided by the platform.
+  * Input methods are unavailable if none have been installed and the platform
+  * has no underlying native input methods. Extensions are installed as jar
+  * files, usually accessed in the default extension location or specified by
+  * the -extdir VM flag. The jar must contain a file named
+  * "META_INF/services/java.awt.im.spi.InputMethodDescriptor" which lists,
+  * one entry per line in UTF-8 encoding, each class in the jar that implements
+  * java.awt.im.spi.InputMethodDescriptor.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Component#getInputContext()
+  * @see Component#enableInputMethods(boolean)
+  * @since 1.2
+  * @status updated to 1.4, but unverified
+  */
+ public class InputContext
+ {
+   /**
+    * The list of installed input method descriptors.
+    */
+   private static final ArrayList descriptors = new ArrayList();
+   static
+   {
+     Enumeration e;
+     try
+       {
+         e = ClassLoader.getSystemResources
+           ("META_INF/services/java.awt.im.spi.InputMethodDescriptor");
+       }
+     catch (IOException ex)
+       {
+         // XXX Should we do something else?
+         e = EmptyEnumeration.getInstance();
+       }
+     while (e.hasMoreElements())
+       {
+         URL url = (URL) e.nextElement();
+         BufferedReader in = null;
+         String line = null;
+         try
+           {
+             in = new BufferedReader
+               (new InputStreamReader(url.openConnection().getInputStream(),
+                                      "UTF-8"));
+             line = in.readLine().trim();
+           }
+         catch (IOException ignored)
+           {
+             continue;
+           }
+       outer:
+         while (line != null)
+           {
+             try
+               {
+                 if (line.charAt(0) != '#')
+                   {
+                     Class c = Class.forName(line);
+                     descriptors.add((InputMethodDescriptor) c.newInstance());
+                   }
+                 line = in.readLine().trim();
+               }
+             catch (IOException ex)
+               {
+                 continue outer;
+               }
+             catch (Exception ignored)
+               {
+               }
+           }
+       }
+   }
+ 
+   /** The current input method; null if no input methods are installed. */
+   private InputMethod im;
+ 
+   /** Map of locales to the most recently selected input method. */
+   private final HashMap recent = new HashMap();
+ 
+   /** The list of acceptable character subsets. */
+   private Character.Subset[] subsets;
+ 
+   /**
+    * Construct an InputContext. This is protected, so clients must use
+    * {@link #getInstance()} instead.
+    */
+   protected InputContext()
+   {
+   }
+ 
+   /**
+    * Returns a new InputContext.
+    *
+    * @return a new instance, initialized to the default locale if available
+    */
+   public static InputContext getInstance()
+   {
+     InputContext ic = new InputContext();
+     ic.selectInputMethod(Locale.getDefault());
+     return ic;
+   }
+ 
+   /**
+    * Attempts to select an input method or keyboard layout which supports the
+    * given locale. This returns true if a locale is available and was selected.
+    * The following steps are taken in choosing an input method:<ul>
+    * <li>If the currently selected input method or keyboard layout supports
+    * the requested locale, it remains selected.</li>
+    * <li>If there is no input method or keyboard layout available that
+    * supports the requested locale, the current input method or keyboard
+    * layout remains selected.</li>
+    * <li>If the user has previously selected an input method or keyboard
+    * layout for the requested locale from the user interface, then the most
+    * recently selected such input method or keyboard layout is reselected.</li>
+    * <li>Otherwise, an input method or keyboard layout that supports the
+    * requested locale is selected in an implementation dependent way. This
+    * implementation chooses the first input method which supports the requested
+    * locale based on the InputMethodDescriptors loaded from the extensions
+    * installed on the CLASSPATH.</li>
+    * </ul>
+    *
+    * <p>Before switching away from an input method, any currently uncommitted
+    * text is committed. Not all host operating systems provide API to
+    * determine the locale of the currently selected native input method or
+    * keyboard layout, and to select a native input method or keyboard layout
+    * by locale. For host operating systems that don't provide such API,
+    * selectInputMethod assumes that native input methods or keyboard layouts
+    * provided by the host operating system support only the system's default
+    * locale.
+    *
+    * <p>An example of where this may be called is in a multi-language document,
+    * when moving the insertion point between sections of different locale, so
+    * that the user may use the input method appropriate to that section of the
+    * document.
+    *
+    * @param locale the desired new locale
+    * @return true if the new locale is active
+    * @throws NullPointerException if locale is null
+    */
+   public boolean selectInputMethod(Locale locale)
+   {
+     if (im != null && im.setLocale(locale))
+       {
+         recent.put(locale, im);
+         return true;
+       }
+     InputMethod next = (InputMethod) recent.get(locale);
+   outer:
+     if (next != null)
+       for (int i = 0, limit = descriptors.size(); i < limit; i++)
+         {
+           InputMethodDescriptor d = (InputMethodDescriptor) descriptors.get(i);
+           Locale[] list;
+           try
+             {
+               list = d.getAvailableLocales();
+             }
+           catch (AWTException ignored)
+             {
+               continue;
+             }
+           for (int j = list.length; --j >= 0; )
+             if (locale.equals(list[j]))
+               {
+                 try
+                   {
+                     next = d.createInputMethod();
+                     recent.put(locale, next);
+                   }
+                 catch (Exception ignored)
+                   {
+                     continue;
+                   }
+               }
+         }
+     if (next == null)
+       return false;
+     // XXX I'm not sure if this does all the necessary steps in the switch.
+     if (im != null)
+       {
+         try
+           {
+             next.setCompositionEnabled(im.isCompositionEnabled());
+           }
+         catch (UnsupportedOperationException ignored)
+           {
+           }
+         im.endComposition();
+         im.deactivate(false);
+         im.hideWindows();
+       }
+     im = next;
+     im.setLocale(locale);
+     im.setCharacterSubsets(subsets);
+     return true;
+   }
+ 
+   /**
+    * Returns the current locale of the current input method or keyboard
+    * layout. Returns null if the input context does not have a current input
+    * method or keyboard layout or if the current input method's
+    * {@link InputMethod#getLocale()} method returns null. Not all host
+    * operating systems provide API to determine the locale of the currently
+    * selected native input method or keyboard layout. For host operating
+    * systems that don't provide such API, getLocale assumes that the current
+    * locale of all native input methods or keyboard layouts provided by the
+    * host operating system is the system's default locale.
+    *
+    * @return the locale of the current input method, or null
+    * @since 1.3
+    */
+   public Locale getLocale()
+   {
+     return im == null ? null : im.getLocale();
+   }
+ 
+   /**
+    * Sets the subsets of Unicode characters allowed to be input by the current
+    * input method, as well as subsequent input methods. The value of null
+    * implies all characters are legal. Applications should not rely on this
+    * behavior, since native host input methods may not allow restrictions.
+    * If no current input method is available, this has no immediate effect.
+    *
+    * @param subsets the set of Unicode subsets to accept, or null
+    */
+   public void setCharacterSubsets(Character.Subset[] subsets)
+   {
+     this.subsets = subsets;
+     if (im != null)
+       im.setCharacterSubsets(subsets);
+   }
+ 
+   /**
+    * Changes the enabled status of the current input method. An input method
+    * that is enabled for composition interprets incoming events for both
+    * composition and control purposes, while a disabled input method only
+    * interprets control commands (including commands to enable itself).
+    *
+    * @param enable whether to enable the input method
+    * @throws UnsupportedOperationException if there is no current input method,
+    *         or the input method does not support enabling
+    * @see #isCompositionEnabled()
+    * @since 1.3
+    */
+   public void setCompositionEnabled(boolean enable)
+   {
+     if (im == null)
+       throw new UnsupportedOperationException();
+     im.setCompositionEnabled(enable);
+   }
+ 
+   /**
+    * Find out if the current input method is enabled.
+    *
+    * @return true if the current input method is enabled
+    * @throws UnsupportedOperationException if there is no current input method,
+    *         or the input method does not support enabling
+    * @see #setCompositionEnabled(boolean)
+    * @since 1.3
+    */
+   public boolean isCompositionEnabled()
+   {
+     if (im == null)
+       throw new UnsupportedOperationException();
+     return im.isCompositionEnabled();
+   }
+ 
+   /**
+    * Starts a reconversion operation in the current input method. The input
+    * method gets the text to reconvert from the client component, using
+    * {@link InputMethodRequests#getSelectedText(Attribute[])}. Then the
+    * composed and committed text produced by the operation is sent back to
+    * the client using a sequence of InputMethodRequests.
+    *
+    * @throws UnsupportedOperationException if there is no current input method,
+    *         or the input method does not support reconversion
+    * @since 1.3
+    */
+   public void reconvert()
+   {
+     if (im == null)
+       throw new UnsupportedOperationException();
+     im.reconvert();
+   }
+ 
+   /**
+    * Dispatches an event to the current input method. This is called
+    * automatically by AWT. If no input method is available, then the event
+    * will never be consumed.
+    *
+    * @param event the event to dispatch
+    * @throws NullPointerException if event is null
+    */
+   public void dispatchEvent(AWTEvent event)
+   {
+     if (im != null)
+       im.dispatchEvent(event);
+   }
+ 
+   /**
+    * Notifies the input context that a client component has been removed from
+    * its containment hierarchy, or that input method support has been disabled
+    * for the component. This method is usually called from the client
+    * component's {@link Component#removeNotify()} method. Potentially pending
+    * input from input methods for this component is discarded. If no input
+    * methods are available, then this method has no effect.
+    *
+    * @param client the client component
+    * @throws NullPointerException if client is null
+    */
+   public void removeNotify(Component client)
+   {
+     // XXX What to do with client information?
+     if (im != null)
+       {
+         im.deactivate(false);
+         im.removeNotify();
+       }
+   }
+ 
+   /**
+    * Ends any input composition that may currently be going on in this
+    * context. Depending on the platform and possibly user preferences, this
+    * may commit or delete uncommitted text. Any changes to the text are
+    * communicated to the active component using an input method event. If no
+    * input methods are available, then this method has no effect. This may
+    * be called for a variety of reasons, such as when the user moves the
+    * insertion point in the client text outside the range of the composed text,
+    * or when text is saved to file.
+    */
+   public void endComposition()
+   {
+     if (im != null)
+       im.endComposition();
+   }
+ 
+   /**
+    * Disposes of the input context and release the resources used by it.
+    * Called automatically by AWT for the default input context of each
+    * Window. If no input methods are available, then this method has no
+    * effect.
+    */
+   public void dispose()
+   {
+     if (im != null)
+       {
+         im.deactivate(false);
+         im.dispose();
+       }
+   }
+ 
+   /**
+    * Returns a control object from the current input method, or null. A
+    * control object provides implementation-dependent methods that control
+    * the behavior of the input method or obtain information from the input
+    * method. Clients have to compare the result against known input method
+    * control object types. If no input methods are available or the current
+    * input method does not provide an input method control object, then null
+    * is returned. 
+    *
+    * @return the control object, or null
+    */
+   public Object getInputMethodControlObject()
+   {
+     return im == null ? null : im.getControlObject();
+   }
+ } // class InputContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/im/InputMethodHighlight.java gcc-4.1.0/libjava/classpath/java/awt/im/InputMethodHighlight.java
*** gcc-4.0.2/libjava/classpath/java/awt/im/InputMethodHighlight.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/im/InputMethodHighlight.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,188 ----
+ /* InputMethodHighlight.java -- highlights the current text selection
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.im;
+ 
+ import java.awt.Toolkit;
+ import java.text.Annotation;
+ import java.text.AttributedCharacterIterator;
+ import java.util.Map;
+ 
+ /**
+  * This describes the highlight attributes of text composed in an input method.
+  * The description includes an abstract level (whether text has been converted
+  * yet, and whether it is selected), and a concrete level (which style
+  * attributes are used in rendering). If no concrete level is defined, the
+  * renderer should use
+  * {@link Toolkit#mapInputMethodHighlight(InputMethodHighlight)}. An example
+  * of conversion state is kana -&gt; kanji.
+  *
+  * <p>Instances of this class are typically used in
+  * AttributedCharacterIterators, and may be wrapped in Annotations to separate
+  * text segments.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see AttributedCharacterIterator
+  * @see Annotation
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class InputMethodHighlight
+ {
+   /** Raw text state (before conversion). */
+   public static final int RAW_TEXT = 0;
+ 
+   /** Converted text state (after conversion). */
+   public static final int CONVERTED_TEXT = 1;
+ 
+   /** Default do-nothing highlighting for unselected raw text. */
+   public static final InputMethodHighlight UNSELECTED_RAW_TEXT_HIGHLIGHT
+     = new InputMethodHighlight(false, RAW_TEXT);
+ 
+   /** Default do-nothing highlighting for selected raw text. */
+   public static final InputMethodHighlight SELECTED_RAW_TEXT_HIGHLIGHT
+     = new InputMethodHighlight(true, RAW_TEXT);
+ 
+   /** Default do-nothing highlighting for unselected converted text. */
+   public static final InputMethodHighlight UNSELECTED_CONVERTED_TEXT_HIGHLIGHT
+     = new InputMethodHighlight(false, CONVERTED_TEXT);
+ 
+   /** Default do-nothing highlighting for selected converted text. */
+   public static final InputMethodHighlight SELECTED_CONVERTED_TEXT_HIGHLIGHT
+     = new InputMethodHighlight(true, CONVERTED_TEXT);
+ 
+   /** Whether the highlighting applies to selected text. */
+   private final boolean selected;
+ 
+   /** The state of highlighted text. */
+   private final int state;
+ 
+   /** Any variation on the highlighting style. */
+   private final int variation;
+ 
+   /** The unmodifiable map of rendering styles. */
+   private final Map style;
+ 
+   /**
+    * Create an input method highlight style, with variation 0 and null style
+    * mapping.
+    *
+    * @param selected whether the text range is selected
+    * @param state either {@link #RAW_TEXT} or {@link #CONVERTED_TEXT}
+    * @throws IllegalArgumentException if state is invalid
+    */
+   public InputMethodHighlight(boolean selected, int state)
+   {
+     this(selected, state, 0, null);
+   }
+ 
+   /**
+    * Create an input method highlight style, with null style mapping.
+    *
+    * @param selected whether the text range is selected
+    * @param state either {@link #RAW_TEXT} or {@link #CONVERTED_TEXT}
+    * @param variation the style variation
+    * @throws IllegalArgumentException if state is invalid
+    */
+   public InputMethodHighlight(boolean selected, int state, int variation)
+   {
+     this(selected, state, variation, null);
+   }
+ 
+   /**
+    * Create an input method highlight style.
+    *
+    * @param selected whether the text range is selected
+    * @param state either {@link #RAW_TEXT} or {@link #CONVERTED_TEXT}
+    * @param variation the style variation
+    * @param style an unmodifiable map of rendering styles, or null
+    * @throws IllegalArgumentException if state is invalid
+    * @since 1.3
+    */
+   public InputMethodHighlight(boolean selected, int state, int variation,
+                               Map style)
+   {
+     if (state != RAW_TEXT && state != CONVERTED_TEXT)
+       throw new IllegalArgumentException();
+     this.selected = selected;
+     this.state = state;
+     this.variation = variation;
+     this.style = style;
+   }
+ 
+   /**
+    * Return whether the highlighting applies to selected text.
+    *
+    * @return the selection status
+    */
+   public boolean isSelected()
+   {
+     return selected;
+   }
+ 
+   /**
+    * Return the conversion state of the highlighted text.
+    *
+    * @return one of {@link #RAW_TEXT} or {@link #CONVERTED_TEXT}
+    */
+   public int getState()
+   {
+     return state;
+   }
+ 
+   /**
+    * Return the highlighting style variation.
+    *
+    * @return the variation
+    */
+   public int getVariation()
+   {
+     return variation;
+   }
+ 
+   /**
+    * Return the rendering style attributes map, or null if it should be the
+    * default mapping.
+    *
+    * @return the style map
+    * @since 1.3
+    */
+   public Map getStyle()
+   {
+     return style;
+   }
+ } // class InputMethodHighlight
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/im/InputMethodRequests.java gcc-4.1.0/libjava/classpath/java/awt/im/InputMethodRequests.java
*** gcc-4.0.2/libjava/classpath/java/awt/im/InputMethodRequests.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/im/InputMethodRequests.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,155 ----
+ /* InputMethodRequests.java -- handles text insertion via input methods
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.im;
+ 
+ import java.awt.Component;
+ import java.awt.Rectangle;
+ import java.awt.font.TextHitInfo;
+ import java.awt.event.InputMethodListener;
+ import java.text.AttributedCharacterIterator;
+ import java.text.AttributedCharacterIterator.Attribute;
+ 
+ /**
+  * This interface handles requests made by input methods on text editing
+  * components. A component must specify a handler for input methods that
+  * implements this interface, and which supports one of two user interfaces:
+  * <ul><li><em>on-the-spot</em>: composed text is shown in place</li>
+  * <li><em>below-the-spot</em>: composed text is in a separate window,
+  * usually below the main text window, until it is committed into place at
+  * the insertion point, overwriting any selected text</li></ul>
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Component#getInputMethodRequests()
+  * @see InputMethodListener
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface InputMethodRequests
+ {
+   /**
+    * Gets the location of a given offset of the text. This can be used to
+    * position a composition window near the location of where the composed
+    * text will be inserted.
+    *
+    * <p>If the component has composed text (from the most recent
+    * InputMethodEvent), then offset 0 indicates the location of the first
+    * character of this composed text. Otherwise, the offset is ignored, and
+    * the location should be the beginning of the final line of selected
+    * text (in horizontal left-to-right text, like English, this would be the
+    * lower left corner of the selction; in vertical top-to-bottom text, like
+    * Chinese, this would be the top right corner of the selection).
+    *
+    * <p>The location returned is a 0-thickness caret (either horizontal or
+    * vertical, depending on text flow), mapped to absolute screen coordinates.
+    *
+    * @param offset offset within composed text, or null
+    * @return the screen location of the caret at the offset
+    */
+   Rectangle getTextLocation(TextHitInfo offset);
+ 
+   /**
+    * Get the text offset for the given screen coordinate. The offset is
+    * relative to the composed text, and the return is null if it is outside
+    * the range of composed text. For example, this can be used to find
+    * where a mouse click should pop up a text composition window.
+    *
+    * @param x the x screen coordinate
+    * @param y the y screen coordinate
+    * @return a text hit info describing the composed text offset
+    */
+   TextHitInfo getLocationOffset(int x, int y);
+ 
+   /**
+    * Gets the offset where the committed text exists in the text editing
+    * component. This can be used to examine the text surrounding the insert
+    * position.
+    *
+    * @return the offset of the insert position
+    */
+   int getInsertPositionOffset();
+ 
+   /**
+    * Gets an interator which provides access to the text and its attributes,
+    * except for the uncommitted text. The input method may provide a list of
+    * attributes it is interested in; and the iterator need not provide
+    * information on the remaining attributes. If the attribute list is null,
+    * the iterator must list all attributes.
+    *
+    * @param beginIndex the index of the first character in the iteration
+    * @param endIndex the index of the last character in the iteration
+    * @param attributes a list of attributes interested in, or null
+    * @return an iterator over the region of text with its attributes
+    */
+   AttributedCharacterIterator getCommittedText(int beginIndex, int endIndex,
+                                                Attribute[] attributes);
+ 
+   /**
+    * Gets the length of committed text.
+    *
+    * @return the number of committed characters
+    */
+   int getCommittedTextLength();
+ 
+   /**
+    * Gets the latest committed text, and removes it from the component's text
+    * body. This allows an input method to provide an "Undo" command. In
+    * general, this should only be supported immediately after a commit, and
+    * not when other actions intervene; if not supported, simply return null.
+    * The input method may provide a list of attributes it is interested in;
+    * and the iterator need not provide information on the remaining attributes.
+    * If the attribute list is null, the iterator must list all attributes.
+    *
+    * @param attributes a list of attributes interested in, or null
+    * @return the latest committed text, or null
+    */
+   AttributedCharacterIterator cancelLatestCommittedText
+     (Attribute[] attributes);
+ 
+   /**
+    * Gets the currently selected text. One use of this is to implement a
+    * "Reconvert" feature in an input method, which modifies the selection
+    * based on the text in the composition window. The input method may
+    * provide a list of attributes it is interested in; and the iterator need
+    * not provide information on the remaining attributes. If the attribute
+    * list is null, the iterator must list all attributes.
+    *
+    * @param attributes a list of attributes interested in, or null
+    * @return the current selection
+    */
+   AttributedCharacterIterator getSelectedText(Attribute[] attributes);
+ } // interface InputMethodRequests
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/im/InputSubset.java gcc-4.1.0/libjava/classpath/java/awt/im/InputSubset.java
*** gcc-4.0.2/libjava/classpath/java/awt/im/InputSubset.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/im/InputSubset.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,129 ----
+ /* InputSubset.java -- subsets of Unicode important in text input
+    Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.im;
+ 
+ /**
+  * Defines additional Unicode character blocks for use by input methods.
+  * These constants encompass several Unicode blocks, or portions thereof, for
+  * simplification over {@link Character.UnicodeBlock}.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public final class InputSubset extends Character.Subset
+ {
+   /**
+    * Constant for all Latin characters, including the characters in the
+    * BASIC_LATIN, LATIN_1_SUPPLEMENT, LATIN_EXTENDED_A, LATIN_EXTENDED_B
+    * Unicode character blocks.
+    */
+   public static final InputSubset LATIN = new InputSubset("LATIN");
+ 
+   /**
+    * Constant for the digits included in the BASIC_LATIN Unicode character
+    * block.
+    */
+   public static final InputSubset LATIN_DIGITS
+     = new InputSubset("LATIN_DIGITS");
+ 
+   /**
+    * Constant for all Han characters used in writing Traditional Chinese,
+    * including a subset of the CJK unified ideographs as well as Traditional
+    * Chinese Han characters that may be defined as surrogate characters.
+    */
+   public static final InputSubset TRADITIONAL_HANZI
+     = new InputSubset("TRADITIONAL_HANZI");
+ 
+   /**
+    * Constant for all Han characters used in writing Simplified Chinese,
+    * including a subset of the CJK unified ideographs as well as Simplified
+    * Chinese Han characters that may be defined as surrogate characters.
+    */
+   public static final InputSubset SIMPLIFIED_HANZI
+     = new InputSubset("SIMPLIFIED_HANZI");
+ 
+   /**
+    * Constant for all Han characters used in writing Japanese, including a
+    * subset of the CJK unified ideographs as well as Japanese Han characters
+    * that may be defined as surrogate characters.
+    */
+   public static final InputSubset KANJI = new InputSubset("KANJI");
+ 
+   /**
+    * Constant for all Han characters used in writing Korean, including a
+    * subset of the CJK unified ideographs as well as Korean Han characters
+    * that may be defined as surrogate characters.
+    */
+   public static final InputSubset HANJA = new InputSubset("HANJA");
+ 
+   /**
+    * Constant for the halfwidth katakana subset of the Unicode halfwidth and
+    * fullwidth forms character block.
+    */
+   public static final InputSubset HALFWIDTH_KATAKANA
+     = new InputSubset("HALFWIDTH_KATAKANA");
+ 
+   /**
+    * Constant for the fullwidth ASCII variants subset of the Unicode
+    * halfwidth and fullwidth forms character block.
+    *
+    * @since 1.3
+    */
+   public static final InputSubset FULLWIDTH_LATIN
+     = new InputSubset("FULLWIDTH_LATIN");
+ 
+   /**
+    * Constant for the fullwidth digits included in the Unicode halfwidth and
+    * fullwidth forms character block.
+    *
+    * @since 1.3
+    */
+   public static final InputSubset FULLWIDTH_DIGITS
+     = new InputSubset("FULLWIDTH_DIGITS");
+ 
+   /**
+    * Construct a subset.
+    *
+    * @param name the subset name
+    */
+   private InputSubset(String name)
+   {
+     super(name);
+   }
+ } // class InputSubset
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/im/package.html gcc-4.1.0/libjava/classpath/java/awt/im/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/im/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/im/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.im package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.im</title></head>
+ 
+ <body>
+ <p>Support for text input methods.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/im/spi/InputMethod.java gcc-4.1.0/libjava/classpath/java/awt/im/spi/InputMethod.java
*** gcc-4.0.2/libjava/classpath/java/awt/im/spi/InputMethod.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/im/spi/InputMethod.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,244 ----
+ /* InputMethod.java -- defines an interface for complex text input
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.im.spi;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Component;
+ import java.awt.Rectangle;
+ import java.awt.im.InputContext;
+ import java.awt.im.InputMethodRequests;
+ import java.text.AttributedCharacterIterator.Attribute;
+ import java.util.Locale;
+ 
+ /**
+  * This interface supports complex text input, often for situations where
+  * the text is more complex than a keyboard will accomodate. For example,
+  * this can be used for Chinese, Japanese, and Korean, where multiple
+  * keystrokes are necessary to compose text. This could also support things
+  * like phonetic English, or reordering Thai.
+  *
+  * <p>These contexts can be loaded by the input method framework, using
+  * {@link InputContext#selectInputMethod(Locale)}.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public interface InputMethod
+ {
+   /**
+    * Set the input method context, which ties the input method to a client
+    * component. This is called once automatically when creating the input
+    * method.
+    *
+    * @param context the context for this input method
+    * @throws NullPointerException if context is null
+    */
+   void setInputMethodContext(InputMethodContext context);
+ 
+   /**
+    * Sets the input locale. If the input method supports that locale, it
+    * changes its behavior to be consistent with the locale and returns true.
+    * Otherwise, it returns false. This is called by
+    * {@link InputContext#selectInputMethod(Locale)} when the user specifies
+    * a locale, or when the previously selected input method had a locale.
+    *
+    * @param locale the locale to use for input
+    * @return true if the change is successful
+    * @throws NullPointerException if locale is null
+    */
+   boolean setLocale(Locale locale);
+ 
+   /**
+    * Returns the current input locale, or null if none is defined. This is
+    * called by {@link InputContext#getLocale()}, or before switching input
+    * methods.
+    *
+    * @return the current input locale, or null
+    */
+   Locale getLocale();
+ 
+   /**
+    * Sets the allowed Unicode subsets that this input method can use. Null
+    * indicates that all characters are allowed. This is called after creation,
+    * or when switching to this input method, by
+    * {@link InputContext#setCharacterSubsets(Character.Subset[])}.
+    *
+    * @param subsets the accepted subsets for this input method, or null for all
+    */
+   void setCharacterSubsets(Character.Subset[] subsets);
+ 
+   /**
+    * Changes the enabled status of this input method. An enabled input method
+    * accepts incoming events for composition and control purposes, while a
+    * disabled input method ignores events (except for control purposes). This
+    * is called by {@link InputContext#setCompositionEnabled(boolean)} or when
+    * switching from an input method if the previous input method returned
+    * without exception on {@link #isCompositionEnabled()}.
+    *
+    * @param enable whether to enable this input method
+    * @throws UnsupportedOperationException if enabling/disabling is unsupported
+    * @see #isCompositionEnabled()
+    */
+   void setCompositionEnabled(boolean enable);
+ 
+   /**
+    * Find out if this input method is enabled. This is called by
+    * {@link InputContext#isCompositionEnabled()}, or when switching input
+    * methods via {@link InputContext#selectInputMethod(Locale)}.
+    *
+    * @return true if this input method is enabled
+    * @throws UnsupportedOperationException if enabling/disabling is unsupported
+    * @see #setCompositionEnabled(boolean)
+    */
+   boolean isCompositionEnabled();
+ 
+   /**
+    * Starts a reconversion operation. The input method gets its text from the
+    * client, using {@link InputMethodRequests#getSelectedText(Attribute[])}.
+    * Then the composed and committed text produced by the operation is sent
+    * back to the client using a sequence of InputMethodEvents. This is called
+    * by {@link InputContext#reconvert()}.
+    *
+    * @throws UnsupportedOperationException if reconversion is unsupported
+    */
+   void reconvert();
+ 
+   /**
+    * Dispatch an event to the input method. If input method support is enabled,
+    * certain events are dispatched to the input method before the client
+    * component or event listeners. The input method must either consume the
+    * event or pass it on to the component. Instances of InputEvent, including
+    * KeyEvent and MouseEvent, are given to this input method. This method is
+    * called by {@link InputContext#dispatchEvent(AWTEvent)}.
+    *
+    * @param event the event to dispatch
+    * @throws NullPointerException if event is null
+    */
+   void dispatchEvent(AWTEvent event);
+ 
+   /**
+    * Notify this input method of changes in the client window. This is called
+    * when notifications are enabled (see {@link
+    * InputMethodContext#enableClientWindowNotification(InputMethod, boolean)},
+    * if {@link InputContext#removeNotify(Component)} has not been called.
+    * The following situations trigger a notification:<ul>
+    * <li>The client window changes in location, size, visibility,
+    * iconification, or is closed.</li>
+    * <li>When enabling client notification (or on the first activation after
+    * enabling if no client existed at the time).</li>
+    * <li>When activating a new client after <code>removeNotify</code> was
+    * called on a previous client.</li>
+    * </ul>
+    *
+    * @param bounds the client window's current bounds, or null
+    */
+   void notifyClientWindowChange(Rectangle bounds);
+ 
+   /**
+    * Activate this input method for input processing. If the input method
+    * provides its own windows, it should make them open and visible at this
+    * time. This method is called when a client component receives a
+    * FOCUS_GAINED event, or when switching to this input method from another
+    * one. It is only called when the input method is inactive, assuming that
+    * new instances begin in an inactive state.
+    */
+   void activate();
+ 
+   /**
+    * Deactivate this input method, either temporarily or permanently for the
+    * given client. If the input method provides its own windows, it should
+    * only close those related to the current composition (such as a lookup
+    * choice panel), while leaving more persistant windows (like a control
+    * panel) open to avoid screen flicker. Before control is given to another
+    * input method, {@link #hideWindows()} will be called on this instance.
+    * This method is called when a client component receives a
+    * FOCUS_LOST event, when switching to another input method, or before
+    * {@link #removeNotify()} when the client is removed.
+    *
+    * @param isTemporary true if the focus change is temporary
+    */
+   void deactivate(boolean isTemporary);
+ 
+   /**
+    * Close or hide all windows opened by this input method. This is called
+    * before activating a different input method, and before calling
+    * {@link #dispose()} on this instance. It is only called when the input
+    * method is inactive.
+    */
+   void hideWindows();
+ 
+   /**
+    * Notify the input method that a client component has been removed from its
+    * hierarchy, or that input method support has been disabled. This is
+    * called by {@link InputContext#removeNotify(Component)}, and only when the input
+    * method is inactive.
+    */
+   void removeNotify();
+ 
+   /**
+    * End any input composition currently taking place. Depending on the
+    * platform and user preferences, this may commit or delete uncommitted text,
+    * using input method events. This may be called for a variety of reasons,
+    * such as when the user moves the insertion point in the client text outside
+    * the range of the composed text, or when text is saved to file. This is
+    * called by {@link InputContext#endComposition()}, when switching to a
+    * new input method, or by {@link InputContext#selectInputMethod(Locale)}.
+    */
+   void endComposition();
+ 
+   /**
+    * Disposes the input method and release any resources it is using. In
+    * particular, the input method should dispose windows and close files. This
+    * is called by {@link InputContext#dispose()}, when the input method is
+    * inactive; and nothing will be called on this instance afterwards.
+    */
+   void dispose();
+ 
+   /**
+    * Returns a control object from this input method, or null. A control object
+    * provides method to control the behavior of this input method, as well as
+    * query information about it. The object is implementation dependent, so
+    * clients must compare the result against known input method control
+    * object types. This is called by
+    * {@link InputContext#getInputMethodControlObject()}.
+    *
+    * @return the control object, or null
+    */
+   Object getControlObject();
+ } // interface InputMethod
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/im/spi/InputMethodContext.java gcc-4.1.0/libjava/classpath/java/awt/im/spi/InputMethodContext.java
*** gcc-4.0.2/libjava/classpath/java/awt/im/spi/InputMethodContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/im/spi/InputMethodContext.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,125 ----
+ /* InputMethodContext.java -- communication between an input method and client
+    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.im.spi;
+ 
+ import java.awt.HeadlessException;
+ import java.awt.Rectangle;
+ import java.awt.Window;
+ import java.awt.font.TextHitInfo;
+ import java.awt.im.InputMethodRequests;
+ import java.text.AttributedCharacterIterator;
+ 
+ import javax.swing.JFrame;
+ 
+ /**
+  * Provides methods for the communication context between an input method
+  * and the client component. This should be passed to
+  * {@link InputMethod#setInputMethodContext(InputMethodContext)}.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public interface InputMethodContext extends InputMethodRequests
+ {
+   /**
+    * Create an input method event and dispatch it to the client.
+    *
+    * @param id the event type
+    * @param text an iterator over the text to be committed
+    * @param count the count of characters to be committed
+    * @param caret the insertion point of the commit, or null
+    * @param visiblePosition the best location to make visible, or null
+    */
+   void dispatchInputMethodEvent(int id, AttributedCharacterIterator text,
+                                 int count, TextHitInfo caret,
+                                 TextHitInfo visiblePosition);
+ 
+   /**
+    * Creates a top-level window for use by the input method. This window should
+    * float above all document windows and dialogs, not receive focus, and have
+    * lightweight decorations (such as no title, reduced drag regions). But
+    * this behavior may be modified to meet the platform style. The title may
+    * or may not be displayed, depending on the platform.
+    *
+    * <p>If attachToInputContext is true, the new window will share the input
+    * context of the input method, so that events in the new window are
+    * dispatched to the input method. Also, this supresses deactivate and
+    * activate calls to the input method caused by setVisible.
+    *
+    * @param title the window title, if one is displayed; null becomes ""
+    * @param attachToInputContext true for the window to share context with
+    *        the input method
+    * @return the new window for use by the input method
+    * @throws HeadlessException if GraphicsEnvironment.isHeadless is true
+    */
+   Window createInputMethodWindow(String title, boolean attachToInputContext);
+ 
+   /**
+    * Creates a top-level Swing JFrame for use by the input method. This frame
+    * should float above all document windows and dialogs, not receive focus,
+    * and have lightweight decorations (such as no title, reduced drag
+    * regions). But this behavior may be modified to meet the platform style.
+    * The title may or may not be displayed, depending on the platform.
+    *
+    * <p>If attachToInputContext is true, the new window will share the input
+    * context of the input method, so that events in the new window are
+    * dispatched to the input method. Also, this supresses deactivate and
+    * activate calls to the input method caused by setVisible.
+    *
+    * @param title the window title, if one is displayed; null becomes ""
+    * @param attachToInputContext true for the window to share context with
+    *        the input method
+    * @return the new window for use by the input method
+    * @throws HeadlessException if GraphicsEnvironment.isHeadless is true
+    * @since 1.4
+    */
+   JFrame createInputMethodJFrame(String title, boolean attachToInputContext);
+ 
+   /**
+    * Sets whether notification of the client window's location and state should
+    * be enabled for the input method. When enabled, the input method's
+    * {@link InputMethod#notifyClientWindowChange(Rectangle)} method is called.
+    * Notification is automatically disabled when the input method is disposed.
+    *
+    * @param inputMethod the method to change status of
+    * @param enable true to enable notification
+    */
+   void enableClientWindowNotification(InputMethod inputMethod, boolean enable);
+ } // interface InputMethodContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/im/spi/InputMethodDescriptor.java gcc-4.1.0/libjava/classpath/java/awt/im/spi/InputMethodDescriptor.java
*** gcc-4.0.2/libjava/classpath/java/awt/im/spi/InputMethodDescriptor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/im/spi/InputMethodDescriptor.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,114 ----
+ /* InputMethodDescriptor.java -- enables loading and use of an input method
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.im.spi;
+ 
+ import java.awt.AWTException;
+ import java.awt.Image;
+ import java.awt.im.InputContext;
+ import java.util.Locale;
+ 
+ /**
+  * This interface provides information about an InputMethod before it is
+  * loaded.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public interface InputMethodDescriptor
+ {
+   /**
+    * Returns the locales supported by the input method this describes. This
+    * allows the selection of input methods by locale (by language only, or
+    * also by country and variant), via
+    * {@link InputContext#selectInputMethod(Locale)}. The returned list should
+    * ignore pass-through locales, so it is usually a subset of locales for
+    * which {@link InputMethod#setLocale(Locale)} returns true. If
+    * {@link #hasDynamicLocaleList()} returns true, this is called each time
+    * information is needed, allowing dynamic addition or removal of supported
+    * locales.
+    *
+    * @return the list of supported locales
+    * @throws AWTException if the input method is not available
+    */
+   Locale[] getAvailableLocales() throws AWTException;
+ 
+   /**
+    * Test whether the input method this describes has a static or dynamic
+    * locale list. For example, this would return true if the list of supported
+    * locales depends on adapters currently loaded over a network.
+    *
+    * @return true if the locale list is dynamic
+    */
+   boolean hasDynamicLocaleList();
+ 
+   /**
+    * Returns a user visible name of the input locale, displayed in the
+    * specified locale. The inputLocale parameter must be one obtained from
+    * the list in {@link #getAvailableLocales()}, or null for a
+    * locale-independent description of the input method. If a translation to
+    * the desired display language is not available, another language may be
+    * used.
+    *
+    * @param inputLocale the locale of the input method, or null
+    * @param displayLanguage the language of the result
+    * @return the name of the input method when using the given inputLocale
+    */
+   String getInputMethodDisplayName(Locale inputLocale,
+                                    Locale displayLanguage);
+ 
+   /**
+    * Returns a 16x16 icon for the input locale. The inputLocale parameter
+    * must be one obtained from the list in {@link #getAvailableLocales()}, or
+    * null for a locale-independent icon for the input method.
+    *
+    * @param inputLocale the locale of the input method, or null
+    * @return a 16x16 icon for the input method when using the given inputLocale
+    */
+   Image getInputMethodIcon(Locale inputLocale);
+ 
+   /**
+    * Creates a new instance of the input method.
+    *
+    * @return the newly created input method
+    * @throws Exception if anything goes wrong
+    */
+   InputMethod createInputMethod() throws Exception;
+ 
+ } // interface InputMethodDescriptor
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/im/spi/package.html gcc-4.1.0/libjava/classpath/java/awt/im/spi/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/im/spi/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/im/spi/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.im.spi package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.im.spi</title></head>
+ 
+ <body>
+ <p>Interfaces for implementation of text input methods.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/AffineTransformOp.java gcc-4.1.0/libjava/classpath/java/awt/image/AffineTransformOp.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/AffineTransformOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/AffineTransformOp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,375 ----
+ /* AffineTransformOp.java --  This class performs affine 
+    transformation between two images or rasters in 2 dimensions.
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ import java.awt.Graphics2D;
+ import java.awt.Rectangle;
+ import java.awt.RenderingHints;
+ import java.awt.geom.AffineTransform;
+ import java.awt.geom.NoninvertibleTransformException;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ import java.util.Arrays;
+ 
+ /**
+  * This class performs affine transformation between two images or 
+  * rasters in 2 dimensions. 
+  *
+  * @author Olga Rodimina (rodimina@redhat.com) 
+  */
+ public class AffineTransformOp implements BufferedImageOp, RasterOp
+ {
+     public static final int TYPE_NEAREST_NEIGHBOR = 1;
+     
+     public static final int TYPE_BILINEAR = 2;
+     
+     /**
+      * @since 1.5.0
+      */
+     public static final int TYPE_BICUBIC = 3;
+ 
+     private AffineTransform transform;
+     private RenderingHints hints;
+     
+     /**
+      * Construct AffineTransformOp with the given xform and interpolationType.
+      * Interpolation type can be TYPE_BILINEAR, TYPE_BICUBIC or
+      * TYPE_NEAREST_NEIGHBOR.
+      *
+      * @param xform AffineTransform that will applied to the source image 
+      * @param interpolationType type of interpolation used
+      */
+     public AffineTransformOp (AffineTransform xform, int interpolationType)
+     {
+       this.transform = xform;
+       if (xform.getDeterminant() == 0)
+         throw new ImagingOpException(null);
+ 
+       switch (interpolationType)
+       {
+       case TYPE_BILINEAR:
+         hints = new RenderingHints (RenderingHints.KEY_INTERPOLATION, 
+                                     RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+         break;
+       case TYPE_BICUBIC:
+         hints = new RenderingHints (RenderingHints.KEY_INTERPOLATION, 
+ 				    RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+         break;
+       default:
+         hints = new RenderingHints (RenderingHints.KEY_INTERPOLATION,
+                                     RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
+       }
+     }
+ 
+     /**
+      * Construct AffineTransformOp with the given xform and rendering hints.
+      * 
+      * @param xform AffineTransform that will applied to the source image
+      * @param hints rendering hints that will be used during transformation
+      */
+     public AffineTransformOp (AffineTransform xform, RenderingHints hints)
+     {
+       this.transform = xform;
+       this.hints = hints;
+       if (xform.getDeterminant() == 0)
+         throw new ImagingOpException(null);
+     }
+ 
+     /**
+      * Creates empty BufferedImage with the size equal to that of the 
+      * transformed image and correct number of bands. The newly created 
+      * image is created with the specified ColorModel. 
+      * If the ColorModel is equal to null, then image is created 
+      * with the ColorModel of the source image.
+      *
+      * @param src source image
+      * @param destCM color model for the destination image
+      * @return new compatible destination image
+      */
+     public BufferedImage createCompatibleDestImage (BufferedImage src,
+                                                     ColorModel destCM)
+     {
+ 
+       // if destCm is not specified, use color model of the source image
+ 
+       if (destCM == null) 
+         destCM = src.getColorModel ();
+ 
+       return new BufferedImage (destCM, 
+                                 createCompatibleDestRaster (src.getRaster ()),
+                                 src.isAlphaPremultiplied (),
+                                 null);		             
+ 
+     }
+ 
+     /**
+      * Creates empty WritableRaster with the size equal to the transformed 
+      * source raster and correct number of bands 
+      *
+      * @param src source raster
+      * @throws RasterFormatException if resulting width or height of raster is 0
+      * @return new compatible raster
+      */
+     public WritableRaster createCompatibleDestRaster (Raster src)
+     {
+       Rectangle rect = (Rectangle) getBounds2D (src);
+       
+       // throw RasterFormatException if resulting width or height of the
+       // transformed raster is 0
+ 
+       if (rect.getWidth () == 0 || rect.getHeight () == 0) 
+         throw new RasterFormatException("width or height is 0");
+ 
+       return src.createCompatibleWritableRaster ((int) rect.getWidth (), 
+                                                 (int) rect.getHeight ());
+     }
+ 
+     /**
+      * Transforms source image using transform specified at the constructor.
+      * The resulting transformed image is stored in the destination image. 
+      *
+      * @param src source image
+      * @param dst destination image
+      * @return transformed source image
+      */
+     public final BufferedImage filter (BufferedImage src, BufferedImage dst)
+     {
+ 
+       if (dst == src)
+         throw new IllegalArgumentException ("src image cannot be the same as the dst image");
+ 
+       // If the destination image is null, then BufferedImage is 
+       // created with ColorModel of the source image
+ 
+       if (dst == null)
+         dst = createCompatibleDestImage(src, src.getColorModel ());
+ 
+       // FIXME: Must check if color models of src and dst images are the same.
+       // If it is not, then source image should be converted to color model
+       // of the destination image
+ 
+       Graphics2D gr = (Graphics2D) dst.createGraphics ();
+       gr.setRenderingHints (hints);	
+       gr.drawImage (src, transform, null);
+       return dst;
+ 
+     }
+ 
+     /**
+      * Transforms source raster using transform specified at the constructor.
+      * The resulting raster is stored in the destination raster.
+      *
+      * @param src source raster
+      * @param dst destination raster
+      * @return transformed raster
+      */
+     public final WritableRaster filter (Raster src, WritableRaster dst)
+     {
+       if (dst == src)
+         throw new IllegalArgumentException("src image cannot be the same as"
+ 					   + " the dst image");
+ 
+       if (dst == null)
+         dst = createCompatibleDestRaster(src);
+ 
+       if (src.getNumBands() != dst.getNumBands())
+         throw new IllegalArgumentException("src and dst must have same number"
+ 					   + " of bands");
+       
+       double[] dpts = new double[dst.getWidth() * 2];
+       double[] pts = new double[dst.getWidth() * 2];
+       for (int x = 0; x < dst.getWidth(); x++)
+       {
+ 	dpts[2 * x] = x + dst.getMinX();
+ 	dpts[2 * x + 1] = x;
+       }
+       Rectangle srcbounds = src.getBounds();
+       if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
+       {
+ 	for (int y = dst.getMinY(); y < dst.getMinY() + dst.getHeight(); y++)
+ 	  {
+ 	    try {
+ 	      transform.inverseTransform(dpts, 0, pts, 0, dst.getWidth() * 2);
+ 	    } catch (NoninvertibleTransformException e) {
+ 	      // Can't happen since the constructor traps this
+ 	      e.printStackTrace();
+ 	    }
+         
+ 	    for (int x = 0; x < dst.getWidth(); x++)
+ 	      {
+ 		if (!srcbounds.contains(pts[2 * x], pts[2 * x + 1]))
+ 		  continue;
+ 		dst.setDataElements(x + dst.getMinX(), y,
+ 				    src.getDataElements((int)pts[2 * x],
+ 							(int)pts[2 * x + 1],
+ 							null));
+ 	      }
+ 	  }
+       }
+       else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
+       {
+         double[] tmp = new double[4 * src.getNumBands()];
+         for (int y = dst.getMinY(); y < dst.getMinY() + dst.getHeight(); y++)
+         {
+           try {
+             transform.inverseTransform(dpts, 0, pts, 0, dst.getWidth() * 2);
+           } catch (NoninvertibleTransformException e) {
+             // Can't happen since the constructor traps this
+             e.printStackTrace();
+           }
+ 	    
+           for (int x = 0; x < dst.getWidth(); x++)
+           {
+             if (!srcbounds.contains(pts[2 * x], pts[2 * x + 1]))
+               continue;
+             int xx = (int)pts[2 * x];
+             int yy = (int)pts[2 * x + 1];
+             double dx = (pts[2 * x] - xx);
+             double dy = (pts[2 * x + 1] - yy);
+ 		
+             // TODO write this more intelligently
+             if (xx == src.getMinX() + src.getWidth() - 1 ||
+                 yy == src.getMinY() + src.getHeight() - 1)
+             {
+               // bottom or right edge
+               Arrays.fill(tmp, 0);
+               src.getPixel(xx, yy, tmp);
+             }
+             else
+ 	    {
+               // Normal case
+               src.getPixels(xx, yy, 2, 2, tmp);
+ 	      for (int b = 0; b < src.getNumBands(); b++)
+ 		tmp[b] = dx * dy * tmp[b]
+ 		  + (1 - dx) * dy * tmp[b + src.getNumBands()]
+ 		  + dx * (1 - dy) * tmp[b + 2 * src.getNumBands()]
+ 		  + (1 - dx) * (1 - dy) * tmp[b + 3 * src.getNumBands()];
+ 	    }
+             dst.setPixel(x, y, tmp);
+           }
+         }
+       }
+       else
+       {
+         // Bicubic
+         throw new UnsupportedOperationException("not implemented yet");
+       }
+       
+       return dst;  
+     }
+ 
+     /**
+      * Transforms source image using transform specified at the constructor and 
+      * returns bounds of the transformed image.
+      *
+      * @param src image to be transformed
+      * @return bounds of the transformed image.
+      */
+     public final Rectangle2D getBounds2D (BufferedImage src)
+     {
+       return getBounds2D (src.getRaster());
+     }
+    
+     /**
+      * Returns bounds of the transformed raster.
+      *
+      * @param src raster to be transformed
+      * @return bounds of the transformed raster.
+      */
+     public final Rectangle2D getBounds2D (Raster src)
+     {
+       // determine new size for the transformed raster.
+       // Need to calculate transformed coordinates of the lower right
+       // corner of the raster. The upper left corner is always (0,0)
+               
+       double x2 = (double) src.getWidth () + src.getMinX ();
+       double y2 = (double) src.getHeight () + src.getMinY ();
+       Point2D p2 = getPoint2D (new Point2D.Double (x2,y2), null);
+ 
+       Rectangle2D rect = new Rectangle (0, 0, (int) p2.getX (), (int) p2.getY ());
+       return rect.getBounds ();
+     }
+ 
+     /**
+      * Returns interpolation type used during transformations
+      *
+      * @return interpolation type
+      */
+     public final int getInterpolationType ()
+     {
+       if(hints.containsValue (RenderingHints.VALUE_INTERPOLATION_BILINEAR))
+         return TYPE_BILINEAR;
+       else 
+         return TYPE_NEAREST_NEIGHBOR;
+     }
+ 
+     /** 
+      * Returns location of the transformed source point. The resulting point 
+      * is stored in the dstPt if one is specified.
+      *  
+      * @param srcPt point to be transformed
+      * @param dstPt destination point
+      * @return the location of the transformed source point.
+      */
+     public Point2D getPoint2D (Point2D srcPt, Point2D dstPt)
+     {
+       return transform.transform (srcPt, dstPt);
+     }
+ 
+     /**
+      * Returns rendering hints that are used during transformation.
+      *
+      * @return rendering hints
+      */
+     public final RenderingHints getRenderingHints ()
+     {
+       return hints;
+     }
+ 
+     /**
+      * Returns transform used in transformation between source and destination
+      * image.
+      *
+      * @return transform
+      */
+     public final AffineTransform getTransform ()
+     {
+       return transform;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java gcc-4.1.0/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,130 ----
+ /* AreaAveragingScaleFilter.java -- Java class for filtering images
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * This filter should produce images which do not have image artifacts
+  * like broken lines which were originally unbroken.  The cost is of
+  * course speed.  Using bi-linear interpolation here against 4 pixel
+  * points should give the desired results although Sun does not 
+  * specify what the exact algorithm should be.
+  * <br>
+  * FIXME: Currently this filter does nothing and needs to be implemented.
+  *
+  * @author C. Brian Jones (cbj@gnu.org) 
+  */
+ public class AreaAveragingScaleFilter extends ReplicateScaleFilter
+ {
+     /**
+      * Construct an instance of <code>AreaAveragingScaleFilter</code> which
+      * should be used in conjunction with a <code>FilteredImageSource</code>
+      * object.
+      * 
+      * @param width the width of the destination image
+      * @param height the height of the destination image
+      */
+     public AreaAveragingScaleFilter(int width, int height) {
+ 	super(width, height);
+     }
+ 
+     /**
+      * The <code>ImageProducer</code> should call this method with a
+      * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
+      * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
+      * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code> from the 
+      * <code>ImageConsumer</code> interface.
+      * <br>
+      * FIXME - more than likely Sun's implementation desires 
+      * <code>TOPDOWNLEFTRIGHT</code> order and this method is overloaded here
+      * in order to assure that mask is part of the hints added to
+      * the consumer.
+      * 
+      * @param flags a bit mask of hints
+      * @see ImageConsumer
+      */
+     public void setHints(int flags)
+     {
+       if (consumer != null)
+ 	consumer.setHints(flags);
+     }
+ 
+     /**
+      * This function delivers a rectangle of pixels where any
+      * pixel(m,n) is stored in the array as a <code>byte</code> at
+      * index (n * scansize + m + offset).  
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+ 	   ColorModel model, byte[] pixels, int offset, int scansize)
+     {
+       if (consumer != null)
+ 	consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
+     }
+ 
+     /**
+      * This function delivers a rectangle of pixels where any
+      * pixel(m,n) is stored in the array as an <code>int</code> at
+      * index (n * scansize + m + offset).  
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+            ColorModel model, int[] pixels, int offset, int scansize)
+     {
+       if (consumer != null)
+ 	consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
+     }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/BandCombineOp.java gcc-4.1.0/libjava/classpath/java/awt/image/BandCombineOp.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/BandCombineOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/BandCombineOp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,168 ----
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ import java.awt.Point;
+ import java.awt.RenderingHints;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * Filter Raster pixels by applying a matrix.
+  * 
+  * BandCombineOp applies a matrix to each pixel to produce new pixel values.
+  * The width of the matrix must be the same or one more than the number of
+  * bands in the source Raster.  If one more, the pixels in the source are
+  * assumed to contain an implicit 1.0 at the end.
+  * 
+  * The rows of the matrix are multiplied by the pixel to produce the values
+  * for the destination.  Therefore the destination Raster must contain the
+  * same number of bands as the number of rows in the filter matrix.
+  * 
+  * @author Jerry Quinn (jlquinn@optonline.net)
+  */
+ public class BandCombineOp implements RasterOp
+ {
+   private RenderingHints hints;
+   private float[][] matrix;
+   
+   /**
+    * Construct a BandCombineOp.
+    * 
+    * @param matrix The matrix to filter pixels with.
+    * @param hints Rendering hints to apply.  Ignored.
+    */
+   public BandCombineOp(float[][] matrix, RenderingHints hints)
+   {
+     this.matrix = matrix;
+     this.hints = hints;
+   }
+ 
+   /**
+    * Filter Raster pixels through a matrix.
+    * 
+    * Applies the Op matrix to source pixes to produce dest pixels.  Each row
+    * of the matrix is multiplied by the src pixel components to produce the
+    * dest pixel.  If matrix is one more than the number of bands in the src,
+    * the last element is implicitly multiplied by 1, i.e. added to the sum
+    * for that dest component.
+    * 
+    * If dest is null, a suitable Raster is created.  This implementation uses
+    * createCompatibleDestRaster.  
+    * 
+    * @param src The source Raster.
+    * @param dest  The destination Raster, or null.
+    * @returns The destination Raster or an allocated Raster.
+    * @see java.awt.image.RasterOp#filter(java.awt.image.Raster,
+    *java.awt.image.WritableRaster)
+    */
+   public WritableRaster filter(Raster src, WritableRaster dest) {
+     if (dest == null)
+       dest = createCompatibleDestRaster(src);
+     
+     // Filter the pixels
+     float[] spix = new float[matrix[0].length];
+     float[] dpix = new float[matrix.length];
+     for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
+       for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
+       {
+         // In case matrix rows have implicit translation
+         spix[spix.length - 1] = 1.0f;
+         src.getPixel(x, y, spix);
+         for (int i = 0; i < matrix.length; i++)
+         {
+           dpix[i] = 0;
+           for (int j = 0; j < matrix[0].length; j++)
+             dpix[i] += spix[j] * matrix[i][j];
+         }
+         dest.setPixel(x, y, dpix);
+       }
+ 
+     return dest;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
+    */
+   public Rectangle2D getBounds2D(Raster src)
+   {
+     return src.getBounds();
+   }
+ 
+   /**
+    * Creates a new WritableRaster that can be used as the destination for this
+    * Op.  This implementation creates a Banded Raster with data type FLOAT.
+    * @see
+    *java.awt.image.RasterOp#createCompatibleDestRaster(java.awt.image.Raster) 
+    */
+   public WritableRaster createCompatibleDestRaster(Raster src)
+   {
+     return Raster.createBandedRaster(DataBuffer.TYPE_FLOAT, src.getWidth(),
+         src.getHeight(), matrix.length,
+         new Point(src.getMinX(), src.getMinY()));
+   }
+ 
+   /** Return corresponding destination point for source point.
+    * 
+    * LookupOp will return the value of src unchanged.
+    * @param src The source point.
+    * @param dst The destination point.
+    * @see java.awt.image.RasterOp#getPoint2D(java.awt.geom.Point2D,
+    *java.awt.geom.Point2D) 
+    */
+   public Point2D getPoint2D(Point2D src, Point2D dst)
+   {
+     if (dst == null) return (Point2D)src.clone();
+     dst.setLocation(src);
+     return dst;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#getRenderingHints()
+    */
+   public RenderingHints getRenderingHints()
+   {
+     return hints;
+   }
+   
+   /** Return the matrix for this Op. */
+   public float[][] getMatrix()
+   {
+     return matrix;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/BandedSampleModel.java gcc-4.1.0/libjava/classpath/java/awt/image/BandedSampleModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/BandedSampleModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/BandedSampleModel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,548 ----
+ /* Copyright (C) 2004, 2005, Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ /**
+  * MultiPixelPackedSampleModel provides a single band model that supports
+  * multiple pixels in a single unit.  Pixels have 2^n bits and 2^k pixels fit
+  * per data element.
+  *
+  * @author Jerry Quinn (jlquinn@optonline.net)
+  */
+ public final class BandedSampleModel extends ComponentSampleModel
+ {
+   private int[] bitMasks;
+   private int[] bitOffsets;
+   private int[] sampleSize;
+   private int dataBitOffset;
+   private int elemBits;
+   private int numberOfBits;
+   private int numElems;
+ 
+   private static int[] createBankArray(int size) 
+   {
+     int[] result = new int[size];
+     for (int i = 0; i < size; i++)
+       result[i] = i;
+     return result;
+   }
+ 
+   public BandedSampleModel(int dataType, int w, int h, int numBands)
+   {
+     this(dataType, w, h, w, createBankArray(numBands), new int[numBands]);
+   }
+ 
+   public BandedSampleModel(int dataType, int w, int h, int scanlineStride,
+ 			   int[] bankIndices, int[] bandOffsets)
+   {
+     super(dataType, w, h, 1, scanlineStride, bankIndices, bandOffsets);
+   }
+ 
+   public SampleModel createCompatibleSampleModel(int w, int h)
+   {
+     // NOTE: blackdown 1.4.1 sets all offsets to 0.  Sun's 1.4.2 docs
+     // disagree.
+ 
+     // Compress offsets so minimum is 0, others w*scanlineStride
+     int[] newoffsets = new int[bandOffsets.length];
+     int[] order = new int[bandOffsets.length];
+     for (int i=0; i < bandOffsets.length; i++)
+       order[i] = i;
+     // FIXME: This is N^2, but not a big issue, unless there's a lot of
+     // bands...
+     for (int i=0; i < bandOffsets.length; i++)
+       for (int j=i+1; j < bandOffsets.length; i++)
+ 	if (bankIndices[order[i]] > bankIndices[order[j]]
+ 	    || (bankIndices[order[i]] == bankIndices[order[j]]
+ 		&& bandOffsets[order[i]] > bandOffsets[order[j]]))
+ 	  {
+ 	    int t = order[i]; order[i] = order[j]; order[j] = t;
+ 	  }
+     int bank = 0;
+     int offset = 0;
+     for (int i=0; i < bandOffsets.length; i++)
+       {
+ 	if (bankIndices[order[i]] != bank)
+ 	  {
+ 	    bank = bankIndices[order[i]];
+ 	    offset = 0;
+ 	  }
+ 	newoffsets[order[i]] = offset;
+ 	offset += w * scanlineStride;
+       }
+     
+     return new BandedSampleModel(dataType, w, h, scanlineStride, bankIndices, newoffsets);
+   }
+ 
+ 
+   public SampleModel createSubsetSampleModel(int[] bands)
+   {
+     if (bands.length > bankIndices.length)
+       throw new
+ 	RasterFormatException("BandedSampleModel createSubsetSampleModel too"
+ 			      +" many bands");
+     int[] newoff = new int[bands.length];
+     int[] newbanks = new int[bands.length];
+     for (int i=0; i < bands.length; i++)
+       {
+ 	int b = bands[i];
+ 	newoff[i] = bandOffsets[b];
+ 	newbanks[i] = bankIndices[b];
+       }
+ 
+     return new BandedSampleModel(dataType, width, height, scanlineStride,
+ 				 newbanks, newoff);
+   }
+ 
+   /**
+    * Extract all samples of one pixel and return in an array of transfer type.
+    *
+    * Extracts the pixel at x, y from data and stores samples into the array
+    * obj.  If obj is null, a new array of getTransferType() is created.
+    *
+    * @param x The x-coordinate of the pixel rectangle to store in <code>obj</code>.
+    * @param y The y-coordinate of the pixel rectangle to store in <code>obj</code>.
+    * @param obj The primitive array to store the pixels into or null to force creation.
+    * @param data The DataBuffer that is the source of the pixel data.
+    * @return The primitive array containing the pixel data.
+    * @see java.awt.image.SampleModel#getDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)
+    */
+   public Object getDataElements(int x, int y, Object obj,
+ 				DataBuffer data)
+   {
+     int pixel = getSample(x, y, 0, data);
+     switch (getTransferType())
+     {
+     case DataBuffer.TYPE_BYTE:
+       {
+ 	byte[] b = (byte[])obj;
+ 	if (b == null) b = new byte[numBands];
+ 	for (int i=0; i < numBands; i++)
+ 	  b[i] = (byte)getSample(x, y, i, data);
+ 	return b;
+       }
+     case DataBuffer.TYPE_SHORT:
+     case DataBuffer.TYPE_USHORT:
+       {
+ 	short[] b = (short[])obj;
+ 	if (b == null) b = new short[numBands];
+ 	for (int i=0; i < numBands; i++)
+ 	  b[i] = (short)getSample(x, y, i, data);
+ 	return b;
+       }
+     case DataBuffer.TYPE_INT:
+       {
+ 	int[] b = (int[])obj;
+ 	if (b == null) b = new int[numBands];
+ 	for (int i=0; i < numBands; i++)
+ 	  b[i] = getSample(x, y, i, data);
+ 	return b;
+       }
+     case DataBuffer.TYPE_FLOAT:
+       {
+ 	float[] b = (float[])obj;
+ 	if (b == null) b = new float[numBands];
+ 	for (int i=0; i < numBands; i++)
+ 	  b[i] = getSampleFloat(x, y, i, data);
+ 	return b;
+       }
+     case DataBuffer.TYPE_DOUBLE:
+       {
+ 	double[] b = (double[])obj;
+ 	if (b == null) b = new double[numBands];
+ 	for (int i=0; i < numBands; i++)
+ 	  b[i] = getSample(x, y, i, data);
+ 	return b;
+       }
+ 
+     default:
+       // Seems like the only sensible thing to do.
+       throw new ClassCastException();
+     }
+   }
+ 
+   public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     if (iArray == null) iArray = new int[numBands];
+     for (int i=0; i < numBands; i++)
+       iArray[i] = getSample(x, y, i, data);
+ 	
+     return iArray;
+   }
+ 
+   /**
+    * Copy pixels from a region into an array.
+    *
+    * Copies the samples of the pixels in the rectangle starting at x, y that
+    * is w pixels wide and h scanlines high.  When there is more than one band,
+    * the samples stored in order before the next pixel.  This ordering isn't
+    * well specified in Sun's docs as of 1.4.2.
+    *
+    * If iArray is null, a new array is allocated, filled, and returned.
+    *
+    * @param x The x-coordinate of the pixel rectangle to store in
+    * <code>iArray</code>.
+    * @param y The y-coordinate of the pixel rectangle to store in
+    * <code>iArray</code>.
+    * @param w The width in pixels of the rectangle.
+    * @param h The height in pixels of the rectangle.
+    * @param iArray The int array to store the pixels into or null to force
+    * creation.
+    * @param data The DataBuffer that is the source of the pixel data.
+    * @return The primitive array containing the pixel data.
+    */
+   public int[] getPixels(int x, int y, int w, int h, int[] iArray,
+ 			 DataBuffer data)
+   {
+     if (iArray == null) iArray = new int[w*h*numBands];
+     int outOffset = 0;
+     int maxX = x + w;
+     int maxY = y + h;
+     for (int yy = x; yy < maxY; yy++)
+       {
+ 	for (int xx = x; xx < maxX; xx++)
+ 	  {
+ 	    for (int b = 0; b < numBands; b++)
+ 	      {
+ 		int offset = bandOffsets[b] + yy * scanlineStride + xx;
+ 		iArray[outOffset++] =
+ 		  data.getElem(bankIndices[b], offset);
+ 	      }
+ 	  }
+       }
+     return iArray;	
+   }
+ 
+   public int getSample(int x, int y, int b, DataBuffer data)
+   {
+     int offset = bandOffsets[b] + y * scanlineStride + x;
+     return data.getElem(bankIndices[b], offset);
+   }
+   
+   public float getSampleFloat(int x, int y, int b, DataBuffer data)
+   {
+     int offset = bandOffsets[b] + y * scanlineStride + x;
+     return data.getElemFloat(bankIndices[b], offset);
+   }
+   
+   public double getSampleDouble(int x, int y, int b, DataBuffer data)
+   {
+     int offset = bandOffsets[b] + y * scanlineStride + x;
+     return data.getElemDouble(bankIndices[b], offset);
+   }
+   
+   /**
+    * Copy one band's samples from a region into an array.
+    *
+    * Copies from one band the samples of the pixels in the rectangle starting
+    * at x, y that is w pixels wide and h scanlines high.
+    *
+    * If iArray is null, a new array is allocated, filled, and returned.
+    *
+    * @param x The x-coordinate of the pixel rectangle to store in
+    * <code>iArray</code>.
+    * @param y The y-coordinate of the pixel rectangle to store in
+    * <code>iArray</code>.
+    * @param w The width in pixels of the rectangle.
+    * @param h The height in pixels of the rectangle.
+    * @param b The band to retrieve.
+    * @param iArray The int array to store the pixels into or null to force
+    * creation.
+    * @param data The DataBuffer that is the source of the pixel data.
+    * @return The primitive array containing the pixel data.
+    */
+   public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray,
+ 			  DataBuffer data)
+   {
+     if (iArray == null) iArray = new int[w*h];
+     int outOffset = 0;
+     int maxX = x + w;
+     int maxY = y + h;
+     for (int yy = y; yy < maxY; yy++)
+       {
+ 	for (int xx = x; xx < maxX; xx++)
+ 	  {
+ 	    int offset = bandOffsets[b] + yy * scanlineStride + xx;
+ 	    iArray[outOffset++] =
+ 	      data.getElem(bankIndices[b], offset);
+ 	  }
+       }
+     return iArray;	
+   }
+ 
+ 
+   /**
+    * Set the pixel at x, y to the value in the first element of the primitive
+    * array obj.
+    *
+    * @param x The x-coordinate of the data elements in <code>obj</code>.
+    * @param y The y-coordinate of the data elements in <code>obj</code>.
+    * @param obj The primitive array containing the data elements to set.
+    * @param data The DataBuffer to store the data elements into.
+    * @see java.awt.image.SampleModel#setDataElements(int, int, int, int, java.lang.Object, java.awt.image.DataBuffer)
+    */
+   public void setDataElements(int x, int y, Object obj, DataBuffer data)
+   {
+     int transferType = getTransferType();
+     if (getTransferType() != data.getDataType())
+       {
+ 	throw new IllegalArgumentException("transfer type ("+
+ 					   getTransferType()+"), "+
+ 					   "does not match data "+
+ 					   "buffer type (" +
+ 					   data.getDataType() +
+ 					   ").");
+       }
+ 
+     int offset = y * scanlineStride + x;
+     
+     try
+       {
+ 	switch (transferType)
+ 	  {
+ 	  case DataBuffer.TYPE_BYTE:
+ 	    {
+ 	      DataBufferByte out = (DataBufferByte) data;
+ 	      byte[] in = (byte[]) obj;
+ 	      for (int i=0; i < numBands; i++)
+ 		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
+ 	      return;
+ 	    }
+ 	  case DataBuffer.TYPE_SHORT:
+ 	    {
+ 	      DataBufferShort out = (DataBufferShort) data;
+ 	      short[] in = (short[]) obj;
+ 	      for (int i=0; i < numBands; i++)
+ 		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
+ 	      return;
+ 	    }
+ 	  case DataBuffer.TYPE_USHORT:
+ 	    {
+ 	      DataBufferUShort out = (DataBufferUShort) data;
+ 	      short[] in = (short[]) obj;
+ 	      for (int i=0; i < numBands; i++)
+ 		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
+ 	      return;
+ 	    }
+ 	  case DataBuffer.TYPE_INT:
+ 	    {
+ 	      DataBufferInt out = (DataBufferInt) data;
+ 	      int[] in = (int[]) obj;
+ 	      for (int i=0; i < numBands; i++)
+ 		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
+ 	      return;
+ 	    }
+ 	  case DataBuffer.TYPE_FLOAT:
+ 	    {
+ 	      DataBufferFloat out = (DataBufferFloat) data;
+ 	      float[] in = (float[]) obj;
+ 	      for (int i=0; i < numBands; i++)
+ 		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
+ 	      return;
+ 	    }
+ 	  case DataBuffer.TYPE_DOUBLE:
+ 	    {
+ 	      DataBufferDouble out = (DataBufferDouble) data;
+ 	      double[] in = (double[]) obj;
+ 	      for (int i=0; i < numBands; i++)
+ 		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
+ 	      return;
+ 	    }
+ 	  default:
+ 	    throw new ClassCastException("Unsupported data type");
+ 	  }
+       }
+     catch (ArrayIndexOutOfBoundsException aioobe)
+       {
+ 	String msg = "While writing data elements" +
+ 	  ", x="+x+", y="+y+
+ 	  ", width="+width+", height="+height+
+ 	  ", scanlineStride="+scanlineStride+
+ 	  ", offset="+offset+
+ 	  ", data.getSize()="+data.getSize()+
+ 	  ", data.getOffset()="+data.getOffset()+
+ 	  ": " +
+ 	  aioobe;
+ 	throw new ArrayIndexOutOfBoundsException(msg);
+       }
+     }
+ 
+   public void setPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     for (int b=0; b < numBands; b++)
+       data.setElem(bankIndices[b], bandOffsets[b] + y * scanlineStride + x,
+ 		   iArray[b]);
+   }
+ 
+   public void setPixels(int x, int y, int w, int h, int[] iArray,
+ 			DataBuffer data)
+   {
+     int inOffset = 0;
+     for (int hh = 0; hh < h; hh++)
+       {
+ 	for (int ww = 0; ww < w; ww++)
+ 	  {
+ 	    int offset = y * scanlineStride + (x + ww);
+ 	    for (int b=0; b < numBands; b++)
+ 	      data.setElem(bankIndices[b], bandOffsets[b] + offset,
+ 			   iArray[inOffset++]);
+ 	  }
+ 	y++;
+       }
+   }
+ 
+   public void setSample(int x, int y, int b, int s, DataBuffer data)
+   {
+     data.setElem(bankIndices[b], bandOffsets[b] + y * scanlineStride + x, s);
+   }
+   
+   public void setSample(int x, int y, int b, float s, DataBuffer data)
+   {
+     data.setElemFloat(bankIndices[b], bandOffsets[b] + y * scanlineStride + x, s);
+   }
+   
+   public void setSample(int x, int y, int b, double s, DataBuffer data)
+   {
+     data.setElemDouble(bankIndices[b], bandOffsets[b] + y * scanlineStride + x, s);
+   }
+   
+   public void setSamples(int x, int y, int w, int h, int b, int[] iArray,
+ 			 DataBuffer data)
+   {
+     int inOffset = 0;
+ 
+     switch (getTransferType())
+       {
+       case DataBuffer.TYPE_BYTE:
+ 	{
+ 	  DataBufferByte out = (DataBufferByte) data;
+ 	  byte[] bank = out.getData(bankIndices[b]);
+ 	  for (int hh = 0; hh < h; hh++)
+ 	    {
+ 	      for (int ww = 0; ww < w; ww++)
+ 		{
+ 		  int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
+ 		  bank[offset] = (byte)iArray[inOffset++];
+ 		}
+ 	      y++;
+ 	    }
+ 	  return;
+ 	}
+       case DataBuffer.TYPE_SHORT:
+ 	{
+ 	  DataBufferShort out = (DataBufferShort) data;
+ 	  short[] bank = out.getData(bankIndices[b]);
+ 	  for (int hh = 0; hh < h; hh++)
+ 	    {
+ 	      for (int ww = 0; ww < w; ww++)
+ 		{
+ 		  int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
+ 		  bank[offset] = (short)iArray[inOffset++];
+ 		}
+ 	      y++;
+ 	    }
+ 	  return;
+ 	}
+       case DataBuffer.TYPE_USHORT:
+ 	{
+ 	  DataBufferShort out = (DataBufferShort) data;
+ 	  short[] bank = out.getData(bankIndices[b]);
+ 	  for (int hh = 0; hh < h; hh++)
+ 	    {
+ 	      for (int ww = 0; ww < w; ww++)
+ 		{
+ 		  int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
+ 		  bank[offset] = (short)iArray[inOffset++];
+ 		}
+ 	      y++;
+ 	    }
+ 	  return;
+ 	}
+       case DataBuffer.TYPE_INT:
+ 	{
+ 	  DataBufferInt out = (DataBufferInt) data;
+ 	  int[] bank = out.getData(bankIndices[b]);
+ 	  for (int hh = 0; hh < h; hh++)
+ 	    {
+ 	      for (int ww = 0; ww < w; ww++)
+ 		{
+ 		  int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
+ 		  bank[offset] = iArray[inOffset++];
+ 		}
+ 	      y++;
+ 	    }
+ 	  return;
+ 	}
+       case DataBuffer.TYPE_FLOAT:
+       case DataBuffer.TYPE_DOUBLE:
+ 	break;
+       default:
+ 	throw new ClassCastException("Unsupported data type");
+       }
+ 
+     // Default implementation probably slower for float and double
+     for (int hh = 0; hh < h; hh++)
+       {
+ 	for (int ww = 0; ww < w; ww++)
+ 	  {
+ 	    int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
+ 	    data.setElem(bankIndices[b], offset, iArray[inOffset++]);
+ 	  }
+ 	y++;
+       }
+   }
+ 
+   /**
+    * Creates a String with some information about this SampleModel.
+    * @return A String describing this SampleModel.
+    * @see java.lang.Object#toString()
+    */
+   public String toString()
+   {
+     StringBuffer result = new StringBuffer();
+     result.append(getClass().getName());
+     result.append("[");
+     result.append("scanlineStride=").append(scanlineStride);
+     for(int i=0; i < bitMasks.length; i+=1)
+     {
+       result.append(", mask[").append(i).append("]=0x").append(Integer.toHexString(bitMasks[i]));
+     }
+     
+     result.append("]");
+     return result.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/BufferStrategy.java gcc-4.1.0/libjava/classpath/java/awt/image/BufferStrategy.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/BufferStrategy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/BufferStrategy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,124 ----
+ /* BufferStrategy.java -- describes image buffering resources
+    Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.BufferCapabilities;
+ import java.awt.Graphics;
+ 
+ /**
+  * This class describes a strategy for managing image buffering
+  * resources on a Canvas or Window.  A given buffer strategy may make
+  * use of hardware acceleration or take advantage of features of the
+  * native graphics system.  Examples of buffering strategies are
+  * double or triple buffering using either flipping or blitting.  For
+  * the details of these algorithms see BufferCapabilities.
+  *
+  * To use a buffer strategy, you retrieve it from either the current
+  * GraphicsConfiguration or from the Component on which you'd like to
+  * draw.  Then you can query the strategy's capabilities to make sure
+  * they're suitable.
+  *
+  * If the strategy's capabilities are suitable, you can obtain a
+  * graphics object and use it to draw with this strategy.  Drawing
+  * with a buffer strategy requires extra care, however.  You'll need
+  * to manually cause the next buffer to be shown on the output device.
+  * And since buffer strategies are usually implemented with a
+  * VolatileImage, you must frequently check that the contents of the
+  * buffer are valid and that the buffer still exists.
+  *
+  * A buffer strategy is usually implemented using a VolatileImage.
+  *
+  * @see VolatileImage
+  * @since 1.4
+  */
+ public abstract class BufferStrategy
+ {
+   /**
+    * Creates a new buffer strategy.
+    */
+   public BufferStrategy()
+   {
+   }
+ 
+   /**
+    * Retrieves the capabilities of this buffer strategy.
+    *
+    * @return this buffer strategy's capabilities
+    */
+   public abstract BufferCapabilities getCapabilities();
+ 
+   /**
+    * Retrieves a graphics object that can be used to draw using this
+    * buffer strategy.  This method may not be synchronized so be
+    * careful when calling it from multiple threads.  You also must
+    * manually dispose of this graphics object.
+    *
+    * @return a graphics object that can be used to draw using this
+    * buffer strategy
+    */
+   public abstract Graphics getDrawGraphics();
+ 
+   /**
+    * Returns whether or not the buffer's resources have been reclaimed
+    * by the native graphics system.  If the buffer resources have been
+    * lost then you'll need to obtain new resources before drawing
+    * again.  For details, see the documentation for VolatileImage.
+    *
+    * @return true if the contents were lost, false otherwise
+    */
+   public abstract boolean contentsLost();
+ 
+   /**
+    * Returns whether or not the buffer's resources were re-created and
+    * cleared to the default background color.  If the buffer's
+    * resources have recently been re-created and initialized then the
+    * buffer's image may need to be re-rendered.  For details, see the
+    * documentation for VolatileImage.
+    *
+    * @return true if the contents were restored, false otherwise
+    */
+   public abstract boolean contentsRestored();
+ 
+   /**
+    * Applies this buffer strategy.  In other words, this method brings
+    * the contents of the back or intermediate buffers to the front
+    * buffer.
+    */
+   public abstract void show();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/BufferedImage.java gcc-4.1.0/libjava/classpath/java/awt/image/BufferedImage.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/BufferedImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/BufferedImage.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,703 ----
+ /* BufferedImage.java --
+    Copyright (C) 2000, 2002, 2003, 2004, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import gnu.java.awt.ComponentDataBlitOp;
+ 
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.GraphicsEnvironment;
+ import java.awt.Image;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.Transparency;
+ import java.awt.color.ColorSpace;
+ import java.util.Hashtable;
+ import java.util.Vector;
+ 
+ /**
+  * A buffered image always starts at coordinates (0, 0).
+  *
+  * The buffered image is not subdivided into multiple tiles. Instead,
+  * the image consists of one large tile (0,0) with the width and
+  * height of the image. This tile is always considered to be checked
+  * out.
+  * 
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public class BufferedImage extends Image
+   implements WritableRenderedImage, Transparency
+ {
+   public static final int TYPE_CUSTOM         =  0,
+                           TYPE_INT_RGB        =  1,
+                           TYPE_INT_ARGB       =  2,
+                           TYPE_INT_ARGB_PRE   =  3,
+                           TYPE_INT_BGR        =  4,
+                           TYPE_3BYTE_BGR      =  5,
+                           TYPE_4BYTE_ABGR     =  6,
+                           TYPE_4BYTE_ABGR_PRE =  7,
+                           TYPE_USHORT_565_RGB =  8,
+                           TYPE_USHORT_555_RGB =  9,
+                           TYPE_BYTE_GRAY      = 10,
+                           TYPE_USHORT_GRAY    = 11,
+                           TYPE_BYTE_BINARY    = 12,
+                           TYPE_BYTE_INDEXED   = 13;
+   
+   static final int[] bits3 = { 8, 8, 8 };
+   static final int[] bits4 = { 8, 8, 8 };
+   static final int[] bits1byte = { 8 };
+   static final int[] bits1ushort = { 16 };
+   
+   static final int[] masks_int = { 0x00ff0000,
+ 				   0x0000ff00,
+ 				   0x000000ff,
+ 				   DataBuffer.TYPE_INT };
+   static final int[] masks_565 = { 0xf800,
+ 				   0x07e0,
+ 				   0x001f,
+ 				   DataBuffer.TYPE_USHORT};
+   static final int[] masks_555 = { 0x7c00,
+ 				   0x03e0,
+ 				   0x001f,
+ 				   DataBuffer.TYPE_USHORT};
+ 
+   Vector observers;
+   
+   public BufferedImage(int w, int h, int type)
+   {
+     ColorModel cm = null;
+     
+     boolean alpha = false;
+     boolean premultiplied = false;
+     switch (type)
+       {
+       case TYPE_4BYTE_ABGR_PRE:
+       case TYPE_INT_ARGB_PRE:
+ 	premultiplied = true;
+ 	// fall through
+       case TYPE_INT_ARGB:
+       case TYPE_4BYTE_ABGR:
+ 	alpha = true;
+       }
+ 	
+     ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
+     switch (type)
+       {
+       case TYPE_INT_RGB:
+       case TYPE_INT_ARGB:
+       case TYPE_INT_ARGB_PRE:
+       case TYPE_USHORT_565_RGB:
+       case TYPE_USHORT_555_RGB:
+ 	int[] masks = null;
+ 	switch (type)
+ 	  {
+ 	  case TYPE_INT_RGB:
+ 	  case TYPE_INT_ARGB:
+ 	  case TYPE_INT_ARGB_PRE:
+ 	    masks = masks_int;
+ 	    break;
+ 	  case TYPE_USHORT_565_RGB:
+ 	    masks = masks_565;
+ 	    break;
+ 	  case TYPE_USHORT_555_RGB:
+ 	    masks = masks_555;
+ 	    break;
+ 	  }
+ 	
+ 	cm = new DirectColorModel(cs,
+ 				  32, // 32 bits in an int
+ 				  masks[0], // r
+ 				  masks[1], // g
+ 				  masks[2], // b
+ 				  alpha ? 0xff000000 : 0,
+ 				  premultiplied,
+ 				  masks[3] // data type
+ 				  );
+ 	break;
+ 	
+       case TYPE_INT_BGR:
+ 	String msg =
+ 	  "FIXME: Programmer is confused. Why (and how) does a " +
+ 	  "TYPE_INT_BGR image use ComponentColorModel to store " +
+ 	  "8-bit values? Is data type TYPE_INT or TYPE_BYTE. What " +
+ 	  "is the difference between TYPE_INT_BGR and TYPE_3BYTE_BGR?";
+ 	throw new UnsupportedOperationException(msg);
+ 	
+       case TYPE_3BYTE_BGR:
+       case TYPE_4BYTE_ABGR:
+       case TYPE_4BYTE_ABGR_PRE:
+       case TYPE_BYTE_GRAY:
+       case TYPE_USHORT_GRAY:
+ 	int[] bits = null;
+ 	int dataType = DataBuffer.TYPE_BYTE;
+ 	switch (type) {
+ 	case TYPE_3BYTE_BGR:
+ 	  bits = bits3;
+ 	  break;
+ 	case TYPE_4BYTE_ABGR:
+ 	case TYPE_4BYTE_ABGR_PRE:
+ 	  bits = bits4;
+ 	  break;
+ 	case TYPE_BYTE_GRAY:
+ 	  bits = bits1byte;
+ 	  break;
+ 	case TYPE_USHORT_GRAY:
+ 	  bits = bits1ushort;
+ 	  dataType = DataBuffer.TYPE_USHORT;
+ 	  break;
+ 	}
+ 	cm = new ComponentColorModel(cs, bits, alpha, premultiplied,
+ 				     alpha ?
+ 				     Transparency.TRANSLUCENT:
+ 				     Transparency.OPAQUE,
+ 				     dataType);
+ 	break;
+       case TYPE_BYTE_BINARY:
+ 	byte[] vals = { 0, (byte) 0xff };
+ 	cm = new IndexColorModel(8, 2, vals, vals, vals);
+ 	break;
+       case TYPE_BYTE_INDEXED:
+ 	String msg2 = "type not implemented yet";
+ 	throw new UnsupportedOperationException(msg2);
+ 	// FIXME: build color-cube and create color model
+       }
+     
+     init(cm,
+ 	 cm.createCompatibleWritableRaster(w, h),
+ 	 premultiplied,
+ 	 null, // no properties
+ 	 type
+ 	 );
+   }
+ 
+   public BufferedImage(int w, int h, int type,
+ 		       IndexColorModel indexcolormodel)
+   {
+     if ((type != TYPE_BYTE_BINARY) && (type != TYPE_BYTE_INDEXED))
+       throw new IllegalArgumentException("type must be binary or indexed");
+ 
+     init(indexcolormodel,
+ 	 indexcolormodel.createCompatibleWritableRaster(w, h),
+ 	 false, // not premultiplied (guess)
+ 	 null, // no properties
+ 	 type);
+   }
+ 
+   public BufferedImage(ColorModel colormodel, 
+ 		       WritableRaster writableraster,
+ 		       boolean premultiplied,
+ 		       Hashtable properties)
+   {
+     init(colormodel, writableraster, premultiplied, properties,
+ 	 TYPE_CUSTOM);
+     // TODO: perhaps try to identify type?
+   }
+  
+   WritableRaster raster;
+   ColorModel colorModel;
+   Hashtable properties;
+   boolean isPremultiplied;
+   int type;
+   
+   private void init(ColorModel cm,
+ 		    WritableRaster writableraster,
+ 		    boolean premultiplied,
+ 		    Hashtable properties,
+ 		    int type)
+   {
+     raster = writableraster;
+     colorModel = cm;
+     this.properties = properties;
+     isPremultiplied = premultiplied;
+     this.type = type;
+   }
+     
+   //public void addTileObserver(TileObserver tileobserver) {}
+   
+   public void coerceData(boolean premultiplied)
+   {
+     colorModel = colorModel.coerceData(raster, premultiplied);
+   }
+ 
+   public WritableRaster copyData(WritableRaster dest)
+   {
+     if (dest == null)
+       dest = raster.createCompatibleWritableRaster(getMinX(), getMinY(),
+                                                    getWidth(),getHeight());
+ 
+     int x = dest.getMinX();
+     int y = dest.getMinY();
+     int w = dest.getWidth();
+     int h = dest.getHeight();
+     
+     // create a src child that has the right bounds...
+     WritableRaster src =
+       raster.createWritableChild(x, y, w, h, x, y,
+ 				 null  // same bands
+ 				 );
+     if (src.getSampleModel () instanceof ComponentSampleModel
+         && dest.getSampleModel () instanceof ComponentSampleModel)
+       // Refer to ComponentDataBlitOp for optimized data blitting:
+       ComponentDataBlitOp.INSTANCE.filter(src, dest);
+     else
+       {
+         // slower path
+         int samples[] = src.getPixels (x, y, w, h, (int [])null);
+         dest.setPixels (x, y, w, h, samples);
+       }
+     return dest;
+   }
+ 
+   public Graphics2D createGraphics()
+   {
+     GraphicsEnvironment env;
+     env = GraphicsEnvironment.getLocalGraphicsEnvironment ();
+     return env.createGraphics (this);
+   }
+ 
+   public void flush() {
+   }
+   
+   public WritableRaster getAlphaRaster()
+   {
+     return colorModel.getAlphaRaster(raster);
+   }
+   
+   public ColorModel getColorModel()
+   {
+     return colorModel;
+   }
+   
+   public Raster getData()
+   {
+     return copyData(null);
+     /* TODO: this might be optimized by returning the same
+        raster (not writable) as long as image data doesn't change. */
+   }
+ 
+   public Raster getData(Rectangle rectangle)
+   {
+     WritableRaster dest =
+       raster.createCompatibleWritableRaster(rectangle);
+     return copyData(dest);
+   }
+   
+   public Graphics getGraphics()
+   {
+     return createGraphics();
+   }
+ 
+   public int getHeight()
+   {
+     return raster.getHeight();
+   }
+   
+   public int getHeight(ImageObserver imageobserver)
+   {
+     return getHeight();
+   }
+     
+   public int getMinTileX()
+   {
+     return 0;
+   }
+   
+   public int getMinTileY()
+   {
+     return 0;
+   }
+ 
+   public int getMinX()
+   {
+     return 0; 
+   }
+ 
+   public int getMinY() 
+   {
+     return 0;
+   }
+   
+   public int getNumXTiles()
+   {
+     return 1;
+   }
+ 
+   public int getNumYTiles()
+   {
+ 	return 1;
+   }
+ 
+   public Object getProperty(String string)
+   {
+     if (properties == null)
+       return null;
+     return properties.get(string);
+   }
+ 
+   public Object getProperty(String string, ImageObserver imageobserver)
+   {
+     return getProperty(string);
+   }
+ 
+   
+   public String[] getPropertyNames()
+   {
+     // FIXME: implement
+     return null;
+   }
+ 
+   public int getRGB(int x, int y)
+   {
+     Object rgbElem = raster.getDataElements(x, y,
+ 					    null // create as needed
+ 					    );
+     return colorModel.getRGB(rgbElem);
+   }
+     
+   public int[] getRGB(int startX, int startY, int w, int h,
+ 		      int[] rgbArray,
+ 		      int offset, int scanlineStride)
+   {
+     if (rgbArray == null)
+     {
+       /*
+ 	000000000000000000
+ 	00000[#######-----   [ = start
+ 	-----########-----   ] = end
+ 	-----#######]00000
+ 	000000000000000000  */
+       int size = (h-1)*scanlineStride + w;
+       rgbArray = new int[size];
+     }
+ 	
+     int endX = startX + w;
+     int endY = startY + h;
+     
+     /* *TODO*:
+        Opportunity for optimization by examining color models...
+        
+        Perhaps wrap the rgbArray up in a WritableRaster with packed
+        sRGB color model and perform optimized rendering into the
+        array. */
+ 
+     Object rgbElem = null;
+     for (int y=startY; y<endY; y++)
+       {
+ 	int xoffset = offset;
+ 	for (int x=startX; x<endX; x++)
+ 	  {
+ 	    int rgb;
+ 	    rgbElem = raster.getDataElements(x, y, rgbElem);
+ 	    rgb = colorModel.getRGB(rgbElem);
+ 	    rgbArray[xoffset++] = rgb;
+ 	  }
+ 	offset += scanlineStride;
+       }
+     return rgbArray;
+   }
+ 
+   public WritableRaster getRaster()
+   {
+     return raster;
+   }
+   
+   public SampleModel getSampleModel()
+   {
+     return raster.getSampleModel();
+   }
+     
+   public ImageProducer getSource()
+   {
+     return new ImageProducer() {
+         
+ 	Vector consumers = new Vector();
+ 
+         public void addConsumer(ImageConsumer ic)
+         {
+ 	  if(!consumers.contains(ic))
+ 	    consumers.add(ic);
+         }
+ 
+         public boolean isConsumer(ImageConsumer ic)
+         {
+           return consumers.contains(ic);
+         }
+ 
+         public void removeConsumer(ImageConsumer ic)
+         {
+ 	  consumers.remove(ic);
+         }
+ 
+         public void startProduction(ImageConsumer ic)
+         {
+           int x = 0;
+           int y = 0;
+           int width = getWidth();
+           int height = getHeight();
+           int stride = width;
+           int offset = 0;
+           int[] pixels = getRGB(x, y, 
+                                 width, height, 
+                                 (int[])null, offset, stride);
+           ColorModel model = getColorModel();
+ 
+           consumers.add(ic);
+ 
+ 	  for(int i=0;i<consumers.size();i++)
+             {
+               ImageConsumer c = (ImageConsumer) consumers.elementAt(i);
+               c.setHints(ImageConsumer.SINGLEPASS);
+               c.setDimensions(getWidth(), getHeight());
+               c.setPixels(x, y, width, height, model, pixels, offset, stride);
+               c.imageComplete(ImageConsumer.STATICIMAGEDONE);
+             }
+         }
+ 
+         public void requestTopDownLeftRightResend(ImageConsumer ic)
+         {
+           startProduction(ic);
+         }
+ 
+       };
+   }
+   
+   public Vector getSources()
+   {
+     return null;
+   }
+   
+   public BufferedImage getSubimage(int x, int y, int w, int h)
+   {
+     WritableRaster subRaster = 
+       getRaster().createWritableChild(x, y, w, h, 0, 0, null);
+     
+     return new BufferedImage(getColorModel(),
+ 			     subRaster,
+ 			     isPremultiplied,
+ 			     properties);
+   }
+ 
+   public Raster getTile(int tileX, int tileY)
+   {
+     return getWritableTile(tileX, tileY);
+   }
+     
+   public int getTileGridXOffset()
+   {
+     return 0; // according to javadocs
+   }
+ 
+   public int getTileGridYOffset()
+   {
+     return 0; // according to javadocs
+   }
+ 
+   public int getTileHeight()
+   {
+     return getHeight(); // image is one big tile
+   }
+ 
+   public int getTileWidth()
+   {
+     return getWidth(); // image is one big tile
+   }
+ 
+   public int getType()
+   {
+     return type;
+   }
+ 
+   public int getWidth()
+   {
+     return raster.getWidth();
+   }
+ 
+   public int getWidth(ImageObserver imageobserver)
+   {
+     return getWidth();
+   }
+ 
+   public WritableRaster getWritableTile(int tileX, int tileY)
+   {
+     isTileWritable(tileX, tileY);  // for exception
+     return raster;
+   }
+ 
+   private static final Point[] tileIndices = { new Point() };
+     
+   public Point[] getWritableTileIndices()
+   {
+     return tileIndices;
+   }
+ 
+   public boolean hasTileWriters()
+   {
+     return true;
+   }
+   
+   public boolean isAlphaPremultiplied()
+   {
+     return isPremultiplied;
+   }
+ 
+   public boolean isTileWritable(int tileX, int tileY)
+   {
+     if ((tileX != 0) || (tileY != 0))
+       throw new ArrayIndexOutOfBoundsException("only tile is (0,0)");
+     return true;
+   }
+ 
+   public void releaseWritableTile(int tileX, int tileY)
+   {
+     isTileWritable(tileX, tileY);  // for exception
+   }
+ 
+   //public void removeTileObserver(TileObserver tileobserver) {}
+ 
+   public void setData(Raster src)
+   {
+     int x = src.getMinX();
+     int y = src.getMinY();
+     int w = src.getWidth();
+     int h = src.getHeight();
+     
+     // create a dest child that has the right bounds...
+     WritableRaster dest =
+       raster.createWritableChild(x, y, w, h, x, y,
+ 				 null  // same bands
+ 				 );
+ 
+     if (src.getSampleModel () instanceof ComponentSampleModel
+         && dest.getSampleModel () instanceof ComponentSampleModel)
+ 
+       // Refer to ComponentDataBlitOp for optimized data blitting:
+       ComponentDataBlitOp.INSTANCE.filter(src, dest);
+     else
+       {
+         // slower path
+         int samples[] = src.getPixels (x, y, w, h, (int [])null);
+         dest.setPixels (x, y, w, h, samples);
+       }
+   }
+ 
+   public void setRGB(int x, int y, int argb)
+   {
+     Object rgbElem = colorModel.getDataElements(argb, null);
+     raster.setDataElements(x, y, rgbElem);
+   }
+   
+   public void setRGB(int startX, int startY, int w, int h,
+ 		     int[] argbArray, int offset, int scanlineStride)
+   {
+     int endX = startX + w;
+     int endY = startY + h;
+     
+     Object rgbElem = null;
+     for (int y=startY; y<endY; y++)
+       {
+ 	int xoffset = offset;
+ 	for (int x=startX; x<endX; x++)
+ 	  {
+ 	    int argb = argbArray[xoffset++];
+ 	    rgbElem = colorModel.getDataElements(argb, rgbElem);
+ 	    raster.setDataElements(x, y, rgbElem);
+ 	  }
+ 	offset += scanlineStride;    
+       }
+   }
+     
+   public String toString()
+   {
+     StringBuffer buf;
+ 
+     buf = new StringBuffer(/* estimated length */ 120);
+     buf.append("BufferedImage@");
+     buf.append(Integer.toHexString(hashCode()));
+     buf.append(": type=");
+     buf.append(type);
+     buf.append(' ');
+     buf.append(colorModel);
+     buf.append(' ');
+     buf.append(raster);
+ 
+     return buf.toString();
+   }
+ 
+ 
+   /**
+    * Adds a tile observer. If the observer is already present, it receives
+    * multiple notifications.
+    *
+    * @param to The TileObserver to add.
+    */
+   public void addTileObserver (TileObserver to)
+   {
+     if (observers == null)
+       observers = new Vector ();
+ 	
+     observers.add (to);
+   }
+ 	
+   /**
+    * Removes a tile observer. If the observer was not registered,
+    * nothing happens. If the observer was registered for multiple
+    * notifications, it is now registered for one fewer notification.
+    *
+    * @param to The TileObserver to remove.
+    */
+   public void removeTileObserver (TileObserver to)
+   {
+     if (observers == null)
+       return;
+ 	
+     observers.remove (to);
+   }
+ 
+   /**
+    * Return the transparency type.
+    *
+    * @return One of {@link #OPAQUE}, {@link #BITMASK}, or {@link #TRANSLUCENT}.
+    * @see Transparency#getTransparency()
+    * @since 1.5
+    */
+   public int getTransparency()
+   {
+     return colorModel.getTransparency();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/BufferedImageFilter.java gcc-4.1.0/libjava/classpath/java/awt/image/BufferedImageFilter.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/BufferedImageFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/BufferedImageFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,110 ----
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ import java.awt.Point;
+ 
+ /**
+  * The BufferedImageFilter class wraps BufferedImageOp objects in a Filter.
+  * 
+  * When pixels are pushed through the filter, we create a BufferedImage,
+  * apply the BufferedImageOp, and pass the filtered pixels to the base class.
+  * 
+  * @author jlquinn@optonline.net
+  */
+ public class BufferedImageFilter extends ImageFilter implements Cloneable
+ {
+   private BufferedImageOp op;
+ 
+   /**
+    * 
+    */
+   public BufferedImageFilter(BufferedImageOp op)
+   {
+     super();
+     if (op == null)
+       throw new NullPointerException("BufferedImageFilter null"
+ 				     + " op in constructor");
+     this.op = op;
+   }
+   
+   /**
+    * @return Returns the contained BufferedImageOp.
+    */
+   public BufferedImageOp getBufferedImageOp()
+   {
+     return op;
+   }
+ 
+   // FIXME: Definitely not sure this is the right thing.  I'm not sure how to
+   // create a compatible sample model that incorporates scansize != w.  I
+   // asume off is handled by the db itself.
+   public void setPixels(int x, int y, int w, int h, ColorModel model,
+ 			byte[] pixels, int off, int scansize)
+   {
+     // Create an input BufferedImage
+     DataBufferByte db = new DataBufferByte(pixels, scansize * h + off, off);
+     SampleModel sm = model.createCompatibleSampleModel(scansize, h);
+     WritableRaster wr = new WritableRaster(sm, db, new Point(0, 0));
+     BufferedImage in =
+       new BufferedImage(model, wr, model.isAlphaPremultiplied(), null);
+     BufferedImage out = op.createCompatibleDestImage(in, model);
+     op.filter(in, out);
+     DataBuffer dbout = out.getRaster().getDataBuffer(); 
+     super.setPixels(0, 0, w, h, model, ((DataBufferByte)dbout).getData(), 0,
+ 		    scansize);
+   }
+ 
+   // FIXME: Definitely not sure this is the right thing.  I'm not sure how
+   // to create a compatible sample model that incorporates
+   // scansize != w.  I asume off is handled by the db itself.
+   public void setPixels(int x, int y, int w, int h, ColorModel model,
+ 			int[] pixels, int off, int scansize)
+   {
+     // Create an input BufferedImage
+     DataBufferInt db = new DataBufferInt(pixels, scansize * h + off, off);
+     SampleModel sm = model.createCompatibleSampleModel(scansize, h);
+     WritableRaster wr = new WritableRaster(sm, db, new Point(0, 0));
+     BufferedImage in =
+       new BufferedImage(model, wr, model.isAlphaPremultiplied(), null);
+     BufferedImage out = op.createCompatibleDestImage(in, model);
+     op.filter(in, out);
+     DataBuffer dbout = out.getRaster().getDataBuffer(); 
+     super.setPixels(0, 0, w, h, model, ((DataBufferInt)dbout).getData(), 0,
+ 		    scansize);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/BufferedImageOp.java gcc-4.1.0/libjava/classpath/java/awt/image/BufferedImageOp.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/BufferedImageOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/BufferedImageOp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,55 ----
+ /* BufferedImageOp.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.RenderingHints;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * NEEDS DOCUMENTATION
+  */
+ public interface BufferedImageOp
+ {
+   BufferedImage filter(BufferedImage src, BufferedImage dst);
+   Rectangle2D getBounds2D(BufferedImage src);
+   BufferedImage createCompatibleDestImage(BufferedImage src, ColorModel dstCM);
+   Point2D getPoint2D(Point2D src, Point2D dst);
+   RenderingHints getRenderingHints();
+ } // interface BufferedImageOp
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ByteLookupTable.java gcc-4.1.0/libjava/classpath/java/awt/image/ByteLookupTable.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ByteLookupTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ByteLookupTable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,166 ----
+ /* ByteLookupTable.java -- Java class for a pixel translation table.
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * ByteLookupTable represents translation arrays for pixel values.  It wraps
+  * one or more data arrays for each layer (or component) in an image, such as
+  * Alpha, R, G, and B.  When doing translation, the offset is subtracted from
+  * the pixel values to allow a subset of an array to be used.
+  *
+  * @author Jerry Quinn (jlquinn@optonline.net)
+  * @version 1.0
+  */
+ public class ByteLookupTable extends LookupTable
+ {
+   // Array of translation tables.
+   private byte data[][];
+ 
+   /**
+    * Creates a new <code>ByteLookupTable</code> instance.
+    *
+    * Offset is subtracted from pixel values when looking up in the translation
+    * tables.  If data.length is one, the same table is applied to all pixel
+    * components.
+    * 
+    * @param offset Offset to be subtracted.
+    * @param data Array of lookup tables.
+    * @exception IllegalArgumentException if offset &lt; 0 or data.length &lt; 1.
+    */
+   public ByteLookupTable(int offset, byte[][] data)
+     throws IllegalArgumentException
+   {
+     super(offset, data.length);
+     this.data = data;
+   }
+ 
+   /**
+    * Creates a new <code>ByteLookupTable</code> instance.
+    *
+    * Offset is subtracted from pixel values when looking up in the translation
+    * table.  The same table is applied to all pixel components.
+    * 
+    * @param offset Offset to be subtracted.
+    * @param data Lookup table for all components.
+    * @exception IllegalArgumentException if offset &lt; 0.
+    */
+   public ByteLookupTable(int offset, byte[] data)
+     throws IllegalArgumentException
+   {
+     super(offset, 1);
+     this.data = new byte[][] {data};
+   }
+ 
+   /**
+    * Return the lookup tables.
+    *
+    * @return the tables
+    */
+   public final byte[][] getTable()
+   {
+     return data;
+   }
+ 
+   /**
+    * Return translated values for a pixel.
+    *
+    * For each value in the pixel src, use the value minus offset as an index
+    * in the component array and copy the value there to the output for the
+    * component.  If dest is null, the output is a new array, otherwise the
+    * translated values are written to dest.  Dest can be the same array as
+    * src.
+    *
+    * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
+    * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
+    * translation arrays.
+    *
+    * @param src Component values of a pixel.
+    * @param dst Destination array for values, or null.
+    * @return Translated values for the pixel.
+    */
+   public int[] lookupPixel(int[] src, int[] dst)
+     throws ArrayIndexOutOfBoundsException
+   {
+     if (dst == null)
+       dst = new int[src.length];
+ 
+     if (data.length == 1)
+       for (int i=0; i < src.length; i++)
+ 	dst[i] = data[0][src[i] - offset];
+     else
+       for (int i=0; i < src.length; i++)
+ 	dst[i] = data[i][src[i] - offset];
+       
+     return dst;
+   }
+ 
+   /**
+    * Return translated values for a pixel.
+    *
+    * For each value in the pixel src, use the value minus offset as an index
+    * in the component array and copy the value there to the output for the
+    * component.  If dest is null, the output is a new array, otherwise the
+    * translated values are written to dest.  Dest can be the same array as
+    * src.
+    *
+    * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
+    * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
+    * translation arrays.
+    *
+    * @param src Component values of a pixel.
+    * @param dst Destination array for values, or null.
+    * @return Translated values for the pixel.
+    */
+   public byte[] lookupPixel(byte[] src, byte[] dst)
+     throws ArrayIndexOutOfBoundsException
+   {
+     if (dst == null)
+       dst = new byte[src.length];
+ 
+     if (data.length == 1)
+       for (int i=0; i < src.length; i++)
+ 	dst[i] = data[0][((int)src[i]) - offset];
+     else
+       for (int i=0; i < src.length; i++)
+ 	dst[i] = data[i][((int)src[i]) - offset];
+       
+     return dst;
+ 
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ColorConvertOp.java gcc-4.1.0/libjava/classpath/java/awt/image/ColorConvertOp.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ColorConvertOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ColorConvertOp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,319 ----
+ /* ColorModel.java --
+    Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Graphics2D;
+ import java.awt.RenderingHints;
+ import java.awt.color.ColorSpace;
+ import java.awt.color.ICC_ColorSpace;
+ import java.awt.color.ICC_Profile;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * ColorConvertOp is a filter for converting an image from one colorspace to
+  * another colorspace.  The filter can convert the image through a sequence
+  * of colorspaces or just from source to destination.
+  * 
+  * Color conversion is done on the color components without alpha.  Thus
+  * if a BufferedImage has alpha premultiplied, this is divided out before
+  * color conversion, and premultiplication applied if the destination
+  * requires it.
+  * 
+  * Color rendering and dithering hints may be applied if specified.  This is
+  * likely platform-dependent.
+  * 
+  * @author jlquinn@optonline.net
+  */
+ public class ColorConvertOp implements BufferedImageOp, RasterOp
+ {
+   private ColorSpace srccs;
+   private ColorSpace dstcs;
+   private RenderingHints hints;
+   private ICC_Profile[] profiles;
+   private ColorSpace[] spaces;
+   private boolean rasterValid;
+   
+ 
+   /**
+    * Convert BufferedImage through a ColorSpace.
+    * 
+    * This filter version is only valid for BufferedImages.  The source image
+    * is converted to cspace.  If the destination is not null, it is then
+    * converted to the destination colorspace.  Normally this filter will only
+    * be used with a null destination.
+    * 
+    * @param cspace The target color space.
+    * @param hints Rendering hints to use in conversion, or null.
+    */
+   public ColorConvertOp(ColorSpace cspace, RenderingHints hints)
+   {
+     if (cspace == null)
+       throw new NullPointerException();
+     spaces = new ColorSpace[]{cspace};
+     this.hints = hints;
+     rasterValid = false;
+   }
+   
+   public ColorConvertOp(ColorSpace srcCspace, ColorSpace dstCspace,
+ 			RenderingHints hints)
+   {
+     if (srcCspace == null || dstCspace == null)
+       throw new NullPointerException();
+     spaces = new ColorSpace[]{srcCspace, dstCspace};
+     this.hints = hints;     
+   }
+ 
+   /**
+    * Convert from a source image destination image color space.
+    * 
+    * This constructor builds a ColorConvertOp from an array of ICC_Profiles.
+    * The source image will be converted through the sequence of color spaces
+    * defined by the profiles.  If the sequence of profiles doesn't give a
+    * well-defined conversion, throws IllegalArgumentException.
+    * 
+    * NOTE: Sun's docs don't clearly define what a well-defined conversion is
+    *  - or perhaps someone smarter can come along and sort it out.  
+    * 
+    * For BufferedImages, when the first and last profiles match the
+    * requirements of the source and destination color space respectively, the
+    * corresponding conversion is unnecessary.  TODO: code this up.  I don't
+    * yet understand how you determine this.
+    * 
+    * For Rasters, the first and last profiles must have the same number of
+    * bands as the source and destination Rasters, respectively.  If this is
+    * not the case, or there fewer than 2 profiles, an IllegalArgumentException
+    * will be thrown. 
+    * 
+    * @param profiles
+    * @param hints
+    */
+   public ColorConvertOp(ICC_Profile[] profiles, RenderingHints hints)
+   {
+     if (profiles == null)
+       throw new NullPointerException();
+     this.hints = hints; 
+     this.profiles = profiles;
+     // TODO: Determine if this is well-defined.
+     // Create colorspace array with space for src and dest colorspace
+     spaces = new ColorSpace[profiles.length];
+     for (int i = 0; i < profiles.length; i++)
+       spaces[i] = new ICC_ColorSpace(profiles[i]);
+   }
+   
+   /** Convert from source image color space to destination image color space.
+    * 
+    * Only valid for BufferedImage objects, this Op converts from the source
+    * color space to the destination color space.  The destination can't be
+    * null for this operation.
+    * 
+    * @param hints Rendering hints to use during conversion, or null.
+    */
+   public ColorConvertOp(RenderingHints hints)
+   {
+     this.hints = hints; 
+     srccs = null;
+     dstcs = null;
+     rasterValid = false;
+   }
+   
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#filter(java.awt.image.BufferedImage,
+    java.awt.image.BufferedImage)
+    */
+   public final BufferedImage filter(BufferedImage src, BufferedImage dst)
+   {
+     // TODO: The plan is to create a scanline buffer for intermediate buffers.
+     // For now we just suck it up and create intermediate buffers.
+     
+     if (dst == null && spaces.length == 0)
+       throw new IllegalArgumentException();
+ 
+     // Make sure input isn't premultiplied by alpha
+     if (src.isAlphaPremultiplied())
+     {
+       BufferedImage tmp = createCompatibleDestImage(src, src.getColorModel());
+       copyimage(src, tmp);
+       tmp.coerceData(false);
+       src = tmp;
+     }
+ 
+     ColorModel scm = src.getColorModel();
+     for (int i = 0; i < spaces.length; i++)
+     {
+       ColorModel cm = scm.cloneColorModel(spaces[i]);
+       BufferedImage tmp = createCompatibleDestImage(src, cm);
+       copyimage(src, tmp);
+       src = tmp;
+     }
+ 
+     // Intermediate conversions leave result in src
+     if (dst == null)
+       return src;
+     
+     // Apply final conversion
+     copyimage(src, dst);
+     return dst;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#createCompatibleDestImage(java.awt.image.BufferedImage, java.awt.image.ColorModel)
+    */
+   public BufferedImage createCompatibleDestImage(BufferedImage src,
+ 						 ColorModel dstCM)
+   {
+     // FIXME: set properties to those in src
+     return new BufferedImage(dstCM,
+ 			     src.getRaster().createCompatibleWritableRaster(),
+ 			     src.isPremultiplied,
+ 			     null);
+   }
+   
+   public final ICC_Profile[] getICC_Profiles()
+   {
+     return profiles;
+   }
+ 
+   /** Return the rendering hints for this op. */
+   public final RenderingHints getRenderingHints()
+   {
+     return hints;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#filter(java.awt.image.Raster, java.awt.image.WritableRaster)
+    */
+   public final WritableRaster filter(Raster src, WritableRaster dest)
+   {
+     if (!rasterValid)
+       throw new IllegalArgumentException();
+     
+     // Need to iterate through each color space - there must be at least 2
+     for (int i = 1; i < spaces.length - 1; i++)
+     {
+       // FIXME: this is wrong.  tmp needs to have the same number of bands as
+       // spaces[i] has.
+       WritableRaster tmp = createCompatibleDestRaster(src);
+       copyraster(src, spaces[i - 1], tmp, spaces[i]);
+       src = tmp;
+     }
+     
+     // FIXME: this is wrong.  dst needs to have the same number of bands as
+     // spaces[i] has.
+     if (dest == null)
+       dest = createCompatibleDestRaster(src);
+     copyraster(src, spaces[spaces.length - 2],
+ 	       dest, spaces[spaces.length - 1]);
+     
+     return dest;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#createCompatibleDestRaster(java.awt.image.Raster)
+    */
+   public WritableRaster createCompatibleDestRaster(Raster src)
+   {
+     return src.createCompatibleWritableRaster();
+   }
+ 
+   /** Return corresponding destination point for source point.
+    * 
+    * LookupOp will return the value of src unchanged.
+    * @param src The source point.
+    * @param dst The destination point.
+    * @see java.awt.image.RasterOp#getPoint2D(java.awt.geom.Point2D, java.awt.geom.Point2D)
+    */
+   public final Point2D getPoint2D(Point2D src, Point2D dst)
+   {
+     if (dst == null) return (Point2D)src.clone();
+     dst.setLocation(src);
+     return dst;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#getBounds2D(java.awt.image.BufferedImage)
+    */
+   public final Rectangle2D getBounds2D(BufferedImage src)
+   {
+     return src.getRaster().getBounds();
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
+    */
+   public final Rectangle2D getBounds2D(Raster src)
+   {
+     return src.getBounds();
+   }
+   
+   // According to Sven de Marothy, we need to copy the src into the dest
+   // using Graphics2D, in order to use the rendering hints.
+   private void copyimage(BufferedImage src, BufferedImage dst)
+   {
+     Graphics2D gg = dst.createGraphics();
+     gg.setRenderingHints(hints);
+     gg.drawImage(src, 0, 0, null);
+     gg.dispose();
+   }
+   
+   private void copyraster(Raster src, ColorSpace scs, WritableRaster dst,
+       					  ColorSpace dcs)
+   {
+     float[] sbuf = new float[src.getNumBands()];
+     
+     if (hints.get(RenderingHints.KEY_COLOR_RENDERING) ==
+         RenderingHints.VALUE_COLOR_RENDER_QUALITY)
+     {
+       // use cie for accuracy
+       for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
+         for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
+           dst.setPixel(x, y,
+ 		       dcs.fromCIEXYZ(scs.toCIEXYZ(src.getPixel(x, y, sbuf))));
+     }
+     else
+     {
+       // use rgb - it's probably faster
+       for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
+         for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
+           dst.setPixel(x, y,
+ 		       dcs.fromRGB(scs.toRGB(src.getPixel(x, y, sbuf))));
+     }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ColorModel.java gcc-4.1.0/libjava/classpath/java/awt/image/ColorModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ColorModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ColorModel.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,758 ----
+ /* ColorModel.java --
+    Copyright (C) 1999, 2000, 2002, 2003, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import gnu.java.awt.Buffers;
+ 
+ import java.awt.Point;
+ import java.awt.Transparency;
+ import java.awt.color.ColorSpace;
+ import java.lang.reflect.Constructor;
+ import java.util.Arrays;
+ 
+ /**
+  * A color model operates with colors in several formats:
+  *
+  * <ul>
+  * <li>normalized: component samples are in range [0.0, 1.0].</li>
+  *
+  * <li>color model pixel value: all the color component samples for a
+  * sigle pixel packed/encoded in a way natural for the color
+  * model.</li>
+  *
+  * <li>color model pixel int value: only makes sense if the natural
+  * encoding of a single pixel can fit in a single int value.</li>
+  *
+  * <li>array of transferType containing a single pixel: the pixel is
+  * encoded in the natural way of the color model, taking up as many
+  * array elements as needed.</li>
+  *
+  * <li>sRGB pixel int value: a pixel in sRGB color space, encoded in
+  * default 0xAARRGGBB format, assumed not alpha premultiplied.</li>
+  * 
+  * <li>single [0, 255] scaled int samples from default sRGB color
+  * space. These are always assumed to be alpha non-premultiplied.</li>
+  *
+  * <li>arrays of unnormalized component samples of single pixel: these
+  * samples are scaled and multiplied according to the color model, but
+  * is otherwise not packed or encoded. Each element of the array is one
+  * separate component sample. The color model only operate on the
+  * components from one pixel at a time, but using offsets, allows
+  * manipulation of arrays that contain the components of more than one
+  * pixel.</li>
+  *
+  * </ul>
+  *
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  * @author C. Brian Jones (cbj@gnu.org)
+  */
+ public abstract class ColorModel implements Transparency
+ {
+   protected int pixel_bits;
+   protected int transferType;
+ 
+   int[] bits;
+   ColorSpace cspace;
+   int transparency;
+   boolean hasAlpha;
+   boolean isAlphaPremultiplied;
+     
+   static int[] nArray(int value, int times)
+   {
+     int[] array = new int[times];
+     java.util.Arrays.fill(array, value);
+     return array;
+   }
+ 
+   static byte[] nArray(byte value, int times)
+   {
+     byte[] array = new byte[times];
+     java.util.Arrays.fill(array, value);
+     return array;
+   } 
+ 
+   /**
+    * Constructs the default color model.  The default color model 
+    * can be obtained by calling <code>getRGBdefault</code> of this
+    * class.
+    * @param bits the number of bits wide used for bit size of pixel values
+    */
+   public ColorModel(int bits)
+   {
+     this(bits * 4, // total bits, sRGB, four channels
+ 	 nArray(bits, 4), // bits for each channel
+ 	 ColorSpace.getInstance(ColorSpace.CS_sRGB), // sRGB
+ 	 true, // has alpha
+ 	 false, // not premultiplied
+ 	 TRANSLUCENT,
+ 	 Buffers.smallestAppropriateTransferType(bits * 4));
+   }
+ 
+   /**
+    * Constructs a ColorModel that translates pixel values to
+    * color/alpha components.
+    *
+    * @exception IllegalArgumentException If the length of the bit array is less
+    * than the number of color or alpha components in this ColorModel, or if the
+    * transparency is not a valid value, or if the sum of the number of bits in
+    * bits is less than 1 or if any of the elements in bits is less than 0.
+    */
+   protected ColorModel(int pixel_bits, int[] bits, ColorSpace cspace,
+ 		       boolean hasAlpha, boolean isAlphaPremultiplied,
+ 		       int transparency, int transferType)
+   {
+     int bits_sum = 0;
+     for (int i = 0; i < bits.length; i++)
+       {
+         if (bits [i] < 0)
+           throw new IllegalArgumentException ();
+ 
+         bits_sum |= bits [i];
+       }
+     
+     if ((bits.length < cspace.getNumComponents())
+         || (bits_sum < 1))
+       throw new IllegalArgumentException ();
+ 
+     this.pixel_bits = pixel_bits;
+     this.bits = bits;
+     this.cspace = cspace;
+     this.hasAlpha = hasAlpha;
+     this.isAlphaPremultiplied = isAlphaPremultiplied;
+     this.transparency = transparency;
+     this.transferType = transferType;
+   }
+ 
+   // This is a hook for ColorConvertOp to create a colormodel with
+   // a new colorspace
+   ColorModel cloneColorModel(ColorSpace cspace)
+   {
+     Class cls = this.getClass();
+     ColorModel cm;
+     try {
+       // This constructor will exist.
+       Constructor ctor =
+         cls.getConstructor(new Class[]{int.class, int[].class,
+ 				       ColorSpace.class, boolean.class,
+ 				       boolean.class, int.class, int.class});
+       cm = (ColorModel)ctor.
+         newInstance(new Object[]{new Integer(pixel_bits),
+ 				 bits, cspace, Boolean.valueOf(hasAlpha),
+ 				 Boolean.valueOf(isAlphaPremultiplied),
+ 				 new Integer(transparency),
+ 				 new Integer(transferType)});
+     }
+     catch (Exception e)
+     {
+       throw new IllegalArgumentException();
+     }
+     return cm;
+   }
+   
+   public void finalize()
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Returns the default color model which in Sun's case is an instance
+    * of <code>DirectColorModel</code>.
+    */
+   public static ColorModel getRGBdefault()
+   {
+     return new DirectColorModel(32, 0xff0000, 0xff00, 0xff, 0xff000000);
+   }
+ 
+   public final boolean hasAlpha()
+   {
+     return hasAlpha;
+   }
+ 
+   public final boolean isAlphaPremultiplied()
+   {
+     return isAlphaPremultiplied;
+   }
+ 
+   /**
+    * Get get number of bits wide used for the bit size of pixel values
+    */
+   public int getPixelSize()
+   {
+     return pixel_bits;
+   }
+     
+   public int getComponentSize(int componentIdx)
+   {
+     return bits[componentIdx];
+   }
+     
+   public int[] getComponentSize()
+   {
+     return bits;
+   }
+ 
+   public int getTransparency()
+   {
+     return transparency;
+   }
+ 
+   public int getNumComponents()
+   {
+     return getNumColorComponents() + (hasAlpha ? 1 : 0);
+   }
+ 
+   public int getNumColorComponents()
+   {
+     return cspace.getNumComponents();
+   }
+ 
+   /**
+    * Converts pixel value to sRGB and extract red int sample scaled
+    * to range [0, 255].
+    *
+    * @param pixel pixel value that will be interpreted according to
+    * the color model, (assumed alpha premultiplied if color model says
+    * so.)
+    *
+    * @return red sample scaled to range [0, 255], from default color
+    * space sRGB, alpha non-premultiplied.
+    */
+   public abstract int getRed(int pixel);
+ 
+   /**
+    * Converts pixel value to sRGB and extract green int sample
+    * scaled to range [0, 255].
+    *
+    * @see #getRed(int)
+    */
+   public abstract int getGreen(int pixel);
+     
+   /**
+    * Converts pixel value to sRGB and extract blue int sample
+    * scaled to range [0, 255].
+    *
+    * @see #getRed(int)
+    */
+   public abstract int getBlue(int pixel);
+ 
+   /**
+    * Extract alpha int sample from pixel value, scaled to [0, 255].
+    *
+    * @param pixel pixel value that will be interpreted according to
+    * the color model.
+    *
+    * @return alpha sample, scaled to range [0, 255].
+    */
+   public abstract int getAlpha(int pixel);
+ 
+   /**
+    * Converts a pixel int value of the color space of the color
+    * model to a sRGB pixel int value.
+    *
+    * This method is typically overriden in subclasses to provide a
+    * more efficient implementation.
+    * 
+    * @param pixel pixel value that will be interpreted according to
+    * the color model.
+    *
+    * @return a pixel in sRGB color space, encoded in default
+    * 0xAARRGGBB format.  */
+   public int getRGB(int pixel)
+   {
+     return 
+       ((getAlpha(pixel) & 0xff) << 24) |
+       ((  getRed(pixel) & 0xff) << 16) |
+       ((getGreen(pixel) & 0xff) <<  8) |
+       (( getBlue(pixel) & 0xff) <<  0);
+   }
+   
+ 
+   /**
+    * In this color model we know that the whole pixel value will
+    * always be contained within the first element of the pixel
+    * array.
+    */
+   final int getPixelFromArray(Object inData) {
+     DataBuffer data =
+       Buffers.createBufferFromData(transferType, inData, 1);
+     Object da = Buffers.getData(data);
+ 
+     return data.getElem(0);
+   }
+ 
+   /** 
+    * Converts pixel in the given array to sRGB and extract blue int
+    * sample scaled to range [0-255].
+    *
+    * This method is typically overriden in subclasses to provide a
+    * more efficient implementation.
+    * 
+    * @param inData array of transferType containing a single pixel.  The
+    * pixel should be encoded in the natural way of the color model.
+    */
+   public int getRed(Object inData)
+   {
+     return getRed(getPixelFromArray(inData));
+   }
+ 
+   /**
+    * @see #getRed(Object)
+    */
+   public int getGreen(Object inData)
+   {
+     return getGreen(getPixelFromArray(inData));
+   }
+ 
+   /**
+    * @see #getRed(Object)
+    */
+   public int getBlue(Object inData) {
+     return getBlue(getPixelFromArray(inData));
+   }
+ 
+   /**
+    * @see #getRed(Object)
+    */
+   public int getAlpha(Object inData) {
+     return getAlpha(getPixelFromArray(inData));
+   }
+ 
+   /**
+    * Converts a pixel in the given array of the color space of the
+    * color model to an sRGB pixel int value.
+    *
+    * <p>This method performs the inverse function of
+    * <code>getDataElements(int rgb, Object pixel)</code>.
+    * I.e. <code>(rgb == cm.getRGB(cm.getDataElements(rgb,
+    * null)))</code>.
+    *
+    * @param inData array of transferType containing a single pixel. The
+    * pixel should be encoded in the natural way of the color model.
+    *
+    * @return a pixel in sRGB color space, encoded in default
+    * 0xAARRGGBB format.
+    *
+    * @see #getDataElements(int, Object)
+    */
+   public int getRGB(Object inData)
+   {
+     return 
+       ((getAlpha(inData) & 0xff) << 24) |
+       ((  getRed(inData) & 0xff) << 16) |
+       ((getGreen(inData) & 0xff) <<  8) |
+       (( getBlue(inData) & 0xff) <<  0);
+   }
+ 
+   /**
+    * Converts an sRGB pixel int value to an array containing a
+    * single pixel of the color space of the color model.
+    * 
+    * <p>This method performs the inverse function of
+    * <code>getRGB(Object inData)</code>.
+    *
+    * Outline of conversion process:
+    *
+    * <ol>
+    *
+    * <li>Convert rgb to normalized [0.0, 1.0] sRGB values.</li>
+    *
+    * <li>Convert to color space components using fromRGB in
+    * ColorSpace.</li>
+    *
+    * <li>If color model has alpha and should be premultiplied,
+    * multiply color space components with alpha value</li>
+    *
+    * <li>Scale the components to the correct number of bits.</li>
+    *
+    * <li>Arrange the components in the output array</li>
+    * 
+    * </ol>
+    *
+    * @param rgb The color to be converted to dataElements.  A pixel
+    * in sRGB color space, encoded in default 0xAARRGGBB format,
+    * assumed not alpha premultiplied.
+    *
+    * @param pixel to avoid needless creation of arrays, an array to
+    * use to return the pixel can be given. If null, a suitable array
+    * will be created.
+    *
+    * @return An array of transferType values representing the color,
+    * in the color model format. The color model defines whether the
+    *  
+    * @see #getRGB(Object)
+    */
+   public Object getDataElements(int rgb, Object pixel)
+   {
+     // subclasses has to implement this method.
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Fills an array with the unnormalized component samples from a
+    * pixel value. I.e. decompose the pixel, but not perform any
+    * color conversion. 
+    *
+    * This method is typically overriden in subclasses to provide a
+    * more efficient implementation.
+    * 
+    * @param pixel pixel value encoded according to the color model.
+    *
+    * @return arrays of unnormalized component samples of single
+    * pixel.  The scale and multiplication state of the samples are
+    * according to the color model. Each component sample is stored
+    * as a separate element in the array.
+    */
+   public int[] getComponents(int pixel, int[] components, int offset)
+   {
+     // subclasses has to implement this method.
+     throw new UnsupportedOperationException();
+   }
+   
+   /**
+    * Fills an array with the unnormalized component samples from an
+    * array of transferType containing a single pixel. I.e. decompose
+    * the pixel, but not perform any color conversion.
+    *
+    * This method is typically overriden in subclasses to provide a
+    * more efficient implementation.
+    *
+    * @param array of transferType containing a single pixel.  The
+    * pixel should be encoded in the natural way of the color model.
+    * 
+    * @return arrays of unnormalized component samples of single
+    * pixel.  The scale and multiplication state of the samples are
+    * according to the color model. Each component sample is stored
+    * as a separate element in the array.
+    */
+   public int[] getComponents(Object pixel, int[] components, int offset)
+   {
+     // subclasses has to implement this method.
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Convert normalized components to unnormalized components.
+    */
+   public int[] getUnnormalizedComponents(float[] normComponents,
+ 					 int normOffset,
+ 					 int[] components,
+ 					 int offset)
+   {
+     int numComponents = getNumComponents();
+     if (components == null)
+     {
+       components = new int[offset + numComponents];
+     }
+     
+     for (int i=0; i<numComponents; i++)
+     {
+       float in = normComponents[normOffset++];
+       int out = (int) (in * ((1<<getComponentSize(i)) - 1));
+       components[offset++] = out;
+     }
+     return components;
+   }
+ 
+   /**
+    * Convert unnormalized components to normalized components.
+    */
+   public float[] getNormalizedComponents(int[] components,
+ 					 int offset,
+ 					 float[] normComponents,
+ 					 int normOffset)
+   {
+     int numComponents = getNumComponents();
+     if (normComponents == null)
+     {
+       normComponents = new float[normOffset + numComponents];
+     }
+ 
+     for (int i=0; i<numComponents; i++)
+     {
+       float in = components[offset++];
+       float out = in / ((1<<getComponentSize(i)) - 1);
+       normComponents[normOffset++] = out;
+     }
+     return normComponents;
+   }
+ 
+   /**
+    * Convert unnormalized components to normalized components.
+    *
+    * @since 1.4
+    */
+   public float[] getNormalizedComponents (Object pixel,
+                                           float[] normComponents,
+                                           int normOffset)
+   {
+     // subclasses has to implement this method.
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Converts the unnormalized component samples from an array to a
+    * pixel value. I.e. composes the pixel from component samples, but
+    * does not perform any color conversion or scaling of the samples.
+    * 
+    * This method performs the inverse function of
+    * <code>getComponents(int pixel, int[] components,
+    *			       int offset)</code>. I.e.
+    *
+    * <code>(pixel == cm.getDataElement(cm.getComponents(pixel, null,
+    * 0), 0))</code>.
+    *
+    * This method is overriden in subclasses since this abstract class throws
+    * UnsupportedOperationException().
+    *
+    * @param components Array of unnormalized component samples of single
+    * pixel.  The scale and multiplication state of the samples are according
+    * to the color model. Each component sample is stored as a separate element
+    * in the array.
+    * @param offset Position of the first value of the pixel in components.
+    *
+    * @return pixel value encoded according to the color model.
+    */
+   public int getDataElement(int[] components, int offset)
+   {
+     // subclasses have to implement this method.
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Converts the normalized component samples from an array to a pixel
+    * value. I.e. composes the pixel from component samples, but does not
+    * perform any color conversion or scaling of the samples.
+    * 
+    * This method is typically overriden in subclasses to provide a
+    * more efficient implementation.  The method provided by this abstract
+    * class converts the components to unnormalized form and returns
+    * getDataElement(int[], int).
+    *
+    * @param components Array of normalized component samples of single pixel.
+    * The scale and multiplication state of the samples are according to the
+    * color model. Each component sample is stored as a separate element in the
+    * array.
+    * @param offset Position of the first value of the pixel in components.
+    *
+    * @return pixel value encoded according to the color model.
+    * @since 1.4
+    */
+   public int getDataElement (float[] components, int offset)
+   {
+     return
+       getDataElement(getUnnormalizedComponents(components, offset, null, 0),
+ 		     0);
+   }
+   
+   public Object getDataElements(int[] components, int offset, Object obj)
+   {
+     // subclasses have to implement this method.
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Converts the normalized component samples from an array to an array of
+    * TransferType values. I.e. composes the pixel from component samples, but
+    * does not perform any color conversion or scaling of the samples.
+    *
+    * If obj is null, a new array of TransferType is allocated and returned.
+    * Otherwise the results are stored in obj and obj is returned.  If obj is
+    * not long enough, ArrayIndexOutOfBounds is thrown.  If obj is not an array
+    * of primitives, ClassCastException is thrown.
+    * 
+    * This method is typically overriden in subclasses to provide a
+    * more efficient implementation.  The method provided by this abstract
+    * class converts the components to unnormalized form and returns
+    * getDataElement(int[], int, Object).
+    *
+    * @param components Array of normalized component samples of single pixel.
+    * The scale and multiplication state of the samples are according to the
+    * color model. Each component sample is stored as a separate element in the
+    * array.
+    * @param offset Position of the first value of the pixel in components.
+    * @param obj Array of TransferType or null.
+    *
+    * @return pixel value encoded according to the color model.
+    * @throws ArrayIndexOutOfBoundsException
+    * @throws ClassCastException
+    * @since 1.4
+    */
+   public Object getDataElements(float[] components, int offset, Object obj)
+   {
+     return
+       getDataElements(getUnnormalizedComponents(components, offset, null, 0),
+ 		      0, obj);
+   }
+ 
+   public boolean equals(Object obj)
+   {
+     if (!(obj instanceof ColorModel)) return false;
+ 
+     ColorModel o = (ColorModel) obj;
+     return 
+       (pixel_bits == o.pixel_bits) &&
+       (transferType == o.transferType) &&
+       (transparency == o.transparency) &&
+       (hasAlpha == o.hasAlpha) &&
+       (isAlphaPremultiplied == o.isAlphaPremultiplied) &&
+       Arrays.equals(bits, o.bits) &&
+       (cspace.equals(o.cspace));
+   }
+ 
+   public final ColorSpace getColorSpace()
+   {
+     return cspace;
+   }
+ 
+   // Typically overridden
+   public ColorModel coerceData(WritableRaster raster,
+ 			       boolean isAlphaPremultiplied)
+   {
+     if (this.isAlphaPremultiplied == isAlphaPremultiplied)
+       return this;
+ 
+     int w = raster.getWidth();
+     int h = raster.getHeight();
+     int x = raster.getMinX();
+     int y = raster.getMinY();
+     int size = w*h;
+     int numColors = getNumColorComponents();
+     int numComponents = getNumComponents();
+     int alphaScale = (1<<getComponentSize(numColors)) - 1;
+     double[] pixels = raster.getPixels(x, y, w, h, (double[]) null);
+ 
+     for (int i=0; i<size; i++)
+       {
+ 	double alpha = pixels[i*numComponents+numColors]*alphaScale;
+ 	for (int c=0; c<numColors; c++)
+ 	  {
+ 	    int offset = i*numComponents+c;
+ 	    if (isAlphaPremultiplied)
+ 		pixels[offset] = pixels[offset]/alpha;
+ 	    else
+ 	      pixels[offset] = pixels[offset]*alpha;
+ 	  }
+       }
+     
+     raster.setPixels(0, 0, w, h, pixels);
+ 
+     // FIXME: what can we return?
+     return null;
+   }
+     
+   /**
+    * Checks if the given raster has a compatible data-layout (SampleModel).
+    * @param raster The Raster to test.
+    * @return true if raster is compatible.
+    */ 
+   public boolean isCompatibleRaster(Raster raster)
+   {
+     SampleModel sampleModel = raster.getSampleModel();
+     return isCompatibleSampleModel(sampleModel);
+   }
+ 
+   // Typically overridden
+   public WritableRaster createCompatibleWritableRaster(int w, int h)
+   {
+     return new WritableRaster(createCompatibleSampleModel(w, h),
+ 			      new Point(0, 0));
+   }
+ 
+   // Typically overridden
+   public SampleModel createCompatibleSampleModel(int w, int h)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   // Typically overridden
+   public boolean isCompatibleSampleModel(SampleModel sm)
+   {
+     return sm.getTransferType() == transferType;
+   }
+ 
+   public final int getTransferType ()
+   {
+     return transferType;
+   }
+ 
+   /**
+    * Subclasses must override this method if it is possible for the
+    * color model to have an alpha channel.
+    *
+    * @return null, as per JDK 1.3 doc. Subclasses will only return
+    * null if no alpha raster exists.
+    */
+   public WritableRaster getAlphaRaster(WritableRaster raster)
+   {
+     return null;
+     
+     /* It is a mystery to me why we couldn't use the following code...
+        
+        
+        if (!hasAlpha()) return null;
+        
+        SampleModel sm = raster.getSampleModel();
+        int[] alphaBand = { sm.getNumBands() - 1 };
+        SampleModel alphaModel = sm.createSubsetSampleModel(alphaBand);
+        DataBuffer buffer = raster.getDataBuffer();
+        Point origin = new Point(0, 0);
+        return Raster.createWritableRaster(alphaModel, buffer, origin);
+        
+ 
+        ...here, and avoided overriding the method in subclasses,
+        but the Sun docs state that this method always will return
+        null, and that overriding is required. Oh, well.
+     */
+   }
+ 
+   String stringParam()
+   {
+     return "pixel_bits=" + pixel_bits +
+       ", cspace=" + cspace +
+       ", transferType=" + transferType +
+       ", transparency=" + transparency +
+       ", hasAlpha=" + hasAlpha +
+       ", isAlphaPremultiplied=" + isAlphaPremultiplied;
+   }
+ 
+   public String toString()
+   {
+     return getClass().getName() + "[" + stringParam() + "]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ComponentColorModel.java gcc-4.1.0/libjava/classpath/java/awt/image/ComponentColorModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ComponentColorModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ComponentColorModel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,391 ----
+ /* ComponentColorModel.java --
+    Copyright (C) 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import gnu.java.awt.Buffers;
+ 
+ import java.awt.Point;
+ import java.awt.color.ColorSpace;
+ 
+ public class ComponentColorModel extends ColorModel
+ {
+   private static int sum(int[] values)
+   {
+     int sum = 0;
+     for (int i=0; i<values.length; i++)
+       sum += values[i];
+     return sum;
+   }
+ 
+   public ComponentColorModel(ColorSpace colorSpace, int[] bits,
+ 			     boolean hasAlpha,
+ 			     boolean isAlphaPremultiplied,
+ 			     int transparency, int transferType)
+   {
+     super(sum(bits), bits, colorSpace, hasAlpha, isAlphaPremultiplied,
+ 	  transparency, transferType);
+   }
+ 
+   /**
+    * Construct a new ComponentColorModel.
+    * 
+    * This constructor makes all bits of each sample significant, so for a
+    * transferType of DataBuffer.BYTE, the bits per sample is 8, etc.  If
+    * both hasAlpha and isAlphaPremultiplied are true, color samples are
+    * assumed to be premultiplied by the alpha component.  Transparency may be
+    * one of OPAQUE, BITMASK, or TRANSLUCENT. 
+    * 
+    * @param colorSpace The colorspace for this color model.
+    * @param hasAlpha True if there is an alpha component.
+    * @param isAlphaPremultiplied True if colors are already multiplied by
+    * alpha.
+    * @param transparency The type of alpha values.
+    * @param transferType Data type of pixel sample values.
+    * @since 1.4
+    */
+   public ComponentColorModel(ColorSpace colorSpace,
+ 			     boolean hasAlpha,
+ 			     boolean isAlphaPremultiplied,
+ 			     int transparency, int transferType)
+   {	
+     this(colorSpace, null, hasAlpha, isAlphaPremultiplied,
+          transparency, transferType);
+   }
+ 
+   public int getRed(int pixel)
+   {
+     if (getNumComponents()>1) throw new IllegalArgumentException();
+     return (int) getRGBFloat(pixel)[0];
+   }
+ 
+   public int getGreen(int pixel)
+   {
+     if (getNumComponents()>1) throw new IllegalArgumentException();
+     return (int) getRGBFloat(pixel)[0];
+   }
+   
+   public int getBlue(int pixel)
+   {
+     if (getNumComponents()>1) throw new IllegalArgumentException();
+     return (int) getRGBFloat(pixel)[0];
+   }
+ 
+   public int getAlpha(int pixel)
+   {
+     if (getNumComponents()>1) throw new IllegalArgumentException();
+     int shift = 8 - getComponentSize(getNumColorComponents());
+     if (shift >= 0) return pixel << shift;
+     return pixel >> (-shift);
+   }
+    
+   public int getRGB(int pixel)
+   {
+     float[] rgb = getRGBFloat(pixel);
+     int ret = getRGB(rgb);
+     if (hasAlpha()) ret |= getAlpha(pixel) << 24;
+     return ret;
+   }
+ 
+ 
+   /* Note, it's OK to pass a to large array to toRGB(). Extra
+      elements are ignored. */
+   
+   private float[] getRGBFloat(int pixel)
+   {
+     float[] data = { pixel };
+     return cspace.toRGB(data);
+   }
+ 
+   private float[] getRGBFloat(Object inData)
+   {
+     DataBuffer buffer =
+     Buffers.createBufferFromData(transferType, inData,
+ 				 getNumComponents());
+     int colors = getNumColorComponents();
+     float[] data = new float[colors];
+     
+     // FIXME: unpremultiply data that is premultiplied
+     for (int i=0; i<colors; i++)
+       {
+ 	float maxValue = (1<<getComponentSize(i))-1;
+ 	data[i] = buffer.getElemFloat(i)/maxValue; 
+       }
+     float[] rgb = cspace.toRGB(data);
+     return rgb;
+   }
+   
+   public int getRed(Object inData)
+   {
+     return (int) getRGBFloat(inData)[0]*255;
+   }
+ 
+   public int getGreen(Object inData)
+   {
+     return (int) getRGBFloat(inData)[1]*255;
+   }
+ 
+   public int getBlue(Object inData)
+   {
+     return (int) getRGBFloat(inData)[2]*255;
+   }
+ 
+   public int getAlpha(Object inData)
+   {
+     DataBuffer buffer =
+       Buffers.createBufferFromData(transferType, inData,
+ 				   getNumComponents());
+     int shift = 8 - getComponentSize(getNumColorComponents());
+     int alpha = buffer.getElem(getNumColorComponents());
+     if (shift >= 0) return alpha << shift;
+     return alpha >> (-shift);
+   }
+ 
+   private int getRGB(float[] rgb)
+   {
+     /* NOTE: We could cast to byte instead of int here. This would
+        avoid bits spilling over from one bit field to
+        another. But, if we assume that floats are in the [0.0,
+        1.0] range, this will never happen anyway. */
+     
+     /* Remember to multiply BEFORE casting to int, otherwise, decimal
+        point data will be lost. */
+     int ret =
+       (((int) (rgb[0]*255F)) << 16) |
+       (((int) (rgb[1]*255F)) <<  8) |
+       (((int) (rgb[2]*255F)) <<  0);
+     return ret;
+   }
+ 
+   /**
+    * @param inData pixel data of transferType, as returned by the
+    * getDataElements method in SampleModel.
+    */
+   public int getRGB(Object inData)
+   {
+     float[] rgb = getRGBFloat(inData);
+     int ret = getRGB(rgb);
+     if (hasAlpha()) ret |= getAlpha(inData) << 24;
+     return ret;
+   }
+ 
+   public Object getDataElements(int rgb, Object pixel)
+   {
+     // Convert rgb to [0.0, 1.0] sRGB values.
+     float[] rgbFloats = {
+       ((rgb >> 16)&0xff)/255.0F,
+       ((rgb >>  8)&0xff)/255.0F,
+       ((rgb >>  0)&0xff)/255.0F
+     };
+ 
+     // Convert from rgb to color space components.
+     float[] data = cspace.fromRGB(rgbFloats);
+     DataBuffer buffer = Buffers.createBuffer(transferType, pixel,
+ 					     getNumComponents());
+     int numColors = getNumColorComponents();
+     
+     if (hasAlpha())
+       {
+ 	float alpha = ((rgb >> 24)&0xff)/255.0F;
+ 	
+ 	/* If color model has alpha and should be premultiplied, multiply
+ 	   color space components with alpha value. */
+ 	if (isAlphaPremultiplied()) {
+ 	  for (int i=0; i<numColors; i++)
+ 	    data[i] *= alpha;
+ 	}
+ 	// Scale the alpha sample to the correct number of bits.
+ 	alpha *= (1<<(bits[numColors]-1));
+ 	// Arrange the alpha sample in the output array.
+ 	buffer.setElemFloat(numColors, alpha);
+       }
+     for (int i=0; i<numColors; i++)
+       {
+ 	// Scale the color samples to the correct number of bits.
+ 	float value = data[i]*(1<<(bits[i]-1));
+ 	// Arrange the color samples in the output array.
+ 	buffer.setElemFloat(i, value);
+       }
+     return Buffers.getData(buffer);
+   }
+ 
+   public int[] getComponents(int pixel, int[] components, int offset)
+   {
+     if (getNumComponents()>1) throw new IllegalArgumentException();
+     if (components == null)
+     components = new int[getNumComponents() + offset];
+     components[offset] = pixel;
+     return components;
+   }
+ 
+   public int[] getComponents(Object pixel, int[] components, int offset)
+   {
+     DataBuffer buffer = Buffers.createBuffer(transferType, pixel,
+ 					     getNumComponents());
+     int numComponents = getNumComponents();
+ 
+     if (components == null)
+       components = new int[numComponents + offset];
+ 
+     for (int i=0; i<numComponents; i++)
+       components[offset++] = buffer.getElem(i);
+ 
+     return components;
+   }
+ 
+   public int getDataElement(int[] components, int offset)
+   {
+     if (getNumComponents()>1) throw new IllegalArgumentException();
+     return components[offset];
+   }
+ 
+   public Object getDataElements(int[] components, int offset, Object obj)
+   {
+     DataBuffer buffer = Buffers.createBuffer(transferType, obj,
+ 					     getNumComponents());
+     int numComponents = getNumComponents();
+ 
+     for (int i=0; i<numComponents; i++)
+       buffer.setElem(i, components[offset++]);
+ 
+     return Buffers.getData(buffer);
+   }
+ 
+   public ColorModel coerceData(WritableRaster raster,
+ 			       boolean isAlphaPremultiplied) {
+     if (this.isAlphaPremultiplied == isAlphaPremultiplied)
+       return this;
+ 
+     /* TODO: provide better implementation based on the
+        assumptions we can make due to the specific type of the
+        color model. */
+     super.coerceData(raster, isAlphaPremultiplied);
+     
+     return new ComponentColorModel(cspace, bits, hasAlpha(),
+ 				   isAlphaPremultiplied, // argument
+ 				   transparency, transferType);
+   }
+ 
+   public boolean isCompatibleRaster(Raster raster)
+   {
+     return super.isCompatibleRaster(raster);
+     // FIXME: Should we test something more here? (Why override?)
+   }
+ 
+   public WritableRaster createCompatibleWritableRaster(int w, int h)
+   {
+     SampleModel sm = createCompatibleSampleModel(w, h);
+     Point origin = new Point(0, 0);
+     return Raster.createWritableRaster(sm, origin);
+   }
+ 
+ 
+   /**
+    * Creates a <code>SampleModel</code> whose arrangement of pixel
+    * data is compatible to this <code>ColorModel</code>.
+    *
+    * @param w the number of pixels in the horizontal direction.
+    * @param h the number of pixels in the vertical direction.
+    */
+   public SampleModel createCompatibleSampleModel(int w, int h)
+   {
+     int pixelStride, scanlineStride;
+     int[] bandOffsets;
+ 
+     pixelStride = getNumComponents();
+     scanlineStride = pixelStride * w;
+ 
+     /* We might be able to re-use the same bandOffsets array among
+      * multiple calls to this method. However, this optimization does
+      * not seem worthwile because setting up descriptive data
+      * structures (such as SampleModels) is neglectible in comparision
+      * to shuffling around masses of pixel data.
+      */
+     bandOffsets = new int[pixelStride];
+     for (int i = 0; i < pixelStride; i++)
+       bandOffsets[i] = i;
+ 
+     /* FIXME: Think about whether it would make sense to return the
+      * possibly more efficient PixelInterleavedSampleModel for other
+      * transferTypes as well. It seems unlikely that this would break
+      * any user applications, so the Mauve tests on this method
+      * might be too restrictive.
+      */
+     switch (transferType)
+       {
+       case DataBuffer.TYPE_BYTE:
+       case DataBuffer.TYPE_USHORT:
+         return new PixelInterleavedSampleModel(transferType, w, h,
+                                                pixelStride,
+                                                scanlineStride,
+                                                bandOffsets);
+ 
+       default:
+         return new ComponentSampleModel(transferType, w, h,
+                                         pixelStride,
+                                         scanlineStride,
+                                         bandOffsets);
+       }
+   }
+ 
+ 
+   public boolean isCompatibleSampleModel(SampleModel sm)
+   {
+     return 
+       (sm instanceof ComponentSampleModel) &&
+       super.isCompatibleSampleModel(sm);
+   }
+ 
+   public WritableRaster getAlphaRaster(WritableRaster raster)
+   {
+     if (!hasAlpha()) return null;
+     
+     SampleModel sm = raster.getSampleModel();
+     int[] alphaBand = { sm.getNumBands() - 1 };
+     SampleModel alphaModel = sm.createSubsetSampleModel(alphaBand);
+     DataBuffer buffer = raster.getDataBuffer();
+     Point origin = new Point(0, 0);
+     return Raster.createWritableRaster(alphaModel, buffer, origin);
+   }
+     
+   public boolean equals(Object obj)
+   {
+     if (!(obj instanceof ComponentColorModel)) return false;
+     return super.equals(obj);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ComponentSampleModel.java gcc-4.1.0/libjava/classpath/java/awt/image/ComponentSampleModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ComponentSampleModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ComponentSampleModel.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,548 ----
+ /* Copyright (C) 2000, 2002  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ import gnu.java.awt.Buffers;
+ 
+ /* FIXME: This class does not yet support data type TYPE_SHORT */
+ 
+ /**
+  * ComponentSampleModel supports a flexible organization of pixel samples in
+  * memory, permitting pixel samples to be interleaved by band, by scanline,
+  * and by pixel.
+  *
+  * A DataBuffer for this sample model has K banks of data.  Pixels have N
+  * samples, so there are N bands in the DataBuffer.  Each band is completely
+  * contained in one bank of data, but a bank may contain more than one band.
+  * Each pixel sample is stored in a single data element.
+  *
+  * Within a bank, each band begins at an offset stored in bandOffsets.  The
+  * banks containing the band is given by bankIndices.  Within the bank, there
+  * are three dimensions - band, pixel, and scanline.  The dimension ordering
+  * is controlled by bandOffset, pixelStride, and scanlineStride, which means
+  * that any combination of interleavings is supported.
+  *
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public class ComponentSampleModel extends SampleModel
+ {
+   protected int[] bandOffsets;
+   protected int[] bankIndices;
+   
+   /** 
+    * Number of bands in the image described.
+    * @specnote This field shadows the protected numBands in SampleModel.
+    */
+   protected int numBands;
+   
+   /** Used when creating data buffers. */
+   protected int numBanks;
+ 
+   protected int scanlineStride;
+   
+   protected int pixelStride;
+   
+   private boolean tightPixelPacking = false;
+   
+   public ComponentSampleModel(int dataType,
+ 			      int w, int h,
+ 			      int pixelStride,
+ 			      int scanlineStride,
+ 			      int[] bandOffsets)
+   {
+     this(dataType, w, h, pixelStride, scanlineStride,
+ 	 new int[bandOffsets.length], bandOffsets);
+   }
+     
+   public ComponentSampleModel(int dataType,
+ 			      int w, int h,
+ 			      int pixelStride,
+ 			      int scanlineStride,
+ 			      int[] bankIndices,
+ 			      int[] bandOffsets)
+   {
+     super(dataType, w, h, bandOffsets.length);
+     if ((pixelStride<0) || (scanlineStride<0) || 
+ 	(bandOffsets.length<1) ||
+ 	(bandOffsets.length != bankIndices.length))
+       throw new IllegalArgumentException();
+     
+     this.bandOffsets = bandOffsets;
+     this.bankIndices = bankIndices;
+     this.numBands = bandOffsets.length;
+ 
+     this.numBanks = 0;
+     for (int b=0; b<bankIndices.length; b++)
+       this.numBanks = Math.max(this.numBanks, bankIndices[b]+1);
+ 
+     this.scanlineStride = scanlineStride;
+     this.pixelStride = pixelStride;
+ 
+     // See if we can use some speedups
+ 
+     /* FIXME: May these checks should be reserved for the
+        PixelInterleavedSampleModel? */
+ 	
+     if (pixelStride == numBands)
+       {
+ 	tightPixelPacking = true;
+ 	for (int b=0; b<numBands; b++) {
+ 	  if ((bandOffsets[b] != b) || (bankIndices[b] !=0))
+ 	    {
+ 	      tightPixelPacking = false;
+ 	      break;
+ 	    }
+ 	}
+       }
+   }		
+ 
+   public SampleModel createCompatibleSampleModel(int w, int h)
+   {
+     return new ComponentSampleModel(dataType, w, h, pixelStride,
+ 				    scanlineStride, bankIndices,
+ 				    bandOffsets);
+   }
+ 
+   public SampleModel createSubsetSampleModel(int[] bands)
+   {
+     int numBands = bands.length;
+     
+     int[] bankIndices = new int[numBands];
+     int[] bandOffsets = new int[numBands];
+     for (int b=0; b<numBands; b++)
+       {
+ 	bankIndices[b] = this.bankIndices[bands[b]];
+ 	bandOffsets[b] = this.bandOffsets[bands[b]];
+       }
+ 
+     return new ComponentSampleModel(dataType, width, height, pixelStride,
+ 				    scanlineStride, bankIndices,
+ 				    bandOffsets);
+   }
+ 
+   public DataBuffer createDataBuffer()
+   {
+     // Maybe this value should be precalculated in the constructor?
+     int highestOffset = 0;
+     for (int b=0; b<numBands; b++)
+       {
+ 	highestOffset = Math.max(highestOffset, bandOffsets[b]);
+       }
+     int size = pixelStride*(width-1) + scanlineStride*(height-1) +
+       highestOffset + 1;
+     
+     return Buffers.createBuffer(getDataType(), size, numBanks);
+   }
+ 
+   public int getOffset(int x, int y)
+   {
+     return getOffset(x, y, 0);
+   }
+ 
+   public int getOffset(int x, int y, int b)
+   {
+     return bandOffsets[b] + pixelStride*x + scanlineStride*y;
+   }
+ 
+   public final int[] getSampleSize()
+   {
+     int size = DataBuffer.getDataTypeSize(getDataType());
+     int[] sizes = new int[numBands];
+ 
+     java.util.Arrays.fill(sizes, size);
+     return sizes;
+   }
+ 
+   public final int getSampleSize(int band)
+   {
+     return DataBuffer.getDataTypeSize(getDataType());
+   }
+ 
+   public final int[] getBankIndices()
+   {
+     return bankIndices;
+   }
+ 
+   public final int[] getBandOffsets()
+   {
+     return bandOffsets;
+   }
+ 
+   public final int getScanlineStride()
+   {
+     return scanlineStride;
+   }
+ 
+   public final int getPixelStride()
+   {
+     return pixelStride;
+   }
+ 
+   public final int getNumDataElements()
+   {
+     return numBands;
+   }
+ 
+   public Object getDataElements(int x, int y, Object obj, DataBuffer data)
+   {
+     int xyOffset = pixelStride*x + scanlineStride*y;
+     
+     int[] totalBandDataOffsets = new int[numBands];
+     
+     /* Notice that band and bank offsets are different. Band offsets
+        are managed by the sample model, and bank offsets are managed
+        by the data buffer. Both must be accounted for. */
+     
+     /* FIXME: For single pixels, it is probably easier to simple
+        call getElem instead of calculating the bank offset ourself.
+        
+        On the other hand, then we need to push the value through
+        the int type returned by the getElem method.  */
+     
+     int[] bankOffsets = data.getOffsets();
+     
+     for (int b=0; b<numBands; b++)
+       {
+ 	totalBandDataOffsets[b] = 
+ 	  bandOffsets[b]+bankOffsets[bankIndices[b]] + xyOffset;
+       }
+ 	
+     try
+       {
+ 	switch (getTransferType())
+ 	  {
+ 	  case DataBuffer.TYPE_BYTE:
+ 	    DataBufferByte inByte = (DataBufferByte) data;
+ 	    byte[] outByte = (byte[]) obj;
+ 	    if (outByte == null) outByte = new byte[numBands];
+ 		
+ 	    for (int b=0; b<numBands; b++)
+ 	      {
+ 		int dOffset = totalBandDataOffsets[b];
+ 		outByte[b] = inByte.getData(bankIndices[b])[dOffset];
+ 	      }
+ 	    return outByte;
+ 		
+ 	  case DataBuffer.TYPE_USHORT:
+ 	    DataBufferUShort inUShort = (DataBufferUShort) data;
+ 	    short[] outUShort = (short[]) obj;
+ 	    if (outUShort == null) outUShort = new short[numBands];
+ 		
+ 	    for (int b=0; b<numBands; b++)
+ 	      {
+ 		int dOffset = totalBandDataOffsets[b];
+ 		outUShort[b] = inUShort.getData(bankIndices[b])[dOffset];
+ 	      }
+ 	    return outUShort;
+ 
+ 	  case DataBuffer.TYPE_SHORT:
+ 	    DataBufferShort inShort = (DataBufferShort) data;
+ 	    short[] outShort = (short[]) obj;
+ 	    if (outShort == null) outShort = new short[numBands];
+ 		
+ 	    for (int b=0; b<numBands; b++)
+ 	      {
+ 		int dOffset = totalBandDataOffsets[b];
+ 		outShort[b] = inShort.getData(bankIndices[b])[dOffset];
+ 	      }
+ 	    return outShort;
+ 
+ 	  case DataBuffer.TYPE_INT:
+ 	    DataBufferInt inInt = (DataBufferInt) data;
+ 	    int[] outInt = (int[]) obj;
+ 	    if (outInt == null) outInt = new int[numBands];
+ 		
+ 	    for (int b=0; b<numBands; b++)
+ 	      {
+ 		int dOffset = totalBandDataOffsets[b];
+ 		outInt[b] = inInt.getData(bankIndices[b])[dOffset];
+ 	      }
+ 	    return outInt;
+ 
+ 	  case DataBuffer.TYPE_FLOAT:
+ 	    DataBufferFloat inFloat = (DataBufferFloat) data;
+ 	    float[] outFloat = (float[]) obj;
+ 	    if (outFloat == null) outFloat = new float[numBands];
+ 
+ 	    for (int b=0; b<numBands; b++)
+ 	      {
+ 		int dOffset = totalBandDataOffsets[b];
+ 		outFloat[b] = inFloat.getData(bankIndices[b])[dOffset];
+ 	      }
+ 	    return outFloat;
+ 	    
+ 	  case DataBuffer.TYPE_DOUBLE:
+ 	    DataBufferDouble inDouble = (DataBufferDouble) data;
+ 	    double[] outDouble = (double[]) obj;
+ 	    if (outDouble == null) outDouble = new double[numBands];
+ 
+ 	    for (int b=0; b<numBands; b++)
+ 	      {
+ 		int dOffset = totalBandDataOffsets[b];
+ 		outDouble[b] = inDouble.getData(bankIndices[b])[dOffset];
+ 	      }
+ 	    return outDouble;
+ 	    
+ 	  default:
+ 	      throw new IllegalStateException("unknown transfer type " +
+ 					      getTransferType());
+ 	  }
+       }
+     catch (ArrayIndexOutOfBoundsException aioobe)
+       {
+ 	String msg = "While reading data elements, " +
+ 	  "x=" + x + ", y=" + y +", " + ", xyOffset=" + xyOffset +
+ 	  ", data.getSize()=" + data.getSize() + ": " + aioobe;
+ 	throw new ArrayIndexOutOfBoundsException(msg);
+       }
+   }
+ 
+   public Object getDataElements(int x, int y, int w, int h, Object obj,
+ 				DataBuffer data)
+   {
+     if (!tightPixelPacking)
+       {
+ 	return super.getDataElements(x, y, w, h, obj, data);
+       }
+ 
+     // using get speedup
+     
+     // We can copy whole rows
+     int rowSize = w*numBands;
+     int dataSize = rowSize*h;
+     
+     DataBuffer transferBuffer =
+       Buffers.createBuffer(getTransferType(), obj, dataSize);
+     obj = Buffers.getData(transferBuffer);
+ 
+     int inOffset =
+       pixelStride*x +
+       scanlineStride*y +
+       data.getOffset(); // Assumes only one band is used
+ 
+     /* We don't add band offsets since we assume that bands have
+        offsets 0, 1, 2, ... */
+ 
+     // See if we can copy everything in one go
+     if (scanlineStride == rowSize)
+       {
+ 	// Collapse scan lines:
+ 	rowSize *= h;
+ 	// We ignore scanlineStride since it won't be of any use
+ 	h = 1;
+       }
+ 
+     int outOffset = 0;
+     Object inArray = Buffers.getData(data);
+     for (int yd = 0; yd<h; yd++)
+       {
+ 	System.arraycopy(inArray, inOffset, obj, outOffset, rowSize);
+ 	inOffset  += scanlineStride;
+ 	outOffset += rowSize;
+       }
+     return obj;
+   }
+ 
+   public void setDataElements(int x, int y, int w, int h,
+ 			      Object obj, DataBuffer data)
+   {
+     if (!tightPixelPacking)
+       {
+ 	super.setDataElements(x, y, w, h, obj, data);
+ 	return;
+       }
+ 
+     // using set speedup, we can copy whole rows
+     int rowSize = w*numBands;
+     int dataSize = rowSize*h;
+     
+     DataBuffer transferBuffer =
+       Buffers.createBufferFromData(getTransferType(), obj, dataSize);
+ 
+     int[] bankOffsets = data.getOffsets();
+ 
+     int outOffset =
+       pixelStride*x +
+       scanlineStride*y +
+       bankOffsets[0]; // same assuptions as in get...
+ 
+     // See if we can copy everything in one go
+     if (scanlineStride == rowSize)
+       {
+ 	// Collapse scan lines:
+ 	rowSize *= h;
+ 	h = 1;
+       }
+ 
+     int inOffset = 0;
+     Object outArray = Buffers.getData(data);
+     for (int yd = 0; yd<h; yd++)
+       {
+ 	System.arraycopy(obj, inOffset, outArray, outOffset, rowSize);
+ 	outOffset += scanlineStride;
+ 	inOffset  += rowSize;
+       }
+   }
+ 
+   public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     int offset = pixelStride*x + scanlineStride*y;
+     if (iArray == null) iArray = new int[numBands];
+     for (int b=0; b<numBands; b++)
+       {
+ 	iArray[b] = data.getElem(bankIndices[b], offset+bandOffsets[b]);
+       }
+     return iArray;
+   }
+ 
+   public int[] getPixels(int x, int y, int w, int h, int[] iArray,
+ 			 DataBuffer data)
+   {
+     int offset = pixelStride*x + scanlineStride*y;
+     if (iArray == null) iArray = new int[numBands*w*h];
+     int outOffset = 0;
+     for (y=0; y<h; y++)
+       {
+ 	int lineOffset = offset;
+ 	for (x=0; x<w; x++)
+ 	  {
+ 	    for (int b=0; b<numBands; b++)
+ 	      {
+ 		iArray[outOffset++] = 
+ 		  data.getElem(bankIndices[b], lineOffset+bandOffsets[b]);
+ 	      }
+ 	    lineOffset += pixelStride;
+ 	  }
+ 	offset += scanlineStride;
+       }
+     return iArray;
+   }
+     
+   public int getSample(int x, int y, int b, DataBuffer data)
+   {
+     return data.getElem(bankIndices[b], getOffset(x, y, b));
+   }
+ 
+   public void setDataElements(int x, int y, Object obj, DataBuffer data)
+   {
+     int offset = pixelStride*x + scanlineStride*y;
+     int[] totalBandDataOffsets = new int[numBands];
+     int[] bankOffsets = data.getOffsets();
+     for (int b=0; b<numBands; b++)
+       totalBandDataOffsets[b] =
+ 	bandOffsets[b]+bankOffsets[bankIndices[b]] + offset;
+ 
+     switch (getTransferType())
+       {
+       case DataBuffer.TYPE_BYTE:
+ 	{
+ 	  DataBufferByte out = (DataBufferByte) data;
+ 	  byte[] in = (byte[]) obj;
+ 	  
+ 	  for (int b=0; b<numBands; b++)
+ 	    out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+ 	  
+ 	  return;
+ 	}
+       case DataBuffer.TYPE_USHORT:
+ 	{
+ 	  DataBufferUShort out = (DataBufferUShort) data;
+ 	  short[] in = (short[]) obj;
+ 	  
+ 	  for (int b=0; b<numBands; b++)
+ 	    out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+ 	  
+ 	  return;
+ 	}
+       case DataBuffer.TYPE_SHORT:
+ 	{
+ 	  DataBufferShort out = (DataBufferShort) data;
+ 	  short[] in = (short[]) obj;
+ 	  
+ 	  for (int b=0; b<numBands; b++)
+ 	    out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+ 	  
+ 	  return;
+ 	}
+       case DataBuffer.TYPE_INT:
+ 	{
+ 	  DataBufferInt out = (DataBufferInt) data;
+ 	  int[] in = (int[]) obj;
+ 	  
+ 	  for (int b=0; b<numBands; b++)
+ 	    out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+ 	  
+ 	  return;
+ 	}
+       case DataBuffer.TYPE_FLOAT:
+ 	{
+ 	  DataBufferFloat out = (DataBufferFloat) data;
+ 	  float[] in = (float[]) obj;
+ 	  
+ 	  for (int b=0; b<numBands; b++)
+ 	    out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+ 	  
+ 	  return;
+ 	}
+       case DataBuffer.TYPE_DOUBLE:
+ 	{
+ 	  DataBufferDouble out = (DataBufferDouble) data;
+ 	  double[] in = (double[]) obj;
+ 	  
+ 	  for (int b=0; b<numBands; b++)
+ 	    out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+ 	  
+ 	  return;
+ 	}
+       default:
+ 	throw new UnsupportedOperationException("transfer type not " +
+ 						"implemented");
+       }
+   }
+   
+   public void setPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     int offset = pixelStride*x + scanlineStride*y;
+     for (int b=0; b<numBands; b++)
+       data.setElem(bankIndices[b], offset+bandOffsets[b], iArray[b]);
+   }
+     
+   public void setSample(int x, int y, int b, int s, DataBuffer data)
+   {
+     data.setElem(bankIndices[b], getOffset(x, y, b), s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ConvolveOp.java gcc-4.1.0/libjava/classpath/java/awt/image/ConvolveOp.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ConvolveOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ConvolveOp.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,339 ----
+ /* ConvolveOp.java --
+    Copyright (C) 2004, 2005 Free Software Foundation -- ConvolveOp
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Graphics2D;
+ import java.awt.RenderingHints;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ import java.util.Arrays;
+ 
+ /**
+  * Convolution filter.
+  * 
+  * ConvolveOp convolves the source image with a Kernel to generate a
+  * destination image.  This involves multiplying each pixel and its neighbors
+  * with elements in the kernel to compute a new pixel.
+  * 
+  * Each band in a Raster is convolved and copied to the destination Raster.
+  * 
+  * For BufferedImages, convolution is applied to all components.  If the
+  * source is not premultiplied, the data will be premultiplied before
+  * convolving.  Premultiplication will be undone if the destination is not
+  * premultiplied.  Color conversion will be applied if needed.
+  * 
+  * @author jlquinn@optonline.net
+  */
+ public class ConvolveOp implements BufferedImageOp, RasterOp
+ {
+   /** Edge pixels are set to 0. */
+   public static final int EDGE_ZERO_FILL = 0;
+   
+   /** Edge pixels are copied from the source. */
+   public static final int EDGE_NO_OP = 1;
+   
+   private Kernel kernel;
+   private int edge;
+   private RenderingHints hints;
+ 
+   /**
+    * Construct a ConvolveOp.
+    * 
+    * The edge condition specifies that pixels outside the area that can be
+    * filtered are either set to 0 or copied from the source image.
+    * 
+    * @param kernel The kernel to convolve with.
+    * @param edgeCondition Either EDGE_ZERO_FILL or EDGE_NO_OP.
+    * @param hints Rendering hints for color conversion, or null.
+    */
+   public ConvolveOp(Kernel kernel,
+       				int edgeCondition,
+       				RenderingHints hints)
+   {
+     this.kernel = kernel;
+     edge = edgeCondition;
+     this.hints = hints;
+   }
+   
+   /**
+    * Construct a ConvolveOp.
+    * 
+    * The edge condition defaults to EDGE_ZERO_FILL.
+    * 
+    * @param kernel The kernel to convolve with.
+    */
+   public ConvolveOp(Kernel kernel)
+   {
+     this.kernel = kernel;
+     edge = EDGE_ZERO_FILL;
+     hints = null;
+   }
+ 
+   
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#filter(java.awt.image.BufferedImage,
+    * java.awt.image.BufferedImage)
+    */
+   public BufferedImage filter(BufferedImage src, BufferedImage dst)
+   {
+     if (src == dst)
+       throw new IllegalArgumentException();
+     
+     if (dst == null)
+       dst = createCompatibleDestImage(src, src.getColorModel());
+     
+     // Make sure source image is premultiplied
+     BufferedImage src1 = src;
+     if (!src.isPremultiplied)
+     {
+       src1 = createCompatibleDestImage(src, src.getColorModel());
+       src.copyData(src1.getRaster());
+       src1.coerceData(true);
+     }
+ 
+     BufferedImage dst1 = dst;
+     if (!src.getColorModel().equals(dst.getColorModel()))
+       dst1 = createCompatibleDestImage(src, src.getColorModel());
+ 
+     filter(src1.getRaster(), dst1.getRaster());
+     
+     if (dst1 != dst)
+     {
+       // Convert between color models.
+       // TODO Check that premultiplied alpha is handled correctly here.
+       Graphics2D gg = dst.createGraphics();
+       gg.setRenderingHints(hints);
+       gg.drawImage(dst1, 0, 0, null);
+       gg.dispose();
+     }
+     
+     return dst;
+   }
+ 
+   /* (non-Javadoc)
+    * @see
+    * java.awt.image.BufferedImageOp#createCompatibleDestImage(java.awt.image.BufferedImage,
+    * java.awt.image.ColorModel)
+    */
+   public BufferedImage createCompatibleDestImage(BufferedImage src,
+ 						 ColorModel dstCM)
+   {
+     // FIXME: set properties to those in src
+     return new BufferedImage(dstCM,
+ 			     src.getRaster().createCompatibleWritableRaster(),
+ 			     src.isPremultiplied, null);
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#getRenderingHints()
+    */
+   public RenderingHints getRenderingHints()
+   {
+     return hints;
+   }
+   
+   /**
+    * @return The edge condition.
+    */
+   public int getEdgeCondition()
+   {
+     return edge;
+   }
+   
+   /**
+    * Returns (a clone of) the convolution kernel.
+    *
+    * @return The convolution kernel.
+    */
+   public Kernel getKernel()
+   {
+     return (Kernel) kernel.clone();
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#filter(java.awt.image.Raster,
+    * java.awt.image.WritableRaster)
+    */
+   public WritableRaster filter(Raster src, WritableRaster dest) {
+     if (src == dest)
+       throw new IllegalArgumentException();
+     if (src.getWidth() < kernel.getWidth() ||
+         src.getHeight() < kernel.getHeight())
+       throw new ImagingOpException(null);
+     
+     if (dest == null)
+       dest = createCompatibleDestRaster(src);
+     else if (src.numBands != dest.numBands)
+       throw new ImagingOpException(null);
+ 
+     // Deal with bottom edge
+     if (edge == EDGE_ZERO_FILL)
+     {
+       float[] zeros = new float[src.getNumBands() * src.getWidth()
+ 				* (kernel.getYOrigin() - 1)];
+       Arrays.fill(zeros, 0);
+       dest.setPixels(src.getMinX(), src.getMinY(), src.getWidth(),
+ 		     kernel.getYOrigin() - 1, zeros);
+     }
+     else
+     {
+       float[] vals = new float[src.getNumBands() * src.getWidth()
+ 			       * (kernel.getYOrigin() - 1)];
+       src.getPixels(src.getMinX(), src.getMinY(), src.getWidth(),
+ 		    kernel.getYOrigin() - 1, vals);
+       dest.setPixels(src.getMinX(), src.getMinY(), src.getWidth(),
+ 		     kernel.getYOrigin() - 1, vals);
+     }
+     
+     // Handle main section
+     float[] kvals = kernel.getKernelData(null);
+ 
+     float[] tmp = new float[kernel.getWidth() * kernel.getHeight()];
+     for (int y = src.getMinY() + kernel.getYOrigin();
+     	 y < src.getMinY() + src.getHeight() - kernel.getYOrigin() / 2; y++)
+     {
+       // Handle unfiltered edge pixels at start of line
+       float[] t1 = new float[(kernel.getXOrigin() - 1) * src.getNumBands()];
+       if (edge == EDGE_ZERO_FILL)
+         Arrays.fill(t1, 0);
+       else
+         src.getPixels(src.getMinX(), y, kernel.getXOrigin() - 1, 1, t1);
+       dest.setPixels(src.getMinX(), y, kernel.getXOrigin() - 1, 1, t1);
+       
+       for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
+       {
+         // FIXME: This needs a much more efficient implementation
+         for (int b = 0; b < src.getNumBands(); b++)
+         {
+           float v = 0;
+           src.getSamples(x, y, kernel.getWidth(), kernel.getHeight(), b, tmp);
+           for (int i=0; i < tmp.length; i++)
+             v += tmp[i] * kvals[i];
+           dest.setSample(x, y, b, v);
+         }
+       }
+ 
+       // Handle unfiltered edge pixels at end of line
+       float[] t2 = new float[(kernel.getWidth() / 2) * src.getNumBands()];
+       if (edge == EDGE_ZERO_FILL)
+         Arrays.fill(t2, 0);
+       else
+         src.getPixels(src.getMinX() + src.getWidth()
+ 		      - (kernel.getWidth() / 2),
+ 		      y, kernel.getWidth() / 2, 1, t2);
+       dest.setPixels(src.getMinX() + src.getWidth() - (kernel.getWidth() / 2),
+ 		     y, kernel.getWidth() / 2, 1, t2);
+     }
+     for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
+       for (int x = src.getMinX(); x< src.getWidth() + src.getMinX(); x++)
+       {
+         
+       }
+     for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
+       for (int x = src.getMinX(); x< src.getWidth() + src.getMinX(); x++)
+       {
+         
+       }
+       
+     // Handle top edge
+     if (edge == EDGE_ZERO_FILL)
+     {
+       float[] zeros = new float[src.getNumBands() * src.getWidth() *
+                                 (kernel.getHeight() / 2)];
+       Arrays.fill(zeros, 0);
+       dest.setPixels(src.getMinX(),
+           src.getHeight() + src.getMinY() - (kernel.getHeight() / 2),
+           src.getWidth(), kernel.getHeight() / 2, zeros);
+     }
+     else
+     {
+       float[] vals = new float[src.getNumBands() * src.getWidth() *
+                                (kernel.getHeight() / 2)];
+       src.getPixels(src.getMinX(),
+ 		    src.getHeight() + src.getMinY()
+ 		    - (kernel.getHeight() / 2),
+ 		    src.getWidth(), kernel.getHeight() / 2, vals);
+       dest.setPixels(src.getMinX(),
+ 		     src.getHeight() + src.getMinY()
+ 		     - (kernel.getHeight() / 2),
+ 		     src.getWidth(), kernel.getHeight() / 2, vals);
+     }
+     
+     return dest;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#createCompatibleDestRaster(java.awt.image.Raster)
+    */
+   public WritableRaster createCompatibleDestRaster(Raster src)
+   {
+     return src.createCompatibleWritableRaster();
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#getBounds2D(java.awt.image.BufferedImage)
+    */
+   public Rectangle2D getBounds2D(BufferedImage src)
+   {
+     return src.getRaster().getBounds();
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
+    */
+   public Rectangle2D getBounds2D(Raster src)
+   {
+     return src.getBounds();
+   }
+ 
+   /** Return corresponding destination point for source point.
+    * 
+    * ConvolveOp will return the value of src unchanged.
+    * @param src The source point.
+    * @param dst The destination point.
+    * @see java.awt.image.RasterOp#getPoint2D(java.awt.geom.Point2D,
+    * java.awt.geom.Point2D)
+    */
+   public Point2D getPoint2D(Point2D src, Point2D dst)
+   {
+     if (dst == null) return (Point2D)src.clone();
+     dst.setLocation(src);
+     return dst;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/CropImageFilter.java gcc-4.1.0/libjava/classpath/java/awt/image/CropImageFilter.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/CropImageFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/CropImageFilter.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,184 ----
+ /* CropImageFilter.java -- Java class for cropping image filter
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Rectangle;
+ import java.util.Hashtable;
+ 
+ /**
+  * Currently this filter does almost nothing and needs to be implemented.
+  *
+  * @author C. Brian Jones (cbj@gnu.org) 
+  */
+ public class CropImageFilter extends ImageFilter
+ {
+     int x;
+     int y;
+     int width;
+     int height;
+ 
+     /**
+      * Construct a new <code>CropImageFilter</code> instance.
+      *
+      * @param x the x-coordinate location of the top-left of the cropped rectangle
+      * @param y the y-coordinate location of the top-left of the cropped rectangle
+      * @param width the width of the cropped rectangle
+      * @param height the height of the cropped rectangle
+      */
+     public CropImageFilter(int x, int y, int width, int height) {
+ 	this.x = x;
+ 	this.y = y;
+ 	this.width = width;
+ 	this.height = height;
+     }
+ 
+     /**
+      * An <code>ImageProducer</code> indicates the size of the image
+      * being produced using this method.  This filter overrides this
+      * method in order to set the dimentions to the size of the
+      * cropped rectangle instead of the size of the image.
+      * 
+      * @param width the width of the image
+      * @param height the height of the image 
+      */
+     public void setDimensions(int width, int height)
+     {
+       if (consumer != null)
+ 	consumer.setDimensions(this.width, this.height);
+     }
+ 
+     /**
+      * An <code>ImageProducer</code> can set a list of properties
+      * associated with this image by using this method.
+      * <br>
+      * FIXME - What property is set for this class?
+      *
+      * @param props the list of properties associated with this image 
+      */
+     public void setProperties(Hashtable props)
+     {
+   	props.put("filters", "CropImageFilter");
+ 	if (consumer != null)
+ 	  consumer.setProperties(props);
+     }
+ 
+     /**
+      * This function delivers a rectangle of pixels where any
+      * pixel(m,n) is stored in the array as a <code>byte</code> at
+      * index (n * scansize + m + offset).  
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+ 	   ColorModel model, byte[] pixels, int offset, int scansize)
+     {
+ 	Rectangle filterBounds = new Rectangle(this.x, this.y,
+ 	                                       this.width, this.height);
+ 	Rectangle pixelBounds = new Rectangle(x, y, w, h);
+ 
+ 	if (filterBounds.intersects(pixelBounds))
+ 	{
+ 	    Rectangle bounds = filterBounds.intersection(pixelBounds);
+ 
+ 	    byte[] cropped = new byte[bounds.width * bounds.height];
+ 	    for (int i = 0; i < bounds.height; i++)
+ 	    {
+ 		int start = (bounds.y - pixelBounds.y + i) * scansize + offset;
+ 
+ 		for (int j = 0; j < bounds.width; j++)
+ 		    cropped[i * bounds.width + j] = pixels[start + bounds.x + j];
+ 	    }
+ 	    
+ 	    if (consumer != null)
+ 	      consumer.setPixels(0, 0,
+ 				 bounds.width, bounds.height,
+ 				 model, cropped, 0, bounds.width);
+ 	}
+     }
+ 
+     /**
+      * This function delivers a rectangle of pixels where any
+      * pixel(m,n) is stored in the array as an <code>int</code> at
+      * index (n * scansize + m + offset).  
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+            ColorModel model, int[] pixels, int offset, int scansize)
+     {
+ 	Rectangle filterBounds = new Rectangle(this.x, this.y,
+ 	                                       this.width, this.height);
+ 	Rectangle pixelBounds = new Rectangle(x, y, w, h);
+ 
+ 	if (filterBounds.intersects(pixelBounds))
+ 	{
+ 	    Rectangle bounds = filterBounds.intersection(pixelBounds);
+ 
+ 	    int[] cropped = new int[bounds.width * bounds.height];
+ 	    for (int i = 0; i < bounds.height; i++)
+ 	    {
+ 		int start = (bounds.y - pixelBounds.y + i) * scansize + offset;
+ 
+ 		for (int j = 0; j < bounds.width; j++)
+ 		    cropped[i * bounds.width + j] = pixels[start + bounds.x + j];
+ 	    }
+ 	    
+ 	    if (consumer != null)
+ 	      consumer.setPixels(0, 0,
+ 				 bounds.width, bounds.height,
+ 				 model, cropped, 0, bounds.width);
+ 	}
+     }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/DataBuffer.java gcc-4.1.0/libjava/classpath/java/awt/image/DataBuffer.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/DataBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/DataBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,436 ----
+ /* Copyright (C) 2000, 2002, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ /** 
+  * Class that manages arrays of data elements. A data buffer consists
+  * of one or more banks.  A bank is a continuous region of data
+  * elements.
+  *
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public abstract class DataBuffer
+ {
+   /**
+    * A constant representing a data type that uses <code>byte</code> primitives
+    * as the storage unit.
+    */
+   public static final int TYPE_BYTE      =  0;
+ 
+   /**
+    * A constant representing a data type that uses <code>short</code> 
+    * primitives as the storage unit.
+    */
+   public static final int TYPE_USHORT    =  1;
+ 
+   /**
+    * A constant representing a data type that uses <code>short</code> 
+    * primitives as the storage unit.
+    */
+   public static final int TYPE_SHORT     =  2;
+ 
+   /**
+    * A constant representing a data type that uses <code>int</code> 
+    * primitives as the storage unit.
+    */
+   public static final int TYPE_INT       =  3;
+   
+   /**
+    * A constant representing a data type that uses <code>float</code> 
+    * primitives as the storage unit.
+    */
+   public static final int TYPE_FLOAT     =  4;
+ 
+   /**
+    * A constant representing a data type that uses <code>double</code> 
+    * primitives as the storage unit.
+    */
+   public static final int TYPE_DOUBLE    =  5;
+ 
+   /**
+    * A constant representing an undefined data type.
+    */
+   public static final int TYPE_UNDEFINED = 32;
+   
+   /** The type of the data elements stored in the data buffer.  */
+   protected int dataType;
+   
+   /** The number of banks in this buffer.  */
+   protected int banks = 1;
+   
+   /** Offset into the default (0'th) bank). */
+   protected int offset; // FIXME: Is offsets[0] always mirrored in offset?
+   
+   /** The size of the banks.  */
+   protected int size;
+   
+   /** Offset into each bank.  */
+   protected int[] offsets;
+   
+   /**
+    * Creates a new <code>DataBuffer</code> with the specified data type and
+    * size.  The <code>dataType</code> should be one of the constants 
+    * {@link #TYPE_BYTE}, {@link #TYPE_SHORT}, {@link #TYPE_USHORT}, 
+    * {@link #TYPE_INT}, {@link #TYPE_FLOAT} and {@link #TYPE_DOUBLE}.
+    * <p>
+    * The physical (array-based) storage is allocated by a subclass.
+    * 
+    * @param dataType the data type.
+    * @param size the number of elements in the buffer.
+    */
+   protected DataBuffer(int dataType, int size)
+   {
+     this.dataType = dataType;
+     this.size = size;
+   }
+ 
+   /**
+    * Creates a new <code>DataBuffer</code> with the specified data type,
+    * size and number of banks.  The <code>dataType</code> should be one of 
+    * the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT}, 
+    * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and 
+    * {@link #TYPE_DOUBLE}.
+    * <p>
+    * The physical (array-based) storage is allocated by a subclass.
+    * 
+    * @param dataType the data type.
+    * @param size the number of elements in the buffer.
+    * @param numBanks the number of data banks.
+    */
+   protected DataBuffer(int dataType, int size, int numBanks) {
+     this(dataType, size);
+     banks = numBanks;
+     offsets = new int[numBanks];
+   }
+ 
+   /**
+    * Creates a new <code>DataBuffer</code> with the specified data type,
+    * size and number of banks.  An offset (which applies to all banks) is
+    * also specified.  The <code>dataType</code> should be one of 
+    * the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT}, 
+    * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and 
+    * {@link #TYPE_DOUBLE}.
+    * <p>
+    * The physical (array-based) storage is allocated by a subclass.
+    * 
+    * @param dataType the data type.
+    * @param size the number of elements in the buffer.
+    * @param numBanks the number of data banks.
+    * @param offset the offset to the first element for all banks.
+    */
+   protected DataBuffer(int dataType, int size, int numBanks, int offset) {
+     this(dataType, size, numBanks);
+     
+     java.util.Arrays.fill(offsets, offset);          
+     
+     this.offset = offset;
+   }
+ 
+   /**
+    * Creates a new <code>DataBuffer</code> with the specified data type,
+    * size and number of banks.  An offset (which applies to all banks) is
+    * also specified.  The <code>dataType</code> should be one of 
+    * the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT}, 
+    * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and 
+    * {@link #TYPE_DOUBLE}.
+    * <p>
+    * The physical (array-based) storage is allocated by a subclass.
+    * 
+    * @param dataType the data type.
+    * @param size the number of elements in the buffer.
+    * @param numBanks the number of data banks.
+    * @param offsets the offsets to the first element for all banks.
+    * 
+    * @throws ArrayIndexOutOfBoundsException if 
+    *         <code>numBanks != offsets.length</code>.
+    */
+   protected DataBuffer(int dataType, int size, int numBanks, int[] offsets) {
+     this(dataType, size);
+     if (numBanks != offsets.length) 
+       throw new ArrayIndexOutOfBoundsException();
+     
+     banks = numBanks;
+     this.offsets = offsets;
+     
+     offset = offsets[0];
+   }
+   
+   /**
+    * Returns the size (number of bits) of the specified data type. Valid types
+    * are defined by the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT}, 
+    * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and 
+    * {@link #TYPE_DOUBLE}.
+    * 
+    * @param dataType the data type.
+    * @return The number of bits for the specified data type.
+    * @throws IllegalArgumentException if <code>dataType < 0</code> or 
+    *         <code>dataType > TYPE_DOUBLE</code>.
+    */
+   public static int getDataTypeSize(int dataType) {
+     // Maybe this should be a lookup table instead.
+     switch (dataType)
+       {
+       case TYPE_BYTE:
+ 	return 8;
+       case TYPE_USHORT:
+       case TYPE_SHORT:
+ 	return 16;
+       case TYPE_INT:
+       case TYPE_FLOAT:
+ 	return 32;
+       case TYPE_DOUBLE:
+ 	return 64;
+       default:
+ 	throw new IllegalArgumentException();
+       }
+   }
+ 
+   /**
+    * Returns the type of the data elements in the data buffer.  Valid types
+    * are defined by the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT}, 
+    * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and 
+    * {@link #TYPE_DOUBLE}.
+    * 
+    * @return The type.
+    */
+   public int getDataType()
+   {
+     return dataType;
+   }
+   
+   /**
+    * Returns the size of the data buffer.
+    * 
+    * @return The size.
+    */
+   public int getSize()
+   {
+     return size;
+   }
+   
+   /**
+    * Returns the element offset for the first data bank.
+    * 
+    * @return The element offset.
+    */
+   public int getOffset()
+   {
+     return offset;
+   }
+   
+   /**
+    * Returns the offsets for all the data banks used by this 
+    * <code>DataBuffer</code>.
+    * 
+    * @return The offsets.
+    */
+   public int[] getOffsets()
+   {
+     if (offsets == null)
+     {
+       // is this necessary?
+       offsets = new int[1];
+       offsets[0] = offset;
+     }
+     return offsets;
+   }
+ 
+   /**
+    * Returns the number of data banks for this <code>DataBuffer</code>.
+    * @return The number of data banks.
+    */
+   public int getNumBanks()
+   {
+     return banks;
+   }
+ 
+   /**
+    * Returns an element from the first data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int i)
+   {
+     return getElem(0, i);
+   }
+ 
+   /**
+    * Returns an element from a particular data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param bank the bank index.
+    * @param i the element index.
+    * @return The element.
+    */
+   public abstract int getElem(int bank, int i);
+   
+   /**
+    * Sets an element in the first data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int i, int val)
+   {
+     setElem(0, i, val);
+   }
+ 
+   /**
+    * Sets an element in a particular data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param bank the data bank index.
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public abstract void setElem(int bank, int i, int val);
+   
+   /**
+    * Returns an element from the first data bank, converted to a 
+    * <code>float</code>.  The offset (specified in the constructor) is added 
+    * to <code>i</code> before accessing the underlying data array.
+    * 
+    * @param i the element index.
+    * @return The element.
+    */
+   public float getElemFloat(int i)
+   {
+     return getElem(i);
+   }
+     
+   /**
+    * Returns an element from a particular data bank, converted to a 
+    * <code>float</code>.  The offset (specified in the constructor) is 
+    * added to <code>i</code> before accessing the underlying data array.
+    * 
+    * @param bank the bank index.
+    * @param i the element index.
+    * @return The element.
+    */
+   public float getElemFloat(int bank, int i)
+   {
+     return getElem(bank, i);
+   }
+ 
+   /**
+    * Sets an element in the first data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array. 
+    * 
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElemFloat(int i, float val)
+   {
+     setElem(i, (int) val);
+   }
+ 
+   /**
+    * Sets an element in a particular data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param bank the data bank index.
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElemFloat(int bank, int i, float val)
+   {
+     setElem(bank, i, (int) val);
+   }
+ 
+   /**
+    * Returns an element from the first data bank, converted to a 
+    * <code>double</code>.  The offset (specified in the constructor) is added
+    * to <code>i</code> before accessing the underlying data array.
+    * 
+    * @param i the element index.
+    * @return The element.
+    */
+   public double getElemDouble(int i)
+   {
+     return getElem(i);
+   }
+     
+   /**
+    * Returns an element from a particular data bank, converted to a 
+    * <code>double</code>.  The offset (specified in the constructor) is 
+    * added to <code>i</code> before accessing the underlying data array.
+    * 
+    * @param bank the bank index.
+    * @param i the element index.
+    * @return The element.
+    */
+   public double getElemDouble(int bank, int i)
+   {
+     return getElem(bank, i);
+   }
+ 
+   /**
+    * Sets an element in the first data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array. 
+    * 
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElemDouble(int i, double val)
+   {
+     setElem(i, (int) val);
+   }
+ 
+   /**
+    * Sets an element in a particular data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param bank the data bank index.
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElemDouble(int bank, int i, double val)
+   {
+     setElem(bank, i, (int) val);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferByte.java gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferByte.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferByte.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferByte.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,245 ----
+ /* Copyright (C) 2000, 2002  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ /* This is one of several classes that are nearly identical. Maybe we
+    should have a central template and generate all these files. This
+    is one of the cases where templates or macros would have been
+    useful to have in Java.
+ 
+    This file has been created using search-replace. My only fear is
+    that these classes will grow out-of-sync as of a result of changes
+    that are not propagated to the other files. As always, mirroring
+    code is a maintenance nightmare.  */
+ 
+ /**
+  * A {@link DataBuffer} that uses an array of <code>byte</code> primitives
+  * to represent each of its banks. 
+  * 
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public final class DataBufferByte extends DataBuffer
+ {
+   private byte[] data;
+   private byte[][] bankData;
+   
+   /**
+    * Creates a new data buffer with a single data bank containing the 
+    * specified number of <code>byte</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferByte(int size)
+   {
+     super(TYPE_BYTE, size, 1, 0);
+     bankData = new byte[1][];
+     data = new byte[size];
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer with the specified number of data banks, 
+    * each containing the specified number of <code>byte</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    * @param numBanks the number of data banks.
+    */
+   public DataBufferByte(int size, int numBanks)
+   {
+     super(TYPE_BYTE, size, numBanks);
+     bankData = new byte[numBanks][size];
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data bank.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferByte(byte[] dataArray, int size)
+   {
+     super(TYPE_BYTE, size, 1, 0);
+     bankData = new byte[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+     
+   /**
+    * Creates a new data buffer backed by the specified data bank, with
+    * the specified offset to the first element.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    * @param offset the offset to the first element in the array.
+    */
+   public DataBufferByte(byte[] dataArray, int size, int offset)
+   {
+     super(TYPE_BYTE, size, 1, offset);
+     bankData = new byte[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferByte(byte[][] dataArray, int size)
+   {
+     super(TYPE_BYTE, size, dataArray.length);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks, with
+    * the specified offsets to the first element in each bank.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * @param offsets the offsets to the first element in each data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferByte(byte[][] dataArray, int size, int[] offsets)
+   {
+     super(TYPE_BYTE, size, dataArray.length, offsets);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Returns the first data bank.
+    * 
+    * @return The first data bank.
+    */
+   public byte[] getData()
+   {
+     return data;
+   }
+     
+   /**
+    * Returns a data bank.
+    * 
+    * @param bank the bank index.
+    * @return A data bank.
+    */
+   public byte[] getData(int bank) 
+   {
+     return bankData[bank];
+   }
+     
+   /**
+    * Returns the array underlying this <code>DataBuffer</code>.
+    * 
+    * @return The data banks.
+    */
+   public byte[][] getBankData()
+   {
+     return bankData;
+   }
+   
+   /**
+    * Returns an element from the first data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int i)
+   {
+     return data[i+offset] & 0xff; // get unsigned byte as int
+   }
+   
+   /**
+    * Returns an element from a particular data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param bank the bank index.
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int bank, int i)
+   {
+     // get unsigned byte as int
+     return bankData[bank][i+offsets[bank]] & 0xff;
+   }
+ 
+   /**
+    * Sets an element in the first data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int i, int val)
+   {
+     data[i+offset] = (byte) val;
+   }
+ 
+   /**
+    * Sets an element in a particular data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param bank the data bank index.
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int bank, int i, int val)
+   {
+     bankData[bank][i+offsets[bank]] = (byte) val;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferDouble.java gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferDouble.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferDouble.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferDouble.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,288 ----
+ /* Copyright (C) 2004, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ /* This is one of several classes that are nearly identical. Maybe we
+    should have a central template and generate all these files. This
+    is one of the cases where templates or macros would have been
+    useful to have in Java.
+ 
+    This file has been created using search-replace. My only fear is
+    that these classes will grow out-of-sync as of a result of changes
+    that are not propagated to the other files. As always, mirroring
+    code is a maintenance nightmare.  */
+ 
+ /**
+  * A {@link DataBuffer} that uses an array of <code>double</code> primitives
+  * to represent each of its banks. 
+  * 
+  * @since 1.4
+  *
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public final class DataBufferDouble
+   extends DataBuffer
+ {
+   private double[] data;
+   private double[][] bankData;
+   
+   /**
+    * Creates a new data buffer with a single data bank containing the 
+    * specified number of <code>double</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferDouble(int size)
+   {
+     super(TYPE_DOUBLE, size, 1, 0);
+     bankData = new double[1][];
+     data = new double[size];
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer with the specified number of data banks, 
+    * each containing the specified number of <code>double</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    * @param numBanks the number of data banks.
+    */
+   public DataBufferDouble(int size, int numBanks)
+   {
+     super(TYPE_DOUBLE, size, numBanks);
+     bankData = new double[numBanks][size];
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data bank.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferDouble(double[] dataArray, int size)
+   {
+     super(TYPE_DOUBLE, size, 1, 0);
+     bankData = new double[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+     
+   /**
+    * Creates a new data buffer backed by the specified data bank, with
+    * the specified offset to the first element.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    * @param offset the offset to the first element in the array.
+    */
+   public DataBufferDouble(double[] dataArray, int size, int offset)
+   {
+     super(TYPE_DOUBLE, size, 1, offset);
+     bankData = new double[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferDouble(double[][] dataArray, int size)
+   {
+     super(TYPE_DOUBLE, size, dataArray.length);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks, with
+    * the specified offsets to the first element in each bank.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * @param offsets the offsets to the first element in each data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferDouble(double[][] dataArray, int size, int[] offsets)
+   {
+     super(TYPE_DOUBLE, size, dataArray.length, offsets);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Returns the first data bank.
+    * 
+    * @return The first data bank.
+    */
+   public double[] getData()
+   {
+     return data;
+   }
+     
+   /**
+    * Returns a data bank.
+    * 
+    * @param bank the bank index.
+    * @return A data bank.
+    */
+   public double[] getData(int bank)
+   {
+     return bankData[bank];
+   }
+     
+   /**
+    * Returns the array underlying this <code>DataBuffer</code>.
+    * 
+    * @return The data banks.
+    */
+   public double[][] getBankData()
+   {
+     return bankData;
+   }
+   
+   /**
+    * Returns an element from the first data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int i)
+   {
+     return (int) data[i+offset];
+   }
+ 
+   /**
+    * Returns an element from a particular data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param bank the bank index.
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int bank, int i)
+   {
+     return (int) bankData[bank][i+offsets[bank]];
+   }
+ 
+   /**
+    * Sets an element in the first data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int i, int val)
+   {
+     data[i+offset] = val;
+   }
+ 
+   /**
+    * Sets an element in a particular data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param bank the data bank index.
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int bank, int i, int val)
+   {
+     bankData[bank][i+offsets[bank]] = val;
+   }
+ 
+   public float getElemFloat(int i)
+   {
+     return (float) data[i+offset];
+   }
+     
+   public float getElemFloat(int bank, int i)
+   {
+     return (float) bankData[bank][i+offsets[bank]];
+   }
+ 
+   public void setElemFloat(int i, float val)
+   {
+     data[i+offset] = val;
+   }
+ 
+   public void setElemFloat(int bank, int i, float val)
+   {
+     bankData[bank][i+offsets[bank]] = val;
+   }
+ 
+   public double getElemDouble(int i)
+   {
+     return data[i + offset];
+   }
+     
+   public double getElemDouble(int bank, int i)
+   {
+     return bankData[bank][i + offsets[bank]];
+   }
+ 
+   public void setElemDouble(int i, double val)
+   {
+     data[i + offset] = val;
+   }
+ 
+   public void setElemDouble(int bank, int i, double val)
+   {
+     bankData[bank][i + offsets[bank]] = val;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferFloat.java gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferFloat.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferFloat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferFloat.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,286 ----
+ /* Copyright (C) 2004, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ /* This is one of several classes that are nearly identical. Maybe we
+    should have a central template and generate all these files. This
+    is one of the cases where templates or macros would have been
+    useful to have in Java.
+ 
+    This file has been created using search-replace. My only fear is
+    that these classes will grow out-of-sync as of a result of changes
+    that are not propagated to the other files. As always, mirroring
+    code is a maintenance nightmare.  */
+ 
+ /**
+  * A {@link DataBuffer} that uses an array of <code>float</code> primitives
+  * to represent each of its banks. 
+  * 
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public final class DataBufferFloat
+   extends DataBuffer
+ {
+   private float[] data;
+   private float[][] bankData;
+   
+   /**
+    * Creates a new data buffer with a single data bank containing the 
+    * specified number of <code>float</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferFloat(int size)
+   {
+     super(TYPE_FLOAT, size, 1, 0);
+     bankData = new float[1][];
+     data = new float[size];
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer with the specified number of data banks, 
+    * each containing the specified number of <code>float</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    * @param numBanks the number of data banks.
+    */
+   public DataBufferFloat(int size, int numBanks)
+   {
+     super(TYPE_FLOAT, size, numBanks);
+     bankData = new float[numBanks][size];
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data bank.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferFloat(float[] dataArray, int size)
+   {
+     super(TYPE_FLOAT, size, 1, 0);
+     bankData = new float[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+     
+   /**
+    * Creates a new data buffer backed by the specified data bank, with
+    * the specified offset to the first element.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    * @param offset the offset to the first element in the array.
+    */
+   public DataBufferFloat(float[] dataArray, int size, int offset)
+   {
+     super(TYPE_FLOAT, size, 1, offset);
+     bankData = new float[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferFloat(float[][] dataArray, int size)
+   {
+     super(TYPE_FLOAT, size, dataArray.length);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks, with
+    * the specified offsets to the first element in each bank.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * @param offsets the offsets to the first element in each data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferFloat(float[][] dataArray, int size, int[] offsets)
+   {
+     super(TYPE_FLOAT, size, dataArray.length, offsets);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Returns the first data bank.
+    * 
+    * @return The first data bank.
+    */
+   public float[] getData()
+   {
+     return data;
+   }
+     
+   /**
+    * Returns a data bank.
+    * 
+    * @param bank the bank index.
+    * @return A data bank.
+    */
+   public float[] getData(int bank)
+   {
+     return bankData[bank];
+   }
+     
+   /**
+    * Returns the array underlying this <code>DataBuffer</code>.
+    * 
+    * @return The data banks.
+    */
+   public float[][] getBankData()
+   {
+     return bankData;
+   }
+   
+   /**
+    * Returns an element from the first data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int i)
+   {
+     return (int) data[i+offset];
+   }
+ 
+   /**
+    * Returns an element from a particular data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param bank the bank index.
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int bank, int i)
+   {
+     return (int) bankData[bank][i+offsets[bank]];
+   }
+ 
+   /**
+    * Sets an element in the first data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int i, int val)
+   {
+     data[i+offset] = val;
+   }
+ 
+   /**
+    * Sets an element in a particular data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param bank the data bank index.
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int bank, int i, int val)
+   {
+     bankData[bank][i+offsets[bank]] = val;
+   }
+ 
+   public float getElemFloat(int i)
+   {
+     return data[i+offset];
+   }
+     
+   public float getElemFloat(int bank, int i)
+   {
+     return bankData[bank][i+offsets[bank]];
+   }
+ 
+   public void setElemFloat(int i, float val)
+   {
+     data[i+offset] = val;
+   }
+ 
+   public void setElemFloat(int bank, int i, float val)
+   {
+     bankData[bank][i+offsets[bank]] = val;
+   }
+ 
+   public double getElemDouble(int i)
+   {
+     return getElemFloat(i);
+   }
+     
+   public double getElemDouble(int bank, int i)
+   {
+     return getElemFloat(bank, i);
+   }
+ 
+   public void setElemDouble(int i, double val)
+   {
+     setElemFloat(i, (float) val);
+   }
+ 
+   public void setElemDouble(int bank, int i, double val)
+   {
+     setElemFloat(bank, i, (float) val);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferInt.java gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferInt.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferInt.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferInt.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,244 ----
+ /* Copyright (C) 2000, 2002, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ /* This is one of several classes that are nearly identical. Maybe we
+    should have a central template and generate all these files. This
+    is one of the cases where templates or macros would have been
+    useful to have in Java.
+ 
+    This file has been created using search-replace. My only fear is
+    that these classes will grow out-of-sync as of a result of changes
+    that are not propagated to the other files. As always, mirroring
+    code is a maintenance nightmare.  */
+ 
+ /**
+  * A {@link DataBuffer} that uses an array of <code>int</code> primitives
+  * to represent each of its banks. 
+  * 
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public final class DataBufferInt extends DataBuffer
+ {
+   private int[] data;
+   private int[][] bankData;
+   
+   /**
+    * Creates a new data buffer with a single data bank containing the 
+    * specified number of <code>int</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferInt(int size)
+   {
+     super(TYPE_INT, size, 1, 0);
+     bankData = new int[1][];
+     data = new int[size];
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer with the specified number of data banks, 
+    * each containing the specified number of <code>int</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    * @param numBanks the number of data banks.
+    */
+   public DataBufferInt(int size, int numBanks)
+   {
+     super(TYPE_INT, size, numBanks);
+     bankData = new int[numBanks][size];
+     data = bankData[0];
+   }
+   
+   /**
+    * Creates a new data buffer backed by the specified data bank.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferInt(int[] dataArray, int size)
+   {
+     super(TYPE_INT, size, 1, 0);
+     bankData = new int[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+     
+   /**
+    * Creates a new data buffer backed by the specified data bank, with
+    * the specified offset to the first element.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    * @param offset the offset to the first element in the array.
+    */
+   public DataBufferInt(int[] dataArray, int size, int offset)
+   {
+     super(TYPE_INT, size, 1, offset);
+     bankData = new int[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+   
+   /**
+    * Creates a new data buffer backed by the specified data banks.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferInt(int[][] dataArray, int size)
+   {
+     super(TYPE_INT, size, dataArray.length);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+   
+   /**
+    * Creates a new data buffer backed by the specified data banks, with
+    * the specified offsets to the first element in each bank.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * @param offsets the offsets to the first element in each data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferInt(int[][] dataArray, int size, int[] offsets)
+   {
+     super(TYPE_INT, size, dataArray.length, offsets);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Returns the first data bank.
+    * 
+    * @return The first data bank.
+    */
+   public int[] getData()
+   {
+     return data;
+   }
+     
+   /**
+    * Returns a data bank.
+    * 
+    * @param bank the bank index.
+    * @return A data bank.
+    */
+   public int[] getData(int bank)
+   {
+     return bankData[bank];
+   }
+   
+   /**
+    * Returns the array underlying this <code>DataBuffer</code>.
+    * 
+    * @return The data banks.
+    */
+   public int[][] getBankData()
+   {
+     return bankData;
+   }
+   
+   /**
+    * Returns an element from the first data bank.  The <code>offset</code> is
+    * added to the specified index before accessing the underlying data array.
+    * 
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int i)
+   {
+     return data[i+offset];
+   }
+ 
+   /**
+    * Returns an element from a particular data bank.  The <code>offset</code> 
+    * is added to the specified index before accessing the underlying data 
+    * array.
+    * 
+    * @param bank the bank index.
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int bank, int i)
+   {
+     // get unsigned int as int
+     return bankData[bank][i+offsets[bank]];
+   }
+ 
+   /**
+    * Sets an element in the first data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int i, int val)
+   {
+     data[i+offset] = val;
+   }
+   
+   /**
+    * Sets an element in a particular data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param bank the data bank index.
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int bank, int i, int val)
+   {
+     bankData[bank][i+offsets[bank]] = val;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferShort.java gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferShort.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferShort.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferShort.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,245 ----
+ /* DataBufferShort.java --
+    Copyright (C) 2004, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ /* This is one of several classes that are nearly identical. Maybe we
+    should have a central template and generate all these files. This
+    is one of the cases where templates or macros would have been
+    useful to have in Java.
+ 
+    This file has been created using search-replace. My only fear is
+    that these classes will grow out-of-sync as of a result of changes
+    that are not propagated to the other files. As always, mirroring
+    code is a maintenance nightmare.  */
+ 
+ /**
+  * A {@link DataBuffer} that uses an array of <code>short</code> primitives
+  * to represent each of its banks. 
+  * 
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public final class DataBufferShort extends DataBuffer
+ {
+   private short[] data;
+   private short[][] bankData;
+   
+   /**
+    * Creates a new data buffer with a single data bank containing the 
+    * specified number of <code>short</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferShort(int size)
+   {
+     super(TYPE_SHORT, size, 1, 0);
+     bankData = new short[1][];
+     data = new short[size];
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer with the specified number of data banks, 
+    * each containing the specified number of <code>short</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    * @param numBanks the number of data banks.
+    */
+   public DataBufferShort(int size, int numBanks)
+   {
+     super(TYPE_SHORT, size, numBanks);
+     bankData = new short[numBanks][size];
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data bank.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferShort(short[] dataArray, int size)
+   {
+     super(TYPE_SHORT, size, 1, 0);
+     bankData = new short[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+     
+   /**
+    * Creates a new data buffer backed by the specified data bank, with
+    * the specified offset to the first element.
+    * <p>
+    * Note: there is no exception when <code>dataArray</code> is 
+    * <code>null</code>, but in that case an exception will be thrown
+    * later if you attempt to access the data buffer.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    * @param offset the offset to the first element in the array.
+    */
+   public DataBufferShort(short[] dataArray, int size, int offset)
+   {
+     super(TYPE_SHORT, size, 1, offset);
+     bankData = new short[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferShort(short[][] dataArray, int size)
+   {
+     super(TYPE_SHORT, size, dataArray.length);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks, with
+    * the specified offsets to the first element in each bank.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * @param offsets the offsets to the first element in each data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferShort(short[][] dataArray, int size, int[] offsets)
+   {
+     super(TYPE_SHORT, size, dataArray.length, offsets);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Returns the first data bank.
+    * 
+    * @return The first data bank.
+    */
+   public short[] getData()
+   {
+     return data;
+   }
+     
+   /**
+    * Returns a data bank.
+    * 
+    * @param bank the bank index.
+    * @return A data bank.
+    */
+   public short[] getData(int bank)
+   {
+     return bankData[bank];
+   }
+     
+   /**
+    * Returns the array underlying this <code>DataBuffer</code>.
+    * 
+    * @return The data banks.
+    */
+   public short[][] getBankData()
+   {
+     return bankData;
+   }
+   
+   /**
+    * Returns an element from the first data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int i)
+   {
+     return data[i+offset];
+   }
+ 
+   /**
+    * Returns an element from a particular data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param bank the bank index.
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int bank, int i)
+   {
+     return bankData[bank][i+offsets[bank]];
+   }
+ 
+   /**
+    * Sets an element in the first data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int i, int val)
+   {
+     data[i+offset] = (short) val;
+   }
+ 
+   /**
+    * Sets an element in a particular data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param bank the data bank index.
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int bank, int i, int val)
+   {
+     bankData[bank][i+offsets[bank]] = (short) val;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferUShort.java gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferUShort.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/DataBufferUShort.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/DataBufferUShort.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,246 ----
+ /* DataBufferUShort.java --
+    Copyright (C) 2000, 2002, 2004, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ /* This is one of several classes that are nearly identical. Maybe we
+    should have a central template and generate all these files. This
+    is one of the cases where templates or macros would have been
+    useful to have in Java.
+ 
+    This file has been created using search-replace. My only fear is
+    that these classes will grow out-of-sync as of a result of changes
+    that are not propagated to the other files. As always, mirroring
+    code is a maintenance nightmare.  */
+ 
+ /**
+  * A {@link DataBuffer} that uses an array of <code>short</code> primitives
+  * to represent each of its banks. 
+  * 
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public final class DataBufferUShort extends DataBuffer
+ {
+   private short[] data;
+   private short[][] bankData;
+   
+   /**
+    * Creates a new data buffer with a single data bank containing the 
+    * specified number of <code>short</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    */
+   public DataBufferUShort(int size)
+   {
+     super(TYPE_USHORT, size, 1, 0);
+     bankData = new short[1][];
+     data = new short[size];
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer with the specified number of data banks, 
+    * each containing the specified number of <code>short</code> elements.
+    * 
+    * @param size the number of elements in the data bank.
+    * @param numBanks the number of data banks.
+    */
+   public DataBufferUShort(int size, int numBanks)
+   {
+     super(TYPE_USHORT, size, numBanks);
+     bankData = new short[numBanks][size];
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data bank.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    *
+    * @throws NullPointerException if dataArray is null
+    */
+   public DataBufferUShort(short[] dataArray, int size)
+   {
+     super(TYPE_USHORT, size, 1, 0);
+     if (dataArray == null)
+       throw new NullPointerException();
+     bankData = new short[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+     
+   /**
+    * Creates a new data buffer backed by the specified data bank, with
+    * the specified offset to the first element.
+    * 
+    * @param dataArray the data bank.
+    * @param size the number of elements in the data bank.
+    * @param offset the offset to the first element in the array.
+    *
+    * @throws NullPointerException if dataArray is null
+    */
+   public DataBufferUShort(short[] dataArray, int size, int offset)
+   {
+     super(TYPE_USHORT, size, 1, offset);
+     if (dataArray == null)
+       throw new NullPointerException();
+     bankData = new short[1][];
+     data = dataArray;
+     bankData[0] = data;
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferUShort(short[][] dataArray, int size)
+   {
+     super(TYPE_USHORT, size, dataArray.length);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Creates a new data buffer backed by the specified data banks, with
+    * the specified offsets to the first element in each bank.
+    * 
+    * @param dataArray the data banks.
+    * @param size the number of elements in the data bank.
+    * @param offsets the offsets to the first element in each data bank.
+    * 
+    * @throws NullPointerException if <code>dataArray</code> is 
+    *         <code>null</code>.
+    */
+   public DataBufferUShort(short[][] dataArray, int size, int[] offsets)
+   {
+     super(TYPE_USHORT, size, dataArray.length, offsets);
+     bankData = dataArray;
+     data = bankData[0];
+   }
+ 
+   /**
+    * Returns the first data bank.
+    * 
+    * @return The first data bank.
+    */
+   public short[] getData()
+   {
+     return data;
+   }
+     
+   /**
+    * Returns a data bank.
+    * 
+    * @param bank the bank index.
+    * @return A data bank.
+    */
+   public short[] getData(int bank)
+   {
+     return bankData[bank];
+   }
+     
+   /**
+    * Returns the array underlying this <code>DataBuffer</code>.
+    * 
+    * @return The data banks.
+    */
+   public short[][] getBankData()
+   {
+     return bankData;
+   }
+   
+   /**
+    * Returns an element from the first data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int i)
+   {
+     return data[i+offset] & 0xffff; // get unsigned short as int
+   }
+ 
+   /**
+    * Returns an element from a particular data bank.  The offset (specified in
+    * the constructor) is added to <code>i</code> before accessing the 
+    * underlying data array.
+    * 
+    * @param bank the bank index.
+    * @param i the element index.
+    * @return The element.
+    */
+   public int getElem(int bank, int i)
+   {
+     // get unsigned short as int
+     return bankData[bank][i+offsets[bank]] & 0xffff;
+   }
+ 
+   /**
+    * Sets an element in the first data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int i, int val)
+   {
+     data[i+offset] = (short) val;
+   }
+ 
+   /**
+    * Sets an element in a particular data bank.  The offset (specified in the
+    * constructor) is added to <code>i</code> before updating the underlying
+    * data array.
+    * 
+    * @param bank the data bank index.
+    * @param i the element index.
+    * @param val the new element value.
+    */
+   public void setElem(int bank, int i, int val)
+   {
+     bankData[bank][i+offsets[bank]] = (short) val;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/DirectColorModel.java gcc-4.1.0/libjava/classpath/java/awt/image/DirectColorModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/DirectColorModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/DirectColorModel.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,436 ----
+ /* DirectColorModel.java --
+    Copyright (C) 1999, 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import gnu.java.awt.Buffers;
+ 
+ import java.awt.Point;
+ import java.awt.Transparency;
+ import java.awt.color.ColorSpace;
+ 
+ /**
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  * @author C. Brian Jones (cbj@gnu.org)
+  * @author Mark Benvenuto (mcb54@columbia.edu)
+  */
+ public class DirectColorModel extends PackedColorModel
+ {
+   /**
+    * For the color model created with this constructor the pixels
+    * will have fully opaque alpha components with a value of 255.
+    * Each mask should describe a fully contiguous set of bits in the
+    * most likely order of alpha, red, green, blue from the most significant
+    * byte to the least significant byte.
+    * 
+    * @param pixelBits the number of bits wide used for bit size of pixel values
+    * @param rmask the bits describing the red component of a pixel
+    * @param gmask the bits describing the green component of a pixel
+    * @param bmask the bits describing the blue component of a pixel 
+    */
+   public DirectColorModel(int pixelBits, int rmask, int gmask, int bmask)
+   {
+     this(ColorSpace.getInstance(ColorSpace.CS_sRGB), pixelBits,
+ 	 rmask, gmask, bmask, 0, 
+ 	 false, // not alpha premultiplied
+ 	 Buffers.smallestAppropriateTransferType(pixelBits) // find type
+ 	 );
+   }
+ 
+   /**
+    * For the color model created with this constructor the pixels
+    * will have fully opaque alpha components with a value of 255.
+    * Each mask should describe a fully contiguous set of bits in the
+    * most likely order of red, green, blue from the most significant
+    * byte to the least significant byte.
+    * 
+    * @param pixelBits the number of bits wide used for bit size of pixel values
+    * @param rmask the bits describing the red component of a pixel
+    * @param gmask the bits describing the green component of a pixel
+    * @param bmask the bits describing the blue component of a pixel 
+    * @param amask the bits describing the alpha component of a pixel 
+    */
+   public DirectColorModel(int pixelBits,
+ 			  int rmask, int gmask, int bmask, int amask)
+   {
+     this(ColorSpace.getInstance(ColorSpace.CS_sRGB), pixelBits,
+ 	 rmask, gmask, bmask, amask,
+ 	 false, // not alpha premultiplied
+ 	 Buffers.smallestAppropriateTransferType(pixelBits) // find type
+ 	 );
+   }
+ 
+   public DirectColorModel(ColorSpace cspace, int pixelBits,
+ 			  int rmask, int gmask, int bmask, int amask,
+ 			  boolean isAlphaPremultiplied,
+ 			  int transferType)
+   {
+     super(cspace, pixelBits,
+ 	  rmask, gmask, bmask, amask, isAlphaPremultiplied,
+ 	  ((amask == 0) ? Transparency.OPAQUE : Transparency.TRANSLUCENT),
+ 	  transferType);
+   }
+     
+   public final int getRedMask()
+   {
+     return getMask(0);
+   }
+ 
+   public final int getGreenMask()
+   {
+     return getMask(1);
+   }
+ 
+   public final int getBlueMask()
+   {
+     return getMask(2);
+   }
+ 
+   public final int getAlphaMask()
+   {
+     return hasAlpha() ? getMask(3) : 0;
+   }
+ 
+   /**
+    * Get the red component of the given pixel.
+    * <br>
+    */
+   public final int getRed(int pixel)
+   {
+     return extractAndNormalizeSample(pixel, 0);
+   }
+ 
+   /**
+    * Get the green component of the given pixel.
+    * <br>
+    */
+   public final int getGreen(int pixel)
+   {
+     return extractAndNormalizeSample(pixel, 1);
+   }
+   
+   /**
+    * Get the blue component of the given pixel.
+    * <br>
+    */
+   public final int getBlue(int pixel)
+   {
+     return extractAndNormalizeSample(pixel, 2);
+   }
+ 
+   /**
+    * Get the alpha component of the given pixel.
+    * <br>
+    */
+   public final int getAlpha(int pixel)
+   {
+     if (!hasAlpha())
+       return 255;
+     return extractAndScaleSample(pixel, 3);
+   }
+ 
+   private int extractAndNormalizeSample(int pixel, int component)
+   {
+     int value = extractAndScaleSample(pixel, component);
+     if (hasAlpha() && isAlphaPremultiplied())
+       value = value*255/getAlpha(pixel);
+     return value;
+   }
+ 
+   private int extractAndScaleSample(int pixel, int component)
+   {
+     int field = pixel & getMask(component);
+     int to8BitShift =
+       8 - shifts[component] - getComponentSize(component);
+     return (to8BitShift>0) ?
+       (field << to8BitShift) :
+       (field >>> (-to8BitShift));
+   }
+ 
+   /**
+    * Get the RGB color value of the given pixel using the default
+    * RGB color model. 
+    * <br>
+    *
+    * @param pixel a pixel value
+    */
+   public final int getRGB(int pixel) 
+   {
+     /* FIXME: The Sun docs show that this method is overridden, but I
+        don't see any way to improve on the superclass
+        implementation. */
+     return super.getRGB(pixel);
+   }
+ 
+   public int getRed(Object inData)
+   {
+     return getRed(getPixelFromArray(inData));
+   }
+ 
+   public int getGreen(Object inData)
+   {
+     return getGreen(getPixelFromArray(inData));
+   }
+ 
+   public int getBlue(Object inData)
+   {
+     return getBlue(getPixelFromArray(inData));
+   }
+     
+   public int getAlpha(Object inData)
+   {
+     return getAlpha(getPixelFromArray(inData));
+   }
+ 
+   public int getRGB(Object inData)
+   {
+     return getRGB(getPixelFromArray(inData));
+   }
+     
+   /**
+    * Converts a normalized pixel int value in the sRGB color
+    * space to an array containing a single pixel of the color space
+    * of the color model.
+    *
+    * <p>This method performs the inverse function of
+    * <code>getRGB(Object inData)</code>.
+    *
+    * @param rgb pixel as a normalized sRGB, 0xAARRGGBB value.
+    *  
+    * @param pixel to avoid needless creation of arrays, an array to
+    * use to return the pixel can be given. If null, a suitable array
+    * will be created.
+    *
+    * @return array of transferType containing a single pixel. The
+    * pixel should be encoded in the natural way of the color model.
+    *
+    * @see #getRGB(Object)
+    */
+   public Object getDataElements(int rgb, Object pixel)
+   {
+     // FIXME: handle alpha multiply
+     
+     int pixelValue = 0;
+     int a = 0;
+     if (hasAlpha()) {
+       a = (rgb >>> 24) & 0xff;
+       pixelValue = valueToField(a, 3, 8);
+     }
+ 	
+     if (hasAlpha() && isAlphaPremultiplied())
+       {
+ 	int r, g, b;
+ 	/* if r=0xff and a=0xff, then resulting
+ 	   value will be (r*a)>>>8 == 0xfe... This seems wrong.
+ 	   We should divide by 255 rather than shifting >>>8 after
+ 	   multiplying.
+ 	   
+ 	   Too bad, shifting is probably less expensive.
+ 	   r = ((rgb >>> 16) & 0xff)*a;
+ 	   g = ((rgb >>>  8) & 0xff)*a;
+ 	   b = ((rgb >>> 0) & 0xff)*a; */
+ 	/* The r, g, b values we calculate are 16 bit. This allows
+ 	   us to avoid discarding the lower 8 bits obtained if
+ 	   multiplying with the alpha band. */
+ 	
+ 	// using 16 bit values
+ 	r = ((rgb >>> 8) & 0xff00)*a/255;
+ 	g = ((rgb >>> 0) & 0xff00)*a/255;
+ 	b = ((rgb <<  8) & 0xff00)*a/255;
+ 	pixelValue |= 
+ 	  valueToField(r, 0, 16) |  // Red
+ 	  valueToField(g, 1, 16) |  // Green
+ 	  valueToField(b, 2, 16);   // Blue
+       }
+     else
+       {
+ 	int r, g, b;
+ 	// using 8 bit values
+ 	r = (rgb >>> 16) & 0xff;
+ 	g = (rgb >>>  8) & 0xff;
+ 	b = (rgb >>>  0) & 0xff;
+ 	
+ 	pixelValue |= 
+ 	  valueToField(r, 0, 8) |  // Red
+ 	  valueToField(g, 1, 8) |  // Green
+ 	  valueToField(b, 2, 8);   // Blue
+       }
+     
+     /* In this color model, the whole pixel fits in the first element
+        of the array. */
+     DataBuffer buffer = Buffers.createBuffer(transferType, pixel, 1);
+     buffer.setElem(0, pixelValue);
+     return Buffers.getData(buffer);
+   }
+     
+   /**
+    * Converts a value to the correct field bits based on the
+    * information derived from the field masks.
+    *
+    * @param highBit the position of the most significant bit in the
+    * val parameter.
+    */
+   private int valueToField(int val, int component, int highBit)
+   {
+     int toFieldShift = 
+       getComponentSize(component) + shifts[component] - highBit;
+     int ret = (toFieldShift>0) ?
+       (val << toFieldShift) :
+       (val >>> (-toFieldShift));
+     return ret & getMask(component);
+   }  
+ 
+   /**
+    * Converts a 16 bit value to the correct field bits based on the
+    * information derived from the field masks.
+    */
+   private int value16ToField(int val, int component)
+   {
+     int toFieldShift = getComponentSize(component) + shifts[component] - 16;
+     return (toFieldShift>0) ?
+       (val << toFieldShift) :
+       (val >>> (-toFieldShift));
+   }
+ 
+   /**
+    * Fills an array with the unnormalized component samples from a
+    * pixel value. I.e. decompose the pixel, but not perform any
+    * color conversion.
+    */
+   public final int[] getComponents(int pixel, int[] components, int offset)
+   {
+     int numComponents = getNumComponents();
+     if (components == null) components = new int[offset + numComponents];
+     
+     for (int b=0; b<numComponents; b++)
+       components[offset++] = (pixel&getMask(b)) >>> shifts[b];
+ 	
+     return components;
+   }
+ 
+   public final int[] getComponents(Object pixel, int[] components,
+ 				   int offset)
+   {
+     return getComponents(getPixelFromArray(pixel), components, offset);
+   }
+ 
+   /**
+    * Creates a <code>WriteableRaster</code> that has a <code>SampleModel</code>
+    * that is compatible with this <code>ColorModel</code>.
+    *
+    * @param w the width of the writeable raster to create
+    * @param h the height of the writeable raster to create
+    *
+    * @throws IllegalArgumentException if <code>w</code> or <code>h</code>
+    *         is less than or equal to zero
+    */
+   public final WritableRaster createCompatibleWritableRaster(int w, int h)
+   {
+     // Sun also makes this check here.
+     if(w <= 0 || h <= 0)
+       throw new IllegalArgumentException("width (=" + w + ") and height (="
+                                          + h + ") must be > 0");
+ 
+     SampleModel sm = createCompatibleSampleModel(w, h);
+     Point origin = new Point(0, 0);
+     return Raster.createWritableRaster(sm, origin);	
+   }
+ 
+   public int getDataElement(int[] components, int offset)
+   {
+     int numComponents = getNumComponents();
+     int pixelValue = 0;
+     
+     for (int c=0; c<numComponents; c++)
+       pixelValue |= (components[offset++] << shifts[c]) & getMask(c);
+ 
+     return pixelValue;
+   }  
+ 
+   public Object getDataElements(int[] components, int offset, Object obj)
+   {
+     /* In this color model, the whole pixel fits in the first element
+        of the array. */
+     int pixelValue = getDataElement(components, offset);
+ 
+     DataBuffer buffer = Buffers.createBuffer(transferType, obj, 1);
+     buffer.setElem(0, pixelValue);
+     return Buffers.getData(buffer);
+   }
+     
+   public final ColorModel coerceData (WritableRaster raster,
+ 				      boolean isAlphaPremultiplied)
+   {
+     if (this.isAlphaPremultiplied == isAlphaPremultiplied)
+       return this;
+ 	
+     /* TODO: provide better implementation based on the
+        assumptions we can make due to the specific type of the
+        color model. */
+     super.coerceData(raster, isAlphaPremultiplied);
+ 	
+     return new ComponentColorModel(cspace, bits, hasAlpha(),
+ 				   isAlphaPremultiplied, // argument
+ 				   transparency, transferType);
+   } 
+ 
+   public boolean isCompatibleRaster(Raster raster)
+   {
+     /* FIXME: the Sun docs say this method is overridden here, 
+        but I don't see any way to improve upon the implementation
+        in ColorModel. */
+     return super.isCompatibleRaster(raster);
+   }
+ 
+   String stringParam()
+   {
+     return super.stringParam() +
+       ", redMask=" + Integer.toHexString(getRedMask()) +
+       ", greenMask=" + Integer.toHexString(getGreenMask()) +
+       ", blueMask=" + Integer.toHexString(getBlueMask()) +
+       ", alphaMask=" + Integer.toHexString(getAlphaMask());
+   }
+ 
+   public String toString()
+   {
+     /* FIXME: Again, docs say override, but how do we improve upon the
+        superclass implementation? */
+     return super.toString();
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/FilteredImageSource.java gcc-4.1.0/libjava/classpath/java/awt/image/FilteredImageSource.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/FilteredImageSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/FilteredImageSource.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,125 ----
+ /* FilteredImageSource.java -- Java class for providing image data 
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.util.Hashtable;
+ 
+ /**
+  *
+  * @see ImageConsumer
+  * @author C. Brian Jones (cbj@gnu.org) 
+  */
+ public class FilteredImageSource implements ImageProducer
+ {
+     ImageProducer ip;
+     ImageFilter filter;
+     Hashtable consumers = new Hashtable();
+ 
+     /**
+      * The given filter is applied to the given image producer
+      * to create a new image producer.  
+      */
+     public FilteredImageSource(ImageProducer ip, ImageFilter filter) {
+ 	this.ip = ip;
+ 	this.filter = filter;
+     }
+ 
+     /**
+      * Used to register an <code>ImageConsumer</code> with this
+      * <code>ImageProducer</code>.  
+      */
+     public synchronized void addConsumer(ImageConsumer ic) {
+ 	if (consumers.containsKey(ic))
+ 	    return;
+ 
+ 	ImageFilter f = filter.getFilterInstance(ic);
+ 	consumers.put(ic, f);
+ 	ip.addConsumer(f);
+     }
+ 
+     /**
+      * Used to determine if the given <code>ImageConsumer</code> is
+      * already registered with this <code>ImageProducer</code>.  
+      */
+     public synchronized boolean isConsumer(ImageConsumer ic) {
+ 	ImageFilter f = (ImageFilter)consumers.get(ic);
+ 	if (f != null)
+ 	    return ip.isConsumer(f);
+ 	return false;
+     }
+ 
+     /**
+      * Used to remove an <code>ImageConsumer</code> from the list of
+      * registered consumers for this <code>ImageProducer</code>.  
+      */
+     public synchronized void removeConsumer(ImageConsumer ic) {
+ 	ImageFilter f = (ImageFilter)consumers.remove(ic);
+ 	if (f != null)
+ 	    ip.removeConsumer(f);
+     }
+ 
+     /**
+      * Used to register an <code>ImageConsumer</code> with this
+      * <code>ImageProducer</code> and then immediately start
+      * reconstruction of the image data to be delivered to all
+      * registered consumers.  
+      */
+     public void startProduction(ImageConsumer ic) {
+ 	ImageFilter f;
+ 	if (!(consumers.containsKey(ic))) {
+ 	    f = filter.getFilterInstance(ic);
+ 	    consumers.put(ic, f);
+ 	    ip.addConsumer(f);
+ 	} else { 
+ 	    f = (ImageFilter)consumers.get( ic );
+ 	}
+ 	ip.startProduction(f);
+     }
+ 
+     /**
+      * Used to register an <code>ImageConsumer</code> with this
+      * <code>ImageProducer</code> and then request that this producer
+      * resend the image data in the order top-down, left-right.  
+      */
+     public void requestTopDownLeftRightResend(ImageConsumer ic) {
+ 	ImageFilter f = (ImageFilter)consumers.get(ic);
+ 	ip.requestTopDownLeftRightResend(f);
+     }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ImageConsumer.java gcc-4.1.0/libjava/classpath/java/awt/image/ImageConsumer.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ImageConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ImageConsumer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,216 ----
+ /* ImageConsumer.java -- Java interface for image consumption
+    Copyright (C) 1999, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.util.Hashtable;
+ 
+ /**
+  * An object implementing the <code>ImageProducer</code> interface can
+  * use objects implementing this interface to deliver the image data.
+  * 
+  * @author C. Brian Jones (cbj@gnu.org)
+  */
+ public interface ImageConsumer
+ {
+     /**
+      * The pixel order may be random.  This should be
+      * the default assumption of the <code>ImageConsumer</code>.
+      *
+      * @see #setHints 
+      */
+     int RANDOMPIXELORDER = 1;
+ 
+     /**
+      * The pixel order is top-down, left-right.
+      *
+      * @see #setHints
+      */
+     int TOPDOWNLEFTRIGHT = 2;
+ 
+     /**
+      * The pixel order is in multiples of complete scanlines.
+      *
+      * @see #setHints
+      */
+     int COMPLETESCANLINES = 4;
+ 
+     /**
+      * The pixels will be delivered in a single pass.  There is at
+      * most one call to <code>setPixels</code> for any single pixel.
+      *
+      * @see #setHints
+      * @see #setPixels(int, int, int, int, ColorModel, int[], int, int) 
+      */
+     int SINGLEPASS = 8;
+ 
+     /**
+      * The pixels will be delivered with multiple calls to
+      * <code>setPixels</code>.  The image contains a single frame
+      * which ends when <code>imageComplete</code> is called with the
+      * <code>STATICIMAGEDONE</code> flag.  If the image is constantly
+      * changing such as with video then the end of each frame is
+      * marked by a similar call to <code>imageComplete</code> with the
+      * <code>SINGLEFRAMEDONE</code> flag.
+      * 
+      * @see #setHints
+      * @see #imageComplete 
+      */
+     int SINGLEFRAME = 16;
+ 
+     /**
+      * Indicates an error occurred while producing an image.
+      *
+      * @see #imageComplete
+      */
+     int IMAGEERROR = 1;
+ 
+     /**
+      * A single frame is complete but more will follow.
+      * 
+      * @see #imageComplete
+      */
+     int SINGLEFRAMEDONE = 2;
+ 
+     /**
+      * The image is complete and no more pixels or frames will follow.
+      *
+      * @see #imageComplete
+      */
+     int STATICIMAGEDONE = 3;
+ 
+     /**
+      * Production of the image has been aborted.
+      *
+      * @see #imageComplete
+      */
+     int IMAGEABORTED = 4;
+ 
+     /**
+      * An <code>ImageProducer</code> indicates the size of the image
+      * being produced using this method.
+      * 
+      * @param width the width of the image
+      * @param height the height of the image 
+      */
+     void setDimensions(int width, int height);
+ 
+     /**
+      * An <code>ImageProducer</code> can set a list of properties
+      * associated with this image by using this method.
+      *
+      * @param props the list of properties associated with this image 
+      */
+     void setProperties(Hashtable props);
+ 
+     /**
+      * This <code>ColorModel</code> should indicate the model used by
+      * the majority of calls to <code>setPixels</code>.  Each call to
+      * <code>setPixels</code> could however indicate a different
+      * <code>ColorModel</code>.
+      *
+      * @param model the color model to be used most often by setPixels
+      * @see ColorModel 
+      */
+     void setColorModel(ColorModel model);
+ 
+     /**
+      * The <code>ImageProducer</code> should call this method with a
+      * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
+      * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
+      * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code>.
+      * 
+      * @param flags a bit mask of hints
+      */
+     void setHints(int flags);
+ 
+     /**
+      * Deliver a subset of an ImageProducer's pixels to this ImageConsumer.
+      *
+      * Each element of the pixels array represents one pixel.  The
+      * pixel data is formatted according to the color model model.
+      * The x and y parameters are the coordinates of the block of
+      * pixels being delivered to this ImageConsumer.  They are
+      * specified relative to the top left corner of the image being
+      * produced.  Likewise, w and h are the pixel block's dimensions.
+      *
+      * @param x x coordinate of pixel block
+      * @param y y coordinate of pixel block
+      * @param w width of pixel block
+      * @param h height of pixel block
+      * @param model color model used to interpret pixel data
+      * @param pixels pixel block data
+      * @param offset offset into pixels array
+      * @param scansize width of one row in the pixel block
+      */
+     void setPixels(int x, int y, int w, int h, 
+ 	   ColorModel model, byte[] pixels, int offset, int scansize);
+ 
+     /**
+      * Deliver a subset of an ImageProducer's pixels to this ImageConsumer.
+      *
+      * Each element of the pixels array represents one pixel.  The
+      * pixel data is formatted according to the color model model.
+      * The x and y parameters are the coordinates of the rectangular
+      * region of pixels being delivered to this ImageConsumer,
+      * specified relative to the top left corner of the image being
+      * produced.  Likewise, w and h are the pixel region's dimensions.
+      *
+      * @param x x coordinate of pixel block
+      * @param y y coordinate of pixel block
+      * @param w width of pixel block
+      * @param h height of pixel block
+      * @param model color model used to interpret pixel data
+      * @param pixels pixel block data
+      * @param offset offset into pixels array
+      * @param scansize width of one row in the pixel block
+      */
+     void setPixels(int x, int y, int w, int h, 
+            ColorModel model, int[] pixels, int offset, int scansize);
+ 
+     /**
+      * The <code>ImageProducer</code> calls this method to indicate a
+      * single frame or the entire image is complete.  The method is
+      * also used to indicate an error in loading or producing the
+      * image.  
+      *
+      * @param status the status of image production, represented by a
+      * bitwise OR of ImageConsumer flags
+      */
+     void imageComplete(int status);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ImageFilter.java gcc-4.1.0/libjava/classpath/java/awt/image/ImageFilter.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ImageFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ImageFilter.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,228 ----
+ /* ImageFilter.java -- Java class for filtering images
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.util.Hashtable;
+ 
+ /**
+  * The <code>ImageFilter</code> class is a base class which can be
+  * extended to provide different types of filters for an image.  By
+  * default this class does nothing to an image passing through it.
+  *
+  * @author C. Brian Jones (cbj@gnu.org) 
+  */
+ public class ImageFilter implements ImageConsumer, Cloneable
+ {
+     /**
+      * The consumer this filter is filtering an image data stream for.
+      * It is initialized in the method <code>getFilterInstance</code>.  
+      */
+     protected ImageConsumer consumer = null;
+ 
+     /**
+      * The <code>ImageConsumer</code> can use this method to request
+      * the pixels be delivered in top-down, left-right order.  
+      * <br> 
+      * The filter can respond in three different ways.  
+      * <ul>
+      *   <li>The default behavior is to forward the request to the 
+      *       <code>ImageProducer</code> 
+      *       using the method <code>requestTopDownLeftRightResend</code>
+      *       and using the filter as the consumer.</li>
+      *   <li>The filter has the pixels and can retransmit them in the
+      *       top-down, left-right order.</li>
+      *   <li>The filter can do nothing when this method is called.</li>
+      * </ul>
+      */
+     public void resendTopDownLeftRight(ImageProducer ip)
+     {
+ 	ip.requestTopDownLeftRightResend(this);
+     }
+ 
+     /**
+      * By default, returns a shallow copy of the object created by
+      * <code>Object.clone()</code> 
+      *
+      * @see java.lang.Object#clone ()
+      */
+     public Object clone()
+     {
+       try
+         {
+           return super.clone();
+         }
+       catch (CloneNotSupportedException e)
+         {
+           // This should never happen as this class implements the
+           // Cloneable interface.
+           throw new InternalError ();
+         }
+     }
+ 
+     /**
+      * This is the only method which can set the
+      * <code>ImageConsumer</code> for this filter.  By default a clone
+      * of this filter with the appropriate consumer set is returned.  
+      *
+      * @see #clone ()
+      */
+     public ImageFilter getFilterInstance(ImageConsumer ic)
+     {
+ 	if ( ic == null )
+ 	    throw new IllegalArgumentException("null argument for ImageFilter.getFilterInstance(ImageConsumer)");
+ 
+ 	consumer = ic;
+ 	ImageFilter f = (ImageFilter)clone();
+ 	consumer = null;
+ 	return f;
+     }
+ 
+     /**
+      * An <code>ImageProducer</code> indicates the size of the image
+      * being produced using this method.  A filter can override this 
+      * method to intercept these calls from the producer in order to
+      * change either the width or the height before in turn calling
+      * the consumer's <code>setDimensions</code> method.
+      * 
+      * @param width the width of the image
+      * @param height the height of the image 
+      */
+     public void setDimensions(int width, int height)
+     {
+       if (consumer != null)
+ 	consumer.setDimensions(width, height);
+     }
+ 
+     /**
+      * An <code>ImageProducer</code> can set a list of properties
+      * associated with this image by using this method.
+      *
+      * @param props the list of properties associated with this image 
+      */
+     public void setProperties(Hashtable props)
+     {
+ 	props.put("filters", "ImageFilter");
+ 	if (consumer != null)
+ 	  consumer.setProperties(props);
+     }
+ 
+     /**
+      * Override this method to process calls to this method from the
+      * <code>ImageProducer</code>.  By default the <code>setColorModel</code>
+      * method of the consumer is called with the specified <code>model</code>.
+      *
+      * @param model the color model to be used most often by setPixels
+      * @see ColorModel */
+     public void setColorModel(ColorModel model)
+     {
+       if (consumer != null)
+ 	consumer.setColorModel(model);
+     }
+ 
+     /**
+      * The <code>ImageProducer</code> should call this method with a
+      * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
+      * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
+      * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code> from the 
+      * <code>ImageConsumer</code> interface.
+      * 
+      * @param flags a bit mask of hints
+      * @see ImageConsumer
+      */
+     public void setHints(int flags)
+     {
+       if (consumer != null)
+ 	consumer.setHints(flags);
+     }
+ 
+     /**
+      * This function delivers a rectangle of pixels where any
+      * pixel(m,n) is stored in the array as a <code>byte</code> at
+      * index (n * scansize + m + offset).  
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+ 	   ColorModel model, byte[] pixels, int offset, int scansize)
+     {
+       if (consumer != null)
+ 	consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
+     }
+ 
+     /**
+      * This function delivers a rectangle of pixels where any
+      * pixel(m,n) is stored in the array as an <code>int</code> at
+      * index (n * scansize + m + offset).  
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+            ColorModel model, int[] pixels, int offset, int scansize)
+     {
+       if (consumer != null)
+ 	consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
+     }
+ 
+     /**
+      * The <code>ImageProducer</code> calls this method to indicate a
+      * single frame or the entire image is complete.  The method is
+      * also used to indicate an error in loading or producing the
+      * image.  
+      */
+     public void imageComplete(int status)
+     {
+       if (consumer != null)
+ 	consumer.imageComplete(status);
+     }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ImageObserver.java gcc-4.1.0/libjava/classpath/java/awt/image/ImageObserver.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ImageObserver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ImageObserver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,129 ----
+ /* ImageObserver.java -- Java interface for asynchronous updates to an image
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Image;
+ 
+ /**
+  * An object implementing the <code>ImageObserver</code> interface can
+  * receive updates on image construction from an
+  * <code>ImageProducer</code> asynchronously.
+  *
+  * @see ImageProducer
+  * @author C. Brian Jones (cbj@gnu.org) 
+  */
+ public interface ImageObserver
+ {
+     /**
+      * The width of the image has been provided as the
+      * <code>width</code> argument to <code>imageUpdate</code>.
+      *
+      * @see #imageUpdate 
+      */
+     int WIDTH = 1;
+ 
+     /**
+      * The height of the image has been provided as the
+      * <code>height</code> argument to <code>imageUpdate</code>.
+      *
+      * @see #imageUpdate 
+      */
+     int HEIGHT = 2;
+ 
+     /**
+      * The properties of the image have been provided.
+      *
+      * @see #imageUpdate
+      * @see java.awt.Image#getProperty (java.lang.String, java.awt.image.ImageObserver)
+      */
+     int PROPERTIES = 4;
+ 
+     /**
+      * More pixels are now available for drawing a scaled variation of
+      * the image.
+      *
+      * @see #imageUpdate 
+      */
+     int SOMEBITS = 8;
+ 
+     /**
+      * All the pixels needed to draw a complete frame of a multi-frame
+      * image are available.
+      *
+      * @see #imageUpdate 
+      */
+     int FRAMEBITS = 16;
+ 
+     /**
+      * An image with a single frame, a static image, is complete.
+      *
+      * @see #imageUpdate
+      */
+     int ALLBITS = 32;
+ 
+     /**
+      * An error was encountered while producing the image.
+      *
+      * @see #imageUpdate
+      */
+     int ERROR = 64;
+ 
+     /**
+      * Production of the image was aborted.
+      *
+      * @see #imageUpdate
+      */
+     int ABORT = 128;
+ 
+     /**
+      * This is a callback method for an asynchronous image producer to
+      * provide updates on the production of the image as it happens.
+      *
+      * @param image the image the update refers to
+      * @param flags a bit mask indicating what is provided with this update
+      * @param x the x coordinate of the image
+      * @param y the y coordinate of the image
+      * @param width the width of the image
+      * @param height the height of the image
+      * 
+      * @see java.awt.Image 
+      */
+     boolean imageUpdate(Image image, int flags, int x, 
+ 					int y, int width, int height);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ImageProducer.java gcc-4.1.0/libjava/classpath/java/awt/image/ImageProducer.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ImageProducer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ImageProducer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* ImageProducer.java -- Java interface for image production
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * An object implementing the <code>ImageProducer</code> interface can
+  * produce data for images.  Each image has a corresponding
+  * <code>ImageProducer</code> which is needed for things such as
+  * resizing the image.
+  *
+  * @see ImageConsumer
+  * @author C. Brian Jones (cbj@gnu.org) 
+  */
+ public interface ImageProducer
+ {
+     /**
+      * Used to register an <code>ImageConsumer</code> with this
+      * <code>ImageProducer</code>.  
+      */
+     void addConsumer(ImageConsumer ic);
+ 
+     /**
+      * Used to determine if the given <code>ImageConsumer</code> is
+      * already registered with this <code>ImageProducer</code>.  
+      */
+     boolean isConsumer(ImageConsumer ic);
+ 
+     /**
+      * Used to remove an <code>ImageConsumer</code> from the list of
+      * registered consumers for this <code>ImageProducer</code>.  
+      */
+     void removeConsumer(ImageConsumer ic);
+ 
+     /**
+      * Used to register an <code>ImageConsumer</code> with this
+      * <code>ImageProducer</code> and then immediately start
+      * reconstruction of the image data to be delivered to all
+      * registered consumers.  
+      */
+     void startProduction(ImageConsumer ic);
+ 
+     /**
+      * Used to register an <code>ImageConsumer</code> with this
+      * <code>ImageProducer</code> and then request that this producer
+      * resend the image data in the order top-down, left-right.  
+      */
+     void requestTopDownLeftRightResend(ImageConsumer ic);
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ImagingOpException.java gcc-4.1.0/libjava/classpath/java/awt/image/ImagingOpException.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ImagingOpException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ImagingOpException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,66 ----
+ /* ImagingOpException.java -- indicates an imaging filter failure
+    Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * This exception is thrown when <code>BufferedImageOp</code> or
+  * <code>RasterOp</code> filters cannot process an image.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see BufferedImageOp
+  * @see RasterOp
+  * @status updated to 1.4
+  */
+ public class ImagingOpException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 8026288481846276658L;
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public ImagingOpException(String message)
+   {
+     super(message);
+   }
+ } // class ImagingOpException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/IndexColorModel.java gcc-4.1.0/libjava/classpath/java/awt/image/IndexColorModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/IndexColorModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/IndexColorModel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,697 ----
+ /* IndexColorModel.java -- Java class for interpreting Pixel objects
+    Copyright (C) 1999, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ import gnu.java.awt.Buffers;
+ 
+ import java.awt.color.ColorSpace;
+ import java.math.BigInteger;
+ 
+ /**
+  * Color model similar to pseudo visual in X11.
+  * <br><br>
+  * This color model maps linear pixel values to actual RGB and alpha colors.
+  * Thus, pixel values are indexes into the color map.  Each color component is
+  * an 8-bit unsigned value.
+  * <br><br>
+  * The <code>IndexColorModel</code> supports a map of valid pixels, allowing 
+  * the representation of holes in the the color map.  The valid map is 
+  * represented as a {@link BigInteger} where each bit indicates the validity 
+  * of the map entry with the same index.
+  * <br><br>
+  * Colors can have alpha components for transparency support.  If alpha
+  * component values aren't given, color values are opaque.  The model also
+  * supports a reserved pixel value to represent completely transparent colors,
+  * no matter what the actual color component values are.
+  * <br><br>
+  * <code>IndexColorModel</code> supports anywhere from 1 to 16 bit index 
+  * values.  The allowed transfer types are {@link DataBuffer#TYPE_BYTE} and 
+  * {@link DataBuffer#TYPE_USHORT}.
+  *
+  * @author C. Brian Jones (cbj@gnu.org) 
+  */
+ public class IndexColorModel extends ColorModel
+ {
+   private int map_size;
+   private boolean opaque;  // no alpha, but doesn't account for trans
+   private int trans = -1;
+   private int[] rgb;
+   private BigInteger validBits = BigInteger.ZERO;
+ 
+   /**
+    * Creates a new indexed color model for <code>size</code> color elements 
+    * with no alpha component.  Each array must contain at least 
+    * <code>size</code> elements.  For each array, the i-th color is described 
+    * by reds[i], greens[i] and blues[i]. 
+    *
+    * @param bits the number of bits needed to represent <code>size</code> 
+    *             colors.
+    * @param size the number of colors in the color map.
+    * @param reds the red component of all colors.
+    * @param greens the green component of all colors.
+    * @param blues the blue component of all colors.
+    *
+    * @throws IllegalArgumentException if <code>bits</code> &lt; 1 or 
+    *         <code>bits</code> &gt; 16.
+    * @throws NullPointerException if any of the arrays is <code>null</code>.
+    * @throws ArrayIndexOutOfBoundsException if <code>size</code> is greater 
+    *         than the length of the component arrays.
+    */
+   public IndexColorModel(int bits, int size, byte[] reds, byte[] greens,
+                          byte[] blues)
+   {
+     this(bits, size, reds, greens, blues, (byte[]) null);
+   }
+ 
+   /**
+    * Creates a new indexed color model for <code>size</code> color elements.
+    * Each array must contain at least <code>size</code> elements.  For each 
+    * array, the i-th color is described by reds[i], greens[i] and blues[i]. 
+    * All the colors are opaque except for the transparent color. 
+    *
+    * @param bits the number of bits needed to represent <code>size</code> 
+    *             colors
+    * @param size the number of colors in the color map
+    * @param reds the red component of all colors
+    * @param greens the green component of all colors
+    * @param blues the blue component of all colors
+    * @param trans the index of the transparent color (use -1 for no 
+    *              transparent color).
+    * 
+    * @throws IllegalArgumentException if <code>bits</code> &lt; 1 or 
+    *         <code>bits</code> &gt; 16.
+    * @throws NullPointerException if any of the arrays is <code>null</code>.
+    * @throws ArrayIndexOutOfBoundsException if <code>size</code> is greater 
+    *         than the length of the component arrays.
+    */
+   public IndexColorModel(int bits, int size, byte[] reds, byte[] greens,
+                          byte[] blues, int trans)
+   {
+     super(bits, nArray(8, (0 <= trans && trans < size) ? 4 : 3), 
+         ColorSpace.getInstance(ColorSpace.CS_sRGB), 
+         (0 <= trans && trans < size),  // hasAlpha 
+         false, OPAQUE, 
+         Buffers.smallestAppropriateTransferType(bits)); 
+     if (bits < 1) 
+       throw new IllegalArgumentException("bits < 1");
+     if (bits > 16)
+       throw new IllegalArgumentException("bits > 16");
+     if (size < 1)
+       throw new IllegalArgumentException("size < 1");
+     map_size = size;
+     if (0 <= trans && trans < size) {
+       this.trans = trans;
+       transparency = BITMASK;
+     }
+     rgb = new int[size];
+     for (int i = 0; i < size; i++)
+       {
+         rgb[i] = (0xff000000
+                   | ((reds[i] & 0xff) << 16)
+                   | ((greens[i] & 0xff) << 8)
+                   | (blues[i] & 0xff));
+       }
+     // Generate a bigint with 1's for every pixel
+     validBits = validBits.setBit(size).subtract(BigInteger.ONE);
+   }
+ 
+   /**
+    * Creates a new indexed color model for <code>size</code> color elements 
+    * including alpha.  Each array must contain at least <code>size</code> 
+    * elements.  For each array, the i-th color is described 
+    * by reds[i], greens[i], blues[i] and alphas[i]. 
+    *
+    * @param bits the number of bits needed to represent <code>size</code> 
+    *             colors.
+    * @param size the number of colors in the color map.
+    * @param reds the red component of all colors.
+    * @param greens the green component of all colors.
+    * @param blues the blue component of all colors.
+    * @param alphas the alpha component of all colors (<code>null</code> 
+    *               permitted).
+    *
+    * @throws IllegalArgumentException if <code>bits</code> &lt; 1 or 
+    *           <code>bits</code> &gt; 16.
+    * @throws NullPointerException if <code>reds</code>, <code>greens</code> or
+    *         <code>blues</code> is <code>null</code>.
+    * @throws ArrayIndexOutOfBoundsException if <code>size</code> is greater 
+    *         than the length of the component arrays.
+    */
+   public IndexColorModel(int bits, int size, byte[] reds, byte[] greens,
+                          byte[] blues, byte[] alphas)
+   {
+     super(bits, nArray(8, (alphas == null ? 3 : 4)), 
+         ColorSpace.getInstance(ColorSpace.CS_sRGB), 
+         (alphas != null), false, TRANSLUCENT, 
+         Buffers.smallestAppropriateTransferType(bits)); 
+     if (bits < 1) 
+       throw new IllegalArgumentException("bits < 1");
+     if (bits > 16)
+       throw new IllegalArgumentException("bits > 16");
+     if (size < 1)
+       throw new IllegalArgumentException("size < 1");
+     map_size = size;
+     opaque = (alphas == null);
+ 
+     rgb = new int[size];
+     if (alphas == null)
+       {
+         for (int i = 0; i < size; i++)
+           {
+             rgb[i] = (0xff000000
+                       | ((reds[i] & 0xff) << 16)
+                       | ((greens[i] & 0xff) << 8)
+                       | (blues[i] & 0xff));
+           }
+         transparency = OPAQUE;
+       }
+     else
+       {
+ 	byte alphaZero = (byte) 0x00;
+         byte alphaOne = (byte) 0xFF;
+         for (int i = 0; i < size; i++)
+           {
+ 	    alphaZero = (byte) (alphaZero | alphas[i]);
+             alphaOne = (byte) (alphaOne & alphas[i]);
+             rgb[i] = ((alphas[i] & 0xff) << 24
+                       | ((reds[i] & 0xff) << 16)
+                       | ((greens[i] & 0xff) << 8)
+                       | (blues[i] & 0xff));
+           }
+         if ((alphaZero == (byte) 0x00) || (alphaOne == (byte) 0xFF))
+ 	  transparency = BITMASK;
+ 	else
+ 	  transparency = TRANSLUCENT;
+       }
+ 
+     // Generate a bigint with 1's for every pixel
+     validBits = validBits.setBit(size).subtract(BigInteger.ONE);
+   }
+ 
+   /**
+    * Creates a new indexed color model using the color components in 
+    * <code>cmap</code>. If <code>hasAlpha</code> is <code>true</code> then
+    * <code>cmap</code> contains an alpha component after each of the red, green
+    * and blue components.
+    *
+    * @param bits the number of bits needed to represent <code>size</code> 
+    *             colors
+    * @param size the number of colors in the color map
+    * @param cmap packed color components
+    * @param start the offset of the first color component in <code>cmap</code>
+    * @param hasAlpha <code>cmap</code> has alpha values
+    * @throws IllegalArgumentException if bits &lt; 1, bits &gt; 16, or size 
+    *         &lt; 1.
+    * @throws NullPointerException if <code>cmap</code> is <code>null</code>.
+    */
+   public IndexColorModel(int bits, int size, byte[] cmap, int start, 
+                          boolean hasAlpha)
+   {
+     this(bits, size, cmap, start, hasAlpha, -1);
+   }
+ 
+   /**
+    * Construct an IndexColorModel from an array of red, green, blue, and
+    * optional alpha components. The component values are interleaved as RGB(A).
+    * 
+    * @param bits the number of bits needed to represent <code>size</code> 
+    *             colors
+    * @param size the number of colors in the color map
+    * @param cmap interleaved color components
+    * @param start the offset of the first color component in <code>cmap</code>
+    * @param hasAlpha <code>cmap</code> has alpha values
+    * @param trans the index of the transparent color
+    * @throws IllegalArgumentException if bits &lt; 1, bits &gt; 16, or size
+    *         &lt; 1.
+    * @throws NullPointerException if <code>cmap</code> is <code>null</code>.
+    */
+   public IndexColorModel(int bits, int size, byte[] cmap, int start, 
+                          boolean hasAlpha, int trans)
+   {
+     super(bits, nArray(8, hasAlpha || (0 <= trans && trans < size) ? 4 : 3), 
+         ColorSpace.getInstance(ColorSpace.CS_sRGB),
+         hasAlpha || (0 <= trans && trans < size), false, OPAQUE, 
+         Buffers.smallestAppropriateTransferType(bits));
+     if (bits < 1)
+       throw new IllegalArgumentException("bits < 1");
+     if (bits > 16)
+       throw new IllegalArgumentException("bits > 16");
+     if (size < 1)
+       throw new IllegalArgumentException("size < 1");
+     map_size = size;
+     opaque = !hasAlpha;
+     if (0 <= trans && trans < size)
+       this.trans = trans;
+ 
+     rgb = new int[size];
+     if (hasAlpha)
+     {
+       int alpha;
+       int alphaZero = 0x00;  // use to detect all zeros
+       int alphaOne = 0xff;   // use to detect all ones
+       for (int i = 0; i < size; i++) {
+ 	alpha = cmap[4 * i + 3 + start] & 0xff;  
+         alphaZero = alphaZero | alpha;
+         alphaOne = alphaOne & alpha;
+         rgb[i] =
+ 	  ( alpha << 24
+ 	   // red
+ 	   | ((cmap[4 * i + start] & 0xff) << 16)
+ 	   // green
+ 	   | ((cmap[4 * i + 1 + start] & 0xff) << 8)
+ 	   // blue
+ 	   | (cmap[4 * i + 2 + start] & 0xff));
+       }
+       if (alphaZero == 0) 
+ 	transparency = BITMASK;
+       else if (alphaOne == 255) 
+         transparency = (trans != -1 ? BITMASK : OPAQUE);
+       else
+ 	transparency = TRANSLUCENT;
+     }
+     else
+     {
+       for (int i = 0; i < size; i++)
+ 	rgb[i] = (0xff000000
+ 		  // red
+ 		  | ((cmap[3 * i + start] & 0xff) << 16)
+ 		  // green
+ 		  | ((cmap[3 * i + 1 + start] & 0xff) << 8)
+ 		  // blue
+ 		  | (cmap[3 * i + 2 + start] & 0xff));
+       if (trans != -1)
+ 	transparency = BITMASK;
+     }
+ 
+     // Generate a bigint with 1's for every pixel
+     validBits = validBits.setBit(size).subtract(BigInteger.ONE);
+   }
+ 
+   /**
+    * Construct an IndexColorModel from an array of <code>size</code> packed
+    * colors.  Each int element contains 8-bit red, green, blue, and optional
+    * alpha values packed in order.  If hasAlpha is false, then all the colors
+    * are opaque except for the transparent color.
+    *
+    * @param bits the number of bits needed to represent <code>size</code> 
+    *             colors
+    * @param size the number of colors in the color map
+    * @param cmap packed color components
+    * @param start the offset of the first color component in <code>cmap</code>
+    * @param hasAlpha <code>cmap</code> has alpha values
+    * @param trans the index of the transparent color
+    * @param transferType {@link DataBuffer#TYPE_BYTE} or 
+             {@link DataBuffer#TYPE_USHORT}.
+    * @throws IllegalArgumentException if bits &lt; 1, bits &gt; 16, or size
+    *         &lt; 1.
+    * @throws IllegalArgumentException if <code>transferType</code> is something
+    *         other than {@link DataBuffer#TYPE_BYTE} or 
+    *         {@link DataBuffer#TYPE_USHORT}.
+    */
+   public IndexColorModel(int bits, int size, int[] cmap, int start, 
+                          boolean hasAlpha, int trans, int transferType)
+   {
+     super(bits, 
+ 	  nArray(8, 4), // bits for each channel
+ 	  ColorSpace.getInstance(ColorSpace.CS_sRGB), // sRGB
+ 	  true, // has alpha
+ 	  false, // not premultiplied
+ 	  TRANSLUCENT, transferType);
+     if (transferType != DataBuffer.TYPE_BYTE
+         && transferType != DataBuffer.TYPE_USHORT)
+       throw new IllegalArgumentException();
+     if (bits > 16)
+       throw new IllegalArgumentException("bits > 16");
+     if (size < 1)
+       throw new IllegalArgumentException("size < 1");
+     map_size = size;
+     opaque = !hasAlpha;
+     if (0 <= trans && trans < size)
+       this.trans = trans;
+ 
+     rgb = new int[size];
+     if (!hasAlpha)
+       for (int i = 0; i < size; i++)
+ 	rgb[i] = cmap[i + start] | 0xff000000;
+     else
+       System.arraycopy(cmap, start, rgb, 0, size);
+ 
+     // Generate a bigint with 1's for every pixel
+     validBits = validBits.setBit(size).subtract(BigInteger.ONE);
+   }
+ 
+   /**
+    * Construct an IndexColorModel using a colormap with holes.
+    * <br><br>
+    * The IndexColorModel is built from the array of ints defining the
+    * colormap.  Each element contains red, green, blue, and alpha
+    * components.    The ColorSpace is sRGB.  The transparency value is
+    * automatically determined.
+    * <br><br>
+    * This constructor permits indicating which colormap entries are valid,
+    * using the validBits argument.  Each entry in cmap is valid if the
+    * corresponding bit in validBits is set.  
+    * 
+    * @param bits the number of bits needed to represent <code>size</code> 
+    *             colors.
+    * @param size the number of colors in the color map.
+    * @param cmap packed color components.
+    * @param start the offset of the first color component in <code>cmap</code>.
+    * @param transferType {@link DataBuffer#TYPE_BYTE} or 
+    *                     {@link DataBuffer#TYPE_USHORT}.
+    * @param validBits a map of the valid entries in <code>cmap</code>.
+    * @throws IllegalArgumentException if bits &lt; 1, bits &gt; 16, or size
+    *         &lt; 1.
+    * @throws IllegalArgumentException if transferType is something other than
+    *         {@link DataBuffer#TYPE_BYTE} or {@link DataBuffer#TYPE_USHORT}.
+    */
+   public IndexColorModel(int bits, int size, int[] cmap, int start, 
+                          int transferType, BigInteger validBits)
+   {
+     super(bits, // total bits, sRGB, four channels
+ 	  nArray(8, 4), // bits for each channel
+ 	  ColorSpace.getInstance(ColorSpace.CS_sRGB), // sRGB
+ 	  true, // has alpha
+ 	  false, // not premultiplied
+ 	  TRANSLUCENT, transferType);
+     if (transferType != DataBuffer.TYPE_BYTE
+         && transferType != DataBuffer.TYPE_USHORT)
+       throw new IllegalArgumentException();
+     if (bits > 16)
+       throw new IllegalArgumentException("bits > 16");
+     if (size < 1)
+       throw new IllegalArgumentException("size < 1");
+     map_size = size;
+     opaque = false;
+     this.trans = -1;
+     this.validBits = validBits;
+ 
+     rgb = new int[size];
+     if (!hasAlpha)
+       for (int i = 0; i < size; i++)
+ 	rgb[i] = cmap[i + start] | 0xff000000;
+     else
+       System.arraycopy(cmap, start, rgb, 0, size);
+   }
+ 
+   /**
+    * Returns the size of the color lookup table.
+    *
+    * @return The size of the color lookup table.
+    */
+   public final int getMapSize()
+   {
+     return map_size;
+   }
+ 
+   /**
+    * Get the index of the transparent color in this color model.
+    *
+    * @return The index of the color that is considered transparent, or -1 if 
+    *         there is no transparent color.
+    */
+   public final int getTransparentPixel()
+   {
+     return trans;
+   }
+ 
+   /**
+    * Fills the supplied array with the red component of each color in the 
+    * lookup table.
+    *
+    * @param r an array that is at least as large as {@link #getMapSize()}.
+    * @throws NullPointerException if <code>r</code> is <code>null</code>.
+    * @throws ArrayIndexOutOfBoundsException if <code>r</code> has less 
+    *         than {@link #getMapSize()} elements. 
+    */
+   public final void getReds(byte[] r)
+   {
+     int i;
+     for (i = 0; i < map_size; i++)
+       r[i] = (byte) ((0x00FF0000  & rgb[i]) >> 16);
+   }
+ 
+   /**
+    * Fills the supplied array with the green component of each color in the 
+    * lookup table.
+    *
+    * @param g an array that is at least as large as {@link #getMapSize()}.
+    * @throws NullPointerException if <code>g</code> is <code>null</code>.
+    * @throws ArrayIndexOutOfBoundsException if <code>g</code> has less 
+    *         than {@link #getMapSize()} elements. 
+    */
+   public final void getGreens(byte[] g)
+   {
+     int i;
+     for (i = 0; i < map_size; i++)
+       g[i] = (byte) ((0x0000FF00  & rgb[i]) >> 8);
+   }
+ 
+   /**
+    * Fills the supplied array with the blue component of each color in the 
+    * lookup table.
+    *
+    * @param b an array that is at least as large as {@link #getMapSize()}.
+    * @throws NullPointerException if <code>b</code> is <code>null</code>.
+    * @throws ArrayIndexOutOfBoundsException if <code>b</code> has less 
+    *         than {@link #getMapSize()} elements. 
+    */
+   public final void getBlues(byte[] b)
+   {
+     int i;
+     for (i = 0; i < map_size; i++)
+       b[i] = (byte) (0x000000FF & rgb[i]);
+   }
+ 
+   /**
+    * Fills the supplied array with the alpha component of each color in the 
+    * lookup table.  If the model has a transparent pixel specified, the alpha
+    * for that pixel will be 0.
+    *
+    * @param a an array that is at least as large as {@link #getMapSize()}.
+    * @throws NullPointerException if <code>a</code> is <code>null</code>.
+    * @throws ArrayIndexOutOfBoundsException if <code>a</code> has less 
+    *         than {@link #getMapSize()} elements. 
+    */
+   public final void getAlphas(byte[] a)
+   {
+     int i;
+     for (i = 0; i < map_size; i++)
+       if (i == trans) 
+ 	a[i] = (byte) 0;
+       else 
+         a[i] = (byte) ((0xFF000000  & rgb[i]) >> 24);
+   }
+ 
+   /**
+    * Returns the red component of the color in the lookup table for the 
+    * given pixel value.
+    *
+    * @param pixel  the pixel lookup value.
+    *
+    * @return The red component of the color in the lookup table.
+    * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
+    */
+   public final int getRed(int pixel)
+   {
+     if (pixel < map_size)
+       return (0x00FF0000 & rgb[pixel]) >> 16;
+     
+     return 0;
+   }
+ 
+   /**
+    * Returns the green component of the color in the lookup table for the 
+    * given pixel value.
+    *
+    * @param pixel  the pixel lookup value.
+    *
+    * @return The green component of the color in the lookup table.
+    * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
+    */
+   public final int getGreen(int pixel)
+   {
+     if (pixel < map_size)
+       return (0x0000FF00 & rgb[pixel]) >> 8;
+     
+     return 0;
+   }
+ 
+   /**
+    * Returns the blue component of the color in the lookup table for the 
+    * given pixel value.
+    *
+    * @param pixel  the pixel lookup value.
+    *
+    * @return The blue component of the color in the lookup table.
+    * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
+    */
+   public final int getBlue(int pixel)
+   {
+     if (pixel < map_size)
+       return 0x000000FF & rgb[pixel];
+     
+     return 0;
+   }
+ 
+   /**
+    * Returns the alpha component of the color in the lookup table for the 
+    * given pixel value. If no alpha channel was specified when the color model
+    * was created, then 255 is returned for all pixels except the transparent
+    * pixel (if one is defined - see {@link #getTransparentPixel()}) which
+    * returns an alpha of 0.
+    *
+    * @param pixel  the pixel lookup value.
+    *
+    * @return The alpha component of the color in the lookup table (in the 
+    *         range 0 to 255).
+    * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
+    */
+   public final int getAlpha(int pixel)
+   {
+     if (opaque && pixel != trans) 
+       return 255;
+     if ((pixel == trans && trans != -1) || pixel >= map_size)
+       return 0;
+ 
+     return (0xFF000000 & rgb[pixel]) >> 24;
+   }
+ 
+   /**
+    * Get the RGB color value of the given pixel using the default
+    * RGB color model. 
+    *
+    * @param pixel the pixel lookup value.
+    * @return The RGB color value.
+    * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
+    */
+   public final int getRGB(int pixel)
+   {
+     if (pixel >= 0 && pixel < map_size)
+       return rgb[pixel];
+     
+     return 0;
+   }
+     
+   /**
+    * Get the RGB color values of all pixels in the map using the default
+    * RGB color model. 
+    *
+    * @param rgb The destination array.
+    */
+   public final void getRGBs(int[] rgb)
+   {
+     System.arraycopy(this.rgb, 0, rgb, 0, map_size);
+   }
+     
+   /** 
+    * Return <code>true</code> if the lookup table contains valid data for 
+    * <code>pixel</code>, and <code>false</code> otherwise.
+    *
+    * @param pixel  the pixel value used to index the color lookup table.
+    * @return <code>true</code> if <code>pixel</code> is valid, 
+    *         <code>false</code> otherwise.
+    */
+   public boolean isValid(int pixel)
+   {
+     if (pixel >= 0)
+       return validBits.testBit(pixel);
+     return false;
+   }
+   
+   /** 
+    * Return <code>true</code> if all pixels are valid, <code>false</code> 
+    * otherwise.
+    *
+    * @return <code>true</code> if all pixels are valid, <code>false</code> 
+    * otherwise.
+    */
+   public boolean isValid()
+   {
+     // Generate a bigint with 1's for every pixel
+     BigInteger allbits = new BigInteger("0");
+     allbits = allbits.setBit(map_size);
+     allbits = allbits.subtract(new BigInteger("1"));
+     return allbits.equals(validBits);
+   }
+   
+   /** 
+    * Returns a binary value ({@link BigInteger}) where each bit represents an 
+    * entry in the color lookup table.  If the bit is on, the entry is valid.
+    * 
+    * @return The binary value.
+    */
+   public BigInteger getValidPixels()
+   {
+     return validBits;
+   }
+   
+   /**
+    * Construct a {@link BufferedImage} with rgb pixel values from a 
+    * {@link Raster}.
+    * 
+    * Constructs a new BufferedImage in which each pixel is an RGBA int from
+    * a Raster with index-valued pixels.  If this model has no alpha component
+    * or transparent pixel, the type of the new BufferedImage is TYPE_INT_RGB.
+    * Otherwise the type is TYPE_INT_ARGB.  If forceARGB is true, the type is
+    * forced to be TYPE_INT_ARGB no matter what.
+    * 
+    * @param raster The source of pixel values.
+    * @param forceARGB True if type must be TYPE_INT_ARGB.
+    * @return New BufferedImage with RBGA int pixel values.
+    */
+   public BufferedImage convertToIntDiscrete(Raster raster, boolean forceARGB)
+   {
+     int type = forceARGB ? BufferedImage.TYPE_INT_ARGB
+       : ((opaque && trans == -1) ? BufferedImage.TYPE_INT_RGB :
+ 	 BufferedImage.TYPE_INT_ARGB); 
+ 
+     // FIXME: assuming that raster has only 1 band since pixels are supposed
+     // to be int indexes.
+     // FIXME: it would likely be more efficient to fetch a complete array,
+     // but it would take much more memory.
+     // FIXME: I'm not sure if transparent pixels or alpha values need special
+     // handling here.
+     BufferedImage im = new BufferedImage(raster.width, raster.height, type);
+     for (int x = raster.minX; x < raster.width + raster.minX; x++)
+       for (int y = raster.minY; y < raster.height + raster.minY; y++)
+         im.setRGB(x, y, rgb[raster.getSample(x, y, 0)]);
+ 
+     return im;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/Kernel.java gcc-4.1.0/libjava/classpath/java/awt/image/Kernel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/Kernel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/Kernel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,143 ----
+ /* Kernel.java -- Java class for an image processing kernel
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * Kernel represents an image processing kernel.  It gets used to hold
+  * convolution filters among other purposes.  It stores an array of float
+  * values representing a 2-dimensional array in row-major order.
+  *
+  * @author Jerry Quinn (jlquinn@optonline.net)
+  * @version 1.0
+  */
+ public class Kernel implements Cloneable
+ {
+   private final int width;
+   private final int height;
+   private final float[] data;
+ 
+   /**
+    * Creates a new <code>Kernel</code> instance.
+    *
+    * @param width The 2D width of data.
+    * @param height The 2D height of data.
+    * @param data The source data array.
+    * @exception IllegalArgumentException if width * height < data.length.
+    */
+   public Kernel(int width, int height, float[] data)
+     throws IllegalArgumentException
+   {
+     this.width = width;
+     this.height = height;
+     if (data.length < width * height || width < 0 || height < 0)
+       throw new IllegalArgumentException();
+     this.data = new float[width * height];
+     System.arraycopy(data, 0, this.data, 0, width * height);
+   }
+ 
+   /**
+    * Return the X origin: (width - 1) / 2
+    */
+   public final int getXOrigin()
+   {
+     return (width - 1) / 2;
+   }
+ 
+   /**
+    * Return the Y origin: (height - 1) / 2
+    */
+   public final int getYOrigin()
+   {
+     return (height - 1) / 2;
+   }
+ 
+   /**
+    * @return The kernel width.
+    */
+   public final int getWidth()
+   {
+     return width;
+   }
+ 
+   /**
+    * @return The kernel height.
+    */
+   public final int getHeight()
+   {
+     return height;
+   }
+ 
+   /**
+    * Return the kernel data.
+    *
+    * If data is null, allocates a new array and returns it.  Otherwise, the
+    * kernel values are copied into data.
+    *
+    * @param data Array to copy values into, or null.
+    * @return The array with copied values.
+    * @exception IllegalArgumentException if data != null and too small.
+    */
+   public final float[] getKernelData(float[] data)
+     throws IllegalArgumentException
+   {
+     if (data == null)
+       return (float[])this.data.clone();
+ 
+     if (data.length < this.data.length)
+       throw new IllegalArgumentException();
+ 
+     System.arraycopy(this.data, 0, data, 0, this.data.length);
+     return data;
+   }
+ 
+   /**
+    * @return a clone of this Kernel.
+    */
+   public Object clone()
+   {
+     try
+       {
+ 	return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // Impossible
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/LookupOp.java gcc-4.1.0/libjava/classpath/java/awt/image/LookupOp.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/LookupOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/LookupOp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,252 ----
+ /* LookupOp.java -- Filter that converts each pixel using a lookup table.
+    Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Graphics2D;
+ import java.awt.RenderingHints;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ 
+ /**
+  * LookupOp is a filter that converts each pixel using a lookup table.
+  * 
+  * For filtering Rasters, the lookup table must have either one component
+  * that is applied to all bands, or one component for every band in the
+  * Rasters.
+  * 
+  * For BufferedImages, the lookup table may apply to both color and alpha
+  * components.  If the lookup table contains one component, or if there are
+  * the same number of components as color components in the source, the table
+  * applies to all color components.  Otherwise the table applies to all
+  * components including alpha.  Alpha premultiplication is ignored during the
+  * lookup filtering.
+  * 
+  * After filtering, if color conversion is necessary, the conversion happens,
+  * taking alpha premultiplication into account.
+  * 
+  * @author jlquinn
+  */
+ public class LookupOp implements BufferedImageOp, RasterOp
+ {
+   private LookupTable lut;
+   private RenderingHints hints;
+   
+   /** Construct a new LookupOp.
+    * 
+    * @param lookup LookupTable to use.
+    * @param hints Rendering hints (can be null).
+    */
+   public LookupOp(LookupTable lookup, RenderingHints hints)
+   {
+     lut = lookup;
+     this.hints = hints;
+   }
+   
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#filter(java.awt.image.BufferedImage, java.awt.image.BufferedImage)
+    */
+   public BufferedImage filter(BufferedImage src, BufferedImage dst)
+   {
+     if (src.getColorModel() instanceof IndexColorModel)
+       throw new IllegalArgumentException("LookupOp.filter: IndexColorModel "
+ 					 + "not allowed");
+     if (dst == null)
+       dst = createCompatibleDestImage(src, src.getColorModel());
+ 
+     // Set up for potential colormodel mismatch
+     BufferedImage tgt;
+     if (dst.getColorModel().equals(src.getColorModel()))
+       tgt = dst;
+     else
+       tgt = createCompatibleDestImage(src, src.getColorModel());
+ 
+     Raster sr = src.getRaster();
+     WritableRaster dr = tgt.getRaster();
+ 
+     if (src.getColorModel().hasAlpha() &&
+         (lut.getNumComponents() == 1 ||
+          lut.getNumComponents() == src.getColorModel().getNumColorComponents()))
+     {
+       // Need to ignore alpha for lookup
+       int[] dbuf = new int[src.getColorModel().getNumComponents()];
+       int tmpBands = src.getColorModel().getNumColorComponents();
+       int[] tmp = new int[tmpBands];
+         
+       // Filter the pixels
+       for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
+         for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
+         {	
+           // Filter only color components, but also copy alpha
+           sr.getPixel(x, y, dbuf);
+           System.arraycopy(dbuf, 0, tmp, 0, tmpBands);
+           dr.setPixel(x, y, lut.lookupPixel(tmp, dbuf));
+         }
+     }
+     else if (lut.getNumComponents() != 1
+ 	     &&
+ 	     lut.getNumComponents() != src.getColorModel().getNumComponents())
+       throw new IllegalArgumentException("LookupOp.filter: "
+ 					 + "Incompatible lookup "
+ 					 + "table and source image");
+ 
+     // No alpha to ignore
+     int[] dbuf = new int[src.getColorModel().getNumComponents()];
+         
+     // Filter the pixels
+     for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
+       for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
+         dr.setPixel(x, y, lut.lookupPixel(sr.getPixel(x, y, dbuf), dbuf));
+ 
+     if (tgt != dst)
+     {
+       // Convert between color models.
+       // TODO Check that premultiplied alpha is handled correctly here.
+       Graphics2D gg = dst.createGraphics();
+       gg.setRenderingHints(hints);
+       gg.drawImage(tgt, 0, 0, null);
+       gg.dispose();
+     }
+     
+     return dst;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#getBounds2D(java.awt.image.BufferedImage)
+    */
+   public Rectangle2D getBounds2D(BufferedImage src)
+   {
+     return src.getRaster().getBounds();
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#createCompatibleDestImage(java.awt.image.BufferedImage, java.awt.image.ColorModel)
+    */
+   public BufferedImage createCompatibleDestImage(BufferedImage src,
+ 						 ColorModel dstCM)
+   {
+     // FIXME: set properties to those in src
+     return new BufferedImage(dstCM,
+ 			     src.getRaster().createCompatibleWritableRaster(),
+ 			     src.isPremultiplied, null);
+   }
+ 
+   /** Return corresponding destination point for source point.
+    * 
+    * LookupOp will return the value of src unchanged.
+    * @param src The source point.
+    * @param dst The destination point.
+    * @see java.awt.image.RasterOp#getPoint2D(java.awt.geom.Point2D, java.awt.geom.Point2D)
+    */
+   public Point2D getPoint2D(Point2D src, Point2D dst)
+   {
+     if (dst == null)
+       return (Point2D) src.clone();
+ 
+     dst.setLocation(src);
+     return dst;
+   }
+ 
+   /** Return the LookupTable for this op. */
+   public LookupTable getTable()
+   {
+     return lut;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#getRenderingHints()
+    */
+   public RenderingHints getRenderingHints()
+   {
+     return hints;
+   }
+ 
+   /** Filter a raster through a lookup table.
+    * 
+    * Applies the lookup table for this Rasterop to each pixel of src and
+    * puts the results in dest.  If dest is null, a new Raster is created and
+    * returned.
+    * 
+    * @param src The source raster.
+    * @param dest The destination raster.
+    * @return The WritableRaster with the filtered pixels.
+    * @throws IllegalArgumentException if lookup table has more than one
+    * component but not the same as src and dest.
+    * @see java.awt.image.RasterOp#filter(java.awt.image.Raster, java.awt.image.WritableRaster)
+    */
+   public WritableRaster filter(Raster src, WritableRaster dest)
+   {
+     if (dest == null) 
+       // Allocate a raster if needed
+       dest = createCompatibleDestRaster(src);
+     else
+       if (src.getNumBands() != dest.getNumBands())
+         throw new IllegalArgumentException();
+ 
+     if (lut.getNumComponents() != 1
+ 	&& lut.getNumComponents() != src.getNumBands())
+       throw new IllegalArgumentException();
+ 
+    
+     // Allocate pixel storage. 
+     int[] tmp = new int[src.getNumBands()];
+     
+     // Filter the pixels
+     for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
+       for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
+         dest.setPixel(x, y, lut.lookupPixel(src.getPixel(x, y, tmp), tmp));
+     return dest;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
+    */
+   public Rectangle2D getBounds2D(Raster src)
+   {
+     return src.getBounds();
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#createCompatibleDestRaster(java.awt.image.Raster)
+    */
+   public WritableRaster createCompatibleDestRaster(Raster src)
+   {
+     return src.createCompatibleWritableRaster();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/LookupTable.java gcc-4.1.0/libjava/classpath/java/awt/image/LookupTable.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/LookupTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/LookupTable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* LookupTable.java -- Java class for a pixel translation table.
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * LookupTable represents translation arrays for pixel values.  It wraps one
+  * or more data arrays for each layer (or component) in an image, such as
+  * Alpha, R, G, and B.  When doing translation, the offset is subtracted from
+  * the pixel values to allow a subset of an array to be used.
+  *
+  * @see ByteLookupTable
+  * @see ShortLookupTable
+  *
+  * @author Jerry Quinn (jlquinn@optonline.net)
+  * @version 1.0
+  */
+ public abstract class LookupTable
+ {
+   // Not protected since that's part of the public API.
+   int offset;
+   int numComponents;
+ 
+   /**
+    * Creates a new <code>LookupTable</code> instance.
+    *
+    * If numComponents is 1, the same translation table is used for all pixel
+    * components.
+    * 
+    * @param offset Offset to be subtracted.
+    * @param numComponents Number of image components.
+    * @exception IllegalArgumentException if offset < 0 or numComponents < 1.
+    */
+   protected LookupTable(int offset, int numComponents)
+     throws IllegalArgumentException
+   {
+     if (offset < 0 || numComponents < 1)
+       throw new IllegalArgumentException();
+     this.offset = offset;
+     this.numComponents = numComponents;
+   }
+ 
+   /** Return the number of components. */
+   public int getNumComponents()
+   {
+     return numComponents;
+   }
+ 
+   /** Return the offset. */
+   public int getOffset()
+   {
+     return offset;
+   }
+ 
+   
+   /**
+    * Return translated values for a pixel.
+    *
+    * For each value in the pixel src, use the value minus offset as an index
+    * in the component array and copy the value there to the output for the
+    * component.  If dest is null, the output is a new array, otherwise the
+    * translated values are written to dest.  Dest can be the same array as
+    * src.
+    *
+    * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
+    * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
+    * translation arrays.
+    *
+    * @param src Component values of a pixel.
+    * @param dest Destination array for values, or null.
+    * @return Translated values for the pixel.
+    */
+   public abstract int[] lookupPixel(int[] src, int[] dest);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/MemoryImageSource.java gcc-4.1.0/libjava/classpath/java/awt/image/MemoryImageSource.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/MemoryImageSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/MemoryImageSource.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,373 ----
+ /* MemoryImageSource.java -- Java class for providing image data
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.util.Hashtable;
+ import java.util.Vector;
+ 
+ public class MemoryImageSource implements ImageProducer
+ {
+   private boolean animated = false;
+   private boolean fullbuffers = false;
+   private int[] pixeli;
+   private int width;
+   private int height;
+   private int offset;
+   private int scansize;
+   private byte[] pixelb;
+   private ColorModel cm;
+   private Hashtable props = new Hashtable();
+   private Vector consumers = new Vector();
+ 
+   /**
+    * Construct an image producer that reads image data from a byte
+    * array.
+    *
+    * @param w width of image
+    * @param h height of image
+    * @param cm the color model used to represent pixel values
+    * @param pix a byte array of pixel values
+    * @param off the offset into the array at which the first pixel is stored
+    * @param scan the number of array elements that represents a single pixel row
+    */
+   public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off,
+                            int scan)
+   {
+     this(w, h, cm, pix, off, scan, null);
+   }
+ 
+   /**
+    * Constructs an ImageProducer from memory
+    */
+   public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off,
+                            int scan, Hashtable props)
+   {
+     width = w;
+     height = h;
+     this.cm = cm;
+     offset = off;
+     scansize = scan;
+     this.props = props;
+     int max = ((scansize > width) ? scansize : width);
+     pixelb = pix;
+   }
+ 
+   /**
+    * Construct an image producer that reads image data from an
+    * integer array.
+    *
+    * @param w width of image
+    * @param h height of image
+    * @param cm the color model used to represent pixel values
+    * @param pix an integer array of pixel values
+    * @param off the offset into the array at which the first pixel is stored
+    * @param scan the number of array elements that represents a single pixel row
+    */
+   public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off,
+                            int scan)
+   {
+     this(w, h, cm, pix, off, scan, null);
+   }
+ 
+   /**
+      Constructs an ImageProducer from memory
+   */
+   public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off,
+                            int scan, Hashtable props)
+   {
+     width = w;
+     height = h;
+     this.cm = cm;
+     offset = off;
+     scansize = scan;
+     this.props = props;
+     int max = ((scansize > width) ? scansize : width);
+     pixeli = pix;
+   }
+ 
+   /**
+    * Constructs an ImageProducer from memory using the default RGB ColorModel
+    */
+   public MemoryImageSource(int w, int h, int[] pix, int off, int scan,
+                            Hashtable props)
+   {
+     this(w, h, ColorModel.getRGBdefault(), pix, off, scan, props);
+   }
+ 
+   /**
+    * Constructs an ImageProducer from memory using the default RGB ColorModel
+    */
+   public MemoryImageSource(int w, int h, int[] pix, int off, int scan)
+   {
+     this(w, h, ColorModel.getRGBdefault(), pix, off, scan, null);
+   }
+ 
+   /**
+    * Used to register an <code>ImageConsumer</code> with this
+    * <code>ImageProducer</code>.
+    */
+   public synchronized void addConsumer(ImageConsumer ic)
+   {
+     if (consumers.contains(ic))
+       return;
+ 
+     consumers.addElement(ic);
+   }
+ 
+   /**
+    * Used to determine if the given <code>ImageConsumer</code> is
+    * already registered with this <code>ImageProducer</code>.
+    */
+   public synchronized boolean isConsumer(ImageConsumer ic)
+   {
+     if (consumers.contains(ic))
+       return true;
+     return false;
+   }
+ 
+   /**
+    * Used to remove an <code>ImageConsumer</code> from the list of
+    * registered consumers for this <code>ImageProducer</code>.
+    */
+   public synchronized void removeConsumer(ImageConsumer ic)
+   {
+     consumers.removeElement(ic);
+   }
+ 
+   /**
+    * Used to register an <code>ImageConsumer</code> with this
+    * <code>ImageProducer</code> and then immediately start
+    * reconstruction of the image data to be delivered to all
+    * registered consumers.
+    */
+   public void startProduction(ImageConsumer ic)
+   {
+     if (! (consumers.contains(ic)))
+       consumers.addElement(ic);
+ 
+     Vector list = (Vector) consumers.clone();
+     for (int i = 0; i < list.size(); i++)
+       {
+ 	ic = (ImageConsumer) list.elementAt(i);
+ 	sendPicture(ic);
+ 	if (animated)
+ 	  ic.imageComplete(ImageConsumer.SINGLEFRAMEDONE);
+ 	else
+ 	  ic.imageComplete(ImageConsumer.STATICIMAGEDONE);
+       }
+   }
+ 
+   /**
+    * Used to register an <code>ImageConsumer</code> with this
+    * <code>ImageProducer</code> and then request that this producer
+    * resend the image data in the order top-down, left-right.
+    */
+   public void requestTopDownLeftRightResend(ImageConsumer ic)
+   {
+     startProduction(ic);
+   }
+ 
+   /**
+    * Changes a flag to indicate whether this MemoryImageSource supports
+    * animations.
+    *
+    * @param animated A flag indicating whether this class supports animations
+    */
+   public synchronized void setAnimated(boolean animated)
+   {
+     this.animated = animated;
+   }
+ 
+   /**
+    * A flag to indicate whether or not to send full buffer updates when
+    * sending animation. If this flag is set then full buffers are sent
+    * in the newPixels methods instead of just regions.
+    *
+    * @param fullbuffers - a flag indicating whether to send the full buffers
+    */
+   public synchronized void setFullBufferUpdates(boolean fullbuffers)
+   {
+     this.fullbuffers = fullbuffers;
+   }
+ 
+   /**
+    * Send an animation frame to the image consumers.
+    */
+   public void newPixels()
+   {
+     if (animated == true)
+       {
+ 	ImageConsumer ic;
+ 	Vector list = (Vector) consumers.clone();
+ 	for (int i = 0; i < list.size(); i++)
+ 	  {
+ 	    ic = (ImageConsumer) list.elementAt(i);
+ 	    sendPicture(ic);
+ 	    ic.imageComplete(ImageConsumer.SINGLEFRAME);
+ 	  }
+       }
+   }
+ 
+   private void sendPicture(ImageConsumer ic)
+   {
+     ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT);
+     if (props != null)
+       ic.setProperties(props);
+     ic.setDimensions(width, height);
+     ic.setColorModel(cm);
+     if (pixeli != null)
+       ic.setPixels(0, 0, width, height, cm, pixeli, offset, scansize);
+     else
+       ic.setPixels(0, 0, width, height, cm, pixelb, offset, scansize);
+   }
+ 
+   /**
+    * Send an animation frame to the image consumers containing the specified
+    * pixels unless setFullBufferUpdates is set.
+    */
+   public synchronized void newPixels(int x, int y, int w, int h)
+   {
+     if (animated == true)
+       {
+ 	if (fullbuffers)
+ 	  newPixels();
+ 	else
+ 	  {
+ 	    ImageConsumer ic;
+ 	    Vector list = (Vector) consumers.clone();
+ 	    for (int i = 0; i < list.size(); i++)
+ 	      {
+ 		ic = (ImageConsumer) list.elementAt(i);
+ 		ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT);
+ 		if (props != null)
+ 		  ic.setProperties(props);
+ 		if (pixeli != null)
+ 		  {
+ 		    int[] pixelbuf = new int[w * h];
+ 		    for (int row = y; row < y + h; row++)
+ 		      System.arraycopy(pixeli, row * scansize + x + offset,
+ 		                       pixelbuf, 0, w * h);
+ 		    ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
+ 		  }
+ 		else
+ 		  {
+ 		    byte[] pixelbuf = new byte[w * h];
+ 		    for (int row = y; row < y + h; row++)
+ 		      System.arraycopy(pixelb, row * scansize + x + offset,
+ 		                       pixelbuf, 0, w * h);
+ 
+ 		    ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
+ 		  }
+ 		ic.imageComplete(ImageConsumer.SINGLEFRAME);
+ 	      }
+ 	  }
+       }
+   }
+ 
+   /**
+    * Send an animation frame to the image consumers containing the specified
+    * pixels unless setFullBufferUpdates is set.
+    *
+    * If framenotify is set then a notification is sent when the frame
+    * is sent otherwise no status is sent.
+    */
+   public synchronized void newPixels(int x, int y, int w, int h,
+                                      boolean framenotify)
+   {
+     if (animated == true)
+       {
+ 	if (fullbuffers)
+ 	  newPixels();
+ 	else
+ 	  {
+ 	    ImageConsumer ic;
+ 	    Vector list = (Vector) consumers.clone();
+ 	    for (int i = 0; i < list.size(); i++)
+ 	      {
+ 		ic = (ImageConsumer) list.elementAt(i);
+ 		ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT);
+ 		if (props != null)
+ 		  ic.setProperties(props);
+ 		if (pixeli != null)
+ 		  {
+ 		    int[] pixelbuf = new int[w * h];
+ 		    for (int row = y; row < y + h; row++)
+ 		      System.arraycopy(pixeli, row * scansize + x + offset,
+ 		                       pixelbuf, 0, w * h);
+ 		    ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
+ 		  }
+ 		else
+ 		  {
+ 		    byte[] pixelbuf = new byte[w * h];
+ 		    for (int row = y; row < y + h; row++)
+ 		      System.arraycopy(pixelb, row * scansize + x + offset,
+ 		                       pixelbuf, 0, w * h);
+ 		    ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
+ 		  }
+ 		if (framenotify == true)
+ 		  ic.imageComplete(ImageConsumer.SINGLEFRAME);
+ 	      }
+ 	  }
+       }
+   }
+ 
+   public synchronized void newPixels(byte[] newpix, ColorModel newmodel,
+                                      int offset, int scansize)
+   {
+     pixeli = null;
+     pixelb = newpix;
+     cm = newmodel;
+     this.offset = offset;
+     this.scansize = scansize;
+     if (animated == true)
+       newPixels();
+   }
+ 
+   public synchronized void newPixels(int[] newpix, ColorModel newmodel,
+                                      int offset, int scansize)
+   {
+     pixelb = null;
+     pixeli = newpix;
+     cm = newmodel;
+     this.offset = offset;
+     this.scansize = scansize;
+     if (animated == true)
+       newPixels();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/MultiPixelPackedSampleModel.java gcc-4.1.0/libjava/classpath/java/awt/image/MultiPixelPackedSampleModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/MultiPixelPackedSampleModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/MultiPixelPackedSampleModel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,388 ----
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ import gnu.java.awt.Buffers;
+ 
+ /**
+  * MultiPixelPackedSampleModel provides a single band model that supports
+  * multiple pixels in a single unit.  Pixels have 2^n bits and 2^k pixels fit
+  * per data element.
+  *
+  * @author Jerry Quinn (jlquinn@optonline.net)
+  */
+ public class MultiPixelPackedSampleModel extends SampleModel
+ {
+   private int scanlineStride;
+   private int[] bitMasks;
+   private int[] bitOffsets;
+   private int[] sampleSize;
+   private int dataBitOffset;
+   private int elemBits;
+   private int numberOfBits;
+   private int numElems;
+ 
+   public MultiPixelPackedSampleModel(int dataType, int w, int h,
+ 				     int numberOfBits)
+   {
+     this(dataType, w, h, numberOfBits, 0, 0);
+   }
+ 
+   public MultiPixelPackedSampleModel(int dataType, int w, int h,
+ 				     int numberOfBits, int scanlineStride,
+ 				     int dataBitOffset)
+   {
+     super(dataType, w, h, 1);
+ 
+     switch (dataType)
+       {
+       case DataBuffer.TYPE_BYTE:
+ 	elemBits = 8;
+ 	break;
+       case DataBuffer.TYPE_USHORT:
+ 	elemBits = 16;
+ 	break;
+       case DataBuffer.TYPE_INT:
+ 	elemBits = 32;
+ 	break;
+       default:
+ 	throw new IllegalArgumentException("MultiPixelPackedSampleModel"
+ 					   + " unsupported dataType");
+       }
+ 
+     this.dataBitOffset = dataBitOffset;
+ 
+     this.numberOfBits = numberOfBits;
+     if (numberOfBits > elemBits)
+       throw new RasterFormatException("MultiPixelPackedSampleModel pixel size"
+ 				      + " larger than dataType");
+     switch (numberOfBits)
+       {
+       case 1: case 2: case 4: case 8: case 16: case 32: break;
+       default:
+ 	throw new RasterFormatException("MultiPixelPackedSampleModel pixel"
+ 					+ " size not 2^n bits");
+       }
+     numElems = elemBits / numberOfBits;
+ 
+     // Compute scan line large enough for w pixels.
+     if (scanlineStride == 0)
+       scanlineStride = ((dataBitOffset + w * numberOfBits) / elemBits);
+     this.scanlineStride = scanlineStride;
+ 
+     
+     sampleSize = new int[1];
+     sampleSize[0] = numberOfBits;
+ 
+     bitMasks = new int[numElems];
+     bitOffsets = new int[numElems];
+     for (int i=0; i < numElems; i++)
+       {
+ 	bitOffsets[numElems - i- 1] = numberOfBits * i;
+ 	bitMasks[numElems - i - 1] = ((1 << numberOfBits) - 1) << 
+ 	    bitOffsets[numElems - i - 1];
+       }
+   }
+ 
+   public SampleModel createCompatibleSampleModel(int w, int h)
+   {
+     /* FIXME: We can avoid recalculation of bit offsets and sample
+        sizes here by passing these from the current instance to a
+        special private constructor. */
+     return new MultiPixelPackedSampleModel(dataType, w, h, numberOfBits);
+   }
+ 
+ 
+   /**
+    * Creates a DataBuffer for holding pixel data in the format and
+    * layout described by this SampleModel. The returned buffer will
+    * consist of one single bank.
+    */
+   public DataBuffer createDataBuffer()
+   {
+     int size;
+ 
+     // FIXME:  The comment refers to SinglePixelPackedSampleModel.  See if the
+     // same can be done for MultiPixelPackedSampleModel.
+     // We can save (scanlineStride - width) pixels at the very end of
+     // the buffer. The Sun reference implementation (J2SE 1.3.1 and
+     // 1.4.1_01) seems to do this; tested with Mauve test code.
+     size = scanlineStride * height;
+ 
+     return Buffers.createBuffer(getDataType(), size);
+   }
+ 
+ 
+   public int getNumDataElements()
+   {
+     return 1;
+   }
+ 
+   public int[] getSampleSize()
+   {
+     return sampleSize;
+   }
+   
+   public int getSampleSize(int band)
+   {
+     return sampleSize[0];
+   }
+ 
+   public int getOffset(int x, int y)
+   {
+     return scanlineStride * y + ((dataBitOffset + x*numberOfBits) / elemBits);
+   }
+ 
+   public int getBitOffset(int x)
+   {
+     return (dataBitOffset + x*numberOfBits) % elemBits;
+   }
+ 
+   public int getDataBitOffset()
+   {
+     return dataBitOffset;
+   }
+ 
+   public int getScanlineStride()
+   {
+     return scanlineStride;
+   }
+ 
+   public int getPixelBitStride()
+   {
+     return numberOfBits;
+   }
+ 
+ 
+   public SampleModel createSubsetSampleModel(int[] bands)
+   {
+     int numBands = bands.length;
+     if (numBands != 1)
+       throw new RasterFormatException("MultiPixelPackedSampleModel only"
+ 				      + " supports one band");
+     
+     return new MultiPixelPackedSampleModel(dataType, width, height,
+ 					   numberOfBits, scanlineStride,
+ 					   dataBitOffset);
+   }
+ 
+   /**
+    * Extract one pixel and return in an array of transfer type.
+    *
+    * Extracts the pixel at x, y from data and stores into the 0th index of the
+    * array obj, since there is only one band.  If obj is null, a new array of
+    * getTransferType() is created.
+    *
+    * @param x The x-coordinate of the pixel rectangle to store in <code>obj</code>.
+    * @param y The y-coordinate of the pixel rectangle to store in <code>obj</code>.
+    * @param obj The primitive array to store the pixels into or null to force creation.
+    * @param data The DataBuffer that is the source of the pixel data.
+    * @return The primitive array containing the pixel data.
+    * @see java.awt.image.SampleModel#getDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)
+    */
+   public Object getDataElements(int x, int y, Object obj,
+ 				DataBuffer data)
+   {
+     int pixel = getSample(x, y, 0, data);
+     switch (getTransferType())
+     {
+     case DataBuffer.TYPE_BYTE:
+       if (obj == null) obj = new byte[1];
+       ((byte[])obj)[0] = (byte)pixel;
+       return obj;
+     case DataBuffer.TYPE_USHORT:
+       if (obj == null) obj = new short[1];
+       ((short[])obj)[0] = (short)pixel;
+       return obj;
+     case DataBuffer.TYPE_INT:
+       if (obj == null) obj = new int[1];
+       ((int[])obj)[0] = pixel;
+       return obj;
+     default:
+       // Seems like the only sensible thing to do.
+       throw new ClassCastException();
+     }
+   }
+ 
+   public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     if (iArray == null) iArray = new int[1];
+     iArray[0] = getSample(x, y, 0, data);
+ 	
+     return iArray;
+   }
+ 
+   public int[] getPixels(int x, int y, int w, int h, int[] iArray,
+ 			 DataBuffer data)
+   {
+     int offset = getOffset(x, y);
+     if (iArray == null) iArray = new int[w*h];
+     int outOffset = 0;
+     for (y=0; y<h; y++)
+       {
+ 	int lineOffset = offset;
+ 	for (x=0; x<w;)
+ 	  {
+ 	    int samples = data.getElem(lineOffset++);
+ 	    for (int b=0; b<numElems && x<w; b++)
+ 	      {
+ 		iArray[outOffset++] = (samples & bitMasks[b]) >>> bitOffsets[b];
+ 		x++;
+ 	      }
+ 	  }
+ 	offset += scanlineStride;
+       }
+     return iArray;	
+   }
+ 
+   public int getSample(int x, int y, int b, DataBuffer data)
+   {
+     int pos =
+       ((dataBitOffset + x * numberOfBits) % elemBits) / numberOfBits;
+     int offset = getOffset(x, y);
+     int samples = data.getElem(offset);
+     return (samples & bitMasks[pos]) >>> bitOffsets[pos];
+   }
+   
+   /**
+    * Set the pixel at x, y to the value in the first element of the primitive
+    * array obj.
+    *
+    * @param x The x-coordinate of the data elements in <code>obj</code>.
+    * @param y The y-coordinate of the data elements in <code>obj</code>.
+    * @param obj The primitive array containing the data elements to set.
+    * @param data The DataBuffer to store the data elements into.
+    * @see java.awt.image.SampleModel#setDataElements(int, int, int, int, java.lang.Object, java.awt.image.DataBuffer)
+    */
+   public void setDataElements(int x, int y, Object obj, DataBuffer data)
+   {
+     int transferType = getTransferType();
+     if (getTransferType() != data.getDataType())
+       {
+ 	throw new IllegalArgumentException("transfer type ("+
+ 					   getTransferType()+"), "+
+ 					   "does not match data "+
+ 					   "buffer type (" +
+ 					   data.getDataType() +
+ 					   ").");
+       }
+ 
+     int offset = getOffset(x, y);
+     
+     try
+       {
+ 	switch (transferType)
+ 	  {
+ 	  case DataBuffer.TYPE_BYTE:
+ 	    {
+ 	      DataBufferByte out = (DataBufferByte) data;
+ 	      byte[] in = (byte[]) obj;
+ 	      out.getData()[offset] = in[0];
+ 	      return;
+ 	    }
+ 	  case DataBuffer.TYPE_USHORT:
+ 	    {
+ 	      DataBufferUShort out = (DataBufferUShort) data;
+ 	      short[] in = (short[]) obj;
+ 	      out.getData()[offset] = in[0];
+ 	      return;
+ 	    }
+ 	  case DataBuffer.TYPE_INT:
+ 	    {
+ 	      DataBufferInt out = (DataBufferInt) data;
+ 	      int[] in = (int[]) obj;
+ 	      out.getData()[offset] = in[0];
+ 	      return;
+ 	    }
+ 	  default:
+ 	    throw new ClassCastException("Unsupported data type");
+ 	  }
+       }
+     catch (ArrayIndexOutOfBoundsException aioobe)
+       {
+ 	String msg = "While writing data elements" +
+ 	  ", x="+x+", y="+y+
+ 	  ", width="+width+", height="+height+
+ 	  ", scanlineStride="+scanlineStride+
+ 	  ", offset="+offset+
+ 	  ", data.getSize()="+data.getSize()+
+ 	  ", data.getOffset()="+data.getOffset()+
+ 	  ": " +
+ 	  aioobe;
+ 	throw new ArrayIndexOutOfBoundsException(msg);
+       }
+     }
+ 
+   public void setPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     setSample(x, y, 0, iArray[0], data);
+   }
+ 
+   public void setSample(int x, int y, int b, int s, DataBuffer data)
+   {
+     int bitpos =
+       ((dataBitOffset + x * numberOfBits) % elemBits) / numberOfBits;
+     int offset = getOffset(x, y);
+ 
+     s = s << bitOffsets[bitpos];
+     s = s & bitMasks[bitpos];
+ 
+     int sample = data.getElem(offset);
+     sample |= s;
+     data.setElem(offset, sample);
+   }
+   
+   /**
+    * Creates a String with some information about this SampleModel.
+    * @return A String describing this SampleModel.
+    * @see java.lang.Object#toString()
+    */
+   public String toString()
+   {
+     StringBuffer result = new StringBuffer();
+     result.append(getClass().getName());
+     result.append("[");
+     result.append("scanlineStride=").append(scanlineStride);
+     for(int i=0; i < bitMasks.length; i+=1)
+     {
+       result.append(", mask[").append(i).append("]=0x").append(Integer.toHexString(bitMasks[i]));
+     }
+     
+     result.append("]");
+     return result.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/PackedColorModel.java gcc-4.1.0/libjava/classpath/java/awt/image/PackedColorModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/PackedColorModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/PackedColorModel.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,188 ----
+ /* Copyright (C) 2000, 2002, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import gnu.java.awt.BitMaskExtent;
+ 
+ import java.awt.Point;
+ import java.awt.color.ColorSpace;
+ 
+ /**
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public abstract class PackedColorModel extends ColorModel
+ {
+   private int masks[];
+   
+   /* Package accessibility, the DirectColorModel needs this array */
+   int shifts[];
+ 
+   public PackedColorModel(ColorSpace cspace, int pixelBits,
+ 			  int[] colorMaskArray, int alphaMask,
+ 			  boolean isAlphaPremultiplied,
+ 			  int transparency,
+ 			  int transferType)
+   {
+     super(pixelBits, calcBitsPerComponent(colorMaskArray, alphaMask),
+ 	  cspace, (alphaMask != 0), isAlphaPremultiplied, transparency,
+ 	  transferType);
+     initMasks(colorMaskArray, alphaMask);
+     if ((pixelBits<1) || (pixelBits>32)) {
+       throw new IllegalArgumentException("pixels per bits must be " +
+ 					 "in the range [1, 32]");
+     }
+   }
+     
+   private static int[] calcBitsPerComponent(int[] colorMaskArray,
+ 					    int alphaMask)
+   {
+     int numComponents = colorMaskArray.length;
+     if (alphaMask != 0) numComponents++;
+     
+     int[] bitsPerComponent = new int[numComponents];
+     
+     BitMaskExtent extent = new BitMaskExtent();
+     for (int b=0; b<colorMaskArray.length; b++)
+       {
+ 	extent.setMask(colorMaskArray[b]);
+ 	bitsPerComponent[b] = extent.bitWidth;
+       }
+     if (alphaMask != 0)
+       {
+ 	extent.setMask(alphaMask);
+ 	bitsPerComponent[numComponents-1] = extent.bitWidth;
+       }
+     return bitsPerComponent;
+   }
+ 
+   /** Initializes the masks.  */
+   private void initMasks(int[] colorMaskArray, int alphaMask)
+   {
+     int numComponents = colorMaskArray.length;
+     if (alphaMask == 0)
+       {
+ 	masks = colorMaskArray;
+       }
+     else
+       {
+ 	masks = new int[numComponents+1];
+ 	System.arraycopy(colorMaskArray, 0,
+ 			 masks, 0,
+ 			 numComponents);
+ 	masks[numComponents++] = alphaMask;
+       }
+ 	
+     shifts = new int[numComponents];
+ 	
+     // Bit field handling have been moved to a utility class
+     BitMaskExtent extent = new BitMaskExtent();
+     for (int b=0; b<numComponents; b++)
+       {
+ 	extent.setMask(masks[b]);
+ 	shifts[b] = extent.leastSignificantBit;
+       }
+   }
+     
+   public PackedColorModel(ColorSpace cspace, int pixelBits,
+ 			  int rmask, int gmask, int bmask,
+ 			  int amask, boolean isAlphaPremultiplied,
+ 			  int transparency,
+ 			  int transferType)
+   {
+     this(cspace, pixelBits, makeColorMaskArray(rmask, gmask, bmask),
+ 	 amask, isAlphaPremultiplied, transparency, transferType);
+   }
+     
+   /* TODO: If there is a alpha mask, it is inefficient to create a
+      color mask array that will be discarded when the alpha mask is
+      appended. We should probably create a private constructor that
+      takes a complete array of masks (color+alpha) as an
+      argument. */
+ 
+   private static int[] makeColorMaskArray(int rmask, int gmask, int bmask)
+   {
+     int[] colorMaskArray = { rmask, gmask, bmask };
+     return colorMaskArray;
+   }   
+ 
+   public final int getMask(int index)
+   {
+     return masks[index];
+   }
+   
+   public final int[] getMasks()
+   {
+     return masks;
+   }
+ 
+   public SampleModel createCompatibleSampleModel(int w, int h)
+   {
+     return new SinglePixelPackedSampleModel(transferType, w, h, masks);
+   }
+     
+   public boolean isCompatibleSampleModel(SampleModel sm)
+   {
+     if (!super.isCompatibleSampleModel(sm)) return false;
+     if (!(sm instanceof SinglePixelPackedSampleModel)) return false;
+     
+     SinglePixelPackedSampleModel sppsm =
+       (SinglePixelPackedSampleModel) sm;
+     return java.util.Arrays.equals(sppsm.getBitMasks(), masks);
+   }
+ 
+   public WritableRaster getAlphaRaster(WritableRaster raster) {
+     if (!hasAlpha()) return null;
+ 	
+     SampleModel sm = raster.getSampleModel();
+     int[] alphaBand = { sm.getNumBands() - 1 };
+     SampleModel alphaModel = sm.createSubsetSampleModel(alphaBand);
+     DataBuffer buffer = raster.getDataBuffer();
+     Point origin = new Point(0, 0);
+     return Raster.createWritableRaster(alphaModel, buffer, origin);
+   }
+     
+   public boolean equals(Object obj)
+   {
+     if (!super.equals(obj)) return false;
+     if (!(obj instanceof PackedColorModel)) return false;
+     
+     PackedColorModel other = (PackedColorModel) obj;
+     
+     return java.util.Arrays.equals(masks, other.masks);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/PixelGrabber.java gcc-4.1.0/libjava/classpath/java/awt/image/PixelGrabber.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/PixelGrabber.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/PixelGrabber.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,634 ----
+ /* PixelGrabber.java -- retrieve a subset of an image's data
+    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Image;
+ import java.util.Hashtable;
+ 
+ /**
+  * PixelGrabber is an ImageConsumer that extracts a rectangular region
+  * of pixels from an Image.
+  */
+ public class PixelGrabber implements ImageConsumer
+ {
+   int x, y, offset;
+   int width = -1;
+   int height = -1;
+   int scansize = -1;
+   boolean forceRGB = true;
+ 
+   ColorModel model = ColorModel.getRGBdefault();
+   int hints;
+   Hashtable props;
+ 
+   int int_pixel_buffer[];
+   boolean ints_delivered = false;
+   byte byte_pixel_buffer[];
+   boolean bytes_delivered = false;
+ 
+   ImageProducer ip;
+   int observerStatus;
+   int consumerStatus;
+ 
+   private Thread grabberThread;
+   boolean grabbing = false;
+ 
+   /**
+    * Construct a PixelGrabber that will retrieve RGB data from a given
+    * Image.
+    *
+    * The RGB data will be retrieved from a rectangular region
+    * <code>(x, y, w, h)</code> within the image.  The data will be
+    * stored in the provided <code>pix</code> array, which must have
+    * been initialized to a size of at least <code>w * h</code>.  The
+    * data for a pixel (m, n) in the grab rectangle will be stored at
+    * <code>pix[(n - y) * scansize + (m - x) + off]</code>.
+    *
+    * @param img the Image from which to grab pixels
+    * @param x the x coordinate, relative to <code>img</code>'s
+    * top-left corner, of the grab rectangle's top-left pixel
+    * @param y the y coordinate, relative to <code>img</code>'s
+    * top-left corner, of the grab rectangle's top-left pixel
+    * @param w the width of the grab rectangle, in pixels
+    * @param h the height of the grab rectangle, in pixels
+    * @param pix the array in which to store grabbed RGB pixel data
+    * @param off the offset into the <code>pix</code> array at which to
+    * start storing RGB data
+    * @param scansize a set of <code>scansize</code> consecutive
+    * elements in the <code>pix</code> array represents one row of
+    * pixels in the grab rectangle
+    */
+   public PixelGrabber(Image img, int x, int y, int w, int h,
+ 		      int pix[], int off, int scansize)
+   {
+     this (img.getSource(), x, y, w, h, pix, off, scansize);
+   }
+ 
+   /**
+    * Construct a PixelGrabber that will retrieve RGB data from a given
+    * ImageProducer.
+    *
+    * The RGB data will be retrieved from a rectangular region
+    * <code>(x, y, w, h)</code> within the image produced by
+    * <code>ip</code>.  The data will be stored in the provided
+    * <code>pix</code> array, which must have been initialized to a
+    * size of at least <code>w * h</code>.  The data for a pixel (m, n)
+    * in the grab rectangle will be stored at
+    * <code>pix[(n - y) * scansize + (m - x) + off]</code>.
+    *
+    * @param ip the ImageProducer from which to grab pixels
+    * @param x the x coordinate of the grab rectangle's top-left pixel,
+    * specified relative to the top-left corner of the image produced
+    * by <code>ip</code>
+    * @param y the y coordinate of the grab rectangle's top-left pixel,
+    * specified relative to the top-left corner of the image produced
+    * by <code>ip</code>
+    * @param w the width of the grab rectangle, in pixels
+    * @param h the height of the grab rectangle, in pixels
+    * @param pix the array in which to store grabbed RGB pixel data
+    * @param off the offset into the <code>pix</code> array at which to
+    * start storing RGB data
+    * @param scansize a set of <code>scansize</code> consecutive
+    * elements in the <code>pix</code> array represents one row of
+    * pixels in the grab rectangle
+    */
+   public PixelGrabber(ImageProducer ip, int x, int y, int w, int h,
+ 		      int pix[], int off, int scansize)
+   {
+     if (ip == null)
+       throw new NullPointerException("The ImageProducer must not be null.");
+ 
+     this.ip = ip;
+     this.x = x;
+     this.y = y;
+     this.width = w;
+     this.height = h;
+     this.offset = off;
+     this.scansize = scansize;
+ 
+     int_pixel_buffer = pix;
+     // Initialize the byte array in case ip sends us byte-formatted
+     // pixel data.
+     byte_pixel_buffer = new byte[pix.length * 4];
+   }
+ 
+   /**
+    * Construct a PixelGrabber that will retrieve data from a given
+    * Image.
+    *
+    * The RGB data will be retrieved from a rectangular region
+    * <code>(x, y, w, h)</code> within the image.  The data will be
+    * stored in an internal array which can be accessed by calling
+    * <code>getPixels</code>.  The data for a pixel (m, n) in the grab
+    * rectangle will be stored in the returned array at index
+    * <code>(n - y) * scansize + (m - x) + off</code>.
+    * If forceRGB is false, then the returned data will be not be
+    * converted to RGB from its format in <code>img</code>.
+    *
+    * If <code>w</code> is negative, the width of the grab region will
+    * be from x to the right edge of the image.  Likewise, if
+    * <code>h</code> is negative, the height of the grab region will be
+    * from y to the bottom edge of the image.
+    *
+    * @param img the Image from which to grab pixels
+    * @param x the x coordinate, relative to <code>img</code>'s
+    * top-left corner, of the grab rectangle's top-left pixel
+    * @param y the y coordinate, relative to <code>img</code>'s
+    * top-left corner, of the grab rectangle's top-left pixel
+    * @param w the width of the grab rectangle, in pixels
+    * @param h the height of the grab rectangle, in pixels
+    * @param forceRGB true to force conversion of the rectangular
+    * region's pixel data to RGB
+    */
+   public PixelGrabber(Image img,
+ 		      int x, int y,
+ 		      int w, int h,
+ 		      boolean forceRGB)
+   {
+     this.ip = img.getSource();
+ 
+     if (this.ip == null)
+       throw new NullPointerException("The ImageProducer must not be null.");
+ 
+     this.x = x;
+     this.y = y;
+     width = w;
+     height = h;
+     // If width or height is negative, postpone pixel buffer
+     // initialization until setDimensions is called back by ip.
+     if (width >= 0 && height >= 0)
+       {
+ 	int_pixel_buffer = new int[width * height];
+ 	byte_pixel_buffer = new byte[width * height];
+       }
+     this.forceRGB = forceRGB;
+   }
+ 
+   /**
+    * Start grabbing pixels.
+    *
+    * Spawns an image production thread that calls back to this
+    * PixelGrabber's ImageConsumer methods.
+    */
+   public synchronized void startGrabbing()
+   {
+     // Make sure we're not already grabbing.
+     if (grabbing == false)
+       {
+ 	grabbing = true;
+ 	grabberThread = new Thread ()
+ 	  {
+ 	    public void run ()
+ 	    {
+               try
+                 {
+                   ip.startProduction (PixelGrabber.this);
+                 }
+               catch (Exception ex)
+                 {
+                   ex.printStackTrace();
+                   imageComplete(ImageConsumer.IMAGEABORTED);
+                 }
+ 	    }
+ 	  };
+ 	grabberThread.start ();
+       }
+   }
+ 
+   /**
+    * Abort pixel grabbing.
+    */
+   public synchronized void abortGrabbing()
+   {
+     if (grabbing)
+       {
+ 	// Interrupt the grabbing thread.
+         Thread moribund = grabberThread;
+         grabberThread = null;
+         moribund.interrupt();
+ 
+ 	imageComplete (ImageConsumer.IMAGEABORTED);
+       }
+   }
+ 
+   /**
+    * Have our Image or ImageProducer start sending us pixels via our
+    * ImageConsumer methods and wait for all pixels in the grab
+    * rectangle to be delivered.
+    *
+    * @return true if successful, false on abort or error
+    *
+    * @throws InterruptedException if interrupted by another thread.
+    */
+   public synchronized boolean grabPixels() throws InterruptedException
+   {
+     return grabPixels(0);
+   }
+ 
+   /**
+    * grabPixels's behavior depends on the value of <code>ms</code>.
+    *
+    * If ms < 0, return true if all pixels from the source image have
+    * been delivered, false otherwise.  Do not wait.
+    *
+    * If ms >= 0 then we request that our Image or ImageProducer start
+    * delivering pixels to us via our ImageConsumer methods.
+    *
+    * If ms > 0, wait at most <code>ms</code> milliseconds for
+    * delivery of all pixels within the grab rectangle.
+    *
+    * If ms == 0, wait until all pixels have been delivered.
+    *
+    * @return true if all pixels from the source image have been
+    * delivered, false otherwise
+    *
+    * @throws InterruptedException if this thread is interrupted while
+    * we are waiting for pixels to be delivered
+    */
+   public synchronized boolean grabPixels(long ms) throws InterruptedException
+   {
+     if (ms < 0)
+       return ((observerStatus & (ImageObserver.FRAMEBITS
+ 				 | ImageObserver.ALLBITS)) != 0);
+ 
+     // Spawn a new ImageProducer thread to send us the image data via
+     // our ImageConsumer methods.
+     startGrabbing();
+ 
+     if (ms > 0)
+       {
+ 	long stop_time = System.currentTimeMillis() + ms;
+ 	long time_remaining;
+ 	while (grabbing)
+ 	  {
+ 	    time_remaining = stop_time - System.currentTimeMillis();
+ 	    if (time_remaining <= 0)
+ 	      break;
+ 	    wait (time_remaining);
+ 	  }
+ 	abortGrabbing ();
+       }
+     else
+       wait ();
+ 
+     // If consumerStatus is non-zero then the image is done loading or
+     // an error has occurred.
+     if (consumerStatus != 0)
+       return setObserverStatus ();
+ 
+     return ((observerStatus & (ImageObserver.FRAMEBITS
+ 			       | ImageObserver.ALLBITS)) != 0);
+   }
+ 
+   // Set observer status flags based on the current consumer status
+   // flags.  Return true if the consumer flags indicate that the
+   // image was loaded successfully, or false otherwise.
+   private synchronized boolean setObserverStatus ()
+   {
+     boolean retval = false;
+ 
+     if ((consumerStatus & IMAGEERROR) != 0)
+       observerStatus |= ImageObserver.ERROR;
+ 
+     if ((consumerStatus & IMAGEABORTED) != 0)
+       observerStatus |= ImageObserver.ABORT;
+ 
+     if ((consumerStatus & STATICIMAGEDONE) != 0)
+       {
+ 	observerStatus |= ImageObserver.ALLBITS;
+ 	retval = true;
+       }
+ 
+     if ((consumerStatus & SINGLEFRAMEDONE) != 0)
+       {
+ 	observerStatus |= ImageObserver.FRAMEBITS;
+ 	retval = true;
+       }
+ 
+     return retval;
+   }
+ 
+   /**
+    * @return the status of the pixel grabbing thread, represented by a
+    * bitwise OR of ImageObserver flags
+    */
+   public synchronized int getStatus()
+   {
+     return observerStatus;
+   }
+ 
+   /**
+    * @return the width of the grab rectangle in pixels, or a negative
+    * number if the ImageProducer has not yet called our setDimensions
+    * method
+    */
+   public synchronized int getWidth()
+   {
+     return width;
+   }
+ 
+   /**
+    * @return the height of the grab rectangle in pixels, or a negative
+    * number if the ImageProducer has not yet called our setDimensions
+    * method
+    */
+   public synchronized int getHeight()
+   {
+     return height;
+   }
+ 
+   /**
+    * @return a byte array of pixel data if ImageProducer delivered
+    * pixel data using the byte[] variant of setPixels, or an int array
+    * otherwise
+    */
+   public synchronized Object getPixels()
+   {
+     if (ints_delivered)
+       return int_pixel_buffer;
+     else if (bytes_delivered)
+       return byte_pixel_buffer;
+     else
+       return null;
+   }
+ 
+   /**
+    * @return the ColorModel currently being used for the majority of
+    * pixel data conversions
+    */
+   public synchronized ColorModel getColorModel()
+   {
+     return model;
+   }
+ 
+   /**
+    * Our <code>ImageProducer</code> calls this method to indicate the
+    * size of the image being produced.
+    *
+    * setDimensions is an ImageConsumer method.  None of PixelGrabber's
+    * ImageConsumer methods should be called by code that instantiates
+    * a PixelGrabber.  They are only made public so they can be called
+    * by the PixelGrabber's ImageProducer.
+    * 
+    * @param width the width of the image
+    * @param height the height of the image
+    */
+   public synchronized void setDimensions(int width, int height)
+   {
+     // Our width wasn't set when we were constructed.  Set our width
+     // so that the grab region includes all pixels from x to the right
+     // edge of the source image.
+     if (this.width < 0)
+       this.width = width - x;
+ 
+     // Our height wasn't set when we were constructed.  Set our height
+     // so that the grab region includes all pixels from y to the
+     // bottom edge of the source image.
+     if (this.height < 0)
+       this.height = height - y;
+ 
+     if (scansize < 0)
+       scansize = this.width;
+ 
+     if (int_pixel_buffer == null)
+       int_pixel_buffer = new int[this.width * this.height];
+ 
+     if (byte_pixel_buffer == null)
+       byte_pixel_buffer = new byte[this.width * this.height];
+   }
+ 
+   /**
+    * Our <code>ImageProducer</code> may call this method to send us a
+    * list of its image's properties.
+    *
+    * setProperties is an ImageConsumer method.  None of PixelGrabber's
+    * ImageConsumer methods should be called by code that instantiates
+    * a PixelGrabber.  They are only made public so they can be called
+    * by the PixelGrabber's ImageProducer.
+    *
+    * @param props a list of properties associated with the image being
+    * produced
+    */
+   public synchronized void setProperties(Hashtable props)
+   {
+     this.props = props;
+   }
+ 
+   /**
+    * Our ImageProducer will call <code>setColorModel</code> to
+    * indicate the model used by the majority of calls to
+    * <code>setPixels</code>.  Each call to <code>setPixels</code>
+    * could however indicate a different <code>ColorModel</code>.
+    *
+    * setColorModel is an ImageConsumer method.  None of PixelGrabber's
+    * ImageConsumer methods should be called by code that instantiates
+    * a PixelGrabber.  They are only made public so they can be called
+    * by the PixelGrabber's ImageProducer.
+    *
+    * @param model the color model to be used most often by setPixels
+    *
+    * @see ColorModel
+    */
+   public synchronized void setColorModel(ColorModel model)
+   {
+     this.model = model;
+   }
+ 
+   /**
+    * Our <code>ImageProducer</code> may call this method with a
+    * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
+    * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
+    * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code>.
+    * 
+    * setHints is an ImageConsumer method.  None of PixelGrabber's
+    * ImageConsumer methods should be called by code that instantiates
+    * a PixelGrabber.  They are only made public so they can be called
+    * by the PixelGrabber's ImageProducer.
+    *
+    * @param flags a bit mask of hints
+    */
+   public synchronized void setHints(int flags)
+   {
+     hints = flags;
+   }
+ 
+   /**
+    * Our ImageProducer calls setPixels to deliver a subset of its
+    * pixels.
+    *
+    * Each element of the pixels array represents one pixel.  The
+    * pixel data is formatted according to the color model model.
+    * The x and y parameters are the coordinates of the rectangular
+    * region of pixels being delivered to this ImageConsumer,
+    * specified relative to the top left corner of the image being
+    * produced.  Likewise, w and h are the pixel region's dimensions.
+    *
+    * @param x x coordinate of pixel block
+    * @param y y coordinate of pixel block
+    * @param w width of pixel block
+    * @param h height of pixel block
+    * @param model color model used to interpret pixel data
+    * @param pixels pixel block data
+    * @param offset offset into pixels array
+    * @param scansize width of one row in the pixel block
+    */
+   public synchronized void setPixels(int x, int y, int w, int h, 
+ 				     ColorModel model, byte[] pixels,
+ 				     int offset, int scansize)
+   {
+     ColorModel currentModel;
+     if (model != null)
+       currentModel = model;
+     else
+       currentModel = this.model;
+ 
+     for(int yp = y; yp < (y + h); yp++)
+       {
+ 	for(int xp = x; xp < (x + w); xp++)
+ 	  {
+ 	    // Check if the coordinates (xp, yp) are within the
+ 	    // pixel block that we are grabbing.
+ 	    if(xp >= this.x
+ 	       && yp >= this.y
+ 	       && xp < (this.x + this.width)
+ 	       && yp < (this.y + this.height))
+ 	      {
+ 		int i = (yp - this.y) * this.scansize + (xp - this.x) + this.offset;
+ 		int p = (yp - y) * scansize + (xp - x) + offset;
+ 		if (forceRGB)
+ 		  {
+ 		    ints_delivered = true;
+ 
+ 		    int_pixel_buffer[i] = currentModel.getRGB (pixels[p] & 0xFF);
+ 		  }
+ 		else
+ 		  {
+ 		    bytes_delivered = true;
+ 
+ 		    byte_pixel_buffer[i] = pixels[p];
+ 		  }
+ 	      }
+ 	  }
+       }
+   }
+ 
+   /**
+    * Our ImageProducer calls setPixels to deliver a subset of its
+    * pixels.
+    *
+    * Each element of the pixels array represents one pixel.  The
+    * pixel data is formatted according to the color model model.
+    * The x and y parameters are the coordinates of the rectangular
+    * region of pixels being delivered to this ImageConsumer,
+    * specified relative to the top left corner of the image being
+    * produced.  Likewise, w and h are the pixel region's dimensions.
+    *
+    * @param x x coordinate of pixel block
+    * @param y y coordinate of pixel block
+    * @param w width of pixel block
+    * @param h height of pixel block
+    * @param model color model used to interpret pixel data
+    * @param pixels pixel block data
+    * @param offset offset into pixels array
+    * @param scansize width of one row in the pixel block
+    */
+   public synchronized void setPixels(int x, int y, int w, int h, 
+ 				     ColorModel model, int[] pixels,
+ 				     int offset, int scansize)
+   {
+     ColorModel currentModel;
+     if (model != null)
+       currentModel = model;
+     else
+       currentModel = this.model;
+ 
+     ints_delivered = true;
+ 
+     for(int yp = y; yp < (y + h); yp++)
+       {
+ 	for(int xp = x; xp < (x + w); xp++)
+ 	  {
+ 	    // Check if the coordinates (xp, yp) are within the
+ 	    // pixel block that we are grabbing.
+ 	    if(xp >= this.x
+ 	       && yp >= this.y
+ 	       && xp < (this.x + this.width)
+ 	       && yp < (this.y + this.height))
+ 	      {
+ 		int i = (yp - this.y) * this.scansize + (xp - this.x) + this.offset;
+ 		int p = (yp - y) * scansize + (xp - x) + offset;
+ 		if (forceRGB)
+ 		  int_pixel_buffer[i] = currentModel.getRGB (pixels[p]);
+ 		else
+ 		  int_pixel_buffer[i] = pixels[p];
+ 	      }
+ 	  }
+       }
+   }
+ 
+   /**
+    * Our <code>ImageProducer</code> calls this method to inform us
+    * that a single frame or the entire image is complete.  The method
+    * is also used to inform us of an error in loading or producing the
+    * image.
+    *
+    * @param status the status of image production, represented by a
+    * bitwise OR of ImageConsumer flags
+    */
+   public synchronized void imageComplete(int status)
+   {
+     consumerStatus = status;
+     setObserverStatus ();
+     grabbing = false;
+     if (ip != null)
+       ip.removeConsumer (this);
+ 
+     notifyAll ();
+   }
+ 
+   /**
+    * @return the return value of getStatus
+    *
+    * @specnote The newer getStatus should be used in place of status.
+    */
+   public synchronized int status()
+   {
+     return getStatus();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java gcc-4.1.0/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* PixelInterleavedSampleModel.java
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ 
+ /**
+  * A <code>SampleModel</code> that uses exactly one element of the
+  * raster&#x2019;s {@link DataBuffer} per pixel, holds all bands in a
+  * single bank, and stores band data in pixel-interleaved manner.
+  *
+  * @since 1.2
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public class PixelInterleavedSampleModel
+   extends ComponentSampleModel
+ {
+   public PixelInterleavedSampleModel(int dataType, int width, int height,
+                                      int pixelStride, int scanlineStride,
+                                      int[] bandOffsets)
+   {
+     super(dataType, width, height, pixelStride, scanlineStride,
+           bandOffsets);
+   }
+ 
+   
+   /**
+    * Creates a new <code>SampleModel</code> that is like this one, but
+    * uses the specified width and height.
+    *
+    * @param width the number of pixels in the horizontal direction.
+    *
+    * @param height the number of pixels in the vertical direction.
+    */
+   public SampleModel createCompatibleSampleModel(int width, int height)
+   {
+     return new PixelInterleavedSampleModel(dataType, width, height,
+                                            pixelStride, scanlineStride,
+                                            bandOffsets);
+   }
+ 
+ 
+   /**
+    * Creates a new <code>SampleModel</code> that is like this one, but
+    * uses only a subset of its bands.
+    *
+    * @param bands an array whose elements indicate which bands shall
+    * be part of the subset. For example, <code>[0, 2, 3]</code> would
+    * create a SampleModel containing bands #0, #2 and #3.
+    */
+   public SampleModel createSubsetSampleModel(int[] bands)
+   {
+     int[] subOffsets;
+ 
+     subOffsets = new int[bands.length];
+     for (int i = 0; i < bands.length; i++)
+       subOffsets[i] = bandOffsets[bands[i]];
+ 
+     return new PixelInterleavedSampleModel(dataType, width, height,
+                                            pixelStride, scanlineStride,
+                                            subOffsets);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/RGBImageFilter.java gcc-4.1.0/libjava/classpath/java/awt/image/RGBImageFilter.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/RGBImageFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/RGBImageFilter.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,273 ----
+ /* RGBImageFilter.java -- Java class for filtering Pixels by RGB values
+    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * A filter designed to filter images in the default RGBColorModel regardless of 
+  * the ImageProducer's ColorModel.
+  *
+  * @author Mark Benvenuto (mcb54@columbia.edu)
+  */
+ public abstract class RGBImageFilter extends ImageFilter
+ {
+     protected ColorModel origmodel;
+ 
+     protected ColorModel newmodel;
+     
+     /**
+        Specifies whether to apply the filter to the index entries of the 
+        IndexColorModel. Subclasses should set this to true if the filter 
+        does not depend on the pixel's coordinate.
+      */
+     protected boolean canFilterIndexColorModel = false;
+ 
+     /**
+        Construct new RGBImageFilter.
+      */
+     public RGBImageFilter() 
+     {
+     }
+ 
+     /**
+      * Sets the ColorModel used to filter with. If the specified ColorModel is IndexColorModel 
+      * and canFilterIndexColorModel is true, we subsitute the ColorModel for a filtered one
+      * here and in setPixels whenever the original one appears. Otherwise overrides the default
+      * ColorModel of ImageProducer and specifies the default RGBColorModel
+      *
+      * @param model the color model to be used most often by setPixels
+      * @see ColorModel */
+     public void setColorModel(ColorModel model) 
+     {
+ 	origmodel = model;
+ 	newmodel = model;
+ 
+ 	if( ( model instanceof IndexColorModel) && canFilterIndexColorModel  ) {
+ 		newmodel = filterIndexColorModel( (IndexColorModel) model );
+ 		if (consumer != null)
+ 		  consumer.setColorModel(newmodel);
+ 	    }
+ 	else {
+ 	  if (consumer != null)
+ 	    consumer.setColorModel(ColorModel.getRGBdefault());
+ 	}
+     }
+     
+     /**
+        Registers a new ColorModel to subsitute for the old ColorModel when 
+        setPixels encounters the a pixel with the old ColorModel. The pixel 
+        remains unchanged except for a new ColorModel.
+        
+        @param oldcm the old ColorModel
+        @param newcm the new ColorModel
+      */
+     public void substituteColorModel(ColorModel oldcm,
+ 				     ColorModel newcm)
+     {
+ 	origmodel = oldcm;
+ 	newmodel = newcm;
+     }
+ 
+     /**
+        Filters an IndexColorModel through the filterRGB function. Uses
+        coordinates of -1 to indicate its filtering an index and not a pixel.
+ 
+        @param icm an IndexColorModel to filter
+      */
+     public IndexColorModel filterIndexColorModel(IndexColorModel icm) 
+     {
+ 	int len = icm.getMapSize(), rgb;
+ 	byte reds[] = new byte[len], greens[] = new byte[len], blues[] = new byte[len], alphas[]  = new byte[len];
+ 	
+ 	icm.getAlphas( alphas );
+ 	icm.getReds( reds );
+ 	icm.getGreens( greens );
+ 	icm.getBlues( blues );
+ 
+ 	for( int i = 0; i < len; i++ )
+ 	    {
+ 		rgb = filterRGB( -1, -1, makeColor ( alphas[i], reds[i], greens[i], blues[i] ) );
+ 		alphas[i] = (byte)(( 0xff000000 & rgb ) >> 24);
+ 		reds[i] = (byte)(( 0xff0000 & rgb ) >> 16);
+ 		greens[i] = (byte)(( 0xff00 & rgb ) >> 8);
+ 		blues[i] = (byte)(0xff & rgb);
+ 	    }
+ 	return new IndexColorModel( icm.getPixelSize(), len, reds, greens, blues, alphas );
+     }
+ 
+     private int makeColor( byte a, byte r, byte g, byte b )
+     {
+ 	return ( 0xff000000 & (a << 24) | 0xff0000 & (r << 16) | 0xff00 & (g << 8) | 0xff & b ); 
+     }
+ 
+     /**
+        This functions filters a set of RGB pixels through filterRGB.
+ 
+        @param x the x coordinate of the rectangle
+        @param y the y coordinate of the rectangle
+        @param w the width of the rectangle
+        @param h the height of the rectangle
+        @param pixels the array of pixel values
+        @param offset the index of the first pixels in the <code>pixels</code> array
+        @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+     */
+     public void filterRGBPixels(int x, int y, int w, int h, int[] pixels,
+ 				int offset, int scansize)
+     {
+       for (int yp = 0; yp < h; yp++)
+ 	{
+ 	  for (int xp = 0; xp < w; xp++)
+ 	    {
+ 	      pixels[offset + xp] = filterRGB(xp + x, yp + y, pixels[offset + xp]);
+ 	    }
+ 	  offset += scansize;
+ 	}
+     }
+ 
+ 
+     /**
+      * If the ColorModel is the same ColorModel which as already converted 
+      * then it converts it the converted ColorModel. Otherwise it passes the 
+      * array of pixels through filterRGBpixels.
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+                           ColorModel model, byte[] pixels,
+                           int offset, int scansize)
+     {
+ 	if(model == origmodel && (model instanceof IndexColorModel) && canFilterIndexColorModel)
+ 	{
+ 	  if (consumer != null)
+ 	    consumer.setPixels(x, y, w, h, newmodel, pixels, offset, scansize);
+ 	}
+ 	else
+ 	{
+ 	    int intPixels[] =
+ 		convertColorModelToDefault( x, y, w, h, model, pixels, offset, scansize );
+ 	    filterRGBPixels( x, y, w, h, intPixels, offset, scansize );
+ 	    if (consumer != null)
+ 	      consumer.setPixels(x, y, w, h, ColorModel.getRGBdefault(), intPixels, offset, scansize);
+ 	}
+     }
+ 
+     /**
+      * This function delivers a rectangle of pixels where any
+      * pixel(m,n) is stored in the array as an <code>int</code> at
+      * index (n * scansize + m + offset).  
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+                           ColorModel model, int[] pixels,
+                           int offset, int scansize)
+     {
+ 	if(model == origmodel && (model instanceof IndexColorModel) && canFilterIndexColorModel)
+ 	{
+ 	  if (consumer != null)
+ 	    consumer.setPixels(x, y, w, h, newmodel, pixels, offset, scansize);
+ 	}
+ 	else
+ 	{
+ 	    //FIXME: Store the filtered pixels in a separate temporary buffer?
+ 	  convertColorModelToDefault( x, y, w, h, model, pixels, offset, scansize );
+ 	  filterRGBPixels( x, y, w, h, pixels, offset, scansize );
+ 	  if (consumer != null)
+ 	    consumer.setPixels(x, y, w, h, ColorModel.getRGBdefault(), pixels, offset, scansize);
+ 	}
+     }
+ 
+     private int[] convertColorModelToDefault(int x, int y, int w, int h, 
+                                             ColorModel model, byte pixels[],
+                                             int offset, int scansize)
+     {
+ 	int intPixels[] = new int[pixels.length];
+ 	for (int i = 0; i < pixels.length; i++)
+ 	    intPixels[i] = makeColorbyDefaultCM(model, pixels[i]);
+ 	return intPixels;
+     }
+ 
+     private void convertColorModelToDefault(int x, int y, int w, int h, 
+                                             ColorModel model, int pixels[],
+                                             int offset, int scansize)
+     {
+ 	for (int i = 0; i < pixels.length; i++)
+ 	    pixels[i] = makeColorbyDefaultCM(model, pixels[i]);
+     }
+ 
+     private int makeColorbyDefaultCM(ColorModel model, byte rgb) 
+     {
+ 	return makeColor( model.getAlpha( rgb ) * 4, model.getRed( rgb ) * 4, model.getGreen( rgb ) * 4, model.getBlue( rgb ) * 4 );
+     }
+ 
+     private int makeColorbyDefaultCM(ColorModel model, int rgb) 
+     {
+ 	return makeColor( model.getAlpha( rgb ), model.getRed( rgb ), model.getGreen( rgb ), model.getBlue( rgb ) );
+     }
+ 
+     private int makeColor( int a, int r, int g, int b )
+     {
+ 	return (int)( 0xff000000 & (a << 24) | 0xff0000 & (r << 16) | 0xff00 & (g << 8) | 0xff & b ); 
+     }
+ 
+ 
+     /**
+        Filters a single pixel from the default ColorModel.
+ 
+        @param x x-coordinate
+        @param y y-coordinate
+        @param rgb color
+      */
+     public abstract int filterRGB(int x,
+ 				  int y,
+ 				  int rgb);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/Raster.java gcc-4.1.0/libjava/classpath/java/awt/image/Raster.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/Raster.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/Raster.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,546 ----
+ /* Copyright (C) 2000, 2002, 2003  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ 
+ /**
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public class Raster
+ {
+   protected SampleModel sampleModel;
+   protected DataBuffer dataBuffer;
+   protected int minX;
+   protected int minY;
+   protected int width;
+   protected int height;
+   protected int sampleModelTranslateX;
+   protected int sampleModelTranslateY;
+   protected int numBands;
+   protected int numDataElements;
+   protected Raster parent;
+   
+   protected Raster(SampleModel sampleModel, Point origin)
+   {
+     this(sampleModel, sampleModel.createDataBuffer(), origin);
+   }
+   
+   protected Raster(SampleModel sampleModel, DataBuffer dataBuffer,
+ 		   Point origin)
+   {
+     this(sampleModel, dataBuffer,
+ 	 new Rectangle(origin.x, origin.y,
+ 		       sampleModel.getWidth(), sampleModel.getHeight()),
+ 	 origin, null);
+   }
+ 
+   protected Raster(SampleModel sampleModel, DataBuffer dataBuffer,
+ 		   Rectangle aRegion,
+ 		   Point sampleModelTranslate, Raster parent)
+   {
+     this.sampleModel = sampleModel;
+     this.dataBuffer = dataBuffer;
+     this.minX = aRegion.x;
+     this.minY = aRegion.y;
+     this.width = aRegion.width;
+     this.height = aRegion.height;
+     
+     // If sampleModelTranslate is null, use (0,0).  Methods such as
+     // Raster.createRaster are specified to allow for a null argument.
+     if (sampleModelTranslate != null)
+     {
+       this.sampleModelTranslateX = sampleModelTranslate.x;
+       this.sampleModelTranslateY = sampleModelTranslate.y;
+     }
+ 
+     this.numBands = sampleModel.getNumBands();
+     this.numDataElements = sampleModel.getNumDataElements();
+     this.parent = parent;
+   }
+     
+   public static WritableRaster createInterleavedRaster(int dataType,
+ 						       int w, int h,
+ 						       int bands, 
+ 						       Point location)
+   {
+     int[] bandOffsets = new int[bands];
+     // TODO: Maybe not generate this every time.
+     for (int b=0; b<bands; b++) bandOffsets[b] = b;
+     
+     int scanlineStride = bands*w;
+     return createInterleavedRaster(dataType, w, h, scanlineStride, bands,
+ 				   bandOffsets, location);
+   }
+ 
+   public static WritableRaster createInterleavedRaster(int dataType,
+ 						       int w, int h,
+ 						       int scanlineStride,
+ 						       int pixelStride,
+ 						       int[] bandOffsets,
+ 						       Point location)
+   {
+     SampleModel sm = new ComponentSampleModel(dataType,
+ 					      w, h,
+ 					      pixelStride,
+ 					      scanlineStride,
+ 					      bandOffsets);
+     return createWritableRaster(sm, location);
+   }
+ 
+   public static WritableRaster createBandedRaster(int dataType, 
+ 						  int w, int h, int bands,
+ 						  Point location)
+   {
+     SampleModel sm = new BandedSampleModel(dataType, w, h, bands);
+     return createWritableRaster(sm, location);
+   }
+ 
+   public static WritableRaster createBandedRaster(int dataType,
+ 						  int w, int h,
+ 						  int scanlineStride,
+ 						  int[] bankIndices,
+ 						  int[] bandOffsets,
+ 						  Point location)
+   {
+     SampleModel sm = new BandedSampleModel(dataType, w, h, scanlineStride,
+ 					   bankIndices, bandOffsets);
+     return createWritableRaster(sm, location);
+   }
+   
+   public static WritableRaster createPackedRaster(int dataType,
+ 						  int w, int h,
+ 						  int[] bandMasks,
+ 						  Point location)
+   {
+     SampleModel sm = new SinglePixelPackedSampleModel(dataType,
+ 						      w, h,
+ 						      bandMasks);
+     return createWritableRaster(sm, location);
+   }
+ 
+   public static WritableRaster createPackedRaster(int dataType,
+ 						  int w, int h,
+ 						  int bands, int bitsPerBand,
+ 						  Point location)
+   {
+     if (bands <= 0 || (bands * bitsPerBand > getTypeBits(dataType)))
+       throw new IllegalArgumentException();
+ 
+     SampleModel sm;
+ 
+     if (bands == 1)
+ 	sm = new MultiPixelPackedSampleModel(dataType, w, h, bitsPerBand);
+     else
+       {
+ 	int[] bandMasks = new int[bands];
+ 	int mask = 0x1;
+ 	for (int bits = bitsPerBand; --bits != 0;)
+ 	  mask = (mask << 1) | 0x1;
+ 	for (int i = 0; i < bands; i++)
+ 	  {
+ 	    bandMasks[i] = mask;
+ 	    mask <<= bitsPerBand;
+ 	  }
+ 	  
+ 	sm = new SinglePixelPackedSampleModel(dataType, w, h, bandMasks);
+       }
+     return createWritableRaster(sm, location);
+   }
+ 
+   public static WritableRaster
+   createInterleavedRaster(DataBuffer dataBuffer, int w, int h,
+ 			  int scanlineStride, int pixelStride,
+ 			  int[] bandOffsets, Point location)
+   {
+     SampleModel sm = new ComponentSampleModel(dataBuffer.getDataType(),
+ 					      w, h,
+ 					      scanlineStride,
+ 					      pixelStride,
+ 					      bandOffsets);
+     return createWritableRaster(sm, dataBuffer, location);
+   }
+ 
+   public static
+   WritableRaster createBandedRaster(DataBuffer dataBuffer,
+ 				    int w, int h,
+ 				    int scanlineStride,
+ 				    int[] bankIndices,
+ 				    int[] bandOffsets,
+ 				    Point location)
+   {
+     SampleModel sm = new BandedSampleModel(dataBuffer.getDataType(),
+ 					   w, h, scanlineStride,
+ 					   bankIndices, bandOffsets);
+     return createWritableRaster(sm, dataBuffer, location);
+   }
+   
+   public static WritableRaster
+   createPackedRaster(DataBuffer dataBuffer,
+ 		     int w, int h,
+ 		     int scanlineStride,
+ 		     int[] bandMasks,
+ 		     Point location)
+  {
+     SampleModel sm =
+       new SinglePixelPackedSampleModel(dataBuffer.getDataType(),
+ 				       w, h,
+ 				       scanlineStride,
+ 				       bandMasks);
+     return createWritableRaster(sm, dataBuffer, location);
+   }
+   
+   public static WritableRaster
+   createPackedRaster(DataBuffer dataBuffer,
+ 		     int w, int h,
+ 		     int bitsPerPixel,
+ 		     Point location)
+   {
+     SampleModel sm =
+       new MultiPixelPackedSampleModel(dataBuffer.getDataType(),
+ 				       w, h,
+ 				       bitsPerPixel);
+     return createWritableRaster(sm, dataBuffer, location);
+   }
+     
+   public static Raster createRaster(SampleModel sm, DataBuffer db,
+ 				    Point location)
+   {
+     return new Raster(sm, db, location);
+   }
+ 
+   public static WritableRaster createWritableRaster(SampleModel sm,
+ 						    Point location)
+   {
+     return new WritableRaster(sm, location);
+   }
+ 
+   public static WritableRaster createWritableRaster(SampleModel sm,
+ 						    DataBuffer db,
+ 						    Point location)
+   {
+     return new WritableRaster(sm, db, location);
+   }
+ 
+   public Raster getParent()
+   {
+     return parent;
+   }
+ 
+   public final int getSampleModelTranslateX()
+   {
+     return sampleModelTranslateX;
+   }
+ 
+   public final int getSampleModelTranslateY()
+   {
+     return sampleModelTranslateY;
+   }
+ 
+   public WritableRaster createCompatibleWritableRaster()
+   {
+     return new WritableRaster(getSampleModel(), new Point(minX, minY));
+   }
+ 
+   public WritableRaster createCompatibleWritableRaster(int w, int h)
+   {
+     return createCompatibleWritableRaster(minX, minY, w, h);
+   }
+ 
+   public WritableRaster createCompatibleWritableRaster(Rectangle rect)
+   {
+     return createCompatibleWritableRaster(rect.x, rect.y,
+ 					  rect.width, rect.height);
+   }
+ 
+   public WritableRaster createCompatibleWritableRaster(int x, int y,
+ 						       int w, int h)
+   {
+     SampleModel sm = getSampleModel().createCompatibleSampleModel(w, h);
+     return new WritableRaster(sm, sm.createDataBuffer(),
+ 			      new Point(x, y));
+   }
+ 
+   public Raster createTranslatedChild(int childMinX, int childMinY) {
+     int tcx = sampleModelTranslateX - minX + childMinX;
+     int tcy = sampleModelTranslateY - minY + childMinY;
+     
+     return new Raster(sampleModel, dataBuffer,
+ 		      new Rectangle(childMinX, childMinY,
+ 				    width, height),
+ 		      new Point(tcx, tcy),
+ 		      this);
+   }
+ 
+   public Raster createChild(int parentX, int parentY, int width,
+ 			    int height, int childMinX, int childMinY,
+ 			    int[] bandList)
+   {
+     /* FIXME: Throw RasterFormatException if child bounds extends
+        beyond the bounds of this raster. */
+ 
+     SampleModel sm = (bandList == null) ?
+       sampleModel :
+       sampleModel.createSubsetSampleModel(bandList);
+ 
+     /*
+         data origin
+        /
+       +-------------------------
+       |\. __ parent trans
+       | \`.  
+       |  \ `.    parent origin
+       |   \  `. /
+       |   /\   +-------- - -
+       |trans\ /<\-- deltaTrans
+       |child +-+-\---- - - 
+       |     /|`|  \__ parent [x, y]
+       |child | |`. \
+       |origin| :  `.\
+       |      |    / `\
+       |      :   /    +
+       | child [x, y] 
+ 
+       parent_xy - parent_trans = child_xy - child_trans
+ 
+       child_trans = parent_trans + child_xy - parent_xy
+     */
+ 
+     return new Raster(sm, dataBuffer,
+ 		      new Rectangle(childMinX, childMinY,
+ 				    width, height),
+ 		      new Point(sampleModelTranslateX+childMinX-parentX,
+ 				sampleModelTranslateY+childMinY-parentY),
+ 		      this);
+   }
+ 
+   public Rectangle getBounds()
+   {
+     return new Rectangle(minX, minY, width, height);
+   }
+ 
+   public final int getMinX()
+   {
+     return minX;
+   }
+ 
+   public final int getMinY()
+   {
+     return minY;
+   }
+ 
+   public final int getWidth()
+   {
+     return width;
+   }
+ 
+   public final int getHeight()
+   {
+     return height;
+   }
+ 
+   public final int getNumBands()
+   {
+     return numBands;
+   }
+     
+   public final int getNumDataElements()
+   {
+     return numDataElements;
+   }
+     
+   public final int getTransferType()
+   {
+     return sampleModel.getTransferType();
+   }
+ 
+   public DataBuffer getDataBuffer()
+   {
+     return dataBuffer;
+   }
+ 
+   public SampleModel getSampleModel()
+   {
+     return sampleModel;
+   }
+ 
+   public Object getDataElements(int x, int y, Object outData)
+   {
+     return sampleModel.getDataElements(x-sampleModelTranslateX,
+ 				       y-sampleModelTranslateY,
+ 				       outData, dataBuffer);
+   }
+ 
+   public Object getDataElements(int x, int y, int w, int h,
+ 				Object outData)
+   {
+     return sampleModel.getDataElements(x-sampleModelTranslateX,
+ 				       y-sampleModelTranslateY,
+ 				       w, h, outData, dataBuffer);
+   }
+ 
+   public int[] getPixel(int x, int y, int[] iArray)
+   {
+     return sampleModel.getPixel(x-sampleModelTranslateX,
+ 				y-sampleModelTranslateY,
+ 				iArray, dataBuffer);
+   }
+ 
+   public float[] getPixel(int x, int y, float[] fArray)
+   {
+     return sampleModel.getPixel(x-sampleModelTranslateX,
+ 				y-sampleModelTranslateY,
+ 				fArray, dataBuffer);
+   }
+ 
+   public double[] getPixel(int x, int y, double[] dArray)
+   {
+     return sampleModel.getPixel(x-sampleModelTranslateX,
+ 				y-sampleModelTranslateY,
+ 				dArray, dataBuffer);
+   }
+ 
+   public int[] getPixels(int x, int y, int w, int h, int[] iArray)
+   {
+     return sampleModel.getPixels(x-sampleModelTranslateX,
+ 				 y-sampleModelTranslateY,
+ 				 w, h, iArray, dataBuffer);
+   }
+ 
+   public float[] getPixels(int x, int y, int w, int h,
+ 			   float[] fArray)
+   {
+     return sampleModel.getPixels(x-sampleModelTranslateX,
+ 				 y-sampleModelTranslateY,
+ 				 w, h, fArray, dataBuffer);
+   }
+ 
+   public double[] getPixels(int x, int y, int w, int h,
+ 			    double[] dArray)
+   {
+     return sampleModel.getPixels(x-sampleModelTranslateX,
+ 				 y-sampleModelTranslateY,
+ 				 w, h, dArray, dataBuffer);
+   }
+ 
+   public int getSample(int x, int y, int b)
+   {
+     return sampleModel.getSample(x-sampleModelTranslateX,
+ 				 y-sampleModelTranslateY,
+ 				 b, dataBuffer);
+   }
+ 
+   public float getSampleFloat(int x, int y, int b)
+   {
+     return sampleModel.getSampleFloat(x-sampleModelTranslateX,
+ 				      y-sampleModelTranslateY,
+ 				      b, dataBuffer);
+   }
+ 
+   public double getSampleDouble(int x, int y, int b)
+   {
+     return sampleModel.getSampleDouble(x-sampleModelTranslateX,
+ 				       y-sampleModelTranslateY,
+ 				       b, dataBuffer);
+   }
+ 
+   public int[] getSamples(int x, int y, int w, int h, int b,
+ 			  int[] iArray)
+   {
+     return sampleModel.getSamples(x-sampleModelTranslateX,
+ 				  y-sampleModelTranslateY,
+ 				  w, h, b, iArray, dataBuffer);
+   }
+ 
+   public float[] getSamples(int x, int y, int w, int h, int b,
+ 			    float[] fArray)
+   {
+     return sampleModel.getSamples(x-sampleModelTranslateX,
+ 				  y-sampleModelTranslateY,
+ 				  w, h, b, fArray, dataBuffer);
+   }
+ 
+   public double[] getSamples(int x, int y, int w, int h, int b,
+ 			     double[] dArray)
+   {
+     return sampleModel.getSamples(x-sampleModelTranslateX,
+ 				  y-sampleModelTranslateY,
+ 				  w, h, b, dArray, dataBuffer);
+   }
+   
+   /**
+    * Create a String representing the stat of this Raster.
+    * @return A String representing the stat of this Raster.
+    * @see java.lang.Object#toString()
+    */
+   public String toString()
+   {
+     StringBuffer result = new StringBuffer();
+     
+     result.append(getClass().getName());
+     result.append("[(");
+     result.append(minX).append(",").append(minY).append("), ");
+     result.append(width).append(" x ").append(height).append(",");
+     result.append(sampleModel).append(",");
+     result.append(dataBuffer);
+     result.append("]");
+     
+     return result.toString();
+   }
+ 
+   // Map from datatype to bits
+   private static int getTypeBits(int dataType)
+   {
+     switch (dataType)
+       {
+       case DataBuffer.TYPE_BYTE:
+ 	return 8;
+       case DataBuffer.TYPE_USHORT:
+       case DataBuffer.TYPE_SHORT:
+ 	return 16;
+       case DataBuffer.TYPE_INT:
+       case DataBuffer.TYPE_FLOAT:
+ 	return 32;
+       case DataBuffer.TYPE_DOUBLE:
+ 	return 64;
+       default:
+ 	return 0;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/RasterFormatException.java gcc-4.1.0/libjava/classpath/java/awt/image/RasterFormatException.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/RasterFormatException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/RasterFormatException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* RasterFormatException.java -- indicates invalid layout in Raster
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * This exception is thrown when there is invalid layout information in
+  * <code>Raster</code>
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Raster
+  * @status updated to 1.4
+  */
+ public class RasterFormatException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 96598996116164315L;
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public RasterFormatException(String message)
+   {
+     super(message);
+   }
+ } // class RasterFormatException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/RasterOp.java gcc-4.1.0/libjava/classpath/java/awt/image/RasterOp.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/RasterOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/RasterOp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* RasterOp.java --
+    Copyright (C) 2000, 2002, 2004, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.RenderingHints;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ 
+ public interface RasterOp
+ {
+   WritableRaster filter(Raster src, WritableRaster dest);
+ 
+   Rectangle2D getBounds2D(Raster src);
+ 
+   WritableRaster createCompatibleDestRaster(Raster src);
+ 
+   Point2D getPoint2D(Point2D srcPoint, Point2D destPoint);
+ 
+   RenderingHints getRenderingHints();
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/RenderedImage.java gcc-4.1.0/libjava/classpath/java/awt/image/RenderedImage.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/RenderedImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/RenderedImage.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* RenderedImage.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Rectangle;
+ import java.util.Vector;
+ 
+ /**
+  * NEEDS DOCUMENTATION
+  */
+ public interface RenderedImage
+ {
+   Vector getSources();
+   Object getProperty(String name);
+   String[] getPropertyNames();
+   ColorModel getColorModel();
+   SampleModel getSampleModel();
+   int getWidth();
+   int getHeight();
+   int getMinX();
+   int getMinY();
+   int getNumXTiles();
+   int getNumYTiles();
+   int getMinTileX();
+   int getMinTileY();
+   int getTileWidth();
+   int getTileHeight();
+   int getTileGridXOffset();
+   int getTileGridYOffset();
+   Raster getTile(int x, int y);
+   Raster getData();
+   Raster getData(Rectangle r);
+   WritableRaster copyData(WritableRaster raster);
+ } // interface RenderedImage
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ReplicateScaleFilter.java gcc-4.1.0/libjava/classpath/java/awt/image/ReplicateScaleFilter.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ReplicateScaleFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ReplicateScaleFilter.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,248 ----
+ /* ReplicateScaleFilter.java -- Java class for filtering images
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.util.Hashtable;
+ 
+ /**
+  * This filter should be used for fast scaling of images where the result
+  * does not need to ensure straight lines are still straight, etc.  The
+  * exact method is not defined by Sun but some sort of fast Box filter should
+  * probably be correct.
+  * <br>
+  * Currently this filter does nothing and needs to be implemented.
+  *
+  * @author C. Brian Jones (cbj@gnu.org) 
+  */
+ public class ReplicateScaleFilter extends ImageFilter
+ {
+     public ReplicateScaleFilter(int width, int height) {
+ 	destHeight = height;
+ 	destWidth = width;
+     }
+ 
+     /**
+      * The height of the destination image.
+      */
+     protected int destHeight;
+ 
+     /**
+      * The width of the destination image.
+      */
+     protected int destWidth;
+ 
+     /**
+      * The height of the source image.
+      */
+     protected int srcHeight;
+ 
+     /**
+      * The width of the source image.
+      */
+     protected int srcWidth;
+ 
+     /**
+      *
+      */
+     protected int srcrows[];
+ 
+     /**
+      *
+      */
+     protected int srccols[];
+ 
+     /**
+      *
+      */
+     protected Object outpixbuf;
+ 
+     /**
+      * An <code>ImageProducer</code> indicates the size of the image
+      * being produced using this method.  A filter can override this 
+      * method to intercept these calls from the producer in order to
+      * change either the width or the height before in turn calling
+      * the consumer's <code>setDimensions</code> method.
+      * 
+      * @param width the width of the image
+      * @param height the height of the image 
+      */
+     public void setDimensions(int width, int height)
+     {
+ 	srcWidth = width;
+ 	srcHeight = height;
+ 
+ 	/* If either destHeight or destWidth is < 0, the image should
+ 	   maintain its original aspect ratio.  When both are < 0,
+ 	   just maintain the original width and height. */
+ 	if (destWidth < 0 && destHeight < 0)
+         {
+ 	    destWidth = width;
+ 	    destHeight = height;
+ 	}
+ 	else if (destWidth < 0)
+ 	{
+ 	    destWidth = (int) (width * ((double) destHeight / srcHeight));
+ 	}
+ 	else if (destHeight < 0)
+ 	{
+ 	    destHeight = (int) (height * ((double) destWidth / srcWidth));
+ 	}
+ 
+ 	if (consumer != null)
+ 	  consumer.setDimensions(destWidth, destHeight);
+     }
+ 
+     /**
+      * An <code>ImageProducer</code> can set a list of properties
+      * associated with this image by using this method.
+      *
+      * @param props the list of properties associated with this image 
+      */
+     public void setProperties(Hashtable props)
+     {
+ 	props.put("filters", "ReplicateScaleFilter");
+ 	if (consumer != null)
+ 	  consumer.setProperties(props);
+     }
+ 
+     /**
+      * This function delivers a rectangle of pixels where any
+      * pixel(m,n) is stored in the array as a <code>byte</code> at
+      * index (n * scansize + m + offset).  
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+ 	   ColorModel model, byte[] pixels, int offset, int scansize)
+     {
+ 	double rx = ((double) srcWidth) / destWidth;
+ 	double ry = ((double) srcHeight) / destHeight;
+ 
+ 	int destScansize = (int) Math.round(scansize / rx);
+ 
+ 	byte[] destPixels = replicatePixels(x, y, w, h,
+                                            model, pixels, offset, scansize,
+ 	                                   rx, ry, destScansize);
+ 
+ 	if (consumer != null)
+ 	  consumer.setPixels((int) Math.floor(x/rx), (int) Math.floor(y/ry),
+ 			     (int) Math.ceil(w/rx), (int) Math.ceil(h/ry),
+ 			     model, destPixels, 0, destScansize);
+     }
+ 
+     /**
+      * This function delivers a rectangle of pixels where any
+      * pixel(m,n) is stored in the array as an <code>int</code> at
+      * index (n * scansize + m + offset).  
+      *
+      * @param x the x coordinate of the rectangle
+      * @param y the y coordinate of the rectangle
+      * @param w the width of the rectangle
+      * @param h the height of the rectangle
+      * @param model the <code>ColorModel</code> used to translate the pixels
+      * @param pixels the array of pixel values
+      * @param offset the index of the first pixels in the <code>pixels</code> array
+      * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+      */
+     public void setPixels(int x, int y, int w, int h, 
+            ColorModel model, int[] pixels, int offset, int scansize)
+     {
+ 	double rx = ((double) srcWidth) / destWidth;
+ 	double ry = ((double) srcHeight) / destHeight;
+ 
+ 	int destScansize = (int) Math.round(scansize / rx);
+ 
+ 	int[] destPixels = replicatePixels(x, y, w, h,
+                                            model, pixels, offset, scansize,
+ 	                                   rx, ry, destScansize);
+ 
+ 	if (consumer != null)
+ 	  consumer.setPixels((int) Math.floor(x/rx), (int) Math.floor(y/ry),
+ 			     (int) Math.ceil(w/rx), (int) Math.ceil(h/ry),
+ 			     model, destPixels, 0, destScansize);
+     }
+ 
+     private byte[] replicatePixels(int srcx, int srcy, int srcw, int srch,
+                                    ColorModel model, byte[] srcPixels,
+                                    int srcOffset, int srcScansize,
+                                    double rx, double ry, int destScansize)
+     {
+ 	byte[] destPixels =
+ 	  new byte[(int) Math.ceil(srcw/rx) * (int) Math.ceil(srch/ry)];
+ 
+ 	int a, b;
+ 	for (int i = 0; i < destPixels.length; i++)
+ 	{
+ 	    a = (int) ((int) ( ((double) i) / destScansize) * ry) * srcScansize;
+ 	    b = (int) ((i % destScansize) * rx);
+ 	    if ((a + b + srcOffset) < srcPixels.length)
+ 		destPixels[i] = srcPixels[a + b + srcOffset];
+ 	}
+ 
+ 	return destPixels;
+     }
+ 
+     private int[] replicatePixels(int srcx, int srcy, int srcw, int srch,
+                                   ColorModel model, int[] srcPixels,
+                                   int srcOffset, int srcScansize,
+                                   double rx, double ry, int destScansize)
+     {
+ 	int[] destPixels =
+ 	  new int[(int) Math.ceil(srcw/rx) * (int) Math.ceil(srch/ry)];
+ 
+ 	int a, b;
+ 	for (int i = 0; i < destPixels.length; i++)
+ 	{
+ 	    a = (int) ((int) ( ((double) i) / destScansize) * ry) * srcScansize;
+ 	    b = (int) ((i % destScansize) * rx);
+ 	    if ((a + b + srcOffset) < srcPixels.length)
+ 		destPixels[i] = srcPixels[a + b + srcOffset];
+ 	}
+ 
+ 	return destPixels;
+     }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/RescaleOp.java gcc-4.1.0/libjava/classpath/java/awt/image/RescaleOp.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/RescaleOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/RescaleOp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,218 ----
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.RenderingHints;
+ import java.awt.geom.Point2D;
+ import java.awt.geom.Rectangle2D;
+ import java.util.Arrays;
+ 
+ /**
+  * @author Jerry Quinn (jlquinn@optonline.net)
+  */
+ public class RescaleOp implements BufferedImageOp, RasterOp
+ {
+   private float[] scale;
+   private float[] offsets;
+   private RenderingHints hints = null;
+   
+   public RescaleOp(float[] scaleFactors,
+ 		   float[] offsets,
+ 		   RenderingHints hints)
+   {
+     this.scale = scaleFactors;
+     this.offsets = offsets;
+     this.hints = hints;
+   }
+   
+   public RescaleOp(float scaleFactor,
+ 		   float offset,
+ 		   RenderingHints hints)
+   {
+     scale = new float[]{ scaleFactor };
+     offsets = new float[]{offset};
+     this.hints = hints;
+   }
+ 
+   public final float[] getScaleFactors(float[] scaleFactors)
+   {
+     if (scaleFactors == null)
+       scaleFactors = new float[scale.length];
+     System.arraycopy(scale, 0, scaleFactors, 0, scale.length);
+     return scaleFactors;
+   }
+ 
+   public final float[] getOffsets(float[] offsets)
+   {
+     if (offsets == null)
+       offsets = new float[this.offsets.length];
+     System.arraycopy(this.offsets, 0, offsets, 0, this.offsets.length);
+     return offsets;
+   }
+ 
+   public final int getNumFactors()
+   {
+     return scale.length;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#getRenderingHints()
+    */
+   public RenderingHints getRenderingHints()
+   {
+     return hints;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#filter(java.awt.image.BufferedImage, java.awt.image.BufferedImage)
+    */
+   public final BufferedImage filter(BufferedImage src, BufferedImage dst)
+   {
+     // TODO Make sure premultiplied alpha is handled correctly.
+     // TODO See that color conversion is handled.
+     // TODO figure out how to use rendering hints.
+     if (scale.length != offsets.length)
+       throw new IllegalArgumentException();
+ 
+     ColorModel scm = src.getColorModel();
+     if (dst == null) dst = createCompatibleDestImage(src, null);
+ 
+     WritableRaster wsrc = src.getRaster();
+     WritableRaster wdst = dst.getRaster();
+     
+     // Share constant across colors except alpha
+     if (scale.length == 1 || scale.length == scm.getNumColorComponents())
+       {
+ 	// Construct a raster that doesn't include an alpha band.
+ 	int[] subbands = new int[scm.getNumColorComponents()];
+ 	for (int i=0; i < subbands.length; i++) subbands[i] = i;
+ 	wsrc = 
+ 	  wsrc.createWritableChild(wsrc.minX, wsrc.minY, wsrc.width, wsrc.height,
+ 				   wsrc.minX, wsrc.minY, subbands);
+       }
+     // else all color bands
+ 
+     filter(wsrc, wdst);
+     return dst;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#filter(java.awt.image.Raster, java.awt.image.WritableRaster)
+    */
+   public final WritableRaster filter(Raster src, WritableRaster dest)
+   {
+     if (dest == null) dest = src.createCompatibleWritableRaster();
+ 
+     // Required sanity checks
+     if (src.numBands != dest.numBands || scale.length != offsets.length)
+       throw new IllegalArgumentException();
+     if (scale.length != 1 && scale.length != src.numBands)
+       throw new IllegalArgumentException();
+ 
+     // Create scaling arrays if needed
+     float[] lscale = scale;
+     float[] loff = offsets;
+     if (scale.length == 1)
+       {
+ 	lscale = new float[src.numBands];
+ 	Arrays.fill(lscale, scale[0]);
+ 	loff = new float[src.numBands];
+ 	Arrays.fill(loff, offsets[0]);
+       }
+ 
+     // TODO The efficiency here can be improved for various data storage
+     // patterns, aka SampleModels.
+     float[] pixel = new float[src.numBands];
+     for (int y = src.minY; y < src.height + src.minY; y++)
+       for (int x = src.minX; x < src.width + src.minX; x++)
+ 	{
+ 	  src.getPixel(x, y, pixel);
+ 	  for (int b = 0; b < src.numBands; b++)
+ 	    pixel[b] = pixel[b] * lscale[b] + loff[b];
+ 	  dest.setPixel(x, y, pixel);
+ 	}
+     return dest;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#createCompatibleDestImage(java.awt.image.BufferedImage, java.awt.image.ColorModel)
+    */
+   public BufferedImage createCompatibleDestImage(BufferedImage src,
+ 						 ColorModel dstCM)
+   {
+     if (dstCM == null) dstCM = src.getColorModel();
+     WritableRaster wr = src.getRaster().createCompatibleWritableRaster();
+     BufferedImage image
+       = new BufferedImage(dstCM, wr, src.isPremultiplied, null);
+     return image;
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#createCompatibleDestRaster(java.awt.image.Raster)
+    */
+   public WritableRaster createCompatibleDestRaster(Raster src)
+   {
+     return src.createCompatibleWritableRaster();
+   }
+   
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#getBounds2D(java.awt.image.BufferedImage)
+    */
+   public final Rectangle2D getBounds2D(BufferedImage src)
+   {
+     return src.getRaster().getBounds();
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
+    */
+   public final Rectangle2D getBounds2D(Raster src)
+   {
+     return src.getBounds();
+   }
+ 
+   /* (non-Javadoc)
+    * @see java.awt.image.BufferedImageOp#getPoint2D(java.awt.geom.Point2D, java.awt.geom.Point2D)
+    */
+   public final Point2D getPoint2D(Point2D src, Point2D dst) {
+     if (dst == null) dst = (Point2D) src.clone();
+     else dst.setLocation(src);
+     return dst;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/SampleModel.java gcc-4.1.0/libjava/classpath/java/awt/image/SampleModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/SampleModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/SampleModel.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,478 ----
+ /* Copyright (C) 2000, 2001, 2002, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ /**
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public abstract class SampleModel
+ {
+   /** Width of image described. */
+   protected int width;
+   
+   /** Height of image described. */
+   protected int height;
+   
+   /** Number of bands in the image described.  Package-private here,
+       shadowed by ComponentSampleModel. */
+   protected int numBands;
+ 
+   /** 
+    * The DataBuffer type that is used to store the data of the image
+    * described.
+    */
+   protected int dataType;
+ 
+   public SampleModel(int dataType, int w, int h, int numBands)
+   {
+     if ((w <= 0) || (h <= 0)) 
+       throw new IllegalArgumentException((w <= 0 ? " width<=0" : " width is ok")
+                                          +(h <= 0 ? " height<=0" : " height is ok"));
+ 	
+     // FIXME: How can an int be greater than Integer.MAX_VALUE?
+     // FIXME: How do we identify an unsupported data type?
+ 
+     this.dataType = dataType;
+     this.width = w;
+     this.height = h;
+     this.numBands = numBands;  
+   }
+   
+   public final int getWidth()
+   {
+     return width;
+   }
+ 
+   public final int getHeight()
+   {
+     return height;
+   }
+ 
+   public final int getNumBands()
+   {
+     return numBands;
+   }
+     
+   public abstract int getNumDataElements();
+   
+   public final int getDataType()
+   {
+     return dataType;
+   }
+ 
+   public int getTransferType()
+   {
+     // FIXME: Is this a reasonable default implementation?
+     return dataType;
+   }
+ 
+   public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     if (iArray == null) iArray = new int[numBands];
+     for (int b=0; b<numBands; b++) iArray[b] = getSample(x, y, b, data);
+     return iArray;
+   }
+   
+   /**
+    *
+    * This method is provided as a faster alternative to getPixel(),
+    * that can be used when there is no need to decode the pixel into
+    * separate sample values.
+    *
+    * @param obj An array to return the pixel data in. If null, an
+    * array of the right type and size will be created.
+    *
+    * @return A single pixel as an array object of a primitive type,
+    * based on the transfer type. Eg. if transfer type is
+    * DataBuffer.TYPE_USHORT, then a short[] object is returned.
+    */
+   public abstract Object getDataElements(int x, int y, Object obj,
+ 					 DataBuffer data);
+ 
+     
+   public Object getDataElements(int x, int y, int w, int h, Object obj,
+ 				DataBuffer data)
+   {
+     int size = w*h;
+     int numDataElements = getNumDataElements();
+     int dataSize = numDataElements*size;
+     
+     if (obj == null)
+       {
+ 	switch (getTransferType())
+ 	  {
+ 	  case DataBuffer.TYPE_BYTE:
+ 	    obj = new byte[dataSize];
+ 	    break;
+ 	  case DataBuffer.TYPE_USHORT:
+ 	    obj = new short[dataSize];
+ 	    break;
+ 	  case DataBuffer.TYPE_INT:
+ 	    obj = new int[dataSize];
+ 	    break;
+ 	  default:
+ 	    // Seems like the only sensible thing to do.
+ 	    throw new ClassCastException();
+ 	  }
+       }
+     Object pixelData = null;
+     int outOffset = 0;
+     for (int yy = y; yy<(y+h); yy++)
+       {
+ 	for (int xx = x; xx<(x+w); xx++)
+ 	  {
+ 	    pixelData = getDataElements(xx, yy, pixelData, data);
+ 	    System.arraycopy(pixelData, 0, obj, outOffset,
+ 			     numDataElements);
+ 	    outOffset += numDataElements;
+ 	  }
+       }
+     return obj;
+   }
+ 
+   public abstract void setDataElements(int x, int y, Object obj,
+ 				       DataBuffer data);
+ 
+   public void setDataElements(int x, int y, int w, int h,
+ 			      Object obj, DataBuffer data)
+   {
+     int size = w*h;
+     int numDataElements = getNumDataElements();
+     int dataSize = numDataElements*size;
+     
+     Object pixelData;
+     switch (getTransferType())
+       {
+       case DataBuffer.TYPE_BYTE:
+ 	pixelData = new byte[numDataElements];
+ 	break;
+       case DataBuffer.TYPE_USHORT:
+ 	pixelData = new short[numDataElements];
+ 	break;
+       case DataBuffer.TYPE_INT:
+ 	pixelData = new int[numDataElements];
+ 	break;
+       default:
+ 	// Seems like the only sensible thing to do.
+ 	throw new ClassCastException();
+       }
+     int inOffset = 0;
+ 
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    System.arraycopy(obj, inOffset, pixelData, 0,
+ 			     numDataElements);
+ 	    setDataElements(xx, yy, pixelData, data);
+ 	    inOffset += numDataElements;
+ 	  }
+       }
+   }
+ 
+   public float[] getPixel(int x, int y, float[] fArray, DataBuffer data)
+   {
+     if (fArray == null) fArray = new float[numBands];
+     
+     for (int b=0; b<numBands; b++)
+       {
+         fArray[b] = getSampleFloat(x, y, b, data);
+       }
+     return fArray;
+   }
+ 
+   public double[] getPixel(int x, int y, double[] dArray, DataBuffer data) {
+     if (dArray == null) dArray = new double[numBands];
+     for (int b=0; b<numBands; b++)
+       {
+ 	dArray[b] = getSampleDouble(x, y, b, data);
+       }
+     return dArray;
+   }
+ 
+   /* FIXME: Should it return a banded or pixel interleaved array of
+      samples? (Assume interleaved.) */
+   public int[] getPixels(int x, int y, int w, int h, int[] iArray,
+ 			 DataBuffer data)
+   {
+     int size = w*h;
+     int outOffset = 0;
+     int[] pixel = null;
+     if (iArray == null) iArray = new int[w*h*numBands];
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    pixel = getPixel(xx, yy, pixel, data);
+ 	    System.arraycopy(pixel, 0, iArray, outOffset, numBands);
+ 	    outOffset += numBands;
+ 	  }
+       }
+     return iArray;
+   }
+ 
+   /* FIXME: Should it return a banded or pixel interleaved array of
+      samples? (Assume interleaved.) */
+   public float[] getPixels(int x, int y, int w, int h, float[] fArray,
+ 			   DataBuffer data)
+   {
+     int size = w*h;
+     int outOffset = 0;
+     float[] pixel = null;
+     if (fArray == null) fArray = new float[w*h*numBands];
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    pixel = getPixel(xx, yy, pixel, data);
+ 	    System.arraycopy(pixel, 0, fArray, outOffset, numBands);
+ 	    outOffset += numBands;
+ 	  }
+       }
+     return fArray;
+   }
+     
+   /* FIXME: Should it return a banded or pixel interleaved array of
+      samples? (Assume interleaved.) */
+   public double[] getPixels(int x, int y, int w, int h, double[] dArray,
+ 			    DataBuffer data)
+   {
+     int size = w*h;
+     int outOffset = 0;
+     double[] pixel = null;
+     if (dArray == null) dArray = new double[w*h*numBands];
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    pixel = getPixel(xx, yy, pixel, data);
+ 	    System.arraycopy(pixel, 0, dArray, outOffset, numBands);
+ 	    outOffset += numBands;
+ 	  }
+       }
+     return dArray;
+   }
+ 
+   public abstract int getSample(int x, int y, int b, DataBuffer data);
+ 
+   public float getSampleFloat(int x, int y, int b, DataBuffer data)
+   {
+     return getSample(x, y, b, data);
+   }
+ 
+   public double getSampleDouble(int x, int y, int b, DataBuffer data)
+   {
+     return getSampleFloat(x, y, b, data);
+   }
+ 
+   public int[] getSamples(int x, int y, int w, int h, int b,
+ 			  int[] iArray, DataBuffer data)
+   {
+     int size = w*h;
+     int outOffset = 0;
+     if (iArray == null) iArray = new int[size];
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    iArray[outOffset++] = getSample(xx, yy, b, data);
+ 	  }
+       }
+     return iArray;
+   }
+ 
+   public float[] getSamples(int x, int y, int w, int h, int b,
+ 			    float[] fArray, DataBuffer data)
+   {
+     int size = w*h;
+     int outOffset = 0;
+     if (fArray == null) fArray = new float[size];
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    fArray[outOffset++] = getSampleFloat(xx, yy, b, data);
+ 	  }
+       }
+     return fArray;
+   }
+ 
+   public double[] getSamples(int x, int y, int w, int h, int b,
+ 			     double[] dArray, DataBuffer data)
+   {
+     int size = w*h;
+     int outOffset = 0;
+     if (dArray == null) dArray = new double[size];
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    dArray[outOffset++] = getSampleDouble(xx, yy, b, data);
+ 	  }
+       }
+     return dArray;
+   }
+   
+   public void setPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     for (int b=0; b<numBands; b++) setSample(x, y, b, iArray[b], data);
+   }
+ 
+   public void setPixel(int x, int y, float[] fArray, DataBuffer data)
+   {
+     for (int b=0; b<numBands; b++) setSample(x, y, b, fArray[b], data);
+   }
+ 
+   public void setPixel(int x, int y, double[] dArray, DataBuffer data)
+   {
+     for (int b=0; b<numBands; b++) setSample(x, y, b, dArray[b], data);
+   }
+ 
+   public void setPixels(int x, int y, int w, int h, int[] iArray,
+ 			DataBuffer data)
+   {
+     int inOffset = 0;
+     int[] pixel = new int[numBands];
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    System.arraycopy(iArray, inOffset, pixel, 0, numBands);
+ 	    setPixel(xx, yy, pixel, data);
+ 	    inOffset += numBands;
+ 	  }
+       }
+   }
+ 
+   public void setPixels(int x, int y, int w, int h, float[] fArray,
+ 			DataBuffer data)
+   {
+     int inOffset = 0;
+     float[] pixel = new float[numBands];
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    System.arraycopy(fArray, inOffset, pixel, 0, numBands);
+ 	    setPixel(xx, yy, pixel, data);
+ 	    inOffset += numBands;
+ 	  }
+       }
+   }
+ 
+   public void setPixels(int x, int y, int w, int h, double[] dArray,
+ 			DataBuffer data)
+   {
+     int inOffset = 0;
+     double[] pixel = new double[numBands];
+     for (int yy=y; yy<(y+h); yy++)
+       {
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  {
+ 	    System.arraycopy(dArray, inOffset, pixel, 0, numBands);
+ 	    setPixel(xx, yy, pixel, data);
+ 	    inOffset += numBands;
+ 	  }
+       }
+   }
+ 
+   public abstract void setSample(int x, int y, int b, int s,
+ 				 DataBuffer data);
+ 
+   public void setSample(int x, int y, int b, float s,
+ 			DataBuffer data)
+   {
+     setSample(x, y, b, (int) s, data);
+   }
+ 
+   public void setSample(int x, int y, int b, double s,
+ 			DataBuffer data)
+   {
+     setSample(x, y, b, (float) s, data);
+   }
+ 
+   public void setSamples(int x, int y, int w, int h, int b,
+ 			 int[] iArray, DataBuffer data)
+   {
+     int size = w*h;
+     int inOffset = 0;
+     for (int yy=y; yy<(y+h); yy++)
+       for (int xx=x; xx<(x+w); xx++)
+ 	setSample(xx, yy, b, iArray[inOffset++], data);
+   }
+ 
+   public void setSamples(int x, int y, int w, int h, int b,
+ 			 float[] fArray, DataBuffer data)
+   {
+     int size = w*h;
+     int inOffset = 0;
+     for (int yy=y; yy<(y+h); yy++)
+       for (int xx=x; xx<(x+w); xx++)
+ 	setSample(xx, yy, b, fArray[inOffset++], data);
+ 
+     }
+ 
+     public void setSamples(int x, int y, int w, int h, int b,
+ 			   double[] dArray, DataBuffer data) {
+       int size = w*h;
+       int inOffset = 0;
+       for (int yy=y; yy<(y+h); yy++)
+ 	for (int xx=x; xx<(x+w); xx++)
+ 	  setSample(xx, yy, b, dArray[inOffset++], data);
+     }
+ 
+     public abstract SampleModel createCompatibleSampleModel(int w, int h);
+ 
+     /**
+      * Return a SampleModel with a subset of the bands in this model.
+      * 
+      * Selects bands.length bands from this sample model.  The bands chosen
+      * are specified in the indices of bands[].  This also permits permuting
+      * the bands as well as taking a subset.  Thus, giving an array with
+      * 1, 2, 3, ..., numbands, will give an identical sample model.
+      * 
+      * @param bands Array with band indices to include.
+      * @return A new sample model
+      */
+     public abstract SampleModel createSubsetSampleModel(int[] bands);
+ 
+     public abstract DataBuffer createDataBuffer();
+ 
+     public abstract int[] getSampleSize();
+ 
+     public abstract int getSampleSize(int band);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/ShortLookupTable.java gcc-4.1.0/libjava/classpath/java/awt/image/ShortLookupTable.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/ShortLookupTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/ShortLookupTable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,162 ----
+ /* ShortLookupTable.java -- Java class for a pixel translation table.
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * ShortLookupTable represents translation arrays for pixel values.  It wraps
+  * one or more data arrays for each layer (or component) in an image, such as
+  * Alpha, R, G, and B.  When doing translation, the offset is subtracted from
+  * the pixel values to allow a subset of an array to be used.
+  *
+  * @author Jerry Quinn (jlquinn@optonline.net)
+  * @version 1.0
+  */
+ public class ShortLookupTable extends LookupTable
+ {
+   // Array of translation tables.
+   private short data[][];
+ 
+   /**
+    * Creates a new <code>ShortLookupTable</code> instance.
+    *
+    * Offset is subtracted from pixel values when looking up in the translation
+    * tables.  If data.length is one, the same table is applied to all pixel
+    * components.
+    * 
+    * @param offset Offset to be subtracted.
+    * @param data Array of lookup tables.
+    * @exception IllegalArgumentException if offset &lt; 0 or data.length &lt; 1.
+    */
+   public ShortLookupTable(int offset, short[][] data)
+     throws IllegalArgumentException
+   {
+     super(offset, data.length);
+     this.data = data;
+   }
+ 
+   /**
+    * Creates a new <code>ShortLookupTable</code> instance.
+    *
+    * Offset is subtracted from pixel values when looking up in the translation
+    * table.  The same table is applied to all pixel components.
+    * 
+    * @param offset Offset to be subtracted.
+    * @param data Lookup table for all components.
+    * @exception IllegalArgumentException if offset &lt; 0.
+    */
+   public ShortLookupTable(int offset, short[] data)
+     throws IllegalArgumentException
+   {
+     super(offset, 1);
+     this.data = new short[][] {data};
+   }
+ 
+   /** Return the lookup tables. */
+   public final short[][] getTable()
+   {
+     return data;
+   }
+ 
+   /**
+    * Return translated values for a pixel.
+    *
+    * For each value in the pixel src, use the value minus offset as an index
+    * in the component array and copy the value there to the output for the
+    * component.  If dest is null, the output is a new array, otherwise the
+    * translated values are written to dest.  Dest can be the same array as
+    * src.
+    *
+    * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
+    * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
+    * translation arrays.
+    *
+    * @param src Component values of a pixel.
+    * @param dst Destination array for values, or null.
+    * @return Translated values for the pixel.
+    */
+   public int[] lookupPixel(int[] src, int[] dst)
+     throws ArrayIndexOutOfBoundsException
+   {
+     if (dst == null)
+       dst = new int[src.length];
+ 
+     if (data.length == 1)
+       for (int i=0; i < src.length; i++)
+ 	dst[i] = data[0][src[i] - offset];
+     else
+       for (int i=0; i < src.length; i++)
+ 	dst[i] = data[i][src[i] - offset];
+       
+     return dst;
+   }
+ 
+   /**
+    * Return translated values for a pixel.
+    *
+    * For each value in the pixel src, use the value minus offset as an index
+    * in the component array and copy the value there to the output for the
+    * component.  If dest is null, the output is a new array, otherwise the
+    * translated values are written to dest.  Dest can be the same array as
+    * src.
+    *
+    * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
+    * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
+    * translation arrays.
+    *
+    * @param src Component values of a pixel.
+    * @param dst Destination array for values, or null.
+    * @return Translated values for the pixel.
+    */
+   public short[] lookupPixel(short[] src, short[] dst)
+     throws ArrayIndexOutOfBoundsException
+   {
+     if (dst == null)
+       dst = new short[src.length];
+ 
+     if (data.length == 1)
+       for (int i=0; i < src.length; i++)
+ 	dst[i] = data[0][((int)src[i]) - offset];
+     else
+       for (int i=0; i < src.length; i++)
+ 	dst[i] = data[i][((int)src[i]) - offset];
+       
+     return dst;
+ 
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/SinglePixelPackedSampleModel.java gcc-4.1.0/libjava/classpath/java/awt/image/SinglePixelPackedSampleModel.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/SinglePixelPackedSampleModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/SinglePixelPackedSampleModel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,449 ----
+ /* Copyright (C) 2000, 2002, 2003, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.image;
+ 
+ import gnu.java.awt.BitMaskExtent;
+ import gnu.java.awt.Buffers;
+ 
+ /**
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public class SinglePixelPackedSampleModel extends SampleModel
+ {
+   private int scanlineStride;
+   private int[] bitMasks;
+   private int[] bitOffsets;
+   private int[] sampleSize;
+   
+   public SinglePixelPackedSampleModel(int dataType, int w, int h,
+ 				      int[] bitMasks)
+   {
+     this(dataType, w, h, w, bitMasks);
+   }
+ 
+   public SinglePixelPackedSampleModel(int dataType, int w, int h,
+ 				      int scanlineStride, int[] bitMasks)
+   {
+     super(dataType, w, h, bitMasks.length);
+ 
+     switch (dataType)
+       {
+       case DataBuffer.TYPE_BYTE:
+       case DataBuffer.TYPE_USHORT:
+       case DataBuffer.TYPE_INT:
+ 	break;
+       default:
+ 	throw new IllegalArgumentException("SinglePixelPackedSampleModel unsupported dataType");
+       }
+     
+     this.scanlineStride = scanlineStride;
+     this.bitMasks = bitMasks;
+     
+     bitOffsets = new int[numBands];
+     sampleSize = new int[numBands];
+     
+     BitMaskExtent extent = new BitMaskExtent();
+     for (int b=0; b<numBands; b++)
+       {
+ 	extent.setMask(bitMasks[b]);
+ 	sampleSize[b] = extent.bitWidth;
+ 	bitOffsets[b] = extent.leastSignificantBit;
+       }
+   }
+ 
+   public int getNumDataElements()
+   {
+     return 1;
+   }
+ 
+   public SampleModel createCompatibleSampleModel(int w, int h)
+   {
+     /* FIXME: We can avoid recalculation of bit offsets and sample
+        sizes here by passing these from the current instance to a
+        special private constructor. */
+     return new SinglePixelPackedSampleModel(dataType, w, h, bitMasks);
+   }
+ 
+ 
+   /**
+    * Creates a DataBuffer for holding pixel data in the format and
+    * layout described by this SampleModel. The returned buffer will
+    * consist of one single bank.
+    */
+   public DataBuffer createDataBuffer()
+   {
+     int size;
+ 
+     // We can save (scanlineStride - width) pixels at the very end of
+     // the buffer. The Sun reference implementation (J2SE 1.3.1 and
+     // 1.4.1_01) seems to do this; tested with Mauve test code.
+     size = scanlineStride * (height - 1) + width;
+ 
+     return Buffers.createBuffer(getDataType(), size);
+   }
+ 
+ 
+   public int[] getSampleSize()
+   {
+     return sampleSize;
+   }
+   
+   public int getSampleSize(int band)
+   {
+     return sampleSize[band];
+   }
+ 
+   public int getOffset(int x, int y)
+   {
+     return scanlineStride*y + x;
+   }
+ 
+   public int[] getBitOffsets()
+   {
+     return bitOffsets;
+   }
+ 
+   public int[] getBitMasks()
+   {
+     return bitMasks;
+   }
+ 
+   public int getScanlineStride()
+   {
+     return scanlineStride;
+   }
+ 
+   public SampleModel createSubsetSampleModel(int[] bands)
+   {
+     // FIXME: Is this the right way to interpret bands?
+     
+     int numBands = bands.length;
+     
+     int[] bitMasks = new int[numBands];
+ 
+     for (int b=0; b<numBands; b++)
+       bitMasks[b] = this.bitMasks[bands[b]];
+ 
+     return new SinglePixelPackedSampleModel(dataType, width, height,
+ 					    scanlineStride, bitMasks);
+   }
+ 
+   public Object getDataElements(int x, int y, Object obj,
+ 				DataBuffer data)
+   {
+     int offset = scanlineStride*y + x + data.getOffset();
+     
+     return Buffers.getData(data, offset, obj,
+ 			   0, // destination offset,
+ 			   1  // length
+ 			   );
+   }
+   
+   /**
+    * This is a more efficient implementation of the default implementation in the super
+    * class. 
+    * @param x The x-coordinate of the pixel rectangle to store in <code>obj</code>.
+    * @param y The y-coordinate of the pixel rectangle to store in <code>obj</code>.
+    * @param w The width of the pixel rectangle to store in <code>obj</code>.
+    * @param h The height of the pixel rectangle to store in <code>obj</code>.
+    * @param obj The primitive array to store the pixels into or null to force creation.
+    * @param data The DataBuffer that is the source of the pixel data.
+    * @return The primitive array containing the pixel data.
+    * @see java.awt.image.SampleModel#getDataElements(int, int, int, int, java.lang.Object, java.awt.image.DataBuffer)
+    */
+   public Object getDataElements(int x, int y, int w, int h, Object obj,
+ 							DataBuffer data)
+   {
+     int size = w*h;
+     int dataSize = size;
+     Object pixelData = null;
+     switch (getTransferType())
+     {
+       case DataBuffer.TYPE_BYTE:
+         pixelData = ((DataBufferByte) data).getData();
+         if (obj == null) obj = new byte[dataSize];
+         break;
+        case DataBuffer.TYPE_USHORT:
+          pixelData = ((DataBufferUShort) data).getData();
+          if (obj == null) obj = new short[dataSize];
+          break;
+         case DataBuffer.TYPE_INT:
+           pixelData = ((DataBufferInt) data).getData();
+           if (obj == null) obj = new int[dataSize];
+           break;
+          default:
+              // Seems like the only sensible thing to do.
+            throw new ClassCastException();
+       }
+       if(x==0 && scanlineStride == w)
+       { 
+         // The full width need to be copied therefore we can copy in one shot.
+         System.arraycopy(pixelData, scanlineStride*y + data.getOffset(), obj, 0, size);
+       }
+       else
+       {  
+         // Since we do not need the full width we need to copy line by line.
+         int outOffset = 0;
+         int dataOffset = scanlineStride*y + x + data.getOffset();
+         for (int yy = y; yy<(y+h); yy++)
+         {
+           System.arraycopy(pixelData, dataOffset, obj, outOffset, w);
+           dataOffset += scanlineStride;
+           outOffset += w;
+         }
+       }
+     return obj;
+   }
+   
+ 
+   public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     int offset = scanlineStride*y + x;
+     if (iArray == null) iArray = new int[numBands];
+     int samples = data.getElem(offset);
+ 
+     for (int b=0; b<numBands; b++)
+       iArray[b] = (samples & bitMasks[b]) >>> bitOffsets[b];
+ 	
+     return iArray;
+   }
+ 
+   public int[] getPixels(int x, int y, int w, int h, int[] iArray,
+ 			 DataBuffer data)
+   {
+     int offset = scanlineStride*y + x;
+     if (iArray == null) iArray = new int[numBands*w*h];
+     int outOffset = 0;
+     for (y=0; y<h; y++)
+       {
+ 	int lineOffset = offset;
+ 	for (x=0; x<w; x++)
+ 	  {
+ 	    int samples = data.getElem(lineOffset++);
+ 	    for (int b=0; b<numBands; b++)
+ 	      iArray[outOffset++] = (samples & bitMasks[b]) >>> bitOffsets[b];
+ 	  }
+ 	offset += scanlineStride;
+       }
+     return iArray;	
+   }
+ 
+   public int getSample(int x, int y, int b, DataBuffer data)
+   {
+     int offset = scanlineStride*y + x;
+     int samples = data.getElem(offset);
+     return (samples & bitMasks[b]) >>> bitOffsets[b];
+   }
+   
+   /**
+    * This method implements a more efficient way to set data elements than the default
+    * implementation of the super class. It sets the data elements line by line instead 
+    * of pixel by pixel.
+    * @param x The x-coordinate of the data elements in <code>obj</code>.
+    * @param y The y-coordinate of the data elements in <code>obj</code>.
+    * @param w The width of the data elements in <code>obj</code>.
+    * @param h The height of the data elements in <code>obj</code>.
+    * @param obj The primitive array containing the data elements to set.
+    * @param data The DataBuffer to store the data elements into.
+    * @see java.awt.image.SampleModel#setDataElements(int, int, int, int, java.lang.Object, java.awt.image.DataBuffer)
+    */
+   public void setDataElements(int x, int y, int w, int h,
+ 				Object obj, DataBuffer data)
+   {
+     
+     Object pixelData;
+     switch (getTransferType())
+     {
+       case DataBuffer.TYPE_BYTE:
+         pixelData = ((DataBufferByte) data).getData();
+         break;
+        case DataBuffer.TYPE_USHORT:
+          pixelData = ((DataBufferUShort) data).getData();
+          break;
+        case DataBuffer.TYPE_INT:
+          pixelData = ((DataBufferInt) data).getData();
+          break;
+        default:
+           // Seems like the only sensible thing to do.
+           throw new ClassCastException();
+     }
+     
+     int inOffset = 0;
+     int dataOffset = scanlineStride*y + x + data.getOffset();
+     for (int yy=y; yy<(y+h); yy++)
+     {
+       System.arraycopy(obj,inOffset,pixelData,dataOffset,w);
+       dataOffset += scanlineStride;
+       inOffset += w;
+     }
+   }
+   
+   
+   public void setDataElements(int x, int y, Object obj, DataBuffer data)
+   {
+     int offset = scanlineStride*y + x + data.getOffset();
+     
+     int transferType = getTransferType();
+     if (getTransferType() != data.getDataType())
+       {
+ 	throw new IllegalArgumentException("transfer type ("+
+ 					   getTransferType()+"), "+
+ 					   "does not match data "+
+ 					   "buffer type (" +
+ 					   data.getDataType() +
+ 					   ").");
+       }
+ 
+     try
+       {
+ 	switch (transferType)
+ 	  {
+ 	  case DataBuffer.TYPE_BYTE:
+ 	    {
+ 	      DataBufferByte out = (DataBufferByte) data;
+ 	      byte[] in = (byte[]) obj;
+ 	      out.getData()[offset] = in[0];
+ 	      return;
+ 	    }
+ 	  case DataBuffer.TYPE_USHORT:
+ 	    {
+ 	      DataBufferUShort out = (DataBufferUShort) data;
+ 	      short[] in = (short[]) obj;
+ 	      out.getData()[offset] = in[0];
+ 	      return;
+ 	    }
+ 	  case DataBuffer.TYPE_INT:
+ 	    {
+ 	      DataBufferInt out = (DataBufferInt) data;
+ 	      int[] in = (int[]) obj;
+ 	      out.getData()[offset] = in[0];
+ 	      return;
+ 	    }
+ 	    // FIXME: Fill in the other possible types.
+ 	  default:
+ 	    throw new InternalError();
+ 	  }
+       }
+     catch (ArrayIndexOutOfBoundsException aioobe)
+       {
+ 	String msg = "While writing data elements" +
+ 	  ", x="+x+", y="+y+
+ 	  ", width="+width+", height="+height+
+ 	  ", scanlineStride="+scanlineStride+
+ 	  ", offset="+offset+
+ 	  ", data.getSize()="+data.getSize()+
+ 	  ", data.getOffset()="+data.getOffset()+
+ 	  ": " +
+ 	  aioobe;
+ 	throw new ArrayIndexOutOfBoundsException(msg);
+       }
+     }
+ 
+   public void setPixel(int x, int y, int[] iArray, DataBuffer data)
+   {
+     int offset = scanlineStride*y + x;
+     
+     int samples = 0;
+     for (int b=0; b<numBands; b++)
+       samples |= (iArray[b] << bitOffsets[b]) & bitMasks[b];
+ 
+     data.setElem(offset, samples);
+   }
+ 
+   /**
+    * This method implements a more efficient way to set pixels than the default
+    * implementation of the super class. It copies the pixel components directly
+    * from the input array instead of creating a intermediate buffer.
+    * @param x The x-coordinate of the pixel rectangle in <code>obj</code>.
+    * @param y The y-coordinate of the pixel rectangle in <code>obj</code>.
+    * @param w The width of the pixel rectangle in <code>obj</code>.
+    * @param h The height of the pixel rectangle in <code>obj</code>.
+    * @param iArray The primitive array containing the pixels to set.
+    * @param data The DataBuffer to store the pixels into.
+    * @see java.awt.image.SampleModel#setPixels(int, int, int, int, int[], java.awt.image.DataBuffer)
+    */
+   public void setPixels(int x, int y, int w, int h, int[] iArray,
+ 						DataBuffer data)
+   {
+     int inOffset = 0;
+     int[] pixel = new int[numBands];
+     for (int yy=y; yy<(y+h); yy++)
+      {
+       int offset = scanlineStride*yy + x;
+       for (int xx=x; xx<(x+w); xx++)
+        { 
+         int samples = 0;
+         for (int b=0; b<numBands; b++)
+           samples |= (iArray[inOffset+b] << bitOffsets[b]) & bitMasks[b];
+         data.setElem(0, offset, samples);
+         inOffset += numBands;
+         offset += 1;
+       }
+     }
+   }
+   
+   
+   public void setSample(int x, int y, int b, int s, DataBuffer data)
+   {
+     int offset = scanlineStride*y + x;
+     int samples = data.getElem(offset);
+     int bitMask = bitMasks[b];
+     samples &= ~bitMask;
+     samples |= (s << bitOffsets[b]) & bitMask;
+     data.setElem(offset, samples);
+   }
+   
+   /**
+    * Creates a String with some information about this SampleModel.
+    * @return A String describing this SampleModel.
+    * @see java.lang.Object#toString()
+    */
+   public String toString()
+   {
+     StringBuffer result = new StringBuffer();
+     result.append(getClass().getName());
+     result.append("[");
+     result.append("scanlineStride=").append(scanlineStride);
+     for(int i=0; i < bitMasks.length; i+=1)
+     {
+       result.append(", mask[").append(i).append("]=0x").append(Integer.toHexString(bitMasks[i]));
+     }
+     
+     result.append("]");
+     return result.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/TileObserver.java gcc-4.1.0/libjava/classpath/java/awt/image/TileObserver.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/TileObserver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/TileObserver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /* TileObserver.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ /**
+  * NEEDS DOCUMENTATION
+  */
+ public interface TileObserver
+ {
+   void tileUpdate(WritableRenderedImage src, int x, int y, boolean writable);
+ } // interface TileObserver
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/VolatileImage.java gcc-4.1.0/libjava/classpath/java/awt/image/VolatileImage.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/VolatileImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/VolatileImage.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,253 ----
+ /* VolatileImage.java -- a hardware-accelerated image buffer
+    Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Graphics;
+ import java.awt.Graphics2D;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.Image;
+ import java.awt.Transparency;
+ import java.awt.ImageCapabilities;
+ 
+ /**
+  * VolatileImage represents a hardware-accelerated graphics buffer.
+  * The native graphics system may free or damage the resources
+  * occupied by a VolatileImage at any time.  As such, one must
+  * frequently check the "validity" of the image buffer's resources.
+  *
+  * A volatile image's "validity" depends on multiple factors.  Its
+  * resources may have become unavailble in which case you must
+  * reallocate them.  If you move the image from one output device to
+  * another, you may need to recreate the image's resources if the new
+  * output device's capabilities don't match the old one's.  Finally,
+  * if the contents of the image's buffer have been damaged you must
+  * re-render the image.
+  *
+  * VolatileImages should always be created using either
+  * Component.createVolatileImage or
+  * GraphicsConfiguration.createCompatibleVolatileImage.
+  */
+ public abstract class VolatileImage extends Image
+   implements Transparency
+ {
+   /**
+    * One of validate's possible return values.  Indicates that the
+    * image buffer matches its graphics configuration's capabilities
+    * and that its resources are initialized and ready to be drawn
+    * into.  Also implies that any existing image rendered to the
+    * buffer is intact and need not be re-rendered.
+    */
+   public static final int IMAGE_OK = 0;
+ 
+   /**
+    * One of validate's possible return values.  Indicates that the
+    * image buffer has been restored, meaning that it is valid and
+    * ready-to-use but that its previous contents have been lost.  This
+    * return value implies that the image needs to be re-rendered.
+    */
+   public static final int IMAGE_RESTORED = 1;
+ 
+   /**
+    * One of validate's possible return values.  Indicates that the
+    * image buffer type is unsupported by the current graphics
+    * configuration.  The graphics configuration may have changed, for
+    * example if the image moved from one output device to another.
+    * This return value implies that the image buffer's resources
+    * should be re-acquired.
+    */
+   public static final int IMAGE_INCOMPATIBLE = 2;
+ 
+   /**
+    * This image's transparency type.  One of Transparency.BITMASK,
+    * Transparency.OPAQUE or Transparency.TRANSLUCENT.
+    *
+    * @since 1.5
+    */
+   protected int transparency;
+ 
+   /**
+    * Default constructor.  VolatileImages should not be created
+    * directly.  Rather, you should use Component.createVolatileImage
+    * or GraphicsConfiguration.createCompatibleVolatileImage.
+    */
+   public VolatileImage()
+   {
+   }
+ 
+   /**
+    * Returns an image representing the current state of the volatile
+    * image buffer.  The returned image is static meaning that it is
+    * not updated after being created.  It is a snapshot of the
+    * volatile image buffer at the time getSnapshot is called.
+    *
+    * This method, which reads pixels from the volatile image buffer,
+    * may be less-performant than methods that write pixels since
+    * VolatileImages are typically optimized for writing.
+    *
+    * @return a BufferedImage representing this VolatileImage
+    */
+   public abstract BufferedImage getSnapshot();
+ 
+   /**
+    * Returns the width of this image buffer.
+    *
+    * @return the width of this VolatileImage
+    */
+   public abstract int getWidth();
+ 
+   /**
+    * Returns the height of this image buffer.
+    *
+    * @return the height of this VolatileImage
+    */
+   public abstract int getHeight();
+ 
+   /**
+    * Calling this method is equivalent to calling
+    * getSnapshot().getSource().  The ImageProducer produces pixels
+    * from the BufferedImage snapshot and not from the VolatileImage
+    * itself.  Thus, changes to the VolatileImage that occur after this
+    * ImageProducer has been retrieved will not be reflected in the
+    * produced pixels.
+    *
+    * This method, which reads pixels from the volatile image buffer,
+    * may be less-performant than methods that write pixels since
+    * VolatileImages are typically optimized for writing.
+    *
+    * @return an ImageProducer for a static BufferedImage snapshot of
+    * this image buffer
+    */
+   public ImageProducer getSource()
+   {
+     return getSnapshot().getSource();
+   }
+ 
+   /**
+    * Releases the system resources taken by this image.
+    */
+   public void flush()
+   {
+   }
+ 
+   /**
+    * Returns a Graphics2D object that can be used to draw onto this
+    * image.  This method is present for backwards-compatibility.  It
+    * simply returns the result of createGraphics.
+    *
+    * @return a Graphics2D object that can be used to draw onto this
+    * image
+    */
+   public Graphics getGraphics()
+   {
+     return createGraphics();
+   }
+ 
+   /**
+    * Returns a Graphics2D object that can be used to draw onto this
+    * image.
+    *
+    * @return a Graphics2D object that can be used to draw onto this
+    * image
+    */
+   public abstract Graphics2D createGraphics();
+ 
+   /**
+    * Validates and restores this image.  If the image buffer has
+    * become unavailable for further use since the last call to
+    * validate, validate will allocate a new image buffer.  The image
+    * is also "validated" against the GraphicsConfiguration parameter.
+    *
+    * "Validating" the image means checking that the capabilities it
+    * requires of the output device are indeed supported by the given
+    * output device.  If the image's characteristics, which can be
+    * highly output device-specific, are not supported by the graphics
+    * configuration, then IMAGE_INCOMPATIBLE will be returned.  This
+    * can happen, for example, if this image was created on one output
+    * device, then validated against a different output device with
+    * different capabilities.  Calling validate with a NULL gc argument
+    * causes validate to skip the validation test.
+    *
+    * @param gc graphics configuration against which to validate or
+    * NULL
+    *
+    * @return a code indicating the result of validation. One of:
+    * <ul>
+    *   <li><code>IMAGE_OK</code> if the image did not need to be
+    *   validated and didn't need to be restored</li>
+    *   <li><code>IMAGE_RESTORED</code> if the image may need to be
+    *   re-rendered.</li>
+    *   <li><code>IMAGE_INCOMPATIBLE</code> if this image's
+    *   requirements are not fulfilled by the graphics configuration
+    *   parameter.  This implies that you need to create a new
+    *   VolatileImage for the different GraphicsConfiguration or
+    *   Component. This return value implies nothing about whether the
+    *   image is valid or needs to be re-rendered.</li>
+    * </ul>
+    */
+   public abstract int validate(GraphicsConfiguration gc);
+ 
+   /**
+    * Returns true if the contents of the image buffer have been
+    * damaged or if the image buffer's resources have been reclaimed by
+    * the graphics system.  You should call this method after a series
+    * of rendering operations to or from the image, to see if the image
+    * buffer needs to be revalidated or the image re-rendered.
+    *
+    * @return true if the validate should be called, false otherwise
+    */
+   public abstract boolean contentsLost();
+ 
+   /**
+    * Returns the capabilities of this image buffer.
+    *
+    * @return the capabilities of this image buffer
+    */
+   public abstract ImageCapabilities getCapabilities();
+ 
+   /**
+    * Returns the transparency type of this image.
+    *
+    * @return Transparency.OPAQUE, Transparency.BITMASK or
+    * Transparency.TRANSLUCENT
+    */
+   public int getTransparency()
+   {
+     return transparency;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/WritableRaster.java gcc-4.1.0/libjava/classpath/java/awt/image/WritableRaster.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/WritableRaster.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/WritableRaster.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,265 ----
+ /* Copyright (C) 2000, 2002, 2003  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ 
+ /**
+  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
+  */
+ public class WritableRaster extends Raster
+ {
+   protected WritableRaster(SampleModel sampleModel, Point origin) 
+   {
+     this(sampleModel, sampleModel.createDataBuffer(), origin);
+   }
+   
+   protected WritableRaster(SampleModel sampleModel,
+ 			   DataBuffer dataBuffer, Point origin)
+   {
+     this(sampleModel, dataBuffer,
+ 	 new Rectangle(origin != null ? origin.x : 0,
+                        origin != null ? origin.y : 0,
+ 		       sampleModel.getWidth(), sampleModel.getHeight()),
+ 	 origin,
+ 	 null);
+   }
+ 
+   protected WritableRaster(SampleModel sampleModel, 
+ 			   DataBuffer dataBuffer,
+ 			   Rectangle aRegion,
+ 			   Point sampleModelTranslate,
+ 			   WritableRaster parent)
+   {
+     super(sampleModel, dataBuffer, aRegion, sampleModelTranslate,
+ 	  parent);
+   }
+ 
+   public WritableRaster getWritableParent()
+   {
+     return (WritableRaster) getParent();
+   }
+   
+   public WritableRaster createWritableTranslatedChild(int childMinX,
+ 						      int childMinY)
+   {
+     // This mirrors the code from the super class
+     int tcx = sampleModelTranslateX - minX + childMinX;
+     int tcy = sampleModelTranslateY - minY + childMinY;
+     
+     return new WritableRaster(sampleModel, dataBuffer,
+ 			      new Rectangle(childMinX, childMinY,
+ 					    width, height),
+ 			      new Point(tcx, tcy),
+ 			      this);
+   }
+ 
+   public WritableRaster createWritableChild(int parentX,
+ 					    int parentY,
+ 					    int w, int h,
+ 					    int childMinX,
+ 					    int childMinY,
+ 					    int[] bandList)
+   {
+     // This mirrors the code from the super class
+     
+     // FIXME: Throw RasterFormatException if child bounds extends
+     // beyond the bounds of this raster.
+     
+     SampleModel sm = (bandList == null) ?
+       sampleModel :
+       sampleModel.createSubsetSampleModel(bandList);
+     
+     return new
+       WritableRaster(sm, dataBuffer,
+ 		     new Rectangle(childMinX, childMinY,
+ 				   w, h),
+ 		     new Point(sampleModelTranslateX+childMinX-parentX,
+ 			       sampleModelTranslateY+childMinY-parentY),
+ 		     this);
+   }
+ 
+   public void setDataElements(int x, int y, Object inData)
+   {
+     sampleModel.setDataElements(x-sampleModelTranslateX,
+ 				y-sampleModelTranslateY,
+ 				inData, dataBuffer);
+   }
+ 
+   public void setDataElements(int x, int y, Raster inRaster)
+   {
+     Object dataElements = getDataElements(0, 0,
+ 					  inRaster.getWidth(),
+ 					  inRaster.getHeight(),
+ 					  null);
+     setDataElements(x, y, dataElements);
+   }
+ 
+   public void setDataElements(int x, int y, int w, int h,
+ 			      Object inData)
+   {
+     sampleModel.setDataElements(x-sampleModelTranslateX,
+ 				y-sampleModelTranslateY,
+ 				w, h, inData, dataBuffer);
+   }
+ 
+   public void setRect(Raster srcRaster)
+   {
+     setRect(0, 0, srcRaster);
+   }
+ 
+   public void setRect(int dx, int dy, Raster srcRaster) 
+   {
+     Rectangle targetUnclipped = new Rectangle(srcRaster.getMinX()+dx,
+ 					      srcRaster.getMinY()+dy,
+ 					      srcRaster.getWidth(),
+ 					      srcRaster.getHeight());
+ 	
+     Rectangle target = getBounds().intersection(targetUnclipped);
+ 
+     if (target.isEmpty()) return;
+     
+     int sx = target.x - dx;
+     int sy = target.y - dy;
+     
+     // FIXME: Do tests on rasters and use get/set data instead.
+     
+     /* The JDK documentation seems to imply this implementation.
+        (the trucation of higher bits), but an implementation using
+        get/setDataElements would be more efficient. None of the
+        implementations would do anything sensible when the sample
+        models don't match.
+        
+        But this is probably not the place to consider such
+        optimizations.*/
+ 
+     int[] pixels = srcRaster.getPixels(sx, sy,
+ 				       target.width, target.height,
+ 				       (int[]) null);
+ 
+     setPixels(target.x, target.y, target.width, target.height, pixels);
+   }
+ 
+   public void setPixel(int x, int y, int[] iArray)
+   {
+     sampleModel.setPixel(x-sampleModelTranslateX,
+ 			 y-sampleModelTranslateY,
+ 			 iArray, dataBuffer);
+   }
+ 
+   public void setPixel(int x, int y, float[] fArray)
+   {
+     sampleModel.setPixel(x-sampleModelTranslateX,
+ 			 y-sampleModelTranslateY,
+ 			 fArray, dataBuffer);
+   }
+ 
+   public void setPixel(int x, int y, double[] dArray)
+   {
+     sampleModel.setPixel(x-sampleModelTranslateX,
+ 			 y-sampleModelTranslateY,
+ 			 dArray, dataBuffer);
+   }
+ 
+   public void setPixels(int x, int y, int w, int h, int[] iArray)
+   {
+     sampleModel.setPixels(x-sampleModelTranslateX,
+ 			  y-sampleModelTranslateY,
+ 			  w, h, iArray, dataBuffer);
+   }
+ 
+   public void setPixels(int x, int y, int w, int h, float[] fArray)
+   {
+     sampleModel.setPixels(x-sampleModelTranslateX,
+ 			  y-sampleModelTranslateY,
+ 			  w, h, fArray, dataBuffer);
+   }
+ 
+   public void setPixels(int x, int y, int w, int h, double[] dArray)
+   {
+     sampleModel.setPixels(x-sampleModelTranslateX,
+ 			  y-sampleModelTranslateY,
+ 			  w, h, dArray, dataBuffer);
+   }
+ 
+   public void setSample(int x, int y, int b, int s)
+   {
+     sampleModel.setSample(x-sampleModelTranslateX,
+ 			  y-sampleModelTranslateY,
+ 			  b, s, dataBuffer);
+   }
+ 
+   public void setSample(int x, int y, int b, float s)
+   {
+     sampleModel.setSample(x-sampleModelTranslateX,
+ 			  y-sampleModelTranslateY,
+ 			  b, s, dataBuffer);
+   }
+ 
+   public void setSample(int x, int y, int b, double s)
+   {
+     sampleModel.setSample(x-sampleModelTranslateX,
+ 			  y-sampleModelTranslateY,
+ 			  b, s, dataBuffer);
+   }
+ 
+   public void setSamples(int x, int y, int w, int h, int b,
+ 			 int[] iArray)
+   {
+     sampleModel.setSamples(x-sampleModelTranslateX,
+ 			   y-sampleModelTranslateY,
+ 			   w, h, b, iArray, dataBuffer);
+   }
+ 
+   public void setSamples(int x, int y, int w, int h, int b,
+ 			 float[] fArray)
+   {
+     sampleModel.setSamples(x-sampleModelTranslateX,
+ 			   y-sampleModelTranslateY,
+ 			   w, h, b, fArray, dataBuffer);
+   }
+ 
+   public void setSamples(int x, int y, int w, int h, int b,
+ 			 double[] dArray)
+   {
+     sampleModel.setSamples(x-sampleModelTranslateX,
+ 			   y-sampleModelTranslateY,
+ 			   w, h, b, dArray, dataBuffer);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/WritableRenderedImage.java gcc-4.1.0/libjava/classpath/java/awt/image/WritableRenderedImage.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/WritableRenderedImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/WritableRenderedImage.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /* WritableRenderedImage.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image;
+ 
+ import java.awt.Point;
+ 
+ /**
+  * NEEDS DOCUMENTATION
+  */
+ public interface WritableRenderedImage extends RenderedImage
+ {
+   void addTileObserver(TileObserver to);
+   void removeTileObserver(TileObserver to);
+   WritableRaster getWritableTile(int x, int y);
+   void releaseWritableTile(int x, int y);
+   boolean isTileWritable(int x, int y);
+   Point[] getWritableTileIndices();
+   boolean hasTileWriters();
+   void setData(Raster r);
+ } // interface WritableRenderedImage
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/package.html gcc-4.1.0/libjava/classpath/java/awt/image/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/image/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.image package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.image</title></head>
+ 
+ <body>
+ <p>Image consumers, producers and filters.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java gcc-4.1.0/libjava/classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /* ContextualRenderedImageFactory.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image.renderable;
+ 
+ import java.awt.geom.Rectangle2D;
+ import java.awt.image.RenderedImage;
+ 
+ /**
+  * STUBBED
+  */
+ public interface ContextualRenderedImageFactory extends RenderedImageFactory
+ {
+   RenderContext mapRenderContext(int i, RenderContext context,
+                                  ParameterBlock block, RenderableImage image);
+   RenderedImage create(RenderContext context, ParameterBlock block);
+   Rectangle2D getBounds2D(ParameterBlock block);
+   Object getProperty(ParameterBlock block, String name);
+   String[] getPropertyNames();
+   boolean isDynamic();
+ } // interface ContextualRenderedImageFactory
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/renderable/ParameterBlock.java gcc-4.1.0/libjava/classpath/java/awt/image/renderable/ParameterBlock.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/renderable/ParameterBlock.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/renderable/ParameterBlock.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,308 ----
+ /* ParameterBlock.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image.renderable;
+ 
+ import java.awt.image.RenderedImage;
+ import java.io.Serializable;
+ import java.util.Vector;
+ 
+ public class ParameterBlock implements Cloneable, Serializable
+ {
+   private static final long serialVersionUID = -7577115551785240750L;
+   protected Vector sources;
+   protected Vector parameters;
+ 
+   public ParameterBlock()
+   {
+     this(new Vector(), new Vector());
+   }
+ 
+   public ParameterBlock(Vector sources)
+   {
+     this(sources, new Vector());
+   }
+ 
+   public ParameterBlock(Vector sources, Vector parameters)
+   {
+     this.sources = sources;
+     this.parameters = parameters;
+   }
+ 
+   public Object shallowClone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // impossible
+       }
+   }
+ 
+   public Object clone()
+   {
+     ParameterBlock pb = (ParameterBlock) shallowClone();
+     if (sources != null)
+       pb.sources = (Vector) sources.clone();
+     if (parameters != null)
+       pb.parameters = (Vector) parameters.clone();
+     return pb;
+   }
+ 
+   public ParameterBlock addSource(Object source)
+   {
+     sources.add(source);
+     return this;
+   }
+ 
+   public Object getSource(int index)
+   {
+     return sources.get(index);
+   }
+ 
+   public ParameterBlock setSource(Object source, int index)
+   {
+     sources.ensureCapacity(index);
+     sources.set(index, source);
+     return this;
+   }
+ 
+   public RenderedImage getRenderedSource(int index)
+   {
+     return (RenderedImage) sources.get(index);
+   }
+ 
+   public RenderableImage getRenderableSource(int index)
+   {
+     return (RenderableImage) sources.get(index);
+   }
+ 
+   public int getNumSources()
+   {
+     return sources.size();
+   }
+ 
+   public Vector getSources()
+   {
+     return sources;
+   }
+ 
+   public void setSources(Vector sources)
+   {
+     this.sources = sources;
+   }
+ 
+   public void removeSources()
+   {
+     if (sources != null)
+       sources.clear();
+   }
+ 
+   public int getNumParameters()
+   {
+     return parameters.size();
+   }
+ 
+   public Vector getParameters()
+   {
+     return parameters;
+   }
+ 
+   public void setParameters(Vector parameters)
+   {
+     this.parameters = parameters;
+   }
+ 
+   public void removeParameters()
+   {
+     if (parameters != null)
+       parameters.clear();
+   }
+ 
+   public ParameterBlock add(Object o)
+   {
+     parameters.add(o);
+     return this;
+   }
+ 
+   public ParameterBlock add(byte b)
+   {
+     return add(new Byte(b));
+   }
+ 
+   public ParameterBlock add(char c)
+   {
+     return add(new Character(c));
+   }
+ 
+   public ParameterBlock add(short s)
+   {
+     return add(new Short(s));
+   }
+ 
+   public ParameterBlock add(int i)
+   {
+     return add(new Integer(i));
+   }
+ 
+   public ParameterBlock add(long l)
+   {
+     return add(new Long(l));
+   }
+ 
+   public ParameterBlock add(float f)
+   {
+     return add(new Float(f));
+   }
+ 
+   public ParameterBlock add(double d)
+   {
+     return add(new Double(d));
+   }
+ 
+   public ParameterBlock set(Object o, int index)
+   {
+     parameters.ensureCapacity(index);
+     parameters.set(index, o);
+     return this;
+   }
+ 
+   public ParameterBlock set(byte b, int index)
+   {
+     return set(new Byte(b), index);
+   }
+ 
+   public ParameterBlock set(char c, int index)
+   {
+     return set(new Character(c), index);
+   }
+ 
+   public ParameterBlock set(short s, int index)
+   {
+     return set(new Short(s), index);
+   }
+ 
+   public ParameterBlock set(int i, int index)
+   {
+     return set(new Integer(i), index);
+   }
+ 
+   public ParameterBlock set(long l, int index)
+   {
+     return set(new Long(l), index);
+   }
+ 
+   public ParameterBlock set(float f, int index)
+   {
+     return set(new Float(f), index);
+   }
+ 
+   public ParameterBlock set(double d, int index)
+   {
+     return set(new Double(d), index);
+   }
+ 
+   public Object getObjectParameter(int index)
+   {
+     return parameters.get(index);
+   }
+ 
+   public byte getByteParameter(int index)
+   {
+     return ((Byte) parameters.get(index)).byteValue();
+   }
+ 
+   public char getCharParameter(int index)
+   {
+     return ((Character) parameters.get(index)).charValue();
+   }
+ 
+   public short getShortParameter(int index)
+   {
+     return ((Short) parameters.get(index)).shortValue();
+   }
+ 
+   public int getIntParameter(int index)
+   {
+     return ((Integer) parameters.get(index)).intValue();
+   }
+ 
+   public long getLongParameter(int index)
+   {
+     return ((Long) parameters.get(index)).longValue();
+   }
+ 
+   public float getFloatParameter(int index)
+   {
+     return ((Float) parameters.get(index)).floatValue();
+   }
+ 
+   public double getDoubleParameter(int index)
+   {
+     return ((Double) parameters.get(index)).doubleValue();
+   }
+ 
+   public Class[] getParamClasses()
+   {
+     int i = parameters.size();
+     Class[] result = new Class[i];
+     while (--i >= 0)
+       {
+         Class c = parameters.get(i).getClass();
+         if (c == Byte.class)
+           result[i] = byte.class;
+         else if (c == Character.class)
+           result[i] = char.class;
+         else if (c == Short.class)
+           result[i] = short.class;
+         else if (c == Integer.class)
+           result[i] = int.class;
+         else if (c == Long.class)
+           result[i] = long.class;
+         else if (c == Float.class)
+           result[i] = float.class;
+         else if (c == Double.class)
+           result[i] = double.class;
+         else
+           result[i] = c;
+       }
+     return result;
+   }
+ } // class ParameterBlock
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderContext.java gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderContext.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,141 ----
+ /* RenderContext.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image.renderable;
+ 
+ import java.awt.RenderingHints;
+ import java.awt.Shape;
+ import java.awt.geom.AffineTransform;
+ 
+ public class RenderContext implements Cloneable
+ {
+   private AffineTransform xform;
+   private Shape aoi;
+   private RenderingHints hints;
+ 
+   public RenderContext(AffineTransform xform, Shape aoi, RenderingHints hints)
+   {
+     this.xform = xform;
+     this.aoi = aoi;
+     this.hints = hints;
+   }
+ 
+   public RenderContext(AffineTransform xform)
+   {
+     this(xform, null, null);
+   }
+ 
+   public RenderContext(AffineTransform xform, RenderingHints hints)
+   {
+     this(xform, null, hints);
+   }
+ 
+   public RenderContext(AffineTransform xform, Shape aoi)
+   {
+     this(xform, aoi, null);
+   }
+ 
+   public RenderingHints getRenderingHints()
+   {
+     return hints;
+   }
+ 
+   public void setRenderingHints(RenderingHints hints)
+   {
+     this.hints = hints;
+   }
+ 
+   public void setTransform(AffineTransform xform)
+   {
+     this.xform = xform;
+   }
+ 
+   public void preConcatenateTransform(AffineTransform pre)
+   {
+     preConcetenateTransform (pre);
+   }
+ 
+   /** @deprecated */
+   public void preConcetenateTransform(AffineTransform pre)
+   {
+     xform.preConcatenate (pre);
+   }
+ 
+   public void concatenateTransform(AffineTransform post)
+   {
+     concetenateTransform (post);
+   }
+ 
+   /** @deprecated */
+   public void concetenateTransform(AffineTransform post)
+   {
+     xform.concatenate (post);
+   }
+ 
+   public AffineTransform getTransform()
+   {
+     return xform;
+   }
+ 
+   public void setAreaOfInterest(Shape aoi)
+   {
+     this.aoi = aoi;
+   }
+ 
+   public Shape getAreaOfInterest()
+   {
+     return aoi;
+   }
+ 
+   public Object clone()
+   {
+     try
+       {
+         RenderContext copy = (RenderContext) super.clone();
+         if (xform != null)
+           copy.xform = (AffineTransform) xform.clone();
+         if (hints != null)
+           copy.hints = (RenderingHints) hints.clone();
+         return copy;
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw (Error) new InternalError().initCause(e); // impossible
+       }
+   }
+ } // class RenderContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderableImage.java gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderableImage.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderableImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderableImage.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* RenderableImage.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image.renderable;
+ 
+ import java.awt.RenderingHints;
+ import java.awt.image.RenderedImage;
+ import java.util.Vector;
+ 
+ public interface RenderableImage
+ {
+   String HINTS_OBSERVED = "HINTS_OBSERVED";
+   
+   Vector getSources();
+   Object getProperty(String name);
+   String[] getPropertyNames();
+   boolean isDynamic();
+   float getWidth();
+   float getHeight();
+   float getMinX();
+   float getMinY();
+   RenderedImage createScaledRendering(int w, int h, RenderingHints hints);
+   RenderedImage createDefaultRendering();
+   RenderedImage createRendering(RenderContext context);
+ 
+ } // interface RenderableImage
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderableImageOp.java gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderableImageOp.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderableImageOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderableImageOp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,157 ----
+ /* RenderableImageOp.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image.renderable;
+ 
+ import java.awt.RenderingHints;
+ import java.awt.geom.AffineTransform;
+ import java.awt.image.RenderedImage;
+ import java.util.Vector;
+ 
+ public class RenderableImageOp implements RenderableImage
+ {
+   private final ContextualRenderedImageFactory crif;
+   private ParameterBlock block;
+ 
+   public RenderableImageOp(ContextualRenderedImageFactory crif,
+                            ParameterBlock block)
+   {
+     this.crif = crif;
+     this.block = (ParameterBlock) block.clone();
+   }
+ 
+   public Vector getSources()
+   {
+     if (block.sources == null)
+       return null;
+     int size = block.sources.size();
+     Vector v = new Vector();
+     for (int i = 0; i < size; i++)
+       {
+         Object o = block.sources.get(i);
+         if (o instanceof RenderableImage)
+           v.add(o);
+       }
+     return v;
+   }
+ 
+   public Object getProperty(String name)
+   {
+     return crif.getProperty(block, name);
+   }
+ 
+   public String[] getPropertyNames()
+   {
+     return crif.getPropertyNames();
+   }
+ 
+   public boolean isDynamic()
+   {
+     return crif.isDynamic();
+   }
+ 
+   public float getWidth()
+   {
+     return (float) crif.getBounds2D(block).getWidth();
+   }
+ 
+   public float getHeight()
+   {
+     return (float) crif.getBounds2D(block).getHeight();
+   }
+ 
+   public float getMinX()
+   {
+     return (float) crif.getBounds2D(block).getX();
+   }
+ 
+   public float getMinY()
+   {
+     return (float) crif.getBounds2D(block).getY();
+   }
+ 
+   public ParameterBlock setParameterBlock(ParameterBlock block)
+   {
+     ParameterBlock result = this.block;
+     this.block = (ParameterBlock) block.clone();
+     return result;
+   }
+ 
+   public ParameterBlock getParameterBlock()
+   {
+     return block;
+   }
+ 
+   public RenderedImage createScaledRendering(int w, int h,
+                                              RenderingHints hints)
+   {
+     if (w == 0)
+       if (h == 0)
+         throw new IllegalArgumentException();
+       else
+         w = Math.round(h * getWidth() / getHeight());
+     if (h == 0)
+       h = Math.round(w * getHeight() / getWidth());
+     AffineTransform xform = AffineTransform.getScaleInstance(w * getWidth(),
+                                                              h * getHeight());
+     return createRendering(new RenderContext(xform, hints));
+   }
+ 
+   public RenderedImage createDefaultRendering()
+   {
+     return createRendering(new RenderContext(new AffineTransform()));
+   }
+ 
+   public RenderedImage createRendering(RenderContext context)
+   {
+     ParameterBlock copy = (ParameterBlock) block.clone();
+     int i = block.sources.size();
+     while (--i >= 0)
+       {
+         Object o = block.sources.get(i);
+         if (o instanceof RenderableImage)
+           {
+             RenderableImage ri = (RenderableImage) o;
+             RenderContext rc = crif.mapRenderContext(i, context, block, ri);
+             copy.sources.set(i, ri.createRendering(rc));
+           }
+       }
+     // Now copy.sources should be only RenderedImages.
+     return crif.create(context, copy);
+   }
+ } // class RenderableImageOp
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* RenderableImageProducer.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image.renderable;
+ 
+ import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageProducer;
+ 
+ public class RenderableImageProducer implements ImageProducer, Runnable
+ {
+   public RenderableImageProducer(RenderableImage image, RenderContext context)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public void setRenderContext(RenderContext context)
+   {
+   }
+ 
+   public void addConsumer(ImageConsumer consumer)
+   {
+   }
+ 
+   public boolean isConsumer(ImageConsumer consumer)
+   {
+     return false;
+   }
+ 
+   public void removeConsumer(ImageConsumer consumer)
+   {
+   }
+ 
+   public void startProduction(ImageConsumer consumer)
+   {
+   }
+ 
+   public void requestTopDownLeftRightResend(ImageConsumer consumer)
+   {
+   }
+ 
+   public void run()
+   {
+   }
+ } // class RenderableImageProducer
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderedImageFactory.java gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderedImageFactory.java
*** gcc-4.0.2/libjava/classpath/java/awt/image/renderable/RenderedImageFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/renderable/RenderedImageFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /* RenderedImageFactory.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.image.renderable;
+ 
+ import java.awt.RenderingHints;
+ import java.awt.image.RenderedImage;
+ 
+ public interface RenderedImageFactory
+ {
+   RenderedImage create(ParameterBlock block, RenderingHints hints);
+ } // interface RenderedImageFactory
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/image/renderable/package.html gcc-4.1.0/libjava/classpath/java/awt/image/renderable/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/image/renderable/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/image/renderable/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.image.renderable package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.image.renderable</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/package.html gcc-4.1.0/libjava/classpath/java/awt/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt</title></head>
+ 
+ <body>
+ <p>Abstract Window Toolkit classes.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/ButtonPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/ButtonPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/ButtonPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/ButtonPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ /* ButtonPeer.java -- Peer interface for buttons
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface ButtonPeer extends ComponentPeer
+ {
+   void setLabel (String label);
+   
+ } // interface ButtonPeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/CanvasPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/CanvasPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/CanvasPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/CanvasPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,45 ----
+ /* CanvasPeer.java -- Peer interface for a canvas
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface CanvasPeer extends ComponentPeer
+ {
+ 
+ } // interface CanvasPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/CheckboxMenuItemPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/CheckboxMenuItemPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/CheckboxMenuItemPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/CheckboxMenuItemPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ /* CheckboxMenuItemPeer.java -- Peer interface for checkbox menu items
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface CheckboxMenuItemPeer extends MenuItemPeer
+ {
+   void setState (boolean state);
+   
+ } // interface CheckboxMenuItemPeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/CheckboxPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/CheckboxPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/CheckboxPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/CheckboxPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* CheckboxPeer.java -- Interface for checkbox peer
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.CheckboxGroup;
+ 
+ public interface CheckboxPeer extends ComponentPeer
+ {
+   void setCheckboxGroup (CheckboxGroup group);
+ 
+   void setLabel (String label);
+ 
+   void setState (boolean state);
+ 
+ } // interface CheckboxPeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/ChoicePeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/ChoicePeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/ChoicePeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/ChoicePeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* ChoicePeer.java -- Peer for choice box
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface ChoicePeer extends ComponentPeer
+ {
+   void add (String item, int index);
+ 
+   void addItem (String item, int index);
+ 
+   void remove (int index);
+ 
+   void removeAll();
+ 
+   void select (int index);  
+ 
+ } // interface ChoicePeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/ComponentPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/ComponentPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/ComponentPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/ComponentPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,232 ----
+ /* ComponentPeer.java -- Toplevel component peer
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.AWTException;
+ import java.awt.BufferCapabilities;
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Cursor;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.Image;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.Toolkit;
+ import java.awt.event.PaintEvent;
+ import java.awt.image.ColorModel;
+ import java.awt.image.ImageObserver;
+ import java.awt.image.ImageProducer;
+ import java.awt.image.VolatileImage;
+ 
+ public interface ComponentPeer
+ {
+   int checkImage(Image img, int width, int height, 
+ 		 ImageObserver ob);
+   Image createImage(ImageProducer prod);
+   Image createImage(int width, int height);
+   void disable();
+   void dispose();
+   void enable();
+   ColorModel getColorModel();
+   FontMetrics getFontMetrics(Font f);
+   Graphics getGraphics();
+   Point getLocationOnScreen();
+   Dimension getMinimumSize();
+   Dimension getPreferredSize();
+   Toolkit getToolkit();
+   void handleEvent(AWTEvent e);
+   void hide();
+ 
+   /**
+    * Part of the earlier 1.1 API, replaced by isFocusable().
+    */
+   boolean isFocusTraversable();
+   boolean isFocusable();
+   Dimension minimumSize();
+   Dimension preferredSize();
+   void paint(Graphics graphics);
+   boolean prepareImage(Image img, int width, int height,
+ 			      ImageObserver ob);
+   void print(Graphics graphics);
+   void repaint(long tm, int x, int y, int width, int height);
+ 
+   /**
+    * Part of the earlier 1.1 API, apparently replaced by argument 
+    * form of the same method.
+    */
+   void requestFocus();
+   boolean requestFocus (Component source, boolean bool1, boolean bool2, long x);
+ 
+   void reshape(int x, int y, int width, int height);
+   void setBackground(Color color);
+   void setBounds(int x, int y, int width, int height);
+ 
+   /**
+    * Part of the earlier 1.1 API, apparently no longer needed.
+    */
+   void setCursor(Cursor cursor);
+ 
+   void setEnabled(boolean enabled);
+   void setFont(Font font);
+   void setForeground(Color color);
+   void setVisible(boolean visible);
+   void show();
+ 
+   /** 
+    * Get the graphics configuration of the component. The color model
+    * of the component can be derived from the configuration.
+    */
+   GraphicsConfiguration getGraphicsConfiguration();
+ 
+   /**
+    * Part of an older API, no longer needed.
+    */
+   void setEventMask (long mask);
+ 
+   // Methods below are introduced since 1.1
+   boolean isObscured();
+   boolean canDetermineObscurity();
+   void coalescePaintEvent(PaintEvent e);
+   void updateCursorImmediately();
+   boolean handlesWheelScrolling();
+ 
+   /**
+    * A convenience method that creates a volatile image.  The volatile
+    * image is created on the screen device on which this component is
+    * displayed, in the device's current graphics configuration.
+    *
+    * @param width width of the image
+    * @param height height of the image
+    *
+    * @see VolatileImage
+    *
+    * @since 1.2
+    */
+   VolatileImage createVolatileImage(int width, int height);
+ 
+   /**
+    * Create a number of image buffers that implement a buffering
+    * strategy according to the given capabilities.
+    *
+    * @param numBuffers the number of buffers
+    * @param caps the buffering capabilities
+    *
+    * @throws AWTException if the specified buffering strategy is not
+    * implemented
+    *
+    * @since 1.2
+    */
+   void createBuffers(int numBuffers, BufferCapabilities caps)
+     throws AWTException;
+ 
+   /**
+    * Return the back buffer of this component.
+    *
+    * @return the back buffer of this component.
+    *
+    * @since 1.2
+    */
+   Image getBackBuffer();
+ 
+   /**
+    * Perform a page flip, leaving the contents of the back buffer in
+    * the specified state.
+    *
+    * @param contents the state in which to leave the back buffer
+    *
+    * @since 1.2
+    */
+   void flip(BufferCapabilities.FlipContents contents);
+ 
+   /**
+    * Destroy the resources created by createBuffers.
+    *
+    * @since 1.2
+    */
+   void destroyBuffers();
+   
+   /**
+    * Get the bounds of this component peer.
+    * 
+    * @return component peer bounds
+    * @since 1.5
+    */
+   Rectangle getBounds();
+ 
+   /**
+    * Reparent this component under another container.
+    * 
+    * @param parent
+    * @since 1.5
+    */
+   void reparent(ContainerPeer parent);
+   
+   /**
+    * Set the bounds of this component peer.
+    * 
+    * @param x the new x co-ordinate
+    * @param y the new y co-ordinate
+    * @param width the new width
+    * @param height the new height
+    * @param z the new stacking level
+    * @since 1.5
+    */
+   void setBounds (int x, int y, int width, int height, int z);
+   
+   /**
+    * Check if this component supports being reparented.
+    * 
+    * @return true if this component can be reparented,
+    * false otherwise.
+    * @since 1.5
+    */
+   boolean isReparentSupported();
+ 
+   /**
+    * Layout this component peer.
+    *
+    * @since 1.5
+    */
+   void layout();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/ContainerPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/ContainerPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/ContainerPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/ContainerPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,84 ----
+ /* ContainerPeer.java -- Interface for container peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Insets;
+ 
+ public interface ContainerPeer extends ComponentPeer
+ {
+   Insets insets();
+ 
+   Insets getInsets();
+ 
+   void beginValidate();
+ 
+   void endValidate();
+ 
+   void beginLayout();
+ 
+   void endLayout();
+ 
+   boolean isPaintPending();
+   
+   /**
+    * Check if this container peer can be restacked.
+    * 
+    * @return true if this container peer supports being restacked, false otherwise
+    * @since 1.5
+    */
+   boolean isRestackSupported();
+ 
+   /**
+    * Cancel a pending paint event on a region of this container.
+    * 
+    * @param x the x co-ordinate of the region
+    * @param y the y co-ordinate of the region
+    * @param width the width of the region
+    * @param height the height of the region
+    * @since 1.5
+    */
+   void cancelPendingPaint(int x, int y, int width, int height);
+   
+   /**
+    * Restack the component peers in this container peer.
+    * 
+    * @since 1.5
+    */
+   void restack();
+ } // interface ContainerPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/DialogPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/DialogPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/DialogPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/DialogPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,48 ----
+ /* DialogPeer.java -- Interface for dialog box peer
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface DialogPeer extends WindowPeer
+ {
+   void setResizable (boolean resizeable);
+ 
+   void setTitle (String title);
+ 
+ } // interface DialogPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/FileDialogPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/FileDialogPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/FileDialogPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/FileDialogPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* FileDialogPeer.java -- Interface for file selection dialog box peer
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.io.FilenameFilter;
+ 
+ public interface FileDialogPeer extends DialogPeer
+ {
+   void setFile (String file);
+ 
+   void setDirectory (String dir);
+ 
+   void setFilenameFilter (FilenameFilter ff);
+ 
+ } // interface FileDialogPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/FontPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/FontPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/FontPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/FontPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,45 ----
+ /* FontPeer.java -- Interface for font peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface FontPeer
+ {
+ 
+ } // interface FontPeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/FramePeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/FramePeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/FramePeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/FramePeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,75 ----
+ /* FramePeer.java -- Interface for frame peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Image;
+ import java.awt.MenuBar;
+ import java.awt.Rectangle;
+ 
+ public interface FramePeer extends WindowPeer
+ {
+   void setIconImage(Image image);
+   void setMenuBar(MenuBar mb);
+   void setResizable(boolean resizable);
+   void setTitle(String title);
+   int getState();
+   void setState(int state);
+   void setMaximizedBounds(Rectangle r);
+   
+   /**
+    * Check if this frame peer supports being restacked.
+    * 
+    * @return true if this frame peer can be restacked,
+    * false otherwise
+    * @since 1.5
+    */
+   boolean isRestackSupported();
+   
+   /**
+    * Sets the bounds of this frame peer.
+    * 
+    * @param x the new x co-ordinate
+    * @param y the new y co-ordinate
+    * @param width the new width
+    * @param height the new height
+    * @since 1.5
+    */
+   void setBoundsPrivate(int x, int y, int width, int height);
+ } // interface FramePeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/LabelPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/LabelPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/LabelPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/LabelPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ /* LabelPeer.java -- Interface for simple text lable peer
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface LabelPeer extends ComponentPeer
+ {
+   void setAlignment(int alignment);
+   void setText(String text);
+ } // interface LabelPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/LightweightPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/LightweightPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/LightweightPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/LightweightPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,45 ----
+ /* LightweightPeer.java -- Interface for lightweight peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface LightweightPeer extends ComponentPeer
+ {
+ 
+ } // interface LightweightPeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/ListPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/ListPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/ListPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/ListPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* ListPeer.java -- Interface for list box peer
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Dimension;
+ 
+ public interface ListPeer extends ComponentPeer
+ {
+   void add(String item, int index);
+   void addItem(String item, int index);
+   void clear();
+   void delItems(int start_index, int end_index);
+   void deselect(int index);
+   int[] getSelectedIndexes();
+   void makeVisible(int index);
+   Dimension minimumSize(int s);
+   Dimension preferredSize(int s);
+   void removeAll();
+   void select(int index);
+   void setMultipleMode(boolean multi);
+   void setMultipleSelections(boolean multi);
+   Dimension getPreferredSize(int s);
+   Dimension getMinimumSize(int s);
+ } // interface ListPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/MenuBarPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/MenuBarPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/MenuBarPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/MenuBarPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,49 ----
+ /* MenuBarPeer.java -- Interface for menu bar peer
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Menu;
+ 
+ public interface MenuBarPeer extends MenuComponentPeer
+ {
+   void addMenu(Menu m);
+   void addHelpMenu(Menu menu);
+   void delMenu(int index);
+ } // interface MenuBarPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/MenuComponentPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/MenuComponentPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/MenuComponentPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/MenuComponentPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,55 ----
+ /* MenuComponentPeer.java -- 
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Font;
+ 
+ public interface MenuComponentPeer
+ {
+   void dispose();
+   
+   /**
+    * Set the font on this menu component peer.
+    * 
+    * @param font the new font
+    * @since 1.5
+    */
+   void setFont (Font font);
+ } // interface MenuComponentPeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/MenuItemPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/MenuItemPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/MenuItemPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/MenuItemPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,48 ----
+ /* MenuItemPeer.java -- Interface for menu item peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface MenuItemPeer extends MenuComponentPeer
+ {
+   void disable();
+   void enable();
+   void setEnabled(boolean enabled);
+   void setLabel(String text);
+ } // interface MenuItemPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/MenuPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/MenuPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/MenuPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/MenuPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,49 ----
+ /* MenuPeer.java -- Interface for menu peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.MenuItem;
+ 
+ public interface MenuPeer extends MenuItemPeer
+ {
+   void addItem (MenuItem item);
+   void addSeparator ();
+   void delItem (int index);
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/PanelPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/PanelPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/PanelPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/PanelPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,45 ----
+ /* PanelPeer.java -- Interface for panel peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface PanelPeer extends ContainerPeer
+ {
+ 
+ } // interface PanelPeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/PopupMenuPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/PopupMenuPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/PopupMenuPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/PopupMenuPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* PopupMenuPeer.java -- Interface for popup menu peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Component;
+ import java.awt.Event;
+ 
+ public interface PopupMenuPeer extends MenuPeer
+ {
+   /**
+    * Part of the older API, replaced by event version instead.
+    */
+   void show (Component origin, int x, int y);
+ 
+   void show (Event e);
+ } // interface PopupMenuPeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/RobotPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/RobotPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/RobotPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/RobotPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* RobotPeer.java -- Interface for programatically driving GUI
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Rectangle;
+ 
+ public interface RobotPeer
+ {
+   void mouseMove (int x, int y);
+   void mousePress (int buttons);
+   void mouseRelease (int buttons);
+   void mouseWheel (int wheelAmt);
+   void keyPress (int keycode);
+   void keyRelease (int keycode);
+   int getRGBPixel (int x, int y);
+   int[] getRGBPixels (Rectangle screen);
+ } // interface RobotPeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/ScrollPanePeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/ScrollPanePeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/ScrollPanePeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/ScrollPanePeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* ScrollPanePeer.java -- Interface for scrollable panes
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Adjustable;
+ 
+ public interface ScrollPanePeer extends ContainerPeer
+ {
+   int getHScrollbarHeight();
+   int getVScrollbarWidth();
+   void setScrollPosition(int h, int v);
+   void childResized(int width, int height);
+   void setUnitIncrement(Adjustable item, int inc);
+   void setValue(Adjustable item, int value);
+ } // interface ScollPanePeer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/ScrollbarPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/ScrollbarPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/ScrollbarPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/ScrollbarPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /* ScrollbarPeer.java -- Interface for scrollbar peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface ScrollbarPeer extends ComponentPeer
+ {
+   void setLineIncrement(int inc);
+   void setPageIncrement(int inc);
+   void setValues(int value, int visible, int min, int max);
+ } // interface ScrollbarPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/TextAreaPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/TextAreaPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/TextAreaPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/TextAreaPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* TextAreaPeer.java -- Interface for text area peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Dimension;
+ 
+ public interface TextAreaPeer extends TextComponentPeer
+ {
+   void insert(String text, int pos);
+   void insertText(String text, int pos);
+   Dimension minimumSize(int rows, int cols);
+   Dimension getMinimumSize(int rows, int cols);
+   Dimension preferredSize(int rows, int cols);
+   Dimension getPreferredSize(int rows, int cols);
+   void replaceRange(String text, int start_pos, int end_pos);
+   void replaceText(String text, int start_pos, int end_pos);
+ } // interface TextAreaPeer
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/TextComponentPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/TextComponentPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/TextComponentPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/TextComponentPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,66 ----
+ /* TextComponentPeer.java -- Superclass interface for text components
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Rectangle;
+ import java.awt.im.InputMethodRequests;
+ 
+ public interface TextComponentPeer extends ComponentPeer
+ {
+   int getSelectionEnd();
+   int getSelectionStart();
+   String getText();
+   void setText(String text);
+   void select(int start_pos, int end_pos);
+   void setEditable(boolean editable);
+   int getCaretPosition();
+   void setCaretPosition(int pos);
+   int getIndexAtPoint(int x, int y);
+   Rectangle getCharacterBounds(int pos);
+   long filterEvents(long filter);
+   
+   /**
+    * Retrieve this text component peer's input method requests.
+    * 
+    * @return the input method requests made by this text component peer
+    * @since 1.5
+    */
+   InputMethodRequests getInputMethodRequests();
+ } // interface TextComponentPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/TextFieldPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/TextFieldPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/TextFieldPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/TextFieldPeer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* TextFieldPeer.java -- Interface for text field peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ import java.awt.Dimension;
+ 
+ public interface TextFieldPeer extends TextComponentPeer
+ {
+   Dimension minimumSize(int len);
+   Dimension preferredSize(int len);
+   Dimension getMinimumSize(int len);
+   Dimension getPreferredSize(int len);
+   void setEchoChar(char echo_char);
+   void setEchoCharacter(char echo_char);  
+ } // interface TextFieldPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/WindowPeer.java gcc-4.1.0/libjava/classpath/java/awt/peer/WindowPeer.java
*** gcc-4.0.2/libjava/classpath/java/awt/peer/WindowPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/WindowPeer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,60 ----
+ /* WindowPeer.java -- Interface for window peers
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.peer;
+ 
+ public interface WindowPeer extends ContainerPeer
+ {
+   void toBack();
+   void toFront();
+   
+   /**
+    * FIXME: unknown.
+    * @since 1.5
+    */
+   void updateAlwaysOnTop();
+   
+   /**
+    * Request that this window peer be given the window focus.
+    * 
+    * @return true if the window received focus, false otherwise
+    * @since 1.5
+    */
+   boolean requestWindowFocus();
+ } // interface WindowPeer 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/peer/package.html gcc-4.1.0/libjava/classpath/java/awt/peer/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/peer/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/peer/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.peer package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.peer</title></head>
+ 
+ <body>
+ <p>Interfaces for using native interface components.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/Book.java gcc-4.1.0/libjava/classpath/java/awt/print/Book.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/Book.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/Book.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,159 ----
+ /* Book.java -- A mixed group of pages to print.
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.print;
+ 
+ import java.util.Vector;
+ 
+ /**
+  * This class allows documents to be created with different paper types,
+  * page formatters, and painters.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class Book implements Pageable
+ {
+   /**
+    * Painter objects for the book.
+    */
+   Vector printables = new Vector();
+ 
+   /**
+    * Page formats for the book.
+    */
+   Vector page_formats = new Vector();
+ 
+   /**
+    * Initializes a new instance of <code>Book</code> that is empty.
+    */
+   public Book()
+   {
+   }
+ 
+   /**
+    * Returns the number of pages in this book.
+    *
+    * @return The number of pages in this book.
+    */
+   public int getNumberOfPages()
+   {
+     return printables.size();
+   }
+ 
+   /**
+    * This method returns the <code>PageFormat</code> object for the
+    * specified page.
+    *
+    * @param page_number The number of the page to get information for, where
+    * page numbers start at 0.
+    *
+    * @return The <code>PageFormat</code> object for the specified page.
+    *
+    * @exception IndexOutOfBoundsException If the page number is not valid.
+    */
+   public PageFormat getPageFormat(int page_number)
+   {
+     return (PageFormat) page_formats.elementAt(page_number);
+   }
+ 
+   /**
+    * This method returns the <code>Printable</code> object for the
+    * specified page.
+    *
+    * @param page_number The number of the page to get information for, where
+    * page numbers start at 0.
+    *
+    * @return The <code>Printable</code> object for the specified page.
+    *
+    * @exception IndexOutOfBoundsException If the page number is not valid.
+    */
+   public Printable getPrintable(int page_number)
+   {
+     return (Printable) printables.elementAt(page_number);
+   }
+ 
+   /**
+    * This method appends a page to the end of the book.
+    *
+    * @param printable The <code>Printable</code> for this page.
+    * @param page_format The <code>PageFormat</code> for this page.
+    *
+    * @exception NullPointerException If either argument is <code>null</code>.
+    */
+   public void append(Printable printable, PageFormat page_format)
+   {
+     append(printable, page_format, 1);
+   }
+ 
+   /**
+    * This method appends the specified number of pages to the end of the book.
+    * Each one will be associated with the specified <code>Printable</code>
+    * and <code>PageFormat</code>.
+    *
+    * @param printable The <code>Printable</code> for this page.
+    * @param page_format The <code>PageFormat</code> for this page.
+    * @param num_pages The number of pages to append.
+    *
+    * @exception NullPointerException If any argument is <code>null</code>.
+    */
+   public void append(Printable printable, PageFormat page_format, int num_pages)
+   {
+     for (int i = 0; i < num_pages; i++)
+       {
+ 	printables.addElement(printable);
+ 	page_formats.addElement(page_format);
+       }
+   }
+ 
+   /**
+    * This method changes the <code>Printable</code> and <code>PageFormat</code>
+    * for the specified page.  The page must already exist or an exception
+    * will be thrown.
+    *
+    * @param page_num The page number to alter.
+    * @param printable The new <code>Printable</code> for the page.
+    * @param page_format The new <code>PageFormat</code> for the page.
+    *
+    * @throws IndexOutOfBoundsException If the specified page does not exist.
+    */
+   public void setPage(int page_num, Printable printable, PageFormat page_format)
+   {
+     printables.setElementAt(printable, page_num);
+     page_formats.setElementAt(page_format, page_num);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/PageFormat.java gcc-4.1.0/libjava/classpath/java/awt/print/PageFormat.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/PageFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/PageFormat.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,292 ----
+ /* PageFormat.java -- Information about the page format
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.print;
+ 
+ /**
+   * This class contains information about the desired page format to
+   * use for printing a particular set of pages.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class PageFormat implements Cloneable
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ /**
+   * A constant for a landscaped page orientation.  Used by
+   * <code>getOrientation</code> and <code>setOrientation</code>.
+   */
+ public static final int LANDSCAPE = 0;
+ 
+ /**
+   * A constant for a portrait page orientation.  Used by
+   * <code>getOrientation</code> and <code>setOrientation</code>.
+   */
+ public static final int PORTRAIT = 1;
+ 
+ /**
+   * A constant for a reversed landscaped page orientation.  This is
+   * the orientation used by Macintosh's for landscape.  The origin is
+   * in the upper right hand corner instead of the upper left.  The
+   * X and Y axes are reversed. Used by <code>getOrientation</code> and 
+   * <code>setOrientation</code>.
+   */
+ public static final int REVERSE_LANDSCAPE = 2;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ // The page orientation
+ private int orientation;
+ 
+ // The paper type
+ private Paper paper;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructors
+  */
+ 
+ /**
+   * This method creates a default page layout, which will be in portrait
+   * format.
+   */
+ public
+ PageFormat()
+ {
+   this.paper = new Paper();
+   this.orientation = PORTRAIT;
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * This method returns the width of the page, in 1/72nd's of an inch.  The
+   * "width" measured depends on orientation.
+   *
+   * @return The width of the page.
+   */
+ public double
+ getWidth()
+ {
+   return(paper.getWidth());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the height of the page, in 1/72nd's of an inch.
+   * The "height" measured depends on the orientation.
+   *
+   * @return The height of the page.
+   */
+ public double
+ getHeight()
+ {
+   return(paper.getHeight());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the X coordinate value of the upper leftmost
+   * drawable area of the paper.
+   *
+   * @return The upper leftmost imageable X coordinate.
+   */
+ public double
+ getImageableX()
+ {
+   return(paper.getImageableX());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the Y coordinate value of the upper leftmost
+   * drawable area of the paper.
+   *
+   * @return The upper leftmost imageable Y coordinate.
+   */
+ public double
+ getImageableY()
+ {
+   return(paper.getImageableY());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the imageable width of the paper, in 1/72nd's of
+   * an inch.
+   *
+   * @return The imageable width of the paper.
+   */
+ public double
+ getImageableWidth()
+ {
+   return(paper.getImageableWidth());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the imageable height of the paper, in 1/72nd's of
+   * an inch.
+   *
+   * @return The imageable height of the paper.
+   */
+ public double getImageableHeight()
+ {
+   return(paper.getImageableHeight());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns a copy of the <code>paper</code> object being used for this 
+   * page format.
+   *
+   * @return A copy of the <code>Paper</code> object for this format.
+   */
+ public Paper
+ getPaper()
+ {
+   return((Paper)paper.clone());
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Sets the <code>Paper</code> object to be used by this page format.
+   *
+   * @param paper The new <code>Paper</code> object for this page format.
+   */
+ public void
+ setPaper(Paper paper)
+ {
+   this.paper = paper;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the current page orientation.  The value returned
+   * will be one of the page orientation constants from this class.
+   *
+   * @return The current page orientation.
+   */
+ public int
+ getOrientation()
+ {
+   return(orientation);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method sets the page orientation for this format to the
+   * specified value.  It must be one of the page orientation constants
+   * from this class or an exception will be thrown.
+   *
+   * @param orientation The new page orientation.
+   *
+   * @exception IllegalArgumentException If the specified page orientation
+   * value is not one of the constants from this class.
+   */
+ public void
+ setOrientation(int orientation) throws IllegalArgumentException
+ {
+   if ((orientation != PORTRAIT) &&
+       (orientation != LANDSCAPE) &&
+       (orientation != REVERSE_LANDSCAPE))
+     throw new IllegalArgumentException("Bad page orientation value: " +
+                                        orientation);
+ 
+   this.orientation = orientation;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns a matrix used for transforming user space
+   * coordinates to page coordinates.  The value returned will be six
+   * doubles as described in <code>java.awt.geom.AffineTransform</code>.
+   *
+   * @return The transformation matrix for this page format.
+   */
+ public double[]
+ getMatrix()
+ {
+   throw new RuntimeException("Not implemented since I don't know what to do");
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns a copy of this object.
+   *
+   * @return A copy of this object.
+   */
+ public Object
+ clone()
+ {
+   try
+     {
+       return(super.clone());
+     } 
+   catch(CloneNotSupportedException e)
+     {
+       return(null);
+     }
+ }
+ 
+ } // class PageFormat
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/Pageable.java gcc-4.1.0/libjava/classpath/java/awt/print/Pageable.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/Pageable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/Pageable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* Pageable.java -- Pages to be printed
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.print;
+ 
+ /**
+   * This interface represents pages that are to be printed.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public interface Pageable
+ {
+ 
+ /*
+  * Static Variables
+  */
+ 
+ /**
+   * This constant is returned when <code>getNumberOfPages()</code>
+   * cannot determine the number of pages available for printing.
+   */
+ int UNKNOWN_NUMBER_OF_PAGES = -1;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Methods
+  */
+ 
+ /**
+   * This method returns the number of pages this object contains, or
+   * <code>UNKNOWN_NUMBER_OF_PAGES</code> if it cannot determine the number
+   * of pages to be printed.
+   *
+   * @return The number of pages to be printed, or 
+   * <code>UNKNOWN_NUMBER_OF_PAGES</code> if this is unknown.
+   */
+ int
+ getNumberOfPages();
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the <code>PageFormat</code> instance for the
+   * specified page.  Page numbers start at zero.  An exception is thrown if 
+   * the requested page does not exist.
+   *
+   * @param pageIndex The index of the page to return the 
+   * <code>PageFormat</code> for.
+   *
+   * @return The <code>PageFormat</code> for the requested page.
+   *
+   * @exception IndexOutOfBoundsException If the requested page number does
+   * not exist.
+   */
+ PageFormat
+ getPageFormat(int pageIndex) throws IndexOutOfBoundsException;
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the <code>Printable</code> instance for the
+   * specified page.  Page numbers start at zero.  An exception is thrown if 
+   * the requested page does not exist.
+   *
+   * @param pageIndex The index of the page to return the 
+   * <code>Printable</code> for.
+   *
+   * @return The <code>Printable</code> for the requested page.
+   *
+   * @exception IndexOutOfBoundsException If the requested page number does
+   * not exist.
+   */
+ Printable
+ getPrintable(int pageIndex) throws IndexOutOfBoundsException;
+ 
+ } // interface Pageable
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/Paper.java gcc-4.1.0/libjava/classpath/java/awt/print/Paper.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/Paper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/Paper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,236 ----
+ /* Paper.java -- Information about a paper type.
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.print;
+ 
+ /**
+   * This class describes a particular type of paper.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class Paper implements Cloneable
+ {
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ // Height of the paper
+ private double height;
+ 
+ // Width of the paper
+ private double width;
+ 
+ // Upper left imageable X coordinate
+ private double imageableX;
+ 
+ // Upper left imageable Y coordinate
+ private double imageableY;
+ 
+ // Imageable width of the page
+ private double imageableWidth;
+ 
+ // Imageable height of the page
+ private double imageableHeight;
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Constructor
+  */
+ 
+ /**
+   * This method creates a letter sized paper with one inch margins
+   */
+ public
+ Paper()
+ {
+   width = 8.5 * 72;
+   height = 11 * 72;
+   imageableX = 72;
+   imageableY = 72;
+   imageableWidth = width - (2 * 72);
+   imageableHeight = height - (2 * 72);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the height of the paper in 1/72nds of an inch.
+   *
+   * @return The height of the paper in 1/72nds of an inch.
+   */
+ public double
+ getHeight()
+ {
+   return(height);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the width of the paper in 1/72nds of an inch.
+   *
+   * @return The width of the paper in 1/72nds of an inch.
+   */
+ public double
+ getWidth()
+ {
+   return(width);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the X coordinate of the upper left hand corner
+   * of the imageable area of the paper.
+   *
+   * @return The X coordinate of the upper left hand corner of the imageable
+   * area of the paper.
+   */
+ public double
+ getImageableX()
+ {
+   return(imageableX);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns the Y coordinate of the upper left hand corner
+   * of the imageable area of the paper.
+   *
+   * @return The Y coordinate of the upper left hand corner of the imageable
+   * area of the paper.
+   */
+ public double
+ getImageableY()
+ {
+   return(imageableY);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the width of the imageable area of the paper.
+   *
+   * @return The width of the imageable area of the paper.
+   */
+ public double
+ getImageableWidth()
+ {
+   return(imageableWidth);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Returns the height of the imageable area of the paper.
+   *
+   * @return The height of the imageable area of the paper.
+   */
+ public double
+ getImageableHeight()
+ {
+   return(imageableHeight);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method sets the size of the paper to the specified width and
+   * height, which are specified in 1/72nds of an inch.
+   *
+   * @param width The width of the paper in 1/72nds of an inch.
+   * @param height The height of the paper in 1/72nds of an inch.
+   */
+ public void
+ setSize(double width, double height)
+ {
+   this.width = width;
+   this.height = height;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method sets the imageable area of the paper by specifying the
+   * coordinates of the upper left hand corner of that area, and its
+   * length and height.  All values are in 1/72nds of an inch.
+   *
+   * @param imageableX The X coordinate of the upper left hand corner of
+   * the imageable area, in 1/72nds of an inch.
+   * @param imageableY The Y coordinate of the upper left hand corner of
+   * the imageable area, in 1/72nds of an inch.
+   * @param imageableWidth The width of the imageable area of the paper, 
+   * in 1/72nds of an inch.
+   * @param imageableHeight The heigth of the imageable area of the paper, 
+   * in 1/72nds of an inch.
+   */
+ public void
+ setImageableArea(double imageableX, double imageableY, 
+                  double imageableWidth, double imageableHeight)
+ {
+   this.imageableX = imageableX;
+   this.imageableY = imageableY;
+   this.imageableWidth = imageableWidth;
+   this.imageableHeight = imageableHeight;
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method creates a copy of this object.
+   *
+   * @return A copy of this object.
+   */
+ public Object
+ clone()
+ {
+   try
+     {
+       return(super.clone());
+     }
+   catch(CloneNotSupportedException e)
+     {
+       return(null);
+     }
+ }
+ 
+ } // class Paper
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/Printable.java gcc-4.1.0/libjava/classpath/java/awt/print/Printable.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/Printable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/Printable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,80 ----
+ /* Printable.java -- Renders a page to the print device
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.awt.print;
+ 
+ import java.awt.Graphics;
+ 
+ 
+ /**
+  * This interface provides a mechanism for the actual printing of pages to the
+  * printer.  The object implementing this interface performs the page
+  * rendering.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Printable
+ {
+   /**
+    * This value is returned by the <code>print()</code> method to indicate
+    * that the requested page exists and has been printed.
+    */
+   int PAGE_EXISTS = 0;
+ 
+   /**
+    * This value is returned by the <code>print()</code> method to indicate
+    * that the requested page number does not exist.
+    */
+   int NO_SUCH_PAGE = 1;
+ 
+   /**
+    * This method prints the specified page to the specified graphics
+    * context in the specified format.  The pages are numbered starting
+    * from zero.
+    *
+    * @param graphics The graphics context to render the pages on.
+    * @param format The format in which to print the page.
+    * @param page_number The page number to print, where numbers start at zero.
+    *
+    * @return <code>PAGE_EXISTS</code> if the requested page exists and was
+    * successfully printed, <code>NO_SUCH_PAGE</code> otherwise.
+    *
+    * @exception PrinterException If an error occurs during printing.
+    */
+   int print(Graphics graphics, PageFormat format, int page_number)
+     throws PrinterException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/PrinterAbortException.java gcc-4.1.0/libjava/classpath/java/awt/print/PrinterAbortException.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/PrinterAbortException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/PrinterAbortException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* PrinterAbortException.java -- Indicates the print job was aborted
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.print;
+ 
+ /**
+  * This exception is thrown when the print job is aborted, either by the
+  * user or by the application.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class PrinterAbortException extends PrinterException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 4725169026278854136L;
+ 
+   /**
+    * Create a new instance with no detailed error message.
+    */
+   public PrinterAbortException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public PrinterAbortException(String message)
+   {
+     super(message);
+   }
+ } // class PrinterAbortException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/PrinterException.java gcc-4.1.0/libjava/classpath/java/awt/print/PrinterException.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/PrinterException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/PrinterException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* PrinterException.java -- generic problem in the printing subsystem
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.print;
+ 
+ /**
+  * This is the generic toplevel exception for printing errors.  Subclasses
+  * provide more detailed descriptions of the problem.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class PrinterException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -3757589981158265819L;
+ 
+   /**
+    * Create a new instance with no detailed error message.
+    */
+   public PrinterException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public PrinterException(String message)
+   {
+     super(message);
+   }
+ } // class PrinterException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/PrinterGraphics.java gcc-4.1.0/libjava/classpath/java/awt/print/PrinterGraphics.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/PrinterGraphics.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/PrinterGraphics.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* PrinterGraphics.java -- Hook to return print job controller.
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.print;
+ 
+ /**
+   * This interface is implemented by the <code>Graphics</code> instance
+   * that is used for rendering pages.  It provides a hook to return the
+   * object that is controlling the print job.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public interface PrinterGraphics
+ {
+ 
+ /**
+   * This method returns the instance of <code>PrinterJob</code> that is
+   * controlling this print job.
+   *
+   * @return The <code>PrinterJob</code> that is controlling this print job.
+   */
+ PrinterJob
+ getPrinterJob();
+ 
+ } // interface PrinterGraphics
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/PrinterIOException.java gcc-4.1.0/libjava/classpath/java/awt/print/PrinterIOException.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/PrinterIOException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/PrinterIOException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* PrinterIOException.java -- The print job encountered an I/O error
+    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.print;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * This exception is thrown when the print job encounters an I/O problem
+  * of some kind.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @status updated to 1.4
+  */
+ public class PrinterIOException extends PrinterException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 5850870712125932846L;
+ 
+   /**
+    * The exception that caused this (duplicates Throwable).
+    *
+    * @serial the I/O exception that terminated the job
+   */
+   private final IOException mException;
+ 
+   /**
+    * Initializes a new instance with the given cause.
+    *
+    * @param mException the cause
+    */
+   public PrinterIOException(IOException mException)
+   {
+     super(mException == null ? null : mException.toString());
+     initCause(mException);
+     this.mException = mException;  
+   }
+ 
+   /**
+    * Gets the underlying <code>IOException</code> that caused this exception.
+    * This legacy method has been replaced by {@link #getCause()}.
+    *
+    * @return the cause
+   */
+   public IOException getIOException()
+   {
+     return mException;
+   }
+ 
+   /**
+    * Gets the cause.
+    *
+    * @return the cause
+    */
+   public Throwable getCause()
+   {
+     return mException;
+   }
+ } // class PrinterIOException
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/PrinterJob.java gcc-4.1.0/libjava/classpath/java/awt/print/PrinterJob.java
*** gcc-4.0.2/libjava/classpath/java/awt/print/PrinterJob.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/PrinterJob.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,302 ----
+ /* PrinterJob.java -- This job is the printer control class
+    Copyright (C) 1999, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.awt.print;
+ 
+ import java.awt.HeadlessException;
+ 
+ import javax.print.PrintService;
+ import javax.print.attribute.PrintRequestAttributeSet;
+ 
+ /**
+  * This class controls printing.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public abstract class PrinterJob
+ {
+   // The print service associated with this job
+   private PrintService printer = null;
+ 
+   /**
+    * Creates a new print job.
+    *
+    * @return A <code>PrinterJob</code> object for the newly created print job.
+    */
+   public static PrinterJob getPrinterJob()
+   {
+     // FIXME: Need to fix this to load a default implementation instance.
+     return null;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>PrinterJob</code>. 
+    */
+   public PrinterJob()
+   {
+   }
+ 
+   /**
+    * Returns the number of copies to be printed.
+    *
+    * @return The number of copies to be printed.
+    */
+   public abstract int getCopies();
+ 
+   /**
+    * Sets the number of copies to be printed.
+    *
+    * @param copies The number of copies to be printed.
+    */
+   public abstract void setCopies(int copies);
+ 
+   /**
+    * Returns the name of the print job.
+    *
+    * @return The name of the print job.
+    */
+   public abstract String getJobName();
+ 
+   /**
+    * Sets the name of the print job.
+    *
+    * @param job_name The name of the print job.
+    */
+   public abstract void setJobName(String job_name);
+ 
+   /**
+    * Returns the printing user name.
+    *
+    * @return The printing username.
+    */
+   public abstract String getUserName();
+ 
+   /**
+    * Cancels an in progress print job.
+    */
+   public abstract void cancel();
+ 
+   /**
+    * Tests whether or not this job has been cancelled.
+    *
+    * @return <code>true</code> if this job has been cancelled, <code>false</code>
+    * otherwise.
+    */
+   public abstract boolean isCancelled();
+ 
+   /**
+    * Returns an instance of the default page which will have the default
+    * paper and orientation.
+    *
+    * @return A default instance of <code>PageFormat</code>.
+    */
+   public PageFormat defaultPage()
+   {
+     return new PageFormat();
+   }
+ 
+   /**
+    * Clones the specified <code>PageFormat</code> object then alters the
+    * clone so that it represents the default page format.
+    *
+    * @param page_format The <code>PageFormat</code> to clone.
+    *
+    * @return A new default page format.
+    */
+   public abstract PageFormat defaultPage(PageFormat page_format);
+ 
+   /**
+    * Displays a dialog box to the user which allows the page format
+    * attributes to be modified.
+    *
+    * @param page_format The <code>PageFormat</code> object to modify.
+    *
+    * @return The modified <code>PageFormat</code>.
+    */
+   public abstract PageFormat pageDialog(PageFormat page_format)
+     throws HeadlessException;
+ 
+   /**
+    * @since 1.4
+    */
+   public PageFormat pageDialog(PrintRequestAttributeSet attributes)
+     throws HeadlessException
+   {
+     // FIXME: Implement this for real.
+     return pageDialog((PageFormat) null);
+   }
+   
+   /**
+    * Prints the pages.
+    */
+   public abstract void print () throws PrinterException;
+ 
+   /**
+    * Prints the page with given attributes.
+    */
+   public void print (PrintRequestAttributeSet attributes)
+     throws PrinterException
+   {
+     print ();
+   }
+ 
+   /**
+    * Displays a dialog box to the user which allows the print job
+    * attributes to be modified.
+    *
+    * @return <code>false</code> if the user cancels the dialog box,
+    * <code>true</code> otherwise.
+    */
+   public abstract boolean printDialog()
+     throws HeadlessException;
+ 
+   /**
+    * Displays a dialog box to the user which allows the print job
+    * attributes to be modified.
+    *
+    * @return <code>false</code> if the user cancels the dialog box,
+    * <code>true</code> otherwise.
+    */
+   public boolean printDialog(PrintRequestAttributeSet attributes)
+     throws HeadlessException
+   {
+     // FIXME: Implement this for real.
+     return printDialog();
+   }
+ 
+   /**
+    * This sets the pages that are to be printed.
+    *
+    * @param pageable The pages to be printed, which may not be <code>null</code>.
+    */
+   public abstract void setPageable(Pageable pageable);
+ 
+   /**
+    * Sets this specified <code>Printable</code> as the one to use for
+    * rendering the pages on the print device.
+    *
+    * @param printable The <code>Printable</code> for the print job.
+    */
+   public abstract void setPrintable(Printable printable);
+ 
+   /**
+    * Sets the <code>Printable</code> and the page format for the pages
+    * to be printed.
+    *
+    * @param printable The <code>Printable</code> for the print job.
+    * @param page_format The <code>PageFormat</code> for the print job.
+    */
+   public abstract void setPrintable(Printable printable, PageFormat page_format);
+ 
+   /**
+    * Makes any alterations to the specified <code>PageFormat</code>
+    * necessary to make it work with the current printer.  The alterations
+    * are made to a clone of the input object, which is then returned.
+    *
+    * @param page_format The <code>PageFormat</code> to validate.
+    *
+    * @return The validated <code>PageFormat</code>.
+    */
+   public abstract PageFormat validatePage(PageFormat page_format);
+ 
+   /**
+    * Find and return 2D image print services.
+    * 
+    * This is the same as calling PrintServiceLookup.lookupPrintServices()
+    * with Pageable service-specified DocFlavor.
+    * @return Array of PrintService objects, could be empty.
+    * @since 1.4
+    */
+   public static PrintService[] lookupPrintServices()
+   {
+     return new PrintService[0];
+     // FIXME:
+     // Enable this when javax.print has this implemented.
+ //    return PrintServiceLookup.lookupPrintServices(
+ //          new DocFlavor("application/x-java-jvm-local-objectref",
+ //                        "java.awt.print.Pageable"),
+ //          null);
+   }
+ 
+   /**
+    * Find and return 2D image stream print services.
+    * 
+    * This is the same as calling
+    * StreamPrintServiceFactory.lookupStreamPrintServices()
+    * with Pageable service-specified DocFlavor.
+    * @param mimeType The output format mime type, or null for any type.
+    * @return Array of stream print services, could be empty.
+    * @since 1.4
+    */
+   	// FIXME:
+   	// Enable when javax.print has StreamPrintServiceFactory 
+ //  public static StreamPrintServiceFactory[] lookupStreamPrintServices(String mimeType)
+ //  {
+ //    return StreamPrintServiceFactory.lookupStreamServiceFactories(
+ //      new DocFlavor("application/x-java-jvm-local-objectref",
+ //      "java.awt.print.Pageable"),
+ //    	mimeType);
+ //  }
+ 
+   /**
+    * Return the printer for this job.  If print services aren't supported by
+    * the subclass, returns null.
+    * 
+    * @return The associated PrintService.
+    * @since 1.4
+    */
+   public PrintService getPrintService()
+   {
+     return null;
+   }
+ 
+   /**
+    * Change the printer for this print job to service.  Subclasses that
+    * support setting the print service override this method.  Throws
+    * PrinterException when the class doesn't support setting the printer,
+    * the service doesn't support Pageable or Printable interfaces for 2D
+    * print output.
+    * @param service The new printer to use.
+    * @throws PrinterException if service is not valid.
+    */
+   public void setPrintService(PrintService service)
+     throws PrinterException
+   {
+     throw new PrinterException();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/awt/print/package.html gcc-4.1.0/libjava/classpath/java/awt/print/package.html
*** gcc-4.0.2/libjava/classpath/java/awt/print/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/awt/print/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.awt.print package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.awt.print</title></head>
+ 
+ <body>
+ <p>Classes for printer jobs, pages, paper sizes, graphics and formats.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/AppletInitializer.java gcc-4.1.0/libjava/classpath/java/beans/AppletInitializer.java
*** gcc-4.0.2/libjava/classpath/java/beans/AppletInitializer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/AppletInitializer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* java.beans.AppletInitializer
+    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.beans;
+ 
+ import java.applet.Applet;
+ import java.beans.beancontext.BeanContext;
+ 
+ 
+ /** This interface is a mechanism for the initialization of a Java
+  * Bean that is also an Applet.  It is used by
+  * <code>Beans.instantiate()</code>.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @since 1.2
+  */
+ public interface AppletInitializer
+ {
+   /** Activate the applet.  */
+   void activate (Applet applet);
+ 
+   /** This method will be called by <code>Beans.instantiate()</code>
+    * to associated the new Applet with its AppletContext, AppletStub,
+    * and Container.
+    */
+   void initialize (Applet applet, BeanContext context);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/BeanDescriptor.java gcc-4.1.0/libjava/classpath/java/beans/BeanDescriptor.java
*** gcc-4.0.2/libjava/classpath/java/beans/BeanDescriptor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/BeanDescriptor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* java.beans.BeanDescriptor
+    Copyright (C) 1998, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  ** BeanDescriptor describes general information about a Bean, plus
+  ** stores the Bean's Class and it's customizer's Class.<P>
+  **
+  ** @author John Keiser
+  ** @since JDK1.1
+  ** @version 1.1.0, 31 May 1998
+  **/
+ 
+ public class BeanDescriptor extends FeatureDescriptor {
+ 	Class beanClass;
+ 	Class customizerClass;
+ 
+ 	/** Create a new BeanDescriptor with the given beanClass and
+ 	 ** no customizer class.
+ 	 ** @param beanClass the class of the Bean.
+ 	 **/
+ 	public BeanDescriptor(Class beanClass) {
+ 		this(beanClass,null);
+ 	}
+ 
+ 	/** Create a new BeanDescriptor with the given bean class and
+ 	 ** customizer class.
+ 	 ** @param beanClass the class of the Bean.
+ 	 ** @param customizerClass the class of the Bean's Customizer.
+ 	 **/
+ 	public BeanDescriptor(Class beanClass, Class customizerClass) {
+ 		this.beanClass = beanClass;
+ 		this.customizerClass = customizerClass;
+ 
+ 		// Set the FeatureDescriptor programmatic name.
+ 		String name = beanClass.getName();
+ 		int lastInd = name.lastIndexOf('.');
+ 		if (lastInd != -1)
+ 		  name = name.substring(lastInd + 1);
+ 
+ 		setName(name);
+ 	}
+ 
+ 	/** Get the Bean's class. **/
+ 	public Class getBeanClass() {
+ 		return beanClass;
+ 	}
+ 
+ 	/** Get the Bean's customizer's class. **/
+ 	public Class getCustomizerClass() {
+ 		return customizerClass;
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/BeanInfo.java gcc-4.1.0/libjava/classpath/java/beans/BeanInfo.java
*** gcc-4.0.2/libjava/classpath/java/beans/BeanInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/BeanInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,181 ----
+ /* java.beans.BeanInfo
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  ** BeanInfo can be implemented in order to provide explicit information to the Introspector.
+  **
+  ** When you write a BeanInfo class, you implement this interface
+  ** and provide explicit information by returning a non-null
+  ** value from the appropriate method.  If you wish the
+  ** Introspector to determine certain information in the normal
+  ** way, just return null (or in the case of int methods, return
+  ** -1).  There is a class called SimpleBeanInfo which returns
+  ** null from all methods, which you may extend and only
+  ** override the methods you wish to override.<P>
+  **
+  ** When you have written the class, give it the name
+  ** <CODE>&lt;Bean Class Name&gt;BeanInfo</CODE> and place it in
+  ** the same package as the Bean, or in the bean info search path
+  ** (see Introspector for information on search paths).<P>
+  **
+  ** A simple note about the way the Introspector interacts with
+  ** BeanInfo.  Introspectors look at a Bean class and determine
+  ** if there is a BeanInfo class with it.  If there is not a
+  ** BeanInfo class, it will behave as if the BeanInfo class
+  ** provided was a SimpleBeanInfo class (i.e. it will determine
+  ** all information automatically).<P>If there is a BeanInfo
+  ** class, then any methods that do *not* return null are
+  ** regarded as providing definitive information about the class
+  ** and all of its superclasses for those information types.
+  ** Even if a parent BeanInfo class explicitly returns that
+  ** information, it will not be used.
+  **
+  ** @author John Keiser
+  ** @since JDK1.1
+  ** @version 1.1.0, 28 Jul 1998
+  **/
+ 
+ public interface BeanInfo {
+ 	/** Use this as a parameter for the getIcon() command to retrieve a certain type of icon. **/
+ 	int ICON_COLOR_16x16 = 1;
+ 	/** Use this as a parameter for the getIcon() command to retrieve a certain type of icon. **/
+ 	int ICON_COLOR_32x32 = 2;
+ 	/** Use this as a parameter for the getIcon() command to retrieve a certain type of icon. **/
+ 	int ICON_MONO_16x16 = 3;
+ 	/** Use this as a parameter for the getIcon() command to retrieve a certain type of icon. **/
+ 	int ICON_MONO_32x32 = 4;
+ 
+ 	/** Get the general description of this Bean type.
+ 	 ** @return the BeanDescriptor for the Bean, or null if
+ 	 **         the BeanDescriptor should be obtained by
+ 	 **         Introspection.
+ 	 **/
+ 	BeanDescriptor getBeanDescriptor();
+ 
+ 	/** Get the events this Bean type fires.
+ 	 ** @return the EventDescriptors representing events this
+ 	 **         Bean fires.  Returns <CODE>null</CODE> if the
+ 	 **         events are to be acquired by Introspection.
+ 	 **/
+ 	EventSetDescriptor[] getEventSetDescriptors();
+ 
+ 	/** Get the "default" event, basically the one a RAD tool
+ 	 ** user is most likely to select.
+ 	 ** @return the index into the getEventSetDescriptors()
+ 	 **         that the user is most likely to use.  Returns
+ 	 **         <CODE>-1</CODE> if there is no default event.
+ 	 **/
+ 	int getDefaultEventIndex();
+ 
+ 	/** Get the properties (get/set method pairs) this Bean
+ 	 ** type supports.
+ 	 ** @return the PropertyDescriptors representing the
+ 	 **         properties this Bean type supports.
+ 	 **         Returns <CODE>null</CODE> if the properties
+ 	 **         are to be obtained by Introspection.
+ 	 **/
+ 	PropertyDescriptor[] getPropertyDescriptors();
+ 
+ 	/** Get the "default" property, basically the one a RAD
+ 	 ** tool user is most likely to select.
+ 	 ** @return the index into the getPropertyDescriptors()
+ 	 **         that the user is most likely to use.  Returns
+ 	 **         <CODE>-1</CODE> if there is no default event.
+ 	 **/
+ 	int getDefaultPropertyIndex();
+ 
+ 	/** Get the methods this Bean type supports.
+ 	 ** @return the MethodDescriptors representing the
+ 	 **         methods this Bean type supports.  Returns
+ 	 **         <CODE>null</CODE> if the methods are to be
+ 	 **         obtained by Introspection.
+ 	 **/
+ 	MethodDescriptor[] getMethodDescriptors();
+ 
+ 	/** Get additional BeanInfos representing this Bean.
+ 	 ** In this version of JavaBeans, this method is used so
+ 	 ** that space and time can be saved by reading a BeanInfo
+ 	 ** for each class in the hierarchy (super, super(super),
+ 	 ** and so on).<P>
+ 	 **
+ 	 ** The order of precedence when two pieces of BeanInfo
+ 	 ** conflict (such as two PropertyDescriptors that have
+ 	 ** the same name), in order from highest precedence to
+ 	 ** lowest, is:
+ 	 ** <OL>
+ 	 ** <LI>This BeanInfo object.</LI>
+ 	 ** <LI><CODE>getAdditionalBeanInfo()[getAdditionalBeanInfo().length]</CODE></LI>
+ 	 ** <LI> ... </LI>
+ 	 ** <LI><CODE>getAdditionalBeanInfo()[1]</CODE></LI>
+ 	 ** <LI><CODE>getAdditionalBeanInfo()[0]</CODE></LI>
+ 	 ** </OL><P>
+ 	 **
+ 	 ** <STRONG>Spec Note:</STRONG> It is possible that
+ 	 ** returning <CODE>null</CODE> from this method could
+ 	 ** stop Introspection in its tracks, but it is unclear
+ 	 ** from the spec whether this is the case.
+ 	 **
+ 	 ** @return additional BeanInfos representing this Bean.
+ 	 **         <CODE>null</CODE> may be returned (see Spec
+ 	 **         Note, above).
+ 	 **/
+ 	BeanInfo[] getAdditionalBeanInfo();
+ 
+ 	/** Get a visual icon for this Bean.
+ 	 ** A Bean does not have to support icons, and if it does
+ 	 ** support icons, it does not have to support every single
+ 	 ** type.  Sun recommends that if you only support one
+ 	 ** type, you support 16x16 color.  Sun also notes that you
+ 	 ** should try to use a type (like GIF) that allows for
+ 	 ** transparent pixels, so that the background of the RAD
+ 	 ** tool can show through.<P>
+ 	 **
+ 	 ** <STRONG>Spec Note:</STRONG> If you do not support the
+ 	 ** type of icon that is being asked for, but you do
+ 	 ** support another type, it is unclear whether you should
+ 	 ** return the other type or not.  I would presume not.
+ 	 **
+ 	 ** @param iconType the type of icon to get (see the
+ 	 **        ICON_* constants in this class).
+ 	 ** @return the icon, or null if that type of icon is
+ 	 **         unsupported by this Bean.
+ 	 **/
+ 	java.awt.Image getIcon(int iconType);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/Beans.java gcc-4.1.0/libjava/classpath/java/beans/Beans.java
*** gcc-4.0.2/libjava/classpath/java/beans/Beans.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/Beans.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,368 ----
+ /* java.beans.Beans
+    Copyright (C) 1998, 1999, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.beans;
+ 
+ import gnu.java.beans.DummyAppletStub;
+ import gnu.java.io.ClassLoaderObjectInputStream;
+ 
+ import java.applet.Applet;
+ import java.beans.beancontext.BeanContext;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.net.URL;
+ 
+ /**
+  * <code>Beans</code> provides some helper methods that allow the basic
+  * operations of Bean-ness.
+  *
+  * @author John Keiser
+  * @author Robert Schuster
+  * 
+  * @since 1.1
+  * @status updated to 1.4
+  *
+  */
+ public class Beans
+ {
+   static boolean designTime = false;
+   static boolean guiAvailable = true;
+ 
+   /**
+    * Once again, we have a java.beans class with only
+    * static methods that can be instantiated.  When
+    * will the madness end? :)
+    */
+   public Beans()
+   {
+     // Does intentionally nothing here.
+   }
+ 
+    /** Creates a bean.
+     * <p>This is a convenience method that calls <code>instantiate(cl, beanName, null, null)</code>.</p>
+     * 
+     * @see instantiate(ClassLoader, String, BeanContext, AppletInitializer)
+     * @param cl ClassLoader to be used or <code>null</code> for the system classloader.
+     * @param beanName Name of a serialized bean or class name.
+     * @return A newly created bean.
+     * @throws IOException If access of an IO resource failed.
+     * @throws ClassNotFoundException If the class name is not known or does not lead to a proper bean class. 
+     */
+     public static Object instantiate(ClassLoader cl, String beanName)
+         throws IOException, ClassNotFoundException
+     {
+         return instantiate(cl, beanName, null, null);
+     }
+ 
+    /** Creates a bean.
+     * 
+     * <p>This is a convenience method that calls <code>instantiate(cl, beanName, beanContext, null)</code>.</p>
+     * 
+     * @see instantiate(ClassLoader, String, BeanContext, AppletInitializer)
+     * @param cl ClassLoader to be used or <code>null</code> for the system classloader.
+     * @param beanName Name of a serialized bean or class name.
+     * @param beanContext Context to which the newly created Bean should be added.
+     * @return A newly created bean.
+     * @throws IOException If access of an IO resource failed.
+     * @throws ClassNotFoundException If the class name is not known or does not lead to a proper bean class. 
+     */
+     public static Object instantiate(
+         ClassLoader cl,
+         String beanName,
+         BeanContext beanContext)
+         throws IOException, ClassNotFoundException
+     {
+         return instantiate(cl, beanName, beanContext, null);
+     }
+ 
+    /** Instantiates a bean according to Beans 1.0.
+     * 
+     * <p>In Beans 1.0 the instantiation scheme is as follows:</p>
+     * <p>The name should be dot-separated (e.g "place.for.beans.myBean") and indicate either a
+     * serialized object or a class name. In the first case all dots in the name are replaced with
+     * slashes ('/') and ".ser" is appended ("place.for.beans.myBean" becomes "place/for/beans/myBean.ser").
+     * The bean is then loaded as an application or system resource depending on whether a
+     * <code>ClassLoader</code> was provided.</p>
+     * 
+     * <p>If no such resource exists or if it contains no bean the name is interpreted as a class name of
+     * which an instance is then created.</p>
+     * 
+     * <p>If a <code>BeanContext</code> instance is available the created bean is added to it.</p>
+     * 
+     * <p>If the created Bean is an <code>Applet</code> or subclass and an <code>AppletInitializer</code>
+     * instance is available the applet is initialized and afterwards activated using the initializer. Additionally
+     * every instantiated <code>Applet</code> bean is initialized using the {@link Applet.init} method.
+     * Furthermore every applet gets a default <code>AppletStub</code>. The <code>Applet</code>'s
+     * document base is the location of the ".ser" file if it was deserialized or the location of its class
+     * file if it was instantiated.</p>
+     * 
+     * <p>A <code>ClassNotFoundException</code> is not only thrown when a class name was unknown
+     * but even when the class has public no-argument constructor
+     * (<code>IllegalAccessException</code> is wrapped) or an exception is thrown while
+     * invoking such a constructor (causing exception is wrapped).</p>
+     * 
+     * @param cl ClassLoader to be used or <code>null</code> for the system classloader.
+     * @param beanName Name of a serialized bean or class name.
+     * @param beanContext Context to which the newly created Bean should be added.
+     * @param initializer The AppletInitializer which is used for initializing <code>Applet</code> beans.
+     * @return A newly created bean.
+     * @throws IOException If access of an IO resource failed.
+     * @throws ClassNotFoundException If the class name is not known or does not lead to a proper bean class. 
+     */
+    public static Object instantiate(
+         ClassLoader cl,
+         String beanName,
+         BeanContext beanContext,
+         AppletInitializer initializer)
+         throws IOException, ClassNotFoundException
+    {
+         Object bean = null;
+         URL beanLocation = null;
+         URL classLocation = null;
+ 
+         // Converts bean name into a resource name (eg. "a.b.c" -> "a/b/c").  
+         String resourceName = beanName.replace('.', '/');
+ 
+         /* Tries to get an input stream of the Bean, reading it as a system resource
+          * if no ClassLoader is present or as an application resource if a classloader
+          * is given. 
+          */
+         beanLocation =
+             (cl == null)
+                 ? ClassLoader.getSystemResource(resourceName + ".ser")
+                 : cl.getResource(resourceName + ".ser");
+ 
+         // Reads the serialized Bean from the returned URL.
+         if (beanLocation != null)
+         {
+             // Deserializes the bean instance.
+             ObjectInputStream ois =
+                 (cl == null)
+                     ? new ObjectInputStream(beanLocation.openStream())
+                     : new ClassLoaderObjectInputStream(
+                         beanLocation.openStream(),
+                         cl);
+ 
+             bean = ois.readObject();
+ 
+             /* Implementation note: The result of ObjectInputStream.readObject()
+             * may have been null at this point (its a valid value to deserialize)
+             * and we explicitly want to try instantiation in such a case
+             * (this is important for compatibility).
+             */
+         }
+ 
+         // Instantiates the Bean using reflective instantiation if it has not been created yet.
+         if (bean == null)
+         {
+             // Makes sure that the deserialization was NOT done.
+             beanLocation = null;
+ 
+             Class beanClass;
+             if (cl == null)
+             {
+                 beanClass = Class.forName(beanName);
+                 classLocation =
+                     ClassLoader.getSystemResource(resourceName + ".class");
+             }
+             else
+             {
+                 beanClass = cl.loadClass(beanName);
+                 classLocation = cl.getResource(resourceName + ".class");
+             }
+ 
+             // Instantiates and optionally registers the new bean.
+             try
+             {
+                 bean = beanClass.newInstance();
+             }
+             catch(Exception e) {
+ 		/* Wraps all kinds of Exceptions in a ClassNotFoundException (this behavior
+ 		 * matches with official >= 1.5, this was different for <=1.4)
+ 		 */
+ 		throw new ClassNotFoundException(null, e);
+             }
+         }
+ 
+         /* Applet beans are treated in the following way:
+          * - all AppletS get a default AppletStub
+          * - all AppletS are initialized using the AppletInitializer instance (if it is available)
+          * - as every other Bean Applets are added to a BeanContext if one is available
+          * - each instantiated Applet is initialized using Applet.init() (this is not done for deserialized ones)
+          * - finally AppletS get activated using the AppletInitializerS activate-Method
+          * 
+          * The order of operations is important for compatibility.    
+          */
+         Applet applet = null;
+         if (bean instanceof Applet)
+         {
+             // Makes a second instanceof call unneccessary (instanceof is expensive).
+             applet = (Applet) bean;
+ 
+             /* The AppletStub's code and document base is set as follows:
+              * The code base is always the URL from where the class data originated
+              * (without the package name).
+              * If the Applet was deserialized the document base is the location of
+              * the serialized instance (usually the ".ser" file) otherwise its the URL
+              * from where the class data originated (usually the absolute directory
+              * location of the ".class" file).
+              */
+             applet.setStub(
+                 new DummyAppletStub(
+                     applet
+                         .getClass()
+                         .getProtectionDomain()
+                         .getCodeSource()
+                         .getLocation(),
+                     (beanLocation == null) ? classLocation : beanLocation));
+ 
+             // Runs the Applet's initialization using an AppletInitializer.
+             if (initializer != null)
+             {
+                 initializer.initialize(applet, beanContext);
+             }
+         }
+ 
+         // Adds the new bean to its BeanContext.
+         if (beanContext != null)
+         {
+             beanContext.add(bean);
+         }
+ 
+         if (applet != null)
+         {
+ 
+             // Initializes an instantiated (not deserialized) Applet using its own method.
+             if (beanLocation == null)
+             {
+                 applet.init();
+             }
+ 
+             // Runs the Applet's activation using an AppletInitializer.
+             if (initializer != null)
+             {
+                 initializer.activate(applet);
+             }
+         }
+ 
+         return bean;
+    }
+ 
+    /**
+     * Returns the Bean as a different class type.
+     * This should be used instead of casting to get a new
+     * type view of a Bean, because in the future there may
+     * be new types of Bean, even Beans spanning multiple
+     * Objects.
+     *
+     * @param bean the Bean to cast.
+     * @param newClass the Class to cast it to.
+     *
+     * @return the Bean as a new view, or if the operation
+     *         could not be performed, the Bean itself.
+     */
+    public static Object getInstanceOf(Object bean, Class newClass)
+    {
+         return bean;
+    }
+ 
+    /**
+     * Determines whether the Bean can be cast to a different
+     * class type.
+     * This should be used instead of instanceof to determine
+     * a Bean's castability, because in the future there may
+     * be new types of Bean, even Beans spanning multiple
+     * Objects.
+     *
+     * @param bean the Bean to cast.
+     * @param newClass the Class to cast it to.
+     *
+     * @return whether the Bean can be cast to the class type
+     *         in question.
+     */
+    public static boolean isInstanceOf(Object bean, Class newBeanClass)
+    {
+        return newBeanClass.isInstance(bean);
+    }
+ 
+    /**
+     * Returns whether the GUI is available to use.
+     * <p>Defaults to true.</p>
+     *
+     * @return whether the GUI is available to use.
+     */
+    public static boolean isGuiAvailable()
+    {
+        return guiAvailable;
+    }
+ 
+    /**
+     * Returns whether it is design time.  Design time means
+     * we are in a RAD tool.
+     * <p>Defaults to false.</p>
+     *
+     * @return whether it is design time.
+     */
+    public static boolean isDesignTime()
+    {
+        return designTime;
+    }
+ 
+    /**
+     * Sets whether the GUI is available to use.
+     * 
+     * @param guiAvailable whether the GUI is available to use.
+     */
+    public static void setGuiAvailable(boolean guiAvailable)
+        throws SecurityException
+    {
+         Beans.guiAvailable = guiAvailable;
+    }
+ 
+    /**
+     * Sets whether it is design time.  Design time means we
+     * are in a RAD tool.
+     *
+     * @param designTime whether it is design time.
+     */
+    public static void setDesignTime(boolean designTime)
+        throws SecurityException
+    {
+        Beans.designTime = designTime;
+    }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/Customizer.java gcc-4.1.0/libjava/classpath/java/beans/Customizer.java
*** gcc-4.0.2/libjava/classpath/java/beans/Customizer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/Customizer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,86 ----
+ /* java.beans.Customizer
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  ** You may explicitly provide a Customizer for your Bean
+  ** class, which allows you complete control of the editing
+  ** of the Bean.<P>
+  **
+  ** A Customizer is meant to be embedded in an RAD tool,
+  ** and thus must be a descendant of <CODE>java.awt.Component</CODE>.<P>
+  **
+  ** It must also have a constructor with no arguments.  This
+  ** is the constructor that will be called by the RAD tool to
+  ** instantiate the Customizer.<P>
+  **
+  ** Over its lifetime, an instance of a Customizer will only
+  ** customize one single Bean.  A new instance of the
+  ** Customizer will be instantiated to edit any other Beans.<P>
+  **
+  ** The Customizer is responsible for notifying its
+  ** PropertyChangeListeners of any changes that are made,
+  ** according to the rules of PropertyChangeListeners (i.e.
+  ** notify the clients <EM>after</EM> the property has
+  ** changed).
+  **
+  ** @author John Keiser
+  ** @since JDK1.1
+  ** @version 1.1.0, 29 Jul 1998
+  ** @see java.beans.BeanDescriptor.getCustomizerClass()
+  **/
+ 
+ public interface Customizer {
+ 	/** Set the object to Customize.  This will always be a
+ 	 ** Bean that had a BeanDescriptor indicating this
+ 	 ** Customizer.
+ 	 ** @param bean the Bean to customize.
+ 	 **/
+ 	void setObject(Object bean);
+ 
+ 	/** Add a PropertyChangeListener.
+ 	 ** @param l the PropertyChangeListener to add.
+ 	 **/
+ 	void addPropertyChangeListener(PropertyChangeListener l);
+ 
+ 	/** Remove a PropertyChangeListener.
+ 	 ** @param l the PropertyChangeListener to remove.
+ 	 **/
+ 	void removePropertyChangeListener(PropertyChangeListener l);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/DesignMode.java gcc-4.1.0/libjava/classpath/java/beans/DesignMode.java
*** gcc-4.0.2/libjava/classpath/java/beans/DesignMode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/DesignMode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,93 ----
+ /* java.beans.DesignMode
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  * <code>BeanContextChild</code> implementors implement this to get information about whether they are in a design time or runtime environment.
+  * The reason this is restricted to <code>BeanContextChild</code>ren is that
+  * only things in the <code>BeanContext</code> hierarchy are given this
+  * information in the first place.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  * @see java.beans.beancontext.BeanContextChild
+  */
+ 
+ public interface DesignMode {
+ 	/**
+ 	 * Use this name when firing <code>PropertyChangeEvent</code>s from your Bean.  
+ 	 * @fixme Check whether PROPERTYNAME is set to same value as Sun.
+ 	 */
+ 	String PROPERTYNAME = "designTime";
+ 
+ 	/**
+ 	 * The environment will call this method on your
+ 	 * <code>BeanContextChild</code> when it is registered in a parent
+ 	 * <code>BeanContext</code> or when behavior needs to switch from
+ 	 * design time to runtime behavior (or vice versa).
+ 	 * <P>
+ 	 *
+ 	 * <code>BeanContext</code>s are required to fire
+ 	 * <code>PropertyChangeEvent</code>s when properties change.
+ 	 * <code>designTime</code> is a property, and therefore when you
+ 	 * implement <code>setDesignTime()</code>, you need to fire a
+ 	 * <code>PropertyChangeEvent</code> with the old value, the new
+ 	 * value and using <code>PROPERTYNAME</code> as the property name.
+ 	 *
+ 	 * @param designTime the new value of design time,
+ 	 *        <code>true</code> if it is design time,
+ 	 *        <code>false</code> if it is runtime.
+ 	 *
+ 	 * @fixme I'm frankly not really sure whether it's the case that
+ 	 *        the BeanContext can <em>change</em> the status of the Bean from
+ 	 *        design time to runtime.  But it appears that it may be so.
+ 	 *
+ 	 * @see java.util.PropertyChangeEvent
+ 	 * @see java.beans.beancontext.BeanContext
+ 	 * @see #PROPERTYNAME
+ 	 */
+ 	void setDesignTime(boolean designTime);
+ 
+ 	/**
+ 	 * This method should tell whether it is design time or runtime.
+ 	 * @return <code>true</code> if design time, <code>false</code> if
+ 	 *         runtime.
+ 	 */
+ 	boolean isDesignTime();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/EventHandler.java gcc-4.1.0/libjava/classpath/java/beans/EventHandler.java
*** gcc-4.0.2/libjava/classpath/java/beans/EventHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/EventHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,606 ----
+ /* java.beans.EventHandler
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.lang.reflect.InvocationHandler;
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Proxy;
+ 
+ /**
+  * <p>EventHandler forms a bridge between dynamically created listeners and
+  * arbitrary properties and methods.</p>
+  * 
+  * <p>You can use this class to easily create listener implementations for
+  * some basic interactions between an event source and its target. Using
+  * the three static methods named <code>create</code> you can create
+  * these listener implementations.</p>
+  * 
+  * <p>See the documentation of each method for usage examples.</p>
+  *  
+  * @author Jerry Quinn (jlquinn@optonline.net)
+  * @author Robert Schuster (thebohemian@gmx.net)
+  * @since 1.4
+  */
+ public class EventHandler implements InvocationHandler
+ {
+   // The name of the method that will be implemented.  If null, any method.
+   private String listenerMethod;
+ 
+   // The object to call action on.
+   private Object target;
+ 
+   // The name of the method or property setter in target.
+   private String action;
+ 
+   // The property to extract from an event passed to listenerMethod.
+   private String property;
+ 
+   // The target objects Class.
+   private Class targetClass;
+   
+   // String class doesn't already have a capitalize routine.
+   private String capitalize(String s)
+   {
+     return s.substring(0, 1).toUpperCase() + s.substring(1);
+   }
+ 
+   /**
+    * Creates a new <code>EventHandler</code> instance.
+    *
+    * <p>Typical creation is done with the create method, not by knewing an
+    * EventHandler.</p>
+    *
+    * <p>This constructs an EventHandler that will connect the method
+    * listenerMethodName to target.action, extracting eventPropertyName from
+    * the first argument of listenerMethodName. and sending it to action.</p>
+    * 
+    * <p>Throws a <code>NullPointerException</code> if the <code>target</code>
+    * argument is <code>null</code>. 
+    *
+    * @param target Object that will perform the action.
+    * @param action A property or method of the target.
+    * @param eventPropertyName A readable property of the inbound event.
+    * @param listenerMethodName The listener method name triggering the action.
+    */
+   public EventHandler(Object target, String action, String eventPropertyName,
+ 		      String listenerMethodName)
+   {
+     this.target = target;
+     
+     // Retrieving the class is done for two reasons:
+     // 1) The class object is needed very frequently in the invoke() method.
+     // 2) The constructor should throw a NullPointerException if target is null.
+     targetClass = target.getClass();
+     
+     this.action = action;	// Turn this into a method or do we wait till
+     		// runtime
+     property = eventPropertyName;
+     listenerMethod = listenerMethodName;
+   }
+ 
+   /**
+    * Returns the event property name.
+    */
+   public String getEventPropertyName()
+   {
+     return property;
+   }
+ 
+   /**
+    * Returns the listener's method name.
+    */
+   public String getListenerMethodName()
+   {
+     return listenerMethod;
+   }
+ 
+   /**
+    * Returns the target object.
+    */
+   public Object getTarget()
+   {
+     return target;
+   }
+ 
+   /**
+    * Returns the action method name.
+    */
+   public String getAction()
+   {
+     return action;
+   }
+ 
+   // Fetch a qualified property like a.b.c from object o.  The properties can
+   // be boolean isProp or object getProp properties.
+   //
+   // Returns a length 2 array with the first entry containing the value
+   // extracted from the property, and the second entry contains the class of
+   // the method return type.
+   //
+   // We play this game because if the method returns a native type, the return
+   // value will be a wrapper.  If we then take the type of the wrapper and use
+   // it to locate the action method that takes the native type, it won't match.
+   private Object[] getProperty(Object o, String prop)
+   {
+     // Isolate the first property name from a.b.c.
+     int pos;
+     String rest = null;
+     if ((pos = prop.indexOf('.')) != -1)
+       {
+ 	rest = prop.substring(pos + 1);
+ 	prop = prop.substring(0, pos);
+       }
+ 
+     // Find a method named getProp.  It could be isProp instead.
+     Method getter;
+     try
+       {
+ 	// Look for boolean property getter isProperty
+ 	getter = o.getClass().getMethod("is" + capitalize(prop),
+ 						 null);
+       }
+     catch (NoSuchMethodException nsme1)
+       {
+         try {
+           // Look for regular property getter getProperty
+           getter = o.getClass().getMethod("get" + capitalize(prop),
+ 						 null);
+         } catch(NoSuchMethodException nsme2) {
+             try {
+             // Finally look for a method of the name prop
+             getter = o.getClass().getMethod(prop, null);
+             } catch(NoSuchMethodException nsme3) {
+                 // Ok, give up with an intelligent hint for the user.
+                 throw new RuntimeException("Method not called: Could not find a property or method '" + prop
+                         + "' in " + o.getClass() + " while following the property argument '" + property + "'.");
+             }
+         }
+       }
+     try {
+       Object val = getter.invoke(o, null);
+ 
+       if (rest != null)
+         return getProperty(val, rest);
+ 
+       return new Object[] {val, getter.getReturnType()};
+     } catch(InvocationTargetException ite) {
+         throw new RuntimeException("Method not called: Property or method '" + prop + "' has thrown an exception.", ite);
+     } catch(IllegalAccessException iae) {
+         // This cannot happen because we looked up method with Class.getMethod()
+         // which returns public methods only.
+         throw (InternalError) new InternalError("Non-public method was invoked.").initCause(iae);
+     }
+   }
+ 
+   /**
+    * Invokes the <code>EventHandler</code>.
+    * 
+    * <p>This method is normally called by the listener's proxy implementation.</p>
+    * 
+    * @param proxy The listener interface that is implemented using
+    * the proxy mechanism.
+    * @param method The method that was called on the proxy instance.
+    * @param arguments The arguments which where given to the method.
+    * @throws Throwable <code>NoSuchMethodException</code> is thrown when the EventHandler's
+    * action method or property cannot be found.
+    */
+   public Object invoke(Object proxy, Method method, Object[] arguments)
+   {
+       try {
+       // The method instance of the target object. We have to find out which
+       // one we have to invoke.
+       Method actionMethod = null;
+ 
+     // Listener methods that weren't specified are ignored.  If listenerMethod
+     // is null, then all listener methods are processed.
+     if (listenerMethod != null && !method.getName().equals(listenerMethod))
+       return null;
+ 
+     // If a property is defined we definitely need a valid object at
+     // arguments[0] that can be used to retrieve a value to which the
+     // property of the target gets set.
+     if(property != null) {
+       // Extracts the argument. We will let it fail with a NullPointerException
+       // the caller used a listener method that has no arguments.
+       Object event = arguments[0];
+ 
+       // Obtains the property XXX propertyType keeps showing up null - why?
+       // because the object inside getProperty changes, but the ref variable
+       // can't change this way, dolt!  need a better way to get both values out
+       // - need method and object to do the invoke and get return type
+       Object v[] = getProperty(event, property);
+       Object[] args = new Object[] { v[0] };
+       
+       // Changes the class array that controls which method signature we are going
+       // to look up in the target object.
+       Class[] argTypes = new Class[] { initClass((Class) v[1]) };
+     
+       // Tries to  find a setter method to which we can apply the
+       while(argTypes[0] != null) {
+       try
+       {
+         // Look for a property setter for action.
+         actionMethod = targetClass.getMethod("set" + capitalize(action), argTypes);
+ 
+         return actionMethod.invoke(target, args);
+       }
+     catch (NoSuchMethodException e)
+       {
+         // If action as property didn't work, try as method later.
+       }
+     
+       argTypes[0] = nextClass(argTypes[0]);
+       }
+       
+       // We could not find a suitable setter method. Now we try again interpreting
+       // action as the method name itself.
+       // Since we probably have changed the block local argTypes array 
+       // we need to rebuild it.
+       argTypes = new Class[] { initClass((Class) v[1]) };
+     
+       // Tries to  find a setter method to which we can apply the
+       while(argTypes[0] != null) {
+         try
+         {
+           actionMethod = targetClass.getMethod(action, argTypes);
+ 
+           return actionMethod.invoke(target, args);
+         }
+         catch (NoSuchMethodException e)
+         {
+         }
+         
+         argTypes[0] = nextClass(argTypes[0]);
+       }
+         
+         throw new RuntimeException("Method not called: Could not find a public method named '"
+                 + action + "' in target " + targetClass + " which takes a '"
+                 + v[1] + "' argument or a property of this type.");
+       }      
+   
+     // If property was null we will search for a no-argument method here.
+     // Note: The ordering of method lookups is important because we want to prefer no-argument
+     // calls like the JDK does. This means if we have actionMethod() and actionMethod(Event) we will
+     // call the first *EVEN* if we have a valid argument for the second method. This is behavior compliant
+     // to the JDK.
+     // If actionMethod() is not available but there is a actionMethod(Event) we take this. That makes us
+     // more specification compliant than the JDK itself because this one will fail in such a case.
+     try
+       {
+       actionMethod = targetClass.getMethod(action, null);
+       }
+     catch(NoSuchMethodException nsme)
+       {
+         // Note: If we want to be really strict the specification says that a no-argument method should
+         // accept an EventObject (or subclass I guess). However since the official implementation is broken
+         // anyways, it's more flexible without the EventObject restriction and we are compatible on everything
+         // else this can stay this way.
+         if(arguments != null && arguments.length >= 1/* && arguments[0] instanceof EventObject*/) {
+             Class[] targetArgTypes = new Class[] { initClass(arguments[0].getClass()) };
+             
+             while(targetArgTypes[0] != null) {
+                 try
+                 {
+                   // If no property exists we expect the first element of the arguments to be
+                   // an EventObject which is then applied to the target method.
+       
+                   actionMethod = targetClass.getMethod(action, targetArgTypes);
+               
+                   return actionMethod.invoke(target, new Object[] { arguments[0] });
+                 }
+                 catch(NoSuchMethodException nsme2)
+                 {
+                     
+                 }
+                 
+                 targetArgTypes[0] = nextClass(targetArgTypes[0]);
+             }
+           
+         }
+       }
+ 
+     // If we do not have a Method instance at this point this means that all our tries
+     // failed. The JDK throws an ArrayIndexOutOfBoundsException in this case.
+     if(actionMethod == null)
+       throw new ArrayIndexOutOfBoundsException(0);
+     
+     // Invoke target.action(property)
+     return actionMethod.invoke(target, null);
+       } catch(InvocationTargetException ite) {
+          throw new RuntimeException(ite.getCause());
+       } catch(IllegalAccessException iae) {
+           // Cannot happen because we always use getMethod() which returns public
+           // methods only. Otherwise there is something seriously broken in
+           // GNU Classpath.
+           throw (InternalError) new InternalError("Non-public method was invoked.").initCause(iae);
+       }
+   }
+   
+   /**
+    * <p>Returns the primitive type for every wrapper class or the
+    * class itself if it is no wrapper class.</p>
+    * 
+    * <p>This is needed because to be able to find both kinds of methods:
+    * One that takes a wrapper class as the first argument and one that
+    * accepts a primitive instead.</p>
+    */
+   private Class initClass(Class klass) {
+    if(klass == Boolean.class) {
+     return Boolean.TYPE;    
+    } else if(klass == Byte.class) {
+     return Byte.TYPE;   
+    } else if(klass == Short.class) {
+     return Short.TYPE;   
+    } else if(klass == Integer.class) {
+     return Integer.TYPE;   
+    } else if(klass == Long.class) {
+     return Long.TYPE;   
+    } else if(klass == Float.class) {
+     return Float.TYPE;   
+    } else if(klass == Double.class) {
+     return Double.TYPE;   
+    } else {
+     return klass;   
+    }
+   }
+ 
+   /**
+    * 
+    * 
+    * @param klass
+    * @return
+    */
+   private Class nextClass(Class klass) {
+     if(klass == Boolean.TYPE) {
+     return Boolean.class;    
+    } else if(klass == Byte.TYPE) {
+     return Byte.class;   
+    } else if(klass == Short.TYPE) {
+     return Short.class;   
+    } else if(klass == Integer.TYPE) {
+     return Integer.class;   
+    } else if(klass == Long.TYPE) {
+     return Long.class;   
+    } else if(klass == Float.TYPE) {
+     return Float.class;   
+    } else if(klass == Double.TYPE) {
+     return Double.class;   
+    } else {
+     return klass.getSuperclass();
+    }
+    }
+   
+   /**
+    * <p>Constructs an implementation of <code>listenerInterface</code>
+    * to dispatch events.</p>
+    * 
+    * <p>You can use such an implementation to simply call a public
+    * no-argument method of an arbitrary target object or to forward
+    * the first argument of the listener method to the target method.</p>
+    * 
+    * <p>Call this method like:</p>
+    * <code>
+    * button.addActionListener((ActionListener)
+    *    EventHandler.create(ActionListener.class, target, "dispose"));
+    * </code>
+    * 
+    * <p>to achieve the following behavior:</p>
+    * <code>
+    * button.addActionListener(new ActionListener() {
+    *    public void actionPerformed(ActionEvent ae) {
+    *        target.dispose();
+    *    }
+    * });
+    * </code>
+    * 
+    * <p>That means if you need a listener implementation that simply calls a
+    * a no-argument method on a given instance for <strong>each</strong>
+    * method of the listener interface.</p>
+    * 
+    * <p>Note: The <code>action</code> is interpreted as a method name. If your target object
+    * has no no-argument method of the given name the EventHandler tries to find
+    * a method with the same name but which can accept the first argument of the
+    * listener method. Usually this will be an event object but any other object
+    * will be forwarded, too. Keep in mind that using a property name instead of a
+    * real method here is wrong and will throw an <code>ArrayIndexOutOfBoundsException</code>
+    * whenever one of the listener methods is called.<p/>
+    *
+    * <p>The <code>EventHandler</code> will automatically convert primitives
+    * to their wrapper class and vice versa. Furthermore it will call
+    * a target method if it accepts a superclass of the type of the
+    * first argument of the listener method.</p>
+    * 
+    * <p>In case that the method of the target object throws an exception
+    * it will be wrapped in a <code>RuntimeException</code> and thrown out
+    * of the listener method.</p>
+    * 
+    * <p>In case that the method of the target object cannot be found an
+    * <code>ArrayIndexOutOfBoundsException</code> will be thrown when the
+    * listener method is invoked.</p>
+    * 
+    * <p>A call to this method is equivalent to:
+    * <code>create(listenerInterface, target, action, null, null)</code></p>
+    *
+    * @param listenerInterface Listener interface to implement.
+    * @param target Object to invoke action on.
+    * @param action Target property or method to invoke.
+    * @return A constructed proxy object.
+    */
+   public static Object create(Class listenerInterface, Object target, String action)
+   {
+     return create(listenerInterface, target, action, null, null);
+   }
+ 
+   /**
+    * <p>Constructs an implementation of <code>listenerInterface</code>
+    * to dispatch events.</p>
+    *
+    * <p>Use this method if you want to create an implementation that retrieves
+    * a property value from the <b>first</b> argument of the listener method
+    * and applies it to the target's property or method. This first argument
+    * of the listener is usually an event object but any other object is
+    * valid, too.</p>
+    * 
+    * <p>You can set the value of <code>eventPropertyName</code> to "prop"
+    * to denote the retrieval of a property named "prop" from the event
+    * object. In case that no such property exists the <code>EventHandler</code>
+    * will try to find a method with that name.</p>
+    * 
+    * <p>If you set <code>eventPropertyName</code> to a value like this "a.b.c"
+    * <code>EventHandler</code> will recursively evaluate the properties "a", "b"
+    * and "c". Again if no property can be found the <code>EventHandler</code>
+    * tries a method name instead. This allows mixing the names, too: "a.toString"
+    * will retrieve the property "a" from the event object and will then call
+    * the method "toString" on it.</p>
+    * 
+    * <p>An exception thrown in any of these methods will provoke a
+    * <code>RuntimeException</code> to be thrown which contains an
+    * <code>InvocationTargetException</code> containing the triggering exception.</p>
+    * 
+    * <p>If you set <code>eventPropertyName</code> to a non-null value the
+    * <code>action</code> parameter will be interpreted as a property name
+    * or a method name of the target object.</p>
+    *   
+    * <p>Any object retrieved from the event object and applied to the
+    * target will converted from primitives to their wrapper class or
+    * vice versa or applied to a method that accepts a superclass
+    * of the object.</p>
+    *
+    * <p>Examples:</p>
+    * <p>The following code:</p><code>
+    * button.addActionListener(
+    *    new ActionListener() {
+    *        public void actionPerformed(ActionEvent ae) {
+    *            Object o = ae.getSource().getClass().getName();
+    *            textField.setText((String) o);
+    *        }
+    *    });
+    * </code>
+    * 
+    * <p>Can be expressed using the <code>EventHandler</code> like this:</p>
+    * <p>
+    * <code>button.addActionListener((ActionListener)
+    *    EventHandler.create(ActionListener.class, textField, "text", "source.class.name");
+    * <code>
+    * </p>
+    * 
+    * <p>As said above you can specify the target as a method, too:</p>
+    * <p>
+    * <code>button.addActionListener((ActionListener)
+    *    EventHandler.create(ActionListener.class, textField, "setText", "source.class.name");
+    * <code>
+    * </p>
+    * 
+    * <p>Furthermore you can use method names in the property:</p>
+    * <p>
+    * <code>button.addActionListener((ActionListener)
+    *    EventHandler.create(ActionListener.class, textField, "setText", "getSource.getClass.getName");
+    * <code>
+    * </p>
+    * 
+    * <p>Finally you can mix names:</p>
+    * <p>
+    * <code>button.addActionListener((ActionListener)
+    *    EventHandler.create(ActionListener.class, textField, "setText", "source.getClass.name");
+    * <code>
+    * </p>
+    * 
+    * <p>A call to this method is equivalent to:
+    * <code>create(listenerInterface, target, action, null, null)</code>
+    * </p>
+    *
+    * @param listenerInterface Listener interface to implement.
+    * @param target Object to invoke action on.
+    * @param action Target property or method to invoke.
+    * @param eventPropertyName Name of property to extract from event.
+    * @return A constructed proxy object.
+    */
+   public static Object create(Class listenerInterface, Object target,
+ 			      String action, String eventPropertyName)
+   {
+     return create(listenerInterface, target, action, eventPropertyName, null);
+   }
+ 
+   /**
+    * <p>Constructs an implementation of <code>listenerInterface</code>
+    * to dispatch events.</p>
+    *
+    * <p>Besides the functionality described for {@link create(Class, Object, String)}
+    * and {@link create(Class, Object, String, String)} this method allows you
+    * to filter the listener method that should have an effect. Look at these
+    * method's documentation for more information about the <code>EventHandler</code>'s
+    * usage.</p>
+    * 
+    * <p>If you want to call <code>dispose</code> on a <code>JFrame</code> instance
+    * when the <code>WindowListener.windowClosing()</code> method was invoked use
+    * the following code:</p>
+    * <p>
+    * <code>
+    * EventHandler.create(WindowListener.class, jframeInstance, "dispose", null, "windowClosing");
+    * </code>
+    * </p>
+    * 
+    * <p>A <code>NullPointerException</code> is thrown if the <code>listenerInterface</code>
+    * or <code>target</code> argument are <code>null</code>.
+    * 
+    * @param listenerInterface Listener interface to implement.
+    * @param target Object to invoke action on.
+    * @param action Target method name to invoke.
+    * @param eventPropertyName Name of property to extract from event.
+    * @param listenerMethodName Listener method to implement.
+    * @return A constructed proxy object.
+    */
+   public static Object create(Class listenerInterface, Object target,
+ 			      String action, String eventPropertyName,
+ 			      String listenerMethodName)
+   {
+     // Create EventHandler instance
+     EventHandler eh = new EventHandler(target, action, eventPropertyName,
+ 				       listenerMethodName);
+ 
+     // Create proxy object passing in the event handler
+     Object proxy = Proxy.newProxyInstance(listenerInterface.getClassLoader(),
+ 					  new Class[] {listenerInterface},
+ 					  eh);
+ 
+     return proxy;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/EventSetDescriptor.java gcc-4.1.0/libjava/classpath/java/beans/EventSetDescriptor.java
*** gcc-4.0.2/libjava/classpath/java/beans/EventSetDescriptor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/EventSetDescriptor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,442 ----
+ /* java.beans.EventSetDescriptor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import gnu.java.lang.ClassHelper;
+ 
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Modifier;
+ import java.util.Vector;
+ 
+ /**
+  ** EventSetDescriptor describes the hookup between an event source
+  ** class and an event listener class.
+  **
+  ** EventSets have several attributes: the listener class, the events
+  ** that can be fired to the listener (methods in the listener class), and
+  ** an add and remove listener method from the event firer's class.<P>
+  **
+  ** The methods have these constraints on them:<P>
+  ** <UL>
+  ** <LI>event firing methods: must have <CODE>void</CODE> return value.  Any
+  ** parameters and exceptions are allowed.  May be public, protected or
+  ** package-protected. (Don't ask me why that is, I'm just following the spec.
+  ** The only place it is even mentioned is in the Java Beans white paper, and
+  ** there it is only implied.)</LI>
+  ** <LI>add listener method: must have <CODE>void</CODE> return value.  Must
+  ** take exactly one argument, of the listener class's type.  May fire either
+  ** zero exceptions, or one exception of type <CODE>java.util.TooManyListenersException</CODE>.
+  ** Must be public.</LI>
+  ** <LI>remove listener method: must have <CODE>void</CODE> return value.
+  ** Must take exactly one argument, of the listener class's type.  May not
+  ** fire any exceptions.  Must be public.</LI>
+  ** </UL>
+  **
+  ** A final constraint is that event listener classes must extend from EventListener.<P>
+  **
+  ** There are also various design patterns associated with some of the methods
+  ** of construction. Those are explained in more detail in the appropriate
+  ** constructors.<P>
+  **
+  ** <STRONG>Documentation Convention:</STRONG> for proper
+  ** Internalization of Beans inside an RAD tool, sometimes there
+  ** are two names for a property or method: a programmatic, or
+  ** locale-independent name, which can be used anywhere, and a
+  ** localized, display name, for ease of use.  In the
+  ** documentation I will specify different String values as
+  ** either <EM>programmatic</EM> or <EM>localized</EM> to
+  ** make this distinction clear.
+  **
+  ** @author John Keiser
+  ** @since JDK1.1
+  ** @version 1.1.0, 31 May 1998
+  **/
+ 
+ public class EventSetDescriptor extends FeatureDescriptor {
+ 	private Method addListenerMethod;
+ 	private Method removeListenerMethod;
+ 	private Class listenerType;
+ 	private MethodDescriptor[] listenerMethodDescriptors;
+ 	private Method[] listenerMethods;
+ 
+ 	private boolean unicast;
+ 	private boolean inDefaultEventSet = true;
+ 
+ 	/** Create a new EventSetDescriptor.
+ 	 ** This version of the constructor enforces the rules imposed on the methods
+ 	 ** described at the top of this class, as well as searching for:<P>
+ 	 ** <OL>
+ 	 ** <LI>The event-firing method must be non-private with signature
+ 	 ** <CODE>void &lt;listenerMethodName&gt;(&lt;eventSetName&gt;Event)</CODE>
+ 	 ** (where <CODE>&lt;eventSetName&gt;</CODE> has its first character capitalized
+ 	 ** by the constructor and the Event is a descendant of
+ 	 ** <CODE>java.util.EventObject</CODE>) in class <CODE>listenerType</CODE>
+ 	 ** (any exceptions may be thrown).
+ 	 ** <B>Implementation note:</B> Note that there could conceivably be multiple
+ 	 ** methods with this type of signature (example: java.util.MouseEvent vs.
+ 	 ** my.very.own.MouseEvent).  In this implementation, all methods fitting the
+ 	 ** description will be put into the <CODE>EventSetDescriptor</CODE>, even
+ 	 ** though the spec says only one should be chosen (they probably weren't thinking as
+ 	 ** pathologically as I was).  I don't like arbitrarily choosing things.
+ 	 ** If your class has only one such signature, as most do, you'll have no problems.</LI>
+ 	 ** <LI>The add and remove methods must be public and named
+ 	 ** <CODE>void add&lt;eventSetName&gt;Listener(&lt;listenerType&gt;)</CODE> and
+ 	 ** <CODE>void remove&lt;eventSetName&gt;Listener(&lt;listenerType&gt;)</CODE> in
+ 	 ** in class <CODE>eventSourceClass</CODE>, where
+ 	 ** <CODE>&lt;eventSetName&gt;</CODE> will have its first letter capitalized.
+ 	 ** Standard exception rules (see class description) apply.</LI>
+ 	 ** </OL>
+ 	 ** @param eventSourceClass the class containing the add/remove listener methods.
+ 	 ** @param eventSetName the programmatic name of the event set, generally starting
+ 	 ** with a lowercase letter (i.e. fooManChu instead of FooManChu).  This will be used
+ 	 ** to generate the name of the event object as well as the names of the add and
+ 	 ** remove methods.
+ 	 ** @param listenerType the class containing the event firing method.
+ 	 ** @param listenerMethodName the name of the event firing method.
+ 	 ** @exception IntrospectionException if listenerType is not an EventListener,
+ 	 **                                   or if methods are not found or are invalid.
+ 	 **/
+ 	public EventSetDescriptor(Class  eventSourceClass,
+ 				  String eventSetName,
+ 				  Class  listenerType,
+ 				  String listenerMethodName) throws IntrospectionException {
+ 		setName(eventSetName);
+ 		if(!java.util.EventListener.class.isAssignableFrom(listenerType)) {
+ 			throw new IntrospectionException("Listener type is not an EventListener.");
+ 		}
+ 
+ 		String[] names = new String[1];
+ 		names[0] = listenerMethodName;
+ 
+ 		try {
+ 			eventSetName = Character.toUpperCase(eventSetName.charAt(0)) + eventSetName.substring(1);
+ 		} catch(StringIndexOutOfBoundsException e) {
+ 			eventSetName = "";
+ 		}
+ 
+ 		findMethods(eventSourceClass,listenerType,names,"add"+eventSetName+"Listener","remove"+eventSetName+"Listener",eventSetName+"Event");
+ 		this.listenerType = listenerType;
+ 		checkAddListenerUnicast();
+ 		if(this.removeListenerMethod.getExceptionTypes().length > 0) {
+ 			throw new IntrospectionException("Listener remove method throws exceptions.");
+ 		}
+ 	}
+ 
+ 	/** Create a new EventSetDescriptor.
+ 	 ** This form of the constructor allows you to specify the names of the methods and adds
+ 	 ** no new constraints on top of the rules already described at the top of the class.<P>
+ 	 ** 
+ 	 ** @param eventSourceClass the class containing the add and remove listener methods.
+ 	 ** @param eventSetName the programmatic name of the event set, generally starting
+ 	 ** with a lowercase letter (i.e. fooManChu instead of FooManChu).
+ 	 ** @param listenerType the class containing the event firing methods.
+ 	 ** @param listenerMethodNames the names of the even firing methods.
+ 	 ** @param addListenerMethodName the name of the add listener method.
+ 	 ** @param removeListenerMethodName the name of the remove listener method.
+ 	 ** @exception IntrospectionException if listenerType is not an EventListener
+ 	 **                                   or if methods are not found or are invalid.
+ 	 **/
+ 	public EventSetDescriptor(Class eventSourceClass,
+ 				   String eventSetName,
+ 				   Class listenerType,
+ 				   String[] listenerMethodNames,
+ 				   String addListenerMethodName,
+ 				   String removeListenerMethodName) throws IntrospectionException {
+ 		setName(eventSetName);
+ 		if(!java.util.EventListener.class.isAssignableFrom(listenerType)) {
+ 			throw new IntrospectionException("Listener type is not an EventListener.");
+ 		}
+ 
+ 		findMethods(eventSourceClass,listenerType,listenerMethodNames,addListenerMethodName,removeListenerMethodName,null);
+ 		this.listenerType = listenerType;
+ 		checkAddListenerUnicast();
+ 		if(this.removeListenerMethod.getExceptionTypes().length > 0) {
+ 			throw new IntrospectionException("Listener remove method throws exceptions.");
+ 		}
+ 	}
+ 
+ 	/** Create a new EventSetDescriptor.
+ 	 ** This form of constructor allows you to explicitly say which methods do what, and
+ 	 ** no reflection is done by the EventSetDescriptor.  The methods are, however,
+ 	 ** checked to ensure that they follow the rules set forth at the top of the class.
+ 	 ** @param eventSetName the programmatic name of the event set, generally starting
+ 	 ** with a lowercase letter (i.e. fooManChu instead of FooManChu).
+ 	 ** @param listenerType the class containing the listenerMethods.
+ 	 ** @param listenerMethods the event firing methods.
+ 	 ** @param addListenerMethod the add listener method.
+ 	 ** @param removeListenerMethod the remove listener method.
+ 	 ** @exception IntrospectionException if the listenerType is not an EventListener,
+ 	 **                                   or any of the methods are invalid.
+ 	 **/
+ 	public EventSetDescriptor(String eventSetName,
+ 				   Class listenerType,
+ 				   Method[] listenerMethods,
+ 				   Method addListenerMethod,
+ 				   Method removeListenerMethod) throws IntrospectionException {
+ 		setName(eventSetName);
+ 		if(!java.util.EventListener.class.isAssignableFrom(listenerType)) {
+ 			throw new IntrospectionException("Listener type is not an EventListener.");
+ 		}
+ 
+ 	        this.listenerMethods = listenerMethods;
+ 		this.addListenerMethod = addListenerMethod;
+ 		this.removeListenerMethod = removeListenerMethod;
+ 		this.listenerType = listenerType;
+ 		checkMethods();
+ 		checkAddListenerUnicast();
+ 		if(this.removeListenerMethod.getExceptionTypes().length > 0) {
+ 			throw new IntrospectionException("Listener remove method throws exceptions.");
+ 		}
+ 	}
+ 
+ 	/** Create a new EventSetDescriptor.
+ 	 ** This form of constructor allows you to explicitly say which methods do what, and
+ 	 ** no reflection is done by the EventSetDescriptor.  The methods are, however,
+ 	 ** checked to ensure that they follow the rules set forth at the top of the class.
+ 	 ** @param eventSetName the programmatic name of the event set, generally starting
+ 	 ** with a lowercase letter (i.e. fooManChu instead of FooManChu).
+ 	 ** @param listenerType the class containing the listenerMethods.
+ 	 ** @param listenerMethodDescriptors the event firing methods.
+ 	 ** @param addListenerMethod the add listener method.
+ 	 ** @param removeListenerMethod the remove listener method.
+ 	 ** @exception IntrospectionException if the listenerType is not an EventListener,
+ 	 **                                   or any of the methods are invalid.
+ 	 **/
+ 	public EventSetDescriptor(String eventSetName,
+ 				   Class listenerType,
+ 				   MethodDescriptor[] listenerMethodDescriptors,
+ 				   Method addListenerMethod,
+ 				   Method removeListenerMethod) throws IntrospectionException {
+ 		setName(eventSetName);
+ 		if(!java.util.EventListener.class.isAssignableFrom(listenerType)) {
+ 			throw new IntrospectionException("Listener type is not an EventListener.");
+ 		}
+ 
+ 		this.listenerMethodDescriptors = listenerMethodDescriptors;
+ 		this.listenerMethods = new Method[listenerMethodDescriptors.length];
+ 		for(int i=0;i<this.listenerMethodDescriptors.length;i++) {
+ 			this.listenerMethods[i] = this.listenerMethodDescriptors[i].getMethod();
+ 		}
+ 
+ 		this.addListenerMethod = addListenerMethod;
+ 		this.removeListenerMethod = removeListenerMethod;
+ 		this.listenerType = listenerType;
+ 		checkMethods();
+ 		checkAddListenerUnicast();
+ 		if(this.removeListenerMethod.getExceptionTypes().length > 0) {
+ 			throw new IntrospectionException("Listener remove method throws exceptions.");
+ 		}
+ 	}
+ 
+ 	/** Get the class that contains the event firing methods. **/
+ 	public Class getListenerType() {
+ 		return listenerType;
+ 	}
+ 
+ 	/** Get the event firing methods. **/
+ 	public Method[] getListenerMethods() {
+ 		return listenerMethods;
+ 	}
+ 
+ 	/** Get the event firing methods as MethodDescriptors. **/
+ 	public MethodDescriptor[] getListenerMethodDescriptors() {
+ 		if(listenerMethodDescriptors == null) {
+ 			listenerMethodDescriptors = new MethodDescriptor[listenerMethods.length];
+ 			for(int i=0;i<listenerMethods.length;i++) {
+ 				listenerMethodDescriptors[i] = new MethodDescriptor(listenerMethods[i]);
+ 			}
+ 		}
+ 		return listenerMethodDescriptors;
+ 	}
+ 
+ 	/** Get the add listener method. **/
+ 	public Method getAddListenerMethod() {
+ 		return addListenerMethod;
+ 	}
+ 
+ 	/** Get the remove listener method. **/
+ 	public Method getRemoveListenerMethod() {
+ 		return removeListenerMethod;
+ 	}
+ 
+ 	/** Set whether or not multiple listeners may be added.
+ 	 ** @param unicast whether or not multiple listeners may be added.
+ 	 **/
+ 	public void setUnicast(boolean unicast) {
+ 		this.unicast = unicast;
+ 	}
+ 
+ 	/** Get whether or not multiple listeners may be added.  (Defaults to false.) **/
+ 	public boolean isUnicast() {
+ 		return unicast;
+ 	}
+ 
+ 	/** Set whether or not this is in the default event set.
+ 	 ** @param inDefaultEventSet whether this is in the default event set.
+ 	 **/
+ 	public void setInDefaultEventSet(boolean inDefaultEventSet) {
+ 		this.inDefaultEventSet = inDefaultEventSet;
+ 	}
+ 
+ 	/** Get whether or not this is in the default event set.  (Defaults to true.)**/
+ 	public boolean isInDefaultEventSet() {
+ 		return inDefaultEventSet;
+ 	}
+ 
+ 	private void checkAddListenerUnicast() throws IntrospectionException {
+ 		Class[] addListenerExceptions = this.addListenerMethod.getExceptionTypes();
+ 		if(addListenerExceptions.length > 1) {
+ 			throw new IntrospectionException("Listener add method throws too many exceptions.");
+ 		} else if(addListenerExceptions.length == 1
+ 			  && !java.util.TooManyListenersException.class.isAssignableFrom(addListenerExceptions[0])) {
+ 			throw new IntrospectionException("Listener add method throws too many exceptions.");
+ 		}
+ 	}
+ 
+ 	private void checkMethods() throws IntrospectionException {
+ 		if(!addListenerMethod.getDeclaringClass().isAssignableFrom(removeListenerMethod.getDeclaringClass())
+ 		   && !removeListenerMethod.getDeclaringClass().isAssignableFrom(addListenerMethod.getDeclaringClass())) {
+ 			throw new IntrospectionException("add and remove listener methods do not come from the same class.  This is bad.");
+ 		}
+ 		if(!addListenerMethod.getReturnType().equals(java.lang.Void.TYPE)
+                    || addListenerMethod.getParameterTypes().length != 1
+ 		   || !listenerType.equals(addListenerMethod.getParameterTypes()[0])
+ 		   || !Modifier.isPublic(addListenerMethod.getModifiers())) {
+ 			throw new IntrospectionException("Add Listener Method invalid.");
+ 		}
+ 		if(!removeListenerMethod.getReturnType().equals(java.lang.Void.TYPE)
+                    || removeListenerMethod.getParameterTypes().length != 1
+ 		   || !listenerType.equals(removeListenerMethod.getParameterTypes()[0])
+ 		   || removeListenerMethod.getExceptionTypes().length > 0
+ 		   || !Modifier.isPublic(removeListenerMethod.getModifiers())) {
+ 			throw new IntrospectionException("Remove Listener Method invalid.");
+ 		}
+ 
+ 		for(int i=0;i<listenerMethods.length;i++) {
+ 			if(!listenerMethods[i].getReturnType().equals(java.lang.Void.TYPE)
+ 			   || Modifier.isPrivate(listenerMethods[i].getModifiers())) {
+ 				throw new IntrospectionException("Event Method " + listenerMethods[i].getName() + " non-void or private.");
+ 			}
+ 			if(!listenerMethods[i].getDeclaringClass().isAssignableFrom(listenerType)) {
+ 				throw new IntrospectionException("Event Method " + listenerMethods[i].getName() + " not from class " + listenerType.getName());
+ 			}
+ 		}
+ 	}
+ 
+ 	private void findMethods(Class eventSourceClass,
+ 		Class listenerType,
+ 		String listenerMethodNames[],
+ 		String addListenerMethodName,
+ 		String removeListenerMethodName,
+ 		String absurdEventClassCheckName) throws IntrospectionException {
+ 
+ 		/* Find add listener method and remove listener method. */
+ 		Class[] listenerArgList = new Class[1];
+ 		listenerArgList[0] = listenerType;
+ 		try {
+ 			this.addListenerMethod = eventSourceClass.getMethod(addListenerMethodName,listenerArgList);
+ 		} catch(SecurityException E) {
+ 			throw new IntrospectionException("SecurityException trying to access method " + addListenerMethodName + ".");
+ 		} catch(NoSuchMethodException E) {
+ 			throw new IntrospectionException("Could not find method " + addListenerMethodName + ".");
+ 		}
+ 
+ 		if(this.addListenerMethod == null || !this.addListenerMethod.getReturnType().equals(java.lang.Void.TYPE)) {
+ 			throw new IntrospectionException("Add listener method does not exist, is not public, or is not void.");
+ 		}
+ 
+ 		try {
+ 			this.removeListenerMethod = eventSourceClass.getMethod(removeListenerMethodName,listenerArgList);
+ 		} catch(SecurityException E) {
+ 			throw new IntrospectionException("SecurityException trying to access method " + removeListenerMethodName + ".");
+ 		} catch(NoSuchMethodException E) {
+ 			throw new IntrospectionException("Could not find method " + removeListenerMethodName + ".");
+ 		}
+ 		if(this.removeListenerMethod == null || !this.removeListenerMethod.getReturnType().equals(java.lang.Void.TYPE)) {
+ 			throw new IntrospectionException("Remove listener method does not exist, is not public, or is not void.");
+ 		}
+ 
+ 		/* Find the listener methods. */
+ 		Method[] methods;
+ 		try {
+ 			methods = ClassHelper.getAllMethods(listenerType);
+ 		} catch(SecurityException E) {
+ 			throw new IntrospectionException("Security: You cannot access fields in this class.");
+ 		}
+ 
+ 		Vector chosenMethods = new Vector();
+ 		boolean[] listenerMethodFound = new boolean[listenerMethodNames.length];
+ 		for(int i=0;i<methods.length;i++) {
+ 			if(Modifier.isPrivate(methods[i].getModifiers())) {
+ 				continue;
+ 			}
+ 			Method currentMethod = methods[i];
+ 			Class retval = currentMethod.getReturnType();
+ 			if(retval.equals(java.lang.Void.TYPE)) {
+ 				for(int j=0;j<listenerMethodNames.length;j++) {
+ 					if(currentMethod.getName().equals(listenerMethodNames[j])
+ 					   && (absurdEventClassCheckName == null
+ 					       || (currentMethod.getParameterTypes().length == 1
+ 					           && ((currentMethod.getParameterTypes()[0]).getName().equals(absurdEventClassCheckName)
+ 					               || (currentMethod.getParameterTypes()[0]).getName().endsWith("."+absurdEventClassCheckName)
+ 					              )
+ 					          )
+ 					      )
+ 					  ) {
+ 						chosenMethods.addElement(currentMethod);
+ 						listenerMethodFound[j] = true;
+ 					}
+ 				}
+ 			}
+ 		}
+ 
+ 		/* Make sure we found all the methods we were looking for. */
+ 		for(int i=0;i<listenerMethodFound.length;i++) {
+ 			if(!listenerMethodFound[i]) {
+ 				throw new IntrospectionException("Could not find event method " + listenerMethodNames[i]);
+ 			}
+ 		}
+ 
+ 		/* Now that we've chosen the listener methods we want, store them. */
+ 		this.listenerMethods = new Method[chosenMethods.size()];
+ 		for(int i=0;i<chosenMethods.size();i++) {
+ 			this.listenerMethods[i] = (Method)chosenMethods.elementAt(i);
+ 		}
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/ExceptionListener.java gcc-4.1.0/libjava/classpath/java/beans/ExceptionListener.java
*** gcc-4.0.2/libjava/classpath/java/beans/ExceptionListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/ExceptionListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* ExceptionListener.java -- listen for recoverable internal exceptions
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  * This interface allows a class to monitor internal exceptions, to try to
+  * recover from them.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface ExceptionListener
+ {
+   /**
+    * Fired after an exception occurs.
+    *
+    * @param e the trapped exception
+    */
+   void exceptionThrown(Exception e);
+ } // interface ExceptionListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/Expression.java gcc-4.1.0/libjava/classpath/java/beans/Expression.java
*** gcc-4.0.2/libjava/classpath/java/beans/Expression.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/Expression.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,133 ----
+ /* java.beans.Expression
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  * class Expression
+  *
+  * An Expression captures the execution of an object method that
+  * returns a value.  It stores an object, the method to call, and the
+  * arguments to pass to the method.
+  *
+  * @since 1.4
+  */
+ public class Expression extends Statement
+ {
+   // This is a placeholder to indicate that value hasn't been set
+   // yet;
+   private static final Object UNSET = new Object();
+ 
+   // The value to return.  This is equal to unset until getValue is called.
+   private Object value;
+    
+ 
+   /**
+    * Constructor
+    *
+    * Constructs an Expression representing the invocation of
+    * object.methodName(arg[0], arg[1], ...);  However, it will never
+    * be executed.  Instead, value will always be returned.
+    *
+    * @param value The value to return.
+    * @param target The object to invoke the method on.
+    * @param methodName The object method to invoke.
+    * @param arguments An array of arguments to pass to the method.
+    */
+   public Expression(Object value, Object target, String methodName,
+ 		    Object[] arguments)
+   {
+     super(target, methodName, arguments);
+     this.value = value;
+   }
+ 
+   /**
+    * Constructor
+    *
+    * Constructs an Expression representing the invocation of
+    * object.methodName(arg[0], arg[1], ...);
+    *
+    * @param target The object to invoke the method on.
+    * @param methodName The object method to invoke.
+    * @param arguments An array of arguments to pass to the method.
+    */
+   public Expression(Object target, String methodName, Object[] arguments)
+   {
+     super(target, methodName, arguments);
+     this.value = UNSET;
+   }
+ 
+   /**
+    * Return the result of executing the method.
+    *
+    * If the cached value has not yet been set, the method is
+    * executed in the same way as Statement.execute(), except that
+    * the value is cached, and then returned.  If the value has been
+    * set, it is returned without executing the method again.
+    *
+    * @return the result of executing the method.
+    * @exception Exception if an error occurs
+    */
+   public Object getValue() throws Exception
+   {
+     if (value == UNSET)
+       value = doExecute();
+     return value;
+   }
+ 
+   /**
+    * Set the cached value to be returned by getValue()
+    *
+    * @param value the value to cache and return.
+    */
+   public void setValue(Object value)
+   {
+     this.value = value;
+   }
+     
+   /**
+    * Return a string representation of this expression.
+    */
+   public String toString()
+   {
+     String result = super.toString();
+     if (value != UNSET)
+       return value.getClass().getName() + " " + result;
+     return result;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/FeatureDescriptor.java gcc-4.1.0/libjava/classpath/java/beans/FeatureDescriptor.java
*** gcc-4.0.2/libjava/classpath/java/beans/FeatureDescriptor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/FeatureDescriptor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,232 ----
+ /* java.beans.FeatureDescriptor
+    Copyright (C) 1998, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ 
+ /**
+  * FeatureDescriptor is the common superclass for all JavaBeans Descriptor
+  * classes. JavaBeans descriptors are abstract descriptors of properties,
+  * events, methods, beans, etc.<P>
+  *
+  * <STRONG>Documentation Convention:</STRONG> for proper
+  * Internalization of Beans inside an RAD tool, sometimes there
+  * are two names for a property or method: a programmatic, or
+  * locale-independent name, which can be used anywhere, and a
+  * localized, display name, for ease of use.  In the
+  * documentation I will specify different String values as
+  * either <EM>programmatic</EM> or <EM>localized</EM> to
+  * make this distinction clear.
+  *
+  * @author John Keiser
+  * @since 1.1
+  */
+ 
+ public class FeatureDescriptor
+ {
+   String name;
+   String displayName;
+   String shortDescription;
+   boolean expert;
+   boolean hidden;
+   boolean preferred;
+ 
+   Hashtable valueHash;
+ 
+   /**
+    * Instantiate this FeatureDescriptor with appropriate default values.
+    */
+   public FeatureDescriptor()
+   {
+     valueHash = new Hashtable();
+   }
+ 
+   /**
+    * Get the programmatic name of this feature.
+    */
+   public String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Set the programmatic name of this feature.
+    *
+    * @param name the new name for this feature.
+    */
+   public void setName(String name)
+   {
+     this.name = name;
+   }
+ 
+   /**
+    * Get the localized (display) name of this feature.
+    *
+    * @returns The localized display name of this feature or falls
+    * back to the programmatic name.
+    */
+   public String getDisplayName()
+   {
+     return (displayName == null) ? name : displayName;
+   }
+ 
+   /**
+    * Set the localized (display) name of this feature.
+    *
+    * @param displayName the new display name for this feature.
+    */
+   public void setDisplayName(String displayName)
+   {
+     this.displayName = displayName;
+   }
+ 
+   /**
+    * Get the localized short description for this feature.
+    *
+    * @returns A short localized description of this feature or
+    * what <code>getDisplayName</code> returns in case, that no short description
+    * is available.
+    */
+   public String getShortDescription()
+   {
+     return (shortDescription == null) ? getDisplayName() : shortDescription;
+   }
+ 
+   /**
+    * Set the localized short description for this feature.
+    *
+    * @param shortDescription the new short description for this feature.
+    */
+   public void setShortDescription(String shortDescription)
+   {
+     this.shortDescription = shortDescription;
+   }
+ 
+   /**
+    * Indicates whether this feature is for expert use only.
+    *
+    * @return true if for use by experts only,
+    * or false if anyone can use it.
+    */
+   public boolean isExpert()
+   {
+     return expert;
+   }
+ 
+   /**
+    * Set whether this feature is for expert use only.
+    *
+    * @param expert true if for use by experts only,
+    * or false if anyone can use it.
+    */
+   public void setExpert(boolean expert)
+   {
+     this.expert = expert;
+   }
+ 
+   /**
+    * Indicates whether this feature is for use by tools only.
+    * If it is for use by tools only, then it should not be displayed.
+    *
+    * @return true if tools only should use it,
+    * or false if anyone can see it.
+    */
+   public boolean isHidden()
+   {
+     return hidden;
+   }
+ 
+   /**
+    * Set whether this feature is for use by tools only.
+    * If it is for use by tools only, then it should not be displayed.
+    *
+    * @param hidden true if tools only should use it,
+    * or false if anyone can see it.
+    */
+   public void setHidden(boolean hidden)
+   {
+     this.hidden = hidden;
+   }
+ 
+   public boolean isPreferred ()
+   {
+     return preferred;
+   }
+ 
+   public void setPreferred (boolean preferred)
+   {
+     this.preferred = preferred;
+   }
+ 
+   /**
+    * Get an arbitrary value set with setValue().
+    *
+    * @param name the programmatic name of the key.
+    *
+    * @return the value associated with this name,
+    * or null if there is none.
+    */
+   public Object getValue(String name)
+   {
+     return valueHash.get(name);
+   }
+ 
+   /**
+    * Set an arbitrary string-value pair with this feature.
+    *
+    * @param name the programmatic name of the key.
+    * @param value the value to associate with the name.
+    */
+   public void setValue(String name, Object value)
+   {
+     valueHash.put(name, value);
+   }
+ 
+   /**
+    * Get a list of the programmatic key names set with setValue().
+    *
+    * @return an Enumerator over all the programmatic key names associated
+    * with this feature.
+    */
+   public Enumeration attributeNames()
+   {
+     return valueHash.keys();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/IndexedPropertyDescriptor.java gcc-4.1.0/libjava/classpath/java/beans/IndexedPropertyDescriptor.java
*** gcc-4.0.2/libjava/classpath/java/beans/IndexedPropertyDescriptor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/IndexedPropertyDescriptor.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,421 ----
+ /* IndexedPropertyDescriptor.java --
+    Copyright (C) 1998, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.lang.reflect.Array;
+ import java.lang.reflect.Method;
+ 
+ /**
+  * IndexedPropertyDescriptor describes information about a JavaBean
+  * indexed property, by which we mean an array-like property that
+  * has been exposed via a pair of get and set methods and another
+  * pair that allows you to get to the property by an index.<P>
+  *
+  * An example property would have four methods like this:<P>
+  * <CODE>FooBar[] getFoo()</CODE><BR>
+  * <CODE>void setFoo(FooBar[])</CODE><BR>
+  * <CODE>FooBar getFoo(int)</CODE><BR>
+  * <CODE>void setFoo(int,FooBar)</CODE><P>
+  *
+  * The constraints put on get and set methods are:<P>
+  * <OL>
+  * <LI>There must be at least a get(int) or a set(int,...) method.
+  * Nothing else is required.  <B>Spec note:</B>One nice restriction
+  * would be that if there is a get() there must be a get(int), same
+  * with set, but that is not in the spec and is fairly harmless.)</LI>
+  * <LI>A get array method must have signature
+  *     <CODE>&lt;propertyType&gt;[] &lt;getMethodName&gt;()</CODE></LI>
+  * <LI>A set array method must have signature
+  *     <CODE>void &lt;setMethodName&gt;(&lt;propertyType&gt;[])</CODE></LI>
+  * <LI>A get index method must have signature
+  *     <CODE>&lt;propertyType&gt; &lt;getMethodName&gt;(int)</CODE></LI>
+  * <LI>A set index method must have signature
+  *     <CODE>void &lt;setMethodName&gt;(int,&lt;propertyType&gt;)</CODE></LI>
+  * <LI>All these methods may throw any exception.</LI>
+  * <LI>All these methods must be public.</LI>
+  * </OL>
+  *
+  * @author John Keiser
+  * @since JDK1.1
+  */
+ public class IndexedPropertyDescriptor extends PropertyDescriptor
+ {
+   private Class indexedPropertyType;
+   private Method setIndex;
+   private Method getIndex;
+ 
+   /**
+    * Create a new IndexedPropertyDescriptor by introspection.
+    * This form of constructor creates the PropertyDescriptor by
+    * looking for getter methods named <CODE>get&lt;name&gt;()</CODE>
+    * and setter methods named
+    * <CODE>set&lt;name&gt;()</CODE> in class
+    * <CODE>&lt;beanClass&gt;</CODE>, where &lt;name&gt; has its
+    * first letter capitalized by the constructor.<P>
+    *
+    * <B>Implementation note:</B> If there is a get(int) method,
+    * then the return type of that method is used to find the
+    * remaining methods.  If there is no get method, then the
+    * set(int) method is searched for exhaustively and that type
+    * is used to find the others.<P>
+    *
+    * <B>Spec note:</B>
+    * If there is no get(int) method and multiple set(int) methods with
+    * the same name and the correct parameters (different type of course),
+    * then an IntrospectionException is thrown.  While Sun's spec
+    * does not state this, it can make Bean behavior different on
+    * different systems (since method order is not guaranteed) and as
+    * such, can be treated as a bug in the spec.  I am not aware of
+    * whether Sun's implementation catches this.
+    *
+    * @param name the programmatic name of the property, usually
+    *             starting with a lowercase letter (e.g. fooManChu
+    *             instead of FooManChu).
+    * @param beanClass the class the get and set methods live in.
+    *
+    * @exception IntrospectionException if the methods are not found or
+    *            invalid.
+    */
+   public IndexedPropertyDescriptor(String name, Class beanClass)
+     throws IntrospectionException
+   {
+     super(name);
+     String capitalized;
+     try
+       {
+         capitalized = Character.toUpperCase(name.charAt(0))
+           + name.substring(1);
+       }
+     catch(StringIndexOutOfBoundsException e)
+       {
+         capitalized = "";
+       }
+     findMethods(beanClass, "get" + capitalized, "set" + capitalized,
+                 "get" + capitalized, "set" + capitalized);
+   }
+ 
+   /**
+    * Create a new IndexedPropertyDescriptor by introspection.
+    * This form of constructor allows you to specify the
+    * names of the get and set methods to search for.<P>
+    *
+    * <B>Implementation note:</B> If there is a get(int) method,
+    * then the return type of that method is used to find the
+    * remaining methods.  If there is no get method, then the
+    * set(int) method is searched for exhaustively and that type
+    * is used to find the others.<P>
+    *
+    * <B>Spec note:</B>
+    * If there is no get(int) method and multiple set(int) methods with
+    * the same name and the correct parameters (different type of course),
+    * then an IntrospectionException is thrown.  While Sun's spec
+    * does not state this, it can make Bean behavior different on
+    * different systems (since method order is not guaranteed) and as
+    * such, can be treated as a bug in the spec.  I am not aware of
+    * whether Sun's implementation catches this.
+    *
+    * @param name the programmatic name of the property, usually
+    *             starting with a lowercase letter (e.g. fooManChu
+    *             instead of FooManChu).
+    * @param beanClass the class the get and set methods live in.
+    * @param getMethodName the name of the get array method.
+    * @param setMethodName the name of the set array method.
+    * @param getIndexName the name of the get index method.
+    * @param setIndexName the name of the set index method.
+    *
+    * @exception IntrospectionException if the methods are not found or invalid.
+    */
+   public IndexedPropertyDescriptor(String name, Class beanClass,
+                                    String getMethodName, String setMethodName,
+                                    String getIndexName, String setIndexName)
+     throws IntrospectionException
+   {
+     super(name);
+     findMethods(beanClass, getMethodName, setMethodName, getIndexName,
+                 setIndexName);
+   }
+ 
+   /**
+    * Create a new PropertyDescriptor using explicit Methods.
+    * Note that the methods will be checked for conformance to standard
+    * Property method rules, as described above at the top of this class.
+    * 
+    * @param name the programmatic name of the property, usually
+    *             starting with a lowercase letter (e.g. fooManChu
+    *             instead of FooManChu).
+    * @param getMethod the get array method.
+    * @param setMethod the set array method.
+    * @param getIndex the get index method.
+    * @param setIndex the set index method.
+    *
+    * @exception IntrospectionException if the methods are not found or invalid.
+    */
+   public IndexedPropertyDescriptor(String name, Method getMethod,
+                                    Method setMethod, Method getIndex,
+                                    Method setIndex)
+     throws IntrospectionException
+   {
+     super(name);
+     if(getMethod != null && getMethod.getParameterTypes().length > 0)
+       throw new IntrospectionException("get method has parameters");
+     if(getMethod != null && setMethod.getParameterTypes().length != 1)
+       throw new IntrospectionException("set method does not have exactly one parameter");
+     if(getMethod != null && setMethod != null)
+       {
+         if(!getMethod.getReturnType().equals(setMethod.getParameterTypes()[0]))
+           {
+             throw new IntrospectionException("set and get methods do not "
+                                              + "share the same type");
+           }
+         if(!getMethod.getDeclaringClass().isAssignableFrom
+            (setMethod.getDeclaringClass())
+            && !setMethod.getDeclaringClass().isAssignableFrom
+            (getMethod.getDeclaringClass()))
+           {
+             throw new IntrospectionException("set and get methods are not in "
+                                              + "the same class.");
+           }
+       }
+ 
+     if (getIndex != null
+         && (getIndex.getParameterTypes().length != 1
+          || !(getIndex.getParameterTypes()[0]).equals(java.lang.Integer.TYPE)))
+       {
+         throw new IntrospectionException("get index method has wrong "
+                                          + "parameters");
+       }
+     if (setIndex != null
+        && (setIndex.getParameterTypes().length != 2
+          || !(setIndex.getParameterTypes()[0]).equals(java.lang.Integer.TYPE)))
+       {
+         throw new IntrospectionException("set index method has wrong "
+                                          + "parameters");
+       }
+     if (getIndex != null && setIndex != null)
+       {
+         if(!getIndex.getReturnType().equals(setIndex.getParameterTypes()[1]))
+           {
+             throw new IntrospectionException("set index methods do not share "
+                                              + "the same type");
+           }
+         if(!getIndex.getDeclaringClass().isAssignableFrom
+            (setIndex.getDeclaringClass())
+            && !setIndex.getDeclaringClass().isAssignableFrom
+            (getIndex.getDeclaringClass()))
+           {
+             throw new IntrospectionException("get and set index methods are "
+                                              + "not in the same class.");
+           }
+       }
+ 
+     if (getIndex != null && getMethod != null
+         && !getIndex.getDeclaringClass().isAssignableFrom
+         (getMethod.getDeclaringClass())
+         && !getMethod.getDeclaringClass().isAssignableFrom
+         (getIndex.getDeclaringClass()))
+       {
+         throw new IntrospectionException("methods are not in the same class.");
+       }
+ 
+     if (getIndex != null && getMethod != null
+         && !Array.newInstance(getIndex.getReturnType(),0)
+         .getClass().equals(getMethod.getReturnType()))
+       {
+         throw new IntrospectionException("array methods do not match index "
+                                          + "methods.");
+       }
+ 
+     this.getMethod = getMethod;
+     this.setMethod = setMethod;
+     this.getIndex = getIndex;
+     this.setIndex = setIndex;
+     this.indexedPropertyType = getIndex != null ? getIndex.getReturnType()
+                                              : setIndex.getParameterTypes()[1];
+     this.propertyType = getMethod != null ? getMethod.getReturnType()
+       : (setMethod != null ? setMethod.getParameterTypes()[0]
+          : Array.newInstance(this.indexedPropertyType,0).getClass());
+   }
+ 
+   public Class getIndexedPropertyType()
+   {
+     return indexedPropertyType;
+   }
+ 
+   public Method getIndexedReadMethod()
+   {
+     return getIndex;
+   }
+ 
+   /**
+    * Sets the method that is used to read an indexed property.
+    *
+    * @param m the method to set
+    */
+   public void setIndexedReadMethod(Method m) throws IntrospectionException
+   {
+     getIndex = m;
+   }
+ 
+   public Method getIndexedWriteMethod()
+   {
+     return setIndex;
+   }
+ 
+   /**
+    * Sets the method that is used to write an indexed property.
+    *
+    * @param m the method to set
+    */
+   public void setIndexedWriteMethod(Method m) throws IntrospectionException
+   {
+     setIndex = m;
+   }
+ 
+   private void findMethods(Class beanClass, String getMethodName,
+                            String setMethodName, String getIndexName,
+                            String setIndexName)
+     throws IntrospectionException
+   {
+     try
+       {
+         if(getIndexName != null)
+           {
+             try
+               {
+                 Class[] getArgs = new Class[1];
+                 getArgs[0] = java.lang.Integer.TYPE;
+                 getIndex = beanClass.getMethod(getIndexName,getArgs);
+                 indexedPropertyType = getIndex.getReturnType();
+               }
+             catch(NoSuchMethodException E)
+               {
+               }
+           }
+         if(getIndex != null)
+           {
+             if(setIndexName != null)
+               {
+                 try
+                   {
+                     Class[] setArgs = new Class[2];
+                     setArgs[0] = java.lang.Integer.TYPE;
+                     setArgs[1] = indexedPropertyType;
+                     setIndex = beanClass.getMethod(setIndexName,setArgs);
+                     if(!setIndex.getReturnType().equals(java.lang.Void.TYPE))
+                       {
+                         throw new IntrospectionException(setIndexName
+                                                 + " has non-void return type");
+                       }
+                   }
+                 catch(NoSuchMethodException E)
+                   {
+                   }
+               }
+           }
+         else if(setIndexName != null)
+           {
+             Method[] m = beanClass.getMethods();
+             for(int i=0;i<m.length;i++)
+               {
+                 Method current = m[i];
+                 if(current.getName().equals(setIndexName)
+                    && current.getParameterTypes().length == 2
+                    && (current.getParameterTypes()[0])
+                    .equals(java.lang.Integer.TYPE)
+                    && current.getReturnType().equals(java.lang.Void.TYPE))
+                   {
+                     if(setIndex != null)
+                       {
+                         throw new IntrospectionException("Multiple, different "
+                                      + "set methods found that fit the bill!");
+                       }
+                     else
+                       {
+                         setIndex = current;
+                         indexedPropertyType = current.getParameterTypes()[1];
+                       }
+                   }
+               }
+             if(setIndex == null)
+               {
+                 throw new IntrospectionException("Cannot find get or set "
+                                                  + "methods.");
+               }
+           }
+         else
+           {
+            throw new IntrospectionException("Cannot find get or set methods.");
+           }
+ 
+         Class arrayType = Array.newInstance(indexedPropertyType,0).getClass();
+ 
+         Class[] setArgs = new Class[1];
+         setArgs[0] = arrayType;
+         try
+           {
+             setMethod = beanClass.getMethod(setMethodName,setArgs);
+             if (!setMethod.getReturnType().equals(java.lang.Void.TYPE))
+               {
+                 setMethod = null;
+               }
+           }
+         catch(NoSuchMethodException E)
+           {
+           }
+ 
+         Class[] getArgs = new Class[0];
+         try
+           {
+             getMethod = beanClass.getMethod(getMethodName,getArgs);
+             if (!getMethod.getReturnType().equals(arrayType))
+               {
+                 getMethod = null;
+               }
+           }
+         catch(NoSuchMethodException E)
+           {
+           }
+       }
+     catch(SecurityException E)
+       {
+         throw new IntrospectionException("SecurityException while trying to "
+                                          + "find methods.");
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/IntrospectionException.java gcc-4.1.0/libjava/classpath/java/beans/IntrospectionException.java
*** gcc-4.0.2/libjava/classpath/java/beans/IntrospectionException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/IntrospectionException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* IntrospectionException -- thrown when an exception occurs in introspection
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  * IntrospectionException is thrown when the Introspector fails. Typical
+  * causes are the inability to map a name to its Class, or specifying a
+  * wrong type signature.
+  *
+  * @author John Keiser
+  * @see Introspector
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class IntrospectionException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -3728150539969542619L;
+ 
+   /**
+    * Instantiate this exception with the given message.
+    *
+    * @param msg the message for the exception
+    */
+   public IntrospectionException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/Introspector.java gcc-4.1.0/libjava/classpath/java/beans/Introspector.java
*** gcc-4.0.2/libjava/classpath/java/beans/Introspector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/Introspector.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,608 ----
+ /* java.beans.Introspector
+    Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import gnu.java.beans.BeanInfoEmbryo;
+ import gnu.java.beans.ExplicitBeanInfo;
+ import gnu.java.beans.IntrospectionIncubator;
+ import gnu.java.lang.ClassHelper;
+ 
+ import java.util.Hashtable;
+ import java.util.Vector;
+ 
+ /**
+  * Introspector is the class that does the bulk of the
+  * design-time work in Java Beans.  Every class must have
+  * a BeanInfo in order for an RAD tool to use it; but, as
+  * promised, you don't have to write the BeanInfo class
+  * yourself if you don't want to.  All you have to do is
+  * call getBeanInfo() in the Introspector and it will use
+  * standard JavaBeans-defined method signatures to
+  * determine the information about your class.<P>
+  *
+  * Don't worry about it too much, though: you can provide
+  * JavaBeans with as much customized information as you
+  * want, or as little as you want, using the BeanInfo
+  * interface (see BeanInfo for details).<P>
+  *
+  * <STRONG>Order of Operations</STRONG><P>
+  *
+  * When you call getBeanInfo(class c), the Introspector
+  * first searches for BeanInfo class to see if you
+  * provided any explicit information.  It searches for a
+  * class named &lt;bean class name&gt;BeanInfo in different
+  * packages, first searching the bean class's package
+  * and then moving on to search the beanInfoSearchPath.<P>
+  *
+  * If it does not find a BeanInfo class, it acts as though
+  * it had found a BeanInfo class returning null from all
+  * methods (meaning it should discover everything through
+  * Introspection).  If it does, then it takes the
+  * information it finds in the BeanInfo class to be
+  * canonical (that is, the information speaks for its
+  * class as well as all superclasses).<P>
+  *
+  * When it has introspected the class, calls
+  * getBeanInfo(c.getSuperclass) and adds that information
+  * to the information it has, not adding to any information
+  * it already has that is canonical.<P>
+  *
+  * <STRONG>Introspection Design Patterns</STRONG><P>
+  *
+  * When the Introspector goes in to read the class, it
+  * follows a well-defined order in order to not leave any
+  * methods unaccounted for.  Its job is to step over all
+  * of the public methods in a class and determine whether
+  * they are part of a property, an event, or a method (in
+  * that order).
+  *
+  *
+  * <STRONG>Properties:</STRONG><P>
+  * 
+  * <OL>
+  * <LI>If there is a <CODE>public boolean isXXX()</CODE>
+  *     method, then XXX is a read-only boolean property.
+  *     <CODE>boolean getXXX()</CODE> may be supplied in
+  *     addition to this method, although isXXX() is the
+  *     one that will be used in this case and getXXX()
+  *     will be ignored.  If there is a
+  *     <CODE>public void setXXX(boolean)</CODE> method,
+  *     it is part of this group and makes it a read-write
+  *     property.</LI>
+  * <LI>If there is a
+  *     <CODE>public &lt;type&gt; getXXX(int)</CODE>
+  *     method, then XXX is a read-only indexed property of
+  *     type &lt;type&gt;.  If there is a
+  *     <CODE>public void setXXX(int,&lt;type&gt;)</CODE>
+  *     method, then it is a read-write indexed property of
+  *     type &lt;type&gt;.  There may also be a
+  *     <CODE>public &lt;type&gt;[] getXXX()</CODE> and a
+  *     <CODE>public void setXXX(&lt;type&gt;)</CODE>
+  *     method as well.</LI>
+  * <LI>If there is a
+  *     <CODE>public void setXXX(int,&lt;type&gt;)</CODE>
+  *     method, then it is a write-only indexed property of
+  *     type &lt;type&gt;.  There may also be a
+  *     <CODE>public &lt;type&gt;[] getXXX()</CODE> and a
+  *     <CODE>public void setXXX(&lt;type&gt;)</CODE>
+  *     method as well.</LI>
+  * <LI>If there is a
+  *     <CODE>public &lt;type&gt; getXXX()</CODE> method,
+  *     then XXX is a read-only property of type
+  *     &lt;type&gt;.  If there is a
+  *     <CODE>public void setXXX(&lt;type&gt;)</CODE>
+  *     method, then it will be used for the property and
+  *     the property will be considered read-write.</LI>
+  * <LI>If there is a
+  *     <CODE>public void setXXX(&lt;type&gt;)</CODE>
+  *     method, then as long as XXX is not already used as
+  *     the name of a property, XXX is assumed to be a
+  *     write-only property of type &lt;type&gt;.</LI>
+  * <LI>In all of the above cases, if the setXXX() method
+  *     throws <CODE>PropertyVetoException</CODE>, then the
+  *     property in question is assumed to be constrained.
+  *     No properties are ever assumed to be bound
+  *     (<STRONG>Spec Note:</STRONG> this is not in the
+  *     spec, it just makes sense).  See PropertyDescriptor
+  *     for a description of bound and constrained
+  *     properties.</LI>
+  * </OL>
+  *
+  * <STRONG>Events:</STRONG><P>
+  *
+  * If there is a pair of methods,
+  * <CODE>public void addXXX(&lt;type&gt;)</CODE> and
+  * <CODE>public void removeXXX(&lt;type&gt;)</CODE>, where
+  * &lt;type&gt; is a descendant of
+  * <CODE>java.util.EventListener</CODE>, then the pair of
+  * methods imply that this Bean will fire events to
+  * listeners of type &lt;type&gt;.<P>
+  *
+  * If the addXXX() method throws
+  * <CODE>java.util.TooManyListenersException</CODE>, then
+  * the event set is assumed to be <EM>unicast</EM>.  See
+  * EventSetDescriptor for a discussion of unicast event
+  * sets.<P>
+  *
+  * <STRONG>Spec Note:</STRONG> the spec seems to say that
+  * the listener type's classname must be equal to the XXX
+  * part of addXXX() and removeXXX(), but that is not the
+  * case in Sun's implementation, so I am assuming it is
+  * not the case in general.<P>
+  *
+  * <STRONG>Methods:</STRONG><P>
+  * 
+  * Any public methods (including those which were used
+  * for Properties or Events) are used as Methods.
+  *
+  * @author John Keiser
+  * @since JDK1.1
+  * @see java.beans.BeanInfo
+  */
+ public class Introspector {
+   
+   public static final int USE_ALL_BEANINFO = 1;
+   public static final int IGNORE_IMMEDIATE_BEANINFO = 2;
+   public static final int IGNORE_ALL_BEANINFO = 3;
+ 
+   static String[] beanInfoSearchPath = {"gnu.java.beans.info"};
+   static Hashtable beanInfoCache = new Hashtable();
+   
+   private Introspector() {}
+   
+   /** 
+    * Get the BeanInfo for class <CODE>beanClass</CODE>,
+    * first by looking for explicit information, next by
+    * using standard design patterns to determine
+    * information about the class.
+    *
+    * @param beanClass the class to get BeanInfo about.
+    * @return the BeanInfo object representing the class.
+    */
+   public static BeanInfo getBeanInfo(Class beanClass) 
+     throws IntrospectionException 
+   {
+     BeanInfo cachedInfo;
+     synchronized(beanClass) 
+       {
+ 	cachedInfo = (BeanInfo)beanInfoCache.get(beanClass);
+ 	if(cachedInfo != null) 
+ 	  {
+ 	    return cachedInfo;
+ 	  }
+ 	cachedInfo = getBeanInfo(beanClass,null);
+ 	beanInfoCache.put(beanClass,cachedInfo);
+ 	return cachedInfo;
+       }
+   }
+ 
+   /**
+    * Flush all of the Introspector's internal caches.
+    *
+    * @since 1.2
+    */
+   public static void flushCaches()
+   {
+     beanInfoCache.clear();
+ 
+ 	// Clears all the intermediate ExplicitInfo instances which
+ 	// have been created.
+ 	// This makes sure we have to retrieve stuff like BeanDescriptors
+ 	// again. (Remember that FeatureDescriptor can be modified by the user.)
+ 	ExplicitInfo.flushCaches();
+   }
+ 
+   /**
+    * Flush the Introspector's internal cached information for a given
+    * class.
+    *
+    * @param clz the class to be flushed.
+    * @throws NullPointerException if clz is null.
+    * @since 1.2
+    */
+   public static void flushFromCaches(Class clz)
+   {
+     synchronized (clz)
+       {
+ 	beanInfoCache.remove(clz);
+       }
+   }
+ 
+   /** 
+    * Get the BeanInfo for class <CODE>beanClass</CODE>,
+    * first by looking for explicit information, next by
+    * using standard design patterns to determine
+    * information about the class.  It crawls up the
+    * inheritance tree until it hits <CODE>topClass</CODE>.
+    *
+    * @param beanClass the Bean class.
+    * @param stopClass the class to stop at.
+    * @return the BeanInfo object representing the class.
+    */
+   public static BeanInfo getBeanInfo(Class beanClass, Class stopClass) 
+     throws IntrospectionException 
+   {
+     ExplicitInfo explicit = new ExplicitInfo(beanClass, stopClass);
+ 
+     IntrospectionIncubator ii = new IntrospectionIncubator();
+     ii.setPropertyStopClass(explicit.propertyStopClass);
+     ii.setEventStopClass(explicit.eventStopClass);
+     ii.setMethodStopClass(explicit.methodStopClass);
+     ii.addMethods(beanClass.getMethods());
+     
+     BeanInfoEmbryo currentInfo = ii.getBeanInfoEmbryo();
+     PropertyDescriptor[] p = explicit.explicitPropertyDescriptors;
+     if(p!=null) 
+       {
+ 	for(int i=0;i<p.length;i++) 
+ 	  {
+ 	    if(!currentInfo.hasProperty(p[i])) 
+ 	      {
+ 		currentInfo.addProperty(p[i]);
+ 	      }
+ 	  }
+ 	if(explicit.defaultProperty != -1) 
+ 	  {
+ 	    currentInfo.setDefaultPropertyName(p[explicit.defaultProperty].getName());
+ 	  }
+       }
+     EventSetDescriptor[] e = explicit.explicitEventSetDescriptors;
+     if(e!=null) 
+       {
+ 	for(int i=0;i<e.length;i++) 
+ 	  {
+ 	    if(!currentInfo.hasEvent(e[i])) 
+ 	      {
+ 		currentInfo.addEvent(e[i]);
+ 	      }
+ 	  }
+ 	if(explicit.defaultEvent != -1) 
+ 	  {
+ 	    currentInfo.setDefaultEventName(e[explicit.defaultEvent].getName());
+ 	  }
+       }
+     MethodDescriptor[] m = explicit.explicitMethodDescriptors;
+     if(m!=null) 
+       {
+ 	for(int i=0;i<m.length;i++) 
+ 	  {
+ 	    if(!currentInfo.hasMethod(m[i])) 
+ 	      {
+ 		currentInfo.addMethod(m[i]);
+ 	      }
+ 	  }
+       }
+     
+ 	// Sets the info's BeanDescriptor to the one we extracted from the
+ 	// explicit BeanInfo instance(s) if they contained one. Otherwise we
+ 	// create the BeanDescriptor from scratch.
+ 	// Note: We do not create a copy the retrieved BeanDescriptor which will allow
+ 	// the user to modify the instance while it is cached. However this is how
+ 	// the RI does it.
+ 	currentInfo.setBeanDescriptor(
+ 		(explicit.explicitBeanDescriptor == null ? 
+ 			new BeanDescriptor(beanClass, null) :
+ 			explicit.explicitBeanDescriptor));
+ 
+     currentInfo.setAdditionalBeanInfo(explicit.explicitBeanInfo);
+     currentInfo.setIcons(explicit.im);
+     
+     return currentInfo.getBeanInfo();
+   }
+   
+   /** 
+    * Get the search path for BeanInfo classes.
+    *
+    * @return the BeanInfo search path.
+    */
+   public static String[] getBeanInfoSearchPath() 
+   {
+     return beanInfoSearchPath;
+   }
+   
+   /** 
+    * Set the search path for BeanInfo classes.
+    * @param beanInfoSearchPath the new BeanInfo search
+    *        path.
+    */
+   public static void setBeanInfoSearchPath(String[] beanInfoSearchPath) 
+   {
+     Introspector.beanInfoSearchPath = beanInfoSearchPath;
+   }
+   
+   /** 
+    * A helper method to convert a name to standard Java
+    * naming conventions: anything with two capitals as the
+    * first two letters remains the same, otherwise the
+    * first letter is decapitalized.  URL = URL, I = i,
+    * MyMethod = myMethod.
+    *
+    * @param name the name to decapitalize.
+    * @return the decapitalized name.
+    */
+   public static String decapitalize(String name) 
+   {
+     try 
+       {
+       if(!Character.isUpperCase(name.charAt(0))) 
+ 	{
+ 	  return name;
+ 	} 
+       else 
+ 	{
+ 	try 
+ 	  {
+ 	  if(Character.isUpperCase(name.charAt(1))) 
+ 	    {
+ 	      return name;
+ 	    } 
+ 	  else 
+ 	    {
+ 	      char[] c = name.toCharArray();
+ 	      c[0] = Character.toLowerCase(c[0]);
+ 	      return new String(c);
+ 	    }
+ 	  } 
+ 	catch(StringIndexOutOfBoundsException E) 
+ 	  {
+ 	    char[] c = new char[1];
+ 	    c[0] = Character.toLowerCase(name.charAt(0));
+ 	    return new String(c);
+ 	  }
+ 	}
+       } 
+     catch(StringIndexOutOfBoundsException E) 
+       {
+ 	return name;
+       } 
+     catch(NullPointerException E) 
+       {
+ 	return null;
+       }
+   }
+ 
+   static BeanInfo copyBeanInfo(BeanInfo b) 
+   {
+     java.awt.Image[] icons = new java.awt.Image[4];
+     for(int i=1;i<=4;i++) 
+       {
+ 	icons[i-1] = b.getIcon(i);
+       }
+ 
+     return new ExplicitBeanInfo(b.getBeanDescriptor(),
+ 				b.getAdditionalBeanInfo(),
+ 				b.getPropertyDescriptors(),
+ 				b.getDefaultPropertyIndex(),
+ 				b.getEventSetDescriptors(),
+ 				b.getDefaultEventIndex(),
+ 				b.getMethodDescriptors(),
+ 				icons);
+   }
+ }
+ 
+ class ExplicitInfo 
+ {
+   BeanDescriptor explicitBeanDescriptor;
+   BeanInfo[] explicitBeanInfo;
+   
+   PropertyDescriptor[] explicitPropertyDescriptors;
+   EventSetDescriptor[] explicitEventSetDescriptors;
+   MethodDescriptor[] explicitMethodDescriptors;
+   
+   int defaultProperty;
+   int defaultEvent;
+   
+   java.awt.Image[] im = new java.awt.Image[4];
+   
+   Class propertyStopClass;
+   Class eventStopClass;
+   Class methodStopClass;
+ 
+   static Hashtable explicitBeanInfos = new Hashtable();
+   static Vector emptyBeanInfos = new Vector();
+ 
+   ExplicitInfo(Class beanClass, Class stopClass) 
+   {
+     while(beanClass != null && !beanClass.equals(stopClass)) 
+       {
+ 
+ 	BeanInfo explicit = findExplicitBeanInfo(beanClass);
+ 	
+ 
+ 	if(explicit != null) 
+ 	  {
+ 
+ 	    if(explicitBeanDescriptor == null) 
+ 	      {
+ 		explicitBeanDescriptor = explicit.getBeanDescriptor();
+ 	      }
+ 
+ 	    if(explicitBeanInfo == null) 
+ 	      {
+ 		explicitBeanInfo = explicit.getAdditionalBeanInfo();
+ 	      }
+ 
+ 	    if(explicitPropertyDescriptors == null) 
+ 	      {
+ 		if(explicit.getPropertyDescriptors() != null) 
+ 		  {
+ 		    explicitPropertyDescriptors = explicit.getPropertyDescriptors();
+ 		    defaultProperty = explicit.getDefaultPropertyIndex();
+ 		    propertyStopClass = beanClass;
+ 		  }
+ 	      }
+ 
+ 	    if(explicitEventSetDescriptors == null) 
+ 	      {
+ 		if(explicit.getEventSetDescriptors() != null) 
+ 		  {
+ 		    explicitEventSetDescriptors = explicit.getEventSetDescriptors();
+ 		    defaultEvent = explicit.getDefaultEventIndex();
+ 		    eventStopClass = beanClass;
+ 		  }
+ 	      }
+ 
+ 	    if(explicitMethodDescriptors == null) 
+ 	      {
+ 		if(explicit.getMethodDescriptors() != null) 
+ 		  {
+ 		    explicitMethodDescriptors = explicit.getMethodDescriptors();
+ 		    methodStopClass = beanClass;
+ 		  }
+ 	      }
+ 
+ 	    if(im[0] == null && im[1] == null 
+ 	       && im[2] == null && im[3] == null) 
+ 	      {
+ 		im[0] = explicit.getIcon(0);
+ 		im[1] = explicit.getIcon(1);
+ 		im[2] = explicit.getIcon(2);
+ 		im[3] = explicit.getIcon(3);
+ 	      }
+ 	  }
+ 	beanClass = beanClass.getSuperclass();
+       }
+ 
+     if(propertyStopClass == null) 
+       {
+ 	propertyStopClass = stopClass;
+       }
+ 
+     if(eventStopClass == null) 
+       {
+ 	eventStopClass = stopClass;
+       }
+ 
+     if(methodStopClass == null) 
+       {
+ 	methodStopClass = stopClass;
+       }
+   }
+   
+   /** Throws away all cached data and makes sure we re-instantiate things
+     * like BeanDescriptors again.
+     */
+   static void flushCaches() {
+ 	explicitBeanInfos.clear();
+ 	emptyBeanInfos.clear();
+   }
+   
+   static BeanInfo findExplicitBeanInfo(Class beanClass) 
+   {
+     BeanInfo retval = (BeanInfo)explicitBeanInfos.get(beanClass);
+     if(retval != null) 
+       {
+ 	return retval;
+       } 
+     else if(emptyBeanInfos.indexOf(beanClass) != -1) 
+       {
+ 	return null;
+       } 
+     else 
+       {
+ 	retval = reallyFindExplicitBeanInfo(beanClass);
+ 	if(retval != null) 
+ 	  {
+ 	    explicitBeanInfos.put(beanClass,retval);
+ 	  } 
+ 	else 
+ 	  {
+ 	    emptyBeanInfos.addElement(beanClass);
+ 	  }
+ 	return retval;
+       }
+   }
+   
+   static BeanInfo reallyFindExplicitBeanInfo(Class beanClass) 
+   {
+     ClassLoader beanClassLoader = beanClass.getClassLoader();
+     BeanInfo beanInfo;
+ 
+     beanInfo = getBeanInfo(beanClassLoader, beanClass.getName() + "BeanInfo");
+     if (beanInfo == null)
+       {
+ 	String newName;
+ 	newName = ClassHelper.getTruncatedClassName(beanClass) + "BeanInfo";
+ 
+ 	for(int i = 0; i < Introspector.beanInfoSearchPath.length; i++) 
+ 	  {
+ 	    if (Introspector.beanInfoSearchPath[i].equals("")) 
+ 	      beanInfo = getBeanInfo(beanClassLoader, newName);
+ 	    else 
+ 	      beanInfo = getBeanInfo(beanClassLoader,
+ 				     Introspector.beanInfoSearchPath[i] + "."
+ 				     + newName);
+ 
+ 		// Returns the beanInfo if it exists and the described class matches
+ 		// the one we searched.
+ 	    if (beanInfo != null && beanInfo.getBeanDescriptor() != null &&
+ 			beanInfo.getBeanDescriptor().getBeanClass() == beanClass)
+ 
+ 	      return beanInfo;
+ 	  }
+       }
+ 
+     return beanInfo;
+   }
+ 
+   /**
+    * Returns an instance of the given class name when it can be loaded
+    * through the given class loader, or null otherwise.
+    */
+   private static BeanInfo getBeanInfo(ClassLoader cl, String infoName)
+   {
+     try
+       {
+ 	return (BeanInfo) Class.forName(infoName, true, cl).newInstance();
+       }
+     catch (ClassNotFoundException cnfe)
+       {
+ 	return null;
+       }
+     catch (IllegalAccessException iae)
+       {
+ 	return null;
+       }
+     catch (InstantiationException ie)
+       {
+ 	return null;
+       }
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/MethodDescriptor.java gcc-4.1.0/libjava/classpath/java/beans/MethodDescriptor.java
*** gcc-4.0.2/libjava/classpath/java/beans/MethodDescriptor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/MethodDescriptor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* java.beans.MethodDescriptor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.lang.reflect.Method;
+ 
+ /** MethodDescriptor describes information about a JavaBeans method.
+  ** It's a fairly straightforward class (at least something in this
+  ** package is straightforward!).
+  **
+  ** @author John Keiser
+  ** @since JDK1.1
+  ** @version 1.1.0, 26 Jul 1998
+  **/
+ public class MethodDescriptor extends FeatureDescriptor {
+ 	private Method m;
+ 	private ParameterDescriptor[] parameterDescriptors;
+ 
+ 	/** Create a new MethodDescriptor.
+ 	 ** This method sets the name to the name of the method (Method.getName()).
+ 	 ** @param m the method it will represent.
+ 	 **/
+ 	public MethodDescriptor(Method m) {
+ 		setName(m.getName());
+ 		this.m = m;
+ 	}
+ 
+ 	/** Create a new MethodDescriptor.
+ 	 ** This method sets the name to the name of the method (Method.getName()).
+ 	 ** @param m the method it will represent.
+ 	 ** @param parameterDescriptors descriptions of the parameters (especially names).
+ 	 **/
+ 	public MethodDescriptor(Method m, ParameterDescriptor[] parameterDescriptors) {
+ 		setName(m.getName());
+ 		this.m = m;
+ 		this.parameterDescriptors = parameterDescriptors;
+ 	}
+ 
+ 	/** Get the parameter descriptors from this method.
+ 	 ** Since MethodDescriptor has no way of determining what
+ 	 ** the parameter names were, this defaults to null.
+ 	 **/
+ 	public ParameterDescriptor[] getParameterDescriptors() {
+ 		return parameterDescriptors;
+ 	}
+ 
+ 	/** Get the method this MethodDescriptor represents. **/
+ 	public Method getMethod() {
+ 		return m;
+ 	}
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/ParameterDescriptor.java gcc-4.1.0/libjava/classpath/java/beans/ParameterDescriptor.java
*** gcc-4.0.2/libjava/classpath/java/beans/ParameterDescriptor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/ParameterDescriptor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* java.beans.MethodDescriptor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /** ParameterDescriptor represents a single parameter to a method.
+  ** As it turns out, FeatureDescriptor is sufficient to hold all
+  ** the information.  Use its constructor and methods to set
+  ** the appropriate values.
+  **
+  ** @author John Keiser
+  ** @since JDK1.1
+  ** @version 1.1.0, 26 Jul 1998
+  **/
+ public class ParameterDescriptor extends FeatureDescriptor {
+ 	
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/PropertyChangeEvent.java gcc-4.1.0/libjava/classpath/java/beans/PropertyChangeEvent.java
*** gcc-4.0.2/libjava/classpath/java/beans/PropertyChangeEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/PropertyChangeEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,189 ----
+ /* PropertyChangeEvent.java -- describes a change in a property
+    Copyright (C) 1998, 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.util.EventObject;
+ 
+ /**
+  * PropertyChangeEvents are fired in the PropertyChange and VetoableChange
+  * event classes.  They represent the old and new values as well as the
+  * source Bean. If the old or new value is a primitive type, it must be
+  * wrapped in the appropriate wrapper type (java.lang.Integer for int, etc.,
+  * etc.).
+  *
+  * <p>If the old or new values are unknown (although why that would be I do
+  * not know), they may be null. Also, if the set of properties itself has
+  * changed, the name should be null, and the old and new values may also be
+  * null. Right now Sun put in a propagationId, reserved for future use. Read
+  * the comments on the constructor and on setPropagationId for more
+  * information.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status udpated to 1.4
+  */
+ public class PropertyChangeEvent extends EventObject
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 7042693688939648123L;
+ 
+   /**
+    * The name of the property that changed, may be null. Package visible for
+    * use by PropertyChangeSupport.
+    *
+    * @serial the changed property name
+    */
+   final String propertyName;
+ 
+   /**
+    * The new value of the property, may be null. Package visible for use by
+    * PropertyChangeSupport.
+    *
+    * @serial the new property value
+    */
+   final Object newValue;
+ 
+   /**
+    * The old value of the property, may be null. Package visible for use by
+    * PropertyChangeSupport.
+    *
+    * @serial the old property value
+    */
+   final Object oldValue;
+ 
+   /**
+    * The propagation ID, reserved for future use. May be null.
+    *
+    * @see #getPropagationId()
+    * @serial the Propagation ID
+    */
+   private Object propagationId;
+ 
+   /**
+    * Create a new PropertyChangeEvent. Remember that if you received a
+    * PropertyChangeEvent and are sending a new one, you should also set the
+    * propagation ID from the old PropertyChangeEvent.
+    *
+    * @param source the Bean containing the property
+    * @param propertyName the property's name
+    * @param oldVal the old value of the property
+    * @param newVal the new value of the property
+    * @throws IllegalArgumentException if source is null
+    */
+   public PropertyChangeEvent(Object source, String propertyName,
+                              Object oldVal, Object newVal)
+   {
+     super(source);
+     this.propertyName = propertyName;
+     oldValue = oldVal;
+     newValue = newVal;
+   }
+ 
+   /**
+    * Get the property name. May be null if multiple properties changed.
+    *
+    * @return the property name
+    */
+   public String getPropertyName()
+   {
+     return propertyName;
+   }
+ 
+   /**
+    * Get the property's new value. May be null if multiple properties changed.
+    *
+    * @return the property's new value
+    */
+   public Object getNewValue()
+   {
+     return newValue;
+   }
+ 
+   /**
+    * Get the property's old value. May be null if multiple properties changed.
+    *
+    * @return the property's old value
+    */
+   public Object getOldValue()
+   {
+     return oldValue;
+   }
+ 
+   /**
+    * Set the propagation ID.  This is a way for the event to be passed from
+    * hand to hand and retain a little extra state.  Right now it is unused,
+    * but it should be propagated anyway so that future versions of JavaBeans
+    * can use it, for God knows what.
+    *
+    * @param propagationId the propagation ID
+    * @see #getPropagationId()
+    */
+   public void setPropagationId(Object propagationId)
+   {
+     this.propagationId = propagationId;
+   }
+ 
+   /**
+    * Get the propagation ID. Right now, it is not used for anything.
+    *
+    * @return the propagation ID
+    * @see #setPropagationId(Object)
+    */
+   public Object getPropagationId()
+   {
+     return propagationId;
+   }
+ 
+   /**
+    * Utility method to rollback a change.
+    *
+    * @param event the event to rollback
+    * @return a new event with old and new swapped
+    */
+   PropertyChangeEvent rollback()
+   {
+     PropertyChangeEvent result
+       = new PropertyChangeEvent(source, propertyName, newValue, oldValue);
+     result.propagationId = propagationId;
+     return result;
+   }
+ } // class PropertyChangeEvent
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/PropertyChangeListener.java gcc-4.1.0/libjava/classpath/java/beans/PropertyChangeListener.java
*** gcc-4.0.2/libjava/classpath/java/beans/PropertyChangeListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/PropertyChangeListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* PropertyChangeListener.java -- listen for changes in a bound property
+    Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * PropertyChangeListener allows a class to monitor properties of a Bean for
+  * changes. A propertyChange() event will only be fired <em>after</em> the
+  * property has changed.
+  *
+  * @author John Keiser
+  * @see PropertyChangeSupport
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface PropertyChangeListener extends EventListener
+ {
+   /**
+    * Fired after a Bean's property has changed.
+    *
+    * @param e the change (containing the old and new values)
+    */
+   void propertyChange(PropertyChangeEvent e);
+ } // interface PropertyChangeListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/PropertyChangeListenerProxy.java gcc-4.1.0/libjava/classpath/java/beans/PropertyChangeListenerProxy.java
*** gcc-4.0.2/libjava/classpath/java/beans/PropertyChangeListenerProxy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/PropertyChangeListenerProxy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* PropertyChangeListenerProxy.java -- adds a name to a property listener
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.util.EventListenerProxy;
+ 
+ /**
+  * This class provides an extension to <code>PropertyChangeListener</code> -
+  * associating a name with the listener. This can be used to filter the
+  * changes that one is interested in.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status udpated to 1.4
+  */
+ public class PropertyChangeListenerProxy extends EventListenerProxy
+   implements PropertyChangeListener
+ {
+   /**
+    * The name of the property to listen for. Package visible for use by
+    * PropertyChangeSupport.
+    */
+   final String propertyName;
+ 
+   /**
+    * Create a new proxy which filters property change events and only passes
+    * changes to the named property on to the delegate. A null propertyName
+    * or listener does not fail now, but may cause a NullPointerException down
+    * the road.
+    *
+    * @param propertyName the property's name to filter on
+    * @param listener the delegate listener
+    */
+   public PropertyChangeListenerProxy(String propertyName,
+                                      PropertyChangeListener listener)
+   {
+     super(listener);
+     this.propertyName = propertyName;
+   }
+ 
+   /**
+    * Forwards the event on to the delegate if the property name matches.
+    *
+    * @param event the event to pass on, if it meets the filter
+    * @throws NullPointerException if the delegate this was created with is null
+    */
+   public void propertyChange(PropertyChangeEvent event)
+   {
+     // Note: Sun does not filter, under the assumption that since
+     // PropertyChangeSupport unwraps proxys, this method should never be
+     // called by normal use of listeners.
+     String name = event == null ? null : event.getPropertyName();
+     if (name == null ? propertyName == null : name.equals(propertyName))
+       ((PropertyChangeListener) getListener()).propertyChange(event);
+   }
+ 
+   /**
+    * Gets the name of the property this proxy is filtering on.
+    *
+    * @return the property name
+    */
+   public String getPropertyName()
+   {
+     return propertyName;
+   }
+ } // class PropertyChangeListenerProxy
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/PropertyChangeSupport.java gcc-4.1.0/libjava/classpath/java/beans/PropertyChangeSupport.java
*** gcc-4.0.2/libjava/classpath/java/beans/PropertyChangeSupport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/PropertyChangeSupport.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,488 ----
+ /* PropertyChangeSupport.java -- support to manage property change listeners
+    Copyright (C) 1998, 1999, 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Map.Entry;
+ import java.util.Vector;
+ 
+ /**
+  * PropertyChangeSupport makes it easy to fire property change events and
+  * handle listeners. It allows chaining of listeners, as well as filtering
+  * by property name. In addition, it will serialize only those listeners
+  * which are serializable, ignoring the others without problem. This class
+  * is thread-safe.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class PropertyChangeSupport implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 6401253773779951803L;
+ 
+   /**
+    * Maps property names (String) to named listeners (PropertyChangeSupport).
+    * If this is a child instance, this field will be null.
+    *
+    * @serial the map of property names to named listener managers
+    * @since 1.2
+    */
+   private Hashtable children;
+ 
+   /**
+    * The non-null source object for any generated events.
+    *
+    * @serial the event source
+    */
+   private final Object source;
+ 
+   /**
+    * A field to compare serialization versions - this class uses version 2.
+    *
+    * @serial the serialization format
+    */
+   private static final int propertyChangeSupportSerializedDataVersion = 2;
+ 
+   /**
+    * The list of all registered property listeners. If this instance was
+    * created by user code, this only holds the global listeners (ie. not tied
+    * to a name), and may be null. If it was created by this class, as a
+    * helper for named properties, then this vector will be non-null, and this
+    * instance appears as a value in the <code>children</code> hashtable of
+    * another instance, so that the listeners are tied to the key of that
+    * hashtable entry.
+    */
+   private transient Vector listeners;
+ 
+   /**
+    * Create a PropertyChangeSupport to work with a specific source bean.
+    *
+    * @param source the source bean to use
+    * @throws NullPointerException if source is null
+    */
+   public PropertyChangeSupport(Object source)
+   {
+     this.source = source;
+     if (source == null)
+       throw new NullPointerException();
+   }
+ 
+   /**
+    * Adds a PropertyChangeListener to the list of global listeners. All
+    * property change events will be sent to this listener. The listener add
+    * is not unique: that is, <em>n</em> adds with the same listener will
+    * result in <em>n</em> events being sent to that listener for every
+    * property change. Adding a null listener may cause a NullPointerException
+    * down the road. This method will unwrap a PropertyChangeListenerProxy,
+    * registering the underlying delegate to the named property list.
+    *
+    * @param l the listener to add
+    */
+   public synchronized void addPropertyChangeListener(PropertyChangeListener l)
+   {
+     if (l instanceof PropertyChangeListenerProxy)
+       {
+         PropertyChangeListenerProxy p = (PropertyChangeListenerProxy) l;
+         addPropertyChangeListener(p.propertyName,
+                                   (PropertyChangeListener) p.getListener());
+       }
+     else
+       {
+         if (listeners == null)
+           listeners = new Vector();
+         listeners.add(l);
+       }
+   }
+ 
+   /**
+    * Removes a PropertyChangeListener from the list of global listeners. If
+    * any specific properties are being listened on, they must be deregistered
+    * by themselves; this will only remove the general listener to all
+    * properties. If <code>add()</code> has been called multiple times for a
+    * particular listener, <code>remove()</code> will have to be called the
+    * same number of times to deregister it. This method will unwrap a
+    * PropertyChangeListenerProxy, removing the underlying delegate from the
+    * named property list.
+    *
+    * @param l the listener to remove
+    */
+   public synchronized void
+     removePropertyChangeListener(PropertyChangeListener l)
+   {
+     if (l instanceof PropertyChangeListenerProxy)
+       {
+         PropertyChangeListenerProxy p = (PropertyChangeListenerProxy) l;
+         removePropertyChangeListener(p.propertyName,
+                                      (PropertyChangeListener) p.getListener());
+       }
+     else if (listeners != null)
+       {
+         listeners.remove(l);
+         if (listeners.isEmpty())
+           listeners = null;
+       }
+   }
+ 
+   /**
+    * Returns an array of all registered property change listeners. Those that
+    * were registered under a name will be wrapped in a
+    * <code>PropertyChangeListenerProxy</code>, so you must check whether the
+    * listener is an instance of the proxy class in order to see what name the
+    * real listener is registered under. If there are no registered listeners,
+    * this returns an empty array.
+    *
+    * @return the array of registered listeners
+    * @see PropertyChangeListenerProxy
+    * @since 1.4
+    */
+   public synchronized PropertyChangeListener[] getPropertyChangeListeners()
+   {
+     ArrayList list = new ArrayList();
+     if (listeners != null)
+       list.addAll(listeners);
+     if (children != null)
+       {
+         int i = children.size();
+         Iterator iter = children.entrySet().iterator();
+         while (--i >= 0)
+           {
+             Entry e = (Entry) iter.next();
+             String name = (String) e.getKey();
+             Vector v = ((PropertyChangeSupport) e.getValue()).listeners;
+             int j = v.size();
+             while (--j >= 0)
+               list.add(new PropertyChangeListenerProxy
+                 (name, (PropertyChangeListener) v.get(j)));
+           }
+       }
+     return (PropertyChangeListener[])
+       list.toArray(new PropertyChangeListener[list.size()]);
+   }
+ 
+   /**
+    * Adds a PropertyChangeListener listening on the specified property. Events
+    * will be sent to the listener only if the property name matches. The
+    * listener add is not unique; that is, <em>n</em> adds on a particular
+    * property for a particular listener will result in <em>n</em> events
+    * being sent to that listener when that property is changed. The effect is
+    * cumulative, too; if you are registered to listen to receive events on
+    * all property changes, and then you register on a particular property,
+    * you will receive change events for that property twice. Adding a null
+    * listener may cause a NullPointerException down the road. This method
+    * will unwrap a PropertyChangeListenerProxy, registering the underlying
+    * delegate to the named property list if the names match, and discarding
+    * it otherwise.
+    *
+    * @param propertyName the name of the property to listen on
+    * @param l the listener to add
+    * @throws NullPointerException if propertyName is null
+    */
+   public synchronized void addPropertyChangeListener(String propertyName,
+                                                      PropertyChangeListener l)
+   {
+     while (l instanceof PropertyChangeListenerProxy)
+       {
+         PropertyChangeListenerProxy p = (PropertyChangeListenerProxy) l;
+         if (propertyName == null ? p.propertyName != null
+             : ! propertyName.equals(p.propertyName))
+           return;
+         l = (PropertyChangeListener) p.getListener();
+       }
+     PropertyChangeSupport s = null;
+     if (children == null)
+       children = new Hashtable();
+     else
+       s = (PropertyChangeSupport) children.get(propertyName);
+     if (s == null)
+       {
+         s = new PropertyChangeSupport(source);
+         s.listeners = new Vector();
+         children.put(propertyName, s);
+       }
+     s.listeners.add(l);
+   }
+ 
+   /**
+    * Removes a PropertyChangeListener from listening to a specific property.
+    * If <code>add()</code> has been called multiple times for a particular
+    * listener on a property, <code>remove()</code> will have to be called the
+    * same number of times to deregister it. This method will unwrap a
+    * PropertyChangeListenerProxy, removing the underlying delegate from the
+    * named property list if the names match.
+    *
+    * @param propertyName the property to stop listening on
+    * @param l the listener to remove
+    * @throws NullPointerException if propertyName is null
+    */
+   public synchronized void
+     removePropertyChangeListener(String propertyName, PropertyChangeListener l)
+   {
+     if (children == null)
+       return;
+     PropertyChangeSupport s
+       = (PropertyChangeSupport) children.get(propertyName);
+     if (s == null)
+       return;
+     while (l instanceof PropertyChangeListenerProxy)
+       {
+         PropertyChangeListenerProxy p = (PropertyChangeListenerProxy) l;
+         if (propertyName == null ? p.propertyName != null
+             : ! propertyName.equals(p.propertyName))
+           return;
+         l = (PropertyChangeListener) p.getListener();
+       }
+     s.listeners.remove(l);
+     if (s.listeners.isEmpty())
+       {
+         children.remove(propertyName);
+         if (children.isEmpty())
+           children = null;
+       }
+   }
+ 
+   /**
+    * Returns an array of all property change listeners registered under the
+    * given property name. If there are no registered listeners, this returns
+    * an empty array.
+    *
+    * @return the array of registered listeners
+    * @throws NullPointerException if propertyName is null
+    * @since 1.4
+    */
+   public synchronized PropertyChangeListener[]
+     getPropertyChangeListeners(String propertyName)
+   {
+     if (children == null)
+       return new PropertyChangeListener[0];
+     PropertyChangeSupport s
+       = (PropertyChangeSupport) children.get(propertyName);
+     if (s == null)
+       return new PropertyChangeListener[0];
+     return (PropertyChangeListener[])
+       s.listeners.toArray(new PropertyChangeListener[s.listeners.size()]);
+   }
+ 
+   /**
+    * Fire a PropertyChangeEvent containing the old and new values of the
+    * property to all the global listeners, and to all the listeners for the
+    * specified property name. This does nothing if old and new are non-null
+    * and equal.
+    *
+    * @param propertyName the name of the property that changed
+    * @param oldVal the old value
+    * @param newVal the new value
+    */
+   public void firePropertyChange(String propertyName,
+                                  Object oldVal, Object newVal)
+   {
+     firePropertyChange(new PropertyChangeEvent(source, propertyName,
+                                                oldVal, newVal));
+   }
+ 
+   /**
+    * Fire a PropertyChangeEvent containing the old and new values of the
+    * property to all the global listeners, and to all the listeners for the
+    * specified property name. This does nothing if old and new are equal.
+    *
+    * @param propertyName the name of the property that changed
+    * @param oldVal the old value
+    * @param newVal the new value
+    */
+   public void firePropertyChange(String propertyName, int oldVal, int newVal)
+   {
+     if (oldVal != newVal)
+       firePropertyChange(new PropertyChangeEvent(source, propertyName,
+                                                  new Integer(oldVal),
+                                                  new Integer(newVal)));
+   }
+ 
+   /**
+    * Fire a PropertyChangeEvent containing the old and new values of the
+    * property to all the global listeners, and to all the listeners for the
+    * specified property name. This does nothing if old and new are equal.
+    *
+    * @param propertyName the name of the property that changed
+    * @param oldVal the old value
+    * @param newVal the new value
+    */
+   public void firePropertyChange(String propertyName,
+                                  boolean oldVal, boolean newVal)
+   {
+     if (oldVal != newVal)
+       firePropertyChange(new PropertyChangeEvent(source, propertyName,
+                                                  Boolean.valueOf(oldVal),
+                                                  Boolean.valueOf(newVal)));
+   }
+ 
+   /**
+    * Fire a PropertyChangeEvent to all the global listeners, and to all the
+    * listeners for the specified property name. This does nothing if old and
+    * new values of the event are equal.
+    *
+    * @param event the event to fire
+    * @throws NullPointerException if event is null
+    */
+   public void firePropertyChange(PropertyChangeEvent event)
+   {
+     if (event.oldValue != null && event.oldValue.equals(event.newValue))
+       return;
+     Vector v = listeners; // Be thread-safe.
+     if (v != null)
+       {
+         int i = v.size();
+         while (--i >= 0)
+           ((PropertyChangeListener) v.get(i)).propertyChange(event);
+       }
+     Hashtable h = children; // Be thread-safe.
+     if (h != null && event.propertyName != null)
+       {
+         PropertyChangeSupport s
+           = (PropertyChangeSupport) h.get(event.propertyName);
+         if (s != null)
+           {
+             v = s.listeners; // Be thread-safe.
+             int i = v == null ? 0 : v.size();
+             while (--i >= 0)
+               ((PropertyChangeListener) v.get(i)).propertyChange(event);
+           }
+       }
+   }
+ 
+   /**
+    * Tell whether the specified property is being listened on or not. This
+    * will only return <code>true</code> if there are listeners on all
+    * properties or if there is a listener specifically on this property.
+    *
+    * @param propertyName the property that may be listened on
+    * @return whether the property is being listened on
+    * @throws NullPointerException if propertyName is null
+    */
+   public synchronized boolean hasListeners(String propertyName)
+   {
+     return listeners != null || (children != null
+                                  && children.get(propertyName) != null);
+   }
+ 
+   /**
+    * Saves the state of the object to the stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if anything goes wrong
+    * @serialData this writes out a null-terminated list of serializable
+    *             global property change listeners (the listeners for a named
+    *             property are written out as the global listeners of the
+    *             children, when the children hashtable is saved)
+    */
+   private synchronized void writeObject(ObjectOutputStream s)
+     throws IOException
+   {
+     s.defaultWriteObject();
+     if (listeners != null)
+       {
+         int i = listeners.size();
+         while (--i >= 0)
+           if (listeners.get(i) instanceof Serializable)
+             s.writeObject(listeners.get(i));
+       }
+     s.writeObject(null);
+   }
+ 
+   /**
+    * Reads the object back from stream (deserialization).
+    *
+    * XXX Since serialization for 1.1 streams was not documented, this may
+    * not work if propertyChangeSupportSerializedDataVersion is 1.
+    *
+    * @param s the stream to read from
+    * @throws IOException if reading the stream fails
+    * @throws ClassNotFoundException if deserialization fails
+    * @serialData this reads in a null-terminated list of serializable
+    *             global property change listeners (the listeners for a named
+    *             property are written out as the global listeners of the
+    *             children, when the children hashtable is saved)
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     PropertyChangeListener l = (PropertyChangeListener) s.readObject();
+     while (l != null)
+       {
+         addPropertyChangeListener(l);
+         l = (PropertyChangeListener) s.readObject();
+       }
+     // Sun is not as careful with children as we are, and lets some proxys
+     // in that can never receive events. So, we clean up anything that got
+     // serialized, to make sure our invariants hold.
+     if (children != null)
+       {
+         int i = children.size();
+         Iterator iter = children.entrySet().iterator();
+         while (--i >= 0)
+           {
+             Entry e = (Entry) iter.next();
+             String name = (String) e.getKey();
+             PropertyChangeSupport pcs = (PropertyChangeSupport) e.getValue();
+             if (pcs.listeners == null)
+               pcs.listeners = new Vector();
+             if (pcs.children != null)
+               pcs.listeners.addAll
+                 (Arrays.asList(pcs.getPropertyChangeListeners(name)));
+             if (pcs.listeners.size() == 0)
+               iter.remove();
+             else
+               pcs.children = null;
+           }
+         if (children.size() == 0)
+           children = null;
+       }
+   }
+ } // class PropertyChangeSupport
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/PropertyDescriptor.java gcc-4.1.0/libjava/classpath/java/beans/PropertyDescriptor.java
*** gcc-4.0.2/libjava/classpath/java/beans/PropertyDescriptor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/PropertyDescriptor.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,598 ----
+ /* java.beans.PropertyDescriptor
+    Copyright (C) 1998, 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.beans;
+ 
+ import java.lang.reflect.Method;
+ 
+ /**
+  ** PropertyDescriptor describes information about a JavaBean property,
+  ** by which we mean a property that has been exposed via a pair of
+  ** get and set methods.  (There may be no get method, which means
+  ** the property is write-only, or no set method, which means the
+  ** the property is read-only.)<P>
+  **
+  ** The constraints put on get and set methods are:<P>
+  ** <OL>
+  ** <LI>A get method must have signature
+  **     <CODE>&lt;propertyType&gt; &lt;getMethodName&gt;()</CODE></LI>
+  ** <LI>A set method must have signature
+  **     <CODE>void &lt;setMethodName&gt;(&lt;propertyType&gt;)</CODE></LI>
+  ** <LI>Either method type may throw any exception.</LI>
+  ** <LI>Both methods must be public.</LI>
+  ** </OL>
+  **
+  ** @author John Keiser
+  ** @author Robert Schuster (thebohemian@gmx.net)
+  ** @since 1.1
+  ** @status updated to 1.4
+  **/
+ public class PropertyDescriptor extends FeatureDescriptor
+ {
+     Class propertyType;
+     Method getMethod;
+     Method setMethod;
+ 
+     Class propertyEditorClass;
+     boolean bound;
+     boolean constrained;
+ 
+     PropertyDescriptor(String name)
+     {
+         setName(name);
+     }
+ 
+     /** Create a new PropertyDescriptor by introspection.
+      ** This form of constructor creates the PropertyDescriptor by
+      ** looking for a getter method named <CODE>get&lt;name&gt;()</CODE>
+      ** (or, optionally, if the property is boolean,
+      ** <CODE>is&lt;name&gt;()</CODE>) and
+      ** <CODE>set&lt;name&gt;()</CODE> in class
+      ** <CODE>&lt;beanClass&gt;</CODE>, where &lt;name&gt; has its
+      ** first letter capitalized by the constructor.<P>
+      **
+      ** Note that using this constructor the given property must be read- <strong>and</strong>
+      ** writeable. If the implementation does not both, a read and a write method, an
+      ** <code>IntrospectionException</code> is thrown.
+      **
+      ** <B>Implementation note:</B> If there is both are both isXXX and
+      ** getXXX methods, the former is used in preference to the latter.
+      ** We do not check that an isXXX method returns a boolean. In both
+      ** cases, this matches the behaviour of JDK 1.4<P>
+      **
+      ** @param name the programmatic name of the property, usually
+      **             starting with a lowercase letter (e.g. fooManChu
+      **             instead of FooManChu).
+      ** @param beanClass the class the get and set methods live in.
+      ** @exception IntrospectionException if the methods are not found 
+      **            or invalid.
+      **/
+     public PropertyDescriptor(String name, Class beanClass)
+         throws IntrospectionException
+     {
+         setName(name);
+         if (name.length() == 0)
+         {
+             throw new IntrospectionException("empty property name");
+         }
+         String caps = Character.toUpperCase(name.charAt(0)) + name.substring(1);
+         findMethods(beanClass, "is" + caps, "get" + caps, "set" + caps);
+ 
+         if (getMethod == null)
+         {
+             throw new IntrospectionException(
+                 "Cannot find a is" + caps + " or get" + caps + " method");
+         }
+ 
+         if (setMethod == null)
+         {
+             throw new IntrospectionException(
+                 "Cannot find a " + caps + " method");
+         }
+ 
+         // finally check the methods compatibility        
+         propertyType = checkMethods(getMethod, setMethod);
+     }
+ 
+     /** Create a new PropertyDescriptor by introspection.
+      ** This form of constructor allows you to specify the
+      ** names of the get and set methods to search for.<P>
+      **
+      ** <B>Implementation note:</B> If there is a get method (or
+      ** boolean isXXX() method), then the return type of that method
+      ** is used to find the set method.  If there is no get method,
+      ** then the set method is searched for exhaustively.<P>
+      **
+      ** <B>Spec note:</B>
+      ** If there is no get method and multiple set methods with
+      ** the same name and a single parameter (different type of course),
+      ** then an IntrospectionException is thrown.  While Sun's spec
+      ** does not state this, it can make Bean behavior different on
+      ** different systems (since method order is not guaranteed) and as
+      ** such, can be treated as a bug in the spec.  I am not aware of
+      ** whether Sun's implementation catches this.
+      **
+      ** @param name the programmatic name of the property, usually
+      **             starting with a lowercase letter (e.g. fooManChu
+      **             instead of FooManChu).
+      ** @param beanClass the class the get and set methods live in.
+      ** @param getMethodName the name of the get method or <code>null</code> if the property is write-only.
+      ** @param setMethodName the name of the set method or <code>null</code> if the property is read-only.
+      ** @exception IntrospectionException if the methods are not found 
+      **            or invalid.
+      **/
+     public PropertyDescriptor(
+         String name,
+         Class beanClass,
+         String getMethodName,
+         String setMethodName)
+         throws IntrospectionException
+     {
+         setName(name);
+         findMethods(beanClass, getMethodName, null, setMethodName);
+ 
+         if (getMethod == null && getMethodName != null)
+         {
+             throw new IntrospectionException(
+                 "Cannot find a getter method called " + getMethodName);
+         }
+ 
+         if (setMethod == null && setMethodName != null)
+         {
+             throw new IntrospectionException(
+                 "Cannot find a setter method called " + setMethodName);
+         }
+ 
+         propertyType = checkMethods(getMethod, setMethod);
+     }
+ 
+     /** Create a new PropertyDescriptor using explicit Methods.
+      ** Note that the methods will be checked for conformance to standard
+      ** Property method rules, as described above at the top of this class.
+      **<br>
+      ** It is possible to call this method with both <code>Method</code> arguments
+      ** being <code>null</code>. In such a case the property type is <code>null</code>.
+      ** 
+      ** @param name the programmatic name of the property, usually
+      **             starting with a lowercase letter (e.g. fooManChu
+      **             instead of FooManChu).
+      ** @param readMethod the read method or <code>null</code> if the property is write-only.
+      ** @param writeMethod the write method or <code>null</code> if the property is read-only.
+      ** @exception IntrospectionException if the methods are not found 
+      **            or invalid.
+      **/
+     public PropertyDescriptor(
+         String name,
+         Method readMethod,
+         Method writeMethod)
+         throws IntrospectionException
+     {
+         setName(name);
+         getMethod = readMethod;
+         setMethod = writeMethod;
+         propertyType = checkMethods(getMethod, setMethod);
+     }
+ 
+     /** Get the property type.
+      ** This is the type the get method returns and the set method
+      ** takes in.
+      **/
+     public Class getPropertyType()
+     {
+         return propertyType;
+     }
+ 
+     /** Get the get method.  Why they call it readMethod here and
+      ** get everywhere else is beyond me.
+      **/
+     public Method getReadMethod()
+     {
+         return getMethod;
+     }
+ 
+     /** Sets the read method.<br/>
+      * The read method is used to retrieve the value of a property. A legal
+      * read method must have no arguments. Its return type must not be
+      * <code>void</code>. If this methods succeeds the property type
+      * is adjusted to the return type of the read method.<br/>
+      * <br/>
+      * It is legal to set the read and the write method to <code>null</code>
+      * or provide method which have been declared in distinct classes.
+      * 
+      * @param readMethod The new method to be used or <code>null</code>.
+      * @throws IntrospectionException If the given method is invalid.
+      * @since 1.2
+      */
+     public void setReadMethod(Method readMethod) throws IntrospectionException
+     {
+         propertyType = checkMethods(readMethod, setMethod);
+ 
+         getMethod = readMethod;
+     }
+ 
+     /** Get the set method.  Why they call it writeMethod here and
+      ** set everywhere else is beyond me.
+      **/
+     public Method getWriteMethod()
+     {
+         return setMethod;
+     }
+ 
+     /** Sets the write method.<br/>
+      * The write method is used to set the value of a property. A legal write method
+      * must have a single argument which can be assigned to the property. If no
+      * read method exists the property type changes to the argument type of the
+      * write method.<br/>
+      * <br/>
+      * It is legal to set the read and the write method to <code>null</code>
+      * or provide method which have been declared in distinct classes.
+      * 
+      * @param writeMethod The new method to be used or <code>null</code>.
+      * @throws IntrospectionException If the given method is invalid.
+      * @since 1.2
+      */
+     public void setWriteMethod(Method writeMethod)
+         throws IntrospectionException
+     {
+         propertyType = checkMethods(getMethod, writeMethod);
+ 
+         setMethod = writeMethod;
+     }
+ 
+     /** Get whether the property is bound.  Defaults to false. **/
+     public boolean isBound()
+     {
+         return bound;
+     }
+ 
+     /** Set whether the property is bound.
+      ** As long as the the bean implements addPropertyChangeListener() and
+      ** removePropertyChangeListener(), setBound(true) may safely be called.<P>
+      ** If these things are not true, then the behavior of the system
+      ** will be undefined.<P>
+      **
+      ** When a property is bound, its set method is required to fire the
+      ** <CODE>PropertyChangeListener.propertyChange())</CODE> event
+      ** after the value has changed.
+      ** @param bound whether the property is bound or not.
+      **/
+     public void setBound(boolean bound)
+     {
+         this.bound = bound;
+     }
+ 
+     /** Get whether the property is constrained.  Defaults to false. **/
+     public boolean isConstrained()
+     {
+         return constrained;
+     }
+ 
+     /** Set whether the property is constrained.
+      ** If the set method throws <CODE>java.beans.PropertyVetoException</CODE>
+      ** (or subclass thereof) and the bean implements addVetoableChangeListener()
+      ** and removeVetoableChangeListener(), then setConstrained(true) may safely
+      ** be called.  Otherwise, the system behavior is undefined.
+      ** <B>Spec note:</B> given those strict parameters, it would be nice if it
+      ** got set automatically by detection, but oh well.<P>
+      ** When a property is constrained, its set method is required to:<P>
+      ** <OL>
+      ** <LI>Fire the <CODE>VetoableChangeListener.vetoableChange()</CODE>
+      **     event notifying others of the change and allowing them a chance to
+      **     say it is a bad thing.</LI>
+      ** <LI>If any of the listeners throws a PropertyVetoException, then
+      **     it must fire another vetoableChange() event notifying the others
+      **     of a reversion to the old value (though, of course, the change
+      **     was never made).  Then it rethrows the PropertyVetoException and
+      **     exits.</LI>
+      ** <LI>If all has gone well to this point, the value may be changed.</LI>
+      ** </OL>
+      ** @param constrained whether the property is constrained or not.
+      **/
+     public void setConstrained(boolean constrained)
+     {
+         this.constrained = constrained;
+     }
+ 
+     /** Get the PropertyEditor class.  Defaults to null. **/
+     public Class getPropertyEditorClass()
+     {
+         return propertyEditorClass;
+     }
+ 
+     /** Set the PropertyEditor class.  If the class does not implement
+      ** the PropertyEditor interface, you will likely get an exception
+      ** late in the game.
+      ** @param propertyEditorClass the PropertyEditor class for this 
+      **        class to use.
+      **/
+     public void setPropertyEditorClass(Class propertyEditorClass)
+     {
+         this.propertyEditorClass = propertyEditorClass;
+     }
+ 
+     private void findMethods(
+         Class beanClass,
+         String getMethodName1,
+         String getMethodName2,
+         String setMethodName)
+         throws IntrospectionException
+     {
+         try
+         {
+             // Try the first get method name
+             if (getMethodName1 != null)
+             {
+                 try
+                 {
+                     getMethod =
+                         beanClass.getMethod(getMethodName1, new Class[0]);
+                 }
+                 catch (NoSuchMethodException e)
+                 {}
+             }
+ 
+             // Fall back to the second get method name
+             if (getMethod == null && getMethodName2 != null)
+             {
+                 try
+                 {
+                     getMethod =
+                         beanClass.getMethod(getMethodName2, new Class[0]);
+                 }
+                 catch (NoSuchMethodException e)
+                 {}
+             }
+ 
+             // Try the set method name
+             if (setMethodName != null)
+             {
+                 if (getMethod != null)
+                 {
+                     // If there is a get method, use its return type to help
+                     // select the corresponding set method.
+                     Class propertyType = getMethod.getReturnType();
+                     if (propertyType == Void.TYPE)
+                     {
+                         String msg =
+                             "The property's read method has return type 'void'";
+                         throw new IntrospectionException(msg);
+                     }
+ 
+                     Class[] setArgs = new Class[] { propertyType };
+                     try
+                     {
+                         setMethod = beanClass.getMethod(setMethodName, setArgs);
+                     }
+                     catch (NoSuchMethodException e)
+                     {}
+                 }
+                 else if (getMethodName1 == null && getMethodName2 == null)
+                 {
+                     // If this is a write-only property, choose the first set method
+                     // with the required name, one parameter and return type 'void'
+                     Method[] methods = beanClass.getMethods();
+                     for (int i = 0; i < methods.length; i++)
+                     {
+                         if (methods[i].getName().equals(setMethodName)
+                             && methods[i].getParameterTypes().length == 1
+                             && methods[i].getReturnType() == Void.TYPE)
+                         {
+                             setMethod = methods[i];
+                             break;
+                         }
+                     }
+                 }
+             }
+         }
+         catch (SecurityException e)
+         {
+             // FIXME -- shouldn't we just allow SecurityException to propagate?
+             String msg =
+                 "SecurityException thrown on attempt to access methods.";
+             throw new IntrospectionException(msg);
+         }
+     }
+ 
+     /** Checks whether the given <code>Method</code> instances are legal read and
+      * write methods. The following requirements must be met:<br/>
+      * <ul>
+      * <li>the read method must not have an argument</li>
+      * <li>the read method must have a non void return type</li>
+      * <li>the read method may not exist</li>
+      * <li>the write method must have a single argument</li>
+      * <li>the property type and the read method's return type must be assignable from the
+      * write method's argument type</li>
+      * <li>the write method may not exist</li>
+      * </ul>
+      * While checking the methods a common new property type is calculated. If the method
+      * succeeds this property type is returned.<br/>
+      * <br/>
+      * For compatibility this has to be noted:<br/>
+      * The two methods are allowed to be defined in two distinct classes and may both be null.
+      * 
+      * @param readMethod The new read method to check.
+      * @param writeMethod The new write method to check.
+      * @return The common property type of the two method.
+      * @throws IntrospectionException If any of the above requirements are not met.
+      */
+     private Class checkMethods(Method readMethod, Method writeMethod)
+         throws IntrospectionException
+     {
+         Class newPropertyType = propertyType;
+ 
+         // a valid read method has zero arguments and a non-void return type.
+         if (readMethod != null)
+         {
+             if (readMethod.getParameterTypes().length > 0)
+             {
+                 throw new IntrospectionException("read method has unexpected parameters");
+             }
+ 
+             newPropertyType = readMethod.getReturnType();
+ 
+             if (newPropertyType == Void.TYPE)
+             {
+                 throw new IntrospectionException("read method return type is void");
+             }
+         }
+ 
+         // a valid write method has one argument which can be assigned to the property
+         if (writeMethod != null)
+         {
+             if (writeMethod.getParameterTypes().length != 1)
+             {
+                 String msg = "write method does not have exactly one parameter";
+                 throw new IntrospectionException(msg);
+             }
+ 
+             if (readMethod == null)
+             {
+                 // changes the property type if there is no read method
+                 newPropertyType = writeMethod.getParameterTypes()[0];
+             }
+             else
+             {
+                 // checks whether the write method can be assigned to the return type of the read
+                 // method (if this is not the case, the methods are not compatible)
+                 // note: newPropertyType may be null if no methods or method names have been
+                 // delivered in the constructor.
+                 if (newPropertyType != null
+                     && !newPropertyType.isAssignableFrom(
+                         writeMethod.getParameterTypes()[0]))
+                 {
+                     // note: newPropertyType is the same as readMethod.getReturnType() at this point
+                     throw new IntrospectionException("read and write method are not compatible");
+                 }
+ 
+                 /* note: the check whether both method are defined in related classes makes sense but is not
+                  * done in the JDK. 
+                  * I leave this code here in case someone at Sun decides to add that functionality in later versions (rschuster)
+                 if ((!readMethod
+                     .getDeclaringClass()
+                     .isAssignableFrom(writeMethod.getDeclaringClass()))
+                     && (!writeMethod
+                         .getDeclaringClass()
+                         .isAssignableFrom(readMethod.getDeclaringClass())))
+                 {
+                     String msg =
+                         "set and get methods are not in the same class.";
+                     throw new IntrospectionException(msg);
+                 }
+                 */
+ 
+             }
+         }
+ 
+         return newPropertyType;
+     }
+ 
+     /**
+      * Return a hash code for this object, conforming to the contract described
+      * in {@link Object#hashCode()}.
+      * @return the hash code
+      * @since 1.5
+      */
+     public int hashCode()
+     {
+       return ((propertyType == null ? 0 : propertyType.hashCode())
+               | (propertyEditorClass == null ? 0 : propertyEditorClass.hashCode())
+               | (bound ? Boolean.TRUE : Boolean.FALSE).hashCode()
+               | (constrained ? Boolean.TRUE : Boolean.FALSE).hashCode()
+               | (getMethod == null ? 0 : getMethod.hashCode())
+               | (setMethod == null ? 0 : setMethod.hashCode()));
+     }
+ 
+     /** Compares this <code>PropertyDescriptor</code> against the
+      * given object.
+      * Two PropertyDescriptors are equals if
+      * <ul>
+      * <li>the read methods are equal</li>
+      * <li>the write methods are equal</li>
+      * <li>the property types are equals</li>
+      * <li>the property editor classes are equal</li>
+      * <li>the flags (constrained and bound) are equal</li>
+      * </ul>
+      * @return Whether both objects are equal according to the rules given above.
+      * @since 1.4
+     */
+     public boolean equals(Object o)
+     {
+         if (o instanceof PropertyDescriptor)
+         {
+             PropertyDescriptor that = (PropertyDescriptor) o;
+ 
+             // compares the property types and checks the case where both are null
+             boolean samePropertyType =
+                 (propertyType == null)
+                     ? that.propertyType == null
+                     : propertyType.equals(that.propertyType);
+ 
+             // compares the property editor classes and checks the case where both are null
+             boolean samePropertyEditorClass =
+                 (propertyEditorClass == null)
+                     ? that.propertyEditorClass == null
+                     : propertyEditorClass.equals(that.propertyEditorClass);
+ 
+             // compares the flags for equality
+             boolean sameFlags =
+                 bound == that.bound && constrained == that.constrained;
+ 
+             // compares the read methods and checks the case where both are null
+             boolean sameReadMethod =
+                 (getMethod == null)
+                     ? that.getMethod == null
+                     : getMethod.equals(that.getMethod);
+ 
+             boolean sameWriteMethod =
+                 (setMethod == null)
+                     ? that.setMethod == null
+                     : setMethod.equals(that.setMethod);
+ 
+             return samePropertyType
+                 && sameFlags
+                 && sameReadMethod
+                 && sameWriteMethod
+                 && samePropertyEditorClass;
+         }
+         else
+         {
+             return false;
+         }
+         
+     }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/PropertyEditor.java gcc-4.1.0/libjava/classpath/java/beans/PropertyEditor.java
*** gcc-4.0.2/libjava/classpath/java/beans/PropertyEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/PropertyEditor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,209 ----
+ /* java.beans.PropertyEditor
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  ** PropertyEditors are custom GUI editors for specific types of values.
+  **
+  ** A PropertyEditor can be used, for example, if you are editing a type of value
+  ** that can be more easily represented graphically, such as a Point, or one that
+  ** can be more easily represented by a list, such as a boolean (true/false).<P>
+  **
+  ** A PropertyEditor must be able to display its contents when asked to and
+  ** be able to allow the user to change its underlying field value.  However, it
+  ** is not the PropertyEditor's responsibility to make the change to the
+  ** underlying Object; in fact, the PropertyEditor does not even know about the
+  ** Object it is actually editing--only about the property it is currently
+  ** editing.  When a change is made to the property, the PropertyEditor must
+  ** simply fire a PropertyChangeEvent and allow the RAD tool to actually set
+  ** the property in the underlying Bean.<P>
+  **
+  ** PropertyEditors should not change the Objects they are given by setValue().
+  ** These Objects may or may not be the actual Objects which are properties of
+  ** the Bean being edited.  Instead, PropertyEditors should create a new Object
+  ** and fire a PropertyChangeEvent with the old and new values.<P>
+  **
+  ** PropertyEditors also must support the ability to return a Java
+  ** initialization string.  See the getJavaInitializationString() method for
+  ** details.<P>
+  **
+  ** There are several different ways a PropertyEditor may display and control
+  ** editing of its value.  When multiple types of input and display are
+  ** given by a single PropertyEditor, the RAD tool may decide which of the call
+  ** to support.  Some RAD tools may even be text-only, so even if you support
+  ** a graphical set and get, it may choose the text set and get whenever it can.
+  ** <OL>
+  **   <LI>Every PropertyEditor must support getValue() and setValue().  For
+  **       setValue(), the component must only support it when the argument is
+  **       the same type that the PropertyEditor supports.</LI>
+  **   <LI>Every PropertyEditor must support getJavaInitializationString().</LI>
+  **   <LI>You may support painting the value yourself if you wish.  To do this,
+  **       have isPaintable() return true and implement the paintValue() method.
+  **       This method does not determine in any way how the value is edited;
+  **       merely how it is displayed.</LI>
+  **   <LI>Let the caller of the PropertyEditor give the user a text input.  Do
+  **       this by returning a non-null String from getAsText().  If you support
+  **       text input, you *must* support setAsText().</LI>
+  **   <LI>Give the caller a set of possible values, such as "true"/"false", that
+  **       the user must select from.  To do this, return the list of Strings
+  **       from the getTags() method.  The RAD tool may choose to implement the
+  **       user input any way it wishes, and only guarantees that setAsText() will
+  **       only be called with one of the Strings returned from getTags().</LI>
+  **   <LI>You may support a whole custom editing control by supporting
+  **       getCustomEditor().  To do this, return true from supportsCustomEditor()
+  **       and return a Component that does the job.  It is the component's job,
+  **       or the PropertyEditor's job, to make sure that when the editor changes
+  **       its value, the PropertyChangeEvent is thrown.</LI>
+  ** </OL>
+  **
+  ** The PropertyEditor for a particular Bean can be found using the
+  ** PropertyEditorManager class, which goes through a series of different
+  ** checks to find the appropriate class.<P>
+  **
+  ** A PropertyChangeEvent should be thrown from the PropertyEditor whenever a
+  ** bound  property (a property PropertyDescriptor.isBound() set to true)
+  ** changes.  When this happens, the editor itself should *not* change the value
+  ** itself, but rather allow the RAD tool to call setValue() or setAsText().
+  **
+  ** @author John Keiser
+  ** @since JDK1.1
+  ** @version 1.1.0, 30 June 1998
+  ** @see java.beans.PropertyEditorManager
+  ** @see java.beans.PropertyEditorSupport
+  **/
+ 
+ public interface PropertyEditor {
+ 	/** Called by the RAD tool to set the value of this property for the PropertyEditor.
+ 	 ** If the property type is native, it should be wrapped in the appropriate
+ 	 ** wrapper type.
+ 	 ** @param value the value to set this property to.
+ 	 **/
+ 	void setValue(Object value);
+ 
+ 	/** Accessor method to get the current value the PropertyEditor is working with.
+ 	 ** If the property type is native, it will be wrapped in the appropriate
+ 	 ** wrapper type.
+ 	 ** @return the current value of the PropertyEditor.
+ 	 **/
+ 	Object getValue();
+ 
+ 
+ 	/** Set the value of this property using a String.
+ 	 ** Whether or not this PropertyEditor is editing a String type, this converts
+ 	 ** the String into the type of the PropertyEditor.
+ 	 ** @param text the text to set it to.
+ 	 ** @exception IllegalArgumentException if the String is in the wrong format or setAsText() is not supported.
+ 	 **/
+ 	void setAsText(String text) throws IllegalArgumentException;
+ 
+ 	/** Get the value of this property in String format.
+ 	 ** Many times this can simply use Object.toString().<P>
+ 	 ** Return null if you do not support getAsText()/setAsText().
+ 	 ** <code>setAsText(getAsText())</code> should be valid; i.e. the stuff you spit out in
+ 	 ** getAsText() should be able to go into setAsText().
+ 	 ** @return the value of this property in String format.
+ 	 **/
+ 	String getAsText();
+ 
+ 	/** Get a list of possible Strings which this property type can have.
+ 	 ** The value of these will be used by the RAD tool to construct some sort
+ 	 ** of list box or to check text box input, and the resulting String passed
+ 	 ** to setAsText() should be one of these.  Note, however, that like most things
+ 	 ** with this mammoth, unwieldy interface, this is not guaranteed.  Thus, you
+ 	 ** must check the value in setAsText() anyway.
+ 	 ** @return the list of possible String values for this property type.
+ 	 **/
+ 	String[] getTags();
+ 
+ 
+ 	/** The RAD tool calls this to find out whether the PropertyEditor can paint itself.
+ 	 ** @return true if it can paint itself graphically, false if it cannot.
+ 	 **/
+ 	boolean isPaintable();
+ 
+ 	/** The RAD tool calls this to paint the actual value of the property.
+ 	 ** The Graphics context will have the same current font, color, etc. as the
+ 	 ** parent Container.  You may safely change the font, color, etc. and not
+ 	 ** change them back.<P>
+ 	 ** This method should do a silent no-op if isPaintable() is false.
+ 	 ** @param g the Graphics context to paint on
+ 	 ** @param bounds the rectangle you have reserved to work in
+ 	 **/
+ 	void paintValue(java.awt.Graphics g, java.awt.Rectangle bounds);
+ 
+ 
+ 	/** The RAD tool calls this to find out whether the PropertyEditor supports a custom component to edit and display itself.
+ 	 ** @return true if getCustomEditor() will return a component, false if not.
+ 	 **/
+ 	boolean supportsCustomEditor();
+ 
+ 	/** The RAD tool calls this to grab the component that can edit this type.
+ 	 ** The component may be painted anywhere the RAD tool wants to paint it--
+ 	 ** even in its own window.<P>
+ 	 ** The component must hook up with the PropertyEditor and, whenever a
+ 	 ** change to the value is made, fire a PropertyChangeEvent to the source.<P>
+ 	 ** @return the custom editor for this property type.
+ 	 **/
+ 	java.awt.Component getCustomEditor();
+ 
+ 
+ 	/** Adds a property change listener to this PropertyEditor.
+ 	 ** @param listener the listener to add
+ 	 **/
+ 	void addPropertyChangeListener(PropertyChangeListener listener);
+ 
+ 	/** Removes a property change listener from this PropertyEditor.
+ 	 ** @param listener the listener to remove
+ 	 **/
+ 	void removePropertyChangeListener(PropertyChangeListener listener);
+ 
+ 	/** Get a Java language-specific String which could be used to create an Object
+ 	 ** of the specified type.  Every PropertyEditor must support this.<P>
+ 	 ** The reason for this is that while most RAD tools will serialize the Beans
+ 	 ** and deserialize them at runtime, some RAD tools will generate code that
+ 	 ** creates the Beans.  Examples of Java initialization strings would be:<P>
+ 	 ** <OL>
+ 	 **     <LI><CODE>2</CODE></LI>
+ 	 **     <LI><CODE>"I am a String"</CODE></LI>
+ 	 **     <LI><CODE>new MyObject(2, "String", new StringBuffer())</CODE></LI>
+ 	 ** </OL>
+ 	 ** @return the initialization string for this object in Java.
+ 	 **/
+ 	String getJavaInitializationString();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/PropertyEditorManager.java gcc-4.1.0/libjava/classpath/java/beans/PropertyEditorManager.java
*** gcc-4.0.2/libjava/classpath/java/beans/PropertyEditorManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/PropertyEditorManager.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,215 ----
+ /* java.beans.PropertyEditorManager
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import gnu.java.beans.editors.ColorEditor;
+ import gnu.java.beans.editors.FontEditor;
+ import gnu.java.beans.editors.NativeBooleanEditor;
+ import gnu.java.beans.editors.NativeByteEditor;
+ import gnu.java.beans.editors.NativeDoubleEditor;
+ import gnu.java.beans.editors.NativeFloatEditor;
+ import gnu.java.beans.editors.NativeIntEditor;
+ import gnu.java.beans.editors.NativeLongEditor;
+ import gnu.java.beans.editors.NativeShortEditor;
+ import gnu.java.beans.editors.StringEditor;
+ import gnu.java.lang.ClassHelper;
+ 
+ import java.awt.Color;
+ import java.awt.Font;
+ 
+ /**
+  * PropertyEditorManager is used to find property editors
+  * for various types (not necessarily Beans).<P>
+  *
+  * It first checks to see if the property editor is
+  * already registered; if it is, that property editor is
+  * used.  Next it takes the type's classname and appends
+  * "Editor" to it, and searches first in the class's
+  * package and then in the property editor search path.
+  *
+  * <p>Default property editors are provided for:</p>
+  * 
+  * <ol>
+  * <li>boolean, byte, short, int, long, float, and double</li>
+  * <li>java.lang.String</li>
+  * <li>java.awt.Color</li>
+  * <li>java.awt.Font</li>
+  * </ol>
+  *
+  * <p><strong>Spec Suggestion:</strong> Perhaps an editor for
+  * Filename or something like it should be provided.  As well
+  * as char.</p>
+  *
+  * @author John Keiser
+  * @since 1.1
+  * @version 1.1.0, 29 Jul 1998
+  */
+ 
+ public class PropertyEditorManager
+ {
+   static java.util.Hashtable editors = new java.util.Hashtable();
+   static String[] editorSearchPath = { "gnu.java.beans.editors",
+                                        "sun.beans.editors" };
+ 
+   static
+     {
+       registerEditor(Boolean.TYPE, NativeBooleanEditor.class);
+       registerEditor(Byte.TYPE,    NativeByteEditor.class);
+       registerEditor(Short.TYPE,   NativeShortEditor.class);
+       registerEditor(Integer.TYPE, NativeIntEditor.class);
+       registerEditor(Long.TYPE,    NativeLongEditor.class);
+       registerEditor(Float.TYPE,   NativeFloatEditor.class);
+       registerEditor(Double.TYPE,  NativeDoubleEditor.class);
+       registerEditor(String.class, StringEditor.class);
+       registerEditor(Color.class,  ColorEditor.class);
+       registerEditor(Font.class,   FontEditor.class);
+     }
+ 
+   /**
+    * Beats me why this class can be instantiated, but there
+    * you have it.
+    */
+   public PropertyEditorManager()
+   {
+     // Do nothing here
+   }
+ 
+   /**
+    * Register an editor for a class.  Replaces old editor
+    * if there was one registered before.
+    *
+    * @param editedClass the class that the property editor
+    *        will edit.
+    * @param editorClass the PropertyEditor class.
+    */
+   public static void registerEditor(Class editedClass, Class editorClass)
+   {
+     editors.put(editedClass, editorClass);
+   }
+ 
+   /**
+    * Returns a new instance of the property editor for the
+    * specified class.
+    *
+    * @param editedClass the class that the property editor
+    *        will edit.
+    * @return a PropertyEditor instance that can edit the
+    *         specified class.
+    */
+   public static PropertyEditor findEditor(Class editedClass)
+   {
+     try
+       {
+         Class found = (Class)editors.get(editedClass);
+         if(found != null)
+           {
+             return (PropertyEditor)found.newInstance();
+           }
+ 
+ 	ClassLoader contextClassLoader
+ 		= Thread.currentThread().getContextClassLoader();
+ 
+         try
+           {
+             found = Class.forName(editedClass.getName()+"Editor", true,
+ 				  contextClassLoader);
+             registerEditor(editedClass,found);
+             return (PropertyEditor)found.newInstance();
+           }
+         catch(ClassNotFoundException E)
+           {
+           }
+ 
+         String appendName
+ 		= "."
+ 		+ ClassHelper.getTruncatedClassName(editedClass)
+ 		+ "Editor";
+         synchronized(editorSearchPath)
+           {
+             for(int i=0;i<editorSearchPath.length;i++)
+               {
+                 try
+                   {
+                     found = Class.forName(editorSearchPath[i] + appendName,
+ 					  true, contextClassLoader);
+                     registerEditor(editedClass,found);
+                     return (PropertyEditor)found.newInstance();
+                   }
+                 catch(ClassNotFoundException E)
+                   {
+                   }
+               }
+           }
+       }
+     catch(InstantiationException E)
+       {
+       }
+     catch(IllegalAccessException E)
+       {
+       }
+     
+     return null;
+   }
+ 
+   /**
+    * Get the editor search path.
+    * As a minor departure from the spec, the default value
+    * for the editor search path is "gnu.java.beans.editors",
+    * "sun.beans.editors".
+    *
+    * @return the editor search path.
+    */
+   public static String[] getEditorSearchPath()
+   {
+     return editorSearchPath;
+   }
+ 
+   /**
+    * Set the editor search path.
+    *
+    * @param editorSearchPath the new value for the editor search path.
+    */
+   public static void setEditorSearchPath(String[] editorSearchPath)
+   {
+     synchronized(editorSearchPath)
+       {
+         PropertyEditorManager.editorSearchPath = editorSearchPath;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/PropertyEditorSupport.java gcc-4.1.0/libjava/classpath/java/beans/PropertyEditorSupport.java
*** gcc-4.0.2/libjava/classpath/java/beans/PropertyEditorSupport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/PropertyEditorSupport.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,265 ----
+ /* java.beans.PropertyEditorSupport
+    Copyright (C) 1998, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ 
+ /**
+  * PropertyEditorSupport helps with PropertyEditors,
+  * implementing base functionality that they usually must
+  * have but which is a pain to implement.  You may extend
+  * from this class or use it as a standalone.<P>
+  *
+  * This class does not do any painting or actual editing.
+  * For that, you must use or extend it.  See the
+  * PropertyEditor class for better descriptions of what
+  * the various methods do.
+  *
+  * @author John Keiser
+  * @author Robert Schuster
+  * @since 1.1
+  * @status updated to 1.5
+  */
+ public class PropertyEditorSupport implements PropertyEditor
+ {
+   Object eventSource;
+   Object value;
+   PropertyChangeSupport pSupport;
+ 
+   /** Call this constructor when you are deriving from
+    * PropertyEditorSupport.
+    *
+    * Using this constructor the event source is this PropertyEditorSupport
+    * instance itself.
+    *
+    * @since 1.5
+    * @specnote this was <code>protected</code> prior to 1.5
+    */
+   public PropertyEditorSupport()
+   {
+     eventSource = this;
+     pSupport = new PropertyChangeSupport(this);
+   }
+ 
+   /** Call this constructor when you are using
+    * PropertyEditorSupport as a helper object.
+    *
+    * This constructor throws a NullPointerException when <code>source</code> is <code>null</code>,
+    * for compatibility reasons with J2SDK 1.5.0 .
+    *
+    * @param source The source to use when firing
+    * property change events.
+    * @since 1.5
+    * @specnote this was <code>protected</code> prior to 1.5
+    */
+   public PropertyEditorSupport(Object source)
+   {
+     // note: constructor rejects source being null for the sake of compatibility
+     // with official 1.5.0 implementation
+     if (source == null)
+       throw new NullPointerException("Event source must not be null.");
+ 
+     eventSource = source;
+     pSupport = new PropertyChangeSupport(eventSource);
+   }
+ 
+   /** Sets the current value of the property and a property change
+    * event is fired to all registered PropertyChangeListener instances.
+    *
+    * @param newValue The new value for the property.
+    */
+   public void setValue(Object newValue)
+   {
+     value = newValue;
+ 
+     // specification in java.beans.PropertyChangeEvent says
+     // that without a property name (first argument) the
+     // new and the old value should always be null
+     pSupport.firePropertyChange(null, null, null);
+   }
+ 
+   /** Gets the current value of the property.
+    *
+    * @return the current value of the property.
+    */
+   public Object getValue()
+   {
+     return value;
+   }
+ 
+   /** Gets whether this object is paintable or not.
+    *
+    * @return <CODE>false</CODE>
+    */
+   public boolean isPaintable()
+   {
+     return false;
+   }
+ 
+   /** Paints this object.  This class does nothing in
+    * this method.
+    */
+   public void paintValue(java.awt.Graphics g, java.awt.Rectangle r)
+   {
+   }
+ 
+   /** Gets the Java initialization String for the current
+    * value of the Object.  This class returns gibberish or
+    * null (though the spec does not say which).<P>
+    * <STRONG>Implementation Note:</STRONG> This class
+    * returns the string "@$#^" to make sure the code will
+    * be broken, so that you will know to override it when
+    * you create your own property editor.
+    *
+    * @return the Java initialization string.
+    */
+   public String getJavaInitializationString()
+   {
+     return "@$#^";
+   }
+ 
+   /** Gets the value as text.
+    * In this class, you cannot count on getAsText() doing
+    * anything useful, although in this implementation I
+    * do toString().
+    *
+    * @return the value as text.
+    */
+   public String getAsText()
+   {
+     return value != null ? value.toString() : "null";
+   }
+ 
+   /** Sets the value as text.
+    * In this class, you cannot count on setAsText() doing
+    * anything useful across implementations.
+    * <STRONG>Implementation Note:</STRONG> In this
+    * implementation it checks if the String is "null", and
+    * if it is, sets the value to null, otherwise it throws
+    * an IllegalArgumentException.
+    *
+    * @param s the text to convert to a new value.
+    * @exception IllegalArgumentException if the text is
+    * malformed.
+    */
+   public void setAsText(String s) throws IllegalArgumentException
+   {
+     if (s.equals("null"))
+       setValue(null);
+     else
+       throw new IllegalArgumentException();
+   }
+ 
+   /** Returns a list of possible choices for the value.
+    *
+    * @return <CODE>null</CODE>
+    */
+   public String[] getTags()
+   {
+     return null;
+   }
+ 
+   /** Returns a custom component to edit the value.
+    *
+    * @return <CODE>null</CODE> in this class.
+    */
+   public java.awt.Component getCustomEditor()
+   {
+     return null;
+   }
+ 
+   /** Finds out whether this property editor supports a
+    * custom component to edit its value.
+    *
+    * @return <CODE>false</CODE> in this class.
+    */
+   public boolean supportsCustomEditor()
+   {
+     return false;
+   }
+ 
+   /** Adds a property change listener to this property editor.
+    *
+    * @param l the listener to add.
+    */
+   public void addPropertyChangeListener(PropertyChangeListener l)
+   {
+     pSupport.addPropertyChangeListener(l);
+   }
+ 
+   /** Removes a property change listener from this property editor.
+    *
+    * @param l the listener to remove.
+    */
+   public void removePropertyChangeListener(PropertyChangeListener l)
+   {
+     pSupport.removePropertyChangeListener(l);
+   }
+ 
+   /** Notifies people that we've changed, although we don't
+    * tell them just how.
+    */
+   public void firePropertyChange()
+   {
+     pSupport.firePropertyChange(null, null, null);
+   }
+ 
+   /** Returns the bean that is used as the source of events.
+    *
+    * @return The event source object
+    * @since 1.5
+    */
+   public Object getSource()
+   {
+     return eventSource;
+   }
+ 
+   /** Sets the bean that is used as the source of events
+    * when property changes occur.
+    *
+    * The event source bean is for informational purposes only
+    * and should not be changed by the <code>PropertyEditor</code>.
+    *
+    * @param source
+    * @since 1.5
+    */
+   public void setSource(Object source)
+   {
+     eventSource = source;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/PropertyVetoException.java gcc-4.1.0/libjava/classpath/java/beans/PropertyVetoException.java
*** gcc-4.0.2/libjava/classpath/java/beans/PropertyVetoException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/PropertyVetoException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* PropertyVetoException.java -- thrown to veto a proposed property change
+    Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  * PropertyVetoException is thrown when a VetoableChangeListener doesn't
+  * like the proposed change.
+  *
+  * @author John Keiser
+  * @see VetoableChangeListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class PropertyVetoException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 129596057694162164L;
+ 
+   /**
+    * The vetoed change.
+    *
+    * @serial the event that was vetoed
+    */
+   private final PropertyChangeEvent evt;
+ 
+   /**
+    * Instantiate this exception with the given message and property change.
+    *
+    * @param msg the reason for the veto
+    * @param changeEvent the PropertyChangeEvent that was thrown
+    */
+   public PropertyVetoException(String msg, PropertyChangeEvent changeEvent)
+   {
+     super(msg);
+     evt = changeEvent;
+   }
+ 
+   /**
+    * Get the PropertyChange event that was vetoed.
+    *
+    * @return the vetoed change
+    */
+   public PropertyChangeEvent getPropertyChangeEvent()
+   {
+     return evt;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/SimpleBeanInfo.java gcc-4.1.0/libjava/classpath/java/beans/SimpleBeanInfo.java
*** gcc-4.0.2/libjava/classpath/java/beans/SimpleBeanInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/SimpleBeanInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,139 ----
+ /* java.beans.SimpleBeanInfo
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.awt.Image;
+ import java.awt.Toolkit;
+ 
+ /**
+  ** SimpleBeanInfo is a class you may extend to more easily
+  ** provide select information to the Introspector.  It
+  ** implements all of the methods in BeanInfo by returning
+  ** null and forces the Introspector to behave exactly as
+  ** if there were no BeanInfo class at all (Introspecting
+  ** everything).<P>
+  **
+  ** Overriding one or two of these functions
+  ** to give explicit information on only those things you
+  ** wish to give explicit information is perfectly safe,
+  ** and even desirable.<P>
+  **
+  ** See the BeanInfo class for information on what the
+  ** various methods actually do.
+  **
+  ** @author John Keiser
+  ** @since JDK1.1
+  ** @version 1.1.0, 29 Jul 1998
+  ** @see java.beans.BeanInfo
+  **/
+ 
+ public class SimpleBeanInfo implements BeanInfo {
+ 	/** Force Introspection of the general bean info.
+ 	 ** @return <CODE>null</CODE>.
+ 	 **/
+ 	public BeanDescriptor getBeanDescriptor() {
+ 		return null;
+ 	}
+ 
+ 	/** Force Introspection of the events this Bean type
+ 	 ** fires.
+ 	 ** @return <CODE>null</CODE>
+ 	 **/
+ 	public EventSetDescriptor[] getEventSetDescriptors() {
+ 		return null;
+ 	}
+ 
+ 	/** Say that there is no "default" event set.
+ 	 ** @return <CODE>-1</CODE>.
+ 	 **/
+ 	public int getDefaultEventIndex() {
+ 		return -1;
+ 	}
+ 
+ 	/** Force Introspection of the Bean properties.
+ 	 ** @return <CODE>null</CODE>.
+ 	 **/
+ 	public PropertyDescriptor[] getPropertyDescriptors() {
+ 		return null;
+ 	}
+ 
+ 	/** Say that there is no "default" property.
+ 	 ** @return <CODE>-1</CODE>.
+ 	 **/
+ 	public int getDefaultPropertyIndex() {
+ 		return -1;
+ 	}
+ 
+ 	/** Force Introspection of the Bean's methods.
+ 	 ** @return <CODE>null</CODE>.
+ 	 **/
+ 	public MethodDescriptor[] getMethodDescriptors() {
+ 		return null;
+ 	}
+ 
+ 	/** Tell the Introspector to go look for other BeanInfo
+ 	 ** itself.
+ 	 ** @return <CODE>null</CODE>.
+ 	 **/
+ 	public BeanInfo[] getAdditionalBeanInfo() {
+ 		return null;
+ 	}
+ 
+ 	/** Say that this Bean has no icons.
+ 	 ** @param iconType the type of icon
+ 	 ** @return <CODE>null</CODE>.
+ 	 **/
+ 	public Image getIcon(int iconType) {
+ 		return null;
+ 	}
+ 
+ 	/** Helper method to load an image using the Bean class
+ 	 ** getResource() method on the BeanInfo class (using
+ 	 ** getClass(), since you'll extend this class to get
+ 	 ** the BeanInfo).  Basically it's assumed that the Bean
+ 	 ** and its BeanInfo are both loaded by the same
+ 	 ** ClassLoader, generally a reasonable assumption.
+ 	 ** @param location the URL relative
+ 	 ** @return the Image in question.
+ 	 **/
+ 	public Image loadImage(String location) {
+ 		return Toolkit.getDefaultToolkit().getImage(getClass().getResource(location));
+ 	}
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/Statement.java gcc-4.1.0/libjava/classpath/java/beans/Statement.java
*** gcc-4.0.2/libjava/classpath/java/beans/Statement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/Statement.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,373 ----
+ /* java.beans.Statement
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.lang.reflect.Array;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Method;
+ 
+ import java.util.HashMap;
+ import java.util.WeakHashMap;
+ 
+ /**
+  * class Statement
+  *
+  * A Statement captures the execution of an object method.  It stores
+  * the object, the method to call, and the arguments to the method and
+  * provides the ability to execute the method on the object, using the
+  * provided arguments.
+  *
+  * @since 1.4
+  */
+ public class Statement
+ {
+   /** Nested map for the relation between a class, its instances and their
+     * names.
+     */
+   private static HashMap classMaps = new HashMap();
+ 
+   private Object target;
+   private String methodName;
+   private Object[] arguments;
+ 
+   // One or the other of these will get a value after execute is
+   // called once, but not both.
+   private transient Method method;
+   private transient Constructor ctor;
+ 
+   /**
+    * <p>Constructs a statement representing the invocation of
+    * object.methodName(arg[0], arg[1], ...);</p>
+    *
+    * <p>If the argument array is null it is replaced with an
+    * array of zero length.</p>
+    *
+    * @param target The object to invoke the method on.
+    * @param methodName The object method to invoke.
+    * @param arguments An array of arguments to pass to the method.
+    */
+   public Statement(Object target, String methodName, Object[] arguments)
+   {
+     this.target = target;
+     this.methodName = methodName;
+     this.arguments = (arguments != null) ? arguments : new Object[0];
+     storeTargetName(target);
+   }
+ 
+   /** Creates a name for the target instance or does nothing if the object's
+    * name is already known. This makes sure that there *is* a name for every
+    * target instance.
+    */
+   private static synchronized void storeTargetName(Object obj)
+   {
+     Class klass = obj.getClass();
+     WeakHashMap names = (WeakHashMap) classMaps.get(klass);
+ 
+     if ( names == null )
+     {
+       names = new WeakHashMap();
+ 
+       names.put(obj,
+         ( klass == String.class ? ("\"" + obj + "\"") :
+         (klass.getName() + names.size()) ));
+ 
+       classMaps.put(klass, names);
+ 
+       return;
+     }
+ 
+     String targetName = (String) names.get(obj);
+     if ( targetName == null )
+     {
+       names.put(obj,
+         ( klass == String.class ? ("\"" + obj + "\"") :
+         (klass.getName() + names.size()) ));
+     }
+ 
+     // Nothing to do. The given object was already stored.
+   }
+ 
+   /**
+    * Execute the statement.
+    *
+    * Finds the specified method in the target object and calls it with
+    * the arguments given in the constructor.
+    *
+    * The most specific method according to the JLS(15.11) is used when
+    * there are multiple methods with the same name.
+    *
+    * Execute performs some special handling for methods and
+    * parameters:
+    *
+    * Static methods can be executed by providing the class as a
+    * target.
+    *
+    * The method name new is reserved to call the constructor 
+    * new() will construct an object and return it.  Not useful unless
+    * an expression :-)
+    *
+    * If the target is an array, get and set as defined in
+    * java.util.List are recognized as valid methods and mapped to the
+    * methods of the same name in java.lang.reflect.Array.
+    *
+    * The native datatype wrappers Boolean, Byte, Character, Double,
+    * Float, Integer, Long, and Short will map to methods that have
+    * native datatypes as parameters, in the same way as Method.invoke.
+    * However, these wrappers also select methods that actually take
+    * the wrapper type as an argument.
+    *
+    * The Sun spec doesn't deal with overloading between int and
+    * Integer carefully.  If there are two methods, one that takes an
+    * Integer and the other taking an int, the method chosen is not
+    * specified, and can depend on the order in which the methods are
+    * declared in the source file.
+    *
+    * @throws Exception if an exception occurs while locating or
+    * 		       invoking the method.
+    */
+   public void execute() throws Exception
+   {
+     doExecute();
+   }
+   
+   private static Class wrappers[] = 
+     {
+       Boolean.class, Byte.class, Character.class, Double.class, Float.class,
+       Integer.class, Long.class, Short.class
+     };
+ 
+   private static Class natives[] = 
+     {
+       Boolean.TYPE, Byte.TYPE, Character.TYPE, Double.TYPE, Float.TYPE,
+       Integer.TYPE, Long.TYPE, Short.TYPE
+     };
+ 
+   // Given a wrapper class, return the native class for it.  For
+   // example, if c is Integer, Integer.TYPE is returned.
+   private Class unwrap(Class c)
+   {
+     for (int i = 0; i < wrappers.length; i++)
+       if (c == wrappers[i])
+ 	return natives[i];
+     return null;
+   }
+ 
+   // Return true if all args can be assigned to params, false
+   // otherwise.  Arrays are guaranteed to be the same length.
+   private boolean compatible(Class[] params, Class[] args)
+   {
+     for (int i = 0; i < params.length; i++)
+       {
+ 	// Treat Integer like int if appropriate
+ 	Class nativeType = unwrap(args[i]);
+ 	if (nativeType != null && params[i].isPrimitive()
+ 	    && params[i].isAssignableFrom(nativeType))
+ 	  continue;
+ 	if (params[i].isAssignableFrom(args[i]))
+ 	  continue;
+ 
+ 	return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * Return true if the method arguments in first are more specific
+    * than the method arguments in second, i.e. all args in first can
+    * be assigned to those in second.
+    *
+    * A method is more specific if all parameters can also be fed to
+    * the less specific method, because, e.g. the less specific method
+    * accepts a base class of the equivalent argument for the more
+    * specific one.
+    *
+    * @param first a <code>Class[]</code> value
+    * @param second a <code>Class[]</code> value
+    * @return a <code>boolean</code> value
+    */
+   private boolean moreSpecific(Class[] first, Class[] second)
+   {
+     for (int j=0; j < first.length; j++)
+       {
+ 	if (second[j].isAssignableFrom(first[j]))
+ 	  continue;
+ 	return false;
+       }
+     return true;
+   }
+ 
+   final Object doExecute() throws Exception
+   {
+     Class klazz = (target instanceof Class)
+ 	? (Class) target : target.getClass();
+     Object args[] = (arguments == null) ? new Object[0] : arguments;
+     Class argTypes[] = new Class[args.length];
+     for (int i = 0; i < args.length; i++)
+       argTypes[i] = args[i].getClass();
+ 
+     if (target.getClass().isArray())
+       {
+ 	// FIXME: invoke may have to be used.  For now, cast to Number
+ 	// and hope for the best.  If caller didn't behave, we go boom
+ 	// and throw the exception.
+ 	if (methodName.equals("get") && argTypes.length == 1)
+ 	  return Array.get(target, ((Number)args[0]).intValue());
+ 	if (methodName.equals("set") && argTypes.length == 2)
+ 	  {
+ 	    Object obj = Array.get(target, ((Number)args[0]).intValue());
+ 	    Array.set(target, ((Number)args[0]).intValue(), args[1]);
+ 	    return obj;
+ 	  }
+ 	throw new NoSuchMethodException("No matching method for statement " + toString());
+       }
+ 
+     // If we already cached the method, just use it.
+     if (method != null)
+       return method.invoke(target, args);
+     else if (ctor != null)
+       return ctor.newInstance(args);
+ 
+     // Find a matching method to call.  JDK seems to go through all
+     // this to find the method to call.
+ 
+     // if method name or length don't match, skip
+     // Need to go through each arg
+     // If arg is wrapper - check if method arg is matchable builtin
+     //  or same type or super
+     //  - check that method arg is same or super
+ 
+     if (methodName.equals("new") && target instanceof Class)
+       {
+ 	Constructor ctors[] = klazz.getConstructors();
+ 	for (int i = 0; i < ctors.length; i++)
+ 	  {
+ 	    // Skip methods with wrong number of args.
+ 	    Class ptypes[] = ctors[i].getParameterTypes();
+ 
+ 	    if (ptypes.length != args.length)
+ 	      continue;
+ 
+ 	    // Check if method matches
+ 	    if (!compatible(ptypes, argTypes))
+ 	      continue;
+ 
+ 	    // Use method[i] if it is more specific. 
+ 	    // FIXME: should this check both directions and throw if
+ 	    // neither is more specific?
+ 	    if (ctor == null)
+ 	      {
+ 		ctor = ctors[i];
+ 		continue;
+ 	      }
+ 	    Class mptypes[] = ctor.getParameterTypes();
+ 	    if (moreSpecific(ptypes, mptypes))
+ 	      ctor = ctors[i];
+ 	  }
+ 	if (ctor == null)
+ 	  throw new InstantiationException("No matching constructor for statement " + toString());
+ 	return ctor.newInstance(args);
+       }
+ 
+     Method methods[] = klazz.getMethods();
+ 
+     for (int i = 0; i < methods.length; i++)
+       {
+ 	// Skip methods with wrong name or number of args.
+ 	if (!methods[i].getName().equals(methodName))
+ 	  continue;
+ 	Class ptypes[] = methods[i].getParameterTypes();
+ 	if (ptypes.length != args.length)
+ 	  continue;
+ 
+ 	// Check if method matches
+ 	if (!compatible(ptypes, argTypes))
+ 	  continue;
+ 
+ 	// Use method[i] if it is more specific. 
+ 	// FIXME: should this check both directions and throw if
+ 	// neither is more specific?
+ 	if (method == null)
+ 	  {
+ 	    method = methods[i];
+ 	    continue;
+ 	  }
+ 	Class mptypes[] = method.getParameterTypes();
+ 	if (moreSpecific(ptypes, mptypes))
+ 	  method = methods[i];
+       }
+     if (method == null)
+       throw new NoSuchMethodException("No matching method for statement " + toString());
+     return method.invoke(target, args);
+   }
+ 
+   
+ 
+   /** Return the statement arguments. */
+   public Object[] getArguments() { return arguments; }
+ 
+   /** Return the statement method name. */
+   public String getMethodName() { return methodName; }
+ 
+   /** Return the statement object. */
+   public Object getTarget() { return target; }
+ 
+   /** Return a string representation. */
+   public String toString()
+   {
+     StringBuffer result = new StringBuffer(); 
+ 
+     Class klass = target.getClass();
+ 
+     result.append( ((WeakHashMap) classMaps.get(klass)).get(target));
+     result.append(".");
+     result.append(methodName);
+     result.append("(");
+ 
+     String sep = "";
+     for (int i = 0; i < arguments.length; i++)
+       {
+         result.append(sep);
+         result.append(arguments[i].getClass().getName());
+         sep = ", ";
+       }
+     result.append(")");
+ 
+     return result.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/TODO gcc-4.1.0/libjava/classpath/java/beans/TODO
*** gcc-4.0.2/libjava/classpath/java/beans/TODO	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/TODO	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,4 ----
+ - add AppletStub and AppletContext to java.beans.Beans.instantiate().
+ - make Introspector more efficient.
+ - basic Introspection tests are in, but more tests are probably in order.
+ - 1.2 support (waiting on java.lang.Package, mainly)
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/VetoableChangeListener.java gcc-4.1.0/libjava/classpath/java/beans/VetoableChangeListener.java
*** gcc-4.0.2/libjava/classpath/java/beans/VetoableChangeListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/VetoableChangeListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* VetoableChangeListener.java -- listen for a change which can be vetoed
+    Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * VetoableChangeListener allows a class to monitor proposed changes to
+  * properties of a Bean and, if desired, prevent them from occurring. A
+  * vetoableChange() event will be fired <em>after</em> the property change has
+  * been requested, but before it is permanent. If any listener rejects the
+  * change by throwing the PropertyChangeException, a new vetoableChange()
+  * event will be fired to all listeners who received a vetoableChange() event
+  * in the first place, informing them to revert back to the old value. Thus,
+  * the listener that threw the exception the first time should be prepared
+  * to rethrow it the second time. The value, of course, never actually changed.
+  *
+  * <p><strong>Note:</strong> This class may not be reliably used to determine
+  * whether a property has actually changed.  Use the PropertyChangeListener
+  * interface for that instead.
+  *
+  * @author John Keiser
+  * @see java.beans.PropertyChangeListener
+  * @see java.beans.VetoableChangeSupport
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface VetoableChangeListener extends EventListener
+ {
+   /**
+    * Fired before a Bean's property changes.
+    *
+    * @param e the change (containing the old and new values)
+    * @throws PropertyVetoException if the change is vetoed by the listener
+    */
+   void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException;
+ } // interface VetoableChangeListener
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/VetoableChangeListenerProxy.java gcc-4.1.0/libjava/classpath/java/beans/VetoableChangeListenerProxy.java
*** gcc-4.0.2/libjava/classpath/java/beans/VetoableChangeListenerProxy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/VetoableChangeListenerProxy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* VetoableChangeListenerProxy.java -- adds a name to a vetoable listener
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.util.EventListenerProxy;
+ 
+ /**
+  * This class provides an extension to <code>VetoableChangeListener</code> -
+  * associating a name with the listener. This can be used to filter the
+  * changes that one is interested in.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status udpated to 1.4
+  */
+ public class VetoableChangeListenerProxy extends EventListenerProxy
+   implements VetoableChangeListener
+ {
+   /**
+    * The name of the property to listen for. Package visible for use by
+    * VetoableChangeSupport.
+    */
+   final String propertyName;
+ 
+   /**
+    * Create a new proxy which filters property change events and only passes
+    * changes to the named property on to the delegate.
+    *
+    * @param propertyName the property's name to filter on
+    * @param listener the delegate listener
+    */
+   public VetoableChangeListenerProxy(String propertyName,
+                                      VetoableChangeListener listener)
+   {
+     super(listener);
+     this.propertyName = propertyName;
+   }
+ 
+   /**
+    * Forwards the event on to the delegate if the property name matches.
+    *
+    * @param event the event to pass on, if it meets the filter
+    * @throws NullPointerException if the delegate this was created with is null
+    * @throws PropertyVetoException if the change is vetoed by the listener
+    */
+   public void vetoableChange(PropertyChangeEvent event)
+     throws PropertyVetoException
+   {
+     // Note: Sun does not filter, under the assumption that since
+     // VetoableChangeSupport unwraps proxys, this method should never be
+     // called by normal use of listeners.
+     String name = event == null ? null : event.getPropertyName();
+     if (name == null ? propertyName == null : name.equals(propertyName))
+       ((VetoableChangeListener) getListener()).vetoableChange(event);
+   }
+ 
+   /**
+    * Gets the name of the property this proxy is filtering on.
+    *
+    * @return the property name
+    */
+   public String getPropertyName()
+   {
+     return propertyName;
+   }
+ } // class VetoableChangeListenerProxy
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/VetoableChangeSupport.java gcc-4.1.0/libjava/classpath/java/beans/VetoableChangeSupport.java
*** gcc-4.0.2/libjava/classpath/java/beans/VetoableChangeSupport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/VetoableChangeSupport.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,530 ----
+ /* VetoableChangeSupport.java -- support to manage vetoable change listeners
+    Copyright (C) 1998, 1999, 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Map.Entry;
+ import java.util.Vector;
+ 
+ /**
+  * VetoableChangeSupport makes it easy to fire vetoable change events and
+  * handle listeners. It allows chaining of listeners, as well as filtering
+  * by property name. In addition, it will serialize only those listeners
+  * which are serializable, ignoring the others without problem. This class
+  * is thread-safe.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class VetoableChangeSupport implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -5090210921595982017L;
+ 
+   /**
+    * Maps property names (String) to named listeners (VetoableChangeSupport).
+    * If this is a child instance, this field will be null.
+    *
+    * @serial the map of property names to named listener managers
+    * @since 1.2
+    */
+   private Hashtable children;
+ 
+   /**
+    * The non-null source object for any generated events.
+    *
+    * @serial the event source
+    */
+   private final Object source;
+ 
+   /**
+    * A field to compare serialization versions - this class uses version 2.
+    *
+    * @serial the serialization format
+    */
+   private static final int vetoableChangeSupportSerializedDataVersion = 2;
+ 
+   /**
+    * The list of all registered vetoable listeners. If this instance was
+    * created by user code, this only holds the global listeners (ie. not tied
+    * to a name), and may be null. If it was created by this class, as a
+    * helper for named properties, then this vector will be non-null, and this
+    * instance appears as a value in the <code>children</code> hashtable of
+    * another instance, so that the listeners are tied to the key of that
+    * hashtable entry.
+    */
+   private transient Vector listeners;
+ 
+   /**
+    * Create a VetoableChangeSupport to work with a specific source bean.
+    *
+    * @param source the source bean to use
+    * @throws NullPointerException if source is null
+    */
+   public VetoableChangeSupport(Object source)
+   {
+     this.source = source;
+     if (source == null)
+       throw new NullPointerException();
+   }
+ 
+   /**
+    * Adds a VetoableChangeListener to the list of global listeners. All
+    * vetoable change events will be sent to this listener. The listener add
+    * is not unique: that is, <em>n</em> adds with the same listener will
+    * result in <em>n</em> events being sent to that listener for every
+    * vetoable change. Adding a null listener may cause a NullPointerException
+    * down the road. This method will unwrap a VetoableChangeListenerProxy,
+    * registering the underlying delegate to the named property list.
+    *
+    * @param l the listener to add
+    */
+   public synchronized void addVetoableChangeListener(VetoableChangeListener l)
+   {
+     if (l instanceof VetoableChangeListenerProxy)
+       {
+         VetoableChangeListenerProxy p = (VetoableChangeListenerProxy) l;
+         addVetoableChangeListener(p.propertyName,
+                                   (VetoableChangeListener) p.getListener());
+       }
+     else
+       {
+         if (listeners == null)
+           listeners = new Vector();
+         listeners.add(l);
+       }
+   }
+ 
+   /**
+    * Removes a VetoableChangeListener from the list of global listeners. If
+    * any specific properties are being listened on, they must be deregistered
+    * by themselves; this will only remove the general listener to all
+    * properties. If <code>add()</code> has been called multiple times for a
+    * particular listener, <code>remove()</code> will have to be called the
+    * same number of times to deregister it. This method will unwrap a
+    * VetoableChangeListenerProxy, removing the underlying delegate from the
+    * named property list.
+    *
+    * @param l the listener to remove
+    */
+   public synchronized void
+     removeVetoableChangeListener(VetoableChangeListener l)
+   {
+     if (l instanceof VetoableChangeListenerProxy)
+       {
+         VetoableChangeListenerProxy p = (VetoableChangeListenerProxy) l;
+         removeVetoableChangeListener(p.propertyName,
+                                      (VetoableChangeListener) p.getListener());
+       }
+     else if (listeners != null)
+       {
+         listeners.remove(l);
+         if (listeners.isEmpty())
+           listeners = null;
+       }
+   }
+ 
+   /**
+    * Returns an array of all registered vetoable change listeners. Those that
+    * were registered under a name will be wrapped in a
+    * <code>VetoableChangeListenerProxy</code>, so you must check whether the
+    * listener is an instance of the proxy class in order to see what name the
+    * real listener is registered under. If there are no registered listeners,
+    * this returns an empty array.
+    *
+    * @return the array of registered listeners
+    * @see VetoableChangeListenerProxy
+    * @since 1.4
+    */
+   public synchronized VetoableChangeListener[] getVetoableChangeListeners()
+   {
+     ArrayList list = new ArrayList();
+     if (listeners != null)
+       list.addAll(listeners);
+     if (children != null)
+       {
+         int i = children.size();
+         Iterator iter = children.entrySet().iterator();
+         while (--i >= 0)
+           {
+             Entry e = (Entry) iter.next();
+             String name = (String) e.getKey();
+             Vector v = ((VetoableChangeSupport) e.getValue()).listeners;
+             int j = v.size();
+             while (--j >= 0)
+               list.add(new VetoableChangeListenerProxy
+                 (name, (VetoableChangeListener) v.get(j)));
+           }
+       }
+     return (VetoableChangeListener[])
+       list.toArray(new VetoableChangeListener[list.size()]);
+   }
+ 
+   /**
+    * Adds a VetoableChangeListener listening on the specified property. Events
+    * will be sent to the listener only if the property name matches. The
+    * listener add is not unique; that is, <em>n</em> adds on a particular
+    * property for a particular listener will result in <em>n</em> events
+    * being sent to that listener when that property is changed. The effect is
+    * cumulative, too; if you are registered to listen to receive events on
+    * all vetoable changes, and then you register on a particular property,
+    * you will receive change events for that property twice. Adding a null
+    * listener may cause a NullPointerException down the road. This method
+    * will unwrap a VetoableChangeListenerProxy, registering the underlying
+    * delegate to the named property list if the names match, and discarding
+    * it otherwise.
+    *
+    * @param propertyName the name of the property to listen on
+    * @param l the listener to add
+    * @throws NullPointerException if propertyName is null
+    */
+   public synchronized void addVetoableChangeListener(String propertyName,
+                                                      VetoableChangeListener l)
+   {
+     while (l instanceof VetoableChangeListenerProxy)
+       {
+         VetoableChangeListenerProxy p = (VetoableChangeListenerProxy) l;
+         if (propertyName == null ? p.propertyName != null
+             : ! propertyName.equals(p.propertyName))
+           return;
+         l = (VetoableChangeListener) p.getListener();
+       }
+     VetoableChangeSupport s = null;
+     if (children == null)
+       children = new Hashtable();
+     else
+       s = (VetoableChangeSupport) children.get(propertyName);
+     if (s == null)
+       {
+         s = new VetoableChangeSupport(source);
+         s.listeners = new Vector();
+         children.put(propertyName, s);
+       }
+     s.listeners.add(l);
+   }
+ 
+   /**
+    * Removes a VetoableChangeListener from listening to a specific property.
+    * If <code>add()</code> has been called multiple times for a particular
+    * listener on a property, <code>remove()</code> will have to be called the
+    * same number of times to deregister it. This method will unwrap a
+    * VetoableChangeListenerProxy, removing the underlying delegate from the
+    * named property list if the names match.
+    *
+    * @param propertyName the property to stop listening on
+    * @param l the listener to remove
+    * @throws NullPointerException if propertyName is null
+    */
+   public synchronized void
+     removeVetoableChangeListener(String propertyName, VetoableChangeListener l)
+   {
+     if (children == null)
+       return;
+     VetoableChangeSupport s
+       = (VetoableChangeSupport) children.get(propertyName);
+     if (s == null)
+       return;
+     while (l instanceof VetoableChangeListenerProxy)
+       {
+         VetoableChangeListenerProxy p = (VetoableChangeListenerProxy) l;
+         if (propertyName == null ? p.propertyName != null
+             : ! propertyName.equals(p.propertyName))
+           return;
+         l = (VetoableChangeListener) p.getListener();
+       }
+     s.listeners.remove(l);
+     if (s.listeners.isEmpty())
+       {
+         children.remove(propertyName);
+         if (children.isEmpty())
+           children = null;
+       }
+   }
+ 
+   /**
+    * Returns an array of all vetoable change listeners registered under the
+    * given property name. If there are no registered listeners, this returns
+    * an empty array.
+    *
+    * @return the array of registered listeners
+    * @throws NullPointerException if propertyName is null
+    * @since 1.4
+    */
+   public synchronized VetoableChangeListener[]
+     getVetoableChangeListeners(String propertyName)
+   {
+     if (children == null)
+       return new VetoableChangeListener[0];
+     VetoableChangeSupport s
+       = (VetoableChangeSupport) children.get(propertyName);
+     if (s == null)
+       return new VetoableChangeListener[0];
+     return (VetoableChangeListener[])
+       s.listeners.toArray(new VetoableChangeListener[s.listeners.size()]);
+   }
+ 
+   /**
+    * Fire a PropertyChangeEvent containing the old and new values of the
+    * property to all the global listeners, and to all the listeners for the
+    * specified property name. This does nothing if old and new are non-null
+    * and equal. If the change is vetoed, a new event is fired to notify
+    * listeners about the rollback before the exception is thrown.
+    *
+    * @param propertyName the name of the property that changed
+    * @param oldVal the old value
+    * @param newVal the new value
+    * @throws PropertyVetoException if the change is vetoed by a listener
+    */
+   public void fireVetoableChange(String propertyName,
+                                  Object oldVal, Object newVal)
+     throws PropertyVetoException
+   {
+     fireVetoableChange(new PropertyChangeEvent(source, propertyName,
+                                                oldVal, newVal));
+   }
+ 
+   /**
+    * Fire a PropertyChangeEvent containing the old and new values of the
+    * property to all the global listeners, and to all the listeners for the
+    * specified property name. This does nothing if old and new are equal.
+    * If the change is vetoed, a new event is fired to notify listeners about
+    * the rollback before the exception is thrown.
+    *
+    * @param propertyName the name of the property that changed
+    * @param oldVal the old value
+    * @param newVal the new value
+    * @throws PropertyVetoException if the change is vetoed by a listener
+    */
+   public void fireVetoableChange(String propertyName, int oldVal, int newVal)
+     throws PropertyVetoException
+   {
+     if (oldVal != newVal)
+       fireVetoableChange(new PropertyChangeEvent(source, propertyName,
+                                                  new Integer(oldVal),
+                                                  new Integer(newVal)));
+   }
+ 
+   /**
+    * Fire a PropertyChangeEvent containing the old and new values of the
+    * property to all the global listeners, and to all the listeners for the
+    * specified property name. This does nothing if old and new are equal.
+    * If the change is vetoed, a new event is fired to notify listeners about
+    * the rollback before the exception is thrown.
+    *
+    * @param propertyName the name of the property that changed
+    * @param oldVal the old value
+    * @param newVal the new value
+    * @throws PropertyVetoException if the change is vetoed by a listener
+    */
+   public void fireVetoableChange(String propertyName,
+                                  boolean oldVal, boolean newVal)
+     throws PropertyVetoException
+   {
+     if (oldVal != newVal)
+       fireVetoableChange(new PropertyChangeEvent(source, propertyName,
+                                                  Boolean.valueOf(oldVal),
+                                                  Boolean.valueOf(newVal)));
+   }
+ 
+   /**
+    * Fire a PropertyChangeEvent to all the global listeners, and to all the
+    * listeners for the specified property name. This does nothing if old and
+    * new values of the event are equal. If the change is vetoed, a new event
+    * is fired to notify listeners about the rollback before the exception is
+    * thrown.
+    *
+    * @param event the event to fire
+    * @throws NullPointerException if event is null
+    * @throws PropertyVetoException if the change is vetoed by a listener
+    */
+   public void fireVetoableChange(PropertyChangeEvent event)
+     throws PropertyVetoException
+   {
+     if (event.oldValue != null && event.oldValue.equals(event.newValue))
+       return;
+     Vector v = listeners; // Be thread-safe.
+     if (v != null)
+       {
+         int i = v.size();
+         try
+           {
+             while (--i >= 0)
+               ((VetoableChangeListener) v.get(i)).vetoableChange(event);
+           }
+         catch (PropertyVetoException e)
+           {
+             event = event.rollback();
+             int limit = i;
+             i = v.size();
+             while (--i >= limit)
+               ((VetoableChangeListener) v.get(i)).vetoableChange(event);
+             throw e;
+           }
+       }
+     Hashtable h = children; // Be thread-safe.
+     if (h != null && event.propertyName != null)
+       {
+         VetoableChangeSupport s
+           = (VetoableChangeSupport) h.get(event.propertyName);
+         if (s != null)
+           {
+             Vector v1 = s.listeners; // Be thread-safe.
+             int i = v1 == null ? 0 : v1.size();
+             try
+               {
+                 while (--i >= 0)
+                   ((VetoableChangeListener) v1.get(i)).vetoableChange(event);
+               }
+             catch (PropertyVetoException e)
+               {
+                 event = event.rollback();
+                 int limit = i;
+                 i = v.size();
+                 while (--i >= 0)
+                   ((VetoableChangeListener) v.get(i)).vetoableChange(event);
+                 i = v1.size();
+                 while (--i >= limit)
+                   ((VetoableChangeListener) v1.get(i)).vetoableChange(event);
+                 throw e;
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Tell whether the specified property is being listened on or not. This
+    * will only return <code>true</code> if there are listeners on all
+    * properties or if there is a listener specifically on this property.
+    *
+    * @param propertyName the property that may be listened on
+    * @return whether the property is being listened on
+    * @throws NullPointerException if propertyName is null
+    */
+   public synchronized boolean hasListeners(String propertyName)
+   {
+     return listeners != null || (children != null
+                                  && children.get(propertyName) != null);
+   }
+ 
+   /**
+    * Saves the state of the object to the stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if anything goes wrong
+    * @serialData this writes out a null-terminated list of serializable
+    *             global vetoable change listeners (the listeners for a named
+    *             property are written out as the global listeners of the
+    *             children, when the children hashtable is saved)
+    */
+   private synchronized void writeObject(ObjectOutputStream s)
+     throws IOException
+   {
+     s.defaultWriteObject();
+     if (listeners != null)
+       {
+         int i = listeners.size();
+         while (--i >= 0)
+           if (listeners.get(i) instanceof Serializable)
+             s.writeObject(listeners.get(i));
+       }
+     s.writeObject(null);
+   }
+ 
+   /**
+    * Reads the object back from stream (deserialization).
+    *
+    * XXX Since serialization for 1.1 streams was not documented, this may
+    * not work if vetoableChangeSupportSerializedDataVersion is 1.
+    *
+    * @param s the stream to read from
+    * @throws IOException if reading the stream fails
+    * @throws ClassNotFoundException if deserialization fails
+    * @serialData this reads in a null-terminated list of serializable
+    *             global vetoable change listeners (the listeners for a named
+    *             property are written out as the global listeners of the
+    *             children, when the children hashtable is saved)
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     VetoableChangeListener l = (VetoableChangeListener) s.readObject();
+     while (l != null)
+       {
+         addVetoableChangeListener(l);
+         l = (VetoableChangeListener) s.readObject();
+       }
+     // Sun is not as careful with children as we are, and lets some proxys
+     // in that can never receive events. So, we clean up anything that got
+     // serialized, to make sure our invariants hold.
+     if (children != null)
+       {
+         int i = children.size();
+         Iterator iter = children.entrySet().iterator();
+         while (--i >= 0)
+           {
+             Entry e = (Entry) iter.next();
+             String name = (String) e.getKey();
+             VetoableChangeSupport vcs = (VetoableChangeSupport) e.getValue();
+             if (vcs.listeners == null)
+               vcs.listeners = new Vector();
+             if (vcs.children != null)
+               vcs.listeners.addAll
+                 (Arrays.asList(vcs.getVetoableChangeListeners(name)));
+             if (vcs.listeners.size() == 0)
+               iter.remove();
+             else
+               vcs.children = null;
+           }
+         if (children.size() == 0)
+           children = null;
+       }
+   }
+ } // class VetoableChangeSupport
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/Visibility.java gcc-4.1.0/libjava/classpath/java/beans/Visibility.java
*** gcc-4.0.2/libjava/classpath/java/beans/Visibility.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/Visibility.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* java.beans.Visibility
+    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ /**
+  * Visibility is an interface a Bean may implement so that the environment
+  * can tell the Bean whether there is a GUI or not, and so that the Bean
+  * can tell the environment whether it needs one or can run without one.
+  * <P>
+  *
+  * Sun decided not to use standard Introspection patterns so that these
+  * methods did not get included when the Introspector made its sweep on
+  * the class.
+  *
+  * @author John Keiser
+  * @since JDK1.1
+  * @version 1.1.0, 29 Jul 1998
+  */
+ 
+ public interface Visibility {
+ 	/**
+ 	 * Tells whether the Bean can run without a GUI or not.
+ 	 * @return false if Bean can run without a GUI, else true.
+ 	 */
+ 	boolean needsGui();
+ 
+ 	/**
+ 	 * Tells whether Bean is trying not to use the GUI.
+ 	 * If needsGui() is true, this method should always return false.
+ 	 * @return true if definitely not using GUI, otherwise false.
+ 	 */
+ 	boolean avoidingGui();
+ 
+ 	/**
+ 	 * Tells the Bean not to use GUI methods.
+ 	 * If needsGUI() is false, then after this method is called,
+ 	 * avoidingGui() should return true.
+ 	 */
+ 	void dontUseGui();
+ 
+ 	/**
+ 	 * Tells the Bean it may use the GUI.
+ 	 * The Bean is not required to use the GUI in this case, it is
+ 	 * merely being <EM>permitted</EM> to use it.  If needsGui() is
+ 	 * false, avoidingGui() may return true or false after this method
+ 	 * is called.
+ 	 */
+ 	void okToUseGui();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/XMLDecoder.java gcc-4.1.0/libjava/classpath/java/beans/XMLDecoder.java
*** gcc-4.0.2/libjava/classpath/java/beans/XMLDecoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/XMLDecoder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,307 ----
+ /* java.beans.XMLDecoder --
+    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans;
+ 
+ import gnu.java.beans.decoder.DefaultExceptionListener;
+ import gnu.java.beans.decoder.PersistenceParser;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.util.Iterator;
+ import java.util.NoSuchElementException;
+ 
+ /**
+  * The XMLDecoder reads XML data that is structured according to
+  * <a href="http://java.sun.com/products/jfc/tsc/articles/persistence3/javabeans.dtd">this</a> DTD
+  * and creates objects according to the content. Usually such data is generated using the
+  * {@link XMLEncoder} class.
+  * <p>
+  * An example XML document might look like this:
+  * <code>
+  * &lt;java&gt;
+  * 	&lt;string&gt;Hello World&lt;/string&gt;
+  * 	&lt;int&gt;200&lt;/int&gt;
+  * &lt;/java&gt;
+  * </code>
+  * <p>To read the <code>String</code> and the <code>Integer</code> instance the following can be used (assume
+  * the XML data can be obtained from the InputStream):</p>
+  * <code>
+  * XMLDecoder decoder = new XMLDecoder(inputStreamContainingXMLData);
+  * String message = (String) decoder.readObject();
+  * Integer number = (Integer) decoder.readObject();
+  * </code>
+  * <p>Besides this basic functionality the <code>XMLDecoder</code> has some more features that might come
+  * handy in certain situations:</p>
+  * <p>An owner object can be set using the <code>setOwner</code> method which can then be accessed when
+  * decoding. This feature is only useful if the XML data is aware of the owner object. Such data may
+  * look like this (assume that the owner object is a JFrame instance):</p>
+  * <code> 
+  * &lt;java&gt;
+  * 	&lt;void method="getOwner"&gt;
+  * 		&lt;void method="setVisible"&gt;
+  * 			&lt;boolean&gt;true&lt;boolean&gt;
+  * 		&lt;/void&gt;
+  *  &lt;/void&gt;
+  * &lt;/java&gt;
+  * </code>
+  * This accesses the <code>JFrame</code> and makes it visible using the <code>setVisible</code> method.
+  * <p>Please note that changing the owner <b>after</b> the having read the first object has no effect,
+  * because all object have been decoded then.</p>
+  * <p>If the <code>XMLDecoder</code> is created with no {@link ExceptionListener} instance a default one
+  * is used that prints an error message to <code>System.err</code> whenever a recoverable exception
+  * is thrown. Recovarable exceptions occur when the XML data cannot be interpreted correctly (e.g
+  * unknown classes or methods, invocation on null, ...). In general be very careful when the
+  * <code>XMLDecoder</code> provoked such exceptions because the resulting object(s) may be in an
+  * undesirable state.</p>
+  * <p>Note that changing the ExceptionListener instance after <code>readObject</code> has been called
+  * once has no effect because the decoding is completed then.</p>
+  * <p>At last one can provide a specific <code>ClassLoader</code> which is then used when <code>Class</code>
+  * objects are accessed. See {@link java.lang.Class#forName(String, boolean, ClassLoader)} for details
+  * on this.</p>
+  * <p>Note: If the <code>InputStream</code> instance given to any of the constructors is <code>null</code>
+  * the resulting <code>XMLDecoder</code> will be silently (without any exception) useless. Each call
+  * to <code>readObject</code> will return <code>null</code> and never throws an
+  * <code>ArrayIndexOutOfBoundsException</code>.</p>
+  *  
+  * @author Robert Schuster
+  * @since 1.4
+  * @status updated to 1.5
+  */
+ public class XMLDecoder
+ {
+ 	private Object owner;
+ 
+ 	private ExceptionListener exceptionListener;
+ 
+ 	private InputStream inputStream;
+ 
+ 	private boolean isStreamClosed;
+ 
+ 	private ClassLoader classLoader;
+ 
+ 	private Iterator iterator;
+ 
+ 	/** Creates a XMLDecoder instance that parses the XML data of the given input stream.
+ 	 * Using this constructor no special ClassLoader, a default ExceptionListener
+ 	 * and no owner object is used.
+ 	 * 
+ 	 * @param in InputStream to read XML data from.
+ 	 */
+ 	public XMLDecoder(InputStream in)
+ 	{
+ 		this(in, null);
+ 	}
+ 
+ 	/** Creates a XMLDecoder instance that parses the XML data of the given input stream.
+ 	 * Using this constructor no special ClassLoader and a default ExceptionListener
+ 	 * is used.
+ 	 * 
+ 	 * @param in InputStream to read XML data from.
+ 	 * @param owner Owner object which can be accessed and modified while parsing.
+ 	 */
+ 	public XMLDecoder(InputStream in, Object owner)
+ 	{
+ 		this(in, owner, null);
+ 	}
+ 
+ 	/** Creates a XMLDecoder instance that parses the XML data of the given input stream.
+ 	 * If the ExceptionListener argument is null a default implementation is used.
+ 	 * 
+ 	 * @param in InputStream to read XML data from.
+ 	 * @param owner Owner object which can be accessed and modified while parsing.
+ 	 * @param exceptionListener ExceptionListener instance to which exception notifications are send.
+ 	 */
+ 	public XMLDecoder(
+ 		InputStream in,
+ 		Object owner,
+ 		ExceptionListener exceptionListener)
+ 	{
+ 		this(
+ 			in,
+ 			owner,
+ 			exceptionListener,
+ 			Thread.currentThread().getContextClassLoader());
+ 	}
+ 
+ 	/** Creates a XMLDecoder instance that parses the XML data of the given input stream.
+ 	 * If the ExceptionListener argument is null a default implementation is used.
+ 	 * 
+ 	 * @param in InputStream to read XML data from.
+ 	 * @param owner Owner object which can be accessed and modified while parsing.
+ 	 * @param exceptionListener ExceptionListener instance to which exception notifications are send.
+ 	 * @param cl ClassLoader instance that is used for calls to <code>Class.forName(String, boolean, ClassLoader)</code>
+ 	 * @since 1.5
+ 	 */
+ 	public XMLDecoder(
+ 		InputStream in,
+ 		Object owner,
+ 		ExceptionListener listener,
+ 		ClassLoader cl)
+ 	{
+ 		// initially here was a check for the validity of the InputStream argument but some
+ 		// great engineers decided that this API should silently discard this and behave rather
+ 		// odd: readObject will always return null ...
+ 		inputStream = in;
+ 
+ 		setExceptionListener(listener);
+ 
+ 		// validity of this object is checked in Class.forName() and therefore may be null
+ 		classLoader = cl;
+ 
+ 		this.owner = owner;
+ 	}
+ 
+ 	/** Closes the stream associated with this decoder. This should be done after having read all 
+ 	 * decoded objects.
+ 	 * <p>See the description of the {@link #readObject()} for the effect caused by <code>close</code>.</p> 
+ 	 */
+ 	public void close()
+ 	{
+ 		if (isStreamClosed)
+ 		{
+ 			return;
+ 		}
+ 
+ 		try
+ 		{
+ 			inputStream.close();
+ 			isStreamClosed = true;
+ 		}
+ 		catch (IOException e)
+ 		{
+ 			// bad style forced by original API design ... 
+ 		}
+ 	}
+ 
+ 	/** Returns the ExceptionListener instance associated with this decoder.
+ 	 * <p>See the description of {@link XMLDecoder} class for more information on the ExceptionListener.</p>
+ 	 * 
+ 	 * @return Current ExceptionListener of the decoder.
+ 	 */
+ 	public ExceptionListener getExceptionListener()
+ 	{
+ 		return exceptionListener;
+ 	}
+ 
+ 	/** Returns the owner object of the decoder. This method is usually called
+ 	 * from within the parsed XML data.
+ 	 * <p>See the description of {@link XMLDecoder} class for more information on the owner object.</p>
+ 	 * 
+ 	 * @return The owner object of this decoder.
+ 	 */
+ 	public Object getOwner()
+ 	{
+ 		return owner;
+ 	}
+ 
+ 	/** Returns the next available decoded object.
+ 	 * <p>Note that the actual decoding takes place when the method is called for the first time.</p>
+ 	 * <p>If the <code>close</code> method was already called a <code>NoSuchElementException</code>
+ 	 * is thrown.</p>
+ 	 * <p>If the InputStream instance used in the constructors was <code>null</code> this method
+ 	 * will always return <code>null</code> itself.</p>
+ 	 * 
+ 	 * @return The next object in a sequence decoded from XML data.
+ 	 * @throws ArrayIndexOutOfBoundsException When no more objects are available.
+ 	 */
+ 	public Object readObject() throws ArrayIndexOutOfBoundsException
+ 	{
+ 		// note: the RI does it this way ...
+ 		if(inputStream == null) {
+ 			return null;
+ 		}
+ 		
+ 		// note: the original API documentation says nothing on what to do
+ 		// when the stream was closed before readObject is called but it actually
+ 		// throws a NoSuchElementException - this behaviour is imitated here
+ 		if (isStreamClosed)
+ 		{
+ 			throw new NoSuchElementException("Cannot read any objects - XMLDecoder was already closed.");
+ 		}
+ 
+ 		// creates the PersistenceParser (doing the parsing and decoding) and returns its
+ 		// Iterator on first invocation
+ 		if (iterator == null)
+ 		{
+ 			iterator =
+ 				new PersistenceParser(
+ 					inputStream,
+ 					exceptionListener,
+ 					classLoader,
+ 					this)
+ 					.iterator();
+ 		}
+ 
+ 		// note: done according to the official documentation
+ 		if (!iterator.hasNext())
+ 		{
+ 			throw new ArrayIndexOutOfBoundsException("No more objects available from this XMLDecoder.");
+ 		}
+ 
+ 		// returns just the next object if there was no problem
+ 		return iterator.next();
+ 	}
+ 
+ 	/** Sets the ExceptionListener instance to which notifications of exceptions are send
+ 	 * while parsing the XML data.
+ 	 * <p>See the description of {@link XMLDecoder} class for more information on the ExceptionListener.</p>
+ 	 *
+ 	 * @param listener
+ 	 */
+ 	public void setExceptionListener(ExceptionListener listener)
+ 	{
+ 		// uses a default implementation when null 
+ 		if (listener == null)
+ 		{
+ 			listener = new DefaultExceptionListener();
+ 		}
+ 		exceptionListener = listener;
+ 	}
+ 
+ 	/** Sets the owner object which can be accessed from the parsed XML data.
+ 	 * <p>See the description of {@link XMLDecoder} class for more information on the owner object.</p>
+ 	 * 
+ 	 * @param newOwner
+ 	 */
+ 	public void setOwner(Object newOwner)
+ 	{
+ 		owner = newOwner;
+ 	}
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContext.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContext.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,272 ----
+ /* java.beans.beancontext.BeanContext
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.beans.DesignMode;
+ import java.beans.Visibility;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.util.Collection;
+ 
+ /**
+  * Acts as a container for sub-beans and as a sub-bean,
+  * so that an entire hierarchy of beans can be made up of
+  * <code>BeanContext</code>s.
+  * <P>
+  *
+  * Since I can't sprinkle the <code>Collections</code> interface
+  * documentation with special information for <code>BeanContext</code>
+  * implementors, I'll have to document special requirements for
+  * implementors of those functions here.
+  * <P>
+  *
+  * <code><strong>add()</strong></code> or <code>addAll()</code>:
+  * <br>
+  * <OL>
+  *   <LI>
+  *     May add any <code>Object</code> into the hierarchy as well as a
+  *     <code>BeanContextChild</code>, <code>BeanContext</code> or
+  *     <code>BeanContextProxy</code> object.
+  *     This way, any Bean can be in the hierarchy.
+  *   </LI>
+  *   <LI>
+  *     Must synchronize on <code>BeanContext.globalHierarchyLock</code>.
+  *   </LI>
+  *   <LI>
+  *     Don't add the <code>Object</code> if it's already there (only once
+  *     per <code>BeanContext</code>).
+  *   </LI>
+  *   <LI>
+  *     If it is a <code>BeanContextChild</code> implementor, call
+  *     <code>setBeanContext()</code> on it.  If it's a
+  *     <code>BeanContextProxy</code> implementor, call
+  *     <code>getBeanContextProxy().setBeanContext()</code> on it.
+  *     If <code>setBeanContext()</code> vetoes the change, back out
+  *     all changes so far and throw <code>IllegalStateException</code>.
+  *   </LI>
+  *   <LI>
+  *     If it (or its proxy) implements <code>Visibility</code>, call
+  *     <code>dontUseGui()</code> or <code>okToUseGui()</code> on it,
+  *     depending on whether you (the <code>BeanContext</code>) feel like
+  *     allowing it to use the GUI or not.
+  *   </LI>
+  *   <LI>
+  *     If it implements <code>BeanContextChild</code> or
+  *     <code>BeanContextProxy</code>, register yourself (the
+  *     <code>BeanContext</code>) as both a
+  *     <code>PropertyChangeListener</code> and
+  *     <code>VetoableChangeListener</code> on the "beanContext"
+  *     property (it may also add itself on any other properties it wishes
+  *     to).
+  *   </LI>
+  *   <LI>
+  *     If it is a listener or event source that you (the
+  *     <code>BeanContext</code>) are interested in, you may register
+  *     yourself to it or register it to you.
+  *   </LI>
+  *   <LI>
+  *     Fire a <code>java.beans.beancontext.BeanContextMembershipEvent</code>
+  *     before exiting.  <code>addAll()</code> should wait until everything
+  *     is done changing before firing the event (or events) so that if a
+  *     failure occurs, the backing-out process can proceed without any
+  *     events being fired at all.
+  *   </LI>
+  * </OL>
+  * <P>
+  *
+  * <code><strong>remove()</strong></code> or <code>removeAll()</code>:
+  * <br>
+  * <OL>
+  *   <LI>
+  *     Must synchronize on <code>BeanContext.globalHierarchyLock</code>.
+  *   </LI>
+  *   <LI>
+  *     If the specified <code>Object</code> is not a child of this
+  *     <code>BeanContext</code>, just exit without performing any actions.
+  *   </LI>
+  *   <LI>
+  *     Remove the <code>Object</code> from your collection of children.
+  *   </LI>
+  *   <LI>
+  *     If it is a <code>BeanContextChild</code> implementor, call
+  *     <code>setBeanContext(null)</code> on it.  If it's a
+  *     <code>BeanContextProxy</code> implementor, call
+  *     <code>getBeanContextProxy().setBeanContext(null)</code> on it.
+  *     If <code>setBeanContext()</code> vetoes the change, back out
+  *     all changes so far and throw <code>IllegalStateException</code>.
+  *   </LI>
+  *   <LI>
+  *     If you registered the <code>Object</code> to listen to you or
+  *     registered yourself as a listener on the <code>Object</code> during
+  *     <code>add()</code> or <code>addAll()</code>, undo the registration
+  *     bycalling the appropriate <code>removeListener()</code> method.
+  *   </LI>
+  *   <LI>
+  *     Fire a <code>java.beans.beancontext.BeanContextMembershipEvent</code>
+  *     before exiting.  <code>removeAll()</code> should wait until
+  *     everything is done changing before firing the event (or events) so
+  *     that if a failure occurs, the backing-out process can proceed
+  *     without any events being fired at all.
+  *   </LI>
+  * </OL>
+  * <P>
+  *
+  * <code>addAll()</code>, <code>removeAll()</code>,
+  * <code>retainAll()</code> and <code>clear()</code> do not need to be
+  * implemented, but may be if so desired.
+  * <P>
+  *
+  * Similarly, <code>Visibility</code> and <code>DesignMode</code> methods
+  * should propagate changed values to children that implement interfaces
+  * of the same name.
+  * <P>
+  *
+  * A hierarchy of beans is mainly useful so that different sets of beans
+  * can be established, each with their own set of resources.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  */
+ 
+ public interface BeanContext
+ 	extends Collection, BeanContextChild, Visibility, DesignMode {
+ 
+ 	/**
+ 	 * The global lock on changing any BeanContext hierarchy.
+ 	 * It kinda sucks that there is only one lock, since there can be
+ 	 * multiple hierarchies.  Oh well, I didn't design, I just code.
+ 	 * <P>
+ 	 *
+ 	 * Methods that must (or do) synchronize on the global lock:
+ 	 * <BR>
+ 	 * <UL>
+ 	 *   <LI>
+ 	 *     Implementors of <CODE>BeanContext.add()</CODE> and <code>addAll()</code>
+ 	 *   </LI>
+ 	 * </UL>
+ 	 * @fixme fill in the rest of the methods which use the global lock.
+ 	 */
+ 	Object globalHierarchyLock = new Object();
+ 
+ 	/** 
+ 	 * Instantiate a Bean using this Bean's <code>ClassLoader</code>
+ 	 * and this <code>BeanContext</code> as the parent.
+ 	 * <P>
+ 	 *
+ 	 * This method exists mainly so that <code>BeanContext</code>
+ 	 * implementations can perform extra actions on Beans that are
+ 	 * created within them.
+ 	 *
+ 	 * @param beanName the name of the bean to instantiate
+ 	 * @return the created Bean
+ 	 *
+ 	 * @see java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String)
+ 	 * @see java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String,java.lang.BeanContext)
+ 	 * @exception IOException if there is an I/O problem during
+ 	 *            instantiation.
+ 	 * @exception ClassNotFoundException if a serialized Bean's class
+ 	 *            is not found.
+ 	 */
+ 	Object instantiateChild(String beanName)
+                         throws IOException,
+                                ClassNotFoundException;
+ 
+ 	/**
+ 	 * Get a resource.  The <code>BeanContext</code> will typically
+ 	 * call <code>ClassLoader.getResource()</code>, but may do it any
+ 	 * way it wants to.  This allows a <code>BeanContext</code> to
+ 	 * have its own set of resources separate from the rest of the
+ 	 * system.
+ 	 * <P>
+ 	 *
+ 	 * Beans should call this method on their parent rather than the
+ 	 * associated <code>ClassLoader</code> method.
+ 	 * <P>
+ 	 *
+ 	 * I am assuming, but am not entirely sure, that if a
+ 	 * <code>BeanContext</code> cannot find a resource, its
+ 	 * responsibility is to call the <code>getResource</code> method
+ 	 * of its parent <code>BeanContext</code>.
+ 	 *
+ 	 * @return a URL to the requested resource.
+ 	 * @param resourceName the name of the resource requested.
+ 	 * @param requestor a reference to the child requesting the resource.
+ 	 * @see java.lang.ClassLoader#getResource(java.lang.String)
+ 	 */
+ 	URL getResource(String resourceName, BeanContextChild requestor);
+ 
+ 	/**
+ 	 * Get a resource as a stream.  The <code>BeanContext</code> will
+ 	 * typically call <code>ClassLoader.getResourceAsStream()</code>,
+ 	 * but may do it any way it wants to.  This allows a
+ 	 * <code>BeanContext</code>'s children to have their own set of
+ 	 * resources separate from the rest of the system.
+ 	 * <P>
+ 	 *
+ 	 * Beans should call this method on their parent rather than the
+ 	 * associated <code>ClassLoader</code> method.
+ 	 * <P>
+ 	 *
+ 	 * I am assuming, but am not entirely sure, that if a
+ 	 * <code>BeanContext</code> cannot find a resource, its
+ 	 * responsibility is to call the <code>getResourceAsStream</code>
+ 	 * method of its parent <code>BeanContext</code>.
+ 	 *
+ 	 * @return the requested resource as a stream.
+ 	 * @param resourceName the name of the resource requested.
+ 	 * @param requestor a reference to the child requesting the resource.
+ 	 * @see java.lang.ClassLoader#getResourceAsStream(java.lang.String)
+ 	 */
+ 	InputStream getResourceAsStream(String resourceName, BeanContextChild requestor);
+ 
+ 	/**
+ 	 * Add a listener on changes to the membership of this
+ 	 * <code>BeanContext</code> object.
+ 	 * @param listener the listener to add.
+ 	 */
+ 	void addBeanContextMembershipListener(BeanContextMembershipListener listener);
+ 
+ 	/**
+ 	 * Remove a listener on changes to the membership of this
+ 	 * <code>BeanContext</code> object.
+ 	 * @param listener the listener to remove.
+ 	 */
+ 	void removeBeanContextMembershipListener(BeanContextMembershipListener listener);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextChild.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextChild.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextChild.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextChild.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,174 ----
+ /* java.beans.beancontext.BeanContextChild
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyVetoException;
+ import java.beans.VetoableChangeListener;
+ 
+ /**
+  * Beans implement this to get information about the execution environment and
+  * its services and to be placed in the hierarchy.
+  * <P>
+  *
+  * The difference between a <code>BeanContext</code> and a
+  * <code>BeanContextChild</code>, mainly, is that a
+  * <code>BeanContext</code> may be a parent.
+  * <P>
+  *
+  * <code>BeanContextChild</code> instances will be serialized at some
+  * point in their life, but you need to make sure your bean context does
+  * not contain a serializable reference (directly or indirectly) to the
+  * parent <code>BeanContext</code>, to any of the other
+  * <code>BeanContext</code>s in the tree, or to any resources obtained
+  * via the <code>BeanContextServices</code> interface.  One way to do this
+  * is to mark any fields that contain such references as
+  * <code>transient</code>.  Another way is to use a custom serializer.
+  * <P>
+  *
+  * If you do not do this, when the <code>BeanContext</code> is serialized,
+  * all the other <code>BeanContext</code>s and other unnecessary things
+  * will be serialized along with it.
+  * <P>
+  *
+  * Before dying, a <code>BeanContextChild</code> should call
+  * <code>getBeanContext().remove(this)</code> to detach from the
+  * hierarchy and exit cleanly.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  * @see java.beans.beancontext.BeanContext
+  */
+ 
+ public interface BeanContextChild {
+ 	/**
+ 	 * Set the parent <code>BeanContext</code>.
+ 	 * <P>
+ 	 *
+ 	 * This method is called from <code>BeanContext.add()</code> and
+ 	 * should not be called directly.
+ 	 * <P>
+ 	 *
+ 	 * When this Object is being added to a new BeanContext or moved
+ 	 * from an old one, a non-null value will be passed in.
+ 	 * <P>
+ 	 *
+ 	 * When this Object is being removed from the current
+ 	 * <code>BeanContext</code>, <code>setBeanContext()</code> will
+ 	 * receive the parameter <code>null</code>.
+ 	 * <P>
+ 	 *
+ 	 * When being removed from the current <code>BeanContext</code>,
+ 	 * it is the <code>BeanContextChild</code>'s responsibility to
+ 	 * release all services it has obtained.
+ 	 * <P>
+ 	 *
+ 	 * This change should generate <code>PropertyChangeEvent</code>
+ 	 * and <code>VetoableChangeEvent</code>s with the property name
+ 	 * "beanContext".  If the change is vetoed, it must re-throw the
+ 	 * exception and not change anything.  In this way, the parent
+ 	 * <code>BeanContextChild</code>, who has registered himself with
+ 	 * you, will have a chance to remove this child from its
+ 	 * collection.
+ 	 * <P>
+ 	 *
+ 	 * If the Bean does not wish to change the parent or be removed
+ 	 * from one, it may throw the <code>PropertyVetoException</code>.
+ 	 * If you veto a <code>setBeanContext(null)</code> call, then you
+ 	 * should try your hardest to remedy whatever problem is keeping
+ 	 * you from being removed from the <code>BeanContext</code> so
+ 	 * that you can <em>not</em> veto it the next time.
+ 	 * Otherwise, nasty pathological recursion stuff could occur in
+ 	 * certain situations.
+ 	 * <P>
+ 	 *
+ 	 * If you do veto the change, you must first back out any changes
+ 	 * you made prior to the veto.  Best not to make any such changes
+ 	 * prior to the veto in the first place.
+ 	 * <P>
+ 	 *
+ 	 * This method is called from <code>BeanContext.add()</code> and
+ 	 * should not be called directly.
+ 	 *
+ 	 * @param parent the new parent for the <code>BeanContextChild</code>,
+ 	 *        or <code>null</code> to signify removal from a tree.
+ 	 * @exception PropertyVetoException if the
+ 	 *            <code>BeanContextChild</code> implementor does not
+ 	 *            wish to have its parent changed.
+ 	 */
+ 	void setBeanContext(BeanContext parent)
+ 		throws PropertyVetoException;
+ 
+ 	/**
+ 	 * Get the parent <code>BeanContext</code>.
+ 	 * @return the parent <code>BeanContext</code>.
+ 	 */
+ 	BeanContext getBeanContext();
+ 
+ 	/**
+ 	 * Add a listener that will be notified when a specific property changes.
+ 	 * @param prop the name of the property to listen on
+ 	 * @param listener the listener to listen on the property.
+ 	 */
+ 	void addPropertyChangeListener(String prop, PropertyChangeListener listener);
+ 
+ 	/**
+ 	 * Remove a listener to a certain property.
+ 	 * @param prop the name of the property being listened on
+ 	 * @param listener the listener listening on the property.
+ 	 */
+ 	void removePropertyChangeListener(String prop, PropertyChangeListener listener);
+ 
+ 	/**
+ 	 * Add a listener that will be notified when a specific property
+ 	 * change is requested (a PropertyVetoException may be thrown) as
+ 	 * well as after the change is successfully made.
+ 	 *
+ 	 * @param prop the name of the property to listen on
+ 	 * @param listener the listener to listen on the property.
+ 	 */
+ 	void addVetoableChangeListener(String prop, VetoableChangeListener listener);
+ 
+ 	/**
+ 	 * Remove a listener to a certain property.
+ 	 * @param prop the name of the property being listened on
+ 	 * @param listener the listener listening on the property.
+ 	 */
+ 	void removeVetoableChangeListener(String prop, VetoableChangeListener listener);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextChildComponentProxy.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextChildComponentProxy.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextChildComponentProxy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextChildComponentProxy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* java.beans.beancontext.BeanContextChildComponentProxy
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.awt.Component;
+ 
+ /**
+  * Interface for <code>BeanContextChild</code>s which wish to associate an
+  * AWT component with them.  The proxy is provided because the
+  * <code>addPropertyChangeListener()</code> method would conflict with
+  * <code>Component</code> if you tried to extend.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  */
+ 
+ public interface BeanContextChildComponentProxy {
+ 	/**
+ 	 * Get the <code>Component</code> associated with this <code>BeanContextChild</code>.
+ 	 * @return the <code>Component</code> associated with this
+ 	 * <code>BeanContextChild</code>.
+ 	 */
+ 	Component getComponent();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextChildSupport.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextChildSupport.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextChildSupport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextChildSupport.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,381 ----
+ /* java.beans.beancontext.BeanContextChildSupport
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyChangeSupport;
+ import java.beans.PropertyVetoException;
+ import java.beans.VetoableChangeListener;
+ import java.beans.VetoableChangeSupport;
+ import java.io.Serializable;
+ 
+ /**
+  * Support for creating a <code>BeanContextChild</code>.
+  * This class contains the most common implementations of the methods in
+  * the <code>BeanContextChild</code>
+  *
+  * @specnote This class is not very well specified.  I had to "fill in the
+  *           blanks" in most places with what I thought was reasonable
+  *           behavior.  If there are problems, let me know.
+  *
+  * @author John Keiser
+  * @since 1.2
+  * @see java.beans.beancontext.BeanContextChild
+  */
+ public class BeanContextChildSupport
+   implements BeanContextChild, BeanContextServicesListener, Serializable
+ {
+   static final long serialVersionUID = 6328947014421475877L;
+ 
+ 	/**
+ 	 * The peer on which to perform <code>set</code> actions.
+ 	 * This is here so that this class can be used as a peer.
+ 	 * <P>
+ 	 *
+ 	 * When extending this class, this variable will be set to
+ 	 * <code>this</code>.
+ 	 */
+ 	public BeanContextChild beanContextChildPeer;
+ 
+ 	/**
+ 	 * The parent <code>BeanContext</code>.
+ 	 */
+ 	protected transient BeanContext beanContext;
+ 
+ 	/**
+ 	 * If <code>setBeanContext()</code> was vetoed once before, this
+ 	 * is set to <code>true</code> so that the next time, vetoes will
+ 	 * be ignored.
+ 	 */
+ 	protected transient boolean rejectedSetBCOnce;
+ 
+ 	/**
+ 	 * Listeners are registered here and events are fired through here.
+ 	 */
+ 	protected PropertyChangeSupport pcSupport;
+ 
+ 	/**
+ 	 * Listeners are registered here and events are fired through here.
+ 	 */
+ 	protected VetoableChangeSupport vcSupport;
+ 
+ 	/**
+ 	 * Create a new <code>BeanContextChildSupport</code> with itself as the peer.
+ 	 * This is meant to be used when you subclass
+ 	 * <code>BeanContextChildSupport</code> to create your child.
+ 	 */
+ 	public BeanContextChildSupport()
+   {
+ 		this (null);
+ 	}
+ 
+ 	/**
+ 	 * Create a new <code>BeanContextChildSupport</code> with the specified peer.
+ 	 * @param peer the peer to use, or <code>null</code> to specify
+ 	 *        <code>this</code>.
+ 	 */
+ 	public BeanContextChildSupport (BeanContextChild peer)
+   {
+ 		if (peer == null)
+       {
+         peer = this;
+       }
+ 
+ 		beanContextChildPeer = peer;
+ 		pcSupport = new PropertyChangeSupport (peer);
+ 		vcSupport = new VetoableChangeSupport (peer);
+ 	}
+ 
+ 	/**
+ 	 * Set the parent <code>BeanContext</code>.
+ 	 * <P>
+ 	 *
+ 	 * When this Object is being added to a new BeanContext or moved
+ 	 * from an old one, a non-null value will be passed in.
+ 	 * <P>
+ 	 *
+ 	 * When this Object is being removed from the current
+ 	 * <code>BeanContext</code>, <code>setBeanContext()</code> will
+ 	 * receive the parameter <code>null</code>.
+ 	 * <P>
+ 	 *
+ 	 * Order of events:
+ 	 * <OL>
+ 	 *   <LI>
+ 	 *     If the new <code>BeanContext</code> is the same as the old
+ 	 *     one, nothing happens.
+ 	 *   </LI>
+ 	 *   <LI>
+ 	 *     If the change has not been rejected or vetoed before, call
+ 	 *     <code>validatePendingSetBeanContext()</code>.  If this call
+ 	 *     returns <code>false</code>, the change is rejected and a
+ 	 *     <code>PropertyVetoException</code> is thrown.
+ 	 *   </LI>
+ 	 *   <LI>
+ 	 *     If the change has not been rejected or vetoed before,
+ 	 *     <code>VetoableChangeEvent</code>s are fired with the name
+ 	 *     <code>"beanContext"</code>, using the
+ 	 *     <code>fireVetoableChange()</code> method.  If a veto
+ 	 *     occurs, reversion events are fired using the same method,
+ 	 *     the change is rejected, and the veto is rethrown.
+ 	 *   </LI>
+ 	 *   <LI>
+ 	 *     <code>releaseBeanContextResources()</code> is called.
+ 	 *   </LI>
+ 	 *   <LI>
+ 	 *     The change is made.
+ 	 *   </LI>
+ 	 *   <LI>
+ 	 *     <code>PropertyChangeEvent</code>s are fired using the
+ 	 *     <code>firePropertyChange()</code> method.
+ 	 *   </LI>
+ 	 *   <LI>
+ 	 *     <code>initializeBeanContextResources()</code> is called.
+ 	 *   </LI>
+ 	 * </OL>
+ 	 * <P>
+ 	 *
+ 	 * @param newBeanContext the new parent for the
+ 	 *        <code>BeanContextChild</code>, or <code>null</code> to
+ 	 *        signify removal from a tree.
+ 	 * @exception PropertyVetoException if the
+ 	 *            <code>BeanContextChild</code> implementor does not
+ 	 *            wish to have its parent changed.
+ 	 */
+   public void setBeanContext(BeanContext newBeanContext)
+     throws PropertyVetoException
+   {
+     synchronized (beanContextChildPeer)
+       {
+         if (newBeanContext == beanContext)
+           return;
+ 
+         if (!rejectedSetBCOnce)
+           {
+             if (!validatePendingSetBeanContext (newBeanContext))
+               {
+                 rejectedSetBCOnce = true;
+                 throw new PropertyVetoException ("validatePendingSetBeanContext() rejected change",
+                                                  new PropertyChangeEvent(beanContextChildPeer, "beanContext", beanContext, newBeanContext));
+               }
+             
+             try
+               {
+                 fireVetoableChange ("beanContext", beanContext, newBeanContext);
+               }
+             catch (PropertyVetoException e)
+               {
+                 rejectedSetBCOnce = true;
+                 throw e;
+               }
+           }
+ 
+ 			releaseBeanContextResources ();
+ 
+ 			beanContext = newBeanContext;
+ 			rejectedSetBCOnce = false;
+ 
+ 			firePropertyChange ("beanContext", beanContext, newBeanContext);
+ 
+ 			initializeBeanContextResources ();
+ 		}
+ 	}
+ 
+ 	/**
+ 	 * Get the parent <code>BeanContext</code>.
+ 	 * @return the parent <code>BeanContext</code>.
+ 	 */
+ 	public BeanContext getBeanContext()
+   {
+ 		return beanContext;
+ 	}
+ 
+ 	/**
+ 	 * Get the peer (or <code>this</code> if there is no peer).
+ 	 * @return the peer, or <code>this</code> if there is no peer.
+ 	 */
+ 	public BeanContextChild getBeanContextChildPeer() {
+ 		return beanContextChildPeer;
+ 	}
+ 
+ 	/**
+ 	 * Determine whether there is a peer.
+ 	 * This is true iff <code>getBeanContextChildPeer() == this</code>.
+ 	 * @return whether there is a peer.
+ 	 */
+ 	public boolean isDelegated() {
+ 		return beanContextChildPeer == this;
+ 	}
+ 
+ 	/**
+ 	 * Add a listener that will be notified when a specific property changes.
+ 	 * @param propertyName the name of the property to listen on.
+ 	 * @param listener the listener to listen on the property.
+ 	 */
+ 	public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
+ 		pcSupport.addPropertyChangeListener(propertyName, listener);
+ 	}
+ 
+ 	/**
+ 	 * Remove a listener to a certain property.
+ 	 * 
+ 	 * @param propertyName the name of the property being listened on.
+ 	 * @param listener the listener listening on the property.
+ 	 */
+ 	public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
+ 		pcSupport.removePropertyChangeListener(propertyName, listener);
+ 	}
+ 
+ 	/**
+ 	 * Add a listener that will be notified when a specific property
+ 	 * change is requested (a PropertyVetoException may be thrown) as
+ 	 * well as after the change is successfully made.
+ 	 *
+ 	 * @param propertyName the name of the property to listen on.
+ 	 * @param listener the listener to listen on the property.
+ 	 */
+ 	public void addVetoableChangeListener(String propertyName, VetoableChangeListener listener) {
+ 		vcSupport.addVetoableChangeListener(propertyName, listener);
+ 	}
+ 
+ 	/**
+ 	 * Remove a listener to a certain property.
+ 	 *
+ 	 * @param propertyName the name of the property being listened on
+ 	 * @param listener the listener listening on the property.
+ 	 */
+ 	public void removeVetoableChangeListener(String propertyName, VetoableChangeListener listener) {
+ 		vcSupport.removeVetoableChangeListener(propertyName, listener);
+ 	}
+ 
+ 	/**
+ 	 * Fire a property change.
+ 	 *
+ 	 * @param propertyName the name of the property that changed
+ 	 * @param oldVal the old value of the property
+ 	 * @param newVal the new value of the property
+ 	 */
+ 	public void firePropertyChange(String propertyName, Object oldVal, Object newVal) {
+ 		pcSupport.firePropertyChange(propertyName, oldVal, newVal);
+ 	}
+ 
+ 	/**
+ 	 * Fire a vetoable property change.
+ 	 *
+ 	 * @param propertyName the name of the property that changed
+ 	 * @param oldVal the old value of the property
+ 	 * @param newVal the new value of the property
+ 	 * @exception PropertyVetoException if the change is vetoed.
+ 	 */
+ 	public void fireVetoableChange(String propertyName, Object oldVal, Object newVal)
+                         throws PropertyVetoException {
+ 		vcSupport.fireVetoableChange(propertyName, oldVal, newVal);
+ 	}
+ 
+ 	/**
+ 	 * Called by <code>BeanContextServices.revokeService()</code> to indicate that a service has been revoked.
+ 	 * If you have a reference to such a service, it should be
+ 	 * discarded and may no longer function properly.
+ 	 * <code>getService()</code> will no longer work on the specified
+ 	 * service class after this event has been fired.
+ 	 * <P>
+ 	 *
+ 	 * <EM>This method is meant to be overriden.</EM>
+ 	 * <code>BeanContextChildSupport</code>'s implementation does
+ 	 * nothing.
+ 	 *
+ 	 * @param event the service revoked event.
+ 	 * @see java.beans.beancontext.BeanContextServices#revokeService(java.lang.Class,java.beans.beancontext.BeanContextServiceProvider,boolean)
+ 	 */
+ 	public void serviceRevoked(BeanContextServiceRevokedEvent event) {
+ 	}
+ 
+ 	/**
+ 	 * Called by <code>BeanContextServices</code> whenever a service is made available.
+ 	 * <P>
+ 	 *
+ 	 * <EM>This method is meant to be overriden.</EM>
+ 	 * <code>BeanContextChildSupport</code>'s implementation does
+ 	 * nothing.
+ 	 *
+ 	 * @param event the service revoked event, with useful information
+ 	 *        about the new service.
+ 	 */
+ 	public void serviceAvailable(BeanContextServiceAvailableEvent event) {
+ 	}
+ 
+ 	/**
+ 	 * Called by <code>setBeanContext()</code> to determine whether the set should be rejected.
+ 	 * <P>
+ 	 *
+ 	 * <EM>This method is meant to be overriden.</EM>
+ 	 * <code>BeanContextChildSupport</code>'s implementation simply
+ 	 * returns <code>true</code>.
+ 	 *
+ 	 * @param newBeanContext the new parent.
+ 	 * @return whether to allow the parent to be changed to the new
+ 	 *         value.
+ 	 */
+ 	public boolean validatePendingSetBeanContext(BeanContext newBeanContext) {
+ 		return true;
+ 	}
+ 
+ 	/**
+ 	 * Called by <code>setBeanContext()</code> to release resources of a what will soon no longer be the parent.
+ 	 * <P>
+ 	 *
+ 	 * <EM>This method is meant to be overriden.</EM>
+ 	 * <code>BeanContextChildSupport</code>'s implementation does
+ 	 * nothing.
+ 	 */
+ 	protected void releaseBeanContextResources() {
+ 	}
+ 
+ 	/**
+ 	 * Called by <code>setBeanContext()</code> to grab resources when the parent has been set.
+ 	 * <P>
+ 	 *
+ 	 * <EM>This method is meant to be overriden.</EM>
+ 	 * <code>BeanContextChildSupport</code>'s implementation does
+ 	 * nothing.
+ 	 */
+ 	protected void initializeBeanContextResources() {
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextContainerProxy.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextContainerProxy.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextContainerProxy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextContainerProxy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* java.beans.beancontext.BeanContextContainerProxy
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.awt.Container;
+ 
+ /**
+  * Interface for <code>BeanContext</code>s which wish to associate an
+  * AWT container with them.  The proxy is provided because the
+  * <code>addPropertyChangeListener()</code> and <code>add()</code> methods
+  * would conflict with <code>Component</code> and <code>Container</code>
+  * if you tried to extend.
+  *
+  * @specnote It is unclear whether anything besides <code>BeanContext</code>s
+  *           are allowed to implement this interface.
+  * @author John Keiser
+  * @since JDK1.2
+  */
+ 
+ public interface BeanContextContainerProxy {
+ 	/**
+ 	 * Get the <code>Container</code> associated with this <code>BeanContext</code>.
+ 	 * @return the <code>Container</code> associated with this
+ 	 * <code>BeanContext</code>.
+ 	 */
+ 	Container getContainer();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextEvent.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextEvent.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,110 ----
+ /* java.beans.beancontext.BeanContextEvent
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.util.EventObject;
+ 
+ /**
+  * Generic superclass for events fired by <code>BeanContext</code>s.
+  *
+  * @author John Keiser
+  * @since 1.2
+  */
+ 
+ public abstract class BeanContextEvent extends EventObject
+ {
+   private static final long serialVersionUID = 7267998073569045052L;
+   
+   /**
+    * The <code>BeanContext</code> that most recently passed this
+    * event on.
+    */
+   protected BeanContext propagatedFrom;
+ 
+   /**
+    * Create a new event, from the specified <code>BeanContext</code>.
+    * <code>propagatedFrom</code> will be initialized to
+    * <code>null</code>.
+    *
+    * @param source the source of the event.
+    */
+   protected BeanContextEvent(BeanContext source)
+   {
+     super(source);
+   }
+ 
+   /**
+    * Get the <code>BeanContext</code> that originated this event.
+    * @return the originator of this event.
+    */
+   public BeanContext getBeanContext()
+   {
+     return (BeanContext)getSource();
+   }
+ 
+   /**
+    * Get the most recent propagator of this event.
+    * If this value is <code>null</code>, you have received the event
+    * straight from the source.
+    *
+    * @return the most recent propagator of this event.
+    */
+   public BeanContext getPropagatedFrom()
+   {
+     return propagatedFrom;
+   }
+ 
+   /**
+    * Tell whether this event has been propagated.
+    * @return <code>true</code> iff <code>getPropagatedFrom() != null</code>.
+    */
+   public boolean isPropagated()
+   {
+     return propagatedFrom != null;
+   }
+ 
+   /**
+    * Set the most recent propagator of this event.
+    * @param propagator the most recent propagator of this event.
+    */
+   public void setPropagatedFrom(BeanContext propagator)
+   {
+     propagatedFrom = propagator;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextMembershipEvent.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextMembershipEvent.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextMembershipEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextMembershipEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,112 ----
+ /* java.beans.beancontext.BeanContextMembershipEvent
+    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.util.Arrays;
+ import java.util.Collection;
+ import java.util.Iterator;
+ 
+ /**
+  * Event fired when children are added to or removed from a <code>BeanContext</code>.
+  * Whether they were added or removed depends entirely on which method
+  * of the listener interface was called.
+  *
+  * @author John Keiser
+  * @since 1.2
+  * @see java.beans.beancontext.BeanContextMembershipListener
+  */
+ public class BeanContextMembershipEvent extends BeanContextEvent {
+ 	/**
+ 	 * The children that were added or removed.
+ 	 */
+ 	protected Collection children;
+ 
+ 	/**
+ 	 * Create a new membership event.
+ 	 * @param context the event source.
+ 	 * @param children the children added to or removed from the source.
+ 	 */
+ 	public BeanContextMembershipEvent(BeanContext context, Collection children) {
+ 		super(context);
+ 		this.children = children;
+ 	}
+ 
+ 	/**
+ 	 * Create a new membership event.
+ 	 * @param context the event source.
+ 	 * @param children the children added to or removed from the source.
+ 	 */
+ 	public BeanContextMembershipEvent(BeanContext context, Object[] children) {
+ 		super(context);
+ 		this.children = Arrays.asList(children);
+ 	}
+ 
+ 	/**
+ 	 * The number of children removed or added.
+ 	 * @return the number of children removed or added.
+ 	 */
+ 	public int size() {
+ 		return children.size();
+ 	}
+ 
+ 	/**
+ 	 * An iterator that will step through all the children.
+ 	 * @return an iterator over all the children.
+ 	 */
+ 	public Iterator iterator() {
+ 		return children.iterator();
+ 	}
+ 
+ 	/**
+ 	 * An array of the children.
+ 	 * @return an array of the children.
+ 	 */
+ 	public Object[] toArray() {
+ 		return children.toArray();
+ 	}
+ 
+ 	/**
+ 	 * Tell whether the <code>Object</code> is one of the children added or removed.
+ 	 * @param child the child to check.
+ 	 * @return whether the <code>Object</code> is added or removed.
+ 	 */
+ 	public boolean contains(Object child) {
+ 		return children.contains(child);
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextMembershipListener.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextMembershipListener.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextMembershipListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextMembershipListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* java.beans.beancontext.BeanContextMembershipListener
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * This is the interface to which <code>BeanContextMembershipEvent</code>s are sent.
+  * This happens when children are added to or removed from a
+  * <code>BeanContext</code>.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  */
+ 
+ public interface BeanContextMembershipListener extends EventListener {
+ 	/**
+ 	 * When beans are added to a <code>BeanContext</code>,
+ 	 * this method is called to fire the event.
+ 	 *
+ 	 * @param event the event, including which children were added.
+ 	 * @see java.beans.beancontext.BeanContext#add(java.lang.Object)
+ 	 */
+ 	void childrenAdded(BeanContextMembershipEvent event);
+ 
+ 	/**
+ 	 * When beans are removed from a <code>BeanContext</code>,
+ 	 * this method is called to fire the event.
+ 	 *
+ 	 * @param event the event, including which children were removed.
+ 	 * @see java.beans.beancontext.BeanContext#remove(java.lang.Object)
+ 	 */
+ 	void childrenRemoved(BeanContextMembershipEvent event);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextProxy.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextProxy.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextProxy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextProxy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* java.beans.beancontext.BeanContextProxy
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ /**
+  * Beans that wish to have a <code>BeanContextChild</code> or <code>BeanContext</code> associated with them
+  * but do not wish to implement those interfaces directly, can implement this interface.
+  * <P>
+  *
+  * Don't shoot yourself in the foot: if you already implement
+  * <code>BeanContextChild</code>, directly or indirectly, the whole
+  * workings of this package will be unpredictable because it is
+  * indeterminate as to whether the <code>BeanContextChild</code> is used
+  * in preference to its proxy or vice versa.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  */
+ 
+ public interface BeanContextProxy {
+ 	/**
+ 	 * Return the <code>BeanContextChild</code> associated with this
+ 	 * <code>Object</code>.
+ 	 *
+ 	 * @return the <code>BeanContextChild</code> associated with this
+ 	 * <code>Object</code>.
+ 	 */
+ 	BeanContextChild getBeanContextProxy();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,95 ----
+ /* java.beans.beancontext.BeanContextServiceAvailableEvent
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.util.Iterator;
+ 
+ /**
+  * Event fired when new services become available through a <code>BeanContextServices</code>.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  * @see java.beans.beancontext.BeanContextServicesListener
+  */
+ 
+ public class BeanContextServiceAvailableEvent extends BeanContextEvent {
+ 	/**
+ 	 * The <code>Class</code> representing the service which is now
+ 	 * available.
+ 	 */
+ 	protected Class serviceClass;
+ 
+ 	/**
+ 	 * Create a new service available event.
+ 	 * @param services the <code>BeanContextServices</code> through
+ 	 *        which the service is available.  This is also the source
+ 	 *        of the event.
+ 	 * @param serviceClass the service class that is now available.
+ 	 */
+ 	public BeanContextServiceAvailableEvent(BeanContextServices services, Class serviceClass) {
+ 		super(services);
+ 		this.serviceClass = serviceClass;
+ 	}
+ 
+ 	/**
+ 	 * Get the current service selectors of the service class.
+ 	 * This is identical to <code>getSourceAsBeanContextServices().getCurrentServiceSelectors(getServiceClass())</code>
+ 	 * @return the current service selectors of the service class.
+ 	 */
+ 	public Iterator getCurrentServiceSelectors() {
+ 		return getSourceAsBeanContextServices().getCurrentServiceSelectors(serviceClass);
+ 	}
+ 
+ 	/**
+ 	 * Get the newly available service class.
+ 	 * @return the service class.
+ 	 */
+ 	public Class getServiceClass() {
+ 		return serviceClass;
+ 	}
+ 
+ 	/**
+ 	 * Get the <code>BeanContextServices</code> through which the new service is available.
+ 	 * @return the <code>BeanContextServices</code> through which the
+ 	 *         new service is available.
+ 	 */
+ 	public BeanContextServices getSourceAsBeanContextServices() {
+ 		return (BeanContextServices)getSource();
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceProvider.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceProvider.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceProvider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceProvider.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,138 ----
+ /* java.beans.beancontext.BeanContextServiceProvider
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.util.Iterator;
+ 
+ /**
+  * An actual factory for services.
+  * <P>
+  *
+  * It is the <code>BeanContextServiceProvider</code>'s responsibility to
+  * register itself with whatever <code>BeanContextServices</code> object
+  * it wishes to provide services through using the
+  * <code>addService()</code> method.
+  * <P>
+  *
+  * If for some reason it can no longer provide services for a particular
+  * class, this class must invoke
+  * <code>BeanContextServices.revokeService(serviceClass,this,true)</code>
+  * for all the places it has registered the service.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  */
+ 
+ public interface BeanContextServiceProvider {
+ 	/**
+ 	 * Get a service.
+ 	 * Called from <code>BeanContextServices.getService()</code>.
+ 	 *
+ 	 * <p>If the requested service class is not available, or if this
+ 	 * <code>BeanContextServiceProvider</code> chooses not honor the
+ 	 * request for some reason, then this method will return
+ 	 * <code>null</code>.</p>
+ 	 *
+ 	 * This method may throw unchecked exceptions, so watch out.
+ 	 *
+ 	 * @param services the <code>BeanContextServices</code> that wants
+ 	 *        to get the service.  Only weak references to this will
+ 	 *        be retained, and it will never be changed, only queried
+ 	 *        in a read-only manner.
+ 	 * @param requestor the actual requestor of the service.  Only
+ 	 *        weak references to this will be retained, and it will
+ 	 *        never be changed, only queried in a read-only manner.
+ 	 * @param serviceClass the <code>Class</code> of the service being
+ 	 *        requested.
+ 	 * @param serviceSelector a parameter to customize the service
+ 	 *        returned with.
+ 	 * @return an instance of <code>serviceClass</code> (such that
+ 	 *        <code>instanceof</code> serviceClass is true), or
+ 	 *        <code>null</code>.
+ 	 * @see java.beans.beancontext.BeanContextServices#getService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Class,java.lang.Object,java.beans.beancontext.BeanContextServiceRevokedListener)
+ 	 */
+ 	Object getService(BeanContextServices services, Object requestor, Class serviceClass, Object serviceSelector);
+ 
+ 	/**
+ 	 * Release the service.
+ 	 * <P>
+ 	 *
+ 	 * Called by <code>BeanContextServices.releaseService()</code>.
+ 	 * <P>
+ 	 *
+ 	 * Most <code>BeanContextServiceProvider</code>s won't have to do
+ 	 * anything here.
+ 	 *
+ 	 * @param services the <code>BeanContextServices</code> that wants
+ 	 *        to release the service.  Only weak references to this will
+ 	 *        be retained, and it will never be changed, only queried
+ 	 *        in a read-only manner.
+ 	 * @param requestor the original requestor of the service.
+ 	 * @param service the service to relinquish
+ 	 * @see java.beans.beancontext.BeanContextServices#releaseService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Object)
+ 	 */
+ 	void releaseService(BeanContextServices services, Object requestor, Object service);
+ 
+ 	/**
+ 	 * Get a list of valid service selectors for the specified service class.
+ 	 * This method is called from
+ 	 * <code>BeanContextServices.getCurrentServiceSelectors()</code>.
+ 	 * <P>
+ 	 *
+ 	 * If the specified service class does not have a finite number of
+ 	 * valid service selectors, it should return <code>null</code>.
+ 	 * If it takes a general <code>Integer</code> parameter, for
+ 	 * example, you may as well return <code>null</code> or the poor
+ 	 * soul who called this method will be iterating all day.
+ 	 * <P>
+ 	 *
+ 	 * If it has no valid service selectors, it should still return an empty
+ 	 * <code>Iterator</code>.
+ 	 *
+ 	 * @param services the <code>BeanContextServices</code> that wants
+ 	 *        to get the service selectors.  Only weak references to this will
+ 	 *        be retained, and it will never be changed, only queried
+ 	 *        in a read-only manner.
+ 	 * @param serviceClass the service class to get selectors for.
+ 	 * @return a list of valid service selectors for the service
+ 	 *         class, or <code>null</code>.
+ 	 * @see java.beans.beancontext.BeanContextServices#getCurrentServiceSelectors(java.lang.Class)
+ 	 */
+ 	Iterator getCurrentServiceSelectors(BeanContextServices services, Class serviceClass);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* java.beans.beancontext.BeanContextServiceProviderBeanInfo
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.beans.BeanInfo;
+ 
+ /**
+  * <code>BeanContextServiceProvider</code>s implement this to provide information about all of the services they provide.
+  * <P>
+  *
+  * This is apparently so that you can import a bunch of services into a
+  * RAD tool and it will know about all of them and export them to the
+  * user in a readable manner.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  */
+ public interface BeanContextServiceProviderBeanInfo extends BeanInfo {
+ 	/**
+ 	 * Get <code>BeanInfo</code>s for all of the service classes of this <code>BeanInfoServiceProvider</code>.
+ 	 * @return <code>BeanInfo</code>s for all provided service classes.
+ 	 */
+ 	BeanInfo[] getServicesBeanInfo();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,110 ----
+ /* java.beans.beancontext.BeanContextServiceRevokedEvent
+    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ /**
+  * Event fired when services are revoked from a <code>BeanContextServices</code>.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  * @see java.beans.beancontext.BeanContextServiceRevokedListener
+  */
+ 
+ public class BeanContextServiceRevokedEvent extends BeanContextEvent {
+ 	/**
+ 	 * The <code>Class</code> representing the service which is now
+ 	 * available.
+ 	 */
+ 	protected Class serviceClass;
+ 	private boolean invalidateRefs;
+ 
+ 	/**
+ 	 * Create a new service revoked event.
+ 	 * @param services the <code>BeanContextServices</code> through
+ 	 *        which the service was available.  This is also the source
+ 	 *        of the event.
+ 	 * @param serviceClass the service class that is now revoked.
+ 	 * @param revokeNow whether the revocation is immediate for all
+ 	 *        classes or just a suggestion.
+ 	 */
+ 	public BeanContextServiceRevokedEvent(BeanContextServices services, Class serviceClass, boolean revokeNow) {
+ 		super(services);
+ 		this.serviceClass = serviceClass;
+ 		invalidateRefs = revokeNow;
+ 	}
+ 
+ 	/**
+ 	 * Get the revoked service class.
+ 	 * @return the service class.
+ 	 */
+ 	public Class getServiceClass() {
+ 		return serviceClass;
+ 	}
+ 
+ 	/**
+ 	 * Tell whether the revoked service class is the same as the specified class.
+ 	 * Identical to <code>getServiceClass().equals(c)</code>.
+ 	 * @param c the class to compare.
+ 	 * @return whether the clases are equal.
+ 	 */
+ 	public boolean isServiceClass(Class c) {
+ 		return serviceClass.equals(c);
+ 	}
+ 
+ 	/**
+ 	 * Get the <code>BeanContextServices</code> through which the service was available.
+ 	 * @return the <code>BeanContextServices</code> through which the
+ 	 *         service was available.
+ 	 */
+ 	public BeanContextServices getSourceAsBeanContextServices() {
+ 		return (BeanContextServices)getSource();
+ 	}
+ 
+ 	/**
+ 	 * Tell whether current instances of the revoked service are usable or not.
+ 	 * This is determined by whether the service was revoked
+ 	 * immediately.
+ 	 *
+ 	 * @return whether current instances of the revoked service are
+ 	 *         usable.
+ 	 */
+ 	public boolean isCurrentServiceInvalidNow() {
+ 		return invalidateRefs;
+ 	}
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedListener.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedListener.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* java.beans.beancontext.BeanContextServiceRevokedListener
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * Listens for service revoke events.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  */
+ 
+ public interface BeanContextServiceRevokedListener extends EventListener {
+ 	/**
+ 	 * Called by <code>BeanContextServices.revokeService()</code> to indicate that a service has been revoked.
+ 	 * If you have a reference to such a service, it should be
+ 	 * discarded and may no longer function properly.
+ 	 * <code>getService()</code> will no longer work on the specified
+ 	 * service class after this event has been fired.
+ 	 *
+ 	 * @param event the service revoked event.
+ 	 * @see java.beans.beancontext.BeanContextServices#revokeService(java.lang.Class,java.beans.beancontext.BeanContextServiceProvider,boolean)
+ 	 */
+ 	void serviceRevoked(BeanContextServiceRevokedEvent event);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServices.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServices.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServices.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServices.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,216 ----
+ /* java.beans.beancontext.BeanContextServices
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.util.Iterator;
+ import java.util.TooManyListenersException;
+ 
+ /**
+  * Allows a <code>BeanContext</code> to provide services to its children.
+  *
+  * @specnote it is unclear whether a <code>BeanContextServices</code>
+  *           should delegate unhandled requests to parents.  I assume so.
+  * @author John Keiser
+  * @since 1.2
+  */
+ 
+ public interface BeanContextServices
+   extends BeanContext, BeanContextServicesListener
+ {
+   /**
+    * Register a service to make it available to others.
+    * This class may refuse to add the service based on whatever
+    * information it can gather, including whether the service
+    * provider is trusted.
+    *
+    * @param serviceClass the service class.
+    * @param provider the factory that will actually provide the service.
+    * @return whether the service was added or not.
+    */
+   boolean addService (Class serviceClass,
+                              BeanContextServiceProvider provider);
+ 
+   /**
+    * Make it so that no one else can use this service.
+    * <P>
+    *
+    * If <code>revokeNow</code> is <code>false</code>, the only
+    * effect of this method is to make all subsequent calls to
+    * <code>getService()</code> on this service class fail.
+    * <P>
+    *
+    * If it is <code>true</code>, a message is also sent out to all
+    * listeners on the service and all references to it are released.
+    *
+    * @param serviceClass the service class to revoke.
+    * @param provider the service provider providing the service class.
+    * @param revokeNow whether to release all current references to
+    *        the service.
+    */
+   void revokeService (Class serviceClass,
+                              BeanContextServiceProvider provider,
+                              boolean revokeNow);
+ 
+   /**
+    * Release your copy of this service.
+    * <P>
+    *
+    * If all copies of the service's class have been relinquished by
+    * the requestor, the <code>BeanContextServiceRevokedListener</code>
+    * previously registered by <code>getService()</code> will be
+    * unregistered.
+    *
+    * @param requestorChild the original <code>BeanContextChild</code>
+    *        requesting the service.
+    * @param requestor the original requestor of the service.
+    * @param service the service to relinquish
+    * @see #getService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Class,java.lang.Object,java.beans.beancontext.BeanContextServiceRevokedListener)
+    */
+   void releaseService (BeanContextChild requestorChild, Object requestor,
+                               Object service);
+ 
+   /**
+    * Get a service from this <code>BeanContextServices</code>.
+    * <P>
+    *
+    * The specified listener will be registered to receive a
+    * revocation notice for the specified serviceClass.  One
+    * notification per service class per requestor object will be
+    * sent.
+    * <P>
+    *
+    * The listener will be unregistered when all services that were
+    * obtained by that requestor for that service class are released.
+    * <P>
+    *
+    * If the requested service class is not available, or if this
+    * <code>BeanContextServices</code> object chooses not honor the
+    * request because the service class has been revoked or for some
+    * other reason, then this method will return <code>null</code>.
+    * <P>
+    *
+    * This method may throw unchecked exceptions, so watch out.
+    *
+    * @specnote it is not specified what happens when two subsequent
+    *           calls are made to <code>getService()</code> with the
+    *           same requestor object and service class but different
+    *           listeners.  Which listener is to be notified?
+    *
+    * @param requestorChild the <code>BeanContextChild</code>
+    *        associated with the requestor.  Typically this will be
+    *        the same as the requestor itself, but since any
+    *        <code>Object</code>, even one outside the hierarchy, may
+    *        make a request, this parameter is necessary.  Only weak
+    *        references to this will be retained, and it will never
+    *        be changed, only queried in a read-only manner.
+    * @param requestor the actual requestor of the service.  Only
+    *        weak references to this will be retained, and it will
+    *        never be changed, only queried in a read-only manner.
+    * @param serviceClass the <code>Class</code> of the service being
+    *        requested.
+    * @param serviceSelector a parameter to customize the service
+    *        returned with.
+    * @param listener a listener that will be notified if the service
+    *        being requested is revoked.
+    * @return an instance of <code>serviceClass</code> (such that
+    *        <code>instanceof</code> serviceClass is true), or
+    *        <code>null</code>.
+    */
+   Object getService (BeanContextChild requestorChild, Object requestor,
+                             Class serviceClass, Object serviceSelector,
+                             BeanContextServiceRevokedListener listener)
+     throws TooManyListenersException;
+ 
+   /**
+    * Get a list of all service classes supported.
+    * <P>
+    *
+    * This method must synchronize on
+    * <code>BeanContext.globalHierarchyLock</code>.
+    *
+    * @return a list of all service classes supported.
+    * @see java.beans.beancontext.BeanContext#globalHierarchyLock
+    */
+   Iterator getCurrentServiceClasses ();
+ 
+   /**
+    * Get a list of valid service selectors for the specified service class.
+    * <P>
+    *
+    * If the specified service class does not have a finite number of
+    * valid service selectors, it should return <code>null</code>.
+    * If it takes a general <code>Integer</code> parameter, for
+    * example, you may as well return <code>null</code> or the poor
+    * soul who called this method will be iterating all day.
+    * <P>
+    *
+    * If it has no valid service selectors, it should still return an empty
+    * <code>Iterator</code>.
+    *
+    * @param serviceClass the service class to get selectors for.
+    * @return a list of valid service selectors for the service
+    *         class, or <code>null</code>.
+    */
+   Iterator getCurrentServiceSelectors (Class serviceClass);
+ 
+   /**
+    * Tell whether the specified service class is available.
+    * Iff getService() could return a non-null value for the
+    * specified service, this method will return <code>true</code>.
+    *
+    * @param serviceClass the service class to check on.
+    * @return whether the specified service class is available.
+    */
+   boolean hasService (Class serviceClass);
+ 
+   /**
+    * Add a listener on all adds and removes of services.
+    * @param listener the listener to add.
+    */
+   void addBeanContextServicesListener (BeanContextServicesListener listener);
+ 
+   /**
+    * Remove a listener on all adds and removes of services.
+    * @specnote it is not certain whether this should remove this
+    *           listener if it was specified in
+    *           <code>getService()</code>.
+    * @param listener the listener to add.
+    */
+   void removeBeanContextServicesListener (BeanContextServicesListener listener);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServicesListener.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServicesListener.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServicesListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServicesListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /* java.beans.beancontext.BeanContextServicesListener
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ /**
+  * Listens for service add and revoke events.
+  *
+  * @author John Keiser
+  * @since JDK1.2
+  */
+ 
+ public interface BeanContextServicesListener extends BeanContextServiceRevokedListener {
+ 	/**
+ 	 * Called by <code>BeanContextServices</code> whenever a service is made available.
+ 	 *
+ 	 * @param event the service revoked event, with useful information
+ 	 *        about the new service.
+ 	 */
+ 	void serviceAvailable(BeanContextServiceAvailableEvent event);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,300 ----
+ /* BeanContextServicesSupport.java --
+    Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Locale;
+ import java.util.TooManyListenersException;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.2
+  */
+ public class BeanContextServicesSupport
+   extends BeanContextSupport
+   implements BeanContextServices
+ {
+   private static final long serialVersionUID = -8494482757288719206L;
+   
+   protected class BCSSChild
+     extends BeanContextSupport.BCSChild
+   {
+     private static final long serialVersionUID = -3263851306889194873L;
+   }
+ 
+   protected class BCSSProxyServiceProvider
+     implements BeanContextServiceProvider,
+     BeanContextServiceRevokedListener
+   {
+     private static final long serialVersionUID = 7078212910685744490L;
+     
+     public Iterator getCurrentServiceSelectors (BeanContextServices bcs,
+                                                 Class serviceClass)
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     public Object getService (BeanContextServices bcs,
+                               Object requestor,
+                               Class serviceClass,
+                               Object serviceSelector)
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     public void releaseService (BeanContextServices bcs,
+                                 Object requestor,
+                                 Object service)
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     public void serviceRevoked (BeanContextServiceRevokedEvent bcsre)
+     {
+       throw new Error ("Not implemented");
+     }
+   }
+ 
+   protected static class BCSSServiceProvider
+     implements Serializable
+   {
+     private static final long serialVersionUID = 861278251667444782L;
+ 
+     protected BeanContextServiceProvider serviceProvider;
+ 
+     protected BeanContextServiceProvider getServiceProvider()
+     {
+       return serviceProvider;
+     }
+   }
+ 
+   protected transient ArrayList bcsListeners;
+ 
+   protected transient BCSSProxyServiceProvider proxy;
+ 
+   protected transient int serializable;
+ 
+   protected transient HashMap services;
+ 
+   public BeanContextServicesSupport ()
+   {
+     super();
+   }
+ 
+   public BeanContextServicesSupport (BeanContextServices peer)
+   {
+     super(peer);
+   }
+ 
+   public BeanContextServicesSupport(BeanContextServices peer, Locale locale)
+   {
+     super(peer, locale);
+   }
+ 
+   public BeanContextServicesSupport(BeanContextServices peer, Locale locale,
+                                     boolean dtime)
+   {
+     super(peer, locale, dtime);
+   }
+ 
+   public BeanContextServicesSupport(BeanContextServices peer, Locale locale,
+                                     boolean dtime, boolean visible)
+   {
+     super(peer, locale, dtime, visible);
+   }
+ 
+   public void addBeanContextServicesListener
+     (BeanContextServicesListener listener)
+   {
+     if (! bcsListeners.contains(listener))
+       bcsListeners.add(listener);
+   }
+ 
+   public boolean addService (Class serviceClass, BeanContextServiceProvider bcsp)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected boolean addService (Class serviceClass,
+                                 BeanContextServiceProvider bcsp,
+                                 boolean fireEvent)
+   {
+     throw new Error ("Not implemented");
+   }
+   
+   protected void bcsPreDeserializationHook (ObjectInputStream ois)
+     throws ClassNotFoundException, IOException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected void bcsPreSerializationHook (ObjectOutputStream oos) 
+     throws IOException
+   {
+     throw new Error ("Not implemented");
+   }
+   
+   protected void childJustRemovedHook (Object child,
+                                        BeanContextSupport.BCSChild bcsc)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected BeanContextSupport.BCSChild createBCSChild (Object targetChild,
+                                                         Object peer) 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected BeanContextServicesSupport.BCSSServiceProvider
+   createBCSSServiceProvider (Class sc, BeanContextServiceProvider bcsp)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected final void fireServiceAdded (BeanContextServiceAvailableEvent bcssae)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected final void fireServiceAdded (Class serviceClass) 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected final void fireServiceRevoked(BeanContextServiceRevokedEvent event)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected final void fireServiceRevoked (Class serviceClass,
+                                            boolean revokeNow)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public BeanContextServices getBeanContextServicesPeer ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected static final BeanContextServicesListener
+   getChildBeanContextServicesListener (Object child) 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public Iterator getCurrentServiceClasses () 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public Iterator getCurrentServiceSelectors (Class serviceClass) 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public Object getService (BeanContextChild child, Object requestor,
+                             Class serviceClass, Object serviceSelector,
+                             BeanContextServiceRevokedListener bcsrl)
+     throws TooManyListenersException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public boolean hasService (Class serviceClass)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void initialize ()
+   {
+     super.initialize();
+ 
+     bcsListeners = new ArrayList();
+     services = new HashMap();
+   }
+ 
+   protected  void initializeBeanContextResources () 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected  void releaseBeanContextResources () 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void releaseService (BeanContextChild child, Object requestor,
+                               Object service)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void removeBeanContextServicesListener
+     (BeanContextServicesListener listener)
+   {
+     int index = bcsListeners.indexOf(listener);
+ 
+     if (index > -1)
+       bcsListeners.remove(index);
+   }
+ 
+   public void revokeService (Class serviceClass, BeanContextServiceProvider bcsp,
+                              boolean revokeCurrentServicesNow) 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void serviceAvailable (BeanContextServiceAvailableEvent bcssae) 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void serviceRevoked (BeanContextServiceRevokedEvent bcssre) 
+   {
+     throw new Error ("Not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextSupport.java gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextSupport.java
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/BeanContextSupport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/BeanContextSupport.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,460 ----
+ /* BeanContextSupport.java --
+    Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.beans.beancontext;
+ 
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyVetoException;
+ import java.beans.VetoableChangeListener;
+ import java.beans.Visibility;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.net.URL;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Locale;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.2
+  */
+ public class BeanContextSupport extends BeanContextChildSupport
+   implements BeanContext, Serializable, PropertyChangeListener,
+   VetoableChangeListener
+ {
+   private static final long serialVersionUID = -4879613978649577204L;
+   
+   private void readObject (ObjectInputStream s)
+     throws ClassNotFoundException, IOException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   private void writeObject (ObjectOutputStream s)
+     throws ClassNotFoundException, IOException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected class BCSChild implements Serializable
+   {
+     private static final long serialVersionUID = -5815286101609939109L;
+   }
+ 
+   protected static final class BCSIterator implements Iterator
+   {
+     public boolean hasNext ()
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     public Object next ()
+     {
+       throw new Error ("Not implemented");
+     }
+ 
+     public void remove ()
+     {
+       // This must be a noop remove operation.
+     }
+   }
+ 
+   protected transient ArrayList bcmListeners;
+ 
+   protected transient HashMap children;
+ 
+   protected transient boolean designTime;
+ 
+   protected transient Locale locale;
+ 
+   protected transient boolean okToUseGui;
+ 
+   /**
+    * Construct a BeanContextSupport instance.
+    */
+   public BeanContextSupport ()
+   {
+     this (null, null, true, true);
+   }
+ 
+   /**
+    * Construct a BeanContextSupport instance.
+    */
+   public BeanContextSupport (BeanContext peer)
+   {
+     this (peer, null, true, true);
+   }
+ 
+   /**
+    * Construct a BeanContextSupport instance.
+    */
+   public BeanContextSupport (BeanContext peer, Locale lcle)
+   {
+     this (peer, lcle, true, true);
+   }
+ 
+   /**
+    * Construct a BeanContextSupport instance.
+    */
+   public BeanContextSupport (BeanContext peer, Locale lcle, boolean dtime)
+   {
+     this (peer, lcle, dtime, true);
+   }
+ 
+   /**
+    * Construct a BeanContextSupport instance.
+    */
+   public BeanContextSupport (BeanContext peer, Locale lcle, boolean dtime,
+                              boolean visible)
+   {
+     locale = lcle;
+     designTime = dtime;
+     okToUseGui = visible;
+ 
+     initialize ();
+   }
+ 
+   public boolean add (Object targetChild)
+   {
+     if (targetChild == null)
+       throw new IllegalArgumentException();
+ 
+     if (children.containsKey(targetChild))
+       return false;
+ 
+     // FIXME: The second argument is surely wrong.
+     children.put(targetChild, targetChild);
+     return true;
+   }
+ 
+   public boolean addAll (Collection c)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public void addBeanContextMembershipListener
+     (BeanContextMembershipListener listener)
+   {
+     if (! bcmListeners.contains(listener))
+       bcmListeners.add(listener);
+   }
+ 
+   public boolean avoidingGui ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected Iterator bcsChildren ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected void bcsPreDeserializationHook (ObjectInputStream ois)
+     throws ClassNotFoundException, IOException 
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected void bcsPreSerializationHook (ObjectOutputStream oos)
+     throws IOException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected void childDeserializedHook (Object child, BeanContextSupport.BCSChild bcsc)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected void childJustAddedHook (Object child, BeanContextSupport.BCSChild bcsc)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected void childJustRemovedHook (Object child, BeanContextSupport.BCSChild bcsc)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected static final boolean classEquals (Class first, Class second)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void clear ()
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public boolean contains (Object o)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public boolean containsAll (Collection c)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public boolean containsKey (Object o)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected final Object[] copyChildren ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected BeanContextSupport.BCSChild createBCSChild (Object targetChild, Object peer)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected final void deserialize (ObjectInputStream ois, Collection coll)
+     throws ClassNotFoundException, IOException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void dontUseGui ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected final void fireChildrenAdded (BeanContextMembershipEvent bcme)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected final void fireChildrenRemoved (BeanContextMembershipEvent bcme)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public BeanContext getBeanContextPeer ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected static final BeanContextChild getChildBeanContextChild (Object child)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected static final BeanContextMembershipListener getChildBeanContextMembershipListener (Object child)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected static final PropertyChangeListener getChildPropertyChangeListener (Object child)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected static final Serializable getChildSerializable (Object child)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected static final VetoableChangeListener getChildVetoableChangeListener (Object child)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected static final Visibility getChildVisibility (Object child)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public Locale getLocale ()
+   {
+     return locale;
+   }
+ 
+   public URL getResource (String name, BeanContextChild bcc)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public InputStream getResourceAsStream (String name, BeanContextChild bcc)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected void initialize ()
+   {
+     bcmListeners = new ArrayList();
+     children = new HashMap();
+   }
+ 
+   public Object instantiateChild (String beanName)
+     throws IOException, ClassNotFoundException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public boolean isDesignTime ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public boolean isEmpty ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public boolean isSerializing ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public Iterator iterator ()
+   {
+     return children.keySet().iterator();
+   }
+ 
+   public boolean needsGui ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void okToUseGui ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void propertyChange (PropertyChangeEvent pce)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public final void readChildren (ObjectInputStream ois)
+     throws IOException, ClassNotFoundException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public boolean remove (Object targetChild)
+   {
+     return remove(targetChild, true);
+   }
+ 
+   protected boolean remove (Object targetChild, boolean callChildSetBC)
+   {
+     if (targetChild == null)
+       throw new IllegalArgumentException();
+     
+     throw new Error ("Not implemented");
+   }
+ 
+   public boolean removeAll (Collection c)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public void removeBeanContextMembershipListener (BeanContextMembershipListener bcml)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public boolean retainAll (Collection c)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   protected final void serialize (ObjectOutputStream oos, Collection coll)
+     throws IOException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void setDesignTime (boolean dtime)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void setLocale (Locale newLocale)
+     throws PropertyVetoException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public int size ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public Object[] toArray ()
+   {
+     return children.keySet().toArray();
+   }
+ 
+   public Object[] toArray(Object[] array)
+   {
+     return children.keySet().toArray(array);
+   }
+ 
+   protected boolean validatePendingAdd (Object targetChild)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   protected boolean validatePendingRemove (Object targetChild)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public void vetoableChange (PropertyChangeEvent pce)
+     throws PropertyVetoException
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   public final void writeChildren (ObjectOutputStream oos)
+     throws IOException
+   {
+     throw new Error ("Not implemented");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/beancontext/package.html gcc-4.1.0/libjava/classpath/java/beans/beancontext/package.html
*** gcc-4.0.2/libjava/classpath/java/beans/beancontext/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/beancontext/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.beans.beancontext package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.beans.beancontext</title></head>
+ 
+ <body>
+ <p>Containers and execution environments for beans.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/beans/package.html gcc-4.1.0/libjava/classpath/java/beans/package.html
*** gcc-4.0.2/libjava/classpath/java/beans/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/beans/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.beans package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.beans</title></head>
+ 
+ <body>
+ <p>Listeners and descriptors for managing beans.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/BufferedInputStream.java gcc-4.1.0/libjava/classpath/java/io/BufferedInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/BufferedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/BufferedInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,379 ----
+ /* BufferedInputStream.java -- An input stream that implements buffering
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+  
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+  
+ /**
+  * This subclass of <code>FilterInputStream</code> buffers input from an 
+  * underlying implementation to provide a possibly more efficient read
+  * mechanism.  It maintains the buffer and buffer state in instance 
+  * variables that are available to subclasses.  The default buffer size
+  * of 2048 bytes can be overridden by the creator of the stream.
+  * <p>
+  * This class also implements mark/reset functionality.  It is capable
+  * of remembering any number of input bytes, to the limits of
+  * system memory or the size of <code>Integer.MAX_VALUE</code>
+  * <p>
+  * Please note that this class does not properly handle character
+  * encodings.  Consider using the <code>BufferedReader</code> class which
+  * does.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Jeroen Frijters (jeroen@frijters.net)
+  */
+ public class BufferedInputStream extends FilterInputStream
+ {
+ 
+   /**
+    * This is the default buffer size
+    */
+   private static final int DEFAULT_BUFFER_SIZE = 2048;
+ 
+   /**
+    * The buffer used for storing data from the underlying stream.
+    */
+   protected byte[] buf;
+ 
+   /**
+    * The number of valid bytes currently in the buffer.  It is also the index
+    * of the buffer position one byte past the end of the valid data.
+    */
+   protected int count;
+ 
+   /**
+    * The index of the next character that will by read from the buffer.
+    * When <code>pos == count</code>, the buffer is empty.
+    */
+   protected int pos;
+ 
+   /**
+    * The value of <code>pos</code> when the <code>mark()</code> method was
+    * called.  
+    * This is set to -1 if there is no mark set.
+    */
+   protected int markpos = -1;
+ 
+   /**
+    * This is the maximum number of bytes than can be read after a 
+    * call to <code>mark()</code> before the mark can be discarded.
+    * After this may bytes are read, the <code>reset()</code> method
+    * may not be called successfully.
+    */
+   protected int marklimit;
+ 
+   /**
+    * This is the initial buffer size. When the buffer is grown because
+    * of marking requirements, it will be grown by bufferSize increments.
+    * The underlying stream will be read in chunks of bufferSize.
+    */
+   private final int bufferSize;
+ 
+   /**
+    * This method initializes a new <code>BufferedInputStream</code> that will
+    * read from the specified subordinate stream with a default buffer size
+    * of 2048 bytes
+    *
+    * @param in The subordinate stream to read from
+    */
+   public BufferedInputStream(InputStream in)
+   {
+     this(in, DEFAULT_BUFFER_SIZE);
+   }
+ 
+   /**
+    * This method initializes a new <code>BufferedInputStream</code> that will
+    * read from the specified subordinate stream with a buffer size that
+    * is specified by the caller.
+    *
+    * @param in The subordinate stream to read from
+    * @param size The buffer size to use
+    *
+    * @exception IllegalArgumentException when size is smaller then 1
+    */
+   public BufferedInputStream(InputStream in, int size)
+   {
+     super(in);
+     if (size <= 0)
+       throw new IllegalArgumentException();
+     buf = new byte[size];
+     // initialize pos & count to bufferSize, to prevent refill from
+     // allocating a new buffer (if the caller starts out by calling mark()).
+     pos = count = bufferSize = size;
+   }
+ 
+   /**
+    * This method returns the number of bytes that can be read from this
+    * stream before a read can block.  A return of 0 indicates that blocking
+    * might (or might not) occur on the very next read attempt.
+    * <p>
+    * The number of available bytes will be the number of read ahead bytes 
+    * stored in the internal buffer plus the number of available bytes in
+    * the underlying stream.
+    *
+    * @return The number of bytes that can be read before blocking could occur
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized int available() throws IOException
+   {
+     return count - pos + super.available();
+   }
+ 
+   /**
+    * This method closes the underlying input stream and frees any
+    * resources associated with it. Sets <code>buf</code> to <code>null</code>.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public void close() throws IOException
+   {
+     // Free up the array memory.
+     buf = null;
+     pos = count = 0;
+     markpos = -1;
+     super.close();
+   }
+ 
+   /**
+    * This method marks a position in the input to which the stream can be
+    * "reset" by calling the <code>reset()</code> method.  The parameter
+    * <code>readlimit</code> is the number of bytes that can be read from the 
+    * stream after setting the mark before the mark becomes invalid.  For
+    * example, if <code>mark()</code> is called with a read limit of 10, then
+    * when 11 bytes of data are read from the stream before the
+    * <code>reset()</code> method is called, then the mark is invalid and the
+    * stream object instance is not required to remember the mark.
+    * <p>
+    * Note that the number of bytes that can be remembered by this method
+    * can be greater than the size of the internal read buffer.  It is also
+    * not dependent on the subordinate stream supporting mark/reset
+    * functionality.
+    *
+    * @param readlimit The number of bytes that can be read before the mark
+    * becomes invalid
+    */
+   public synchronized void mark(int readlimit)
+   {
+     marklimit = readlimit;
+     markpos = pos;
+   }
+ 
+   /**
+    * This method returns <code>true</code> to indicate that this class
+    * supports mark/reset functionality.
+    *
+    * @return <code>true</code> to indicate that mark/reset functionality is
+    * supported
+    *
+    */
+   public boolean markSupported()
+   {
+     return true;
+   }
+ 
+   /**
+    * This method reads an unsigned byte from the input stream and returns it
+    * as an int in the range of 0-255.  This method also will return -1 if
+    * the end of the stream has been reached.
+    * <p>
+    * This method will block until the byte can be read.
+    *
+    * @return The byte read or -1 if end of stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized int read() throws IOException
+   {
+     if (pos >= count && !refill())
+       return -1;	// EOF
+ 
+     return buf[pos++] & 0xFF;
+   }
+ 
+   /**
+    * This method reads bytes from a stream and stores them into a caller
+    * supplied buffer.  It starts storing the data at index <code>off</code>
+    * into the buffer and attempts to read <code>len</code> bytes.  This method
+    * can return before reading the number of bytes requested, but it will try
+    * to read the requested number of bytes by repeatedly calling the underlying
+    * stream as long as available() for this stream continues to return a
+    * non-zero value (or until the requested number of bytes have been read).
+    * The actual number of bytes read is returned as an int.  A -1 is returned
+    * to indicate the end of the stream.
+    * <p>
+    * This method will block until some data can be read.
+    *
+    * @param b The array into which the bytes read should be stored
+    * @param off The offset into the array to start storing bytes
+    * @param len The requested number of bytes to read
+    *
+    * @return The actual number of bytes read, or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    * @exception IndexOutOfBoundsException when <code>off</code> or
+    *            <code>len</code> are negative, or when <code>off + len</code>
+    *            is larger then the size of <code>b</code>,
+    */
+   public synchronized int read(byte[] b, int off, int len) throws IOException
+   {
+     if (off < 0 || len < 0 || b.length - off < len)
+       throw new IndexOutOfBoundsException();
+ 
+     if (len == 0)
+       return 0;
+ 
+     if (pos >= count && !refill())
+       return -1;		// No bytes were read before EOF.
+ 
+     int totalBytesRead = Math.min(count - pos, len);
+     System.arraycopy(buf, pos, b, off, totalBytesRead);
+     pos += totalBytesRead;
+     off += totalBytesRead;
+     len -= totalBytesRead;
+ 
+     while (len > 0 && super.available() > 0 && refill())
+       {
+ 	int remain = Math.min(count - pos, len);
+ 	System.arraycopy(buf, pos, b, off, remain);
+ 	pos += remain;
+ 	off += remain;
+ 	len -= remain;
+ 	totalBytesRead += remain;
+       }
+ 
+     return totalBytesRead;
+   }
+ 
+   /**
+    * This method resets a stream to the point where the <code>mark()</code>
+    * method was called.  Any bytes that were read after the mark point was
+    * set will be re-read during subsequent reads.
+    * <p>
+    * This method will throw an IOException if the number of bytes read from
+    * the stream since the call to <code>mark()</code> exceeds the mark limit
+    * passed when establishing the mark.
+    *
+    * @exception IOException If <code>mark()</code> was never called or more
+    *            then <code>marklimit</code> bytes were read since the last
+    *            call to <code>mark()</code>
+    */
+   public synchronized void reset() throws IOException
+   {
+     if (markpos == -1)
+       throw new IOException(buf == null ? "Stream closed." : "Invalid mark.");
+ 
+     pos = markpos;
+   }
+ 
+   /**
+    * This method skips the specified number of bytes in the stream.  It
+    * returns the actual number of bytes skipped, which may be less than the
+    * requested amount.
+    *
+    * @param n The requested number of bytes to skip
+    *
+    * @return The actual number of bytes skipped.
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized long skip(long n) throws IOException
+   {
+     if (buf == null)
+       throw new IOException("Stream closed.");
+ 
+     final long origN = n;
+ 
+     while (n > 0L)
+       {
+ 	if (pos >= count && !refill())
+           break;
+ 
+ 	int numread = (int) Math.min((long) (count - pos), n);
+ 	pos += numread;
+ 	n -= numread;
+       }
+ 
+     return origN - n;
+   }
+ 
+   /**
+    * Called to refill the buffer (when count is equal to pos).
+    *
+    * @return <code>true</code> when at least one additional byte was read
+    *         into <code>buf</code>, <code>false</code> otherwise (at EOF).
+    */
+   private boolean refill() throws IOException
+   {
+     if (buf == null)
+       throw new IOException("Stream closed.");
+ 
+     if (markpos == -1 || count - markpos >= marklimit)
+       {
+ 	markpos = -1;
+ 	pos = count = 0;
+       }
+     else
+       {
+ 	byte[] newbuf = buf;
+ 	if (markpos < bufferSize)
+ 	  {
+ 	    newbuf = new byte[count - markpos + bufferSize];
+ 	  }
+ 	System.arraycopy(buf, markpos, newbuf, 0, count - markpos);
+ 	buf = newbuf;
+ 	count -= markpos;
+ 	pos -= markpos;
+ 	markpos = 0;
+       }
+ 
+     int numread = super.read(buf, count, bufferSize);
+ 
+     if (numread <= 0)	// EOF
+       return false;
+ 
+     count += numread;
+     return true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/BufferedOutputStream.java gcc-4.1.0/libjava/classpath/java/io/BufferedOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/BufferedOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/BufferedOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,192 ----
+ /* BufferedOutputStream.java -- Buffer output into large blocks before writing
+    Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+   * This class accumulates bytes written in a buffer instead of immediately
+   * writing the data to the underlying output sink. The bytes are instead
+   * as one large block when the buffer is filled, or when the stream is
+   * closed or explicitly flushed. This mode operation can provide a more
+   * efficient mechanism for writing versus doing numerous small unbuffered
+   * writes.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class BufferedOutputStream extends FilterOutputStream
+ {
+   /**
+    * This is the default buffer size
+    */
+   private static final int DEFAULT_BUFFER_SIZE = 512;
+ 
+   /**
+    * This is the internal byte array used for buffering output before
+    * writing it.
+    */
+   protected byte[] buf;
+ 
+   /**
+    * This is the number of bytes that are currently in the buffer and
+    * are waiting to be written to the underlying stream.  It always points to
+    * the index into the buffer where the next byte of data will be stored
+    */
+   protected int count;
+ 
+   /**
+    * This method initializes a new <code>BufferedOutputStream</code> instance
+    * that will write to the specified subordinate <code>OutputStream</code>
+    * and which will use a default buffer size of 512 bytes.
+    *
+    * @param out The underlying <code>OutputStream</code> to write data to
+    */
+   public BufferedOutputStream(OutputStream out)
+   {
+     this(out, DEFAULT_BUFFER_SIZE);
+   }
+ 
+   /**
+    * This method initializes a new <code>BufferedOutputStream</code> instance
+    * that will write to the specified subordinate <code>OutputStream</code>
+    * and which will use the specified buffer size
+    *
+    * @param out The underlying <code>OutputStream</code> to write data to
+    * @param size The size of the internal buffer
+    */
+   public BufferedOutputStream(OutputStream out, int size)
+   {
+     super(out);
+ 
+     buf = new byte[size];
+   }
+ 
+   /**
+    * This method causes any currently buffered bytes to be immediately
+    * written to the underlying output stream.
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized void flush() throws IOException
+   {
+     if (count == 0)
+       return;
+ 
+     out.write(buf, 0, count);
+     count = 0;
+     out.flush();
+   }
+ 
+   /**
+    * This method flushes any remaining buffered bytes then closes the 
+    * underlying output stream.  Any further attempts to write to this stream
+    * may throw an exception
+    *
+   public synchronized void close() throws IOException
+   {
+     flush();
+     out.close();
+   }
+   */
+ 
+   /**
+    * This method runs when the object is garbage collected.  It is 
+    * responsible for ensuring that all buffered bytes are written and
+    * for closing the underlying stream.
+    *
+    * @exception IOException If an error occurs (ignored by the Java runtime)
+    *
+   protected void finalize() throws IOException
+   {
+     close();
+   }
+   */
+ 
+   /**
+    * This method writes a single byte of data.  This will be written to the
+    * buffer instead of the underlying data source.  However, if the buffer
+    * is filled as a result of this write request, it will be flushed to the
+    * underlying output stream.
+    *
+    * @param b The byte of data to be written, passed as an int
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized void write(int b) throws IOException
+   {
+     if (count == buf.length)
+       flush();
+ 
+     buf[count] = (byte)(b & 0xFF);
+     ++count;
+   }
+ 
+   /**
+    * This method writes <code>len</code> bytes from the byte array 
+    * <code>buf</code> starting at position <code>offset</code> in the buffer. 
+    * These bytes will be written to the internal buffer.  However, if this
+    * write operation fills the buffer, the buffer will be flushed to the
+    * underlying output stream.
+    *
+    * @param buf The array of bytes to write.
+    * @param offset The index into the byte array to start writing from.
+    * @param len The number of bytes to write.
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized void write(byte[] buf, int offset, int len) 
+     throws IOException
+   {
+     // Buffer can hold everything.  Note that the case where LEN < 0
+     // is automatically handled by the downstream write.
+     if (len < (this.buf.length - count))
+       {
+         System.arraycopy(buf, offset, this.buf, count, len);
+         count += len;
+       }
+     else
+       {
+         // The write was too big.  So flush the buffer and write the new
+         // bytes directly to the underlying stream, per the JDK 1.2
+         // docs.
+         flush();
+         out.write (buf, offset, len);
+       }
+   }
+ 
+ } // class BufferedOutputStream 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/BufferedReader.java gcc-4.1.0/libjava/classpath/java/io/BufferedReader.java
*** gcc-4.0.2/libjava/classpath/java/io/BufferedReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/BufferedReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,581 ----
+ /* BufferedReader.java
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+      Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * This subclass of <code>FilterReader</code> buffers input from an 
+  * underlying implementation to provide a possibly more efficient read
+  * mechanism.  It maintains the buffer and buffer state in instance 
+  * variables that are available to subclasses.  The default buffer size
+  * of 8192 chars can be overridden by the creator of the stream.
+  * <p>
+  * This class also implements mark/reset functionality.  It is capable
+  * of remembering any number of input chars, to the limits of
+  * system memory or the size of <code>Integer.MAX_VALUE</code>
+  *
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class BufferedReader extends Reader
+ {
+   Reader in;
+   char[] buffer;
+   /* Index of current read position.  Must be >= 0 and <= limit. */
+   /* There is a special case where pos may be equal to limit+1; this
+    * is used as an indicator that a readLine was done with a '\r' was
+    * the very last char in the buffer.  Since we don't want to read-ahead
+    * and potentially block, we set pos this way to indicate the situation
+    * and deal with it later.  Doing it this way rather than having a
+    * separate boolean field to indicate the condition has the advantage
+    * that it is self-clearing on things like mark/reset.
+    */
+   int pos;
+   /* Limit of valid data in buffer.  Must be >= pos and <= buffer.length. */
+   /* This can be < pos in the one special case described above. */
+   int limit;
+ 
+   /* The value -1 means there is no mark, or the mark has been invalidated.
+      Otherwise, markPos is the index in the buffer of the marked position.
+      Must be >= 0 and <= pos.
+      Note we do not explicitly store the read-limit.
+      The implicit read-limit is (buffer.length - markPos), which is
+      guaranteed to be >= the read-limit requested in the call to mark. */
+   int markPos = -1;
+ 
+   // The JCL book specifies the default buffer size as 8K characters.
+   // This is package-private because it is used by LineNumberReader.
+   static final int DEFAULT_BUFFER_SIZE = 8192;
+ 
+   /**
+    * The line buffer for <code>readLine</code>.
+    */
+   private StringBuffer sbuf = null;
+ 
+   /**
+     * Create a new <code>BufferedReader</code> that will read from the 
+     * specified subordinate stream with a default buffer size of 8192 chars.
+     *
+     * @param in The subordinate stream to read from
+     */
+   public BufferedReader(Reader in)
+   {
+     this(in, DEFAULT_BUFFER_SIZE);
+   }
+ 
+   /**
+    * Create a new <code>BufferedReader</code> that will read from the 
+    * specified subordinate stream with a buffer size that is specified by the 
+    * caller.
+    *
+    * @param in The subordinate stream to read from
+    * @param size The buffer size to use
+    *
+    * @exception IllegalArgumentException if size &lt;= 0
+    */
+   public BufferedReader(Reader in, int size)
+   {
+     super(in.lock);
+     if (size <= 0)
+       throw new IllegalArgumentException("Illegal buffer size: " + size);
+     this.in = in;
+     buffer = new char[size];
+   }
+ 
+   /**
+    * This method closes the underlying stream and frees any associated
+    * resources.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void close() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (in != null)
+ 	  in.close();
+ 	in = null;
+ 	buffer = null;
+       }
+   }
+ 
+   /**
+    * Returns <code>true</code> to indicate that this class supports mark/reset 
+    * functionality.
+    *
+    * @return <code>true</code>
+    */
+   public boolean markSupported()
+   {
+     return true;
+   }
+ 
+   /**
+    * Mark a position in the input to which the stream can be
+    * "reset" by calling the <code>reset()</code> method.  The parameter
+    * <code>readLimit</code> is the number of chars that can be read from the 
+    * stream after setting the mark before the mark becomes invalid.  For
+    * example, if <code>mark()</code> is called with a read limit of 10, then 
+    * when 11 chars of data are read from the stream before the 
+    * <code>reset()</code> method is called, then the mark is invalid and the 
+    * stream object instance is not required to remember the mark.
+    * <p>
+    * Note that the number of chars that can be remembered by this method
+    * can be greater than the size of the internal read buffer.  It is also
+    * not dependent on the subordinate stream supporting mark/reset
+    * functionality.
+    *
+    * @param readLimit The number of chars that can be read before the mark 
+    *        becomes invalid
+    *
+    * @exception IOException If an error occurs
+    * @exception IllegalArgumentException if readLimit is negative.
+    */
+   public void mark(int readLimit) throws IOException
+   {
+     if (readLimit < 0)
+       throw new IllegalArgumentException("Read-ahead limit is negative");
+ 
+     synchronized (lock)
+       {
+ 	checkStatus();
+ 	// In this method we need to be aware of the special case where
+ 	// pos + 1 == limit.  This indicates that a '\r' was the last char
+ 	// in the buffer during a readLine.  We'll want to maintain that
+ 	// condition after we shift things around and if a larger buffer is
+ 	// needed to track readLimit, we'll have to make it one element
+ 	// larger to ensure we don't invalidate the mark too early, if the
+ 	// char following the '\r' is NOT a '\n'.  This is ok because, per
+ 	// the spec, we are not required to invalidate when passing readLimit.
+ 	//
+ 	// Note that if 'pos > limit', then doing 'limit -= pos' will cause
+ 	// limit to be negative.  This is the only way limit will be < 0.
+ 
+ 	if (pos + readLimit > limit)
+ 	  {
+ 	    char[] old_buffer = buffer;
+ 	    int extraBuffSpace = 0;
+ 	    if (pos > limit)
+ 	      extraBuffSpace = 1;
+ 	    if (readLimit + extraBuffSpace > limit)
+ 	      buffer = new char[readLimit + extraBuffSpace];
+ 	    limit -= pos;
+ 	    if (limit >= 0)
+ 	      {
+ 	        System.arraycopy(old_buffer, pos, buffer, 0, limit);
+ 	        pos = 0;
+ 	      }
+ 	  }
+ 
+ 	if (limit < 0)
+ 	  {
+ 	    // Maintain the relationship of 'pos > limit'.
+ 	    pos = 1;
+ 	    limit = markPos = 0;
+ 	  }
+ 	else
+ 	  markPos = pos;
+ 	// Now pos + readLimit <= buffer.length. thus if we need to read
+ 	// beyond buffer.length, then we are allowed to invalidate markPos.
+       }
+   }
+ 
+   /**
+    * Reset the stream to the point where the <code>mark()</code> method
+    * was called.  Any chars that were read after the mark point was set will
+    * be re-read during subsequent reads.
+    * <p>
+    * This method will throw an IOException if the number of chars read from
+    * the stream since the call to <code>mark()</code> exceeds the mark limit
+    * passed when establishing the mark.
+    *
+    * @exception IOException If an error occurs;
+    */
+   public void reset() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	checkStatus();
+ 	if (markPos < 0)
+ 	  throw new IOException("mark never set or invalidated");
+ 
+ 	// Need to handle the extremely unlikely case where a readLine was
+ 	// done with a '\r' as the last char in the buffer; which was then
+ 	// immediately followed by a mark and a reset with NO intervening
+ 	// read of any sort.  In that case, setting pos to markPos would
+ 	// lose that info and a subsequent read would thus not skip a '\n'
+ 	// (if one exists).  The value of limit in this rare case is zero.
+ 	// We can assume that if limit is zero for other reasons, then
+ 	// pos is already set to zero and doesn't need to be readjusted.
+ 	if (limit > 0)
+ 	  pos = markPos;
+       }
+   }
+ 
+   /**
+    * This method determines whether or not a stream is ready to be read.  If
+    * this method returns <code>false</code> then this stream could (but is
+    * not guaranteed to) block on the next read attempt.
+    *
+    * @return <code>true</code> if this stream is ready to be read, 
+    * <code>false</code> otherwise
+    *
+    * @exception IOException If an error occurs
+    */
+   public boolean ready() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	checkStatus();
+ 	return pos < limit || in.ready();
+       }
+   }
+ 
+   /**
+    * This method read chars from a stream and stores them into a caller
+    * supplied buffer.  It starts storing the data at index 
+    * <code>offset</code> into
+    * the buffer and attempts to read <code>len</code> chars.  This method can
+    * return before reading the number of chars requested.  The actual number
+    * of chars read is returned as an int.  A -1 is returned to indicate the
+    * end of the stream.
+    * <p>
+    * This method will block until some data can be read.
+    *
+    * @param buf The array into which the chars read should be stored
+    * @param offset The offset into the array to start storing chars
+    * @param count The requested number of chars to read
+    *
+    * @return The actual number of chars read, or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    * @exception IndexOutOfBoundsException If offset and count are not
+    * valid regarding buf.
+    */
+   public int read(char[] buf, int offset, int count) throws IOException
+   {
+     if (offset < 0 || offset + count > buf.length || count < 0)
+       throw new IndexOutOfBoundsException();
+ 
+     synchronized (lock)
+       {
+ 	checkStatus();
+ 	// Once again, we need to handle the special case of a readLine
+ 	// that has a '\r' at the end of the buffer.  In this case, we'll
+ 	// need to skip a '\n' if it is the next char to be read.
+ 	// This special case is indicated by 'pos > limit'.
+ 	boolean retAtEndOfBuffer = false;
+ 
+ 	int avail = limit - pos;
+ 	if (count > avail)
+ 	  {
+ 	    if (avail > 0)
+ 	      count = avail;
+ 	    else // pos >= limit
+ 	      {
+ 		if (limit == buffer.length)
+ 		  markPos = -1; // read too far - invalidate the mark.
+ 		if (pos > limit)
+ 		  {
+ 		    // Set a boolean and make pos == limit to simplify things.
+ 		    retAtEndOfBuffer = true;
+ 		    --pos;
+ 		  }
+ 		if (markPos < 0)
+ 		  {
+ 		    // Optimization:  can read directly into buf.
+ 		    if (count >= buffer.length && !retAtEndOfBuffer)
+ 		      return in.read(buf, offset, count);
+ 		    pos = limit = 0;
+ 		  }
+ 		avail = in.read(buffer, limit, buffer.length - limit);
+ 		if (retAtEndOfBuffer && avail > 0 && buffer[limit] == '\n')
+ 		  {
+ 		    --avail;
+ 		    limit++;
+ 		  }
+ 		if (avail < count)
+ 		  {
+ 		    if (avail <= 0)
+ 		      return avail;
+ 		    count = avail;
+ 		  }
+ 		limit += avail;
+ 	      }
+ 	  }
+ 	System.arraycopy(buffer, pos, buf, offset, count);
+ 	pos += count;
+ 	return count;
+       }
+   }
+ 
+   /* Read more data into the buffer.  Update pos and limit appropriately.
+      Assumes pos==limit initially.  May invalidate the mark if read too much.
+      Return number of chars read (never 0), or -1 on eof. */
+   private int fill() throws IOException
+   {
+     checkStatus();
+     // Handle the special case of a readLine that has a '\r' at the end of
+     // the buffer.  In this case, we'll need to skip a '\n' if it is the
+     // next char to be read.  This special case is indicated by 'pos > limit'.
+     boolean retAtEndOfBuffer = false;
+     if (pos > limit)
+       {
+         retAtEndOfBuffer = true;
+ 	--pos;
+       }
+ 
+     if (markPos >= 0 && limit == buffer.length)
+       markPos = -1;
+     if (markPos < 0)
+       pos = limit = 0;
+     int count = in.read(buffer, limit, buffer.length - limit);
+     if (count > 0)
+       limit += count;
+ 
+     if (retAtEndOfBuffer && buffer[pos] == '\n')
+       {
+ 	--count;
+ 	// If the mark was set to the location of the \n, then we
+ 	// must change it to fully pretend that the \n does not
+ 	// exist.
+ 	if (markPos == pos)
+ 	  ++markPos;
+ 	++pos;
+       }
+ 
+     return count;
+   }
+   
+   public int read() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	checkStatus();
+ 	if (pos >= limit && fill () <= 0)
+ 	  return -1;
+ 	return buffer[pos++];
+       }
+   }
+ 
+   /* Return the end of the line starting at this.pos and ending at limit.
+    * The index returns is *before* any line terminators, or limit
+    * if no line terminators were found.
+    */
+   private int lineEnd(int limit)
+   {
+     int i = pos;
+     for (; i < limit; i++)
+       {
+ 	char ch = buffer[i];
+ 	if (ch == '\n' || ch == '\r')
+ 	  break;
+       }
+     return i;
+   }
+ 
+   /**
+    * This method reads a single line of text from the input stream, returning
+    * it as a <code>String</code>.  A line is terminated by "\n", a "\r", or
+    * an "\r\n" sequence.  The system dependent line separator is not used.
+    * The line termination characters are not returned in the resulting
+    * <code>String</code>.
+    * 
+    * @return The line of text read, or <code>null</code> if end of stream.
+    * 
+    * @exception IOException If an error occurs
+    */
+   public String readLine() throws IOException
+   {
+     checkStatus();
+     // Handle the special case where a previous readLine (with no intervening
+     // reads/skips) had a '\r' at the end of the buffer.
+     // In this case, we'll need to skip a '\n' if it's the next char to be read.
+     // This special case is indicated by 'pos > limit'.
+     if (pos > limit)
+       {
+ 	int ch = read();
+ 	if (ch < 0)
+ 	  return null;
+ 	if (ch != '\n')
+ 	  --pos;
+       }
+     int i = lineEnd(limit);
+     if (i < limit)
+       {
+ 	String str = String.valueOf(buffer, pos, i - pos);
+ 	pos = i + 1;
+ 	// If the last char in the buffer is a '\r', we must remember
+ 	// to check if the next char to be read after the buffer is refilled
+ 	// is a '\n'.  If so, skip it.  To indicate this condition, we set pos
+ 	// to be limit + 1, which normally is never possible.
+ 	if (buffer[i] == '\r')
+ 	  if (pos == limit || buffer[pos] == '\n')
+ 	    pos++;
+ 	return str;
+       }
+     if (sbuf == null)
+       sbuf = new StringBuffer(200);
+     else
+       sbuf.setLength(0);
+     sbuf.append(buffer, pos, i - pos);
+     pos = i;
+     // We only want to return null when no characters were read before
+     // EOF.  So we must keep track of this separately.  Otherwise we
+     // would treat an empty `sbuf' as an EOF condition, which is wrong
+     // when there is just a newline.
+     boolean eof = false;
+     for (;;)
+       {
+ 	// readLine should block. So we must not return until a -1 is reached.
+ 	if (pos >= limit)
+ 	  {
+ 	    // here count == 0 isn't sufficient to give a failure.
+ 	    int count = fill();
+ 	    if (count < 0)
+ 	      {
+ 		eof = true;
+ 		break;
+ 	      }
+ 	    continue;
+ 	  }
+ 	int ch = buffer[pos++];
+ 	if (ch == '\n' || ch == '\r')
+ 	  {
+ 	    // Check here if a '\r' was the last char in the buffer; if so,
+ 	    // mark it as in the comment above to indicate future reads
+ 	    // should skip a newline that is the next char read after
+ 	    // refilling the buffer.
+ 	    if (ch == '\r')
+ 	      if (pos == limit || buffer[pos] == '\n')
+ 	        pos++;
+ 	    break;
+ 	  }
+ 	i = lineEnd(limit);
+ 	sbuf.append(buffer, pos - 1, i - (pos - 1));
+ 	pos = i;
+       }
+     return (sbuf.length() == 0 && eof) ? null : sbuf.toString();
+   }
+ 
+   /**
+    * This method skips the specified number of chars in the stream.  It
+    * returns the actual number of chars skipped, which may be less than the
+    * requested amount.
+    * <p>
+    * This method first discards chars in the buffer, then calls the
+    * <code>skip</code> method on the underlying stream to skip the 
+    * remaining chars.
+    *
+    * @param count The requested number of chars to skip
+    *
+    * @return The actual number of chars skipped.
+    *
+    * @exception IOException If an error occurs.
+    * @exception IllegalArgumentException If count is negative.
+    */
+   public long skip(long count) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	checkStatus();
+ 	if (count < 0)
+ 	  throw new IllegalArgumentException("skip value is negative");
+ 	if (count == 0)
+ 	  return 0;
+ 	// Yet again, we need to handle the special case of a readLine
+ 	// that has a '\r' at the end of the buffer.  In this case, we need
+ 	// to ignore a '\n' if it is the next char to be read.
+ 	// This special case is indicated by 'pos > limit' (i.e. avail < 0).
+ 	// To simplify things, if we're dealing with the special case for
+ 	// readLine, just read the next char (since the fill method will
+ 	// skip the '\n' for us).  By doing this, we'll have to back up pos.
+ 	// That's easier than trying to keep track of whether we've skipped
+ 	// one element or not.
+ 	if (pos > limit)
+ 	  {
+ 	    if (read() < 0)
+ 	      return 0;
+ 	    else
+ 	      --pos; 
+ 	  }
+ 
+ 	int avail = limit - pos;
+ 
+ 	if (count < avail)
+ 	  {
+ 	    pos += count;
+ 	    return count;
+ 	  }
+ 
+ 	pos = limit;
+ 	long todo = count - avail;
+ 	if (todo > buffer.length)
+ 	  {
+ 	    markPos = -1;
+ 	    todo -= in.skip(todo);
+ 	  }
+ 	else
+ 	  {
+ 	    while (todo > 0)
+ 	      {
+ 		avail = fill();
+ 		if (avail <= 0)
+ 		  break;
+ 		if (avail > todo)
+ 		  avail = (int) todo;
+ 		pos += avail;
+ 		todo -= avail;
+ 	      }
+ 	  }
+ 	return count - todo;
+       }
+   }
+   
+   private void checkStatus() throws IOException
+   {
+     if (in == null)
+       throw new IOException("Stream closed");
+   }  
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/BufferedWriter.java gcc-4.1.0/libjava/classpath/java/io/BufferedWriter.java
*** gcc-4.0.2/libjava/classpath/java/io/BufferedWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/BufferedWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,262 ----
+ /* BufferedWriter.java -- Buffer output into large blocks before writing
+    Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to version 1.1.
+  */
+ 
+ /**
+  * This class accumulates chars written in a buffer instead of immediately
+  * writing the data to the underlying output sink. The chars are instead
+  * as one large block when the buffer is filled, or when the stream is
+  * closed or explicitly flushed. This mode operation can provide a more
+  * efficient mechanism for writing versus doing numerous small unbuffered
+  * writes.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @date September 25, 1998 
+  */
+ public class BufferedWriter extends Writer
+ {
+   /**
+    * This is the default buffer size
+    */
+   private static final int DEFAULT_BUFFER_SIZE = 8192;
+ 
+   /**
+    * This is the underlying <code>Writer</code> to which this object
+    * sends its output.
+    */
+   private Writer out;
+ 
+   /**
+    * This is the internal char array used for buffering output before
+    * writing it.
+    */
+   char[] buffer;
+ 
+   /**
+    * This is the number of chars that are currently in the buffer and
+    * are waiting to be written to the underlying stream.  It always points to
+    * the index into the buffer where the next char of data will be stored
+    */
+   int count;
+ 
+   /**
+    * This method initializes a new <code>BufferedWriter</code> instance
+    * that will write to the specified subordinate <code>Writer</code>
+    * and which will use a default buffer size of 8192 chars.
+    *
+    * @param out The underlying <code>Writer</code> to write data to
+    */
+   public BufferedWriter (Writer out)
+   {
+     this (out, DEFAULT_BUFFER_SIZE);
+   }
+ 
+   /**
+    * This method initializes a new <code>BufferedWriter</code> instance
+    * that will write to the specified subordinate <code>Writer</code>
+    * and which will use the specified buffer size
+    *
+    * @param out The underlying <code>Writer</code> to write data to
+    * @param size The size of the internal buffer
+    */
+   public BufferedWriter (Writer out, int size)
+   {
+     super(out.lock);
+     this.out = out;
+     this.buffer = new char[size];
+     this.count = 0;
+   }
+ 
+   /**
+    * This method flushes any remaining buffered chars then closes the 
+    * underlying output stream.  Any further attempts to write to this stream
+    * may throw an exception
+    *
+    * @exception IOException If an error occurs.
+    */
+   public void close () throws IOException
+   {
+     synchronized (lock)
+       {
+ 	// It is safe to call localFlush even if the stream is already
+ 	// closed.
+ 	localFlush ();
+ 	out.close();
+ 	buffer = null;
+       }
+   }
+ 
+   /**
+    * This method causes any currently buffered chars to be immediately
+    * written to the underlying output stream.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void flush () throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buffer == null)
+ 	  throw new IOException ("Stream closed");
+ 	localFlush ();
+ 	out.flush();
+       }
+   }
+ 
+   /**
+    * This method writes out a system depedent line separator sequence.  The
+    * actual value written is detemined from the <xmp>line.separator</xmp>
+    * system property.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void newLine () throws IOException
+   {
+     write (System.getProperty("line.separator"));
+   }
+ 
+   /**
+    * This method writes a single char of data.  This will be written to the
+    * buffer instead of the underlying data source.  However, if the buffer
+    * is filled as a result of this write request, it will be flushed to the
+    * underlying output stream.
+    *
+    * @param oneChar The char of data to be written, passed as an int
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (int oneChar) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buffer == null)
+ 	  throw new IOException ("Stream closed");
+ 	buffer[count++] = (char) oneChar;
+ 	if (count == buffer.length)
+ 	  localFlush ();
+       }
+   }
+ 
+   /**
+    * This method writes <code>len</code> chars from the char array 
+    * <code>buf</code> starting at position <code>offset</code> in the buffer. 
+    * These chars will be written to the internal buffer.  However, if this
+    * write operation fills the buffer, the buffer will be flushed to the
+    * underlying output stream.
+    *
+    * @param buf The array of chars to write.
+    * @param offset The index into the char array to start writing from.
+    * @param len The number of chars to write.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (char[] buf, int offset, int len) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buffer == null)
+ 	  throw new IOException ("Stream closed");
+ 
+ 	// Bypass buffering if there is too much incoming data.
+ 	if (count + len > buffer.length)
+ 	  {
+ 	    localFlush ();
+ 	    out.write(buf, offset, len);
+ 	  }
+ 	else
+ 	  {
+ 	    System.arraycopy(buf, offset, buffer, count, len);
+ 	    count += len;
+ 	    if (count == buffer.length)
+ 	      localFlush ();
+ 	  }
+       }
+   }
+ 
+   /**
+    * This method writes <code>len</code> chars from the <code>String</code>
+    * <code>str</code> starting at position <code>offset</code> in the string. 
+    * These chars will be written to the internal buffer.  However, if this
+    * write operation fills the buffer, the buffer will be flushed to the
+    * underlying output stream.
+    *
+    * @param str The <code>String</code> to write.
+    * @param offset The index into the string to start writing from.
+    * @param len The number of chars to write.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (String str, int offset, int len) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buffer == null)
+ 	  throw new IOException ("Stream closed");
+ 
+ 	if (count + len > buffer.length)
+ 	  {
+ 	    localFlush ();
+ 	    out.write(str, offset, len);
+ 	  }
+ 	else
+ 	  {
+ 	    str.getChars(offset, offset + len, buffer, count);
+ 	    count += len;
+ 	    if (count == buffer.length)
+ 	      localFlush ();
+ 	  }
+       }
+   }
+ 
+   // This should only be called with the lock held.
+   private void localFlush () throws IOException
+   {
+     if (count > 0)
+       {
+ 	out.write(buffer, 0, count);
+ 	count = 0;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ByteArrayInputStream.java gcc-4.1.0/libjava/classpath/java/io/ByteArrayInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/ByteArrayInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ByteArrayInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,251 ----
+ /* ByteArrayInputStream.java -- Read an array as a stream
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+   * This class permits an array of bytes to be read as an input stream.
+   *
+   * @author Warren Levy (warrenl@cygnus.com)
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */ 
+ public class ByteArrayInputStream extends InputStream
+ {
+   /**
+    * The array that contains the data supplied during read operations
+    */
+   protected byte[] buf;
+ 
+   /**
+    * The array index of the next byte to be read from the buffer
+    * <code>buf</code>
+    */
+   protected int pos;
+ 
+   /**
+    * The currently marked position in the stream.  This defaults to 0, so a
+    * reset operation on the stream resets it to read from array index 0 in
+    * the buffer - even if the stream was initially created with an offset
+    * greater than 0
+    */
+   protected int mark;
+ 
+   /**
+    * This indicates the maximum number of bytes that can be read from this
+    * stream.  It is the array index of the position after the last valid
+    * byte in the buffer <code>buf</code>
+    */
+   protected int count;
+ 
+   /**
+    * Create a new ByteArrayInputStream that will read bytes from the passed
+    * in byte array.  This stream will read from the beginning to the end
+    * of the array.  It is identical to calling an overloaded constructor
+    * as <code>ByteArrayInputStream(buf, 0, buf.length)</code>.
+    * <p>
+    * Note that this array is not copied.  If its contents are changed 
+    * while this stream is being read, those changes will be reflected in the
+    * bytes supplied to the reader.  Please use caution in changing the 
+    * contents of the buffer while this stream is open.
+    *
+    * @param buffer The byte array buffer this stream will read from.
+    */
+   public ByteArrayInputStream(byte[] buffer)
+   {
+     this(buffer, 0, buffer.length);
+   }
+ 
+   /**
+    * Create a new ByteArrayInputStream that will read bytes from the
+    * passed in byte array.  This stream will read from position
+    * <code>offset</code> in the array for a length of
+    * <code>length</code> bytes past <code>offset</code>.  If the
+    * stream is reset to a position before <code>offset</code> then
+    * more than <code>length</code> bytes can be read from the stream.
+    * The <code>length</code> value should be viewed as the array index
+    * one greater than the last position in the buffer to read.
+    * <p>
+    * Note that this array is not copied.  If its contents are changed 
+    * while this stream is being read, those changes will be reflected in the
+    * bytes supplied to the reader.  Please use caution in changing the 
+    * contents of the buffer while this stream is open.
+    *
+    * @param buffer The byte array buffer this stream will read from.
+    * @param offset The index into the buffer to start reading bytes from
+    * @param length The number of bytes to read from the buffer
+    */
+   public ByteArrayInputStream(byte[] buffer, int offset, int length)
+   {
+     if (offset < 0  || length < 0 || offset > buffer.length)
+       throw new IllegalArgumentException();
+ 
+     buf = buffer;
+ 
+     count = offset + length;
+     if (count > buf.length)
+       count = buf.length;
+ 
+     pos = offset;
+     mark = pos;
+   }
+ 
+   /**
+    * This method returns the number of bytes available to be read from this
+    * stream.  The value returned will be equal to <code>count - pos</code>.
+    *
+    * @return The number of bytes that can be read from this stream
+    * before blocking, which is all of them 
+    */
+   public synchronized int available()
+   {
+     return count - pos;
+   }
+ 
+   /**
+    * This method sets the mark position in this stream to the current
+    * position.  Note that the <code>readlimit</code> parameter in this
+    * method does nothing as this stream is always capable of
+    * remembering all the bytes int it.
+    * <p>
+    * Note that in this class the mark position is set by default to
+    * position 0 in the stream.  This is in constrast to some other
+    * stream types where there is no default mark position.
+    *
+    * @param readLimit The number of bytes this stream must remember.
+    * This parameter is ignored.
+    */
+   public synchronized void mark(int readLimit)
+   {
+     // readLimit is ignored per Java Class Lib. book, p.220.
+     mark = pos;
+   }
+ 
+   /**
+    * This method overrides the <code>markSupported</code> method in
+    * <code>InputStream</code> in order to return <code>true</code> -
+    * indicating that this stream class supports mark/reset
+    * functionality.
+    *
+    * @return <code>true</code> to indicate that this class supports
+    * mark/reset.
+    */
+   public boolean markSupported()
+   {
+     return true;
+   }
+ 
+   /**
+    * This method reads one byte from the stream.  The <code>pos</code>
+    * counter is advanced to the next byte to be read.  The byte read is
+    * returned as an int in the range of 0-255.  If the stream position
+    * is already at the end of the buffer, no byte is read and a -1 is
+    * returned in order to indicate the end of the stream.
+    *
+    * @return The byte read, or -1 if end of stream
+    */
+   public synchronized int read()
+   {
+     if (pos < count)
+       return ((int) buf[pos++]) & 0xFF;
+     return -1;
+   }
+ 
+   /**
+    * This method reads bytes from the stream and stores them into a
+    * caller supplied buffer.  It starts storing the data at index
+    * <code>offset</code> into the buffer and attempts to read
+    * <code>len</code> bytes.  This method can return before reading
+    * the number of bytes requested if the end of the stream is
+    * encountered first.  The actual number of bytes read is returned.
+    * If no bytes can be read because the stream is already at the end
+    * of stream position, a -1 is returned.
+    * <p>
+    * This method does not block.
+    *
+    * @param buffer The array into which the bytes read should be stored.
+    * @param offset The offset into the array to start storing bytes
+    * @param length The requested number of bytes to read
+    *
+    * @return The actual number of bytes read, or -1 if end of stream.
+    */
+   public synchronized int read(byte[] buffer, int offset, int length)
+   {
+     if (pos >= count)
+       return -1;
+ 
+     int numBytes = Math.min(count - pos, length);
+     System.arraycopy(buf, pos, buffer, offset, numBytes);
+     pos += numBytes;
+     return numBytes;
+   }
+ 
+   /**
+    * This method sets the read position in the stream to the mark
+    * point by setting the <code>pos</code> variable equal to the
+    * <code>mark</code> variable.  Since a mark can be set anywhere in
+    * the array, the mark/reset methods int this class can be used to
+    * provide random search capabilities for this type of stream.
+    */
+   public synchronized void reset()
+   {
+     pos = mark;
+   }
+ 
+   /**
+    * This method attempts to skip the requested number of bytes in the
+    * input stream.  It does this by advancing the <code>pos</code>
+    * value by the specified number of bytes.  It this would exceed the
+    * length of the buffer, then only enough bytes are skipped to
+    * position the stream at the end of the buffer.  The actual number
+    * of bytes skipped is returned.
+    *
+    * @param num The requested number of bytes to skip
+    *
+    * @return The actual number of bytes skipped.
+    */
+   public synchronized long skip(long num)
+   {
+     // Even though the var numBytes is a long, in reality it can never
+     // be larger than an int since the result of subtracting 2 positive
+     // ints will always fit in an int.  Since we have to return a long
+     // anyway, numBytes might as well just be a long.
+     long numBytes = Math.min((long) (count - pos), num < 0 ? 0L : num);
+     pos += numBytes;
+     return numBytes;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ByteArrayOutputStream.java gcc-4.1.0/libjava/classpath/java/io/ByteArrayOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/ByteArrayOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ByteArrayOutputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,284 ----
+ /* BufferedReader.java
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to version 1.1.
+  */
+ 
+ /**
+   * This class allows data to be written to a byte array buffer and
+   * and then retrieved by an application.   The internal byte array
+   * buffer is dynamically resized to hold all the data written.  Please
+   * be aware that writing large amounts to data to this stream will
+   * cause large amounts of memory to be allocated.
+   * <p>
+   * The size of the internal buffer defaults to 32 and it is resized
+   * by doubling the size of the buffer.  This default size can be
+   * overridden by using the
+   * <code>gnu.java.io.ByteArrayOutputStream.initialBufferSize</code>
+   * property.
+   * <p>
+   * There is a constructor that specified the initial buffer size and
+   * that is the preferred way to set that value because it it portable
+   * across all Java class library implementations.
+   * <p>
+   * Note that this class also has methods that convert the byte array
+   * buffer to a <code>String</code> using either the system default or an
+   * application specified character encoding.  Thus it can handle 
+   * multibyte character encodings.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   * @date September 24, 1998 
+   */
+ public class ByteArrayOutputStream extends OutputStream
+ {
+   /**
+    * This method initializes a new <code>ByteArrayOutputStream</code>
+    * with the default buffer size of 32 bytes.  If a different initial
+    * buffer size is desired, see the constructor
+    * <code>ByteArrayOutputStream(int size)</code>.  For applications
+    * where the source code is not available, the default buffer size
+    * can be set using the system property
+    * <code>gnu.java.io.ByteArrayOutputStream.initialBufferSize</code>
+    */
+   public ByteArrayOutputStream ()
+   {
+     this (initial_buffer_size);
+   }
+ 
+   /**
+    * This method initializes a new <code>ByteArrayOutputStream</code> with
+    * a specified initial buffer size.
+    *
+    * @param size The initial buffer size in bytes
+    */
+   public ByteArrayOutputStream (int size)
+   {
+     buf = new byte[size];
+     count = 0;
+   }
+ 
+   /**
+    * This method discards all of the bytes that have been written to
+    * the internal buffer so far by setting the <code>count</code>
+    * variable to 0.  The internal buffer remains at its currently
+    * allocated size.
+    */
+   public synchronized void reset ()
+   {
+     count = 0;
+   }
+ 
+   /**
+    * This method returns the number of bytes that have been written to
+    * the buffer so far.  This is the same as the value of the protected
+    * <code>count</code> variable.  If the <code>reset</code> method is
+    * called, then this value is reset as well.  Note that this method does
+    * not return the length of the internal buffer, but only the number
+    * of bytes that have been written to it.
+    *
+    * @return The number of bytes in the internal buffer
+    *
+    * @see #reset()
+    */
+   public int size ()
+   {
+     return count;
+   }
+ 
+   /**
+    * This method returns a byte array containing the bytes that have been
+    * written to this stream so far.  This array is a copy of the valid
+    * bytes in the internal buffer and its length is equal to the number of
+    * valid bytes, not necessarily to the the length of the current 
+    * internal buffer.  Note that since this method allocates a new array,
+    * it should be used with caution when the internal buffer is very large.
+    */
+   public synchronized byte[] toByteArray ()
+   {
+     byte[] ret = new byte[count];
+     System.arraycopy(buf, 0, ret, 0, count);
+     return ret;
+   }
+ 
+   /**
+    * Returns the bytes in the internal array as a <code>String</code>.  The
+    * bytes in the buffer are converted to characters using the system default
+    * encoding.  There is an overloaded <code>toString()</code> method that
+    * allows an application specified character encoding to be used.
+    *
+    * @return A <code>String</code> containing the data written to this
+    * stream so far
+    */
+   public String toString ()
+   {
+     return new String (buf, 0, count);
+   }
+ 
+   /**
+    * Returns the bytes in the internal array as a <code>String</code>.  The
+    * bytes in the buffer are converted to characters using the specified
+    * encoding. 
+    *
+    * @param enc The name of the character encoding to use
+    *
+    * @return A <code>String</code> containing the data written to this
+    * stream so far
+    *
+    * @exception UnsupportedEncodingException If the named encoding is
+    * not available
+    */
+   public String toString (String enc) throws UnsupportedEncodingException
+   {
+     return new String (buf, 0, count, enc);
+   }
+ 
+   /**
+    * This method returns the bytes in the internal array as a
+    * <code>String</code>.  It uses each byte in the array as the low
+    * order eight bits of the Unicode character value and the passed in
+    * parameter as the high eight bits.
+    * <p>
+    * This method does not convert bytes to characters in the proper way and
+    * so is deprecated in favor of the other overloaded <code>toString</code>
+    * methods which use a true character encoding.
+    *
+    * @param hibyte The high eight bits to use for each character in
+    * the <code>String</code> 
+    *
+    * @return A <code>String</code> containing the data written to this
+    * stream so far
+    *
+    * @deprecated
+    */
+   public String toString (int hibyte)
+   {
+     return new String (buf, hibyte, 0, count);
+   }
+ 
+   // Resize buffer to accommodate new bytes.
+   private void resize (int add)
+   {
+     if (count + add > buf.length)
+       {
+ 	int newlen = buf.length * 2;
+ 	if (count + add > newlen)
+ 	  newlen = count + add;
+ 	byte[] newbuf = new byte[newlen];
+ 	System.arraycopy(buf, 0, newbuf, 0, count);
+ 	buf = newbuf;
+       }
+   }
+ 
+   /**
+    * This method writes the writes the specified byte into the internal
+    * buffer.
+    *
+    * @param oneByte The byte to be read passed as an int
+    */
+   public synchronized void write (int oneByte)
+   {
+     resize (1);
+     buf[count++] = (byte) oneByte;
+   }
+ 
+   /**
+    * This method writes <code>len</code> bytes from the passed in array 
+    * <code>buf</code> starting at index <code>offset</code> into the
+    * internal buffer.
+    *
+    * @param buffer The byte array to write data from
+    * @param offset The index into the buffer to start writing data from
+    * @param add The number of bytes to write
+    */
+   public synchronized void write (byte[] buffer, int offset, int add)
+   {
+     // If ADD < 0 then arraycopy will throw the appropriate error for
+     // us.
+     if (add >= 0)
+       resize (add);
+     System.arraycopy(buffer, offset, buf, count, add);
+     count += add;
+   }
+ 
+   /**
+    * This method writes all the bytes that have been written to this stream
+    * from the internal buffer to the specified <code>OutputStream</code>.
+    *
+    * @param out The <code>OutputStream</code> to write to
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized void writeTo (OutputStream out) throws IOException
+   {
+     out.write(buf, 0, count);
+   }
+ 
+   /**
+    * The internal buffer where the data written is stored
+    */
+   protected byte[] buf;
+ 
+   /**
+    * The number of bytes that have been written to the buffer
+    */
+   protected int count;
+ 
+   /**
+    * The default initial buffer size.  Specified by the JCL.
+    */
+   private static final int DEFAULT_INITIAL_BUFFER_SIZE = 32;
+ 
+   // The default buffer size which can be overridden by the user.
+   private static final int initial_buffer_size;
+ 
+   static
+   {
+     int r
+       = Integer.getInteger ("gnu.java.io.ByteArrayOutputStream.initialBufferSize",
+ 			    DEFAULT_INITIAL_BUFFER_SIZE).intValue ();
+     if (r <= 0)
+       r = DEFAULT_INITIAL_BUFFER_SIZE;
+     initial_buffer_size = r;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/CharArrayReader.java gcc-4.1.0/libjava/classpath/java/io/CharArrayReader.java
*** gcc-4.0.2/libjava/classpath/java/io/CharArrayReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/CharArrayReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,305 ----
+ /* CharArrayReader.java -- Read an array of characters as a stream
+    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+  
+ package java.io;
+ 
+ /**
+   * This class permits an array of chars to be read as an input stream.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public class CharArrayReader extends Reader
+ {
+   /**
+    * The array that contains the data supplied during read operations
+    */
+   protected char[] buf;
+ 
+   /**
+    * The array index of the next char to be read from the buffer
+    * <code>buf</code>
+    */
+   protected int pos;
+ 
+   /**
+    * The currently marked position in the stream.  This defaults to 0, so a
+    * reset operation on the stream resets it to read from array index 0 in
+    * the buffer - even if the stream was initially created with an offset
+    * greater than 0
+    */
+   protected int markedPos;
+ 
+   /**
+    * This indicates the maximum number of chars that can be read from this
+    * stream.  It is the array index of the position after the last valid
+    * char in the buffer <code>buf</code>
+    */
+   protected int count;
+ 
+   /**
+    * Create a new CharArrayReader that will read chars from the passed
+    * in char array.  This stream will read from the beginning to the end
+    * of the array.  It is identical to calling an overloaded constructor
+    * as <code>CharArrayReader(buf, 0, buf.length)</code>.
+    * <p>
+    * Note that this array is not copied.  If its contents are changed 
+    * while this stream is being read, those changes will be reflected in the
+    * chars supplied to the reader.  Please use caution in changing the 
+    * contents of the buffer while this stream is open.
+    *
+    * @param buffer The char array buffer this stream will read from.
+   */
+   public CharArrayReader(char[] buffer)
+   {
+     this(buffer, 0, buffer.length);
+   }
+ 
+   /**
+    * Create a new CharArrayReader that will read chars from the passed
+    * in char array.  This stream will read from position
+    * <code>offset</code> in the array for a length of
+    * <code>length</code> chars past <code>offset</code>.  If the
+    * stream is reset to a position before <code>offset</code> then
+    * more than <code>length</code> chars can be read from the stream.
+    * The <code>length</code> value should be viewed as the array index
+    * one greater than the last position in the buffer to read.
+    * <p>
+    * Note that this array is not copied.  If its contents are changed 
+    * while this stream is being read, those changes will be reflected in the
+    * chars supplied to the reader.  Please use caution in changing the 
+    * contents of the buffer while this stream is open.
+    *
+    * @param buffer The char array buffer this stream will read from.
+    * @param offset The index into the buffer to start reading chars from
+    * @param length The number of chars to read from the buffer
+    */
+   public CharArrayReader(char[] buffer, int offset, int length)
+   {
+     super();
+     if (offset < 0  || length < 0 || offset > buffer.length)
+       throw new IllegalArgumentException();
+     
+     buf = buffer;
+ 
+     count = offset + length;
+     if (count > buf.length)
+       count = buf.length;
+     
+     pos = offset;
+     markedPos = pos;
+   }
+ 
+   /**
+    * This method closes the stream.
+    */
+   public void close()
+   {
+     synchronized (lock)
+       {
+ 	buf = null;
+       }
+   }
+ 
+   /**
+    * This method sets the mark position in this stream to the current
+    * position.  Note that the <code>readlimit</code> parameter in this
+    * method does nothing as this stream is always capable of
+    * remembering all the chars int it.
+    * <p>
+    * Note that in this class the mark position is set by default to
+    * position 0 in the stream.  This is in constrast to some other
+    * stream types where there is no default mark position.
+    *
+    * @param readAheadLimit The number of chars this stream must
+    *                       remember.  This parameter is ignored.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void mark(int readAheadLimit) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+ 	  throw new IOException("Stream closed");
+ 	// readAheadLimit is ignored per Java Class Lib. book, p. 318.
+ 	markedPos = pos;
+       }
+   }
+ 
+   /**
+    * This method overrides the <code>markSupported</code> method in
+    * <code>Reader</code> in order to return <code>true</code> -
+    * indicating that this stream class supports mark/reset
+    * functionality.
+    *
+    * @return <code>true</code> to indicate that this class supports
+    * mark/reset.
+    */
+   public boolean markSupported()
+   {
+     return true;
+   }
+ 
+   /**
+    * This method reads one char from the stream.  The <code>pos</code>
+    * counter is advanced to the next char to be read.  The char read
+    * is returned as an int in the range of 0-65535.  If the stream
+    * position is already at the end of the buffer, no char is read and
+    * a -1 is returned in order to indicate the end of the stream.
+    *
+    * @return The char read, or -1 if end of stream
+    */
+   public int read() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+ 	  throw new IOException("Stream closed");
+ 
+ 	if (pos < 0)
+ 	  throw new ArrayIndexOutOfBoundsException(pos);
+ 
+ 	if (pos < count)
+ 	  return ((int) buf[pos++]) & 0xFFFF;
+ 	return -1;
+       }
+   }
+ 
+   /**
+    * This method reads chars from the stream and stores them into a
+    * caller supplied buffer.  It starts storing the data at index
+    * <code>offset</code> into the buffer and attempts to read
+    * <code>len</code> chars.  This method can return before reading
+    * the number of chars requested if the end of the stream is
+    * encountered first.  The actual number of chars read is returned.
+    * If no chars can be read because the stream is already at the end
+    * of stream position, a -1 is returned.
+    * <p>
+    * This method does not block.
+    *
+    * @param b The array into which the chars read should be stored.
+    * @param off The offset into the array to start storing chars
+    * @param len The requested number of chars to read
+    *
+    * @return The actual number of chars read, or -1 if end of stream.
+    */
+   public int read(char[] b, int off, int len) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+ 	  throw new IOException("Stream closed");
+ 
+ 	/* Don't need to check pos value, arraycopy will check it. */
+ 	if (off < 0 || len < 0 || off + len > b.length)
+ 	  throw new IndexOutOfBoundsException();
+ 
+ 	if (pos >= count)
+ 	  return -1;
+ 
+ 	int numChars = Math.min(count - pos, len);
+ 	System.arraycopy(buf, pos, b, off, numChars);
+ 	pos += numChars;
+ 	return numChars;
+       }
+   }
+ 
+   /**
+    * Return true if more characters are available to be read. 
+    *
+    * @return <code>true</code> to indicate that this stream is ready
+    * to be read.
+    *
+    * @specnote The JDK 1.3 API docs are wrong here. This method will
+    *           return false if there are no more characters available.
+    */
+   public boolean ready() throws IOException
+   {
+     if (buf == null)
+       throw new IOException("Stream closed");
+ 
+     return (pos < count);
+   }
+ 
+   /**
+    * This method sets the read position in the stream to the mark
+    * point by setting the <code>pos</code> variable equal to the
+    * <code>mark</code> variable.  Since a mark can be set anywhere in
+    * the array, the mark/reset methods int this class can be used to
+    * provide random search capabilities for this type of stream.
+    */
+   public void reset() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+ 	  throw new IOException("Stream closed");
+ 
+ 	pos = markedPos;
+       }
+   }
+ 
+   /**
+    * This method attempts to skip the requested number of chars in the
+    * input stream.  It does this by advancing the <code>pos</code> value by the
+    * specified number of chars.  It this would exceed the length of the
+    * buffer, then only enough chars are skipped to position the stream at
+    * the end of the buffer.  The actual number of chars skipped is returned.
+    *
+    * @param n The requested number of chars to skip
+    *
+    * @return The actual number of chars skipped.
+    */
+   public long skip(long n) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+ 	  throw new IOException("Stream closed");
+ 
+ 	// Even though the var numChars is a long, in reality it can never
+ 	// be larger than an int since the result of subtracting 2 positive
+ 	// ints will always fit in an int.  Since we have to return a long
+ 	// anyway, numChars might as well just be a long.
+ 	long numChars = Math.min((long) (count - pos), n < 0 ? 0L : n);
+ 	pos += numChars;
+ 	return numChars;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/CharArrayWriter.java gcc-4.1.0/libjava/classpath/java/io/CharArrayWriter.java
*** gcc-4.0.2/libjava/classpath/java/io/CharArrayWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/CharArrayWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,274 ----
+ /* CharArrayWriter.java -- Write chars to a buffer
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+   * This class allows data to be written to a char array buffer and
+   * and then retrieved by an application.   The internal char array
+   * buffer is dynamically resized to hold all the data written.  Please
+   * be aware that writing large amounts to data to this stream will
+   * cause large amounts of memory to be allocated.
+   * <p>
+   * The size of the internal buffer defaults to 32 and it is resized
+   * in increments of 1024 chars.  This behavior can be over-ridden by using the
+   * following two properties:
+   * <p>
+   * <ul>
+   * <li><xmp>gnu.java.io.CharArrayWriter.initialBufferSize</xmp></li>
+   * <li><xmp>gnu.java.io.CharArrayWriter.bufferIncrementSize</xmp></li>
+   * </ul>
+   * <p>
+   * There is a constructor that specified the initial buffer size and
+   * that is the preferred way to set that value because it it portable
+   * across all Java class library implementations.
+   * <p>
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   */
+ public class CharArrayWriter extends Writer
+ {
+   /**
+    * The default initial buffer size
+    */
+   private static final int DEFAULT_INITIAL_BUFFER_SIZE = 32;
+ 
+   /**
+    * This method initializes a new <code>CharArrayWriter</code> with
+    * the default buffer size of 32 chars.  If a different initial
+    * buffer size is desired, see the constructor
+    * <code>CharArrayWriter(int size)</code>.
+    */
+   public CharArrayWriter ()
+   {
+     this (DEFAULT_INITIAL_BUFFER_SIZE);
+   }
+ 
+   /**
+    * This method initializes a new <code>CharArrayWriter</code> with
+    * a specified initial buffer size.
+    *
+    * @param size The initial buffer size in chars
+    */
+   public CharArrayWriter (int size)
+   {
+     super ();
+     buf = new char[size];
+   }
+ 
+   /**
+    * Closes the stream.  This method is guaranteed not to free the contents
+    * of the internal buffer, which can still be retrieved.
+    */
+   public void close ()
+   {
+   }
+ 
+   /**
+    * This method flushes all buffered chars to the stream.
+    */
+   public void flush ()
+   {
+   }
+ 
+   /**
+    * This method discards all of the chars that have been written to the
+    * internal buffer so far by setting the <code>count</code> variable to
+    * 0.  The internal buffer remains at its currently allocated size.
+    */
+   public void reset ()
+   {
+     synchronized (lock)
+       {
+ 	count = 0;
+       }
+   }
+ 
+   /**
+    * This method returns the number of chars that have been written to
+    * the buffer so far.  This is the same as the value of the protected
+    * <code>count</code> variable.  If the <code>reset</code> method is
+    * called, then this value is reset as well.  Note that this method does
+    * not return the length of the internal buffer, but only the number
+    * of chars that have been written to it.
+    *
+    * @return The number of chars in the internal buffer
+    *
+    * @see #reset()
+    */
+   public int size ()
+   {
+     return count;
+   }
+ 
+   /**
+    * This method returns a char array containing the chars that have been
+    * written to this stream so far.  This array is a copy of the valid
+    * chars in the internal buffer and its length is equal to the number of
+    * valid chars, not necessarily to the the length of the current 
+    * internal buffer.  Note that since this method allocates a new array,
+    * it should be used with caution when the internal buffer is very large.
+    */
+   public char[] toCharArray ()
+   {
+     synchronized (lock)
+       {      
+ 	char[] nc = new char[count];
+ 	System.arraycopy(buf, 0, nc, 0, count);
+ 	return nc;
+       }
+   }
+ 
+   /**
+    * Returns the chars in the internal array as a <code>String</code>.  The
+    * chars in the buffer are converted to characters using the system default
+    * encoding.  There is an overloaded <code>toString()</code> method that
+    * allows an application specified character encoding to be used.
+    *
+    * @return A <code>String</code> containing the data written to this
+    *         stream so far
+    */
+   public String toString ()
+   {
+     synchronized (lock)
+       {
+ 	return new String (buf, 0, count);
+       }
+   }
+ 
+   /**
+    * This method writes the writes the specified char into the internal
+    * buffer.
+    *
+    * @param oneChar The char to be read passed as an int
+    */
+   public void write (int oneChar)
+   {
+     synchronized (lock)
+       {
+ 	resize (1);
+ 	buf[count++] = (char) oneChar;
+       }
+   }
+ 
+   /**
+    * This method writes <code>len</code> chars from the passed in array 
+    * <code>buf</code> starting at index <code>offset</code> into that buffer
+    *
+    * @param buffer The char array to write data from
+    * @param offset The index into the buffer to start writing data from
+    * @param len The number of chars to write
+    */
+   public void write (char[] buffer, int offset, int len)
+   {
+     synchronized (lock)
+       {
+ 	if (len >= 0)
+ 	  resize (len);
+ 	System.arraycopy(buffer, offset, buf, count, len);
+ 	count += len;
+       }
+   }
+ 
+   /**
+    * This method writes <code>len</code> chars from the passed in
+    * <code>String</code> <code>buf</code> starting at index
+    * <code>offset</code> into the internal buffer.
+    *
+    * @param str The <code>String</code> to write data from
+    * @param offset The index into the string to start writing data from
+    * @param len The number of chars to write
+    */
+   public void write (String str, int offset, int len)
+   {
+     synchronized (lock)
+       {
+ 	if (len >= 0)
+ 	  resize (len);
+ 	str.getChars(offset, offset + len, buf, count);
+ 	count += len;
+       }
+   }
+ 
+   /**
+    * This method writes all the chars that have been written to this stream
+    * from the internal buffer to the specified <code>Writer</code>.
+    *
+    * @param out The <code>Writer</code> to write to
+    *
+    * @exception IOException If an error occurs
+    */
+   public void writeTo (Writer out) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	out.write(buf, 0, count);
+       }
+   }
+ 
+   /**
+    * This private method makes the buffer bigger when we run out of room
+    * by allocating a larger buffer and copying the valid chars from the
+    * old array into it.  This is obviously slow and should be avoided by
+    * application programmers by setting their initial buffer size big
+    * enough to hold everything if possible.
+    */
+   private void resize (int len)
+   {
+     if (count + len >= buf.length)
+       {
+ 	int newlen = buf.length * 2;
+ 	if (count + len > newlen)
+ 	  newlen = count + len;
+ 	char[] newbuf = new char[newlen];
+ 	System.arraycopy(buf, 0, newbuf, 0, count);
+ 	buf = newbuf;
+       }
+   }
+ 
+   /**
+    * The internal buffer where the data written is stored
+    */
+   protected char[] buf;
+ 
+   /**
+    * The number of chars that have been written to the buffer
+    */
+   protected int count;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/CharConversionException.java gcc-4.1.0/libjava/classpath/java/io/CharConversionException.java
*** gcc-4.0.2/libjava/classpath/java/io/CharConversionException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/CharConversionException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* CharConversionException.java -- Character conversion exceptions
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown to indicate that a problem occurred with
+  * an attempted character conversion.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class CharConversionException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -8680016352018427031L;
+ 
+   /**
+    * Create an exception without a descriptive error message.
+    */
+   public CharConversionException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public CharConversionException(String message)
+   {
+     super(message);
+   }
+ } // class CharConversionException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/Closeable.java gcc-4.1.0/libjava/classpath/java/io/Closeable.java
*** gcc-4.0.2/libjava/classpath/java/io/Closeable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/Closeable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* Closeable.java -- Closeable object
+    Copyright (C) 2004, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ /**
+  * A <code>Closeable</code> class represents a stream of
+  * data, which can be closed when it is no longer needed.
+  * Closing a stream allows the resources it uses to be
+  * freed for an alternate use.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.5
+  */
+ public interface Closeable
+ {
+ 
+   /**
+    * Closes the stream represented by this class, thus freeing
+    * system resources. In that case that the stream is already
+    * in the closed state, this method has no effect.
+    *
+    * @throws IOException if an I/O error occurs in closing.
+    */
+   void close()
+     throws IOException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/DataInput.java gcc-4.1.0/libjava/classpath/java/io/DataInput.java
*** gcc-4.0.2/libjava/classpath/java/io/DataInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/DataInput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,456 ----
+ /* DataInput.java -- Interface for reading data from a stream
+    Copyright (C) 1998, 1999, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.  
+  * Status:  Believed complete and correct.  */
+ 
+ /**
+  * This interface is implemented by classes that can data from streams 
+  * into Java primitive types. 
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public interface DataInput
+ {
+ 
+   /**
+    * This method reads a Java boolean value from an input stream.  It does
+    * so by reading a single byte of data.  If that byte is zero, then the
+    * value returned is <code>false</code>.  If the byte is non-zero, then
+    * the value returned is <code>true</code>.
+    * <p>
+    * This method can read a <code>boolean</code> written by an object
+    * implementing the <code>writeBoolean()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>boolean</code> value read
+    *
+    * @exception EOFException If end of file is reached before 
+    * reading the boolean
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeBoolean
+    */
+   boolean readBoolean() throws EOFException, IOException;
+ 
+   /**
+    * This method reads a Java byte value from an input stream.  The value
+    * is in the range of -128 to 127.
+    * <p>
+    * This method can read a <code>byte</code> written by an object
+    * implementing the 
+    * <code>writeByte()</code> method in the <code>DataOutput</code> interface.
+    * <p>
+    * @return The <code>byte</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the byte
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeByte
+    */
+   byte readByte() throws EOFException, IOException;
+ 
+   /**
+    * This method reads 8 unsigned bits into a Java <code>int</code> value from
+    * the stream. The value returned is in the range of 0 to 255.
+    * <p>
+    * This method can read an unsigned byte written by an object 
+    * implementing the
+    * <code>writeByte()</code> method in the <code>DataOutput</code>
+    * interface.
+    *
+    * @return The unsigned bytes value read as a Java <code>int</code>.
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeByte
+    */
+   int readUnsignedByte() throws EOFException, IOException;
+ 
+   /**
+    * This method reads a Java <code>char</code> value from an input stream.  
+    * It operates by reading two bytes from the stream and converting them to 
+    * a single 16-bit Java <code>char</code>.  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code> represent the
+    * first and second byte read from the stream respectively, they will be
+    * transformed to a <code>char</code> in the following manner:
+    * <p>
+    * <code>(char)((byte1 << 8) + byte2)</code>
+    * <p>
+    * This method can read a <code>char</code> written by an object implementing
+    * the
+    * <code>writeChar()</code> method in the <code>DataOutput</code> interface.
+    *
+    * @return The <code>char</code> value read 
+    *
+    * @exception EOFException If end of file is reached before reading the char
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeChar
+    */
+   char readChar() throws EOFException, IOException;
+ 
+   /**
+    * This method reads a signed 16-bit value into a Java in from the stream.
+    * It operates by reading two bytes from the stream and converting them to 
+    * a single 16-bit Java <code>short</code>.  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code> represent the
+    * first and second byte read from the stream respectively, they will be
+    * transformed to a <code>short</code> in the following manner:
+    * <p>
+    * <code>(short)(((byte1 & 0xFF) << 8) + (byte2 & 0xFF))</code>
+    * <p>
+    * The value returned is in the range of -32768 to 32767.
+    * <p>
+    * This method can read a <code>short</code> written by an object 
+    * implementing
+    * the <code>writeShort()</code> method in the <code>DataOutput</code>
+    * interface.
+    *
+    * @return The <code>short</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeShort
+    */
+   short readShort() throws EOFException, IOException;
+ 
+   /**
+    * This method reads 16 unsigned bits into a Java int value from the stream.
+    * It operates by reading two bytes from the stream and converting them to 
+    * a single Java <code>int</code>.  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code> represent the
+    * first and second byte read from the stream respectively, they will be
+    * transformed to an <code>int</code> in the following manner:
+    * <p>
+    * <code>(int)(((byte1 0xFF) << 8) + (byte2 & 0xFF))</code>
+    * <p>
+    * The value returned is in the range of 0 to 65535.
+    * <p>
+    * This method can read an unsigned short written by an object implementing
+    * the <code>writeShort()</code> method in the 
+    * <code>DataOutput</code>
+    * interface.
+    *
+    * @return The unsigned short value read as a Java <code>int</code>.
+    *
+    * @exception EOFException If end of file is reached before reading 
+    * the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeShort
+    */
+   int readUnsignedShort() throws EOFException, IOException;
+ 
+   /**
+    * This method reads a Java <code>int</code> value from an input stream
+    * It operates by reading four bytes from the stream and converting them to 
+    * a single Java <code>int</code>.  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte4</code> represent
+    * the first four bytes read from the stream, they will be
+    * transformed to an <code>int</code> in the following manner:
+    * <p>
+    * <code>(int)(((byte1 & 0xFF) << 24) + ((byte2 & 0xFF) << 16) + 
+    * ((byte3 & 0xFF)<< 8) + (byte4 & 0xFF)))</code>
+    * <p>
+    * The value returned is in the range of -2147483648 to 2147483647.
+    * <p>
+    * This method can read an <code>int</code> written by an object 
+    * implementing the <code>writeInt()</code> method in the 
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>int</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the int
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeInt
+    */
+   int readInt() throws EOFException, IOException;
+ 
+   /**
+    * This method reads a Java <code>long</code> value from an input stream
+    * It operates by reading eight bytes from the stream and converting them to 
+    * a single Java <code>long</code>.  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte8</code> represent
+    * the first eight bytes read from the stream, they will be
+    * transformed to an <code>long</code> in the following manner:
+    * <p>
+    * <code>(long)(((byte1 & 0xFF) << 56) + ((byte2 & 0xFF) << 48) + 
+    * ((byte3 & 0xFF) << 40) + ((byte4 & 0xFF) << 32) + 
+    * ((byte5 & 0xFF) << 24) + ((byte6 & 0xFF) << 16) + 
+    * ((byte7 & 0xFF) << 8) + (byte8 & 0xFF)))
+    * </code>
+    * <p>
+    * The value returned is in the range of -9223372036854775808 to
+    * 9223372036854775807.
+    * <p>
+    * This method can read an <code>long</code> written by an object 
+    * implementing the <code>writeLong()</code> method in the 
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>long</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the long
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeLong
+    */
+   long readLong() throws EOFException, IOException;
+ 
+   /**
+    * This method reads a Java float value from an input stream.  It operates
+    * by first reading an <code>int</code> value from the stream by calling the
+    * <code>readInt()</code> method in this interface, then converts that
+    * <code>int</code> to a <code>float</code> using the
+    * <code>intBitsToFloat</code> method in the class
+    * <code>java.lang.Float</code>.
+    * <p>
+    * This method can read a <code>float</code> written by an object 
+    * implementing
+    * the <code>writeFloat()</code> method in the <code>DataOutput</code>
+    * interface.
+    *
+    * @return The <code>float</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the 
+    * float
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeFloat
+    * @see java.lang.Float#intBitsToFloat
+    */
+   float readFloat() throws EOFException, IOException;
+ 
+   /**
+    * This method reads a Java double value from an input stream.  It operates
+    * by first reading a <code>long</code> value from the stream by calling the
+    * <code>readLong()</code> method in this interface, then converts that
+    * <code>long</code> to a <code>double</code> using the
+    * <code>longBitsToDouble</code> method in the class
+    * <code>java.lang.Double</code>.
+    * <p>
+    * This method can read a <code>double</code> written by an object
+    * implementing the <code>writeDouble()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>double</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the 
+    * double
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeDouble
+    * @see java.lang.Double#longBitsToDouble
+    */
+   double readDouble() throws EOFException, IOException;
+ 
+   /**
+    * This method reads the next line of text data from an input stream.
+    * It operates by reading bytes and converting those bytes to 
+    * <code>char</code>
+    * values by treating the byte read as the low eight bits of the
+    * <code>char</code> and using 0 as the high eight bits.  Because of this,
+    * it does not support the full 16-bit Unicode character set.
+    * <P>
+    * The reading of bytes ends when either the end of file or a line terminator
+    * is encountered.  The bytes read are then returned as a 
+    * <code>String</code>.
+    * A line terminator is a byte sequence consisting of either 
+    * <code>\r</code>, <code>\n</code> or <code>\r\n</code>.  These termination
+    * charaters are discarded and are not returned as part of the string.
+    * A line is also terminated by an end of file condition.
+    * <p>
+    *
+    * @return The line read as a <code>String</code>
+    *
+    * @exception IOException If an error occurs
+    */
+   String readLine() throws IOException;
+ 
+   /**
+    * This method reads a <code>String</code> from an input stream that is
+    * encoded in a modified UTF-8 format.  This format has a leading two byte
+    * sequence that contains the remaining number of bytes to read.  
+    * This two byte
+    * sequence is read using the <code>readUnsignedShort()</code> method of this
+    * interface.
+    *
+    * After the number of remaining bytes have been determined, these bytes
+    * are read an transformed into <code>char</code> values.  These
+    * <code>char</code> values are encoded in the stream using either a one, 
+    * two, or three byte format.
+    * The particular format in use can be determined by examining the first
+    * byte read.  
+    * <p>
+    * If the first byte has a high order bit of 0, then
+    * that character consists on only one byte.  This character value consists
+    * of seven bits that are at positions 0 through 6 of the byte.  As an
+    * example, if <code>byte1</code> is the byte read from the stream, it would
+    * be converted to a <code>char</code> like so:
+    * <p>
+    * <code>(char)byte1</code>
+    * <p>
+    * If the first byte has 110 as its high order bits, then the 
+    * character consists of two bytes.  The bits that make up the character
+    * value are in positions 0 through 4 of the first byte and bit positions
+    * 0 through 5 of the second byte.  (The second byte should have 
+    * 10 as its high order bits).  These values are in most significant
+    * byte first (i.e., "big endian") order.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code> are the first
+    * two bytes read respectively, and the high order bits of them match the
+    * patterns which indicate a two byte character encoding, then they would be
+    * converted to a Java <code>char</code> like so:
+    * <p>
+    * <code>(char)(((byte1 &amp; 0x1F) &lt;&lt; 6) + (byte2 &amp; 0x3F))</code>
+    * <p>
+    * If the first byte has a 1110 as its high order bits, then the
+    * character consists of three bytes.  The bits that make up the character
+    * value are in positions 0 through 3 of the first byte and bit positions
+    * 0 through 5 of the other two bytes.  (The second and third bytes should
+    * have 10 as their high order bits).  These values are in most
+    * significant byte first (i.e., "big endian") order.
+    * <p>
+    * As an example, if <code>byte1</code>, <code>byte2</code>, and
+    * <code>byte3</code> are the three bytes read, and the high order bits of
+    * them match the patterns which indicate a three byte character encoding,
+    * then they would be converted to a Java <code>char</code> like so:
+    *
+    * <code>
+    * (char)(((byte1 &amp; 0x0F) &lt;&lt; 12) + ((byte2 &amp; 0x3F) + (byte3 &amp; 0x3F))
+    * </code>
+    *
+    * Note that all characters are encoded in the method that requires the
+    * fewest number of bytes with the exception of the character with the
+    * value of <code>\&lt;llll&gt;u0000</code> which is encoded as two bytes.  
+    * This is a modification of the UTF standard used to prevent C language 
+    * style <code>NUL</code> values from appearing in the byte stream.
+    * <p>
+    * This method can read data that was written by an object implementing the
+    * <code>writeUTF()</code> method in <code>DataOutput</code>.
+    * 
+    * @return The <code>String</code> read
+    *
+    * @exception EOFException If end of file is reached before reading the 
+    * String
+    * @exception UTFDataFormatException If the data is not in UTF-8 format
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeUTF
+    */
+   String readUTF() throws EOFException, UTFDataFormatException, IOException;
+ 
+   /**
+    * This method reads raw bytes into the passed array until the array is
+    * full.  Note that this method blocks until the data is available and
+    * throws an exception if there is not enough data left in the stream to
+    * fill the buffer.  Note also that zero length buffers are permitted.
+    * In this case, the method will return immediately without reading any
+    * bytes from the stream.
+    *
+    * @param buf The buffer into which to read the data
+    *
+    * @exception EOFException If end of file is reached before filling the 
+    * buffer
+    * @exception IOException If any other error occurs
+    */
+   void readFully(byte[] buf) throws EOFException, IOException;
+ 
+   /**
+    * This method reads raw bytes into the passed array <code>buf</code> 
+    * starting
+    * <code>offset</code> bytes into the buffer.  The number of bytes read 
+    * will be
+    * exactly <code>len</code>.  Note that this method blocks until the data is 
+    * available and throws an exception if there is not enough data left in 
+    * the stream to read <code>len</code> bytes.  Note also that zero length
+    * buffers are permitted.  In this case, the method will return immediately
+    * without reading any bytes from the stream.
+    *
+    * @param buf The buffer into which to read the data
+    * @param offset The offset into the buffer to start storing data
+    * @param len The number of bytes to read into the buffer
+    *
+    * @exception EOFException If end of file is reached before filling the 
+    * buffer
+    * @exception IOException If any other error occurs
+    */
+   void readFully(byte[] buf, int offset, int len) 
+     throws EOFException, IOException;
+ 
+   /**
+    * This method skips and discards the specified number of bytes in an
+    * input stream.  Note that this method may skip less than the requested
+    * number of bytes.  The actual number of bytes skipped is returned.
+    * No bytes are skipped if a negative number is passed to this method.
+    *
+    * @param numBytes The number of bytes to skip
+    *
+    * @return The number of bytes actually skipped, which will always be
+    *         <code>numBytes</code>
+    *
+    * @exception EOFException If end of file is reached before all bytes can be
+    *                         skipped
+    * @exception IOException If any other error occurs
+    */
+   int skipBytes(int numBytes) throws EOFException, IOException;
+ 
+ } // interface DataInput
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/DataInputStream.java gcc-4.1.0/libjava/classpath/java/io/DataInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/DataInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/DataInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,739 ----
+ /* DataInputStream.java -- FilteredInputStream that implements DataInput
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+  
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+  
+ /**
+  * This subclass of <code>FilteredInputStream</code> implements the
+  * <code>DataInput</code> interface that provides method for reading primitive
+  * Java data types from a stream.
+  *
+  * @see DataInput
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @date October 20, 1998.  
+  */
+ public class DataInputStream extends FilterInputStream implements DataInput
+ {
+   // Byte buffer, used to make primitive read calls more efficient.
+   byte[] buf = new byte [8];
+   
+   /**
+    * This constructor initializes a new <code>DataInputStream</code>
+    * to read from the specified subordinate stream.
+    *
+    * @param in The subordinate <code>InputStream</code> to read from
+    */
+   public DataInputStream (InputStream in)
+   {
+     super (in);
+   }
+ 
+   /**
+    * This method reads bytes from the underlying stream into the specified
+    * byte array buffer.  It will attempt to fill the buffer completely, but
+    * may return a short count if there is insufficient data remaining to be
+    * read to fill the buffer.
+    *
+    * @param b The buffer into which bytes will be read.
+    * 
+    * @return The actual number of bytes read, or -1 if end of stream reached 
+    * before reading any bytes.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public final int read (byte[] b) throws IOException
+   {
+     return in.read (b, 0, b.length);
+   }
+ 
+   /**
+    * This method reads bytes from the underlying stream into the specified
+    * byte array buffer.  It will attempt to read <code>len</code> bytes and
+    * will start storing them at position <code>off</code> into the buffer.
+    * This method can return a short count if there is insufficient data
+    * remaining to be read to complete the desired read length.
+    *
+    * @param b The buffer into which bytes will be read.
+    * @param off The offset into the buffer to start storing bytes.
+    * @param len The requested number of bytes to read.
+    *
+    * @return The actual number of bytes read, or -1 if end of stream reached
+    * before reading any bytes.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public final int read (byte[] b, int off, int len) throws IOException
+   {
+     return in.read (b, off, len);
+   }
+ 
+   /**
+    * This method reads a Java boolean value from an input stream.  It does
+    * so by reading a single byte of data.  If that byte is zero, then the
+    * value returned is <code>false</code>.  If the byte is non-zero, then
+    * the value returned is <code>true</code>.
+    * <p>
+    * This method can read a <code>boolean</code> written by an object
+    * implementing the <code>writeBoolean()</code> method in the
+    * <code>DataOutput</code> interface. 
+    *
+    * @return The <code>boolean</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading
+    * the boolean
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeBoolean
+    */
+   public final boolean readBoolean () throws IOException
+   {
+     return convertToBoolean (in.read ());
+   }
+ 
+   /**
+    * This method reads a Java byte value from an input stream.  The value
+    * is in the range of -128 to 127.
+    * <p>
+    * This method can read a <code>byte</code> written by an object
+    * implementing the <code>writeByte()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>byte</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the byte
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeByte
+    */
+   public final byte readByte () throws IOException
+   {
+     return convertToByte (in.read ());
+   }
+ 
+   /**
+    * This method reads a Java <code>char</code> value from an input stream.  
+    * It operates by reading two bytes from the stream and converting them to 
+    * a single 16-bit Java <code>char</code>.  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code>
+    * represent the first and second byte read from the stream
+    * respectively, they will be transformed to a <code>char</code> in
+    * the following manner: 
+    * <p>
+    * <code>(char)(((byte1 &amp; 0xFF) &lt;&lt; 8) | (byte2 &amp; 0xFF)</code>
+    * <p>
+    * This method can read a <code>char</code> written by an object
+    * implementing the <code>writeChar()</code> method in the
+    * <code>DataOutput</code> interface. 
+    *
+    * @return The <code>char</code> value read 
+    *
+    * @exception EOFException If end of file is reached before reading the char
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeChar
+    */
+   public final char readChar () throws IOException
+   {
+     readFully (buf, 0, 2);
+     return convertToChar (buf);
+   }
+ 
+   /**
+    * This method reads a Java double value from an input stream.  It operates
+    * by first reading a <code>long</code> value from the stream by calling the
+    * <code>readLong()</code> method in this interface, then converts
+    * that <code>long</code> to a <code>double</code> using the
+    * <code>longBitsToDouble</code> method in the class
+    * <code>java.lang.Double</code> 
+    * <p>
+    * This method can read a <code>double</code> written by an object
+    * implementing the <code>writeDouble()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>double</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading
+    * the double
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeDouble
+    * @see java.lang.Double#longBitsToDouble
+    */
+   public final double readDouble () throws IOException
+   {
+     return Double.longBitsToDouble (readLong ());
+   }
+ 
+   /**
+    * This method reads a Java float value from an input stream.  It
+    * operates by first reading an <code>int</code> value from the
+    * stream by calling the <code>readInt()</code> method in this
+    * interface, then converts that <code>int</code> to a
+    * <code>float</code> using the <code>intBitsToFloat</code> method
+    * in the class <code>java.lang.Float</code>
+    * <p>
+    * This method can read a <code>float</code> written by an object
+    * implementing the <code>writeFloat()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>float</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the float
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeFloat 
+    * @see java.lang.Float#intBitsToFloat
+    */
+   public final float readFloat () throws IOException
+   {
+     return Float.intBitsToFloat (readInt ());
+   }
+ 
+   /**
+    * This method reads raw bytes into the passed array until the array is
+    * full.  Note that this method blocks until the data is available and
+    * throws an exception if there is not enough data left in the stream to
+    * fill the buffer.  Note also that zero length buffers are permitted.
+    * In this case, the method will return immediately without reading any
+    * bytes from the stream.
+    *
+    * @param b The buffer into which to read the data
+    *
+    * @exception EOFException If end of file is reached before filling the
+    * buffer
+    * @exception IOException If any other error occurs
+    */
+   public final void readFully (byte[] b) throws IOException
+   {
+     readFully (b, 0, b.length);
+   }
+ 
+   /**
+    * This method reads raw bytes into the passed array <code>buf</code>
+    * starting
+    * <code>offset</code> bytes into the buffer.  The number of bytes read
+    * will be
+    * exactly <code>len</code>.  Note that this method blocks until the data is
+    * available and throws an exception if there is not enough data left in
+    * the stream to read <code>len</code> bytes.  Note also that zero length
+    * buffers are permitted.  In this case, the method will return immediately
+    * without reading any bytes from the stream.
+    *
+    * @param buf The buffer into which to read the data
+    * @param offset The offset into the buffer to start storing data
+    * @param len The number of bytes to read into the buffer
+    *
+    * @exception EOFException If end of file is reached before filling the
+    * buffer
+    * @exception IOException If any other error occurs
+    */
+   public final void readFully (byte[] buf, int offset, int len) throws IOException
+   {
+     if (len < 0)
+       throw new IndexOutOfBoundsException("Negative length: " + len);
+     
+     while (len > 0)
+       {
+ 	// in.read will block until some data is available.
+ 	int numread = in.read (buf, offset, len);
+ 	if (numread < 0)
+ 	  throw new EOFException ();
+ 	len -= numread;
+ 	offset += numread;
+       }
+   }
+ 
+   /**
+    * This method reads a Java <code>int</code> value from an input stream
+    * It operates by reading four bytes from the stream and converting them to
+    * a single Java <code>int</code>.  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte4</code> represent
+    * the first four bytes read from the stream, they will be
+    * transformed to an <code>int</code> in the following manner:
+    * <p>
+    * <code>(int)(((byte1 &amp; 0xFF) &lt;&lt; 24) + ((byte2 &amp; 0xFF) &lt;&lt; 16) +
+    * ((byte3 &amp; 0xFF)&lt;&lt; 8) + (byte4 &amp; 0xFF)))</code>
+    * <p>
+    * The value returned is in the range of -2147483648 to 2147483647.
+    * <p>
+    * This method can read an <code>int</code> written by an object
+    * implementing the <code>writeInt()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>int</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the int
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeInt
+    */
+   public final int readInt () throws IOException
+   {
+     readFully (buf, 0, 4);
+     return convertToInt (buf);
+   }
+ 
+   /**
+    * This method reads the next line of text data from an input
+    * stream.  It operates by reading bytes and converting those bytes
+    * to <code>char</code> values by treating the byte read as the low
+    * eight bits of the <code>char</code> and using 0 as the high eight
+    * bits.  Because of this, it does not support the full 16-bit
+    * Unicode character set.
+    * <p>
+    * The reading of bytes ends when either the end of file or a line
+    * terminator is encountered.  The bytes read are then returned as a
+    * <code>String</code> A line terminator is a byte sequence
+    * consisting of either <code>\r</code>, <code>\n</code> or
+    * <code>\r\n</code>.  These termination charaters are discarded and
+    * are not returned as part of the string.
+    * <p>
+    * This method can read data that was written by an object implementing the
+    * <code>writeLine()</code> method in <code>DataOutput</code>.
+    *
+    * @return The line read as a <code>String</code>
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataOutput
+    *
+    * @deprecated
+    */
+   public final String readLine() throws IOException
+   {
+     StringBuffer strb = new StringBuffer();
+ 
+     while (true)
+       {
+         int c = in.read();
+ 	if (c == -1)	// got an EOF
+ 	    return strb.length() > 0 ? strb.toString() : null;
+ 	if (c == '\r')
+ 	  {
+ 	    int next_c = in.read();
+             if (next_c != '\n' && next_c != -1)
+               {
+                 if (!(in instanceof PushbackInputStream))
+                   in = new PushbackInputStream(in);
+                 ((PushbackInputStream) in).unread(next_c);
+               }
+             break;
+ 	  }
+         if (c == '\n')
+             break;
+ 	strb.append((char) c);
+       }
+ 
+     return strb.length() > 0 ? strb.toString() : "";
+   }
+ 
+   /**
+    * This method reads a Java <code>long</code> value from an input stream
+    * It operates by reading eight bytes from the stream and converting them to
+    * a single Java <code>long</code>.  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte8</code> represent
+    * the first eight bytes read from the stream, they will be
+    * transformed to an <code>long</code> in the following manner:
+    * <p>
+    * <code>(long)(((byte1 &amp; 0xFF) &lt;&lt; 56) + ((byte2 &amp; 0xFF) &lt;&lt; 48) +
+    * ((byte3 &amp; 0xFF) &lt;&lt; 40) + ((byte4 &amp; 0xFF) &lt;&lt; 32) +
+    * ((byte5 &amp; 0xFF) &lt;&lt; 24) + ((byte6 &amp; 0xFF) &lt;&lt; 16) +
+    * ((byte7 &amp; 0xFF) &lt;&lt; 8) + (byte8 &amp; 0xFF)))
+    * </code>
+    * <p>
+    * The value returned is in the range of -9223372036854775808 to
+    * 9223372036854775807.
+    * <p>
+    * This method can read an <code>long</code> written by an object
+    * implementing the <code>writeLong()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>long</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the long
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeLong
+    */
+   public final long readLong () throws IOException
+   {
+     readFully (buf, 0, 8);
+     return convertToLong (buf);
+   }
+ 
+   /**
+    * This method reads a signed 16-bit value into a Java in from the
+    * stream.  It operates by reading two bytes from the stream and
+    * converting them to a single 16-bit Java <code>short</code>.  The
+    * two bytes are stored most significant byte first (i.e., "big
+    * endian") regardless of the native host byte ordering.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code>
+    * represent the first and second byte read from the stream
+    * respectively, they will be transformed to a <code>short</code>. in
+    * the following manner:
+    * <p>
+    * <code>(short)(((byte1 &amp; 0xFF) &lt;&lt; 8) | (byte2 &amp; 0xFF))</code>
+    * <p>
+    * The value returned is in the range of -32768 to 32767.
+    * <p>
+    * This method can read a <code>short</code> written by an object
+    * implementing the <code>writeShort()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The <code>short</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeShort
+    */
+   public final short readShort () throws IOException
+   {
+     readFully (buf, 0, 2);
+     return convertToShort (buf);
+   }
+   
+   /**
+    * This method reads 8 unsigned bits into a Java <code>int</code>
+    * value from the stream. The value returned is in the range of 0 to
+    * 255.
+    * <p>
+    * This method can read an unsigned byte written by an object
+    * implementing the <code>writeUnsignedByte()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The unsigned bytes value read as a Java <code>int</code>.
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeByte
+    */
+   public final int readUnsignedByte () throws IOException
+   {
+     return convertToUnsignedByte (in.read ());
+   }
+ 
+   /**
+    * This method reads 16 unsigned bits into a Java int value from the stream.
+    * It operates by reading two bytes from the stream and converting them to 
+    * a single Java <code>int</code>  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code>
+    * represent the first and second byte read from the stream
+    * respectively, they will be transformed to an <code>int</code> in
+    * the following manner:
+    * <p>
+    * <code>(int)(((byte1 &amp; 0xFF) &lt;&lt; 8) + (byte2 &amp; 0xFF))</code>
+    * <p>
+    * The value returned is in the range of 0 to 65535.
+    * <p>
+    * This method can read an unsigned short written by an object
+    * implementing the <code>writeUnsignedShort()</code> method in the
+    * <code>DataOutput</code> interface.
+    *
+    * @return The unsigned short value read as a Java <code>int</code>
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeShort
+    */
+   public final int readUnsignedShort () throws IOException
+   {
+     readFully (buf, 0, 2);
+     return convertToUnsignedShort (buf);
+   }
+ 
+   /**
+    * This method reads a <code>String</code> from an input stream that
+    * is encoded in a modified UTF-8 format.  This format has a leading
+    * two byte sequence that contains the remaining number of bytes to
+    * read.  This two byte sequence is read using the
+    * <code>readUnsignedShort()</code> method of this interface.
+    * <p>
+    * After the number of remaining bytes have been determined, these
+    * bytes are read an transformed into <code>char</code> values.
+    * These <code>char</code> values are encoded in the stream using
+    * either a one, two, or three byte format.  The particular format
+    * in use can be determined by examining the first byte read.
+    * <p>
+    * If the first byte has a high order bit of 0, then that character
+    * consists on only one byte.  This character value consists of
+    * seven bits that are at positions 0 through 6 of the byte.  As an
+    * example, if <code>byte1</code> is the byte read from the stream,
+    * it would be converted to a <code>char</code> like so:
+    * <p>
+    * <code>(char)byte1</code>
+    * <p>
+    * If the first byte has 110 as its high order bits, then the 
+    * character consists of two bytes.  The bits that make up the character
+    * value are in positions 0 through 4 of the first byte and bit positions
+    * 0 through 5 of the second byte.  (The second byte should have 
+    * 10 as its high order bits).  These values are in most significant
+    * byte first (i.e., "big endian") order.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code> are
+    * the first two bytes read respectively, and the high order bits of
+    * them match the patterns which indicate a two byte character
+    * encoding, then they would be converted to a Java
+    * <code>char</code> like so:
+    * <p>
+    * <code>(char)(((byte1 & 0x1F) << 6) | (byte2 & 0x3F))</code>
+    * <p>
+    * If the first byte has a 1110 as its high order bits, then the
+    * character consists of three bytes.  The bits that make up the character
+    * value are in positions 0 through 3 of the first byte and bit positions
+    * 0 through 5 of the other two bytes.  (The second and third bytes should
+    * have 10 as their high order bits).  These values are in most
+    * significant byte first (i.e., "big endian") order.
+    * <p>
+    * As an example, if <code>byte1</code> <code>byte2</code> and
+    * <code>byte3</code> are the three bytes read, and the high order
+    * bits of them match the patterns which indicate a three byte
+    * character encoding, then they would be converted to a Java
+    * <code>char</code> like so:
+    * <p>
+    * <code>(char)(((byte1 & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | 
+    * (byte3 & 0x3F))</code>
+    * <p>
+    * Note that all characters are encoded in the method that requires
+    * the fewest number of bytes with the exception of the character
+    * with the value of <code>&#92;u0000</code> which is encoded as two
+    * bytes.  This is a modification of the UTF standard used to
+    * prevent C language style <code>NUL</code> values from appearing
+    * in the byte stream.
+    * <p>
+    * This method can read data that was written by an object implementing the
+    * <code>writeUTF()</code> method in <code>DataOutput</code>
+    * 
+    * @return The <code>String</code> read
+    *
+    * @exception EOFException If end of file is reached before reading
+    * the String
+    * @exception UTFDataFormatException If the data is not in UTF-8 format
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput#writeUTF
+    */
+   public final String readUTF () throws IOException
+   {
+     return readUTF (this);
+   }
+ 
+   /**
+    * This method reads a String encoded in UTF-8 format from the 
+    * specified <code>DataInput</code> source.
+    *
+    * @param in The <code>DataInput</code> source to read from
+    *
+    * @return The String read from the source
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readUTF
+    */
+   public static final String readUTF(DataInput in) throws IOException
+   {
+     final int UTFlen = in.readUnsignedShort ();
+     byte[] buf = new byte [UTFlen];
+ 
+     // This blocks until the entire string is available rather than
+     // doing partial processing on the bytes that are available and then
+     // blocking.  An advantage of the latter is that Exceptions
+     // could be thrown earlier.  The former is a bit cleaner.
+     in.readFully (buf, 0, UTFlen);
+ 
+     return convertFromUTF (buf);
+   }
+ 
+   /**
+    * This method attempts to skip and discard the specified number of bytes 
+    * in the input stream.  It may actually skip fewer bytes than requested. 
+    * This method will not skip any bytes if passed a negative number of bytes 
+    * to skip. 
+    *
+    * @param n The requested number of bytes to skip.
+    *
+    * @return The requested number of bytes to skip.
+    *
+    * @exception IOException If an error occurs.
+    * @specnote The JDK docs claim that this returns the number of bytes 
+    *  actually skipped. The JCL claims that this method can throw an 
+    *  EOFException. Neither of these appear to be true in the JDK 1.3's
+    *  implementation. This tries to implement the actual JDK behaviour.
+    */
+   public final int skipBytes (int n) throws IOException
+   {
+     if (n <= 0)
+       return 0;    
+     try
+       {
+         return (int) in.skip (n);
+       }
+     catch (EOFException x)
+       {
+         // do nothing.
+       }         
+     return n;
+   }
+   
+   static boolean convertToBoolean (int b) throws EOFException
+   {
+     if (b < 0)
+       throw new EOFException ();
+     
+     return (b != 0);
+   }
+ 
+   static byte convertToByte (int i) throws EOFException
+   {
+     if (i < 0)
+       throw new EOFException ();
+     
+     return (byte) i;
+   }
+ 
+   static int convertToUnsignedByte (int i) throws EOFException
+   {
+     if (i < 0)
+       throw new EOFException ();
+     
+     return (i & 0xFF);
+   }
+ 
+   static char convertToChar (byte[] buf)
+   {
+     return (char) ((buf [0] << 8)
+ 		    | (buf [1] & 0xff));  
+   }  
+ 
+   static short convertToShort (byte[] buf)
+   {
+     return (short) ((buf [0] << 8)
+ 		    | (buf [1] & 0xff));  
+   }  
+ 
+   static int convertToUnsignedShort (byte[] buf)
+   {
+     return (((buf [0] & 0xff) << 8)
+ 	    | (buf [1] & 0xff));  
+   }
+ 
+   static int convertToInt (byte[] buf)
+   {
+     return (((buf [0] & 0xff) << 24)
+ 	    | ((buf [1] & 0xff) << 16)
+ 	    | ((buf [2] & 0xff) << 8)
+ 	    | (buf [3] & 0xff));  
+   }
+ 
+   static long convertToLong (byte[] buf)
+   {
+     return (((long)(buf [0] & 0xff) << 56) |
+ 	    ((long)(buf [1] & 0xff) << 48) |
+ 	    ((long)(buf [2] & 0xff) << 40) |
+ 	    ((long)(buf [3] & 0xff) << 32) |
+ 	    ((long)(buf [4] & 0xff) << 24) |
+ 	    ((long)(buf [5] & 0xff) << 16) |
+ 	    ((long)(buf [6] & 0xff) <<  8) |
+ 	    ((long)(buf [7] & 0xff)));  
+   }
+ 
+   // FIXME: This method should be re-thought.  I suspect we have multiple
+   // UTF-8 decoders floating around.  We should use the standard charset
+   // converters, maybe and adding a direct call into one of the new
+   // NIO converters for a super-fast UTF8 decode.
+   static String convertFromUTF (byte[] buf) 
+     throws EOFException, UTFDataFormatException
+   {
+     // Give StringBuffer an initial estimated size to avoid 
+     // enlarge buffer frequently
+     StringBuffer strbuf = new StringBuffer (buf.length / 2 + 2);
+ 
+     for (int i = 0; i < buf.length; )
+       {
+ 	if ((buf [i] & 0x80) == 0)		// bit pattern 0xxxxxxx
+ 	  strbuf.append ((char) (buf [i++] & 0xFF));
+ 	else if ((buf [i] & 0xE0) == 0xC0)	// bit pattern 110xxxxx
+ 	  {
+ 	    if (i + 1 >= buf.length
+ 		|| (buf [i + 1] & 0xC0) != 0x80)
+ 	      throw new UTFDataFormatException ();
+ 
+ 	    strbuf.append((char) (((buf [i++] & 0x1F) << 6)
+ 				  | (buf [i++] & 0x3F)));
+ 	  }
+ 	else if ((buf [i] & 0xF0) == 0xE0)	// bit pattern 1110xxxx
+ 	  {
+ 	    if (i + 2 >= buf.length
+ 		|| (buf [i + 1] & 0xC0) != 0x80
+ 		|| (buf [i + 2] & 0xC0) != 0x80)
+ 	      throw new UTFDataFormatException ();
+ 
+ 	    strbuf.append ((char) (((buf [i++] & 0x0F) << 12)
+ 				   | ((buf [i++] & 0x3F) << 6)
+ 				   | (buf [i++] & 0x3F)));
+ 	  }
+ 	else // must be ((buf [i] & 0xF0) == 0xF0 || (buf [i] & 0xC0) == 0x80)
+ 	  throw new UTFDataFormatException ();	// bit patterns 1111xxxx or
+ 						// 		10xxxxxx
+       }
+ 
+     return strbuf.toString ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/DataOutput.java gcc-4.1.0/libjava/classpath/java/io/DataOutput.java
*** gcc-4.0.2/libjava/classpath/java/io/DataOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/DataOutput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,326 ----
+ /* DataOutput.java -- Interface for writing data from a stream
+    Copyright (C) 1998, 1999, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to version 1.1.
+  */
+ 
+ /**
+  * This interface is implemented by classes that can wrte data to streams 
+  * from Java primitive types.  This data can subsequently be read back
+  * by classes implementing the <code>DataInput</code> interface. 
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  *
+  * @see DataInput
+  */
+ public interface DataOutput
+ {
+   /**
+    * This method writes a Java boolean value to an output stream.  If
+    * <code>value</code> is <code>true</code>, a byte with the value of
+    * 1 will be written, otherwise a byte with the value of 0 will be 
+    * written.
+    *
+    * The value written can be read using the <code>readBoolean</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The boolean value to write
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readBoolean
+    */
+   void writeBoolean(boolean value) throws IOException;
+ 
+   /**
+    * This method writes a Java byte value to an output stream.  The
+    * byte to be written will be in the lowest 8 bits of the 
+    * <code>int</code> value passed.
+    *
+    * The value written can be read using the <code>readByte</code> or
+    * <code>readUnsignedByte</code> methods in <code>DataInput</code>.
+    *
+    * @param value The int value to write
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readByte
+    * @see DataInput#readUnsignedByte
+    */
+   void writeByte(int value) throws IOException;
+ 
+   /**
+    * This method writes a Java char value to an output stream.  The
+    * char to be written will be in the lowest 16 bits of the <code>int</code>
+    * value passed.  These bytes will be written "big endian".  That is,
+    * with the high byte written first in the following manner:
+    * <p>
+    * <code>byte0 = (byte)((value & 0xFF00) >> 8);<br>
+    * byte1 = (byte)(value & 0x00FF);</code>
+    * <p>
+    *
+    * The value written can be read using the <code>readChar</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The char value to write
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readChar
+    */
+   void writeChar(int value) throws IOException;
+ 
+   /**
+    * This method writes a Java short value to an output stream.  The
+    * char to be written will be in the lowest 16 bits of the <code>int</code>
+    * value passed.  These bytes will be written "big endian".  That is,
+    * with the high byte written first in the following manner:
+    * <p>
+    * <code>byte0 = (byte)((value & 0xFF00) >> 8);<br>
+    * byte1 = (byte)(value & 0x00FF);</code>
+    * <p>
+    *
+    * The value written can be read using the <code>readShort</code> and
+    * <code>readUnsignedShort</code> methods in <code>DataInput</code>.
+    *
+    * @param value The int value to write as a 16-bit value
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readShort
+    * @see DataInput#readUnsignedShort
+    */
+   void writeShort(int value) throws IOException;
+ 
+   /**
+    * This method writes a Java int value to an output stream.  The 4 bytes
+    * of the passed value will be written "big endian".  That is, with
+    * the high byte written first in the following manner:
+    * <p>
+    * <code>byte0 = (byte)((value & 0xFF000000) >> 24);<br>
+    * byte1 = (byte)((value & 0x00FF0000) >> 16);<br>
+    * byte2 = (byte)((value & 0x0000FF00) >> 8);<br>
+    * byte3 = (byte)(value & 0x000000FF);</code>
+    * <p>
+    *
+    * The value written can be read using the <code>readInt</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The int value to write
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readInt
+    */
+   void writeInt(int value) throws IOException;
+ 
+   /**
+    * This method writes a Java long value to an output stream.  The 8 bytes
+    * of the passed value will be written "big endian".  That is, with
+    * the high byte written first in the following manner:
+    * <p>
+    * <code>byte0 = (byte)((value & 0xFF00000000000000L) >> 56);<br>
+    * byte1 = (byte)((value & 0x00FF000000000000L) >> 48);<br>
+    * byte2 = (byte)((value & 0x0000FF0000000000L) >> 40);<br>
+    * byte3 = (byte)((value & 0x000000FF00000000L) >> 32);<br>
+    * byte4 = (byte)((value & 0x00000000FF000000L) >> 24);<br>
+    * byte5 = (byte)((value & 0x0000000000FF0000L) >> 16);<br>
+    * byte6 = (byte)((value & 0x000000000000FF00L) >> 8);<br>
+    * byte7 = (byte)(value & 0x00000000000000FFL);</code>
+    * <p>
+    *
+    * The value written can be read using the <code>readLong</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The long value to write
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readLong
+    */
+   void writeLong(long value) throws IOException;
+ 
+   /**
+    * This method writes a Java <code>float</code> value to the stream.  This
+    * value is written by first calling the method
+    * <code>Float.floatToIntBits</code>
+    * to retrieve an <code>int</code> representing the floating point number,
+    * then writing this <code>int</code> value to the stream exactly the same
+    * as the <code>writeInt()</code> method does.
+    *
+    * The value written can be read using the <code>readFloat</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The float value to write
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see #writeInt
+    * @see DataInput#readFloat
+    * @see Float#floatToIntBits
+    */
+   void writeFloat(float value) throws IOException;
+ 
+   /**
+    * This method writes a Java <code>double</code> value to the stream.  This
+    * value is written by first calling the method
+    * <code>Double.doubleToLongBits</code>
+    * to retrieve an <code>long</code> representing the floating point number,
+    * then writing this <code>long</code> value to the stream exactly the same
+    * as the <code>writeLong()</code> method does.
+    *
+    * The value written can be read using the <code>readDouble</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The double value to write
+    *
+    * @exception IOException If any other error occurs
+    *
+    * @see #writeLong
+    * @see DataInput#readDouble
+    * @see Double#doubleToLongBits
+    */
+   void writeDouble(double value) throws IOException;
+ 
+   /**
+    * This method writes all the bytes in a <code>String</code> out to the
+    * stream.  One byte is written for each character in the
+    * <code>String</code>.
+    * The high eight bits of each character are discarded, thus this
+    * method is inappropriate for completely representing Unicode characters.
+    *
+    * @param value The <code>String</code> to write
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeBytes(String value) throws IOException;
+ 
+   /**
+    * This method writes all the characters of a <code>String</code> to an 
+    * output stream as an array of <code>char</code>'s. Each character
+    * is written using the method specified in the <code>writeChar</code>
+    * method. 
+    *
+    * @param value The String to write
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see #writeChar(int)
+    */
+   void writeChars(String value) throws IOException;
+ 
+   /**
+   * This method writes a Java <code>String</code> to the stream in a modified
+    * UTF-8 format.  First, two bytes are written to the stream indicating the
+    * number of bytes to follow.  This is written in the form of a Java
+    * <code>short</code> value in the same manner used by the 
+    * <code>writeShort</code> method.  Note that this is the number of 
+    * bytes in the
+    * encoded <code>String</code> not the <code>String</code> length.  Next
+    * come the encoded characters.  Each character in the <code>String</code>
+    * is encoded as either one, two or three bytes.  For characters in the
+    * range of <code>\u0001</code> to <code>\u007F</code>, one byte is used.  
+    * The character
+    * value goes into bits 0-7 and bit eight is 0.  For characters in the range
+    * of <code>\u0080</code> to <code>\u007FF</code>, two bytes are used.  Bits
+    * 6-10 of the character value are encoded bits 0-4 of the first byte, with
+    * the high bytes having a value of "110".  Bits 0-5 of the character value
+    * are stored in bits 0-5 of the second byte, with the high bits set to
+    * "10".  This type of encoding is also done for the null character
+    * <code>\u0000</code>.  This eliminates any C style NUL character values
+    * in the output.  All remaining characters are stored as three bytes.
+    * Bits 12-15 of the character value are stored in bits 0-3 of the first
+    * byte.  The high bits of the first bytes are set to "1110".  Bits 6-11
+    * of the character value are stored in bits 0-5 of the second byte.  The
+    * high bits of the second byte are set to "10".  And bits 0-5 of the
+    * character value are stored in bits 0-5 of byte three, with the high bits
+    * of that byte set to "10".
+    *
+    * The value written can be read using the <code>readUTF</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>String</code> to write
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readUTF
+    */
+   void writeUTF(String value) throws IOException;
+ 
+   /**
+    * This method writes an 8-bit value (passed into the method as a Java
+    * <code>int</code>) to an output stream.  The low 8 bits of the
+    * passed value are written.
+    *
+    * @param value The <code>byte</code> to write to the output stream
+    *
+    * @exception IOException If an error occurs
+    */
+   void write(int value) throws IOException;
+ 
+   /**
+    * This method writes the raw byte array passed in to the output stream.
+    *
+    * @param buf The byte array to write
+    *
+    * @exception IOException If an error occurs
+    */
+   void write(byte[] buf) throws IOException;
+ 
+   /**
+    * This method writes raw bytes from the passed array <code>buf</code> 
+    * starting
+    * <code>offset</code> bytes into the buffer.  The number of bytes 
+    * written will be exactly <code>len</code>. 
+    *
+    * @param buf The buffer from which to write the data
+    * @param offset The offset into the buffer to start writing data from
+    * @param len The number of bytes to write from the buffer to the output 
+    * stream
+    *
+    * @exception IOException If any other error occurs
+    */
+   void write(byte[] buf, int offset, int len) throws IOException;
+ 
+ } // interface DataOutput
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/DataOutputStream.java gcc-4.1.0/libjava/classpath/java/io/DataOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/DataOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/DataOutputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,455 ----
+ /* DataOutputStream.java -- Writes primitive Java datatypes to streams
+    Copyright (C) 1998, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to version 1.1.
+  */
+ 
+ /**
+  * This class provides a mechanism for writing primitive Java datatypes
+  * to an <code>OutputStream</code> in a portable way.  Data written to
+  * a stream using this class can be read back in using the
+  * <code>DataInputStream</code> class on any platform.
+  *
+  * @see DataInputStream
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  */
+ public class DataOutputStream extends FilterOutputStream implements DataOutput
+ {
+   /**
+    * This is the total number of bytes that have been written to the
+    * stream by this object instance.
+    */
+   protected int written;
+ 
+   /**
+    * This method initializes an instance of <code>DataOutputStream</code> to
+    * write its data to the specified underlying <code>OutputStream</code>
+    *
+    * @param out The subordinate <code>OutputStream</code> to which this 
+    * object will write
+    */
+   public DataOutputStream (OutputStream out)
+   {
+     super (out);
+     written = 0;
+   }
+ 
+   /**
+    * This method flushes any unwritten bytes to the underlying stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public void flush () throws IOException
+   {
+     out.flush();
+   }
+ 
+   /**
+    * This method returns the total number of bytes that have been written to
+    * the underlying output stream so far.  This is the value of the
+    * <code>written</code> instance variable
+    *
+    * @return The number of bytes written to the stream.
+    */
+   public final int size ()
+   {
+     return written;
+   }
+ 
+   /**
+    * This method writes the specified byte (passed as an <code>int</code>)
+    * to the underlying output stream.
+    *
+    * @param value The <code>byte</code> to write, passed as an <code>int</code>.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public synchronized void write (int value) throws IOException
+   {
+     out.write (value);
+     ++written;
+   }
+ 
+   /**
+    * This method writes <code>len</code> bytes from the specified byte array
+    * <code>buf</code> starting at position <code>offset</code> into the
+    * buffer to the underlying output stream.
+    *
+    * @param buf The byte array to write from.
+    * @param offset The index into the byte array to start writing from.
+    * @param len The number of bytes to write.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public synchronized void write (byte[] buf, int offset, int len) 
+      throws IOException
+   {
+     out.write(buf, offset, len);
+     written += len;
+   }
+ 
+   /**
+    * This method writes a Java boolean value to an output stream.  If
+    * <code>value</code> is <code>true</code>, a byte with the value of
+    * 1 will be written, otherwise a byte with the value of 0 will be
+    * written.
+    *
+    * The value written can be read using the <code>readBoolean</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>boolean</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readBoolean
+    */
+   public final void writeBoolean (boolean value) throws IOException
+   {
+     write (value ? 1 : 0);
+   }
+ 
+   /**
+    * This method writes a Java byte value to an output stream.  The
+    * byte to be written will be in the lowest 8 bits of the
+    * <code>int</code> value passed.
+    *
+    * The value written can be read using the <code>readByte</code> or
+    * <code>readUnsignedByte</code> methods in <code>DataInput</code>.
+    *
+    * @param value The <code>byte</code> to write to the stream, passed as 
+    * the low eight bits of an <code>int</code>.
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readByte
+    * @see DataInput#readUnsignedByte
+    */
+   public final void writeByte (int value) throws IOException
+   {
+     write (value & 0xff);
+   }
+ 
+   /**
+    * This method writes a Java short value to an output stream.  The
+    * char to be written will be in the lowest 16 bits of the <code>int</code>
+    * value passed.  These bytes will be written "big endian".  That is,
+    * with the high byte written first in the following manner:
+    * <p>
+    * <code>byte0 = (byte)((value & 0xFF00) >> 8);<br>
+    * byte1 = (byte)(value & 0x00FF);</code>
+    * <p>
+    *
+    * The value written can be read using the <code>readShort</code> and
+    * <code>readUnsignedShort</code> methods in <code>DataInput</code>.
+    *
+    * @param value The <code>short</code> value to write to the stream,
+    * passed as an <code>int</code>.
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readShort
+    * @see DataInput#readUnsignedShort
+    */
+   public final synchronized void writeShort (int value) throws IOException
+   {
+     write ((byte) (0xff & (value >> 8)));
+     write ((byte) (0xff & value));
+   }
+ 
+   /**
+    * This method writes a Java char value to an output stream.  The
+    * char to be written will be in the lowest 16 bits of the <code>int</code>
+    * value passed.  These bytes will be written "big endian".  That is,
+    * with the high byte written first in the following manner:
+    * <p>
+    * <code>byte0 = (byte)((value & 0xFF00) >> 8);<br>
+    * byte1 = (byte)(value & 0x00FF);</code>
+    * <p>
+    *
+    * The value written can be read using the <code>readChar</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>char</code> value to write, 
+    * passed as an <code>int</code>.
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readChar
+    */
+   public final synchronized void writeChar (int value) throws IOException
+   {
+     write ((byte) (0xff & (value >> 8)));
+     write ((byte) (0xff & value));
+   }
+ 
+   /**
+    * This method writes a Java int value to an output stream.  The 4 bytes
+    * of the passed value will be written "big endian".  That is, with
+    * the high byte written first in the following manner:
+    * <p>
+    * <code>byte0 = (byte)((value & 0xFF000000) >> 24);<br>
+    * byte1 = (byte)((value & 0x00FF0000) >> 16);<br>
+    * byte2 = (byte)((value & 0x0000FF00) >> 8);<br>
+    * byte3 = (byte)(value & 0x000000FF);</code>
+    * <p>
+    *
+    * The value written can be read using the <code>readInt</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>int</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readInt
+    */
+   public final synchronized void writeInt (int value) throws IOException
+   {
+     write ((byte) (0xff & (value >> 24)));
+     write ((byte) (0xff & (value >> 16)));
+     write ((byte) (0xff & (value >>  8)));
+     write ((byte) (0xff & value));
+   }
+ 
+   /**
+    * This method writes a Java long value to an output stream.  The 8 bytes
+    * of the passed value will be written "big endian".  That is, with
+    * the high byte written first in the following manner:
+    * <p>
+    * <code>byte0 = (byte)((value & 0xFF00000000000000L) >> 56);<br>
+    * byte1 = (byte)((value & 0x00FF000000000000L) >> 48);<br>
+    * byte2 = (byte)((value & 0x0000FF0000000000L) >> 40);<br>
+    * byte3 = (byte)((value & 0x000000FF00000000L) >> 32);<br>
+    * byte4 = (byte)((value & 0x00000000FF000000L) >> 24);<br>
+    * byte5 = (byte)((value & 0x0000000000FF0000L) >> 16);<br>
+    * byte6 = (byte)((value & 0x000000000000FF00L) >> 8);<br>
+    * byte7 = (byte)(value & 0x00000000000000FFL);</code>
+    * <p>
+    *
+    * The value written can be read using the <code>readLong</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>long</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readLong
+    */
+   public final synchronized void writeLong (long value) throws IOException
+   {
+     write ((byte) (0xff & (value >> 56)));
+     write ((byte) (0xff & (value>> 48)));
+     write ((byte) (0xff & (value>> 40)));
+     write ((byte) (0xff & (value>> 32)));
+     write ((byte) (0xff & (value>> 24)));
+     write ((byte) (0xff & (value>> 16)));
+     write ((byte) (0xff & (value>>  8)));
+     write ((byte) (0xff & value));
+   }
+ 
+   /**
+    * This method writes a Java <code>float</code> value to the stream.  This
+    * value is written by first calling the method
+    * <code>Float.floatToIntBits</code>
+    * to retrieve an <code>int</code> representing the floating point number,
+    * then writing this <code>int</code> value to the stream exactly the same
+    * as the <code>writeInt()</code> method does.
+    *
+    * The value written can be read using the <code>readFloat</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>float</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see #writeInt(int)
+    * @see DataInput#readFloat
+    * @see Float#floatToIntBits
+    */
+   public final void writeFloat (float value) throws IOException
+   {
+     writeInt (Float.floatToIntBits (value));
+   }
+ 
+   /**
+    * This method writes a Java <code>double</code> value to the stream.  This
+    * value is written by first calling the method
+    * <code>Double.doubleToLongBits</code>
+    * to retrieve an <code>long</code> representing the floating point number,
+    * then writing this <code>long</code> value to the stream exactly the same
+    * as the <code>writeLong()</code> method does.
+    *
+    * The value written can be read using the <code>readDouble</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>double</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see #writeLong(long)
+    * @see DataInput#readDouble
+    * @see Double#doubleToLongBits
+    */
+   public final void writeDouble (double value) throws IOException
+   {
+     writeLong (Double.doubleToLongBits (value));
+   }
+ 
+   /**
+    * This method writes all the bytes in a <code>String</code> out to the
+    * stream.  One byte is written for each character in the
+    * <code>String</code>.
+    * The high eight bits of each character are discarded, thus this
+    * method is inappropriate for completely representing Unicode characters.
+    *
+    * @param value The <code>String</code> to write to the stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeBytes (String value) throws IOException
+   {
+     int len = value.length();
+     for (int i = 0; i < len; ++i)
+       writeByte (value.charAt(i));
+   }
+ 
+   /**
+    * This method writes all the characters of a <code>String</code> to an
+    * output stream as an array of <code>char</code>'s. Each character
+    * is written using the method specified in the <code>writeChar</code>
+    * method.
+    *
+    * @param value The <code>String</code> to write to the stream
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see #writeChar(char)
+    */
+   public final void writeChars (String value) throws IOException
+   {
+     int len = value.length();
+     for (int i = 0; i < len; ++i)
+       writeChar (value.charAt(i));
+   }
+ 
+   /**
+    * This method writes a Java <code>String</code> to the stream in a modified
+    * UTF-8 format.  First, two bytes are written to the stream indicating the
+    * number of bytes to follow.  Note that this is the number of bytes in the
+    * encoded <code>String</code> not the <code>String</code> length.  Next
+    * come the encoded characters.  Each character in the <code>String</code>
+    * is encoded as either one, two or three bytes.  For characters in the
+    * range of <code>\u0001</code> to <\u007F>, one byte is used.  The character
+    * value goes into bits 0-7 and bit eight is 0.  For characters in the range
+    * of <code>\u0080</code> to <code>\u007FF</code>, two bytes are used.  Bits
+    * 6-10 of the character value are encoded bits 0-4 of the first byte, with
+    * the high bytes having a value of "110".  Bits 0-5 of the character value
+    * are stored in bits 0-5 of the second byte, with the high bits set to
+    * "10".  This type of encoding is also done for the null character
+    * <code>\u0000</code>.  This eliminates any C style NUL character values
+    * in the output.  All remaining characters are stored as three bytes.
+    * Bits 12-15 of the character value are stored in bits 0-3 of the first
+    * byte.  The high bits of the first bytes are set to "1110".  Bits 6-11
+    * of the character value are stored in bits 0-5 of the second byte.  The
+    * high bits of the second byte are set to "10".  And bits 0-5 of the
+    * character value are stored in bits 0-5 of byte three, with the high bits
+    * of that byte set to "10".
+    *
+    * The value written can be read using the <code>readUTF</code>
+    * method in <code>DataInput</code>.
+    *
+    * @param value The <code>String</code> to write to the output in UTF format
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataInput#readUTF
+    */
+   public final synchronized void writeUTF(String value) throws IOException
+   {
+     int len = value.length();
+     int sum = 0;
+ 
+     for (int i = 0; i < len && sum <= 65535; ++i)
+       {
+ 	char c = value.charAt(i);
+ 	if (c >= '\u0001' && c <= '\u007f')
+ 	  sum += 1;
+ 	else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff'))
+ 	  sum += 2;
+ 	else
+ 	  sum += 3;
+       }
+ 
+     if (sum > 65535)
+       throw new UTFDataFormatException ();
+ 
+     int pos = 0;
+     byte[] buf = new byte[sum];
+ 
+     for (int i = 0; i < len; ++i)
+       {
+ 	char c = value.charAt(i);
+ 	if (c >= '\u0001' && c <= '\u007f')
+           buf[pos++] = (byte) c;
+ 	else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff'))
+ 	  {
+ 	    buf[pos++] = (byte) (0xc0 | (0x1f & (c >> 6)));
+ 	    buf[pos++] = (byte) (0x80 | (0x3f & c));
+ 	  }
+ 	else
+ 	  {
+ 	    // JSL says the first byte should be or'd with 0xc0, but
+ 	    // that is a typo.  Unicode says 0xe0, and that is what is
+ 	    // consistent with DataInputStream.
+ 	    buf[pos++] = (byte) (0xe0 | (0x0f & (c >> 12)));
+ 	    buf[pos++] = (byte) (0x80 | (0x3f & (c >> 6)));
+ 	    buf[pos++] = (byte) (0x80 | (0x3f & c));
+ 	  }
+       }
+     
+     writeShort (sum);
+     write(buf, 0, sum);
+   }
+ 
+ } // class DataOutputStream
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/DeleteFileHelper.java gcc-4.1.0/libjava/classpath/java/io/DeleteFileHelper.java
*** gcc-4.0.2/libjava/classpath/java/io/DeleteFileHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/DeleteFileHelper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* DeleteFileHelper.java -- Helper class to delete files on VM exit
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ 
+ /**
+  * @author Guilhem Lavaux (guilhem@kaffe.org)
+  * @author Jeroen Frijters (jeroen@sumatra.nl)
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ final class DeleteFileHelper extends Thread
+ {
+   private static ArrayList filesToDelete;
+ 
+   static synchronized void add(File file)
+   {
+     if (filesToDelete == null)
+       {
+         filesToDelete = new ArrayList();
+         
+         AccessController.doPrivileged(new PrivilegedAction()
+           {
+             public Object run()
+             {
+               try
+                 {
+                   Runtime.getRuntime().addShutdownHook(new DeleteFileHelper());
+                 }
+               catch (IllegalStateException e)
+                 {
+                   // Shutdown is already in progress, so we can't
+                   // register ours.
+                 }
+                 
+               return null;
+             }
+           });
+       }
+       
+     filesToDelete.add(file);
+   }
+ 
+   private static synchronized void deleteFiles()
+   {
+     Iterator it = filesToDelete.iterator();
+ 	
+     while (it.hasNext())
+       {
+ 	try
+ 	  {
+ 	    File file = (File) it.next();
+ 	    file.delete();
+ 	  }
+ 	catch (Exception e)
+ 	  {
+ 	    // Do nothing here.
+ 	  }
+       }
+   }
+ 
+   // Package-private to avoid a trampoline constructor.
+   DeleteFileHelper()
+   {
+   }
+   
+   public void run()
+   {
+     deleteFiles();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/EOFException.java gcc-4.1.0/libjava/classpath/java/io/EOFException.java
*** gcc-4.0.2/libjava/classpath/java/io/EOFException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/EOFException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* EOFException.java -- unexpected end of file exception
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when the end of the file or stream was 
+  * encountered unexpectedly.  This is not the normal way that an EOF
+  * condition is reported; such as a special value like -1 being returned.
+  *  However, certain types of streams expecting certain data in a certain
+  * format might reach EOF before reading their expected data pattern and
+  * thus throw this exception.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class EOFException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 6433858223774886977L;
+ 
+   /**
+    * Create an exception without a descriptive error message.
+    */
+   public EOFException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public EOFException(String message)
+   {
+     super(message);
+   }
+ } // class EOFException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/Externalizable.java gcc-4.1.0/libjava/classpath/java/io/Externalizable.java
*** gcc-4.0.2/libjava/classpath/java/io/Externalizable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/Externalizable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,107 ----
+ /* Externalizable.java -- Interface for saving and restoring object data
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This interface provides a way that classes can completely control how
+  * the data of their object instances  are written and read to and from 
+  * streams.  It has two methods which are used to write the data to a stream 
+  * and to read the data from a stream.  The read method must read the data 
+  * in exactly the way it was written by the write method. 
+  * <p>
+  * Note that classes which implement this interface must take into account
+  * that all superclass data must also be written to the stream as well.  
+  * The class implementing this interface must figure out how to make that
+  * happen.
+  * <p>
+  * This interface can be used to provide object persistence.  When an 
+  * object is to be stored externally, the <code>writeExternal</code> method is
+  * called to save state.  When the object is restored, an instance is
+  * created using the default no-argument constructor and the 
+  * <code>readExternal</code> method is used to restore the state.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Externalizable extends Serializable
+ {
+   /**
+    * This method restores an object's state by reading in the instance data
+    * for the object from the passed in stream.  Note that this stream is not
+    * a subclass of <code>InputStream</code>, but rather is a class that 
+    * implements
+    * the <code>ObjectInput</code> interface.  That interface provides a 
+    * mechanism for
+    * reading in Java data types from a stream.
+    * <p>
+    * Note that this method must be compatible with <code>writeExternal</code>.
+    * It must read back the exact same types that were written by that
+    * method in the exact order they were written.
+    * <p>
+    * If this method needs to read back an object instance, then the class
+    * for that object must be found and loaded.  If that operation fails,
+    * then this method throws a <code>ClassNotFoundException</code>
+    *
+    * @param in An <code>ObjectInput</code> instance for reading in the object 
+    * state
+    *
+    * @exception ClassNotFoundException If the class of an object being 
+    * restored cannot be found
+    * @exception IOException If any other error occurs
+    */
+   void readExternal(ObjectInput in) 
+     throws ClassNotFoundException, IOException;
+ 
+   /**
+    * This method is responsible for writing the instance data of an object
+    * to the passed in stream.  Note that this stream is not a subclass of
+    * <code>OutputStream</code>, but rather is a class that implements the
+    * <code>ObjectOutput</code> interface.  That interface provides a 
+    * number of methods
+    * for writing Java data values to a stream.
+    * <p>
+    * Not that the implementation of this method must be coordinated with
+    * the implementation of <code>readExternal</code>.
+    *
+    * @param out An <code>ObjectOutput</code> instance for writing the 
+    * object state
+    *
+    * @exception IOException If an error occurs
+    */
+   void writeExternal(ObjectOutput out) throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/File.java gcc-4.1.0/libjava/classpath/java/io/File.java
*** gcc-4.0.2/libjava/classpath/java/io/File.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/File.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1386 ----
+ /* File.java -- Class representing a file on disk
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.classpath.SystemProperties;
+ 
+ import java.net.MalformedURLException;
+ import java.net.URI;
+ import java.net.URISyntaxException;
+ import java.net.URL;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to version 1.3.
+  */
+ 
+ /**
+  * This class represents a file or directory on a local disk.  It provides
+  * facilities for dealing with a variety of systems that use various
+  * types of path separators ("/" versus "\", for example).  It also
+  * contains method useful for creating and deleting files and directories.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  */
+ public class File implements Serializable, Comparable
+ {
+   private static final long serialVersionUID = 301077366599181567L;
+ 
+   /**
+    * This is the path separator string for the current host. This field
+    * contains the value of the <code>file.separator</code> system property.
+    * An example separator string would be "/" on the GNU system.
+    */
+   public static final String separator = SystemProperties.getProperty("file.separator");
+   private static final String dupSeparator = separator + separator;
+ 
+   /**
+    * This is the first character of the file separator string.  On many
+    * hosts (for example, on the GNU system), this represents the entire 
+    * separator string.  The complete separator string is obtained from the
+    * <code>file.separator</code>system property.
+    */
+   public static final char separatorChar = separator.charAt(0);
+   
+   /**
+    * This is the string that is used to separate the host name from the
+    * path name in paths than include the host name.  It is the value of
+    * the <code>path.separator</code> system property.
+    */
+   public static final String pathSeparator
+     = SystemProperties.getProperty("path.separator");
+   
+   /**
+    * This is the first character of the string used to separate the host name
+    * from the path name in paths that include a host.  The separator string
+    * is taken from the <code>path.separator</code> system property.
+    */
+   public static final char pathSeparatorChar = pathSeparator.charAt(0);
+ 
+   /**
+    * This is the path to the file set when the object is created.  It
+    * may be an absolute or relative path name.
+    */
+   private String path;
+   
+   
+   /**
+    * The time (millisecond), when the last temporary file was created.
+    */
+   private static long last_tmp;
+   
+   /**
+    * The number of files, created during the current millisecond.
+    */
+   private static int n_created;  
+ 
+   /**
+    * This method tests whether or not the current thread is allowed to
+    * to read the file pointed to by this object.  This will be true if and
+    * and only if 1) the file exists and 2) the <code>SecurityManager</code>
+    * (if any) allows access to the file via it's <code>checkRead</code>
+    * method 3) the file is readable.
+    *
+    * @return <code>true</code> if reading is allowed, 
+    * <code>false</code> otherwise
+    *
+    * @exception SecurityException If the <code>SecurityManager</code> 
+    * does not allow access to the file
+    */
+   public boolean canRead()
+   {
+     // Test for existence. This also does the SecurityManager check
+     if (!exists())
+       return false;
+ 
+     return VMFile.canRead(path);
+   }
+ 
+   /**
+    * This method test whether or not the current thread is allowed to
+    * write to this object.  This will be true if and only if 1) The
+    * <code>SecurityManager</code> (if any) allows write access to the
+    * file and 2) The file exists and 3) The file is writable.  To determine
+    * whether or not a non-existent file can be created, check the parent
+    * directory for write access.
+    *
+    * @return <code>true</code> if writing is allowed, <code>false</code> 
+    * otherwise
+    *
+    * @exception SecurityException If the <code>SecurityManager</code> 
+    * does not allow access to the file
+    */
+   public boolean canWrite()
+   {
+     // First do a SecurityCheck before doing anything else.
+     checkWrite();
+      
+     // Test for existence.  This is required by the spec
+     if (! VMFile.exists(path))
+       return false;
+ 
+     if (VMFile.isDirectory(path))
+       return VMFile.canWriteDirectory(this);
+     else
+       return VMFile.canWrite(path);
+   }
+ 
+   /**
+    * This method creates a new file of zero length with the same name as
+    * the path of this <code>File</code> object if an only if that file
+    * does not already exist.
+    * <p>
+    * A <code>SecurityManager.checkWrite</code> check is done prior
+    * to performing this action.
+    *
+    * @return <code>true</code> if the file was created, <code>false</code> if
+    * the file alread existed.
+    *
+    * @exception IOException If an I/O error occurs
+    * @exception SecurityException If the <code>SecurityManager</code> will
+    * not allow this operation to be performed.
+    *
+    * @since 1.2
+    */
+   public boolean createNewFile() throws IOException
+   {
+     checkWrite();
+     return VMFile.create(path);
+   }
+   /**
+    * This method deletes the file represented by this object.  If this file
+    * is a directory, it must be empty in order for the delete to succeed.
+    *
+    * @return <code>true</code> if the file was deleted, <code>false</code> 
+    * otherwise
+    *
+    * @exception SecurityException If deleting of the file is not allowed
+    */
+   public synchronized boolean delete()
+   {
+     SecurityManager s = System.getSecurityManager();
+     
+     if (s != null)
+       s.checkDelete(path);
+     
+     return VMFile.delete(path);
+   }
+ 
+   /**
+    * This method tests two <code>File</code> objects for equality by 
+    * comparing the path of the specified <code>File</code> against the path
+    * of this object.  The two objects are equal if an only if 1) The
+    * argument is not null 2) The argument is a <code>File</code> object and
+    * 3) The path of the <code>File</code>argument is equal to the path
+    * of this object.
+    * <p>
+    * The paths of the files are determined by calling the 
+    * <code>getPath()</code>
+    * method on each object.
+    *
+    * @return <code>true</code> if the two objects are equal, 
+    * <code>false</code> otherwise.
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof File))
+       return false;
+     
+     File other = (File) obj;
+ 
+     if (VMFile.IS_CASE_SENSITIVE)
+       return path.equals(other.path);
+     else
+       return path.equalsIgnoreCase(other.path);
+   }
+ 
+   /**
+    * This method tests whether or not the file represented by the object
+    * actually exists on the filesystem.
+    *
+    * @return <code>true</code> if the file exists, <code>false</code>otherwise.
+    *
+    * @exception SecurityException If reading of the file is not permitted
+    */
+   public boolean exists()
+   {
+     checkRead();
+     return VMFile.exists(path);
+   }
+ 
+   /**
+    * This method initializes a new <code>File</code> object to represent
+    * a file with the specified path.
+    *
+    * @param name The path name of the file
+    */
+   public File(String name)
+   {
+     path = normalizePath (name);
+   }
+  
+   // Remove duplicate and redundant separator characters.
+   private String normalizePath(String p)
+   {
+     // On Windows, convert any '/' to '\'.  This appears to be the same logic
+     // that Sun's Win32 Java performs.
+     if (separatorChar == '\\')
+       {
+         p = p.replace ('/', '\\');
+ 	// We have to special case the "\c:" prefix.
+ 	if (p.length() > 2 && p.charAt(0) == '\\' &&
+ 	    ((p.charAt(1) >= 'a' && p.charAt(1) <= 'z') ||
+ 	    (p.charAt(1) >= 'A' && p.charAt(1) <= 'Z')) &&
+ 	    p.charAt(2) == ':')
+ 	  p = p.substring(1);
+       }
+ 
+     int dupIndex = p.indexOf(dupSeparator);
+     int plen = p.length();
+ 
+     // Special case: permit Windows UNC path prefix.
+     if (dupSeparator.equals("\\\\") && dupIndex == 0)
+       dupIndex = p.indexOf(dupSeparator, 1);
+ 
+     if (dupIndex == -1)
+       {
+         // Ignore trailing separator (though on Windows "a:\", for
+         // example, is a valid and minimal path).
+         if (plen > 1 && p.charAt (plen - 1) == separatorChar)
+ 	  {
+ 	    if (! (separatorChar == '\\' && plen == 3 && p.charAt (1) == ':'))
+ 	      return p.substring (0, plen - 1);
+ 	  }
+ 	else
+ 	  return p;
+       }
+     
+     StringBuffer newpath = new StringBuffer(plen);
+     int last = 0;
+     while (dupIndex != -1)
+       {
+         newpath.append(p.substring(last, dupIndex));
+ 	// Ignore the duplicate path characters.
+ 	while (p.charAt(dupIndex) == separatorChar)
+ 	  {
+ 	    dupIndex++;
+ 	    if (dupIndex == plen)
+ 	      return newpath.toString();
+ 	  }
+ 	newpath.append(separatorChar);
+ 	last = dupIndex;
+ 	dupIndex = p.indexOf(dupSeparator, last);
+       }
+     
+     // Again, ignore possible trailing separator (except special cases
+     // like "a:\" on Windows).
+     int end;
+     if (plen > 1 && p.charAt (plen - 1) == separatorChar)
+     {
+       if (separatorChar == '\\' && plen == 3 && p.charAt (1) == ':')
+         end = plen;
+       else
+         end = plen - 1;
+     }
+     else
+       end = plen;
+     newpath.append(p.substring(last, end));
+     
+     return newpath.toString();
+   }
+  
+   /**
+    * This method initializes a new <code>File</code> object to represent
+    * a file in the specified named directory.  The path name to the file
+    * will be the directory name plus the separator string plus the file
+    * name.  If the directory path name ends in the separator string, another
+    * separator string will still be appended.
+    *
+    * @param dirPath The path to the directory the file resides in
+    * @param name The name of the file
+    */
+   public File(String dirPath, String name)
+   {
+     if (name == null)
+       throw new NullPointerException();
+     if (dirPath != null)
+       {
+ 	if (dirPath.length() > 0)
+ 	  {
+ 	    // Try to be smart about the number of separator characters.
+ 	    if (dirPath.charAt(dirPath.length() - 1) == separatorChar
+ 		|| name.length() == 0)
+ 	      path = normalizePath(dirPath + name);
+ 	    else
+ 	      path = normalizePath(dirPath + separatorChar + name);
+ 	  }
+ 	else
+ 	  {
+ 	    // If dirPath is empty, use a system dependant
+ 	    // default prefix.
+ 	    // Note that the leading separators in name have
+ 	    // to be chopped off, to prevent them forming
+ 	    // a UNC prefix on Windows.
+ 	    if (separatorChar == '\\' /* TODO use ON_WINDOWS */)
+ 	      {
+ 		int skip = 0;
+ 		while(name.length() > skip
+ 		    && (name.charAt(skip) == separatorChar
+ 		    || name.charAt(skip) == '/'))
+ 		  {
+ 		    skip++;
+ 		  }
+ 		name = name.substring(skip);
+ 	      }
+ 	    path = normalizePath(separatorChar + name);
+ 	  }
+       }
+     else
+       path = normalizePath(name);
+   }
+ 
+   /**
+    * This method initializes a new <code>File</code> object to represent
+    * a file in the specified directory.  If the <code>directory</code>
+    * argument is <code>null</code>, the file is assumed to be in the
+    * current directory as specified by the <code>user.dir</code> system
+    * property
+    *
+    * @param directory The directory this file resides in
+    * @param name The name of the file
+    */
+   public File(File directory, String name)
+   {
+     this (directory == null ? null : directory.path, name);
+   }
+ 
+   /**
+    * This method initializes a new <code>File</code> object to represent
+    * a file corresponding to the specified <code>file:</code> protocol URI.
+    *
+    * @param uri The uri.
+    */
+   public File(URI uri)
+   {
+     if (uri == null)
+ 	throw new NullPointerException("uri is null");
+ 
+     if (!uri.getScheme().equals("file"))
+ 	throw new IllegalArgumentException("invalid uri protocol");
+ 
+     path = normalizePath(uri.getPath());
+   }
+ 
+   /**
+    * This method returns the path of this file as an absolute path name.
+    * If the path name is already absolute, then it is returned.  Otherwise
+    * the value returned is the current directory plus the separatory
+    * string plus the path of the file.  The current directory is determined
+    * from the <code>user.dir</code> system property.
+    *
+    * @return The absolute path of this file
+    */
+   public String getAbsolutePath()
+   {
+     if (isAbsolute())
+       return path;
+     else if (separatorChar == '\\' 
+              && path.length() > 0 && path.charAt (0) == '\\')
+       {
+         // On Windows, even if the path starts with a '\\' it is not
+         // really absolute until we prefix the drive specifier from
+         // the current working directory to it.
+         return System.getProperty ("user.dir").substring (0, 2) + path;
+       }
+     else if (separatorChar == '\\' 
+              && path.length() > 1 && path.charAt (1) == ':'
+              && ((path.charAt (0) >= 'a' && path.charAt (0) <= 'z')
+                  || (path.charAt (0) >= 'A' && path.charAt (0) <= 'Z')))
+       {
+         // On Windows, a process has a current working directory for
+         // each drive and a path like "G:foo\bar" would mean the 
+         // absolute path "G:\wombat\foo\bar" if "\wombat" is the 
+         // working directory on the G drive.
+         String drvDir = null;
+         try
+           {
+             drvDir = new File (path.substring (0, 2)).getCanonicalPath();
+           }
+         catch (IOException e)
+           {
+             drvDir = path.substring (0, 2) + "\\";
+           }
+         
+         // Note: this would return "C:\\." for the path "C:.", if "\"
+         // is the working folder on the C drive, but this is 
+         // consistent with what Sun's JRE 1.4.1.01 actually returns!
+         if (path.length() > 2)
+           return drvDir + '\\' + path.substring (2, path.length());
+         else
+           return drvDir;
+       }
+     else if (path.equals(""))
+       return System.getProperty ("user.dir");
+     else
+       return System.getProperty ("user.dir") + separatorChar + path;
+   }
+ 
+   /**
+    * This method returns a <code>File</code> object representing the
+    * absolute path of this object.
+    *
+    * @return A <code>File</code> with the absolute path of the object.
+    *
+    * @since 1.2
+    */
+   public File getAbsoluteFile()
+   {
+     return new File(getAbsolutePath());
+   }
+ 
+   /**
+    * This method returns a canonical representation of the pathname of
+    * this file.  The actual form of the canonical representation is
+    * different.  On the GNU system, the canonical form differs from the
+    * absolute form in that all relative file references to "." and ".."
+    * are resolved and removed.
+    * <p>
+    * Note that this method, unlike the other methods which return path
+    * names, can throw an IOException.  This is because native method 
+    * might be required in order to resolve the canonical path
+    *
+    * @exception IOException If an error occurs
+    */
+   public String getCanonicalPath() throws IOException
+   {
+     // On Windows, getAbsolutePath might end up calling us, so we
+     // have to special case that call to avoid infinite recursion.
+     if (separatorChar == '\\' && path.length() == 2 &&
+ 	((path.charAt(0) >= 'a' && path.charAt(0) <= 'z') ||
+ 	 (path.charAt(0) >= 'A' && path.charAt(0) <= 'Z')) &&
+ 	path.charAt(1) == ':')
+     {
+ 	return VMFile.toCanonicalForm(path);
+     }
+     // Call getAbsolutePath first to make sure that we do the
+     // current directory handling, because the native code
+     // may have a different idea of the current directory.
+     return VMFile.toCanonicalForm(getAbsolutePath());
+   }
+ 
+   /**
+    * This method returns a <code>File</code> object representing the
+    * canonical path of this object.
+    *
+    * @return A <code>File</code> instance representing the canonical path of
+    * this object.
+    *
+    * @exception IOException If an error occurs.
+    *
+    * @since 1.2
+    */
+   public File getCanonicalFile() throws IOException
+   {
+     return new File(getCanonicalPath());
+   }
+ 
+   /**
+    * This method returns the name of the file.  This is everything in the
+    * complete path of the file after the last instance of the separator
+    * string.
+    *
+    * @return The file name
+    */
+   public String getName()
+   {
+   	return VMFile.getName(path);
+   }
+ 
+   /**
+    * This method returns a <code>String</code> the represents this file's
+    * parent.  <code>null</code> is returned if the file has no parent.  The
+    * parent is determined via a simple operation which removes the
+    *
+    * @return The parent directory of this file
+    */
+   public String getParent()
+   {
+     String prefix = null;
+     int nameSeqIndex = 0;
+     
+     if (path.equals(""))
+       return null;
+ 
+     // The "prefix", if present, is the leading "/" on UNIX and 
+     // either the drive specifier (e.g. "C:") or the leading "\\"
+     // of a UNC network path on Windows.
+     if (separatorChar == '/' && path.charAt (0) == '/')
+       {
+         prefix = "/";
+         nameSeqIndex = 1;
+       }
+     else if (separatorChar == '\\' && path.length() > 1)
+       {
+         if ((path.charAt (0) == '\\' && path.charAt (1) == '\\')
+             || (((path.charAt (0) >= 'a' && path.charAt (0) <= 'z')
+                  || (path.charAt (0) >= 'A' && path.charAt (0) <= 'Z'))
+                 && path.charAt (1) == ':'))
+           {
+             prefix = path.substring (0, 2);
+             nameSeqIndex = 2;
+           }
+       }
+ 
+     // According to the JDK docs, the returned parent path is the 
+     // portion of the name sequence before the last separator
+     // character, if found, prefixed by the prefix, otherwise null.
+     if (nameSeqIndex < path.length())
+       {
+         String nameSeq = path.substring (nameSeqIndex, path.length());
+         int last = nameSeq.lastIndexOf (separatorChar);
+         if (last == -1)
+           return prefix;
+         else if (last == (nameSeq.length() - 1))
+           // Note: The path would not have a trailing separator
+           // except for cases like "C:\" on Windows (see 
+           // normalizePath( )), where Sun's JRE 1.4 returns null.
+           return null;
+         else if (last == 0)
+           last++;
+ 
+         if (prefix != null)
+           return prefix + nameSeq.substring (0, last);
+         else
+           return nameSeq.substring (0, last);
+       }
+     else
+       // Sun's JRE 1.4 returns null if the prefix is the only 
+       // component of the path - so "/" gives null on UNIX and 
+       // "C:", "\\", etc. return null on Windows.
+       return null;
+   }
+ 
+   /**
+    * This method returns a <code>File</code> object representing the parent
+    * file of this one.
+    *
+    * @return a <code>File</code> for the parent of this object.  
+    * <code>null</code>
+    * will be returned if this object does not have a parent.
+    *
+    * @since 1.2
+    */
+   public File getParentFile()
+   {
+     String parent = getParent();
+     return parent != null ? new File(parent) : null;
+   }
+ 
+   /**
+    * Returns the path name that represents this file.  May be a relative
+    * or an absolute path name
+    *
+    * @return The pathname of this file
+    */
+   public String getPath()
+   {
+     return path;
+   }
+ 
+   /**
+    * This method returns a hash code representing this file.  It is the
+    * hash code of the path of this file (as returned by <code>getPath()</code>)
+    * exclusived or-ed with the value 1234321.
+    *
+    * @return The hash code for this object
+    */
+   public int hashCode()
+   {
+     if (VMFile.IS_CASE_SENSITIVE)
+       return path.hashCode() ^ 1234321;
+     else
+       return path.toLowerCase().hashCode() ^ 1234321;
+   }
+ 
+   /**
+    * This method returns true if this object represents an absolute file
+    * path and false if it does not.  The definition of an absolute path varies
+    * by system.  As an example, on GNU systems, a path is absolute if it starts
+    * with a "/".
+    *
+    * @return <code>true</code> if this object represents an absolute 
+    * file name, <code>false</code> otherwise.
+    */
+   public boolean isAbsolute()
+   {
+     if (separatorChar == '\\')
+ 	return path.startsWith(dupSeparator) || 
+ 	    (path.length() > 2 && 
+ 	     ((path.charAt(0) >= 'a' && path.charAt(0) <= 'z') ||
+ 	      (path.charAt(0) >= 'A' && path.charAt(0) <= 'Z')) &&
+ 	     path.charAt(1) == ':' &&
+ 	     path.charAt(2) == '\\');
+     else
+ 	return path.startsWith(separator);
+   }
+ 
+   /**
+    * This method tests whether or not the file represented by this object
+    * is a directory.  In order for this method to return <code>true</code>,
+    * the file represented by this object must exist and be a directory.
+    * 
+    * @return <code>true</code> if this file is a directory, <code>false</code>
+    * otherwise
+    *
+    * @exception SecurityException If reading of the file is not permitted
+    */
+   public boolean isDirectory()
+   {
+     checkRead();
+     return VMFile.isDirectory(path); 
+   }
+ 
+   /**
+    * This method tests whether or not the file represented by this object
+    * is a "plain" file.  A file is a plain file if and only if it 1) Exists,
+    * 2) Is not a directory or other type of special file.
+    *
+    * @return <code>true</code> if this is a plain file, <code>false</code> 
+    * otherwise
+    *
+    * @exception SecurityException If reading of the file is not permitted
+    */
+   public boolean isFile()
+   {
+     checkRead();
+     return VMFile.isFile(path);
+   }
+ 
+   /**
+    * This method tests whether or not this file represents a "hidden" file.
+    * On GNU systems, a file is hidden if its name begins with a "."
+    * character.  Files with these names are traditionally not shown with
+    * directory listing tools.
+    *
+    * @return <code>true</code> if the file is hidden, <code>false</code>
+    * otherwise.
+    *
+    * @since 1.2
+    */
+   public boolean isHidden()
+   {
+     return VMFile.isHidden(path);
+   }
+ 
+   /**
+    * This method returns the last modification time of this file.  The
+    * time value returned is an abstract value that should not be interpreted
+    * as a specified time value.  It is only useful for comparing to other
+    * such time values returned on the same system.  In that case, the larger
+    * value indicates a more recent modification time. 
+    * <p>
+    * If the file does not exist, then a value of 0 is returned.
+    *
+    * @return The last modification time of the file
+    *
+    * @exception SecurityException If reading of the file is not permitted
+    */
+   public long lastModified()
+   {
+     checkRead();
+     return VMFile.lastModified(path);
+   }
+ 
+   /**
+    * This method returns the length of the file represented by this object,
+    * or 0 if the specified file does not exist.
+    *
+    * @return The length of the file
+    *
+    * @exception SecurityException If reading of the file is not permitted
+    */
+   public long length()
+   {
+     checkRead();
+     return VMFile.length(path);
+   }
+ 
+   /**
+    * This method returns a array of <code>String</code>'s representing the
+    * list of files is then directory represented by this object.  If this
+    * object represents a non-directory file or a non-existent file, then
+    * <code>null</code> is returned.  The list of files will not contain
+    * any names such as "." or ".." which indicate the current or parent
+    * directory.  Also, the names are not guaranteed to be sorted.
+    * <p>
+    * In this form of the <code>list()</code> method, a filter is specified
+    * that allows the caller to control which files are returned in the
+    * list.  The <code>FilenameFilter</code> specified is called for each
+    * file returned to determine whether or not that file should be included
+    * in the list.
+    * <p>
+    * A <code>SecurityManager</code> check is made prior to reading the
+    * directory.  If read access to the directory is denied, an exception
+    * will be thrown.
+    *
+    * @param filter An object which will identify files to exclude from 
+    * the directory listing.
+    *
+    * @return An array of files in the directory, or <code>null</code> 
+    * if this object does not represent a valid directory.
+    * 
+    * @exception SecurityException If read access is not allowed to the 
+    * directory by the <code>SecurityManager</code>
+    */
+   public String[] list(FilenameFilter filter)
+   {
+     checkRead();
+ 
+     if (!exists() || !isDirectory())
+       return null;
+     
+     // Get the list of files
+     String files[] = VMFile.list(path);
+     
+     // Check if an error occured in listInternal().
+     if (files == null)
+       return null;
+ 
+     if (filter == null)
+       return files;
+     
+     // Apply the filter
+     int count = 0;
+     for (int i = 0; i < files.length; i++)
+       {
+         if (filter.accept(this, files[i]))
+   	  ++count;
+         else
+   	  files[i] = null;
+       }
+ 
+     String[] retfiles = new String[count];
+     count = 0;
+     for (int i = 0; i < files.length; i++)
+       if (files[i] != null)
+         retfiles[count++] = files[i];
+ 
+     return retfiles;
+   }
+ 
+   /**
+    * This method returns a array of <code>String</code>'s representing the
+    * list of files is then directory represented by this object.  If this
+    * object represents a non-directory file or a non-existent file, then
+    * <code>null</code> is returned.  The list of files will not contain
+    * any names such as "." or ".." which indicate the current or parent
+    * directory.  Also, the names are not guaranteed to be sorted.
+    * <p>
+    * A <code>SecurityManager</code> check is made prior to reading the
+    * directory.  If read access to the directory is denied, an exception
+    * will be thrown.
+    *
+    * @return An array of files in the directory, or <code>null</code> if 
+    * this object does not represent a valid directory.
+    * 
+    * @exception SecurityException If read access is not allowed to the 
+    * directory by the <code>SecurityManager</code>
+    */
+   public String[] list()
+   {
+     return list(null);
+   }
+ 
+   /**
+    * This method returns an array of <code>File</code> objects representing
+    * all the files in the directory represented by this object. If this
+    * object does not represent a directory, <code>null</code> is returned.
+    * Each of the returned <code>File</code> object is constructed with this
+    * object as its parent.
+    * <p>
+    * A <code>SecurityManager</code> check is made prior to reading the
+    * directory.  If read access to the directory is denied, an exception
+    * will be thrown.
+    *
+    * @return An array of <code>File</code> objects for this directory.
+    *
+    * @exception SecurityException If the <code>SecurityManager</code> denies
+    * access to this directory.
+    *
+    * @since 1.2
+    */
+   public File[] listFiles()
+   {
+     return listFiles((FilenameFilter) null);
+   }
+   
+   /**
+    * This method returns an array of <code>File</code> objects representing
+    * all the files in the directory represented by this object. If this
+    * object does not represent a directory, <code>null</code> is returned.
+    * Each of the returned <code>File</code> object is constructed with this
+    * object as its parent.
+    * <p> 
+    * In this form of the <code>listFiles()</code> method, a filter is specified
+    * that allows the caller to control which files are returned in the
+    * list.  The <code>FilenameFilter</code> specified is called for each
+    * file returned to determine whether or not that file should be included
+    * in the list.
+    * <p>
+    * A <code>SecurityManager</code> check is made prior to reading the
+    * directory.  If read access to the directory is denied, an exception
+    * will be thrown.
+    *
+    * @return An array of <code>File</code> objects for this directory.
+    *
+    * @exception SecurityException If the <code>SecurityManager</code> denies
+    * access to this directory.
+    *
+    * @since 1.2
+    */
+   public File[] listFiles(FilenameFilter filter)
+   {
+     String[] filelist = list(filter);
+     
+     if (filelist == null)
+       return null;
+ 
+     File[] fobjlist = new File [filelist.length];
+ 
+     for (int i = 0; i < filelist.length; i++)
+       fobjlist [i] = new File(this, filelist [i]);
+ 
+     return fobjlist;
+   }
+ 
+   /**
+    * This method returns an array of <code>File</code> objects representing
+    * all the files in the directory represented by this object. If this
+    * object does not represent a directory, <code>null</code> is returned.
+    * Each of the returned <code>File</code> object is constructed with this
+    * object as its parent.
+    * <p> 
+    * In this form of the <code>listFiles()</code> method, a filter is specified
+    * that allows the caller to control which files are returned in the
+    * list.  The <code>FileFilter</code> specified is called for each
+    * file returned to determine whether or not that file should be included
+    * in the list.
+    * <p>
+    * A <code>SecurityManager</code> check is made prior to reading the
+    * directory.  If read access to the directory is denied, an exception
+    * will be thrown.
+    *
+    * @return An array of <code>File</code> objects for this directory.
+    *
+    * @exception SecurityException If the <code>SecurityManager</code> denies
+    * access to this directory.
+    *
+    * @since 1.2
+    */
+   public File[] listFiles(FileFilter filter)
+   {
+     File[] fobjlist = listFiles((FilenameFilter) null);
+ 
+     if (fobjlist == null)
+       return null;
+ 
+     if (filter == null)
+       return fobjlist;
+ 
+     int count = 0;
+     for (int i = 0; i < fobjlist.length; i++)
+       if (filter.accept(fobjlist[i]) == true)
+         ++count;
+ 
+     File[] final_list = new File[count];
+     count = 0;
+     for (int i = 0; i < fobjlist.length; i++)
+       if (filter.accept(fobjlist[i]) == true)
+         {
+           final_list[count] = fobjlist[i];
+           ++count;
+         }
+ 
+     return final_list;
+   }
+ 
+   /**
+    * This method returns a <code>String</code> that is the path name of the
+    * file as returned by <code>getPath</code>.
+    *
+    * @return A <code>String</code> representation of this file
+    */
+   public String toString()
+   {
+     return path;
+   }
+ 
+   /**
+    * @return A <code>URI</code> for this object.
+    */
+   public URI toURI()
+   {
+     String abspath = getAbsolutePath();
+        
+     if (isDirectory() || path.equals(""))
+       abspath = abspath + separatorChar;
+ 
+     if (separatorChar == '\\')
+       abspath = separatorChar + abspath;
+         
+     try
+       {
+         return new URI("file", null, null, -1,
+                        abspath.replace(separatorChar, '/'),
+                        null, null);
+       }
+     catch (URISyntaxException use)
+       {
+         // Can't happen.
+         throw (InternalError) new InternalError("Unconvertible file: "
+ 						+ this).initCause(use);
+       }
+   }
+ 
+   /**
+    * This method returns a <code>URL</code> with the <code>file:</code>
+    * protocol that represents this file.  The exact form of this URL is
+    * system dependent.
+    *
+    * @return A <code>URL</code> for this object.
+    *
+    * @exception MalformedURLException If the URL cannot be created 
+    * successfully.
+    */
+   public URL toURL() throws MalformedURLException
+   {
+     // On Win32, Sun's JDK returns URLs of the form "file:/c:/foo/bar.txt",
+     // while on UNIX, it returns URLs of the form "file:/foo/bar.txt". 
+     if (separatorChar == '\\')
+       return new URL ("file:/" + getAbsolutePath().replace ('\\', '/')
+ 		      + (isDirectory() ? "/" : ""));
+     else
+       return new URL ("file:" + getAbsolutePath()
+ 		      + (isDirectory() ? "/" : ""));
+   }
+ 
+ 
+   /**
+    * This method creates a directory for the path represented by this object.
+    *
+    * @return <code>true</code> if the directory was created, 
+    * <code>false</code> otherwise
+    *
+    * @exception SecurityException If write access is not allowed to this file
+    */
+   public boolean mkdir()
+   {
+     checkWrite();
+     return VMFile.mkdir(path);
+   }
+ 
+   /**
+    * This method creates a directory for the path represented by this file.
+    * It will also create any intervening parent directories if necessary.
+    *
+    * @return <code>true</code> if the directory was created, 
+    * <code>false</code> otherwise
+    *
+    * @exception SecurityException If write access is not allowed to this file
+    */
+   public boolean mkdirs()
+   {
+     String parent = getParent();
+     if (parent == null)
+       {
+         return mkdir();
+       }
+       
+     File f = new File(parent);
+     if (!f.exists())
+       {
+         boolean rc = f.mkdirs();
+         if (rc == false)
+           return false;
+       }
+ 
+     return mkdir();
+   }
+ 
+   /**
+    * This method creates a temporary file in the specified directory.  If 
+    * the directory name is null, then this method uses the system temporary 
+    * directory. The files created are guaranteed not to currently exist and 
+    * the same file name will never be used twice in the same virtual 
+    * machine instance.  
+    * The system temporary directory is determined by examinging the 
+    * <code>java.io.tmpdir</code> system property.
+    * <p>
+    * The <code>prefix</code> parameter is a sequence of at least three
+    * characters that are used as the start of the generated filename.  The
+    * <code>suffix</code> parameter is a sequence of characters that is used
+    * to terminate the file name.  This parameter may be <code>null</code>
+    * and if it is, the suffix defaults to ".tmp".
+    * <p>
+    * If a <code>SecurityManager</code> exists, then its <code>checkWrite</code>
+    * method is used to verify that this operation is permitted.
+    *
+    * @param prefix The character prefix to use in generating the path name.
+    * @param suffix The character suffix to use in generating the path name.
+    * @param directory The directory to create the file in, or 
+    * <code>null</code> for the default temporary directory
+    *
+    * @exception IllegalArgumentException If the patterns is not valid
+    * @exception SecurityException If there is no permission to perform 
+    * this operation
+    * @exception IOException If an error occurs
+    *
+    * @since 1.2
+    */
+   public static synchronized File createTempFile(String prefix, String suffix,
+ 				    File directory)
+     throws IOException
+   {
+     // Grab the system temp directory if necessary
+     if (directory == null)
+       {
+         String dirname = System.getProperty("java.io.tmpdir");
+         if (dirname == null)
+           throw new IOException("Cannot determine system temporary directory"); 
+ 	
+         directory = new File(dirname);
+         if (! VMFile.exists(directory.path))
+           throw new IOException("System temporary directory "
+                                 + directory.getName() + " does not exist.");
+         if (! VMFile.isDirectory(directory.path))
+           throw new IOException("System temporary directory "
+                                 + directory.getName()
+                                 + " is not really a directory.");
+       }
+ 
+     // Check if prefix is at least 3 characters long
+     if (prefix.length() < 3)
+       throw new IllegalArgumentException("Prefix too short: " + prefix);
+ 
+     // Set default value of suffix
+     if (suffix == null)
+       suffix = ".tmp";
+ 
+     // Now identify a file name and make sure it doesn't exist.
+     File file;
+     if (!VMFile.IS_DOS_8_3)
+       { 
+         do
+           {
+             long now = System.currentTimeMillis();
+             if (now > last_tmp)
+               {
+                 // The last temporary file was created more than 1 ms ago.
+                 last_tmp = now;
+                 n_created = 0;
+               }
+             else
+               n_created++;
+             
+             String name = Long.toHexString(now);
+             if (n_created > 0)
+               name += '_'+Integer.toHexString(n_created);
+             String filename = prefix + name + suffix;
+             file = new File(directory, filename);
+           }
+         while (VMFile.exists(file.path));
+       }
+     else
+       {
+         // make sure prefix is not longer than 7 characters
+         if (prefix.length() >= 8)
+           throw new IllegalArgumentException("Prefix too long: " + prefix + "(valid length 3..7)");
+ 
+         long mask = 0x000000ffffFFFFL >> (prefix.length() * 4);
+         do
+           {
+             int n = (int) (System.currentTimeMillis() & mask);
+             String filename = prefix + java.lang.Integer.toHexString(n) + suffix;
+             file = new File(directory, filename);
+           }
+         while (VMFile.exists(file.path));
+       }
+ 
+     // Verify that we are allowed to create this file
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkWrite(file.getAbsolutePath());
+ 
+     // Now create the file and return our file object
+     // XXX - FIXME race condition.
+     VMFile.create(file.getAbsolutePath()); 
+     return file;
+   }
+ 
+   /**
+    * This method sets the file represented by this object to be read only.
+    * A read only file or directory cannot be modified.  Please note that 
+    * GNU systems allow read only files to be deleted if the directory it
+    * is contained in is writable.
+    *
+    * @return <code>true</code> if the operation succeeded, <code>false</code>
+    * otherwise.
+    *
+    * @exception SecurityException If the <code>SecurityManager</code> does
+    * not allow this operation.
+    *
+    * @since 1.2
+    */
+   public boolean setReadOnly()
+   {
+     // Do a security check before trying to do anything else.
+     checkWrite();
+ 
+     // Test for existence.
+     if (! VMFile.exists(path))
+       return false;
+ 
+     return VMFile.setReadOnly(path);
+   }
+ 
+   /**
+    * This method returns an array of filesystem roots.  Some operating systems
+    * have volume oriented filesystem.  This method provides a mechanism for
+    * determining which volumes exist.  GNU systems use a single hierarchical
+    * filesystem, so will have only one "/" filesystem root.
+    *
+    * @return An array of <code>File</code> objects for each filesystem root
+    * available.
+    *
+    * @since 1.2
+    */
+   public static File[] listRoots()
+   {
+     return VMFile.listRoots();
+   }
+ 
+   /**
+    * This method creates a temporary file in the system temporary directory. 
+    * The files created are guaranteed not to currently exist and the same file
+    * name will never be used twice in the same virtual machine instance.  The
+    * system temporary directory is determined by examinging the 
+    * <code>java.io.tmpdir</code> system property.
+    * <p>
+    * The <code>prefix</code> parameter is a sequence of at least three
+    * characters that are used as the start of the generated filename.  The
+    * <code>suffix</code> parameter is a sequence of characters that is used
+    * to terminate the file name.  This parameter may be <code>null</code>
+    * and if it is, the suffix defaults to ".tmp".
+    * <p>
+    * If a <code>SecurityManager</code> exists, then its <code>checkWrite</code>
+    * method is used to verify that this operation is permitted.
+    * <p>
+    * This method is identical to calling 
+    * <code>createTempFile(prefix, suffix, null)</code>.
+    *
+    * @param prefix The character prefix to use in generating the path name.
+    * @param suffix The character suffix to use in generating the path name.
+    *
+    * @exception IllegalArgumentException If the prefix or suffix are not valid.
+    * @exception SecurityException If there is no permission to perform 
+    * this operation
+    * @exception IOException If an error occurs
+    */
+   public static File createTempFile(String prefix, String suffix)
+     throws IOException
+   {
+     return createTempFile(prefix, suffix, null);
+   }
+ 
+   /**
+    * This method compares the specified <code>File</code> to this one
+    * to test for equality.  It does this by comparing the canonical path names
+    * of the files. 
+    * <p>
+    * The canonical paths of the files are determined by calling the
+    * <code>getCanonicalPath</code> method on each object.
+    * <p>
+    * This method returns a 0 if the specified <code>Object</code> is equal
+    * to this one, a negative value if it is less than this one 
+    * a positive value if it is greater than this one.
+    *
+    * @return An integer as described above
+    *
+    * @since 1.2
+    */
+   public int compareTo(File other)
+   {
+     if (VMFile.IS_CASE_SENSITIVE)
+       return path.compareTo (other.path);
+     else
+       return path.compareToIgnoreCase (other.path);
+   }
+ 
+   /**
+    * This method compares the specified <code>Object</code> to this one
+    * to test for equality.  It does this by comparing the canonical path names
+    * of the files.  This method is identical to <code>compareTo(File)</code>
+    * except that if the <code>Object</code> passed to it is not a 
+    * <code>File</code>, it throws a <code>ClassCastException</code>
+    * <p>
+    * The canonical paths of the files are determined by calling the
+    * <code>getCanonicalPath</code> method on each object.
+    * <p>
+    * This method returns a 0 if the specified <code>Object</code> is equal
+    * to this one, a negative value if it is less than this one 
+    * a positive value if it is greater than this one.
+    *
+    * @return An integer as described above
+    *
+    * @exception ClassCastException If the passed <code>Object</code> is 
+    * not a <code>File</code>
+    *
+    * @since 1.2
+    */
+   public int compareTo(Object obj)
+   {
+     return compareTo((File) obj);
+   }
+ 
+   /**
+    * This method renames the file represented by this object to the path
+    * of the file represented by the argument <code>File</code>.
+    *
+    * @param dest The <code>File</code> object representing the target name
+    *
+    * @return <code>true</code> if the rename succeeds, <code>false</code> 
+    * otherwise.
+    *
+    * @exception SecurityException If write access is not allowed to the 
+    * file by the <code>SecurityMananger</code>.
+    */
+   public synchronized boolean renameTo(File dest)
+   {
+     checkWrite();
+     dest.checkWrite();
+     // Call our native rename method
+     return VMFile.renameTo(path, dest.path);
+   }
+ 
+   /**
+    * This method sets the modification time on the file to the specified
+    * value.  This is specified as the number of seconds since midnight
+    * on January 1, 1970 GMT.
+    *
+    * @param time The desired modification time.
+    *
+    * @return <code>true</code> if the operation succeeded, <code>false</code>
+    * otherwise.
+    *
+    * @exception IllegalArgumentException If the specified time is negative.
+    * @exception SecurityException If the <code>SecurityManager</code> will
+    * not allow this operation.
+    *
+    * @since 1.2
+    */
+   public boolean setLastModified(long time) 
+   {
+     if (time < 0)
+       throw new IllegalArgumentException("Negative modification time: " + time);
+ 
+     checkWrite();
+     return VMFile.setLastModified(path, time);
+   }
+ 
+   private void checkWrite()
+   {
+     // Check the SecurityManager
+     SecurityManager s = System.getSecurityManager();
+     
+     if (s != null)
+       s.checkWrite(path);
+   }
+ 
+   private void checkRead()
+   {
+     // Check the SecurityManager
+     SecurityManager s = System.getSecurityManager();
+     
+     if (s != null)
+       s.checkRead(path);
+   }
+ 
+   /** 
+    * Calling this method requests that the file represented by this object
+    * be deleted when the virtual machine exits.  Note that this request cannot
+    * be cancelled.  Also, it will only be carried out if the virtual machine
+    * exits normally.
+    *
+    * @exception SecurityException If deleting of the file is not allowed
+    *
+    * @since 1.2 
+    */
+   public void deleteOnExit()
+   {
+     // Check the SecurityManager
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkDelete(path);
+ 
+     DeleteFileHelper.add(this);
+   }
+ 
+   private void writeObject(ObjectOutputStream oos) throws IOException
+   {
+     oos.defaultWriteObject();
+     oos.writeChar(separatorChar);
+   }
+ 
+   private void readObject(ObjectInputStream ois)
+     throws ClassNotFoundException, IOException
+   {
+     ois.defaultReadObject();
+ 
+     // If the file was from an OS with a different dir separator,
+     // fixup the path to use the separator on this OS.
+     char oldSeparatorChar = ois.readChar();
+     
+     if (oldSeparatorChar != separatorChar)
+       path = path.replace(oldSeparatorChar, separatorChar);
+   }
+   
+ } // class File
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FileDescriptor.java gcc-4.1.0/libjava/classpath/java/io/FileDescriptor.java
*** gcc-4.0.2/libjava/classpath/java/io/FileDescriptor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FileDescriptor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,139 ----
+ /* FileDescriptor.java -- Opaque file handle class
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.nio.channels.FileChannelImpl;
+ 
+ import java.nio.channels.ByteChannel;
+ import java.nio.channels.FileChannel;
+ 
+ /**
+  * This class represents an opaque file handle as a Java class.  It should
+  * be used only to pass to other methods that expect an object of this
+  * type.  No system specific information can be obtained from this object.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @date September 24, 1998 
+  */
+ public final class FileDescriptor
+ {
+   /**
+    * A <code>FileDescriptor</code> representing the system standard input
+    * stream.  This will usually be accessed through the
+    * <code>System.in</code>variable.
+    */
+   public static final FileDescriptor in
+   = new FileDescriptor (FileChannelImpl.in);
+ 
+   /**
+    * A <code>FileDescriptor</code> representing the system standard output
+    * stream.  This will usually be accessed through the
+    * <code>System.out</code>variable.
+    */
+   public static final FileDescriptor out
+   = new FileDescriptor (FileChannelImpl.out);
+ 
+   /**
+    * A <code>FileDescriptor</code> representing the system standard error
+    * stream.  This will usually be accessed through the
+    * <code>System.err</code>variable.
+    */
+   public static final FileDescriptor err
+   = new FileDescriptor (FileChannelImpl.err);
+ 
+   final ByteChannel channel;
+ 
+   /**
+    * This method is used to initialize an invalid FileDescriptor object.
+    */
+   public FileDescriptor()
+   {
+     channel = null;
+   }
+ 
+   /**
+    * This method is used to initialize a FileDescriptor object.
+    */
+   FileDescriptor(ByteChannel channel)
+   {
+     this.channel = channel;
+   }
+ 
+ 
+   /**
+    * This method forces all data that has not yet been physically written to
+    * the underlying storage medium associated with this 
+    * <code>FileDescriptor</code>
+    * to be written out.  This method will not return until all data has
+    * been fully written to the underlying device.  If the device does not
+    * support this functionality or if an error occurs, then an exception
+    * will be thrown.
+    */
+   public void sync () throws SyncFailedException
+   {
+     if (channel instanceof FileChannel)
+       {
+ 	try
+ 	  {
+ 	    ((FileChannel) channel).force(true); 
+ 	  }
+ 	catch (IOException ex)
+ 	  {
+ 	    if (ex instanceof SyncFailedException)
+ 	      throw (SyncFailedException) ex;
+ 	    else
+ 	      throw new SyncFailedException(ex.toString());
+ 	  }
+       }
+   }
+ 
+   /**
+    * This methods tests whether or not this object represents a valid open
+    * native file handle.
+    *
+    * @return <code>true</code> if this object represents a valid 
+    * native file handle, <code>false</code> otherwise
+    */
+   public boolean valid ()
+   {
+     return channel != null && channel.isOpen();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FileFilter.java gcc-4.1.0/libjava/classpath/java/io/FileFilter.java
*** gcc-4.0.2/libjava/classpath/java/io/FileFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FileFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* FileFilter.java -- Filter a list of pathnames
+    Copyright (C) 1998,2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This interface has one method which is used for filtering pathnames
+  * returned in a pathname listing.  It is currently used by the 
+  * <code>File.listFiles(FileFilter)</code> method.
+  * <p>
+  * The method in this interface determines if a particular pathname should
+  * or should not be included in the pathname listing.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * 
+  * @see File#listFiles(java.io.FileFilter)
+  */
+ public interface FileFilter
+ {
+   /**
+    * This method determines whether or not a given pathname should be included
+    * in a pathname listing.
+    *
+    * @param pathname The pathname to test
+    *
+    * @return <code>true</code> if the path should be included in the list, 
+    * <code>false</code> otherwise.
+    */
+   boolean accept(File pathname);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FileInputStream.java gcc-4.1.0/libjava/classpath/java/io/FileInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/FileInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FileInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,309 ----
+ /* FileInputStream.java -- An input stream that reads from disk files.
+    Copyright (C) 1998, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.nio.channels.FileChannelImpl;
+ 
+ import java.nio.channels.FileChannel;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+  
+ /**
+  * This class is a stream that reads its bytes from a file. 
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public class FileInputStream extends InputStream
+ {
+   /**
+    * This is the native file handle for the file this stream is reading from
+    */
+   private FileDescriptor fd;
+ 
+   private FileChannelImpl ch;
+ 
+   /**
+    * This method initializes a <code>FileInputStream</code> to read from the
+    * specified named file.  A security check is first made to determine
+    * whether or not access to this file is allowed.  This is done by
+    * calling the <code>checkRead()</code> method of the 
+    * <code>SecurityManager</code>
+    * (if one exists) with the name of this file.  An exception is thrown
+    * if reading is not allowed.  If the file does not exist, an exception
+    * is also thrown.
+    *
+    * @param name The name of the file this stream should read from
+    *
+    * @exception SecurityException If read access to the file is not allowed
+    * @exception FileNotFoundException If the file does not exist 
+    * or if it is a directory
+    */
+   public FileInputStream(String name) throws FileNotFoundException
+   {
+     this(new File(name));
+   }
+ 
+   /**
+    * This method initializes a <code>FileInputStream</code> to read from the
+    * specified <code>File</code> object.  A security check is first
+    * made to determine
+    * whether or not access to this file is allowed.  This is done by
+    * calling the <code>checkRead()</code> method of the
+    * <code>SecurityManager</code>
+    * (if one exists) with the name of this file.  An exception is thrown
+    * if reading is not allowed.  If the file does not exist, an exception
+    * is also thrown.
+    *
+    * @param file The <code>File</code> object this stream should read from
+    *
+    * @exception SecurityException If read access to the file is not allowed
+    * @exception FileNotFoundException If the file does not exist
+    * or if it is a directory.
+    */
+   public FileInputStream(File file) throws FileNotFoundException
+   {
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkRead(file.getPath());
+ 
+     ch = FileChannelImpl.create(file, FileChannelImpl.READ);
+   }
+ 
+   /**
+    * This method initializes a <code>FileInputStream</code> to read from the
+    * specified <code>FileDescriptor</code> object.  A security
+    * check is first made to
+    * determine whether or not access to this file is allowed.  This is done by
+    * calling the <code>checkRead()</code> method of the 
+    * <code>SecurityManager</code>
+    * (if one exists) with the specified <code>FileDescriptor</code>  
+    * An exception is 
+    * thrown if reading is not allowed.
+    *
+    * @param fdObj The <code>FileDescriptor</code> object this stream 
+    * should read from
+    *
+    * @exception SecurityException If read access to the file is not allowed
+    */
+   public FileInputStream(FileDescriptor fdObj)
+   {
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkRead(fdObj);
+ 
+     fd = fdObj;
+     ch = (FileChannelImpl) fdObj.channel;
+   }
+ 
+   FileInputStream(FileChannelImpl ch)
+   {
+     this.ch = ch;
+   }
+ 
+   /**
+    * This method returns the number of bytes that can be read from this
+    * stream before a read can block.  A return of 0 indicates that blocking
+    * might (or might not) occur on the very next read attempt.
+    * <p>
+    * This method returns the number of unread bytes remaining in the file if
+    * the descriptor being read from is an actual file.  If this method is
+    * reading from a ''special'' file such a the standard input, this method
+    * will return the appropriate value for the stream being read.
+    * <p>
+    * Be aware that reads on plain files that do not reside locally might
+    * possibly block even if this method says they should not.  For example,
+    * a remote server might crash, preventing an NFS mounted file from being
+    * read.
+    *
+    * @return The number of bytes that can be read before blocking could occur
+    *
+    * @exception IOException If an error occurs
+    */
+   public int available() throws IOException
+   {
+     return ch.available();
+   }
+ 
+   /**
+    * This method closes the stream.  Any futher attempts to read from the
+    * stream will likely generate an IOException since the underlying file
+    * will be closed.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public void close() throws IOException
+   {
+     ch.close();
+   }
+ 
+   protected void finalize() throws IOException
+   {
+     // We don't actually need this, but we include it because it is
+     // mentioned in the JCL.
+   }
+ 
+   /**
+    * This method returns a <code>FileDescriptor</code> object representing the
+    * underlying native file handle of the file this stream is reading
+    * from
+    *
+    * @return A <code>FileDescriptor</code> for this stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public final FileDescriptor getFD() throws IOException
+   {
+     synchronized (this)
+       {
+ 	if (fd == null)
+ 	  fd = new FileDescriptor (ch);
+ 	return fd;
+       }
+   }
+ 
+   /**
+    * This method reads an unsigned byte from the input stream and returns it
+    * as an int in the range of 0-255.  This method also will return -1 if
+    * the end of the stream has been reached.
+    * <p>
+    * This method will block until the byte can be read.
+    *
+    * @return The byte read or -1 if end of stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public int read() throws IOException
+   {
+     return ch.read();
+   }
+ 
+   /**
+    * This method reads bytes from a stream and stores them into a caller
+    * supplied buffer.  This method attempts to completely fill the buffer,
+    * but can return before doing so.  The actual number of bytes read is
+    * returned as an int.  A -1 is returned to indicate the end of the stream.
+    * <p>
+    * This method will block until some data can be read.
+    * <p>
+    * This method operates by calling an overloaded read method like so:
+    * <code>read(buf, 0, buf.length)</code>
+    *
+    * @param buf The buffer into which the bytes read will be stored.
+    *
+    * @return The number of bytes read or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public int read(byte[] buf) throws IOException
+   {
+     return read(buf, 0, buf.length);
+   }
+ 
+   /**
+    * This method read bytes from a stream and stores them into a caller
+    * supplied buffer.  It starts storing the data at index 
+    * <code>offset</code> into
+    * the buffer and attempts to read <code>len</code> bytes.  This method can
+    * return before reading the number of bytes requested.  The actual number
+    * of bytes read is returned as an int.  A -1 is returned to indicate the
+    * end of the stream.
+    * <p>
+    * This method will block until some data can be read.
+    *
+    * @param buf The array into which the bytes read should be stored
+    * @param offset The offset into the array to start storing bytes
+    * @param len The requested number of bytes to read
+    *
+    * @return The actual number of bytes read, or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public int read(byte[] buf, int offset, int len) throws IOException
+   {
+     if (offset < 0
+         || len < 0
+         || offset + len > buf.length)
+       throw new ArrayIndexOutOfBoundsException();
+ 
+     return ch.read(buf, offset, len);
+   }
+ 
+   /**
+    * This method skips the specified number of bytes in the stream.  It
+    * returns the actual number of bytes skipped, which may be less than the
+    * requested amount.
+    * <p>
+    * @param numBytes The requested number of bytes to skip
+    *
+    * @return The actual number of bytes skipped.
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized long skip (long numBytes) throws IOException
+   {
+     if (numBytes < 0)
+       throw new IllegalArgumentException ("Can't skip negative bytes: " + 
+                                           numBytes);
+ 
+     if (numBytes == 0)
+       return 0;
+ 
+     long oldPos = ch.position ();
+     ch.position(oldPos + numBytes);
+     return ch.position() - oldPos;
+   }
+ 
+   /**
+    * This method creates a java.nio.channels.FileChannel.
+    * Nio does not allow one to create a file channel directly.
+    * A file channel must be created by first creating an instance of
+    * Input/Output/RandomAccessFile and invoking the getChannel() method on it.
+    */
+   public synchronized FileChannel getChannel () 
+   {
+     return ch;
+   }
+ 
+ } // class FileInputStream
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FileNotFoundException.java gcc-4.1.0/libjava/classpath/java/io/FileNotFoundException.java
*** gcc-4.0.2/libjava/classpath/java/io/FileNotFoundException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FileNotFoundException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* FileNotFoundException.java -- the requested file could not be found
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when an attempt is made to access a file that
+  * does not exist, or is inaccessible for some other reason (such as writing
+  * a read-only file).
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class FileNotFoundException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -897856973823710492L;
+ 
+   /**
+    * Create an exception without a descriptive error message.
+    */
+   public FileNotFoundException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public FileNotFoundException(String message)
+   {
+     super(message);
+   }
+ } // class FileNotFoundException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FileOutputStream.java gcc-4.1.0/libjava/classpath/java/io/FileOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/FileOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FileOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,296 ----
+ /* FileOutputStream.java -- Writes to a file on disk.
+    Copyright (C) 1998, 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.nio.channels.FileChannelImpl;
+ 
+ import java.nio.channels.FileChannel;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to version 1.1.
+  */
+ 
+ /**
+  * This classes allows a stream of data to be written to a disk file or
+  * any open <code>FileDescriptor</code>.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  */
+ public class FileOutputStream extends OutputStream
+ {
+   private FileDescriptor fd;
+ 
+   private FileChannelImpl ch;
+ 
+   /**
+    * This method initializes a <code>FileOutputStream</code> object to write
+    * to the named file.  The file is created if it does not exist, and
+    * the bytes written are written starting at the beginning of the file if
+    * the <code>append</code> argument is <code>false</code> or at the end
+    * of the file if the <code>append</code> argument is true.
+    * <p>
+    * Before opening a file, a security check is performed by calling the
+    * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+    * one exists) with the name of the file to be opened.  An exception is
+    * thrown if writing is not allowed. 
+    *
+    * @param path The name of the file this stream should write to
+    * @param append <code>true</code> to append bytes to the end of the file,
+    * or <code>false</code> to write bytes to the beginning
+    *
+    * @exception SecurityException If write access to the file is not allowed
+    * @exception FileNotFoundException If a non-security error occurs
+    */
+   public FileOutputStream (String path, boolean append)
+     throws SecurityException, FileNotFoundException
+   {
+     this (new File(path), append);
+   }
+ 
+   /**
+    * This method initializes a <code>FileOutputStream</code> object to write
+    * to the named file.  The file is created if it does not exist, and
+    * the bytes written are written starting at the beginning of the file.
+    * <p>
+    * Before opening a file, a security check is performed by calling the
+    * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+    * one exists) with the name of the file to be opened.  An exception is
+    * thrown if writing is not allowed. 
+    *
+    * @param path The name of the file this stream should write to
+    *
+    * @exception SecurityException If write access to the file is not allowed
+    * @exception FileNotFoundException If a non-security error occurs
+    */
+   public FileOutputStream (String path)
+     throws SecurityException, FileNotFoundException
+   {
+     this (path, false);
+   }
+ 
+   /**
+    * This method initializes a <code>FileOutputStream</code> object to write
+    * to the specified <code>File</code> object.  The file is created if it 
+    * does not exist, and the bytes written are written starting at the 
+    * beginning of the file.
+    * <p>
+    * Before opening a file, a security check is performed by calling the
+    * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+    * one exists) with the name of the file to be opened.  An exception is
+    * thrown if writing is not allowed. 
+    *
+    * @param file The <code>File</code> object this stream should write to
+    *
+    * @exception SecurityException If write access to the file is not allowed
+    * @exception FileNotFoundException If a non-security error occurs
+    */
+   public FileOutputStream (File file)
+     throws SecurityException, FileNotFoundException
+   {
+     this (file, false);
+   }
+ 
+   /**
+    * This method initializes a <code>FileOutputStream</code> object to write
+    * to the specified <code>File</code> object.  The file is created if it 
+    * does not exist, and the bytes written are written starting at the 
+    * beginning of the file if the <code>append</code> parameter is 
+    * <code>false</code>.  Otherwise bytes are written at the end of the
+    * file.
+    * <p>
+    * Before opening a file, a security check is performed by calling the
+    * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+    * one exists) with the name of the file to be opened.  An exception is
+    * thrown if writing is not allowed. 
+    *
+    * @param file The <code>File</code> object this stream should write to
+    * @param append <code>true</code> to append bytes to the end of the file,
+    * or <code>false</code> to write bytes to the beginning
+    *
+    * @exception SecurityException If write access to the file is not allowed
+    * @exception FileNotFoundException If a non-security error occurs
+    */
+   public FileOutputStream (File file, boolean append)
+     throws FileNotFoundException
+   {
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkWrite(file.getPath());
+ 
+    ch = FileChannelImpl.create(file, (append
+ 				    ? FileChannelImpl.WRITE
+ 				    | FileChannelImpl.APPEND
+ 				    : FileChannelImpl.WRITE));
+   }
+ 
+   /**
+    * This method initializes a <code>FileOutputStream</code> object to write
+    * to the file represented by the specified <code>FileDescriptor</code>
+    * object.  This method does not create any underlying disk file or
+    * reposition the file pointer of the given descriptor.  It assumes that
+    * this descriptor is ready for writing as is.
+    * <p>
+    * Before opening a file, a security check is performed by calling the
+    * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+    * one exists) with the specified <code>FileDescriptor</code> as an argument.
+    * An exception is thrown if writing is not allowed. 
+    *
+    * @param fdObj The <code>FileDescriptor</code> this stream should write to
+    *
+    * @exception SecurityException If write access to the file is not allowed
+    */
+   public FileOutputStream (FileDescriptor fdObj)
+     throws SecurityException
+   {
+     // Hmm, no other exception but this one to throw, but if the descriptor
+     // isn't valid, we surely don't have "permission" to write to it.
+     if (!fdObj.valid())
+       throw new SecurityException("Invalid FileDescriptor");
+ 
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkWrite(fdObj);
+ 
+     fd = fdObj;
+     ch = (FileChannelImpl) fdObj.channel;
+   }
+ 
+   FileOutputStream(FileChannelImpl ch)
+   {
+     this.ch = ch;
+   }
+ 
+   protected void finalize () throws IOException
+   {
+     // We don't actually need this, but we include it because it is
+     // mentioned in the JCL.
+   }
+ 
+   /**
+    * This method returns a <code>FileDescriptor</code> object representing
+    * the file that is currently being written to
+    *
+    * @return A <code>FileDescriptor</code> object for this stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public final FileDescriptor getFD () throws IOException
+   {
+     synchronized (this)
+       {
+ 	if (fd == null)
+ 	  fd = new FileDescriptor (ch);
+ 	return fd;
+       }
+   }
+ 
+   /**
+    * This method writes a single byte of data to the file.  
+    *
+    * @param b The byte of data to write, passed as an <code>int</code>
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (int b) throws IOException
+   {
+     ch.write (b);
+   }
+ 
+   /**
+    * This method writes all the bytes in the specified array to the
+    * file.
+    *
+    * @param buf The array of bytes to write to the file
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (byte[] buf)
+     throws IOException
+   {
+     write (buf, 0, buf.length);
+   }
+ 
+   /**
+    * This method writes <code>len</code> bytes from the byte array 
+    * <code>buf</code> to the file starting at index <code>offset</code>.
+    *
+    * @param buf The array of bytes to write to the file
+    * @param offset The offset into the array to start writing bytes from
+    * @param len The number of bytes to write to the file
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (byte[] buf, int offset, int len)
+     throws IOException
+   {
+     if (offset < 0
+         || len < 0
+         || offset + len > buf.length)
+       throw new ArrayIndexOutOfBoundsException ();
+     
+     ch.write (buf, offset, len);
+   }
+ 
+   /**
+    * This method closes the underlying file.  Any further attempts to
+    * write to this stream will likely generate an exception since the
+    * file is closed.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void close () throws IOException
+   {
+     ch.close();
+   }
+ 
+   /**
+    * This method creates a java.nio.channels.FileChannel.
+    * Nio does not allow one to create a file channel directly.
+    * A file channel must be created by first creating an instance of
+    * Input/Output/RandomAccessFile and invoking the getChannel() method on it.
+    */
+   public synchronized FileChannel getChannel() 
+   {
+     return ch;
+   }
+ 
+ } // class FileOutputStream
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FilePermission.java gcc-4.1.0/libjava/classpath/java/io/FilePermission.java
*** gcc-4.0.2/libjava/classpath/java/io/FilePermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FilePermission.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,292 ----
+ /* FilePermission.java --
+    Copyright (C) 1998, 2000, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import java.security.Permission;
+ 
+ public final class FilePermission extends Permission implements Serializable
+ {
+   private static final long serialVersionUID = 7930732926638008763L;
+ 
+   private static final String CURRENT_DIRECTORY = 
+     System.getProperty("user.dir");
+ 
+   private static final String ALL_FILES = "<<ALL FILES>>";
+ 
+   private boolean readPerm = false;
+   private boolean writePerm = false;
+   private boolean executePerm = false;
+   private boolean deletePerm = false;
+   private final String actionsString;
+ 
+   // Checks and caches the actions
+   private void checkPerms() throws IllegalArgumentException
+   {
+     String action;
+     int i = actionsString.indexOf(',');
+     int startI = 0;
+     while (i != -1) 
+       {
+         action = actionsString.substring(startI, i).trim().toLowerCase();
+         if (action.equals("read"))
+           readPerm = true;
+         else if (action.equals("write"))
+           writePerm = true;
+         else if (action.equals("execute"))
+           executePerm = true;
+         else if (action.equals("delete"))
+           deletePerm = true;
+ 	else
+ 	  throw new IllegalArgumentException("Unknown action: " + action);
+       
+         startI = i + 1;
+         i = actionsString.indexOf(',', startI);
+       }
+ 
+     action = actionsString.substring(startI).trim().toLowerCase();
+     if (action.equals("read"))
+       readPerm = true;
+     else if (action.equals("write"))
+       writePerm = true;
+     else if (action.equals("execute"))
+       executePerm = true;
+     else if (action.equals("delete"))
+       deletePerm = true;
+     else
+       throw new IllegalArgumentException("Unknown action: " + action);
+   }
+ 
+   /**
+    * Create a new FilePermission.
+    *
+    * @param pathExpression an expression specifying the paths this
+    *        permission represents.
+    * @param actionsString a comma-separated list of the actions this
+    *        permission represents. The actions must be "read", "write",
+    *        "execute" and/or "delete".
+    */
+   public FilePermission(String pathExpression, String actionsString) 
+   {
+     // FIXME: what to do when the file string is malformed?
+     super(pathExpression);
+     if (pathExpression == null)
+       throw new NullPointerException("pathExpression");
+     if (actionsString == null)
+       throw new IllegalArgumentException("actionsString");
+     this.actionsString = actionsString;
+     checkPerms();
+   }
+   
+   /**
+    * Get the actions this FilePermission supports.
+    * @return the String representing the actions this FilePermission supports.
+    */
+   public String getActions() 
+   {
+     return actionsString;
+   }
+ 
+   /**
+    * Get the hash code for this Object.<P>
+    * FilePermission's hash code is calculated as the exclusive or of the 
+    * target
+    * String's hash code and the action String's hash code.
+    * @specnote Sun did not specify how to calculate the hash code; 
+    * I made this up.
+    * @return the hash code for this Object.
+    */
+   public int hashCode() 
+   {
+     return getName().hashCode() ^ actionsString.hashCode();
+   }
+ 
+   /**
+    * Check two FilePermissions for semantic equality.
+    * Two FilePermissions are exactly equivalent if they have identical path
+    * expressions and have exactly the same access permissions.
+    * @param o the Object to compare to.
+    * @return whether the Objects are semantically equivalent.
+    */
+   public boolean equals(Object o) 
+   {
+     if (! (o instanceof FilePermission))
+       return false;
+     FilePermission p = (FilePermission) o;
+ 
+     String f1 = getName();
+     String f2 = p.getName();
+ 
+     // Compare names, taking into account if they refer to a directory
+     // and one has a separator and the other does not.
+     if (f1.length() > 0 && f1.charAt(f1.length() - 1) == File.separatorChar) 
+       {
+         if (f2.length() > 0
+ 	    && f2.charAt(f2.length() - 1) == File.separatorChar) 
+           {
+ 	    if (! f2.equals(f1))
+ 	      return false;
+           }
+         else
+           {
+ 	    if (! f2.equals(f1.substring(0, f1.length() - 1)))
+ 	      return false;
+           }
+       }
+     else
+       {
+         if (f2.length() > 0
+ 	    && f2.charAt(f2.length() - 1) == File.separatorChar)
+           {
+ 	    if (! f1.equals(f2.substring(0, f2.length() - 1)))
+ 	      return false;
+           }
+         else
+           {
+ 	    if (! f1.equals(f2))
+ 	      return false;
+           }
+       }
+     return (readPerm == p.readPerm
+ 	    && writePerm == p.writePerm
+ 	    && executePerm == p.executePerm
+ 	    && deletePerm == p.deletePerm);
+   }
+ 
+   /**
+    * Check to see if this permission implies another.
+    * Permission A implies permission B if these things are all true:
+    * <OL>
+    * <LI>A and B are both FilePermissions.</LI>
+    * <LI>All possible files in B are included in A 
+    * (possibly more are in A).</LI>
+    * <LI>All actions B supports, A also supports.</LI>
+    * </OL>
+    * @param p the Permission to compare against.
+    * @return whether this Permission implies p
+    */
+   public boolean implies(Permission p) 
+   {
+     if (! (p instanceof FilePermission))
+       return false;
+ 
+     String f1 = getName();
+ 
+     if (f1.equals(ALL_FILES))
+       return true;
+     
+     FilePermission fp = (FilePermission) p;
+     String f2 = fp.getName();
+ 
+     if (f1.charAt(0) != File.separatorChar)
+       f1 = CURRENT_DIRECTORY + f1;
+     if (f2.charAt(0) != File.separatorChar)
+       f2 = CURRENT_DIRECTORY + f2;
+ 
+     String sub1;
+ 
+     switch (f1.charAt(f1.length() - 1))
+       {
+       case '*':
+ 	sub1 = f1.substring(0, f1.length() - 1); // chop off "*"
+ 	if (f2.length() <= sub1.length())
+ 	  {
+ 	    // If it's smaller, there is no way it could be part of
+ 	    // this directory.  If it's the same (or length - 1), it
+ 	    // could be the same directory but specifies access to
+ 	    // the directory rather than the files in it.
+ 	    return false;
+ 	  } 
+ 	else if (f2.charAt(sub1.length() - 1) == File.separatorChar)
+ 	  {
+ 	    // Make sure the part before the "/" is the same.
+ 	    if (! f2.substring(0, sub1.length()).equals(sub1))
+ 	      return false;
+ 	    // Make sure there are no subdirectories specified
+ 	    // underneath this one.
+ 	    if (f2.substring(sub1.length() + 1).indexOf(File.separatorChar)
+ 		!= -1)
+ 	      return false;
+ 	  }
+ 	else
+ 	  {
+ 	    // Obviously not equal: f2 is either not a directory or
+ 	    // is not the same directory (its name continues further
+ 	    // than we want).
+ 	    return false;
+ 	  }
+ 	break;
+       case '-':
+ 	// Chop off "/-".
+ 	sub1 = f1.substring(0, f1.length() - 2);
+ 	if (f2.length() < sub1.length())
+ 	  {
+ 	    // If it's smaller, there is no way it could be part of
+ 	    // this directory.
+ 	    return false;
+ 	  }
+ 	else if (f2.length() > sub1.length()
+ 		 && f2.charAt(sub1.length()) != File.separatorChar)
+ 	  return false;
+ 	else if (! f2.substring(0, sub1.length()).equals(sub1))
+ 	  return false;
+ 	break;
+ 
+       default:
+ 	if (f2.charAt(f2.length() - 1) == File.separatorChar)
+ 	  {
+ 	    if (! f1.equals(f2.substring(0, f2.length() - 1)))
+ 	      return false;
+ 	  }
+ 	else if (!f1.equals(f2))
+ 	  return false;
+ 	break;
+       }
+ 
+     if (fp.readPerm && ! readPerm)
+       return false;
+     if (fp.writePerm && ! writePerm)
+       return false;
+     if (fp.executePerm && ! executePerm)
+       return false;
+     if (fp.deletePerm && ! deletePerm)
+       return false;
+     
+     return true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FileReader.java gcc-4.1.0/libjava/classpath/java/io/FileReader.java
*** gcc-4.0.2/libjava/classpath/java/io/FileReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FileReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* FileReader.java -- Convenience class for reading characters from a file
+    Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This class provides a convenient way to set up a <code>Reader</code>
+  * to read from a file.  It opens the specified file for reading and creates
+  * the <code>InputStreamReader</code> to read from the 
+  * resulting <code>FileInputStream</code>.  This class can only be used
+  * to read from files using the default character encoding.  Use
+  * <code>InputStreamReader</code> directly to use a non-default encoding.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class FileReader extends InputStreamReader
+ {
+   /**
+    * This method initializes a <code>FileReader</code> instance to read from
+    * the specified <code>File</code> object.
+    *
+    * @param file The <code>File</code> object representing the file to read from
+    *
+    * @exception FileNotFoundException If the file is not found or some other 
+    *            error occurs
+    */
+   public FileReader(File file) throws FileNotFoundException
+   {
+     super(new FileInputStream(file));
+   }
+ 
+   /**
+    * This method initializes a <code>FileReader</code> instance to read from
+    * this specified <code>FileDescriptor</code> object.
+    *
+    * @param fd The <code>FileDescriptor</code> to read from.
+    */
+   public FileReader(FileDescriptor fd)
+   {
+     super(new FileInputStream(fd));
+   }
+ 
+   /**
+    * This method initializes a <code>FileReader</code> instance to read from
+    * the specified named file.
+    *
+    * @param name The name of the file to read from
+    *
+    * @exception FileNotFoundException If the file is not found or some other 
+    *            error occurs
+    */
+   public FileReader(String name) throws FileNotFoundException
+   {
+     super(new FileInputStream(name));
+   }
+ } // class FileReader
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FileWriter.java gcc-4.1.0/libjava/classpath/java/io/FileWriter.java
*** gcc-4.0.2/libjava/classpath/java/io/FileWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FileWriter.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,137 ----
+ /* FileWriter.java -- Convenience class for writing to files.
+    Copyright (C) 1998, 1999, 2001, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to version 1.1.
+  */
+ 
+ /**
+   * This is a convenience class for writing to files.  It creates an
+   * <code>FileOutputStream</code> and initializes an 
+   * <code>OutputStreamWriter</code> to write to it.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   */
+ public class FileWriter extends OutputStreamWriter
+ {
+   /**
+    * This method initializes a new <code>FileWriter</code> object to write
+    * to the specified <code>File</code> object.
+    *
+    * @param file The <code>File</code> object to write to.
+    *
+    * @throws SecurityException If writing to this file is forbidden by the
+    * <code>SecurityManager</code>.
+    * @throws IOException If any other error occurs
+    */
+   public FileWriter(File file) throws SecurityException, IOException
+   {
+     super(new FileOutputStream(file));
+   }
+ 
+   /**
+    * This method initializes a new <code>FileWriter</code> object to write
+    * to the specified <code>File</code> object.
+    *
+    * @param file The <code>File</code> object to write to.
+    * @param append <code>true</code> to start adding data at the end of the
+    * file, <code>false</code> otherwise.
+    *
+    * @throws SecurityException If writing to this file is forbidden by the
+    * <code>SecurityManager</code>.
+    * @throws IOException If any other error occurs
+    */
+   public FileWriter(File file, boolean append) throws IOException
+   {
+     super(new FileOutputStream(file, append));
+   }
+ 
+   /**
+    * This method initializes a new <code>FileWriter</code> object to write
+    * to the specified <code>FileDescriptor</code> object.
+    *
+    * @param fd The <code>FileDescriptor</code> object to write to
+    *
+    * @throws SecurityException If writing to this file is forbidden by the
+    * <code>SecurityManager</code>.
+    */
+   public FileWriter(FileDescriptor fd) throws SecurityException
+   {
+     super(new FileOutputStream(fd));
+   }
+ 
+   /**
+    * This method intializes a new <code>FileWriter</code> object to 
+    * write to the
+    * specified named file.
+    *
+    * @param name The name of the file to write to
+    *
+    * @throws SecurityException If writing to this file is forbidden by the
+    * <code>SecurityManager</code>.
+    * @throws IOException If any other error occurs
+    */
+   public FileWriter(String name) throws IOException
+   {
+     super(new FileOutputStream(name));
+   }
+ 
+   /**
+    * This method intializes a new <code>FileWriter</code> object to 
+    * write to the
+    * specified named file.  This form of the constructor allows the caller
+    * to determine whether data should be written starting at the beginning or
+    * the end of the file.
+    *
+    * @param name The name of the file to write to
+    * @param append <code>true</code> to start adding data at the end of the
+    * file, <code>false</code> otherwise.
+    *
+    * @throws SecurityException If writing to this file is forbidden by the
+    * <code>SecurityManager</code>.
+    * @throws IOException If any other error occurs
+    */
+   public FileWriter(String name, boolean append) throws IOException
+   {
+     super(new FileOutputStream(name, append));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FilenameFilter.java gcc-4.1.0/libjava/classpath/java/io/FilenameFilter.java
*** gcc-4.0.2/libjava/classpath/java/io/FilenameFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FilenameFilter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* FilenameFilter.java -- Filter a list of filenames
+    Copyright (C) 1998, 1999, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to 1.1.
+  */
+ 
+ /**
+  * This interface has one method which is used for filtering filenames
+  * returned in a directory listing.  It is currently used by the 
+  * <code>File.list(FilenameFilter)</code> method and by the filename 
+  * dialog in AWT.
+  * <p>
+  * The method in this interface determines if a particular file should
+  * or should not be included in the file listing.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  *
+  * @see File#listFiles(java.io.FilenameFilter)
+  * @see java.awt.FileDialog#setFilenameFilter(java.io.FilenameFilter)
+  */
+ public interface FilenameFilter
+ {
+   /**
+    * This method determines whether or not a given file should be included
+    * in a directory listing.
+    *
+    * @param dir The <code>File</code> instance for the directory being read
+    * @param name The name of the file to test
+    *
+    * @return <code>true</code> if the file should be included in the list,
+    * <code>false</code> otherwise.
+    */
+   boolean accept(File dir, String name);
+ 
+ } // interface FilenameFilter
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FilterInputStream.java gcc-4.1.0/libjava/classpath/java/io/FilterInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/FilterInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FilterInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,203 ----
+ /* FilterInputStream.java -- Base class for classes that filter input
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+   * This is the common superclass of all standard classes that filter 
+   * input.  It acts as a layer on top of an underlying <code>InputStream</code>
+   * and simply redirects calls made to it to the subordinate InputStream
+   * instead.  Subclasses of this class perform additional filtering
+   * functions in addition to simply redirecting the call.
+   * <p>
+   * This class is not abstract.  However, since it only redirects calls
+   * to a subordinate <code>InputStream</code> without adding any functionality
+   * on top of it, this class should not be used directly.  Instead, various
+   * subclasses of this class should be used.  This is enforced with a
+   * protected constructor.  Do not try to hack around it.
+   * <p>
+   * When creating a subclass of <code>FilterInputStream</code>, override the
+   * appropriate methods to implement the desired filtering.  However, note
+   * that the <code>read(byte[])</code> method does not need to be overridden
+   * as this class redirects calls to that method to 
+   * <code>read(byte[], int, int)</code> instead of to the subordinate
+   * <code>InputStream read(byte[])</code> method.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public class FilterInputStream extends InputStream
+ {
+   /**
+     * This is the subordinate <code>InputStream</code> to which method calls
+     * are redirected
+     */
+   protected InputStream in;
+ 
+   /**
+     * Create a <code>FilterInputStream</code> with the specified subordinate
+     * <code>InputStream</code>.
+     *
+     * @param in The subordinate <code>InputStream</code>
+     */
+   protected FilterInputStream(InputStream in)
+   {
+     this.in = in;
+   }
+ 
+   /**
+     * Calls the <code>in.mark(int)</code> method.
+     *
+     * @param readlimit The parameter passed to <code>in.mark(int)</code>
+     */
+   public void mark(int readlimit)
+   {
+     in.mark(readlimit);
+   }
+ 
+   /**
+     * Calls the <code>in.markSupported()</code> method.
+     *
+     * @return <code>true</code> if mark/reset is supported, <code>false</code>
+     *         otherwise
+     */
+   public boolean markSupported()
+   {
+     return in.markSupported();
+   }
+ 
+   /**
+     * Calls the <code>in.reset()</code> method.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void reset() throws IOException
+   {
+     in.reset();
+   }
+ 
+   /**
+     * Calls the <code>in.available()</code> method.
+     *
+     * @return The value returned from <code>in.available()</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public int available() throws IOException
+   {
+     return in.available();
+   }
+ 
+   /**
+     * Calls the <code>in.skip(long)</code> method
+     *
+     * @param numBytes The requested number of bytes to skip. 
+     *
+     * @return The value returned from <code>in.skip(long)</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public long skip(long numBytes) throws IOException
+   {
+     return in.skip(numBytes);
+   }
+ 
+   /**
+     * Calls the <code>in.read()</code> method
+     *
+     * @return The value returned from <code>in.read()</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public int read() throws IOException
+   {
+     return in.read();
+   }
+ 
+   /**
+     * Calls the <code>read(byte[], int, int)</code> overloaded method.  
+     * Note that 
+     * this method does not redirect its call directly to a corresponding
+     * method in <code>in</code>.  This allows subclasses to override only the
+     * three argument version of <code>read</code>.
+     *
+     * @param buf The buffer to read bytes into
+     *
+     * @return The value retured from <code>in.read(byte[], int, int)</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public int read(byte[] buf) throws IOException
+   {
+     return read(buf, 0, buf.length);
+   }
+ 
+   /**
+     * Calls the <code>in.read(byte[], int, int)</code> method.
+     *
+     * @param buf The buffer to read bytes into
+     * @param offset The index into the buffer to start storing bytes
+     * @param len The maximum number of bytes to read.
+     *
+     * @return The value retured from <code>in.read(byte[], int, int)</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public int read(byte[] buf, int offset, int len) throws IOException
+   {
+     return in.read(buf, offset, len);
+   }
+ 
+   /**
+     * This method closes the input stream by closing the input stream that
+     * this object is filtering.  Future attempts to access this stream may
+     * throw an exception.
+     * 
+     * @exception IOException If an error occurs
+     */
+   public void close() throws IOException
+   {
+     in.close();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FilterOutputStream.java gcc-4.1.0/libjava/classpath/java/io/FilterOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/FilterOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FilterOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,150 ----
+ /* FilterOutputStream.java -- Parent class for output streams that filter
+    Copyright (C) 1998, 1999, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to version 1.1.
+  */
+ 
+ /**
+   * This class is the common superclass of output stream classes that 
+   * filter the output they write.  These classes typically transform the
+   * data in some way prior to writing it out to another underlying
+   * <code>OutputStream</code>.  This class simply overrides all the 
+   * methods in <code>OutputStream</code> to redirect them to the
+   * underlying stream.  Subclasses provide actual filtering.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   */
+ public class FilterOutputStream extends OutputStream
+ {
+   /**
+     * This is the subordinate <code>OutputStream</code> that this class
+     * redirects its method calls to.
+     */
+   protected OutputStream out;
+ 
+   /**
+     * This method initializes an instance of <code>FilterOutputStream</code>
+     * to write to the specified subordinate <code>OutputStream</code>.
+     *
+     * @param out The <code>OutputStream</code> to write to
+     */
+   public FilterOutputStream(OutputStream out)
+   {
+     this.out = out;
+   }
+ 
+   /**
+     * This method closes the underlying <code>OutputStream</code>.  Any
+     * further attempts to write to this stream may throw an exception.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void close() throws IOException
+   {
+     flush();
+     out.close();
+   }
+ 
+   /**
+     * This method attempt to flush all buffered output to be written to the
+     * underlying output sink.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void flush() throws IOException
+   {
+     out.flush();
+   }
+ 
+   /**
+     * This method writes a single byte of output to the underlying
+     * <code>OutputStream</code>.
+     *
+     * @param b The byte to write, passed as an int.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void write(int b) throws IOException
+   {
+     out.write(b);
+   }
+ 
+   /**
+     * This method writes all the bytes in the specified array to the underlying
+     * <code>OutputStream</code>.  It does this by calling the three parameter
+     * version of this method - <code>write(byte[], int, int)</code> in this
+     * class instead of writing to the underlying <code>OutputStream</code>
+     * directly.  This allows most subclasses to avoid overriding this method.
+     *
+     * @param buf The byte array to write bytes from
+     *
+     * @exception IOException If an error occurs
+     */
+   public void write(byte[] buf) throws IOException
+   {
+     // Don't do checking here, per Java Lang Spec.
+     write(buf, 0, buf.length);
+   }
+ 
+   /**
+     * This method calls the <code>write(int)</code> method <code>len</code>
+     * times for all bytes from the array <code>buf</code> starting at index
+     * <code>offset</code>. Subclasses should overwrite this method to get a
+     * more efficient implementation.
+     *
+     * @param buf The byte array to write bytes from
+     * @param offset The index into the array to start writing bytes from
+     * @param len The number of bytes to write
+     *
+     * @exception IOException If an error occurs
+     */
+   public void write(byte[] buf, int offset, int len) throws IOException
+   {
+     // Don't do checking here, per Java Lang Spec.
+     for (int i=0; i < len; i++) 
+       write(buf[offset + i]);
+ 
+   }
+ 
+ } // class FilterOutputStream
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FilterReader.java gcc-4.1.0/libjava/classpath/java/io/FilterReader.java
*** gcc-4.0.2/libjava/classpath/java/io/FilterReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FilterReader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,185 ----
+ /* FilterReader.java -- Base class for char stream classes that filter input
+    Copyright (C) 1998, 1999, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+   * This is the common superclass of all standard classes that filter 
+   * input.  It acts as a layer on top of an underlying <code>Reader</code>
+   * and simply redirects calls made to it to the subordinate Reader
+   * instead.  Subclasses of this class perform additional filtering
+   * functions in addition to simply redirecting the call.
+   * <p>
+   * When creating a subclass of <code>FilterReader</code>, override the
+   * appropriate methods to implement the desired filtering.  However, note
+   * that the <code>read(char[])</code> method does not need to be overridden
+   * as this class redirects calls to that method to 
+   * <code>read(yte[], int, int)</code> instead of to the subordinate
+   * <code>Reader} read(yte[])</code> method.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public abstract class FilterReader extends Reader
+ {
+   /**
+     * This is the subordinate <code>Reader</code> to which method calls
+     * are redirected
+     */
+   protected Reader in;
+ 
+   /**
+     * Create a <code>FilterReader</code> with the specified subordinate
+     * <code>Reader</code>.
+     * The <code>lock</code> of the new <code>FilterReader</code> will be set
+     * to <code>in.lock</code>.
+     *
+     * @param in The subordinate <code>Reader</code>
+     */
+   protected FilterReader(Reader in)
+   {
+     super(in.lock);
+     this.in = in;
+   }
+ 
+   /**
+     * Calls the <code>in.mark(int)</code> method.
+     *
+     * @param readlimit The parameter passed to <code>in.mark(int)</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public void mark(int readlimit) throws IOException
+   {
+     in.mark(readlimit);
+   }
+ 
+   /**
+     * Calls the <code>in.markSupported()</code> method.
+     *
+     * @return <code>true</code> if mark/reset is supported, 
+     * <code>false</code> otherwise
+     */
+   public boolean markSupported()
+   {
+     return(in.markSupported());
+   }
+ 
+   /**
+     * Calls the <code>in.reset()</code> method.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void reset() throws IOException
+   {
+     in.reset();
+   }
+ 
+   /**
+     * Calls the <code>in.read()</code> method.
+     *
+     * @return The value returned from <code>in.available()</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public boolean ready() throws IOException
+   {
+     return(in.ready());
+   }
+ 
+   /**
+     * Calls the <code>in.skip(long)</code> method
+     *
+     * @param num_chars The requested number of chars to skip. 
+     *
+     * @return The value returned from <code>in.skip(long)</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public long skip(long num_chars) throws IOException
+   {
+     return(in.skip(num_chars));
+   }
+ 
+   /**
+     * Calls the <code>in.read()</code> method
+     *
+     * @return The value returned from <code>in.read()</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public int read() throws IOException
+   {
+     return(in.read());
+   }
+ 
+   /**
+     * Calls the <code>in.read(char[], int, int)</code> method.
+     *
+     * @param buf The buffer to read chars into
+     * @param offset The index into the buffer to start storing chars
+     * @param len The maximum number of chars to read.
+     *
+     * @return The value retured from <code>in.read(char[], int, int)</code>
+     *
+     * @exception IOException If an error occurs
+     */
+   public int read(char[] buf, int offset, int len) throws IOException
+   {
+     return(in.read(buf, offset, len));
+   }
+ 
+   /**
+     * This method closes the stream by calling the <code>close()</code> method
+     * of the underlying stream.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void close() throws IOException
+   {
+     in.close();
+   }
+ 
+ } // class FilterReader
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/FilterWriter.java gcc-4.1.0/libjava/classpath/java/io/FilterWriter.java
*** gcc-4.0.2/libjava/classpath/java/io/FilterWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/FilterWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,147 ----
+ /* FilterWriter.java -- Parent class for output streams that filter
+    Copyright (C) 1998, 1999, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Complete to version 1.1.
+  */
+ 
+ /**
+   * This class is the common superclass of output character stream classes 
+   * that filter the output they write.  These classes typically transform the
+   * data in some way prior to writing it out to another underlying
+   * <code>Writer</code>.  This class simply overrides all the 
+   * methods in <code>Writer</code> to redirect them to the
+   * underlying stream.  Subclasses provide actual filtering.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com) 
+   */
+ public abstract class FilterWriter extends Writer
+ {
+   /**
+     * This is the subordinate <code>Writer</code> that this class
+     * redirects its method calls to.
+     */
+   protected Writer out;
+ 
+   /**
+     * This method initializes an instance of <code>FilterWriter</code>
+     * to write to the specified subordinate <code>Writer</code>.
+     * The given <code>Writer</code> will be used as <code>lock</code> for
+     * the newly created <code>FilterWriter</code>.
+     *
+     * @param out The <code>Writer</code> to write to
+     */
+   protected FilterWriter(Writer out)
+   {
+     super(out.lock);
+     this.out = out;
+   }
+ 
+   /**
+     * This method closes the underlying <code>Writer</code>.  Any
+     * further attempts to write to this stream may throw an exception.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void close() throws IOException
+   {
+     out.close();
+   }
+ 
+   /**
+     * This method attempt to flush all buffered output to be written to the
+     * underlying output sink.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void flush() throws IOException
+   {
+     out.flush();
+   }
+ 
+   /**
+     * This method writes a single char of output to the underlying
+     * <code>Writer</code>.
+     *
+     * @param b The char to write, passed as an int.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void write(int b) throws IOException
+   {
+     out.write(b);
+   }
+ 
+   /**
+     * This method writes <code>len</code> chars from the array <code>buf</code>
+     * starting at index <code>offset</code> to the underlying
+     * <code>Writer</code>.
+     *
+     * @param buf The char array to write chars from
+     * @param offset The index into the array to start writing chars from
+     * @param len The number of chars to write
+     *
+     * @exception IOException If an error occurs
+     */
+   public void write(char[] buf, int offset, int len) throws IOException
+   {
+     out.write(buf, offset, len);
+   }
+ 
+   /**
+     * This method writes <code>len</code> chars from the <code>String</code>
+     * starting at position <code>offset</code>.
+     *
+     * @param str The <code>String</code> that is to be written
+     * @param offset The character offset into the <code>String</code> 
+     * to start writing from
+     * @param len The number of chars to write
+     *
+     * @exception IOException If an error occurs
+     */
+   public void write(String str, int offset, int len) throws IOException
+   {
+     out.write(str, offset, len);
+   }
+ 
+ } // class FilterWriter
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/Flushable.java gcc-4.1.0/libjava/classpath/java/io/Flushable.java
*** gcc-4.0.2/libjava/classpath/java/io/Flushable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/Flushable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* Flushable.java -- Flushable object
+    Copyright (C) 2004, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ /**
+  * A <code>Flushable</code> class represents a stream of
+  * data, for which internally buffered data can be `flushed'.
+  * Flushing such a stream causes the buffered data to be
+  * written to the stream.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.5
+  */
+ public interface Flushable
+ {
+ 
+   /**
+    * Flushes the stream represented by this class,
+    * so that any buffered data is written to the stream.
+    *
+    * @throws IOException if an I/O error occurs in flushing.
+    */
+   void flush()
+     throws IOException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/IOException.java gcc-4.1.0/libjava/classpath/java/io/IOException.java
*** gcc-4.0.2/libjava/classpath/java/io/IOException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/IOException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* IOException.java -- Generic input/output exception
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+   * This exception is thrown to indicate an I/O problem of some sort
+   * occurred.  Since this is a fairly generic exception, often a subclass
+   * of IOException will actually be thrown in order to provide a more
+   * detailed indication of what happened.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   * @status updated to 1.4
+   */
+ public class IOException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 7818375828146090155L;
+ 
+   /**
+    * Create an exception without a descriptive error message.
+    */
+   public IOException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public IOException(String message)
+   {
+     super(message);
+   }
+ } // class IOException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/InputStream.java gcc-4.1.0/libjava/classpath/java/io/InputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/InputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/InputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,272 ----
+ /* InputStream.java -- Base class for input
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+  
+ package java.io;
+ 
+ /**
+   * This abstract class forms the base of the hierarchy of classes that read
+   * input as a stream of bytes.  It provides a common set of methods for
+   * reading bytes from streams.  Subclasses implement and extend these
+   * methods to read bytes from a particular input source such as a file
+   * or network connection.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public abstract class InputStream
+ {
+   /**
+    * Default, no-arg, public constructor
+    */
+   public InputStream()
+   {
+   }
+ 
+   /**
+    * This method returns the number of bytes that can be read from this
+    * stream before a read can block.  A return of 0 indicates that blocking
+    * might (or might not) occur on the very next read attempt.
+    * <p>
+    * This method always returns 0 in this class
+    *
+    * @return The number of bytes that can be read before blocking could occur
+    *
+    * @exception IOException If an error occurs
+    */
+   public int available() throws IOException
+   {
+     return 0;
+   }
+ 
+   /**
+    * This method closes the stream.  Any futher attempts to read from the
+    * stream may generate an <code>IOException</code>
+    * <p>
+    * This method does nothing in this class, but subclasses may override
+    * this method in order to provide additional functionality.
+    *
+    * @exception IOException If an error occurs, which can only happen
+    * in a subclass
+    */
+   public void close() throws IOException
+   {
+     // Do nothing
+   }
+ 
+   /**
+    * This method marks a position in the input to which the stream can
+    * be "reset" by calling the <code>reset()</code> method.  The
+    * parameter @code{readlimit} is the number of bytes that can be read
+    * from the stream after setting the mark before the mark becomes
+    * invalid.  For example, if <code>mark()</code> is called with a
+    * read limit of 10, then when 11 bytes of data are read from the
+    * stream before the <code>reset()</code> method is called, then the
+    * mark is invalid and the stream object instance is not required to
+    * remember the mark.
+    * <p>
+    * This method does nothing in this class, but subclasses may override it
+    * to provide mark/reset functionality.
+    *
+    * @param readLimit The number of bytes that can be read before the
+    *                  mark becomes invalid
+    */
+   public void mark(int readLimit)
+   {
+     // Do nothing
+   }
+ 
+   /**
+    * This method returns a boolean that indicates whether the mark/reset
+    * methods are supported in this class.  Those methods can be used to
+    * remember a specific point in the stream and reset the stream to that
+    * point.
+    * <p>
+    * This method always returns <code>false</code> in this class, but
+    * subclasses can override this method to return <code>true</code>
+    * if they support mark/reset functionality.
+    *
+    * @return <code>true</code> if mark/reset functionality is
+    * supported, <code>false</code> otherwise 
+    */
+   public boolean markSupported()
+   {
+     return false;
+   }
+ 
+   /**
+    * This method reads an unsigned byte from the input stream and returns it
+    * as an int in the range of 0-255.  This method also will return -1 if
+    * the end of the stream has been reached.
+    * <p>
+    * This method will block until the byte can be read.
+    *
+    * @return The byte read or -1 if end of stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public abstract int read() throws IOException;
+ 
+   /**
+    * This method reads bytes from a stream and stores them into a caller
+    * supplied buffer.  This method attempts to completely fill the buffer,
+    * but can return before doing so.  The actual number of bytes read is
+    * returned as an int.  A -1 is returned to indicate the end of the stream.
+    * <p>
+    * This method will block until some data can be read.
+    * <p>
+    * This method operates by calling an overloaded read method like so:
+    * <code>read(b, 0, b.length)</code>
+    *
+    * @param b The buffer into which the bytes read will be stored.
+    *
+    * @return The number of bytes read or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public int read(byte[] b) throws IOException
+   {
+     return read(b, 0, b.length);
+   }
+ 
+   /**
+    * This method read bytes from a stream and stores them into a
+    * caller supplied buffer.  It starts storing the data at index
+    * <code>off</code> into the buffer and attempts to read
+    * <code>len</code> bytes.  This method can return before reading the
+    * number of bytes requested.  The actual number of bytes read is
+    * returned as an int.  A -1 is returned to indicate the end of the
+    * stream.
+    *  <p>
+    * This method will block until some data can be read.
+    * <p>
+    * This method operates by calling the single byte <code>read()</code> method
+    * in a loop until the desired number of bytes are read.  The read loop
+    * stops short if the end of the stream is encountered or if an IOException
+    * is encountered on any read operation except the first.  If the first
+    * attempt to read a bytes fails, the IOException is allowed to propagate
+    * upward.  And subsequent IOException is caught and treated identically
+    * to an end of stream condition.  Subclasses can (and should if possible)
+    * override this method to provide a more efficient implementation.
+    *
+    * @param b The array into which the bytes read should be stored
+    * @param off The offset into the array to start storing bytes
+    * @param len The requested number of bytes to read
+    *
+    * @return The actual number of bytes read, or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public int read(byte[] b, int off, int len) throws IOException
+   {
+     if (off < 0 || len < 0 || off + len > b.length)
+       throw new IndexOutOfBoundsException();
+     if (b.length == 0)
+       return 0;
+ 
+     int i, ch;
+ 
+     for (i = 0; i < len; ++i)
+       try
+ 	{
+ 	  if ((ch = read()) < 0)
+ 	    return i == 0 ? -1 : i;		// EOF
+ 	  b[off + i] = (byte) ch;
+ 	}
+       catch (IOException ex)
+ 	{
+ 	  // Only reading the first byte should cause an IOException.
+ 	  if (i == 0)
+ 	    throw ex;
+ 	  return i;
+ 	}
+ 
+     return i;
+   }
+ 
+   /**
+    * This method resets a stream to the point where the
+    * <code>mark()</code> method was called.  Any bytes that were read
+    * after the mark point was set will be re-read during subsequent
+    * reads.
+    * <p>
+    * This method always throws an IOException in this class, but subclasses
+    * can override this method if they provide mark/reset functionality.
+    *
+    * @exception IOException Always thrown for this class
+    */
+   public void reset() throws IOException
+   {
+     throw new IOException("mark/reset not supported");
+   }
+ 
+   /**
+    * This method skips the specified number of bytes in the stream.  It
+    * returns the actual number of bytes skipped, which may be less than the
+    * requested amount.
+    * <p>
+    * This method reads and discards bytes into a byte array until the
+    * specified number of bytes were skipped or until either the end of stream
+    * is reached or a read attempt returns a short count.  Subclasses can
+    * override this metho to provide a more efficient implementation where
+    * one exists.
+    *
+    * @param n The requested number of bytes to skip
+    *
+    * @return The actual number of bytes skipped.
+    *
+    * @exception IOException If an error occurs
+    */
+   public long skip(long n) throws IOException
+   {
+     // Throw away n bytes by reading them into a temp byte[].
+     // Limit the temp array to 2Kb so we don't grab too much memory.
+     final int buflen = n > 2048 ? 2048 : (int) n;
+     byte[] tmpbuf = new byte[buflen];
+     final long origN = n;
+ 
+     while (n > 0L)
+       {
+ 	int numread = read(tmpbuf, 0, n > buflen ? buflen : (int) n);
+ 	if (numread <= 0)
+ 	  break;
+ 	n -= numread;
+       }
+ 
+     return origN - n;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/InputStreamReader.java gcc-4.1.0/libjava/classpath/java/io/InputStreamReader.java
*** gcc-4.0.2/libjava/classpath/java/io/InputStreamReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/InputStreamReader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,443 ----
+ /* InputStreamReader.java -- Reader than transforms bytes to chars
+    Copyright (C) 1998, 1999, 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.nio.charset.EncodingHelper;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CoderResult;
+ import java.nio.charset.CodingErrorAction;
+ 
+ /**
+  * This class reads characters from a byte input stream.   The characters
+  * read are converted from bytes in the underlying stream by a 
+  * decoding layer.  The decoding layer transforms bytes to chars according
+  * to an encoding standard.  There are many available encodings to choose 
+  * from.  The desired encoding can either be specified by name, or if no
+  * encoding is selected, the system default encoding will be used.  The
+  * system default encoding name is determined from the system property
+  * <code>file.encoding</code>.  The only encodings that are guaranteed to 
+  * be availalbe are "8859_1" (the Latin-1 character set) and "UTF8".
+  * Unforunately, Java does not provide a mechanism for listing the
+  * ecodings that are supported in a given implementation.
+  * <p>
+  * Here is a list of standard encoding names that may be available:
+  * <p>
+  * <ul>
+  * <li>8859_1 (ISO-8859-1/Latin-1)</li>
+  * <li>8859_2 (ISO-8859-2/Latin-2)</li>
+  * <li>8859_3 (ISO-8859-3/Latin-3)</li>
+  * <li>8859_4 (ISO-8859-4/Latin-4)</li>
+  * <li>8859_5 (ISO-8859-5/Latin-5)</li>
+  * <li>8859_6 (ISO-8859-6/Latin-6)</li>
+  * <li>8859_7 (ISO-8859-7/Latin-7)</li>
+  * <li>8859_8 (ISO-8859-8/Latin-8)</li>
+  * <li>8859_9 (ISO-8859-9/Latin-9)</li>
+  * <li>ASCII (7-bit ASCII)</li>
+  * <li>UTF8 (UCS Transformation Format-8)</li>
+  * <li>More later</li>
+  * </ul>
+  * <p>
+  * It is recommended that applications do not use 
+  * <code>InputStreamReader</code>'s
+  * directly.  Rather, for efficiency purposes, an object of this class
+  * should be wrapped by a <code>BufferedReader</code>.
+  * <p>
+  * Due to a deficiency the Java class library design, there is no standard
+  * way for an application to install its own byte-character encoding.
+  *
+  * @see BufferedReader
+  * @see InputStream
+  *
+  * @author Robert Schuster
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  * @date April 22, 1998.  
+  */
+ public class InputStreamReader extends Reader
+ {
+   /**
+    * The input stream.
+    */
+   private InputStream in;
+ 
+   /**
+    * The charset decoder.
+    */
+   private CharsetDecoder decoder;
+ 
+   /**
+    * End of stream reached.
+    */
+   private boolean isDone = false;
+ 
+   /**
+    * Need this.
+    */
+   private float maxBytesPerChar;
+ 
+   /**
+    * Buffer holding surplus loaded bytes (if any)
+    */
+   private ByteBuffer byteBuffer;
+ 
+   /**
+    * java.io canonical name of the encoding.
+    */
+   private String encoding;
+ 
+   /**
+    * We might decode to a 2-char UTF-16 surrogate, which won't fit in the
+    * output buffer. In this case we need to save the surrogate char.
+    */
+   private char savedSurrogate;
+   private boolean hasSavedSurrogate = false;
+ 
+   /**
+    * This method initializes a new instance of <code>InputStreamReader</code>
+    * to read from the specified stream using the default encoding.
+    *
+    * @param in The <code>InputStream</code> to read from 
+    */
+   public InputStreamReader(InputStream in)
+   {
+     if (in == null)
+       throw new NullPointerException();
+     this.in = in;
+     try 
+ 	{ 
+ 	  encoding = System.getProperty("file.encoding");
+ 	  // Don't use NIO if avoidable
+ 	  if(EncodingHelper.isISOLatin1(encoding))
+ 	    {
+ 	      encoding = "ISO8859_1";
+ 	      maxBytesPerChar = 1f;
+ 	      decoder = null;
+ 	      return;
+ 	    }
+ 	  Charset cs = EncodingHelper.getCharset(encoding);
+ 	  decoder = cs.newDecoder();
+ 	  encoding = EncodingHelper.getOldCanonical(cs.name());
+ 	  try {
+ 	      maxBytesPerChar = cs.newEncoder().maxBytesPerChar();
+ 	  } catch(UnsupportedOperationException _){
+ 	      maxBytesPerChar = 1f;
+ 	  } 
+ 	  decoder.onMalformedInput(CodingErrorAction.REPLACE);
+ 	  decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+ 	  decoder.reset();
+ 	} catch(RuntimeException e) {
+ 	  encoding = "ISO8859_1";
+ 	  maxBytesPerChar = 1f;
+ 	  decoder = null;
+ 	} catch(UnsupportedEncodingException e) {
+ 	  encoding = "ISO8859_1";
+ 	  maxBytesPerChar = 1f;
+ 	  decoder = null;
+ 	}
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>InputStreamReader</code>
+    * to read from the specified stream using a caller supplied character
+    * encoding scheme.  Note that due to a deficiency in the Java language
+    * design, there is no way to determine which encodings are supported.
+    * 
+    * @param in The <code>InputStream</code> to read from
+    * @param encoding_name The name of the encoding scheme to use
+    *
+    * @exception UnsupportedEncodingException If the encoding scheme 
+    * requested is not available.
+    */
+   public InputStreamReader(InputStream in, String encoding_name)
+     throws UnsupportedEncodingException
+   {
+     if (in == null
+         || encoding_name == null)
+       throw new NullPointerException();
+     
+     this.in = in;
+     // Don't use NIO if avoidable
+     if(EncodingHelper.isISOLatin1(encoding_name))
+       {
+ 	encoding = "ISO8859_1";
+ 	maxBytesPerChar = 1f;
+ 	decoder = null;
+ 	return;
+       }
+     try {
+       Charset cs = EncodingHelper.getCharset(encoding_name);
+       try {
+         maxBytesPerChar = cs.newEncoder().maxBytesPerChar();
+       } catch(UnsupportedOperationException _){
+ 	maxBytesPerChar = 1f;
+       } 
+ 
+       decoder = cs.newDecoder();
+       decoder.onMalformedInput(CodingErrorAction.REPLACE);
+       decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+       decoder.reset();
+ 
+       // The encoding should be the old name, if such exists.
+       encoding = EncodingHelper.getOldCanonical(cs.name());
+     } catch(RuntimeException e) {
+       encoding = "ISO8859_1";
+       maxBytesPerChar = 1f;
+       decoder = null;
+     }
+   }
+ 
+   /**
+    * Creates an InputStreamReader that uses a decoder of the given
+    * charset to decode the bytes in the InputStream into
+    * characters.
+    */
+   public InputStreamReader(InputStream in, Charset charset) {
+     this.in = in;
+     decoder = charset.newDecoder();
+ 
+     decoder.onMalformedInput(CodingErrorAction.REPLACE);
+     decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+     decoder.reset();
+     encoding = EncodingHelper.getOldCanonical(charset.name());
+   }
+ 
+   /**
+    * Creates an InputStreamReader that uses the given charset decoder
+    * to decode the bytes in the InputStream into characters.
+    */
+   public InputStreamReader(InputStream in, CharsetDecoder decoder) {
+     this.in = in;
+     this.decoder = decoder;
+ 
+     Charset charset = decoder.charset();
+     try {
+       if (charset == null)
+         maxBytesPerChar = 1f;
+       else
+         maxBytesPerChar = charset.newEncoder().maxBytesPerChar();
+     } catch(UnsupportedOperationException _){
+ 	maxBytesPerChar = 1f;
+     } 
+ 
+     decoder.onMalformedInput(CodingErrorAction.REPLACE);
+     decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+     decoder.reset();
+     if (charset == null)
+       encoding = "US-ASCII";
+     else
+       encoding = EncodingHelper.getOldCanonical(decoder.charset().name());      
+   }
+   
+   /**
+    * This method closes this stream, as well as the underlying 
+    * <code>InputStream</code>.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void close() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	// Makes sure all intermediate data is released by the decoder.
+ 	if (decoder != null)
+ 	   decoder.reset();
+ 	if (in != null)
+ 	   in.close();
+ 	in = null;
+ 	isDone = true;
+ 	decoder = null;
+       }
+   }
+ 
+   /**
+    * This method returns the name of the encoding that is currently in use
+    * by this object.  If the stream has been closed, this method is allowed
+    * to return <code>null</code>.
+    *
+    * @return The current encoding name
+    */
+   public String getEncoding()
+   {
+     return in != null ? encoding : null;
+   }
+ 
+   /**
+    * This method checks to see if the stream is ready to be read.  It
+    * will return <code>true</code> if is, or <code>false</code> if it is not.
+    * If the stream is not ready to be read, it could (although is not required
+    * to) block on the next read attempt.
+    *
+    * @return <code>true</code> if the stream is ready to be read, 
+    * <code>false</code> otherwise
+    *
+    * @exception IOException If an error occurs
+    */
+   public boolean ready() throws IOException
+   {
+     if (in == null)
+       throw new IOException("Reader has been closed");
+     
+     return in.available() != 0;
+   }
+ 
+   /**
+    * This method reads up to <code>length</code> characters from the stream into
+    * the specified array starting at index <code>offset</code> into the
+    * array.
+    *
+    * @param buf The character array to recieve the data read
+    * @param offset The offset into the array to start storing characters
+    * @param length The requested number of characters to read.
+    *
+    * @return The actual number of characters read, or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs
+    */
+   public int read(char[] buf, int offset, int length) throws IOException
+   {
+     if (in == null)
+       throw new IOException("Reader has been closed");
+     if (isDone)
+       return -1;
+     if(decoder != null){
+ 	int totalBytes = (int)((double)length * maxBytesPerChar);
+ 	byte[] bytes = new byte[totalBytes];
+ 
+ 	int remaining = 0;
+ 	if(byteBuffer != null)
+ 	{
+ 	    remaining = byteBuffer.remaining();
+ 	    byteBuffer.get(bytes, 0, remaining);
+ 	}
+ 	int read;
+ 	if(totalBytes - remaining > 0)
+ 	  {
+ 	    read = in.read(bytes, remaining, totalBytes - remaining);
+ 	    if(read == -1){
+ 	      read = remaining;
+ 	      isDone = true;
+ 	    } else
+ 	      read += remaining;
+ 	  } else 
+             read = remaining;
+ 	byteBuffer = ByteBuffer.wrap(bytes, 0, read);	
+ 	CharBuffer cb = CharBuffer.wrap(buf, offset, length);
+ 	int startPos = cb.position();
+ 
+  	if(hasSavedSurrogate){
+  	    hasSavedSurrogate = false;
+  	    cb.put(savedSurrogate);
+ 	    read++;
+  	}
+ 
+ 	CoderResult cr = decoder.decode(byteBuffer, cb, isDone);
+ 	decoder.reset();
+ 	// 1 char remains which is the first half of a surrogate pair.
+ 	if(cr.isOverflow() && cb.hasRemaining()){
+ 	    CharBuffer overflowbuf = CharBuffer.allocate(2);
+ 	    cr = decoder.decode(byteBuffer, overflowbuf, isDone);
+ 	    overflowbuf.flip();
+ 	    if(overflowbuf.hasRemaining())
+ 	    {
+ 	      cb.put(overflowbuf.get());
+ 	      savedSurrogate = overflowbuf.get();
+ 	      hasSavedSurrogate = true;	    
+ 	      isDone = false;
+ 	    }
+ 	}
+ 
+ 	if(byteBuffer.hasRemaining()) {
+ 	    byteBuffer.compact();
+ 	    byteBuffer.flip();	  
+ 	    isDone = false;
+ 	} else
+ 	    byteBuffer = null;
+ 
+ 	read = cb.position() - startPos;
+ 	return (read <= 0) ? -1 : read;
+     } else {
+ 	byte[] bytes = new byte[length];
+ 	int read = in.read(bytes);
+ 	for(int i=0;i<read;i++)
+           buf[offset+i] = (char)(bytes[i]&0xFF);
+ 	return read;
+     }
+   }
+ 
+   /**
+    * Reads an char from the input stream and returns it
+    * as an int in the range of 0-65535.  This method also will return -1 if
+    * the end of the stream has been reached.
+    * <p>
+    * This method will block until the char can be read.
+    *
+    * @return The char read or -1 if end of stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public int read() throws IOException
+   {
+     char[] buf = new char[1];
+     int count = read(buf, 0, 1);
+     return count > 0 ? buf[0] : -1;
+   }
+ 
+   /**
+    * Skips the specified number of chars in the stream.  It
+    * returns the actual number of chars skipped, which may be less than the
+    * requested amount.
+    *
+    * @param count The requested number of chars to skip
+    *
+    * @return The actual number of chars skipped.
+    *
+    * @exception IOException If an error occurs
+    */
+    public long skip(long count) throws IOException
+    {
+      if (in == null)
+        throw new IOException("Reader has been closed");
+      
+      return super.skip(count);
+    }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/InterruptedIOException.java gcc-4.1.0/libjava/classpath/java/io/InterruptedIOException.java
*** gcc-4.0.2/libjava/classpath/java/io/InterruptedIOException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/InterruptedIOException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* InterruptedIOException.java -- an I/O operation was interrupted
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+   * This exception is thrown when a in process I/O operation is interrupted
+   * for some reason.  The field bytesTransferred will contain the number of
+   * bytes that were read/written prior to the interruption.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   * @see Thread#interrupt()
+   * @status updated to 1.4
+   */
+ public class InterruptedIOException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 4020568460727500567L;
+ 
+   /**
+    * The number of bytes read/written prior to the interruption.
+    *
+    * @serial count of bytes successfully transferred
+    */
+   public int bytesTransferred;
+ 
+   /**
+    * Create an extends without a descriptive error message.
+    */
+   public InterruptedIOException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public InterruptedIOException(String message)
+   {
+     super(message);
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message and count of
+    * bytes transferred.
+    *
+    * @param message the descriptive error message
+    * @param bytesTransferred number of bytes tranferred before interruption
+    */
+   InterruptedIOException(String message, int bytesTransferred)
+   {
+     super(message);
+     this.bytesTransferred = bytesTransferred;
+   }
+ } // class InterruptedIOException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/InvalidClassException.java gcc-4.1.0/libjava/classpath/java/io/InvalidClassException.java
*** gcc-4.0.2/libjava/classpath/java/io/InvalidClassException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/InvalidClassException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /* InvalidClassException.java -- deserializing a class failed
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when there is some sort of problem with a
+  * class during a serialization operation.  This could be:<br><ul>
+  * <li>the serial version of the class doesn't match</li>
+  * <li>the class contains unknown datatypes</li>
+  * <li>the class does not have an accessible no-arg constructor</li>
+  * </ul>.
+  *
+  * <p>The field <code>classname</code> will contain the name of the
+  * class that caused the problem if known.  The getMessage() method
+  * for this exception will always include the name of that class
+  * if known.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class InvalidClassException extends ObjectStreamException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -4333316296251054416L;
+ 
+   /**
+    * The name of the class which encountered the error.
+    *
+    * @serial the classname causing the error
+    */
+   public String classname;
+ 
+   /**
+    * Create an exception with a descriptive error message, but a null
+    * classname.
+    *
+    * @param message the descriptive error message
+    */
+   public InvalidClassException(String message)
+   {
+     super(message);
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message, and the name of
+    * the class that caused the problem.
+    *
+    * @param classname the name of the faulty class
+    * @param message the descriptive error message
+    */
+   public InvalidClassException(String classname, String message)
+   {
+     super(message);
+     this.classname = classname;
+   }
+ 
+   /**
+    * Returns the descriptive error message for this exception. It will
+    * include the class name that caused the problem if known, in the format:
+    * <code>[classname][; ][super.getMessage()]</code>.
+    *
+    * @return A descriptive error message, may be null
+    */
+   public String getMessage()
+   {
+     String msg = super.getMessage();
+     if (msg == null)
+       return classname;
+     return (classname == null ? "" : classname + "; ") + msg;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/InvalidObjectException.java gcc-4.1.0/libjava/classpath/java/io/InvalidObjectException.java
*** gcc-4.0.2/libjava/classpath/java/io/InvalidObjectException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/InvalidObjectException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,66 ----
+ /* InvalidObjectException.java -- deserialization failed verification
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when an object fails a validation test
+  * during serialization.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class InvalidObjectException extends ObjectStreamException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 3233174318281839583L;
+ 
+   /**
+    * Create an exception with a descriptive error message String. This should
+    * be the cause of the verification failure.
+    *
+    * @param message the descriptive error message
+    */
+   public InvalidObjectException(String message)
+   {
+     super(message);
+   }
+ } // class InvalidObjectException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/LineNumberInputStream.java gcc-4.1.0/libjava/classpath/java/io/LineNumberInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/LineNumberInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/LineNumberInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,315 ----
+ /* LineNumberInputStream.java -- An input stream which counts line numbers
+    Copyright (C) 1998, 1999, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This class functions like a standard <code>InputStream</code>
+  * except that it counts line numbers, and canonicalizes newline
+  * characters.  As data is read, whenever the byte sequences "\r",
+  * "\n", or "\r\n" are encountered, the running line count is
+  * incremeted by one.  Additionally, the whatever line termination
+  * sequence was encountered will be converted to a "\n" byte.  Note
+  * that this class numbers lines from 0.  When the first line
+  * terminator is encountered, the line number is incremented to 1, and
+  * so on.
+  * <p>
+  * This class counts only line termination characters.  If the last line
+  * read from the stream does not end in a line termination sequence, it
+  * will not be counted as a line.
+  * <p>
+  * Note that since this class operates as a filter on an underlying
+  * stream, it has the same mark/reset functionality as the underlying
+  * stream.  The <code>mark()</code> and <code>reset()</code> methods
+  * in this class handle line numbers correctly.  Calling
+  * <code>reset()</code> resets the line number to the point at which
+  * <code>mark()</code> was called if the subordinate stream supports
+  * that functionality.
+  * <p>
+  * @deprecated This class is deprecated in favor if
+  * <code>LineNumberReader</code> because it operates on ASCII bytes
+  * instead of an encoded character stream.  This class is for backward
+  * compatibility only and should not be used in new applications.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public class LineNumberInputStream extends FilterInputStream
+ {
+   /** The current line number. */
+   private int lineNumber = 0;
+ 
+   /** The line number when the stream was marked. */
+   private int markLineNumber = 0;
+ 
+   /** Flag to indicate a '\r' was just read so that an immediately
+    * subsequent '\n' can be ignored. */
+   private boolean justReadReturnChar = false;
+ 
+   /**
+    * Create a new <code>LineNumberInputStream</code> that reads from the 
+    * specified subordinate <code>InputStream</code>
+    *
+    * @param in The subordinate <code>InputStream</code> to read from
+    */
+   public LineNumberInputStream(InputStream in)
+   {
+     super(in);
+   }
+ 
+   /**
+    * This method returns the number of bytes that can be read from the
+    * stream before the stream can block.  This method is tricky
+    * because the subordinate <code>InputStream</code> might return
+    * only "\r\n" characters, which are replaced by a single "\n"
+    * character by the <code>read()</code> method of this class.  So
+    * this method can only guarantee that <code>in.available() /
+    * 2</code> bytes can actually be read before blocking.  In
+    * practice, considerably more bytes might be read before blocking
+    * <p>
+    * Note that the stream may not block if additional bytes beyond the count
+    * returned by this method are read.
+    *
+    * @return The number of bytes that can be read before blocking could occur
+    *
+    * @exception IOException If an error occurs
+    */
+   public int available() throws IOException
+   {
+     // We can only guarantee half the characters that might be available
+     // without blocking because "\r\n" is treated as a single character.
+     return in.available() / 2;
+   }
+ 
+   /**
+    * This method returns the current line number
+    *
+    * @return The current line number
+    */
+   public int getLineNumber()
+   {
+     return lineNumber;
+   }
+ 
+   /**
+    * This method marks a position in the input to which the stream can
+    * be "reset" byte calling the <code>reset()</code> method.  The
+    * parameter <code>readlimit</code> is the number of bytes that can
+    * be read from the stream after setting the mark before the mark
+    * becomes invalid.  For example, if <code>mark()</code> is called
+    * with a read limit of 10, then when 11 bytes of data are read from
+    * the stream before the <code>reset()</code> method is called, then
+    * the mark is invalid and the stream object instance is not
+    * required to remember the mark.
+    * <p>
+    * In this class, this method will remember the current line number
+    * as well as the current position in the stream.  When the
+    * <code>reset()</code> method is called, the line number will be
+    * restored to the saved line number in addition to the stream
+    * position.
+    * <p>
+    * This method only works if the subordinate stream supports mark/reset
+    * functionality.
+    *
+    * @param readlimit The number of bytes that can be read before the
+    * mark becomes invalid 
+    */
+   public void mark(int readlimit)
+   {
+     in.mark(readlimit);
+     markLineNumber = lineNumber;
+   }
+ 
+   /**
+    * This method reads an unsigned byte from the input stream and returns it
+    * as an int in the range of 0-255.  This method will return -1 if the
+    * end of the stream has been reached.
+    * <p>
+    * Note that if a line termination sequence is encountered (ie, "\r",
+    * "\n", or "\r\n") then that line termination sequence is converted to
+    * a single "\n" value which is returned from this method.  This means
+    * that it is possible this method reads two bytes from the subordinate
+    * stream instead of just one.
+    * <p>
+    * Note that this method will block until a byte of data is available
+    * to be read.
+    *
+    * @return The byte read or -1 if end of stream
+    * 
+    * @exception IOException If an error occurs
+    */
+   public int read() throws IOException
+   {
+     // Treat "\r\n" as a single character.  A '\r' may have been read by
+     // a previous call to read so we keep an internal flag to avoid having
+     // to read ahead.
+ 
+     int ch = in.read();
+ 
+     if (ch == '\n')
+       if (justReadReturnChar)
+ 	{
+ 	  ch = in.read();
+           justReadReturnChar = false;
+ 	}
+       else
+ 	lineNumber++;
+     else if (ch == '\r')
+       {
+ 	ch = '\n';
+ 	justReadReturnChar = true;
+ 	lineNumber++;
+       }
+     else
+       justReadReturnChar = false;
+ 
+     return ch;
+   }
+ 
+   /**
+    * This method reads bytes from a stream and stores them into a caller
+    * supplied buffer.  It starts storing data at index <code>offset</code> into
+    * the buffer and attemps to read <code>len</code> bytes.  This method can
+    * return before reading the number of bytes requested.  The actual number
+    * of bytes read is returned as an int.  A -1 is returned to indicated the
+    * end of the stream.
+    * <p>
+    * This method will block until some data can be read.
+    * <p>
+    * Note that if a line termination sequence is encountered (ie, "\r",
+    * "\n", or "\r\n") then that line termination sequence is converted to
+    * a single "\n" value which is stored in the buffer.  Only a single
+    * byte is counted towards the number of bytes read in this case.
+    *
+    * @param b The array into which the bytes read should be stored
+    * @param off The offset into the array to start storing bytes
+    * @param len The requested number of bytes to read
+    *
+    * @return The actual number of bytes read, or -1 if end of stream
+    *
+    * @exception IOException If an error occurs.
+    */
+   public int read(byte[] b, int off, int len) throws IOException
+   {
+     if (off < 0 || len < 0 || off + len > b.length)
+       throw new ArrayIndexOutOfBoundsException();
+ 
+     // This case always succeeds.
+     if (len == 0)
+       return 0;
+ 
+     // The simplest, though not necessarily the most time efficient thing
+     // to do is simply call read(void) len times.  Since this is a deprecated
+     // class, that should be ok.
+     final int origOff = off;
+     while (len-- > 0)
+       {
+ 	int ch = read();
+ 	if (ch < 0)
+ 	  break;
+ 
+ 	b[off++] = (byte) ch;
+       }
+ 
+     // This is safe since we already know that some bytes were
+     // actually requested.
+     return off == origOff ? -1 : off - origOff;
+   }
+ 
+   /**
+    * This method resets a stream to the point where the
+    * <code>mark()</code> method was called.  Any bytes that were read
+    * after the mark point was set will be re-read during subsequent
+    * reads.
+    * <p>
+    * In this class, this method will also restore the line number that was
+    * current when the <code>mark()</code> method was called.
+    *  <p>
+    * This method only works if the subordinate stream supports mark/reset
+    * functionality.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void reset() throws IOException
+   {
+     in.reset();
+     lineNumber = markLineNumber;
+     justReadReturnChar = false;
+   }
+ 
+   /**
+    * This method sets the current line number to the specified value.
+    * 
+    * @param lineNumber The new line number
+    */
+   public void setLineNumber(int lineNumber)
+   {
+     this.lineNumber = lineNumber;
+   }
+ 
+   /**
+    * This method skips up to the requested number of bytes in the 
+    * input stream.  The actual number of bytes skipped is returned.  If the
+    * desired number of bytes to skip is negative, no bytes are skipped.
+    *
+    * @param n requested number of bytes to skip.
+    *
+    * @return The actual number of bytes skipped.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public long skip(long n) throws IOException
+   {
+     if (n <= 0)
+       return 0L;
+ 
+     final long origN = n;
+ 
+     do
+       {
+ 	int ch = read();
+ 	if (ch < 0)
+ 	  break;
+ 	if (ch == '\n' || ch == '\r')
+ 	  lineNumber++;
+       }
+     while (--n > 0);
+ 
+     return origN - n;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/LineNumberReader.java gcc-4.1.0/libjava/classpath/java/io/LineNumberReader.java
*** gcc-4.0.2/libjava/classpath/java/io/LineNumberReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/LineNumberReader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,417 ----
+ /* LineNumberReader.java -- A character input stream which counts line numbers
+    Copyright (C) 1998, 1999, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ /**
+  * This class functions like a standard <code>Reader</code> except that it
+  * counts line numbers, and canonicalizes newline characters.  As data
+  * is read, whenever the char sequences "\r", "\n", or "\r\n" are encountered,
+  * the running line count is incremeted by one.  Additionally, the whatever
+  * line termination sequence was encountered will be converted to a "\n"
+  * char.  Note that this class numbers lines from 0.  When the first
+  * line terminator is encountered, the line number is incremented to 1, and
+  * so on.  Also note that actual "\r" and "\n" characters are looked for.
+  * The system dependent line separator sequence is ignored.
+  * <p>
+  * This class counts only line termination characters.  If the last line
+  * read from the stream does not end in a line termination sequence, it
+  * will not be counted as a line.
+  *
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Guilhem Lavaux (guilhem@kaffe.org)
+  * @date December 28, 2003.
+  */
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  *
+  * This implementation has the feature that if '\r' is read, it
+  * does not look for a '\n', but immediately returns '\n'.
+  * On the next read(), if a '\n' is read, it is skipped.
+  * This has the advantage that we do not read (and hang) unnecessarily.
+  *
+  * This implementation is also minimal in the number of fields it uses.
+  */
+ public class LineNumberReader extends BufferedReader
+ {
+   /** The current line number. */
+   private int lineNumber;
+   /** Whether we already found a new line in the former call. */
+   private boolean matchedNewLine;
+   /** The saved line number when calling mark() */
+   private int savedLineNumber;
+ 
+   /**
+     * Create a new <code>LineNumberReader</code> that reads from the
+     * specified subordinate <code>Reader</code>.  A default 8K char sized
+     * buffer will be used for reads.
+     *
+     * @param in The subordinate <code>Reader</code> to read from
+     */
+   public LineNumberReader(Reader in)
+   {
+     super(in, DEFAULT_BUFFER_SIZE);
+   }
+ 
+   /**
+     * This method initializes a new <code>LineNumberReader</code> to read
+     * from the specified subordinate <code>Reader</code> using the specified
+     * read buffer size.
+     *
+     * @param in The subordinate <code>Reader</code> to read from
+     * @param size The buffer size to use for reading
+     */
+   public LineNumberReader(Reader in, int size)
+   {
+     super(in, size);
+   }
+ 
+   /**
+     * This method returns the current line number
+     *
+     * @return The current line number
+     */
+   public int getLineNumber()
+   {
+     return lineNumber;
+   }
+ 
+   /**
+     * This method sets the current line number to the specified value.
+     *
+     * @param lineNumber The new line number
+     */
+   public void setLineNumber(int lineNumber)
+   {
+     this.lineNumber = lineNumber;
+   }
+ 
+   /**
+     * This method marks a position in the input to which the stream can be
+     * "reset" char calling the <code>reset()</code> method.  The parameter
+     * <code>readlimit</code> is the number of chars that can be read from the
+     * stream after setting the mark before the mark becomes invalid.   For
+     * example, if <code>mark()</code> is called with a read limit of 10,
+     * then when
+     * 11 chars of data are read from the stream before the <code>reset()</code>
+     * method is called, then the mark is invalid and the stream object
+     * instance is not required to remember the mark.
+     * <p>
+     * In this class, this method will remember the current line number as well
+     * as the current position in the stream.  When the <code>reset()</code>
+     * method
+     * is called, the line number will be restored to the saved line number in
+     * addition to the stream position.
+     *
+     * @param readLimit The number of chars that can be read before the
+     * mark becomes invalid
+     *
+     * @exception IOException If an error occurs
+     */
+   public void mark(int readLimit) throws IOException
+   {
+     if (readLimit < 0)
+       throw new IllegalArgumentException("Read-ahead limit is negative");
+ 
+     synchronized (lock)
+       {
+ 	// This is basically the same as BufferedReader.mark.
+ 	// However, if the previous character was a '\r', we need to
+ 	// save that 'r', in case the next character is a '\n'.
+ 	if (pos + readLimit > limit)
+ 	  {
+ 	    int saveCR = matchedNewLine ? 1 : 0;
+ 	    char[] old_buffer = buffer;
+ 	    if (readLimit > limit)
+ 	      buffer = new char[saveCR + readLimit];
+ 	    int copy_start = pos - saveCR;
+ 	    savedLineNumber = lineNumber;
+ 	    limit -= copy_start;
+ 	    System.arraycopy(old_buffer, copy_start, buffer, 0, limit);
+ 	    pos = saveCR;
+ 	  }
+ 	markPos = pos;
+       }
+   }
+ 
+   /**
+     * This method resets a stream to the point where the <code>mark()</code>
+     * method
+     * was called.  Any chars that were read after the mark point was set will
+     * be re-read during subsequent reads.
+     * <p>
+     * In this class, this method will also restore the line number that was
+     * current when the <code>mark()</code> method was called.
+     *
+     * @exception IOException If an error occurs
+     */
+   public void reset() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (markPos < 0)
+ 	  throw new IOException("mark never set or invalidated");
+ 	lineNumber = savedLineNumber;
+ 	pos = markPos;
+ 	matchedNewLine = (markPos > 0 && buffer[markPos-1] == '\r');
+       }
+   }
+ 
+   /**
+    * This private method fills the input buffer whatever pos is.
+    * Consequently pos should be checked before calling this method.
+    *
+    * @return the number of bytes actually read from the input stream or
+    * -1 if end of stream.
+    * @exception IOException If an error occurs.
+    */
+   private int fill() throws IOException
+   {
+     if (markPos >= 0 && limit == buffer.length)
+       markPos = -1;
+     if (markPos < 0)
+       pos = limit = 0;
+     int count = in.read(buffer, limit, buffer.length - limit);
+     if (count <= 0)
+       return -1;
+     limit += count;
+ 
+     return count;
+   }
+ 
+   /**
+     * This method reads an unsigned char from the input stream and returns it
+     * as an int in the range of 0-65535.  This method will return -1 if the
+     * end of the stream has been reached.
+     * <p>
+     * Note that if a line termination sequence is encountered (ie, "\r",
+     * "\n", or "\r\n") then that line termination sequence is converted to
+     * a single "\n" value which is returned from this method.  This means
+     * that it is possible this method reads two chars from the subordinate
+     * stream instead of just one.
+     * <p>
+     * Note that this method will block until a char of data is available
+     * to be read.
+     *
+     * @return The char read or -1 if end of stream
+     *
+     * @exception IOException If an error occurs
+     */
+   public int read() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	skipRedundantLF();
+ 	if (pos >= limit && fill() < 0)
+ 	  return -1;
+ 	char ch = buffer[pos++];
+ 	
+ 	if ((matchedNewLine = (ch == '\r')) || ch == '\n')
+ 	  {
+ 	    lineNumber++;
+ 	    return '\n';
+ 	  }
+ 	matchedNewLine = false;
+ 	return (int) ch;
+       }
+   }
+ 
+   /**
+     * This method reads chars from a stream and stores them into a caller
+     * supplied buffer.  It starts storing data at index <code>offset</code> into   
+     * the buffer and attemps to read <code>len</code> chars.  This method can
+     * return before reading the number of chars requested.  The actual number
+     * of chars read is returned as an int.  A -1 is returned to indicated the
+     * end of the stream.
+     * <p>
+     * This method will block until some data can be read.
+     * <p>
+     * Note that if a line termination sequence is encountered (ie, "\r",
+     * "\n", or "\r\n") then that line termination sequence is converted to
+     * a single "\n" value which is stored in the buffer.  Only a single
+     * char is counted towards the number of chars read in this case.
+     *
+     * @param buf The array into which the chars read should be stored
+     * @param offset The offset into the array to start storing chars
+     * @param count The requested number of chars to read
+     *
+     * @return The actual number of chars read, or -1 if end of stream
+     *
+     * @exception IOException If an error occurs.
+     * @exception NullPointerException If buf is null (in any case).
+     * @exception IndexOutOfBoundsException If buffer parameters (offset and
+     * count) lies outside of the buffer capacity.
+     */
+   public int read(char[] buf, int offset, int count) throws IOException
+   {
+     if (buf == null)
+       throw new NullPointerException();
+ 
+     if (offset + count > buf.length || offset < 0)
+       throw new IndexOutOfBoundsException();
+ 
+     if (count <= 0)
+       {
+ 	if (count < 0)
+ 	  throw new IndexOutOfBoundsException();
+ 	return 0;
+       }
+ 
+     synchronized (lock)
+       {
+ 	if (pos >= limit && fill() < 0)
+ 	  return -1;
+ 	
+ 	int start_offset = offset;
+ 	boolean matched = matchedNewLine;
+ 	
+ 	while (count-- > 0 && pos < limit)
+ 	  {
+ 	    char ch = buffer[pos++];
+ 	    if (ch == '\r')
+ 	      {
+ 		lineNumber++;
+ 		matched = true;
+ 	      }
+ 	    else if (ch == '\n' && !matched)
+ 	      lineNumber++;
+ 	    else
+ 	      matched = false;
+ 
+ 	    buf[offset++] = ch;
+ 	  }
+ 
+ 	matchedNewLine = matched;
+ 	return offset - start_offset;
+       }
+   }
+ 
+   private void skipRedundantLF() throws IOException
+   {
+     if (pos > 0 && matchedNewLine)
+       {
+ 	if (pos < limit)
+ 	  { // fast case
+ 	    if (buffer[pos] == '\n')
+ 	      pos++;
+ 	  }
+ 	else
+ 	  { // check whether the next buffer begins with '\n'.
+ 	    // in that case kill the '\n'.
+ 	    if (fill() <= 0)
+ 	      return;
+ 	    if (buffer[pos] == '\n')
+ 	      pos++;
+ 	  }
+ 	matchedNewLine = true;
+       }
+   }
+ 
+   /**
+     * This method reads a line of text from the input stream and returns
+     * it as a <code>String</code>.  A line is considered to be terminated
+     * by a "\r", "\n", or "\r\n" sequence, not by the system dependent line
+     * separator.
+     *
+     * @return The line read as a <code>String</code> or <code>null</code>
+     * if end of stream.
+     *
+     * @exception IOException If an error occurs
+     */
+   public String readLine() throws IOException
+   {
+     // BufferedReader.readLine already does this.  Shouldn't need to keep
+     // track of newlines (since the read method deals with this for us).
+     // But if the buffer is large, we may not call the read method at all
+     // and super.readLine can't increment lineNumber itself.
+     // Though it may seem kludgy, the safest thing to do is to save off
+     // lineNumber and increment it explicitly when we're done (iff we
+     // ended with a '\n' or '\r' as opposed to EOF).
+     //
+     // Also, we need to undo the special casing done by BufferedReader.readLine
+     // when a '\r' is the last char in the buffer.  That situation is marked
+     // by 'pos > limit'.
+     int tmpLineNumber = lineNumber;
+     skipRedundantLF();
+     String str = super.readLine();
+     if (pos > limit)
+       --pos;
+ 
+     // The only case where you mustn't increment the line number is you are
+     // at the EOS.
+     if (str != null)
+       lineNumber = tmpLineNumber + 1;
+ 
+     return str;
+   }
+ 
+   /**
+     * This method skips over characters in the stream.  This method will
+     * skip the specified number of characters if possible, but is not required
+     * to skip them all.  The actual number of characters skipped is returned.
+     * This method returns 0 if the specified number of chars is less than 1.
+     *
+     * @param count The specified number of chars to skip.
+     *
+     * @return The actual number of chars skipped.
+     *
+     * @exception IOException If an error occurs
+     */
+   public long skip (long count) throws IOException
+   {
+     if (count < 0)
+       throw new IllegalArgumentException("skip() value is negative");
+     if (count == 0)
+       return 0;
+ 
+     int skipped;
+     char[] buf = new char[1];
+ 
+     for (skipped = 0; skipped < count; skipped++)
+       {
+         int ch = read(buf, 0, 1);
+ 
+         if (ch < 0)
+           break;
+       }
+ 
+     return skipped;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/NotActiveException.java gcc-4.1.0/libjava/classpath/java/io/NotActiveException.java
*** gcc-4.0.2/libjava/classpath/java/io/NotActiveException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/NotActiveException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* NotActiveException.java -- thrown when serialization is not active
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when a problem occurs due to the fact that
+  * serialization is not active.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class NotActiveException extends ObjectStreamException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -3893467273049808895L;
+ 
+   /**
+    * Create an exception without a descriptive error message.
+    */
+   public NotActiveException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public NotActiveException(String message)
+   {
+     super(message);
+   }
+ } // class NotActiveException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/NotSerializableException.java gcc-4.1.0/libjava/classpath/java/io/NotSerializableException.java
*** gcc-4.0.2/libjava/classpath/java/io/NotSerializableException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/NotSerializableException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* NotSerializableException.java -- a Serializable class that isn't
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when a class implements Serializable because
+  * of a superclass, but should not be serialized.  The descriptive message
+  * will consist of the name of the class in question.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class NotSerializableException extends ObjectStreamException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 2906642554793891381L;
+ 
+   /**
+    * Create an exception without a descriptive error message.
+    */
+   public NotSerializableException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message, which should
+    * be the name of the class.
+    *
+    * @param message the descriptive error message
+    */
+   public NotSerializableException(String message)
+   {
+     super(message);
+   }
+ } // class NotSerializableException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ObjectInput.java gcc-4.1.0/libjava/classpath/java/io/ObjectInput.java
*** gcc-4.0.2/libjava/classpath/java/io/ObjectInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ObjectInput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* ObjectInput.java -- Read object data from a stream
+    Copyright (C) 1998,2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io; 
+ 
+ /**
+   * This interface extends the <code>DataInput</code> interface to provide a
+   * facility to read objects as well as primitive types from a stream.  It
+   * also has methods that allow input to be done in a manner similar to
+   * <code>InputStream</code>
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   *
+   * @see DataInput
+   */
+ public interface ObjectInput extends DataInput
+ {
+   /**
+     * This method returns the number of bytes that can be read without
+     * blocking.
+     *
+     * @return The number of bytes available before blocking
+     *
+     * @exception IOException If an error occurs
+     */
+   int available() throws IOException;
+ 
+   /**
+     * This method reading a byte of data from a stream.  It returns that byte
+     * as an <code>int</code>.  This method blocks if no data is available 
+     * to be read.
+     * 
+     * @return The byte of data read
+     *
+     * @exception IOException If an error occurs
+     */
+   int read() throws IOException;
+ 
+   /**
+     * This method reads raw bytes and stores them them a byte array buffer.
+     * Note that this method will block if no data is available.  However, 
+     * it will not necessarily block until it fills the entire buffer.  That is,
+     * a "short count" is possible.
+     *
+     * @param buf The byte array to receive the data read
+     *
+     * @return The actual number of bytes read or -1 if end of stream
+     *
+     * @exception IOException If an error occurs
+     */
+   int read(byte[] buf) throws IOException;
+ 
+   /**
+     * This method reads raw bytes and stores them in a byte array buffer
+     * <code>buf</code> starting at position <code>offset</code> into the 
+     * buffer.  A 
+     * maximum of <code>len</code> bytes will be read.  Note that this method
+     * blocks if no data is available, but will not necessarily block until
+     * it can read <code>len</code> bytes of data.  That is, a "short count" is
+     * possible.
+     *
+     * @param buf The byte array to receive the data read
+     * @param offset The offset into <code>buf</code> to start storing data
+     * @param len The maximum number of bytes to read
+     *
+     * @return The actual number of bytes read or -1 if end of stream
+     *
+     * @exception IOException If an error occurs
+     */
+   int read(byte[] buf, int offset, int len) throws IOException;
+ 
+   /**
+     * Reads an object instance and returns it.  If the class for the object
+     * being read cannot be found, then a <code>ClassNotFoundException</code>
+     * will be thrown.
+     *
+     * @return The object instance that was read
+     *
+     * @exception ClassNotFoundException If a class for the object cannot be 
+     * found
+     * @exception IOException If any other error occurs
+     */
+   Object readObject() 
+     throws ClassNotFoundException, IOException;
+ 
+   /**
+     * This method causes the specified number of bytes to be read and
+     * discarded.  It is possible that fewer than the requested number of bytes
+     * will actually be skipped.
+     *
+     * @param numBytes The number of bytes to skip
+     *
+     * @return The actual number of bytes skipped
+     *
+     * @exception IOException If an error occurs
+     */
+   long skip(long numBytes) throws IOException;
+ 
+   /**
+     * This method closes the input source
+     *
+     * @exception IOException If an error occurs
+     */
+   void close() throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ObjectInputStream.java gcc-4.1.0/libjava/classpath/java/io/ObjectInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/ObjectInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ObjectInputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1962 ----
+ /* ObjectInputStream.java -- Class used to read serialized objects
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.io.ObjectIdentityWrapper;
+ 
+ import java.lang.reflect.Array;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Modifier;
+ import java.lang.reflect.Proxy;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.util.Arrays;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.TreeSet;
+ import java.util.Vector;
+ 
+ public class ObjectInputStream extends InputStream
+   implements ObjectInput, ObjectStreamConstants
+ {
+   /**
+    * Creates a new <code>ObjectInputStream</code> that will do all of
+    * its reading from <code>in</code>.  This method also checks
+    * the stream by reading the header information (stream magic number
+    * and stream version).
+    *
+    * @exception IOException Reading stream header from underlying
+    * stream cannot be completed.
+    *
+    * @exception StreamCorruptedException An invalid stream magic
+    * number or stream version was read from the stream.
+    *
+    * @see #readStreamHeader()
+    */
+   public ObjectInputStream(InputStream in)
+     throws IOException, StreamCorruptedException
+   {
+     if (DEBUG)
+       {
+ 	String val = System.getProperty("gcj.dumpobjects");
+ 	if (dump == false && val != null && !val.equals(""))
+ 	  {
+ 	    dump = true;
+ 	    System.out.println ("Serialization debugging enabled");
+ 	  }
+ 	else if (dump == true && (val == null || val.equals("")))
+ 	  {
+ 	    dump = false;
+ 	    System.out.println ("Serialization debugging disabled");
+ 	  }
+       }
+ 
+     this.resolveEnabled = false;
+     this.blockDataPosition = 0;
+     this.blockDataBytes = 0;
+     this.blockData = new byte[BUFFER_SIZE];
+     this.blockDataInput = new DataInputStream(this);
+     this.realInputStream = new DataInputStream(in);
+     this.nextOID = baseWireHandle;
+     this.objectLookupTable = new Hashtable();
+     this.classLookupTable = new Hashtable();
+     setBlockDataMode(true);
+     readStreamHeader();
+   }
+ 
+ 
+   /**
+    * Returns the next deserialized object read from the underlying stream.
+    *
+    * This method can be overriden by a class by implementing
+    * <code>private void readObject (ObjectInputStream)</code>.
+    *
+    * If an exception is thrown from this method, the stream is left in
+    * an undefined state. This method can also throw Errors and 
+    * RuntimeExceptions if caused by existing readResolve() user code.
+    * 
+    * @return The object read from the underlying stream.
+    *
+    * @exception ClassNotFoundException The class that an object being
+    * read in belongs to cannot be found.
+    *
+    * @exception IOException Exception from underlying
+    * <code>InputStream</code>.
+    */
+   public final Object readObject()
+     throws ClassNotFoundException, IOException
+   {
+     if (this.useSubclassMethod)
+       return readObjectOverride();
+ 
+     Object ret_val;
+     boolean old_mode = setBlockDataMode(false);
+     byte marker = this.realInputStream.readByte();
+ 
+     if (DEBUG)
+       depth += 2;
+ 
+     if(dump) dumpElement("MARKER: 0x" + Integer.toHexString(marker) + " ");
+ 
+     try
+       {
+  	ret_val = parseContent(marker);
+       }
+     finally
+       {
+  	setBlockDataMode(old_mode);
+  	if (DEBUG)
+ 	  depth -= 2;
+       }
+     
+     return ret_val;
+   }
+ 
+    /**
+     * Handles a content block within the stream, which begins with a marker
+     * byte indicating its type.
+     *
+     * @param marker the byte marker.
+     * @return an object which represents the parsed content.
+     * @throws ClassNotFoundException if the class of an object being
+     *                                read in cannot be found.
+     * @throws IOException if invalid data occurs or one is thrown by the
+     *                     underlying <code>InputStream</code>.
+     */
+    private Object parseContent(byte marker)
+      throws ClassNotFoundException, IOException
+    {
+      Object ret_val;
+      boolean is_consumed = false;
+ 
+      switch (marker)
+        {
+        case TC_ENDBLOCKDATA:
+  	{
+  	  ret_val = null;
+  	  is_consumed = true;
+  	  break;
+  	}
+  	
+        case TC_BLOCKDATA:
+        case TC_BLOCKDATALONG:
+  	{
+  	  if (marker == TC_BLOCKDATALONG)
+  	    { if(dump) dumpElementln("BLOCKDATALONG"); }
+  	  else
+  	    { if(dump) dumpElementln("BLOCKDATA"); }
+  	  readNextBlock(marker);
+  	}
+  	
+        case TC_NULL:
+  	{
+  	  if(dump) dumpElementln("NULL");
+  	  ret_val = null;
+  	  break;
+  	}
+  	
+        case TC_REFERENCE:
+  	{
+  	  if(dump) dumpElement("REFERENCE ");
+  	  Integer oid = new Integer(this.realInputStream.readInt());
+  	  if(dump) dumpElementln(Integer.toHexString(oid.intValue()));
+  	  ret_val = ((ObjectIdentityWrapper)
+  		     this.objectLookupTable.get(oid)).object;
+  	  break;
+  	}
+  	
+        case TC_CLASS:
+  	{
+  	  if(dump) dumpElementln("CLASS");
+  	  ObjectStreamClass osc = (ObjectStreamClass)readObject();
+  	  Class clazz = osc.forClass();
+  	  assignNewHandle(clazz);
+  	  ret_val = clazz;
+  	  break;
+  	}
+  	
+        case TC_PROXYCLASSDESC:
+  	{
+  	  if(dump) dumpElementln("PROXYCLASS");
+  	  int n_intf = this.realInputStream.readInt();
+  	  String[] intfs = new String[n_intf];
+  	  for (int i = 0; i < n_intf; i++)
+  	    {
+  	      intfs[i] = this.realInputStream.readUTF();
+  	    }
+  	  
+  	  boolean oldmode = setBlockDataMode(true);
+  	  Class cl = resolveProxyClass(intfs);
+  	  setBlockDataMode(oldmode);
+  	  
+  	  ObjectStreamClass osc = lookupClass(cl);
+           if (osc.firstNonSerializableParentConstructor == null)
+             {
+               osc.realClassIsSerializable = true;
+               osc.fields = osc.fieldMapping = new ObjectStreamField[0];
+               try
+                 {
+                   osc.firstNonSerializableParentConstructor =
+                     Object.class.getConstructor(new Class[0]);
+                 }
+               catch (NoSuchMethodException x)
+                 {
+                   throw (InternalError)
+                     new InternalError("Object ctor missing").initCause(x);
+                 }
+             }
+  	  assignNewHandle(osc);
+  	  
+  	  if (!is_consumed)
+  	    {
+  	      byte b = this.realInputStream.readByte();
+  	      if (b != TC_ENDBLOCKDATA)
+  		throw new IOException("Data annotated to class was not consumed." + b);
+  	    }
+  	  else
+  	    is_consumed = false;
+  	  ObjectStreamClass superosc = (ObjectStreamClass)readObject();
+  	  osc.setSuperclass(superosc);
+  	  ret_val = osc;
+  	  break;
+  	}
+  	
+        case TC_CLASSDESC:
+  	{
+  	  ObjectStreamClass osc = readClassDescriptor();
+  	  
+  	  if (!is_consumed)
+  	    {
+  	      byte b = this.realInputStream.readByte();
+  	      if (b != TC_ENDBLOCKDATA)
+  		throw new IOException("Data annotated to class was not consumed." + b);
+  	    }
+  	  else
+  	    is_consumed = false;
+  	  
+  	  osc.setSuperclass ((ObjectStreamClass)readObject());
+  	  ret_val = osc;
+  	  break;
+  	}
+  	
+        case TC_STRING:
+        case TC_LONGSTRING:
+  	{
+  	  if(dump) dumpElement("STRING=");
+  	  String s = this.realInputStream.readUTF();
+  	  if(dump) dumpElementln(s);
+  	  ret_val = processResolution(null, s, assignNewHandle(s));
+  	  break;
+  	}
+  
+        case TC_ARRAY:
+  	{
+  	  if(dump) dumpElementln("ARRAY");
+  	  ObjectStreamClass osc = (ObjectStreamClass)readObject();
+  	  Class componentType = osc.forClass().getComponentType();
+  	  if(dump) dumpElement("ARRAY LENGTH=");
+  	  int length = this.realInputStream.readInt();
+  	  if(dump) dumpElementln (length + "; COMPONENT TYPE=" + componentType);
+  	  Object array = Array.newInstance(componentType, length);
+  	  int handle = assignNewHandle(array);
+  	  readArrayElements(array, componentType);
+  	  if(dump)
+  	    for (int i = 0, len = Array.getLength(array); i < len; i++)
+  	      dumpElementln("  ELEMENT[" + i + "]=" + Array.get(array, i));
+  	  ret_val = processResolution(null, array, handle);
+  	  break;
+  	}
+  	
+        case TC_OBJECT:
+  	{
+  	  if(dump) dumpElementln("OBJECT");
+  	  ObjectStreamClass osc = (ObjectStreamClass)readObject();
+  	  Class clazz = osc.forClass();
+  	  
+  	  if (!osc.realClassIsSerializable)
+  	    throw new NotSerializableException
+  	      (clazz + " is not Serializable, and thus cannot be deserialized.");
+  	  
+  	  if (osc.realClassIsExternalizable)
+ 	    {
+  	      Externalizable obj = osc.newInstance();
+ 	      
+  	      int handle = assignNewHandle(obj);
+ 	      
+  	      boolean read_from_blocks = ((osc.getFlags() & SC_BLOCK_DATA) != 0);
+ 	      
+  	      boolean oldmode = this.readDataFromBlock;
+  	      if (read_from_blocks)
+  		setBlockDataMode(true);
+ 	      
+  	      obj.readExternal(this);
+  	      
+  	      if (read_from_blocks)
+                 {
+  		  setBlockDataMode(oldmode);
+  		  if (!oldmode)
+  		    if (this.realInputStream.readByte() != TC_ENDBLOCKDATA)
+  		      throw new IOException("No end of block data seen for class with readExternal (ObjectInputStream) method.");
+ 		}
+ 
+  	      ret_val = processResolution(osc, obj, handle);
+               break;
+ 	      
+  	    } // end if (osc.realClassIsExternalizable)
+  	  
+  	  Object obj = newObject(clazz, osc.firstNonSerializableParentConstructor);
+  	  
+  	  int handle = assignNewHandle(obj);
+  	  Object prevObject = this.currentObject;
+  	  ObjectStreamClass prevObjectStreamClass = this.currentObjectStreamClass;
+ 	  TreeSet prevObjectValidators = this.currentObjectValidators;
+  	  
+  	  this.currentObject = obj;
+ 	  this.currentObjectValidators = null;
+  	  ObjectStreamClass[] hierarchy =
+  	    inputGetObjectStreamClasses(clazz);
+  	  
+  	  for (int i = 0; i < hierarchy.length; i++)      
+           {
+  	      this.currentObjectStreamClass = hierarchy[i];
+  	      if(dump) dumpElementln("Reading fields of " + this.currentObjectStreamClass.getName ());
+   	      
+  	      // XXX: should initialize fields in classes in the hierarchy
+  	      // that aren't in the stream
+  	      // should skip over classes in the stream that aren't in the
+  	      // real classes hierarchy
+   	      
+  	      Method readObjectMethod = this.currentObjectStreamClass.readObjectMethod;
+  	      if (readObjectMethod != null)
+  		{
+  		  fieldsAlreadyRead = false;
+  		  boolean oldmode = setBlockDataMode(true);
+  		  callReadMethod(readObjectMethod, this.currentObjectStreamClass.forClass(), obj);
+  		  setBlockDataMode(oldmode);
+  		}
+  	      else
+  		{
+  		  readFields(obj, currentObjectStreamClass);
+  		}
+   	      
+  	      if (this.currentObjectStreamClass.hasWriteMethod())
+   		{
+  		  if(dump) dumpElement("ENDBLOCKDATA? ");
+  		  try
+   		    {
+  		      /* Read blocks until an end marker */
+  		      byte writeMarker = this.realInputStream.readByte();
+  		      while (writeMarker != TC_ENDBLOCKDATA)
+ 			{	
+  			  parseContent(writeMarker);
+  			  writeMarker = this.realInputStream.readByte();
+ 			}
+  		      if(dump) dumpElementln("yes");
+  		    }
+  		  catch (EOFException e)
+  		    {
+  		      throw (IOException) new IOException
+  			("No end of block data seen for class with readObject (ObjectInputStream) method.").initCause(e);
+ 		    }
+ 		}
+ 	    }
+  	  
+  	  this.currentObject = prevObject;
+  	  this.currentObjectStreamClass = prevObjectStreamClass;
+  	  ret_val = processResolution(osc, obj, handle);
+ 	  if (currentObjectValidators != null)
+ 	    invokeValidators();
+ 	  this.currentObjectValidators = prevObjectValidators;
+ 
+  	  break;
+  	}
+ 	
+        case TC_RESET:
+  	if(dump) dumpElementln("RESET");
+  	clearHandles();
+  	ret_val = readObject();
+  	break;
+ 	
+        case TC_EXCEPTION:
+  	{
+  	  if(dump) dumpElement("EXCEPTION=");
+  	  Exception e = (Exception)readObject();
+  	  if(dump) dumpElementln(e.toString());
+  	  clearHandles();
+  	  throw new WriteAbortedException("Exception thrown during writing of stream", e);
+  	}
+ 	
+        default:
+  	throw new IOException("Unknown marker on stream: " + marker);
+       }
+     return ret_val;
+   }
+ 
+   /**
+    * This method makes a partial check of types for the fields
+    * contained given in arguments. It checks primitive types of
+    * fields1 against non primitive types of fields2. This method 
+    * assumes the two lists has already been sorted according to 
+    * the Java specification.
+    *
+    * @param name Name of the class owning the given fields.
+    * @param fields1 First list to check.
+    * @param fields2 Second list to check.
+    * @throws InvalidClassException if a field in fields1, which has a primitive type, is a present
+    * in the non primitive part in fields2.
+    */
+   private void checkTypeConsistency(String name, ObjectStreamField[] fields1, ObjectStreamField[] fields2)
+     throws InvalidClassException
+   {
+     int nonPrimitive = 0;
+     
+     for (nonPrimitive = 0; 
+ 	 nonPrimitive < fields1.length
+ 	   && fields1[nonPrimitive].isPrimitive(); nonPrimitive++)
+       {
+       }
+ 
+     if (nonPrimitive == fields1.length)
+       return;
+     
+     int i = 0;
+     ObjectStreamField f1;
+     ObjectStreamField f2;
+     
+     while (i < fields2.length
+ 	   && nonPrimitive < fields1.length)
+       {
+ 	f1 = fields1[nonPrimitive];
+ 	f2 = fields2[i];
+ 	
+ 	if (!f2.isPrimitive())
+ 	  break;
+ 
+ 	int compVal = f1.getName().compareTo (f2.getName());
+ 
+ 	if (compVal < 0)
+ 	  {
+ 	    nonPrimitive++;
+ 	  }
+ 	else if (compVal > 0)
+ 	  {
+ 	    i++;
+ 	  }
+ 	else
+ 	  {
+ 	    throw new InvalidClassException
+ 	      ("invalid field type for " + f2.getName() +
+ 	       " in class " + name);
+ 	  }
+       }
+   }
+ 
+   /**
+    * This method reads a class descriptor from the real input stream
+    * and use these data to create a new instance of ObjectStreamClass.
+    * Fields are sorted and ordered for the real read which occurs for
+    * each instance of the described class. Be aware that if you call that
+    * method you must ensure that the stream is synchronized, in the other
+    * case it may be completely desynchronized.
+    *
+    * @return A new instance of ObjectStreamClass containing the freshly
+    * created descriptor.
+    * @throws ClassNotFoundException if the required class to build the
+    * descriptor has not been found in the system.
+    * @throws IOException An input/output error occured.
+    * @throws InvalidClassException If there was a compatibility problem
+    * between the class present in the system and the serialized class.
+    */
+   protected ObjectStreamClass readClassDescriptor()
+     throws ClassNotFoundException, IOException
+   {
+     if(dump) dumpElement("CLASSDESC NAME=");
+     String name = this.realInputStream.readUTF();
+     if(dump) dumpElement(name + "; UID=");
+     long uid = this.realInputStream.readLong ();
+     if(dump) dumpElement(Long.toHexString(uid) + "; FLAGS=");
+     byte flags = this.realInputStream.readByte ();
+     if(dump) dumpElement(Integer.toHexString(flags) + "; FIELD COUNT=");
+     short field_count = this.realInputStream.readShort();
+     if(dump) dumpElementln(Short.toString(field_count));
+     ObjectStreamField[] fields = new ObjectStreamField[field_count];
+     ObjectStreamClass osc = new ObjectStreamClass(name, uid,
+ 						  flags, fields);
+     assignNewHandle(osc);
+ 
+     ClassLoader callersClassLoader = currentLoader();
+ 	      
+     for (int i = 0; i < field_count; i++)
+       {
+ 	if(dump) dumpElement("  TYPE CODE=");
+ 	char type_code = (char)this.realInputStream.readByte();
+ 	if(dump) dumpElement(type_code + "; FIELD NAME=");
+ 	String field_name = this.realInputStream.readUTF();
+ 	if(dump) dumpElementln(field_name);
+ 	String class_name;
+ 		  
+ 	// If the type code is an array or an object we must
+ 	// decode a String here. In the other case we convert
+ 	// the type code and pass it to ObjectStreamField.
+ 	// Type codes are decoded by gnu.java.lang.reflect.TypeSignature.
+ 	if (type_code == 'L' || type_code == '[')
+ 	  class_name = (String)readObject();
+ 	else
+ 	  class_name = String.valueOf(type_code);
+ 		  
+ 	fields[i] =
+ 	  new ObjectStreamField(field_name, class_name, callersClassLoader);
+       }
+ 	      
+     /* Now that fields have been read we may resolve the class
+      * (and read annotation if needed). */
+     Class clazz = resolveClass(osc);
+     boolean oldmode = setBlockDataMode(true);
+     osc.setClass(clazz, lookupClass(clazz.getSuperclass()));
+     classLookupTable.put(clazz, osc);
+     setBlockDataMode(oldmode);
+ 
+     // find the first non-serializable, non-abstract
+     // class in clazz's inheritance hierarchy
+     Class first_nonserial = clazz.getSuperclass();
+     // Maybe it is a primitive class, those don't have a super class,
+     // or Object itself.  Otherwise we can keep getting the superclass
+     // till we hit the Object class, or some other non-serializable class.
+ 
+     if (first_nonserial == null)
+       first_nonserial = clazz;
+     else
+       while (Serializable.class.isAssignableFrom(first_nonserial)
+ 	     || Modifier.isAbstract(first_nonserial.getModifiers()))
+ 	first_nonserial = first_nonserial.getSuperclass();
+ 
+     final Class local_constructor_class = first_nonserial;
+ 
+     osc.firstNonSerializableParentConstructor =
+         (Constructor)AccessController.doPrivileged(new PrivilegedAction()
+           {
+             public Object run()
+             {
+               try
+                 {
+                   Constructor c = local_constructor_class.
+                                     getDeclaredConstructor(new Class[0]);
+                   if (Modifier.isPrivate(c.getModifiers()))
+                     return null;
+                   return c;
+                 }
+               catch (NoSuchMethodException e)
+                 {
+                   // error will be reported later, in newObject()
+                   return null;
+                 }
+             }
+           });
+ 
+     osc.realClassIsSerializable = Serializable.class.isAssignableFrom(clazz);
+     osc.realClassIsExternalizable = Externalizable.class.isAssignableFrom(clazz);
+ 
+     ObjectStreamField[] stream_fields = osc.fields;
+     ObjectStreamField[] real_fields = ObjectStreamClass.lookupForClassObject(clazz).fields;
+     ObjectStreamField[] fieldmapping = new ObjectStreamField[2 * Math.max(stream_fields.length, real_fields.length)];
+ 
+     int stream_idx = 0;
+     int real_idx = 0;
+     int map_idx = 0;
+ 
+     /*
+      * Check that there is no type inconsistencies between the lists.
+      * A special checking must be done for the two groups: primitive types and
+      * not primitive types. 
+      */
+     checkTypeConsistency(name, real_fields, stream_fields);
+     checkTypeConsistency(name, stream_fields, real_fields);
+ 
+     
+     while (stream_idx < stream_fields.length
+ 	   || real_idx < real_fields.length)
+       {
+ 	ObjectStreamField stream_field = null;
+ 	ObjectStreamField real_field = null;
+ 
+ 	if (stream_idx == stream_fields.length)
+ 	  {
+ 	    real_field = real_fields[real_idx++];
+ 	  }
+ 	else if (real_idx == real_fields.length)
+ 	  {
+ 	    stream_field = stream_fields[stream_idx++];
+ 	  }
+ 	else
+ 	  {
+ 	    int comp_val =
+ 	      real_fields[real_idx].compareTo (stream_fields[stream_idx]);
+ 
+ 	    if (comp_val < 0)
+ 	      {
+ 		real_field = real_fields[real_idx++];
+ 	      }
+ 	    else if (comp_val > 0)
+ 	      {
+ 		stream_field = stream_fields[stream_idx++];
+ 	      }
+ 	    else
+ 	      {
+ 		stream_field = stream_fields[stream_idx++];
+ 		real_field = real_fields[real_idx++];
+ 		if (stream_field.getType() != real_field.getType())
+ 		  throw new InvalidClassException
+ 		    ("invalid field type for " + real_field.getName() +
+ 		     " in class " + name);
+ 	      }
+ 	  }
+ 
+ 	/* If some of stream_fields does not correspond to any of real_fields,
+ 	 * or the opposite, then fieldmapping will go short.
+ 	 */
+ 	if (map_idx == fieldmapping.length)
+ 	  {
+ 	    ObjectStreamField[] newfieldmapping =
+ 	      new ObjectStreamField[fieldmapping.length + 2];
+ 	    System.arraycopy(fieldmapping, 0,
+ 			     newfieldmapping, 0, fieldmapping.length);
+ 	    fieldmapping = newfieldmapping;
+ 	  }
+ 	fieldmapping[map_idx++] = stream_field;
+ 	fieldmapping[map_idx++] = real_field;
+       }
+     osc.fieldMapping = fieldmapping;
+ 
+     return osc;
+   }
+ 
+   /**
+    * Reads the current objects non-transient, non-static fields from
+    * the current class from the underlying output stream.
+    *
+    * This method is intended to be called from within a object's
+    * <code>private void readObject (ObjectInputStream)</code>
+    * method.
+    *
+    * @exception ClassNotFoundException The class that an object being
+    * read in belongs to cannot be found.
+    *
+    * @exception NotActiveException This method was called from a
+    * context other than from the current object's and current class's
+    * <code>private void readObject (ObjectInputStream)</code>
+    * method.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code>.
+    */
+   public void defaultReadObject()
+     throws ClassNotFoundException, IOException, NotActiveException
+   {
+     if (this.currentObject == null || this.currentObjectStreamClass == null)
+       throw new NotActiveException("defaultReadObject called by non-active"
+ 				   + " class and/or object");
+ 
+     if (fieldsAlreadyRead)
+       throw new NotActiveException("defaultReadObject called but fields "
+ 				   + "already read from stream (by "
+ 				   + "defaultReadObject or readFields)");
+ 
+     boolean oldmode = setBlockDataMode(false);
+     readFields(this.currentObject, this.currentObjectStreamClass);
+     setBlockDataMode(oldmode);
+ 
+     fieldsAlreadyRead = true;
+   }
+ 
+ 
+   /**
+    * Registers a <code>ObjectInputValidation</code> to be carried out
+    * on the object graph currently being deserialized before it is
+    * returned to the original caller of <code>readObject ()</code>.
+    * The order of validation for multiple
+    * <code>ObjectInputValidation</code>s can be controled using
+    * <code>priority</code>.  Validators with higher priorities are
+    * called first.
+    *
+    * @see java.io.ObjectInputValidation
+    *
+    * @exception InvalidObjectException <code>validator</code> is
+    * <code>null</code>
+    *
+    * @exception NotActiveException an attempt was made to add a
+    * validator outside of the <code>readObject</code> method of the
+    * object currently being deserialized
+    */
+   public void registerValidation(ObjectInputValidation validator,
+ 				 int priority)
+     throws InvalidObjectException, NotActiveException
+   {
+     if (this.currentObject == null || this.currentObjectStreamClass == null)
+       throw new NotActiveException("registerValidation called by non-active "
+ 				   + "class and/or object");
+ 
+     if (validator == null)
+       throw new InvalidObjectException("attempt to add a null "
+ 				       + "ObjectInputValidation object");
+ 
+     if (currentObjectValidators == null)
+       currentObjectValidators = new TreeSet();
+     
+     currentObjectValidators.add(new ValidatorAndPriority(validator, priority));
+   }
+ 
+ 
+   /**
+    * Called when a class is being deserialized.  This is a hook to
+    * allow subclasses to read in information written by the
+    * <code>annotateClass (Class)</code> method of an
+    * <code>ObjectOutputStream</code>.
+    *
+    * This implementation looks up the active call stack for a
+    * <code>ClassLoader</code>; if a <code>ClassLoader</code> is found,
+    * it is used to load the class associated with <code>osc</code>,
+    * otherwise, the default system <code>ClassLoader</code> is used.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code>.
+    *
+    * @see java.io.ObjectOutputStream#annotateClass (java.lang.Class)
+    */
+   protected Class resolveClass(ObjectStreamClass osc)
+     throws ClassNotFoundException, IOException
+   {
+     String name = osc.getName();
+     try
+       {
+         return Class.forName(name, true, currentLoader());
+       }
+     catch(ClassNotFoundException x)
+       {
+         if (name.equals("void"))
+           return Void.TYPE;
+         else if (name.equals("boolean"))
+           return Boolean.TYPE;
+         else if (name.equals("byte"))
+           return Byte.TYPE;
+         else if (name.equals("char"))
+           return Character.TYPE;
+         else if (name.equals("short"))
+           return Short.TYPE;
+         else if (name.equals("int"))
+           return Integer.TYPE;
+         else if (name.equals("long"))
+           return Long.TYPE;
+         else if (name.equals("float"))
+           return Float.TYPE;
+         else if (name.equals("double"))
+           return Double.TYPE;
+         else
+           throw x;
+       }
+   }
+ 
+   /**
+    * Returns the most recent user defined ClassLoader on the execution stack
+    * or null if none is found.
+    */
+   private ClassLoader currentLoader()
+   {
+     return VMObjectInputStream.currentClassLoader();
+   }
+ 
+   /**
+    * Lookup a class stored in the local hashtable. If it is not
+    * use the global lookup function in ObjectStreamClass to build
+    * the ObjectStreamClass. This method is requested according to
+    * the behaviour detected in the JDK by Kaffe's team.
+    *
+    * @param clazz Class to lookup in the hash table or for which
+    * we must build a descriptor.
+    * @return A valid instance of ObjectStreamClass corresponding
+    * to the specified class.
+    */
+   private ObjectStreamClass lookupClass(Class clazz)
+   {
+     if (clazz == null)
+       return null;
+ 
+     ObjectStreamClass oclazz;
+     oclazz = (ObjectStreamClass)classLookupTable.get(clazz);
+     if (oclazz == null)
+       return ObjectStreamClass.lookup(clazz);
+     else
+       return oclazz;
+   }
+ 
+   /**
+    * Reconstruct class hierarchy the same way
+    * {@link java.io.ObjectStreamClass#getObjectStreamClasses(Class)} does
+    * but using lookupClass instead of ObjectStreamClass.lookup. This
+    * dup is necessary localize the lookup table. Hopefully some future
+    * rewritings will be able to prevent this.
+    *
+    * @param clazz This is the class for which we want the hierarchy.
+    *
+    * @return An array of valid {@link java.io.ObjectStreamClass} instances which
+    * represent the class hierarchy for clazz.
+    */
+   private ObjectStreamClass[] inputGetObjectStreamClasses(Class clazz)
+   {
+     ObjectStreamClass osc = lookupClass(clazz);
+ 
+     if (osc == null)
+       return new ObjectStreamClass[0];
+     else
+       {
+         Vector oscs = new Vector();
+ 
+         while (osc != null)
+           {
+             oscs.addElement(osc);
+             osc = osc.getSuper();
+ 	  }
+ 
+         int count = oscs.size();
+ 	ObjectStreamClass[] sorted_oscs = new ObjectStreamClass[count];
+ 
+         for (int i = count - 1; i >= 0; i--)
+           sorted_oscs[count - i - 1] = (ObjectStreamClass) oscs.elementAt(i);
+ 
+         return sorted_oscs;
+       }
+   }
+ 
+   /**
+    * Allows subclasses to resolve objects that are read from the
+    * stream with other objects to be returned in their place.  This
+    * method is called the first time each object is encountered.
+    *
+    * This method must be enabled before it will be called in the
+    * serialization process.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code>.
+    *
+    * @see #enableResolveObject(boolean)
+    */
+   protected Object resolveObject(Object obj) throws IOException
+   {
+     return obj;
+   }
+ 
+ 
+   protected Class resolveProxyClass(String[] intfs)
+     throws IOException, ClassNotFoundException
+   {
+     ClassLoader cl = currentLoader();
+     
+     Class[] clss = new Class[intfs.length];
+     if(cl == null)
+       {
+ 	for (int i = 0; i < intfs.length; i++)
+ 	  clss[i] = Class.forName(intfs[i]);
+ 	cl = ClassLoader.getSystemClassLoader();
+       }
+     else
+       for (int i = 0; i < intfs.length; i++)
+ 	clss[i] = Class.forName(intfs[i], false, cl);
+     try 
+       {
+ 	return Proxy.getProxyClass(cl, clss);
+       } 
+     catch (IllegalArgumentException e) 
+       {
+ 	throw new ClassNotFoundException(null, e);
+       }
+   }
+   
+   /**
+    * If <code>enable</code> is <code>true</code> and this object is
+    * trusted, then <code>resolveObject (Object)</code> will be called
+    * in subsequent calls to <code>readObject (Object)</code>.
+    * Otherwise, <code>resolveObject (Object)</code> will not be called.
+    *
+    * @exception SecurityException This class is not trusted.
+    */
+   protected boolean enableResolveObject (boolean enable)
+     throws SecurityException
+   {
+     if (enable)
+       {
+ 	SecurityManager sm = System.getSecurityManager();
+ 	if (sm != null)
+ 	  sm.checkPermission(new SerializablePermission("enableSubstitution"));
+       }
+ 
+     boolean old_val = this.resolveEnabled;
+     this.resolveEnabled = enable;
+     return old_val;
+   }
+ 
+   /**
+    * Reads stream magic and stream version information from the
+    * underlying stream.
+    *
+    * @exception IOException Exception from underlying stream.
+    *
+    * @exception StreamCorruptedException An invalid stream magic
+    * number or stream version was read from the stream.
+    */
+   protected void readStreamHeader()
+     throws IOException, StreamCorruptedException
+   {
+     if(dump) dumpElement("STREAM MAGIC ");
+     if (this.realInputStream.readShort() != STREAM_MAGIC)
+       throw new StreamCorruptedException("Invalid stream magic number");
+ 
+     if(dump) dumpElementln("STREAM VERSION ");
+     if (this.realInputStream.readShort() != STREAM_VERSION)
+       throw new StreamCorruptedException("Invalid stream version number");
+   }
+ 
+   public int read() throws IOException
+   {
+     if (this.readDataFromBlock)
+       {
+ 	if (this.blockDataPosition >= this.blockDataBytes)
+ 	  readNextBlock();
+ 	return (this.blockData[this.blockDataPosition++] & 0xff);
+       }
+     else
+       return this.realInputStream.read();
+   }
+ 
+   public int read(byte[] data, int offset, int length) throws IOException
+   {
+     if (this.readDataFromBlock)
+       {
+         int remain = this.blockDataBytes - this.blockDataPosition;
+         if (remain == 0)
+           {
+             readNextBlock();
+             remain = this.blockDataBytes - this.blockDataPosition;
+           }
+         length = Math.min(length, remain);
+ 	System.arraycopy(this.blockData, this.blockDataPosition,
+ 			 data, offset, length);
+ 	this.blockDataPosition += length;
+ 
+ 	return length;
+       }
+     else
+       return this.realInputStream.read(data, offset, length);
+   }
+ 
+   public int available() throws IOException
+   {
+     if (this.readDataFromBlock)
+       {
+ 	if (this.blockDataPosition >= this.blockDataBytes)
+ 	  readNextBlock ();
+ 
+ 	return this.blockDataBytes - this.blockDataPosition;
+       }
+     else
+       return this.realInputStream.available();
+   }
+ 
+   public void close() throws IOException
+   {
+     this.realInputStream.close();
+   }
+ 
+   public boolean readBoolean() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 1)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode (true);
+     boolean value = this.dataInputStream.readBoolean ();
+     if (switchmode)
+       setBlockDataMode (oldmode);
+     return value;
+   }
+ 
+   public byte readByte() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 1)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode(true);
+     byte value = this.dataInputStream.readByte();
+     if (switchmode)
+       setBlockDataMode(oldmode);
+     return value;
+   }
+ 
+   public int readUnsignedByte() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 1)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode(true);
+     int value = this.dataInputStream.readUnsignedByte();
+     if (switchmode)
+       setBlockDataMode(oldmode);
+     return value;
+   }
+ 
+   public short readShort() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 2)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode(true);
+     short value = this.dataInputStream.readShort();
+     if (switchmode)
+       setBlockDataMode(oldmode);
+     return value;
+   }
+ 
+   public int readUnsignedShort() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 2)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode(true);
+     int value = this.dataInputStream.readUnsignedShort();
+     if (switchmode)
+       setBlockDataMode(oldmode);
+     return value;
+   }
+ 
+   public char readChar() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 2)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode(true);
+     char value = this.dataInputStream.readChar();
+     if (switchmode)
+       setBlockDataMode(oldmode);
+     return value;
+   }
+ 
+   public int readInt() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 4)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode(true);
+     int value = this.dataInputStream.readInt();
+     if (switchmode)
+       setBlockDataMode(oldmode);
+     return value;
+   }
+ 
+   public long readLong() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 8)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode(true);
+     long value = this.dataInputStream.readLong();
+     if (switchmode)
+       setBlockDataMode(oldmode);
+     return value;
+   }
+ 
+   public float readFloat() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 4)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode(true);
+     float value = this.dataInputStream.readFloat();
+     if (switchmode)
+       setBlockDataMode(oldmode);
+     return value;
+   }
+ 
+   public double readDouble() throws IOException
+   {
+     boolean switchmode = true;
+     boolean oldmode = this.readDataFromBlock;
+     if (!oldmode || this.blockDataBytes - this.blockDataPosition >= 8)
+       switchmode = false;
+     if (switchmode)
+       oldmode = setBlockDataMode(true);
+     double value = this.dataInputStream.readDouble();
+     if (switchmode)
+       setBlockDataMode(oldmode);
+     return value;
+   }
+ 
+   public void readFully(byte data[]) throws IOException
+   {
+     this.dataInputStream.readFully(data);
+   }
+ 
+   public void readFully(byte data[], int offset, int size)
+     throws IOException
+   {
+     this.dataInputStream.readFully(data, offset, size);
+   }
+ 
+   public int skipBytes(int len) throws IOException
+   {
+     return this.dataInputStream.skipBytes(len);
+   }
+ 
+   /**
+    * @deprecated
+    * @see java.io.DataInputStream#readLine ()
+    */
+   public String readLine() throws IOException
+   {
+     return this.dataInputStream.readLine();
+   }
+ 
+   public String readUTF() throws IOException
+   {
+     return this.dataInputStream.readUTF();
+   }
+ 
+   /**
+    * This class allows a class to specify exactly which fields should
+    * be read, and what values should be read for these fields.
+    *
+    * XXX: finish up comments
+    */
+   public abstract static class GetField
+   {
+     public abstract ObjectStreamClass getObjectStreamClass();
+ 
+     public abstract boolean defaulted(String name)
+       throws IOException, IllegalArgumentException;
+ 
+     public abstract boolean get(String name, boolean defvalue)
+       throws IOException, IllegalArgumentException;
+ 
+     public abstract char get(String name, char defvalue)
+       throws IOException, IllegalArgumentException;
+ 
+     public abstract byte get(String name, byte defvalue)
+       throws IOException, IllegalArgumentException;
+ 
+     public abstract short get(String name, short defvalue)
+       throws IOException, IllegalArgumentException;
+ 
+     public abstract int get(String name, int defvalue)
+       throws IOException, IllegalArgumentException;
+ 
+     public abstract long get(String name, long defvalue)
+       throws IOException, IllegalArgumentException;
+ 
+     public abstract float get(String name, float defvalue)
+       throws IOException, IllegalArgumentException;
+ 
+     public abstract double get(String name, double defvalue)
+       throws IOException, IllegalArgumentException;
+ 
+     public abstract Object get(String name, Object defvalue)
+       throws IOException, IllegalArgumentException;
+   }
+ 
+   /**
+    * This method should be called by a method called 'readObject' in the
+    * deserializing class (if present). It cannot (and should not)be called
+    * outside of it. Its goal is to read all fields in the real input stream
+    * and keep them accessible through the {@link GetField} class. Calling
+    * this method will not alter the deserializing object.
+    *
+    * @return A valid freshly created 'GetField' instance to get access to
+    * the deserialized stream.
+    * @throws IOException An input/output exception occured. 
+    * @throws ClassNotFoundException 
+    * @throws NotActiveException
+    */
+   public GetField readFields()
+     throws IOException, ClassNotFoundException, NotActiveException
+   {
+     if (this.currentObject == null || this.currentObjectStreamClass == null)
+       throw new NotActiveException("readFields called by non-active class and/or object");
+ 
+     if (prereadFields != null)
+       return prereadFields;
+ 
+     if (fieldsAlreadyRead)
+       throw new NotActiveException("readFields called but fields already read from"
+ 				   + " stream (by defaultReadObject or readFields)");
+ 
+     final ObjectStreamClass clazz = this.currentObjectStreamClass;
+     final byte[] prim_field_data = new byte[clazz.primFieldSize];
+     final Object[] objs = new Object[clazz.objectFieldCount];
+ 
+     // Apparently Block data is not used with GetField as per
+     // empirical evidence against JDK 1.2.  Also see Mauve test
+     // java.io.ObjectInputOutput.Test.GetPutField.
+     boolean oldmode = setBlockDataMode(false);
+     readFully(prim_field_data);
+     for (int i = 0; i < objs.length; ++ i)
+       objs[i] = readObject();
+     setBlockDataMode(oldmode);
+ 
+     prereadFields = new GetField()
+       {
+ 	public ObjectStreamClass getObjectStreamClass()
+ 	{
+ 	  return clazz;
+ 	}
+ 
+ 	public boolean defaulted(String name)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField f = clazz.getField(name);
+ 	  
+ 	  /* First if we have a serialized field use the descriptor */
+ 	  if (f != null)
+ 	    {
+ 	      /* It is in serialPersistentFields but setClass tells us
+ 	       * it should not be set. This value is defaulted.
+ 	       */
+ 	      if (f.isPersistent() && !f.isToSet())
+ 		return true;
+ 	      
+ 	      return false;
+ 	    }
+ 
+ 	  /* This is not a serialized field. There should be
+ 	   * a default value only if the field really exists.
+ 	   */
+ 	  try
+ 	    {
+ 	      return (clazz.forClass().getDeclaredField (name) != null);
+ 	    }
+ 	  catch (NoSuchFieldException e)
+ 	    {
+ 	      throw new IllegalArgumentException(e);
+ 	    }
+ 	}
+ 
+ 	public boolean get(String name, boolean defvalue)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field = getField(name, Boolean.TYPE);
+ 
+ 	  if (field == null)
+ 	    return defvalue;
+ 
+ 	  return prim_field_data[field.getOffset()] == 0 ? false : true;
+ 	}
+ 
+ 	public char get(String name, char defvalue)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field = getField(name, Character.TYPE);
+ 
+ 	  if (field == null)
+ 	    return defvalue;
+ 
+ 	  int off = field.getOffset();
+ 
+ 	  return (char)(((prim_field_data[off++] & 0xFF) << 8)
+ 			| (prim_field_data[off] & 0xFF));
+ 	}
+ 
+ 	public byte get(String name, byte defvalue)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field = getField(name, Byte.TYPE);
+ 
+ 	  if (field == null)
+ 	    return defvalue;
+ 
+ 	  return prim_field_data[field.getOffset()];
+ 	}
+ 
+ 	public short get(String name, short defvalue)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field = getField(name, Short.TYPE);
+ 
+ 	  if (field == null)
+ 	    return defvalue;
+ 
+ 	  int off = field.getOffset();
+ 
+ 	  return (short)(((prim_field_data[off++] & 0xFF) << 8)
+ 			 | (prim_field_data[off] & 0xFF));
+ 	}
+ 
+ 	public int get(String name, int defvalue)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field = getField(name, Integer.TYPE);
+ 
+ 	  if (field == null)
+ 	    return defvalue;
+ 
+ 	  int off = field.getOffset();
+ 
+ 	  return ((prim_field_data[off++] & 0xFF) << 24)
+ 	    | ((prim_field_data[off++] & 0xFF) << 16)
+ 	    | ((prim_field_data[off++] & 0xFF) << 8)
+ 	    | (prim_field_data[off] & 0xFF);
+ 	}
+ 
+ 	public long get(String name, long defvalue)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field = getField(name, Long.TYPE);
+ 
+ 	  if (field == null)
+ 	    return defvalue;
+ 
+ 	  int off = field.getOffset();
+ 
+ 	  return (long)(((prim_field_data[off++] & 0xFFL) << 56)
+ 			| ((prim_field_data[off++] & 0xFFL) << 48)
+ 			| ((prim_field_data[off++] & 0xFFL) << 40)
+ 			| ((prim_field_data[off++] & 0xFFL) << 32)
+ 			| ((prim_field_data[off++] & 0xFF) << 24)
+ 			| ((prim_field_data[off++] & 0xFF) << 16)
+ 			| ((prim_field_data[off++] & 0xFF) << 8)
+ 			| (prim_field_data[off] & 0xFF));
+ 	}
+ 
+ 	public float get(String name, float defvalue)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field = getField(name, Float.TYPE);
+ 
+ 	  if (field == null)
+ 	    return defvalue;
+ 
+ 	  int off = field.getOffset();
+ 
+ 	  return Float.intBitsToFloat(((prim_field_data[off++] & 0xFF) << 24)
+ 				      | ((prim_field_data[off++] & 0xFF) << 16)
+ 				      | ((prim_field_data[off++] & 0xFF) << 8)
+ 				      | (prim_field_data[off] & 0xFF));
+ 	}
+ 
+ 	public double get(String name, double defvalue)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field = getField(name, Double.TYPE);
+ 
+ 	  if (field == null)
+ 	    return defvalue;
+ 
+ 	  int off = field.getOffset();
+ 
+ 	  return Double.longBitsToDouble
+ 	    ( (long) (((prim_field_data[off++] & 0xFFL) << 56)
+ 		      | ((prim_field_data[off++] & 0xFFL) << 48)
+ 		      | ((prim_field_data[off++] & 0xFFL) << 40)
+ 		      | ((prim_field_data[off++] & 0xFFL) << 32)
+ 		      | ((prim_field_data[off++] & 0xFF) << 24)
+ 		      | ((prim_field_data[off++] & 0xFF) << 16)
+ 		      | ((prim_field_data[off++] & 0xFF) << 8)
+ 		      | (prim_field_data[off] & 0xFF)));
+ 	}
+ 
+ 	public Object get(String name, Object defvalue)
+ 	  throws IOException, IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field =
+ 	    getField(name, defvalue == null ? null : defvalue.getClass ());
+ 
+ 	  if (field == null)
+ 	    return defvalue;
+ 
+ 	  return objs[field.getOffset()];
+ 	}
+ 
+ 	private ObjectStreamField getField(String name, Class type)
+ 	  throws IllegalArgumentException
+ 	{
+ 	  ObjectStreamField field = clazz.getField(name);
+ 	  boolean illegal = false;
+ 
+           // XXX This code is horrible and needs to be rewritten!
+ 	  try
+ 	    {
+ 	      try
+ 		{
+ 		  Class field_type = field.getType();
+ 		  
+ 		  if (type == field_type ||
+ 		      (type == null && !field_type.isPrimitive()))
+ 		    {
+ 		      /* See defaulted */
+ 		      return field;
+ 		    }
+ 	 
+ 		  illegal = true;
+ 		  throw new IllegalArgumentException
+ 		    ("Field requested is of type "
+ 		     + field_type.getName()
+ 		     + ", but requested type was "
+ 		     + (type == null ?  "Object" : type.getName()));
+ 		}
+ 	      catch (NullPointerException _)
+ 		{
+ 		  /* Here we catch NullPointerException, because it may
+ 		     only come from the call 'field.getType()'. If field
+ 		     is null, we have to return null and classpath ethic
+ 		     say we must try to avoid 'if (xxx == null)'.
+ 		  */
+ 		}
+ 	      catch (IllegalArgumentException e)
+ 		{
+ 		  throw e;
+ 		}
+ 	      
+ 	      return null;
+ 	    }
+ 	  finally
+ 	    {
+ 	      /* If this is an unassigned field we should return
+ 	       * the default value.
+ 	       */
+ 	      if (!illegal && field != null && !field.isToSet() && field.isPersistent())
+ 		return null;
+ 
+ 	      /* We do not want to modify transient fields. They should
+ 	       * be left to 0.
+ 	       */
+ 	      try
+ 		{
+ 		  Field f = clazz.forClass().getDeclaredField(name);
+ 		  if (Modifier.isTransient(f.getModifiers()))
+ 		    throw new IllegalArgumentException
+ 		      ("no such field (non transient) " + name);
+ 		  if (field == null && f.getType() != type)
+ 		    throw new IllegalArgumentException
+ 		      ("Invalid requested type for field " + name);
+ 		}
+ 	      catch (NoSuchFieldException e)
+ 		{
+ 		  if (field == null)
+ 		    throw new IllegalArgumentException(e);
+ 		}
+ 	       
+ 	    }
+ 	}
+       };
+ 
+     fieldsAlreadyRead = true;
+     return prereadFields;
+   }
+ 
+   /**
+    * Protected constructor that allows subclasses to override
+    * deserialization.  This constructor should be called by subclasses
+    * that wish to override <code>readObject (Object)</code>.  This
+    * method does a security check <i>NOTE: currently not
+    * implemented</i>, then sets a flag that informs
+    * <code>readObject (Object)</code> to call the subclasses
+    * <code>readObjectOverride (Object)</code> method.
+    *
+    * @see #readObjectOverride()
+    */
+   protected ObjectInputStream()
+     throws IOException, SecurityException
+   {
+     SecurityManager sec_man = System.getSecurityManager();
+     if (sec_man != null)
+       sec_man.checkPermission(SUBCLASS_IMPLEMENTATION_PERMISSION);
+     this.useSubclassMethod = true;
+   }
+ 
+   /**
+    * This method allows subclasses to override the default
+    * de serialization mechanism provided by
+    * <code>ObjectInputStream</code>.  To make this method be used for
+    * writing objects, subclasses must invoke the 0-argument
+    * constructor on this class from their constructor.
+    *
+    * @see #ObjectInputStream()
+    */
+   protected Object readObjectOverride()
+     throws ClassNotFoundException, IOException, OptionalDataException
+   {
+     throw new IOException("Subclass of ObjectInputStream must implement readObjectOverride");
+   }
+ 
+   /**
+    * Assigns the next available handle to <code>obj</code>.
+    *
+    * @param obj The object for which we want a new handle.
+    * @return A valid handle for the specified object.
+    */
+   private int assignNewHandle(Object obj)
+   {
+     this.objectLookupTable.put(new Integer(this.nextOID),
+ 			       new ObjectIdentityWrapper(obj));
+     return this.nextOID++;
+   }
+ 
+   private Object processResolution(ObjectStreamClass osc, Object obj, int handle)
+     throws IOException
+   {
+     if (osc != null && obj instanceof Serializable)
+       {
+ 	try
+ 	  {
+ 	    Method m = osc.readResolveMethod; 
+ 	    if(m != null)
+ 	    {
+ 		obj = m.invoke(obj, new Object[] {});
+ 	    }
+ 	  }
+ 	catch (IllegalAccessException ignore)
+ 	  {
+ 	  }
+ 	catch (InvocationTargetException exception)
+ 	  {
+ 	    Throwable cause = exception.getCause();
+ 	    if (cause instanceof ObjectStreamException)
+ 	      throw (ObjectStreamException) cause;
+ 	    else if (cause instanceof RuntimeException)
+ 	      throw (RuntimeException) cause;
+ 	    else if (cause instanceof Error)
+ 	      throw (Error) cause;
+ 	  }
+       }
+ 
+     if (this.resolveEnabled)
+       obj = resolveObject(obj);
+ 
+     this.objectLookupTable.put(new Integer(handle),
+ 			       new ObjectIdentityWrapper(obj));
+ 
+     return obj;
+   }
+ 
+   private void clearHandles()
+   {
+     this.objectLookupTable.clear();
+     this.nextOID = baseWireHandle;
+   }
+ 
+   private void readNextBlock() throws IOException
+   {
+     readNextBlock(this.realInputStream.readByte());
+   }
+ 
+   private void readNextBlock(byte marker) throws IOException
+   {
+     if (marker == TC_BLOCKDATA)
+       {
+ 	if(dump) dumpElement("BLOCK DATA SIZE=");
+ 	this.blockDataBytes = this.realInputStream.readUnsignedByte();
+ 	if(dump) dumpElementln (Integer.toString(this.blockDataBytes));
+       }
+     else if (marker == TC_BLOCKDATALONG)
+       {
+ 	if(dump) dumpElement("BLOCK DATA LONG SIZE=");
+ 	this.blockDataBytes = this.realInputStream.readInt();
+ 	if(dump) dumpElementln (Integer.toString(this.blockDataBytes));
+       }
+     else
+       {
+ 	throw new EOFException("Attempt to read primitive data, but no data block is active.");
+       }
+ 
+     if (this.blockData.length < this.blockDataBytes)
+       this.blockData = new byte[this.blockDataBytes];
+ 
+     this.realInputStream.readFully (this.blockData, 0, this.blockDataBytes);
+     this.blockDataPosition = 0;
+   }
+ 
+   private void readArrayElements (Object array, Class clazz)
+     throws ClassNotFoundException, IOException
+   {
+     if (clazz.isPrimitive())
+       {
+ 	if (clazz == Boolean.TYPE)
+ 	  {
+ 	    boolean[] cast_array = (boolean[])array;
+ 	    for (int i=0; i < cast_array.length; i++)
+ 	      cast_array[i] = this.realInputStream.readBoolean();
+ 	    return;
+ 	  }
+ 	if (clazz == Byte.TYPE)
+ 	  {
+ 	    byte[] cast_array = (byte[])array;
+ 	    for (int i=0; i < cast_array.length; i++)
+ 	      cast_array[i] = this.realInputStream.readByte();
+ 	    return;
+ 	  }
+ 	if (clazz == Character.TYPE)
+ 	  {
+ 	    char[] cast_array = (char[])array;
+ 	    for (int i=0; i < cast_array.length; i++)
+ 	      cast_array[i] = this.realInputStream.readChar();
+ 	    return;
+ 	  }
+ 	if (clazz == Double.TYPE)
+ 	  {
+ 	    double[] cast_array = (double[])array;
+ 	    for (int i=0; i < cast_array.length; i++)
+ 	      cast_array[i] = this.realInputStream.readDouble();
+ 	    return;
+ 	  }
+ 	if (clazz == Float.TYPE)
+ 	  {
+ 	    float[] cast_array = (float[])array;
+ 	    for (int i=0; i < cast_array.length; i++)
+ 	      cast_array[i] = this.realInputStream.readFloat();
+ 	    return;
+ 	  }
+ 	if (clazz == Integer.TYPE)
+ 	  {
+ 	    int[] cast_array = (int[])array;
+ 	    for (int i=0; i < cast_array.length; i++)
+ 	      cast_array[i] = this.realInputStream.readInt();
+ 	    return;
+ 	  }
+ 	if (clazz == Long.TYPE)
+ 	  {
+ 	    long[] cast_array = (long[])array;
+ 	    for (int i=0; i < cast_array.length; i++)
+ 	      cast_array[i] = this.realInputStream.readLong();
+ 	    return;
+ 	  }
+ 	if (clazz == Short.TYPE)
+ 	  {
+ 	    short[] cast_array = (short[])array;
+ 	    for (int i=0; i < cast_array.length; i++)
+ 	      cast_array[i] = this.realInputStream.readShort();
+ 	    return;
+ 	  }
+       }
+     else
+       {
+ 	Object[] cast_array = (Object[])array;
+ 	for (int i=0; i < cast_array.length; i++)
+  	  cast_array[i] = readObject();
+       }
+   }
+ 
+   private void readFields (Object obj, ObjectStreamClass stream_osc)
+     throws ClassNotFoundException, IOException
+   {
+     ObjectStreamField[] fields = stream_osc.fieldMapping;
+ 
+     for (int i = 0; i < fields.length; i += 2)
+       {
+ 	ObjectStreamField stream_field = fields[i];
+ 	ObjectStreamField real_field = fields[i + 1];
+ 	boolean read_value = (stream_field != null && stream_field.getOffset() >= 0 && stream_field.isToSet());
+ 	boolean set_value = (real_field != null && real_field.isToSet());
+ 	String field_name;
+ 	char type;
+ 
+ 	if (stream_field != null)
+ 	  {
+ 	    field_name = stream_field.getName();
+ 	    type = stream_field.getTypeCode();
+ 	  }
+ 	else
+ 	  {
+ 	    field_name = real_field.getName();
+ 	    type = real_field.getTypeCode();
+ 	  }
+ 	
+ 	switch(type)
+ 	  {
+ 	  case 'Z':
+ 	    {
+ 	      boolean value =
+ 		read_value ? this.realInputStream.readBoolean() : false;
+ 	      if (dump && read_value && set_value)
+ 		dumpElementln("  " + field_name + ": " + value);
+ 	      if (set_value)
+ 		real_field.setBooleanField(obj, value);
+ 	      break;
+ 	    }
+ 	  case 'B':
+ 	    {
+ 	      byte value =
+ 		read_value ? this.realInputStream.readByte() : 0;
+ 	      if (dump && read_value && set_value)
+ 		dumpElementln("  " + field_name + ": " + value);
+ 	      if (set_value)
+ 		real_field.setByteField(obj, value);
+ 	      break;
+ 	    }
+ 	  case 'C':
+ 	    {
+ 	      char value =
+ 		read_value ? this.realInputStream.readChar(): 0;
+ 	      if (dump && read_value && set_value)
+ 		dumpElementln("  " + field_name + ": " + value);
+ 	      if (set_value)
+ 		real_field.setCharField(obj, value);
+ 	      break;
+ 	    }
+ 	  case 'D':
+ 	    {
+ 	      double value =
+ 		read_value ? this.realInputStream.readDouble() : 0;
+ 	      if (dump && read_value && set_value)
+ 		dumpElementln("  " + field_name + ": " + value);
+ 	      if (set_value)
+ 		real_field.setDoubleField(obj, value);
+ 	      break;
+ 	    }
+ 	  case 'F':
+ 	    {
+ 	      float value =
+ 		read_value ? this.realInputStream.readFloat() : 0;
+ 	      if (dump && read_value && set_value)
+ 		dumpElementln("  " + field_name + ": " + value);
+ 	      if (set_value)
+ 		real_field.setFloatField(obj, value);
+ 	      break;
+ 	    }
+ 	  case 'I':
+ 	    {
+ 	      int value =
+ 		read_value ? this.realInputStream.readInt() : 0;
+ 	      if (dump && read_value && set_value)
+ 		dumpElementln("  " + field_name + ": " + value);
+ 	      if (set_value)
+ 		real_field.setIntField(obj, value);
+ 	      break;
+ 	    }
+ 	  case 'J':
+ 	    {
+ 	      long value =
+ 		read_value ? this.realInputStream.readLong() : 0;
+ 	      if (dump && read_value && set_value)
+ 		dumpElementln("  " + field_name + ": " + value);
+ 	      if (set_value)
+ 		real_field.setLongField(obj, value);
+ 	      break;
+ 	    }
+ 	  case 'S':
+ 	    {
+ 	      short value =
+ 		read_value ? this.realInputStream.readShort() : 0;
+ 	      if (dump && read_value && set_value)
+ 		dumpElementln("  " + field_name + ": " + value);
+ 	      if (set_value)
+ 		real_field.setShortField(obj, value);
+ 	      break;
+ 	    }
+ 	  case 'L':
+ 	  case '[':
+ 	    {
+ 	      Object value =
+ 		read_value ? readObject() : null;
+ 	      if (set_value)
+ 		real_field.setObjectField(obj, value);
+ 	      break;
+ 	    }
+ 	  default:
+ 	    throw new InternalError("Invalid type code: " + type);
+ 	  }
+       }
+   }
+   
+   // Toggles writing primitive data to block-data buffer.
+   private boolean setBlockDataMode (boolean on)
+   {
+     boolean oldmode = this.readDataFromBlock;
+     this.readDataFromBlock = on;
+ 
+     if (on)
+       this.dataInputStream = this.blockDataInput;
+     else
+       this.dataInputStream = this.realInputStream;
+     return oldmode;
+   }
+ 
+   // returns a new instance of REAL_CLASS that has been constructed
+   // only to the level of CONSTRUCTOR_CLASS (a super class of REAL_CLASS)
+   private Object newObject (Class real_class, Constructor constructor)
+     throws ClassNotFoundException, IOException
+   {
+     if (constructor == null)
+         throw new InvalidClassException("Missing accessible no-arg base class constructor for " + real_class.getName()); 
+     try
+       {
+ 	return VMObjectInputStream.allocateObject(real_class, constructor.getDeclaringClass(), constructor);
+       }
+     catch (InstantiationException e)
+       {
+         throw (ClassNotFoundException) new ClassNotFoundException
+           ("Instance of " + real_class + " could not be created").initCause(e);
+       }
+   }
+ 
+   // runs all registered ObjectInputValidations in prioritized order
+   // on OBJ
+   private void invokeValidators() throws InvalidObjectException
+   {
+     try
+       {
+ 	Iterator it = currentObjectValidators.iterator();
+ 	while(it.hasNext())
+ 	  {
+ 	    ValidatorAndPriority vap = (ValidatorAndPriority) it.next();
+ 	    ObjectInputValidation validator = vap.validator;
+ 	    validator.validateObject();
+ 	  }
+       }
+     finally
+       {
+ 	currentObjectValidators = null;
+       }
+   }
+ 
+   private void callReadMethod (Method readObject, Class klass, Object obj)
+     throws ClassNotFoundException, IOException
+   {
+     try
+       {
+ 	readObject.invoke(obj, new Object[] { this });
+       }
+     catch (InvocationTargetException x)
+       {
+         /* Rethrow if possible. */
+ 	Throwable exception = x.getTargetException();
+ 	if (exception instanceof RuntimeException)
+ 	  throw (RuntimeException) exception;
+ 	if (exception instanceof IOException)
+ 	  throw (IOException) exception;
+         if (exception instanceof ClassNotFoundException)
+           throw (ClassNotFoundException) exception;
+ 
+ 	throw (IOException) new IOException(
+ 	  "Exception thrown from readObject() on " + klass).initCause(x);
+       }
+     catch (Exception x)
+       {
+ 	throw (IOException) new IOException(
+ 	  "Failure invoking readObject() on " + klass).initCause(x);
+       }
+ 
+     // Invalidate fields which has been read through readFields.
+     prereadFields = null;
+   }
+     
+   private static final int BUFFER_SIZE = 1024;
+ 
+   private DataInputStream realInputStream;
+   private DataInputStream dataInputStream;
+   private DataInputStream blockDataInput;
+   private int blockDataPosition;
+   private int blockDataBytes;
+   private byte[] blockData;
+   private boolean useSubclassMethod;
+   private int nextOID;
+   private boolean resolveEnabled;
+   private Hashtable objectLookupTable;
+   private Object currentObject;
+   private ObjectStreamClass currentObjectStreamClass;
+   private TreeSet currentObjectValidators;
+   private boolean readDataFromBlock;
+   private boolean fieldsAlreadyRead;
+   private Hashtable classLookupTable;
+   private GetField prereadFields;
+ 
+   private static boolean dump;
+ 
+   // The nesting depth for debugging output
+   private int depth = 0;
+ 
+   private static final boolean DEBUG = false;
+ 
+   private void dumpElement (String msg)
+   {
+     System.out.print(msg);
+   }
+   
+   private void dumpElementln (String msg)
+   {
+     System.out.println(msg);
+     for (int i = 0; i < depth; i++)
+       System.out.print (" ");
+     System.out.print (Thread.currentThread() + ": ");
+   }
+ 
+   // used to keep a prioritized list of object validators
+   private static final class ValidatorAndPriority implements Comparable
+   {
+     int priority;
+     ObjectInputValidation validator;
+ 
+     ValidatorAndPriority (ObjectInputValidation validator, int priority)
+     {
+       this.priority = priority;
+       this.validator = validator;
+     }
+ 
+     public int compareTo (Object o)
+     {
+       ValidatorAndPriority vap = (ValidatorAndPriority)o;
+       return this.priority - vap.priority;
+     }
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ObjectInputValidation.java gcc-4.1.0/libjava/classpath/java/io/ObjectInputValidation.java
*** gcc-4.0.2/libjava/classpath/java/io/ObjectInputValidation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ObjectInputValidation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* ObjectInputValidation.java -- Validate an object 
+    Copyright (C) 1998, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io; 
+ 
+ /**
+   * This class allows an object to validate that it is valid after
+   * deserialization has run completely for it and all dependent objects.
+   * This allows an object to determine if it is invalid even if all
+   * state data was correctly deserialized from the stream.  It can also
+   * be used to perform re-initialization type activities on an object
+   * after it has been completely deserialized.
+   *
+   * Since this method functions as a type of callback, it must be 
+   * registered through <code>ObjectInputStream.registerValidation</code>
+   * in order to be invoked.  This is typically done in the
+   * <code>readObject</code> method.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   *
+   * @see ObjectInputStream#registerValidation
+   */
+ public interface ObjectInputValidation
+ {
+   /**
+     * This method is called to validate an object after serialization
+     * is complete.  If the object is invalid an exception is thrown.
+     *
+     * @exception InvalidObjectException If the object is invalid
+     */
+   void validateObject() throws InvalidObjectException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ObjectOutput.java gcc-4.1.0/libjava/classpath/java/io/ObjectOutput.java
*** gcc-4.0.2/libjava/classpath/java/io/ObjectOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ObjectOutput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /* ObjectOutput.java -- Interface for writing objects to a stream
+    Copyright (C) 1998, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+   * This interface extends <code>DataOutput</code> to provide the additional
+   * facility of writing object instances to a stream.  It also adds some
+   * additional methods to make the interface more 
+   * <code>OutputStream</code> like.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   *
+   * @see DataOutput
+   */
+ public interface ObjectOutput extends DataOutput
+ {
+   /**
+     * This method writes the specified byte to the output stream.
+     *
+     * @param b The byte to write.
+     *
+     * @exception IOException If an error occurs.
+     */
+   void write(int b) throws IOException;
+ 
+   /**
+     * This method writes all the bytes in the specified byte array to the
+     * output stream.
+     *
+     * @param buf The array of bytes to write.
+     * 
+     * @exception IOException If an error occurs.
+     */
+   void write(byte[] buf) throws IOException;
+ 
+   /**
+     * This method writes <code>len</code> bytes from the specified array
+     * starting at index <code>offset</code> into that array.
+     *
+     * @param buf The byte array to write from.
+     * @param offset The index into the byte array to start writing from.
+     * @param len The number of bytes to write.
+     *
+     * @exception IOException If an error occurs.
+     */
+   void write(byte[] buf, int offset, int len) 
+     throws IOException;
+ 
+   /**
+     * This method writes a object instance to a stream.  The format of the
+     * data written is determined by the actual implementation of this method
+     *
+     * @param obj The object to write
+     *
+     * @exception IOException If an error occurs
+     */
+   void writeObject(Object obj) throws IOException;
+ 
+   /**
+     * This method causes any buffered data to be flushed out to the underlying
+     * stream
+     *
+     * @exception IOException If an error occurs
+     */
+   void flush() throws IOException;
+ 
+   /**
+     * This method closes the underlying stream.
+     *
+     * @exception IOException If an error occurs
+     */
+   void close() throws IOException;
+ 
+ } // interface ObjectOutput
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ObjectOutputStream.java gcc-4.1.0/libjava/classpath/java/io/ObjectOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/ObjectOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ObjectOutputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1587 ----
+ /* ObjectOutputStream.java -- Class used to write serialized objects
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.io.ObjectIdentityWrapper;
+ import gnu.java.lang.reflect.TypeSignature;
+ import gnu.java.security.action.SetAccessibleAction;
+ 
+ import java.lang.reflect.Array;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ import java.security.AccessController;
+ import java.util.Hashtable;
+ 
+ /**
+  * An <code>ObjectOutputStream</code> can be used to write objects
+  * as well as primitive data in a platform-independent manner to an
+  * <code>OutputStream</code>.
+  *
+  * The data produced by an <code>ObjectOutputStream</code> can be read
+  * and reconstituted by an <code>ObjectInputStream</code>.
+  *
+  * <code>writeObject (Object)</code> is used to write Objects, the
+  * <code>write&lt;type&gt;</code> methods are used to write primitive
+  * data (as in <code>DataOutputStream</code>). Strings can be written
+  * as objects or as primitive data.
+  *
+  * Not all objects can be written out using an
+  * <code>ObjectOutputStream</code>.  Only those objects that are an
+  * instance of <code>java.io.Serializable</code> can be written.
+  *
+  * Using default serialization, information about the class of an
+  * object is written, all of the non-transient, non-static fields of
+  * the object are written, if any of these fields are objects, they are
+  * written out in the same manner.
+  *
+  * An object is only written out the first time it is encountered.  If
+  * the object is encountered later, a reference to it is written to
+  * the underlying stream.  Thus writing circular object graphs
+  * does not present a problem, nor are relationships between objects
+  * in a graph lost.
+  *
+  * Example usage:
+  * <pre>
+  * Hashtable map = new Hashtable ();
+  * map.put ("one", new Integer (1));
+  * map.put ("two", new Integer (2));
+  *
+  * ObjectOutputStream oos =
+  * new ObjectOutputStream (new FileOutputStream ("numbers"));
+  * oos.writeObject (map);
+  * oos.close ();
+  *
+  * ObjectInputStream ois =
+  * new ObjectInputStream (new FileInputStream ("numbers"));
+  * Hashtable newmap = (Hashtable)ois.readObject ();
+  *
+  * System.out.println (newmap);
+  * </pre>
+  *
+  * The default serialization can be overriden in two ways.
+  *
+  * By defining a method <code>private void
+  * writeObject (ObjectOutputStream)</code>, a class can dictate exactly
+  * how information about itself is written.
+  * <code>defaultWriteObject ()</code> may be called from this method to
+  * carry out default serialization.  This method is not
+  * responsible for dealing with fields of super-classes or subclasses.
+  *
+  * By implementing <code>java.io.Externalizable</code>.  This gives
+  * the class complete control over the way it is written to the
+  * stream.  If this approach is used the burden of writing superclass
+  * and subclass data is transfered to the class implementing
+  * <code>java.io.Externalizable</code>.
+  *
+  * @see java.io.DataOutputStream
+  * @see java.io.Externalizable
+  * @see java.io.ObjectInputStream
+  * @see java.io.Serializable
+  */
+ public class ObjectOutputStream extends OutputStream
+   implements ObjectOutput, ObjectStreamConstants
+ {
+   /**
+    * Creates a new <code>ObjectOutputStream</code> that will do all of
+    * its writing onto <code>out</code>.  This method also initializes
+    * the stream by writing the header information (stream magic number
+    * and stream version).
+    *
+    * @exception IOException Writing stream header to underlying
+    * stream cannot be completed.
+    *
+    * @see #writeStreamHeader()
+    */
+   public ObjectOutputStream (OutputStream out) throws IOException
+   {
+     realOutput = new DataOutputStream(out);
+     blockData = new byte[ BUFFER_SIZE ];
+     blockDataCount = 0;
+     blockDataOutput = new DataOutputStream(this);
+     setBlockDataMode(true);
+     replacementEnabled = false;
+     isSerializing = false;
+     nextOID = baseWireHandle;
+     OIDLookupTable = new Hashtable();
+     protocolVersion = defaultProtocolVersion;
+     useSubclassMethod = false;
+     writeStreamHeader();
+ 
+     if (DEBUG)
+       {
+ 	String val = System.getProperty("gcj.dumpobjects");
+ 	if (val != null && !val.equals(""))
+ 	  dump = true;
+       }
+   }
+ 
+   /**
+    * Writes a representation of <code>obj</code> to the underlying
+    * output stream by writing out information about its class, then
+    * writing out each of the objects non-transient, non-static
+    * fields.  If any of these fields are other objects,
+    * they are written out in the same manner.
+    *
+    * This method can be overriden by a class by implementing
+    * <code>private void writeObject (ObjectOutputStream)</code>.
+    *
+    * If an exception is thrown from this method, the stream is left in
+    * an undefined state.
+    *
+    * @exception NotSerializableException An attempt was made to
+    * serialize an <code>Object</code> that is not serializable.
+    *
+    * @exception InvalidClassException Somebody tried to serialize
+    * an object which is wrongly formatted.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code>.
+    */
+   public final void writeObject(Object obj) throws IOException
+   {
+     if (useSubclassMethod)
+       {
+ 	if (dump)
+ 	  dumpElementln ("WRITE OVERRIDE: " + obj);
+ 	  
+ 	writeObjectOverride(obj);
+ 	return;
+       }
+ 
+     if (dump)
+       dumpElementln ("WRITE: " + obj);
+     
+     depth += 2;    
+ 
+     boolean was_serializing = isSerializing;
+     boolean old_mode = setBlockDataMode(false);
+     try
+       {
+ 	isSerializing = true;
+ 	boolean replaceDone = false;
+ 	Object replacedObject = null;
+ 	
+ 	while (true)
+ 	  {
+ 	    if (obj == null)
+ 	      {
+ 		realOutput.writeByte(TC_NULL);
+ 		break;
+ 	      }
+ 
+ 	    Integer handle = findHandle(obj);
+ 	    if (handle != null)
+ 	      {
+ 		realOutput.writeByte(TC_REFERENCE);
+ 		realOutput.writeInt(handle.intValue());
+ 		break;
+ 	      }
+ 
+ 	    if (obj instanceof Class)
+ 	      {
+ 		Class cl = (Class)obj;
+ 		ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject(cl);
+ 		realOutput.writeByte(TC_CLASS);
+ 		if (!osc.isProxyClass)
+ 		  {
+ 		    writeObject (osc);
+ 		  }
+ 		else
+ 		  {
+ 		    realOutput.writeByte(TC_PROXYCLASSDESC);
+ 		    Class[] intfs = cl.getInterfaces();
+ 		    realOutput.writeInt(intfs.length);
+ 		    for (int i = 0; i < intfs.length; i++)
+ 		      realOutput.writeUTF(intfs[i].getName());
+ 		    
+ 		    boolean oldmode = setBlockDataMode(true);
+ 		    annotateProxyClass(cl);
+ 		    setBlockDataMode(oldmode);
+ 		    realOutput.writeByte(TC_ENDBLOCKDATA);
+ 		    
+ 		    writeObject(osc.getSuper());
+ 		  }
+ 		assignNewHandle(obj);
+ 		break;
+ 	      }
+ 
+ 	    if (obj instanceof ObjectStreamClass)
+ 	      {
+ 		writeClassDescriptor((ObjectStreamClass) obj);
+ 		break;
+ 	      }
+ 
+ 	    Class clazz = obj.getClass();
+ 	    ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject(clazz);
+ 	    if (osc == null)
+ 	      throw new NotSerializableException(clazz.getName());
+ 	    
+ 	    if ((replacementEnabled || obj instanceof Serializable)
+ 		&& ! replaceDone)
+ 	      {
+ 		replacedObject = obj;
+ 		
+ 		if (obj instanceof Serializable)
+ 		  {
+ 		    try
+ 		      {
+                         Method m = osc.writeReplaceMethod;
+                         if (m != null)
+                             obj = m.invoke(obj, new Object[0]);
+ 		      }
+ 		    catch (IllegalAccessException ignore)
+ 		      {
+ 		      }
+ 		    catch (InvocationTargetException ignore)
+ 		      {
+ 		      }
+ 		  }
+ 		
+ 		if (replacementEnabled)
+ 		  obj = replaceObject(obj);
+ 		
+ 		replaceDone = true;
+ 		continue;
+ 	      }
+ 
+ 	    if (obj instanceof String)
+ 	      {
+ 		realOutput.writeByte(TC_STRING);
+ 		assignNewHandle(obj);
+ 		realOutput.writeUTF((String)obj);
+ 		break;
+ 	      }
+ 
+ 	    if (clazz.isArray ())
+ 	      {
+ 		realOutput.writeByte(TC_ARRAY);
+ 		writeObject(osc);
+ 		assignNewHandle(obj);
+ 		writeArraySizeAndElements(obj, clazz.getComponentType());
+ 		break;
+ 	      }
+ 	    
+ 	    realOutput.writeByte(TC_OBJECT);
+ 	    writeObject(osc);
+ 
+ 	    if (replaceDone)
+ 	      assignNewHandle(replacedObject);
+ 	    else
+ 	      assignNewHandle(obj);
+ 
+ 	    if (obj instanceof Externalizable)
+ 	      {
+ 		if (protocolVersion == PROTOCOL_VERSION_2)
+ 		  setBlockDataMode(true);
+ 		
+ 		((Externalizable)obj).writeExternal(this);
+ 		
+ 		if (protocolVersion == PROTOCOL_VERSION_2)
+ 		  {
+ 		    setBlockDataMode(false);
+ 		    realOutput.writeByte(TC_ENDBLOCKDATA);
+ 		  }
+ 
+ 		break;
+ 	      }
+ 
+ 	    if (obj instanceof Serializable)
+ 	      {
+ 		Object prevObject = this.currentObject;
+ 		ObjectStreamClass prevObjectStreamClass = this.currentObjectStreamClass;
+ 		currentObject = obj;
+ 		ObjectStreamClass[] hierarchy =
+ 		  ObjectStreamClass.getObjectStreamClasses(clazz);
+ 		
+ 		for (int i = 0; i < hierarchy.length; i++)
+ 		  {
+ 		    currentObjectStreamClass = hierarchy[i];
+ 		    
+ 		    fieldsAlreadyWritten = false;
+ 		    if (currentObjectStreamClass.hasWriteMethod())
+ 		      {
+ 			if (dump)
+ 			  dumpElementln ("WRITE METHOD CALLED FOR: " + obj);
+ 			setBlockDataMode(true);
+ 			callWriteMethod(obj, currentObjectStreamClass);
+ 			setBlockDataMode(false);
+ 			realOutput.writeByte(TC_ENDBLOCKDATA);
+ 			if (dump)
+ 			  dumpElementln ("WRITE ENDBLOCKDATA FOR: " + obj);
+ 		      }
+ 		    else
+ 		      {
+ 			if (dump)
+ 			  dumpElementln ("WRITE FIELDS CALLED FOR: " + obj);
+ 			writeFields(obj, currentObjectStreamClass);
+ 		      }
+ 		  }
+ 
+ 		this.currentObject = prevObject;
+ 		this.currentObjectStreamClass = prevObjectStreamClass;
+ 		currentPutField = null;
+ 		break;
+ 	      }
+ 
+ 	    throw new NotSerializableException(clazz.getName()
+ 					       + " in "
+ 					       + obj.getClass());
+ 	  } // end pseudo-loop
+       }
+     catch (ObjectStreamException ose)
+       {
+ 	// Rethrow these are fatal.
+ 	throw ose;
+       }
+     catch (IOException e)
+       {
+ 	realOutput.writeByte(TC_EXCEPTION);
+ 	reset(true);
+ 
+ 	setBlockDataMode(false);
+ 	try
+ 	  {
+ 	    if (DEBUG)
+ 	      {
+ 		e.printStackTrace(System.out);
+ 	      }
+ 	    writeObject(e);
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	    StreamCorruptedException ex = 
+ 	      new StreamCorruptedException
+ 	      (ioe + " thrown while exception was being written to stream.");
+ 	    if (DEBUG)
+ 	      {
+ 		ex.printStackTrace(System.out);
+ 	      }
+ 	    throw ex;
+ 	  }
+ 
+ 	reset (true);
+ 	
+       }
+     finally
+       {
+ 	isSerializing = was_serializing;
+ 	setBlockDataMode(old_mode);
+ 	depth -= 2;
+ 
+ 	if (dump)
+ 	  dumpElementln ("END: " + obj);
+       }
+   }
+ 
+   protected void writeClassDescriptor(ObjectStreamClass osc) throws IOException
+   {
+     if (osc.isProxyClass)
+       {
+         realOutput.writeByte(TC_PROXYCLASSDESC);
+ 	Class[] intfs = osc.forClass().getInterfaces();
+ 	realOutput.writeInt(intfs.length);
+ 	for (int i = 0; i < intfs.length; i++)
+ 	  realOutput.writeUTF(intfs[i].getName());
+ 
+         boolean oldmode = setBlockDataMode(true);
+         annotateProxyClass(osc.forClass());
+         setBlockDataMode(oldmode);
+         realOutput.writeByte(TC_ENDBLOCKDATA);
+       }
+     else
+       {
+         realOutput.writeByte(TC_CLASSDESC);
+         realOutput.writeUTF(osc.getName());
+         realOutput.writeLong(osc.getSerialVersionUID());
+         assignNewHandle(osc);
+ 
+         int flags = osc.getFlags();
+ 
+         if (protocolVersion == PROTOCOL_VERSION_2
+ 	    && osc.isExternalizable())
+         flags |= SC_BLOCK_DATA;
+ 
+         realOutput.writeByte(flags);
+ 
+         ObjectStreamField[] fields = osc.fields;
+         realOutput.writeShort(fields.length);
+ 
+         ObjectStreamField field;
+         for (int i = 0; i < fields.length; i++)
+           {
+ 	    field = fields[i];
+ 	    realOutput.writeByte(field.getTypeCode ());
+ 	    realOutput.writeUTF(field.getName ());
+ 
+ 	    if (! field.isPrimitive())
+ 	      writeObject(field.getTypeString());
+           }
+ 
+         boolean oldmode = setBlockDataMode(true);
+         annotateClass(osc.forClass());
+         setBlockDataMode(oldmode);
+         realOutput.writeByte(TC_ENDBLOCKDATA);
+       }
+ 
+     if (osc.isSerializable() || osc.isExternalizable())
+       writeObject(osc.getSuper());
+     else
+       writeObject(null);
+   }
+   
+   /**
+    * Writes the current objects non-transient, non-static fields from
+    * the current class to the underlying output stream.
+    *
+    * This method is intended to be called from within a object's
+    * <code>private void writeObject (ObjectOutputStream)</code>
+    * method.
+    *
+    * @exception NotActiveException This method was called from a
+    * context other than from the current object's and current class's
+    * <code>private void writeObject (ObjectOutputStream)</code>
+    * method.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code>.
+    */
+   public void defaultWriteObject()
+     throws IOException, NotActiveException
+   {
+     markFieldsWritten();
+     writeFields(currentObject, currentObjectStreamClass);
+   }
+ 
+ 
+   private void markFieldsWritten() throws IOException
+   {
+     if (currentObject == null || currentObjectStreamClass == null)
+       throw new NotActiveException
+ 	("defaultWriteObject called by non-active class and/or object");
+ 
+     if (fieldsAlreadyWritten)
+       throw new IOException
+ 	("Only one of writeFields and defaultWriteObject may be called, and it may only be called once");
+ 
+     fieldsAlreadyWritten = true;
+   }
+ 
+   /**
+    * Resets stream to state equivalent to the state just after it was
+    * constructed.
+    *
+    * Causes all objects previously written to the stream to be
+    * forgotten.  A notification of this reset is also written to the
+    * underlying stream.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code> or reset called while serialization is
+    * in progress.
+    */
+   public void reset() throws IOException
+   {
+     reset(false);
+   }
+ 
+ 
+   private void reset(boolean internal) throws IOException
+   {
+     if (!internal)
+       {
+ 	if (isSerializing)
+ 	  throw new IOException("Reset called while serialization in progress");
+ 
+ 	realOutput.writeByte(TC_RESET);
+       }
+     
+     clearHandles();
+   }
+ 
+ 
+   /**
+    * Informs this <code>ObjectOutputStream</code> to write data
+    * according to the specified protocol.  There are currently two
+    * different protocols, specified by <code>PROTOCOL_VERSION_1</code>
+    * and <code>PROTOCOL_VERSION_2</code>.  This implementation writes
+    * data using <code>PROTOCOL_VERSION_2</code> by default, as is done
+    * by the JDK 1.2.
+    *
+    * A non-portable method, <code>setDefaultProtocolVersion (int
+    * version)</code> is provided to change the default protocol
+    * version.
+    *
+    * For an explanation of the differences between the two protocols
+    * see XXX: the Java ObjectSerialization Specification.
+    *
+    * @exception IOException if <code>version</code> is not a valid
+    * protocol
+    *
+    * @see #setDefaultProtocolVersion(int)
+    */
+   public void useProtocolVersion(int version) throws IOException
+   {
+     if (version != PROTOCOL_VERSION_1 && version != PROTOCOL_VERSION_2)
+       throw new IOException("Invalid protocol version requested.");
+     
+     protocolVersion = version;
+   }
+ 
+ 
+   /**
+    * <em>GNU $classpath specific</em>
+    *
+    * Changes the default stream protocol used by all
+    * <code>ObjectOutputStream</code>s.  There are currently two
+    * different protocols, specified by <code>PROTOCOL_VERSION_1</code>
+    * and <code>PROTOCOL_VERSION_2</code>.  The default default is
+    * <code>PROTOCOL_VERSION_1</code>.
+    *
+    * @exception IOException if <code>version</code> is not a valid
+    * protocol
+    *
+    * @see #useProtocolVersion(int)
+    */
+   public static void setDefaultProtocolVersion(int version)
+     throws IOException
+   {
+     if (version != PROTOCOL_VERSION_1 && version != PROTOCOL_VERSION_2)
+       throw new IOException("Invalid protocol version requested.");
+ 
+     defaultProtocolVersion = version;
+   }
+ 
+ 
+   /**
+    * An empty hook that allows subclasses to write extra information
+    * about classes to the stream.  This method is called the first
+    * time each class is seen, and after all of the standard
+    * information about the class has been written.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code>.
+    *
+    * @see ObjectInputStream#resolveClass(java.io.ObjectStreamClass)
+    */
+   protected void annotateClass(Class cl) throws IOException
+   {
+   }
+ 
+   protected void annotateProxyClass(Class cl) throws IOException
+   {
+   }
+ 
+   /**
+    * Allows subclasses to replace objects that are written to the
+    * stream with other objects to be written in their place.  This
+    * method is called the first time each object is encountered
+    * (modulo reseting of the stream).
+    *
+    * This method must be enabled before it will be called in the
+    * serialization process.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code>.
+    *
+    * @see #enableReplaceObject(boolean)
+    */
+   protected Object replaceObject(Object obj) throws IOException
+   {
+     return obj;
+   }
+ 
+ 
+   /**
+    * If <code>enable</code> is <code>true</code> and this object is
+    * trusted, then <code>replaceObject (Object)</code> will be called
+    * in subsequent calls to <code>writeObject (Object)</code>.
+    * Otherwise, <code>replaceObject (Object)</code> will not be called.
+    *
+    * @exception SecurityException This class is not trusted.
+    */
+   protected boolean enableReplaceObject(boolean enable)
+     throws SecurityException
+   {
+     if (enable)
+       {
+ 	SecurityManager sm = System.getSecurityManager();
+ 	if (sm != null)
+ 	  sm.checkPermission(new SerializablePermission("enableSubstitution"));
+       }
+ 
+     boolean old_val = replacementEnabled;
+     replacementEnabled = enable;
+     return old_val;
+   }
+ 
+ 
+   /**
+    * Writes stream magic and stream version information to the
+    * underlying stream.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code>.
+    */
+   protected void writeStreamHeader() throws IOException
+   {
+     realOutput.writeShort(STREAM_MAGIC);
+     realOutput.writeShort(STREAM_VERSION);
+   }
+ 
+   /**
+    * Protected constructor that allows subclasses to override
+    * serialization.  This constructor should be called by subclasses
+    * that wish to override <code>writeObject (Object)</code>.  This
+    * method does a security check <i>NOTE: currently not
+    * implemented</i>, then sets a flag that informs
+    * <code>writeObject (Object)</code> to call the subclasses
+    * <code>writeObjectOverride (Object)</code> method.
+    *
+    * @see #writeObjectOverride(Object)
+    */
+   protected ObjectOutputStream() throws IOException, SecurityException
+   {
+     SecurityManager sec_man = System.getSecurityManager ();
+     if (sec_man != null)
+       sec_man.checkPermission(SUBCLASS_IMPLEMENTATION_PERMISSION);
+     useSubclassMethod = true;
+   }
+ 
+ 
+   /**
+    * This method allows subclasses to override the default
+    * serialization mechanism provided by
+    * <code>ObjectOutputStream</code>.  To make this method be used for
+    * writing objects, subclasses must invoke the 0-argument
+    * constructor on this class from there constructor.
+    *
+    * @see #ObjectOutputStream()
+    *
+    * @exception NotActiveException Subclass has arranged for this
+    * method to be called, but did not implement this method.
+    */
+   protected void writeObjectOverride(Object obj) throws NotActiveException,
+     IOException
+   {
+     throw new NotActiveException
+       ("Subclass of ObjectOutputStream must implement writeObjectOverride");
+   }
+ 
+ 
+   /**
+    * @see DataOutputStream#write(int)
+    */
+   public void write (int data) throws IOException
+   {
+     if (writeDataAsBlocks)
+       {
+ 	if (blockDataCount == BUFFER_SIZE)
+ 	  drain();
+ 
+ 	blockData[ blockDataCount++ ] = (byte)data;
+       }
+     else
+       realOutput.write(data);
+   }
+ 
+ 
+   /**
+    * @see DataOutputStream#write(byte[])
+    */
+   public void write(byte[] b) throws IOException
+   {
+     write(b, 0, b.length);
+   }
+ 
+ 
+   /**
+    * @see DataOutputStream#write(byte[],int,int)
+    */
+   public void write(byte[] b, int off, int len) throws IOException
+   {
+     if (writeDataAsBlocks)
+       {
+ 	if (len < 0)
+ 	  throw new IndexOutOfBoundsException();
+ 
+ 	if (blockDataCount + len < BUFFER_SIZE)
+ 	  {
+ 	    System.arraycopy(b, off, blockData, blockDataCount, len);
+ 	    blockDataCount += len;
+ 	  }
+ 	else
+ 	  {
+ 	    drain();
+ 	    writeBlockDataHeader(len);
+ 	    realOutput.write(b, off, len);
+ 	  }
+       }
+     else
+       realOutput.write(b, off, len);
+   }
+ 
+ 
+   /**
+    * @see DataOutputStream#flush()
+    */
+   public void flush () throws IOException
+   {
+     drain();
+     realOutput.flush();
+   }
+ 
+ 
+   /**
+    * Causes the block-data buffer to be written to the underlying
+    * stream, but does not flush underlying stream.
+    *
+    * @exception IOException Exception from underlying
+    * <code>OutputStream</code>.
+    */
+   protected void drain() throws IOException
+   {
+     if (blockDataCount == 0)
+       return;
+ 
+     if (writeDataAsBlocks)
+       writeBlockDataHeader(blockDataCount);
+     realOutput.write(blockData, 0, blockDataCount);
+     blockDataCount = 0;
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#close ()
+    */
+   public void close() throws IOException
+   {
+     flush();
+     realOutput.close();
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeBoolean (boolean)
+    */
+   public void writeBoolean(boolean data) throws IOException
+   {
+     blockDataOutput.writeBoolean(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeByte (int)
+    */
+   public void writeByte(int data) throws IOException
+   {
+     blockDataOutput.writeByte(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeShort (int)
+    */
+   public void writeShort (int data) throws IOException
+   {
+     blockDataOutput.writeShort(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeChar (int)
+    */
+   public void writeChar(int data) throws IOException
+   {
+     blockDataOutput.writeChar(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeInt (int)
+    */
+   public void writeInt(int data) throws IOException
+   {
+     blockDataOutput.writeInt(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeLong (long)
+    */
+   public void writeLong(long data) throws IOException
+   {
+     blockDataOutput.writeLong(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeFloat (float)
+    */
+   public void writeFloat(float data) throws IOException
+   {
+     blockDataOutput.writeFloat(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeDouble (double)
+    */
+   public void writeDouble(double data) throws IOException
+   {
+     blockDataOutput.writeDouble(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeBytes (java.lang.String)
+    */
+   public void writeBytes(String data) throws IOException
+   {
+     blockDataOutput.writeBytes(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeChars (java.lang.String)
+    */
+   public void writeChars(String data) throws IOException
+   {
+     dataOutput.writeChars(data);
+   }
+ 
+ 
+   /**
+    * @see java.io.DataOutputStream#writeUTF (java.lang.String)
+    */
+   public void writeUTF(String data) throws IOException
+   {
+     dataOutput.writeUTF(data);
+   }
+ 
+ 
+   /**
+    * This class allows a class to specify exactly which fields should
+    * be written, and what values should be written for these fields.
+    *
+    * XXX: finish up comments
+    */
+   public abstract static class PutField
+   {
+     public abstract void put (String name, boolean value);
+     public abstract void put (String name, byte value);
+     public abstract void put (String name, char value);
+     public abstract void put (String name, double value);
+     public abstract void put (String name, float value);
+     public abstract void put (String name, int value);
+     public abstract void put (String name, long value);
+     public abstract void put (String name, short value);
+     public abstract void put (String name, Object value);
+ 
+     /**
+      * @deprecated
+      */
+     public abstract void write (ObjectOutput out) throws IOException;
+   }
+ 
+   public PutField putFields() throws IOException
+   {
+     if (currentPutField != null)
+       return currentPutField;
+ 
+     currentPutField = new PutField()
+       {
+ 	private byte[] prim_field_data
+ 	  = new byte[currentObjectStreamClass.primFieldSize];
+ 	private Object[] objs
+ 	  = new Object[currentObjectStreamClass.objectFieldCount];
+ 
+ 	private ObjectStreamField getField (String name)
+ 	{
+ 	  ObjectStreamField field
+ 	    = currentObjectStreamClass.getField(name);
+ 	  
+ 	  if (field == null)
+ 	    throw new IllegalArgumentException("no such serializable field " + name);
+ 	  
+ 	  return field;
+ 	}
+ 	
+ 	public void put(String name, boolean value)
+ 	{
+ 	  ObjectStreamField field = getField(name);
+ 
+ 	  checkType(field, 'Z');
+ 	  prim_field_data[field.getOffset ()] = (byte)(value ? 1 : 0);
+ 	}
+ 
+ 	public void put(String name, byte value)
+ 	{
+ 	  ObjectStreamField field = getField(name);
+ 
+ 	  checkType(field, 'B');
+ 	  prim_field_data[field.getOffset()] = value;
+ 	}
+ 
+ 	public void put(String name, char value)
+ 	{
+ 	  ObjectStreamField field = getField(name);
+ 
+ 	  checkType(field, 'C');
+ 	  int off = field.getOffset();
+ 	  prim_field_data[off++] = (byte)(value >>> 8);
+ 	  prim_field_data[off] = (byte)value;
+ 	}
+ 
+ 	public void put(String name, double value)
+ 	{
+ 	  ObjectStreamField field = getField (name);
+ 
+ 	  checkType(field, 'D');
+ 	  int off = field.getOffset();
+ 	  long l_value = Double.doubleToLongBits (value);
+ 	  prim_field_data[off++] = (byte)(l_value >>> 52);
+ 	  prim_field_data[off++] = (byte)(l_value >>> 48);
+ 	  prim_field_data[off++] = (byte)(l_value >>> 40);
+ 	  prim_field_data[off++] = (byte)(l_value >>> 32);
+ 	  prim_field_data[off++] = (byte)(l_value >>> 24);
+ 	  prim_field_data[off++] = (byte)(l_value >>> 16);
+ 	  prim_field_data[off++] = (byte)(l_value >>> 8);
+ 	  prim_field_data[off] = (byte)l_value;
+ 	}
+ 
+ 	public void put(String name, float value)
+ 	{
+ 	  ObjectStreamField field = getField(name);
+ 
+ 	  checkType(field, 'F');
+ 	  int off = field.getOffset();
+ 	  int i_value = Float.floatToIntBits(value);
+ 	  prim_field_data[off++] = (byte)(i_value >>> 24);
+ 	  prim_field_data[off++] = (byte)(i_value >>> 16);
+ 	  prim_field_data[off++] = (byte)(i_value >>> 8);
+ 	  prim_field_data[off] = (byte)i_value;
+ 	}
+ 
+ 	public void put(String name, int value)
+ 	{
+ 	  ObjectStreamField field = getField(name);
+ 	  checkType(field, 'I');
+ 	  int off = field.getOffset();
+ 	  prim_field_data[off++] = (byte)(value >>> 24);
+ 	  prim_field_data[off++] = (byte)(value >>> 16);
+ 	  prim_field_data[off++] = (byte)(value >>> 8);
+ 	  prim_field_data[off] = (byte)value;
+ 	}
+ 
+ 	public void put(String name, long value)
+ 	{
+ 	  ObjectStreamField field = getField(name);
+ 	  checkType(field, 'J');
+ 	  int off = field.getOffset();
+ 	  prim_field_data[off++] = (byte)(value >>> 52);
+ 	  prim_field_data[off++] = (byte)(value >>> 48);
+ 	  prim_field_data[off++] = (byte)(value >>> 40);
+ 	  prim_field_data[off++] = (byte)(value >>> 32);
+ 	  prim_field_data[off++] = (byte)(value >>> 24);
+ 	  prim_field_data[off++] = (byte)(value >>> 16);
+ 	  prim_field_data[off++] = (byte)(value >>> 8);
+ 	  prim_field_data[off] = (byte)value;
+ 	}
+ 
+ 	public void put(String name, short value)
+ 	{
+ 	  ObjectStreamField field = getField(name);
+ 	  checkType(field, 'S');
+ 	  int off = field.getOffset();
+ 	  prim_field_data[off++] = (byte)(value >>> 8);
+ 	  prim_field_data[off] = (byte)value;
+ 	}
+ 
+ 	public void put(String name, Object value)
+ 	{
+ 	  ObjectStreamField field = getField(name);
+ 
+ 	  if (value != null &&
+ 	      ! field.getType().isAssignableFrom(value.getClass ()))	    
+ 	    throw new IllegalArgumentException("Class " + value.getClass() +
+ 					       " cannot be cast to " + field.getType());
+ 	  objs[field.getOffset()] = value;
+ 	}
+ 
+ 	public void write(ObjectOutput out) throws IOException
+ 	{
+ 	  // Apparently Block data is not used with PutField as per
+ 	  // empirical evidence against JDK 1.2.  Also see Mauve test
+ 	  // java.io.ObjectInputOutput.Test.GetPutField.
+ 	  boolean oldmode = setBlockDataMode(false);
+ 	  out.write(prim_field_data);
+ 	  for (int i = 0; i < objs.length; ++ i)
+ 	    out.writeObject(objs[i]);
+ 	  setBlockDataMode(oldmode);
+ 	}
+ 
+ 	private void checkType(ObjectStreamField field, char type)
+ 	  throws IllegalArgumentException
+ 	{
+ 	  if (TypeSignature.getEncodingOfClass(field.getType()).charAt(0)
+ 	      != type)
+ 	    throw new IllegalArgumentException();
+ 	}
+       };
+     // end PutFieldImpl
+ 
+     return currentPutField;
+   }
+ 
+ 
+   public void writeFields() throws IOException
+   {
+     if (currentPutField == null)
+       throw new NotActiveException("writeFields can only be called after putFields has been called");
+ 
+     markFieldsWritten();
+     currentPutField.write(this);
+   }
+ 
+ 
+   // write out the block-data buffer, picking the correct header
+   // depending on the size of the buffer
+   private void writeBlockDataHeader(int size) throws IOException
+   {
+     if (size < 256)
+       {
+ 	realOutput.writeByte(TC_BLOCKDATA);
+ 	realOutput.write(size);
+       }
+     else
+       {
+ 	realOutput.writeByte(TC_BLOCKDATALONG);
+ 	realOutput.writeInt(size);
+       }
+   }
+ 
+ 
+   // lookup the handle for OBJ, return null if OBJ doesn't have a
+   // handle yet
+   private Integer findHandle(Object obj)
+   {
+     return (Integer)OIDLookupTable.get(new ObjectIdentityWrapper(obj));
+   }
+ 
+ 
+   // assigns the next availible handle to OBJ
+   private int assignNewHandle(Object obj)
+   {
+     OIDLookupTable.put(new ObjectIdentityWrapper(obj),
+ 		       new Integer(nextOID));
+     return nextOID++;
+   }
+ 
+ 
+   // resets mapping from objects to handles
+   private void clearHandles()
+   {
+     nextOID = baseWireHandle;
+     OIDLookupTable.clear();
+   }
+ 
+ 
+   // write out array size followed by each element of the array
+   private void writeArraySizeAndElements(Object array, Class clazz)
+     throws IOException
+   {
+     int length = Array.getLength(array);
+ 
+     if (clazz.isPrimitive())
+       {
+ 	if (clazz == Boolean.TYPE)
+ 	  {
+ 	    boolean[] cast_array = (boolean[])array;
+ 	    realOutput.writeInt (length);
+ 	    for (int i = 0; i < length; i++)
+ 	      realOutput.writeBoolean(cast_array[i]);
+ 	    return;
+ 	  }
+ 	if (clazz == Byte.TYPE)
+ 	  {
+ 	    byte[] cast_array = (byte[])array;
+ 	    realOutput.writeInt(length);
+ 	    realOutput.write(cast_array, 0, length);
+ 	    return;
+ 	  }
+ 	if (clazz == Character.TYPE)
+ 	  {
+ 	    char[] cast_array = (char[])array;
+ 	    realOutput.writeInt(length);
+ 	    for (int i = 0; i < length; i++)
+ 	      realOutput.writeChar(cast_array[i]);
+ 	    return;
+ 	  }
+ 	if (clazz == Double.TYPE)
+ 	  {
+ 	    double[] cast_array = (double[])array;
+ 	    realOutput.writeInt(length);
+ 	    for (int i = 0; i < length; i++)
+ 	      realOutput.writeDouble(cast_array[i]);
+ 	    return;
+ 	  }
+ 	if (clazz == Float.TYPE)
+ 	  {
+ 	    float[] cast_array = (float[])array;
+ 	    realOutput.writeInt(length);
+ 	    for (int i = 0; i < length; i++)
+ 	      realOutput.writeFloat(cast_array[i]);
+ 	    return;
+ 	  }
+ 	if (clazz == Integer.TYPE)
+ 	  {
+ 	    int[] cast_array = (int[])array;
+ 	    realOutput.writeInt(length);
+ 	    for (int i = 0; i < length; i++)
+ 	      realOutput.writeInt(cast_array[i]);
+ 	    return;
+ 	  }
+ 	if (clazz == Long.TYPE)
+ 	  {
+ 	    long[] cast_array = (long[])array;
+ 	    realOutput.writeInt (length);
+ 	    for (int i = 0; i < length; i++)
+ 	      realOutput.writeLong(cast_array[i]);
+ 	    return;
+ 	  }
+ 	if (clazz == Short.TYPE)
+ 	  {
+ 	    short[] cast_array = (short[])array;
+ 	    realOutput.writeInt (length);
+ 	    for (int i = 0; i < length; i++)
+ 	      realOutput.writeShort(cast_array[i]);
+ 	    return;
+ 	  }
+       }
+     else
+       {
+ 	Object[] cast_array = (Object[])array;
+ 	realOutput.writeInt(length);
+ 	for (int i = 0; i < length; i++)
+ 	  writeObject(cast_array[i]);
+       }
+   }
+ 
+ 
+   // writes out FIELDS of OBJECT for the specified ObjectStreamClass.
+   // FIELDS are already in canonical order.
+   private void writeFields(Object obj, ObjectStreamClass osc)
+     throws IOException
+   {
+     ObjectStreamField[] fields = osc.fields;
+     boolean oldmode = setBlockDataMode(false);
+     String field_name;
+     Class type;
+ 
+     for (int i = 0; i < fields.length; i++)
+       {
+ 	field_name = fields[i].getName();
+ 	type = fields[i].getType();
+ 
+ 	if (dump)
+ 	  dumpElementln ("WRITE FIELD: " + field_name + " type=" + type);
+ 
+ 	if (type == Boolean.TYPE)
+ 	  realOutput.writeBoolean(getBooleanField(obj, osc.forClass(), field_name));
+ 	else if (type == Byte.TYPE)
+ 	  realOutput.writeByte(getByteField(obj, osc.forClass(), field_name));
+ 	else if (type == Character.TYPE)
+ 	  realOutput.writeChar(getCharField(obj, osc.forClass(), field_name));
+ 	else if (type == Double.TYPE)
+ 	  realOutput.writeDouble(getDoubleField(obj, osc.forClass(), field_name));
+ 	else if (type == Float.TYPE)
+ 	  realOutput.writeFloat(getFloatField(obj, osc.forClass(), field_name));
+ 	else if (type == Integer.TYPE)
+ 	  realOutput.writeInt(getIntField(obj, osc.forClass(), field_name));
+ 	else if (type == Long.TYPE)
+ 	  realOutput.writeLong(getLongField(obj, osc.forClass(), field_name));
+ 	else if (type == Short.TYPE)
+ 	  realOutput.writeShort(getShortField(obj, osc.forClass(), field_name));
+ 	else
+ 	  writeObject(getObjectField(obj, osc.forClass(), field_name,
+ 				     fields[i].getTypeString ()));
+       }
+     setBlockDataMode(oldmode);
+   }
+ 
+ 
+   // Toggles writing primitive data to block-data buffer.
+   // Package-private to avoid a trampoline constructor.
+   boolean setBlockDataMode(boolean on) throws IOException
+   {
+     if (on == writeDataAsBlocks)
+       return on;
+ 
+     drain();
+     boolean oldmode = writeDataAsBlocks;
+     writeDataAsBlocks = on;
+ 
+     if (on)
+       dataOutput = blockDataOutput;
+     else
+       dataOutput = realOutput;
+ 
+     return oldmode;
+   }
+ 
+ 
+   private void callWriteMethod(Object obj, ObjectStreamClass osc)
+     throws IOException
+   {
+     currentPutField = null;
+     try
+       {
+         Object args[] = {this};
+         osc.writeObjectMethod.invoke(obj, args);
+       }
+     catch (InvocationTargetException x)
+       {
+         /* Rethrow if possible. */
+ 	Throwable exception = x.getTargetException();
+ 	if (exception instanceof RuntimeException)
+ 	  throw (RuntimeException) exception;
+ 	if (exception instanceof IOException)
+ 	  throw (IOException) exception;
+ 
+ 	IOException ioe
+ 	  = new IOException("Exception thrown from writeObject() on " +
+ 			    osc.forClass().getName() + ": " +
+                             exception.getClass().getName());
+ 	ioe.initCause(exception);
+ 	throw ioe;
+       }
+     catch (Exception x)
+       {
+ 	IOException ioe
+ 	  = new IOException("Failure invoking writeObject() on " +
+ 			    osc.forClass().getName() + ": " +
+ 			    x.getClass().getName());
+ 	ioe.initCause(x);
+ 	throw ioe;
+       }
+   }
+ 
+   private boolean getBooleanField(Object obj, Class klass, String field_name)
+     throws IOException
+   {
+     try
+       {
+ 	Field f = getField(klass, field_name);
+ 	boolean b = f.getBoolean(obj);
+ 	return b;
+       }
+     catch (IllegalArgumentException _)
+       {
+ 	throw new InvalidClassException
+ 	  ("invalid requested type for field " + field_name + " in class " + klass.getName());
+       }
+     catch (IOException e)
+       {
+ 	throw e;
+       }
+     catch (Exception _)
+       {
+ 	throw new IOException("Unexpected exception " + _);
+       }
+   }
+ 
+   private byte getByteField (Object obj, Class klass, String field_name)
+     throws IOException
+   {
+     try
+       {
+ 	Field f = getField (klass, field_name);
+ 	byte b = f.getByte (obj);
+ 	return b;
+       }
+     catch (IllegalArgumentException _)
+       {
+ 	throw new InvalidClassException
+ 	  ("invalid requested type for field " + field_name + " in class " + klass.getName());
+       }
+     catch (IOException e)
+       {
+ 	throw e;
+       }
+     catch (Exception _)
+       {
+ 	throw new IOException("Unexpected exception " + _);
+       }    
+   }
+ 
+   private char getCharField (Object obj, Class klass, String field_name)
+     throws IOException
+   {
+     try
+       {
+ 	Field f = getField (klass, field_name);
+ 	char b = f.getChar (obj);
+ 	return b;
+       }
+     catch (IllegalArgumentException _)
+       {
+ 	throw new InvalidClassException
+ 	  ("invalid requested type for field " + field_name + " in class " + klass.getName());
+       }
+     catch (IOException e)
+       {
+ 	throw e;
+       }
+     catch (Exception _)
+       {
+ 	throw new IOException("Unexpected exception " + _);
+       }    
+   }
+ 
+   private double getDoubleField (Object obj, Class klass, String field_name)
+     throws IOException
+   {
+     try
+       {
+ 	Field f = getField (klass, field_name);
+ 	double b = f.getDouble (obj);
+ 	return b;
+       }
+     catch (IllegalArgumentException _)
+       {
+ 	throw new InvalidClassException
+ 	  ("invalid requested type for field " + field_name + " in class " + klass.getName());
+       }
+     catch (IOException e)
+       {
+ 	throw e;
+       }
+     catch (Exception _)
+       {
+ 	throw new IOException("Unexpected exception " + _);
+       }    
+   }
+ 
+   private float getFloatField (Object obj, Class klass, String field_name)
+     throws IOException
+   {
+     try
+       {
+ 	Field f = getField (klass, field_name);
+ 	float b = f.getFloat (obj);
+ 	return b;
+       }
+     catch (IllegalArgumentException _)
+       {
+ 	throw new InvalidClassException
+ 	  ("invalid requested type for field " + field_name + " in class " + klass.getName());
+       }
+     catch (IOException e)
+       {
+ 	throw e;
+       }
+     catch (Exception _)
+       {
+ 	throw new IOException("Unexpected exception " + _);
+       }
+   }
+ 
+   private int getIntField (Object obj, Class klass, String field_name)
+     throws IOException
+   {
+     try
+       {
+ 	Field f = getField (klass, field_name);
+ 	int b = f.getInt (obj);
+ 	return b;
+       }
+     catch (IllegalArgumentException _)
+       {
+ 	throw new InvalidClassException
+ 	  ("invalid requested type for field " + field_name + " in class " + klass.getName());
+       }
+     catch (IOException e)
+       {
+ 	throw e;
+       }
+     catch (Exception _)
+       {
+ 	throw new IOException("Unexpected exception " + _);
+       }
+   }
+ 
+   private long getLongField (Object obj, Class klass, String field_name)
+     throws IOException
+   {
+     try
+       {
+ 	Field f = getField (klass, field_name);
+ 	long b = f.getLong (obj);
+ 	return b;
+       }
+     catch (IllegalArgumentException _)
+       {
+ 	throw new InvalidClassException
+ 	  ("invalid requested type for field " + field_name + " in class " + klass.getName());
+       }
+     catch (IOException e)
+       {
+ 	throw e;
+       }
+     catch (Exception _)
+       {
+ 	throw new IOException("Unexpected exception " + _);
+       }    
+   }
+ 
+   private short getShortField (Object obj, Class klass, String field_name)
+     throws IOException
+   {
+     try
+       {
+ 	Field f = getField (klass, field_name);
+ 	short b = f.getShort (obj);
+ 	return b;
+       }
+     catch (IllegalArgumentException _)
+       {
+ 	throw new InvalidClassException
+ 	  ("invalid requested type for field " + field_name + " in class " + klass.getName());
+       }
+     catch (IOException e)
+       {
+        throw e;
+       }
+     catch (Exception _)
+       {
+ 	throw new IOException("Unexpected exception " + _);
+       }
+   }
+ 
+   private Object getObjectField (Object obj, Class klass, String field_name,
+ 				 String type_code) throws IOException
+   {
+     try
+       {
+ 	Field f = getField (klass, field_name);
+ 	ObjectStreamField of = new ObjectStreamField(f.getName(), f.getType());
+ 
+ 	/* if of is primitive something went wrong
+ 	 * in the check for primitive classes in writeFields.
+ 	 */
+ 	if (of.isPrimitive())
+ 	  throw new InvalidClassException
+ 	    ("invalid type code for " + field_name + " in class " + klass.getName() + " : object stream field is primitive");
+ 
+ 	if (!of.getTypeString().equals(type_code))
+ 	    throw new InvalidClassException
+ 		("invalid type code for " + field_name + " in class " + klass.getName() + " : object stream field " + of + " has type string " + of.getTypeString() + " instead of " + type_code);
+ 
+ 	Object o = f.get (obj);
+ 	// FIXME: We should check the type_code here
+ 	return o;
+       }
+     catch (IOException e)
+       {
+ 	throw e;
+       }
+     catch (Exception e)
+       {
+ 	throw new IOException ();
+       }    
+   }
+ 
+   private Field getField (Class klass, String name)
+     throws java.io.InvalidClassException
+   {
+     try
+       {
+ 	final Field f = klass.getDeclaredField(name);
+ 	setAccessible.setMember(f);
+ 	AccessController.doPrivileged(setAccessible);
+ 	return f;
+       }
+     catch (java.lang.NoSuchFieldException e)
+       {
+ 	throw new InvalidClassException
+ 	  ("no field called " + name + " in class " + klass.getName());
+       }
+   }
+ 
+   private void dumpElementln (String msg)
+   {
+     for (int i = 0; i < depth; i++)
+       System.out.print (" ");
+     System.out.print (Thread.currentThread() + ": ");
+     System.out.println(msg);
+   }
+ 
+   // this value comes from 1.2 spec, but is used in 1.1 as well
+   private static final int BUFFER_SIZE = 1024;
+ 
+   private static int defaultProtocolVersion = PROTOCOL_VERSION_2;
+ 
+   private DataOutputStream dataOutput;
+   private boolean writeDataAsBlocks;
+   private DataOutputStream realOutput;
+   private DataOutputStream blockDataOutput;
+   private byte[] blockData;
+   private int blockDataCount;
+   private Object currentObject;
+   // Package-private to avoid a trampoline.
+   ObjectStreamClass currentObjectStreamClass;
+   private PutField currentPutField;
+   private boolean fieldsAlreadyWritten;
+   private boolean replacementEnabled;
+   private boolean isSerializing;
+   private int nextOID;
+   private Hashtable OIDLookupTable;
+   private int protocolVersion;
+   private boolean useSubclassMethod;
+   private SetAccessibleAction setAccessible = new SetAccessibleAction();
+ 
+   // The nesting depth for debugging output
+   private int depth = 0;
+ 
+   // Set if we're generating debugging dumps
+   private boolean dump = false;
+ 
+   private static final boolean DEBUG = false;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ObjectStreamClass.java gcc-4.1.0/libjava/classpath/java/io/ObjectStreamClass.java
*** gcc-4.0.2/libjava/classpath/java/io/ObjectStreamClass.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ObjectStreamClass.java	Tue Nov 15 17:08:45 2005
***************
*** 0 ****
--- 1,977 ----
+ /* ObjectStreamClass.java -- Class used to write class information
+    about serialized objects.
+    Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.io.NullOutputStream;
+ import gnu.java.lang.reflect.TypeSignature;
+ import gnu.java.security.action.SetAccessibleAction;
+ import gnu.java.security.provider.Gnu;
+ 
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Member;
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Modifier;
+ import java.lang.reflect.Proxy;
+ import java.security.AccessController;
+ import java.security.DigestOutputStream;
+ import java.security.MessageDigest;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.PrivilegedAction;
+ import java.security.Security;
+ import java.util.Arrays;
+ import java.util.Comparator;
+ import java.util.Hashtable;
+ import java.util.Vector;
+ 
+ public class ObjectStreamClass implements Serializable
+ {
+   /**
+    * Returns the <code>ObjectStreamClass</code> for <code>cl</code>.
+    * If <code>cl</code> is null, or is not <code>Serializable</code>,
+    * null is returned.  <code>ObjectStreamClass</code>'s are memorized;
+    * later calls to this method with the same class will return the
+    * same <code>ObjectStreamClass</code> object and no recalculation
+    * will be done.
+    *
+    * @see java.io.Serializable
+    */
+   public static ObjectStreamClass lookup(Class cl)
+   {
+     if (cl == null)
+       return null;
+     if (! (Serializable.class).isAssignableFrom(cl))
+       return null;
+ 
+     return lookupForClassObject(cl);
+   }
+ 
+   /**
+    * This lookup for internal use by ObjectOutputStream.  Suppose
+    * we have a java.lang.Class object C for class A, though A is not
+    * serializable, but it's okay to serialize C.
+    */
+   static ObjectStreamClass lookupForClassObject(Class cl)
+   {
+     if (cl == null)
+       return null;
+ 
+     ObjectStreamClass osc = (ObjectStreamClass) classLookupTable.get(cl);
+ 
+     if (osc != null)
+       return osc;
+     else
+       {
+ 	osc = new ObjectStreamClass(cl);
+ 	classLookupTable.put(cl, osc);
+ 	return osc;
+       }
+   }
+ 
+   /**
+    * Returns the name of the class that this
+    * <code>ObjectStreamClass</code> represents.
+    *
+    * @return the name of the class.
+    */
+   public String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Returns the class that this <code>ObjectStreamClass</code>
+    * represents.  Null could be returned if this
+    * <code>ObjectStreamClass</code> was read from an
+    * <code>ObjectInputStream</code> and the class it represents cannot
+    * be found or loaded.
+    *
+    * @see java.io.ObjectInputStream
+    */
+   public Class forClass()
+   {
+     return clazz;
+   }
+ 
+   /**
+    * Returns the serial version stream-unique identifier for the class
+    * represented by this <code>ObjectStreamClass</code>.  This SUID is
+    * either defined by the class as <code>static final long
+    * serialVersionUID</code> or is calculated as specified in
+    * Javasoft's "Object Serialization Specification" XXX: add reference
+    *
+    * @return the serial version UID.
+    */
+   public long getSerialVersionUID()
+   {
+     return uid;
+   }
+ 
+   /**
+    * Returns the serializable (non-static and non-transient) Fields
+    * of the class represented by this ObjectStreamClass.  The Fields
+    * are sorted by name.
+    *
+    * @return the fields.
+    */
+   public ObjectStreamField[] getFields()
+   {
+     ObjectStreamField[] copy = new ObjectStreamField[ fields.length ];
+     System.arraycopy(fields, 0, copy, 0, fields.length);
+     return copy;
+   }
+ 
+   // XXX doc
+   // Can't do binary search since fields is sorted by name and
+   // primitiveness.
+   public ObjectStreamField getField (String name)
+   {
+     for (int i = 0; i < fields.length; i++)
+       if (fields[i].getName().equals(name))
+ 	return fields[i];
+     return null;
+   }
+ 
+   /**
+    * Returns a textual representation of this
+    * <code>ObjectStreamClass</code> object including the name of the
+    * class it represents as well as that class's serial version
+    * stream-unique identifier.
+    *
+    * @see #getSerialVersionUID()
+    * @see #getName()
+    */
+   public String toString()
+   {
+     return "java.io.ObjectStreamClass< " + name + ", " + uid + " >";
+   }
+ 
+   // Returns true iff the class that this ObjectStreamClass represents
+   // has the following method:
+   //
+   // private void writeObject (ObjectOutputStream)
+   //
+   // This method is used by the class to override default
+   // serialization behavior.
+   boolean hasWriteMethod()
+   {
+     return (flags & ObjectStreamConstants.SC_WRITE_METHOD) != 0;
+   }
+ 
+   // Returns true iff the class that this ObjectStreamClass represents
+   // implements Serializable but does *not* implement Externalizable.
+   boolean isSerializable()
+   {
+     return (flags & ObjectStreamConstants.SC_SERIALIZABLE) != 0;
+   }
+ 
+ 
+   // Returns true iff the class that this ObjectStreamClass represents
+   // implements Externalizable.
+   boolean isExternalizable()
+   {
+     return (flags & ObjectStreamConstants.SC_EXTERNALIZABLE) != 0;
+   }
+ 
+ 
+   // Returns the <code>ObjectStreamClass</code> that represents the
+   // class that is the superclass of the class this
+   // <code>ObjectStreamClass</code> represents.  If the superclass is
+   // not Serializable, null is returned.
+   ObjectStreamClass getSuper()
+   {
+     return superClass;
+   }
+ 
+ 
+   // returns an array of ObjectStreamClasses that represent the super
+   // classes of CLAZZ and CLAZZ itself in order from most super to
+   // CLAZZ.  ObjectStreamClass[0] is the highest superclass of CLAZZ
+   // that is serializable.
+   static ObjectStreamClass[] getObjectStreamClasses(Class clazz)
+   {
+     ObjectStreamClass osc = ObjectStreamClass.lookup(clazz);
+ 
+     if (osc == null)
+       return new ObjectStreamClass[0];
+     else
+       {
+ 	Vector oscs = new Vector();
+ 
+ 	while (osc != null)
+ 	  {
+ 	    oscs.addElement (osc);
+ 	    osc = osc.getSuper();
+ 	  }
+ 
+ 	int count = oscs.size();
+ 	ObjectStreamClass[] sorted_oscs = new ObjectStreamClass[ count ];
+ 
+ 	for (int i = count - 1; i >= 0; i--)
+ 	  sorted_oscs[ count - i - 1 ] = (ObjectStreamClass) oscs.elementAt(i);
+ 
+ 	return sorted_oscs;
+       }
+   }
+ 
+ 
+   // Returns an integer that consists of bit-flags that indicate
+   // properties of the class represented by this ObjectStreamClass.
+   // The bit-flags that could be present are those defined in
+   // ObjectStreamConstants that begin with `SC_'
+   int getFlags()
+   {
+     return flags;
+   }
+ 
+ 
+   ObjectStreamClass(String name, long uid, byte flags,
+ 		    ObjectStreamField[] fields)
+   {
+     this.name = name;
+     this.uid = uid;
+     this.flags = flags;
+     this.fields = fields;
+   }
+ 
+   /**
+    * This method builds the internal description corresponding to a Java Class.
+    * As the constructor only assign a name to the current ObjectStreamClass instance,
+    * that method sets the serial UID, chose the fields which will be serialized,
+    * and compute the position of the fields in the serialized stream.
+    *
+    * @param cl The Java class which is used as a reference for building the descriptor.
+    * @param superClass The descriptor of the super class for this class descriptor.
+    * @throws InvalidClassException if an incompatibility between computed UID and
+    * already set UID is found.
+    */
+   void setClass(Class cl, ObjectStreamClass superClass) throws InvalidClassException
+   {
+     this.clazz = cl;
+ 
+     cacheMethods();
+ 
+     long class_uid = getClassUID(cl);
+     if (uid == 0)
+       uid = class_uid;
+     else
+       {
+ 	// Check that the actual UID of the resolved class matches the UID from 
+ 	// the stream.    
+ 	if (uid != class_uid)
+ 	  {
+ 	    String msg = cl + 
+ 	      ": Local class not compatible: stream serialVersionUID="
+ 	      + uid + ", local serialVersionUID=" + class_uid;
+ 	    throw new InvalidClassException (msg);
+ 	  }
+       }
+ 
+     isProxyClass = clazz != null && Proxy.isProxyClass(clazz);
+     this.superClass = superClass;
+     calculateOffsets();
+     
+     try
+       {
+ 	ObjectStreamField[] exportedFields = getSerialPersistentFields (clazz);  
+ 
+ 	if (exportedFields == null)
+ 	  return;
+ 
+ 	ObjectStreamField[] newFieldList = new ObjectStreamField[exportedFields.length + fields.length];
+ 	int i, j, k;
+ 
+ 	/* We now check the import fields against the exported fields.
+ 	 * There should not be contradiction (e.g. int x and String x)
+ 	 * but extra virtual fields can be added to the class.
+ 	 */
+ 
+ 	Arrays.sort(exportedFields);
+ 
+ 	i = 0; j = 0; k = 0;
+ 	while (i < fields.length && j < exportedFields.length)
+ 	  {
+ 	    int comp = fields[i].compareTo(exportedFields[j]);
+ 
+ 	    if (comp < 0)
+ 	      {
+ 		newFieldList[k] = fields[i];
+ 		fields[i].setPersistent(false);
+ 		fields[i].setToSet(false);
+ 		i++;
+ 	      }
+ 	    else if (comp > 0)
+ 	      {
+ 		/* field not found in imported fields. We add it
+ 		 * in the list of supported fields.
+ 		 */
+ 		newFieldList[k] = exportedFields[j];
+ 		newFieldList[k].setPersistent(true);
+ 		newFieldList[k].setToSet(false);
+ 		try
+ 		  {
+ 		    newFieldList[k].lookupField(clazz);
+ 		    newFieldList[k].checkFieldType();
+ 		  }
+ 		catch (NoSuchFieldException _)
+ 		  {
+ 		  }
+ 		j++;
+ 	      }
+ 	    else
+ 	      {
+ 		try
+ 		  {
+ 		    exportedFields[j].lookupField(clazz);
+ 		    exportedFields[j].checkFieldType();
+ 		  }
+ 		catch (NoSuchFieldException _)
+ 		  {
+ 		  }
+ 
+ 		if (!fields[i].getType().equals(exportedFields[j].getType()))
+ 		  throw new InvalidClassException
+ 		    ("serialPersistentFields must be compatible with" +
+ 		     " imported fields (about " + fields[i].getName() + ")");
+ 		newFieldList[k] = fields[i];
+ 		fields[i].setPersistent(true);
+ 		i++;
+ 		j++;
+ 	      }
+ 	    k++;
+ 	  }
+ 
+ 	if (i < fields.length)
+ 	  for (;i<fields.length;i++,k++)
+ 	    {
+ 	      fields[i].setPersistent(false);
+ 	      fields[i].setToSet(false);
+ 	      newFieldList[k] = fields[i];
+ 	    }
+ 	else
+ 	  if (j < exportedFields.length)
+ 	    for (;j<exportedFields.length;j++,k++)
+ 	      {
+ 		exportedFields[j].setPersistent(true);
+ 		exportedFields[j].setToSet(false);
+ 		newFieldList[k] = exportedFields[j];
+ 	      }
+ 	
+ 	fields = new ObjectStreamField[k];
+ 	System.arraycopy(newFieldList, 0, fields, 0, k);
+       }
+     catch (NoSuchFieldException ignore)
+       {
+ 	return;
+       }
+     catch (IllegalAccessException ignore)
+       {
+ 	return;
+       }
+   }
+ 
+   void setSuperclass (ObjectStreamClass osc)
+   {
+     superClass = osc;
+   }
+ 
+   void calculateOffsets()
+   {
+     int i;
+     ObjectStreamField field;
+     primFieldSize = 0;
+     int fcount = fields.length;
+     for (i = 0; i < fcount; ++ i)
+       {
+ 	field = fields[i];
+ 
+ 	if (! field.isPrimitive())
+ 	  break;
+ 
+ 	field.setOffset(primFieldSize);
+ 	switch (field.getTypeCode())
+ 	  {
+ 	  case 'B':
+ 	  case 'Z':
+ 	    ++ primFieldSize;
+ 	    break;
+ 	  case 'C':
+ 	  case 'S':
+ 	    primFieldSize += 2;
+ 	    break;
+ 	  case 'I':
+ 	  case 'F':
+ 	    primFieldSize += 4;
+ 	    break;
+ 	  case 'D':
+ 	  case 'J':
+ 	    primFieldSize += 8;
+ 	    break;
+ 	  }
+       }
+ 
+     for (objectFieldCount = 0; i < fcount; ++ i)
+       fields[i].setOffset(objectFieldCount++);
+   }
+ 
+   private Method findMethod(Method[] methods, String name, Class[] params,
+ 			    Class returnType, boolean mustBePrivate)
+   {
+ outer:
+     for (int i = 0; i < methods.length; i++)
+     {
+ 	final Method m = methods[i];
+         int mods = m.getModifiers();
+         if (Modifier.isStatic(mods)
+             || (mustBePrivate && !Modifier.isPrivate(mods)))
+         {
+             continue;
+         }
+ 
+ 	if (m.getName().equals(name)
+ 	   && m.getReturnType() == returnType)
+ 	{
+ 	    Class[] mp = m.getParameterTypes();
+ 	    if (mp.length == params.length)
+ 	    {
+ 		for (int j = 0; j < mp.length; j++)
+ 		{
+ 		    if (mp[j] != params[j])
+ 		    {
+ 			continue outer;
+ 		    }
+ 		}
+ 		AccessController.doPrivileged(new SetAccessibleAction(m));
+ 		return m;
+ 	    }
+ 	}
+     }
+     return null;
+   }
+ 
+   private static boolean inSamePackage(Class c1, Class c2)
+   {
+     String name1 = c1.getName();
+     String name2 = c2.getName();
+ 
+     int id1 = name1.lastIndexOf('.');
+     int id2 = name2.lastIndexOf('.');
+ 
+     // Handle the default package
+     if (id1 == -1 || id2 == -1)
+       return id1 == id2;
+ 
+     String package1 = name1.substring(0, id1);
+     String package2 = name2.substring(0, id2);
+ 
+     return package1.equals(package2);
+   }
+ 
+   final static Class[] noArgs = new Class[0];
+ 
+   private static Method findAccessibleMethod(String name, Class from)
+   {
+     for (Class c = from; c != null; c = c.getSuperclass())
+       {
+ 	try
+ 	  {
+ 	    Method res = c.getDeclaredMethod(name, noArgs);
+ 	    int mods = res.getModifiers();
+ 	    
+ 	    if (c == from  
+ 		|| Modifier.isProtected(mods)
+ 		|| Modifier.isPublic(mods)
+ 		|| (! Modifier.isPrivate(mods) && inSamePackage(c, from)))
+ 	      {
+ 		AccessController.doPrivileged(new SetAccessibleAction(res));
+ 		return res;
+ 	      }
+ 	  }
+ 	catch (NoSuchMethodException e)
+ 	  {
+ 	  }
+       }
+ 
+     return null;
+   }
+ 
+   private void cacheMethods()
+   {
+     Method[] methods = forClass().getDeclaredMethods();
+ 
+     readObjectMethod = findMethod(methods, "readObject",
+ 				  new Class[] { ObjectInputStream.class },
+ 				  Void.TYPE, true);
+     writeObjectMethod = findMethod(methods, "writeObject",
+                                    new Class[] { ObjectOutputStream.class },
+                                    Void.TYPE, true);
+ 
+     // readResolve and writeReplace can be in parent classes, as long as they
+     // are accessible from this class.
+     readResolveMethod = findAccessibleMethod("readResolve", forClass());
+     writeReplaceMethod = findAccessibleMethod("writeReplace", forClass());
+   }
+ 
+   private ObjectStreamClass(Class cl)
+   {
+     uid = 0;
+     flags = 0;
+     isProxyClass = Proxy.isProxyClass(cl);
+ 
+     clazz = cl;
+     cacheMethods();
+     name = cl.getName();
+     setFlags(cl);
+     setFields(cl);
+     // to those class nonserializable, its uid field is 0
+     if ( (Serializable.class).isAssignableFrom(cl) && !isProxyClass)
+       uid = getClassUID(cl);
+     superClass = lookup(cl.getSuperclass());
+   }
+ 
+ 
+   // Sets bits in flags according to features of CL.
+   private void setFlags(Class cl)
+   {
+     if ((java.io.Externalizable.class).isAssignableFrom(cl))
+       flags |= ObjectStreamConstants.SC_EXTERNALIZABLE;
+     else if ((java.io.Serializable.class).isAssignableFrom(cl))
+       // only set this bit if CL is NOT Externalizable
+       flags |= ObjectStreamConstants.SC_SERIALIZABLE;
+ 
+     if (writeObjectMethod != null)
+       flags |= ObjectStreamConstants.SC_WRITE_METHOD;
+   }
+ 
+ 
+   // Sets fields to be a sorted array of the serializable fields of
+   // clazz.
+   private void setFields(Class cl)
+   {
+     SetAccessibleAction setAccessible = new SetAccessibleAction();
+ 
+     if (!isSerializable() || isExternalizable())
+       {
+ 	fields = NO_FIELDS;
+ 	return;
+       }
+ 
+     try
+       {
+ 	final Field f =
+ 	  cl.getDeclaredField("serialPersistentFields");
+ 	setAccessible.setMember(f);
+ 	AccessController.doPrivileged(setAccessible);
+ 	int modifiers = f.getModifiers();
+ 
+ 	if (Modifier.isStatic(modifiers)
+ 	    && Modifier.isFinal(modifiers)
+ 	    && Modifier.isPrivate(modifiers))
+ 	  {
+ 	    fields = getSerialPersistentFields(cl);
+ 	    if (fields != null)
+ 	      {
+ 		Arrays.sort (fields);
+ 		// Retrieve field reference.
+ 		for (int i=0; i < fields.length; i++)
+ 		  {
+ 		    try
+ 		      {
+ 			fields[i].lookupField(cl);
+ 		      }
+ 		    catch (NoSuchFieldException _)
+ 		      {
+ 			fields[i].setToSet(false);
+ 		      }
+ 		  }
+ 		
+ 		calculateOffsets();
+ 		return;
+ 	      }
+ 	  }
+       }
+     catch (NoSuchFieldException ignore)
+       {
+       }
+     catch (IllegalAccessException ignore)
+       {
+       }
+ 
+     int num_good_fields = 0;
+     Field[] all_fields = cl.getDeclaredFields();
+ 
+     int modifiers;
+     // set non-serializable fields to null in all_fields
+     for (int i = 0; i < all_fields.length; i++)
+       {
+ 	modifiers = all_fields[i].getModifiers();
+ 	if (Modifier.isTransient(modifiers)
+ 	    || Modifier.isStatic(modifiers))
+ 	  all_fields[i] = null;
+ 	else
+ 	  num_good_fields++;
+       }
+ 
+     // make a copy of serializable (non-null) fields
+     fields = new ObjectStreamField[ num_good_fields ];
+     for (int from = 0, to = 0; from < all_fields.length; from++)
+       if (all_fields[from] != null)
+ 	{
+ 	  final Field f = all_fields[from];
+ 	  setAccessible.setMember(f);
+ 	  AccessController.doPrivileged(setAccessible);
+ 	  fields[to] = new ObjectStreamField(all_fields[from]);
+ 	  to++;
+ 	}
+ 
+     Arrays.sort(fields);
+     // Make sure we don't have any duplicate field names
+     // (Sun JDK 1.4.1. throws an Internal Error as well)
+     for (int i = 1; i < fields.length; i++)
+       {
+ 	if(fields[i - 1].getName().equals(fields[i].getName()))
+ 	    throw new InternalError("Duplicate field " + 
+ 			fields[i].getName() + " in class " + cl.getName());
+       }
+     calculateOffsets();
+   }
+ 
+   // Returns the serial version UID defined by class, or if that
+   // isn't present, calculates value of serial version UID.
+   private long getClassUID(Class cl)
+   {
+     try
+       {
+ 	// Use getDeclaredField rather than getField, since serialVersionUID
+ 	// may not be public AND we only want the serialVersionUID of this
+ 	// class, not a superclass or interface.
+ 	final Field suid = cl.getDeclaredField("serialVersionUID");
+ 	SetAccessibleAction setAccessible = new SetAccessibleAction(suid);
+ 	AccessController.doPrivileged(setAccessible);
+ 	int modifiers = suid.getModifiers();
+ 
+ 	if (Modifier.isStatic(modifiers)
+ 	    && Modifier.isFinal(modifiers)
+ 	    && suid.getType() == Long.TYPE)
+ 	  return suid.getLong(null);
+       }
+     catch (NoSuchFieldException ignore)
+       {
+       }
+     catch (IllegalAccessException ignore)
+       {
+       }
+ 
+     // cl didn't define serialVersionUID, so we have to compute it
+     try
+       {
+ 	MessageDigest md;
+ 	try 
+ 	  {
+ 	    md = MessageDigest.getInstance("SHA");
+ 	  }
+ 	catch (NoSuchAlgorithmException e)
+ 	  {
+ 	    // If a provider already provides SHA, use it; otherwise, use this.
+ 	    Gnu gnuProvider = new Gnu();
+ 	    Security.addProvider(gnuProvider);
+ 	    md = MessageDigest.getInstance("SHA");
+ 	  }
+ 
+ 	DigestOutputStream digest_out =
+ 	  new DigestOutputStream(nullOutputStream, md);
+ 	DataOutputStream data_out = new DataOutputStream(digest_out);
+ 
+ 	data_out.writeUTF(cl.getName());
+ 
+ 	int modifiers = cl.getModifiers();
+ 	// just look at interesting bits
+ 	modifiers = modifiers & (Modifier.ABSTRACT | Modifier.FINAL
+ 				 | Modifier.INTERFACE | Modifier.PUBLIC);
+ 	data_out.writeInt(modifiers);
+ 
+ 	// Pretend that an array has no interfaces, because when array
+ 	// serialization was defined (JDK 1.1), arrays didn't have it.
+ 	if (! cl.isArray())
+ 	  {
+ 	    Class[] interfaces = cl.getInterfaces();
+ 	    Arrays.sort(interfaces, interfaceComparator);
+ 	    for (int i = 0; i < interfaces.length; i++)
+ 	      data_out.writeUTF(interfaces[i].getName());
+ 	  }
+ 
+ 	Field field;
+ 	Field[] fields = cl.getDeclaredFields();
+ 	Arrays.sort(fields, memberComparator);
+ 	for (int i = 0; i < fields.length; i++)
+ 	  {
+ 	    field = fields[i];
+ 	    modifiers = field.getModifiers();
+ 	    if (Modifier.isPrivate(modifiers)
+ 		&& (Modifier.isStatic(modifiers)
+ 		    || Modifier.isTransient(modifiers)))
+ 	      continue;
+ 
+ 	    data_out.writeUTF(field.getName());
+ 	    data_out.writeInt(modifiers);
+ 	    data_out.writeUTF(TypeSignature.getEncodingOfClass (field.getType()));
+ 	  }
+ 
+ 	// write class initializer method if present
+ 	if (VMObjectStreamClass.hasClassInitializer(cl))
+ 	  {
+ 	    data_out.writeUTF("<clinit>");
+ 	    data_out.writeInt(Modifier.STATIC);
+ 	    data_out.writeUTF("()V");
+ 	  }
+ 
+ 	Constructor constructor;
+ 	Constructor[] constructors = cl.getDeclaredConstructors();
+ 	Arrays.sort (constructors, memberComparator);
+ 	for (int i = 0; i < constructors.length; i++)
+ 	  {
+ 	    constructor = constructors[i];
+ 	    modifiers = constructor.getModifiers();
+ 	    if (Modifier.isPrivate(modifiers))
+ 	      continue;
+ 
+ 	    data_out.writeUTF("<init>");
+ 	    data_out.writeInt(modifiers);
+ 
+ 	    // the replacement of '/' with '.' was needed to make computed
+ 	    // SUID's agree with those computed by JDK
+ 	    data_out.writeUTF 
+ 	      (TypeSignature.getEncodingOfConstructor(constructor).replace('/','.'));
+ 	  }
+ 
+ 	Method method;
+ 	Method[] methods = cl.getDeclaredMethods();
+ 	Arrays.sort(methods, memberComparator);
+ 	for (int i = 0; i < methods.length; i++)
+ 	  {
+ 	    method = methods[i];
+ 	    modifiers = method.getModifiers();
+ 	    if (Modifier.isPrivate(modifiers))
+ 	      continue;
+ 
+ 	    data_out.writeUTF(method.getName());
+ 	    data_out.writeInt(modifiers);
+ 
+ 	    // the replacement of '/' with '.' was needed to make computed
+ 	    // SUID's agree with those computed by JDK
+ 	    data_out.writeUTF
+ 	      (TypeSignature.getEncodingOfMethod(method).replace('/', '.'));
+ 	  }
+ 
+ 	data_out.close();
+ 	byte[] sha = md.digest();
+ 	long result = 0;
+ 	int len = sha.length < 8 ? sha.length : 8;
+ 	for (int i = 0; i < len; i++)
+ 	  result += (long) (sha[i] & 0xFF) << (8 * i);
+ 
+ 	return result;
+       }
+     catch (NoSuchAlgorithmException e)
+       {
+ 	throw new RuntimeException
+ 	  ("The SHA algorithm was not found to use in computing the Serial Version UID for class "
+ 	   + cl.getName(), e);
+       }
+     catch (IOException ioe)
+       {
+ 	throw new RuntimeException(ioe);
+       }
+   }
+ 
+   /**
+    * Returns the value of CLAZZ's private static final field named
+    * `serialPersistentFields'. It performs some sanity checks before
+    * returning the real array. Besides, the returned array is a clean
+    * copy of the original. So it can be modified.
+    *
+    * @param clazz Class to retrieve 'serialPersistentFields' from.
+    * @return The content of 'serialPersistentFields'.
+    */
+   private ObjectStreamField[] getSerialPersistentFields(Class clazz) 
+     throws NoSuchFieldException, IllegalAccessException
+   {
+     ObjectStreamField[] fieldsArray = null;
+     ObjectStreamField[] o;
+ 
+     // Use getDeclaredField rather than getField for the same reason
+     // as above in getDefinedSUID.
+     Field f = clazz.getDeclaredField("serialPersistentFields");
+     f.setAccessible(true);
+ 
+     int modifiers = f.getModifiers();
+     if (!(Modifier.isStatic(modifiers) &&
+ 	  Modifier.isFinal(modifiers) &&
+ 	  Modifier.isPrivate(modifiers)))
+       return null;
+     
+     o = (ObjectStreamField[]) f.get(null);
+     
+     if (o == null)
+       return null;
+ 
+     fieldsArray = new ObjectStreamField[ o.length ];
+     System.arraycopy(o, 0, fieldsArray, 0, o.length);
+ 
+     return fieldsArray;
+   }
+ 
+   /**
+    * Returns a new instance of the Class this ObjectStreamClass corresponds
+    * to.
+    * Note that this should only be used for Externalizable classes.
+    *
+    * @return A new instance.
+    */
+   Externalizable newInstance() throws InvalidClassException
+   {
+     synchronized(this)
+     {
+ 	if (constructor == null)
+ 	{
+ 	    try
+ 	    {
+ 		final Constructor c = clazz.getConstructor(new Class[0]);
+ 
+ 		AccessController.doPrivileged(new PrivilegedAction()
+ 		{
+ 		    public Object run()
+ 		    {
+ 			c.setAccessible(true);
+ 			return null;
+ 		    }
+ 		});
+ 
+ 		constructor = c;
+ 	    }
+ 	    catch(NoSuchMethodException x)
+ 	    {
+ 		throw new InvalidClassException(clazz.getName(),
+ 		    "No public zero-argument constructor");
+ 	    }
+ 	}
+     }
+ 
+     try
+     {
+ 	return (Externalizable)constructor.newInstance(null);
+     }
+     catch(Exception x)
+     {
+ 	throw (InvalidClassException)
+ 	    new InvalidClassException(clazz.getName(),
+ 		     "Unable to instantiate").initCause(x);
+     }
+   }
+ 
+   public static final ObjectStreamField[] NO_FIELDS = {};
+ 
+   private static Hashtable classLookupTable = new Hashtable();
+   private static final NullOutputStream nullOutputStream = new NullOutputStream();
+   private static final Comparator interfaceComparator = new InterfaceComparator();
+   private static final Comparator memberComparator = new MemberComparator();
+   private static final
+     Class[] writeMethodArgTypes = { java.io.ObjectOutputStream.class };
+ 
+   private ObjectStreamClass superClass;
+   private Class clazz;
+   private String name;
+   private long uid;
+   private byte flags;
+ 
+   // this field is package protected so that ObjectInputStream and
+   // ObjectOutputStream can access it directly
+   ObjectStreamField[] fields;
+ 
+   // these are accessed by ObjectIn/OutputStream
+   int primFieldSize = -1;  // -1 if not yet calculated
+   int objectFieldCount;
+ 
+   Method readObjectMethod;
+   Method readResolveMethod;
+   Method writeReplaceMethod;
+   Method writeObjectMethod;
+   boolean realClassIsSerializable;
+   boolean realClassIsExternalizable;
+   ObjectStreamField[] fieldMapping;
+   Constructor firstNonSerializableParentConstructor;
+   private Constructor constructor;  // default constructor for Externalizable
+ 
+   boolean isProxyClass = false;
+ 
+   // This is probably not necessary because this class is special cased already
+   // but it will avoid showing up as a discrepancy when comparing SUIDs.
+   private static final long serialVersionUID = -6120832682080437368L;
+ 
+ 
+   // interfaces are compared only by name
+   private static final class InterfaceComparator implements Comparator
+   {
+     public int compare(Object o1, Object o2)
+     {
+       return ((Class) o1).getName().compareTo(((Class) o2).getName());
+     }
+   }
+ 
+ 
+   // Members (Methods and Constructors) are compared first by name,
+   // conflicts are resolved by comparing type signatures
+   private static final class MemberComparator implements Comparator
+   {
+     public int compare(Object o1, Object o2)
+     {
+       Member m1 = (Member) o1;
+       Member m2 = (Member) o2;
+ 
+       int comp = m1.getName().compareTo(m2.getName());
+ 
+       if (comp == 0)
+         return TypeSignature.getEncodingOfMember(m1).
+ 	  compareTo(TypeSignature.getEncodingOfMember(m2));
+       else
+         return comp;
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ObjectStreamConstants.java gcc-4.1.0/libjava/classpath/java/io/ObjectStreamConstants.java
*** gcc-4.0.2/libjava/classpath/java/io/ObjectStreamConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ObjectStreamConstants.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,89 ----
+ /* ObjectStreamConstants.java -- Interface containing constant values
+    used in reading and writing serialized objects
+    Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This interface contains constants that are used in object
+  * serialization.  This interface is used by <code>ObjectOutputStream</code>,
+  * <code>ObjectInputStream</code>, and <code>ObjectStreamClass</code>.
+  * The values for these constants are specified by the Java library
+  * specification.
+  */
+ public interface ObjectStreamConstants
+ {
+   // FIXME: Javadoc comment these values.
+   int PROTOCOL_VERSION_1 = 1;
+   int PROTOCOL_VERSION_2 = 2;
+ 
+   short STREAM_MAGIC = (short)0xaced;
+   short STREAM_VERSION = 5;
+ 
+   byte TC_NULL = (byte)112;            //0x70
+   byte TC_REFERENCE = (byte)113;       //0x71
+   byte TC_CLASSDESC = (byte)114;       //0x72
+   byte TC_OBJECT = (byte)115;          //0x73
+   byte TC_STRING = (byte)116;          //0x74
+   byte TC_ARRAY = (byte)117;           //0x75
+   byte TC_CLASS = (byte)118;           //0x76
+   byte TC_BLOCKDATA = (byte)119;       //0x77
+   byte TC_ENDBLOCKDATA = (byte)120;    //0x78
+   byte TC_RESET = (byte)121;           //0x79
+   byte TC_BLOCKDATALONG = (byte)122;   //0x7A
+   byte TC_EXCEPTION = (byte)123;       //0x7B
+   byte TC_LONGSTRING = (byte)124;      //0x7C
+   byte TC_PROXYCLASSDESC = (byte)125;  //0x7D
+ 
+   byte TC_BASE = TC_NULL;
+   byte TC_MAX = TC_PROXYCLASSDESC;
+ 
+   int baseWireHandle = 0x7e0000;
+ 
+   byte SC_WRITE_METHOD = 0x01;
+   byte SC_SERIALIZABLE = 0x02;
+   byte SC_EXTERNALIZABLE = 0x04;
+   byte SC_BLOCK_DATA = 0x08;
+ 
+   SerializablePermission SUBSTITUTION_PERMISSION
+     = new SerializablePermission("enableSubstitution");
+ 
+   SerializablePermission SUBCLASS_IMPLEMENTATION_PERMISSION
+     = new SerializablePermission("enableSubclassImplementation");
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ObjectStreamException.java gcc-4.1.0/libjava/classpath/java/io/ObjectStreamException.java
*** gcc-4.0.2/libjava/classpath/java/io/ObjectStreamException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ObjectStreamException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* ObjectStreamException.java -- Superclass of all serialization exceptions
+    Copyright (C) 1998, 2000, 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when a problem occurs during serialization.
+  * There are more specific subclasses that give more fine grained
+  * indications of the precise failure.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class ObjectStreamException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 7260898174833392607L;
+ 
+   /**
+    * Create an exception without a descriptive error message.
+    */
+   protected ObjectStreamException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   protected ObjectStreamException(String message)
+   {
+     super(message);
+   }
+ } // class ObjectStreamException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/ObjectStreamField.java gcc-4.1.0/libjava/classpath/java/io/ObjectStreamField.java
*** gcc-4.0.2/libjava/classpath/java/io/ObjectStreamField.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/ObjectStreamField.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,412 ----
+ /* ObjectStreamField.java -- Class used to store name and class of fields
+    Copyright (C) 1998, 1999, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.lang.reflect.TypeSignature;
+ 
+ import java.lang.reflect.Field;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ 
+ /**
+  * This class intends to describe the field of a class for the serialization
+  * subsystem. Serializable fields in a serializable class can be explicitly
+  * exported using an array of ObjectStreamFields.
+  */
+ public class ObjectStreamField implements Comparable
+ {
+   private String name;
+   private Class type;
+   private String typename;
+   private int offset = -1; // XXX make sure this is correct
+   private boolean unshared;
+   private boolean persistent = false;
+   private boolean toset = true;
+   private Field field;
+ 
+   ObjectStreamField (Field field)
+   {
+     this (field.getName(), field.getType());
+     this.field = field;
+   }
+ 
+   /**
+    * This constructor creates an ObjectStreamField instance 
+    * which represents a field named <code>name</code> and is
+    * of the type <code>type</code>.
+    *
+    * @param name Name of the field to export.
+    * @param type Type of the field in the concerned class.
+    */
+   public ObjectStreamField (String name, Class type)
+   {
+     this (name, type, false);
+   }
+ 
+   /**
+    * This constructor creates an ObjectStreamField instance 
+    * which represents a field named <code>name</code> and is
+    * of the type <code>type</code>.
+    *
+    * @param name Name of the field to export.
+    * @param type Type of the field in the concerned class.
+    * @param unshared true if field will be unshared, false otherwise.
+    */
+   public ObjectStreamField (String name, Class type, boolean unshared)
+   {
+     if (name == null)
+       throw new NullPointerException();
+ 
+     this.name = name;
+     this.type = type;
+     this.typename = TypeSignature.getEncodingOfClass(type);
+     this.unshared = unshared;
+   }
+  
+   /**
+    * There are many cases you can not get java.lang.Class from typename 
+    * if your context class loader cannot load it, then use typename to
+    * construct the field.
+    *
+    * @param name Name of the field to export.
+    * @param typename The coded name of the type for this field.
+    */
+   ObjectStreamField (String name, String typename)
+   {
+     this.name = name;
+     this.typename = typename;
+     try
+       {
+         type = TypeSignature.getClassForEncoding(typename);
+       }
+     catch(ClassNotFoundException e)
+       {
+       }
+   }
+   
+   /**
+    * There are many cases you can not get java.lang.Class from typename 
+    * if your context class loader cann not load it, then use typename to
+    * construct the field.
+    *
+    * @param name Name of the field to export.
+    * @param typename The coded name of the type for this field.
+    * @param loader The class loader to use to resolve class names.
+    */
+   ObjectStreamField (String name, String typename, ClassLoader loader)
+   {
+     this.name = name;
+     this.typename = typename;
+     try
+       {
+         type = TypeSignature.getClassForEncoding(typename, true, loader);
+       }
+     catch(ClassNotFoundException e)
+       {
+       }
+   }
+ 
+   /**
+    * This method returns the name of the field represented by the
+    * ObjectStreamField instance.
+    *
+    * @return A string containing the name of the field.
+    */
+   public String getName ()
+   {
+     return name;
+   }
+ 
+   /**
+    * This method returns the class representing the type of the
+    * field which is represented by this instance of ObjectStreamField.
+    *
+    * @return A class representing the type of the field.
+    */
+   public Class getType ()
+   {
+     return type;
+   }
+ 
+   /**
+    * This method returns the char encoded type of the field which
+    * is represented by this instance of ObjectStreamField.
+    *
+    * @return A char representing the type of the field.
+    */
+   public char getTypeCode ()
+   {
+     return typename.charAt (0);
+   }
+ 
+   /**
+    * This method returns a more explicit type name than
+    * {@link #getTypeCode()} in the case the type is a real
+    * class (and not a primitive).
+    *
+    * @return The name of the type (class name) if it is not a 
+    * primitive, in the other case null is returned.
+    */
+   public String getTypeString ()
+   {
+     // use intern()
+     if (isPrimitive())
+       return null;
+     return typename.intern();
+   }
+ 
+   /**
+    * This method returns the current offset of the field in
+    * the serialization stream relatively to the other fields.
+    * The offset is expressed in bytes.
+    *
+    * @return The offset of the field in bytes.
+    * @see #setOffset(int)
+    */
+   public int getOffset ()
+   {
+     return offset;
+   }
+ 
+   /**
+    * This method sets the current offset of the field.
+    * 
+    * @param off The offset of the field in bytes.
+    * @see #getOffset()
+    */
+   protected void setOffset (int off)
+   {
+     offset = off;
+   }
+ 
+   /**
+    * This method returns whether the field represented by this object is
+    * unshared or not.
+    *
+    * @return Tells if this field is unshared or not.
+    */
+   public boolean isUnshared ()
+   {
+     return unshared;
+   }
+ 
+   /**
+    * This method returns true if the type of the field
+    * represented by this instance is a primitive.
+    *
+    * @return true if the type is a primitive, false
+    * in the other case.
+    */
+   public boolean isPrimitive ()
+   {
+     return typename.length() == 1;
+   }
+ 
+   /**
+    * Compares this object to the given object.
+    *
+    * @param obj the object to compare to.
+    *
+    * @return -1, 0 or 1.
+    */
+   public int compareTo (Object obj)
+   {
+     ObjectStreamField f = (ObjectStreamField) obj;
+     boolean this_is_primitive = isPrimitive ();
+     boolean f_is_primitive = f.isPrimitive ();
+ 
+     if (this_is_primitive && !f_is_primitive)
+       return -1;
+ 
+     if (!this_is_primitive && f_is_primitive)
+       return 1;
+ 
+     return getName ().compareTo (f.getName ());
+   }
+ 
+   /**
+    * This method is specific to classpath's implementation and so has the default
+    * access. It changes the state of this field to "persistent". It means that
+    * the field should not be changed when the stream is read (if it is not
+    * explicitly specified using serialPersistentFields).
+    *
+    * @param persistent True if the field is persistent, false in the 
+    * other cases.
+    * @see #isPersistent()
+    */
+   void setPersistent(boolean persistent)
+   {
+     this.persistent = persistent;
+   }
+ 
+   /**
+    * This method returns true if the field is marked as persistent.
+    *
+    * @return True if persistent, false in the other cases.
+    * @see #setPersistent(boolean)
+    */
+   boolean isPersistent()
+   {
+     return persistent;
+   }
+ 
+   /**
+    * This method is specific to classpath's implementation and so 
+    * has the default access. It changes the state of this field as
+    * to be set by ObjectInputStream.
+    *
+    * @param toset True if this field should be set, false in the other
+    * cases.
+    * @see #isToSet()
+    */
+   void setToSet(boolean toset)
+   {
+     this.toset = toset;
+   }
+ 
+   /**
+    * This method returns true if the field is marked as to be
+    * set.
+    *
+    * @return True if it is to be set, false in the other cases.
+    * @see #setToSet(boolean)
+    */
+   boolean isToSet()
+   {
+     return toset;
+   }
+ 
+   /**
+    * This method searches for its field reference in the specified class
+    * object. It requests privileges. If an error occurs the internal field
+    * reference is not modified.
+    *
+    * @throws NoSuchFieldException if the field name does not exist in this class.
+    * @throws SecurityException if there was an error requesting the privileges.
+    */
+   void lookupField(Class clazz) throws NoSuchFieldException, SecurityException
+   {
+     final Field f = clazz.getDeclaredField(name);
+     
+     AccessController.doPrivileged(new PrivilegedAction()
+       {
+ 	public Object run()
+ 	{
+ 	  f.setAccessible(true);
+ 	  return null;
+ 	}
+       });
+     
+     this.field = f;
+   }
+ 
+   /**
+    * This method check whether the field described by this
+    * instance of ObjectStreamField is compatible with the
+    * actual implementation of this field.
+    *
+    * @throws NullPointerException if this field does not exist
+    * in the real class.
+    * @throws InvalidClassException if the types are incompatible.
+    */
+   void checkFieldType() throws InvalidClassException
+   {
+     Class ftype = field.getType();
+ 
+     if (!ftype.isAssignableFrom(type))
+       throw new InvalidClassException
+ 	("invalid field type for " + name +
+ 	 " in class " + field.getDeclaringClass());
+   }
+ 
+   /**
+    * Returns a string representing this object.
+    *
+    * @return the string.
+    */
+   public String toString ()
+   {
+     return "ObjectStreamField< " + type + " " + name + " >";
+   }
+ 
+   final void setBooleanField(Object obj, boolean val)
+   {
+     VMObjectStreamClass.setBooleanNative(field, obj, val);  
+   }
+ 
+   final void setByteField(Object obj, byte val)
+   {
+     VMObjectStreamClass.setByteNative(field, obj, val);
+   }
+   
+   final void setCharField(Object obj, char val)
+   {
+     VMObjectStreamClass.setCharNative(field, obj, val);
+   }
+   
+   final void setShortField(Object obj, short val)
+   {
+     VMObjectStreamClass.setShortNative(field, obj, val);
+   }
+ 
+   final void setIntField(Object obj, int val)
+   {
+     VMObjectStreamClass.setIntNative(field, obj, val);
+   }
+   
+   final void setLongField(Object obj, long val)
+   {
+     VMObjectStreamClass.setLongNative(field, obj, val);
+   }
+   
+   final void setFloatField(Object obj, float val)
+   {
+     VMObjectStreamClass.setFloatNative(field, obj, val);
+   }
+   
+   final void setDoubleField(Object obj, double val)
+   {
+     VMObjectStreamClass.setDoubleNative(field, obj, val);
+   }
+   
+   final void setObjectField(Object obj, Object val)
+   { 
+     VMObjectStreamClass.setObjectNative(field, obj, val);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/OptionalDataException.java gcc-4.1.0/libjava/classpath/java/io/OptionalDataException.java
*** gcc-4.0.2/libjava/classpath/java/io/OptionalDataException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/OptionalDataException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* OptionalDataException.java -- indicates unexpected data in serialized stream
+    Copyright (C) 1998, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when unexpected data appears in the input
+  * stream from which a serialized object is being read. There are two
+  * cases:<br><ul>
+  * <li>The next stream element is primitive data. <code>eof</code> will
+  *     be false, and <code>count</code> is the number of bytes of primitive
+  *     data available.</li>
+  * <li>The data consumable by readObject or readExternal has been exhausted.
+  *     <code>eof</code> is true, and <code>count</code> is 0.</li>
+  * </ul>
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class OptionalDataException extends ObjectStreamException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -8011121865681257820L;
+ 
+   /**
+    * Whether or not the end of the stream has been reached.
+    *
+    * @serial the end of the buffer was reached
+    */
+   public boolean eof;
+ 
+   /**
+    * The number of valid bytes that can be read.
+    *
+    * @serial the bytes of the buffer remaining
+    */
+   public int length;
+ 
+   /**
+    * Create a new OptionalDataException with an eof parameter indicating
+    * whether or not the end of stream is reached and the number of valid
+    * bytes that may be read.
+    *
+    * @param eof 'true' if end of stream reached, 'false' otherwise
+    * @param count The number of valid bytes to be read
+    */
+   OptionalDataException(boolean eof, int count)
+   {
+     this.eof = eof;
+     this.length = count;
+   }
+ } // class OptionalDataException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/OutputStream.java gcc-4.1.0/libjava/classpath/java/io/OutputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/OutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/OutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* OutputStream.java -- Base class for byte output streams
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+   * This abstract class forms the base of the hierarchy of classes that 
+   * write output as a stream of bytes.  It provides a common set of methods
+   * for writing bytes to stream.  Subclasses implement and/or extend these
+   * methods to write bytes in a particular manner or to a particular 
+   * destination such as a file on disk or network connection.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   */
+ public abstract class OutputStream
+ {
+   /**
+    * This is the default no-argument constructor for this class.  This method
+    * does nothing in this class.
+    */
+   public OutputStream ()
+   {
+   }
+ 
+   /**
+    * This method writes a single byte to the output stream.  The byte written
+    * is the low eight bits of the <code>int</code> passed and a argument.
+    * <p>
+    * Subclasses must provide an implementation of this abstract method
+    *
+    * @param b The byte to be written to the output stream, passed as
+    *          the low eight bits of an <code>int</code> 
+    *
+    * @exception IOException If an error occurs
+    */
+   public abstract void write (int b) throws IOException;
+ 
+   /**
+    * This method all the writes bytes from the passed array to the
+    * output stream.  This method is equivalent to <code>write(b, 0,
+    * buf.length)</code> which is exactly how it is implemented in this
+    * class.
+    *
+    * @param b The array of bytes to write
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (byte[] b) throws IOException, NullPointerException
+   {
+     write (b, 0, b.length);
+   }
+ 
+   /**
+    * This method writes <code>len</code> bytes from the specified array
+    * <code>b</code> starting at index <code>off</code> into the array.
+    * <p>
+    * This method in this class calls the single byte <code>write()</code>
+    * method in a loop until all bytes have been written.  Subclasses should
+    * override this method if possible in order to provide a more efficent
+    * implementation.
+    *
+    * @param b The array of bytes to write from
+    * @param off The index into the array to start writing from
+    * @param len The number of bytes to write
+    * 
+    * @exception IOException If an error occurs
+    */
+   public void write (byte[] b, int off, int len)
+     throws IOException, NullPointerException, IndexOutOfBoundsException
+   {
+     if (off < 0 || len < 0 || off + len > b.length)
+       throw new ArrayIndexOutOfBoundsException ();
+     for (int i = 0; i < len; ++i)
+       write (b[off + i]);
+   }
+ 
+   /**
+    * This method forces any data that may have been buffered to be written
+    * to the underlying output device.  Please note that the host environment
+    * might perform its own buffering unbeknowst to Java.  In that case, a
+    * write made (for example, to a disk drive) might be cached in OS
+    * buffers instead of actually being written to disk.
+    * <p>
+    * This method in this class does nothing.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void flush () throws IOException
+   {
+   }
+ 
+   /**
+    * This method closes the stream.  Any internal or native resources
+    * associated with this stream are freed.  Any subsequent attempt to
+    * access the stream might throw an exception.
+    * <p>
+    * This method in this class does nothing.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void close () throws IOException
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/OutputStreamWriter.java gcc-4.1.0/libjava/classpath/java/io/OutputStreamWriter.java
*** gcc-4.0.2/libjava/classpath/java/io/OutputStreamWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/OutputStreamWriter.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,394 ----
+ /* OutputStreamWriter.java -- Writer that converts chars to bytes
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.nio.charset.EncodingHelper;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.CharacterCodingException;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetEncoder;
+ import java.nio.charset.CodingErrorAction;
+ import java.nio.charset.MalformedInputException;
+ 
+ /**
+  * This class writes characters to an output stream that is byte oriented
+  * It converts the chars that are written to bytes using an encoding layer,
+  * which is specific to a particular encoding standard.  The desired
+  * encoding can either be specified by name, or if no encoding is specified,
+  * the system default encoding will be used.  The system default encoding
+  * name is determined from the system property <code>file.encoding</code>.
+  * The only encodings that are guaranteed to be available are "8859_1"
+  * (the Latin-1 character set) and "UTF8".  Unfortunately, Java does not
+  * provide a mechanism for listing the encodings that are supported in
+  * a given implementation.
+  * <p>
+  * Here is a list of standard encoding names that may be available:
+  * <p>
+  * <ul>
+  * <li>8859_1 (ISO-8859-1/Latin-1)
+  * <li>8859_2 (ISO-8859-2/Latin-2)
+  * <li>8859_3 (ISO-8859-3/Latin-3)
+  * <li>8859_4 (ISO-8859-4/Latin-4)
+  * <li>8859_5 (ISO-8859-5/Latin-5)
+  * <li>8859_6 (ISO-8859-6/Latin-6)
+  * <li>8859_7 (ISO-8859-7/Latin-7)
+  * <li>8859_8 (ISO-8859-8/Latin-8)
+  * <li>8859_9 (ISO-8859-9/Latin-9)
+  * <li>ASCII (7-bit ASCII)
+  * <li>UTF8 (UCS Transformation Format-8)
+  * <li>More Later
+  * </ul>
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  * @date April 17, 1998.  
+  */
+ public class OutputStreamWriter extends Writer
+ {
+   /**
+    * The output stream.
+    */
+   private OutputStream out;
+ 
+   /**
+    * The charset encoder.
+    */
+   private CharsetEncoder encoder;
+ 
+   /**
+    * java.io canonical name of the encoding.
+    */
+   private String encodingName;
+ 
+   /**
+    * Buffer output before character conversion as it has costly overhead.
+    */
+   private CharBuffer outputBuffer;
+   private final static int BUFFER_SIZE = 1024;
+ 
+   /**
+    * This method initializes a new instance of <code>OutputStreamWriter</code>
+    * to write to the specified stream using a caller supplied character
+    * encoding scheme.  Note that due to a deficiency in the Java language
+    * design, there is no way to determine which encodings are supported.
+    *
+    * @param out The <code>OutputStream</code> to write to
+    * @param encoding_scheme The name of the encoding scheme to use for 
+    * character to byte translation
+    *
+    * @exception UnsupportedEncodingException If the named encoding is 
+    * not available.
+    */
+   public OutputStreamWriter (OutputStream out, String encoding_scheme) 
+     throws UnsupportedEncodingException
+   {
+     this.out = out;
+     try 
+       {
+ 	// Don't use NIO if avoidable
+ 	if(EncodingHelper.isISOLatin1(encoding_scheme))
+ 	  {
+ 	    encodingName = "ISO8859_1";
+ 	    encoder = null;
+ 	    return;
+ 	  }
+ 
+ 	/*
+ 	 * Workraround for encodings with a byte-order-mark.
+ 	 * We only want to write it once per stream.
+ 	 */
+ 	try 
+ 	  {
+ 	    if(encoding_scheme.equalsIgnoreCase("UnicodeBig") || 
+ 	       encoding_scheme.equalsIgnoreCase("UTF-16") ||
+ 	       encoding_scheme.equalsIgnoreCase("UTF16"))
+ 	      {
+ 		encoding_scheme = "UTF-16BE";	  
+ 		out.write((byte)0xFE);
+ 		out.write((byte)0xFF);
+ 	      } 
+ 	    else if(encoding_scheme.equalsIgnoreCase("UnicodeLittle")){
+ 	      encoding_scheme = "UTF-16LE";
+ 	      out.write((byte)0xFF);
+ 	      out.write((byte)0xFE);
+ 	    }
+ 	  }
+ 	catch(IOException ioe)
+ 	  {
+ 	  }
+       
+ 	outputBuffer = CharBuffer.allocate(BUFFER_SIZE);
+ 
+ 	Charset cs = EncodingHelper.getCharset(encoding_scheme);
+ 	if(cs == null)
+ 	  throw new UnsupportedEncodingException("Encoding "+encoding_scheme+
+ 						 " unknown");
+ 	encoder = cs.newEncoder();
+ 	encodingName = EncodingHelper.getOldCanonical(cs.name());
+ 
+ 	encoder.onMalformedInput(CodingErrorAction.REPLACE);
+ 	encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+       } 
+     catch(RuntimeException e) 
+       {
+ 	// Default to ISO Latin-1, will happen if this is called, for instance,
+ 	//  before the NIO provider is loadable.
+ 	encoder = null; 
+ 	encodingName = "ISO8859_1";
+       }
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>OutputStreamWriter</code>
+    * to write to the specified stream using the default encoding.
+    *
+    * @param out The <code>OutputStream</code> to write to
+    */
+   public OutputStreamWriter (OutputStream out)
+   {
+     this.out = out;
+     outputBuffer = null;
+     try 
+       {
+ 	String encoding = System.getProperty("file.encoding");
+ 	Charset cs = Charset.forName(encoding);
+ 	encoder = cs.newEncoder();
+ 	encodingName =  EncodingHelper.getOldCanonical(cs.name());
+       } 
+     catch(RuntimeException e) 
+       {
+ 	encoder = null; 
+ 	encodingName = "ISO8859_1";
+       }
+ 
+     if(encoder != null)
+       {
+ 	encoder.onMalformedInput(CodingErrorAction.REPLACE);
+ 	encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+ 	outputBuffer = CharBuffer.allocate(BUFFER_SIZE);
+       }
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>OutputStreamWriter</code>
+    * to write to the specified stream using a given <code>Charset</code>.
+    *
+    * @param out The <code>OutputStream</code> to write to
+    * @param cs The <code>Charset</code> of the encoding to use
+    */
+   public OutputStreamWriter(OutputStream out, Charset cs)
+   {
+     this.out = out;
+     encoder = cs.newEncoder();
+     encoder.onMalformedInput(CodingErrorAction.REPLACE);
+     encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+     outputBuffer = CharBuffer.allocate(BUFFER_SIZE);
+   }
+   
+   /**
+    * This method initializes a new instance of <code>OutputStreamWriter</code>
+    * to write to the specified stream using a given
+    * <code>CharsetEncoder</code>.
+    *
+    * @param out The <code>OutputStream</code> to write to
+    * @param enc The <code>CharsetEncoder</code> to encode the output with
+    */
+   public OutputStreamWriter(OutputStream out, CharsetEncoder enc)
+   {
+     this.out = out;
+     encoder = enc;
+     outputBuffer = CharBuffer.allocate(BUFFER_SIZE);
+   }
+ 
+   /**
+    * This method closes this stream, and the underlying 
+    * <code>OutputStream</code>
+    *
+    * @exception IOException If an error occurs
+    */
+   public void close () throws IOException
+   {
+     if(out == null)
+       return;
+     flush();
+     out.close ();
+     out = null;
+   }
+ 
+   /**
+    * This method returns the name of the character encoding scheme currently
+    * in use by this stream.  If the stream has been closed, then this method
+    * may return <code>null</code>.
+    *
+    * @return The encoding scheme name
+    */
+   public String getEncoding ()
+   {
+     return out != null ? encodingName : null;
+   }
+ 
+   /**
+    * This method flushes any buffered bytes to the underlying output sink.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void flush () throws IOException
+   {
+       if(out != null){	  
+ 	  if(outputBuffer != null){
+ 	      char[] buf = new char[outputBuffer.position()];
+ 	      if(buf.length > 0){
+ 		  outputBuffer.flip();
+ 		  outputBuffer.get(buf);
+ 		  writeConvert(buf, 0, buf.length);
+ 		  outputBuffer.clear();
+ 	      }
+ 	  }
+ 	  out.flush ();
+       }
+   }
+ 
+   /**
+    * This method writes <code>count</code> characters from the specified
+    * array to the output stream starting at position <code>offset</code>
+    * into the array.
+    *
+    * @param buf The array of character to write from
+    * @param offset The offset into the array to start writing chars from
+    * @param count The number of chars to write.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (char[] buf, int offset, int count) throws IOException
+   {
+     if(out == null)
+       throw new IOException("Stream is closed.");
+     if(buf == null)
+       throw new IOException("Buffer is null.");
+ 
+     if(outputBuffer != null)
+ 	{
+ 	    if(count >= outputBuffer.remaining())
+ 		{
+ 		    int r = outputBuffer.remaining();
+ 		    outputBuffer.put(buf, offset, r);
+ 		    writeConvert(outputBuffer.array(), 0, BUFFER_SIZE);
+ 		    outputBuffer.clear();
+ 		    offset += r;
+ 		    count -= r;
+ 		    // if the remaining bytes is larger than the whole buffer, 
+ 		    // just don't buffer.
+ 		    if(count >= outputBuffer.remaining()){
+                       writeConvert(buf, offset, count);
+ 		      return;
+ 		    }
+ 		}
+ 	    outputBuffer.put(buf, offset, count);
+ 	} else writeConvert(buf, offset, count);
+   }
+ 
+  /**
+   * Converts and writes characters.
+   */
+   private void writeConvert (char[] buf, int offset, int count) 
+       throws IOException
+   {
+     if(encoder == null)
+     {
+       byte[] b = new byte[count];
+       for(int i=0;i<count;i++)
+ 	b[i] = (byte)((buf[offset+i] <= 0xFF)?buf[offset+i]:'?');
+       out.write(b);
+     } else {
+       try  {
+ 	ByteBuffer output = encoder.encode(CharBuffer.wrap(buf,offset,count));
+ 	encoder.reset();
+ 	if(output.hasArray())
+ 	  out.write(output.array());
+ 	else
+ 	  {
+ 	    byte[] outbytes = new byte[output.remaining()];
+ 	    output.get(outbytes);
+ 	    out.write(outbytes);
+ 	  }
+       } catch(IllegalStateException e) {
+ 	throw new IOException("Internal error.");
+       } catch(MalformedInputException e) {
+ 	throw new IOException("Invalid character sequence.");
+       } catch(CharacterCodingException e) {
+ 	throw new IOException("Unmappable character.");
+       }
+     }
+   }
+ 
+   /**
+    * This method writes <code>count</code> bytes from the specified 
+    * <code>String</code> starting at position <code>offset</code> into the
+    * <code>String</code>.
+    *
+    * @param str The <code>String</code> to write chars from
+    * @param offset The position in the <code>String</code> to start 
+    * writing chars from
+    * @param count The number of chars to write
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (String str, int offset, int count) throws IOException
+   {
+     if(str == null)
+       throw new IOException("String is null.");
+ 
+     write(str.toCharArray(), offset, count);
+   }
+ 
+   /**
+    * This method writes a single character to the output stream.
+    *
+    * @param ch The char to write, passed as an int.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (int ch) throws IOException
+   {
+     write(new char[]{ (char)ch }, 0, 1);
+   }
+ } // class OutputStreamWriter
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/PipedInputStream.java gcc-4.1.0/libjava/classpath/java/io/PipedInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/PipedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/PipedInputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,374 ----
+ /* PipedInputStream.java -- Read portion of piped streams.
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ // NOTE: This implementation is very similar to that of PipedReader.  If you 
+ // fix a bug in here, chances are you should make a similar change to the 
+ // PipedReader code.
+ 
+ /**
+   * An input stream that reads its bytes from an output stream
+   * to which it is connected. 
+   * <p>
+   * Data is read and written to an internal buffer.  It is highly recommended
+   * that the <code>PipedInputStream</code> and connected 
+   * <code>PipedOutputStream</code>
+   * be part of different threads.  If they are not, the read and write 
+   * operations could deadlock their thread.
+   *
+   * @specnote The JDK implementation appears to have some undocumented 
+   *           functionality where it keeps track of what thread is writing
+   *           to pipe and throws an IOException if that thread susequently
+   *           dies. This behaviour seems dubious and unreliable - we don't
+   *           implement it.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class PipedInputStream extends InputStream
+ {
+   /** PipedOutputStream to which this is connected. Null only if this 
+     * InputStream hasn't been connected yet. */
+   PipedOutputStream source;
+ 
+   /** Set to true if close() has been called on this InputStream. */
+   boolean closed;
+ 
+ 
+   /**
+    * The size of the internal buffer used for input/output.
+    */
+   /* The "Constant Field Values" Javadoc of the Sun J2SE 1.4
+    * specifies 1024.
+    */
+   protected static final int PIPE_SIZE = 1024;
+ 
+ 
+   /**
+     * This is the internal circular buffer used for storing bytes written
+     * to the pipe and from which bytes are read by this stream
+     */
+   protected byte[] buffer = new byte[PIPE_SIZE];
+ 
+   /**
+     * The index into buffer where the next byte from the connected
+     * <code>PipedOutputStream</code> will be written. If this variable is 
+     * equal to <code>out</code>, then the buffer is full. If set to < 0,
+     * the buffer is empty.
+     */
+   protected int in = -1;
+ 
+   /**
+     * This index into the buffer where bytes will be read from.
+     */
+   protected int out = 0;
+ 
+   /** Buffer used to implement single-argument read/receive */
+   private byte[] read_buf = new byte[1];
+ 
+   /**
+     * Creates a new <code>PipedInputStream</code> that is not connected to a 
+     * <code>PipedOutputStream</code>.  It must be connected before bytes can 
+     * be read from this stream.
+     */
+   public PipedInputStream()
+   {
+   }
+ 
+   /**
+     * This constructor creates a new <code>PipedInputStream</code> and connects
+     * it to the passed in <code>PipedOutputStream</code>. The stream is then 
+     * ready for reading.
+     *
+     * @param source The <code>PipedOutputStream</code> to connect this 
+     * stream to
+     *
+     * @exception IOException If <code>source</code> is already connected.
+     */
+   public PipedInputStream(PipedOutputStream source) throws IOException
+   {
+     connect(source);
+   }
+ 
+   /**
+     * This method connects this stream to the passed in 
+     * <code>PipedOutputStream</code>.
+     * This stream is then ready for reading.  If this stream is already
+     * connected or has been previously closed, then an exception is thrown
+     *
+     * @param source The <code>PipedOutputStream</code> to connect this stream to
+     *
+     * @exception IOException If this PipedInputStream or <code>source</code> 
+     *                        has been connected already.
+     */
+   public void connect(PipedOutputStream source) throws IOException
+   {
+     // The JDK (1.3) does not appear to check for a previously closed 
+     // connection here.
+     
+     if (this.source != null || source.sink != null)
+       throw new IOException ("Already connected");
+     
+     source.sink = this;
+     this.source = source;
+   }
+   
+   /**
+   * This method receives a byte of input from the source PipedOutputStream.
+   * If the internal circular buffer is full, this method blocks.
+   *
+   * @param val The byte to write to this stream
+   *
+   * @exception IOException if error occurs
+   * @specnote Weird. This method must be some sort of accident.
+   */
+   protected synchronized void receive(int val) throws IOException
+   {
+     read_buf[0] = (byte) (val & 0xff);
+     receive (read_buf, 0, 1);
+   }
+ 
+   /**
+     * This method is used by the connected <code>PipedOutputStream</code> to
+     * write bytes into the buffer.
+     *
+     * @param buf The array containing bytes to write to this stream
+     * @param offset The offset into the array to start writing from
+     * @param len The number of bytes to write.
+     *
+     * @exception IOException If an error occurs
+     * @specnote This code should be in PipedOutputStream.write, but we
+     *           put it here in order to support that bizarre recieve(int)
+     *           method.
+     */  
+   synchronized void receive(byte[] buf, int offset, int len)
+     throws IOException
+   {
+     if (closed)
+       throw new IOException ("Pipe closed");
+ 
+     int bufpos = offset;
+     int copylen;
+     
+     while (len > 0)
+       {
+         try
+ 	  {
+ 	    while (in == out)
+ 	      {
+ 		// The pipe is full. Wake up any readers and wait for them.
+ 		notifyAll();
+ 		wait();
+ 		// The pipe could have been closed while we were waiting.
+ 	        if (closed)
+ 		  throw new IOException ("Pipe closed");
+ 	      }
+ 	  }
+ 	catch (InterruptedException ix)
+ 	  {
+             throw new InterruptedIOException ();
+ 	  }
+ 
+ 	if (in < 0) // The pipe is empty.
+ 	  in = 0;
+ 	
+ 	// Figure out how many bytes from buf can be copied without 
+ 	// overrunning out or going past the length of the buffer.
+ 	if (in < out)
+ 	  copylen = Math.min (len, out - in);
+ 	else
+ 	  copylen = Math.min (len, buffer.length - in);
+ 
+ 	// Copy bytes until the pipe is filled, wrapping if necessary.
+ 	System.arraycopy(buf, bufpos, buffer, in, copylen);
+ 	len -= copylen;
+ 	bufpos += copylen;
+ 	in += copylen;
+ 	if (in == buffer.length)
+ 	  in = 0;
+       }
+     // Notify readers that new data is in the pipe.
+     notifyAll();
+   }
+   
+   /**
+     * This method reads one byte from the stream.
+     * -1 is returned to indicated that no bytes can be read
+     * because the end of the stream was reached.  If the stream is already
+     * closed, a -1 will again be returned to indicate the end of the stream.
+     * 
+     * <p>This method will block if no byte is available to be read.</p>
+     *
+     * @return the value of the read byte value, or -1 of the end of the stream
+     * was reached
+     * 
+     * @throws IOException if an error occured
+     */
+   public int read() throws IOException
+   {
+     // Method operates by calling the multibyte overloaded read method
+     // Note that read_buf is an internal instance variable.  I allocate it
+     // there to avoid constant reallocation overhead for applications that
+     // call this method in a loop at the cost of some unneeded overhead
+     // if this method is never called.
+ 
+     int r = read(read_buf, 0, 1);
+     return r != -1 ? (read_buf[0] & 0xff) : -1;
+   }
+   
+   /**
+     * This method reads bytes from the stream into a caller supplied buffer.
+     * It starts storing bytes at position <code>offset</code> into the 
+     * buffer and
+     * reads a maximum of <code>len</code> bytes.  Note that this method 
+     * can actually
+     * read fewer than <code>len</code> bytes.  The actual number of bytes 
+     * read is
+     * returned.  A -1 is returned to indicated that no bytes can be read
+     * because the end of the stream was reached - ie close() was called on the
+     * connected PipedOutputStream.
+     * <p>
+     * This method will block if no bytes are available to be read.
+     *
+     * @param buf The buffer into which bytes will be stored
+     * @param offset The index into the buffer at which to start writing.
+     * @param len The maximum number of bytes to read.
+     *
+     * @exception IOException If <code>close()</code> was called on this Piped
+     *                        InputStream.
+     */  
+   public synchronized int read(byte[] buf, int offset, int len)
+     throws IOException
+   {
+     if (source == null)
+       throw new IOException ("Not connected");
+     if (closed)
+       throw new IOException ("Pipe closed");
+ 
+     // If the buffer is empty, wait until there is something in the pipe 
+     // to read.
+     try
+       {
+ 	while (in < 0)
+ 	  {
+ 	    if (source.closed)
+ 	      return -1;
+ 	    wait();
+ 	  }
+       }
+     catch (InterruptedException ix)
+       {
+         throw new InterruptedIOException();
+       }
+     
+     int total = 0;
+     int copylen;
+     
+     while (true)
+       {
+ 	// Figure out how many bytes from the pipe can be copied without 
+ 	// overrunning in or going past the length of buf.
+ 	if (out < in)
+ 	  copylen = Math.min (len, in - out);
+ 	else
+ 	  copylen = Math.min (len, buffer.length - out);
+ 
+         System.arraycopy (buffer, out, buf, offset, copylen);
+ 	offset += copylen;
+ 	len -= copylen;
+ 	out += copylen;
+ 	total += copylen;
+ 	
+ 	if (out == buffer.length)
+ 	  out = 0;
+ 	
+ 	if (out == in)
+ 	  {
+ 	    // Pipe is now empty.
+ 	    in = -1;
+ 	    out = 0;
+ 	  }
+ 
+         // If output buffer is filled or the pipe is empty, we're done.
+ 	if (len == 0 || in == -1)
+ 	  {
+ 	    // Notify any waiting outputstream that there is now space
+ 	    // to write.
+ 	    notifyAll();
+ 	    return total;
+ 	  }
+       }
+   }
+   
+   /**
+     * This method returns the number of bytes that can be read from this stream
+     * before blocking could occur.  This is the number of bytes that are
+     * currently unread in the internal circular buffer.  Note that once this
+     * many additional bytes are read, the stream may block on a subsequent
+     * read, but it not guaranteed to block.
+     *
+     * @return The number of bytes that can be read before blocking might occur
+     *
+     * @exception IOException If an error occurs
+     */  
+   public synchronized int available() throws IOException
+   {
+     // The JDK 1.3 implementation does not appear to check for the closed or 
+     // unconnected stream conditions here.
+     
+     if (in < 0)
+       return 0;
+     else if (out < in)
+       return in - out;
+     else
+       return (buffer.length - out) + in;
+   }
+   
+   /**
+   * This methods closes the stream so that no more data can be read
+   * from it.
+   *
+   * @exception IOException If an error occurs
+   */
+   public synchronized void close() throws IOException
+   {
+     closed = true;
+     // Wake any thread which may be in receive() waiting to write data.
+     notifyAll();
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/PipedOutputStream.java gcc-4.1.0/libjava/classpath/java/io/PipedOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/PipedOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/PipedOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,181 ----
+ /* PipedOutputStream.java -- Write portion of piped streams.
+    Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ // NOTE: This implementation is very similar to that of PipedWriter.  If you 
+ // fix a bug in here, chances are you should make a similar change to the 
+ // PipedWriter code.
+ 
+ /**
+   * This class writes its bytes to a <code>PipedInputStream</code> to 
+   * which it is connected.
+   * <p>
+   * It is highly recommended that a <code>PipedOutputStream</code> and its
+   * connected <code>PipedInputStream</code> be in different threads.  If 
+   * they are in the same thread, read and write operations could deadlock
+   * the thread.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class PipedOutputStream extends OutputStream
+ {
+   /** Target PipedInputStream to which this is connected. Null only if this 
+     * OutputStream hasn't been connected yet. */
+   PipedInputStream sink;
+   
+   /** Set to true if close() has been called on this OutputStream. */
+   boolean closed;
+   
+   /** 
+     * Create an unconnected PipedOutputStream.  It must be connected
+     * to a <code>PipedInputStream</code> using the <code>connect</code>
+     * method prior to writing any data or an exception will be thrown.
+     */
+   public PipedOutputStream()
+   {
+   }
+ 
+   /**
+      * Create a new <code>PipedOutputStream</code> instance
+     * to write to the specified <code>PipedInputStream</code>.  This stream
+     * is then ready for writing.
+     *
+     * @param sink The <code>PipedInputStream</code> to connect this stream to.
+     *
+     * @exception IOException If <code>sink</code> has already been connected 
+     *                        to a different PipedOutputStream.
+     */
+   public PipedOutputStream(PipedInputStream sink) throws IOException
+   {
+     sink.connect(this);
+   }
+ 
+   /**
+     * Connects this object to the specified <code>PipedInputStream</code> 
+     * object.  This stream will then be ready for writing.
+     *
+     * @param sink The <code>PipedInputStream</code> to connect this stream to
+     *
+     * @exception IOException If the stream has not been connected or has
+     *                        been closed.
+     */
+   public void connect(PipedInputStream sink) throws IOException
+   {
+     if (this.sink != null || sink.source != null)
+       throw new IOException ("Already connected");
+     sink.connect(this);
+   }
+ 
+   /**
+     * Write a single byte of date to the stream.  Note that this method will 
+     * block if the <code>PipedInputStream</code> to which this object is 
+     * connected has a full buffer.
+     *
+     * @param b The byte of data to be written, passed as an <code>int</code>.
+     *
+     * @exception IOException If the stream has not been connected or has
+     *                        been closed.
+     */  
+   public void write(int b) throws IOException
+   {
+     if (sink == null)
+       throw new IOException ("Not connected");
+     if (closed)
+       throw new IOException ("Pipe closed");
+       
+     sink.receive (b);
+   }
+   
+   /**
+     * This method writes <code>len</code> bytes of data from the byte array
+     * <code>buf</code> starting at index <code>offset</code> in the array
+     * to the stream.  Note that this method will block if the  
+     * <code>PipedInputStream</code> to which this object is connected has
+     * a buffer that cannot hold all of the bytes to be written.
+     *
+     * @param buffer The array containing bytes to write to the stream.
+     * @param offset The index into the array to start writing bytes from.
+     * @param len The number of bytes to write.
+     *
+     * @exception IOException If the stream has not been connected or has
+     *                        been closed.
+     */
+   public void write(byte[] buffer, int offset, int len) throws IOException
+   {
+     if (sink == null)
+       throw new IOException ("Not connected");
+     if (closed)
+       throw new IOException ("Pipe closed");
+       
+     sink.receive(buffer, offset, len);
+   }
+ 
+   /**
+     * This method does nothing.
+     *
+     * @exception IOException If the stream is closed.
+     * @specnote You'd think that this method would block until the sink
+     *           had read all available data. Thats not the case - this method
+     *           appears to be a no-op?
+     */
+   public void flush() throws IOException
+   {
+   }
+   
+   /**
+     * This method closes this stream so that no more data can be written
+     * to it. Any further attempts to write to this stream may throw an
+     * exception
+     *
+     * @exception IOException If an error occurs
+     */
+   public void close() throws IOException
+   {
+     // A close call on an unconnected PipedOutputStream has no effect.
+     if (sink != null)
+       {
+ 	closed = true;
+ 	// Notify any waiting readers that the stream is now closed.
+ 	synchronized (sink)
+ 	{	  
+ 	  sink.notifyAll();
+ 	}
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/PipedReader.java gcc-4.1.0/libjava/classpath/java/io/PipedReader.java
*** gcc-4.0.2/libjava/classpath/java/io/PipedReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/PipedReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,361 ----
+ /* PipedReader.java -- Read portion of piped character streams.
+    Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ // NOTE: This implementation is very similar to that of PipedInputStream. 
+ // If you fix a bug in here, chances are you should make a similar change to 
+ // the PipedInputStream code.
+ 
+ /**
+   * An input stream that reads characters from a piped writer to which it is 
+   * connected. 
+   * <p>
+   * Data is read and written to an internal buffer.  It is highly recommended
+   * that the <code>PipedReader</code> and connected <code>PipedWriter</code>
+   * be part of different threads.  If they are not, there is a possibility
+   * that the read and write operations could deadlock their thread.
+   *
+   * @specnote The JDK implementation appears to have some undocumented 
+   *           functionality where it keeps track of what thread is writing
+   *           to pipe and throws an IOException if that thread susequently
+   *           dies. This behaviour seems dubious and unreliable - we don't
+   *           implement it.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class PipedReader extends Reader
+ {
+   /** PipedWriter to which this is connected. Null only if this 
+     * Reader hasn't been connected yet. */
+   PipedWriter source;
+ 
+   /** Set to true if close() has been called on this Reader. */
+   boolean closed;
+ 
+   /**
+     * The size of the internal buffer used for input/output.
+     */
+   static final int PIPE_SIZE = 2048;
+ 
+   /**
+     * This is the internal circular buffer used for storing chars written
+     * to the pipe and from which chars are read by this stream
+     */
+   char[] buffer = new char[PIPE_SIZE];
+ 
+   /**
+     * The index into buffer where the next char from the connected
+     * <code>PipedWriter</code> will be written. If this variable is 
+     * equal to <code>out</code>, then the buffer is full. If set to < 0,
+     * the buffer is empty.
+     */
+   int in = -1;
+ 
+   /**
+     * This index into the buffer where chars will be read from.
+     */
+   int out = 0;
+ 
+   /** Buffer used to implement single-argument read/receive */
+   char[] read_buf = new char[1];
+ 
+   /**
+     * Creates a new <code>PipedReader</code> that is not connected to a 
+     * <code>PipedWriter</code>.  It must be connected before chars can 
+     * be read from this stream.
+     */
+   public PipedReader()
+   {
+   }
+ 
+   /**
+     * This constructor creates a new <code>PipedReader</code> and connects
+     * it to the passed in <code>PipedWriter</code>. The stream is then 
+     * ready for reading.
+     *
+     * @param source The <code>PipedWriter</code> to connect this stream to
+     *
+     * @exception IOException If <code>source</code> is already connected.
+     */
+   public PipedReader(PipedWriter source) throws IOException
+   {
+     connect(source);
+   }
+ 
+   /**
+     * This method connects this stream to the passed in 
+     * <code>PipedWriter</code>.
+     * This stream is then ready for reading.  If this stream is already
+     * connected or has been previously closed, then an exception is thrown
+     *
+     * @param source The <code>PipedWriter</code> to connect this stream to
+     *
+     * @exception IOException If this PipedReader or <code>source</code> 
+     *                        has been connected already.
+     */
+   public void connect(PipedWriter source) throws IOException
+   {
+     // The JDK (1.3) does not appear to check for a previously closed 
+     // connection here.
+     
+     if (this.source != null || source.sink != null)
+       throw new IOException ("Already connected");
+     
+     source.sink = this;
+     this.source = source;
+   }
+   
+   /**
+     * This method is used by the connected <code>PipedWriter</code> to
+     * write chars into the buffer.
+     *
+     * @param buf The array containing chars to write to this stream
+     * @param offset The offset into the array to start writing from
+     * @param len The number of chars to write.
+     *
+     * @exception IOException If an error occurs
+     * @specnote This code should be in PipedWriter.write, but we
+     *           put it here in order to support that bizarre recieve(int)
+     *           method.
+     */  
+   void receive(char[] buf, int offset, int len)
+     throws IOException
+   {
+     synchronized (lock)
+     {
+       if (closed)
+ 	throw new IOException ("Pipe closed");
+ 
+       int bufpos = offset;
+       int copylen;
+ 
+       while (len > 0)
+ 	{
+           try
+ 	    {
+ 	      while (in == out)
+ 		{
+ 		  // The pipe is full. Wake up any readers and wait for them.
+ 		  lock.notifyAll();
+ 		  lock.wait();
+ 		  // The pipe could have been closed while we were waiting.
+ 	          if (closed)
+ 		    throw new IOException ("Pipe closed");
+ 		}
+ 	    }
+ 	  catch (InterruptedException ix)
+ 	    {
+               throw new InterruptedIOException ();
+ 	    }
+ 
+ 	  if (in < 0) // The pipe is empty.
+ 	    in = 0;
+ 
+ 	  // Figure out how many chars from buf can be copied without 
+ 	  // overrunning out or going past the length of the buffer.
+ 	  if (in < out)
+ 	    copylen = Math.min (len, out - in);
+ 	  else
+ 	    copylen = Math.min (len, buffer.length - in);
+ 
+ 	  // Copy chars until the pipe is filled, wrapping if necessary.
+ 	  System.arraycopy(buf, bufpos, buffer, in, copylen);
+ 	  len -= copylen;
+ 	  bufpos += copylen;
+ 	  in += copylen;
+ 	  if (in == buffer.length)
+ 	    in = 0;
+ 	}
+       // Notify readers that new data is in the pipe.
+       lock.notifyAll();
+     }
+   }
+   
+   /**
+     * This method reads chars from the stream into a caller supplied buffer.
+     * It starts storing chars at position <code>offset</code> into the 
+     * buffer and
+     * reads a maximum of <code>len</code> chars.  Note that this method 
+     * can actually
+     * read fewer than <code>len</code> chars.  The actual number of chars 
+     * read is
+     * returned.  A -1 is returned to indicated that no chars can be read
+     * because the end of the stream was reached.  If the stream is already
+     * closed, a -1 will again be returned to indicate the end of the stream.
+     * <p>
+     * This method will block if no char is available to be read.
+     */
+   public int read() throws IOException
+   {
+     // Method operates by calling the multichar overloaded read method
+     // Note that read_buf is an internal instance variable.  I allocate it
+     // there to avoid constant reallocation overhead for applications that
+     // call this method in a loop at the cost of some unneeded overhead
+     // if this method is never called.
+ 
+     int r = read(read_buf, 0, 1);
+     return r != -1 ? read_buf[0] : -1;
+   }
+   
+   /**
+     * This method reads characters from the stream into a caller supplied 
+     * buffer. It starts storing chars at position <code>offset</code> into 
+     * the buffer and reads a maximum of <code>len</code> chars.  Note that 
+     * this method can actually read fewer than <code>len</code> chars.  
+     * The actual number of chars read is
+     * returned.  A -1 is returned to indicated that no chars can be read
+     * because the end of the stream was reached - ie close() was called on the
+     * connected PipedWriter.
+     * <p>
+     * This method will block if no chars are available to be read.
+     *
+     * @param buf The buffer into which chars will be stored
+     * @param offset The index into the buffer at which to start writing.
+     * @param len The maximum number of chars to read.
+     *
+     * @exception IOException If <code>close()</code> was called on this Piped
+     *                        Reader.
+     */  
+   public int read(char[] buf, int offset, int len)
+     throws IOException
+   {
+     synchronized (lock)
+     {
+       if (source == null)
+ 	throw new IOException ("Not connected");
+       if (closed)
+ 	throw new IOException ("Pipe closed");
+ 
+       // If the buffer is empty, wait until there is something in the pipe 
+       // to read.
+       try
+ 	{
+ 	  while (in < 0)
+ 	    {
+ 	      if (source.closed)
+ 		return -1;
+ 	      lock.wait();
+ 	    }
+ 	}
+       catch (InterruptedException ix)
+ 	{
+           throw new InterruptedIOException();
+ 	}
+ 
+       int total = 0;
+       int copylen;
+ 
+       while (true)
+ 	{
+ 	  // Figure out how many chars from the pipe can be copied without 
+ 	  // overrunning in or going past the length of buf.
+ 	  if (out < in)
+ 	    copylen = Math.min (len, in - out);
+ 	  else
+ 	    copylen = Math.min (len, buffer.length - out);
+ 
+           System.arraycopy (buffer, out, buf, offset, copylen);
+ 	  offset += copylen;
+ 	  len -= copylen;
+ 	  out += copylen;
+ 	  total += copylen;
+ 
+ 	  if (out == buffer.length)
+ 	    out = 0;
+ 
+ 	  if (out == in)
+ 	    {
+ 	      // Pipe is now empty.
+ 	      in = -1;
+ 	      out = 0;
+ 	    }
+ 
+           // If output buffer is filled or the pipe is empty, we're done.
+ 	  if (len == 0 || in == -1)
+ 	    {
+ 	      // Notify any waiting Writer that there is now space
+ 	      // to write.
+ 	      lock.notifyAll();
+ 	      return total;
+ 	    }
+ 	}
+     }
+   }
+   
+   public boolean ready() throws IOException
+   {
+     // The JDK 1.3 implementation does not appear to check for the closed or 
+     // unconnected stream conditions here.  However, checking for a
+     // closed stream is explicitly required by the JDK 1.2 and 1.3
+     // documentation (for Reader.close()), so we do it.
+     
+     synchronized (lock)
+     {
+       if (closed)
+ 	throw new IOException("Pipe closed");
+ 
+       if (in < 0)
+ 	return false;
+ 
+       int count;
+       if (out < in)
+ 	count = in - out;
+       else
+ 	count = (buffer.length - out) - in;
+ 
+       return (count > 0);
+     }
+   }
+   
+   /**
+   * This methods closes the stream so that no more data can be read
+   * from it.
+   *
+   * @exception IOException If an error occurs
+   */
+   public void close() throws IOException
+   {
+     synchronized (lock)
+     {
+       closed = true;
+       // Wake any thread which may be in receive() waiting to write data.
+       lock.notifyAll();
+     }
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/PipedWriter.java gcc-4.1.0/libjava/classpath/java/io/PipedWriter.java
*** gcc-4.0.2/libjava/classpath/java/io/PipedWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/PipedWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,182 ----
+ /* PipedWriter.java -- Write portion of piped character streams.
+    Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ // NOTE: This implementation is very similar to that of PipedOutputStream. 
+ // If you fix a bug in here, chances are you should make a similar change to 
+ // the PipedOutputStream code.
+ 
+ /**
+   * This class writes its chars to a <code>PipedReader</code> to 
+   * which it is connected.
+   * <p>
+   * It is highly recommended that a <code>PipedWriter</code> and its
+   * connected <code>PipedReader</code> be in different threads.  If 
+   * they are in the same thread, read and write operations could deadlock
+   * the thread.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class PipedWriter extends Writer
+ {
+   /** Target PipedReader to which this is connected. Null only if this 
+     * Writer hasn't been connected yet. */
+   PipedReader sink;
+   
+   /** Set to true if close() has been called on this Writer. */
+   boolean closed;
+ 
+   /** Buffer used to implement single-argument write */
+   char[] read_buf = new char[1];
+   
+   /** 
+     * Create an unconnected PipedWriter.  It must be connected
+     * to a <code>PipedReader</code> using the <code>connect</code>
+     * method prior to writing any data or an exception will be thrown.
+     */
+   public PipedWriter()
+   {
+   }
+ 
+   /**
+      * Create a new <code>PipedWriter</code> instance
+     * to write to the specified <code>PipedReader</code>.  This stream
+     * is then ready for writing.
+     *
+     * @param sink The <code>PipedReader</code> to connect this stream to.
+     *
+     * @exception IOException If <code>sink</code> has already been connected 
+     *                        to a different PipedWriter.
+     */
+   public PipedWriter(PipedReader sink) throws IOException
+   {
+     sink.connect(this);
+   }
+ 
+   /**
+     * Connects this object to the specified <code>PipedReader</code> 
+     * object.  This stream will then be ready for writing.
+     *
+     * @param sink The <code>PipedReader</code> to connect this stream to
+     *
+     * @exception IOException If the stream has not been connected or has
+     *                        been closed.
+     */
+   public void connect(PipedReader sink) throws IOException
+   {
+     if (this.sink != null || sink.source != null)
+       throw new IOException ("Already connected");
+     sink.connect(this);
+   }
+ 
+   /**
+     * Write a single char of date to the stream.  Note that this method will 
+     * block if the <code>PipedReader</code> to which this object is 
+     * connected has a full buffer.
+     *
+     * @param b The char of data to be written, passed as an <code>int</code>.
+     *
+     * @exception IOException If the stream has not been connected or has
+     *                        been closed.
+     */  
+   public void write(int b) throws IOException
+   {
+     read_buf[0] = (char) (b & 0xffff);
+     sink.receive (read_buf, 0, 1);
+   }
+   
+   /**
+     * This method writes <code>len</code> chars of data from the char array
+     * <code>buf</code> starting at index <code>offset</code> in the array
+     * to the stream.  Note that this method will block if the  
+     * <code>PipedReader</code> to which this object is connected has
+     * a buffer that cannot hold all of the chars to be written.
+     *
+     * @param buffer The array containing chars to write to the stream.
+     * @param offset The index into the array to start writing chars from.
+     * @param len The number of chars to write.
+     *
+     * @exception IOException If the stream has not been connected or has
+     *                        been closed.
+     */
+   public void write(char[] buffer, int offset, int len) throws IOException
+   {
+     if (sink == null)
+       throw new IOException ("Not connected");
+     if (closed)
+       throw new IOException ("Pipe closed");
+       
+     sink.receive(buffer, offset, len);
+   }
+ 
+   /**
+     * This method does nothing.
+     *
+     * @exception IOException If the stream is closed.
+     * @specnote You'd think that this method would block until the sink
+     *           had read all available data. Thats not the case - this method
+     *           appears to be a no-op?
+     */
+   public void flush() throws IOException
+   {
+     if (closed)
+       throw new IOException ("Pipe closed");
+   }
+   
+   /**
+     * This method closes this stream so that no more data can be written
+     * to it. Any further attempts to write to this stream may throw an
+     * exception
+     *
+     * @exception IOException If an error occurs
+     */
+   public void close() throws IOException
+   {
+     // A close call on an unconnected PipedWriter has no effect.
+     if (sink != null)
+       {
+ 	closed = true;
+ 	// Notify any waiting readers that the stream is now closed.
+ 	synchronized (sink)
+ 	{	  
+ 	  sink.notifyAll();
+ 	}
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/PrintStream.java gcc-4.1.0/libjava/classpath/java/io/PrintStream.java
*** gcc-4.0.2/libjava/classpath/java/io/PrintStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/PrintStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,553 ----
+ /* PrintStream.java -- OutputStream for printing output
+    Copyright (C) 1998, 1999, 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status:  Believed complete and correct to 1.3
+  */
+ 
+ /**
+  * This class prints Java primitive values and object to a stream as
+  * text.  None of the methods in this class throw an exception.  However,
+  * errors can be detected by calling the <code>checkError()</code> method.
+  * Additionally, this stream can be designated as "autoflush" when 
+  * created so that any writes are automatically flushed to the underlying
+  * output sink when the current line is terminated.
+  * <p>
+  * This class converts char's into byte's using the system default encoding.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  */
+ public class PrintStream extends FilterOutputStream
+ {
+   /* Notice the implementation is quite similar to OutputStreamWriter.
+    * This leads to some minor duplication, because neither inherits
+    * from the other, and we want to maximize performance. */
+ 
+   // Line separator string.
+   private static final char[] line_separator
+     = System.getProperty("line.separator").toCharArray();
+ 
+   /**
+    *  Encoding name
+    */
+   private String encoding;
+ 
+   /**
+    * This boolean indicates whether or not an error has ever occurred
+    * on this stream.
+    */
+   private boolean error_occurred = false;
+ 
+   /**
+    * This is <code>true</code> if auto-flush is enabled, 
+    * <code>false</code> otherwise
+    */
+   private boolean auto_flush;
+ 
+   /**
+    * This method intializes a new <code>PrintStream</code> object to write
+    * to the specified output sink.
+    *
+    * @param out The <code>OutputStream</code> to write to.
+    */
+   public PrintStream (OutputStream out)
+   {
+     this (out, false);
+   }
+ 
+   /**
+    * This method intializes a new <code>PrintStream</code> object to write
+    * to the specified output sink.  This constructor also allows "auto-flush"
+    * functionality to be specified where the stream will be flushed after
+    * every <code>print</code> or <code>println</code> call, when the 
+    * <code>write</code> methods with array arguments are called, or when a 
+    * single new-line character is written.
+    * <p>
+    *
+    * @param out The <code>OutputStream</code> to write to.
+    * @param auto_flush <code>true</code> to flush the stream after every 
+    * line, <code>false</code> otherwise
+    */
+   public PrintStream (OutputStream out, boolean auto_flush)
+   {
+     super (out);
+ 
+     try {
+ 	this.encoding = System.getProperty("file.encoding");
+     } catch (SecurityException e){
+ 	this.encoding = "ISO8859_1";
+     } catch (IllegalArgumentException e){
+ 	this.encoding = "ISO8859_1";
+     } catch (NullPointerException e){
+ 	this.encoding = "ISO8859_1";
+     }
+     this.auto_flush = auto_flush;
+   }
+ 
+   /**
+    * This method intializes a new <code>PrintStream</code> object to write
+    * to the specified output sink.  This constructor also allows "auto-flush"
+    * functionality to be specified where the stream will be flushed after
+    * every <code>print</code> or <code>println</code> call, when the 
+    * <code>write</code> methods with array arguments are called, or when a 
+    * single new-line character is written.
+    * <p>
+    *
+    * @param out The <code>OutputStream</code> to write to.
+    * @param auto_flush <code>true</code> to flush the stream after every 
+    * line, <code>false</code> otherwise
+    * @param encoding The name of the character encoding to use for this
+    * object.
+    */
+   public PrintStream (OutputStream out, boolean auto_flush, String encoding)
+     throws UnsupportedEncodingException
+   {
+     super (out);
+ 
+     new String(new byte[]{0}, encoding);    // check if encoding is supported
+     this.encoding = encoding;
+     this.auto_flush = auto_flush;
+   }
+ 
+   /**
+    * This method checks to see if an error has occurred on this stream.  Note
+    * that once an error has occurred, this method will continue to report
+    * <code>true</code> forever for this stream.  Before checking for an
+    * error condition, this method flushes the stream.
+    *
+    * @return <code>true</code> if an error has occurred, 
+    * <code>false</code> otherwise
+    */
+   public boolean checkError ()
+   {
+     flush ();
+     return error_occurred;
+   }
+ 
+   /**
+    * This method can be called by subclasses to indicate that an error
+    * has occurred and should be reported by <code>checkError</code>.
+    */
+   protected void setError ()
+   {
+     error_occurred = true;
+   }
+ 
+   /**
+    * This method closes this stream and all underlying streams.
+    */
+   public void close ()
+   {
+     try
+       {
+ 	flush();
+ 	out.close();
+       }
+     catch (InterruptedIOException iioe)
+       {
+ 	Thread.currentThread().interrupt();
+       }
+     catch (IOException e)
+       {
+ 	setError ();
+       }
+   }
+ 
+   /**
+    * This method flushes any buffered bytes to the underlying stream and
+    * then flushes that stream as well.
+    */
+   public void flush ()
+   {
+     try
+       {
+ 	out.flush();
+       }
+     catch (InterruptedIOException iioe)
+       {
+ 	Thread.currentThread().interrupt();
+       }
+     catch (IOException e)
+       {
+ 	setError ();
+       }
+   }
+ 
+   private synchronized void print (String str, boolean println)
+   {
+     try
+       {
+         writeChars(str, 0, str.length());
+ 	if (println)
+ 	  writeChars(line_separator, 0, line_separator.length);
+ 	if (auto_flush)
+ 	  flush();
+       }
+     catch (InterruptedIOException iioe)
+       {
+ 	Thread.currentThread().interrupt();
+       }
+     catch (IOException e)
+       {
+ 	setError ();
+       }
+   }
+ 
+   private synchronized void print (char[] chars, int pos, int len,
+ 				   boolean println)
+   {
+     try
+       {
+         writeChars(chars, pos, len);
+ 	if (println)
+ 	  writeChars(line_separator, 0, line_separator.length);
+ 	if (auto_flush)
+ 	  flush();
+       }
+     catch (InterruptedIOException iioe)
+       {
+ 	Thread.currentThread().interrupt();
+       }
+     catch (IOException e)
+       {
+ 	setError ();
+       }
+   }
+ 
+   private void writeChars(char[] buf, int offset, int count)
+     throws IOException
+   {
+       byte[] bytes = (new String(buf, offset, count)).getBytes(encoding);
+       out.write(bytes, 0, bytes.length);
+   }
+ 
+   private void writeChars(String str, int offset, int count)
+     throws IOException
+   {
+       byte[] bytes = str.substring(offset, offset+count).getBytes(encoding);
+       out.write(bytes, 0, bytes.length);
+   }
+ 
+   /**
+    * This methods prints a boolean value to the stream.  <code>true</code>
+    * values are printed as "true" and <code>false</code> values are printed
+    * as "false".
+    *
+    * @param bool The <code>boolean</code> value to print
+    */
+   public void print (boolean bool)
+   {
+     print(String.valueOf(bool), false);
+   }
+ 
+   /**
+    * This method prints an integer to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * @param inum The <code>int</code> value to be printed
+    */
+   public void print (int inum)
+   {
+     print(String.valueOf(inum), false);
+   }
+ 
+   /**
+    * This method prints a long to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * @param lnum The <code>long</code> value to be printed
+    */
+   public void print (long lnum)
+   {
+     print(String.valueOf(lnum), false);
+   }
+ 
+   /**
+    * This method prints a float to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * @param fnum The <code>float</code> value to be printed
+    */
+   public void print (float fnum)
+   {
+     print(String.valueOf(fnum), false);
+   }
+ 
+   /**
+    * This method prints a double to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * @param dnum The <code>double</code> value to be printed
+    */
+   public void print (double dnum)
+   {
+     print(String.valueOf(dnum), false);
+   }
+ 
+   /**
+    * This method prints an <code>Object</code> to the stream.  The actual
+    * value printed is determined by calling the <code>String.valueOf()</code>
+    * method.
+    *
+    * @param obj The <code>Object</code> to print.
+    */
+   public void print (Object obj)
+   {
+     print(obj == null ? "null" : obj.toString(), false);
+   }
+ 
+   /**
+    * This method prints a <code>String</code> to the stream.  The actual
+    * value printed depends on the system default encoding.
+    *
+    * @param str The <code>String</code> to print.
+    */
+   public void print (String str)
+   {
+     print(str == null ? "null" : str, false);
+   }
+ 
+   /**
+    * This method prints a char to the stream.  The actual value printed is
+    * determined by the character encoding in use.
+    *
+    * @param ch The <code>char</code> value to be printed
+    */
+   public synchronized void print (char ch)
+   {
+     print(new char[]{ch}, 0, 1, false);
+   }
+ 
+   /**
+    * This method prints an array of characters to the stream.  The actual
+    * value printed depends on the system default encoding.
+    *
+    * @param charArray The array of characters to print.
+    */
+   public void print (char[] charArray)
+   {
+     print(charArray, 0, charArray.length, false);
+   }
+ 
+   /**
+    * This method prints a line separator sequence to the stream.  The value
+    * printed is determined by the system property <xmp>line.separator</xmp>
+    * and is not necessarily the Unix '\n' newline character.
+    */
+   public void println ()
+   {
+     print(line_separator, 0, line_separator.length, false);
+   }
+ 
+   /**
+    * This methods prints a boolean value to the stream.  <code>true</code>
+    * values are printed as "true" and <code>false</code> values are printed
+    * as "false".
+    * <p>
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param bool The <code>boolean</code> value to print
+    */
+   public void println (boolean bool)
+   {
+     print(String.valueOf(bool), true);
+   }
+ 
+   /**
+    * This method prints an integer to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    * <p>
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param inum The <code>int</code> value to be printed
+    */
+   public void println (int inum)
+   {
+     print(String.valueOf(inum), true);
+   }
+ 
+   /**
+    * This method prints a long to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    * <p>
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param lnum The <code>long</code> value to be printed
+    */
+   public void println (long lnum)
+   {
+     print(String.valueOf(lnum), true);
+   }
+ 
+   /**
+    * This method prints a float to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    * <p>
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param fnum The <code>float</code> value to be printed
+    */
+   public void println (float fnum)
+   {
+     print(String.valueOf(fnum), true);
+   }
+ 
+   /**
+    * This method prints a double to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    * <p>
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param dnum The <code>double</code> value to be printed
+    */
+   public void println (double dnum)
+   {
+     print(String.valueOf(dnum), true);
+   }
+ 
+   /**
+    * This method prints an <code>Object</code> to the stream.  The actual
+    * value printed is determined by calling the <code>String.valueOf()</code>
+    * method.
+    * <p>
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param obj The <code>Object</code> to print.
+    */
+   public void println (Object obj)
+   {
+     print(obj == null ? "null" : obj.toString(), true);
+   }
+ 
+   /**
+    * This method prints a <code>String</code> to the stream.  The actual
+    * value printed depends on the system default encoding.
+    * <p>
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param str The <code>String</code> to print.
+    */
+   public void println (String str)
+   {
+     print (str == null ? "null" : str, true);
+   }
+ 
+   /**
+    * This method prints a char to the stream.  The actual value printed is
+    * determined by the character encoding in use.
+    * <p>
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param ch The <code>char</code> value to be printed
+    */
+   public synchronized void println (char ch)
+   {
+     print(new char[]{ch}, 0, 1, true);
+   }
+ 
+   /**
+    * This method prints an array of characters to the stream.  The actual
+    * value printed depends on the system default encoding.
+    * <p>
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param charArray The array of characters to print.
+    */
+   public void println (char[] charArray)
+   {
+     print(charArray, 0, charArray.length, true);
+   }
+ 
+   /**
+    * This method writes a byte of data to the stream.  If auto-flush is
+    * enabled, printing a newline character will cause the stream to be
+    * flushed after the character is written.
+    * 
+    * @param oneByte The byte to be written
+    */
+   public void write (int oneByte)
+   {
+     try
+       {
+         out.write (oneByte & 0xff);
+         
+         if (auto_flush && (oneByte == '\n'))
+           flush ();
+       }
+     catch (InterruptedIOException iioe)
+       {
+ 	Thread.currentThread ().interrupt ();
+       }
+     catch (IOException e)
+       {
+         setError ();
+       }
+   }
+ 
+   /**
+    * This method writes <code>len</code> bytes from the specified array
+    * starting at index <code>offset</code> into the array.
+    *
+    * @param buffer The array of bytes to write
+    * @param offset The index into the array to start writing from
+    * @param len The number of bytes to write
+    */
+   public void write (byte[] buffer, int offset, int len)
+   {
+     try
+       {
+         out.write (buffer, offset, len);
+         
+         if (auto_flush)
+           flush ();
+       }
+     catch (InterruptedIOException iioe)
+       {
+ 	Thread.currentThread ().interrupt ();
+       }
+     catch (IOException e)
+       {
+         setError ();
+       }
+   }
+ } // class PrintStream
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/PrintWriter.java gcc-4.1.0/libjava/classpath/java/io/PrintWriter.java
*** gcc-4.0.2/libjava/classpath/java/io/PrintWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/PrintWriter.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,640 ----
+ /* PrintWriter.java -- prints primitive values and objects to a stream as text
+    Copyright (C) 1998, 1999, 2000, 2001  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  * However, should use native methods for conversion.
+  */
+ 
+ /**
+  * This class prints Java primitive values and objects to a stream as
+  * text.  None of the methods in this class throw an exception.  However,
+  * errors can be detected by calling the <code>checkError()</code> method.
+  * Additionally, this stream can be designated as "autoflush" when 
+  * created so that any writes are automatically flushed to the underlying
+  * output sink whenever one of the <code>println</code> methods is
+  * called.  (Note that this differs from the <code>PrintStream</code>
+  * class which also auto-flushes when it encounters a newline character
+  * in the chars written).
+  *
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @date April 17, 1998.  
+  */
+ public class PrintWriter extends Writer
+ {
+   /**
+    * <code>true</code> if auto-flush is enabled, <code>false</code> otherwise
+    */
+   private boolean autoflush;
+ 
+   /**
+    * This boolean indicates whether or not an error has ever occurred
+    * on this stream.
+    */
+   private boolean error;
+   
+   /**
+    * Indicates whether or not the stream has been closed.
+    */
+   private boolean closed;
+ 
+   /**
+    * This is the underlying <code>Writer</code> we are sending output
+    * to
+    */
+   protected Writer out;
+ 
+   /**
+    * This method intializes a new <code>PrintWriter</code> object to write
+    * to the specified output sink.  The form of the constructor does not
+    * enable auto-flush functionality.
+    *
+    * @param wr The <code>Writer</code> to write to.
+    */
+   public PrintWriter(Writer wr)
+   {
+     super(wr.lock);
+     this.out = wr;
+   }
+ 
+   /**
+    * This method intializes a new <code>PrintWriter</code> object to write
+    * to the specified output sink.  This constructor also allows "auto-flush"
+    * functionality to be specified where the stream will be flushed after
+    * every line is terminated or newline character is written.
+    *
+    * @param wr The <code>Writer</code> to write to.
+    * @param autoflush <code>true</code> to flush the stream after every 
+    * line, <code>false</code> otherwise
+    */
+   public PrintWriter(Writer wr, boolean autoflush)
+   {
+     super(wr.lock);
+     this.out = wr;
+     this.autoflush = autoflush;
+   }
+ 
+   /**
+    * This method initializes a new <code>PrintWriter</code> object to write
+    * to the specified <code>OutputStream</code>.  Characters will be converted
+    * to chars using the system default encoding.  Auto-flush functionality
+    * will not be enabled.
+    *
+    * @param out The <code>OutputStream</code> to write to
+    */
+   public PrintWriter(OutputStream out)
+   {
+     super();
+     this.out = new OutputStreamWriter(out);
+     this.lock = this.out;
+   }
+ 
+   /**
+    * This method initializes a new <code>PrintWriter</code> object to write
+    * to the specified <code>OutputStream</code>.  Characters will be converted
+    * to chars using the system default encoding.  This form of the 
+    * constructor allows auto-flush functionality to be enabled if desired
+    *
+    * @param out The <code>OutputStream</code> to write to
+    * @param autoflush <code>true</code> to flush the stream after every 
+    * <code>println</code> call, <code>false</code> otherwise.
+    */
+   public PrintWriter(OutputStream out, boolean autoflush)
+   {
+     this(out);
+     this.autoflush = autoflush;
+   }
+ 
+   /**
+    * This initializes a new PrintWriter object to write to the specified
+    * file.  It creates a FileOutputStream object and wraps it in an
+    * OutputStreamWriter using the default encoding.
+    * @param file name of the file to write to
+    * @throws FileNotFoundException if the file cannot be written or created
+    * 
+    * @since 1.5
+    */
+   public PrintWriter(String file) throws FileNotFoundException
+   {
+     this(new FileOutputStream(file));
+   }
+ 
+   /**
+    * This initializes a new PrintWriter object to write to the specified
+    * file.  It creates a FileOutputStream object and wraps it in an
+    * OutputStreamWriter using the specified encoding.
+    * @param file name of the file to write to
+    * @param enc the encoding to use
+    * @throws FileNotFoundException if the file cannot be written or created
+    * @throws UnsupportedEncodingException if the encoding is not supported
+    * 
+    * @since 1.5
+    */
+   public PrintWriter(String file, String enc) 
+     throws FileNotFoundException, UnsupportedEncodingException
+   {
+     this(new OutputStreamWriter(new FileOutputStream(file), enc));
+   }
+ 
+   /**
+    * This initializes a new PrintWriter object to write to the specified
+    * file.  It creates a FileOutputStream object and wraps it in an
+    * OutputStreamWriter using the default encoding.
+    * @param file the file to write to
+    * @throws FileNotFoundException if the file cannot be written or created
+    * 
+    * @since 1.5
+    */
+   public PrintWriter(File file) throws FileNotFoundException
+   {
+     this(new FileOutputStream(file));
+   }
+ 
+   /**
+    * This initializes a new PrintWriter object to write to the specified
+    * file.  It creates a FileOutputStream object and wraps it in an
+    * OutputStreamWriter using the specified encoding.
+    * @param file the file to write to
+    * @param enc the encoding to use
+    * @throws FileNotFoundException if the file cannot be written or created
+    * @throws UnsupportedEncodingException if the encoding is not supported
+    * 
+    * @since 1.5
+    */
+   public PrintWriter(File file, String enc) 
+     throws FileNotFoundException, UnsupportedEncodingException
+   {
+     this(new OutputStreamWriter(new FileOutputStream(file), enc));
+   }
+ 
+   /**
+    * This method can be called by subclasses to indicate that an error
+    * has occurred and should be reported by <code>checkError</code>.
+    */
+   protected void setError()
+   {
+     error = true;
+   }
+ 
+   /**
+    * This method checks to see if an error has occurred on this stream.  Note
+    * that once an error has occurred, this method will continue to report
+    * <code>true</code> forever for this stream.  Before checking for an
+    * error condition, this method flushes the stream.
+    *
+    * @return <code>true</code> if an error has occurred, 
+    * <code>false</code> otherwise
+    */
+   public boolean checkError()
+   {
+     if (! closed)
+       flush();
+     return error;
+   }
+ 
+   /**
+    * This method flushes any buffered chars to the underlying stream and
+    * then flushes that stream as well.
+    */
+   public void flush()
+   {
+     try
+       {
+ 	out.flush();
+       }
+     catch (IOException ex)
+       {
+ 	error = true;
+       }
+   }
+ 
+   /**
+    * This method closes this stream and all underlying streams.
+    */
+   public void close()
+   {
+     try
+       {
+         out.close();
+         closed = true;
+       }
+     catch (IOException ex)
+       {
+ 	error = true;
+       }
+   }
+ 
+   /**
+    * This method prints a <code>String</code> to the stream.  The actual
+    * value printed depends on the system default encoding.
+    *
+    * @param str The <code>String</code> to print.
+    */
+   public void print(String str)
+   {
+     write(str == null ? "null" : str);
+   }
+ 
+   /**
+    * This method prints a char to the stream.  The actual value printed is
+    * determined by the character encoding in use.
+    *
+    * @param ch The <code>char</code> value to be printed
+    */
+   public void print(char ch)
+   {
+     write((int) ch);
+   }
+ 
+   /**
+    * This method prints an array of characters to the stream.  The actual
+    * value printed depends on the system default encoding.
+    *
+    * @param charArray The array of characters to print.
+    */
+   public void print(char[] charArray)
+   {
+     write(charArray, 0, charArray.length);
+   }
+ 
+   /**
+    * This methods prints a boolean value to the stream.  <code>true</code>
+    * values are printed as "true" and <code>false</code> values are printed
+    * as "false".
+    *
+    * @param bool The <code>boolean</code> value to print
+    */
+   public void print(boolean bool)
+   {
+     // We purposely call write() and not print() here.  This preserves
+     // compatibility with JDK 1.2.
+     write (bool ? "true" : "false");
+   }
+ 
+   /**
+    * This method prints an integer to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * @param inum The <code>int</code> value to be printed
+    */
+   public void print(int inum)
+   {
+     // We purposely call write() and not print() here.  This preserves
+     // compatibility with JDK 1.2.
+     write(Integer.toString(inum));
+   }
+ 
+   /**
+    * This method prints a long to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * @param lnum The <code>long</code> value to be printed
+    */
+   public void print(long lnum)
+   {
+     // We purposely call write() and not print() here.  This preserves
+     // compatibility with JDK 1.2.
+     write(Long.toString(lnum));
+   }
+ 
+   /**
+    * This method prints a float to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * @param fnum The <code>float</code> value to be printed
+    */
+   public void print(float fnum)
+   {
+     // We purposely call write() and not print() here.  This preserves
+     // compatibility with JDK 1.2.
+     write(Float.toString(fnum));
+   }
+ 
+   /**
+    * This method prints a double to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * @param dnum The <code>double</code> value to be printed
+    */
+   public void print(double dnum)
+   {
+     // We purposely call write() and not print() here.  This preserves
+     // compatibility with JDK 1.2.
+     write(Double.toString(dnum));
+   }
+ 
+   /**
+    * This method prints an <code>Object</code> to the stream.  The actual
+    * value printed is determined by calling the <code>String.valueOf()</code>
+    * method.
+    *
+    * @param obj The <code>Object</code> to print.
+    */
+   public void print(Object obj)
+   {
+     // We purposely call write() and not print() here.  This preserves
+     // compatibility with JDK 1.2.
+     write(obj == null ? "null" : obj.toString());
+   }
+ 
+   /**
+    * This is the system dependent line separator
+    */
+   private static final char[] line_separator
+     = System.getProperty("line.separator", "\n").toCharArray(); 
+ 
+   /**
+    * This method prints a line separator sequence to the stream.  The value
+    * printed is determined by the system property <xmp>line.separator</xmp>
+    * and is not necessarily the Unix '\n' newline character.
+    */
+   public void println()
+   {
+     synchronized (lock)
+       {
+ 	try
+ 	  {
+ 	    write(line_separator, 0, line_separator.length);
+ 	    if (autoflush)
+ 	      out.flush();
+ 	  }
+ 	catch (IOException ex)
+ 	  {
+ 	    error = true;
+ 	  }
+       }
+   }
+ 
+   /**
+    * This methods prints a boolean value to the stream.  <code>true</code>
+    * values are printed as "true" and <code>false</code> values are printed
+    * as "false".
+    *
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param bool The <code>boolean</code> value to print
+    */
+   public void println(boolean bool)
+   {
+     synchronized (lock)
+       {
+ 	print(bool);
+ 	println();
+       }
+   }
+ 
+   /**
+    * This method prints an integer to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param inum The <code>int</code> value to be printed
+    */
+   public void println(int inum)
+   {
+     synchronized (lock)
+       {
+ 	print(inum);
+ 	println();
+       }
+   }
+ 
+   /**
+    * This method prints a long to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param lnum The <code>long</code> value to be printed
+    */
+   public void println(long lnum)
+   {
+     synchronized (lock)
+       {
+ 	print(lnum);
+ 	println();
+       }
+   }
+ 
+   /**
+    * This method prints a float to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param fnum The <code>float</code> value to be printed
+    */
+   public void println(float fnum)
+   {
+     synchronized (lock)
+       {
+ 	print(fnum);
+ 	println();
+       }
+   }
+ 
+   /**
+    * This method prints a double to the stream.  The value printed is
+    * determined using the <code>String.valueOf()</code> method.
+    *
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param dnum The <code>double</code> value to be printed
+    */
+   public void println(double dnum)
+   {
+     synchronized (lock)
+       {
+ 	print(dnum);
+ 	println();
+       }
+   }
+ 
+   /**
+    * This method prints an <code>Object</code> to the stream.  The actual
+    * value printed is determined by calling the <code>String.valueOf()</code>
+    * method.
+    *
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param obj The <code>Object</code> to print.
+    */
+   public void println(Object obj)
+   {
+     synchronized (lock)
+       {
+ 	print(obj);
+ 	println();
+       }
+   }
+ 
+   /**
+    * This method prints a <code>String</code> to the stream.  The actual
+    * value printed depends on the system default encoding.
+    *
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param str The <code>String</code> to print.
+    */
+   public void println(String str)
+   {
+     synchronized (lock)
+       {
+ 	print(str);
+ 	println();
+       }
+   }
+ 
+   /**
+    * This method prints a char to the stream.  The actual value printed is
+    * determined by the character encoding in use.
+    *
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param ch The <code>char</code> value to be printed
+    */
+   public void println(char ch)
+   {
+     synchronized (lock)
+       {
+ 	print(ch);
+ 	println();
+       }
+   }
+ 
+   /**
+    * This method prints an array of characters to the stream.  The actual
+    * value printed depends on the system default encoding.
+    *
+    * This method prints a line termination sequence after printing the value.
+    *
+    * @param charArray The array of characters to print.
+    */
+   public void println(char[] charArray)
+   {
+     synchronized (lock)
+       {
+ 	print(charArray);
+ 	println();
+       }
+   }
+ 
+   /**
+    * This method writes a single char to the stream. 
+    * 
+    * @param ch The char to be written, passed as a int
+    */
+   public void write(int ch)
+   {
+     try
+       {
+ 	out.write(ch);
+       }
+     catch (IOException ex)
+       {
+ 	error = true;
+       }
+   }
+ 
+   /**
+    * This method writes <code>count</code> chars from the specified array 
+    * starting at index <code>offset</code> into the array.
+    *
+    * @param charArray The array of chars to write
+    * @param offset The index into the array to start writing from
+    * @param count The number of chars to write
+   */
+   public void write(char[] charArray, int offset, int count)
+   {
+     try
+       {
+ 	out.write(charArray, offset, count);
+       }
+     catch (IOException ex)
+       {
+ 	error = true;
+       }
+   }
+ 
+   /**
+    * This method writes <code>count</code> chars from the specified
+    * <code>String</code> to the output starting at character position
+    * <code>offset</code> into the <code>String</code>
+    *
+    * @param str The <code>String</code> to write chars from
+    * @param offset The offset into the <code>String</code> to start writing from
+    * @param count The number of chars to write.
+    */
+   public void write(String str, int offset, int count)
+   {
+     try
+       {
+ 	out.write(str, offset, count);
+       }
+     catch (IOException ex)
+       {
+ 	error = true;
+       }
+   }
+ 
+   /**
+    * This method write all the chars in the specified array to the output.
+    *
+    * @param charArray The array of characters to write
+    */
+   public void write(char[] charArray)
+   {
+     write(charArray, 0, charArray.length);
+   }  
+ 
+   /**
+    * This method writes the contents of the specified <code>String</code>
+    * to the underlying stream.
+    *
+    * @param str The <code>String</code> to write
+    */
+   public void write(String str)
+   {
+     write(str, 0, str.length());
+   }  
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/PushbackInputStream.java gcc-4.1.0/libjava/classpath/java/io/PushbackInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/PushbackInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/PushbackInputStream.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,335 ----
+ /* PushbackInputStream.java -- An input stream that can unread bytes
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ /**
+   * This subclass of <code>FilterInputStream</code> provides the ability to 
+   * unread data from a stream.  It maintains an internal buffer of unread
+   * data that is supplied to the next read operation.  This is conceptually
+   * similar to mark/reset functionality, except that in this case the 
+   * position to reset the stream to does not need to be known in advance.
+   * <p>
+   * The default pushback buffer size one byte, but this can be overridden
+   * by the creator of the stream.
+   * <p>
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public class PushbackInputStream extends FilterInputStream
+ {
+   /**
+    * This is the default buffer size
+    */
+   private static final int DEFAULT_BUFFER_SIZE = 1;
+ 
+   /**
+    * This is the buffer that is used to store the pushed back data
+    */
+   protected byte[] buf;
+ 
+   /**
+    * This is the position in the buffer from which the next byte will be
+    * read.  Bytes are stored in reverse order in the buffer, starting from
+    * <code>buf[buf.length - 1]</code> to <code>buf[0]</code>.  Thus when 
+    * <code>pos</code> is 0 the buffer is full and <code>buf.length</code> when 
+    * it is empty
+    */
+   protected int pos;
+ 
+   /**
+    * This method initializes a <code>PushbackInputStream</code> to
+    * read from the specified subordinate <code>InputStream</code>
+    * with a default pushback buffer size of 1.
+    *
+    * @param in The subordinate stream to read from
+    */
+   public PushbackInputStream(InputStream in)
+   {
+     this(in, DEFAULT_BUFFER_SIZE);
+   }
+ 
+   /**
+    * This method initializes a <code>PushbackInputStream</code> to
+    * read from the specified subordinate <code>InputStream</code> with
+    * the specified buffer size
+    *
+    * @param in The subordinate <code>InputStream</code> to read from
+    * @param size The pushback buffer size to use
+    */
+   public PushbackInputStream(InputStream in, int size)
+   {
+     super(in);
+     if (size < 0)
+       throw new IllegalArgumentException();
+     buf = new byte[size];
+     pos = buf.length;
+   }
+ 
+   /**
+    * This method returns the number of bytes that can be read from this
+    * stream before a read can block.  A return of 0 indicates that blocking
+    * might (or might not) occur on the very next read attempt.
+    * <p>
+    * This method will return the number of bytes available from the
+    * pushback buffer plus the number of bytes available from the 
+    * underlying stream.
+    *
+    * @return The number of bytes that can be read before blocking could occur
+    *
+    * @exception IOException If an error occurs
+    */
+   public int available() throws IOException
+   {
+     try 
+       {
+ 	return (buf.length - pos) + super.available();
+       } 
+     catch (NullPointerException npe) 
+       {
+ 	throw new IOException ("Stream closed");
+       }
+   }
+ 
+   /**
+    * This method closes the stream and releases any associated resources.
+    * 
+    * @exception IOException If an error occurs.
+    */
+   public synchronized void close() throws IOException
+   {
+     buf = null;
+     super.close();
+   }
+ 
+   /**
+    * This method returns <code>false</code> to indicate that it does
+    * not support mark/reset functionality.
+    *
+    * @return This method returns <code>false</code> to indicate that
+    * this class does not support mark/reset functionality
+    */
+   public boolean markSupported()
+   {
+     return false;
+   }
+ 
+   /**
+    * This method always throws an IOException in this class because
+    * mark/reset functionality is not supported.
+    *
+    * @exception IOException Always thrown for this class
+    */
+   public void reset() throws IOException
+   {
+     throw new IOException("Mark not supported in this class");
+   }
+ 
+   /**
+    * This method reads an unsigned byte from the input stream and returns it
+    * as an int in the range of 0-255.  This method also will return -1 if
+    * the end of the stream has been reached.  The byte returned will be read
+    * from the pushback buffer, unless the buffer is empty, in which case
+    * the byte will be read from the underlying stream.
+    * <p>
+    * This method will block until the byte can be read.
+    *
+    * @return The byte read or -1 if end of stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized int read() throws IOException
+   {
+     if (pos < buf.length)
+       return ((int) buf[pos++]) & 0xFF;
+ 
+     return super.read();
+   }
+ 
+   /**
+    * This method read bytes from a stream and stores them into a
+    * caller supplied buffer.  It starts storing the data at index
+    * <code>offset</code> into the buffer and attempts to read
+    * <code>len</code> bytes.  This method can return before reading the
+    * number of bytes requested.  The actual number of bytes read is
+    * returned as an int.  A -1 is returned to indicate the end of the
+    * stream.
+    *  <p>
+    * This method will block until some data can be read.
+    * <p>
+    * This method first reads bytes from the pushback buffer in order to 
+    * satisfy the read request.  If the pushback buffer cannot provide all
+    * of the bytes requested, the remaining bytes are read from the 
+    * underlying stream.
+    *
+    * @param b The array into which the bytes read should be stored
+    * @param off The offset into the array to start storing bytes
+    * @param len The requested number of bytes to read
+    *
+    * @return The actual number of bytes read, or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public synchronized int read(byte[] b, int off, int len) throws IOException
+   {
+     int numBytes = Math.min(buf.length - pos, len);
+ 
+     if (numBytes > 0)
+       {
+ 	System.arraycopy (buf, pos, b, off, numBytes);
+ 	pos += numBytes;
+ 	len -= numBytes;
+ 	off += numBytes;
+       }
+ 
+     if (len > 0) 
+       {
+         len = super.read(b, off, len);
+         if (len == -1) //EOF
+ 	  return numBytes > 0 ? numBytes : -1;
+ 	numBytes += len;
+       }
+     return numBytes;
+   }
+ 
+   /**
+    * This method pushes a single byte of data into the pushback buffer.
+    * The byte pushed back is the one that will be returned as the first byte
+    * of the next read.
+    * <p>
+    * If the pushback buffer is full, this method throws an exception.
+    * <p>
+    * The argument to this method is an <code>int</code>.  Only the low
+    * eight bits of this value are pushed back.
+    *
+    * @param b The byte to be pushed back, passed as an int
+    *
+    * @exception IOException If the pushback buffer is full.
+    */
+   public synchronized void unread(int b) throws IOException
+   {
+     if (pos <= 0)
+       throw new IOException("Insufficient space in pushback buffer");
+ 
+     buf[--pos] = (byte) b;
+   }
+ 
+   /**
+    * This method pushes all of the bytes in the passed byte array into 
+    * the pushback bfer.  These bytes are pushed in reverse order so that
+    * the next byte read from the stream after this operation will be
+    * <code>b[0]</code> followed by <code>b[1]</code>, etc.
+    * <p>
+    * If the pushback buffer cannot hold all of the requested bytes, an
+    * exception is thrown.
+    *
+    * @param b The byte array to be pushed back
+    *
+    * @exception IOException If the pushback buffer is full
+    */
+   public synchronized void unread(byte[] b) throws IOException
+   {
+     unread(b, 0, b.length);
+   }
+ 
+   /**
+    * This method pushed back bytes from the passed in array into the
+    * pushback buffer.  The bytes from <code>b[offset]</code> to
+    * <code>b[offset + len]</code> are pushed in reverse order so that
+    * the next byte read from the stream after this operation will be
+    * <code>b[offset]</code> followed by <code>b[offset + 1]</code>,
+    * etc.
+    * <p>
+    * If the pushback buffer cannot hold all of the requested bytes, an
+    * exception is thrown.
+    *
+    * @param b The byte array to be pushed back
+    * @param off The index into the array where the bytes to be push start
+    * @param len The number of bytes to be pushed.
+    *
+    * @exception IOException If the pushback buffer is full
+    */
+   public synchronized void unread(byte[] b, int off, int len)
+     throws IOException
+   {
+     if (pos < len)
+       throw new IOException("Insufficient space in pushback buffer");
+ 
+     // Note the order that these bytes are being added is the opposite
+     // of what would be done if they were added to the buffer one at a time.
+     // See the Java Class Libraries book p. 1390.
+     System.arraycopy(b, off, buf, pos - len, len);
+ 
+     // Don't put this into the arraycopy above, an exception might be thrown
+     // and in that case we don't want to modify pos.
+     pos -= len;
+   }
+ 
+   /**
+    * This method skips the specified number of bytes in the stream.  It
+    * returns the actual number of bytes skipped, which may be less than the
+    * requested amount.
+    * <p>
+    * This method first discards bytes from the buffer, then calls the
+    * <code>skip</code> method on the underlying <code>InputStream</code> to 
+    * skip additional bytes if necessary.
+    *
+    * @param n The requested number of bytes to skip
+    *
+    * @return The actual number of bytes skipped.
+    *
+    * @exception IOException If an error occurs
+    *
+    * @since 1.2
+    */
+   public synchronized long skip(long n) throws IOException
+   {
+     final long origN = n;
+ 
+     if (n > 0L)
+       {
+ 	int numread = (int) Math.min((long) (buf.length - pos), n);
+ 	pos += numread;
+ 	n -= numread;
+ 	if (n > 0)
+ 	  n -= super.skip(n);
+       }
+ 
+     return origN - n;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/PushbackReader.java gcc-4.1.0/libjava/classpath/java/io/PushbackReader.java
*** gcc-4.0.2/libjava/classpath/java/io/PushbackReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/PushbackReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,384 ----
+ /* PushbackReader.java -- An character stream that can unread chars
+    Copyright (C) 1998, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This subclass of <code>FilterReader</code> provides the ability to 
+  * unread data from a stream.  It maintains an internal buffer of unread
+  * data that is supplied to the next read operation.  This is conceptually
+  * similar to mark/reset functionality, except that in this case the 
+  * position to reset the stream to does not need to be known in advance.
+  * <p>
+  * The default pushback buffer size one char, but this can be overridden
+  * by the creator of the stream.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public class PushbackReader extends FilterReader
+ {
+   /**
+    * This is the default buffer size
+    */
+   private static final int DEFAULT_BUFFER_SIZE = 1;
+ 
+   /**
+    * This is the buffer that is used to store the pushed back data
+    */
+   private char[] buf;
+ 
+   /**
+    * This is the position in the buffer from which the next char will be
+    * read.  Bytes are stored in reverse order in the buffer, starting from
+    * <code>buf[buf.length - 1]</code> to <code>buf[0]</code>.  Thus when 
+    * <code>pos</code> is 0 the buffer is full and <code>buf.length</code> when 
+    * it is empty
+    */
+   private int pos;
+ 
+   /**
+    * This method initializes a <code>PushbackReader</code> to read from the
+    * specified subordinate <code>Reader</code> with a default pushback buffer 
+    * size of 1.
+    *
+    * @param in The subordinate stream to read from
+    */
+   public PushbackReader(Reader in)
+   {
+     this(in, DEFAULT_BUFFER_SIZE);
+   }
+ 
+   /**
+    * This method initializes a <code>PushbackReader</code> to read from the
+    * specified subordinate <code>Reader</code> with the specified buffer
+    * size
+    *
+    * @param in The subordinate <code>Reader</code> to read from
+    * @param bufsize The pushback buffer size to use
+    */
+   public PushbackReader(Reader in, int bufsize)
+   {
+     super(in);
+ 
+     if (bufsize < 0)
+       throw new IllegalArgumentException("buffer size must be positive");
+ 
+     buf = new char[bufsize];
+     pos = bufsize;
+   }
+ 
+   /**
+    * This method closes the stream and frees any associated resources.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public void close() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	buf = null;
+ 	super.close();
+       }
+   }
+ 
+   /**
+    * This method throws an exception when called since this class does
+    * not support mark/reset.
+    *
+    * @param read_limit Not used.
+    *
+    * @exception IOException Always thrown to indicate mark/reset not supported.
+    */
+   public void mark(int read_limit) throws IOException
+   {
+     throw new IOException("mark not supported in this class");
+   }
+ 
+   /**
+    * This method returns <code>false</code> to indicate that it does not support
+    * mark/reset functionality.
+    *
+    * @return This method returns <code>false</code> to indicate that this 
+    * class does not support mark/reset functionality
+    *
+    */
+   public boolean markSupported()
+   {
+     return(false);
+   }
+ 
+   /**
+    * This method always throws an IOException in this class because
+    * mark/reset functionality is not supported.
+    *
+    * @exception IOException Always thrown for this class
+    */
+   public void reset() throws IOException
+   {
+     throw new IOException("reset not supported in this class");
+   }
+ 
+   /**
+    * This method determines whether or not this stream is ready to be read.
+    * If it returns <code>false</code> to indicate that the stream is not
+    * ready, any attempt to read from the stream could (but is not
+    * guaranteed to) block.
+    * <p>
+    * This stream is ready to read if there are either chars waiting to be
+    * read in the pushback buffer or if the underlying stream is ready to
+    * be read.
+    *
+    * @return <code>true</code> if this stream is ready to be read, 
+    * <code>false</code> otherwise
+    *
+    * @exception IOException If an error occurs
+    */
+   public boolean ready() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+ 	  throw new IOException ("stream closed");
+ 
+ 	if (((buf.length - pos) > 0) || super.ready())
+ 	  return(true);
+ 	else
+ 	  return(false);
+       }
+   }
+ 
+   // Don't delete this method just because the spec says it shouldn't be there!
+   // See the CVS log for details.
+   /**
+     * This method skips the specified number of chars in the stream.  It
+     * returns the actual number of chars skipped, which may be less than the
+     * requested amount.
+     * <p>
+     * This method first discards chars from the buffer, then calls the
+     * <code>skip</code> method on the underlying <code>Reader</code> to 
+     * skip additional chars if necessary.
+     *
+     * @param num_chars The requested number of chars to skip
+     *
+     * @return The actual number of chars skipped.
+     *
+     * @exception IOException If an error occurs
+     */
+   public long skip(long num_chars) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (num_chars <= 0)
+ 	  return(0);
+ 
+ 	if ((buf.length - pos) >= num_chars)
+ 	  {
+ 	    pos += num_chars;
+ 	    return(num_chars);
+ 	  }
+ 
+ 	int chars_discarded = buf.length - pos;
+ 	pos = buf.length;
+ 
+ 	long chars_skipped = in.skip(num_chars - chars_discarded);
+ 
+ 	return(chars_discarded + chars_skipped);
+       }
+   }
+ 
+   /**
+    * This method reads an unsigned char from the input stream and returns it
+    * as an int in the range of 0-65535.  This method also will return -1 if
+    * the end of the stream has been reached.  The char returned will be read
+    * from the pushback buffer, unless the buffer is empty, in which case
+    * the char will be read from the underlying stream.
+    * <p>
+    * This method will block until the char can be read.
+    *
+    * @return The char read or -1 if end of stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public int read() throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+           throw new IOException("stream closed");
+ 
+ 	if (pos == buf.length)
+ 	  return(super.read());
+ 
+ 	++pos;
+ 	return((buf[pos - 1] & 0xFFFF));
+       }
+   }
+ 
+   /**
+    * This method read chars from a stream and stores them into a caller
+    * supplied buffer.  It starts storing the data at index <code>offset</code>
+    * into
+    * the buffer and attempts to read <code>len</code> chars.  This method can
+    * return before reading the number of chars requested.  The actual number
+    * of chars read is returned as an int.  A -1 is returned to indicate the
+    * end of the stream.
+    *  <p>
+    * This method will block until some data can be read.
+    * <p>
+    * This method first reads chars from the pushback buffer in order to 
+    * satisfy the read request.  If the pushback buffer cannot provide all
+    * of the chars requested, the remaining chars are read from the 
+    * underlying stream.
+    *
+    * @param buffer The array into which the chars read should be stored
+    * @param offset The offset into the array to start storing chars
+    * @param length The requested number of chars to read
+    *
+    * @return The actual number of chars read, or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public synchronized int read(char[] buffer, int offset, int length)
+     throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+           throw new IOException("stream closed");
+ 
+ 	if (offset < 0 || length < 0 || offset + length > buffer.length)
+           throw new ArrayIndexOutOfBoundsException();
+ 
+ 	int numBytes = Math.min(buf.length - pos, length);
+ 	if (numBytes > 0)
+ 	  {
+ 	    System.arraycopy (buf, pos, buffer, offset, numBytes);
+ 	    pos += numBytes;
+ 	    return numBytes;
+ 	  }
+ 
+ 	return super.read(buffer, offset, length);
+       }
+   }
+ 
+   /**
+    * This method pushes a single char of data into the pushback buffer.
+    * The char pushed back is the one that will be returned as the first char
+    * of the next read.
+    * <p>
+    * If the pushback buffer is full, this method throws an exception.
+    * <p>
+    * The argument to this method is an <code>int</code>.  Only the low eight 
+    * bits of this value are pushed back.
+    *
+    * @param b The char to be pushed back, passed as an int
+    *
+    * @exception IOException If the pushback buffer is full.
+    */
+   public void unread(int b) throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+ 	  throw new IOException("stream closed");
+ 	if (pos == 0)
+ 	  throw new IOException("Pushback buffer is full");
+ 
+ 	--pos;
+ 	buf[pos] = (char)(b & 0xFFFF);
+       }
+   }
+ 
+   /**
+    * This method pushes all of the chars in the passed char array into 
+    * the pushback buffer.  These chars are pushed in reverse order so that
+    * the next char read from the stream after this operation will be
+    * <code>buf[0]</code> followed by <code>buf[1]</code>, etc.
+    * <p>
+    * If the pushback buffer cannot hold all of the requested chars, an
+    * exception is thrown.
+    *
+    * @param buf The char array to be pushed back
+    *
+    * @exception IOException If the pushback buffer is full
+    */
+   public synchronized void unread(char[] buf) throws IOException
+   {
+     unread(buf, 0, buf.length);
+   }
+ 
+   /**
+    * This method pushed back chars from the passed in array into the pushback
+    * buffer.  The chars from <code>buf[offset]</code> to 
+    * <code>buf[offset + len]</code>
+    * are pushed in reverse order so that the next char read from the stream
+    * after this operation will be <code>buf[offset]</code> followed by
+    * <code>buf[offset + 1]</code>, etc.
+    * <p>
+    * If the pushback buffer cannot hold all of the requested chars, an
+    * exception is thrown.
+    *
+    * @param buffer The char array to be pushed back
+    * @param offset The index into the array where the chars to be push start
+    * @param length The number of chars to be pushed.
+    *
+    * @exception IOException If the pushback buffer is full
+    */
+   public synchronized void unread(char[] buffer, int offset, int length)
+     throws IOException
+   {
+     synchronized (lock)
+       {
+ 	if (buf == null)
+           throw new IOException("stream closed");
+ 	if (pos < length)
+ 	  throw new IOException("Pushback buffer is full");
+ 
+ 	// Note the order that these chars are being added is the opposite
+ 	// of what would be done if they were added to the buffer one at a time.
+ 	// See the Java Class Libraries book p. 1397.
+ 	System.arraycopy(buffer, offset, buf, pos - length, length);
+ 
+ 	// Don't put this into the arraycopy above, an exception might be thrown
+ 	// and in that case we don't want to modify pos.
+ 	pos -= length;
+       }
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/RandomAccessFile.java gcc-4.1.0/libjava/classpath/java/io/RandomAccessFile.java
*** gcc-4.0.2/libjava/classpath/java/io/RandomAccessFile.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/RandomAccessFile.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,991 ----
+ /* RandomAccessFile.java -- Class supporting random file I/O
+    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import gnu.java.nio.channels.FileChannelImpl;
+ 
+ import java.nio.channels.FileChannel;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * Status: Believe complete and correct to 1.1.
+  */
+ 
+ /**
+  * This class allows reading and writing of files at random locations.
+  * Most Java I/O classes are either pure sequential input or output.  This
+  * class fulfills the need to be able to read the bytes of a file in an
+  * arbitrary order.  In addition, this class implements the
+  * <code>DataInput</code> and <code>DataOutput</code> interfaces to allow
+  * the reading and writing of Java primitives.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  */
+ public class RandomAccessFile implements DataOutput, DataInput
+ {
+ 
+   // The underlying file.
+   private FileChannelImpl ch;
+   private FileDescriptor fd;
+   // The corresponding input and output streams.
+   private DataOutputStream out;
+   private DataInputStream in;
+   
+   
+   /**
+    * This method initializes a new instance of <code>RandomAccessFile</code>
+    * to read from the specified <code>File</code> object with the specified 
+    * access mode.   The access mode is either "r" for read only access or "rw" 
+    * for read-write access.
+    * <p>
+    * Note that a <code>SecurityManager</code> check is made prior to
+    * opening the file to determine whether or not this file is allowed to
+    * be read or written.
+    *
+    * @param file The <code>File</code> object to read and/or write.
+    * @param mode "r" for read only or "rw" for read-write access to the file
+    *
+    * @exception IllegalArgumentException If <code>mode</code> has an 
+    * illegal value
+    * @exception SecurityException If the requested access to the file 
+    * is not allowed
+    * @exception FileNotFoundException If the file is a directory, or 
+    * any other error occurs
+    */
+   public RandomAccessFile (File file, String mode)
+     throws FileNotFoundException
+   {
+     int fdmode;
+     if (mode.equals("r"))
+       fdmode = FileChannelImpl.READ;
+     else if (mode.equals("rw"))
+       fdmode = FileChannelImpl.READ | FileChannelImpl.WRITE;
+     else if (mode.equals("rws"))
+       {
+ 	fdmode = (FileChannelImpl.READ | FileChannelImpl.WRITE
+ 		  | FileChannelImpl.SYNC);
+       }
+     else if (mode.equals("rwd"))
+       {
+ 	fdmode = (FileChannelImpl.READ | FileChannelImpl.WRITE
+ 		  | FileChannelImpl.DSYNC);
+       }
+     else
+       throw new IllegalArgumentException ("invalid mode: " + mode);
+ 
+     final String fileName = file.getPath();
+ 
+     // The obligatory SecurityManager stuff
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       {
+         s.checkRead(fileName);
+ 
+         if ((fdmode & FileChannelImpl.WRITE) != 0)
+           s.checkWrite(fileName);
+       }
+ 
+     ch = FileChannelImpl.create(file, fdmode);
+     fd = new FileDescriptor(ch);
+     out = new DataOutputStream (new FileOutputStream (fd));
+     in = new DataInputStream (new FileInputStream (fd));
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>RandomAccessFile</code>
+    * to read from the specified file name with the specified access mode.
+    * The access mode is either "r" for read only access, "rw" for read
+    * write access, "rws" for synchronized read/write access of both
+    * content and metadata, or "rwd" for read/write access
+    * where only content is required to be synchronous.
+    * <p>
+    * Note that a <code>SecurityManager</code> check is made prior to
+    * opening the file to determine whether or not this file is allowed to
+    * be read or written.
+    *
+    * @param fileName The name of the file to read and/or write
+    * @param mode "r", "rw", "rws", or "rwd"
+    *
+    * @exception IllegalArgumentException If <code>mode</code> has an 
+    * illegal value
+    * @exception SecurityException If the requested access to the file 
+    * is not allowed
+    * @exception FileNotFoundException If the file is a directory or 
+    * any other error occurs
+    */
+   public RandomAccessFile (String fileName, String mode)
+     throws FileNotFoundException
+   {
+     this (new File(fileName), mode);
+   }
+ 
+   /**
+    * This method closes the file and frees up all file related system
+    * resources.  Since most operating systems put a limit on how many files
+    * may be opened at any given time, it is a good idea to close all files
+    * when no longer needed to avoid hitting this limit
+    */
+   public void close () throws IOException
+   {
+     ch.close();
+   }
+ 
+   /**
+    * This method returns a <code>FileDescriptor</code> object that 
+    * represents the native file handle for this file.
+    *
+    * @return The <code>FileDescriptor</code> object for this file
+    *
+    * @exception IOException If an error occurs
+    */
+   public final FileDescriptor getFD () throws IOException
+   {
+     synchronized (this)
+       {
+ 	if (fd == null)
+ 	  fd = new FileDescriptor (ch);
+ 	return fd;
+       }
+   }
+ 
+   /**
+    * This method returns the current offset in the file at which the next
+    * read or write will occur
+    *
+    * @return The current file position
+    *
+    * @exception IOException If an error occurs
+    */
+   public long getFilePointer () throws IOException
+   {
+     return ch.position();
+   }
+ 
+   /**
+    * This method sets the length of the file to the specified length.
+    * If the currently length of the file is longer than the specified
+    * length, then the file is truncated to the specified length (the
+    * file position is set to the end of file in this case).  If the
+    * current length of the file is shorter than the specified length,
+    * the file is extended with bytes of an undefined value (the file
+    * position is unchanged in this case).
+    * <p>
+    * The file must be open for write access for this operation to succeed.
+    *
+    * @param newLen The new length of the file
+    *
+    * @exception IOException If an error occurs
+    */
+   public void setLength (long newLen) throws IOException
+   {
+     // FIXME: Extending a file should probably be done by one method call.
+ 
+     // FileChannel.truncate() can only shrink a file.
+     // To expand it we need to seek forward and write at least one byte.
+     if (newLen < length())
+       ch.truncate (newLen);
+     else if (newLen > length())
+       {
+ 	long pos = getFilePointer();
+ 	seek(newLen - 1);
+ 	write(0);
+ 	seek(pos);
+       }
+   }
+ 
+   /**
+    * This method returns the length of the file in bytes
+    *
+    * @return The length of the file
+    *
+    * @exception IOException If an error occurs
+    */
+   public long length () throws IOException
+   {
+     return ch.size();
+   }
+ 
+   /**
+    * This method reads a single byte of data from the file and returns it
+    * as an integer.
+    *
+    * @return The byte read as an int, or -1 if the end of the file was reached.
+    *
+    * @exception IOException If an error occurs
+    */
+   public int read () throws IOException
+   {
+     return in.read();
+   }
+ 
+   /**
+    * This method reads bytes from the file into the specified array.  The
+    * bytes are stored starting at the beginning of the array and up to 
+    * <code>buf.length</code> bytes can be read.
+    *
+    * @param buffer The buffer to read bytes from the file into
+    *
+    * @return The actual number of bytes read or -1 if end of file
+    *
+    * @exception IOException If an error occurs
+    */
+   public int read (byte[] buffer) throws IOException
+   {
+     return in.read (buffer);
+   }
+ 
+   /**
+    * This methods reads up to <code>len</code> bytes from the file into the
+    * specified array starting at position <code>offset</code> into the array.
+    *
+    * @param buffer The array to read the bytes into
+    * @param offset The index into the array to start storing bytes
+    * @param len The requested number of bytes to read
+    *
+    * @return The actual number of bytes read, or -1 if end of file
+    *
+    * @exception IOException If an error occurs
+    */
+   public int read (byte[] buffer, int offset, int len) throws IOException
+   {
+     return in.read (buffer, offset, len);
+   }
+ 
+   /**
+    * This method reads a Java boolean value from an input stream.  It does
+    * so by reading a single byte of data.  If that byte is zero, then the
+    * value returned is <code>false</code>  If the byte is non-zero, then
+    * the value returned is <code>true</code>
+    * <p>
+    * This method can read a <code>boolean</code> written by an object 
+    * implementing the
+    * <code>writeBoolean()</code> method in the <code>DataOutput</code> 
+    * interface.
+    *
+    * @return The <code>boolean</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the 
+    * boolean
+    * @exception IOException If any other error occurs
+    */
+   public final boolean readBoolean () throws IOException
+   {
+     return in.readBoolean ();
+   }
+ 
+   /**
+    * This method reads a Java byte value from an input stream.  The value
+    * is in the range of -128 to 127.
+    * <p>
+    * This method can read a <code>byte</code> written by an object 
+    * implementing the 
+    * <code>writeByte()</code> method in the <code>DataOutput</code> interface.
+    *
+    * @return The <code>byte</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the byte
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput
+    */
+   public final byte readByte () throws IOException
+   {
+     return in.readByte ();
+   }
+ 
+   /**
+    * This method reads a Java <code>char</code> value from an input stream.  
+    * It operates by reading two bytes from the stream and converting them to 
+    * a single 16-bit Java <code>char</code>  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code> represent 
+    * the first
+    * and second byte read from the stream respectively, they will be
+    * transformed to a <code>char</code> in the following manner:
+    * <p>
+    * <code>(char)(((byte1 &amp; 0xFF) &lt;&lt; 8) | (byte2 &amp; 0xFF)</code>
+    * <p>
+    * This method can read a <code>char</code> written by an object 
+    * implementing the
+    * <code>writeChar()</code> method in the <code>DataOutput</code> interface.
+    *
+    * @return The <code>char</code> value read 
+    *
+    * @exception EOFException If end of file is reached before reading the char
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput
+    */
+   public final char readChar () throws IOException
+   {
+     return in.readChar();
+   }
+ 
+   /**
+    * This method reads a Java double value from an input stream.  It operates
+    * by first reading a <code>logn</code> value from the stream by calling the
+    * <code>readLong()</code> method in this interface, then 
+    * converts that <code>long</code>
+    * to a <code>double</code> using the <code>longBitsToDouble</code> 
+    * method in the class <code>java.lang.Double</code>
+    * <p>
+    * This method can read a <code>double</code> written by an object 
+    * implementing the
+    * <code>writeDouble()</code> method in the <code>DataOutput</code> 
+    * interface.
+    *
+    * @return The <code>double</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading 
+    * the double
+    * @exception IOException If any other error occurs
+    *
+    * @see java.lang.Double
+    * @see DataOutput
+    */
+   public final double readDouble () throws IOException
+   {
+     return in.readDouble ();
+   }
+ 
+   /**
+    * This method reads a Java float value from an input stream.  It operates
+    * by first reading an <code>int</code> value from the stream by calling the
+    * <code>readInt()</code> method in this interface, then converts 
+    * that <code>int</code>
+    * to a <code>float</code> using the <code>intBitsToFloat</code> method in 
+    * the class <code>java.lang.Float</code>
+    * <p>
+    * This method can read a <code>float</code> written by an object 
+    * implementing the
+    * <code>writeFloat()</code> method in the <code>DataOutput</code> interface.
+    *
+    * @return The <code>float</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the float
+    * @exception IOException If any other error occurs
+    *
+    * @see java.lang.Float
+    * @see DataOutput
+    */
+   public final float readFloat () throws IOException
+   {
+     return in.readFloat();
+   }
+ 
+   /**
+    * This method reads raw bytes into the passed array until the array is
+    * full.  Note that this method blocks until the data is available and
+    * throws an exception if there is not enough data left in the stream to
+    * fill the buffer
+    *
+    * @param buffer The buffer into which to read the data
+    *
+    * @exception EOFException If end of file is reached before filling the 
+    * buffer
+    * @exception IOException If any other error occurs
+    */
+   public final void readFully (byte[] buffer) throws IOException
+   {
+     in.readFully(buffer);
+   }
+ 
+   /**
+    * This method reads raw bytes into the passed array <code>buf</code> 
+    * starting
+    * <code>offset</code> bytes into the buffer.  The number of bytes read 
+    * will be
+    * exactly <code>len</code>  Note that this method blocks until the data is 
+    * available and throws an exception if there is not enough data left in 
+    * the stream to read <code>len</code> bytes.
+    *
+    * @param buffer The buffer into which to read the data
+    * @param offset The offset into the buffer to start storing data
+    * @param count The number of bytes to read into the buffer
+    *
+    * @exception EOFException If end of file is reached before filling 
+    * the buffer
+    * @exception IOException If any other error occurs
+    */
+   public final void readFully (byte[] buffer, int offset, int count)
+     throws IOException
+   {
+     in.readFully (buffer, offset, count);
+   }
+ 
+   /**
+    * This method reads a Java <code>int</code> value from an input stream
+    * It operates by reading four bytes from the stream and converting them to 
+    * a single Java <code>int</code>  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte4</code> 
+    * represent the first
+    * four bytes read from the stream, they will be
+    * transformed to an <code>int</code> in the following manner:
+    * <p>
+    * <code>(int)(((byte1 &amp; 0xFF) &lt;&lt; 24) + ((byte2 &amp; 0xFF) &lt;&lt; 16) + 
+    * ((byte3 &amp; 0xFF) &lt;&lt; 8) + (byte4 &amp; 0xFF)))</code>
+    * <p>
+    * The value returned is in the range of 0 to 65535.
+    * <p>
+    * This method can read an <code>int</code> written by an object 
+    * implementing the
+    * <code>writeInt()</code> method in the <code>DataOutput</code> interface.
+    *
+    * @return The <code>int</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the int
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput
+    */
+   public final int readInt () throws IOException
+   {
+     return in.readInt();
+   }
+ 
+   /**
+    * This method reads the next line of text data from an input stream.
+    * It operates by reading bytes and converting those bytes to 
+    * <code>char</code>
+    * values by treating the byte read as the low eight bits of the 
+    * <code>char</code>
+    * and using <code>0</code> as the high eight bits.  Because of this, it does
+    * not support the full 16-bit Unicode character set.
+    * <p>
+    * The reading of bytes ends when either the end of file or a line terminator
+    * is encountered.  The bytes read are then returned as a <code>String</code>
+    * A line terminator is a byte sequence consisting of either 
+    * <code>\r</code> <code>\n</code> or <code>\r\n</code>  These 
+    * termination charaters are
+    * discarded and are not returned as part of the string.
+    * <p>
+    * This method can read data that was written by an object implementing the
+    * <code>writeLine()</code> method in <code>DataOutput</code>
+    *
+    * @return The line read as a <code>String</code>
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see DataOutput
+    */
+   public final String readLine () throws IOException
+   {
+     return in.readLine ();
+   }
+ 
+   /**
+    * This method reads a Java long value from an input stream
+    * It operates by reading eight bytes from the stream and converting them to 
+    * a single Java <code>long</code>  The bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> through <code>byte8</code> 
+    * represent the first
+    * eight bytes read from the stream, they will be
+    * transformed to an <code>long</code> in the following manner:
+    * <p>
+    * <code>
+    * (long)((((long)byte1 &amp; 0xFF) &lt;&lt; 56) + (((long)byte2 &amp; 0xFF) &lt;&lt; 48) + 
+    * (((long)byte3 &amp; 0xFF) &lt;&lt; 40) + (((long)byte4 &amp; 0xFF) &lt;&lt; 32) + 
+    * (((long)byte5 &amp; 0xFF) &lt;&lt; 24) + (((long)byte6 &amp; 0xFF) &lt;&lt; 16) + 
+    * (((long)byte7 &amp; 0xFF) &lt;&lt; 8) + ((long)byte9 &amp; 0xFF)))</code>
+    * <p>
+    * The value returned is in the range of 0 to 65535.
+    * <p>
+    * This method can read an <code>long</code> written by an object 
+    * implementing the
+    * <code>writeLong()</code> method in the <code>DataOutput</code> interface.
+    *
+    * @return The <code>long</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the long
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput
+    */
+   public final long readLong () throws IOException
+   {
+     return in.readLong();
+   }
+ 
+   /**
+    * This method reads a signed 16-bit value into a Java in from the stream.
+    * It operates by reading two bytes from the stream and converting them to 
+    * a single 16-bit Java <code>short</code>  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code> 
+    * represent the first
+    * and second byte read from the stream respectively, they will be
+    * transformed to a <code>short</code> in the following manner:
+    * <p>
+    * <code>(short)(((byte1 &amp; 0xFF) &lt;&lt; 8) | (byte2 &amp; 0xFF)</code>
+    * <p>
+    * The value returned is in the range of -32768 to 32767.
+    * <p>
+    * This method can read a <code>short</code> written by an object 
+    * implementing the
+    * <code>writeShort()</code> method in the <code>DataOutput</code> interface.
+    *
+    * @return The <code>short</code> value read
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput
+    */
+   public final short readShort () throws IOException
+   {
+     return in.readShort();
+   }
+ 
+   /**
+    * This method reads 8 unsigned bits into a Java <code>int</code> value 
+    * from the 
+    * stream. The value returned is in the range of 0 to 255.
+    * <p>
+    * This method can read an unsigned byte written by an object implementing 
+    * the <code>writeUnsignedByte()</code> method in the 
+    * <code>DataOutput</code> interface.
+    *
+    * @return The unsigned bytes value read as a Java <code>int</code>
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput
+    */
+   public final int readUnsignedByte () throws IOException
+   {
+     return in.readUnsignedByte();
+   }
+ 
+   /**
+    * This method reads 16 unsigned bits into a Java int value from the stream.
+    * It operates by reading two bytes from the stream and converting them to 
+    * a single Java <code>int</code>  The two bytes are stored most
+    * significant byte first (i.e., "big endian") regardless of the native
+    * host byte ordering. 
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code> 
+    * represent the first
+    * and second byte read from the stream respectively, they will be
+    * transformed to an <code>int</code> in the following manner:
+    * <p>
+    * <code>(int)(((byte1 &amp; 0xFF) &lt;&lt; 8) + (byte2 &amp; 0xFF))</code>
+    * <p>
+    * The value returned is in the range of 0 to 65535.
+    * <p>
+    * This method can read an unsigned short written by an object implementing
+    * the <code>writeUnsignedShort()</code> method in the 
+    * <code>DataOutput</code> interface.
+    *
+    * @return The unsigned short value read as a Java <code>int</code>
+    *
+    * @exception EOFException If end of file is reached before reading the value
+    * @exception IOException If any other error occurs
+    */
+   public final int readUnsignedShort () throws IOException
+   {
+     return in.readUnsignedShort();
+   }
+ 
+   /**
+    * This method reads a <code>String</code> from an input stream that 
+    * is encoded in
+    * a modified UTF-8 format.  This format has a leading two byte sequence
+    * that contains the remaining number of bytes to read.  This two byte
+    * sequence is read using the <code>readUnsignedShort()</code> method of this
+    * interface.
+    * <p>
+    * After the number of remaining bytes have been determined, these bytes
+    * are read an transformed into <code>char</code> values.  
+    * These <code>char</code> values
+    * are encoded in the stream using either a one, two, or three byte format.
+    * The particular format in use can be determined by examining the first
+    * byte read.  
+    * <p>
+    * If the first byte has a high order bit of 0 then
+    * that character consists on only one byte.  This character value consists
+    * of seven bits that are at positions 0 through 6 of the byte.  As an
+    * example, if <code>byte1</code> is the byte read from the stream, it would
+    * be converted to a <code>char</code> like so:
+    * <p>
+    * <code>(char)byte1</code>
+    * <p>
+    * If the first byte has <code>110</code> as its high order bits, then the 
+    * character consists of two bytes.  The bits that make up the character
+    * value are in positions 0 through 4 of the first byte and bit positions
+    * 0 through 5 of the second byte.  (The second byte should have 
+    * 10 as its high order bits).  These values are in most significant
+    * byte first (i.e., "big endian") order.
+    * <p>
+    * As an example, if <code>byte1</code> and <code>byte2</code> 
+    * are the first two bytes
+    * read respectively, and the high order bits of them match the patterns
+    * which indicate a two byte character encoding, then they would be
+    * converted to a Java <code>char</code> like so:
+    * <p>
+    * <code>(char)(((byte1 & 0x1F) << 6) | (byte2 & 0x3F))</code>
+    * <p>
+    * If the first byte has a <code>1110</code> as its high order bits, then the
+    * character consists of three bytes.  The bits that make up the character
+    * value are in positions 0 through 3 of the first byte and bit positions
+    * 0 through 5 of the other two bytes.  (The second and third bytes should
+    * have <code>10</code> as their high order bits).  These values are in most
+    * significant byte first (i.e., "big endian") order.
+    * <p>
+    * As an example, if <code>byte1</code> <code>byte2</code> 
+    * and <code>byte3</code> are the
+    * three bytes read, and the high order bits of them match the patterns
+    * which indicate a three byte character encoding, then they would be
+    * converted to a Java <code>char</code> like so:
+    * <p>
+    * <code>(char)(((byte1 & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | 
+    * (byte3 & 0x3F))</code>
+    * <p>
+    * Note that all characters are encoded in the method that requires the
+    * fewest number of bytes with the exception of the character with the
+    * value of <code>&#92;u0000</code> which is encoded as two bytes.  This is 
+    * a  modification of the UTF standard used to prevent C language style
+    * <code>NUL</code> values from appearing in the byte stream.
+    * <p>
+    * This method can read data that was written by an object implementing the
+    * <code>writeUTF()</code> method in <code>DataOutput</code>
+    * 
+    * @return The <code>String</code> read
+    *
+    * @exception EOFException If end of file is reached before reading the 
+    * String
+    * @exception UTFDataFormatException If the data is not in UTF-8 format
+    * @exception IOException If any other error occurs
+    *
+    * @see DataOutput
+    */
+   public final String readUTF () throws IOException
+   {
+     return in.readUTF();
+   }
+ 
+   /**
+    * This method sets the current file position to the specified offset 
+    * from the beginning of the file.  Note that some operating systems will
+    * allow the file pointer to be set past the current end of the file.
+    *
+    * @param pos The offset from the beginning of the file at which to set 
+    * the file pointer
+    *
+    * @exception IOException If an error occurs
+    */
+   public void seek (long pos) throws IOException
+   {
+     ch.position(pos);
+   }
+ 
+   /**
+    * This method attempts to skip and discard the specified number of bytes 
+    * in the input stream.  It may actually skip fewer bytes than requested. 
+    * The actual number of bytes skipped is returned.  This method will not
+    * skip any bytes if passed a negative number of bytes to skip.
+    *
+    * @param numBytes The requested number of bytes to skip.
+    *
+    * @return The number of bytes actually skipped.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public int skipBytes (int numBytes) throws IOException
+   {
+     if (numBytes < 0)
+       throw new IllegalArgumentException ("Can't skip negative bytes: " +
+                                           numBytes);
+     
+     if (numBytes == 0)
+       return 0;
+     
+     long oldPos = ch.position();
+     long newPos = oldPos + numBytes;
+     long size = ch.size();
+     if (newPos > size)
+       newPos = size;
+     ch.position(newPos);
+     return (int) (ch.position() - oldPos);
+   }
+ 
+   /**
+    * This method writes a single byte of data to the file. The file must
+    * be open for read-write in order for this operation to succeed.
+    *
+    * @param oneByte The byte of data to write, passed as an int.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (int oneByte) throws IOException
+   {
+     out.write(oneByte);
+   }
+ 
+   /**
+    * This method writes all the bytes in the specified array to the file.
+    * The file must be open read-write in order for this operation to succeed.
+    *
+    * @param buffer The array of bytes to write to the file
+    */
+   public void write (byte[] buffer) throws IOException
+   {
+     out.write(buffer);
+   }
+ 
+   /**
+    * This method writes <code>len</code> bytes to the file from the specified
+    * array starting at index <code>offset</code> into the array.
+    *
+    * @param buffer The array of bytes to write to the file
+    * @param offset The index into the array to start writing file
+    * @param len The number of bytes to write
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write (byte[] buffer, int offset, int len) throws IOException
+   {
+     out.write (buffer, offset, len);
+   }
+ 
+   /**
+    * This method writes a Java <code>boolean</code> to the underlying output 
+    * stream. For a value of <code>true</code>, 1 is written to the stream.
+    * For a value of <code>false</code>, 0 is written.
+    *
+    * @param val The <code>boolean</code> value to write to the stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeBoolean (boolean val) throws IOException
+   {
+     out.writeBoolean(val);
+   }
+ 
+   /**
+    * This method writes a Java <code>byte</code> value to the underlying
+    * output stream.
+    *
+    * @param val The <code>byte</code> to write to the stream, passed 
+    * as an <code>int</code>.
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeByte (int val) throws IOException
+   {
+     out.writeByte(val);
+   }
+ 
+   /**
+    * This method writes a Java <code>short</code> to the stream, high byte
+    * first.  This method requires two bytes to encode the value.
+    *
+    * @param val The <code>short</code> value to write to the stream, 
+    * passed as an <code>int</code>.
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeShort (int val) throws IOException
+   {
+     out.writeShort(val);
+   }
+ 
+   /**
+    * This method writes a single <code>char</code> value to the stream,
+    * high byte first.
+    *
+    * @param val The <code>char</code> value to write, passed as 
+    * an <code>int</code>.
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeChar (int val) throws IOException
+   {
+     out.writeChar(val);
+   }
+ 
+   /**
+    * This method writes a Java <code>int</code> to the stream, high bytes
+    * first.  This method requires four bytes to encode the value.
+    *
+    * @param val The <code>int</code> value to write to the stream.
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeInt (int val) throws IOException
+   {
+     out.writeInt(val);
+   }
+ 
+   /**
+    * This method writes a Java <code>long</code> to the stream, high bytes
+    * first.  This method requires eight bytes to encode the value.
+    *
+    * @param val The <code>long</code> value to write to the stream.
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeLong (long val) throws IOException
+   {
+     out.writeLong(val);
+   }
+ 
+   /**
+    * This method writes a Java <code>float</code> value to the stream.  This
+    * value is written by first calling the method 
+    * <code>Float.floatToIntBits</code>
+    * to retrieve an <code>int</code> representing the floating point number,
+    * then writing this <code>int</code> value to the stream exactly the same
+    * as the <code>writeInt()</code> method does.
+    *
+    * @param val The floating point number to write to the stream.
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see #writeInt(int)
+    */
+   public final void writeFloat (float val) throws IOException
+   {
+     out.writeFloat(val);
+   }
+ 
+   /**
+    * This method writes a Java <code>double</code> value to the stream.  This
+    * value is written by first calling the method 
+    * <code>Double.doubleToLongBits</code>
+    * to retrieve an <code>long</code> representing the floating point number,
+    * then writing this <code>long</code> value to the stream exactly the same
+    * as the <code>writeLong()</code> method does.
+    *
+    * @param val The double precision floating point number to write to the 
+    * stream.
+    *
+    * @exception IOException If an error occurs
+    *
+    * @see #writeLong(long)
+    */
+   public final void writeDouble (double val) throws IOException
+   {
+     out.writeDouble(val);
+   }
+ 
+   /**
+    * This method writes all the bytes in a <code>String</code> out to the
+    * stream.  One byte is written for each character in the <code>String</code>.
+    * The high eight bits of each character are discarded.
+    *
+    * @param val The <code>String</code> to write to the stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeBytes (String val) throws IOException
+   {
+     out.writeBytes(val);
+   }
+   
+   /**
+    * This method writes all the characters in a <code>String</code> to the
+    * stream.  There will be two bytes for each character value.  The high
+    * byte of the character will be written first.
+    *
+    * @param val The <code>String</code> to write to the stream.
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeChars (String val) throws IOException
+   {
+     out.writeChars(val);
+   }
+   
+   /**
+    * This method writes a Java <code>String</code> to the stream in a modified
+    * UTF-8 format.  First, two bytes are written to the stream indicating the
+    * number of bytes to follow.  Note that this is the number of bytes in the
+    * encoded <code>String</code> not the <code>String</code> length.  Next
+    * come the encoded characters.  Each character in the <code>String</code>
+    * is encoded as either one, two or three bytes.  For characters in the
+    * range of <code>&#92;u0001</code> to <code>&#92;u007F</code>, 
+    * one byte is used.  The character
+    * value goes into bits 0-7 and bit eight is 0.  For characters in the range
+    * of <code>&#92;u0080</code> to <code>&#92;u007FF</code>, two 
+    * bytes are used.  Bits
+    * 6-10 of the character value are encoded bits 0-4 of the first byte, with
+    * the high bytes having a value of "110".  Bits 0-5 of the character value
+    * are stored in bits 0-5 of the second byte, with the high bits set to
+    * "10".  This type of encoding is also done for the null character
+    * <code>&#92;u0000</code>.  This eliminates any C style NUL character values
+    * in the output.  All remaining characters are stored as three bytes.
+    * Bits 12-15 of the character value are stored in bits 0-3 of the first
+    * byte.  The high bits of the first bytes are set to "1110".  Bits 6-11
+    * of the character value are stored in bits 0-5 of the second byte.  The
+    * high bits of the second byte are set to "10".  And bits 0-5 of the
+    * character value are stored in bits 0-5 of byte three, with the high bits
+    * of that byte set to "10".
+    *
+    * @param val The <code>String</code> to write to the output in UTF format
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void writeUTF (String val) throws IOException
+   {
+     out.writeUTF(val);
+   }
+   
+   /**
+    * This method creates a java.nio.channels.FileChannel.
+    * Nio does not allow one to create a file channel directly.
+    * A file channel must be created by first creating an instance of
+    * Input/Output/RandomAccessFile and invoking the getChannel() method on it.
+    */
+   public final synchronized FileChannel getChannel ()
+   {
+     return ch;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/Reader.java gcc-4.1.0/libjava/classpath/java/io/Reader.java
*** gcc-4.0.2/libjava/classpath/java/io/Reader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/Reader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,271 ----
+ /* Reader.java -- base class of classes that read input as a stream of chars
+    Copyright (C) 1998, 1999, 2000, 2003  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+  
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * This abstract class forms the base of the hierarchy of classes that read
+  * input as a stream of characters.  It provides a common set of methods for
+  * reading characters from streams.  Subclasses implement and extend these
+  * methods to read characters from a particular input source such as a file
+  * or network connection.
+  *
+  * @author Per Bothner (bothner@cygnus.com)
+  * @date April 21, 1998.  
+  * @author Aaron M. Renn (arenn@urbanophile.com) 
+  */
+ public abstract class Reader
+ {
+   /**
+    * This is the <code>Object</code> used for synchronizing critical code
+    * sections.  Subclasses should use this variable instead of a 
+    * synchronized method or an explicit synchronization on <code>this</code>
+    */
+   protected Object lock;
+   
+   /**
+     * Unitializes a <code>Reader</code> that will use the object
+     * itself for synchronization of critical code sections.
+     */
+   protected Reader()
+   {
+     this.lock = this;
+   }
+ 
+   /**
+     * Initializes a <code>Reader</code> that will use the specified
+     * <code>Object</code> for synchronization of critical code sections.
+     *
+     * @param lock The <code>Object</code> to use for synchronization
+     */
+   protected Reader(Object lock)
+   {
+     this.lock = lock;
+   }
+ 
+   /**
+    * Read chars from a stream and stores them into a caller
+    * supplied buffer.  It starts storing the data at index <code>offset</code> 
+    * into the buffer and attempts to read <code>len</code> chars.  This method 
+    * can return before reading the number of chars requested.  The actual 
+    * number of chars read is returned as an int.  A -1 is returned to indicate 
+    * the end of the stream.
+    * <p>
+    * This method will block until some data can be read.
+    * <p>
+    * This method operates by calling the single char <code>read()</code> method
+    * in a loop until the desired number of chars are read.  The read loop
+    * stops short if the end of the stream is encountered or if an IOException
+    * is encountered on any read operation except the first.  If the first
+    * attempt to read a chars fails, the IOException is allowed to propagate
+    * upward.  And subsequent IOException is caught and treated identically
+    * to an end of stream condition.  Subclasses can (and should if possible)
+    * override this method to provide a more efficient implementation.
+    *
+    * @param buf The array into which the chars read should be stored
+    * @param offset The offset into the array to start storing chars
+    * @param count The requested number of chars to read
+    *
+    * @return The actual number of chars read, or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public abstract int read(char buf[], int offset, int count)
+     throws IOException;
+     
+   /**
+    * Reads chars from a stream and stores them into a caller
+    * supplied buffer.  This method attempts to completely fill the buffer,
+    * but can return before doing so.  The actual number of chars read is
+    * returned as an int.  A -1 is returned to indicate the end of the stream.
+    * <p>
+    * This method will block until some data can be read.
+    * <p>
+    * This method operates by calling an overloaded read method like so:
+    * <code>read(buf, 0, buf.length)</code>
+    *
+    * @param buf The buffer into which the chars read will be stored.
+    *
+    * @return The number of chars read or -1 if end of stream.
+    *
+    * @exception IOException If an error occurs.
+    */
+   public int read(char buf[]) throws IOException
+   {
+     return read(buf, 0, buf.length);
+   }
+ 
+   /**
+    * Reads an char from the input stream and returns it
+    * as an int in the range of 0-65535.  This method also will return -1 if
+    * the end of the stream has been reached.
+    * <p>
+    * This method will block until the char can be read.
+    *
+    * @return The char read or -1 if end of stream
+    *
+    * @exception IOException If an error occurs
+    */
+   public int read() throws IOException
+   {
+     char[] buf = new char[1];
+     int count = read(buf, 0, 1);
+     return count > 0 ? buf[0] : -1;
+   }
+ 
+   /**
+    * Closes the stream.  Any futher attempts to read from the
+    * stream may generate an <code>IOException</code>.
+    *
+    * @exception IOException If an error occurs
+    */
+   public abstract void close() throws IOException;
+ 
+   /**
+    * Returns a boolean that indicates whether the mark/reset
+    * methods are supported in this class.  Those methods can be used to
+    * remember a specific point in the stream and reset the stream to that
+    * point.
+    * <p>
+    * This method always returns <code>false</code> in this class, but
+    * subclasses can override this method to return <code>true</code> if they 
+    * support mark/reset functionality.
+    *
+    * @return <code>true</code> if mark/reset functionality is supported, 
+    *         <code>false</code> otherwise
+    *
+    */
+   public boolean markSupported()
+   {
+     return false;
+   }
+ 
+   /**
+     * Marks a position in the input to which the stream can be
+     * "reset" by calling the <code>reset()</code> method.  The parameter
+     * <code>readlimit</code> is the number of chars that can be read from the 
+     * stream after setting the mark before the mark becomes invalid.  For
+     * example, if <code>mark()</code> is called with a read limit of 10, then 
+     * when 11 chars of data are read from the stream before the 
+     * <code>reset()</code> method is called, then the mark is invalid and the 
+     * stream object instance is not required to remember the mark.
+     *
+     * @param readLimit The number of chars that can be read before the mark 
+     *        becomes invalid
+     *
+     * @exception IOException If an error occurs such as mark not being 
+     *            supported for this class
+     */
+   public void mark(int readLimit) throws IOException
+   {
+     throw new IOException("mark not supported");
+   }
+ 
+   /**
+     * Resets a stream to the point where the <code>mark()</code> 
+     * method was called.  Any chars that were read after the mark point was 
+     * set will be re-read during subsequent reads.
+     * <p>
+     * This method always throws an IOException in this class, but subclasses
+     * can override this method if they provide mark/reset functionality.
+     *
+     * @exception IOException Always thrown for this class
+     */
+   public void reset() throws IOException
+   {
+     throw new IOException("reset not supported");
+   }
+ 
+   /**
+     * Determines whether or not this stream is ready to be
+     * read.  If it returns <code>false</code> the stream may block if a
+     * read is attempted, but it is not guaranteed to do so.
+     * <p>
+     * This method always returns <code>false</code> in this class
+     *
+     * @return <code>true</code> if the stream is ready to be read, 
+     * <code>false</code> otherwise.
+     *
+     * @exception IOException If an error occurs
+     */
+   public boolean ready() throws IOException
+   {
+     return false;
+   }
+ 
+   /**
+     * Skips the specified number of chars in the stream.  It
+     * returns the actual number of chars skipped, which may be less than the
+     * requested amount.
+     * <p>
+     * This method reads and discards chars into a 256 char array until the
+     * specified number of chars were skipped or until either the end of stream
+     * is reached or a read attempt returns a short count.  Subclasses can
+     * override this method to provide a more efficient implementation where
+     * one exists.
+     *
+     * @param count The requested number of chars to skip
+     *
+     * @return The actual number of chars skipped.
+     *
+     * @exception IOException If an error occurs
+     */
+   public long skip(long count) throws IOException
+   {
+     if (count <= 0)
+       return 0;
+     int bsize = count > 1024 ? 1024 : (int) count;
+     char[] buffer = new char[bsize];
+     long todo = count;
+     synchronized (lock)
+     {
+       while (todo > 0)
+ 	{
+ 	  int skipped = read(buffer, 0, bsize > todo ? (int) todo : bsize);
+ 	  if (skipped <= 0)
+ 	    break;
+ 	  todo -= skipped;
+ 	}
+     }
+     return count - todo;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/SequenceInputStream.java gcc-4.1.0/libjava/classpath/java/io/SequenceInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/SequenceInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/SequenceInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,221 ----
+ /* SequenceInputStream.java -- Reads multiple input streams in sequence
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import java.util.Enumeration;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+  
+ /**
+   * This class merges a sequence of multiple <code>InputStream</code>'s in
+   * order to form a single logical stream that can be read by applications
+   * that expect only one stream.
+   * <p>
+   * The streams passed to the constructor method are read in order until
+   * they return -1 to indicate they are at end of stream.  When a stream
+   * reports end of stream, it is closed, then the next stream is read.
+   * When the last stream is closed, the next attempt to read from this
+   * stream will return a -1 to indicate it is at end of stream.
+   * <p>
+   * If this stream is closed prior to all subordinate streams being read
+   * to completion, all subordinate streams are closed.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public class SequenceInputStream extends InputStream
+ {
+   /** The handle for the current input stream. */
+   private InputStream in;
+ 
+   /** Secondary input stream; not used if constructed w/ enumeration. */
+   private InputStream in2;
+ 
+   /** The enumeration handle; not used if constructed w/ 2 explicit input streams. */
+   private Enumeration e;
+ 
+  /**
+   * This method creates a new <code>SequenceInputStream</code> that obtains
+   * its list of subordinate <code>InputStream</code>s from the specified
+   * <code>Enumeration</code>
+   *
+   * @param e An <code>Enumeration</code> that will return a list of
+   * <code>InputStream</code>s to read in sequence
+   */
+   public SequenceInputStream(Enumeration e)
+   {
+     this.e = e;
+     in = (InputStream) e.nextElement();
+     in2 = null;
+   }
+ 
+  /**
+   * This method creates a new <code>SequenceInputStream</code> that will read
+   * the two specified subordinate <code>InputStream</code>s in sequence.
+   *
+   * @param s1 The first <code>InputStream</code> to read
+   * @param s2 The second <code>InputStream</code> to read
+   */
+   public SequenceInputStream(InputStream s1, InputStream s2)
+   {
+     in = s1;
+     in2 = s2;
+   }
+ 
+  /**
+   * This method returns the number of bytes than can be read from the
+   * currently being read subordinate stream before that stream could
+   * block.  Note that it is possible more bytes than this can actually
+   * be read without the stream blocking.  If a 0 is returned, then the
+   * stream could block on the very next read.
+   *
+   * @return The number of bytes that can be read before blocking could occur
+   *
+   * @exception IOException If an error occurs
+   */
+   public int available() throws IOException
+   {
+     if (in == null)
+       return 0;
+ 
+     return in.available();
+   }
+ 
+  /**
+   * Closes this stream.  This will cause any remaining unclosed subordinate
+   * <code>InputStream</code>'s to be closed as well.  Subsequent attempts to 
+   * read from this stream may cause an exception.
+   *
+   * @exception IOException If an error occurs
+   */
+   public void close() throws IOException
+   {
+     while (in != null)
+       {
+ 	in.close();
+ 	in = getNextStream ();
+       }
+   }
+ 
+  /**
+   * This method reads an unsigned byte from the input stream and returns it
+   * as an int in the range of 0-255.  This method also will return -1 if
+   * the end of the stream has been reached.  This will only happen when
+   * all of the subordinate streams have been read.
+   * <p>
+   * This method will block until the byte can be read.
+   *
+   * @return The byte read, or -1 if end of stream
+   *
+   * @exception IOException If an error occurs
+   */
+   public int read() throws IOException
+   {
+     int ch = -1;
+ 
+     while (in != null && (ch = in.read()) < 0)
+       {
+ 	in.close();
+         in = getNextStream();
+       }
+ 
+     return ch;
+   }
+ 
+  /**
+   * This method reads bytes from a stream and stores them into a caller
+   * supplied buffer.  It starts storing the data at index <code>offset</code>
+   * into the buffer and attempts to read <code>len</code> bytes. This method
+   * can return before reading the number of bytes requested. The actual number
+   * of bytes read is returned as an int. A -1 is returend to indicate the
+   * end of the stream. This will only happen when all of the subordinate
+   * streams have been read.
+   * <p>
+   * This method will block until at least one byte can be read.
+   *
+   * @param b The array into which bytes read should be stored
+   * @param off The offset into the array to start storing bytes
+   * @param len The requested number of bytes to read
+   *
+   * @return The actual number of bytes read, or -1 if end of stream
+   *
+   * @exception IOException If an error occurs
+   */
+   public int read(byte[] b, int off, int len) throws IOException
+   {
+     int ch = -1;
+ 
+     // The validity of the parameters will be checked by in.read so
+     // don't bother doing it here.
+     while (in != null && (ch = in.read(b, off, len)) < 0)
+       {
+ 	in.close();
+         in = getNextStream();
+       }
+ 
+     return ch;
+   }
+ 
+  /**
+   * This private method is used to get the next <code>InputStream</code> to
+   * read from. Returns null when no more streams are available.
+   */
+   private InputStream getNextStream()
+   {
+     InputStream nextIn = null;
+ 
+     if (e != null)
+       {
+         if (e.hasMoreElements())
+ 	  nextIn = (InputStream) e.nextElement();
+       }
+     else
+       if (in2 != null)
+ 	{
+ 	  nextIn = in2;
+ 	  in2 = null;
+ 	}
+ 
+     return nextIn;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/Serializable.java gcc-4.1.0/libjava/classpath/java/io/Serializable.java
*** gcc-4.0.2/libjava/classpath/java/io/Serializable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/Serializable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* Serializable.java -- Interface to indicate a class may be serialized
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * Status:  Believed complete
+  */
+ 
+ /**
+   * This interface has no methods. It simply serves to indicate that
+   * the implementing class may be serialized.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public interface Serializable
+ {
+ } // interface Serializable
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/SerializablePermission.java gcc-4.1.0/libjava/classpath/java/io/SerializablePermission.java
*** gcc-4.0.2/libjava/classpath/java/io/SerializablePermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/SerializablePermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* SerializablePermission.java -- Basic permissions related to serialization.
+    Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ import java.security.BasicPermission;
+ 
+ /**
+   * This class models permissions related to serialization.  As a subclass
+   * of <code>BasicPermission</code>, this class has permissions that have
+   * a name only.  There is no associated action list.
+   * <p>
+   * There are currently two allowable permission names for this class:
+   * <ul>
+   * <li><code>enableSubclassImplementation</code> - Allows a subclass to
+   * override the default serialization behavior of objects.</li>
+   * <li><code>enableSubstitution</code> - Allows substitution of one object
+   * for another during serialization or deserialization.</li>
+   * </ul>
+   *
+   * @see java.security.BasicPermission
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public final class SerializablePermission extends BasicPermission
+ {
+   static final long serialVersionUID = 8537212141160296410L;
+ 	
+   /*
+    * Class Variables
+    */
+ 
+   private static final String[] legal_names = { "enableSubclassImplementation",
+   					      "enableSubstitution" };
+   /*
+    * Constructors
+    */
+ 
+   /**
+     * This method initializes a new instance of 
+     * <code>SerializablePermission</code>
+     * that has the specified name.
+     *
+     * @param name The name of the permission.
+     *
+     * @exception IllegalArgumentException If the name is not valid for
+     * this class.
+     */
+   public SerializablePermission(String name)
+   {
+     this(name, null);
+   }
+ 
+   /**
+     * This method initializes a new instance of 
+     * <code>SerializablePermission</code>
+     * that has the specified name and action list.  Note that the action list
+     * is unused in this class.
+     *
+     * @param name The name of the permission.
+     * @param actions The action list (unused).
+     *
+     * @exception IllegalArgumentException If the name is not valid for 
+     * this class.
+     */
+   public SerializablePermission(String name, String actions)
+   {
+     super(name, actions);
+ 
+     for (int i = 0; i < legal_names.length; i++)
+       if (legal_names[i].equals(name))
+         return;
+ 
+     throw new IllegalArgumentException("Bad permission name:  " + name);
+   }
+ 
+ } // class SerializablePermission
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/StreamCorruptedException.java gcc-4.1.0/libjava/classpath/java/io/StreamCorruptedException.java
*** gcc-4.0.2/libjava/classpath/java/io/StreamCorruptedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/StreamCorruptedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* StreamCorruptedException.java -- Error in stream during serialization
+    Copyright (C) 1998, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when there is an error in the data that is
+  * read from a stream during de-serialization.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class StreamCorruptedException extends ObjectStreamException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 8983558202217591746L;
+ 
+   /**
+    * Create an exception without a descriptive error message.
+    */
+   public StreamCorruptedException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public StreamCorruptedException(String message)
+   {
+     super(message);
+   }
+ } // class StreamCorruptedException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/StreamTokenizer.java gcc-4.1.0/libjava/classpath/java/io/StreamTokenizer.java
*** gcc-4.0.2/libjava/classpath/java/io/StreamTokenizer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/StreamTokenizer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,708 ----
+ /* StreamTokenizer.java -- parses streams of characters into tokens
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ /**
+  * This class parses streams of characters into tokens.  There are a
+  * million-zillion flags that can be set to control the parsing, as 
+  * described under the various method headings.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @date October 25, 1998.  
+  */
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+  
+ public class StreamTokenizer
+ {
+   /** A constant indicating that the end of the stream has been read. */
+   public static final int TT_EOF = -1;
+ 
+   /** A constant indicating that the end of the line has been read. */
+   public static final int TT_EOL = '\n';
+ 
+   /** A constant indicating that a number token has been read. */
+   public static final int TT_NUMBER = -2;
+ 
+   /** A constant indicating that a word token has been read. */
+   public static final int TT_WORD = -3;
+ 
+   /** A constant indicating that no tokens have been read yet. */
+   private static final int TT_NONE = -4;
+ 
+   /**
+    * Contains the type of the token read resulting from a call to nextToken
+    * The rules are as follows:
+    * <ul>
+    * <li>For a token consisting of a single ordinary character, this is the 
+    *     value of that character.</li>
+    * <li>For a quoted string, this is the value of the quote character</li>
+    * <li>For a word, this is TT_WORD</li>
+    * <li>For a number, this is TT_NUMBER</li>
+    * <li>For the end of the line, this is TT_EOL</li>
+    * <li>For the end of the stream, this is TT_EOF</li>
+    * </ul>
+    */
+   public int ttype = TT_NONE;
+ 
+   /** The String associated with word and string tokens. */
+   public String sval;
+ 
+   /** The numeric value associated with number tokens. */
+   public double nval;
+ 
+   /* Indicates whether end-of-line is recognized as a token. */
+   private boolean eolSignificant = false;
+ 
+   /* Indicates whether word tokens are automatically made lower case. */
+   private boolean lowerCase = false;
+ 
+   /* Indicates whether C++ style comments are recognized and skipped. */
+   private boolean slashSlash = false;
+ 
+   /* Indicates whether C style comments are recognized and skipped. */
+   private boolean slashStar = false;
+ 
+   /* Attribute tables of each byte from 0x00 to 0xFF. */
+   private boolean[] whitespace = new boolean[256];
+   private boolean[] alphabetic = new boolean[256];
+   private boolean[] numeric = new boolean[256];
+   private boolean[] quote = new boolean[256];
+   private boolean[] comment = new boolean[256];
+ 
+   /* The Reader associated with this class. */
+   private PushbackReader in;
+ 
+   /* Indicates if a token has been pushed back. */
+   private boolean pushedBack = false;
+ 
+   /* Contains the current line number of the reader. */
+   private int lineNumber = 1;
+ 
+   /**
+    * This method reads bytes from an <code>InputStream</code> and tokenizes
+    * them.  For details on how this method operates by default, see
+    * <code>StreamTokenizer(Reader)</code>.
+    *
+    * @param is The <code>InputStream</code> to read from
+    *
+    * @deprecated Since JDK 1.1.
+    */
+   public StreamTokenizer(InputStream is)
+   {
+     this(new InputStreamReader(is));
+   }
+ 
+   /**
+    * This method initializes a new <code>StreamTokenizer</code> to read 
+    * characters from a <code>Reader</code> and parse them.  The char values
+    * have their hight bits masked so that the value is treated a character
+    * in the range of 0x0000 to 0x00FF.
+    * <p>
+    * This constructor sets up the parsing table to parse the stream in the
+    * following manner:
+    * <ul>
+    * <li>The values 'A' through 'Z', 'a' through 'z' and 0xA0 through 0xFF
+    *     are initialized as alphabetic</li>
+    * <li>The values 0x00 through 0x20 are initialized as whitespace</li>
+    * <li>The values '\'' and '"' are initialized as quote characters</li>
+    * <li>'/' is a comment character</li>
+    * <li>Numbers will be parsed</li>
+    * <li>EOL is not treated as significant</li>
+    * <li>C  and C++ (//) comments are not recognized</li>
+    * </ul>
+    *
+    * @param r The <code>Reader</code> to read chars from
+    */
+   public StreamTokenizer(Reader r)
+   {
+     in = new PushbackReader(r);
+ 
+     whitespaceChars(0x00, 0x20);
+     wordChars('A', 'Z');
+     wordChars('a', 'z');
+     wordChars(0xA0, 0xFF);
+     commentChar('/');
+     quoteChar('\'');
+     quoteChar('"');
+     parseNumbers();
+   }
+ 
+   /**
+    * This method sets the comment attribute on the specified
+    * character.  Other attributes for the character are cleared.
+    *
+    * @param ch The character to set the comment attribute for, passed as an int
+    */
+   public void commentChar(int ch)
+   {
+     if (ch >= 0 && ch <= 255)
+       {
+ 	comment[ch] = true;
+ 	whitespace[ch] = false;
+ 	alphabetic[ch] = false;
+ 	numeric[ch] = false;
+ 	quote[ch] = false;
+       }
+   }
+ 
+   /**
+    * This method sets a flag that indicates whether or not the end of line
+    * sequence terminates and is a token.  The defaults to <code>false</code>
+    *
+    * @param flag <code>true</code> if EOF is significant, <code>false</code>
+    *             otherwise
+    */
+   public void eolIsSignificant(boolean flag)
+   {
+     eolSignificant = flag;
+   }
+ 
+   /**
+    * This method returns the current line number.  Note that if the 
+    * <code>pushBack()</code> method is called, it has no effect on the
+    * line number returned by this method.
+    *
+    * @return The current line number
+    */
+   public int lineno()
+   {
+     return lineNumber;
+   }
+ 
+   /**
+    * This method sets a flag that indicates whether or not alphabetic
+    * tokens that are returned should be converted to lower case.
+    * 
+    * @param flag <code>true</code> to convert to lower case,
+    *             <code>false</code> otherwise
+    */
+   public void lowerCaseMode(boolean flag)
+   {
+     lowerCase = flag;
+   }
+ 
+   private boolean isWhitespace(int ch)
+   {
+     return (ch >= 0 && ch <= 255 && whitespace[ch]);
+   }
+ 
+   private boolean isAlphabetic(int ch)
+   {
+     return ((ch > 255) || (ch >= 0 && alphabetic[ch]));
+   }
+ 
+   private boolean isNumeric(int ch)
+   {
+     return (ch >= 0 && ch <= 255 && numeric[ch]);
+   }
+ 
+   private boolean isQuote(int ch)
+   {
+     return (ch >= 0 && ch <= 255 && quote[ch]);
+   }
+ 
+   private boolean isComment(int ch)
+   {
+     return (ch >= 0 && ch <= 255 && comment[ch]);
+   }
+ 
+   /**
+    * This method reads the next token from the stream.  It sets the 
+    * <code>ttype</code> variable to the appropriate token type and 
+    * returns it.  It also can set <code>sval</code> or <code>nval</code>
+    * as described below.  The parsing strategy is as follows:
+    * <ul>
+    * <li>Skip any whitespace characters.</li>
+    * <li>If a numeric character is encountered, attempt to parse a numeric
+    * value.  Leading '-' characters indicate a numeric only if followed by
+    * another non-'-' numeric.  The value of the numeric token is terminated
+    * by either the first non-numeric encountered, or the second occurrence of
+    * '-' or '.'.  The token type returned is TT_NUMBER and <code>nval</code>
+    * is set to the value parsed.</li>
+    * <li>If an alphabetic character is parsed, all subsequent characters
+    * are read until the first non-alphabetic or non-numeric character is
+    * encountered.  The token type returned is TT_WORD and the value parsed
+    * is stored in <code>sval</code>.  If lower case mode is set, the token
+    * stored in <code>sval</code> is converted to lower case.  The end of line
+    * sequence terminates a word only if EOL signficance has been turned on.
+    * The start of a comment also terminates a word.  Any character with a 
+    * non-alphabetic and non-numeric attribute (such as white space, a quote,
+    * or a commet) are treated as non-alphabetic and terminate the word.</li>
+    * <li>If a comment character is parsed, then all remaining characters on
+    * the current line are skipped and another token is parsed.  Any EOL or
+    * EOF's encountered are not discarded, but rather terminate the comment.</li>
+    * <li>If a quote character is parsed, then all characters up to the 
+    * second occurrence of the same quote character are parsed into a
+    * <code>String</code>.  This <code>String</code> is stored as
+    * <code>sval</code>, but is not converted to lower case, even if lower case
+    * mode is enabled.  The token type returned is the value of the quote
+    * character encountered.  Any escape sequences
+    * (\b (backspace), \t (HTAB), \n (linefeed), \f (form feed), \r
+    * (carriage return), \" (double quote), \' (single quote), \\
+    * (backslash), \XXX (octal esacpe)) are converted to the appropriate
+    * char values.  Invalid esacape sequences are left in untranslated.  
+    * Unicode characters like ('\ u0000') are not recognized. </li>
+    * <li>If the C++ comment sequence "//" is encountered, and the parser
+    * is configured to handle that sequence, then the remainder of the line
+    * is skipped and another token is read exactly as if a character with
+    * the comment attribute was encountered.</li>
+    * <li>If the C comment sequence "/*" is encountered, and the parser
+    * is configured to handle that sequence, then all characters up to and
+    * including the comment terminator sequence are discarded and another
+    * token is parsed.</li>
+    * <li>If all cases above are not met, then the character is an ordinary
+    * character that is parsed as a token by itself.  The char encountered
+    * is returned as the token type.</li>
+    * </ul>
+    *
+    * @return The token type
+    * @exception IOException If an I/O error occurs
+    */
+   public int nextToken() throws IOException
+   {
+     if (pushedBack)
+       {
+ 	pushedBack = false;
+ 	if (ttype != TT_NONE)
+ 	  return ttype;
+       }
+ 
+     sval = null;
+     int ch;
+ 
+     // Skip whitespace.  Deal with EOL along the way.
+     while (isWhitespace(ch = in.read()))
+       if (ch == '\n' || ch == '\r')
+ 	{
+ 	  lineNumber++;
+ 
+ 	  // Throw away \n if in combination with \r.
+ 	  if (ch == '\r' && (ch = in.read()) != '\n')
+ 	    {
+ 	      if (ch != TT_EOF)
+ 		in.unread(ch);
+ 	    }
+ 	  if (eolSignificant)
+ 	    return (ttype = TT_EOL);
+ 	}
+ 
+     if (ch == '/')
+       if ((ch = in.read()) == '/' && slashSlash)
+ 	{
+ 	  while ((ch = in.read()) != '\n' && ch != '\r' && ch != TT_EOF)
+ 	    ;
+ 	  if (ch != TT_EOF)
+ 	    in.unread(ch);
+ 	  return nextToken(); // Recursive, but not too deep in normal cases
+ 	}
+       else if (ch == '*' && slashStar) 
+ 	{
+ 	  while (true)
+ 	    {
+ 	      ch = in.read();
+ 	      if (ch == '*')
+ 		{
+ 		  if ((ch = in.read()) == '/')
+ 		    break;
+ 		  else if (ch != TT_EOF)
+ 		    in.unread(ch);
+ 		}
+ 	      else if (ch == '\n' || ch == '\r')
+ 		{
+ 		  lineNumber++;
+ 		  if (ch == '\r' && (ch = in.read()) != '\n')
+ 		    {
+ 		      if (ch != TT_EOF)
+ 			in.unread(ch);
+ 		    }
+ 		}
+ 	      else if (ch == TT_EOF)
+ 		{
+ 		  break;
+ 		}
+ 	    }
+ 	  return nextToken(); // Recursive, but not too deep in normal cases
+ 	}
+       else
+ 	{
+ 	  if (ch != TT_EOF)
+ 	    in.unread(ch);
+ 	  ch = '/';
+ 	}
+ 
+     if (ch == TT_EOF)
+       ttype = TT_EOF;
+     else if (isNumeric(ch))
+       {
+ 	boolean isNegative = false;
+ 	if (ch == '-')
+ 	  {
+ 	    // Read ahead to see if this is an ordinary '-' rather than numeric.
+ 	    ch = in.read();
+ 	    if (isNumeric(ch) && ch != '-')
+ 	      {
+ 		isNegative = true;
+ 	      }
+ 	    else
+ 	      {
+ 		if (ch != TT_EOF)
+ 		  in.unread(ch);
+ 		return (ttype = '-');
+ 	      }
+ 	  }
+ 
+ 	StringBuffer tokbuf = new StringBuffer();
+ 	tokbuf.append((char) ch);
+ 
+ 	int decCount = 0;
+ 	while (isNumeric(ch = in.read()) && ch != '-')
+ 	  if (ch == '.' && decCount++ > 0)
+ 	    break;
+ 	  else
+ 	    tokbuf.append((char) ch);
+ 
+ 	if (ch != TT_EOF)
+ 	  in.unread(ch);
+ 	ttype = TT_NUMBER;
+ 	try
+ 	  {
+ 	    nval = Double.valueOf(tokbuf.toString()).doubleValue();
+ 	  }
+ 	catch (NumberFormatException _)
+ 	  {
+ 	    nval = 0.0;
+ 	  }
+ 	if (isNegative)
+ 	  nval = -nval;
+       }
+     else if (isAlphabetic(ch))
+       {
+ 	StringBuffer tokbuf = new StringBuffer();
+ 	tokbuf.append((char) ch);
+ 	while (isAlphabetic(ch = in.read()) || isNumeric(ch))
+ 	  tokbuf.append((char) ch);
+ 	if (ch != TT_EOF)
+ 	  in.unread(ch);
+ 	ttype = TT_WORD;
+ 	sval = tokbuf.toString();
+ 	if (lowerCase)
+ 	  sval = sval.toLowerCase();
+       }
+     else if (isComment(ch))
+       {
+ 	while ((ch = in.read()) != '\n' && ch != '\r' && ch != TT_EOF)
+ 	  ;
+ 	if (ch != TT_EOF)
+ 	  in.unread(ch);
+ 	return nextToken();	// Recursive, but not too deep in normal cases.
+       }
+     else if (isQuote(ch))
+       {
+ 	ttype = ch;
+ 	StringBuffer tokbuf = new StringBuffer();
+ 	while ((ch = in.read()) != ttype && ch != '\n' && ch != '\r' &&
+ 	       ch != TT_EOF)
+ 	  {
+ 	    if (ch == '\\')
+ 	      switch (ch = in.read())
+ 		{
+ 		  case 'a':	ch = 0x7;
+ 		    break;
+ 		  case 'b':	ch = '\b';
+ 		    break;
+ 		  case 'f':	ch = 0xC;
+ 		    break;
+ 		  case 'n':	ch = '\n';
+ 		    break;
+ 		  case 'r':	ch = '\r';
+ 		    break;
+ 		  case 't':	ch = '\t';
+ 		    break;
+ 		  case 'v':	ch = 0xB;
+ 		    break;
+ 		  case '\n':    ch = '\n';
+ 		    break;
+                   case '\r':    ch = '\r';
+ 		    break;
+ 		  case '\"':
+ 		  case '\'':
+ 		  case '\\':
+ 		    break;
+ 		  default:
+ 		    int ch1, nextch;
+ 		    if ((nextch = ch1 = ch) >= '0' && ch <= '7')
+ 		      {
+ 		        ch -= '0';
+ 		        if ((nextch = in.read()) >= '0' && nextch <= '7')
+ 			  {
+ 			    ch = ch * 8 + nextch - '0';
+ 			    if ((nextch = in.read()) >= '0' && nextch <= '7' &&
+ 				ch1 >= '0' && ch1 <= '3')
+ 			      {
+ 				ch = ch * 8 + nextch - '0';
+ 				nextch = in.read();
+ 			      }
+ 			  }
+ 		      }
+ 
+ 		    if (nextch != TT_EOF)
+ 		      in.unread(nextch);
+ 		}
+ 
+ 	    tokbuf.append((char) ch);
+ 	  }
+ 
+ 	// Throw away matching quote char.
+ 	if (ch != ttype && ch != TT_EOF)
+ 	  in.unread(ch);
+ 
+ 	sval = tokbuf.toString();
+       }
+     else
+       {
+ 	ttype = ch;
+       }
+ 
+     return ttype;
+   }
+ 
+   private void resetChar(int ch)
+   {
+     whitespace[ch] = alphabetic[ch] = numeric[ch] = quote[ch] = comment[ch] =
+       false;
+   }
+ 
+   /**
+    * This method makes the specified character an ordinary character.  This
+    * means that none of the attributes (whitespace, alphabetic, numeric,
+    * quote, or comment) will be set on this character.  This character will
+    * parse as its own token.
+    *
+    * @param ch The character to make ordinary, passed as an int
+    */
+   public void ordinaryChar(int ch)
+   {
+     if (ch >= 0 && ch <= 255)
+       resetChar(ch);
+   }
+ 
+   /**
+    * This method makes all the characters in the specified range, range
+    * terminators included, ordinary.  This means the none of the attributes
+    * (whitespace, alphabetic, numeric, quote, or comment) will be set on
+    * any of the characters in the range.  This makes each character in this
+    * range parse as its own token.
+    *
+    * @param low The low end of the range of values to set the whitespace
+    * attribute for
+    * @param hi The high end of the range of values to set the whitespace
+    * attribute for
+    */
+   public void ordinaryChars(int low, int hi)
+   {
+     if (low < 0)
+       low = 0;
+     if (hi > 255)
+       hi = 255;
+     for (int i = low; i <= hi; i++)
+       resetChar(i);
+   }
+ 
+   /**
+    * This method sets the numeric attribute on the characters '0' - '9' and
+    * the characters '.' and '-'.
+    */
+   public void parseNumbers()
+   {
+     for (int i = 0; i <= 9; i++)
+       numeric['0' + i] = true;
+ 
+     numeric['.'] = true;
+     numeric['-'] = true;
+   }
+ 
+   /**
+    * Puts the current token back into the StreamTokenizer so
+    * <code>nextToken</code> will return the same value on the next call.
+    * May cause the lineno method to return an incorrect value
+    * if lineno is called before the next call to nextToken.
+    */
+   public void pushBack()
+   {
+     pushedBack = true;
+   }
+ 
+   /**
+    * This method sets the quote attribute on the specified character.
+    * Other attributes for the character are cleared.
+    *
+    * @param ch The character to set the quote attribute for, passed as an int.
+    */
+   public void quoteChar(int ch)
+   {
+     if (ch >= 0 && ch <= 255)
+       {
+ 	quote[ch] = true;
+ 	comment[ch] = false;
+ 	whitespace[ch] = false;
+ 	alphabetic[ch] = false;
+ 	numeric[ch] = false;
+       }
+   }
+ 
+   /**
+    * This method removes all attributes (whitespace, alphabetic, numeric,
+    * quote, and comment) from all characters.  It is equivalent to calling
+    * <code>ordinaryChars(0x00, 0xFF)</code>.
+    *
+    * @see #ordinaryChars(int, int)
+    */
+   public void resetSyntax()
+   {
+     ordinaryChars(0x00, 0xFF);
+   }
+ 
+   /**
+    * This method sets a flag that indicates whether or not "C++" language style
+    * comments ("//" comments through EOL ) are handled by the parser.
+    * If this is <code>true</code> commented out sequences are skipped and
+    * ignored by the parser.  This defaults to <code>false</code>.
+    *
+    * @param flag <code>true</code> to recognized and handle "C++" style
+    *             comments, <code>false</code> otherwise
+    */
+   public void slashSlashComments(boolean flag)
+   {
+     slashSlash = flag;
+   }
+ 
+   /**
+    * This method sets a flag that indicates whether or not "C" language style
+    * comments (with nesting not allowed) are handled by the parser.
+    * If this is <code>true</code> commented out sequences are skipped and
+    * ignored by the parser.  This defaults to <code>false</code>.
+    *
+    * @param flag <code>true</code> to recognized and handle "C" style comments,
+    *             <code>false</code> otherwise
+    */
+   public void slashStarComments(boolean flag)
+   {
+     slashStar = flag;
+   }
+ 
+   /**
+    * This method returns the current token value as a <code>String</code> in
+    * the form "Token[x], line n", where 'n' is the current line numbers and
+    * 'x' is determined as follows.
+    * <p>
+    * <ul>
+    * <li>If no token has been read, then 'x' is "NOTHING" and 'n' is 0</li>
+    * <li>If <code>ttype</code> is TT_EOF, then 'x' is "EOF"</li>
+    * <li>If <code>ttype</code> is TT_EOL, then 'x' is "EOL"</li>
+    * <li>If <code>ttype</code> is TT_WORD, then 'x' is <code>sval</code></li>
+    * <li>If <code>ttype</code> is TT_NUMBER, then 'x' is "n=strnval" where
+    * 'strnval' is <code>String.valueOf(nval)</code>.</li>
+    * <li>If <code>ttype</code> is a quote character, then 'x' is
+    * <code>sval</code></li>
+    * <li>For all other cases, 'x' is <code>ttype</code></li>
+    * </ul>
+    */
+   public String toString()
+   {
+     String tempstr;
+     if (ttype == TT_EOF)
+       tempstr = "EOF";
+     else if (ttype == TT_EOL)
+       tempstr = "EOL";
+     else if (ttype == TT_WORD)
+       tempstr = sval;
+     else if (ttype == TT_NUMBER)
+       tempstr = "n=" + nval;
+     else if (ttype == TT_NONE)
+       tempstr = "NOTHING";
+     else // must be an ordinary char.
+       tempstr = "\'" + (char) ttype + "\'";
+ 
+     return "Token[" + tempstr + "], line " + lineno();
+   }
+ 
+   /**
+    * This method sets the whitespace attribute for all characters in the
+    * specified range, range terminators included.
+    *
+    * @param low The low end of the range of values to set the whitespace
+    * attribute for
+    * @param hi The high end of the range of values to set the whitespace
+    * attribute for
+    */
+   public void whitespaceChars(int low, int hi)
+   {
+     if (low < 0)
+       low = 0;
+     if (hi > 255)
+       hi = 255;
+     for (int i = low; i <= hi; i++)
+       {
+ 	resetChar(i);
+ 	whitespace[i] = true;
+       }
+   }
+ 
+   /**
+    * This method sets the alphabetic attribute for all characters in the
+    * specified range, range terminators included.
+    *
+    * @param low The low end of the range of values to set the alphabetic
+    * attribute for
+    * @param hi The high end of the range of values to set the alphabetic
+    * attribute for
+    */
+   public void wordChars(int low, int hi)
+   {
+     if (low < 0)
+       low = 0;
+     if (hi > 255)
+       hi = 255;
+     for (int i = low; i <= hi; i++)
+       alphabetic[i] = true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/StringBufferInputStream.java gcc-4.1.0/libjava/classpath/java/io/StringBufferInputStream.java
*** gcc-4.0.2/libjava/classpath/java/io/StringBufferInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/StringBufferInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,187 ----
+ /* StringBufferInputStream.java -- Read an String as a stream
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.  Deprecated in JDK 1.1.
+  */
+  
+ /**
+   * This class permits a <code>String</code> to be read as an input stream.
+   * The low eight bits of each character in the <code>String</code> are the
+   * bytes that are returned. The high eight bits of each character are
+   * discarded.
+   * <p>
+   * The mark/reset functionality in this class behaves differently than
+   * normal.  The <code>mark()</code> method is always ignored and the 
+   * <code>reset()</code> method always resets in stream to start reading from 
+   * position 0 in the String.  Note that since this method does not override 
+   * <code>markSupported()</code> in <code>InputStream</code>, calling that 
+   * method will return <code>false</code>.
+   * <p>
+   * Note that this class is deprecated because it does not properly handle
+   * 16-bit Java characters.  It is provided for backwards compatibility only
+   * and should not be used for new development.  The <code>StringReader</code>
+   * class should be used instead.
+   *
+   * @deprecated
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public class StringBufferInputStream extends InputStream
+ {
+   /** The String which is the input to this stream. */
+   protected String buffer;
+ 
+   /** Position of the next byte in buffer to be read. */
+   protected int pos = 0;
+ 
+   /** The length of the String buffer. */
+   protected int count;
+ 
+  /**
+   * Create a new <code>StringBufferInputStream</code> that will read bytes
+   * from the passed in <code>String</code>.  This stream will read from the
+   * beginning to the end of the <code>String</code>.
+   *
+   * @param s The <code>String</code> this stream will read from.
+   */
+   public StringBufferInputStream(String s)
+   {
+     buffer = s;
+     count = s.length();
+   }
+ 
+  /**
+   * This method returns the number of bytes available to be read from this
+   * stream.  The value returned will be equal to <code>count - pos</code>.
+   *
+   * @return The number of bytes that can be read from this stream before
+   * blocking, which is all of them
+   */
+   public int available()
+   {
+     return count - pos;
+   }
+ 
+  /**
+   * This method reads one byte from the stream.  The <code>pos</code> counter 
+   * is advanced to the next byte to be read.  The byte read is returned as
+   * an int in the range of 0-255.  If the stream position is already at the
+   * end of the buffer, no byte is read and a -1 is returned in order to
+   * indicate the end of the stream.
+   *
+   * @return The byte read, or -1 if end of stream
+   */
+   public int read()
+   {
+     if (pos >= count)
+       return -1;	// EOF
+ 
+     return ((int) buffer.charAt(pos++)) & 0xFF;
+   }
+ 
+ /**
+   * This method reads bytes from the stream and stores them into a caller
+   * supplied buffer.  It starts storing the data at index <code>offset</code> 
+   * into the buffer and attempts to read <code>len</code> bytes.  This method
+   * can return before reading the number of bytes requested if the end of the
+   * stream is encountered first.  The actual number of bytes read is 
+   * returned.  If no bytes can be read because the stream is already at 
+   * the end of stream position, a -1 is returned.
+   * <p>
+   * This method does not block.
+   *
+   * @param b The array into which the bytes read should be stored.
+   * @param off The offset into the array to start storing bytes
+   * @param len The requested number of bytes to read
+   *
+   * @return The actual number of bytes read, or -1 if end of stream.
+   */
+   public int read(byte[] b, int off, int len)
+   {
+     if (off < 0 || len < 0 || off + len > b.length)
+       throw new ArrayIndexOutOfBoundsException();
+ 
+     if (pos >= count)
+       return -1;	// EOF
+ 
+     int numRead = Math.min(len, count - pos);
+     if (numRead < 0)
+       return 0;
+ 
+     buffer.getBytes(pos, pos + numRead, b, off);
+     pos += numRead;
+     return numRead;
+   }
+ 
+  /**
+   * This method sets the read position in the stream to the beginning
+   * setting the <code>pos</code> variable equal to 0.  Note that this differs
+   * from the common implementation of the <code>reset()</code> method.
+   */
+   public void reset()
+   {
+     pos = 0;
+   }
+ 
+  /**
+   * This method attempts to skip the requested number of bytes in the
+   * input stream.  It does this by advancing the <code>pos</code> value by the
+   * specified number of bytes.  It this would exceed the length of the
+   * buffer, then only enough bytes are skipped to position the stream at
+   * the end of the buffer.  The actual number of bytes skipped is returned.
+   *
+   * @param n The requested number of bytes to skip
+   *
+   * @return The actual number of bytes skipped.
+   */
+   public long skip(long n)
+   {
+     if (n < 0)
+       return 0L;
+ 
+     long actualSkip = Math.min(n, count - pos);
+     pos += actualSkip;
+     return actualSkip;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/StringReader.java gcc-4.1.0/libjava/classpath/java/io/StringReader.java
*** gcc-4.0.2/libjava/classpath/java/io/StringReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/StringReader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,209 ----
+ /* StringReader.java -- permits a String to be read as a character input stream
+    Copyright (C) 1998, 1999, 2000, 2003  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct
+  */
+ 
+ /**
+  * This class permits a <code>String</code> to be read as a character 
+  * input stream.
+  * <p>
+  * The mark/reset functionality in this class behaves differently than
+  * normal.  If no mark has been set, then calling the <code>reset()</code>
+  * method rewinds the read pointer to the beginning of the <code>String</code>.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @date October 19, 1998.  
+  */
+ public class StringReader extends Reader
+ {
+   /* A String provided by the creator of the stream. */
+   private String buf;
+ 
+   /* Position of the next char in buf to be read. */
+   private int pos;
+ 
+   /* The currently marked position in the stream. */
+   private int markedPos;
+ 
+   /* The index in buf one greater than the last valid character. */
+   private int count;
+ 
+   /**
+    * Create a new <code>StringReader</code> that will read chars from the 
+    * passed in <code>String</code>.  This stream will read from the beginning 
+    * to the end of the <code>String</code>.
+    *
+    * @param buffer The <code>String</code> this stream will read from.
+    */
+   public StringReader(String buffer)
+   {
+     super();
+     buf = buffer;
+ 
+     count = buffer.length();
+     markedPos = pos = 0;
+   }
+ 
+   public void close()
+   {
+     synchronized (lock)
+     {
+       buf = null;
+     }
+   }
+ 
+   public void mark(int readAheadLimit) throws IOException
+   {
+     synchronized (lock)
+     {
+       if (buf == null)
+         throw new IOException("Stream closed");
+ 
+       // readAheadLimit is ignored per Java Class Lib. book, p. 1692.
+       markedPos = pos;
+     }
+   }
+ 
+   public boolean markSupported()
+   {
+     return true;
+   }
+ 
+   public int read() throws IOException
+   {
+     synchronized (lock)
+     {
+       if (buf == null)
+         throw new IOException("Stream closed");
+ 
+       if (pos < count)
+         return ((int) buf.charAt(pos++)) & 0xFFFF;
+       return -1;
+     }
+   }
+ 
+   public int read(char[] b, int off, int len) throws IOException
+   {
+     synchronized (lock)
+     {
+       if (buf == null)
+         throw new IOException("Stream closed");
+ 
+       /* Don't need to check pos value, arraycopy will check it. */
+       if (off < 0 || len < 0 || off + len > b.length)
+         throw new ArrayIndexOutOfBoundsException();
+ 
+       if (pos >= count)
+         return -1;
+ 
+       int lastChar = Math.min(count, pos + len);
+       buf.getChars(pos, lastChar, b, off);
+       int numChars = lastChar - pos;
+       pos = lastChar;
+       return numChars;
+     }
+   }
+ 
+   /**
+    * This method determines if the stream is ready to be read.  This class
+    * is always ready to read and so always returns <code>true</code>, unless
+    * close() has previously been called in which case an IOException is
+    * thrown.
+    *
+    * @return <code>true</code> to indicate that this object is ready to be read.
+    * @exception IOException If the stream is closed.
+    */
+   public boolean ready() throws IOException
+   {
+     if (buf == null)
+       throw new IOException("Stream closed");
+ 
+     return true;
+   }
+ 
+   /**
+    * Sets the read position in the stream to the previously
+    * marked position or to 0 (i.e., the beginning of the stream) if the mark
+    * has not already been set.
+    */
+   public void reset() throws IOException
+   {
+     synchronized (lock)
+     {
+       if (buf == null)
+         throw new IOException("Stream closed");
+ 
+       pos = markedPos;
+     }
+   }
+ 
+   /**
+     * This method attempts to skip the requested number of chars in the
+     * input stream.  It does this by advancing the <code>pos</code> value by 
+     * the specified number of chars.  It this would exceed the length of the
+     * buffer, then only enough chars are skipped to position the stream at
+     * the end of the buffer.  The actual number of chars skipped is returned.
+     *
+     * @param n The requested number of chars to skip
+     *
+     * @return The actual number of chars skipped.
+     */
+   public long skip(long n) throws IOException
+   {
+     synchronized (lock)
+     {
+       if (buf == null)
+         throw new IOException("Stream closed");
+ 
+       // Even though the var numChars is a long, in reality it can never
+       // be larger than an int since the result of subtracting 2 positive
+       // ints will always fit in an int.  Since we have to return a long
+       // anyway, numChars might as well just be a long.
+       long numChars = Math.min((long) (count - pos), n < 0 ? 0L : n);
+       pos += numChars;
+       return numChars;
+     }
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/StringWriter.java gcc-4.1.0/libjava/classpath/java/io/StringWriter.java
*** gcc-4.0.2/libjava/classpath/java/io/StringWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/StringWriter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,191 ----
+ /* StringWriter.java -- Writes bytes to a StringBuffer
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ // Wow is this a dumb class.  CharArrayWriter can do all this and
+ // more.  I would redirect all calls to one in fact, but the javadocs say
+ // use a StringBuffer so I will comply.
+ 
+ /**
+   * This class writes chars to an internal <code>StringBuffer</code> that
+   * can then be used to retrieve a <code>String</code>.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Tom Tromey (tromey@cygnus.com)
+   */
+ public class StringWriter extends Writer
+ {
+   /**
+    * This is the default size of the buffer if the user doesn't specify it.
+    * @specnote The JCL Volume 1 says that 16 is the default size.
+    */
+   private static final int DEFAULT_BUFFER_SIZE = 16;
+ 
+   /**
+    * This method closes the stream.  The contents of the internal buffer
+    * can still be retrieved, but future writes are not guaranteed to work.
+    *
+    * @exception IOException If an error orrurs.
+    */
+   public void close () throws IOException
+   {
+     // JCL says this does nothing.  This seems to violate the Writer
+     // contract, in that other methods should still throw an
+     // IOException after a close.  Still, we just follow JCL.
+   }
+ 
+   /**
+    * This method flushes any buffered characters to the underlying output.
+    * It does nothing in this class.
+    */
+   public void flush ()
+   {
+   }
+ 
+   /**
+    * This method returns the <code>StringBuffer</code> object that this
+    * object is writing to.  Note that this is the actual internal buffer, so
+    * any operations performed on it will affect this stream object.
+    *
+    * @return The <code>StringBuffer</code> object being written to
+    */
+   public StringBuffer getBuffer ()
+   {
+     return buffer;
+   }
+ 
+   /**
+    * This method initializes a new <code>StringWriter</code> to write to a
+    * <code>StringBuffer</code> initially sized to a default size of 16
+    * chars.
+    */
+   public StringWriter ()
+   {
+     this (DEFAULT_BUFFER_SIZE);
+   }
+ 
+   /**
+    * This method initializes a new <code>StringWriter</code> to write to a
+    * <code>StringBuffer</code> with the specified initial size.
+    *
+    * @param size The initial size to make the <code>StringBuffer</code>
+    */
+   public StringWriter (int size)
+   {
+     super ();
+     buffer = new StringBuffer (size);
+     lock = buffer;
+   }
+ 
+   /**
+    * This method returns the contents of the internal <code>StringBuffer</code>
+    * as a <code>String</code>.
+    *
+    * @return A <code>String</code> representing the chars written to
+    * this stream. 
+    */
+   public String toString ()
+   {
+     return buffer.toString();
+   }
+ 
+   /**
+    * This method writes a single character to the output, storing it in
+    * the internal buffer.
+    *
+    * @param oneChar The <code>char</code> to write, passed as an int.
+    */
+   public void write (int oneChar)
+   {
+     buffer.append((char) (oneChar & 0xFFFF));
+   }
+ 
+   /**
+    * This method writes <code>len</code> chars from the specified
+    * array starting at index <code>offset</code> in that array to this
+    * stream by appending the chars to the end of the internal buffer.
+    *
+    * @param chars The array of chars to write
+    * @param offset The index into the array to start writing from
+    * @param len The number of chars to write
+    */
+   public void write (char[] chars, int offset, int len)
+   {
+     buffer.append(chars, offset, len);
+   }
+ 
+   /**
+    * This method writes the characters in the specified <code>String</code>
+    * to the stream by appending them to the end of the internal buffer.
+    *
+    * @param str The <code>String</code> to write to the stream.
+    */
+   public void write (String str)
+   {
+     buffer.append(str);
+   }
+ 
+   /**
+    * This method writes out <code>len</code> characters of the specified
+    * <code>String</code> to the stream starting at character position
+    * <code>offset</code> into the stream.  This is done by appending the
+    * characters to the internal buffer.
+    *
+    * @param str The <code>String</code> to write characters from
+    * @param offset The character position to start writing from
+    * @param len The number of characters to write.
+    */ 
+   public void write (String str, int offset, int len)
+   {
+ //      char[] tmpbuf = new char[len];
+ //      str.getChars(offset, offset+len, tmpbuf, 0);
+ //      buf.append(tmpbuf, 0, tmpbuf.length);
+     // This implementation assumes that String.substring is more
+     // efficient than using String.getChars and copying the data
+     // twice.  For libgcj, this is true.  For Classpath, it is not.
+     // FIXME.
+     buffer.append(str.substring(offset, offset + len));
+   }
+ 
+   /**
+    * This is the <code>StringBuffer</code> that we use to store bytes that
+    * are written.
+    */
+   private StringBuffer buffer;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/SyncFailedException.java gcc-4.1.0/libjava/classpath/java/io/SyncFailedException.java
*** gcc-4.0.2/libjava/classpath/java/io/SyncFailedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/SyncFailedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,66 ----
+ /* SyncFailedException.java -- a file sync failed
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * Thrown when a file synchronization fails.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see FileDescriptor#sync()
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class SyncFailedException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -2353342684412443330L;
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public SyncFailedException(String message)
+   {
+     super(message);
+   }
+ } // class SyncFailedException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/UTFDataFormatException.java gcc-4.1.0/libjava/classpath/java/io/UTFDataFormatException.java
*** gcc-4.0.2/libjava/classpath/java/io/UTFDataFormatException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/UTFDataFormatException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* UTFDataFormatException.java -- thrown on bad format in UTF data
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * When reading a UTF string from an input stream, this exception is thrown
+  * to indicate that the data read is invalid.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see DataInput
+  * @see DataInputStream#readUTF(DataInput)
+  * @status updated to 1.4
+  */
+ public class UTFDataFormatException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 420743449228280612L;
+ 
+   /**
+    * Create a new UTFDataFormatException without a descriptive error message.
+    */
+   public UTFDataFormatException()
+   {
+   }
+ 
+   /**
+    * Create a new UTFDataFormatException with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public UTFDataFormatException(String message)
+   {
+     super(message);
+   }
+ } // class UTFDataFormatException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/UnsupportedEncodingException.java gcc-4.1.0/libjava/classpath/java/io/UnsupportedEncodingException.java
*** gcc-4.0.2/libjava/classpath/java/io/UnsupportedEncodingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/UnsupportedEncodingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* UnsupportedEncodingException.java -- the requested encoding isn't supported
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+  * This exception is thrown when the requested character encoding is 
+  * not supported.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class UnsupportedEncodingException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -4274276298326136670L;
+ 
+   /**
+    * Create an exception without a descriptive error message.
+    */
+   public UnsupportedEncodingException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message the descriptive error message
+    */
+   public UnsupportedEncodingException(String message)
+   {
+     super(message);
+   }
+ } // class UnsupportedEncodingException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/WriteAbortedException.java gcc-4.1.0/libjava/classpath/java/io/WriteAbortedException.java
*** gcc-4.0.2/libjava/classpath/java/io/WriteAbortedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/WriteAbortedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* WriteAbortedException.java -- wraps an exception thrown while writing
+    Copyright (C) 1998, 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /**
+   * This exception is thrown when another ObjectStreamException occurs during
+   * a serialization read or write. The stream is reset, and deserialized
+   * objects are discarded.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Eric Blake (ebb9@email.byu.edu)
+   * @since 1.1
+   * @status updated to 1.4
+   */
+ public class WriteAbortedException extends ObjectStreamException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -3326426625597282442L;
+ 
+   /**
+    * The cause of this exception. This pre-dates the exception chaining
+    * of Throwable; and although you can change this field, you are wiser
+    * to leave it alone.
+    *
+    * @serial the exception cause
+    */
+   public Exception detail;
+ 
+   /**
+    * Create a new WriteAbortedException with a specified message and
+    * cause.
+    *
+    * @param msg the message
+    * @param detail the cause
+    */
+   public WriteAbortedException(String msg, Exception detail)
+   {
+     super(msg);
+     initCause(detail);
+     this.detail = detail;
+   }
+ 
+   /**
+    * This method returns a message indicating what went wrong, in this
+    * format:
+    * <code>super.getMessage() + (detail == null ? "" : "; " + detail)</code>.
+    *
+    * @return the chained message
+    */
+   public String getMessage()
+   {
+     if (detail == this || detail == null)
+       return super.getMessage();
+     return super.getMessage() + "; " + detail;
+   }
+ 
+   /**
+    * Returns the cause of this exception. Note that this may not be the
+    * original cause, thanks to the <code>detail</code> field being public
+    * and non-final (yuck). However, to avoid violating the contract of
+    * Throwable.getCause(), this returns null if <code>detail == this</code>,
+    * as no exception can be its own cause.
+    *
+    * @return the cause
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return detail == this ? null : detail;
+   }
+ } // class WriteAbortedException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/Writer.java gcc-4.1.0/libjava/classpath/java/io/Writer.java
*** gcc-4.0.2/libjava/classpath/java/io/Writer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/Writer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,192 ----
+ /* Writer.java -- Base class for character output streams
+    Copyright (C) 1998, 1999, 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.io;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * This abstract class forms the base of the hierarchy of classes that 
+  * write output as a stream of chars.  It provides a common set of methods
+  * for writing chars to stream.  Subclasses implement and/or extend these
+  * methods to write chars in a particular manner or to a particular 
+  * destination such as a file on disk or network connection.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  */
+ public abstract class Writer
+ {
+   /**
+    * This is the object used to synchronize criticial code sections for
+    * thread safety.  Subclasses should use this field instead of using
+    * synchronized methods or explicity synchronizations on <code>this</code>
+    */
+   protected Object lock;
+ 
+   /**
+    * This is the default no-argument constructor for this class.  This method
+    * will set up the class to synchronize criticial sections on itself.
+    */
+   protected Writer()
+   {
+     lock = this;
+   }
+ 
+   /**
+    * This method initializes a <code>Writer</code> that will synchronize
+    * on the specified <code>Object</code>.
+    *
+    * @param lock The <code>Object</code> to use for synchronizing critical
+    *             sections. Must not be null.
+    */
+   protected Writer(Object lock)
+   {
+     if (lock == null)
+       throw new NullPointerException();
+ 
+     this.lock = lock;
+   }
+ 
+   /**
+    * This method forces any data that may have been buffered to be written
+    * to the underlying output device.  Please note that the host environment
+    * might perform its own buffering unbeknowst to Java.  In that case, a
+    * write made (for example, to a disk drive) might be cached in OS
+    * buffers instead of actually being written to disk.
+    *
+    * @exception IOException If an error occurs
+    */
+   public abstract void flush() throws IOException;
+ 
+   /**
+    * This method closes the stream.  Any internal or native resources 
+    * associated
+    * with this stream are freed.  Any subsequent attempt to access the stream
+    * might throw an exception.
+    * <p>
+    * This method in this class does nothing.
+    *
+    * @exception IOException If an error occurs
+    */
+   public abstract void close() throws IOException;
+ 
+   /**
+    * This method writes a single char to the output stream. 
+    *
+    * @param b The char to be written to the output stream, passed as an int
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write(int b) throws IOException
+   {
+     char[] buf = new char[1];
+ 
+     buf[0] = (char)b;
+     write(buf, 0, buf.length);
+   }
+ 
+   /**
+    * This method all the writes char from the passed array to the output 
+    * stream. This method is equivalent to 
+    * <code>write(buf, 0, buf.length)</code> which
+    * is exactly how it is implemented in this class.
+    *
+    * @param buf The array of char to write
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write(char[] buf) throws IOException
+   {
+     write(buf, 0, buf.length);
+   }
+ 
+   /**
+    * This method writes <code>len</code> char from the specified array
+    * <code>buf</code> starting at index <code>offset</code> into the array.
+    * <p>
+    * Subclasses must provide an implementation of this abstract method.
+    *
+    * @param buf The array of char to write from
+    * @param offset The index into the array to start writing from
+    * @param len The number of char to write
+    * 
+    * @exception IOException If an error occurs
+    */
+   public abstract void write(char[] buf, int offset, int len) 
+     throws IOException;
+ 
+   /**
+    * This method writes all the characters in a <code>String</code> to the
+    * output.
+    *
+    * @param str The <code>String</code> whose chars are to be written.
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write(String str) throws IOException
+   {
+     write(str, 0, str.length());
+   } 
+ 
+   /**
+    * This method writes <code>len</code> chars from the <code>String</code>
+    * starting at position <code>offset</code>.
+    *
+    * @param str The <code>String</code> that is to be written
+    * @param offset The character offset into the <code>String</code> to start
+    *               writing from
+    * @param len The number of chars to write
+    *
+    * @exception IOException If an error occurs
+    */
+   public void write(String str, int offset, int len) throws IOException
+   {
+     // FIXME - for libgcj re-write using native code to not require 
+     // copied buffer.
+     char[] buf = new char[len];
+ 
+     str.getChars(offset, offset + len, buf, 0);
+     write(buf, 0, len);
+   }
+ 
+ } // class Writer
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/class-dependencies.conf gcc-4.1.0/libjava/classpath/java/io/class-dependencies.conf
*** gcc-4.0.2/libjava/classpath/java/io/class-dependencies.conf	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/class-dependencies.conf	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ # This property file contains dependencies of classes, methods, and
+ # field on other methods or classes.
+ #
+ # Syntax: 
+ #
+ #   <used>: <needed 1> [... <needed N>]
+ #
+ # means that when <used> is included, <needed 1> (... <needed N>) must
+ # be included as well.
+ #
+ # <needed X> and <used> are of the form
+ #
+ #   <class.methodOrField(signature)>
+ #
+ # or just
+ #
+ #   <class>
+ #
+ # Within dependencies, variables can be used. A variable is defined as 
+ # follows: 
+ #
+ #   {variable}: value1 value2 ... value<n>
+ #
+ # variables can be used on the right side of dependencies as follows: 
+ #
+ #    <used>: com.bla.blu.{variable}.Class.m()V
+ #
+ # The use of the variable will expand to <n> dependencies of the form
+ #
+ #    <used>: com.bla.blu.value1.Class.m()V
+ #    <used>: com.bla.blu.value2.Class.m()V
+ #    ...
+ #    <used>: com.bla.blu.value<n>.Class.m()V
+ #
+ # Variables can be redefined when building a system to select the 
+ # required support for features like encodings, protocols, etc. 
+ #
+ # Hints:
+ #
+ #  - For methods and fields, the signature is mandatory. For
+ #    specification, please see the Java Virtual Machine Specification by
+ #    SUN. Unlike in the spec, field signatures (types) are in brackets.
+ #
+ #  - Package names must be separated by '/' (and not '.'). E.g.,
+ #    java/lang/Class (this is necessary, because the '.' is used to
+ #    separate method or field names from classes)
+ #
+ #  - In case <needed> refers to a class, only the class itself will be
+ #    included in the resulting binary, NOT necessarily all its methods
+ #    and fields. If you want to refer to all methods and fields, you can
+ #    write class.* as an abbreviation.
+ #
+ # -  Abbreviations for packages are also possible: my/package/* means all
+ #    methods and fields of all classes in my/package.
+ #
+ # -  A line with a trailing '\' continues in the next line.
+ 
+ java/io/File: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/io/IOException.<init>(Ljava/lang/String;)V \
+ 	java/lang/IllegalArgumentException.<init>(Ljava/lang/String;)V
+ 
+ java/io/FileDescriptor: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/lang/IllegalArgumentException.<init>(Ljava/lang/String;)V \
+ 	java/io/IOException.<init>(Ljava/lang/String;)V
+ 
+ java/io/FileInputStream: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/io/IOException.<init>(Ljava/lang/String;)V \
+ 	java/io/FileNotFoundException.<init>(Ljava/lang/String;)V
+ 
+ java/io/FileOutputStream: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/io/FileNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/io/IOException.<init>(Ljava/lang/String;)V
+ 
+ java/io/ObjectInputStream: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/lang/SecurityManager.currentClassLoader()Ljava/lang/ClassLoader; \
+ 	java/lang/IllegalArgumentException.<init>(Ljava/lang/String;)V
+ 
+ java/io/ObjectOutputStream: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/lang/SecurityManager.currentClassLoader()Ljava/lang/ClassLoader; \
+ 	java/lang/IllegalArgumentException.<init>(Ljava/lang/String;)V
+ 
+ java/io/RandomAccessFile: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/io/FileNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/io/IOException.<init>(Ljava/lang/String;)V
+ 
+ # end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/io/package.html gcc-4.1.0/libjava/classpath/java/io/package.html
*** gcc-4.0.2/libjava/classpath/java/io/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/io/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.io package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.io</title></head>
+ 
+ <body>
+ <p>Classes for manipulating character and byte streams and files.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/AbstractMethodError.java gcc-4.1.0/libjava/classpath/java/lang/AbstractMethodError.java
*** gcc-4.0.2/libjava/classpath/java/lang/AbstractMethodError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/AbstractMethodError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* AbstractMethodError.java -- thrown if an abstract method is invoked
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An <code>AbstractMethodError</code> is thrown when an application attempts
+  * to access an abstract method.  Compilers typically detect this error, but
+  * it can be thrown at run time if the definition of a class has changed
+  * since the application was last compiled. This can also occur when
+  * reflecting on methods.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class AbstractMethodError extends IncompatibleClassChangeError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -1654391082989018462L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public AbstractMethodError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public AbstractMethodError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Appendable.java gcc-4.1.0/libjava/classpath/java/lang/Appendable.java
*** gcc-4.0.2/libjava/classpath/java/lang/Appendable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Appendable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,122 ----
+ /* Appendable.java -- Something to which characters can be appended
+    Copyright (C) 2004 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * <p>
+  * An <code>Appendable</code> object is one to which a sequence of Unicode
+  * characters can be added.  The appended characters must be valid Unicode
+  * characters, and may include supplementary characters, composed of multiple
+  * 16-bit <code>char</code> values.
+  * </p>
+  * <p>
+  * The behaviour of the <code>Appendable</code> object is heavily dependent
+  * on the particular implementation being used.  Some implementations may be
+  * thread-safe, while others may not.  Likewise, some implementing classes
+  * may produce errors which aren't propogated to the invoking class, due
+  * to differences in the error handling used.
+  * </p>
+  * <p>
+  * <strong>Note</strong>: implementation of this interface is required for
+  * any class that wishes to receive data from a <code>Formatter</code>
+  * instance.
+  * </p>
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.5
+  */
+ public interface Appendable
+ {
+ 
+   /**
+    * Appends the Unicode character, c, to this <code>Appendable</code>
+    * object.
+    *
+    * @param c the character to append.
+    * @return a reference to this object.
+    * @throws IOException if an I/O error occurs.
+    */
+   Appendable append(char c)
+     throws IOException;
+ 
+   /**
+    * Appends the specified sequence of Unicode characters to this
+    * <code>Appendable</code> object.  The entire sequence may not
+    * be appended, if constrained by the underlying implementation.
+    * For example, a buffer may reach its size limit before the entire
+    * sequence is appended.
+    *
+    * @param seq the character sequence to append.  If seq is null,
+    *        then the string "null" (the string representation of null)
+    *        is appended.
+    * @return a reference to this object.
+    * @throws IOException if an I/O error occurs.
+    */
+   Appendable append(CharSequence seq)
+     throws IOException;
+ 
+   /**
+    * Appends the specified subsequence of Unicode characters to this
+    * <code>Appendable</code> object, starting and ending at the specified
+    * positions within the sequence.  The entire sequence may not
+    * be appended, if constrained by the underlying implementation.
+    * For example, a buffer may reach its size limit before the entire
+    * sequence is appended.  The behaviour of this method matches the
+    * behaviour of <code>append(seq.subSequence(start,end))</code> when
+    * the sequence is not null.
+    *
+    * @param seq the character sequence to append.  If seq is null,
+    *        then the string "null" (the string representation of null)
+    *        is appended.
+    * @param start the index of the first Unicode character to use from
+    *        the sequence.
+    * @param end the index of the last Unicode character to use from the
+    *        sequence.
+    * @return a reference to this object.
+    * @throws IOException if an I/O error occurs.
+    * @throws IndexOutOfBoundsException if either of the indices are negative,
+    *         the start index occurs after the end index, or the end index is
+    *         beyond the end of the sequence.
+    */
+   Appendable append(CharSequence seq, int start, int end)
+     throws IOException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ArithmeticException.java gcc-4.1.0/libjava/classpath/java/lang/ArithmeticException.java
*** gcc-4.0.2/libjava/classpath/java/lang/ArithmeticException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ArithmeticException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* ArithmeticException.java -- exception thrown to indicate conditions
+    like divide by zero.
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when a math error has occured, such as trying to divide an
+  * integer by zero. For example:<br>
+  * <pre>
+  * int i = 0;
+  * int j = 2 / i;
+  * </pre>
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class ArithmeticException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 2256477558314496007L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public ArithmeticException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ArithmeticException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ArrayIndexOutOfBoundsException.java gcc-4.1.0/libjava/classpath/java/lang/ArrayIndexOutOfBoundsException.java
*** gcc-4.0.2/libjava/classpath/java/lang/ArrayIndexOutOfBoundsException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ArrayIndexOutOfBoundsException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* ArrayIndexOutOfBoundsException.java -- exception thrown when accessing
+    an illegal index.
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when attempting to access a position outside the valid range of
+  * an array. For example:<br>
+  * <pre>
+  * int[] i = { 1 };
+  * i[1] = 2;
+  * </pre>
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -5116101128118950844L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public ArrayIndexOutOfBoundsException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ArrayIndexOutOfBoundsException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception indicating the illegal index.
+    *
+    * @param index the invalid index
+    */
+   public ArrayIndexOutOfBoundsException(int index)
+   {
+     super("Array index out of range: " + index);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ArrayStoreException.java gcc-4.1.0/libjava/classpath/java/lang/ArrayStoreException.java
*** gcc-4.0.2/libjava/classpath/java/lang/ArrayStoreException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ArrayStoreException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* ArrayStoreException.java -- exception thrown to when trying to store an
+    object into an array of a different type.
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when trying to store an object of the wrong runtime type in an
+  * array. For example:<br>
+  * <pre>
+  * Object[] o = new Integer[1];
+  * o[0] = "oops";
+  * </pre>
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class ArrayStoreException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -4522193890499838241L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public ArrayStoreException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ArrayStoreException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/AssertionError.java gcc-4.1.0/libjava/classpath/java/lang/AssertionError.java
*** gcc-4.0.2/libjava/classpath/java/lang/AssertionError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/AssertionError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,148 ----
+ /* AssertionError.java -- indication of a failed assertion
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An assertion error normally occurs as a result of the <code>assert</code>
+  * statement added in JDK 1.4, to indicate that an assertion failed. There
+  * are enough constructors to ensure that
+  * <code>new AssertionError(<em>expression</em>)</code> will work for all
+  * expressions, regardless of type, as if the error message were given by
+  * the string <code>"" + <em>expression</em></code>. This extends Error,
+  * because you usually do not want to inadvertently trap an assertion failure.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class AssertionError extends Error
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = -5013299493970297370L;
+ 
+   /**
+    * Construct an AssertionError with no detail message.
+    */
+   public AssertionError()
+   {
+   }
+ 
+   /**
+    * Construct an AssertionError with the string conversion of the given
+    * object as its error message. If the object is a Throwable, it is also
+    * set as the cause of this error.
+    *
+    * @param msg the source of the error message
+    * @see Throwable#getCause()
+    */
+   public AssertionError(Object msg)
+   {
+     super("" + msg);
+     if (msg instanceof Throwable)
+       initCause((Throwable) msg);
+   }
+ 
+   /**
+    * Construct an AssertionError with the string conversion of the given
+    * boolean as its error message.
+    *
+    * @param msg the source of the error message
+    */
+   public AssertionError(boolean msg)
+   {
+     super(msg ? "true" : "false");
+   }
+ 
+   /**
+    * Construct an AssertionError with the string conversion of the given
+    * char as its error message.
+    *
+    * @param msg the source of the error message
+    */
+   public AssertionError(char msg)
+   {
+     super(String.valueOf(msg));
+   }
+ 
+   /**
+    * Construct an AssertionError with the string conversion of the given
+    * int as its error message.
+    *
+    * @param msg the source of the error message
+    */
+   public AssertionError(int msg)
+   {
+     super(Integer.toString(msg, 10));
+   }
+ 
+   /**
+    * Construct an AssertionError with the string conversion of the given
+    * long as its error message.
+    *
+    * @param msg the source of the error message
+    */
+   public AssertionError(long msg)
+   {
+     super(Long.toString(msg));
+   }
+ 
+   /**
+    * Construct an AssertionError with the string conversion of the given
+    * float as its error message.
+    *
+    * @param msg the source of the error message
+    */
+   public AssertionError(float msg)
+   {
+     super(Float.toString(msg));
+   }
+ 
+   /**
+    * Construct an AssertionError with the string conversion of the given
+    * double as its error message.
+    *
+    * @param msg the source of the error message
+    */
+   public AssertionError(double msg)
+   {
+     super(Double.toString(msg));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Boolean.java gcc-4.1.0/libjava/classpath/java/lang/Boolean.java
*** gcc-4.0.2/libjava/classpath/java/lang/Boolean.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Boolean.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,256 ----
+ /* Boolean.java -- object wrapper for boolean
+    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Instances of class <code>Boolean</code> represent primitive
+  * <code>boolean</code> values.
+  *
+  * @author Paul Fisher
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public final class Boolean implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.0.2+.
+    */
+   private static final long serialVersionUID = -3665804199014368530L;
+ 
+   /**
+    * This field is a <code>Boolean</code> object representing the
+    * primitive value <code>true</code>. This instance is returned
+    * by the static <code>valueOf()</code> methods if they return
+    * a <code>Boolean</code> representing <code>true</code>.
+    */
+   public static final Boolean TRUE = new Boolean(true);
+ 
+   /**
+    * This field is a <code>Boolean</code> object representing the
+    * primitive value <code>false</code>. This instance is returned
+    * by the static <code>valueOf()</code> methods if they return
+    * a <code>Boolean</code> representing <code>false</code>.
+    */
+   public static final Boolean FALSE = new Boolean(false);
+ 
+   /**
+    * The primitive type <code>boolean</code> is represented by this
+    * <code>Class</code> object.
+    *
+    * @since 1.1
+    */
+   public static final Class TYPE = VMClassLoader.getPrimitiveClass('Z');
+ 
+   /**
+    * The immutable value of this Boolean.
+    * @serial the wrapped value
+    */
+   private final boolean value;
+ 
+   /**
+    * Create a <code>Boolean</code> object representing the value of the
+    * argument <code>value</code>. In general the use of the static
+    * method <code>valueof(boolean)</code> is more efficient since it will
+    * not create a new object.
+    *
+    * @param value the primitive value of this <code>Boolean</code>
+    * @see #valueOf(boolean)
+    */
+   public Boolean(boolean value)
+   {
+     this.value = value;
+   }
+ 
+   /**
+    * Creates a <code>Boolean</code> object representing the primitive
+    * <code>true</code> if and only if <code>s</code> matches
+    * the string "true" ignoring case, otherwise the object will represent
+    * the primitive <code>false</code>. In general the use of the static
+    * method <code>valueof(String)</code> is more efficient since it will
+    * not create a new object.
+    *
+    * @param s the <code>String</code> representation of <code>true</code>
+    *        or false
+    */
+   public Boolean(String s)
+   {
+     value = "true".equalsIgnoreCase(s);
+   }
+ 
+   /**
+    * Return the primitive <code>boolean</code> value of this
+    * <code>Boolean</code> object.
+    *
+    * @return true or false, depending on the value of this Boolean
+    */
+   public boolean booleanValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Returns the Boolean <code>TRUE</code> if the given boolean is
+    * <code>true</code>, otherwise it will return the Boolean
+    * <code>FALSE</code>.
+    *
+    * @param b the boolean to wrap
+    * @return the wrapper object
+    * @see #TRUE
+    * @see #FALSE
+    * @since 1.4
+    */
+   public static Boolean valueOf(boolean b)
+   {
+     return b ? TRUE : FALSE;
+   }
+ 
+   /**
+    * Returns the Boolean <code>TRUE</code> if and only if the given
+    * String is equal, ignoring case, to the the String "true", otherwise
+    * it will return the Boolean <code>FALSE</code>.
+    *
+    * @param s the string to convert
+    * @return a wrapped boolean from the string
+    */
+   public static Boolean valueOf(String s)
+   {
+     return "true".equalsIgnoreCase(s) ? TRUE : FALSE;
+   }
+ 
+   /**
+    * Returns "true" if the value of the give boolean is <code>true</code> and
+    * returns "false" if the value of the given boolean is <code>false</code>.
+    *
+    * @param b the boolean to convert
+    * @return the string representation of the boolean
+    * @since 1.4
+    */
+   public static String toString(boolean b)
+   {
+     return b ? "true" : "false";
+   }
+ 
+   /**
+    * Returns "true" if the value of this object is <code>true</code> and
+    * returns "false" if the value of this object is <code>false</code>.
+    *
+    * @return the string representation of this
+    */
+   public String toString()
+   {
+     return value ? "true" : "false";
+   }
+ 
+   /**
+    * Returns the integer <code>1231</code> if this object represents
+    * the primitive <code>true</code> and the integer <code>1237</code>
+    * otherwise.
+    *
+    * @return the hash code
+    */
+   public int hashCode()
+   {
+     return value ? 1231 : 1237;
+   }
+ 
+   /**
+    * If the <code>obj</code> is an instance of <code>Boolean</code> and
+    * has the same primitive value as this object then <code>true</code>
+    * is returned.  In all other cases, including if the <code>obj</code>
+    * is <code>null</code>, <code>false</code> is returned.
+    *
+    * @param obj possibly an instance of any <code>Class</code>
+    * @return true if <code>obj</code> equals this
+    */
+   public boolean equals(Object obj)
+   {
+     return obj instanceof Boolean && value == ((Boolean) obj).value;
+   }
+ 
+   /**
+    * If the value of the system property <code>name</code> matches
+    * "true" ignoring case then the function returns <code>true</code>.
+    *
+    * @param name the property name to look up
+    * @return true if the property resulted in "true"
+    * @throws SecurityException if accessing the system property is forbidden
+    * @see System#getProperty(String)
+    */
+   public static boolean getBoolean(String name)
+   {
+     if (name == null || "".equals(name))
+       return false;
+     return "true".equalsIgnoreCase(System.getProperty(name));
+   }
+ 
+   /**
+    * If the String argument is "true", ignoring case, return true.
+    * Otherwise, return false.
+    *
+    * @param b String to parse
+    * @since 1.5
+    */
+   public static boolean parseBoolean(String b)
+   {
+     return "true".equalsIgnoreCase(b) ? true : false;
+   }
+   
+   /**
+    * Compares this Boolean to another.
+    * @param b the Boolean to compare this Boolean to
+    * @return 0 if both Booleans represent the same value, a positive number 
+    * if this Boolean represents true and b represents false, or a negative
+    * number otherwise.
+    * @since 1.5
+    */
+   public int compareTo (Boolean b)
+   {
+     if (b == null)
+       throw new NullPointerException("argument passed to compareTo(Boolean) cannot be null");
+     
+     if (this.value == b.value)
+       return 0;
+     if (this.value == true)
+       return 1;
+     return -1;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Byte.java gcc-4.1.0/libjava/classpath/java/lang/Byte.java
*** gcc-4.0.2/libjava/classpath/java/lang/Byte.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Byte.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,387 ----
+ /* Byte.java -- object wrapper for byte
+    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Instances of class <code>Byte</code> represent primitive <code>byte</code>
+  * values.
+  *
+  * Additionally, this class provides various helper functions and variables
+  * useful to bytes.
+  *
+  * @author Paul Fisher
+  * @author John Keiser
+  * @author Per Bothner
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status updated to 1.5
+  */
+ public final class Byte extends Number implements Comparable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -7183698231559129828L;
+ 
+   /**
+    * The minimum value a <code>byte</code> can represent is -128 (or
+    * -2<sup>7</sup>).
+    */
+   public static final byte MIN_VALUE = -128;
+ 
+   /**
+    * The maximum value a <code>byte</code> can represent is 127 (or
+    * 2<sup>7</sup> - 1).
+    */
+   public static final byte MAX_VALUE = 127;
+ 
+   /**
+    * The primitive type <code>byte</code> is represented by this
+    * <code>Class</code> object.
+    */
+   public static final Class TYPE = VMClassLoader.getPrimitiveClass('B');
+ 
+   /**
+    * The number of bits needed to represent a <code>byte</code>.
+    * @since 1.5
+    */
+   public static final int SIZE = 8;
+ 
+   // This caches Byte values, and is used by boxing conversions via
+   // valueOf().  We're required to cache all possible values here.
+   private static Byte[] byteCache = new Byte[MAX_VALUE - MIN_VALUE + 1];
+ 
+   /**
+    * The immutable value of this Byte.
+    *
+    * @serial the wrapped byte
+    */
+   private final byte value;
+ 
+   /**
+    * Create a <code>Byte</code> object representing the value of the
+    * <code>byte</code> argument.
+    *
+    * @param value the value to use
+    */
+   public Byte(byte value)
+   {
+     this.value = value;
+   }
+ 
+   /**
+    * Create a <code>Byte</code> object representing the value specified
+    * by the <code>String</code> argument
+    *
+    * @param s the string to convert
+    * @throws NumberFormatException if the String does not contain a byte
+    * @see #valueOf(String)
+    */
+   public Byte(String s)
+   {
+     value = parseByte(s, 10);
+   }
+ 
+   /**
+    * Converts the <code>byte</code> to a <code>String</code> and assumes
+    * a radix of 10.
+    *
+    * @param b the <code>byte</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toString(byte b)
+   {
+     return String.valueOf(b);
+   }
+ 
+   /**
+    * Converts the specified <code>String</code> into a <code>byte</code>.
+    * This function assumes a radix of 10.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the <code>byte</code> value of <code>s</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>byte</code>
+    * @see #parseByte(String)
+    */
+   public static byte parseByte(String s)
+   {
+     return parseByte(s, 10);
+   }
+ 
+   /**
+    * Converts the specified <code>String</code> into an <code>int</code>
+    * using the specified radix (base). The string must not be <code>null</code>
+    * or empty. It may begin with an optional '-', which will negate the answer,
+    * provided that there are also valid digits. Each digit is parsed as if by
+    * <code>Character.digit(d, radix)</code>, and must be in the range
+    * <code>0</code> to <code>radix - 1</code>. Finally, the result must be
+    * within <code>MIN_VALUE</code> to <code>MAX_VALUE</code>, inclusive.
+    * Unlike Double.parseDouble, you may not have a leading '+'.
+    *
+    * @param s the <code>String</code> to convert
+    * @param radix the radix (base) to use in the conversion
+    * @return the <code>String</code> argument converted to <code>byte</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>byte</code>
+    */
+   public static byte parseByte(String s, int radix)
+   {
+     int i = Integer.parseInt(s, radix, false);
+     if ((byte) i != i)
+       throw new NumberFormatException();
+     return (byte) i;
+   }
+ 
+   /**
+    * Creates a new <code>Byte</code> object using the <code>String</code>
+    * and specified radix (base).
+    *
+    * @param s the <code>String</code> to convert
+    * @param radix the radix (base) to convert with
+    * @return the new <code>Byte</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>byte</code>
+    * @see #parseByte(String, int)
+    */
+   public static Byte valueOf(String s, int radix)
+   {
+     return new Byte(parseByte(s, radix));
+   }
+ 
+   /**
+    * Creates a new <code>Byte</code> object using the <code>String</code>,
+    * assuming a radix of 10.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the new <code>Byte</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>byte</code>
+    * @see #Byte(String)
+    * @see #parseByte(String)
+    */
+   public static Byte valueOf(String s)
+   {
+     return new Byte(parseByte(s, 10));
+   }
+ 
+   /**
+    * Returns a <code>Byte</code> object wrapping the value.
+    * In contrast to the <code>Byte</code> constructor, this method
+    * will cache some values.  It is used by boxing conversion.
+    *
+    * @param val the value to wrap
+    * @return the <code>Byte</code>
+    * 
+    * @since 1.5
+    */
+   public static Byte valueOf(byte val)
+   {
+     synchronized (byteCache)
+       {
+     if (byteCache[val - MIN_VALUE] == null)
+       byteCache[val - MIN_VALUE] = new Byte(val);
+     return byteCache[val - MIN_VALUE];
+       }
+   }
+ 
+  /**
+    * Convert the specified <code>String</code> into a <code>Byte</code>.
+    * The <code>String</code> may represent decimal, hexadecimal, or
+    * octal numbers.
+    *
+    * <p>The extended BNF grammar is as follows:<br>
+    * <pre>
+    * <em>DecodableString</em>:
+    *      ( [ <code>-</code> ] <em>DecimalNumber</em> )
+    *    | ( [ <code>-</code> ] ( <code>0x</code> | <code>0X</code>
+    *              | <code>#</code> ) { <em>HexDigit</em> }+ )
+    *    | ( [ <code>-</code> ] <code>0</code> { <em>OctalDigit</em> } )
+    * <em>DecimalNumber</em>:
+    *        <em>DecimalDigit except '0'</em> { <em>DecimalDigit</em> }
+    * <em>DecimalDigit</em>:
+    *        <em>Character.digit(d, 10) has value 0 to 9</em>
+    * <em>OctalDigit</em>:
+    *        <em>Character.digit(d, 8) has value 0 to 7</em>
+    * <em>DecimalDigit</em>:
+    *        <em>Character.digit(d, 16) has value 0 to 15</em>
+    * </pre>
+    * Finally, the value must be in the range <code>MIN_VALUE</code> to
+    * <code>MAX_VALUE</code>, or an exception is thrown.
+    *
+    * @param s the <code>String</code> to interpret
+    * @return the value of the String as a <code>Byte</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>byte</code>
+    * @throws NullPointerException if <code>s</code> is null
+    * @see Integer#decode(String)
+    */
+   public static Byte decode(String s)
+   {
+     int i = Integer.parseInt(s, 10, true);
+     if ((byte) i != i)
+       throw new NumberFormatException();
+     return new Byte((byte) i);
+   }
+ 
+   /**
+    * Return the value of this <code>Byte</code>.
+    *
+    * @return the byte value
+    */
+   public byte byteValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Byte</code> as a <code>short</code>.
+    *
+    * @return the short value
+    */
+   public short shortValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Byte</code> as an <code>int</code>.
+    *
+    * @return the int value
+    */
+   public int intValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Byte</code> as a <code>long</code>.
+    *
+    * @return the long value
+    */
+   public long longValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Byte</code> as a <code>float</code>.
+    *
+    * @return the float value
+    */
+   public float floatValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Byte</code> as a <code>double</code>.
+    *
+    * @return the double value
+    */
+   public double doubleValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Converts the <code>Byte</code> value to a <code>String</code> and
+    * assumes a radix of 10.
+    *
+    * @return the <code>String</code> representation of this <code>Byte</code>
+    * @see Integer#toString()
+    */
+   public String toString()
+   {
+     return String.valueOf(value);
+   }
+ 
+   /**
+    * Return a hashcode representing this Object. <code>Byte</code>'s hash
+    * code is simply its value.
+    *
+    * @return this Object's hash code
+    */
+   public int hashCode()
+   {
+     return value;
+   }
+ 
+   /**
+    * Returns <code>true</code> if <code>obj</code> is an instance of
+    * <code>Byte</code> and represents the same byte value.
+    *
+    * @param obj the object to compare
+    * @return whether these Objects are semantically equal
+    */
+   public boolean equals(Object obj)
+   {
+     return obj instanceof Byte && value == ((Byte) obj).value;
+   }
+ 
+   /**
+    * Compare two Bytes numerically by comparing their <code>byte</code> values.
+    * The result is positive if the first is greater, negative if the second
+    * is greater, and 0 if the two are equal.
+    *
+    * @param b the Byte to compare
+    * @return the comparison
+    * @since 1.2
+    */
+   public int compareTo(Byte b)
+   {
+     return value - b.value;
+   }
+ 
+   /**
+    * Behaves like <code>compareTo(Byte)</code> unless the Object
+    * is not a <code>Byte</code>.
+    *
+    * @param o the object to compare
+    * @return the comparison
+    * @throws ClassCastException if the argument is not a <code>Byte</code>
+    * @see #compareTo(Byte)
+    * @see Comparable
+    * @since 1.2
+    */
+   public int compareTo(Object o)
+   {
+     return compareTo((Byte) o);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/CharSequence.java gcc-4.1.0/libjava/classpath/java/lang/CharSequence.java
*** gcc-4.0.2/libjava/classpath/java/lang/CharSequence.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/CharSequence.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,99 ----
+ /* CharSequence.java -- Anything that has an indexed sequence of chars
+    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * General functions on a sequence of chars. This interface is implemented
+  * by <code>String</code>, <code>StringBuffer</code> and
+  * <code>CharBuffer</code> to give a uniform way to get chars at a certain
+  * index, the number of characters in the sequence and a subrange of the
+  * chars. Indexes start at 0 and the last index is <code>length()-1</code>.
+  *
+  * <p>Even when classes implement this interface they are not always
+  * exchangeble because they might implement their compare, equals or hash
+  * function differently. This means that in general one should not use a
+  * <code>CharSequence</code> as keys in collections since two sequences
+  * with the same chars at the same indexes with the same length might not
+  * have the same hash code, be equal or be comparable since the are
+  * represented by different classes.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface CharSequence
+ {
+   /**
+    * Returns the character at the given index.
+    *
+    * @param i the index to retrieve from
+    * @return the character at that location
+    * @throws IndexOutOfBoundsException if i &lt; 0 || i &gt;= length() - 1
+    */
+   char charAt(int i);
+ 
+   /**
+    * Returns the length of the sequence. This is the number of 16-bit
+    * characters in the sequence, which may differ from the length of the
+    * underlying encoding.
+    *
+    * @return the sequence length
+    */
+   int length();
+ 
+   /**
+    * Returns a new <code>CharSequence</code> of the indicated range.
+    *
+    * @param begin the start index (inclusive)
+    * @param end the end index (exclusive)
+    * @return a subsequence of this
+    * @throws IndexOutOfBoundsException if begin &gt; end || begin &lt; 0 ||
+    *         end &gt; length()
+    */
+   CharSequence subSequence(int begin, int end);
+ 
+   /**
+    * Returns the complete <code>CharSequence</code> as a <code>String</code>.
+    * Classes that implement this interface should return a <code>String</code>
+    * which contains only the characters in the sequence in the correct order.
+    *
+    * @return the character sequence as a String
+    */
+   String toString();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Character.java gcc-4.1.0/libjava/classpath/java/lang/Character.java
*** gcc-4.0.2/libjava/classpath/java/lang/Character.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Character.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,2681 ----
+ /* java.lang.Character -- Wrapper class for char, and Unicode subsets
+    Copyright (C) 1998, 1999, 2001, 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import gnu.java.lang.CharData;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Wrapper class for the primitive char data type.  In addition, this class
+  * allows one to retrieve property information and perform transformations
+  * on the 57,707 defined characters in the Unicode Standard, Version 3.0.0.
+  * java.lang.Character is designed to be very dynamic, and as such, it
+  * retrieves information on the Unicode character set from a separate
+  * database, gnu.java.lang.CharData, which can be easily upgraded.
+  *
+  * <p>For predicates, boundaries are used to describe
+  * the set of characters for which the method will return true.
+  * This syntax uses fairly normal regular expression notation.
+  * See 5.13 of the Unicode Standard, Version 3.0, for the
+  * boundary specification.
+  *
+  * <p>See <a href="http://www.unicode.org">http://www.unicode.org</a>
+  * for more information on the Unicode Standard.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Paul N. Fisher
+  * @author Jochen Hoenicke
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see CharData
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public final class Character implements Serializable, Comparable
+ {
+   /**
+    * A subset of Unicode blocks.
+    *
+    * @author Paul N. Fisher
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @since 1.2
+    */
+   public static class Subset
+   {
+     /** The name of the subset. */
+     private final String name;
+ 
+     /**
+      * Construct a new subset of characters.
+      *
+      * @param name the name of the subset
+      * @throws NullPointerException if name is null
+      */
+     protected Subset(String name)
+     {
+       // Note that name.toString() is name, unless name was null.
+       this.name = name.toString();
+     }
+ 
+     /**
+      * Compares two Subsets for equality. This is <code>final</code>, and
+      * restricts the comparison on the <code>==</code> operator, so it returns
+      * true only for the same object.
+      *
+      * @param o the object to compare
+      * @return true if o is this
+      */
+     public final boolean equals(Object o)
+     {
+       return o == this;
+     }
+ 
+     /**
+      * Makes the original hashCode of Object final, to be consistent with
+      * equals.
+      *
+      * @return the hash code for this object
+      */
+     public final int hashCode()
+     {
+       return super.hashCode();
+     }
+ 
+     /**
+      * Returns the name of the subset.
+      *
+      * @return the name
+      */
+     public final String toString()
+     {
+       return name;
+     }
+   } // class Subset
+ 
+   /**
+    * A family of character subsets in the Unicode specification. A character
+    * is in at most one of these blocks.
+    *
+    * This inner class was generated automatically from
+    * <code>doc/unicode/Block-3.txt</code>, by some perl scripts.
+    * This Unicode definition file can be found on the
+    * <a href="http://www.unicode.org">http://www.unicode.org</a> website.
+    * JDK 1.4 uses Unicode version 3.0.0.
+    *
+    * @author scripts/unicode-blocks.pl (written by Eric Blake)
+    * @since 1.2
+    */
+   public static final class UnicodeBlock extends Subset
+   {
+     /** The start of the subset. */
+     private final char start;
+ 
+     /** The end of the subset. */
+     private final char end;
+ 
+     /**
+      * Constructor for strictly defined blocks.
+      *
+      * @param start the start character of the range
+      * @param end the end character of the range
+      * @param name the block name
+      */
+     private UnicodeBlock(char start, char end, String name)
+     {
+       super(name);
+       this.start = start;
+       this.end = end;
+     }
+ 
+     /**
+      * Returns the Unicode character block which a character belongs to.
+      *
+      * @param ch the character to look up
+      * @return the set it belongs to, or null if it is not in one
+      */
+     public static UnicodeBlock of(char ch)
+     {
+       // Special case, since SPECIALS contains two ranges.
+       if (ch == '\uFEFF')
+         return SPECIALS;
+       // Simple binary search for the correct block.
+       int low = 0;
+       int hi = sets.length - 1;
+       while (low <= hi)
+         {
+           int mid = (low + hi) >> 1;
+           UnicodeBlock b = sets[mid];
+           if (ch < b.start)
+             hi = mid - 1;
+           else if (ch > b.end)
+             low = mid + 1;
+           else
+             return b;
+         }
+       return null;
+     }
+ 
+     /**
+      * Basic Latin.
+      * '\u0000' - '\u007F'.
+      */
+     public static final UnicodeBlock BASIC_LATIN
+       = new UnicodeBlock('\u0000', '\u007F',
+                          "BASIC_LATIN");
+ 
+     /**
+      * Latin-1 Supplement.
+      * '\u0080' - '\u00FF'.
+      */
+     public static final UnicodeBlock LATIN_1_SUPPLEMENT
+       = new UnicodeBlock('\u0080', '\u00FF',
+                          "LATIN_1_SUPPLEMENT");
+ 
+     /**
+      * Latin Extended-A.
+      * '\u0100' - '\u017F'.
+      */
+     public static final UnicodeBlock LATIN_EXTENDED_A
+       = new UnicodeBlock('\u0100', '\u017F',
+                          "LATIN_EXTENDED_A");
+ 
+     /**
+      * Latin Extended-B.
+      * '\u0180' - '\u024F'.
+      */
+     public static final UnicodeBlock LATIN_EXTENDED_B
+       = new UnicodeBlock('\u0180', '\u024F',
+                          "LATIN_EXTENDED_B");
+ 
+     /**
+      * IPA Extensions.
+      * '\u0250' - '\u02AF'.
+      */
+     public static final UnicodeBlock IPA_EXTENSIONS
+       = new UnicodeBlock('\u0250', '\u02AF',
+                          "IPA_EXTENSIONS");
+ 
+     /**
+      * Spacing Modifier Letters.
+      * '\u02B0' - '\u02FF'.
+      */
+     public static final UnicodeBlock SPACING_MODIFIER_LETTERS
+       = new UnicodeBlock('\u02B0', '\u02FF',
+                          "SPACING_MODIFIER_LETTERS");
+ 
+     /**
+      * Combining Diacritical Marks.
+      * '\u0300' - '\u036F'.
+      */
+     public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS
+       = new UnicodeBlock('\u0300', '\u036F',
+                          "COMBINING_DIACRITICAL_MARKS");
+ 
+     /**
+      * Greek.
+      * '\u0370' - '\u03FF'.
+      */
+     public static final UnicodeBlock GREEK
+       = new UnicodeBlock('\u0370', '\u03FF',
+                          "GREEK");
+ 
+     /**
+      * Cyrillic.
+      * '\u0400' - '\u04FF'.
+      */
+     public static final UnicodeBlock CYRILLIC
+       = new UnicodeBlock('\u0400', '\u04FF',
+                          "CYRILLIC");
+ 
+     /**
+      * Armenian.
+      * '\u0530' - '\u058F'.
+      */
+     public static final UnicodeBlock ARMENIAN
+       = new UnicodeBlock('\u0530', '\u058F',
+                          "ARMENIAN");
+ 
+     /**
+      * Hebrew.
+      * '\u0590' - '\u05FF'.
+      */
+     public static final UnicodeBlock HEBREW
+       = new UnicodeBlock('\u0590', '\u05FF',
+                          "HEBREW");
+ 
+     /**
+      * Arabic.
+      * '\u0600' - '\u06FF'.
+      */
+     public static final UnicodeBlock ARABIC
+       = new UnicodeBlock('\u0600', '\u06FF',
+                          "ARABIC");
+ 
+     /**
+      * Syriac.
+      * '\u0700' - '\u074F'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock SYRIAC
+       = new UnicodeBlock('\u0700', '\u074F',
+                          "SYRIAC");
+ 
+     /**
+      * Thaana.
+      * '\u0780' - '\u07BF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock THAANA
+       = new UnicodeBlock('\u0780', '\u07BF',
+                          "THAANA");
+ 
+     /**
+      * Devanagari.
+      * '\u0900' - '\u097F'.
+      */
+     public static final UnicodeBlock DEVANAGARI
+       = new UnicodeBlock('\u0900', '\u097F',
+                          "DEVANAGARI");
+ 
+     /**
+      * Bengali.
+      * '\u0980' - '\u09FF'.
+      */
+     public static final UnicodeBlock BENGALI
+       = new UnicodeBlock('\u0980', '\u09FF',
+                          "BENGALI");
+ 
+     /**
+      * Gurmukhi.
+      * '\u0A00' - '\u0A7F'.
+      */
+     public static final UnicodeBlock GURMUKHI
+       = new UnicodeBlock('\u0A00', '\u0A7F',
+                          "GURMUKHI");
+ 
+     /**
+      * Gujarati.
+      * '\u0A80' - '\u0AFF'.
+      */
+     public static final UnicodeBlock GUJARATI
+       = new UnicodeBlock('\u0A80', '\u0AFF',
+                          "GUJARATI");
+ 
+     /**
+      * Oriya.
+      * '\u0B00' - '\u0B7F'.
+      */
+     public static final UnicodeBlock ORIYA
+       = new UnicodeBlock('\u0B00', '\u0B7F',
+                          "ORIYA");
+ 
+     /**
+      * Tamil.
+      * '\u0B80' - '\u0BFF'.
+      */
+     public static final UnicodeBlock TAMIL
+       = new UnicodeBlock('\u0B80', '\u0BFF',
+                          "TAMIL");
+ 
+     /**
+      * Telugu.
+      * '\u0C00' - '\u0C7F'.
+      */
+     public static final UnicodeBlock TELUGU
+       = new UnicodeBlock('\u0C00', '\u0C7F',
+                          "TELUGU");
+ 
+     /**
+      * Kannada.
+      * '\u0C80' - '\u0CFF'.
+      */
+     public static final UnicodeBlock KANNADA
+       = new UnicodeBlock('\u0C80', '\u0CFF',
+                          "KANNADA");
+ 
+     /**
+      * Malayalam.
+      * '\u0D00' - '\u0D7F'.
+      */
+     public static final UnicodeBlock MALAYALAM
+       = new UnicodeBlock('\u0D00', '\u0D7F',
+                          "MALAYALAM");
+ 
+     /**
+      * Sinhala.
+      * '\u0D80' - '\u0DFF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock SINHALA
+       = new UnicodeBlock('\u0D80', '\u0DFF',
+                          "SINHALA");
+ 
+     /**
+      * Thai.
+      * '\u0E00' - '\u0E7F'.
+      */
+     public static final UnicodeBlock THAI
+       = new UnicodeBlock('\u0E00', '\u0E7F',
+                          "THAI");
+ 
+     /**
+      * Lao.
+      * '\u0E80' - '\u0EFF'.
+      */
+     public static final UnicodeBlock LAO
+       = new UnicodeBlock('\u0E80', '\u0EFF',
+                          "LAO");
+ 
+     /**
+      * Tibetan.
+      * '\u0F00' - '\u0FFF'.
+      */
+     public static final UnicodeBlock TIBETAN
+       = new UnicodeBlock('\u0F00', '\u0FFF',
+                          "TIBETAN");
+ 
+     /**
+      * Myanmar.
+      * '\u1000' - '\u109F'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock MYANMAR
+       = new UnicodeBlock('\u1000', '\u109F',
+                          "MYANMAR");
+ 
+     /**
+      * Georgian.
+      * '\u10A0' - '\u10FF'.
+      */
+     public static final UnicodeBlock GEORGIAN
+       = new UnicodeBlock('\u10A0', '\u10FF',
+                          "GEORGIAN");
+ 
+     /**
+      * Hangul Jamo.
+      * '\u1100' - '\u11FF'.
+      */
+     public static final UnicodeBlock HANGUL_JAMO
+       = new UnicodeBlock('\u1100', '\u11FF',
+                          "HANGUL_JAMO");
+ 
+     /**
+      * Ethiopic.
+      * '\u1200' - '\u137F'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock ETHIOPIC
+       = new UnicodeBlock('\u1200', '\u137F',
+                          "ETHIOPIC");
+ 
+     /**
+      * Cherokee.
+      * '\u13A0' - '\u13FF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock CHEROKEE
+       = new UnicodeBlock('\u13A0', '\u13FF',
+                          "CHEROKEE");
+ 
+     /**
+      * Unified Canadian Aboriginal Syllabics.
+      * '\u1400' - '\u167F'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS
+       = new UnicodeBlock('\u1400', '\u167F',
+                          "UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS");
+ 
+     /**
+      * Ogham.
+      * '\u1680' - '\u169F'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock OGHAM
+       = new UnicodeBlock('\u1680', '\u169F',
+                          "OGHAM");
+ 
+     /**
+      * Runic.
+      * '\u16A0' - '\u16FF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock RUNIC
+       = new UnicodeBlock('\u16A0', '\u16FF',
+                          "RUNIC");
+ 
+     /**
+      * Khmer.
+      * '\u1780' - '\u17FF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock KHMER
+       = new UnicodeBlock('\u1780', '\u17FF',
+                          "KHMER");
+ 
+     /**
+      * Mongolian.
+      * '\u1800' - '\u18AF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock MONGOLIAN
+       = new UnicodeBlock('\u1800', '\u18AF',
+                          "MONGOLIAN");
+ 
+     /**
+      * Latin Extended Additional.
+      * '\u1E00' - '\u1EFF'.
+      */
+     public static final UnicodeBlock LATIN_EXTENDED_ADDITIONAL
+       = new UnicodeBlock('\u1E00', '\u1EFF',
+                          "LATIN_EXTENDED_ADDITIONAL");
+ 
+     /**
+      * Greek Extended.
+      * '\u1F00' - '\u1FFF'.
+      */
+     public static final UnicodeBlock GREEK_EXTENDED
+       = new UnicodeBlock('\u1F00', '\u1FFF',
+                          "GREEK_EXTENDED");
+ 
+     /**
+      * General Punctuation.
+      * '\u2000' - '\u206F'.
+      */
+     public static final UnicodeBlock GENERAL_PUNCTUATION
+       = new UnicodeBlock('\u2000', '\u206F',
+                          "GENERAL_PUNCTUATION");
+ 
+     /**
+      * Superscripts and Subscripts.
+      * '\u2070' - '\u209F'.
+      */
+     public static final UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS
+       = new UnicodeBlock('\u2070', '\u209F',
+                          "SUPERSCRIPTS_AND_SUBSCRIPTS");
+ 
+     /**
+      * Currency Symbols.
+      * '\u20A0' - '\u20CF'.
+      */
+     public static final UnicodeBlock CURRENCY_SYMBOLS
+       = new UnicodeBlock('\u20A0', '\u20CF',
+                          "CURRENCY_SYMBOLS");
+ 
+     /**
+      * Combining Marks for Symbols.
+      * '\u20D0' - '\u20FF'.
+      */
+     public static final UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS
+       = new UnicodeBlock('\u20D0', '\u20FF',
+                          "COMBINING_MARKS_FOR_SYMBOLS");
+ 
+     /**
+      * Letterlike Symbols.
+      * '\u2100' - '\u214F'.
+      */
+     public static final UnicodeBlock LETTERLIKE_SYMBOLS
+       = new UnicodeBlock('\u2100', '\u214F',
+                          "LETTERLIKE_SYMBOLS");
+ 
+     /**
+      * Number Forms.
+      * '\u2150' - '\u218F'.
+      */
+     public static final UnicodeBlock NUMBER_FORMS
+       = new UnicodeBlock('\u2150', '\u218F',
+                          "NUMBER_FORMS");
+ 
+     /**
+      * Arrows.
+      * '\u2190' - '\u21FF'.
+      */
+     public static final UnicodeBlock ARROWS
+       = new UnicodeBlock('\u2190', '\u21FF',
+                          "ARROWS");
+ 
+     /**
+      * Mathematical Operators.
+      * '\u2200' - '\u22FF'.
+      */
+     public static final UnicodeBlock MATHEMATICAL_OPERATORS
+       = new UnicodeBlock('\u2200', '\u22FF',
+                          "MATHEMATICAL_OPERATORS");
+ 
+     /**
+      * Miscellaneous Technical.
+      * '\u2300' - '\u23FF'.
+      */
+     public static final UnicodeBlock MISCELLANEOUS_TECHNICAL
+       = new UnicodeBlock('\u2300', '\u23FF',
+                          "MISCELLANEOUS_TECHNICAL");
+ 
+     /**
+      * Control Pictures.
+      * '\u2400' - '\u243F'.
+      */
+     public static final UnicodeBlock CONTROL_PICTURES
+       = new UnicodeBlock('\u2400', '\u243F',
+                          "CONTROL_PICTURES");
+ 
+     /**
+      * Optical Character Recognition.
+      * '\u2440' - '\u245F'.
+      */
+     public static final UnicodeBlock OPTICAL_CHARACTER_RECOGNITION
+       = new UnicodeBlock('\u2440', '\u245F',
+                          "OPTICAL_CHARACTER_RECOGNITION");
+ 
+     /**
+      * Enclosed Alphanumerics.
+      * '\u2460' - '\u24FF'.
+      */
+     public static final UnicodeBlock ENCLOSED_ALPHANUMERICS
+       = new UnicodeBlock('\u2460', '\u24FF',
+                          "ENCLOSED_ALPHANUMERICS");
+ 
+     /**
+      * Box Drawing.
+      * '\u2500' - '\u257F'.
+      */
+     public static final UnicodeBlock BOX_DRAWING
+       = new UnicodeBlock('\u2500', '\u257F',
+                          "BOX_DRAWING");
+ 
+     /**
+      * Block Elements.
+      * '\u2580' - '\u259F'.
+      */
+     public static final UnicodeBlock BLOCK_ELEMENTS
+       = new UnicodeBlock('\u2580', '\u259F',
+                          "BLOCK_ELEMENTS");
+ 
+     /**
+      * Geometric Shapes.
+      * '\u25A0' - '\u25FF'.
+      */
+     public static final UnicodeBlock GEOMETRIC_SHAPES
+       = new UnicodeBlock('\u25A0', '\u25FF',
+                          "GEOMETRIC_SHAPES");
+ 
+     /**
+      * Miscellaneous Symbols.
+      * '\u2600' - '\u26FF'.
+      */
+     public static final UnicodeBlock MISCELLANEOUS_SYMBOLS
+       = new UnicodeBlock('\u2600', '\u26FF',
+                          "MISCELLANEOUS_SYMBOLS");
+ 
+     /**
+      * Dingbats.
+      * '\u2700' - '\u27BF'.
+      */
+     public static final UnicodeBlock DINGBATS
+       = new UnicodeBlock('\u2700', '\u27BF',
+                          "DINGBATS");
+ 
+     /**
+      * Braille Patterns.
+      * '\u2800' - '\u28FF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock BRAILLE_PATTERNS
+       = new UnicodeBlock('\u2800', '\u28FF',
+                          "BRAILLE_PATTERNS");
+ 
+     /**
+      * CJK Radicals Supplement.
+      * '\u2E80' - '\u2EFF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock CJK_RADICALS_SUPPLEMENT
+       = new UnicodeBlock('\u2E80', '\u2EFF',
+                          "CJK_RADICALS_SUPPLEMENT");
+ 
+     /**
+      * Kangxi Radicals.
+      * '\u2F00' - '\u2FDF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock KANGXI_RADICALS
+       = new UnicodeBlock('\u2F00', '\u2FDF',
+                          "KANGXI_RADICALS");
+ 
+     /**
+      * Ideographic Description Characters.
+      * '\u2FF0' - '\u2FFF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS
+       = new UnicodeBlock('\u2FF0', '\u2FFF',
+                          "IDEOGRAPHIC_DESCRIPTION_CHARACTERS");
+ 
+     /**
+      * CJK Symbols and Punctuation.
+      * '\u3000' - '\u303F'.
+      */
+     public static final UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION
+       = new UnicodeBlock('\u3000', '\u303F',
+                          "CJK_SYMBOLS_AND_PUNCTUATION");
+ 
+     /**
+      * Hiragana.
+      * '\u3040' - '\u309F'.
+      */
+     public static final UnicodeBlock HIRAGANA
+       = new UnicodeBlock('\u3040', '\u309F',
+                          "HIRAGANA");
+ 
+     /**
+      * Katakana.
+      * '\u30A0' - '\u30FF'.
+      */
+     public static final UnicodeBlock KATAKANA
+       = new UnicodeBlock('\u30A0', '\u30FF',
+                          "KATAKANA");
+ 
+     /**
+      * Bopomofo.
+      * '\u3100' - '\u312F'.
+      */
+     public static final UnicodeBlock BOPOMOFO
+       = new UnicodeBlock('\u3100', '\u312F',
+                          "BOPOMOFO");
+ 
+     /**
+      * Hangul Compatibility Jamo.
+      * '\u3130' - '\u318F'.
+      */
+     public static final UnicodeBlock HANGUL_COMPATIBILITY_JAMO
+       = new UnicodeBlock('\u3130', '\u318F',
+                          "HANGUL_COMPATIBILITY_JAMO");
+ 
+     /**
+      * Kanbun.
+      * '\u3190' - '\u319F'.
+      */
+     public static final UnicodeBlock KANBUN
+       = new UnicodeBlock('\u3190', '\u319F',
+                          "KANBUN");
+ 
+     /**
+      * Bopomofo Extended.
+      * '\u31A0' - '\u31BF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock BOPOMOFO_EXTENDED
+       = new UnicodeBlock('\u31A0', '\u31BF',
+                          "BOPOMOFO_EXTENDED");
+ 
+     /**
+      * Enclosed CJK Letters and Months.
+      * '\u3200' - '\u32FF'.
+      */
+     public static final UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS
+       = new UnicodeBlock('\u3200', '\u32FF',
+                          "ENCLOSED_CJK_LETTERS_AND_MONTHS");
+ 
+     /**
+      * CJK Compatibility.
+      * '\u3300' - '\u33FF'.
+      */
+     public static final UnicodeBlock CJK_COMPATIBILITY
+       = new UnicodeBlock('\u3300', '\u33FF',
+                          "CJK_COMPATIBILITY");
+ 
+     /**
+      * CJK Unified Ideographs Extension A.
+      * '\u3400' - '\u4DB5'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
+       = new UnicodeBlock('\u3400', '\u4DB5',
+                          "CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A");
+ 
+     /**
+      * CJK Unified Ideographs.
+      * '\u4E00' - '\u9FFF'.
+      */
+     public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS
+       = new UnicodeBlock('\u4E00', '\u9FFF',
+                          "CJK_UNIFIED_IDEOGRAPHS");
+ 
+     /**
+      * Yi Syllables.
+      * '\uA000' - '\uA48F'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock YI_SYLLABLES
+       = new UnicodeBlock('\uA000', '\uA48F',
+                          "YI_SYLLABLES");
+ 
+     /**
+      * Yi Radicals.
+      * '\uA490' - '\uA4CF'.
+      * @since 1.4
+      */
+     public static final UnicodeBlock YI_RADICALS
+       = new UnicodeBlock('\uA490', '\uA4CF',
+                          "YI_RADICALS");
+ 
+     /**
+      * Hangul Syllables.
+      * '\uAC00' - '\uD7A3'.
+      */
+     public static final UnicodeBlock HANGUL_SYLLABLES
+       = new UnicodeBlock('\uAC00', '\uD7A3',
+                          "HANGUL_SYLLABLES");
+ 
+     /**
+      * Surrogates Area.
+      * '\uD800' - '\uDFFF'.
+      */
+     public static final UnicodeBlock SURROGATES_AREA
+       = new UnicodeBlock('\uD800', '\uDFFF',
+                          "SURROGATES_AREA");
+ 
+     /**
+      * Private Use Area.
+      * '\uE000' - '\uF8FF'.
+      */
+     public static final UnicodeBlock PRIVATE_USE_AREA
+       = new UnicodeBlock('\uE000', '\uF8FF',
+                          "PRIVATE_USE_AREA");
+ 
+     /**
+      * CJK Compatibility Ideographs.
+      * '\uF900' - '\uFAFF'.
+      */
+     public static final UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS
+       = new UnicodeBlock('\uF900', '\uFAFF',
+                          "CJK_COMPATIBILITY_IDEOGRAPHS");
+ 
+     /**
+      * Alphabetic Presentation Forms.
+      * '\uFB00' - '\uFB4F'.
+      */
+     public static final UnicodeBlock ALPHABETIC_PRESENTATION_FORMS
+       = new UnicodeBlock('\uFB00', '\uFB4F',
+                          "ALPHABETIC_PRESENTATION_FORMS");
+ 
+     /**
+      * Arabic Presentation Forms-A.
+      * '\uFB50' - '\uFDFF'.
+      */
+     public static final UnicodeBlock ARABIC_PRESENTATION_FORMS_A
+       = new UnicodeBlock('\uFB50', '\uFDFF',
+                          "ARABIC_PRESENTATION_FORMS_A");
+ 
+     /**
+      * Combining Half Marks.
+      * '\uFE20' - '\uFE2F'.
+      */
+     public static final UnicodeBlock COMBINING_HALF_MARKS
+       = new UnicodeBlock('\uFE20', '\uFE2F',
+                          "COMBINING_HALF_MARKS");
+ 
+     /**
+      * CJK Compatibility Forms.
+      * '\uFE30' - '\uFE4F'.
+      */
+     public static final UnicodeBlock CJK_COMPATIBILITY_FORMS
+       = new UnicodeBlock('\uFE30', '\uFE4F',
+                          "CJK_COMPATIBILITY_FORMS");
+ 
+     /**
+      * Small Form Variants.
+      * '\uFE50' - '\uFE6F'.
+      */
+     public static final UnicodeBlock SMALL_FORM_VARIANTS
+       = new UnicodeBlock('\uFE50', '\uFE6F',
+                          "SMALL_FORM_VARIANTS");
+ 
+     /**
+      * Arabic Presentation Forms-B.
+      * '\uFE70' - '\uFEFE'.
+      */
+     public static final UnicodeBlock ARABIC_PRESENTATION_FORMS_B
+       = new UnicodeBlock('\uFE70', '\uFEFE',
+                          "ARABIC_PRESENTATION_FORMS_B");
+ 
+     /**
+      * Halfwidth and Fullwidth Forms.
+      * '\uFF00' - '\uFFEF'.
+      */
+     public static final UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS
+       = new UnicodeBlock('\uFF00', '\uFFEF',
+                          "HALFWIDTH_AND_FULLWIDTH_FORMS");
+ 
+     /**
+      * Specials.
+      * '\uFEFF', '\uFFF0' - '\uFFFD'.
+      */
+     public static final UnicodeBlock SPECIALS
+       = new UnicodeBlock('\uFFF0', '\uFFFD',
+                          "SPECIALS");
+ 
+     /**
+      * The defined subsets.
+      */
+     private static final UnicodeBlock sets[] = {
+       BASIC_LATIN,
+       LATIN_1_SUPPLEMENT,
+       LATIN_EXTENDED_A,
+       LATIN_EXTENDED_B,
+       IPA_EXTENSIONS,
+       SPACING_MODIFIER_LETTERS,
+       COMBINING_DIACRITICAL_MARKS,
+       GREEK,
+       CYRILLIC,
+       ARMENIAN,
+       HEBREW,
+       ARABIC,
+       SYRIAC,
+       THAANA,
+       DEVANAGARI,
+       BENGALI,
+       GURMUKHI,
+       GUJARATI,
+       ORIYA,
+       TAMIL,
+       TELUGU,
+       KANNADA,
+       MALAYALAM,
+       SINHALA,
+       THAI,
+       LAO,
+       TIBETAN,
+       MYANMAR,
+       GEORGIAN,
+       HANGUL_JAMO,
+       ETHIOPIC,
+       CHEROKEE,
+       UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS,
+       OGHAM,
+       RUNIC,
+       KHMER,
+       MONGOLIAN,
+       LATIN_EXTENDED_ADDITIONAL,
+       GREEK_EXTENDED,
+       GENERAL_PUNCTUATION,
+       SUPERSCRIPTS_AND_SUBSCRIPTS,
+       CURRENCY_SYMBOLS,
+       COMBINING_MARKS_FOR_SYMBOLS,
+       LETTERLIKE_SYMBOLS,
+       NUMBER_FORMS,
+       ARROWS,
+       MATHEMATICAL_OPERATORS,
+       MISCELLANEOUS_TECHNICAL,
+       CONTROL_PICTURES,
+       OPTICAL_CHARACTER_RECOGNITION,
+       ENCLOSED_ALPHANUMERICS,
+       BOX_DRAWING,
+       BLOCK_ELEMENTS,
+       GEOMETRIC_SHAPES,
+       MISCELLANEOUS_SYMBOLS,
+       DINGBATS,
+       BRAILLE_PATTERNS,
+       CJK_RADICALS_SUPPLEMENT,
+       KANGXI_RADICALS,
+       IDEOGRAPHIC_DESCRIPTION_CHARACTERS,
+       CJK_SYMBOLS_AND_PUNCTUATION,
+       HIRAGANA,
+       KATAKANA,
+       BOPOMOFO,
+       HANGUL_COMPATIBILITY_JAMO,
+       KANBUN,
+       BOPOMOFO_EXTENDED,
+       ENCLOSED_CJK_LETTERS_AND_MONTHS,
+       CJK_COMPATIBILITY,
+       CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A,
+       CJK_UNIFIED_IDEOGRAPHS,
+       YI_SYLLABLES,
+       YI_RADICALS,
+       HANGUL_SYLLABLES,
+       SURROGATES_AREA,
+       PRIVATE_USE_AREA,
+       CJK_COMPATIBILITY_IDEOGRAPHS,
+       ALPHABETIC_PRESENTATION_FORMS,
+       ARABIC_PRESENTATION_FORMS_A,
+       COMBINING_HALF_MARKS,
+       CJK_COMPATIBILITY_FORMS,
+       SMALL_FORM_VARIANTS,
+       ARABIC_PRESENTATION_FORMS_B,
+       HALFWIDTH_AND_FULLWIDTH_FORMS,
+       SPECIALS,
+     };
+   } // class UnicodeBlock
+ 
+   /**
+    * The immutable value of this Character.
+    *
+    * @serial the value of this Character
+    */
+   private final char value;
+ 
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 3786198910865385080L;
+ 
+   /**
+    * Smallest value allowed for radix arguments in Java. This value is 2.
+    *
+    * @see #digit(char, int)
+    * @see #forDigit(int, int)
+    * @see Integer#toString(int, int)
+    * @see Integer#valueOf(String)
+    */
+   public static final int MIN_RADIX = 2;
+ 
+   /**
+    * Largest value allowed for radix arguments in Java. This value is 36.
+    *
+    * @see #digit(char, int)
+    * @see #forDigit(int, int)
+    * @see Integer#toString(int, int)
+    * @see Integer#valueOf(String)
+    */
+   public static final int MAX_RADIX = 36;
+ 
+   /**
+    * The minimum value the char data type can hold.
+    * This value is <code>'\\u0000'</code>.
+    */
+   public static final char MIN_VALUE = '\u0000';
+ 
+   /**
+    * The maximum value the char data type can hold.
+    * This value is <code>'\\uFFFF'</code>.
+    */
+   public static final char MAX_VALUE = '\uFFFF';
+ 
+   /**
+    * Class object representing the primitive char data type.
+    *
+    * @since 1.1
+    */
+   public static final Class TYPE = VMClassLoader.getPrimitiveClass('C');
+ 
+   /**
+    * The number of bits needed to represent a <code>char</code>.
+    * @since 1.5
+    */
+   public static final int SIZE = 16;
+ 
+   // This caches some Character values, and is used by boxing
+   // conversions via valueOf().  We must cache at least 0..127;
+   // this constant controls how much we actually cache.
+   private static final int MAX_CACHE = 127;
+   private static Character[] charCache = new Character[MAX_CACHE + 1];
+ 
+   /**
+    * Lu = Letter, Uppercase (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte UPPERCASE_LETTER = 1;
+ 
+   /**
+    * Ll = Letter, Lowercase (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte LOWERCASE_LETTER = 2;
+ 
+   /**
+    * Lt = Letter, Titlecase (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte TITLECASE_LETTER = 3;
+ 
+   /**
+    * Mn = Mark, Non-Spacing (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte NON_SPACING_MARK = 6;
+ 
+   /**
+    * Mc = Mark, Spacing Combining (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte COMBINING_SPACING_MARK = 8;
+ 
+   /**
+    * Me = Mark, Enclosing (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte ENCLOSING_MARK = 7;
+ 
+   /**
+    * Nd = Number, Decimal Digit (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte DECIMAL_DIGIT_NUMBER = 9;
+ 
+   /**
+    * Nl = Number, Letter (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte LETTER_NUMBER = 10;
+ 
+   /**
+    * No = Number, Other (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte OTHER_NUMBER = 11;
+ 
+   /**
+    * Zs = Separator, Space (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte SPACE_SEPARATOR = 12;
+ 
+   /**
+    * Zl = Separator, Line (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte LINE_SEPARATOR = 13;
+ 
+   /**
+    * Zp = Separator, Paragraph (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte PARAGRAPH_SEPARATOR = 14;
+ 
+   /**
+    * Cc = Other, Control (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte CONTROL = 15;
+ 
+   /**
+    * Cf = Other, Format (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte FORMAT = 16;
+ 
+   /**
+    * Cs = Other, Surrogate (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte SURROGATE = 19;
+ 
+   /**
+    * Co = Other, Private Use (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte PRIVATE_USE = 18;
+ 
+   /**
+    * Cn = Other, Not Assigned (Normative).
+    *
+    * @since 1.1
+    */
+   public static final byte UNASSIGNED = 0;
+ 
+   /**
+    * Lm = Letter, Modifier (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte MODIFIER_LETTER = 4;
+ 
+   /**
+    * Lo = Letter, Other (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte OTHER_LETTER = 5;
+ 
+   /**
+    * Pc = Punctuation, Connector (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte CONNECTOR_PUNCTUATION = 23;
+ 
+   /**
+    * Pd = Punctuation, Dash (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte DASH_PUNCTUATION = 20;
+ 
+   /**
+    * Ps = Punctuation, Open (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte START_PUNCTUATION = 21;
+ 
+   /**
+    * Pe = Punctuation, Close (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte END_PUNCTUATION = 22;
+ 
+   /**
+    * Pi = Punctuation, Initial Quote (Informative).
+    *
+    * @since 1.4
+    */
+   public static final byte INITIAL_QUOTE_PUNCTUATION = 29;
+ 
+   /**
+    * Pf = Punctuation, Final Quote (Informative).
+    *
+    * @since 1.4
+    */
+   public static final byte FINAL_QUOTE_PUNCTUATION = 30;
+ 
+   /**
+    * Po = Punctuation, Other (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte OTHER_PUNCTUATION = 24;
+ 
+   /**
+    * Sm = Symbol, Math (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte MATH_SYMBOL = 25;
+ 
+   /**
+    * Sc = Symbol, Currency (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte CURRENCY_SYMBOL = 26;
+ 
+   /**
+    * Sk = Symbol, Modifier (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte MODIFIER_SYMBOL = 27;
+ 
+   /**
+    * So = Symbol, Other (Informative).
+    *
+    * @since 1.1
+    */
+   public static final byte OTHER_SYMBOL = 28;
+ 
+   /**
+    * Undefined bidirectional character type. Undefined char values have
+    * undefined directionality in the Unicode specification.
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_UNDEFINED = -1;
+ 
+   /**
+    * Strong bidirectional character type "L".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0;
+ 
+   /**
+    * Strong bidirectional character type "R".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1;
+ 
+   /**
+    * Strong bidirectional character type "AL".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 2;
+ 
+   /**
+    * Weak bidirectional character type "EN".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 3;
+ 
+   /**
+    * Weak bidirectional character type "ES".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 4;
+ 
+   /**
+    * Weak bidirectional character type "ET".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 5;
+ 
+   /**
+    * Weak bidirectional character type "AN".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_ARABIC_NUMBER = 6;
+ 
+   /**
+    * Weak bidirectional character type "CS".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 7;
+ 
+   /**
+    * Weak bidirectional character type "NSM".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_NONSPACING_MARK = 8;
+ 
+   /**
+    * Weak bidirectional character type "BN".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 9;
+ 
+   /**
+    * Neutral bidirectional character type "B".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 10;
+ 
+   /**
+    * Neutral bidirectional character type "S".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 11;
+ 
+   /**
+    * Strong bidirectional character type "WS".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_WHITESPACE = 12;
+ 
+   /**
+    * Neutral bidirectional character type "ON".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 13;
+ 
+   /**
+    * Strong bidirectional character type "LRE".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 14;
+ 
+   /**
+    * Strong bidirectional character type "LRO".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 15;
+ 
+   /**
+    * Strong bidirectional character type "RLE".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 16;
+ 
+   /**
+    * Strong bidirectional character type "RLO".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 17;
+ 
+   /**
+    * Weak bidirectional character type "PDF".
+    *
+    * @since 1.4
+    */
+   public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 18;
+ 
+   /**
+    * Stores unicode block offset lookup table. Exploit package visibility of
+    * String.value to avoid copying the array.
+    * @see #readChar(char)
+    * @see CharData#BLOCKS
+    */
+   private static final char[] blocks = String.zeroBasedStringValue(CharData.BLOCKS);
+ 
+   /**
+    * Stores unicode attribute offset lookup table. Exploit package visibility
+    * of String.value to avoid copying the array.
+    * @see CharData#DATA
+    */
+   private static final char[] data = String.zeroBasedStringValue(CharData.DATA);
+ 
+   /**
+    * Stores unicode numeric value attribute table. Exploit package visibility
+    * of String.value to avoid copying the array.
+    * @see CharData#NUM_VALUE
+    */
+   private static final char[] numValue
+ 	  = String.zeroBasedStringValue(CharData.NUM_VALUE);
+ 
+   /**
+    * Stores unicode uppercase attribute table. Exploit package visibility
+    * of String.value to avoid copying the array.
+    * @see CharData#UPPER
+    */
+   private static final char[] upper = String.zeroBasedStringValue(CharData.UPPER);
+ 
+   /**
+    * Stores unicode lowercase attribute table. Exploit package visibility
+    * of String.value to avoid copying the array.
+    * @see CharData#LOWER
+    */
+   private static final char[] lower = String.zeroBasedStringValue(CharData.LOWER);
+ 
+   /**
+    * Stores unicode direction attribute table. Exploit package visibility
+    * of String.value to avoid copying the array.
+    * @see CharData#DIRECTION
+    */
+   // Package visible for use by String.
+   static final char[] direction = String.zeroBasedStringValue(CharData.DIRECTION);
+ 
+   /**
+    * Stores unicode titlecase table. Exploit package visibility of
+    * String.value to avoid copying the array.
+    * @see CharData#TITLE
+    */
+   private static final char[] title = String.zeroBasedStringValue(CharData.TITLE);
+ 
+   /**
+    * Mask for grabbing the type out of the contents of data.
+    * @see CharData#DATA
+    */
+   private static final int TYPE_MASK = 0x1F;
+ 
+   /**
+    * Mask for grabbing the non-breaking space flag out of the contents of
+    * data.
+    * @see CharData#DATA
+    */
+   private static final int NO_BREAK_MASK = 0x20;
+ 
+   /**
+    * Mask for grabbing the mirrored directionality flag out of the contents
+    * of data.
+    * @see CharData#DATA
+    */
+   private static final int MIRROR_MASK = 0x40;
+ 
+   /**
+    * Min value for supplementary code point.
+    *
+    * @since 1.5
+    */
+   public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x10000;
+ 
+   /**
+    * Min value for code point.
+    *
+    * @since 1.5
+    */
+   public static final int MIN_CODE_POINT = 0; 
+  
+  
+   /**
+    * Max value for code point.
+    *
+    * @since 1.5
+    */
+   public static final int MAX_CODE_POINT = 0x010ffff;
+ 
+ 
+   /**
+    * Minimum high surrogate code in UTF-16 encoding.
+    *
+    * @since 1.5
+    */
+   public static final char MIN_HIGH_SURROGATE = '\ud800';
+ 
+   /**
+    * Maximum high surrogate code in UTF-16 encoding.
+    *
+    * @since 1.5
+    */
+   public static final char MAX_HIGH_SURROGATE = '\udbff';
+  
+   /**
+    * Minimum low surrogate code in UTF-16 encoding.
+    *
+    * @since 1.5
+    */
+   public static final char MIN_LOW_SURROGATE = '\udc00';
+ 
+   /**
+    * Maximum low surrogate code in UTF-16 encoding.
+    *
+    * @since 1.5
+    */
+   public static final char MAX_LOW_SURROGATE = '\udfff';
+ 
+   /**
+    * Minimum surrogate code in UTF-16 encoding.
+    *
+    * @since 1.5
+    */
+   public static final char MIN_SURROGATE = MIN_HIGH_SURROGATE;
+ 
+   /**
+    * Maximum low surrogate code in UTF-16 encoding.
+    *
+    * @since 1.5
+    */
+   public static final char MAX_SURROGATE = MAX_LOW_SURROGATE;
+ 
+   /**
+    * Grabs an attribute offset from the Unicode attribute database. The lower
+    * 5 bits are the character type, the next 2 bits are flags, and the top
+    * 9 bits are the offset into the attribute tables.
+    *
+    * @param ch the character to look up
+    * @return the character's attribute offset and type
+    * @see #TYPE_MASK
+    * @see #NO_BREAK_MASK
+    * @see #MIRROR_MASK
+    * @see CharData#DATA
+    * @see CharData#SHIFT
+    */
+   // Package visible for use in String.
+   static char readChar(char ch)
+   {
+     // Perform 16-bit addition to find the correct entry in data.
+     return data[(char) (blocks[ch >> CharData.SHIFT] + ch)];
+   }
+ 
+   /**
+    * Wraps up a character.
+    *
+    * @param value the character to wrap
+    */
+   public Character(char value)
+   {
+     this.value = value;
+   }
+ 
+   /**
+    * Returns the character which has been wrapped by this class.
+    *
+    * @return the character wrapped
+    */
+   public char charValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Returns the numerical value (unsigned) of the wrapped character.
+    * Range of returned values: 0x0000-0xFFFF.
+    *
+    * @return the value of the wrapped character
+    */
+   public int hashCode()
+   {
+     return value;
+   }
+ 
+   /**
+    * Determines if an object is equal to this object. This is only true for
+    * another Character object wrapping the same value.
+    *
+    * @param o object to compare
+    * @return true if o is a Character with the same value
+    */
+   public boolean equals(Object o)
+   {
+     return o instanceof Character && value == ((Character) o).value;
+   }
+ 
+   /**
+    * Converts the wrapped character into a String.
+    *
+    * @return a String containing one character -- the wrapped character
+    *         of this instance
+    */
+   public String toString()
+   {
+     // Package constructor avoids an array copy.
+     return new String(new char[] { value }, 0, 1, true);
+   }
+ 
+   /**
+    * Returns a String of length 1 representing the specified character.
+    *
+    * @param ch the character to convert
+    * @return a String containing the character
+    * @since 1.4
+    */
+   public static String toString(char ch)
+   {
+     // Package constructor avoids an array copy.
+     return new String(new char[] { ch }, 0, 1, true);
+   }
+ 
+   /**
+    * Determines if a character is a Unicode lowercase letter. For example,
+    * <code>'a'</code> is lowercase.
+    * <br>
+    * lowercase = [Ll]
+    *
+    * @param ch character to test
+    * @return true if ch is a Unicode lowercase letter, else false
+    * @see #isUpperCase(char)
+    * @see #isTitleCase(char)
+    * @see #toLowerCase(char)
+    * @see #getType(char)
+    */
+   public static boolean isLowerCase(char ch)
+   {
+     return getType(ch) == LOWERCASE_LETTER;
+   }
+ 
+   /**
+    * Determines if a character is a Unicode uppercase letter. For example,
+    * <code>'A'</code> is uppercase.
+    * <br>
+    * uppercase = [Lu]
+    *
+    * @param ch character to test
+    * @return true if ch is a Unicode uppercase letter, else false
+    * @see #isLowerCase(char)
+    * @see #isTitleCase(char)
+    * @see #toUpperCase(char)
+    * @see #getType(char)
+    */
+   public static boolean isUpperCase(char ch)
+   {
+     return getType(ch) == UPPERCASE_LETTER;
+   }
+ 
+   /**
+    * Determines if a character is a Unicode titlecase letter. For example,
+    * the character "Lj" (Latin capital L with small letter j) is titlecase.
+    * <br>
+    * titlecase = [Lt]
+    *
+    * @param ch character to test
+    * @return true if ch is a Unicode titlecase letter, else false
+    * @see #isLowerCase(char)
+    * @see #isUpperCase(char)
+    * @see #toTitleCase(char)
+    * @see #getType(char)
+    */
+   public static boolean isTitleCase(char ch)
+   {
+     return getType(ch) == TITLECASE_LETTER;
+   }
+ 
+   /**
+    * Determines if a character is a Unicode decimal digit. For example,
+    * <code>'0'</code> is a digit.
+    * <br>
+    * Unicode decimal digit = [Nd]
+    *
+    * @param ch character to test
+    * @return true if ch is a Unicode decimal digit, else false
+    * @see #digit(char, int)
+    * @see #forDigit(int, int)
+    * @see #getType(char)
+    */
+   public static boolean isDigit(char ch)
+   {
+     return getType(ch) == DECIMAL_DIGIT_NUMBER;
+   }
+ 
+   /**
+    * Determines if a character is part of the Unicode Standard. This is an
+    * evolving standard, but covers every character in the data file.
+    * <br>
+    * defined = not [Cn]
+    *
+    * @param ch character to test
+    * @return true if ch is a Unicode character, else false
+    * @see #isDigit(char)
+    * @see #isLetter(char)
+    * @see #isLetterOrDigit(char)
+    * @see #isLowerCase(char)
+    * @see #isTitleCase(char)
+    * @see #isUpperCase(char)
+    */
+   public static boolean isDefined(char ch)
+   {
+     return getType(ch) != UNASSIGNED;
+   }
+ 
+   /**
+    * Determines if a character is a Unicode letter. Not all letters have case,
+    * so this may return true when isLowerCase and isUpperCase return false.
+    * <br>
+    * letter = [Lu]|[Ll]|[Lt]|[Lm]|[Lo]
+    *
+    * @param ch character to test
+    * @return true if ch is a Unicode letter, else false
+    * @see #isDigit(char)
+    * @see #isJavaIdentifierStart(char)
+    * @see #isJavaLetter(char)
+    * @see #isJavaLetterOrDigit(char)
+    * @see #isLetterOrDigit(char)
+    * @see #isLowerCase(char)
+    * @see #isTitleCase(char)
+    * @see #isUnicodeIdentifierStart(char)
+    * @see #isUpperCase(char)
+    */
+   public static boolean isLetter(char ch)
+   {
+     return ((1 << getType(ch))
+             & ((1 << UPPERCASE_LETTER)
+                | (1 << LOWERCASE_LETTER)
+                | (1 << TITLECASE_LETTER)
+                | (1 << MODIFIER_LETTER)
+                | (1 << OTHER_LETTER))) != 0;
+   }
+ 
+   /**
+    * Determines if a character is a Unicode letter or a Unicode digit. This
+    * is the combination of isLetter and isDigit.
+    * <br>
+    * letter or digit = [Lu]|[Ll]|[Lt]|[Lm]|[Lo]|[Nd]
+    *
+    * @param ch character to test
+    * @return true if ch is a Unicode letter or a Unicode digit, else false
+    * @see #isDigit(char)
+    * @see #isJavaIdentifierPart(char)
+    * @see #isJavaLetter(char)
+    * @see #isJavaLetterOrDigit(char)
+    * @see #isLetter(char)
+    * @see #isUnicodeIdentifierPart(char)
+    */
+   public static boolean isLetterOrDigit(char ch)
+   {
+     return ((1 << getType(ch))
+             & ((1 << UPPERCASE_LETTER)
+                | (1 << LOWERCASE_LETTER)
+                | (1 << TITLECASE_LETTER)
+                | (1 << MODIFIER_LETTER)
+                | (1 << OTHER_LETTER)
+                | (1 << DECIMAL_DIGIT_NUMBER))) != 0;
+   }
+ 
+   /**
+    * Determines if a character can start a Java identifier. This is the
+    * combination of isLetter, any character where getType returns
+    * LETTER_NUMBER, currency symbols (like '$'), and connecting punctuation
+    * (like '_').
+    *
+    * @param ch character to test
+    * @return true if ch can start a Java identifier, else false
+    * @deprecated Replaced by {@link #isJavaIdentifierStart(char)}
+    * @see #isJavaLetterOrDigit(char)
+    * @see #isJavaIdentifierStart(char)
+    * @see #isJavaIdentifierPart(char)
+    * @see #isLetter(char)
+    * @see #isLetterOrDigit(char)
+    * @see #isUnicodeIdentifierStart(char)
+    */
+   public static boolean isJavaLetter(char ch)
+   {
+     return isJavaIdentifierStart(ch);
+   }
+ 
+   /**
+    * Determines if a character can follow the first letter in
+    * a Java identifier.  This is the combination of isJavaLetter (isLetter,
+    * type of LETTER_NUMBER, currency, connecting punctuation) and digit,
+    * numeric letter (like Roman numerals), combining marks, non-spacing marks,
+    * or isIdentifierIgnorable.
+    *
+    * @param ch character to test
+    * @return true if ch can follow the first letter in a Java identifier
+    * @deprecated Replaced by {@link #isJavaIdentifierPart(char)}
+    * @see #isJavaLetter(char)
+    * @see #isJavaIdentifierStart(char)
+    * @see #isJavaIdentifierPart(char)
+    * @see #isLetter(char)
+    * @see #isLetterOrDigit(char)
+    * @see #isUnicodeIdentifierPart(char)
+    * @see #isIdentifierIgnorable(char)
+    */
+   public static boolean isJavaLetterOrDigit(char ch)
+   {
+     return isJavaIdentifierPart(ch);
+   }
+ 
+   /**
+    * Determines if a character can start a Java identifier. This is the
+    * combination of isLetter, any character where getType returns
+    * LETTER_NUMBER, currency symbols (like '$'), and connecting punctuation
+    * (like '_').
+    * <br>
+    * Java identifier start = [Lu]|[Ll]|[Lt]|[Lm]|[Lo]|[Nl]|[Sc]|[Pc]
+    *
+    * @param ch character to test
+    * @return true if ch can start a Java identifier, else false
+    * @see #isJavaIdentifierPart(char)
+    * @see #isLetter(char)
+    * @see #isUnicodeIdentifierStart(char)
+    * @since 1.1
+    */
+   public static boolean isJavaIdentifierStart(char ch)
+   {
+     return ((1 << getType(ch))
+             & ((1 << UPPERCASE_LETTER)
+                | (1 << LOWERCASE_LETTER)
+                | (1 << TITLECASE_LETTER)
+                | (1 << MODIFIER_LETTER)
+                | (1 << OTHER_LETTER)
+                | (1 << LETTER_NUMBER)
+                | (1 << CURRENCY_SYMBOL)
+                | (1 << CONNECTOR_PUNCTUATION))) != 0;
+   }
+ 
+   /**
+    * Determines if a character can follow the first letter in
+    * a Java identifier.  This is the combination of isJavaLetter (isLetter,
+    * type of LETTER_NUMBER, currency, connecting punctuation) and digit,
+    * numeric letter (like Roman numerals), combining marks, non-spacing marks,
+    * or isIdentifierIgnorable.
+    * <br>
+    * Java identifier extender =
+    *   [Lu]|[Ll]|[Lt]|[Lm]|[Lo]|[Nl]|[Sc]|[Pc]|[Mn]|[Mc]|[Nd]|[Cf]
+    *   |U+0000-U+0008|U+000E-U+001B|U+007F-U+009F
+    *
+    * @param ch character to test
+    * @return true if ch can follow the first letter in a Java identifier
+    * @see #isIdentifierIgnorable(char)
+    * @see #isJavaIdentifierStart(char)
+    * @see #isLetterOrDigit(char)
+    * @see #isUnicodeIdentifierPart(char)
+    * @since 1.1
+    */
+   public static boolean isJavaIdentifierPart(char ch)
+   {
+     int category = getType(ch);
+     return ((1 << category)
+             & ((1 << UPPERCASE_LETTER)
+                | (1 << LOWERCASE_LETTER)
+                | (1 << TITLECASE_LETTER)
+                | (1 << MODIFIER_LETTER)
+                | (1 << OTHER_LETTER)
+                | (1 << NON_SPACING_MARK)
+                | (1 << COMBINING_SPACING_MARK)
+                | (1 << DECIMAL_DIGIT_NUMBER)
+                | (1 << LETTER_NUMBER)
+                | (1 << CURRENCY_SYMBOL)
+                | (1 << CONNECTOR_PUNCTUATION)
+                | (1 << FORMAT))) != 0
+       || (category == CONTROL && isIdentifierIgnorable(ch));
+   }
+ 
+   /**
+    * Determines if a character can start a Unicode identifier.  Only
+    * letters can start a Unicode identifier, but this includes characters
+    * in LETTER_NUMBER.
+    * <br>
+    * Unicode identifier start = [Lu]|[Ll]|[Lt]|[Lm]|[Lo]|[Nl]
+    *
+    * @param ch character to test
+    * @return true if ch can start a Unicode identifier, else false
+    * @see #isJavaIdentifierStart(char)
+    * @see #isLetter(char)
+    * @see #isUnicodeIdentifierPart(char)
+    * @since 1.1
+    */
+   public static boolean isUnicodeIdentifierStart(char ch)
+   {
+     return ((1 << getType(ch))
+             & ((1 << UPPERCASE_LETTER)
+                | (1 << LOWERCASE_LETTER)
+                | (1 << TITLECASE_LETTER)
+                | (1 << MODIFIER_LETTER)
+                | (1 << OTHER_LETTER)
+                | (1 << LETTER_NUMBER))) != 0;
+   }
+ 
+   /**
+    * Determines if a character can follow the first letter in
+    * a Unicode identifier. This includes letters, connecting punctuation,
+    * digits, numeric letters, combining marks, non-spacing marks, and
+    * isIdentifierIgnorable.
+    * <br>
+    * Unicode identifier extender =
+    *   [Lu]|[Ll]|[Lt]|[Lm]|[Lo]|[Nl]|[Mn]|[Mc]|[Nd]|[Pc]|[Cf]|
+    *   |U+0000-U+0008|U+000E-U+001B|U+007F-U+009F
+    *
+    * @param ch character to test
+    * @return true if ch can follow the first letter in a Unicode identifier
+    * @see #isIdentifierIgnorable(char)
+    * @see #isJavaIdentifierPart(char)
+    * @see #isLetterOrDigit(char)
+    * @see #isUnicodeIdentifierStart(char)
+    * @since 1.1
+    */
+   public static boolean isUnicodeIdentifierPart(char ch)
+   {
+     int category = getType(ch);
+     return ((1 << category)
+             & ((1 << UPPERCASE_LETTER)
+                | (1 << LOWERCASE_LETTER)
+                | (1 << TITLECASE_LETTER)
+                | (1 << MODIFIER_LETTER)
+                | (1 << OTHER_LETTER)
+                | (1 << NON_SPACING_MARK)
+                | (1 << COMBINING_SPACING_MARK)
+                | (1 << DECIMAL_DIGIT_NUMBER)
+                | (1 << LETTER_NUMBER)
+                | (1 << CONNECTOR_PUNCTUATION)
+                | (1 << FORMAT))) != 0
+       || (category == CONTROL && isIdentifierIgnorable(ch));
+   }
+ 
+   /**
+    * Determines if a character is ignorable in a Unicode identifier. This
+    * includes the non-whitespace ISO control characters (<code>'\u0000'</code>
+    * through <code>'\u0008'</code>, <code>'\u000E'</code> through
+    * <code>'\u001B'</code>, and <code>'\u007F'</code> through
+    * <code>'\u009F'</code>), and FORMAT characters.
+    * <br>
+    * Unicode identifier ignorable = [Cf]|U+0000-U+0008|U+000E-U+001B
+    *    |U+007F-U+009F
+    *
+    * @param ch character to test
+    * @return true if ch is ignorable in a Unicode or Java identifier
+    * @see #isJavaIdentifierPart(char)
+    * @see #isUnicodeIdentifierPart(char)
+    * @since 1.1
+    */
+   public static boolean isIdentifierIgnorable(char ch)
+   {
+     return (ch <= '\u009F' && (ch < '\t' || ch >= '\u007F'
+                                || (ch <= '\u001B' && ch >= '\u000E')))
+       || getType(ch) == FORMAT;
+   }
+ 
+   /**
+    * Converts a Unicode character into its lowercase equivalent mapping.
+    * If a mapping does not exist, then the character passed is returned.
+    * Note that isLowerCase(toLowerCase(ch)) does not always return true.
+    *
+    * @param ch character to convert to lowercase
+    * @return lowercase mapping of ch, or ch if lowercase mapping does
+    *         not exist
+    * @see #isLowerCase(char)
+    * @see #isUpperCase(char)
+    * @see #toTitleCase(char)
+    * @see #toUpperCase(char)
+    */
+   public static char toLowerCase(char ch)
+   {
+     // Signedness doesn't matter, as result is cast back to char.
+     return (char) (ch + lower[readChar(ch) >> 7]);
+   }
+ 
+   /**
+    * Converts a Unicode character into its uppercase equivalent mapping.
+    * If a mapping does not exist, then the character passed is returned.
+    * Note that isUpperCase(toUpperCase(ch)) does not always return true.
+    *
+    * @param ch character to convert to uppercase
+    * @return uppercase mapping of ch, or ch if uppercase mapping does
+    *         not exist
+    * @see #isLowerCase(char)
+    * @see #isUpperCase(char)
+    * @see #toLowerCase(char)
+    * @see #toTitleCase(char)
+    */
+   public static char toUpperCase(char ch)
+   {
+     // Signedness doesn't matter, as result is cast back to char.
+     return (char) (ch + upper[readChar(ch) >> 7]);
+   }
+ 
+   /**
+    * Converts a Unicode character into its titlecase equivalent mapping.
+    * If a mapping does not exist, then the character passed is returned.
+    * Note that isTitleCase(toTitleCase(ch)) does not always return true.
+    *
+    * @param ch character to convert to titlecase
+    * @return titlecase mapping of ch, or ch if titlecase mapping does
+    *         not exist
+    * @see #isTitleCase(char)
+    * @see #toLowerCase(char)
+    * @see #toUpperCase(char)
+    */
+   public static char toTitleCase(char ch)
+   {
+     // As title is short, it doesn't hurt to exhaustively iterate over it.
+     for (int i = title.length - 2; i >= 0; i -= 2)
+       if (title[i] == ch)
+         return title[i + 1];
+     return toUpperCase(ch);
+   }
+ 
+   /**
+    * Converts a character into a digit of the specified radix. If the radix
+    * exceeds MIN_RADIX or MAX_RADIX, or if the result of getNumericValue(ch)
+    * exceeds the radix, or if ch is not a decimal digit or in the case
+    * insensitive set of 'a'-'z', the result is -1.
+    * <br>
+    * character argument boundary = [Nd]|U+0041-U+005A|U+0061-U+007A
+    *    |U+FF21-U+FF3A|U+FF41-U+FF5A
+    *
+    * @param ch character to convert into a digit
+    * @param radix radix in which ch is a digit
+    * @return digit which ch represents in radix, or -1 not a valid digit
+    * @see #MIN_RADIX
+    * @see #MAX_RADIX
+    * @see #forDigit(int, int)
+    * @see #isDigit(char)
+    * @see #getNumericValue(char)
+    */
+   public static int digit(char ch, int radix)
+   {
+     if (radix < MIN_RADIX || radix > MAX_RADIX)
+       return -1;
+     char attr = readChar(ch);
+     if (((1 << (attr & TYPE_MASK))
+          & ((1 << UPPERCASE_LETTER)
+             | (1 << LOWERCASE_LETTER)
+             | (1 << DECIMAL_DIGIT_NUMBER))) != 0)
+       {
+         // Signedness doesn't matter; 0xffff vs. -1 are both rejected.
+         int digit = numValue[attr >> 7];
+         return (digit < radix) ? digit : -1;
+       }
+     return -1;
+   }
+ 
+   /**
+    * Returns the Unicode numeric value property of a character. For example,
+    * <code>'\\u216C'</code> (the Roman numeral fifty) returns 50.
+    *
+    * <p>This method also returns values for the letters A through Z, (not
+    * specified by Unicode), in these ranges: <code>'\u0041'</code>
+    * through <code>'\u005A'</code> (uppercase); <code>'\u0061'</code>
+    * through <code>'\u007A'</code> (lowercase); and <code>'\uFF21'</code>
+    * through <code>'\uFF3A'</code>, <code>'\uFF41'</code> through
+    * <code>'\uFF5A'</code> (full width variants).
+    *
+    * <p>If the character lacks a numeric value property, -1 is returned.
+    * If the character has a numeric value property which is not representable
+    * as a nonnegative integer, such as a fraction, -2 is returned.
+    *
+    * character argument boundary = [Nd]|[Nl]|[No]|U+0041-U+005A|U+0061-U+007A
+    *    |U+FF21-U+FF3A|U+FF41-U+FF5A
+    *
+    * @param ch character from which the numeric value property will
+    *        be retrieved
+    * @return the numeric value property of ch, or -1 if it does not exist, or
+    *         -2 if it is not representable as a nonnegative integer
+    * @see #forDigit(int, int)
+    * @see #digit(char, int)
+    * @see #isDigit(char)
+    * @since 1.1
+    */
+   public static int getNumericValue(char ch)
+   {
+     // Treat numValue as signed.
+     return (short) numValue[readChar(ch) >> 7];
+   }
+ 
+   /**
+    * Determines if a character is a ISO-LATIN-1 space. This is only the five
+    * characters <code>'\t'</code>, <code>'\n'</code>, <code>'\f'</code>,
+    * <code>'\r'</code>, and <code>' '</code>.
+    * <br>
+    * Java space = U+0020|U+0009|U+000A|U+000C|U+000D
+    *
+    * @param ch character to test
+    * @return true if ch is a space, else false
+    * @deprecated Replaced by {@link #isWhitespace(char)}
+    * @see #isSpaceChar(char)
+    * @see #isWhitespace(char)
+    */
+   public static boolean isSpace(char ch)
+   {
+     // Performing the subtraction up front alleviates need to compare longs.
+     return ch-- <= ' ' && ((1 << ch)
+                            & ((1 << (' ' - 1))
+                               | (1 << ('\t' - 1))
+                               | (1 << ('\n' - 1))
+                               | (1 << ('\r' - 1))
+                               | (1 << ('\f' - 1)))) != 0;
+   }
+ 
+   /**
+    * Determines if a character is a Unicode space character. This includes
+    * SPACE_SEPARATOR, LINE_SEPARATOR, and PARAGRAPH_SEPARATOR.
+    * <br>
+    * Unicode space = [Zs]|[Zp]|[Zl]
+    *
+    * @param ch character to test
+    * @return true if ch is a Unicode space, else false
+    * @see #isWhitespace(char)
+    * @since 1.1
+    */
+   public static boolean isSpaceChar(char ch)
+   {
+     return ((1 << getType(ch))
+             & ((1 << SPACE_SEPARATOR)
+                | (1 << LINE_SEPARATOR)
+                | (1 << PARAGRAPH_SEPARATOR))) != 0;
+   }
+ 
+   /**
+    * Determines if a character is Java whitespace. This includes Unicode
+    * space characters (SPACE_SEPARATOR, LINE_SEPARATOR, and
+    * PARAGRAPH_SEPARATOR) except the non-breaking spaces
+    * (<code>'\u00A0'</code>, <code>'\u2007'</code>, and <code>'\u202F'</code>);
+    * and these characters: <code>'\u0009'</code>, <code>'\u000A'</code>,
+    * <code>'\u000B'</code>, <code>'\u000C'</code>, <code>'\u000D'</code>,
+    * <code>'\u001C'</code>, <code>'\u001D'</code>, <code>'\u001E'</code>,
+    * and <code>'\u001F'</code>.
+    * <br>
+    * Java whitespace = ([Zs] not Nb)|[Zl]|[Zp]|U+0009-U+000D|U+001C-U+001F
+    *
+    * @param ch character to test
+    * @return true if ch is Java whitespace, else false
+    * @see #isSpaceChar(char)
+    * @since 1.1
+    */
+   public static boolean isWhitespace(char ch)
+   {
+     int attr = readChar(ch);
+     return ((((1 << (attr & TYPE_MASK))
+               & ((1 << SPACE_SEPARATOR)
+                  | (1 << LINE_SEPARATOR)
+                  | (1 << PARAGRAPH_SEPARATOR))) != 0)
+             && (attr & NO_BREAK_MASK) == 0)
+       || (ch <= '\u001F' && ((1 << ch)
+                              & ((1 << '\t')
+                                 | (1 << '\n')
+                                 | (1 << '\u000B')
+                                 | (1 << '\u000C')
+                                 | (1 << '\r')
+                                 | (1 << '\u001C')
+                                 | (1 << '\u001D')
+                                 | (1 << '\u001E')
+                                 | (1 << '\u001F'))) != 0);
+   }
+ 
+   /**
+    * Determines if a character has the ISO Control property.
+    * <br>
+    * ISO Control = [Cc]
+    *
+    * @param ch character to test
+    * @return true if ch is an ISO Control character, else false
+    * @see #isSpaceChar(char)
+    * @see #isWhitespace(char)
+    * @since 1.1
+    */
+   public static boolean isISOControl(char ch)
+   {
+     return getType(ch) == CONTROL;
+   }
+ 
+   /**
+    * Returns the Unicode general category property of a character.
+    *
+    * @param ch character from which the general category property will
+    *        be retrieved
+    * @return the character category property of ch as an integer
+    * @see #UNASSIGNED
+    * @see #UPPERCASE_LETTER
+    * @see #LOWERCASE_LETTER
+    * @see #TITLECASE_LETTER
+    * @see #MODIFIER_LETTER
+    * @see #OTHER_LETTER
+    * @see #NON_SPACING_MARK
+    * @see #ENCLOSING_MARK
+    * @see #COMBINING_SPACING_MARK
+    * @see #DECIMAL_DIGIT_NUMBER
+    * @see #LETTER_NUMBER
+    * @see #OTHER_NUMBER
+    * @see #SPACE_SEPARATOR
+    * @see #LINE_SEPARATOR
+    * @see #PARAGRAPH_SEPARATOR
+    * @see #CONTROL
+    * @see #FORMAT
+    * @see #PRIVATE_USE
+    * @see #SURROGATE
+    * @see #DASH_PUNCTUATION
+    * @see #START_PUNCTUATION
+    * @see #END_PUNCTUATION
+    * @see #CONNECTOR_PUNCTUATION
+    * @see #OTHER_PUNCTUATION
+    * @see #MATH_SYMBOL
+    * @see #CURRENCY_SYMBOL
+    * @see #MODIFIER_SYMBOL
+    * @see #INITIAL_QUOTE_PUNCTUATION
+    * @see #FINAL_QUOTE_PUNCTUATION
+    * @since 1.1
+    */
+   public static int getType(char ch)
+   {
+     return readChar(ch) & TYPE_MASK;
+   }
+ 
+   /**
+    * Converts a digit into a character which represents that digit
+    * in a specified radix. If the radix exceeds MIN_RADIX or MAX_RADIX,
+    * or the digit exceeds the radix, then the null character <code>'\0'</code>
+    * is returned.  Otherwise the return value is in '0'-'9' and 'a'-'z'.
+    * <br>
+    * return value boundary = U+0030-U+0039|U+0061-U+007A
+    *
+    * @param digit digit to be converted into a character
+    * @param radix radix of digit
+    * @return character representing digit in radix, or '\0'
+    * @see #MIN_RADIX
+    * @see #MAX_RADIX
+    * @see #digit(char, int)
+    */
+   public static char forDigit(int digit, int radix)
+   {
+     if (radix < MIN_RADIX || radix > MAX_RADIX
+         || digit < 0 || digit >= radix)
+       return '\0';
+     return Number.digits[digit];
+   }
+ 
+   /**
+    * Returns the Unicode directionality property of the character. This
+    * is used in the visual ordering of text.
+    *
+    * @param ch the character to look up
+    * @return the directionality constant, or DIRECTIONALITY_UNDEFINED
+    * @see #DIRECTIONALITY_UNDEFINED
+    * @see #DIRECTIONALITY_LEFT_TO_RIGHT
+    * @see #DIRECTIONALITY_RIGHT_TO_LEFT
+    * @see #DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC
+    * @see #DIRECTIONALITY_EUROPEAN_NUMBER
+    * @see #DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR
+    * @see #DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
+    * @see #DIRECTIONALITY_ARABIC_NUMBER
+    * @see #DIRECTIONALITY_COMMON_NUMBER_SEPARATOR
+    * @see #DIRECTIONALITY_NONSPACING_MARK
+    * @see #DIRECTIONALITY_BOUNDARY_NEUTRAL
+    * @see #DIRECTIONALITY_PARAGRAPH_SEPARATOR
+    * @see #DIRECTIONALITY_SEGMENT_SEPARATOR
+    * @see #DIRECTIONALITY_WHITESPACE
+    * @see #DIRECTIONALITY_OTHER_NEUTRALS
+    * @see #DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING
+    * @see #DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE
+    * @see #DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING
+    * @see #DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
+    * @see #DIRECTIONALITY_POP_DIRECTIONAL_FORMAT
+    * @since 1.4
+    */
+   public static byte getDirectionality(char ch)
+   {
+     // The result will correctly be signed.
+     return (byte) (direction[readChar(ch) >> 7] >> 2);
+   }
+ 
+   /**
+    * Determines whether the character is mirrored according to Unicode. For
+    * example, <code>\u0028</code> (LEFT PARENTHESIS) appears as '(' in
+    * left-to-right text, but ')' in right-to-left text.
+    *
+    * @param ch the character to look up
+    * @return true if the character is mirrored
+    * @since 1.4
+    */
+   public static boolean isMirrored(char ch)
+   {
+     return (readChar(ch) & MIRROR_MASK) != 0;
+   }
+ 
+   /**
+    * Compares another Character to this Character, numerically.
+    *
+    * @param anotherCharacter Character to compare with this Character
+    * @return a negative integer if this Character is less than
+    *         anotherCharacter, zero if this Character is equal, and
+    *         a positive integer if this Character is greater
+    * @throws NullPointerException if anotherCharacter is null
+    * @since 1.2
+    */
+   public int compareTo(Character anotherCharacter)
+   {
+     return value - anotherCharacter.value;
+   }
+ 
+   /**
+    * Compares an object to this Character.  Assuming the object is a
+    * Character object, this method performs the same comparison as
+    * compareTo(Character).
+    *
+    * @param o object to compare
+    * @return the comparison value
+    * @throws ClassCastException if o is not a Character object
+    * @throws NullPointerException if o is null
+    * @see #compareTo(Character)
+    * @since 1.2
+    */
+   public int compareTo(Object o)
+   {
+     return compareTo((Character) o);
+   }
+ 
+   /**
+    * Returns an <code>Character</code> object wrapping the value.
+    * In contrast to the <code>Character</code> constructor, this method
+    * will cache some values.  It is used by boxing conversion.
+    *
+    * @param val the value to wrap
+    * @return the <code>Character</code>
+    * 
+    * @since 1.5
+    */
+   public static Character valueOf(char val)
+   {
+     if (val > MAX_CACHE)
+       return new Character(val);
+     synchronized (charCache)
+       {
+     if (charCache[val - MIN_VALUE] == null)
+       charCache[val - MIN_VALUE] = new Character(val);
+     return charCache[val - MIN_VALUE];
+       }
+   }
+ 
+   /**
+    * Reverse the bytes in val.
+    * @since 1.5
+    */
+   public static char reverseBytes(char val)
+   {
+     return (char) (((val >> 8) & 0xff) | ((val << 8) & 0xff00));
+   }
+ 
+   /**
+    * Converts a unicode code point to a UTF-16 representation of that
+    * code point.
+    * 
+    * @param codePoint the unicode code point
+    *
+    * @return the UTF-16 representation of that code point
+    *
+    * @throws IllegalArgumentException if the code point is not a valid
+    *         unicode code point
+    *
+    * @since 1.5
+    */
+   public static char[] toChars(int codePoint)
+   {
+     char[] result = new char[charCount(codePoint)];
+     int ignore = toChars(codePoint, result, 0);
+     return result;
+   }
+ 
+   /**
+    * Converts a unicode code point to its UTF-16 representation.
+    *
+    * @param codePoint the unicode code point
+    * @param dst the target char array
+    * @param dstIndex the start index for the target
+    *
+    * @return number of characters written to <code>dst</code>
+    *
+    * @throws IllegalArgumentException if <code>codePoint</code> is not a
+    *         valid unicode code point
+    * @throws NullPointerException if <code>dst</code> is <code>null</code>
+    * @throws IndexOutOfBoundsException if <code>dstIndex</code> is not valid
+    *         in <code>dst</code> or if the UTF-16 representation does not
+    *         fit into <code>dst</code>
+    *
+    * @since 1.5
+    */
+   public static int toChars(int codePoint, char[] dst, int dstIndex)
+   {
+     if (!isValidCodePoint(codePoint))
+       {
+         throw new IllegalArgumentException("not a valid code point: "
+                                            + codePoint);
+       }
+ 
+     int result;
+     if (isSupplementaryCodePoint(codePoint))
+       {
+         // Write second char first to cause IndexOutOfBoundsException
+         // immediately.
+         dst[dstIndex + 1] = (char) ((codePoint & 0x3ff)
+                                     + (int) MIN_LOW_SURROGATE );
+         dst[dstIndex] = (char) ((codePoint >> 10) + (int) MIN_HIGH_SURROGATE);
+         result = 2;
+     }
+     else
+       {
+         dst[dstIndex] = (char) codePoint;
+         result = 1; 
+       }
+     return result;
+   }
+ 
+   /**
+    * Return number of 16-bit characters required to represent the given
+    * code point.
+    *
+    * @param codePoint a unicode code point
+    *
+    * @return 2 if codePoint >= 0x10000, 1 otherwise.
+    *
+    * @since 1.5
+    */
+   public static int charCount(int codePoint)
+   {
+     return 
+       (codePoint >= MIN_SUPPLEMENTARY_CODE_POINT) 
+       ? 2 
+       : 1;
+   }
+ 
+   /**
+    * Determines whether the specified code point is
+    * in the range 0x10000 .. 0x10FFFF, i.e. the character is within the Unicode
+    * supplementary character range.
+    *
+    * @param codePoint a Unicode code point
+    *
+    * @return <code>true</code> if code point is in supplementary range
+    *
+    * @since 1.5
+    */
+   public static boolean isSupplementaryCodePoint(int codePoint)
+   {
+     return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT
+       && codePoint <= MAX_CODE_POINT;
+   }
+ 
+   /**
+    * Determines whether the specified code point is
+    * in the range 0x0000 .. 0x10FFFF, i.e. it is a valid Unicode code point.
+    *
+    * @param codePoint a Unicode code point
+    *
+    * @return <code>true</code> if code point is valid
+    *
+    * @since 1.5
+    */
+   public static boolean isValidCodePoint(int codePoint)
+   {
+     return codePoint >= MIN_CODE_POINT && codePoint <= MAX_CODE_POINT;
+   }
+ 
+   /**
+    * Return true if the given character is a high surrogate.
+    * @param ch the character
+    * @return true if the character is a high surrogate character
+    *
+    * @since 1.5
+    */
+   public static boolean isHighSurrogate(char ch)
+   {
+     return ch >= MIN_HIGH_SURROGATE && ch <= MAX_HIGH_SURROGATE;
+   }
+ 
+   /**
+    * Return true if the given character is a low surrogate.
+    * @param ch the character
+    * @return true if the character is a low surrogate character
+    *
+    * @since 1.5
+    */
+   public static boolean isLowSurrogate(char ch)
+   {
+     return ch >= MIN_LOW_SURROGATE && ch <= MAX_LOW_SURROGATE;
+   }
+ 
+   /**
+    * Return true if the given characters compose a surrogate pair.
+    * This is true if the first character is a high surrogate and the
+    * second character is a low surrogate.
+    * @param ch1 the first character
+    * @param ch2 the first character
+    * @return true if the characters compose a surrogate pair
+    *
+    * @since 1.5
+    */
+   public static boolean isSurrogatePair(char ch1, char ch2)
+   {
+     return isHighSurrogate(ch1) && isLowSurrogate(ch2);
+   }
+ 
+   /**
+    * Given a valid surrogate pair, this returns the corresponding
+    * code point.
+    * @param high the high character of the pair
+    * @param low the low character of the pair
+    * @return the corresponding code point
+    *
+    * @since 1.5
+    */
+   public static int toCodePoint(char high, char low)
+   {
+     return ((high - MIN_HIGH_SURROGATE) << 10) + (low - MIN_LOW_SURROGATE);
+   }
+ 
+   /**
+    * Get the code point at the specified index in the CharSequence.
+    * This is like CharSequence#charAt(int), but if the character is
+    * the start of a surrogate pair, and there is a following
+    * character, and this character completes the pair, then the
+    * corresponding supplementary code point is returned.  Otherwise,
+    * the character at the index is returned.
+    *
+    * @param sequence the CharSequence
+    * @param index the index of the codepoint to get, starting at 0
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    * @since 1.5
+    */
+   public static int codePointAt(CharSequence sequence, int index)
+   {
+     int len = sequence.length();
+     if (index < 0 || index >= len)
+       throw new IndexOutOfBoundsException();
+     char high = sequence.charAt(index);
+     if (! isHighSurrogate(high) || ++index >= len)
+       return high;
+     char low = sequence.charAt(index);
+     if (! isLowSurrogate(low))
+       return high;
+     return toCodePoint(high, low);
+   }
+ 
+   /**
+    * Get the code point at the specified index in the CharSequence.
+    * If the character is the start of a surrogate pair, and there is a
+    * following character, and this character completes the pair, then
+    * the corresponding supplementary code point is returned.
+    * Otherwise, the character at the index is returned.
+    *
+    * @param chars the character array in which to look
+    * @param index the index of the codepoint to get, starting at 0
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    * @since 1.5
+    */
+   public static int codePointAt(char[] chars, int index)
+   {
+     return codePointAt(chars, index, chars.length);
+   }
+ 
+   /**
+    * Get the code point at the specified index in the CharSequence.
+    * If the character is the start of a surrogate pair, and there is a
+    * following character within the specified range, and this
+    * character completes the pair, then the corresponding
+    * supplementary code point is returned.  Otherwise, the character
+    * at the index is returned.
+    *
+    * @param chars the character array in which to look
+    * @param index the index of the codepoint to get, starting at 0
+    * @param limit the limit past which characters should not be examined
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;=
+    * limit, or if limit is negative or &gt;= the length of the array
+    * @since 1.5
+    */
+   public static int codePointAt(char[] chars, int index, int limit)
+   {
+     if (index < 0 || index >= limit || limit < 0 || limit >= chars.length)
+       throw new IndexOutOfBoundsException();
+     char high = chars[index];
+     if (! isHighSurrogate(high) || ++index >= limit)
+       return high;
+     char low = chars[index];
+     if (! isLowSurrogate(low))
+       return high;
+     return toCodePoint(high, low);
+   }
+ 
+   /**
+    * Get the code point before the specified index.  This is like
+    * #codePointAt(char[], int), but checks the characters at
+    * <code>index-1</code> and <code>index-2</code> to see if they form
+    * a supplementary code point.  If they do not, the character at
+    * <code>index-1</code> is returned.
+    *
+    * @param chars the character array
+    * @param index the index just past the codepoint to get, starting at 0
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    * @since 1.5
+    */
+   public static int codePointBefore(char[] chars, int index)
+   {
+     return codePointBefore(chars, index, 1);
+   }
+ 
+   /**
+    * Get the code point before the specified index.  This is like
+    * #codePointAt(char[], int), but checks the characters at
+    * <code>index-1</code> and <code>index-2</code> to see if they form
+    * a supplementary code point.  If they do not, the character at
+    * <code>index-1</code> is returned.  The start parameter is used to
+    * limit the range of the array which may be examined.
+    *
+    * @param chars the character array
+    * @param index the index just past the codepoint to get, starting at 0
+    * @param start the index before which characters should not be examined
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is &gt; start or &gt;
+    * the length of the array, or if limit is negative or &gt;= the
+    * length of the array
+    * @since 1.5
+    */
+   public static int codePointBefore(char[] chars, int index, int start)
+   {
+     if (index < start || index > chars.length
+ 	|| start < 0 || start >= chars.length)
+       throw new IndexOutOfBoundsException();
+     --index;
+     char low = chars[index];
+     if (! isLowSurrogate(low) || --index < start)
+       return low;
+     char high = chars[index];
+     if (! isHighSurrogate(high))
+       return low;
+     return toCodePoint(high, low);
+   }
+ 
+   /**
+    * Get the code point before the specified index.  This is like
+    * #codePointAt(CharSequence, int), but checks the characters at
+    * <code>index-1</code> and <code>index-2</code> to see if they form
+    * a supplementary code point.  If they do not, the character at
+    * <code>index-1</code> is returned.
+    *
+    * @param sequence the CharSequence
+    * @param index the index just past the codepoint to get, starting at 0
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    * @since 1.5
+    */
+   public static int codePointBefore(CharSequence sequence, int index)
+   {
+     int len = sequence.length();
+     if (index < 1 || index > len)
+       throw new IndexOutOfBoundsException();
+     --index;
+     char low = sequence.charAt(index);
+     if (! isLowSurrogate(low) || --index < 0)
+       return low;
+     char high = sequence.charAt(index);
+     if (! isHighSurrogate(high))
+       return low;
+     return toCodePoint(high, low);
+   }
+ } // class Character
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Class.java gcc-4.1.0/libjava/classpath/java/lang/Class.java
*** gcc-4.0.2/libjava/classpath/java/lang/Class.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Class.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1307 ----
+ /* Class.java -- Representation of a Java class.
+    Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
+    Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import gnu.classpath.VMStackWalker;
+ 
+ import java.io.InputStream;
+ import java.io.ObjectStreamClass;
+ import java.io.Serializable;
+ import java.lang.reflect.Array;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Member;
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Modifier;
+ import java.net.URL;
+ import java.security.AccessController;
+ import java.security.AllPermission;
+ import java.security.Permissions;
+ import java.security.PrivilegedAction;
+ import java.security.ProtectionDomain;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ 
+ 
+ /**
+  * A Class represents a Java type.  There will never be multiple Class
+  * objects with identical names and ClassLoaders. Primitive types, array
+  * types, and void also have a Class object.
+  *
+  * <p>Arrays with identical type and number of dimensions share the same class.
+  * The array class ClassLoader is the same as the ClassLoader of the element
+  * type of the array (which can be null to indicate the bootstrap classloader).
+  * The name of an array class is <code>[&lt;signature format&gt;;</code>.
+  * <p> For example,
+  * String[]'s class is <code>[Ljava.lang.String;</code>. boolean, byte,
+  * short, char, int, long, float and double have the "type name" of
+  * Z,B,S,C,I,J,F,D for the purposes of array classes.  If it's a
+  * multidimensioned array, the same principle applies:
+  * <code>int[][][]</code> == <code>[[[I</code>.
+  *
+  * <p>There is no public constructor - Class objects are obtained only through
+  * the virtual machine, as defined in ClassLoaders.
+  *
+  * @serialData Class objects serialize specially:
+  * <code>TC_CLASS ClassDescriptor</code>. For more serialization information,
+  * see {@link ObjectStreamClass}.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @since 1.0
+  * @see ClassLoader
+  */
+ public final class Class implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 3206093459760846163L;
+ 
+   /** The class signers. */
+   private Object[] signers = null;
+   /** The class protection domain. */
+   private final transient ProtectionDomain pd;
+ 
+   /* We use an inner class, so that Class doesn't have a static initializer */
+   private static final class StaticData
+   {
+     static final ProtectionDomain unknownProtectionDomain;
+ 
+     static
+     {
+       Permissions permissions = new Permissions();
+       permissions.add(new AllPermission());
+       unknownProtectionDomain = new ProtectionDomain(null, permissions);
+     }
+   }
+ 
+   final transient Object vmdata;
+ 
+   /** newInstance() caches the default constructor */
+   private transient Constructor constructor;
+ 
+   /**
+    * Class is non-instantiable from Java code; only the VM can create
+    * instances of this class.
+    */
+   Class(Object vmdata)
+   {
+     this(vmdata, null);
+   }
+ 
+   Class(Object vmdata, ProtectionDomain pd)
+   {
+     this.vmdata = vmdata;
+     // If the VM didn't supply a protection domain and the class is an array,
+     // we "inherit" the protection domain from the component type class. This
+     // saves the VM from having to worry about protection domains for array
+     // classes.
+     if (pd == null && isArray())
+       this.pd = getComponentType().pd;
+     else
+       this.pd = pd;
+   }
+ 
+   /**
+    * Use the classloader of the current class to load, link, and initialize
+    * a class. This is equivalent to your code calling
+    * <code>Class.forName(name, true, getClass().getClassLoader())</code>.
+    *
+    * @param name the name of the class to find
+    * @return the Class object representing the class
+    * @throws ClassNotFoundException if the class was not found by the
+    *         classloader
+    * @throws LinkageError if linking the class fails
+    * @throws ExceptionInInitializerError if the class loads, but an exception
+    *         occurs during initialization
+    */
+   public static Class forName(String name) throws ClassNotFoundException
+   {
+     return VMClass.forName(name, true, VMStackWalker.getCallingClassLoader());
+   }
+ 
+   /**
+    * Use the specified classloader to load and link a class. If the loader
+    * is null, this uses the bootstrap class loader (provide the security
+    * check succeeds). Unfortunately, this method cannot be used to obtain
+    * the Class objects for primitive types or for void, you have to use
+    * the fields in the appropriate java.lang wrapper classes.
+    *
+    * <p>Calls <code>classloader.loadclass(name, initialize)</code>.
+    *
+    * @param name the name of the class to find
+    * @param initialize whether or not to initialize the class at this time
+    * @param classloader the classloader to use to find the class; null means
+    *        to use the bootstrap class loader
+    *
+    * @return the class object for the given class
+    *
+    * @throws ClassNotFoundException if the class was not found by the
+    *         classloader
+    * @throws LinkageError if linking the class fails
+    * @throws ExceptionInInitializerError if the class loads, but an exception
+    *         occurs during initialization
+    * @throws SecurityException if the <code>classloader</code> argument
+    *         is <code>null</code> and the caller does not have the
+    *         <code>RuntimePermission("getClassLoader")</code> permission
+    * @see ClassLoader
+    * @since 1.2
+    */
+   public static Class forName(String name, boolean initialize,
+                               ClassLoader classloader)
+     throws ClassNotFoundException
+   {
+     if (classloader == null)
+       {
+         // Check if we may access the bootstrap classloader
+         SecurityManager sm = SecurityManager.current;
+         if (sm != null)
+           {
+             // Get the calling classloader
+             ClassLoader cl = VMStackWalker.getCallingClassLoader();
+             if (cl != null)
+               sm.checkPermission(new RuntimePermission("getClassLoader"));
+           }
+       }
+     return VMClass.forName(name, initialize, classloader);
+   }
+   
+   /**
+    * Get all the public member classes and interfaces declared in this
+    * class or inherited from superclasses. This returns an array of length
+    * 0 if there are no member classes, including for primitive types. A
+    * security check may be performed, with
+    * <code>checkMemberAccess(this, Member.PUBLIC)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @return all public member classes in this class
+    * @throws SecurityException if the security check fails
+    * @since 1.1
+    */
+   public Class[] getClasses()
+   {
+     memberAccessCheck(Member.PUBLIC);
+     return internalGetClasses();
+   }
+ 
+   /**
+    * Like <code>getClasses()</code> but without the security checks.
+    */
+   private Class[] internalGetClasses()
+   {
+     ArrayList list = new ArrayList();
+     list.addAll(Arrays.asList(getDeclaredClasses(true)));
+     Class superClass = getSuperclass();
+     if (superClass != null)
+       list.addAll(Arrays.asList(superClass.internalGetClasses()));
+     return (Class[])list.toArray(new Class[list.size()]);
+   }
+   
+   /**
+    * Get the ClassLoader that loaded this class.  If the class was loaded
+    * by the bootstrap classloader, this method will return null.
+    * If there is a security manager, and the caller's class loader is not
+    * an ancestor of the requested one, a security check of
+    * <code>RuntimePermission("getClassLoader")</code>
+    * must first succeed. Primitive types and void return null.
+    *
+    * @return the ClassLoader that loaded this class
+    * @throws SecurityException if the security check fails
+    * @see ClassLoader
+    * @see RuntimePermission
+    */
+   public ClassLoader getClassLoader()
+   {
+     if (isPrimitive())
+       return null;
+ 
+     ClassLoader loader = VMClass.getClassLoader(this);
+     // Check if we may get the classloader
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       {
+         // Get the calling classloader
+ 	ClassLoader cl = VMStackWalker.getCallingClassLoader();
+         if (cl != null && !cl.isAncestorOf(loader))
+           sm.checkPermission(new RuntimePermission("getClassLoader"));
+       }
+     return loader;
+   }
+ 
+   /**
+    * If this is an array, get the Class representing the type of array.
+    * Examples: "[[Ljava.lang.String;" would return "[Ljava.lang.String;", and
+    * calling getComponentType on that would give "java.lang.String".  If
+    * this is not an array, returns null.
+    *
+    * @return the array type of this class, or null
+    * @see Array
+    * @since 1.1
+    */
+   public Class getComponentType()
+   {
+     return VMClass.getComponentType (this);
+   }
+ 
+   /**
+    * Get a public constructor declared in this class. If the constructor takes
+    * no argument, an array of zero elements and null are equivalent for the
+    * types argument. A security check may be performed, with
+    * <code>checkMemberAccess(this, Member.PUBLIC)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @param types the type of each parameter
+    * @return the constructor
+    * @throws NoSuchMethodException if the constructor does not exist
+    * @throws SecurityException if the security check fails
+    * @see #getConstructors()
+    * @since 1.1
+    */
+   public Constructor getConstructor(Class[] types) throws NoSuchMethodException
+   {
+     memberAccessCheck(Member.PUBLIC);
+     Constructor[] constructors = getDeclaredConstructors(true);
+     for (int i = 0; i < constructors.length; i++)
+       {
+ 	Constructor constructor = constructors[i];
+ 	if (matchParameters(types, constructor.getParameterTypes()))
+ 	  return constructor;
+       }
+     throw new NoSuchMethodException();
+   }
+ 
+   /**
+    * Get all the public constructors of this class. This returns an array of
+    * length 0 if there are no constructors, including for primitive types,
+    * arrays, and interfaces. It does, however, include the default
+    * constructor if one was supplied by the compiler. A security check may
+    * be performed, with <code>checkMemberAccess(this, Member.PUBLIC)</code>
+    * as well as <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @return all public constructors in this class
+    * @throws SecurityException if the security check fails
+    * @since 1.1
+    */
+   public Constructor[] getConstructors()
+   {
+     memberAccessCheck(Member.PUBLIC);
+     return getDeclaredConstructors(true);
+   }
+ 
+   /**
+    * Get a constructor declared in this class. If the constructor takes no
+    * argument, an array of zero elements and null are equivalent for the
+    * types argument. A security check may be performed, with
+    * <code>checkMemberAccess(this, Member.DECLARED)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @param types the type of each parameter
+    * @return the constructor
+    * @throws NoSuchMethodException if the constructor does not exist
+    * @throws SecurityException if the security check fails
+    * @see #getDeclaredConstructors()
+    * @since 1.1
+    */
+   public Constructor getDeclaredConstructor(Class[] types)
+     throws NoSuchMethodException
+   {
+     memberAccessCheck(Member.DECLARED);
+     Constructor[] constructors = getDeclaredConstructors(false);
+     for (int i = 0; i < constructors.length; i++)
+       {
+ 	Constructor constructor = constructors[i];
+ 	if (matchParameters(types, constructor.getParameterTypes()))
+ 	  return constructor;
+       }
+     throw new NoSuchMethodException();
+   }
+ 
+   /**
+    * Get all the declared member classes and interfaces in this class, but
+    * not those inherited from superclasses. This returns an array of length
+    * 0 if there are no member classes, including for primitive types. A
+    * security check may be performed, with
+    * <code>checkMemberAccess(this, Member.DECLARED)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @return all declared member classes in this class
+    * @throws SecurityException if the security check fails
+    * @since 1.1
+    */
+   public Class[] getDeclaredClasses()
+   {
+     memberAccessCheck(Member.DECLARED);
+     return getDeclaredClasses(false);
+   }
+ 
+   Class[] getDeclaredClasses (boolean publicOnly)
+   {
+     return VMClass.getDeclaredClasses (this, publicOnly);
+   }
+ 
+   /**
+    * Get all the declared constructors of this class. This returns an array of
+    * length 0 if there are no constructors, including for primitive types,
+    * arrays, and interfaces. It does, however, include the default
+    * constructor if one was supplied by the compiler. A security check may
+    * be performed, with <code>checkMemberAccess(this, Member.DECLARED)</code>
+    * as well as <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @return all constructors in this class
+    * @throws SecurityException if the security check fails
+    * @since 1.1
+    */
+   public Constructor[] getDeclaredConstructors()
+   {
+     memberAccessCheck(Member.DECLARED);
+     return getDeclaredConstructors(false);
+   }
+ 
+   Constructor[] getDeclaredConstructors (boolean publicOnly)
+   {
+     return VMClass.getDeclaredConstructors (this, publicOnly);
+   }
+   
+   /**
+    * Get a field declared in this class, where name is its simple name. The
+    * implicit length field of arrays is not available. A security check may
+    * be performed, with <code>checkMemberAccess(this, Member.DECLARED)</code>
+    * as well as <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @param name the name of the field
+    * @return the field
+    * @throws NoSuchFieldException if the field does not exist
+    * @throws SecurityException if the security check fails
+    * @see #getDeclaredFields()
+    * @since 1.1
+    */
+   public Field getDeclaredField(String name) throws NoSuchFieldException
+   {
+     memberAccessCheck(Member.DECLARED);
+     Field[] fields = getDeclaredFields(false);
+     for (int i = 0; i < fields.length; i++)
+       {
+ 	if (fields[i].getName().equals(name))
+ 	  return fields[i];
+       }
+     throw new NoSuchFieldException();
+   }
+ 
+   /**
+    * Get all the declared fields in this class, but not those inherited from
+    * superclasses. This returns an array of length 0 if there are no fields,
+    * including for primitive types. This does not return the implicit length
+    * field of arrays. A security check may be performed, with
+    * <code>checkMemberAccess(this, Member.DECLARED)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @return all declared fields in this class
+    * @throws SecurityException if the security check fails
+    * @since 1.1
+    */
+   public Field[] getDeclaredFields()
+   {
+     memberAccessCheck(Member.DECLARED);
+     return getDeclaredFields(false);
+   }
+ 
+   Field[] getDeclaredFields (boolean publicOnly)
+   {
+     return VMClass.getDeclaredFields (this, publicOnly);
+   }
+ 
+   /**
+    * Get a method declared in this class, where name is its simple name. The
+    * implicit methods of Object are not available from arrays or interfaces.
+    * Constructors (named "&lt;init&gt;" in the class file) and class initializers
+    * (name "&lt;clinit&gt;") are not available.  The Virtual Machine allows
+    * multiple methods with the same signature but differing return types; in
+    * such a case the most specific return types are favored, then the final
+    * choice is arbitrary. If the method takes no argument, an array of zero
+    * elements and null are equivalent for the types argument. A security
+    * check may be performed, with
+    * <code>checkMemberAccess(this, Member.DECLARED)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @param methodName the name of the method
+    * @param types the type of each parameter
+    * @return the method
+    * @throws NoSuchMethodException if the method does not exist
+    * @throws SecurityException if the security check fails
+    * @see #getDeclaredMethods()
+    * @since 1.1
+    */
+   public Method getDeclaredMethod(String methodName, Class[] types)
+     throws NoSuchMethodException
+   {
+     memberAccessCheck(Member.DECLARED);
+     Method match = matchMethod(getDeclaredMethods(false), methodName, types);
+     if (match == null)
+       throw new NoSuchMethodException(methodName);
+     return match;
+   }
+ 
+   /**
+    * Get all the declared methods in this class, but not those inherited from
+    * superclasses. This returns an array of length 0 if there are no methods,
+    * including for primitive types. This does include the implicit methods of
+    * arrays and interfaces which mirror methods of Object, nor does it
+    * include constructors or the class initialization methods. The Virtual
+    * Machine allows multiple methods with the same signature but differing
+    * return types; all such methods are in the returned array. A security
+    * check may be performed, with
+    * <code>checkMemberAccess(this, Member.DECLARED)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @return all declared methods in this class
+    * @throws SecurityException if the security check fails
+    * @since 1.1
+    */
+   public Method[] getDeclaredMethods()
+   {
+     memberAccessCheck(Member.DECLARED);
+     return getDeclaredMethods(false);
+   }
+ 
+   Method[] getDeclaredMethods (boolean publicOnly)
+   {
+     return VMClass.getDeclaredMethods (this, publicOnly);
+   }
+  
+   /**
+    * If this is a nested or inner class, return the class that declared it.
+    * If not, return null.
+    *
+    * @return the declaring class of this class
+    * @since 1.1
+    */
+   public Class getDeclaringClass()
+   {
+     return VMClass.getDeclaringClass (this);
+   }
+ 
+   /**
+    * Get a public field declared or inherited in this class, where name is
+    * its simple name. If the class contains multiple accessible fields by
+    * that name, an arbitrary one is returned. The implicit length field of
+    * arrays is not available. A security check may be performed, with
+    * <code>checkMemberAccess(this, Member.PUBLIC)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @param fieldName the name of the field
+    * @return the field
+    * @throws NoSuchFieldException if the field does not exist
+    * @throws SecurityException if the security check fails
+    * @see #getFields()
+    * @since 1.1
+    */
+   public Field getField(String fieldName)
+     throws NoSuchFieldException
+   {
+     memberAccessCheck(Member.PUBLIC);
+     Field field = internalGetField(fieldName);
+     if (field == null)
+       throw new NoSuchFieldException(fieldName);
+     return field;
+   }
+ 
+   /**
+    * Get all the public fields declared in this class or inherited from
+    * superclasses. This returns an array of length 0 if there are no fields,
+    * including for primitive types. This does not return the implicit length
+    * field of arrays. A security check may be performed, with
+    * <code>checkMemberAccess(this, Member.PUBLIC)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @return all public fields in this class
+    * @throws SecurityException if the security check fails
+    * @since 1.1
+    */
+   public Field[] getFields()
+   {
+     memberAccessCheck(Member.PUBLIC);
+     return internalGetFields();
+   }
+ 
+   /**
+    * Like <code>getFields()</code> but without the security checks.
+    */
+   private Field[] internalGetFields()
+   {
+     HashSet set = new HashSet();
+     set.addAll(Arrays.asList(getDeclaredFields(true)));
+     Class[] interfaces = getInterfaces();
+     for (int i = 0; i < interfaces.length; i++)
+       set.addAll(Arrays.asList(interfaces[i].internalGetFields()));
+     Class superClass = getSuperclass();
+     if (superClass != null)
+       set.addAll(Arrays.asList(superClass.internalGetFields()));
+     return (Field[])set.toArray(new Field[set.size()]);
+   }
+ 
+   /**
+    * Returns the <code>Package</code> in which this class is defined
+    * Returns null when this information is not available from the
+    * classloader of this class or when the classloader of this class
+    * is null.
+    *
+    * @return the package for this class, if it is available
+    * @since 1.2
+    */
+   public Package getPackage()
+   {
+     ClassLoader cl = getClassLoader();
+     if (cl != null)
+       return cl.getPackage(getPackagePortion(getName()));
+     else
+       return VMClassLoader.getPackage(getPackagePortion(getName()));
+   }
+ 
+   /**
+    * Get the interfaces this class <em>directly</em> implements, in the
+    * order that they were declared. This returns an empty array, not null,
+    * for Object, primitives, void, and classes or interfaces with no direct
+    * superinterface. Array types return Cloneable and Serializable.
+    *
+    * @return the interfaces this class directly implements
+    */
+   public Class[] getInterfaces()
+   {
+     return VMClass.getInterfaces (this);
+   }
+ 
+   private static final class MethodKey
+   {
+     private String name;
+     private Class[] params;
+     private Class returnType;
+     private int hash;
+     
+     MethodKey(Method m)
+     {
+       name = m.getName();
+       params = m.getParameterTypes();
+       returnType = m.getReturnType();
+       hash = name.hashCode() ^ returnType.hashCode();
+       for(int i = 0; i < params.length; i++)
+ 	{
+ 	  hash ^= params[i].hashCode();
+ 	}
+     }
+     
+     public boolean equals(Object o)
+     {
+       if(o instanceof MethodKey)
+ 	{
+ 	  MethodKey m = (MethodKey)o;
+ 	  if(m.name.equals(name) && m.params.length == params.length && m.returnType == returnType)
+ 	    {
+ 	      for(int i = 0; i < params.length; i++)
+ 		{
+ 		  if(m.params[i] != params[i])
+ 		    {
+ 		      return false;
+ 		    }
+ 		}
+ 	      return true;
+ 	    }
+ 	}
+       return false;
+     }
+     
+     public int hashCode()
+     {
+       return hash;
+     }
+   }
+   
+   /**
+    * Get a public method declared or inherited in this class, where name is
+    * its simple name. The implicit methods of Object are not available from
+    * interfaces.  Constructors (named "&lt;init&gt;" in the class file) and class
+    * initializers (name "&lt;clinit&gt;") are not available.  The Virtual
+    * Machine allows multiple methods with the same signature but differing
+    * return types, and the class can inherit multiple methods of the same
+    * return type; in such a case the most specific return types are favored,
+    * then the final choice is arbitrary. If the method takes no argument, an
+    * array of zero elements and null are equivalent for the types argument.
+    * A security check may be performed, with
+    * <code>checkMemberAccess(this, Member.PUBLIC)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @param methodName the name of the method
+    * @param types the type of each parameter
+    * @return the method
+    * @throws NoSuchMethodException if the method does not exist
+    * @throws SecurityException if the security check fails
+    * @see #getMethods()
+    * @since 1.1
+    */
+   public Method getMethod(String methodName, Class[] types)
+     throws NoSuchMethodException
+   {
+     memberAccessCheck(Member.PUBLIC);
+     Method method = internalGetMethod(methodName, types);
+     if (method == null)
+       throw new NoSuchMethodException(methodName);
+     return method;
+   }
+ 
+   /**
+    * Like <code>getMethod(String,Class[])</code> but without the security
+    * checks and returns null instead of throwing NoSuchMethodException.
+    */
+   private Method internalGetMethod(String methodName, Class[] args)
+   {
+     Method match = matchMethod(getDeclaredMethods(true), methodName, args);
+     if (match != null)
+       return match;
+     Class superClass = getSuperclass();
+     if (superClass != null)
+       {
+ 	match = superClass.internalGetMethod(methodName, args);
+ 	if(match != null)
+ 	  return match;
+       }
+     Class[] interfaces = getInterfaces();
+     for (int i = 0; i < interfaces.length; i++)
+       {
+ 	match = interfaces[i].internalGetMethod(methodName, args);
+ 	if (match != null)
+ 	  return match;
+       }
+     return null;
+   }
+ 
+   /** 
+    * Find the best matching method in <code>list</code> according to
+    * the definition of ``best matching'' used by <code>getMethod()</code>
+    *
+    * <p>
+    * Returns the method if any, otherwise <code>null</code>.
+    *
+    * @param list List of methods to search
+    * @param name Name of method
+    * @param args Method parameter types
+    * @see #getMethod(String, Class[])
+    */
+   private static Method matchMethod(Method[] list, String name, Class[] args)
+   {
+     Method match = null;
+     for (int i = 0; i < list.length; i++)
+       {
+ 	Method method = list[i];
+ 	if (!method.getName().equals(name))
+ 	  continue;
+ 	if (!matchParameters(args, method.getParameterTypes()))
+ 	  continue;
+ 	if (match == null
+ 	    || match.getReturnType().isAssignableFrom(method.getReturnType()))
+ 	  match = method;
+       }
+     return match;
+   }
+ 
+   /**
+    * Check for an exact match between parameter type lists.
+    * Either list may be <code>null</code> to mean a list of
+    * length zero.
+    */
+   private static boolean matchParameters(Class[] types1, Class[] types2)
+   {
+     if (types1 == null)
+       return types2 == null || types2.length == 0;
+     if (types2 == null)
+       return types1 == null || types1.length == 0;
+     if (types1.length != types2.length)
+       return false;
+     for (int i = 0; i < types1.length; i++)
+       {
+ 	if (types1[i] != types2[i])
+ 	  return false;
+       }
+     return true;
+   }
+   
+   /**
+    * Get all the public methods declared in this class or inherited from
+    * superclasses. This returns an array of length 0 if there are no methods,
+    * including for primitive types. This does not include the implicit
+    * methods of interfaces which mirror methods of Object, nor does it
+    * include constructors or the class initialization methods. The Virtual
+    * Machine allows multiple methods with the same signature but differing
+    * return types; all such methods are in the returned array. A security
+    * check may be performed, with
+    * <code>checkMemberAccess(this, Member.PUBLIC)</code> as well as
+    * <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @return all public methods in this class
+    * @throws SecurityException if the security check fails
+    * @since 1.1
+    */
+   public Method[] getMethods()
+   {
+     memberAccessCheck(Member.PUBLIC);
+     // NOTE the API docs claim that no methods are returned for arrays,
+     // but Sun's implementation *does* return the public methods of Object
+     // (as would be expected), so we follow their implementation instead
+     // of their documentation.
+     return internalGetMethods();
+   }
+ 
+   /**
+    * Like <code>getMethods()</code> but without the security checks.
+    */
+   private Method[] internalGetMethods()
+   {
+     HashMap map = new HashMap();
+     Method[] methods;
+     Class[] interfaces = getInterfaces();
+     for(int i = 0; i < interfaces.length; i++)
+       {
+ 	methods = interfaces[i].internalGetMethods();
+ 	for(int j = 0; j < methods.length; j++)
+ 	  {
+ 	    map.put(new MethodKey(methods[j]), methods[j]);
+ 	  }
+       }
+     Class superClass = getSuperclass();
+     if(superClass != null)
+       {
+ 	methods = superClass.internalGetMethods();
+ 	for(int i = 0; i < methods.length; i++)
+ 	  {
+ 	    map.put(new MethodKey(methods[i]), methods[i]);
+ 	  }
+       }
+     methods = getDeclaredMethods(true);
+     for(int i = 0; i < methods.length; i++)
+       {
+ 	map.put(new MethodKey(methods[i]), methods[i]);
+       }
+     return (Method[])map.values().toArray(new Method[map.size()]);
+   }
+ 
+   /**
+    * Get the modifiers of this class.  These can be decoded using Modifier,
+    * and is limited to one of public, protected, or private, and any of
+    * final, static, abstract, or interface. An array class has the same
+    * public, protected, or private modifier as its component type, and is
+    * marked final but not an interface. Primitive types and void are marked
+    * public and final, but not an interface.
+    *
+    * @return the modifiers of this class
+    * @see Modifier
+    * @since 1.1
+    */
+   public int getModifiers()
+   {
+     return VMClass.getModifiers (this, false);
+   }
+   
+   /**
+    * Get the name of this class, separated by dots for package separators.
+    * If the class represents a primitive type, or void, then the
+    * name of the type as it appears in the Java programming language
+    * is returned.  For instance, <code>Byte.TYPE.getName()</code>
+    * returns "byte".
+    *
+    * Arrays are specially encoded as shown on this table.
+    * <pre>
+    * array type          [<em>element type</em>
+    *                     (note that the element type is encoded per
+    *                      this table)
+    * boolean             Z
+    * byte                B
+    * char                C
+    * short               S
+    * int                 I
+    * long                J
+    * float               F
+    * double              D
+    * void                V
+    * class or interface, alone: &lt;dotted name&gt;
+    * class or interface, as element type: L&lt;dotted name&gt;;
+    * </pre>
+    *
+    * @return the name of this class
+    */
+   public String getName()
+   { 
+     return VMClass.getName (this);
+   }
+ 
+   /**
+    * Get a resource URL using this class's package using the
+    * getClassLoader().getResource() method.  If this class was loaded using
+    * the system classloader, ClassLoader.getSystemResource() is used instead.
+    *
+    * <p>If the name you supply is absolute (it starts with a <code>/</code>),
+    * then the leading <code>/</code> is removed and it is passed on to
+    * getResource(). If it is relative, the package name is prepended, and
+    * <code>.</code>'s are replaced with <code>/</code>.
+    *
+    * <p>The URL returned is system- and classloader-dependent, and could
+    * change across implementations.
+    *
+    * @param resourceName the name of the resource, generally a path
+    * @return the URL to the resource
+    * @throws NullPointerException if name is null
+    * @since 1.1
+    */
+   public URL getResource(String resourceName)
+   {
+     String name = resourcePath(resourceName);
+     ClassLoader loader = getClassLoader();
+     if (loader == null)
+       return ClassLoader.getSystemResource(name);
+     return loader.getResource(name);
+   }
+ 
+   /**
+    * Get a resource using this class's package using the
+    * getClassLoader().getResourceAsStream() method.  If this class was loaded
+    * using the system classloader, ClassLoader.getSystemResource() is used
+    * instead.
+    *
+    * <p>If the name you supply is absolute (it starts with a <code>/</code>),
+    * then the leading <code>/</code> is removed and it is passed on to
+    * getResource(). If it is relative, the package name is prepended, and
+    * <code>.</code>'s are replaced with <code>/</code>.
+    *
+    * <p>The URL returned is system- and classloader-dependent, and could
+    * change across implementations.
+    *
+    * @param resourceName the name of the resource, generally a path
+    * @return an InputStream with the contents of the resource in it, or null
+    * @throws NullPointerException if name is null
+    * @since 1.1
+    */
+   public InputStream getResourceAsStream(String resourceName)
+   {
+     String name = resourcePath(resourceName);
+     ClassLoader loader = getClassLoader();
+     if (loader == null)
+       return ClassLoader.getSystemResourceAsStream(name);
+     return loader.getResourceAsStream(name);
+   }
+ 
+   private String resourcePath(String resourceName)
+   {
+     if (resourceName.length() > 0)
+       {
+ 	if (resourceName.charAt(0) != '/')
+ 	  {
+ 	    String pkg = getPackagePortion(getName());
+ 	    if (pkg.length() > 0)
+ 	      resourceName = pkg.replace('.','/') + '/' + resourceName;
+ 	  }
+ 	else
+ 	  {
+ 	    resourceName = resourceName.substring(1);
+ 	  }
+       }
+     return resourceName;
+   }
+ 
+   /**
+    * Get the signers of this class. This returns null if there are no signers,
+    * such as for primitive types or void.
+    *
+    * @return the signers of this class
+    * @since 1.1
+    */
+   public Object[] getSigners()
+   {
+     return signers == null ? null : (Object[]) signers.clone ();
+   }
+   
+   /**
+    * Set the signers of this class.
+    *
+    * @param signers the signers of this class
+    */
+   void setSigners(Object[] signers)
+   {
+     this.signers = signers;
+   }
+ 
+   /**
+    * Get the direct superclass of this class.  If this is an interface,
+    * Object, a primitive type, or void, it will return null. If this is an
+    * array type, it will return Object.
+    *
+    * @return the direct superclass of this class
+    */
+   public Class getSuperclass()
+   {
+     return VMClass.getSuperclass (this);
+   }
+   
+   /**
+    * Return whether this class is an array type.
+    *
+    * @return whether this class is an array type
+    * @since 1.1
+    */
+   public boolean isArray()
+   {
+     return VMClass.isArray (this);
+   }
+   
+   /**
+    * Discover whether an instance of the Class parameter would be an
+    * instance of this Class as well.  Think of doing
+    * <code>isInstance(c.newInstance())</code> or even
+    * <code>c.newInstance() instanceof (this class)</code>. While this
+    * checks widening conversions for objects, it must be exact for primitive
+    * types.
+    *
+    * @param c the class to check
+    * @return whether an instance of c would be an instance of this class
+    *         as well
+    * @throws NullPointerException if c is null
+    * @since 1.1
+    */
+   public boolean isAssignableFrom(Class c)
+   {
+     return VMClass.isAssignableFrom (this, c);
+   }
+  
+   /**
+    * Discover whether an Object is an instance of this Class.  Think of it
+    * as almost like <code>o instanceof (this class)</code>.
+    *
+    * @param o the Object to check
+    * @return whether o is an instance of this class
+    * @since 1.1
+    */
+   public boolean isInstance(Object o)
+   {
+     return VMClass.isInstance (this, o);
+   }
+   
+   /**
+    * Check whether this class is an interface or not.  Array types are not
+    * interfaces.
+    *
+    * @return whether this class is an interface or not
+    */
+   public boolean isInterface()
+   {
+     return VMClass.isInterface (this);
+   }
+   
+   /**
+    * Return whether this class is a primitive type.  A primitive type class
+    * is a class representing a kind of "placeholder" for the various
+    * primitive types, or void.  You can access the various primitive type
+    * classes through java.lang.Boolean.TYPE, java.lang.Integer.TYPE, etc.,
+    * or through boolean.class, int.class, etc.
+    *
+    * @return whether this class is a primitive type
+    * @see Boolean#TYPE
+    * @see Byte#TYPE
+    * @see Character#TYPE
+    * @see Short#TYPE
+    * @see Integer#TYPE
+    * @see Long#TYPE
+    * @see Float#TYPE
+    * @see Double#TYPE
+    * @see Void#TYPE
+    * @since 1.1
+    */
+   public boolean isPrimitive()
+   {
+     return VMClass.isPrimitive (this);
+   }
+   
+   /**
+    * Get a new instance of this class by calling the no-argument constructor.
+    * The class is initialized if it has not been already. A security check
+    * may be performed, with <code>checkMemberAccess(this, Member.PUBLIC)</code>
+    * as well as <code>checkPackageAccess</code> both having to succeed.
+    *
+    * @return a new instance of this class
+    * @throws InstantiationException if there is not a no-arg constructor
+    *         for this class, including interfaces, abstract classes, arrays,
+    *         primitive types, and void; or if an exception occurred during
+    *         the constructor
+    * @throws IllegalAccessException if you are not allowed to access the
+    *         no-arg constructor because of scoping reasons
+    * @throws SecurityException if the security check fails
+    * @throws ExceptionInInitializerError if class initialization caused by
+    *         this call fails with an exception
+    */
+   public Object newInstance()
+     throws InstantiationException, IllegalAccessException
+   {
+     memberAccessCheck(Member.PUBLIC);
+     Constructor constructor;
+     synchronized(this)
+       {
+ 	constructor = this.constructor;
+       }
+     if (constructor == null)
+       {
+ 	Constructor[] constructors = getDeclaredConstructors(false);
+ 	for (int i = 0; i < constructors.length; i++)
+ 	  {
+ 	    if (constructors[i].getParameterTypes().length == 0)
+ 	      {
+ 		constructor = constructors[i];
+ 		break;
+ 	      }
+ 	  }
+ 	if (constructor == null)
+ 	  throw new InstantiationException(getName());
+ 	if (!Modifier.isPublic(constructor.getModifiers())
+             || !Modifier.isPublic(VMClass.getModifiers(this, true)))
+ 	  {
+ 	    final Constructor finalConstructor = constructor;
+ 	    AccessController.doPrivileged(new PrivilegedAction()
+ 	      {
+ 		public Object run()
+ 	        {
+ 		  finalConstructor.setAccessible(true);
+ 		  return null;
+ 		}
+ 	      });
+ 	  }
+ 	synchronized(this)
+ 	  {
+ 	    if (this.constructor == null)
+ 	      this.constructor = constructor;
+ 	  }	    
+       }
+     int modifiers = constructor.getModifiers();
+     if (!Modifier.isPublic(modifiers)
+         || !Modifier.isPublic(VMClass.getModifiers(this, true)))
+       {
+ 	Class caller = VMStackWalker.getCallingClass();
+ 	if (caller != null &&
+ 	    caller != this &&
+ 	    (Modifier.isPrivate(modifiers)
+ 	     || getClassLoader() != caller.getClassLoader()
+ 	     || !getPackagePortion(getName())
+ 	     .equals(getPackagePortion(caller.getName()))))
+ 	  throw new IllegalAccessException(getName()
+ 					   + " has an inaccessible constructor");
+       }
+     try
+       {
+         return constructor.newInstance(null);
+       }
+     catch (InvocationTargetException e)
+       {
+ 	VMClass.throwException(e.getTargetException());
+ 	throw (InternalError) new InternalError
+ 	  ("VMClass.throwException returned").initCause(e);
+       }
+   }
+ 
+   /**
+    * Returns the protection domain of this class. If the classloader did not
+    * record the protection domain when creating this class the unknown
+    * protection domain is returned which has a <code>null</code> code source
+    * and all permissions. A security check may be performed, with
+    * <code>RuntimePermission("getProtectionDomain")</code>.
+    *
+    * @return the protection domain
+    * @throws SecurityException if the security manager exists and the caller
+    * does not have <code>RuntimePermission("getProtectionDomain")</code>.
+    * @see RuntimePermission
+    * @since 1.2
+    */
+   public ProtectionDomain getProtectionDomain()
+   {
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("getProtectionDomain"));
+ 
+     return pd == null ? StaticData.unknownProtectionDomain : pd;
+   }
+ 
+   /**
+    * Return the human-readable form of this Object.  For an object, this
+    * is either "interface " or "class " followed by <code>getName()</code>,
+    * for primitive types and void it is just <code>getName()</code>.
+    *
+    * @return the human-readable form of this Object
+    */
+   public String toString()
+   {
+     if (isPrimitive())
+       return getName();
+     return (isInterface() ? "interface " : "class ") + getName();
+   }
+ 
+   /**
+    * Returns the desired assertion status of this class, if it were to be
+    * initialized at this moment. The class assertion status, if set, is
+    * returned; the backup is the default package status; then if there is
+    * a class loader, that default is returned; and finally the system default
+    * is returned. This method seldom needs calling in user code, but exists
+    * for compilers to implement the assert statement. Note that there is no
+    * guarantee that the result of this method matches the class's actual
+    * assertion status.
+    *
+    * @return the desired assertion status
+    * @see ClassLoader#setClassAssertionStatus(String, boolean)
+    * @see ClassLoader#setPackageAssertionStatus(String, boolean)
+    * @see ClassLoader#setDefaultAssertionStatus(boolean)
+    * @since 1.4
+    */
+   public boolean desiredAssertionStatus()
+   {
+     ClassLoader c = getClassLoader();
+     Object status;
+     if (c == null)
+       return VMClassLoader.defaultAssertionStatus();
+     if (c.classAssertionStatus != null)
+       synchronized (c)
+         {
+           status = c.classAssertionStatus.get(getName());
+           if (status != null)
+             return status.equals(Boolean.TRUE);
+         }
+     else
+       {
+         status = ClassLoader.StaticData.
+                     systemClassAssertionStatus.get(getName());
+         if (status != null)
+           return status.equals(Boolean.TRUE);
+       }
+     if (c.packageAssertionStatus != null)
+       synchronized (c)
+         {
+           String name = getPackagePortion(getName());
+           if ("".equals(name))
+             status = c.packageAssertionStatus.get(null);
+           else
+             do
+               {
+                 status = c.packageAssertionStatus.get(name);
+                 name = getPackagePortion(name);
+               }
+             while (! "".equals(name) && status == null);
+           if (status != null)
+             return status.equals(Boolean.TRUE);
+         }
+     else
+       {
+         String name = getPackagePortion(getName());
+         if ("".equals(name))
+           status = ClassLoader.StaticData.
+                     systemPackageAssertionStatus.get(null);
+         else
+           do
+             {
+               status = ClassLoader.StaticData.
+                         systemPackageAssertionStatus.get(name);
+               name = getPackagePortion(name);
+             }
+           while (! "".equals(name) && status == null);
+         if (status != null)
+           return status.equals(Boolean.TRUE);
+       }
+     return c.defaultAssertionStatus;
+   }
+ 
+   /**
+    * Like <code>getField(String)</code> but without the security checks and returns null
+    * instead of throwing NoSuchFieldException.
+    */
+   private Field internalGetField(String name)
+   {
+     Field[] fields = getDeclaredFields(true);
+     for (int i = 0; i < fields.length; i++)
+       {
+ 	Field field = fields[i];
+ 	if (field.getName().equals(name))
+ 	  return field;
+       }
+     Class[] interfaces = getInterfaces();
+     for (int i = 0; i < interfaces.length; i++)
+       {
+ 	Field field = interfaces[i].internalGetField(name);
+ 	if(field != null)
+ 	  return field;
+       }
+     Class superClass = getSuperclass();
+     if (superClass != null)
+       return superClass.internalGetField(name);
+     return null;
+   }
+ 
+   /**
+    * Strip the last portion of the name (after the last dot).
+    *
+    * @param name the name to get package of
+    * @return the package name, or "" if no package
+    */
+   private static String getPackagePortion(String name)
+   {
+     int lastInd = name.lastIndexOf('.');
+     if (lastInd == -1)
+       return "";
+     return name.substring(0, lastInd);
+   }
+ 
+   /**
+    * Perform security checks common to all of the methods that
+    * get members of this Class.
+    */
+   private void memberAccessCheck(int which)
+   {
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       {
+ 	sm.checkMemberAccess(this, which);
+ 	Package pkg = getPackage();
+ 	if (pkg != null)
+ 	  sm.checkPackageAccess(pkg.getName());
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ClassCastException.java gcc-4.1.0/libjava/classpath/java/lang/ClassCastException.java
*** gcc-4.0.2/libjava/classpath/java/lang/ClassCastException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ClassCastException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* ClassCastException.java -- exception thrown on bad cast
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when an attempt is made to cast an object which is not of the
+  * appropriate runtime type. For example:<br>
+  * <pre>
+  * Object o = new Vector();
+  * String s = (String) o;
+  * </pre>
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class ClassCastException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -9223365651070458532L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public ClassCastException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ClassCastException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ClassCircularityError.java gcc-4.1.0/libjava/classpath/java/lang/ClassCircularityError.java
*** gcc-4.0.2/libjava/classpath/java/lang/ClassCircularityError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ClassCircularityError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* ClassCircularityError.java -- thrown when linking circular classes
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * A <code>ClassCircularityError</code> is thrown when a circular dependency
+  * has been detected while initializing a class. This signals binary
+  * incompatible versions of class files, as the compiler normally catches this.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class ClassCircularityError extends LinkageError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 1054362542914539689L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public ClassCircularityError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public ClassCircularityError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ClassFormatError.java gcc-4.1.0/libjava/classpath/java/lang/ClassFormatError.java
*** gcc-4.0.2/libjava/classpath/java/lang/ClassFormatError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ClassFormatError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* ClassFormatError.java -- thrown if a class file is invalid
+    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * A <code>ClassFormatError</code> is thrown when a Java Virtual Machine
+  * unable to read a class file because the file is corrupted or cannot be
+  * interpreted as a class file.
+  *
+  * @author Brian Jones
+  * @status updated to 1.4
+  */
+ public class ClassFormatError extends LinkageError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -8420114879011949195L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public ClassFormatError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public ClassFormatError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ClassLoader.java gcc-4.1.0/libjava/classpath/java/lang/ClassLoader.java
*** gcc-4.0.2/libjava/classpath/java/lang/ClassLoader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ClassLoader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1148 ----
+ /* ClassLoader.java -- responsible for loading classes into the VM
+    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import gnu.classpath.SystemProperties;
+ import gnu.classpath.VMStackWalker;
+ import gnu.java.util.DoubleEnumeration;
+ import gnu.java.util.EmptyEnumeration;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.lang.reflect.Constructor;
+ import java.net.URL;
+ import java.net.URLClassLoader;
+ import java.nio.ByteBuffer;
+ import java.security.CodeSource;
+ import java.security.PermissionCollection;
+ import java.security.Policy;
+ import java.security.ProtectionDomain;
+ import java.util.ArrayList;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Map;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * The ClassLoader is a way of customizing the way Java gets its classes
+  * and loads them into memory.  The verifier and other standard Java things
+  * still run, but the ClassLoader is allowed great flexibility in determining
+  * where to get the classfiles and when to load and resolve them. For that
+  * matter, a custom ClassLoader can perform on-the-fly code generation or
+  * modification!
+  *
+  * <p>Every classloader has a parent classloader that is consulted before
+  * the 'child' classloader when classes or resources should be loaded.
+  * This is done to make sure that classes can be loaded from an hierarchy of
+  * multiple classloaders and classloaders do not accidentially redefine
+  * already loaded classes by classloaders higher in the hierarchy.
+  *
+  * <p>The grandparent of all classloaders is the bootstrap classloader, which
+  * loads all the standard system classes as implemented by GNU Classpath. The
+  * other special classloader is the system classloader (also called
+  * application classloader) that loads all classes from the CLASSPATH
+  * (<code>java.class.path</code> system property). The system classloader
+  * is responsible for finding the application classes from the classpath,
+  * and delegates all requests for the standard library classes to its parent
+  * the bootstrap classloader. Most programs will load all their classes
+  * through the system classloaders.
+  *
+  * <p>The bootstrap classloader in GNU Classpath is implemented as a couple of
+  * static (native) methods on the package private class
+  * <code>java.lang.VMClassLoader</code>, the system classloader is an
+  * anonymous inner class of ClassLoader and a subclass of
+  * <code>java.net.URLClassLoader</code>.
+  *
+  * <p>Users of a <code>ClassLoader</code> will normally just use the methods
+  * <ul>
+  *  <li> <code>loadClass()</code> to load a class.</li>
+  *  <li> <code>getResource()</code> or <code>getResourceAsStream()</code>
+  *       to access a resource.</li>
+  *  <li> <code>getResources()</code> to get an Enumeration of URLs to all
+  *       the resources provided by the classloader and its parents with the
+  *       same name.</li>
+  * </ul>
+  *
+  * <p>Subclasses should implement the methods
+  * <ul>
+  *  <li> <code>findClass()</code> which is called by <code>loadClass()</code>
+  *       when the parent classloader cannot provide a named class.</li>
+  *  <li> <code>findResource()</code> which is called by
+  *       <code>getResource()</code> when the parent classloader cannot provide
+  *       a named resource.</li>
+  *  <li> <code>findResources()</code> which is called by
+  *       <code>getResource()</code> to combine all the resources with the
+  *       same name from the classloader and its parents.</li>
+  *  <li> <code>findLibrary()</code> which is called by
+  *       <code>Runtime.loadLibrary()</code> when a class defined by the
+  *       classloader wants to load a native library.</li>
+  * </ul>
+  *
+  * @author John Keiser
+  * @author Mark Wielaard
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Class
+  * @since 1.0
+  * @status still missing 1.4 functionality
+  */
+ public abstract class ClassLoader
+ {
+   /**
+    * All packages defined by this classloader. It is not private in order to
+    * allow native code (and trusted subclasses) access to this field.
+    */
+   final HashMap definedPackages = new HashMap();
+ 
+   /**
+    * The classloader that is consulted before this classloader.
+    * If null then the parent is the bootstrap classloader.
+    */
+   private final ClassLoader parent;
+ 
+   /**
+    * This is true if this classloader was successfully initialized.
+    * This flag is needed to avoid a class loader attack: even if the
+    * security manager rejects an attempt to create a class loader, the
+    * malicious class could have a finalize method which proceeds to
+    * define classes.
+    */
+   private final boolean initialized;
+ 
+   static class StaticData
+   {
+     /**
+      * The System Class Loader (a.k.a. Application Class Loader). The one
+      * returned by ClassLoader.getSystemClassLoader.
+      */
+     static final ClassLoader systemClassLoader =
+                               VMClassLoader.getSystemClassLoader();
+     static
+     {
+       // Find out if we have to install a default security manager. Note that
+       // this is done here because we potentially need the system class loader
+       // to load the security manager and note also that we don't need the
+       // security manager until the system class loader is created.
+       // If the runtime chooses to use a class loader that doesn't have the
+       // system class loader as its parent, it is responsible for setting
+       // up a security manager before doing so.
+       String secman = SystemProperties.getProperty("java.security.manager");
+       if (secman != null && SecurityManager.current == null)
+         {
+           if (secman.equals("") || secman.equals("default"))
+ 	    {
+ 	      SecurityManager.current = new SecurityManager();
+ 	    }
+ 	  else
+ 	    {
+ 	      try
+ 	        {
+ 	  	  Class cl = Class.forName(secman, false, StaticData.systemClassLoader);
+ 		  SecurityManager.current = (SecurityManager)cl.newInstance();
+ 	        }
+ 	      catch (Exception x)
+ 	        {
+ 		  throw (InternalError)
+ 		      new InternalError("Unable to create SecurityManager")
+ 		  	  .initCause(x);
+ 	        }
+ 	    }
+         }
+     }
+ 
+     /**
+      * The default protection domain, used when defining a class with a null
+      * parameter for the domain.
+      */
+     static final ProtectionDomain defaultProtectionDomain;
+     static
+     {
+         CodeSource cs = new CodeSource(null, null);
+         PermissionCollection perm = Policy.getPolicy().getPermissions(cs);
+         defaultProtectionDomain = new ProtectionDomain(cs, perm);
+     }
+     /**
+      * The command-line state of the package assertion status overrides. This
+      * map is never modified, so it does not need to be synchronized.
+      */
+     // Package visible for use by Class.
+     static final Map systemPackageAssertionStatus
+       = VMClassLoader.packageAssertionStatus();
+     /**
+      * The command-line state of the class assertion status overrides. This
+      * map is never modified, so it does not need to be synchronized.
+      */
+     // Package visible for use by Class.
+     static final Map systemClassAssertionStatus
+       = VMClassLoader.classAssertionStatus();
+   }
+ 
+   /**
+    * The desired assertion status of classes loaded by this loader, if not
+    * overridden by package or class instructions.
+    */
+   // Package visible for use by Class.
+   boolean defaultAssertionStatus = VMClassLoader.defaultAssertionStatus();
+ 
+   /**
+    * The map of package assertion status overrides, or null if no package
+    * overrides have been specified yet. The values of the map should be
+    * Boolean.TRUE or Boolean.FALSE, and the unnamed package is represented
+    * by the null key. This map must be synchronized on this instance.
+    */
+   // Package visible for use by Class.
+   Map packageAssertionStatus;
+ 
+   /**
+    * The map of class assertion status overrides, or null if no class
+    * overrides have been specified yet. The values of the map should be
+    * Boolean.TRUE or Boolean.FALSE. This map must be synchronized on this
+    * instance.
+    */
+   // Package visible for use by Class.
+   Map classAssertionStatus;
+ 
+   /**
+    * VM private data.
+    */
+   transient Object vmdata;
+ 
+   /**
+    * Create a new ClassLoader with as parent the system classloader. There
+    * may be a security check for <code>checkCreateClassLoader</code>.
+    *
+    * @throws SecurityException if the security check fails
+    */
+   protected ClassLoader() throws SecurityException
+   {
+     this(StaticData.systemClassLoader);
+   }
+ 
+   /**
+    * Create a new ClassLoader with the specified parent. The parent will
+    * be consulted when a class or resource is requested through
+    * <code>loadClass()</code> or <code>getResource()</code>. Only when the
+    * parent classloader cannot provide the requested class or resource the
+    * <code>findClass()</code> or <code>findResource()</code> method
+    * of this classloader will be called. There may be a security check for
+    * <code>checkCreateClassLoader</code>.
+    *
+    * @param parent the classloader's parent, or null for the bootstrap
+    *        classloader
+    * @throws SecurityException if the security check fails
+    * @since 1.2
+    */
+   protected ClassLoader(ClassLoader parent)
+   {
+     // May we create a new classloader?
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       sm.checkCreateClassLoader();
+     this.parent = parent;
+     this.initialized = true;
+   }
+ 
+   /**
+    * Load a class using this ClassLoader or its parent, without resolving
+    * it. Calls <code>loadClass(name, false)</code>.
+    *
+    * <p>Subclasses should not override this method but should override
+    * <code>findClass()</code> which is called by this method.</p>
+    *
+    * @param name the name of the class relative to this ClassLoader
+    * @return the loaded class
+    * @throws ClassNotFoundException if the class cannot be found
+    */
+   public Class loadClass(String name) throws ClassNotFoundException
+   {
+     return loadClass(name, false);
+   }
+ 
+   /**
+    * Load a class using this ClassLoader or its parent, possibly resolving
+    * it as well using <code>resolveClass()</code>. It first tries to find
+    * out if the class has already been loaded through this classloader by
+    * calling <code>findLoadedClass()</code>. Then it calls
+    * <code>loadClass()</code> on the parent classloader (or when there is
+    * no parent it uses the VM bootclassloader). If the class is still
+    * not loaded it tries to create a new class by calling
+    * <code>findClass()</code>. Finally when <code>resolve</code> is
+    * <code>true</code> it also calls <code>resolveClass()</code> on the
+    * newly loaded class.
+    *
+    * <p>Subclasses should not override this method but should override
+    * <code>findClass()</code> which is called by this method.</p>
+    *
+    * @param name the fully qualified name of the class to load
+    * @param resolve whether or not to resolve the class
+    * @return the loaded class
+    * @throws ClassNotFoundException if the class cannot be found
+    */
+   protected synchronized Class loadClass(String name, boolean resolve)
+     throws ClassNotFoundException
+   {
+     // Have we already loaded this class?
+     Class c = findLoadedClass(name);
+     if (c == null)
+       {
+ 	// Can the class be loaded by a parent?
+ 	try
+ 	  {
+ 	    if (parent == null)
+ 	      {
+ 		c = VMClassLoader.loadClass(name, resolve);
+ 		if (c != null)
+ 		  return c;
+ 	      }
+ 	    else
+ 	      {
+ 		return parent.loadClass(name, resolve);
+ 	      }
+ 	  }
+ 	catch (ClassNotFoundException e)
+ 	  {
+ 	  }
+ 	// Still not found, we have to do it ourself.
+ 	c = findClass(name);
+       }
+     if (resolve)
+       resolveClass(c);
+     return c;
+   }
+ 
+   /**
+    * Called for every class name that is needed but has not yet been
+    * defined by this classloader or one of its parents. It is called by
+    * <code>loadClass()</code> after both <code>findLoadedClass()</code> and
+    * <code>parent.loadClass()</code> couldn't provide the requested class.
+    *
+    * <p>The default implementation throws a
+    * <code>ClassNotFoundException</code>. Subclasses should override this
+    * method. An implementation of this method in a subclass should get the
+    * class bytes of the class (if it can find them), if the package of the
+    * requested class doesn't exist it should define the package and finally
+    * it should call define the actual class. It does not have to resolve the
+    * class. It should look something like the following:<br>
+    *
+    * <pre>
+    * // Get the bytes that describe the requested class
+    * byte[] classBytes = classLoaderSpecificWayToFindClassBytes(name);
+    * // Get the package name
+    * int lastDot = name.lastIndexOf('.');
+    * if (lastDot != -1)
+    *   {
+    *     String packageName = name.substring(0, lastDot);
+    *     // Look if the package already exists
+    *     if (getPackage(packageName) == null)
+    *       {
+    *         // define the package
+    *         definePackage(packageName, ...);
+    *       }
+    *   }
+    * // Define and return the class
+    *  return defineClass(name, classBytes, 0, classBytes.length);
+    * </pre>
+    *
+    * <p><code>loadClass()</code> makes sure that the <code>Class</code>
+    * returned by <code>findClass()</code> will later be returned by
+    * <code>findLoadedClass()</code> when the same class name is requested.
+    *
+    * @param name class name to find (including the package name)
+    * @return the requested Class
+    * @throws ClassNotFoundException when the class can not be found
+    * @since 1.2
+    */
+   protected Class findClass(String name) throws ClassNotFoundException
+   {
+     throw new ClassNotFoundException(name);
+   }
+ 
+   /**
+    * Helper to define a class using a string of bytes. This version is not
+    * secure.
+    *
+    * @param data the data representing the classfile, in classfile format
+    * @param offset the offset into the data where the classfile starts
+    * @param len the length of the classfile data in the array
+    * @return the class that was defined
+    * @throws ClassFormatError if data is not in proper classfile format
+    * @throws IndexOutOfBoundsException if offset or len is negative, or
+    *         offset + len exceeds data
+    * @deprecated use {@link #defineClass(String, byte[], int, int)} instead
+    */
+   protected final Class defineClass(byte[] data, int offset, int len)
+     throws ClassFormatError
+   {
+     return defineClass(null, data, offset, len);
+   }
+ 
+   /**
+    * Helper to define a class using a string of bytes without a
+    * ProtectionDomain. Subclasses should call this method from their
+    * <code>findClass()</code> implementation. The name should use '.'
+    * separators, and discard the trailing ".class".  The default protection
+    * domain has the permissions of
+    * <code>Policy.getPolicy().getPermissions(new CodeSource(null, null))</code>.
+    *
+    * @param name the name to give the class, or null if unknown
+    * @param data the data representing the classfile, in classfile format
+    * @param offset the offset into the data where the classfile starts
+    * @param len the length of the classfile data in the array
+    * @return the class that was defined
+    * @throws ClassFormatError if data is not in proper classfile format
+    * @throws IndexOutOfBoundsException if offset or len is negative, or
+    *         offset + len exceeds data
+    * @throws SecurityException if name starts with "java."
+    * @since 1.1
+    */
+   protected final Class defineClass(String name, byte[] data, int offset,
+                                     int len) throws ClassFormatError
+   {
+     return defineClass(name, data, offset, len, null);
+   }
+ 
+   /**
+    * Helper to define a class using a string of bytes. Subclasses should call
+    * this method from their <code>findClass()</code> implementation. If the
+    * domain is null, the default of
+    * <code>Policy.getPolicy().getPermissions(new CodeSource(null, null))</code>
+    * is used. Once a class has been defined in a package, all further classes
+    * in that package must have the same set of certificates or a
+    * SecurityException is thrown.
+    *
+    * @param name the name to give the class.  null if unknown
+    * @param data the data representing the classfile, in classfile format
+    * @param offset the offset into the data where the classfile starts
+    * @param len the length of the classfile data in the array
+    * @param domain the ProtectionDomain to give to the class, null for the
+    *        default protection domain
+    * @return the class that was defined
+    * @throws ClassFormatError if data is not in proper classfile format
+    * @throws IndexOutOfBoundsException if offset or len is negative, or
+    *         offset + len exceeds data
+    * @throws SecurityException if name starts with "java.", or if certificates
+    *         do not match up
+    * @since 1.2
+    */
+   protected final synchronized Class defineClass(String name, byte[] data,
+ 						 int offset, int len,
+ 						 ProtectionDomain domain)
+     throws ClassFormatError
+   {
+     checkInitialized();
+     if (domain == null)
+       domain = StaticData.defaultProtectionDomain;
+     
+     return VMClassLoader.defineClass(this, name, data, offset, len, domain);
+   }
+ 
+   /**
+    * Helper to define a class using the contents of a byte buffer. If
+    * the domain is null, the default of
+    * <code>Policy.getPolicy().getPermissions(new CodeSource(null,
+    * null))</code> is used. Once a class has been defined in a
+    * package, all further classes in that package must have the same
+    * set of certificates or a SecurityException is thrown.
+    *
+    * @param name the name to give the class.  null if unknown
+    * @param buf a byte buffer containing bytes that form a class.
+    * @param domain the ProtectionDomain to give to the class, null for the
+    *        default protection domain
+    * @return the class that was defined
+    * @throws ClassFormatError if data is not in proper classfile format
+    * @throws NoClassDefFoundError if the supplied name is not the same as
+    *                              the one specified by the byte buffer.
+    * @throws SecurityException if name starts with "java.", or if certificates
+    *         do not match up
+    * @since 1.5
+    */
+   protected final Class defineClass(String name, ByteBuffer buf,
+ 				    ProtectionDomain domain)
+     throws ClassFormatError
+   {
+     byte[] data = new byte[buf.remaining()];
+     buf.get(data);
+     return defineClass(name, data, 0, data.length, domain);
+   }
+ 
+   /**
+    * Links the class, if that has not already been done. Linking basically
+    * resolves all references to other classes made by this class.
+    *
+    * @param c the class to resolve
+    * @throws NullPointerException if c is null
+    * @throws LinkageError if linking fails
+    */
+   protected final void resolveClass(Class c)
+   {
+     checkInitialized();
+     VMClassLoader.resolveClass(c);
+   }
+ 
+   /**
+    * Helper to find a Class using the system classloader, possibly loading it.
+    * A subclass usually does not need to call this, if it correctly
+    * overrides <code>findClass(String)</code>.
+    *
+    * @param name the name of the class to find
+    * @return the found class
+    * @throws ClassNotFoundException if the class cannot be found
+    */
+   protected final Class findSystemClass(String name)
+     throws ClassNotFoundException
+   {
+     checkInitialized();
+     return Class.forName(name, false, StaticData.systemClassLoader);
+   }
+ 
+   /**
+    * Returns the parent of this classloader. If the parent of this
+    * classloader is the bootstrap classloader then this method returns
+    * <code>null</code>. A security check may be performed on
+    * <code>RuntimePermission("getClassLoader")</code>.
+    *
+    * @return the parent <code>ClassLoader</code>
+    * @throws SecurityException if the security check fails
+    * @since 1.2
+    */
+   public final ClassLoader getParent()
+   {
+     // Check if we may return the parent classloader.
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       {
+ 	ClassLoader cl = VMStackWalker.getCallingClassLoader();
+ 	if (cl != null && ! cl.isAncestorOf(this))
+           sm.checkPermission(new RuntimePermission("getClassLoader"));
+       }
+     return parent;
+   }
+ 
+   /**
+    * Helper to set the signers of a class. This should be called after
+    * defining the class.
+    *
+    * @param c the Class to set signers of
+    * @param signers the signers to set
+    * @since 1.1
+    */
+   protected final void setSigners(Class c, Object[] signers)
+   {
+     checkInitialized();
+     c.setSigners(signers);
+   }
+ 
+   /**
+    * Helper to find an already-loaded class in this ClassLoader.
+    *
+    * @param name the name of the class to find
+    * @return the found Class, or null if it is not found
+    * @since 1.1
+    */
+   protected final synchronized Class findLoadedClass(String name)
+   {
+     checkInitialized();
+     return VMClassLoader.findLoadedClass(this, name);
+   }
+ 
+   /**
+    * Get the URL to a resource using this classloader or one of its parents.
+    * First tries to get the resource by calling <code>getResource()</code>
+    * on the parent classloader. If the parent classloader returns null then
+    * it tries finding the resource by calling <code>findResource()</code> on
+    * this classloader. The resource name should be separated by '/' for path
+    * elements.
+    *
+    * <p>Subclasses should not override this method but should override
+    * <code>findResource()</code> which is called by this method.
+    *
+    * @param name the name of the resource relative to this classloader
+    * @return the URL to the resource or null when not found
+    */
+   public URL getResource(String name)
+   {
+     URL result;
+ 
+     if (parent == null)
+       result = VMClassLoader.getResource(name);
+     else
+       result = parent.getResource(name);
+ 
+     if (result == null)
+       result = findResource(name);
+     return result;
+   }
+ 
+   /**
+    * Returns an Enumeration of all resources with a given name that can
+    * be found by this classloader and its parents. Certain classloaders
+    * (such as the URLClassLoader when given multiple jar files) can have
+    * multiple resources with the same name that come from multiple locations.
+    * It can also occur that a parent classloader offers a resource with a
+    * certain name and the child classloader also offers a resource with that
+    * same name. <code>getResource()</code> only offers the first resource (of the
+    * parent) with a given name. This method lists all resources with the
+    * same name. The name should use '/' as path separators.
+    *
+    * <p>The Enumeration is created by first calling <code>getResources()</code>
+    * on the parent classloader and then calling <code>findResources()</code>
+    * on this classloader.</p>
+    *
+    * @param name the resource name
+    * @return an enumaration of all resources found
+    * @throws IOException if I/O errors occur in the process
+    * @since 1.2
+    */
+   public final Enumeration getResources(String name) throws IOException
+   {
+     Enumeration parentResources;
+     if (parent == null)
+       parentResources = VMClassLoader.getResources(name);
+     else
+       parentResources = parent.getResources(name);
+     return new DoubleEnumeration(parentResources, findResources(name));
+   }
+ 
+   /**
+    * Called whenever all locations of a named resource are needed.
+    * It is called by <code>getResources()</code> after it has called
+    * <code>parent.getResources()</code>. The results are combined by
+    * the <code>getResources()</code> method.
+    *
+    * <p>The default implementation always returns an empty Enumeration.
+    * Subclasses should override it when they can provide an Enumeration of
+    * URLs (possibly just one element) to the named resource.
+    * The first URL of the Enumeration should be the same as the one
+    * returned by <code>findResource</code>.
+    *
+    * @param name the name of the resource to be found
+    * @return a possibly empty Enumeration of URLs to the named resource
+    * @throws IOException if I/O errors occur in the process
+    * @since 1.2
+    */
+   protected Enumeration findResources(String name) throws IOException
+   {
+     return EmptyEnumeration.getInstance();
+   }
+ 
+   /**
+    * Called whenever a resource is needed that could not be provided by
+    * one of the parents of this classloader. It is called by
+    * <code>getResource()</code> after <code>parent.getResource()</code>
+    * couldn't provide the requested resource.
+    *
+    * <p>The default implementation always returns null. Subclasses should
+    * override this method when they can provide a way to return a URL
+    * to a named resource.
+    *
+    * @param name the name of the resource to be found
+    * @return a URL to the named resource or null when not found
+    * @since 1.2
+    */
+   protected URL findResource(String name)
+   {
+     return null;
+   }
+ 
+   /**
+    * Get the URL to a resource using the system classloader.
+    *
+    * @param name the name of the resource relative to the system classloader
+    * @return the URL to the resource
+    * @since 1.1
+    */
+   public static final URL getSystemResource(String name)
+   {
+     return StaticData.systemClassLoader.getResource(name);
+   }
+ 
+   /**
+    * Get an Enumeration of URLs to resources with a given name using the
+    * the system classloader. The enumeration firsts lists the resources with
+    * the given name that can be found by the bootstrap classloader followed
+    * by the resources with the given name that can be found on the classpath.
+    *
+    * @param name the name of the resource relative to the system classloader
+    * @return an Enumeration of URLs to the resources
+    * @throws IOException if I/O errors occur in the process
+    * @since 1.2
+    */
+   public static Enumeration getSystemResources(String name) throws IOException
+   {
+     return StaticData.systemClassLoader.getResources(name);
+   }
+ 
+   /**
+    * Get a resource as stream using this classloader or one of its parents.
+    * First calls <code>getResource()</code> and if that returns a URL to
+    * the resource then it calls and returns the InputStream given by
+    * <code>URL.openStream()</code>.
+    *
+    * <p>Subclasses should not override this method but should override
+    * <code>findResource()</code> which is called by this method.
+    *
+    * @param name the name of the resource relative to this classloader
+    * @return an InputStream to the resource, or null
+    * @since 1.1
+    */
+   public InputStream getResourceAsStream(String name)
+   {
+     try
+       {
+         URL url = getResource(name);
+         if (url == null)
+           return null;
+         return url.openStream();
+       }
+     catch (IOException e)
+       {
+         return null;
+       }
+   }
+ 
+   /**
+    * Get a resource using the system classloader.
+    *
+    * @param name the name of the resource relative to the system classloader
+    * @return an input stream for the resource, or null
+    * @since 1.1
+    */
+   public static final InputStream getSystemResourceAsStream(String name)
+   {
+     try
+       {
+         URL url = getSystemResource(name);
+         if (url == null)
+           return null;
+         return url.openStream();
+       }
+     catch (IOException e)
+       {
+         return null;
+       }
+   }
+ 
+   /**
+    * Returns the system classloader. The system classloader (also called
+    * the application classloader) is the classloader that is used to
+    * load the application classes on the classpath (given by the system
+    * property <code>java.class.path</code>. This is set as the context
+    * class loader for a thread. The system property
+    * <code>java.system.class.loader</code>, if defined, is taken to be the
+    * name of the class to use as the system class loader, which must have
+    * a public constructor which takes a ClassLoader as a parent. The parent
+    * class loader passed in the constructor is the default system class
+    * loader.
+    *
+    * <p>Note that this is different from the bootstrap classloader that
+    * actually loads all the real "system" classes.
+    *
+    * <p>A security check will be performed for
+    * <code>RuntimePermission("getClassLoader")</code> if the calling class
+    * is not a parent of the system class loader.
+    *
+    * @return the system class loader
+    * @throws SecurityException if the security check fails
+    * @throws IllegalStateException if this is called recursively
+    * @throws Error if <code>java.system.class.loader</code> fails to load
+    * @since 1.2
+    */
+   public static ClassLoader getSystemClassLoader()
+   {
+     // Check if we may return the system classloader
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       {
+ 	ClassLoader cl = VMStackWalker.getCallingClassLoader();
+ 	if (cl != null && cl != StaticData.systemClassLoader)
+ 	  sm.checkPermission(new RuntimePermission("getClassLoader"));
+       }
+ 
+     return StaticData.systemClassLoader;
+   }
+ 
+   /**
+    * Defines a new package and creates a Package object. The package should
+    * be defined before any class in the package is defined with
+    * <code>defineClass()</code>. The package should not yet be defined
+    * before in this classloader or in one of its parents (which means that
+    * <code>getPackage()</code> should return <code>null</code>). All
+    * parameters except the <code>name</code> of the package may be
+    * <code>null</code>.
+    *
+    * <p>Subclasses should call this method from their <code>findClass()</code>
+    * implementation before calling <code>defineClass()</code> on a Class
+    * in a not yet defined Package (which can be checked by calling
+    * <code>getPackage()</code>).
+    *
+    * @param name the name of the Package
+    * @param specTitle the name of the specification
+    * @param specVendor the name of the specification designer
+    * @param specVersion the version of this specification
+    * @param implTitle the name of the implementation
+    * @param implVendor the vendor that wrote this implementation
+    * @param implVersion the version of this implementation
+    * @param sealed if sealed the origin of the package classes
+    * @return the Package object for the specified package
+    * @throws IllegalArgumentException if the package name is null or it
+    *         was already defined by this classloader or one of its parents
+    * @see Package
+    * @since 1.2
+    */
+   protected Package definePackage(String name, String specTitle,
+                                   String specVendor, String specVersion,
+                                   String implTitle, String implVendor,
+                                   String implVersion, URL sealed)
+   {
+     if (getPackage(name) != null)
+       throw new IllegalArgumentException("Package " + name
+                                          + " already defined");
+     Package p = new Package(name, specTitle, specVendor, specVersion,
+                             implTitle, implVendor, implVersion, sealed);
+     synchronized (definedPackages)
+       {
+         definedPackages.put(name, p);
+       }
+     return p;
+   }
+ 
+   /**
+    * Returns the Package object for the requested package name. It returns
+    * null when the package is not defined by this classloader or one of its
+    * parents.
+    *
+    * @param name the package name to find
+    * @return the package, if defined
+    * @since 1.2
+    */
+   protected Package getPackage(String name)
+   {
+     Package p;
+     if (parent == null)
+       p = VMClassLoader.getPackage(name);
+     else
+       p = parent.getPackage(name);
+ 
+     if (p == null)
+       {
+ 	synchronized (definedPackages)
+ 	  {
+ 	    p = (Package) definedPackages.get(name);
+ 	  }
+       }
+     return p;
+   }
+ 
+   /**
+    * Returns all Package objects defined by this classloader and its parents.
+    *
+    * @return an array of all defined packages
+    * @since 1.2
+    */
+   protected Package[] getPackages()
+   {
+     // Get all our packages.
+     Package[] packages;
+     synchronized(definedPackages)
+       {
+         packages = new Package[definedPackages.size()];
+         definedPackages.values().toArray(packages);
+       }
+ 
+     // If we have a parent get all packages defined by our parents.
+     Package[] parentPackages;
+     if (parent == null)
+       parentPackages = VMClassLoader.getPackages();
+     else
+       parentPackages = parent.getPackages();
+ 
+     Package[] allPackages = new Package[parentPackages.length
+ 					+ packages.length];
+     System.arraycopy(parentPackages, 0, allPackages, 0,
+                      parentPackages.length);
+     System.arraycopy(packages, 0, allPackages, parentPackages.length,
+                      packages.length);
+     return allPackages;
+   }
+ 
+   /**
+    * Called by <code>Runtime.loadLibrary()</code> to get an absolute path
+    * to a (system specific) library that was requested by a class loaded
+    * by this classloader. The default implementation returns
+    * <code>null</code>. It should be implemented by subclasses when they
+    * have a way to find the absolute path to a library. If this method
+    * returns null the library is searched for in the default locations
+    * (the directories listed in the <code>java.library.path</code> system
+    * property).
+    *
+    * @param name the (system specific) name of the requested library
+    * @return the full pathname to the requested library, or null
+    * @see Runtime#loadLibrary(String)
+    * @since 1.2
+    */
+   protected String findLibrary(String name)
+   {
+     return null;
+   }
+ 
+   /**
+    * Set the default assertion status for classes loaded by this classloader,
+    * used unless overridden by a package or class request.
+    *
+    * @param enabled true to set the default to enabled
+    * @see #setClassAssertionStatus(String, boolean)
+    * @see #setPackageAssertionStatus(String, boolean)
+    * @see #clearAssertionStatus()
+    * @since 1.4
+    */
+   public void setDefaultAssertionStatus(boolean enabled)
+   {
+     defaultAssertionStatus = enabled;
+   }
+   
+   /**
+    * Set the default assertion status for packages, used unless overridden
+    * by a class request. This default also covers subpackages, unless they
+    * are also specified. The unnamed package should use null for the name.
+    *
+    * @param name the package (and subpackages) to affect
+    * @param enabled true to set the default to enabled
+    * @see #setDefaultAssertionStatus(boolean)
+    * @see #setClassAssertionStatus(String, boolean)
+    * @see #clearAssertionStatus()
+    * @since 1.4
+    */
+   public synchronized void setPackageAssertionStatus(String name,
+                                                      boolean enabled)
+   {
+     if (packageAssertionStatus == null)
+       packageAssertionStatus
+         = new HashMap(StaticData.systemPackageAssertionStatus);
+     packageAssertionStatus.put(name, Boolean.valueOf(enabled));
+   }
+   
+   /**
+    * Set the default assertion status for a class. This only affects the
+    * status of top-level classes, any other string is harmless.
+    *
+    * @param name the class to affect
+    * @param enabled true to set the default to enabled
+    * @throws NullPointerException if name is null
+    * @see #setDefaultAssertionStatus(boolean)
+    * @see #setPackageAssertionStatus(String, boolean)
+    * @see #clearAssertionStatus()
+    * @since 1.4
+    */
+   public synchronized void setClassAssertionStatus(String name,
+                                                    boolean enabled)
+   {
+     if (classAssertionStatus == null)
+       classAssertionStatus = 
+         new HashMap(StaticData.systemClassAssertionStatus);
+     // The toString() hack catches null, as required.
+     classAssertionStatus.put(name.toString(), Boolean.valueOf(enabled));
+   }
+   
+   /**
+    * Resets the default assertion status of this classloader, its packages
+    * and classes, all to false. This allows overriding defaults inherited
+    * from the command line.
+    *
+    * @see #setDefaultAssertionStatus(boolean)
+    * @see #setClassAssertionStatus(String, boolean)
+    * @see #setPackageAssertionStatus(String, boolean)
+    * @since 1.4
+    */
+   public synchronized void clearAssertionStatus()
+   {
+     defaultAssertionStatus = false;
+     packageAssertionStatus = new HashMap();
+     classAssertionStatus = new HashMap();
+   }
+ 
+   /**
+    * Return true if this loader is either the specified class loader
+    * or an ancestor thereof.
+    * @param loader the class loader to check
+    */
+   final boolean isAncestorOf(ClassLoader loader)
+   {
+     while (loader != null)
+       {
+ 	if (this == loader)
+ 	  return true;
+ 	loader = loader.parent;
+       }
+     return false;
+   }
+ 
+   private static URL[] getExtClassLoaderUrls()
+   {
+     String classpath = SystemProperties.getProperty("java.ext.dirs", "");
+     StringTokenizer tok = new StringTokenizer(classpath, File.pathSeparator);
+     ArrayList list = new ArrayList();
+     while (tok.hasMoreTokens())
+       {
+ 	try
+ 	  {
+ 	    File f = new File(tok.nextToken());
+ 	    File[] files = f.listFiles();
+ 	    if (files != null)
+ 	      for (int i = 0; i < files.length; i++)
+ 		list.add(files[i].toURL());
+ 	  }
+ 	catch(Exception x)
+ 	  {
+ 	  }
+       }
+     URL[] urls = new URL[list.size()];
+     list.toArray(urls);
+     return urls;
+   }
+ 
+   private static void addFileURL(ArrayList list, String file)
+   {
+     try
+       {
+ 	list.add(new File(file).toURL());
+       }
+     catch(java.net.MalformedURLException x)
+       {
+       }
+   }
+ 
+   private static URL[] getSystemClassLoaderUrls()
+   {
+     String classpath = SystemProperties.getProperty("java.class.path", ".");
+     StringTokenizer tok = new StringTokenizer(classpath, File.pathSeparator, true);
+     ArrayList list = new ArrayList();
+     while (tok.hasMoreTokens())
+       {
+ 	String s = tok.nextToken();
+ 	if (s.equals(File.pathSeparator))
+ 	    addFileURL(list, ".");
+ 	else
+ 	  {
+ 	    addFileURL(list, s);
+ 	    if (tok.hasMoreTokens())
+ 	      {
+ 		// Skip the separator.
+ 		tok.nextToken();
+ 		// If the classpath ended with a separator,
+ 		// append the current directory.
+ 		if (!tok.hasMoreTokens())
+ 		    addFileURL(list, ".");
+ 	      }
+ 	  }
+       }
+     URL[] urls = new URL[list.size()];
+     list.toArray(urls);
+     return urls;
+   }
+ 
+   static ClassLoader defaultGetSystemClassLoader()
+   {
+     return createAuxiliarySystemClassLoader(
+         createSystemClassLoader(getSystemClassLoaderUrls(),
+             createExtClassLoader(getExtClassLoaderUrls(), null)));
+   }
+ 
+   static ClassLoader createExtClassLoader(URL[] urls, ClassLoader parent)
+   {
+     if (urls.length > 0)
+       return new URLClassLoader(urls, parent);
+     else
+       return parent;
+   }
+ 
+   static ClassLoader createSystemClassLoader(URL[] urls, ClassLoader parent)
+   {
+     return
+ 	new URLClassLoader(urls, parent)
+ 	{
+ 	    protected synchronized Class loadClass(String name,
+ 		boolean resolve)
+ 		throws ClassNotFoundException
+ 	    {
+ 		SecurityManager sm = SecurityManager.current;
+ 		if (sm != null)
+ 		{
+ 		    int lastDot = name.lastIndexOf('.');
+ 		    if (lastDot != -1)
+ 			sm.checkPackageAccess(name.substring(0, lastDot));
+ 		}
+ 		return super.loadClass(name, resolve);
+ 	    }
+ 	};
+   }
+ 
+   static ClassLoader createAuxiliarySystemClassLoader(ClassLoader parent)
+   {
+     String loader = SystemProperties.getProperty("java.system.class.loader", null);
+     if (loader == null)
+       {
+ 	return parent;
+       }
+     try
+       {
+ 	Constructor c = Class.forName(loader, false, parent)
+ 	    .getConstructor(new Class[] { ClassLoader.class });
+ 	return (ClassLoader)c.newInstance(new Object[] { parent });
+       }
+     catch (Exception e)
+       {
+ 	System.err.println("Requested system classloader " + loader + " failed.");
+ 	throw (Error)
+ 	    new Error("Requested system classloader " + loader + " failed.")
+ 		.initCause(e);
+       }
+   }
+ 
+   /**
+    * Before doing anything "dangerous" please call this method to make sure
+    * this class loader instance was properly constructed (and not obtained
+    * by exploiting the finalizer attack)
+    * @see #initialized
+    */
+   private void checkInitialized()
+   {
+     if (! initialized)
+       throw new SecurityException("attempt to use uninitialized class loader");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ClassNotFoundException.java gcc-4.1.0/libjava/classpath/java/lang/ClassNotFoundException.java
*** gcc-4.0.2/libjava/classpath/java/lang/ClassNotFoundException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ClassNotFoundException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,125 ----
+ /* ClassNotFoundException.java -- thrown when class definition cannot be found
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when a class is requested by reflection, but the class definition
+  * cannot be found. This exception is often chained from another Throwable.
+  *
+  * @author Brian Jones
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Class#forName(String)
+  * @see ClassLoader#findSystemClass(String)
+  * @see ClassLoader#loadClass(String, boolean)
+  * @status updated to 1.4
+  */
+ public class ClassNotFoundException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 9176873029745254542L;
+ 
+   /**
+    * The cause of this exception (duplicates the one stored in Throwable).
+    *
+    * @serial the exception cause
+    * @since 1.2
+    */
+   private final Throwable ex;
+ 
+   /**
+    * Create an exception without a message. Note that this initializes the
+    * cause to null.
+    */
+   public ClassNotFoundException()
+   {
+     this(null, null);
+   }
+ 
+   /**
+    * Create an exception with a message. Note that this initializes the
+    * cause to null.
+    *
+    * @param s the message
+    */
+   public ClassNotFoundException(String s)
+   {
+     this(s, null);
+   }
+ 
+   /**
+    * Create an exception with a message and chain it to the exception
+    * which occurred while loading the class.
+    *
+    * @param s the message
+    * @param ex the chained exception
+    * @since 1.2
+    */
+   public ClassNotFoundException(String s, Throwable ex)
+   {
+     super(s, ex);
+     this.ex = ex;
+   }
+ 
+   /**
+    * Returns the exception which occurred while loading the class,
+    * otherwise returns null. This is a legacy method; the preferred choice
+    * now is {@link Throwable#getCause()}.
+    *
+    * @return the cause of this exception
+    * @since 1.2
+    */
+   public Throwable getException()
+   {
+     return ex;
+   }
+ 
+   /**
+    * Returns the exception which occurred while loading the class,
+    * otherwise returns null.
+    *
+    * @return the cause of this exception
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return ex;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/CloneNotSupportedException.java gcc-4.1.0/libjava/classpath/java/lang/CloneNotSupportedException.java
*** gcc-4.0.2/libjava/classpath/java/lang/CloneNotSupportedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/CloneNotSupportedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* CloneNotSupportedException.java -- thrown when an object cannot be cloned
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown to indicate an object should not or could not be cloned. This
+  * includes the case when {@link Object#clone()} is called on an object
+  * which does not implement the {@link Cloneable} interface. For example:<br>
+  * <pre>
+  * void m() throws CloneNotSupportedException
+  * {
+  *   clone();
+  * }
+  * </pre>
+  *
+  * <p>Notice that calling <code>clone()</code> on an array will never produce
+  * this exception, as the VM will always succeed in copying the array, or
+  * cause an OutOfMemoryError first. For example:<br>
+  * <pre>
+  * void m(int[] array)
+  * {
+  *   int[] copy = (int[]) array.clone();
+  * }
+  * </pre>
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Cloneable
+  * @see Object#clone()
+  * @status updated to 1.4
+  */
+ public class CloneNotSupportedException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 5195511250079656443L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public CloneNotSupportedException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the error message
+    */
+   public CloneNotSupportedException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Cloneable.java gcc-4.1.0/libjava/classpath/java/lang/Cloneable.java
*** gcc-4.0.2/libjava/classpath/java/lang/Cloneable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Cloneable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* Cloneable.java -- Interface for marking objects cloneable by Object.clone()
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * This interface should be implemented by classes wishing to
+  * support of override <code>Object.clone()</code>.  The default
+  * behaviour of <code>clone()</code> performs a shallow copy, but
+  * subclasses often change this to perform a deep copy.  Therefore,
+  * it is a good idea to document how deep your clone will go.
+  * If <code>clone()</code> is called on an object which does not
+  * implement this interface, a <code>CloneNotSupportedException</code>
+  * will be thrown.
+  *
+  * <p>This interface is simply a tagging interface; it carries no
+  * requirements on methods to implement.  However, it is typical for
+  * a Cloneable class to implement at least <code>equals</code>,
+  * <code>hashCode</code>, and <code>clone</code>, sometimes
+  * increasing the accessibility of clone to be public. The typical
+  * implementation of <code>clone</code> invokes <code>super.clone()</code>
+  * rather than a constructor, but this is not a requirement.
+  *
+  * <p>If an object that implement Cloneable should not be cloned,
+  * simply override the <code>clone</code> method to throw a
+  * <code>CloneNotSupportedException</code>.
+  *
+  * <p>All array types implement Cloneable, and have a public
+  * <code>clone</code> method that will never fail with a
+  * <code>CloneNotSupportedException</code>.
+  *
+  * @author Paul Fisher
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see Object#clone()
+  * @see CloneNotSupportedException
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface Cloneable
+ {
+   // Tagging interface only.
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Comparable.java gcc-4.1.0/libjava/classpath/java/lang/Comparable.java
*** gcc-4.0.2/libjava/classpath/java/lang/Comparable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Comparable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* Comparable.java -- Interface for comparaing objects to obtain an ordering
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Interface for objects that can be ordering among other objects. The
+  * ordering can be <em>total</em>, such that two objects only compare equal
+  * if they are also equal by the equals method, or <em>partial</em> such
+  * that this is not necessarily true. For example, a case-sensitive
+  * dictionary order comparison of Strings is total, but if it is
+  * case-insensitive it is partial, because "abc" and "ABC" compare as
+  * equal even though "abc".equals("ABC") returns false. However, if you use
+  * a partial ordering, it is a good idea to document your class as
+  * "inconsistent with equals", because the behavior of your class in a
+  * SortedMap will be different than in a HashMap.
+  *
+  * <p>Lists, arrays, and sets of objects that implement this interface can
+  * be sorted automatically, without the need for an explicit
+  * {@link java.util.Comparator}. Note that <code>e1.compareTo(null)</code> 
+  * should throw an Exception; as should comparison between incompatible 
+  * classes.
+  *
+  * @author Geoff Berry
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see java.util.Comparator
+  * @see java.util.Collections#sort(java.util.List)
+  * @see java.util.Arrays#sort(Object[])
+  * @see java.util.SortedSet
+  * @see java.util.SortedMap
+  * @see java.util.TreeSet
+  * @see java.util.TreeMap
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface Comparable
+ {
+   /**
+    * Compares this object with another, and returns a numerical result based
+    * on the comparison.  If the result is negative, this object sorts less
+    * than the other; if 0, the two are equal, and if positive, this object
+    * sorts greater than the other.  To translate this into boolean, simply
+    * perform <code>o1.compareTo(o2) <em>&lt;op&gt;</em> 0</code>, where op
+    * is one of &lt;, &lt;=, =, !=, &gt;, or &gt;=.
+    *
+    * <p>You must make sure that the comparison is mutual, ie.
+    * <code>sgn(x.compareTo(y)) == -sgn(y.compareTo(x))</code> (where sgn() is
+    * defined as -1, 0, or 1 based on the sign).  This includes throwing an
+    * exception in either direction if the two are not comparable; hence,
+    * <code>compareTo(null)</code> should always throw an Exception.
+    *
+    * <p>You should also ensure transitivity, in two forms:
+    * <code>x.compareTo(y) &gt; 0 && y.compareTo(z) &gt; 0</code> implies
+    * <code>x.compareTo(z) &gt; 0</code>; and <code>x.compareTo(y) == 0</code>
+    * implies <code>x.compareTo(z) == y.compareTo(z)</code>.
+    *
+    * @param o the object to be compared
+    * @return an integer describing the comparison
+    * @throws NullPointerException if o is null
+    * @throws ClassCastException if o cannot be compared
+    */
+   int compareTo(Object o);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Compiler.java gcc-4.1.0/libjava/classpath/java/lang/Compiler.java
*** gcc-4.0.2/libjava/classpath/java/lang/Compiler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Compiler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,127 ----
+ /* Compiler.java -- placeholder for Java-to-native runtime compilers
+    Copyright (C) 1998, 1999, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * The <code>Compiler</code> class is a placeholder for a JIT compiler
+  * implementation, and does nothing unless there is such a compiler.
+  *
+  * <p>The system property <code>java.compiler</code> may contain the name
+  * of a library to load with <code>System.loadLibrary</code> when the
+  * virtual machine first starts.  If so, and loading the library succeeds,
+  * then a function by the name of <code>java_lang_Compiler_start()</code>
+  * in that library is called.
+  *
+  * <p>Note that a VM might not have implemented any of this.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see System#getProperty(String)
+  * @see System#getProperty(String, String)
+  * @see System#loadLibrary(String)
+  * @since JDK 1.0
+  * @status updated to 1.4
+  */
+ public final class Compiler
+ {
+   /**
+    * Don't allow new `Compiler's to be made.
+    */
+   private Compiler()
+   {
+   }
+ 
+   /**
+    * Compile the class named by <code>oneClass</code>.
+    *
+    * @param oneClass the class to compile
+    * @return <code>false</code> if no compiler is available or
+    *         compilation failed, <code>true</code> if compilation succeeded
+    * @throws NullPointerException if oneClass is null
+    */
+   public static boolean compileClass(Class oneClass)
+   {
+     return VMCompiler.compileClass(oneClass);
+   }
+ 
+   /**
+    * Compile the classes whose name matches <code>classNames</code>.
+    *
+    * @param classNames the name of classes to compile
+    * @return <code>false</code> if no compiler is available or
+    *         compilation failed, <code>true</code> if compilation succeeded
+    * @throws NullPointerException if classNames is null
+    */
+   public static boolean compileClasses(String classNames)
+   {
+     return VMCompiler.compileClasses(classNames);
+   }
+ 
+   /**
+    * This method examines the argument and performs an operation
+    * according to the compilers documentation.  No specific operation
+    * is required.
+    *
+    * @param arg a compiler-specific argument
+    * @return a compiler-specific value, including null
+    * @throws NullPointerException if the compiler doesn't like a null arg
+    */
+   public static Object command(Object arg)
+   {
+     return VMCompiler.command(arg);
+   }
+ 
+   /**
+    * Calling <code>Compiler.enable()</code> will cause the compiler
+    * to resume operation if it was previously disabled; provided that a
+    * compiler even exists.
+    */
+   public static void enable()
+   {
+     VMCompiler.enable();
+   }
+ 
+   /**
+    * Calling <code>Compiler.disable()</code> will cause the compiler
+    * to be suspended; provided that a compiler even exists.
+    */
+   public static void disable()
+   {
+     VMCompiler.disable();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Double.java gcc-4.1.0/libjava/classpath/java/lang/Double.java
*** gcc-4.0.2/libjava/classpath/java/lang/Double.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Double.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,542 ----
+ /* Double.java -- object wrapper for double
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ 
+ /**
+  * Instances of class <code>Double</code> represent primitive
+  * <code>double</code> values.
+  *
+  * Additionally, this class provides various helper functions and variables
+  * related to doubles.
+  *
+  * @author Paul Fisher
+  * @author Andrew Haley (aph@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public final class Double extends Number implements Comparable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -9172774392245257468L;
+ 
+   /**
+    * The maximum positive value a <code>double</code> may represent
+    * is 1.7976931348623157e+308.
+    */
+   public static final double MAX_VALUE = 1.7976931348623157e+308;
+ 
+   /**
+    * The minimum positive value a <code>double</code> may represent
+    * is 5e-324.
+    */
+   public static final double MIN_VALUE = 5e-324;
+ 
+   /**
+    * The value of a double representation -1.0/0.0, negative
+    * infinity.
+    */
+   public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
+ 
+   /**
+    * The value of a double representing 1.0/0.0, positive infinity.
+    */
+   public static final double POSITIVE_INFINITY = 1.0 / 0.0;
+ 
+   /**
+    * All IEEE 754 values of NaN have the same value in Java.
+    */
+   public static final double NaN = 0.0 / 0.0;
+ 
+   /**
+    * The number of bits needed to represent a <code>double</code>.
+    * @since 1.5
+    */
+   public static final int SIZE = 64;
+ 
+  /**
+    * The primitive type <code>double</code> is represented by this
+    * <code>Class</code> object.
+    * @since 1.1
+    */
+   public static final Class TYPE = VMClassLoader.getPrimitiveClass('D');
+ 
+   /**
+    * The immutable value of this Double.
+    *
+    * @serial the wrapped double
+    */
+   private final double value;
+ 
+   /**
+    * Create a <code>Double</code> from the primitive <code>double</code>
+    * specified.
+    *
+    * @param value the <code>double</code> argument
+    */
+   public Double(double value)
+   {
+     this.value = value;
+   }
+ 
+   /**
+    * Create a <code>Double</code> from the specified <code>String</code>.
+    * This method calls <code>Double.parseDouble()</code>.
+    *
+    * @param s the <code>String</code> to convert
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>double</code>
+    * @throws NullPointerException if <code>s</code> is null
+    * @see #parseDouble(String)
+    */
+   public Double(String s)
+   {
+     value = parseDouble(s);
+   }
+ 
+   /**
+    * Convert the <code>double</code> to a <code>String</code>.
+    * Floating-point string representation is fairly complex: here is a
+    * rundown of the possible values.  "<code>[-]</code>" indicates that a
+    * negative sign will be printed if the value (or exponent) is negative.
+    * "<code>&lt;number&gt;</code>" means a string of digits ('0' to '9').
+    * "<code>&lt;digit&gt;</code>" means a single digit ('0' to '9').<br>
+    *
+    * <table border=1>
+    * <tr><th>Value of Double</th><th>String Representation</th></tr>
+    * <tr><td>[+-] 0</td> <td><code>[-]0.0</code></td></tr>
+    * <tr><td>Between [+-] 10<sup>-3</sup> and 10<sup>7</sup>, exclusive</td>
+    *     <td><code>[-]number.number</code></td></tr>
+    * <tr><td>Other numeric value</td>
+    *     <td><code>[-]&lt;digit&gt;.&lt;number&gt;
+    *          E[-]&lt;number&gt;</code></td></tr>
+    * <tr><td>[+-] infinity</td> <td><code>[-]Infinity</code></td></tr>
+    * <tr><td>NaN</td> <td><code>NaN</code></td></tr>
+    * </table>
+    *
+    * Yes, negative zero <em>is</em> a possible value.  Note that there is
+    * <em>always</em> a <code>.</code> and at least one digit printed after
+    * it: even if the number is 3, it will be printed as <code>3.0</code>.
+    * After the ".", all digits will be printed except trailing zeros. The
+    * result is rounded to the shortest decimal number which will parse back
+    * to the same double.
+    *
+    * <p>To create other output formats, use {@link java.text.NumberFormat}.
+    *
+    * @XXX specify where we are not in accord with the spec.
+    *
+    * @param d the <code>double</code> to convert
+    * @return the <code>String</code> representing the <code>double</code>
+    */
+   public static String toString(double d)
+   {
+     return VMDouble.toString(d, false);
+   }
+ 
+   /**
+    * Returns a <code>Double</code> object wrapping the value.
+    * In contrast to the <code>Double</code> constructor, this method
+    * may cache some values.  It is used by boxing conversion.
+    *
+    * @param val the value to wrap
+    * @return the <code>Double</code>
+    * 
+    * @since 1.5
+    */
+   public static Double valueOf(double val)
+   {
+     // We don't actually cache, but we could.
+     return new Double(val);
+   }
+ 
+  /**
+    * Create a new <code>Double</code> object using the <code>String</code>.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the new <code>Double</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>double</code>
+    * @throws NullPointerException if <code>s</code> is null.
+    * @see #parseDouble(String)
+    */
+   public static Double valueOf(String s)
+   {
+     return new Double(parseDouble(s));
+   }
+ 
+   /**
+    * Parse the specified <code>String</code> as a <code>double</code>. The
+    * extended BNF grammar is as follows:<br>
+    * <pre>
+    * <em>DecodableString</em>:
+    *      ( [ <code>-</code> | <code>+</code> ] <code>NaN</code> )
+    *    | ( [ <code>-</code> | <code>+</code> ] <code>Infinity</code> )
+    *    | ( [ <code>-</code> | <code>+</code> ] <em>FloatingPoint</em>
+    *              [ <code>f</code> | <code>F</code> | <code>d</code>
+    *                | <code>D</code>] )
+    * <em>FloatingPoint</em>:
+    *      ( { <em>Digit</em> }+ [ <code>.</code> { <em>Digit</em> } ]
+    *              [ <em>Exponent</em> ] )
+    *    | ( <code>.</code> { <em>Digit</em> }+ [ <em>Exponent</em> ] )
+    * <em>Exponent</em>:
+    *      ( ( <code>e</code> | <code>E</code> )
+    *              [ <code>-</code> | <code>+</code> ] { <em>Digit</em> }+ )
+    * <em>Digit</em>: <em><code>'0'</code> through <code>'9'</code></em>
+    * </pre>
+    *
+    * <p>NaN and infinity are special cases, to allow parsing of the output
+    * of toString.  Otherwise, the result is determined by calculating
+    * <em>n * 10<sup>exponent</sup></em> to infinite precision, then rounding
+    * to the nearest double. Remember that many numbers cannot be precisely
+    * represented in floating point. In case of overflow, infinity is used,
+    * and in case of underflow, signed zero is used. Unlike Integer.parseInt,
+    * this does not accept Unicode digits outside the ASCII range.
+    *
+    * <p>If an unexpected character is found in the <code>String</code>, a
+    * <code>NumberFormatException</code> will be thrown.  Leading and trailing
+    * 'whitespace' is ignored via <code>String.trim()</code>, but spaces
+    * internal to the actual number are not allowed.
+    *
+    * <p>To parse numbers according to another format, consider using
+    * {@link java.text.NumberFormat}.
+    *
+    * @XXX specify where/how we are not in accord with the spec.
+    *
+    * @param str the <code>String</code> to convert
+    * @return the <code>double</code> value of <code>s</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>double</code>
+    * @throws NullPointerException if <code>s</code> is null
+    * @see #MIN_VALUE
+    * @see #MAX_VALUE
+    * @see #POSITIVE_INFINITY
+    * @see #NEGATIVE_INFINITY
+    * @since 1.2
+    */
+   public static double parseDouble(String str)
+   {
+     return VMDouble.parseDouble(str);
+   }
+ 
+   /**
+    * Return <code>true</code> if the <code>double</code> has the same
+    * value as <code>NaN</code>, otherwise return <code>false</code>.
+    *
+    * @param v the <code>double</code> to compare
+    * @return whether the argument is <code>NaN</code>.
+    */
+   public static boolean isNaN(double v)
+   {
+     // This works since NaN != NaN is the only reflexive inequality
+     // comparison which returns true.
+     return v != v;
+   }
+ 
+   /**
+    * Return <code>true</code> if the <code>double</code> has a value
+    * equal to either <code>NEGATIVE_INFINITY</code> or
+    * <code>POSITIVE_INFINITY</code>, otherwise return <code>false</code>.
+    *
+    * @param v the <code>double</code> to compare
+    * @return whether the argument is (-/+) infinity.
+    */
+   public static boolean isInfinite(double v)
+   {
+     return v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY;
+   }
+ 
+   /**
+    * Return <code>true</code> if the value of this <code>Double</code>
+    * is the same as <code>NaN</code>, otherwise return <code>false</code>.
+    *
+    * @return whether this <code>Double</code> is <code>NaN</code>
+    */
+   public boolean isNaN()
+   {
+     return isNaN(value);
+   }
+ 
+   /**
+    * Return <code>true</code> if the value of this <code>Double</code>
+    * is the same as <code>NEGATIVE_INFINITY</code> or
+    * <code>POSITIVE_INFINITY</code>, otherwise return <code>false</code>.
+    *
+    * @return whether this <code>Double</code> is (-/+) infinity
+    */
+   public boolean isInfinite()
+   {
+     return isInfinite(value);
+   }
+ 
+   /**
+    * Convert the <code>double</code> value of this <code>Double</code>
+    * to a <code>String</code>.  This method calls
+    * <code>Double.toString(double)</code> to do its dirty work.
+    *
+    * @return the <code>String</code> representation
+    * @see #toString(double)
+    */
+   public String toString()
+   {
+     return toString(value);
+   }
+ 
+   /**
+    * Return the value of this <code>Double</code> as a <code>byte</code>.
+    *
+    * @return the byte value
+    * @since 1.1
+    */
+   public byte byteValue()
+   {
+     return (byte) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Double</code> as a <code>short</code>.
+    *
+    * @return the short value
+    * @since 1.1
+    */
+   public short shortValue()
+   {
+     return (short) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Double</code> as an <code>int</code>.
+    *
+    * @return the int value
+    */
+   public int intValue()
+   {
+     return (int) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Double</code> as a <code>long</code>.
+    *
+    * @return the long value
+    */
+   public long longValue()
+   {
+     return (long) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Double</code> as a <code>float</code>.
+    *
+    * @return the float value
+    */
+   public float floatValue()
+   {
+     return (float) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Double</code>.
+    *
+    * @return the double value
+    */
+   public double doubleValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return a hashcode representing this Object. <code>Double</code>'s hash
+    * code is calculated by:<br>
+    * <code>long v = Double.doubleToLongBits(doubleValue());<br>
+    *    int hash = (int)(v^(v&gt;&gt;32))</code>.
+    *
+    * @return this Object's hash code
+    * @see #doubleToLongBits(double)
+    */
+   public int hashCode()
+   {
+     long v = doubleToLongBits(value);
+     return (int) (v ^ (v >>> 32));
+   }
+ 
+   /**
+    * Returns <code>true</code> if <code>obj</code> is an instance of
+    * <code>Double</code> and represents the same double value. Unlike comparing
+    * two doubles with <code>==</code>, this treats two instances of
+    * <code>Double.NaN</code> as equal, but treats <code>0.0</code> and
+    * <code>-0.0</code> as unequal.
+    *
+    * <p>Note that <code>d1.equals(d2)</code> is identical to
+    * <code>doubleToLongBits(d1.doubleValue()) ==
+    *    doubleToLongBits(d2.doubleValue())</code>.
+    *
+    * @param obj the object to compare
+    * @return whether the objects are semantically equal
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof Double))
+       return false;
+ 
+     double d = ((Double) obj).value;
+ 
+     // Avoid call to native method. However, some implementations, like gcj,
+     // are better off using floatToIntBits(value) == floatToIntBits(f).
+     // Check common case first, then check NaN and 0.
+     if (value == d)
+       return (value != 0) || (1 / value == 1 / d);
+     return isNaN(value) && isNaN(d);
+   }
+ 
+   /**
+    * Convert the double to the IEEE 754 floating-point "double format" bit
+    * layout. Bit 63 (the most significant) is the sign bit, bits 62-52
+    * (masked by 0x7ff0000000000000L) represent the exponent, and bits 51-0
+    * (masked by 0x000fffffffffffffL) are the mantissa. This function
+    * collapses all versions of NaN to 0x7ff8000000000000L. The result of this
+    * function can be used as the argument to
+    * <code>Double.longBitsToDouble(long)</code> to obtain the original
+    * <code>double</code> value.
+    *
+    * @param value the <code>double</code> to convert
+    * @return the bits of the <code>double</code>
+    * @see #longBitsToDouble(long)
+    */
+   public static long doubleToLongBits(double value)
+   {
+     return VMDouble.doubleToLongBits(value);
+   }
+ 
+   /**
+    * Convert the double to the IEEE 754 floating-point "double format" bit
+    * layout. Bit 63 (the most significant) is the sign bit, bits 62-52
+    * (masked by 0x7ff0000000000000L) represent the exponent, and bits 51-0
+    * (masked by 0x000fffffffffffffL) are the mantissa. This function
+    * leaves NaN alone, rather than collapsing to a canonical value. The
+    * result of this function can be used as the argument to
+    * <code>Double.longBitsToDouble(long)</code> to obtain the original
+    * <code>double</code> value.
+    *
+    * @param value the <code>double</code> to convert
+    * @return the bits of the <code>double</code>
+    * @see #longBitsToDouble(long)
+    */
+   public static long doubleToRawLongBits(double value)
+   {
+     return VMDouble.doubleToRawLongBits(value);
+   }
+ 
+   /**
+    * Convert the argument in IEEE 754 floating-point "double format" bit
+    * layout to the corresponding float. Bit 63 (the most significant) is the
+    * sign bit, bits 62-52 (masked by 0x7ff0000000000000L) represent the
+    * exponent, and bits 51-0 (masked by 0x000fffffffffffffL) are the mantissa.
+    * This function leaves NaN alone, so that you can recover the bit pattern
+    * with <code>Double.doubleToRawLongBits(double)</code>.
+    *
+    * @param bits the bits to convert
+    * @return the <code>double</code> represented by the bits
+    * @see #doubleToLongBits(double)
+    * @see #doubleToRawLongBits(double)
+    */
+   public static double longBitsToDouble(long bits)
+   {
+     return VMDouble.longBitsToDouble(bits);
+   }
+ 
+   /**
+    * Compare two Doubles numerically by comparing their <code>double</code>
+    * values. The result is positive if the first is greater, negative if the
+    * second is greater, and 0 if the two are equal. However, this special
+    * cases NaN and signed zero as follows: NaN is considered greater than
+    * all other doubles, including <code>POSITIVE_INFINITY</code>, and positive
+    * zero is considered greater than negative zero.
+    *
+    * @param d the Double to compare
+    * @return the comparison
+    * @since 1.2
+    */
+   public int compareTo(Double d)
+   {
+     return compare(value, d.value);
+   }
+ 
+   /**
+    * Behaves like <code>compareTo(Double)</code> unless the Object
+    * is not an <code>Double</code>.
+    *
+    * @param o the object to compare
+    * @return the comparison
+    * @throws ClassCastException if the argument is not a <code>Double</code>
+    * @see #compareTo(Double)
+    * @see Comparable
+    * @since 1.2
+    */
+   public int compareTo(Object o)
+   {
+     return compare(value, ((Double) o).value);
+   }
+ 
+   /**
+    * Behaves like <code>new Double(x).compareTo(new Double(y))</code>; in
+    * other words this compares two doubles, special casing NaN and zero,
+    * without the overhead of objects.
+    *
+    * @param x the first double to compare
+    * @param y the second double to compare
+    * @return the comparison
+    * @since 1.4
+    */
+   public static int compare(double x, double y)
+   {
+     if (isNaN(x))
+       return isNaN(y) ? 0 : 1;
+     if (isNaN(y))
+       return -1;
+     // recall that 0.0 == -0.0, so we convert to infinites and try again
+     if (x == 0 && y == 0)
+       return (int) (1 / x - 1 / y);
+     if (x == y)
+       return 0;
+ 
+     return x > y ? 1 : -1;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/EnumConstantNotPresentException.java gcc-4.1.0/libjava/classpath/java/lang/EnumConstantNotPresentException.java
*** gcc-4.0.2/libjava/classpath/java/lang/EnumConstantNotPresentException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/EnumConstantNotPresentException.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,93 ----
+ /* EnumConstantNotPresentException.java -- thrown when enum constant
+    not available
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An exception of this type is thrown when a symbolic reference is
+  * made to an enum constant which does not exist.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @since 1.5
+  */
+ public class EnumConstantNotPresentException extends RuntimeException
+ {
+   /**
+    * The enum's type.  Note that the name is fixed by the
+    * serialization spec.
+    */
+   private Class enumType;
+ 
+   /**
+    * The name of the missing enum constant.  Note that the name is
+    * fixed by the serialization spec.
+    */
+   private String constantName;
+ 
+   /**
+    * Create a new EnumConstantNotPresentException with the indicated
+    * enum type and enum constant name.
+    * @param theEnum the enum's class
+    * @param name the name of the missing enum constant
+    */
+   public EnumConstantNotPresentException(Class theEnum, String name)
+   {
+     super("enum " + theEnum + " is missing the constant " + name);
+     enumType = theEnum;
+     constantName = name;
+   }
+ 
+   /**
+    * Return the name of the missing constant.
+    * @return the name of the missing constant
+    */
+   public String constantName()
+   {
+     return constantName;
+   }
+ 
+   /**
+    * Return the enum type which is missing a constant.
+    * @return the enum type which is missing a constant
+    */
+   public Class enumType()
+   {
+     return enumType;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Error.java gcc-4.1.0/libjava/classpath/java/lang/Error.java
*** gcc-4.0.2/libjava/classpath/java/lang/Error.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Error.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,107 ----
+ /* Error.java -- Indication of fatal abnormal conditions
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Applications should not try to catch errors since they indicate
+  * abnormal conditions.  An abnormal condition is something which should not
+  * occur, or which should not be recovered from.  This latter category
+  * includes <code>ThreadDeath</code> and <code>AssertionError</code>.
+  *
+  * <p>A method is not required to declare any subclass of <code>Error</code> in
+  * its <code>throws</code> clause which might be thrown but not caught while
+  * executing the method.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Error extends Throwable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 4980196508277280342L;
+ 
+   /**
+    * Create an error without a message. The cause remains uninitialized.
+    *
+    * @see #initCause(Throwable)
+    */
+   public Error()
+   {
+   }
+ 
+   /**
+    * Create an error with a message. The cause remains uninitialized.
+    *
+    * @param s the message string
+    * @see #initCause(Throwable)
+    */
+   public Error(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an error with a message and a cause.
+    *
+    * @param s the message string
+    * @param cause the cause of this error
+    * @since 1.4
+    */
+   public Error(String s, Throwable cause)
+   {
+     super(s, cause);
+   }
+ 
+   /**
+    * Create an error with a given cause, and a message of
+    * <code>cause == null ? null : cause.toString()</code>.
+    *
+    * @param cause the cause of this error
+    * @since 1.4
+    */
+   public Error(Throwable cause)
+   {
+     super(cause);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Exception.java gcc-4.1.0/libjava/classpath/java/lang/Exception.java
*** gcc-4.0.2/libjava/classpath/java/lang/Exception.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Exception.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /* Exception.java -- generic exception thrown to indicate an exceptional
+    condition has occurred.
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * The root class of all exceptions worth catching in a program.  This
+  * includes the special category of <code>RuntimeException</code>, which
+  * does not need to be declared in a throws clause.  Exceptions can be used
+  * to represent almost any exceptional behavior, such as programming errors,
+  * mouse movements, keyboard clicking, etc.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @status updated to 1.4
+  */
+ public class Exception extends Throwable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -3387516993124229948L;
+ 
+   /**
+    * Create an exception without a message. The cause remains uninitialized.
+    *
+    * @see #initCause(Throwable)
+    */
+   public Exception()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message. The cause remains uninitialized.
+    *
+    * @param s the message
+    * @see #initCause(Throwable)
+    */
+   public Exception(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message string
+    * @param cause the cause of this error
+    * @since 1.4
+    */
+   public Exception(String s, Throwable cause)
+   {
+     super(s, cause);
+   }
+ 
+   /**
+    * Create an exception with a given cause, and a message of
+    * <code>cause == null ? null : cause.toString()</code>.
+    *
+    * @param cause the cause of this exception
+    * @since 1.4
+    */
+   public Exception(Throwable cause)
+   {
+     super(cause);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ExceptionInInitializerError.java gcc-4.1.0/libjava/classpath/java/lang/ExceptionInInitializerError.java
*** gcc-4.0.2/libjava/classpath/java/lang/ExceptionInInitializerError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ExceptionInInitializerError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,123 ----
+ /* ExceptionInInitializerError.java -- thrown when class initialization fails
+    with an uncaught exception
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An <code>ExceptionInInitializerError</code> is thrown when an uncaught
+  * exception has occurred in a static initializer or the initializer for a
+  * static variable. In general, this wraps only RuntimeExceptions, since the
+  * compiler does not allow a checked exception to be uncaught in an
+  * initializer. This exception only occurs during reflection, when a class
+  * is initialized as part of another action.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ExceptionInInitializerError extends LinkageError
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   static final long serialVersionUID = 1521711792217232256L;
+ 
+   /**
+    * The cause of this exception (duplicates the one stored in Throwable).
+    *
+    * @serial the exception cause
+    */
+   private final Throwable exception;
+ 
+   /**
+    * Create an error without a message. The cause is initialized as null.
+    */
+   public ExceptionInInitializerError()
+   {
+     this((String) null);
+   }
+ 
+   /**
+    * Create an error with a message. The cause is initialized as null.
+    *
+    * @param s the message
+    */
+   public ExceptionInInitializerError(String s)
+   {
+     super(s);
+     exception = null;
+   }
+ 
+   /**
+    * Creates an error an saves a reference to the <code>Throwable</code>
+    * object. The message string is null.
+    *
+    * @param t the exception thrown
+    */
+   public ExceptionInInitializerError(Throwable t)
+   {
+     super(null);
+     initCause(t);
+     exception = t;
+   }
+ 
+   /**
+    * Return the exception that caused this error to be created. This is a
+    * legacy method; the preferred choice now is {@link Throwable#getCause()}.
+    *
+    * @return the cause, or null if unknown
+    */
+   public Throwable getException()
+   {
+     return exception;
+   }
+ 
+   /**
+    * Return the exception that cause this error to be created.
+    *
+    * @return the cause, or null if unknown
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return exception;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Float.java gcc-4.1.0/libjava/classpath/java/lang/Float.java
*** gcc-4.0.2/libjava/classpath/java/lang/Float.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Float.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,549 ----
+ /* Float.java -- object wrapper for float
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Instances of class <code>Float</code> represent primitive
+  * <code>float</code> values.
+  *
+  * Additionally, this class provides various helper functions and variables
+  * related to floats.
+  *
+  * @author Paul Fisher
+  * @author Andrew Haley (aph@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public final class Float extends Number implements Comparable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -2671257302660747028L;
+ 
+   /**
+    * The maximum positive value a <code>double</code> may represent
+    * is 3.4028235e+38f.
+    */
+   public static final float MAX_VALUE = 3.4028235e+38f;
+ 
+   /**
+    * The minimum positive value a <code>float</code> may represent
+    * is 1.4e-45.
+    */
+   public static final float MIN_VALUE = 1.4e-45f;
+ 
+   /**
+    * The value of a float representation -1.0/0.0, negative infinity.
+    */
+   public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;
+ 
+   /**
+    * The value of a float representation 1.0/0.0, positive infinity.
+    */
+   public static final float POSITIVE_INFINITY = 1.0f / 0.0f;
+ 
+   /**
+    * All IEEE 754 values of NaN have the same value in Java.
+    */
+   public static final float NaN = 0.0f / 0.0f;
+ 
+   /**
+    * The primitive type <code>float</code> is represented by this
+    * <code>Class</code> object.
+    * @since 1.1
+    */
+   public static final Class TYPE = VMClassLoader.getPrimitiveClass('F');
+ 
+   /**
+    * The number of bits needed to represent a <code>float</code>.
+    * @since 1.5
+    */
+   public static final int SIZE = 32;
+ 
+   /**
+    * The immutable value of this Float.
+    *
+    * @serial the wrapped float
+    */
+   private final float value;
+ 
+   /**
+    * Create a <code>Float</code> from the primitive <code>float</code>
+    * specified.
+    *
+    * @param value the <code>float</code> argument
+    */
+   public Float(float value)
+   {
+     this.value = value;
+   }
+ 
+   /**
+    * Create a <code>Float</code> from the primitive <code>double</code>
+    * specified.
+    *
+    * @param value the <code>double</code> argument
+    */
+   public Float(double value)
+   {
+     this.value = (float) value;
+   }
+ 
+   /**
+    * Create a <code>Float</code> from the specified <code>String</code>.
+    * This method calls <code>Float.parseFloat()</code>.
+    *
+    * @param s the <code>String</code> to convert
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>float</code>
+    * @throws NullPointerException if <code>s</code> is null
+    * @see #parseFloat(String)
+    */
+   public Float(String s)
+   {
+     value = parseFloat(s);
+   }
+ 
+   /**
+    * Convert the <code>float</code> to a <code>String</code>.
+    * Floating-point string representation is fairly complex: here is a
+    * rundown of the possible values.  "<code>[-]</code>" indicates that a
+    * negative sign will be printed if the value (or exponent) is negative.
+    * "<code>&lt;number&gt;</code>" means a string of digits ('0' to '9').
+    * "<code>&lt;digit&gt;</code>" means a single digit ('0' to '9').<br>
+    *
+    * <table border=1>
+    * <tr><th>Value of Float</th><th>String Representation</th></tr>
+    * <tr><td>[+-] 0</td> <td><code>[-]0.0</code></td></tr>
+    * <tr><td>Between [+-] 10<sup>-3</sup> and 10<sup>7</sup>, exclusive</td>
+    *     <td><code>[-]number.number</code></td></tr>
+    * <tr><td>Other numeric value</td>
+    *     <td><code>[-]&lt;digit&gt;.&lt;number&gt;
+    *          E[-]&lt;number&gt;</code></td></tr>
+    * <tr><td>[+-] infinity</td> <td><code>[-]Infinity</code></td></tr>
+    * <tr><td>NaN</td> <td><code>NaN</code></td></tr>
+    * </table>
+    *
+    * Yes, negative zero <em>is</em> a possible value.  Note that there is
+    * <em>always</em> a <code>.</code> and at least one digit printed after
+    * it: even if the number is 3, it will be printed as <code>3.0</code>.
+    * After the ".", all digits will be printed except trailing zeros. The
+    * result is rounded to the shortest decimal number which will parse back
+    * to the same float.
+    *
+    * <p>To create other output formats, use {@link java.text.NumberFormat}.
+    *
+    * @XXX specify where we are not in accord with the spec.
+    *
+    * @param f the <code>float</code> to convert
+    * @return the <code>String</code> representing the <code>float</code>
+    */
+   public static String toString(float f)
+   {
+     return VMDouble.toString(f, true);
+   }
+ 
+   /**
+    * Creates a new <code>Float</code> object using the <code>String</code>.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the new <code>Float</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>float</code>
+    * @throws NullPointerException if <code>s</code> is null
+    * @see #parseFloat(String)
+    */
+   public static Float valueOf(String s)
+   {
+     return new Float(parseFloat(s));
+   }
+ 
+   /**
+    * Returns a <code>Float</code> object wrapping the value.
+    * In contrast to the <code>Float</code> constructor, this method
+    * may cache some values.  It is used by boxing conversion.
+    *
+    * @param val the value to wrap
+    * @return the <code>Float</code>
+    * 
+    * @since 1.5
+    */
+   public static Float valueOf(float val)
+   {
+     // We don't actually cache, but we could.
+     return new Float(val);
+   }
+ 
+   /**
+    * Parse the specified <code>String</code> as a <code>float</code>. The
+    * extended BNF grammar is as follows:<br>
+    * <pre>
+    * <em>DecodableString</em>:
+    *      ( [ <code>-</code> | <code>+</code> ] <code>NaN</code> )
+    *    | ( [ <code>-</code> | <code>+</code> ] <code>Infinity</code> )
+    *    | ( [ <code>-</code> | <code>+</code> ] <em>FloatingPoint</em>
+    *              [ <code>f</code> | <code>F</code> | <code>d</code>
+    *                | <code>D</code>] )
+    * <em>FloatingPoint</em>:
+    *      ( { <em>Digit</em> }+ [ <code>.</code> { <em>Digit</em> } ]
+    *              [ <em>Exponent</em> ] )
+    *    | ( <code>.</code> { <em>Digit</em> }+ [ <em>Exponent</em> ] )
+    * <em>Exponent</em>:
+    *      ( ( <code>e</code> | <code>E</code> )
+    *              [ <code>-</code> | <code>+</code> ] { <em>Digit</em> }+ )
+    * <em>Digit</em>: <em><code>'0'</code> through <code>'9'</code></em>
+    * </pre>
+    *
+    * <p>NaN and infinity are special cases, to allow parsing of the output
+    * of toString.  Otherwise, the result is determined by calculating
+    * <em>n * 10<sup>exponent</sup></em> to infinite precision, then rounding
+    * to the nearest float. Remember that many numbers cannot be precisely
+    * represented in floating point. In case of overflow, infinity is used,
+    * and in case of underflow, signed zero is used. Unlike Integer.parseInt,
+    * this does not accept Unicode digits outside the ASCII range.
+    *
+    * <p>If an unexpected character is found in the <code>String</code>, a
+    * <code>NumberFormatException</code> will be thrown.  Leading and trailing
+    * 'whitespace' is ignored via <code>String.trim()</code>, but spaces
+    * internal to the actual number are not allowed.
+    *
+    * <p>To parse numbers according to another format, consider using
+    * {@link java.text.NumberFormat}.
+    *
+    * @XXX specify where/how we are not in accord with the spec.
+    *
+    * @param str the <code>String</code> to convert
+    * @return the <code>float</code> value of <code>s</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>float</code>
+    * @throws NullPointerException if <code>s</code> is null
+    * @see #MIN_VALUE
+    * @see #MAX_VALUE
+    * @see #POSITIVE_INFINITY
+    * @see #NEGATIVE_INFINITY
+    * @since 1.2
+    */
+   public static float parseFloat(String str)
+   {
+     // XXX Rounding parseDouble() causes some errors greater than 1 ulp from
+     // the infinitely precise decimal.
+     return (float) Double.parseDouble(str);
+   }
+ 
+   /**
+    * Return <code>true</code> if the <code>float</code> has the same
+    * value as <code>NaN</code>, otherwise return <code>false</code>.
+    *
+    * @param v the <code>float</code> to compare
+    * @return whether the argument is <code>NaN</code>
+    */
+   public static boolean isNaN(float v)
+   {
+     // This works since NaN != NaN is the only reflexive inequality
+     // comparison which returns true.
+     return v != v;
+   }
+ 
+   /**
+    * Return <code>true</code> if the <code>float</code> has a value
+    * equal to either <code>NEGATIVE_INFINITY</code> or
+    * <code>POSITIVE_INFINITY</code>, otherwise return <code>false</code>.
+    *
+    * @param v the <code>float</code> to compare
+    * @return whether the argument is (-/+) infinity
+    */
+   public static boolean isInfinite(float v)
+   {
+     return v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY;
+   }
+ 
+   /**
+    * Return <code>true</code> if the value of this <code>Float</code>
+    * is the same as <code>NaN</code>, otherwise return <code>false</code>.
+    *
+    * @return whether this <code>Float</code> is <code>NaN</code>
+    */
+   public boolean isNaN()
+   {
+     return isNaN(value);
+   }
+ 
+   /**
+    * Return <code>true</code> if the value of this <code>Float</code>
+    * is the same as <code>NEGATIVE_INFINITY</code> or
+    * <code>POSITIVE_INFINITY</code>, otherwise return <code>false</code>.
+    *
+    * @return whether this <code>Float</code> is (-/+) infinity
+    */
+   public boolean isInfinite()
+   {
+     return isInfinite(value);
+   }
+ 
+   /**
+    * Convert the <code>float</code> value of this <code>Float</code>
+    * to a <code>String</code>.  This method calls
+    * <code>Float.toString(float)</code> to do its dirty work.
+    *
+    * @return the <code>String</code> representation
+    * @see #toString(float)
+    */
+   public String toString()
+   {
+     return toString(value);
+   }
+ 
+   /**
+    * Return the value of this <code>Float</code> as a <code>byte</code>.
+    *
+    * @return the byte value
+    * @since 1.1
+    */
+   public byte byteValue()
+   {
+     return (byte) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Float</code> as a <code>short</code>.
+    *
+    * @return the short value
+    * @since 1.1
+    */
+   public short shortValue()
+   {
+     return (short) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Integer</code> as an <code>int</code>.
+    *
+    * @return the int value
+    */
+   public int intValue()
+   {
+     return (int) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Integer</code> as a <code>long</code>.
+    *
+    * @return the long value
+    */
+   public long longValue()
+   {
+     return (long) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Float</code>.
+    *
+    * @return the float value
+    */
+   public float floatValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Float</code> as a <code>double</code>
+    *
+    * @return the double value
+    */
+   public double doubleValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return a hashcode representing this Object. <code>Float</code>'s hash
+    * code is calculated by calling <code>floatToIntBits(floatValue())</code>.
+    *
+    * @return this Object's hash code
+    * @see #floatToIntBits(float)
+    */
+   public int hashCode()
+   {
+     return floatToIntBits(value);
+   }
+ 
+   /**
+    * Returns <code>true</code> if <code>obj</code> is an instance of
+    * <code>Float</code> and represents the same float value. Unlike comparing
+    * two floats with <code>==</code>, this treats two instances of
+    * <code>Float.NaN</code> as equal, but treats <code>0.0</code> and
+    * <code>-0.0</code> as unequal.
+    *
+    * <p>Note that <code>f1.equals(f2)</code> is identical to
+    * <code>floatToIntBits(f1.floatValue()) ==
+    *    floatToIntBits(f2.floatValue())</code>.
+    *
+    * @param obj the object to compare
+    * @return whether the objects are semantically equal
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof Float))
+       return false;
+ 
+     float f = ((Float) obj).value;
+ 
+     // Avoid call to native method. However, some implementations, like gcj,
+     // are better off using floatToIntBits(value) == floatToIntBits(f).
+     // Check common case first, then check NaN and 0.
+     if (value == f)
+       return (value != 0) || (1 / value == 1 / f);
+     return isNaN(value) && isNaN(f);
+   }
+ 
+   /**
+    * Convert the float to the IEEE 754 floating-point "single format" bit
+    * layout. Bit 31 (the most significant) is the sign bit, bits 30-23
+    * (masked by 0x7f800000) represent the exponent, and bits 22-0
+    * (masked by 0x007fffff) are the mantissa. This function collapses all
+    * versions of NaN to 0x7fc00000. The result of this function can be used
+    * as the argument to <code>Float.intBitsToFloat(int)</code> to obtain the
+    * original <code>float</code> value.
+    *
+    * @param value the <code>float</code> to convert
+    * @return the bits of the <code>float</code>
+    * @see #intBitsToFloat(int)
+    */
+   public static int floatToIntBits(float value)
+   {
+     return VMFloat.floatToIntBits(value);
+   }
+ 
+   /**
+    * Convert the float to the IEEE 754 floating-point "single format" bit
+    * layout. Bit 31 (the most significant) is the sign bit, bits 30-23
+    * (masked by 0x7f800000) represent the exponent, and bits 22-0
+    * (masked by 0x007fffff) are the mantissa. This function leaves NaN alone,
+    * rather than collapsing to a canonical value. The result of this function
+    * can be used as the argument to <code>Float.intBitsToFloat(int)</code> to
+    * obtain the original <code>float</code> value.
+    *
+    * @param value the <code>float</code> to convert
+    * @return the bits of the <code>float</code>
+    * @see #intBitsToFloat(int)
+    */
+   public static int floatToRawIntBits(float value)
+   {
+     return VMFloat.floatToRawIntBits(value);
+   }
+ 
+   /**
+    * Convert the argument in IEEE 754 floating-point "single format" bit
+    * layout to the corresponding float. Bit 31 (the most significant) is the
+    * sign bit, bits 30-23 (masked by 0x7f800000) represent the exponent, and
+    * bits 22-0 (masked by 0x007fffff) are the mantissa. This function leaves
+    * NaN alone, so that you can recover the bit pattern with
+    * <code>Float.floatToRawIntBits(float)</code>.
+    *
+    * @param bits the bits to convert
+    * @return the <code>float</code> represented by the bits
+    * @see #floatToIntBits(float)
+    * @see #floatToRawIntBits(float)
+    */
+   public static float intBitsToFloat(int bits)
+   {
+     return VMFloat.intBitsToFloat(bits);
+   }
+ 
+   /**
+    * Compare two Floats numerically by comparing their <code>float</code>
+    * values. The result is positive if the first is greater, negative if the
+    * second is greater, and 0 if the two are equal. However, this special
+    * cases NaN and signed zero as follows: NaN is considered greater than
+    * all other floats, including <code>POSITIVE_INFINITY</code>, and positive
+    * zero is considered greater than negative zero.
+    *
+    * @param f the Float to compare
+    * @return the comparison
+    * @since 1.2
+    */
+   public int compareTo(Float f)
+   {
+     return compare(value, f.value);
+   }
+ 
+   /**
+    * Behaves like <code>compareTo(Float)</code> unless the Object
+    * is not an <code>Float</code>.
+    *
+    * @param o the object to compare
+    * @return the comparison
+    * @throws ClassCastException if the argument is not a <code>Float</code>
+    * @see #compareTo(Float)
+    * @see Comparable
+    * @since 1.2
+    */
+   public int compareTo(Object o)
+   {
+     return compare(value, ((Float) o).value);
+   }
+ 
+   /**
+    * Behaves like <code>new Float(x).compareTo(new Float(y))</code>; in
+    * other words this compares two floats, special casing NaN and zero,
+    * without the overhead of objects.
+    *
+    * @param x the first float to compare
+    * @param y the second float to compare
+    * @return the comparison
+    * @since 1.4
+    */
+   public static int compare(float x, float y)
+   {
+     if (isNaN(x))
+       return isNaN(y) ? 0 : 1;
+     if (isNaN(y))
+       return -1;
+     // recall that 0.0 == -0.0, so we convert to infinities and try again
+     if (x == 0 && y == 0)
+       return (int) (1 / x - 1 / y);
+     if (x == y)
+       return 0;
+ 
+     return x > y ? 1 : -1;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/IllegalAccessError.java gcc-4.1.0/libjava/classpath/java/lang/IllegalAccessError.java
*** gcc-4.0.2/libjava/classpath/java/lang/IllegalAccessError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/IllegalAccessError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* IllegalAccessError.java -- thrown when linking to an inaccessible member
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An <code>IllegalAccessError</code> is thrown when an attempt is made to
+  * call a method, or access or modify a field that the application does not
+  * have access to.  Because this error is usually caught by a compiler,
+  * the error only occurs at runtime when the definition of a class has
+  * changed in a way that is incompatible with the previously compiled
+  * application.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class IllegalAccessError extends IncompatibleClassChangeError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -8988904074992417891L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public IllegalAccessError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public IllegalAccessError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/IllegalAccessException.java gcc-4.1.0/libjava/classpath/java/lang/IllegalAccessException.java
*** gcc-4.0.2/libjava/classpath/java/lang/IllegalAccessException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/IllegalAccessException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,99 ----
+ /* IllegalAccessException.java -- thrown on attempt to reflect on
+    inaccessible data
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Method;
+ 
+ /**
+  * Thrown whenever a reflective method tries to do something that the
+  * compiler would not allow.  For example, using reflection to set a private
+  * variable that belongs to a class in another package is bad.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see Class#newInstance()
+  * @see Field#set(Object, Object)
+  * @see Field#setBoolean(Object, boolean)
+  * @see Field#setByte(Object, byte)
+  * @see Field#setShort(Object, short)
+  * @see Field#setChar(Object, char)
+  * @see Field#setInt(Object, int)
+  * @see Field#setLong(Object, long)
+  * @see Field#setFloat(Object, float)
+  * @see Field#setDouble(Object, double)
+  * @see Field#get(Object)
+  * @see Field#getBoolean(Object)
+  * @see Field#getByte(Object)
+  * @see Field#getShort(Object)
+  * @see Field#getChar(Object)
+  * @see Field#getInt(Object)
+  * @see Field#getLong(Object)
+  * @see Field#getFloat(Object)
+  * @see Field#getDouble(Object)
+  * @see Method#invoke(Object, Object[])
+  * @see Constructor#newInstance(Object[])
+  * @status updated to 1.4
+  */
+ public class IllegalAccessException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 6616958222490762034L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public IllegalAccessException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public IllegalAccessException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/IllegalArgumentException.java gcc-4.1.0/libjava/classpath/java/lang/IllegalArgumentException.java
*** gcc-4.0.2/libjava/classpath/java/lang/IllegalArgumentException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/IllegalArgumentException.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,129 ----
+ /* IllegalArgumentException.java -- thrown when a method is passed an
+    illegal or inappropriate argument
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when a method is passed an illegal or inappropriate argument. For
+  * example:<br>
+  * <pre>
+  * wait(-1);
+  * </pre>
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @status updated to 1.5
+  */
+ public class IllegalArgumentException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -5365630128856068164L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public IllegalArgumentException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public IllegalArgumentException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * <p>
+    * Constructs a <code>IllegalArgumentException</code> using
+    * the specified error message, which should give further details
+    * as to the reason for this exception.  The specified cause
+    * <code>Throwable</code> may be used to provide additional history,
+    * with regards to the root of the problem.  It is perfectly valid
+    * for this to be null, if the cause of the problem is unknown.
+    * </p>
+    * <p>
+    * <strong>Note</strong>: the detail message from the cause is not
+    * automatically incorporated into the resulting detail message of
+    * this exception.
+    * </p>
+    * 
+    * @param message the detail message, which should give the reason for
+    *                this exception being thrown.
+    * @param cause the cause of this exception, or null if the cause
+    *              is unknown.
+    * @since 1.5
+    */
+   public IllegalArgumentException(String message, Throwable cause)
+   {
+     super(message, cause);
+   }
+ 
+   /**
+    * <p>
+    * Constructs a <code>IllegalArgumentException</code> using
+    * the specified cause <code>Throwable</code>, which may be used
+    * to provide additional history, with regards to the root of the
+    * problem.  It is perfectly valid for this to be null, if the
+    * cause of the problem is unknown.
+    * </p>
+    * <p>
+    * The detail message is automatically constructed from the detail
+    * message of the supplied causal exception.  If the cause is null,
+    * then the detail message will also be null.  Otherwise, the detail
+    * message of this exception will be that of the causal exception.
+    * This makes this constructor very useful for simply wrapping another
+    * exception.
+    * </p>
+    * 
+    * @param cause the cause of this exception, or null if the cause
+    *              is unknown.
+    * @since 1.5
+    */
+   public IllegalArgumentException(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/IllegalMonitorStateException.java gcc-4.1.0/libjava/classpath/java/lang/IllegalMonitorStateException.java
*** gcc-4.0.2/libjava/classpath/java/lang/IllegalMonitorStateException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/IllegalMonitorStateException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* IllegalMonitorStateException.java -- thrown when trying to wait or
+    notify a monitor that is not owned
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when a thread attempts to wait or notify on a monitor that it
+  * does not own (ie. it has not synchronized on the object). For example:<br>
+  * <pre>
+  * void m() {
+  *   notify();
+  * }
+  * </pre>
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class IllegalMonitorStateException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 3713306369498869069L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public IllegalMonitorStateException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public IllegalMonitorStateException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/IllegalStateException.java gcc-4.1.0/libjava/classpath/java/lang/IllegalStateException.java
*** gcc-4.0.2/libjava/classpath/java/lang/IllegalStateException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/IllegalStateException.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,135 ----
+ /* IllegalStateException.java -- thrown when invoking a method at
+    an illegal or inappropriate time
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when a method is invoked at an illegal or inappropriate time. For
+  * example:<br>
+  * <pre>
+  * void m(Collecion c)
+  * {
+  *   c.iterator().remove();
+  * }
+  * </pre>
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.1
+  * @status updated to 1.5
+  */
+ public class IllegalStateException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -1848914673093119416L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public IllegalStateException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public IllegalStateException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * <p>
+    * Constructs a <code>IllegalStateException</code> using
+    * the specified error message, which should give further details
+    * as to the reason for this exception.  The specified cause
+    * <code>Throwable</code> may be used to provide additional history,
+    * with regards to the root of the problem.  It is perfectly valid
+    * for this to be null, if the cause of the problem is unknown.
+    * </p>
+    * <p>
+    * <strong>Note</strong>: the detail message from the cause is not
+    * automatically incorporated into the resulting detail message of
+    * this exception.
+    * </p>
+    * 
+    * @param message the detail message, which should give the reason for
+    *                this exception being thrown.
+    * @param cause the cause of this exception, or null if the cause
+    *              is unknown.
+    * @since 1.5
+    */
+   public IllegalStateException(String message, Throwable cause)
+   {
+     super(message, cause);
+   }
+ 
+   /**
+    * <p>
+    * Constructs a <code>IllegalStateException</code> using
+    * the specified cause <code>Throwable</code>, which may be used
+    * to provide additional history, with regards to the root of the
+    * problem.  It is perfectly valid for this to be null, if the
+    * cause of the problem is unknown.
+    * </p>
+    * <p>
+    * The detail message is automatically constructed from the detail
+    * message of the supplied causal exception.  If the cause is null,
+    * then the detail message will also be null.  Otherwise, the detail
+    * message of this exception will be that of the causal exception.
+    * This makes this constructor very useful for simply wrapping another
+    * exception.
+    * </p>
+    * 
+    * @param cause the cause of this exception, or null if the cause
+    *              is unknown.
+    * @since 1.5
+    */
+   public IllegalStateException(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/IllegalThreadStateException.java gcc-4.1.0/libjava/classpath/java/lang/IllegalThreadStateException.java
*** gcc-4.0.2/libjava/classpath/java/lang/IllegalThreadStateException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/IllegalThreadStateException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* IllegalThreadStateException.java -- thrown when trying to manipulate a
+    Thread when it is not in an appropriate state
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown When trying to manipulate a Thread which is in an inappropriate
+  * state. Since the documentation suggests that this can happen with
+  * <code>Thread.suspend</code> or <code>Thread.resume</code>, but these
+  * two methods are deprecated, this exception is likely very rare.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class IllegalThreadStateException extends IllegalArgumentException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -7626246362397460174L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public IllegalThreadStateException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public IllegalThreadStateException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/IncompatibleClassChangeError.java gcc-4.1.0/libjava/classpath/java/lang/IncompatibleClassChangeError.java
*** gcc-4.0.2/libjava/classpath/java/lang/IncompatibleClassChangeError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/IncompatibleClassChangeError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* IncompatibleClassChangeError.java -- thrown for binary incompatible classes
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An <code>IncompatibleClassChangeError</code> is thrown when the definition
+  * of a class used by the currently executing method has changed in an
+  * incompatible way.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class IncompatibleClassChangeError extends LinkageError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -4914975503642802119L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public IncompatibleClassChangeError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public IncompatibleClassChangeError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/IndexOutOfBoundsException.java gcc-4.1.0/libjava/classpath/java/lang/IndexOutOfBoundsException.java
*** gcc-4.0.2/libjava/classpath/java/lang/IndexOutOfBoundsException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/IndexOutOfBoundsException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* IndexOutOfBoundsException.java -- thrown for an invalid index
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * This exception can be thrown to indicate an attempt to access an
+  * index which is out of bounds on objects like String, Array, or Vector.
+  * Usually any negative integer less than or equal to -1 and positive 
+  * integer greater than or equal to the size of the object is an index
+  * which would be out of bounds.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class IndexOutOfBoundsException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 234122996006267687L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public IndexOutOfBoundsException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public IndexOutOfBoundsException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/InheritableThreadLocal.java gcc-4.1.0/libjava/classpath/java/lang/InheritableThreadLocal.java
*** gcc-4.0.2/libjava/classpath/java/lang/InheritableThreadLocal.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/InheritableThreadLocal.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,116 ----
+ /* InheritableThreadLocal -- a ThreadLocal which inherits values across threads
+    Copyright (C) 2000, 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import java.util.Iterator;
+ import java.util.WeakHashMap;
+ 
+ /**
+  * A ThreadLocal whose value is inherited by child Threads. The value of the
+  * InheritableThreadLocal associated with the (parent) Thread is copied to
+  * the new (child) Thread at the moment of creation.
+  *
+  * <p>It is possible to make the value associated with the child Thread a
+  * function of the value that is associated with the parent Thread by
+  * overriding the <code>childValue()</code> method. The utility of this class
+  * is in transferring items like User ID or Transaction ID across threads
+  * automatically.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see ThreadLocal
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class InheritableThreadLocal extends ThreadLocal
+ {
+   /**
+    * Creates a new InheritableThreadLocal that has no values associated
+    * with it yet.
+    */
+   public InheritableThreadLocal()
+   {
+   }
+ 
+   /**
+    * Determines the value associated with a newly created child Thread as a
+    * function of the value associated with the currently executing (parent)
+    * Thread. The default implementation just returns the parentValue.
+    *
+    * @param parentValue the value of this object in the parent thread at
+    *        the moment of creation of the child
+    * @return the initial value for the child thread
+    */
+   protected Object childValue(Object parentValue)
+   {
+     return parentValue;
+   }
+ 
+   /**
+    * Generates the childValues of all <code>InheritableThreadLocal</code>s
+    * that are in the heritage of the current Thread for the newly created
+    * childThread. Should be called from the contructor Thread.
+    *
+    * @param childThread the newly created thread, to inherit from this thread
+    * @see Thread#Thread(ThreadGroup, Runnable, String)
+    */
+   static void newChildThread(Thread childThread)
+   {
+     // The currentThread is the parent of the new thread.
+     Thread parentThread = Thread.currentThread();
+     if (parentThread.locals != null)
+       {
+         Iterator keys = parentThread.locals.keySet().iterator();
+         while (keys.hasNext())
+           {
+             Key key = (Key)keys.next();
+             if (key.get() instanceof InheritableThreadLocal)
+               {
+                 InheritableThreadLocal local = (InheritableThreadLocal)key.get();
+                 Object parentValue = parentThread.locals.get(key);
+                 Object childValue = local.childValue(parentValue == NULL
+                                                      ? null : parentValue);
+                 if (childThread.locals == null)
+                     childThread.locals = new WeakHashMap();
+                 childThread.locals.put(key, (childValue == null
+                                              ? NULL : childValue));
+               }
+           }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/InstantiationError.java gcc-4.1.0/libjava/classpath/java/lang/InstantiationError.java
*** gcc-4.0.2/libjava/classpath/java/lang/InstantiationError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/InstantiationError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* InstantiationError.java -- thrown when the linker cannot create an instance
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An <code>InstantiationError</code> is thrown when an attempt is made to
+  * create an instance of an abstract class or an interface.  Because this
+  * error is usually caught by a compiler, the error only occurs at runtime
+  * when the definition of a class has changed in a way that is incompatible
+  * with the previously compiled application.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class InstantiationError extends IncompatibleClassChangeError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -4885810657349421204L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public InstantiationError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public InstantiationError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/InstantiationException.java gcc-4.1.0/libjava/classpath/java/lang/InstantiationException.java
*** gcc-4.0.2/libjava/classpath/java/lang/InstantiationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/InstantiationException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* InstantiationException.java -- thrown when reflection cannot create an
+    instance
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when an attempt is made to use reflection to build a
+  * non-instantiable class (an interface or abstract class).
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see Class#newInstance()
+  * @status updated to 1.4
+  */
+ public class InstantiationException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -8441929162975509110L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public InstantiationException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public InstantiationException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Integer.java gcc-4.1.0/libjava/classpath/java/lang/Integer.java
*** gcc-4.0.2/libjava/classpath/java/lang/Integer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Integer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,772 ----
+ /* Integer.java -- object wrapper for int
+    Copyright (C) 1998, 1999, 2001, 2002, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Instances of class <code>Integer</code> represent primitive
+  * <code>int</code> values.
+  *
+  * Additionally, this class provides various helper functions and variables
+  * related to ints.
+  *
+  * @author Paul Fisher
+  * @author John Keiser
+  * @author Warren Levy
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Tom Tromey (tromey@redhat.com)
+  * @since 1.0
+  * @status largely updated to 1.5
+  */
+ public final class Integer extends Number implements Comparable
+ {
+   /**
+    * Compatible with JDK 1.0.2+.
+    */
+   private static final long serialVersionUID = 1360826667806852920L;
+ 
+   /**
+    * The minimum value an <code>int</code> can represent is -2147483648 (or
+    * -2<sup>31</sup>).
+    */
+   public static final int MIN_VALUE = 0x80000000;
+ 
+   /**
+    * The maximum value an <code>int</code> can represent is 2147483647 (or
+    * 2<sup>31</sup> - 1).
+    */
+   public static final int MAX_VALUE = 0x7fffffff;
+ 
+   /**
+    * The primitive type <code>int</code> is represented by this
+    * <code>Class</code> object.
+    * @since 1.1
+    */
+   public static final Class TYPE = VMClassLoader.getPrimitiveClass('I');
+ 
+   /**
+    * The number of bits needed to represent an <code>int</code>.
+    * @since 1.5
+    */
+   public static final int SIZE = 32;
+ 
+   // This caches some Integer values, and is used by boxing
+   // conversions via valueOf().  We must cache at least -128..127;
+   // these constants control how much we actually cache.
+   private static final int MIN_CACHE = -128;
+   private static final int MAX_CACHE = 127;
+   private static Integer[] intCache = new Integer[MAX_CACHE - MIN_CACHE + 1];
+ 
+   /**
+    * The immutable value of this Integer.
+    *
+    * @serial the wrapped int
+    */
+   private final int value;
+ 
+   /**
+    * Create an <code>Integer</code> object representing the value of the
+    * <code>int</code> argument.
+    *
+    * @param value the value to use
+    */
+   public Integer(int value)
+   {
+     this.value = value;
+   }
+ 
+   /**
+    * Create an <code>Integer</code> object representing the value of the
+    * argument after conversion to an <code>int</code>.
+    *
+    * @param s the string to convert
+    * @throws NumberFormatException if the String does not contain an int
+    * @see #valueOf(String)
+    */
+   public Integer(String s)
+   {
+     value = parseInt(s, 10, false);
+   }
+ 
+   /**
+    * Converts the <code>int</code> to a <code>String</code> using
+    * the specified radix (base). If the radix exceeds
+    * <code>Character.MIN_RADIX</code> or <code>Character.MAX_RADIX</code>, 10
+    * is used instead. If the result is negative, the leading character is
+    * '-' ('\\u002D'). The remaining characters come from
+    * <code>Character.forDigit(digit, radix)</code> ('0'-'9','a'-'z').
+    *
+    * @param num the <code>int</code> to convert to <code>String</code>
+    * @param radix the radix (base) to use in the conversion
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toString(int num, int radix)
+   {
+     if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
+       radix = 10;
+ 
+     // For negative numbers, print out the absolute value w/ a leading '-'.
+     // Use an array large enough for a binary number.
+     char[] buffer = new char[33];
+     int i = 33;
+     boolean isNeg = false;
+     if (num < 0)
+       {
+         isNeg = true;
+         num = -num;
+ 
+         // When the value is MIN_VALUE, it overflows when made positive
+         if (num < 0)
+ 	  {
+ 	    buffer[--i] = digits[(int) (-(num + radix) % radix)];
+ 	    num = -(num / radix);
+ 	  }
+       }
+ 
+     do
+       {
+         buffer[--i] = digits[num % radix];
+         num /= radix;
+       }
+     while (num > 0);
+ 
+     if (isNeg)
+       buffer[--i] = '-';
+ 
+     // Package constructor avoids an array copy.
+     return new String(buffer, i, 33 - i, true);
+   }
+ 
+   /**
+    * Converts the <code>int</code> to a <code>String</code> assuming it is
+    * unsigned in base 16.
+    *
+    * @param i the <code>int</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toHexString(int i)
+   {
+     return toUnsignedString(i, 4);
+   }
+ 
+   /**
+    * Converts the <code>int</code> to a <code>String</code> assuming it is
+    * unsigned in base 8.
+    *
+    * @param i the <code>int</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toOctalString(int i)
+   {
+     return toUnsignedString(i, 3);
+   }
+ 
+   /**
+    * Converts the <code>int</code> to a <code>String</code> assuming it is
+    * unsigned in base 2.
+    *
+    * @param i the <code>int</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toBinaryString(int i)
+   {
+     return toUnsignedString(i, 1);
+   }
+ 
+   /**
+    * Converts the <code>int</code> to a <code>String</code> and assumes
+    * a radix of 10.
+    *
+    * @param i the <code>int</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    * @see #toString(int, int)
+    */
+   public static String toString(int i)
+   {
+     // This is tricky: in libgcj, String.valueOf(int) is a fast native
+     // implementation.  In Classpath it just calls back to
+     // Integer.toString(int, int).
+     return String.valueOf(i);
+   }
+ 
+   /**
+    * Converts the specified <code>String</code> into an <code>int</code>
+    * using the specified radix (base). The string must not be <code>null</code>
+    * or empty. It may begin with an optional '-', which will negate the answer,
+    * provided that there are also valid digits. Each digit is parsed as if by
+    * <code>Character.digit(d, radix)</code>, and must be in the range
+    * <code>0</code> to <code>radix - 1</code>. Finally, the result must be
+    * within <code>MIN_VALUE</code> to <code>MAX_VALUE</code>, inclusive.
+    * Unlike Double.parseDouble, you may not have a leading '+'.
+    *
+    * @param str the <code>String</code> to convert
+    * @param radix the radix (base) to use in the conversion
+    * @return the <code>String</code> argument converted to <code>int</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as an
+    *         <code>int</code>
+    */
+   public static int parseInt(String str, int radix)
+   {
+     return parseInt(str, radix, false);
+   }
+ 
+   /**
+    * Converts the specified <code>String</code> into an <code>int</code>.
+    * This function assumes a radix of 10.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the <code>int</code> value of <code>s</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as an
+    *         <code>int</code>
+    * @see #parseInt(String, int)
+    */
+   public static int parseInt(String s)
+   {
+     return parseInt(s, 10, false);
+   }
+ 
+   /**
+    * Creates a new <code>Integer</code> object using the <code>String</code>
+    * and specified radix (base).
+    *
+    * @param s the <code>String</code> to convert
+    * @param radix the radix (base) to convert with
+    * @return the new <code>Integer</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as an
+    *         <code>int</code>
+    * @see #parseInt(String, int)
+    */
+   public static Integer valueOf(String s, int radix)
+   {
+     return new Integer(parseInt(s, radix, false));
+   }
+ 
+   /**
+    * Creates a new <code>Integer</code> object using the <code>String</code>,
+    * assuming a radix of 10.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the new <code>Integer</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as an
+    *         <code>int</code>
+    * @see #Integer(String)
+    * @see #parseInt(String)
+    */
+   public static Integer valueOf(String s)
+   {
+     return new Integer(parseInt(s, 10, false));
+   }
+ 
+   /**
+    * Returns an <code>Integer</code> object wrapping the value.
+    * In contrast to the <code>Integer</code> constructor, this method
+    * will cache some values.  It is used by boxing conversion.
+    *
+    * @param val the value to wrap
+    * @return the <code>Integer</code>
+    */
+   public static Integer valueOf(int val)
+   {
+     if (val < MIN_CACHE || val > MAX_CACHE)
+       return new Integer(val);
+     synchronized (intCache)
+       {
+ 	if (intCache[val - MIN_CACHE] == null)
+ 	  intCache[val - MIN_CACHE] = new Integer(val);
+ 	return intCache[val - MIN_CACHE];
+       }
+   }
+ 
+   /**
+    * Return the value of this <code>Integer</code> as a <code>byte</code>.
+    *
+    * @return the byte value
+    */
+   public byte byteValue()
+   {
+     return (byte) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Integer</code> as a <code>short</code>.
+    *
+    * @return the short value
+    */
+   public short shortValue()
+   {
+     return (short) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Integer</code>.
+    * @return the int value
+    */
+   public int intValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Integer</code> as a <code>long</code>.
+    *
+    * @return the long value
+    */
+   public long longValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Integer</code> as a <code>float</code>.
+    *
+    * @return the float value
+    */
+   public float floatValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Integer</code> as a <code>double</code>.
+    *
+    * @return the double value
+    */
+   public double doubleValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Converts the <code>Integer</code> value to a <code>String</code> and
+    * assumes a radix of 10.
+    *
+    * @return the <code>String</code> representation
+    */
+   public String toString()
+   {
+     return String.valueOf(value);
+   }
+ 
+   /**
+    * Return a hashcode representing this Object. <code>Integer</code>'s hash
+    * code is simply its value.
+    *
+    * @return this Object's hash code
+    */
+   public int hashCode()
+   {
+     return value;
+   }
+ 
+   /**
+    * Returns <code>true</code> if <code>obj</code> is an instance of
+    * <code>Integer</code> and represents the same int value.
+    *
+    * @param obj the object to compare
+    * @return whether these Objects are semantically equal
+    */
+   public boolean equals(Object obj)
+   {
+     return obj instanceof Integer && value == ((Integer) obj).value;
+   }
+ 
+   /**
+    * Get the specified system property as an <code>Integer</code>. The
+    * <code>decode()</code> method will be used to interpret the value of
+    * the property.
+    *
+    * @param nm the name of the system property
+    * @return the system property as an <code>Integer</code>, or null if the
+    *         property is not found or cannot be decoded
+    * @throws SecurityException if accessing the system property is forbidden
+    * @see System#getProperty(String)
+    * @see #decode(String)
+    */
+   public static Integer getInteger(String nm)
+   {
+     return getInteger(nm, null);
+   }
+ 
+   /**
+    * Get the specified system property as an <code>Integer</code>, or use a
+    * default <code>int</code> value if the property is not found or is not
+    * decodable. The <code>decode()</code> method will be used to interpret
+    * the value of the property.
+    *
+    * @param nm the name of the system property
+    * @param val the default value
+    * @return the value of the system property, or the default
+    * @throws SecurityException if accessing the system property is forbidden
+    * @see System#getProperty(String)
+    * @see #decode(String)
+    */
+   public static Integer getInteger(String nm, int val)
+   {
+     Integer result = getInteger(nm, null);
+     return result == null ? new Integer(val) : result;
+   }
+ 
+   /**
+    * Get the specified system property as an <code>Integer</code>, or use a
+    * default <code>Integer</code> value if the property is not found or is
+    * not decodable. The <code>decode()</code> method will be used to
+    * interpret the value of the property.
+    *
+    * @param nm the name of the system property
+    * @param def the default value
+    * @return the value of the system property, or the default
+    * @throws SecurityException if accessing the system property is forbidden
+    * @see System#getProperty(String)
+    * @see #decode(String)
+    */
+   public static Integer getInteger(String nm, Integer def)
+   {
+     if (nm == null || "".equals(nm))
+       return def;
+     nm = System.getProperty(nm);
+     if (nm == null)
+       return def;
+     try
+       {
+         return decode(nm);
+       }
+     catch (NumberFormatException e)
+       {
+         return def;
+       }
+   }
+ 
+   /**
+    * Convert the specified <code>String</code> into an <code>Integer</code>.
+    * The <code>String</code> may represent decimal, hexadecimal, or
+    * octal numbers.
+    *
+    * <p>The extended BNF grammar is as follows:<br>
+    * <pre>
+    * <em>DecodableString</em>:
+    *      ( [ <code>-</code> ] <em>DecimalNumber</em> )
+    *    | ( [ <code>-</code> ] ( <code>0x</code> | <code>0X</code>
+    *              | <code>#</code> ) <em>HexDigit</em> { <em>HexDigit</em> } )
+    *    | ( [ <code>-</code> ] <code>0</code> { <em>OctalDigit</em> } )
+    * <em>DecimalNumber</em>:
+    *        <em>DecimalDigit except '0'</em> { <em>DecimalDigit</em> }
+    * <em>DecimalDigit</em>:
+    *        <em>Character.digit(d, 10) has value 0 to 9</em>
+    * <em>OctalDigit</em>:
+    *        <em>Character.digit(d, 8) has value 0 to 7</em>
+    * <em>DecimalDigit</em>:
+    *        <em>Character.digit(d, 16) has value 0 to 15</em>
+    * </pre>
+    * Finally, the value must be in the range <code>MIN_VALUE</code> to
+    * <code>MAX_VALUE</code>, or an exception is thrown.
+    *
+    * @param str the <code>String</code> to interpret
+    * @return the value of the String as an <code>Integer</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>int</code>
+    * @throws NullPointerException if <code>s</code> is null
+    * @since 1.2
+    */
+   public static Integer decode(String str)
+   {
+     return new Integer(parseInt(str, 10, true));
+   }
+ 
+   /**
+    * Compare two Integers numerically by comparing their <code>int</code>
+    * values. The result is positive if the first is greater, negative if the
+    * second is greater, and 0 if the two are equal.
+    *
+    * @param i the Integer to compare
+    * @return the comparison
+    * @since 1.2
+    */
+   public int compareTo(Integer i)
+   {
+     if (value == i.value)
+       return 0;
+     // Returns just -1 or 1 on inequality; doing math might overflow.
+     return value > i.value ? 1 : -1;
+   }
+ 
+   /**
+    * Behaves like <code>compareTo(Integer)</code> unless the Object
+    * is not an <code>Integer</code>.
+    *
+    * @param o the object to compare
+    * @return the comparison
+    * @throws ClassCastException if the argument is not an <code>Integer</code>
+    * @see #compareTo(Integer)
+    * @see Comparable
+    * @since 1.2
+    */
+   public int compareTo(Object o)
+   {
+     return compareTo((Integer) o);
+   }
+ 
+   /**
+    * Return the number of bits set in x.
+    * @param x value to examine
+    * @since 1.5
+    */
+   public static int bitCount(int x)
+   {
+     // Successively collapse alternating bit groups into a sum.
+     x = ((x >> 1) & 0x55555555) + (x & 0x55555555);
+     x = ((x >> 2) & 0x33333333) + (x & 0x33333333);
+     x = ((x >> 4) & 0x0f0f0f0f) + (x & 0x0f0f0f0f);
+     x = ((x >> 8) & 0x00ff00ff) + (x & 0x00ff00ff);
+     return ((x >> 16) & 0x0000ffff) + (x & 0x0000ffff);
+   }
+ 
+   /**
+    * Rotate x to the left by distance bits.
+    * @param x the value to rotate
+    * @param distance the number of bits by which to rotate
+    * @since 1.5
+    */
+   public static int rotateLeft(int x, int distance)
+   {
+     // This trick works because the shift operators implicitly mask
+     // the shift count.
+     return (x << distance) | (x >>> - distance);
+   }
+ 
+   /**
+    * Rotate x to the right by distance bits.
+    * @param x the value to rotate
+    * @param distance the number of bits by which to rotate
+    * @since 1.5
+    */
+   public static int rotateRight(int x, int distance)
+   {
+     // This trick works because the shift operators implicitly mask
+     // the shift count.
+     return (x << - distance) | (x >>> distance);
+   }
+ 
+   /**
+    * Find the highest set bit in value, and return a new value
+    * with only that bit set.
+    * @param value the value to examine
+    * @since 1.5
+    */
+   public static int highestOneBit(int value)
+   {
+     value |= value >>> 1;
+     value |= value >>> 2;
+     value |= value >>> 4;
+     value |= value >>> 8;
+     value |= value >>> 16;
+     return value ^ (value >>> 1);
+   }
+ 
+   /**
+    * Return the number of leading zeros in value.
+    * @param value the value to examine
+    * @since 1.5
+    */
+   public static int numberOfLeadingZeros(int value)
+   {
+     value |= value >>> 1;
+     value |= value >>> 2;
+     value |= value >>> 4;
+     value |= value >>> 8;
+     value |= value >>> 16;
+     return bitCount(~value);
+   }
+ 
+   /**
+    * Find the lowest set bit in value, and return a new value
+    * with only that bit set.
+    * @param value the value to examine
+    * @since 1.5
+    */
+   public static int lowestOneBit(int value)
+   {
+     // Classic assembly trick.
+     return value & - value;
+   }
+ 
+   /**
+    * Find the number of trailing zeros in value.
+    * @param value the value to examine
+    * @since 1.5
+    */
+   public static int numberOfTrailingZeros(int value)
+   {
+     return bitCount((value & -value) - 1);
+   }
+ 
+   /**
+    * Return 1 if x is positive, -1 if it is negative, and 0 if it is
+    * zero.
+    * @param x the value to examine
+    * @since 1.5
+    */
+   public static int signum(int x)
+   {
+     return x < 0 ? -1 : (x > 0 ? 1 : 0);
+   }
+ 
+   /**
+    * Reverse the bytes in val.
+    * @since 1.5
+    */
+   public static int reverseBytes(int val)
+   {
+     return (  ((val >> 24) & 0xff)
+ 	    | ((val >> 8) & 0xff00)
+ 	    | ((val << 8) & 0xff0000)
+ 	    | ((val << 24) & 0xff000000));
+   }
+ 
+   /**
+    * Reverse the bits in val.
+    * @since 1.5
+    */
+   public static int reverse(int val)
+   {
+     // Successively swap alternating bit groups.
+     val = ((val >> 1) & 0x55555555) + ((val << 1) & ~0x55555555);
+     val = ((val >> 2) & 0x33333333) + ((val << 2) & ~0x33333333);
+     val = ((val >> 4) & 0x0f0f0f0f) + ((val << 4) & ~0x0f0f0f0f);
+     val = ((val >> 8) & 0x00ff00ff) + ((val << 8) & ~0x00ff00ff);
+     return ((val >> 16) & 0x0000ffff) + ((val << 16) & ~0x0000ffff);
+   }
+ 
+   /**
+    * Helper for converting unsigned numbers to String.
+    *
+    * @param num the number
+    * @param exp log2(digit) (ie. 1, 3, or 4 for binary, oct, hex)
+    */
+   // Package visible for use by Long.
+   static String toUnsignedString(int num, int exp)
+   {
+     // Use an array large enough for a binary number.
+     int mask = (1 << exp) - 1;
+     char[] buffer = new char[32];
+     int i = 32;
+     do
+       {
+         buffer[--i] = digits[num & mask];
+         num >>>= exp;
+       }
+     while (num != 0);
+ 
+     // Package constructor avoids an array copy.
+     return new String(buffer, i, 32 - i, true);
+   }
+ 
+   /**
+    * Helper for parsing ints, used by Integer, Short, and Byte.
+    *
+    * @param str the string to parse
+    * @param radix the radix to use, must be 10 if decode is true
+    * @param decode if called from decode
+    * @return the parsed int value
+    * @throws NumberFormatException if there is an error
+    * @throws NullPointerException if decode is true and str if null
+    * @see #parseInt(String, int)
+    * @see #decode(String)
+    * @see Byte#parseByte(String, int)
+    * @see Short#parseShort(String, int)
+    */
+   static int parseInt(String str, int radix, boolean decode)
+   {
+     if (! decode && str == null)
+       throw new NumberFormatException();
+     int index = 0;
+     int len = str.length();
+     boolean isNeg = false;
+     if (len == 0)
+       throw new NumberFormatException("string length is null");
+     int ch = str.charAt(index);
+     if (ch == '-')
+       {
+         if (len == 1)
+           throw new NumberFormatException("pure '-'");
+         isNeg = true;
+         ch = str.charAt(++index);
+       }
+     if (decode)
+       {
+         if (ch == '0')
+           {
+             if (++index == len)
+               return 0;
+             if ((str.charAt(index) & ~('x' ^ 'X')) == 'X')
+               {
+                 radix = 16;
+                 index++;
+               }
+             else
+               radix = 8;
+           }
+         else if (ch == '#')
+           {
+             radix = 16;
+             index++;
+           }
+       }
+     if (index == len)
+       throw new NumberFormatException("non terminated number: " + str);
+ 
+     int max = MAX_VALUE / radix;
+     // We can't directly write `max = (MAX_VALUE + 1) / radix'.
+     // So instead we fake it.
+     if (isNeg && MAX_VALUE % radix == radix - 1)
+       ++max;
+ 
+     int val = 0;
+     while (index < len)
+       {
+ 	if (val < 0 || val > max)
+ 	  throw new NumberFormatException("number overflow (pos=" + index + ") : " + str);
+ 
+         ch = Character.digit(str.charAt(index++), radix);
+         val = val * radix + ch;
+         if (ch < 0 || (val < 0 && (! isNeg || val != MIN_VALUE)))
+           throw new NumberFormatException("invalid character at position " + index + " in " + str);
+       }
+     return isNeg ? -val : val;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/InternalError.java gcc-4.1.0/libjava/classpath/java/lang/InternalError.java
*** gcc-4.0.2/libjava/classpath/java/lang/InternalError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/InternalError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* InternalError.java -- thrown when the VM encounters an internal error
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An <code>InternalError</code> is thrown when a mystical error has
+  * occurred in the Java Virtual Machine.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class InternalError extends VirtualMachineError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -9062593416125562365L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public InternalError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public InternalError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/InterruptedException.java gcc-4.1.0/libjava/classpath/java/lang/InterruptedException.java
*** gcc-4.0.2/libjava/classpath/java/lang/InterruptedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/InterruptedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,80 ----
+ /* InterruptedException.java -- thrown when a thread is interrupted
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when a thread interrupts another thread which was previously
+  * sleeping, waiting, or paused in some other way.  See the
+  * <code>interrupt</code> method of class <code>Thread</code>.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see Object#wait()
+  * @see Object#wait(long)
+  * @see Object#wait(long, int)
+  * @see Thread#sleep(long)
+  * @see Thread#interrupt()
+  * @see Thread#interrupted()
+  * @status updated to 1.4
+  */
+ public class InterruptedException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 6700697376100628473L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public InterruptedException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    *
+    * @param s the message
+    */
+   public InterruptedException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/LinkageError.java gcc-4.1.0/libjava/classpath/java/lang/LinkageError.java
*** gcc-4.0.2/libjava/classpath/java/lang/LinkageError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/LinkageError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* LinkageError.java -- thrown when classes valid at separate compile times
+    cannot be linked to each other
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Subclasses of <code>LinkageError</code> are thrown to indicate that two
+  * classes which were compatible at separate compilation times cannot be
+  * linked to one another.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class LinkageError extends Error
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 3579600108157160122L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public LinkageError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public LinkageError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Long.java gcc-4.1.0/libjava/classpath/java/lang/Long.java
*** gcc-4.0.2/libjava/classpath/java/lang/Long.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Long.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,765 ----
+ /* Long.java -- object wrapper for long
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Instances of class <code>Long</code> represent primitive
+  * <code>long</code> values.
+  *
+  * Additionally, this class provides various helper functions and variables
+  * related to longs.
+  *
+  * @author Paul Fisher
+  * @author John Keiser
+  * @author Warren Levy
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.5
+  */
+ public final class Long extends Number implements Comparable
+ {
+   /**
+    * Compatible with JDK 1.0.2+.
+    */
+   private static final long serialVersionUID = 4290774380558885855L;
+ 
+   /**
+    * The minimum value a <code>long</code> can represent is
+    * -9223372036854775808L (or -2<sup>63</sup>).
+    */
+   public static final long MIN_VALUE = 0x8000000000000000L;
+ 
+   /**
+    * The maximum value a <code>long</code> can represent is
+    * 9223372036854775807 (or 2<sup>63</sup> - 1).
+    */
+   public static final long MAX_VALUE = 0x7fffffffffffffffL;
+ 
+   /**
+    * The primitive type <code>long</code> is represented by this
+    * <code>Class</code> object.
+    * @since 1.1
+    */
+   public static final Class TYPE = VMClassLoader.getPrimitiveClass ('J');
+ 
+   /**
+    * The number of bits needed to represent a <code>long</code>.
+    * @since 1.5
+    */
+   public static final int SIZE = 64;
+ 
+   /**
+    * The immutable value of this Long.
+    *
+    * @serial the wrapped long
+    */
+   private final long value;
+ 
+   /**
+    * Create a <code>Long</code> object representing the value of the
+    * <code>long</code> argument.
+    *
+    * @param value the value to use
+    */
+   public Long(long value)
+   {
+     this.value = value;
+   }
+ 
+   /**
+    * Create a <code>Long</code> object representing the value of the
+    * argument after conversion to a <code>long</code>.
+    *
+    * @param s the string to convert
+    * @throws NumberFormatException if the String does not contain a long
+    * @see #valueOf(String)
+    */
+   public Long(String s)
+   {
+     value = parseLong(s, 10, false);
+   }
+ 
+   /**
+    * Converts the <code>long</code> to a <code>String</code> using
+    * the specified radix (base). If the radix exceeds
+    * <code>Character.MIN_RADIX</code> or <code>Character.MAX_RADIX</code>, 10
+    * is used instead. If the result is negative, the leading character is
+    * '-' ('\\u002D'). The remaining characters come from
+    * <code>Character.forDigit(digit, radix)</code> ('0'-'9','a'-'z').
+    *
+    * @param num the <code>long</code> to convert to <code>String</code>
+    * @param radix the radix (base) to use in the conversion
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toString(long num, int radix)
+   {
+     // Use the Integer toString for efficiency if possible.
+     if ((int) num == num)
+       return Integer.toString((int) num, radix);
+ 
+     if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
+       radix = 10;
+ 
+     // For negative numbers, print out the absolute value w/ a leading '-'.
+     // Use an array large enough for a binary number.
+     char[] buffer = new char[65];
+     int i = 65;
+     boolean isNeg = false;
+     if (num < 0)
+       {
+         isNeg = true;
+         num = -num;
+ 
+         // When the value is MIN_VALUE, it overflows when made positive
+         if (num < 0)
+ 	  {
+ 	    buffer[--i] = digits[(int) (-(num + radix) % radix)];
+ 	    num = -(num / radix);
+ 	  }
+       }
+ 
+     do
+       {
+         buffer[--i] = digits[(int) (num % radix)];
+         num /= radix;
+       }
+     while (num > 0);
+ 
+     if (isNeg)
+       buffer[--i] = '-';
+ 
+     // Package constructor avoids an array copy.
+     return new String(buffer, i, 65 - i, true);
+   }
+ 
+   /**
+    * Converts the <code>long</code> to a <code>String</code> assuming it is
+    * unsigned in base 16.
+    *
+    * @param l the <code>long</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toHexString(long l)
+   {
+     return toUnsignedString(l, 4);
+   }
+ 
+   /**
+    * Converts the <code>long</code> to a <code>String</code> assuming it is
+    * unsigned in base 8.
+    *
+    * @param l the <code>long</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toOctalString(long l)
+   {
+     return toUnsignedString(l, 3);
+   }
+ 
+   /**
+    * Converts the <code>long</code> to a <code>String</code> assuming it is
+    * unsigned in base 2.
+    *
+    * @param l the <code>long</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toBinaryString(long l)
+   {
+     return toUnsignedString(l, 1);
+   }
+ 
+   /**
+    * Converts the <code>long</code> to a <code>String</code> and assumes
+    * a radix of 10.
+    *
+    * @param num the <code>long</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    * @see #toString(long, int)
+    */
+   public static String toString(long num)
+   {
+     return toString(num, 10);
+   }
+ 
+   /**
+    * Converts the specified <code>String</code> into an <code>int</code>
+    * using the specified radix (base). The string must not be <code>null</code>
+    * or empty. It may begin with an optional '-', which will negate the answer,
+    * provided that there are also valid digits. Each digit is parsed as if by
+    * <code>Character.digit(d, radix)</code>, and must be in the range
+    * <code>0</code> to <code>radix - 1</code>. Finally, the result must be
+    * within <code>MIN_VALUE</code> to <code>MAX_VALUE</code>, inclusive.
+    * Unlike Double.parseDouble, you may not have a leading '+'; and 'l' or
+    * 'L' as the last character is only valid in radices 22 or greater, where
+    * it is a digit and not a type indicator.
+    *
+    * @param str the <code>String</code> to convert
+    * @param radix the radix (base) to use in the conversion
+    * @return the <code>String</code> argument converted to <code>long</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>long</code>
+    */
+   public static long parseLong(String str, int radix)
+   {
+     return parseLong(str, radix, false);
+   }
+ 
+   /**
+    * Converts the specified <code>String</code> into a <code>long</code>.
+    * This function assumes a radix of 10.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the <code>int</code> value of <code>s</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>long</code>
+    * @see #parseLong(String, int)
+    */
+   public static long parseLong(String s)
+   {
+     return parseLong(s, 10, false);
+   }
+ 
+   /**
+    * Creates a new <code>Long</code> object using the <code>String</code>
+    * and specified radix (base).
+    *
+    * @param s the <code>String</code> to convert
+    * @param radix the radix (base) to convert with
+    * @return the new <code>Long</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>long</code>
+    * @see #parseLong(String, int)
+    */
+   public static Long valueOf(String s, int radix)
+   {
+     return new Long(parseLong(s, radix, false));
+   }
+ 
+   /**
+    * Creates a new <code>Long</code> object using the <code>String</code>,
+    * assuming a radix of 10.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the new <code>Long</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>long</code>
+    * @see #Long(String)
+    * @see #parseLong(String)
+    */
+   public static Long valueOf(String s)
+   {
+     return new Long(parseLong(s, 10, false));
+   }
+ 
+   /**
+    * Returns a <code>Long</code> object wrapping the value.
+    *
+    * @param val the value to wrap
+    * @return the <code>Long</code>
+    * 
+    * @since 1.5
+    */
+   public static synchronized Long valueOf(long val)
+   {
+     // We aren't required to cache here.  We could, though perhaps we
+     // ought to consider that as an empirical question.
+     return new Long(val);
+   }
+ 
+   /**
+    * Convert the specified <code>String</code> into a <code>Long</code>.
+    * The <code>String</code> may represent decimal, hexadecimal, or
+    * octal numbers.
+    *
+    * <p>The extended BNF grammar is as follows:<br>
+    * <pre>
+    * <em>DecodableString</em>:
+    *      ( [ <code>-</code> ] <em>DecimalNumber</em> )
+    *    | ( [ <code>-</code> ] ( <code>0x</code> | <code>0X</code>
+    *              | <code>#</code> ) <em>HexDigit</em> { <em>HexDigit</em> } )
+    *    | ( [ <code>-</code> ] <code>0</code> { <em>OctalDigit</em> } )
+    * <em>DecimalNumber</em>:
+    *        <em>DecimalDigit except '0'</em> { <em>DecimalDigit</em> }
+    * <em>DecimalDigit</em>:
+    *        <em>Character.digit(d, 10) has value 0 to 9</em>
+    * <em>OctalDigit</em>:
+    *        <em>Character.digit(d, 8) has value 0 to 7</em>
+    * <em>DecimalDigit</em>:
+    *        <em>Character.digit(d, 16) has value 0 to 15</em>
+    * </pre>
+    * Finally, the value must be in the range <code>MIN_VALUE</code> to
+    * <code>MAX_VALUE</code>, or an exception is thrown. Note that you cannot
+    * use a trailing 'l' or 'L', unlike in Java source code.
+    *
+    * @param str the <code>String</code> to interpret
+    * @return the value of the String as a <code>Long</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>long</code>
+    * @throws NullPointerException if <code>s</code> is null
+    * @since 1.2
+    */
+   public static Long decode(String str)
+   {
+     return new Long(parseLong(str, 10, true));
+   }
+ 
+   /**
+    * Return the value of this <code>Long</code> as a <code>byte</code>.
+    *
+    * @return the byte value
+    */
+   public byte byteValue()
+   {
+     return (byte) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Long</code> as a <code>short</code>.
+    *
+    * @return the short value
+    */
+   public short shortValue()
+   {
+     return (short) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Long</code> as an <code>int</code>.
+    *
+    * @return the int value
+    */
+   public int intValue()
+   {
+     return (int) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Long</code>.
+    *
+    * @return the long value
+    */
+   public long longValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Long</code> as a <code>float</code>.
+    *
+    * @return the float value
+    */
+   public float floatValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Long</code> as a <code>double</code>.
+    *
+    * @return the double value
+    */
+   public double doubleValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Converts the <code>Long</code> value to a <code>String</code> and
+    * assumes a radix of 10.
+    *
+    * @return the <code>String</code> representation
+    */
+   public String toString()
+   {
+     return toString(value, 10);
+   }
+ 
+   /**
+    * Return a hashcode representing this Object. <code>Long</code>'s hash
+    * code is calculated by <code>(int) (value ^ (value &gt;&gt; 32))</code>.
+    *
+    * @return this Object's hash code
+    */
+   public int hashCode()
+   {
+     return (int) (value ^ (value >>> 32));
+   }
+ 
+   /**
+    * Returns <code>true</code> if <code>obj</code> is an instance of
+    * <code>Long</code> and represents the same long value.
+    *
+    * @param obj the object to compare
+    * @return whether these Objects are semantically equal
+    */
+   public boolean equals(Object obj)
+   {
+     return obj instanceof Long && value == ((Long) obj).value;
+   }
+ 
+   /**
+    * Get the specified system property as a <code>Long</code>. The
+    * <code>decode()</code> method will be used to interpret the value of
+    * the property.
+    *
+    * @param nm the name of the system property
+    * @return the system property as a <code>Long</code>, or null if the
+    *         property is not found or cannot be decoded
+    * @throws SecurityException if accessing the system property is forbidden
+    * @see System#getProperty(String)
+    * @see #decode(String)
+    */
+   public static Long getLong(String nm)
+   {
+     return getLong(nm, null);
+   }
+ 
+   /**
+    * Get the specified system property as a <code>Long</code>, or use a
+    * default <code>long</code> value if the property is not found or is not
+    * decodable. The <code>decode()</code> method will be used to interpret
+    * the value of the property.
+    *
+    * @param nm the name of the system property
+    * @param val the default value
+    * @return the value of the system property, or the default
+    * @throws SecurityException if accessing the system property is forbidden
+    * @see System#getProperty(String)
+    * @see #decode(String)
+    */
+   public static Long getLong(String nm, long val)
+   {
+     Long result = getLong(nm, null);
+     return result == null ? new Long(val) : result;
+   }
+ 
+   /**
+    * Get the specified system property as a <code>Long</code>, or use a
+    * default <code>Long</code> value if the property is not found or is
+    * not decodable. The <code>decode()</code> method will be used to
+    * interpret the value of the property.
+    *
+    * @param nm the name of the system property
+    * @param def the default value
+    * @return the value of the system property, or the default
+    * @throws SecurityException if accessing the system property is forbidden
+    * @see System#getProperty(String)
+    * @see #decode(String)
+    */
+   public static Long getLong(String nm, Long def)
+   {
+     if (nm == null || "".equals(nm))
+       return def;
+     nm = System.getProperty(nm);
+     if (nm == null)
+       return def;
+     try
+       {
+         return decode(nm);
+       }
+     catch (NumberFormatException e)
+       {
+         return def;
+       }
+   }
+ 
+   /**
+    * Compare two Longs numerically by comparing their <code>long</code>
+    * values. The result is positive if the first is greater, negative if the
+    * second is greater, and 0 if the two are equal.
+    *
+    * @param l the Long to compare
+    * @return the comparison
+    * @since 1.2
+    */
+   public int compareTo(Long l)
+   {
+     if (value == l.value)
+       return 0;
+     // Returns just -1 or 1 on inequality; doing math might overflow the long.
+     return value > l.value ? 1 : -1;
+   }
+ 
+   /**
+    * Behaves like <code>compareTo(Long)</code> unless the Object
+    * is not a <code>Long</code>.
+    *
+    * @param o the object to compare
+    * @return the comparison
+    * @throws ClassCastException if the argument is not a <code>Long</code>
+    * @see #compareTo(Long)
+    * @see Comparable
+    * @since 1.2
+    */
+   public int compareTo(Object o)
+   {
+     return compareTo((Long) o);
+   }
+ 
+   /**
+    * Return the number of bits set in x.
+    * @param x value to examine
+    * @since 1.5
+    */
+   public static int bitCount(long x)
+   {
+     // Successively collapse alternating bit groups into a sum.
+     x = ((x >> 1) & 0x5555555555555555L) + (x & 0x5555555555555555L);
+     x = ((x >> 2) & 0x3333333333333333L) + (x & 0x3333333333333333L);
+     int v = (int) ((x >>> 32) + x);
+     v = ((v >> 4) & 0x0f0f0f0f) + (v & 0x0f0f0f0f);
+     v = ((v >> 8) & 0x00ff00ff) + (v & 0x00ff00ff);
+     return ((v >> 16) & 0x0000ffff) + (v & 0x0000ffff);
+   }
+ 
+   /**
+    * Rotate x to the left by distance bits.
+    * @param x the value to rotate
+    * @param distance the number of bits by which to rotate
+    * @since 1.5
+    */
+   public static long rotateLeft(long x, int distance)
+   {
+     // This trick works because the shift operators implicitly mask
+     // the shift count.
+     return (x << distance) | (x >>> - distance);
+   }
+ 
+   /**
+    * Rotate x to the right by distance bits.
+    * @param x the value to rotate
+    * @param distance the number of bits by which to rotate
+    * @since 1.5
+    */
+   public static long rotateRight(long x, int distance)
+   {
+     // This trick works because the shift operators implicitly mask
+     // the shift count.
+     return (x << - distance) | (x >>> distance);
+   }
+ 
+   /**
+    * Find the highest set bit in value, and return a new value
+    * with only that bit set.
+    * @param value the value to examine
+    * @since 1.5
+    */
+   public static long highestOneBit(long value)
+   {
+     value |= value >>> 1;
+     value |= value >>> 2;
+     value |= value >>> 4;
+     value |= value >>> 8;
+     value |= value >>> 16;
+     value |= value >>> 32;
+     return value ^ (value >>> 1);
+   }
+ 
+   /**
+    * Return the number of leading zeros in value.
+    * @param value the value to examine
+    * @since 1.5
+    */
+   public static int numberOfLeadingZeros(long value)
+   {
+     value |= value >>> 1;
+     value |= value >>> 2;
+     value |= value >>> 4;
+     value |= value >>> 8;
+     value |= value >>> 16;
+     value |= value >>> 32;
+     return bitCount(~value);
+   }
+ 
+   /**
+    * Find the lowest set bit in value, and return a new value
+    * with only that bit set.
+    * @param value the value to examine
+    * @since 1.5
+    */
+   public static long lowestOneBit(long value)
+   {
+     // Classic assembly trick.
+     return value & - value;
+   }
+ 
+   /**
+    * Find the number of trailing zeros in value.
+    * @param value the value to examine
+    * @since 1.5
+    */
+   public static int numberOfTrailingZeros(long value)
+   {
+     return bitCount((value & -value) - 1);
+   }
+ 
+   /**
+    * Return 1 if x is positive, -1 if it is negative, and 0 if it is
+    * zero.
+    * @param x the value to examine
+    * @since 1.5
+    */
+   public static int signum(long x)
+   {
+     return x < 0 ? -1 : (x > 0 ? 1 : 0);
+   }
+ 
+   /**
+    * Reverse the bytes in val.
+    * @since 1.5
+    */
+   public static long reverseBytes(long val)
+   {
+     int hi = Integer.reverseBytes((int) val);
+     int lo = Integer.reverseBytes((int) (val >>> 32));
+     return (((long) hi) << 32) | lo;
+   }
+ 
+   /**
+    * Reverse the bits in val.
+    * @since 1.5
+    */
+   public static long reverse(long val)
+   {
+     long hi = Integer.reverse((int) val) & 0xffffffffL;
+     long lo = Integer.reverse((int) (val >>> 32)) & 0xffffffffL;
+     return (hi << 32) | lo;
+   }
+ 
+   /**
+    * Helper for converting unsigned numbers to String.
+    *
+    * @param num the number
+    * @param exp log2(digit) (ie. 1, 3, or 4 for binary, oct, hex)
+    */
+   private static String toUnsignedString(long num, int exp)
+   {
+     // Use the Integer toUnsignedString for efficiency if possible.
+     // If NUM<0 then this particular optimization doesn't work
+     // properly.
+     if (num >= 0 && (int) num == num)
+       return Integer.toUnsignedString((int) num, exp);
+ 
+     // Use an array large enough for a binary number.
+     int mask = (1 << exp) - 1;
+     char[] buffer = new char[64];
+     int i = 64;
+     do
+       {
+         buffer[--i] = digits[(int) num & mask];
+         num >>>= exp;
+       }
+     while (num != 0);
+ 
+     // Package constructor avoids an array copy.
+     return new String(buffer, i, 64 - i, true);
+   }
+ 
+   /**
+    * Helper for parsing longs.
+    *
+    * @param str the string to parse
+    * @param radix the radix to use, must be 10 if decode is true
+    * @param decode if called from decode
+    * @return the parsed long value
+    * @throws NumberFormatException if there is an error
+    * @throws NullPointerException if decode is true and str is null
+    * @see #parseLong(String, int)
+    * @see #decode(String)
+    */
+   private static long parseLong(String str, int radix, boolean decode)
+   {
+     if (! decode && str == null)
+       throw new NumberFormatException();
+     int index = 0;
+     int len = str.length();
+     boolean isNeg = false;
+     if (len == 0)
+       throw new NumberFormatException();
+     int ch = str.charAt(index);
+     if (ch == '-')
+       {
+         if (len == 1)
+           throw new NumberFormatException();
+         isNeg = true;
+         ch = str.charAt(++index);
+       }
+     if (decode)
+       {
+         if (ch == '0')
+           {
+             if (++index == len)
+               return 0;
+             if ((str.charAt(index) & ~('x' ^ 'X')) == 'X')
+               {
+                 radix = 16;
+                 index++;
+               }
+             else
+               radix = 8;
+           }
+         else if (ch == '#')
+           {
+             radix = 16;
+             index++;
+           }
+       }
+     if (index == len)
+       throw new NumberFormatException();
+ 
+     long max = MAX_VALUE / radix;
+     // We can't directly write `max = (MAX_VALUE + 1) / radix'.
+     // So instead we fake it.
+     if (isNeg && MAX_VALUE % radix == radix - 1)
+       ++max;
+ 
+     long val = 0;
+     while (index < len)
+       {
+ 	if (val < 0 || val > max)
+ 	  throw new NumberFormatException();
+ 
+         ch = Character.digit(str.charAt(index++), radix);
+         val = val * radix + ch;
+         if (ch < 0 || (val < 0 && (! isNeg || val != MIN_VALUE)))
+           throw new NumberFormatException();
+       }
+     return isNeg ? -val : val;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Math.java gcc-4.1.0/libjava/classpath/java/lang/Math.java
*** gcc-4.0.2/libjava/classpath/java/lang/Math.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Math.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,650 ----
+ /* java.lang.Math -- common mathematical functions, native allowed
+    Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import gnu.classpath.Configuration;
+ 
+ import java.util.Random;
+ 
+ /**
+  * Helper class containing useful mathematical functions and constants.
+  * <P>
+  *
+  * Note that angles are specified in radians.  Conversion functions are
+  * provided for your convenience.
+  *
+  * @author Paul Fisher
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  */
+ public final class Math
+ {
+   /**
+    * Math is non-instantiable
+    */
+   private Math()
+   {
+   }
+ 
+   static
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+ 	System.loadLibrary("javalang");
+       }
+   }
+ 
+   /**
+    * A random number generator, initialized on first use.
+    */
+   private static Random rand;
+ 
+   /**
+    * The most accurate approximation to the mathematical constant <em>e</em>:
+    * <code>2.718281828459045</code>. Used in natural log and exp.
+    *
+    * @see #log(double)
+    * @see #exp(double)
+    */
+   public static final double E = 2.718281828459045;
+ 
+   /**
+    * The most accurate approximation to the mathematical constant <em>pi</em>:
+    * <code>3.141592653589793</code>. This is the ratio of a circle's diameter
+    * to its circumference.
+    */
+   public static final double PI = 3.141592653589793;
+ 
+   /**
+    * Take the absolute value of the argument.
+    * (Absolute value means make it positive.)
+    * <P>
+    *
+    * Note that the the largest negative value (Integer.MIN_VALUE) cannot
+    * be made positive.  In this case, because of the rules of negation in
+    * a computer, MIN_VALUE is what will be returned.
+    * This is a <em>negative</em> value.  You have been warned.
+    *
+    * @param i the number to take the absolute value of
+    * @return the absolute value
+    * @see Integer#MIN_VALUE
+    */
+   public static int abs(int i)
+   {
+     return (i < 0) ? -i : i;
+   }
+ 
+   /**
+    * Take the absolute value of the argument.
+    * (Absolute value means make it positive.)
+    * <P>
+    *
+    * Note that the the largest negative value (Long.MIN_VALUE) cannot
+    * be made positive.  In this case, because of the rules of negation in
+    * a computer, MIN_VALUE is what will be returned.
+    * This is a <em>negative</em> value.  You have been warned.
+    *
+    * @param l the number to take the absolute value of
+    * @return the absolute value
+    * @see Long#MIN_VALUE
+    */
+   public static long abs(long l)
+   {
+     return (l < 0) ? -l : l;
+   }
+ 
+   /**
+    * Take the absolute value of the argument.
+    * (Absolute value means make it positive.)
+    * <P>
+    *
+    * This is equivalent, but faster than, calling
+    * <code>Float.intBitsToFloat(0x7fffffff & Float.floatToIntBits(a))</code>.
+    *
+    * @param f the number to take the absolute value of
+    * @return the absolute value
+    */
+   public static float abs(float f)
+   {
+     return (f <= 0) ? 0 - f : f;
+   }
+ 
+   /**
+    * Take the absolute value of the argument.
+    * (Absolute value means make it positive.)
+    *
+    * This is equivalent, but faster than, calling
+    * <code>Double.longBitsToDouble(Double.doubleToLongBits(a)
+    *       &lt;&lt; 1) &gt;&gt;&gt; 1);</code>.
+    *
+    * @param d the number to take the absolute value of
+    * @return the absolute value
+    */
+   public static double abs(double d)
+   {
+     return (d <= 0) ? 0 - d : d;
+   }
+ 
+   /**
+    * Return whichever argument is smaller.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the smaller of the two numbers
+    */
+   public static int min(int a, int b)
+   {
+     return (a < b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is smaller.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the smaller of the two numbers
+    */
+   public static long min(long a, long b)
+   {
+     return (a < b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is smaller. If either argument is NaN, the
+    * result is NaN, and when comparing 0 and -0, -0 is always smaller.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the smaller of the two numbers
+    */
+   public static float min(float a, float b)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return a;
+     // no need to check if b is NaN; < will work correctly
+     // recall that -0.0 == 0.0, but [+-]0.0 - [+-]0.0 behaves special
+     if (a == 0 && b == 0)
+       return -(-a - b);
+     return (a < b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is smaller. If either argument is NaN, the
+    * result is NaN, and when comparing 0 and -0, -0 is always smaller.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the smaller of the two numbers
+    */
+   public static double min(double a, double b)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return a;
+     // no need to check if b is NaN; < will work correctly
+     // recall that -0.0 == 0.0, but [+-]0.0 - [+-]0.0 behaves special
+     if (a == 0 && b == 0)
+       return -(-a - b);
+     return (a < b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is larger.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the larger of the two numbers
+    */
+   public static int max(int a, int b)
+   {
+     return (a > b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is larger.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the larger of the two numbers
+    */
+   public static long max(long a, long b)
+   {
+     return (a > b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is larger. If either argument is NaN, the
+    * result is NaN, and when comparing 0 and -0, 0 is always larger.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the larger of the two numbers
+    */
+   public static float max(float a, float b)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return a;
+     // no need to check if b is NaN; > will work correctly
+     // recall that -0.0 == 0.0, but [+-]0.0 - [+-]0.0 behaves special
+     if (a == 0 && b == 0)
+       return a - -b;
+     return (a > b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is larger. If either argument is NaN, the
+    * result is NaN, and when comparing 0 and -0, 0 is always larger.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the larger of the two numbers
+    */
+   public static double max(double a, double b)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return a;
+     // no need to check if b is NaN; > will work correctly
+     // recall that -0.0 == 0.0, but [+-]0.0 - [+-]0.0 behaves special
+     if (a == 0 && b == 0)
+       return a - -b;
+     return (a > b) ? a : b;
+   }
+ 
+   /**
+    * The trigonometric function <em>sin</em>. The sine of NaN or infinity is
+    * NaN, and the sine of 0 retains its sign. This is accurate within 1 ulp,
+    * and is semi-monotonic.
+    *
+    * @param a the angle (in radians)
+    * @return sin(a)
+    */
+   public static native double sin(double a);
+ 
+   /**
+    * The trigonometric function <em>cos</em>. The cosine of NaN or infinity is
+    * NaN. This is accurate within 1 ulp, and is semi-monotonic.
+    *
+    * @param a the angle (in radians)
+    * @return cos(a)
+    */
+   public static native double cos(double a);
+ 
+   /**
+    * The trigonometric function <em>tan</em>. The tangent of NaN or infinity
+    * is NaN, and the tangent of 0 retains its sign. This is accurate within 1
+    * ulp, and is semi-monotonic.
+    *
+    * @param a the angle (in radians)
+    * @return tan(a)
+    */
+   public static native double tan(double a);
+ 
+   /**
+    * The trigonometric function <em>arcsin</em>. The range of angles returned
+    * is -pi/2 to pi/2 radians (-90 to 90 degrees). If the argument is NaN or
+    * its absolute value is beyond 1, the result is NaN; and the arcsine of
+    * 0 retains its sign. This is accurate within 1 ulp, and is semi-monotonic.
+    *
+    * @param a the sin to turn back into an angle
+    * @return arcsin(a)
+    */
+   public static native double asin(double a);
+ 
+   /**
+    * The trigonometric function <em>arccos</em>. The range of angles returned
+    * is 0 to pi radians (0 to 180 degrees). If the argument is NaN or
+    * its absolute value is beyond 1, the result is NaN. This is accurate
+    * within 1 ulp, and is semi-monotonic.
+    *
+    * @param a the cos to turn back into an angle
+    * @return arccos(a)
+    */
+   public static native double acos(double a);
+ 
+   /**
+    * The trigonometric function <em>arcsin</em>. The range of angles returned
+    * is -pi/2 to pi/2 radians (-90 to 90 degrees). If the argument is NaN, the
+    * result is NaN; and the arctangent of 0 retains its sign. This is accurate
+    * within 1 ulp, and is semi-monotonic.
+    *
+    * @param a the tan to turn back into an angle
+    * @return arcsin(a)
+    * @see #atan2(double, double)
+    */
+   public static native double atan(double a);
+ 
+   /**
+    * A special version of the trigonometric function <em>arctan</em>, for
+    * converting rectangular coordinates <em>(x, y)</em> to polar
+    * <em>(r, theta)</em>. This computes the arctangent of x/y in the range
+    * of -pi to pi radians (-180 to 180 degrees). Special cases:<ul>
+    * <li>If either argument is NaN, the result is NaN.</li>
+    * <li>If the first argument is positive zero and the second argument is
+    * positive, or the first argument is positive and finite and the second
+    * argument is positive infinity, then the result is positive zero.</li>
+    * <li>If the first argument is negative zero and the second argument is
+    * positive, or the first argument is negative and finite and the second
+    * argument is positive infinity, then the result is negative zero.</li>
+    * <li>If the first argument is positive zero and the second argument is
+    * negative, or the first argument is positive and finite and the second
+    * argument is negative infinity, then the result is the double value
+    * closest to pi.</li>
+    * <li>If the first argument is negative zero and the second argument is
+    * negative, or the first argument is negative and finite and the second
+    * argument is negative infinity, then the result is the double value
+    * closest to -pi.</li>
+    * <li>If the first argument is positive and the second argument is
+    * positive zero or negative zero, or the first argument is positive
+    * infinity and the second argument is finite, then the result is the
+    * double value closest to pi/2.</li>
+    * <li>If the first argument is negative and the second argument is
+    * positive zero or negative zero, or the first argument is negative
+    * infinity and the second argument is finite, then the result is the
+    * double value closest to -pi/2.</li>
+    * <li>If both arguments are positive infinity, then the result is the
+    * double value closest to pi/4.</li>
+    * <li>If the first argument is positive infinity and the second argument
+    * is negative infinity, then the result is the double value closest to
+    * 3*pi/4.</li>
+    * <li>If the first argument is negative infinity and the second argument
+    * is positive infinity, then the result is the double value closest to
+    * -pi/4.</li>
+    * <li>If both arguments are negative infinity, then the result is the
+    * double value closest to -3*pi/4.</li>
+    *
+    * </ul><p>This is accurate within 2 ulps, and is semi-monotonic. To get r,
+    * use sqrt(x*x+y*y).
+    *
+    * @param y the y position
+    * @param x the x position
+    * @return <em>theta</em> in the conversion of (x, y) to (r, theta)
+    * @see #atan(double)
+    */
+   public static native double atan2(double y, double x);
+ 
+   /**
+    * Take <em>e</em><sup>a</sup>.  The opposite of <code>log()</code>. If the
+    * argument is NaN, the result is NaN; if the argument is positive infinity,
+    * the result is positive infinity; and if the argument is negative
+    * infinity, the result is positive zero. This is accurate within 1 ulp,
+    * and is semi-monotonic.
+    *
+    * @param a the number to raise to the power
+    * @return the number raised to the power of <em>e</em>
+    * @see #log(double)
+    * @see #pow(double, double)
+    */
+   public static native double exp(double a);
+ 
+   /**
+    * Take ln(a) (the natural log).  The opposite of <code>exp()</code>. If the
+    * argument is NaN or negative, the result is NaN; if the argument is
+    * positive infinity, the result is positive infinity; and if the argument
+    * is either zero, the result is negative infinity. This is accurate within
+    * 1 ulp, and is semi-monotonic.
+    *
+    * <p>Note that the way to get log<sub>b</sub>(a) is to do this:
+    * <code>ln(a) / ln(b)</code>.
+    *
+    * @param a the number to take the natural log of
+    * @return the natural log of <code>a</code>
+    * @see #exp(double)
+    */
+   public static native double log(double a);
+ 
+   /**
+    * Take a square root. If the argument is NaN or negative, the result is
+    * NaN; if the argument is positive infinity, the result is positive
+    * infinity; and if the result is either zero, the result is the same.
+    * This is accurate within the limits of doubles.
+    *
+    * <p>For other roots, use pow(a, 1 / rootNumber).
+    *
+    * @param a the numeric argument
+    * @return the square root of the argument
+    * @see #pow(double, double)
+    */
+   public static native double sqrt(double a);
+ 
+   /**
+    * Raise a number to a power. Special cases:<ul>
+    * <li>If the second argument is positive or negative zero, then the result
+    * is 1.0.</li>
+    * <li>If the second argument is 1.0, then the result is the same as the
+    * first argument.</li>
+    * <li>If the second argument is NaN, then the result is NaN.</li>
+    * <li>If the first argument is NaN and the second argument is nonzero,
+    * then the result is NaN.</li>
+    * <li>If the absolute value of the first argument is greater than 1 and
+    * the second argument is positive infinity, or the absolute value of the
+    * first argument is less than 1 and the second argument is negative
+    * infinity, then the result is positive infinity.</li>
+    * <li>If the absolute value of the first argument is greater than 1 and
+    * the second argument is negative infinity, or the absolute value of the
+    * first argument is less than 1 and the second argument is positive
+    * infinity, then the result is positive zero.</li>
+    * <li>If the absolute value of the first argument equals 1 and the second
+    * argument is infinite, then the result is NaN.</li>
+    * <li>If the first argument is positive zero and the second argument is
+    * greater than zero, or the first argument is positive infinity and the
+    * second argument is less than zero, then the result is positive zero.</li>
+    * <li>If the first argument is positive zero and the second argument is
+    * less than zero, or the first argument is positive infinity and the
+    * second argument is greater than zero, then the result is positive
+    * infinity.</li>
+    * <li>If the first argument is negative zero and the second argument is
+    * greater than zero but not a finite odd integer, or the first argument is
+    * negative infinity and the second argument is less than zero but not a
+    * finite odd integer, then the result is positive zero.</li>
+    * <li>If the first argument is negative zero and the second argument is a
+    * positive finite odd integer, or the first argument is negative infinity
+    * and the second argument is a negative finite odd integer, then the result
+    * is negative zero.</li>
+    * <li>If the first argument is negative zero and the second argument is
+    * less than zero but not a finite odd integer, or the first argument is
+    * negative infinity and the second argument is greater than zero but not a
+    * finite odd integer, then the result is positive infinity.</li>
+    * <li>If the first argument is negative zero and the second argument is a
+    * negative finite odd integer, or the first argument is negative infinity
+    * and the second argument is a positive finite odd integer, then the result
+    * is negative infinity.</li>
+    * <li>If the first argument is less than zero and the second argument is a
+    * finite even integer, then the result is equal to the result of raising
+    * the absolute value of the first argument to the power of the second
+    * argument.</li>
+    * <li>If the first argument is less than zero and the second argument is a
+    * finite odd integer, then the result is equal to the negative of the
+    * result of raising the absolute value of the first argument to the power
+    * of the second argument.</li>
+    * <li>If the first argument is finite and less than zero and the second
+    * argument is finite and not an integer, then the result is NaN.</li>
+    * <li>If both arguments are integers, then the result is exactly equal to
+    * the mathematical result of raising the first argument to the power of
+    * the second argument if that result can in fact be represented exactly as
+    * a double value.</li>
+    *
+    * </ul><p>(In the foregoing descriptions, a floating-point value is
+    * considered to be an integer if and only if it is a fixed point of the
+    * method {@link #ceil(double)} or, equivalently, a fixed point of the
+    * method {@link #floor(double)}. A value is a fixed point of a one-argument
+    * method if and only if the result of applying the method to the value is
+    * equal to the value.) This is accurate within 1 ulp, and is semi-monotonic.
+    *
+    * @param a the number to raise
+    * @param b the power to raise it to
+    * @return a<sup>b</sup>
+    */
+   public static native double pow(double a, double b);
+ 
+   /**
+    * Get the IEEE 754 floating point remainder on two numbers. This is the
+    * value of <code>x - y * <em>n</em></code>, where <em>n</em> is the closest
+    * double to <code>x / y</code> (ties go to the even n); for a zero
+    * remainder, the sign is that of <code>x</code>. If either argument is NaN,
+    * the first argument is infinite, or the second argument is zero, the result
+    * is NaN; if x is finite but y is infinite, the result is x. This is
+    * accurate within the limits of doubles.
+    *
+    * @param x the dividend (the top half)
+    * @param y the divisor (the bottom half)
+    * @return the IEEE 754-defined floating point remainder of x/y
+    * @see #rint(double)
+    */
+   public static native double IEEEremainder(double x, double y);
+ 
+   /**
+    * Take the nearest integer that is that is greater than or equal to the
+    * argument. If the argument is NaN, infinite, or zero, the result is the
+    * same; if the argument is between -1 and 0, the result is negative zero.
+    * Note that <code>Math.ceil(x) == -Math.floor(-x)</code>.
+    *
+    * @param a the value to act upon
+    * @return the nearest integer &gt;= <code>a</code>
+    */
+   public static native double ceil(double a);
+ 
+   /**
+    * Take the nearest integer that is that is less than or equal to the
+    * argument. If the argument is NaN, infinite, or zero, the result is the
+    * same. Note that <code>Math.ceil(x) == -Math.floor(-x)</code>.
+    *
+    * @param a the value to act upon
+    * @return the nearest integer &lt;= <code>a</code>
+    */
+   public static native double floor(double a);
+ 
+   /**
+    * Take the nearest integer to the argument.  If it is exactly between
+    * two integers, the even integer is taken. If the argument is NaN,
+    * infinite, or zero, the result is the same.
+    *
+    * @param a the value to act upon
+    * @return the nearest integer to <code>a</code>
+    */
+   public static native double rint(double a);
+ 
+   /**
+    * Take the nearest integer to the argument.  This is equivalent to
+    * <code>(int) Math.floor(a + 0.5f)</code>. If the argument is NaN, the result
+    * is 0; otherwise if the argument is outside the range of int, the result
+    * will be Integer.MIN_VALUE or Integer.MAX_VALUE, as appropriate.
+    *
+    * @param a the argument to round
+    * @return the nearest integer to the argument
+    * @see Integer#MIN_VALUE
+    * @see Integer#MAX_VALUE
+    */
+   public static int round(float a)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return 0;
+     return (int) floor(a + 0.5f);
+   }
+ 
+   /**
+    * Take the nearest long to the argument.  This is equivalent to
+    * <code>(long) Math.floor(a + 0.5)</code>. If the argument is NaN, the
+    * result is 0; otherwise if the argument is outside the range of long, the
+    * result will be Long.MIN_VALUE or Long.MAX_VALUE, as appropriate.
+    *
+    * @param a the argument to round
+    * @return the nearest long to the argument
+    * @see Long#MIN_VALUE
+    * @see Long#MAX_VALUE
+    */
+   public static long round(double a)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return 0;
+     return (long) floor(a + 0.5d);
+   }
+ 
+   /**
+    * Get a random number.  This behaves like Random.nextDouble(), seeded by
+    * System.currentTimeMillis() when first called. In other words, the number
+    * is from a pseudorandom sequence, and lies in the range [+0.0, 1.0).
+    * This random sequence is only used by this method, and is threadsafe,
+    * although you may want your own random number generator if it is shared
+    * among threads.
+    *
+    * @return a random number
+    * @see Random#nextDouble()
+    * @see System#currentTimeMillis()
+    */
+   public static synchronized double random()
+   {
+     if (rand == null)
+       rand = new Random();
+     return rand.nextDouble();
+   }
+ 
+   /**
+    * Convert from degrees to radians. The formula for this is
+    * radians = degrees * (pi/180); however it is not always exact given the
+    * limitations of floating point numbers.
+    *
+    * @param degrees an angle in degrees
+    * @return the angle in radians
+    * @since 1.2
+    */
+   public static double toRadians(double degrees)
+   {
+     return (degrees * PI) / 180;
+   }
+ 
+   /**
+    * Convert from radians to degrees. The formula for this is
+    * degrees = radians * (180/pi); however it is not always exact given the
+    * limitations of floating point numbers.
+    *
+    * @param rads an angle in radians
+    * @return the angle in degrees
+    * @since 1.2
+    */
+   public static double toDegrees(double rads)
+   {
+     return (rads * 180) / PI;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/NegativeArraySizeException.java gcc-4.1.0/libjava/classpath/java/lang/NegativeArraySizeException.java
*** gcc-4.0.2/libjava/classpath/java/lang/NegativeArraySizeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/NegativeArraySizeException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* NegativeArraySizeException.java -- thrown on attempt to create array
+    with a negative size
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when an attempt is made to create an array with a negative
+  * size. For example:<br>
+  * <pre>
+  * int i = -1;
+  * int[] array = new int[i];
+  * </pre>
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class NegativeArraySizeException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -8960118058596991861L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public NegativeArraySizeException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public NegativeArraySizeException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/NoClassDefFoundError.java gcc-4.1.0/libjava/classpath/java/lang/NoClassDefFoundError.java
*** gcc-4.0.2/libjava/classpath/java/lang/NoClassDefFoundError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/NoClassDefFoundError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* NoClassDefFoundError.java -- thrown when a ClassLoader cannot find a class
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * A <code>NoClassDefFoundError</code> is thrown when a classloader or the
+  * Java Virtual Machine tries to load a class and no definition of the class
+  * can be found.  This could happen when using the <code>new</code> expression
+  * or during a normal method call.  The reason this would occur at runtime is
+  * because the missing class definition existed when the currently executing 
+  * class was compiled, but now that definition cannot be found.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class NoClassDefFoundError extends LinkageError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 9095859863287012458L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public NoClassDefFoundError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public NoClassDefFoundError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/NoSuchFieldError.java gcc-4.1.0/libjava/classpath/java/lang/NoSuchFieldError.java
*** gcc-4.0.2/libjava/classpath/java/lang/NoSuchFieldError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/NoSuchFieldError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* NoSuchFieldError.java -- thrown when the linker does not find a field
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * A <code>NoSuchFieldError</code> is thrown if an application attempts
+  * to access a field of a class, and that class no longer has that field.
+  * This is normally detected by the compiler, so it signals that you are
+  * using binary incompatible class versions.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class NoSuchFieldError extends IncompatibleClassChangeError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -3456430195886129035L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public NoSuchFieldError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public NoSuchFieldError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/NoSuchFieldException.java gcc-4.1.0/libjava/classpath/java/lang/NoSuchFieldException.java
*** gcc-4.0.2/libjava/classpath/java/lang/NoSuchFieldException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/NoSuchFieldException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* NoSuchFieldException.java -- thrown when reflecting a non-existant field
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown to indicate the class does not have the specified field. This is
+  * caused by a variety of reflection methods, when looking up a field by name.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class NoSuchFieldException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -6143714805279938260L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public NoSuchFieldException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public NoSuchFieldException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/NoSuchMethodError.java gcc-4.1.0/libjava/classpath/java/lang/NoSuchMethodError.java
*** gcc-4.0.2/libjava/classpath/java/lang/NoSuchMethodError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/NoSuchMethodError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* NoSuchMethodError.java -- thrown when the linker does not find a method
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * A <code>NoSuchMethodError</code> is thrown if an application attempts
+  * to access a method of a class, and that class no longer has that method.
+  * This is normally detected by the compiler, so it signals that you are
+  * using binary incompatible class versions.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class NoSuchMethodError extends IncompatibleClassChangeError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   static final long serialVersionUID = -3765521442372831335L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public NoSuchMethodError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public NoSuchMethodError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/NoSuchMethodException.java gcc-4.1.0/libjava/classpath/java/lang/NoSuchMethodException.java
*** gcc-4.0.2/libjava/classpath/java/lang/NoSuchMethodException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/NoSuchMethodException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* NoSuchMethodException.java -- thrown when reflecting a non-existant method
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown to indicate the class does not have the specified method. This is
+  * caused by a variety of reflection methods, when looking up a method by name.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class NoSuchMethodException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 5034388446362600923L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public NoSuchMethodException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public NoSuchMethodException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/NullPointerException.java gcc-4.1.0/libjava/classpath/java/lang/NullPointerException.java
*** gcc-4.0.2/libjava/classpath/java/lang/NullPointerException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/NullPointerException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,82 ----
+ /* NullPointerException.java -- thrown when using null instead of an object
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when attempting to use <code>null</code> where an object
+  * is required. The Virtual Machine automatically throws this exception
+  * for the following:<br><ul>
+  * <li>Calling an instance method on a null object</li>
+  * <li>Accessing or modifying a field of a null object</li>
+  * <li>Taking the array length of a null array</li>
+  * <li>Accessing or modifying the slots of a null array</li>
+  * <li>Throwing a null Throwable</li>
+  * <li>Synchronizing on a null object</li>
+  * </ul>
+  * <p>Applications should also throw NullPointerExceptions whenever
+  * <code>null</code> is an inappropriate parameter to a method.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class NullPointerException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 5162710183389028792L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public NullPointerException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public NullPointerException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Number.java gcc-4.1.0/libjava/classpath/java/lang/Number.java
*** gcc-4.0.2/libjava/classpath/java/lang/Number.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Number.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,131 ----
+ /* Number.java =- abstract superclass of numeric objects
+    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Number is a generic superclass of all the numeric classes, including
+  * the wrapper classes {@link Byte}, {@link Short}, {@link Integer},
+  * {@link Long}, {@link Float}, and {@link Double}.  Also worth mentioning
+  * are the classes in {@link java.math}.
+  *
+  * It provides ways to convert numeric objects to any primitive.
+  *
+  * @author Paul Fisher
+  * @author John Keiser
+  * @author Warren Levy
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public abstract class Number implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -8742448824652078965L;
+ 
+   /**
+    * Table for calculating digits, used in Character, Long, and Integer.
+    */
+   static final char[] digits = {
+     '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+     'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+     'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
+     'u', 'v', 'w', 'x', 'y', 'z',
+   };
+ 
+   /**
+    * The basic constructor (often called implicitly).
+    */
+   public Number()
+   {
+   }
+ 
+   /**
+    * Return the value of this <code>Number</code> as an <code>int</code>.
+    *
+    * @return the int value
+    */
+   public abstract int intValue();
+ 
+   /**
+    * Return the value of this <code>Number</code> as a <code>long</code>.
+    *
+    * @return the long value
+    */
+   public abstract long longValue();
+ 
+   /**
+    * Return the value of this <code>Number</code> as a <code>float</code>.
+    *
+    * @return the float value
+    */
+   public abstract float floatValue();
+ 
+   /**
+    * Return the value of this <code>Number</code> as a <code>float</code>.
+    *
+    * @return the double value
+    */
+   public abstract double doubleValue();
+ 
+   /**
+    * Return the value of this <code>Number</code> as a <code>byte</code>.
+    *
+    * @return the byte value
+    * @since 1.1
+    */
+   public byte byteValue()
+   {
+     return (byte) intValue();
+   }
+ 
+   /**
+    * Return the value of this <code>Number</code> as a <code>short</code>.
+    *
+    * @return the short value
+    * @since 1.1
+    */
+   public short shortValue()
+   {
+     return (short) intValue();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/NumberFormatException.java gcc-4.1.0/libjava/classpath/java/lang/NumberFormatException.java
*** gcc-4.0.2/libjava/classpath/java/lang/NumberFormatException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/NumberFormatException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* NumberFormatException.java -- thrown when parsing a bad string as a number
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Can be thrown when attempting to convert a <code>String</code> to
+  * one of the numeric types, but the operation fails because the string
+  * has the wrong format.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class NumberFormatException extends IllegalArgumentException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -2848938806368998894L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public NumberFormatException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public NumberFormatException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Object.java gcc-4.1.0/libjava/classpath/java/lang/Object.java
*** gcc-4.0.2/libjava/classpath/java/lang/Object.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Object.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,530 ----
+ /* java.lang.Object - The universal superclass in Java
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ 
+ /**
+  * Object is the ultimate superclass of every class
+  * (excepting interfaces).  When you define a class that
+  * does not extend any other class, it implicitly extends
+  * java.lang.Object.  Also, an anonymous class based on
+  * an interface will extend Object.
+  *
+  * <p>It provides general-purpose methods that every single
+  * Object, regardless of race, sex or creed, implements.
+  * All of the public methods may be invoked on arrays or
+  * interfaces.  The protected methods <code>clone</code>
+  * and <code>finalize</code> are not accessible on arrays
+  * or interfaces, but all array types have a public version
+  * of <code>clone</code> which is accessible.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Tom Tromey (tromey@cygnus.com)
+  */
+ public class Object
+ {
+   // WARNING: Object is a CORE class in the bootstrap cycle. See the comments
+   // in vm/reference/java/lang/Runtime for implications of this fact.
+ 
+   // Many JVMs do not allow for static initializers in this class,
+   // hence we do not use them in the default implementation.
+ 
+   // Some VM's rely on the order that these methods appear when laying
+   // out their internal structure.  Therefore, do not haphazardly
+   // rearrange these methods.
+ 
+   /**
+    * The basic constructor.  Object is special, because it has no
+    * superclass, so there is no call to super().
+    *
+    * @throws OutOfMemoryError Technically, this constructor never
+    *         throws an OutOfMemoryError, because the memory has
+    *         already been allocated by this point.  But as all
+    *         instance creation expressions eventually trace back
+    *         to this constructor, and creating an object allocates
+    *         memory, we list that possibility here.
+    */
+   // This could be implicit, but then javadoc would not document it!
+   public Object() {}
+ 
+   /**
+    * Determine whether this Object is semantically equal
+    * to another Object.
+    *
+    * <p>There are some fairly strict requirements on this
+    * method which subclasses must follow:<br>
+    * <ul>
+    * <li>It must be transitive.  If <code>a.equals(b)</code> and
+    *     <code>b.equals(c)</code>, then <code>a.equals(c)</code>
+    *     must be true as well.</li>
+    * <li>It must be symmetric.  <code>a.equals(b)</code> and
+    *     <code>b.equals(a)</code> must have the same value.</li>
+    * <li>It must be reflexive.  <code>a.equals(a)</code> must
+    *     always be true.</li>
+    * <li>It must be consistent.  Whichever value a.equals(b)
+    *     returns on the first invocation must be the value
+    *     returned on all later invocations.</li>
+    * <li><code>a.equals(null)</code> must be false.</li>
+    * <li>It must be consistent with hashCode().  That is,
+    *     <code>a.equals(b)</code> must imply
+    *     <code>a.hashCode() == b.hashCode()</code>.
+    *     The reverse is not true; two objects that are not
+    *     equal may have the same hashcode, but that has
+    *     the potential to harm hashing performance.</li>
+    * </ul>
+    *
+    * <p>This is typically overridden to throw a {@link ClassCastException}
+    * if the argument is not comparable to the class performing
+    * the comparison, but that is not a requirement.  It is legal
+    * for <code>a.equals(b)</code> to be true even though
+    * <code>a.getClass() != b.getClass()</code>.  Also, it
+    * is typical to never cause a {@link NullPointerException}.
+    *
+    * <p>In general, the Collections API ({@link java.util}) use the
+    * <code>equals</code> method rather than the <code>==</code>
+    * operator to compare objects.  However, {@link java.util.IdentityHashMap}
+    * is an exception to this rule, for its own good reasons.
+    *
+    * <p>The default implementation returns <code>this == o</code>.
+    *
+    * @param obj the Object to compare to
+    * @return whether this Object is semantically equal to another
+    * @see #hashCode()
+    */
+   public boolean equals(Object obj)
+   {
+     return this == obj;
+   }
+ 
+   /**
+    * Get a value that represents this Object, as uniquely as
+    * possible within the confines of an int.
+    *
+    * <p>There are some requirements on this method which
+    * subclasses must follow:<br>
+    *
+    * <ul>
+    * <li>Semantic equality implies identical hashcodes.  In other
+    *     words, if <code>a.equals(b)</code> is true, then
+    *     <code>a.hashCode() == b.hashCode()</code> must be as well.
+    *     However, the reverse is not necessarily true, and two
+    *     objects may have the same hashcode without being equal.</li>
+    * <li>It must be consistent.  Whichever value o.hashCode()
+    *     returns on the first invocation must be the value
+    *     returned on all later invocations as long as the object
+    *     exists.  Notice, however, that the result of hashCode may
+    *     change between separate executions of a Virtual Machine,
+    *     because it is not invoked on the same object.</li>
+    * </ul>
+    *
+    * <p>Notice that since <code>hashCode</code> is used in
+    * {@link java.util.Hashtable} and other hashing classes,
+    * a poor implementation will degrade the performance of hashing
+    * (so don't blindly implement it as returning a constant!). Also,
+    * if calculating the hash is time-consuming, a class may consider
+    * caching the results.
+    *
+    * <p>The default implementation returns
+    * <code>System.identityHashCode(this)</code>
+    *
+    * @return the hash code for this Object
+    * @see #equals(Object)
+    * @see System#identityHashCode(Object)
+    */
+   public int hashCode()
+   {
+     return System.identityHashCode(this);
+   }
+ 
+   /**
+    * Convert this Object to a human-readable String.
+    * There are no limits placed on how long this String
+    * should be or what it should contain.  We suggest you
+    * make it as intuitive as possible to be able to place
+    * it into {@link java.io.PrintStream#println() System.out.println()}
+    * and such.
+    *
+    * <p>It is typical, but not required, to ensure that this method
+    * never completes abruptly with a {@link RuntimeException}.
+    *
+    * <p>This method will be called when performing string
+    * concatenation with this object.  If the result is
+    * <code>null</code>, string concatenation will instead
+    * use <code>"null"</code>.
+    *
+    * <p>The default implementation returns
+    * <code>getClass().getName() + "@" +
+    *      Integer.toHexString(hashCode())</code>.
+    *
+    * @return the String representing this Object, which may be null
+    * @throws OutOfMemoryError The default implementation creates a new
+    *         String object, therefore it must allocate memory
+    * @see #getClass()
+    * @see #hashCode()
+    * @see Class#getName()
+    * @see Integer#toHexString(int)
+    */
+   public String toString()
+   {
+     return getClass().getName() + '@' + Integer.toHexString(hashCode());
+   }
+ 
+   /**
+    * Called on an object by the Virtual Machine at most once,
+    * at some point after the Object is determined unreachable
+    * but before it is destroyed. You would think that this
+    * means it eventually is called on every Object, but this is
+    * not necessarily the case.  If execution terminates
+    * abnormally, garbage collection does not always happen.
+    * Thus you cannot rely on this method to always work.
+    * For finer control over garbage collection, use references
+    * from the {@link java.lang.ref} package.
+    *
+    * <p>Virtual Machines are free to not call this method if
+    * they can determine that it does nothing important; for
+    * example, if your class extends Object and overrides
+    * finalize to do simply <code>super.finalize()</code>.
+    *
+    * <p>finalize() will be called by a {@link Thread} that has no
+    * locks on any Objects, and may be called concurrently.
+    * There are no guarantees on the order in which multiple
+    * objects are finalized.  This means that finalize() is
+    * usually unsuited for performing actions that must be
+    * thread-safe, and that your implementation must be
+    * use defensive programming if it is to always work.
+    *
+    * <p>If an Exception is thrown from finalize() during garbage
+    * collection, it will be patently ignored and the Object will
+    * still be destroyed.
+    *
+    * <p>It is allowed, although not typical, for user code to call
+    * finalize() directly.  User invocation does not affect whether
+    * automatic invocation will occur.  It is also permitted,
+    * although not recommended, for a finalize() method to "revive"
+    * an object by making it reachable from normal code again.
+    *
+    * <p>Unlike constructors, finalize() does not get called
+    * for an object's superclass unless the implementation
+    * specifically calls <code>super.finalize()</code>.
+    *
+    * <p>The default implementation does nothing.
+    *
+    * @throws Throwable permits a subclass to throw anything in an
+    *         overridden version; but the default throws nothing
+    * @see System#gc()
+    * @see System#runFinalizersOnExit(boolean)
+    * @see java.lang.ref
+    */
+   protected void finalize() throws Throwable
+   {
+   }
+ 
+   /**
+    * This method may be called to create a new copy of the
+    * Object.  The typical behavior is as follows:<br>
+    * <ul>
+    *  <li><code>o == o.clone()</code> is false</li>
+    *  <li><code>o.getClass() == o.clone().getClass()</code>
+    *      is true</li>
+    *  <li><code>o.equals(o)</code> is true</li>
+    * </ul>
+    *
+    * <p>However, these are not strict requirements, and may
+    * be violated if necessary.  Of the three requirements, the
+    * last is the most commonly violated, particularly if the
+    * subclass does not override {@link #equals(Object)}.
+    *
+    * <p>If the Object you call clone() on does not implement
+    * {@link Cloneable} (which is a placeholder interface), then
+    * a CloneNotSupportedException is thrown.  Notice that
+    * Object does not implement Cloneable; this method exists
+    * as a convenience for subclasses that do.
+    *
+    * <p>Object's implementation of clone allocates space for the
+    * new Object using the correct class, without calling any
+    * constructors, and then fills in all of the new field values
+    * with the old field values.  Thus, it is a shallow copy.
+    * However, subclasses are permitted to make a deep copy.
+    *
+    * <p>All array types implement Cloneable, and override
+    * this method as follows (it should never fail):<br>
+    * <pre>
+    * public Object clone()
+    * {
+    *   try
+    *     {
+    *       super.clone();
+    *     }
+    *   catch (CloneNotSupportedException e)
+    *     {
+    *       throw new InternalError(e.getMessage());
+    *     }
+    * }
+    * </pre>
+    *
+    * @return a copy of the Object
+    * @throws CloneNotSupportedException If this Object does not
+    *         implement Cloneable
+    * @throws OutOfMemoryError Since cloning involves memory allocation,
+    *         even though it may bypass constructors, you might run
+    *         out of memory
+    * @see Cloneable
+    */
+   protected Object clone() throws CloneNotSupportedException
+   {
+     if (this instanceof Cloneable)
+       return VMObject.clone((Cloneable) this);
+     throw new CloneNotSupportedException("Object not cloneable");
+   }
+ 
+   /**
+    * Returns the runtime {@link Class} of this Object.
+    *
+    * <p>The class object can also be obtained without a runtime
+    * instance by using the class literal, as in:
+    * <code>Foo.class</code>.  Notice that the class literal
+    * also works on primitive types, making it useful for
+    * reflection purposes.
+    *
+    * @return the class of this Object
+    */
+   public final Class getClass()
+   {
+     return VMObject.getClass(this);
+   }
+ 
+   /**
+    * Wakes up one of the {@link Thread}s that has called
+    * <code>wait</code> on this Object.  Only the owner
+    * of a lock on this Object may call this method.  This lock
+    * is obtained by a <code>synchronized</code> method or statement.
+    *
+    * <p>The Thread to wake up is chosen arbitrarily.  The
+    * awakened thread is not guaranteed to be the next thread
+    * to actually obtain the lock on this object.
+    *
+    * <p>This thread still holds a lock on the object, so it is
+    * typical to release the lock by exiting the synchronized
+    * code, calling wait(), or calling {@link Thread#sleep(long)}, so
+    * that the newly awakened thread can actually resume.  The
+    * awakened thread will most likely be awakened with an
+    * {@link InterruptedException}, but that is not guaranteed.
+    *
+    * @throws IllegalMonitorStateException if this Thread
+    *         does not own the lock on the Object
+    * @see #notifyAll()
+    * @see #wait()
+    * @see #wait(long)
+    * @see #wait(long, int)
+    * @see Thread
+    */
+   public final void notify() throws IllegalMonitorStateException
+   {
+     VMObject.notify(this);
+   }
+ 
+   /**
+    * Wakes up all of the {@link Thread}s that have called
+    * <code>wait</code> on this Object.  Only the owner
+    * of a lock on this Object may call this method.  This lock
+    * is obtained by a <code>synchronized</code> method or statement.
+    *
+    * <p>There are no guarantees as to which thread will next
+    * obtain the lock on the object.
+    *
+    * <p>This thread still holds a lock on the object, so it is
+    * typical to release the lock by exiting the synchronized
+    * code, calling wait(), or calling {@link Thread#sleep(long)}, so
+    * that one of the newly awakened threads can actually resume.
+    * The resuming thread will most likely be awakened with an
+    * {@link InterruptedException}, but that is not guaranteed.
+    *
+    * @throws IllegalMonitorStateException if this Thread
+    *         does not own the lock on the Object
+    * @see #notify()
+    * @see #wait()
+    * @see #wait(long)
+    * @see #wait(long, int)
+    * @see Thread
+    */
+   public final void notifyAll() throws IllegalMonitorStateException
+   {
+     VMObject.notifyAll(this);
+   }
+ 
+   /**
+    * Waits indefinitely for notify() or notifyAll() to be
+    * called on the Object in question.  Implementation is
+    * identical to wait(0).
+    *
+    * <p>The Thread that calls wait must have a lock on this Object,
+    * obtained by a <code>synchronized</code> method or statement.
+    * After calling wait, the thread loses the lock on this
+    * object until the method completes (abruptly or normally),
+    * at which time it regains the lock.  All locks held on
+    * other objects remain in force, even though the thread is
+    * inactive. Therefore, caution must be used to avoid deadlock.
+    *
+    * <p>While it is typical that this method will complete abruptly
+    * with an {@link InterruptedException}, it is not guaranteed.  So,
+    * it is typical to call wait inside an infinite loop:<br>
+    *
+    * <pre>
+    * try
+    *   {
+    *     while (true)
+    *       lock.wait();
+    *   }
+    * catch (InterruptedException e)
+    *   {
+    *   }
+    * </pre>
+    *
+    * @throws IllegalMonitorStateException if this Thread
+    *         does not own a lock on this Object
+    * @throws InterruptedException if some other Thread
+    *         interrupts this Thread
+    * @see #notify()
+    * @see #notifyAll()
+    * @see #wait(long)
+    * @see #wait(long, int)
+    * @see Thread
+    */
+   public final void wait()
+     throws IllegalMonitorStateException, InterruptedException
+   {
+     VMObject.wait(this, 0, 0);
+   }
+ 
+   /**
+    * Waits a specified amount of time (or indefinitely if
+    * the time specified is 0) for someone to call notify()
+    * or notifyAll() on this Object, waking up this Thread.
+    *
+    * <p>The Thread that calls wait must have a lock on this Object,
+    * obtained by a <code>synchronized</code> method or statement.
+    * After calling wait, the thread loses the lock on this
+    * object until the method completes (abruptly or normally),
+    * at which time it regains the lock.  All locks held on
+    * other objects remain in force, even though the thread is
+    * inactive. Therefore, caution must be used to avoid deadlock.
+    *
+    * <p>Usually, this call will complete normally if the time
+    * expires, or abruptly with {@link InterruptedException}
+    * if another thread called notify, but neither result
+    * is guaranteed.
+    *
+    * <p>The waiting period is only *roughly* the amount of time
+    * you requested.  It cannot be exact because of the overhead
+    * of the call itself.  Most Virtual Machiness treat the
+    * argument as a lower limit on the time spent waiting, but
+    * even that is not guaranteed.  Besides, some other thread
+    * may hold the lock on the object when the time expires, so
+    * the current thread may still have to wait to reobtain the
+    * lock.
+    *
+    * @param ms the minimum number of milliseconds to wait (1000
+    *        milliseconds = 1 second), or 0 for an indefinite wait
+    * @throws IllegalArgumentException if ms &lt; 0
+    * @throws IllegalMonitorStateException if this Thread
+    *         does not own a lock on this Object
+    * @throws InterruptedException if some other Thread
+    *         interrupts this Thread
+    * @see #notify()
+    * @see #notifyAll()
+    * @see #wait()
+    * @see #wait(long, int)
+    * @see Thread
+    */
+   public final void wait(long ms)
+     throws IllegalMonitorStateException, InterruptedException
+   {
+     wait(ms, 0);
+   }
+ 
+   /**
+    * Waits a specified amount of time (or indefinitely if
+    * the time specified is 0) for someone to call notify()
+    * or notifyAll() on this Object, waking up this Thread.
+    *
+    * <p>The Thread that calls wait must have a lock on this Object,
+    * obtained by a <code>synchronized</code> method or statement.
+    * After calling wait, the thread loses the lock on this
+    * object until the method completes (abruptly or normally),
+    * at which time it regains the lock.  All locks held on
+    * other objects remain in force, even though the thread is
+    * inactive. Therefore, caution must be used to avoid deadlock.
+    *
+    * <p>Usually, this call will complete normally if the time
+    * expires, or abruptly with {@link InterruptedException}
+    * if another thread called notify, but neither result
+    * is guaranteed.
+    *
+    * <p>The waiting period is nowhere near as precise as
+    * nanoseconds; considering that even wait(int) is inaccurate,
+    * how much can you expect?  But on supporting
+    * implementations, this offers somewhat more granularity
+    * than milliseconds.
+    *
+    * @param ms the number of milliseconds to wait (1,000
+    *        milliseconds = 1 second)
+    * @param ns the number of nanoseconds to wait over and
+    *        above ms (1,000,000 nanoseconds = 1 millisecond)
+    * @throws IllegalArgumentException if ms &lt; 0 or ns is not
+    *         in the range 0 to 999,999
+    * @throws IllegalMonitorStateException if this Thread
+    *         does not own a lock on this Object
+    * @throws InterruptedException if some other Thread
+    *         interrupts this Thread
+    * @see #notify()
+    * @see #notifyAll()
+    * @see #wait()
+    * @see #wait(long)
+    * @see Thread
+    */
+   public final void wait(long ms, int ns)
+     throws IllegalMonitorStateException, InterruptedException
+   {
+     if (ms < 0 || ns < 0 || ns > 999999)
+       throw new IllegalArgumentException("argument out of range");
+     VMObject.wait(this, ms, ns);
+   }
+ } // class Object
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/OutOfMemoryError.java gcc-4.1.0/libjava/classpath/java/lang/OutOfMemoryError.java
*** gcc-4.0.2/libjava/classpath/java/lang/OutOfMemoryError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/OutOfMemoryError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* OutOfMemoryError.java -- thrown when a memory allocation fails
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Thrown when the Java Virtual Machine is unable to allocate an object
+  * because it is out of memory and no more memory could be made available
+  * by the garbage collector.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class OutOfMemoryError extends VirtualMachineError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 8228564086184010517L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public OutOfMemoryError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public OutOfMemoryError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Package.java gcc-4.1.0/libjava/classpath/java/lang/Package.java
*** gcc-4.0.2/libjava/classpath/java/lang/Package.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Package.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,318 ----
+ /* Package.java -- information about a package
+    Copyright (C) 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import gnu.classpath.VMStackWalker;
+ 
+ import java.net.URL;
+ import java.util.NoSuchElementException;
+ import java.util.StringTokenizer;
+ 
+ 
+ /**
+  * Everything you ever wanted to know about a package. This class makes it
+  * possible to attach specification and implementation information to a
+  * package as explained in the
+  * <a href="http://java.sun.com/products/jdk/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersionSpecification">Package Versioning Specification</a>
+  * section of the
+  * <a href="http://java.sun.com/products/jdk/1.3/docs/guide/versioning/spec/VersioningSpecification.html">Product Versioning Specification</a>.
+  * It also allows packages to be sealed with respect to the originating URL.
+  *
+  * <p>The most useful method is the <code>isCompatibleWith()</code> method that
+  * compares a desired version of a specification with the version of the
+  * specification as implemented by a package. A package is considered
+  * compatible with another version if the version of the specification is
+  * equal or higher then the requested version. Version numbers are represented
+  * as strings of positive numbers separated by dots (e.g. "1.2.0").
+  * The first number is called the major number, the second the minor,
+  * the third the micro, etc. A version is considered higher then another
+  * version if it has a bigger major number then the another version or when
+  * the major numbers of the versions are equal if it has a bigger minor number
+  * then the other version, etc. (If a version has no minor, micro, etc numbers
+  * then they are considered the be 0.)
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @see ClassLoader#definePackage(String, String, String, String, String,
+  *      String, String, URL)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class Package
+ {
+   /** The name of the Package */
+   private final String name;
+ 
+   /** The name if the implementation */
+   private final String implTitle;
+ 
+   /** The vendor that wrote this implementation */
+   private final String implVendor;
+ 
+   /** The version of this implementation */
+   private final String implVersion;
+ 
+   /** The name of the specification */
+   private final String specTitle;
+ 
+   /** The name of the specification designer */
+   private final String specVendor;
+ 
+   /** The version of this specification */
+   private final String specVersion;
+ 
+   /** If sealed the origin of the package classes, otherwise null */
+   private final URL sealed;
+ 
+   /**
+    * A package local constructor for the Package class. All parameters except
+    * the <code>name</code> of the package may be <code>null</code>.
+    * There are no public constructors defined for Package; this is a package
+    * local constructor that is used by java.lang.Classloader.definePackage().
+    * 
+    * @param name The name of the Package
+    * @param specTitle The name of the specification
+    * @param specVendor The name of the specification designer
+    * @param specVersion The version of this specification
+    * @param implTitle The name of the implementation
+    * @param implVendor The vendor that wrote this implementation
+    * @param implVersion The version of this implementation
+    * @param sealed If sealed the origin of the package classes
+    */
+   Package(String name,
+ 	  String specTitle, String specVendor, String specVersion,
+ 	  String implTitle, String implVendor, String implVersion, URL sealed)
+   {
+     if (name == null)
+       throw new IllegalArgumentException("null Package name");
+ 
+     this.name = name;
+     this.implTitle = implTitle;
+     this.implVendor = implVendor;
+     this.implVersion = implVersion;
+     this.specTitle = specTitle;
+     this.specVendor = specVendor;
+     this.specVersion = specVersion;
+     this.sealed = sealed;
+   }
+ 
+   /**
+    * Returns the Package name in dot-notation.
+    *
+    * @return the non-null package name
+    */
+   public String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Returns the name of the specification, or null if unknown.
+    *
+    * @return the specification title
+    */
+   public String getSpecificationTitle()
+   {
+     return specTitle;
+   }
+ 
+   /**
+    * Returns the version of the specification, or null if unknown.
+    *
+    * @return the specification version
+    */
+   public String getSpecificationVersion()
+   {
+     return specVersion;
+   }
+ 
+   /**
+    * Returns the name of the specification designer, or null if unknown.
+    *
+    * @return the specification vendor
+    */
+   public String getSpecificationVendor()
+   {
+     return specVendor;
+   }
+ 
+   /**
+    * Returns the name of the implementation, or null if unknown.
+    *
+    * @return the implementation title
+    */
+   public String getImplementationTitle()
+   {
+     return implTitle;
+   }
+ 
+   /**
+    * Returns the version of this implementation, or null if unknown.
+    *
+    * @return the implementation version
+    */
+   public String getImplementationVersion()
+   {
+     return implVersion;
+   }
+ 
+   /**
+    * Returns the vendor that wrote this implementation, or null if unknown.
+    *
+    * @return the implementation vendor
+    */
+   public String getImplementationVendor()
+   {
+     return implVendor;
+   }
+ 
+   /**
+    * Returns true if this Package is sealed.
+    *
+    * @return true if the package is sealed
+    */
+   public boolean isSealed()
+   {
+     return sealed != null;
+   }
+ 
+   /**
+    * Returns true if this Package is sealed and the origin of the classes is
+    * the given URL.
+    *
+    * @param url the URL to test
+    * @return true if the package is sealed by this URL
+    * @throws NullPointerException if url is null
+    */
+   public boolean isSealed(URL url)
+   {
+     return url.equals(sealed);
+   }
+ 
+   /**
+    * Checks if the version of the specification is higher or at least as high
+    * as the desired version. Comparison is done by sequentially comparing
+    * dotted decimal numbers from the parameter and from
+    * <code>getSpecificationVersion</code>.
+    *
+    * @param version the (minimal) desired version of the specification
+    *
+    * @return true if the version is compatible, false otherwise
+    *
+    * @Throws NumberFormatException if either version string is invalid
+    * @throws NullPointerException if either version string is null
+    */
+   public boolean isCompatibleWith(String version)
+   {
+     StringTokenizer versionTokens = new StringTokenizer(version, ".");
+     StringTokenizer specTokens = new StringTokenizer(specVersion, ".");
+     try
+       {
+         while (versionTokens.hasMoreElements())
+           {
+             int vers = Integer.parseInt(versionTokens.nextToken());
+             int spec = Integer.parseInt(specTokens.nextToken());
+             if (spec < vers)
+               return false;
+             else if (spec > vers)
+               return true;
+             // They must be equal, next Token please!
+           }
+       }
+     catch (NoSuchElementException e)
+       {
+         // This must have been thrown by spec.nextToken() so return false.
+         return false;
+       }
+     // They must have been exactly the same version.
+     // Or the specVersion has more subversions. That is also good.
+     return true;
+   }
+ 
+   /**
+    * Returns the named package if it is known by the callers class loader.
+    * It may return null if the package is unknown, when there is no
+    * information on that particular package available or when the callers
+    * classloader is null.
+    *
+    * @param name the name of the desired package
+    * @return the package by that name in the current ClassLoader
+    */
+   public static Package getPackage(String name)
+   {
+     // Get the caller's classloader
+     ClassLoader cl = VMStackWalker.getCallingClassLoader();
+     return cl != null ? cl.getPackage(name) : VMClassLoader.getPackage(name);
+   }
+ 
+   /**
+    * Returns all the packages that are known to the callers class loader.
+    * It may return an empty array if the classloader of the caller is null.
+    *
+    * @return an array of all known packages
+    */
+   public static Package[] getPackages()
+   {
+     // Get the caller's classloader
+     ClassLoader cl = VMStackWalker.getCallingClassLoader();
+     return cl != null ? cl.getPackages() : VMClassLoader.getPackages();
+   }
+ 
+   /**
+    * Returns the hashCode of the name of this package.
+    *
+    * @return the hash code
+    */
+   public int hashCode()
+   {
+     return name.hashCode();
+   }
+ 
+   /**
+    * Returns a string representation of this package. It is specified to
+    * be <code>"package " + getName() + (getSpecificationTitle() == null
+    * ? "" : ", " + getSpecificationTitle()) + (getSpecificationVersion()
+    * == null ? "" : ", version " + getSpecificationVersion())</code>.
+    *
+    * @return the string representation of the package
+    */
+   public String toString()
+   {
+     return ("package " + name + (specTitle == null ? "" : ", " + specTitle)
+ 	    + (specVersion == null ? "" : ", version " + specVersion));
+   }
+ } // class Package
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Process.java gcc-4.1.0/libjava/classpath/java/lang/Process.java
*** gcc-4.0.2/libjava/classpath/java/lang/Process.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Process.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,130 ----
+ /* Process.java - Represent spawned system process
+    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import java.io.File;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ 
+ /**
+  * An instance of a subclass of <code>Process</code> is created by the
+  * <code>Runtime.exec</code> methods.  Methods in <code>Process</code>
+  * provide a means to send input to a process, obtain the output from a
+  * subprocess, destroy a subprocess, obtain the exit value from a
+  * subprocess, and wait for a subprocess to complete.
+  *
+  * <p>This is dependent on the platform, and some processes (like native
+  * windowing processes, 16-bit processes in Windows, or shell scripts) may
+  * be limited in functionality. Because some platforms have limited buffers
+  * between processes, you may need to provide input and read output to prevent
+  * the process from blocking, or even deadlocking.
+  *
+  * <p>Even if all references to this object disapper, the process continues
+  * to execute to completion. There are no guarantees that the
+  * subprocess execute asynchronously or concurrently with the process which
+  * owns this object.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see Runtime#exec(String[], String[], File)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public abstract class Process
+ {
+   /**
+    * Empty constructor does nothing.
+    */
+   public Process()
+   {
+   }
+ 
+   /**
+    * Obtain the output stream that sends data to the subprocess. This is
+    * the STDIN of the subprocess. When implementing, you should probably
+    * use a buffered stream.
+    *
+    * @return the output stream that pipes to the process input
+    */
+   public abstract OutputStream getOutputStream();
+ 
+   /**
+    * Obtain the input stream that receives data from the subprocess. This is
+    * the STDOUT of the subprocess. When implementing, you should probably
+    * use a buffered stream.
+    *
+    * @return the input stream that pipes data from the process output
+    */
+   public abstract InputStream getInputStream();
+ 
+   /**
+    * Obtain the input stream that receives data from the subprocess. This is
+    * the STDERR of the subprocess. When implementing, you should probably
+    * use a buffered stream.
+    *
+    * @return the input stream that pipes data from the process error output
+    */
+   public abstract InputStream getErrorStream();
+ 
+   /**
+    * The thread calling <code>waitFor</code> will block until the subprocess
+    * has terminated. If the process has already terminated then the method
+    * immediately returns with the exit value of the subprocess.
+    *
+    * @return the subprocess exit value; 0 conventionally denotes success
+    * @throws InterruptedException if another thread interrupts the blocked one
+    */
+   public abstract int waitFor() throws InterruptedException;
+ 
+   /**
+    * When a process terminates there is associated with that termination
+    * an exit value for the process to indicate why it terminated. A return
+    * of <code>0</code> denotes normal process termination by convention.
+    *
+    * @return the exit value of the subprocess
+    * @throws IllegalThreadStateException if the subprocess has not terminated
+    */
+   public abstract int exitValue();
+ 
+   /**
+    * Kills the subprocess and all of its children forcibly.
+    */
+   public abstract void destroy();
+ } // class Process
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Readable.java gcc-4.1.0/libjava/classpath/java/lang/Readable.java
*** gcc-4.0.2/libjava/classpath/java/lang/Readable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Readable.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,72 ----
+ /* Readable.java -- A character source
+    Copyright (C) 2004, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import java.io.IOException;
+ import java.nio.CharBuffer;
+ import java.nio.ReadOnlyBufferException;
+ 
+ /**
+  * A <code>Readable</code> object is simply a source for Unicode character
+  * data.  On request, a <code>Readable</code> will provide its data in
+  * a supplied <code>CharBuffer</code>.
+  *
+  * @author Tom Tromey <tromey@redhat.com>
+  * @author Andrew John Hughes <gnu_andrew@member.fsf.org>
+  * @since 1.5
+  */
+ public interface Readable
+ {
+ 
+   /**
+    * Adds the character data supplied by this <code>Readable</code>
+    * to the specified character buffer.  This method simply places
+    * each character into the buffer as supplied, using <code>put()</code>,
+    * without flipping or rewinding.
+    *
+    * @param buf the buffer to place the character data in.
+    * @return the number of <code>char</code> values placed in the buffer,
+    *         or -1 if no more characters are available.
+    * @throws IOException if an I/O error occurs.
+    * @throws NullPointerException if buf is null.
+    * @throws ReadOnlyBufferException if buf is read only.
+    */
+   int read(CharBuffer buf)
+     throws IOException;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Runnable.java gcc-4.1.0/libjava/classpath/java/lang/Runnable.java
*** gcc-4.0.2/libjava/classpath/java/lang/Runnable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Runnable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* Runnable -- interface for a method tied to an Object; often for Threads
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Runnable is an interface you implement to indicate that your class can be
+  * executed as the main part of a Thread, among other places.  When you want
+  * an entry point to run a piece of code, implement this interface and
+  * override run.
+  *
+  * @author Paul Fisher
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see Thread
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface Runnable
+ {
+   /**
+    * This method will be called by whoever wishes to run your class
+    * implementing Runnable. Note that there are no restrictions on what
+    * you are allowed to do in the run method, except that you cannot
+    * throw a checked exception.
+    */
+   void run();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Runtime.java gcc-4.1.0/libjava/classpath/java/lang/Runtime.java
*** gcc-4.0.2/libjava/classpath/java/lang/Runtime.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Runtime.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,796 ----
+ /* Runtime.java -- access to the VM process
+    Copyright (C) 1998, 2002, 2003, 2004, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import gnu.classpath.SystemProperties;
+ import gnu.classpath.VMStackWalker;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Set;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * Runtime represents the Virtual Machine.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Jeroen Frijters
+  */
+ // No idea why this class isn't final, since you can't build a subclass!
+ public class Runtime
+ {
+   /**
+    * The library path, to search when loading libraries. We can also safely use
+    * this as a lock for synchronization.
+    */
+   private final String[] libpath;
+ 
+   /**
+    * The thread that started the exit sequence. Access to this field must
+    * be thread-safe; lock on libpath to avoid deadlock with user code.
+    * <code>runFinalization()</code> may want to look at this to see if ALL
+    * finalizers should be run, because the virtual machine is about to halt.
+    */
+   private Thread exitSequence;
+ 
+   /**
+    * All shutdown hooks. This is initialized lazily, and set to null once all
+    * shutdown hooks have run. Access to this field must be thread-safe; lock
+    * on libpath to avoid deadlock with user code.
+    */
+   private Set shutdownHooks;
+ 
+   /**
+    * The one and only runtime instance.
+    */
+   private static final Runtime current = new Runtime();
+ 
+   /**
+    * Not instantiable by a user, this should only create one instance.
+    */
+   private Runtime()
+   {
+     if (current != null)
+       throw new InternalError("Attempt to recreate Runtime");
+     
+     // If used by underlying VM this contains the directories where Classpath's own
+     // native libraries are located.
+     String bootPath = SystemProperties.getProperty("gnu.classpath.boot.library.path", "");
+     
+     // If properly set by the user this contains the directories where the application's
+     // native libraries are located. On operating systems where a LD_LIBRARY_PATH environment
+     // variable is available a VM should preset java.library.path with value of this
+     // variable.
+     String path = SystemProperties.getProperty("java.library.path", ".");
+     String pathSep = SystemProperties.getProperty("path.separator", ":");
+     String fileSep = SystemProperties.getProperty("file.separator", "/");
+ 
+     StringTokenizer t1 = new StringTokenizer(bootPath, pathSep);
+     StringTokenizer t2 = new StringTokenizer(path, pathSep);
+     libpath = new String[t1.countTokens() + t2.countTokens()];
+     
+     int i = 0;
+     while(t1.hasMoreTokens()) {
+       String prefix = t1.nextToken();
+       if (! prefix.endsWith(fileSep))
+         prefix += fileSep;
+       
+       libpath[i] = prefix;
+       i++;
+     }
+     
+     while(t2.hasMoreTokens()) {
+       String prefix = t2.nextToken();
+       if (! prefix.endsWith(fileSep))
+         prefix += fileSep;
+   
+       libpath[i] = prefix;
+       i++;
+     }
+   }
+ 
+   /**
+    * Get the current Runtime object for this JVM. This is necessary to access
+    * the many instance methods of this class.
+    *
+    * @return the current Runtime object
+    */
+   public static Runtime getRuntime()
+   {
+     return current;
+   }
+ 
+   /**
+    * Exit the Java runtime. This method will either throw a SecurityException
+    * or it will never return. The status code is returned to the system; often
+    * a non-zero status code indicates an abnormal exit. Of course, there is a
+    * security check, <code>checkExit(status)</code>.
+    *
+    * <p>First, all shutdown hooks are run, in unspecified order, and
+    * concurrently. Next, if finalization on exit has been enabled, all pending
+    * finalizers are run. Finally, the system calls <code>halt</code>.</p>
+    *
+    * <p>If this is run a second time after shutdown has already started, there
+    * are two actions. If shutdown hooks are still executing, it blocks
+    * indefinitely. Otherwise, if the status is nonzero it halts immediately;
+    * if it is zero, it blocks indefinitely. This is typically called by
+    * <code>System.exit</code>.</p>
+    *
+    * @param status the status to exit with
+    * @throws SecurityException if permission is denied
+    * @see #addShutdownHook(Thread)
+    * @see #runFinalizersOnExit(boolean)
+    * @see #runFinalization()
+    * @see #halt(int)
+    */
+   public void exit(int status)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe!
+     if (sm != null)
+       sm.checkExit(status);
+ 
+     if (runShutdownHooks())
+       halt(status);
+ 
+     // Someone else already called runShutdownHooks().
+     // Make sure we are not/no longer in the shutdownHooks set.
+     // And wait till the thread that is calling runShutdownHooks() finishes.
+     synchronized (libpath)
+       {
+         if (shutdownHooks != null)
+           {
+             shutdownHooks.remove(Thread.currentThread());
+             // Interrupt the exit sequence thread, in case it was waiting
+             // inside a join on our thread.
+             exitSequence.interrupt();
+             // Shutdown hooks are still running, so we clear status to
+ 	    // make sure we don't halt.
+ 	    status = 0;
+           }
+       }
+ 
+     // If exit() is called again after the shutdown hooks have run, but
+     // while finalization for exit is going on and the status is non-zero
+     // we halt immediately.
+     if (status != 0)
+       halt(status);
+ 
+     while (true)
+       try
+         {
+           exitSequence.join();
+         }
+       catch (InterruptedException e)
+         {
+           // Ignore, we've suspended indefinitely to let all shutdown
+           // hooks complete, and to let any non-zero exits through, because
+           // this is a duplicate call to exit(0).
+         }
+   }
+ 
+   /**
+    * On first invocation, run all the shutdown hooks and return true.
+    * Any subsequent invocations will simply return false.
+    * Note that it is package accessible so that VMRuntime can call it
+    * when VM exit is not triggered by a call to Runtime.exit().
+    * 
+    * @return was the current thread the first one to call this method?
+    */
+   boolean runShutdownHooks()
+   {
+     boolean first = false;
+     synchronized (libpath) // Synch on libpath, not this, to avoid deadlock.
+       {
+         if (exitSequence == null)
+           {
+             first = true;
+             exitSequence = Thread.currentThread();
+             if (shutdownHooks != null)
+               {
+                 Iterator i = shutdownHooks.iterator();
+                 while (i.hasNext()) // Start all shutdown hooks.
+                   try
+                     {
+                       ((Thread) i.next()).start();
+                     }
+                   catch (IllegalThreadStateException e)
+                     {
+                       i.remove();
+                     }
+               }
+           }
+       }
+     if (first)
+       {
+         if (shutdownHooks != null)
+           {
+             // Check progress of all shutdown hooks. As a hook completes,
+             // remove it from the set. If a hook calls exit, it removes
+             // itself from the set, then waits indefinitely on the
+             // exitSequence thread. Once the set is empty, set it to null to
+             // signal all finalizer threads that halt may be called.
+             while (true)
+               {
+                 Thread[] hooks;
+                 synchronized (libpath)
+                   {
+                     hooks = new Thread[shutdownHooks.size()];
+                     shutdownHooks.toArray(hooks);
+                   }
+                 if (hooks.length == 0)
+                   break;
+                 for (int i = 0; i < hooks.length; i++)
+                   {
+                     try
+                       {
+                         synchronized (libpath)
+                           {
+                             if (!shutdownHooks.contains(hooks[i]))
+                               continue;
+                           }
+                         hooks[i].join();
+                         synchronized (libpath)
+                           {
+                             shutdownHooks.remove(hooks[i]);
+                           }
+                       }
+                     catch (InterruptedException x)
+                       {
+                         // continue waiting on the next thread
+                       }
+                   }
+               }
+             synchronized (libpath)
+               {
+                 shutdownHooks = null;
+               }
+           }
+ 	// Run finalization on all finalizable objects (even if they are
+ 	// still reachable).
+         VMRuntime.runFinalizationForExit();
+       }
+     return first;
+   }
+ 
+   /**
+    * Register a new shutdown hook. This is invoked when the program exits
+    * normally (because all non-daemon threads ended, or because
+    * <code>System.exit</code> was invoked), or when the user terminates
+    * the virtual machine (such as by typing ^C, or logging off). There is
+    * a security check to add hooks,
+    * <code>RuntimePermission("shutdownHooks")</code>.
+    *
+    * <p>The hook must be an initialized, but unstarted Thread. The threads
+    * are run concurrently, and started in an arbitrary order; and user
+    * threads or daemons may still be running. Once shutdown hooks have
+    * started, they must all complete, or else you must use <code>halt</code>,
+    * to actually finish the shutdown sequence. Attempts to modify hooks
+    * after shutdown has started result in IllegalStateExceptions.</p>
+    *
+    * <p>It is imperative that you code shutdown hooks defensively, as you
+    * do not want to deadlock, and have no idea what other hooks will be
+    * running concurrently. It is also a good idea to finish quickly, as the
+    * virtual machine really wants to shut down!</p>
+    *
+    * <p>There are no guarantees that such hooks will run, as there are ways
+    * to forcibly kill a process. But in such a drastic case, shutdown hooks
+    * would do little for you in the first place.</p>
+    *
+    * @param hook an initialized, unstarted Thread
+    * @throws IllegalArgumentException if the hook is already registered or run
+    * @throws IllegalStateException if the virtual machine is already in
+    *         the shutdown sequence
+    * @throws SecurityException if permission is denied
+    * @since 1.3
+    * @see #removeShutdownHook(Thread)
+    * @see #exit(int)
+    * @see #halt(int)
+    */
+   public void addShutdownHook(Thread hook)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe!
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("shutdownHooks"));
+     if (hook.isAlive() || hook.getThreadGroup() == null)
+       throw new IllegalArgumentException("The hook thread " + hook + " must not have been already run or started");
+     synchronized (libpath)
+       {
+         if (exitSequence != null)
+           throw new IllegalStateException("The Virtual Machine is exiting. It is not possible anymore to add any hooks");
+         if (shutdownHooks == null)
+           {
+             VMRuntime.enableShutdownHooks();
+             shutdownHooks = new HashSet(); // Lazy initialization.
+           }
+         if (! shutdownHooks.add(hook))
+           throw new IllegalArgumentException(hook.toString() + " had already been inserted");
+       }
+   }
+ 
+   /**
+    * De-register a shutdown hook. As when you registered it, there is a
+    * security check to remove hooks,
+    * <code>RuntimePermission("shutdownHooks")</code>.
+    *
+    * @param hook the hook to remove
+    * @return true if the hook was successfully removed, false if it was not
+    *         registered in the first place
+    * @throws IllegalStateException if the virtual machine is already in
+    *         the shutdown sequence
+    * @throws SecurityException if permission is denied
+    * @since 1.3
+    * @see #addShutdownHook(Thread)
+    * @see #exit(int)
+    * @see #halt(int)
+    */
+   public boolean removeShutdownHook(Thread hook)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe!
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("shutdownHooks"));
+     synchronized (libpath)
+       {
+         if (exitSequence != null)
+           throw new IllegalStateException();
+         if (shutdownHooks != null)
+           return shutdownHooks.remove(hook);
+       }
+     return false;
+   }
+ 
+   /**
+    * Forcibly terminate the virtual machine. This call never returns. It is
+    * much more severe than <code>exit</code>, as it bypasses all shutdown
+    * hooks and initializers. Use caution in calling this! Of course, there is
+    * a security check, <code>checkExit(status)</code>.
+    *
+    * @param status the status to exit with
+    * @throws SecurityException if permission is denied
+    * @since 1.3
+    * @see #exit(int)
+    * @see #addShutdownHook(Thread)
+    */
+   public void halt(int status)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe!
+     if (sm != null)
+       sm.checkExit(status);
+     VMRuntime.exit(status);
+   }
+ 
+   /**
+    * Tell the VM to run the finalize() method on every single Object before
+    * it exits.  Note that the JVM may still exit abnormally and not perform
+    * this, so you still don't have a guarantee. And besides that, this is
+    * inherently unsafe in multi-threaded code, as it may result in deadlock
+    * as multiple threads compete to manipulate objects. This value defaults to
+    * <code>false</code>. There is a security check, <code>checkExit(0)</code>.
+    *
+    * @param finalizeOnExit whether to finalize all Objects on exit
+    * @throws SecurityException if permission is denied
+    * @see #exit(int)
+    * @see #gc()
+    * @since 1.1
+    * @deprecated never rely on finalizers to do a clean, thread-safe,
+    *             mop-up from your code
+    */
+   public static void runFinalizersOnExit(boolean finalizeOnExit)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe!
+     if (sm != null)
+       sm.checkExit(0);
+     VMRuntime.runFinalizersOnExit(finalizeOnExit);
+   }
+ 
+   /**
+    * Create a new subprocess with the specified command line. Calls
+    * <code>exec(cmdline, null, null)</code>. A security check is performed,
+    * <code>checkExec</code>.
+    *
+    * @param cmdline the command to call
+    * @return the Process object
+    * @throws SecurityException if permission is denied
+    * @throws IOException if an I/O error occurs
+    * @throws NullPointerException if cmdline is null
+    * @throws IndexOutOfBoundsException if cmdline is ""
+    */
+   public Process exec(String cmdline) throws IOException
+   {
+     return exec(cmdline, null, null);
+   }
+ 
+   /**
+    * Create a new subprocess with the specified command line and environment.
+    * If the environment is null, the process inherits the environment of
+    * this process. Calls <code>exec(cmdline, env, null)</code>. A security
+    * check is performed, <code>checkExec</code>.
+    *
+    * @param cmdline the command to call
+    * @param env the environment to use, in the format name=value
+    * @return the Process object
+    * @throws SecurityException if permission is denied
+    * @throws IOException if an I/O error occurs
+    * @throws NullPointerException if cmdline is null, or env has null entries
+    * @throws IndexOutOfBoundsException if cmdline is ""
+    */
+   public Process exec(String cmdline, String[] env) throws IOException
+   {
+     return exec(cmdline, env, null);
+   }
+ 
+   /**
+    * Create a new subprocess with the specified command line, environment, and
+    * working directory. If the environment is null, the process inherits the
+    * environment of this process. If the directory is null, the process uses
+    * the current working directory. This splits cmdline into an array, using
+    * the default StringTokenizer, then calls
+    * <code>exec(cmdArray, env, dir)</code>. A security check is performed,
+    * <code>checkExec</code>.
+    *
+    * @param cmdline the command to call
+    * @param env the environment to use, in the format name=value
+    * @param dir the working directory to use
+    * @return the Process object
+    * @throws SecurityException if permission is denied
+    * @throws IOException if an I/O error occurs
+    * @throws NullPointerException if cmdline is null, or env has null entries
+    * @throws IndexOutOfBoundsException if cmdline is ""
+    * @since 1.3
+    */
+   public Process exec(String cmdline, String[] env, File dir)
+     throws IOException
+   {
+     StringTokenizer t = new StringTokenizer(cmdline);
+     String[] cmd = new String[t.countTokens()];
+     for (int i = 0; i < cmd.length; i++)
+       cmd[i] = t.nextToken();
+     return exec(cmd, env, dir);
+   }
+ 
+   /**
+    * Create a new subprocess with the specified command line, already
+    * tokenized. Calls <code>exec(cmd, null, null)</code>. A security check
+    * is performed, <code>checkExec</code>.
+    *
+    * @param cmd the command to call
+    * @return the Process object
+    * @throws SecurityException if permission is denied
+    * @throws IOException if an I/O error occurs
+    * @throws NullPointerException if cmd is null, or has null entries
+    * @throws IndexOutOfBoundsException if cmd is length 0
+    */
+   public Process exec(String[] cmd) throws IOException
+   {
+     return exec(cmd, null, null);
+   }
+ 
+   /**
+    * Create a new subprocess with the specified command line, already
+    * tokenized, and specified environment. If the environment is null, the
+    * process inherits the environment of this process. Calls
+    * <code>exec(cmd, env, null)</code>. A security check is performed,
+    * <code>checkExec</code>.
+    *
+    * @param cmd the command to call
+    * @param env the environment to use, in the format name=value
+    * @return the Process object
+    * @throws SecurityException if permission is denied
+    * @throws IOException if an I/O error occurs
+    * @throws NullPointerException if cmd is null, or cmd or env has null
+    *         entries
+    * @throws IndexOutOfBoundsException if cmd is length 0
+    */
+   public Process exec(String[] cmd, String[] env) throws IOException
+   {
+     return exec(cmd, env, null);
+   }
+ 
+   /**
+    * Create a new subprocess with the specified command line, already
+    * tokenized, and the specified environment and working directory. If the
+    * environment is null, the process inherits the environment of this
+    * process. If the directory is null, the process uses the current working
+    * directory. A security check is performed, <code>checkExec</code>.
+    *
+    * @param cmd the command to call
+    * @param env the environment to use, in the format name=value
+    * @param dir the working directory to use
+    * @return the Process object
+    * @throws SecurityException if permission is denied
+    * @throws IOException if an I/O error occurs
+    * @throws NullPointerException if cmd is null, or cmd or env has null
+    *         entries
+    * @throws IndexOutOfBoundsException if cmd is length 0
+    * @since 1.3
+    */
+   public Process exec(String[] cmd, String[] env, File dir)
+     throws IOException
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe!
+     if (sm != null)
+       sm.checkExec(cmd[0]);
+     return VMRuntime.exec(cmd, env, dir);
+   }
+ 
+   /**
+    * Returns the number of available processors currently available to the
+    * virtual machine. This number may change over time; so a multi-processor
+    * program want to poll this to determine maximal resource usage.
+    *
+    * @return the number of processors available, at least 1
+    */
+   public int availableProcessors()
+   {
+     return VMRuntime.availableProcessors();
+   }
+ 
+   /**
+    * Find out how much memory is still free for allocating Objects on the heap.
+    *
+    * @return the number of bytes of free memory for more Objects
+    */
+   public long freeMemory()
+   {
+     return VMRuntime.freeMemory();
+   }
+ 
+   /**
+    * Find out how much memory total is available on the heap for allocating
+    * Objects.
+    *
+    * @return the total number of bytes of memory for Objects
+    */
+   public long totalMemory()
+   {
+     return VMRuntime.totalMemory();
+   }
+ 
+   /**
+    * Returns the maximum amount of memory the virtual machine can attempt to
+    * use. This may be <code>Long.MAX_VALUE</code> if there is no inherent
+    * limit (or if you really do have a 8 exabyte memory!).
+    *
+    * @return the maximum number of bytes the virtual machine will attempt
+    *         to allocate
+    */
+   public long maxMemory()
+   {
+     return VMRuntime.maxMemory();
+   }
+ 
+   /**
+    * Run the garbage collector. This method is more of a suggestion than
+    * anything. All this method guarantees is that the garbage collector will
+    * have "done its best" by the time it returns. Notice that garbage
+    * collection takes place even without calling this method.
+    */
+   public void gc()
+   {
+     VMRuntime.gc();
+   }
+ 
+   /**
+    * Run finalization on all Objects that are waiting to be finalized. Again,
+    * a suggestion, though a stronger one than {@link #gc()}. This calls the
+    * <code>finalize</code> method of all objects waiting to be collected.
+    *
+    * @see #finalize()
+    */
+   public void runFinalization()
+   {
+     VMRuntime.runFinalization();
+   }
+ 
+   /**
+    * Tell the VM to trace every bytecode instruction that executes (print out
+    * a trace of it).  No guarantees are made as to where it will be printed,
+    * and the VM is allowed to ignore this request.
+    *
+    * @param on whether to turn instruction tracing on
+    */
+   public void traceInstructions(boolean on)
+   {
+     VMRuntime.traceInstructions(on);
+   }
+ 
+   /**
+    * Tell the VM to trace every method call that executes (print out a trace
+    * of it).  No guarantees are made as to where it will be printed, and the
+    * VM is allowed to ignore this request.
+    *
+    * @param on whether to turn method tracing on
+    */
+   public void traceMethodCalls(boolean on)
+   {
+     VMRuntime.traceMethodCalls(on);
+   }
+ 
+   /**
+    * Load a native library using the system-dependent filename. This is similar
+    * to loadLibrary, except the only name mangling done is inserting "_g"
+    * before the final ".so" if the VM was invoked by the name "java_g". There
+    * may be a security check, of <code>checkLink</code>.
+    *
+    * <p>
+    * The library is loaded using the class loader associated with the
+    * class associated with the invoking method.
+    *
+    * @param filename the file to load
+    * @throws SecurityException if permission is denied
+    * @throws UnsatisfiedLinkError if the library is not found
+    */
+   public void load(String filename)
+   {
+     load(filename, VMStackWalker.getCallingClassLoader());
+   }
+ 
+   /**
+    * Same as <code>load(String)</code> but using the given loader.
+    *
+    * @param filename the file to load
+    * @param loader class loader, or <code>null</code> for the boot loader
+    * @throws SecurityException if permission is denied
+    * @throws UnsatisfiedLinkError if the library is not found
+    */
+   void load(String filename, ClassLoader loader)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe!
+     if (sm != null)
+       sm.checkLink(filename);
+     if (loadLib(filename, loader) == 0)
+       throw new UnsatisfiedLinkError("Could not load library " + filename);
+   }
+ 
+   /**
+    * Do a security check on the filename and then load the native library.
+    *
+    * @param filename the file to load
+    * @param loader class loader, or <code>null</code> for the boot loader
+    * @return 0 on failure, nonzero on success
+    * @throws SecurityException if file read permission is denied
+    */
+   private static int loadLib(String filename, ClassLoader loader)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe!
+     if (sm != null)
+       sm.checkRead(filename);
+     return VMRuntime.nativeLoad(filename, loader);
+   }
+ 
+   /**
+    * Load a native library using a system-independent "short name" for the
+    * library.  It will be transformed to a correct filename in a
+    * system-dependent manner (for example, in Windows, "mylib" will be turned
+    * into "mylib.dll").  This is done as follows: if the context that called
+    * load has a ClassLoader cl, then <code>cl.findLibrary(libpath)</code> is
+    * used to convert the name. If that result was null, or there was no class
+    * loader, this searches each directory of the system property
+    * <code>java.library.path</code> for a file named
+    * <code>System.mapLibraryName(libname)</code>. There may be a security
+    * check, of <code>checkLink</code>.
+    *
+    * <p>Note: Besides <code>java.library.path</code> a VM may chose to search
+    * for native libraries in a path that is specified by the
+    * <code>gnu.classpath.boot.library.path</code> system property. However
+    * this is for internal usage or development of GNU Classpath only.
+    * <b>A Java application must not load a non-system library by changing
+    * this property otherwise it will break compatibility.</b></p>
+    *
+    * <p>
+    * The library is loaded using the class loader associated with the
+    * class associated with the invoking method.
+    *
+    * @param libname the library to load
+    *
+    * @throws SecurityException if permission is denied
+    * @throws UnsatisfiedLinkError if the library is not found
+    *
+    * @see System#mapLibraryName(String)
+    * @see ClassLoader#findLibrary(String)
+    */
+   public void loadLibrary(String libname)
+   {
+     loadLibrary(libname, VMStackWalker.getCallingClassLoader());
+   }
+ 
+   /**
+    * Same as <code>loadLibrary(String)</code> but using the given loader.
+    *
+    * @param libname the library to load
+    * @param loader class loader, or <code>null</code> for the boot loader
+    * @throws SecurityException if permission is denied
+    * @throws UnsatisfiedLinkError if the library is not found
+    */
+   void loadLibrary(String libname, ClassLoader loader)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe!
+     if (sm != null)
+       sm.checkLink(libname);
+     String filename;
+     if (loader != null && (filename = loader.findLibrary(libname)) != null)
+       {
+ 	if (loadLib(filename, loader) != 0)
+ 	  return;
+       }
+     else
+       {
+ 	filename = VMRuntime.mapLibraryName(libname);
+ 	for (int i = 0; i < libpath.length; i++)
+ 	  if (loadLib(libpath[i] + filename, loader) != 0)
+ 	    return;
+       }
+     throw new UnsatisfiedLinkError("Native library `" + libname
+       + "' not found (as file `" + filename + "') in gnu.classpath.boot.library.path and java.library.path");
+   }
+ 
+   /**
+    * Return a localized version of this InputStream, meaning all characters
+    * are localized before they come out the other end.
+    *
+    * @param in the stream to localize
+    * @return the localized stream
+    * @deprecated <code>InputStreamReader</code> is the preferred way to read
+    *             local encodings
+    * @XXX This implementation does not localize, yet.
+    */
+   public InputStream getLocalizedInputStream(InputStream in)
+   {
+     return in;
+   }
+ 
+   /**
+    * Return a localized version of this OutputStream, meaning all characters
+    * are localized before they are sent to the other end.
+    *
+    * @param out the stream to localize
+    * @return the localized stream
+    * @deprecated <code>OutputStreamWriter</code> is the preferred way to write
+    *             local encodings
+    * @XXX This implementation does not localize, yet.
+    */
+   public OutputStream getLocalizedOutputStream(OutputStream out)
+   {
+     return out;
+   }
+ } // class Runtime
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/RuntimeException.java gcc-4.1.0/libjava/classpath/java/lang/RuntimeException.java
*** gcc-4.0.2/libjava/classpath/java/lang/RuntimeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/RuntimeException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* RuntimeException.java -- root of all unchecked exceptions
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * All exceptions which are subclasses of <code>RuntimeException</code>
+  * can be thrown at any time during the execution of a Java virtual machine.
+  * Methods which throw these exceptions are not required to declare them
+  * in their throws clause.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @status updated to 1.4
+  */
+ public class RuntimeException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -7034897190745766939L;
+ 
+   /**
+    * Create an exception without a message. The cause remains uninitialized.
+    *
+    * @see #initCause(Throwable)
+    */
+   public RuntimeException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message. The cause remains uninitialized.
+    *
+    * @param s the message string
+    * @see #initCause(Throwable)
+    */
+   public RuntimeException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message string
+    * @param cause the cause of this exception
+    * @since 1.4
+    */
+   public RuntimeException(String s, Throwable cause)
+   {
+     super(s, cause);
+   }
+ 
+   /**
+    * Create an exception with the given cause, and a message of
+    * <code>cause == null ? null : cause.toString()</code>.
+    *
+    * @param cause the cause of this exception
+    * @since 1.4
+    */
+   public RuntimeException(Throwable cause)
+   {
+     super(cause);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/RuntimePermission.java gcc-4.1.0/libjava/classpath/java/lang/RuntimePermission.java
*** gcc-4.0.2/libjava/classpath/java/lang/RuntimePermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/RuntimePermission.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,209 ----
+ /* RuntimePermission.java -- permission for a secure runtime action
+    Copyright (C) 1998, 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import java.security.BasicPermission;
+ import java.security.Permission;
+ 
+ /**
+  * A <code>RuntimePermission</code> contains a permission name, but no
+  * actions list.  This means you either have the permission or you don't.
+  *
+  * Permission names have the follow the hierarchial property naming
+  * convention.  In addition, an asterisk may appear at the end of a
+  * name if following a period or by itself.
+  *
+  * <table border=1>
+  * <tr><th>Valid names</th><th>Invalid names</th></tr>
+  * <tr><td>"accessClassInPackage.*","*"</td>
+  * <td>"**", "*x", "*.a"</td></tr>
+  * </table>
+  * <br>
+  *
+  * The following table provides a list of all the possible RuntimePermission
+  * permission names with a description of what that permission allows.<br>
+  * <table border=1>
+  * <tr><th>Permission Name</th><th>Permission Allows</th><th>Risks</th</tr>
+  * <tr>
+  *   <td><code>createClassLoader</code></td>
+  *   <td>creation of a class loader</td>
+  *   <td>a class loader can load rogue classes which bypass all security
+  *       permissions</td></tr>
+  * <tr>
+  *   <td><code>getClassLoader</code></td>
+  *   <td>retrieval of the class loader for the calling class</td>
+  *   <td>rogue code could load classes not otherwise available</td></tr>
+  * <tr>
+  *   <td><code>setContextClassLoader</code></td>
+  *   <td>allows the setting of the context class loader used by a thread</td>
+  *   <td>rogue code could change the context class loader needed by system
+  *       threads</td></tr>
+  * <tr>
+  *   <td><code>setSecurityManager</code></td>
+  *   <td>allows the application to replace the security manager</td>
+  *   <td>the new manager may be less restrictive, so that rogue code can
+  *       bypass existing security checks</td></tr>
+  * <tr>
+  *   <td><code>createSecurityManager</code></td>
+  *   <td>allows the application to create a new security manager</td>
+  *   <td>rogue code can use the new security manager to discover information
+  *       about the execution stack</td></tr>
+  * <tr>
+  *   <td><code>exitVM</code></td>
+  *   <td>allows the application to halt the virtual machine</td>
+  *   <td>rogue code can mount a denial-of-service attack by killing the
+  *       virtual machine</td></tr>
+  * <tr>
+  *   <td><code>shutdownHooks</code></td>
+  *   <td>allows registration and modification of shutdown hooks</td>
+  *   <td>rogue code can add a hook that interferes with clean
+  *       virtual machine shutdown</td></tr>
+  * <tr>
+  *   <td><code>setFactory</code></td>
+  *   <td>allows the application to set the socket factory for socket,
+  *       server socket, stream handler, or RMI socket factory.</td>
+  *   <td>rogue code can create a rogue network object which mangles or
+  *       intercepts data</td></tr>
+  * <tr>
+  *   <td><code>setIO</code></td>
+  *   <td>allows the application to set System.out, System.in, and
+  *       System.err</td>
+  *   <td>rogue code could sniff user input and intercept or mangle
+  *       output</td></tr>
+  * <tr>
+  *   <td><code>modifyThread</code></td>
+  *   <td>allows the application to modify any thread in the virtual machine
+  *       using any of the methods <code>stop</code>, <code>resume</code>,
+  *       <code>suspend</code>, <code>setPriority</code>, and
+  *       <code>setName</code> of classs <code>Thread</code></td>
+  *   <td>rogue code could adversely modify system or user threads</td></tr>
+  * <tr>
+  *   <td><code>stopThread</code></td>
+  *   <td>allows the application to <code>stop</code> any thread it has
+  *       access to in the system</td>
+  *   <td>rogue code can stop arbitrary threads</td></tr>
+  * <tr>
+  *   <td><code>modifyThreadGroup</code></td>
+  *   <td>allows the application to modify thread groups using any of the
+  *       methods <code>destroy</code>, <code>resume</code>,
+  *       <code>setDaemon</code>, <code>setMaxPriority</code>,
+  *       <code>stop</code>, and <code>suspend</code> of the class
+  *       <code>ThreadGroup</code></td>
+  *   <td>rogue code can mount a denial-of-service attack by changing run
+  *       priorities</td></tr>
+  * <tr>
+  *   <td><code>getProtectionDomain</code></td>
+  *   <td>retrieve a class's ProtectionDomain</td>
+  *   <td>rogue code can gain information about the security policy, to
+  *       prepare a better attack</td></tr>
+  * <tr>
+  *   <td><code>readFileDescriptor</code></td>
+  *   <td>read a file descriptor</td>
+  *   <td>rogue code can read sensitive information</td></tr>
+  * <tr>
+  *   <td><code>writeFileDescriptor</code></td>
+  *   <td>write a file descriptor</td>
+  *   <td>rogue code can write files, including viruses, and can modify the
+  *       virtual machine binary; if not just fill up the disk</td></tr>
+  * <tr>
+  *   <td><code>loadLibrary.</code><em>library name</em></td>
+  *   <td>dynamic linking of the named library</td>
+  *   <td>native code can bypass many security checks of pure Java</td></tr>
+  * <tr>
+  *   <td><code>accessClassInPackage.</code><em>package name</em></td>
+  *   <td>access to a package via a ClassLoader</td>
+  *   <td>rogue code can access classes not normally available</td></tr>
+  * <tr>
+  *   <td><code>defineClassInPackage.</code><em>package name</em></td>
+  *   <td>define a class inside a given package</td>
+  *   <td>rogue code can install rogue classes, including in trusted packages
+  *       like java.security or java.lang</td></tr>
+  * <tr>
+  *   <td><code>accessDeclaredMembers</code></td>
+  *   <td>access declared class members via reflection</td>
+  *   <td>rogue code can discover information, invoke methods, or modify fields
+  *       that are not otherwise available</td></tr>
+  * <tr>
+  *   <td><code>queuePrintJob</code></td>
+  *   <td>initiate a print job</td>
+  *   <td>rogue code could make a hard copy of sensitive information, or
+  *       simply waste paper</td></tr>
+  * </table>
+  *
+  * @author Brian Jones
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see BasicPermission
+  * @see Permission
+  * @see SecurityManager
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public final class RuntimePermission extends BasicPermission
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 7399184964622342223L;
+ 
+   /**
+    * Create a new permission with the specified name.
+    *
+    * @param permissionName the name of the granted permission
+    * @throws NullPointerException if name is null
+    * @throws IllegalArgumentException thrown if name is empty or invalid
+    */
+   public RuntimePermission(String permissionName)
+     {
+       super(permissionName);
+     }
+ 
+   /**
+    * Create a new permission with the specified name. The actions argument
+    * is ignored, as runtime permissions have no actions.
+    *
+    * @param permissionName the name of the granted permission
+    * @param actions ignored
+    * @throws NullPointerException if name is null
+    * @throws IllegalArgumentException thrown if name is empty or invalid
+    */
+   public RuntimePermission(String permissionName, String actions)
+   {
+     super(permissionName);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/SecurityException.java gcc-4.1.0/libjava/classpath/java/lang/SecurityException.java
*** gcc-4.0.2/libjava/classpath/java/lang/SecurityException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/SecurityException.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,128 ----
+ /* SecurityException.java -- thrown to indicate a security violation
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * The security manager will throw this exception to indicate a security
+  * violation.  This can occur any time an operation is attempted which is
+  * deemed unsafe by the current security policies.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @see SecurityManager
+  * @status updated to 1.5
+  */
+ public class SecurityException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 6878364983674394167L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public SecurityException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public SecurityException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * <p>
+    * Constructs a <code>SecurityException</code> using
+    * the specified error message, which should give further details
+    * as to the reason for this exception.  The specified cause
+    * <code>Throwable</code> may be used to provide additional history,
+    * with regards to the root of the problem.  It is perfectly valid
+    * for this to be null, if the cause of the problem is unknown.
+    * </p>
+    * <p>
+    * <strong>Note</strong>: the detail message from the cause is not
+    * automatically incorporated into the resulting detail message of
+    * this exception.
+    * </p>
+    * 
+    * @param message the detail message, which should give the reason for
+    *                this exception being thrown.
+    * @param cause the cause of this exception, or null if the cause
+    *              is unknown.
+    * @since 1.5
+    */
+   public SecurityException(String message, Throwable cause)
+   {
+     super(message, cause);
+   }
+ 
+   /**
+    * <p>
+    * Constructs a <code>SecurityException</code> using
+    * the specified cause <code>Throwable</code>, which may be used
+    * to provide additional history, with regards to the root of the
+    * problem.  It is perfectly valid for this to be null, if the
+    * cause of the problem is unknown.
+    * </p>
+    * <p>
+    * The detail message is automatically constructed from the detail
+    * message of the supplied causal exception.  If the cause is null,
+    * then the detail message will also be null.  Otherwise, the detail
+    * message of this exception will be that of the causal exception.
+    * This makes this constructor very useful for simply wrapping another
+    * exception.
+    * </p>
+    * 
+    * @param cause the cause of this exception, or null if the cause
+    *              is unknown.
+    * @since 1.5
+    */
+   public SecurityException(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/SecurityManager.java gcc-4.1.0/libjava/classpath/java/lang/SecurityManager.java
*** gcc-4.0.2/libjava/classpath/java/lang/SecurityManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/SecurityManager.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1078 ----
+ /* SecurityManager.java -- security checks for privileged actions
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import gnu.classpath.VMStackWalker;
+ 
+ import java.awt.AWTPermission;
+ import java.awt.Frame;
+ import java.awt.Toolkit;
+ import java.awt.Window;
+ import java.io.File;
+ import java.io.FileDescriptor;
+ import java.io.FileInputStream;
+ import java.io.FileOutputStream;
+ import java.io.FilePermission;
+ import java.io.RandomAccessFile;
+ import java.lang.reflect.Member;
+ import java.net.InetAddress;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ import java.net.SocketImplFactory;
+ import java.net.SocketPermission;
+ import java.net.URL;
+ import java.net.URLStreamHandlerFactory;
+ import java.security.AccessControlContext;
+ import java.security.AccessControlException;
+ import java.security.AccessController;
+ import java.security.AllPermission;
+ import java.security.BasicPermission;
+ import java.security.Permission;
+ import java.security.Policy;
+ import java.security.PrivilegedAction;
+ import java.security.ProtectionDomain;
+ import java.security.Security;
+ import java.security.SecurityPermission;
+ import java.util.Properties;
+ import java.util.PropertyPermission;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * SecurityManager is a class you can extend to create your own Java
+  * security policy.  By default, there is no SecurityManager installed in
+  * 1.1, which means that all things are permitted to all people. The security
+  * manager, if set, is consulted before doing anything with potentially
+  * dangerous results, and throws a <code>SecurityException</code> if the
+  * action is forbidden.
+  *
+  * <p>A typical check is as follows, just before the dangerous operation:<br>
+  * <pre>
+  * SecurityManager sm = System.getSecurityManager();
+  * if (sm != null)
+  *   sm.checkABC(<em>argument</em>, ...);
+  * </pre>
+  * Note that this is thread-safe, by caching the security manager in a local
+  * variable rather than risking a NullPointerException if the mangager is
+  * changed between the check for null and before the permission check.
+  *
+  * <p>The special method <code>checkPermission</code> is a catchall, and
+  * the default implementation calls
+  * <code>AccessController.checkPermission</code>. In fact, all the other
+  * methods default to calling checkPermission.
+  *
+  * <p>Sometimes, the security check needs to happen from a different context,
+  * such as when called from a worker thread. In such cases, use
+  * <code>getSecurityContext</code> to take a snapshot that can be passed
+  * to the worker thread:<br>
+  * <pre>
+  * Object context = null;
+  * SecurityManager sm = System.getSecurityManager();
+  * if (sm != null)
+  *   context = sm.getSecurityContext(); // defaults to an AccessControlContext
+  * // now, in worker thread
+  * if (sm != null)
+  *   sm.checkPermission(permission, context);
+  * </pre>
+  *
+  * <p>Permissions fall into these categories: File, Socket, Net, Security,
+  * Runtime, Property, AWT, Reflect, and Serializable. Each of these
+  * permissions have a property naming convention, that follows a hierarchical
+  * naming convention, to make it easy to grant or deny several permissions
+  * at once. Some permissions also take a list of permitted actions, such
+  * as "read" or "write", to fine-tune control even more. The permission
+  * <code>java.security.AllPermission</code> grants all permissions.
+  *
+  * <p>The default methods in this class deny all things to all people. You
+  * must explicitly grant permission for anything you want to be legal when
+  * subclassing this class.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see ClassLoader
+  * @see SecurityException
+  * @see #checkTopLevelWindow(Object)
+  * @see System#getSecurityManager()
+  * @see System#setSecurityManager(SecurityManager)
+  * @see AccessController
+  * @see AccessControlContext
+  * @see AccessControlException
+  * @see Permission
+  * @see BasicPermission
+  * @see java.io.FilePermission
+  * @see java.net.SocketPermission
+  * @see java.util.PropertyPermission
+  * @see RuntimePermission
+  * @see java.awt.AWTPermission
+  * @see Policy
+  * @see SecurityPermission
+  * @see ProtectionDomain
+  * @since 1.0
+  * @status still missing 1.4 functionality
+  */
+ public class SecurityManager
+ {
+   /**
+    * The current security manager. This is located here instead of in
+    * System, to avoid security problems, as well as bootstrap issues.
+    * Make sure to access it in a thread-safe manner; it is package visible
+    * to avoid overhead in java.lang.
+    */
+   static volatile SecurityManager current;
+ 
+   /**
+    * Tells whether or not the SecurityManager is currently performing a
+    * security check.
+    * @deprecated Use {@link #checkPermission(Permission)} instead.
+    */
+   protected boolean inCheck;
+ 
+   /**
+    * Construct a new security manager. There may be a security check, of
+    * <code>RuntimePermission("createSecurityManager")</code>.
+    *
+    * @throws SecurityException if permission is denied
+    */
+   public SecurityManager()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("createSecurityManager"));
+   }
+ 
+   /**
+    * Tells whether or not the SecurityManager is currently performing a
+    * security check.
+    *
+    * @return true if the SecurityManager is in a security check
+    * @see #inCheck
+    * @deprecated use {@link #checkPermission(Permission)} instead
+    */
+   public boolean getInCheck()
+   {
+     return inCheck;
+   }
+ 
+   /**
+    * Get a list of all the classes currently executing methods on the Java
+    * stack.  getClassContext()[0] is the currently executing method (ie. the
+    * class that CALLED getClassContext, not SecurityManager).
+    *
+    * @return an array of classes on the Java execution stack
+    */
+   protected Class[] getClassContext()
+   {
+     Class[] stack1 = VMStackWalker.getClassContext();
+     Class[] stack2 = new Class[stack1.length - 1];
+     System.arraycopy(stack1, 1, stack2, 0, stack1.length - 1);
+     return stack2;
+   }
+ 
+   /**
+    * Find the ClassLoader of the first non-system class on the execution
+    * stack. A non-system class is one whose ClassLoader is not equal to
+    * {@link ClassLoader#getSystemClassLoader()} or its ancestors. This
+    * will return null in three cases:
+    *
+    * <ul>
+    * <li>All methods on the stack are from system classes</li>
+    * <li>All methods on the stack up to the first "privileged" caller, as
+    *  created by {@link AccessController#doPrivileged(PrivilegedAction)},
+    *  are from system classes</li>
+    * <li>A check of <code>java.security.AllPermission</code> succeeds.</li>
+    * </ul>
+    * 
+    * @return the most recent non-system ClassLoader on the execution stack
+    * @deprecated use {@link #checkPermission(Permission)} instead
+    */
+   protected ClassLoader currentClassLoader()
+   {
+     Class cl = currentLoadedClass();
+     return cl != null ? cl.getClassLoader() : null;
+   }
+ 
+   /**
+    * Find the first non-system class on the execution stack. A non-system
+    * class is one whose ClassLoader is not equal to
+    * {@link ClassLoader#getSystemClassLoader()} or its ancestors. This
+    * will return null in three cases:
+    *
+    * <ul>
+    * <li>All methods on the stack are from system classes</li>
+    * <li>All methods on the stack up to the first "privileged" caller, as
+    *  created by {@link AccessController#doPrivileged(PrivilegedAction)},
+    *  are from system classes</li>
+    * <li>A check of <code>java.security.AllPermission</code> succeeds.</li>
+    * </ul>
+    * 
+    * @return the most recent non-system Class on the execution stack
+    * @deprecated use {@link #checkPermission(Permission)} instead
+    */
+   protected Class currentLoadedClass()
+   {
+     int i = classLoaderDepth();
+     return i >= 0 ? getClassContext()[i] : null;
+   }
+ 
+   /**
+    * Get the depth of a particular class on the execution stack.
+    *
+    * @param className the fully-qualified name to search for
+    * @return the index of the class on the stack, or -1
+    * @deprecated use {@link #checkPermission(Permission)} instead
+    */
+   protected int classDepth(String className)
+   {
+     Class[] c = getClassContext();
+     for (int i = 0; i < c.length; i++)
+       if (className.equals(c[i].getName()))
+         return i;
+     return -1;
+   }
+ 
+   /**
+    * Get the depth on the execution stack of the most recent non-system class.
+    * A non-system class is one whose ClassLoader is not equal to
+    * {@link ClassLoader#getSystemClassLoader()} or its ancestors. This
+    * will return -1 in three cases:
+    *
+    * <ul>
+    * <li>All methods on the stack are from system classes</li>
+    * <li>All methods on the stack up to the first "privileged" caller, as
+    *  created by {@link AccessController#doPrivileged(PrivilegedAction)},
+    *  are from system classes</li>
+    * <li>A check of <code>java.security.AllPermission</code> succeeds.</li>
+    * </ul>
+    * 
+    * @return the index of the most recent non-system Class on the stack
+    * @deprecated use {@link #checkPermission(Permission)} instead
+    */
+   protected int classLoaderDepth()
+   {
+     try
+       {
+         checkPermission(new AllPermission());
+       }
+     catch (SecurityException e)
+       {
+         Class[] c = getClassContext();
+         for (int i = 0; i < c.length; i++)
+           if (c[i].getClassLoader() != null)
+             // XXX Check if c[i] is AccessController, or a system class.
+             return i;
+       }
+     return -1;
+   }
+ 
+   /**
+    * Tell whether the specified class is on the execution stack.
+    *
+    * @param className the fully-qualified name of the class to find
+    * @return whether the specified class is on the execution stack
+    * @deprecated use {@link #checkPermission(Permission)} instead
+    */
+   protected boolean inClass(String className)
+   {
+     return classDepth(className) != -1;
+   }
+ 
+   /**
+    * Tell whether there is a class loaded with an explicit ClassLoader on
+    * the stack.
+    *
+    * @return whether a class with an explicit ClassLoader is on the stack
+    * @deprecated use {@link #checkPermission(Permission)} instead
+    */
+   protected boolean inClassLoader()
+   {
+     return classLoaderDepth() != -1;
+   }
+ 
+   /**
+    * Get an implementation-dependent Object that contains enough information
+    * about the current environment to be able to perform standard security
+    * checks later.  This is used by trusted methods that need to verify that
+    * their callers have sufficient access to perform certain operations.
+    *
+    * <p>Currently the only methods that use this are checkRead() and
+    * checkConnect(). The default implementation returns an
+    * <code>AccessControlContext</code>.
+    *
+    * @return a security context
+    * @see #checkConnect(String, int, Object)
+    * @see #checkRead(String, Object)
+    * @see AccessControlContext
+    * @see AccessController#getContext()
+    */
+   public Object getSecurityContext()
+   {
+     return AccessController.getContext();
+   }
+ 
+   /**
+    * Check if the current thread is allowed to perform an operation that
+    * requires the specified <code>Permission</code>. This defaults to
+    * <code>AccessController.checkPermission</code>.
+    *
+    * @param perm the <code>Permission</code> required
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if perm is null
+    * @since 1.2
+    */
+   public void checkPermission(Permission perm)
+   {
+     AccessController.checkPermission(perm);
+   }
+ 
+   /**
+    * Check if the current thread is allowed to perform an operation that
+    * requires the specified <code>Permission</code>. This is done in a
+    * context previously returned by <code>getSecurityContext()</code>. The
+    * default implementation expects context to be an AccessControlContext,
+    * and it calls <code>AccessControlContext.checkPermission(perm)</code>.
+    *
+    * @param perm the <code>Permission</code> required
+    * @param context a security context
+    * @throws SecurityException if permission is denied, or if context is
+    *         not an AccessControlContext
+    * @throws NullPointerException if perm is null
+    * @see #getSecurityContext()
+    * @see AccessControlContext#checkPermission(Permission)
+    * @since 1.2
+    */
+   public void checkPermission(Permission perm, Object context)
+   {
+     if (! (context instanceof AccessControlContext))
+       throw new SecurityException("Missing context");
+     ((AccessControlContext) context).checkPermission(perm);
+   }
+ 
+   /**
+    * Check if the current thread is allowed to create a ClassLoader. This
+    * method is called from ClassLoader.ClassLoader(), and checks
+    * <code>RuntimePermission("createClassLoader")</code>. If you override
+    * this, you should call <code>super.checkCreateClassLoader()</code> rather
+    * than throwing an exception.
+    *
+    * @throws SecurityException if permission is denied
+    * @see ClassLoader#ClassLoader()
+    */
+   public void checkCreateClassLoader()
+   {
+     checkPermission(new RuntimePermission("createClassLoader"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to modify another Thread. This is
+    * called by Thread.stop(), suspend(), resume(), interrupt(), destroy(),
+    * setPriority(), setName(), and setDaemon(). The default implementation
+    * checks <code>RuntimePermission("modifyThread")</code> on system threads
+    * (ie. threads in ThreadGroup with a null parent), and returns silently on
+    * other threads.
+    *
+    * <p>If you override this, you must do two things. First, call
+    * <code>super.checkAccess(t)</code>, to make sure you are not relaxing
+    * requirements. Second, if the calling thread has
+    * <code>RuntimePermission("modifyThread")</code>, return silently, so that
+    * core classes (the Classpath library!) can modify any thread.
+    *
+    * @param thread the other Thread to check
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if thread is null
+    * @see Thread#stop()
+    * @see Thread#suspend()
+    * @see Thread#resume()
+    * @see Thread#setPriority(int)
+    * @see Thread#setName(String)
+    * @see Thread#setDaemon(boolean)
+    */
+   public void checkAccess(Thread thread)
+   {
+     if (thread.getThreadGroup() != null 
+ 	&& thread.getThreadGroup().getParent() != null)
+       checkPermission(new RuntimePermission("modifyThread"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to modify a ThreadGroup. This is
+    * called by Thread.Thread() (to add a thread to the ThreadGroup),
+    * ThreadGroup.ThreadGroup() (to add this ThreadGroup to a parent),
+    * ThreadGroup.stop(), suspend(), resume(), interrupt(), destroy(),
+    * setDaemon(), and setMaxPriority(). The default implementation
+    * checks <code>RuntimePermission("modifyThread")</code> on the system group
+    * (ie. the one with a null parent), and returns silently on other groups.
+    *
+    * <p>If you override this, you must do two things. First, call
+    * <code>super.checkAccess(t)</code>, to make sure you are not relaxing
+    * requirements. Second, if the calling thread has
+    * <code>RuntimePermission("modifyThreadGroup")</code>, return silently,
+    * so that core classes (the Classpath library!) can modify any thread.
+    *
+    * @param g the ThreadGroup to check
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if g is null
+    * @see Thread#Thread()
+    * @see ThreadGroup#ThreadGroup(String)
+    * @see ThreadGroup#stop()
+    * @see ThreadGroup#suspend()
+    * @see ThreadGroup#resume()
+    * @see ThreadGroup#interrupt()
+    * @see ThreadGroup#setDaemon(boolean)
+    * @see ThreadGroup#setMaxPriority(int)
+    */
+   public void checkAccess(ThreadGroup g)
+   {
+     if (g.getParent() != null)
+       checkPermission(new RuntimePermission("modifyThreadGroup"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to exit the JVM with the given
+    * status. This method is called from Runtime.exit() and Runtime.halt().
+    * The default implementation checks
+    * <code>RuntimePermission("exitVM")</code>. If you override this, call
+    * <code>super.checkExit</code> rather than throwing an exception.
+    *
+    * @param status the status to exit with
+    * @throws SecurityException if permission is denied
+    * @see Runtime#exit(int)
+    * @see Runtime#halt(int)
+    */
+   public void checkExit(int status)
+   {
+     checkPermission(new RuntimePermission("exitVM"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to execute the given program. This
+    * method is called from Runtime.exec(). If the name is an absolute path,
+    * the default implementation checks
+    * <code>FilePermission(program, "execute")</code>, otherwise it checks
+    * <code>FilePermission("&lt;&lt;ALL FILES&gt;&gt;", "execute")</code>. If
+    * you override this, call <code>super.checkExec</code> rather than
+    * throwing an exception.
+    *
+    * @param program the name of the program to exec
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if program is null
+    * @see Runtime#exec(String[], String[], File)
+    */
+   public void checkExec(String program)
+   {
+     if (! program.equals(new File(program).getAbsolutePath()))
+       program = "<<ALL FILES>>";
+     checkPermission(new FilePermission(program, "execute"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to link in the given native
+    * library. This method is called from Runtime.load() (and hence, by
+    * loadLibrary() as well). The default implementation checks
+    * <code>RuntimePermission("loadLibrary." + filename)</code>. If you
+    * override this, call <code>super.checkLink</code> rather than throwing
+    * an exception.
+    *
+    * @param filename the full name of the library to load
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if filename is null
+    * @see Runtime#load(String)
+    */
+   public void checkLink(String filename)
+   {
+     // Use the toString() hack to do the null check.
+     checkPermission(new RuntimePermission("loadLibrary."
+                                           + filename.toString()));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to read the given file using the
+    * FileDescriptor. This method is called from
+    * FileInputStream.FileInputStream(). The default implementation checks
+    * <code>RuntimePermission("readFileDescriptor")</code>. If you override
+    * this, call <code>super.checkRead</code> rather than throwing an
+    * exception.
+    *
+    * @param desc the FileDescriptor representing the file to access
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if desc is null
+    * @see FileInputStream#FileInputStream(FileDescriptor)
+    */
+   public void checkRead(FileDescriptor desc)
+   {
+     if (desc == null)
+       throw new NullPointerException();
+     checkPermission(new RuntimePermission("readFileDescriptor"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to read the given file. This
+    * method is called from FileInputStream.FileInputStream(),
+    * RandomAccessFile.RandomAccessFile(), File.exists(), canRead(), isFile(),
+    * isDirectory(), lastModified(), length() and list(). The default
+    * implementation checks <code>FilePermission(filename, "read")</code>. If
+    * you override this, call <code>super.checkRead</code> rather than
+    * throwing an exception.
+    *
+    * @param filename the full name of the file to access
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if filename is null
+    * @see File
+    * @see FileInputStream#FileInputStream(String)
+    * @see RandomAccessFile#RandomAccessFile(String, String)
+    */
+   public void checkRead(String filename)
+   {
+     checkPermission(new FilePermission(filename, "read"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to read the given file. using the
+    * given security context. The context must be a result of a previous call
+    * to <code>getSecurityContext()</code>. The default implementation checks
+    * <code>AccessControlContext.checkPermission(new FilePermission(filename,
+    * "read"))</code>. If you override this, call <code>super.checkRead</code>
+    * rather than throwing an exception.
+    *
+    * @param filename the full name of the file to access
+    * @param context the context to determine access for
+    * @throws SecurityException if permission is denied, or if context is
+    *         not an AccessControlContext
+    * @throws NullPointerException if filename is null
+    * @see #getSecurityContext()
+    * @see AccessControlContext#checkPermission(Permission)
+    */
+   public void checkRead(String filename, Object context)
+   {
+     if (! (context instanceof AccessControlContext))
+       throw new SecurityException("Missing context");
+     AccessControlContext ac = (AccessControlContext) context;
+     ac.checkPermission(new FilePermission(filename, "read"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to write the given file using the
+    * FileDescriptor. This method is called from
+    * FileOutputStream.FileOutputStream(). The default implementation checks
+    * <code>RuntimePermission("writeFileDescriptor")</code>. If you override
+    * this, call <code>super.checkWrite</code> rather than throwing an
+    * exception.
+    *
+    * @param desc the FileDescriptor representing the file to access
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if desc is null
+    * @see FileOutputStream#FileOutputStream(FileDescriptor)
+    */
+   public void checkWrite(FileDescriptor desc)
+   {
+     if (desc == null)
+       throw new NullPointerException();
+     checkPermission(new RuntimePermission("writeFileDescriptor"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to write the given file. This
+    * method is called from FileOutputStream.FileOutputStream(),
+    * RandomAccessFile.RandomAccessFile(), File.canWrite(), mkdir(), and
+    * renameTo(). The default implementation checks
+    * <code>FilePermission(filename, "write")</code>. If you override this,
+    * call <code>super.checkWrite</code> rather than throwing an exception.
+    *
+    * @param filename the full name of the file to access
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if filename is null
+    * @see File
+    * @see File#canWrite()
+    * @see File#mkdir()
+    * @see File#renameTo(File)
+    * @see FileOutputStream#FileOutputStream(String)
+    * @see RandomAccessFile#RandomAccessFile(String, String)
+    */
+   public void checkWrite(String filename)
+   {
+     checkPermission(new FilePermission(filename, "write"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to delete the given file. This
+    * method is called from File.delete(). The default implementation checks
+    * <code>FilePermission(filename, "delete")</code>. If you override this,
+    * call <code>super.checkDelete</code> rather than throwing an exception.
+    *
+    * @param filename the full name of the file to delete
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if filename is null
+    * @see File#delete()
+    */
+   public void checkDelete(String filename)
+   {
+     checkPermission(new FilePermission(filename, "delete"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to connect to a given host on a
+    * given port. This method is called from Socket.Socket(). A port number
+    * of -1 indicates the caller is attempting to determine an IP address, so
+    * the default implementation checks
+    * <code>SocketPermission(host, "resolve")</code>. Otherwise, the default
+    * implementation checks
+    * <code>SocketPermission(host + ":" + port, "connect")</code>. If you
+    * override this, call <code>super.checkConnect</code> rather than throwing
+    * an exception.
+    *
+    * @param host the host to connect to
+    * @param port the port to connect on
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if host is null
+    * @see Socket#Socket()
+    */
+   public void checkConnect(String host, int port)
+   {
+     if (port == -1)
+       checkPermission(new SocketPermission(host, "resolve"));
+     else
+       // Use the toString() hack to do the null check.
+       checkPermission(new SocketPermission(host.toString() + ":" + port,
+                                            "connect"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to connect to a given host on a
+    * given port, using the given security context. The context must be a
+    * result of a previous call to <code>getSecurityContext</code>. A port
+    * number of -1 indicates the caller is attempting to determine an IP
+    * address, so the default implementation checks
+    * <code>AccessControlContext.checkPermission(new SocketPermission(host,
+    * "resolve"))</code>. Otherwise, the default implementation checks
+    * <code>AccessControlContext.checkPermission(new SocketPermission(host
+    * + ":" + port, "connect"))</code>. If you override this, call
+    * <code>super.checkConnect</code> rather than throwing an exception.
+    *
+    * @param host the host to connect to
+    * @param port the port to connect on
+    * @param context the context to determine access for
+    *
+    * @throws SecurityException if permission is denied, or if context is
+    *         not an AccessControlContext
+    * @throws NullPointerException if host is null
+    *
+    * @see #getSecurityContext()
+    * @see AccessControlContext#checkPermission(Permission)
+    */
+   public void checkConnect(String host, int port, Object context)
+   {
+     if (! (context instanceof AccessControlContext))
+       throw new SecurityException("Missing context");
+     AccessControlContext ac = (AccessControlContext) context;
+     if (port == -1)
+       ac.checkPermission(new SocketPermission(host, "resolve"));
+     else
+       // Use the toString() hack to do the null check.
+       ac.checkPermission(new SocketPermission(host.toString() + ":" + port,
+                                               "connect"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to listen to a specific port for
+    * data. This method is called by ServerSocket.ServerSocket(). The default
+    * implementation checks
+    * <code>SocketPermission("localhost:" + (port == 0 ? "1024-" : "" + port),
+    * "listen")</code>. If you override this, call
+    * <code>super.checkListen</code> rather than throwing an exception.
+    *
+    * @param port the port to listen on
+    * @throws SecurityException if permission is denied
+    * @see ServerSocket#ServerSocket(int)
+    */
+   public void checkListen(int port)
+   {
+     checkPermission(new SocketPermission("localhost:"
+                                          + (port == 0 ? "1024-" : "" +port),
+                                          "listen"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to accept a connection from a
+    * particular host on a particular port. This method is called by
+    * ServerSocket.implAccept(). The default implementation checks
+    * <code>SocketPermission(host + ":" + port, "accept")</code>. If you
+    * override this, call <code>super.checkAccept</code> rather than throwing
+    * an exception.
+    *
+    * @param host the host which wishes to connect
+    * @param port the port the connection will be on
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if host is null
+    * @see ServerSocket#accept()
+    */
+   public void checkAccept(String host, int port)
+   {
+     // Use the toString() hack to do the null check.
+     checkPermission(new SocketPermission(host.toString() + ":" + port,
+                                          "accept"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to read and write multicast to
+    * a particular address. The default implementation checks
+    * <code>SocketPermission(addr.getHostAddress(), "accept,connect")</code>.
+    * If you override this, call <code>super.checkMulticast</code> rather than
+    * throwing an exception.
+    *
+    * @param addr the address to multicast to
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if host is null
+    * @since 1.1
+    */
+   public void checkMulticast(InetAddress addr)
+   {
+     checkPermission(new SocketPermission(addr.getHostAddress(),
+                                          "accept,connect"));
+   }
+ 
+   /**
+    *Check if the current thread is allowed to read and write multicast to
+    * a particular address with a particular ttl (time-to-live) value. The
+    * default implementation ignores ttl, and checks
+    * <code>SocketPermission(addr.getHostAddress(), "accept,connect")</code>.
+    * If you override this, call <code>super.checkMulticast</code> rather than
+    * throwing an exception.
+    *
+    * @param addr the address to multicast to
+    * @param ttl value in use for multicast send
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if host is null
+    * @since 1.1
+    * @deprecated use {@link #checkPermission(Permission)} instead
+    */
+   public void checkMulticast(InetAddress addr, byte ttl)
+   {
+     checkPermission(new SocketPermission(addr.getHostAddress(),
+                                          "accept,connect"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to read or write all the system
+    * properties at once. This method is called by System.getProperties()
+    * and setProperties(). The default implementation checks
+    * <code>PropertyPermission("*", "read,write")</code>. If you override
+    * this, call <code>super.checkPropertiesAccess</code> rather than
+    * throwing an exception.
+    *
+    * @throws SecurityException if permission is denied
+    * @see System#getProperties()
+    * @see System#setProperties(Properties)
+    */
+   public void checkPropertiesAccess()
+   {
+     checkPermission(new PropertyPermission("*", "read,write"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to read a particular system
+    * property (writes are checked directly via checkPermission). This method
+    * is called by System.getProperty() and setProperty(). The default
+    * implementation checks <code>PropertyPermission(key, "read")</code>. If
+    * you override this, call <code>super.checkPropertyAccess</code> rather
+    * than throwing an exception.
+    *
+    * @param key the key of the property to check
+    *
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if key is null
+    * @throws IllegalArgumentException if key is ""
+    *
+    * @see System#getProperty(String)
+    */
+   public void checkPropertyAccess(String key)
+   {
+     checkPermission(new PropertyPermission(key, "read"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to create a top-level window. If
+    * it is not, the operation should still go through, but some sort of
+    * nonremovable warning should be placed on the window to show that it
+    * is untrusted. This method is called by Window.Window(). The default
+    * implementation checks
+    * <code>AWTPermission("showWindowWithoutWarningBanner")</code>, and returns
+    * true if no exception was thrown. If you override this, use
+    * <code>return super.checkTopLevelWindow</code> rather than returning
+    * false.
+    *
+    * @param window the window to create
+    * @return true if there is permission to show the window without warning
+    * @throws NullPointerException if window is null
+    * @see Window#Window(Frame)
+    */
+   public boolean checkTopLevelWindow(Object window)
+   {
+     if (window == null)
+       throw new NullPointerException();
+     try
+       {
+         checkPermission(new AWTPermission("showWindowWithoutWarningBanner"));
+         return true;
+       }
+     catch (SecurityException e)
+       {
+         return false;
+       }
+   }
+ 
+   /**
+    * Check if the current thread is allowed to create a print job. This
+    * method is called by Toolkit.getPrintJob(). The default implementation
+    * checks <code>RuntimePermission("queuePrintJob")</code>. If you override
+    * this, call <code>super.checkPrintJobAccess</code> rather than throwing
+    * an exception.
+    *
+    * @throws SecurityException if permission is denied
+    * @see Toolkit#getPrintJob(Frame, String, Properties)
+    * @since 1.1
+    */
+   public void checkPrintJobAccess()
+   {
+     checkPermission(new RuntimePermission("queuePrintJob"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to use the system clipboard. This
+    * method is called by Toolkit.getSystemClipboard(). The default
+    * implementation checks <code>AWTPermission("accessClipboard")</code>. If
+    * you override this, call <code>super.checkSystemClipboardAccess</code>
+    * rather than throwing an exception.
+    *
+    * @throws SecurityException if permission is denied
+    * @see Toolkit#getSystemClipboard()
+    * @since 1.1
+    */
+   public void checkSystemClipboardAccess()
+   {
+     checkPermission(new AWTPermission("accessClipboard"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to use the AWT event queue. This
+    * method is called by Toolkit.getSystemEventQueue(). The default
+    * implementation checks <code>AWTPermission("accessEventQueue")</code>.
+    * you override this, call <code>super.checkAwtEventQueueAccess</code>
+    * rather than throwing an exception.
+    *
+    * @throws SecurityException if permission is denied
+    * @see Toolkit#getSystemEventQueue()
+    * @since 1.1
+    */
+   public void checkAwtEventQueueAccess()
+   {
+     checkPermission(new AWTPermission("accessEventQueue"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to access the specified package
+    * at all. This method is called by ClassLoader.loadClass() in user-created
+    * ClassLoaders. The default implementation gets a list of all restricted
+    * packages, via <code>Security.getProperty("package.access")</code>. Then,
+    * if packageName starts with or equals any restricted package, it checks
+    * <code>RuntimePermission("accessClassInPackage." + packageName)</code>.
+    * If you override this, you should call
+    * <code>super.checkPackageAccess</code> before doing anything else.
+    *
+    * @param packageName the package name to check access to
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if packageName is null
+    * @see ClassLoader#loadClass(String, boolean)
+    * @see Security#getProperty(String)
+    */
+   public void checkPackageAccess(String packageName)
+   {
+     checkPackageList(packageName, "package.access", "accessClassInPackage.");
+   }
+ 
+   /**
+    * Check if the current thread is allowed to define a class into the
+    * specified package. This method is called by ClassLoader.loadClass() in
+    * user-created ClassLoaders. The default implementation gets a list of all
+    * restricted packages, via
+    * <code>Security.getProperty("package.definition")</code>. Then, if
+    * packageName starts with or equals any restricted package, it checks
+    * <code>RuntimePermission("defineClassInPackage." + packageName)</code>.
+    * If you override this, you should call
+    * <code>super.checkPackageDefinition</code> before doing anything else.
+    *
+    * @param packageName the package name to check access to
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if packageName is null
+    * @see ClassLoader#loadClass(String, boolean)
+    * @see Security#getProperty(String)
+    */
+   public void checkPackageDefinition(String packageName)
+   {
+     checkPackageList(packageName, "package.definition", "defineClassInPackage.");
+   }
+ 
+   /**
+    * Check if the current thread is allowed to set the current socket factory.
+    * This method is called by Socket.setSocketImplFactory(),
+    * ServerSocket.setSocketFactory(), and URL.setURLStreamHandlerFactory().
+    * The default implementation checks
+    * <code>RuntimePermission("setFactory")</code>. If you override this, call
+    * <code>super.checkSetFactory</code> rather than throwing an exception.
+    *
+    * @throws SecurityException if permission is denied
+    * @see Socket#setSocketImplFactory(SocketImplFactory)
+    * @see ServerSocket#setSocketFactory(SocketImplFactory)
+    * @see URL#setURLStreamHandlerFactory(URLStreamHandlerFactory)
+    */
+   public void checkSetFactory()
+   {
+     checkPermission(new RuntimePermission("setFactory"));
+   }
+ 
+   /**
+    * Check if the current thread is allowed to get certain types of Methods,
+    * Fields and Constructors from a Class object. This method is called by
+    * Class.getMethod[s](), Class.getField[s](), Class.getConstructor[s],
+    * Class.getDeclaredMethod[s](), Class.getDeclaredField[s](), and
+    * Class.getDeclaredConstructor[s](). The default implementation allows
+    * PUBLIC access, and access to classes defined by the same classloader as
+    * the code performing the reflection. Otherwise, it checks
+    * <code>RuntimePermission("accessDeclaredMembers")</code>. If you override
+    * this, do not call <code>super.checkMemberAccess</code>, as this would
+    * mess up the stack depth check that determines the ClassLoader requesting
+    * the access.
+    *
+    * @param c the Class to check
+    * @param memberType either DECLARED or PUBLIC
+    * @throws SecurityException if permission is denied, including when
+    *         memberType is not DECLARED or PUBLIC
+    * @throws NullPointerException if c is null
+    * @see Class
+    * @see Member#DECLARED
+    * @see Member#PUBLIC
+    * @since 1.1
+    */
+   public void checkMemberAccess(Class c, int memberType)
+   {
+     if (c == null)
+       throw new NullPointerException();
+     if (memberType == Member.PUBLIC)
+       return;
+     // XXX Allow access to classes created by same classloader before next
+     // check.
+     checkPermission(new RuntimePermission("accessDeclaredMembers"));
+   }
+ 
+   /**
+    * Test whether a particular security action may be taken. The default
+    * implementation checks <code>SecurityPermission(action)</code>. If you
+    * override this, call <code>super.checkSecurityAccess</code> rather than
+    * throwing an exception.
+    *
+    * @param action the desired action to take
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if action is null
+    * @throws IllegalArgumentException if action is ""
+    * @since 1.1
+    */
+   public void checkSecurityAccess(String action)
+   {
+     checkPermission(new SecurityPermission(action));
+   }
+ 
+   /**
+    * Get the ThreadGroup that a new Thread should belong to by default. Called
+    * by Thread.Thread(). The default implementation returns the current
+    * ThreadGroup of the current Thread. <STRONG>Spec Note:</STRONG> it is not
+    * clear whether the new Thread is guaranteed to pass the
+    * checkAccessThreadGroup() test when using this ThreadGroup, but I presume
+    * so.
+    *
+    * @return the ThreadGroup to put the new Thread into
+    * @since 1.1
+    */
+   public ThreadGroup getThreadGroup()
+   {
+     return Thread.currentThread().getThreadGroup();
+   }
+ 
+   /**
+    * Helper that checks a comma-separated list of restricted packages, from
+    * <code>Security.getProperty("package.definition")</code>, for the given
+    * package access permission. If packageName starts with or equals any
+    * restricted package, it checks
+    * <code>RuntimePermission(permission + packageName)</code>.
+    *
+    * @param packageName the package name to check access to
+    * @param restriction "package.access" or "package.definition"
+    * @param permission the base permission, including the '.'
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if packageName is null
+    * @see #checkPackageAccess(String)
+    * @see #checkPackageDefinition(String)
+    */
+   void checkPackageList(String packageName, final String restriction,
+                         String permission)
+   {
+     if (packageName == null)
+       throw new NullPointerException();
+ 
+     String list = (String)AccessController.doPrivileged(new PrivilegedAction()
+       {
+ 	public Object run()
+         {
+ 	  return Security.getProperty(restriction);
+ 	}
+       });
+ 
+     if (list == null || list.equals(""))
+       return;
+ 
+     String packageNamePlusDot = packageName + ".";
+ 
+     StringTokenizer st = new StringTokenizer(list, ",");
+     while (st.hasMoreTokens())
+       {
+ 	if (packageNamePlusDot.startsWith(st.nextToken()))
+ 	  {
+ 	    Permission p = new RuntimePermission(permission + packageName);
+ 	    checkPermission(p);
+ 	    return;
+ 	  }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Short.java gcc-4.1.0/libjava/classpath/java/lang/Short.java
*** gcc-4.0.2/libjava/classpath/java/lang/Short.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Short.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,397 ----
+ /* Short.java -- object wrapper for short
+    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * Instances of class <code>Short</code> represent primitive
+  * <code>short</code> values.
+  *
+  * Additionally, this class provides various helper functions and variables
+  * related to shorts.
+  *
+  * @author Paul Fisher
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public final class Short extends Number implements Comparable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 7515723908773894738L;
+ 
+   /**
+    * The minimum value a <code>short</code> can represent is -32768 (or
+    * -2<sup>15</sup>).
+    */
+   public static final short MIN_VALUE = -32768;
+ 
+   /**
+    * The minimum value a <code>short</code> can represent is 32767 (or
+    * 2<sup>15</sup>).
+    */
+   public static final short MAX_VALUE = 32767;
+ 
+   /**
+    * The primitive type <code>short</code> is represented by this
+    * <code>Class</code> object.
+    */
+   public static final Class TYPE = VMClassLoader.getPrimitiveClass('S');
+ 
+   /**
+    * The number of bits needed to represent a <code>short</code>.
+    * @since 1.5
+    */
+   public static final int SIZE = 16;
+ 
+   // This caches some Short values, and is used by boxing conversions
+   // via valueOf().  We must cache at least -128..127; these constants
+   // control how much we actually cache.
+   private static final int MIN_CACHE = -128;
+   private static final int MAX_CACHE = 127;
+   private static Short[] shortCache = new Short[MAX_CACHE - MIN_CACHE + 1];
+ 
+   /**
+    * The immutable value of this Short.
+    *
+    * @serial the wrapped short
+    */
+   private final short value;
+ 
+   /**
+    * Create a <code>Short</code> object representing the value of the
+    * <code>short</code> argument.
+    *
+    * @param value the value to use
+    */
+   public Short(short value)
+   {
+     this.value = value;
+   }
+ 
+   /**
+    * Create a <code>Short</code> object representing the value of the
+    * argument after conversion to a <code>short</code>.
+    *
+    * @param s the string to convert
+    * @throws NumberFormatException if the String cannot be parsed
+    */
+   public Short(String s)
+   {
+     value = parseShort(s, 10);
+   }
+ 
+   /**
+    * Converts the <code>short</code> to a <code>String</code> and assumes
+    * a radix of 10.
+    *
+    * @param s the <code>short</code> to convert to <code>String</code>
+    * @return the <code>String</code> representation of the argument
+    */
+   public static String toString(short s)
+   {
+     return String.valueOf(s);
+   }
+ 
+   /**
+    * Converts the specified <code>String</code> into a <code>short</code>.
+    * This function assumes a radix of 10.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the <code>short</code> value of <code>s</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>short</code>
+    */
+   public static short parseShort(String s)
+   {
+     return parseShort(s, 10);
+   }
+ 
+   /**
+    * Converts the specified <code>String</code> into a <code>short</code>
+    * using the specified radix (base). The string must not be <code>null</code>
+    * or empty. It may begin with an optional '-', which will negate the answer,
+    * provided that there are also valid digits. Each digit is parsed as if by
+    * <code>Character.digit(d, radix)</code>, and must be in the range
+    * <code>0</code> to <code>radix - 1</code>. Finally, the result must be
+    * within <code>MIN_VALUE</code> to <code>MAX_VALUE</code>, inclusive.
+    * Unlike Double.parseDouble, you may not have a leading '+'.
+    *
+    * @param s the <code>String</code> to convert
+    * @param radix the radix (base) to use in the conversion
+    * @return the <code>String</code> argument converted to <code>short</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>short</code>
+    */
+   public static short parseShort(String s, int radix)
+   {
+     int i = Integer.parseInt(s, radix, false);
+     if ((short) i != i)
+       throw new NumberFormatException();
+     return (short) i;
+   }
+ 
+   /**
+    * Creates a new <code>Short</code> object using the <code>String</code>
+    * and specified radix (base).
+    *
+    * @param s the <code>String</code> to convert
+    * @param radix the radix (base) to convert with
+    * @return the new <code>Short</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>short</code>
+    * @see #parseShort(String, int)
+    */
+   public static Short valueOf(String s, int radix)
+   {
+     return new Short(parseShort(s, radix));
+   }
+ 
+   /**
+    * Creates a new <code>Short</code> object using the <code>String</code>,
+    * assuming a radix of 10.
+    *
+    * @param s the <code>String</code> to convert
+    * @return the new <code>Short</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>short</code>
+    * @see #Short(String)
+    * @see #parseShort(String)
+    */
+   public static Short valueOf(String s)
+   {
+     return new Short(parseShort(s, 10));
+   }
+ 
+   /**
+    * Returns a <code>Short</code> object wrapping the value.
+    * In contrast to the <code>Short</code> constructor, this method
+    * will cache some values.  It is used by boxing conversion.
+    *
+    * @param val the value to wrap
+    * @return the <code>Short</code>
+    *
+    * @since 1.5
+    */
+   public static Short valueOf(short val)
+   {
+     if (val < MIN_CACHE || val > MAX_CACHE)
+       return new Short(val);
+     synchronized (shortCache)
+       {
+     if (shortCache[val - MIN_CACHE] == null)
+       shortCache[val - MIN_CACHE] = new Short(val);
+     return shortCache[val - MIN_CACHE];
+       }
+   }
+ 
+   /**
+    * Convert the specified <code>String</code> into a <code>Short</code>.
+    * The <code>String</code> may represent decimal, hexadecimal, or
+    * octal numbers.
+    *
+    * <p>The extended BNF grammar is as follows:<br>
+    * <pre>
+    * <em>DecodableString</em>:
+    *      ( [ <code>-</code> ] <em>DecimalNumber</em> )
+    *    | ( [ <code>-</code> ] ( <code>0x</code> | <code>0X</code>
+    *              | <code>#</code> ) <em>HexDigit</em> { <em>HexDigit</em> } )
+    *    | ( [ <code>-</code> ] <code>0</code> { <em>OctalDigit</em> } )
+    * <em>DecimalNumber</em>:
+    *        <em>DecimalDigit except '0'</em> { <em>DecimalDigit</em> }
+    * <em>DecimalDigit</em>:
+    *        <em>Character.digit(d, 10) has value 0 to 9</em>
+    * <em>OctalDigit</em>:
+    *        <em>Character.digit(d, 8) has value 0 to 7</em>
+    * <em>DecimalDigit</em>:
+    *        <em>Character.digit(d, 16) has value 0 to 15</em>
+    * </pre>
+    * Finally, the value must be in the range <code>MIN_VALUE</code> to
+    * <code>MAX_VALUE</code>, or an exception is thrown.
+    *
+    * @param s the <code>String</code> to interpret
+    * @return the value of the String as a <code>Short</code>
+    * @throws NumberFormatException if <code>s</code> cannot be parsed as a
+    *         <code>short</code>
+    * @throws NullPointerException if <code>s</code> is null
+    * @see Integer#decode(String)
+    */
+   public static Short decode(String s)
+   {
+     int i = Integer.parseInt(s, 10, true);
+     if ((short) i != i)
+       throw new NumberFormatException();
+     return new Short((short) i);
+   }
+ 
+   /**
+    * Return the value of this <code>Short</code> as a <code>byte</code>.
+    *
+    * @return the byte value
+    */
+   public byte byteValue()
+   {
+     return (byte) value;
+   }
+ 
+   /**
+    * Return the value of this <code>Short</code>.
+    *
+    * @return the short value
+    */
+   public short shortValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Short</code> as an <code>int</code>.
+    *
+    * @return the int value
+    */
+   public int intValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Short</code> as a <code>long</code>.
+    *
+    * @return the long value
+    */
+   public long longValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Short</code> as a <code>float</code>.
+    *
+    * @return the float value
+    */
+   public float floatValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Return the value of this <code>Short</code> as a <code>double</code>.
+    *
+    * @return the double value
+    */
+   public double doubleValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Converts the <code>Short</code> value to a <code>String</code> and
+    * assumes a radix of 10.
+    *
+    * @return the <code>String</code> representation of this <code>Short</code>
+    */
+   public String toString()
+   {
+     return String.valueOf(value);
+   }
+ 
+   /**
+    * Return a hashcode representing this Object. <code>Short</code>'s hash
+    * code is simply its value.
+    *
+    * @return this Object's hash code
+    */
+   public int hashCode()
+   {
+     return value;
+   }
+ 
+   /**
+    * Returns <code>true</code> if <code>obj</code> is an instance of
+    * <code>Short</code> and represents the same short value.
+    *
+    * @param obj the object to compare
+    * @return whether these Objects are semantically equal
+    */
+   public boolean equals(Object obj)
+   {
+     return obj instanceof Short && value == ((Short) obj).value;
+   }
+ 
+   /**
+    * Compare two Shorts numerically by comparing their <code>short</code>
+    * values. The result is positive if the first is greater, negative if the
+    * second is greater, and 0 if the two are equal.
+    *
+    * @param s the Short to compare
+    * @return the comparison
+    * @since 1.2
+    */
+   public int compareTo(Short s)
+   {
+     return value - s.value;
+   }
+ 
+   /**
+    * Behaves like <code>compareTo(Short)</code> unless the Object
+    * is not a <code>Short</code>.
+    *
+    * @param o the object to compare
+    * @return the comparison
+    * @throws ClassCastException if the argument is not a <code>Short</code>
+    * @see #compareTo(Short)
+    * @see Comparable
+    * @since 1.2
+    */
+   public int compareTo(Object o)
+   {
+     return compareTo((Short)o);
+   }
+ 
+   /**
+    * Reverse the bytes in val.
+    * @since 1.5
+    */
+   public static short reverseBytes(short val)
+   {
+     return (short) (((val >> 8) & 0xff) | ((val << 8) & 0xff00));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/StackOverflowError.java gcc-4.1.0/libjava/classpath/java/lang/StackOverflowError.java
*** gcc-4.0.2/libjava/classpath/java/lang/StackOverflowError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/StackOverflowError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* StackOverflowError.java -- thrown when the stack depth is exceeded
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * A <code>StackOverflowError</code> is thrown when the execution stack
+  * overflow occurs. This often occurs when a method enters infinit recursion.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class StackOverflowError extends VirtualMachineError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 8609175038441759607L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public StackOverflowError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public StackOverflowError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/StackTraceElement.java gcc-4.1.0/libjava/classpath/java/lang/StackTraceElement.java
*** gcc-4.0.2/libjava/classpath/java/lang/StackTraceElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/StackTraceElement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,259 ----
+ /* StackTraceElement.java -- One function call or call stack element
+    Copyright (C) 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * One function call or stack trace element. Gives information about
+  * the execution point such as the source file name, the line number,
+  * the fully qualified class name, the method name and whether this method
+  * is native, if this information is known.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public final class StackTraceElement implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = 6992337162326171013L;
+ 
+   /**
+    * The name of the file, null if unknown.
+    *
+    * @serial the source code filename, if known
+    */
+   private final String fileName;
+ 
+   /**
+    * The line number in the file, negative if unknown.
+    *
+    * @serial the source code line number, if known
+    */
+   private final int lineNumber;
+ 
+   /**
+    * The fully qualified class name, null if unknown.
+    *
+    * @serial the enclosing class, if known
+    */
+   private final String declaringClass;
+ 
+   /**
+    * The method name in the class, null if unknown.
+    *
+    * @serial the enclosing method, if known
+    */
+   private final String methodName;
+ 
+   /** Whether the method is native. */
+   private final transient boolean isNative;
+ 
+   /**
+    * A package local constructor for the StackTraceElement class, to be
+    * called by the Virtual Machine as part of Throwable.fillInStackTrace.
+    * There are no public constructors defined for this class. Creation
+    * of new elements is implementation specific.
+    *
+    * @param fileName the name of the file, null if unknown
+    * @param lineNumber the line in the file, negative if unknown
+    * @param className the fully qualified name of the class, null if unknown
+    * @param methodName the name of the method, null if unknown
+    * @param isNative true if native, false otherwise
+    */
+   StackTraceElement(String fileName, int lineNumber, String className,
+                     String methodName, boolean isNative)
+   {
+     this.fileName = fileName;
+     this.lineNumber = lineNumber;
+     this.declaringClass = className;
+     this.methodName = methodName;
+     this.isNative = isNative;
+   }
+ 
+   /**
+    * Returns the name of the file, or null if unknown. This is usually
+    * obtained from the <code>SourceFile</code> attribute of the class file
+    * format, if present.
+    *
+    * @return the file name
+    */
+   public String getFileName()
+   {
+     return fileName;
+   }
+ 
+   /**
+    * Returns the line number in the file, or a negative number if unknown.
+    * This is usually obtained from the <code>LineNumberTable</code> attribute
+    * of the method in the class file format, if present.
+    *
+    * @return the line number
+    */
+   public int getLineNumber()
+   {
+     return lineNumber;
+   }
+ 
+   /**
+    * Returns the fully qualified class name, or null if unknown.
+    *
+    * @return the class name
+    */
+   public String getClassName()
+   {
+     return declaringClass;
+   }
+ 
+   /**
+    * Returns the method name in the class, or null if unknown. If the
+    * execution point is in a constructor, the name is
+    * <code>&lt;init&gt;</code>; if the execution point is in the class
+    * initializer, the name is <code>&lt;clinit&gt;</code>.
+    *
+    * @return the method name
+    */
+   public String getMethodName()
+   {
+     return methodName;
+   }
+ 
+   /**
+    * Returns true if the method is native, or false if it is not or unknown.
+    *
+    * @return whether the method is native
+    */
+   public boolean isNativeMethod()
+   {
+     return isNative;
+   }
+ 
+   /**
+    * Returns a string representation of this stack trace element. The
+    * returned String is implementation specific. This implementation
+    * returns the following String: "[class][.][method]([file][:line])".
+    * If the fully qualified class name or the method is unknown it is
+    * omitted including the point seperator. If the source file name is
+    * unknown it is replaced by "Unknown Source" if the method is not native
+    * or by "Native Method" if the method is native. If the line number
+    * is unknown it and the colon are omitted.
+    *
+    * @return a string representation of this execution point
+    */
+   public String toString()
+   {
+     StringBuffer sb = new StringBuffer();
+     if (declaringClass != null)
+       {
+         sb.append(declaringClass);
+         if (methodName != null)
+           sb.append('.');
+       }
+     if (methodName != null)
+       sb.append(methodName);
+     sb.append(" (");
+     if (fileName != null)
+       sb.append(fileName);
+     else
+       sb.append(isNative ? "Native Method" : "Unknown Source");
+     if (lineNumber >= 0)
+       sb.append(':').append(lineNumber);
+     sb.append(')');
+     return sb.toString();
+   }
+ 
+   /**
+    * Returns true if the given object is also a StackTraceElement and all
+    * attributes, except the native flag, are equal (either the same attribute
+    * between the two elments are null, or both satisfy Object.equals).
+    *
+    * @param o the object to compare
+    * @return true if the two are equal
+    */
+   public boolean equals(Object o)
+   {
+     if (! (o instanceof StackTraceElement))
+       return false;
+     StackTraceElement e = (StackTraceElement) o;
+     return equals(fileName, e.fileName)
+       && lineNumber == e.lineNumber
+       && equals(declaringClass, e.declaringClass)
+       && equals(methodName, e.methodName);
+   }
+ 
+   /**
+    * Returns the hashCode of this StackTraceElement. This implementation
+    * computes the hashcode by xor-ing the hashcode of all attributes except
+    * the native flag.
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     return hashCode(fileName) ^ lineNumber ^ hashCode(declaringClass)
+       ^ hashCode(methodName);
+   }
+ 
+   /**
+    * Compare two objects according to Collection semantics.
+    *
+    * @param o1 the first object
+    * @param o2 the second object
+    * @return o1 == null ? o2 == null : o1.equals(o2)
+    */
+   private static boolean equals(Object o1, Object o2)
+   {
+     return o1 == null ? o2 == null : o1.equals(o2);
+   }
+ 
+   /**
+    * Hash an object according to Collection semantics.
+    *
+    * @param o the object to hash
+    * @return o1 == null ? 0 : o1.hashCode()
+    */
+   private static int hashCode(Object o)
+   {
+     return o == null ? 0 : o.hashCode();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/StrictMath.java gcc-4.1.0/libjava/classpath/java/lang/StrictMath.java
*** gcc-4.0.2/libjava/classpath/java/lang/StrictMath.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/StrictMath.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1844 ----
+ /* java.lang.StrictMath -- common mathematical functions, strict Java
+    Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ /*
+  * Some of the algorithms in this class are in the public domain, as part
+  * of fdlibm (freely-distributable math library), available at
+  * http://www.netlib.org/fdlibm/, and carry the following copyright:
+  * ====================================================
+  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+  *
+  * Developed at SunSoft, a Sun Microsystems, Inc. business.
+  * Permission to use, copy, modify, and distribute this
+  * software is freely granted, provided that this notice
+  * is preserved.
+  * ====================================================
+  */
+ 
+ package java.lang;
+ 
+ import gnu.classpath.Configuration;
+ 
+ import java.util.Random;
+ 
+ /**
+  * Helper class containing useful mathematical functions and constants.
+  * This class mirrors {@link Math}, but is 100% portable, because it uses
+  * no native methods whatsoever.  Also, these algorithms are all accurate
+  * to less than 1 ulp, and execute in <code>strictfp</code> mode, while
+  * Math is allowed to vary in its results for some functions. Unfortunately,
+  * this usually means StrictMath has less efficiency and speed, as Math can
+  * use native methods.
+  *
+  * <p>The source of the various algorithms used is the fdlibm library, at:<br>
+  * <a href="http://www.netlib.org/fdlibm/">http://www.netlib.org/fdlibm/</a>
+  *
+  * Note that angles are specified in radians.  Conversion functions are
+  * provided for your convenience.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.3
+  */
+ public final strictfp class StrictMath
+ {
+   /**
+    * StrictMath is non-instantiable.
+    */
+   private StrictMath()
+   {
+   }
+ 
+   /**
+    * A random number generator, initialized on first use.
+    *
+    * @see #random()
+    */
+   private static Random rand;
+ 
+   /**
+    * The most accurate approximation to the mathematical constant <em>e</em>:
+    * <code>2.718281828459045</code>. Used in natural log and exp.
+    *
+    * @see #log(double)
+    * @see #exp(double)
+    */
+   public static final double E
+     = 2.718281828459045; // Long bits 0x4005bf0z8b145769L.
+ 
+   /**
+    * The most accurate approximation to the mathematical constant <em>pi</em>:
+    * <code>3.141592653589793</code>. This is the ratio of a circle's diameter
+    * to its circumference.
+    */
+   public static final double PI
+     = 3.141592653589793; // Long bits 0x400921fb54442d18L.
+ 
+   /**
+    * Take the absolute value of the argument. (Absolute value means make
+    * it positive.)
+    *
+    * <p>Note that the the largest negative value (Integer.MIN_VALUE) cannot
+    * be made positive.  In this case, because of the rules of negation in
+    * a computer, MIN_VALUE is what will be returned.
+    * This is a <em>negative</em> value.  You have been warned.
+    *
+    * @param i the number to take the absolute value of
+    * @return the absolute value
+    * @see Integer#MIN_VALUE
+    */
+   public static int abs(int i)
+   {
+     return (i < 0) ? -i : i;
+   }
+ 
+   /**
+    * Take the absolute value of the argument. (Absolute value means make
+    * it positive.)
+    *
+    * <p>Note that the the largest negative value (Long.MIN_VALUE) cannot
+    * be made positive.  In this case, because of the rules of negation in
+    * a computer, MIN_VALUE is what will be returned.
+    * This is a <em>negative</em> value.  You have been warned.
+    *
+    * @param l the number to take the absolute value of
+    * @return the absolute value
+    * @see Long#MIN_VALUE
+    */
+   public static long abs(long l)
+   {
+     return (l < 0) ? -l : l;
+   }
+ 
+   /**
+    * Take the absolute value of the argument. (Absolute value means make
+    * it positive.)
+    *
+    * @param f the number to take the absolute value of
+    * @return the absolute value
+    */
+   public static float abs(float f)
+   {
+     return (f <= 0) ? 0 - f : f;
+   }
+ 
+   /**
+    * Take the absolute value of the argument. (Absolute value means make
+    * it positive.)
+    *
+    * @param d the number to take the absolute value of
+    * @return the absolute value
+    */
+   public static double abs(double d)
+   {
+     return (d <= 0) ? 0 - d : d;
+   }
+ 
+   /**
+    * Return whichever argument is smaller.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the smaller of the two numbers
+    */
+   public static int min(int a, int b)
+   {
+     return (a < b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is smaller.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the smaller of the two numbers
+    */
+   public static long min(long a, long b)
+   {
+     return (a < b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is smaller. If either argument is NaN, the
+    * result is NaN, and when comparing 0 and -0, -0 is always smaller.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the smaller of the two numbers
+    */
+   public static float min(float a, float b)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return a;
+     // no need to check if b is NaN; < will work correctly
+     // recall that -0.0 == 0.0, but [+-]0.0 - [+-]0.0 behaves special
+     if (a == 0 && b == 0)
+       return -(-a - b);
+     return (a < b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is smaller. If either argument is NaN, the
+    * result is NaN, and when comparing 0 and -0, -0 is always smaller.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the smaller of the two numbers
+    */
+   public static double min(double a, double b)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return a;
+     // no need to check if b is NaN; < will work correctly
+     // recall that -0.0 == 0.0, but [+-]0.0 - [+-]0.0 behaves special
+     if (a == 0 && b == 0)
+       return -(-a - b);
+     return (a < b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is larger.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the larger of the two numbers
+    */
+   public static int max(int a, int b)
+   {
+     return (a > b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is larger.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the larger of the two numbers
+    */
+   public static long max(long a, long b)
+   {
+     return (a > b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is larger. If either argument is NaN, the
+    * result is NaN, and when comparing 0 and -0, 0 is always larger.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the larger of the two numbers
+    */
+   public static float max(float a, float b)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return a;
+     // no need to check if b is NaN; > will work correctly
+     // recall that -0.0 == 0.0, but [+-]0.0 - [+-]0.0 behaves special
+     if (a == 0 && b == 0)
+       return a - -b;
+     return (a > b) ? a : b;
+   }
+ 
+   /**
+    * Return whichever argument is larger. If either argument is NaN, the
+    * result is NaN, and when comparing 0 and -0, 0 is always larger.
+    *
+    * @param a the first number
+    * @param b a second number
+    * @return the larger of the two numbers
+    */
+   public static double max(double a, double b)
+   {
+     // this check for NaN, from JLS 15.21.1, saves a method call
+     if (a != a)
+       return a;
+     // no need to check if b is NaN; > will work correctly
+     // recall that -0.0 == 0.0, but [+-]0.0 - [+-]0.0 behaves special
+     if (a == 0 && b == 0)
+       return a - -b;
+     return (a > b) ? a : b;
+   }
+ 
+   /**
+    * The trigonometric function <em>sin</em>. The sine of NaN or infinity is
+    * NaN, and the sine of 0 retains its sign.
+    *
+    * @param a the angle (in radians)
+    * @return sin(a)
+    */
+   public static double sin(double a)
+   {
+     if (a == Double.NEGATIVE_INFINITY || ! (a < Double.POSITIVE_INFINITY))
+       return Double.NaN;
+ 
+     if (abs(a) <= PI / 4)
+       return sin(a, 0);
+ 
+     // Argument reduction needed.
+     double[] y = new double[2];
+     int n = remPiOver2(a, y);
+     switch (n & 3)
+       {
+       case 0:
+         return sin(y[0], y[1]);
+       case 1:
+         return cos(y[0], y[1]);
+       case 2:
+         return -sin(y[0], y[1]);
+       default:
+         return -cos(y[0], y[1]);
+       }
+   }
+ 
+   /**
+    * The trigonometric function <em>cos</em>. The cosine of NaN or infinity is
+    * NaN.
+    *
+    * @param a the angle (in radians).
+    * @return cos(a).
+    */
+   public static double cos(double a)
+   {
+     if (a == Double.NEGATIVE_INFINITY || ! (a < Double.POSITIVE_INFINITY))
+       return Double.NaN;
+ 
+     if (abs(a) <= PI / 4)
+       return cos(a, 0);
+ 
+     // Argument reduction needed.
+     double[] y = new double[2];
+     int n = remPiOver2(a, y);
+     switch (n & 3)
+       {
+       case 0:
+         return cos(y[0], y[1]);
+       case 1:
+         return -sin(y[0], y[1]);
+       case 2:
+         return -cos(y[0], y[1]);
+       default:
+         return sin(y[0], y[1]);
+       }
+   }
+ 
+   /**
+    * The trigonometric function <em>tan</em>. The tangent of NaN or infinity
+    * is NaN, and the tangent of 0 retains its sign.
+    *
+    * @param a the angle (in radians)
+    * @return tan(a)
+    */
+   public static double tan(double a)
+   {
+     if (a == Double.NEGATIVE_INFINITY || ! (a < Double.POSITIVE_INFINITY))
+       return Double.NaN;
+ 
+     if (abs(a) <= PI / 4)
+       return tan(a, 0, false);
+ 
+     // Argument reduction needed.
+     double[] y = new double[2];
+     int n = remPiOver2(a, y);
+     return tan(y[0], y[1], (n & 1) == 1);
+   }
+ 
+   /**
+    * The trigonometric function <em>arcsin</em>. The range of angles returned
+    * is -pi/2 to pi/2 radians (-90 to 90 degrees). If the argument is NaN or
+    * its absolute value is beyond 1, the result is NaN; and the arcsine of
+    * 0 retains its sign.
+    *
+    * @param x the sin to turn back into an angle
+    * @return arcsin(x)
+    */
+   public static double asin(double x)
+   {
+     boolean negative = x < 0;
+     if (negative)
+       x = -x;
+     if (! (x <= 1))
+       return Double.NaN;
+     if (x == 1)
+       return negative ? -PI / 2 : PI / 2;
+     if (x < 0.5)
+       {
+         if (x < 1 / TWO_27)
+           return negative ? -x : x;
+         double t = x * x;
+         double p = t * (PS0 + t * (PS1 + t * (PS2 + t * (PS3 + t
+                                                          * (PS4 + t * PS5)))));
+         double q = 1 + t * (QS1 + t * (QS2 + t * (QS3 + t * QS4)));
+         return negative ? -x - x * (p / q) : x + x * (p / q);
+       }
+     double w = 1 - x; // 1>|x|>=0.5.
+     double t = w * 0.5;
+     double p = t * (PS0 + t * (PS1 + t * (PS2 + t * (PS3 + t
+                                                      * (PS4 + t * PS5)))));
+     double q = 1 + t * (QS1 + t * (QS2 + t * (QS3 + t * QS4)));
+     double s = sqrt(t);
+     if (x >= 0.975)
+       {
+         w = p / q;
+         t = PI / 2 - (2 * (s + s * w) - PI_L / 2);
+       }
+     else
+       {
+         w = (float) s;
+         double c = (t - w * w) / (s + w);
+         p = 2 * s * (p / q) - (PI_L / 2 - 2 * c);
+         q = PI / 4 - 2 * w;
+         t = PI / 4 - (p - q);
+       }
+     return negative ? -t : t;
+   }
+ 
+   /**
+    * The trigonometric function <em>arccos</em>. The range of angles returned
+    * is 0 to pi radians (0 to 180 degrees). If the argument is NaN or
+    * its absolute value is beyond 1, the result is NaN.
+    *
+    * @param x the cos to turn back into an angle
+    * @return arccos(x)
+    */
+   public static double acos(double x)
+   {
+     boolean negative = x < 0;
+     if (negative)
+       x = -x;
+     if (! (x <= 1))
+       return Double.NaN;
+     if (x == 1)
+       return negative ? PI : 0;
+     if (x < 0.5)
+       {
+         if (x < 1 / TWO_57)
+           return PI / 2;
+         double z = x * x;
+         double p = z * (PS0 + z * (PS1 + z * (PS2 + z * (PS3 + z
+                                                          * (PS4 + z * PS5)))));
+         double q = 1 + z * (QS1 + z * (QS2 + z * (QS3 + z * QS4)));
+         double r = x - (PI_L / 2 - x * (p / q));
+         return negative ? PI / 2 + r : PI / 2 - r;
+       }
+     if (negative) // x<=-0.5.
+       {
+         double z = (1 + x) * 0.5;
+         double p = z * (PS0 + z * (PS1 + z * (PS2 + z * (PS3 + z
+                                                          * (PS4 + z * PS5)))));
+         double q = 1 + z * (QS1 + z * (QS2 + z * (QS3 + z * QS4)));
+         double s = sqrt(z);
+         double w = p / q * s - PI_L / 2;
+         return PI - 2 * (s + w);
+       }
+     double z = (1 - x) * 0.5; // x>0.5.
+     double s = sqrt(z);
+     double df = (float) s;
+     double c = (z - df * df) / (s + df);
+     double p = z * (PS0 + z * (PS1 + z * (PS2 + z * (PS3 + z
+                                                      * (PS4 + z * PS5)))));
+     double q = 1 + z * (QS1 + z * (QS2 + z * (QS3 + z * QS4)));
+     double w = p / q * s + c;
+     return 2 * (df + w);
+   }
+ 
+   /**
+    * The trigonometric function <em>arcsin</em>. The range of angles returned
+    * is -pi/2 to pi/2 radians (-90 to 90 degrees). If the argument is NaN, the
+    * result is NaN; and the arctangent of 0 retains its sign.
+    *
+    * @param x the tan to turn back into an angle
+    * @return arcsin(x)
+    * @see #atan2(double, double)
+    */
+   public static double atan(double x)
+   {
+     double lo;
+     double hi;
+     boolean negative = x < 0;
+     if (negative)
+       x = -x;
+     if (x >= TWO_66)
+       return negative ? -PI / 2 : PI / 2;
+     if (! (x >= 0.4375)) // |x|<7/16, or NaN.
+       {
+         if (! (x >= 1 / TWO_29)) // Small, or NaN.
+           return negative ? -x : x;
+         lo = hi = 0;
+       }
+     else if (x < 1.1875)
+       {
+         if (x < 0.6875) // 7/16<=|x|<11/16.
+           {
+             x = (2 * x - 1) / (2 + x);
+             hi = ATAN_0_5H;
+             lo = ATAN_0_5L;
+           }
+         else // 11/16<=|x|<19/16.
+           {
+             x = (x - 1) / (x + 1);
+             hi = PI / 4;
+             lo = PI_L / 4;
+           }
+       }
+     else if (x < 2.4375) // 19/16<=|x|<39/16.
+       {
+         x = (x - 1.5) / (1 + 1.5 * x);
+         hi = ATAN_1_5H;
+         lo = ATAN_1_5L;
+       }
+     else // 39/16<=|x|<2**66.
+       {
+         x = -1 / x;
+         hi = PI / 2;
+         lo = PI_L / 2;
+       }
+ 
+     // Break sum from i=0 to 10 ATi*z**(i+1) into odd and even poly.
+     double z = x * x;
+     double w = z * z;
+     double s1 = z * (AT0 + w * (AT2 + w * (AT4 + w * (AT6 + w
+                                                       * (AT8 + w * AT10)))));
+     double s2 = w * (AT1 + w * (AT3 + w * (AT5 + w * (AT7 + w * AT9))));
+     if (hi == 0)
+       return negative ? x * (s1 + s2) - x : x - x * (s1 + s2);
+     z = hi - ((x * (s1 + s2) - lo) - x);
+     return negative ? -z : z;
+   }
+ 
+   /**
+    * A special version of the trigonometric function <em>arctan</em>, for
+    * converting rectangular coordinates <em>(x, y)</em> to polar
+    * <em>(r, theta)</em>. This computes the arctangent of x/y in the range
+    * of -pi to pi radians (-180 to 180 degrees). Special cases:<ul>
+    * <li>If either argument is NaN, the result is NaN.</li>
+    * <li>If the first argument is positive zero and the second argument is
+    * positive, or the first argument is positive and finite and the second
+    * argument is positive infinity, then the result is positive zero.</li>
+    * <li>If the first argument is negative zero and the second argument is
+    * positive, or the first argument is negative and finite and the second
+    * argument is positive infinity, then the result is negative zero.</li>
+    * <li>If the first argument is positive zero and the second argument is
+    * negative, or the first argument is positive and finite and the second
+    * argument is negative infinity, then the result is the double value
+    * closest to pi.</li>
+    * <li>If the first argument is negative zero and the second argument is
+    * negative, or the first argument is negative and finite and the second
+    * argument is negative infinity, then the result is the double value
+    * closest to -pi.</li>
+    * <li>If the first argument is positive and the second argument is
+    * positive zero or negative zero, or the first argument is positive
+    * infinity and the second argument is finite, then the result is the
+    * double value closest to pi/2.</li>
+    * <li>If the first argument is negative and the second argument is
+    * positive zero or negative zero, or the first argument is negative
+    * infinity and the second argument is finite, then the result is the
+    * double value closest to -pi/2.</li>
+    * <li>If both arguments are positive infinity, then the result is the
+    * double value closest to pi/4.</li>
+    * <li>If the first argument is positive infinity and the second argument
+    * is negative infinity, then the result is the double value closest to
+    * 3*pi/4.</li>
+    * <li>If the first argument is negative infinity and the second argument
+    * is positive infinity, then the result is the double value closest to
+    * -pi/4.</li>
+    * <li>If both arguments are negative infinity, then the result is the
+    * double value closest to -3*pi/4.</li>
+    *
+    * </ul><p>This returns theta, the angle of the point. To get r, albeit
+    * slightly inaccurately, use sqrt(x*x+y*y).
+    *
+    * @param y the y position
+    * @param x the x position
+    * @return <em>theta</em> in the conversion of (x, y) to (r, theta)
+    * @see #atan(double)
+    */
+   public static double atan2(double y, double x)
+   {
+     if (x != x || y != y)
+       return Double.NaN;
+     if (x == 1)
+       return atan(y);
+     if (x == Double.POSITIVE_INFINITY)
+       {
+         if (y == Double.POSITIVE_INFINITY)
+           return PI / 4;
+         if (y == Double.NEGATIVE_INFINITY)
+           return -PI / 4;
+         return 0 * y;
+       }
+     if (x == Double.NEGATIVE_INFINITY)
+       {
+         if (y == Double.POSITIVE_INFINITY)
+           return 3 * PI / 4;
+         if (y == Double.NEGATIVE_INFINITY)
+           return -3 * PI / 4;
+         return (1 / (0 * y) == Double.POSITIVE_INFINITY) ? PI : -PI;
+       }
+     if (y == 0)
+       {
+         if (1 / (0 * x) == Double.POSITIVE_INFINITY)
+           return y;
+         return (1 / y == Double.POSITIVE_INFINITY) ? PI : -PI;
+       }
+     if (y == Double.POSITIVE_INFINITY || y == Double.NEGATIVE_INFINITY
+         || x == 0)
+       return y < 0 ? -PI / 2 : PI / 2;
+ 
+     double z = abs(y / x); // Safe to do y/x.
+     if (z > TWO_60)
+       z = PI / 2 + 0.5 * PI_L;
+     else if (x < 0 && z < 1 / TWO_60)
+       z = 0;
+     else
+       z = atan(z);
+     if (x > 0)
+       return y > 0 ? z : -z;
+     return y > 0 ? PI - (z - PI_L) : z - PI_L - PI;
+   }
+ 
+   /**
+    * Take <em>e</em><sup>a</sup>.  The opposite of <code>log()</code>. If the
+    * argument is NaN, the result is NaN; if the argument is positive infinity,
+    * the result is positive infinity; and if the argument is negative
+    * infinity, the result is positive zero.
+    *
+    * @param x the number to raise to the power
+    * @return the number raised to the power of <em>e</em>
+    * @see #log(double)
+    * @see #pow(double, double)
+    */
+   public static double exp(double x)
+   {
+     if (x != x)
+       return x;
+     if (x > EXP_LIMIT_H)
+       return Double.POSITIVE_INFINITY;
+     if (x < EXP_LIMIT_L)
+       return 0;
+ 
+     // Argument reduction.
+     double hi;
+     double lo;
+     int k;
+     double t = abs(x);
+     if (t > 0.5 * LN2)
+       {
+         if (t < 1.5 * LN2)
+           {
+             hi = t - LN2_H;
+             lo = LN2_L;
+             k = 1;
+           }
+         else
+           {
+             k = (int) (INV_LN2 * t + 0.5);
+             hi = t - k * LN2_H;
+             lo = k * LN2_L;
+           }
+         if (x < 0)
+           {
+             hi = -hi;
+             lo = -lo;
+             k = -k;
+           }
+         x = hi - lo;
+       }
+     else if (t < 1 / TWO_28)
+       return 1;
+     else
+       lo = hi = k = 0;
+ 
+     // Now x is in primary range.
+     t = x * x;
+     double c = x - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));
+     if (k == 0)
+       return 1 - (x * c / (c - 2) - x);
+     double y = 1 - (lo - x * c / (2 - c) - hi);
+     return scale(y, k);
+   }
+ 
+   /**
+    * Take ln(a) (the natural log).  The opposite of <code>exp()</code>. If the
+    * argument is NaN or negative, the result is NaN; if the argument is
+    * positive infinity, the result is positive infinity; and if the argument
+    * is either zero, the result is negative infinity.
+    *
+    * <p>Note that the way to get log<sub>b</sub>(a) is to do this:
+    * <code>ln(a) / ln(b)</code>.
+    *
+    * @param x the number to take the natural log of
+    * @return the natural log of <code>a</code>
+    * @see #exp(double)
+    */
+   public static double log(double x)
+   {
+     if (x == 0)
+       return Double.NEGATIVE_INFINITY;
+     if (x < 0)
+       return Double.NaN;
+     if (! (x < Double.POSITIVE_INFINITY))
+       return x;
+ 
+     // Normalize x.
+     long bits = Double.doubleToLongBits(x);
+     int exp = (int) (bits >> 52);
+     if (exp == 0) // Subnormal x.
+       {
+         x *= TWO_54;
+         bits = Double.doubleToLongBits(x);
+         exp = (int) (bits >> 52) - 54;
+       }
+     exp -= 1023; // Unbias exponent.
+     bits = (bits & 0x000fffffffffffffL) | 0x3ff0000000000000L;
+     x = Double.longBitsToDouble(bits);
+     if (x >= SQRT_2)
+       {
+         x *= 0.5;
+         exp++;
+       }
+     x--;
+     if (abs(x) < 1 / TWO_20)
+       {
+         if (x == 0)
+           return exp * LN2_H + exp * LN2_L;
+         double r = x * x * (0.5 - 1 / 3.0 * x);
+         if (exp == 0)
+           return x - r;
+         return exp * LN2_H - ((r - exp * LN2_L) - x);
+       }
+     double s = x / (2 + x);
+     double z = s * s;
+     double w = z * z;
+     double t1 = w * (LG2 + w * (LG4 + w * LG6));
+     double t2 = z * (LG1 + w * (LG3 + w * (LG5 + w * LG7)));
+     double r = t2 + t1;
+     if (bits >= 0x3ff6174a00000000L && bits < 0x3ff6b85200000000L)
+       {
+         double h = 0.5 * x * x; // Need more accuracy for x near sqrt(2).
+         if (exp == 0)
+           return x - (h - s * (h + r));
+         return exp * LN2_H - ((h - (s * (h + r) + exp * LN2_L)) - x);
+       }
+     if (exp == 0)
+       return x - s * (x - r);
+     return exp * LN2_H - ((s * (x - r) - exp * LN2_L) - x);
+   }
+ 
+   /**
+    * Take a square root. If the argument is NaN or negative, the result is
+    * NaN; if the argument is positive infinity, the result is positive
+    * infinity; and if the result is either zero, the result is the same.
+    *
+    * <p>For other roots, use pow(x, 1/rootNumber).
+    *
+    * @param x the numeric argument
+    * @return the square root of the argument
+    * @see #pow(double, double)
+    */
+   public static double sqrt(double x)
+   {
+     if (x < 0)
+       return Double.NaN;
+     if (x == 0 || ! (x < Double.POSITIVE_INFINITY))
+       return x;
+ 
+     // Normalize x.
+     long bits = Double.doubleToLongBits(x);
+     int exp = (int) (bits >> 52);
+     if (exp == 0) // Subnormal x.
+       {
+         x *= TWO_54;
+         bits = Double.doubleToLongBits(x);
+         exp = (int) (bits >> 52) - 54;
+       }
+     exp -= 1023; // Unbias exponent.
+     bits = (bits & 0x000fffffffffffffL) | 0x0010000000000000L;
+     if ((exp & 1) == 1) // Odd exp, double x to make it even.
+       bits <<= 1;
+     exp >>= 1;
+ 
+     // Generate sqrt(x) bit by bit.
+     bits <<= 1;
+     long q = 0;
+     long s = 0;
+     long r = 0x0020000000000000L; // Move r right to left.
+     while (r != 0)
+       {
+         long t = s + r;
+         if (t <= bits)
+           {
+             s = t + r;
+             bits -= t;
+             q += r;
+           }
+         bits <<= 1;
+         r >>= 1;
+       }
+ 
+     // Use floating add to round correctly.
+     if (bits != 0)
+       q += q & 1;
+     return Double.longBitsToDouble((q >> 1) + ((exp + 1022L) << 52));
+   }
+ 
+   /**
+    * Raise a number to a power. Special cases:<ul>
+    * <li>If the second argument is positive or negative zero, then the result
+    * is 1.0.</li>
+    * <li>If the second argument is 1.0, then the result is the same as the
+    * first argument.</li>
+    * <li>If the second argument is NaN, then the result is NaN.</li>
+    * <li>If the first argument is NaN and the second argument is nonzero,
+    * then the result is NaN.</li>
+    * <li>If the absolute value of the first argument is greater than 1 and
+    * the second argument is positive infinity, or the absolute value of the
+    * first argument is less than 1 and the second argument is negative
+    * infinity, then the result is positive infinity.</li>
+    * <li>If the absolute value of the first argument is greater than 1 and
+    * the second argument is negative infinity, or the absolute value of the
+    * first argument is less than 1 and the second argument is positive
+    * infinity, then the result is positive zero.</li>
+    * <li>If the absolute value of the first argument equals 1 and the second
+    * argument is infinite, then the result is NaN.</li>
+    * <li>If the first argument is positive zero and the second argument is
+    * greater than zero, or the first argument is positive infinity and the
+    * second argument is less than zero, then the result is positive zero.</li>
+    * <li>If the first argument is positive zero and the second argument is
+    * less than zero, or the first argument is positive infinity and the
+    * second argument is greater than zero, then the result is positive
+    * infinity.</li>
+    * <li>If the first argument is negative zero and the second argument is
+    * greater than zero but not a finite odd integer, or the first argument is
+    * negative infinity and the second argument is less than zero but not a
+    * finite odd integer, then the result is positive zero.</li>
+    * <li>If the first argument is negative zero and the second argument is a
+    * positive finite odd integer, or the first argument is negative infinity
+    * and the second argument is a negative finite odd integer, then the result
+    * is negative zero.</li>
+    * <li>If the first argument is negative zero and the second argument is
+    * less than zero but not a finite odd integer, or the first argument is
+    * negative infinity and the second argument is greater than zero but not a
+    * finite odd integer, then the result is positive infinity.</li>
+    * <li>If the first argument is negative zero and the second argument is a
+    * negative finite odd integer, or the first argument is negative infinity
+    * and the second argument is a positive finite odd integer, then the result
+    * is negative infinity.</li>
+    * <li>If the first argument is less than zero and the second argument is a
+    * finite even integer, then the result is equal to the result of raising
+    * the absolute value of the first argument to the power of the second
+    * argument.</li>
+    * <li>If the first argument is less than zero and the second argument is a
+    * finite odd integer, then the result is equal to the negative of the
+    * result of raising the absolute value of the first argument to the power
+    * of the second argument.</li>
+    * <li>If the first argument is finite and less than zero and the second
+    * argument is finite and not an integer, then the result is NaN.</li>
+    * <li>If both arguments are integers, then the result is exactly equal to
+    * the mathematical result of raising the first argument to the power of
+    * the second argument if that result can in fact be represented exactly as
+    * a double value.</li>
+    *
+    * </ul><p>(In the foregoing descriptions, a floating-point value is
+    * considered to be an integer if and only if it is a fixed point of the
+    * method {@link #ceil(double)} or, equivalently, a fixed point of the
+    * method {@link #floor(double)}. A value is a fixed point of a one-argument
+    * method if and only if the result of applying the method to the value is
+    * equal to the value.)
+    *
+    * @param x the number to raise
+    * @param y the power to raise it to
+    * @return x<sup>y</sup>
+    */
+   public static double pow(double x, double y)
+   {
+     // Special cases first.
+     if (y == 0)
+       return 1;
+     if (y == 1)
+       return x;
+     if (y == -1)
+       return 1 / x;
+     if (x != x || y != y)
+       return Double.NaN;
+ 
+     // When x < 0, yisint tells if y is not an integer (0), even(1),
+     // or odd (2).
+     int yisint = 0;
+     if (x < 0 && floor(y) == y)
+       yisint = (y % 2 == 0) ? 2 : 1;
+     double ax = abs(x);
+     double ay = abs(y);
+ 
+     // More special cases, of y.
+     if (ay == Double.POSITIVE_INFINITY)
+       {
+         if (ax == 1)
+           return Double.NaN;
+         if (ax > 1)
+           return y > 0 ? y : 0;
+         return y < 0 ? -y : 0;
+       }
+     if (y == 2)
+       return x * x;
+     if (y == 0.5)
+       return sqrt(x);
+ 
+     // More special cases, of x.
+     if (x == 0 || ax == Double.POSITIVE_INFINITY || ax == 1)
+       {
+         if (y < 0)
+           ax = 1 / ax;
+         if (x < 0)
+           {
+             if (x == -1 && yisint == 0)
+               ax = Double.NaN;
+             else if (yisint == 1)
+               ax = -ax;
+           }
+         return ax;
+       }
+     if (x < 0 && yisint == 0)
+       return Double.NaN;
+ 
+     // Now we can start!
+     double t;
+     double t1;
+     double t2;
+     double u;
+     double v;
+     double w;
+     if (ay > TWO_31)
+       {
+         if (ay > TWO_64) // Automatic over/underflow.
+           return ((ax < 1) ? y < 0 : y > 0) ? Double.POSITIVE_INFINITY : 0;
+         // Over/underflow if x is not close to one.
+         if (ax < 0.9999995231628418)
+           return y < 0 ? Double.POSITIVE_INFINITY : 0;
+         if (ax >= 1.0000009536743164)
+           return y > 0 ? Double.POSITIVE_INFINITY : 0;
+         // Now |1-x| is <= 2**-20, sufficient to compute
+         // log(x) by x-x^2/2+x^3/3-x^4/4.
+         t = x - 1;
+         w = t * t * (0.5 - t * (1 / 3.0 - t * 0.25));
+         u = INV_LN2_H * t;
+         v = t * INV_LN2_L - w * INV_LN2;
+         t1 = (float) (u + v);
+         t2 = v - (t1 - u);
+       }
+     else
+     {
+       long bits = Double.doubleToLongBits(ax);
+       int exp = (int) (bits >> 52);
+       if (exp == 0) // Subnormal x.
+         {
+           ax *= TWO_54;
+           bits = Double.doubleToLongBits(ax);
+           exp = (int) (bits >> 52) - 54;
+         }
+       exp -= 1023; // Unbias exponent.
+       ax = Double.longBitsToDouble((bits & 0x000fffffffffffffL)
+                                    | 0x3ff0000000000000L);
+       boolean k;
+       if (ax < SQRT_1_5)  // |x|<sqrt(3/2).
+         k = false;
+       else if (ax < SQRT_3) // |x|<sqrt(3).
+         k = true;
+       else
+         {
+           k = false;
+           ax *= 0.5;
+           exp++;
+         }
+ 
+       // Compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5).
+       u = ax - (k ? 1.5 : 1);
+       v = 1 / (ax + (k ? 1.5 : 1));
+       double s = u * v;
+       double s_h = (float) s;
+       double t_h = (float) (ax + (k ? 1.5 : 1));
+       double t_l = ax - (t_h - (k ? 1.5 : 1));
+       double s_l = v * ((u - s_h * t_h) - s_h * t_l);
+       // Compute log(ax).
+       double s2 = s * s;
+       double r = s_l * (s_h + s) + s2 * s2
+         * (L1 + s2 * (L2 + s2 * (L3 + s2 * (L4 + s2 * (L5 + s2 * L6)))));
+       s2 = s_h * s_h;
+       t_h = (float) (3.0 + s2 + r);
+       t_l = r - (t_h - 3.0 - s2);
+       // u+v = s*(1+...).
+       u = s_h * t_h;
+       v = s_l * t_h + t_l * s;
+       // 2/(3log2)*(s+...).
+       double p_h = (float) (u + v);
+       double p_l = v - (p_h - u);
+       double z_h = CP_H * p_h;
+       double z_l = CP_L * p_h + p_l * CP + (k ? DP_L : 0);
+       // log2(ax) = (s+..)*2/(3*log2) = exp + dp_h + z_h + z_l.
+       t = exp;
+       t1 = (float) (z_h + z_l + (k ? DP_H : 0) + t);
+       t2 = z_l - (t1 - t - (k ? DP_H : 0) - z_h);
+     }
+ 
+     // Split up y into y1+y2 and compute (y1+y2)*(t1+t2).
+     boolean negative = x < 0 && yisint == 1;
+     double y1 = (float) y;
+     double p_l = (y - y1) * t1 + y * t2;
+     double p_h = y1 * t1;
+     double z = p_l + p_h;
+     if (z >= 1024) // Detect overflow.
+       {
+         if (z > 1024 || p_l + OVT > z - p_h)
+           return negative ? Double.NEGATIVE_INFINITY
+             : Double.POSITIVE_INFINITY;
+       }
+     else if (z <= -1075) // Detect underflow.
+       {
+         if (z < -1075 || p_l <= z - p_h)
+           return negative ? -0.0 : 0;
+       }
+ 
+     // Compute 2**(p_h+p_l).
+     int n = round((float) z);
+     p_h -= n;
+     t = (float) (p_l + p_h);
+     u = t * LN2_H;
+     v = (p_l - (t - p_h)) * LN2 + t * LN2_L;
+     z = u + v;
+     w = v - (z - u);
+     t = z * z;
+     t1 = z - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));
+     double r = (z * t1) / (t1 - 2) - (w + z * w);
+     z = scale(1 - (r - z), n);
+     return negative ? -z : z;
+   }
+ 
+   /**
+    * Get the IEEE 754 floating point remainder on two numbers. This is the
+    * value of <code>x - y * <em>n</em></code>, where <em>n</em> is the closest
+    * double to <code>x / y</code> (ties go to the even n); for a zero
+    * remainder, the sign is that of <code>x</code>. If either argument is NaN,
+    * the first argument is infinite, or the second argument is zero, the result
+    * is NaN; if x is finite but y is infinite, the result is x.
+    *
+    * @param x the dividend (the top half)
+    * @param y the divisor (the bottom half)
+    * @return the IEEE 754-defined floating point remainder of x/y
+    * @see #rint(double)
+    */
+   public static double IEEEremainder(double x, double y)
+   {
+     // Purge off exception values.
+     if (x == Double.NEGATIVE_INFINITY || ! (x < Double.POSITIVE_INFINITY)
+         || y == 0 || y != y)
+       return Double.NaN;
+ 
+     boolean negative = x < 0;
+     x = abs(x);
+     y = abs(y);
+     if (x == y || x == 0)
+       return 0 * x; // Get correct sign.
+ 
+     // Achieve x < 2y, then take first shot at remainder.
+     if (y < TWO_1023)
+       x %= y + y;
+ 
+     // Now adjust x to get correct precision.
+     if (y < 4 / TWO_1023)
+       {
+         if (x + x > y)
+           {
+             x -= y;
+             if (x + x >= y)
+               x -= y;
+           }
+       }
+     else
+       {
+         y *= 0.5;
+         if (x > y)
+           {
+             x -= y;
+             if (x >= y)
+               x -= y;
+           }
+       }
+     return negative ? -x : x;
+   }
+ 
+   /**
+    * Take the nearest integer that is that is greater than or equal to the
+    * argument. If the argument is NaN, infinite, or zero, the result is the
+    * same; if the argument is between -1 and 0, the result is negative zero.
+    * Note that <code>Math.ceil(x) == -Math.floor(-x)</code>.
+    *
+    * @param a the value to act upon
+    * @return the nearest integer &gt;= <code>a</code>
+    */
+   public static double ceil(double a)
+   {
+     return -floor(-a);
+   }
+ 
+   /**
+    * Take the nearest integer that is that is less than or equal to the
+    * argument. If the argument is NaN, infinite, or zero, the result is the
+    * same. Note that <code>Math.ceil(x) == -Math.floor(-x)</code>.
+    *
+    * @param a the value to act upon
+    * @return the nearest integer &lt;= <code>a</code>
+    */
+   public static double floor(double a)
+   {
+     double x = abs(a);
+     if (! (x < TWO_52) || (long) a == a)
+       return a; // No fraction bits; includes NaN and infinity.
+     if (x < 1)
+       return a >= 0 ? 0 * a : -1; // Worry about signed zero.
+     return a < 0 ? (long) a - 1.0 : (long) a; // Cast to long truncates.
+   }
+ 
+   /**
+    * Take the nearest integer to the argument.  If it is exactly between
+    * two integers, the even integer is taken. If the argument is NaN,
+    * infinite, or zero, the result is the same.
+    *
+    * @param a the value to act upon
+    * @return the nearest integer to <code>a</code>
+    */
+   public static double rint(double a)
+   {
+     double x = abs(a);
+     if (! (x < TWO_52))
+       return a; // No fraction bits; includes NaN and infinity.
+     if (x <= 0.5)
+       return 0 * a; // Worry about signed zero.
+     if (x % 2 <= 0.5)
+       return (long) a; // Catch round down to even.
+     return (long) (a + (a < 0 ? -0.5 : 0.5)); // Cast to long truncates.
+   }
+ 
+   /**
+    * Take the nearest integer to the argument.  This is equivalent to
+    * <code>(int) Math.floor(f + 0.5f)</code>. If the argument is NaN, the
+    * result is 0; otherwise if the argument is outside the range of int, the
+    * result will be Integer.MIN_VALUE or Integer.MAX_VALUE, as appropriate.
+    *
+    * @param f the argument to round
+    * @return the nearest integer to the argument
+    * @see Integer#MIN_VALUE
+    * @see Integer#MAX_VALUE
+    */
+   public static int round(float f)
+   {
+     return (int) floor(f + 0.5f);
+   }
+ 
+   /**
+    * Take the nearest long to the argument.  This is equivalent to
+    * <code>(long) Math.floor(d + 0.5)</code>. If the argument is NaN, the
+    * result is 0; otherwise if the argument is outside the range of long, the
+    * result will be Long.MIN_VALUE or Long.MAX_VALUE, as appropriate.
+    *
+    * @param d the argument to round
+    * @return the nearest long to the argument
+    * @see Long#MIN_VALUE
+    * @see Long#MAX_VALUE
+    */
+   public static long round(double d)
+   {
+     return (long) floor(d + 0.5);
+   }
+ 
+   /**
+    * Get a random number.  This behaves like Random.nextDouble(), seeded by
+    * System.currentTimeMillis() when first called. In other words, the number
+    * is from a pseudorandom sequence, and lies in the range [+0.0, 1.0).
+    * This random sequence is only used by this method, and is threadsafe,
+    * although you may want your own random number generator if it is shared
+    * among threads.
+    *
+    * @return a random number
+    * @see Random#nextDouble()
+    * @see System#currentTimeMillis()
+    */
+   public static synchronized double random()
+   {
+     if (rand == null)
+       rand = new Random();
+     return rand.nextDouble();
+   }
+ 
+   /**
+    * Convert from degrees to radians. The formula for this is
+    * radians = degrees * (pi/180); however it is not always exact given the
+    * limitations of floating point numbers.
+    *
+    * @param degrees an angle in degrees
+    * @return the angle in radians
+    */
+   public static double toRadians(double degrees)
+   {
+     return (degrees * PI) / 180;
+   }
+ 
+   /**
+    * Convert from radians to degrees. The formula for this is
+    * degrees = radians * (180/pi); however it is not always exact given the
+    * limitations of floating point numbers.
+    *
+    * @param rads an angle in radians
+    * @return the angle in degrees
+    */
+   public static double toDegrees(double rads)
+   {
+     return (rads * 180) / PI;
+   }
+ 
+   /**
+    * Constants for scaling and comparing doubles by powers of 2. The compiler
+    * must automatically inline constructs like (1/TWO_54), so we don't list
+    * negative powers of two here.
+    */
+   private static final double
+     TWO_16 = 0x10000, // Long bits 0x40f0000000000000L.
+     TWO_20 = 0x100000, // Long bits 0x4130000000000000L.
+     TWO_24 = 0x1000000, // Long bits 0x4170000000000000L.
+     TWO_27 = 0x8000000, // Long bits 0x41a0000000000000L.
+     TWO_28 = 0x10000000, // Long bits 0x41b0000000000000L.
+     TWO_29 = 0x20000000, // Long bits 0x41c0000000000000L.
+     TWO_31 = 0x80000000L, // Long bits 0x41e0000000000000L.
+     TWO_49 = 0x2000000000000L, // Long bits 0x4300000000000000L.
+     TWO_52 = 0x10000000000000L, // Long bits 0x4330000000000000L.
+     TWO_54 = 0x40000000000000L, // Long bits 0x4350000000000000L.
+     TWO_57 = 0x200000000000000L, // Long bits 0x4380000000000000L.
+     TWO_60 = 0x1000000000000000L, // Long bits 0x43b0000000000000L.
+     TWO_64 = 1.8446744073709552e19, // Long bits 0x43f0000000000000L.
+     TWO_66 = 7.378697629483821e19, // Long bits 0x4410000000000000L.
+     TWO_1023 = 8.98846567431158e307; // Long bits 0x7fe0000000000000L.
+ 
+   /**
+    * Super precision for 2/pi in 24-bit chunks, for use in
+    * {@link #remPiOver2(double, double[])}.
+    */
+   private static final int TWO_OVER_PI[] = {
+     0xa2f983, 0x6e4e44, 0x1529fc, 0x2757d1, 0xf534dd, 0xc0db62,
+     0x95993c, 0x439041, 0xfe5163, 0xabdebb, 0xc561b7, 0x246e3a,
+     0x424dd2, 0xe00649, 0x2eea09, 0xd1921c, 0xfe1deb, 0x1cb129,
+     0xa73ee8, 0x8235f5, 0x2ebb44, 0x84e99c, 0x7026b4, 0x5f7e41,
+     0x3991d6, 0x398353, 0x39f49c, 0x845f8b, 0xbdf928, 0x3b1ff8,
+     0x97ffde, 0x05980f, 0xef2f11, 0x8b5a0a, 0x6d1f6d, 0x367ecf,
+     0x27cb09, 0xb74f46, 0x3f669e, 0x5fea2d, 0x7527ba, 0xc7ebe5,
+     0xf17b3d, 0x0739f7, 0x8a5292, 0xea6bfb, 0x5fb11f, 0x8d5d08,
+     0x560330, 0x46fc7b, 0x6babf0, 0xcfbc20, 0x9af436, 0x1da9e3,
+     0x91615e, 0xe61b08, 0x659985, 0x5f14a0, 0x68408d, 0xffd880,
+     0x4d7327, 0x310606, 0x1556ca, 0x73a8c9, 0x60e27b, 0xc08c6b,
+   };
+ 
+   /**
+    * Super precision for pi/2 in 24-bit chunks, for use in
+    * {@link #remPiOver2(double, double[])}.
+    */
+   private static final double PI_OVER_TWO[] = {
+     1.570796251296997, // Long bits 0x3ff921fb40000000L.
+     7.549789415861596e-8, // Long bits 0x3e74442d00000000L.
+     5.390302529957765e-15, // Long bits 0x3cf8469880000000L.
+     3.282003415807913e-22, // Long bits 0x3b78cc5160000000L.
+     1.270655753080676e-29, // Long bits 0x39f01b8380000000L.
+     1.2293330898111133e-36, // Long bits 0x387a252040000000L.
+     2.7337005381646456e-44, // Long bits 0x36e3822280000000L.
+     2.1674168387780482e-51, // Long bits 0x3569f31d00000000L.
+   };
+ 
+   /**
+    * More constants related to pi, used in
+    * {@link #remPiOver2(double, double[])} and elsewhere.
+    */
+   private static final double
+     PI_L = 1.2246467991473532e-16, // Long bits 0x3ca1a62633145c07L.
+     PIO2_1 = 1.5707963267341256, // Long bits 0x3ff921fb54400000L.
+     PIO2_1L = 6.077100506506192e-11, // Long bits 0x3dd0b4611a626331L.
+     PIO2_2 = 6.077100506303966e-11, // Long bits 0x3dd0b4611a600000L.
+     PIO2_2L = 2.0222662487959506e-21, // Long bits 0x3ba3198a2e037073L.
+     PIO2_3 = 2.0222662487111665e-21, // Long bits 0x3ba3198a2e000000L.
+     PIO2_3L = 8.4784276603689e-32; // Long bits 0x397b839a252049c1L.
+ 
+   /**
+    * Natural log and square root constants, for calculation of
+    * {@link #exp(double)}, {@link #log(double)} and
+    * {@link #pow(double, double)}. CP is 2/(3*ln(2)).
+    */
+   private static final double
+     SQRT_1_5 = 1.224744871391589, // Long bits 0x3ff3988e1409212eL.
+     SQRT_2 = 1.4142135623730951, // Long bits 0x3ff6a09e667f3bcdL.
+     SQRT_3 = 1.7320508075688772, // Long bits 0x3ffbb67ae8584caaL.
+     EXP_LIMIT_H = 709.782712893384, // Long bits 0x40862e42fefa39efL.
+     EXP_LIMIT_L = -745.1332191019411, // Long bits 0xc0874910d52d3051L.
+     CP = 0.9617966939259756, // Long bits 0x3feec709dc3a03fdL.
+     CP_H = 0.9617967009544373, // Long bits 0x3feec709e0000000L.
+     CP_L = -7.028461650952758e-9, // Long bits 0xbe3e2fe0145b01f5L.
+     LN2 = 0.6931471805599453, // Long bits 0x3fe62e42fefa39efL.
+     LN2_H = 0.6931471803691238, // Long bits 0x3fe62e42fee00000L.
+     LN2_L = 1.9082149292705877e-10, // Long bits 0x3dea39ef35793c76L.
+     INV_LN2 = 1.4426950408889634, // Long bits 0x3ff71547652b82feL.
+     INV_LN2_H = 1.4426950216293335, // Long bits 0x3ff7154760000000L.
+     INV_LN2_L = 1.9259629911266175e-8; // Long bits 0x3e54ae0bf85ddf44L.
+ 
+   /**
+    * Constants for computing {@link #log(double)}.
+    */
+   private static final double
+     LG1 = 0.6666666666666735, // Long bits 0x3fe5555555555593L.
+     LG2 = 0.3999999999940942, // Long bits 0x3fd999999997fa04L.
+     LG3 = 0.2857142874366239, // Long bits 0x3fd2492494229359L.
+     LG4 = 0.22222198432149784, // Long bits 0x3fcc71c51d8e78afL.
+     LG5 = 0.1818357216161805, // Long bits 0x3fc7466496cb03deL.
+     LG6 = 0.15313837699209373, // Long bits 0x3fc39a09d078c69fL.
+     LG7 = 0.14798198605116586; // Long bits 0x3fc2f112df3e5244L.
+ 
+   /**
+    * Constants for computing {@link #pow(double, double)}. L and P are
+    * coefficients for series; OVT is -(1024-log2(ovfl+.5ulp)); and DP is ???.
+    * The P coefficients also calculate {@link #exp(double)}.
+    */
+   private static final double
+     L1 = 0.5999999999999946, // Long bits 0x3fe3333333333303L.
+     L2 = 0.4285714285785502, // Long bits 0x3fdb6db6db6fabffL.
+     L3 = 0.33333332981837743, // Long bits 0x3fd55555518f264dL.
+     L4 = 0.272728123808534, // Long bits 0x3fd17460a91d4101L.
+     L5 = 0.23066074577556175, // Long bits 0x3fcd864a93c9db65L.
+     L6 = 0.20697501780033842, // Long bits 0x3fca7e284a454eefL.
+     P1 = 0.16666666666666602, // Long bits 0x3fc555555555553eL.
+     P2 = -2.7777777777015593e-3, // Long bits 0xbf66c16c16bebd93L.
+     P3 = 6.613756321437934e-5, // Long bits 0x3f11566aaf25de2cL.
+     P4 = -1.6533902205465252e-6, // Long bits 0xbebbbd41c5d26bf1L.
+     P5 = 4.1381367970572385e-8, // Long bits 0x3e66376972bea4d0L.
+     DP_H = 0.5849624872207642, // Long bits 0x3fe2b80340000000L.
+     DP_L = 1.350039202129749e-8, // Long bits 0x3e4cfdeb43cfd006L.
+     OVT = 8.008566259537294e-17; // Long bits 0x3c971547652b82feL.
+ 
+   /**
+    * Coefficients for computing {@link #sin(double)}.
+    */
+   private static final double
+     S1 = -0.16666666666666632, // Long bits 0xbfc5555555555549L.
+     S2 = 8.33333333332249e-3, // Long bits 0x3f8111111110f8a6L.
+     S3 = -1.984126982985795e-4, // Long bits 0xbf2a01a019c161d5L.
+     S4 = 2.7557313707070068e-6, // Long bits 0x3ec71de357b1fe7dL.
+     S5 = -2.5050760253406863e-8, // Long bits 0xbe5ae5e68a2b9cebL.
+     S6 = 1.58969099521155e-10; // Long bits 0x3de5d93a5acfd57cL.
+ 
+   /**
+    * Coefficients for computing {@link #cos(double)}.
+    */
+   private static final double
+     C1 = 0.0416666666666666, // Long bits 0x3fa555555555554cL.
+     C2 = -1.388888888887411e-3, // Long bits 0xbf56c16c16c15177L.
+     C3 = 2.480158728947673e-5, // Long bits 0x3efa01a019cb1590L.
+     C4 = -2.7557314351390663e-7, // Long bits 0xbe927e4f809c52adL.
+     C5 = 2.087572321298175e-9, // Long bits 0x3e21ee9ebdb4b1c4L.
+     C6 = -1.1359647557788195e-11; // Long bits 0xbda8fae9be8838d4L.
+ 
+   /**
+    * Coefficients for computing {@link #tan(double)}.
+    */
+   private static final double
+     T0 = 0.3333333333333341, // Long bits 0x3fd5555555555563L.
+     T1 = 0.13333333333320124, // Long bits 0x3fc111111110fe7aL.
+     T2 = 0.05396825397622605, // Long bits 0x3faba1ba1bb341feL.
+     T3 = 0.021869488294859542, // Long bits 0x3f9664f48406d637L.
+     T4 = 8.8632398235993e-3, // Long bits 0x3f8226e3e96e8493L.
+     T5 = 3.5920791075913124e-3, // Long bits 0x3f6d6d22c9560328L.
+     T6 = 1.4562094543252903e-3, // Long bits 0x3f57dbc8fee08315L.
+     T7 = 5.880412408202641e-4, // Long bits 0x3f4344d8f2f26501L.
+     T8 = 2.464631348184699e-4, // Long bits 0x3f3026f71a8d1068L.
+     T9 = 7.817944429395571e-5, // Long bits 0x3f147e88a03792a6L.
+     T10 = 7.140724913826082e-5, // Long bits 0x3f12b80f32f0a7e9L.
+     T11 = -1.8558637485527546e-5, // Long bits 0xbef375cbdb605373L.
+     T12 = 2.590730518636337e-5; // Long bits 0x3efb2a7074bf7ad4L.
+ 
+   /**
+    * Coefficients for computing {@link #asin(double)} and
+    * {@link #acos(double)}.
+    */
+   private static final double
+     PS0 = 0.16666666666666666, // Long bits 0x3fc5555555555555L.
+     PS1 = -0.3255658186224009, // Long bits 0xbfd4d61203eb6f7dL.
+     PS2 = 0.20121253213486293, // Long bits 0x3fc9c1550e884455L.
+     PS3 = -0.04005553450067941, // Long bits 0xbfa48228b5688f3bL.
+     PS4 = 7.915349942898145e-4, // Long bits 0x3f49efe07501b288L.
+     PS5 = 3.479331075960212e-5, // Long bits 0x3f023de10dfdf709L.
+     QS1 = -2.403394911734414, // Long bits 0xc0033a271c8a2d4bL.
+     QS2 = 2.0209457602335057, // Long bits 0x40002ae59c598ac8L.
+     QS3 = -0.6882839716054533, // Long bits 0xbfe6066c1b8d0159L.
+     QS4 = 0.07703815055590194; // Long bits 0x3fb3b8c5b12e9282L.
+ 
+   /**
+    * Coefficients for computing {@link #atan(double)}.
+    */
+   private static final double
+     ATAN_0_5H = 0.4636476090008061, // Long bits 0x3fddac670561bb4fL.
+     ATAN_0_5L = 2.2698777452961687e-17, // Long bits 0x3c7a2b7f222f65e2L.
+     ATAN_1_5H = 0.982793723247329, // Long bits 0x3fef730bd281f69bL.
+     ATAN_1_5L = 1.3903311031230998e-17, // Long bits 0x3c7007887af0cbbdL.
+     AT0 = 0.3333333333333293, // Long bits 0x3fd555555555550dL.
+     AT1 = -0.19999999999876483, // Long bits 0xbfc999999998ebc4L.
+     AT2 = 0.14285714272503466, // Long bits 0x3fc24924920083ffL.
+     AT3 = -0.11111110405462356, // Long bits 0xbfbc71c6fe231671L.
+     AT4 = 0.09090887133436507, // Long bits 0x3fb745cdc54c206eL.
+     AT5 = -0.0769187620504483, // Long bits 0xbfb3b0f2af749a6dL.
+     AT6 = 0.06661073137387531, // Long bits 0x3fb10d66a0d03d51L.
+     AT7 = -0.058335701337905735, // Long bits 0xbfadde2d52defd9aL.
+     AT8 = 0.049768779946159324, // Long bits 0x3fa97b4b24760debL.
+     AT9 = -0.036531572744216916, // Long bits 0xbfa2b4442c6a6c2fL.
+     AT10 = 0.016285820115365782; // Long bits 0x3f90ad3ae322da11L.
+ 
+   /**
+    * Helper function for reducing an angle to a multiple of pi/2 within
+    * [-pi/4, pi/4].
+    *
+    * @param x the angle; not infinity or NaN, and outside pi/4
+    * @param y an array of 2 doubles modified to hold the remander x % pi/2
+    * @return the quadrant of the result, mod 4: 0: [-pi/4, pi/4],
+    *         1: [pi/4, 3*pi/4], 2: [3*pi/4, 5*pi/4], 3: [-3*pi/4, -pi/4]
+    */
+   private static int remPiOver2(double x, double[] y)
+   {
+     boolean negative = x < 0;
+     x = abs(x);
+     double z;
+     int n;
+     if (Configuration.DEBUG && (x <= PI / 4 || x != x
+                                 || x == Double.POSITIVE_INFINITY))
+       throw new InternalError("Assertion failure");
+     if (x < 3 * PI / 4) // If |x| is small.
+       {
+         z = x - PIO2_1;
+         if ((float) x != (float) (PI / 2)) // 33+53 bit pi is good enough.
+           {
+             y[0] = z - PIO2_1L;
+             y[1] = z - y[0] - PIO2_1L;
+           }
+         else // Near pi/2, use 33+33+53 bit pi.
+           {
+             z -= PIO2_2;
+             y[0] = z - PIO2_2L;
+             y[1] = z - y[0] - PIO2_2L;
+           }
+         n = 1;
+       }
+     else if (x <= TWO_20 * PI / 2) // Medium size.
+       {
+         n = (int) (2 / PI * x + 0.5);
+         z = x - n * PIO2_1;
+         double w = n * PIO2_1L; // First round good to 85 bits.
+         y[0] = z - w;
+         if (n >= 32 || (float) x == (float) (w))
+           {
+             if (x / y[0] >= TWO_16) // Second iteration, good to 118 bits.
+               {
+                 double t = z;
+                 w = n * PIO2_2;
+                 z = t - w;
+                 w = n * PIO2_2L - (t - z - w);
+                 y[0] = z - w;
+                 if (x / y[0] >= TWO_49) // Third iteration, 151 bits accuracy.
+                   {
+                     t = z;
+                     w = n * PIO2_3;
+                     z = t - w;
+                     w = n * PIO2_3L - (t - z - w);
+                     y[0] = z - w;
+                   }
+               }
+           }
+         y[1] = z - y[0] - w;
+       }
+     else
+       {
+         // All other (large) arguments.
+         int e0 = (int) (Double.doubleToLongBits(x) >> 52) - 1046;
+         z = scale(x, -e0); // e0 = ilogb(z) - 23.
+         double[] tx = new double[3];
+         for (int i = 0; i < 2; i++)
+           {
+             tx[i] = (int) z;
+             z = (z - tx[i]) * TWO_24;
+           }
+         tx[2] = z;
+         int nx = 2;
+         while (tx[nx] == 0)
+           nx--;
+         n = remPiOver2(tx, y, e0, nx);
+       }
+     if (negative)
+       {
+         y[0] = -y[0];
+         y[1] = -y[1];
+         return -n;
+       }
+     return n;
+   }
+ 
+   /**
+    * Helper function for reducing an angle to a multiple of pi/2 within
+    * [-pi/4, pi/4].
+    *
+    * @param x the positive angle, broken into 24-bit chunks
+    * @param y an array of 2 doubles modified to hold the remander x % pi/2
+    * @param e0 the exponent of x[0]
+    * @param nx the last index used in x
+    * @return the quadrant of the result, mod 4: 0: [-pi/4, pi/4],
+    *         1: [pi/4, 3*pi/4], 2: [3*pi/4, 5*pi/4], 3: [-3*pi/4, -pi/4]
+    */
+   private static int remPiOver2(double[] x, double[] y, int e0, int nx)
+   {
+     int i;
+     int ih;
+     int n;
+     double fw;
+     double z;
+     int[] iq = new int[20];
+     double[] f = new double[20];
+     double[] q = new double[20];
+     boolean recompute = false;
+ 
+     // Initialize jk, jz, jv, q0; note that 3>q0.
+     int jk = 4;
+     int jz = jk;
+     int jv = max((e0 - 3) / 24, 0);
+     int q0 = e0 - 24 * (jv + 1);
+ 
+     // Set up f[0] to f[nx+jk] where f[nx+jk] = TWO_OVER_PI[jv+jk].
+     int j = jv - nx;
+     int m = nx + jk;
+     for (i = 0; i <= m; i++, j++)
+       f[i] = (j < 0) ? 0 : TWO_OVER_PI[j];
+ 
+     // Compute q[0],q[1],...q[jk].
+     for (i = 0; i <= jk; i++)
+       {
+         for (j = 0, fw = 0; j <= nx; j++)
+           fw += x[j] * f[nx + i - j];
+         q[i] = fw;
+       }
+ 
+     do
+       {
+         // Distill q[] into iq[] reversingly.
+         for (i = 0, j = jz, z = q[jz]; j > 0; i++, j--)
+           {
+             fw = (int) (1 / TWO_24 * z);
+             iq[i] = (int) (z - TWO_24 * fw);
+             z = q[j - 1] + fw;
+           }
+ 
+         // Compute n.
+         z = scale(z, q0);
+         z -= 8 * floor(z * 0.125); // Trim off integer >= 8.
+         n = (int) z;
+         z -= n;
+         ih = 0;
+         if (q0 > 0) // Need iq[jz-1] to determine n.
+           {
+             i = iq[jz - 1] >> (24 - q0);
+             n += i;
+             iq[jz - 1] -= i << (24 - q0);
+             ih = iq[jz - 1] >> (23 - q0);
+           }
+         else if (q0 == 0)
+           ih = iq[jz - 1] >> 23;
+         else if (z >= 0.5)
+           ih = 2;
+ 
+         if (ih > 0) // If q > 0.5.
+           {
+             n += 1;
+             int carry = 0;
+             for (i = 0; i < jz; i++) // Compute 1-q.
+               {
+                 j = iq[i];
+                 if (carry == 0)
+                   {
+                     if (j != 0)
+                       {
+                         carry = 1;
+                         iq[i] = 0x1000000 - j;
+                       }
+                   }
+                 else
+                   iq[i] = 0xffffff - j;
+               }
+             switch (q0)
+               {
+               case 1: // Rare case: chance is 1 in 12 for non-default.
+                 iq[jz - 1] &= 0x7fffff;
+                 break;
+               case 2:
+                 iq[jz - 1] &= 0x3fffff;
+               }
+             if (ih == 2)
+               {
+                 z = 1 - z;
+                 if (carry != 0)
+                   z -= scale(1, q0);
+               }
+           }
+ 
+         // Check if recomputation is needed.
+         if (z == 0)
+           {
+             j = 0;
+             for (i = jz - 1; i >= jk; i--)
+               j |= iq[i];
+             if (j == 0) // Need recomputation.
+               {
+                 int k;
+                 for (k = 1; iq[jk - k] == 0; k++); // k = no. of terms needed.
+ 
+                 for (i = jz + 1; i <= jz + k; i++) // Add q[jz+1] to q[jz+k].
+                   {
+                     f[nx + i] = TWO_OVER_PI[jv + i];
+                     for (j = 0, fw = 0; j <= nx; j++)
+                       fw += x[j] * f[nx + i - j];
+                     q[i] = fw;
+                   }
+                 jz += k;
+                 recompute = true;
+               }
+           }
+       }
+     while (recompute);
+ 
+     // Chop off zero terms.
+     if (z == 0)
+       {
+         jz--;
+         q0 -= 24;
+         while (iq[jz] == 0)
+           {
+             jz--;
+             q0 -= 24;
+           }
+       }
+     else // Break z into 24-bit if necessary.
+       {
+         z = scale(z, -q0);
+         if (z >= TWO_24)
+           {
+             fw = (int) (1 / TWO_24 * z);
+             iq[jz] = (int) (z - TWO_24 * fw);
+             jz++;
+             q0 += 24;
+             iq[jz] = (int) fw;
+           }
+         else
+           iq[jz] = (int) z;
+       }
+ 
+     // Convert integer "bit" chunk to floating-point value.
+     fw = scale(1, q0);
+     for (i = jz; i >= 0; i--)
+       {
+         q[i] = fw * iq[i];
+         fw *= 1 / TWO_24;
+       }
+ 
+     // Compute PI_OVER_TWO[0,...,jk]*q[jz,...,0].
+     double[] fq = new double[20];
+     for (i = jz; i >= 0; i--)
+       {
+         fw = 0;
+         for (int k = 0; k <= jk && k <= jz - i; k++)
+           fw += PI_OVER_TWO[k] * q[i + k];
+         fq[jz - i] = fw;
+       }
+ 
+     // Compress fq[] into y[].
+     fw = 0;
+     for (i = jz; i >= 0; i--)
+       fw += fq[i];
+     y[0] = (ih == 0) ? fw : -fw;
+     fw = fq[0] - fw;
+     for (i = 1; i <= jz; i++)
+       fw += fq[i];
+     y[1] = (ih == 0) ? fw : -fw;
+     return n;
+   }
+ 
+   /**
+    * Helper method for scaling a double by a power of 2.
+    *
+    * @param x the double
+    * @param n the scale; |n| < 2048
+    * @return x * 2**n
+    */
+   private static double scale(double x, int n)
+   {
+     if (Configuration.DEBUG && abs(n) >= 2048)
+       throw new InternalError("Assertion failure");
+     if (x == 0 || x == Double.NEGATIVE_INFINITY
+         || ! (x < Double.POSITIVE_INFINITY) || n == 0)
+       return x;
+     long bits = Double.doubleToLongBits(x);
+     int exp = (int) (bits >> 52) & 0x7ff;
+     if (exp == 0) // Subnormal x.
+       {
+         x *= TWO_54;
+         exp = ((int) (Double.doubleToLongBits(x) >> 52) & 0x7ff) - 54;
+       }
+     exp += n;
+     if (exp > 0x7fe) // Overflow.
+       return Double.POSITIVE_INFINITY * x;
+     if (exp > 0) // Normal.
+       return Double.longBitsToDouble((bits & 0x800fffffffffffffL)
+                                      | ((long) exp << 52));
+     if (exp <= -54)
+       return 0 * x; // Underflow.
+     exp += 54; // Subnormal result.
+     x = Double.longBitsToDouble((bits & 0x800fffffffffffffL)
+                                 | ((long) exp << 52));
+     return x * (1 / TWO_54);
+   }
+ 
+   /**
+    * Helper trig function; computes sin in range [-pi/4, pi/4].
+    *
+    * @param x angle within about pi/4
+    * @param y tail of x, created by remPiOver2
+    * @return sin(x+y)
+    */
+   private static double sin(double x, double y)
+   {
+     if (Configuration.DEBUG && abs(x + y) > 0.7854)
+       throw new InternalError("Assertion failure");
+     if (abs(x) < 1 / TWO_27)
+       return x;  // If |x| ~< 2**-27, already know answer.
+ 
+     double z = x * x;
+     double v = z * x;
+     double r = S2 + z * (S3 + z * (S4 + z * (S5 + z * S6)));
+     if (y == 0)
+       return x + v * (S1 + z * r);
+     return x - ((z * (0.5 * y - v * r) - y) - v * S1);
+   }
+ 
+   /**
+    * Helper trig function; computes cos in range [-pi/4, pi/4].
+    *
+    * @param x angle within about pi/4
+    * @param y tail of x, created by remPiOver2
+    * @return cos(x+y)
+    */
+   private static double cos(double x, double y)
+   {
+     if (Configuration.DEBUG && abs(x + y) > 0.7854)
+       throw new InternalError("Assertion failure");
+     x = abs(x);
+     if (x < 1 / TWO_27)
+       return 1;  // If |x| ~< 2**-27, already know answer.
+ 
+     double z = x * x;
+     double r = z * (C1 + z * (C2 + z * (C3 + z * (C4 + z * (C5 + z * C6)))));
+ 
+     if (x < 0.3)
+       return 1 - (0.5 * z - (z * r - x * y));
+ 
+     double qx = (x > 0.78125) ? 0.28125 : (x * 0.25);
+     return 1 - qx - ((0.5 * z - qx) - (z * r - x * y));
+   }
+ 
+   /**
+    * Helper trig function; computes tan in range [-pi/4, pi/4].
+    *
+    * @param x angle within about pi/4
+    * @param y tail of x, created by remPiOver2
+    * @param invert true iff -1/tan should be returned instead
+    * @return tan(x+y)
+    */
+   private static double tan(double x, double y, boolean invert)
+   {
+     // PI/2 is irrational, so no double is a perfect multiple of it.
+     if (Configuration.DEBUG && (abs(x + y) > 0.7854 || (x == 0 && invert)))
+       throw new InternalError("Assertion failure");
+     boolean negative = x < 0;
+     if (negative)
+       {
+         x = -x;
+         y = -y;
+       }
+     if (x < 1 / TWO_28) // If |x| ~< 2**-28, already know answer.
+       return (negative ? -1 : 1) * (invert ? -1 / x : x);
+ 
+     double z;
+     double w;
+     boolean large = x >= 0.6744;
+     if (large)
+       {
+         z = PI / 4 - x;
+         w = PI_L / 4 - y;
+         x = z + w;
+         y = 0;
+       }
+     z = x * x;
+     w = z * z;
+     // Break x**5*(T1+x**2*T2+...) into
+     //   x**5(T1+x**4*T3+...+x**20*T11)
+     // + x**5(x**2*(T2+x**4*T4+...+x**22*T12)).
+     double r = T1 + w * (T3 + w * (T5 + w * (T7 + w * (T9 + w * T11))));
+     double v = z * (T2 + w * (T4 + w * (T6 + w * (T8 + w * (T10 + w * T12)))));
+     double s = z * x;
+     r = y + z * (s * (r + v) + y);
+     r += T0 * s;
+     w = x + r;
+     if (large)
+       {
+         v = invert ? -1 : 1;
+         return (negative ? -1 : 1) * (v - 2 * (x - (w * w / (w + v) - r)));
+       }
+     if (! invert)
+       return w;
+ 
+     // Compute -1.0/(x+r) accurately.
+     z = (float) w;
+     v = r - (z - x);
+     double a = -1 / w;
+     double t = (float) a;
+     return t + a * (1 + t * z + t * v);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/String.java gcc-4.1.0/libjava/classpath/java/lang/String.java
*** gcc-4.0.2/libjava/classpath/java/lang/String.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/String.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1915 ----
+ /* String.java -- immutable character sequences; the object of string literals
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import gnu.java.lang.CharData;
+ 
+ import java.io.Serializable;
+ import java.io.UnsupportedEncodingException;
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.CharacterCodingException;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ import java.nio.charset.CodingErrorAction;
+ import java.nio.charset.IllegalCharsetNameException;
+ import java.nio.charset.UnsupportedCharsetException;
+ import java.text.Collator;
+ import java.util.Comparator;
+ import java.util.Locale;
+ import java.util.regex.Matcher;
+ import java.util.regex.Pattern;
+ import java.util.regex.PatternSyntaxException;
+ 
+ /**
+  * Strings represent an immutable set of characters.  All String literals
+  * are instances of this class, and two string literals with the same contents
+  * refer to the same String object.
+  *
+  * <p>This class also includes a number of methods for manipulating the
+  * contents of strings (of course, creating a new object if there are any
+  * changes, as String is immutable). Case mapping relies on Unicode 3.0.0
+  * standards, where some character sequences have a different number of
+  * characters in the uppercase version than the lower case.
+  *
+  * <p>Strings are special, in that they are the only object with an overloaded
+  * operator. When you use '+' with at least one String argument, both
+  * arguments have String conversion performed on them, and another String (not
+  * guaranteed to be unique) results.
+  *
+  * <p>String is special-cased when doing data serialization - rather than
+  * listing the fields of this class, a String object is converted to a string
+  * literal in the object stream.
+  *
+  * @author Paul N. Fisher
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Per Bothner (bothner@cygnus.com)
+  * @since 1.0
+  * @status updated to 1.4; but could use better data sharing via offset field
+  */
+ public final class String implements Serializable, Comparable, CharSequence
+ {
+   // WARNING: String is a CORE class in the bootstrap cycle. See the comments
+   // in vm/reference/java/lang/Runtime for implications of this fact.
+ 
+   /**
+    * This is probably not necessary because this class is special cased already
+    * but it will avoid showing up as a discrepancy when comparing SUIDs.
+    */
+   private static final long serialVersionUID = -6849794470754667710L;
+ 
+   /**
+    * Stores unicode multi-character uppercase expansion table.
+    * @see #toUpperCase(Locale)
+    * @see CharData#UPPER_EXPAND
+    */
+   private static final char[] upperExpand
+ 	= zeroBasedStringValue(CharData.UPPER_EXPAND);
+ 
+   /**
+    * Stores unicode multi-character uppercase special casing table.
+    * @see #upperCaseExpansion(char)
+    * @see CharData#UPPER_SPECIAL
+    */
+   private static final char[] upperSpecial
+ 	  = zeroBasedStringValue(CharData.UPPER_SPECIAL);
+   
+   /**
+    * Characters which make up the String.
+    * Package access is granted for use by StringBuffer.
+    */
+   final char[] value;
+ 
+   /**
+    * Holds the number of characters in value.  This number is generally
+    * the same as value.length, but can be smaller because substrings and
+    * StringBuffers can share arrays. Package visible for use by trusted code.
+    */
+   final int count;
+ 
+   /**
+    * Caches the result of hashCode().  If this value is zero, the hashcode
+    * is considered uncached (even if 0 is the correct hash value).
+    */
+   private int cachedHashCode;
+ 
+   /**
+    * Holds the starting position for characters in value[].  Since
+    * substring()'s are common, the use of offset allows the operation
+    * to perform in O(1). Package access is granted for use by StringBuffer.
+    */
+   final int offset;
+ 
+   /**
+    * An implementation for {@link #CASE_INSENSITIVE_ORDER}.
+    * This must be {@link Serializable}. The class name is dictated by
+    * compatibility with Sun's JDK.
+    */
+   private static final class CaseInsensitiveComparator
+     implements Comparator, Serializable
+   {
+     /**
+      * Compatible with JDK 1.2.
+      */
+     private static final long serialVersionUID = 8575799808933029326L;
+ 
+     /**
+      * The default private constructor generates unnecessary overhead.
+      */
+     CaseInsensitiveComparator() {}
+ 
+     /**
+      * Compares to Strings, using
+      * <code>String.compareToIgnoreCase(String)</code>.
+      *
+      * @param o1 the first string
+      * @param o2 the second string
+      * @return &lt; 0, 0, or &gt; 0 depending on the case-insensitive
+      *         comparison of the two strings.
+      * @throws NullPointerException if either argument is null
+      * @throws ClassCastException if either argument is not a String
+      * @see #compareToIgnoreCase(String)
+      */
+     public int compare(Object o1, Object o2)
+     {
+       return ((String) o1).compareToIgnoreCase((String) o2);
+     }
+   } // class CaseInsensitiveComparator
+ 
+   /**
+    * A Comparator that uses <code>String.compareToIgnoreCase(String)</code>.
+    * This comparator is {@link Serializable}. Note that it ignores Locale,
+    * for that, you want a Collator.
+    *
+    * @see Collator#compare(String, String)
+    * @since 1.2
+    */
+   public static final Comparator CASE_INSENSITIVE_ORDER
+     = new CaseInsensitiveComparator();
+ 
+   /**
+    * Creates an empty String (length 0). Unless you really need a new object,
+    * consider using <code>""</code> instead.
+    */
+   public String()
+   {
+     value = "".value;
+     offset = 0;
+     count = 0;
+   }
+ 
+   /**
+    * Copies the contents of a String to a new String. Since Strings are
+    * immutable, only a shallow copy is performed.
+    *
+    * @param str String to copy
+    * @throws NullPointerException if value is null
+    */
+   public String(String str)
+   {
+     value = str.value;
+     offset = str.offset;
+     count = str.count;
+     cachedHashCode = str.cachedHashCode;
+   }
+ 
+   /**
+    * Creates a new String using the character sequence of the char array.
+    * Subsequent changes to data do not affect the String.
+    *
+    * @param data char array to copy
+    * @throws NullPointerException if data is null
+    */
+   public String(char[] data)
+   {
+     this(data, 0, data.length, false);
+   }
+ 
+   /**
+    * Creates a new String using the character sequence of a subarray of
+    * characters. The string starts at offset, and copies count chars.
+    * Subsequent changes to data do not affect the String.
+    *
+    * @param data char array to copy
+    * @param offset position (base 0) to start copying out of data
+    * @param count the number of characters from data to copy
+    * @throws NullPointerException if data is null
+    * @throws IndexOutOfBoundsException if (offset &lt; 0 || count &lt; 0
+    *         || offset + count &lt; 0 (overflow)
+    *         || offset + count &gt; data.length)
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    */
+   public String(char[] data, int offset, int count)
+   {
+     this(data, offset, count, false);
+   }
+ 
+   /**
+    * Creates a new String using an 8-bit array of integer values, starting at
+    * an offset, and copying up to the count. Each character c, using
+    * corresponding byte b, is created in the new String as if by performing:
+    *
+    * <pre>
+    * c = (char) (((hibyte &amp; 0xff) &lt;&lt; 8) | (b &amp; 0xff))
+    * </pre>
+    *
+    * @param ascii array of integer values
+    * @param hibyte top byte of each Unicode character
+    * @param offset position (base 0) to start copying out of ascii
+    * @param count the number of characters from ascii to copy
+    * @throws NullPointerException if ascii is null
+    * @throws IndexOutOfBoundsException if (offset &lt; 0 || count &lt; 0
+    *         || offset + count &lt; 0 (overflow)
+    *         || offset + count &gt; ascii.length)
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    * @see #String(byte[])
+    * @see #String(byte[], String)
+    * @see #String(byte[], int, int)
+    * @see #String(byte[], int, int, String)
+    * @deprecated use {@link #String(byte[], int, int, String)} to perform
+    *             correct encoding
+    */
+   public String(byte[] ascii, int hibyte, int offset, int count)
+   {
+     if (offset < 0)
+       throw new StringIndexOutOfBoundsException("offset: " + offset);
+     if (count < 0)
+       throw new StringIndexOutOfBoundsException("count: " + count);
+     if (offset + count < 0 || offset + count > ascii.length)
+       throw new StringIndexOutOfBoundsException("offset + count: "
+ 						+ (offset + count));
+     value = new char[count];
+     this.offset = 0;
+     this.count = count;
+     hibyte <<= 8;
+     offset += count;
+     while (--count >= 0)
+       value[count] = (char) (hibyte | (ascii[--offset] & 0xff));
+   }
+ 
+   /**
+    * Creates a new String using an 8-bit array of integer values. Each
+    * character c, using corresponding byte b, is created in the new String
+    * as if by performing:
+    *
+    * <pre>
+    * c = (char) (((hibyte &amp; 0xff) &lt;&lt; 8) | (b &amp; 0xff))
+    * </pre>
+    *
+    * @param ascii array of integer values
+    * @param hibyte top byte of each Unicode character
+    * @throws NullPointerException if ascii is null
+    * @see #String(byte[])
+    * @see #String(byte[], String)
+    * @see #String(byte[], int, int)
+    * @see #String(byte[], int, int, String)
+    * @see #String(byte[], int, int, int)
+    * @deprecated use {@link #String(byte[], String)} to perform
+    *             correct encoding
+    */
+   public String(byte[] ascii, int hibyte)
+   {
+     this(ascii, hibyte, 0, ascii.length);
+   }
+ 
+   /**
+    * Creates a new String using the portion of the byte array starting at the
+    * offset and ending at offset + count. Uses the specified encoding type
+    * to decode the byte array, so the resulting string may be longer or
+    * shorter than the byte array. For more decoding control, use
+    * {@link java.nio.charset.CharsetDecoder}, and for valid character sets,
+    * see {@link java.nio.charset.Charset}. The behavior is not specified if
+    * the decoder encounters invalid characters; this implementation throws
+    * an Error.
+    *
+    * @param data byte array to copy
+    * @param offset the offset to start at
+    * @param count the number of bytes in the array to use
+    * @param encoding the name of the encoding to use
+    * @throws NullPointerException if data or encoding is null
+    * @throws IndexOutOfBoundsException if offset or count is incorrect
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    * @throws UnsupportedEncodingException if encoding is not found
+    * @throws Error if the decoding fails
+    * @since 1.1
+    */
+   public String(byte[] data, int offset, int count, String encoding)
+     throws UnsupportedEncodingException
+   {
+     if (offset < 0)
+       throw new StringIndexOutOfBoundsException("offset: " + offset);
+     if (count < 0)
+       throw new StringIndexOutOfBoundsException("count: " + count);
+     if (offset + count < 0 || offset + count > data.length)
+       throw new StringIndexOutOfBoundsException("offset + count: "
+ 						+ (offset + count));
+     try 
+       {
+         CharsetDecoder csd = Charset.forName(encoding).newDecoder();
+ 	csd.onMalformedInput(CodingErrorAction.REPLACE);
+ 	csd.onUnmappableCharacter(CodingErrorAction.REPLACE);
+ 	CharBuffer cbuf = csd.decode(ByteBuffer.wrap(data, offset, count));
+  	if(cbuf.hasArray())
+  	  {
+  	    value = cbuf.array();
+ 	    this.offset = cbuf.position();
+ 	    this.count = cbuf.remaining();
+  	  } else {
+ 	    // Doubt this will happen. But just in case.
+ 	    value = new char[cbuf.remaining()];
+ 	    cbuf.get(value);
+ 	    this.offset = 0;
+ 	    this.count = value.length;
+ 	  }
+       } catch(CharacterCodingException e){
+ 	  throw new UnsupportedEncodingException("Encoding: "+encoding+
+ 						 " not found.");	  
+       } catch(IllegalCharsetNameException e){
+ 	  throw new UnsupportedEncodingException("Encoding: "+encoding+
+ 						 " not found.");
+       } catch(UnsupportedCharsetException e){
+ 	  throw new UnsupportedEncodingException("Encoding: "+encoding+
+ 						 " not found.");
+       }    
+   }
+ 
+   /**
+    * Creates a new String using the byte array. Uses the specified encoding
+    * type to decode the byte array, so the resulting string may be longer or
+    * shorter than the byte array. For more decoding control, use
+    * {@link java.nio.charset.CharsetDecoder}, and for valid character sets,
+    * see {@link java.nio.charset.Charset}. The behavior is not specified if
+    * the decoder encounters invalid characters; this implementation throws
+    * an Error.
+    *
+    * @param data byte array to copy
+    * @param encoding the name of the encoding to use
+    * @throws NullPointerException if data or encoding is null
+    * @throws UnsupportedEncodingException if encoding is not found
+    * @throws Error if the decoding fails
+    * @see #String(byte[], int, int, String)
+    * @since 1.1
+    */
+   public String(byte[] data, String encoding)
+     throws UnsupportedEncodingException
+   {
+     this(data, 0, data.length, encoding);
+   }
+ 
+   /**
+    * Creates a new String using the portion of the byte array starting at the
+    * offset and ending at offset + count. Uses the encoding of the platform's
+    * default charset, so the resulting string may be longer or shorter than
+    * the byte array. For more decoding control, use
+    * {@link java.nio.charset.CharsetDecoder}.  The behavior is not specified
+    * if the decoder encounters invalid characters; this implementation throws
+    * an Error.
+    *
+    * @param data byte array to copy
+    * @param offset the offset to start at
+    * @param count the number of bytes in the array to use
+    * @throws NullPointerException if data is null
+    * @throws IndexOutOfBoundsException if offset or count is incorrect
+    * @throws Error if the decoding fails
+    * @see #String(byte[], int, int, String)
+    * @since 1.1
+    */
+   public String(byte[] data, int offset, int count)
+   {
+     if (offset < 0)
+       throw new StringIndexOutOfBoundsException("offset: " + offset);
+     if (count < 0)
+       throw new StringIndexOutOfBoundsException("count: " + count);
+     if (offset + count < 0 || offset + count > data.length)
+       throw new StringIndexOutOfBoundsException("offset + count: "
+ 						+ (offset + count));
+     int o, c;
+     char[] v;
+     String encoding;
+     try 
+ 	{
+ 	  encoding = System.getProperty("file.encoding");
+ 	  CharsetDecoder csd = Charset.forName(encoding).newDecoder();
+ 	  csd.onMalformedInput(CodingErrorAction.REPLACE);
+ 	  csd.onUnmappableCharacter(CodingErrorAction.REPLACE);
+ 	  CharBuffer cbuf = csd.decode(ByteBuffer.wrap(data, offset, count));
+ 	  if(cbuf.hasArray())
+ 	    {
+               v = cbuf.array();
+ 	      o = cbuf.position();
+ 	      c = cbuf.remaining();
+ 	    } else {
+ 	      // Doubt this will happen. But just in case.
+ 	      v = new char[cbuf.remaining()];
+ 	      cbuf.get(v);
+ 	      o = 0;
+ 	      c = v.length;
+ 	    }
+ 	} catch(Exception ex){
+ 	    // If anything goes wrong (System property not set,
+ 	    // NIO provider not available, etc)
+ 	    // Default to the 'safe' encoding ISO8859_1
+ 	    v = new char[count];
+ 	    o = 0;
+ 	    c = count;
+ 	    for (int i=0;i<count;i++)
+ 	      v[i] = (char)data[offset+i];
+ 	}
+     this.value = v;
+     this.offset = o;
+     this.count = c;
+   }
+ 
+   /**
+    * Creates a new String using the byte array. Uses the encoding of the
+    * platform's default charset, so the resulting string may be longer or
+    * shorter than the byte array. For more decoding control, use
+    * {@link java.nio.charset.CharsetDecoder}.  The behavior is not specified
+    * if the decoder encounters invalid characters; this implementation throws
+    * an Error.
+    *
+    * @param data byte array to copy
+    * @throws NullPointerException if data is null
+    * @throws Error if the decoding fails
+    * @see #String(byte[], int, int)
+    * @see #String(byte[], int, int, String)
+    * @since 1.1
+    */
+   public String(byte[] data)
+   {
+     this(data, 0, data.length);
+   }
+ 
+   /**
+    * Creates a new String using the character sequence represented by
+    * the StringBuffer. Subsequent changes to buf do not affect the String.
+    *
+    * @param buffer StringBuffer to copy
+    * @throws NullPointerException if buffer is null
+    */
+   public String(StringBuffer buffer)
+   {
+     synchronized (buffer)
+       {
+         offset = 0;
+         count = buffer.count;
+         // Share unless buffer is 3/4 empty.
+         if ((count << 2) < buffer.value.length)
+           {
+             value = new char[count];
+             VMSystem.arraycopy(buffer.value, 0, value, 0, count);
+           }
+         else
+           {
+             buffer.shared = true;
+             value = buffer.value;
+           }
+       }
+   }
+ 
+   /**
+    * Creates a new String using the character sequence represented by
+    * the StringBuilder. Subsequent changes to buf do not affect the String.
+    *
+    * @param buffer StringBuilder to copy
+    * @throws NullPointerException if buffer is null
+    */
+   public String(StringBuilder buffer)
+   {
+     this(buffer.value, 0, buffer.count);
+   }
+ 
+   /**
+    * Special constructor which can share an array when safe to do so.
+    *
+    * @param data the characters to copy
+    * @param offset the location to start from
+    * @param count the number of characters to use
+    * @param dont_copy true if the array is trusted, and need not be copied
+    * @throws NullPointerException if chars is null
+    * @throws StringIndexOutOfBoundsException if bounds check fails
+    */
+   String(char[] data, int offset, int count, boolean dont_copy)
+   {
+     if (offset < 0)
+       throw new StringIndexOutOfBoundsException("offset: " + offset);
+     if (count < 0)
+       throw new StringIndexOutOfBoundsException("count: " + count);
+     if (offset + count < 0 || offset + count > data.length)
+       throw new StringIndexOutOfBoundsException("offset + count: "
+ 						+ (offset + count));
+     if (dont_copy)
+       {
+         value = data;
+         this.offset = offset;
+       }
+     else
+       {
+         value = new char[count];
+         VMSystem.arraycopy(data, offset, value, 0, count);
+         this.offset = 0;
+       }
+     this.count = count;
+   }
+ 
+   /**
+    * Returns the number of characters contained in this String.
+    *
+    * @return the length of this String
+    */
+   public int length()
+   {
+     return count;
+   }
+ 
+   /**
+    * Returns the character located at the specified index within this String.
+    *
+    * @param index position of character to return (base 0)
+    * @return character located at position index
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= length()
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    */
+   public char charAt(int index)
+   {
+     if (index < 0 || index >= count)
+       throw new StringIndexOutOfBoundsException(index);
+     return value[offset + index];
+   }
+ 
+   /**
+    * Get the code point at the specified index.  This is like #charAt(int),
+    * but if the character is the start of a surrogate pair, and the
+    * following character completes the pair, then the corresponding
+    * supplementary code point is returned.
+    * @param index the index of the codepoint to get, starting at 0
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    * @since 1.5
+    */
+   public synchronized int codePointAt(int index)
+   {
+     // Use the CharSequence overload as we get better range checking
+     // this way.
+     return Character.codePointAt(this, index);
+   }
+ 
+   /**
+    * Get the code point before the specified index.  This is like
+    * #codePointAt(int), but checks the characters at <code>index-1</code> and
+    * <code>index-2</code> to see if they form a supplementary code point.
+    * @param index the index just past the codepoint to get, starting at 0
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    * @since 1.5
+    */
+   public synchronized int codePointBefore(int index)
+   {
+     // Use the CharSequence overload as we get better range checking
+     // this way.
+     return Character.codePointBefore(this, index);
+   }
+ 
+   /**
+    * Copies characters from this String starting at a specified start index,
+    * ending at a specified stop index, to a character array starting at
+    * a specified destination begin index.
+    *
+    * @param srcBegin index to begin copying characters from this String
+    * @param srcEnd index after the last character to be copied from this String
+    * @param dst character array which this String is copied into
+    * @param dstBegin index to start writing characters into dst
+    * @throws NullPointerException if dst is null
+    * @throws IndexOutOfBoundsException if any indices are out of bounds
+    *         (while unspecified, source problems cause a
+    *         StringIndexOutOfBoundsException, and dst problems cause an
+    *         ArrayIndexOutOfBoundsException)
+    */
+   public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
+   {
+     if (srcBegin < 0 || srcBegin > srcEnd || srcEnd > count)
+       throw new StringIndexOutOfBoundsException();
+     VMSystem.arraycopy(value, srcBegin + offset,
+                      dst, dstBegin, srcEnd - srcBegin);
+   }
+ 
+   /**
+    * Copies the low byte of each character from this String starting at a
+    * specified start index, ending at a specified stop index, to a byte array
+    * starting at a specified destination begin index.
+    *
+    * @param srcBegin index to being copying characters from this String
+    * @param srcEnd index after the last character to be copied from this String
+    * @param dst byte array which each low byte of this String is copied into
+    * @param dstBegin index to start writing characters into dst
+    * @throws NullPointerException if dst is null and copy length is non-zero
+    * @throws IndexOutOfBoundsException if any indices are out of bounds
+    *         (while unspecified, source problems cause a
+    *         StringIndexOutOfBoundsException, and dst problems cause an
+    *         ArrayIndexOutOfBoundsException)
+    * @see #getBytes()
+    * @see #getBytes(String)
+    * @deprecated use {@link #getBytes()}, which uses a char to byte encoder
+    */
+   public void getBytes(int srcBegin, int srcEnd, byte dst[], int dstBegin)
+   {
+     if (srcBegin < 0 || srcBegin > srcEnd || srcEnd > count)
+       throw new StringIndexOutOfBoundsException();
+     int i = srcEnd - srcBegin;
+     srcBegin += offset;
+     while (--i >= 0)
+       dst[dstBegin++] = (byte) value[srcBegin++];
+   }
+ 
+   /**
+    * Converts the Unicode characters in this String to a byte array. Uses the
+    * specified encoding method, so the result may be longer or shorter than
+    * the String. For more encoding control, use
+    * {@link java.nio.charset.CharsetEncoder}, and for valid character sets,
+    * see {@link java.nio.charset.Charset}. Unsupported characters get
+    * replaced by an encoding specific byte.
+    *
+    * @param enc encoding name
+    * @return the resulting byte array
+    * @throws NullPointerException if enc is null
+    * @throws UnsupportedEncodingException if encoding is not supported
+    * @since 1.1
+    */
+   public byte[] getBytes(String enc) throws UnsupportedEncodingException
+   {
+     try 
+       {
+ 	CharsetEncoder cse = Charset.forName(enc).newEncoder();
+ 	cse.onMalformedInput(CodingErrorAction.REPLACE);
+ 	cse.onUnmappableCharacter(CodingErrorAction.REPLACE);
+ 	ByteBuffer bbuf = cse.encode(CharBuffer.wrap(value, offset, count));
+ 	if(bbuf.hasArray())
+ 	  return bbuf.array();
+ 	
+ 	// Doubt this will happen. But just in case.
+ 	byte[] bytes = new byte[bbuf.remaining()];
+ 	bbuf.get(bytes);
+ 	return bytes;
+       } 
+     catch(IllegalCharsetNameException e)
+       {
+ 	throw new UnsupportedEncodingException("Encoding: " + enc
+ 					       + " not found.");
+       } 
+     catch(UnsupportedCharsetException e)
+       {
+ 	throw new UnsupportedEncodingException("Encoding: " + enc
+ 					       + " not found.");
+       } 
+     catch(CharacterCodingException e)
+       {
+ 	// This shouldn't ever happen.
+ 	throw (InternalError) new InternalError().initCause(e);
+       }	  
+   }
+ 
+   /**
+    * Converts the Unicode characters in this String to a byte array. Uses the
+    * encoding of the platform's default charset, so the result may be longer
+    * or shorter than the String. For more encoding control, use
+    * {@link java.nio.charset.CharsetEncoder}. Unsupported characters get
+    * replaced by an encoding specific byte.
+    *
+    * @return the resulting byte array, or null on a problem
+    * @since 1.1
+    */
+   public byte[] getBytes()
+   { 
+       try 
+ 	  {
+ 	      return getBytes(System.getProperty("file.encoding"));
+ 	  } catch(Exception e) {
+ 	      // XXX - Throw an error here? 
+ 	      // For now, default to the 'safe' encoding.
+ 	      byte[] bytes = new byte[count];
+ 	      for(int i=0;i<count;i++)
+ 		  bytes[i] = (byte)((value[offset+i] <= 0xFF)?
+ 				    value[offset+i]:'?');
+ 	      return bytes;
+       }
+   }
+ 
+   /**
+    * Predicate which compares anObject to this. This is true only for Strings
+    * with the same character sequence.
+    *
+    * @param anObject the object to compare
+    * @return true if anObject is semantically equal to this
+    * @see #compareTo(String)
+    * @see #equalsIgnoreCase(String)
+    */
+   public boolean equals(Object anObject)
+   {
+     if (! (anObject instanceof String))
+       return false;
+     String str2 = (String) anObject;
+     if (count != str2.count)
+       return false;
+     if (value == str2.value && offset == str2.offset)
+       return true;
+     int i = count;
+     int x = offset;
+     int y = str2.offset;
+     while (--i >= 0)
+       if (value[x++] != str2.value[y++])
+         return false;
+     return true;
+   }
+ 
+   /**
+    * Compares the given StringBuffer to this String. This is true if the
+    * StringBuffer has the same content as this String at this moment.
+    *
+    * @param buffer the StringBuffer to compare to
+    * @return true if StringBuffer has the same character sequence
+    * @throws NullPointerException if the given StringBuffer is null
+    * @since 1.4
+    */
+   public boolean contentEquals(StringBuffer buffer)
+   {
+     synchronized (buffer)
+       {
+         if (count != buffer.count)
+           return false;
+         if (value == buffer.value)
+           return true; // Possible if shared.
+         int i = count;
+         int x = offset + count;
+         while (--i >= 0)
+           if (value[--x] != buffer.value[i])
+             return false;
+         return true;
+       }
+   }
+ 
+   /**
+    * Compares the given CharSequence to this String. This is true if
+    * the CharSequence has the same content as this String at this
+    * moment.
+    *
+    * @param seq the CharSequence to compare to
+    * @return true if CharSequence has the same character sequence
+    * @throws NullPointerException if the given CharSequence is null
+    * @since 1.5
+    */
+   public boolean contentEquals(CharSequence seq)
+   {
+     if (seq.length() != count)
+       return false;
+     for (int i = 0; i < count; ++i)
+       if (value[offset + i] != seq.charAt(i))
+ 	return false;
+     return true;
+   }
+ 
+   /**
+    * Compares a String to this String, ignoring case. This does not handle
+    * multi-character capitalization exceptions; instead the comparison is
+    * made on a character-by-character basis, and is true if:<br><ul>
+    * <li><code>c1 == c2</code></li>
+    * <li><code>Character.toUpperCase(c1)
+    *     == Character.toUpperCase(c2)</code></li>
+    * <li><code>Character.toLowerCase(c1)
+    *     == Character.toLowerCase(c2)</code></li>
+    * </ul>
+    *
+    * @param anotherString String to compare to this String
+    * @return true if anotherString is equal, ignoring case
+    * @see #equals(Object)
+    * @see Character#toUpperCase(char)
+    * @see Character#toLowerCase(char)
+    */
+   public boolean equalsIgnoreCase(String anotherString)
+   {
+     if (anotherString == null || count != anotherString.count)
+       return false;
+     int i = count;
+     int x = offset;
+     int y = anotherString.offset;
+     while (--i >= 0)
+       {
+         char c1 = value[x++];
+         char c2 = anotherString.value[y++];
+         // Note that checking c1 != c2 is redundant, but avoids method calls.
+         if (c1 != c2
+             && Character.toUpperCase(c1) != Character.toUpperCase(c2)
+             && Character.toLowerCase(c1) != Character.toLowerCase(c2))
+           return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * Compares this String and another String (case sensitive,
+    * lexicographically). The result is less than 0 if this string sorts
+    * before the other, 0 if they are equal, and greater than 0 otherwise.
+    * After any common starting sequence is skipped, the result is
+    * <code>this.charAt(k) - anotherString.charAt(k)</code> if both strings
+    * have characters remaining, or
+    * <code>this.length() - anotherString.length()</code> if one string is
+    * a subsequence of the other.
+    *
+    * @param anotherString the String to compare against
+    * @return the comparison
+    * @throws NullPointerException if anotherString is null
+    */
+   public int compareTo(String anotherString)
+   {
+     int i = Math.min(count, anotherString.count);
+     int x = offset;
+     int y = anotherString.offset;
+     while (--i >= 0)
+       {
+         int result = value[x++] - anotherString.value[y++];
+         if (result != 0)
+           return result;
+       }
+     return count - anotherString.count;
+   }
+ 
+   /**
+    * Behaves like <code>compareTo(java.lang.String)</code> unless the Object
+    * is not a <code>String</code>.  Then it throws a
+    * <code>ClassCastException</code>.
+    *
+    * @param o the object to compare against
+    * @return the comparison
+    * @throws NullPointerException if o is null
+    * @throws ClassCastException if o is not a <code>String</code>
+    * @since 1.2
+    */
+   public int compareTo(Object o)
+   {
+     return compareTo((String) o);
+   }
+ 
+   /**
+    * Compares this String and another String (case insensitive). This
+    * comparison is <em>similar</em> to equalsIgnoreCase, in that it ignores
+    * locale and multi-characater capitalization, and compares characters
+    * after performing
+    * <code>Character.toLowerCase(Character.toUpperCase(c))</code> on each
+    * character of the string. This is unsatisfactory for locale-based
+    * comparison, in which case you should use {@link java.text.Collator}.
+    *
+    * @param str the string to compare against
+    * @return the comparison
+    * @see Collator#compare(String, String)
+    * @since 1.2
+    */
+   public int compareToIgnoreCase(String str)
+   {
+     int i = Math.min(count, str.count);
+     int x = offset;
+     int y = str.offset;
+     while (--i >= 0)
+       {
+         int result = Character.toLowerCase(Character.toUpperCase(value[x++]))
+           - Character.toLowerCase(Character.toUpperCase(str.value[y++]));
+         if (result != 0)
+           return result;
+       }
+     return count - str.count;
+   }  
+ 
+   /**
+    * Predicate which determines if this String matches another String
+    * starting at a specified offset for each String and continuing
+    * for a specified length. Indices out of bounds are harmless, and give
+    * a false result.
+    *
+    * @param toffset index to start comparison at for this String
+    * @param other String to compare region to this String
+    * @param ooffset index to start comparison at for other
+    * @param len number of characters to compare
+    * @return true if regions match (case sensitive)
+    * @throws NullPointerException if other is null
+    */
+   public boolean regionMatches(int toffset, String other, int ooffset, int len)
+   {
+     return regionMatches(false, toffset, other, ooffset, len);
+   }
+ 
+   /**
+    * Predicate which determines if this String matches another String
+    * starting at a specified offset for each String and continuing
+    * for a specified length, optionally ignoring case. Indices out of bounds
+    * are harmless, and give a false result. Case comparisons are based on
+    * <code>Character.toLowerCase()</code> and
+    * <code>Character.toUpperCase()</code>, not on multi-character
+    * capitalization expansions.
+    *
+    * @param ignoreCase true if case should be ignored in comparision
+    * @param toffset index to start comparison at for this String
+    * @param other String to compare region to this String
+    * @param ooffset index to start comparison at for other
+    * @param len number of characters to compare
+    * @return true if regions match, false otherwise
+    * @throws NullPointerException if other is null
+    */
+   public boolean regionMatches(boolean ignoreCase, int toffset,
+                                String other, int ooffset, int len)
+   {
+     if (toffset < 0 || ooffset < 0 || toffset + len > count
+         || ooffset + len > other.count)
+       return false;
+     toffset += offset;
+     ooffset += other.offset;
+     while (--len >= 0)
+       {
+         char c1 = value[toffset++];
+         char c2 = other.value[ooffset++];
+         // Note that checking c1 != c2 is redundant when ignoreCase is true,
+         // but it avoids method calls.
+         if (c1 != c2
+             && (! ignoreCase
+                 || (Character.toLowerCase(c1) != Character.toLowerCase(c2)
+                     && (Character.toUpperCase(c1)
+                         != Character.toUpperCase(c2)))))
+           return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * Predicate which determines if this String contains the given prefix,
+    * beginning comparison at toffset. The result is false if toffset is
+    * negative or greater than this.length(), otherwise it is the same as
+    * <code>this.substring(toffset).startsWith(prefix)</code>.
+    *
+    * @param prefix String to compare
+    * @param toffset offset for this String where comparison starts
+    * @return true if this String starts with prefix
+    * @throws NullPointerException if prefix is null
+    * @see #regionMatches(boolean, int, String, int, int)
+    */
+   public boolean startsWith(String prefix, int toffset)
+   {
+     return regionMatches(false, toffset, prefix, 0, prefix.count);
+   }
+ 
+   /**
+    * Predicate which determines if this String starts with a given prefix.
+    * If the prefix is an empty String, true is returned.
+    *
+    * @param prefix String to compare
+    * @return true if this String starts with the prefix
+    * @throws NullPointerException if prefix is null
+    * @see #startsWith(String, int)
+    */
+   public boolean startsWith(String prefix)
+   {
+     return regionMatches(false, 0, prefix, 0, prefix.count);
+   }
+ 
+   /**
+    * Predicate which determines if this String ends with a given suffix.
+    * If the suffix is an empty String, true is returned.
+    *
+    * @param suffix String to compare
+    * @return true if this String ends with the suffix
+    * @throws NullPointerException if suffix is null
+    * @see #regionMatches(boolean, int, String, int, int)
+    */
+   public boolean endsWith(String suffix)
+   {
+     return regionMatches(false, count - suffix.count, suffix, 0, suffix.count);
+   }
+ 
+   /**
+    * Computes the hashcode for this String. This is done with int arithmetic,
+    * where ** represents exponentiation, by this formula:<br>
+    * <code>s[0]*31**(n-1) + s[1]*31**(n-2) + ... + s[n-1]</code>.
+    *
+    * @return hashcode value of this String
+    */
+   public int hashCode()
+   {
+     if (cachedHashCode != 0)
+       return cachedHashCode;
+ 
+     // Compute the hash code using a local variable to be reentrant.
+     int hashCode = 0;
+     int limit = count + offset;
+     for (int i = offset; i < limit; i++)
+       hashCode = hashCode * 31 + value[i];
+     return cachedHashCode = hashCode;
+   }
+ 
+   /**
+    * Finds the first instance of a character in this String.
+    *
+    * @param ch character to find
+    * @return location (base 0) of the character, or -1 if not found
+    */
+   public int indexOf(int ch)
+   {
+     return indexOf(ch, 0);
+   }
+ 
+   /**
+    * Finds the first instance of a character in this String, starting at
+    * a given index.  If starting index is less than 0, the search
+    * starts at the beginning of this String.  If the starting index
+    * is greater than the length of this String, -1 is returned.
+    *
+    * @param ch character to find
+    * @param fromIndex index to start the search
+    * @return location (base 0) of the character, or -1 if not found
+    */
+   public int indexOf(int ch, int fromIndex)
+   {
+     if ((char) ch != ch)
+       return -1;
+     if (fromIndex < 0)
+       fromIndex = 0;
+     int i = fromIndex + offset;
+     for ( ; fromIndex < count; fromIndex++)
+       if (value[i++] == ch)
+         return fromIndex;
+     return -1;
+   }
+ 
+   /**
+    * Finds the last instance of a character in this String.
+    *
+    * @param ch character to find
+    * @return location (base 0) of the character, or -1 if not found
+    */
+   public int lastIndexOf(int ch)
+   {
+     return lastIndexOf(ch, count - 1);
+   }
+ 
+   /**
+    * Finds the last instance of a character in this String, starting at
+    * a given index.  If starting index is greater than the maximum valid
+    * index, then the search begins at the end of this String.  If the
+    * starting index is less than zero, -1 is returned.
+    *
+    * @param ch character to find
+    * @param fromIndex index to start the search
+    * @return location (base 0) of the character, or -1 if not found
+    */
+   public int lastIndexOf(int ch, int fromIndex)
+   {
+     if ((char) ch != ch)
+       return -1;
+     if (fromIndex >= count)
+       fromIndex = count - 1;
+     int i = fromIndex + offset;
+     for ( ; fromIndex >= 0; fromIndex--)
+       if (value[i--] == ch)
+         return fromIndex;
+     return -1;
+   }
+ 
+   /**
+    * Finds the first instance of a String in this String.
+    *
+    * @param str String to find
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    */
+   public int indexOf(String str)
+   {
+     return indexOf(str, 0);
+   }
+ 
+   /**
+    * Finds the first instance of a String in this String, starting at
+    * a given index.  If starting index is less than 0, the search
+    * starts at the beginning of this String.  If the starting index
+    * is greater than the length of this String, -1 is returned.
+    *
+    * @param str String to find
+    * @param fromIndex index to start the search
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    */
+   public int indexOf(String str, int fromIndex)
+   {
+     if (fromIndex < 0)
+       fromIndex = 0;
+     int limit = count - str.count;
+     for ( ; fromIndex <= limit; fromIndex++)
+       if (regionMatches(fromIndex, str, 0, str.count))
+         return fromIndex;
+     return -1;
+   }
+ 
+   /**
+    * Finds the last instance of a String in this String.
+    *
+    * @param str String to find
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    */
+   public int lastIndexOf(String str)
+   {
+     return lastIndexOf(str, count - str.count);
+   }
+ 
+   /**
+    * Finds the last instance of a String in this String, starting at
+    * a given index.  If starting index is greater than the maximum valid
+    * index, then the search begins at the end of this String.  If the
+    * starting index is less than zero, -1 is returned.
+    *
+    * @param str String to find
+    * @param fromIndex index to start the search
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    */
+   public int lastIndexOf(String str, int fromIndex)
+   {
+     fromIndex = Math.min(fromIndex, count - str.count);
+     for ( ; fromIndex >= 0; fromIndex--)
+       if (regionMatches(fromIndex, str, 0, str.count))
+         return fromIndex;
+     return -1;
+   }
+ 
+   /**
+    * Creates a substring of this String, starting at a specified index
+    * and ending at the end of this String.
+    *
+    * @param begin index to start substring (base 0)
+    * @return new String which is a substring of this String
+    * @throws IndexOutOfBoundsException if begin &lt; 0 || begin &gt; length()
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    */
+   public String substring(int begin)
+   {
+     return substring(begin, count);
+   }
+ 
+   /**
+    * Creates a substring of this String, starting at a specified index
+    * and ending at one character before a specified index.
+    *
+    * @param beginIndex index to start substring (inclusive, base 0)
+    * @param endIndex index to end at (exclusive)
+    * @return new String which is a substring of this String
+    * @throws IndexOutOfBoundsException if begin &lt; 0 || end &gt; length()
+    *         || begin &gt; end (while unspecified, this is a
+    *         StringIndexOutOfBoundsException)
+    */
+   public String substring(int beginIndex, int endIndex)
+   {
+     if (beginIndex < 0 || endIndex > count || beginIndex > endIndex)
+       throw new StringIndexOutOfBoundsException();
+     if (beginIndex == 0 && endIndex == count)
+       return this;
+     int len = endIndex - beginIndex;
+     // Package constructor avoids an array copy.
+     return new String(value, beginIndex + offset, len,
+                       (len << 2) >= value.length);
+   }
+ 
+   /**
+    * Creates a substring of this String, starting at a specified index
+    * and ending at one character before a specified index. This behaves like
+    * <code>substring(begin, end)</code>.
+    *
+    * @param begin index to start substring (inclusive, base 0)
+    * @param end index to end at (exclusive)
+    * @return new String which is a substring of this String
+    * @throws IndexOutOfBoundsException if begin &lt; 0 || end &gt; length()
+    *         || begin &gt; end
+    * @since 1.4
+    */
+   public CharSequence subSequence(int begin, int end)
+   {
+     return substring(begin, end);
+   }
+ 
+   /**
+    * Concatenates a String to this String. This results in a new string unless
+    * one of the two originals is "".
+    *
+    * @param str String to append to this String
+    * @return newly concatenated String
+    * @throws NullPointerException if str is null
+    */
+   public String concat(String str)
+   {
+     if (str.count == 0)
+       return this;
+     if (count == 0)
+       return str;
+     char[] newStr = new char[count + str.count];
+     VMSystem.arraycopy(value, offset, newStr, 0, count);
+     VMSystem.arraycopy(str.value, str.offset, newStr, count, str.count);
+     // Package constructor avoids an array copy.
+     return new String(newStr, 0, newStr.length, true);
+   }
+ 
+   /**
+    * Replaces every instance of a character in this String with a new
+    * character. If no replacements occur, this is returned.
+    *
+    * @param oldChar the old character to replace
+    * @param newChar the new character
+    * @return new String with all instances of oldChar replaced with newChar
+    */
+   public String replace(char oldChar, char newChar)
+   {
+     if (oldChar == newChar)
+       return this;
+     int i = count;
+     int x = offset - 1;
+     while (--i >= 0)
+       if (value[++x] == oldChar)
+         break;
+     if (i < 0)
+       return this;
+     char[] newStr = (char[]) value.clone();
+     newStr[x] = newChar;
+     while (--i >= 0)
+       if (value[++x] == oldChar)
+         newStr[x] = newChar;
+     // Package constructor avoids an array copy.
+     return new String(newStr, offset, count, true);
+   }
+ 
+   /**
+    * Test if this String matches a regular expression. This is shorthand for
+    * <code>{@link Pattern}.matches(regex, this)</code>.
+    *
+    * @param regex the pattern to match
+    * @return true if the pattern matches
+    * @throws NullPointerException if regex is null
+    * @throws PatternSyntaxException if regex is invalid
+    * @see Pattern#matches(String, CharSequence)
+    * @since 1.4
+    */
+   public boolean matches(String regex)
+   {
+     return Pattern.matches(regex, this);
+   }
+ 
+   /**
+    * Replaces the first substring match of the regular expression with a
+    * given replacement. This is shorthand for <code>{@link Pattern}
+    *   .compile(regex).matcher(this).replaceFirst(replacement)</code>.
+    *
+    * @param regex the pattern to match
+    * @param replacement the replacement string
+    * @return the modified string
+    * @throws NullPointerException if regex or replacement is null
+    * @throws PatternSyntaxException if regex is invalid
+    * @see #replaceAll(String, String)
+    * @see Pattern#compile(String)
+    * @see Pattern#matcher(CharSequence)
+    * @see Matcher#replaceFirst(String)
+    * @since 1.4
+    */
+   public String replaceFirst(String regex, String replacement)
+   {
+     return Pattern.compile(regex).matcher(this).replaceFirst(replacement);
+   }
+ 
+   /**
+    * Replaces all matching substrings of the regular expression with a
+    * given replacement. This is shorthand for <code>{@link Pattern}
+    *   .compile(regex).matcher(this).replaceAll(replacement)</code>.
+    *
+    * @param regex the pattern to match
+    * @param replacement the replacement string
+    * @return the modified string
+    * @throws NullPointerException if regex or replacement is null
+    * @throws PatternSyntaxException if regex is invalid
+    * @see #replaceFirst(String, String)
+    * @see Pattern#compile(String)
+    * @see Pattern#matcher(CharSequence)
+    * @see Matcher#replaceAll(String)
+    * @since 1.4
+    */
+   public String replaceAll(String regex, String replacement)
+   {
+     return Pattern.compile(regex).matcher(this).replaceAll(replacement);
+   }
+ 
+   /**
+    * Split this string around the matches of a regular expression. Each
+    * element of the returned array is the largest block of characters not
+    * terminated by the regular expression, in the order the matches are found.
+    *
+    * <p>The limit affects the length of the array. If it is positive, the
+    * array will contain at most n elements (n - 1 pattern matches). If
+    * negative, the array length is unlimited, but there can be trailing empty
+    * entries. if 0, the array length is unlimited, and trailing empty entries
+    * are discarded.
+    *
+    * <p>For example, splitting "boo:and:foo" yields:<br>
+    * <table border=0>
+    * <th><td>Regex</td> <td>Limit</td> <td>Result</td></th>
+    * <tr><td>":"</td>   <td>2</td>  <td>{ "boo", "and:foo" }</td></tr>
+    * <tr><td>":"</td>   <td>t</td>  <td>{ "boo", "and", "foo" }</td></tr>
+    * <tr><td>":"</td>   <td>-2</td> <td>{ "boo", "and", "foo" }</td></tr>
+    * <tr><td>"o"</td>   <td>5</td>  <td>{ "b", "", ":and:f", "", "" }</td></tr>
+    * <tr><td>"o"</td>   <td>-2</td> <td>{ "b", "", ":and:f", "", "" }</td></tr>
+    * <tr><td>"o"</td>   <td>0</td>  <td>{ "b", "", ":and:f" }</td></tr>
+    * </table>
+    *
+    * <p>This is shorthand for
+    * <code>{@link Pattern}.compile(regex).split(this, limit)</code>.
+    *
+    * @param regex the pattern to match
+    * @param limit the limit threshold
+    * @return the array of split strings
+    * @throws NullPointerException if regex or replacement is null
+    * @throws PatternSyntaxException if regex is invalid
+    * @see Pattern#compile(String)
+    * @see Pattern#split(CharSequence, int)
+    * @since 1.4
+    */
+   public String[] split(String regex, int limit)
+   {
+     return Pattern.compile(regex).split(this, limit);
+   }
+ 
+   /**
+    * Split this string around the matches of a regular expression. Each
+    * element of the returned array is the largest block of characters not
+    * terminated by the regular expression, in the order the matches are found.
+    * The array length is unlimited, and trailing empty entries are discarded,
+    * as though calling <code>split(regex, 0)</code>.
+    *
+    * @param regex the pattern to match
+    * @return the array of split strings
+    * @throws NullPointerException if regex or replacement is null
+    * @throws PatternSyntaxException if regex is invalid
+    * @see #split(String, int)
+    * @see Pattern#compile(String)
+    * @see Pattern#split(CharSequence, int)
+    * @since 1.4
+    */
+   public String[] split(String regex)
+   {
+     return Pattern.compile(regex).split(this, 0);
+   }
+ 
+   /**
+    * Lowercases this String according to a particular locale. This uses
+    * Unicode's special case mappings, as applied to the given Locale, so the
+    * resulting string may be a different length.
+    *
+    * @param loc locale to use
+    * @return new lowercased String, or this if no characters were lowercased
+    * @throws NullPointerException if loc is null
+    * @see #toUpperCase(Locale)
+    * @since 1.1
+    */
+   public String toLowerCase(Locale loc)
+   {
+     // First, see if the current string is already lower case.
+     boolean turkish = "tr".equals(loc.getLanguage());
+     int i = count;
+     int x = offset - 1;
+     while (--i >= 0)
+       {
+         char ch = value[++x];
+         if ((turkish && ch == '\u0049')
+             || ch != Character.toLowerCase(ch))
+           break;
+       }
+     if (i < 0)
+       return this;
+ 
+     // Now we perform the conversion. Fortunately, there are no multi-character
+     // lowercase expansions in Unicode 3.0.0.
+     char[] newStr = (char[]) value.clone();
+     do
+       {
+         char ch = value[x];
+         // Hardcoded special case.
+         newStr[x++] = (turkish && ch == '\u0049') ? '\u0131'
+           : Character.toLowerCase(ch);
+       }
+     while (--i >= 0);
+     // Package constructor avoids an array copy.
+     return new String(newStr, offset, count, true);
+   }
+ 
+   /**
+    * Lowercases this String. This uses Unicode's special case mappings, as
+    * applied to the platform's default Locale, so the resulting string may
+    * be a different length.
+    *
+    * @return new lowercased String, or this if no characters were lowercased
+    * @see #toLowerCase(Locale)
+    * @see #toUpperCase()
+    */
+   public String toLowerCase()
+   {
+     return toLowerCase(Locale.getDefault());
+   }
+ 
+   /**
+    * Uppercases this String according to a particular locale. This uses
+    * Unicode's special case mappings, as applied to the given Locale, so the
+    * resulting string may be a different length.
+    *
+    * @param loc locale to use
+    * @return new uppercased String, or this if no characters were uppercased
+    * @throws NullPointerException if loc is null
+    * @see #toLowerCase(Locale)
+    * @since 1.1
+    */
+   public String toUpperCase(Locale loc)
+   {
+     // First, see how many characters we have to grow by, as well as if the
+     // current string is already upper case.
+     boolean turkish = "tr".equals(loc.getLanguage());
+     int expand = 0;
+     boolean unchanged = true;
+     int i = count;
+     int x = i + offset;
+     while (--i >= 0)
+       {
+         char ch = value[--x];
+         expand += upperCaseExpansion(ch);
+         unchanged = (unchanged && expand == 0
+                      && ! (turkish && ch == '\u0069')
+                      && ch == Character.toUpperCase(ch));
+       }
+     if (unchanged)
+       return this;
+ 
+     // Now we perform the conversion.
+     i = count;
+     if (expand == 0)
+       {
+         char[] newStr = (char[]) value.clone();
+         while (--i >= 0)
+           {
+             char ch = value[x];
+             // Hardcoded special case.
+             newStr[x++] = (turkish && ch == '\u0069') ? '\u0130'
+               : Character.toUpperCase(ch);
+           }
+         // Package constructor avoids an array copy.
+         return new String(newStr, offset, count, true);
+       }
+ 
+     // Expansion is necessary.
+     char[] newStr = new char[count + expand];
+     int j = 0;
+     while (--i >= 0)
+       {
+         char ch = value[x++];
+         // Hardcoded special case.
+         if (turkish && ch == '\u0069')
+           {
+             newStr[j++] = '\u0130';
+             continue;
+           }
+         expand = upperCaseExpansion(ch);
+         if (expand > 0)
+           {
+             int index = upperCaseIndex(ch);
+             while (expand-- >= 0)
+               newStr[j++] = upperExpand[index++];
+           }
+         else
+           newStr[j++] = Character.toUpperCase(ch);
+       }
+     // Package constructor avoids an array copy.
+     return new String(newStr, 0, newStr.length, true);
+   }
+ 
+   /**
+    * Uppercases this String. This uses Unicode's special case mappings, as
+    * applied to the platform's default Locale, so the resulting string may
+    * be a different length.
+    *
+    * @return new uppercased String, or this if no characters were uppercased
+    * @see #toUpperCase(Locale)
+    * @see #toLowerCase()
+    */
+   public String toUpperCase()
+   {
+     return toUpperCase(Locale.getDefault());
+   }
+ 
+   /**
+    * Trims all characters less than or equal to <code>'\u0020'</code>
+    * (<code>' '</code>) from the beginning and end of this String. This
+    * includes many, but not all, ASCII control characters, and all
+    * {@link Character#isWhitespace(char)}.
+    *
+    * @return new trimmed String, or this if nothing trimmed
+    */
+   public String trim()
+   {
+     int limit = count + offset;
+     if (count == 0 || (value[offset] > '\u0020'
+                        && value[limit - 1] > '\u0020'))
+       return this;
+     int begin = offset;
+     do
+       if (begin == limit)
+         return "";
+     while (value[begin++] <= '\u0020');
+     int end = limit;
+     while (value[--end] <= '\u0020');
+     return substring(begin - offset - 1, end - offset + 1);
+   }
+ 
+   /**
+    * Returns this, as it is already a String!
+    *
+    * @return this
+    */
+   public String toString()
+   {
+     return this;
+   }
+ 
+   /**
+    * Copies the contents of this String into a character array. Subsequent
+    * changes to the array do not affect the String.
+    *
+    * @return character array copying the String
+    */
+   public char[] toCharArray()
+   {
+     if (count == value.length)
+       return (char[]) value.clone();
+ 
+     char[] copy = new char[count];
+     VMSystem.arraycopy(value, offset, copy, 0, count);
+     return copy;
+   }
+ 
+   /**
+    * Returns a String representation of an Object. This is "null" if the
+    * object is null, otherwise it is <code>obj.toString()</code> (which
+    * can be null).
+    *
+    * @param obj the Object
+    * @return the string conversion of obj
+    */
+   public static String valueOf(Object obj)
+   {
+     return obj == null ? "null" : obj.toString();
+   }
+ 
+   /**
+    * Returns a String representation of a character array. Subsequent
+    * changes to the array do not affect the String.
+    *
+    * @param data the character array
+    * @return a String containing the same character sequence as data
+    * @throws NullPointerException if data is null
+    * @see #valueOf(char[], int, int)
+    * @see #String(char[])
+    */
+   public static String valueOf(char[] data)
+   {
+     return valueOf (data, 0, data.length);
+   }
+ 
+   /**
+    * Returns a String representing the character sequence of the char array,
+    * starting at the specified offset, and copying chars up to the specified
+    * count. Subsequent changes to the array do not affect the String.
+    *
+    * @param data character array
+    * @param offset position (base 0) to start copying out of data
+    * @param count the number of characters from data to copy
+    * @return String containing the chars from data[offset..offset+count]
+    * @throws NullPointerException if data is null
+    * @throws IndexOutOfBoundsException if (offset &lt; 0 || count &lt; 0
+    *         || offset + count &lt; 0 (overflow)
+    *         || offset + count &gt; data.length)
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    * @see #String(char[], int, int)
+    */
+   public static String valueOf(char[] data, int offset, int count)
+   {
+     return new String(data, offset, count, false);
+   }
+ 
+   /**
+    * Returns a String representing the character sequence of the char array,
+    * starting at the specified offset, and copying chars up to the specified
+    * count. Subsequent changes to the array do not affect the String.
+    *
+    * @param data character array
+    * @param offset position (base 0) to start copying out of data
+    * @param count the number of characters from data to copy
+    * @return String containing the chars from data[offset..offset+count]
+    * @throws NullPointerException if data is null
+    * @throws IndexOutOfBoundsException if (offset &lt; 0 || count &lt; 0
+    *         || offset + count &lt; 0 (overflow)
+    *         || offset + count &gt; data.length)
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    * @see #String(char[], int, int)
+    */
+   public static String copyValueOf(char[] data, int offset, int count)
+   {
+     return new String(data, offset, count, false);
+   }
+ 
+   /**
+    * Returns a String representation of a character array. Subsequent
+    * changes to the array do not affect the String.
+    *
+    * @param data the character array
+    * @return a String containing the same character sequence as data
+    * @throws NullPointerException if data is null
+    * @see #copyValueOf(char[], int, int)
+    * @see #String(char[])
+    */
+   public static String copyValueOf(char[] data)
+   {
+     return copyValueOf (data, 0, data.length);
+   }
+ 
+   /**
+    * Returns a String representing a boolean.
+    *
+    * @param b the boolean
+    * @return "true" if b is true, else "false"
+    */
+   public static String valueOf(boolean b)
+   {
+     return b ? "true" : "false";
+   }
+ 
+   /**
+    * Returns a String representing a character.
+    *
+    * @param c the character
+    * @return String containing the single character c
+    */
+   public static String valueOf(char c)
+   {
+     // Package constructor avoids an array copy.
+     return new String(new char[] { c }, 0, 1, true);
+   }
+ 
+   /**
+    * Returns a String representing an integer.
+    *
+    * @param i the integer
+    * @return String containing the integer in base 10
+    * @see Integer#toString(int)
+    */
+   public static String valueOf(int i)
+   {
+     // See Integer to understand why we call the two-arg variant.
+     return Integer.toString(i, 10);
+   }
+ 
+   /**
+    * Returns a String representing a long.
+    *
+    * @param l the long
+    * @return String containing the long in base 10
+    * @see Long#toString(long)
+    */
+   public static String valueOf(long l)
+   {
+     return Long.toString(l);
+   }
+ 
+   /**
+    * Returns a String representing a float.
+    *
+    * @param f the float
+    * @return String containing the float
+    * @see Float#toString(float)
+    */
+   public static String valueOf(float f)
+   {
+     return Float.toString(f);
+   }
+ 
+   /**
+    * Returns a String representing a double.
+    *
+    * @param d the double
+    * @return String containing the double
+    * @see Double#toString(double)
+    */
+   public static String valueOf(double d)
+   {
+     return Double.toString(d);
+   }
+ 
+   /**
+    * If two Strings are considered equal, by the equals() method, 
+    * then intern() will return the same String instance. ie. 
+    * if (s1.equals(s2)) then (s1.intern() == s2.intern()). 
+    * All string literals and string-valued constant expressions 
+    * are already interned.
+    *
+    * @return the interned String
+    */
+   public String intern()
+   {
+     return VMString.intern(this);
+   }
+ 
+   /**
+    * Return the number of code points between two indices in the
+    * <code>StringBuffer</code>.  An unpaired surrogate counts as a
+    * code point for this purpose.  Characters outside the indicated
+    * range are not examined, even if the range ends in the middle of a
+    * surrogate pair.
+    *
+    * @param start the starting index
+    * @param end one past the ending index
+    * @return the number of code points
+    * @since 1.5
+    */
+   public synchronized int codePointCount(int start, int end)
+   {
+     if (start < 0 || end >= count || start > end)
+       throw new StringIndexOutOfBoundsException();
+ 
+     start += offset;
+     end += offset;
+     int count = 0;
+     while (start < end)
+       {
+ 	char base = value[start];
+ 	if (base < Character.MIN_HIGH_SURROGATE
+ 	    || base > Character.MAX_HIGH_SURROGATE
+ 	    || start == end
+ 	    || start == count
+ 	    || value[start + 1] < Character.MIN_LOW_SURROGATE
+ 	    || value[start + 1] > Character.MAX_LOW_SURROGATE)
+ 	  {
+ 	    // Nothing.
+ 	  }
+ 	else
+ 	  {
+ 	    // Surrogate pair.
+ 	    ++start;
+ 	  }
+ 	++start;
+ 	++count;
+       }
+     return count;
+   }
+ 
+   /**
+    * Helper function used to detect which characters have a multi-character
+    * uppercase expansion. Note that this is only used in locations which
+    * track one-to-many capitalization (java.lang.Character does not do this).
+    * As of Unicode 3.0.0, the result is limited in the range 0 to 2, as the
+    * longest uppercase expansion is three characters (a growth of 2 from the
+    * lowercase character).
+    *
+    * @param ch the char to check
+    * @return the number of characters to add when converting to uppercase
+    * @see CharData#DIRECTION
+    * @see CharData#UPPER_SPECIAL
+    * @see #toUpperCase(Locale)
+    */
+   private static int upperCaseExpansion(char ch)
+   {
+     return Character.direction[Character.readChar(ch) >> 7] & 3;
+   }
+ 
+   /**
+    * Helper function used to locate the offset in upperExpand given a
+    * character with a multi-character expansion. The binary search is
+    * optimized under the assumption that this method will only be called on
+    * characters which exist in upperSpecial.
+    *
+    * @param ch the char to check
+    * @return the index where its expansion begins
+    * @see CharData#UPPER_SPECIAL
+    * @see CharData#UPPER_EXPAND
+    * @see #toUpperCase(Locale)
+    */
+   private static int upperCaseIndex(char ch)
+   {
+     // Simple binary search for the correct character.
+     int low = 0;
+     int hi = upperSpecial.length - 2;
+     int mid = ((low + hi) >> 2) << 1;
+     char c = upperSpecial[mid];
+     while (ch != c)
+       {
+         if (ch < c)
+           hi = mid - 2;
+         else
+           low = mid + 2;
+         mid = ((low + hi) >> 2) << 1;
+         c = upperSpecial[mid];
+       }
+     return upperSpecial[mid + 1];
+   }
+ 
+   /**
+    * Returns the value array of the given string if it is zero based or a
+    * copy of it that is zero based (stripping offset and making length equal
+    * to count). Used for accessing the char[]s of gnu.java.lang.CharData.
+    * Package private for use in Character.
+    */
+   static char[] zeroBasedStringValue(String s)
+   {
+     char[] value;
+ 
+     if (s.offset == 0 && s.count == s.value.length)
+       value = s.value;
+     else
+       {
+ 	int count = s.count;
+ 	value = new char[count];
+ 	VMSystem.arraycopy(s.value, s.offset, value, 0, count);
+       }
+ 
+     return value;
+   }
+   
+   /**
+    * Returns true iff this String contains the sequence of Characters
+    * described in s.
+    * @param s the CharSequence
+    * @return true iff this String contains s
+    */
+   public boolean contains (CharSequence s)
+   {
+     return this.indexOf(s.toString()) != -1;
+   }
+   
+   /**
+    * Returns a string that is this string with all instances of the sequence
+    * represented by <code>target</code> replaced by the sequence in 
+    * <code>replacement</code>.
+    * @param target the sequence to be replaced
+    * @param replacement the sequence used as the replacement
+    * @return the string constructed as above
+    */
+   public String replace (CharSequence target, CharSequence replacement)
+   {
+     String targetString = target.toString();
+     String replaceString = replacement.toString();
+     int targetLength = target.length();
+     int replaceLength = replacement.length();
+     
+     int startPos = this.indexOf(targetString);
+     StringBuilder result = new StringBuilder(this);    
+     while (startPos != -1)
+       {
+         // Replace the target with the replacement
+         result.replace(startPos, startPos + targetLength, replaceString);
+ 
+         // Search for a new occurrence of the target
+         startPos = result.indexOf(targetString, startPos + replaceLength);
+       }
+     return result.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/StringBuffer.java gcc-4.1.0/libjava/classpath/java/lang/StringBuffer.java
*** gcc-4.0.2/libjava/classpath/java/lang/StringBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/StringBuffer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1188 ----
+ /* StringBuffer.java -- Growable strings
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * <code>StringBuffer</code> represents a changeable <code>String</code>.
+  * It provides the operations required to modify the
+  * <code>StringBuffer</code>, including insert, replace, delete, append,
+  * and reverse. It is thread-safe; meaning that all modifications to a buffer
+  * are in synchronized methods.
+  *
+  * <p><code>StringBuffer</code>s are variable-length in nature, so even if
+  * you initialize them to a certain size, they can still grow larger than
+  * that. <em>Capacity</em> indicates the number of characters the
+  * <code>StringBuffer</code> can have in it before it has to grow (growing
+  * the char array is an expensive operation involving <code>new</code>).
+  *
+  * <p>Incidentally, compilers often implement the String operator "+"
+  * by using a <code>StringBuffer</code> operation:<br>
+  * <code>a + b</code><br>
+  * is the same as<br>
+  * <code>new StringBuffer().append(a).append(b).toString()</code>.
+  *
+  * <p>Classpath's StringBuffer is capable of sharing memory with Strings for
+  * efficiency.  This will help when a StringBuffer is converted to a String
+  * and the StringBuffer is not changed after that (quite common when performing
+  * string concatenation).
+  *
+  * @author Paul Fisher
+  * @author John Keiser
+  * @author Tom Tromey
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see String
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public final class StringBuffer implements Serializable, CharSequence
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 3388685877147921107L;
+ 
+   /**
+    * Index of next available character (and thus the size of the current
+    * string contents).  Note that this has permissions set this way so that
+    * String can get the value.
+    *
+    * @serial the number of characters in the buffer
+    */
+   int count;
+ 
+   /**
+    * The buffer.  Note that this has permissions set this way so that String
+    * can get the value.
+    *
+    * @serial the buffer
+    */
+   char[] value;
+ 
+   /**
+    * True if the buffer is shared with another object (StringBuffer or
+    * String); this means the buffer must be copied before writing to it again.
+    * Note that this has permissions set this way so that String can get the
+    * value.
+    *
+    * @serial whether the buffer is shared
+    */
+   boolean shared;
+ 
+   /**
+    * The default capacity of a buffer.
+    */
+   private static final int DEFAULT_CAPACITY = 16;
+ 
+   /**
+    * Create a new StringBuffer with default capacity 16.
+    */
+   public StringBuffer()
+   {
+     this(DEFAULT_CAPACITY);
+   }
+ 
+   /**
+    * Create an empty <code>StringBuffer</code> with the specified initial
+    * capacity.
+    *
+    * @param capacity the initial capacity
+    * @throws NegativeArraySizeException if capacity is negative
+    */
+   public StringBuffer(int capacity)
+   {
+     value = new char[capacity];
+   }
+ 
+   /**
+    * Create a new <code>StringBuffer</code> with the characters in the
+    * specified <code>String</code>. Initial capacity will be the size of the
+    * String plus 16.
+    *
+    * @param str the <code>String</code> to convert
+    * @throws NullPointerException if str is null
+    */
+   public StringBuffer(String str)
+   {
+     // Unfortunately, because the size is 16 larger, we cannot share.
+     count = str.count;
+     value = new char[count + DEFAULT_CAPACITY];
+     str.getChars(0, count, value, 0);
+   }
+ 
+   /**
+    * Create a new <code>StringBuffer</code> with the characters from the
+    * specified <code>CharSequence</code>. Initial capacity will be the
+    * size of the CharSequence plus 16.
+    *
+    * @param sequence the <code>String</code> to convert
+    * @throws NullPointerException if str is null
+    *
+    * @since 1.5
+    */
+   public StringBuffer(CharSequence sequence)
+   {
+     count = Math.max(0, sequence.length());
+     value = new char[count + DEFAULT_CAPACITY];
+     for (int i = 0; i < count; ++i)
+       value[i] = sequence.charAt(i);
+   }
+ 
+   /**
+    * Get the length of the <code>String</code> this <code>StringBuffer</code>
+    * would create. Not to be confused with the <em>capacity</em> of the
+    * <code>StringBuffer</code>.
+    *
+    * @return the length of this <code>StringBuffer</code>
+    * @see #capacity()
+    * @see #setLength(int)
+    */
+   public synchronized int length()
+   {
+     return count;
+   }
+ 
+   /**
+    * Get the total number of characters this <code>StringBuffer</code> can
+    * support before it must be grown.  Not to be confused with <em>length</em>.
+    *
+    * @return the capacity of this <code>StringBuffer</code>
+    * @see #length()
+    * @see #ensureCapacity(int)
+    */
+   public synchronized int capacity()
+   {
+     return value.length;
+   }
+ 
+   /**
+    * Increase the capacity of this <code>StringBuffer</code>. This will
+    * ensure that an expensive growing operation will not occur until
+    * <code>minimumCapacity</code> is reached. The buffer is grown to the
+    * larger of <code>minimumCapacity</code> and
+    * <code>capacity() * 2 + 2</code>, if it is not already large enough.
+    *
+    * @param minimumCapacity the new capacity
+    * @see #capacity()
+    */
+   public synchronized void ensureCapacity(int minimumCapacity)
+   {
+     ensureCapacity_unsynchronized(minimumCapacity);
+   }
+ 
+   /**
+    * Set the length of this StringBuffer. If the new length is greater than
+    * the current length, all the new characters are set to '\0'. If the new
+    * length is less than the current length, the first <code>newLength</code>
+    * characters of the old array will be preserved, and the remaining
+    * characters are truncated.
+    *
+    * @param newLength the new length
+    * @throws IndexOutOfBoundsException if the new length is negative
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    * @see #length()
+    */
+   public synchronized void setLength(int newLength)
+   {
+     if (newLength < 0)
+       throw new StringIndexOutOfBoundsException(newLength);
+ 
+     int valueLength = value.length;
+ 
+     /* Always call ensureCapacity_unsynchronized in order to preserve
+        copy-on-write semantics.  */
+     ensureCapacity_unsynchronized(newLength);
+ 
+     if (newLength < valueLength)
+       {
+         /* If the StringBuffer's value just grew, then we know that
+            value is newly allocated and the region between count and
+            newLength is filled with '\0'.  */
+ 	count = newLength;
+       }
+     else
+       {
+ 	/* The StringBuffer's value doesn't need to grow.  However,
+ 	   we should clear out any cruft that may exist.  */
+ 	while (count < newLength)
+           value[count++] = '\0';
+       }
+   }
+ 
+   /**
+    * Get the character at the specified index.
+    *
+    * @param index the index of the character to get, starting at 0
+    * @return the character at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    */
+   public synchronized char charAt(int index)
+   {
+     if (index < 0 || index >= count)
+       throw new StringIndexOutOfBoundsException(index);
+     return value[index];
+   }
+ 
+   /**
+    * Get the code point at the specified index.  This is like #charAt(int),
+    * but if the character is the start of a surrogate pair, and the
+    * following character completes the pair, then the corresponding
+    * supplementary code point is returned.
+    * @param index the index of the codepoint to get, starting at 0
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    * @since 1.5
+    */
+   public synchronized int codePointAt(int index)
+   {
+     return Character.codePointAt(value, index, count);
+   }
+ 
+   /**
+    * Get the code point before the specified index.  This is like
+    * #codePointAt(int), but checks the characters at <code>index-1</code> and
+    * <code>index-2</code> to see if they form a supplementary code point.
+    * @param index the index just past the codepoint to get, starting at 0
+    * @return the codepoint at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    * @since 1.5
+    */
+   public synchronized int codePointBefore(int index)
+   {
+     // Character.codePointBefore() doesn't perform this check.  We
+     // could use the CharSequence overload, but this is just as easy.
+     if (index >= count)
+       throw new IndexOutOfBoundsException();
+     return Character.codePointBefore(value, index, 1);
+   }
+ 
+   /**
+    * Get the specified array of characters. <code>srcOffset - srcEnd</code>
+    * characters will be copied into the array you pass in.
+    *
+    * @param srcOffset the index to start copying from (inclusive)
+    * @param srcEnd the index to stop copying from (exclusive)
+    * @param dst the array to copy into
+    * @param dstOffset the index to start copying into
+    * @throws NullPointerException if dst is null
+    * @throws IndexOutOfBoundsException if any source or target indices are
+    *         out of range (while unspecified, source problems cause a
+    *         StringIndexOutOfBoundsException, and dest problems cause an
+    *         ArrayIndexOutOfBoundsException)
+    * @see System#arraycopy(Object, int, Object, int, int)
+    */
+   public synchronized void getChars(int srcOffset, int srcEnd,
+                                     char[] dst, int dstOffset)
+   {
+     if (srcOffset < 0 || srcEnd > count || srcEnd < srcOffset)
+       throw new StringIndexOutOfBoundsException();
+     VMSystem.arraycopy(value, srcOffset, dst, dstOffset, srcEnd - srcOffset);
+   }
+ 
+   /**
+    * Set the character at the specified index.
+    *
+    * @param index the index of the character to set starting at 0
+    * @param ch the value to set that character to
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    */
+   public synchronized void setCharAt(int index, char ch)
+   {
+     if (index < 0 || index >= count)
+       throw new StringIndexOutOfBoundsException(index);
+     // Call ensureCapacity to enforce copy-on-write.
+     ensureCapacity_unsynchronized(count);
+     value[index] = ch;
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param obj the <code>Object</code> to convert and append
+    * @return this <code>StringBuffer</code>
+    * @see String#valueOf(Object)
+    * @see #append(String)
+    */
+   public StringBuffer append(Object obj)
+   {
+     return append(obj == null ? "null" : obj.toString());
+   }
+ 
+   /**
+    * Append the <code>String</code> to this <code>StringBuffer</code>. If
+    * str is null, the String "null" is appended.
+    *
+    * @param str the <code>String</code> to append
+    * @return this <code>StringBuffer</code>
+    */
+   public synchronized StringBuffer append(String str)
+   {
+     if (str == null)
+       str = "null";
+     int len = str.count;
+     ensureCapacity_unsynchronized(count + len);
+     str.getChars(0, len, value, count);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Append the <code>StringBuffer</code> value of the argument to this
+    * <code>StringBuffer</code>. This behaves the same as
+    * <code>append((Object) stringBuffer)</code>, except it is more efficient.
+    *
+    * @param stringBuffer the <code>StringBuffer</code> to convert and append
+    * @return this <code>StringBuffer</code>
+    * @see #append(Object)
+    * @since 1.4
+    */
+   public synchronized StringBuffer append(StringBuffer stringBuffer)
+   {
+     if (stringBuffer == null)
+       return append("null");
+     synchronized (stringBuffer)
+       {
+         int len = stringBuffer.count;
+         ensureCapacity_unsynchronized(count + len);
+         VMSystem.arraycopy(stringBuffer.value, 0, value, count, len);
+         count += len;
+       }
+     return this;
+   }
+ 
+   /**
+    * Append the <code>CharSequence</code> value of the argument to this
+    * <code>StringBuffer</code>.
+    *
+    * @param sequence the <code>CharSequence</code> to append
+    * @return this <code>StringBuffer</code>
+    * @see #append(Object)
+    * @since 1.5
+    */
+   public synchronized StringBuffer append(CharSequence sequence)
+   {
+     if (sequence == null)
+       sequence = "null";
+     return append(sequence, 0, sequence.length());
+   }
+ 
+   /**
+    * Append the specified subsequence of the <code>CharSequence</code>
+    * argument to this <code>StringBuffer</code>.
+    *
+    * @param sequence the <code>CharSequence</code> to append
+    * @param start the starting index
+    * @param end one past the ending index
+    * @return this <code>StringBuffer</code>
+    * @see #append(Object)
+    * @since 1.5
+    */
+   public synchronized StringBuffer append(CharSequence sequence,
+ 					  int start, int end)
+   {
+     if (sequence == null)
+       sequence = "null";
+     if (start < 0 || end < 0 || start > end || end > sequence.length())
+       throw new IndexOutOfBoundsException();
+     ensureCapacity_unsynchronized(this.count + end - start);
+     for (int i = start; i < end; ++i)
+       value[count++] = sequence.charAt(i);
+     return this;
+   }
+ 
+   /**
+    * Append the <code>char</code> array to this <code>StringBuffer</code>.
+    * This is similar (but more efficient) than
+    * <code>append(new String(data))</code>, except in the case of null.
+    *
+    * @param data the <code>char[]</code> to append
+    * @return this <code>StringBuffer</code>
+    * @throws NullPointerException if <code>str</code> is <code>null</code>
+    * @see #append(char[], int, int)
+    */
+   public StringBuffer append(char[] data)
+   {
+     return append(data, 0, data.length);
+   }
+ 
+   /**
+    * Append part of the <code>char</code> array to this
+    * <code>StringBuffer</code>. This is similar (but more efficient) than
+    * <code>append(new String(data, offset, count))</code>, except in the case
+    * of null.
+    *
+    * @param data the <code>char[]</code> to append
+    * @param offset the start location in <code>str</code>
+    * @param count the number of characters to get from <code>str</code>
+    * @return this <code>StringBuffer</code>
+    * @throws NullPointerException if <code>str</code> is <code>null</code>
+    * @throws IndexOutOfBoundsException if offset or count is out of range
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    */
+   public synchronized StringBuffer append(char[] data, int offset, int count)
+   {
+     if (offset < 0 || count < 0 || offset > data.length - count)
+       throw new StringIndexOutOfBoundsException();
+     ensureCapacity_unsynchronized(this.count + count);
+     VMSystem.arraycopy(data, offset, value, this.count, count);
+     this.count += count;
+     return this;
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param bool the <code>boolean</code> to convert and append
+    * @return this <code>StringBuffer</code>
+    * @see String#valueOf(boolean)
+    */
+   public StringBuffer append(boolean bool)
+   {
+     return append(bool ? "true" : "false");
+   }
+ 
+   /**
+    * Append the <code>char</code> to this <code>StringBuffer</code>.
+    *
+    * @param ch the <code>char</code> to append
+    * @return this <code>StringBuffer</code>
+    */
+   public synchronized StringBuffer append(char ch)
+   {
+     ensureCapacity_unsynchronized(count + 1);
+     value[count++] = ch;
+     return this;
+   }
+ 
+   /**
+    * Append the code point to this <code>StringBuffer</code>.
+    * This is like #append(char), but will append two characters
+    * if a supplementary code point is given.
+    *
+    * @param code the code point to append
+    * @return this <code>StringBuffer</code>
+    * @see Character#toChars(int, char[], int)
+    * @since 1.5
+    */
+   public synchronized StringBuffer appendCodePoint(int code)
+   {
+     int len = Character.charCount(code);
+     ensureCapacity_unsynchronized(count + len);
+     Character.toChars(code, value, count);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param inum the <code>int</code> to convert and append
+    * @return this <code>StringBuffer</code>
+    * @see String#valueOf(int)
+    */
+   // This is native in libgcj, for efficiency.
+   public StringBuffer append(int inum)
+   {
+     return append(String.valueOf(inum));
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param lnum the <code>long</code> to convert and append
+    * @return this <code>StringBuffer</code>
+    * @see String#valueOf(long)
+    */
+   public StringBuffer append(long lnum)
+   {
+     return append(Long.toString(lnum, 10));
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param fnum the <code>float</code> to convert and append
+    * @return this <code>StringBuffer</code>
+    * @see String#valueOf(float)
+    */
+   public StringBuffer append(float fnum)
+   {
+     return append(Float.toString(fnum));
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param dnum the <code>double</code> to convert and append
+    * @return this <code>StringBuffer</code>
+    * @see String#valueOf(double)
+    */
+   public StringBuffer append(double dnum)
+   {
+     return append(Double.toString(dnum));
+   }
+ 
+   /**
+    * Delete characters from this <code>StringBuffer</code>.
+    * <code>delete(10, 12)</code> will delete 10 and 11, but not 12. It is
+    * harmless for end to be larger than length().
+    *
+    * @param start the first character to delete
+    * @param end the index after the last character to delete
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if start or end are out of bounds
+    * @since 1.2
+    */
+   public synchronized StringBuffer delete(int start, int end)
+   {
+     if (start < 0 || start > count || start > end)
+       throw new StringIndexOutOfBoundsException(start);
+     if (end > count)
+       end = count;
+     // This will unshare if required.
+     ensureCapacity_unsynchronized(count);
+     if (count - end != 0)
+       VMSystem.arraycopy(value, end, value, start, count - end);
+     count -= end - start;
+     return this;
+   }
+ 
+   /**
+    * Delete a character from this <code>StringBuffer</code>.
+    *
+    * @param index the index of the character to delete
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if index is out of bounds
+    * @since 1.2
+    */
+   public StringBuffer deleteCharAt(int index)
+   {
+     return delete(index, index + 1);
+   }
+ 
+   /**
+    * Replace characters between index <code>start</code> (inclusive) and
+    * <code>end</code> (exclusive) with <code>str</code>. If <code>end</code>
+    * is larger than the size of this StringBuffer, all characters after
+    * <code>start</code> are replaced.
+    *
+    * @param start the beginning index of characters to delete (inclusive)
+    * @param end the ending index of characters to delete (exclusive)
+    * @param str the new <code>String</code> to insert
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if start or end are out of bounds
+    * @throws NullPointerException if str is null
+    * @since 1.2
+    */
+   public synchronized StringBuffer replace(int start, int end, String str)
+   {
+     if (start < 0 || start > count || start > end)
+       throw new StringIndexOutOfBoundsException(start);
+ 
+     int len = str.count;
+     // Calculate the difference in 'count' after the replace.
+     int delta = len - (end > count ? count : end) + start;
+     ensureCapacity_unsynchronized(count + delta);
+ 
+     if (delta != 0 && end < count)
+       VMSystem.arraycopy(value, end, value, end + delta, count - end);
+ 
+     str.getChars(0, len, value, start);
+     count += delta;
+     return this;
+   }
+ 
+   /**
+    * Creates a substring of this StringBuffer, starting at a specified index
+    * and ending at the end of this StringBuffer.
+    *
+    * @param beginIndex index to start substring (base 0)
+    * @return new String which is a substring of this StringBuffer
+    * @throws StringIndexOutOfBoundsException if beginIndex is out of bounds
+    * @see #substring(int, int)
+    * @since 1.2
+    */
+   public String substring(int beginIndex)
+   {
+     return substring(beginIndex, count);
+   }
+ 
+   /**
+    * Creates a substring of this StringBuffer, starting at a specified index
+    * and ending at one character before a specified index. This is implemented
+    * the same as <code>substring(beginIndex, endIndex)</code>, to satisfy
+    * the CharSequence interface.
+    *
+    * @param beginIndex index to start at (inclusive, base 0)
+    * @param endIndex index to end at (exclusive)
+    * @return new String which is a substring of this StringBuffer
+    * @throws IndexOutOfBoundsException if beginIndex or endIndex is out of
+    *         bounds
+    * @see #substring(int, int)
+    * @since 1.4
+    */
+   public CharSequence subSequence(int beginIndex, int endIndex)
+   {
+     return substring(beginIndex, endIndex);
+   }
+ 
+   /**
+    * Creates a substring of this StringBuffer, starting at a specified index
+    * and ending at one character before a specified index.
+    *
+    * @param beginIndex index to start at (inclusive, base 0)
+    * @param endIndex index to end at (exclusive)
+    * @return new String which is a substring of this StringBuffer
+    * @throws StringIndexOutOfBoundsException if beginIndex or endIndex is out
+    *         of bounds
+    * @since 1.2
+    */
+   public synchronized String substring(int beginIndex, int endIndex)
+   {
+     int len = endIndex - beginIndex;
+     if (beginIndex < 0 || endIndex > count || endIndex < beginIndex)
+       throw new StringIndexOutOfBoundsException();
+     if (len == 0)
+       return "";
+     // Don't copy unless substring is smaller than 1/4 of the buffer.
+     boolean share_buffer = ((len << 2) >= value.length);
+     if (share_buffer)
+       this.shared = true;
+     // Package constructor avoids an array copy.
+     return new String(value, beginIndex, len, share_buffer);
+   }
+ 
+   /**
+    * Insert a subarray of the <code>char[]</code> argument into this
+    * <code>StringBuffer</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param str the <code>char[]</code> to insert
+    * @param str_offset the index in <code>str</code> to start inserting from
+    * @param len the number of characters to insert
+    * @return this <code>StringBuffer</code>
+    * @throws NullPointerException if <code>str</code> is <code>null</code>
+    * @throws StringIndexOutOfBoundsException if any index is out of bounds
+    * @since 1.2
+    */
+   public synchronized StringBuffer insert(int offset,
+                                           char[] str, int str_offset, int len)
+   {
+     if (offset < 0 || offset > count || len < 0
+         || str_offset < 0 || str_offset > str.length - len)
+       throw new StringIndexOutOfBoundsException();
+     ensureCapacity_unsynchronized(count + len);
+     VMSystem.arraycopy(value, offset, value, offset + len, count - offset);
+     VMSystem.arraycopy(str, str_offset, value, offset, len);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param obj the <code>Object</code> to convert and insert
+    * @return this <code>StringBuffer</code>
+    * @exception StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(Object)
+    */
+   public StringBuffer insert(int offset, Object obj)
+   {
+     return insert(offset, obj == null ? "null" : obj.toString());
+   }
+ 
+   /**
+    * Insert the <code>String</code> argument into this
+    * <code>StringBuffer</code>. If str is null, the String "null" is used
+    * instead.
+    *
+    * @param offset the place to insert in this buffer
+    * @param str the <code>String</code> to insert
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    */
+   public synchronized StringBuffer insert(int offset, String str)
+   {
+     if (offset < 0 || offset > count)
+       throw new StringIndexOutOfBoundsException(offset);
+     if (str == null)
+       str = "null";
+     int len = str.count;
+     ensureCapacity_unsynchronized(count + len);
+     VMSystem.arraycopy(value, offset, value, offset + len, count - offset);
+     str.getChars(0, len, value, offset);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Insert the <code>CharSequence</code> argument into this
+    * <code>StringBuffer</code>.  If the sequence is null, the String
+    * "null" is used instead.
+    *
+    * @param offset the place to insert in this buffer
+    * @param sequence the <code>CharSequence</code> to insert
+    * @return this <code>StringBuffer</code>
+    * @throws IndexOutOfBoundsException if offset is out of bounds
+    * @since 1.5
+    */
+   public synchronized StringBuffer insert(int offset, CharSequence sequence)
+   {
+     if (sequence == null)
+       sequence = "null";
+     return insert(offset, sequence, 0, sequence.length());
+   }
+ 
+   /**
+    * Insert a subsequence of the <code>CharSequence</code> argument into this
+    * <code>StringBuffer</code>.  If the sequence is null, the String
+    * "null" is used instead.
+    *
+    * @param offset the place to insert in this buffer
+    * @param sequence the <code>CharSequence</code> to insert
+    * @param start the starting index of the subsequence
+    * @param end one past the ending index of the subsequence
+    * @return this <code>StringBuffer</code>
+    * @throws IndexOutOfBoundsException if offset, start,
+    * or end are out of bounds
+    * @since 1.5
+    */
+   public synchronized StringBuffer insert(int offset, CharSequence sequence,
+ 					  int start, int end)
+   {
+     if (sequence == null)
+       sequence = "null";
+     if (start < 0 || end < 0 || start > end || end > sequence.length())
+       throw new IndexOutOfBoundsException();
+     int len = end - start;
+     ensureCapacity_unsynchronized(count + len);
+     VMSystem.arraycopy(value, offset, value, offset + len, count - offset);
+     for (int i = start; i < end; ++i)
+       value[offset++] = sequence.charAt(i);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Insert the <code>char[]</code> argument into this
+    * <code>StringBuffer</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param data the <code>char[]</code> to insert
+    * @return this <code>StringBuffer</code>
+    * @throws NullPointerException if <code>data</code> is <code>null</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see #insert(int, char[], int, int)
+    */
+   public StringBuffer insert(int offset, char[] data)
+   {
+     return insert(offset, data, 0, data.length);
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param bool the <code>boolean</code> to convert and insert
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(boolean)
+    */
+   public StringBuffer insert(int offset, boolean bool)
+   {
+     return insert(offset, bool ? "true" : "false");
+   }
+ 
+   /**
+    * Insert the <code>char</code> argument into this <code>StringBuffer</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param ch the <code>char</code> to insert
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    */
+   public synchronized StringBuffer insert(int offset, char ch)
+   {
+     if (offset < 0 || offset > count)
+       throw new StringIndexOutOfBoundsException(offset);
+     ensureCapacity_unsynchronized(count + 1);
+     VMSystem.arraycopy(value, offset, value, offset + 1, count - offset);
+     value[offset] = ch;
+     count++;
+     return this;
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param inum the <code>int</code> to convert and insert
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(int)
+    */
+   public StringBuffer insert(int offset, int inum)
+   {
+     return insert(offset, String.valueOf(inum));
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param lnum the <code>long</code> to convert and insert
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(long)
+    */
+   public StringBuffer insert(int offset, long lnum)
+   {
+     return insert(offset, Long.toString(lnum, 10));
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param fnum the <code>float</code> to convert and insert
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(float)
+    */
+   public StringBuffer insert(int offset, float fnum)
+   {
+     return insert(offset, Float.toString(fnum));
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param dnum the <code>double</code> to convert and insert
+    * @return this <code>StringBuffer</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(double)
+    */
+   public StringBuffer insert(int offset, double dnum)
+   {
+     return insert(offset, Double.toString(dnum));
+   }
+ 
+   /**
+    * Finds the first instance of a substring in this StringBuffer.
+    *
+    * @param str String to find
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    * @see #indexOf(String, int)
+    * @since 1.4
+    */
+   public int indexOf(String str)
+   {
+     return indexOf(str, 0);
+   }
+ 
+   /**
+    * Finds the first instance of a String in this StringBuffer, starting at
+    * a given index.  If starting index is less than 0, the search starts at
+    * the beginning of this String.  If the starting index is greater than the
+    * length of this String, or the substring is not found, -1 is returned.
+    *
+    * @param str String to find
+    * @param fromIndex index to start the search
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    * @since 1.4
+    */
+   public synchronized int indexOf(String str, int fromIndex)
+   {
+     if (fromIndex < 0)
+       fromIndex = 0;
+     int limit = count - str.count;
+     for ( ; fromIndex <= limit; fromIndex++)
+       if (regionMatches(fromIndex, str))
+         return fromIndex;
+     return -1;
+   }
+ 
+   /**
+    * Finds the last instance of a substring in this StringBuffer.
+    *
+    * @param str String to find
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    * @see #lastIndexOf(String, int)
+    * @since 1.4
+    */
+   public int lastIndexOf(String str)
+   {
+     return lastIndexOf(str, count - str.count);
+   }
+ 
+   /**
+    * Finds the last instance of a String in this StringBuffer, starting at a
+    * given index.  If starting index is greater than the maximum valid index,
+    * then the search begins at the end of this String.  If the starting index
+    * is less than zero, or the substring is not found, -1 is returned.
+    *
+    * @param str String to find
+    * @param fromIndex index to start the search
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    * @since 1.4
+    */
+   public synchronized int lastIndexOf(String str, int fromIndex)
+   {
+     fromIndex = Math.min(fromIndex, count - str.count);
+     for ( ; fromIndex >= 0; fromIndex--)
+       if (regionMatches(fromIndex, str))
+         return fromIndex;
+     return -1;
+   }
+ 
+   /**
+    * Reverse the characters in this StringBuffer. The same sequence of
+    * characters exists, but in the reverse index ordering.
+    *
+    * @return this <code>StringBuffer</code>
+    */
+   public synchronized StringBuffer reverse()
+   {
+     // Call ensureCapacity to enforce copy-on-write.
+     ensureCapacity_unsynchronized(count);
+     for (int i = count >> 1, j = count - i; --i >= 0; ++j)
+       {
+         char c = value[i];
+         value[i] = value[j];
+         value[j] = c;
+       }
+     return this;
+   }
+ 
+   /**
+    * Convert this <code>StringBuffer</code> to a <code>String</code>. The
+    * String is composed of the characters currently in this StringBuffer. Note
+    * that the result is a copy, and that future modifications to this buffer
+    * do not affect the String.
+    *
+    * @return the characters in this StringBuffer
+    */
+   public String toString()
+   {
+     // The string will set this.shared = true.
+     return new String(this);
+   }
+ 
+   /**
+    * This may reduce the amount of memory used by the StringBuffer,
+    * by resizing the internal array to remove unused space.  However,
+    * this method is not required to resize, so this behavior cannot
+    * be relied upon.
+    * @since 1.5
+    */
+   public synchronized void trimToSize()
+   {
+     int wouldSave = value.length - count;
+     // Some random heuristics: if we save less than 20 characters, who
+     // cares.
+     if (wouldSave < 20)
+       return;
+     // If we save more than 200 characters, shrink.
+     // If we save more than 1/4 of the buffer, shrink.
+     if (wouldSave > 200 || wouldSave * 4 > value.length)
+       {
+ 	char[] newValue = new char[count];
+ 	VMSystem.arraycopy(value, 0, newValue, 0, count);
+ 	value = newValue;
+       }
+   }
+ 
+   /**
+    * Return the number of code points between two indices in the
+    * <code>StringBuffer</code>.  An unpaired surrogate counts as a
+    * code point for this purpose.  Characters outside the indicated
+    * range are not examined, even if the range ends in the middle of a
+    * surrogate pair.
+    *
+    * @param start the starting index
+    * @param end one past the ending index
+    * @return the number of code points
+    * @since 1.5
+    */
+   public synchronized int codePointCount(int start, int end)
+   {
+     if (start < 0 || end >= count || start > end)
+       throw new StringIndexOutOfBoundsException();
+ 
+     int count = 0;
+     while (start < end)
+       {
+ 	char base = value[start];
+ 	if (base < Character.MIN_HIGH_SURROGATE
+ 	    || base > Character.MAX_HIGH_SURROGATE
+ 	    || start == end
+ 	    || start == count
+ 	    || value[start + 1] < Character.MIN_LOW_SURROGATE
+ 	    || value[start + 1] > Character.MAX_LOW_SURROGATE)
+ 	  {
+ 	    // Nothing.
+ 	  }
+ 	else
+ 	  {
+ 	    // Surrogate pair.
+ 	    ++start;
+ 	  }
+ 	++start;
+ 	++count;
+       }
+     return count;
+   }
+ 
+   /**
+    * Starting at the given index, this counts forward by the indicated
+    * number of code points, and then returns the resulting index.  An
+    * unpaired surrogate counts as a single code point for this
+    * purpose.
+    *
+    * @param start the starting index
+    * @param codePoints the number of code points
+    * @return the resulting index
+    * @since 1.5
+    */
+   public synchronized int offsetByCodePoints(int start, int codePoints)
+   {
+     while (codePoints > 0)
+       {
+ 	char base = value[start];
+ 	if (base < Character.MIN_HIGH_SURROGATE
+ 	    || base > Character.MAX_HIGH_SURROGATE
+ 	    || start == count
+ 	    || value[start + 1] < Character.MIN_LOW_SURROGATE
+ 	    || value[start + 1] > Character.MAX_LOW_SURROGATE)
+ 	  {
+ 	    // Nothing.
+ 	  }
+ 	else
+ 	  {
+ 	    // Surrogate pair.
+ 	    ++start;
+ 	  }
+ 	++start;
+ 	--codePoints;
+       }
+     return start;
+   }
+ 
+   /**
+    * An unsynchronized version of ensureCapacity, used internally to avoid
+    * the cost of a second lock on the same object. This also has the side
+    * effect of duplicating the array, if it was shared (to form copy-on-write
+    * semantics).
+    *
+    * @param minimumCapacity the minimum capacity
+    * @see #ensureCapacity(int)
+    */
+   private void ensureCapacity_unsynchronized(int minimumCapacity)
+   {
+     if (shared || minimumCapacity > value.length)
+       {
+         // We don't want to make a larger vector when `shared' is
+         // set.  If we do, then setLength becomes very inefficient
+         // when repeatedly reusing a StringBuffer in a loop.
+         int max = (minimumCapacity > value.length
+                    ? value.length * 2 + 2
+                    : value.length);
+         minimumCapacity = (minimumCapacity < max ? max : minimumCapacity);
+         char[] nb = new char[minimumCapacity];
+         VMSystem.arraycopy(value, 0, nb, 0, count);
+         value = nb;
+         shared = false;
+       }
+   }
+ 
+   /**
+    * Predicate which determines if a substring of this matches another String
+    * starting at a specified offset for each String and continuing for a
+    * specified length. This is more efficient than creating a String to call
+    * indexOf on.
+    *
+    * @param toffset index to start comparison at for this String
+    * @param other non-null String to compare to region of this
+    * @return true if regions match, false otherwise
+    * @see #indexOf(String, int)
+    * @see #lastIndexOf(String, int)
+    * @see String#regionMatches(boolean, int, String, int, int)
+    */
+   private boolean regionMatches(int toffset, String other)
+   {
+     int len = other.count;
+     int index = other.offset;
+     while (--len >= 0)
+       if (value[toffset++] != other.value[index++])
+         return false;
+     return true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/StringBuilder.java gcc-4.1.0/libjava/classpath/java/lang/StringBuilder.java
*** gcc-4.0.2/libjava/classpath/java/lang/StringBuilder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/StringBuilder.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1009 ----
+ /* StringBuilder.java -- Unsynchronized growable strings
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * <code>StringBuilder</code> represents a changeable <code>String</code>.
+  * It provides the operations required to modify the
+  * <code>StringBuilder</code>, including insert, replace, delete, append,
+  * and reverse. It like <code>StringBuffer</code>, but is not
+  * synchronized.  It is ideal for use when it is known that the
+  * object will only be used from a single thread.
+  *
+  * <p><code>StringBuilder</code>s are variable-length in nature, so even if
+  * you initialize them to a certain size, they can still grow larger than
+  * that. <em>Capacity</em> indicates the number of characters the
+  * <code>StringBuilder</code> can have in it before it has to grow (growing
+  * the char array is an expensive operation involving <code>new</code>).
+  *
+  * <p>Incidentally, compilers often implement the String operator "+"
+  * by using a <code>StringBuilder</code> operation:<br>
+  * <code>a + b</code><br>
+  * is the same as<br>
+  * <code>new StringBuilder().append(a).append(b).toString()</code>.
+  *
+  * <p>Classpath's StringBuilder is capable of sharing memory with Strings for
+  * efficiency.  This will help when a StringBuilder is converted to a String
+  * and the StringBuilder is not changed after that (quite common when
+  * performing string concatenation).
+  *
+  * @author Paul Fisher
+  * @author John Keiser
+  * @author Tom Tromey
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see String
+  * @see StringBuffer
+  *
+  * @since 1.5
+  */
+ // FIX15: Implement Appendable when co-variant methods are available
+ public final class StringBuilder
+   implements Serializable, CharSequence
+ {
+   // Implementation note: if you change this class, you usually will
+   // want to change StringBuffer as well.
+ 
+   /**
+    * For compatability with Sun's JDK
+    */
+   private static final long serialVersionUID = 4383685877147921099L;
+ 
+   /**
+    * Index of next available character (and thus the size of the current
+    * string contents).  Note that this has permissions set this way so that
+    * String can get the value.
+    *
+    * @serial the number of characters in the buffer
+    */
+   int count;
+ 
+   /**
+    * The buffer.  Note that this has permissions set this way so that String
+    * can get the value.
+    *
+    * @serial the buffer
+    */
+   char[] value;
+ 
+   /**
+    * The default capacity of a buffer.
+    */
+   private static final int DEFAULT_CAPACITY = 16;
+ 
+   /**
+    * Create a new StringBuilder with default capacity 16.
+    */
+   public StringBuilder()
+   {
+     this(DEFAULT_CAPACITY);
+   }
+ 
+   /**
+    * Create an empty <code>StringBuilder</code> with the specified initial
+    * capacity.
+    *
+    * @param capacity the initial capacity
+    * @throws NegativeArraySizeException if capacity is negative
+    */
+   public StringBuilder(int capacity)
+   {
+     value = new char[capacity];
+   }
+ 
+   /**
+    * Create a new <code>StringBuilder</code> with the characters in the
+    * specified <code>String</code>. Initial capacity will be the size of the
+    * String plus 16.
+    *
+    * @param str the <code>String</code> to convert
+    * @throws NullPointerException if str is null
+    */
+   public StringBuilder(String str)
+   {
+     // Unfortunately, because the size is 16 larger, we cannot share.
+     count = str.count;
+     value = new char[count + DEFAULT_CAPACITY];
+     str.getChars(0, count, value, 0);
+   }
+ 
+   /**
+    * Create a new <code>StringBuilder</code> with the characters in the
+    * specified <code>CharSequence</code>. Initial capacity will be the
+    * length of the sequence plus 16; if the sequence reports a length
+    * less than or equal to 0, then the initial capacity will be 16.
+    *
+    * @param seq the initializing <code>CharSequence</code>
+    * @throws NullPointerException if str is null
+    */
+   public StringBuilder(CharSequence seq)
+   {
+     int len = seq.length();
+     count = len <= 0 ? 0 : len;
+     value = new char[count + DEFAULT_CAPACITY];
+     for (int i = 0; i < len; ++i)
+       value[i] = seq.charAt(i);
+   }
+ 
+   /**
+    * Get the length of the <code>String</code> this <code>StringBuilder</code>
+    * would create. Not to be confused with the <em>capacity</em> of the
+    * <code>StringBuilder</code>.
+    *
+    * @return the length of this <code>StringBuilder</code>
+    * @see #capacity()
+    * @see #setLength(int)
+    */
+   public int length()
+   {
+     return count;
+   }
+ 
+   /**
+    * Get the total number of characters this <code>StringBuilder</code> can
+    * support before it must be grown.  Not to be confused with <em>length</em>.
+    *
+    * @return the capacity of this <code>StringBuilder</code>
+    * @see #length()
+    * @see #ensureCapacity(int)
+    */
+   public int capacity()
+   {
+     return value.length;
+   }
+ 
+   /**
+    * Increase the capacity of this <code>StringBuilder</code>. This will
+    * ensure that an expensive growing operation will not occur until
+    * <code>minimumCapacity</code> is reached. The buffer is grown to the
+    * larger of <code>minimumCapacity</code> and
+    * <code>capacity() * 2 + 2</code>, if it is not already large enough.
+    *
+    * @param minimumCapacity the new capacity
+    * @see #capacity()
+    */
+   public void ensureCapacity(int minimumCapacity)
+   {
+     if (minimumCapacity > value.length)
+       {
+         int max = value.length * 2 + 2;
+         minimumCapacity = (minimumCapacity < max ? max : minimumCapacity);
+         char[] nb = new char[minimumCapacity];
+         System.arraycopy(value, 0, nb, 0, count);
+         value = nb;
+       }
+   }
+ 
+   /**
+    * Set the length of this StringBuilder. If the new length is greater than
+    * the current length, all the new characters are set to '\0'. If the new
+    * length is less than the current length, the first <code>newLength</code>
+    * characters of the old array will be preserved, and the remaining
+    * characters are truncated.
+    *
+    * @param newLength the new length
+    * @throws IndexOutOfBoundsException if the new length is negative
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    * @see #length()
+    */
+   public void setLength(int newLength)
+   {
+     if (newLength < 0)
+       throw new StringIndexOutOfBoundsException(newLength);
+ 
+     int valueLength = value.length;
+ 
+     /* Always call ensureCapacity in order to preserve copy-on-write
+        semantics.  */
+     ensureCapacity(newLength);
+ 
+     if (newLength < valueLength)
+       {
+         /* If the StringBuilder's value just grew, then we know that
+            value is newly allocated and the region between count and
+            newLength is filled with '\0'.  */
+ 	count = newLength;
+       }
+     else
+       {
+ 	/* The StringBuilder's value doesn't need to grow.  However,
+ 	   we should clear out any cruft that may exist.  */
+ 	while (count < newLength)
+           value[count++] = '\0';
+       }
+   }
+ 
+   /**
+    * Get the character at the specified index.
+    *
+    * @param index the index of the character to get, starting at 0
+    * @return the character at the specified index
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    */
+   public char charAt(int index)
+   {
+     if (index < 0 || index >= count)
+       throw new StringIndexOutOfBoundsException(index);
+     return value[index];
+   }
+ 
+   /**
+    * Get the specified array of characters. <code>srcOffset - srcEnd</code>
+    * characters will be copied into the array you pass in.
+    *
+    * @param srcOffset the index to start copying from (inclusive)
+    * @param srcEnd the index to stop copying from (exclusive)
+    * @param dst the array to copy into
+    * @param dstOffset the index to start copying into
+    * @throws NullPointerException if dst is null
+    * @throws IndexOutOfBoundsException if any source or target indices are
+    *         out of range (while unspecified, source problems cause a
+    *         StringIndexOutOfBoundsException, and dest problems cause an
+    *         ArrayIndexOutOfBoundsException)
+    * @see System#arraycopy(Object, int, Object, int, int)
+    */
+   public void getChars(int srcOffset, int srcEnd,
+ 		       char[] dst, int dstOffset)
+   {
+     if (srcOffset < 0 || srcEnd > count || srcEnd < srcOffset)
+       throw new StringIndexOutOfBoundsException();
+     System.arraycopy(value, srcOffset, dst, dstOffset, srcEnd - srcOffset);
+   }
+ 
+   /**
+    * Set the character at the specified index.
+    *
+    * @param index the index of the character to set starting at 0
+    * @param ch the value to set that character to
+    * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    */
+   public void setCharAt(int index, char ch)
+   {
+     if (index < 0 || index >= count)
+       throw new StringIndexOutOfBoundsException(index);
+     // Call ensureCapacity to enforce copy-on-write.
+     ensureCapacity(count);
+     value[index] = ch;
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param obj the <code>Object</code> to convert and append
+    * @return this <code>StringBuilder</code>
+    * @see String#valueOf(Object)
+    * @see #append(String)
+    */
+   public StringBuilder append(Object obj)
+   {
+     return append(obj == null ? "null" : obj.toString());
+   }
+ 
+   /**
+    * Append the <code>String</code> to this <code>StringBuilder</code>. If
+    * str is null, the String "null" is appended.
+    *
+    * @param str the <code>String</code> to append
+    * @return this <code>StringBuilder</code>
+    */
+   public StringBuilder append(String str)
+   {
+     if (str == null)
+       str = "null";
+     int len = str.count;
+     ensureCapacity(count + len);
+     str.getChars(0, len, value, count);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Append the <code>StringBuilder</code> value of the argument to this
+    * <code>StringBuilder</code>. This behaves the same as
+    * <code>append((Object) stringBuffer)</code>, except it is more efficient.
+    *
+    * @param stringBuffer the <code>StringBuilder</code> to convert and append
+    * @return this <code>StringBuilder</code>
+    * @see #append(Object)
+    */
+   public StringBuilder append(StringBuffer stringBuffer)
+   {
+     if (stringBuffer == null)
+       return append("null");
+     synchronized (stringBuffer)
+       {
+ 	int len = stringBuffer.count;
+ 	ensureCapacity(count + len);
+ 	System.arraycopy(stringBuffer.value, 0, value, count, len);
+ 	count += len;
+       }
+     return this;
+   }
+ 
+   /**
+    * Append the <code>char</code> array to this <code>StringBuilder</code>.
+    * This is similar (but more efficient) than
+    * <code>append(new String(data))</code>, except in the case of null.
+    *
+    * @param data the <code>char[]</code> to append
+    * @return this <code>StringBuilder</code>
+    * @throws NullPointerException if <code>str</code> is <code>null</code>
+    * @see #append(char[], int, int)
+    */
+   public StringBuilder append(char[] data)
+   {
+     return append(data, 0, data.length);
+   }
+ 
+   /**
+    * Append part of the <code>char</code> array to this
+    * <code>StringBuilder</code>. This is similar (but more efficient) than
+    * <code>append(new String(data, offset, count))</code>, except in the case
+    * of null.
+    *
+    * @param data the <code>char[]</code> to append
+    * @param offset the start location in <code>str</code>
+    * @param count the number of characters to get from <code>str</code>
+    * @return this <code>StringBuilder</code>
+    * @throws NullPointerException if <code>str</code> is <code>null</code>
+    * @throws IndexOutOfBoundsException if offset or count is out of range
+    *         (while unspecified, this is a StringIndexOutOfBoundsException)
+    */
+   public StringBuilder append(char[] data, int offset, int count)
+   {
+     if (offset < 0 || count < 0 || offset > data.length - count)
+       throw new StringIndexOutOfBoundsException();
+     ensureCapacity(this.count + count);
+     System.arraycopy(data, offset, value, this.count, count);
+     this.count += count;
+     return this;
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param bool the <code>boolean</code> to convert and append
+    * @return this <code>StringBuilder</code>
+    * @see String#valueOf(boolean)
+    */
+   public StringBuilder append(boolean bool)
+   {
+     return append(bool ? "true" : "false");
+   }
+ 
+   /**
+    * Append the <code>char</code> to this <code>StringBuilder</code>.
+    *
+    * @param ch the <code>char</code> to append
+    * @return this <code>StringBuilder</code>
+    */
+   public StringBuilder append(char ch)
+   {
+     ensureCapacity(count + 1);
+     value[count++] = ch;
+     return this;
+   }
+ 
+   /**
+    * Append the characters in the <code>CharSequence</code> to this
+    * buffer.
+    *
+    * @param seq the <code>CharSequence</code> providing the characters
+    * @return this <code>StringBuilder</code>
+    */
+   public StringBuilder append(CharSequence seq)
+   {
+     return append(seq, 0, seq.length());
+   }
+ 
+   /**
+    * Append some characters from the <code>CharSequence</code> to this
+    * buffer.  If the argument is null, the four characters "null" are
+    * appended.
+    *
+    * @param seq the <code>CharSequence</code> providing the characters
+    * @param start the starting index
+    * @param end one past the final index
+    * @return this <code>StringBuilder</code>
+    */
+   public StringBuilder append(CharSequence seq, int start,
+ 			      int end)
+   {
+     if (seq == null)
+       return append("null");
+     if (end - start > 0)
+       {
+ 	ensureCapacity(count + end - start);
+ 	for (; start < end; ++start)
+ 	  value[count++] = seq.charAt(start);
+       }
+     return this;
+   }
+ 
+   /**
+    * Append the code point to this <code>StringBuilder</code>.
+    * This is like #append(char), but will append two characters
+    * if a supplementary code point is given.
+    *
+    * @param code the code point to append
+    * @return this <code>StringBuilder</code>
+    * @see Character#toChars(int, char[], int)
+    * @since 1.5
+    */
+   public synchronized StringBuilder appendCodePoint(int code)
+   {
+     int len = Character.charCount(code);
+     ensureCapacity(count + len);
+     Character.toChars(code, value, count);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param inum the <code>int</code> to convert and append
+    * @return this <code>StringBuilder</code>
+    * @see String#valueOf(int)
+    */
+   // This is native in libgcj, for efficiency.
+   public StringBuilder append(int inum)
+   {
+     return append(String.valueOf(inum));
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param lnum the <code>long</code> to convert and append
+    * @return this <code>StringBuilder</code>
+    * @see String#valueOf(long)
+    */
+   public StringBuilder append(long lnum)
+   {
+     return append(Long.toString(lnum, 10));
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param fnum the <code>float</code> to convert and append
+    * @return this <code>StringBuilder</code>
+    * @see String#valueOf(float)
+    */
+   public StringBuilder append(float fnum)
+   {
+     return append(Float.toString(fnum));
+   }
+ 
+   /**
+    * Append the <code>String</code> value of the argument to this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param dnum the <code>double</code> to convert and append
+    * @return this <code>StringBuilder</code>
+    * @see String#valueOf(double)
+    */
+   public StringBuilder append(double dnum)
+   {
+     return append(Double.toString(dnum));
+   }
+ 
+   /**
+    * Delete characters from this <code>StringBuilder</code>.
+    * <code>delete(10, 12)</code> will delete 10 and 11, but not 12. It is
+    * harmless for end to be larger than length().
+    *
+    * @param start the first character to delete
+    * @param end the index after the last character to delete
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if start or end are out of bounds
+    */
+   public StringBuilder delete(int start, int end)
+   {
+     if (start < 0 || start > count || start > end)
+       throw new StringIndexOutOfBoundsException(start);
+     if (end > count)
+       end = count;
+     // This will unshare if required.
+     ensureCapacity(count);
+     if (count - end != 0)
+       System.arraycopy(value, end, value, start, count - end);
+     count -= end - start;
+     return this;
+   }
+ 
+   /**
+    * Delete a character from this <code>StringBuilder</code>.
+    *
+    * @param index the index of the character to delete
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if index is out of bounds
+    */
+   public StringBuilder deleteCharAt(int index)
+   {
+     return delete(index, index + 1);
+   }
+ 
+   /**
+    * Replace characters between index <code>start</code> (inclusive) and
+    * <code>end</code> (exclusive) with <code>str</code>. If <code>end</code>
+    * is larger than the size of this StringBuilder, all characters after
+    * <code>start</code> are replaced.
+    *
+    * @param start the beginning index of characters to delete (inclusive)
+    * @param end the ending index of characters to delete (exclusive)
+    * @param str the new <code>String</code> to insert
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if start or end are out of bounds
+    * @throws NullPointerException if str is null
+    */
+   public StringBuilder replace(int start, int end, String str)
+   {
+     if (start < 0 || start > count || start > end)
+       throw new StringIndexOutOfBoundsException(start);
+ 
+     int len = str.count;
+     // Calculate the difference in 'count' after the replace.
+     int delta = len - (end > count ? count : end) + start;
+     ensureCapacity(count + delta);
+ 
+     if (delta != 0 && end < count)
+       System.arraycopy(value, end, value, end + delta, count - end);
+ 
+     str.getChars(0, len, value, start);
+     count += delta;
+     return this;
+   }
+ 
+   /**
+    * Creates a substring of this StringBuilder, starting at a specified index
+    * and ending at the end of this StringBuilder.
+    *
+    * @param beginIndex index to start substring (base 0)
+    * @return new String which is a substring of this StringBuilder
+    * @throws StringIndexOutOfBoundsException if beginIndex is out of bounds
+    * @see #substring(int, int)
+    */
+   public String substring(int beginIndex)
+   {
+     return substring(beginIndex, count);
+   }
+ 
+   /**
+    * Creates a substring of this StringBuilder, starting at a specified index
+    * and ending at one character before a specified index. This is implemented
+    * the same as <code>substring(beginIndex, endIndex)</code>, to satisfy
+    * the CharSequence interface.
+    *
+    * @param beginIndex index to start at (inclusive, base 0)
+    * @param endIndex index to end at (exclusive)
+    * @return new String which is a substring of this StringBuilder
+    * @throws IndexOutOfBoundsException if beginIndex or endIndex is out of
+    *         bounds
+    * @see #substring(int, int)
+    */
+   public CharSequence subSequence(int beginIndex, int endIndex)
+   {
+     return substring(beginIndex, endIndex);
+   }
+ 
+   /**
+    * Creates a substring of this StringBuilder, starting at a specified index
+    * and ending at one character before a specified index.
+    *
+    * @param beginIndex index to start at (inclusive, base 0)
+    * @param endIndex index to end at (exclusive)
+    * @return new String which is a substring of this StringBuilder
+    * @throws StringIndexOutOfBoundsException if beginIndex or endIndex is out
+    *         of bounds
+    */
+   public String substring(int beginIndex, int endIndex)
+   {
+     int len = endIndex - beginIndex;
+     if (beginIndex < 0 || endIndex > count || endIndex < beginIndex)
+       throw new StringIndexOutOfBoundsException();
+     if (len == 0)
+       return "";
+     return new String(value, beginIndex, len);
+   }
+ 
+   /**
+    * Insert a subarray of the <code>char[]</code> argument into this
+    * <code>StringBuilder</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param str the <code>char[]</code> to insert
+    * @param str_offset the index in <code>str</code> to start inserting from
+    * @param len the number of characters to insert
+    * @return this <code>StringBuilder</code>
+    * @throws NullPointerException if <code>str</code> is <code>null</code>
+    * @throws StringIndexOutOfBoundsException if any index is out of bounds
+    */
+   public StringBuilder insert(int offset,
+ 			      char[] str, int str_offset, int len)
+   {
+     if (offset < 0 || offset > count || len < 0
+         || str_offset < 0 || str_offset > str.length - len)
+       throw new StringIndexOutOfBoundsException();
+     ensureCapacity(count + len);
+     System.arraycopy(value, offset, value, offset + len, count - offset);
+     System.arraycopy(str, str_offset, value, offset, len);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param obj the <code>Object</code> to convert and insert
+    * @return this <code>StringBuilder</code>
+    * @exception StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(Object)
+    */
+   public StringBuilder insert(int offset, Object obj)
+   {
+     return insert(offset, obj == null ? "null" : obj.toString());
+   }
+ 
+   /**
+    * Insert the <code>String</code> argument into this
+    * <code>StringBuilder</code>. If str is null, the String "null" is used
+    * instead.
+    *
+    * @param offset the place to insert in this buffer
+    * @param str the <code>String</code> to insert
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    */
+   public StringBuilder insert(int offset, String str)
+   {
+     if (offset < 0 || offset > count)
+       throw new StringIndexOutOfBoundsException(offset);
+     if (str == null)
+       str = "null";
+     int len = str.count;
+     ensureCapacity(count + len);
+     System.arraycopy(value, offset, value, offset + len, count - offset);
+     str.getChars(0, len, value, offset);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Insert the <code>CharSequence</code> argument into this
+    * <code>StringBuilder</code>.  If the sequence is null, the String
+    * "null" is used instead.
+    *
+    * @param offset the place to insert in this buffer
+    * @param sequence the <code>CharSequence</code> to insert
+    * @return this <code>StringBuilder</code>
+    * @throws IndexOutOfBoundsException if offset is out of bounds
+    */
+   public synchronized StringBuilder insert(int offset, CharSequence sequence)
+   {
+     if (sequence == null)
+       sequence = "null";
+     return insert(offset, sequence, 0, sequence.length());
+   }
+ 
+   /**
+    * Insert a subsequence of the <code>CharSequence</code> argument into this
+    * <code>StringBuilder</code>.  If the sequence is null, the String
+    * "null" is used instead.
+    *
+    * @param offset the place to insert in this buffer
+    * @param sequence the <code>CharSequence</code> to insert
+    * @param start the starting index of the subsequence
+    * @param end one past the ending index of the subsequence
+    * @return this <code>StringBuilder</code>
+    * @throws IndexOutOfBoundsException if offset, start,
+    * or end are out of bounds
+    */
+   public synchronized StringBuilder insert(int offset, CharSequence sequence,
+                       int start, int end)
+   {
+     if (sequence == null)
+       sequence = "null";
+     if (start < 0 || end < 0 || start > end || end > sequence.length())
+       throw new IndexOutOfBoundsException();
+     int len = end - start;
+     ensureCapacity(count + len);
+     VMSystem.arraycopy(value, offset, value, offset + len, count - offset);
+     for (int i = start; i < end; ++i)
+       value[offset++] = sequence.charAt(i);
+     count += len;
+     return this;
+   }
+ 
+   /**
+    * Insert the <code>char[]</code> argument into this
+    * <code>StringBuilder</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param data the <code>char[]</code> to insert
+    * @return this <code>StringBuilder</code>
+    * @throws NullPointerException if <code>data</code> is <code>null</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see #insert(int, char[], int, int)
+    */
+   public StringBuilder insert(int offset, char[] data)
+   {
+     return insert(offset, data, 0, data.length);
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param bool the <code>boolean</code> to convert and insert
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(boolean)
+    */
+   public StringBuilder insert(int offset, boolean bool)
+   {
+     return insert(offset, bool ? "true" : "false");
+   }
+ 
+   /**
+    * Insert the <code>char</code> argument into this <code>StringBuilder</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param ch the <code>char</code> to insert
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    */
+   public StringBuilder insert(int offset, char ch)
+   {
+     if (offset < 0 || offset > count)
+       throw new StringIndexOutOfBoundsException(offset);
+     ensureCapacity(count + 1);
+     System.arraycopy(value, offset, value, offset + 1, count - offset);
+     value[offset] = ch;
+     count++;
+     return this;
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param inum the <code>int</code> to convert and insert
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(int)
+    */
+   public StringBuilder insert(int offset, int inum)
+   {
+     return insert(offset, String.valueOf(inum));
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param lnum the <code>long</code> to convert and insert
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(long)
+    */
+   public StringBuilder insert(int offset, long lnum)
+   {
+     return insert(offset, Long.toString(lnum, 10));
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param fnum the <code>float</code> to convert and insert
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(float)
+    */
+   public StringBuilder insert(int offset, float fnum)
+   {
+     return insert(offset, Float.toString(fnum));
+   }
+ 
+   /**
+    * Insert the <code>String</code> value of the argument into this
+    * <code>StringBuilder</code>. Uses <code>String.valueOf()</code> to convert
+    * to <code>String</code>.
+    *
+    * @param offset the place to insert in this buffer
+    * @param dnum the <code>double</code> to convert and insert
+    * @return this <code>StringBuilder</code>
+    * @throws StringIndexOutOfBoundsException if offset is out of bounds
+    * @see String#valueOf(double)
+    */
+   public StringBuilder insert(int offset, double dnum)
+   {
+     return insert(offset, Double.toString(dnum));
+   }
+ 
+   /**
+    * Finds the first instance of a substring in this StringBuilder.
+    *
+    * @param str String to find
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    * @see #indexOf(String, int)
+    */
+   public int indexOf(String str)
+   {
+     return indexOf(str, 0);
+   }
+ 
+   /**
+    * Finds the first instance of a String in this StringBuilder, starting at
+    * a given index.  If starting index is less than 0, the search starts at
+    * the beginning of this String.  If the starting index is greater than the
+    * length of this String, or the substring is not found, -1 is returned.
+    *
+    * @param str String to find
+    * @param fromIndex index to start the search
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    */
+   public int indexOf(String str, int fromIndex)
+   {
+     if (fromIndex < 0)
+       fromIndex = 0;
+     int limit = count - str.count;
+     for ( ; fromIndex <= limit; fromIndex++)
+       if (regionMatches(fromIndex, str))
+         return fromIndex;
+     return -1;
+   }
+ 
+   /**
+    * Finds the last instance of a substring in this StringBuilder.
+    *
+    * @param str String to find
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    * @see #lastIndexOf(String, int)
+    */
+   public int lastIndexOf(String str)
+   {
+     return lastIndexOf(str, count - str.count);
+   }
+ 
+   /**
+    * Finds the last instance of a String in this StringBuilder, starting at a
+    * given index.  If starting index is greater than the maximum valid index,
+    * then the search begins at the end of this String.  If the starting index
+    * is less than zero, or the substring is not found, -1 is returned.
+    *
+    * @param str String to find
+    * @param fromIndex index to start the search
+    * @return location (base 0) of the String, or -1 if not found
+    * @throws NullPointerException if str is null
+    */
+   public int lastIndexOf(String str, int fromIndex)
+   {
+     fromIndex = Math.min(fromIndex, count - str.count);
+     for ( ; fromIndex >= 0; fromIndex--)
+       if (regionMatches(fromIndex, str))
+         return fromIndex;
+     return -1;
+   }
+ 
+   /**
+    * Reverse the characters in this StringBuilder. The same sequence of
+    * characters exists, but in the reverse index ordering.
+    *
+    * @return this <code>StringBuilder</code>
+    */
+   public StringBuilder reverse()
+   {
+     // Call ensureCapacity to enforce copy-on-write.
+     ensureCapacity(count);
+     for (int i = count >> 1, j = count - i; --i >= 0; ++j)
+       {
+         char c = value[i];
+         value[i] = value[j];
+         value[j] = c;
+       }
+     return this;
+   }
+ 
+   /**
+    * Convert this <code>StringBuilder</code> to a <code>String</code>. The
+    * String is composed of the characters currently in this StringBuilder. Note
+    * that the result is a copy, and that future modifications to this buffer
+    * do not affect the String.
+    *
+    * @return the characters in this StringBuilder
+    */
+   public String toString()
+   {
+     return new String(this);
+   }
+ 
+   /**
+    * Predicate which determines if a substring of this matches another String
+    * starting at a specified offset for each String and continuing for a
+    * specified length. This is more efficient than creating a String to call
+    * indexOf on.
+    *
+    * @param toffset index to start comparison at for this String
+    * @param other non-null String to compare to region of this
+    * @return true if regions match, false otherwise
+    * @see #indexOf(String, int)
+    * @see #lastIndexOf(String, int)
+    * @see String#regionMatches(boolean, int, String, int, int)
+    */
+   private boolean regionMatches(int toffset, String other)
+   {
+     int len = other.count;
+     int index = other.offset;
+     while (--len >= 0)
+       if (value[toffset++] != other.value[index++])
+         return false;
+     return true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/StringIndexOutOfBoundsException.java gcc-4.1.0/libjava/classpath/java/lang/StringIndexOutOfBoundsException.java
*** gcc-4.0.2/libjava/classpath/java/lang/StringIndexOutOfBoundsException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/StringIndexOutOfBoundsException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* StringIndexOutOfBoundsException.java -- thrown to indicate attempt to
+    exceed string bounds
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * This exception can be thrown to indicate an attempt to access an index
+  * which is out of bounds of a String. Any negative integer, and a positive
+  * integer greater than or equal to the size of the string, is an index
+  * which would be out of bounds.
+  *
+  * @author Brian Jones
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class StringIndexOutOfBoundsException extends IndexOutOfBoundsException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -6762910422159637258L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public StringIndexOutOfBoundsException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public StringIndexOutOfBoundsException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception noting the illegal index.
+    *
+    * @param index the invalid index
+    */
+   public StringIndexOutOfBoundsException(int index)
+   {
+     super("String index out of range: " + index);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/System.java gcc-4.1.0/libjava/classpath/java/lang/System.java
*** gcc-4.0.2/libjava/classpath/java/lang/System.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/System.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,528 ----
+ /* System.java -- useful methods to interface with the system
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ import gnu.classpath.SystemProperties;
+ import gnu.classpath.VMStackWalker;
+ 
+ import java.io.InputStream;
+ import java.io.PrintStream;
+ import java.util.Properties;
+ import java.util.PropertyPermission;
+ 
+ /**
+  * System represents system-wide resources; things that represent the
+  * general environment.  As such, all methods are static.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status still missing 1.4 functionality
+  */
+ public final class System
+ {
+   // WARNING: System is a CORE class in the bootstrap cycle. See the comments
+   // in vm/reference/java/lang/Runtime for implications of this fact.
+ 
+   /**
+    * The standard InputStream. This is assigned at startup and starts its
+    * life perfectly valid. Although it is marked final, you can change it
+    * using {@link #setIn(InputStream)} through some hefty VM magic.
+    *
+    * <p>This corresponds to the C stdin and C++ cin variables, which
+    * typically input from the keyboard, but may be used to pipe input from
+    * other processes or files.  That should all be transparent to you,
+    * however.
+    */
+   public static final InputStream in = VMSystem.makeStandardInputStream();
+ 
+   /**
+    * The standard output PrintStream.  This is assigned at startup and
+    * starts its life perfectly valid. Although it is marked final, you can
+    * change it using {@link #setOut(PrintStream)} through some hefty VM magic.
+    *
+    * <p>This corresponds to the C stdout and C++ cout variables, which
+    * typically output normal messages to the screen, but may be used to pipe
+    * output to other processes or files.  That should all be transparent to
+    * you, however.
+    */
+   public static final PrintStream out = VMSystem.makeStandardOutputStream();
+ 
+   /**
+    * The standard output PrintStream.  This is assigned at startup and
+    * starts its life perfectly valid. Although it is marked final, you can
+    * change it using {@link #setErr(PrintStream)} through some hefty VM magic.
+    *
+    * <p>This corresponds to the C stderr and C++ cerr variables, which
+    * typically output error messages to the screen, but may be used to pipe
+    * output to other processes or files.  That should all be transparent to
+    * you, however.
+    */
+   public static final PrintStream err = VMSystem.makeStandardErrorStream();
+ 
+   /**
+    * This class is uninstantiable.
+    */
+   private System()
+   {
+   }
+ 
+   /**
+    * Set {@link #in} to a new InputStream. This uses some VM magic to change
+    * a "final" variable, so naturally there is a security check,
+    * <code>RuntimePermission("setIO")</code>.
+    *
+    * @param in the new InputStream
+    * @throws SecurityException if permission is denied
+    * @since 1.1
+    */
+   public static void setIn(InputStream in)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe.
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("setIO"));
+     VMSystem.setIn(in);
+   }
+ 
+   /**
+    * Set {@link #out} to a new PrintStream. This uses some VM magic to change
+    * a "final" variable, so naturally there is a security check,
+    * <code>RuntimePermission("setIO")</code>.
+    *
+    * @param out the new PrintStream
+    * @throws SecurityException if permission is denied
+    * @since 1.1
+    */
+   public static void setOut(PrintStream out)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe.
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("setIO"));
+     
+     VMSystem.setOut(out);
+   }
+ 
+   /**
+    * Set {@link #err} to a new PrintStream. This uses some VM magic to change
+    * a "final" variable, so naturally there is a security check,
+    * <code>RuntimePermission("setIO")</code>.
+    *
+    * @param err the new PrintStream
+    * @throws SecurityException if permission is denied
+    * @since 1.1
+    */
+   public static void setErr(PrintStream err)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe.
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("setIO"));
+     VMSystem.setErr(err);
+   }
+ 
+   /**
+    * Set the current SecurityManager. If a security manager already exists,
+    * then <code>RuntimePermission("setSecurityManager")</code> is checked
+    * first. Since this permission is denied by the default security manager,
+    * setting the security manager is often an irreversible action.
+    *
+    * <STRONG>Spec Note:</STRONG> Don't ask me, I didn't write it.  It looks
+    * pretty vulnerable; whoever gets to the gate first gets to set the policy.
+    * There is probably some way to set the original security manager as a
+    * command line argument to the VM, but I don't know it.
+    *
+    * @param sm the new SecurityManager
+    * @throws SecurityException if permission is denied
+    */
+   public static synchronized void setSecurityManager(SecurityManager sm)
+   {
+     // Implementation note: the field lives in SecurityManager because of
+     // bootstrap initialization issues. This method is synchronized so that
+     // no other thread changes it to null before this thread makes the change.
+     if (SecurityManager.current != null)
+       SecurityManager.current.checkPermission
+         (new RuntimePermission("setSecurityManager"));
+     SecurityManager.current = sm;
+   }
+ 
+   /**
+    * Get the current SecurityManager. If the SecurityManager has not been
+    * set yet, then this method returns null.
+    *
+    * @return the current SecurityManager, or null
+    */
+   public static SecurityManager getSecurityManager()
+   {
+     return SecurityManager.current;
+   }
+ 
+   /**
+    * Get the current time, measured in the number of milliseconds from the
+    * beginning of Jan. 1, 1970. This is gathered from the system clock, with
+    * any attendant incorrectness (it may be timezone dependent).
+    *
+    * @return the current time
+    * @see java.util.Date
+    */
+   public static long currentTimeMillis()
+   {
+     return VMSystem.currentTimeMillis();
+   }
+ 
+   /**
+    * Copy one array onto another from <code>src[srcStart]</code> ...
+    * <code>src[srcStart+len-1]</code> to <code>dest[destStart]</code> ...
+    * <code>dest[destStart+len-1]</code>. First, the arguments are validated:
+    * neither array may be null, they must be of compatible types, and the
+    * start and length must fit within both arrays. Then the copying starts,
+    * and proceeds through increasing slots.  If src and dest are the same
+    * array, this will appear to copy the data to a temporary location first.
+    * An ArrayStoreException in the middle of copying will leave earlier
+    * elements copied, but later elements unchanged.
+    *
+    * @param src the array to copy elements from
+    * @param srcStart the starting position in src
+    * @param dest the array to copy elements to
+    * @param destStart the starting position in dest
+    * @param len the number of elements to copy
+    * @throws NullPointerException if src or dest is null
+    * @throws ArrayStoreException if src or dest is not an array, if they are
+    *         not compatible array types, or if an incompatible runtime type
+    *         is stored in dest
+    * @throws IndexOutOfBoundsException if len is negative, or if the start or
+    *         end copy position in either array is out of bounds
+    */
+   public static void arraycopy(Object src, int srcStart,
+                                Object dest, int destStart, int len)
+   {
+     VMSystem.arraycopy(src, srcStart, dest, destStart, len);
+   }
+ 
+   /**
+    * Get a hash code computed by the VM for the Object. This hash code will
+    * be the same as Object's hashCode() method.  It is usually some
+    * convolution of the pointer to the Object internal to the VM.  It
+    * follows standard hash code rules, in that it will remain the same for a
+    * given Object for the lifetime of that Object.
+    *
+    * @param o the Object to get the hash code for
+    * @return the VM-dependent hash code for this Object
+    * @since 1.1
+    */
+   public static int identityHashCode(Object o)
+   {
+     return VMSystem.identityHashCode(o);
+   }
+ 
+   /**
+    * Get all the system properties at once. A security check may be performed,
+    * <code>checkPropertiesAccess</code>. Note that a security manager may
+    * allow getting a single property, but not the entire group.
+    *
+    * <p>The required properties include:
+    * <dl>
+    * <dt>java.version</dt>         <dd>Java version number</dd>
+    * <dt>java.vendor</dt>          <dd>Java vendor specific string</dd>
+    * <dt>java.vendor.url</dt>      <dd>Java vendor URL</dd>
+    * <dt>java.home</dt>            <dd>Java installation directory</dd>
+    * <dt>java.vm.specification.version</dt> <dd>VM Spec version</dd>
+    * <dt>java.vm.specification.vendor</dt>  <dd>VM Spec vendor</dd>
+    * <dt>java.vm.specification.name</dt>    <dd>VM Spec name</dd>
+    * <dt>java.vm.version</dt>      <dd>VM implementation version</dd>
+    * <dt>java.vm.vendor</dt>       <dd>VM implementation vendor</dd>
+    * <dt>java.vm.name</dt>         <dd>VM implementation name</dd>
+    * <dt>java.specification.version</dt>    <dd>Java Runtime Environment version</dd>
+    * <dt>java.specification.vendor</dt>     <dd>Java Runtime Environment vendor</dd>
+    * <dt>java.specification.name</dt>       <dd>Java Runtime Environment name</dd>
+    * <dt>java.class.version</dt>   <dd>Java class version number</dd>
+    * <dt>java.class.path</dt>      <dd>Java classpath</dd>
+    * <dt>java.library.path</dt>    <dd>Path for finding Java libraries</dd>
+    * <dt>java.io.tmpdir</dt>       <dd>Default temp file path</dd>
+    * <dt>java.compiler</dt>        <dd>Name of JIT to use</dd>
+    * <dt>java.ext.dirs</dt>        <dd>Java extension path</dd>
+    * <dt>os.name</dt>              <dd>Operating System Name</dd>
+    * <dt>os.arch</dt>              <dd>Operating System Architecture</dd>
+    * <dt>os.version</dt>           <dd>Operating System Version</dd>
+    * <dt>file.separator</dt>       <dd>File separator ("/" on Unix)</dd>
+    * <dt>path.separator</dt>       <dd>Path separator (":" on Unix)</dd>
+    * <dt>line.separator</dt>       <dd>Line separator ("\n" on Unix)</dd>
+    * <dt>user.name</dt>            <dd>User account name</dd>
+    * <dt>user.home</dt>            <dd>User home directory</dd>
+    * <dt>user.dir</dt>             <dd>User's current working directory</dd>
+    * </dl>
+    *
+    * In addition, gnu defines several other properties, where ? stands for
+    * each character in '0' through '9':
+    * <dl>
+    * <dt>gnu.classpath.home</dt>         <dd>Path to the classpath libraries.</dd>
+    * <dt>gnu.classpath.version</dt>      <dd>Version of the classpath libraries.</dd>
+    * <dt>gnu.classpath.vm.shortname</dt> <dd>Succinct version of the VM name;
+    *     used for finding property files in file system</dd>
+    * <dt>gnu.classpath.home.url</dt>     <dd> Base URL; used for finding
+    *     property files in file system</dd>
+    * <dt>gnu.cpu.endian</dt>             <dd>big or little</dd>
+    * <dt>gnu.java.io.encoding_scheme_alias.iso-8859-?</dt>   <dd>8859_?</dd>
+    * <dt>gnu.java.io.encoding_scheme_alias.iso8859_?</dt>    <dd>8859_?</dd>
+    * <dt>gnu.java.io.encoding_scheme_alias.iso-latin-_?</dt> <dd>8859_?</dd>
+    * <dt>gnu.java.io.encoding_scheme_alias.latin?</dt>       <dd>8859_?</dd>
+    * <dt>gnu.java.io.encoding_scheme_alias.utf-8</dt>        <dd>UTF8</dd>
+    * </dl>
+    *
+    * @return the system properties, will never be null
+    * @throws SecurityException if permission is denied
+    */
+   public static Properties getProperties()
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe.
+     if (sm != null)
+       sm.checkPropertiesAccess();
+     return SystemProperties.getProperties();
+   }
+ 
+   /**
+    * Set all the system properties at once. A security check may be performed,
+    * <code>checkPropertiesAccess</code>. Note that a security manager may
+    * allow setting a single property, but not the entire group. An argument
+    * of null resets the properties to the startup default.
+    *
+    * @param properties the new set of system properties
+    * @throws SecurityException if permission is denied
+    */
+   public static void setProperties(Properties properties)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe.
+     if (sm != null)
+       sm.checkPropertiesAccess();
+     SystemProperties.setProperties(properties);
+   }
+ 
+   /**
+    * Get a single system property by name. A security check may be performed,
+    * <code>checkPropertyAccess(key)</code>.
+    *
+    * @param key the name of the system property to get
+    * @return the property, or null if not found
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if key is null
+    * @throws IllegalArgumentException if key is ""
+    */
+   public static String getProperty(String key)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe.
+     if (sm != null)
+       sm.checkPropertyAccess(key);
+     else if (key.length() == 0)
+       throw new IllegalArgumentException("key can't be empty");
+     return SystemProperties.getProperty(key);
+   }
+ 
+   /**
+    * Get a single system property by name. A security check may be performed,
+    * <code>checkPropertyAccess(key)</code>.
+    *
+    * @param key the name of the system property to get
+    * @param def the default
+    * @return the property, or def if not found
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if key is null
+    * @throws IllegalArgumentException if key is ""
+    */
+   public static String getProperty(String key, String def)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe.
+     if (sm != null)
+       sm.checkPropertyAccess(key);
+     return SystemProperties.getProperty(key, def);
+   }
+ 
+   /**
+    * Set a single system property by name. A security check may be performed,
+    * <code>checkPropertyAccess(key, "write")</code>.
+    *
+    * @param key the name of the system property to set
+    * @param value the new value
+    * @return the previous value, or null
+    * @throws SecurityException if permission is denied
+    * @throws NullPointerException if key is null
+    * @throws IllegalArgumentException if key is ""
+    * @since 1.2
+    */
+   public static String setProperty(String key, String value)
+   {
+     SecurityManager sm = SecurityManager.current; // Be thread-safe.
+     if (sm != null)
+       sm.checkPermission(new PropertyPermission(key, "write"));
+     return SystemProperties.setProperty(key, value);
+   }
+ 
+   /**
+    * Gets the value of an environment variable.
+    *
+    * @param name the name of the environment variable
+    * @return the string value of the variable or null when the
+    *         environment variable is not defined.
+    * @throws NullPointerException
+    * @throws SecurityException if permission is denied
+    * @since 1.5
+    * @specnote This method was deprecated in some JDK releases, but
+    *           was restored in 1.5.
+    */
+   public static String getenv(String name)
+   {
+     if (name == null)
+       throw new NullPointerException();
+     SecurityManager sm = SecurityManager.current; // Be thread-safe.
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("getenv." + name));
+     return VMSystem.getenv(name);
+   }
+ 
+   /**
+    * Terminate the Virtual Machine. This just calls
+    * <code>Runtime.getRuntime().exit(status)</code>, and never returns.
+    * Obviously, a security check is in order, <code>checkExit</code>.
+    *
+    * @param status the exit status; by convention non-zero is abnormal
+    * @throws SecurityException if permission is denied
+    * @see Runtime#exit(int)
+    */
+   public static void exit(int status)
+   {
+     Runtime.getRuntime().exit(status);
+   }
+ 
+   /**
+    * Calls the garbage collector. This is only a hint, and it is up to the
+    * implementation what this hint suggests, but it usually causes a
+    * best-effort attempt to reclaim unused memory from discarded objects.
+    * This calls <code>Runtime.getRuntime().gc()</code>.
+    *
+    * @see Runtime#gc()
+    */
+   public static void gc()
+   {
+     Runtime.getRuntime().gc();
+   }
+ 
+   /**
+    * Runs object finalization on pending objects. This is only a hint, and
+    * it is up to the implementation what this hint suggests, but it usually
+    * causes a best-effort attempt to run finalizers on all objects ready
+    * to be reclaimed. This calls
+    * <code>Runtime.getRuntime().runFinalization()</code>.
+    *
+    * @see Runtime#runFinalization()
+    */
+   public static void runFinalization()
+   {
+     Runtime.getRuntime().runFinalization();
+   }
+ 
+   /**
+    * Tell the Runtime whether to run finalization before exiting the
+    * JVM.  This is inherently unsafe in multi-threaded applications,
+    * since it can force initialization on objects which are still in use
+    * by live threads, leading to deadlock; therefore this is disabled by
+    * default. There may be a security check, <code>checkExit(0)</code>. This
+    * calls <code>Runtime.runFinalizersOnExit()</code>.
+    *
+    * @param finalizeOnExit whether to run finalizers on exit
+    * @throws SecurityException if permission is denied
+    * @see Runtime#runFinalizersOnExit(boolean)
+    * @since 1.1
+    * @deprecated never rely on finalizers to do a clean, thread-safe,
+    *             mop-up from your code
+    */
+   public static void runFinalizersOnExit(boolean finalizeOnExit)
+   {
+     Runtime.runFinalizersOnExit(finalizeOnExit);
+   }
+ 
+   /**
+    * Load a code file using its explicit system-dependent filename. A security
+    * check may be performed, <code>checkLink</code>. This just calls
+    * <code>Runtime.getRuntime().load(filename)</code>.
+    *
+    * <p>
+    * The library is loaded using the class loader associated with the
+    * class associated with the invoking method.
+    *
+    * @param filename the code file to load
+    * @throws SecurityException if permission is denied
+    * @throws UnsatisfiedLinkError if the file cannot be loaded
+    * @see Runtime#load(String)
+    */
+   public static void load(String filename)
+   {
+     Runtime.getRuntime().load(filename, VMStackWalker.getCallingClassLoader());
+   }
+ 
+   /**
+    * Load a library using its explicit system-dependent filename. A security
+    * check may be performed, <code>checkLink</code>. This just calls
+    * <code>Runtime.getRuntime().load(filename)</code>.
+    *
+    * <p>
+    * The library is loaded using the class loader associated with the
+    * class associated with the invoking method.
+    *
+    * @param libname the library file to load
+    * @throws SecurityException if permission is denied
+    * @throws UnsatisfiedLinkError if the file cannot be loaded
+    * @see Runtime#load(String)
+    */
+   public static void loadLibrary(String libname)
+   {
+     Runtime.getRuntime().loadLibrary(libname,
+       VMStackWalker.getCallingClassLoader());
+   }
+ 
+   /**
+    * Convert a library name to its platform-specific variant.
+    *
+    * @param libname the library name, as used in <code>loadLibrary</code>
+    * @return the platform-specific mangling of the name
+    * @since 1.2
+    */
+   public static String mapLibraryName(String libname)
+   {
+     return VMRuntime.mapLibraryName(libname);
+   }
+ 
+ } // class System
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Thread.java gcc-4.1.0/libjava/classpath/java/lang/Thread.java
*** gcc-4.0.2/libjava/classpath/java/lang/Thread.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Thread.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1003 ----
+ /* Thread -- an independent thread of executable code
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+    Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import java.security.Permission;
+ import java.util.Map;
+ import java.util.WeakHashMap;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete to version 1.4, with caveats. We do not
+  *          implement the deprecated (and dangerous) stop, suspend, and resume
+  *          methods. Security implementation is not complete.
+  */
+ 
+ /**
+  * Thread represents a single thread of execution in the VM. When an
+  * application VM starts up, it creates a non-daemon Thread which calls the
+  * main() method of a particular class.  There may be other Threads running,
+  * such as the garbage collection thread.
+  *
+  * <p>Threads have names to identify them.  These names are not necessarily
+  * unique. Every Thread has a priority, as well, which tells the VM which
+  * Threads should get more running time. New threads inherit the priority
+  * and daemon status of the parent thread, by default.
+  *
+  * <p>There are two methods of creating a Thread: you may subclass Thread and
+  * implement the <code>run()</code> method, at which point you may start the
+  * Thread by calling its <code>start()</code> method, or you may implement
+  * <code>Runnable</code> in the class you want to use and then call new
+  * <code>Thread(your_obj).start()</code>.
+  *
+  * <p>The virtual machine runs until all non-daemon threads have died (either
+  * by returning from the run() method as invoked by start(), or by throwing
+  * an uncaught exception); or until <code>System.exit</code> is called with
+  * adequate permissions.
+  *
+  * <p>It is unclear at what point a Thread should be added to a ThreadGroup,
+  * and at what point it should be removed. Should it be inserted when it
+  * starts, or when it is created?  Should it be removed when it is suspended
+  * or interrupted?  The only thing that is clear is that the Thread should be
+  * removed when it is stopped.
+  *
+  * @author Tom Tromey
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Runnable
+  * @see Runtime#exit(int)
+  * @see #run()
+  * @see #start()
+  * @see ThreadLocal
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Thread implements Runnable
+ {
+   /** The minimum priority for a Thread. */
+   public static final int MIN_PRIORITY = 1;
+ 
+   /** The priority a Thread gets by default. */
+   public static final int NORM_PRIORITY = 5;
+ 
+   /** The maximum priority for a Thread. */
+   public static final int MAX_PRIORITY = 10;
+ 
+   /** The underlying VM thread, only set when the thread is actually running.
+    */
+   volatile VMThread vmThread;
+ 
+   /**
+    * The group this thread belongs to. This is set to null by
+    * ThreadGroup.removeThread when the thread dies.
+    */
+   volatile ThreadGroup group;
+ 
+   /** The object to run(), null if this is the target. */
+   final Runnable runnable;
+ 
+   /** The thread name, non-null. */
+   volatile String name;
+ 
+   /** Whether the thread is a daemon. */
+   volatile boolean daemon;
+ 
+   /** The thread priority, 1 to 10. */
+   volatile int priority;
+ 
+   /** Native thread stack size. 0 = use default */
+   private long stacksize;
+ 
+   /** Was the thread stopped before it was started? */
+   Throwable stillborn;
+ 
+   /** The context classloader for this Thread. */
+   private ClassLoader contextClassLoader;
+ 
+   /** The next thread number to use. */
+   private static int numAnonymousThreadsCreated;
+ 
+   /** Thread local storage. Package accessible for use by
+     * InheritableThreadLocal.
+     */
+   WeakHashMap locals;
+ 
+   /**
+    * Allocates a new <code>Thread</code> object. This constructor has
+    * the same effect as <code>Thread(null, null,</code>
+    * <i>gname</i><code>)</code>, where <b><i>gname</i></b> is
+    * a newly generated name. Automatically generated names are of the
+    * form <code>"Thread-"+</code><i>n</i>, where <i>n</i> is an integer.
+    * <p>
+    * Threads created this way must have overridden their
+    * <code>run()</code> method to actually do anything.  An example
+    * illustrating this method being used follows:
+    * <p><blockquote><pre>
+    *     import java.lang.*;
+    *
+    *     class plain01 implements Runnable {
+    *         String name;
+    *         plain01() {
+    *             name = null;
+    *         }
+    *         plain01(String s) {
+    *             name = s;
+    *         }
+    *         public void run() {
+    *             if (name == null)
+    *                 System.out.println("A new thread created");
+    *             else
+    *                 System.out.println("A new thread with name " + name +
+    *                                    " created");
+    *         }
+    *     }
+    *     class threadtest01 {
+    *         public static void main(String args[] ) {
+    *             int failed = 0 ;
+    *
+    *             <b>Thread t1 = new Thread();</b>
+    *             if (t1 != null)
+    *                 System.out.println("new Thread() succeed");
+    *             else {
+    *                 System.out.println("new Thread() failed");
+    *                 failed++;
+    *             }
+    *         }
+    *     }
+    * </pre></blockquote>
+    *
+    * @see     java.lang.Thread#Thread(java.lang.ThreadGroup,
+    *          java.lang.Runnable, java.lang.String)
+    */
+   public Thread()
+   {
+     this(null, (Runnable) null);
+   }
+ 
+   /**
+    * Allocates a new <code>Thread</code> object. This constructor has
+    * the same effect as <code>Thread(null, target,</code>
+    * <i>gname</i><code>)</code>, where <i>gname</i> is
+    * a newly generated name. Automatically generated names are of the
+    * form <code>"Thread-"+</code><i>n</i>, where <i>n</i> is an integer.
+    *
+    * @param target the object whose <code>run</code> method is called.
+    * @see java.lang.Thread#Thread(java.lang.ThreadGroup,
+    *                              java.lang.Runnable, java.lang.String)
+    */
+   public Thread(Runnable target)
+   {
+     this(null, target);
+   }
+ 
+   /**
+    * Allocates a new <code>Thread</code> object. This constructor has
+    * the same effect as <code>Thread(null, null, name)</code>.
+    *
+    * @param   name   the name of the new thread.
+    * @see     java.lang.Thread#Thread(java.lang.ThreadGroup,
+    *          java.lang.Runnable, java.lang.String)
+    */
+   public Thread(String name)
+   {
+     this(null, null, name, 0);
+   }
+ 
+   /**
+    * Allocates a new <code>Thread</code> object. This constructor has
+    * the same effect as <code>Thread(group, target,</code>
+    * <i>gname</i><code>)</code>, where <i>gname</i> is
+    * a newly generated name. Automatically generated names are of the
+    * form <code>"Thread-"+</code><i>n</i>, where <i>n</i> is an integer.
+    *
+    * @param group the group to put the Thread into
+    * @param target the Runnable object to execute
+    * @throws SecurityException if this thread cannot access <code>group</code>
+    * @throws IllegalThreadStateException if group is destroyed
+    * @see #Thread(ThreadGroup, Runnable, String)
+    */
+   public Thread(ThreadGroup group, Runnable target)
+   {
+     this(group, target, "Thread-" + ++numAnonymousThreadsCreated, 0);
+   }
+ 
+   /**
+    * Allocates a new <code>Thread</code> object. This constructor has
+    * the same effect as <code>Thread(group, null, name)</code>
+    *
+    * @param group the group to put the Thread into
+    * @param name the name for the Thread
+    * @throws NullPointerException if name is null
+    * @throws SecurityException if this thread cannot access <code>group</code>
+    * @throws IllegalThreadStateException if group is destroyed
+    * @see #Thread(ThreadGroup, Runnable, String)
+    */
+   public Thread(ThreadGroup group, String name)
+   {
+     this(group, null, name, 0);
+   }
+ 
+   /**
+    * Allocates a new <code>Thread</code> object. This constructor has
+    * the same effect as <code>Thread(null, target, name)</code>.
+    *
+    * @param target the Runnable object to execute
+    * @param name the name for the Thread
+    * @throws NullPointerException if name is null
+    * @see #Thread(ThreadGroup, Runnable, String)
+    */
+   public Thread(Runnable target, String name)
+   {
+     this(null, target, name, 0);
+   }
+ 
+   /**
+    * Allocate a new Thread object, with the specified ThreadGroup and name, and
+    * using the specified Runnable object's <code>run()</code> method to
+    * execute.  If the Runnable object is null, <code>this</code> (which is
+    * a Runnable) is used instead.
+    *
+    * <p>If the ThreadGroup is null, the security manager is checked. If a
+    * manager exists and returns a non-null object for
+    * <code>getThreadGroup</code>, that group is used; otherwise the group
+    * of the creating thread is used. Note that the security manager calls
+    * <code>checkAccess</code> if the ThreadGroup is not null.
+    *
+    * <p>The new Thread will inherit its creator's priority and daemon status.
+    * These can be changed with <code>setPriority</code> and
+    * <code>setDaemon</code>.
+    *
+    * @param group the group to put the Thread into
+    * @param target the Runnable object to execute
+    * @param name the name for the Thread
+    * @throws NullPointerException if name is null
+    * @throws SecurityException if this thread cannot access <code>group</code>
+    * @throws IllegalThreadStateException if group is destroyed
+    * @see Runnable#run()
+    * @see #run()
+    * @see #setDaemon(boolean)
+    * @see #setPriority(int)
+    * @see SecurityManager#checkAccess(ThreadGroup)
+    * @see ThreadGroup#checkAccess()
+    */
+   public Thread(ThreadGroup group, Runnable target, String name)
+   {
+     this(group, target, name, 0);
+   }
+ 
+   /**
+    * Allocate a new Thread object, as if by
+    * <code>Thread(group, null, name)</code>, and give it the specified stack
+    * size, in bytes. The stack size is <b>highly platform independent</b>,
+    * and the virtual machine is free to round up or down, or ignore it
+    * completely.  A higher value might let you go longer before a
+    * <code>StackOverflowError</code>, while a lower value might let you go
+    * longer before an <code>OutOfMemoryError</code>.  Or, it may do absolutely
+    * nothing! So be careful, and expect to need to tune this value if your
+    * virtual machine even supports it.
+    *
+    * @param group the group to put the Thread into
+    * @param target the Runnable object to execute
+    * @param name the name for the Thread
+    * @param size the stack size, in bytes; 0 to be ignored
+    * @throws NullPointerException if name is null
+    * @throws SecurityException if this thread cannot access <code>group</code>
+    * @throws IllegalThreadStateException if group is destroyed
+    * @since 1.4
+    */
+   public Thread(ThreadGroup group, Runnable target, String name, long size)
+   {
+     // Bypass System.getSecurityManager, for bootstrap efficiency.
+     SecurityManager sm = SecurityManager.current;
+     Thread current = currentThread();
+     if (group == null)
+       {
+ 	if (sm != null)
+ 	    group = sm.getThreadGroup();
+ 	if (group == null)
+ 	    group = current.group;
+       }
+     else if (sm != null)
+ 	sm.checkAccess(group);
+ 
+     this.group = group;
+     // Use toString hack to detect null.
+     this.name = name.toString();
+     this.runnable = target;
+     this.stacksize = size;
+ 
+     priority = current.priority;
+     daemon = current.daemon;
+     contextClassLoader = current.contextClassLoader;
+ 
+     group.addThread(this);
+     InheritableThreadLocal.newChildThread(this);
+   }
+ 
+   /**
+    * Used by the VM to create thread objects for threads started outside
+    * of Java. Note: caller is responsible for adding the thread to
+    * a group and InheritableThreadLocal.
+    *
+    * @param vmThread the native thread
+    * @param name the thread name or null to use the default naming scheme
+    * @param priority current priority
+    * @param daemon is the thread a background thread?
+    */
+   Thread(VMThread vmThread, String name, int priority, boolean daemon)
+   {
+     this.vmThread = vmThread;
+     this.runnable = null;
+     if (name == null)
+ 	name = "Thread-" + ++numAnonymousThreadsCreated;
+     this.name = name;
+     this.priority = priority;
+     this.daemon = daemon;
+     this.contextClassLoader = ClassLoader.getSystemClassLoader();
+   }
+ 
+   /**
+    * Get the number of active threads in the current Thread's ThreadGroup.
+    * This implementation calls
+    * <code>currentThread().getThreadGroup().activeCount()</code>.
+    *
+    * @return the number of active threads in the current ThreadGroup
+    * @see ThreadGroup#activeCount()
+    */
+   public static int activeCount()
+   {
+     return currentThread().group.activeCount();
+   }
+ 
+   /**
+    * Check whether the current Thread is allowed to modify this Thread. This
+    * passes the check on to <code>SecurityManager.checkAccess(this)</code>.
+    *
+    * @throws SecurityException if the current Thread cannot modify this Thread
+    * @see SecurityManager#checkAccess(Thread)
+    */
+   public final void checkAccess()
+   {
+     // Bypass System.getSecurityManager, for bootstrap efficiency.
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       sm.checkAccess(this);
+   }
+ 
+   /**
+    * Count the number of stack frames in this Thread.  The Thread in question
+    * must be suspended when this occurs.
+    *
+    * @return the number of stack frames in this Thread
+    * @throws IllegalThreadStateException if this Thread is not suspended
+    * @deprecated pointless, since suspend is deprecated
+    */
+   public int countStackFrames()
+   {
+     VMThread t = vmThread;
+     if (t == null || group == null)
+ 	throw new IllegalThreadStateException();
+ 
+     return t.countStackFrames();
+   }
+ 
+   /**
+    * Get the currently executing Thread. In the situation that the
+    * currently running thread was created by native code and doesn't
+    * have an associated Thread object yet, a new Thread object is
+    * constructed and associated with the native thread.
+    *
+    * @return the currently executing Thread
+    */
+   public static Thread currentThread()
+   {
+     return VMThread.currentThread();
+   }
+ 
+   /**
+    * Originally intended to destroy this thread, this method was never
+    * implemented by Sun, and is hence a no-op.
+    */
+   public void destroy()
+   {
+     throw new NoSuchMethodError();
+   }
+   
+   /**
+    * Print a stack trace of the current thread to stderr using the same
+    * format as Throwable's printStackTrace() method.
+    *
+    * @see Throwable#printStackTrace()
+    */
+   public static void dumpStack()
+   {
+     new Throwable().printStackTrace();
+   }
+ 
+   /**
+    * Copy every active thread in the current Thread's ThreadGroup into the
+    * array. Extra threads are silently ignored. This implementation calls
+    * <code>getThreadGroup().enumerate(array)</code>, which may have a
+    * security check, <code>checkAccess(group)</code>.
+    *
+    * @param array the array to place the Threads into
+    * @return the number of Threads placed into the array
+    * @throws NullPointerException if array is null
+    * @throws SecurityException if you cannot access the ThreadGroup
+    * @see ThreadGroup#enumerate(Thread[])
+    * @see #activeCount()
+    * @see SecurityManager#checkAccess(ThreadGroup)
+    */
+   public static int enumerate(Thread[] array)
+   {
+     return currentThread().group.enumerate(array);
+   }
+   
+   /**
+    * Get this Thread's name.
+    *
+    * @return this Thread's name
+    */
+   public final String getName()
+   {
+     VMThread t = vmThread;
+     return t == null ? name : t.getName();
+   }
+ 
+   /**
+    * Get this Thread's priority.
+    *
+    * @return the Thread's priority
+    */
+   public final synchronized int getPriority()
+   {
+     VMThread t = vmThread;
+     return t == null ? priority : t.getPriority();
+   }
+ 
+   /**
+    * Get the ThreadGroup this Thread belongs to. If the thread has died, this
+    * returns null.
+    *
+    * @return this Thread's ThreadGroup
+    */
+   public final ThreadGroup getThreadGroup()
+   {
+     return group;
+   }
+ 
+   /**
+    * Checks whether the current thread holds the monitor on a given object.
+    * This allows you to do <code>assert Thread.holdsLock(obj)</code>.
+    *
+    * @param obj the object to test lock ownership on.
+    * @return true if the current thread is currently synchronized on obj
+    * @throws NullPointerException if obj is null
+    * @since 1.4
+    */
+   public static boolean holdsLock(Object obj)
+   {
+     return VMThread.holdsLock(obj);
+   }
+ 
+   /**
+    * Interrupt this Thread. First, there is a security check,
+    * <code>checkAccess</code>. Then, depending on the current state of the
+    * thread, various actions take place:
+    *
+    * <p>If the thread is waiting because of {@link #wait()},
+    * {@link #sleep(long)}, or {@link #join()}, its <i>interrupt status</i>
+    * will be cleared, and an InterruptedException will be thrown. Notice that
+    * this case is only possible if an external thread called interrupt().
+    *
+    * <p>If the thread is blocked in an interruptible I/O operation, in
+    * {@link java.nio.channels.InterruptibleChannel}, the <i>interrupt
+    * status</i> will be set, and ClosedByInterruptException will be thrown.
+    *
+    * <p>If the thread is blocked on a {@link java.nio.channels.Selector}, the
+    * <i>interrupt status</i> will be set, and the selection will return, with
+    * a possible non-zero value, as though by the wakeup() method.
+    *
+    * <p>Otherwise, the interrupt status will be set.
+    *
+    * @throws SecurityException if you cannot modify this Thread
+    */
+   public synchronized void interrupt()
+   {
+     checkAccess();
+     VMThread t = vmThread;
+     if (t != null)
+ 	t.interrupt();
+   }
+ 
+   /**
+    * Determine whether the current Thread has been interrupted, and clear
+    * the <i>interrupted status</i> in the process.
+    *
+    * @return whether the current Thread has been interrupted
+    * @see #isInterrupted()
+    */
+   public static boolean interrupted()
+   {
+     return VMThread.interrupted();
+   }
+ 
+   /**
+    * Determine whether the given Thread has been interrupted, but leave
+    * the <i>interrupted status</i> alone in the process.
+    *
+    * @return whether the Thread has been interrupted
+    * @see #interrupted()
+    */
+   public boolean isInterrupted()
+   {
+     VMThread t = vmThread;
+     return t != null && t.isInterrupted();
+   }
+ 
+   /**
+    * Determine whether this Thread is alive. A thread which is alive has
+    * started and not yet died.
+    *
+    * @return whether this Thread is alive
+    */
+   public final boolean isAlive()
+   {
+     return vmThread != null && group != null;
+   }
+ 
+   /**
+    * Tell whether this is a daemon Thread or not.
+    *
+    * @return whether this is a daemon Thread or not
+    * @see #setDaemon(boolean)
+    */
+   public final boolean isDaemon()
+   {
+     VMThread t = vmThread;
+     return t == null ? daemon : t.isDaemon();
+   }
+ 
+   /**
+    * Wait forever for the Thread in question to die.
+    *
+    * @throws InterruptedException if the Thread is interrupted; it's
+    *         <i>interrupted status</i> will be cleared
+    */
+   public final void join() throws InterruptedException
+   {
+     join(0, 0);
+   }
+ 
+   /**
+    * Wait the specified amount of time for the Thread in question to die.
+    *
+    * @param ms the number of milliseconds to wait, or 0 for forever
+    * @throws InterruptedException if the Thread is interrupted; it's
+    *         <i>interrupted status</i> will be cleared
+    */
+   public final void join(long ms) throws InterruptedException
+   {
+     join(ms, 0);
+   }
+ 
+   /**
+    * Wait the specified amount of time for the Thread in question to die.
+    *
+    * <p>Note that 1,000,000 nanoseconds == 1 millisecond, but most VMs do
+    * not offer that fine a grain of timing resolution. Besides, there is
+    * no guarantee that this thread can start up immediately when time expires,
+    * because some other thread may be active.  So don't expect real-time
+    * performance.
+    *
+    * @param ms the number of milliseconds to wait, or 0 for forever
+    * @param ns the number of extra nanoseconds to sleep (0-999999)
+    * @throws InterruptedException if the Thread is interrupted; it's
+    *         <i>interrupted status</i> will be cleared
+    * @throws IllegalArgumentException if ns is invalid
+    */
+   public final void join(long ms, int ns) throws InterruptedException
+   {
+     if(ms < 0 || ns < 0 || ns > 999999)
+ 	throw new IllegalArgumentException();
+ 
+     VMThread t = vmThread;
+     if(t != null)
+         t.join(ms, ns);
+   }
+ 
+   /**
+    * Resume this Thread.  If the thread is not suspended, this method does
+    * nothing. To mirror suspend(), there may be a security check:
+    * <code>checkAccess</code>.
+    *
+    * @throws SecurityException if you cannot resume the Thread
+    * @see #checkAccess()
+    * @see #suspend()
+    * @deprecated pointless, since suspend is deprecated
+    */
+   public final synchronized void resume()
+   {
+     checkAccess();
+     VMThread t = vmThread;
+     if (t != null)
+ 	t.resume();
+   }
+   
+   /**
+    * The method of Thread that will be run if there is no Runnable object
+    * associated with the Thread. Thread's implementation does nothing at all.
+    *
+    * @see #start()
+    * @see #Thread(ThreadGroup, Runnable, String)
+    */
+   public void run()
+   {
+     if (runnable != null)
+       runnable.run();
+   }
+ 
+   /**
+    * Set the daemon status of this Thread.  If this is a daemon Thread, then
+    * the VM may exit even if it is still running.  This may only be called
+    * before the Thread starts running. There may be a security check,
+    * <code>checkAccess</code>.
+    *
+    * @param daemon whether this should be a daemon thread or not
+    * @throws SecurityException if you cannot modify this Thread
+    * @throws IllegalThreadStateException if the Thread is active
+    * @see #isDaemon()
+    * @see #checkAccess()
+    */
+   public final synchronized void setDaemon(boolean daemon)
+   {
+     if (vmThread != null)
+       throw new IllegalThreadStateException();
+     checkAccess();
+     this.daemon = daemon;
+   }
+ 
+   /**
+    * Returns the context classloader of this Thread. The context
+    * classloader can be used by code that want to load classes depending
+    * on the current thread. Normally classes are loaded depending on
+    * the classloader of the current class. There may be a security check
+    * for <code>RuntimePermission("getClassLoader")</code> if the caller's
+    * class loader is not null or an ancestor of this thread's context class
+    * loader.
+    *
+    * @return the context class loader
+    * @throws SecurityException when permission is denied
+    * @see #setContextClassLoader(ClassLoader)
+    * @since 1.2
+    */
+   public synchronized ClassLoader getContextClassLoader()
+   {
+     // Bypass System.getSecurityManager, for bootstrap efficiency.
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       // XXX Don't check this if the caller's class loader is an ancestor.
+       sm.checkPermission(new RuntimePermission("getClassLoader"));
+     return contextClassLoader;
+   }
+ 
+   /**
+    * Sets the context classloader for this Thread. When not explicitly set,
+    * the context classloader for a thread is the same as the context
+    * classloader of the thread that created this thread. The first thread has
+    * as context classloader the system classloader. There may be a security
+    * check for <code>RuntimePermission("setContextClassLoader")</code>.
+    *
+    * @param classloader the new context class loader
+    * @throws SecurityException when permission is denied
+    * @see #getContextClassLoader()
+    * @since 1.2
+    */
+   public synchronized void setContextClassLoader(ClassLoader classloader)
+   {
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("setContextClassLoader"));
+     this.contextClassLoader = classloader;
+   }
+ 
+   /**
+    * Set this Thread's name.  There may be a security check,
+    * <code>checkAccess</code>.
+    *
+    * @param name the new name for this Thread
+    * @throws NullPointerException if name is null
+    * @throws SecurityException if you cannot modify this Thread
+    */
+   public final synchronized void setName(String name)
+   {
+     checkAccess();
+     // The Class Libraries book says ``threadName cannot be null''.  I
+     // take this to mean NullPointerException.
+     if (name == null)
+       throw new NullPointerException();
+     VMThread t = vmThread;
+     if (t != null)
+ 	t.setName(name);
+     else
+ 	this.name = name;
+   }
+ 
+   /**
+    * Yield to another thread. The Thread will not lose any locks it holds
+    * during this time. There are no guarantees which thread will be
+    * next to run, and it could even be this one, but most VMs will choose
+    * the highest priority thread that has been waiting longest.
+    */
+   public static void yield()
+   {
+     VMThread.yield();
+   }
+ 
+   /**
+    * Suspend the current Thread's execution for the specified amount of
+    * time. The Thread will not lose any locks it has during this time. There
+    * are no guarantees which thread will be next to run, but most VMs will
+    * choose the highest priority thread that has been waiting longest.
+    *
+    * @param ms the number of milliseconds to sleep.
+    * @throws InterruptedException if the Thread is (or was) interrupted;
+    *         it's <i>interrupted status</i> will be cleared
+    * @throws IllegalArgumentException if ms is negative
+    * @see #interrupt()
+    */
+   public static void sleep(long ms) throws InterruptedException
+   {
+     sleep(ms, 0);
+   }
+ 
+   /**
+    * Suspend the current Thread's execution for the specified amount of
+    * time. The Thread will not lose any locks it has during this time. There
+    * are no guarantees which thread will be next to run, but most VMs will
+    * choose the highest priority thread that has been waiting longest.
+    * <p>
+    * Note that 1,000,000 nanoseconds == 1 millisecond, but most VMs
+    * do not offer that fine a grain of timing resolution. When ms is
+    * zero and ns is non-zero the Thread will sleep for at least one
+    * milli second. There is no guarantee that this thread can start up
+    * immediately when time expires, because some other thread may be
+    * active.  So don't expect real-time performance.
+    *
+    * @param ms the number of milliseconds to sleep
+    * @param ns the number of extra nanoseconds to sleep (0-999999)
+    * @throws InterruptedException if the Thread is (or was) interrupted;
+    *         it's <i>interrupted status</i> will be cleared
+    * @throws IllegalArgumentException if ms or ns is negative
+    *         or ns is larger than 999999.
+    * @see #interrupt()
+    */
+   public static void sleep(long ms, int ns) throws InterruptedException
+   {
+ 
+     // Check parameters
+     if (ms < 0 )
+       throw new IllegalArgumentException("Negative milliseconds: " + ms);
+ 
+     if (ns < 0 || ns > 999999)
+       throw new IllegalArgumentException("Nanoseconds ouf of range: " + ns);
+ 
+     // Really sleep
+     VMThread.sleep(ms, ns);
+   }
+ 
+   /**
+    * Start this Thread, calling the run() method of the Runnable this Thread
+    * was created with, or else the run() method of the Thread itself. This
+    * is the only way to start a new thread; calling run by yourself will just
+    * stay in the same thread. The virtual machine will remove the thread from
+    * its thread group when the run() method completes.
+    *
+    * @throws IllegalThreadStateException if the thread has already started
+    * @see #run()
+    */
+   public synchronized void start()
+   {
+     if (vmThread != null || group == null)
+ 	throw new IllegalThreadStateException();
+ 
+     VMThread.create(this, stacksize);
+   }
+   
+   /**
+    * Cause this Thread to stop abnormally because of the throw of a ThreadDeath
+    * error. If you stop a Thread that has not yet started, it will stop
+    * immediately when it is actually started.
+    *
+    * <p>This is inherently unsafe, as it can interrupt synchronized blocks and
+    * leave data in bad states.  Hence, there is a security check:
+    * <code>checkAccess(this)</code>, plus another one if the current thread
+    * is not this: <code>RuntimePermission("stopThread")</code>. If you must
+    * catch a ThreadDeath, be sure to rethrow it after you have cleaned up.
+    * ThreadDeath is the only exception which does not print a stack trace when
+    * the thread dies.
+    *
+    * @throws SecurityException if you cannot stop the Thread
+    * @see #interrupt()
+    * @see #checkAccess()
+    * @see #start()
+    * @see ThreadDeath
+    * @see ThreadGroup#uncaughtException(Thread, Throwable)
+    * @see SecurityManager#checkAccess(Thread)
+    * @see SecurityManager#checkPermission(Permission)
+    * @deprecated unsafe operation, try not to use
+    */
+   public final void stop()
+   {
+     stop(new ThreadDeath());
+   }
+ 
+   /**
+    * Cause this Thread to stop abnormally and throw the specified exception.
+    * If you stop a Thread that has not yet started, the stop is ignored
+    * (contrary to what the JDK documentation says).
+    * <b>WARNING</b>This bypasses Java security, and can throw a checked
+    * exception which the call stack is unprepared to handle. Do not abuse
+    * this power.
+    *
+    * <p>This is inherently unsafe, as it can interrupt synchronized blocks and
+    * leave data in bad states.  Hence, there is a security check:
+    * <code>checkAccess(this)</code>, plus another one if the current thread
+    * is not this: <code>RuntimePermission("stopThread")</code>. If you must
+    * catch a ThreadDeath, be sure to rethrow it after you have cleaned up.
+    * ThreadDeath is the only exception which does not print a stack trace when
+    * the thread dies.
+    *
+    * @param t the Throwable to throw when the Thread dies
+    * @throws SecurityException if you cannot stop the Thread
+    * @throws NullPointerException in the calling thread, if t is null
+    * @see #interrupt()
+    * @see #checkAccess()
+    * @see #start()
+    * @see ThreadDeath
+    * @see ThreadGroup#uncaughtException(Thread, Throwable)
+    * @see SecurityManager#checkAccess(Thread)
+    * @see SecurityManager#checkPermission(Permission)
+    * @deprecated unsafe operation, try not to use
+    */
+   public final synchronized void stop(Throwable t)
+   {
+     if (t == null)
+       throw new NullPointerException();
+     // Bypass System.getSecurityManager, for bootstrap efficiency.
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       {
+         sm.checkAccess(this);
+         if (this != currentThread())
+           sm.checkPermission(new RuntimePermission("stopThread"));
+       }
+     VMThread vt = vmThread;
+     if (vt != null)
+ 	vt.stop(t);
+     else
+ 	stillborn = t;
+   }
+ 
+   /**
+    * Suspend this Thread.  It will not come back, ever, unless it is resumed.
+    *
+    * <p>This is inherently unsafe, as the suspended thread still holds locks,
+    * and can potentially deadlock your program.  Hence, there is a security
+    * check: <code>checkAccess</code>.
+    *
+    * @throws SecurityException if you cannot suspend the Thread
+    * @see #checkAccess()
+    * @see #resume()
+    * @deprecated unsafe operation, try not to use
+    */
+   public final synchronized void suspend()
+   {
+     checkAccess();
+     VMThread t = vmThread;
+     if (t != null)
+ 	t.suspend();
+   }
+ 
+   /**
+    * Set this Thread's priority. There may be a security check,
+    * <code>checkAccess</code>, then the priority is set to the smaller of
+    * priority and the ThreadGroup maximum priority.
+    *
+    * @param priority the new priority for this Thread
+    * @throws IllegalArgumentException if priority exceeds MIN_PRIORITY or
+    *         MAX_PRIORITY
+    * @throws SecurityException if you cannot modify this Thread
+    * @see #getPriority()
+    * @see #checkAccess()
+    * @see ThreadGroup#getMaxPriority()
+    * @see #MIN_PRIORITY
+    * @see #MAX_PRIORITY
+    */
+   public final synchronized void setPriority(int priority)
+   {
+     checkAccess();
+     if (priority < MIN_PRIORITY || priority > MAX_PRIORITY)
+       throw new IllegalArgumentException("Invalid thread priority value "
+                                          + priority + ".");
+     priority = Math.min(priority, group.getMaxPriority());
+     VMThread t = vmThread;
+     if (t != null)
+ 	t.setPriority(priority);
+     else
+ 	this.priority = priority;
+   }
+ 
+   /**
+    * Returns a string representation of this thread, including the
+    * thread's name, priority, and thread group.
+    *
+    * @return a human-readable String representing this Thread
+    */
+   public String toString()
+   {
+     return ("Thread[" + name + "," + priority + ","
+ 	    + (group == null ? "" : group.getName()) + "]");
+   }
+ 
+   /**
+    * Clean up code, called by VMThread when thread dies.
+    */
+   synchronized void die()
+   {
+     group.removeThread(this);
+     vmThread = null;
+     locals = null;
+   }
+ 
+   /**
+    * Returns the map used by ThreadLocal to store the thread local values.
+    */
+   static Map getThreadLocals()
+   {
+     Thread thread = currentThread();
+     Map locals = thread.locals;
+     if (locals == null)
+       {
+         locals = thread.locals = new WeakHashMap();
+       }
+     return locals;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ThreadDeath.java gcc-4.1.0/libjava/classpath/java/lang/ThreadDeath.java
*** gcc-4.0.2/libjava/classpath/java/lang/ThreadDeath.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ThreadDeath.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /* ThreadDeath.java - special exception registering Thread death
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * ThreadDeath is thrown in a thread when someone calls <code>stop()</code>
+  * on that thread. <b>Important:</b> Make sure you rethrow this exception
+  * if you catch it.  If you don't, the thread will not die.
+  *
+  * <p>This is an Error rather than an exception, so that normal code will
+  * not catch it. It is intended for asynchronous cleanup when using the
+  * deprecated Thread.stop() method.
+  *
+  * @author John Keiser
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see Thread#stop()
+  * @status updated to 1.4
+  */
+ public class ThreadDeath extends Error
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -4417128565033088268L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public ThreadDeath()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ThreadGroup.java gcc-4.1.0/libjava/classpath/java/lang/ThreadGroup.java
*** gcc-4.0.2/libjava/classpath/java/lang/ThreadGroup.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ThreadGroup.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,749 ----
+ /* ThreadGroup -- a group of Threads
+    Copyright (C) 1998, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import java.util.Vector;
+ 
+ /**
+  * ThreadGroup allows you to group Threads together.  There is a hierarchy
+  * of ThreadGroups, and only the initial ThreadGroup has no parent.  A Thread
+  * may access information about its own ThreadGroup, but not its parents or
+  * others outside the tree.
+  *
+  * @author John Keiser
+  * @author Tom Tromey
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Thread
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class ThreadGroup
+ {
+   /** The Initial, top-level ThreadGroup. */
+   static ThreadGroup root = new ThreadGroup();
+ 
+   /**
+    * This flag is set if an uncaught exception occurs. The runtime should
+    * check this and exit with an error status if it is set.
+    */
+   static boolean had_uncaught_exception;
+ 
+   /** The parent thread group. */
+   private final ThreadGroup parent;
+ 
+   /** The group name, non-null. */
+   final String name;
+ 
+   /** The threads in the group. */
+   private final Vector threads = new Vector();
+ 
+   /** Child thread groups, or null when this group is destroyed. */
+   private Vector groups = new Vector();
+ 
+   /** If all threads in the group are daemons. */
+   private boolean daemon_flag = false;
+ 
+   /** The maximum group priority. */
+   private int maxpri;
+ 
+   /**
+    * Hidden constructor to build the root node.
+    */
+   private ThreadGroup()
+   {
+     name = "main";
+     parent = null;
+     maxpri = Thread.MAX_PRIORITY;
+   }
+ 
+   /**
+    * Create a new ThreadGroup using the given name and the current thread's
+    * ThreadGroup as a parent. There may be a security check,
+    * <code>checkAccess</code>.
+    *
+    * @param name the name to use for the ThreadGroup
+    * @throws SecurityException if the current thread cannot create a group
+    * @see #checkAccess()
+    */
+   public ThreadGroup(String name)
+   {
+     this(Thread.currentThread().group, name);
+   }
+ 
+   /**
+    * Create a new ThreadGroup using the given name and parent group. The new
+    * group inherits the maximum priority and daemon status of its parent
+    * group. There may be a security check, <code>checkAccess</code>.
+    *
+    * @param name the name to use for the ThreadGroup
+    * @param parent the ThreadGroup to use as a parent
+    * @throws NullPointerException if parent is null
+    * @throws SecurityException if the current thread cannot create a group
+    * @throws IllegalThreadStateException if the parent is destroyed
+    * @see #checkAccess()
+    */
+   public ThreadGroup(ThreadGroup parent, String name)
+   {
+     parent.checkAccess();
+     this.parent = parent;
+     this.name = name;
+     maxpri = parent.maxpri;
+     daemon_flag = parent.daemon_flag;
+     synchronized (parent)
+       {
+         if (parent.groups == null)
+           throw new IllegalThreadStateException();
+         parent.groups.add(this);
+       }
+   }
+ 
+   /**
+    * Get the name of this ThreadGroup.
+    *
+    * @return the name of this ThreadGroup
+    */
+   public final String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Get the parent of this ThreadGroup. If the parent is not null, there
+    * may be a security check, <code>checkAccess</code>.
+    *
+    * @return the parent of this ThreadGroup
+    * @throws SecurityException if permission is denied
+    */
+   public final ThreadGroup getParent()
+   {
+     if (parent != null)
+       parent.checkAccess();
+     return parent;
+   }
+ 
+   /**
+    * Get the maximum priority of Threads in this ThreadGroup. Threads created
+    * after this call in this group may not exceed this priority.
+    *
+    * @return the maximum priority of Threads in this ThreadGroup
+    */
+   public final int getMaxPriority()
+   {
+     return maxpri;
+   }
+ 
+   /**
+    * Tell whether this ThreadGroup is a daemon group.  A daemon group will
+    * be automatically destroyed when its last thread is stopped and
+    * its last thread group is destroyed.
+    *
+    * @return whether this ThreadGroup is a daemon group
+    */
+   public final boolean isDaemon()
+   {
+     return daemon_flag;
+   }
+ 
+   /**
+    * Tell whether this ThreadGroup has been destroyed or not.
+    *
+    * @return whether this ThreadGroup has been destroyed or not
+    * @since 1.1
+    */
+   public synchronized boolean isDestroyed()
+   {
+     return groups == null;
+   }
+ 
+   /**
+    * Set whether this ThreadGroup is a daemon group.  A daemon group will be
+    * destroyed when its last thread is stopped and its last thread group is
+    * destroyed. There may be a security check, <code>checkAccess</code>.
+    *
+    * @param daemon whether this ThreadGroup should be a daemon group
+    * @throws SecurityException if you cannot modify this ThreadGroup
+    * @see #checkAccess()
+    */
+   public final void setDaemon(boolean daemon)
+   {
+     checkAccess();
+     daemon_flag = daemon;
+   }
+ 
+   /**
+    * Set the maximum priority for Threads in this ThreadGroup. setMaxPriority
+    * can only be used to reduce the current maximum. If maxpri is greater
+    * than the current Maximum of the parent group, the current value is not
+    * changed. Otherwise, all groups which belong to this have their priority
+    * adjusted as well. Calling this does not affect threads already in this
+    * ThreadGroup. There may be a security check, <code>checkAccess</code>.
+    *
+    * @param maxpri the new maximum priority for this ThreadGroup
+    * @throws SecurityException if you cannot modify this ThreadGroup
+    * @see #getMaxPriority()
+    * @see #checkAccess()
+    */
+   public final synchronized void setMaxPriority(int maxpri)
+   {
+     checkAccess();
+     if (maxpri < Thread.MIN_PRIORITY || maxpri > Thread.MAX_PRIORITY)
+       return;
+     if (parent != null && maxpri > parent.maxpri)
+       maxpri = parent.maxpri;
+     this.maxpri = maxpri;
+     if (groups == null)
+       return;
+     int i = groups.size();
+     while (--i >= 0)
+       ((ThreadGroup) groups.get(i)).setMaxPriority(maxpri);
+   }
+ 
+   /**
+    * Check whether this ThreadGroup is an ancestor of the specified
+    * ThreadGroup, or if they are the same.
+    *
+    * @param group the group to test on
+    * @return whether this ThreadGroup is a parent of the specified group
+    */
+   public final boolean parentOf(ThreadGroup group)
+   {
+     while (group != null)
+       {
+         if (group == this)
+           return true;
+         group = group.parent;
+       }
+     return false;
+   }
+ 
+   /**
+    * Find out if the current Thread can modify this ThreadGroup. This passes
+    * the check on to <code>SecurityManager.checkAccess(this)</code>.
+    *
+    * @throws SecurityException if the current Thread cannot modify this
+    *         ThreadGroup
+    * @see SecurityManager#checkAccess(ThreadGroup)
+    */
+   public final void checkAccess()
+   {
+     // Bypass System.getSecurityManager, for bootstrap efficiency.
+     SecurityManager sm = SecurityManager.current;
+     if (sm != null)
+       sm.checkAccess(this);
+   }
+ 
+   /**
+    * Return an estimate of the total number of active threads in this
+    * ThreadGroup and all its descendants. This cannot return an exact number,
+    * since the status of threads may change after they were counted; but it
+    * should be pretty close. Based on a JDC bug,
+    * <a href="http://developer.java.sun.com/developer/bugParade/bugs/4089701.html">
+    * 4089701</a>, we take active to mean isAlive().
+    *
+    * @return count of active threads in this ThreadGroup and its descendants
+    */
+   public int activeCount()
+   {
+     int total = 0;
+     if (groups == null)
+       return total;
+     int i = threads.size();
+     while (--i >= 0)
+       if (((Thread) threads.get(i)).isAlive())
+         total++;
+     i = groups.size();
+     while (--i >= 0)
+       total += ((ThreadGroup) groups.get(i)).activeCount();
+     return total;
+   }
+ 
+   /**
+    * Copy all of the active Threads from this ThreadGroup and its descendants
+    * into the specified array.  If the array is not big enough to hold all
+    * the Threads, extra Threads will simply not be copied. There may be a
+    * security check, <code>checkAccess</code>.
+    *
+    * @param array the array to put the threads into
+    * @return the number of threads put into the array
+    * @throws SecurityException if permission was denied
+    * @throws NullPointerException if array is null
+    * @throws ArrayStoreException if a thread does not fit in the array
+    * @see #activeCount()
+    * @see #checkAccess()
+    * @see #enumerate(Thread[], boolean)
+    */
+   public int enumerate(Thread[] array)
+   {
+     return enumerate(array, 0, true);
+   }
+ 
+   /**
+    * Copy all of the active Threads from this ThreadGroup and, if desired,
+    * from its descendants, into the specified array. If the array is not big
+    * enough to hold all the Threads, extra Threads will simply not be copied.
+    * There may be a security check, <code>checkAccess</code>.
+    *
+    * @param array the array to put the threads into
+    * @param recurse whether to recurse into descendent ThreadGroups
+    * @return the number of threads put into the array
+    * @throws SecurityException if permission was denied
+    * @throws NullPointerException if array is null
+    * @throws ArrayStoreException if a thread does not fit in the array
+    * @see #activeCount()
+    * @see #checkAccess()
+    */
+   public int enumerate(Thread[] array, boolean recurse)
+   {
+     return enumerate(array, 0, recurse);
+   }
+ 
+   /**
+    * Get the number of active groups in this ThreadGroup.  This group itself
+    * is not included in the count. A sub-group is active if it has not been
+    * destroyed. This cannot return an exact number, since the status of
+    * threads may change after they were counted; but it should be pretty close.
+    *
+    * @return the number of active groups in this ThreadGroup
+    */
+   public int activeGroupCount()
+   {
+     if (groups == null)
+       return 0;
+     int total = groups.size();
+     int i = total;
+     while (--i >= 0)
+       total += ((ThreadGroup) groups.get(i)).activeGroupCount();
+     return total;
+   }
+ 
+   /**
+    * Copy all active ThreadGroups that are descendants of this ThreadGroup
+    * into the specified array.  If the array is not large enough to hold all
+    * active ThreadGroups, extra ThreadGroups simply will not be copied. There
+    * may be a security check, <code>checkAccess</code>.
+    *
+    * @param array the array to put the ThreadGroups into
+    * @return the number of ThreadGroups copied into the array
+    * @throws SecurityException if permission was denied
+    * @throws NullPointerException if array is null
+    * @throws ArrayStoreException if a group does not fit in the array
+    * @see #activeCount()
+    * @see #checkAccess()
+    * @see #enumerate(ThreadGroup[], boolean)
+    */
+   public int enumerate(ThreadGroup[] array)
+   {
+     return enumerate(array, 0, true);
+   }
+ 
+   /**
+    * Copy all active ThreadGroups that are children of this ThreadGroup into
+    * the specified array, and if desired, also all descendents.  If the array
+    * is not large enough to hold all active ThreadGroups, extra ThreadGroups
+    * simply will not be copied. There may be a security check,
+    * <code>checkAccess</code>.
+    *
+    * @param array the array to put the ThreadGroups into
+    * @param recurse whether to recurse into descendent ThreadGroups
+    * @return the number of ThreadGroups copied into the array
+    * @throws SecurityException if permission was denied
+    * @throws NullPointerException if array is null
+    * @throws ArrayStoreException if a group does not fit in the array
+    * @see #activeCount()
+    * @see #checkAccess()
+    */
+   public int enumerate(ThreadGroup[] array, boolean recurse)
+   {
+     return enumerate(array, 0, recurse);
+   }
+ 
+   /**
+    * Stop all Threads in this ThreadGroup and its descendants.
+    *
+    * <p>This is inherently unsafe, as it can interrupt synchronized blocks and
+    * leave data in bad states.  Hence, there is a security check:
+    * <code>checkAccess()</code>, followed by further checks on each thread
+    * being stopped.
+    *
+    * @throws SecurityException if permission is denied
+    * @see #checkAccess()
+    * @see Thread#stop(Throwable)
+    * @deprecated unsafe operation, try not to use
+    */
+   public final synchronized void stop()
+   {
+     checkAccess();
+     if (groups == null)
+       return;
+     int i = threads.size();
+     while (--i >= 0)
+       ((Thread) threads.get(i)).stop();
+     i = groups.size();
+     while (--i >= 0)
+       ((ThreadGroup) groups.get(i)).stop();
+   }
+ 
+   /**
+    * Interrupt all Threads in this ThreadGroup and its sub-groups. There may
+    * be a security check, <code>checkAccess</code>.
+    *
+    * @throws SecurityException if permission is denied
+    * @see #checkAccess()
+    * @see Thread#interrupt()
+    * @since 1.2
+    */
+   public final synchronized void interrupt()
+   {
+     checkAccess();
+     if (groups == null)
+       return;
+     int i = threads.size();
+     while (--i >= 0)
+       ((Thread) threads.get(i)).interrupt();
+     i = groups.size();
+     while (--i >= 0)
+       ((ThreadGroup) groups.get(i)).interrupt();
+   }
+ 
+   /**
+    * Suspend all Threads in this ThreadGroup and its descendants.
+    *
+    * <p>This is inherently unsafe, as suspended threads still hold locks,
+    * which can lead to deadlock.  Hence, there is a security check:
+    * <code>checkAccess()</code>, followed by further checks on each thread
+    * being suspended.
+    *
+    * @throws SecurityException if permission is denied
+    * @see #checkAccess()
+    * @see Thread#suspend()
+    * @deprecated unsafe operation, try not to use
+    */
+   public final synchronized void suspend()
+   {
+     checkAccess();
+     if (groups == null)
+       return;
+     int i = threads.size();
+     while (--i >= 0)
+       ((Thread) threads.get(i)).suspend();
+     i = groups.size();
+     while (--i >= 0)
+       ((ThreadGroup) groups.get(i)).suspend();
+   }
+ 
+   /**
+    * Resume all suspended Threads in this ThreadGroup and its descendants.
+    * To mirror suspend(), there is a security check:
+    * <code>checkAccess()</code>, followed by further checks on each thread
+    * being resumed.
+    *
+    * @throws SecurityException if permission is denied
+    * @see #checkAccess()
+    * @see Thread#suspend()
+    * @deprecated pointless, since suspend is deprecated
+    */
+   public final synchronized void resume()
+   {
+     checkAccess();
+     if (groups == null)
+       return;
+     int i = threads.size();
+     while (--i >= 0)
+       ((Thread) threads.get(i)).resume();
+     i = groups.size();
+     while (--i >= 0)
+       ((ThreadGroup) groups.get(i)).resume();
+   }
+ 
+   /**
+    * Destroy this ThreadGroup.  The group must be empty, meaning that all
+    * threads and sub-groups have completed execution. Daemon groups are
+    * destroyed automatically. There may be a security check,
+    * <code>checkAccess</code>.
+    *
+    * @throws IllegalThreadStateException if the ThreadGroup is not empty, or
+    *         was previously destroyed
+    * @throws SecurityException if permission is denied
+    * @see #checkAccess()
+    */
+   public final synchronized void destroy()
+   {
+     checkAccess();
+     if (! threads.isEmpty() || groups == null)
+       throw new IllegalThreadStateException();
+     int i = groups.size();
+     while (--i >= 0)
+       ((ThreadGroup) groups.get(i)).destroy();
+     groups = null;
+     if (parent != null)
+       parent.removeGroup(this);
+   }
+ 
+   /**
+    * Print out information about this ThreadGroup to System.out. This is
+    * meant for debugging purposes. <b>WARNING:</b> This method is not secure,
+    * and can print the name of threads to standard out even when you cannot
+    * otherwise get at such threads.
+    */
+   public void list()
+   {
+     list("");
+   }
+ 
+   /**
+    * When a Thread in this ThreadGroup does not catch an exception, the
+    * virtual machine calls this method. The default implementation simply
+    * passes the call to the parent; then in top ThreadGroup, it will
+    * ignore ThreadDeath and print the stack trace of any other throwable.
+    * Override this method if you want to handle the exception in a different
+    * manner.
+    *
+    * @param thread the thread that exited
+    * @param t the uncaught throwable
+    * @throws NullPointerException if t is null
+    * @see ThreadDeath
+    * @see System#err
+    * @see Throwable#printStackTrace()
+    */
+   public void uncaughtException(Thread thread, Throwable t)
+   {
+     if (parent != null)
+       parent.uncaughtException(thread, t);
+     else if (! (t instanceof ThreadDeath))
+       {
+         if (t == null)
+           throw new NullPointerException();
+         had_uncaught_exception = true;
+         try
+           {
+             if (thread != null)
+               System.err.print("Exception in thread \"" + thread.name + "\" ");
+             t.printStackTrace(System.err);
+           }
+         catch (Throwable x)
+           {
+             // This means that something is badly screwed up with the runtime,
+             // or perhaps someone overloaded the Throwable.printStackTrace to
+             // die. In any case, try to deal with it gracefully.
+             try
+               {
+                 System.err.println(t);
+                 System.err.println("*** Got " + x
+                                    + " while trying to print stack trace.");
+               }
+             catch (Throwable x2)
+               {
+                 // Here, someone may have overloaded t.toString() or
+                 // x.toString() to die. Give up all hope; we can't even chain
+                 // the exception, because the chain would likewise die.
+                 System.err.println("*** Catastrophic failure while handling "
+                                    + "uncaught exception.");
+                 throw new InternalError();
+               }
+           }
+       }
+   }
+ 
+   /**
+    * Originally intended to tell the VM whether it may suspend Threads in
+    * low memory situations, this method was never implemented by Sun, and
+    * is hence a no-op.
+    *
+    * @param allow whether to allow low-memory thread suspension; ignored
+    * @return false
+    * @since 1.1
+    * @deprecated pointless, since suspend is deprecated
+    */
+   public boolean allowThreadSuspension(boolean allow)
+   {
+     return false;
+   }
+ 
+   /**
+    * Return a human-readable String representing this ThreadGroup. The format
+    * of the string is:<br>
+    * <code>getClass().getName() + "[name=" + getName() + ",maxpri="
+    * + getMaxPriority() + ']'</code>.
+    *
+    * @return a human-readable String representing this ThreadGroup
+    */
+   public String toString()
+   {
+     return getClass().getName() + "[name=" + name + ",maxpri=" + maxpri + ']';
+   }
+ 
+   /**
+    * Implements enumerate.
+    *
+    * @param list the array to put the threads into
+    * @param next the next open slot in the array
+    * @param recurse whether to recurse into descendent ThreadGroups
+    * @return the number of threads put into the array
+    * @throws SecurityException if permission was denied
+    * @throws NullPointerException if list is null
+    * @throws ArrayStoreException if a thread does not fit in the array
+    * @see #enumerate(Thread[])
+    * @see #enumerate(Thread[], boolean)
+    */
+   private int enumerate(Thread[] list, int next, boolean recurse)
+   {
+     checkAccess();
+     if (groups == null)
+       return next;
+     int i = threads.size();
+     while (--i >= 0 && next < list.length)
+       {
+         Thread t = (Thread) threads.get(i);
+         if (t.isAlive())
+           list[next++] = t;
+       }
+     if (recurse)
+       {
+         i = groups.size();
+         while (--i >= 0 && next < list.length)
+           {
+             ThreadGroup g = (ThreadGroup) groups.get(i);
+             next = g.enumerate(list, next, true);
+           }
+       }
+     return next;
+   }
+ 
+   /**
+    * Implements enumerate.
+    *
+    * @param list the array to put the groups into
+    * @param next the next open slot in the array
+    * @param recurse whether to recurse into descendent ThreadGroups
+    * @return the number of groups put into the array
+    * @throws SecurityException if permission was denied
+    * @throws NullPointerException if list is null
+    * @throws ArrayStoreException if a group does not fit in the array
+    * @see #enumerate(ThreadGroup[])
+    * @see #enumerate(ThreadGroup[], boolean)
+    */
+   private int enumerate(ThreadGroup[] list, int next, boolean recurse)
+   {
+     checkAccess();
+     if (groups == null)
+       return next;
+     int i = groups.size();
+     while (--i >= 0 && next < list.length)
+       {
+         ThreadGroup g = (ThreadGroup) groups.get(i);
+         list[next++] = g;
+         if (recurse && next != list.length)
+           next = g.enumerate(list, next, true);
+       }
+     return next;
+   }
+ 
+   /**
+    * Implements list.
+    *
+    * @param indentation the current level of indentation
+    * @see #list()
+    */
+   private void list(String indentation)
+   {
+     if (groups == null)
+       return;
+     System.out.println(indentation + this);
+     indentation += "    ";
+     int i = threads.size();
+     while (--i >= 0)
+       System.out.println(indentation + threads.get(i));
+     i = groups.size();
+     while (--i >= 0)
+       ((ThreadGroup) groups.get(i)).list(indentation);
+   }
+ 
+   /**
+    * Add a thread to the group. Called by Thread constructors.
+    *
+    * @param t the thread to add, non-null
+    * @throws IllegalThreadStateException if the group is destroyed
+    */
+   final synchronized void addThread(Thread t)
+   {
+     if (groups == null)
+       throw new IllegalThreadStateException("ThreadGroup is destroyed");
+     threads.add(t);
+   }
+ 
+   /**
+    * Called by the VM to remove a thread that has died.
+    *
+    * @param t the thread to remove, non-null
+    * @XXX A ThreadListener to call this might be nice.
+    */
+   final synchronized void removeThread(Thread t)
+   {
+     if (groups == null)
+       return;
+     threads.remove(t);
+     t.group = null;
+     // Daemon groups are automatically destroyed when all their threads die.
+     if (daemon_flag && groups.size() == 0 && threads.size() == 0)
+       {
+         // We inline destroy to avoid the access check.
+         groups = null;
+         if (parent != null)
+           parent.removeGroup(this);
+       }
+   }
+ 
+   /**
+    * Called when a group is destroyed, to remove it from its parent.
+    *
+    * @param g the destroyed group, non-null
+    */
+   final synchronized void removeGroup(ThreadGroup g)
+   {
+     groups.remove(g);
+     // Daemon groups are automatically destroyed when all their threads die.
+     if (daemon_flag && groups.size() == 0 && threads.size() == 0)
+       {
+         // We inline destroy to avoid the access check.
+         groups = null;
+         if (parent != null)
+           parent.removeGroup(this);
+       }
+   }
+ } // class ThreadGroup
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ThreadLocal.java gcc-4.1.0/libjava/classpath/java/lang/ThreadLocal.java
*** gcc-4.0.2/libjava/classpath/java/lang/ThreadLocal.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ThreadLocal.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,170 ----
+ /* ThreadLocal -- a variable with a unique value per thread
+    Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import java.util.Map;
+ 
+ 
+ /**
+  * ThreadLocal objects have a different state associated with every
+  * Thread that accesses them. Every access to the ThreadLocal object
+  * (through the <code>get()</code> and <code>set()</code> methods)
+  * only affects the state of the object as seen by the currently
+  * executing Thread.
+  *
+  * <p>The first time a ThreadLocal object is accessed on a particular
+  * Thread, the state for that Thread's copy of the local variable is set by
+  * executing the method <code>initialValue()</code>.
+  * </p>
+  *
+  * <p>An example how you can use this:
+  * </p>
+  *
+  * <pre>
+  * class Connection
+  * {
+  *   private static ThreadLocal owner = new ThreadLocal()
+  *     {
+  *       public Object initialValue()
+  *       {
+  *         return("nobody");
+  *       }
+  *     };
+  * ...
+  * }
+  * </pre>
+  *
+  * <p>Now all instances of connection can see who the owner of the currently
+  * executing Thread is by calling <code>owner.get()</code>. By default any
+  * Thread would be associated with 'nobody'. But the Connection object could
+  * offer a method that changes the owner associated with the Thread on
+  * which the method was called by calling <code>owner.put("somebody")</code>.
+  * (Such an owner changing method should then be guarded by security checks.)
+  * </p>
+  *
+  * <p>When a Thread is garbage collected all references to values of
+  * the ThreadLocal objects associated with that Thread are removed.
+  * </p>
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class ThreadLocal
+ {
+   /**
+    * Placeholder to distinguish between uninitialized and null set by the
+    * user. Do not expose this to the public. Package visible for use by
+    * InheritableThreadLocal
+    */
+   static final Object NULL = new Object();
+ 
+   /**
+    * Serves as a key for the Thread.locals WeakHashMap.
+    * We can't use "this", because a subclass may override equals/hashCode
+    * and we need to use object identity for the map.
+    */
+   final Key key = new Key();
+ 
+   class Key
+   {
+     ThreadLocal get()
+     {
+       return ThreadLocal.this;
+     }
+   }
+ 
+   /**
+    * Creates a ThreadLocal object without associating any value to it yet.
+    */
+   public ThreadLocal()
+   {
+   }
+ 
+   /**
+    * Called once per thread on the first invocation of get(), if set() was
+    * not already called. The default implementation returns <code>null</code>.
+    * Often, this method is overridden to create the appropriate initial object
+    * for the current thread's view of the ThreadLocal.
+    *
+    * @return the initial value of the variable in this thread
+    */
+   protected Object initialValue()
+   {
+     return null;
+   }
+ 
+   /**
+    * Gets the value associated with the ThreadLocal object for the currently
+    * executing Thread. If this is the first time the current thread has called
+    * get(), and it has not already called set(), the value is obtained by
+    * <code>initialValue()</code>.
+    *
+    * @return the value of the variable in this thread
+    */
+   public Object get()
+   {
+     Map map = Thread.getThreadLocals();
+     // Note that we don't have to synchronize, as only this thread will
+     // ever modify the map.
+     Object value = map.get(key);
+     if (value == null)
+       {
+         value = initialValue();
+         map.put(key, value == null ? NULL : value);
+       }
+     return value == NULL ? null : value;
+   }
+ 
+   /**
+    * Sets the value associated with the ThreadLocal object for the currently
+    * executing Thread. This overrides any existing value associated with the
+    * current Thread and prevents <code>initialValue()</code> from being
+    * called if this is the first access to this ThreadLocal in this Thread.
+    *
+    * @param value the value to set this thread's view of the variable to
+    */
+   public void set(Object value)
+   {
+     Map map = Thread.getThreadLocals();
+     // Note that we don't have to synchronize, as only this thread will
+     // ever modify the map.
+     map.put(key, value == null ? NULL : value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Throwable.java gcc-4.1.0/libjava/classpath/java/lang/Throwable.java
*** gcc-4.0.2/libjava/classpath/java/lang/Throwable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Throwable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,563 ----
+ /* java.lang.Throwable -- Root class for all Exceptions and Errors
+    Copyright (C) 1998, 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ import gnu.classpath.SystemProperties;
+ 
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.io.Serializable;
+ 
+ /**
+  * Throwable is the superclass of all exceptions that can be raised.
+  *
+  * <p>There are two special cases: {@link Error} and {@link RuntimeException}:
+  * these two classes (and their subclasses) are considered unchecked
+  * exceptions, and are either frequent enough or catastrophic enough that you
+  * do not need to declare them in <code>throws</code> clauses.  Everything
+  * else is a checked exception, and is ususally a subclass of
+  * {@link Exception}; these exceptions have to be handled or declared.
+  *
+  * <p>Instances of this class are usually created with knowledge of the
+  * execution context, so that you can get a stack trace of the problem spot
+  * in the code.  Also, since JDK 1.4, Throwables participate in "exception
+  * chaining."  This means that one exception can be caused by another, and
+  * preserve the information of the original.
+  *
+  * <p>One reason this is useful is to wrap exceptions to conform to an
+  * interface.  For example, it would be bad design to require all levels
+  * of a program interface to be aware of the low-level exceptions thrown
+  * at one level of abstraction. Another example is wrapping a checked
+  * exception in an unchecked one, to communicate that failure occured
+  * while still obeying the method throws clause of a superclass.
+  *
+  * <p>A cause is assigned in one of two ways; but can only be assigned once
+  * in the lifetime of the Throwable.  There are new constructors added to
+  * several classes in the exception hierarchy that directly initialize the
+  * cause, or you can use the <code>initCause</code> method. This second
+  * method is especially useful if the superclass has not been retrofitted
+  * with new constructors:<br>
+  * <pre>
+  * try
+  *   {
+  *     lowLevelOp();
+  *   }
+  * catch (LowLevelException lle)
+  *   {
+  *     throw (HighLevelException) new HighLevelException().initCause(lle);
+  *   }
+  * </pre>
+  * Notice the cast in the above example; without it, your method would need
+  * a throws clase that declared Throwable, defeating the purpose of chainig
+  * your exceptions.
+  *
+  * <p>By convention, exception classes have two constructors: one with no
+  * arguments, and one that takes a String for a detail message.  Further,
+  * classes which are likely to be used in an exception chain also provide
+  * a constructor that takes a Throwable, with or without a detail message
+  * string.
+  *
+  * <p>Another 1.4 feature is the StackTrace, a means of reflection that
+  * allows the program to inspect the context of the exception, and which is
+  * serialized, so that remote procedure calls can correctly pass exceptions.
+  *
+  * @author Brian Jones
+  * @author John Keiser
+  * @author Mark Wielaard
+  * @author Tom Tromey
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Throwable implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -3042686055658047285L;
+ 
+   /**
+    * The detail message.
+    *
+    * @serial specific details about the exception, may be null
+    */
+   private final String detailMessage;
+ 
+   /**
+    * The cause of the throwable, including null for an unknown or non-chained
+    * cause. This may only be set once; so the field is set to
+    * <code>this</code> until initialized.
+    *
+    * @serial the cause, or null if unknown, or this if not yet set
+    * @since 1.4
+    */
+   private Throwable cause = this;
+ 
+   /**
+    * The stack trace, in a serialized form.
+    *
+    * @serial the elements of the stack trace; this is non-null, and has
+    *         no null entries
+    * @since 1.4
+    */
+   private StackTraceElement[] stackTrace;
+ 
+   /**
+    * Instantiate this Throwable with an empty message. The cause remains
+    * uninitialized.  {@link #fillInStackTrace()} will be called to set
+    * up the stack trace.
+    */
+   public Throwable()
+   {
+     this((String) null);
+   }
+ 
+   /**
+    * Instantiate this Throwable with the given message. The cause remains
+    * uninitialized.  {@link #fillInStackTrace()} will be called to set
+    * up the stack trace.
+    *
+    * @param message the message to associate with the Throwable
+    */
+   public Throwable(String message)
+   {
+     fillInStackTrace();
+     detailMessage = message;
+   }
+ 
+   /**
+    * Instantiate this Throwable with the given message and cause. Note that
+    * the message is unrelated to the message of the cause.
+    * {@link #fillInStackTrace()} will be called to set up the stack trace.
+    *
+    * @param message the message to associate with the Throwable
+    * @param cause the cause, may be null
+    * @since 1.4
+    */
+   public Throwable(String message, Throwable cause)
+   {
+     this(message);
+     this.cause = cause;
+   }
+ 
+   /**
+    * Instantiate this Throwable with the given cause. The message is then
+    * built as <code>cause == null ? null : cause.toString()</code>.
+    * {@link #fillInStackTrace()} will be called to set up the stack trace.
+    *
+    * @param cause the cause, may be null
+    * @since 1.4
+    */
+   public Throwable(Throwable cause)
+   {
+     this(cause == null ? null : cause.toString(), cause);
+   }
+ 
+   /**
+    * Get the message associated with this Throwable.
+    *
+    * @return the error message associated with this Throwable, may be null
+    */
+   public String getMessage()
+   {
+     return detailMessage;
+   }
+ 
+   /**
+    * Get a localized version of this Throwable's error message.
+    * This method must be overridden in a subclass of Throwable
+    * to actually produce locale-specific methods.  The Throwable
+    * implementation just returns getMessage().
+    *
+    * @return a localized version of this error message
+    * @see #getMessage()
+    * @since 1.1
+    */
+   public String getLocalizedMessage()
+   {
+     return getMessage();
+   }
+ 
+   /**
+    * Returns the cause of this exception, or null if the cause is not known
+    * or non-existant. This cause is initialized by the new constructors,
+    * or by calling initCause.
+    *
+    * @return the cause of this Throwable
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return cause == this ? null : cause;
+   }
+ 
+   /**
+    * Initialize the cause of this Throwable.  This may only be called once
+    * during the object lifetime, including implicitly by chaining
+    * constructors.
+    *
+    * @param cause the cause of this Throwable, may be null
+    * @return this
+    * @throws IllegalArgumentException if cause is this (a Throwable can't be
+    *         its own cause!)
+    * @throws IllegalStateException if the cause has already been set
+    * @since 1.4
+    */
+   public Throwable initCause(Throwable cause)
+   {
+     if (cause == this)
+       throw new IllegalArgumentException();
+     if (this.cause != this)
+       throw new IllegalStateException();
+     this.cause = cause;
+     return this;
+   }
+ 
+   /**
+    * Get a human-readable representation of this Throwable. The detail message
+    * is retrieved by getLocalizedMessage().  Then, with a null detail
+    * message, this string is simply the object's class name; otherwise
+    * the string is <code>getClass().getName() + ": " + message</code>.
+    *
+    * @return a human-readable String represting this Throwable
+    */
+   public String toString()
+   {
+     String msg = getLocalizedMessage();
+     return getClass().getName() + (msg == null ? "" : ": " + msg);
+   }
+ 
+   /**
+    * Print a stack trace to the standard error stream. This stream is the
+    * current contents of <code>System.err</code>. The first line of output
+    * is the result of {@link #toString()}, and the remaining lines represent
+    * the data created by {@link #fillInStackTrace()}. While the format is
+    * unspecified, this implementation uses the suggested format, demonstrated
+    * by this example:<br>
+    * <pre>
+    * public class Junk
+    * {
+    *   public static void main(String args[])
+    *   {
+    *     try
+    *       {
+    *         a();
+    *       }
+    *     catch(HighLevelException e)
+    *       {
+    *         e.printStackTrace();
+    *       }
+    *   }
+    *   static void a() throws HighLevelException
+    *   {
+    *     try
+    *       {
+    *         b();
+    *       }
+    *     catch(MidLevelException e)
+    *       {
+    *         throw new HighLevelException(e);
+    *       }
+    *   }
+    *   static void b() throws MidLevelException
+    *   {
+    *     c();
+    *   }
+    *   static void c() throws MidLevelException
+    *   {
+    *     try
+    *       {
+    *         d();
+    *       }
+    *     catch(LowLevelException e)
+    *       {
+    *         throw new MidLevelException(e);
+    *       }
+    *   }
+    *   static void d() throws LowLevelException
+    *   {
+    *     e();
+    *   }
+    *   static void e() throws LowLevelException
+    *   {
+    *     throw new LowLevelException();
+    *   }
+    * }
+    * class HighLevelException extends Exception
+    * {
+    *   HighLevelException(Throwable cause) { super(cause); }
+    * }
+    * class MidLevelException extends Exception
+    * {
+    *   MidLevelException(Throwable cause)  { super(cause); }
+    * }
+    * class LowLevelException extends Exception
+    * {
+    * }
+    * </pre>
+    * <p>
+    * <pre>
+    *  HighLevelException: MidLevelException: LowLevelException
+    *          at Junk.a(Junk.java:13)
+    *          at Junk.main(Junk.java:4)
+    *  Caused by: MidLevelException: LowLevelException
+    *          at Junk.c(Junk.java:23)
+    *          at Junk.b(Junk.java:17)
+    *          at Junk.a(Junk.java:11)
+    *          ... 1 more
+    *  Caused by: LowLevelException
+    *          at Junk.e(Junk.java:30)
+    *          at Junk.d(Junk.java:27)
+    *          at Junk.c(Junk.java:21)
+    *          ... 3 more
+    * </pre>
+    */
+   public void printStackTrace()
+   {
+     printStackTrace(System.err);
+   }
+ 
+   /**
+    * Print a stack trace to the specified PrintStream. See
+    * {@link #printStackTrace()} for the sample format.
+    *
+    * @param s the PrintStream to write the trace to
+    */
+   public void printStackTrace(PrintStream s)
+   {
+     s.print(stackTraceString());
+   }
+ 
+   /**
+    * Prints the exception, the detailed message and the stack trace
+    * associated with this Throwable to the given <code>PrintWriter</code>.
+    * The actual output written is implemention specific. Use the result of
+    * <code>getStackTrace()</code> when more precise information is needed.
+    *
+    * <p>This implementation first prints a line with the result of this
+    * object's <code>toString()</code> method.
+    * <br>
+    * Then for all elements given by <code>getStackTrace</code> it prints
+    * a line containing three spaces, the string "at " and the result of calling
+    * the <code>toString()</code> method on the <code>StackTraceElement</code>
+    * object. If <code>getStackTrace()</code> returns an empty array it prints
+    * a line containing three spaces and the string
+    * "&lt;&lt;No stacktrace available&gt;&gt;".
+    * <br>
+    * Then if <code>getCause()</code> doesn't return null it adds a line
+    * starting with "Caused by: " and the result of calling
+    * <code>toString()</code> on the cause.
+    * <br>
+    * Then for every cause (of a cause, etc) the stacktrace is printed the
+    * same as for the top level <code>Throwable</code> except that as soon
+    * as all the remaining stack frames of the cause are the same as the
+    * the last stack frames of the throwable that the cause is wrapped in
+    * then a line starting with three spaces and the string "... X more" is
+    * printed, where X is the number of remaining stackframes.
+    *
+    * @param pw the PrintWriter to write the trace to
+    * @since 1.1
+    */
+   public void printStackTrace (PrintWriter pw)
+   {
+     pw.print(stackTraceString());
+   }
+ 
+   /*
+    * We use inner class to avoid a static initializer in this basic class.
+    */
+   private static class StaticData
+   {
+     static final String nl = SystemProperties.getProperty("line.separator");
+   }
+ 
+   // Create whole stack trace in a stringbuffer so we don't have to print
+   // it line by line. This prevents printing multiple stack traces from
+   // different threads to get mixed up when written to the same PrintWriter.
+   private String stackTraceString()
+   {
+     StringBuffer sb = new StringBuffer();
+ 
+     // Main stacktrace
+     StackTraceElement[] stack = getStackTrace();
+     stackTraceStringBuffer(sb, this.toString(), stack, 0);
+ 
+     // The cause(s)
+     Throwable cause = getCause();
+     while (cause != null)
+       {
+ 	// Cause start first line
+         sb.append("Caused by: ");
+ 
+         // Cause stacktrace
+         StackTraceElement[] parentStack = stack;
+         stack = cause.getStackTrace();
+ 	if (parentStack == null || parentStack.length == 0)
+ 	  stackTraceStringBuffer(sb, cause.toString(), stack, 0);
+ 	else
+ 	  {
+ 	    int equal = 0; // Count how many of the last stack frames are equal
+ 	    int frame = stack.length-1;
+ 	    int parentFrame = parentStack.length-1;
+ 	    while (frame > 0 && parentFrame > 0)
+ 	      {
+ 		if (stack[frame].equals(parentStack[parentFrame]))
+ 		  {
+ 		    equal++;
+ 		    frame--;
+ 		    parentFrame--;
+ 		  }
+ 		else
+ 		  break;
+ 	      }
+ 	    stackTraceStringBuffer(sb, cause.toString(), stack, equal);
+ 	  }
+         cause = cause.getCause();
+       }
+ 
+     return sb.toString();
+   }
+ 
+   // Adds to the given StringBuffer a line containing the name and
+   // all stacktrace elements minus the last equal ones.
+   private static void stackTraceStringBuffer(StringBuffer sb, String name,
+ 					StackTraceElement[] stack, int equal)
+   {
+     String nl = StaticData.nl;
+     // (finish) first line
+     sb.append(name);
+     sb.append(nl);
+ 
+     // The stacktrace
+     if (stack == null || stack.length == 0)
+       {
+ 	sb.append("   <<No stacktrace available>>");
+ 	sb.append(nl);
+       }
+     else
+       {
+ 	for (int i = 0; i < stack.length-equal; i++)
+ 	  {
+ 	    sb.append("   at ");
+ 	    sb.append(stack[i] == null ? "<<Unknown>>" : stack[i].toString());
+ 	    sb.append(nl);
+ 	  }
+ 	if (equal > 0)
+ 	  {
+ 	    sb.append("   ...");
+ 	    sb.append(equal);
+ 	    sb.append(" more");
+ 	    sb.append(nl);
+ 	  }
+       }
+   }
+ 
+   /**
+    * Fill in the stack trace with the current execution stack.
+    *
+    * @return this same throwable
+    * @see #printStackTrace()
+    */
+   public Throwable fillInStackTrace()
+   {
+     vmState = VMThrowable.fillInStackTrace(this);
+     stackTrace = null; // Should be regenerated when used.
+ 
+     return this;
+   }
+ 
+   /**
+    * Provides access to the information printed in {@link #printStackTrace()}.
+    * The array is non-null, with no null entries, although the virtual
+    * machine is allowed to skip stack frames.  If the array is not 0-length,
+    * then slot 0 holds the information on the stack frame where the Throwable
+    * was created (or at least where <code>fillInStackTrace()</code> was
+    * called).
+    *
+    * @return an array of stack trace information, as available from the VM
+    * @since 1.4
+    */
+   public StackTraceElement[] getStackTrace()
+   {
+     if (stackTrace == null)
+       if (vmState == null)
+ 	stackTrace = new StackTraceElement[0];
+       else 
+ 	{
+ 	  stackTrace = vmState.getStackTrace(this);
+ 	  vmState = null; // No longer needed
+ 	}
+ 
+     return stackTrace;
+   }
+ 
+   /**
+    * Change the stack trace manually. This method is designed for remote
+    * procedure calls, which intend to alter the stack trace before or after
+    * serialization according to the context of the remote call.
+    * <p>
+    * The contents of the given stacktrace is copied so changes to the
+    * original array do not change the stack trace elements of this
+    * throwable.
+    *
+    * @param stackTrace the new trace to use
+    * @throws NullPointerException if stackTrace is null or has null elements
+    * @since 1.4
+    */
+   public void setStackTrace(StackTraceElement[] stackTrace)
+   {
+     int i = stackTrace.length;
+     StackTraceElement[] st = new StackTraceElement[i];
+ 
+     while (--i >= 0)
+       {
+ 	st[i] = stackTrace[i];
+ 	if (st[i] == null)
+ 	  throw new NullPointerException("Element " + i + " null");
+       }
+ 
+     this.stackTrace = st;
+   }
+ 
+   /**
+    * VM state when fillInStackTrace was called.
+    * Used by getStackTrace() to get an array of StackTraceElements.
+    * Cleared when no longer needed.
+    */
+   private transient VMThrowable vmState;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/TypeNotPresentException.java gcc-4.1.0/libjava/classpath/java/lang/TypeNotPresentException.java
*** gcc-4.0.2/libjava/classpath/java/lang/TypeNotPresentException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/TypeNotPresentException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /* TypeNotPresentException.java -- Thrown when a string-based type is missing
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * <p>
+  * Thrown when a type is accessed using a <code>String</code>-based
+  * representation, but no definition of the supplied type is found.
+  * This is effectively an unchecked equivalent of the existing
+  * <code>ClassNotFound</code> exception.  
+  * </p>
+  * <p>
+  * It may occur due to an attempt to load a missing class, interface or
+  * annotation, or when an undefined type variable is accessed.
+  * </p>
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @see ClassNotFoundException
+  * @since 1.5
+  */
+ public class TypeNotPresentException
+   extends RuntimeException
+ {
+   
+   /**
+    * Constructs a <code>TypeNotPresentException</code> for
+    * the supplied type.  The specified cause <code>Throwable</code>
+    * may be used to provide additional history, with regards to the
+    * root of the problem.  It is perfectly valid for this to be null,
+    * if the cause of the problem is unknown.
+    * 
+    * @param typeName the name of the missing type.
+    * @param cause the cause of this exception, or null if the cause
+    *              is unknown.
+    */
+   public TypeNotPresentException(String typeName, Throwable cause)
+   {
+     super("type \"" + typeName + "\" not found", cause);
+     this.typeName = typeName;
+   }
+ 
+   /**
+    * Returns the name of the missing type.
+    *
+    * @return the missing type's name.
+    */
+   public String typeName()
+   {
+     return typeName;
+   }
+ 
+   /**
+    * The name of the missing type.
+    *
+    * @serial the missing type's name.
+    */
+   // Name fixed by serialization.
+   private String typeName;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/UnknownError.java gcc-4.1.0/libjava/classpath/java/lang/UnknownError.java
*** gcc-4.0.2/libjava/classpath/java/lang/UnknownError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/UnknownError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* UnknownError.java -- thrown when the VM cannot provide more information
+    about a catastrophic error
+    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An <code>UnknownError</code> is thrown when a serious but unknown
+  * problem has occurred in the Java Virtual Machine.
+  *
+  * @author Brian Jones
+  * @status updated to 1.4
+  */
+ public class UnknownError extends VirtualMachineError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 2524784860676771849L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public UnknownError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public UnknownError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/UnsatisfiedLinkError.java gcc-4.1.0/libjava/classpath/java/lang/UnsatisfiedLinkError.java
*** gcc-4.0.2/libjava/classpath/java/lang/UnsatisfiedLinkError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/UnsatisfiedLinkError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* UnsatisfiedLinkError.java -- thrown when a native method cannot be loaded
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * A <code>UnsatisfiedLinkError</code> is thrown if an appropriate
+  * native language definition of a method declared <code>native</code>
+  * cannot be found by the Java Virtual Machine.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see Runtime
+  * @status updated to 1.4
+  */
+ public class UnsatisfiedLinkError extends LinkageError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -4019343241616879428L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public UnsatisfiedLinkError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public UnsatisfiedLinkError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/UnsupportedClassVersionError.java gcc-4.1.0/libjava/classpath/java/lang/UnsupportedClassVersionError.java
*** gcc-4.0.2/libjava/classpath/java/lang/UnsupportedClassVersionError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/UnsupportedClassVersionError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* UnsupportedClassVersionError.java -- thrown when a class file version
+    exceeds the capability of the virtual machine
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * An <code>UnsupportedClassVersionError</code> is thrown when the
+  * Java Virtual Machine determines it does not support the major and minor
+  * version numbers in the class file it is attempting to read.
+  *
+  * @author Brian Jones
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class UnsupportedClassVersionError extends ClassFormatError
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -7123279212883497373L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public UnsupportedClassVersionError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public UnsupportedClassVersionError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/UnsupportedOperationException.java gcc-4.1.0/libjava/classpath/java/lang/UnsupportedOperationException.java
*** gcc-4.0.2/libjava/classpath/java/lang/UnsupportedOperationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/UnsupportedOperationException.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,127 ----
+ /* UnsupportedOperationException.java -- thrown when an operation is not
+    supported
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * This exception is thrown by an object when an operation is
+  * requested of it that it does not support.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.2
+  * @status updated to 1.5
+  */
+ public class UnsupportedOperationException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -1242599979055084673L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public UnsupportedOperationException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public UnsupportedOperationException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * <p>
+    * Constructs a <code>UnsupportedOperationException</code> using
+    * the specified error message, which should give further details
+    * as to the reason for this exception.  The specified cause
+    * <code>Throwable</code> may be used to provide additional history,
+    * with regards to the root of the problem.  It is perfectly valid
+    * for this to be null, if the cause of the problem is unknown.
+    * </p>
+    * <p>
+    * <strong>Note</strong>: the detail message from the cause is not
+    * automatically incorporated into the resulting detail message of
+    * this exception.
+    * </p>
+    * 
+    * @param message the detail message, which should give the reason for
+    *                this exception being thrown.
+    * @param cause the cause of this exception, or null if the cause
+    *              is unknown.
+    * @since 1.5
+    */
+   public UnsupportedOperationException(String message, Throwable cause)
+   {
+     super(message, cause);
+   }
+ 
+   /**
+    * <p>
+    * Constructs a <code>UnsupportedOperationException</code> using
+    * the specified cause <code>Throwable</code>, which may be used
+    * to provide additional history, with regards to the root of the
+    * problem.  It is perfectly valid for this to be null, if the
+    * cause of the problem is unknown.
+    * </p>
+    * <p>
+    * The detail message is automatically constructed from the detail
+    * message of the supplied causal exception.  If the cause is null,
+    * then the detail message will also be null.  Otherwise, the detail
+    * message of this exception will be that of the causal exception.
+    * This makes this constructor very useful for simply wrapping another
+    * exception.
+    * </p>
+    * 
+    * @param cause the cause of this exception, or null if the cause
+    *              is unknown.
+    * @since 1.5
+    */
+   public UnsupportedOperationException(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/VerifyError.java gcc-4.1.0/libjava/classpath/java/lang/VerifyError.java
*** gcc-4.0.2/libjava/classpath/java/lang/VerifyError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/VerifyError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* VerifyError.java -- thrown when a class fails verification
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * A <code>VerifyError</code> is thrown if there is a security problem or
+  * internal inconsistency in a class file as detected by the "verifier."
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class VerifyError extends LinkageError
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 7001962396098498785L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public VerifyError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public VerifyError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/VirtualMachineError.java gcc-4.1.0/libjava/classpath/java/lang/VirtualMachineError.java
*** gcc-4.0.2/libjava/classpath/java/lang/VirtualMachineError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/VirtualMachineError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* VirtualMachineError.java -- thrown when the Virtual Machine has a problem
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang;
+ 
+ /**
+  * A <code>VirtualMachineError</code> or its subclasses are thrown to
+  * indicate there is something wrong with the Java Virtual Machine or that
+  * it does not have the resources needed for it to continue execution.
+  *
+  * @author Brian Jones
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @status updated to 1.4
+  */
+ public abstract class VirtualMachineError extends Error
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 4161983926571568670L;
+ 
+   /**
+    * Create an error without a message.
+    */
+   public VirtualMachineError()
+   {
+   }
+ 
+   /**
+    * Create an error with a message.
+    *
+    * @param s the message
+    */
+   public VirtualMachineError(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/Void.java gcc-4.1.0/libjava/classpath/java/lang/Void.java
*** gcc-4.0.2/libjava/classpath/java/lang/Void.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/Void.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /* Void.class - defines void.class
+    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang;
+ 
+ 
+ /**
+  * Void is a placeholder class so that the variable <code>Void.TYPE</code>
+  * (also available as <code>void.class</code>) can be supported for
+  * reflection return types.
+  *
+  * <p>This class could be Serializable, but that is up to Sun.</p>
+  *
+  * @author Paul Fisher
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public final class Void
+ {
+   /**
+    * The return type <code>void</code> is represented by this
+    * <code>Class</code> object.
+    */
+   public static final Class TYPE = VMClassLoader.getPrimitiveClass('V');
+ 
+   /**
+    * Void is non-instantiable.
+    */
+   private Void()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/annotation/AnnotationFormatError.java gcc-4.1.0/libjava/classpath/java/lang/annotation/AnnotationFormatError.java
*** gcc-4.0.2/libjava/classpath/java/lang/annotation/AnnotationFormatError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/annotation/AnnotationFormatError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /* AnnotationFormatError.java - Thrown when an binary annotation is malformed
+    Copyright (C) 2004, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang.annotation;
+ 
+ /**
+  * Thrown when an annotation found in a class file is
+  * malformed.  When the virtual machine finds a class file
+  * containing annotations, it attempts to parse them.
+  * This error is thrown if this operation fails.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.5
+  */
+ public class AnnotationFormatError extends Error
+ {
+ 
+   /**
+    * Constructs a new <code>AnnotationFormatError</code>
+    * using the specified message to give details of the error.
+    *
+    * @param message the message to use in the error output.
+    */
+   public AnnotationFormatError(String message)
+   {
+     super(message);
+   }
+ 
+   /**
+    * <p>
+    * Constructs a new <code>AnnotationFormatError</code>
+    * using the specified message to give details of the error.
+    * The supplied cause <code>Throwable</code> is used to
+    * provide additional history, with regards to the root
+    * of the problem.  It is perfectly valid for this to be null, if
+    * the cause is unknown.
+    * </p>
+    * <p>
+    * <strong>Note</strong>: if a cause is supplied, the error
+    * message from this cause is not automatically included in the
+    * error message given by this error.
+    * </p>
+    *
+    * @param message the message to use in the error output
+    * @param cause the cause of this error, or null if the cause
+    *              is unknown.
+    */
+   public AnnotationFormatError(String message, Throwable cause)
+   {
+     super(message, cause);
+   }
+ 
+   /**
+    * Constructs a new <code>AnnotationFormatError</code> using
+    * the supplied cause <code>Throwable</code> to
+    * provide additional history, with regards to the root
+    * of the problem.  It is perfectly valid for this to be null, if
+    * the cause is unknown.  If the cause is not null, the error
+    * message from this cause will also be used as the message
+    * for this error.
+    *
+    * @param cause the cause of the error.
+    */
+   public AnnotationFormatError(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/annotation/AnnotationTypeMismatchException.java gcc-4.1.0/libjava/classpath/java/lang/annotation/AnnotationTypeMismatchException.java
*** gcc-4.0.2/libjava/classpath/java/lang/annotation/AnnotationTypeMismatchException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/annotation/AnnotationTypeMismatchException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,116 ----
+ /* AnnotationTypeMismatchException.java - Thrown when annotation has changed
+    Copyright (C) 2004, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang.annotation;
+ 
+ import java.lang.reflect.Method;
+ 
+ /**
+  * Thrown when accessing an element within an annotation for
+  * which the type has changed, since compilation or serialization
+  * took place.  The mismatch between the compiled or serialized
+  * type and the current type causes this exception to be thrown.
+  * 
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.5
+  */
+ public class AnnotationTypeMismatchException extends RuntimeException
+ {
+ 
+   /**
+    * For compatability with Sun's JDK
+    */
+   private static final long serialVersionUID = 8125925355765570191L;
+ 
+   /**
+    * Constructs an <code>AnnotationTypeMismatchException</code>
+    * which is due to a mismatched type in the annotation
+    * element, <code>m</code>. The erroneous type used for the
+    * data in <code>m</code> is represented by the string,
+    * <code>type</code>.  This string is of an undefined format,
+    * and may contain the value as well as the type.
+    *
+    * @param m the element from the annotation.
+    * @param type the name of the erroneous type found in <code>m</code>.
+    */
+   public AnnotationTypeMismatchException(Method m, String type)
+   {
+     this.element = m;
+     this.foundType = type;
+   }
+ 
+   /**
+    * Returns the element from the annotation, for which a
+    * mismatch occurred.
+    *
+    * @return the element with the mismatched type.
+    */
+   public Method element()
+   {
+     return element;
+   }
+ 
+   /**
+    * Returns the erroneous type used by the element,
+    * represented as a <code>String</code>.  The format
+    * of this <code>String</code> is not explicitly specified,
+    * and may contain the value as well as the type.
+    *
+    * @return the type found in the element.
+    */
+   public String foundType()
+   {
+     return foundType;
+   }
+ 
+   // Names are chosen from serialization spec.
+   /**
+    * The element from the annotation.
+    *
+    * @serial the element with the mismatched type.
+    */
+   private Method element;
+ 
+   /**
+    * The erroneous type used by the element.
+    *
+    * @serial the type found in the element.
+    */
+   private String foundType;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/annotation/package.html gcc-4.1.0/libjava/classpath/java/lang/annotation/package.html
*** gcc-4.0.2/libjava/classpath/java/lang/annotation/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/annotation/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.lang.annotation package.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.lang.annotation</title></head>
+ 
+ <body>
+ <p>Classes to handle annotations.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/class-dependencies.conf gcc-4.1.0/libjava/classpath/java/lang/class-dependencies.conf
*** gcc-4.0.2/libjava/classpath/java/lang/class-dependencies.conf	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/class-dependencies.conf	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ # This property file contains dependencies of classes, methods, and
+ # field on other methods or classes.
+ #
+ # Syntax: 
+ #
+ #   <used>: <needed 1> [... <needed N>]
+ #
+ # means that when <used> is included, <needed 1> (... <needed N>) must
+ # be included as well.
+ #
+ # <needed X> and <used> are of the form
+ #
+ #   <class.methodOrField(signature)>
+ #
+ # or just
+ #
+ #   <class>
+ #
+ # Within dependencies, variables can be used. A variable is defined as 
+ # follows: 
+ #
+ #   {variable}: value1 value2 ... value<n>
+ #
+ # variables can be used on the right side of dependencies as follows: 
+ #
+ #    <used>: com.bla.blu.{variable}.Class.m()V
+ #
+ # The use of the variable will expand to <n> dependencies of the form
+ #
+ #    <used>: com.bla.blu.value1.Class.m()V
+ #    <used>: com.bla.blu.value2.Class.m()V
+ #    ...
+ #    <used>: com.bla.blu.value<n>.Class.m()V
+ #
+ # Variables can be redefined when building a system to select the 
+ # required support for features like encodings, protocols, etc. 
+ #
+ # Hints:
+ #
+ #  - For methods and fields, the signature is mandatory. For
+ #    specification, please see the Java Virtual Machine Specification by
+ #    SUN. Unlike in the spec, field signatures (types) are in brackets.
+ #
+ #  - Package names must be separated by '/' (and not '.'). E.g.,
+ #    java/lang/Class (this is necessary, because the '.' is used to
+ #    separate method or field names from classes)
+ #
+ #  - In case <needed> refers to a class, only the class itself will be
+ #    included in the resulting binary, NOT necessarily all its methods
+ #    and fields. If you want to refer to all methods and fields, you can
+ #    write class.* as an abbreviation.
+ #
+ # -  Abbreviations for packages are also possible: my/package/* means all
+ #    methods and fields of all classes in my/package.
+ #
+ # -  A line with a trailing '\' continues in the next line.
+ 
+ # end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/package.html gcc-4.1.0/libjava/classpath/java/lang/package.html
*** gcc-4.0.2/libjava/classpath/java/lang/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,48 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.lang package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.lang</title></head>
+ 
+ <body>
+ <p>Core classes including wrappers for primitive types, classes, packages
+ and class loaders, representations of the system, processes, threads and
+ the core exception hierarchy.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ref/PhantomReference.java gcc-4.1.0/libjava/classpath/java/lang/ref/PhantomReference.java
*** gcc-4.0.2/libjava/classpath/java/lang/ref/PhantomReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ref/PhantomReference.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* java.lang.ref.PhantomReference
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.ref;
+ 
+ /**
+  * A phantom reference is useful, to get notified, when an object got
+  * finalized.  You can't access that object though, since it is
+  * finalized.  This is the reason, why <code>get()</code> always
+  * returns null.
+  *
+  * @author Jochen Hoenicke 
+  */
+ public class PhantomReference 
+   extends Reference
+ {
+   /**
+    * Creates a new phantom reference.
+    * @param referent the object that should be watched.
+    * @param q the queue that should be notified, if the referent was
+    * finalized.  This mustn't be <code>null</code>.
+    * @exception NullPointerException if q is null.
+    */
+   public PhantomReference(Object referent, ReferenceQueue q)
+   {
+     super(referent, q);
+   }
+   
+   /**
+    * Returns the object, this reference refers to.
+    * @return <code>null</code>, since the refered object may be
+    * finalized and thus not accessible.  
+    */
+   public Object get()
+   {
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ref/Reference.java gcc-4.1.0/libjava/classpath/java/lang/ref/Reference.java
*** gcc-4.0.2/libjava/classpath/java/lang/ref/Reference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ref/Reference.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,177 ----
+ /* java.lang.ref.Reference
+    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.ref;
+ 
+ /**
+  * This is the base class of all references.  A reference allows
+  * refering to an object without preventing the garbage collector to
+  * collect it.  The only way to get the referred object is via the
+  * <code>get()</code>-method.  This method will return
+  * <code>null</code> if the object was collected. <br>
+  *
+  * A reference may be registered with a queue.  When a referred
+  * element gets collected the reference will be put on the queue, so
+  * that you will be notified. <br>
+  *
+  * There are currently three types of references:  soft reference,
+  * weak reference and phantom reference. <br>
+  *
+  * Soft references will be cleared if the garbage collector is told
+  * to free some memory and there are no unreferenced or weakly referenced
+  * objects.  It is useful for caches. <br>
+  *
+  * Weak references will be cleared as soon as the garbage collector
+  * determines that the refered object is only weakly reachable.  They
+  * are useful as keys in hashtables (see <code>WeakHashtable</code>) as
+  * you get notified when nobody has the key anymore.
+  *
+  * Phantom references don't prevent finalization.  If an object is only
+  * phantom reachable, it will be finalized, and the reference will be
+  * enqueued, but not cleared.  Since you mustn't access an finalized
+  * object, the <code>get</code> method of a phantom reference will never
+  * work.  It is useful to keep track, when an object is finalized.
+  *
+  * @author Jochen Hoenicke
+  * @see java.util.WeakHashMap
+  */
+ public abstract class Reference
+ {
+   /**
+    * The underlying object.  This field is handled in a special way by
+    * the garbage collector.
+    */
+   Object referent;
+ 
+   /**
+    * The queue this reference is registered on. This is null, if this
+    * wasn't registered to any queue or reference was already enqueued.
+    */
+   ReferenceQueue queue;
+ 
+   /**
+    * Link to the next entry on the queue.  If this is null, this
+    * reference is not enqueued.  Otherwise it points to the next
+    * reference.  The last reference on a queue will point to itself
+    * (not to null, that value is used to mark a not enqueued
+    * reference).  
+    */
+   Reference nextOnQueue;
+ 
+   /**
+    * This lock should be taken by the garbage collector, before
+    * determining reachability.  It will prevent the get()-method to
+    * return the reference so that reachability doesn't change.
+    */
+   static Object lock = new Object();
+ 
+   /**
+    * Creates a new reference that is not registered to any queue.
+    * Since it is package private, it is not possible to overload this
+    * class in a different package.  
+    * @param ref the object we refer to.
+    */
+   Reference(Object ref)
+   {
+     referent = ref;
+   }
+ 
+   /**
+    * Creates a reference that is registered to a queue.  Since this is
+    * package private, it is not possible to overload this class in a
+    * different package.  
+    * @param ref the object we refer to.
+    * @param q the reference queue to register on.
+    * @exception NullPointerException if q is null.
+    */
+   Reference(Object ref, ReferenceQueue q)
+   {
+     if (q == null)
+       throw new NullPointerException();
+     referent = ref;
+     queue = q;
+   }
+ 
+   /**
+    * Returns the object, this reference refers to.
+    * @return the object, this reference refers to, or null if the 
+    * reference was cleared.
+    */
+   public Object get()
+   {
+     synchronized (lock)
+       {
+ 	return referent;
+       }
+   }
+ 
+   /**
+    * Clears the reference, so that it doesn't refer to its object
+    * anymore.  For soft and weak references this is called by the
+    * garbage collector.  For phantom references you should call 
+    * this when enqueuing the reference.
+    */
+   public void clear()
+   {
+     referent = null;
+   }
+ 
+   /**
+    * Tells if the object is enqueued on a reference queue.
+    * @return true if it is enqueued, false otherwise.
+    */
+   public boolean isEnqueued()
+   {
+     return nextOnQueue != null;
+   }
+ 
+   /**
+    * Enqueue an object on a reference queue.  This is normally executed
+    * by the garbage collector.
+    */
+   public boolean enqueue() 
+   {
+     if (queue != null && nextOnQueue == null)
+       {
+ 	queue.enqueue(this);
+ 	queue = null;
+ 	return true;
+       }
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ref/ReferenceQueue.java gcc-4.1.0/libjava/classpath/java/lang/ref/ReferenceQueue.java
*** gcc-4.0.2/libjava/classpath/java/lang/ref/ReferenceQueue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ref/ReferenceQueue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,145 ----
+ /* java.lang.ref.ReferenceQueue
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.ref;
+ 
+ /**
+  * This is the queue, where references can enqueue themselve on.  Each
+  * reference may be registered to a queue at initialization time and
+  * will be appended to the queue, when the enqueue method is called.
+  *
+  * The enqueue method may be automatically called by the garbage
+  * collector if it detects, that the object is only reachable through
+  * the Reference objects.
+  *
+  * @author Jochen Hoenicke
+  * @see Reference#enqueue()
+  */
+ public class ReferenceQueue
+ {
+   /**
+    * This is a linked list of references.  If this is null, the list is
+    * empty.  Otherwise this points to the first reference on the queue.
+    * The first reference will point to the next reference via the 
+    * <code>nextOnQueue</code> field.  The last reference will point to
+    * itself (not to null, since <code>nextOnQueue</code> is used to 
+    * determine if a reference is enqueued).
+    */
+   private Reference first;
+ 
+   /**
+    * Creates a new empty reference queue.
+    */
+   public ReferenceQueue()
+   {
+   }
+ 
+   /**
+    * Checks if there is a reference on the queue, returning it
+    * immediately.  The reference will be dequeued.
+    *
+    * @return a reference on the queue, if there is one,
+    * <code>null</code> otherwise.  
+    */
+   public synchronized Reference poll()
+   { 
+     return dequeue();
+   }
+ 
+   /**
+    * This is called by reference to enqueue itself on this queue.  
+    * @param ref the reference that should be enqueued.
+    */
+   synchronized void enqueue(Reference ref)
+   {
+     /* last reference will point to itself */
+     ref.nextOnQueue = first == null ? ref : first;
+     first = ref;
+     /* this wakes only one remove thread. */
+     notify();
+   }
+ 
+   /**
+    * Remove a reference from the queue, if there is one.
+    * @return the first element of the queue, or null if there isn't any.
+    */
+   private Reference dequeue()
+   {
+     if (first == null)
+       return null;
+ 
+     Reference result = first;
+     first = (first == first.nextOnQueue) ? null : first.nextOnQueue;
+     result.nextOnQueue = null;
+     return result;
+   }
+ 
+   /**
+    * Removes a reference from the queue, blocking for <code>timeout</code>
+    * until a reference is enqueued.
+    * @param timeout the timeout period in milliseconds, <code>0</code> means
+    * wait forever.
+    * @return the reference removed from the queue, or 
+    * <code>null</code> if timeout period expired.  
+    * @exception InterruptedException if the wait was interrupted.
+    */
+   public synchronized Reference remove(long timeout)
+     throws InterruptedException
+   {
+     if (first == null)
+       {
+ 	wait(timeout);
+       }
+ 
+     return dequeue();
+   }
+     
+ 
+   /**
+    * Removes a reference from the queue, blocking until a reference is
+    * enqueued.
+    *
+    * @return the reference removed from the queue.  
+    * @exception InterruptedException if the wait was interrupted.
+    */
+   public Reference remove()
+     throws InterruptedException
+   {
+     return remove(0L);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ref/SoftReference.java gcc-4.1.0/libjava/classpath/java/lang/ref/SoftReference.java
*** gcc-4.0.2/libjava/classpath/java/lang/ref/SoftReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ref/SoftReference.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,84 ----
+ /* java.lang.ref.SoftReference
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.ref;
+ 
+ /**
+  * A soft reference will be cleared, if the object is only softly
+  * reachable and the garbage collection needs more memory.  The garbage
+  * collection will use an intelligent strategy to determine which soft
+  * references it should clear.  This makes a soft reference ideal for
+  * caches.<br>
+  *
+  * @author Jochen Hoenicke 
+  */
+ public class SoftReference 
+   extends Reference
+ {
+   /**
+    * Create a new soft reference, that is not registered to any queue.
+    * @param referent the object we refer to.
+    */
+   public SoftReference(Object referent)
+   {
+     super(referent);
+   }
+ 
+   /**
+    * Create a new soft reference.
+    * @param referent the object we refer to.
+    * @param q the reference queue to register on.
+    * @exception NullPointerException if q is null.
+    */
+   public SoftReference(Object referent, ReferenceQueue q)
+   {
+     super(referent, q);
+   }
+   
+   /**
+    * Returns the object, this reference refers to.
+    * @return the object, this reference refers to, or null if the 
+    * reference was cleared.
+    */
+   public Object get()
+   {
+     /* Why is this overloaded??? 
+      * Maybe for a kind of LRU strategy. */
+     return super.get();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ref/WeakReference.java gcc-4.1.0/libjava/classpath/java/lang/ref/WeakReference.java
*** gcc-4.0.2/libjava/classpath/java/lang/ref/WeakReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ref/WeakReference.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,79 ----
+ /* java.lang.ref.WeakReference
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.ref;
+ 
+ /**
+  * A weak reference will be cleared, if the object is only weakly
+  * reachable.  It is useful for lookup tables, where you aren't
+  * interested in an entry, if the key isn't reachable anymore.
+  * <code>WeakHashtable</code> is a complete implementation of such a
+  * table. <br>
+  *
+  * It is also useful to make objects unique: You create a set of weak
+  * references to those objects, and when you create a new object you
+  * look in this set, if the object already exists and return it.  If
+  * an object is not referenced anymore, the reference will
+  * automatically cleared, and you may remove it from the set. <br>
+  *
+  * @author Jochen Hoenicke 
+  * @see java.util.WeakHashMap 
+  */
+ public class WeakReference 
+   extends Reference
+ {
+   /**
+    * Create a new weak reference, that is not registered to any queue.
+    * @param referent the object we refer to.
+    */
+   public WeakReference(Object referent)
+   {
+     super(referent);
+   }
+ 
+   /**
+    * Create a new weak reference.
+    * @param referent the object we refer to.
+    * @param q the reference queue to register on.
+    * @exception NullPointerException if q is null.
+    */
+   public WeakReference(Object referent, ReferenceQueue q)
+   {
+     super(referent, q);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/ref/package.html gcc-4.1.0/libjava/classpath/java/lang/ref/package.html
*** gcc-4.0.2/libjava/classpath/java/lang/ref/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/ref/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.lang.ref package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.lang.ref</title></head>
+ 
+ <body>
+ <p>Low level manipulation and monitoring of object references.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/AccessibleObject.java gcc-4.1.0/libjava/classpath/java/lang/reflect/AccessibleObject.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/AccessibleObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/AccessibleObject.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,159 ----
+ /* java.lang.reflect.AccessibleObject
+    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * This class is the superclass of various reflection classes, and
+  * allows sufficiently trusted code to bypass normal restrictions to
+  * do necessary things like invoke private methods outside of the
+  * class during Serialization.  If you don't have a good reason
+  * to mess with this, don't try. Fortunately, there are adequate
+  * security checks before you can set a reflection object as accessible.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Field
+  * @see Constructor
+  * @see Method
+  * @see ReflectPermission
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class AccessibleObject
+ {
+   /**
+    * True if this object is marked accessible, which means the reflected
+    * object bypasses normal security checks.
+    */
+   // default visibility for use by inherited classes
+   boolean flag = false;
+ 
+   /**
+    * Only the three reflection classes that extend this can create an
+    * accessible object.  This is not serializable for security reasons.
+    */
+   protected AccessibleObject()
+   {
+   }
+ 
+   /**
+    * Return the accessibility status of this object.
+    *
+    * @return true if this object bypasses security checks
+    */
+   public boolean isAccessible()
+   {
+     return flag;
+   }
+ 
+   /**
+    * Convenience method to set the flag on a number of objects with a single
+    * security check. If a security manager exists, it is checked for
+    * <code>ReflectPermission("suppressAccessChecks")</code>.<p>
+    *
+    * It is forbidden to set the accessibility flag to true on any constructor
+    * for java.lang.Class. This will result in a SecurityException. If the 
+    * SecurityException is thrown for any of the passed AccessibleObjects,
+    * the accessibility flag will be set on AccessibleObjects in the array prior 
+    * to the one which resulted in the exception.
+    *
+    * @param array the array of accessible objects
+    * @param flag the desired state of accessibility, true to bypass security
+    * @throws NullPointerException if array is null
+    * @throws SecurityException if the request is denied
+    * @see SecurityManager#checkPermission(java.security.Permission)
+    * @see RuntimePermission
+    */
+   public static void setAccessible(AccessibleObject[] array, boolean flag)
+   {
+     checkPermission();
+     for (int i = 0; i < array.length; i++)
+       array[i].secureSetAccessible(flag);
+   }
+ 
+   /**
+    * Sets the accessibility flag for this reflection object. If a security
+    * manager exists, it is checked for
+    * <code>ReflectPermission("suppressAccessChecks")</code>.<p>
+    *
+    * It is forbidden to set the accessibility flag to true on any constructor for 
+    * java.lang.Class. This will result in a SecurityException.
+    *
+    * @param flag the desired state of accessibility, true to bypass security
+    * @throws NullPointerException if array is null
+    * @throws SecurityException if the request is denied
+    * @see SecurityManager#checkPermission(java.security.Permission)
+    * @see RuntimePermission
+    */
+   public void setAccessible(boolean flag)
+   {
+     checkPermission();
+     secureSetAccessible(flag);
+   }
+ 
+   /**
+    * Performs the specified security check, for
+    * <code>ReflectPermission("suppressAccessChecks")</code>.
+    *
+    * @throws SecurityException if permission is denied
+    */
+   private static void checkPermission()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(new ReflectPermission("suppressAccessChecks"));
+   }
+ 
+   /**
+    * Performs the actual accessibility change, this must always be invoked
+    * after calling checkPermission.
+    *
+    * @param flag the desired status
+    * @throws SecurityException if flag is true and this is a constructor
+    * for <code>java.lang.Class</code>.
+    */
+   private void secureSetAccessible(boolean flag)
+   {
+     if (flag &&
+         (this instanceof Constructor
+           && ((Constructor) this).getDeclaringClass() == Class.class))
+       throw new SecurityException("Cannot make object accessible: " + this);
+     this.flag = flag;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/Array.java gcc-4.1.0/libjava/classpath/java/lang/reflect/Array.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/Array.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/Array.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,675 ----
+ /* java.lang.reflect.Array - manipulate arrays by reflection
+    Copyright (C) 1998, 1999, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ import gnu.classpath.Configuration;
+ 
+ /**
+  * Array holds static helper functions that allow you to create and
+  * manipulate arrays by reflection. Operations know how to perform widening
+  * conversions, but throw {@link IllegalArgumentException} if you attempt
+  * a narrowing conversion. Also, when accessing primitive arrays, this
+  * class performs object wrapping and unwrapping as necessary.<p>
+  *
+  * <B>Note:</B> This class returns and accepts types as Classes, even
+  * primitive types; there are Class types defined that represent each
+  * different primitive type.  They are <code>java.lang.Boolean.TYPE,
+  * java.lang.Byte.TYPE,</code>, also available as <code>boolean.class,
+  * byte.class</code>, etc.  These are not to be confused with the
+  * classes <code>java.lang.Boolean, java.lang.Byte</code>, etc., which are
+  * real classes. Note also that the shorthand <code>Object[].class</code>
+  * is a convenient way to get array Classes.<p>
+  *
+  * <B>Performance note:</B> This class performs best when it does not have
+  * to convert primitive types.  The further along the chain it has to convert,
+  * the worse performance will be.  You're best off using the array as whatever
+  * type it already is, and then converting the result.  You will do even
+  * worse if you do this and use the generic set() function.
+  *
+  * @author John Keiser
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Per Bothner (bothner@cygnus.com)
+  * @see java.lang.Boolean#TYPE
+  * @see java.lang.Byte#TYPE
+  * @see java.lang.Short#TYPE
+  * @see java.lang.Character#TYPE
+  * @see java.lang.Integer#TYPE
+  * @see java.lang.Long#TYPE
+  * @see java.lang.Float#TYPE
+  * @see java.lang.Double#TYPE
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public final class Array
+ {
+   static
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary("javalangreflect");
+       }
+   }
+ 
+   /**
+    * This class is uninstantiable.
+    */
+   private Array()
+   {
+   }
+ 
+   /**
+    * Creates a new single-dimensioned array.
+    * @param componentType the type of the array to create
+    * @param length the length of the array to create
+    * @return the created array, cast to an Object
+    * @throws NullPointerException if <code>componentType</code> is null
+    * @throws IllegalArgumentException if <code>componentType</code> is
+    *         <code>Void.TYPE</code>
+    * @throws NegativeArraySizeException when length is less than 0
+    * @throws OutOfMemoryError if memory allocation fails
+    */
+   public static Object newInstance(Class componentType, int length)
+   {
+     if (! componentType.isPrimitive())
+       return createObjectArray(componentType, length);
+     if (componentType == boolean.class)
+       return new boolean[length];
+     if (componentType == byte.class)
+       return new byte[length];
+     if (componentType == char.class)
+       return new char[length];
+     if (componentType == short.class)
+       return new short[length];
+     if (componentType == int.class)
+       return new int[length];
+     if (componentType == long.class)
+       return new long[length];
+     if (componentType == float.class)
+       return new float[length];
+     if (componentType == double.class)
+       return new double[length];
+     // assert componentType == void.class
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Creates a new multi-dimensioned array.  The new array has the same
+    * component type as the argument class, and the number of dimensions
+    * in the new array is the sum of the dimensions of the argument class
+    * and the length of the argument dimensions. Virtual Machine limitations
+    * forbid too many dimensions (usually 255 is the maximum); but even
+    * 50 dimensions of 2 elements in each dimension would exceed your memory
+    * long beforehand!
+    *
+    * @param componentType the type of the array to create.
+    * @param dimensions the dimensions of the array to create.  Each element
+    *        in <code>dimensions</code> makes another dimension of the new
+    *        array.  Thus, <code>Array.newInstance(java.lang.Boolean,
+    *        new int[]{1,2,3})</code> is the same as
+    *        <code>new java.lang.Boolean[1][2][3]</code>
+    * @return the created array, cast to an Object
+    * @throws NullPointerException if componentType or dimension is null
+    * @throws IllegalArgumentException if the the size of
+    *         <code>dimensions</code> is 0 or exceeds the maximum number of
+    *         array dimensions in the VM; or if componentType is Void.TYPE
+    * @throws NegativeArraySizeException when any of the dimensions is less
+    *         than 0
+    * @throws OutOfMemoryError if memory allocation fails
+    */
+   public static Object newInstance(Class componentType, int[] dimensions)
+   {
+     if (dimensions.length <= 0)
+       throw new IllegalArgumentException ("Empty dimensions array.");
+     return createMultiArray(componentType, dimensions,
+                                   dimensions.length - 1);
+   }
+ 
+   /**
+    * Gets the array length.
+    * @param array the array
+    * @return the length of the array
+    * @throws IllegalArgumentException if <code>array</code> is not an array
+    * @throws NullPointerException if <code>array</code> is null
+    */
+   public static int getLength(Object array)
+   {
+     if (array instanceof Object[])
+       return ((Object[]) array).length;
+     if (array instanceof boolean[])
+       return ((boolean[]) array).length;
+     if (array instanceof byte[])
+       return ((byte[]) array). length;
+     if (array instanceof char[])
+       return ((char[]) array).length;
+     if (array instanceof short[])
+       return ((short[]) array).length;
+     if (array instanceof int[])
+       return ((int[]) array).length;
+     if (array instanceof long[])
+       return ((long[]) array).length;
+     if (array instanceof float[])
+       return ((float[]) array).length;
+     if (array instanceof double[])
+       return ((double[]) array).length;
+     if (array == null)
+       throw new NullPointerException();
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Gets an element of an array.  Primitive elements will be wrapped in
+    * the corresponding class type.
+    *
+    * @param array the array to access
+    * @param index the array index to access
+    * @return the element at <code>array[index]</code>
+    * @throws IllegalArgumentException if <code>array</code> is not an array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #getBoolean(Object, int)
+    * @see #getByte(Object, int)
+    * @see #getChar(Object, int)
+    * @see #getShort(Object, int)
+    * @see #getInt(Object, int)
+    * @see #getLong(Object, int)
+    * @see #getFloat(Object, int)
+    * @see #getDouble(Object, int)
+    */
+   public static Object get(Object array, int index)
+   {
+     if (array instanceof Object[])
+       return ((Object[]) array)[index];
+     if (array instanceof boolean[])
+       return ((boolean[]) array)[index] ? Boolean.TRUE : Boolean.FALSE;
+     if (array instanceof byte[])
+       return new Byte(((byte[]) array)[index]);
+     if (array instanceof char[])
+       return new Character(((char[]) array)[index]);
+     if (array instanceof short[])
+       return new Short(((short[]) array)[index]);
+     if (array instanceof int[])
+       return new Integer(((int[]) array)[index]);
+     if (array instanceof long[])
+       return new Long(((long[]) array)[index]);
+     if (array instanceof float[])
+       return new Float(((float[]) array)[index]);
+     if (array instanceof double[])
+       return new Double(((double[]) array)[index]);
+     if (array == null)
+       throw new NullPointerException();
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Gets an element of a boolean array.
+    *
+    * @param array the array to access
+    * @param index the array index to access
+    * @return the boolean element at <code>array[index]</code>
+    * @throws IllegalArgumentException  if <code>array</code> is not a boolean
+    *         array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #get(Object, int)
+    */
+   public static boolean getBoolean(Object array, int index)
+   {
+     if (array instanceof boolean[])
+       return ((boolean[]) array)[index];
+     if (array == null)
+       throw new NullPointerException();
+     throw new IllegalArgumentException();
+   }
+   
+   /**
+    * Gets an element of a byte array.
+    *
+    * @param array the array to access
+    * @param index the array index to access
+    * @return the byte element at <code>array[index]</code>
+    * @throws IllegalArgumentException  if <code>array</code> is not a byte
+    *         array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #get(Object, int)
+    */
+   public static byte getByte(Object array, int index)
+   {
+     if (array instanceof byte[])
+       return ((byte[]) array)[index];
+     if (array == null)
+       throw new NullPointerException();
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Gets an element of a char array.
+    *
+    * @param array the array to access
+    * @param index the array index to access
+    * @return the char element at <code>array[index]</code>
+    * @throws IllegalArgumentException  if <code>array</code> is not a char
+    *         array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #get(Object, int)
+    */
+   public static char getChar(Object array, int index)
+   {
+     if (array instanceof char[])
+       return ((char[]) array)[index];
+     if (array == null)
+       throw new NullPointerException();
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Gets an element of a short array.
+    *
+    * @param array the array to access
+    * @param index the array index to access
+    * @return the short element at <code>array[index]</code>
+    * @throws IllegalArgumentException  if <code>array</code> is not a byte
+    *         or char array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #get(Object, int)
+    */
+   public static short getShort(Object array, int index)
+   {
+     if (array instanceof short[])
+       return ((short[]) array)[index];
+     return getByte(array, index);
+   }
+ 
+   /**
+    * Gets an element of an int array.
+    *
+    * @param array the array to access
+    * @param index the array index to access
+    * @return the int element at <code>array[index]</code>
+    * @throws IllegalArgumentException  if <code>array</code> is not a byte,
+    *         char, short, or int array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #get(Object, int)
+    */
+   public static int getInt(Object array, int index)
+   {
+     if (array instanceof int[])
+       return ((int[]) array)[index];
+     if (array instanceof char[])
+       return ((char[]) array)[index];
+     return getShort(array, index);
+   }
+ 
+   /**
+    * Gets an element of a long array.
+    *
+    * @param array the array to access
+    * @param index the array index to access
+    * @return the long element at <code>array[index]</code>
+    * @throws IllegalArgumentException  if <code>array</code> is not a byte,
+    *         char, short, int, or long array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #get(Object, int)
+    */
+   public static long getLong(Object array, int index)
+   {
+     if (array instanceof long[])
+       return ((long[]) array)[index];
+     return getInt(array, index);
+   }
+ 
+   /**
+    * Gets an element of a float array.
+    *
+    * @param array the array to access
+    * @param index the array index to access
+    * @return the float element at <code>array[index]</code>
+    * @throws IllegalArgumentException  if <code>array</code> is not a byte,
+    *         char, short, int, long, or float array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #get(Object, int)
+    */
+   public static float getFloat(Object array, int index)
+   {
+     if (array instanceof float[])
+       return ((float[]) array)[index];
+     return getLong(array, index);
+   }
+ 
+   /**
+    * Gets an element of a double array.
+    *
+    * @param array the array to access
+    * @param index the array index to access
+    * @return the double element at <code>array[index]</code>
+    * @throws IllegalArgumentException  if <code>array</code> is not a byte,
+    *         char, short, int, long, float, or double array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #get(Object, int)
+    */
+   public static double getDouble(Object array, int index)
+   {
+     if (array instanceof double[])
+       return ((double[]) array)[index];
+     return getFloat(array, index);
+   }
+ 
+   /**
+    * Sets an element of an array. If the array is primitive, then the new
+    * value is unwrapped and widened.
+    *
+    * @param array the array to set a value of
+    * @param index the array index to set the value to
+    * @param value the value to set
+    * @throws IllegalArgumentException if <code>array</code> is not an array,
+    *         or the array is primitive and unwrapping value fails, or the
+    *         value is not assignable to the array component type
+    * @throws NullPointerException if array is null, or if array is primitive
+    *         and value is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #setBoolean(Object, int, boolean)
+    * @see #setByte(Object, int, byte)
+    * @see #setChar(Object, int, char)
+    * @see #setShort(Object, int, short)
+    * @see #setInt(Object, int, int)
+    * @see #setLong(Object, int, long)
+    * @see #setFloat(Object, int, float)
+    * @see #setDouble(Object, int, double)
+    */
+   public static void set(Object array, int index, Object value)
+   {
+     if (array instanceof Object[])
+       {
+ 	// Too bad the API won't let us throw the easier ArrayStoreException!
+ 	if (value != null
+ 	    && ! array.getClass().getComponentType().isInstance(value))
+ 	  throw new IllegalArgumentException();
+ 	((Object[]) array)[index] = value;
+       }
+     else if (value instanceof Byte)
+       setByte(array, index, ((Byte) value).byteValue());
+     else if (value instanceof Short)
+       setShort(array, index, ((Short) value).shortValue());
+     else if (value instanceof Integer)
+       setInt(array, index, ((Integer) value).intValue());
+     else if (value instanceof Long)
+       setLong(array, index, ((Long) value).longValue());
+     else if (value instanceof Float)
+       setFloat(array, index, ((Float) value).floatValue());
+     else if (value instanceof Double)
+       setDouble(array, index, ((Double) value).doubleValue());
+     else if (value instanceof Character)
+       setChar(array, index, ((Character) value).charValue());
+     else if (value instanceof Boolean)
+       setBoolean(array, index, ((Boolean) value).booleanValue());
+     else if (array == null)
+       throw new NullPointerException();
+     else
+       throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Sets an element of a boolean array.
+    *
+    * @param array the array to set a value of
+    * @param index the array index to set the value to
+    * @param value the value to set
+    * @throws IllegalArgumentException if <code>array</code> is not a boolean
+    *         array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #set(Object, int, Object)
+    */
+   public static void setBoolean(Object array, int index, boolean value)
+   {
+     if (array instanceof boolean[])
+       ((boolean[]) array)[index] = value;
+     else if (array == null)
+       throw new NullPointerException();
+     else
+       throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Sets an element of a byte array.
+    *
+    * @param array the array to set a value of
+    * @param index the array index to set the value to
+    * @param value the value to set
+    * @throws IllegalArgumentException if <code>array</code> is not a byte,
+    *         short, int, long, float, or double array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #set(Object, int, Object)
+    */
+   public static void setByte(Object array, int index, byte value)
+   {
+     if (array instanceof byte[])
+       ((byte[]) array)[index] = value;
+     else
+       setShort(array, index, value);
+   }
+ 
+   /**
+    * Sets an element of a char array.
+    *
+    * @param array the array to set a value of
+    * @param index the array index to set the value to
+    * @param value the value to set
+    * @throws IllegalArgumentException if <code>array</code> is not a char,
+    *         int, long, float, or double array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #set(Object, int, Object)
+    */
+   public static void setChar(Object array, int index, char value)
+   {
+     if (array instanceof char[])
+       ((char[]) array)[index] = value;
+     else
+       setInt(array, index, value);
+   }
+ 
+   /**
+    * Sets an element of a short array.
+    *
+    * @param array the array to set a value of
+    * @param index the array index to set the value to
+    * @param value the value to set
+    * @throws IllegalArgumentException if <code>array</code> is not a short,
+    *         int, long, float, or double array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #set(Object, int, Object)
+    */
+   public static void setShort(Object array, int index, short value)
+   {
+     if (array instanceof short[])
+       ((short[]) array)[index] = value;
+     else
+       setInt(array, index, value);
+   }
+ 
+   /**
+    * Sets an element of an int array.
+    *
+    * @param array the array to set a value of
+    * @param index the array index to set the value to
+    * @param value the value to set
+    * @throws IllegalArgumentException if <code>array</code> is not an int,
+    *         long, float, or double array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #set(Object, int, Object)
+    */
+   public static void setInt(Object array, int index, int value)
+   {
+     if (array instanceof int[])
+       ((int[]) array)[index] = value;
+     else
+       setLong(array, index, value);
+   }
+ 
+   /**
+    * Sets an element of a long array.
+    *
+    * @param array the array to set a value of
+    * @param index the array index to set the value to
+    * @param value the value to set
+    * @throws IllegalArgumentException if <code>array</code> is not a long,
+    *         float, or double array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #set(Object, int, Object)
+    */
+   public static void setLong(Object array, int index, long value)
+   {
+     if (array instanceof long[])
+       ((long[]) array)[index] = value;
+     else
+       setFloat(array, index, value);
+   }
+ 
+   /**
+    * Sets an element of a float array.
+    *
+    * @param array the array to set a value of
+    * @param index the array index to set the value to
+    * @param value the value to set
+    * @throws IllegalArgumentException if <code>array</code> is not a float
+    *         or double array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #set(Object, int, Object)
+    */
+   public static void setFloat(Object array, int index, float value)
+   {
+     if (array instanceof float[])
+       ((float[]) array)[index] = value;
+     else
+       setDouble(array, index, value);
+   }
+ 
+   /**
+    * Sets an element of a double array.
+    *
+    * @param array the array to set a value of
+    * @param index the array index to set the value to
+    * @param value the value to set
+    * @throws IllegalArgumentException if <code>array</code> is not a double
+    *         array
+    * @throws NullPointerException if <code>array</code> is null
+    * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
+    *         bounds
+    * @see #set(Object, int, Object)
+    */
+   public static void setDouble(Object array, int index, double value)
+   {
+     if (array instanceof double[])
+       ((double[]) array)[index] = value;
+     else if (array == null)
+       throw new NullPointerException();
+     else
+       throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Dynamically and recursively create a multi-dimensioned array of objects.
+    *
+    * @param type guaranteed to be a valid object type
+    * @param dimensions the dimensions of the array
+    * @param index index of the current dimension to build
+    * @return the new multi-dimensioned array
+    * @throws NegativeArraySizeException if any entry of dimensions is negative
+    * @throws OutOfMemoryError if memory allocation fails
+    */
+   // This would be faster if implemented natively, using the multianewarray
+   // bytecode instead of this recursive call
+   private static Object createMultiArray(Class type, int[] dimensions,
+                                          int index)
+   {
+     if (index == 0)
+       return newInstance(type, dimensions[0]);
+ 
+     Object toAdd = createMultiArray(type, dimensions, index - 1);
+     Class thisType = toAdd.getClass();
+     Object[] retval
+       = (Object[]) createObjectArray(thisType, dimensions[index]);
+     if (dimensions[index] > 0)
+       retval[0] = toAdd;
+     int i = dimensions[index];
+     while (--i > 0)
+       retval[i] = createMultiArray(type, dimensions, index - 1);
+     return retval;
+   }
+ 
+   /**
+    * Dynamically create an array of objects.
+    *
+    * @param type guaranteed to be a valid object type
+    * @param dim the length of the array
+    * @return the new array
+    * @throws NegativeArraySizeException if dim is negative
+    * @throws OutOfMemoryError if memory allocation fails
+    */
+   private static native Object createObjectArray(Class type, int dim);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/GenericArrayType.java gcc-4.1.0/libjava/classpath/java/lang/reflect/GenericArrayType.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/GenericArrayType.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/GenericArrayType.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* GenericArrayType.java - Represent an array type with a generic component
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * Represents the type of an array's components, which may be
+  * either a parameterized type or a type variable.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.5
+  */
+ public interface GenericArrayType 
+   extends Type
+ {
+ 
+   /**
+    * Returns the <code>Type</code> of the components within the array.
+    *
+    * @return a <code>Type</code> instance representing the type of
+    *         the array's components.
+    */
+   Type getGenericComponentType();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/GenericSignatureFormatError.java gcc-4.1.0/libjava/classpath/java/lang/reflect/GenericSignatureFormatError.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/GenericSignatureFormatError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/GenericSignatureFormatError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* GenericSignatureFormatError.java - Thrown when a signature is malformed.
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * Thrown on encountering a syntactically malformed signature in
+  * a reflective method.  During reflection, the generic type signature
+  * of a type, method or constructor may be interpreted by the virtual
+  * machine.  This error is thrown if this operation fails.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.5
+  */
+ public class GenericSignatureFormatError
+   extends ClassFormatError
+ {
+ 
+   /**
+    * Constructs a new <code>GenericSignatureFormatError</code>.
+    */
+   public GenericSignatureFormatError()
+   {
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/InvocationHandler.java gcc-4.1.0/libjava/classpath/java/lang/reflect/InvocationHandler.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/InvocationHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/InvocationHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,137 ----
+ /* java.lang.reflect.InvocationHandler - dynamically executes methods in
+    proxy instances
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * This interface defines an invocation handler.  Suppose you are using
+  * reflection, and found a method that requires that its parameter
+  * be an object of a given interface.  You want to call this method,
+  * but have no idea what classes implement that interface.  So, you can
+  * create a {@link Proxy} instance, a convenient way to dynamically
+  * generate a class that meets all the necessary properties of that
+  * interface.  But in order for the proxy instance to do any good, it
+  * needs to know what to do when interface methods are invoked!  So,
+  * this interface is basically a cool wrapper that provides runtime
+  * code generation needed by proxy instances.
+  *
+  * <p>While this interface was designed for use by Proxy, it will also
+  * work on any object in general.</p>
+  *
+  * <p>Hints for implementing this class:</p>
+  * 
+  * <ul>
+  * <li>Don't forget that Object.equals, Object.hashCode, and
+  *     Object.toString will call this handler.  In particular,
+  *     a naive call to proxy.equals, proxy.hashCode, or proxy.toString
+  *     will put you in an infinite loop.  And remember that string
+  *     concatenation also invokes toString.</li>
+  * <li>Obey the contract of the Method object you are handling, or
+  *     the proxy instance will be forced to throw a
+  *     {@link NullPointerException}, {@link ClassCastException},
+  *     or {@link UndeclaredThrowableException}.</li>
+  * <li>Be prepared to wrap/unwrap primitives as necessary.</li>
+  * <li>The Method object may be owned by a different interface than
+  *     what was actually used as the qualifying type of the method
+  *     invocation in the Java source code. This means that it might
+  *     not always be safe to throw an exception listed as belonging
+  *     to the method's throws clause.</li>
+  * </ul>
+  *
+  * <p><small>For a fun time, create an InvocationHandler that handles the
+  * methods of a proxy instance of the InvocationHandler interface!</small></p>
+  *
+  * @see Proxy
+  * @see UndeclaredThrowableException
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public interface InvocationHandler
+ {
+   /**
+    * When a method is invoked on a proxy instance, it is wrapped and
+    * this method is called instead, so that you may decide at runtime
+    * how the original method should behave.
+    *
+    * @param proxy the instance that the wrapped method should be
+    *        invoked on.  When this method is called by a Proxy object,
+    *        `proxy' will be an instance of {@link Proxy}, and oddly enough,
+    *        <code>Proxy.getInvocationHandler(proxy)</code> will return
+    *        <code>this</code>!
+    * @param method the reflected method to invoke on the proxy.
+    *        When this method is called by a Proxy object, 'method'
+    *        will be the reflection object owned by the declaring
+    *        class or interface, which may be a supertype of the
+    *        interfaces the proxy directly implements.
+    * @param args the arguments passed to the original method, or
+    *        <code>null</code> if the method takes no arguments.
+    *        (But also be prepared to handle a 0-length array).
+    *        Arguments of primitive type, such as <code>boolean</code>
+    *        or <code>int</code>, are wrapped in the appropriate
+    *        class such as {@link Boolean} or {@link Integer}.
+    * @return whatever is necessary to return from the wrapped method.
+    *         If the wrapped method is <code>void</code>, the proxy
+    *         instance will ignore it.  If the wrapped method returns
+    *         a primitive, this must be the correct wrapper type whose value
+    *         is exactly assignable to the appropriate type (no widening
+    *         will be performed); a null object in this case causes a
+    *         {@link NullPointerException}.  In all remaining cases, if
+    *         the returned object is not assignment compatible to the
+    *         declared type of the original method, the proxy instance
+    *         will generate a {@link ClassCastException}.
+    * @throws Throwable this interface is listed as throwing anything,
+    *         but the implementation should only throw unchecked
+    *         exceptions and exceptions listed in the throws clause of
+    *         all methods being overridden by the proxy instance.  If
+    *         something is thrown that is not compatible with the throws
+    *         clause of all overridden methods, the proxy instance will
+    *         wrap the exception in an UndeclaredThrowableException.
+    *         Note that an exception listed in the throws clause of the
+    *         `method' parameter might not be declared in additional
+    *         interfaces also implemented by the proxy object.
+    *
+    * @see Proxy
+    * @see UndeclaredThrowableException
+    */
+   Object invoke(Object proxy, Method method, Object[] args)
+     throws Throwable;
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/InvocationTargetException.java gcc-4.1.0/libjava/classpath/java/lang/reflect/InvocationTargetException.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/InvocationTargetException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/InvocationTargetException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,123 ----
+ /* InvocationTargetException.java -- Wrapper exception for reflection
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * InvocationTargetException is sort of a way to "wrap" whatever exception
+  * comes up when a method or constructor is called via Reflection. As of
+  * JDK 1.4, it was retrofitted to match the exception chaining of all other
+  * exceptions, but <code>getTargetException()</code> still works.
+  *
+  * @author John Keiser
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Method#invoke(Object,Object[])
+  * @see Constructor#newInstance(Object[])
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class InvocationTargetException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 4085088731926701167L;
+ 
+   /**
+    * The chained exception. This field is only around for serial compatibility.
+    *
+    * @serial the chained exception
+    */
+   private final Throwable target;
+ 
+   /**
+    * Construct an exception with null as the cause. The cause is initialized
+    * to null.
+    */
+   protected InvocationTargetException()
+   {
+     this(null, null);
+   }
+ 
+   /**
+    * Create an <code>InvocationTargetException</code> using another
+    * exception.
+    *
+    * @param targetException the exception to wrap
+    */
+   public InvocationTargetException(Throwable targetException)
+   {
+     this(targetException, null);
+   }
+ 
+   /**
+    * Create an <code>InvocationTargetException</code> using another
+    * exception and an error message.
+    *
+    * @param targetException the exception to wrap
+    * @param err an extra reason for the exception-throwing
+    */
+   public InvocationTargetException(Throwable targetException, String err)
+   {
+     super(err, targetException);
+     target = targetException;
+   }
+ 
+   /**
+    * Get the wrapped (targeted) exception.
+    *
+    * @return the targeted exception
+    * @see #getCause()
+    */
+   public Throwable getTargetException()
+   {
+     return target;
+   }
+ 
+   /**
+    * Returns the cause of this exception (which may be null).
+    *
+    * @return the cause
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return target;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/Member.java gcc-4.1.0/libjava/classpath/java/lang/reflect/Member.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/Member.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/Member.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,100 ----
+ /* java.lang.reflect.Member - common query methods in reflection
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * Member is an interface that represents any member of a class (field or
+  * method) or a constructor. You can get information about the declaring
+  * class, name or modifiers of the member with this interface.
+  *
+  * @author John Keiser
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Class
+  * @see Field
+  * @see Method
+  * @see Constructor
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface Member
+ {
+   /**
+    * Represents all members, whether public, private, protected or
+    * package-protected, but only which are declared in this class.
+    * Used in SecurityManager.checkMemberAccess() to determine the
+    * type of members to access.
+    * @see SecurityManager#checkMemberAccess(Class, int)
+    */
+   int DECLARED = 1;
+ 
+   /**
+    * Represents public members only, but includes all inherited members.
+    *  Used in SecurityManager.checkMemberAccess() to determine the type of
+    * members to access.
+    * @see SecurityManager#checkMemberAccess(Class, int)
+    */
+   int PUBLIC = 0;
+ 
+   /**
+    * Gets the class that declared this member. This is not the class where
+    * this method was called, or even the class where this Member object
+    * came to life, but the class that declares the member this represents.
+    *
+    * @return the class that declared this member
+    */
+   Class getDeclaringClass();
+ 
+   /**
+    * Gets the simple name of this member. This will be a valid Java
+    * identifier, with no qualification.
+    *
+    * @return the name of this member
+    */
+   String getName();
+ 
+   /**
+    * Gets the modifiers this member uses.  Use the <code>Modifier</code>
+    * class to interpret the values.
+    *
+    * @return an integer representing the modifiers to this Member
+    * @see Modifier
+    */
+   int getModifiers();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/Modifier.java gcc-4.1.0/libjava/classpath/java/lang/reflect/Modifier.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/Modifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/Modifier.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,332 ----
+ /* java.lang.reflect.Modifier
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * Modifier is a helper class with static methods to determine whether an
+  * int returned from getModifiers() represents static, public, protected,
+  * native, final, etc... and provides an additional method to print
+  * out all of the modifiers in an int in order.
+  * <p>
+  * The methods in this class use the bitmask values in the VM spec to
+  * determine the modifiers of an int. This means that a VM must return a
+  * standard mask, conformant with the VM spec.  I don't know if this is how
+  * Sun does it, but I'm willing to bet money that it is.
+  *
+  * @author John Keiser
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Member#getModifiers()
+  * @see Method#getModifiers()
+  * @see Field#getModifiers()
+  * @see Constructor#getModifiers()
+  * @see Class#getModifiers()
+  * @since 1.1
+  */
+ public class Modifier
+ {
+   /** <STRONG>This constructor really shouldn't be here ... there are no
+    * instance methods or variables of this class, so instantiation is
+    * worthless.  However, this function is in the 1.1 spec, so it is added
+    * for completeness.</STRONG>
+    */
+   public Modifier()
+   {
+   }
+ 
+   /**
+    * Public: accessible from any other class.
+    */
+   public static final int PUBLIC = 0x0001;
+ 
+   /**
+    * Private: accessible only from the same enclosing class.
+    */
+   public static final int PRIVATE = 0x0002;
+ 
+   /**
+    * Protected: accessible only to subclasses, or within the package.
+    */
+   public static final int PROTECTED = 0x0004;
+ 
+   /**
+    * Static:<br><ul>
+    * <li>Class: no enclosing instance for nested class.</li>
+    * <li>Field or Method: can be accessed or invoked without an
+    *     instance of the declaring class.</li>
+    * </ul>
+    */
+   public static final int STATIC = 0x0008;
+ 
+   /**
+    * Final:<br><ul>
+    * <li>Class: no subclasses allowed.</li>
+    * <li>Field: cannot be changed.</li>
+    * <li>Method: cannot be overriden.</li>
+    * </ul>
+    */
+   public static final int FINAL = 0x0010;
+ 
+   /**
+    * Synchronized: Method: lock the class while calling this method.
+    */
+   public static final int SYNCHRONIZED = 0x0020;
+ 
+   /**
+    * Volatile: Field: cannot be cached.
+    */
+   public static final int VOLATILE = 0x0040;
+ 
+   /**
+    * Transient: Field: not serialized or deserialized.
+    */
+   public static final int TRANSIENT = 0x0080;
+ 
+   /**
+    * Native: Method: use JNI to call this method.
+    */
+   public static final int NATIVE = 0x0100;
+ 
+   /**
+    * Interface: Class: is an interface.
+    */
+   public static final int INTERFACE = 0x0200;
+ 
+   /**
+    * Abstract:<br><ul>
+    * <li>Class: may not be instantiated.</li>
+    * <li>Method: may not be called.</li>
+    * </ul>
+    */
+   public static final int ABSTRACT = 0x0400;
+ 
+   /**
+    * Strictfp: Method: expressions are FP-strict.<p>
+    * Also used as a modifier for classes, to mean that all initializers
+    * and constructors are FP-strict, but does not show up in
+    * Class.getModifiers.
+    */
+   public static final int STRICT = 0x0800;
+ 
+ 
+   /**
+    * Super - treat invokespecial as polymorphic so that super.foo() works
+    * according to the JLS. This is a reuse of the synchronized constant
+    * to patch a hole in JDK 1.0. *shudder*.
+    */
+   static final int SUPER = 0x0020;
+ 
+   /**
+    * All the flags, only used by code in this package.
+    */
+   static final int ALL_FLAGS = 0xfff;
+ 
+   /**
+    * Check whether the given modifier is abstract.
+    * @param mod the modifier.
+    * @return <code>true</code> if abstract, <code>false</code> otherwise.
+    */
+   public static boolean isAbstract(int mod)
+   {
+     return (mod & ABSTRACT) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is final.
+    * @param mod the modifier.
+    * @return <code>true</code> if final, <code>false</code> otherwise.
+    */
+   public static boolean isFinal(int mod)
+   {
+     return (mod & FINAL) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is an interface.
+    * @param mod the modifier.
+    * @return <code>true</code> if an interface, <code>false</code> otherwise.
+    */
+   public static boolean isInterface(int mod)
+   {
+     return (mod & INTERFACE) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is native.
+    * @param mod the modifier.
+    * @return <code>true</code> if native, <code>false</code> otherwise.
+    */
+   public static boolean isNative(int mod)
+   {
+     return (mod & NATIVE) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is private.
+    * @param mod the modifier.
+    * @return <code>true</code> if private, <code>false</code> otherwise.
+    */
+   public static boolean isPrivate(int mod)
+   {
+     return (mod & PRIVATE) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is protected.
+    * @param mod the modifier.
+    * @return <code>true</code> if protected, <code>false</code> otherwise.
+    */
+   public static boolean isProtected(int mod)
+   {
+     return (mod & PROTECTED) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is public.
+    * @param mod the modifier.
+    * @return <code>true</code> if public, <code>false</code> otherwise.
+    */
+   public static boolean isPublic(int mod)
+   {
+     return (mod & PUBLIC) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is static.
+    * @param mod the modifier.
+    * @return <code>true</code> if static, <code>false</code> otherwise.
+    */
+   public static boolean isStatic(int mod)
+   {
+     return (mod & STATIC) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is strictfp.
+    * @param mod the modifier.
+    * @return <code>true</code> if strictfp, <code>false</code> otherwise.
+    */
+   public static boolean isStrict(int mod)
+   {
+     return (mod & STRICT) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is synchronized.
+    * @param mod the modifier.
+    * @return <code>true</code> if synchronized, <code>false</code> otherwise.
+    */
+   public static boolean isSynchronized(int mod)
+   {
+     return (mod & SYNCHRONIZED) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is transient.
+    * @param mod the modifier.
+    * @return <code>true</code> if transient, <code>false</code> otherwise.
+    */
+   public static boolean isTransient(int mod)
+   {
+     return (mod & TRANSIENT) != 0;
+   }
+ 
+   /**
+    * Check whether the given modifier is volatile.
+    * @param mod the modifier.
+    * @return <code>true</code> if volatile, <code>false</code> otherwise.
+    */
+   public static boolean isVolatile(int mod)
+   {
+     return (mod & VOLATILE) != 0;
+   }
+ 
+   /**
+    * Get a string representation of all the modifiers represented by the
+    * given int. The keywords are printed in this order:
+    * <code>&lt;public|protected|private&gt; abstract static final transient
+    * volatile synchronized native strictfp interface</code>.
+    *
+    * @param mod the modifier.
+    * @return the String representing the modifiers.
+    */
+   public static String toString(int mod)
+   {
+     return toString(mod, new StringBuffer()).toString();
+   }
+ 
+   /**
+    * Package helper method that can take a StringBuffer.
+    * @param mod the modifier
+    * @param r the StringBuffer to which the String representation is appended
+    * @return r, with information appended
+    */
+   static StringBuffer toString(int mod, StringBuffer r)
+   {
+     if (isPublic(mod))
+       r.append("public ");
+     if (isProtected(mod))
+       r.append("protected ");
+     if (isPrivate(mod))
+       r.append("private ");
+     if (isAbstract(mod))
+       r.append("abstract ");
+     if (isStatic(mod))
+       r.append("static ");
+     if (isFinal(mod))
+       r.append("final ");
+     if (isTransient(mod))
+       r.append("transient ");
+     if (isVolatile(mod))
+       r.append("volatile ");
+     if (isSynchronized(mod))
+       r.append("synchronized ");
+     if (isNative(mod))
+       r.append("native ");
+     if (isStrict(mod))
+       r.append("strictfp ");
+     if (isInterface(mod))
+       r.append("interface ");
+     
+     // Trim trailing space.
+     if ((mod & ALL_FLAGS) != 0)
+       r.setLength(r.length() - 1);
+     return r;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/ParameterizedType.java gcc-4.1.0/libjava/classpath/java/lang/reflect/ParameterizedType.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/ParameterizedType.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/ParameterizedType.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,122 ----
+ /* ParameterizedType.java -- Represents parameterized types e.g. List<String>
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * <p>
+  * Represents a type which is parameterized over one or more other
+  * types.  For example, <code>List&lt;Integer&gt;</code> is a parameterized
+  * type, with <code>List</code> parameterized over the type
+  * <code>Integer</code>.
+  * </p>
+  * <p>
+  * Instances of this classes are created as needed, during reflection.
+  * On creating a parameterized type, <code>p</code>, the
+  * <code>GenericTypeDeclaration</code> corresponding to <code>p</code>
+  * is created and resolved.  Each type argument of <code>p</code>
+  * is then created recursively; details of this process are availble
+  * in the documentation of <code>TypeVariable</code>.  This creation
+  * process only happens once; repetition has no effect.
+  * </p>
+  * <p>
+  * Implementors of this interface must implement an appropriate
+  * <code>equals()</code> method.  This method should equate any
+  * two instances of the implementing class that have the same
+  * <code>GenericTypeDeclaration</code> and <code>Type</code>
+  * parameters.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @see GenericTypeDeclaration
+  * @see TypeVariable
+  * @since 1.5
+  */
+ public interface ParameterizedType
+   extends Type
+ {
+ 
+   /**
+    * <p>
+    * Returns an array of <code>Type</code> objects, which gives
+    * the parameters of this type.
+    * </p>
+    * <p>
+    * <strong>Note</code>: the returned array may be empty.  This
+    * occurs if the supposed <code>ParameterizedType</code> is simply
+    * a normal type wrapped inside a parameterized type.
+    * </p>
+    *
+    * @return an array of <code>Type</code>s, representing the arguments
+    *         of this type.
+    * @throws TypeNotPresentException if any of the types referred to by
+    *         the parameters of this type do not actually exist.
+    * @throws MalformedParameterizedTypeException if any of the types
+    *         refer to a type which can not be instantiated.
+    */
+   Type[] getActualTypeArguments();
+ 
+   /**
+    * Returns the type of which this type is a member.  For example,
+    * in <code>Top&lt;String&gt;.Bottom&lt;Integer&gt;</code>,
+    * <code>Bottom&lt;Integer&gt;</code> is a member of
+    * <code>Top&lt;String&gt;</code>, and so the latter is returned
+    * by this method.  Calling this method on top-level types (such as
+    * <code>Top&lt;String&gt;</code>) returns null.
+    *
+    * @return the type which owns this type.
+    * @throws TypeNotPresentException if the owner type referred to by
+    *         this type do not actually exist.
+    * @throws MalformedParameterizedTypeException if the owner type
+    *         referred to by this type can not be instantiated.
+    */
+   Type getOwnerType();
+ 
+   /**
+    * Returns a version of this type without parameters, which corresponds
+    * to the class or interface which declared the type.  For example,
+    * the raw type corresponding to <code>List&lt;Double&gt;</code>
+    * is <code>List</code>, which was declared by the <code>List</code>
+    * class.
+    *
+    * @return the raw variant of this type (i.e. the type without
+    *         parameters).
+    */
+   Type getRawType();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/Proxy.java gcc-4.1.0/libjava/classpath/java/lang/reflect/Proxy.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/Proxy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/Proxy.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1501 ----
+ /* Proxy.java -- build a proxy class that implements reflected interfaces
+    Copyright (C) 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ import gnu.java.lang.reflect.TypeSignature;
+ 
+ import java.io.Serializable;
+ import java.security.ProtectionDomain;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ /**
+  * This class allows you to dynamically create an instance of any (or
+  * even multiple) interfaces by reflection, and decide at runtime
+  * how that instance will behave by giving it an appropriate
+  * {@link InvocationHandler}.  Proxy classes serialize specially, so
+  * that the proxy object can be reused between VMs, without requiring
+  * a persistent copy of the generated class code.
+  *
+  * <h3>Creation</h3>
+  * To create a proxy for some interface Foo:
+  *
+  * <pre>
+  *   InvocationHandler handler = new MyInvocationHandler(...);
+  *   Class proxyClass = Proxy.getProxyClass(
+  *       Foo.class.getClassLoader(), new Class[] { Foo.class });
+  *   Foo f = (Foo) proxyClass
+  *       .getConstructor(new Class[] { InvocationHandler.class })
+  *       .newInstance(new Object[] { handler });
+  * </pre>
+  * or more simply:
+  * <pre>
+  *   Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
+  *                                        new Class[] { Foo.class },
+  *                                        handler);
+  * </pre>
+  *
+  * <h3>Dynamic Proxy Classes</h3>
+  * A dynamic proxy class is created at runtime, and has the following
+  * properties:
+  * <ul>
+  *  <li>The class is <code>public</code> and <code>final</code>,
+  *      and is neither <code>abstract</code> nor an inner class.</li>
+  *  <li>The class has no canonical name (there is no formula you can use
+  *      to determine or generate its name), but begins with the
+  *      sequence "$Proxy".  Abuse this knowledge at your own peril.
+  *      (For now, '$' in user identifiers is legal, but it may not
+  *      be that way forever. You weren't using '$' in your
+  *      identifiers, were you?)</li>
+  *  <li>The class extends Proxy, and explicitly implements all the
+  *      interfaces specified at creation, in order (this is important
+  *      for determining how method invocation is resolved).  Note that
+  *      a proxy class implements {@link Serializable}, at least
+  *      implicitly, since Proxy does, but true serial behavior
+  *      depends on using a serializable invocation handler as well.</li>
+  *  <li>If at least one interface is non-public, the proxy class
+  *      will be in the same package.  Otherwise, the package is
+  *      unspecified.  This will work even if the package is sealed
+  *      from user-generated classes, because Proxy classes are
+  *      generated by a trusted source.  Meanwhile, the proxy class
+  *      belongs to the classloader you designated.</li>
+  *  <li>Reflection works as expected: {@link Class#getInterfaces()} and
+  *      {@link Class#getMethods()} work as they do on normal classes.</li>
+  *  <li>The method {@link #isProxyClass(Class)} will distinguish between
+  *      true proxy classes and user extensions of this class.  It only
+  *      returns true for classes created by {@link #getProxyClass}.</li>
+  *  <li>The {@link ProtectionDomain} of a proxy class is the same as for
+  *      bootstrap classes, such as Object or Proxy, since it is created by
+  *      a trusted source.  This protection domain will typically be granted
+  *      {@link java.security.AllPermission}. But this is not a security
+  *      risk, since there are adequate permissions on reflection, which is
+  *      the only way to create an instance of the proxy class.</li>
+  *  <li>The proxy class contains a single constructor, which takes as
+  *      its only argument an {@link InvocationHandler}.  The method
+  *      {@link #newProxyInstance(ClassLoader, Class[], InvocationHandler)}
+  *      is shorthand to do the necessary reflection.</li>
+  * </ul>
+  *
+  * <h3>Proxy Instances</h3>
+  * A proxy instance is an instance of a proxy class.  It has the
+  * following properties, many of which follow from the properties of a
+  * proxy class listed above:
+  * <ul>
+  *  <li>For a proxy class with Foo listed as one of its interfaces, the
+  *      expression <code>proxy instanceof Foo</code> will return true,
+  *      and the expression <code>(Foo) proxy</code> will succeed without
+  *      a {@link ClassCastException}.</li>
+  *  <li>Each proxy instance has an invocation handler, which can be
+  *      accessed by {@link #getInvocationHandler(Object)}.  Any call
+  *      to an interface method, including {@link Object#hashCode()},
+  *      {@link Object#equals(Object)}, or {@link Object#toString()},
+  *      but excluding the public final methods of Object, will be
+  *      encoded and passed to the {@link InvocationHandler#invoke}
+  *      method of this handler.</li>
+  * </ul>
+  *
+  * <h3>Inheritance Issues</h3>
+  * A proxy class may inherit a method from more than one interface.
+  * The order in which interfaces are listed matters, because it determines
+  * which reflected {@link Method} object will be passed to the invocation
+  * handler.  This means that the dynamically generated class cannot
+  * determine through which interface a method is being invoked.<p>
+  *
+  * In short, if a method is declared in Object (namely, hashCode,
+  * equals, or toString), then Object will be used; otherwise, the
+  * leftmost interface that inherits or declares a method will be used,
+  * even if it has a more permissive throws clause than what the proxy
+  * class is allowed. Thus, in the invocation handler, it is not always
+  * safe to assume that every class listed in the throws clause of the
+  * passed Method object can safely be thrown; fortunately, the Proxy
+  * instance is robust enough to wrap all illegal checked exceptions in
+  * {@link UndeclaredThrowableException}.
+  *
+  * @see InvocationHandler
+  * @see UndeclaredThrowableException
+  * @see Class
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.3
+  * @status updated to 1.4, except for the use of ProtectionDomain
+  */
+ public class Proxy implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.3+.
+    */
+   private static final long serialVersionUID = -2222568056686623797L;
+ 
+   /**
+    * Map of ProxyType to proxy class.
+    *
+    * @XXX This prevents proxy classes from being garbage collected.
+    * java.util.WeakHashSet is not appropriate, because that collects the
+    * keys, but we are interested in collecting the elements.
+    */
+   private static final Map proxyClasses = new HashMap();
+ 
+   /**
+    * The invocation handler for this proxy instance.  For Proxy, this
+    * field is unused, but it appears here in order to be serialized in all
+    * proxy classes.
+    *
+    * <em>NOTE</em>: This implementation is more secure for proxy classes
+    * than what Sun specifies. Sun does not require h to be immutable, but
+    * this means you could change h after the fact by reflection.  However,
+    * by making h immutable, we may break non-proxy classes which extend
+    * Proxy.
+    * @serial invocation handler associated with this proxy instance
+    */
+   protected InvocationHandler h;
+ 
+   /**
+    * Constructs a new Proxy from a subclass (usually a proxy class),
+    * with the specified invocation handler.
+    *
+    * <em>NOTE</em>: This throws a NullPointerException if you attempt
+    * to create a proxy instance with a null handler using reflection.
+    * This behavior is not yet specified by Sun; see Sun Bug 4487672.
+    *
+    * @param handler the invocation handler, may be null if the subclass
+    *        is not a proxy class
+    * @throws NullPointerException if handler is null and this is a proxy
+    *         instance
+    */
+   protected Proxy(InvocationHandler handler)
+   {
+     if (handler == null && isProxyClass(getClass()))
+       throw new NullPointerException("invalid handler");
+     h = handler;
+   }
+ 
+   /**
+    * Returns the proxy {@link Class} for the given ClassLoader and array
+    * of interfaces, dynamically generating it if necessary.
+    *
+    * <p>There are several restrictions on this method, the violation of
+    * which will result in an IllegalArgumentException or
+    * NullPointerException:</p>
+    * 
+    * <ul>
+    * <li>All objects in `interfaces' must represent distinct interfaces.
+    *     Classes, primitive types, null, and duplicates are forbidden.</li>
+    * <li>The interfaces must be visible in the specified ClassLoader.
+    *     In other words, for each interface i:
+    *     <code>Class.forName(i.getName(), false, loader) == i</code>
+    *     must be true.</li>
+    * <li>All non-public interfaces (if any) must reside in the same
+    *     package, or the proxy class would be non-instantiable.  If
+    *     there are no non-public interfaces, the package of the proxy
+    *     class is unspecified.</li>
+    * <li>All interfaces must be compatible - if two declare a method
+    *     with the same name and parameters, the return type must be
+    *     the same and the throws clause of the proxy class will be
+    *     the maximal subset of subclasses of the throws clauses for
+    *     each method that is overridden.</li>
+    * <li>VM constraints limit the number of interfaces a proxy class
+    *     may directly implement (however, the indirect inheritance
+    *     of {@link Serializable} does not count against this limit).
+    *     Even though most VMs can theoretically have 65535
+    *     superinterfaces for a class, the actual limit is smaller
+    *     because a class's constant pool is limited to 65535 entries,
+    *     and not all entries can be interfaces.</li>
+    * </ul>
+    *
+    * <p>Note that different orders of interfaces produce distinct classes.</p>
+    *
+    * @param loader the class loader to define the proxy class in; null
+    *        implies the bootstrap class loader
+    * @param interfaces the array of interfaces the proxy class implements,
+    *        may be empty, but not null
+    * @return the Class object of the proxy class
+    * @throws IllegalArgumentException if the constraints above were
+    *         violated, except for problems with null
+    * @throws NullPointerException if `interfaces' is null or contains
+    *         a null entry
+    */
+   // synchronized so that we aren't trying to build the same class
+   // simultaneously in two threads
+   public static synchronized Class getProxyClass(ClassLoader loader,
+                                                  Class[] interfaces)
+   {
+     interfaces = (Class[]) interfaces.clone();
+     ProxyType pt = new ProxyType(loader, interfaces);
+     Class clazz = (Class) proxyClasses.get(pt);
+     if (clazz == null)
+       {
+         if (VMProxy.HAVE_NATIVE_GET_PROXY_CLASS)
+           clazz = VMProxy.getProxyClass(loader, interfaces);
+         else
+           {
+             ProxyData data = (VMProxy.HAVE_NATIVE_GET_PROXY_DATA
+                               ? VMProxy.getProxyData(loader, interfaces)
+                               : ProxyData.getProxyData(pt));
+ 
+             clazz = (VMProxy.HAVE_NATIVE_GENERATE_PROXY_CLASS
+ 		     ? VMProxy.generateProxyClass(loader, data)
+                      : new ClassFactory(data).generate(loader));
+           }
+ 
+         Object check = proxyClasses.put(pt, clazz);
+         // assert check == null && clazz != null;
+         if (check != null || clazz == null)
+           throw new InternalError(/*"Fatal flaw in getProxyClass"*/);
+       }
+     return clazz;
+   }
+ 
+   /**
+    * Combines several methods into one.  This is equivalent to:
+    * <pre>
+    *   Proxy.getProxyClass(loader, interfaces)
+    *       .getConstructor(new Class[] {InvocationHandler.class})
+    *       .newInstance(new Object[] {handler});
+    * </pre>
+    * except that it will not fail with the normal problems caused
+    * by reflection.  It can still fail for the same reasons documented
+    * in getProxyClass, or if handler is null.
+    *
+    * @param loader the class loader to define the proxy class in; null
+    *        implies the bootstrap class loader
+    * @param interfaces the array of interfaces the proxy class implements,
+    *        may be empty, but not null
+    * @param handler the invocation handler, may not be null
+    * @return a proxy instance implementing the specified interfaces
+    * @throws IllegalArgumentException if the constraints for getProxyClass
+    *         were violated, except for problems with null
+    * @throws NullPointerException if `interfaces' is null or contains
+    *         a null entry, or if handler is null
+    * @see #getProxyClass(ClassLoader, Class[])
+    * @see Class#getConstructor(Class[])
+    * @see Constructor#newInstance(Object[])
+    */
+   public static Object newProxyInstance(ClassLoader loader,
+                                         Class[] interfaces,
+                                         InvocationHandler handler)
+   {
+     try
+       {
+         // getProxyClass() and Proxy() throw the necessary exceptions
+         return getProxyClass(loader, interfaces)
+           .getConstructor(new Class[] {InvocationHandler.class})
+           .newInstance(new Object[] {handler});
+       }
+     catch (RuntimeException e)
+       {
+         // Let IllegalArgumentException, NullPointerException escape.
+         // assert e instanceof IllegalArgumentException
+         //   || e instanceof NullPointerException;
+         throw e;
+       }
+     catch (InvocationTargetException e)
+       {
+         // Let wrapped NullPointerException escape.
+         // assert e.getTargetException() instanceof NullPointerException
+         throw (NullPointerException) e.getCause();
+       }
+     catch (Exception e)
+       {
+         // Covers InstantiationException, IllegalAccessException,
+         // NoSuchMethodException, none of which should be generated
+         // if the proxy class was generated correctly.
+         // assert false;
+         throw (Error) new InternalError("Unexpected: " + e).initCause(e);
+       }
+   }
+ 
+   /**
+    * Returns true if and only if the Class object is a dynamically created
+    * proxy class (created by <code>getProxyClass</code> or by the
+    * syntactic sugar of <code>newProxyInstance</code>).
+    *
+    * <p>This check is secure (in other words, it is not simply
+    * <code>clazz.getSuperclass() == Proxy.class</code>), it will not
+    * be spoofed by non-proxy classes that extend Proxy.
+    *
+    * @param clazz the class to check, must not be null
+    * @return true if the class represents a proxy class
+    * @throws NullPointerException if clazz is null
+    */
+   // This is synchronized on the off chance that another thread is
+   // trying to add a class to the map at the same time we read it.
+   public static synchronized boolean isProxyClass(Class clazz)
+   {
+     if (! Proxy.class.isAssignableFrom(clazz))
+       return false;
+     // This is a linear search, even though we could do an O(1) search
+     // using new ProxyType(clazz.getClassLoader(), clazz.getInterfaces()).
+     return proxyClasses.containsValue(clazz);
+   }
+ 
+   /**
+    * Returns the invocation handler for the given proxy instance.<p>
+    *
+    * <em>NOTE</em>: We guarantee a non-null result if successful,
+    * but Sun allows the creation of a proxy instance with a null
+    * handler.  See the comments for {@link #Proxy(InvocationHandler)}.
+    *
+    * @param proxy the proxy instance, must not be null
+    * @return the invocation handler, guaranteed non-null.
+    * @throws IllegalArgumentException if
+    *         <code>Proxy.isProxyClass(proxy.getClass())</code> returns false.
+    * @throws NullPointerException if proxy is null
+    */
+   public static InvocationHandler getInvocationHandler(Object proxy)
+   {
+     if (! isProxyClass(proxy.getClass()))
+       throw new IllegalArgumentException("not a proxy instance");
+     return ((Proxy) proxy).h;
+   }
+ 
+   /**
+    * Helper class for mapping unique ClassLoader and interface combinations
+    * to proxy classes.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class ProxyType
+   {
+     /**
+      * Store the class loader (may be null)
+      */
+     final ClassLoader loader;
+ 
+     /**
+      * Store the interfaces (never null, all elements are interfaces)
+      */
+     final Class[] interfaces;
+ 
+     /**
+      * Construct the helper object.
+      *
+      * @param loader the class loader to define the proxy class in; null
+      *        implies the bootstrap class loader
+      * @param interfaces an array of interfaces
+      */
+     ProxyType(ClassLoader loader, Class[] interfaces)
+     {
+       this.loader = loader;
+       this.interfaces = interfaces;
+     }
+ 
+     /**
+      * Calculates the hash code.
+      *
+      * @return a combination of the classloader and interfaces hashcodes.
+      */
+     public int hashCode()
+     {
+       int hash = loader == null ? 0 : loader.hashCode();
+       for (int i = 0; i < interfaces.length; i++)
+         hash = hash * 31 + interfaces[i].hashCode();
+       return hash;
+     }
+ 
+     /**
+      * Calculates equality.
+      *
+      * @param other object to compare to
+      * @return true if it is a ProxyType with same data
+      */
+     public boolean equals(Object other)
+     {
+       ProxyType pt = (ProxyType) other;
+       if (loader != pt.loader || interfaces.length != pt.interfaces.length)
+         return false;
+       for (int i = 0; i < interfaces.length; i++)
+         if (interfaces[i] != pt.interfaces[i])
+           return false;
+       return true;
+     }
+   } // class ProxyType
+ 
+   /**
+    * Helper class which allows hashing of a method name and signature
+    * without worrying about return type, declaring class, or throws clause,
+    * and which reduces the maximally common throws clause between two methods
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class ProxySignature
+   {
+     /**
+      * The core signatures which all Proxy instances handle.
+      */
+     static final HashMap coreMethods = new HashMap();
+     static
+     {
+       try
+         {
+           ProxySignature sig
+             = new ProxySignature(Object.class
+                                  .getMethod("equals",
+                                             new Class[] {Object.class}));
+           coreMethods.put(sig, sig);
+           sig = new ProxySignature(Object.class.getMethod("hashCode", null));
+           coreMethods.put(sig, sig);
+           sig = new ProxySignature(Object.class.getMethod("toString", null));
+           coreMethods.put(sig, sig);
+         }
+       catch (Exception e)
+         {
+           // assert false;
+           throw (Error) new InternalError("Unexpected: " + e).initCause(e);
+         }
+     }
+ 
+     /**
+      * The underlying Method object, never null
+      */
+     final Method method;
+ 
+     /**
+      * The set of compatible thrown exceptions, may be empty
+      */
+     final Set exceptions = new HashSet();
+ 
+     /**
+      * Construct a signature
+      *
+      * @param method the Method this signature is based on, never null
+      */
+     ProxySignature(Method method)
+     {
+       this.method = method;
+       Class[] exc = method.getExceptionTypes();
+       int i = exc.length;
+       while (--i >= 0)
+         {
+           // discard unchecked exceptions
+           if (Error.class.isAssignableFrom(exc[i])
+               || RuntimeException.class.isAssignableFrom(exc[i]))
+             continue;
+           exceptions.add(exc[i]);
+         }
+     }
+ 
+     /**
+      * Given a method, make sure it's return type is identical
+      * to this, and adjust this signature's throws clause appropriately
+      *
+      * @param other the signature to merge in
+      * @throws IllegalArgumentException if the return types conflict
+      */
+     void checkCompatibility(ProxySignature other)
+     {
+       if (method.getReturnType() != other.method.getReturnType())
+         throw new IllegalArgumentException("incompatible return types: "
+                                            + method + ", " + other.method);
+ 
+       // if you can think of a more efficient way than this O(n^2) search,
+       // implement it!
+       int size1 = exceptions.size();
+       int size2 = other.exceptions.size();
+       boolean[] valid1 = new boolean[size1];
+       boolean[] valid2 = new boolean[size2];
+       Iterator itr = exceptions.iterator();
+       int pos = size1;
+       while (--pos >= 0)
+         {
+           Class c1 = (Class) itr.next();
+           Iterator itr2 = other.exceptions.iterator();
+           int pos2 = size2;
+           while (--pos2 >= 0)
+             {
+               Class c2 = (Class) itr2.next();
+               if (c2.isAssignableFrom(c1))
+                 valid1[pos] = true;
+               if (c1.isAssignableFrom(c2))
+                 valid2[pos2] = true;
+             }
+         }
+       pos = size1;
+       itr = exceptions.iterator();
+       while (--pos >= 0)
+         {
+           itr.next();
+           if (! valid1[pos])
+             itr.remove();
+         }
+       pos = size2;
+       itr = other.exceptions.iterator();
+       while (--pos >= 0)
+         {
+           itr.next();
+           if (! valid2[pos])
+             itr.remove();
+         }
+       exceptions.addAll(other.exceptions);
+     }
+ 
+     /**
+      * Calculates the hash code.
+      *
+      * @return a combination of name and parameter types
+      */
+     public int hashCode()
+     {
+       int hash = method.getName().hashCode();
+       Class[] types = method.getParameterTypes();
+       for (int i = 0; i < types.length; i++)
+         hash = hash * 31 + types[i].hashCode();
+       return hash;
+     }
+ 
+     /**
+      * Calculates equality.
+      *
+      * @param other object to compare to
+      * @return true if it is a ProxySignature with same data
+      */
+     public boolean equals(Object other)
+     {
+       ProxySignature ps = (ProxySignature) other;
+       Class[] types1 = method.getParameterTypes();
+       Class[] types2 = ps.method.getParameterTypes();
+       if (! method.getName().equals(ps.method.getName())
+           || types1.length != types2.length)
+         return false;
+       int i = types1.length;
+       while (--i >= 0)
+         if (types1[i] != types2[i])
+           return false;
+       return true;
+     }
+   } // class ProxySignature
+ 
+   /**
+    * A flat representation of all data needed to generate bytecode/instantiate
+    * a proxy class.  This is basically a struct.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   static final class ProxyData
+   {
+     /**
+      * The package this class is in <b>including the trailing dot</b>
+      * or an empty string for the unnamed (aka default) package.
+      */
+     String pack = "";
+ 
+     /**
+      * The interfaces this class implements.  Non-null, but possibly empty.
+      */
+     Class[] interfaces;
+ 
+     /**
+      * The Method objects this class must pass as the second argument to
+      * invoke (also useful for determining what methods this class has).
+      * Non-null, non-empty (includes at least Object.hashCode, Object.equals,
+      * and Object.toString).
+      */
+     Method[] methods;
+ 
+     /**
+      * The exceptions that do not need to be wrapped in
+      * UndeclaredThrowableException. exceptions[i] is the same as, or a
+      * subset of subclasses, of methods[i].getExceptionTypes(), depending on
+      * compatible throws clauses with multiple inheritance. It is unspecified
+      * if these lists include or exclude subclasses of Error and
+      * RuntimeException, but excluding them is harmless and generates a
+      * smaller class.
+      */
+     Class[][] exceptions;
+ 
+     /**
+      * For unique id's
+      */
+     private static int count;
+ 
+     /**
+      * The id of this proxy class
+      */
+     final int id = count++;
+ 
+     /**
+      * Construct a ProxyData with uninitialized data members.
+      */
+     ProxyData()
+     {
+     }
+ 
+     /**
+      * Return the name of a package (including the trailing dot)
+      * given the name of a class.
+      * Returns an empty string if no package.  We use this in preference to
+      * using Class.getPackage() to avoid problems with ClassLoaders
+      * that don't set the package.
+      */
+     private static String getPackage(Class k)
+     {
+       String name = k.getName();
+       int idx = name.lastIndexOf('.');
+       return name.substring(0, idx + 1);
+     }
+ 
+     /**
+      * Verifies that the arguments are legal, and sets up remaining data
+      * This should only be called when a class must be generated, as
+      * it is expensive.
+      *
+      * @param pt the ProxyType to convert to ProxyData
+      * @return the flattened, verified ProxyData structure for use in
+      *         class generation
+      * @throws IllegalArgumentException if `interfaces' contains
+      *         non-interfaces or incompatible combinations, and verify is true
+      * @throws NullPointerException if interfaces is null or contains null
+      */
+     static ProxyData getProxyData(ProxyType pt)
+     {
+       Map method_set = (Map) ProxySignature.coreMethods.clone();
+       boolean in_package = false; // true if we encounter non-public interface
+ 
+       ProxyData data = new ProxyData();
+       data.interfaces = pt.interfaces;
+ 
+       // if interfaces is too large, we croak later on when the constant
+       // pool overflows
+       int i = data.interfaces.length;
+       while (--i >= 0)
+         {
+           Class inter = data.interfaces[i];
+           if (! inter.isInterface())
+             throw new IllegalArgumentException("not an interface: " + inter);
+           try
+             {
+               if (Class.forName(inter.getName(), false, pt.loader) != inter)
+                 throw new IllegalArgumentException("not accessible in "
+                                                    + "classloader: " + inter);
+             }
+           catch (ClassNotFoundException e)
+             {
+               throw new IllegalArgumentException("not accessible in "
+                                                  + "classloader: " + inter);
+             }
+           if (! Modifier.isPublic(inter.getModifiers()))
+             if (in_package)
+               {
+ 		String p = getPackage(inter);
+                 if (! data.pack.equals(p))
+                   throw new IllegalArgumentException("non-public interfaces "
+                                                      + "from different "
+                                                      + "packages");
+               }
+             else
+               {
+                 in_package = true;
+                 data.pack = getPackage(inter);
+               }
+           for (int j = i-1; j >= 0; j--)
+             if (data.interfaces[j] == inter)
+               throw new IllegalArgumentException("duplicate interface: "
+                                                  + inter);
+           Method[] methods = inter.getMethods();
+           int j = methods.length;
+           while (--j >= 0)
+             {
+               ProxySignature sig = new ProxySignature(methods[j]);
+               ProxySignature old = (ProxySignature) method_set.put(sig, sig);
+               if (old != null)
+                 sig.checkCompatibility(old);
+             }
+         }
+ 
+       i = method_set.size();
+       data.methods = new Method[i];
+       data.exceptions = new Class[i][];
+       Iterator itr = method_set.values().iterator();
+       while (--i >= 0)
+         {
+           ProxySignature sig = (ProxySignature) itr.next();
+           data.methods[i] = sig.method;
+           data.exceptions[i] = (Class[]) sig.exceptions
+             .toArray(new Class[sig.exceptions.size()]);
+         }
+       return data;
+     }
+   } // class ProxyData
+ 
+   /**
+    * Does all the work of building a class. By making this a nested class,
+    * this code is not loaded in memory if the VM has a native
+    * implementation instead.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class ClassFactory
+   {
+     /** Constants for assisting the compilation */
+     private static final byte FIELD = 1;
+     private static final byte METHOD = 2;
+     private static final byte INTERFACE = 3;
+     private static final String CTOR_SIG
+       = "(Ljava/lang/reflect/InvocationHandler;)V";
+     private static final String INVOKE_SIG = "(Ljava/lang/Object;"
+       + "Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;";
+ 
+     /** Bytecodes for insertion in the class definition byte[] */
+     private static final char ACONST_NULL = 1;
+     private static final char ICONST_0 = 3;
+     private static final char BIPUSH = 16;
+     private static final char SIPUSH = 17;
+     private static final char ILOAD = 21;
+     private static final char ILOAD_0 = 26;
+     private static final char ALOAD_0 = 42;
+     private static final char ALOAD_1 = 43;
+     private static final char AALOAD = 50;
+     private static final char AASTORE = 83;
+     private static final char DUP = 89;
+     private static final char DUP_X1 = 90;
+     private static final char SWAP = 95;
+     private static final char IRETURN = 172;
+     private static final char LRETURN = 173;
+     private static final char FRETURN = 174;
+     private static final char DRETURN = 175;
+     private static final char ARETURN = 176;
+     private static final char RETURN = 177;
+     private static final char GETSTATIC = 178;
+     private static final char GETFIELD = 180;
+     private static final char INVOKEVIRTUAL = 182;
+     private static final char INVOKESPECIAL = 183;
+     private static final char INVOKEINTERFACE = 185;
+     private static final char NEW = 187;
+     private static final char ANEWARRAY = 189;
+     private static final char ATHROW = 191;
+     private static final char CHECKCAST = 192;
+ 
+     // Implementation note: we use StringBuffers to hold the byte data, since
+     // they automatically grow.  However, we only use the low 8 bits of
+     // every char in the array, so we are using twice the necessary memory
+     // for the ease StringBuffer provides.
+ 
+     /** The constant pool. */
+     private final StringBuffer pool = new StringBuffer();
+     /** The rest of the class data. */
+     private final StringBuffer stream = new StringBuffer();
+ 
+     /** Map of strings to byte sequences, to minimize size of pool. */
+     private final Map poolEntries = new HashMap();
+ 
+     /** The VM name of this proxy class. */
+     private final String qualName;
+ 
+     /**
+      * The Method objects the proxy class refers to when calling the
+      * invocation handler.
+      */
+     private final Method[] methods;
+ 
+     /**
+      * Initializes the buffers with the bytecode contents for a proxy class.
+      *
+      * @param data the remainder of the class data
+      * @throws IllegalArgumentException if anything else goes wrong this
+      *         late in the game; as far as I can tell, this will only happen
+      *         if the constant pool overflows, which is possible even when
+      *         the user doesn't exceed the 65535 interface limit
+      */
+     ClassFactory(ProxyData data)
+     {
+       methods = data.methods;
+ 
+       // magic = 0xcafebabe
+       // minor_version = 0
+       // major_version = 46
+       // constant_pool_count: place-holder for now
+       pool.append("\u00ca\u00fe\u00ba\u00be\0\0\0\56\0\0");
+       // constant_pool[], filled in as we go
+ 
+       // access_flags
+       putU2(Modifier.SUPER | Modifier.FINAL | Modifier.PUBLIC);
+       // this_class
+       qualName = (data.pack + "$Proxy" + data.id);
+       putU2(classInfo(TypeSignature.getEncodingOfClass(qualName, false)));
+       // super_class
+       putU2(classInfo("java/lang/reflect/Proxy"));
+ 
+       // interfaces_count
+       putU2(data.interfaces.length);
+       // interfaces[]
+       for (int i = 0; i < data.interfaces.length; i++)
+         putU2(classInfo(data.interfaces[i]));
+ 
+       // Recall that Proxy classes serialize specially, so we do not need
+       // to worry about a <clinit> method for this field.  Instead, we
+       // just assign it by reflection after the class is successfully loaded.
+       // fields_count - private static Method[] m;
+       putU2(1);
+       // fields[]
+       // m.access_flags
+       putU2(Modifier.PRIVATE | Modifier.STATIC);
+       // m.name_index
+       putU2(utf8Info("m"));
+       // m.descriptor_index
+       putU2(utf8Info("[Ljava/lang/reflect/Method;"));
+       // m.attributes_count
+       putU2(0);
+       // m.attributes[]
+ 
+       // methods_count - # handler methods, plus <init>
+       putU2(methods.length + 1);
+       // methods[]
+       // <init>.access_flags
+       putU2(Modifier.PUBLIC);
+       // <init>.name_index
+       putU2(utf8Info("<init>"));
+       // <init>.descriptor_index
+       putU2(utf8Info(CTOR_SIG));
+       // <init>.attributes_count - only Code is needed
+       putU2(1);
+       // <init>.Code.attribute_name_index
+       putU2(utf8Info("Code"));
+       // <init>.Code.attribute_length = 18
+       // <init>.Code.info:
+       //   $Proxynn(InvocationHandler h) { super(h); }
+       // <init>.Code.max_stack = 2
+       // <init>.Code.max_locals = 2
+       // <init>.Code.code_length = 6
+       // <init>.Code.code[]
+       stream.append("\0\0\0\22\0\2\0\2\0\0\0\6" + ALOAD_0 + ALOAD_1
+                     + INVOKESPECIAL);
+       putU2(refInfo(METHOD, "java/lang/reflect/Proxy", "<init>", CTOR_SIG));
+       // <init>.Code.exception_table_length = 0
+       // <init>.Code.exception_table[]
+       // <init>.Code.attributes_count = 0
+       // <init>.Code.attributes[]
+       stream.append(RETURN + "\0\0\0\0");
+ 
+       for (int i = methods.length - 1; i >= 0; i--)
+         emitMethod(i, data.exceptions[i]);
+ 
+       // attributes_count
+       putU2(0);
+       // attributes[] - empty; omit SourceFile attribute
+       // XXX should we mark this with a Synthetic attribute?
+     }
+ 
+     /**
+      * Produce the bytecode for a single method.
+      *
+      * @param i the index of the method we are building
+      * @param e the exceptions possible for the method
+      */
+     private void emitMethod(int i, Class[] e)
+     {
+       // First, we precalculate the method length and other information.
+ 
+       Method m = methods[i];
+       Class[] paramtypes = m.getParameterTypes();
+       int wrap_overhead = 0; // max words taken by wrapped primitive
+       int param_count = 1; // 1 for this
+       int code_length = 16; // aload_0, getfield, aload_0, getstatic, const,
+       // aaload, const/aconst_null, invokeinterface
+       if (i > 5)
+         {
+           if (i > Byte.MAX_VALUE)
+             code_length += 2; // sipush
+           else
+             code_length++; // bipush
+         }
+       if (paramtypes.length > 0)
+         {
+           code_length += 3; // anewarray
+           if (paramtypes.length > Byte.MAX_VALUE)
+             code_length += 2; // sipush
+           else if (paramtypes.length > 5)
+             code_length++; // bipush
+           for (int j = 0; j < paramtypes.length; j++)
+             {
+               code_length += 4; // dup, const, load, store
+               Class type = paramtypes[j];
+               if (j > 5)
+                 {
+                   if (j > Byte.MAX_VALUE)
+                     code_length += 2; // sipush
+                   else
+                     code_length++; // bipush
+                 }
+               if (param_count >= 4)
+                 code_length++; // 2-byte load
+               param_count++;
+               if (type.isPrimitive())
+                 {
+                   code_length += 7; // new, dup, invokespecial
+                   if (type == long.class || type == double.class)
+                     {
+                       wrap_overhead = 3;
+                       param_count++;
+                     }
+                   else if (wrap_overhead < 2)
+                     wrap_overhead = 2;
+                 }
+             }
+         }
+       int end_pc = code_length;
+       Class ret_type = m.getReturnType();
+       if (ret_type == void.class)
+         code_length++; // return
+       else if (ret_type.isPrimitive())
+         code_length += 7; // cast, invokevirtual, return
+       else
+         code_length += 4; // cast, return
+       int exception_count = 0;
+       boolean throws_throwable = false;
+       for (int j = 0; j < e.length; j++)
+         if (e[j] == Throwable.class)
+           {
+             throws_throwable = true;
+             break;
+           }
+       if (! throws_throwable)
+         {
+           exception_count = e.length + 3; // Throwable, Error, RuntimeException
+           code_length += 9; // new, dup_x1, swap, invokespecial, athrow
+         }
+       int handler_pc = code_length - 1;
+       StringBuffer signature = new StringBuffer("(");
+       for (int j = 0; j < paramtypes.length; j++)
+         signature.append(TypeSignature.getEncodingOfClass(paramtypes[j]));
+       signature.append(")").append(TypeSignature.getEncodingOfClass(ret_type));
+ 
+       // Now we have enough information to emit the method.
+ 
+       // handler.access_flags
+       putU2(Modifier.PUBLIC | Modifier.FINAL);
+       // handler.name_index
+       putU2(utf8Info(m.getName()));
+       // handler.descriptor_index
+       putU2(utf8Info(signature.toString()));
+       // handler.attributes_count - Code is necessary, Exceptions possible
+       putU2(e.length > 0 ? 2 : 1);
+ 
+       // handler.Code.info:
+       //   type name(args) {
+       //     try {
+       //       return (type) h.invoke(this, methods[i], new Object[] {args});
+       //     } catch (<declared Exceptions> e) {
+       //       throw e;
+       //     } catch (Throwable t) {
+       //       throw new UndeclaredThrowableException(t);
+       //     }
+       //   }
+       // Special cases:
+       //  if arg_n is primitive, wrap it
+       //  if method throws Throwable, try-catch is not needed
+       //  if method returns void, return statement not needed
+       //  if method returns primitive, unwrap it
+       //  save space by sharing code for all the declared handlers
+ 
+       // handler.Code.attribute_name_index
+       putU2(utf8Info("Code"));
+       // handler.Code.attribute_length
+       putU4(12 + code_length + 8 * exception_count);
+       // handler.Code.max_stack
+       putU2(param_count == 1 ? 4 : 7 + wrap_overhead);
+       // handler.Code.max_locals
+       putU2(param_count);
+       // handler.Code.code_length
+       putU4(code_length);
+       // handler.Code.code[]
+       putU1(ALOAD_0);
+       putU1(GETFIELD);
+       putU2(refInfo(FIELD, "java/lang/reflect/Proxy", "h",
+                     "Ljava/lang/reflect/InvocationHandler;"));
+       putU1(ALOAD_0);
+       putU1(GETSTATIC);
+       putU2(refInfo(FIELD, TypeSignature.getEncodingOfClass(qualName, false),
+                     "m", "[Ljava/lang/reflect/Method;"));
+       putConst(i);
+       putU1(AALOAD);
+       if (paramtypes.length > 0)
+         {
+           putConst(paramtypes.length);
+           putU1(ANEWARRAY);
+           putU2(classInfo("java/lang/Object"));
+           param_count = 1;
+           for (int j = 0; j < paramtypes.length; j++, param_count++)
+             {
+               putU1(DUP);
+               putConst(j);
+               if (paramtypes[j].isPrimitive())
+                 {
+                   putU1(NEW);
+                   putU2(classInfo(wrapper(paramtypes[j])));
+                   putU1(DUP);
+                 }
+               putLoad(param_count, paramtypes[j]);
+               if (paramtypes[j].isPrimitive())
+                 {
+                   putU1(INVOKESPECIAL);
+                   putU2(refInfo(METHOD, wrapper(paramtypes[j]), "<init>",
+                                 '(' + (TypeSignature
+                                        .getEncodingOfClass(paramtypes[j])
+                                        + ")V")));
+                   if (paramtypes[j] == long.class
+                       || paramtypes[j] == double.class)
+                     param_count++;
+                 }
+               putU1(AASTORE);
+             }
+         }
+       else
+         putU1(ACONST_NULL);
+       putU1(INVOKEINTERFACE);
+       putU2(refInfo(INTERFACE, "java/lang/reflect/InvocationHandler",
+                     "invoke", INVOKE_SIG));
+       putU1(4); // InvocationHandler, this, Method, Object[]
+       putU1(0);
+       if (ret_type == void.class)
+         putU1(RETURN);
+       else if (ret_type.isPrimitive())
+         {
+           putU1(CHECKCAST);
+           putU2(classInfo(wrapper(ret_type)));
+           putU1(INVOKEVIRTUAL);
+           putU2(refInfo(METHOD, wrapper(ret_type),
+                         ret_type.getName() + "Value",
+                         "()" + TypeSignature.getEncodingOfClass(ret_type)));
+           if (ret_type == long.class)
+             putU1(LRETURN);
+           else if (ret_type == float.class)
+             putU1(FRETURN);
+           else if (ret_type == double.class)
+             putU1(DRETURN);
+           else
+             putU1(IRETURN);
+         }
+       else
+         {
+           putU1(CHECKCAST);
+           putU2(classInfo(ret_type));
+           putU1(ARETURN);
+         }
+       if (! throws_throwable)
+         {
+           putU1(NEW);
+           putU2(classInfo("java/lang/reflect/UndeclaredThrowableException"));
+           putU1(DUP_X1);
+           putU1(SWAP);
+           putU1(INVOKESPECIAL);
+           putU2(refInfo(METHOD,
+                         "java/lang/reflect/UndeclaredThrowableException",
+                         "<init>", "(Ljava/lang/Throwable;)V"));
+           putU1(ATHROW);
+         }
+ 
+       // handler.Code.exception_table_length
+       putU2(exception_count);
+       // handler.Code.exception_table[]
+       if (! throws_throwable)
+         {
+           // handler.Code.exception_table.start_pc
+           putU2(0);
+           // handler.Code.exception_table.end_pc
+           putU2(end_pc);
+           // handler.Code.exception_table.handler_pc
+           putU2(handler_pc);
+           // handler.Code.exception_table.catch_type
+           putU2(classInfo("java/lang/Error"));
+           // handler.Code.exception_table.start_pc
+           putU2(0);
+           // handler.Code.exception_table.end_pc
+           putU2(end_pc);
+           // handler.Code.exception_table.handler_pc
+           putU2(handler_pc);
+           // handler.Code.exception_table.catch_type
+           putU2(classInfo("java/lang/RuntimeException"));
+           for (int j = 0; j < e.length; j++)
+             {
+               // handler.Code.exception_table.start_pc
+               putU2(0);
+               // handler.Code.exception_table.end_pc
+               putU2(end_pc);
+               // handler.Code.exception_table.handler_pc
+               putU2(handler_pc);
+               // handler.Code.exception_table.catch_type
+               putU2(classInfo(e[j]));
+             }
+           // handler.Code.exception_table.start_pc
+           putU2(0);
+           // handler.Code.exception_table.end_pc
+           putU2(end_pc);
+           // handler.Code.exception_table.handler_pc -
+           //   -8 for undeclared handler, which falls thru to normal one
+           putU2(handler_pc - 8);
+           // handler.Code.exception_table.catch_type
+           putU2(0);
+         }
+       // handler.Code.attributes_count
+       putU2(0);
+       // handler.Code.attributes[]
+ 
+       if (e.length > 0)
+         {
+           // handler.Exceptions.attribute_name_index
+           putU2(utf8Info("Exceptions"));
+           // handler.Exceptions.attribute_length
+           putU4(2 * e.length + 2);
+           // handler.Exceptions.number_of_exceptions
+           putU2(e.length);
+           // handler.Exceptions.exception_index_table[]
+           for (int j = 0; j < e.length; j++)
+             putU2(classInfo(e[j]));
+         }
+     }
+ 
+     /**
+      * Creates the Class object that corresponds to the bytecode buffers
+      * built when this object was constructed.
+      *
+      * @param loader the class loader to define the proxy class in; null
+      *        implies the bootstrap class loader
+      * @return the proxy class Class object
+      */
+     Class generate(ClassLoader loader)
+     {
+       byte[] bytecode = new byte[pool.length() + stream.length()];
+       // More efficient to bypass calling charAt() repetitively.
+       char[] c = pool.toString().toCharArray();
+       int i = c.length;
+       while (--i >= 0)
+         bytecode[i] = (byte) c[i];
+       c = stream.toString().toCharArray();
+       i = c.length;
+       int j = bytecode.length;
+       while (i > 0)
+         bytecode[--j] = (byte) c[--i];
+ 
+       // Patch the constant pool size, which we left at 0 earlier.
+       int count = poolEntries.size() + 1;
+       bytecode[8] = (byte) (count >> 8);
+       bytecode[9] = (byte) count;
+ 
+       try
+         {
+           Class vmClassLoader = Class.forName("java.lang.VMClassLoader");
+           Class[] types = {ClassLoader.class, String.class,
+                            byte[].class, int.class, int.class,
+                            ProtectionDomain.class };
+           Method m = vmClassLoader.getDeclaredMethod("defineClass", types);
+           // We can bypass the security check of setAccessible(true), since
+ 	  // we're in the same package.
+           m.flag = true;
+ 
+           Object[] args = {loader, qualName, bytecode, new Integer(0),
+                            new Integer(bytecode.length),
+                            Object.class.getProtectionDomain() };
+           Class clazz = (Class) m.invoke(null, args);
+ 
+           // Finally, initialize the m field of the proxy class, before
+           // returning it.
+           Field f = clazz.getDeclaredField("m");
+           f.flag = true;
+           // we can share the array, because it is not publicized
+           f.set(null, methods);
+ 
+           return clazz;
+         }
+       catch (Exception e)
+         {
+           // assert false;
+           throw (Error) new InternalError("Unexpected: " + e).initCause(e);
+         }
+     }
+ 
+     /**
+      * Put a single byte on the stream.
+      *
+      * @param i the information to add (only lowest 8 bits are used)
+      */
+     private void putU1(int i)
+     {
+       stream.append((char) i);
+     }
+ 
+     /**
+      * Put two bytes on the stream.
+      *
+      * @param i the information to add (only lowest 16 bits are used)
+      */
+     private void putU2(int i)
+     {
+       stream.append((char) (i >> 8)).append((char) i);
+     }
+ 
+     /**
+      * Put four bytes on the stream.
+      *
+      * @param i the information to add (treated as unsigned)
+      */
+     private void putU4(int i)
+     {
+       stream.append((char) (i >> 24)).append((char) (i >> 16));
+       stream.append((char) (i >> 8)).append((char) i);
+     }
+ 
+     /**
+      * Put bytecode to load a constant integer on the stream. This only
+      * needs to work for values less than Short.MAX_VALUE.
+      *
+      * @param i the int to add
+      */
+     private void putConst(int i)
+     {
+       if (i >= -1 && i <= 5)
+         putU1(ICONST_0 + i);
+       else if (i >= Byte.MIN_VALUE && i <= Byte.MAX_VALUE)
+         {
+           putU1(BIPUSH);
+           putU1(i);
+         }
+       else
+         {
+           putU1(SIPUSH);
+           putU2(i);
+         }
+     }
+ 
+     /**
+      * Put bytecode to load a given local variable on the stream.
+      *
+      * @param i the slot to load
+      * @param type the base type of the load
+      */
+     private void putLoad(int i, Class type)
+     {
+       int offset = 0;
+       if (type == long.class)
+         offset = 1;
+       else if (type == float.class)
+         offset = 2;
+       else if (type == double.class)
+         offset = 3;
+       else if (! type.isPrimitive())
+         offset = 4;
+       if (i < 4)
+         putU1(ILOAD_0 + 4 * offset + i);
+       else
+         {
+           putU1(ILOAD + offset);
+           putU1(i);
+         }
+     }
+ 
+     /**
+      * Given a primitive type, return its wrapper class name.
+      *
+      * @param clazz the primitive type (but not void.class)
+      * @return the internal form of the wrapper class name
+      */
+     private String wrapper(Class clazz)
+     {
+       if (clazz == boolean.class)
+         return "java/lang/Boolean";
+       if (clazz == byte.class)
+         return "java/lang/Byte";
+       if (clazz == short.class)
+         return "java/lang/Short";
+       if (clazz == char.class)
+         return "java/lang/Character";
+       if (clazz == int.class)
+         return "java/lang/Integer";
+       if (clazz == long.class)
+         return "java/lang/Long";
+       if (clazz == float.class)
+         return "java/lang/Float";
+       if (clazz == double.class)
+         return "java/lang/Double";
+       // assert false;
+       return null;
+     }
+ 
+     /**
+      * Returns the entry of this String in the Constant pool, adding it
+      * if necessary.
+      *
+      * @param str the String to resolve
+      * @return the index of the String in the constant pool
+      */
+     private char utf8Info(String str)
+     {
+       String utf8 = toUtf8(str);
+       int len = utf8.length();
+       return poolIndex("\1" + (char) (len >> 8) + (char) (len & 0xff) + utf8);
+     }
+ 
+     /**
+      * Returns the entry of the appropriate class info structure in the
+      * Constant pool, adding it if necessary.
+      *
+      * @param name the class name, in internal form
+      * @return the index of the ClassInfo in the constant pool
+      */
+     private char classInfo(String name)
+     {
+       char index = utf8Info(name);
+       char[] c = {7, (char) (index >> 8), (char) (index & 0xff)};
+       return poolIndex(new String(c));
+     }
+ 
+     /**
+      * Returns the entry of the appropriate class info structure in the
+      * Constant pool, adding it if necessary.
+      *
+      * @param clazz the class type
+      * @return the index of the ClassInfo in the constant pool
+      */
+     private char classInfo(Class clazz)
+     {
+       return classInfo(TypeSignature.getEncodingOfClass(clazz.getName(),
+                                                         false));
+     }
+ 
+     /**
+      * Returns the entry of the appropriate fieldref, methodref, or
+      * interfacemethodref info structure in the Constant pool, adding it
+      * if necessary.
+      *
+      * @param structure FIELD, METHOD, or INTERFACE
+      * @param clazz the class name, in internal form
+      * @param name the simple reference name
+      * @param type the type of the reference
+      * @return the index of the appropriate Info structure in the constant pool
+      */
+     private char refInfo(byte structure, String clazz, String name,
+                          String type)
+     {
+       char cindex = classInfo(clazz);
+       char ntindex = nameAndTypeInfo(name, type);
+       // relies on FIELD == 1, METHOD == 2, INTERFACE == 3
+       char[] c = {(char) (structure + 8),
+                   (char) (cindex >> 8), (char) (cindex & 0xff),
+                   (char) (ntindex >> 8), (char) (ntindex & 0xff)};
+       return poolIndex(new String(c));
+     }
+ 
+     /**
+      * Returns the entry of the appropriate nameAndTyperef info structure
+      * in the Constant pool, adding it if necessary.
+      *
+      * @param name the simple name
+      * @param type the reference type
+      * @return the index of the NameAndTypeInfo structure in the constant pool
+      */
+     private char nameAndTypeInfo(String name, String type)
+     {
+       char nindex = utf8Info(name);
+       char tindex = utf8Info(type);
+       char[] c = {12, (char) (nindex >> 8), (char) (nindex & 0xff),
+                   (char) (tindex >> 8), (char) (tindex & 0xff)};
+       return poolIndex(new String(c));
+     }
+ 
+     /**
+      * Converts a regular string to a UTF8 string, where the upper byte
+      * of every char is 0, and '\\u0000' is not in the string.  This is
+      * basically to use a String as a fancy byte[], and while it is less
+      * efficient in memory use, it is easier for hashing.
+      *
+      * @param str the original, in straight unicode
+      * @return a modified string, in UTF8 format in the low bytes
+      */
+     private String toUtf8(String str)
+     {
+       final char[] ca = str.toCharArray();
+       final int len = ca.length;
+ 
+       // Avoid object creation, if str is already fits UTF8.
+       int i;
+       for (i = 0; i < len; i++)
+         if (ca[i] == 0 || ca[i] > '\u007f')
+           break;
+       if (i == len)
+         return str;
+ 
+       final StringBuffer sb = new StringBuffer(str);
+       sb.setLength(i);
+       for ( ; i < len; i++)
+         {
+           final char c = ca[i];
+           if (c > 0 && c <= '\u007f')
+             sb.append(c);
+           else if (c <= '\u07ff') // includes '\0'
+             {
+               sb.append((char) (0xc0 | (c >> 6)));
+               sb.append((char) (0x80 | (c & 0x6f)));
+             }
+           else
+             {
+               sb.append((char) (0xe0 | (c >> 12)));
+               sb.append((char) (0x80 | ((c >> 6) & 0x6f)));
+               sb.append((char) (0x80 | (c & 0x6f)));
+             }
+         }
+       return sb.toString();
+     }
+ 
+     /**
+      * Returns the location of a byte sequence (conveniently wrapped in
+      * a String with all characters between \u0001 and \u00ff inclusive)
+      * in the constant pool, adding it if necessary.
+      *
+      * @param sequence the byte sequence to look for
+      * @return the index of the sequence
+      * @throws IllegalArgumentException if this would make the constant
+      *         pool overflow
+      */
+     private char poolIndex(String sequence)
+     {
+       Integer i = (Integer) poolEntries.get(sequence);
+       if (i == null)
+         {
+           // pool starts at index 1
+           int size = poolEntries.size() + 1;
+           if (size >= 65535)
+             throw new IllegalArgumentException("exceeds VM limitations");
+           i = new Integer(size);
+           poolEntries.put(sequence, i);
+           pool.append(sequence);
+         }
+       return (char) i.intValue();
+     }
+   } // class ClassFactory
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/README gcc-4.1.0/libjava/classpath/java/lang/reflect/README
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/README	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/README	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,4 ----
+ README for java.lang.reflect:
+ 
+ java.lang.reflect is now mostly empty.  We've carved out the classes that have
+ to do with the VM and put them into the VM interface.
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/ReflectPermission.java gcc-4.1.0/libjava/classpath/java/lang/reflect/ReflectPermission.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/ReflectPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/ReflectPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* ReflectPermission.java - named permission for reflaction
+    Copyright (C) 2000, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.lang.reflect;
+ 
+ import java.security.BasicPermission;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  */
+ 
+ /**
+  * This class implements permissions for reflection.  This is a named
+  * permission, and the only defined name is suppressAccessChecks, which
+  * allows suppression of normal Java objects when using reflection.
+  *
+  * <table>
+  *  <tr>
+  *   <th>Permission Target Name</th>
+  *   <th>What Permission Allows</th>
+  *   <th>Risk of Allowing Permission</th>
+  *  </tr>
+  *  <tr>
+  *   <td><code>suppressAccessChecks</code></td>
+  *   <td>Ability to access fields, invoke methods, and construct objects
+  *       via reflection, including non-public members in contexts where
+  *       such access is not legal at compile-time.</td>
+  *   <td>This is dangerous. It exposes possibly confidential information,
+  *       and malicious code could interfere with the internals of the Virtual
+  *       Machine by corrupting private data.</td>
+  *  </tr>
+  * </table>
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public final class ReflectPermission
+   extends BasicPermission
+ {
+   /**
+    * Compatible with JDK 1.2.
+    */
+   private static final long serialVersionUID = 7412737110241507485L;
+ 
+   /**
+    * Construct a ReflectPermission with the given name.
+    *
+    * @param name The permission name
+    */
+   public ReflectPermission(String name)
+   {
+     super(name);
+   }
+ 
+   /**
+    * Construct a ReflectPermission with the given name.
+    *
+    * @param name The permission name
+    * @param actions The actions; this is ignored and should be null
+    */
+   public ReflectPermission(String name, String actions)
+   {
+     super(name, actions);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/TODO gcc-4.1.0/libjava/classpath/java/lang/reflect/TODO
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/TODO	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/TODO	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,4 ----
+ TODO for java.lang.reflect Java side
+ 
+ - more tests!
+ - Java 2 support (waiting on java.lang Java 2 support)
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/Type.java gcc-4.1.0/libjava/classpath/java/lang/reflect/Type.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/Type.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/Type.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,55 ----
+ /* Type.java - Superinterface for all types.
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * Represents any <code>Type</code> within the Java programming
+  * language.  This may be a primitive type (e.g. <code>int</code>,
+  * an array type (e.g. <code>double[]>/code>), a raw type
+  * (e.g. <code>Calendar</code>), a parameterized type
+  * (e.g. <code>List&lt;Boolean&gt;</code>, or a type
+  * variable (e.g. <code>T extends String</code>).
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.5
+  */ 
+ public interface Type
+ {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/UndeclaredThrowableException.java gcc-4.1.0/libjava/classpath/java/lang/reflect/UndeclaredThrowableException.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/UndeclaredThrowableException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/UndeclaredThrowableException.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,128 ----
+ /* UndeclaredThrowableException.java -- wraps an undeclared checked exception
+    thrown by a Proxy invocation handler
+    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * This exception class is thrown by a {@link Proxy} instance if
+  * the {@link InvocationHandler#invoke(Object, Method, Object[]) invoke}
+  * method of that instance's InvocationHandler attempts to throw an
+  * exception that not declared by the throws clauses of all of the
+  * interface methods that the proxy instance is implementing.
+  *
+  * <p>When thrown by Proxy, this class will always wrap a checked
+  * exception, never {@link Error} or {@link RuntimeException},
+  * which are unchecked.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Proxy
+  * @see InvocationHandler
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public class UndeclaredThrowableException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.3+.
+    */
+   private static final long serialVersionUID = 330127114055056639L;
+ 
+   /**
+    * The immutable exception that this wraps. This field is redundant
+    * with {@link Throwable#getCause()}, but is necessary for serial compatibility.
+    *
+    * @serial the chained exception
+    */
+   private final Throwable undeclaredThrowable;
+ 
+   /**
+    * Wraps the given checked exception into a RuntimeException, with no
+    * detail message.  {@link Throwable#initCause(Throwable)} will fail
+    * on this instance.
+    *
+    * @param cause the undeclared throwable that caused this exception,
+    *        may be null
+    */
+   public UndeclaredThrowableException(Throwable cause)
+   {
+     this(cause, null);
+   }
+ 
+   /**
+    * Wraps the given checked exception into a RuntimeException, with the
+    * specified detail message.  {@link Throwable#initCause(Throwable)} will
+    * fail on this instance.
+    *
+    * @param cause the undeclared throwable that caused this exception,
+    *        may be null
+    * @param message the message, may be null
+    */
+   public UndeclaredThrowableException(Throwable cause, String message)
+   {
+     super(message, cause);
+     undeclaredThrowable = cause;
+   }
+ 
+   /**
+    * Returns the cause of this exception.  If this exception was created
+    * by a {@link Proxy} instance, it will be a non-null checked
+    * exception.  This method pre-dates exception chaining, and is now
+    * simply a longer way to call <code>getCause()</code>.
+    *
+    * @return the cause of this exception, may be null
+    * @see #getCause()
+    */
+   public Throwable getUndeclaredThrowable()
+   {
+     return undeclaredThrowable;
+   }
+ 
+   /**
+    * Returns the cause of this exception.  If this exception was created
+    * by a {@link Proxy} instance, it will be a non-null checked
+    * exception.
+    *
+    * @return the cause of this exception, may be null
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return undeclaredThrowable;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/WildcardType.java gcc-4.1.0/libjava/classpath/java/lang/reflect/WildcardType.java
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/WildcardType.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/WildcardType.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,115 ----
+ /* WildcardType.java -- A wildcard type expression e.g. ? extends String
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.lang.reflect;
+ 
+ /**
+  * Represents a wildcard type expression, where the type variable
+  * is unnamed.  The simplest example of this is <code>?</code>,
+  * which represents any unbounded type.  Another example is
+  * <code>? extends Number</code>, which specifies any type
+  * which is a subclass of <code>Number</code> (<code>Number</code>
+  * is the upper bound).
+  * </p>
+  * <p>
+  * <code>? super String</code> gives the type a less common lower bound,
+  * which means that the type must be either a <code>String</code> or one
+  * of its superclasses. This can be useful in working with collections.
+  * You may want a method to add instances of a class to a collection
+  * with a more generic type (e.g. adding <code>String</code>s to
+  * a list of <code>Object</code>s), but don't want to allow users
+  * to pass in a collection with a more specific type.
+  * </p>
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.5
+  */
+ public interface WildcardType extends Type
+ {
+ 
+   /**
+    * <p>
+    * Returns an array of <code>Type</code>s, which specify the
+    * lower bounds of this type.  The default lower bound is
+    * <code>null</code>, which causes this method to return an
+    * empty array.
+    * </p>
+    * <p>
+    * In generating the array of <code>Type</code>s, each
+    * <code>ParameterizedType</code> or <code>TypeVariable</code> is
+    * created, (see the documentation for these classes for details of this
+    * process), if necessary, while all other types are simply
+    * resolved.
+    * </p>
+    *
+    * @return an array of <code>Type</code> objects, representing
+    *         the wildcard type's lower bounds.
+    * @throws TypeNotPresentException if any of the types referred to by
+    *         the lower bounds of this type do not actually exist.
+    * @throws MalformedParameterizedTypeException if any of the types
+    *         refer to a type which can not be instantiated.
+    */ 
+   Type[] getLowerBounds();
+ 
+   /**
+    * <p>
+    * Returns an array of <code>Type</code>s, which specify the
+    * upper bounds of this type.  The default upper bound is
+    * <code>Object</code>, which causes this method to return an
+    * array, containing just the <code>Type</code> instance for
+    * <code>Object</code>.
+    * </p>
+    * <p>
+    * In generating the array of <code>Type</code>s, each
+    * <code>ParameterizedType</code> or <code>TypeVariable</code> is
+    * created, (see the documentation for these classes for details of this
+    * process), if necessary, while all other types are simply
+    * resolved.
+    * </p>
+    *
+    * @return an array of <code>Type</code> objects, representing
+    *         the wildcard type's upper bounds.
+    * @throws TypeNotPresentException if any of the types referred to by
+    *         the upper bounds of this type do not actually exist.
+    * @throws MalformedParameterizedTypeException if any of the types
+    *         refer to a type which can not be instantiated.
+    */ 
+   Type[] getUpperBounds();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/lang/reflect/package.html gcc-4.1.0/libjava/classpath/java/lang/reflect/package.html
*** gcc-4.0.2/libjava/classpath/java/lang/reflect/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/lang/reflect/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.lang.reflect package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.lang.reflect</title></head>
+ 
+ <body>
+ <p>Runtime inspection and manipulation of object classes, methods, arguments
+ and fields.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/math/BigDecimal.java gcc-4.1.0/libjava/classpath/java/math/BigDecimal.java
*** gcc-4.0.2/libjava/classpath/java/math/BigDecimal.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/math/BigDecimal.java	Mon Feb  6 19:18:36 2006
***************
*** 0 ****
--- 1,529 ----
+ /* java.math.BigDecimal -- Arbitrary precision decimals.
+    Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.math;
+ 
+ public class BigDecimal extends Number implements Comparable
+ {
+   private BigInteger intVal;
+   private int scale;
+   private static final long serialVersionUID = 6108874887143696463L;
+ 
+   /**
+    * The constant zero as a BigDecimal with scale zero.
+    * @since 1.5
+    */
+   public static final BigDecimal ZERO = 
+     new BigDecimal (BigInteger.valueOf (0), 0);
+ 
+   /**
+    * The constant one as a BigDecimal with scale zero.
+    * @since 1.5
+    */
+   public static final BigDecimal ONE = 
+     new BigDecimal (BigInteger.valueOf (1), 0);
+ 
+   /**
+    * The constant ten as a BigDecimal with scale zero.
+    * @since 1.5
+    */
+   public static final BigDecimal TEN = 
+     new BigDecimal (BigInteger.valueOf (10), 0);
+ 
+   public static final int ROUND_UP = 0;
+   public static final int ROUND_DOWN = 1;
+   public static final int ROUND_CEILING = 2;
+   public static final int ROUND_FLOOR = 3;
+   public static final int ROUND_HALF_UP = 4;
+   public static final int ROUND_HALF_DOWN = 5;
+   public static final int ROUND_HALF_EVEN = 6;
+   public static final int ROUND_UNNECESSARY = 7;
+ 
+   public BigDecimal (BigInteger num) 
+   {
+     this (num, 0);
+   }
+ 
+   public BigDecimal (BigInteger num, int scale) throws NumberFormatException 
+   {
+     if (scale < 0) 
+       throw new NumberFormatException ("scale of " + scale + " is < 0");
+     this.intVal = num;
+     this.scale = scale;
+   }
+ 
+   public BigDecimal (double num) throws NumberFormatException 
+   {
+     if (Double.isInfinite (num) || Double.isNaN (num))
+       throw new NumberFormatException ("invalid argument: " + num);
+     // Note we can't convert NUM to a String and then use the
+     // String-based constructor.  The BigDecimal documentation makes
+     // it clear that the two constructors work differently.
+ 
+     final int mantissaBits = 52;
+     final int exponentBits = 11;
+     final long mantMask = (1L << mantissaBits) - 1;
+     final long expMask = (1L << exponentBits) - 1;
+ 
+     long bits = Double.doubleToLongBits (num);
+     long mantissa = bits & mantMask;
+     long exponent = (bits >>> mantissaBits) & expMask;
+     boolean denormal = exponent == 0;
+     // Correct the exponent for the bias.
+     exponent -= denormal ? 1022 : 1023;
+     // Now correct the exponent to account for the bits to the right
+     // of the decimal.
+     exponent -= mantissaBits;
+     // Ordinary numbers have an implied leading `1' bit.
+     if (! denormal)
+       mantissa |= (1L << mantissaBits);
+ 
+     // Shave off factors of 10.
+     while (exponent < 0 && (mantissa & 1) == 0)
+       {
+ 	++exponent;
+ 	mantissa >>= 1;
+       }
+ 
+     intVal = BigInteger.valueOf (bits < 0 ? - mantissa : mantissa);
+     if (exponent < 0)
+       {
+ 	// We have MANTISSA * 2 ^ (EXPONENT).
+ 	// Since (1/2)^N == 5^N * 10^-N we can easily convert this
+ 	// into a power of 10.
+ 	scale = (int) (- exponent);
+ 	BigInteger mult = BigInteger.valueOf (5).pow (scale);
+ 	intVal = intVal.multiply (mult);
+       }
+     else
+       {
+ 	intVal = intVal.shiftLeft ((int) exponent);
+ 	scale = 0;
+       }
+   }
+ 
+   public BigDecimal (String num) throws NumberFormatException 
+   {
+     int len = num.length();
+     int start = 0, point = 0;
+     int dot = -1;
+     boolean negative = false;
+     if (num.charAt(0) == '+')
+       {
+ 	++start;
+ 	++point;
+       }
+     else if (num.charAt(0) == '-')
+       {
+ 	++start;
+ 	++point;
+ 	negative = true;
+       }
+ 
+     while (point < len)
+       {
+ 	char c = num.charAt (point);
+ 	if (c == '.')
+ 	  {
+ 	    if (dot >= 0)
+ 	      throw new NumberFormatException ("multiple `.'s in number");
+ 	    dot = point;
+ 	  }
+ 	else if (c == 'e' || c == 'E')
+ 	  break;
+ 	else if (Character.digit (c, 10) < 0)
+ 	  throw new NumberFormatException ("unrecognized character: " + c);
+ 	++point;
+       }
+ 
+     String val;
+     if (dot >= 0)
+       {
+ 	val = num.substring (start, dot) + num.substring (dot + 1, point);
+ 	scale = point - 1 - dot;
+       }
+     else
+       {
+ 	val = num.substring (start, point);
+ 	scale = 0;
+       }
+     if (val.length () == 0)
+       throw new NumberFormatException ("no digits seen");
+ 
+     if (negative)
+       val = "-" + val;
+     intVal = new BigInteger (val);
+ 
+     // Now parse exponent.
+     if (point < len)
+       {
+         point++;
+         if (num.charAt(point) == '+')
+           point++;
+ 
+         if (point >= len )
+           throw new NumberFormatException ("no exponent following e or E");
+ 	
+         try 
+ 	  {
+ 	    int exp = Integer.parseInt (num.substring (point));
+ 	    exp -= scale;
+ 	    if (signum () == 0)
+ 	      scale = 0;
+ 	    else if (exp > 0)
+ 	      {
+ 		intVal = intVal.multiply (BigInteger.valueOf (10).pow (exp));
+ 		scale = 0;
+ 	      }
+ 	    else
+ 	      scale = - exp;
+ 	  }
+         catch (NumberFormatException ex) 
+ 	  {
+ 	    throw new NumberFormatException ("malformed exponent");
+ 	  }
+       }
+   }
+ 
+   public static BigDecimal valueOf (long val) 
+   {
+     return valueOf (val, 0);
+   }
+ 
+   public static BigDecimal valueOf (long val, int scale) 
+     throws NumberFormatException 
+   {
+     if ((scale == 0) && ((int)val == val))
+       switch ((int) val)
+ 	{
+ 	case 0:
+ 	  return ZERO;
+ 	case 1:
+ 	  return ONE;
+ 	}
+ 
+     return new BigDecimal (BigInteger.valueOf (val), scale);
+   }
+ 
+   public BigDecimal add (BigDecimal val) 
+   {
+     // For addition, need to line up decimals.  Note that the movePointRight
+     // method cannot be used for this as it might return a BigDecimal with
+     // scale == 0 instead of the scale we need.
+     BigInteger op1 = intVal;
+     BigInteger op2 = val.intVal;
+     if (scale < val.scale)
+       op1 = op1.multiply (BigInteger.valueOf (10).pow (val.scale - scale));
+     else if (scale > val.scale)
+       op2 = op2.multiply (BigInteger.valueOf (10).pow (scale - val.scale));
+ 
+     return new BigDecimal (op1.add (op2), Math.max (scale, val.scale));
+   }
+ 
+   public BigDecimal subtract (BigDecimal val) 
+   {
+     return this.add(val.negate());
+   }
+ 
+   public BigDecimal multiply (BigDecimal val) 
+   {
+     return new BigDecimal (intVal.multiply (val.intVal), scale + val.scale);
+   }
+ 
+   public BigDecimal divide (BigDecimal val, int roundingMode) 
+     throws ArithmeticException, IllegalArgumentException 
+   {
+     return divide (val, scale, roundingMode);
+   }
+ 
+   public BigDecimal divide(BigDecimal val, int newScale, int roundingMode)
+     throws ArithmeticException, IllegalArgumentException 
+   {
+     if (roundingMode < 0 || roundingMode > 7)
+       throw 
+ 	new IllegalArgumentException("illegal rounding mode: " + roundingMode);
+ 
+     if (newScale < 0)
+       throw new ArithmeticException ("scale is negative: " + newScale);
+ 
+     if (intVal.signum () == 0)	// handle special case of 0.0/0.0
+       return newScale == 0 ? ZERO : new BigDecimal (ZERO.intVal, newScale);
+     
+     // Ensure that pow gets a non-negative value.
+     BigInteger valIntVal = val.intVal;
+     int power = newScale - (scale - val.scale);
+     if (power < 0)
+       {
+ 	// Effectively increase the scale of val to avoid an
+ 	// ArithmeticException for a negative power.
+         valIntVal = valIntVal.multiply (BigInteger.valueOf (10).pow (-power));
+ 	power = 0;
+       }
+ 
+     BigInteger dividend = intVal.multiply (BigInteger.valueOf (10).pow (power));
+     
+     BigInteger parts[] = dividend.divideAndRemainder (valIntVal);
+ 
+     BigInteger unrounded = parts[0];
+     if (parts[1].signum () == 0) // no remainder, no rounding necessary
+       return new BigDecimal (unrounded, newScale);
+ 
+     if (roundingMode == ROUND_UNNECESSARY)
+       throw new ArithmeticException ("newScale is not large enough");
+ 
+     int sign = intVal.signum () * valIntVal.signum ();
+ 
+     if (roundingMode == ROUND_CEILING)
+       roundingMode = (sign > 0) ? ROUND_UP : ROUND_DOWN;
+     else if (roundingMode == ROUND_FLOOR)
+       roundingMode = (sign < 0) ? ROUND_UP : ROUND_DOWN;
+     else
+       {
+ 	// half is -1 if remainder*2 < positive intValue (*power), 0 if equal,
+ 	// 1 if >. This implies that the remainder to round is less than,
+ 	// equal to, or greater than half way to the next digit.
+ 	BigInteger posRemainder
+ 	  = parts[1].signum () < 0 ? parts[1].negate() : parts[1];
+ 	valIntVal = valIntVal.signum () < 0 ? valIntVal.negate () : valIntVal;
+ 	int half = posRemainder.shiftLeft(1).compareTo(valIntVal);
+ 
+ 	switch(roundingMode)
+ 	  {
+ 	  case ROUND_HALF_UP:
+ 	    roundingMode = (half < 0) ? ROUND_DOWN : ROUND_UP;
+ 	    break;
+ 	  case ROUND_HALF_DOWN:
+ 	    roundingMode = (half > 0) ? ROUND_UP : ROUND_DOWN;
+ 	    break;
+ 	  case ROUND_HALF_EVEN:
+ 	    if (half < 0)
+ 	      roundingMode = ROUND_DOWN;
+ 	    else if (half > 0)
+ 	      roundingMode = ROUND_UP;
+ 	    else if (unrounded.testBit(0)) // odd, then ROUND_HALF_UP
+ 	      roundingMode = ROUND_UP;
+ 	    else                           // even, ROUND_HALF_DOWN
+ 	      roundingMode = ROUND_DOWN;
+ 	    break;
+ 	  }
+       }
+ 
+     if (roundingMode == ROUND_UP)
+       unrounded = unrounded.add (BigInteger.valueOf (sign > 0 ? 1 : -1));
+ 
+     // roundingMode == ROUND_DOWN
+     return new BigDecimal (unrounded, newScale);
+   }
+     
+   public int compareTo (BigDecimal val) 
+   {
+     if (scale == val.scale)
+       return intVal.compareTo (val.intVal);
+ 
+     BigInteger thisParts[] = 
+       intVal.divideAndRemainder (BigInteger.valueOf (10).pow (scale));
+     BigInteger valParts[] =
+       val.intVal.divideAndRemainder (BigInteger.valueOf (10).pow (val.scale));
+     
+     int compare;
+     if ((compare = thisParts[0].compareTo (valParts[0])) != 0)
+       return compare;
+ 
+     // quotients are the same, so compare remainders
+ 
+     // Add some trailing zeros to the remainder with the smallest scale
+     if (scale < val.scale)
+       thisParts[1] = thisParts[1].multiply
+ 			(BigInteger.valueOf (10).pow (val.scale - scale));
+     else if (scale > val.scale)
+       valParts[1] = valParts[1].multiply
+ 			(BigInteger.valueOf (10).pow (scale - val.scale));
+ 
+     // and compare them
+     return thisParts[1].compareTo (valParts[1]);
+   }
+ 
+   public int compareTo (Object val) 
+   {
+     return(compareTo((BigDecimal)val));
+   }
+ 
+   public boolean equals (Object o) 
+   {
+     return (o instanceof BigDecimal 
+ 	    && scale == ((BigDecimal) o).scale
+ 	    && compareTo ((BigDecimal) o) == 0);
+   }
+ 
+   public int hashCode() 
+   {
+     return intValue() ^ scale;
+   }
+ 
+   public BigDecimal max (BigDecimal val)
+   {
+     switch (compareTo (val)) 
+       {
+       case 1:
+ 	return this;
+       default:
+ 	return val;
+       }
+   }
+ 
+   public BigDecimal min (BigDecimal val) 
+   {
+     switch (compareTo (val)) 
+       {
+       case -1:
+ 	return this;
+       default:
+ 	return val;
+       }
+   }
+ 
+   public BigDecimal movePointLeft (int n)
+   {
+     return (n < 0) ? movePointRight (-n) : new BigDecimal (intVal, scale + n);
+   }
+ 
+   public BigDecimal movePointRight (int n)
+   {
+     if (n < 0)
+       return movePointLeft (-n);
+ 
+     if (scale >= n)
+       return new BigDecimal (intVal, scale - n);
+ 
+     return new BigDecimal (intVal.multiply 
+ 			   (BigInteger.valueOf (10).pow (n - scale)), 0);
+   }
+ 
+   public int signum () 
+   {
+     return intVal.signum ();
+   }
+ 
+   public int scale () 
+   {
+     return scale;
+   }
+   
+   public BigInteger unscaledValue()
+   {
+     return intVal;
+   }
+ 
+   public BigDecimal abs () 
+   {
+     return new BigDecimal (intVal.abs (), scale);
+   }
+ 
+   public BigDecimal negate () 
+   {
+     return new BigDecimal (intVal.negate (), scale);
+   }
+ 
+   public String toString () 
+   {
+     String bigStr = intVal.toString();
+     if (scale == 0) 
+       return bigStr;
+ 
+     boolean negative = (bigStr.charAt(0) == '-');
+ 
+     int point = bigStr.length() - scale - (negative ? 1 : 0);
+ 
+     StringBuffer sb = new StringBuffer(bigStr.length() + 2 +
+ 				       (point <= 0 ? (-point + 1) : 0));
+     if (point <= 0)
+       {
+         if (negative)
+           sb.append('-');
+         sb.append('0').append('.');
+         while (point < 0)
+           {
+             sb.append('0');
+             point++;
+           }
+         sb.append(bigStr.substring(negative ? 1 : 0));
+       }
+     else
+       {
+ 	sb.append(bigStr);
+ 	sb.insert(point + (negative ? 1 : 0), '.');
+       }
+     return sb.toString();
+   }
+ 
+   public BigInteger toBigInteger () 
+   {
+     return scale == 0 ? intVal :
+       intVal.divide (BigInteger.valueOf (10).pow (scale));
+   }
+ 
+   public int intValue () 
+   {
+     return toBigInteger ().intValue ();
+   }
+ 
+   public long longValue ()
+   {
+     return toBigInteger().longValue();
+   }
+ 
+   public float floatValue() 
+   {
+     return Float.valueOf(toString()).floatValue();
+   }
+ 
+   public double doubleValue() 
+   {
+     return Double.valueOf(toString()).doubleValue();
+   }
+ 
+   public BigDecimal setScale (int scale) throws ArithmeticException
+   {
+     return setScale (scale, ROUND_UNNECESSARY);
+   }
+ 
+   public BigDecimal setScale (int scale, int roundingMode)
+     throws ArithmeticException, IllegalArgumentException
+   {
+     return divide (ONE, scale, roundingMode);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/math/BigInteger.java gcc-4.1.0/libjava/classpath/java/math/BigInteger.java
*** gcc-4.0.2/libjava/classpath/java/math/BigInteger.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/math/BigInteger.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,2243 ----
+ /* java.math.BigInteger -- Arbitary precision integers
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.math;
+ 
+ import gnu.java.math.MPN;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.util.Random;
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998) and
+  * "Applied Cryptography, Second Edition" by Bruce Schneier (Wiley, 1996).
+  * 
+  * Based primarily on IntNum.java BitOps.java by Per Bothner (per@bothner.com)
+  * (found in Kawa 1.6.62).
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @date December 20, 1999.
+  * @status believed complete and correct.
+  */
+ public class BigInteger extends Number implements Comparable
+ {
+   /** All integers are stored in 2's-complement form.
+    * If words == null, the ival is the value of this BigInteger.
+    * Otherwise, the first ival elements of words make the value
+    * of this BigInteger, stored in little-endian order, 2's-complement form. */
+   private transient int ival;
+   private transient int[] words;
+ 
+   // Serialization fields.
+   private int bitCount = -1;
+   private int bitLength = -1;
+   private int firstNonzeroByteNum = -2;
+   private int lowestSetBit = -2;
+   private byte[] magnitude;
+   private int signum;
+   private static final long serialVersionUID = -8287574255936472291L;
+ 
+ 
+   /** We pre-allocate integers in the range minFixNum..maxFixNum. 
+    * Note that we must at least preallocate 0, 1, and 10.  */
+   private static final int minFixNum = -100;
+   private static final int maxFixNum = 1024;
+   private static final int numFixNum = maxFixNum-minFixNum+1;
+   private static final BigInteger[] smallFixNums = new BigInteger[numFixNum];
+ 
+   static {
+     for (int i = numFixNum;  --i >= 0; )
+       smallFixNums[i] = new BigInteger(i + minFixNum);
+   }
+ 
+   /**
+    * The constant zero as a BigInteger.
+    * @since 1.2
+    */
+   public static final BigInteger ZERO = smallFixNums[-minFixNum];
+ 
+   /**
+    * The constant one as a BigInteger.
+    * @since 1.2
+    */
+   public static final BigInteger ONE = smallFixNums[1 - minFixNum];
+   
+   /**
+    * The constant ten as a BigInteger.
+    * @since 1.5
+    */
+   public static final BigInteger TEN = smallFixNums[10 - minFixNum];
+ 
+   /* Rounding modes: */
+   private static final int FLOOR = 1;
+   private static final int CEILING = 2;
+   private static final int TRUNCATE = 3;
+   private static final int ROUND = 4;
+ 
+   /** When checking the probability of primes, it is most efficient to
+    * first check the factoring of small primes, so we'll use this array.
+    */
+   private static final int[] primes =
+     {   2,   3,   5,   7,  11,  13,  17,  19,  23,  29,  31,  37,  41,  43,
+        47,  53,  59,  61,  67,  71,  73,  79,  83,  89,  97, 101, 103, 107,
+       109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181,
+       191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251 };
+ 
+   /** HAC (Handbook of Applied Cryptography), Alfred Menezes & al. Table 4.4. */
+   private static final int[] k =
+       {100,150,200,250,300,350,400,500,600,800,1250, Integer.MAX_VALUE};
+   private static final int[] t =
+       { 27, 18, 15, 12,  9,  8,  7,  6,  5,  4,   3, 2};
+ 
+   private BigInteger()
+   {
+   }
+ 
+   /* Create a new (non-shared) BigInteger, and initialize to an int. */
+   private BigInteger(int value)
+   {
+     ival = value;
+   }
+ 
+   public BigInteger(String val, int radix)
+   {
+     BigInteger result = valueOf(val, radix);
+     this.ival = result.ival;
+     this.words = result.words;
+   }
+ 
+   public BigInteger(String val)
+   {
+     this(val, 10);
+   }
+ 
+   /* Create a new (non-shared) BigInteger, and initialize from a byte array. */
+   public BigInteger(byte[] val)
+   {
+     if (val == null || val.length < 1)
+       throw new NumberFormatException();
+ 
+     words = byteArrayToIntArray(val, val[0] < 0 ? -1 : 0);
+     BigInteger result = make(words, words.length);
+     this.ival = result.ival;
+     this.words = result.words;
+   }
+ 
+   public BigInteger(int signum, byte[] magnitude)
+   {
+     if (magnitude == null || signum > 1 || signum < -1)
+       throw new NumberFormatException();
+ 
+     if (signum == 0)
+       {
+ 	int i;
+ 	for (i = magnitude.length - 1; i >= 0 && magnitude[i] == 0; --i)
+ 	  ;
+ 	if (i >= 0)
+ 	  throw new NumberFormatException();
+         return;
+       }
+ 
+     // Magnitude is always positive, so don't ever pass a sign of -1.
+     words = byteArrayToIntArray(magnitude, 0);
+     BigInteger result = make(words, words.length);
+     this.ival = result.ival;
+     this.words = result.words;
+ 
+     if (signum < 0)
+       setNegative();
+   }
+ 
+   public BigInteger(int numBits, Random rnd)
+   {
+     if (numBits < 0)
+       throw new IllegalArgumentException();
+ 
+     init(numBits, rnd);
+   }
+ 
+   private void init(int numBits, Random rnd)
+   {
+     int highbits = numBits & 31;
+     if (highbits > 0)
+       highbits = rnd.nextInt() >>> (32 - highbits);
+     int nwords = numBits / 32;
+ 
+     while (highbits == 0 && nwords > 0)
+       {
+ 	highbits = rnd.nextInt();
+ 	--nwords;
+       }
+     if (nwords == 0 && highbits >= 0)
+       {
+ 	ival = highbits;
+       }
+     else
+       {
+ 	ival = highbits < 0 ? nwords + 2 : nwords + 1;
+ 	words = new int[ival];
+ 	words[nwords] = highbits;
+ 	while (--nwords >= 0)
+ 	  words[nwords] = rnd.nextInt();
+       }
+   }
+ 
+   public BigInteger(int bitLength, int certainty, Random rnd)
+   {
+     this(bitLength, rnd);
+ 
+     // Keep going until we find a probable prime.
+     while (true)
+       {
+ 	if (isProbablePrime(certainty))
+ 	  return;
+ 
+ 	init(bitLength, rnd);
+       }
+   }
+ 
+   /** 
+    *  Return a BigInteger that is bitLength bits long with a
+    *  probability < 2^-100 of being composite.
+    *
+    *  @param bitLength length in bits of resulting number
+    *  @param rnd random number generator to use
+    *  @throws ArithmeticException if bitLength < 2
+    *  @since 1.4
+    */
+   public static BigInteger probablePrime(int bitLength, Random rnd)
+   {
+     if (bitLength < 2)
+       throw new ArithmeticException();
+ 
+     return new BigInteger(bitLength, 100, rnd);
+   }
+ 
+   /** Return a (possibly-shared) BigInteger with a given long value. */
+   public static BigInteger valueOf(long val)
+   {
+     if (val >= minFixNum && val <= maxFixNum)
+       return smallFixNums[(int) val - minFixNum];
+     int i = (int) val;
+     if ((long) i == val)
+       return new BigInteger(i);
+     BigInteger result = alloc(2);
+     result.ival = 2;
+     result.words[0] = i;
+     result.words[1] = (int)(val >> 32);
+     return result;
+   }
+ 
+   /** Make a canonicalized BigInteger from an array of words.
+    * The array may be reused (without copying). */
+   private static BigInteger make(int[] words, int len)
+   {
+     if (words == null)
+       return valueOf(len);
+     len = BigInteger.wordsNeeded(words, len);
+     if (len <= 1)
+       return len == 0 ? ZERO : valueOf(words[0]);
+     BigInteger num = new BigInteger();
+     num.words = words;
+     num.ival = len;
+     return num;
+   }
+ 
+   /** Convert a big-endian byte array to a little-endian array of words. */
+   private static int[] byteArrayToIntArray(byte[] bytes, int sign)
+   {
+     // Determine number of words needed.
+     int[] words = new int[bytes.length/4 + 1];
+     int nwords = words.length;
+ 
+     // Create a int out of modulo 4 high order bytes.
+     int bptr = 0;
+     int word = sign;
+     for (int i = bytes.length % 4; i > 0; --i, bptr++)
+       word = (word << 8) | (bytes[bptr] & 0xff);
+     words[--nwords] = word;
+ 
+     // Elements remaining in byte[] are a multiple of 4.
+     while (nwords > 0)
+       words[--nwords] = bytes[bptr++] << 24 |
+ 			(bytes[bptr++] & 0xff) << 16 |
+ 			(bytes[bptr++] & 0xff) << 8 |
+ 			(bytes[bptr++] & 0xff);
+     return words;
+   }
+ 
+   /** Allocate a new non-shared BigInteger.
+    * @param nwords number of words to allocate
+    */
+   private static BigInteger alloc(int nwords)
+   {
+     BigInteger result = new BigInteger();
+     if (nwords > 1)
+     result.words = new int[nwords];
+     return result;
+   }
+ 
+   /** Change words.length to nwords.
+    * We allow words.length to be upto nwords+2 without reallocating.
+    */
+   private void realloc(int nwords)
+   {
+     if (nwords == 0)
+       {
+ 	if (words != null)
+ 	  {
+ 	    if (ival > 0)
+ 	      ival = words[0];
+ 	    words = null;
+ 	  }
+       }
+     else if (words == null
+ 	     || words.length < nwords
+ 	     || words.length > nwords + 2)
+       {
+ 	int[] new_words = new int [nwords];
+ 	if (words == null)
+ 	  {
+ 	    new_words[0] = ival;
+ 	    ival = 1;
+ 	  }
+ 	else
+ 	  {
+ 	    if (nwords < ival)
+ 	      ival = nwords;
+ 	    System.arraycopy(words, 0, new_words, 0, ival);
+ 	  }
+ 	words = new_words;
+       }
+   }
+ 
+   private boolean isNegative()
+   {
+     return (words == null ? ival : words[ival - 1]) < 0;
+   }
+ 
+   public int signum()
+   {
+     int top = words == null ? ival : words[ival-1];
+     if (top == 0 && words == null)
+       return 0;
+     return top < 0 ? -1 : 1;
+   }
+ 
+   private static int compareTo(BigInteger x, BigInteger y)
+   {
+     if (x.words == null && y.words == null)
+       return x.ival < y.ival ? -1 : x.ival > y.ival ? 1 : 0;
+     boolean x_negative = x.isNegative();
+     boolean y_negative = y.isNegative();
+     if (x_negative != y_negative)
+       return x_negative ? -1 : 1;
+     int x_len = x.words == null ? 1 : x.ival;
+     int y_len = y.words == null ? 1 : y.ival;
+     if (x_len != y_len)
+       return (x_len > y_len) != x_negative ? 1 : -1;
+     return MPN.cmp(x.words, y.words, x_len);
+   }
+ 
+   // JDK1.2
+   public int compareTo(Object obj)
+   {
+     if (obj instanceof BigInteger)
+       return compareTo(this, (BigInteger) obj);
+     throw new ClassCastException();
+   }
+ 
+   public int compareTo(BigInteger val)
+   {
+     return compareTo(this, val);
+   }
+ 
+   public BigInteger min(BigInteger val)
+   {
+     return compareTo(this, val) < 0 ? this : val;
+   }
+ 
+   public BigInteger max(BigInteger val)
+   {
+     return compareTo(this, val) > 0 ? this : val;
+   }
+ 
+   private boolean isZero()
+   {
+     return words == null && ival == 0;
+   }
+ 
+   private boolean isOne()
+   {
+     return words == null && ival == 1;
+   }
+ 
+   /** Calculate how many words are significant in words[0:len-1].
+    * Returns the least value x such that x>0 && words[0:x-1]==words[0:len-1],
+    * when words is viewed as a 2's complement integer.
+    */
+   private static int wordsNeeded(int[] words, int len)
+   {
+     int i = len;
+     if (i > 0)
+       {
+ 	int word = words[--i];
+ 	if (word == -1)
+ 	  {
+ 	    while (i > 0 && (word = words[i - 1]) < 0)
+ 	      {
+ 		i--;
+ 		if (word != -1) break;
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    while (word == 0 && i > 0 && (word = words[i - 1]) >= 0)  i--;
+ 	  }
+       }
+     return i + 1;
+   }
+ 
+   private BigInteger canonicalize()
+   {
+     if (words != null
+ 	&& (ival = BigInteger.wordsNeeded(words, ival)) <= 1)
+       {
+ 	if (ival == 1)
+ 	  ival = words[0];
+ 	words = null;
+       }
+     if (words == null && ival >= minFixNum && ival <= maxFixNum)
+       return smallFixNums[ival - minFixNum];
+     return this;
+   }
+ 
+   /** Add two ints, yielding a BigInteger. */
+   private static BigInteger add(int x, int y)
+   {
+     return valueOf((long) x + (long) y);
+   }
+ 
+   /** Add a BigInteger and an int, yielding a new BigInteger. */
+   private static BigInteger add(BigInteger x, int y)
+   {
+     if (x.words == null)
+       return BigInteger.add(x.ival, y);
+     BigInteger result = new BigInteger(0);
+     result.setAdd(x, y);
+     return result.canonicalize();
+   }
+ 
+   /** Set this to the sum of x and y.
+    * OK if x==this. */
+   private void setAdd(BigInteger x, int y)
+   {
+     if (x.words == null)
+       {
+ 	set((long) x.ival + (long) y);
+ 	return;
+       }
+     int len = x.ival;
+     realloc(len + 1);
+     long carry = y;
+     for (int i = 0;  i < len;  i++)
+       {
+ 	carry += ((long) x.words[i] & 0xffffffffL);
+ 	words[i] = (int) carry;
+ 	carry >>= 32;
+       }
+     if (x.words[len - 1] < 0)
+       carry--;
+     words[len] = (int) carry;
+     ival = wordsNeeded(words, len + 1);
+   }
+ 
+   /** Destructively add an int to this. */
+   private void setAdd(int y)
+   {
+     setAdd(this, y);
+   }
+ 
+   /** Destructively set the value of this to a long. */
+   private void set(long y)
+   {
+     int i = (int) y;
+     if ((long) i == y)
+       {
+ 	ival = i;
+ 	words = null;
+       }
+     else
+       {
+ 	realloc(2);
+ 	words[0] = i;
+ 	words[1] = (int) (y >> 32);
+ 	ival = 2;
+       }
+   }
+ 
+   /** Destructively set the value of this to the given words.
+   * The words array is reused, not copied. */
+   private void set(int[] words, int length)
+   {
+     this.ival = length;
+     this.words = words;
+   }
+ 
+   /** Destructively set the value of this to that of y. */
+   private void set(BigInteger y)
+   {
+     if (y.words == null)
+       set(y.ival);
+     else if (this != y)
+       {
+ 	realloc(y.ival);
+ 	System.arraycopy(y.words, 0, words, 0, y.ival);
+ 	ival = y.ival;
+       }
+   }
+ 
+   /** Add two BigIntegers, yielding their sum as another BigInteger. */
+   private static BigInteger add(BigInteger x, BigInteger y, int k)
+   {
+     if (x.words == null && y.words == null)
+       return valueOf((long) k * (long) y.ival + (long) x.ival);
+     if (k != 1)
+       {
+ 	if (k == -1)
+ 	  y = BigInteger.neg(y);
+ 	else
+ 	  y = BigInteger.times(y, valueOf(k));
+       }
+     if (x.words == null)
+       return BigInteger.add(y, x.ival);
+     if (y.words == null)
+       return BigInteger.add(x, y.ival);
+     // Both are big
+     if (y.ival > x.ival)
+       { // Swap so x is longer then y.
+ 	BigInteger tmp = x;  x = y;  y = tmp;
+       }
+     BigInteger result = alloc(x.ival + 1);
+     int i = y.ival;
+     long carry = MPN.add_n(result.words, x.words, y.words, i);
+     long y_ext = y.words[i - 1] < 0 ? 0xffffffffL : 0;
+     for (; i < x.ival;  i++)
+       {
+ 	carry += ((long) x.words[i] & 0xffffffffL) + y_ext;;
+ 	result.words[i] = (int) carry;
+ 	carry >>>= 32;
+       }
+     if (x.words[i - 1] < 0)
+       y_ext--;
+     result.words[i] = (int) (carry + y_ext);
+     result.ival = i+1;
+     return result.canonicalize();
+   }
+ 
+   public BigInteger add(BigInteger val)
+   {
+     return add(this, val, 1);
+   }
+ 
+   public BigInteger subtract(BigInteger val)
+   {
+     return add(this, val, -1);
+   }
+ 
+   private static BigInteger times(BigInteger x, int y)
+   {
+     if (y == 0)
+       return ZERO;
+     if (y == 1)
+       return x;
+     int[] xwords = x.words;
+     int xlen = x.ival;
+     if (xwords == null)
+       return valueOf((long) xlen * (long) y);
+     boolean negative;
+     BigInteger result = BigInteger.alloc(xlen + 1);
+     if (xwords[xlen - 1] < 0)
+       {
+ 	negative = true;
+ 	negate(result.words, xwords, xlen);
+ 	xwords = result.words;
+       }
+     else
+       negative = false;
+     if (y < 0)
+       {
+ 	negative = !negative;
+ 	y = -y;
+       }
+     result.words[xlen] = MPN.mul_1(result.words, xwords, xlen, y);
+     result.ival = xlen + 1;
+     if (negative)
+       result.setNegative();
+     return result.canonicalize();
+   }
+ 
+   private static BigInteger times(BigInteger x, BigInteger y)
+   {
+     if (y.words == null)
+       return times(x, y.ival);
+     if (x.words == null)
+       return times(y, x.ival);
+     boolean negative = false;
+     int[] xwords;
+     int[] ywords;
+     int xlen = x.ival;
+     int ylen = y.ival;
+     if (x.isNegative())
+       {
+ 	negative = true;
+ 	xwords = new int[xlen];
+ 	negate(xwords, x.words, xlen);
+       }
+     else
+       {
+ 	negative = false;
+ 	xwords = x.words;
+       }
+     if (y.isNegative())
+       {
+ 	negative = !negative;
+ 	ywords = new int[ylen];
+ 	negate(ywords, y.words, ylen);
+       }
+     else
+       ywords = y.words;
+     // Swap if x is shorter then y.
+     if (xlen < ylen)
+       {
+ 	int[] twords = xwords;  xwords = ywords;  ywords = twords;
+ 	int tlen = xlen;  xlen = ylen;  ylen = tlen;
+       }
+     BigInteger result = BigInteger.alloc(xlen+ylen);
+     MPN.mul(result.words, xwords, xlen, ywords, ylen);
+     result.ival = xlen+ylen;
+     if (negative)
+       result.setNegative();
+     return result.canonicalize();
+   }
+ 
+   public BigInteger multiply(BigInteger y)
+   {
+     return times(this, y);
+   }
+ 
+   private static void divide(long x, long y,
+ 			     BigInteger quotient, BigInteger remainder,
+ 			     int rounding_mode)
+   {
+     boolean xNegative, yNegative;
+     if (x < 0)
+       {
+ 	xNegative = true;
+ 	if (x == Long.MIN_VALUE)
+ 	  {
+ 	    divide(valueOf(x), valueOf(y),
+ 		   quotient, remainder, rounding_mode);
+ 	    return;
+ 	  }
+ 	x = -x;
+       }
+     else
+       xNegative = false;
+ 
+     if (y < 0)
+       {
+ 	yNegative = true;
+ 	if (y == Long.MIN_VALUE)
+ 	  {
+ 	    if (rounding_mode == TRUNCATE)
+ 	      { // x != Long.Min_VALUE implies abs(x) < abs(y)
+ 		if (quotient != null)
+ 		  quotient.set(0);
+ 		if (remainder != null)
+ 		  remainder.set(x);
+ 	      }
+ 	    else
+ 	      divide(valueOf(x), valueOf(y),
+ 		      quotient, remainder, rounding_mode);
+ 	    return;
+ 	  }
+ 	y = -y;
+       }
+     else
+       yNegative = false;
+ 
+     long q = x / y;
+     long r = x % y;
+     boolean qNegative = xNegative ^ yNegative;
+ 
+     boolean add_one = false;
+     if (r != 0)
+       {
+ 	switch (rounding_mode)
+ 	  {
+ 	  case TRUNCATE:
+ 	    break;
+ 	  case CEILING:
+ 	  case FLOOR:
+ 	    if (qNegative == (rounding_mode == FLOOR))
+ 	      add_one = true;
+ 	    break;
+ 	  case ROUND:
+ 	    add_one = r > ((y - (q & 1)) >> 1);
+ 	    break;
+ 	  }
+       }
+     if (quotient != null)
+       {
+ 	if (add_one)
+ 	  q++;
+ 	if (qNegative)
+ 	  q = -q;
+ 	quotient.set(q);
+       }
+     if (remainder != null)
+       {
+ 	// The remainder is by definition: X-Q*Y
+ 	if (add_one)
+ 	  {
+ 	    // Subtract the remainder from Y.
+ 	    r = y - r;
+ 	    // In this case, abs(Q*Y) > abs(X).
+ 	    // So sign(remainder) = -sign(X).
+ 	    xNegative = ! xNegative;
+ 	  }
+ 	else
+ 	  {
+ 	    // If !add_one, then: abs(Q*Y) <= abs(X).
+ 	    // So sign(remainder) = sign(X).
+ 	  }
+ 	if (xNegative)
+ 	  r = -r;
+ 	remainder.set(r);
+       }
+   }
+ 
+   /** Divide two integers, yielding quotient and remainder.
+    * @param x the numerator in the division
+    * @param y the denominator in the division
+    * @param quotient is set to the quotient of the result (iff quotient!=null)
+    * @param remainder is set to the remainder of the result
+    *  (iff remainder!=null)
+    * @param rounding_mode one of FLOOR, CEILING, TRUNCATE, or ROUND.
+    */
+   private static void divide(BigInteger x, BigInteger y,
+ 			     BigInteger quotient, BigInteger remainder,
+ 			     int rounding_mode)
+   {
+     if ((x.words == null || x.ival <= 2)
+ 	&& (y.words == null || y.ival <= 2))
+       {
+ 	long x_l = x.longValue();
+ 	long y_l = y.longValue();
+ 	if (x_l != Long.MIN_VALUE && y_l != Long.MIN_VALUE)
+ 	  {
+ 	    divide(x_l, y_l, quotient, remainder, rounding_mode);
+ 	    return;
+ 	  }
+       }
+ 
+     boolean xNegative = x.isNegative();
+     boolean yNegative = y.isNegative();
+     boolean qNegative = xNegative ^ yNegative;
+ 
+     int ylen = y.words == null ? 1 : y.ival;
+     int[] ywords = new int[ylen];
+     y.getAbsolute(ywords);
+     while (ylen > 1 && ywords[ylen - 1] == 0)  ylen--;
+ 
+     int xlen = x.words == null ? 1 : x.ival;
+     int[] xwords = new int[xlen+2];
+     x.getAbsolute(xwords);
+     while (xlen > 1 && xwords[xlen-1] == 0)  xlen--;
+ 
+     int qlen, rlen;
+ 
+     int cmpval = MPN.cmp(xwords, xlen, ywords, ylen);
+     if (cmpval < 0)  // abs(x) < abs(y)
+       { // quotient = 0;  remainder = num.
+ 	int[] rwords = xwords;  xwords = ywords;  ywords = rwords;
+ 	rlen = xlen;  qlen = 1;  xwords[0] = 0;
+       }
+     else if (cmpval == 0)  // abs(x) == abs(y)
+       {
+ 	xwords[0] = 1;  qlen = 1;  // quotient = 1
+ 	ywords[0] = 0;  rlen = 1;  // remainder = 0;
+       }
+     else if (ylen == 1)
+       {
+ 	qlen = xlen;
+ 	// Need to leave room for a word of leading zeros if dividing by 1
+ 	// and the dividend has the high bit set.  It might be safe to
+ 	// increment qlen in all cases, but it certainly is only necessary
+ 	// in the following case.
+ 	if (ywords[0] == 1 && xwords[xlen-1] < 0)
+ 	  qlen++;
+ 	rlen = 1;
+ 	ywords[0] = MPN.divmod_1(xwords, xwords, xlen, ywords[0]);
+       }
+     else  // abs(x) > abs(y)
+       {
+ 	// Normalize the denominator, i.e. make its most significant bit set by
+ 	// shifting it normalization_steps bits to the left.  Also shift the
+ 	// numerator the same number of steps (to keep the quotient the same!).
+ 
+ 	int nshift = MPN.count_leading_zeros(ywords[ylen - 1]);
+ 	if (nshift != 0)
+ 	  {
+ 	    // Shift up the denominator setting the most significant bit of
+ 	    // the most significant word.
+ 	    MPN.lshift(ywords, 0, ywords, ylen, nshift);
+ 
+ 	    // Shift up the numerator, possibly introducing a new most
+ 	    // significant word.
+ 	    int x_high = MPN.lshift(xwords, 0, xwords, xlen, nshift);
+ 	    xwords[xlen++] = x_high;
+ 	  }
+ 
+ 	if (xlen == ylen)
+ 	  xwords[xlen++] = 0;
+ 	MPN.divide(xwords, xlen, ywords, ylen);
+ 	rlen = ylen;
+ 	MPN.rshift0 (ywords, xwords, 0, rlen, nshift);
+ 
+ 	qlen = xlen + 1 - ylen;
+ 	if (quotient != null)
+ 	  {
+ 	    for (int i = 0;  i < qlen;  i++)
+ 	      xwords[i] = xwords[i+ylen];
+ 	  }
+       }
+ 
+     if (ywords[rlen-1] < 0)
+       {
+         ywords[rlen] = 0;
+         rlen++;
+       }
+ 
+     // Now the quotient is in xwords, and the remainder is in ywords.
+ 
+     boolean add_one = false;
+     if (rlen > 1 || ywords[0] != 0)
+       { // Non-zero remainder i.e. in-exact quotient.
+ 	switch (rounding_mode)
+ 	  {
+ 	  case TRUNCATE:
+ 	    break;
+ 	  case CEILING:
+ 	  case FLOOR:
+ 	    if (qNegative == (rounding_mode == FLOOR))
+ 	      add_one = true;
+ 	    break;
+ 	  case ROUND:
+ 	    // int cmp = compareTo(remainder<<1, abs(y));
+ 	    BigInteger tmp = remainder == null ? new BigInteger() : remainder;
+ 	    tmp.set(ywords, rlen);
+ 	    tmp = shift(tmp, 1);
+ 	    if (yNegative)
+ 	      tmp.setNegative();
+ 	    int cmp = compareTo(tmp, y);
+ 	    // Now cmp == compareTo(sign(y)*(remainder<<1), y)
+ 	    if (yNegative)
+ 	      cmp = -cmp;
+ 	    add_one = (cmp == 1) || (cmp == 0 && (xwords[0]&1) != 0);
+ 	  }
+       }
+     if (quotient != null)
+       {
+ 	quotient.set(xwords, qlen);
+ 	if (qNegative)
+ 	  {
+ 	    if (add_one)  // -(quotient + 1) == ~(quotient)
+ 	      quotient.setInvert();
+ 	    else
+ 	      quotient.setNegative();
+ 	  }
+ 	else if (add_one)
+ 	  quotient.setAdd(1);
+       }
+     if (remainder != null)
+       {
+ 	// The remainder is by definition: X-Q*Y
+ 	remainder.set(ywords, rlen);
+ 	if (add_one)
+ 	  {
+ 	    // Subtract the remainder from Y:
+ 	    // abs(R) = abs(Y) - abs(orig_rem) = -(abs(orig_rem) - abs(Y)).
+ 	    BigInteger tmp;
+ 	    if (y.words == null)
+ 	      {
+ 		tmp = remainder;
+ 		tmp.set(yNegative ? ywords[0] + y.ival : ywords[0] - y.ival);
+ 	      }
+ 	    else
+ 	      tmp = BigInteger.add(remainder, y, yNegative ? 1 : -1);
+ 	    // Now tmp <= 0.
+ 	    // In this case, abs(Q) = 1 + floor(abs(X)/abs(Y)).
+ 	    // Hence, abs(Q*Y) > abs(X).
+ 	    // So sign(remainder) = -sign(X).
+ 	    if (xNegative)
+ 	      remainder.setNegative(tmp);
+ 	    else
+ 	      remainder.set(tmp);
+ 	  }
+ 	else
+ 	  {
+ 	    // If !add_one, then: abs(Q*Y) <= abs(X).
+ 	    // So sign(remainder) = sign(X).
+ 	    if (xNegative)
+ 	      remainder.setNegative();
+ 	  }
+       }
+   }
+ 
+   public BigInteger divide(BigInteger val)
+   {
+     if (val.isZero())
+       throw new ArithmeticException("divisor is zero");
+ 
+     BigInteger quot = new BigInteger();
+     divide(this, val, quot, null, TRUNCATE);
+     return quot.canonicalize();
+   }
+ 
+   public BigInteger remainder(BigInteger val)
+   {
+     if (val.isZero())
+       throw new ArithmeticException("divisor is zero");
+ 
+     BigInteger rem = new BigInteger();
+     divide(this, val, null, rem, TRUNCATE);
+     return rem.canonicalize();
+   }
+ 
+   public BigInteger[] divideAndRemainder(BigInteger val)
+   {
+     if (val.isZero())
+       throw new ArithmeticException("divisor is zero");
+ 
+     BigInteger[] result = new BigInteger[2];
+     result[0] = new BigInteger();
+     result[1] = new BigInteger();
+     divide(this, val, result[0], result[1], TRUNCATE);
+     result[0].canonicalize();
+     result[1].canonicalize();
+     return result;
+   }
+ 
+   public BigInteger mod(BigInteger m)
+   {
+     if (m.isNegative() || m.isZero())
+       throw new ArithmeticException("non-positive modulus");
+ 
+     BigInteger rem = new BigInteger();
+     divide(this, m, null, rem, FLOOR);
+     return rem.canonicalize();
+   }
+ 
+   /** Calculate the integral power of a BigInteger.
+    * @param exponent the exponent (must be non-negative)
+    */
+   public BigInteger pow(int exponent)
+   {
+     if (exponent <= 0)
+       {
+ 	if (exponent == 0)
+ 	  return ONE;
+ 	  throw new ArithmeticException("negative exponent");
+       }
+     if (isZero())
+       return this;
+     int plen = words == null ? 1 : ival;  // Length of pow2.
+     int blen = ((bitLength() * exponent) >> 5) + 2 * plen;
+     boolean negative = isNegative() && (exponent & 1) != 0;
+     int[] pow2 = new int [blen];
+     int[] rwords = new int [blen];
+     int[] work = new int [blen];
+     getAbsolute(pow2);	// pow2 = abs(this);
+     int rlen = 1;
+     rwords[0] = 1; // rwords = 1;
+     for (;;)  // for (i = 0;  ; i++)
+       {
+ 	// pow2 == this**(2**i)
+ 	// prod = this**(sum(j=0..i-1, (exponent>>j)&1))
+ 	if ((exponent & 1) != 0)
+ 	  { // r *= pow2
+ 	    MPN.mul(work, pow2, plen, rwords, rlen);
+ 	    int[] temp = work;  work = rwords;  rwords = temp;
+ 	    rlen += plen;
+ 	    while (rwords[rlen - 1] == 0)  rlen--;
+ 	  }
+ 	exponent >>= 1;
+ 	if (exponent == 0)
+ 	  break;
+ 	// pow2 *= pow2;
+ 	MPN.mul(work, pow2, plen, pow2, plen);
+ 	int[] temp = work;  work = pow2;  pow2 = temp;  // swap to avoid a copy
+ 	plen *= 2;
+ 	while (pow2[plen - 1] == 0)  plen--;
+       }
+     if (rwords[rlen - 1] < 0)
+       rlen++;
+     if (negative)
+       negate(rwords, rwords, rlen);
+     return BigInteger.make(rwords, rlen);
+   }
+ 
+   private static int[] euclidInv(int a, int b, int prevDiv)
+   {
+     if (b == 0)
+       throw new ArithmeticException("not invertible");
+ 
+     if (b == 1)
+ 	// Success:  values are indeed invertible!
+ 	// Bottom of the recursion reached; start unwinding.
+ 	return new int[] { -prevDiv, 1 };
+ 
+     int[] xy = euclidInv(b, a % b, a / b);	// Recursion happens here.
+     a = xy[0]; // use our local copy of 'a' as a work var
+     xy[0] = a * -prevDiv + xy[1];
+     xy[1] = a;
+     return xy;
+   }
+ 
+   private static void euclidInv(BigInteger a, BigInteger b,
+                                 BigInteger prevDiv, BigInteger[] xy)
+   {
+     if (b.isZero())
+       throw new ArithmeticException("not invertible");
+ 
+     if (b.isOne())
+       {
+ 	// Success:  values are indeed invertible!
+ 	// Bottom of the recursion reached; start unwinding.
+ 	xy[0] = neg(prevDiv);
+         xy[1] = ONE;
+ 	return;
+       }
+ 
+     // Recursion happens in the following conditional!
+ 
+     // If a just contains an int, then use integer math for the rest.
+     if (a.words == null)
+       {
+         int[] xyInt = euclidInv(b.ival, a.ival % b.ival, a.ival / b.ival);
+ 	xy[0] = new BigInteger(xyInt[0]);
+         xy[1] = new BigInteger(xyInt[1]);
+       }
+     else
+       {
+ 	BigInteger rem = new BigInteger();
+ 	BigInteger quot = new BigInteger();
+ 	divide(a, b, quot, rem, FLOOR);
+         // quot and rem may not be in canonical form. ensure
+         rem.canonicalize();
+         quot.canonicalize();
+ 	euclidInv(b, rem, quot, xy);
+       }
+ 
+     BigInteger t = xy[0];
+     xy[0] = add(xy[1], times(t, prevDiv), -1);
+     xy[1] = t;
+   }
+ 
+   public BigInteger modInverse(BigInteger y)
+   {
+     if (y.isNegative() || y.isZero())
+       throw new ArithmeticException("non-positive modulo");
+ 
+     // Degenerate cases.
+     if (y.isOne())
+       return ZERO;
+     if (isOne())
+       return ONE;
+ 
+     // Use Euclid's algorithm as in gcd() but do this recursively
+     // rather than in a loop so we can use the intermediate results as we
+     // unwind from the recursion.
+     // Used http://www.math.nmsu.edu/~crypto/EuclideanAlgo.html as reference.
+     BigInteger result = new BigInteger();
+     boolean swapped = false;
+ 
+     if (y.words == null)
+       {
+ 	// The result is guaranteed to be less than the modulus, y (which is
+ 	// an int), so simplify this by working with the int result of this
+ 	// modulo y.  Also, if this is negative, make it positive via modulo
+ 	// math.  Note that BigInteger.mod() must be used even if this is
+ 	// already an int as the % operator would provide a negative result if
+ 	// this is negative, BigInteger.mod() never returns negative values.
+         int xval = (words != null || isNegative()) ? mod(y).ival : ival;
+         int yval = y.ival;
+ 
+ 	// Swap values so x > y.
+ 	if (yval > xval)
+ 	  {
+ 	    int tmp = xval; xval = yval; yval = tmp;
+ 	    swapped = true;
+ 	  }
+ 	// Normally, the result is in the 2nd element of the array, but
+ 	// if originally x < y, then x and y were swapped and the result
+ 	// is in the 1st element of the array.
+ 	result.ival =
+ 	  euclidInv(yval, xval % yval, xval / yval)[swapped ? 0 : 1];
+ 
+ 	// Result can't be negative, so make it positive by adding the
+ 	// original modulus, y.ival (not the possibly "swapped" yval).
+ 	if (result.ival < 0)
+ 	  result.ival += y.ival;
+       }
+     else
+       {
+ 	// As above, force this to be a positive value via modulo math.
+ 	BigInteger x = isNegative() ? this.mod(y) : this;
+ 
+ 	// Swap values so x > y.
+ 	if (x.compareTo(y) < 0)
+ 	  {
+ 	    result = x; x = y; y = result; // use 'result' as a work var
+ 	    swapped = true;
+ 	  }
+ 	// As above (for ints), result will be in the 2nd element unless
+ 	// the original x and y were swapped.
+ 	BigInteger rem = new BigInteger();
+ 	BigInteger quot = new BigInteger();
+ 	divide(x, y, quot, rem, FLOOR);
+         // quot and rem may not be in canonical form. ensure
+         rem.canonicalize();
+         quot.canonicalize();
+ 	BigInteger[] xy = new BigInteger[2];
+ 	euclidInv(y, rem, quot, xy);
+ 	result = swapped ? xy[0] : xy[1];
+ 
+ 	// Result can't be negative, so make it positive by adding the
+ 	// original modulus, y (which is now x if they were swapped).
+ 	if (result.isNegative())
+ 	  result = add(result, swapped ? x : y, 1);
+       }
+     
+     return result;
+   }
+ 
+   public BigInteger modPow(BigInteger exponent, BigInteger m)
+   {
+     if (m.isNegative() || m.isZero())
+       throw new ArithmeticException("non-positive modulo");
+ 
+     if (exponent.isNegative())
+       return modInverse(m);
+     if (exponent.isOne())
+       return mod(m);
+ 
+     // To do this naively by first raising this to the power of exponent
+     // and then performing modulo m would be extremely expensive, especially
+     // for very large numbers.  The solution is found in Number Theory
+     // where a combination of partial powers and moduli can be done easily.
+     //
+     // We'll use the algorithm for Additive Chaining which can be found on
+     // p. 244 of "Applied Cryptography, Second Edition" by Bruce Schneier.
+     BigInteger s = ONE;
+     BigInteger t = this;
+     BigInteger u = exponent;
+ 
+     while (!u.isZero())
+       {
+ 	if (u.and(ONE).isOne())
+ 	  s = times(s, t).mod(m);
+ 	u = u.shiftRight(1);
+ 	t = times(t, t).mod(m);
+       }
+ 
+     return s;
+   }
+ 
+   /** Calculate Greatest Common Divisor for non-negative ints. */
+   private static int gcd(int a, int b)
+   {
+     // Euclid's algorithm, copied from libg++.
+     int tmp;
+     if (b > a)
+       {
+ 	tmp = a; a = b; b = tmp;
+       }
+     for(;;)
+       {
+ 	if (b == 0)
+ 	  return a;
+         if (b == 1)
+ 	  return b;
+         tmp = b;
+ 	    b = a % b;
+ 	    a = tmp;
+ 	  }
+       }
+ 
+   public BigInteger gcd(BigInteger y)
+   {
+     int xval = ival;
+     int yval = y.ival;
+     if (words == null)
+       {
+ 	if (xval == 0)
+ 	  return abs(y);
+ 	if (y.words == null
+ 	    && xval != Integer.MIN_VALUE && yval != Integer.MIN_VALUE)
+ 	  {
+ 	    if (xval < 0)
+ 	      xval = -xval;
+ 	    if (yval < 0)
+ 	      yval = -yval;
+ 	    return valueOf(gcd(xval, yval));
+ 	  }
+ 	xval = 1;
+       }
+     if (y.words == null)
+       {
+ 	if (yval == 0)
+ 	  return abs(this);
+ 	yval = 1;
+       }
+     int len = (xval > yval ? xval : yval) + 1;
+     int[] xwords = new int[len];
+     int[] ywords = new int[len];
+     getAbsolute(xwords);
+     y.getAbsolute(ywords);
+     len = MPN.gcd(xwords, ywords, len);
+     BigInteger result = new BigInteger(0);
+     result.ival = len;
+     result.words = xwords;
+     return result.canonicalize();
+   }
+ 
+   /**
+    * <p>Returns <code>true</code> if this BigInteger is probably prime,
+    * <code>false</code> if it's definitely composite. If <code>certainty</code>
+    * is <code><= 0</code>, <code>true</code> is returned.</p>
+    *
+    * @param certainty a measure of the uncertainty that the caller is willing
+    * to tolerate: if the call returns <code>true</code> the probability that
+    * this BigInteger is prime exceeds <code>(1 - 1/2<sup>certainty</sup>)</code>.
+    * The execution time of this method is proportional to the value of this
+    * parameter.
+    * @return <code>true</code> if this BigInteger is probably prime,
+    * <code>false</code> if it's definitely composite.
+    */
+   public boolean isProbablePrime(int certainty)
+   {
+     if (certainty < 1)
+       return true;
+ 
+     /** We'll use the Rabin-Miller algorithm for doing a probabilistic
+      * primality test.  It is fast, easy and has faster decreasing odds of a
+      * composite passing than with other tests.  This means that this
+      * method will actually have a probability much greater than the
+      * 1 - .5^certainty specified in the JCL (p. 117), but I don't think
+      * anyone will complain about better performance with greater certainty.
+      *
+      * The Rabin-Miller algorithm can be found on pp. 259-261 of "Applied
+      * Cryptography, Second Edition" by Bruce Schneier.
+      */
+ 
+     // First rule out small prime factors
+     BigInteger rem = new BigInteger();
+     int i;
+     for (i = 0; i < primes.length; i++)
+       {
+ 	if (words == null && ival == primes[i])
+ 	  return true;
+ 
+         divide(this, smallFixNums[primes[i] - minFixNum], null, rem, TRUNCATE);
+         if (rem.canonicalize().isZero())
+ 	  return false;
+       }
+ 
+     // Now perform the Rabin-Miller test.
+ 
+     // Set b to the number of times 2 evenly divides (this - 1).
+     // I.e. 2^b is the largest power of 2 that divides (this - 1).
+     BigInteger pMinus1 = add(this, -1);
+     int b = pMinus1.getLowestSetBit();
+ 
+     // Set m such that this = 1 + 2^b * m.
+     BigInteger m = pMinus1.divide(valueOf(2L << b - 1));
+ 
+     // The HAC (Handbook of Applied Cryptography), Alfred Menezes & al. Note
+     // 4.49 (controlling the error probability) gives the number of trials
+     // for an error probability of 1/2**80, given the number of bits in the
+     // number to test.  we shall use these numbers as is if/when 'certainty'
+     // is less or equal to 80, and twice as much if it's greater.
+     int bits = this.bitLength();
+     for (i = 0; i < k.length; i++)
+       if (bits <= k[i])
+         break;
+     int trials = t[i];
+     if (certainty > 80)
+       trials *= 2;
+     BigInteger z;
+     for (int t = 0; t < trials; t++)
+       {
+         // The HAC (Handbook of Applied Cryptography), Alfred Menezes & al.
+         // Remark 4.28 states: "...A strategy that is sometimes employed
+         // is to fix the bases a to be the first few primes instead of
+         // choosing them at random.
+ 	z = smallFixNums[primes[t] - minFixNum].modPow(m, this);
+ 	if (z.isOne() || z.equals(pMinus1))
+ 	  continue;			// Passes the test; may be prime.
+ 
+ 	for (i = 0; i < b; )
+ 	  {
+ 	    if (z.isOne())
+ 	      return false;
+ 	    i++;
+ 	    if (z.equals(pMinus1))
+ 	      break;			// Passes the test; may be prime.
+ 
+ 	    z = z.modPow(valueOf(2), this);
+ 	  }
+ 
+ 	if (i == b && !z.equals(pMinus1))
+ 	  return false;
+       }
+     return true;
+   }
+ 
+   private void setInvert()
+   {
+     if (words == null)
+       ival = ~ival;
+     else
+       {
+ 	for (int i = ival;  --i >= 0; )
+ 	  words[i] = ~words[i];
+       }
+   }
+ 
+   private void setShiftLeft(BigInteger x, int count)
+   {
+     int[] xwords;
+     int xlen;
+     if (x.words == null)
+       {
+ 	if (count < 32)
+ 	  {
+ 	    set((long) x.ival << count);
+ 	    return;
+ 	  }
+ 	xwords = new int[1];
+ 	xwords[0] = x.ival;
+ 	xlen = 1;
+       }
+     else
+       {
+ 	xwords = x.words;
+ 	xlen = x.ival;
+       }
+     int word_count = count >> 5;
+     count &= 31;
+     int new_len = xlen + word_count;
+     if (count == 0)
+       {
+ 	realloc(new_len);
+ 	for (int i = xlen;  --i >= 0; )
+ 	  words[i+word_count] = xwords[i];
+       }
+     else
+       {
+ 	new_len++;
+ 	realloc(new_len);
+ 	int shift_out = MPN.lshift(words, word_count, xwords, xlen, count);
+ 	count = 32 - count;
+ 	words[new_len-1] = (shift_out << count) >> count;  // sign-extend.
+       }
+     ival = new_len;
+     for (int i = word_count;  --i >= 0; )
+       words[i] = 0;
+   }
+ 
+   private void setShiftRight(BigInteger x, int count)
+   {
+     if (x.words == null)
+       set(count < 32 ? x.ival >> count : x.ival < 0 ? -1 : 0);
+     else if (count == 0)
+       set(x);
+     else
+       {
+ 	boolean neg = x.isNegative();
+ 	int word_count = count >> 5;
+ 	count &= 31;
+ 	int d_len = x.ival - word_count;
+ 	if (d_len <= 0)
+ 	  set(neg ? -1 : 0);
+ 	else
+ 	  {
+ 	    if (words == null || words.length < d_len)
+ 	      realloc(d_len);
+ 	    MPN.rshift0 (words, x.words, word_count, d_len, count);
+ 	    ival = d_len;
+ 	    if (neg)
+ 	      words[d_len-1] |= -2 << (31 - count);
+ 	  }
+       }
+   }
+ 
+   private void setShift(BigInteger x, int count)
+   {
+     if (count > 0)
+       setShiftLeft(x, count);
+     else
+       setShiftRight(x, -count);
+   }
+ 
+   private static BigInteger shift(BigInteger x, int count)
+   {
+     if (x.words == null)
+       {
+ 	if (count <= 0)
+ 	  return valueOf(count > -32 ? x.ival >> (-count) : x.ival < 0 ? -1 : 0);
+ 	if (count < 32)
+ 	  return valueOf((long) x.ival << count);
+       }
+     if (count == 0)
+       return x;
+     BigInteger result = new BigInteger(0);
+     result.setShift(x, count);
+     return result.canonicalize();
+   }
+ 
+   public BigInteger shiftLeft(int n)
+   {
+     return shift(this, n);
+   }
+ 
+   public BigInteger shiftRight(int n)
+   {
+     return shift(this, -n);
+   }
+ 
+   private void format(int radix, StringBuffer buffer)
+   {
+     if (words == null)
+       buffer.append(Integer.toString(ival, radix));
+     else if (ival <= 2)
+       buffer.append(Long.toString(longValue(), radix));
+     else
+       {
+ 	boolean neg = isNegative();
+ 	int[] work;
+ 	if (neg || radix != 16)
+ 	  {
+ 	    work = new int[ival];
+ 	    getAbsolute(work);
+ 	  }
+ 	else
+ 	  work = words;
+ 	int len = ival;
+ 
+ 	if (radix == 16)
+ 	  {
+ 	    if (neg)
+ 	      buffer.append('-');
+ 	    int buf_start = buffer.length();
+ 	    for (int i = len;  --i >= 0; )
+ 	      {
+ 		int word = work[i];
+ 		for (int j = 8;  --j >= 0; )
+ 		  {
+ 		    int hex_digit = (word >> (4 * j)) & 0xF;
+ 		    // Suppress leading zeros:
+ 		    if (hex_digit > 0 || buffer.length() > buf_start)
+ 		      buffer.append(Character.forDigit(hex_digit, 16));
+ 		  }
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    int i = buffer.length();
+ 	    for (;;)
+ 	      {
+ 		int digit = MPN.divmod_1(work, work, len, radix);
+ 		buffer.append(Character.forDigit(digit, radix));
+ 		while (len > 0 && work[len-1] == 0) len--;
+ 		if (len == 0)
+ 		  break;
+ 	      }
+ 	    if (neg)
+ 	      buffer.append('-');
+ 	    /* Reverse buffer. */
+ 	    int j = buffer.length() - 1;
+ 	    while (i < j)
+ 	      {
+ 		char tmp = buffer.charAt(i);
+ 		buffer.setCharAt(i, buffer.charAt(j));
+ 		buffer.setCharAt(j, tmp);
+ 		i++;  j--;
+ 	      }
+ 	  }
+       }
+   }
+ 
+   public String toString()
+   {
+     return toString(10);
+   }
+ 
+   public String toString(int radix)
+   {
+     if (words == null)
+       return Integer.toString(ival, radix);
+     if (ival <= 2)
+       return Long.toString(longValue(), radix);
+     int buf_size = ival * (MPN.chars_per_word(radix) + 1);
+     StringBuffer buffer = new StringBuffer(buf_size);
+     format(radix, buffer);
+     return buffer.toString();
+   }
+ 
+   public int intValue()
+   {
+     if (words == null)
+       return ival;
+     return words[0];
+   }
+ 
+   public long longValue()
+   {
+     if (words == null)
+       return ival;
+     if (ival == 1)
+       return words[0];
+     return ((long)words[1] << 32) + ((long)words[0] & 0xffffffffL);
+   }
+ 
+   public int hashCode()
+   {
+     // FIXME: May not match hashcode of JDK.
+     return words == null ? ival : (words[0] + words[ival - 1]);
+   }
+ 
+   /* Assumes x and y are both canonicalized. */
+   private static boolean equals(BigInteger x, BigInteger y)
+   {
+     if (x.words == null && y.words == null)
+       return x.ival == y.ival;
+     if (x.words == null || y.words == null || x.ival != y.ival)
+       return false;
+     for (int i = x.ival; --i >= 0; )
+       {
+ 	if (x.words[i] != y.words[i])
+ 	  return false;
+       }
+     return true;
+   }
+ 
+   /* Assumes this and obj are both canonicalized. */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof BigInteger))
+       return false;
+     return equals(this, (BigInteger) obj);
+   }
+ 
+   private static BigInteger valueOf(String s, int radix)
+        throws NumberFormatException
+   {
+     int len = s.length();
+     // Testing (len < MPN.chars_per_word(radix)) would be more accurate,
+     // but slightly more expensive, for little practical gain.
+     if (len <= 15 && radix <= 16)
+       return valueOf(Long.parseLong(s, radix));
+     
+     int byte_len = 0;
+     byte[] bytes = new byte[len];
+     boolean negative = false;
+     for (int i = 0;  i < len;  i++)
+       {
+ 	char ch = s.charAt(i);
+ 	if (ch == '-')
+ 	  negative = true;
+ 	else if (ch == '_' || (byte_len == 0 && (ch == ' ' || ch == '\t')))
+ 	  continue;
+ 	else
+ 	  {
+ 	    int digit = Character.digit(ch, radix);
+ 	    if (digit < 0)
+ 	      break;
+ 	    bytes[byte_len++] = (byte) digit;
+ 	  }
+       }
+     return valueOf(bytes, byte_len, negative, radix);
+   }
+ 
+   private static BigInteger valueOf(byte[] digits, int byte_len,
+ 				    boolean negative, int radix)
+   {
+     int chars_per_word = MPN.chars_per_word(radix);
+     int[] words = new int[byte_len / chars_per_word + 1];
+     int size = MPN.set_str(words, digits, byte_len, radix);
+     if (size == 0)
+       return ZERO;
+     if (words[size-1] < 0)
+       words[size++] = 0;
+     if (negative)
+       negate(words, words, size);
+     return make(words, size);
+   }
+ 
+   public double doubleValue()
+   {
+     if (words == null)
+       return (double) ival;
+     if (ival <= 2)
+       return (double) longValue();
+     if (isNegative())
+       return neg(this).roundToDouble(0, true, false);
+       return roundToDouble(0, false, false);
+   }
+ 
+   public float floatValue()
+   {
+     return (float) doubleValue();
+   }
+ 
+   /** Return true if any of the lowest n bits are one.
+    * (false if n is negative).  */
+   private boolean checkBits(int n)
+   {
+     if (n <= 0)
+       return false;
+     if (words == null)
+       return n > 31 || ((ival & ((1 << n) - 1)) != 0);
+     int i;
+     for (i = 0; i < (n >> 5) ; i++)
+       if (words[i] != 0)
+ 	return true;
+     return (n & 31) != 0 && (words[i] & ((1 << (n & 31)) - 1)) != 0;
+   }
+ 
+   /** Convert a semi-processed BigInteger to double.
+    * Number must be non-negative.  Multiplies by a power of two, applies sign,
+    * and converts to double, with the usual java rounding.
+    * @param exp power of two, positive or negative, by which to multiply
+    * @param neg true if negative
+    * @param remainder true if the BigInteger is the result of a truncating
+    * division that had non-zero remainder.  To ensure proper rounding in
+    * this case, the BigInteger must have at least 54 bits.  */
+   private double roundToDouble(int exp, boolean neg, boolean remainder)
+   {
+     // Compute length.
+     int il = bitLength();
+ 
+     // Exponent when normalized to have decimal point directly after
+     // leading one.  This is stored excess 1023 in the exponent bit field.
+     exp += il - 1;
+ 
+     // Gross underflow.  If exp == -1075, we let the rounding
+     // computation determine whether it is minval or 0 (which are just
+     // 0x0000 0000 0000 0001 and 0x0000 0000 0000 0000 as bit
+     // patterns).
+     if (exp < -1075)
+       return neg ? -0.0 : 0.0;
+ 
+     // gross overflow
+     if (exp > 1023)
+       return neg ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY;
+ 
+     // number of bits in mantissa, including the leading one.
+     // 53 unless it's denormalized
+     int ml = (exp >= -1022 ? 53 : 53 + exp + 1022);
+ 
+     // Get top ml + 1 bits.  The extra one is for rounding.
+     long m;
+     int excess_bits = il - (ml + 1);
+     if (excess_bits > 0)
+       m = ((words == null) ? ival >> excess_bits
+ 	   : MPN.rshift_long(words, ival, excess_bits));
+     else
+       m = longValue() << (- excess_bits);
+ 
+     // Special rounding for maxval.  If the number exceeds maxval by
+     // any amount, even if it's less than half a step, it overflows.
+     if (exp == 1023 && ((m >> 1) == (1L << 53) - 1))
+       {
+ 	if (remainder || checkBits(il - ml))
+ 	  return neg ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY;
+ 	else
+ 	  return neg ? - Double.MAX_VALUE : Double.MAX_VALUE;
+       }
+ 
+     // Normal round-to-even rule: round up if the bit dropped is a one, and
+     // the bit above it or any of the bits below it is a one.
+     if ((m & 1) == 1
+ 	&& ((m & 2) == 2 || remainder || checkBits(excess_bits)))
+       {
+ 	m += 2;
+ 	// Check if we overflowed the mantissa
+ 	if ((m & (1L << 54)) != 0)
+ 	  {
+ 	    exp++;
+ 	    // renormalize
+ 	    m >>= 1;
+ 	  }
+ 	// Check if a denormalized mantissa was just rounded up to a
+ 	// normalized one.
+ 	else if (ml == 52 && (m & (1L << 53)) != 0)
+ 	  exp++;
+       }
+ 	
+     // Discard the rounding bit
+     m >>= 1;
+ 
+     long bits_sign = neg ? (1L << 63) : 0;
+     exp += 1023;
+     long bits_exp = (exp <= 0) ? 0 : ((long)exp) << 52;
+     long bits_mant = m & ~(1L << 52);
+     return Double.longBitsToDouble(bits_sign | bits_exp | bits_mant);
+   }
+ 
+   /** Copy the abolute value of this into an array of words.
+    * Assumes words.length >= (this.words == null ? 1 : this.ival).
+    * Result is zero-extended, but need not be a valid 2's complement number.
+    */
+   private void getAbsolute(int[] words)
+   {
+     int len;
+     if (this.words == null)
+       {
+ 	len = 1;
+ 	words[0] = this.ival;
+       }
+     else
+       {
+ 	len = this.ival;
+ 	for (int i = len;  --i >= 0; )
+ 	  words[i] = this.words[i];
+       }
+     if (words[len - 1] < 0)
+       negate(words, words, len);
+     for (int i = words.length;  --i > len; )
+       words[i] = 0;
+   }
+ 
+   /** Set dest[0:len-1] to the negation of src[0:len-1].
+    * Return true if overflow (i.e. if src is -2**(32*len-1)).
+    * Ok for src==dest. */
+   private static boolean negate(int[] dest, int[] src, int len)
+   {
+     long carry = 1;
+     boolean negative = src[len-1] < 0;
+     for (int i = 0;  i < len;  i++)
+       {
+         carry += ((long) (~src[i]) & 0xffffffffL);
+         dest[i] = (int) carry;
+         carry >>= 32;
+       }
+     return (negative && dest[len-1] < 0);
+   }
+ 
+   /** Destructively set this to the negative of x.
+    * It is OK if x==this.*/
+   private void setNegative(BigInteger x)
+   {
+     int len = x.ival;
+     if (x.words == null)
+       {
+ 	if (len == Integer.MIN_VALUE)
+ 	  set(- (long) len);
+ 	else
+ 	  set(-len);
+ 	return;
+       }
+     realloc(len + 1);
+     if (negate(words, x.words, len))
+       words[len++] = 0;
+     ival = len;
+   }
+ 
+   /** Destructively negate this. */
+   private void setNegative()
+   {
+     setNegative(this);
+   }
+ 
+   private static BigInteger abs(BigInteger x)
+   {
+     return x.isNegative() ? neg(x) : x;
+   }
+ 
+   public BigInteger abs()
+   {
+     return abs(this);
+   }
+ 
+   private static BigInteger neg(BigInteger x)
+   {
+     if (x.words == null && x.ival != Integer.MIN_VALUE)
+       return valueOf(- x.ival);
+     BigInteger result = new BigInteger(0);
+     result.setNegative(x);
+     return result.canonicalize();
+   }
+ 
+   public BigInteger negate()
+   {
+     return neg(this);
+   }
+ 
+   /** Calculates ceiling(log2(this < 0 ? -this : this+1))
+    * See Common Lisp: the Language, 2nd ed, p. 361.
+    */
+   public int bitLength()
+   {
+     if (words == null)
+       return MPN.intLength(ival);
+       return MPN.intLength(words, ival);
+   }
+ 
+   public byte[] toByteArray()
+   {
+     // Determine number of bytes needed.  The method bitlength returns
+     // the size without the sign bit, so add one bit for that and then
+     // add 7 more to emulate the ceil function using integer math.
+     byte[] bytes = new byte[(bitLength() + 1 + 7) / 8];
+     int nbytes = bytes.length;
+ 
+     int wptr = 0;
+     int word;
+ 
+     // Deal with words array until one word or less is left to process.
+     // If BigInteger is an int, then it is in ival and nbytes will be <= 4.
+     while (nbytes > 4)
+       {
+ 	word = words[wptr++];
+ 	for (int i = 4; i > 0; --i, word >>= 8)
+           bytes[--nbytes] = (byte) word;
+       }
+ 
+     // Deal with the last few bytes.  If BigInteger is an int, use ival.
+     word = (words == null) ? ival : words[wptr];
+     for ( ; nbytes > 0; word >>= 8)
+       bytes[--nbytes] = (byte) word;
+ 
+     return bytes;
+   }
+ 
+   /** Return the boolean opcode (for bitOp) for swapped operands.
+    * I.e. bitOp(swappedOp(op), x, y) == bitOp(op, y, x).
+    */
+   private static int swappedOp(int op)
+   {
+     return
+     "\000\001\004\005\002\003\006\007\010\011\014\015\012\013\016\017"
+     .charAt(op);
+   }
+ 
+   /** Do one the the 16 possible bit-wise operations of two BigIntegers. */
+   private static BigInteger bitOp(int op, BigInteger x, BigInteger y)
+   {
+     switch (op)
+       {
+         case 0:  return ZERO;
+         case 1:  return x.and(y);
+         case 3:  return x;
+         case 5:  return y;
+         case 15: return valueOf(-1);
+       }
+     BigInteger result = new BigInteger();
+     setBitOp(result, op, x, y);
+     return result.canonicalize();
+   }
+ 
+   /** Do one the the 16 possible bit-wise operations of two BigIntegers. */
+   private static void setBitOp(BigInteger result, int op,
+ 			       BigInteger x, BigInteger y)
+   {
+     if (y.words == null) ;
+     else if (x.words == null || x.ival < y.ival)
+       {
+ 	BigInteger temp = x;  x = y;  y = temp;
+ 	op = swappedOp(op);
+       }
+     int xi;
+     int yi;
+     int xlen, ylen;
+     if (y.words == null)
+       {
+ 	yi = y.ival;
+ 	ylen = 1;
+       }
+     else
+       {
+ 	yi = y.words[0];
+ 	ylen = y.ival;
+       }
+     if (x.words == null)
+       {
+ 	xi = x.ival;
+ 	xlen = 1;
+       }
+     else
+       {
+ 	xi = x.words[0];
+ 	xlen = x.ival;
+       }
+     if (xlen > 1)
+       result.realloc(xlen);
+     int[] w = result.words;
+     int i = 0;
+     // Code for how to handle the remainder of x.
+     // 0:  Truncate to length of y.
+     // 1:  Copy rest of x.
+     // 2:  Invert rest of x.
+     int finish = 0;
+     int ni;
+     switch (op)
+       {
+       case 0:  // clr
+ 	ni = 0;
+ 	break;
+       case 1: // and
+ 	for (;;)
+ 	  {
+ 	    ni = xi & yi;
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	if (yi < 0) finish = 1;
+ 	break;
+       case 2: // andc2
+ 	for (;;)
+ 	  {
+ 	    ni = xi & ~yi;
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	if (yi >= 0) finish = 1;
+ 	break;
+       case 3:  // copy x
+ 	ni = xi;
+ 	finish = 1;  // Copy rest
+ 	break;
+       case 4: // andc1
+ 	for (;;)
+ 	  {
+ 	    ni = ~xi & yi;
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	if (yi < 0) finish = 2;
+ 	break;
+       case 5: // copy y
+ 	for (;;)
+ 	  {
+ 	    ni = yi;
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	break;
+       case 6:  // xor
+ 	for (;;)
+ 	  {
+ 	    ni = xi ^ yi;
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	finish = yi < 0 ? 2 : 1;
+ 	break;
+       case 7:  // ior
+ 	for (;;)
+ 	  {
+ 	    ni = xi | yi;
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	if (yi >= 0) finish = 1;
+ 	break;
+       case 8:  // nor
+ 	for (;;)
+ 	  {
+ 	    ni = ~(xi | yi);
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	if (yi >= 0)  finish = 2;
+ 	break;
+       case 9:  // eqv [exclusive nor]
+ 	for (;;)
+ 	  {
+ 	    ni = ~(xi ^ yi);
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	finish = yi >= 0 ? 2 : 1;
+ 	break;
+       case 10:  // c2
+ 	for (;;)
+ 	  {
+ 	    ni = ~yi;
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	break;
+       case 11:  // orc2
+ 	for (;;)
+ 	  {
+ 	    ni = xi | ~yi;
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	if (yi < 0)  finish = 1;
+ 	break;
+       case 12:  // c1
+ 	ni = ~xi;
+ 	finish = 2;
+ 	break;
+       case 13:  // orc1
+ 	for (;;)
+ 	  {
+ 	    ni = ~xi | yi;
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	if (yi >= 0) finish = 2;
+ 	break;
+       case 14:  // nand
+ 	for (;;)
+ 	  {
+ 	    ni = ~(xi & yi);
+ 	    if (i+1 >= ylen) break;
+ 	    w[i++] = ni;  xi = x.words[i];  yi = y.words[i];
+ 	  }
+ 	if (yi < 0) finish = 2;
+ 	break;
+       default:
+       case 15:  // set
+ 	ni = -1;
+ 	break;
+       }
+     // Here i==ylen-1; w[0]..w[i-1] have the correct result;
+     // and ni contains the correct result for w[i+1].
+     if (i+1 == xlen)
+       finish = 0;
+     switch (finish)
+       {
+       case 0:
+ 	if (i == 0 && w == null)
+ 	  {
+ 	    result.ival = ni;
+ 	    return;
+ 	  }
+ 	w[i++] = ni;
+ 	break;
+       case 1:  w[i] = ni;  while (++i < xlen)  w[i] = x.words[i];  break;
+       case 2:  w[i] = ni;  while (++i < xlen)  w[i] = ~x.words[i];  break;
+       }
+     result.ival = i;
+   }
+ 
+   /** Return the logical (bit-wise) "and" of a BigInteger and an int. */
+   private static BigInteger and(BigInteger x, int y)
+   {
+     if (x.words == null)
+       return valueOf(x.ival & y);
+     if (y >= 0)
+       return valueOf(x.words[0] & y);
+     int len = x.ival;
+     int[] words = new int[len];
+     words[0] = x.words[0] & y;
+     while (--len > 0)
+       words[len] = x.words[len];
+     return make(words, x.ival);
+   }
+ 
+   /** Return the logical (bit-wise) "and" of two BigIntegers. */
+   public BigInteger and(BigInteger y)
+   {
+     if (y.words == null)
+       return and(this, y.ival);
+     else if (words == null)
+       return and(y, ival);
+ 
+     BigInteger x = this;
+     if (ival < y.ival)
+       {
+         BigInteger temp = this;  x = y;  y = temp;
+       }
+     int i;
+     int len = y.isNegative() ? x.ival : y.ival;
+     int[] words = new int[len];
+     for (i = 0;  i < y.ival;  i++)
+       words[i] = x.words[i] & y.words[i];
+     for ( ; i < len;  i++)
+       words[i] = x.words[i];
+     return make(words, len);
+   }
+ 
+   /** Return the logical (bit-wise) "(inclusive) or" of two BigIntegers. */
+   public BigInteger or(BigInteger y)
+   {
+     return bitOp(7, this, y);
+   }
+ 
+   /** Return the logical (bit-wise) "exclusive or" of two BigIntegers. */
+   public BigInteger xor(BigInteger y)
+   {
+     return bitOp(6, this, y);
+   }
+ 
+   /** Return the logical (bit-wise) negation of a BigInteger. */
+   public BigInteger not()
+   {
+     return bitOp(12, this, ZERO);
+   }
+ 
+   public BigInteger andNot(BigInteger val)
+   {
+     return and(val.not());
+   }
+ 
+   public BigInteger clearBit(int n)
+   {
+     if (n < 0)
+       throw new ArithmeticException();
+ 
+     return and(ONE.shiftLeft(n).not());
+   }
+ 
+   public BigInteger setBit(int n)
+   {
+     if (n < 0)
+       throw new ArithmeticException();
+ 
+     return or(ONE.shiftLeft(n));
+   }
+ 
+   public boolean testBit(int n)
+   {
+     if (n < 0)
+       throw new ArithmeticException();
+ 
+     return !and(ONE.shiftLeft(n)).isZero();
+   }
+ 
+   public BigInteger flipBit(int n)
+   {
+     if (n < 0)
+       throw new ArithmeticException();
+ 
+     return xor(ONE.shiftLeft(n));
+   }
+ 
+   public int getLowestSetBit()
+   {
+     if (isZero())
+       return -1;
+ 
+     if (words == null)
+       return MPN.findLowestBit(ival);
+     else
+       return MPN.findLowestBit(words);
+   }
+ 
+   // bit4count[I] is number of '1' bits in I.
+   private static final byte[] bit4_count = { 0, 1, 1, 2,  1, 2, 2, 3,
+ 					     1, 2, 2, 3,  2, 3, 3, 4};
+ 
+   private static int bitCount(int i)
+   {
+     int count = 0;
+     while (i != 0)
+       {
+ 	count += bit4_count[i & 15];
+ 	i >>>= 4;
+       }
+     return count;
+   }
+ 
+   private static int bitCount(int[] x, int len)
+   {
+     int count = 0;
+     while (--len >= 0)
+       count += bitCount(x[len]);
+     return count;
+   }
+ 
+   /** Count one bits in a BigInteger.
+    * If argument is negative, count zero bits instead. */
+   public int bitCount()
+   {
+     int i, x_len;
+     int[] x_words = words;
+     if (x_words == null)
+       {
+ 	x_len = 1;
+ 	i = bitCount(ival);
+       }
+     else
+       {
+ 	x_len = ival;
+ 	i = bitCount(x_words, x_len);
+       }
+     return isNegative() ? x_len * 32 - i : i;
+   }
+ 
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     words = byteArrayToIntArray(magnitude, signum < 0 ? -1 : 0);
+     BigInteger result = make(words, words.length);
+     this.ival = result.ival;
+     this.words = result.words;
+   }
+ 
+   private void writeObject(ObjectOutputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     signum = signum();
+     magnitude = toByteArray();
+     s.defaultWriteObject();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/math/class-dependencies.conf gcc-4.1.0/libjava/classpath/java/math/class-dependencies.conf
*** gcc-4.0.2/libjava/classpath/java/math/class-dependencies.conf	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/math/class-dependencies.conf	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ # This property file contains dependencies of classes, methods, and
+ # field on other methods or classes.
+ #
+ # Syntax: 
+ #
+ #   <used>: <needed 1> [... <needed N>]
+ #
+ # means that when <used> is included, <needed 1> (... <needed N>) must
+ # be included as well.
+ #
+ # <needed X> and <used> are of the form
+ #
+ #   <class.methodOrField(signature)>
+ #
+ # or just
+ #
+ #   <class>
+ #
+ # Within dependencies, variables can be used. A variable is defined as 
+ # follows: 
+ #
+ #   {variable}: value1 value2 ... value<n>
+ #
+ # variables can be used on the right side of dependencies as follows: 
+ #
+ #    <used>: com.bla.blu.{variable}.Class.m()V
+ #
+ # The use of the variable will expand to <n> dependencies of the form
+ #
+ #    <used>: com.bla.blu.value1.Class.m()V
+ #    <used>: com.bla.blu.value2.Class.m()V
+ #    ...
+ #    <used>: com.bla.blu.value<n>.Class.m()V
+ #
+ # Variables can be redefined when building a system to select the 
+ # required support for features like encodings, protocols, etc. 
+ #
+ # Hints:
+ #
+ #  - For methods and fields, the signature is mandatory. For
+ #    specification, please see the Java Virtual Machine Specification by
+ #    SUN. Unlike in the spec, field signatures (types) are in brackets.
+ #
+ #  - Package names must be separated by '/' (and not '.'). E.g.,
+ #    java/lang/Class (this is necessary, because the '.' is used to
+ #    separate method or field names from classes)
+ #
+ #  - In case <needed> refers to a class, only the class itself will be
+ #    included in the resulting binary, NOT necessarily all its methods
+ #    and fields. If you want to refer to all methods and fields, you can
+ #    write class.* as an abbreviation.
+ #
+ # -  Abbreviations for packages are also possible: my/package/* means all
+ #    methods and fields of all classes in my/package.
+ #
+ # -  A line with a trailing '\' continues in the next line.
+ 
+ # end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/math/package.html gcc-4.1.0/libjava/classpath/java/math/package.html
*** gcc-4.0.2/libjava/classpath/java/math/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/math/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.math package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.math</title></head>
+ 
+ <body>
+ <p>Arbitrary large decimals and integers.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/Authenticator.java gcc-4.1.0/libjava/classpath/java/net/Authenticator.java
*** gcc-4.0.2/libjava/classpath/java/net/Authenticator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/Authenticator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,313 ----
+ /* Authenticator.java -- Abstract class for obtaining authentication info
+    Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+   * This abstract class provides a model for obtaining authentication
+   * information (in the form of a username and password) required by
+   * some network operations (such as hitting a password protected
+   * web site).
+   * <p>
+   * To make use of this feature, a programmer must create a subclass
+   * that knows how to obtain the necessary info.  An example
+   * would be a class that popped up a dialog box to prompt the user.
+   * After creating an instance of that subclass, the static
+   * <code>setDefault</code> method of this class is called to set up
+   * that instance as the object to use on subsequent calls to obtain
+   * authorization.
+   *
+   * @since 1.2
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @status Believed to be JDK 1.4 complete
+   */
+ public abstract class Authenticator
+ {
+   /*
+    * Class Variables
+    */
+ 
+   /**
+     * This is the default Authenticator object to use for password requests
+     */
+   private static Authenticator defaultAuthenticator;
+ 
+   /*
+    * Instance Variables
+    */
+ 
+   /**
+     * The hostname of the site requesting authentication
+     */
+   private String host;
+ 
+   /**
+     * InternetAddress of the site requesting authentication
+     */
+   private InetAddress addr;
+ 
+   /**
+     * The port number of the site requesting authentication
+     */
+   private int port;
+ 
+   /**
+     * The protocol name of the site requesting authentication
+     */
+   private String protocol;
+ 
+   /**
+     * The prompt to display to the user when requesting authentication info
+     */
+   private String prompt;
+ 
+   /**
+     * The authentication scheme in use
+     */
+   private String scheme;
+ 
+   /*
+    * Class Methods
+    */
+ 
+   /**
+     * This method sets the default <code>Authenticator</code> object (an
+     * instance of a subclass of <code>Authenticator</code>) to use when
+     * prompting the user for
+     * information.  Note that this method checks to see if the caller is
+     * allowed to set this value (the "setDefaultAuthenticator" permission)
+     * and throws a <code>SecurityException</code> if it is not.
+     *
+     * @param defAuth The new default <code>Authenticator</code> object to use
+     *
+     * @exception SecurityException If the caller does not have permission
+     * to perform this operation
+     */
+   public static void setDefault(Authenticator defAuth)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(new NetPermission("setDefaultAuthenticator"));
+ 
+     defaultAuthenticator = defAuth;
+   }
+ 
+   /**
+     * This method is called whenever a username and password for a given
+     * network operation is required.  First, a security check is made to see
+     * if the caller has the "requestPasswordAuthentication"
+     * permission.  If not, the method thows an exception.  If there is no
+     * default <code>Authenticator</code> object, the method then returns
+     * <code>null</code>.  Otherwise, the default authenticators's instance
+     * variables are initialized and it's <code>getPasswordAuthentication</code>
+     * method is called to get the actual authentication information to return.
+     *
+     * @param addr The address requesting authentication
+     * @param port The port requesting authentication
+     * @param protocol The protocol requesting authentication
+     * @param prompt The prompt to display to the user when requesting
+     *        authentication info
+     * @param scheme The authentication scheme in use
+     *
+     * @return A <code>PasswordAuthentication</code> object with the user's
+     *         authentication info.
+     *
+     * @exception SecurityException If the caller does not have permission to
+     *         perform this operation
+     */
+   public static PasswordAuthentication requestPasswordAuthentication(InetAddress addr,
+                                                                      int port,
+                                                                      String protocol,
+                                                                      String prompt,
+                                                                      String scheme)
+     throws SecurityException
+   {
+     return requestPasswordAuthentication(null, addr, port, protocol, prompt,
+                                          scheme);
+   }
+ 
+   /**
+     * This method is called whenever a username and password for a given
+     * network operation is required.  First, a security check is made to see
+     * if the caller has the "requestPasswordAuthentication"
+     * permission.  If not, the method thows an exception.  If there is no
+     * default <code>Authenticator</code> object, the method then returns
+     * <code>null</code>.  Otherwise, the default authenticators's instance
+     * variables are initialized and it's <code>getPasswordAuthentication</code>
+     * method is called to get the actual authentication information to return.
+     * This method is the preferred one as it can be used with hostname
+     * when addr is unknown.
+     *
+     * @param host The hostname requesting authentication
+     * @param addr The address requesting authentication
+     * @param port The port requesting authentication
+     * @param protocol The protocol requesting authentication
+     * @param prompt The prompt to display to the user when requesting
+     *        authentication info
+     * @param scheme The authentication scheme in use
+     *
+     * @return A <code>PasswordAuthentication</code> object with the user's
+     *         authentication info.
+     *
+     * @exception SecurityException If the caller does not have permission to
+     *         perform this operation
+     *
+     * @since 1.4
+     */
+   public static PasswordAuthentication requestPasswordAuthentication(String host,
+                                                                      InetAddress addr,
+                                                                      int port,
+                                                                      String protocol,
+                                                                      String prompt,
+                                                                      String scheme)
+     throws SecurityException
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(new NetPermission("requestPasswordAuthentication"));
+ 
+     if (defaultAuthenticator == null)
+       return null;
+ 
+     defaultAuthenticator.host = host;
+     defaultAuthenticator.addr = addr;
+     defaultAuthenticator.port = port;
+     defaultAuthenticator.protocol = protocol;
+     defaultAuthenticator.prompt = prompt;
+     defaultAuthenticator.scheme = scheme;
+ 
+     return defaultAuthenticator.getPasswordAuthentication();
+   }
+ 
+   /*
+    * Constructors
+    */
+ 
+   /**
+     * Default, no-argument constructor for subclasses to call.
+     */
+   public Authenticator()
+   {
+   }
+ 
+   /*
+    * Instance Methods
+    */
+ 
+   /**
+     * This method returns the address of the site that is requesting
+     * authentication.
+     *
+     * @return The requesting site's address
+     */
+   protected final InetAddress getRequestingSite()
+   {
+     return addr;
+   }
+ 
+   /**
+    * Returns the hostname of the host or proxy requesting authorization,
+    * or <code>null</code> if not available.
+    *
+    * @return The name of the host requesting authentication, or
+    * <code>null</code> if it is not available.
+    *
+    * @since 1.4
+    */
+   protected final String getRequestingHost()
+   {
+     return host;
+   }
+ 
+   /**
+     * This method returns the port of the site that is requesting
+     * authentication.
+     *
+     * @return The requesting port
+     */
+   protected final int getRequestingPort()
+   {
+     return port;
+   }
+ 
+   /**
+     * This method returns the requesting protocol of the operation that is
+     * requesting authentication
+     *
+     * @return The requesting protocol
+     */
+   protected final String getRequestingProtocol()
+   {
+     return protocol;
+   }
+ 
+   /**
+     * Returns the prompt that should be used when requesting authentication
+     * information from the user
+     *
+     * @return The user prompt
+     */
+   protected final String getRequestingPrompt()
+   {
+     return prompt;
+   }
+ 
+   /**
+     * This method returns the authentication scheme in use
+     *
+     * @return The authentication scheme
+     */
+   protected final String getRequestingScheme()
+   {
+     return scheme;
+   }
+ 
+   /**
+     * This method is called whenever a request for authentication is made.  It
+     * can call the other getXXX methods to determine the information relevant
+     * to this request.  Subclasses should override this method, which returns
+     * <code>null</code> by default.
+     *
+     * @return The <code>PasswordAuthentication</code> information
+     */
+   protected PasswordAuthentication getPasswordAuthentication()
+   {
+     return null;
+   }
+ } // class Authenticator
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/BindException.java gcc-4.1.0/libjava/classpath/java/net/BindException.java
*** gcc-4.0.2/libjava/classpath/java/net/BindException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/BindException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* BindException.java -- An exception occurred while binding to a socket
+    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * This exception indicates that an error occurred while attempting to bind
+  * socket to a particular port.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class BindException extends SocketException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -5945005768251722951L;
+ 
+   /**
+    * Create a new instance without a descriptive error message.
+    */
+   public BindException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message, such as the
+    * text from strerror(3).
+    *
+    * @param message a message describing the error that occurred
+    */
+   public BindException(String message)
+   {
+     super(message);
+   }
+ } // class BindException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/ConnectException.java gcc-4.1.0/libjava/classpath/java/net/ConnectException.java
*** gcc-4.0.2/libjava/classpath/java/net/ConnectException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/ConnectException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* ConnectException.java -- An exception occurred while connecting to a host
+    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * This exception indicates that an error occurred while attempting to
+  * connect to a remote host.  Often this indicates that the remote host
+  * refused the connection (ie, is not listening on the target socket).
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ConnectException extends SocketException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 3831404271622369215L;
+ 
+   /**
+    * Create a new instance without a descriptive error message.
+    */
+   public ConnectException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message, such as the
+    * text from strerror(3).
+    *
+    * @param message a message describing the error that occurred
+    */
+   public ConnectException(String message)
+   {
+     super(message);
+   }
+ } // class ConnectException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/ContentHandler.java gcc-4.1.0/libjava/classpath/java/net/ContentHandler.java
*** gcc-4.0.2/libjava/classpath/java/net/ContentHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/ContentHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,126 ----
+ /* ContentHandler.java -- Abstract class for handling content from URL's
+    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+   * This is an abstract class that is the superclass for classes that read
+   * objects from URL's.  Calling the <code>getContent()</code> method in the
+   * <code>URL</code> class or the <code>URLConnection</code> class will cause
+   * an instance of a subclass of <code>ContentHandler</code> to be created for
+   * the MIME type of the object being downloaded from the URL.  Thus, this
+   * class is seldom needed by applications/applets directly, but only
+   * indirectly through methods in other classes.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public abstract class ContentHandler
+ {
+   /*
+    * Constructors
+    */
+ 
+   /**
+     * Default, no-argument constructor.
+     */
+   public ContentHandler()
+   {
+   }
+ 
+   /*
+    * Instance Methods
+    */
+ 
+   /**
+     * This method reads from the <code>InputStream</code> of the passed in URL
+     * connection and uses the data downloaded to create an <code>Object</code>
+     * represening the content.  For example, if the URL is pointing to a GIF
+     * file, this method might return an <code>Image</code> object.  This method
+     * must be implemented by subclasses.
+     *
+     * @param urlc A <code>URLConnection</code> object to read data from.
+     *
+     * @return An object representing the data read
+     *
+     * @exception IOException If an error occurs
+     */
+   public abstract Object getContent(URLConnection urlc)
+     throws IOException;
+ 
+   /**
+     * This method reads from the <code>InputStream</code> of the passed in URL
+     * connection and uses the data downloaded to create an <code>Object</code>
+     * represening the content.  For example, if the URL is pointing to a GIF
+     * file, this method might return an <code>Image</code> object.  This method
+     * must be implemented by subclasses.  This method uses the list of
+     * supplied classes as candidate types.  If the data read doesn't match
+     * any of the supplied type, <code>null</code> is returned.
+     *
+     * @param urlc A <code>URLConnection</code> object to read data from.
+     * @param classes An array of types of objects that are candidate types
+     * for the data to be read.
+     *
+     * @return An object representing the data read, or <code>null</code>
+     * if the data does not match any of the candidate types.
+     *
+     * @exception IOException If an error occurs
+     *
+     * @since 1.3
+     */
+   public Object getContent(URLConnection urlc, Class[] classes)
+     throws IOException
+   {
+     Object obj = getContent(urlc);
+ 
+     for (int i = 0; i < classes.length; i++)
+       {
+ 	if (classes[i].isInstance(obj))
+ 	  return obj;
+       }
+ 
+     return null;
+   }
+ } // class ContentHandler
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/ContentHandlerFactory.java gcc-4.1.0/libjava/classpath/java/net/ContentHandlerFactory.java
*** gcc-4.0.2/libjava/classpath/java/net/ContentHandlerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/ContentHandlerFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* ContentHandlerFactory.java -- Interface for creating content handlers
+    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ /**
+   * This interface maps MIME types to <code>ContentHandler</code> objects.
+   * It consists of one method that, when passed a MIME type, returns a
+   * handler for that type.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   */
+ public interface ContentHandlerFactory
+ {
+   /**
+     * This method is passed a MIME type as a string and is responsible for
+     * returning the appropriate <code>ContentHandler</code> object.
+     *
+     * @param mimeType The MIME type to map to a <code>ContentHandler</code>
+     *
+     * @return The <code>ContentHandler</code> for the passed in MIME type
+     */
+   ContentHandler createContentHandler(String mimeType);
+ } // interface ContentHandlerFactory
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/DatagramPacket.java gcc-4.1.0/libjava/classpath/java/net/DatagramPacket.java
*** gcc-4.0.2/libjava/classpath/java/net/DatagramPacket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/DatagramPacket.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,391 ----
+ /* DatagramPacket.java -- Class to model a packet to be sent via UDP
+    Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /*
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * This class models a packet of data that is to be sent across the network
+  * using a connectionless protocol such as UDP.  It contains the data
+  * to be send, as well as the destination address and port.  Note that
+  * datagram packets can arrive in any order and are not guaranteed to be
+  * delivered at all.
+  * <p>
+  * This class can also be used for receiving data from the network.
+  * <p>
+  * Note that for all method below where the buffer length passed by the
+  * caller cannot exceed the actually length of the byte array passed as
+  * the buffer, if this condition is not true, then the method silently
+  * reduces the length value to maximum allowable value.
+  *
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Aarom M. Renn (arenn@urbanophile.com) (Documentation comments)
+  * @date April 28, 1999.
+  */
+ public final class DatagramPacket
+ {
+   /**
+    * The data buffer to send
+    */
+   private byte[] buffer;
+ 
+   /**
+    * This is the offset into the buffer to start sending from or receiving to.
+    */
+   private int offset;
+ 
+   /**
+    * The length of the data buffer to send.
+    */
+   int length;
+ 
+   /**
+    * The maximal length of the buffer.
+    */
+   int maxlen;
+ 
+   /**
+    * The address to which the packet should be sent or from which it
+    * was received.
+    */
+   private InetAddress address;
+ 
+   /**
+    * The port to which the packet should be sent or from which it was
+    * was received.
+    */
+   private int port;
+ 
+   /**
+    * This method initializes a new instance of <code>DatagramPacket</code>
+    * which has the specified buffer, offset, and length.
+    *
+    * @param buf The buffer for holding the incoming datagram.
+    * @param offset The offset into the buffer to start writing.
+    * @param length The maximum number of bytes to read.
+    *
+    * @since 1.2
+    */
+   public DatagramPacket(byte[] buf, int offset, int length)
+   {
+     setData(buf, offset, length);
+     address = null;
+     port = -1;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>DatagramPacket</code> for
+    * receiving packets from the network.
+    *
+    * @param buf A buffer for storing the returned packet data
+    * @param length The length of the buffer (must be &lt;= buf.length)
+    */
+   public DatagramPacket(byte[] buf, int length)
+   {
+     this(buf, 0, length);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>DatagramPacket</code> for
+    * transmitting packets across the network.
+    *
+    * @param buf A buffer containing the data to send
+    * @param offset The offset into the buffer to start writing from.
+    * @param length The length of the buffer (must be &lt;= buf.length)
+    * @param address The address to send to
+    * @param port The port to send to
+    *
+    * @since 1.2
+    */
+   public DatagramPacket(byte[] buf, int offset, int length,
+                         InetAddress address, int port)
+   {
+     setData(buf, offset, length);
+     setAddress(address);
+     setPort(port);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>DatagramPacket</code> for
+    * transmitting packets across the network.
+    *
+    * @param buf A buffer containing the data to send
+    * @param length The length of the buffer (must be &lt;= buf.length)
+    * @param address The address to send to
+    * @param port The port to send to
+    */
+   public DatagramPacket(byte[] buf, int length, InetAddress address, int port)
+   {
+     this(buf, 0, length, address, port);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>DatagramPacket</code> for
+    * transmitting packets across the network.
+    *
+    * @param buf A buffer containing the data to send
+    * @param offset The offset into the buffer to start writing from.
+    * @param length The length of the buffer (must be &lt;= buf.length)
+    * @param address The socket address to send to
+    *
+    * @exception SocketException If an error occurs
+    * @exception IllegalArgumentException If address type is not supported
+    *
+    * @since 1.4
+    */
+   public DatagramPacket(byte[] buf, int offset, int length,
+                         SocketAddress address) throws SocketException
+   {
+     if (! (address instanceof InetSocketAddress))
+       throw new IllegalArgumentException("unsupported address type");
+ 
+     InetSocketAddress tmp = (InetSocketAddress) address;
+     setData(buf, offset, length);
+     setAddress(tmp.getAddress());
+     setPort(tmp.getPort());
+   }
+ 
+   /**
+    * Initializes a new instance of <code>DatagramPacket</code> for
+    * transmitting packets across the network.
+    *
+    * @param buf A buffer containing the data to send
+    * @param length The length of the buffer (must be &lt;= buf.length)
+    * @param address The socket address to send to
+    *
+    * @exception SocketException If an error occurs
+    * @exception IllegalArgumentException If address type is not supported
+    *
+    * @since 1.4
+    */
+   public DatagramPacket(byte[] buf, int length, SocketAddress address)
+     throws SocketException
+   {
+     this(buf, 0, length, address);
+   }
+ 
+   /**
+    * Returns the address that this packet is being sent to or, if it was used
+    * to receive a packet, the address that is was received from.  If the
+    * constructor that doesn not take an address was used to create this object
+    * and no packet was actually read into this object, then this method
+    * returns <code>null</code>.
+    *
+    * @return The address for this packet.
+    */
+   public synchronized InetAddress getAddress()
+   {
+     return address;
+   }
+ 
+   /**
+    * Returns the port number this packet is being sent to or, if it was used
+    * to receive a packet, the port that it was received from. If the
+    * constructor that doesn not take an address was used to create this object
+    * and no packet was actually read into this object, then this method
+    * will return 0.
+    *
+    * @return The port number for this packet
+    */
+   public synchronized int getPort()
+   {
+     return port;
+   }
+ 
+   /**
+    * Returns the data buffer for this packet
+    *
+    * @return This packet's data buffer
+    */
+   public synchronized byte[] getData()
+   {
+     return buffer;
+   }
+ 
+   /**
+    * This method returns the current offset value into the data buffer
+    * where data will be sent from.
+    *
+    * @return The buffer offset.
+    *
+    * @since 1.2
+    */
+   public synchronized int getOffset()
+   {
+     return offset;
+   }
+ 
+   /**
+    * Returns the length of the data in the buffer
+    *
+    * @return The length of the data
+    */
+   public synchronized int getLength()
+   {
+     return length;
+   }
+ 
+   /**
+    * This sets the address to which the data packet will be transmitted.
+    *
+    * @param address The destination address
+    *
+    * @since 1.1
+    */
+   public synchronized void setAddress(InetAddress address)
+   {
+     this.address = address;
+   }
+ 
+   /**
+    * This sets the port to which the data packet will be transmitted.
+    *
+    * @param port The destination port
+    *
+    * @since 1.1
+    */
+   public synchronized void setPort(int port)
+   {
+     if (port < 0 || port > 65535)
+       throw new IllegalArgumentException("Invalid port: " + port);
+ 
+     this.port = port;
+   }
+ 
+   /**
+    * Sets the address of the remote host this package will be sent
+    *
+    * @param address The socket address of the remove host
+    *
+    * @exception IllegalArgumentException If address type is not supported
+    *
+    * @since 1.4
+    */
+   public void setSocketAddress(SocketAddress address)
+     throws IllegalArgumentException
+   {
+     if (address == null)
+       throw new IllegalArgumentException("address may not be null");
+ 
+     InetSocketAddress tmp = (InetSocketAddress) address;
+     this.address = tmp.getAddress();
+     this.port = tmp.getPort();
+   }
+ 
+   /**
+    * Gets the socket address of the host this packet
+    * will be sent to/is coming from
+    *
+    * @return The socket address of the remote host
+    *
+    * @since 1.4
+    */
+   public SocketAddress getSocketAddress()
+   {
+     return new InetSocketAddress(address, port);
+   }
+ 
+   /**
+    * Sets the data buffer for this packet.
+    *
+    * @param buf The new buffer for this packet
+    *
+    * @exception NullPointerException If the argument is null
+    *
+    * @since 1.1
+    */
+   public void setData(byte[] buf)
+   {
+     setData(buf, 0, buf.length);
+   }
+ 
+   /**
+    * This method sets the data buffer for the packet.
+    *
+    * @param buf The byte array containing the data for this packet.
+    * @param offset The offset into the buffer to start reading data from.
+    * @param length The number of bytes of data in the buffer.
+    *
+    * @exception NullPointerException If the argument is null
+    *
+    * @since 1.2
+    */
+   public synchronized void setData(byte[] buf, int offset, int length)
+   {
+     // This form of setData must be used if offset is to be changed.
+     if (buf == null)
+       throw new NullPointerException("Null buffer");
+     if (offset < 0)
+       throw new IllegalArgumentException("Invalid offset: " + offset);
+ 
+     buffer = buf;
+     this.offset = offset;
+     setLength(length);
+   }
+ 
+   /**
+    * Sets the length of the data in the buffer.
+    *
+    * @param length The new length.  (Where len &lt;= buf.length)
+    *
+    * @exception IllegalArgumentException If the length is negative or
+    * if the length is greater than the packet's data buffer length
+    *
+    * @since 1.1
+    */
+   public synchronized void setLength(int length)
+   {
+     if (length < 0)
+       throw new IllegalArgumentException("Invalid length: " + length);
+     if (offset + length > buffer.length)
+       throw new IllegalArgumentException("Potential buffer overflow - offset: "
+                                          + offset + " length: " + length);
+ 
+     this.length = length;
+     this.maxlen = length;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/DatagramSocket.java gcc-4.1.0/libjava/classpath/java/net/DatagramSocket.java
*** gcc-4.0.2/libjava/classpath/java/net/DatagramSocket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/DatagramSocket.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,934 ----
+ /* DatagramSocket.java -- A class to model UDP sockets
+    Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import gnu.classpath.SystemProperties;
+ 
+ import gnu.java.net.PlainDatagramSocketImpl;
+ import gnu.java.nio.DatagramChannelImpl;
+ 
+ import java.io.IOException;
+ import java.nio.channels.DatagramChannel;
+ import java.nio.channels.IllegalBlockingModeException;
+ 
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ /**
+  * This class models a connectionless datagram socket that sends
+  * individual packets of data across the network.  In the TCP/IP world,
+  * this means UDP.  Datagram packets do not have guaranteed delivery,
+  * or any guarantee about the order the data will be received on the
+  * remote host.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @date May 3, 1999.
+  */
+ public class DatagramSocket
+ {
+   /**
+    * This is the user DatagramSocketImplFactory for this class.  If this
+    * variable is null, a default factory is used.
+    */
+   private static DatagramSocketImplFactory factory;
+ 
+   /**
+    * This is the implementation object used by this socket.
+    */
+   private DatagramSocketImpl impl;
+ 
+   /**
+    * True if socket implementation was created.
+    */
+   private boolean implCreated;
+ 
+   /**
+    * This is the address we are "connected" to
+    */
+   private InetAddress remoteAddress;
+ 
+   /**
+    * This is the port we are "connected" to
+    */
+   private int remotePort = -1;
+ 
+   /**
+    * True if socket is bound.
+    */
+   private boolean bound;
+ 
+   /**
+    * Creates a <code>DatagramSocket</code> from a specified
+    * <code>DatagramSocketImpl</code> instance
+    *
+    * @param impl The <code>DatagramSocketImpl</code> the socket will be
+    * created from
+    *
+    * @since 1.4
+    */
+   protected DatagramSocket(DatagramSocketImpl impl)
+   {
+     if (impl == null)
+       throw new NullPointerException("impl may not be null");
+ 
+     this.impl = impl;
+     this.remoteAddress = null;
+     this.remotePort = -1;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>DatagramSocket</code> that binds to
+    * a random port and every address on the local machine.
+    *
+    * @exception SocketException If an error occurs.
+    * @exception SecurityException If a security manager exists and
+    * its <code>checkListen</code> method doesn't allow the operation.
+    */
+   public DatagramSocket() throws SocketException
+   {
+     this(new InetSocketAddress(0));
+   }
+ 
+   /**
+    * Initializes a new instance of <code>DatagramSocket</code> that binds to
+    * the specified port and every address on the local machine.
+    *
+    * @param port The local port number to bind to.
+    *
+    * @exception SecurityException If a security manager exists and its
+    * <code>checkListen</code> method doesn't allow the operation.
+    * @exception SocketException If an error occurs.
+    */
+   public DatagramSocket(int port) throws SocketException
+   {
+     this(new InetSocketAddress(port));
+   }
+ 
+   /**
+    * Initializes a new instance of <code>DatagramSocket</code> that binds to
+    * the specified local port and address.
+    *
+    * @param port The local port number to bind to.
+    * @param addr The local address to bind to.
+    *
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation.
+    * @exception SocketException If an error occurs.
+    */
+   public DatagramSocket(int port, InetAddress addr) throws SocketException
+   {
+     this(new InetSocketAddress(addr, port));
+   }
+ 
+   /**
+    * Initializes a new instance of <code>DatagramSocket</code> that binds to
+    * the specified local port and address.
+    *
+    * @param address The local address and port number to bind to.
+    *
+    * @exception SecurityException If a security manager exists and its
+    * <code>checkListen</code> method doesn't allow the operation.
+    * @exception SocketException If an error occurs.
+    *
+    * @since 1.4
+    */
+   public DatagramSocket(SocketAddress address) throws SocketException
+   {
+     String propVal = SystemProperties.getProperty("impl.prefix");
+     if (propVal == null || propVal.equals(""))
+       impl = new PlainDatagramSocketImpl();
+     else
+       try
+         {
+ 	  impl =
+ 	    (DatagramSocketImpl) Class.forName("java.net." + propVal
+ 	                                       + "DatagramSocketImpl")
+ 	                              .newInstance();
+         }
+       catch (Exception e)
+         {
+ 	  System.err.println("Could not instantiate class: java.net."
+ 	                     + propVal + "DatagramSocketImpl");
+ 	  impl = new PlainDatagramSocketImpl();
+         }
+ 
+     if (address != null)
+       bind(address);
+   }
+ 
+   // This needs to be accessible from java.net.MulticastSocket
+   DatagramSocketImpl getImpl() throws SocketException
+   {
+     try
+       {
+ 	if (! implCreated)
+ 	  {
+ 	    impl.create();
+ 	    implCreated = true;
+ 	  }
+ 
+ 	return impl;
+       }
+     catch (IOException e)
+       {
+ 	SocketException se = new SocketException();
+ 	se.initCause(e);
+ 	throw se;
+       }
+   }
+ 
+   /**
+    * Closes this datagram socket.
+    */
+   public void close()
+   {
+     if (isClosed())
+       return;
+ 
+     try
+       {
+ 	getImpl().close();
+       }
+     catch (SocketException e)
+       {
+ 	// Ignore this case, just close the socket in finally clause.
+       }
+     finally
+       {
+ 	remoteAddress = null;
+ 	remotePort = -1;
+ 	impl = null;
+       }
+ 
+     try
+       {
+ 	if (getChannel() != null)
+ 	  getChannel().close();
+       }
+     catch (IOException e)
+       {
+ 	// Do nothing.
+       }
+   }
+ 
+   /**
+    * This method returns the remote address to which this socket is
+    * connected.  If this socket is not connected, then this method will
+    * return <code>null</code>.
+    *
+    * @return The remote address.
+    *
+    * @since 1.2
+    */
+   public InetAddress getInetAddress()
+   {
+     return remoteAddress;
+   }
+ 
+   /**
+    * This method returns the remote port to which this socket is
+    * connected.  If this socket is not connected, then this method will
+    * return -1.
+    *
+    * @return The remote port.
+    *
+    * @since 1.2
+    */
+   public int getPort()
+   {
+     return remotePort;
+   }
+ 
+   /**
+    * Returns the local address this datagram socket is bound to.
+    *
+    * @return The local address is the socket is bound or null
+    *
+    * @since 1.1
+    */
+   public InetAddress getLocalAddress()
+   {
+     if (! isBound())
+       return null;
+ 
+     InetAddress localAddr;
+ 
+     try
+       {
+ 	localAddr =
+ 	  (InetAddress) getImpl().getOption(SocketOptions.SO_BINDADDR);
+ 
+ 	SecurityManager s = System.getSecurityManager();
+ 	if (s != null)
+ 	  s.checkConnect(localAddr.getHostName(), -1);
+       }
+     catch (SecurityException e)
+       {
+ 	localAddr = InetAddress.ANY_IF;
+       }
+     catch (SocketException e)
+       {
+ 	// This cannot happen as we are bound.
+ 	return null;
+       }
+ 
+     return localAddr;
+   }
+ 
+   /**
+    * Returns the local port this socket is bound to.
+    *
+    * @return The local port number.
+    */
+   public int getLocalPort()
+   {
+     if (isClosed())
+       return -1;
+ 
+     try
+       {
+ 	return getImpl().getLocalPort();
+       }
+     catch (SocketException e)
+       {
+ 	// This cannot happen as we are bound.
+ 	return 0;
+       }
+   }
+ 
+   /**
+    * Returns the value of the socket's SO_TIMEOUT setting.  If this method
+    * returns 0 then SO_TIMEOUT is disabled.
+    *
+    * @return The current timeout in milliseconds.
+    *
+    * @exception SocketException If an error occurs.
+    *
+    * @since 1.1
+    */
+   public synchronized int getSoTimeout() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.SO_TIMEOUT);
+ 
+     if (buf instanceof Integer)
+       return ((Integer) buf).intValue();
+ 
+     throw new SocketException("unexpected type");
+   }
+ 
+   /**
+    * Sets the value of the socket's SO_TIMEOUT value.  A value of 0 will
+    * disable SO_TIMEOUT.  Any other value is the number of milliseconds
+    * a socket read/write will block before timing out.
+    *
+    * @param timeout The new SO_TIMEOUT value in milliseconds.
+    *
+    * @exception SocketException If an error occurs.
+    *
+    * @since 1.1
+    */
+   public synchronized void setSoTimeout(int timeout) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (timeout < 0)
+       throw new IllegalArgumentException("Invalid timeout: " + timeout);
+ 
+     getImpl().setOption(SocketOptions.SO_TIMEOUT, new Integer(timeout));
+   }
+ 
+   /**
+    * This method returns the value of the system level socket option
+    * SO_SNDBUF, which is used by the operating system to tune buffer
+    * sizes for data transfers.
+    *
+    * @return The send buffer size.
+    *
+    * @exception SocketException If an error occurs.
+    *
+    * @since 1.2
+    */
+   public int getSendBufferSize() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.SO_SNDBUF);
+ 
+     if (buf instanceof Integer)
+       return ((Integer) buf).intValue();
+ 
+     throw new SocketException("unexpected type");
+   }
+ 
+   /**
+    * This method sets the value for the system level socket option
+    * SO_SNDBUF to the specified value.  Note that valid values for this
+    * option are specific to a given operating system.
+    *
+    * @param size The new send buffer size.
+    *
+    * @exception SocketException If an error occurs.
+    * @exception IllegalArgumentException If size is 0 or negative.
+    *
+    * @since 1.2
+    */
+   public void setSendBufferSize(int size) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (size < 0)
+       throw new IllegalArgumentException("Buffer size is less than 0");
+ 
+     getImpl().setOption(SocketOptions.SO_SNDBUF, new Integer(size));
+   }
+ 
+   /**
+    * This method returns the value of the system level socket option
+    * SO_RCVBUF, which is used by the operating system to tune buffer
+    * sizes for data transfers.
+    *
+    * @return The receive buffer size.
+    *
+    * @exception SocketException If an error occurs.
+    *
+    * @since 1.2
+    */
+   public int getReceiveBufferSize() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.SO_RCVBUF);
+ 
+     if (buf instanceof Integer)
+       return ((Integer) buf).intValue();
+ 
+     throw new SocketException("unexpected type");
+   }
+ 
+   /**
+    * This method sets the value for the system level socket option
+    * SO_RCVBUF to the specified value.  Note that valid values for this
+    * option are specific to a given operating system.
+    *
+    * @param size The new receive buffer size.
+    *
+    * @exception SocketException If an error occurs.
+    * @exception IllegalArgumentException If size is 0 or negative.
+    *
+    * @since 1.2
+    */
+   public void setReceiveBufferSize(int size) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (size < 0)
+       throw new IllegalArgumentException("Buffer size is less than 0");
+ 
+     getImpl().setOption(SocketOptions.SO_RCVBUF, new Integer(size));
+   }
+ 
+   /**
+    * This method connects this socket to the specified address and port.
+    * When a datagram socket is connected, it will only send or receive
+    * packets to and from the host to which it is connected. A multicast
+    * socket that is connected may only send and not receive packets.
+    *
+    * @param address The address to connect this socket to.
+    * @param port The port to connect this socket to.
+    *
+    * @exception IllegalArgumentException If address or port are invalid.
+    * @exception SecurityException If the caller is not allowed to send
+    * datagrams to or receive from this address and port.
+    *
+    * @since 1.2
+    */
+   public void connect(InetAddress address, int port)
+   {
+     if (address == null)
+       throw new IllegalArgumentException("Connect address may not be null");
+ 
+     if ((port < 1) || (port > 65535))
+       throw new IllegalArgumentException("Port number is illegal: " + port);
+ 
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkConnect(address.getHostName(), port);
+ 
+     try
+       {
+ 	getImpl().connect(address, port);
+ 	remoteAddress = address;
+ 	remotePort = port;
+       }
+     catch (SocketException e)
+       {
+ 	// This means simply not connected or connect not implemented.
+       }
+   }
+ 
+   /**
+    * This method disconnects this socket from the address/port it was
+    * connected to.  If the socket was not connected in the first place,
+    * this method does nothing.
+    *
+    * @since 1.2
+    */
+   public void disconnect()
+   {
+     if (! isConnected())
+       return;
+ 
+     try
+       {
+ 	getImpl().disconnect();
+       }
+     catch (SocketException e)
+       {
+ 	// This cannot happen as we are connected.
+       }
+     finally
+       {
+ 	remoteAddress = null;
+ 	remotePort = -1;
+       }
+   }
+ 
+   /**
+    * Reads a datagram packet from the socket.  Note that this method
+    * will block until a packet is received from the network.  On return,
+    * the passed in <code>DatagramPacket</code> is populated with the data
+    * received and all the other information about the packet.
+    *
+    * @param p A <code>DatagramPacket</code> for storing the data
+    *
+    * @exception IOException If an error occurs.
+    * @exception SocketTimeoutException If setSoTimeout was previously called
+    * and the timeout has expired.
+    * @exception PortUnreachableException If the socket is connected to a
+    * currently unreachable destination. Note, there is no guarantee that the
+    * exception will be thrown.
+    * @exception IllegalBlockingModeException If this socket has an associated
+    * channel, and the channel is in non-blocking mode.
+    * @exception SecurityException If a security manager exists and its
+    * checkAccept method doesn't allow the receive.
+    */
+   public synchronized void receive(DatagramPacket p) throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (remoteAddress != null && remoteAddress.isMulticastAddress())
+       throw new IOException
+ 	("Socket connected to a multicast address my not receive");
+ 
+     if (getChannel() != null && ! getChannel().isBlocking()
+         && ! ((DatagramChannelImpl) getChannel()).isInChannelOperation())
+       throw new IllegalBlockingModeException();
+ 
+     getImpl().receive(p);
+ 
+     SecurityManager s = System.getSecurityManager();
+     if (s != null && isConnected())
+       s.checkAccept(p.getAddress().getHostName(), p.getPort());
+   }
+ 
+   /**
+    * Sends the specified packet.  The host and port to which the packet
+    * are to be sent should be set inside the packet.
+    *
+    * @param p The datagram packet to send.
+    *
+    * @exception IOException If an error occurs.
+    * @exception SecurityException If a security manager exists and its
+    * checkMulticast or checkConnect method doesn't allow the send.
+    * @exception PortUnreachableException If the socket is connected to a
+    * currently unreachable destination. Note, there is no guarantee that the
+    * exception will be thrown.
+    * @exception IllegalBlockingModeException If this socket has an associated
+    * channel, and the channel is in non-blocking mode.
+    */
+   public void send(DatagramPacket p) throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     // JDK1.2: Don't do security checks if socket is connected; see jdk1.2 api.
+     SecurityManager s = System.getSecurityManager();
+     if (s != null && ! isConnected())
+       {
+ 	InetAddress addr = p.getAddress();
+ 	if (addr.isMulticastAddress())
+ 	  s.checkMulticast(addr);
+ 	else
+ 	  s.checkConnect(addr.getHostAddress(), p.getPort());
+       }
+ 
+     if (isConnected())
+       {
+ 	if (p.getAddress() != null
+ 	    && (remoteAddress != p.getAddress() || remotePort != p.getPort()))
+ 	  throw new IllegalArgumentException
+ 	    ("DatagramPacket address does not match remote address");
+       }
+ 
+     // FIXME: if this is a subclass of MulticastSocket,
+     // use getTimeToLive for TTL val.
+     if (getChannel() != null && ! getChannel().isBlocking()
+         && ! ((DatagramChannelImpl) getChannel()).isInChannelOperation())
+       throw new IllegalBlockingModeException();
+ 
+     getImpl().send(p);
+   }
+ 
+   /**
+    * Binds the socket to the given socket address.
+    *
+    * @param address The socket address to bind to.
+    *
+    * @exception SocketException If an error occurs.
+    * @exception SecurityException If a security manager exists and
+    * its checkListen method doesn't allow the operation.
+    * @exception IllegalArgumentException If address type is not supported.
+    *
+    * @since 1.4
+    */
+   public void bind(SocketAddress address) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (! (address instanceof InetSocketAddress))
+       throw new IllegalArgumentException("unsupported address type");
+ 
+     InetAddress addr = ((InetSocketAddress) address).getAddress();
+     int port = ((InetSocketAddress) address).getPort();
+ 
+     if (port < 0 || port > 65535)
+       throw new IllegalArgumentException("Invalid port: " + port);
+ 
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkListen(port);
+ 
+     if (addr == null)
+       addr = InetAddress.ANY_IF;
+ 
+     try
+       {
+ 	getImpl().bind(port, addr);
+ 	bound = true;
+       }
+     catch (SocketException exception)
+       {
+ 	getImpl().close();
+ 	throw exception;
+       }
+     catch (RuntimeException exception)
+       {
+ 	getImpl().close();
+ 	throw exception;
+       }
+     catch (Error error)
+       {
+ 	getImpl().close();
+ 	throw error;
+       }
+   }
+ 
+   /**
+    * Checks if the datagram socket is closed.
+    *
+    * @return True if socket is closed, false otherwise.
+    *
+    * @since 1.4
+    */
+   public boolean isClosed()
+   {
+     return impl == null;
+   }
+ 
+   /**
+    * Returns the datagram channel assoziated with this datagram socket.
+    *
+    * @return The associated <code>DatagramChannel</code> object or null
+    *
+    * @since 1.4
+    */
+   public DatagramChannel getChannel()
+   {
+     return null;
+   }
+ 
+   /**
+    * Connects the datagram socket to a specified socket address.
+    *
+    * @param address The socket address to connect to.
+    *
+    * @exception SocketException If an error occurs.
+    * @exception IllegalArgumentException If address type is not supported.
+    *
+    * @since 1.4
+    */
+   public void connect(SocketAddress address) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (! (address instanceof InetSocketAddress))
+       throw new IllegalArgumentException("unsupported address type");
+ 
+     InetSocketAddress tmp = (InetSocketAddress) address;
+     connect(tmp.getAddress(), tmp.getPort());
+   }
+ 
+   /**
+    * Returns the binding state of the socket.
+    *
+    * @return True if socket bound, false otherwise.
+    *
+    * @since 1.4
+    */
+   public boolean isBound()
+   {
+     return bound;
+   }
+ 
+   /**
+    * Returns the connection state of the socket.
+    *
+    * @return True if socket is connected, false otherwise.
+    *
+    * @since 1.4
+    */
+   public boolean isConnected()
+   {
+     return remoteAddress != null;
+   }
+ 
+   /**
+    * Returns the SocketAddress of the host this socket is conneted to
+    * or null if this socket is not connected.
+    *
+    * @return The socket address of the remote host if connected or null
+    *
+    * @since 1.4
+    */
+   public SocketAddress getRemoteSocketAddress()
+   {
+     if (! isConnected())
+       return null;
+ 
+     return new InetSocketAddress(remoteAddress, remotePort);
+   }
+ 
+   /**
+    * Returns the local SocketAddress this socket is bound to.
+    *
+    * @return The local SocketAddress or null if the socket is not bound.
+    *
+    * @since 1.4
+    */
+   public SocketAddress getLocalSocketAddress()
+   {
+     if (! isBound())
+       return null;
+ 
+     return new InetSocketAddress(getLocalAddress(), getLocalPort());
+   }
+ 
+   /**
+    * Enables/Disables SO_REUSEADDR.
+    *
+    * @param on Whether or not to have SO_REUSEADDR turned on.
+    *
+    * @exception SocketException If an error occurs.
+    *
+    * @since 1.4
+    */
+   public void setReuseAddress(boolean on) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().setOption(SocketOptions.SO_REUSEADDR, Boolean.valueOf(on));
+   }
+ 
+   /**
+    * Checks if SO_REUSEADDR is enabled.
+    *
+    * @return True if SO_REUSEADDR is set on the socket, false otherwise.
+    *
+    * @exception SocketException If an error occurs.
+    *
+    * @since 1.4
+    */
+   public boolean getReuseAddress() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.SO_REUSEADDR);
+ 
+     if (buf instanceof Boolean)
+       return ((Boolean) buf).booleanValue();
+ 
+     throw new SocketException("unexpected type");
+   }
+ 
+   /**
+    * Enables/Disables SO_BROADCAST
+    *
+    * @param enable True if SO_BROADCAST should be enabled, false otherwise.
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public void setBroadcast(boolean enable) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().setOption(SocketOptions.SO_BROADCAST, Boolean.valueOf(enable));
+   }
+ 
+   /**
+    * Checks if SO_BROADCAST is enabled
+    *
+    * @return Whether SO_BROADCAST is set
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public boolean getBroadcast() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.SO_BROADCAST);
+ 
+     if (buf instanceof Boolean)
+       return ((Boolean) buf).booleanValue();
+ 
+     throw new SocketException("unexpected type");
+   }
+ 
+   /**
+    * Sets the traffic class value
+    *
+    * @param tc The traffic class
+    *
+    * @exception SocketException If an error occurs
+    * @exception IllegalArgumentException If tc value is illegal
+    *
+    * @see DatagramSocket#getTrafficClass()
+    *
+    * @since 1.4
+    */
+   public void setTrafficClass(int tc) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (tc < 0 || tc > 255)
+       throw new IllegalArgumentException();
+ 
+     getImpl().setOption(SocketOptions.IP_TOS, new Integer(tc));
+   }
+ 
+   /**
+    * Returns the current traffic class
+    *
+    * @return The current traffic class.
+    *
+    * @see DatagramSocket#setTrafficClass(int tc)
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public int getTrafficClass() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.IP_TOS);
+ 
+     if (buf instanceof Integer)
+       return ((Integer) buf).intValue();
+ 
+     throw new SocketException("unexpected type");
+   }
+ 
+   /**
+    * Sets the datagram socket implementation factory for the application
+    *
+    * @param fac The factory to set
+    *
+    * @exception IOException If an error occurs
+    * @exception SocketException If the factory is already defined
+    * @exception SecurityException If a security manager exists and its
+    * checkSetFactory method doesn't allow the operation
+    */
+   public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac)
+     throws IOException
+   {
+     if (factory != null)
+       throw new SocketException("DatagramSocketImplFactory already defined");
+ 
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSetFactory();
+ 
+     factory = fac;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/DatagramSocketImpl.java gcc-4.1.0/libjava/classpath/java/net/DatagramSocketImpl.java
*** gcc-4.0.2/libjava/classpath/java/net/DatagramSocketImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/DatagramSocketImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,296 ----
+ /* DatagramSocketImpl.java -- Abstract class for UDP socket implementations
+    Copyright (C) 1998, 1999 2000, 2001,
+                  2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.FileDescriptor;
+ import java.io.IOException;
+ 
+ 
+ /**
+  * This abstract class models a datagram socket implementation.  An
+  * actual implementation class would implement these methods, probably
+  * via redirecting them to native code.
+  * <p>
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * <p>
+  * Status:  Believed complete and correct.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @since 1.1
+  */
+ public abstract class DatagramSocketImpl implements SocketOptions
+ {
+   /**
+    * The local port to which this socket is bound
+    */
+   protected int localPort;
+ 
+   /**
+    * The FileDescriptor object for this object.
+    */
+   protected FileDescriptor fd;
+ 
+   /**
+    * Default, no-argument constructor for subclasses to call.
+    */
+   public DatagramSocketImpl()
+   {
+   }
+ 
+   /**
+    * This method binds the socket to the specified local port and address.
+    *
+    * @param lport The port number to bind to
+    * @param laddr The address to bind to
+    *
+    * @exception SocketException If an error occurs
+    */
+   protected abstract void bind(int lport, InetAddress laddr)
+     throws SocketException;
+ 
+   /**
+    * This methods closes the socket
+    */
+   protected abstract void close();
+ 
+   /**
+    * Creates a new datagram socket.
+    *
+    * @exception SocketException If an error occurs
+    */
+   protected abstract void create() throws SocketException;
+ 
+   /**
+    * Takes a peek at the next packet received in order to retrieve the
+    * address of the sender
+    *
+    * @param i The <code>InetAddress</code> to fill in with the information
+    *          about the sender if the next packet
+    *
+    * @return The port number of the sender of the packet
+    *
+    * @exception IOException If an error occurs
+    * @exception PortUnreachableException May be thrown if the socket is
+    * connected to a currently unreachable destination. Note, there is no
+    * guarantee that the exception will be thrown.
+    */
+   protected abstract int peek(InetAddress i) throws IOException;
+ 
+   /**
+    * Takes a peek at the next packet received.  This packet is not consumed.
+    * With the next peekData/receive operation this packet will be read again.
+    *
+    * @param p The <code>DatagramPacket</code> to fill in with the data sent.
+    *
+    * @return The port number of the sender of the packet.
+    *
+    * @exception IOException If an error occurs
+    * @exception PortUnreachableException May be thrown if the socket is
+    * connected to a currently unreachable destination. Note, there is no
+    * guarantee that the exception will be thrown.
+    *
+    * @since 1.4
+    */
+   protected abstract int peekData(DatagramPacket p) throws IOException;
+ 
+   /**
+    * Transmits the specified packet of data to the network.  The destination
+    * host and port should be encoded in the packet.
+    *
+    * @param p The packet to send
+    *
+    * @exception IOException If an error occurs
+    * @exception PortUnreachableException May be thrown if the socket is
+    * connected to a currently unreachable destination. Note, there is no
+    * guarantee that the exception will be thrown.
+    */
+   protected abstract void send(DatagramPacket p) throws IOException;
+ 
+   /**
+    * Receives a packet of data from the network  Will block until a packet
+    * arrives.  The packet info in populated into the passed in
+    * <code>DatagramPacket</code> object.
+    *
+    * @param p A place to store the incoming packet.
+    *
+    * @exception IOException If an error occurs
+    * @exception PortUnreachableException May be thrown if the socket is
+    * connected to a currently unreachable destination. Note, there is no
+    * guarantee that the exception will be thrown.
+    */
+   protected abstract void receive(DatagramPacket p) throws IOException;
+ 
+   /**
+    * Connects the socket to a host specified by address and port.
+    *
+    * @param address The <code>InetAddress</code> of the host to connect to
+    * @param port The port number of the host to connect to
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   protected void connect(InetAddress address, int port)
+     throws SocketException
+   {
+     // This method has to be overwritten by real implementations
+   }
+ 
+   /**
+    * Disconnects the socket.
+    *
+    * @since 1.4
+    */
+   protected void disconnect()
+   {
+     // This method has to be overwritten by real implementations
+   }
+ 
+   /**
+    * Sets the Time to Live (TTL) setting on this socket to the specified
+    * value. <b>Use <code>setTimeToLive(int)</code></b> instead.
+    *
+    * @param ttl The new Time to Live value
+    *
+    * @exception IOException If an error occurs
+    * @deprecated
+    */
+   protected abstract void setTTL(byte ttl) throws IOException;
+ 
+   /**
+    * This method returns the current Time to Live (TTL) setting on this
+    * socket.  <b>Use <code>getTimeToLive()</code></b> instead.
+    *
+    * @return the current time-to-live
+    * 
+    * @exception IOException If an error occurs
+    * 
+    * @deprecated // FIXME: when ?
+    */
+   protected abstract byte getTTL() throws IOException;
+ 
+   /**
+    * Sets the Time to Live (TTL) setting on this socket to the specified
+    * value.
+    *
+    * @param ttl The new Time to Live value
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void setTimeToLive(int ttl) throws IOException;
+ 
+   /**
+    * This method returns the current Time to Live (TTL) setting on this
+    * socket.
+    *
+    * @return the current time-to-live
+    * 
+    * @exception IOException If an error occurs
+    */
+   protected abstract int getTimeToLive() throws IOException;
+ 
+   /**
+    * Causes this socket to join the specified multicast group
+    *
+    * @param inetaddr The multicast address to join with
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void join(InetAddress inetaddr) throws IOException;
+ 
+   /**
+    * Causes the socket to leave the specified multicast group.
+    *
+    * @param inetaddr The multicast address to leave
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void leave(InetAddress inetaddr) throws IOException;
+ 
+   /**
+    * Causes this socket to join the specified multicast group on a specified
+    * device
+    *
+    * @param mcastaddr The address to leave
+    * @param netIf The specified network interface to join the group at
+    *
+    * @exception IOException If an error occurs
+    *
+    * @since 1.4
+    */
+   protected abstract void joinGroup(SocketAddress mcastaddr,
+                                     NetworkInterface netIf)
+     throws IOException;
+ 
+   /**
+    * Leaves a multicast group
+    *
+    * @param mcastaddr The address to join
+    * @param netIf The specified network interface to leave the group at
+    *
+    * @exception IOException If an error occurs
+    *
+    * @since 1.4
+    */
+   protected abstract void leaveGroup(SocketAddress mcastaddr,
+                                      NetworkInterface netIf)
+     throws IOException;
+ 
+   /**
+    * Returns the FileDescriptor for this socket
+    * 
+    * @return the file descriptor associated with this socket
+    */
+   protected FileDescriptor getFileDescriptor()
+   {
+     return fd;
+   }
+ 
+   /**
+    * Returns the local port this socket is bound to
+    *
+    * @return the local port
+    */
+   protected int getLocalPort()
+   {
+     return localPort;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/DatagramSocketImplFactory.java gcc-4.1.0/libjava/classpath/java/net/DatagramSocketImplFactory.java
*** gcc-4.0.2/libjava/classpath/java/net/DatagramSocketImplFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/DatagramSocketImplFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* DatagramSocketImplFactory.java --
+    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /** Written using on-line Java Platform 1.4 API Specification.
+   * Status: Believed complete and correct.
+   */
+ /**
+   * This interface defines one method which returns a
+   * <code>DatagramSocketImpl</code> object.
+   * This should not be needed by ordinary applications.
+   *
+   * @author Michael Koch (konqueror@gmx.de)
+   * @since 1.3
+   */
+ public interface DatagramSocketImplFactory
+ {
+   /**
+    * This method returns an instance of the DatagramSocketImpl object
+    *
+    * @return A DatagramSocketImpl object
+    */
+   DatagramSocketImpl createDatagramSocketImpl();
+ } // interface DatagramSocketImplFactory
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/FileNameMap.java gcc-4.1.0/libjava/classpath/java/net/FileNameMap.java
*** gcc-4.0.2/libjava/classpath/java/net/FileNameMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/FileNameMap.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* FileNameMap.java -- Maps filenames to MIME types
+    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ /**
+   * This interface has one method which, when passed a filename, returns
+   * the MIME type associated with that filename.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   * @since 1.1
+   */
+ public interface FileNameMap
+ {
+   /**
+     * This method is passed a filename and is responsible for determining
+     * the appropriate MIME type for that file.
+     *
+     * @param filename The name of the file to generate a MIME type for.
+     *
+     * @return The MIME type for the filename passed in.
+     */
+   String getContentTypeFor(String filename);
+ } // interface FileNameMap
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/HttpURLConnection.java gcc-4.1.0/libjava/classpath/java/net/HttpURLConnection.java
*** gcc-4.0.2/libjava/classpath/java/net/HttpURLConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/HttpURLConnection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,589 ----
+ /* HttpURLConnection.java -- Subclass of communications links using
+    Hypertext Transfer Protocol.
+    Copyright (C) 1998, 1999, 2000, 2002, 2003  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.PushbackInputStream;
+ import java.security.Permission;
+ 
+ 
+ /*
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * This class provides a common abstract implementation for those
+  * URL connection classes that will connect using the HTTP protocol.
+  * In addition to the functionality provided by the URLConnection
+  * class, it defines constants for HTTP return code values and
+  * methods for setting the HTTP request method and determining whether
+  * or not to follow redirects.
+  *
+  * @since 1.1
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public abstract class HttpURLConnection extends URLConnection
+ {
+   /* HTTP Success Response Codes */
+ 
+   /**
+    * Indicates that the client may continue with its request.  This value
+    * is specified as part of RFC 2068 but was not included in Sun's JDK, so
+    * beware of using this value
+    */
+   static final int HTTP_CONTINUE = 100;
+ 
+   /**
+    * Indicates the request succeeded.
+    */
+   public static final int HTTP_OK = 200;
+ 
+   /**
+    * The requested resource has been created.
+    */
+   public static final int HTTP_CREATED = 201;
+ 
+   /**
+    * The request has been accepted for processing but has not completed.
+    * There is no guarantee that the requested action will actually ever
+    * be completed succesfully, but everything is ok so far.
+    */
+   public static final int HTTP_ACCEPTED = 202;
+ 
+   /**
+    * The meta-information returned in the header is not the actual data
+    * from the original server, but may be from a local or other copy.
+    * Normally this still indicates a successful completion.
+    */
+   public static final int HTTP_NOT_AUTHORITATIVE = 203;
+ 
+   /**
+    * The server performed the request, but there is no data to send
+    * back.  This indicates that the user's display should not be changed.
+    */
+   public static final int HTTP_NO_CONTENT = 204;
+ 
+   /**
+    * The server performed the request, but there is no data to sent back,
+    * however, the user's display should be "reset" to clear out any form
+    * fields entered.
+    */
+   public static final int HTTP_RESET = 205;
+ 
+   /**
+    * The server completed the partial GET request for the resource.
+    */
+   public static final int HTTP_PARTIAL = 206;
+ 
+   /* HTTP Redirection Response Codes */
+ 
+   /**
+    * There is a list of choices available for the requested resource.
+    */
+   public static final int HTTP_MULT_CHOICE = 300;
+ 
+   /**
+    * The resource has been permanently moved to a new location.
+    */
+   public static final int HTTP_MOVED_PERM = 301;
+ 
+   /**
+    * The resource requested has been temporarily moved to a new location.
+    */
+   public static final int HTTP_MOVED_TEMP = 302;
+ 
+   /**
+    * The response to the request issued is available at another location.
+    */
+   public static final int HTTP_SEE_OTHER = 303;
+ 
+   /**
+    * The document has not been modified since the criteria specified in
+    * a conditional GET.
+    */
+   public static final int HTTP_NOT_MODIFIED = 304;
+ 
+   /**
+    * The requested resource needs to be accessed through a proxy.
+    */
+   public static final int HTTP_USE_PROXY = 305;
+ 
+   /* HTTP Client Error Response Codes */
+ 
+   /**
+    * The request was misformed or could not be understood.
+    */
+   public static final int HTTP_BAD_REQUEST = 400;
+ 
+   /**
+    * The request made requires user authorization.  Try again with
+    * a correct authentication header.
+    */
+   public static final int HTTP_UNAUTHORIZED = 401;
+ 
+   /**
+    * Code reserved for future use - I hope way in the future.
+    */
+   public static final int HTTP_PAYMENT_REQUIRED = 402;
+ 
+   /**
+    * There is no permission to access the requested resource.
+    */
+   public static final int HTTP_FORBIDDEN = 403;
+ 
+   /**
+    * The requested resource was not found.
+    */
+   public static final int HTTP_NOT_FOUND = 404;
+ 
+   /**
+    * The specified request method is not allowed for this resource.
+    */
+   public static final int HTTP_BAD_METHOD = 405;
+ 
+   /**
+    * Based on the input headers sent, the resource returned in response
+    * to the request would not be acceptable to the client.
+    */
+   public static final int HTTP_NOT_ACCEPTABLE = 406;
+ 
+   /**
+    * The client must authenticate with a proxy prior to attempting this
+    * request.
+    */
+   public static final int HTTP_PROXY_AUTH = 407;
+ 
+   /**
+    * The request timed out.
+    */
+   public static final int HTTP_CLIENT_TIMEOUT = 408;
+ 
+   /**
+    * There is a conflict between the current state of the resource and the
+    * requested action.
+    */
+   public static final int HTTP_CONFLICT = 409;
+ 
+   /**
+    * The requested resource is no longer available.  This ususally indicates
+    * a permanent condition.
+    */
+   public static final int HTTP_GONE = 410;
+ 
+   /**
+    * A Content-Length header is required for this request, but was not
+    * supplied.
+    */
+   public static final int HTTP_LENGTH_REQUIRED = 411;
+ 
+   /**
+    * A client specified pre-condition was not met on the server.
+    */
+   public static final int HTTP_PRECON_FAILED = 412;
+ 
+   /**
+    * The request sent was too large for the server to handle.
+    */
+   public static final int HTTP_ENTITY_TOO_LARGE = 413;
+ 
+   /**
+    * The name of the resource specified was too long.
+    */
+   public static final int HTTP_REQ_TOO_LONG = 414;
+ 
+   /**
+    * The request is in a format not supported by the requested resource.
+    */
+   public static final int HTTP_UNSUPPORTED_TYPE = 415;
+ 
+   /* HTTP Server Error Response Codes */
+ 
+   /**
+    * This error code indicates that some sort of server error occurred.
+    *
+    * @deprecated
+    */
+   public static final int HTTP_SERVER_ERROR = 500;
+ 
+   /**
+    * The server encountered an unexpected error (such as a CGI script crash)
+    * that prevents the request from being fulfilled.
+    */
+   public static final int HTTP_INTERNAL_ERROR = 500;
+ 
+   /**
+    * The server does not support the requested functionality.
+    * @since 1.3
+    */
+   public static final int HTTP_NOT_IMPLEMENTED = 501;
+ 
+   /**
+    * The proxy encountered a bad response from the server it was proxy-ing for
+    */
+   public static final int HTTP_BAD_GATEWAY = 502;
+ 
+   /**
+    * The HTTP service is not availalble, such as because it is overloaded
+    * and does not want additional requests.
+    */
+   public static final int HTTP_UNAVAILABLE = 503;
+ 
+   /**
+    * The proxy timed out getting a reply from the remote server it was
+    * proxy-ing for.
+    */
+   public static final int HTTP_GATEWAY_TIMEOUT = 504;
+ 
+   /**
+    * This server does not support the protocol version requested.
+    */
+   public static final int HTTP_VERSION = 505;
+ 
+   // Non-HTTP response static variables
+ 
+   /**
+    * Flag to indicate whether or not redirects should be automatically
+    * followed by default.
+    */
+   private static boolean followRedirects = true;
+ 
+   /**
+    * This is a list of valid request methods, separated by "|" characters.
+    */
+   private static final String valid_methods =
+     "|GET|POST|HEAD|OPTIONS|PUT|DELETE|TRACE|";
+ 
+   // Instance Variables
+ 
+   /**
+    * The requested method in use for this connection. Default is GET.
+    */
+   protected String method = "GET";
+ 
+   /**
+    * The response code received from the server
+    */
+   protected int responseCode = -1;
+ 
+   /**
+    * The response message string received from the server.
+    */
+   protected String responseMessage;
+ 
+   /**
+    * If this instance should follow redirect requests.
+    */
+   protected boolean instanceFollowRedirects = followRedirects;
+ 
+   /**
+    * Whether we already got a valid response code for this connection.
+    * Used by <code>getResponseCode()</code> and
+    * <code>getResponseMessage()</code>.
+    */
+   private boolean gotResponseVals;
+ 
+   /**
+    * Create an HttpURLConnection for the specified URL
+    *
+    * @param url The URL to create this connection for.
+    */
+   protected HttpURLConnection(URL url)
+   {
+     super(url);
+   }
+ 
+   /**
+    * Closes the connection to the server.
+    */
+   public abstract void disconnect();
+ 
+   /**
+    * Returns a boolean indicating whether or not this connection is going
+    * through a proxy
+    *
+    * @return true if through a proxy, false otherwise
+    */
+   public abstract boolean usingProxy();
+ 
+   /**
+    * Sets whether HTTP redirects (requests with response code 3xx) should be
+    * automatically followed by this class. True by default
+    *
+    * @param set true if redirects should be followed, false otherwis.
+    *
+    * @exception SecurityException If a security manager exists and its
+    * checkSetFactory method doesn't allow the operation
+    */
+   public static void setFollowRedirects(boolean set)
+   {
+     // Throw an exception if an extant security mgr precludes
+     // setting the factory.
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkSetFactory();
+ 
+     followRedirects = set;
+   }
+ 
+   /**
+    * Returns a boolean indicating whether or not HTTP redirects will
+    * automatically be followed or not.
+    *
+    * @return true if redirects will be followed, false otherwise
+    */
+   public static boolean getFollowRedirects()
+   {
+     return followRedirects;
+   }
+ 
+   /**
+    * Returns the value of this HttpURLConnection's instanceFollowRedirects
+    * field
+    * 
+    * @return true if following redirects is enabled, false otherwise
+    */
+   public boolean getInstanceFollowRedirects()
+   {
+     return instanceFollowRedirects;
+   }
+ 
+   /**
+    * Sets the value of this HttpURLConnection's instanceFollowRedirects field
+    *
+    * @param follow true to enable following redirects, false otherwise
+    */
+   public void setInstanceFollowRedirects(boolean follow)
+   {
+     instanceFollowRedirects = follow;
+   }
+ 
+   /**
+    * Set the method for the URL request, one of:
+    * GET POST HEAD OPTIONS PUT DELETE TRACE are legal
+    *
+    * @param method the method to use
+    *
+    * @exception ProtocolException If the method cannot be reset or if the
+    * requested method isn't valid for HTTP
+    */
+   public void setRequestMethod(String method) throws ProtocolException
+   {
+     if (connected)
+       throw new ProtocolException("Already connected");
+ 
+     method = method.toUpperCase();
+     if (valid_methods.indexOf("|" + method + "|") != -1)
+       this.method = method;
+     else
+       throw new ProtocolException("Invalid HTTP request method: " + method);
+   }
+ 
+   /**
+    * The request method currently in use for this connection.
+    *
+    * @return The request method
+    */
+   public String getRequestMethod()
+   {
+     return method;
+   }
+ 
+   /**
+    * Gets the status code from an HTTP response message, or -1 if
+    * the response code could not be determined.
+    * Note that all valid response codes have class variables
+    * defined for them in this class.
+    *
+    * @return The response code
+    *
+    * @exception IOException If an error occurs
+    */
+   public int getResponseCode() throws IOException
+   {
+     if (! gotResponseVals)
+       getResponseVals();
+     return responseCode;
+   }
+ 
+   /**
+    * Gets the HTTP response message, if any, returned along with the
+    * response code from a server. Null if no response message was set
+    * or an error occured while connecting.
+    *
+    * @return The response message
+    *
+    * @exception IOException If an error occurs
+    */
+   public String getResponseMessage() throws IOException
+   {
+     if (! gotResponseVals)
+       getResponseVals();
+     return responseMessage;
+   }
+ 
+   private void getResponseVals() throws IOException
+   {
+     // getHeaderField() will connect for us, but do it here first in
+     // order to pick up IOExceptions.
+     if (! connected)
+       connect();
+ 
+     gotResponseVals = true;
+ 
+     // If responseCode not yet explicitly set by subclass
+     if (responseCode == -1)
+       {
+ 	// Response is the first header received from the connection.
+ 	String respField = getHeaderField(0);
+ 
+ 	if (respField == null || ! respField.startsWith("HTTP/"))
+ 	  {
+ 	    // Set to default values on failure.
+ 	    responseCode = -1;
+ 	    responseMessage = null;
+ 	    return;
+ 	  }
+ 
+ 	int firstSpc;
+ 	int nextSpc;
+ 	firstSpc = respField.indexOf(' ');
+ 	nextSpc = respField.indexOf(' ', firstSpc + 1);
+ 	responseMessage = respField.substring(nextSpc + 1);
+ 	String codeStr = respField.substring(firstSpc + 1, nextSpc);
+ 	try
+ 	  {
+ 	    responseCode = Integer.parseInt(codeStr);
+ 	  }
+ 	catch (NumberFormatException e)
+ 	  {
+ 	    // Set to default values on failure.
+ 	    responseCode = -1;
+ 	    responseMessage = null;
+ 	  }
+       }
+   }
+ 
+   /**
+    * Returns a permission object representing the permission necessary to make
+    * the connection represented by this object
+    *
+    * @return the permission necessary for this connection
+    *
+    * @exception IOException If an error occurs
+    */
+   public Permission getPermission() throws IOException
+   {
+     URL url = getURL();
+     String host = url.getHost();
+     int port = url.getPort();
+     if (port == -1)
+       port = 80;
+ 
+     host = host + ":" + port;
+ 
+     return new SocketPermission(host, "connect");
+   }
+ 
+   /**
+    * This method allows the caller to retrieve any data that might have
+    * been sent despite the fact that an error occurred.  For example, the
+    * HTML page sent along with a 404 File Not Found error.  If the socket
+    * is not connected, or if no error occurred or no data was returned,
+    * this method returns <code>null</code>.
+    *
+    * @return An <code>InputStream</code> for reading error data.
+    */
+   public InputStream getErrorStream()
+   {
+     if (! connected)
+       return null;
+ 
+     int code;
+     try
+       {
+ 	code = getResponseCode();
+       }
+     catch (IOException e)
+       {
+ 	code = -1;
+       }
+ 
+     if (code == -1)
+       return null;
+ 
+     if (((code / 100) != 4) || ((code / 100) != 5))
+       return null;
+ 
+     try
+       {
+ 	PushbackInputStream pbis = new PushbackInputStream(getInputStream());
+ 
+ 	int i = pbis.read();
+ 	if (i == -1)
+ 	  return null;
+ 
+ 	pbis.unread(i);
+ 	return pbis;
+       }
+     catch (IOException e)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns the value of the named field parsed as date
+    *
+    * @param key the key of the header field
+    * @param value the default value if the header field is not present
+    *
+    * @return the value of the header field
+    */
+   public long getHeaderFieldDate(String key, long value)
+   {
+     // FIXME: implement this correctly
+     // http://www.w3.org/Protocols/HTTP-NG/ng-notes.txt
+     return super.getHeaderFieldDate(key, value);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/Inet4Address.java gcc-4.1.0/libjava/classpath/java/net/Inet4Address.java
*** gcc-4.0.2/libjava/classpath/java/net/Inet4Address.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/Inet4Address.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,233 ----
+ /* Inet4Address.java --
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.net;
+ 
+ import java.io.ObjectStreamException;
+ 
+ /*
+  * Written using on-line Java Platform 1.4 API Specification and
+  * RFC 1884 (http://www.ietf.org/rfc/rfc1884.txt),
+  * RFC 1918 (http://www.ietf.org/rfc/rfc1918.txt),
+  * RFC 2365 (http://www.ietf.org/rfc/rfc2365.txt)
+  *
+  * @author Michael Koch
+  * @status Believed complete and correct.
+  */
+ public final class Inet4Address extends InetAddress
+ {
+   /**
+    * For compatability with Sun's JDK 1.4.2 rev. 5
+    */
+   static final long serialVersionUID = 3286316764910316507L;
+ 
+   /**
+    * needed for serialization
+    */
+   private Object writeReplace() throws ObjectStreamException
+   {
+     return new InetAddress(addr, hostName);
+   }
+   
+   /**
+    * Initializes this object's addr instance variable from the passed in
+    * byte array.  Note that this constructor is protected and is called
+    * only by static methods in this class.
+    *
+    * @param addr The IP number of this address as an array of bytes
+    * @param host The hostname of this IP address.
+    */
+   Inet4Address(byte[] addr, String host)
+   {
+     super(addr, host);
+   }
+ 
+   /**
+    * Checks if the address is a multicast address
+    *
+    * @since 1.1
+    */
+   public boolean isMulticastAddress()
+   {
+     return super.isMulticastAddress();
+   }
+ 
+   /**
+    * Checks if this address is a loopback address
+    */
+   public boolean isLoopbackAddress()
+   {
+     return super.isLoopbackAddress();
+   }
+ 
+   /**
+    * Checks if this address is a wildcard address
+    *
+    * @since 1.4
+    */
+   public boolean isAnyLocalAddress()
+   {
+     return super.isAnyLocalAddress();
+   }
+ 
+   /**
+    * Checks if this address is a link local address
+    *
+    * @since 1.4
+    */
+   public boolean isLinkLocalAddress()
+   {
+     return super.isLinkLocalAddress();
+   }
+ 
+   /**
+    * Checks if this address is a site local address
+    *
+    * @since 1.4
+    */
+   public boolean isSiteLocalAddress()
+   {
+     return super.isSiteLocalAddress();
+   }
+ 
+   /**
+    * Checks if this multicast address has global scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCGlobal()
+   {
+     return super.isMCGlobal();
+   }
+ 
+   /**
+    * Checks if this multicast address has node scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCNodeLocal()
+   {
+     return super.isMCNodeLocal();
+   }
+ 
+   /**
+    * Checks if this multicast address has link scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCLinkLocal()
+   {
+     return super.isMCLinkLocal();
+   }
+ 
+   /**
+    * Checks if this multicast address has site scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCSiteLocal()
+   {
+     return super.isMCSiteLocal();
+   }
+ 
+   /**
+    * Checks if this multicast address has organization scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCOrgLocal()
+   {
+     return super.isMCOrgLocal();
+   }
+ 
+   /**
+    * Returns the address of the current instance
+    */
+   public byte[] getAddress()
+   {
+     return (byte[]) addr.clone();
+   }
+ 
+   /**
+    * Returns the address as string
+    *
+    * @since 1.0.2
+    */
+   public String getHostAddress()
+   {
+     return super.getHostAddress();
+   }
+ 
+   /**
+    * Computes the hashcode of the instance
+    */
+   public int hashCode()
+   {
+     int hash = 0;
+     int len = addr.length;
+     int i = len > 4 ? len - 4 : 0;
+ 
+     for (; i < len; i++)
+       hash = (hash << 8) | (addr[i] & 0xFF);
+ 
+     return hash;
+   }
+ 
+   /**
+    * Compare the current Inet4Address instance with obj
+    *
+    * @param obj Object to compare with
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof InetAddress))
+       return false;
+ 
+     byte[] addr1 = addr;
+     byte[] addr2 = ((InetAddress) obj).addr;
+ 
+     if (addr1.length != addr2.length)
+       return false;
+ 
+     for (int i = addr1.length; --i >= 0;)
+       if (addr1[i] != addr2[i])
+ 	return false;
+ 
+     return true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/Inet6Address.java gcc-4.1.0/libjava/classpath/java/net/Inet6Address.java
*** gcc-4.0.2/libjava/classpath/java/net/Inet6Address.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/Inet6Address.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,261 ----
+ /* Inet6Address.java --
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.net;
+ 
+ import java.util.Arrays;
+ 
+ /*
+  * Written using on-line Java Platform 1.4 API Specification and
+  * RFC 1884 (http://www.ietf.org/rfc/rfc1884.txt)
+  * 
+  * @author Michael Koch
+  * @status Believed complete and correct.
+  */
+ public final class Inet6Address extends InetAddress
+ {
+   static final long serialVersionUID = 6880410070516793377L;
+ 
+   /**
+    * Needed for serialization
+    */
+   byte[] ipaddress;
+ 
+   /**
+    * Create an Inet6Address object
+    *
+    * @param addr The IP address
+    * @param host The hostname
+    */
+   Inet6Address(byte[] addr, String host)
+   {
+     super(addr, host);
+     // Super constructor clones the addr.  Get a reference to the clone.
+     this.ipaddress = this.addr;
+   }
+ 
+   /**
+    * Utility routine to check if the InetAddress is an IP multicast address
+    *
+    * @since 1.1
+    */
+   public boolean isMulticastAddress()
+   {
+     return ipaddress[0] == 0xFF;
+   }
+ 
+   /**
+    * Utility routine to check if the InetAddress in a wildcard address
+    *
+    * @since 1.4
+    */
+   public boolean isAnyLocalAddress()
+   {
+     byte[] anylocal = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ 
+     return Arrays.equals(ipaddress, anylocal);
+   }
+ 
+   /**
+    * Utility routine to check if the InetAddress is a loopback address
+    *
+    * @since 1.4
+    */
+   public boolean isLoopbackAddress()
+   {
+     byte[] loopback = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+ 
+     return Arrays.equals(ipaddress, loopback);
+   }
+ 
+   /**
+    * Utility routine to check if the InetAddress is an link local address
+    *
+    * @since 1.4
+    */
+   public boolean isLinkLocalAddress()
+   {
+     return ipaddress[0] == 0xFA;
+   }
+ 
+   /**
+    * Utility routine to check if the InetAddress is a site local address
+    *
+    * @since 1.4
+    */
+   public boolean isSiteLocalAddress()
+   {
+     return ipaddress[0] == 0xFB;
+   }
+ 
+   /**
+    * Utility routine to check if the multicast address has global scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCGlobal()
+   {
+     if (! isMulticastAddress())
+       return false;
+ 
+     return (ipaddress[1] & 0x0F) == 0xE;
+   }
+ 
+   /**
+    * Utility routine to check if the multicast address has node scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCNodeLocal()
+   {
+     if (! isMulticastAddress())
+       return false;
+ 
+     return (ipaddress[1] & 0x0F) == 0x1;
+   }
+ 
+   /**
+    * Utility routine to check if the multicast address has link scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCLinkLocal()
+   {
+     if (! isMulticastAddress())
+       return false;
+ 
+     return (ipaddress[1] & 0x0F) == 0x2;
+   }
+ 
+   /**
+    * Utility routine to check if the multicast address has site scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCSiteLocal()
+   {
+     if (! isMulticastAddress())
+       return false;
+ 
+     return (ipaddress[1] & 0x0F) == 0x5;
+   }
+ 
+   /**
+    * Utility routine to check if the multicast address has organization scope
+    *
+    * @since 1.4
+    */
+   public boolean isMCOrgLocal()
+   {
+     if (! isMulticastAddress())
+       return false;
+ 
+     return (ipaddress[1] & 0x0F) == 0x8;
+   }
+ 
+   /**
+    * Returns the raw IP address of this InetAddress object. The result is in
+    * network byte order: the highest order byte of the address is i
+    * n getAddress()[0]
+    */
+   public byte[] getAddress()
+   {
+     return (byte[]) ipaddress.clone();
+   }
+ 
+   /**
+    * Returns the IP address string in textual presentation
+    */
+   public String getHostAddress()
+   {
+     StringBuffer sbuf = new StringBuffer(40);
+ 
+     for (int i = 0; i < 16; i += 2)
+       {
+ 	int x = ((ipaddress[i] & 0xFF) << 8) | (ipaddress[i + 1] & 0xFF);
+ 
+ 	if (i > 0)
+ 	  sbuf.append(':');
+ 
+ 	sbuf.append(Integer.toHexString(x));
+       }
+ 
+     return sbuf.toString();
+   }
+ 
+   /**
+    * Returns a hashcode for this IP address
+    */
+   public int hashCode()
+   {
+     return super.hashCode();
+   }
+ 
+   /**
+    * Compares this object against the specified object
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof Inet6Address))
+       return false;
+ 
+     // this.ipaddress is never set in this class except to
+     // the value of the super class' addr.  The super classes
+     // equals(Object) will do the compare.
+     return super.equals(obj);
+   }
+ 
+   /**
+    * Utility routine to check if the InetAddress is an
+    * IPv4 compatible IPv6 address
+    *
+    * @since 1.4
+    */
+   public boolean isIPv4CompatibleAddress()
+   {
+     if (ipaddress[0] != 0x00 || ipaddress[1] != 0x00 || ipaddress[2] != 0x00
+         || ipaddress[3] != 0x00 || ipaddress[4] != 0x00
+         || ipaddress[5] != 0x00 || ipaddress[6] != 0x00
+         || ipaddress[7] != 0x00 || ipaddress[8] != 0x00
+         || ipaddress[9] != 0x00 || ipaddress[10] != 0x00
+         || ipaddress[11] != 0x00)
+       return false;
+ 
+     return true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/InetAddress.java gcc-4.1.0/libjava/classpath/java/net/InetAddress.java
*** gcc-4.0.2/libjava/classpath/java/net/InetAddress.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/InetAddress.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,813 ----
+ /* InetAddress.java -- Class to model an Internet address
+    Copyright (C) 1998, 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.ObjectStreamException;
+ import java.io.Serializable;
+ import java.util.HashMap;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * This class models an Internet address.  It does not have a public
+  * constructor.  Instead, new instances of this objects are created
+  * using the static methods getLocalHost(), getByName(), and
+  * getAllByName().
+  *
+  * <p>This class fulfills the function of the C style functions gethostname(),
+  * gethostbyname(), and gethostbyaddr().  It resolves Internet DNS names
+  * into their corresponding numeric addresses and vice versa.</p>
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner
+  *
+  * @specnote This class is not final since JK 1.4
+  */
+ public class InetAddress implements Serializable
+ {
+   private static final long serialVersionUID = 3286316764910316507L;
+ 
+   /**
+    * The default DNS hash table size,
+    * Use a prime number happy with hash table.
+    */
+   private static final int DEFAULT_CACHE_SIZE = 89;
+ 
+   /**
+    * The default caching period in minutes.
+    */
+   private static final int DEFAULT_CACHE_PERIOD = 4 * 60;
+ 
+   /**
+    * Percentage of cache entries to purge when the table gets full.
+    */
+   private static final int DEFAULT_CACHE_PURGE_PCT = 30;
+ 
+   /**
+    * The special IP address INADDR_ANY.
+    */
+   private static InetAddress inaddr_any;
+ 
+   /**
+    * Dummy InetAddress, used to bind socket to any (all) network interfaces.
+    */
+   static InetAddress ANY_IF;
+ 
+   /**
+    * Stores static localhost address object.
+    */
+   static InetAddress LOCALHOST;
+ 
+   /**
+    * The size of the cache.
+    */
+   private static int cache_size = 0;
+ 
+   /**
+    * The length of time we will continue to read the address from cache
+    * before forcing another lookup.
+    */
+   private static int cache_period = 0;
+ 
+   /**
+    * What percentage of the cache we will purge if it gets full.
+    */
+   private static int cache_purge_pct = 0;
+ 
+   /**
+    * HashMap to use as DNS lookup cache.
+    * Use HashMap because all accesses to cache are already synchronized.
+    */
+   private static HashMap cache;
+ 
+   static
+   {
+     // Look for properties that override default caching behavior
+     cache_size =
+       Integer.getInteger("gnu.java.net.dns_cache_size", DEFAULT_CACHE_SIZE)
+              .intValue();
+     cache_period =
+       Integer.getInteger("gnu.java.net.dns_cache_period",
+                          DEFAULT_CACHE_PERIOD * 60 * 1000).intValue();
+ 
+     cache_purge_pct =
+       Integer.getInteger("gnu.java.net.dns_cache_purge_pct",
+                          DEFAULT_CACHE_PURGE_PCT).intValue();
+ 
+     // Fallback to  defaults if necessary
+     if ((cache_purge_pct < 1) || (cache_purge_pct > 100))
+       cache_purge_pct = DEFAULT_CACHE_PURGE_PCT;
+ 
+     // Create the cache
+     if (cache_size != 0)
+       cache = new HashMap(cache_size);
+ 
+     // precompute the ANY_IF address
+     try
+       {
+         ANY_IF = getInaddrAny();
+ 
+ 	byte[] ip_localhost = { 127, 0, 0, 1 };
+ 	LOCALHOST = new Inet4Address(ip_localhost, "localhost");
+       }
+     catch (UnknownHostException uhe)
+       {
+         // Hmmm, make one up and hope that it works.
+         byte[] zeros = { 0, 0, 0, 0 };
+         ANY_IF = new Inet4Address(zeros, "0.0.0.0");
+       }
+   }
+ 
+   /**
+    * The Serialized Form specifies that an int 'address' is saved/restored.
+    * This class uses a byte array internally so we'll just do the conversion
+    * at serialization time and leave the rest of the algorithm as is.
+    */
+   private int address;
+ 
+   /**
+    * An array of octets representing an IP address.
+    */
+   transient byte[] addr;
+ 
+   /**
+    * The name of the host for this address.
+    */
+   String hostName;
+ 
+   /**
+    * The time this address was looked up.
+    */
+   transient long lookup_time;
+ 
+   /**
+    * The field 'family' seems to be the AF_ value.
+    * FIXME: Much of the code in the other java.net classes does not make
+    * use of this family field.  A better implementation would be to make
+    * use of getaddrinfo() and have other methods just check the family
+    * field rather than examining the length of the address each time.
+    */
+   int family;
+ 
+   /**
+    * Initializes this object's addr instance variable from the passed in
+    * byte array.  Note that this constructor is protected and is called
+    * only by static methods in this class.
+    *
+    * @param ipaddr The IP number of this address as an array of bytes
+    * @param hostname The hostname of this IP address.
+    */
+   InetAddress(byte[] ipaddr, String hostname)
+   {
+     addr = (null == ipaddr) ? null : (byte[]) ipaddr.clone();
+     hostName = hostname;
+     
+     lookup_time = System.currentTimeMillis();
+ 
+     family = 2; /* AF_INET */
+   }
+ 
+   /**
+    * Returns true if this address is a multicast address, false otherwise.
+    * An address is multicast if the high four bits are "1110".  These are
+    * also known as "Class D" addresses.
+    *
+    * @return true if mulitcast, false if not
+    *
+    * @since 1.1
+    */
+   public boolean isMulticastAddress()
+   {
+     // Mask against high order bits of 1110
+     if (addr.length == 4)
+       return (addr[0] & 0xf0) == 0xe0;
+ 
+     return false;
+   }
+ 
+   /**
+    * Utility routine to check if the InetAddress in a wildcard address
+    *
+    * @since 1.4
+    */
+   public boolean isAnyLocalAddress()
+   {
+     // This is the IPv4 implementation.
+     // Any class derived from InetAddress should override this.
+     return equals(ANY_IF);
+   }
+ 
+   /**
+    * Utility routine to check if the InetAddress is a loopback address
+    *
+    * @since 1.4
+    */
+   public boolean isLoopbackAddress()
+   {
+     // This is the IPv4 implementation.
+     // Any class derived from InetAddress should override this.
+     return (addr[0] & 0xff) == 0x7f;
+   }
+ 
+   /**
+    * Utility routine to check if InetAddress is a link local address
+    *
+    * @since 1.4
+    */
+   public boolean isLinkLocalAddress()
+   {
+     // This is the IPv4 implementation.
+     // Any class derived from InetAddress should override this.
+     // XXX: This seems to not exist with IPv4 addresses
+     return false;
+   }
+ 
+   /**
+    * Utility routine to check if InetAddress is a site local address
+    *
+    * @since 1.4
+    */
+   public boolean isSiteLocalAddress()
+   {
+     // This is the IPv4 implementation.
+     // Any class derived from InetAddress should override this.
+ 
+     // 10.0.0.0/8
+     if ((addr[0] & 0xff) == 0x0a)
+       return true;
+ 
+     // 172.16.0.0/12
+     if ((addr[0] & 0xff) == 0xac && (addr[1] & 0xf0) == 0x10)
+       return true;
+ 
+     // 192.168.0.0/16
+     if ((addr[0] & 0xff) == 0xc0 && (addr[1] & 0xff) == 0xa8)
+       return true;
+ 
+     // XXX: Do we need to check more addresses here ?
+     return false;
+   }
+ 
+   /**
+    * Utility routine to check if InetAddress is a global multicast address
+    *
+    * @since 1.4
+    */
+   public boolean isMCGlobal()
+   {
+     // This is the IPv4 implementation.
+     // Any class derived from InetAddress should override this.
+     // XXX: This seems to not exist with IPv4 addresses
+     return false;
+   }
+ 
+   /**
+    * Utility routine to check if InetAddress is a node local multicast address.
+    *
+    * @since 1.4
+    */
+   public boolean isMCNodeLocal()
+   {
+     // This is the IPv4 implementation.
+     // Any class derived from InetAddress should override this.
+     // XXX: This seems to not exist with IPv4 addresses
+     return false;
+   }
+ 
+   /**
+    * Utility routine to check if InetAddress is a link local multicast address.
+    *
+    * @since 1.4
+    */
+   public boolean isMCLinkLocal()
+   {
+     // This is the IPv4 implementation.
+     // Any class derived from InetAddress should override this.
+     if (! isMulticastAddress())
+       return false;
+ 
+     return ((addr[0] & 0xff) == 0xe0
+ 	    && (addr[1] & 0xff)  == 0x00
+ 	    && (addr[2] & 0xff)  == 0x00);
+   }
+ 
+   /**
+    * Utility routine to check if InetAddress is a site local multicast address.
+    *
+    * @since 1.4
+    */
+   public boolean isMCSiteLocal()
+   {
+     // This is the IPv4 implementation.
+     // Any class derived from InetAddress should override this.
+     // XXX: This seems to not exist with IPv4 addresses
+     return false;
+   }
+ 
+   /**
+    * Utility routine to check if InetAddress is a organization local
+    * multicast address.
+    *
+    * @since 1.4
+    */
+   public boolean isMCOrgLocal()
+   {
+     // This is the IPv4 implementation.
+     // Any class derived from InetAddress should override this.
+     // XXX: This seems to not exist with IPv4 addresses
+     return false;
+   }
+ 
+   /**
+    * Returns the hostname for this address.  This will return the IP address
+    * as a String if there is no hostname available for this address
+    *
+    * @return The hostname for this address
+    */
+   public String getHostName()
+   {
+     if (hostName != null)
+       return hostName;
+ 
+     try
+       {
+ 	hostName = VMInetAddress.getHostByAddr(addr);
+ 	return hostName;
+       }
+     catch (UnknownHostException e)
+       {
+ 	return getHostAddress();
+       }
+   }
+ 
+   /**
+    * Returns the canonical hostname represented by this InetAddress
+    * 
+    * @since 1.4
+    */
+   public String getCanonicalHostName()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       {
+         try
+ 	  {
+             sm.checkConnect(hostName, -1);
+ 	  }
+ 	catch (SecurityException e)
+ 	  {
+ 	    return getHostAddress();
+ 	  }
+       }
+ 
+     // Try to find the FDQN now
+     InetAddress address;
+     byte[] ipaddr = getAddress();
+ 
+     if (ipaddr.length == 16)
+       address = new Inet6Address(getAddress(), null);
+     else
+       address = new Inet4Address(getAddress(), null);
+ 
+     return address.getHostName();
+   }
+ 
+   /**
+    * Returns the IP address of this object as a byte array.
+    *
+    * @return IP address
+    */
+   public byte[] getAddress()
+   {
+     // An experiment shows that JDK1.2 returns a different byte array each
+     // time.  This makes sense, in terms of security.
+     return (byte[]) addr.clone();
+   }
+ 
+   /**
+    * Returns the IP address of this object as a String.  The address is in
+    * the dotted octet notation, for example, "127.0.0.1".
+    *
+    * @return The IP address of this object in String form
+    *
+    * @since 1.0.2
+    */
+   public String getHostAddress()
+   {
+     StringBuffer sb = new StringBuffer(40);
+ 
+     int len = addr.length;
+     int i = 0;
+     
+     for ( ; ; )
+       {
+         sb.append(addr[i] & 0xff);
+         i++;
+ 	
+         if (i == len)
+           break;
+ 	
+         sb.append('.');
+       }
+ 
+     return sb.toString();
+   }
+ 
+   /**
+    * Returns a hash value for this address.  Useful for creating hash
+    * tables.  Overrides Object.hashCode()
+    *
+    * @return A hash value for this address.
+    */
+   public int hashCode()
+   {
+     // There hashing algorithm is not specified, but a simple experiment
+     // shows that it is equal to the address, as a 32-bit big-endian integer.
+     int hash = 0;
+     int len = addr.length;
+     int i = len > 4 ? len - 4 : 0;
+ 
+     for (; i < len; i++)
+       hash = (hash << 8) | (addr[i] & 0xff);
+ 
+     return hash;
+   }
+ 
+   /**
+    * Tests this address for equality against another InetAddress.  The two
+    * addresses are considered equal if they contain the exact same octets.
+    * This implementation overrides Object.equals()
+    *
+    * @param obj The address to test for equality
+    *
+    * @return true if the passed in object's address is equal to this one's,
+    * false otherwise
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof InetAddress))
+       return false;
+ 
+     // "The Java Class Libraries" 2nd edition says "If a machine has
+     // multiple names instances of InetAddress for different name of
+     // that same machine are not equal.  This is because they have
+     // different host names."  This violates the description in the
+     // JDK 1.2 API documentation.  A little experimentation
+     // shows that the latter is correct.
+     byte[] addr2 = ((InetAddress) obj).addr;
+ 
+     if (addr.length != addr2.length)
+       return false;
+ 
+     for (int i = 0; i < addr.length; i++)
+       if (addr[i] != addr2[i])
+ 	return false;
+ 
+     return true;
+   }
+ 
+   /**
+    * Converts this address to a String.  This string contains the IP in
+    * dotted decimal form. For example: "127.0.0.1"  This method is equivalent
+    * to getHostAddress() and overrides Object.toString()
+    *
+    * @return This address in String form
+    */
+   public String toString()
+   {
+     String addr = getHostAddress();
+     String host = (hostName != null) ? hostName : "";
+     return host + "/" + addr;
+   }
+ 
+   /**
+    * Returns an InetAddress object given the raw IP address.
+    *
+    * The argument is in network byte order: the highest order byte of the
+    * address is in getAddress()[0].
+    *
+    * @param addr The IP address to create the InetAddress object from
+    *
+    * @exception UnknownHostException If IP address has illegal length
+    *
+    * @since 1.4
+    */
+   public static InetAddress getByAddress(byte[] addr)
+     throws UnknownHostException
+   {
+     return getByAddress(null, addr);
+   }
+ 
+   /**
+    * Creates an InetAddress based on the provided host name and IP address.
+    * No name service is checked for the validity of the address.
+    *
+    * @param host The hostname of the InetAddress object to create
+    * @param addr The IP address to create the InetAddress object from
+    *
+    * @exception UnknownHostException If IP address is of illegal length
+    *
+    * @since 1.4
+    */
+   public static InetAddress getByAddress(String host, byte[] addr)
+     throws UnknownHostException
+   {
+     if (addr.length == 4)
+       return new Inet4Address(addr, host);
+ 
+     if (addr.length == 16)
+       return new Inet6Address(addr, host);
+ 
+     throw new UnknownHostException("IP address has illegal length");
+   }
+ 
+   /**
+    * If hostname is a valid numeric IP address, return the numeric address.
+    * Otherwise, return null.
+    *
+    * @param hostname the name of the host
+    */
+   private static byte[] aton(String hostname)
+   {
+     StringTokenizer st = new StringTokenizer(hostname, ".");
+ 
+     if (st.countTokens() == 4)
+       {
+ 	int index;
+ 	byte[] address = new byte[4];
+ 
+ 	for (index = 0; index < 4; index++)
+ 	  {
+ 	    try
+ 	      {
+ 		short n = Short.parseShort(st.nextToken());
+ 
+ 		if ((n < 0) || (n > 255))
+ 		  break;
+ 
+ 		address[index] = (byte) n;
+ 	      }
+ 	    catch (NumberFormatException e)
+ 	      {
+ 		break;
+ 	      }
+ 	  }
+ 
+ 	if (index == 4)
+ 	  return address;
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Returns an InetAddress object representing the IP address of the given
+    * hostname.  This name can be either a hostname such as "www.urbanophile.com"
+    * or an IP address in dotted decimal format such as "127.0.0.1".  If the
+    * hostname is null or "", the hostname of the local machine is supplied by
+    * default.  This method is equivalent to returning the first element in
+    * the InetAddress array returned from GetAllByName.
+    *
+    * @param hostname The name of the desired host, or null for the local 
+    * loopback address.
+    *
+    * @return The address of the host as an InetAddress object.
+    *
+    * @exception UnknownHostException If no IP address for the host could
+    * be found
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect method doesn't allow the operation
+    */
+   public static InetAddress getByName(String hostname)
+     throws UnknownHostException
+   {
+     InetAddress[] addresses = getAllByName(hostname);
+     return addresses[0];
+   }
+ 
+   /**
+    * Returns an array of InetAddress objects representing all the host/ip
+    * addresses of a given host, given the host's name.  This name can be
+    * either a hostname such as "www.urbanophile.com" or an IP address in
+    * dotted decimal format such as "127.0.0.1".  If the value is null, the
+    * hostname of the local machine is supplied by default.
+    *
+    * @param hostname The name of the desired host, or null for the
+    * local loopback address.
+    *
+    * @return All addresses of the host as an array of InetAddress objects.
+    *
+    * @exception UnknownHostException If no IP address for the host could
+    * be found
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect method doesn't allow the operation
+    */
+   public static InetAddress[] getAllByName(String hostname)
+     throws UnknownHostException
+   {
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkConnect(hostname, -1);
+ 
+     InetAddress[] addresses;
+ 
+     // Default to current host if necessary
+     if (hostname == null)
+       {
+ 	addresses = new InetAddress[1];
+ 	addresses[0] = LOCALHOST;
+ 	return addresses;
+       }
+ 
+     // Check the cache for this host before doing a lookup
+     addresses = checkCacheFor(hostname);
+ 
+     if (addresses != null)
+       return addresses;
+ 
+     // Not in cache, try the lookup
+     byte[][] iplist = VMInetAddress.getHostByName(hostname);
+ 
+     if (iplist.length == 0)
+       throw new UnknownHostException(hostname);
+ 
+     addresses = new InetAddress[iplist.length];
+ 
+     for (int i = 0; i < iplist.length; i++)
+       {
+ 	if (iplist[i].length != 4)
+ 	  throw new UnknownHostException(hostname);
+ 
+ 	addresses[i] = new Inet4Address(iplist[i], hostname);
+       }
+ 
+     addToCache(hostname, addresses);
+     return addresses;
+   }
+ 
+   /**
+    * This method checks the DNS cache to see if we have looked this hostname
+    * up before. If so, we return the cached addresses unless it has been in the
+    * cache too long.
+    *
+    * @param hostname The hostname to check for
+    *
+    * @return The InetAddress for this hostname or null if not available
+    */
+   private static synchronized InetAddress[] checkCacheFor(String hostname)
+   {
+     InetAddress[] addresses = null;
+ 
+     if (cache_size == 0)
+       return null;
+ 
+     Object obj = cache.get(hostname);
+     if (obj == null)
+       return null;
+ 
+     if (obj instanceof InetAddress[])
+       addresses = (InetAddress[]) obj;
+ 
+     if (addresses == null)
+       return null;
+ 
+     if (cache_period != -1)
+       if ((System.currentTimeMillis() - addresses[0].lookup_time) > cache_period)
+         {
+ 	  cache.remove(hostname);
+ 	  return null;
+         }
+ 
+     return addresses;
+   }
+ 
+   /**
+    * This method adds an InetAddress object to our DNS cache.  Note that
+    * if the cache is full, then we run a purge to get rid of old entries.
+    * This will cause a performance hit, thus applications using lots of
+    * lookups should set the cache size to be very large.
+    *
+    * @param hostname The hostname to cache this address under
+    * @param obj The InetAddress or InetAddress array to store
+    */
+   private static synchronized void addToCache(String hostname, Object obj)
+   {
+     if (cache_size == 0)
+       return;
+ 
+     // Check to see if hash table is full
+     if (cache_size != -1)
+       if (cache.size() == cache_size)
+         {
+ 	  // FIXME Add code to purge later.
+         }
+ 
+     cache.put(hostname, obj);
+   }
+ 
+   /**
+    * Returns the special address INADDR_ANY used for binding to a local
+    * port on all IP addresses hosted by a the local host.
+    *
+    * @return An InetAddress object representing INDADDR_ANY
+    *
+    * @exception UnknownHostException If an error occurs
+    */
+   static InetAddress getInaddrAny() throws UnknownHostException
+   {
+     if (inaddr_any == null)
+       {
+ 	byte[] tmp = VMInetAddress.lookupInaddrAny();
+ 	inaddr_any = new Inet4Address(tmp, null);
+       }
+ 
+     return inaddr_any;
+   }
+ 
+   /**
+    * Returns an InetAddress object representing the address of the current
+    * host.
+    *
+    * @return The local host's address
+    *
+    * @exception UnknownHostException If no IP address for the host could
+    * be found
+    */
+   public static InetAddress getLocalHost() throws UnknownHostException
+   {
+     String hostname = VMInetAddress.getLocalHostname();
+     return getByName(hostname);
+   }
+ 
+   /*
+    * Needed for serialization
+    */
+   private void readResolve() throws ObjectStreamException
+   {
+     // FIXME: implement this
+   }
+ 
+   private void readObject(ObjectInputStream ois)
+     throws IOException, ClassNotFoundException
+   {
+     ois.defaultReadObject();
+     addr = new byte[4];
+     addr[3] = (byte) address;
+ 
+     for (int i = 2; i >= 0; --i)
+       addr[i] = (byte) (address >>= 8);
+ 
+     family = 2; /* AF_INET  */
+   }
+ 
+   private void writeObject(ObjectOutputStream oos) throws IOException
+   {
+     // Build a 32 bit address from the last 4 bytes of a 4 byte IPv4 address
+     // or a 16 byte IPv6 address.
+     int len = addr.length;
+     int i = len - 4;
+ 
+     for (; i < len; i++)
+       address = address << 8 | (addr[i] & 0xff);
+ 
+     oos.defaultWriteObject();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/InetSocketAddress.java gcc-4.1.0/libjava/classpath/java/net/InetSocketAddress.java
*** gcc-4.0.2/libjava/classpath/java/net/InetSocketAddress.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/InetSocketAddress.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,221 ----
+ /* InetSocketAddress.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * InetSocketAddress instances represent socket addresses
+  * in the java.nio package. They encapsulate a InetAddress and
+  * a port number.
+  *
+  * @since 1.4
+  */
+ public class InetSocketAddress extends SocketAddress
+ {
+   /**
+    * Compatible with JDK 1.4+
+    */
+   private static final long serialVersionUID = 5076001401234631237L;
+ 
+   /**
+    * Name of host.
+    */
+   private String hostname;
+ 
+   /**
+    * Address of host.
+    */
+   private InetAddress addr;
+ 
+   /**
+    * Port of host.
+    */
+   private int port;
+ 
+   /**
+    * Constructs an InetSocketAddress instance.
+    *
+    * @param addr Address of the socket
+    * @param port Port if the socket
+    *
+    * @exception IllegalArgumentException If the port number is illegel
+    */
+   public InetSocketAddress(InetAddress addr, int port)
+     throws IllegalArgumentException
+   {
+     if (port < 0 || port > 65535)
+       throw new IllegalArgumentException("Bad port number: " + port);
+ 
+     if (addr == null)
+       addr = InetAddress.ANY_IF;
+ 
+     this.addr = addr;
+     this.port = port;
+     this.hostname = addr.getHostName();
+   }
+ 
+   /**
+    * Constructs an InetSocketAddress instance.
+    *
+    * @param port Port if the socket
+    *
+    * @exception IllegalArgumentException If the port number is illegal
+    */
+   public InetSocketAddress(int port) throws IllegalArgumentException
+   {
+     this((InetAddress) null, port);
+   }
+ 
+   /**
+    * Constructs an InetSocketAddress instance.
+    *
+    * @param hostname The hostname for the socket address
+    * @param port The port for the socket address
+    *
+    * @exception IllegalArgumentException If the port number is illegal
+    */
+   public InetSocketAddress(String hostname, int port)
+     throws IllegalArgumentException
+   {
+     if (hostname == null)
+       throw new IllegalArgumentException("Null host name value");
+ 
+     if (port < 0 || port > 65535)
+       throw new IllegalArgumentException("Bad port number: " + port);
+ 
+     this.port = port;
+     this.hostname = hostname;
+ 
+     try
+       {
+ 	this.addr = InetAddress.getByName(hostname);
+       }
+     catch (Exception e) // UnknownHostException, SecurityException
+       {
+ 	this.addr = null;
+       }
+   }
+ 
+   /**
+    * Test if obj is a <code>InetSocketAddress</code> and
+    * has the same address and port
+    *
+    * @param obj The obj to compare this address with.
+    *
+    * @return True if obj is equal.
+    */
+   public final boolean equals(Object obj)
+   {
+     // InetSocketAddress objects are equal when addr and port are equal.
+     // The hostname may differ.
+     if (obj instanceof InetSocketAddress)
+       {
+ 	InetSocketAddress sa = (InetSocketAddress) obj;
+ 
+ 	if (addr == null && sa.addr != null)
+ 	  return false;
+ 	else if (addr == null && sa.addr == null)
+ 	  return hostname.equals(sa.hostname) && sa.port == port;
+ 	else
+ 	  return addr.equals(sa.addr) && sa.port == port;
+       }
+ 
+     return false;
+   }
+ 
+   /**
+    * Returns the <code>InetAddress</code> or
+    * <code>null</code> if its unresolved
+    *
+    * @return The IP address of this address.
+    */
+   public final InetAddress getAddress()
+   {
+     return addr;
+   }
+ 
+   /**
+    * Returns <code>hostname</code>
+    *
+    * @return The hostname of this address.
+    */
+   public final String getHostName()
+   {
+     return hostname;
+   }
+ 
+   /**
+    * Returns the <code>port</code>
+    *
+    * @return The port of this address.
+    */
+   public final int getPort()
+   {
+     return port;
+   }
+ 
+   /**
+    * Returns the hashcode of the <code>InetSocketAddress</code>
+    *
+    * @return The hashcode for this address.
+    */
+   public final int hashCode()
+   {
+     return port + addr.hashCode();
+   }
+ 
+   /**
+    * Checks wether the address has been resolved or not
+    *
+    * @return True if address is unresolved.
+    */
+   public final boolean isUnresolved()
+   {
+     return addr == null;
+   }
+ 
+   /**
+    * Returns the <code>InetSocketAddress</code> as string
+    *
+    * @return A string represenation of this address.
+    */
+   public String toString()
+   {
+     return (addr == null ? hostname : addr.toString()) + ":" + port;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/JarURLConnection.java gcc-4.1.0/libjava/classpath/java/net/JarURLConnection.java
*** gcc-4.0.2/libjava/classpath/java/net/JarURLConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/JarURLConnection.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,229 ----
+ /* JarURLConnection.java -- Class for manipulating remote jar files
+    Copyright (C) 1998, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ import java.security.cert.Certificate;
+ import java.util.jar.Attributes;
+ import java.util.jar.JarEntry;
+ import java.util.jar.JarFile;
+ import java.util.jar.Manifest;
+ 
+ 
+ /**
+  * This abstract class represents a common superclass for implementations
+  * of jar URL's.  A jar URL is a special type of URL that allows JAR
+  * files on remote systems to be accessed.  It has the form:
+  * <p>
+  * jar:&lt;standard URL pointing to jar filei&gt;!/file/within/jarfile
+  * <p> for example:
+  * <p>
+  * jar:http://www.urbanophile.com/java/foo.jar!/com/urbanophile/bar.class
+  * <p>
+  * That example URL points to the file /com/urbanophile/bar.class in the
+  * remote JAR file http://www.urbanophile.com/java/foo.jar.  The HTTP
+  * protocol is used only as an example.  Any supported remote protocol
+  * can be used.
+  * <p>
+  * This class currently works by retrieving the entire jar file into a
+  * local cache file, then performing standard jar operations on it.
+  * (At least this is true for the default protocol implementation).
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Kresten Krab Thorup (krab@gnu.org)
+  * @date Aug 10, 1999.
+  *
+  * @since 1.2
+  */
+ public abstract class JarURLConnection extends URLConnection
+ {
+   /**
+    * This is the actual URL that points the remote jar file.  This is parsed
+    * out of the jar URL by the constructor.
+    */
+   private final URL jarFileURL;
+ 
+   /**
+    * The connection to the jar file itself. A JarURLConnection
+    * can represent an entry in a jar file or an entire jar file.  In
+    * either case this describes just the jar file itself.
+    */
+   protected URLConnection jarFileURLConnection;
+ 
+   /**
+    * This is the jar file "entry name" or portion after the "!/" in the
+    * URL which represents the pathname inside the actual jar file.
+    */
+   private final String entryName;
+ 
+   /**
+    * Creates a JarURLConnection from an URL object
+    *
+    * @param url The URL object for this connection.
+    *
+    * @exception MalformedURLException If url is invalid
+    *
+    * @specnote This constructor is protected since JDK 1.4
+    */
+   protected JarURLConnection(URL url) throws MalformedURLException
+   {
+     super(url);
+ 
+     if (! url.getProtocol().equals("jar"))
+       throw new MalformedURLException(url + ": Not jar protocol.");
+ 
+     String spec = url.getFile();
+     int bang = spec.indexOf("!/");
+     if (bang == -1)
+       throw new MalformedURLException(url + ": No `!/' in spec.");
+ 
+     // Extract the url for the jar itself.
+     jarFileURL = new URL(spec.substring(0, bang));
+ 
+     // Get the name of the entry, if any.
+     entryName = spec.length() == (bang + 2) ? null : spec.substring(bang + 2);
+   }
+ 
+   /**
+    * This method returns the "real" URL where the JarFile is located.
+    * //****Is this right?*****
+    *
+    * @return The remote URL
+    */
+   public URL getJarFileURL()
+   {
+     return jarFileURL;
+   }
+ 
+   /**
+    * Returns the "entry name" portion of the jar URL.  This is the portion
+    * after the "!/" in the jar URL that represents the pathname inside the
+    * actual jar file.
+    *
+    * @return The entry name.
+    */
+   public String getEntryName()
+   {
+     return entryName;
+   }
+ 
+   /**
+    * Returns the entry in this jar file specified by the URL.
+    *
+    * @return The jar entry
+    *
+    * @exception IOException If an error occurs
+    */
+   public JarEntry getJarEntry() throws IOException
+   {
+     if (entryName == null)
+       return null;
+     JarFile jarFile = getJarFile();
+     return jarFile != null ? jarFile.getJarEntry(entryName) : null;
+   }
+ 
+   /**
+    * Returns a read-only JarFile object for the remote jar file
+    *
+    * @return The JarFile object
+    *
+    * @exception IOException If an error occurs
+    */
+   public abstract JarFile getJarFile() throws IOException;
+ 
+   /**
+    * Returns an array of Certificate objects for the jar file entry specified
+    * by this URL or null if there are none
+    *
+    * @return A Certificate array
+    *
+    * @exception IOException If an error occurs
+    */
+   public Certificate[] getCertificates() throws IOException
+   {
+     JarEntry entry = getJarEntry();
+ 
+     return entry != null ? entry.getCertificates() : null;
+   }
+ 
+   /**
+    * Returns the main Attributes for the jar file specified in the URL or
+    * null if there are none
+    *
+    * @return The main Attributes for the JAR file for this connection
+    *
+    * @exception IOException If an error occurs
+    */
+   public Attributes getMainAttributes() throws IOException
+   {
+     Manifest manifest = getManifest();
+ 
+     return manifest != null ? manifest.getMainAttributes() : null;
+   }
+ 
+   /**
+    * Returns the Attributes for the Jar entry specified by the URL or null
+    * if none
+    *
+    * @return The Attributes object for this connection if the URL for it points
+    * to a JAR file entry, null otherwise
+    *
+    * @exception IOException If an error occurs
+    */
+   public Attributes getAttributes() throws IOException
+   {
+     JarEntry entry = getJarEntry();
+ 
+     return entry != null ? entry.getAttributes() : null;
+   }
+ 
+   /**
+    * Returns a Manifest object for this jar file, or null if there is no
+    * manifest.
+    *
+    * @return The Manifest for this connection, or null if none
+    *
+    * @exception IOException If an error occurs
+    */
+   public Manifest getManifest() throws IOException
+   {
+     JarFile file = getJarFile();
+ 
+     return file != null ? file.getManifest() : null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/MalformedURLException.java gcc-4.1.0/libjava/classpath/java/net/MalformedURLException.java
*** gcc-4.0.2/libjava/classpath/java/net/MalformedURLException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/MalformedURLException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* MalformedURLException.java -- A URL was not in a valid format
+    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * This exception indicates that a URL passed to an object was not in a
+  * valid format.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class MalformedURLException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -182787522200415866L;
+ 
+   /**
+    * Create a new instance without a descriptive error message.
+    */
+   public MalformedURLException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message a message describing the error that occurred
+    */
+   public MalformedURLException(String message)
+   {
+     super(message);
+   }
+ } // class MalformedURLException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/MimeTypeMapper.java gcc-4.1.0/libjava/classpath/java/net/MimeTypeMapper.java
*** gcc-4.0.2/libjava/classpath/java/net/MimeTypeMapper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/MimeTypeMapper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,213 ----
+ /* MimeTypeMapper.java -- A class for mapping file names to MIME types
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.util.Hashtable;
+ 
+ 
+ /**
+  * This non-public class is used to implement the FileNameMap interface
+  * which defines a mechanism for mapping filenames to MIME types.
+  *
+  * @version 0.5
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ class MimeTypeMapper implements FileNameMap
+ {
+   /**
+    * This array of strings is used to identify a MIME type based on a file
+    * extension.  This is list is based on the Apache mime.types file.
+    */
+   protected static final String[][] mime_strings =
+     {
+       { "application/mac-binhex40", "hqx" },
+       { "application/mac-compactpro", "cpt" },
+       { "application/msword", "doc" },
+       { "application/octet-stream", "bin" },
+       { "application/octet-stream", "dms" },
+       { "application/octet-stream", "lha" },
+       { "application/octet-stream", "lzh" },
+       { "application/octet-stream", "exe" },
+       { "application/octet-stream", "class" },
+       { "application/oda", "oda" },
+       { "application/pdf", "pdf" },
+       { "application/postscript", "ai" },
+       { "application/postscript", "eps" },
+       { "application/postscript", "ps" },
+       { "application/powerpoint", "ppt" },
+       { "application/rtf", "rtf" },
+       { "application/x-bcpio", "bcpio" },
+       { "application/x-cdlink", "vcd" },
+       { "application/x-compress", "Z" },
+       { "application/x-cpio", "cpio" },
+       { "application/x-csh", "csh" },
+       { "application/x-director", "dcr" },
+       { "application/x-director", "dir" },
+       { "application/x-director", "dxr" },
+       { "application/x-dvi", "dvi" },
+       { "application/x-gtar", "gtar" },
+       { "application/x-gzip", "gz" },
+       { "application/x-hdf", "hdf" },
+       { "application/x-httpd-cgi", "cgi" },
+       { "application/x-koan", "skp" },
+       { "application/x-koan", "skd" },
+       { "application/x-koan", "skt" },
+       { "application/x-koan", "skm" },
+       { "application/x-latex", "latex" },
+       { "application/x-mif", "mif" },
+       { "application/x-netcdf", "nc" },
+       { "application/x-netcdf", "cdf" },
+       { "application/x-sh", "sh" },
+       { "application/x-shar", "shar" },
+       { "application/x-stuffit", "sit" },
+       { "application/x-sv4cpio", "sv4cpio" },
+       { "application/x-sv4crc", "sv4crc" },
+       { "application/x-tar", "tar" },
+       { "application/x-tcl", "tcl" },
+       { "application/x-tex", "tex" },
+       { "application/x-texinfo", "texinfo" },
+       { "application/x-texinfo", "texi" },
+       { "application/x-troff", "t" },
+       { "application/x-troff", "tr" },
+       { "application/x-troff", "roff" },
+       { "application/x-troff-man", "man" },
+       { "application/x-troff-me", "me" },
+       { "application/x-troff-ms", "ms" },
+       { "application/x-ustar", "ustar" },
+       { "application/x-wais-source", "src" },
+       { "application/zip", "zip" },
+       { "audio/basic", "au" },
+       { "audio/basic", "snd" },
+       { "audio/mpeg", "mpga" },
+       { "audio/mpeg", "mp2" },
+       { "audio/mpeg", "mp3" },
+       { "audio/x-aiff", "aif" },
+       { "audio/x-aiff", "aiff" },
+       { "audio/x-aiff", "aifc" },
+       { "audio/x-pn-realaudio", "ram" },
+       { "audio/x-pn-realaudio-plugin", "rpm" },
+       { "audio/x-realaudio", "ra" },
+       { "audio/x-wav", "wav" },
+       { "chemical/x-pdb", "pdb" },
+       { "chemical/x-pdb", "xyz" },
+       { "image/gif", "gif" },
+       { "image/ief", "ief" },
+       { "image/jpeg", "jpeg" },
+       { "image/jpeg", "jpg" },
+       { "image/jpeg", "jpe" },
+       { "image/png", "png" },
+       { "image/tiff", "tiff" },
+       { "image/tiff", "tif" },
+       { "image/x-cmu-raster", "ras" },
+       { "image/x-portable-anymap", "pnm" },
+       { "image/x-portable-bitmap", "pbm" },
+       { "image/x-portable-graymap", "pgm" },
+       { "image/x-portable-pixmap", "ppm" },
+       { "image/x-rgb", "rgb" },
+       { "image/x-xbitmap", "xbm" },
+       { "image/x-xpixmap", "xpm" },
+       { "image/x-xwindowdump", "xwd" },
+       { "text/html", "html" },
+       { "text/html", "htm" },
+       { "text/plain", "txt" },
+       { "text/richtext", "rtx" },
+       { "text/tab-separated-values", "tsv" },
+       { "text/x-setext", "etx" },
+       { "text/x-sgml", "sgml" },
+       { "text/x-sgml", "sgm" },
+       { "video/mpeg", "mpeg" },
+       { "video/mpeg", "mpg" },
+       { "video/mpeg", "mpe" },
+       { "video/quicktime", "qt" },
+       { "video/quicktime", "mov" },
+       { "video/x-msvideo", "avi" },
+       { "video/x-sgi-movie", "movie" },
+       { "x-conference/x-cooltalk", "ice" },
+       { "x-world/x-vrml", "wrl" },
+       { "x-world/x-vrml", "vrml" }
+     };
+ 
+   /**
+    * The MIME types above are put into this Hashtable for faster lookup.
+    */
+   private static Hashtable mime_types = new Hashtable(150);
+ 
+   // Static initializer to load MIME types into Hashtable
+   static
+   {
+     for (int i = 0; i < mime_strings.length; i++)
+       mime_types.put(mime_strings[i][1], mime_strings[i][0]);
+   }
+ 
+   /**
+    * Create a new <code>MimeTypeMapper</code> object.
+    */
+   public MimeTypeMapper()
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * The method returns the MIME type of the filename passed as an argument.
+    * The value returned is based on the extension of the filename.  The
+    * default content type returned if this method cannot determine the
+    * actual content type is "application/octet-stream"
+    *
+    * @param filename The name of the file to return the MIME type for
+    *
+    * @return The MIME type
+    */
+   public String getContentTypeFor(String filename)
+   {
+     int index = filename.lastIndexOf(".");
+     if (index != -1)
+       {
+ 	if (index == filename.length())
+ 	  return "application/octet-stream";
+ 	else
+ 	  filename = filename.substring(index + 1);
+       }
+ 
+     String type = (String) mime_types.get(filename);
+     if (type == null)
+       return "application/octet-stream";
+     else
+       return type;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/MulticastSocket.java gcc-4.1.0/libjava/classpath/java/net/MulticastSocket.java
*** gcc-4.0.2/libjava/classpath/java/net/MulticastSocket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/MulticastSocket.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,486 ----
+ /* MulticastSocket.java -- Class for using multicast sockets
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ import java.util.Enumeration;
+ 
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ /**
+  * This class models a multicast UDP socket.  A multicast address is a
+  * class D internet address (one whose most significant bits are 1110).
+  * A multicast group consists of a multicast address and a well known
+  * port number.  All members of the group listening on that address and
+  * port will receive all the broadcasts to the group.
+  * <p>
+  * Please note that applets are not allowed to use multicast sockets
+  *
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com) (Documentation comments)
+  * @since 1.1
+  * @date May 18, 1999.
+  */
+ public class MulticastSocket extends DatagramSocket
+ {
+   /**
+    * Create a MulticastSocket that this not bound to any address
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation
+    */
+   public MulticastSocket() throws IOException
+   {
+     this(new InetSocketAddress(0));
+   }
+ 
+   /**
+    * Create a multicast socket bound to the specified port
+    *
+    * @param port The port to bind to
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation
+    */
+   public MulticastSocket(int port) throws IOException
+   {
+     this(new InetSocketAddress(port));
+   }
+ 
+   /**
+    * Create a multicast socket bound to the specified SocketAddress.
+    *
+    * @param address The SocketAddress the multicast socket will be bound to
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation
+    *
+    * @since 1.4
+    */
+   public MulticastSocket(SocketAddress address) throws IOException
+   {
+     super((SocketAddress) null);
+     setReuseAddress(true);
+     if (address != null)
+       bind(address);
+   }
+ 
+   /**
+    * Returns the interface being used for multicast packets
+    *
+    * @return The multicast interface
+    *
+    * @exception SocketException If an error occurs
+    */
+   public InetAddress getInterface() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     return (InetAddress) getImpl().getOption(SocketOptions.IP_MULTICAST_IF);
+   }
+ 
+   /**
+    * Returns the current value of the "Time to Live" option.  This is the
+    * number of hops a packet can make before it "expires".   This method id
+    * deprecated.  Use <code>getTimeToLive</code> instead.
+    *
+    * @return The TTL value
+    *
+    * @exception IOException If an error occurs
+    *
+    * @deprecated 1.2 Replaced by getTimeToLive()
+    *
+    * @see MulticastSocket#getTimeToLive()
+    */
+   public byte getTTL() throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     // Use getTTL here rather than getTimeToLive in case we're using an impl
+     // other than the default PlainDatagramSocketImpl and it doesn't have
+     // getTimeToLive yet.
+     return getImpl().getTTL();
+   }
+ 
+   /**
+    * Returns the current value of the "Time to Live" option.  This is the
+    * number of hops a packet can make before it "expires".
+    *
+    * @return The TTL value
+    *
+    * @exception IOException If an error occurs
+    *
+    * @since 1.2
+    */
+   public int getTimeToLive() throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     return getImpl().getTimeToLive();
+   }
+ 
+   /**
+    * Sets the interface to use for sending multicast packets.
+    *
+    * @param addr The new interface to use.
+    *
+    * @exception SocketException If an error occurs.
+    *
+    * @since 1.4
+    */
+   public void setInterface(InetAddress addr) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().setOption(SocketOptions.IP_MULTICAST_IF, addr);
+   }
+ 
+   /**
+    * Sets the local network interface used to send multicast messages
+    *
+    * @param netIf The local network interface used to send multicast messages
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @see MulticastSocket#getNetworkInterface()
+    *
+    * @since 1.4
+    */
+   public void setNetworkInterface(NetworkInterface netIf)
+     throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Enumeration e = netIf.getInetAddresses();
+ 
+     if (! e.hasMoreElements())
+       throw new SocketException("no network devices found");
+ 
+     InetAddress address = (InetAddress) e.nextElement();
+     getImpl().setOption(SocketOptions.IP_MULTICAST_IF, address);
+   }
+ 
+   /**
+    * Gets the local network interface which is used to send multicast messages
+    *
+    * @return The local network interface to send multicast messages
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @see MulticastSocket#setNetworkInterface(NetworkInterface netIf)
+    *
+    * @since 1.4
+    */
+   public NetworkInterface getNetworkInterface() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     InetAddress address =
+       (InetAddress) getImpl().getOption(SocketOptions.IP_MULTICAST_IF);
+     NetworkInterface netIf = NetworkInterface.getByInetAddress(address);
+ 
+     return netIf;
+   }
+ 
+   /**
+    * Disable/Enable local loopback of multicast packets.  The option is used by
+    * the platform's networking code as a hint for setting whether multicast
+    * data will be looped back to the local socket.
+    *
+    * Because this option is a hint, applications that want to verify what
+    * loopback mode is set to should call #getLoopbackMode
+    *
+    * @param disable True to disable loopback mode
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public void setLoopbackMode(boolean disable) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().setOption(SocketOptions.IP_MULTICAST_LOOP,
+                         Boolean.valueOf(disable));
+   }
+ 
+   /**
+    * Checks if local loopback mode is enabled
+    *
+    * @return true if loopback mode is enabled, false otherwise
+    * 
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public boolean getLoopbackMode() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.IP_MULTICAST_LOOP);
+ 
+     if (buf instanceof Boolean)
+       return ((Boolean) buf).booleanValue();
+ 
+     throw new SocketException("unexpected type");
+   }
+ 
+   /**
+    * Sets the "Time to Live" value for a socket.  The value must be between
+    * 1 and 255.
+    *
+    * @param ttl The new TTL value
+    *
+    * @exception IOException If an error occurs
+    *
+    * @deprecated 1.2 Replaced by <code>setTimeToLive</code>
+    *
+    * @see MulticastSocket#setTimeToLive(int ttl)
+    */
+   public void setTTL(byte ttl) throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     // Use setTTL here rather than setTimeToLive in case we're using an impl
+     // other than the default PlainDatagramSocketImpl and it doesn't have
+     // setTimeToLive yet.
+     getImpl().setTTL(ttl);
+   }
+ 
+   /**
+    * Sets the "Time to Live" value for a socket.  The value must be between
+    * 1 and 255.
+    *
+    * @param ttl The new TTL value
+    *
+    * @exception IOException If an error occurs
+    *
+    * @since 1.2
+    */
+   public void setTimeToLive(int ttl) throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (ttl <= 0 || ttl > 255)
+       throw new IllegalArgumentException("Invalid ttl: " + ttl);
+ 
+     getImpl().setTimeToLive(ttl);
+   }
+ 
+   /**
+    * Joins the specified multicast group.
+    *
+    * @param mcastaddr The address of the group to join
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkMulticast method doesn't allow the operation
+    */
+   public void joinGroup(InetAddress mcastaddr) throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (! mcastaddr.isMulticastAddress())
+       throw new IOException("Not a Multicast address");
+ 
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkMulticast(mcastaddr);
+ 
+     getImpl().join(mcastaddr);
+   }
+ 
+   /**
+    * Leaves the specified multicast group
+    *
+    * @param mcastaddr The address of the group to leave
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkMulticast method doesn't allow the operation
+    */
+   public void leaveGroup(InetAddress mcastaddr) throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (! mcastaddr.isMulticastAddress())
+       throw new IOException("Not a Multicast address");
+ 
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkMulticast(mcastaddr);
+ 
+     getImpl().leave(mcastaddr);
+   }
+ 
+   /**
+    * Joins the specified mulitcast group on a specified interface.
+    *
+    * @param mcastaddr The multicast address to join
+    * @param netIf The local network interface to receive the multicast
+    * messages on or null to defer the interface set by #setInterface or
+    * #setNetworkInterface
+    *
+    * @exception IOException If an error occurs
+    * @exception IllegalArgumentException If address type is not supported
+    * @exception SecurityException If a security manager exists and its
+    * checkMulticast method doesn't allow the operation
+    *
+    * @see MulticastSocket#setInterface(InetAddress addr)
+    * @see MulticastSocket#setNetworkInterface(NetworkInterface netIf)
+    *
+    * @since 1.4
+    */
+   public void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
+     throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (! (mcastaddr instanceof InetSocketAddress))
+       throw new IllegalArgumentException("SocketAddress type not supported");
+ 
+     InetSocketAddress tmp = (InetSocketAddress) mcastaddr;
+ 
+     if (! tmp.getAddress().isMulticastAddress())
+       throw new IOException("Not a Multicast address");
+ 
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkMulticast(tmp.getAddress());
+ 
+     getImpl().joinGroup(mcastaddr, netIf);
+   }
+ 
+   /**
+    * Leaves the specified mulitcast group on a specified interface.
+    *
+    * @param mcastaddr The multicast address to leave
+    * @param netIf The local networki interface or null to defer to the
+    * interface set by setInterface or setNetworkInterface
+    *
+    * @exception IOException If an error occurs
+    * @exception IllegalArgumentException If address type is not supported
+    * @exception SecurityException If a security manager exists and its
+    * checkMulticast method doesn't allow the operation
+    *
+    * @see MulticastSocket#setInterface(InetAddress addr)
+    * @see MulticastSocket#setNetworkInterface(NetworkInterface netIf)
+    *
+    * @since 1.4
+    */
+   public void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
+     throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     InetSocketAddress tmp = (InetSocketAddress) mcastaddr;
+ 
+     if (! tmp.getAddress().isMulticastAddress())
+       throw new IOException("Not a Multicast address");
+ 
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkMulticast(tmp.getAddress());
+ 
+     getImpl().leaveGroup(mcastaddr, netIf);
+   }
+ 
+   /**
+    * Sends a packet of data to a multicast address with a TTL that is
+    * different from the default TTL on this socket.  The default TTL for
+    * the socket is not changed.
+    *
+    * @param packet The packet of data to send
+    * @param ttl The TTL for this packet
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect or checkMulticast method doesn't allow the operation
+    *
+    * @deprecated
+    */
+   public synchronized void send(DatagramPacket packet, byte ttl)
+     throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       {
+ 	InetAddress addr = packet.getAddress();
+ 	if (addr.isMulticastAddress())
+ 	  s.checkPermission(new SocketPermission(addr.getHostName()
+ 	                                         + packet.getPort(),
+ 	                                         "accept,connect"));
+ 	else
+ 	  s.checkConnect(addr.getHostAddress(), packet.getPort());
+       }
+ 
+     int oldttl = getImpl().getTimeToLive();
+     getImpl().setTimeToLive(((int) ttl) & 0xFF);
+     getImpl().send(packet);
+     getImpl().setTimeToLive(oldttl);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/NetPermission.java gcc-4.1.0/libjava/classpath/java/net/NetPermission.java
*** gcc-4.0.2/libjava/classpath/java/net/NetPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/NetPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /* NetPermission.java -- A class for basic miscellaneous network permission
+    Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.security.BasicPermission;
+ 
+ 
+ /**
+  * This class is used to model miscellaneous network permissions.  It is
+  * a subclass of <code>BasicPermission</code>.  This means that it models a
+  * "boolean" permission.  One that you either have or do not have.  Thus
+  * there is no permitted action list associated with this object.
+  *
+  * The following permission names are defined for this class:
+  *
+  * <ul>
+  * <li>setDefaultAuthenticator - Grants the ability to install a facility
+  * to collect username and password information when requested by a
+  * web site or proxy server.</li>
+  * <li>requestPasswordAuthentication - Grants the ability to ask the
+  * authentication facility for the user's password.</li>
+  * <li>specifyStreamHandler - Grants the permission to specify the
+  * stream handler class used when loading from a URL.</li>
+  * </ul>
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public final class NetPermission extends BasicPermission
+ {
+   static final long serialVersionUID = -8343910153355041693L;
+ 
+   /**
+    * Initializes a new instance of <code>NetPermission</code> with the
+    * specified name.
+    *
+    * @param name The name of this permission.
+    */
+   public NetPermission(String name)
+   {
+     super(name);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>NetPermission</code> with the
+    * specified name and perms.  Note that the perms field is irrelevant and is
+    * ignored.  This constructor should never need to be used.
+    *
+    * @param name The name of this permission
+    * @param perms The permitted actions of this permission (ignored)
+    */
+   public NetPermission(String name, String perms)
+   {
+     super(name);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/NetworkInterface.java gcc-4.1.0/libjava/classpath/java/net/NetworkInterface.java
*** gcc-4.0.2/libjava/classpath/java/net/NetworkInterface.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/NetworkInterface.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,297 ----
+ /* NetworkInterface.java --
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.net;
+ 
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Vector;
+ 
+ /**
+  * This class models a network interface on the host computer.  A network
+  * interface contains a name (typically associated with a specific
+  * hardware adapter) and a list of addresses that are bound to it.
+  * For example, an ethernet interface may be named "eth0" and have the
+  * address 192.168.1.101 assigned to it.
+  *
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.4
+  */
+ public final class NetworkInterface
+ {
+   private String name;
+   private Vector inetAddresses;
+ 
+   NetworkInterface(String name, InetAddress address)
+   {
+     this.name = name;
+     this.inetAddresses = new Vector(1, 1);
+     this.inetAddresses.add(address);
+   }
+ 
+   NetworkInterface(String name, InetAddress[] addresses)
+   {
+     this.name = name;
+     this.inetAddresses = new Vector(addresses.length, 1);
+ 
+     for (int i = 0; i < addresses.length; i++)
+       this.inetAddresses.add(addresses[i]);
+   }
+ 
+   /**
+    * Returns the name of the network interface
+    *
+    * @return The name of the interface.
+    */
+   public String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Returns all available addresses of the network interface
+    *
+    * If a @see SecurityManager is available all addresses are checked
+    * with @see SecurityManager::checkConnect() if they are available.
+    * Only <code>InetAddresses</code> are returned where the security manager
+    * doesn't throw an exception.
+    *
+    * @return An enumeration of all addresses.
+    */
+   public Enumeration getInetAddresses()
+   {
+     SecurityManager s = System.getSecurityManager();
+ 
+     if (s == null)
+       return inetAddresses.elements();
+ 
+     Vector tmpInetAddresses = new Vector(1, 1);
+ 
+     for (Enumeration addresses = inetAddresses.elements();
+          addresses.hasMoreElements();)
+       {
+ 	InetAddress addr = (InetAddress) addresses.nextElement();
+ 	try
+ 	  {
+ 	    s.checkConnect(addr.getHostAddress(), 58000);
+ 	    tmpInetAddresses.add(addr);
+ 	  }
+ 	catch (SecurityException e)
+ 	  {
+ 	    // Ignore.
+ 	  }
+       }
+ 
+     return tmpInetAddresses.elements();
+   }
+ 
+   /**
+    * Returns the display name of the interface
+    *
+    * @return The display name of the interface
+    */
+   public String getDisplayName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Returns an network interface by name
+    *
+    * @param name The name of the interface to return
+    * 
+    * @return a <code>NetworkInterface</code> object representing the interface,
+    * or null if there is no interface with that name.
+    *
+    * @exception SocketException If an error occurs
+    * @exception NullPointerException If the specified name is null
+    */
+   public static NetworkInterface getByName(String name)
+     throws SocketException
+   {
+     for (Enumeration e = getNetworkInterfaces(); e.hasMoreElements();)
+       {
+ 	NetworkInterface tmp = (NetworkInterface) e.nextElement();
+ 
+ 	if (name.equals(tmp.getName()))
+ 	  return tmp;
+       }
+ 
+     // No interface with the given name found.
+     return null;
+   }
+ 
+   /**
+    * Return a network interface by its address
+    *
+    * @param addr The address of the interface to return
+    *
+    * @return the interface, or <code>null</code> if none found
+    *
+    * @exception SocketException If an error occurs
+    * @exception NullPointerException If the specified addess is null
+    */
+   public static NetworkInterface getByInetAddress(InetAddress addr)
+     throws SocketException
+   {
+     for (Enumeration interfaces = getNetworkInterfaces();
+          interfaces.hasMoreElements();)
+       {
+ 	NetworkInterface tmp = (NetworkInterface) interfaces.nextElement();
+ 
+ 	for (Enumeration addresses = tmp.inetAddresses.elements();
+ 	     addresses.hasMoreElements();)
+ 	  {
+ 	    if (addr.equals((InetAddress) addresses.nextElement()))
+ 	      return tmp;
+ 	  }
+       }
+ 
+     throw new SocketException("no network interface is bound to such an IP address");
+   }
+ 
+   static private Collection condense(Collection interfaces) 
+   {
+     final Map condensed = new HashMap();
+ 
+     final Iterator interfs = interfaces.iterator();
+     while (interfs.hasNext()) {
+ 
+       final NetworkInterface face = (NetworkInterface) interfs.next();
+       final String name = face.getName();
+       
+       if (condensed.containsKey(name))
+ 	{
+ 	  final NetworkInterface conface = (NetworkInterface) condensed.get(name);
+ 	  if (!conface.inetAddresses.containsAll(face.inetAddresses))
+ 	    {
+ 	      final Iterator faceAddresses = face.inetAddresses.iterator();
+ 	      while (faceAddresses.hasNext())
+ 		{
+ 		  final InetAddress faceAddress = (InetAddress) faceAddresses.next();
+ 		  if (!conface.inetAddresses.contains(faceAddress))
+ 		    {
+ 		      conface.inetAddresses.add(faceAddress);
+ 		    }
+ 		}
+ 	    }
+ 	}
+       else
+ 	{
+ 	  condensed.put(name, face);
+ 	}
+     }
+ 
+     return condensed.values();
+   }
+ 
+   /**
+    * Return an <code>Enumeration</code> of all available network interfaces
+    *
+    * @return all interfaces
+    * 
+    * @exception SocketException If an error occurs
+    */
+   public static Enumeration getNetworkInterfaces() throws SocketException
+   {
+     Vector networkInterfaces = VMNetworkInterface.getInterfaces();
+ 
+     if (networkInterfaces.isEmpty())
+       return null;
+ 
+     Collection condensed = condense(networkInterfaces);
+ 
+     return Collections.enumeration(condensed);
+   }
+ 
+   /**
+    * Checks if the current instance is equal to obj
+    *
+    * @param obj The object to compare with
+    *
+    * @return <code>true</code> if equal, <code>false</code> otherwise
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof NetworkInterface))
+       return false;
+ 
+     NetworkInterface tmp = (NetworkInterface) obj;
+ 
+     return (name.equals(tmp.name) && inetAddresses.equals(tmp.inetAddresses));
+   }
+ 
+   /**
+    * Returns the hashcode of the current instance
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     // FIXME: hash correctly
+     return name.hashCode() + inetAddresses.hashCode();
+   }
+ 
+   /**
+    * Returns a string representation of the interface
+    *
+    * @return the string
+    */
+   public String toString()
+   {
+     // FIXME: check if this is correct
+     String result;
+     String separator = System.getProperty("line.separator");
+ 
+     result =
+       "name: " + getDisplayName() + " (" + getName() + ") addresses:"
+       + separator;
+ 
+     for (Enumeration e = inetAddresses.elements(); e.hasMoreElements();)
+       {
+ 	InetAddress address = (InetAddress) e.nextElement();
+ 	result += address.toString() + ";" + separator;
+       }
+ 
+     return result;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/NoRouteToHostException.java gcc-4.1.0/libjava/classpath/java/net/NoRouteToHostException.java
*** gcc-4.0.2/libjava/classpath/java/net/NoRouteToHostException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/NoRouteToHostException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* NoRouteToHostException.java -- Cannot connect to a host
+    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+   * This exception indicates that there is no TCP/IP route to the requested
+   * host.  This is often due to a misconfigured routing table.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   * @since 1.1
+   * @status updated to 1.4
+   */
+ public class NoRouteToHostException extends SocketException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -1897550894873493790L;
+ 
+   /**
+    * Create an instance without a descriptive error message.
+    */
+   public NoRouteToHostException()
+   {
+   }
+ 
+   /**
+    * Create an instance with a descriptive error message, such as the text
+    * from strerror(3).
+    *
+    * @param message a message describing the error that occurred
+    */
+   public NoRouteToHostException(String message)
+   {
+     super(message);
+   }
+ } // class NoRouteToHostException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/PasswordAuthentication.java gcc-4.1.0/libjava/classpath/java/net/PasswordAuthentication.java
*** gcc-4.0.2/libjava/classpath/java/net/PasswordAuthentication.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/PasswordAuthentication.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* PasswordAuthentication.java -- Container class for username/password pairs
+    Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * This class serves a container for username/password pairs.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  *
+  * @since 1.2
+  */
+ public final class PasswordAuthentication
+ {
+   /**
+    * The username
+    */
+   private String username;
+ 
+   /**
+    * The password
+    */
+   private char[] password;
+ 
+   /**
+    * Creates a new <code>PasswordAuthentication</code> object from the
+    * specified username and password.
+    *
+    * @param username The username for this object
+    * @param password The password for this object
+    */
+   public PasswordAuthentication(String username, char[] password)
+   {
+     this.username = username;
+     this.password = password;
+   }
+ 
+   /**
+    * Returns the username associated with this object
+    *
+    * @return The username
+    */
+   public String getUserName()
+   {
+     return username;
+   }
+ 
+   /**
+    * Returns the password associated with this object
+    *
+    * @return The password
+    */
+   public char[] getPassword()
+   {
+     return password;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/PortUnreachableException.java gcc-4.1.0/libjava/classpath/java/net/PortUnreachableException.java
*** gcc-4.0.2/libjava/classpath/java/net/PortUnreachableException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/PortUnreachableException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* PortUnreachableException.java -- received an ICMP port unreachable datagram
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * This exception signals that an ICMP port unreachable datagram has been
+  * received.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class PortUnreachableException extends SocketException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 8462541992376507323L;
+ 
+   /**
+    * Create a new instance without a descriptive error message.
+    */
+   public PortUnreachableException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message a message describing the error that occurred
+    */
+   public PortUnreachableException(String message)
+   {
+     super(message);
+   }
+ } // class PortUnreachableException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/ProtocolException.java gcc-4.1.0/libjava/classpath/java/net/ProtocolException.java
*** gcc-4.0.2/libjava/classpath/java/net/ProtocolException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/ProtocolException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* ProtocolException.java -- a low level protocol error occurred
+    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * This exception indicates that some sort of low level protocol
+  * exception occurred.  Look in the descriptive message (if any) for
+  * details on what went wrong.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class ProtocolException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -6098449442062388080L;
+ 
+   /**
+    * Create a new instance without a descriptive error message.
+    */
+   public ProtocolException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message a message describing the error that occurred
+    */
+   public ProtocolException(String message)
+   {
+     super(message);
+   }
+ } // class ProtocolException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/STATUS gcc-4.1.0/libjava/classpath/java/net/STATUS
*** gcc-4.0.2/libjava/classpath/java/net/STATUS	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/STATUS	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,48 ----
+ X      ContentHandlerFactory 
+ X      FileNameMap 
+ X      SocketImplFactory 
+ X      URLStreamHandlerFactory 
+ *      Authenticator 
+ *      ContentHandler 
+ +      DatagramPacket 
+ +      DatagramSocket 
+ +      DatagramSocketImpl 
+ +      HttpURLConnection 
+ +      InetAddress 
+ *      JarURLConnection 
+ +      MulticastSocket 
+ *      NetPermission 
+ *      PasswordAuthentication 
+ +      PlainDatagramSocketImpl
+ +      PlainSocketImpl (internal)
+ +      ServerSocket 
+ +      Socket 
+ +      SocketImpl 
+ +      SocketInputStream (internal)
+ +      SocketOptions (internal)
+ +      SocketOutputStream (internal)
+ *      SocketPermission 
+ +      URL 
+       URLClassLoader 
+ +      URLConnection 
+ *      URLEncoder 
+ +      URLStreamHandler 
+ X      BindException 
+ X      ConnectException 
+ X      MalformedURLException 
+ X      NoRouteToHostException 
+ X      ProtocolException 
+ X      SocketException 
+ X      UnknownHostException 
+ X      UnknownServiceException 
+ 
+ ---------------
+ +      Native InetAddress
+ +      Native SocketImpl
+ +      Native DatagramSocketImpl
+ +     Protocol Handler for HTTP
+       Protocol Handler for FTP
+ +      ContentHandler for text
+       ContentHandler for gif
+       ContentHandler for jpeg
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/ServerSocket.java gcc-4.1.0/libjava/classpath/java/net/ServerSocket.java
*** gcc-4.0.2/libjava/classpath/java/net/ServerSocket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/ServerSocket.java	Sun Jan 15 03:11:53 2006
***************
*** 0 ****
--- 1,599 ----
+ /* ServerSocket.java -- Class for implementing server side sockets
+    Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2006
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import gnu.java.net.PlainSocketImpl;
+ 
+ import java.io.IOException;
+ import java.nio.channels.IllegalBlockingModeException;
+ import java.nio.channels.ServerSocketChannel;
+ 
+ 
+ /* Written using on-line Java Platform 1.2 API Specification.
+  * Status:  I believe all methods are implemented.
+  */
+ 
+ /**
+  * This class models server side sockets.  The basic model is that the
+  * server socket is created and bound to some well known port.  It then
+  * listens for and accepts connections.  At that point the client and
+  * server sockets are ready to communicate with one another utilizing
+  * whatever application layer protocol they desire.
+  *
+  * As with the <code>Socket</code> class, most instance methods of this class
+  * simply redirect their calls to an implementation class.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  */
+ public class ServerSocket
+ {
+   /**
+    * This is the user defined SocketImplFactory, if one is supplied
+    */
+   private static SocketImplFactory factory;
+ 
+   /**
+    * This is the SocketImp object to which most instance methods in this
+    * class are redirected
+    */
+   private SocketImpl impl;
+ 
+   /**
+    * We need to retain the local address even after the socket is closed.
+    */
+   private InetSocketAddress local;
+ 
+   /*
+    * This constructor is only used by java.nio.
+    */
+ 
+   // FIXME: Workaround a bug in gcj.
+   //ServerSocket (PlainSocketImpl impl) throws IOException
+   ServerSocket(SocketImpl impl) throws IOException
+   {
+     if (impl == null)
+       throw new NullPointerException("impl may not be null");
+ 
+     this.impl = impl;
+     this.impl.create(true);
+   }
+ 
+   /*
+    * This method is only used by java.nio.
+    */
+ 
+   // FIXME: Workaround a bug in gcj.
+   //PlainSocketImpl getImpl()
+   SocketImpl getImpl()
+   {
+     return impl;
+   }
+ 
+   /**
+    * Constructor that simply sets the implementation.
+    *
+    * @exception IOException If an error occurs
+    *
+    * @specnote This constructor is public since JDK 1.4
+    */
+   public ServerSocket() throws IOException
+   {
+     if (factory != null)
+       impl = factory.createSocketImpl();
+     else
+       impl = new PlainSocketImpl();
+ 
+     impl.create(true);
+   }
+ 
+   /**
+    * Creates a server socket and binds it to the specified port.  If the
+    * port number is 0, a random free port will be chosen.  The pending
+    * connection queue on this socket will be set to 50.
+    *
+    * @param port The port number to bind to
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation
+    */
+   public ServerSocket(int port) throws IOException
+   {
+     this(port, 50);
+   }
+ 
+   /**
+    * Creates a server socket and binds it to the specified port.  If the
+    * port number is 0, a random free port will be chosen.  The pending
+    * connection queue on this socket will be set to the value passed as
+    * arg2.
+    *
+    * @param port The port number to bind to
+    * @param backlog The length of the pending connection queue
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation
+    */
+   public ServerSocket(int port, int backlog) throws IOException
+   {
+     this(port, backlog, null);
+   }
+ 
+   /**
+    * Creates a server socket and binds it to the specified port.  If the
+    * port number is 0, a random free port will be chosen.  The pending
+    * connection queue on this socket will be set to the value passed as
+    * backlog.  The third argument specifies a particular local address to
+    * bind t or null to bind to all local address.
+    *
+    * @param port The port number to bind to
+    * @param backlog The length of the pending connection queue
+    * @param bindAddr The address to bind to, or null to bind to all addresses
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation
+    *
+    * @since 1.1
+    */
+   public ServerSocket(int port, int backlog, InetAddress bindAddr)
+     throws IOException
+   {
+     this();
+ 
+     // bind/listen socket
+     bind(new InetSocketAddress(bindAddr, port), backlog);
+   }
+ 
+   /**
+    * Binds the server socket to a specified socket address
+    *
+    * @param endpoint The socket address to bind to
+    *
+    * @exception IOException If an error occurs
+    * @exception IllegalArgumentException If address type is not supported
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation
+    *
+    * @since 1.4
+    */
+   public void bind(SocketAddress endpoint) throws IOException
+   {
+     bind(endpoint, 50);
+   }
+ 
+   /**
+    * Binds the server socket to a specified socket address
+    *
+    * @param endpoint The socket address to bind to
+    * @param backlog The length of the pending connection queue
+    *
+    * @exception IOException If an error occurs
+    * @exception IllegalArgumentException If address type is not supported
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation
+    *
+    * @since 1.4
+    */
+   public void bind(SocketAddress endpoint, int backlog)
+     throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("ServerSocket is closed");
+ 
+     if (! (endpoint instanceof InetSocketAddress))
+       throw new IllegalArgumentException("Address type not supported");
+ 
+     InetSocketAddress tmp = (InetSocketAddress) endpoint;
+ 
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkListen(tmp.getPort());
+ 
+     InetAddress addr = tmp.getAddress();
+ 
+     // Initialize addr with 0.0.0.0.
+     if (addr == null)
+       addr = InetAddress.ANY_IF;
+ 
+     try
+       {
+ 	impl.bind(addr, tmp.getPort());
+ 	impl.listen(backlog);
+ 	local = new InetSocketAddress(
+             (InetAddress) impl.getOption(SocketOptions.SO_BINDADDR),
+             impl.getLocalPort());
+       }
+     catch (IOException exception)
+       {
+ 	close();
+ 	throw exception;
+       }
+     catch (RuntimeException exception)
+       {
+ 	close();
+ 	throw exception;
+       }
+     catch (Error error)
+       {
+ 	close();
+ 	throw error;
+       }
+   }
+ 
+   /**
+    * This method returns the local address to which this socket is bound
+    *
+    * @return The socket's local address
+    */
+   public InetAddress getInetAddress()
+   {
+     if (local == null)
+       return null;
+ 
+     return local.getAddress();
+   }
+ 
+   /**
+    * This method returns the local port number to which this socket is bound
+    *
+    * @return The socket's port number
+    */
+   public int getLocalPort()
+   {
+     if (local == null)
+       return -1;
+ 
+     return local.getPort();
+   }
+ 
+   /**
+    * Returns the local socket address
+    *
+    * @return the local socket address, null if not bound
+    * 
+    * @since 1.4
+    */
+   public SocketAddress getLocalSocketAddress()
+   {
+     return local;
+   }
+ 
+   /**
+    * Accepts a new connection and returns a connected <code>Socket</code>
+    * instance representing that connection.  This method will block until a
+    * connection is available.
+    *
+    * @return socket object for the just accepted connection
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkListen method doesn't allow the operation
+    * @exception IllegalBlockingModeException If this socket has an associated
+    * channel, and the channel is in non-blocking mode
+    * @exception SocketTimeoutException If a timeout was previously set with
+    * setSoTimeout and the timeout has been reached
+    */
+   public Socket accept() throws IOException
+   {
+     Socket socket = new Socket();
+ 
+     try
+       {
+ 	implAccept(socket);
+       }
+     catch (IOException e)
+       {
+ 	try
+ 	  {
+ 	    socket.close();
+ 	  }
+ 	catch (IOException e2)
+ 	  {
+ 	    // Ignore.
+ 	  }
+ 
+ 	throw e;
+       }
+ 
+     return socket;
+   }
+ 
+   /**
+    * This protected method is used to help subclasses override
+    * <code>ServerSocket.accept()</code>.  The passed in socket will be
+    * connected when this method returns.
+    *
+    * @param socket The socket that is used for the accepted connection
+    *
+    * @exception IOException If an error occurs
+    * @exception IllegalBlockingModeException If this socket has an associated
+    * channel, and the channel is in non-blocking mode
+    *
+    * @since 1.1
+    */
+   protected final void implAccept(Socket socket) throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("ServerSocket is closed");
+ 
+     // FIXME: Add a security check to make sure we're allowed to 
+     // connect to the remote host.
+ 
+     // The Sun spec says that if we have an associated channel and
+     // it is in non-blocking mode, we throw an IllegalBlockingModeException.
+     // However, in our implementation if the channel itself initiated this
+     // operation, then we must honor it regardless of its blocking mode.
+     if (getChannel() != null && ! getChannel().isBlocking()
+         && ! ((PlainSocketImpl) getImpl()).isInChannelOperation())
+       throw new IllegalBlockingModeException();
+ 
+     impl.accept(socket.impl);
+     socket.implCreated = true;
+     socket.bound = true;
+   }
+ 
+   /**
+    * Closes this socket and stops listening for connections
+    *
+    * @exception IOException If an error occurs
+    */
+   public void close() throws IOException
+   {
+     if (isClosed())
+       return;
+ 
+     impl.close();
+     impl = null;
+ 
+     if (getChannel() != null)
+       getChannel().close();
+   }
+ 
+   /**
+    * Returns the unique <code>ServerSocketChannel</code> object
+    * associated with this socket, if any.
+    *
+    * <p>The socket only has a <code>ServerSocketChannel</code> if its created
+    * by <code>ServerSocketChannel.open()</code>.</p>
+    *
+    * @return the associated socket channel, null if none exists
+    * 
+    * @since 1.4
+    */
+   public ServerSocketChannel getChannel()
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns true when the socket is bound, otherwise false
+    *
+    * @return true if socket is bound, false otherwise
+    * 
+    * @since 1.4
+    */
+   public boolean isBound()
+   {
+     return local != null;
+   }
+ 
+   /**
+    * Returns true if the socket is closed, otherwise false
+    *
+    * @return true if socket is closed, false otherwise
+    * 
+    * @since 1.4
+    */
+   public boolean isClosed()
+   {
+     return impl == null;
+   }
+ 
+   /**
+    * Sets the value of SO_TIMEOUT.  A value of 0 implies that SO_TIMEOUT is
+    * disabled (ie, operations never time out).  This is the number of
+    * milliseconds a socket operation can block before an
+    * InterruptedIOException is thrown.
+    *
+    * @param timeout The new SO_TIMEOUT value
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.1
+    */
+   public void setSoTimeout(int timeout) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("ServerSocket is closed");
+ 
+     if (timeout < 0)
+       throw new IllegalArgumentException("SO_TIMEOUT value must be >= 0");
+ 
+     impl.setOption(SocketOptions.SO_TIMEOUT, new Integer(timeout));
+   }
+ 
+   /**
+    * Retrieves the current value of the SO_TIMEOUT setting.  A value of 0
+    * implies that SO_TIMEOUT is disabled (ie, operations never time out).
+    * This is the number of milliseconds a socket operation can block before
+    * an InterruptedIOException is thrown.
+    *
+    * @return The value of SO_TIMEOUT
+    *
+    * @exception IOException If an error occurs
+    *
+    * @since 1.1
+    */
+   public int getSoTimeout() throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("ServerSocket is closed");
+ 
+     Object timeout = impl.getOption(SocketOptions.SO_TIMEOUT);
+ 
+     if (! (timeout instanceof Integer))
+       throw new IOException("Internal Error");
+ 
+     return ((Integer) timeout).intValue();
+   }
+ 
+   /**
+    * Enables/Disables the SO_REUSEADDR option
+    *
+    * @param on true if SO_REUSEADDR should be enabled, false otherwise
+    * 
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public void setReuseAddress(boolean on) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("ServerSocket is closed");
+ 
+     impl.setOption(SocketOptions.SO_REUSEADDR, Boolean.valueOf(on));
+   }
+ 
+   /**
+    * Checks if the SO_REUSEADDR option is enabled
+    *
+    * @return true if SO_REUSEADDR is set, false otherwise
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public boolean getReuseAddress() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("ServerSocket is closed");
+ 
+     Object reuseaddr = impl.getOption(SocketOptions.SO_REUSEADDR);
+ 
+     if (! (reuseaddr instanceof Boolean))
+       throw new SocketException("Internal Error");
+ 
+     return ((Boolean) reuseaddr).booleanValue();
+   }
+ 
+   /**
+    * This method sets the value for the system level socket option
+    * SO_RCVBUF to the specified value.  Note that valid values for this
+    * option are specific to a given operating system.
+    *
+    * @param size The new receive buffer size.
+    *
+    * @exception SocketException If an error occurs or Socket is not connected
+    * @exception IllegalArgumentException If size is 0 or negative
+    *
+    * @since 1.4
+    */
+   public void setReceiveBufferSize(int size) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("ServerSocket is closed");
+ 
+     if (size <= 0)
+       throw new IllegalArgumentException("SO_RCVBUF value must be > 0");
+ 
+     impl.setOption(SocketOptions.SO_RCVBUF, new Integer(size));
+   }
+ 
+   /**
+    * This method returns the value of the system level socket option
+    * SO_RCVBUF, which is used by the operating system to tune buffer
+    * sizes for data transfers.
+    *
+    * @return The receive buffer size.
+    *
+    * @exception SocketException If an error occurs or Socket is not connected
+    *
+    * @since 1.4
+    */
+   public int getReceiveBufferSize() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("ServerSocket is closed");
+ 
+     Object buf = impl.getOption(SocketOptions.SO_RCVBUF);
+ 
+     if (! (buf instanceof Integer))
+       throw new SocketException("Internal Error: Unexpected type");
+ 
+     return ((Integer) buf).intValue();
+   }
+ 
+   /**
+    * Returns the value of this socket as a <code>String</code>.
+    *
+    * @return This socket represented as a <code>String</code>.
+    */
+   public String toString()
+   {
+     if (! isBound())
+       return "ServerSocket[unbound]";
+ 
+     return ("ServerSocket[addr=" + getInetAddress() + ",port="
+            + impl.getPort() + ",localport=" + impl.getLocalPort() + "]");
+   }
+ 
+   /**
+    * Sets the <code>SocketImplFactory</code> for all
+    * <code>ServerSocket</code>'s.  This may only be done
+    * once per virtual machine.  Subsequent attempts will generate an
+    * exception.  Note that a <code>SecurityManager</code> check is made prior
+    * to setting the factory.  If insufficient privileges exist to set the
+    * factory, an exception will be thrown
+    *
+    * @param fac the factory to set
+    *
+    * @exception SecurityException If this operation is not allowed by the
+    * <code>SecurityManager</code>.
+    * @exception SocketException If the factory object is already defined
+    * @exception IOException If any other error occurs
+    */
+   public static synchronized void setSocketFactory(SocketImplFactory fac)
+     throws IOException
+   {
+     factory = fac;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/Socket.java gcc-4.1.0/libjava/classpath/java/net/Socket.java
*** gcc-4.0.2/libjava/classpath/java/net/Socket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/Socket.java	Wed Dec 28 17:25:43 2005
***************
*** 0 ****
--- 1,1269 ----
+ /* Socket.java -- Client socket implementation
+    Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import gnu.java.net.PlainSocketImpl;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.nio.channels.IllegalBlockingModeException;
+ import java.nio.channels.SocketChannel;
+ 
+ 
+ /* Written using on-line Java Platform 1.2 API Specification.
+  * Status:  I believe all methods are implemented.
+  */
+ 
+ /**
+  * This class models a client site socket.  A socket is a TCP/IP endpoint
+  * for network communications conceptually similar to a file handle.
+  * <p>
+  * This class does not actually do any work.  Instead, it redirects all of
+  * its calls to a socket implementation object which implements the
+  * <code>SocketImpl</code> interface.  The implementation class is
+  * instantiated by factory class that implements the
+  * <code>SocketImplFactory interface</code>.  A default
+  * factory is provided, however the factory may be set by a call to
+  * the <code>setSocketImplFactory</code> method.  Note that this may only be
+  * done once per virtual machine.  If a subsequent attempt is made to set the
+  * factory, a <code>SocketException</code> will be thrown.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  */
+ public class Socket
+ {
+   /**
+    * This is the user SocketImplFactory for this class.  If this variable is
+    * null, a default factory is used.
+    */
+   static SocketImplFactory factory;
+ 
+   /**
+    * The implementation object to which calls are redirected
+    */
+   // package-private because ServerSocket.implAccept() needs to access it.
+   SocketImpl impl;
+ 
+   /**
+    * True if socket implementation was created by calling their
+    * create() method.
+    */
+   // package-private because ServerSocket.implAccept() needs to access it.
+   boolean implCreated;
+ 
+   /**
+    * True if the socket is bound.
+    * Package private so it can be set from ServerSocket when accept is called.
+    */
+   boolean bound;
+ 
+   /**
+    * True if input is shutdown.
+    */
+   private boolean inputShutdown;
+ 
+   /**
+    * True if output is shutdown.
+    */
+   private boolean outputShutdown;
+ 
+   /**
+    * Initializes a new instance of <code>Socket</code> object without
+    * connecting to a remote host.  This useful for subclasses of socket that
+    * might want this behavior.
+    *
+    * @specnote This constructor is public since JDK 1.4
+    * @since 1.1
+    */
+   public Socket()
+   {
+     if (factory != null)
+       impl = factory.createSocketImpl();
+     else
+       impl = new PlainSocketImpl();
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Socket</code> object without
+    * connecting to a remote host.  This is useful for subclasses of socket
+    * that might want this behavior.
+    * <p>
+    * Additionally, this socket will be created using the supplied
+    * implementation class instead the default class or one returned by a
+    * factory.  If this value is <code>null</code>, the default Socket
+    * implementation is used.
+    *
+    * @param impl The <code>SocketImpl</code> to use for this
+    *             <code>Socket</code>
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.1
+    */
+   protected Socket(SocketImpl impl) throws SocketException
+   {
+     if (impl == null)
+       this.impl = new PlainSocketImpl();
+     else
+       this.impl = impl;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Socket</code> and connects to the
+    * hostname and port specified as arguments.
+    *
+    * @param host The name of the host to connect to
+    * @param port The port number to connect to
+    *
+    * @exception UnknownHostException If the hostname cannot be resolved to a
+    * network address.
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect method doesn't allow the operation
+    */
+   public Socket(String host, int port)
+     throws UnknownHostException, IOException
+   {
+     this(InetAddress.getByName(host), port, null, 0, true);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Socket</code> and connects to the
+    * address and port number specified as arguments.
+    *
+    * @param address The address to connect to
+    * @param port The port number to connect to
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect method doesn't allow the operation
+    */
+   public Socket(InetAddress address, int port) throws IOException
+   {
+     this(address, port, null, 0, true);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Socket</code> that connects to the
+    * named host on the specified port and binds to the specified local address
+    * and port.
+    *
+    * @param host The name of the remote host to connect to.
+    * @param port The remote port to connect to.
+    * @param localAddr The local address to bind to.
+    * @param localPort The local port to bind to.
+    *
+    * @exception SecurityException If the <code>SecurityManager</code>
+    * exists and does not allow a connection to the specified host/port or
+    * binding to the specified local host/port.
+    * @exception IOException If a connection error occurs.
+    *
+    * @since 1.1
+    */
+   public Socket(String host, int port, InetAddress localAddr, int localPort)
+     throws IOException
+   {
+     this(InetAddress.getByName(host), port, localAddr, localPort, true);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Socket</code> and connects to the
+    * address and port number specified as arguments, plus binds to the
+    * specified local address and port.
+    *
+    * @param address The remote address to connect to
+    * @param port The remote port to connect to
+    * @param localAddr The local address to connect to
+    * @param localPort The local port to connect to
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect method doesn't allow the operation
+    *
+    * @since 1.1
+    */
+   public Socket(InetAddress address, int port, InetAddress localAddr,
+                 int localPort) throws IOException
+   {
+     this(address, port, localAddr, localPort, true);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Socket</code> and connects to the
+    * hostname and port specified as arguments.  If the stream argument is set
+    * to <code>true</code>, then a stream socket is created.  If it is
+    * <code>false</code>, a datagram socket is created.
+    *
+    * @param host The name of the host to connect to
+    * @param port The port to connect to
+    * @param stream <code>true</code> for a stream socket, <code>false</code>
+    * for a datagram socket
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect method doesn't allow the operation
+    *
+    * @deprecated Use the <code>DatagramSocket</code> class to create
+    * datagram oriented sockets.
+    */
+   public Socket(String host, int port, boolean stream)
+     throws IOException
+   {
+     this(InetAddress.getByName(host), port, null, 0, stream);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>Socket</code> and connects to the
+    * address and port number specified as arguments.  If the stream param is
+    * <code>true</code>, a stream socket will be created, otherwise a datagram
+    * socket is created.
+    *
+    * @param host The address to connect to
+    * @param port The port number to connect to
+    * @param stream <code>true</code> to create a stream socket,
+    * <code>false</code> to create a datagram socket.
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect method doesn't allow the operation
+    *
+    * @deprecated Use the <code>DatagramSocket</code> class to create
+    * datagram oriented sockets.
+    */
+   public Socket(InetAddress host, int port, boolean stream)
+     throws IOException
+   {
+     this(host, port, null, 0, stream);
+   }
+ 
+   /**
+    * This constructor is where the real work takes place.  Connect to the
+    * specified address and port.  Use default local values if not specified,
+    * otherwise use the local host and port passed in.  Create as stream or
+    * datagram based on "stream" argument.
+    * <p>
+    *
+    * @param raddr The remote address to connect to
+    * @param rport The remote port to connect to
+    * @param laddr The local address to connect to
+    * @param lport The local port to connect to
+    * @param stream true for a stream socket, false for a datagram socket
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect method doesn't allow the operation
+    */
+   private Socket(InetAddress raddr, int rport, InetAddress laddr, int lport,
+                  boolean stream) throws IOException
+   {
+     this();
+ 
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkConnect(raddr.getHostName(), rport);
+ 
+     // bind socket
+     SocketAddress bindaddr =
+       laddr == null ? null : new InetSocketAddress(laddr, lport);
+     bind(bindaddr);
+ 
+     // connect socket
+     connect(new InetSocketAddress(raddr, rport));
+ 
+     // FIXME: JCL p. 1586 says if localPort is unspecified, bind to any port,
+     // i.e. '0' and if localAddr is unspecified, use getLocalAddress() as
+     // that default.  JDK 1.2 doc infers not to do a bind.
+   }
+ 
+   private SocketImpl getImpl() throws SocketException
+   {
+     try
+       {
+ 	if (! implCreated)
+ 	  {
+ 	    impl.create(true);
+ 	    implCreated = true;
+ 	  }
+       }
+     catch (IOException e)
+       {
+ 	SocketException se = new SocketException(e.toString());
+ 	se.initCause(e);
+ 	throw se;
+       }
+ 
+     return impl;
+   }
+ 
+   /**
+    * Binds the socket to the givent local address/port
+    *
+    * @param bindpoint The address/port to bind to
+    *
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager exists and its
+    * checkConnect method doesn't allow the operation
+    * @exception IllegalArgumentException If the address type is not supported
+    *
+    * @since 1.4
+    */
+   public void bind(SocketAddress bindpoint) throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     // XXX: JDK 1.4.1 API documentation says that if bindpoint is null the
+     // socket will be bound to an ephemeral port and a valid local address.
+     if (bindpoint == null)
+       bindpoint = new InetSocketAddress(InetAddress.ANY_IF, 0);
+ 
+     if (! (bindpoint instanceof InetSocketAddress))
+       throw new IllegalArgumentException();
+ 
+     InetSocketAddress tmp = (InetSocketAddress) bindpoint;
+ 
+     // bind to address/port
+     try
+       {
+ 	getImpl().bind(tmp.getAddress(), tmp.getPort());
+ 	bound = true;
+       }
+     catch (IOException exception)
+       {
+ 	close();
+ 	throw exception;
+       }
+     catch (RuntimeException exception)
+       {
+ 	close();
+ 	throw exception;
+       }
+     catch (Error error)
+       {
+ 	close();
+ 	throw error;
+       }
+   }
+ 
+   /**
+    * Connects the socket with a remote address.
+    *
+    * @param endpoint The address to connect to
+    *
+    * @exception IOException If an error occurs
+    * @exception IllegalArgumentException If the addess type is not supported
+    * @exception IllegalBlockingModeException If this socket has an associated
+    * channel, and the channel is in non-blocking mode
+    *
+    * @since 1.4
+    */
+   public void connect(SocketAddress endpoint) throws IOException
+   {
+     connect(endpoint, 0);
+   }
+ 
+   /**
+    * Connects the socket with a remote address. A timeout of zero is
+    * interpreted as an infinite timeout. The connection will then block
+    * until established or an error occurs.
+    *
+    * @param endpoint The address to connect to
+    * @param timeout The length of the timeout in milliseconds, or
+    * 0 to indicate no timeout.
+    *
+    * @exception IOException If an error occurs
+    * @exception IllegalArgumentException If the address type is not supported
+    * @exception IllegalBlockingModeException If this socket has an associated
+    * channel, and the channel is in non-blocking mode
+    * @exception SocketTimeoutException If the timeout is reached
+    *
+    * @since 1.4
+    */
+   public void connect(SocketAddress endpoint, int timeout)
+     throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (! (endpoint instanceof InetSocketAddress))
+       throw new IllegalArgumentException("unsupported address type");
+ 
+     // The Sun spec says that if we have an associated channel and
+     // it is in non-blocking mode, we throw an IllegalBlockingModeException.
+     // However, in our implementation if the channel itself initiated this
+     // operation, then we must honor it regardless of its blocking mode.
+     if (getChannel() != null && ! getChannel().isBlocking()
+         && ! ((PlainSocketImpl) getImpl()).isInChannelOperation())
+       throw new IllegalBlockingModeException();
+ 
+     if (! isBound())
+       bind(null);
+ 
+     getImpl().connect(endpoint, timeout);
+   }
+ 
+   /**
+    * Returns the address of the remote end of the socket.  If this socket
+    * is not connected, then <code>null</code> is returned.
+    *
+    * @return The remote address this socket is connected to
+    */
+   public InetAddress getInetAddress()
+   {
+     if (! isConnected())
+       return null;
+ 
+     try
+       {
+ 	return getImpl().getInetAddress();
+       }
+     catch (SocketException e)
+       {
+ 	// This cannot happen as we are connected.
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Returns the local address to which this socket is bound.  If this socket
+    * is not connected, then a wildcard address, for which
+    * @see InetAddress#isAnyLocalAddress() is <code>true</code>, is returned.
+    *
+    * @return The local address
+    *
+    * @since 1.1
+    */
+   public InetAddress getLocalAddress()
+   {
+     if (! isBound())
+       return InetAddress.ANY_IF;
+ 
+     InetAddress addr = null;
+ 
+     try
+       {
+ 	addr = (InetAddress) getImpl().getOption(SocketOptions.SO_BINDADDR);
+       }
+     catch (SocketException e)
+       {
+ 	// (hopefully) shouldn't happen
+ 	// throw new java.lang.InternalError
+ 	//      ("Error in PlainSocketImpl.getOption");
+ 	return null;
+       }
+ 
+     // FIXME: According to libgcj, checkConnect() is supposed to be called
+     // before performing this operation.  Problems: 1) We don't have the
+     // addr until after we do it, so we do a post check.  2). The docs I
+     // see don't require this in the Socket case, only DatagramSocket, but
+     // we'll assume they mean both.
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkConnect(addr.getHostName(), getLocalPort());
+ 
+     return addr;
+   }
+ 
+   /**
+    * Returns the port number of the remote end of the socket connection.  If
+    * this socket is not connected, then 0 is returned.
+    *
+    * @return The remote port this socket is connected to
+    */
+   public int getPort()
+   {
+     if (! isConnected())
+       return 0;
+ 
+     try
+       {
+ 	return getImpl().getPort();
+       }
+     catch (SocketException e)
+       {
+ 	// This cannot happen as we are connected.
+       }
+ 
+     return 0;
+   }
+ 
+   /**
+    * Returns the local port number to which this socket is bound.  If this
+    * socket is not connected, then -1 is returned.
+    *
+    * @return The local port
+    */
+   public int getLocalPort()
+   {
+     if (! isBound())
+       return -1;
+ 
+     try
+       {
+ 	if (getImpl() != null)
+ 	  return getImpl().getLocalPort();
+       }
+     catch (SocketException e)
+       {
+ 	// This cannot happen as we are bound.
+       }
+ 
+     return -1;
+   }
+ 
+   /**
+    * Returns local socket address.
+    *
+    * @return the local socket address, null if not bound
+    *
+    * @since 1.4
+    */
+   public SocketAddress getLocalSocketAddress()
+   {
+     if (! isBound())
+       return null;
+ 
+     InetAddress addr = getLocalAddress();
+ 
+     try
+       {
+ 	return new InetSocketAddress(addr, getImpl().getLocalPort());
+       }
+     catch (SocketException e)
+       {
+ 	// This cannot happen as we are bound.
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns the remote socket address.
+    *
+    * @return the remote socket address, null of not connected
+    *
+    * @since 1.4
+    */
+   public SocketAddress getRemoteSocketAddress()
+   {
+     if (! isConnected())
+       return null;
+ 
+     try
+       {
+ 	return new InetSocketAddress(getImpl().getInetAddress(),
+ 	                             getImpl().getPort());
+       }
+     catch (SocketException e)
+       {
+ 	// This cannot happen as we are connected.
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns an InputStream for reading from this socket.
+    *
+    * @return The InputStream object
+    *
+    * @exception IOException If an error occurs or Socket is not connected
+    */
+   public InputStream getInputStream() throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (! isConnected())
+       throw new IOException("not connected");
+ 
+     return getImpl().getInputStream();
+   }
+ 
+   /**
+    * Returns an OutputStream for writing to this socket.
+    *
+    * @return The OutputStream object
+    *
+    * @exception IOException If an error occurs or Socket is not connected
+    */
+   public OutputStream getOutputStream() throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (! isConnected())
+       throw new IOException("not connected");
+ 
+     return getImpl().getOutputStream();
+   }
+ 
+   /**
+    * Sets the TCP_NODELAY option on the socket.
+    *
+    * @param on true to enable, false to disable
+    *
+    * @exception SocketException If an error occurs or Socket is not connected
+    *
+    * @since 1.1
+    */
+   public void setTcpNoDelay(boolean on) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().setOption(SocketOptions.TCP_NODELAY, Boolean.valueOf(on));
+   }
+ 
+   /**
+    * Tests whether or not the TCP_NODELAY option is set on the socket.
+    * Returns true if enabled, false if disabled. When on it disables the
+    * Nagle algorithm which means that packets are always send immediatly and
+    * never merged together to reduce network trafic.
+    *
+    * @return Whether or not TCP_NODELAY is set
+    *
+    * @exception SocketException If an error occurs or Socket not connected
+    *
+    * @since 1.1
+    */
+   public boolean getTcpNoDelay() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object on = getImpl().getOption(SocketOptions.TCP_NODELAY);
+ 
+     if (on instanceof Boolean)
+       return (((Boolean) on).booleanValue());
+     else
+       throw new SocketException("Internal Error");
+   }
+ 
+   /**
+    * Sets the value of the SO_LINGER option on the socket.  If the
+    * SO_LINGER option is set on a socket and there is still data waiting to
+    * be sent when the socket is closed, then the close operation will block
+    * until either that data is delivered or until the timeout period
+    * expires.  The linger interval is specified in hundreths of a second
+    * (platform specific?)
+    *
+    * @param on true to enable SO_LINGER, false to disable
+    * @param linger The SO_LINGER timeout in hundreths of a second or -1 if
+    * SO_LINGER not set.
+    *
+    * @exception SocketException If an error occurs or Socket not connected
+    * @exception IllegalArgumentException If linger is negative
+    *
+    * @since 1.1
+    */
+   public void setSoLinger(boolean on, int linger) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (on)
+       {
+ 	if (linger < 0)
+ 	  throw new IllegalArgumentException("SO_LINGER must be >= 0");
+ 
+ 	if (linger > 65535)
+ 	  linger = 65535;
+ 
+ 	getImpl().setOption(SocketOptions.SO_LINGER, new Integer(linger));
+       }
+     else
+       getImpl().setOption(SocketOptions.SO_LINGER, Boolean.valueOf(false));
+   }
+ 
+   /**
+    * Returns the value of the SO_LINGER option on the socket.  If the
+    * SO_LINGER option is set on a socket and there is still data waiting to
+    * be sent when the socket is closed, then the close operation will block
+    * until either that data is delivered or until the timeout period
+    * expires.  This method either returns the timeouts (in hundredths of
+    * of a second (platform specific?)) if SO_LINGER is set, or -1 if
+    * SO_LINGER is not set.
+    *
+    * @return The SO_LINGER timeout in hundreths of a second or -1
+    * if SO_LINGER not set
+    *
+    * @exception SocketException If an error occurs or Socket is not connected
+    *
+    * @since 1.1
+    */
+   public int getSoLinger() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object linger = getImpl().getOption(SocketOptions.SO_LINGER);
+ 
+     if (linger instanceof Integer)
+       return (((Integer) linger).intValue());
+     else
+       return -1;
+   }
+ 
+   /**
+    * Sends urgent data through the socket
+    *
+    * @param data The data to send.
+    * Only the lowest eight bits of data are sent
+    *
+    * @exception IOException If an error occurs
+    *
+    * @since 1.4
+    */
+   public void sendUrgentData(int data) throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().sendUrgentData(data);
+   }
+ 
+   /**
+    * Enables/disables the SO_OOBINLINE option
+    *
+    * @param on True if SO_OOBLINE should be enabled
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public void setOOBInline(boolean on) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().setOption(SocketOptions.SO_OOBINLINE, Boolean.valueOf(on));
+   }
+ 
+   /**
+    * Returns the current setting of the SO_OOBINLINE option for this socket
+    *
+    * @return True if SO_OOBINLINE is set, false otherwise.
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public boolean getOOBInline() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.SO_OOBINLINE);
+ 
+     if (buf instanceof Boolean)
+       return (((Boolean) buf).booleanValue());
+     else
+       throw new SocketException("Internal Error: Unexpected type");
+   }
+ 
+   /**
+    * Sets the value of the SO_TIMEOUT option on the socket.  If this value
+    * is set, and an read/write is performed that does not complete within
+    * the timeout period, a short count is returned (or an EWOULDBLOCK signal
+    * would be sent in Unix if no data had been read).  A value of 0 for
+    * this option implies that there is no timeout (ie, operations will
+    * block forever).  On systems that have separate read and write timeout
+    * values, this method returns the read timeout.  This
+    * value is in milliseconds.
+    *
+    * @param timeout The length of the timeout in milliseconds, or
+    * 0 to indicate no timeout.
+    *
+    * @exception SocketException If an error occurs or Socket not connected
+    *
+    * @since 1.1
+    */
+   public synchronized void setSoTimeout(int timeout) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (timeout < 0)
+       throw new IllegalArgumentException("SO_TIMEOUT value must be >= 0");
+ 
+     getImpl().setOption(SocketOptions.SO_TIMEOUT, new Integer(timeout));
+   }
+ 
+   /**
+    * Returns the value of the SO_TIMEOUT option on the socket.  If this value
+    * is set, and an read/write is performed that does not complete within
+    * the timeout period, a short count is returned (or an EWOULDBLOCK signal
+    * would be sent in Unix if no data had been read).  A value of 0 for
+    * this option implies that there is no timeout (ie, operations will
+    * block forever).  On systems that have separate read and write timeout
+    * values, this method returns the read timeout.  This
+    * value is in thousandths of a second (implementation specific?).
+    *
+    * @return The length of the timeout in thousandth's of a second or 0
+    * if not set
+    *
+    * @exception SocketException If an error occurs or Socket not connected
+    *
+    * @since 1.1
+    */
+   public synchronized int getSoTimeout() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object timeout = getImpl().getOption(SocketOptions.SO_TIMEOUT);
+     if (timeout instanceof Integer)
+       return (((Integer) timeout).intValue());
+     else
+       return 0;
+   }
+ 
+   /**
+    * This method sets the value for the system level socket option
+    * SO_SNDBUF to the specified value.  Note that valid values for this
+    * option are specific to a given operating system.
+    *
+    * @param size The new send buffer size.
+    *
+    * @exception SocketException If an error occurs or Socket not connected
+    * @exception IllegalArgumentException If size is 0 or negative
+    *
+    * @since 1.2
+    */
+   public void setSendBufferSize(int size) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (size <= 0)
+       throw new IllegalArgumentException("SO_SNDBUF value must be > 0");
+ 
+     getImpl().setOption(SocketOptions.SO_SNDBUF, new Integer(size));
+   }
+ 
+   /**
+    * This method returns the value of the system level socket option
+    * SO_SNDBUF, which is used by the operating system to tune buffer
+    * sizes for data transfers.
+    *
+    * @return The send buffer size.
+    *
+    * @exception SocketException If an error occurs or socket not connected
+    *
+    * @since 1.2
+    */
+   public int getSendBufferSize() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.SO_SNDBUF);
+ 
+     if (buf instanceof Integer)
+       return (((Integer) buf).intValue());
+     else
+       throw new SocketException("Internal Error: Unexpected type");
+   }
+ 
+   /**
+    * This method sets the value for the system level socket option
+    * SO_RCVBUF to the specified value.  Note that valid values for this
+    * option are specific to a given operating system.
+    *
+    * @param size The new receive buffer size.
+    *
+    * @exception SocketException If an error occurs or Socket is not connected
+    * @exception IllegalArgumentException If size is 0 or negative
+    *
+    * @since 1.2
+    */
+   public void setReceiveBufferSize(int size) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (size <= 0)
+       throw new IllegalArgumentException("SO_RCVBUF value must be > 0");
+ 
+     getImpl().setOption(SocketOptions.SO_RCVBUF, new Integer(size));
+   }
+ 
+   /**
+    * This method returns the value of the system level socket option
+    * SO_RCVBUF, which is used by the operating system to tune buffer
+    * sizes for data transfers.
+    *
+    * @return The receive buffer size.
+    *
+    * @exception SocketException If an error occurs or Socket is not connected
+    *
+    * @since 1.2
+    */
+   public int getReceiveBufferSize() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.SO_RCVBUF);
+ 
+     if (buf instanceof Integer)
+       return (((Integer) buf).intValue());
+     else
+       throw new SocketException("Internal Error: Unexpected type");
+   }
+ 
+   /**
+    * This method sets the value for the socket level socket option
+    * SO_KEEPALIVE.
+    *
+    * @param on True if SO_KEEPALIVE should be enabled
+    *
+    * @exception SocketException If an error occurs or Socket is not connected
+    *
+    * @since 1.3
+    */
+   public void setKeepAlive(boolean on) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().setOption(SocketOptions.SO_KEEPALIVE, Boolean.valueOf(on));
+   }
+ 
+   /**
+    * This method returns the value of the socket level socket option
+    * SO_KEEPALIVE.
+    *
+    * @return The setting
+    *
+    * @exception SocketException If an error occurs or Socket is not connected
+    *
+    * @since 1.3
+    */
+   public boolean getKeepAlive() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object buf = getImpl().getOption(SocketOptions.SO_KEEPALIVE);
+ 
+     if (buf instanceof Boolean)
+       return (((Boolean) buf).booleanValue());
+     else
+       throw new SocketException("Internal Error: Unexpected type");
+   }
+ 
+   /**
+    * Closes the socket.
+    *
+    * @exception IOException If an error occurs
+    */
+   public synchronized void close() throws IOException
+   {
+     if (isClosed())
+       return;
+ 
+     getImpl().close();
+     impl = null;
+     bound = false;
+ 
+     if (getChannel() != null)
+       getChannel().close();
+   }
+ 
+   /**
+    * Converts this <code>Socket</code> to a <code>String</code>.
+    *
+    * @return The <code>String</code> representation of this <code>Socket</code>
+    */
+   public String toString()
+   {
+     try
+       {
+ 	if (isConnected())
+ 	  return ("Socket[addr=" + getImpl().getInetAddress() + ",port="
+ 	         + getImpl().getPort() + ",localport="
+ 	         + getImpl().getLocalPort() + "]");
+       }
+     catch (SocketException e)
+       {
+ 	// This cannot happen as we are connected.
+       }
+ 
+     return "Socket[unconnected]";
+   }
+ 
+   /**
+    * Sets the <code>SocketImplFactory</code>.  This may be done only once per
+    * virtual machine.  Subsequent attempts will generate a
+    * <code>SocketException</code>.  Note that a <code>SecurityManager</code>
+    * check is made prior to setting the factory.  If
+    * insufficient privileges exist to set the factory, then an
+    * <code>IOException</code> will be thrown.
+    *
+    * @param fac the factory to set
+    *
+    * @exception SecurityException If the <code>SecurityManager</code> does
+    * not allow this operation.
+    * @exception SocketException If the SocketImplFactory is already defined
+    * @exception IOException If any other error occurs
+    */
+   public static synchronized void setSocketImplFactory(SocketImplFactory fac)
+     throws IOException
+   {
+     // See if already set
+     if (factory != null)
+       throw new SocketException("SocketImplFactory already defined");
+ 
+     // Check permissions
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSetFactory();
+ 
+     if (fac == null)
+       throw new SocketException("SocketImplFactory cannot be null");
+ 
+     factory = fac;
+   }
+ 
+   /**
+    * Closes the input side of the socket stream.
+    *
+    * @exception IOException If an error occurs.
+    *
+    * @since 1.3
+    */
+   public void shutdownInput() throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().shutdownInput();
+     inputShutdown = true;
+   }
+ 
+   /**
+    * Closes the output side of the socket stream.
+    *
+    * @exception IOException If an error occurs.
+    *
+    * @since 1.3
+    */
+   public void shutdownOutput() throws IOException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().shutdownOutput();
+     outputShutdown = true;
+   }
+ 
+   /**
+    * Returns the socket channel associated with this socket.
+    *
+    * @return the associated socket channel,
+    * null if no associated channel exists
+    *
+    * @since 1.4
+    */
+   public SocketChannel getChannel()
+   {
+     return null;
+   }
+ 
+   /**
+    * Checks if the SO_REUSEADDR option is enabled
+    *
+    * @return True if SO_REUSEADDR is set, false otherwise.
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public boolean getReuseAddress() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object reuseaddr = getImpl().getOption(SocketOptions.SO_REUSEADDR);
+ 
+     if (! (reuseaddr instanceof Boolean))
+       throw new SocketException("Internal Error");
+ 
+     return ((Boolean) reuseaddr).booleanValue();
+   }
+ 
+   /**
+    * Enables/Disables the SO_REUSEADDR option
+    *
+    * @param reuseAddress true if SO_REUSEADDR should be enabled,
+    * false otherwise
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @since 1.4
+    */
+   public void setReuseAddress(boolean reuseAddress) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     getImpl().setOption(SocketOptions.SO_REUSEADDR,
+                         Boolean.valueOf(reuseAddress));
+   }
+ 
+   /**
+    * Returns the current traffic class
+    *
+    * @return The current traffic class.
+    *
+    * @exception SocketException If an error occurs
+    *
+    * @see Socket#setTrafficClass(int tc)
+    *
+    * @since 1.4
+    */
+   public int getTrafficClass() throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     Object obj = getImpl().getOption(SocketOptions.IP_TOS);
+ 
+     if (obj instanceof Integer)
+       return ((Integer) obj).intValue();
+     else
+       throw new SocketException("Unexpected type");
+   }
+ 
+   /**
+    * Sets the traffic class value
+    *
+    * @param tc The traffic class
+    *
+    * @exception SocketException If an error occurs
+    * @exception IllegalArgumentException If tc value is illegal
+    *
+    * @see Socket#getTrafficClass()
+    *
+    * @since 1.4
+    */
+   public void setTrafficClass(int tc) throws SocketException
+   {
+     if (isClosed())
+       throw new SocketException("socket is closed");
+ 
+     if (tc < 0 || tc > 255)
+       throw new IllegalArgumentException();
+ 
+     getImpl().setOption(SocketOptions.IP_TOS, new Integer(tc));
+   }
+ 
+   /**
+    * Checks if the socket is connected
+    *
+    * @return True if socket is connected, false otherwise.
+    *
+    * @since 1.4
+    */
+   public boolean isConnected()
+   {
+     try
+       {
+ 	if (getImpl() == null)
+ 	  return false;
+ 
+ 	return getImpl().getInetAddress() != null;
+       }
+     catch (SocketException e)
+       {
+ 	return false;
+       }
+   }
+ 
+   /**
+    * Checks if the socket is already bound.
+    *
+    * @return True if socket is bound, false otherwise.
+    *
+    * @since 1.4
+    */
+   public boolean isBound()
+   {
+     return bound;
+   }
+ 
+   /**
+    * Checks if the socket is closed.
+    *
+    * @return True if socket is closed, false otherwise.
+    *
+    * @since 1.4
+    */
+   public boolean isClosed()
+   {
+     return impl == null;
+   }
+ 
+   /**
+    * Checks if the socket's input stream is shutdown
+    *
+    * @return True if input is shut down.
+    *
+    * @since 1.4
+    */
+   public boolean isInputShutdown()
+   {
+     return inputShutdown;
+   }
+ 
+   /**
+    * Checks if the socket's output stream is shutdown
+    *
+    * @return True if output is shut down.
+    *
+    * @since 1.4
+    */
+   public boolean isOutputShutdown()
+   {
+     return outputShutdown;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/SocketAddress.java gcc-4.1.0/libjava/classpath/java/net/SocketAddress.java
*** gcc-4.0.2/libjava/classpath/java/net/SocketAddress.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/SocketAddress.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* SocketAddress.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.Serializable;
+ 
+ 
+ /**
+  * Abstract base class for InetSocketAddress.
+  * InetSocketAddress is to my knowledge the only derived
+  * class. [Ronald]
+  *
+  * @since 1.4
+  */
+ public abstract class SocketAddress implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.4+
+    */
+   static final long serialVersionUID = 5215720748342549866L;
+ 
+   /**
+    * Initializes the socket address.
+    */
+   public SocketAddress()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/SocketException.java gcc-4.1.0/libjava/classpath/java/net/SocketException.java
*** gcc-4.0.2/libjava/classpath/java/net/SocketException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/SocketException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* SocketException.java -- An exception occurred while performing a socket op
+    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * This exception indicates that a generic error occurred related to an
+  * operation on a socket.  Check the descriptive message (if any) for
+  * details on the nature of this error
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner
+  * @status updated to 1.4
+  */
+ public class SocketException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -5935874303556886934L;
+ 
+   /**
+    * Create a new instance without a descriptive error message.
+    */
+   public SocketException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message a message describing the error that occurred
+    */
+   public SocketException(String message)
+   {
+     super(message);
+   }
+ } // class SocketException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/SocketImpl.java gcc-4.1.0/libjava/classpath/java/net/SocketImpl.java
*** gcc-4.0.2/libjava/classpath/java/net/SocketImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/SocketImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,321 ----
+ /* SocketImpl.java -- Abstract socket implementation class
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.FileDescriptor;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ 
+ 
+ /* Written using on-line Java Platform 1.2 API Specification.
+  * Believed complete and correct.
+  */
+ 
+ /**
+  * This abstract class serves as the parent class for socket implementations.
+  * The implementation class serves an intermediary to native routines that
+  * perform system specific socket operations.
+  * <p>
+  * A default implementation is provided by the system, but this can be
+  * changed via installing a <code>SocketImplFactory</code> (through a call
+  * to the static method <code>Socket.setSocketImplFactory</code>).  A
+  * subclass of <code>Socket</code> can also pass in a <code>SocketImpl</code>
+  * to the <code>Socket(SocketImpl)</code> constructor to use an
+  * implementation different from the system default without installing
+  * a factory.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  */
+ public abstract class SocketImpl implements SocketOptions
+ {
+   /**
+    * The address of the remote end of the socket connection
+    */
+   protected InetAddress address;
+ 
+   /**
+    * A FileDescriptor object representing this socket connection.
+    */
+   protected FileDescriptor fd;
+ 
+   /**
+    * The port number the socket is bound to locally
+    */
+   protected int localport = -1;
+ 
+   /**
+    * The port number of the remote end of the socket connection
+    */
+   protected int port;
+ 
+   /**
+    * Default, no-argument constructor for use by subclasses.
+    */
+   public SocketImpl()
+   {
+   }
+ 
+   /**
+    * Creates a new socket that is not bound to any local address/port and
+    * is not connected to any remote address/port.  This will be created as
+    * a stream socket if the stream parameter is true, or a datagram socket
+    * if the stream parameter is false.
+    *
+    * @param stream true for a stream socket, false for a datagram socket
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void create(boolean stream) throws IOException;
+ 
+   /**
+    * Connects to the remote hostname and port specified as arguments.
+    *
+    * @param host The remote hostname to connect to
+    * @param port The remote port to connect to
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void connect(String host, int port)
+     throws IOException;
+ 
+   /**
+    * Connects to the remote address and port specified as arguments.
+    *
+    * @param host The remote address to connect to
+    * @param port The remote port to connect to
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void connect(InetAddress host, int port)
+     throws IOException;
+ 
+   /**
+    * Connects to the socket to the host specified in address. This
+    * method blocks until successful connected or the timeout occurs.
+    * A timeout of zero means no timout.
+    *
+    * @param address Data of remote host
+    * @param timeout time to wait to stop connecting
+    *
+    * @exception IOException If an error occurs
+    *
+    * @since 1.4
+    */
+   protected abstract void connect(SocketAddress address, int timeout)
+     throws IOException;
+ 
+   /**
+    * Binds to the specified port on the specified addr.  Note that this addr
+    * must represent a local IP address.
+    * <p>
+    * Note that it is unspecified how to bind to all interfaces on the localhost
+    * (INADDR_ANY).
+    *
+    * @param host The address to bind to
+    * @param port The port number to bind to
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void bind(InetAddress host, int port)
+     throws IOException;
+ 
+   /**
+    * Starts listening for connections on a socket. The backlog parameter
+    * is how many pending connections will queue up waiting to be serviced
+    * before being accept'ed.  If the queue of pending requests exceeds this
+    * number, additional connections will be refused.
+    *
+    * @param backlog The length of the pending connection queue
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void listen(int backlog) throws IOException;
+ 
+   /**
+    * Accepts a connection on this socket.
+    *
+    * @param s The implementation object for the accepted connection.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void accept(SocketImpl s) throws IOException;
+ 
+   /**
+    * Returns an <code>InputStream</code> object for reading from this socket.
+    *
+    * @return An <code>InputStream</code> for reading from this socket.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract InputStream getInputStream() throws IOException;
+ 
+   /**
+    * Returns an <code>OutputStream</code> object for writing to this socket
+    *
+    * @return An <code>OutputStream</code> for writing to this socket.
+    *
+    * @exception IOException If an error occurs.
+    */
+   protected abstract OutputStream getOutputStream() throws IOException;
+ 
+   /**
+    * Returns the number of bytes that the caller can read from this socket
+    * without blocking.
+    *
+    * @return The number of readable bytes before blocking
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract int available() throws IOException;
+ 
+   /**
+    * Closes the socket.  This will normally cause any resources, such as the
+    * InputStream, OutputStream and associated file descriptors  to be freed.
+    * <p>
+    * Note that if the SO_LINGER option is set on this socket, then the
+    * operation could block.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void close() throws IOException;
+ 
+   /**
+    * Returns the FileDescriptor objects for this socket.
+    *
+    * @return A FileDescriptor for this socket.
+    */
+   protected FileDescriptor getFileDescriptor()
+   {
+     return fd;
+   }
+ 
+   /**
+    * Returns the remote address this socket is connected to
+    *
+    * @return The remote address
+    */
+   protected InetAddress getInetAddress()
+   {
+     return address;
+   }
+ 
+   /**
+    * Returns the remote port this socket is connected to
+    *
+    * @return The remote port
+    */
+   protected int getPort()
+   {
+     return port;
+   }
+ 
+   /**
+    * Returns true or false when this socket supports sending urgent data
+    * or not.
+    *
+    * @return true if the socket implementation supports sending urgent data,
+    * false otherwise
+    *
+    * @since 1.4
+    */
+   protected boolean supportsUrgentData()
+   {
+     // This method has to be overwritten by socket classes that support
+     // sending urgend data.
+     return false;
+   }
+ 
+   /**
+    * Sends one byte of urgent data to the socket.
+    *
+    * @param data The byte to send, the low eight bits of it
+    *
+    * @exception IOException If an error occurs
+    *
+    * @since 1.4
+    */
+   protected abstract void sendUrgentData(int data) throws IOException;
+ 
+   /**
+    * Returns the local port this socket is bound to
+    *
+    * @return The local port
+    */
+   protected int getLocalPort()
+   {
+     return localport;
+   }
+ 
+   /**
+    * Returns a <code>String</code> representing the remote host and port of
+    * this socket.
+    *
+    * @return A <code>String</code> for this socket.
+    */
+   public String toString()
+   {
+     return "[addr="
+            + ((address == null) ? "0.0.0.0/0.0.0.0" : address.toString())
+            + ",port=" + port + ",localport=" + localport + "]";
+   }
+ 
+   /**
+    * Shut down the input side of this socket.  Subsequent reads will
+    * return end-of-file.
+    *
+    * @exception IOException if an error occurs
+    */
+   protected void shutdownInput() throws IOException
+   {
+     throw new IOException("Not implemented in this socket class");
+   }
+ 
+   /**
+    * Shut down the output side of this socket.  Subsequent writes will
+    * fail with an IOException.
+    *
+    * @exception IOException if an error occurs
+    */
+   protected void shutdownOutput() throws IOException
+   {
+     throw new IOException("Not implemented in this socket class");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/SocketImplFactory.java gcc-4.1.0/libjava/classpath/java/net/SocketImplFactory.java
*** gcc-4.0.2/libjava/classpath/java/net/SocketImplFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/SocketImplFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* SocketImplFactory.java -- Interface to create a SocketImpl object
+    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /** Written using on-line Java Platform 1.2 API Specification.
+   * Status:  Believed complete and correct.
+   */
+ /**
+   * This interface defines one method which returns a <code>SocketImpl</code>
+   * object.  This should not be needed by ordinary applications.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Per Bothner (bothner@cygnus.com)
+   */
+ public interface SocketImplFactory
+ {
+   /**
+     * This method returns an instance of the <code>SocketImpl</code> object
+     *
+     * @return A <code>SocketImpl</code> object
+     */
+   SocketImpl createSocketImpl();
+ } // interface SocketImplFactory
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/SocketOptions.java gcc-4.1.0/libjava/classpath/java/net/SocketOptions.java
*** gcc-4.0.2/libjava/classpath/java/net/SocketOptions.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/SocketOptions.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,166 ----
+ /* SocketOptions.java -- Implements options for sockets (duh!)
+    Copyright (C) 1998, 1999, 2000, 2001,
+                  2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification.
+  * Status:  Believed complete and correct.
+  */
+ /**
+  * This interface is used by <code>SocketImpl</code> and
+  * <code>DatagramSocketImpl</code> to implement options
+  * on sockets.
+  *
+  * @since 1.2
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status should be completely JDK 1.4 compatible
+  */
+ public interface SocketOptions
+ {
+   /**
+    * Option id for the SO_KEEPALIVE value
+    * @since 1.3
+    */
+   int SO_KEEPALIVE = 0x8;
+ 
+   /**
+    * Option id for the SO_LINGER value
+    */
+   int SO_LINGER = 0x80; // 128
+ 
+   /**
+    * Option id for the SO_TIMEOUT value
+    */
+   int SO_TIMEOUT = 0x1006; // 4102
+ 
+   /**
+    * Retrieve the local address to which the socket is bound.
+    */
+   int SO_BINDADDR = 0x0F; // 15
+ 
+   /**
+    * Option id for the send buffer size
+    * @since 1.2
+    */
+   int SO_SNDBUF = 0x1001; // 4097
+ 
+   /**
+    * Option id for the receive buffer size
+    * @since 1.2
+    */
+   int SO_RCVBUF = 0x1002; // 4098
+ 
+   /**
+    * Sets the SO_REUSEADDR parameter on a socket
+    */
+   int SO_REUSEADDR = 0x04; // 4
+ 
+   /**
+    * Sets SO_BROADCAST for a socket
+    * @since 1.4
+    */
+   int SO_BROADCAST = 0x20; // 32
+ 
+   /**
+    * Sets SO_OOBINLINE for a socket
+    * @since 1.4
+    */
+   int SO_OOBINLINE = 0x1003; // 4099
+ 
+   /**
+    * Option id for the TCP_NODELAY value
+    */
+   int TCP_NODELAY = 0x01; // 1
+ 
+   /**
+    * Options id for the IP_MULTICAST_IF value
+    */
+   int IP_MULTICAST_IF = 0x10; // 16
+ 
+   /**
+    * same as above
+    * @since 1.4
+    */
+   int IP_MULTICAST_IF2 = 0x1F; // 31
+ 
+   /**
+    * This option enables or disables local loopback of multicast datagrams.
+    * @since 1.4
+    */
+   int IP_MULTICAST_LOOP = 0x12; // 18
+ 
+   /**
+    * This option sets the type-of-service or traffic class field in the
+    * IP header for a TCP or UDP socket.
+    * @since 1.4
+    */
+   int IP_TOS = 0x03; // 3
+ 
+   /**
+    * Sets the specified option on a socket to the passed in object.  For
+    * options that take an integer argument, the passed in object is an
+    * <code>Integer</code>.  For options that are set to on or off, the
+    * value passed will be a <code>Boolean</code>.   The <code>optionId</code>
+    * parameter is one of the defined constants in this interface.
+    *
+    * @param optionId The identifier of the option
+    * @param val The value to set the option to
+    *
+    * @exception SocketException If an error occurs
+    */
+   void setOption(int optionId, Object val) throws SocketException;
+ 
+   /**
+    * Returns the current setting of the specified option.  The
+    * <code>Object</code> returned will be an <code>Integer</code> for options
+    * that have integer values.  For options that are set to on or off, a
+    * <code>Boolean</code> will be returned.   The <code>optionId</code>
+    * parameter is one of the defined constants in this interface.
+    *
+    * @param optionId The option identifier
+    *
+    * @return The current value of the option
+    *
+    * @exception SocketException If an error occurs
+    */
+   Object getOption(int optionId) throws SocketException;
+ } // interface SocketOptions
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/SocketPermission.java gcc-4.1.0/libjava/classpath/java/net/SocketPermission.java
*** gcc-4.0.2/libjava/classpath/java/net/SocketPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/SocketPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,408 ----
+ /* SocketPermission.java -- Class modeling permissions for socket operations
+    Copyright (C) 1998, 2000, 2001, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.Serializable;
+ import java.security.Permission;
+ import java.security.PermissionCollection;
+ 
+ 
+ /**
+  * This class models a specific set of permssions for connecting to a
+  * host.  There are two elements to this, the host/port combination and
+  * the permission list.
+  * <p>
+  * The host/port combination is specified as followed
+  * <p>
+  * <pre>
+  * hostname[:[-]port[-[port]]]
+  * </pre>
+  * <p>
+  * The hostname portion can be either a hostname or IP address.  If it is
+  * a hostname, a wildcard is allowed in hostnames.  This wildcard is a "*"
+  * and matches one or more characters.  Only one "*" may appear in the
+  * host and it must be the leftmost character.  For example,
+  * "*.urbanophile.com" matches all hosts in the "urbanophile.com" domain.
+  * <p>
+  * The port portion can be either a single value, or a range of values
+  * treated as inclusive.  The first or the last port value in the range
+  * can be omitted in which case either the minimum or maximum legal
+  * value for a port (respectively) is used by default.  Here are some
+  * examples:
+  * <p><ul>
+  * <li>8080 - Represents port 8080 only</li>
+  * <li>2000-3000 - Represents ports 2000 through 3000 inclusive</li>
+  * <li>-4000 - Represents ports 0 through 4000 inclusive</li>
+  * <li>1024- - Represents ports 1024 through 65535 inclusive</li>
+  * </ul><p>
+  * The permission list is a comma separated list of individual permissions.
+  * These individual permissions are:
+  * <p>
+  * <pre>
+  * accept
+  * connect
+  * listen
+  * resolve
+  * </pre>
+  * <p>
+  * The "listen" permission is only relevant if the host is localhost.  If
+  * any permission at all is specified, then resolve permission is implied to
+  * exist.
+  * <p>
+  * Here are a variety of examples of how to create SocketPermission's
+  * <p><pre>
+  * SocketPermission("www.urbanophile.com", "connect");
+  *   Can connect to any port on www.urbanophile.com
+  * SocketPermission("www.urbanophile.com:80", "connect,accept");
+  *   Can connect to or accept connections from www.urbanophile.com on port 80
+  * SocketPermission("localhost:1024-", "listen,accept,connect");
+  *   Can connect to, accept from, an listen on any local port number 1024
+  *   and up.
+  * SocketPermission("*.edu", "connect");
+  *   Can connect to any host in the edu domain
+  * SocketPermission("197.197.20.1", "accept");
+  *   Can accept connections from 197.197.20.1
+  * </pre><p>
+  *
+  * This class also supports IPv6 addresses.  These should be specified
+  * in either RFC 2732 format or in full uncompressed form.
+  *
+  * @since 1.2
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public final class SocketPermission extends Permission implements Serializable
+ {
+   static final long serialVersionUID = -7204263841984476862L;
+ 
+ // FIXME: Needs serialization work, including readObject/writeObject methods.
+ 
+   /**
+    * A hostname/port combination as described above
+    */
+   private transient String hostport;
+ 
+   /**
+    * A comma separated list of actions for which we have permission
+    */
+   private String actions;
+ 
+   /**
+    * Initializes a new instance of <code>SocketPermission</code> with the
+    * specified host/port combination and actions string.
+    *
+    * @param hostport The hostname/port number combination
+    * @param actions The actions string
+    */
+   public SocketPermission(String hostport, String actions)
+   {
+     super(hostport);
+ 
+     this.hostport = hostport;
+     this.actions = actions;
+   }
+ 
+   /**
+    * Tests this object for equality against another.  This will be true if
+    * and only if the passed object is an instance of
+    * <code>SocketPermission</code> and both its hostname/port combination
+    * and permissions string are identical.
+    *
+    * @param obj The object to test against for equality
+    *
+    * @return <code>true</code> if object is equal to this object,
+    *         <code>false</code> otherwise.
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof SocketPermission))
+       return false;
+ 
+     if (((SocketPermission) obj).hostport.equals(hostport))
+       if (((SocketPermission) obj).actions.equals(actions))
+ 	return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Returns a hash code value for this object.  Overrides the
+    * <code>Permission.hashCode()</code>.
+    *
+    * @return A hash code
+    */
+   public int hashCode()
+   {
+     int hash = 100;
+     if (hostport != null)
+       hash += hostport.hashCode();
+     if (actions != null)
+       hash += actions.hashCode();
+     return hash;
+   }
+ 
+   /**
+    * Returns the list of permission actions in this object in canonical
+    * order.  The canonical order is "connect,listen,accept,resolve"
+    *
+    * @return The permitted action string.
+    */
+   public String getActions()
+   {
+     boolean found = false;
+     StringBuffer sb = new StringBuffer("");
+ 
+     if (actions.indexOf("connect") != -1)
+       {
+ 	sb.append("connect");
+ 	found = true;
+       }
+ 
+     if (actions.indexOf("listen") != -1)
+       if (found)
+ 	sb.append(",listen");
+       else
+         {
+ 	  sb.append("listen");
+ 	  found = true;
+         }
+ 
+     if (actions.indexOf("accept") != -1)
+       if (found)
+ 	sb.append(",accept");
+       else
+         {
+ 	  sb.append("accept");
+ 	  found = true;
+         }
+ 
+     if (found)
+       sb.append(",resolve");
+     else if (actions.indexOf("resolve") != -1)
+       sb.append("resolve");
+ 
+     return sb.toString();
+   }
+ 
+   /**
+    * Returns a new <code>PermissionCollection</code> object that can hold
+    * <code>SocketPermission</code>'s.
+    *
+    * @return A new <code>PermissionCollection</code>.
+    */
+   public PermissionCollection newPermissionCollection()
+   {
+     // FIXME: Implement
+ 
+     return null;
+   }
+ 
+   /**
+    * Returns true if the permission object passed it is implied by the
+    * this permission.  This will be true if:
+    * 
+    * <ul>
+    * <li>The argument is of type <code>SocketPermission</code></li>
+    * <li>The actions list of the argument are in this object's actions</li>
+    * <li>The port range of the argument is within this objects port range</li>
+    * <li>The hostname is equal to or a subset of this objects hostname</li>
+    * </ul>
+    *
+    * <p>The argument's hostname will be a subset of this object's hostname if:</p>
+    * 
+    * <ul>
+    * <li>The argument's hostname or IP address is equal to this object's.</li>
+    * <li>The argument's canonical hostname is equal to this object's.</li>
+    * <li>The argument's canonical name matches this domains hostname with
+    * wildcards</li>
+    * </ul>
+    *
+    * @param perm The <code>Permission</code> to check against
+    *
+    * @return <code>true</code> if the <code>Permission</code> is implied by
+    * this object, <code>false</code> otherwise.
+    */
+   public boolean implies(Permission perm)
+   {
+     SocketPermission p;
+ 
+     // First make sure we are the right object type
+     if (perm instanceof SocketPermission)
+       p = (SocketPermission) perm;
+     else
+       return false;
+ 
+     // Next check the actions
+     String ourlist = getActions();
+     String theirlist = p.getActions();
+ 
+     if (! ourlist.startsWith(theirlist))
+       return false;
+ 
+     // Now check ports
+     int ourfirstport = 0;
+ 
+     // Now check ports
+     int ourlastport = 0;
+ 
+     // Now check ports
+     int theirfirstport = 0;
+ 
+     // Now check ports
+     int theirlastport = 0;
+ 
+     // Get ours
+     if (hostport.indexOf(":") == -1)
+       {
+ 	ourfirstport = 0;
+ 	ourlastport = 65535;
+       }
+     else
+       {
+ 	// FIXME:  Needs bulletproofing.
+ 	// This will dump if hostport if all sorts of bad data was passed to
+ 	// the constructor
+ 	String range = hostport.substring(hostport.indexOf(":") + 1);
+ 	if (range.startsWith("-"))
+ 	  ourfirstport = 0;
+ 	else if (range.indexOf("-") == -1)
+ 	  ourfirstport = Integer.parseInt(range);
+ 	else
+ 	  ourfirstport =
+ 	    Integer.parseInt(range.substring(0, range.indexOf("-")));
+ 
+ 	if (range.endsWith("-"))
+ 	  ourlastport = 65535;
+ 	else if (range.indexOf("-") == -1)
+ 	  ourlastport = Integer.parseInt(range);
+ 	else
+ 	  ourlastport =
+ 	    Integer.parseInt(range.substring(range.indexOf("-") + 1,
+ 	                                     range.length()));
+       }
+ 
+     // Get theirs
+     if (p.hostport.indexOf(":") == -1)
+       {
+ 	theirfirstport = 0;
+ 	ourlastport = 65535;
+       }
+     else
+       {
+ 	// This will dump if hostport if all sorts of bad data was passed to
+ 	// the constructor
+ 	String range = p.hostport.substring(hostport.indexOf(":") + 1);
+ 	if (range.startsWith("-"))
+ 	  theirfirstport = 0;
+ 	else if (range.indexOf("-") == -1)
+ 	  theirfirstport = Integer.parseInt(range);
+ 	else
+ 	  theirfirstport =
+ 	    Integer.parseInt(range.substring(0, range.indexOf("-")));
+ 
+ 	if (range.endsWith("-"))
+ 	  theirlastport = 65535;
+ 	else if (range.indexOf("-") == -1)
+ 	  theirlastport = Integer.parseInt(range);
+ 	else
+ 	  theirlastport =
+ 	    Integer.parseInt(range.substring(range.indexOf("-") + 1,
+ 	                                     range.length()));
+       }
+ 
+     // Now check them
+     if ((theirfirstport < ourfirstport) || (theirlastport > ourlastport))
+       return false;
+ 
+     // Finally we can check the hosts
+     String ourhost;
+ 
+     // Finally we can check the hosts
+     String theirhost;
+ 
+     // Get ours
+     if (hostport.indexOf(":") == -1)
+       ourhost = hostport;
+     else
+       ourhost = hostport.substring(0, hostport.indexOf(":"));
+ 
+     // Get theirs
+     if (p.hostport.indexOf(":") == -1)
+       theirhost = p.hostport;
+     else
+       theirhost = p.hostport.substring(0, p.hostport.indexOf(":"));
+ 
+     // Are they equal?
+     if (ourhost.equals(theirhost))
+       return true;
+ 
+     // Try the canonical names
+     String ourcanonical = null;
+ 
+     // Try the canonical names
+     String theircanonical = null;
+     try
+       {
+ 	ourcanonical = InetAddress.getByName(ourhost).getHostName();
+ 	theircanonical = InetAddress.getByName(theirhost).getHostName();
+       }
+     catch (UnknownHostException e)
+       {
+ 	// Who didn't resolve?  Just assume current address is canonical enough
+ 	// Is this ok to do?
+ 	if (ourcanonical == null)
+ 	  ourcanonical = ourhost;
+ 	if (theircanonical == null)
+ 	  theircanonical = theirhost;
+       }
+ 
+     if (ourcanonical.equals(theircanonical))
+       return true;
+ 
+     // Well, last chance.  Try for a wildcard
+     if (ourhost.indexOf("*.") != -1)
+       {
+ 	String wild_domain = ourhost.substring(ourhost.indexOf("*" + 1));
+ 	if (theircanonical.endsWith(wild_domain))
+ 	  return true;
+       }
+ 
+     // Didn't make it
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/SocketTimeoutException.java gcc-4.1.0/libjava/classpath/java/net/SocketTimeoutException.java
*** gcc-4.0.2/libjava/classpath/java/net/SocketTimeoutException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/SocketTimeoutException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* SocketTimeoutException.java -- the socket timed out
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.InterruptedIOException;
+ 
+ 
+ /**
+  * This exception signals that a socket read or accept timed out.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class SocketTimeoutException extends InterruptedIOException
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = -8846654841826352300L;
+ 
+   /**
+    * Create a new instance without a descriptive error message.
+    */
+   public SocketTimeoutException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message a message describing the error that occurred
+    */
+   public SocketTimeoutException(String message)
+   {
+     super(message);
+   }
+ } // class SocketTimeoutException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/TODO gcc-4.1.0/libjava/classpath/java/net/TODO
*** gcc-4.0.2/libjava/classpath/java/net/TODO	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/TODO	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,24 ----
+ -- DNS cache purging.
+ 
+ -- Implement ContentHandler chaining (non-JDK feature)
+ 
+ -- Implement MIME type by file determination chaining using external
+    disk files. (non-JDK feature)
+ 
+ -- Implement determining MIME type from an InputStream
+ 
+ -- Datagram peek()'s
+ 
+ -- Finalize methods for sockets
+ 
+ -- HTTP - caching (supported by JDK?)
+ 
+ -- HTTP - all protocol support beyond basic GET functionality
+ 
+ -- Fix call to Date(String) in URLConnection.getHeaderFieldDate() when
+    I figure out why DateFormat isn't working.
+ 
+ -- Finish off all JDK 1.2 permissions stuff
+ 
+ -- Write URLClassLoader
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/URI.java gcc-4.1.0/libjava/classpath/java/net/URI.java
*** gcc-4.0.2/libjava/classpath/java/net/URI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/URI.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,1445 ----
+ /* URI.java -- An URI class
+    Copyright (C) 2002, 2004, 2005, 2006  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.util.regex.Matcher;
+ import java.util.regex.Pattern;
+ 
+ /**
+  * <p>
+  * A URI instance represents that defined by 
+  * <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC3986</a>,
+  * with some deviations.
+  * </p>
+  * <p>
+  * At its highest level, a URI consists of:
+  * </p>
+  * <code>[<em>scheme</em><strong>:</strong>]<em>scheme-specific-part</em>
+  * [<strong>#</strong><em>fragment</em>]</code>
+  * </p>
+  * <p>
+  * where <strong>#</strong> and <strong>:</strong> are literal characters,
+  * and those parts enclosed in square brackets are optional.
+  * </p>
+  * <p>
+  * There are two main types of URI.  An <em>opaque</em> URI is one
+  * which just consists of the above three parts, and is not further
+  * defined.  An example of such a URI would be <em>mailto:</em> URI.
+  * In contrast, <em>hierarchical</em> URIs give further definition
+  * to the scheme-specific part, so as represent some part of a hierarchical
+  * structure.
+  * </p>
+  * <p>
+  * <code>[<strong>//</strong><em>authority</em>][<em>path</em>]
+  * [<strong>?</strong><em>query</em>]</code>
+  * </p>
+  * <p>
+  * with <strong>/</strong> and <strong>?</strong> being literal characters.
+  * When server-based, the authority section is further subdivided into:
+  * </p>
+  * <p>
+  * <code>[<em>user-info</em><strong>@</strong>]<em>host</em>
+  * [<strong>:</strong><em>port</em>]</code>
+  * </p>
+  * <p>
+  * with <strong>@</strong> and <strong>:</strong> as literal characters.
+  * Authority sections that are not server-based are said to be registry-based.
+  * </p>
+  * <p>
+  * Hierarchical URIs can be either relative or absolute.  Absolute URIs
+  * always start with a `<strong>/</strong>', while relative URIs don't
+  * specify a scheme.  Opaque URIs are always absolute.
+  * </p>
+  * <p>
+  * Each part of the URI may have one of three states: undefined, empty
+  * or containing some content.  The former two of these are represented
+  * by <code>null</code> and the empty string in Java, respectively.
+  * The scheme-specific part may never be undefined.  It also follows from
+  * this that the path sub-part may also not be undefined, so as to ensure
+  * the former.
+  * </p>
+  * <h2>Character Escaping and Quoting</h2>
+  * <p>
+  * The characters that can be used within a valid URI are restricted.
+  * There are two main classes of characters which can't be used as is
+  * within the URI:
+  * </p>
+  * <ol>
+  * <li><strong>Characters outside the US-ASCII character set</strong>.
+  * These have to be <strong>escaped</strong> in order to create
+  * an RFC-compliant URI; this means replacing the character with the
+  * appropriate hexadecimal value, preceded by a `%'.</li>
+  * <li><strong>Illegal characters</strong> (e.g. space characters,
+  * control characters) are quoted, which results in them being encoded
+  * in the same way as non-US-ASCII characters.</li>
+  * </ol>
+  * <p>
+  * The set of valid characters differs depending on the section of the URI:
+  * </p>
+  * <ul>
+  * <li><strong>Scheme</strong>: Must be an alphanumeric, `-', `.' or '+'.</li>
+  * <li><strong>Authority</strong>:Composed of the username, host, port, `@'
+  * and `:'.</li>
+  * <li><strong>Username</strong>: Allows unreserved or percent-encoded
+  * characters, sub-delimiters and `:'.</li>
+  * <li><strong>Host</strong>: Allows unreserved or percent-encoded
+  * characters, sub-delimiters and square brackets (`[' and `]') for IPv6
+  * addresses.</li>
+  * <li><strong>Port</strong>: Digits only.</li>
+  * <li><strong>Path</strong>: Allows the path characters and `/'.
+  * <li><strong>Query</strong>: Allows the path characters, `?' and '/'.
+  * <li><strong>Fragment</strong>: Allows the path characters, `?' and '/'.
+  * </ul>
+  * <p>
+  * These definitions reference the following sets of characters:
+  * </p>
+  * <ul>
+  * <li><strong>Unreserved characters</strong>: The alphanumerics plus
+  * `-', `.', `_', and `~'.</li>
+  * <li><strong>Sub-delimiters</strong>: `!', `$', `&', `(', `)', `*',
+  * `+', `,', `;', `=' and the single-quote itself.</li>
+  * <li><strong>Path characters</strong>: Unreserved and percent-encoded
+  * characters and the sub-delimiters along with `@' and `:'.</li>
+  * </ul>
+  * <p>
+  * The constructors and accessor methods allow the use and retrieval of
+  * URI components which contain non-US-ASCII characters directly.
+  * They are only escaped when the <code>toASCIIString()</code> method
+  * is used.  In contrast, illegal characters are always quoted, with the
+  * exception of the return values of the non-raw accessors.
+  * </p>
+  *
+  * @author Ito Kazumitsu (ito.kazumitsu@hitachi-cable.co.jp)
+  * @author Dalibor Topic (robilad@kaffe.org)
+  * @author Michael Koch (konqueror@gmx.de)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.4
+  */
+ public final class URI 
+   implements Comparable, Serializable
+ {
+   /**
+    * For serialization compatability.
+    */
+   static final long serialVersionUID = -6052424284110960213L;
+ 
+   /**
+    * Regular expression for parsing URIs.
+    *
+    * Taken from RFC 2396, Appendix B.
+    * This expression doesn't parse IPv6 addresses.
+    */
+   private static final String URI_REGEXP =
+     "^(([^:/?#]+):)?((//([^/?#]*))?([^?#]*)(\\?([^#]*))?)?(#(.*))?";
+ 
+   /**
+    * Regular expression for parsing the authority segment.
+    */
+   private static final String AUTHORITY_REGEXP =
+     "(([^?#]*)@)?([^?#:]*)(:([0-9]*))?";
+ 
+   /**
+    * Valid characters (taken from rfc2396/3986)
+    */
+   private static final String RFC2396_DIGIT = "0123456789";
+   private static final String RFC2396_LOWALPHA = "abcdefghijklmnopqrstuvwxyz";
+   private static final String RFC2396_UPALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+   private static final String RFC2396_ALPHA =
+     RFC2396_LOWALPHA + RFC2396_UPALPHA;
+   private static final String RFC2396_ALPHANUM = RFC2396_DIGIT + RFC2396_ALPHA;
+   private static final String RFC3986_UNRESERVED = RFC2396_ALPHANUM + "-._~";
+   private static final String RFC3986_SUBDELIMS = "!$&'()*+,;=";
+   private static final String RFC3986_REG_NAME =
+     RFC3986_UNRESERVED + RFC3986_SUBDELIMS + "%";
+   private static final String RFC3986_PCHAR = RFC3986_UNRESERVED + 
+     RFC3986_SUBDELIMS + ":@%";
+   private static final String RFC3986_SEGMENT = RFC3986_PCHAR;
+   private static final String RFC3986_PATH_SEGMENTS = RFC3986_SEGMENT + "/";
+   private static final String RFC3986_SSP = RFC3986_PCHAR + "?/";
+   private static final String RFC3986_HOST = RFC3986_REG_NAME + "[]";
+   private static final String RFC3986_USERINFO = RFC3986_REG_NAME + ":";
+ 
+   /**
+    * Index of scheme component in parsed URI.
+    */
+   private static final int SCHEME_GROUP = 2;
+ 
+   /**
+    * Index of scheme-specific-part in parsed URI.
+    */
+   private static final int SCHEME_SPEC_PART_GROUP = 3;
+ 
+   /**
+    * Index of authority component in parsed URI.
+    */
+   private static final int AUTHORITY_GROUP = 5;
+ 
+   /**
+    * Index of path component in parsed URI.
+    */
+   private static final int PATH_GROUP = 6;
+ 
+   /**
+    * Index of query component in parsed URI.
+    */
+   private static final int QUERY_GROUP = 8;
+ 
+   /**
+    * Index of fragment component in parsed URI.
+    */
+   private static final int FRAGMENT_GROUP = 10;
+   
+   /**
+    * Index of userinfo component in parsed authority section.
+    */
+   private static final int AUTHORITY_USERINFO_GROUP = 2;
+ 
+   /**
+    * Index of host component in parsed authority section.
+    */
+   private static final int AUTHORITY_HOST_GROUP = 3;
+ 
+   /**
+    * Index of port component in parsed authority section.
+    */
+   private static final int AUTHORITY_PORT_GROUP = 5;
+ 
+   /**
+    * The compiled version of the URI regular expression.
+    */
+   private static final Pattern URI_PATTERN;
+ 
+   /**
+    * The compiled version of the authority regular expression.
+    */
+   private static final Pattern AUTHORITY_PATTERN;
+ 
+   /**
+    * The set of valid hexadecimal characters.
+    */
+   private static final String HEX = "0123456789ABCDEF";
+ 
+   private transient String scheme;
+   private transient String rawSchemeSpecificPart;
+   private transient String schemeSpecificPart;
+   private transient String rawAuthority;
+   private transient String authority;
+   private transient String rawUserInfo;
+   private transient String userInfo;
+   private transient String rawHost;
+   private transient String host;
+   private transient int port = -1;
+   private transient String rawPath;
+   private transient String path;
+   private transient String rawQuery;
+   private transient String query;
+   private transient String rawFragment;
+   private transient String fragment;
+   private String string;
+ 
+   /**
+    * Static initializer to pre-compile the regular expressions.
+    */
+   static
+   {
+     URI_PATTERN = Pattern.compile(URI_REGEXP);
+     AUTHORITY_PATTERN = Pattern.compile(AUTHORITY_REGEXP);
+   }
+ 
+   private void readObject(ObjectInputStream is)
+     throws ClassNotFoundException, IOException
+   {
+     this.string = (String) is.readObject();
+     try
+       {
+ 	parseURI(this.string);
+       }
+     catch (URISyntaxException x)
+       {
+ 	// Should not happen.
+ 	throw new RuntimeException(x);
+       }
+   }
+ 
+   private void writeObject(ObjectOutputStream os) throws IOException
+   {
+     if (string == null)
+       string = toString(); 
+     os.writeObject(string);
+   }
+ 
+   /**
+    * <p>
+    * Returns the string content of the specified group of the supplied
+    * matcher.  The returned value is modified according to the following:
+    * </p>
+    * <ul>
+    * <li>If the resulting string has a length greater than 0, then
+    * that string is returned.</li>
+    * <li>If a string of zero length, is matched, then the content
+    * of the preceding group is considered.  If this is also an empty
+    * string, then <code>null</code> is returned to indicate an undefined
+    * value.  Otherwise, the value is truly the empty string and this is
+    * the returned value.</li>
+    * </ul>
+    * <p>
+    * This method is used for matching against all parts of the URI
+    * that may be either undefined or empty (i.e. all those but the
+    * scheme-specific part and the path).  In each case, the preceding
+    * group is the content of the original group, along with some
+    * additional distinguishing feature.  For example, the preceding
+    * group for the query includes the preceding question mark,
+    * while that of the fragment includes the hash symbol.  The presence
+    * of these features enables disambiguation between the two cases
+    * of a completely unspecified value and a simple non-existant value.
+    * The scheme differs in that it will never return an empty string;
+    * the delimiter follows the scheme rather than preceding it, so
+    * it becomes part of the following section.  The same is true
+    * of the user information.
+    * </p>
+    *
+    * @param match the matcher, which contains the results of the URI
+    *              matched against the URI regular expression.
+    * @return either the matched content, <code>null</code> for undefined
+    *         values, or an empty string for a URI part with empty content.
+    */
+   private static String getURIGroup(Matcher match, int group)
+   {
+     String matched = match.group(group);
+     if (matched == null || matched.length() == 0)
+       {
+ 	String prevMatched = match.group(group -1);
+ 	if (prevMatched == null || prevMatched.length() == 0)
+ 	  return null;
+ 	else
+ 	  return "";
+       }
+     return matched;
+   }
+ 
+   /**
+    * Sets fields of this URI by parsing the given string.
+    *
+    * @param str The string to parse
+    *
+    * @exception URISyntaxException If the given string violates RFC 2396
+    */
+   private void parseURI(String str) throws URISyntaxException
+   {
+     Matcher matcher = URI_PATTERN.matcher(str);
+     
+     if (matcher.matches())
+       {
+ 	scheme = getURIGroup(matcher, SCHEME_GROUP);
+ 	rawSchemeSpecificPart = matcher.group(SCHEME_SPEC_PART_GROUP);
+ 	schemeSpecificPart = unquote(rawSchemeSpecificPart);
+ 	if (!isOpaque())
+ 	  {
+ 	    rawAuthority = getURIGroup(matcher, AUTHORITY_GROUP);
+ 	    rawPath = matcher.group(PATH_GROUP);
+ 	    rawQuery = getURIGroup(matcher, QUERY_GROUP);
+ 	  }
+ 	rawFragment = getURIGroup(matcher, FRAGMENT_GROUP);
+       }
+     else
+       throw new URISyntaxException(str,
+ 				   "doesn't match URI regular expression");
+     parseServerAuthority();
+ 
+     // We must eagerly unquote the parts, because this is the only time
+     // we may throw an exception.
+     authority = unquote(rawAuthority);
+     userInfo = unquote(rawUserInfo);
+     host = unquote(rawHost);
+     path = unquote(rawPath);
+     query = unquote(rawQuery);
+     fragment = unquote(rawFragment);
+   }
+ 
+   /**
+    * Unquote "%" + hex quotes characters
+    *
+    * @param str The string to unquote or null.
+    *
+    * @return The unquoted string or null if str was null.
+    *
+    * @exception URISyntaxException If the given string contains invalid
+    * escape sequences.
+    */
+   private static String unquote(String str) throws URISyntaxException
+   {
+     if (str == null)
+       return null;
+     byte[] buf = new byte[str.length()];
+     int pos = 0;
+     for (int i = 0; i < str.length(); i++)
+       {
+ 	char c = str.charAt(i);
+ 	if (c == '%')
+ 	  {
+ 	    if (i + 2 >= str.length())
+ 	      throw new URISyntaxException(str, "Invalid quoted character");
+ 	    int hi = Character.digit(str.charAt(++i), 16);
+ 	    int lo = Character.digit(str.charAt(++i), 16);
+ 	    if (lo < 0 || hi < 0)
+ 	      throw new URISyntaxException(str, "Invalid quoted character");
+ 	    buf[pos++] = (byte) (hi * 16 + lo);
+ 	  }
+ 	else
+ 	  buf[pos++] = (byte) c;
+       }
+     try
+       {
+ 	return new String(buf, 0, pos, "utf-8");
+       }
+     catch (java.io.UnsupportedEncodingException x2)
+       {
+ 	throw (Error) new InternalError().initCause(x2);
+       }
+   }
+ 
+   /**
+    * Quote characters illegal in URIs in given string.
+    *
+    * Replace illegal characters by encoding their UTF-8
+    * representation as "%" + hex code for each resulting
+    * UTF-8 character.
+    *
+    * @param str The string to quote
+    *
+    * @return The quoted string.
+    */
+   private static String quote(String str)
+   {
+     return quote(str, RFC3986_SSP);
+   }
+ 
+   /**
+    * Quote characters illegal in URI authorities in given string.
+    *
+    * Replace illegal characters by encoding their UTF-8
+    * representation as "%" + hex code for each resulting
+    * UTF-8 character.
+    *
+    * @param str The string to quote
+    *
+    * @return The quoted string.
+    */
+   private static String quoteAuthority(String str)
+   {
+     // Technically, we should be using RFC2396_AUTHORITY, but
+     // it contains no additional characters.
+     return quote(str, RFC3986_REG_NAME);
+   }
+ 
+   /**
+    * Quotes the characters in the supplied string that are not part of
+    * the specified set of legal characters.
+    *
+    * @param str the string to quote
+    * @param legalCharacters the set of legal characters
+    *
+    * @return the quoted string.
+    */
+   private static String quote(String str, String legalCharacters)
+   {
+     StringBuffer sb = new StringBuffer(str.length());
+     for (int i = 0; i < str.length(); i++)
+       {
+ 	char c = str.charAt(i);
+ 	if (legalCharacters.indexOf(c) == -1)
+ 	  {
+ 	    if (c <= 127)
+ 	      {
+ 		sb.append('%');
+ 		sb.append(HEX.charAt(c / 16));
+ 		sb.append(HEX.charAt(c % 16));
+ 	      }
+ 	  }
+ 	else
+ 	  sb.append(c);
+       }
+     return sb.toString();
+   }
+ 
+   /**
+    * Quote characters illegal in URI hosts in given string.
+    *
+    * Replace illegal characters by encoding their UTF-8
+    * representation as "%" + hex code for each resulting
+    * UTF-8 character.
+    *
+    * @param str The string to quote
+    *
+    * @return The quoted string.
+    */
+   private static String quoteHost(String str)
+   {
+     return quote(str, RFC3986_HOST);
+   }
+ 
+   /**
+    * Quote characters illegal in URI paths in given string.
+    *
+    * Replace illegal characters by encoding their UTF-8
+    * representation as "%" + hex code for each resulting
+    * UTF-8 character.
+    *
+    * @param str The string to quote
+    *
+    * @return The quoted string.
+    */
+   private static String quotePath(String str)
+   {
+     // Technically, we should be using RFC2396_PATH, but
+     // it contains no additional characters.
+     return quote(str, RFC3986_PATH_SEGMENTS);
+   }
+ 
+   /**
+    * Quote characters illegal in URI user infos in given string.
+    *
+    * Replace illegal characters by encoding their UTF-8
+    * representation as "%" + hex code for each resulting
+    * UTF-8 character.
+    *
+    * @param str The string to quote
+    *
+    * @return The quoted string.
+    */
+   private static String quoteUserInfo(String str)
+   {
+     return quote(str, RFC3986_USERINFO);
+   }
+ 
+   /**
+    * Creates an URI from the given string
+    *
+    * @param str The string to create the URI from
+    *
+    * @exception URISyntaxException If the given string violates RFC 2396
+    * @exception NullPointerException If str is null
+    */
+   public URI(String str) throws URISyntaxException
+   {
+     this.string = str;
+     parseURI(str);
+   }
+ 
+   /**
+    * Create an URI from the given components
+    *
+    * @param scheme The scheme name
+    * @param userInfo The username and authorization info
+    * @param host The hostname
+    * @param port The port number
+    * @param path The path
+    * @param query The query
+    * @param fragment The fragment
+    *
+    * @exception URISyntaxException If the given string violates RFC 2396
+    */
+   public URI(String scheme, String userInfo, String host, int port,
+              String path, String query, String fragment)
+     throws URISyntaxException
+   {
+     this((scheme == null ? "" : scheme + ":")
+          + (userInfo == null && host == null && port == -1 ? "" : "//")
+          + (userInfo == null ? "" : quoteUserInfo(userInfo) + "@")
+          + (host == null ? "" : quoteHost(host))
+          + (port == -1 ? "" : ":" + String.valueOf(port))
+          + (path == null ? "" : quotePath(path))
+          + (query == null ? "" : "?" + quote(query))
+          + (fragment == null ? "" : "#" + quote(fragment)));
+   }
+ 
+   /**
+    * Create an URI from the given components
+    *
+    * @param scheme The scheme name
+    * @param authority The authority
+    * @param path The apth
+    * @param query The query
+    * @param fragment The fragment
+    *
+    * @exception URISyntaxException If the given string violates RFC 2396
+    */
+   public URI(String scheme, String authority, String path, String query,
+              String fragment) throws URISyntaxException
+   {
+     this((scheme == null ? "" : scheme + ":")
+          + (authority == null ? "" : "//" + quoteAuthority(authority))
+          + (path == null ? "" : quotePath(path))
+          + (query == null ? "" : "?" + quote(query))
+          + (fragment == null ? "" : "#" + quote(fragment)));
+   }
+ 
+   /**
+    * Create an URI from the given components
+    *
+    * @param scheme The scheme name
+    * @param host The hostname
+    * @param path The path
+    * @param fragment The fragment
+    *
+    * @exception URISyntaxException If the given string violates RFC 2396
+    */
+   public URI(String scheme, String host, String path, String fragment)
+     throws URISyntaxException
+   {
+     this(scheme, null, host, -1, path, null, fragment);
+   }
+ 
+   /**
+    * Create an URI from the given components
+    *
+    * @param scheme The scheme name
+    * @param ssp The scheme specific part
+    * @param fragment The fragment
+    *
+    * @exception URISyntaxException If the given string violates RFC 2396
+    */
+   public URI(String scheme, String ssp, String fragment)
+     throws URISyntaxException
+   {
+     this((scheme == null ? "" : scheme + ":")
+          + (ssp == null ? "" : quote(ssp))
+          + (fragment == null ? "" : "#" + quote(fragment)));
+   }
+ 
+   /**
+    * Create an URI from the given string
+    *
+    * @param str The string to create the URI from
+    *
+    * @exception IllegalArgumentException If the given string violates RFC 2396
+    * @exception NullPointerException If str is null
+    */
+   public static URI create(String str)
+   {
+     try
+       {
+ 	return new URI(str);
+       }
+     catch (URISyntaxException e)
+       {
+ 	throw (IllegalArgumentException) new IllegalArgumentException()
+ 	      .initCause(e);
+       }
+   }
+ 
+   /**
+    * Attempts to parse this URI's authority component, if defined,
+    * into user-information, host, and port components.  The purpose
+    * of this method was to disambiguate between some authority sections,
+    * which form invalid server-based authories, but valid registry
+    * based authorities.  In the updated RFC 3986, the authority section
+    * is defined differently, with registry-based authorities part of
+    * the host section.  Thus, this method is now simply an explicit
+    * way of parsing any authority section.
+    *
+    * @return the URI, with the authority section parsed into user
+    *         information, host and port components.
+    * @throws URISyntaxException if the given string violates RFC 2396
+    */
+   public URI parseServerAuthority() throws URISyntaxException
+   {
+     if (rawAuthority != null)
+       {
+ 	Matcher matcher = AUTHORITY_PATTERN.matcher(rawAuthority);
+ 
+ 	if (matcher.matches())
+ 	  {
+ 	    rawUserInfo = getURIGroup(matcher, AUTHORITY_USERINFO_GROUP);
+ 	    rawHost = getURIGroup(matcher, AUTHORITY_HOST_GROUP);
+ 	    
+ 	    String portStr = getURIGroup(matcher, AUTHORITY_PORT_GROUP);
+ 	    
+ 	    if (portStr != null)
+ 	      try
+ 		{
+ 		  port = Integer.parseInt(portStr);
+ 		}
+ 	      catch (NumberFormatException e)
+ 		{
+ 		  URISyntaxException use =
+ 		    new URISyntaxException
+ 		      (string, "doesn't match URI regular expression");
+ 		  use.initCause(e);
+ 		  throw use;
+ 		}
+ 	  }
+ 	else
+ 	  throw new URISyntaxException(string,
+ 				       "doesn't match URI regular expression");
+       }
+     return this;
+   }
+ 
+   /**
+    * <p>
+    * Returns a normalized version of the URI.  If the URI is opaque,
+    * or its path is already in normal form, then this URI is simply
+    * returned.  Otherwise, the following transformation of the path
+    * element takes place:
+    * </p>
+    * <ol>
+    * <li>All `.' segments are removed.</li>
+    * <li>Each `..' segment which can be paired with a prior non-`..' segment
+    * is removed along with the preceding segment.</li>
+    * <li>A `.' segment is added to the front if the first segment contains
+    * a colon (`:').  This is a deviation from the RFC, which prevents
+    * confusion between the path and the scheme.</li>
+    * </ol>
+    * <p>
+    * The resulting URI will be free of `.' and `..' segments, barring those
+    * that were prepended or which couldn't be paired, respectively.
+    * </p>
+    *
+    * @return the normalized URI.
+    */
+   public URI normalize()
+   {
+     if (isOpaque() || path.indexOf("/./") == -1 && path.indexOf("/../") == -1)
+       return this;
+     try
+       {
+ 	return new URI(scheme, authority, normalizePath(path), query,
+ 		       fragment);
+       }
+     catch (URISyntaxException e)
+       {
+ 	throw (Error) new InternalError("Normalized URI variant could not "+
+ 					"be constructed").initCause(e);
+       }
+   }
+ 
+   /**
+    * <p>
+    * Normalize the given path.  The following transformation takes place:
+    * </p>
+    * <ol>
+    * <li>All `.' segments are removed.</li>
+    * <li>Each `..' segment which can be paired with a prior non-`..' segment
+    * is removed along with the preceding segment.</li>
+    * <li>A `.' segment is added to the front if the first segment contains
+    * a colon (`:').  This is a deviation from the RFC, which prevents
+    * confusion between the path and the scheme.</li>
+    * </ol>
+    * <p>
+    * The resulting URI will be free of `.' and `..' segments, barring those
+    * that were prepended or which couldn't be paired, respectively.
+    * </p>
+    * 
+    * @param relativePath the relative path to be normalized.
+    * @return the normalized path.
+    */
+   private String normalizePath(String relativePath)
+   {
+     /* 
+        This follows the algorithm in section 5.2.4. of RFC3986,
+        but doesn't modify the input buffer.
+     */
+     StringBuffer input = new StringBuffer(relativePath);
+     StringBuffer output = new StringBuffer();
+     int start = 0;
+     while (start < input.length())
+       {
+ 	/* A */
+ 	if (input.indexOf("../",start) == start)
+ 	  {
+ 	    start += 3;
+ 	    continue;
+ 	  }
+ 	if (input.indexOf("./",start) == start)
+ 	  {
+ 	    start += 2;
+ 	    continue;
+ 	  }
+ 	/* B */
+ 	if (input.indexOf("/./",start) == start)
+ 	  {
+ 	    start += 2;
+ 	    continue;
+ 	  }
+ 	if (input.indexOf("/.",start) == start
+ 	    && input.charAt(start + 2) != '.')
+ 	  {
+ 	    start += 1;
+ 	    input.setCharAt(start,'/');
+ 	    continue;
+ 	  }
+ 	/* C */
+ 	if (input.indexOf("/../",start) == start)
+ 	  {
+ 	    start += 3;
+ 	    removeLastSegment(output);
+ 	    continue;
+ 	  }
+ 	if (input.indexOf("/..",start) == start)
+ 	  {
+ 	    start += 2;
+ 	    input.setCharAt(start,'/');
+ 	    removeLastSegment(output);
+ 	    continue;
+ 	  }
+ 	/* D */
+ 	if (start == input.length() - 1 && input.indexOf(".",start) == start)
+ 	  {
+ 	    input.delete(0,1);
+ 	    continue;
+ 	  }
+ 	if (start == input.length() - 2 && input.indexOf("..",start) == start)
+ 	  {
+ 	    input.delete(0,2);
+ 	    continue;
+ 	  }
+ 	/* E */
+ 	int indexOfSlash = input.indexOf("/",start);
+ 	while (indexOfSlash == start)
+ 	  {
+ 	    output.append("/");
+ 	    ++start;
+ 	    indexOfSlash = input.indexOf("/",start);
+ 	  }
+ 	if (indexOfSlash == -1)
+ 	  indexOfSlash = input.length();
+ 	output.append(input.substring(start, indexOfSlash));
+         start = indexOfSlash;
+       }
+     return output.toString();
+   }
+ 
+   /**
+    * Removes the last segment of the path from the specified buffer.
+    *
+    * @param buffer the buffer containing the path.
+    */
+   private void removeLastSegment(StringBuffer buffer)
+   {
+     int lastSlash = buffer.lastIndexOf("/");
+     if (lastSlash == -1)
+       buffer.setLength(0);
+     else
+       buffer.setLength(lastSlash);
+   }
+ 
+   /**
+    * Resolves the given URI against this URI
+    *
+    * @param uri The URI to resolve against this URI
+    *
+    * @return The resulting URI, or null when it couldn't be resolved
+    * for some reason.
+    *
+    * @throws NullPointerException if uri is null
+    */
+   public URI resolve(URI uri)
+   {
+     if (uri.isAbsolute())
+       return uri;
+     if (uri.isOpaque())
+       return uri;
+ 
+     String scheme = uri.getScheme();
+     String schemeSpecificPart = uri.getSchemeSpecificPart();
+     String authority = uri.getAuthority();
+     String path = uri.getPath();
+     String query = uri.getQuery();
+     String fragment = uri.getFragment();
+ 
+     try
+       {
+ 	if (fragment != null && path != null && path.equals("")
+ 	    && scheme == null && authority == null && query == null)
+ 	  return new URI(this.scheme, this.schemeSpecificPart, fragment);
+ 
+ 	if (authority == null)
+ 	  {
+ 	    authority = this.authority;
+ 	    if (path == null)
+ 	      path = "";
+ 	    if (! (path.startsWith("/")))
+ 	      {
+ 		StringBuffer basepath = new StringBuffer(this.path);
+ 		int i = this.path.lastIndexOf('/');
+ 
+ 		if (i >= 0)
+ 		  basepath.delete(i + 1, basepath.length());
+ 
+ 		basepath.append(path);
+ 		path = normalizePath(basepath.toString());
+ 	      }
+ 	  }
+ 	return new URI(this.scheme, authority, path, query, fragment);
+       }
+     catch (URISyntaxException e)
+       {
+ 	throw (Error) new InternalError("Resolved URI variant could not "+
+ 					"be constructed").initCause(e);
+       }
+   }
+ 
+   /**
+    * Resolves the given URI string against this URI
+    *
+    * @param str The URI as string to resolve against this URI
+    *
+    * @return The resulting URI
+    *
+    * @throws IllegalArgumentException If the given URI string
+    * violates RFC 2396
+    * @throws NullPointerException If uri is null
+    */
+   public URI resolve(String str) throws IllegalArgumentException
+   {
+     return resolve(create(str));
+   }
+ 
+   /**
+    * <p>
+    * Relativizes the given URI against this URI.  The following
+    * algorithm is used:
+    * </p>
+    * <ul>
+    * <li>If either URI is opaque, the given URI is returned.</li>
+    * <li>If the schemes of the URIs differ, the given URI is returned.</li>
+    * <li>If the authority components of the URIs differ, then the given
+    * URI is returned.</li>
+    * <li>If the path of this URI is not a prefix of the supplied URI,
+    * then the given URI is returned.</li>
+    * <li>If all the above conditions hold, a new URI is created using the
+    * query and fragment components of the given URI, along with a path
+    * computed by removing the path of this URI from the start of the path
+    * of the supplied URI.</li>
+    * </ul>
+    *
+    * @param uri the URI to relativize agsint this URI
+    * @return the resulting URI
+    * @throws NullPointerException if the uri is null
+    */
+   public URI relativize(URI uri)
+   {
+     if (isOpaque() || uri.isOpaque())
+       return uri;
+     if (scheme == null && uri.getScheme() != null)
+       return uri;
+     if (scheme != null && !(scheme.equals(uri.getScheme())))
+       return uri;
+     if (rawAuthority == null && uri.getRawAuthority() != null)
+       return uri;
+     if (rawAuthority != null && !(rawAuthority.equals(uri.getRawAuthority())))
+       return uri;
+     if (!(uri.getRawPath().startsWith(rawPath)))
+       return uri;
+     try
+       {
+ 	return new URI(null, null, 
+ 		       uri.getRawPath().substring(rawPath.length()),
+ 		       uri.getRawQuery(), uri.getRawFragment());
+       }
+     catch (URISyntaxException e)
+       {
+ 	throw (Error) new InternalError("Relativized URI variant could not "+
+ 					"be constructed").initCause(e);       
+       }
+   }
+ 
+   /**
+    * Creates an URL from an URI
+    *
+    * @throws MalformedURLException If a protocol handler for the URL could
+    * not be found, or if some other error occurred while constructing the URL
+    * @throws IllegalArgumentException If the URI is not absolute
+    */
+   public URL toURL() throws IllegalArgumentException, MalformedURLException
+   {
+     if (isAbsolute())
+       return new URL(this.toString());
+ 
+     throw new IllegalArgumentException("not absolute");
+   }
+ 
+   /**
+    * Returns the scheme of the URI
+    */
+   public String getScheme()
+   {
+     return scheme;
+   }
+ 
+   /**
+    * Tells whether this URI is absolute or not
+    */
+   public boolean isAbsolute()
+   {
+     return scheme != null;
+   }
+ 
+   /**
+    * Tell whether this URI is opaque or not
+    */
+   public boolean isOpaque()
+   {
+     return ((scheme != null) && ! (schemeSpecificPart.startsWith("/")));
+   }
+ 
+   /**
+    * Returns the raw scheme specific part of this URI.
+    * The scheme-specific part is never undefined, though it may be empty
+    */
+   public String getRawSchemeSpecificPart()
+   {
+     return rawSchemeSpecificPart;
+   }
+ 
+   /**
+    * Returns the decoded scheme specific part of this URI.
+    */
+   public String getSchemeSpecificPart()
+   {
+     return schemeSpecificPart;
+   }
+ 
+   /**
+    * Returns the raw authority part of this URI
+    */
+   public String getRawAuthority()
+   {
+     return rawAuthority;
+   }
+ 
+   /**
+    * Returns the decoded authority part of this URI
+    */
+   public String getAuthority()
+   {
+     return authority;
+   }
+ 
+   /**
+    * Returns the raw user info part of this URI
+    */
+   public String getRawUserInfo()
+   {
+     return rawUserInfo;
+   }
+ 
+   /**
+    * Returns the decoded user info part of this URI
+    */
+   public String getUserInfo()
+   {
+     return userInfo;
+   }
+ 
+   /**
+    * Returns the hostname of the URI
+    */
+   public String getHost()
+   {
+     return host;
+   }
+ 
+   /**
+    * Returns the port number of the URI
+    */
+   public int getPort()
+   {
+     return port;
+   }
+ 
+   /**
+    * Returns the raw path part of this URI
+    */
+   public String getRawPath()
+   {
+     return rawPath;
+   }
+ 
+   /**
+    * Returns the path of the URI
+    */
+   public String getPath()
+   {
+     return path;
+   }
+ 
+   /**
+    * Returns the raw query part of this URI
+    */
+   public String getRawQuery()
+   {
+     return rawQuery;
+   }
+ 
+   /**
+    * Returns the query of the URI
+    */
+   public String getQuery()
+   {
+     return query;
+   }
+ 
+   /**
+    * Return the raw fragment part of this URI
+    */
+   public String getRawFragment()
+   {
+     return rawFragment;
+   }
+ 
+   /**
+    * Returns the fragment of the URI
+    */
+   public String getFragment()
+   {
+     return fragment;
+   }
+ 
+   /**
+    * <p> 
+    * Compares the URI with the given object for equality.  If the
+    * object is not a <code>URI</code>, then the method returns false.
+    * Otherwise, the following criteria are observed:
+    * </p>
+    * <ul>
+    * <li>The scheme of the URIs must either be null (undefined) in both cases,
+    * or equal, ignorant of case.</li>
+    * <li>The raw fragment of the URIs must either be null (undefined) in both
+    * cases, or equal, ignorant of case.</li>
+    * <li>Both URIs must be of the same type (opaque or hierarchial)</li>
+    * <li><strong>For opaque URIs:</strong></li>
+    * <ul>
+    * <li>The raw scheme-specific parts must be equal.</li>
+    * </ul>
+    * <li>For hierarchical URIs:</li>
+    * <ul>
+    * <li>The raw paths must be equal, ignorant of case.</li>
+    * <li>The raw queries are either both undefined or both equal, ignorant
+    * of case.</li>
+    * <li>The raw authority sections are either both undefined or:</li>
+    * <li><strong>For registry-based authorities:</strong></li>
+    * <ul><li>they are equal.</li></ul>
+    * <li><strong>For server-based authorities:</strong></li>
+    * <ul>
+    * <li>the hosts are equal, ignoring case</li>
+    * <li>the ports are equal</li>
+    * <li>the user information components are equal</li>
+    * </ul>
+    * </ul>
+    * </ul>
+    *
+    * @param obj the obj to compare the URI with.
+    * @return <code>true</code> if the objects are equal, according to
+    *         the specification above.
+    */
+   public boolean equals(Object obj)
+   {
+     if (!(obj instanceof URI))
+       return false;
+     URI uriObj = (URI) obj;
+     if (scheme == null)
+       {
+ 	if (uriObj.getScheme() != null)
+ 	  return false;
+       }
+     else
+       if (!(scheme.equalsIgnoreCase(uriObj.getScheme())))
+ 	return false;
+     if (rawFragment == null)
+       {
+ 	if (uriObj.getRawFragment() != null)
+ 	  return false;
+       }
+     else
+       if (!(rawFragment.equalsIgnoreCase(uriObj.getRawFragment())))
+ 	return false;
+     boolean opaqueThis = isOpaque();
+     boolean opaqueObj = uriObj.isOpaque();
+     if (opaqueThis && opaqueObj)
+       return rawSchemeSpecificPart.equals(uriObj.getRawSchemeSpecificPart());
+     else if (!opaqueThis && !opaqueObj)
+       {
+ 	boolean common = rawPath.equalsIgnoreCase(uriObj.getRawPath())
+ 	  && ((rawQuery == null && uriObj.getRawQuery() == null)
+ 	      || rawQuery.equalsIgnoreCase(uriObj.getRawQuery()));
+ 	if (rawAuthority == null && uriObj.getRawAuthority() == null)
+ 	  return common;
+ 	if (host == null)
+ 	  return common 
+ 	    && rawAuthority.equalsIgnoreCase(uriObj.getRawAuthority());
+ 	return common 
+ 	  && host.equalsIgnoreCase(uriObj.getHost())
+ 	  && port == uriObj.getPort()
+ 	  && (rawUserInfo == null ?
+ 	      uriObj.getRawUserInfo() == null :
+ 	      rawUserInfo.equalsIgnoreCase(uriObj.getRawUserInfo()));
+       }
+     else
+       return false;
+   }
+ 
+   /**
+    * Computes the hashcode of the URI
+    */
+   public int hashCode()
+   {
+     return (getScheme() == null ? 0 : 13 * getScheme().hashCode())
+       + 17 * getRawSchemeSpecificPart().hashCode()
+       + (getRawFragment() == null ? 0 : 21 + getRawFragment().hashCode());
+   }
+ 
+   /**
+    * Compare the URI with another object that must also be a URI.
+    * Undefined components are taken to be less than any other component.
+    * The following criteria are observed:
+    * </p>
+    * <ul>
+    * <li>Two URIs with different schemes are compared according to their
+    * scheme, regardless of case.</li>
+    * <li>A hierarchical URI is less than an opaque URI with the same
+    * scheme.</li>
+    * <li><strong>For opaque URIs:</strong></li>
+    * <ul>
+    * <li>URIs with differing scheme-specific parts are ordered according
+    * to the ordering of the scheme-specific part.</li>
+    * <li>URIs with the same scheme-specific part are ordered by the
+    * raw fragment.</li>
+    * </ul>
+    * <li>For hierarchical URIs:</li>
+    * <ul>
+    * <li>URIs are ordered according to their raw authority sections,
+    * if they are unequal.</li>
+    * <li><strong>For registry-based authorities:</strong></li>
+    * <ul><li>they are ordered according to the ordering of the authority
+    * component.</li></ul>
+    * <li><strong>For server-based authorities:</strong></li>
+    * <ul>
+    * <li>URIs are ordered according to the raw user information.</li>
+    * <li>URIs with the same user information are ordered by the host,
+    * ignoring case.</li>
+    * <lI>URIs with the same host are ordered by the port.</li>
+    * </ul>
+    * <li>URIs with the same authority section are ordered by the raw path.</li>
+    * <li>URIs with the same path are ordered by their raw query.</li>
+    * <li>URIs with the same query are ordered by their raw fragments.</li>
+    * </ul>
+    * </ul>
+    *
+    * @param obj This object to compare this URI with
+    * @return a negative integer, zero or a positive integer depending
+    *         on whether this URI is less than, equal to or greater
+    *         than that supplied, respectively.
+    * @throws ClassCastException if the given object is not a URI
+    */
+   public int compareTo(Object obj) 
+     throws ClassCastException
+   {
+     URI uri = (URI) obj;
+     if (scheme == null && uri.getScheme() != null)
+       return -1;
+     if (scheme != null)
+       {
+ 	int sCompare = scheme.compareToIgnoreCase(uri.getScheme()); 
+ 	if (sCompare != 0)
+ 	  return sCompare;
+       }
+     boolean opaqueThis = isOpaque();
+     boolean opaqueObj = uri.isOpaque();
+     if (opaqueThis && !opaqueObj)
+       return 1;
+     if (!opaqueThis && opaqueObj)
+       return -1;
+     if (opaqueThis)
+       {
+ 	int ssCompare = 
+ 	  rawSchemeSpecificPart.compareTo(uri.getRawSchemeSpecificPart());
+ 	if (ssCompare == 0)
+ 	  return compareFragments(uri);
+ 	else
+ 	  return ssCompare;
+       }
+     if (rawAuthority == null && uri.getRawAuthority() != null)
+       return -1;
+     if (rawAuthority != null)
+       {
+ 	int aCompare = rawAuthority.compareTo(uri.getRawAuthority());
+ 	if (aCompare != 0)
+ 	  {
+ 	    if (host == null)
+ 	      return aCompare;
+ 	    if (rawUserInfo == null && uri.getRawUserInfo() != null)
+ 	      return -1;
+ 	    int uCompare = rawUserInfo.compareTo(uri.getRawUserInfo());
+ 	    if (uCompare != 0)
+ 	      return uCompare;
+ 	    if (host == null && uri.getHost() != null)
+ 	      return -1;
+ 	    int hCompare = host.compareTo(uri.getHost());
+ 	    if (hCompare != 0)
+ 	      return hCompare;
+ 	    return new Integer(port).compareTo(new Integer(uri.getPort()));
+ 	  }
+       }
+     if (rawPath == null && uri.getRawPath() != null)
+       return -1;
+     if (rawPath != null)
+       {
+ 	int pCompare = rawPath.compareTo(uri.getRawPath()); 
+ 	if (pCompare != 0)
+ 	  return pCompare;
+       }
+     if (rawQuery == null && uri.getRawQuery() != null)
+       return -1;
+     if (rawQuery != null)
+       {
+ 	int qCompare = rawQuery.compareTo(uri.getRawQuery());
+ 	if (qCompare != 0)
+ 	  return qCompare;
+       }
+     return compareFragments(uri);
+   }
+ 
+   /**
+    * Compares the fragment of this URI with that of the supplied URI.
+    *
+    * @param uri the URI to compare with this one.
+    * @return a negative integer, zero or a positive integer depending
+    *         on whether this uri's fragment is less than, equal to
+    *         or greater than the fragment of the uri supplied, respectively.
+    */
+   private int compareFragments(URI uri)
+   {
+     if (rawFragment == null && uri.getRawFragment() != null)
+       return -1;
+     else if (rawFragment == null)
+       return 0;
+     else
+       return rawFragment.compareTo(uri.getRawFragment());
+   }
+ 
+   /**
+    * Returns the URI as a String.  If the URI was created using a constructor,
+    * then this will be the same as the original input string.
+    *
+    * @return a string representation of the URI.
+    */
+   public String toString()
+   {
+     return (scheme == null ? "" : scheme + ":")
+       + rawSchemeSpecificPart
+       + (rawFragment == null ? "" : "#" + rawFragment);
+   }
+ 
+   /**
+    * Returns the URI as US-ASCII string.  This is the same as the result
+    * from <code>toString()</code> for URIs that don't contain any non-US-ASCII
+    * characters.  Otherwise, the non-US-ASCII characters are replaced
+    * by their percent-encoded representations.
+    *
+    * @return a string representation of the URI, containing only US-ASCII
+    *         characters.
+    */
+   public String toASCIIString()
+   {
+     String strRep = toString();
+     boolean inNonAsciiBlock = false;
+     StringBuffer buffer = new StringBuffer();
+     StringBuffer encBuffer = null;
+     for (int i = 0; i < strRep.length(); i++)
+       {
+ 	char c = strRep.charAt(i);
+ 	if (c <= 127)
+ 	  {
+ 	    if (inNonAsciiBlock)
+ 	      {
+ 		buffer.append(escapeCharacters(encBuffer.toString()));
+ 		inNonAsciiBlock = false;
+ 	      }
+ 	    buffer.append(c);
+ 	  }
+ 	else
+ 	  {
+ 	    if (!inNonAsciiBlock)
+ 	      {
+ 		encBuffer = new StringBuffer();
+ 		inNonAsciiBlock = true;
+ 	      }
+ 	    encBuffer.append(c);
+ 	  }
+       }
+     return buffer.toString();
+   }
+ 
+   /**
+    * Converts the non-ASCII characters in the supplied string
+    * to their equivalent percent-encoded representations.
+    * That is, they are replaced by "%" followed by their hexadecimal value.
+    *
+    * @param str a string including non-ASCII characters.
+    * @return the string with the non-ASCII characters converted to their
+    *         percent-encoded representations.
+    */
+   private static String escapeCharacters(String str)
+   {
+     try
+       {
+ 	StringBuffer sb = new StringBuffer(); 
+ 	// this is far from optimal, but it works
+ 	byte[] utf8 = str.getBytes("utf-8");
+ 	for (int j = 0; j < utf8.length; j++)
+ 	  {
+ 	    sb.append('%');
+ 	    sb.append(HEX.charAt((utf8[j] & 0xff) / 16));
+ 	    sb.append(HEX.charAt((utf8[j] & 0xff) % 16));
+ 	  }
+ 	return sb.toString();
+       }
+     catch (java.io.UnsupportedEncodingException x)
+       {
+ 	throw (Error) new InternalError("Escaping error").initCause(x);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/URISyntaxException.java gcc-4.1.0/libjava/classpath/java/net/URISyntaxException.java
*** gcc-4.0.2/libjava/classpath/java/net/URISyntaxException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/URISyntaxException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,144 ----
+ /* URISyntaxException.java -- a string could not be parsed as a URI
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * This exception is thrown when a String cannot be parsed as a URI.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see URI
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class URISyntaxException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = 2137979680897488891L;
+ 
+   /**
+    * The failed input.
+    *
+    * @serial the bad URI
+    */
+   private final String input;
+ 
+   /**
+    * The index of failure.
+    *
+    * @serial the location of the problem
+    */
+   private final int index;
+ 
+   /**
+    * Create an exception from the invalid string, with the index set to -1.
+    *
+    * @param input the bad URI
+    * @param msg the descriptive error message
+    * @throws NullPointerException if input or msg are null
+    */
+   public URISyntaxException(String input, String msg)
+   {
+     this(input, msg, -1);
+   }
+ 
+   /**
+    * Create an exception from the invalid string, with the index of the
+    * point of failure.
+    *
+    * @param input the bad URI
+    * @param msg the descriptive error message
+    * @param index the index of the parse error, or -1
+    * @throws NullPointerException if input or msg are null
+    * @throws IllegalArgumentException if index &lt; -1
+    */
+   public URISyntaxException(String input, String msg, int index)
+   {
+     // The toString() hack checks for null.
+     super(msg.toString());
+     this.input = input.toString();
+     this.index = index;
+     if (index < -1)
+       throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * Returns the bad input string.
+    *
+    * @return the bad URI, guaranteed non-null
+    */
+   public String getInput()
+   {
+     return input;
+   }
+ 
+   /**
+    * Returns the reason for the failure.
+    *
+    * @return the message, guaranteed non-null
+    */
+   public String getReason()
+   {
+     return super.getMessage();
+   }
+ 
+   /**
+    * Returns the index of the failure, or -1.
+    *
+    * @return the index of failure
+    */
+   public int getIndex()
+   {
+     return index;
+   }
+ 
+   /**
+    * Returns a message describing the parse error, as if by
+    * <code>getReason() + (getIndex() &gt;= 0 ? " at index " + getIndex() : "")
+    * + ": " + getInput()</code>.
+    *
+    * @return the message string
+    */
+   public String getMessage()
+   {
+     return (super.getMessage() + (index >= 0 ? " at index " + index : "")
+            + ": " + input);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/URL.java gcc-4.1.0/libjava/classpath/java/net/URL.java
*** gcc-4.0.2/libjava/classpath/java/net/URL.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/URL.java	Sat Feb  4 20:21:48 2006
***************
*** 0 ****
--- 1,956 ----
+ /* URL.java -- Uniform Resource Locator Class
+    Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import gnu.java.net.URLParseError;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.util.HashMap;
+ import java.util.StringTokenizer;
+ 
+ 
+ /*
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+   * This final class represents an Internet Uniform Resource Locator (URL).
+   * For details on the syntax of URL's and what they can be used for,
+   * refer to RFC 1738, available from <a
+   * href="http://ds.internic.net/rfcs/rfc1738.txt">
+   * http://ds.internic.net/rfcs/rfc1738.txt</a>
+   * <p>
+   * There are a great many protocols supported by URL's such as "http",
+   * "ftp", and "file".  This object can handle any arbitrary URL for which
+   * a URLStreamHandler object can be written.  Default protocol handlers
+   * are provided for the "http" and "ftp" protocols.  Additional protocols
+   * handler implementations may be provided in the future.  In any case,
+   * an application or applet can install its own protocol handlers that
+   * can be "chained" with other protocol hanlders in the system to extend
+   * the base functionality provided with this class. (Note, however, that
+   * unsigned applets cannot access properties by default or install their
+   * own protocol handlers).
+   * <p>
+   * This chaining is done via the system property java.protocol.handler.pkgs
+   * If this property is set, it is assumed to be a "|" separated list of
+   * package names in which to attempt locating protocol handlers.  The
+   * protocol handler is searched for by appending the string
+   * ".&lt;protocol&gt;.Handler" to each packed in the list until a hander is
+   * found. If a protocol handler is not found in this list of packages, or if
+   * the property does not exist, then the default protocol handler of
+   * "gnu.java.net.&lt;protocol&gt;.Handler" is tried.  If this is
+   * unsuccessful, a MalformedURLException is thrown.
+   * <p>
+   * All of the constructor methods of URL attempt to load a protocol
+   * handler and so any needed protocol handlers must be installed when
+   * the URL is constructed.
+   * <p>
+   * Here is an example of how URL searches for protocol handlers.  Assume
+   * the value of java.protocol.handler.pkgs is "com.foo|com.bar" and the
+   * URL is "news://comp.lang.java.programmer".  URL would looking the
+   * following places for protocol handlers:
+   * <p><pre>
+   * com.foo.news.Handler
+   * com.bar.news.Handler
+   * gnu.java.net.news.Handler
+   * </pre><p>
+   * If the protocol handler is not found in any of those locations, a
+   * MalformedURLException would be thrown.
+   * <p>
+   * Please note that a protocol handler must be a subclass of
+   * URLStreamHandler.
+   * <p>
+   * Normally, this class caches protocol handlers.  Once it finds a handler
+   * for a particular protocol, it never tries to look up a new handler
+   * again.  However, if the system property
+   * gnu.java.net.nocache_protocol_handlers is set, then this
+   * caching behavior is disabled.  This property is specific to this
+   * implementation.  Sun's JDK may or may not do protocol caching, but it
+   * almost certainly does not examine this property.
+   * <p>
+   * Please also note that an application can install its own factory for
+   * loading protocol handlers (see setURLStreamHandlerFactory).  If this is
+   * done, then the above information is superseded and the behavior of this
+   * class in loading protocol handlers is dependent on that factory.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   * @author Warren Levy (warrenl@cygnus.com)
+   *
+   * @see URLStreamHandler
+   */
+ public final class URL implements Serializable
+ {
+   private static final String DEFAULT_SEARCH_PATH =
+     "gnu.java.net.protocol|gnu.inet";
+ 
+   // Cached System ClassLoader
+   private static ClassLoader systemClassLoader;
+ 
+   /**
+    * The name of the protocol for this URL.
+    * The protocol is always stored in lower case.
+    */
+   private String protocol;
+ 
+   /**
+    * The "authority" portion of the URL.
+    */
+   private String authority;
+ 
+   /**
+    * The hostname or IP address of this protocol.
+    * This includes a possible user. For example <code>joe@some.host.net</code>.
+    */
+   private String host;
+ 
+   /**
+    * The user information necessary to establish the connection.
+    */
+   private String userInfo;
+ 
+   /**
+    * The port number of this protocol or -1 if the port number used is
+    * the default for this protocol.
+    */
+   private int port = -1; // Initialize for constructor using context.
+ 
+   /**
+    * The "file" portion of the URL. It is defined as <code>path[?query]</code>.
+    */
+   private String file;
+ 
+   /**
+    * The anchor portion of the URL.
+    */
+   private String ref;
+ 
+   /**
+    * This is the hashCode for this URL
+    */
+   private int hashCode;
+ 
+   /**
+    * The protocol handler in use for this URL
+    */
+   transient URLStreamHandler ph;
+ 
+   /**
+    * If an application installs its own protocol handler factory, this is
+    * where we keep track of it.
+    */
+   private static URLStreamHandlerFactory factory;
+   private static final long serialVersionUID = -7627629688361524110L;
+ 
+   /**
+    * This a table where we cache protocol handlers to avoid the overhead
+    * of looking them up each time.
+    */
+   private static HashMap ph_cache = new HashMap();
+ 
+   /**
+    * Whether or not to cache protocol handlers.
+    */
+   private static boolean cache_handlers;
+ 
+   static
+     {
+       String s = System.getProperty("gnu.java.net.nocache_protocol_handlers");
+ 
+       if (s == null)
+ 	cache_handlers = true;
+       else
+ 	cache_handlers = false;
+     }
+ 
+   /**
+    * Constructs a URL and loads a protocol handler for the values passed as
+    * arguments.
+    *
+    * @param protocol The protocol for this URL ("http", "ftp", etc)
+    * @param host The hostname or IP address to connect to
+    * @param port The port number to use, or -1 to use the protocol's
+    * default port
+    * @param file The "file" portion of the URL.
+    *
+    * @exception MalformedURLException If a protocol handler cannot be loaded or
+    * a parse error occurs.
+    */
+   public URL(String protocol, String host, int port, String file)
+     throws MalformedURLException
+   {
+     this(protocol, host, port, file, null);
+   }
+ 
+   /**
+    * Constructs a URL and loads a protocol handler for the values passed in
+    * as arugments.  Uses the default port for the protocol.
+    *
+    * @param protocol The protocol for this URL ("http", "ftp", etc)
+    * @param host The hostname or IP address for this URL
+    * @param file The "file" portion of this URL.
+    *
+    * @exception MalformedURLException If a protocol handler cannot be loaded or
+    * a parse error occurs.
+    */
+   public URL(String protocol, String host, String file)
+     throws MalformedURLException
+   {
+     this(protocol, host, -1, file, null);
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>URL</code> with the
+    * specified protocol, host, port, and file.  Additionally, this method
+    * allows the caller to specify a protocol handler to use instead of
+    * the default.  If this handler is specified, the caller must have
+    * the "specifyStreamHandler" permission (see <code>NetPermission</code>)
+    * or a <code>SecurityException</code> will be thrown.
+    *
+    * @param protocol The protocol for this URL ("http", "ftp", etc)
+    * @param host The hostname or IP address to connect to
+    * @param port The port number to use, or -1 to use the protocol's default
+    * port
+    * @param file The "file" portion of the URL.
+    * @param ph The protocol handler to use with this URL.
+    *
+    * @exception MalformedURLException If no protocol handler can be loaded
+    * for the specified protocol.
+    * @exception SecurityException If the <code>SecurityManager</code> exists
+    * and does not allow the caller to specify its own protocol handler.
+    *
+    * @since 1.2
+    */
+   public URL(String protocol, String host, int port, String file,
+              URLStreamHandler ph) throws MalformedURLException
+   {
+     if (protocol == null)
+       throw new MalformedURLException("null protocol");
+     protocol = protocol.toLowerCase();
+     this.protocol = protocol;
+ 
+     if (ph != null)
+       {
+ 	SecurityManager s = System.getSecurityManager();
+ 	if (s != null)
+ 	  s.checkPermission(new NetPermission("specifyStreamHandler"));
+ 
+ 	this.ph = ph;
+       }
+     else
+       this.ph = getURLStreamHandler(protocol);
+ 
+     if (this.ph == null)
+       throw new MalformedURLException("Protocol handler not found: "
+                                       + protocol);
+ 
+     this.host = host;
+     this.port = port;
+     this.authority = (host != null) ? host : "";
+     if (port >= 0 && host != null)
+ 	this.authority += ":" + port;
+ 
+     int hashAt = file.indexOf('#');
+     if (hashAt < 0)
+       {
+ 	this.file = file;
+ 	this.ref = null;
+       }
+     else
+       {
+ 	this.file = file.substring(0, hashAt);
+ 	this.ref = file.substring(hashAt + 1);
+       }
+     hashCode = hashCode(); // Used for serialization.
+   }
+ 
+   /**
+    * Initializes a URL from a complete string specification such as
+    * "http://www.urbanophile.com/arenn/".  First the protocol name is parsed
+    * out of the string.  Then a handler is located for that protocol and
+    * the parseURL() method of that protocol handler is used to parse the
+    * remaining fields.
+    *
+    * @param spec The complete String representation of a URL
+    *
+    * @exception MalformedURLException If a protocol handler cannot be found
+    * or the URL cannot be parsed
+    */
+   public URL(String spec) throws MalformedURLException
+   {
+     this((URL) null, spec != null ? spec : "", (URLStreamHandler) null);
+   }
+ 
+   /**
+    * This method parses a String representation of a URL within the
+    * context of an existing URL.  Principally this means that any
+    * fields not present the URL are inheritied from the context URL.
+    * This allows relative URL's to be easily constructed.  If the
+    * context argument is null, then a complete URL must be specified
+    * in the URL string.  If the protocol parsed out of the URL is
+    * different from the context URL's protocol, then then URL String
+    * is also expected to be a complete URL.
+    *
+    * @param context The context on which to parse the specification
+    * @param spec The string to parse an URL
+    *
+    * @exception MalformedURLException If a protocol handler cannot be found
+    * for the URL cannot be parsed
+    */
+   public URL(URL context, String spec) throws MalformedURLException
+   {
+     this(context, spec, (context == null) ? (URLStreamHandler)null : context.ph);
+   }
+ 
+   /**
+    * Creates an URL from given arguments
+    * This method parses a String representation of a URL within the
+    * context of an existing URL.  Principally this means that any fields
+    * not present the URL are inheritied from the context URL.  This allows
+    * relative URL's to be easily constructed.  If the context argument is
+    * null, then a complete URL must be specified in the URL string.
+    * If the protocol parsed out of the URL is different
+    * from the context URL's protocol, then then URL String is also
+    * expected to be a complete URL.
+    * <p>
+    * Additionally, this method allows the caller to specify a protocol handler
+    * to use instead of  the default.  If this handler is specified, the caller
+    * must have the "specifyStreamHandler" permission
+    * (see <code>NetPermission</code>) or a <code>SecurityException</code>
+    * will be thrown.
+    *
+    * @param context The context in which to parse the specification
+    * @param spec The string to parse as an URL
+    * @param ph The stream handler for the URL
+    *
+    * @exception MalformedURLException If a protocol handler cannot be found
+    * or the URL cannot be parsed
+    * @exception SecurityException If the <code>SecurityManager</code> exists
+    * and does not allow the caller to specify its own protocol handler.
+    *
+    * @since 1.2
+    */
+   public URL(URL context, String spec, URLStreamHandler ph)
+     throws MalformedURLException
+   {
+     /* A protocol is defined by the doc as the substring before a ':'
+      * as long as the ':' occurs before any '/'.
+      *
+      * If context is null, then spec must be an absolute URL.
+      *
+      * The relative URL need not specify all the components of a URL.
+      * If the protocol, host name, or port number is missing, the value
+      * is inherited from the context.  A bare file component is appended
+      * to the context's file.  The optional anchor is not inherited.
+      */
+ 
+     // If this is an absolute URL, then ignore context completely.
+     // An absolute URL must have chars prior to "://" but cannot have a colon
+     // right after the "://".  The second colon is for an optional port value
+     // and implies that the host from the context is used if available.
+     int colon;
+     int slash = spec.indexOf('/');
+     if ((colon = spec.indexOf("://", 1)) > 0
+ 	&& ((colon < slash || slash < 0))
+         && ! spec.regionMatches(colon, "://:", 0, 4))
+       context = null;
+ 
+     if ((colon = spec.indexOf(':')) > 0
+         && (colon < slash || slash < 0))
+       {
+ 	// Protocol specified in spec string.
+ 	protocol = spec.substring(0, colon).toLowerCase();
+ 	if (context != null && context.protocol.equals(protocol))
+ 	  {
+ 	    // The 1.2 doc specifically says these are copied to the new URL.
+ 	    host = context.host;
+ 	    port = context.port;
+             userInfo = context.userInfo;
+ 	    authority = context.authority;
+ 	  }
+       }
+     else if (context != null)
+       {
+ 	// Protocol NOT specified in spec string.
+ 	// Use context fields (except ref) as a foundation for relative URLs.
+ 	colon = -1;
+ 	protocol = context.protocol;
+ 	host = context.host;
+ 	port = context.port;
+         userInfo = context.userInfo;
+ 	if (spec.indexOf(":/", 1) < 0)
+ 	  {
+ 	    file = context.file;
+ 	    if (file == null || file.length() == 0)
+ 	      file = "/";
+ 	  }
+ 	authority = context.authority;
+       }
+     else // Protocol NOT specified in spec. and no context available.
+       throw new MalformedURLException("Absolute URL required with null"
+ 				      + " context: " + spec);
+ 
+     protocol = protocol.trim();
+ 
+     if (ph != null)
+       {
+ 	SecurityManager s = System.getSecurityManager();
+ 	if (s != null)
+ 	  s.checkPermission(new NetPermission("specifyStreamHandler"));
+ 
+ 	this.ph = ph;
+       }
+     else
+       this.ph = getURLStreamHandler(protocol);
+ 
+     if (this.ph == null)
+       throw new MalformedURLException("Protocol handler not found: "
+                                       + protocol);
+ 
+     // JDK 1.2 doc for parseURL specifically states that any '#' ref
+     // is to be excluded by passing the 'limit' as the indexOf the '#'
+     // if one exists, otherwise pass the end of the string.
+     int hashAt = spec.indexOf('#', colon + 1);
+ 
+     try
+       {
+ 	this.ph.parseURL(this, spec, colon + 1,
+ 	                 hashAt < 0 ? spec.length() : hashAt);
+       }
+     catch (URLParseError e)
+       {
+ 	throw new MalformedURLException(e.getMessage());
+       }
+ 
+     if (hashAt >= 0)
+       ref = spec.substring(hashAt + 1);
+ 
+     hashCode = hashCode(); // Used for serialization.
+   }
+ 
+   /**
+    * Test another URL for equality with this one.  This will be true only if
+    * the argument is non-null and all of the fields in the URL's match
+    * exactly (ie, protocol, host, port, file, and ref).  Overrides
+    * Object.equals(), implemented by calling the equals method of the handler.
+    *
+    * @param obj The URL to compare with
+    *
+    * @return true if the URL is equal, false otherwise
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof URL))
+       return false;
+ 
+     return ph.equals(this, (URL) obj);
+   }
+ 
+   /**
+    * Returns the contents of this URL as an object by first opening a
+    * connection, then calling the getContent() method against the connection
+    *
+    * @return A content object for this URL
+    * @exception IOException If opening the connection or getting the
+    * content fails.
+    *
+    * @since 1.3
+    */
+   public Object getContent() throws IOException
+   {
+     return openConnection().getContent();
+   }
+ 
+   /**
+    * Gets the contents of this URL
+    *
+    * @param classes The allow classes for the content object.
+    *
+    * @return a context object for this URL.
+    *
+    * @exception IOException If an error occurs
+    */
+   public Object getContent(Class[] classes) throws IOException
+   {
+     // FIXME: implement this
+     return getContent();
+   }
+ 
+   /**
+    * Returns the file portion of the URL.
+    * Defined as <code>path[?query]</code>.
+    * Returns the empty string if there is no file portion.
+    *
+    * @return The filename specified in this URL, or an empty string if empty.
+    */
+   public String getFile()
+   {
+     return file == null ? "" : file;
+   }
+ 
+   /**
+    * Returns the path of the URL. This is the part of the file before any '?'
+    * character.
+    *
+    * @return The path specified in this URL, or null if empty.
+    *
+    * @since 1.3
+    */
+   public String getPath()
+   {
+     // The spec says we need to return an empty string, but some
+     // applications depends on receiving null when the path is empty.
+     if (file == null)
+       return null;
+     int quest = file.indexOf('?');
+     return quest < 0 ? getFile() : file.substring(0, quest);
+   }
+ 
+   /**
+    * Returns the authority of the URL
+    *
+    * @return The authority specified in this URL.
+    *
+    * @since 1.3
+    */
+   public String getAuthority()
+   {
+     return authority;
+   }
+ 
+   /**
+    * Returns the host of the URL
+    *
+    * @return The host specified in this URL.
+    */
+   public String getHost()
+   {
+     int at = (host == null) ? -1 : host.indexOf('@');
+     return at < 0 ? host : host.substring(at + 1, host.length());
+   }
+ 
+   /**
+    * Returns the port number of this URL or -1 if the default port number is
+    * being used.
+    *
+    * @return The port number
+    *
+    * @see #getDefaultPort()
+    */
+   public int getPort()
+   {
+     return port;
+   }
+ 
+   /**
+    * Returns the default port of the URL. If the StreamHandler for the URL
+    * protocol does not define a default port it returns -1.
+    *
+    * @return The default port of the current protocol.
+    */
+   public int getDefaultPort()
+   {
+     return ph.getDefaultPort();
+   }
+ 
+   /**
+    * Returns the protocol of the URL
+    *
+    * @return The specified protocol.
+    */
+   public String getProtocol()
+   {
+     return protocol;
+   }
+ 
+   /**
+    * Returns the ref (sometimes called the "# reference" or "anchor") portion
+    * of the URL.
+    *
+    * @return The ref
+    */
+   public String getRef()
+   {
+     return ref;
+   }
+ 
+   /**
+    * Returns the user information of the URL. This is the part of the host
+    * name before the '@'.
+    *
+    * @return the user at a particular host or null when no user defined.
+    */
+   public String getUserInfo()
+   {
+     if (userInfo != null)
+       return userInfo;
+     int at = (host == null) ? -1 : host.indexOf('@');
+     return at < 0 ? null : host.substring(0, at);
+   }
+ 
+   /**
+    * Returns the query of the URL. This is the part of the file before the
+    * '?'.
+    *
+    * @return the query part of the file, or null when there is no query part.
+    */
+   public String getQuery()
+   {
+     int quest = (file == null) ? -1 : file.indexOf('?');
+     return quest < 0 ? null : file.substring(quest + 1, file.length());
+   }
+ 
+   /**
+    * Returns a hashcode computed by the URLStreamHandler of this URL
+    *
+    * @return The hashcode for this URL.
+    */
+   public int hashCode()
+   {
+     if (hashCode != 0)
+       return hashCode; // Use cached value if available.
+     else
+       return ph.hashCode(this);
+   }
+ 
+   /**
+    * Returns a URLConnection object that represents a connection to the remote
+    * object referred to by the URL. The URLConnection is created by calling the
+    * openConnection() method of the protocol handler
+    *
+    * @return A URLConnection for this URL
+    *
+    * @exception IOException If an error occurs
+    */
+   public URLConnection openConnection() throws IOException
+   {
+     return ph.openConnection(this);
+   }
+ 
+   /**
+    * Opens a connection to this URL and returns an InputStream for reading
+    * from that connection
+    *
+    * @return An <code>InputStream</code> for this URL.
+    *
+    * @exception IOException If an error occurs
+    */
+   public InputStream openStream() throws IOException
+   {
+     return openConnection().getInputStream();
+   }
+ 
+   /**
+    * Tests whether or not another URL refers to the same "file" as this one.
+    * This will be true if and only if the passed object is not null, is a
+    * URL, and matches all fields but the ref (ie, protocol, host, port,
+    * and file);
+    *
+    * @param url The URL object to test with
+    *
+    * @return true if URL matches this URL's file, false otherwise
+    */
+   public boolean sameFile(URL url)
+   {
+     return ph.sameFile(this, url);
+   }
+ 
+   /**
+    * Sets the specified fields of the URL. This is not a public method so
+    * that only URLStreamHandlers can modify URL fields. This might be called
+    * by the <code>parseURL()</code> method in that class. URLs are otherwise
+    * constant. If the given protocol does not exist, it will keep the previously
+    * set protocol.
+    *
+    * @param protocol The protocol name for this URL
+    * @param host The hostname or IP address for this URL
+    * @param port The port number of this URL
+    * @param file The "file" portion of this URL.
+    * @param ref The anchor portion of this URL.
+    */
+   protected void set(String protocol, String host, int port, String file,
+                      String ref)
+   {
+     URLStreamHandler protocolHandler = null;
+     protocol = protocol.toLowerCase();
+     if (! this.protocol.equals(protocol))
+       protocolHandler = getURLStreamHandler(protocol);
+     
+     // It is an hidden feature of the JDK. If the protocol does not exist,
+     // we keep the previously initialized protocol.
+     if (protocolHandler != null)
+       {
+ 	this.ph = protocolHandler;
+ 	this.protocol = protocol;
+       }
+     this.authority = "";
+     this.port = port;
+     this.host = host;
+     this.file = file;
+     this.ref = ref;
+ 
+     if (host != null)
+       this.authority += host;
+     if (port >= 0)
+       this.authority += ":" + port;
+ 
+     hashCode = hashCode(); // Used for serialization.
+   }
+ 
+   /**
+    * Sets the specified fields of the URL. This is not a public method so
+    * that only URLStreamHandlers can modify URL fields. URLs are otherwise
+    * constant. If the given protocol does not exist, it will keep the previously
+    * set protocol.
+    *
+    * @param protocol The protocol name for this URL.
+    * @param host The hostname or IP address for this URL.
+    * @param port The port number of this URL.
+    * @param authority The authority of this URL.
+    * @param userInfo The user and password (if needed) of this URL.
+    * @param path The "path" portion of this URL.
+    * @param query The query of this URL.
+    * @param ref The anchor portion of this URL.
+    *
+    * @since 1.3
+    */
+   protected void set(String protocol, String host, int port, String authority,
+                      String userInfo, String path, String query, String ref)
+   {
+     URLStreamHandler protocolHandler = null;
+     protocol = protocol.toLowerCase();
+     if (! this.protocol.equals(protocol))
+       protocolHandler = getURLStreamHandler(protocol);
+     
+     // It is an hidden feature of the JDK. If the protocol does not exist,
+     // we keep the previously initialized protocol.
+     if (protocolHandler != null)
+       {
+ 	this.ph = protocolHandler;
+ 	this.protocol = protocol;
+       }
+     this.host = host;
+     this.userInfo = userInfo;
+     this.port = port;
+     this.authority = authority;
+     if (query == null)
+       this.file = path;
+     else
+       this.file = path + "?" + query;
+     this.ref = ref;
+     hashCode = hashCode(); // Used for serialization.
+   }
+ 
+   /**
+    * Sets the URLStreamHandlerFactory for this class.  This factory is
+    * responsible for returning the appropriate protocol handler for
+    * a given URL.
+    *
+    * @param fac The URLStreamHandlerFactory class to use
+    *
+    * @exception Error If the factory is alread set.
+    * @exception SecurityException If a security manager exists and its
+    * checkSetFactory method doesn't allow the operation
+    */
+   public static synchronized void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
+   {
+     if (factory != null)
+       throw new Error("URLStreamHandlerFactory already set");
+ 
+     // Throw an exception if an extant security mgr precludes
+     // setting the factory.
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkSetFactory();
+     factory = fac;
+   }
+ 
+   /**
+    * Returns a String representing this URL.  The String returned is
+    * created by calling the protocol handler's toExternalForm() method.
+    *
+    * @return A string for this URL
+    */
+   public String toExternalForm()
+   {
+     // Identical to toString().
+     return ph.toExternalForm(this);
+   }
+ 
+   /**
+    * Returns a String representing this URL.  Identical to toExternalForm().
+    * The value returned is created by the protocol handler's
+    * toExternalForm method.  Overrides Object.toString()
+    *
+    * @return A string for this URL
+    */
+   public String toString()
+   {
+     // Identical to toExternalForm().
+     return ph.toExternalForm(this);
+   }
+ 
+   /**
+    * This internal method is used in two different constructors to load
+    * a protocol handler for this URL.
+    *
+    * @param protocol The protocol to load a handler for
+    *
+    * @return A URLStreamHandler for this protocol, or null when not found.
+    */
+   private static synchronized URLStreamHandler getURLStreamHandler(String protocol)
+   {
+     URLStreamHandler ph = null;
+ 
+     // First, see if a protocol handler is in our cache.
+     if (cache_handlers)
+       {
+ 	if ((ph = (URLStreamHandler) ph_cache.get(protocol)) != null)
+ 	  return ph;
+       }
+ 
+     // If a non-default factory has been set, use it to find the protocol.
+     if (factory != null)
+       {
+ 	ph = factory.createURLStreamHandler(protocol);
+       }
+ 
+     // Non-default factory may have returned null or a factory wasn't set.
+     // Use the default search algorithm to find a handler for this protocol.
+     if (ph == null)
+       {
+ 	// Get the list of packages to check and append our default handler
+ 	// to it, along with the JDK specified default as a last resort.
+ 	// Except in very unusual environments the JDK specified one shouldn't
+ 	// ever be needed (or available).
+ 	String ph_search_path =
+ 	  System.getProperty("java.protocol.handler.pkgs");
+ 
+ 	// Tack our default package on at the ends.
+ 	if (ph_search_path != null)
+ 	  ph_search_path += "|" + DEFAULT_SEARCH_PATH;
+ 	else
+ 	  ph_search_path = DEFAULT_SEARCH_PATH;
+ 
+ 	// Finally loop through our search path looking for a match.
+ 	StringTokenizer pkgPrefix = new StringTokenizer(ph_search_path, "|");
+ 
+ 	// Cache the systemClassLoader
+ 	if (systemClassLoader == null)
+ 	  {
+ 	    systemClassLoader = (ClassLoader) AccessController.doPrivileged
+ 	      (new PrivilegedAction() {
+ 		  public Object run()
+ 	          {
+ 		    return ClassLoader.getSystemClassLoader();
+ 		  }
+ 		});
+ 	  }
+ 
+ 	do
+ 	  {
+ 	    try
+ 	      {
+ 		// Try to get a class from the system/application
+ 		// classloader, initialize it, make an instance
+ 		// and try to cast it to a URLStreamHandler.
+ 		String clsName =
+ 		  (pkgPrefix.nextToken() + "." + protocol + ".Handler");
+ 		Class c = Class.forName(clsName, true, systemClassLoader);
+ 		ph = (URLStreamHandler) c.newInstance();
+ 	      }
+             catch (ThreadDeath death)
+               {
+                 throw death;
+               }
+ 	    catch (Throwable t)
+ 	      {
+ 		// Ignored.
+ 	      }
+ 	  }
+ 	 while (ph == null && pkgPrefix.hasMoreTokens());
+       }
+ 
+     // Update the hashtable with the new protocol handler.
+     if (ph != null && cache_handlers)
+       ph_cache.put(protocol, ph);
+     else
+       ph = null;
+ 
+     return ph;
+   }
+ 
+   private void readObject(ObjectInputStream ois)
+     throws IOException, ClassNotFoundException
+   {
+     ois.defaultReadObject();
+     this.ph = getURLStreamHandler(protocol);
+     if (this.ph == null)
+       throw new IOException("Handler for protocol " + protocol + " not found");
+   }
+ 
+   private void writeObject(ObjectOutputStream oos) throws IOException
+   {
+     oos.defaultWriteObject();
+   }
+ 
+   /**
+    * Returns the equivalent <code>URI</code> object for this <code>URL</code>.
+    * This is the same as calling <code>new URI(this.toString())</code>.
+    * RFC2396-compliant URLs are guaranteed a successful conversion to
+    * a <code>URI</code> instance.  However, there are some values which
+    * form valid URLs, but which do not also form RFC2396-compliant URIs.
+    *
+    * @throws URISyntaxException if this URL is not RFC2396-compliant,
+    *         and thus can not be successfully converted to a URI.
+    */
+   public URI toURI()
+     throws URISyntaxException
+   {
+     return new URI(toString());
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/URLClassLoader.java gcc-4.1.0/libjava/classpath/java/net/URLClassLoader.java
*** gcc-4.0.2/libjava/classpath/java/net/URLClassLoader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/URLClassLoader.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,1229 ----
+ /* URLClassLoader.java --  ClassLoader that loads classes from one or more URLs
+    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.net;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.EOFException;
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.FilePermission;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.security.AccessControlContext;
+ import java.security.AccessController;
+ import java.security.CodeSource;
+ import java.security.PermissionCollection;
+ import java.security.PrivilegedAction;
+ import java.security.SecureClassLoader;
+ import java.security.cert.Certificate;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.StringTokenizer;
+ import java.util.Vector;
+ import java.util.jar.Attributes;
+ import java.util.jar.JarEntry;
+ import java.util.jar.JarFile;
+ import java.util.jar.Manifest;
+ 
+ 
+ /**
+  * A secure class loader that can load classes and resources from
+  * multiple locations.  Given an array of <code>URL</code>s this class
+  * loader will retrieve classes and resources by fetching them from
+  * possible remote locations.  Each <code>URL</code> is searched in
+  * order in which it was added.  If the file portion of the
+  * <code>URL</code> ends with a '/' character then it is interpreted
+  * as a base directory, otherwise it is interpreted as a jar file from
+  * which the classes/resources are resolved.
+  *
+  * <p>New instances can be created by two static
+  * <code>newInstance()</code> methods or by three public
+  * contructors. Both ways give the option to supply an initial array
+  * of <code>URL</code>s and (optionally) a parent classloader (that is
+  * different from the standard system class loader).</p>
+  *
+  * <p>Normally creating a <code>URLClassLoader</code> throws a
+  * <code>SecurityException</code> if a <code>SecurityManager</code> is
+  * installed and the <code>checkCreateClassLoader()</code> method does
+  * not return true.  But the <code>newInstance()</code> methods may be
+  * used by any code as long as it has permission to acces the given
+  * <code>URL</code>s.  <code>URLClassLoaders</code> created by the
+  * <code>newInstance()</code> methods also explicitly call the
+  * <code>checkPackageAccess()</code> method of
+  * <code>SecurityManager</code> if one is installed before trying to
+  * load a class.  Note that only subclasses of
+  * <code>URLClassLoader</code> can add new URLs after the
+  * URLClassLoader had been created. But it is always possible to get
+  * an array of all URLs that the class loader uses to resolve classes
+  * and resources by way of the <code>getURLs()</code> method.</p>
+  *
+  * <p>Open issues:
+  * <ul>
+  *
+  * <li>Should the URLClassLoader actually add the locations found in
+  * the manifest or is this the responsibility of some other
+  * loader/(sub)class?  (see <a
+  * href="http://java.sun.com/products/jdk/1.4/docs/guide/extensions/spec.html">
+  * Extension Mechanism Architecture - Bundles Extensions</a>)</li>
+  *
+  * <li>How does <code>definePackage()</code> and sealing work
+  * precisely?</li>
+  *
+  * <li>We save and use the security context (when a created by
+  * <code>newInstance()</code> but do we have to use it in more
+  * places?</li>
+  *
+  * <li>The use of <code>URLStreamHandler</code>s has not been tested.</li>
+  *
+  * </ul>
+  * </p>
+  *
+  * @since 1.2
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @author Wu Gansha (gansha.wu@intel.com)
+  */
+ public class URLClassLoader extends SecureClassLoader
+ {
+   // Class Variables
+ 
+   /**
+    * A global cache to store mappings between URLLoader and URL,
+    * so we can avoid do all the homework each time the same URL
+    * comes.
+    * XXX - Keeps these loaders forever which prevents garbage collection.
+    */
+   private static HashMap urlloaders = new HashMap();
+ 
+   /**
+    * A cache to store mappings between handler factory and its
+    * private protocol handler cache (also a HashMap), so we can avoid
+    * create handlers each time the same protocol comes.
+    */
+   private static HashMap factoryCache = new HashMap(5);
+ 
+   // Instance variables
+ 
+   /** Locations to load classes from */
+   private final Vector urls = new Vector();
+ 
+   /**
+    * Store pre-parsed information for each url into this vector: each
+    * element is a URL loader.  A jar file has its own class-path
+    * attribute which adds to the URLs that will be searched, but this
+    * does not add to the list of urls.
+    */
+   private final Vector urlinfos = new Vector();
+ 
+   /** Factory used to get the protocol handlers of the URLs */
+   private final URLStreamHandlerFactory factory;
+ 
+   /**
+    * The security context when created from <code>newInstance()</code>
+    * or null when created through a normal constructor or when no
+    * <code>SecurityManager</code> was installed.
+    */
+   private final AccessControlContext securityContext;
+ 
+   // Helper classes
+ 
+   /**
+    * A <code>URLLoader</code> contains all logic to load resources from a
+    * given base <code>URL</code>.
+    */
+   abstract static class URLLoader
+   {
+     /**
+      * Our classloader to get info from if needed.
+      */
+     final URLClassLoader classloader;
+ 
+     /**
+      * The base URL from which all resources are loaded.
+      */
+     final URL baseURL;
+ 
+     /**
+      * A <code>CodeSource</code> without any associated certificates.
+      * It is common for classes to not have certificates associated
+      * with them.  If they come from the same <code>URLLoader</code>
+      * then it is safe to share the associated <code>CodeSource</code>
+      * between them since <code>CodeSource</code> is immutable.
+      */
+     final CodeSource noCertCodeSource;
+ 
+     URLLoader(URLClassLoader classloader, URL baseURL)
+     {
+       this(classloader, baseURL, baseURL);
+     }
+ 
+     URLLoader(URLClassLoader classloader, URL baseURL, URL overrideURL)
+     {
+       this.classloader = classloader;
+       this.baseURL = baseURL;
+       this.noCertCodeSource = new CodeSource(overrideURL, null);
+     }
+ 
+     /**
+      * Returns a <code>Resource</code> loaded by this
+      * <code>URLLoader</code>, or <code>null</code> when no
+      * <code>Resource</code> with the given name exists.
+      */
+     abstract Resource getResource(String s);
+ 
+     /**
+      * Returns the <code>Manifest</code> associated with the
+      * <code>Resource</code>s loaded by this <code>URLLoader</code> or
+      * <code>null</code> there is no such <code>Manifest</code>.
+      */
+     Manifest getManifest()
+     {
+       return null;
+     }
+ 
+     Vector getClassPath()
+     {
+       return null;
+     }
+   }
+ 
+   /**
+    * A <code>Resource</code> represents a resource in some
+    * <code>URLLoader</code>. It also contains all information (e.g.,
+    * <code>URL</code>, <code>CodeSource</code>, <code>Manifest</code> and
+    * <code>InputStream</code>) that is necessary for loading resources
+    * and creating classes from a <code>URL</code>.
+    */
+   abstract static class Resource
+   {
+     final URLLoader loader;
+ 
+     Resource(URLLoader loader)
+     {
+       this.loader = loader;
+     }
+ 
+     /**
+      * Returns the non-null <code>CodeSource</code> associated with
+      * this resource.
+      */
+     CodeSource getCodeSource()
+     {
+       Certificate[] certs = getCertificates();
+       if (certs == null)
+         return loader.noCertCodeSource;
+       else
+         return new CodeSource(loader.baseURL, certs);
+     }
+ 
+     /**
+      * Returns <code>Certificates</code> associated with this
+      * resource, or null when there are none.
+      */
+     Certificate[] getCertificates()
+     {
+       return null;
+     }
+ 
+     /**
+      * Return a <code>URL</code> that can be used to access this resource.
+      */
+     abstract URL getURL();
+ 
+     /**
+      * Returns the size of this <code>Resource</code> in bytes or
+      * <code>-1</code> when unknown.
+      */
+     abstract int getLength();
+ 
+     /**
+      * Returns the non-null <code>InputStream</code> through which
+      * this resource can be loaded.
+      */
+     abstract InputStream getInputStream() throws IOException;
+   }
+ 
+   /**
+    * A <code>JarURLLoader</code> is a type of <code>URLLoader</code>
+    * only loading from jar url.
+    */
+   static final class JarURLLoader extends URLLoader
+   {
+     final JarFile jarfile; // The jar file for this url
+     final URL baseJarURL; // Base jar: url for all resources loaded from jar
+ 
+     Vector classPath;	// The "Class-Path" attribute of this Jar's manifest
+ 
+     public JarURLLoader(URLClassLoader classloader, URL baseURL)
+     {
+       super(classloader, baseURL);
+ 
+       // Cache url prefix for all resources in this jar url.
+       String external = baseURL.toExternalForm();
+       StringBuffer sb = new StringBuffer(external.length() + 6);
+       sb.append("jar:");
+       sb.append(external);
+       sb.append("!/");
+       String jarURL = sb.toString();
+ 
+       this.classPath = null;
+       URL baseJarURL = null;
+       JarFile jarfile = null;
+       try
+ 	{
+ 	  baseJarURL =
+ 	    new URL(null, jarURL, classloader.getURLStreamHandler("jar"));
+ 	  
+ 	  jarfile =
+ 	    ((JarURLConnection) baseJarURL.openConnection()).getJarFile();
+ 	  
+ 	  Manifest manifest;
+ 	  Attributes attributes;
+ 	  String classPathString;
+ 
+ 	  if ((manifest = jarfile.getManifest()) != null
+ 	      && (attributes = manifest.getMainAttributes()) != null
+ 	      && ((classPathString 
+ 		   = attributes.getValue(Attributes.Name.CLASS_PATH)) 
+ 		  != null))
+ 	    {
+ 	      this.classPath = new Vector();
+ 	      
+ 	      StringTokenizer st = new StringTokenizer(classPathString, " ");
+ 	      while (st.hasMoreElements ()) 
+ 		{  
+ 		  String e = st.nextToken ();
+ 		  try
+ 		    {
+ 		      URL url = new URL(baseURL, e);
+ 		      this.classPath.add(url);
+ 		    } 
+ 		  catch (java.net.MalformedURLException xx)
+ 		    {
+ 		      // Give up
+ 		    }
+ 		}
+ 	    }
+ 	}
+       catch (IOException ioe)
+         {
+ 	  /* ignored */
+         }
+ 
+       this.baseJarURL = baseJarURL;
+       this.jarfile = jarfile;
+     }
+ 
+     /** get resource with the name "name" in the jar url */
+     Resource getResource(String name)
+     {
+       if (jarfile == null)
+         return null;
+ 
+       if (name.startsWith("/"))
+         name = name.substring(1);
+ 
+       JarEntry je = jarfile.getJarEntry(name);
+       if (je != null)
+         return new JarURLResource(this, name, je);
+       else
+         return null;
+     }
+ 
+     Manifest getManifest()
+     {
+       try
+         {
+           return (jarfile == null) ? null : jarfile.getManifest();
+         }
+       catch (IOException ioe)
+         {
+           return null;
+         }
+     }
+ 
+     Vector getClassPath()
+     {
+       return classPath;
+     }
+   }
+ 
+   static final class JarURLResource extends Resource
+   {
+     private final JarEntry entry;
+     private final String name;
+ 
+     JarURLResource(JarURLLoader loader, String name, JarEntry entry)
+     {
+       super(loader);
+       this.entry = entry;
+       this.name = name;
+     }
+ 
+     InputStream getInputStream() throws IOException
+     {
+       return ((JarURLLoader) loader).jarfile.getInputStream(entry);
+     }
+ 
+     int getLength()
+     {
+       return (int) entry.getSize();
+     }
+ 
+     Certificate[] getCertificates()
+     {
+       // We have to get the entry from the jar file again, because the
+       // certificates will not be available until the entire entry has
+       // been read.
+       return ((JarEntry) ((JarURLLoader) loader).jarfile.getEntry(name))
+         .getCertificates();
+     }
+ 
+     URL getURL()
+     {
+       try
+         {
+           return new URL(((JarURLLoader) loader).baseJarURL, name,
+                          loader.classloader.getURLStreamHandler("jar"));
+         }
+       catch (MalformedURLException e)
+         {
+           InternalError ie = new InternalError();
+           ie.initCause(e);
+           throw ie;
+         }
+     }
+   }
+ 
+   /**
+    * Loader for remote directories.
+    */
+   static final class RemoteURLLoader extends URLLoader
+   {
+     private final String protocol;
+ 
+     RemoteURLLoader(URLClassLoader classloader, URL url)
+     {
+       super(classloader, url);
+       protocol = url.getProtocol();
+     }
+ 
+     /**
+      * Get a remote resource.
+      * Returns null if no such resource exists.
+      */
+     Resource getResource(String name)
+     {
+       try
+         {
+           URL url =
+             new URL(baseURL, name, classloader.getURLStreamHandler(protocol));
+           URLConnection connection = url.openConnection();
+ 
+           // Open the connection and check the stream
+           // just to be sure it exists.
+           int length = connection.getContentLength();
+           InputStream stream = connection.getInputStream();
+ 
+           // We can do some extra checking if it is a http request
+           if (connection instanceof HttpURLConnection)
+             {
+               int response =
+                 ((HttpURLConnection) connection).getResponseCode();
+               if (response / 100 != 2)
+                 return null;
+             }
+ 
+           if (stream != null)
+             return new RemoteResource(this, name, url, stream, length);
+           else
+             return null;
+         }
+       catch (IOException ioe)
+         {
+           return null;
+         }
+     }
+   }
+ 
+   /**
+    * A resource from some remote location.
+    */
+   static final class RemoteResource extends Resource
+   {
+     private final URL url;
+     private final InputStream stream;
+     private final int length;
+ 
+     RemoteResource(RemoteURLLoader loader, String name, URL url,
+                    InputStream stream, int length)
+     {
+       super(loader);
+       this.url = url;
+       this.stream = stream;
+       this.length = length;
+     }
+ 
+     InputStream getInputStream() throws IOException
+     {
+       return stream;
+     }
+ 
+     public int getLength()
+     {
+       return length;
+     }
+ 
+     public URL getURL()
+     {
+       return url;
+     }
+   }
+ 
+   /**
+    * A <code>FileURLLoader</code> is a type of <code>URLLoader</code>
+    * only loading from file url.
+    */
+   static final class FileURLLoader extends URLLoader
+   {
+     File dir; //the file for this file url
+ 
+     FileURLLoader(URLClassLoader classloader, URL url)
+     {
+       super(classloader, url);
+       dir = new File(baseURL.getFile());
+     }
+ 
+     /** get resource with the name "name" in the file url */
+     Resource getResource(String name)
+     {
+       try 
+  	{
+  	  File file = new File(dir, name).getCanonicalFile();
+  	  if (file.exists() && !file.isDirectory())
+  	    return new FileResource(this, file);
+  	}
+       catch (IOException e)
+  	{
+  	  // Fall through...
+  	}
+       return null;
+     }
+   }
+ 
+   static final class FileResource extends Resource
+   {
+     final File file;
+ 
+     FileResource(FileURLLoader loader, File file)
+     {
+       super(loader);
+       this.file = file;
+     }
+ 
+     InputStream getInputStream() throws IOException
+     {
+       return new FileInputStream(file);
+     }
+ 
+     public int getLength()
+     {
+       return (int) file.length();
+     }
+ 
+     public URL getURL()
+     {
+       try
+         {
+           return file.toURL();
+         }
+       catch (MalformedURLException e)
+         {
+           InternalError ie = new InternalError();
+           ie.initCause(e);
+           throw ie;
+         }
+     }
+   }
+ 
+   // Constructors
+ 
+   /**
+    * Creates a URLClassLoader that gets classes from the supplied URLs.
+    * To determine if this classloader may be created the constructor of
+    * the super class (<code>SecureClassLoader</code>) is called first, which
+    * can throw a SecurityException. Then the supplied URLs are added
+    * in the order given to the URLClassLoader which uses these URLs to
+    * load classes and resources (after using the default parent ClassLoader).
+    *
+    * @param urls Locations that should be searched by this ClassLoader when
+    * resolving Classes or Resources.
+    * @exception SecurityException if the SecurityManager disallows the
+    * creation of a ClassLoader.
+    * @see SecureClassLoader
+    */
+   public URLClassLoader(URL[] urls) throws SecurityException
+   {
+     super();
+     this.factory = null;
+     this.securityContext = null;
+     addURLs(urls);
+   }
+ 
+   /**
+    * Creates a <code>URLClassLoader</code> that gets classes from the supplied
+    * <code>URL</code>s.
+    * To determine if this classloader may be created the constructor of
+    * the super class (<code>SecureClassLoader</code>) is called first, which
+    * can throw a SecurityException. Then the supplied URLs are added
+    * in the order given to the URLClassLoader which uses these URLs to
+    * load classes and resources (after using the supplied parent ClassLoader).
+    * @param urls Locations that should be searched by this ClassLoader when
+    * resolving Classes or Resources.
+    * @param parent The parent class loader used before trying this class
+    * loader.
+    * @exception SecurityException if the SecurityManager disallows the
+    * creation of a ClassLoader.
+    * @exception SecurityException
+    * @see SecureClassLoader
+    */
+   public URLClassLoader(URL[] urls, ClassLoader parent)
+     throws SecurityException
+   {
+     super(parent);
+     this.factory = null;
+     this.securityContext = null;
+     addURLs(urls);
+   }
+ 
+   // Package-private to avoid a trampoline constructor.
+   /**
+    * Package-private constructor used by the static
+    * <code>newInstance(URL[])</code> method.  Creates an
+    * <code>URLClassLoader</code> with the given parent but without any
+    * <code>URL</code>s yet. This is used to bypass the normal security
+    * check for creating classloaders, but remembers the security
+    * context which will be used when defining classes.  The
+    * <code>URL</code>s to load from must be added by the
+    * <code>newInstance()</code> method in the security context of the
+    * caller.
+    *
+    * @param securityContext the security context of the unprivileged code.
+    */
+   URLClassLoader(ClassLoader parent, AccessControlContext securityContext)
+   {
+     super(parent);
+     this.factory = null;
+     this.securityContext = securityContext;
+   }
+ 
+   /**
+    * Creates a URLClassLoader that gets classes from the supplied URLs.
+    * To determine if this classloader may be created the constructor of
+    * the super class (<CODE>SecureClassLoader</CODE>) is called first, which
+    * can throw a SecurityException. Then the supplied URLs are added
+    * in the order given to the URLClassLoader which uses these URLs to
+    * load classes and resources (after using the supplied parent ClassLoader).
+    * It will use the supplied <CODE>URLStreamHandlerFactory</CODE> to get the
+    * protocol handlers of the supplied URLs.
+    * @param urls Locations that should be searched by this ClassLoader when
+    * resolving Classes or Resources.
+    * @param parent The parent class loader used before trying this class
+    * loader.
+    * @param factory Used to get the protocol handler for the URLs.
+    * @exception SecurityException if the SecurityManager disallows the
+    * creation of a ClassLoader.
+    * @exception SecurityException
+    * @see SecureClassLoader
+    */
+   public URLClassLoader(URL[] urls, ClassLoader parent,
+                         URLStreamHandlerFactory factory)
+     throws SecurityException
+   {
+     super(parent);
+     this.securityContext = null;
+     this.factory = factory;
+     addURLs(urls);
+ 
+     // If this factory is still not in factoryCache, add it,
+     //   since we only support three protocols so far, 5 is enough
+     //   for cache initial size
+     synchronized (factoryCache)
+       {
+         if (factory != null && factoryCache.get(factory) == null)
+           factoryCache.put(factory, new HashMap(5));
+       }
+   }
+ 
+   // Methods
+ 
+   /**
+    * Adds a new location to the end of the internal URL store.
+    * @param newUrl the location to add
+    */
+   protected void addURL(URL newUrl)
+   {
+     urls.add(newUrl);
+     addURLImpl(newUrl);
+   }
+ 
+   private void addURLImpl(URL newUrl)
+   {
+     synchronized (this)
+       {
+         if (newUrl == null)
+           return; // Silently ignore...
+ 
+ 	// Reset the toString() value.
+ 	thisString = null;
+ 
+         // Check global cache to see if there're already url loader
+         // for this url.
+         URLLoader loader = (URLLoader) urlloaders.get(newUrl);
+         if (loader == null)
+           {
+             String file = newUrl.getFile();
+             String protocol = newUrl.getProtocol();
+ 
+             // Check that it is not a directory
+             if (! (file.endsWith("/") || file.endsWith(File.separator)))
+               loader = new JarURLLoader(this, newUrl);
+             else if ("file".equals(protocol))
+               loader = new FileURLLoader(this, newUrl);
+             else
+               loader = new RemoteURLLoader(this, newUrl);
+ 
+             // Cache it.
+             urlloaders.put(newUrl, loader);
+           }
+ 
+ 	urlinfos.add(loader);
+ 
+ 	Vector extraUrls = loader.getClassPath();
+ 	if (extraUrls != null)
+ 	  {
+ 	    Iterator it = extraUrls.iterator();
+ 	    while (it.hasNext())
+ 	      {
+ 		URL url = (URL)it.next();
+ 		URLLoader extraLoader = (URLLoader) urlloaders.get(url);
+ 		if (! urlinfos.contains (extraLoader))
+ 		  addURLImpl(url);
+ 	      }
+ 	  }
+ 
+       }
+   }
+ 
+   /**
+    * Adds an array of new locations to the end of the internal URL
+    * store.  Called from the the constructors. Should not call to the
+    * protected addURL() method since that can be overridden and
+    * subclasses are not yet in a good state at this point.
+    * jboss 4.0.3 for example depends on this.
+    *
+    * @param newUrls the locations to add
+    */
+   private void addURLs(URL[] newUrls)
+   {
+     for (int i = 0; i < newUrls.length; i++)
+       {
+ 	urls.add(newUrls[i]);
+ 	addURLImpl(newUrls[i]);
+       }
+   }
+ 
+   /**
+    * Look in both Attributes for a given value.  The first Attributes
+    * object, if not null, has precedence.
+    */
+   private String getAttributeValue(Attributes.Name name, Attributes first,
+ 				   Attributes second)
+   {
+     String result = null;
+     if (first != null)
+       result = first.getValue(name);
+     if (result == null)
+       result = second.getValue(name);
+     return result;
+   }
+ 
+   /**
+    * Defines a Package based on the given name and the supplied manifest
+    * information. The manifest indicates the title, version and
+    * vendor information of the specification and implementation and whether the
+    * package is sealed. If the Manifest indicates that the package is sealed
+    * then the Package will be sealed with respect to the supplied URL.
+    *
+    * @param name The name of the package
+    * @param manifest The manifest describing the specification,
+    * implementation and sealing details of the package
+    * @param url the code source url to seal the package
+    * @return the defined Package
+    * @throws IllegalArgumentException If this package name already exists
+    * in this class loader
+    */
+   protected Package definePackage(String name, Manifest manifest, URL url)
+     throws IllegalArgumentException
+   {
+     // Compute the name of the package as it may appear in the
+     // Manifest.
+     StringBuffer xform = new StringBuffer(name);
+     for (int i = xform.length () - 1; i >= 0; --i)
+       if (xform.charAt(i) == '.')
+ 	xform.setCharAt(i, '/');
+     xform.append('/');
+     String xformName = xform.toString();
+ 
+     Attributes entryAttr = manifest.getAttributes(xformName);
+     Attributes attr = manifest.getMainAttributes();
+ 
+     String specTitle
+       = getAttributeValue(Attributes.Name.SPECIFICATION_TITLE,
+ 			  entryAttr, attr);
+     String specVersion
+       = getAttributeValue(Attributes.Name.SPECIFICATION_VERSION,
+ 			  entryAttr, attr);
+     String specVendor
+       = getAttributeValue(Attributes.Name.SPECIFICATION_VENDOR,
+ 			  entryAttr, attr);
+     String implTitle
+       = getAttributeValue(Attributes.Name.IMPLEMENTATION_TITLE,
+ 			  entryAttr, attr);
+     String implVersion
+       = getAttributeValue(Attributes.Name.IMPLEMENTATION_VERSION,
+ 			  entryAttr, attr);
+     String implVendor
+       = getAttributeValue(Attributes.Name.IMPLEMENTATION_VENDOR,
+ 			  entryAttr, attr);
+ 
+     // Look if the Manifest indicates that this package is sealed
+     // XXX - most likely not completely correct!
+     // Shouldn't we also check the sealed attribute of the complete jar?
+     // http://java.sun.com/products/jdk/1.4/docs/guide/extensions/spec.html#bundled
+     // But how do we get that jar manifest here?
+     String sealed = attr.getValue(Attributes.Name.SEALED);
+     if ("false".equals(sealed))
+       // make sure that the URL is null so the package is not sealed
+       url = null;
+ 
+     return definePackage(name,
+ 			 specTitle, specVendor, specVersion,
+ 			 implTitle, implVendor, implVersion,
+ 			 url);
+   }
+ 
+   /**
+    * Finds (the first) class by name from one of the locations. The locations
+    * are searched in the order they were added to the URLClassLoader.
+    *
+    * @param className the classname to find
+    * @exception ClassNotFoundException when the class could not be found or
+    * loaded
+    * @return a Class object representing the found class
+    */
+   protected Class findClass(final String className)
+     throws ClassNotFoundException
+   {
+     // Just try to find the resource by the (almost) same name
+     String resourceName = className.replace('.', '/') + ".class";
+     Resource resource = findURLResource(resourceName);
+     if (resource == null)
+       throw new ClassNotFoundException(className + " not found in " + this);
+ 
+     // Try to read the class data, create the CodeSource, Package and
+     // construct the class (and watch out for those nasty IOExceptions)
+     try
+       {
+ 	byte[] data;
+ 	InputStream in = resource.getInputStream();
+ 	try
+ 	  {
+ 	    int length = resource.getLength();
+ 	    if (length != -1)
+ 	      {
+ 		// We know the length of the data.
+ 		// Just try to read it in all at once
+ 		data = new byte[length];
+ 		int pos = 0;
+ 		while (length - pos > 0)
+ 		  {
+ 		    int len = in.read(data, pos, length - pos);
+ 		    if (len == -1)
+ 		      throw new EOFException("Not enough data reading from: "
+ 					     + in);
+ 		    pos += len;
+ 		  }
+ 	      }
+ 	    else
+ 	      {
+ 		// We don't know the data length.
+ 		// Have to read it in chunks.
+ 		ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
+ 		byte[] b = new byte[4096];
+ 		int l = 0;
+ 		while (l != -1)
+ 		  {
+ 		    l = in.read(b);
+ 		    if (l != -1)
+ 		      out.write(b, 0, l);
+ 		  }
+ 		data = out.toByteArray();
+ 	      }
+ 	  }
+ 	finally
+ 	  {
+ 	    in.close();
+ 	  }
+ 	final byte[] classData = data;
+ 
+         // Now get the CodeSource
+         final CodeSource source = resource.getCodeSource();
+ 
+         // Find out package name
+         String packageName = null;
+         int lastDot = className.lastIndexOf('.');
+         if (lastDot != -1)
+           packageName = className.substring(0, lastDot);
+ 
+         if (packageName != null && getPackage(packageName) == null)
+           {
+             // define the package
+             Manifest manifest = resource.loader.getManifest();
+             if (manifest == null)
+               definePackage(packageName, null, null, null, null, null, null,
+                             null);
+             else
+               definePackage(packageName, manifest, resource.loader.baseURL);
+           }
+ 
+         // And finally construct the class!
+         SecurityManager sm = System.getSecurityManager();
+         Class result = null;
+         if (sm != null && securityContext != null)
+           {
+             result = (Class)AccessController.doPrivileged
+               (new PrivilegedAction()
+                 {
+                   public Object run()
+                   {
+                     return defineClass(className, classData,
+                                        0, classData.length,
+                                        source);
+                   }
+                 }, securityContext);
+           }
+         else
+           result = defineClass(className, classData, 0, classData.length, source);
+ 
+         // Avoid NullPointerExceptions.
+         Certificate[] resourceCertificates = resource.getCertificates();
+         if(resourceCertificates != null)
+           super.setSigners(result, resourceCertificates);
+         
+         return result;
+       }
+     catch (IOException ioe)
+       {
+ 	ClassNotFoundException cnfe;
+ 	cnfe = new ClassNotFoundException(className + " not found in " + this);
+ 	cnfe.initCause(ioe);
+ 	throw cnfe;
+       }
+   }
+   
+   // Cached String representation of this URLClassLoader
+   private String thisString;
+   
+   /**
+    * Returns a String representation of this URLClassLoader giving the
+    * actual Class name, the URLs that are searched and the parent
+    * ClassLoader.
+    */
+   public String toString()
+   {
+     synchronized (this)
+       {
+ 	if (thisString == null)
+ 	  {
+ 	    StringBuffer sb = new StringBuffer();
+ 	    sb.append(this.getClass().getName());
+ 	    sb.append("{urls=[" );
+ 	    URL[] thisURLs = getURLs();
+ 	    for (int i = 0; i < thisURLs.length; i++)
+ 	      {
+ 		sb.append(thisURLs[i]);
+ 		if (i < thisURLs.length - 1)
+ 		  sb.append(',');
+ 	      }
+ 	    sb.append(']');
+ 	    sb.append(", parent=");
+ 	    sb.append(getParent());
+ 	    sb.append('}');
+ 	    thisString = sb.toString();
+ 	  }
+ 	return thisString;
+       }
+   }
+ 
+   /**
+    * Finds the first occurrence of a resource that can be found. The locations
+    * are searched in the order they were added to the URLClassLoader.
+    *
+    * @param resourceName the resource name to look for
+    * @return the URLResource for the resource if found, null otherwise
+    */
+   private Resource findURLResource(String resourceName)
+   {
+     int max = urlinfos.size();
+     for (int i = 0; i < max; i++)
+       {
+         URLLoader loader = (URLLoader) urlinfos.elementAt(i);
+         if (loader == null)
+           continue;
+ 
+         Resource resource = loader.getResource(resourceName);
+         if (resource != null)
+           return resource;
+       }
+     return null;
+   }
+ 
+   /**
+    * Finds the first occurrence of a resource that can be found.
+    *
+    * @param resourceName the resource name to look for
+    * @return the URL if found, null otherwise
+    */
+   public URL findResource(String resourceName)
+   {
+     Resource resource = findURLResource(resourceName);
+     if (resource != null)
+       return resource.getURL();
+ 
+     // Resource not found
+     return null;
+   }
+ 
+   /**
+    * If the URLStreamHandlerFactory has been set this return the appropriate
+    * URLStreamHandler for the given protocol, if not set returns null.
+    *
+    * @param protocol the protocol for which we need a URLStreamHandler
+    * @return the appropriate URLStreamHandler or null
+    */
+   URLStreamHandler getURLStreamHandler(String protocol)
+   {
+     if (factory == null)
+       return null;
+ 
+     URLStreamHandler handler;
+     synchronized (factoryCache)
+       {
+         // Check if there're handler for the same protocol in cache.
+         HashMap cache = (HashMap) factoryCache.get(factory);
+         handler = (URLStreamHandler) cache.get(protocol);
+         if (handler == null)
+           {
+             // Add it to cache.
+             handler = factory.createURLStreamHandler(protocol);
+             cache.put(protocol, handler);
+           }
+       }
+     return handler;
+   }
+ 
+   /**
+    * Finds all the resources with a particular name from all the locations.
+    *
+    * @param resourceName the name of the resource to lookup
+    * @return a (possible empty) enumeration of URLs where the resource can be
+    * found
+    * @exception IOException when an error occurs accessing one of the
+    * locations
+    */
+   public Enumeration findResources(String resourceName)
+     throws IOException
+   {
+     Vector resources = new Vector();
+     int max = urlinfos.size();
+     for (int i = 0; i < max; i++)
+       {
+         URLLoader loader = (URLLoader) urlinfos.elementAt(i);
+         Resource resource = loader.getResource(resourceName);
+         if (resource != null)
+           resources.add(resource.getURL());
+       }
+     return resources.elements();
+   }
+ 
+   /**
+    * Returns the permissions needed to access a particular code
+    * source.  These permissions includes those returned by
+    * <code>SecureClassLoader.getPermissions()</code> and the actual
+    * permissions to access the objects referenced by the URL of the
+    * code source.  The extra permissions added depend on the protocol
+    * and file portion of the URL in the code source. If the URL has
+    * the "file" protocol ends with a '/' character then it must be a
+    * directory and a file Permission to read everything in that
+    * directory and all subdirectories is added. If the URL had the
+    * "file" protocol and doesn't end with a '/' character then it must
+    * be a normal file and a file permission to read that file is
+    * added. If the <code>URL</code> has any other protocol then a
+    * socket permission to connect and accept connections from the host
+    * portion of the URL is added.
+    *
+    * @param source The codesource that needs the permissions to be accessed
+    * @return the collection of permissions needed to access the code resource
+    * @see java.security.SecureClassLoader#getPermissions(CodeSource)
+    */
+   protected PermissionCollection getPermissions(CodeSource source)
+   {
+     // XXX - This implementation does exactly as the Javadoc describes.
+     // But maybe we should/could use URLConnection.getPermissions()?
+     // First get the permissions that would normally be granted
+     PermissionCollection permissions = super.getPermissions(source);
+ 
+     // Now add any extra permissions depending on the URL location.
+     URL url = source.getLocation();
+     String protocol = url.getProtocol();
+     if (protocol.equals("file"))
+       {
+         String file = url.getFile();
+ 
+         // If the file end in / it must be an directory.
+         if (file.endsWith("/") || file.endsWith(File.separator))
+           {
+             // Grant permission to read everything in that directory and
+             // all subdirectories.
+             permissions.add(new FilePermission(file + "-", "read"));
+           }
+         else
+           {
+             // It is a 'normal' file.
+             // Grant permission to access that file.
+             permissions.add(new FilePermission(file, "read"));
+           }
+       }
+     else
+       {
+         // Grant permission to connect to and accept connections from host
+         String host = url.getHost();
+         if (host != null)
+           permissions.add(new SocketPermission(host, "connect,accept"));
+       }
+ 
+     return permissions;
+   }
+ 
+   /**
+    * Returns all the locations that this class loader currently uses the
+    * resolve classes and resource. This includes both the initially supplied
+    * URLs as any URLs added later by the loader.
+    * @return All the currently used URLs
+    */
+   public URL[] getURLs()
+   {
+     return (URL[]) urls.toArray(new URL[urls.size()]);
+   }
+ 
+   /**
+    * Creates a new instance of a <code>URLClassLoader</code> that gets
+    * classes from the supplied <code>URL</code>s. This class loader
+    * will have as parent the standard system class loader.
+    *
+    * @param urls the initial URLs used to resolve classes and
+    * resources
+    *
+    * @return the class loader
+    *
+    * @exception SecurityException when the calling code does not have
+    * permission to access the given <code>URL</code>s
+    */
+   public static URLClassLoader newInstance(URL[] urls)
+     throws SecurityException
+   {
+     return newInstance(urls, null);
+   }
+ 
+   /**
+    * Creates a new instance of a <code>URLClassLoader</code> that gets
+    * classes from the supplied <code>URL</code>s and with the supplied
+    * loader as parent class loader.
+    *
+    * @param urls the initial URLs used to resolve classes and
+    * resources
+    * @param parent the parent class loader
+    *
+    * @return the class loader
+    *
+    * @exception SecurityException when the calling code does not have
+    * permission to access the given <code>URL</code>s
+    */
+   public static URLClassLoader newInstance(URL[] urls, final ClassLoader parent)
+     throws SecurityException
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm == null)
+       return new URLClassLoader(urls, parent);
+     else
+       {
+         final Object securityContext = sm.getSecurityContext();
+ 
+         // XXX - What to do with anything else then an AccessControlContext?
+         if (! (securityContext instanceof AccessControlContext))
+           throw new SecurityException("securityContext must be AccessControlContext: "
+                                       + securityContext);
+ 
+         URLClassLoader loader =
+           (URLClassLoader) AccessController.doPrivileged(new PrivilegedAction()
+               {
+                 public Object run()
+                 {
+                   return new URLClassLoader(parent,
+                                             (AccessControlContext) securityContext);
+                 }
+               });
+         loader.addURLs(urls);
+         return loader;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/URLConnection.java gcc-4.1.0/libjava/classpath/java/net/URLConnection.java
*** gcc-4.0.2/libjava/classpath/java/net/URLConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/URLConnection.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1021 ----
+ /* URLConnection.java -- Abstract superclass for reading from URL's
+    Copyright (C) 1998, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.security.AllPermission;
+ import java.security.Permission;
+ import java.text.ParsePosition;
+ import java.text.SimpleDateFormat;
+ import java.util.Collections;
+ import java.util.Date;
+ import java.util.Locale;
+ import java.util.Map;
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  One guessContentTypeFrom... methods not implemented.
+  *    getContent method assumes content type from response; see comment there.
+  */
+ /**
+  * This class models a connection that retrieves the information pointed
+  * to by a URL object.  This is typically a connection to a remote node
+  * on the network, but could be a simple disk read.
+  * <p>
+  * A URLConnection object is normally created by calling the openConnection()
+  * method of a URL object.  This method is somewhat misnamed because it does
+  * not actually open the connection.  Instead, it return an unconnected
+  * instance of this object.  The caller then has the opportunity to set
+  * various connection options prior to calling the actual connect() method.
+  * <p>
+  * After the connection has been opened, there are a number of methods in
+  * this class that access various attributes of the data, typically
+  * represented by headers sent in advance of the actual data itself.
+  * <p>
+  * Also of note are the getInputStream and getContent() methods which allow
+  * the caller to retrieve the actual data from the connection.  Note that
+  * for some types of connections, writing is also allowed.  The setDoOutput()
+  * method must be called prior to connecing in order to enable this, then
+  * the getOutputStream method called after the connection in order to
+  * obtain a stream to write the output to.
+  * <p>
+  * The getContent() method is of particular note.  This method returns an
+  * Object that encapsulates the data returned.  There is no way do determine
+  * the type of object that will be returned in advance.  This is determined
+  * by the actual content handlers as described in the description of that
+  * method.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public abstract class URLConnection
+ {
+   /**
+    * This is an object that maps filenames to MIME types.  The interface
+    * to do this is implemented by this class, so just create an empty
+    * instance and store it here.
+    */
+   private static FileNameMap fileNameMap;
+ 
+   /**
+    * This is the ContentHandlerFactory set by the caller, if any
+    */
+   private static ContentHandlerFactory factory;
+ 
+   /**
+    * This is the default value that will be used to determine whether or
+    * not user interaction should be allowed.
+    */
+   private static boolean defaultAllowUserInteraction;
+ 
+   /**
+    * This is the default flag indicating whether or not to use caches to
+    * store the data returned from a server
+    */
+   private static boolean defaultUseCaches = true;
+ 
+   /**
+    * This variable determines whether or not interaction is allowed with
+    * the user.  For example, to prompt for a username and password.
+    */
+   protected boolean allowUserInteraction;
+ 
+   /**
+    * Indicates whether or not a connection has been established to the
+    * destination specified in the URL
+    */
+   protected boolean connected;
+ 
+   /**
+    * Indicates whether or not input can be read from this URL
+    */
+   protected boolean doInput = true;
+ 
+   /**
+    * Indicates whether or not output can be sent to this URL
+    */
+   protected boolean doOutput;
+ 
+   /**
+    * If this flag is set, the protocol is allowed to cache data whenever
+    * it can (caching is not guaranteed). If it is not set, the protocol
+    * must a get a fresh copy of the data.
+    * <p>
+    * This field is set by the setUseCaches method and returned by the
+    * getUseCaches method.
+    *
+    * Its default value is that determined by the last invocation of
+    * setDefaultUseCaches
+    */
+   protected boolean useCaches;
+ 
+   /**
+    * If this value is non-zero, then the connection will only attempt to
+    * fetch the document pointed to by the URL if the document has been
+    * modified more recently than the date set in this variable.  That date
+    * should be specified as the number of seconds since 1/1/1970 GMT.
+    */
+   protected long ifModifiedSince;
+ 
+   /**
+    * This is the URL associated with this connection
+    */
+   protected URL url;
+   private static SimpleDateFormat[] dateFormats;
+   private static boolean dateformats_initialized;
+ 
+   /* Cached ParsePosition, used when parsing dates. */
+   private ParsePosition position;
+ 
+   /**
+    * Creates a URL connection to a given URL. A real connection is not made.
+    * Use #connect to do this.
+    *
+    * @param url The Object to create the URL connection to
+    *
+    * @see URLConnection#connect()
+    */
+   protected URLConnection(URL url)
+   {
+     // Set up all our instance variables
+     this.url = url;
+     allowUserInteraction = defaultAllowUserInteraction;
+     useCaches = defaultUseCaches;
+   }
+ 
+   /**
+    * Establishes the actual connection to the URL associated with this
+    * connection object
+    *
+    * @exception IOException if an error occurs
+    */
+   public abstract void connect() throws IOException;
+ 
+   /**
+    * Returns the URL object associated with this connection
+    *
+    * @return The URL for this connection.
+    */
+   public URL getURL()
+   {
+     return url;
+   }
+ 
+   /**
+    * Returns the value of the content-length header field or -1 if the value
+    * is not known or not present.
+    *
+    * @return The content-length field
+    */
+   public int getContentLength()
+   {
+     return getHeaderFieldInt("content-length", -1);
+   }
+ 
+   /**
+    * Returns the the content-type of the data pointed to by the URL.  This
+    * method first tries looking for a content-type header.  If that is not
+    * present, it attempts to use the file name to determine the content's
+    * MIME type.  If that is unsuccessful, the method returns null.  The caller
+    * may then still attempt to determine the MIME type by a call to
+    * guessContentTypeFromStream()
+    *
+    * @return The content MIME type
+    */
+   public String getContentType()
+   {
+     return getHeaderField("content-type");
+   }
+ 
+   /**
+    * Returns the value of the content-encoding field or null if it is not
+    * known or not present.
+    *
+    * @return The content-encoding field
+    */
+   public String getContentEncoding()
+   {
+     return getHeaderField("content-encoding");
+   }
+ 
+   /**
+    * Returns the value of the expires header or 0 if not known or present.
+    * If populated, the return value is number of seconds since midnight
+    * on 1/1/1970 GMT.
+    *
+    * @return The expiration time.
+    */
+   public long getExpiration()
+   {
+     return getHeaderFieldDate("expires", 0L);
+   }
+ 
+   /**
+    * Returns the date of the document pointed to by the URL as reported in
+    * the date field of the header or 0 if the value is not present or not
+    * known. If populated, the return value is number of seconds since
+    * midnight on 1/1/1970 GMT.
+    *
+    * @return The document date
+    */
+   public long getDate()
+   {
+     return getHeaderFieldDate("date", 0L);
+   }
+ 
+   /**
+    * Returns the value of the last-modified header field or 0 if not known known
+    * or not present.  If populated, the return value is the number of seconds
+    * since midnight on 1/1/1970.
+    *
+    * @return The last modified time
+    */
+   public long getLastModified()
+   {
+     return getHeaderFieldDate("last-modified", 0L);
+   }
+ 
+   /**
+    * Return a String representing the header value at the specified index.
+    * This allows the caller to walk the list of header fields.  The analogous
+    * getHeaderFieldKey(int) method allows access to the corresponding key
+    * for this header field
+    *
+    * @param index The index into the header field list to retrieve the value for
+    *
+    * @return The header value or null if index is past the end of the headers
+    */
+   public String getHeaderField(int index)
+   {
+     // Subclasses for specific protocols override this.
+     return null;
+   }
+ 
+   /**
+    * Returns a String representing the value of the header field having
+    * the named key.  Returns null if the header field does not exist.
+    *
+    * @param name The key of the header field
+    *
+    * @return The value of the header field as a String
+    */
+   public String getHeaderField(String name)
+   {
+     // Subclasses for specific protocols override this.
+     return null;
+   }
+ 
+   /**
+    * Returns a map of all sent header fields
+    *
+    * @return all header fields
+    *
+    * @since 1.4
+    */
+   public Map getHeaderFields()
+   {
+     // Subclasses for specific protocols override this.
+     return Collections.EMPTY_MAP;
+   }
+ 
+   /**
+    * Returns the value of the named header field as an int.  If the field
+    * is not present or cannot be parsed as an integer, the default value
+    * will be returned.
+    *
+    * @param name The header field key to lookup
+    * @param defaultValue The defaule value if the header field is not found
+    * or can't be parsed.
+    *
+    * @return The value of the header field or the default value if the field
+    * is missing or malformed
+    */
+   public int getHeaderFieldInt(String name, int defaultValue)
+   {
+     String value = getHeaderField(name);
+ 
+     if (value == null)
+       return defaultValue;
+ 
+     try
+       {
+ 	return Integer.parseInt(value);
+       }
+     catch (NumberFormatException e)
+       {
+ 	return defaultValue;
+       }
+   }
+ 
+   /**
+    * Returns the value of the named header field as a date.  This date will
+    * be the number of seconds since midnight 1/1/1970 GMT or the default
+    * value if the field is not present or cannot be converted to a date.
+    *
+    * @param name The name of the header field
+    * @param defaultValue The default date if the header field is not found
+    * or can't be converted.
+    *
+    * @return Returns the date value of the header filed or the default value
+    * if the field is missing or malformed
+    */
+   public long getHeaderFieldDate(String name, long defaultValue)
+   {
+     if (! dateformats_initialized)
+       initializeDateFormats();
+ 
+     if (position == null)
+       position = new ParsePosition(0);
+ 
+     long result = defaultValue;
+     String str = getHeaderField(name);
+ 
+     if (str != null)
+       {
+ 	for (int i = 0; i < dateFormats.length; i++)
+ 	  {
+ 	    SimpleDateFormat df = dateFormats[i];
+ 	    position.setIndex(0);
+ 	    position.setErrorIndex(0);
+ 	    Date date = df.parse(str, position);
+ 	    if (date != null)
+ 	      return date.getTime();
+ 	  }
+       }
+ 
+     return result;
+   }
+ 
+   /**
+    * Returns a String representing the header key at the specified index.
+    * This allows the caller to walk the list of header fields.  The analogous
+    * getHeaderField(int) method allows access to the corresponding value for
+    * this tag.
+    *
+    * @param index The index into the header field list to retrieve the key for.
+    *
+    * @return The header field key or null if index is past the end
+    * of the headers.
+    */
+   public String getHeaderFieldKey(int index)
+   {
+     // Subclasses for specific protocols override this.
+     return null;
+   }
+ 
+   /**
+    * This method returns the content of the document pointed to by the
+    * URL as an Object.  The type of object depends on the MIME type of
+    * the object and particular content hander loaded.  Most text type
+    * content handlers will return a subclass of
+    * <code>InputStream</code>.  Images usually return a class that
+    * implements <code>ImageProducer</code>.  There is not guarantee
+    * what type of object will be returned, however.
+    *
+    * <p>This class first determines the MIME type of the content, then
+    * creates a ContentHandler object to process the input.  If the
+    * <code>ContentHandlerFactory</code> is set, then that object is
+    * called to load a content handler, otherwise a class called
+    * gnu.java.net.content.&lt;content_type&gt; is tried.  If this
+    * handler does not exist, the method will simple return the
+    * <code>InputStream</code> returned by
+    * <code>getInputStream()</code>.  Note that the default
+    * implementation of <code>getInputStream()</code> throws a
+    * <code>UnknownServiceException</code> so subclasses are encouraged
+    * to override this method.</p>
+    *
+    * @return the content
+    *
+    * @exception IOException If an error with the connection occurs.
+    * @exception UnknownServiceException If the protocol does not support the
+    * content type at all.
+    */
+   public Object getContent() throws IOException
+   {
+     if (!connected)
+       connect();
+ 
+     // FIXME: Doc indicates that other criteria should be applied as
+     // heuristics to determine the true content type, e.g. see 
+     // guessContentTypeFromName() and guessContentTypeFromStream methods
+     // as well as FileNameMap class & fileNameMap field & get/set methods.
+     String type = getContentType();
+     ContentHandler ch = getContentHandler(type);
+ 
+     if (ch != null)
+       return ch.getContent(this);
+ 
+     return getInputStream();
+   }
+ 
+   /**
+    * Retrieves the content of this URLConnection
+    *
+    * @param classes The allowed classes for the content
+    *
+    * @return the content
+    *
+    * @exception IOException If an error occurs
+    * @exception UnknownServiceException If the protocol does not support the
+    * content type
+    */
+   public Object getContent(Class[] classes) throws IOException
+   {
+     // FIXME: implement this
+     return getContent();
+   }
+ 
+   /**
+    * This method returns a <code>Permission</code> object representing the
+    * permissions required to access this URL.  This method returns
+    * <code>java.security.AllPermission</code> by default.  Subclasses should
+    * override it to return a more specific permission.  For example, an
+    * HTTP URL should return an instance of <code>SocketPermission</code>
+    * for the appropriate host and port.
+    * <p>
+    * Note that because of items such as HTTP redirects, the permission
+    * object returned might be different before and after connecting.
+    *
+    * @return A Permission object
+    *
+    * @exception IOException If the computation of the permission requires
+    * network or file I/O and an exception occurs while computing it
+    */
+   public Permission getPermission() throws IOException
+   {
+     // Subclasses may override this.
+     return new AllPermission();
+   }
+ 
+   /**
+    * Returns an InputStream for this connection.  As this default
+    * implementation returns null, subclasses should override this method
+    *
+    * @return An InputStream for this connection
+    *
+    * @exception IOException If an error occurs
+    * @exception UnknownServiceException If the protocol does not support input
+    */
+   public InputStream getInputStream() throws IOException
+   {
+     // Subclasses for specific protocols override this.
+     throw new UnknownServiceException("Protocol " + url.getProtocol()
+                                       + " does not support input.");
+   }
+ 
+   /**
+    * Returns an OutputStream for this connection.  As this default
+    * implementation returns null, subclasses should override this method
+    *
+    * @return An OutputStream for this connection
+    *
+    * @exception IOException If an error occurs
+    * @exception UnknownServiceException If the protocol does not support output
+    */
+   public OutputStream getOutputStream() throws IOException
+   {
+     // Subclasses for specific protocols override this.
+     throw new UnknownServiceException("Protocol " + url.getProtocol()
+                                       + " does not support output.");
+   }
+ 
+   /**
+    * The methods prints the value of this object as a String by calling the
+    * toString() method of its associated URL.  Overrides Object.toString()
+    *
+    * @return A String representation of this object
+    */
+   public String toString()
+   {
+     return this.getClass().getName() + ":" + url.toString();
+   }
+ 
+   /**
+    * Sets the value of a flag indicating whether or not input is going
+    * to be done for this connection.  This default to true unless the
+    * doOutput flag is set to false, in which case this defaults to false.
+    *
+    * @param input <code>true</code> if input is to be done,
+    * <code>false</code> otherwise
+    *
+    * @exception IllegalStateException If already connected
+    */
+   public void setDoInput(boolean input)
+   {
+     if (connected)
+       throw new IllegalStateException("Already connected");
+ 
+     doInput = input;
+   }
+ 
+   /**
+    * Returns the value of a flag indicating whether or not input is going
+    * to be done for this connection.  This default to true unless the
+    * doOutput flag is set to false, in which case this defaults to false.
+    *
+    * @return true if input is to be done, false otherwise
+    */
+   public boolean getDoInput()
+   {
+     return doInput;
+   }
+ 
+   /**
+    * Sets a boolean flag indicating whether or not output will be done
+    * on this connection.  The default value is false, so this method can
+    * be used to override the default
+    *
+    * @param output ture if output is to be done, false otherwise
+    *
+    * @exception IllegalStateException If already connected
+    */
+   public void setDoOutput(boolean output)
+   {
+     if (connected)
+       throw new IllegalStateException("Already connected");
+ 
+     doOutput = output;
+   }
+ 
+   /**
+    * Returns a boolean flag indicating whether or not output will be done
+    * on this connection.  This defaults to false.
+    *
+    * @return true if output is to be done, false otherwise
+    */
+   public boolean getDoOutput()
+   {
+     return doOutput;
+   }
+ 
+   /**
+    * Sets a boolean flag indicating whether or not user interaction is
+    * allowed for this connection.  (For example, in order to prompt for
+    * username and password info.
+    *
+    * @param allow true if user interaction should be allowed, false otherwise.
+    *
+    * @exception IllegalStateException If already connected
+    */
+   public void setAllowUserInteraction(boolean allow)
+   {
+     allowUserInteraction = allow;
+   }
+ 
+   /**
+    * Returns a boolean flag indicating whether or not user interaction is
+    * allowed for this connection.  (For example, in order to prompt for
+    * username and password info.
+    *
+    * @return true if user interaction is allowed, false otherwise
+    */
+   public boolean getAllowUserInteraction()
+   {
+     return allowUserInteraction;
+   }
+ 
+   /**
+    * Sets the default flag for whether or not interaction with a user
+    * is allowed.  This will be used for all connections unless overridden
+    *
+    * @param allow true to allow user interaction, false otherwise
+    */
+   public static void setDefaultAllowUserInteraction(boolean allow)
+   {
+     defaultAllowUserInteraction = allow;
+   }
+ 
+   /**
+    * Returns the default flag for whether or not interaction with a user
+    * is allowed.  This will be used for all connections unless overridden
+    *
+    * @return true if user interaction is allowed, false otherwise
+    */
+   public static boolean getDefaultAllowUserInteraction()
+   {
+     return defaultAllowUserInteraction;
+   }
+ 
+   /**
+    * Sets a boolean flag indicating whether or not caching will be used
+    * (if possible) to store data downloaded via the connection.
+    *
+    * @param usecaches The new value
+    *
+    * @exception IllegalStateException If already connected
+    */
+   public void setUseCaches(boolean usecaches)
+   {
+     if (connected)
+       throw new IllegalStateException("Already connected");
+ 
+     useCaches = usecaches;
+   }
+ 
+   /**
+    * Returns a boolean flag indicating whether or not caching will be used
+    * (if possible) to store data downloaded via the connection.
+    *
+    * @return true if caching should be used if possible, false otherwise
+    */
+   public boolean getUseCaches()
+   {
+     return useCaches;
+   }
+ 
+   /**
+    * Sets the ifModified since instance variable.  If this value is non
+    * zero and the underlying protocol supports it, the actual document will
+    * not be fetched unless it has been modified since this time.  The value
+    * passed should  be 0 if this feature is to be disabled or the time expressed
+    * as the number of seconds since midnight 1/1/1970 GMT otherwise.
+    *
+    * @param ifmodifiedsince The new value in milliseconds
+    * since January 1, 1970 GMT
+    *
+    * @exception IllegalStateException If already connected
+    */
+   public void setIfModifiedSince(long ifmodifiedsince)
+   {
+     if (connected)
+       throw new IllegalStateException("Already connected");
+ 
+     ifModifiedSince = ifmodifiedsince;
+   }
+ 
+   /**
+    * Returns the ifModified since instance variable.  If this value is non
+    * zero and the underlying protocol supports it, the actual document will
+    * not be fetched unless it has been modified since this time.  The value
+    * returned will be 0 if this feature is disabled or the time expressed
+    * as the number of seconds since midnight 1/1/1970 GMT otherwise
+    *
+    * @return The ifModifiedSince value
+    */
+   public long getIfModifiedSince()
+   {
+     return ifModifiedSince;
+   }
+ 
+   /**
+    * Returns the default value used to determine whether or not caching
+    * of documents will be done when possible.
+    *
+    * @return true if caches will be used, false otherwise
+    */
+   public boolean getDefaultUseCaches()
+   {
+     return defaultUseCaches;
+   }
+ 
+   /**
+    * Sets the default value used to determine whether or not caching
+    * of documents will be done when possible.
+    *
+    * @param use true to use caches if possible by default, false otherwise
+    */
+   public void setDefaultUseCaches(boolean use)
+   {
+     defaultUseCaches = use;
+   }
+ 
+   /**
+    * Sets the value of the named request property
+    *
+    * @param key The name of the property
+    * @param value The value of the property
+    *
+    * @exception IllegalStateException If already connected
+    * @exception NullPointerException If key is null
+    *
+    * @see URLConnection#getRequestProperty(String key)
+    * @see URLConnection#addRequestProperty(String key, String value)
+    *
+    * @since 1.4
+    */
+   public void setRequestProperty(String key, String value)
+   {
+     if (connected)
+       throw new IllegalStateException("Already connected");
+ 
+     if (key == null)
+       throw new NullPointerException("key is null");
+ 
+     // Do nothing unless overridden by subclasses that support setting
+     // header fields in the request.
+   }
+ 
+   /**
+    * Adds a new request property by a key/value pair.
+    * This method does not overwrite existing properties with the same key.
+    *
+    * @param key Key of the property to add
+    * @param value Value of the Property to add
+    *
+    * @exception IllegalStateException If already connected
+    * @exception NullPointerException If key is null
+    *
+    * @see URLConnection#getRequestProperty(String key)
+    * @see URLConnection#setRequestProperty(String key, String value)
+    *
+    * @since 1.4
+    */
+   public void addRequestProperty(String key, String value)
+   {
+     if (connected)
+       throw new IllegalStateException("Already connected");
+ 
+     if (key == null)
+       throw new NullPointerException("key is null");
+ 
+     // Do nothing unless overridden by subclasses that support adding
+     // header fields in the request.
+   }
+ 
+   /**
+    * Returns the value of the named request property.
+    *
+    * @param key The name of the property
+    *
+    * @return Value of the property
+    *
+    * @exception IllegalStateException If already connected
+    *
+    * @see URLConnection#setRequestProperty(String key, String value)
+    * @see URLConnection#addRequestProperty(String key, String value)
+    */
+   public String getRequestProperty(String key)
+   {
+     if (connected)
+       throw new IllegalStateException("Already connected");
+ 
+     // Overridden by subclasses that support reading header fields from the
+     // request.
+     return null;
+   }
+ 
+   /**
+    * Returns an unmodifiable Map containing the request properties.
+    *
+    * @return The map of properties
+    *
+    * @exception IllegalStateException If already connected
+    *
+    * @since 1.4
+    */
+   public Map getRequestProperties()
+   {
+     if (connected)
+       throw new IllegalStateException("Already connected");
+ 
+     // Overridden by subclasses that support reading header fields from the
+     // request.
+     return Collections.EMPTY_MAP;
+   }
+ 
+   /**
+    * Sets the default value of a request property.  This will be used
+    * for all connections unless the value of the property is manually
+    * overridden.
+    *
+    * @param key The request property name the default is being set for
+    * @param value The value to set the default to
+    *
+    * @deprecated 1.3 The method setRequestProperty should be used instead.
+    * This method does nothing now.
+    *
+    * @see URLConnection#setRequestProperty(String key, String value)
+    */
+   public static void setDefaultRequestProperty(String key, String value)
+   {
+     // This method does nothing since JDK 1.3.
+   }
+ 
+   /**
+    * Returns the default value of a request property.  This will be used
+    * for all connections unless the value of the property is manually
+    * overridden.
+    *
+    * @param key The request property to return the default value of
+    *
+    * @return The value of the default property or null if not available
+    *
+    * @deprecated 1.3 The method getRequestProperty should be used instead.
+    * This method does nothing now.
+    *
+    * @see URLConnection#getRequestProperty(String key)
+    */
+   public static String getDefaultRequestProperty(String key)
+   {
+     // This method does nothing since JDK 1.3.
+     return null;
+   }
+ 
+   /**
+    * Sets the ContentHandlerFactory for an application.  This can be called
+    * once and only once.  If it is called again, then an Error is thrown.
+    * Unlike for other set factory methods, this one does not do a security
+    * check prior to setting the factory.
+    *
+    * @param factory The ContentHandlerFactory for this application
+    *
+    * @exception Error If the factory has already been defined
+    * @exception SecurityException If a security manager exists and its
+    * checkSetFactory method doesn't allow the operation
+    */
+   public static synchronized void setContentHandlerFactory(ContentHandlerFactory factory)
+   {
+     if (URLConnection.factory != null)
+       throw new Error("ContentHandlerFactory already set");
+ 
+     // Throw an exception if an extant security mgr precludes
+     // setting the factory.
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkSetFactory();
+ 
+     URLConnection.factory = factory;
+   }
+ 
+   /**
+    * Returns the MIME type of a file based on the name of the file.  This
+    * works by searching for the file's extension in a list of file extensions
+    * and returning the MIME type associated with it.  If no type is found,
+    * then a MIME type of "application/octet-stream" will be returned.
+    *
+    * @param filename The filename to determine the MIME type for
+    *
+    * @return The MIME type String
+    *
+    * @specnote public since JDK 1.4
+    */
+   public static String guessContentTypeFromName(String filename)
+   {
+     return getFileNameMap().getContentTypeFor(filename.toLowerCase());
+   }
+ 
+   /**
+    * Returns the MIME type of a stream based on the first few characters
+    * at the beginning of the stream.  This routine can be used to determine
+    * the MIME type if a server is believed to be returning an incorrect
+    * MIME type.  This method returns "application/octet-stream" if it
+    * cannot determine the MIME type.
+    * <p>
+    * NOTE: Overriding MIME types sent from the server can be obnoxious
+    * to user's.  See Internet Exploder 4 if you don't believe me.
+    *
+    * @param is The InputStream to determine the MIME type from
+    *
+    * @return The MIME type
+    *
+    * @exception IOException If an error occurs
+    */
+   public static String guessContentTypeFromStream(InputStream is)
+     throws IOException
+   {
+     return "application/octet-stream";
+   }
+ 
+   /**
+    * This method returns the <code>FileNameMap</code> object being used
+    * to decode MIME types by file extension.
+    *
+    * @return The <code>FileNameMap</code>.
+    *
+    * @since 1.2
+    */
+   public static synchronized FileNameMap getFileNameMap()
+   {
+     // Delayed initialization.
+     if (fileNameMap == null)
+       fileNameMap = new MimeTypeMapper();
+ 
+     return fileNameMap;
+   }
+ 
+   /**
+    * This method sets the <code>FileNameMap</code> object being used
+    * to decode MIME types by file extension.
+    *
+    * @param map The <code>FileNameMap</code>.
+    *
+    * @exception SecurityException If a security manager exists and its
+    * checkSetFactory method doesn't allow the operation
+    *
+    * @since 1.2
+    */
+   public static synchronized void setFileNameMap(FileNameMap map)
+   {
+     // Throw an exception if an extant security manager precludes
+     // setting the factory.
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkSetFactory();
+ 
+     fileNameMap = map;
+   }
+ 
+   private ContentHandler getContentHandler(String contentType)
+   {
+     // No content type so just handle it as the default.
+     if (contentType == null || contentType.equals(""))
+       return null;
+ 
+     ContentHandler handler = null;
+ 
+     // If a non-default factory has been set, use it.
+     if (factory != null)
+       handler = factory.createContentHandler(contentType);
+ 
+     // Then try our default class.
+     try
+       {
+ 	String typeClass = contentType.replace('/', '.');
+ 
+ 	// Deal with "Content-Type: text/html; charset=ISO-8859-1".
+ 	int parameterBegin = typeClass.indexOf(';');
+ 	if (parameterBegin >= 1)
+ 	  typeClass = typeClass.substring(0, parameterBegin);
+ 
+ 	Class cls = Class.forName("gnu.java.net.content." + typeClass);
+ 	Object obj = cls.newInstance();
+ 
+ 	if (obj instanceof ContentHandler)
+ 	  {
+ 	    handler = (ContentHandler) obj;
+ 	    return handler;
+ 	  }
+       }
+     catch (ClassNotFoundException e)
+       {
+ 	// Ignore.
+       }
+     catch (InstantiationException e)
+       {
+ 	// Ignore.
+       }
+     catch (IllegalAccessException e)
+       {
+ 	// Ignore.
+       }
+ 
+     return handler;
+   }
+   
+   // We don't put these in a static initializer, because it creates problems
+   // with initializer co-dependency: SimpleDateFormat's constructors eventually 
+   // depend on URLConnection (via the java.text.*Symbols classes).
+   private static synchronized void initializeDateFormats()
+   {
+     if (dateformats_initialized)
+       return;
+ 
+     Locale locale = new Locale("En", "Us", "Unix");
+     dateFormats = new SimpleDateFormat[3];
+     dateFormats[0] =
+       new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'", locale);
+     dateFormats[1] =
+       new SimpleDateFormat("EEEE, dd-MMM-yy hh:mm:ss 'GMT'", locale);
+     dateFormats[2] = new SimpleDateFormat("EEE MMM d hh:mm:ss yyyy", locale);
+     dateformats_initialized = true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/URLDecoder.java gcc-4.1.0/libjava/classpath/java/net/URLDecoder.java
*** gcc-4.0.2/libjava/classpath/java/net/URLDecoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/URLDecoder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,180 ----
+ /* URLDecoder.java -- Class to decode URL's from encoded form.
+    Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.UnsupportedEncodingException;
+ 
+ 
+ /**
+  * This utility class contains static methods that converts a
+  * string encoded in the x-www-form-urlencoded format to the original
+  * text.  The x-www-form-urlencoded format replaces certain disallowed
+  * characters with encoded equivalents.  All upper case and lower case
+  * letters in the US alphabet remain as is, the space character (' ')
+  * is replaced with '+' sign, and all other characters are converted to a
+  * "%XX" format where XX is the hexadecimal representation of that character
+  * in a given character encoding (default is "UTF-8").
+  * <p>
+  * This method is very useful for decoding strings sent to CGI scripts
+  *
+  * Written using on-line Java Platform 1.2/1.4 API Specification.
+  * Status:  Believed complete and correct.
+  *
+  * @since 1.2
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com) (documentation comments)
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class URLDecoder
+ {
+   /**
+    * Public contructor. Note that this class has only static methods.
+    */
+   public URLDecoder()
+   {
+   }
+ 
+   /**
+    * This method translates the passed in string from x-www-form-urlencoded
+    * format using the default encoding "UTF-8" to decode the hex encoded
+    * unsafe characters.
+    *
+    * @param s the String to convert
+    *
+    * @return the converted String
+    *
+    * @deprecated
+    */
+   public static String decode(String s)
+   {
+     try
+       {
+ 	return decode(s, "UTF-8");
+       }
+     catch (UnsupportedEncodingException uee)
+       {
+ 	// Should never happen since UTF-8 encoding should always be supported
+ 	return s;
+       }
+   }
+ 
+   /**
+    * This method translates the passed in string from x-www-form-urlencoded
+    * format using the given character encoding to decode the hex encoded
+    * unsafe characters.
+    *
+    * This implementation will decode the string even if it contains
+    * unsafe characters (characters that should have been encoded) or if the
+    * two characters following a % do not represent a hex encoded byte.
+    * In those cases the unsafe character or the % character will be added
+    * verbatim to the decoded result.
+    *
+    * @param s the String to convert
+    * @param encoding the character encoding to use the decode the hex encoded
+    *        unsafe characters
+    *
+    * @return the converted String
+    *
+    * @exception UnsupportedEncodingException If the named encoding is not
+    * supported
+    *
+    * @since 1.4
+    */
+   public static String decode(String s, String encoding)
+     throws UnsupportedEncodingException
+   {
+     // First convert all '+' characters to spaces.
+     String str = s.replace('+', ' ');
+ 
+     // Then go through the whole string looking for byte encoded characters
+     int i;
+     int start = 0;
+     byte[] bytes = null;
+     int length = str.length();
+     StringBuffer result = new StringBuffer(length);
+     while ((i = str.indexOf('%', start)) >= 0)
+       {
+ 	// Add all non-encoded characters to the result buffer
+ 	result.append(str.substring(start, i));
+ 	start = i;
+ 
+ 	// Get all consecutive encoded bytes
+ 	while ((i + 2 < length) && (str.charAt(i) == '%'))
+ 	  i += 3;
+ 
+ 	// Decode all these bytes
+ 	if ((bytes == null) || (bytes.length < ((i - start) / 3)))
+ 	  bytes = new byte[((i - start) / 3)];
+ 
+ 	int index = 0;
+ 	try
+ 	  {
+ 	    while (start < i)
+ 	      {
+ 		String sub = str.substring(start + 1, start + 3);
+ 		bytes[index] = (byte) Integer.parseInt(sub, 16);
+ 		index++;
+ 		start += 3;
+ 	      }
+ 	  }
+ 	catch (NumberFormatException nfe)
+ 	  {
+ 	    // One of the hex encoded strings was bad
+ 	  }
+ 
+ 	// Add the bytes as characters according to the given encoding
+ 	result.append(new String(bytes, 0, index, encoding));
+ 
+ 	// Make sure we skip to just after a % sign
+ 	// There might not have been enough encoded characters after the %
+ 	// or the hex chars were not actually hex chars (NumberFormatException)
+ 	if (start < length && s.charAt(start) == '%')
+ 	  {
+ 	    result.append('%');
+ 	    start++;
+ 	  }
+       }
+ 
+     // Add any characters left
+     if (start < str.length())
+       result.append(str.substring(start));
+ 
+     return result.toString();
+   }
+ } // class URLDecoder
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/URLEncoder.java gcc-4.1.0/libjava/classpath/java/net/URLEncoder.java
*** gcc-4.0.2/libjava/classpath/java/net/URLEncoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/URLEncoder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,184 ----
+ /* URLEncoder.java -- Class to convert strings to a properly encoded URL
+    Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.UnsupportedEncodingException;
+ 
+ 
+ /*
+  * Written using on-line Java Platform 1.2/1.4 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * This utility class contains static methods that converts a
+  * string into a fully encoded URL string in x-www-form-urlencoded
+  * format.  This format replaces certain disallowed characters with
+  * encoded equivalents.  All upper case and lower case letters in the
+  * US alphabet remain as is, the space character (' ') is replaced with
+  * '+' sign, and all other characters are converted to a "%XX" format
+  * where XX is the hexadecimal representation of that character in a
+  * certain encoding (by default, the platform encoding, though the
+  * standard is "UTF-8").
+  * <p>
+  * This method is very useful for encoding strings to be sent to CGI scripts
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class URLEncoder
+ {
+   /**
+    * This method translates the passed in string into x-www-form-urlencoded
+    * format using the default encoding.  The standard encoding is
+    * "UTF-8", and the two-argument form of this method should be used
+    * instead.
+    *
+    * @param s The String to convert
+    *
+    * @return The converted String
+    *
+    * @deprecated
+    */
+   public static String encode(String s)
+   {
+     try
+       {
+ 	// We default to 8859_1 for compatibility with the same
+ 	// default elsewhere in the library.
+ 	return encode(s, System.getProperty("file.encoding", "8859_1"));
+       }
+     catch (UnsupportedEncodingException uee)
+       {
+ 	// Should never happen since default should always be supported
+ 	return s;
+       }
+   }
+ 
+   /**
+    * This method translates the passed in string into x-www-form-urlencoded
+    * format using the character encoding to hex-encode the unsafe characters.
+    *
+    * @param s The String to convert
+    * @param encoding The encoding to use for unsafe characters
+    *
+    * @return The converted String
+    *
+    * @exception UnsupportedEncodingException If the named encoding is not
+    * supported
+    *
+    * @since 1.4
+    */
+   public static String encode(String s, String encoding)
+     throws UnsupportedEncodingException
+   {
+     int length = s.length();
+     int start = 0;
+     int i = 0;
+ 
+     StringBuffer result = new StringBuffer(length);
+     while (true)
+       {
+ 	while (i < length && isSafe(s.charAt(i)))
+ 	  i++;
+ 
+ 	// Safe character can just be added
+ 	result.append(s.substring(start, i));
+ 
+ 	// Are we done?
+ 	if (i >= length)
+ 	  return result.toString();
+ 	else if (s.charAt(i) == ' ')
+ 	  {
+ 	    result.append('+'); // Replace space char with plus symbol.
+ 	    i++;
+ 	  }
+ 	else
+ 	  {
+ 	    // Get all unsafe characters
+ 	    start = i;
+ 	    char c;
+ 	    while (i < length && (c = s.charAt(i)) != ' ' && ! isSafe(c))
+ 	      i++;
+ 
+ 	    // Convert them to %XY encoded strings
+ 	    String unsafe = s.substring(start, i);
+ 	    byte[] bytes = unsafe.getBytes(encoding);
+ 	    for (int j = 0; j < bytes.length; j++)
+ 	      {
+ 		result.append('%');
+ 		int val = bytes[j];
+ 		result.append(hex.charAt((val & 0xf0) >> 4));
+ 		result.append(hex.charAt(val & 0x0f));
+ 	      }
+ 	  }
+ 	start = i;
+       }
+   }
+ 
+   /**
+    * Private static method that returns true if the given char is either
+    * a uppercase or lowercase letter from 'a' till 'z', or a digit froim
+    * '0' till '9', or one of the characters '-', '_', '.' or '*'. Such
+    * 'safe' character don't have to be url encoded.
+    */
+   private static boolean isSafe(char c)
+   {
+     return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
+            || (c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.'
+            || c == '*');
+   }
+ 
+   /**
+    * Private constructor that does nothing. Included to avoid a default
+    * public constructor being created by the compiler.
+    */
+   private URLEncoder()
+   {
+   }
+ 
+   /**
+    * Used to convert to hex.  We don't use Integer.toHexString, since
+    * it converts to lower case (and the Sun docs pretty clearly
+    * specify upper case here), and because it doesn't provide a
+    * leading 0.
+    */
+   private static final String hex = "0123456789ABCDEF";
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/URLStreamHandler.java gcc-4.1.0/libjava/classpath/java/net/URLStreamHandler.java
*** gcc-4.0.2/libjava/classpath/java/net/URLStreamHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/URLStreamHandler.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,536 ----
+ /* URLStreamHandler.java -- Abstract superclass for all protocol handlers
+    Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ 
+ 
+ /*
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * This class is the superclass of all URL protocol handlers.  The URL
+  * class loads the appropriate protocol handler to establish a connection
+  * to a (possibly) remote service (eg, "http", "ftp") and to do protocol
+  * specific parsing of URL's.  Refer to the URL class documentation for
+  * details on how that class locates and loads protocol handlers.
+  * <p>
+  * A protocol handler implementation should override the openConnection()
+  * method, and optionally override the parseURL() and toExternalForm()
+  * methods if necessary. (The default implementations will parse/write all
+  * URL's in the same form as http URL's).  A protocol  specific subclass
+  * of URLConnection will most likely need to be created as well.
+  * <p>
+  * Note that the instance methods in this class are called as if they
+  * were static methods.  That is, a URL object to act on is passed with
+  * every call rather than the caller assuming the URL is stored in an
+  * instance variable of the "this" object.
+  * <p>
+  * The methods in this class are protected and accessible only to subclasses.
+  * URLStreamConnection objects are intended for use by the URL class only,
+  * not by other classes (unless those classes are implementing protocols).
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  *
+  * @see URL
+  */
+ public abstract class URLStreamHandler
+ {
+   /**
+    * Creates a URLStreamHander
+    */
+   public URLStreamHandler()
+   {
+   }
+ 
+   /**
+    * Returns a URLConnection for the passed in URL.  Note that this should
+    * not actually create the connection to the (possibly) remote host, but
+    * rather simply return a URLConnection object.  The connect() method of
+    * URL connection is used to establish the actual connection, possibly
+    * after the caller sets up various connection options.
+    *
+    * @param url The URL to get a connection object for
+    *
+    * @return A URLConnection object for the given URL
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract URLConnection openConnection(URL url)
+     throws IOException;
+ 
+   /**
+    * This method parses the string passed in as a URL and set's the
+    * instance data fields in the URL object passed in to the various values
+    * parsed out of the string.  The start parameter is the position to start
+    * scanning the string.  This is usually the position after the ":" which
+    * terminates the protocol name.  The end parameter is the position to
+    * stop scanning.  This will be either the end of the String, or the
+    * position of the "#" character, which separates the "file" portion of
+    * the URL from the "anchor" portion.
+    * <p>
+    * This method assumes URL's are formatted like http protocol URL's, so
+    * subclasses that implement protocols with URL's the follow a different
+    * syntax should override this method.  The lone exception is that if
+    * the protocol name set in the URL is "file", this method will accept
+    * an empty hostname (i.e., "file:///"), which is legal for that protocol
+    *
+    * @param url The URL object in which to store the results
+    * @param spec The String-ized URL to parse
+    * @param start The position in the string to start scanning from
+    * @param end The position in the string to stop scanning
+    */
+   protected void parseURL(URL url, String spec, int start, int end)
+   {
+     String host = url.getHost();
+     int port = url.getPort();
+     String file = url.getFile();
+     String ref = url.getRef();
+     String userInfo = url.getUserInfo();
+     String authority = url.getAuthority();
+     String query = null;
+     
+     // On Windows we need to change \ to / for file URLs
+     char separator = File.separatorChar;
+     if (url.getProtocol().equals("file") && separator != '/')
+       {
+ 	file = file.replace(separator, '/');
+ 	spec = spec.replace(separator, '/');
+       }
+ 
+     if (spec.regionMatches(start, "//", 0, 2))
+       {
+ 	String genuineHost;
+ 	int hostEnd;
+ 	int colon;
+ 	int at_host;
+ 
+ 	start += 2;
+ 	int slash = spec.indexOf('/', start);
+ 	if (slash >= 0)
+ 	  hostEnd = slash;
+ 	else
+ 	  hostEnd = end;
+ 
+ 	authority = host = spec.substring(start, hostEnd);
+ 
+ 	// We first need a genuine host name (with userinfo).
+ 	// So we check for '@': if it's present check the port in the
+ 	// section after '@' in the other case check it in the full string.
+ 	// P.S.: We don't care having '@' at the beginning of the string.
+ 	if ((at_host = host.indexOf('@')) >= 0)
+ 	  {
+ 	    genuineHost = host.substring(at_host);
+ 	    userInfo = host.substring(0, at_host);
+ 	  }
+ 	else
+ 	  genuineHost = host;
+ 
+ 	// Look for optional port number.  It is valid for the non-port
+ 	// part of the host name to be null (e.g. a URL "http://:80").
+ 	// TBD: JDK 1.2 in this case sets host to null rather than "";
+ 	// this is undocumented and likely an unintended side effect in 1.2
+ 	// so we'll be simple here and stick with "". Note that
+ 	// "http://" or "http:///" produce a "" host in JDK 1.2.
+ 	if ((colon = genuineHost.indexOf(':')) >= 0)
+ 	  {
+ 	    try
+ 	      {
+ 		port = Integer.parseInt(genuineHost.substring(colon + 1));
+ 	      }
+ 	    catch (NumberFormatException e)
+ 	      {
+ 		// Ignore invalid port values; port is already set to u's
+ 		// port.
+ 	      }
+ 
+ 	    // Now we must cut the port number in the original string.
+ 	    if (at_host >= 0)
+ 	      host = host.substring(0, at_host + colon);
+ 	    else
+ 	      host = host.substring(0, colon);
+ 	  }
+ 	file = null;
+ 	start = hostEnd;
+       }
+     else if (host == null)
+       host = "";
+ 
+     if (file == null || file.length() == 0
+         || (start < end && spec.charAt(start) == '/'))
+       {
+ 	// No file context available; just spec for file.
+ 	// Or this is an absolute path name; ignore any file context.
+ 	file = spec.substring(start, end);
+ 	ref = null;
+       }
+     else if (start < end)
+       {
+ 	// Context is available, but only override it if there is a new file.
+ 	int lastSlash = file.lastIndexOf('/');
+ 	if (lastSlash < 0)
+ 	  file = spec.substring(start, end);
+ 	else
+ 	  file = (file.substring(0, lastSlash)
+ 		  + '/' + spec.substring(start, end));
+ 
+ 	// For URLs constructed relative to a context, we
+ 	// need to canonicalise the file path.
+ 	file = canonicalizeFilename(file);
+ 
+ 	ref = null;
+       }
+ 
+     if (ref == null)
+       {
+ 	// Normally there should be no '#' in the file part,
+ 	// but we are nice.
+ 	int hash = file.indexOf('#');
+ 	if (hash != -1)
+ 	  {
+ 	    ref = file.substring(hash + 1, file.length());
+ 	    file = file.substring(0, hash);
+ 	  }
+       }
+ 
+     // We care about the query tag only if there is no reference at all.
+     if (ref == null)
+       {
+ 	  int queryTag = file.indexOf('?');
+ 	  if (queryTag != -1)
+ 	    {
+ 	      query = file.substring(queryTag + 1);
+ 	      file = file.substring(0, queryTag);
+ 	    }
+       }
+ 
+     // XXX - Classpath used to call PlatformHelper.toCanonicalForm() on
+     // the file part. It seems like overhead, but supposedly there is some
+     // benefit in windows based systems (it also lowercased the string).
+     setURL(url, url.getProtocol(), host, port, authority, userInfo, file, query, ref);
+   }
+ 
+   /*
+    * Canonicalize a filename.
+    */
+   private static String canonicalizeFilename(String file)
+   {
+     // XXX - GNU Classpath has an implementation that might be more appropriate
+     // for Windows based systems (gnu.java.io.PlatformHelper.toCanonicalForm)
+     int index;
+ 
+     // Replace "/./" with "/".  This probably isn't very efficient in
+     // the general case, but it's probably not bad most of the time.
+     while ((index = file.indexOf("/./")) >= 0)
+       file = file.substring(0, index) + file.substring(index + 2);
+ 
+     // Process "/../" correctly.  This probably isn't very efficient in
+     // the general case, but it's probably not bad most of the time.
+     while ((index = file.indexOf("/../")) >= 0)
+       {
+ 	// Strip of the previous directory - if it exists.
+ 	int previous = file.lastIndexOf('/', index - 1);
+ 	if (previous >= 0)
+ 	  file = file.substring(0, previous) + file.substring(index + 3);
+ 	else
+ 	  break;
+       }
+     return file;
+   }
+ 
+   /**
+    * Compares two URLs, excluding the fragment component
+    *
+    * @param url1 The first url
+    * @param url2 The second url to compare with the first
+    *
+    * @return True if both URLs point to the same file, false otherwise.
+    *
+    * @specnote Now protected
+    */
+   protected boolean sameFile(URL url1, URL url2)
+   {
+     if (url1 == url2)
+       return true;
+ 
+     // This comparison is very conservative.  It assumes that any
+     // field can be null.
+     if (url1 == null || url2 == null)
+       return false;
+     int p1 = url1.getPort();
+     if (p1 == -1)
+       p1 = url1.ph.getDefaultPort();
+     int p2 = url2.getPort();
+     if (p2 == -1)
+       p2 = url2.ph.getDefaultPort();
+     if (p1 != p2)
+       return false;
+     String s1;
+     String s2;
+     s1 = url1.getProtocol();
+     s2 = url2.getProtocol();
+     if (s1 != s2 && (s1 == null || ! s1.equals(s2)))
+       return false;
+     s1 = url1.getHost();
+     s2 = url2.getHost();
+     if (s1 != s2 && (s1 == null || ! s1.equals(s2)))
+       return false;
+     s1 = canonicalizeFilename(url1.getFile());
+     s2 = canonicalizeFilename(url2.getFile());
+     if (s1 != s2 && (s1 == null || ! s1.equals(s2)))
+       return false;
+     return true;
+   }
+ 
+   /**
+    * This methods sets the instance variables representing the various fields
+    * of the URL to the values passed in.
+    *
+    * @param u The URL to modify
+    * @param protocol The protocol to set
+    * @param host The host name to et
+    * @param port The port number to set
+    * @param file The filename to set
+    * @param ref The reference
+    *
+    * @exception SecurityException If the protocol handler of the URL is
+    * different from this one
+    *
+    * @deprecated 1.2 Please use
+    * #setURL(URL,String,String,int,String,String,String,String);
+    */
+   protected void setURL(URL u, String protocol, String host, int port,
+                         String file, String ref)
+   {
+     u.set(protocol, host, port, file, ref);
+   }
+ 
+   /**
+    * Sets the fields of the URL argument to the indicated values
+    *
+    * @param u The URL to modify
+    * @param protocol The protocol to set
+    * @param host The host name to set
+    * @param port The port number to set
+    * @param authority The authority to set
+    * @param userInfo The user information to set
+    * @param path The path/filename to set
+    * @param query The query part to set
+    * @param ref The reference
+    *
+    * @exception SecurityException If the protocol handler of the URL is
+    * different from this one
+    */
+   protected void setURL(URL u, String protocol, String host, int port,
+                         String authority, String userInfo, String path,
+                         String query, String ref)
+   {
+     u.set(protocol, host, port, authority, userInfo, path, query, ref);
+   }
+ 
+   /**
+    * Provides the default equals calculation. May be overidden by handlers for
+    * other protocols that have different requirements for equals(). This method
+    * requires that none of its arguments is null. This is guaranteed by the
+    * fact that it is only called by java.net.URL class.
+    *
+    * @param url1 An URL object
+    * @param url2 An URL object
+    *
+    * @return True if both given URLs are equal, false otherwise.
+    */
+   protected boolean equals(URL url1, URL url2)
+   {
+     // This comparison is very conservative.  It assumes that any
+     // field can be null.
+     return (url1.getPort() == url2.getPort()
+            && ((url1.getProtocol() == null && url2.getProtocol() == null)
+            || (url1.getProtocol() != null
+            && url1.getProtocol().equals(url2.getProtocol())))
+            && ((url1.getUserInfo() == null && url2.getUserInfo() == null)
+            || (url1.getUserInfo() != null
+            && url1.getUserInfo().equals(url2.getUserInfo())))
+            && ((url1.getAuthority() == null && url2.getAuthority() == null)
+            || (url1.getAuthority() != null
+            && url1.getAuthority().equals(url2.getAuthority())))
+            && ((url1.getHost() == null && url2.getHost() == null)
+            || (url1.getHost() != null && url1.getHost().equals(url2.getHost())))
+            && ((url1.getPath() == null && url2.getPath() == null)
+            || (url1.getPath() != null && url1.getPath().equals(url2.getPath())))
+            && ((url1.getQuery() == null && url2.getQuery() == null)
+            || (url1.getQuery() != null
+            && url1.getQuery().equals(url2.getQuery())))
+            && ((url1.getRef() == null && url2.getRef() == null)
+            || (url1.getRef() != null && url1.getRef().equals(url2.getRef()))));
+   }
+ 
+   /**
+    * Compares the host components of two URLs.
+    *
+    * @param url1 The first URL.
+    * @param url2 The second URL.
+    *
+    * @return True if both URLs contain the same host.
+    */
+   protected boolean hostsEqual(URL url1, URL url2)
+   {
+     InetAddress addr1 = getHostAddress(url1);
+     InetAddress addr2 = getHostAddress(url2);
+ 
+     if (addr1 != null && addr2 != null)
+       return addr1.equals(addr2);
+ 
+     String host1 = url1.getHost();
+     String host2 = url2.getHost();
+ 
+     if (host1 != null && host2 != null)
+       return host1.equalsIgnoreCase(host2);
+ 
+     return host1 == null && host2 == null;
+   }
+ 
+   /**
+    * Get the IP address of our host. An empty host field or a DNS failure will
+    * result in a null return.
+    *
+    * @param url The URL to return the host address for.
+    *
+    * @return The address of the hostname in url.
+    */
+   protected InetAddress getHostAddress(URL url)
+   {
+     String hostname = url.getHost();
+ 
+     if (hostname.equals(""))
+       return null;
+ 
+     try
+       {
+ 	return InetAddress.getByName(hostname);
+       }
+     catch (UnknownHostException e)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns the default port for a URL parsed by this handler. This method is
+    * meant to be overidden by handlers with default port numbers.
+    *
+    * @return The default port number.
+    */
+   protected int getDefaultPort()
+   {
+     return -1;
+   }
+ 
+   /**
+    * Provides the default hash calculation. May be overidden by handlers for
+    * other protocols that have different requirements for hashCode calculation.
+    *
+    * @param url The URL to calc the hashcode for.
+    *
+    * @return The hashcode for the given URL.
+    */
+   protected int hashCode(URL url)
+   {
+     return url.getProtocol().hashCode()
+            + ((url.getHost() == null) ? 0 : url.getHost().hashCode())
+            + url.getFile().hashCode() + url.getPort();
+   }
+ 
+   /**
+    * This method converts a URL object into a String.  This method creates
+    * Strings in the mold of http URL's, so protocol handlers which use URL's
+    * that have a different syntax should override this method
+    *
+    * @param url The URL object to convert
+    *
+    * @return A string representation of the url
+    */
+   protected String toExternalForm(URL url)
+   {
+     String protocol;
+     String file;
+     String ref;
+     String authority;
+ 
+     protocol = url.getProtocol();
+     authority = url.getAuthority();
+     if (authority == null)
+       authority = "";
+     
+     file = url.getFile();
+     ref = url.getRef();
+ 
+     // Guess a reasonable size for the string buffer so we have to resize
+     // at most once.
+     int size = protocol.length() + authority.length() + file.length() + 24;
+     StringBuffer sb = new StringBuffer(size);
+ 
+     if (protocol.length() > 0)
+       {
+ 	sb.append(protocol);
+ 	sb.append(":");
+       }
+     
+     // If we have superfluous leading slashes (that means, at least 2)
+     // we always add the authority component ("//" + host) to
+     // avoid ambiguity. Otherwise we would generate an URL like
+     // proto://home/foo
+     // where we meant: 
+     // host: <empty> - file: //home/foo
+     // but URL spec says it is:
+     // host: home - file: /foo
+     if (authority.length() != 0 || file.startsWith("//") )
+       sb.append("//").append(authority).append(file);
+     else
+       sb.append(file);
+ 
+     if (ref != null)
+       sb.append('#').append(ref);
+ 
+     return sb.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/URLStreamHandlerFactory.java gcc-4.1.0/libjava/classpath/java/net/URLStreamHandlerFactory.java
*** gcc-4.0.2/libjava/classpath/java/net/URLStreamHandlerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/URLStreamHandlerFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* URLStreamHandlerFactory.java -- Maps protocols to URLStreamHandlers
+    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ 
+ /**
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ /**
+  * This interface contains one method which maps the protocol portion of
+  * a URL (eg, "http" in "http://www.urbanophile.com/arenn/") to a
+  * <code>URLStreamHandler</code> object.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  */
+ public interface URLStreamHandlerFactory
+ {
+   /**
+     * This method maps the protocol portion of a URL to a
+     * <code>URLStreamHandler</code> object.
+     *
+     * @param protocol The protocol name to map ("http", "ftp", etc).
+     *
+     * @return The <code>URLStreamHandler</code> for the specified protocol
+     */
+   URLStreamHandler createURLStreamHandler(String protocol);
+ } // interface URLStreamHandlerFactory
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/UnknownHostException.java gcc-4.1.0/libjava/classpath/java/net/UnknownHostException.java
*** gcc-4.0.2/libjava/classpath/java/net/UnknownHostException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/UnknownHostException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* UnknownHostException.java -- The hostname is unknown
+    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * This exception indicates that an attempt was made to reference a hostname
+  * or IP address that is not valid.  This could possibly indicate that a
+  * DNS problem has occurred, but most often means that the host was not
+  * correctly specified.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner
+  * @status updated to 1.4
+  */
+ public class UnknownHostException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -4639126076052875403L;
+ 
+   /**
+    * Create a new instance without a descriptive error message.
+    */
+   public UnknownHostException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message, such as the
+    * name of the host that could not be resolved.
+    *
+    * @param message a message describing the error that occurred
+    */
+   public UnknownHostException(String message)
+   {
+     super(message);
+   }
+ } // class UnknownHostException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/UnknownServiceException.java gcc-4.1.0/libjava/classpath/java/net/UnknownServiceException.java
*** gcc-4.0.2/libjava/classpath/java/net/UnknownServiceException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/UnknownServiceException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* UnknownServiceException.java -- A service error occurred
+    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.net;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * Contrary to what you might think, this does not indicate that the
+  * TCP/IP service name specified was invalid.  Instead it indicates that
+  * the MIME type returned from a URL could not be determined or that an
+  * attempt was made to write to a read-only URL.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class UnknownServiceException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -4169033248853639508L;
+ 
+   /**
+    * Create a new instance without a descriptive error message.
+    */
+   public UnknownServiceException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param message a message describing the error that occurred
+    */
+   public UnknownServiceException(String message)
+   {
+     super(message);
+   }
+ } // class UnknownServiceException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/class-dependencies.conf gcc-4.1.0/libjava/classpath/java/net/class-dependencies.conf
*** gcc-4.0.2/libjava/classpath/java/net/class-dependencies.conf	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/class-dependencies.conf	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,122 ----
+ # This property file contains dependencies of classes, methods, and
+ # field on other methods or classes.
+ #
+ # Syntax: 
+ #
+ #   <used>: <needed 1> [... <needed N>]
+ #
+ # means that when <used> is included, <needed 1> (... <needed N>) must
+ # be included as well.
+ #
+ # <needed X> and <used> are of the form
+ #
+ #   <class.methodOrField(signature)>
+ #
+ # or just
+ #
+ #   <class>
+ #
+ # Within dependencies, variables can be used. A variable is defined as 
+ # follows: 
+ #
+ #   {variable}: value1 value2 ... value<n>
+ #
+ # variables can be used on the right side of dependencies as follows: 
+ #
+ #    <used>: com.bla.blu.{variable}.Class.m()V
+ #
+ # The use of the variable will expand to <n> dependencies of the form
+ #
+ #    <used>: com.bla.blu.value1.Class.m()V
+ #    <used>: com.bla.blu.value2.Class.m()V
+ #    ...
+ #    <used>: com.bla.blu.value<n>.Class.m()V
+ #
+ # Variables can be redefined when building a system to select the 
+ # required support for features like encodings, protocols, etc. 
+ #
+ # Hints:
+ #
+ #  - For methods and fields, the signature is mandatory. For
+ #    specification, please see the Java Virtual Machine Specification by
+ #    SUN. Unlike in the spec, field signatures (types) are in brackets.
+ #
+ #  - Package names must be separated by '/' (and not '.'). E.g.,
+ #    java/lang/Class (this is necessary, because the '.' is used to
+ #    separate method or field names from classes)
+ #
+ #  - In case <needed> refers to a class, only the class itself will be
+ #    included in the resulting binary, NOT necessarily all its methods
+ #    and fields. If you want to refer to all methods and fields, you can
+ #    write class.* as an abbreviation.
+ #
+ # -  Abbreviations for packages are also possible: my/package/* means all
+ #    methods and fields of all classes in my/package.
+ #
+ # -  A line with a trailing '\' continues in the next line.
+ 
+ java/net/InetAddress: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/net/UnknownHostException.<init>(Ljava/lang/String;)V
+ 
+ java/net/DatagramSocketImpl: \
+ 	java/net/DatagramSocketImpl.fd(Ljava/io/FileDescriptor;) \
+ 	java/net/DatagramSocketImpl.localPort(I)
+ 
+ java/net/PlainDatagramSocketImpl: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/io/IOException.<init>(Ljava/lang/String;)V \
+ 	java/io/FileDescriptor.<init>()V \
+ 	java/lang/Boolean.<init>(Z)V \
+ 	java/lang/Integer.<init>(I)V \
+ 	java/net/InetAddress.getByName(Ljava/lang/String;)Ljava/net/InetAddress; \
+ 	java/net/InetAddress.getAddress()[B \
+ 	java/lang/Boolean.booleanValue()Z \
+ 	java/lang/Integer.intValue()I \
+ 	java/net/SocketException.<init>(Ljava/lang/String;)V \
+ 	java/net/DatagramPacket.getData()[B \
+ 	java/net/SocketImpl.address(Ljava/net/InetAddress;) \
+ 	java/net/PlainSocketImpl.native_fd(I) \
+ 	java/net/SocketImpl.fd(Ljava/io/FileDescriptor;) \
+ 	java/net/SocketImpl.address(Ljava/net/InetAddress;) \
+ 	java/net/PlainDatagramSocketImpl.native_fd(I) \
+ 	java/net/SocketImpl.localport(I) \
+ 	java/net/SocketImpl.port(I)
+ 
+ java/net/PlainSocketImpl: \
+         java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
+ 	java/lang/InternalError.<init>(Ljava/lang/String;)V \
+ 	java/io/IOException.<init>(Ljava/lang/String;)V \
+ 	java/io/FileDescriptor.<init>()V \
+ 	java/lang/Boolean.<init>(Z)V \
+ 	java/lang/Integer.<init>(I)V \
+ 	java/net/InetAddress.getByName(Ljava/lang/String;)Ljava/net/InetAddress; \
+ 	java/net/InetAddress.getAddress()[B \
+ 	java/lang/Boolean.booleanValue()Z \
+ 	java/lang/Integer.intValue()I \
+ 	java/net/SocketException.<init>(Ljava/lang/String;)V \
+ 	java/net/DatagramPacket.getData()[B \
+ 	java/net/SocketImpl.address(Ljava/net/InetAddress;) \
+ 	java/net/PlainSocketImpl.native_fd(I) \
+ 	java/net/SocketImpl.fd(Ljava/io/FileDescriptor;) \
+ 	java/net/SocketImpl.address(Ljava/net/InetAddress;) \
+ 	java/net/PlainDatagramSocketImpl.native_fd(I) \
+ 	java/net/SocketImpl.localport(I) \
+ 	java/net/SocketImpl.port(I)
+ 
+ # All protocols supported are loaded via URL.getURLStreamHandler from 
+ # class gnu.java.net.protocol.<protocol>.Handler. 
+ #
+ # This introduces a dependency for all protocols. To allow an easy selection
+ # and addition of protocols, the library variable {protocols} can be set to 
+ # the set of supported protocols.
+ #
+ {protocols}: http file jar 
+ 
+ java/net/URL.getURLStreamHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;: \
+ 	gnu/java/net/protocol/{protocols}/Handler.* \
+ 	com/aicas/java/net/protocol/rom/Handler.*
+ 
+ # end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/net/package.html gcc-4.1.0/libjava/classpath/java/net/package.html
*** gcc-4.0.2/libjava/classpath/java/net/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/net/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.net package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.net</title></head>
+ 
+ <body>
+ <p>Network communication through TCP and UDP sockets or URLs.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/Buffer.java gcc-4.1.0/libjava/classpath/java/nio/Buffer.java
*** gcc-4.0.2/libjava/classpath/java/nio/Buffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/Buffer.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,361 ----
+ /* Buffer.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ import gnu.classpath.Pointer;
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class Buffer
+ {
+   int cap = 0;
+   int limit = 0;
+   int pos = 0;
+   int mark = -1;
+   Pointer address;
+ 
+   /**
+    * Creates a new Buffer.
+    *
+    * Should be package private.
+    */
+   Buffer (int capacity, int limit, int position, int mark)
+   {
+     if (capacity < 0)
+       throw new IllegalArgumentException ();
+     
+     cap = capacity;
+     limit (limit);
+     position (position);
+     
+     if (mark >= 0)
+     {
+       if (mark > pos)
+         throw new IllegalArgumentException ();
+       
+       this.mark = mark;
+     }
+   }
+   
+   /**
+    * Retrieves the capacity of the buffer.
+    *
+    * @return the capacity of the buffer
+    */
+   public final int capacity ()
+   {
+     return cap;
+   }
+ 
+   /**
+    * Clears the buffer.
+    *
+    * @return this buffer
+    */
+   public final Buffer clear ()
+   {
+     limit = cap;
+     pos = 0;
+     mark = -1;
+     return this;
+   }
+     
+   /**
+    * Flips the buffer.
+    *
+    * @return this buffer
+    */
+   public final Buffer flip ()
+   {
+     limit = pos;
+     pos = 0;
+     mark = -1;
+     return this;
+   }
+     
+   /**
+    * Tells whether the buffer has remaining data to read or not.
+    *
+    * @return true if the buffer contains remaining data to read,
+    * false otherwise
+    */
+   public final boolean hasRemaining ()
+   {
+     return remaining() > 0;
+   }
+ 
+   /**
+    * Tells whether this buffer is read only or not.
+    *
+    * @return true if the buffer is read only, false otherwise
+    */
+   public abstract boolean isReadOnly ();
+ 
+   /**
+    * Retrieves the current limit of the buffer.
+    *
+    * @return the limit of the buffer
+    */
+   public final int limit ()
+   {
+     return limit;
+   }
+ 
+   /**
+    * Sets this buffer's limit.
+    * 
+    * @param newLimit The new limit value; must be non-negative and no larger
+    * than this buffer's capacity.
+    *
+    * @return this buffer
+    *
+    * @exception IllegalArgumentException If the preconditions on newLimit
+    * do not hold.
+    */
+   public final Buffer limit (int newLimit)
+   {
+     if ((newLimit < 0) || (newLimit > cap))
+       throw new IllegalArgumentException ();
+ 
+     if (newLimit < mark)
+         mark = -1;
+ 
+     if (pos > newLimit)
+         pos = newLimit;
+ 
+     limit = newLimit;
+     return this;
+   }
+ 
+   /**
+    * Sets this buffer's mark at its position.
+    *
+    * @return this buffer
+    */
+   public final Buffer mark ()
+   {
+     mark = pos;
+     return this;
+   }
+ 
+   /**
+    * Retrieves the current position of this buffer.
+    *
+    * @return the current position of this buffer
+    */
+   public final int position ()
+   {
+     return pos;
+   }
+     
+   /**
+    * Sets this buffer's position. If the mark is defined and larger than the
+    * new position then it is discarded.
+    * 
+    * @param newPosition The new position value; must be non-negative and no
+    * larger than the current limit.
+    *
+    * @return this buffer
+    *
+    * @exception IllegalArgumentException If the preconditions on newPosition
+    * do not hold
+    */
+   public final Buffer position (int newPosition)
+   {
+     if ((newPosition < 0) || (newPosition > limit))
+       throw new IllegalArgumentException ();
+ 
+     if (newPosition <= mark)
+         mark = -1;
+ 
+     pos = newPosition;
+     return this;
+   }
+ 
+   /**
+    * Returns the number of elements between the current position and the limit.
+    *
+    * @return the number of remaining elements
+    */
+   public final int remaining()
+   {
+     return limit - pos;
+   }
+ 
+   /**
+    * Resets this buffer's position to the previously-marked position.
+    *
+    * @return this buffer
+    *
+    * @exception InvalidMarkException If the mark has not been set.
+    */
+   public final Buffer reset()
+   {
+     if (mark == -1)
+       throw new InvalidMarkException ();
+ 
+     pos = mark;
+     return this;
+   }
+ 
+   /**
+    * Rewinds this buffer. The position is set to zero and the mark
+    * is discarded.
+    *
+    * @return this buffer
+    */
+   public final Buffer rewind()
+   {
+     pos = 0;
+     mark = -1;
+     return this;
+   }
+ 
+   /**
+    * Checks for underflow. This method is used internally to check
+    * whether a buffer has enough elements left to satisfy a read 
+    * request.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * elements in this buffer.
+    */
+   final void checkForUnderflow()
+   {
+     if (!hasRemaining())
+       throw new BufferUnderflowException();
+   }
+ 
+   /**
+    * Checks for underflow. This method is used internally to check
+    * whether a buffer has enough elements left to satisfy a read 
+    * request for a given number of elements.
+    *
+    * @param length The length of a sequence of elements.
+    *
+    * @exception BufferUnderflowException If there are not enough 
+    * remaining elements in this buffer.
+    */
+   final void checkForUnderflow(int length)
+   {
+     if (remaining() < length)
+       throw new BufferUnderflowException();
+   }
+ 
+   /**
+    * Checks for overflow. This method is used internally to check
+    * whether a buffer has enough space left to satisfy a write 
+    * request.
+    *
+    * @exception BufferOverflowException If there is no remaining
+    * space in this buffer.
+    */
+   final void checkForOverflow()
+   {
+     if (!hasRemaining())
+       throw new BufferOverflowException();
+   }
+ 
+   /**
+    * Checks for overflow. This method is used internally to check
+    * whether a buffer has enough space left to satisfy a write 
+    * request for a given number of elements.
+    *
+    * @param length The length of a sequence of elements.
+    *
+    * @exception BufferUnderflowException If there is not enough 
+    * remaining space in this buffer.
+    */
+   final void checkForOverflow(int length)
+   {
+     if (remaining() < length)
+       throw new BufferOverflowException();
+   }
+ 
+   /**
+    * Checks if index is negative or not smaller than the buffer's 
+    * limit. This method is used internally to check whether
+    * an indexed request can be fulfilled.
+    *
+    * @param index The requested position in the buffer.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   final void checkIndex(int index)
+   {
+     if (index < 0
+         || index >= limit ())
+       throw new IndexOutOfBoundsException ();
+   }
+ 
+   /**
+    * Checks if buffer is read-only. This method is used internally to
+    * check if elements can be put into a buffer.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   final void checkIfReadOnly() 
+   {
+     if (isReadOnly())
+       throw new ReadOnlyBufferException ();
+   }
+ 
+   /**
+    * Checks whether an array is large enough to hold the given number of
+    * elements at the given offset. This method is used internally to
+    * check if an array is big enough.
+    *
+    * @param arraylength The length of the array.
+    * @param offset The offset within the array of the first byte to be read;
+    * must be non-negative and no larger than arraylength.
+    * @param length The number of bytes to be read from the given array;
+    * must be non-negative and no larger than arraylength - offset.
+    *
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    */
+   static final void checkArraySize(int arraylength, int offset, int length)
+   {
+     if ((offset < 0) ||
+         (length < 0) ||
+         (arraylength < length + offset))
+       throw new IndexOutOfBoundsException ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/BufferOverflowException.java gcc-4.1.0/libjava/classpath/java/nio/BufferOverflowException.java
*** gcc-4.0.2/libjava/classpath/java/nio/BufferOverflowException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/BufferOverflowException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /* BufferOverflowException.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio;
+ 
+ /**
+  * @since 1.4
+  */
+ public class BufferOverflowException extends RuntimeException
+ {
+   /**
+    * Creates the exception
+    */
+   public BufferOverflowException ()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/BufferUnderflowException.java gcc-4.1.0/libjava/classpath/java/nio/BufferUnderflowException.java
*** gcc-4.0.2/libjava/classpath/java/nio/BufferUnderflowException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/BufferUnderflowException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /* BufferUnderflowException.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio;
+ 
+ /**
+  * @since 1.4
+  */
+ public class BufferUnderflowException extends RuntimeException
+ {
+   /**
+    * Creates the exception
+    */
+   public BufferUnderflowException ()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/ByteBuffer.java gcc-4.1.0/libjava/classpath/java/nio/ByteBuffer.java
*** gcc-4.0.2/libjava/classpath/java/nio/ByteBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/ByteBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,651 ----
+ /* ByteBuffer.java -- 
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class ByteBuffer extends Buffer
+   implements Comparable
+ {
+   ByteOrder endian = ByteOrder.BIG_ENDIAN;
+ 
+   int array_offset;
+   byte[] backing_buffer;
+ 
+   ByteBuffer (int capacity, int limit, int position, int mark)
+   {
+     super (capacity, limit, position, mark);
+   }
+ 
+   /**
+    * Allocates a new direct byte buffer.
+    */ 
+   public static ByteBuffer allocateDirect (int capacity)
+   {
+     return DirectByteBufferImpl.allocate (capacity);
+   }
+ 
+   /**
+    * Allocates a new <code>ByteBuffer</code> object with a given capacity.
+    */
+   public static ByteBuffer allocate (int capacity)
+   {
+     return wrap(new byte[capacity], 0, capacity);
+   }
+ 
+   /**
+    * Wraps a <code>byte</code> array into a <code>ByteBuffer</code>
+    * object.
+    *
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    */
+   public static final ByteBuffer wrap (byte[] array, int offset, int length)
+   {
+     // FIXME: In GCJ and other implementations where arrays may not
+     // move we might consider, at least when offset==0:
+     // return new DirectByteBufferImpl(array,
+     //                                 address_of_data(array) + offset,
+     //                                 length, length, 0, false);
+     // This may be more efficient, mainly because we can then use the
+     // same logic for all ByteBuffers.
+ 
+     return new ByteBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
+   }
+ 
+   /**
+    * Wraps a <code>byte</code> array into a <code>ByteBuffer</code>
+    * object.
+    */
+   public static final ByteBuffer wrap (byte[] array)
+   {
+     return wrap (array, 0, array.length);
+   }
+   
+   /**
+    * This method transfers <code>byte</code>s from this buffer into the given
+    * destination array. Before the transfer, it checks if there are fewer than
+    * length <code>byte</code>s remaining in this buffer.
+    *
+    * @param dst The destination array
+    * @param offset The offset within the array of the first <code>byte</code>
+    * to be written; must be non-negative and no larger than dst.length.
+    * @param length The maximum number of bytes to be written to the given array;
+    * must be non-negative and no larger than dst.length - offset.
+    *
+    * @exception BufferUnderflowException If there are fewer than length
+    * <code>byte</code>s remaining in this buffer.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold.
+    */
+   public ByteBuffer get (byte[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       {
+         dst [i] = get ();
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * This method transfers <code>byte</code>s from this buffer into the given
+    * destination array.
+    *
+    * @param dst The byte array to write into.
+    *
+    * @exception BufferUnderflowException If there are fewer than dst.length
+    * <code>byte</code>s remaining in this buffer.
+    */
+   public ByteBuffer get (byte[] dst)
+   {
+     return get (dst, 0, dst.length);
+   }
+ 
+   /**
+    * Writes the content of the the <code>ByteBUFFER</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * <code>src.remaining()</code> space remaining in this buffer.
+    *
+    * @param src The source data.
+    *
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>byte</code>s in the source buffer.
+    * @exception IllegalArgumentException If the source buffer is this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public ByteBuffer put (ByteBuffer src)
+   {
+     if (src == this)
+       throw new IllegalArgumentException ();
+ 
+     checkForOverflow(src.remaining());
+ 
+     if (src.remaining () > 0)
+       {
+         byte[] toPut = new byte [src.remaining ()];
+         src.get (toPut);
+         put (toPut);
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>byte array</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * length space remaining in this buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * @param offset The offset within the array of the first byte to be read;
+    * must be non-negative and no larger than src.length.
+    * @param length The number of bytes to be read from the given array;
+    * must be non-negative and no larger than src.length - offset.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>byte</code>s in the source array.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public ByteBuffer put (byte[] src, int offset, int length)
+   {
+     checkArraySize(src.length, offset, length);
+     checkForOverflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       put (src [i]);
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>byte array</code> src
+    * into the buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>byte</code>s in the source array.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public final ByteBuffer put (byte[] src)
+   {
+     return put (src, 0, src.length);
+   }
+ 
+   /**
+    * Tells whether ot not this buffer is backed by an accessible
+    * <code>byte</code> array.
+    */
+   public final boolean hasArray ()
+   {
+     return (backing_buffer != null
+             && !isReadOnly ());
+   }
+ 
+   /**
+    * Returns the <code>byte</code> array that backs this buffer.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final byte[] array ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return backing_buffer;
+   }
+ 
+   /**
+    * Returns the offset within this buffer's backing array of the first element.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final int arrayOffset ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return array_offset;
+   }
+ 
+   /**
+    * Calculates a hash code for this buffer.
+    *
+    * This is done with <code>int</code> arithmetic,
+    * where ** represents exponentiation, by this formula:<br>
+    * <code>s[position()] + 31 + (s[position()+1] + 30)*31**1 + ... +
+    * (s[limit()-1]+30)*31**(limit()-1)</code>.
+    * Where s is the buffer data. Note that the hashcode is dependent
+    * on buffer content, and therefore is not useful if the buffer
+    * content may change.
+    *
+    * @return the hash code
+    */
+   public int hashCode ()
+   {
+     int hashCode = get(position()) + 31;
+     int multiplier = 1;
+     for (int i = position() + 1; i < limit(); ++i)
+       {
+ 	  multiplier *= 31;
+ 	  hashCode += (get(i) + 30)*multiplier;
+       }
+     return hashCode;
+   }
+ 
+   /**
+    * Checks if this buffer is equal to obj.
+    */
+   public boolean equals (Object obj)
+   {
+     if (obj instanceof ByteBuffer)
+       {
+         return compareTo (obj) == 0;
+       }
+ 
+     return false;
+   }
+ 
+   /**
+    * Compares two <code>ByteBuffer</code> objects.
+    *
+    * @exception ClassCastException If obj is not an object derived from
+    * <code>ByteBuffer</code>.
+    */
+   public int compareTo (Object obj)
+   {
+     ByteBuffer other = (ByteBuffer) obj;
+ 
+     int num = Math.min(remaining(), other.remaining());
+     int pos_this = position();
+     int pos_other = other.position();
+     
+     for (int count = 0; count < num; count++)
+       {
+         byte a = get(pos_this++);
+ 	byte b = other.get(pos_other++);
+       	 
+ 	if (a == b)
+ 	  continue;
+       	   
+ 	if (a < b)
+ 	  return -1;
+       	   
+ 	return 1;
+       }
+       
+     return remaining() - other.remaining();
+   }
+ 
+   /**
+    * Returns the byte order of this buffer.
+    */  
+   public final ByteOrder order ()
+   {
+     return endian;
+   }
+   
+   /**
+    * Modifies this buffer's byte order.
+    */
+   public final ByteBuffer order (ByteOrder endian)
+   {
+     this.endian = endian;
+     return this;
+   }
+   
+   /**
+    * Reads the <code>byte</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>byte</code>s in this buffer.
+    */
+   public abstract byte get ();
+ 
+   /**
+    * Writes the <code>byte</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * <code>byte</code>s in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract ByteBuffer put (byte b);
+ 
+   /**
+    * Absolute get method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public abstract byte get (int index);
+   
+   /**
+    * Absolute put method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract ByteBuffer put (int index, byte b);
+ 
+   /**
+    * Compacts this buffer.
+    * 
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract ByteBuffer compact ();
+ 
+   void shiftDown (int dst_offset, int src_offset, int count)
+   {
+     for (int i = 0; i < count; i++)
+       put(dst_offset + i, get(src_offset + i));
+   }
+ 
+   /**
+    * Tells whether or not this buffer is direct.
+    */
+   public abstract boolean isDirect ();
+ 
+   /**
+    * Creates a new <code>ByteBuffer</code> whose content is a shared
+    * subsequence of this buffer's content.
+    */
+   public abstract ByteBuffer slice ();
+ 
+   /**
+    * Creates a new <code>ByteBuffer</code> that shares this buffer's
+    * content.
+    */
+   public abstract ByteBuffer duplicate ();
+ 
+   /**
+    * Creates a new read-only <code>ByteBuffer</code> that shares this
+    * buffer's content.
+    */
+   public abstract ByteBuffer asReadOnlyBuffer ();
+  
+   /**
+    * Creates a view of this byte buffer as a short buffer.
+    */
+   public abstract ShortBuffer asShortBuffer ();
+   
+   /**
+    * Creates a view of this byte buffer as a char buffer.
+    */
+   public abstract CharBuffer asCharBuffer ();
+   
+   /**
+    * Creates a view of this byte buffer as an integer buffer.
+    */
+   public abstract IntBuffer asIntBuffer ();
+   
+   /**
+    * Creates a view of this byte buffer as a long buffer.
+    */
+   public abstract LongBuffer asLongBuffer ();
+   
+   /**
+    * Creates a view of this byte buffer as a float buffer.
+    */
+   public abstract FloatBuffer asFloatBuffer ();
+   
+   /**
+    * Creates a view of this byte buffer as a double buffer.
+    */
+   public abstract DoubleBuffer asDoubleBuffer ();
+ 
+   /**
+    * Relative get method for reading a character value.
+    *
+    * @exception BufferUnderflowException  If there are fewer than two bytes
+    * remaining in this buffer.
+    */
+   public abstract char getChar ();
+   
+   /**
+    * Relative put method for writing a character value.
+    *
+    * @exception BufferOverflowException If this buffer's current position is
+    * not smaller than its limit.
+    */
+   public abstract ByteBuffer putChar (char value);
+   
+   /**
+    * Absolute get method for reading a character value.
+    *
+    * @exception IndexOutOfBoundsException If there are fewer than two bytes
+    * remaining in this buffer
+    */
+   public abstract char getChar (int index);
+   
+   /**
+    * Absolute put method for writing a character value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus one.
+    */
+   public abstract ByteBuffer putChar (int index, char value);
+   
+   /**
+    * Relative get method for reading a short value.
+    *
+    * @exception BufferUnderflowException If index is negative or not smaller
+    * than the buffer's limit, minus one.
+    */
+   public abstract short getShort ();
+   
+   /**
+    * Relative put method for writing a short value.
+    *
+    * @exception BufferOverflowException If this buffer's current position is
+    * not smaller than its limit.
+    */
+   public abstract ByteBuffer putShort (short value);
+   
+   /**
+    * Absolute get method for reading a short value.
+    *
+    * @exception IndexOutOfBoundsException If there are fewer than two bytes
+    * remaining in this buffer
+    */
+   public abstract short getShort (int index);
+  
+   /**
+    * Absolute put method for writing a short value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus one.
+    */
+   public abstract ByteBuffer putShort (int index, short value);
+   
+   /**
+    * Relative get method for reading an integer value.
+    *
+    * @exception BufferUnderflowException If there are fewer than four bytes
+    * remaining in this buffer.
+    */
+   public abstract int getInt ();
+   
+   /**
+    * Relative put method for writing an integer value.
+    *
+    * @exception BufferOverflowException If this buffer's current position is
+    * not smaller than its limit.
+    */
+   public abstract ByteBuffer putInt (int value);
+   
+   /**
+    * Absolute get method for reading an integer value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus three.
+    */
+   public abstract int getInt (int index);
+   
+   /**
+    * Absolute put method for writing an integer value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus three.
+    */
+   public abstract ByteBuffer putInt (int index, int value);
+   
+   /**
+    * Relative get method for reading a long value.
+    *
+    * @exception BufferUnderflowException If there are fewer than eight bytes
+    * remaining in this buffer.
+    */
+   public abstract long getLong ();
+   
+   /**
+    * Relative put method for writing a long value.
+    *
+    * @exception BufferOverflowException If this buffer's current position is
+    * not smaller than its limit.
+    */
+   public abstract ByteBuffer putLong (long value);
+   
+   /**
+    * Absolute get method for reading a long value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus seven.
+    */
+   public abstract long getLong (int index);
+   
+   /**
+    * Absolute put method for writing a float value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus seven.
+    */
+   public abstract ByteBuffer putLong (int index, long value);
+   
+   /**
+    * Relative get method for reading a float value.
+    *
+    * @exception BufferUnderflowException If there are fewer than four bytes
+    * remaining in this buffer.
+    */
+   public abstract float getFloat ();
+   
+   /**
+    * Relative put method for writing a float value.
+    *
+    * @exception BufferOverflowException If there are fewer than four bytes
+    * remaining in this buffer.
+    */
+   public abstract ByteBuffer putFloat (float value);
+   
+   /**
+    * Absolute get method for reading a float value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus three.
+    */
+   public abstract float getFloat (int index);
+   
+   /**
+    * Relative put method for writing a float value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus three.
+    */
+   public abstract ByteBuffer putFloat (int index, float value);
+   
+   /**
+    * Relative get method for reading a double value.
+    *
+    * @exception BufferUnderflowException If there are fewer than eight bytes
+    * remaining in this buffer.
+    */
+   public abstract double getDouble ();
+   
+   /**
+    * Relative put method for writing a double value.
+    *
+    * @exception BufferOverflowException If this buffer's current position is
+    * not smaller than its limit.
+    */
+   public abstract ByteBuffer putDouble (double value);
+   
+   /**
+    * Absolute get method for reading a double value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus seven.
+    */
+   public abstract double getDouble (int index);
+   
+   /**
+    * Absolute put method for writing a double value.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit, minus seven.
+    */
+   public abstract ByteBuffer putDouble (int index, double value);
+ 
+   /**
+    * Returns a string summarizing the state of this buffer.
+    */
+   public String toString ()
+   {
+     return getClass ().getName () +
+ 	    "[pos=" + position () +
+ 	    " lim=" + limit () +
+ 	    " cap=" + capacity () + "]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/ByteBufferHelper.java gcc-4.1.0/libjava/classpath/java/nio/ByteBufferHelper.java
*** gcc-4.0.2/libjava/classpath/java/nio/ByteBufferHelper.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/ByteBufferHelper.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,344 ----
+ /* ByteBufferImpl.java -- 
+    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ final class ByteBufferHelper
+ {
+   public static char getChar (ByteBuffer buffer, ByteOrder order)
+   {
+     return (char) getShort (buffer, order);
+   }
+   
+   public static void putChar (ByteBuffer buffer, char value, ByteOrder order)
+   {
+     putShort (buffer, (short) value, order);
+   }
+   
+   public static char getChar (ByteBuffer buffer, int index, ByteOrder order)
+   {
+     return (char) getShort (buffer, index, order);
+   }
+   
+   public static void putChar (ByteBuffer buffer, int index,
+ 			      char value, ByteOrder order)
+   {
+     putShort (buffer, index, (short) value, order);
+   }
+ 
+   public static short getShort (ByteBuffer buffer, ByteOrder order)
+   {
+     buffer.checkForUnderflow(2);
+ 
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         return (short) ((buffer.get() & 0xff)
+                         + (buffer.get() << 8));
+       }
+ 
+     return (short) ((buffer.get() << 8)
+                     + (buffer.get() & 0xff));
+   }
+   
+   public static void putShort (ByteBuffer buffer, short value, ByteOrder order)
+   {
+     buffer.checkForOverflow(2);
+ 
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         buffer.put ((byte) value);
+         buffer.put ((byte) (value >> 8));
+       }
+     else
+       {
+         buffer.put ((byte) (value >> 8));
+         buffer.put ((byte) value);
+       }
+   }
+   
+   public static short getShort (ByteBuffer buffer,
+ 				      int index, ByteOrder order)
+   {
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         return (short) ((buffer.get (index) & 0xff)
+                         + (buffer.get (++index) << 8));
+       }
+ 
+     return (short) ((buffer.get (index) << 8)
+                     + (buffer.get (++index) & 0xff));
+   }
+   
+   public static void putShort (ByteBuffer buffer, int index,
+ 			       short value, ByteOrder order)
+   {
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         buffer.put (index, (byte) value);
+         buffer.put (++index, (byte) (value >> 8));
+       }
+     else
+       {
+         buffer.put (index, (byte) (value >> 8));
+         buffer.put (++index, (byte) value);
+       }
+   }
+ 
+   public static int getInt (ByteBuffer buffer, ByteOrder order)
+   {
+     buffer.checkForUnderflow(4);
+ 
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         return ((buffer.get() & 0xff)
+                 + ((buffer.get() & 0xff) << 8)
+                 + ((buffer.get() & 0xff) << 16)
+                 + (buffer.get() << 24));
+       }
+ 
+     return (int) ((buffer.get() << 24)
+                   + ((buffer.get() & 0xff) << 16)
+                   + ((buffer.get() & 0xff) << 8)
+                   + (buffer.get() & 0xff));
+   }
+   
+   public static void putInt (ByteBuffer buffer, int value, ByteOrder order)
+   {
+     buffer.checkForOverflow(4);
+ 
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         buffer.put ((byte) value);
+         buffer.put ((byte) (value >> 8));
+         buffer.put ((byte) (value >> 16));
+         buffer.put ((byte) (value >> 24));
+       }
+     else
+       {
+         buffer.put ((byte) (value >> 24));
+         buffer.put ((byte) (value >> 16));
+         buffer.put ((byte) (value >> 8));
+         buffer.put ((byte) value);
+       }
+   }
+   
+   public static int getInt (ByteBuffer buffer, int index, ByteOrder order)
+   {
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         return ((buffer.get (index) & 0xff)
+                 + ((buffer.get (++index) & 0xff) << 8)
+                 + ((buffer.get (++index) & 0xff) << 16)
+                 + (buffer.get (++index) << 24));
+       }
+ 
+     return ((buffer.get (index) << 24)
+             + ((buffer.get (++index) & 0xff) << 16)
+             + ((buffer.get (++index) & 0xff) << 8)
+             + (buffer.get (++index) & 0xff));
+   }
+   
+   public static void putInt (ByteBuffer buffer, int index,
+ 				   int value, ByteOrder order)
+   {
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         buffer.put (index, (byte) value);
+         buffer.put (++index, (byte) (value >> 8));
+         buffer.put (++index, (byte) (value >> 16));
+         buffer.put (++index, (byte) (value >> 24));
+       }
+     else
+       {
+         buffer.put (index, (byte) (value >> 24));
+         buffer.put (++index, (byte) (value >> 16));
+         buffer.put (++index, (byte) (value >> 8));
+         buffer.put (++index, (byte) value);
+       }
+   }
+ 
+   public static long getLong (ByteBuffer buffer, ByteOrder order)
+   {
+     buffer.checkForUnderflow(8);
+ 
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         return ((buffer.get() & 0xff)
+                 + (((buffer.get() & 0xff)) << 8)
+                 + (((buffer.get() & 0xff)) << 16)
+                 + (((buffer.get() & 0xffL)) << 24)
+                 + (((buffer.get() & 0xffL)) << 32)
+                 + (((buffer.get() & 0xffL)) << 40)
+                 + (((buffer.get() & 0xffL)) << 48)
+                 + (((long) buffer.get()) << 56));
+       }
+ 
+     return ((((long) buffer.get()) << 56)
+             + ((buffer.get() & 0xffL) << 48)
+             + ((buffer.get() & 0xffL) << 40)
+             + ((buffer.get() & 0xffL) << 32)
+             + ((buffer.get() & 0xffL) << 24)
+             + ((buffer.get() & 0xff) << 16)
+             + ((buffer.get() & 0xff) << 8)
+             + (buffer.get() & 0xff));
+   }
+   
+   public static void putLong (ByteBuffer buffer, long value, ByteOrder order)
+   {
+     buffer.checkForOverflow(8);
+ 
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         buffer.put ((byte) value);
+         buffer.put ((byte) (value >> 8));
+         buffer.put ((byte) (value >> 16));
+         buffer.put ((byte) (value >> 24));
+         buffer.put ((byte) (value >> 32));
+         buffer.put ((byte) (value >> 40));
+         buffer.put ((byte) (value >> 48));
+         buffer.put ((byte) (value >> 56));
+       }
+     else
+       {
+         buffer.put ((byte) (value >> 56));
+         buffer.put ((byte) (value >> 48));
+         buffer.put ((byte) (value >> 40));
+         buffer.put ((byte) (value >> 32));
+         buffer.put ((byte) (value >> 24));
+         buffer.put ((byte) (value >> 16));
+         buffer.put ((byte) (value >> 8));
+         buffer.put ((byte) value);
+       }
+   }
+   
+   public static long getLong (ByteBuffer buffer, int index, ByteOrder order)
+   {
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         return ((buffer.get (index) & 0xff)
+                 + ((buffer.get (++index) & 0xff) << 8)
+                 + ((buffer.get (++index) & 0xff) << 16)
+                 + ((buffer.get (++index) & 0xffL) << 24)
+                 + ((buffer.get (++index) & 0xffL) << 32)
+                 + ((buffer.get (++index) & 0xffL) << 40)
+                 + ((buffer.get (++index) & 0xffL) << 48)
+                 + (((long) buffer.get (++index)) << 56));
+       }
+ 
+     return ((((long) buffer.get (index)) << 56)
+             + ((buffer.get (++index) & 0xffL) << 48)
+             + ((buffer.get (++index) & 0xffL) << 40)
+             + ((buffer.get (++index) & 0xffL) << 32)
+             + ((buffer.get (++index) & 0xffL) << 24)
+             + ((buffer.get (++index) & 0xff) << 16)
+             + ((buffer.get (++index) & 0xff) << 8)
+             + (buffer.get (++index) & 0xff));
+   }
+   
+   public static void putLong (ByteBuffer buffer, int index,
+ 				    long value, ByteOrder order)
+   {
+     if (order == ByteOrder.LITTLE_ENDIAN)
+       {
+         buffer.put (index, (byte) value);
+         buffer.put (++index, (byte) (value >> 8));
+         buffer.put (++index, (byte) (value >> 16));
+         buffer.put (++index, (byte) (value >> 24));
+         buffer.put (++index, (byte) (value >> 32));
+         buffer.put (++index, (byte) (value >> 40));
+         buffer.put (++index, (byte) (value >> 48));
+         buffer.put (++index, (byte) (value >> 56));
+       }
+     else
+       {
+         buffer.put (index, (byte) (value >> 56));
+         buffer.put (++index, (byte) (value >> 48));
+         buffer.put (++index, (byte) (value >> 40));
+         buffer.put (++index, (byte) (value >> 32));
+         buffer.put (++index, (byte) (value >> 24));
+         buffer.put (++index, (byte) (value >> 16));
+         buffer.put (++index, (byte) (value >> 8));
+         buffer.put (++index, (byte) value);
+       }
+   }
+ 
+   public static float getFloat (ByteBuffer buffer, ByteOrder order)
+   {
+     return Float.intBitsToFloat (getInt (buffer, order));
+   }
+   
+   public static void putFloat (ByteBuffer buffer, float value, ByteOrder order)
+   {
+     putInt (buffer, Float.floatToRawIntBits (value), order);
+   }
+   
+   public static float getFloat (ByteBuffer buffer, int index, ByteOrder order)
+   {
+     return Float.intBitsToFloat (getInt (buffer, index, order));
+   }
+ 
+   public static void putFloat (ByteBuffer buffer, int index,
+ 				     float value, ByteOrder order)
+   {
+     putInt (buffer, index, Float.floatToRawIntBits (value), order);
+   }
+ 
+   public static double getDouble (ByteBuffer buffer, ByteOrder order)
+   {
+     return Double.longBitsToDouble (getLong (buffer, order));
+   }
+ 
+   public static void putDouble (ByteBuffer buffer, double value, ByteOrder order)
+   {
+     putLong (buffer, Double.doubleToRawLongBits (value), order);
+   }
+   
+   public static double getDouble (ByteBuffer buffer, int index, ByteOrder order)
+   {
+     return Double.longBitsToDouble (getLong (buffer, index, order));
+   }
+   
+   public static void putDouble (ByteBuffer buffer, int index,
+ 				double value, ByteOrder order)
+   {
+     putLong (buffer, index, Double.doubleToRawLongBits (value), order);
+   }
+ } // ByteBufferHelper
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/ByteBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/ByteBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/ByteBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/ByteBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,379 ----
+ /* ByteBufferImpl.java -- 
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * This is a Heap memory implementation
+  */
+ final class ByteBufferImpl extends ByteBuffer
+ {
+   private boolean readOnly;
+ 
+   ByteBufferImpl (byte[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
+   {
+     super (capacity, limit, position, mark);
+     this.backing_buffer = buffer;
+     this.array_offset = offset;
+     this.readOnly = readOnly;
+   }
+   
+   public CharBuffer asCharBuffer ()
+   {
+     return new CharViewBufferImpl (this, remaining() >> 1);
+   }
+ 
+   public ShortBuffer asShortBuffer ()
+   {
+     return new ShortViewBufferImpl (this, remaining() >> 1);
+   }
+ 
+   public IntBuffer asIntBuffer ()
+   {
+     return new IntViewBufferImpl (this, remaining() >> 2);
+   }
+ 
+   public LongBuffer asLongBuffer ()
+   {
+     return new LongViewBufferImpl (this, remaining() >> 3);
+   }
+ 
+   public FloatBuffer asFloatBuffer ()
+   {
+     return new FloatViewBufferImpl (this, remaining() >> 2);
+   }
+ 
+   public DoubleBuffer asDoubleBuffer ()
+   {
+     return new DoubleViewBufferImpl (this, remaining() >> 3);
+   }
+ 
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public ByteBuffer slice ()
+   {
+     return new ByteBufferImpl (backing_buffer, array_offset + position (), remaining (), remaining (), 0, -1, isReadOnly ());
+   }
+   
+   public ByteBuffer duplicate ()
+   {
+     return new ByteBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, isReadOnly ());
+   }
+   
+   public ByteBuffer asReadOnlyBuffer ()
+   {
+     return new ByteBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, true);
+   }
+   
+   void shiftDown (int dst_offset, int src_offset, int count)
+   {
+     System.arraycopy(backing_buffer, array_offset + src_offset,
+ 		     backing_buffer, array_offset + dst_offset,
+ 		     count);
+   }
+ 
+   public ByteBuffer compact ()
+   {
+     checkIfReadOnly();
+     mark = -1;
+     int pos = position();
+     if (pos > 0)
+       {
+ 	int count = remaining();
+ 	shiftDown(0, pos, count);
+ 	position(count);
+ 	limit(capacity());
+       }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
+     return this;
+   }
+   
+   public boolean isDirect ()
+   {
+     return false;
+   }
+ 
+   /**
+    * Reads the <code>byte</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>bytes</code> in this buffer.
+    */
+   public byte get ()
+   {
+     if (pos >= limit)
+         throw new BufferUnderflowException();
+ 
+     return backing_buffer [(pos++) + array_offset];
+   }
+ 
+   /**
+    * Bulk get
+    */
+   public ByteBuffer get (byte[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     if ( (limit - pos) < length) // check for overflow
+       throw new BufferUnderflowException();
+ 
+     System.arraycopy(backing_buffer, pos + array_offset, 
+ 		     dst, offset, length);
+     pos += length;
+ 
+     return this;
+   }
+ 
+   /**
+    * Relative bulk put(), overloads the ByteBuffer impl.
+    */
+   public ByteBuffer put (byte[] src, int offset, int length)
+   {
+     if ( (limit - pos) < length) // check for overflow
+       throw new BufferOverflowException();
+     checkArraySize(src.length, offset, length);
+ 
+     System.arraycopy(src, offset, backing_buffer, pos + array_offset, length);
+     pos += length;
+ 
+     return this;
+   }
+ 
+   /**
+    * Relative put method. Writes <code>value</code> to the next position
+    * in the buffer.
+    *
+    * @exception BufferOverflowException If there is no remaining
+    * space in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public ByteBuffer put (byte value)
+   {
+     if (readOnly)
+         throw new ReadOnlyBufferException();
+     if (pos >= limit)
+         throw new BufferOverflowException();
+ 
+     backing_buffer [(pos++) + array_offset] = value;
+     return this;
+   }
+   
+   /**
+    * Absolute get method. Reads the <code>byte</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public byte get (int index)
+   {
+     checkIndex(index);
+ 
+     return backing_buffer [index + array_offset];
+   }
+   
+   /**
+    * Absolute put method. Writes <code>value</code> to position
+    * <code>index</code> in the buffer.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public ByteBuffer put (int index, byte value)
+   {
+     checkIfReadOnly();
+     checkIndex(index);
+ 
+     backing_buffer [index + array_offset] = value;
+     return this;
+   }
+   
+   public char getChar ()
+   {
+     return ByteBufferHelper.getChar(this, order());
+   }
+   
+   public ByteBuffer putChar (char value)
+   {
+     if (readOnly)
+       throw new ReadOnlyBufferException ();
+     if ( (limit-pos) < 2)
+       throw new BufferOverflowException();
+ 
+     if (endian == ByteOrder.LITTLE_ENDIAN)
+       {
+         backing_buffer [(pos++) + array_offset] = (byte)(value&0xFF);
+         backing_buffer [(pos++) + array_offset] = (byte)(value>>8);
+       }
+     else
+       {
+         backing_buffer [(pos++) + array_offset] = (byte)(value>>8);
+         backing_buffer [(pos++) + array_offset] = (byte)(value&0xFF);
+       }
+     return this;
+   }
+   
+   public char getChar (int index)
+   {
+     return ByteBufferHelper.getChar(this, index, order());
+   }
+   
+   public ByteBuffer putChar (int index, char value)
+   {
+     ByteBufferHelper.putChar(this, index, value, order());
+     return this;
+   }
+ 
+   public short getShort ()
+   {
+     return ByteBufferHelper.getShort(this, order());
+   }
+   
+   public ByteBuffer putShort (short value)
+   {
+     ByteBufferHelper.putShort(this, value, order());
+     return this;
+   }
+   
+   public short getShort (int index)
+   {
+     return ByteBufferHelper.getShort(this, index, order());
+   }
+   
+   public ByteBuffer putShort (int index, short value)
+   {
+     ByteBufferHelper.putShort(this, index, value, order());
+     return this;
+   }
+ 
+   public int getInt ()
+   {
+     return ByteBufferHelper.getInt(this, order());
+   }
+   
+   public ByteBuffer putInt (int value)
+   {
+     ByteBufferHelper.putInt(this, value, order());
+     return this;
+   }
+   
+   public int getInt (int index)
+   {
+     return ByteBufferHelper.getInt(this, index, order());
+   }
+   
+   public ByteBuffer putInt (int index, int value)
+   {
+     ByteBufferHelper.putInt(this, index, value, order());
+     return this;
+   }
+ 
+   public long getLong ()
+   {
+     return ByteBufferHelper.getLong(this, order());
+   }
+   
+   public ByteBuffer putLong (long value)
+   {
+     ByteBufferHelper.putLong (this, value, order());
+     return this;
+   }
+   
+   public long getLong (int index)
+   {
+     return ByteBufferHelper.getLong (this, index, order());
+   }
+   
+   public ByteBuffer putLong (int index, long value)
+   {
+     ByteBufferHelper.putLong (this, index, value, order());
+     return this;
+   }
+ 
+   public float getFloat ()
+   {
+     return ByteBufferHelper.getFloat (this, order());
+   }
+   
+   public ByteBuffer putFloat (float value)
+   {
+     ByteBufferHelper.putFloat (this, value, order());
+     return this;
+   }
+   
+   public float getFloat (int index)
+   {
+     return ByteBufferHelper.getFloat (this, index, order());
+   }
+ 
+   public ByteBuffer putFloat (int index, float value)
+   {
+     ByteBufferHelper.putFloat (this, index, value, order());
+     return this;
+   }
+ 
+   public double getDouble ()
+   {
+     return ByteBufferHelper.getDouble (this, order());
+   }
+ 
+   public ByteBuffer putDouble (double value)
+   {
+     ByteBufferHelper.putDouble (this, value, order());
+     return this;
+   }
+   
+   public double getDouble (int index)
+   {
+     return ByteBufferHelper.getDouble (this, index, order());
+   }
+   
+   public ByteBuffer putDouble (int index, double value)
+   {
+     ByteBufferHelper.putDouble (this, index, value, order());
+     return this;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/ByteOrder.java gcc-4.1.0/libjava/classpath/java/nio/ByteOrder.java
*** gcc-4.0.2/libjava/classpath/java/nio/ByteOrder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/ByteOrder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,82 ----
+ /* ByteOrder.java -- 
+    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.4
+  */
+ public final class ByteOrder
+ {
+   /**
+    * Constant indicating big endian byte order.
+    */
+   public static final ByteOrder BIG_ENDIAN = new ByteOrder();
+ 
+   /**
+    * Constant indicating little endian byte order.
+    */
+   public static final ByteOrder LITTLE_ENDIAN = new ByteOrder();
+ 
+   /**
+    * Returns the native byte order of the platform currently running.
+    *
+    * @return the native byte order
+    */
+   public static ByteOrder nativeOrder()
+   {
+     return (System.getProperty ("gnu.cpu.endian").equals("big")
+             ? BIG_ENDIAN : LITTLE_ENDIAN);
+   }
+ 
+   /**
+    * Returns a string representation of the byte order.
+    *
+    * @return the string
+    */
+   public String toString()
+   {
+     return this == BIG_ENDIAN ? "BIG_ENDIAN" : "LITTLE_ENDIAN";
+   }
+ 
+   // This class can only be instantiated here.
+   private ByteOrder()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/CharBuffer.java gcc-4.1.0/libjava/classpath/java/nio/CharBuffer.java
*** gcc-4.0.2/libjava/classpath/java/nio/CharBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/CharBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,508 ----
+ /* CharBuffer.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class CharBuffer extends Buffer
+   implements Comparable, CharSequence
+ {
+   int array_offset;
+   char[] backing_buffer;
+ 
+   CharBuffer (int capacity, int limit, int position, int mark)
+   {
+     super (capacity, limit, position, mark);
+     array_offset = 0;
+   }
+ 
+   /**
+    * Allocates a new <code>CharBuffer</code> object with a given capacity.
+    */
+   public static CharBuffer allocate (int capacity)
+   {
+     return new CharBufferImpl (capacity);
+   }
+ 
+   /**
+    * Wraps a <code>char</code> array into a <code>CharBuffer</code>
+    * object.
+    *
+    * @param array the array to wrap
+    * @param offset the offset of the region in the array to wrap
+    * @param length the length of the region in the array to wrap
+    *
+    * @return a new <code>CharBuffer</code> object
+    * 
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    */
+   public static final CharBuffer wrap(char[] array, int offset, int length)
+   {
+     return new CharBufferImpl(array, 0, array.length, offset + length, offset, -1, false);
+   }
+   
+   /**
+    * Wraps a character sequence into a <code>CharBuffer</code> object.
+    *
+    * @param seq the sequence to wrap
+    *
+    * @return a new <code>CharBuffer</code> object
+    */
+   public static final CharBuffer wrap(CharSequence seq)
+   {
+     return wrap(seq, 0, seq.length());
+   }
+   
+   /**
+    * Wraps a character sequence into a <code>CharBuffer</code> object.
+    * 
+    * @param seq the sequence to wrap
+    * @param start the index of the first character to wrap
+    * @param end the index of the first character not to wrap
+    *
+    * @return a new <code>CharBuffer</code> object
+    * 
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    */
+   public static final CharBuffer wrap(CharSequence seq, int start, int end)
+   {
+     // FIXME: implement better handling of java.lang.String.
+     // Probably share data with String via reflection.
+ 	  
+     if ((start < 0)
+         || (start > seq.length())
+         || (end < start)
+         || (end > (seq.length() - start)))
+       throw new IndexOutOfBoundsException();
+     
+     int len = end - start;
+     char[] buffer = new char[len];
+     
+     for (int i = 0; i < len; i++)
+       buffer[i] = seq.charAt(i + start);
+     
+     return wrap(buffer, 0, len).asReadOnlyBuffer();
+   }
+ 
+   /**
+    * Wraps a <code>char</code> array into a <code>CharBuffer</code>
+    * object.
+    *
+    * @param array the array to wrap
+    *
+    * @return a new <code>CharBuffer</code> object
+    */
+   public static final CharBuffer wrap(char[] array)
+   {
+     return wrap(array, 0, array.length);
+   }
+   
+   /**
+    * This method transfers <code>char</code>s from this buffer into the given
+    * destination array. Before the transfer, it checks if there are fewer than
+    * length <code>char</code>s remaining in this buffer. 
+    *
+    * @param dst The destination array
+    * @param offset The offset within the array of the first <code>char</code>
+    * to be written; must be non-negative and no larger than dst.length.
+    * @param length The maximum number of bytes to be written to the given array;
+    * must be non-negative and no larger than dst.length - offset.
+    *
+    * @exception BufferUnderflowException If there are fewer than length
+    * <code>char</code>s remaining in this buffer.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold.
+    */
+   public CharBuffer get (char[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       {
+         dst [i] = get ();
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * This method transfers <code>char</code>s from this buffer into the given
+    * destination array.
+    *
+    * @param dst The byte array to write into.
+    *
+    * @exception BufferUnderflowException If there are fewer than dst.length
+    * <code>char</code>s remaining in this buffer.
+    */
+   public CharBuffer get (char[] dst)
+   {
+     return get (dst, 0, dst.length);
+   }
+ 
+   /**
+    * Writes the content of the the <code>CharBUFFER</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * <code>src.remaining()</code> space remaining in this buffer.
+    *
+    * @param src The source data.
+    *
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>char</code>s in the source buffer.
+    * @exception IllegalArgumentException If the source buffer is this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public CharBuffer put (CharBuffer src)
+   {
+     if (src == this)
+       throw new IllegalArgumentException ();
+ 
+     checkForOverflow(src.remaining());
+ 
+     if (src.remaining () > 0)
+       {
+         char[] toPut = new char [src.remaining ()];
+         src.get (toPut);
+ 	put (toPut);
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>char array</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * length space remaining in this buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * @param offset The offset within the array of the first byte to be read;
+    * must be non-negative and no larger than src.length.
+    * @param length The number of bytes to be read from the given array;
+    * must be non-negative and no larger than src.length - offset.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>char</code>s in the source array.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public CharBuffer put (char[] src, int offset, int length)
+   {
+     checkArraySize(src.length, offset, length);
+     checkForOverflow(length);
+ 		    
+     for (int i = offset; i < offset + length; i++)
+       put (src [i]);
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>char array</code> src
+    * into the buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>char</code>s in the source array.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public final CharBuffer put (char[] src)
+   {
+     return put (src, 0, src.length);
+   }
+ 
+   /**
+    * Tells whether ot not this buffer is backed by an accessible
+    * <code>char</code> array.
+    */
+   public final boolean hasArray ()
+   {
+     return (backing_buffer != null
+             && !isReadOnly ());
+   }
+ 
+   /**
+    * Returns the <code>char</code> array that backs this buffer.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final char[] array ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+ 
+     return backing_buffer;
+   }
+ 
+   /**
+    * Returns the offset within this buffer's backing array of the first element.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final int arrayOffset ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return array_offset;
+   }
+ 
+   /**
+    * Calculates a hash code for this buffer.
+    *
+    * This is done with int arithmetic,
+    * where ** represents exponentiation, by this formula:<br>
+    * <code>s[position()] + 31 + (s[position()+1] + 30)*31**1 + ... +
+    * (s[limit()-1]+30)*31**(limit()-1)</code>.
+    * Where s is the buffer data. Note that the hashcode is dependent
+    * on buffer content, and therefore is not useful if the buffer
+    * content may change.
+    */
+   public int hashCode ()
+   {
+     int hashCode = get(position()) + 31;
+     int multiplier = 1;
+     for (int i = position() + 1; i < limit(); ++i)
+       {
+ 	  multiplier *= 31;
+ 	  hashCode += (get(i) + 30)*multiplier;
+       }
+     return hashCode;
+   }
+ 
+   /**
+    * Checks if this buffer is equal to obj.
+    */
+   public boolean equals (Object obj)
+   {
+     if (obj instanceof CharBuffer)
+       {
+         return compareTo (obj) == 0;
+       }
+ 
+     return false;
+   }
+ 
+   /**
+    * Compares two <code>CharBuffer</code> objects.
+    *
+    * @exception ClassCastException If obj is not an object derived from
+    * <code>CharBuffer</code>.
+    */
+   public int compareTo (Object obj)
+   {
+     CharBuffer other = (CharBuffer) obj;
+ 
+     int num = Math.min(remaining(), other.remaining());
+     int pos_this = position();
+     int pos_other = other.position();
+     
+     for (int count = 0; count < num; count++)
+       {
+ 	 char a = get(pos_this++);
+ 	 char b = other.get(pos_other++);
+       	 
+ 	 if (a == b)
+ 	   continue;
+       	   
+ 	 if (a < b)
+ 	   return -1;
+       	   
+ 	 return 1;
+       }
+       
+      return remaining() - other.remaining();
+   }
+ 
+   /**
+    * Returns the byte order of this buffer.
+    */
+   public abstract ByteOrder order ();
+ 
+   /**
+    * Reads the <code>char</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>char</code>s in this buffer.
+    */
+   public abstract char get ();
+ 
+   /**
+    * Writes the <code>char</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * <code>char</code>s in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract CharBuffer put (char b);
+ 
+   /**
+    * Absolute get method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public abstract char get (int index);
+   
+   /**
+    * Absolute put method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract CharBuffer put (int index, char b);
+ 
+   /**
+    * Compacts this buffer.
+    * 
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract CharBuffer compact ();
+ 
+   /**
+    * Tells wether or not this buffer is direct.
+    */
+   public abstract boolean isDirect ();
+ 
+   /**
+    * Creates a new <code>CharBuffer</code> whose content is a shared
+    * subsequence of this buffer's content.
+    */
+   public abstract CharBuffer slice ();
+ 
+   /**
+    * Creates a new <code>CharBuffer</code> that shares this buffer's
+    * content.
+    */
+   public abstract CharBuffer duplicate ();
+ 
+   /**
+    * Creates a new read-only <code>CharBuffer</code> that shares this
+    * buffer's content.
+    */
+   public abstract CharBuffer asReadOnlyBuffer ();
+   
+   /**
+    * Returns the remaining content of the buffer as a string.
+    */
+   public String toString ()
+   {
+     if (hasArray ())
+       return new String (array (), position (), length ());
+ 
+     char[] buf = new char [length ()];
+     int pos = position ();
+     get (buf, 0, buf.length);
+     position (pos);
+     return new String (buf);
+   }
+ 
+   /**
+    * Returns the length of the remaining chars in this buffer.
+    */
+   public final int length ()
+   { 
+     return remaining ();
+   }
+ 
+   /**
+    * Creates a new character buffer that represents the specified subsequence
+    * of this buffer, relative to the current position.
+    *
+    * @exception IndexOutOfBoundsException If the preconditions on start and
+    * end do not hold.
+    */
+   public abstract CharSequence subSequence (int start, int length);
+ 
+   /**
+    * Relative put method.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer.
+    * @exception IndexOutOfBoundsException If the preconditions on the start
+    * and end parameters do not hold.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public CharBuffer put (String str, int start, int length)
+   {
+     return put (str.toCharArray (), start, length);
+   }
+   
+   /**
+    * Relative put method.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public final CharBuffer put (String str)
+   {
+     return put (str.toCharArray (), 0, str.length ());
+   }
+   
+   /**
+    * Returns the character at <code>position() + index</code>.
+    * 
+    * @exception IndexOutOfBoundsException If index is negative not smaller than
+    * <code>remaining()</code>.
+    */
+   public final char charAt (int index)
+   {
+     if (index < 0
+         || index >= remaining ())
+       throw new IndexOutOfBoundsException ();
+     
+     return get (position () + index);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/CharBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/CharBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/CharBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/CharBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,219 ----
+ /* CharBufferImpl.java -- 
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * This is a Heap memory implementation
+  */
+ final class CharBufferImpl extends CharBuffer
+ {
+   private boolean readOnly;
+ 
+   CharBufferImpl (int capacity)
+   {
+     this (new char [capacity], 0, capacity, capacity, 0, -1, false);
+   }
+   
+   CharBufferImpl (char[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
+   {
+     super (capacity, limit, position, mark);
+     this.backing_buffer = buffer;
+     this.array_offset = offset;
+     this.readOnly = readOnly;
+   }
+   
+   public CharBufferImpl (CharBufferImpl copy)
+   {
+     super (copy.capacity (), copy.limit (), copy.position (), 0);
+     backing_buffer = copy.backing_buffer;
+     array_offset = copy.array_offset;
+     readOnly = copy.isReadOnly ();
+   }
+   
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public CharBuffer slice ()
+   {
+     return new CharBufferImpl (backing_buffer, array_offset + position (), remaining (), remaining (), 0, -1, isReadOnly ());
+   }
+   
+   public CharBuffer duplicate ()
+   {
+     return new CharBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, isReadOnly ());
+   }
+   
+   public CharBuffer asReadOnlyBuffer ()
+   {
+     return new CharBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, true);
+   }
+   
+   public CharBuffer compact ()
+   {
+     checkIfReadOnly();
+     mark = -1;
+     int copied = 0;
+     
+     while (remaining () > 0)
+       {
+ 	put (copied, get ());
+ 	copied++;
+       }
+ 
+     position (copied);
+     limit(capacity());
+     return this;
+   }
+   
+   public boolean isDirect ()
+   {
+     return false;
+   }
+ 
+   public CharSequence subSequence (int start, int end)
+   {
+     if (start < 0
+         || start > length ()
+         || end < start
+         || end > length ())
+       throw new IndexOutOfBoundsException ();
+ 
+     return new CharBufferImpl (backing_buffer, array_offset, capacity (), position () + end, position () + start, -1, isReadOnly ());
+   }
+   
+   /**
+    * Reads the <code>char</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>char</code>s in this buffer.
+    */
+   public char get ()
+   {
+     if (pos >= limit)
+         throw new BufferUnderflowException();
+ 
+     return backing_buffer [(pos++) + array_offset];
+   }
+   
+   /**
+    * Relative put method. Writes <code>value</code> to the next position
+    * in the buffer.
+    * 
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public CharBuffer put (char value)
+   {
+     if (readOnly)
+         throw new ReadOnlyBufferException();
+     if (pos >= limit)
+         throw new BufferOverflowException();
+ 
+     backing_buffer [(pos++) + array_offset] = value;
+     return this;
+   }
+   
+   /**
+    * Absolute get method. Reads the <code>char</code> at position
+    * <code>index</code>.
+    *
+    * @param index Position to read the <code>char</code> from.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public char get (int index)
+   {
+     checkIndex(index);
+     
+     return backing_buffer [index + array_offset];
+   }
+   
+   /**
+    * Bulk get, overloaded for speed.
+    */
+   public CharBuffer get (char[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     System.arraycopy(backing_buffer, pos + array_offset, 
+ 		     dst, offset, length);
+     pos += length;
+     return this;
+   }
+ 
+   /**
+    * Bulk put, overloaded for speed.
+    */
+   public CharBuffer put (char[] src, int offset, int length)
+   {
+     checkArraySize(src.length, offset, length);
+     checkForOverflow(length);
+ 		    
+     System.arraycopy(src, offset,
+ 		     backing_buffer, pos + array_offset, length);
+     pos += length;
+     return this;
+   }
+ 
+   /**
+    * Absolute put method. Writes <code>value</code> to position
+    * <code>index</code> in the buffer.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public CharBuffer put (int index, char value)
+   {
+     checkIndex(index);
+     checkIfReadOnly();
+     	    
+     backing_buffer [index + array_offset] = value;
+     return this;
+   }
+   
+   public ByteOrder order ()
+   {
+     return ByteOrder.nativeOrder ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/CharViewBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/CharViewBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/CharViewBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/CharViewBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,187 ----
+ /* CharViewBufferImpl.java -- 
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ class CharViewBufferImpl extends CharBuffer
+ {
+   /** Position in bb (i.e. a byte offset) where this buffer starts. */
+   private int offset;
+   private ByteBuffer bb;
+   private boolean readOnly;
+   private ByteOrder endian;
+   
+   CharViewBufferImpl (ByteBuffer bb, int capacity)
+   {
+     super (capacity, capacity, 0, -1);
+     this.bb = bb;
+     this.offset = bb.position();
+     this.readOnly = bb.isReadOnly();
+     this.endian = bb.order();
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+   
+   public CharViewBufferImpl (ByteBuffer bb, int offset, int capacity,
+ 			     int limit, int position, int mark,
+ 			     boolean readOnly, ByteOrder endian)
+   {
+     super (capacity, limit, position, mark);
+     this.bb = bb;
+     this.offset = offset;
+     this.readOnly = readOnly;
+     this.endian = endian;
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+ 
+   /**
+    * Reads the <code>char</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>char</code>s in this buffer.
+    */
+   public char get ()
+   {
+     int p = position();
+     char result = ByteBufferHelper.getChar(bb, (p << 1) + offset, endian);
+     position(p + 1);
+     return result;
+   }
+ 
+   /**
+    * Absolute get method. Reads the <code>char</code> at position
+    * <code>index</code>.
+    *
+    * @param index Position to read the <code>char</code> from.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public char get (int index)
+   {
+     return ByteBufferHelper.getChar(bb, (index << 1) + offset, endian);
+   }
+ 
+   public CharBuffer put (char value)
+   {
+     int p = position();
+     ByteBufferHelper.putChar(bb, (p << 1) + offset, value, endian);
+     position(p + 1);
+     return this;
+   }
+   
+   public CharBuffer put (int index, char value)
+   {
+     ByteBufferHelper.putChar(bb, (index << 1) + offset, value, endian);
+     return this;
+   }
+ 
+   public CharBuffer compact ()
+   {
+     if (position () > 0)
+       {
+         int count = limit () - position ();
+ 	bb.shiftDown(offset, offset + 2 * position(), 2 * count);
+         position (count);
+         limit (capacity ());
+       }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
+     return this;
+   }
+   
+   public CharBuffer slice ()
+   {
+     // Create a sliced copy of this object that shares its content.
+     return new CharViewBufferImpl (bb, (position () >> 1) + offset,
+ 				   remaining (), remaining (), 0, -1,
+ 				   isReadOnly (), endian);
+   }
+   
+   CharBuffer duplicate (boolean readOnly)
+   {
+     int pos = position();
+     reset();
+     int mark = position();
+     position(pos);
+     return new CharViewBufferImpl (bb, offset, capacity(), limit(),
+                                      pos, mark, readOnly, endian);
+   }
+   
+   public CharBuffer duplicate ()
+   {
+     return duplicate(readOnly);
+   }
+ 
+   public CharBuffer asReadOnlyBuffer ()
+   {
+     return duplicate(true);
+   }
+ 
+   public CharSequence subSequence (int start, int end)
+   {
+     if (start < 0
+         || end < start
+         || end > length ())
+       throw new IndexOutOfBoundsException ();
+ 
+     return new CharViewBufferImpl (bb, array_offset, capacity (),
+ 				   position () + end, position () + start,
+ 				   -1, isReadOnly (), endian);
+   }
+ 
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public boolean isDirect ()
+   {
+     return bb.isDirect ();
+   }
+   
+   public ByteOrder order ()
+   {
+     return endian;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/DirectByteBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/DirectByteBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/DirectByteBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/DirectByteBufferImpl.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,431 ----
+ /* DirectByteBufferImpl.java --
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ import gnu.classpath.Pointer;
+ 
+ abstract class DirectByteBufferImpl extends ByteBuffer
+ {
+   /**
+    * The owner is used to keep alive the object that actually owns the
+    * memory. There are three possibilities:
+    *  1) owner == this: We allocated the memory and we should free it,
+    *                    but *only* in finalize (if we've been sliced
+    *                    other objects will also have access to the
+    *                    memory).
+    *  2) owner == null: The byte buffer was created thru
+    *                    JNI.NewDirectByteBuffer. The JNI code is
+    *                    responsible for freeing the memory.
+    *  3) owner == some other object: The other object allocated the
+    *                                 memory and should free it.
+    */
+   private final Object owner;
+ 
+   static final class ReadOnly extends DirectByteBufferImpl
+   {
+     ReadOnly(Object owner, Pointer address,
+              int capacity, int limit,
+              int position)
+     {
+       super(owner, address, capacity, limit, position);
+     }
+ 
+     public ByteBuffer put(byte value)
+     {
+       throw new ReadOnlyBufferException ();
+     }
+ 
+     public ByteBuffer put(int index, byte value)
+     {
+       throw new ReadOnlyBufferException ();
+     }
+ 
+     public boolean isReadOnly()
+     {
+       return true;
+     }
+   }
+ 
+   static final class ReadWrite extends DirectByteBufferImpl
+   {
+     ReadWrite(int capacity)
+     {
+       super(capacity);
+     }
+ 
+     ReadWrite(Object owner, Pointer address,
+               int capacity, int limit,
+               int position)
+     {
+       super(owner, address, capacity, limit, position);
+     }
+ 
+     public boolean isReadOnly()
+     {
+       return false;
+     }
+   }
+ 
+   DirectByteBufferImpl(int capacity)
+   {
+     super(capacity, capacity, 0, -1);
+     this.owner = this;
+     this.address = VMDirectByteBuffer.allocate(capacity);
+   }
+ 
+   DirectByteBufferImpl(Object owner, Pointer address,
+                        int capacity, int limit,
+                        int position)
+   {
+     super(capacity, limit, position, -1);
+     this.owner = owner;
+     this.address = address;
+   }
+ 
+   /**
+    * Allocates a new direct byte buffer.
+    */
+   public static ByteBuffer allocate(int capacity)
+   {
+     return new DirectByteBufferImpl.ReadWrite(capacity);
+   }
+ 
+   protected void finalize() throws Throwable
+   {
+     if (owner == this)
+         VMDirectByteBuffer.free(address);
+   }
+ 
+   public byte get()
+   {
+     checkForUnderflow();
+ 
+     int pos = position();
+     byte result = VMDirectByteBuffer.get(address, pos);
+     position(pos + 1);
+     return result;
+   }
+ 
+   public byte get(int index)
+   {
+     checkIndex(index);
+ 
+     return VMDirectByteBuffer.get(address, index);
+   }
+ 
+   public ByteBuffer get(byte[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     int index = position();
+     VMDirectByteBuffer.get(address, index, dst, offset, length);
+     position(index+length);
+ 
+     return this;
+   }
+ 
+   public ByteBuffer put(byte value)
+   {
+     checkForOverflow();
+ 
+     int pos = position();
+     VMDirectByteBuffer.put(address, pos, value);
+     position(pos + 1);
+     return this;
+   }
+ 
+   public ByteBuffer put(int index, byte value)
+   {
+     checkIndex(index);
+ 
+     VMDirectByteBuffer.put(address, index, value);
+     return this;
+   }
+ 
+   public ByteBuffer put (byte[] src, int offset, int length)
+   {
+     checkArraySize (src.length, offset, length);
+     checkForUnderflow (length);
+ 
+     int index = position ();
+     VMDirectByteBuffer.put (address, index, src, offset, length);
+     position (index + length);
+ 
+     return this;
+   }
+ 
+   void shiftDown(int dst_offset, int src_offset, int count)
+   {
+     VMDirectByteBuffer.shiftDown(address, dst_offset, src_offset, count);
+   }
+ 
+   public ByteBuffer compact()
+   {
+     checkIfReadOnly();
+     mark = -1;
+     int pos = position();
+     if (pos > 0)
+       {
+         int count = remaining();
+         VMDirectByteBuffer.shiftDown(address, 0, pos, count);
+         position(count);
+         limit(capacity());
+       }
+     else
+       {
+         position(limit());
+         limit(capacity());
+       }
+     return this;
+   }
+ 
+   public ByteBuffer slice()
+   {
+     int rem = remaining();
+     if (isReadOnly())
+         return new DirectByteBufferImpl.ReadOnly
+       (owner, VMDirectByteBuffer.adjustAddress(address, position()),
+        rem, rem, 0);
+     else
+         return new DirectByteBufferImpl.ReadWrite
+       (owner, VMDirectByteBuffer.adjustAddress(address, position()),
+        rem, rem, 0);
+   }
+ 
+   private ByteBuffer duplicate(boolean readOnly)
+   {
+     int pos = position();
+     reset();
+     int mark = position();
+     position(pos);
+     DirectByteBufferImpl result;
+     if (readOnly)
+         result = new DirectByteBufferImpl.ReadOnly(owner, address, capacity(),
+                                                    limit(), pos);
+     else
+         result = new DirectByteBufferImpl.ReadWrite(owner, address, capacity(),
+                                                     limit(), pos);
+ 
+     if (mark != pos)
+       {
+         result.position(mark);
+         result.mark();
+         result.position(pos);
+       }
+     return result;
+   }
+ 
+   public ByteBuffer duplicate()
+   {
+     return duplicate(isReadOnly());
+   }
+ 
+   public ByteBuffer asReadOnlyBuffer()
+   {
+     return duplicate(true);
+   }
+ 
+   public boolean isDirect()
+   {
+     return true;
+   }
+ 
+   public CharBuffer asCharBuffer()
+   {
+     return new CharViewBufferImpl(this, remaining() >> 1);
+   }
+ 
+   public ShortBuffer asShortBuffer()
+   {
+     return new ShortViewBufferImpl(this, remaining() >> 1);
+   }
+ 
+   public IntBuffer asIntBuffer()
+   {
+     return new IntViewBufferImpl(this, remaining() >> 2);
+   }
+ 
+   public LongBuffer asLongBuffer()
+   {
+     return new LongViewBufferImpl(this, remaining() >> 3);
+   }
+ 
+   public FloatBuffer asFloatBuffer()
+   {
+     return new FloatViewBufferImpl(this, remaining() >> 2);
+   }
+ 
+   public DoubleBuffer asDoubleBuffer()
+   {
+     return new DoubleViewBufferImpl(this, remaining() >> 3);
+   }
+ 
+   public char getChar()
+   {
+     return ByteBufferHelper.getChar(this, order());
+   }
+ 
+   public ByteBuffer putChar(char value)
+   {
+     ByteBufferHelper.putChar(this, value, order());
+     return this;
+   }
+ 
+   public char getChar(int index)
+   {
+     return ByteBufferHelper.getChar(this, index, order());
+   }
+ 
+   public ByteBuffer putChar(int index, char value)
+   {
+     ByteBufferHelper.putChar(this, index, value, order());
+     return this;
+   }
+ 
+   public short getShort()
+   {
+     return ByteBufferHelper.getShort(this, order());
+   }
+ 
+   public ByteBuffer putShort(short value)
+   {
+     ByteBufferHelper.putShort(this, value, order());
+     return this;
+   }
+ 
+   public short getShort(int index)
+   {
+     return ByteBufferHelper.getShort(this, index, order());
+   }
+ 
+   public ByteBuffer putShort(int index, short value)
+   {
+     ByteBufferHelper.putShort(this, index, value, order());
+     return this;
+   }
+ 
+   public int getInt()
+   {
+     return ByteBufferHelper.getInt(this, order());
+   }
+ 
+   public ByteBuffer putInt(int value)
+   {
+     ByteBufferHelper.putInt(this, value, order());
+     return this;
+   }
+ 
+   public int getInt(int index)
+   {
+     return ByteBufferHelper.getInt(this, index, order());
+   }
+ 
+   public ByteBuffer putInt(int index, int value)
+   {
+     ByteBufferHelper.putInt(this, index, value, order());
+     return this;
+   }
+ 
+   public long getLong()
+   {
+     return ByteBufferHelper.getLong(this, order());
+   }
+ 
+   public ByteBuffer putLong(long value)
+   {
+     ByteBufferHelper.putLong(this, value, order());
+     return this;
+   }
+ 
+   public long getLong(int index)
+   {
+     return ByteBufferHelper.getLong(this, index, order());
+   }
+ 
+   public ByteBuffer putLong(int index, long value)
+   {
+     ByteBufferHelper.putLong(this, index, value, order());
+     return this;
+   }
+ 
+   public float getFloat()
+   {
+     return ByteBufferHelper.getFloat(this, order());
+   }
+ 
+   public ByteBuffer putFloat(float value)
+   {
+     ByteBufferHelper.putFloat(this, value, order());
+     return this;
+   }
+ 
+   public float getFloat(int index)
+   {
+     return ByteBufferHelper.getFloat(this, index, order());
+   }
+ 
+   public ByteBuffer putFloat(int index, float value)
+   {
+     ByteBufferHelper.putFloat(this, index, value, order());
+     return this;
+   }
+ 
+   public double getDouble()
+   {
+     return ByteBufferHelper.getDouble(this, order());
+   }
+ 
+   public ByteBuffer putDouble(double value)
+   {
+     ByteBufferHelper.putDouble(this, value, order());
+     return this;
+   }
+ 
+   public double getDouble(int index)
+   {
+     return ByteBufferHelper.getDouble(this, index, order());
+   }
+ 
+   public ByteBuffer putDouble(int index, double value)
+   {
+     ByteBufferHelper.putDouble(this, index, value, order());
+     return this;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/DoubleBuffer.java gcc-4.1.0/libjava/classpath/java/nio/DoubleBuffer.java
*** gcc-4.0.2/libjava/classpath/java/nio/DoubleBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/DoubleBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,383 ----
+ /* DoubleBuffer.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class DoubleBuffer extends Buffer
+   implements Comparable
+ {
+   int array_offset;
+   double[] backing_buffer;
+ 
+   DoubleBuffer (int capacity, int limit, int position, int mark)
+   {
+     super (capacity, limit, position, mark);
+     array_offset = 0;
+   }
+ 
+   /**
+    * Allocates a new <code>DoubleBuffer</code> object with a given capacity.
+    */
+   public static DoubleBuffer allocate (int capacity)
+   {
+     return new DoubleBufferImpl (capacity);
+   }
+ 
+   /**
+    * Wraps a <code>double</code> array into a <code>DoubleBuffer</code>
+    * object.
+    *
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    */
+   public static final DoubleBuffer wrap (double[] array, int offset, int length)
+   {
+     return new DoubleBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
+   }
+ 
+   /**
+    * Wraps a <code>double</code> array into a <code>DoubleBuffer</code>
+    * object.
+    */
+   public static final DoubleBuffer wrap (double[] array)
+   {
+     return wrap (array, 0, array.length);
+   }
+   
+   /**
+    * This method transfers <code>double</code>s from this buffer into the given
+    * destination array. Before the transfer, it checks if there are fewer than
+    * length <code>double</code>s remaining in this buffer. 
+    *
+    * @param dst The destination array
+    * @param offset The offset within the array of the first <code>double</code>
+    * to be written; must be non-negative and no larger than dst.length.
+    * @param length The maximum number of bytes to be written to the given array;
+    * must be non-negative and no larger than dst.length - offset.
+    *
+    * @exception BufferUnderflowException If there are fewer than length
+    * <code>double</code>s remaining in this buffer.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold.
+    */
+   public DoubleBuffer get (double[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       {
+         dst [i] = get ();
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * This method transfers <code>double</code>s from this buffer into the given
+    * destination array.
+    *
+    * @param dst The byte array to write into.
+    *
+    * @exception BufferUnderflowException If there are fewer than dst.length
+    * <code>double</code>s remaining in this buffer.
+    */
+   public DoubleBuffer get (double[] dst)
+   {
+     return get (dst, 0, dst.length);
+   }
+ 
+   /**
+    * Writes the content of the the <code>DoubleBUFFER</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * <code>src.remaining()</code> space remaining in this buffer.
+    *
+    * @param src The source data.
+    *
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>double</code>s in the source buffer.
+    * @exception IllegalArgumentException If the source buffer is this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public DoubleBuffer put (DoubleBuffer src)
+   {
+     if (src == this)
+       throw new IllegalArgumentException ();
+ 
+     checkForOverflow(src.remaining ());
+ 
+     if (src.remaining () > 0)
+       {
+         double[] toPut = new double [src.remaining ()];
+         src.get (toPut);
+         put (toPut);
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>double array</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * length space remaining in this buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * @param offset The offset within the array of the first byte to be read;
+    * must be non-negative and no larger than src.length.
+    * @param length The number of bytes to be read from the given array;
+    * must be non-negative and no larger than src.length - offset.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>double</code>s in the source array.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public DoubleBuffer put (double[] src, int offset, int length)
+   {
+     checkArraySize(src.length, offset, length);
+     checkForOverflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       put (src [i]);
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>double array</code> src
+    * into the buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>double</code>s in the source array.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public final DoubleBuffer put (double[] src)
+   {
+     return put (src, 0, src.length);
+   }
+ 
+   /**
+    * Tells whether ot not this buffer is backed by an accessible
+    * <code>double</code> array.
+    */
+   public final boolean hasArray ()
+   {
+     return (backing_buffer != null
+             && !isReadOnly ());
+   }
+ 
+   /**
+    * Returns the <code>double</code> array that backs this buffer.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final double[] array ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return backing_buffer;
+   }
+ 
+   /**
+    * Returns the offset within this buffer's backing array of the first element.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final int arrayOffset ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return array_offset;
+   }
+ 
+   /**
+    * Calculates a hash code for this buffer.
+    *
+    * This is done with <code>long</code> arithmetic,
+    * where ** represents exponentiation, by this formula:<br>
+    * <code>s[position()] + 31 + (s[position()+1] + 30)*31**1 + ... +
+    * (s[limit()-1]+30)*31**(limit()-1)</code>.
+    * Where s is the buffer data, in Double.doubleToLongBits() form
+    * Note that the hashcode is dependent on buffer content, 
+    * and therefore is not useful if the buffer content may change.
+    *
+    * @return the hash code (casted to int)
+    */
+   public int hashCode ()
+   {
+     long hashCode = Double.doubleToLongBits(get(position())) + 31;
+     long multiplier = 1;
+     for (int i = position() + 1; i < limit(); ++i)
+       {
+ 	  multiplier *= 31;
+ 	  hashCode += (Double.doubleToLongBits(get(i)) + 30)*multiplier;
+       }
+     return ((int)hashCode);
+   }
+ 
+   /**
+    * Checks if this buffer is equal to obj.
+    */
+   public boolean equals (Object obj)
+   {
+     if (obj instanceof DoubleBuffer)
+       {
+         return compareTo (obj) == 0;
+       }
+ 
+     return false;
+   }
+ 
+   /**
+    * Compares two <code>DoubleBuffer</code> objects.
+    *
+    * @exception ClassCastException If obj is not an object derived from
+    * <code>DoubleBuffer</code>.
+    */
+   public int compareTo (Object obj)
+   {
+     DoubleBuffer other = (DoubleBuffer) obj;
+ 
+     int num = Math.min(remaining(), other.remaining());
+     int pos_this = position();
+     int pos_other = other.position();
+     
+     for (int count = 0; count < num; count++)
+       {
+ 	double a = get(pos_this++);
+ 	double b = other.get(pos_other++);
+       	 
+ 	if (a == b)
+ 	  continue;
+       	   
+ 	if (a < b)
+ 	  return -1;
+       	   
+ 	return 1;
+       }
+       
+     return remaining() - other.remaining();
+   }
+ 
+   /**
+    * Returns the byte order of this buffer.
+    */
+   public abstract ByteOrder order ();
+ 
+   /**
+    * Reads the <code>double</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>double</code>s in this buffer.
+    */
+   public abstract double get ();
+ 
+   /**
+    * Writes the <code>double</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * <code>double</code>s in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract DoubleBuffer put (double b);
+ 
+   /**
+    * Absolute get method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public abstract double get (int index);
+   
+   /**
+    * Absolute put method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract DoubleBuffer put (int index, double b);
+ 
+   /**
+    * Compacts this buffer.
+    * 
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract DoubleBuffer compact ();
+ 
+   /**
+    * Tells wether or not this buffer is direct.
+    */
+   public abstract boolean isDirect ();
+ 
+   /**
+    * Creates a new <code>DoubleBuffer</code> whose content is a shared
+    * subsequence of this buffer's content.
+    */
+   public abstract DoubleBuffer slice ();
+ 
+   /**
+    * Creates a new <code>DoubleBuffer</code> that shares this buffer's
+    * content.
+    */
+   public abstract DoubleBuffer duplicate ();
+ 
+   /**
+    * Creates a new read-only <code>DoubleBuffer</code> that shares this
+    * buffer's content.
+    */
+   public abstract DoubleBuffer asReadOnlyBuffer ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/DoubleBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/DoubleBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/DoubleBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/DoubleBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,172 ----
+ /* DoubleBufferImpl.java -- 
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * This is a Heap memory implementation
+  */
+ final class DoubleBufferImpl extends DoubleBuffer
+ {
+   private boolean readOnly;
+ 
+   DoubleBufferImpl (int capacity)
+   {
+     this (new double [capacity], 0, capacity, capacity, 0, -1, false);
+   }
+   
+   DoubleBufferImpl (double[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
+   {
+     super (capacity, limit, position, mark);
+     this.backing_buffer = buffer;
+     this.array_offset = offset;
+     this.readOnly = readOnly;
+   }
+   
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public DoubleBuffer slice ()
+   {
+     return new DoubleBufferImpl (backing_buffer, array_offset + position (), remaining (), remaining (), 0, -1, isReadOnly ());
+   }
+   
+   public DoubleBuffer duplicate ()
+   {
+     return new DoubleBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, isReadOnly ());
+   }
+   
+   public DoubleBuffer asReadOnlyBuffer ()
+   {
+     return new DoubleBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, true);
+   }
+   
+   public DoubleBuffer compact ()
+   {
+     checkIfReadOnly();
+     mark = -1;
+     int copied = 0;
+     
+     while (remaining () > 0)
+       {
+ 	put (copied, get ());
+ 	copied++;
+       }
+ 
+     position (copied);
+     limit(capacity());
+     return this;
+   }
+   
+   public boolean isDirect ()
+   {
+     return false;
+   }
+ 
+   /**
+    * Reads the <code>double</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>double</code>s in this buffer.
+    */
+   public double get ()
+   {
+     checkForUnderflow();
+ 
+     double result = backing_buffer [position ()];
+     position (position () + 1);
+     return result;
+   }
+   
+   /**
+    * Relative put method. Writes <code>value</code> to the next position
+    * in the buffer.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * space in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public DoubleBuffer put (double value)
+   {
+     checkIfReadOnly();
+     checkForOverflow();
+ 	  	    
+     backing_buffer [position ()] = value;
+     position (position () + 1);
+     return this;
+   }
+   
+   /**
+    * Absolute get method. Reads the <code>double</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public double get (int index)
+   {
+     checkIndex(index);
+ 
+     return backing_buffer [index];
+   }
+   
+   /**
+    * Absolute put method. Writes <code>value</code> to position
+    * <code>index</code> in the buffer.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public DoubleBuffer put (int index, double value)
+   {
+     checkIfReadOnly();
+     checkIndex(index);
+ 
+     backing_buffer [index] = value;
+     return this;
+   }
+   
+   public ByteOrder order ()
+   {
+     return ByteOrder.nativeOrder ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/DoubleViewBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/DoubleViewBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/DoubleViewBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/DoubleViewBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,172 ----
+ /* DoubleViewBufferImpl.java -- 
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ final class DoubleViewBufferImpl extends DoubleBuffer
+ {
+   /** Position in bb (i.e. a byte offset) where this buffer starts. */
+   private int offset;
+   private ByteBuffer bb;
+   private boolean readOnly;
+   private ByteOrder endian;
+   
+   DoubleViewBufferImpl (ByteBuffer bb, int capacity)
+   {
+     super (capacity, capacity, 0, -1);
+     this.bb = bb;
+     this.offset = bb.position();
+     this.readOnly = bb.isReadOnly();
+     this.endian = bb.order();
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+   
+   public DoubleViewBufferImpl (ByteBuffer bb, int offset, int capacity,
+                                int limit, int position, int mark,
+                                boolean readOnly, ByteOrder endian)
+   {
+     super (capacity, limit, position, mark);
+     this.bb = bb;
+     this.offset = offset;
+     this.readOnly = readOnly;
+     this.endian = endian;
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+ 
+   /**
+    * Reads the <code>double</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>double</code>s in this buffer.
+    */
+   public double get ()
+   {
+     int p = position();
+     double result = ByteBufferHelper.getDouble(bb, (p << 3) + offset, endian);
+     position(p + 1);
+     return result;
+   }
+ 
+   /**
+    * Absolute get method. Reads the <code>double</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public double get (int index)
+   {
+     return ByteBufferHelper.getDouble(bb, (index << 3) + offset, endian);
+   }
+ 
+   public DoubleBuffer put (double value)
+   {
+     int p = position();
+     ByteBufferHelper.putDouble(bb, (p << 3) + offset, value, endian);
+     position(p + 1);
+     return this;
+   }
+   
+   public DoubleBuffer put (int index, double value)
+   {
+     ByteBufferHelper.putDouble(bb, (index << 3) + offset, value, endian);
+     return this;
+   }
+ 
+   public DoubleBuffer compact ()
+   {
+     if (position () > 0)
+       {
+         int count = limit () - position ();
+ 	bb.shiftDown(offset, offset + 8 * position(), 8 * count);
+         position (count);
+         limit (capacity ());
+       }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
+     return this;
+   }
+   
+   public DoubleBuffer slice ()
+   {
+     return new DoubleViewBufferImpl (bb, (position () >> 3) + offset,
+ 				     remaining(), remaining(), 0, -1,
+                                      readOnly, endian);
+   }
+   
+   DoubleBuffer duplicate (boolean readOnly)
+   {
+     int pos = position();
+     reset();
+     int mark = position();
+     position(pos);
+     return new DoubleViewBufferImpl (bb, offset, capacity(), limit(),
+                                      pos, mark, readOnly, endian);
+   }
+   
+   public DoubleBuffer duplicate ()
+   {
+     return duplicate(readOnly);
+   }
+ 
+   public DoubleBuffer asReadOnlyBuffer ()
+   {
+     return duplicate(true);
+   }
+ 
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public boolean isDirect ()
+   {
+     return bb.isDirect ();
+   }
+   
+   public ByteOrder order ()
+   {
+     return endian;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/FloatBuffer.java gcc-4.1.0/libjava/classpath/java/nio/FloatBuffer.java
*** gcc-4.0.2/libjava/classpath/java/nio/FloatBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/FloatBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,383 ----
+ /* FloatBuffer.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class FloatBuffer extends Buffer
+   implements Comparable
+ {
+   int array_offset;
+   float[] backing_buffer;
+ 
+   FloatBuffer (int capacity, int limit, int position, int mark)
+   {
+     super (capacity, limit, position, mark);
+     array_offset = 0;
+   }
+ 
+   /**
+    * Allocates a new <code>FloatBuffer</code> object with a given capacity.
+    */
+   public static FloatBuffer allocate (int capacity)
+   {
+     return new FloatBufferImpl (capacity);
+   }
+ 
+   /**
+    * Wraps a <code>float</code> array into a <code>FloatBuffer</code>
+    * object.
+    *
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    */
+   public static final FloatBuffer wrap (float[] array, int offset, int length)
+   {
+     return new FloatBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
+   }
+ 
+   /**
+    * Wraps a <code>float</code> array into a <code>FloatBuffer</code>
+    * object.
+    */
+   public static final FloatBuffer wrap (float[] array)
+   {
+     return wrap (array, 0, array.length);
+   }
+   
+   /**
+    * This method transfers <code>float</code>s from this buffer into the given
+    * destination array. Before the transfer, it checks if there are fewer than
+    * length <code>float</code>s remaining in this buffer. 
+    *
+    * @param dst The destination array
+    * @param offset The offset within the array of the first <code>float</code>
+    * to be written; must be non-negative and no larger than dst.length.
+    * @param length The maximum number of bytes to be written to the given array;
+    * must be non-negative and no larger than dst.length - offset.
+    *
+    * @exception BufferUnderflowException If there are fewer than length
+    * <code>float</code>s remaining in this buffer.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold.
+    */
+   public FloatBuffer get (float[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       {
+         dst [i] = get ();
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * This method transfers <code>float</code>s from this buffer into the given
+    * destination array.
+    *
+    * @param dst The byte array to write into.
+    *
+    * @exception BufferUnderflowException If there are fewer than dst.length
+    * <code>float</code>s remaining in this buffer.
+    */
+   public FloatBuffer get (float[] dst)
+   {
+     return get (dst, 0, dst.length);
+   }
+ 
+   /**
+    * Writes the content of the the <code>FloatBUFFER</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * <code>src.remaining()</code> space remaining in this buffer.
+    *
+    * @param src The source data.
+    *
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>float</code>s in the source buffer.
+    * @exception IllegalArgumentException If the source buffer is this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public FloatBuffer put (FloatBuffer src)
+   {
+     if (src == this)
+       throw new IllegalArgumentException ();
+ 
+     checkForOverflow(src.remaining());
+ 
+     if (src.remaining () > 0)
+       {
+         float[] toPut = new float [src.remaining ()];
+         src.get (toPut);
+         put (toPut);
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>float array</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * length space remaining in this buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * @param offset The offset within the array of the first byte to be read;
+    * must be non-negative and no larger than src.length.
+    * @param length The number of bytes to be read from the given array;
+    * must be non-negative and no larger than src.length - offset.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>float</code>s in the source array.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public FloatBuffer put (float[] src, int offset, int length)
+   {
+     checkArraySize(src.length, offset, length);
+     checkForOverflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       put (src [i]);
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>float array</code> src
+    * into the buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>float</code>s in the source array.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public final FloatBuffer put (float[] src)
+   {
+     return put (src, 0, src.length);
+   }
+ 
+   /**
+    * Tells whether ot not this buffer is backed by an accessible
+    * <code>float</code> array.
+    */
+   public final boolean hasArray ()
+   {
+     return (backing_buffer != null
+             && !isReadOnly ());
+   }
+ 
+   /**
+    * Returns the <code>float</code> array that backs this buffer.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final float[] array ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return backing_buffer;
+   }
+ 
+   /**
+    * Returns the offset within this buffer's backing array of the first element.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final int arrayOffset ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return array_offset;
+   }
+ 
+   /**
+    * Calculates a hash code for this buffer.
+    *
+    * This is done with <code>int</code> arithmetic,
+    * where ** represents exponentiation, by this formula:<br>
+    * <code>s[position()] + 31 + (s[position()+1] + 30)*31**1 + ... +
+    * (s[limit()-1]+30)*31**(limit()-1)</code>.
+    * Where s is the buffer data, in Float.floatToIntBits() form
+    * Note that the hashcode is dependent on buffer content, 
+    * and therefore is not useful if the buffer content may change.
+    *
+    * @return the hash code
+    */
+   public int hashCode ()
+   {
+     int hashCode = Float.floatToIntBits(get(position())) + 31;
+     int multiplier = 1;
+     for (int i = position() + 1; i < limit(); ++i)
+       {
+ 	  multiplier *= 31;
+ 	  hashCode += (Float.floatToIntBits(get(i)) + 30)*multiplier;
+       }
+     return hashCode;
+   }
+ 
+   /**
+    * Checks if this buffer is equal to obj.
+    */
+   public boolean equals (Object obj)
+   {
+     if (obj instanceof FloatBuffer)
+       {
+         return compareTo (obj) == 0;
+       }
+ 
+     return false;
+   }
+ 
+   /**
+    * Compares two <code>FloatBuffer</code> objects.
+    *
+    * @exception ClassCastException If obj is not an object derived from
+    * <code>FloatBuffer</code>.
+    */
+   public int compareTo (Object obj)
+   {
+     FloatBuffer other = (FloatBuffer) obj;
+ 
+     int num = Math.min(remaining(), other.remaining());
+     int pos_this = position();
+     int pos_other = other.position();
+     
+     for (int count = 0; count < num; count++)
+       {
+ 	float a = get(pos_this++);
+ 	float b = other.get(pos_other++);
+       	 
+ 	if (a == b)
+ 	  continue;
+       	   
+ 	if (a < b)
+ 	  return -1;
+       	   
+ 	return 1;
+       }
+       
+     return remaining() - other.remaining();
+   }
+ 
+   /**
+    * Returns the byte order of this buffer.
+    */
+   public abstract ByteOrder order ();
+ 
+   /**
+    * Reads the <code>float</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>float</code>s in this buffer.
+    */
+   public abstract float get ();
+ 
+   /**
+    * Writes the <code>float</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * <code>float</code>s in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract FloatBuffer put (float b);
+ 
+   /**
+    * Absolute get method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public abstract float get (int index);
+   
+   /**
+    * Absolute put method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract FloatBuffer put (int index, float b);
+ 
+   /**
+    * Compacts this buffer.
+    * 
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract FloatBuffer compact ();
+ 
+   /**
+    * Tells wether or not this buffer is direct.
+    */
+   public abstract boolean isDirect ();
+ 
+   /**
+    * Creates a new <code>FloatBuffer</code> whose content is a shared
+    * subsequence of this buffer's content.
+    */
+   public abstract FloatBuffer slice ();
+ 
+   /**
+    * Creates a new <code>FloatBuffer</code> that shares this buffer's
+    * content.
+    */
+   public abstract FloatBuffer duplicate ();
+ 
+   /**
+    * Creates a new read-only <code>FloatBuffer</code> that shares this
+    * buffer's content.
+    */
+   public abstract FloatBuffer asReadOnlyBuffer ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/FloatBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/FloatBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/FloatBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/FloatBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,172 ----
+ /* FloatBufferImpl.java -- 
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * This is a Heap memory implementation
+  */
+ final class FloatBufferImpl extends FloatBuffer
+ {
+   private boolean readOnly;
+ 
+   FloatBufferImpl (int capacity)
+   {
+     this (new float [capacity], 0, capacity, capacity, 0, -1, false);
+   }
+   
+   FloatBufferImpl (float[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
+   {
+     super (capacity, limit, position, mark);
+     this.backing_buffer = buffer;
+     this.array_offset = offset;
+     this.readOnly = readOnly;
+   }
+   
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public FloatBuffer slice ()
+   {
+     return new FloatBufferImpl (backing_buffer, array_offset + position (), remaining (), remaining (), 0, -1, isReadOnly ());
+   }
+   
+   public FloatBuffer duplicate ()
+   {
+     return new FloatBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, isReadOnly ());
+   }
+   
+   public FloatBuffer asReadOnlyBuffer ()
+   {
+     return new FloatBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, true);
+   }
+   
+   public FloatBuffer compact ()
+   {
+     checkIfReadOnly();
+     mark = -1;
+     int copied = 0;
+     
+     while (remaining () > 0)
+       {
+ 	put (copied, get ());
+ 	copied++;
+       }
+ 
+     position (copied);
+     limit(capacity());
+     return this;
+   }
+   
+   public boolean isDirect ()
+   {
+     return false;
+   }
+ 
+   /**
+    * Reads the <code>float</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>floats</code> in this buffer.
+    */
+   public float get ()
+   {
+     checkForUnderflow();
+ 
+     float result = backing_buffer [position ()];
+     position (position () + 1);
+     return result;
+   }
+   
+   /**
+    * Relative put method. Writes <code>value</code> to the next position
+    * in the buffer.
+    * 
+    * @exception BufferOverflowException If there no remaining 
+    * space in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public FloatBuffer put (float value)
+   {
+     checkIfReadOnly();
+     checkForOverflow();
+ 
+     backing_buffer [position ()] = value;
+     position (position () + 1);
+     return this;
+   }
+   
+   /**
+    * Absolute get method. Reads the <code>float</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public float get (int index)
+   {
+     checkIndex(index);
+ 
+     return backing_buffer [index];
+   }
+   
+   /**
+    * Absolute put method. Writes <code>value</code> to position
+    * <code>index</code> in the buffer.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public FloatBuffer put (int index, float value)
+   {
+     checkIfReadOnly();
+     checkIndex(index);
+ 
+     backing_buffer [index] = value;
+     return this;
+   }
+   
+   public ByteOrder order ()
+   {
+     return ByteOrder.nativeOrder ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/FloatViewBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/FloatViewBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/FloatViewBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/FloatViewBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,173 ----
+ /* FloatViewBufferImpl.java -- 
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ final class FloatViewBufferImpl extends FloatBuffer
+ {
+   /** Position in bb (i.e. a byte offset) where this buffer starts. */
+   private int offset;
+   private ByteBuffer bb;
+   private boolean readOnly;
+   private ByteOrder endian;
+   
+   FloatViewBufferImpl (ByteBuffer bb, int capacity)
+   {
+     super (capacity, capacity, 0, -1);
+     this.bb = bb;
+     this.offset = bb.position();
+     this.readOnly = bb.isReadOnly();
+     this.endian = bb.order();
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+   
+   public FloatViewBufferImpl (ByteBuffer bb, int offset, int capacity,
+ 			      int limit, int position, int mark,
+ 			      boolean readOnly, ByteOrder endian)
+   {
+     super (capacity, limit, position, mark);
+     this.bb = bb;
+     this.offset = offset;
+     this.readOnly = readOnly;
+     this.endian = endian;
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+ 
+   /**
+    * Reads the <code>float</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>floats</code> in this buffer.
+    */
+   public float get ()
+   {
+     int p = position();
+     float result = ByteBufferHelper.getFloat(bb, (p << 2) + offset, endian);
+     position(p + 1);
+     return result;
+   }
+ 
+   /**
+    * Absolute get method. Reads the <code>float</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public float get (int index)
+   {
+     return ByteBufferHelper.getFloat(bb, (index << 2) + offset, endian);
+   }
+ 
+   public FloatBuffer put (float value)
+   {
+     int p = position();
+     ByteBufferHelper.putFloat(bb, (p << 2) + offset, value, endian);
+     position(p + 1);
+     return this;
+   }
+   
+   public FloatBuffer put (int index, float value)
+   {
+     ByteBufferHelper.putFloat(bb, (index << 2) + offset, value, endian);
+     return this;
+   }
+ 
+   public FloatBuffer compact ()
+   {
+     if (position () > 0)
+       {
+         int count = limit () - position ();
+ 	bb.shiftDown(offset, offset + 4 * position(), 4 * count);
+         position (count);
+         limit (capacity ());
+       }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
+     return this;
+   }
+   
+   public FloatBuffer slice ()
+   {
+     // Create a sliced copy of this object that shares its content.
+     return new FloatViewBufferImpl (bb, (position () >> 2) + offset,
+ 				    remaining(), remaining(), 0, -1,
+ 				    readOnly, endian);
+   }
+   
+   FloatBuffer duplicate (boolean readOnly)
+   {
+     int pos = position();
+     reset();
+     int mark = position();
+     position(pos);
+     return new FloatViewBufferImpl (bb, offset, capacity(), limit(),
+ 				    pos, mark, readOnly, endian);
+   }
+   
+   public FloatBuffer duplicate ()
+   {
+     return duplicate(readOnly);
+   }
+ 
+   public FloatBuffer asReadOnlyBuffer ()
+   {
+     return duplicate(true);
+   }
+ 
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public boolean isDirect ()
+   {
+     return bb.isDirect ();
+   }
+   
+   public ByteOrder order ()
+   {
+     return endian;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/IntBuffer.java gcc-4.1.0/libjava/classpath/java/nio/IntBuffer.java
*** gcc-4.0.2/libjava/classpath/java/nio/IntBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/IntBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,383 ----
+ /* IntBuffer.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class IntBuffer extends Buffer
+   implements Comparable
+ {
+   int array_offset;
+   int[] backing_buffer;
+ 
+   IntBuffer (int capacity, int limit, int position, int mark)
+   {
+     super (capacity, limit, position, mark);
+     array_offset = 0;
+   }
+ 
+   /**
+    * Allocates a new <code>IntBuffer</code> object with a given capacity.
+    */
+   public static IntBuffer allocate (int capacity)
+   {
+     return new IntBufferImpl (capacity);
+   }
+ 
+   /**
+    * Wraps a <code>int</code> array into a <code>IntBuffer</code>
+    * object.
+    *
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    */
+   public static final IntBuffer wrap (int[] array, int offset, int length)
+   {
+     return new IntBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
+   }
+ 
+   /**
+    * Wraps a <code>int</code> array into a <code>IntBuffer</code>
+    * object.
+    */
+   public static final IntBuffer wrap (int[] array)
+   {
+     return wrap (array, 0, array.length);
+   }
+   
+   /**
+    * This method transfers <code>int</code>s from this buffer into the given
+    * destination array. Before the transfer, it checks if there are fewer than
+    * length <code>int</code>s remaining in this buffer. 
+    *
+    * @param dst The destination array
+    * @param offset The offset within the array of the first <code>int</code>
+    * to be written; must be non-negative and no larger than dst.length.
+    * @param length The maximum number of bytes to be written to the given array;
+    * must be non-negative and no larger than dst.length - offset.
+    *
+    * @exception BufferUnderflowException If there are fewer than length
+    * <code>int</code>s remaining in this buffer.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold.
+    */
+   public IntBuffer get (int[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       {
+         dst [i] = get ();
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * This method transfers <code>int</code>s from this buffer into the given
+    * destination array.
+    *
+    * @param dst The byte array to write into.
+    *
+    * @exception BufferUnderflowException If there are fewer than dst.length
+    * <code>int</code>s remaining in this buffer.
+    */
+   public IntBuffer get (int[] dst)
+   {
+     return get (dst, 0, dst.length);
+   }
+ 
+   /**
+    * Writes the content of the the <code>IntBUFFER</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * <code>src.remaining()</code> space remaining in this buffer.
+    *
+    * @param src The source data.
+    *
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>int</code>s in the source buffer.
+    * @exception IllegalArgumentException If the source buffer is this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public IntBuffer put (IntBuffer src)
+   {
+     if (src == this)
+       throw new IllegalArgumentException ();
+ 
+     checkForOverflow(src.remaining ());
+ 
+     if (src.remaining () > 0)
+       {
+         int[] toPut = new int [src.remaining ()];
+         src.get (toPut);
+         put (toPut);
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>int array</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * length space remaining in this buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * @param offset The offset within the array of the first byte to be read;
+    * must be non-negative and no larger than src.length.
+    * @param length The number of bytes to be read from the given array;
+    * must be non-negative and no larger than src.length - offset.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>int</code>s in the source array.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public IntBuffer put (int[] src, int offset, int length)
+   {
+     checkArraySize(src.length, offset, length);
+     checkForOverflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       put (src [i]);
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>int array</code> src
+    * into the buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>int</code>s in the source array.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public final IntBuffer put (int[] src)
+   {
+     return put (src, 0, src.length);
+   }
+ 
+   /**
+    * Tells whether ot not this buffer is backed by an accessible
+    * <code>int</code> array.
+    */
+   public final boolean hasArray ()
+   {
+     return (backing_buffer != null
+             && !isReadOnly ());
+   }
+ 
+   /**
+    * Returns the <code>int</code> array that backs this buffer.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final int[] array ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return backing_buffer;
+   }
+ 
+   /**
+    * Returns the offset within this buffer's backing array of the first element.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final int arrayOffset ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return array_offset;
+   }
+ 
+   /**
+    * Calculates a hash code for this buffer.
+    *
+    * This is done with <code>int</code> arithmetic,
+    * where ** represents exponentiation, by this formula:<br>
+    * <code>s[position()] + 31 + (s[position()+1] + 30)*31**1 + ... +
+    * (s[limit()-1]+30)*31**(limit()-1)</code>.
+    * Where s is the buffer data. Note that the hashcode is dependent
+    * on buffer content, and therefore is not useful if the buffer
+    * content may change.
+    *
+    * @return the hash code
+    */
+   public int hashCode ()
+   {
+     int hashCode = get(position()) + 31;
+     int multiplier = 1;
+     for (int i = position() + 1; i < limit(); ++i)
+       {
+ 	  multiplier *= 31;
+ 	  hashCode += (get(i) + 30)*multiplier;
+       }
+     return hashCode;
+   }
+ 
+   /**
+    * Checks if this buffer is equal to obj.
+    */
+   public boolean equals (Object obj)
+   {
+     if (obj instanceof IntBuffer)
+       {
+         return compareTo (obj) == 0;
+       }
+ 
+     return false;
+   }
+ 
+   /**
+    * Compares two <code>IntBuffer</code> objects.
+    *
+    * @exception ClassCastException If obj is not an object derived from
+    * <code>IntBuffer</code>.
+    */
+   public int compareTo (Object obj)
+   {
+     IntBuffer other = (IntBuffer) obj;
+ 
+     int num = Math.min(remaining(), other.remaining());
+     int pos_this = position();
+     int pos_other = other.position();
+     
+     for (int count = 0; count < num; count++)
+       {
+       	 int a = get(pos_this++);
+       	 int b = other.get(pos_other++);
+       	 
+       	 if (a == b)
+       	   continue;
+       	   
+       	 if (a < b)
+       	   return -1;
+       	   
+       	 return 1;
+       }
+       
+      return remaining() - other.remaining();
+   }
+ 
+   /**
+    * Returns the byte order of this buffer.
+    */
+   public abstract ByteOrder order ();
+ 
+   /**
+    * Reads the <code>int</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>int</code>s in this buffer.
+    */
+   public abstract int get ();
+ 
+   /**
+    * Writes the <code>int</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * <code>int</code>s in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract IntBuffer put (int b);
+ 
+   /**
+    * Absolute get method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public abstract int get (int index);
+   
+   /**
+    * Absolute put method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract IntBuffer put (int index, int b);
+ 
+   /**
+    * Compacts this buffer.
+    * 
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract IntBuffer compact ();
+ 
+   /**
+    * Tells wether or not this buffer is direct.
+    */
+   public abstract boolean isDirect ();
+ 
+   /**
+    * Creates a new <code>IntBuffer</code> whose content is a shared
+    * subsequence of this buffer's content.
+    */
+   public abstract IntBuffer slice ();
+ 
+   /**
+    * Creates a new <code>IntBuffer</code> that shares this buffer's
+    * content.
+    */
+   public abstract IntBuffer duplicate ();
+ 
+   /**
+    * Creates a new read-only <code>IntBuffer</code> that shares this
+    * buffer's content.
+    */
+   public abstract IntBuffer asReadOnlyBuffer ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/IntBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/IntBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/IntBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/IntBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,172 ----
+ /* IntBufferImpl.java -- 
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * This is a Heap memory implementation
+  */
+ final class IntBufferImpl extends IntBuffer
+ {
+   private boolean readOnly;
+ 
+   IntBufferImpl (int capacity)
+   {
+     this (new int [capacity], 0, capacity, capacity, 0, -1, false);
+   }
+   
+   IntBufferImpl (int[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
+   {
+     super (capacity, limit, position, mark);
+     this.backing_buffer = buffer;
+     this.array_offset = offset;
+     this.readOnly = readOnly;
+   }
+   
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public IntBuffer slice ()
+   {
+     return new IntBufferImpl (backing_buffer, array_offset + position (), remaining (), remaining (), 0, -1, isReadOnly ());
+   }
+   
+   public IntBuffer duplicate ()
+   {
+     return new IntBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, isReadOnly ());
+   }
+   
+   public IntBuffer asReadOnlyBuffer ()
+   {
+     return new IntBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, true);
+   }
+   
+   public IntBuffer compact ()
+   {
+     checkIfReadOnly();
+     mark = -1;
+     int copied = 0;
+     
+     while (remaining () > 0)
+       {
+ 	put (copied, get ());
+ 	copied++;
+       }
+ 
+     position (copied);
+     limit(capacity());
+     return this;
+   }
+   
+   public boolean isDirect ()
+   {
+     return false;
+   }
+ 
+   /**
+    * Reads the <code>int</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>ints</code> in this buffer.
+    */
+   public int get ()
+   {
+     checkForUnderflow();
+ 
+     int result = backing_buffer [position ()];
+     position (position () + 1);
+     return result;
+   }
+   
+   /**
+    * Relative put method. Writes <code>value</code> to the next position
+    * in the buffer.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * space in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public IntBuffer put (int value)
+   {
+     checkIfReadOnly();
+     checkForOverflow();
+ 
+     backing_buffer [position ()] = value;
+     position (position () + 1);
+     return this;
+   }
+   
+   /**
+    * Absolute get method. Reads the <code>int</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public int get (int index)
+   {
+     checkIndex(index);
+ 
+     return backing_buffer [index];
+   }
+   
+   /**
+    * Absolute put method. Writes <code>value</code> to position
+    * <code>index</code> in the buffer.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public IntBuffer put (int index, int value)
+   {
+     checkIfReadOnly();
+     checkIndex(index);
+ 
+     backing_buffer [index] = value;
+     return this;
+   }
+   
+   public ByteOrder order ()
+   {
+     return ByteOrder.nativeOrder ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/IntViewBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/IntViewBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/IntViewBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/IntViewBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,173 ----
+ /* IntViewBufferImpl.java -- 
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ final class IntViewBufferImpl extends IntBuffer
+ {
+   /** Position in bb (i.e. a byte offset) where this buffer starts. */
+   private int offset;
+   private ByteBuffer bb;
+   private boolean readOnly;
+   private ByteOrder endian;
+   
+   IntViewBufferImpl (ByteBuffer bb, int capacity)
+   {
+     super (capacity, capacity, 0, -1);
+     this.bb = bb;
+     this.offset = bb.position();
+     this.readOnly = bb.isReadOnly();
+     this.endian = bb.order();
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+   
+   public IntViewBufferImpl (ByteBuffer bb, int offset, int capacity,
+ 			    int limit, int position, int mark,
+ 			    boolean readOnly, ByteOrder endian)
+   {
+     super (capacity, limit, position, mark);
+     this.bb = bb;
+     this.offset = offset;
+     this.readOnly = readOnly;
+     this.endian = endian;
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+ 
+   /**
+    * Reads the <code>int</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>ints</code> in this buffer.
+    */
+   public int get ()
+   {
+     int p = position();
+     int result = ByteBufferHelper.getInt(bb, (p << 2) + offset, endian);
+     position(p + 1);
+     return result;
+   }
+ 
+   /**
+    * Absolute get method. Reads the <code>int</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public int get (int index)
+   {
+     return ByteBufferHelper.getInt(bb, (index << 2) + offset, endian);
+   }
+ 
+   public IntBuffer put (int value)
+   {
+     int p = position();
+     ByteBufferHelper.putInt(bb, (p << 2) + offset, value, endian);
+     position(p + 1);
+     return this;
+   }
+   
+   public IntBuffer put (int index, int value)
+   {
+     ByteBufferHelper.putInt(bb, (index << 2) + offset, value, endian);
+     return this;
+   }
+ 
+   public IntBuffer compact ()
+   {
+     if (position () > 0)
+       {
+         int count = limit () - position ();
+ 	bb.shiftDown(offset, offset + 4 * position(), 4 * count);
+         position (count);
+         limit (capacity ());
+       }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
+     return this;
+   }
+   
+   public IntBuffer slice ()
+   {
+     // Create a sliced copy of this object that shares its content.
+     return new IntViewBufferImpl (bb, (position () >> 2) + offset,
+ 				  remaining(), remaining(), 0, -1,
+ 				  readOnly, endian);
+   }
+   
+   IntBuffer duplicate (boolean readOnly)
+   {
+     int pos = position();
+     reset();
+     int mark = position();
+     position(pos);
+     return new IntViewBufferImpl (bb, offset, capacity(), limit(),
+ 				  pos, mark, readOnly, endian);
+   }
+   
+   public IntBuffer duplicate ()
+   {
+     return duplicate(readOnly);
+   }
+ 
+   public IntBuffer asReadOnlyBuffer ()
+   {
+     return duplicate(true);
+   }
+ 
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public boolean isDirect ()
+   {
+     return bb.isDirect ();
+   }
+   
+   public ByteOrder order ()
+   {
+     return endian;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/InvalidMarkException.java gcc-4.1.0/libjava/classpath/java/nio/InvalidMarkException.java
*** gcc-4.0.2/libjava/classpath/java/nio/InvalidMarkException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/InvalidMarkException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* InvalidMarkException.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class InvalidMarkException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public InvalidMarkException ()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/LongBuffer.java gcc-4.1.0/libjava/classpath/java/nio/LongBuffer.java
*** gcc-4.0.2/libjava/classpath/java/nio/LongBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/LongBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,383 ----
+ /* LongBuffer.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class LongBuffer extends Buffer
+   implements Comparable
+ {
+   int array_offset;
+   long[] backing_buffer;
+ 
+   LongBuffer (int capacity, int limit, int position, int mark)
+   {
+     super (capacity, limit, position, mark);
+     array_offset = 0;
+   }
+ 
+   /**
+    * Allocates a new <code>LongBuffer</code> object with a given capacity.
+    */
+   public static LongBuffer allocate (int capacity)
+   {
+     return new LongBufferImpl (capacity);
+   }
+ 
+   /**
+    * Wraps a <code>long</code> array into a <code>LongBuffer</code>
+    * object.
+    *
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    */
+   public static final LongBuffer wrap (long[] array, int offset, int length)
+   {
+     return new LongBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
+   }
+ 
+   /**
+    * Wraps a <code>long</code> array into a <code>LongBuffer</code>
+    * object.
+    */
+   public static final LongBuffer wrap (long[] array)
+   {
+     return wrap (array, 0, array.length);
+   }
+   
+   /**
+    * This method transfers <code>long</code>s from this buffer into the given
+    * destination array. Before the transfer, it checks if there are fewer than
+    * length <code>long</code>s remaining in this buffer. 
+    *
+    * @param dst The destination array
+    * @param offset The offset within the array of the first <code>long</code>
+    * to be written; must be non-negative and no larger than dst.length.
+    * @param length The maximum number of bytes to be written to the given array;
+    * must be non-negative and no larger than dst.length - offset.
+    *
+    * @exception BufferUnderflowException If there are fewer than length
+    * <code>long</code>s remaining in this buffer.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold.
+    */
+   public LongBuffer get (long[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       {
+         dst [i] = get ();
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * This method transfers <code>long</code>s from this buffer into the given
+    * destination array.
+    *
+    * @param dst The byte array to write into.
+    *
+    * @exception BufferUnderflowException If there are fewer than dst.length
+    * <code>long</code>s remaining in this buffer.
+    */
+   public LongBuffer get (long[] dst)
+   {
+     return get (dst, 0, dst.length);
+   }
+ 
+   /**
+    * Writes the content of the the <code>LongBUFFER</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * <code>src.remaining()</code> space remaining in this buffer.
+    *
+    * @param src The source data.
+    *
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>long</code>s in the source buffer.
+    * @exception IllegalArgumentException If the source buffer is this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public LongBuffer put (LongBuffer src)
+   {
+     if (src == this)
+       throw new IllegalArgumentException ();
+ 
+     checkForOverflow(src.remaining ());
+ 
+     if (src.remaining () > 0)
+       {
+         long[] toPut = new long [src.remaining ()];
+         src.get (toPut);
+         put (toPut);
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>long array</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * length space remaining in this buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * @param offset The offset within the array of the first byte to be read;
+    * must be non-negative and no larger than src.length.
+    * @param length The number of bytes to be read from the given array;
+    * must be non-negative and no larger than src.length - offset.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>long</code>s in the source array.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public LongBuffer put (long[] src, int offset, int length)
+   {
+     checkArraySize(src.length, offset, length);
+     checkForOverflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       put (src [i]);
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>long array</code> src
+    * into the buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>long</code>s in the source array.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public final LongBuffer put (long[] src)
+   {
+     return put (src, 0, src.length);
+   }
+ 
+   /**
+    * Tells whether ot not this buffer is backed by an accessible
+    * <code>long</code> array.
+    */
+   public final boolean hasArray ()
+   {
+     return (backing_buffer != null
+             && !isReadOnly ());
+   }
+ 
+   /**
+    * Returns the <code>long</code> array that backs this buffer.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final long[] array ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return backing_buffer;
+   }
+ 
+   /**
+    * Returns the offset within this buffer's backing array of the first element.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final int arrayOffset ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return array_offset;
+   }
+ 
+   /**
+    * Calculates a hash code for this buffer.
+    *
+    * This is done with <code>long</code> arithmetic,
+    * where ** represents exponentiation, by this formula:<br>
+    * <code>s[position()] + 31 + (s[position()+1] + 30)*31**1 + ... +
+    * (s[limit()-1]+30)*31**(limit()-1)</code>.
+    * Where s is the buffer data. Note that the hashcode is dependent
+    * on buffer content, and therefore is not useful if the buffer
+    * content may change.
+    *
+    * @return the hash code (casted to int)
+    */
+   public int hashCode ()
+   {
+     long hashCode = get(position()) + 31;
+     long multiplier = 1;
+     for (int i = position() + 1; i < limit(); ++i)
+       {
+ 	  multiplier *= 31;
+ 	  hashCode += (get(i) + 30)*multiplier;
+       }
+     return ((int)hashCode);
+   }
+ 
+   /**
+    * Checks if this buffer is equal to obj.
+    */
+   public boolean equals (Object obj)
+   {
+     if (obj instanceof LongBuffer)
+       {
+         return compareTo (obj) == 0;
+       }
+ 
+     return false;
+   }
+ 
+   /**
+    * Compares two <code>LongBuffer</code> objects.
+    *
+    * @exception ClassCastException If obj is not an object derived from
+    * <code>LongBuffer</code>.
+    */
+   public int compareTo (Object obj)
+   {
+     LongBuffer other = (LongBuffer) obj;
+ 
+     int num = Math.min(remaining(), other.remaining());
+     int pos_this = position();
+     int pos_other = other.position();
+     
+     for (int count = 0; count < num; count++)
+       {
+ 	 long a = get(pos_this++);
+ 	 long b = other.get(pos_other++);
+       	 
+ 	 if (a == b)
+ 	   continue;
+       	   
+ 	 if (a < b)
+ 	   return -1;
+       	   
+ 	 return 1;
+       }
+       
+      return remaining() - other.remaining();
+   }
+ 
+   /**
+    * Returns the byte order of this buffer.
+    */
+   public abstract ByteOrder order ();
+ 
+   /**
+    * Reads the <code>long</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>long</code>s in this buffer.
+    */
+   public abstract long get ();
+ 
+   /**
+    * Writes the <code>long</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * <code>long</code>s in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract LongBuffer put (long b);
+ 
+   /**
+    * Absolute get method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public abstract long get (int index);
+   
+   /**
+    * Absolute put method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract LongBuffer put (int index, long b);
+ 
+   /**
+    * Compacts this buffer.
+    * 
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract LongBuffer compact ();
+ 
+   /**
+    * Tells wether or not this buffer is direct.
+    */
+   public abstract boolean isDirect ();
+ 
+   /**
+    * Creates a new <code>LongBuffer</code> whose content is a shared
+    * subsequence of this buffer's content.
+    */
+   public abstract LongBuffer slice ();
+ 
+   /**
+    * Creates a new <code>LongBuffer</code> that shares this buffer's
+    * content.
+    */
+   public abstract LongBuffer duplicate ();
+ 
+   /**
+    * Creates a new read-only <code>LongBuffer</code> that shares this
+    * buffer's content.
+    */
+   public abstract LongBuffer asReadOnlyBuffer ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/LongBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/LongBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/LongBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/LongBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,172 ----
+ /* LongBufferImpl.java -- 
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * This is a Heap memory implementation
+  */
+ final class LongBufferImpl extends LongBuffer
+ {
+   private boolean readOnly;
+ 
+   LongBufferImpl (int capacity)
+   {
+     this (new long [capacity], 0, capacity, capacity, 0, -1, false);
+   }
+   
+   LongBufferImpl (long[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
+   {
+     super (capacity, limit, position, mark);
+     this.backing_buffer = buffer;
+     this.array_offset = offset;
+     this.readOnly = readOnly;
+   }
+   
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public LongBuffer slice ()
+   {
+     return new LongBufferImpl (backing_buffer, array_offset + position (), remaining (), remaining (), 0, -1, isReadOnly ());
+   }
+   
+   public LongBuffer duplicate ()
+   {
+     return new LongBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, isReadOnly ());
+   }
+   
+   public LongBuffer asReadOnlyBuffer ()
+   {
+     return new LongBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, true);
+   }
+   
+   public LongBuffer compact ()
+   {
+     checkIfReadOnly();
+     mark = -1;
+     int copied = 0;
+     
+     while (remaining () > 0)
+       {
+ 	put (copied, get ());
+ 	copied++;
+       }
+ 
+     position (copied);
+     limit(capacity());
+     return this;
+   }
+   
+   public boolean isDirect ()
+   {
+     return false;
+   }
+ 
+   /**
+    * Reads the <code>long</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>longs</code> in this buffer.
+    */
+   public long get ()
+   {
+     checkForUnderflow();
+ 
+     long result = backing_buffer [position ()];
+     position (position () + 1);
+     return result;
+   }
+   
+   /**
+    * Relative put method. Writes <code>value</code> to the next position
+    * in the buffer.
+    *
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public LongBuffer put (long value)
+   {
+     checkIfReadOnly();
+     checkForOverflow();
+ 
+     backing_buffer [position ()] = value;
+     position (position () + 1);
+     return this;
+   }
+   
+   /**
+    * Absolute get method. Reads the <code>long</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public long get (int index)
+   {
+     checkIndex(index);
+ 
+     return backing_buffer [index];
+   }
+   
+   /**
+    * Absolute put method. Writes <code>value</code> to position
+    * <code>index</code> in the buffer.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public LongBuffer put (int index, long value)
+   {
+     checkIfReadOnly();
+     checkIndex(index);
+ 
+     backing_buffer [index] = value;
+     return this;
+   }
+   
+   public ByteOrder order ()
+   {
+     return ByteOrder.nativeOrder ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/LongViewBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/LongViewBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/LongViewBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/LongViewBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,173 ----
+ /* LongViewBufferImpl.java -- 
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ final class LongViewBufferImpl extends LongBuffer
+ {
+   /** Position in bb (i.e. a byte offset) where this buffer starts. */
+   private int offset;
+   private ByteBuffer bb;
+   private boolean readOnly;
+   private ByteOrder endian;
+   
+   LongViewBufferImpl (ByteBuffer bb, int capacity)
+   {
+     super (capacity, capacity, 0, -1);
+     this.bb = bb;
+     this.offset = bb.position();
+     this.readOnly = bb.isReadOnly();
+     this.endian = bb.order();
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+   
+   public LongViewBufferImpl (ByteBuffer bb, int offset, int capacity,
+ 			     int limit, int position, int mark,
+ 			     boolean readOnly, ByteOrder endian)
+   {
+     super (capacity, limit, position, mark);
+     this.bb = bb;
+     this.offset = offset;
+     this.readOnly = readOnly;
+     this.endian = endian;
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+ 
+   /**
+    * Reads the <code>long</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>longs</code> in this buffer.
+    */
+   public long get ()
+   {
+     int p = position();
+     long result = ByteBufferHelper.getLong(bb, (p << 3) + offset, endian);
+     position(p + 1);
+     return result;
+   }
+ 
+   /**
+    * Absolute get method. Reads the <code>long</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public long get (int index)
+   {
+     return ByteBufferHelper.getLong(bb, (index << 3) + offset, endian);
+   }
+ 
+   public LongBuffer put (long value)
+   {
+     int p = position();
+     ByteBufferHelper.putLong(bb, (p << 3) + offset, value, endian);
+     position(p + 1);
+     return this;
+   }
+   
+   public LongBuffer put (int index, long value)
+   {
+     ByteBufferHelper.putLong(bb, (index << 3) + offset, value, endian);
+     return this;
+   }
+ 
+   public LongBuffer compact ()
+   {
+     if (position () > 0)
+       {
+         int count = limit () - position ();
+ 	bb.shiftDown(offset, offset + 8 * position(), 8 * count);
+         position (count);
+         limit (capacity ());
+       }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
+     return this;
+   }
+   
+   public LongBuffer slice ()
+   {
+     // Create a sliced copy of this object that shares its content.
+     return new LongViewBufferImpl (bb, (position () >> 3) + offset,
+ 				   remaining(), remaining(), 0, -1,
+ 				   readOnly, endian);
+   }
+   
+   LongBuffer duplicate (boolean readOnly)
+   {
+     int pos = position();
+     reset();
+     int mark = position();
+     position(pos);
+     return new LongViewBufferImpl (bb, offset, capacity(), limit(),
+ 				   pos, mark, readOnly, endian);
+   }
+   
+   public LongBuffer duplicate ()
+   {
+     return duplicate(readOnly);
+   }
+ 
+   public LongBuffer asReadOnlyBuffer ()
+   {
+     return duplicate(true);
+   }
+ 
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public boolean isDirect ()
+   {
+     return bb.isDirect ();
+   }
+   
+   public ByteOrder order ()
+   {
+     return endian;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/MappedByteBuffer.java gcc-4.1.0/libjava/classpath/java/nio/MappedByteBuffer.java
*** gcc-4.0.2/libjava/classpath/java/nio/MappedByteBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/MappedByteBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,93 ----
+ /* MappedByteBuffer.java -- 
+    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.4
+  */
+ public abstract class MappedByteBuffer extends ByteBuffer
+ {
+   MappedByteBuffer (int capacity, int limit, int position, int mark)
+   {
+     super (capacity, limit, position, mark);
+   }
+   
+   void forceImpl()
+   {
+   }
+ 
+   public final MappedByteBuffer force ()
+   {
+     forceImpl();
+     return this;
+   }
+     
+   boolean isLoadedImpl()
+   {
+     load();
+     return true;
+   }
+ 
+   public final boolean isLoaded ()
+   {
+     return isLoadedImpl();
+   }
+     
+   void loadImpl()
+   {
+   }
+ 
+   public final MappedByteBuffer load ()
+   {
+     loadImpl();
+     return this;
+   }
+ 
+   void unmapImpl ()
+   {
+     forceImpl();
+   }
+ 
+   public void finalize()
+     throws Throwable
+   {
+     unmapImpl();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/MappedByteBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/MappedByteBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/MappedByteBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/MappedByteBufferImpl.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,360 ----
+ /* MappedByteBufferImpl.java -- 
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ import gnu.classpath.Pointer;
+ 
+ import java.io.IOException;
+ 
+ final class MappedByteBufferImpl extends MappedByteBuffer
+ {
+   boolean readOnly;
+ 
+   /** Posix uses this for the pointer returned by mmap;
+    * Win32 uses it for the pointer returned by MapViewOfFile. */
+   public Pointer implPtr;
+   /** Posix uses this for the actual length passed to mmap;
+    * Win32 uses it for the pointer returned by CreateFileMapping. */
+   public long implLen;
+   
+   public MappedByteBufferImpl(Pointer address, int size, boolean readOnly)
+     throws IOException
+   {
+     super(size, size, 0, -1);
+     this.address = address;
+     this.readOnly = readOnly;
+   }
+ 
+   public boolean isReadOnly()
+   {
+     return readOnly;
+   }
+   
+   public byte get()
+   {
+     checkForUnderflow();
+ 
+     int pos = position();
+     byte result = VMDirectByteBuffer.get(address, pos);
+     position(pos + 1);
+     return result;
+   }
+ 
+   public ByteBuffer put(byte value)
+   {
+     checkIfReadOnly();
+     checkForOverflow();
+ 
+     int pos = position();
+     VMDirectByteBuffer.put(address, pos, value);
+     position(pos + 1);
+     return this;
+   }
+ 
+   public byte get(int index)
+   {
+     checkIndex(index);
+ 
+     return VMDirectByteBuffer.get(address, index);
+   }
+ 
+   public ByteBuffer get(byte[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     int index = position();
+     VMDirectByteBuffer.get(address, index, dst, offset, length);
+     position(index+length);
+ 
+     return this;
+   }
+ 
+   public ByteBuffer put(int index, byte value)
+   {
+     checkIfReadOnly();
+     checkIndex(index);
+ 
+     VMDirectByteBuffer.put(address, index, value);
+     return this;
+   }
+ 
+   public ByteBuffer compact()
+   {
+     checkIfReadOnly();
+     mark = -1;
+     int pos = position();
+     if (pos > 0)
+       {
+ 	int count = remaining();
+ 	// Call shiftDown method optimized for direct buffers.
+ 	VMDirectByteBuffer.shiftDown(address, 0, pos, count);
+ 	position(count);
+ 	limit(capacity());
+       }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
+     return this;
+   }
+ 
+   public boolean isDirect()
+   {
+     return true;
+   }
+ 
+   public ByteBuffer slice()
+   {
+     int rem = remaining();
+     if (isReadOnly())
+         return new DirectByteBufferImpl.ReadOnly
+       (this, VMDirectByteBuffer.adjustAddress(address, position()),
+        rem, rem, 0);
+     else
+         return new DirectByteBufferImpl.ReadWrite
+       (this, VMDirectByteBuffer.adjustAddress(address, position()),
+        rem, rem, 0);
+   }
+ 
+   private ByteBuffer duplicate(boolean readOnly)
+   {
+     int pos = position();
+     reset();
+     int mark = position();
+     position(pos);
+     DirectByteBufferImpl result;
+     if (readOnly)
+         result = new DirectByteBufferImpl.ReadOnly(this, address, capacity(),
+                                                    limit(), pos);
+     else
+         result = new DirectByteBufferImpl.ReadWrite(this, address, capacity(),
+                                                     limit(), pos);
+ 
+     if (mark != pos)
+       {
+ 	result.position(mark);
+ 	result.mark();
+ 	result.position(pos);
+       }
+     return result;
+   }
+ 
+   public ByteBuffer duplicate()
+   {
+     return duplicate(isReadOnly());
+   }
+ 
+   public ByteBuffer asReadOnlyBuffer()
+   {
+     return duplicate(true);
+   }
+ 
+   public CharBuffer asCharBuffer()
+   {
+     return new CharViewBufferImpl(this, remaining() >> 1);
+   }
+ 
+   public ShortBuffer asShortBuffer()
+   {
+     return new ShortViewBufferImpl(this, remaining() >> 1);
+   }
+ 
+   public IntBuffer asIntBuffer()
+   {
+     return new IntViewBufferImpl(this, remaining() >> 2);
+   }
+ 
+   public LongBuffer asLongBuffer()
+   {
+     return new LongViewBufferImpl(this, remaining() >> 3);
+   }
+ 
+   public FloatBuffer asFloatBuffer()
+   {
+     return new FloatViewBufferImpl(this, remaining() >> 2);
+   }
+ 
+   public DoubleBuffer asDoubleBuffer()
+   {
+     return new DoubleViewBufferImpl(this, remaining() >> 3);
+   }
+ 
+   public char getChar()
+   {
+     return ByteBufferHelper.getChar(this, order());
+   }
+   
+   public ByteBuffer putChar(char value)
+   {
+     ByteBufferHelper.putChar(this, value, order());
+     return this;
+   }
+   
+   public char getChar(int index)
+   {
+     return ByteBufferHelper.getChar(this, index, order());
+   }
+   
+   public ByteBuffer putChar(int index, char value)
+   {
+     ByteBufferHelper.putChar(this, index, value, order());
+     return this;
+   }
+ 
+   public short getShort()
+   {
+     return ByteBufferHelper.getShort(this, order());
+   }
+   
+   public ByteBuffer putShort(short value)
+   {
+     ByteBufferHelper.putShort(this, value, order());
+     return this;
+   }
+   
+   public short getShort(int index)
+   {
+     return ByteBufferHelper.getShort(this, index, order());
+   }
+   
+   public ByteBuffer putShort(int index, short value)
+   {
+     ByteBufferHelper.putShort(this, index, value, order());
+     return this;
+   }
+ 
+   public int getInt()
+   {
+     return ByteBufferHelper.getInt(this, order());
+   }
+   
+   public ByteBuffer putInt(int value)
+   {
+     ByteBufferHelper.putInt(this, value, order());
+     return this;
+   }
+   
+   public int getInt(int index)
+   {
+     return ByteBufferHelper.getInt(this, index, order());
+   }
+   
+   public ByteBuffer putInt(int index, int value)
+   {
+     ByteBufferHelper.putInt(this, index, value, order());
+     return this;
+   }
+ 
+   public long getLong()
+   {
+     return ByteBufferHelper.getLong(this, order());
+   }
+   
+   public ByteBuffer putLong(long value)
+   {
+     ByteBufferHelper.putLong(this, value, order());
+     return this;
+   }
+   
+   public long getLong(int index)
+   {
+     return ByteBufferHelper.getLong(this, index, order());
+   }
+   
+   public ByteBuffer putLong(int index, long value)
+   {
+     ByteBufferHelper.putLong(this, index, value, order());
+     return this;
+   }
+ 
+   public float getFloat()
+   {
+     return ByteBufferHelper.getFloat(this, order());
+   }
+   
+   public ByteBuffer putFloat(float value)
+   {
+     ByteBufferHelper.putFloat(this, value, order());
+     return this;
+   }
+   
+   public float getFloat(int index)
+   {
+     return ByteBufferHelper.getFloat(this, index, order());
+   }
+ 
+   public ByteBuffer putFloat(int index, float value)
+   {
+     ByteBufferHelper.putFloat(this, index, value, order());
+     return this;
+   }
+ 
+   public double getDouble()
+   {
+     return ByteBufferHelper.getDouble(this, order());
+   }
+ 
+   public ByteBuffer putDouble(double value)
+   {
+     ByteBufferHelper.putDouble(this, value, order());
+     return this;
+   }
+   
+   public double getDouble(int index)
+   {
+     return ByteBufferHelper.getDouble(this, index, order());
+   }
+   
+   public ByteBuffer putDouble(int index, double value)
+   {
+     ByteBufferHelper.putDouble(this, index, value, order());
+     return this;
+   }
+ 
+   // NOTE: In libgcj these methods are implemented in natFileChannelXxx.cc,
+   // because they're small, and to put them next to FileChannelImpl::mapImpl.
+   native void unmapImpl();
+   native boolean isLoadedImpl();
+     // FIXME: Try to load all pages into memory.
+   native void loadImpl();
+ 
+   native void forceImpl();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/ReadOnlyBufferException.java gcc-4.1.0/libjava/classpath/java/nio/ReadOnlyBufferException.java
*** gcc-4.0.2/libjava/classpath/java/nio/ReadOnlyBufferException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/ReadOnlyBufferException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* ReadOnlyBufferException.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class ReadOnlyBufferException extends UnsupportedOperationException
+ {
+   /**
+    * Creates the exception
+    */
+   public ReadOnlyBufferException ()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/ShortBuffer.java gcc-4.1.0/libjava/classpath/java/nio/ShortBuffer.java
*** gcc-4.0.2/libjava/classpath/java/nio/ShortBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/ShortBuffer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,383 ----
+ /* ShortBuffer.java -- 
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class ShortBuffer extends Buffer
+   implements Comparable
+ {
+   int array_offset;
+   short[] backing_buffer;
+ 
+   ShortBuffer (int capacity, int limit, int position, int mark)
+   {
+     super (capacity, limit, position, mark);
+     array_offset = 0;
+   }
+ 
+   /**
+    * Allocates a new <code>ShortBuffer</code> object with a given capacity.
+    */
+   public static ShortBuffer allocate (int capacity)
+   {
+     return new ShortBufferImpl (capacity);
+   }
+ 
+   /**
+    * Wraps a <code>short</code> array into a <code>ShortBuffer</code>
+    * object.
+    *
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    */
+   public static final ShortBuffer wrap (short[] array, int offset, int length)
+   {
+     return new ShortBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
+   }
+ 
+   /**
+    * Wraps a <code>short</code> array into a <code>ShortBuffer</code>
+    * object.
+    */
+   public static final ShortBuffer wrap (short[] array)
+   {
+     return wrap (array, 0, array.length);
+   }
+   
+   /**
+    * This method transfers <code>short</code>s from this buffer into the given
+    * destination array. Before the transfer, it checks if there are fewer than
+    * length <code>short</code>s remaining in this buffer. 
+    *
+    * @param dst The destination array
+    * @param offset The offset within the array of the first <code>short</code>
+    * to be written; must be non-negative and no larger than dst.length.
+    * @param length The maximum number of bytes to be written to the given array;
+    * must be non-negative and no larger than dst.length - offset.
+    *
+    * @exception BufferUnderflowException If there are fewer than length
+    * <code>short</code>s remaining in this buffer.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold.
+    */
+   public ShortBuffer get (short[] dst, int offset, int length)
+   {
+     checkArraySize(dst.length, offset, length);
+     checkForUnderflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       {
+         dst [i] = get ();
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * This method transfers <code>short</code>s from this buffer into the given
+    * destination array.
+    *
+    * @param dst The byte array to write into.
+    *
+    * @exception BufferUnderflowException If there are fewer than dst.length
+    * <code>short</code>s remaining in this buffer.
+    */
+   public ShortBuffer get (short[] dst)
+   {
+     return get (dst, 0, dst.length);
+   }
+ 
+   /**
+    * Writes the content of the the <code>ShortBUFFER</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * <code>src.remaining()</code> space remaining in this buffer.
+    *
+    * @param src The source data.
+    *
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>short</code>s in the source buffer.
+    * @exception IllegalArgumentException If the source buffer is this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public ShortBuffer put (ShortBuffer src)
+   {
+     if (src == this)
+       throw new IllegalArgumentException ();
+ 
+     checkForOverflow(src.remaining ());
+ 
+     if (src.remaining () > 0)
+       {
+         short[] toPut = new short [src.remaining ()];
+         src.get (toPut);
+         put (toPut);
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>short array</code> src
+    * into the buffer. Before the transfer, it checks if there is fewer than
+    * length space remaining in this buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * @param offset The offset within the array of the first byte to be read;
+    * must be non-negative and no larger than src.length.
+    * @param length The number of bytes to be read from the given array;
+    * must be non-negative and no larger than src.length - offset.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>short</code>s in the source array.
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public ShortBuffer put (short[] src, int offset, int length)
+   {
+     checkArraySize(src.length, offset, length);
+     checkForOverflow(length);
+ 
+     for (int i = offset; i < offset + length; i++)
+       put (src [i]);
+ 
+     return this;
+   }
+ 
+   /**
+    * Writes the content of the the <code>short array</code> src
+    * into the buffer.
+    *
+    * @param src The array to copy into the buffer.
+    * 
+    * @exception BufferOverflowException If there is insufficient space in this
+    * buffer for the remaining <code>short</code>s in the source array.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public final ShortBuffer put (short[] src)
+   {
+     return put (src, 0, src.length);
+   }
+ 
+   /**
+    * Tells whether ot not this buffer is backed by an accessible
+    * <code>short</code> array.
+    */
+   public final boolean hasArray ()
+   {
+     return (backing_buffer != null
+             && !isReadOnly ());
+   }
+ 
+   /**
+    * Returns the <code>short</code> array that backs this buffer.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final short[] array ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return backing_buffer;
+   }
+ 
+   /**
+    * Returns the offset within this buffer's backing array of the first element.
+    *
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    * @exception UnsupportedOperationException If this buffer is not backed
+    * by an accessible array.
+    */
+   public final int arrayOffset ()
+   {
+     if (backing_buffer == null)
+       throw new UnsupportedOperationException ();
+ 
+     checkIfReadOnly();
+     
+     return array_offset;
+   }
+ 
+   /**
+    * Calculates a hash code for this buffer.
+    *
+    * This is done with <code>int</code> arithmetic,
+    * where ** represents exponentiation, by this formula:<br>
+    * <code>s[position()] + 31 + (s[position()+1] + 30)*31**1 + ... +
+    * (s[limit()-1]+30)*31**(limit()-1)</code>.
+    * Where s is the buffer data. Note that the hashcode is dependent
+    * on buffer content, and therefore is not useful if the buffer
+    * content may change.
+    *
+    * @return the hash code
+    */
+   public int hashCode ()
+   {
+     int hashCode = get(position()) + 31;
+     int multiplier = 1;
+     for (int i = position() + 1; i < limit(); ++i)
+       {
+ 	  multiplier *= 31;
+ 	  hashCode += (get(i) + 30)*multiplier;
+       }
+     return hashCode;
+   }
+ 
+   /**
+    * Checks if this buffer is equal to obj.
+    */
+   public boolean equals (Object obj)
+   {
+     if (obj instanceof ShortBuffer)
+       {
+         return compareTo (obj) == 0;
+       }
+ 
+     return false;
+   }
+ 
+   /**
+    * Compares two <code>ShortBuffer</code> objects.
+    *
+    * @exception ClassCastException If obj is not an object derived from
+    * <code>ShortBuffer</code>.
+    */
+   public int compareTo (Object obj)
+   {
+     ShortBuffer other = (ShortBuffer) obj;
+ 
+     int num = Math.min(remaining(), other.remaining());
+     int pos_this = position();
+     int pos_other = other.position();
+     
+     for (int count = 0; count < num; count++)
+       {
+ 	 short a = get(pos_this++);
+ 	 short b = other.get(pos_other++);
+       	 
+ 	 if (a == b)
+ 	   continue;
+       	   
+ 	 if (a < b)
+ 	   return -1;
+       	   
+ 	 return 1;
+       }
+       
+      return remaining() - other.remaining();
+   }
+ 
+   /**
+    * Returns the byte order of this buffer.
+    */
+   public abstract ByteOrder order ();
+ 
+   /**
+    * Reads the <code>short</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>short</code>s in this buffer.
+    */
+   public abstract short get ();
+ 
+   /**
+    * Writes the <code>short</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * <code>short</code>s in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract ShortBuffer put (short b);
+ 
+   /**
+    * Absolute get method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public abstract short get (int index);
+   
+   /**
+    * Absolute put method.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract ShortBuffer put (int index, short b);
+ 
+   /**
+    * Compacts this buffer.
+    * 
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public abstract ShortBuffer compact ();
+ 
+   /**
+    * Tells wether or not this buffer is direct.
+    */
+   public abstract boolean isDirect ();
+ 
+   /**
+    * Creates a new <code>ShortBuffer</code> whose content is a shared
+    * subsequence of this buffer's content.
+    */
+   public abstract ShortBuffer slice ();
+ 
+   /**
+    * Creates a new <code>ShortBuffer</code> that shares this buffer's
+    * content.
+    */
+   public abstract ShortBuffer duplicate ();
+ 
+   /**
+    * Creates a new read-only <code>ShortBuffer</code> that shares this
+    * buffer's content.
+    */
+   public abstract ShortBuffer asReadOnlyBuffer ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/ShortBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/ShortBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/ShortBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/ShortBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,172 ----
+ /* ShortBufferImpl.java -- 
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ /**
+  * This is a Heap memory implementation
+  */
+ final class ShortBufferImpl extends ShortBuffer
+ {
+   private boolean readOnly;
+ 
+   ShortBufferImpl (int capacity)
+   {
+     this (new short [capacity], 0, capacity, capacity, 0, -1, false);
+   }
+   
+   ShortBufferImpl (short[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
+   {
+     super (capacity, limit, position, mark);
+     this.backing_buffer = buffer;
+     this.array_offset = offset;
+     this.readOnly = readOnly;
+   }
+   
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public ShortBuffer slice ()
+   {
+     return new ShortBufferImpl (backing_buffer, array_offset + position (), remaining (), remaining (), 0, -1, isReadOnly ());
+   }
+   
+   public ShortBuffer duplicate ()
+   {
+     return new ShortBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, isReadOnly ());
+   }
+   
+   public ShortBuffer asReadOnlyBuffer ()
+   {
+     return new ShortBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, true);
+   }
+   
+   public ShortBuffer compact ()
+   {
+     checkIfReadOnly();
+     mark = -1;
+     int copied = 0;
+     
+     while (remaining () > 0)
+       {
+ 	put (copied, get ());
+ 	copied++;
+       }
+ 
+     position (copied);
+     limit(capacity());
+     return this;
+   }
+   
+   public boolean isDirect ()
+   {
+     return false;
+   }
+ 
+   /**
+    * Reads the <code>short</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>short</code>s in this buffer.
+    */
+   public short get ()
+   {
+     checkForUnderflow();
+ 
+     short result = backing_buffer [position ()];
+     position (position () + 1);
+     return result;
+   }
+   
+   /**
+    * Relative put method. Writes <code>value</code> to the next position
+    * in the buffer.
+    *
+    * @exception BufferOverflowException If there no remaining 
+    * space in this buffer.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public ShortBuffer put (short value)
+   {
+     checkIfReadOnly();
+     checkForOverflow();
+ 
+     backing_buffer [position ()] = value;
+     position (position () + 1);
+     return this;
+   }
+   
+   /**
+    * Absolute get method. Reads the <code>short</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public short get (int index)
+   {
+     checkIndex(index);
+ 
+     return backing_buffer [index];
+   }
+   
+   /**
+    * Absolute put method. Writes <code>value</code> to position
+    * <code>index</code> in the buffer.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    * @exception ReadOnlyBufferException If this buffer is read-only.
+    */
+   public ShortBuffer put (int index, short value)
+   {
+     checkIfReadOnly();
+     checkIndex(index);
+ 
+     backing_buffer [index] = value;
+     return this;
+   }
+   
+   public ByteOrder order ()
+   {
+     return ByteOrder.nativeOrder ();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/ShortViewBufferImpl.java gcc-4.1.0/libjava/classpath/java/nio/ShortViewBufferImpl.java
*** gcc-4.0.2/libjava/classpath/java/nio/ShortViewBufferImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/ShortViewBufferImpl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,173 ----
+ /* ShortViewBufferImpl.java -- 
+    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio;
+ 
+ final class ShortViewBufferImpl extends ShortBuffer
+ {
+   /** Position in bb (i.e. a byte offset) where this buffer starts. */
+   private int offset;
+   private ByteBuffer bb;
+   private boolean readOnly;
+   private ByteOrder endian;
+ 
+   ShortViewBufferImpl (ByteBuffer bb, int capacity)
+   {
+     super (capacity, capacity, 0, -1);
+     this.bb = bb;
+     this.offset = bb.position();
+     this.readOnly = bb.isReadOnly();
+     this.endian = bb.order();
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+   
+   public ShortViewBufferImpl (ByteBuffer bb, int offset, int capacity,
+ 			      int limit, int position, int mark,
+ 			      boolean readOnly, ByteOrder endian)
+   {
+     super (capacity, limit, position, mark);
+     this.bb = bb;
+     this.offset = offset;
+     this.readOnly = readOnly;
+     this.endian = endian;
+     if (bb.isDirect())
+       this.address = VMDirectByteBuffer.adjustAddress(bb.address, offset);
+   }
+ 
+   /**
+    * Reads the <code>short</code> at this buffer's current position,
+    * and then increments the position.
+    *
+    * @exception BufferUnderflowException If there are no remaining
+    * <code>short</code>s in this buffer.
+    */
+   public short get ()
+   {
+     int p = position();
+     short result = ByteBufferHelper.getShort(bb, (p << 1) + offset, endian);
+     position(p + 1);
+     return result;
+   }
+ 
+   /**
+    * Absolute get method. Reads the <code>short</code> at position
+    * <code>index</code>.
+    *
+    * @exception IndexOutOfBoundsException If index is negative or not smaller
+    * than the buffer's limit.
+    */
+   public short get (int index)
+   {
+     return ByteBufferHelper.getShort(bb, (index << 1) + offset, endian);
+   }
+ 
+   public ShortBuffer put (short value)
+   {
+     int p = position();
+     ByteBufferHelper.putShort(bb, (p << 1) + offset, value, endian);
+     position(p + 1);
+     return this;
+   }
+   
+   public ShortBuffer put (int index, short value)
+   {
+     ByteBufferHelper.putShort(bb, (index << 1) + offset, value, endian);
+     return this;
+   }
+ 
+   public ShortBuffer compact ()
+   {
+     if (position () > 0)
+       {
+         int count = limit () - position ();
+ 	bb.shiftDown(offset, offset + 2 * position(), 2 * count);
+         position (count);
+         limit (capacity ());
+       }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
+     return this;
+   }
+   
+   public ShortBuffer slice ()
+   {
+     // Create a sliced copy of this object that shares its content.
+     return new ShortViewBufferImpl (bb, (position () >> 1) + offset,
+ 				    remaining(), remaining(), 0, -1,
+ 				    readOnly, endian);
+   }
+   
+   ShortBuffer duplicate (boolean readOnly)
+   {
+     int pos = position();
+     reset();
+     int mark = position();
+     position(pos);
+     return new ShortViewBufferImpl (bb, offset, capacity(), limit(),
+ 				    pos, mark, readOnly, endian);
+   }
+   
+   public ShortBuffer duplicate ()
+   {
+     return duplicate(readOnly);
+   }
+ 
+   public ShortBuffer asReadOnlyBuffer ()
+   {
+     return duplicate(true);
+   }
+ 
+   public boolean isReadOnly ()
+   {
+     return readOnly;
+   }
+   
+   public boolean isDirect ()
+   {
+     return bb.isDirect ();
+   }
+   
+   public ByteOrder order ()
+   {
+     return endian;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/AlreadyConnectedException.java gcc-4.1.0/libjava/classpath/java/nio/channels/AlreadyConnectedException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/AlreadyConnectedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/AlreadyConnectedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,48 ----
+ /* AlreadyConnectedException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ public class AlreadyConnectedException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public AlreadyConnectedException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/AsynchronousCloseException.java gcc-4.1.0/libjava/classpath/java/nio/channels/AsynchronousCloseException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/AsynchronousCloseException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/AsynchronousCloseException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* AsynchronousCloseException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class AsynchronousCloseException extends ClosedChannelException
+ {
+   /**
+    * Creates the exception
+    */
+   public AsynchronousCloseException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/ByteChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/ByteChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/ByteChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/ByteChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,43 ----
+ /* ByteChannel.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ public interface ByteChannel extends ReadableByteChannel,
+                                      WritableByteChannel
+ {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/CancelledKeyException.java gcc-4.1.0/libjava/classpath/java/nio/channels/CancelledKeyException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/CancelledKeyException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/CancelledKeyException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* CancelledKeyException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class CancelledKeyException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public CancelledKeyException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/Channel.java gcc-4.1.0/libjava/classpath/java/nio/channels/Channel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/Channel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/Channel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,59 ----
+ /* Channel.java --
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ 
+ public interface Channel
+ {
+   /**
+    * Tells whether this channel is open or not
+    *
+    * @return <code>true</code>if channel is open,
+    * <code>false</code> otherwise
+    */
+   boolean isOpen();
+ 
+   /**
+    * Closes this channel
+    *
+    * @exception IOException If an error occurs
+    */
+   void close() throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/Channels.java gcc-4.1.0/libjava/classpath/java/nio/channels/Channels.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/Channels.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/Channels.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,143 ----
+ /* Channels.java --
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio.channels;
+ 
+ import gnu.java.nio.ChannelReader;
+ import gnu.java.nio.InputStreamChannel;
+ import gnu.java.nio.OutputStreamChannel;
+ 
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.io.Reader;
+ import java.io.Writer;
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetDecoder;
+ import java.nio.charset.CharsetEncoder;
+ 
+ 
+ /**
+  * @since 1.4
+  */
+ public final class Channels
+ {
+   /**
+    * This class isn't intended to be instantiated.
+    */
+   private Channels()
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Constructs a stream that reads bytes from the given channel.
+    */
+   public static InputStream newInputStream(ReadableByteChannel ch)
+   {
+     return VMChannels.newInputStream(ch);
+   }
+ 
+   /**
+    * Constructs a stream that writes bytes to the given channel.
+    */
+   public static OutputStream newOutputStream(WritableByteChannel ch)
+   {
+     return VMChannels.newOutputStream(ch);
+   }
+ 
+   /**
+    * Constructs a channel that reads bytes from the given stream.
+    */
+   public static ReadableByteChannel newChannel(InputStream in)
+   {
+     return new InputStreamChannel(in);
+   }
+ 
+   /**
+    * Constructs a channel that writes bytes to the given stream.
+    */
+   public static WritableByteChannel newChannel(OutputStream out)
+   {
+     return new OutputStreamChannel(out);
+   }
+ 
+   /**
+    * Constructs a reader that decodes bytes from the given channel using the
+    * given decoder.
+    */
+   public static Reader newReader(ReadableByteChannel ch, CharsetDecoder dec,
+                                  int minBufferCap)
+   {
+     return new ChannelReader(ch, dec, minBufferCap);
+   }
+ 
+   /**
+    * Constructs a reader that decodes bytes from the given channel according to
+    * the named charset.
+    *
+    * @exception UnsupportedCharsetException If no support for the named charset
+    * is available in this instance of the Java virtual machine.
+    */
+   public static Reader newReader(ReadableByteChannel ch, String csName)
+   {
+     return newReader(ch, Charset.forName(csName).newDecoder(), -1);
+   }
+ 
+   /**
+    * Constructs a writer that encodes characters using the given encoder and
+    * writes the resulting bytes to the given channel.
+    */
+   public static Writer newWriter(WritableByteChannel ch, CharsetEncoder enc,
+                                  int minBufferCap)
+   {
+     // FIXME: implement java.nio.channels.Channel.newWriter(WritableByteChannel, CharsetEncoder, int) 
+     throw new Error("not implemented");
+   }
+ 
+   /**
+    * Constructs a writer that encodes characters according to the named charset
+    * and writes the resulting bytes to the given channel.
+    *
+    * @exception UnsupportedCharsetException If no support for the named charset
+    * is available in this instance of the Java virtual machine.
+    */
+   public static Writer newWriter(WritableByteChannel ch, String csName)
+   {
+     return newWriter(ch, Charset.forName(csName).newEncoder(), -1);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/ClosedByInterruptException.java gcc-4.1.0/libjava/classpath/java/nio/channels/ClosedByInterruptException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/ClosedByInterruptException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/ClosedByInterruptException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* ClosedByInterruptException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class ClosedByInterruptException extends AsynchronousCloseException
+ {
+   /**
+    * Creates the exception
+    */
+   public ClosedByInterruptException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/ClosedChannelException.java gcc-4.1.0/libjava/classpath/java/nio/channels/ClosedChannelException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/ClosedChannelException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/ClosedChannelException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,55 ----
+ /* ClosedChannelException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class ClosedChannelException extends IOException
+ {
+   /**
+    * Creates the exception
+    */
+   public ClosedChannelException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/ClosedSelectorException.java gcc-4.1.0/libjava/classpath/java/nio/channels/ClosedSelectorException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/ClosedSelectorException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/ClosedSelectorException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* ClosedSelectorException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class ClosedSelectorException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public ClosedSelectorException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/ConnectionPendingException.java gcc-4.1.0/libjava/classpath/java/nio/channels/ConnectionPendingException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/ConnectionPendingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/ConnectionPendingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* ConnectionPendingException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class ConnectionPendingException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public ConnectionPendingException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/DatagramChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/DatagramChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/DatagramChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/DatagramChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,210 ----
+ /* DatagramChannel.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.net.DatagramSocket;
+ import java.net.SocketAddress;
+ import java.nio.ByteBuffer;
+ import java.nio.channels.spi.AbstractSelectableChannel;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class DatagramChannel extends AbstractSelectableChannel
+   implements ByteChannel, ScatteringByteChannel, GatheringByteChannel
+ {
+   /**
+    * Initializes the channel.
+    */
+   protected DatagramChannel(SelectorProvider provider)
+   {
+     super(provider);
+   }
+ 
+   /**
+    * Opens a datagram channel.
+    *
+    * @exception IOException If an error occurs
+    */
+   public static DatagramChannel open() throws IOException
+   {
+     return SelectorProvider.provider().openDatagramChannel();
+   }
+ 
+   /**
+    * Reads data from this channel.
+    */
+   public final long read(ByteBuffer[] dsts) throws IOException
+   {
+     long b = 0;
+ 
+     for (int i = 0; i < dsts.length; i++)
+       b += read(dsts[i]);
+ 
+     return b;
+   }
+ 
+   /**
+    * Writes data to this channel.
+    *
+    * @exception IOException If an error occurs
+    * @exception NotYetConnectedException The channel's socket is not connected.
+    */
+   public final long write(ByteBuffer[] srcs) throws IOException
+   {
+     long b = 0;
+ 
+     for (int i = 0; i < srcs.length; i++)
+       b += write(srcs[i]);
+ 
+     return b;
+   }
+ 
+   /**
+    * Connects this channel's socket.
+    *
+    * @exception AsynchronousCloseException If another thread closes this channel
+    * while the connect operation is in progress.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the read operation is in progress, thereby closing the
+    * channel and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IOException If an error occurs.
+    * @exception SecurityException If a security manager has been installed and
+    * it does not permit datagrams to be sent to the given address.
+    */
+   public abstract DatagramChannel connect(SocketAddress remote)
+     throws IOException;
+ 
+   /**
+    * Disonnects this channel's socket.
+    *
+    * @exception IOException If an error occurs
+    */
+   public abstract DatagramChannel disconnect() throws IOException;
+ 
+   /**
+    * Tells whether or not this channel's socket is connected.
+    *
+    * @exception IOException If an error occurs.
+    * @exception NotYetConnectedException The channel's socket is not connected.
+    */
+   public abstract boolean isConnected();
+ 
+   /**
+    * Reads data from this channel.
+    */
+   public abstract int read(ByteBuffer dst) throws IOException;
+ 
+   /**
+    * Reads data from this channel.
+    *
+    * @exception IOException If an error occurs.
+    * @exception NotYetConnectedException The channel's socket is not connected.
+    */
+   public abstract long read(ByteBuffer[] dsts, int offset, int length)
+     throws IOException;
+ 
+   /**
+    * Receives a datagram via this channel.
+    *
+    * @exception AsynchronousCloseException If another thread closes this channel
+    * while the connect operation is in progress.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the read operation is in progress, thereby closing the
+    * channel and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager has been installed and
+    * it does not permit datagrams to be sent to the given address.
+    */
+   public abstract SocketAddress receive(ByteBuffer dst)
+     throws IOException;
+ 
+   /**
+    * Sends a datagram via this channel.
+    *
+    * @exception AsynchronousCloseException If another thread closes this channel
+    * while the connect operation is in progress.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the read operation is in progress, thereby closing the
+    * channel and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager has been installed and
+    * it does not permit datagrams to be sent to the given address.
+    */
+   public abstract int send(ByteBuffer src, SocketAddress target)
+     throws IOException;
+ 
+   /**
+    * Retrieves the channel's socket.
+    */
+   public abstract DatagramSocket socket();
+ 
+   /**
+    * Writes data to this channel.
+    *
+    * @exception IOException If an error occurs.
+    * @exception NotYetConnectedException The channel's socket is not connected.
+    */
+   public abstract int write(ByteBuffer src) throws IOException;
+ 
+   /**
+    * Writes data to this channel.
+    *
+    * @exception IOException If an error occurs.
+    * @exception NotYetConnectedException The channel's socket is not connected.
+    */
+   public abstract long write(ByteBuffer[] srcs, int offset, int length)
+     throws IOException;
+ 
+   /**
+    * Retrieves the valid operations for this channel.
+    *
+    * @exception IOException If an error occurs.
+    * @exception NotYetConnectedException The channel's socket is not connected.
+    */
+   public final int validOps()
+   {
+     return SelectionKey.OP_READ | SelectionKey.OP_WRITE;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/FileChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/FileChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/FileChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/FileChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,367 ----
+ /* FileChannel.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.nio.MappedByteBuffer;
+ import java.nio.channels.spi.AbstractInterruptibleChannel;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public abstract class FileChannel extends AbstractInterruptibleChannel
+   implements ByteChannel, GatheringByteChannel, ScatteringByteChannel
+ {
+   public static class MapMode
+   {
+     int m;
+     public static final MapMode READ_ONLY = new MapMode(0);
+     public static final MapMode READ_WRITE = new MapMode(1);
+     public static final MapMode PRIVATE = new MapMode(2);
+ 
+     /**
+      * Initializes the MapMode.
+      */
+     MapMode(int a)
+     {
+       m = a;
+     }
+ 
+     /**
+      * Returns a string representation of the <code>MapMode</code> object.
+      */
+     public String toString()
+     {
+       if (this == READ_ONLY)
+ 	return "READ_ONLY";
+       else if (this == READ_WRITE)
+ 	return "READ_WRITE";
+ 
+       return "PRIVATE";
+     }
+   }
+ 
+   /**
+    * Initializes the channel.
+    */
+   protected FileChannel()
+   {
+   }
+ 
+   /**
+    * Maps the file into the memory.
+    *
+    * @exception IllegalArgumentException If the preconditions on the parameters
+    * do not hold.
+    * @exception IOException If an I/O error occurs.
+    * @exception NonReadableChannelException If mode is READ_ONLY but this channel was
+    * not opened for reading.
+    * @exception NonWritableChannelException If mode is READ_WRITE or PRIVATE but this
+    * channel was not opened for writing.
+    */
+   public abstract MappedByteBuffer map(MapMode mode, long position, long size)
+     throws IOException;
+ 
+   /**
+    * Return the size of the file thus far
+    *
+    * @exception ClosedChannelException If this channel is closed.
+    */
+   public abstract long size() throws IOException;
+ 
+   /**
+    * Writes data to the channel.
+    *
+    * @exception IOException If an I/O error occurs.
+    */
+   public final long write(ByteBuffer[] srcs) throws IOException
+   {
+     long result = 0;
+ 
+     for (int i = 0; i < srcs.length; i++)
+       result += write(srcs[i]);
+ 
+     return result;
+   }
+ 
+   /**
+    * Writes data to the channel.
+    *
+    * @exception IOException If an I/O error occurs.
+    */
+   public abstract int write(ByteBuffer src) throws IOException;
+ 
+   /**
+    * Writes data to the channel.
+    *
+    * @exception AsynchronousCloseException If another thread closes this channel
+    * while the transfer is in progress.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the transfer is in progress, thereby closing both
+    * channels and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalArgumentException If position is negative.
+    * @exception IOException If an I/O error occurs.
+    * @exception NonWritableChannelException If this channel was not opened for
+    * writing.
+    */
+   public abstract int write(ByteBuffer srcs, long position)
+     throws IOException;
+ 
+   /**
+    * Writes data to the channel.
+    *
+    * @exception IOException If an I/O error occurs.
+    */
+   public abstract long write(ByteBuffer[] srcs, int offset, int length)
+     throws IOException;
+ 
+   /**
+    * Reads data from the channel.
+    *
+    * @exception IOException If an I/O error occurs.
+    */
+   public abstract long read(ByteBuffer[] dsts, int offset, int length)
+     throws IOException;
+ 
+   /**
+    * Reads data from the channel.
+    *
+    * @exception IOException If an I/O error occurs.
+    */
+   public final long read(ByteBuffer[] dsts) throws IOException
+   {
+     long result = 0;
+ 
+     for (int i = 0; i < dsts.length; i++)
+       read(dsts[i]);
+ 
+     return result;
+   }
+ 
+   /**
+    * Reads data from the channel.
+    *
+    * @exception IOException If an I/O error occurs.
+    */
+   public abstract int read(ByteBuffer dst) throws IOException;
+ 
+   /**
+    * Reads data from the channel.
+    *
+    * @exception AsynchronousCloseException If another thread closes this channel
+    * while the transfer is in progress.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the transfer is in progress, thereby closing both
+    * channels and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalArgumentException If position is negative.
+    * @exception IOException If an I/O error occurs.
+    * @exception NonReadableChannelException If this channel was not opened for
+    * reading.
+    */
+   public abstract int read(ByteBuffer dst, long position)
+     throws IOException;
+ 
+   /**
+    * Closes the channel.
+    *
+    * This is called from @see close.
+    *
+    * @exception IOException If an I/O error occurs.
+    */
+   protected abstract void implCloseChannel() throws IOException;
+ 
+   /**
+    * msync with the disk
+    *
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IOException If an I/O error occurs.
+    */
+   public abstract void force(boolean metaData) throws IOException;
+ 
+   /**
+    * Creates a file lock for the whole assoziated file.
+    *
+    * @exception AsynchronousCloseException If another thread closes this channel
+    * while the transfer is in progress.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception FileLockInterruptionException If the invoking thread is
+    * interrupted while blocked in this method.
+    * @exception IOException If an I/O error occurs.
+    * @exception NonReadableChannelException If shared is true and this channel
+    * was not opened for reading.
+    * @exception NonWritableChannelException If shared is false and this channel
+    * was not opened for writing.
+    * @exception OverlappingFileLockException If a lock that overlaps the
+    * requested region is already held by this Java virtual machine, or if
+    * another thread is already blocked in this method and is attempting to lock
+    * an overlapping region.
+    */
+   public final FileLock lock() throws IOException
+   {
+     return lock(0, Long.MAX_VALUE, false);
+   }
+ 
+   /**
+    * Creates a file lock for a region of the assoziated file.
+    *
+    * @exception AsynchronousCloseException If another thread closes this channel
+    * while the transfer is in progress.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception FileLockInterruptionException If the invoking thread is
+    * interrupted while blocked in this method.
+    * @exception IllegalArgumentException If the preconditions on the parameters
+    * do not hold.
+    * @exception IOException If an I/O error occurs.
+    * @exception OverlappingFileLockException If a lock that overlaps the
+    * requested region is already held by this Java virtual machine, or if
+    * another thread is already blocked in this method and is attempting to lock
+    * an overlapping region.
+    * @exception NonReadableChannelException If shared is true and this channel
+    * was not opened for reading.
+    * @exception NonWritableChannelException If shared is false and this channel
+    * was not opened for writing.
+    */
+   public abstract FileLock lock(long position, long size, boolean shared)
+     throws IOException;
+ 
+   /**
+    * Tries to aqquire alock on the whole assoziated file.
+    *
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IOException If an I/O error occurs.
+    * @exception OverlappingFileLockException If a lock that overlaps the
+    * requested region is already held by this Java virtual machine, or if
+    * another thread is already blocked in this method and is attempting to lock
+    * an overlapping region.
+    */
+   public final FileLock tryLock() throws IOException
+   {
+     return tryLock(0, Long.MAX_VALUE, false);
+   }
+ 
+   /**
+    * Tries to aqquire a lock on a region of the assoziated file.
+    *
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalArgumentException If the preconditions on the parameters
+    * do not hold.
+    * @exception IOException If an I/O error occurs.
+    * @exception OverlappingFileLockException If a lock that overlaps the
+    * requested region is already held by this Java virtual machine, or if
+    * another thread is already blocked in this method and is attempting to lock
+    * an overlapping region.
+    */
+   public abstract FileLock tryLock(long position, long size, boolean shared)
+     throws IOException;
+ 
+   /**
+    * Returns the current position on the file.
+    *
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IOException If an I/O error occurs.
+    */
+   public abstract long position() throws IOException;
+ 
+   /**
+    * Sets the position of the channel on the assoziated file.
+    *
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalArgumentException If newPosition is negative.
+    * @exception IOException If an I/O error occurs.
+    */
+   public abstract FileChannel position(long newPosition)
+     throws IOException;
+ 
+   /**
+    * Transfers bytes from this channel's file to the given writable byte
+    * channel.
+    *
+    * @exception AsynchronousCloseException If another thread closes this channel
+    * while the transfer is in progress.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the transfer is in progress, thereby closing both
+    * channels and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalArgumentException If the preconditions on the parameters
+    * do not hold.
+    * @exception IOException If an I/O error occurs.
+    * @exception NonReadableChannelException If this channel was not opened for
+    * reading.
+    * @exception NonWritableChannelException If the target channel was not
+    * opened for writing.
+    */
+   public abstract long transferTo(long position, long count,
+                                   WritableByteChannel target)
+     throws IOException;
+ 
+   /**
+    * Transfers bytes from the given readable channel into this channel.
+    *
+    * @exception AsynchronousCloseException If another thread closes this channel
+    * while the transfer is in progress.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the transfer is in progress, thereby closing both
+    * channels and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalArgumentException If the preconditions on the parameters
+    * do not hold.
+    * @exception IOException If an I/O error occurs.
+    * @exception NonReadableChannelException If the source channel was not
+    * opened for reading.
+    * @exception NonWritableChannelException If this channel was not opened for
+    * writing.
+    */
+   public abstract long transferFrom(ReadableByteChannel src, long position,
+                                     long count) throws IOException;
+ 
+   /**
+    * Truncates the channel's file at <code>size</code>.
+    *
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalArgumentException If size is negative.
+    * @exception IOException If an I/O error occurs.
+    * @exception NonWritableChannelException If this channel was not opened for
+    * writing.
+    */
+   public abstract FileChannel truncate(long size) throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/FileLock.java gcc-4.1.0/libjava/classpath/java/nio/channels/FileLock.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/FileLock.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/FileLock.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,150 ----
+ /* FileLock.java --
+    Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class FileLock
+ {
+   private final FileChannel channel;
+   private final long position;
+   private final long size;
+   private final boolean shared;
+ 
+   /**
+    * Initializes the file lock.
+    *
+    * @exception IllegalArgumentException If the preconditions on the parameters do not hold
+    */
+   protected FileLock(FileChannel channel, long position, long size,
+                      boolean shared)
+   {
+     if (position < 0 || size < 0)
+       throw new IllegalArgumentException();
+ 
+     this.channel = channel;
+     this.position = position;
+     this.size = size;
+     this.shared = shared;
+   }
+ 
+   /**
+    * Tells whether or not this lock is valid.
+    */
+   public abstract boolean isValid();
+ 
+   /**
+    * Releases this lock.
+    *
+    * @exception IOException If an error occurs
+    * @exception ClosedChannelException If the locked channel is no longer open.
+    */
+   public abstract void release() throws IOException;
+ 
+   /**
+    * Returns the file channel upon whose file this lock is held.
+    */
+   public final FileChannel channel()
+   {
+     return channel;
+   }
+ 
+   /**
+    * Tells whether this lock is shared.
+    */
+   public final boolean isShared()
+   {
+     return shared;
+   }
+ 
+   /**
+    * Tells whether or not this lock overlaps the given lock range.
+    */
+   public final boolean overlaps(long position, long size)
+   {
+     if (position > this.position + this.size)
+       return false;
+ 
+     if (position + size < this.position)
+       return false;
+ 
+     return true;
+   }
+ 
+   /**
+    * Returns the position within the file of the first byte of the
+    * locked region.
+    */
+   public final long position()
+   {
+     return position;
+   }
+ 
+   /**
+    * Returns the size of the locked region in bytes.
+    */
+   public final long size()
+   {
+     return size;
+   }
+ 
+   /**
+    * Returns a string describing the range, type, and validity of this lock.
+    */
+   public final String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append("[");
+     buf.append(position);
+     buf.append(":");
+     buf.append(size);
+     if (shared)
+       buf.append(" shared");
+     else
+       buf.append(" exclusive");
+     if (isValid())
+       buf.append(" valid]");
+     else
+       buf.append(" invalid]");
+     return buf.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/FileLockInterruptionException.java gcc-4.1.0/libjava/classpath/java/nio/channels/FileLockInterruptionException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/FileLockInterruptionException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/FileLockInterruptionException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,55 ----
+ /* FileLockInterruptionException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class FileLockInterruptionException extends IOException
+ {
+   /**
+    * Creates the exception
+    */
+   public FileLockInterruptionException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/GatheringByteChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/GatheringByteChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/GatheringByteChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/GatheringByteChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* GatheringByteChannel.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ 
+ public interface GatheringByteChannel extends WritableByteChannel
+ {
+   /**
+    * Writes a sequence of bytes to this channel from a subsequence of
+    * the given buffers
+    *
+    * @exception AsynchronousCloseException If another thread closes this
+    * channel while the write operation is in progress
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the write operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status
+    * @exception ClosedChannelException If this channel is closed
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    * @exception IOException If an error occurs
+    * @exception NonWritableChannelException If this channel was not opened for
+    * writing
+    */
+   long write(ByteBuffer[] srcs, int offset, int length)
+     throws IOException;
+ 
+   /**
+    * Writes a sequence of bytes to this channel from the given buffers
+    *
+    * @exception AsynchronousCloseException If another thread closes this
+    * channel while the write operation is in progress
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the write operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status
+    * @exception ClosedChannelException If this channel is closed
+    * @exception IOException If an error occurs
+    * @exception NonWritableChannelException If this channel was not opened for
+    * writing
+    */
+   long write(ByteBuffer[] srcs) throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/IllegalBlockingModeException.java gcc-4.1.0/libjava/classpath/java/nio/channels/IllegalBlockingModeException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/IllegalBlockingModeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/IllegalBlockingModeException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* IllegalBlockingModeException.java --
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.4
+  *
+  * Written using JDK 1.4.1 Online API from Sun
+  * Status: JDK 1.4 complete
+  */
+ public class IllegalBlockingModeException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public IllegalBlockingModeException()
+   {
+     super();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/IllegalSelectorException.java gcc-4.1.0/libjava/classpath/java/nio/channels/IllegalSelectorException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/IllegalSelectorException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/IllegalSelectorException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* IllegalSelectorException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class IllegalSelectorException extends IllegalArgumentException
+ {
+   /**
+    * Creates the exception
+    */
+   public IllegalSelectorException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/InterruptibleChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/InterruptibleChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/InterruptibleChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/InterruptibleChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /* InterruptibleChannel.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ 
+ 
+ public interface InterruptibleChannel extends Channel
+ {
+   /**
+    * Closes this channel
+    *
+    * @exception IOException If an error occurs
+    */
+   void close() throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/NoConnectionPendingException.java gcc-4.1.0/libjava/classpath/java/nio/channels/NoConnectionPendingException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/NoConnectionPendingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/NoConnectionPendingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* NoConnectionPendingException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class NoConnectionPendingException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public NoConnectionPendingException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/NonReadableChannelException.java gcc-4.1.0/libjava/classpath/java/nio/channels/NonReadableChannelException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/NonReadableChannelException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/NonReadableChannelException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* NonReadableChannelException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class NonReadableChannelException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public NonReadableChannelException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/NonWritableChannelException.java gcc-4.1.0/libjava/classpath/java/nio/channels/NonWritableChannelException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/NonWritableChannelException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/NonWritableChannelException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* NonWritableChannelException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class NonWritableChannelException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public NonWritableChannelException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/NotYetBoundException.java gcc-4.1.0/libjava/classpath/java/nio/channels/NotYetBoundException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/NotYetBoundException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/NotYetBoundException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* NotYetBoundException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class NotYetBoundException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public NotYetBoundException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/NotYetConnectedException.java gcc-4.1.0/libjava/classpath/java/nio/channels/NotYetConnectedException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/NotYetConnectedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/NotYetConnectedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* NotYetConnectedException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class NotYetConnectedException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public NotYetConnectedException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/OverlappingFileLockException.java gcc-4.1.0/libjava/classpath/java/nio/channels/OverlappingFileLockException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/OverlappingFileLockException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/OverlappingFileLockException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* OverlappingFileLockException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class OverlappingFileLockException extends IllegalStateException
+ {
+   /**
+    * Creates the exception
+    */
+   public OverlappingFileLockException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/Pipe.java gcc-4.1.0/libjava/classpath/java/nio/channels/Pipe.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/Pipe.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/Pipe.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,121 ----
+ /* Pipe.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.nio.channels.spi.AbstractSelectableChannel;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public abstract class Pipe
+ {
+   public abstract static class SinkChannel extends AbstractSelectableChannel
+     implements WritableByteChannel, GatheringByteChannel
+   {
+     /**
+      * Initializes the channel.
+      */
+     protected SinkChannel(SelectorProvider provider)
+     {
+       super(provider);
+     }
+ 
+     /**
+      * Returns an operation set that is valid on this channel.
+      *
+      * The only valid operation on this channel is @see SelectionKey.OP_WRITE.
+      */
+     public final int validOps()
+     {
+       return SelectionKey.OP_WRITE;
+     }
+   }
+ 
+   public abstract static class SourceChannel extends AbstractSelectableChannel
+     implements ReadableByteChannel, ScatteringByteChannel
+   {
+     /**
+      * Initializes the channel.
+      */
+     protected SourceChannel(SelectorProvider provider)
+     {
+       super(provider);
+     }
+ 
+     /**
+      * Returns an operation set that is valid on this channel.
+      *
+      * The only valid operation on this channel is @see SelectionKey.OP_READ.
+      */
+     public final int validOps()
+     {
+       return SelectionKey.OP_READ;
+     }
+   }
+ 
+   /**
+    * Initializes the pipe.
+    */
+   protected Pipe()
+   {
+   }
+ 
+   /**
+    * Opens a pipe.
+    *
+    * @exception IOException If an error occurs
+    */
+   public static Pipe open() throws IOException
+   {
+     return SelectorProvider.provider().openPipe();
+   }
+ 
+   /**
+    * Returns a pipe's sink channel.
+    */
+   public abstract Pipe.SinkChannel sink();
+ 
+   /**
+    * Returns a pipe's source channel
+    */
+   public abstract Pipe.SourceChannel source();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/ReadableByteChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/ReadableByteChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/ReadableByteChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/ReadableByteChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* ReadableByteChannel.java --
+    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ 
+ public interface ReadableByteChannel extends Channel
+ {
+   /**
+    * Reads a sequence of bytes from this channel into the given buffer
+    *
+    * @param dst the buffer to put the read data into
+    *
+    * @return the numer of bytes read
+    *
+    * @exception AsynchronousCloseException If another thread closes this
+    * channel while the read operation is in progress
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the read operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status
+    * @exception ClosedChannelException If this channel is closed
+    * @exception IOException If an error occurs
+    * @exception NonReadableChannelException If this channel was not opened for
+    * reading
+    */
+   int read(ByteBuffer dst) throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/ScatteringByteChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/ScatteringByteChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/ScatteringByteChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/ScatteringByteChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* ScatteringByteChannel.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ 
+ public interface ScatteringByteChannel extends ReadableByteChannel
+ {
+   /**
+    * Reads a sequence of bytes from this channel into a subsequence of the
+    * given buffers
+    *
+    * @exception AsynchronousCloseException If another thread closes this
+    * channel while the write operation is in progress
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the write operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status
+    * @exception ClosedChannelException If this channel is closed
+    * @exception IndexOutOfBoundsException If the preconditions on the offset
+    * and length parameters do not hold
+    * @exception IOException If an error occurs
+    * @exception NonReadableChannelException If this channel was not opened for
+    * reading
+    */
+   long read(ByteBuffer[] srcs, int offset, int length)
+     throws IOException;
+ 
+   /**
+    * Reads a sequence of bytes from this channel into the given buffers
+    *
+    * @exception AsynchronousCloseException If another thread closes this
+    * channel while the write operation is in progress
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the write operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status
+    * @exception ClosedChannelException If this channel is closed
+    * @exception IOException If an error occurs
+    * @exception NonReadableChannelException If this channel was not opened for
+    * reading
+    */
+   long read(ByteBuffer[] srcs) throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/SelectableChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/SelectableChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/SelectableChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/SelectableChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* SelectableChannel.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.nio.channels.spi.AbstractInterruptibleChannel;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public abstract class SelectableChannel extends AbstractInterruptibleChannel
+ {
+   /**
+    * Initializes the channel.
+    */
+   protected SelectableChannel()
+   {
+   }
+ 
+   /**
+    * Returns the lock of this channel.
+    */
+   public abstract Object blockingLock();
+ 
+   /**
+    * Adjusts this channel's blocking mode.
+    *
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalBlockingModeException If block is true and this channel
+    * is registered with one or more selectors.
+    * @exception IOException If an error occurs.
+    */
+   public abstract SelectableChannel configureBlocking(boolean block)
+     throws IOException;
+ 
+   /**
+    * Tells whether this channel is blocking or not.
+    */
+   public abstract boolean isBlocking();
+ 
+   /**
+    * Tells whether or not this channel is currently registered with
+    * any selectors.
+    */
+   public abstract boolean isRegistered();
+ 
+   /**
+    * Retrieves the key representing the channel's registration with
+    * the given selector.
+    */
+   public abstract SelectionKey keyFor(Selector sel);
+ 
+   /**
+    * Returns the provider that created this channel.
+    */
+   public abstract SelectorProvider provider();
+ 
+   /**
+    * Registers this channel with the given selector,
+    * returning a selection key.
+    *
+    * @exception CancelledKeyException If this channel is currently registered
+    * with the given selector but the corresponding key has already been cancelled
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalArgumentException If a bit in ops does not correspond
+    * to an operation that is supported by this channel, that is, if
+    * set &amp; ~validOps() != 0.
+    * @exception IllegalBlockingModeException If block is true and this channel
+    * is registered with one or more selectors.
+    * @exception IllegalSelectorException If this channel was not created by
+    * the same provider as the given selector.
+    */
+   public final SelectionKey register(Selector sel, int ops)
+     throws ClosedChannelException
+   {
+     return register(sel, ops, null);
+   }
+ 
+   /**
+    * Registers this channel with the given selector,
+    * returning a selection key.
+    *
+    * @exception CancelledKeyException If this channel is currently registered
+    * with the given selector but the corresponding key has already been
+    * cancelled.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IllegalArgumentException If a bit in ops does not correspond
+    * to an operation that is supported by this channel, that is, if
+    * set &amp; ~validOps() != 0.
+    * @exception IllegalBlockingModeException If block is true and this channel
+    * is registered with one or more selectors.
+    * @exception IllegalSelectorException If this channel was not created by
+    * the same provider as the given selector.
+    */
+   public abstract SelectionKey register(Selector sel, int ops, Object att)
+     throws ClosedChannelException;
+ 
+   /**
+    * Returns a set of valid operations on this channel.
+    */
+   public abstract int validOps();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/SelectionKey.java gcc-4.1.0/libjava/classpath/java/nio/channels/SelectionKey.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/SelectionKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/SelectionKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,164 ----
+ /* SelectionKey.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public abstract class SelectionKey
+ {
+   public static final int OP_ACCEPT = 16;
+   public static final int OP_CONNECT = 8;
+   public static final int OP_READ = 1;
+   public static final int OP_WRITE = 4;
+   Object attached;
+ 
+   /**
+    * Initializes the selection key.
+    */
+   protected SelectionKey()
+   {
+   }
+ 
+   /**
+    * Attaches obj to the key and returns the old attached object.
+    */
+   public final Object attach(Object obj)
+   {
+     Object old = attached;
+     attached = obj;
+     return old;
+   }
+ 
+   /**
+    * Returns the object attached to the key.
+    */
+   public final Object attachment()
+   {
+     return attached;
+   }
+ 
+   /**
+    * Tests if the channel attached to this key is ready to accept
+    * a new socket connection.
+    *
+    * @exception CancelledKeyException If this key has been cancelled
+    */
+   public final boolean isAcceptable()
+   {
+     return (readyOps() & OP_ACCEPT) != 0;
+   }
+ 
+   /**
+    * Tests whether this key's channel has either finished,
+    * or failed to finish, its socket-connection operation.
+    *
+    * @exception CancelledKeyException If this key has been cancelled
+    */
+   public final boolean isConnectable()
+   {
+     return (readyOps() & OP_CONNECT) != 0;
+   }
+ 
+   /**
+    * Tests if the channel attached to the key is readable.
+    *
+    * @exception CancelledKeyException If this key has been cancelled
+    */
+   public final boolean isReadable()
+   {
+     return (readyOps() & OP_READ) != 0;
+   }
+ 
+   /**
+    * Tests if the channel attached to the key is writable.
+    *
+    * @exception CancelledKeyException If this key has been cancelled
+    */
+   public final boolean isWritable()
+   {
+     return (readyOps() & OP_WRITE) != 0;
+   }
+ 
+   /**
+    * Requests that the registration of this key's channel with
+    * its selector be cancelled.
+    */
+   public abstract void cancel();
+ 
+   /**
+    * return the channel attached to the key.
+    */
+   public abstract SelectableChannel channel();
+ 
+   /**
+    * Returns the key's interest set.
+    *
+    * @exception CancelledKeyException If this key has been cancelled
+    */
+   public abstract int interestOps();
+ 
+   /**
+    * Sets this key's interest set to the given value.
+    *
+    * @exception CancelledKeyException If this key has been cancelled
+    * @exception IllegalArgumentException If a bit in the set does not
+    * correspond to an operation that is supported by this key's channel,
+    * that is, if set &amp; ~(channel().validOps()) != 0
+    */
+   public abstract SelectionKey interestOps(int ops);
+ 
+   /**
+    * Tells whether or not this key is valid.
+    */
+   public abstract boolean isValid();
+ 
+   /**
+    * Retrieves this key's ready-operation set.
+    *
+    * @exception CancelledKeyException If this key has been cancelled
+    */
+   public abstract int readyOps();
+ 
+   /**
+    * Returns the selector for which this key was created.
+    */
+   public abstract Selector selector();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/Selector.java gcc-4.1.0/libjava/classpath/java/nio/channels/Selector.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/Selector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/Selector.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,134 ----
+ /* Selector.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.nio.channels.spi.SelectorProvider;
+ import java.util.Set;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public abstract class Selector
+ {
+   /**
+    * Initializes the selector.
+    */
+   protected Selector()
+   {
+   }
+ 
+   /**
+    * Opens a selector.
+    *
+    * @exception IOException If an error occurs
+    */
+   public static Selector open() throws IOException
+   {
+     return SelectorProvider.provider().openSelector();
+   }
+ 
+   /**
+    * Closes the selector.
+    *
+    * @exception IOException If an error occurs
+    */
+   public abstract void close() throws IOException;
+ 
+   /**
+    * Tells whether the selector is open or not.
+    */
+   public abstract boolean isOpen();
+ 
+   /**
+    * Returns this selector's key set.
+    *
+    * @exception ClosedSelectorException If this selector is closed.
+    */
+   public abstract Set keys();
+ 
+   /**
+    * Returns the SelectorProvider that created the selector.
+    */
+   public abstract SelectorProvider provider();
+ 
+   /**
+    * Selects a set of keys whose corresponding channels are ready
+    * for I/O operations.
+    *
+    * @exception ClosedSelectorException If this selector is closed.
+    * @exception IOException If an error occurs
+    */
+   public abstract int select() throws IOException;
+ 
+   /**
+    * Selects a set of keys whose corresponding channels are ready
+    * for I/O operations.
+    *
+    * @param timeout The timeout to use.
+    *
+    * @exception ClosedSelectorException If this selector is closed.
+    * @exception IllegalArgumentException If the timeout value is negative.
+    * @exception IOException If an error occurs
+    */
+   public abstract int select(long timeout) throws IOException;
+ 
+   /**
+    * Returns this selector's selected-key set.
+    *
+    * @exception ClosedSelectorException If this selector is closed.
+    */
+   public abstract Set selectedKeys();
+ 
+   /**
+    * Selects a set of keys whose corresponding channels are ready
+    * for I/O operations.
+    *
+    * @exception ClosedSelectorException If this selector is closed.
+    * @exception IOException If an error occurs
+    */
+   public abstract int selectNow() throws IOException;
+ 
+   /**
+    * Causes the first selection operation that has not yet returned to
+    * return immediately.
+    */
+   public abstract Selector wakeup();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/ServerSocketChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/ServerSocketChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/ServerSocketChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/ServerSocketChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* ServerSocketChannel.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.net.ServerSocket;
+ import java.nio.channels.spi.AbstractSelectableChannel;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public abstract class ServerSocketChannel extends AbstractSelectableChannel
+ {
+   /**
+    * Initializes this channel.
+    */
+   protected ServerSocketChannel(SelectorProvider provider)
+   {
+     super(provider);
+   }
+ 
+   /**
+    * Accepts a connection made to this channel's socket.
+    *
+    * @exception IOException If an error occurs
+    * @exception AsynchronousCloseException If another thread closes this
+    * channel while the accept operation is in progress.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the accept operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If the channel is closed.
+    * @exception NotYetBoundException If the channel's socket is not yet bound.
+    * @exception SecurityException If a security manager has been installed and
+    * it does not permit access to the remote endpoint of the new connection.
+    */
+   public abstract SocketChannel accept() throws IOException;
+ 
+   /**
+    * Retrieves the channels socket.
+    */
+   public abstract ServerSocket socket();
+ 
+   /**
+    * Opens a server socket channel.
+    *
+    * @exception IOException If an error occurs
+    */
+   public static ServerSocketChannel open() throws IOException
+   {
+     return SelectorProvider.provider().openServerSocketChannel();
+   }
+ 
+   /**
+    * Retrieves the valid operations for this channel.
+    */
+   public final int validOps()
+   {
+     return SelectionKey.OP_ACCEPT;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/SocketChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/SocketChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/SocketChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/SocketChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,248 ----
+ /* SocketChannel.java --
+    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.net.Socket;
+ import java.net.SocketAddress;
+ import java.nio.ByteBuffer;
+ import java.nio.channels.spi.AbstractSelectableChannel;
+ import java.nio.channels.spi.SelectorProvider;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  * @since 1.4
+  */
+ public abstract class SocketChannel extends AbstractSelectableChannel
+   implements ByteChannel, ScatteringByteChannel, GatheringByteChannel
+ {
+   /**
+    * Initializes this socket channel.
+    */
+   protected SocketChannel(SelectorProvider provider)
+   {
+     super(provider);
+   }
+ 
+   /**
+    * Opens a socket channel.
+    *
+    * @return the new <code>SocketChannel</code> object
+    * 
+    * @exception IOException If an error occurs
+    */
+   public static SocketChannel open() throws IOException
+   {
+     return SelectorProvider.provider().openSocketChannel();
+   }
+ 
+   /**
+    * Opens a channel and connects it to a remote address.
+    *
+    * @return the new <code>SocketChannel</code> object
+    * 
+    * @exception AsynchronousCloseException If this channel is already connected.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the connect operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status.
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager has been installed and
+    * it does not permit access to the given remote endpoint.
+    * @exception UnresolvedAddressException If the given remote address is not
+    * fully resolved.
+    * @exception UnsupportedAddressTypeException If the type of the given remote
+    * address is not supported.
+    */
+   public static SocketChannel open(SocketAddress remote)
+     throws IOException
+   {
+     SocketChannel ch = open();
+     ch.connect(remote);
+     return ch;
+   }
+ 
+   /**
+    * Reads data from the channel.
+    *
+    * @return the number of bytes read, zero is valid too, -1 if end of stream
+    * is reached
+    *
+    * @exception IOException If an error occurs
+    * @exception NotYetConnectedException If this channel is not yet connected.
+    */
+   public final long read(ByteBuffer[] dsts) throws IOException
+   {
+     long b = 0;
+ 
+     for (int i = 0; i < dsts.length; i++)
+       b += read(dsts[i]);
+ 
+     return b;
+   }
+ 
+   /**
+    * Writes data to the channel.
+    *
+    * @return the number of bytes written, zero is valid too
+    * 
+    * @exception IOException If an error occurs
+    * @exception NotYetConnectedException If this channel is not yet connected.
+    */
+   public final long write(ByteBuffer[] dsts) throws IOException
+   {
+     long b = 0;
+ 
+     for (int i = 0; i < dsts.length; i++)
+       b += write(dsts[i]);
+ 
+     return b;
+   }
+ 
+   /**
+    * Retrieves the valid operations for this channel.
+    *
+    * @return the valid operations
+    */
+   public final int validOps()
+   {
+     return SelectionKey.OP_CONNECT | SelectionKey.OP_READ
+            | SelectionKey.OP_WRITE;
+   }
+ 
+   /**
+    * Reads data from the channel.
+    *
+    * @return the number of bytes read, zero is valid too, -1 if end of stream
+    * is reached
+    * 
+    * @exception IOException If an error occurs
+    * @exception NotYetConnectedException If this channel is not yet connected.
+    */
+   public abstract int read(ByteBuffer dst) throws IOException;
+ 
+   /**
+    * Connects the channel's socket to the remote address.
+    *
+    * @return <code>true</code> if the channel got successfully connected,
+    * <code>false</code> if the channel is in non-blocking mode and connection
+    * operation is still in progress.
+    * 
+    * @exception AlreadyConnectedException If this channel is already connected.
+    * @exception AsynchronousCloseException If this channel is already connected.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the connect operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception ConnectionPendingException If a non-blocking connection
+    * operation is already in progress on this channel.
+    * @exception IOException If an error occurs
+    * @exception SecurityException If a security manager has been installed and
+    * it does not permit access to the given remote endpoint.
+    * @exception UnresolvedAddressException If the given remote address is not
+    * fully resolved.
+    * @exception UnsupportedAddressTypeException If the type of the given remote
+    * address is not supported.
+    */
+   public abstract boolean connect(SocketAddress remote)
+     throws IOException;
+ 
+   /**
+    * Finishes the process of connecting a socket channel.
+    *
+    * @exception AsynchronousCloseException If this channel is already connected.
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the connect operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status.
+    * @exception ClosedChannelException If this channel is closed.
+    * @exception IOException If an error occurs
+    * @exception NoConnectionPendingException If this channel is not connected
+    * and a connection operation has not been initiated.
+    */
+   public abstract boolean finishConnect() throws IOException;
+ 
+   /**
+    * Tells whether or not the channel's socket is connected.
+    */
+   public abstract boolean isConnected();
+ 
+   /**
+    * Tells whether or not a connection operation is in progress on this channel.
+    */
+   public abstract boolean isConnectionPending();
+ 
+   /**
+    * Reads data from the channel.
+    *
+    * @return the number of bytes read, zero is valid too, -1 if end of stream
+    * is reached
+    * 
+    * @exception IOException If an error occurs
+    * @exception NotYetConnectedException If this channel is not yet connected.
+    */
+   public abstract long read(ByteBuffer[] dsts, int offset, int length)
+     throws IOException;
+ 
+   /**
+    * Retrieves the channel's socket.
+    *
+    * @return the socket
+    */
+   public abstract Socket socket();
+ 
+   /**
+    * Writes data to the channel.
+    *
+    * @return the number of bytes written, zero is valid too
+    * 
+    * @exception IOException If an error occurs
+    * @exception NotYetConnectedException If this channel is not yet connected.
+    */
+   public abstract int write(ByteBuffer src) throws IOException;
+ 
+   /**
+    * Writes data to the channel.
+    *
+    * @return the number of bytes written, zero is valid too
+    * 
+    * @exception IOException If an error occurs
+    * @exception NotYetConnectedException If this channel is not yet connected.
+    */
+   public abstract long write(ByteBuffer[] srcs, int offset, int length)
+     throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/UnresolvedAddressException.java gcc-4.1.0/libjava/classpath/java/nio/channels/UnresolvedAddressException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/UnresolvedAddressException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/UnresolvedAddressException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* UnresolvedAddressException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class UnresolvedAddressException extends IllegalArgumentException
+ {
+   /**
+    * Creates the exception
+    */
+   public UnresolvedAddressException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/UnsupportedAddressTypeException.java gcc-4.1.0/libjava/classpath/java/nio/channels/UnsupportedAddressTypeException.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/UnsupportedAddressTypeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/UnsupportedAddressTypeException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* UnsupportedAddressTypeException.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class UnsupportedAddressTypeException extends IllegalArgumentException
+ {
+   /**
+    * Creates the exception
+    */
+   public UnsupportedAddressTypeException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/WritableByteChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/WritableByteChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/WritableByteChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/WritableByteChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* WritableByteChannel.java --
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels;
+ 
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ 
+ public interface WritableByteChannel extends Channel
+ {
+   /**
+    * Writes a sequence of bytes to this channel from the given buffer
+    *
+    * @exception AsynchronousCloseException If another thread closes this
+    * channel while the write operation is in progress
+    * @exception ClosedByInterruptException If another thread interrupts the
+    * current thread while the write operation is in progress, thereby closing
+    * the channel and setting the current thread's interrupt status
+    * @exception ClosedChannelException If this channel is closed
+    * @exception IOException If an error occurs
+    * @exception NonWritableChannelException If this channel was not opened for
+    * writing
+    */
+   int write(ByteBuffer src) throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/package.html gcc-4.1.0/libjava/classpath/java/nio/channels/package.html
*** gcc-4.0.2/libjava/classpath/java/nio/channels/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.nio.channels package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.nio.channels</title></head>
+ 
+ <body>
+ <p>Classes for creating, selecting and non-blocking reading and writing of
+ buffers from files and sockets.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/spi/AbstractInterruptibleChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/spi/AbstractInterruptibleChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/spi/AbstractInterruptibleChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/spi/AbstractInterruptibleChannel.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,119 ----
+ /* AbstractInterruptibleChannel.java -- 
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels.spi;
+ 
+ import java.io.IOException;
+ import java.nio.channels.AsynchronousCloseException;
+ import java.nio.channels.Channel;
+ import java.nio.channels.InterruptibleChannel;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public abstract class AbstractInterruptibleChannel
+   implements Channel, InterruptibleChannel
+ {
+   private boolean closed;
+ 
+   /**
+    * Initializes the channel.
+    */
+   protected AbstractInterruptibleChannel()
+   {
+   }
+ 
+   /**
+    * Marks the beginning of an I/O operation that might block indefinitely.
+    */
+   protected final void begin()
+   {
+   }
+ 
+   /**
+    * Closes the channel.
+    *
+    * @exception IOException If an error occurs
+    */
+   public final void close() throws IOException
+   {
+     if (! closed)
+       {
+ 	closed = true;
+ 	implCloseChannel();
+       }
+   }
+ 
+   /**
+    * Marks the end of an I/O operation that might block indefinitely.
+    *
+    * @param completed true if the task completed successfully,
+    * false otherwise
+    *
+    * @exception IOException if an error occurs
+    * @exception AsynchronousCloseException If the channel was asynchronously
+    * closed.
+    * @exception ClosedByInterruptException If the thread blocked in the
+    * I/O operation was interrupted.
+    */
+   protected final void end(boolean completed)
+     throws AsynchronousCloseException
+   {
+     // FIXME: check more here.
+     
+     if (closed) throw new AsynchronousCloseException();
+   }
+ 
+   /**
+    * Closes the channel.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void implCloseChannel() throws IOException;
+ 
+   /**
+    * Tells whether or not this channel is open.
+    * 
+    * @return true if the channel is open, false otherwise 
+    */
+   public final boolean isOpen()
+   {
+     return ! closed;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/spi/AbstractSelectableChannel.java gcc-4.1.0/libjava/classpath/java/nio/channels/spi/AbstractSelectableChannel.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/spi/AbstractSelectableChannel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/spi/AbstractSelectableChannel.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,262 ----
+ /* AbstractSelectableChannel.java
+    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio.channels.spi;
+ 
+ import java.io.IOException;
+ import java.nio.channels.ClosedChannelException;
+ import java.nio.channels.SelectableChannel;
+ import java.nio.channels.SelectionKey;
+ import java.nio.channels.Selector;
+ import java.nio.channels.IllegalBlockingModeException;
+ import java.util.LinkedList;
+ import java.util.ListIterator;
+ 
+ public abstract class AbstractSelectableChannel extends SelectableChannel
+ {
+   private boolean blocking = true;
+   private Object LOCK = new Object();
+   private SelectorProvider provider;
+   private LinkedList keys = new LinkedList();
+ 
+   /**
+    * Initializes the channel
+    *
+    * @param provider the provider that created this channel
+    */
+   protected AbstractSelectableChannel(SelectorProvider provider)
+   {
+     this.provider = provider;
+   }
+ 
+   /**
+    * Retrieves the object upon which the configureBlocking and register
+    * methods synchronize.
+    *
+    * @return the blocking lock
+    */
+   public final Object blockingLock()
+   {
+     return LOCK;
+   }
+ 
+   /**
+    * Adjusts this channel's blocking mode.
+    *
+    * @param blocking true if blocking should be enabled, false otherwise
+    *
+    * @return this channel
+    *
+    * @exception IOException If an error occurs
+    */
+   public final SelectableChannel configureBlocking(boolean blocking)
+     throws IOException
+   {
+     synchronized (blockingLock())
+       {
+ 	if (this.blocking != blocking)
+ 	  {
+ 	    implConfigureBlocking(blocking);
+ 	    this.blocking = blocking;
+ 	  }
+       }
+ 
+     return this;
+   }
+ 
+   /**
+    * Closes this channel.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected final void implCloseChannel() throws IOException
+   {
+     implCloseSelectableChannel();
+   }
+ 
+   /**
+    * Closes this selectable channel.
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void implCloseSelectableChannel()
+     throws IOException;
+ 
+   /**
+    * Adjusts this channel's blocking mode.
+    *
+    * @param blocking true if blocking should be enabled, false otherwise
+    *
+    * @exception IOException If an error occurs
+    */
+   protected abstract void implConfigureBlocking(boolean blocking)
+     throws IOException;
+ 
+   /**
+    * Tells whether or not every I/O operation on this channel will block
+    * until it completes.
+    *
+    * @return true of this channel is blocking, false otherwise
+    */
+   public final boolean isBlocking()
+   {
+     return blocking;
+   }
+ 
+   /**
+    * Tells whether or not this channel is currently registered with
+    * any selectors.
+    *
+    * @return true if this channel is registered, false otherwise
+    */
+   public final boolean isRegistered()
+   {
+     return ! keys.isEmpty();
+   }
+ 
+   /**
+    * Retrieves the key representing the channel's registration with the
+    * given selector.
+    *
+    * @param selector the selector to get a selection key for
+    *
+    * @return the selection key this channel is registered with
+    */
+   public final SelectionKey keyFor(Selector selector)
+   {
+     if (! isOpen())
+       return null;
+ 
+     try
+       {
+ 	synchronized (blockingLock())
+ 	  {
+ 	    return locate(selector);
+ 	  }
+       }
+     catch (Exception e)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns the provider that created this channel.
+    *
+    * @return the selector provider that created this channel
+    */
+   public final SelectorProvider provider()
+   {
+     return provider;
+   }
+ 
+   private SelectionKey locate(Selector selector)
+   {
+     ListIterator it = keys.listIterator();
+ 
+     while (it.hasNext())
+       {
+ 	SelectionKey key = (SelectionKey) it.next();
+ 
+ 	if (key.selector() == selector)
+ 	  return key;
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Registers this channel with the given selector, returning a selection key.
+    *
+    * @param selin the seletor to use
+    * @param ops the interested operations
+    * @param att an attachment for the returned selection key
+    *
+    * @return the registered selection key
+    * 
+    * @exception ClosedChannelException If the channel is already closed.
+    * @exception IllegalBlockingModeException If the channel is configured in
+    * blocking mode.
+    */
+   public final SelectionKey register(Selector selin, int ops, Object att)
+     throws ClosedChannelException
+   {
+     if (! isOpen())
+       throw new ClosedChannelException();
+ 
+     if ((ops & ~validOps()) != 0)
+       throw new IllegalArgumentException();
+     
+     SelectionKey key = null;
+     AbstractSelector selector = (AbstractSelector) selin;
+ 
+     synchronized (blockingLock())
+       {
+ 	if (blocking)
+ 	  throw new IllegalBlockingModeException();
+ 
+ 	key = locate(selector);
+ 
+ 	if (key != null && key.isValid())
+ 	  {
+ 	    if (att != null)
+ 	      key.attach(att);
+ 	  }
+ 	else
+ 	  {
+ 	    key = selector.register(this, ops, att);
+ 
+ 	    if (key != null)
+ 	      addSelectionKey(key);
+ 	  }
+       }
+ 
+     return key;
+   }
+ 
+   void addSelectionKey(SelectionKey key)
+   {
+     keys.add(key);
+   }
+ 
+   // This method gets called by AbstractSelector.deregister().
+   void removeSelectionKey(SelectionKey key)
+   {
+     keys.remove(key);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/spi/AbstractSelectionKey.java gcc-4.1.0/libjava/classpath/java/nio/channels/spi/AbstractSelectionKey.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/spi/AbstractSelectionKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/spi/AbstractSelectionKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* AbstractSelectionKey.java --
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels.spi;
+ 
+ import java.nio.channels.SelectionKey;
+ 
+ 
+ /**
+  * @since 1.4
+  */
+ public abstract class AbstractSelectionKey extends SelectionKey
+ {
+   private boolean cancelled;
+ 
+   /**
+    * Initializes the key.
+    */
+   protected AbstractSelectionKey()
+   {
+   }
+ 
+   /**
+    * Cancels this key.
+    */
+   public final void cancel()
+   {
+     if (isValid())
+       {
+ 	((AbstractSelector) selector()).cancelKey(this);
+ 	cancelled = true;
+       }
+   }
+ 
+   /**
+    * Tells whether this key is valid or not.
+    *
+    * @return true if this key is valid, false otherwise
+    */
+   public final boolean isValid()
+   {
+     return ! cancelled;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/spi/AbstractSelector.java gcc-4.1.0/libjava/classpath/java/nio/channels/spi/AbstractSelector.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/spi/AbstractSelector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/spi/AbstractSelector.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,167 ----
+ /* AbstractSelector.java --
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels.spi;
+ 
+ import java.io.IOException;
+ import java.nio.channels.ClosedSelectorException;
+ import java.nio.channels.SelectionKey;
+ import java.nio.channels.Selector;
+ import java.util.HashSet;
+ import java.util.Set;
+ 
+ 
+ public abstract class AbstractSelector extends Selector
+ {
+   private boolean closed;
+   private SelectorProvider provider;
+   private HashSet cancelledKeys;
+ 
+   /**
+    * Initializes the slector.
+    *
+    * @param provider the provider that created this selector
+    */
+   protected AbstractSelector(SelectorProvider provider)
+   {
+     this.provider = provider;
+     this.cancelledKeys = new HashSet();
+   }
+ 
+   /**
+    * Closes the channel.
+    *
+    * @exception IOException If an error occurs
+    */
+   public final synchronized void close() throws IOException
+   {
+     if (closed)
+       return;
+ 
+     implCloseSelector();
+     closed = true;
+   }
+ 
+   /**
+    * Tells whether this channel is open or not.
+    *
+    * @return true if channel is open, false otherwise.
+    */
+   public final boolean isOpen()
+   {
+     return ! closed;
+   }
+ 
+   /**
+    * Marks the beginning of an I/O operation that might block indefinitely.
+    */
+   protected final void begin()
+   {
+   }
+ 
+   /**
+    * Marks the end of an I/O operation that might block indefinitely.
+    */
+   protected final void end()
+   {
+   }
+ 
+   /**
+    * Returns the provider for this selector object.
+    *
+    * @return the SelectorProvider object that created this seletor
+    */
+   public final SelectorProvider provider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Returns the cancelled keys set.
+    *
+    * @return the cancelled keys set
+    */
+   protected final Set cancelledKeys()
+   {
+     if (! isOpen())
+       throw new ClosedSelectorException();
+ 
+     return cancelledKeys;
+   }
+ 
+   /**
+    * Cancels a selection key.
+    */
+ 
+   // This method is only called by AbstractSelectionKey.cancel().
+   final void cancelKey(AbstractSelectionKey key)
+   {
+     synchronized (cancelledKeys)
+       {
+ 	cancelledKeys.add(key);
+       }
+   }
+ 
+   /**
+    * Closes the channel.
+    *
+    * @exception IOException if an error occurs
+    */
+   protected abstract void implCloseSelector() throws IOException;
+ 
+   /**
+    * Registers a channel for the selection process.
+    *
+    * @param ch the channel register
+    * @param ops the interested operations
+    * @param att an attachement to the selection key
+    *
+    * @return the registered selection key
+    */
+   protected abstract SelectionKey register(AbstractSelectableChannel ch,
+                                            int ops, Object att);
+ 
+   /**
+    * Deregisters the given selection key.
+    *
+    * @param key the key to deregister
+    */
+   protected final void deregister(AbstractSelectionKey key)
+   {
+     ((AbstractSelectableChannel) key.channel()).removeSelectionKey(key);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/spi/SelectorProvider.java gcc-4.1.0/libjava/classpath/java/nio/channels/spi/SelectorProvider.java
*** gcc-4.0.2/libjava/classpath/java/nio/channels/spi/SelectorProvider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/spi/SelectorProvider.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,151 ----
+ /* SelectorProvider.java
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.channels.spi;
+ 
+ import gnu.java.nio.SelectorProviderImpl;
+ 
+ import java.io.IOException;
+ import java.nio.channels.DatagramChannel;
+ import java.nio.channels.Pipe;
+ import java.nio.channels.ServerSocketChannel;
+ import java.nio.channels.SocketChannel;
+ 
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public abstract class SelectorProvider
+ {
+   private static SelectorProvider systemDefaultProvider;
+ 
+   /**
+    * Initializes the selector provider.
+    *
+    * @exception SecurityException If a security manager has been installed and
+    * it denies @see RuntimePermission ("selectorProvider").
+    */
+   protected SelectorProvider()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(new RuntimePermission("selectorProvider"));
+   }
+ 
+   /**
+    * Opens a datagram channel.
+    *
+    * @return a new datagram channel object
+    * 
+    * @exception IOException if an error occurs
+    */
+   public abstract DatagramChannel openDatagramChannel()
+     throws IOException;
+ 
+   /**
+    * Opens a pipe.
+    *
+    * @return a new pipe object
+    * 
+    * @exception IOException if an error occurs
+    */
+   public abstract Pipe openPipe() throws IOException;
+ 
+   /**
+    * Opens a selector.
+    *
+    * @return a new selector object
+    * 
+    * @exception IOException if an error occurs
+    */
+   public abstract AbstractSelector openSelector() throws IOException;
+ 
+   /**
+    * Opens a server socket channel.
+    *
+    * @return a new server socket channel object
+    * 
+    * @exception IOException if an error occurs
+    */
+   public abstract ServerSocketChannel openServerSocketChannel()
+     throws IOException;
+ 
+   /**
+    * Opens a socket channel.
+    *
+    * @return a new socket channel object
+    * 
+    * @exception IOException if an error occurs
+    */
+   public abstract SocketChannel openSocketChannel() throws IOException;
+ 
+   /**
+    * Returns the system-wide default selector provider for this invocation
+    * of the Java virtual machine.
+    *
+    * @return the default seletor provider
+    */
+   public static synchronized SelectorProvider provider()
+   {
+     if (systemDefaultProvider == null)
+       {
+ 	String propertyValue =
+ 	  System.getProperty("java.nio.channels.spi.SelectorProvider");
+ 
+ 	if (propertyValue == null || propertyValue.equals(""))
+ 	  systemDefaultProvider = new SelectorProviderImpl();
+ 	else
+ 	  {
+ 	    try
+ 	      {
+ 		systemDefaultProvider =
+ 		  (SelectorProvider) Class.forName(propertyValue)
+ 		                          .newInstance();
+ 	      }
+ 	    catch (Exception e)
+ 	      {
+ 		System.err.println("Could not instantiate class: "
+ 		                   + propertyValue);
+ 		systemDefaultProvider = new SelectorProviderImpl();
+ 	      }
+ 	  }
+       }
+ 
+     return systemDefaultProvider;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/channels/spi/package.html gcc-4.1.0/libjava/classpath/java/nio/channels/spi/package.html
*** gcc-4.0.2/libjava/classpath/java/nio/channels/spi/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/channels/spi/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.nio.channels.spi package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.nio.channels.spi</title></head>
+ 
+ <body>
+ <p>Utility classes and interfaces for implementing channels.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/CharacterCodingException.java gcc-4.1.0/libjava/classpath/java/nio/charset/CharacterCodingException.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/CharacterCodingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/CharacterCodingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,53 ----
+ /* CharacterCodingException.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * @since 1.4
+  */
+ public class CharacterCodingException extends IOException
+ {
+   /**
+    * Creates the exception
+    */
+   public CharacterCodingException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/Charset.java gcc-4.1.0/libjava/classpath/java/nio/charset/Charset.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/Charset.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/Charset.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,399 ----
+ /* Charset.java -- 
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.nio.charset;
+ 
+ import gnu.classpath.ServiceFactory;
+ import gnu.classpath.SystemProperties;
+ import gnu.java.nio.charset.Provider;
+ import gnu.java.nio.charset.iconv.IconvProvider;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ import java.nio.charset.spi.CharsetProvider;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedHashSet;
+ import java.util.Locale;
+ import java.util.Set;
+ import java.util.SortedMap;
+ import java.util.TreeMap;
+ 
+ /**
+  * @author Jesse Rosenstock
+  * @since 1.4
+  * @status updated to 1.5
+  */
+ public abstract class Charset implements Comparable
+ {
+   private CharsetEncoder cachedEncoder;
+   private CharsetDecoder cachedDecoder;
+   
+   /**
+    * Extra Charset providers.
+    */
+   private static CharsetProvider[] providers;
+   
+   private final String canonicalName;
+   private final String[] aliases;
+   
+   protected Charset (String canonicalName, String[] aliases)
+   {
+     checkName (canonicalName);
+     if (aliases != null)
+       {
+         int n = aliases.length;
+         for (int i = 0; i < n; ++i)
+             checkName (aliases[i]);
+       }
+ 
+     cachedEncoder = null;
+     cachedDecoder = null;
+     this.canonicalName = canonicalName;
+     this.aliases = aliases;
+   }
+ 
+   /**
+    * @throws IllegalCharsetNameException  if the name is illegal
+    */
+   private static void checkName (String name)
+   {
+     int n = name.length ();
+ 
+     if (n == 0)
+       throw new IllegalCharsetNameException (name);
+ 
+     char ch = name.charAt (0);
+     if (!(('A' <= ch && ch <= 'Z')
+           || ('a' <= ch && ch <= 'z')
+           || ('0' <= ch && ch <= '9')))
+       throw new IllegalCharsetNameException (name);
+ 
+     for (int i = 1; i < n; ++i)
+       {
+         ch = name.charAt (i);
+         if (!(('A' <= ch && ch <= 'Z')
+               || ('a' <= ch && ch <= 'z')
+               || ('0' <= ch && ch <= '9')
+               || ch == '-' || ch == '.' || ch == ':' || ch == '_'))
+           throw new IllegalCharsetNameException (name);
+       }
+   }
+ 
+   /**
+    * Returns the system default charset.
+    *
+    * This may be set by the user or VM with the file.encoding
+    * property.
+    */
+   public static Charset defaultCharset()
+   {
+     String encoding;
+     
+     try 
+       {
+ 	encoding = SystemProperties.getProperty("file.encoding");
+       }
+     catch(SecurityException e)
+       {
+ 	// Use fallback.
+ 	encoding = "ISO-8859-1";
+       }
+     catch(IllegalArgumentException e)
+       {
+ 	// Use fallback.
+ 	encoding = "ISO-8859-1";
+       }
+ 
+     try
+       {
+ 	return forName(encoding);
+       }
+     catch(UnsupportedCharsetException e)
+       {
+ 	// Ignore.
+       }
+     catch(IllegalCharsetNameException e)
+       {
+ 	// Ignore.
+       }
+     catch(IllegalArgumentException e)
+       {
+ 	// Ignore.
+       }
+     
+     throw new IllegalStateException("Can't get default charset!");
+   }
+ 
+   public static boolean isSupported (String charsetName)
+   {
+     return charsetForName (charsetName) != null;
+   }
+ 
+   /**
+    * Returns the Charset instance for the charset of the given name.
+    * 
+    * @param charsetName
+    * @return the Charset instance for the indicated charset
+    * @throws UnsupportedCharsetException if this VM does not support
+    * the charset of the given name.
+    * @throws IllegalCharsetNameException if the given charset name is
+    * legal.
+    * @throws IllegalArgumentException if <code>charsetName</code> is null.
+    */
+   public static Charset forName (String charsetName)
+   {
+     // Throws IllegalArgumentException as the JDK does.
+     if(charsetName == null)
+         throw new IllegalArgumentException("Charset name must not be null.");
+     
+     Charset cs = charsetForName (charsetName);
+     if (cs == null)
+       throw new UnsupportedCharsetException (charsetName);
+     return cs;
+   }
+ 
+   /**
+    * Retrieves a charset for the given charset name.
+    *
+    * @return A charset object for the charset with the specified name, or
+    * <code>null</code> if no such charset exists.
+    *
+    * @throws IllegalCharsetNameException  if the name is illegal
+    */
+   private static Charset charsetForName(String charsetName)
+   {
+     checkName (charsetName);
+     // Try the default provider first
+     // (so we don't need to load external providers unless really necessary)
+     // if it is an exotic charset try loading the external providers.
+     Charset cs = provider().charsetForName(charsetName);
+     if (cs == null)
+       {
+ 	CharsetProvider[] providers = providers2();
+ 	for (int i = 0; i < providers.length; i++)
+ 	  {
+ 	    cs = providers[i].charsetForName(charsetName);
+ 	    if (cs != null)
+ 	      break;
+ 	  }
+       }
+     return cs;
+   }
+ 
+   public static SortedMap availableCharsets()
+   {
+     TreeMap charsets = new TreeMap(String.CASE_INSENSITIVE_ORDER);
+     for (Iterator i = provider().charsets(); i.hasNext(); )
+       {
+ 	Charset cs = (Charset) i.next();
+ 	charsets.put(cs.name(), cs);
+       }
+ 
+     CharsetProvider[] providers = providers2();
+     for (int j = 0; j < providers.length; j++)
+       {
+         for (Iterator i = providers[j].charsets(); i.hasNext(); )
+           {
+             Charset cs = (Charset) i.next();
+             charsets.put(cs.name(), cs);
+           }
+       }
+ 
+     return Collections.unmodifiableSortedMap(charsets);
+   }
+ 
+   private static CharsetProvider provider()
+   {
+     String useIconv = SystemProperties.getProperty
+       ("gnu.classpath.nio.charset.provider.iconv");
+ 
+     if (useIconv != null)
+       return IconvProvider.provider();
+ 
+     return Provider.provider();
+   }
+ 
+   /**
+    * We need to support multiple providers, reading them from
+    * java.nio.charset.spi.CharsetProvider in the resource directory
+    * META-INF/services. This returns the "extra" charset providers.
+    */
+   private static CharsetProvider[] providers2()
+   {
+     if (providers == null)
+       {
+         try
+           {
+             Iterator i = ServiceFactory.lookupProviders(CharsetProvider.class);
+             LinkedHashSet set = new LinkedHashSet();
+             while (i.hasNext())
+               set.add(i.next());
+ 
+             providers = new CharsetProvider[set.size()];
+             set.toArray(providers);
+           }
+         catch (Exception e)
+           {
+             throw new RuntimeException(e);
+           }
+       }
+     return providers;
+   }
+ 
+   public final String name ()
+   {
+     return canonicalName;
+   }
+ 
+   public final Set aliases ()
+   {
+     if (aliases == null)
+       return Collections.EMPTY_SET;
+ 
+     // should we cache the aliasSet instead?
+     int n = aliases.length;
+     HashSet aliasSet = new HashSet (n);
+     for (int i = 0; i < n; ++i)
+         aliasSet.add (aliases[i]);
+     return Collections.unmodifiableSet (aliasSet);
+   }
+ 
+   public String displayName ()
+   {
+     return canonicalName;
+   }
+ 
+   public String displayName (Locale locale)
+   {
+     return canonicalName;
+   }
+ 
+   public final boolean isRegistered ()
+   {
+     return (!canonicalName.startsWith ("x-")
+             && !canonicalName.startsWith ("X-"));
+   }
+ 
+   public abstract boolean contains (Charset cs);
+ 
+   public abstract CharsetDecoder newDecoder ();
+ 
+   public abstract CharsetEncoder newEncoder ();
+ 
+   public boolean canEncode ()
+   {
+     return true;
+   }
+ 
+   // NB: This implementation serializes different threads calling
+   // Charset.encode(), a potential performance problem.  It might
+   // be better to remove the cache, or use ThreadLocal to cache on
+   // a per-thread basis.
+   public final synchronized ByteBuffer encode (CharBuffer cb)
+   {
+     try
+       {
+ 	if (cachedEncoder == null)
+ 	  {
+ 	    cachedEncoder = newEncoder ()
+ 	      .onMalformedInput (CodingErrorAction.REPLACE)
+ 	      .onUnmappableCharacter (CodingErrorAction.REPLACE);
+ 	  } else
+ 	  cachedEncoder.reset();
+ 	return cachedEncoder.encode (cb);
+       }
+     catch (CharacterCodingException e)
+       {
+         throw new AssertionError (e);
+       }
+   }
+   
+   public final ByteBuffer encode (String str)
+   {
+     return encode (CharBuffer.wrap (str));
+   }
+ 
+   // NB: This implementation serializes different threads calling
+   // Charset.decode(), a potential performance problem.  It might
+   // be better to remove the cache, or use ThreadLocal to cache on
+   // a per-thread basis.
+   public final synchronized CharBuffer decode (ByteBuffer bb)
+   {
+     try
+       {
+ 	if (cachedDecoder == null)
+ 	  {
+ 	    cachedDecoder = newDecoder ()
+ 	      .onMalformedInput (CodingErrorAction.REPLACE)
+ 	      .onUnmappableCharacter (CodingErrorAction.REPLACE);
+ 	  } else
+ 	  cachedDecoder.reset();
+ 
+ 	return cachedDecoder.decode (bb);
+       }
+     catch (CharacterCodingException e)
+       {
+         throw new AssertionError (e);
+       }
+   }
+ 
+   public final int compareTo (Object ob)
+   {
+     return canonicalName.compareToIgnoreCase (((Charset) ob).canonicalName);
+   }
+ 
+   public final int hashCode ()
+   {
+     return canonicalName.hashCode ();
+   }
+ 
+   public final boolean equals (Object ob)
+   {
+     if (ob instanceof Charset)
+       return canonicalName.equalsIgnoreCase (((Charset) ob).canonicalName);
+     else
+       return false;
+   }
+ 
+   public final String toString ()
+   {
+     return canonicalName;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/CharsetDecoder.java gcc-4.1.0/libjava/classpath/java/nio/charset/CharsetDecoder.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/CharsetDecoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/CharsetDecoder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,317 ----
+ /* CharsetDecoder.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ 
+ /**
+  * @author Jesse Rosenstock
+  * @since 1.4
+  */
+ public abstract class CharsetDecoder
+ {
+   private static final int STATE_RESET   = 0;
+   private static final int STATE_CODING  = 1;
+   private static final int STATE_END     = 2;
+   private static final int STATE_FLUSHED = 3;
+ 
+   private static final String DEFAULT_REPLACEMENT = "\uFFFD";
+ 
+   private final Charset charset;
+   private final float averageCharsPerByte;
+   private final float maxCharsPerByte;
+   private String replacement;
+ 
+   private int state = STATE_RESET;
+ 
+   private CodingErrorAction malformedInputAction
+     = CodingErrorAction.REPORT;
+   private CodingErrorAction unmappableCharacterAction
+     = CodingErrorAction.REPORT;
+ 
+   private CharsetDecoder (Charset cs, float averageCharsPerByte,
+                           float maxCharsPerByte, String replacement)
+   {
+     if (averageCharsPerByte <= 0.0f)
+       throw new IllegalArgumentException ("Non-positive averageCharsPerByte");
+     if (maxCharsPerByte <= 0.0f)
+       throw new IllegalArgumentException ("Non-positive maxCharsPerByte");
+ 
+     this.charset = cs;
+     this.averageCharsPerByte
+       = averageCharsPerByte;
+     this.maxCharsPerByte
+       = maxCharsPerByte;
+     this.replacement = replacement;
+     implReplaceWith (replacement);
+   }
+ 
+   protected CharsetDecoder (Charset cs, float averageCharsPerByte,
+                             float maxCharsPerByte)
+   {
+     this (cs, averageCharsPerByte, maxCharsPerByte, DEFAULT_REPLACEMENT);
+   }
+ 
+   public final float averageCharsPerByte ()
+   {
+     return averageCharsPerByte;
+   }
+ 
+   public final Charset charset ()
+   {
+     return charset;
+   }
+ 
+   public final CharBuffer decode (ByteBuffer in)
+     throws CharacterCodingException
+   {
+     // XXX: Sun's Javadoc seems to contradict itself saying an
+     // IllegalStateException is thrown "if a decoding operation is already
+     // in progress" and also that "it resets this Decoder".
+     // Should we check to see that the state is reset, or should we
+     // call reset()?
+     if (state != STATE_RESET)
+       throw new IllegalStateException ();
+ 
+     // REVIEW: Using max instead of average may allocate a very large
+     // buffer.  Maybe we should do something more efficient?
+     int remaining = in.remaining ();
+     int n = (int) (remaining * maxCharsPerByte ());
+     CharBuffer out = CharBuffer.allocate (n);
+ 
+     if (remaining == 0)
+       {
+         state = STATE_FLUSHED;
+         return out;
+       }
+ 
+     CoderResult cr = decode (in, out, true);
+     if (cr.isError ())
+       cr.throwException ();
+ 
+     cr = flush (out);
+     if (cr.isError ())
+       cr.throwException ();
+ 
+     reset();
+     out.flip ();
+ 
+     // Unfortunately, resizing the actual charbuffer array is required.
+     char[] resized = new char[out.remaining()];
+     out.get(resized);
+     return CharBuffer.wrap(resized);
+   }
+ 
+   public final CoderResult decode (ByteBuffer in, CharBuffer out,
+                                    boolean endOfInput)
+   {
+     int newState = endOfInput ? STATE_END : STATE_CODING;
+     // XXX: Need to check for "previous step was an invocation [not] of
+     // this method with a value of true for the endOfInput parameter but
+     // a return value indicating an incomplete decoding operation"
+     // XXX: We will not check the previous return value, just
+     // that the previous call passed true for endOfInput
+     if (state != STATE_RESET && state != STATE_CODING
+         && !(endOfInput && state == STATE_END))
+       throw new IllegalStateException ();
+     state = newState;
+ 
+     for (;;)
+       {
+         CoderResult cr;
+         try
+           {
+             cr = decodeLoop (in, out);
+           }
+         catch (RuntimeException e)
+ 	  {
+             throw new CoderMalfunctionError (e);
+           }
+ 
+         if (cr.isOverflow ())
+           return cr;
+ 
+         if (cr.isUnderflow ())
+           {
+             if (endOfInput && in.hasRemaining ())
+               cr = CoderResult.malformedForLength (in.remaining ());
+             else
+               return cr;
+           }
+ 
+         CodingErrorAction action = cr.isMalformed ()
+                                      ? malformedInputAction
+                                      : unmappableCharacterAction;
+ 
+         if (action == CodingErrorAction.REPORT)
+           return cr;
+ 
+         if (action == CodingErrorAction.REPLACE)
+           {
+             if (out.remaining () < replacement.length ())
+               return CoderResult.OVERFLOW;
+             out.put (replacement);
+           }
+ 
+         in.position (in.position () + cr.length ());
+       }
+   }
+ 
+   protected abstract CoderResult decodeLoop (ByteBuffer in, CharBuffer out);
+ 
+   public Charset detectedCharset ()
+   {
+     throw new UnsupportedOperationException ();
+   }
+     
+   public final CoderResult flush (CharBuffer out)
+   {
+     // It seems weird that you can flush after reset, but Sun's javadoc
+     // says an IllegalStateException is thrown "If the previous step of the
+     // current decoding operation was an invocation neither of the reset
+     // method nor ... of the three-argument decode method with a value of
+     // true for the endOfInput parameter."
+     // Further note that flush() only requires that there not be
+     // an IllegalStateException if the previous step was a call to
+     // decode with true as the last argument.  It does not require
+     // that the call succeeded.  decode() does require that it succeeded.
+     // XXX: test this to see if reality matches javadoc
+     if (state != STATE_RESET && state != STATE_END)
+       throw new IllegalStateException ();
+ 
+     state = STATE_FLUSHED;
+     return implFlush (out);
+   }
+ 
+   protected CoderResult implFlush (CharBuffer out)
+   {
+     return CoderResult.UNDERFLOW;
+   }
+ 
+   public final CharsetDecoder onMalformedInput (CodingErrorAction newAction)
+   {
+     if (newAction == null)
+       throw new IllegalArgumentException ("Null action");
+ 
+     malformedInputAction = newAction;
+     implOnMalformedInput (newAction);
+     return this;
+   }
+ 
+   protected void implOnMalformedInput (CodingErrorAction newAction)
+   {
+     // default implementation does nothing
+   }
+ 
+   protected void implOnUnmappableCharacter (CodingErrorAction newAction)
+   {
+     // default implementation does nothing
+   }
+ 
+   protected void implReplaceWith (String newReplacement)
+   {
+     // default implementation does nothing
+   }
+ 
+   protected void implReset ()
+   {
+     // default implementation does nothing
+   }
+ 
+   public boolean isAutoDetecting ()
+   {
+     return false;
+   }
+ 
+   public boolean isCharsetDetected ()
+   {
+     throw new UnsupportedOperationException ();
+   }
+ 
+   public CodingErrorAction malformedInputAction ()
+   {
+     return malformedInputAction;
+   }
+ 
+   public final float maxCharsPerByte ()
+   {
+     return maxCharsPerByte;
+   }
+ 
+   public final CharsetDecoder onUnmappableCharacter
+     (CodingErrorAction newAction)
+   {
+     if (newAction == null)
+       throw new IllegalArgumentException ("Null action");
+ 
+     unmappableCharacterAction = newAction;
+     implOnUnmappableCharacter (newAction);
+     return this;
+   }
+ 
+   public final String replacement ()
+   {
+     return replacement;
+   }
+ 
+   public final CharsetDecoder replaceWith (String newReplacement)
+   {
+     if (newReplacement == null)
+       throw new IllegalArgumentException ("Null replacement");
+     if (newReplacement.length () == 0)
+       throw new IllegalArgumentException ("Empty replacement");
+     // XXX: what about maxCharsPerByte?
+ 
+     this.replacement = newReplacement;
+     implReplaceWith (newReplacement);
+     return this;
+   }
+ 
+   public final CharsetDecoder reset ()
+   {
+     state = STATE_RESET;
+     implReset ();
+     return this;
+   }
+ 
+   public CodingErrorAction unmappableCharacterAction ()
+   {
+     return unmappableCharacterAction;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/CharsetEncoder.java gcc-4.1.0/libjava/classpath/java/nio/charset/CharsetEncoder.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/CharsetEncoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/CharsetEncoder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,369 ----
+ /* CharsetEncoder.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ import java.nio.ByteBuffer;
+ import java.nio.CharBuffer;
+ 
+ /**
+  * @author Jesse Rosenstock
+  * @since 1.4
+  */
+ public abstract class CharsetEncoder
+ {
+   private static final int STATE_RESET   = 0;
+   private static final int STATE_CODING  = 1;
+   private static final int STATE_END     = 2;
+   private static final int STATE_FLUSHED = 3;
+   
+   private static final byte[] DEFAULT_REPLACEMENT = {(byte)'?'};
+ 
+   private final Charset charset;
+   private final float averageBytesPerChar;
+   private final float maxBytesPerChar;
+   private byte[] replacement;
+ 
+   private int state = STATE_RESET;
+ 
+   private CodingErrorAction malformedInputAction
+     = CodingErrorAction.REPORT;
+   private CodingErrorAction unmappableCharacterAction
+     = CodingErrorAction.REPORT;
+ 
+   protected CharsetEncoder (Charset cs, float averageBytesPerChar,
+                             float maxBytesPerChar)
+   {
+     this (cs, averageBytesPerChar, maxBytesPerChar, DEFAULT_REPLACEMENT);
+   }
+ 
+   protected CharsetEncoder (Charset cs, float averageBytesPerChar, 
+                             float maxBytesPerChar, byte[] replacement)
+   {
+     if (averageBytesPerChar <= 0.0f)
+       throw new IllegalArgumentException ("Non-positive averageBytesPerChar");
+     if (maxBytesPerChar <= 0.0f)
+       throw new IllegalArgumentException ("Non-positive maxBytesPerChar");
+ 
+     this.charset = cs;
+     this.averageBytesPerChar
+       = averageBytesPerChar;
+     this.maxBytesPerChar
+       = maxBytesPerChar;
+     this.replacement = replacement;
+     implReplaceWith (replacement);
+   }
+  
+   public final float averageBytesPerChar ()
+   {
+     return averageBytesPerChar;
+   }
+ 
+   public boolean canEncode (char c)
+   {
+     CharBuffer cb = CharBuffer.allocate (1).put (c);
+     cb.flip ();
+     return canEncode (cb);
+   }
+ 
+   public boolean canEncode (CharSequence cs)
+   {
+     CharBuffer cb;
+     if (cs instanceof CharBuffer)
+       cb = ((CharBuffer) cs).duplicate ();
+     else
+       cb = CharBuffer.wrap (cs);
+     return canEncode (cb);
+   }
+ 
+   private boolean canEncode (CharBuffer cb)
+   {
+     // It is an error if a coding operation is "in progress"
+     // I take that to mean the state is not reset or flushed.
+     // XXX: check "in progress" everywhere
+     if (state == STATE_FLUSHED)
+       reset ();
+     else if (state != STATE_RESET)
+       throw new IllegalStateException ();
+ 
+     CodingErrorAction oldMalformedInputAction = malformedInputAction;
+     CodingErrorAction oldUnmappableCharacterAction
+       = unmappableCharacterAction;
+ 
+     try
+       {
+         if (oldMalformedInputAction != CodingErrorAction.REPORT)
+           onMalformedInput (CodingErrorAction.REPORT);
+         if (oldUnmappableCharacterAction != CodingErrorAction.REPORT)
+           onUnmappableCharacter (CodingErrorAction.REPORT);
+       }
+     catch (Exception e)
+       {
+         return false;
+       }
+     finally
+       {
+         if (oldMalformedInputAction != CodingErrorAction.REPORT)
+           onMalformedInput (oldMalformedInputAction);
+         if (oldUnmappableCharacterAction != CodingErrorAction.REPORT)
+           onUnmappableCharacter (oldUnmappableCharacterAction);
+       }
+ 
+     return true;
+   }
+ 
+   public final Charset charset ()
+   {
+     return charset;
+   }
+ 
+   public final ByteBuffer encode (CharBuffer in)
+     throws CharacterCodingException
+   {
+     // XXX: Sun's Javadoc seems to contradict itself saying an
+     // IllegalStateException is thrown "if a decoding operation is already
+     // in progress" and also that "it resets this Encoder".
+     // Should we check to see that the state is reset, or should we
+     // call reset()?
+     if (state != STATE_RESET)
+       throw new IllegalStateException ();
+ 
+     // REVIEW: Using max instead of average may allocate a very large
+     // buffer.  Maybe we should do something more efficient?
+     int remaining = in.remaining ();
+     int n = (int) (remaining * maxBytesPerChar ());
+     ByteBuffer out = ByteBuffer.allocate (n);
+ 
+     if (remaining == 0)
+       {
+         state = STATE_FLUSHED;
+         return out;
+       }
+ 
+     CoderResult cr = encode (in, out, true);
+     if (cr.isError ())
+       cr.throwException ();
+ 
+     cr = flush (out);
+     if (cr.isError ())
+       cr.throwException ();
+ 
+     out.flip ();
+ 
+     // Unfortunately, resizing the actual bytebuffer array is required.
+     byte[] resized = new byte[out.remaining()];
+     out.get(resized);
+     return ByteBuffer.wrap(resized);
+   }
+ 
+   public final CoderResult encode (CharBuffer in, ByteBuffer out,
+                                    boolean endOfInput)
+   {
+     int newState = endOfInput ? STATE_END : STATE_CODING;
+     // XXX: Need to check for "previous step was an invocation [not] of
+     // this method with a value of true for the endOfInput parameter but
+     // a return value indicating an incomplete decoding operation"
+     // XXX: We will not check the previous return value, just
+     // that the previous call passed true for endOfInput
+     if (state != STATE_RESET && state != STATE_CODING
+         && !(endOfInput && state == STATE_END))
+       throw new IllegalStateException ();
+     state = newState;
+ 
+     for (;;)
+       {
+         CoderResult cr;
+         try
+           {
+             cr = encodeLoop (in, out);
+           }
+         catch (RuntimeException e)
+           {
+             throw new CoderMalfunctionError (e);
+           }
+ 
+         if (cr.isOverflow ())
+           return cr;
+ 
+         if (cr.isUnderflow ())
+           {
+             if (endOfInput && in.hasRemaining ())
+               cr = CoderResult.malformedForLength (in.remaining ());
+             else
+               return cr;
+           }
+ 
+         CodingErrorAction action = cr.isMalformed ()
+                                      ? malformedInputAction
+                                      : unmappableCharacterAction;
+ 
+         if (action == CodingErrorAction.REPORT)
+           return cr;
+ 
+         if (action == CodingErrorAction.REPLACE)
+           {
+             if (out.remaining () < replacement.length)
+               return CoderResult.OVERFLOW;
+             out.put (replacement);
+           }
+ 
+         in.position (in.position () + cr.length ());
+       }
+   }
+ 
+   protected abstract CoderResult encodeLoop (CharBuffer in, ByteBuffer out);
+ 
+   public final CoderResult flush (ByteBuffer out)
+   {
+     // It seems weird that you can flush after reset, but Sun's javadoc
+     // says an IllegalStateException is thrown "If the previous step of the
+     // current decoding operation was an invocation neither of the reset
+     // method nor ... of the three-argument encode method with a value of
+     // true for the endOfInput parameter."
+     // Further note that flush() only requires that there not be
+     // an IllegalStateException if the previous step was a call to
+     // encode with true as the last argument.  It does not require
+     // that the call succeeded.  encode() does require that it succeeded.
+     // XXX: test this to see if reality matches javadoc
+     if (state != STATE_RESET && state != STATE_END)
+       throw new IllegalStateException ();
+ 
+     state = STATE_FLUSHED;
+     return implFlush (out);
+   }
+ 
+   protected CoderResult implFlush (ByteBuffer out)
+   {
+     return CoderResult.UNDERFLOW;
+   }
+ 
+   protected void implOnMalformedInput (CodingErrorAction newAction)
+   {
+     // default implementation does nothing
+   }
+ 
+   protected void implOnUnmappableCharacter (CodingErrorAction newAction)
+   {
+     // default implementation does nothing
+   }
+ 
+   protected void implReplaceWith (byte[] newReplacement)
+   {
+     // default implementation does nothing
+   }
+ 
+   protected void implReset ()
+   {
+     // default implementation does nothing
+   }
+ 
+   public boolean isLegalReplacement (byte[] replacement)
+   {
+     // TODO: cache the decoder
+     // error actions will be REPORT after construction
+     CharsetDecoder decoder = charset.newDecoder ();
+     ByteBuffer bb = ByteBuffer.wrap (replacement);
+     CharBuffer cb
+       = CharBuffer.allocate ((int) (replacement.length
+                                     * decoder.maxCharsPerByte ()));
+     return !decoder.decode (bb, cb, true).isError ();
+   }
+ 
+   public CodingErrorAction malformedInputAction ()
+   {
+     return malformedInputAction;
+   }
+ 
+   public final float maxBytesPerChar ()
+   {
+     return maxBytesPerChar;
+   }
+ 
+   public final CharsetEncoder onMalformedInput (CodingErrorAction newAction)
+   {
+     if (newAction == null)
+       throw new IllegalArgumentException ("Null action");
+ 
+     malformedInputAction = newAction;
+     implOnMalformedInput (newAction);
+     return this;
+   }
+ 
+   public CodingErrorAction unmappableCharacterAction ()
+   {
+     return unmappableCharacterAction;
+   }
+ 
+   public final CharsetEncoder onUnmappableCharacter
+     (CodingErrorAction newAction)
+   {
+     if (newAction == null)
+       throw new IllegalArgumentException ("Null action");
+ 
+     unmappableCharacterAction = newAction;
+     implOnUnmappableCharacter (newAction);
+     return this;
+   }
+ 
+   public final byte[] replacement ()
+   {
+     return replacement;
+   }
+ 
+   public final CharsetEncoder replaceWith (byte[] newReplacement)
+   {
+     if (newReplacement == null)
+       throw new IllegalArgumentException ("Null replacement");
+     if (newReplacement.length == 0)
+       throw new IllegalArgumentException ("Empty replacement");
+     // XXX: what about maxBytesPerChar?
+ 
+       if (!isLegalReplacement (newReplacement))
+         throw new IllegalArgumentException ("Illegal replacement");
+ 
+     this.replacement = newReplacement;
+     implReplaceWith (newReplacement);
+     return this;
+   }
+ 
+   public final CharsetEncoder reset ()
+   {
+     state = STATE_RESET;
+     implReset ();
+     return this;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/CoderMalfunctionError.java gcc-4.1.0/libjava/classpath/java/nio/charset/CoderMalfunctionError.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/CoderMalfunctionError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/CoderMalfunctionError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* CoderMalfunctionError.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ /**
+  * @since 1.4
+  */
+ public class CoderMalfunctionError extends Error
+ {
+   /**
+    * Creates the error
+    */
+   public CoderMalfunctionError(Exception cause)
+   {
+     super (cause);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/CoderResult.java gcc-4.1.0/libjava/classpath/java/nio/charset/CoderResult.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/CoderResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/CoderResult.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,189 ----
+ /* CoderResult.java -- 
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ import java.lang.ref.WeakReference;
+ import java.nio.BufferOverflowException;
+ import java.nio.BufferUnderflowException;
+ import java.util.HashMap;
+ 
+ /**
+  * @author Jesse Rosenstock
+  * @since 1.4
+  */
+ public class CoderResult
+ { 
+   private static final int TYPE_MALFORMED  = 0;
+   private static final int TYPE_OVERFLOW   = 1;
+   private static final int TYPE_UNDERFLOW  = 2;
+   private static final int TYPE_UNMAPPABLE = 3;
+ 
+   public static final CoderResult OVERFLOW
+     = new CoderResult (TYPE_OVERFLOW, 0);
+   public static final CoderResult UNDERFLOW
+     = new CoderResult (TYPE_UNDERFLOW, 0);
+   
+   private static final String[] names
+     = { "MALFORMED", "OVERFLOW", "UNDERFLOW", "UNMAPPABLE" };
+ 
+   private static final Cache malformedCache
+     = new Cache ()
+       {
+         protected CoderResult make (int length)
+         {
+           return new CoderResult (TYPE_MALFORMED, length);
+         }
+       };
+ 
+   private static final Cache unmappableCache
+     = new Cache ()
+       {
+         protected CoderResult make (int length)
+         {
+           return new CoderResult (TYPE_UNMAPPABLE, length);
+         }
+       };
+ 
+   private final int type;
+   private final int length;
+ 
+   // Package-private to avoid a trampoline constructor.
+   CoderResult (int type, int length)
+   {
+     this.type = type;
+     this.length = length;
+   }
+ 
+   public boolean isError ()
+   {
+     return length > 0;
+   }
+ 
+   public boolean isMalformed ()
+   {
+     return type == TYPE_MALFORMED;
+   }
+ 
+   public boolean isOverflow ()
+   {
+     return type == TYPE_OVERFLOW;
+   }
+ 
+   public boolean isUnderflow ()
+   {
+     return type == TYPE_UNDERFLOW;
+   }
+ 
+   public boolean isUnmappable ()
+   {
+     return type == TYPE_UNMAPPABLE;
+   }
+ 
+   public int length ()
+   {
+     if (length <= 0)
+       throw new UnsupportedOperationException ();
+     else
+       return length;
+   }
+ 
+   public static CoderResult malformedForLength (int length)
+   {
+     return malformedCache.get (length);
+   }
+     
+   public void throwException ()
+     throws CharacterCodingException
+   {
+     switch (type)
+       {
+         case TYPE_MALFORMED:
+           throw new MalformedInputException (length);
+         case TYPE_OVERFLOW:
+           throw new BufferOverflowException ();
+         case TYPE_UNDERFLOW:
+           throw new BufferUnderflowException ();
+         case TYPE_UNMAPPABLE:
+           throw new UnmappableCharacterException (length);
+       }
+   }
+ 
+   public String toString ()
+   {
+     String name = names[type];
+     return (length > 0) ? name + '[' + length + ']' : name;
+   }
+ 
+   public static CoderResult unmappableForLength (int length)
+   {
+     return unmappableCache.get (length);
+   }    
+ 
+   private abstract static class Cache
+   {
+     private final HashMap cache;
+ 
+     // Package-private to avoid a trampoline constructor.
+     Cache ()
+     {
+       cache = new HashMap ();
+     }
+ 
+     // Package-private to avoid a trampoline.
+     synchronized CoderResult get (int length)
+     {
+       if (length <= 0)
+         throw new IllegalArgumentException ("Non-positive length");
+ 
+       Integer len = new Integer (length);
+       CoderResult cr = null;
+       Object o;
+       if ((o = cache.get (len)) != null)
+         cr = (CoderResult) ((WeakReference) o).get ();
+       if (cr == null)
+         {
+           cr = make (length);
+           cache.put (len, new WeakReference (cr));
+         }
+ 
+       return cr;
+     }
+ 
+     protected abstract CoderResult make (int length);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/CodingErrorAction.java gcc-4.1.0/libjava/classpath/java/nio/charset/CodingErrorAction.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/CodingErrorAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/CodingErrorAction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,66 ----
+ /* CodingErrorAction.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ public class CodingErrorAction
+ {
+   public static final CodingErrorAction IGNORE
+ 	  = new CodingErrorAction("ignore");
+   public static final CodingErrorAction REPLACE
+ 	  = new CodingErrorAction("replace");
+   public static final CodingErrorAction REPORT
+ 	  = new CodingErrorAction("report");
+ 
+   private final String name;
+ 
+   /**
+    * Private constructor only used to create the constant CodingErrorActions.
+    */
+   private CodingErrorAction(String name)
+   {
+     this.name = name;
+   }
+ 
+   /**
+    * Returns the name of the CodingErrorAction.
+    */
+   public String toString ()
+   {
+     return name;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/IllegalCharsetNameException.java gcc-4.1.0/libjava/classpath/java/nio/charset/IllegalCharsetNameException.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/IllegalCharsetNameException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/IllegalCharsetNameException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* IllegalCharsetNameException.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class IllegalCharsetNameException extends IllegalArgumentException
+ {
+   /**
+    * Compatible with JDK 1.4+
+    */
+   private static final long serialVersionUID = 1457525358470002989L;
+   
+   private String charsetName;
+   
+   /**
+    * Creates the exception
+    *
+    * @param charsetName name of the illegal charset
+    */
+   public IllegalCharsetNameException (String charsetName)
+   {
+     super ();
+     this.charsetName = charsetName;
+   }
+ 
+   /**
+    * Retrieves the illegal charset name
+    *
+    * @return the illegal charset name
+    */
+   public String getCharsetName ()
+   {
+     return charsetName;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/MalformedInputException.java gcc-4.1.0/libjava/classpath/java/nio/charset/MalformedInputException.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/MalformedInputException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/MalformedInputException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* MalformedInputException.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ /**
+  * @since 1.4
+  */
+ public class MalformedInputException extends CharacterCodingException
+ {
+   private int inputLength;
+   
+   /**
+    * Creates the exception
+    *
+    * @param inputLength the position of malformed input in the input stream
+    */
+   public MalformedInputException (int inputLength)
+   {
+     super ();
+     this.inputLength = inputLength;
+   }
+ 
+   /**
+    * Retrieves the position of the malformed input in the input stream.
+    *
+    * @return the position
+    */
+   public int getInputLength ()
+   {
+     return inputLength;
+   }
+ 
+   /**
+    * Returns the detail message string of this throwable
+    *
+    * @return the message
+    */
+   public String getMessage ()
+   {
+     return "Input length = " + inputLength;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/UnmappableCharacterException.java gcc-4.1.0/libjava/classpath/java/nio/charset/UnmappableCharacterException.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/UnmappableCharacterException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/UnmappableCharacterException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* UnmappableCharacterException.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ /**
+  * @since 1.4
+  */
+ public class UnmappableCharacterException extends CharacterCodingException
+ {
+   private int inputLength;
+   
+   /**
+    * Creates the exception
+    */
+   public UnmappableCharacterException (int inputLength)
+   {
+     super ();
+     this.inputLength = inputLength;
+   }
+ 
+   /**
+    * Retrieves the illegal charset name
+    */
+   public int getInputLength ()
+   {
+     return inputLength;
+   }
+ 
+   /**
+    * Returns the detail message string of this throwable
+    */
+   public String getMessage ()
+   {
+     return "Input length = " + inputLength;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/UnsupportedCharsetException.java gcc-4.1.0/libjava/classpath/java/nio/charset/UnsupportedCharsetException.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/UnsupportedCharsetException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/UnsupportedCharsetException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* UnsupportedCharsetException.java -- 
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public class UnsupportedCharsetException extends IllegalArgumentException
+ {
+   /**
+    * Compatible with JDK 1.4+
+    */
+   private static final long serialVersionUID = 1490765524727386367L;
+   
+   String charsetName;
+   
+   /**
+    * Creates the exception
+    */
+   public UnsupportedCharsetException (String charsetName)
+   {
+     super ();
+     this.charsetName = charsetName;
+   }
+ 
+   /**
+    * Retrieves the illegal charset name
+    */
+   public String getCharsetName ()
+   {
+     return charsetName;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/package.html gcc-4.1.0/libjava/classpath/java/nio/charset/package.html
*** gcc-4.0.2/libjava/classpath/java/nio/charset/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.nio.charset package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.nio.charset</title></head>
+ 
+ <body>
+ <p>Classes to manipulate, encode and decode different character sets from
+ and to bytes.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/spi/CharsetProvider.java gcc-4.1.0/libjava/classpath/java/nio/charset/spi/CharsetProvider.java
*** gcc-4.0.2/libjava/classpath/java/nio/charset/spi/CharsetProvider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/spi/CharsetProvider.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* CharsetProvider.java -- charset service provider interface
+    Copyright (C) 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.nio.charset.spi;
+ 
+ import java.nio.charset.Charset;
+ import java.util.Iterator;
+ 
+ 
+ /**
+  * This class allows an implementor to provide additional character sets. The
+  * subclass must have a nullary constructor, and be attached to charset
+  * implementation classes. These extensions are loaded via the context class
+  * loader. To provide the charset extension, all files named
+  * <code>META-INF/services/java.nio.charset.spi.CharsetProvider</code> are
+  * read from the classpath. Each one should be a UTF-8 encoded list of
+  * fully-qualified names of concrete subclasses of this class; whitespace is
+  * ignored, and '#' starts comments. Duplicates are ignored. The
+  * implementations must be accessible to the classloader that requests them.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Charset
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public abstract class CharsetProvider
+ {
+   /**
+    * Initialize a new charset provider. This performs a security check on
+    * RuntimePermission("charsetProvider").
+    *
+    * @throws SecurityException if building a new set is not allowed
+    */
+   protected CharsetProvider()
+   {
+     SecurityManager s = System.getSecurityManager();
+     if (s != null)
+       s.checkPermission(new RuntimePermission("charsetProvider"));
+   }
+ 
+   /**
+    * Returns an iterator over the charsets defined by this provider.
+    *
+    * @return the iterator
+    * @see Charset#availableCharsets()
+    */
+   public abstract Iterator charsets();
+ 
+   /**
+    * Returns the named charset, by canonical name or alias.
+    *
+    * @param name the name of the character
+    *
+    * @return the charset, or null if not supported
+    */
+   public abstract Charset charsetForName(String name);
+ } // class CharsetProvider
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/charset/spi/package.html gcc-4.1.0/libjava/classpath/java/nio/charset/spi/package.html
*** gcc-4.0.2/libjava/classpath/java/nio/charset/spi/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/charset/spi/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.nio.charset.spi package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.nio.charset.spi</title></head>
+ 
+ <body>
+ <p>Classes to provide new character sets.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/class-dependencies.conf gcc-4.1.0/libjava/classpath/java/nio/class-dependencies.conf
*** gcc-4.0.2/libjava/classpath/java/nio/class-dependencies.conf	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/class-dependencies.conf	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ # This property file contains dependencies of classes, methods, and
+ # field on other methods or classes.
+ #
+ # Syntax: 
+ #
+ #   <used>: <needed 1> [... <needed N>]
+ #
+ # means that when <used> is included, <needed 1> (... <needed N>) must
+ # be included as well.
+ #
+ # <needed X> and <used> are of the form
+ #
+ #   <class.methodOrField(signature)>
+ #
+ # or just
+ #
+ #   <class>
+ #
+ # Within dependencies, variables can be used. A variable is defined as 
+ # follows: 
+ #
+ #   {variable}: value1 value2 ... value<n>
+ #
+ # variables can be used on the right side of dependencies as follows: 
+ #
+ #    <used>: com.bla.blu.{variable}.Class.m()V
+ #
+ # The use of the variable will expand to <n> dependencies of the form
+ #
+ #    <used>: com.bla.blu.value1.Class.m()V
+ #    <used>: com.bla.blu.value2.Class.m()V
+ #    ...
+ #    <used>: com.bla.blu.value<n>.Class.m()V
+ #
+ # Variables can be redefined when building a system to select the 
+ # required support for features like encodings, protocols, etc. 
+ #
+ # Hints:
+ #
+ #  - For methods and fields, the signature is mandatory. For
+ #    specification, please see the Java Virtual Machine Specification by
+ #    SUN. Unlike in the spec, field signatures (types) are in brackets.
+ #
+ #  - Package names must be separated by '/' (and not '.'). E.g.,
+ #    java/lang/Class (this is necessary, because the '.' is used to
+ #    separate method or field names from classes)
+ #
+ #  - In case <needed> refers to a class, only the class itself will be
+ #    included in the resulting binary, NOT necessarily all its methods
+ #    and fields. If you want to refer to all methods and fields, you can
+ #    write class.* as an abbreviation.
+ #
+ # -  Abbreviations for packages are also possible: my/package/* means all
+ #    methods and fields of all classes in my/package.
+ #
+ # -  A line with a trailing '\' continues in the next line.
+ 
+ # end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/nio/package.html gcc-4.1.0/libjava/classpath/java/nio/package.html
*** gcc-4.0.2/libjava/classpath/java/nio/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/nio/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.nio package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.nio</title></head>
+ 
+ <body>
+ <p>Abstract classes for manipulating buffers of different primitive types.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/AccessException.java gcc-4.1.0/libjava/classpath/java/rmi/AccessException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/AccessException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/AccessException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* AccessException.java -- thrown if the caller does not have access
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown to indicate that the caller does not have permission to access
+  * certain data, such as <code>bind</code> in an ActivationSystem.
+  *
+  * @author unknown
+  * @see Naming
+  * @see ActivationSystem
+  * @since 1.1
+  */
+ public class AccessException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 6314925228044966088l;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public AccessException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public AccessException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/AlreadyBoundException.java gcc-4.1.0/libjava/classpath/java/rmi/AlreadyBoundException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/AlreadyBoundException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/AlreadyBoundException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* AlreadyBoundException.java -- thrown if a binding is already bound
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown on an attempt to bind an object in the registry that is already
+  * bound.
+  *
+  * @author unknown
+  * @see Naming#bind(String, Remote)
+  * @see Registry#bind(String, Remote)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class AlreadyBoundException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 9218657361741657110L;
+ 
+   /**
+    * Create an exception with no message.
+    */
+   public AlreadyBoundException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public AlreadyBoundException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/ConnectException.java gcc-4.1.0/libjava/classpath/java/rmi/ConnectException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/ConnectException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/ConnectException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* ConnectException.java -- thrown if a connection is refused
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown if a connection is refused for a remote call.
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ConnectException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 4863550261346652506L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ConnectException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public ConnectException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/ConnectIOException.java gcc-4.1.0/libjava/classpath/java/rmi/ConnectIOException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/ConnectIOException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/ConnectIOException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* ConnectIOException.java -- thrown if an IO exception occurs during connect
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Wraps an I/O Exception thrown while connecting for a remote call.
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ConnectIOException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -8087809532704668744L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ConnectIOException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public ConnectIOException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/MarshalException.java gcc-4.1.0/libjava/classpath/java/rmi/MarshalException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/MarshalException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/MarshalException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* MarshalException.java -- wraps error while marshalling parameters
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown if an exception occurs while marshalling data to send in a remote
+  * call. The call may not be retransmitted, if the "at most once" semantics
+  * are to be preserved.
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class MarshalException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 6223554758134037936L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public MarshalException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public MarshalException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/MarshalledObject.java gcc-4.1.0/libjava/classpath/java/rmi/MarshalledObject.java
*** gcc-4.0.2/libjava/classpath/java/rmi/MarshalledObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/MarshalledObject.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* MarshalledObject.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi;
+ 
+ import gnu.java.rmi.RMIMarshalledObjectInputStream;
+ import gnu.java.rmi.RMIMarshalledObjectOutputStream;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * FIXME - doc missing
+  */
+ public final class MarshalledObject implements Serializable 
+ {
+   //The following fields are from Java API Documentation "Serialized form"
+   private static final long serialVersionUID = 8988374069173025854L;
+   byte[] objBytes;
+   byte[] locBytes;
+   int hash;
+   
+   public MarshalledObject(Object obj) throws java.io.IOException
+   {
+     ByteArrayOutputStream objStream = new ByteArrayOutputStream();
+     RMIMarshalledObjectOutputStream stream = new RMIMarshalledObjectOutputStream(objStream);
+     stream.writeObject(obj);
+     stream.flush();
+     objBytes = objStream.toByteArray();
+     locBytes = stream.getLocBytes();
+     
+     //The following algorithm of calculating hashCode is similar to String
+     hash = 0;
+     for (int i = 0; i < objBytes.length; i++)
+       hash = hash * 31 + objBytes[i];
+     if(locBytes != null)
+       for (int i = 0; i < locBytes.length; i++)
+ 	hash = hash * 31 + locBytes[i];
+   }
+   
+   public boolean equals(Object obj) 
+   {
+     if (! (obj instanceof MarshalledObject))
+       return false;
+ 
+     // hashCode even differs, don't do the time-consuming comparisons
+     if (obj.hashCode() != hash)
+       return false;
+     
+     MarshalledObject aobj = (MarshalledObject)obj;
+     if (objBytes == null || aobj.objBytes == null)
+       return objBytes == aobj.objBytes;
+     if (objBytes.length != aobj.objBytes.length)
+       return false;
+     for (int i = 0; i < objBytes.length; i++) 
+       {
+ 	if (objBytes[i] != aobj.objBytes[i])
+ 	  return false;
+       }
+     // Ignore comparison of locBytes(annotation)
+     return true;
+   }
+   
+ public Object get() 
+   throws java.io.IOException, java.lang.ClassNotFoundException
+ {
+   if(objBytes == null)
+     return null;
+   RMIMarshalledObjectInputStream stream = 
+     new RMIMarshalledObjectInputStream(objBytes, locBytes);
+   return stream.readObject();
+ }
+   
+   public int hashCode() {
+     return hash;
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/Naming.java gcc-4.1.0/libjava/classpath/java/rmi/Naming.java
*** gcc-4.0.2/libjava/classpath/java/rmi/Naming.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/Naming.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,220 ----
+ /* Naming.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi;
+ 
+ import java.net.MalformedURLException;
+ import java.net.URI;
+ import java.net.URISyntaxException;
+ import java.net.URL;
+ import java.rmi.registry.LocateRegistry;
+ import java.rmi.registry.Registry;
+ 
+ /**
+  * <p>
+  * The <code>Naming</code> class handles interactions with RMI registries.
+  * Each method takes a URL in <code>String</code> form, which points to
+  * the RMI registry.  The scheme of the URL is irrelevant.  The relevant
+  * part is:
+  * </p>
+  * <p>
+  * <code>//host:port/name</code>
+  * </p>
+  * <p>
+  * which tells the method how to locate and access the registry.  The host
+  * and port are both optional, and default to `localhost' and the standard
+  * RMI registry port (1099) respectively.  The name is simply a string
+  * used to refer to a particular service hosted by the registry.  The
+  * registry does not attempt to interpret this further.
+  * </p>
+  * <p>
+  * RMI services are registered using one of these names, and the same name
+  * is later used by the client to lookup the service and access its methods. 
+  * Registries can be shared by multiple services, or a service can create
+  * its own registry using <code>createRegistry()</code>.
+  * </p>
+  *
+  * @author Original author unknown.
+  * @author Ingo Proetel (proetel@aicas.com)
+  * @author Guilhem Lavaux (guilhem@kaffe.org)
+  * @author Jeroen Frijters (jeroen@frijters.net)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.1
+  */
+ public final class Naming {
+ 
+   /**
+    * This class isn't intended to be instantiated.
+    */
+   private Naming() {}
+ 
+ /**
+  * Looks for the remote object that is associated with the named service.
+  * Name and location is given in form of a URL without a scheme:
+  *
+  * <pre>
+  * //host:port/service-name
+  * </pre>
+  *  
+  * The port is optional.
+  * 
+  * @param name the service name and location
+  * @return Remote-object that implements the named service
+  * @throws NotBoundException if no object implements the service
+  * @throws MalformedURLException 
+  * @throws RemoteException
+  */
+ public static Remote lookup(String name) throws NotBoundException, MalformedURLException, RemoteException {
+         URL u = parseURL(name);
+ 	String serviceName = getName(u);
+ 	return (getRegistry(u).lookup(serviceName));
+ }
+ 
+ /**
+  * Try to bind the given object to the given service name. 
+  * @param name
+  * @param obj
+  * @throws AlreadyBoundException
+  * @throws MalformedURLException
+  * @throws RemoteException
+  */
+ public static void bind(String name, Remote obj) throws AlreadyBoundException, MalformedURLException, RemoteException {
+         URL u = parseURL(name);
+ 	String serviceName = getName(u);
+ 	getRegistry(u).bind(serviceName, obj);
+ }
+ 
+ /**
+  * Remove a binding for a given service name.
+  * @param name
+  * @throws RemoteException
+  * @throws NotBoundException
+  * @throws MalformedURLException
+  */
+ public static void unbind(String name) throws RemoteException, NotBoundException, MalformedURLException {
+         URL u = parseURL(name);
+ 	String serviceName = getName(u);
+ 	getRegistry(u).unbind(serviceName);
+ }
+ 
+ /**
+  * Forces the binding between the given Remote-object and the given service name, even 
+  * if there was already an object bound to this name. 
+  * @param name
+  * @param obj
+  * @throws RemoteException
+  * @throws MalformedURLException
+  */
+ public static void rebind(String name, Remote obj) throws RemoteException, MalformedURLException {
+         URL u = parseURL(name);
+ 	String serviceName = getName(u);
+ 	getRegistry(u).rebind(serviceName, obj);
+ }
+ 
+ /**
+  * Lists all services at the named registry.
+  * @param name url that specifies the registry
+  * @return list of services at the name registry
+  * @throws RemoteException
+  * @throws MalformedURLException
+  */
+ public static String[] list(String name) throws RemoteException, MalformedURLException {
+ 	return (getRegistry(parseURL(name)).list());
+ }
+ 
+ private static Registry getRegistry(URL u) throws RemoteException {
+ 	if (u.getPort() == -1) {
+ 		return (LocateRegistry.getRegistry(u.getHost()));
+ 	}
+ 	else {
+ 		return (LocateRegistry.getRegistry(u.getHost(), u.getPort()));
+ 	}
+ }
+ 
+   /**
+    * Parses the supplied URL and converts it to use the HTTP
+    * protocol.  From an RMI perspective, the scheme is irrelevant
+    * and we want to be able to create a URL for which a handler is
+    * available.
+    *
+    * @param name the URL in String form.
+    * @throws MalformedURLException if the URL is invalid.
+    */
+   private static URL parseURL(String name)
+     throws MalformedURLException
+   {
+     try
+       {
+ 	URI uri = new URI(name);
+ 	String host = uri.getHost();
+ 	int port = uri.getPort();
+ 	String query = uri.getQuery();
+ 	String path = uri.getPath();
+ 	return new URL("http", 
+ 		       (host == null ? "localhost" : host),
+ 		       (port == -1 ? 1099 : port),
+ 		       uri.getPath() + (query == null ? "" : query));
+       }
+     catch (URISyntaxException e)
+       {
+ 	throw new MalformedURLException("The URL syntax was invalid: " + 
+ 					e.getMessage());
+       }
+   }
+ 
+   /**
+    * Checks that the URL contains a name, and removes any leading
+    * slashes.
+    *
+    * @param url the URL to check.
+    * @throws MalformedURLException if no name is specified.
+    */ 
+   private static String getName(URL url)
+     throws MalformedURLException
+   {
+     String filename = url.getFile();
+     if (filename.length() == 0)
+       throw new MalformedURLException("No path specified: " + url);
+     // If the filename begins with a slash we must cut it for
+     // name resolution.
+     if (filename.charAt(0) == '/')
+       return filename.substring(1);
+     return filename;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/NoSuchObjectException.java gcc-4.1.0/libjava/classpath/java/rmi/NoSuchObjectException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/NoSuchObjectException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/NoSuchObjectException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /* NoSuchObjectException.java -- thrown if the remote object no longer exists
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown on an attempt to invoke a call on an object that no longer exists
+  * in the remote Virtual Machine. The call may be retransmitted and still
+  * obey the semantics of "at most once".
+  *
+  * @author unknown
+  * @see RemoteObject#toStub(Remote)
+  * @see UnicastRemoteObject#unexportObject(Remote, boolean)
+  * @see Activatable#unexportObject(Remote, boolean)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class NoSuchObjectException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 6619395951570472985L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public NoSuchObjectException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/NotBoundException.java gcc-4.1.0/libjava/classpath/java/rmi/NotBoundException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/NotBoundException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/NotBoundException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* NotBoundException.java -- attempt to use a registry name with no binding
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown on an attempt to lookup or unbind a registry name that has no
+  * associated binding.
+  *
+  * @author unknown
+  * @see Naming#lookup(String)
+  * @see Naming#unbind(String)
+  * @see Registry#lookup(String)
+  * @see Registry#unbind(String)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class NotBoundException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -1857741824849069317l;
+ 
+   /**
+    * Create an exception with no message.
+    */
+   public NotBoundException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public NotBoundException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/RMISecurityException.java gcc-4.1.0/libjava/classpath/java/rmi/RMISecurityException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/RMISecurityException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/RMISecurityException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* RMISecurityException.java -- deprecated version of SecurityException
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Never thrown, but originally intended to wrap a java.lang.SecurityException.
+  *
+  * @author unknown
+  * @since 1.1
+  * @deprecated use {@link SecurityException} instead
+  * @status updated to 1.4
+  */
+ public class RMISecurityException extends SecurityException
+ {
+   /**
+    * Compatible with JDK 1.1.
+    */
+   private static final long serialVersionUID = -8433406075740433514L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    * @deprecated no longer needed
+    */
+   public RMISecurityException(String n)
+   {
+     super(n);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    * @deprecated no longer needed
+    */
+   public RMISecurityException(String n, String a)
+   {
+     super(n);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/RMISecurityManager.java gcc-4.1.0/libjava/classpath/java/rmi/RMISecurityManager.java
*** gcc-4.0.2/libjava/classpath/java/rmi/RMISecurityManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/RMISecurityManager.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,48 ----
+ /* RMISecurityManager.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * @since 1.1
+  */
+ public class RMISecurityManager extends SecurityManager
+ {
+   public RMISecurityManager()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/Remote.java gcc-4.1.0/libjava/classpath/java/rmi/Remote.java
*** gcc-4.0.2/libjava/classpath/java/rmi/Remote.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/Remote.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,41 ----
+ /* Remote.java
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ public interface Remote {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/RemoteException.java gcc-4.1.0/libjava/classpath/java/rmi/RemoteException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/RemoteException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/RemoteException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,127 ----
+ /* RemoteException.java -- common superclass for exceptions in java.rmi
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * The superclass of exceptions related to RMI (remote method invocation).
+  * Classes that implement <code>java.rmi.Remote</code> should list this
+  * exception in their throws clause.
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class RemoteException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -5148567311918794206l;
+ 
+   /**
+    * The cause of this exception. This pre-dates the exception chaining
+    * of Throwable; and although you can change this field, you are wiser
+    * to leave it alone.
+    *
+    * @serial the exception cause
+    */
+   public Throwable detail;
+ 
+   /**
+    * Create an exception with no message, and cause initialized to null.
+    */
+   public RemoteException()
+   {
+     this(null, null);
+   }
+ 
+   /**
+    * Create an exception with the given message, and cause initialized to null.
+    *
+    * @param s the message
+    */
+   public RemoteException(String s)
+   {
+     this(s, null);
+   }
+ 
+   /**
+    * Create an exception with the given message and cause.
+    *
+    * @param s the message
+    * @param ex the cause
+    */
+   public RemoteException(String s, Throwable e)
+   {
+     super(s);
+     initCause(e);
+     detail = e;
+   }
+ 
+   /**
+    * This method returns a message indicating what went wrong, in this
+    * format:
+    * <code>super.getMessage() + (detail == null ? ""
+    *    : "; nested exception is:\n\t" + detail)</code>.
+    *
+    * @return the chained message
+    */
+   public String getMessage()
+   {
+     if (detail == this || detail == null)
+       return super.getMessage();
+     return super.getMessage() + "; nested exception is:\n\t" + detail;
+   }
+ 
+   /**
+    * Returns the cause of this exception. Note that this may not be the
+    * original cause, thanks to the <code>detail</code> field being public
+    * and non-final (yuck). However, to avoid violating the contract of
+    * Throwable.getCause(), this returns null if <code>detail == this</code>,
+    * as no exception can be its own cause.
+    *
+    * @return the cause
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return detail == this ? null : detail;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/ServerError.java gcc-4.1.0/libjava/classpath/java/rmi/ServerError.java
*** gcc-4.0.2/libjava/classpath/java/rmi/ServerError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/ServerError.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* ServerError.java -- wraps an error while creating the server
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Wraps any error thrown while processing the server of a remote call.
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ServerError extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 8455284893909696482L;
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public ServerError(String s, Error e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/ServerException.java gcc-4.1.0/libjava/classpath/java/rmi/ServerException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/ServerException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/ServerException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* ServerException.java -- wraps an exception while creating the server
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Wraps any exception thrown while processing the server of a remote call.
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ServerException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -4775845313121906682l;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ServerException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public ServerException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/ServerRuntimeException.java gcc-4.1.0/libjava/classpath/java/rmi/ServerRuntimeException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/ServerRuntimeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/ServerRuntimeException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* ServerRuntimeException.java -- wraps an exception while creating the server
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Wraps any runtime exception thrown while processing the server of a
+  * remote call. Note, this exception is no longer used.
+  *
+  * @author unknown
+  * @since 1.1
+  * @deprecated no replacement
+  * @status updated to 1.4
+  */
+ public class ServerRuntimeException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1.
+    */
+   private static final long serialVersionUID = 7054464920481467219L;
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    * @deprecated no longer needed
+    */
+   public ServerRuntimeException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/StubNotFoundException.java gcc-4.1.0/libjava/classpath/java/rmi/StubNotFoundException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/StubNotFoundException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/StubNotFoundException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* StubNotFoundException.java -- thrown if a valid stub is not found
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown if a valid stub class is not found for an object when it is exported.
+  *
+  * @author unknown
+  * @see UnicastRemoteObject
+  * @see Activatable
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class StubNotFoundException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -7088199405468872373L;
+ 
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public StubNotFoundException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public StubNotFoundException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/UnexpectedException.java gcc-4.1.0/libjava/classpath/java/rmi/UnexpectedException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/UnexpectedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/UnexpectedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* UnexpectedException.java -- an unexpected checked exception was received
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown if an unexpected checked exception was received in a remote
+  * procedure call.
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class UnexpectedException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 1800467484195073863L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public UnexpectedException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public UnexpectedException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/UnknownHostException.java gcc-4.1.0/libjava/classpath/java/rmi/UnknownHostException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/UnknownHostException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/UnknownHostException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* UnknownHostException.java -- wraps java.net.UnknownHostException in RMI
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown if a java.net.UnknownHostException occurs during a remote
+  * procedure call.
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class UnknownHostException extends RemoteException 
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -8152710247442114228L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public UnknownHostException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public UnknownHostException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/UnmarshalException.java gcc-4.1.0/libjava/classpath/java/rmi/UnmarshalException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/UnmarshalException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/UnmarshalException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* UnmarshalException.java -- wraps error while unmarshalling parameters
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi;
+ 
+ /**
+  * Thrown if an exception occurs while unmarshalling parameters or results
+  * of a remote method call. This includes:<br><ul>
+  * <li>if an exception occurs while unmarshalling the call header</li>
+  * <li>if the protocol for the return value is invalid</li>
+  * <li>if a java.io.IOException occurs unmarshalling parameters (on the
+  *   server side) or the return value (on the client side).</li>
+  * <li>if a java.lang.ClassNotFoundException occurs during unmarshalling
+  *   parameters or return values</li>
+  * <li>if no skeleton can be loaded on the server-side; note that skeletons
+  *   are required in the 1.1 stub protocol, but not in the 1.2 stub
+  *   protocol.</li>
+  * <li>if the method hash is invalid (i.e., missing method).</li>
+  * <li>if there is a failure to create a remote reference object for a remote
+  *   object's stub when it is unmarshalled.</li>
+  * </ul>
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class UnmarshalException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 594380845140740218l;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public UnmarshalException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public UnmarshalException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/Activatable.java gcc-4.1.0/libjava/classpath/java/rmi/activation/Activatable.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/Activatable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/Activatable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,105 ----
+ /* Activatable.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.activation;
+ 
+ import java.rmi.MarshalledObject;
+ import java.rmi.NoSuchObjectException;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.server.RMIClientSocketFactory;
+ import java.rmi.server.RMIServerSocketFactory;
+ import java.rmi.server.RemoteServer;
+ 
+ public abstract class Activatable extends RemoteServer
+ {
+ static final long serialVersionUID = -3120617863591563455L;
+ 
+ protected Activatable(String location, MarshalledObject data, boolean restart, int port) throws ActivationException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ protected Activatable(String location, MarshalledObject data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ protected Activatable(ActivationID id, int port) throws RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ protected Activatable(ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ protected ActivationID getID() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static Remote register(ActivationDesc desc) throws UnknownGroupException, ActivationException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static boolean inactive(ActivationID id) throws UnknownObjectException, ActivationException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static void unregister(ActivationID id) throws UnknownObjectException, ActivationException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static ActivationID exportObject(Remote obj, String location, MarshalledObject data, boolean restart, int port) throws ActivationException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static ActivationID exportObject(Remote obj, String location, MarshalledObject data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static Remote exportObject(Remote obj, ActivationID id, int port) throws RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static Remote exportObject(Remote obj, ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static boolean unexportObject(Remote obj, boolean force) throws NoSuchObjectException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivateFailedException.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivateFailedException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivateFailedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivateFailedException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* ActivateFailedException.java -- thrown when activation fails
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.activation;
+ 
+ import java.rmi.RemoteException;
+ 
+ /**
+  * Thrown when activation fails on a remote call to an activatable object.
+  *
+  * @author unknown
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class ActivateFailedException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 4863550261346652506L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ActivateFailedException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param ex the cause
+    */
+   public ActivateFailedException(String s, Exception ex)
+   {
+     super(s, ex);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationDesc.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationDesc.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationDesc.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationDesc.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* ActivationDecc.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.activation;
+ 
+ import java.io.Serializable;
+ import java.rmi.MarshalledObject;
+ 
+ public final class ActivationDesc implements Serializable
+ {
+   static final long serialVersionUID = 7455834104417690957L;
+ 
+ private ActivationGroupID groupid;
+ private String classname;
+ private String location;
+ private MarshalledObject data;
+ private boolean restart;
+ 
+ public ActivationDesc(String className, String location, MarshalledObject data) throws ActivationException {
+ 	this(ActivationGroup.currentGroupID(), className, location, data, false);
+ }
+ 
+ public ActivationDesc(String className, String location, MarshalledObject data, boolean restart) throws ActivationException {
+ 	this(ActivationGroup.currentGroupID(), className, location, data, restart);
+ }
+ 
+ public ActivationDesc(ActivationGroupID groupID, String className, String location, MarshalledObject data) {
+ 	this(groupID, className, location, data, false);
+ }
+ 
+ public ActivationDesc(ActivationGroupID groupID, String className, String location, MarshalledObject data, boolean restart) {
+ 	this.groupid = groupID;
+ 	this.classname = className;
+ 	this.location = location;
+ 	this.data = data;
+ 	this.restart = restart;
+ }
+ 
+ public ActivationGroupID getGroupID() {
+ 	return (groupid);
+ }
+ 
+ public String getClassName() {
+ 	return (classname);
+ }
+ 
+ public String getLocation() {
+ 	return (location);
+ }
+ 
+ public MarshalledObject getData() {
+ 	return (data);
+ }
+ 
+ public boolean getRestartMode() {
+ 	return (restart);
+ }
+ 
+ public boolean equals(Object obj) {
+ 	if (!(obj instanceof ActivationDesc)) {
+ 		return (false);
+ 	}
+ 	ActivationDesc that = (ActivationDesc)obj;
+ 
+ 	if (this.groupid.equals(that.groupid) &&
+ 	    this.classname.equals(that.classname) &&
+ 	    this.location.equals(that.location) &&
+ 	    this.data.equals(that.data) &&
+ 	    this.restart == that.restart) {
+ 		return (true);
+ 	}
+ 	return (false);
+ }
+ 
+ public int hashCode() {
+ 	return (groupid.hashCode() ^ classname.hashCode() ^ location.hashCode() ^ data.hashCode());
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationException.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,122 ----
+ /* ActivationException.java -- general Activation exception
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.activation;
+ 
+ /**
+  * General exception class for <code>java.rmi.activation</code>.
+  *
+  * @author unknown
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class ActivationException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -4320118837291406071L;
+ 
+   /**
+    * The cause of this exception. This pre-dates the exception chaining
+    * of Throwable; and although you can change this field, you are wiser
+    * to leave it alone.
+    *
+    * @serial the exception cause
+    */
+   public Throwable detail;
+ 
+   /**
+    * Create an exception with no message, and cause initialized to null.
+    */
+   public ActivationException()
+   {
+     this(null, null);
+   }
+ 
+   /**
+    * Create an exception with the given message, and cause initialized to null.
+    *
+    * @param s the message
+    */
+   public ActivationException(String s)
+   {
+     this(s, null);
+   }
+ 
+   /**
+    * Create an exception with the given message and cause.
+    *
+    * @param s the message
+    * @param ex the cause
+    */
+   public ActivationException(String s, Throwable ex)
+   {
+     super(s, ex);
+     detail = ex;
+   }
+ 
+   /**
+    * This method returns a message indicating what went wrong, in this
+    * format:
+    * <code>super.getMessage() + (detail == null ? ""
+    *    : "; nested exception is:\n\t" + detail)</code>.
+    *
+    * @return the chained message
+    */
+   public String getMessage()
+   {
+     if (detail == this || detail == null)
+       return super.getMessage();
+     return super.getMessage() + "; nested exception is:\n\t" + detail;
+   }
+ 
+   /**
+    * Returns the cause of this exception. Note that this may not be the
+    * original cause, thanks to the <code>detail</code> field being public
+    * and non-final (yuck). However, to avoid violating the contract of
+    * Throwable.getCause(), this returns null if <code>detail == this</code>,
+    * as no exception can be its own cause.
+    *
+    * @return the cause
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return detail == this ? null : detail;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationGroup.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationGroup.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationGroup.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationGroup.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* ActivationGroup.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.activation;
+ 
+ import java.rmi.MarshalledObject;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.server.UnicastRemoteObject;
+ 
+ public abstract class ActivationGroup extends UnicastRemoteObject
+   implements ActivationInstantiator
+ {
+ static final long serialVersionUID = -7696947875314805420L;
+ 
+ protected ActivationGroup(ActivationGroupID groupID) throws RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public boolean inactiveObject(ActivationID id) throws ActivationException, UnknownObjectException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public abstract void activeObject(ActivationID id, Remote obj) throws ActivationException, UnknownObjectException, RemoteException;
+ 
+ public static ActivationGroup createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) throws ActivationException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static ActivationGroupID currentGroupID() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static void setSystem(ActivationSystem system) throws ActivationException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static ActivationSystem getSystem() throws ActivationException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ protected void activeObject(ActivationID id, MarshalledObject mobj) throws ActivationException, UnknownObjectException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ protected void inactiveGroup() throws UnknownGroupException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationGroupDesc.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationGroupDesc.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationGroupDesc.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationGroupDesc.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,134 ----
+ /* ActivationGroupDesc.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.activation;
+ 
+ import java.io.Serializable;
+ import java.rmi.MarshalledObject;
+ import java.util.Properties;
+ 
+ public final class ActivationGroupDesc implements Serializable
+ {
+   static final long serialVersionUID = -4936225423168276595L;
+ 
+ public static class CommandEnvironment
+ 	implements Serializable {
+ 
+ static final long serialVersionUID = 6165754737887770191L;
+   
+ private String cmdpath;
+ private String[] argv;
+ 
+ public CommandEnvironment(String cmdpath, String[] argv) {
+ 	this.cmdpath = cmdpath;
+ 	this.argv = argv;
+ }
+ 
+ public String getCommandPath() {
+ 	return (cmdpath);
+ }
+ 
+ public String[] getCommandOptions() {
+ 	return (argv);
+ }
+ 
+ public boolean equals(Object obj) {
+ 	if (!(obj instanceof CommandEnvironment)) {
+ 		return (false);
+ 	}
+ 	CommandEnvironment that = (CommandEnvironment)obj;
+ 	
+ 	if (!this.cmdpath.equals(that.cmdpath)) {
+ 		return (false);
+ 	}
+ 
+ 	int len = this.argv.length;
+ 	if (len != that.argv.length) {
+ 		return (false);
+ 	}
+ 	for (int i = 0; i < len; i++) {
+ 		if (!this.argv[i].equals(that.argv[i])) {
+ 			return (false);
+ 		}
+ 	}
+ 	return (true);
+ }
+ 
+ public int hashCode() {
+ 	return (cmdpath.hashCode()); // Not a very good hash code.
+ }
+ 
+ }
+ 
+ public ActivationGroupDesc(Properties overrides, ActivationGroupDesc.CommandEnvironment cmd) {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public ActivationGroupDesc(String className, String location, MarshalledObject data, Properties overrides, ActivationGroupDesc.CommandEnvironment cmd) {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public String getClassName() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public String getLocation() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public MarshalledObject getData() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public Properties getPropertyOverrides() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public ActivationGroupDesc.CommandEnvironment getCommandEnvironment() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public boolean equals(Object obj) {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public int hashCode() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationGroupID.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationGroupID.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationGroupID.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationGroupID.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* ActivationGroupID.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.activation;
+ 
+ import java.io.Serializable;
+ 
+ public class ActivationGroupID implements Serializable
+ {
+   static final long serialVersionUID = -1648432278909740833L;
+ 
+ private ActivationSystem system;
+ 
+ public ActivationGroupID(ActivationSystem system) {
+ 	this.system = system;
+ }
+ 
+ public ActivationSystem getSystem() {
+ 	return (system);
+ }
+ 
+ public int hashCode() {
+ 	return (system.hashCode());
+ }
+ 
+ public boolean equals(Object obj) {
+ 	if (obj instanceof ActivationGroupID) {
+ 		ActivationGroupID that = (ActivationGroupID)obj;
+ 		if (this.system.equals(that.system)) {
+ 			return (true);
+ 		}
+ 	}
+ 	return (false);
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,110 ----
+ /* ActivationGroup_Stub.java -- Stub class for ActivationGroup impls.
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.activation;
+ 
+ import java.lang.reflect.Method;
+ import java.rmi.MarshalledObject;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.UnexpectedException;
+ import java.rmi.server.RemoteRef;
+ import java.rmi.server.RemoteStub;
+ 
+ /**
+  * A stub class for {@link ActivationGroup} implementations.
+  *
+  * @author Roman Kennke (kennke@aicas.com)
+  */
+ public class ActivationGroup_Stub extends RemoteStub
+   implements ActivationInstantiator, Remote
+ {
+   private static final long serialVersionUID = 2L;
+ 
+   /**
+    * Creates a new instance of ActivationGroup_Stub.
+    *
+    * @param ref the remote reference
+    */
+   public ActivationGroup_Stub(RemoteRef ref)
+   {
+     super(ref);
+   }
+ 
+   /**
+    * Stub method for <code>ActivationGroup.newInstance()</code>.
+    *
+    * @param id the activation ID
+    * @param desc the activation description
+    *
+    * @return the return value of the invocation
+    *
+    * @throws RemoteException if the invocation throws a RemoteException
+    * @throws ActivationException if the invocation throws an
+    *         ActivationException
+    */
+   public MarshalledObject newInstance(ActivationID id, ActivationDesc desc)
+     throws RemoteException, ActivationException
+   {
+     try
+       {
+         Method method = ActivationGroup_Stub.class.getDeclaredMethod
+                           ("newInstance", new Class[]{ ActivationID.class,
+                                                        ActivationDesc.class });
+         return (MarshalledObject) ref.invoke(this, method,
+                                              new Object[]{id, desc},
+                                             -5274445189091581345L);
+       }
+     catch (RuntimeException ex)
+       {
+         throw ex;
+       }
+     catch (RemoteException ex)
+       {
+         throw ex;
+       }
+     catch (ActivationException ex)
+       {
+         throw ex;
+       }
+     catch (Exception ex)
+       {
+         throw new UnexpectedException("Unexpected exception", ex);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationID.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationID.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationID.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationID.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* ActivationID.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.activation;
+ 
+ import java.io.Serializable;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ public class ActivationID implements Serializable
+ {
+   static final long serialVersionUID = -4608673054848209235L;
+ 
+ private Activator activator;
+ 
+ public ActivationID(Activator activator) {
+ 	this.activator = activator;
+ }
+ 
+ public Remote activate(boolean force) throws ActivationException, UnknownObjectException, RemoteException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public int hashCode() {
+ 	return (activator.hashCode());
+ }
+ 
+ public boolean equals(Object obj) {
+ 	if (obj instanceof ActivationID) {
+ 		ActivationID that = (ActivationID)obj;
+ 		if (this.activator.equals(that.activator)) {
+ 			return (true);
+ 		}
+ 	}
+ 	return (false);
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationInstantiator.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationInstantiator.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationInstantiator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationInstantiator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,50 ----
+ /* ActivationInstantiator.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.activation;
+ 
+ import java.rmi.MarshalledObject;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ public interface ActivationInstantiator
+   extends Remote
+ {
+   MarshalledObject newInstance (ActivationID id, ActivationDesc desc)
+     throws ActivationException, RemoteException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationMonitor.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationMonitor.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationMonitor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationMonitor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,55 ----
+ /* ActivationMonitor.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.activation;
+ 
+ import java.rmi.MarshalledObject;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ public interface ActivationMonitor extends Remote
+ {
+   void inactiveObject (ActivationID id)
+     throws UnknownObjectException, RemoteException;
+ 
+   void activeObject (ActivationID id, MarshalledObject obj)
+     throws UnknownObjectException, RemoteException;
+ 
+   void inactiveGroup (ActivationGroupID id, long incarnation)
+   throws UnknownGroupException, RemoteException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationSystem.java gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationSystem.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/ActivationSystem.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/ActivationSystem.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* ActivationSystem.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.activation;
+ 
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ public interface ActivationSystem extends Remote
+ {
+   int SYSTEM_PORT = 1098;
+ 
+   ActivationID registerObject (ActivationDesc desc)
+     throws ActivationException, UnknownGroupException, RemoteException;
+ 
+   void unregisterObject (ActivationID id)
+     throws ActivationException, UnknownObjectException, RemoteException;
+ 
+   ActivationGroupID registerGroup (ActivationGroupDesc desc)
+     throws ActivationException, RemoteException;
+ 
+   ActivationMonitor activeGroup (ActivationGroupID id,
+                                  ActivationInstantiator group, long incarnation)
+     throws UnknownGroupException, ActivationException, RemoteException;
+ 
+   void unregisterGroup (ActivationGroupID id)
+     throws ActivationException, UnknownGroupException, RemoteException;
+ 
+   void shutdown()
+     throws RemoteException;
+ 
+   ActivationDesc setActivationDesc (ActivationID id, ActivationDesc desc)
+     throws ActivationException, UnknownObjectException, UnknownGroupException,
+            RemoteException;
+ 
+   ActivationGroupDesc setActivationGroupDesc (ActivationGroupID id,
+                                               ActivationGroupDesc desc)
+     throws ActivationException, UnknownGroupException, RemoteException;
+ 
+   ActivationDesc getActivationDesc (ActivationID id) throws ActivationException, UnknownObjectException, RemoteException;
+ 
+   ActivationGroupDesc getActivationGroupDesc (ActivationGroupID id) throws ActivationException, UnknownGroupException, RemoteException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/Activator.java gcc-4.1.0/libjava/classpath/java/rmi/activation/Activator.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/Activator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/Activator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,50 ----
+ /* Activator.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.activation;
+ 
+ import java.rmi.MarshalledObject;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ public interface Activator
+   extends Remote
+ {
+   MarshalledObject activate (ActivationID id, boolean force)
+     throws ActivationException, UnknownObjectException, RemoteException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/UnknownGroupException.java gcc-4.1.0/libjava/classpath/java/rmi/activation/UnknownGroupException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/UnknownGroupException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/UnknownGroupException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* UnknownGroupException.java -- thrown on an invalid ActivationGroupID 
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.activation;
+ 
+ /**
+  * Thrown when an <code>ActivationGroupID</code> parameter is invalid or
+  * unknown.
+  *
+  * @author unknown
+  * @see Activatable
+  * @see ActivationGroup
+  * @see ActivationID
+  * @see ActivationMonitor
+  * @see ActivationSystem
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class UnknownGroupException extends ActivationException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 7056094974750002460L;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public UnknownGroupException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/UnknownObjectException.java gcc-4.1.0/libjava/classpath/java/rmi/activation/UnknownObjectException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/UnknownObjectException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/UnknownObjectException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* UnknownObjectException.java -- thrown on an invalid ActivationID
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.activation;
+ 
+ /**
+  * Thrown when an <code>ActivationID</code> parameter is invalid or unknown.
+  *
+  * @author unknown
+  * @see Activatable
+  * @see ActivationGroup
+  * @see ActivationID
+  * @see ActivationMonitor
+  * @see ActivationSystem
+  * @see Activator
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class UnknownObjectException extends ActivationException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 3425547551622251430L;
+ 
+   /**
+    * Create an exception with an error message.
+    *
+    * @param s the message
+    */
+   public UnknownObjectException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/activation/package.html gcc-4.1.0/libjava/classpath/java/rmi/activation/package.html
*** gcc-4.0.2/libjava/classpath/java/rmi/activation/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/activation/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.rmi.activation package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.rmi.activation</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/dgc/DGC.java gcc-4.1.0/libjava/classpath/java/rmi/dgc/DGC.java
*** gcc-4.0.2/libjava/classpath/java/rmi/dgc/DGC.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/dgc/DGC.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /* DGC.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.dgc;
+ 
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ import java.rmi.server.ObjID;
+ 
+ public interface DGC extends Remote
+ {
+   Lease dirty (ObjID[] ids, long sequenceNum, Lease lease)
+     throws RemoteException;
+ 
+   void clean (ObjID[] ids, long sequenceNum, VMID vmid, boolean strong)
+     throws RemoteException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/dgc/Lease.java gcc-4.1.0/libjava/classpath/java/rmi/dgc/Lease.java
*** gcc-4.0.2/libjava/classpath/java/rmi/dgc/Lease.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/dgc/Lease.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* Lease.java
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.dgc;
+ 
+ import java.io.Serializable;
+ 
+ public final class Lease
+ 	implements Serializable {
+ 
+ static final long serialVersionUID = -5713411624328831948L;
+ 
+ private VMID vmid;
+ private long value;
+ 
+ public Lease(VMID id, long duration) {
+ 	vmid = id;
+ 	value = duration;
+ }
+ 
+ public VMID getVMID() {
+ 	return (vmid);
+ }
+ 
+ public long getValue() {
+ 	return (value);
+ }
+ 
+ public String toString() {
+ 	return ("[" + vmid.toString() + ", " + Long.toString(value) + "]");
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/dgc/VMID.java gcc-4.1.0/libjava/classpath/java/rmi/dgc/VMID.java
*** gcc-4.0.2/libjava/classpath/java/rmi/dgc/VMID.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/dgc/VMID.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,138 ----
+ /* VMID.java
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.dgc;
+ 
+ import java.io.Serializable;
+ import java.net.InetAddress;
+ import java.net.UnknownHostException;
+ import java.rmi.server.UID;
+ 
+ public final class VMID	implements Serializable
+ {
+   static final long serialVersionUID = -538642295484486218L;
+   
+   static final boolean areWeUnique;
+   
+   static byte[] localAddr;
+ 
+   private byte[] addr;
+   
+   private UID uid;
+ 
+   static
+   {
+     byte[] addr;
+     boolean awu = true;
+     try {
+       addr = InetAddress.getLocalHost().getAddress();
+       if (addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1) {
+         awu = false;
+       }
+     }
+     catch (UnknownHostException _) {
+       addr = new byte[]{ 127, 0, 0, 1 };
+       awu = false;
+     }
+     localAddr = addr;
+     areWeUnique = awu;
+   }
+ 
+   public VMID()
+   {
+     addr = localAddr;
+     uid = new UID();
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public static boolean isUnique ()
+   {
+     return areWeUnique;
+   }
+ 
+   public int hashCode ()
+   {
+     return super.hashCode();
+   }
+ 
+   public boolean equals (Object obj)
+   {
+     if (!(obj instanceof VMID))
+       {
+         return false;
+       }
+     
+     VMID other = (VMID) obj;
+     if (addr.length != other.addr.length)
+       {
+         return false;
+       }
+     
+     for (int i = addr.length - 1; i >= 0; i--)
+       {
+         if (addr[i] != other.addr[i])
+           {
+             return false;
+           }
+       }
+     
+     return uid.equals(other.uid);
+   }
+ 
+   public String toString ()
+   {
+     StringBuffer buf = new StringBuffer ("[VMID: ");
+     
+     for (int i = 0; i < addr.length; i++)
+       {
+         if (i > 0)
+           {
+             buf.append (".");
+           }
+         
+         buf.append (Integer.toString (addr [i]));
+       }
+     
+     buf.append (" ");
+     buf.append (uid.toString ());
+     buf.append ("]");
+ 
+     return buf.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/dgc/package.html gcc-4.1.0/libjava/classpath/java/rmi/dgc/package.html
*** gcc-4.0.2/libjava/classpath/java/rmi/dgc/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/dgc/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.rmi.dgc package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.rmi.dgc</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/package.html gcc-4.1.0/libjava/classpath/java/rmi/package.html
*** gcc-4.0.2/libjava/classpath/java/rmi/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.rmi package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.rmi</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/registry/LocateRegistry.java gcc-4.1.0/libjava/classpath/java/rmi/registry/LocateRegistry.java
*** gcc-4.0.2/libjava/classpath/java/rmi/registry/LocateRegistry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/registry/LocateRegistry.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* LocateRegistry.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.registry;
+ 
+ import gnu.java.rmi.registry.RegistryImpl;
+ import gnu.java.rmi.registry.RegistryImpl_Stub;
+ import gnu.java.rmi.server.UnicastRef;
+ 
+ import java.rmi.RemoteException;
+ import java.rmi.server.ObjID;
+ import java.rmi.server.RMIClientSocketFactory;
+ import java.rmi.server.RMIServerSocketFactory;
+ import java.rmi.server.RMISocketFactory;
+ import java.rmi.server.RemoteRef;
+ 
+ public final class LocateRegistry {
+   /**
+    * This class isn't intended to be instantiated.
+    */
+   private LocateRegistry() {}
+ 
+ public static Registry getRegistry() throws RemoteException {
+ 	return (getRegistry("localhost", Registry.REGISTRY_PORT));
+ }
+ 
+ public static Registry getRegistry(int port) throws RemoteException {
+ 	return (getRegistry("localhost", port));
+ }
+ 
+ public static Registry getRegistry(String host) throws RemoteException {
+ 	return (getRegistry(host, Registry.REGISTRY_PORT));
+ }
+ 
+ public static Registry getRegistry(String host, int port) throws RemoteException {
+ 	return (getRegistry(host, port, RMISocketFactory.getSocketFactory()));
+ }
+ 
+ public static Registry getRegistry(String host, int port, RMIClientSocketFactory csf) throws RemoteException {
+ 	RemoteRef ref = new UnicastRef(new ObjID(ObjID.REGISTRY_ID), host, port, csf);
+ 	return (new RegistryImpl_Stub(ref));
+ }
+ 
+ public static Registry createRegistry(int port) throws RemoteException {
+ 	return (createRegistry(port, RMISocketFactory.getSocketFactory(), RMISocketFactory.getSocketFactory()));
+ }
+ 
+ public static Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
+ 	return (new RegistryImpl(port, csf, ssf));
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/registry/Registry.java gcc-4.1.0/libjava/classpath/java/rmi/registry/Registry.java
*** gcc-4.0.2/libjava/classpath/java/rmi/registry/Registry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/registry/Registry.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* Registry.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.registry;
+ 
+ import java.rmi.AccessException;
+ import java.rmi.AlreadyBoundException;
+ import java.rmi.NotBoundException;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ public interface Registry extends Remote
+ {
+   int REGISTRY_PORT = 1099;
+ 
+   Remote lookup(String name)
+     throws RemoteException, NotBoundException, AccessException;
+ 
+   void bind(String name, Remote obj)
+     throws RemoteException, AlreadyBoundException, AccessException;
+ 
+   void unbind(String name)
+     throws RemoteException, NotBoundException, AccessException;
+ 
+   void rebind(String name, Remote obj)
+     throws RemoteException, AccessException;
+ 
+   String[] list()
+     throws RemoteException, AccessException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/registry/RegistryHandler.java gcc-4.1.0/libjava/classpath/java/rmi/registry/RegistryHandler.java
*** gcc-4.0.2/libjava/classpath/java/rmi/registry/RegistryHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/registry/RegistryHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* RegistryHandler.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.registry;
+ 
+ import java.rmi.RemoteException;
+ import java.rmi.UnknownHostException;
+ 
+ /**
+  * @deprecated
+  */
+ public interface RegistryHandler
+ {
+   /**
+    * @deprecated
+    */
+   Registry registryStub (String host, int port)
+     throws RemoteException, UnknownHostException;
+ 
+   /**
+    * @deprecated
+    */
+   Registry registryImpl (int port) throws RemoteException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/registry/package.html gcc-4.1.0/libjava/classpath/java/rmi/registry/package.html
*** gcc-4.0.2/libjava/classpath/java/rmi/registry/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/registry/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.rmi.registry package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.rmi.registry</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/ExportException.java gcc-4.1.0/libjava/classpath/java/rmi/server/ExportException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/ExportException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/ExportException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* ExportException.java -- an export attempt failed
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ import java.rmi.RemoteException;
+ 
+ /**
+  * Thrown if an attempt to export a remote object fails.
+  *
+  * @author unknown
+  * @see UnicastRemoteObject
+  * @see Activatable
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ExportException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -9155485338494060170L;
+ 
+   /**
+    * Create an exception with the specified message.
+    *
+    * @param s the message
+    */
+   public ExportException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with the specified message and cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public ExportException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/LoaderHandler.java gcc-4.1.0/libjava/classpath/java/rmi/server/LoaderHandler.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/LoaderHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/LoaderHandler.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,70 ----
+ /* LoaderHandler.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ 
+ /**
+  * @deprecated
+  */
+ public interface LoaderHandler
+ {
+   /**
+    * For binary compatibility with the JDK, the string "sun.rmi.server".
+    * Not actually used for anything.
+    */
+   String packagePrefix = "sun.rmi.server";
+ 
+   /**
+    * @deprecated
+    */
+   Class loadClass(String name)
+     throws MalformedURLException, ClassNotFoundException;
+ 
+   /**
+    * @deprecated
+    */
+   Class loadClass(URL codebase, String name)
+     throws MalformedURLException, ClassNotFoundException;
+ 
+   /**
+    * @deprecated
+    */
+   Object getSecurityContext(ClassLoader loader);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/LogStream.java gcc-4.1.0/libjava/classpath/java/rmi/server/LogStream.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/LogStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/LogStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,146 ----
+ /* LogStream.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import java.io.OutputStream;
+ import java.io.PrintStream;
+ 
+ /**
+  * @deprecated
+  */
+ public class LogStream extends PrintStream
+ {
+   public static final int SILENT = 0;
+   public static final int BRIEF = 10;
+   public static final int VERBOSE = 20;
+ 
+   private static PrintStream defStream;
+ 
+   private LogStream (OutputStream s)
+   {
+     super (s);
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public static LogStream log (String name)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public static PrintStream getDefaultStream ()
+   {
+     return defStream;
+   }
+   
+   /**
+    * @deprecated
+    */
+   public static void setDefaultStream (PrintStream s)
+   {
+     defStream = s;
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public OutputStream getOutputStream ()
+   {
+     return out;
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public void setOutputStream (OutputStream s)
+   {
+     out = s;
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public void write (int buffer)
+   {
+     super.write (buffer);
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public void write (byte[] buffer, int offset, int len)
+   {
+     super.write (buffer, offset, len);
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public String toString ()
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public static int parseLevel (String s)
+   {
+     if (s.equalsIgnoreCase ("silent"))
+       {
+         return SILENT;
+       }
+     
+     if (s.equalsIgnoreCase ("brief"))
+       {
+         return BRIEF;
+       }
+     
+     if (s.equalsIgnoreCase ("verbose"))
+       {
+         return VERBOSE;
+       }
+     
+     return SILENT;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/ObjID.java gcc-4.1.0/libjava/classpath/java/rmi/server/ObjID.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/ObjID.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/ObjID.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,103 ----
+ /* ObjID.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import java.io.DataInput;
+ import java.io.DataOutput;
+ import java.io.IOException;
+ import java.io.ObjectInput;
+ import java.io.ObjectOutput;
+ import java.io.Serializable;
+ 
+ public final class ObjID implements Serializable
+ {
+ static final long serialVersionUID = -6386392263968365220L;
+ 
+ private static long next = 0x8000000000000000L;
+ private static final Object lock = ObjID.class;
+ 
+ public static final int REGISTRY_ID = 0;
+ public static final int ACTIVATOR_ID = 1;
+ public static final int DGC_ID = 2;
+ 
+ private long objNum;
+ private UID space;
+ 
+ public ObjID() {
+ 	synchronized (lock) {
+ 		objNum = next++;
+ 	}
+ 	space = new UID();
+ }
+ 
+ public ObjID(int num) {
+ 	objNum = (long)num;
+ 	space = new UID((short)0);
+ }
+ 
+ public void write(ObjectOutput out) throws IOException {
+ 	DataOutput dout = (DataOutput)out;
+ 	dout.writeLong(objNum);
+ 	space.write(dout);
+ }
+ 
+ public static ObjID read(ObjectInput in) throws IOException {
+ 	DataInput din = (DataInput)in;
+ 	ObjID id = new ObjID();
+ 	id.objNum = din.readLong();
+ 	id.space = UID.read(din);
+ 	return (id);
+ }
+ 
+ public int hashCode() {
+ 	return ((int)objNum);
+ }
+ 
+ public boolean equals(Object obj) {
+ 	if (obj instanceof ObjID && this.objNum == ((ObjID)obj).objNum) {
+ 		return (true);
+ 	}
+ 	return (false);
+ }
+ 
+ public String toString() {
+ 	return ("[objNum: " + objNum + ", " + space + "]");
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/Operation.java gcc-4.1.0/libjava/classpath/java/rmi/server/Operation.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/Operation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/Operation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* Operation.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ /**
+  * @deprecated
+  */
+ public class Operation
+ {
+   private String operation;
+ 
+   /**
+    * @deprecated
+    */
+   public Operation (String op)
+   {
+     operation = op;
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public String getOperation ()
+   {
+     return operation;
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public String toString ()
+   {
+     return operation;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RMIClassLoader.java gcc-4.1.0/libjava/classpath/java/rmi/server/RMIClassLoader.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RMIClassLoader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RMIClassLoader.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,177 ----
+ /* RMIClassLoader.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ import gnu.java.rmi.server.RMIClassLoaderImpl;
+ 
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ 
+ /**
+  * This class provides a set of public static utility methods for supporting
+  * network-based class loading in RMI. These methods are called by RMI's
+  * internal marshal streams to implement the dynamic class loading of types for
+  * RMI parameters and return values.
+  */
+ public class RMIClassLoader
+ {
+   /**
+    * This class isn't intended to be instantiated.
+    */
+   private RMIClassLoader() {}
+ 
+   /**
+    * @deprecated
+    */
+   public static Class loadClass(String name)
+     throws MalformedURLException, ClassNotFoundException
+   {
+     return loadClass("", name);
+   }
+ 
+   public static Class loadClass(String codebase, String name)
+     throws MalformedURLException, ClassNotFoundException
+   {
+     RMIClassLoaderSpi spi = getProviderInstance();
+     if (spi == null)
+       spi = getDefaultProviderInstance(); 
+     return spi.loadClass(codebase, name, null);
+   }
+ 
+   public static Class loadClass(String codebase, String name,
+                                 ClassLoader defaultLoader)
+     throws MalformedURLException, ClassNotFoundException
+   {
+     RMIClassLoaderSpi spi = getProviderInstance();
+     if (spi == null)
+       spi = getDefaultProviderInstance(); 
+     return spi.loadClass(codebase, name, defaultLoader);
+   }
+ 
+   /**
+    * Loads a class from <code>codeBase</code>.
+    *
+    * This method delegates to
+    * {@link RMIClassLoaderSpi#loadClass(String, String, ClassLoader)} and
+    * passes <code>codeBase.toString()</code> as first argument,
+    * <code>name</code> as second argument and <code>null</code> as third
+    * argument.
+    *
+    * @param codeBase the code base from which to load the class
+    * @param name the name of the class
+    *
+    * @return the loaded class
+    *
+    * @throws MalformedURLException if the URL is not well formed
+    * @throws ClassNotFoundException if the requested class cannot be found
+    */
+   public static Class loadClass(URL codeBase, String name)
+     throws MalformedURLException, ClassNotFoundException
+   {
+     RMIClassLoaderSpi spi = getProviderInstance();
+     if (spi == null)
+       spi = getDefaultProviderInstance(); 
+     return spi.loadClass(codeBase.toString(), name, null);
+   }
+ 
+   /**
+    * Gets a classloader for the given codebase and with the current
+    * context classloader as parent.
+    * 
+    * @param codebase
+    * 
+    * @return a classloader for the given codebase
+    * 
+    * @throws MalformedURLException if the codebase contains a malformed URL
+    */
+   public static ClassLoader getClassLoader(String codebase) 
+     throws MalformedURLException
+   {
+     RMIClassLoaderSpi spi = getProviderInstance();
+     if (spi == null)
+       spi = getDefaultProviderInstance(); 
+     return spi.getClassLoader(codebase);
+   }
+  
+   /**
+    * Returns a string representation of the network location where a remote
+    * endpoint can get the class-definition of the given class.
+    *
+    * @param cl
+    *
+    * @return a space seperated list of URLs where the class-definition
+    * of cl may be found
+    */
+   public static String getClassAnnotation(Class cl)
+   {
+     RMIClassLoaderSpi spi = getProviderInstance();
+     if (spi == null)
+       spi = getDefaultProviderInstance(); 
+     return spi.getClassAnnotation(cl);
+   }
+ 
+   /**
+    * @deprecated
+    */
+   public static Object getSecurityContext (ClassLoader loader)
+   {
+     throw new Error ("Not implemented");
+   }
+ 
+   /**
+    * Returns the default service provider for <code>RMIClassLoader</code>.
+    *
+    * @return the default provider for <code>RMIClassLoader</code>
+    */
+   public static RMIClassLoaderSpi getDefaultProviderInstance()
+   {
+     return RMIClassLoaderImpl.getInstance();
+   }
+ 
+   /**
+    * Chooses, instantiates and returns a service provider.
+    *
+    * @return a service provider
+    */
+   private static RMIClassLoaderSpi getProviderInstance()
+   {
+     // TODO: Do something more useful here.
+     return null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RMIClassLoaderSpi.java gcc-4.1.0/libjava/classpath/java/rmi/server/RMIClassLoaderSpi.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RMIClassLoaderSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RMIClassLoaderSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* RMIClassLoaderSpi.java --
+    Copyright (c) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ import java.net.MalformedURLException;
+ 
+ /**
+  * @author Michael Koch
+  * @since 1.4
+  */
+ public abstract class RMIClassLoaderSpi
+ {
+   public RMIClassLoaderSpi()
+   {
+   }
+ 
+   public abstract Class loadClass (String codeBase, String name,
+                                    ClassLoader defaultLoader)
+     throws MalformedURLException, ClassNotFoundException;
+ 
+   public abstract Class loadProxyClass (String codeBase, String[] interfaces,
+                                         ClassLoader defaultLoader)
+     throws MalformedURLException, ClassNotFoundException;
+ 
+   public abstract ClassLoader getClassLoader (String codebase)
+     throws MalformedURLException;
+ 
+   public abstract String getClassAnnotation (Class cl);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RMIClientSocketFactory.java gcc-4.1.0/libjava/classpath/java/rmi/server/RMIClientSocketFactory.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RMIClientSocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RMIClientSocketFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /* RMIClientSocketFactory.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import java.io.IOException;
+ import java.net.Socket;
+ 
+ public interface RMIClientSocketFactory
+ {
+   Socket createSocket (String host, int port) throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RMIFailureHandler.java gcc-4.1.0/libjava/classpath/java/rmi/server/RMIFailureHandler.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RMIFailureHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RMIFailureHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ /* RMIFailureHandler.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ public interface RMIFailureHandler
+ {
+   /**
+    * @exception IOException If an error occurs
+    */
+   boolean failure (Exception ex);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RMIServerSocketFactory.java gcc-4.1.0/libjava/classpath/java/rmi/server/RMIServerSocketFactory.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RMIServerSocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RMIServerSocketFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ /* RMIServerSocketFactory.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import java.io.IOException;
+ import java.net.ServerSocket;
+ 
+ public interface RMIServerSocketFactory
+ {
+   ServerSocket createServerSocket(int port) throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RMISocketFactory.java gcc-4.1.0/libjava/classpath/java/rmi/server/RMISocketFactory.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RMISocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RMISocketFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,108 ----
+ /* RMISocketFactory.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import gnu.java.rmi.server.RMIDefaultSocketFactory;
+ 
+ import java.io.IOException;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ 
+ public abstract class RMISocketFactory
+   implements RMIClientSocketFactory, RMIServerSocketFactory
+ {
+   private static RMISocketFactory defaultFactory;
+   private static RMISocketFactory currentFactory;
+   private static RMIFailureHandler currentHandler;
+ 
+   static
+     {
+       defaultFactory = new RMIDefaultSocketFactory();
+       currentFactory = defaultFactory;
+     }
+ 
+   public RMISocketFactory ()
+   {
+   }
+ 
+   /**
+    * @exception IOException If an error occurs
+    */
+   public abstract Socket createSocket (String host, int port)
+     throws IOException;
+ 
+   /**
+    * @exception IOException If an error occurs
+    */
+   public abstract ServerSocket createServerSocket (int port)
+     throws IOException;
+ 
+   /**
+    * @exception IOException If an error occurs
+    * @exception SecurityException FIXME
+    */
+   public static void setSocketFactory (RMISocketFactory fac)
+     throws IOException
+   {
+     currentFactory = fac;
+   }
+ 
+   public static RMISocketFactory getSocketFactory ()
+   {
+     return currentFactory;
+   }
+ 
+   public static RMISocketFactory getDefaultSocketFactory ()
+   {
+     return defaultFactory;
+   }
+ 
+   /**
+    * @exception SecurityException FIXME
+    */
+   public static void setFailureHandler (RMIFailureHandler fh)
+   {
+     currentHandler = fh;
+   }
+ 
+   public static RMIFailureHandler getFailureHandler ()
+   {
+     return currentHandler;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteCall.java gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteCall.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteCall.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteCall.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,86 ----
+ /* RemoteCall.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInput;
+ import java.io.ObjectOutput;
+ import java.io.StreamCorruptedException;
+ 
+ /**
+  * @deprecated
+  */
+ public interface RemoteCall
+ {
+   /**
+    * @deprecated
+    */
+   ObjectOutput getOutputStream () throws IOException;
+ 
+   /**
+    * @deprecated
+    */
+   void releaseOutputStream () throws IOException;
+ 
+   /**
+    * @deprecated
+    */
+   ObjectInput getInputStream () throws IOException;
+ 
+   /**
+    * @deprecated
+    */
+   void releaseInputStream () throws IOException;
+ 
+   /**
+    * @deprecated
+    */
+   ObjectOutput getResultStream (boolean success)
+     throws IOException, StreamCorruptedException;
+ 
+   /**
+    * @deprecated
+    */
+   void executeCall () throws Exception;
+ 
+   /**
+    * @deprecated
+    */
+   void done () throws IOException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteObject.java gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteObject.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteObject.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,162 ----
+ /* RemoteObject.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.rmi.NoSuchObjectException;
+ import java.rmi.Remote;
+ import java.rmi.UnmarshalException;
+ import java.util.WeakHashMap;
+ 
+ public abstract class RemoteObject
+ 	implements Remote, Serializable {
+ 
+ private static final long serialVersionUID = -3215090123894869218l;
+ 
+ protected transient RemoteRef ref;
+ 
+ private static final WeakHashMap stubs = new WeakHashMap();
+ 
+ protected RemoteObject() {
+ 	this(null);
+ }
+ 
+ protected RemoteObject(RemoteRef newref) {
+ 	ref = newref;
+ }
+ 
+ public RemoteRef getRef() {
+ 	return (ref);
+ }
+ 
+ synchronized static void addStub(Remote obj, Remote stub)
+ {
+   stubs.put(obj, stub);
+ }
+ 
+ synchronized static void deleteStub(Remote obj)
+ {
+   stubs.remove(obj);
+ }
+ 
+   public static Remote toStub(Remote obj) throws NoSuchObjectException 
+   {
+     Remote stub = (Remote)stubs.get(obj);
+ 
+     if (stub == null)
+       throw new NoSuchObjectException(obj.getClass().getName());
+ 
+     return stub;
+   }
+ 
+ public int hashCode() {
+ 	if (ref == null) {
+ 		return (0);
+ 	}
+ 	else {
+ 		return (ref.hashCode());
+ 	}
+ }
+ 
+ public boolean equals(Object obj) {
+ 	// We only compare references.
+ 	return (this == obj);
+ }
+ 
+   public String toString() 
+   {
+     if (ref == null)
+       return getClass ().toString ();
+     return (ref.toString ());
+   }
+   
+   private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException 
+   {
+     String cname = in.readUTF();
+     if (!cname.equals("")) 
+       {
+ 	if (cname.equals ("UnicastRef2"))
+ 	  { 
+ 	    // hack for interoperating with JDK
+ 	    cname = "UnicastRef";
+ 	    in.read (); //some unknown UnicastRef2 field
+ 	  }
+ 
+   // It would be nice to use RemoteRef.packagePrefix here, but for binary
+   // compatibility with the JDK that has to contain "sun.rmi.server"...
+ 	cname = "gnu.java.rmi.server." + cname;
+ 	try 
+ 	  {
+ 	    Class cls = Class.forName(cname);
+ 	    ref = (RemoteRef)cls.newInstance();
+ 	  }
+ 	catch (InstantiationException e1) 
+ 	  {
+ 	    throw new UnmarshalException("failed to create ref", e1);
+ 	  }
+ 	catch (IllegalAccessException e2) 
+ 	  {
+ 	    throw new UnmarshalException("failed to create ref", e2);
+ 	  }
+ 	ref.readExternal(in);
+       }
+     else 
+       {
+ 	ref = (RemoteRef)in.readObject();
+       }
+   }
+ 
+ private void writeObject(ObjectOutputStream out) throws IOException, ClassNotFoundException {
+ 	if (ref == null) {
+ 		throw new UnmarshalException("no ref to serialize");
+ 	}
+ 	String cname = ref.getRefClass(out);
+ 	if (cname != null && cname.length() > 0) {
+ 		out.writeUTF(cname);
+ 		ref.writeExternal(out);
+ 	}
+ 	else {
+ 		out.writeUTF("");
+ 		out.writeObject(ref);
+ 	}
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteRef.java gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteRef.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteRef.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteRef.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,83 ----
+ /* RemoteRef.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import java.io.Externalizable;
+ import java.io.ObjectOutput;
+ import java.lang.reflect.Method;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ public interface RemoteRef extends Externalizable
+ {
+   long serialVersionUID = 3632638527362204081L;
+   
+   /**
+    * For binary compatibility with the JDK, the string "sun.rmi.server".
+    * Not actually used for anything.
+    */
+   String packagePrefix = "sun.rmi.server";
+ 
+   /**
+    * @deprecated
+    */
+   void invoke (RemoteCall call) throws Exception;
+   
+   Object invoke (Remote obj, Method method, Object[] params, long opnum)
+     throws Exception;
+   
+   /**
+    * @deprecated
+    */
+   RemoteCall newCall (RemoteObject obj, Operation[] op, int opnum, long hash)
+     throws RemoteException;
+ 
+   /**
+    * @deprecated
+    */
+   void done (RemoteCall call) throws RemoteException;
+   
+   boolean remoteEquals (RemoteRef ref);
+   
+   int remoteHashCode();
+   
+   String getRefClass (ObjectOutput out);
+   
+   String remoteToString();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteServer.java gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteServer.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteServer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteServer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* RemoteServer.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ import gnu.java.rmi.server.RMIIncomingThread;
+ 
+ import java.io.OutputStream;
+ import java.io.PrintStream;
+ 
+ public abstract class RemoteServer extends RemoteObject
+ {
+ private static final long serialVersionUID = -4100238210092549637L;
+ 
+ protected RemoteServer() {
+ 	super();
+ }
+ 
+ protected RemoteServer(RemoteRef ref) {
+ 	super(ref);
+ }
+ 
+ public static String getClientHost() throws ServerNotActiveException {
+ 	Thread currThread = Thread.currentThread();
+ 	if (currThread instanceof RMIIncomingThread) {
+ 		RMIIncomingThread incomingThread = (RMIIncomingThread) currThread;
+ 		return incomingThread.getClientHost();
+ 	} else {
+ 		throw new ServerNotActiveException(
+ 			"Unknown client host - current thread not instance of 'RMIIncomingThread'");
+ 	}
+ }
+ 
+ public static void setLog(OutputStream out) {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static PrintStream getLog() {
+ 	throw new Error("Not implemented");
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteStub.java gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteStub.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/RemoteStub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/RemoteStub.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* RemoteStub.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ public abstract class RemoteStub extends RemoteObject
+ {
+   static final long serialVersionUID = -1585587260594494182l;
+ 
+   protected RemoteStub ()
+   {
+     super ();
+   }
+ 
+   protected RemoteStub (RemoteRef ref)
+   {
+     super (ref);
+   }
+ 
+   /**
+    * @deprecated
+    */
+   protected static void setRef (RemoteStub stub,  RemoteRef ref)
+   {
+     stub.ref = ref;
+   }
+ } // class RemoteSub
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/ServerCloneException.java gcc-4.1.0/libjava/classpath/java/rmi/server/ServerCloneException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/ServerCloneException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/ServerCloneException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,117 ----
+ /* ServerCloneException.java -- a UnicastRemoteObject could not be cloned
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ /**
+  * Thrown if a remote exception occurs during the cloning process of a
+  * <code>UnicastRemoteObject</code>.
+  *
+  * @author unknown
+  * @see UnicastRemoteObject#clone()
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ServerCloneException extends CloneNotSupportedException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 6617456357664815945L;
+ 
+   /**
+    * The cause of this exception. This pre-dates the exception chaining
+    * of Throwable; and although you can change this field, you are wiser
+    * to leave it alone.
+    *
+    * @serial the exception cause
+    */
+   public Exception detail;
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ServerCloneException(String s)
+   {
+     this(s, null);
+   }
+ 
+   /**
+    * Create an exception with a message and a cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public ServerCloneException(String s, Exception e)
+   {
+     super(s);
+     initCause(e);
+     detail = e;
+   }
+ 
+   /**
+    * This method returns a message indicating what went wrong, in this
+    * format:
+    * <code>super.getMessage() + (detail == null ? ""
+    *    : "; nested exception is:\n\t" + detail)</code>.
+    *
+    * @return the chained message
+    */
+   public String getMessage()
+   {
+     if (detail == this || detail == null)
+       return super.getMessage();
+     return super.getMessage() + "; nested exception is:\n\t" + detail;
+   }
+ 
+   /**
+    * Returns the cause of this exception. Note that this may not be the
+    * original cause, thanks to the <code>detail</code> field being public
+    * and non-final (yuck). However, to avoid violating the contract of
+    * Throwable.getCause(), this returns null if <code>detail == this</code>,
+    * as no exception can be its own cause.
+    *
+    * @return the cause
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return detail == this ? null : detail;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/ServerNotActiveException.java gcc-4.1.0/libjava/classpath/java/rmi/server/ServerNotActiveException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/ServerNotActiveException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/ServerNotActiveException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* ServerNotActiveException.java -- the method is not servicing a remote call
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ /**
+  * Thrown during <code>RemoteServer.getClientHost</code> if the host is
+  * not servicing a remote method call.
+  *
+  * @author unknown
+  * @see RemoteServer#getClientHost()
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class ServerNotActiveException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 4687940720827538231L;
+ 
+   /**
+    * Create an exception with no message.
+    */
+   public ServerNotActiveException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param s the message
+    */
+   public ServerNotActiveException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/ServerRef.java gcc-4.1.0/libjava/classpath/java/rmi/server/ServerRef.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/ServerRef.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/ServerRef.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,51 ----
+ /* ServerRef.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ public interface ServerRef extends RemoteRef
+ {
+   long serialVersionUID = -4557750989390278438L;
+ 
+   RemoteStub exportObject(Remote obj, Object data) throws RemoteException;
+ 
+   String getClientHost() throws ServerNotActiveException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/Skeleton.java gcc-4.1.0/libjava/classpath/java/rmi/server/Skeleton.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/Skeleton.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/Skeleton.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* Skeleton.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ import java.rmi.Remote;
+ 
+ /**
+  * @deprecated
+  */
+ public interface Skeleton
+ {
+   /**
+    * @deprecated
+    */
+   void dispatch (Remote obj, RemoteCall theCall, int opnum, long hash)
+     throws Exception;
+ 
+   /**
+    * @deprecated
+    */
+   Operation[] getOperations();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/SkeletonMismatchException.java gcc-4.1.0/libjava/classpath/java/rmi/server/SkeletonMismatchException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/SkeletonMismatchException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/SkeletonMismatchException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,68 ----
+ /* SkeletonMismatchException.java -- thrown when stub class versions mismatch
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ import java.rmi.RemoteException;
+ 
+ /**
+  * Thrown if a call is received that does not match a Skeleton. Note that
+  * Skeletons are no longer required.
+  *
+  * @author unknown
+  * @since 1.1
+  * @deprecated no replacement. Skeletons are no longer required.
+  * @status updated to 1.4
+  */
+ public class SkeletonMismatchException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1.
+    */
+   private static final long serialVersionUID = -7780460454818859281l;
+ 
+   /**
+    * Create an exception with the specified message.
+    *
+    * @param s the message
+    * @deprecated no longer needed
+    */
+   public SkeletonMismatchException(String s)
+   {
+     super(s);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/SkeletonNotFoundException.java gcc-4.1.0/libjava/classpath/java/rmi/server/SkeletonNotFoundException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/SkeletonNotFoundException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/SkeletonNotFoundException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* SkeletonNotFoundException.java -- thrown if a Skeleton is not found
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import java.rmi.RemoteException;
+ 
+ /**
+  * Thrown if a Skeleton corresponding to the remote object is not found.
+  * Note that Skeletons are no longer required.
+  *
+  * @author unknown
+  * @since 1.1
+  * @deprecated no replacement. Skeletons are no longer required.
+  * @status updated to 1.4
+  */
+ public class SkeletonNotFoundException extends RemoteException
+ {
+   /**
+    * Compatible with JDK 1.1.
+    */
+   private static final long serialVersionUID = -7860299673822761231L;
+ 
+   /**
+    * Create an exception with the specified message.
+    *
+    * @param s the message
+    */
+   public SkeletonNotFoundException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with the specified message and cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public SkeletonNotFoundException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/SocketSecurityException.java gcc-4.1.0/libjava/classpath/java/rmi/server/SocketSecurityException.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/SocketSecurityException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/SocketSecurityException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* SocketSecurityException.java -- the socket could not be created
+    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ /**
+  * Thrown during remote object export if the code does not have permission
+  * to create a <code>java.net.ServerSocket</code> on the specified port.
+  *
+  * @author unknown
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class SocketSecurityException extends ExportException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -7622072999407781979L;
+ 
+   /**
+    * Create an exception with the specified message.
+    *
+    * @param s the message
+    */
+   public SocketSecurityException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Create an exception with the specified message and cause.
+    *
+    * @param s the message
+    * @param e the cause
+    */
+   public SocketSecurityException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/UID.java gcc-4.1.0/libjava/classpath/java/rmi/server/UID.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/UID.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/UID.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,127 ----
+ /* UID.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import java.io.DataInput;
+ import java.io.DataOutput;
+ import java.io.IOException;
+ import java.io.Serializable;
+ 
+ public final class UID implements Serializable
+ {
+ private static final long serialVersionUID = 1086053664494604050L;
+ 
+ private static final Object lock = UID.class;
+ private static long baseTime = System.currentTimeMillis();
+ private static short nextCount = Short.MIN_VALUE;
+ // This is sun's algorithm - don't ask me why ...
+ private static final int uniqueNr = (new Object()).hashCode();
+ 
+ private int unique;
+ private long time;
+ private short count;
+ 
+ /**
+  * This is sun's algorithm - don't ask me why ...
+  */
+ public UID() {
+ 	synchronized (lock) {
+ 		if (nextCount == Short.MAX_VALUE) {
+ 			long newtime;
+ 			for (;;) {
+ 				newtime = System.currentTimeMillis();
+ 				if (newtime - baseTime > 1000) {
+ 					break;
+ 				}
+ 				try {
+ 					Thread.sleep(1000);
+ 				}
+ 				catch (InterruptedException _) {
+ 				}
+ 			}
+ 			baseTime = newtime;
+ 			nextCount = Short.MIN_VALUE;
+ 		}
+ 		count = nextCount++;
+ 		unique = uniqueNr;
+ 		time = baseTime;
+ 	}
+ }
+ 
+ public UID(short num) {
+ 	unique = (int)num;
+ 	time = 0;
+ 	count = 0;
+ }
+ 
+ public int hashCode() {
+ 	return (unique);
+ }
+ 
+ public boolean equals(Object obj) {
+ 	if (obj instanceof UID) {
+ 		UID uid = (UID)obj;
+ 		if (this.unique == uid.unique &&
+ 		    this.time == uid.time &&
+ 		    this.count == uid.count) {
+ 			return (true);
+ 		}
+ 	}
+ 	return (false);
+ }
+ 
+ public String toString() {
+ 	return ("[UID: " + unique + "," + time + "," + count + "]");
+ }
+ 
+ public void write(DataOutput out) throws IOException {
+ 	out.writeInt(unique);
+ 	out.writeLong(time);
+ 	out.writeShort(count);
+ }
+ 
+ public static UID read(DataInput in) throws IOException {
+ 	UID id = new UID();
+ 	id.unique = in.readInt();
+ 	id.time = in.readLong();
+ 	id.count = in.readShort();
+ 	return (id);
+ }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/UnicastRemoteObject.java gcc-4.1.0/libjava/classpath/java/rmi/server/UnicastRemoteObject.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/UnicastRemoteObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/UnicastRemoteObject.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,133 ----
+ /* UnicastRemoteObject.java --
+    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.rmi.server;
+ 
+ import gnu.java.rmi.server.UnicastServerRef;
+ 
+ import java.rmi.NoSuchObjectException;
+ import java.rmi.Remote;
+ import java.rmi.RemoteException;
+ 
+ public class UnicastRemoteObject extends RemoteServer
+ {
+ private static final long serialVersionUID = 4974527148936298033L;
+ //The following serialized fields are from Java API Documentation "Serialized form"
+ private int port = 0;
+ private RMIClientSocketFactory csf = null;
+ private RMIServerSocketFactory ssf = null;
+ 
+ protected UnicastRemoteObject() throws RemoteException {
+ 	this(0);
+ }
+ 
+ protected UnicastRemoteObject(int port) throws RemoteException {
+ 	this(port, RMISocketFactory.getSocketFactory(), RMISocketFactory.getSocketFactory());
+ }
+ 
+ protected UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
+   this.port = port;
+   //Is RMIXXXSocketFactory serializable
+   //this.csf = csf;
+   //this.ssf = ssf;
+   this.ref = new UnicastServerRef(new ObjID(), port, ssf);
+   exportObject(this);
+ }
+ 
+ protected UnicastRemoteObject(RemoteRef ref) throws RemoteException {
+ 	super((UnicastServerRef)ref);
+ 	exportObject(this);
+ }
+ 
+ public Object clone() throws CloneNotSupportedException {
+ 	throw new Error("Not implemented");
+ }
+ 
+ public static RemoteStub exportObject(Remote obj) throws RemoteException {
+ 	UnicastServerRef sref = (UnicastServerRef)((RemoteObject)obj).getRef();
+ 	return (sref.exportObject(obj));
+ }
+ 
+   public static Remote exportObject(Remote obj, int port) throws RemoteException 
+   {
+     return exportObject(obj, port, null);
+   }
+   
+   static Remote exportObject(Remote obj, int port, RMIServerSocketFactory ssf) 
+     throws RemoteException 
+   {
+     UnicastServerRef sref = null;
+     if (obj instanceof RemoteObject)
+       sref = (UnicastServerRef)((RemoteObject)obj).getRef ();
+     if(sref == null)
+       {
+ 	sref = new UnicastServerRef(new ObjID (), port, ssf);
+       }
+     Remote stub = sref.exportObject (obj); 
+     addStub(obj, stub);
+     return stub;
+   }
+ 
+   /**
+    * FIXME
+    */
+   public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf, 
+ 				    RMIServerSocketFactory ssf) 
+     throws RemoteException 
+   {
+     return (exportObject(obj, port, ssf));
+   }
+ 
+   public static boolean unexportObject(Remote obj, boolean force) 
+     throws NoSuchObjectException 
+   {
+     if (obj instanceof RemoteObject)
+       {
+ 	deleteStub(obj);
+ 	UnicastServerRef sref = (UnicastServerRef)((RemoteObject)obj).getRef();
+ 	return sref.unexportObject(obj, force);
+       }
+     else
+       {
+ 	//FIX ME
+ 	;
+       }
+     return true;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/Unreferenced.java gcc-4.1.0/libjava/classpath/java/rmi/server/Unreferenced.java
*** gcc-4.0.2/libjava/classpath/java/rmi/server/Unreferenced.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/Unreferenced.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,43 ----
+ /* Unreferenced.java --
+    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.rmi.server;
+ 
+ public interface Unreferenced
+ {
+   void unreferenced();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/rmi/server/package.html gcc-4.1.0/libjava/classpath/java/rmi/server/package.html
*** gcc-4.0.2/libjava/classpath/java/rmi/server/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/rmi/server/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.rmi.server package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.rmi.server</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/AccessControlContext.java gcc-4.1.0/libjava/classpath/java/security/AccessControlContext.java
*** gcc-4.0.2/libjava/classpath/java/security/AccessControlContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/AccessControlContext.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,200 ----
+ /* AccessControlContext.java --- Access Control Context Class
+    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.util.HashSet;
+ 
+ /**
+  * AccessControlContext makes system resource access decsion 
+  * based on permission rights.  
+  *
+  * It is used for a specific context and has only one method
+  * checkPermission. It is similar to AccessController except
+  * that it makes decsions based on the current context instead
+  * of the the current thread.
+  *
+  * It is created by call AccessController.getContext method.
+  *
+  * @author Mark Benvenuto
+  * @since 1.2
+  */
+ public final class AccessControlContext
+ {
+   private final ProtectionDomain[] protectionDomains;
+   private final DomainCombiner combiner;
+ 
+   /**
+    * Construct a new AccessControlContext with the specified
+    * ProtectionDomains. <code>context</code> must not be 
+    * null and duplicates will be removed.
+    *
+    * @param context The ProtectionDomains to use
+    */
+   public AccessControlContext(ProtectionDomain[] context)
+   {
+     HashSet domains = new HashSet (context.length);
+     for (int i = 0; i < context.length; i++)
+       domains.add (context[i]);
+     protectionDomains = (ProtectionDomain[])
+       domains.toArray (new ProtectionDomain[domains.size()]);
+     combiner = null;
+   }
+ 
+   /**
+    * Construct a new AccessControlContext with the specified
+    * {@link ProtectionDomain}s and {@link DomainCombiner}.
+    *
+    * <p>Code calling this constructor must have a {@link
+    * SecurityPermission} of <i>createAccessControlContext</i>.</p>
+    *
+    * @throws SecurityException If the caller does not have permission
+    * to create an access control context.
+    * @since 1.3
+    */
+   public AccessControlContext(AccessControlContext acc,
+ 			      DomainCombiner combiner)
+   {
+     SecurityManager sm = System.getSecurityManager ();
+     if (sm != null)
+       {
+         sm.checkPermission (new SecurityPermission ("createAccessControlContext"));
+       }
+     AccessControlContext acc2 = AccessController.getContext();
+     protectionDomains = combiner.combine (acc2.protectionDomains,
+                                           acc.protectionDomains);
+     this.combiner = combiner;
+   }
+ 
+   AccessControlContext (ProtectionDomain[] domains, AccessControlContext acc,
+                         DomainCombiner combiner)
+   {
+     protectionDomains = combiner.combine (domains, acc.protectionDomains);
+     this.combiner = combiner;
+   }
+ 
+   /**
+    * Returns the Domain Combiner associated with the AccessControlContext
+    *
+    * @return the DomainCombiner
+    */
+   public DomainCombiner getDomainCombiner()
+   {
+     return combiner;
+   }
+ 
+   /**
+    * Determines whether or not the specific permission is granted
+    * depending on the context it is within. 
+    *
+    * @param perm a permission to check
+    *
+    * @throws AccessControlException if the permssion is not permitted
+    */
+   public void checkPermission(Permission perm) throws AccessControlException
+   {
+     if (protectionDomains.length == 0)
+       throw new AccessControlException ("permission " 
+ 					+ perm 
+ 					+ " not granted: no protection domains");
+ 
+     for (int i = 0; i < protectionDomains.length; i++)
+       {
+ 	final ProtectionDomain domain = protectionDomains[i];
+ 	if (!domain.implies(perm))
+ 	  throw new AccessControlException ("permission " 
+ 					    + perm 
+ 					    + " not granted: " 
+ 					    + domain 
+ 					    + " does not imply it.");
+       }
+   }
+ 
+   /**
+    * Checks if two AccessControlContexts are equal.
+    *
+    * It first checks if obj is an AccessControlContext class, and
+    * then checks if each ProtectionDomain matches.
+    *
+    * @param obj The object to compare this class to
+    *
+    * @return true if equal, false otherwise
+    */
+   public boolean equals(Object obj)
+   {
+     if (obj instanceof AccessControlContext)
+       {
+ 	AccessControlContext acc = (AccessControlContext) obj;
+ 
+ 	if (acc.protectionDomains.length != protectionDomains.length)
+ 	  return false;
+ 
+         int i, j;
+         for (i = 0; i < protectionDomains.length; i++)
+           {
+             for (j = 0; j < acc.protectionDomains.length; j++)
+               {
+                 if (acc.protectionDomains[j].equals (protectionDomains[i]))
+                   break;
+               }
+             if (j == acc.protectionDomains.length)
+               return false;
+           }
+         return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Computes a hash code of this class
+    *
+    * @return a hash code representing this class
+    */
+   public int hashCode()
+   {
+     int h = 0;
+     for (int i = 0; i < protectionDomains.length; i++)
+       h ^= protectionDomains[i].hashCode();
+ 
+     return h;
+   }
+ 
+   ProtectionDomain[] getProtectionDomains ()
+   {
+     return protectionDomains;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/AccessControlException.java gcc-4.1.0/libjava/classpath/java/security/AccessControlException.java
*** gcc-4.0.2/libjava/classpath/java/security/AccessControlException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/AccessControlException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /* AccessControlException.java -- Permission is denied
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception is thrown when the <code>AccessController</code> denies
+  * an attempt to perform an operation. This often keeps track of the
+  * permission that was not granted.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see AccessController
+  * @status updated to 1.4
+  */
+ public class AccessControlException extends SecurityException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5138225684096988535L;
+ 
+   /**
+    * The <code>Permission</code> associated with this exception.
+    *
+    * @serial the permission
+    */
+   private final Permission perm;
+ 
+   /**
+    * Create a new instance with a descriptive error message, and a null
+    * <code>Permission</code> object.
+    *
+    * @param msg the descriptive error message
+    */
+   public AccessControlException(String msg)
+   {
+     this(msg, null);
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message and an associated
+    * <code>Permission</code> object.
+    *
+    * @param msg the descriptive error message
+    * @param perm the permission that caused this
+    */
+   public AccessControlException(String msg, Permission perm)
+   {
+     super(msg);
+     this.perm = perm;
+   }
+ 
+   /**
+    * This method returns the <code>Permission</code> object that caused
+    * this exception to be thrown.
+    *
+    * @return the denied permission, or null
+    */
+   public Permission getPermission()
+   {
+     return perm;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/AccessController.java gcc-4.1.0/libjava/classpath/java/security/AccessController.java
*** gcc-4.0.2/libjava/classpath/java/security/AccessController.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/AccessController.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,229 ----
+ /* AccessController.java --- Access control context and permission checker
+    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * Access control context and permission checker.
+  * Can check permissions in the access control context of the current thread
+  * through the <code>checkPermission()</code> method.
+  * Manipulates the access control context for code that needs to be executed
+  * the protection domain of the calling class (by explicitly ignoring the
+  * context of the calling code) in the <code>doPrivileged()</code> methods.
+  * And provides a <code>getContext()</code> method which gives the access
+  * control context of the current thread that can be used for checking
+  * permissions at a later time and/or in another thread.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @since 1.2
+  */
+ public final class AccessController
+ {
+   /**
+    * This class only has static methods so there is no public contructor.
+    */
+   private AccessController()
+   {
+   }
+ 
+   /**
+    * Checks wether the access control context of the current thread allows
+    * the given Permission. Throws an <code>AccessControlException</code>
+    * when the permission is not allowed in the current context. Otherwise
+    * returns silently without throwing an exception.
+    *
+    * @param perm the permission to be checked.
+    * @exception AccessControlException thrown if the current context does not
+    * allow the given permission.
+    */
+   public static void checkPermission(Permission perm)
+     throws AccessControlException
+   {
+     getContext().checkPermission(perm);
+   }
+ 
+   /**
+    * Calls the <code>run()</code> method of the given action with as
+    * (initial) access control context only the protection domain of the
+    * calling class. Calls to <code>checkPermission()</code> in the
+    * <code>run()</code> method ignore all earlier protection domains of
+    * classes in the call chain. Note that the protection domains of classes
+    * called by the code in the <code>run()</code> method are not ignored.
+    *
+    * @param action the <code>PrivilegedAction</code> whose <code>run()</code>
+    * should be be called.
+    * @return the result of the <code>action.run()</code> method.
+    */
+   public static Object doPrivileged(PrivilegedAction action)
+   {
+     VMAccessController.pushContext(null);
+     try
+       {
+         return action.run();
+       }
+     finally
+       {
+         VMAccessController.popContext();
+       }
+   }
+ 
+   /**
+    * Calls the <code>run()</code> method of the given action with as
+    * (initial) access control context the given context combined with the
+    * protection domain of the calling class. Calls to
+    * <code>checkPermission()</code> in the <code>run()</code> method ignore
+    * all earlier protection domains of classes in the call chain, but add
+    * checks for the protection domains given in the supplied context.
+    *
+    * @param action the <code>PrivilegedAction</code> whose <code>run()</code>
+    * should be be called.
+    * @param context the <code>AccessControlContext</code> whose protection
+    * domains should be added to the protection domain of the calling class.
+    * @return the result of the <code>action.run()</code> method.
+    */
+   public static Object doPrivileged(PrivilegedAction action,
+                                     AccessControlContext context)
+   {
+     VMAccessController.pushContext(context);
+     try
+       {
+         return action.run();
+       }
+     finally
+       {
+         VMAccessController.popContext();
+       }
+   }
+ 
+   /**
+    * Calls the <code>run()</code> method of the given action with as
+    * (initial) access control context only the protection domain of the
+    * calling class. Calls to <code>checkPermission()</code> in the
+    * <code>run()</code> method ignore all earlier protection domains of
+    * classes in the call chain. Note that the protection domains of classes
+    * called by the code in the <code>run()</code> method are not ignored.
+    * If the <code>run()</code> method throws an exception then this method
+    * will wrap that exception in an <code>PrivilegedActionException</code>.
+    *
+    * @param action the <code>PrivilegedExceptionAction</code> whose
+    * <code>run()</code> should be be called.
+    * @return the result of the <code>action.run()</code> method.
+    * @exception PrivilegedActionException wrapped around any checked exception
+    * that is thrown in the <code>run()</code> method.
+    */
+   public static Object doPrivileged(PrivilegedExceptionAction action)
+     throws PrivilegedActionException
+   {
+     VMAccessController.pushContext(null);
+     try
+       {
+         return action.run();
+       }
+     catch (RuntimeException e)
+       {
+ 	throw e;
+       }
+     catch (Exception e)
+       {
+         throw new PrivilegedActionException(e);
+       }
+     finally
+       {
+         VMAccessController.popContext();
+       }
+   }
+ 
+   /**
+    * Calls the <code>run()</code> method of the given action with as
+    * (initial) access control context the given context combined with the
+    * protection domain of the calling class. Calls to
+    * <code>checkPermission()</code> in the <code>run()</code> method ignore
+    * all earlier protection domains of classes in the call chain, but add
+    * checks for the protection domains given in the supplied context.
+    * If the <code>run()</code> method throws an exception then this method
+    * will wrap that exception in an <code>PrivilegedActionException</code>.
+    *
+    * @param action the <code>PrivilegedExceptionAction</code> whose
+    * <code>run()</code> should be be called.
+    * @param context the <code>AccessControlContext</code> whose protection
+    * domains should be added to the protection domain of the calling class.
+    * @return the result of the <code>action.run()</code> method.
+    * @exception PrivilegedActionException wrapped around any checked exception
+    * that is thrown in the <code>run()</code> method.
+    */
+   public static Object doPrivileged(PrivilegedExceptionAction action,
+                                     AccessControlContext context)
+     throws PrivilegedActionException
+   {
+     VMAccessController.pushContext(context);
+     try
+       {
+         return action.run();
+       }
+     catch (RuntimeException e)
+       {
+ 	throw e;
+       }
+     catch (Exception e)
+       {
+         throw new PrivilegedActionException(e);
+       }
+     finally
+       {
+         VMAccessController.popContext();
+       }
+   }
+ 
+   /**
+    * Returns the complete access control context of the current thread.
+    * The returned object encompasses all {@link ProtectionDomain} objects
+    * for all classes in the current call stack, or the set of protection
+    * domains until the last call to {@link
+    * #doPrivileged(java.security.PrivilegedAction)}.
+    *
+    * <p>Additionally, if a call was made to {@link
+    * #doPrivileged(java.security.PrivilegedAction,java.security.AccessControlContext)}
+    * that supplied an {@link AccessControlContext}, then that context
+    * will be intersected with the calculated one.
+    *
+    * @return The context.
+    */
+   public static AccessControlContext getContext()
+   {
+     return VMAccessController.getContext();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/AlgorithmParameterGenerator.java gcc-4.1.0/libjava/classpath/java/security/AlgorithmParameterGenerator.java
*** gcc-4.0.2/libjava/classpath/java/security/AlgorithmParameterGenerator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/AlgorithmParameterGenerator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,302 ----
+ /* AlgorithmParameterGenerator.java --- Algorithm Parameter Generator
+    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * <p>The <code>AlgorithmParameterGenerator</code> class is used to generate a
+  * set of parameters to be used with a certain algorithm. Parameter generators
+  * are constructed using the <code>getInstance()</code> factory methods (static
+  * methods that return instances of a given class).</p>
+  *
+  * <p>The object that will generate the parameters can be initialized in two
+  * different ways: in an algorithm-independent manner, or in an
+  * algorithm-specific manner:</p>
+  *
+  * <ul>
+  *  <li>The algorithm-independent approach uses the fact that all parameter
+  *  generators share the concept of a <i>"size"</i> and a <i>source of
+  *  randomness</i>. The measure of <i>size</i> is universally shared by all
+  *  algorithm parameters, though it is interpreted differently for different
+  *  algorithms. For example, in the case of parameters for the <i>DSA</i>
+  *  algorithm, <i>"size"</i> corresponds to the size of the prime modulus (in
+  *  bits). When using this approach, algorithm-specific parameter generation
+  *  values - if any - default to some standard values, unless they can be
+  *  derived from the specified size.</li>
+  *  <li>The other approach initializes a parameter generator object using
+  *  algorithm-specific semantics, which are represented by a set of
+  *  algorithm-specific parameter generation values. To generate Diffie-Hellman
+  *  system parameters, for example, the parameter generation values usually
+  *  consist of the size of the prime modulus and the size of the random
+  *  exponent, both specified in number of bits.</li>
+  * </ul>
+  *
+  * <p>In case the client does not explicitly initialize the
+  * <code>AlgorithmParameterGenerator</code> (via a call to an <code>init()</code>
+  * method), each provider must supply (and document) a default initialization.
+  * For example, the <b>GNU</b> provider uses a default modulus prime size of
+  * <code>1024</code> bits for the generation of <i>DSA</i> parameters.
+  *
+  * @author Mark Benvenuto
+  * @since 1.2
+  * @see AlgorithmParameters
+  * @see AlgorithmParameterSpec
+  */
+ public class AlgorithmParameterGenerator
+ {
+   /** Service name for algorithm parameter generators. */
+   private static final String ALGORITHM_PARAMETER_GENERATOR =
+     "AlgorithmParameterGenerator";
+ 
+   private AlgorithmParameterGeneratorSpi paramGenSpi;
+   private Provider provider;
+   private String algorithm;
+ 
+   /**
+    * Creates an <code>AlgorithmParameterGenerator</code> object.
+    *
+    * @param paramGenSpi the delegate.
+    * @param provider the provider.
+    * @param algorithm the algorithm.
+    */
+   protected AlgorithmParameterGenerator(AlgorithmParameterGeneratorSpi
+ 					paramGenSpi, Provider provider,
+ 					String algorithm)
+   {
+     this.paramGenSpi = paramGenSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+   }
+ 
+   /**
+    * Returns the standard name of the algorithm this parameter generator is
+    * associated with.
+    *
+    * @return the string name of the algorithm.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Generates an <code>AlgorithmParameterGenerator</code> object that
+    * implements the specified digest algorithm. If the default provider package
+    * provides an implementation of the requested digest algorithm, an instance
+    * of <code>AlgorithmParameterGenerator</code> containing that implementation
+    * is returned. If the algorithm is not available in the default package,
+    * other packages are searched.
+    *
+    * @param algorithm the string name of the algorithm this parameter generator
+    * is associated with.
+    * @return the new <code>AlgorithmParameterGenerator</code> object.
+    * @throws NoSuchAlgorithmException if the algorithm is not available in the
+    * environment.
+    */
+   public static AlgorithmParameterGenerator getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+     for (int i = 0; i < p.length; i++)
+       try
+         {
+           return getInstance(algorithm, p[i]);
+         }
+       catch (NoSuchAlgorithmException e)
+ 	{
+ 	  // Ignore.
+ 	}
+ 
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Generates an <code>AlgorithmParameterGenerator</code> object for the
+    * requested algorithm, as supplied from the specified provider, if such a
+    * parameter generator is available from the provider.
+    *
+    * @param algorithm the string name of the algorithm.
+    * @param provider the string name of the provider.
+    * @return the new <code>AlgorithmParameterGenerator</code> object.
+    * @throws NoSuchAlgorithmException if the <code>algorithm</code> is not
+    * available from the <code>provider</code>.
+    * @throws NoSuchProviderException if the <code>provider</code> is not
+    * available in the environment.
+    * @throws IllegalArgumentException if the <code>provider</code> name is
+    * <code>null</code> or empty.
+    * @see Provider
+    */
+   public static AlgorithmParameterGenerator getInstance(String algorithm,
+ 							String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     if (provider == null || provider.length() == 0)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+ 
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Generates an AlgorithmParameterGenerator object for the requested
+    * algorithm, as supplied from the specified provider, if such a parameter
+    * generator is available from the provider. Note: the <code>provider</code>
+    * doesn't have to be registered.
+    *
+    * @param algorithm the string name of the algorithm.
+    * @param provider the provider.
+    * @return the new AlgorithmParameterGenerator object.
+    * @throws NoSuchAlgorithmException if the algorithm is not available from
+    * the provider.
+    * @throws IllegalArgumentException if the provider is null.
+    * @since 1.4
+    * @see Provider
+    */
+   public static AlgorithmParameterGenerator getInstance(String algorithm,
+                                                         Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     try
+       {
+ 	return new AlgorithmParameterGenerator(
+ 	  (AlgorithmParameterGeneratorSpi) Engine.getInstance(
+ 	    ALGORITHM_PARAMETER_GENERATOR, algorithm, provider),
+ 	  provider, algorithm);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+ 	throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+ 	throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   /**
+    * Returns the provider of this algorithm parameter generator object.
+    *
+    * @return the provider of this algorithm parameter generator object.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Initializes this parameter generator for a certain <i>size</i>. To create
+    * the parameters, the {@link SecureRandom} implementation of the
+    * highest-priority installed provider is used as the source of randomness.
+    * (If none of the installed providers supply an implementation of
+    * {@link SecureRandom}, a system-provided source of randomness is used.)
+    *
+    * @param size the size (number of bits).
+    */
+   public final void init(int size)
+   {
+     init(size, new SecureRandom());
+   }
+ 
+   /**
+    * Initializes this parameter generator for a certain size and source of
+    * randomness.
+    *
+    * @param size the size (number of bits).
+    * @param random the source of randomness.
+    */
+   public final void init(int size, SecureRandom random)
+   {
+     paramGenSpi.engineInit(size, random);
+   }
+ 
+   /**
+    * Initializes this parameter generator with a set of algorithm-specific
+    * parameter generation values. To generate the parameters, the {@link
+    * SecureRandom} implementation of the highest-priority installed provider is
+    * used as the source of randomness. (If none of the installed providers
+    * supply an implementation of {@link SecureRandom}, a system-provided source
+    * of randomness is used.)
+    *
+    * @param genParamSpec the set of algorithm-specific parameter generation
+    * values.
+    * @throws InvalidAlgorithmParameterException if the given parameter
+    * generation values are inappropriate for this parameter generator.
+    */
+   public final void init(AlgorithmParameterSpec genParamSpec)
+     throws InvalidAlgorithmParameterException
+   {
+     init(genParamSpec, new SecureRandom());
+   }
+ 
+   /**
+    * Initializes this parameter generator with a set of algorithm-specific
+    * parameter generation values.
+    *
+    * @param genParamSpec the set of algorithm-specific parameter generation
+    * values.
+    * @param random the source of randomness.
+    * @throws InvalidAlgorithmParameterException if the given parameter
+    * generation values are inappropriate for this parameter generator.
+    */
+   public final void init(AlgorithmParameterSpec genParamSpec,
+                          SecureRandom random)
+     throws InvalidAlgorithmParameterException
+   {
+     paramGenSpi.engineInit(genParamSpec, random);
+   }
+ 
+   /**
+    * Generates the parameters.
+    *
+    * @return the new {@link AlgorithmParameters} object.
+    */
+   public final AlgorithmParameters generateParameters()
+   {
+     return paramGenSpi.engineGenerateParameters();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/AlgorithmParameterGeneratorSpi.java gcc-4.1.0/libjava/classpath/java/security/AlgorithmParameterGeneratorSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/AlgorithmParameterGeneratorSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/AlgorithmParameterGeneratorSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* AlgorithmParameterGeneratorSpi.java --- Algorithm Parameter Generator SPI
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+    AlgorithmParameterGeneratorSpi is the Service Provider 
+    Interface for the AlgorithmParameterGenerator class. 
+    This class is used to generate the algorithm parameters
+    for a specific algorithm.
+ 
+    @since JDK 1.2
+    @author Mark Benvenuto
+  */
+ public abstract class AlgorithmParameterGeneratorSpi
+ {
+ 
+   /**
+      Constructs a new AlgorithmParameterGeneratorSpi
+    */
+   public AlgorithmParameterGeneratorSpi()
+   {
+   }
+ 
+   /**
+      Initializes the parameter generator with the specified size
+      and SecureRandom
+ 
+      @param size the size( in number of bits) 
+      @param random the SecureRandom class to use for randomness
+    */
+   protected abstract void engineInit(int size, SecureRandom random);
+ 
+   /**
+      Initializes the parameter generator with the specified
+      AlgorithmParameterSpec and SecureRandom classes.
+ 
+      If genParamSpec is an invalid AlgorithmParameterSpec for this
+      AlgorithmParameterGeneratorSpi then it throws
+      InvalidAlgorithmParameterException
+ 
+      @param genParamSpec the AlgorithmParameterSpec class to use
+      @param random the SecureRandom class to use for randomness
+ 
+      @throws InvalidAlgorithmParameterException genParamSpec is invalid
+    */
+   protected abstract void engineInit(AlgorithmParameterSpec genParamSpec,
+ 				     SecureRandom random) throws
+     InvalidAlgorithmParameterException;
+ 
+ 
+   /**
+      Generate a new set of AlgorithmParameters.
+ 
+      @returns a new set of algorithm parameters
+    */
+   protected abstract AlgorithmParameters engineGenerateParameters();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/AlgorithmParameters.java gcc-4.1.0/libjava/classpath/java/security/AlgorithmParameters.java
*** gcc-4.0.2/libjava/classpath/java/security/AlgorithmParameters.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/AlgorithmParameters.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,340 ----
+ /* AlgorithmParameters.java --- Algorithm Parameters Implementation Class
+    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.io.IOException;
+ import java.security.spec.AlgorithmParameterSpec;
+ import java.security.spec.InvalidParameterSpecException;
+ 
+ /**
+  * <p>This class is used as an opaque representation of cryptographic
+  * parameters.</p>
+  *
+  * <p>An <code>AlgorithmParameters</code> object for managing the parameters
+  * for a particular algorithm can be obtained by calling one of the
+  * <code>getInstance()</code> factory methods (static methods that return
+  * instances of a given class).</p>
+  *
+  * <p>There are two ways to request such an implementation: by specifying
+  * either just an algorithm name, or both an algorithm name and a package
+  * provider.</p>
+  *
+  * <ul>
+  *    <li>If just an algorithm name is specified, the system will determine if
+  *    there is an AlgorithmParameters implementation for the algorithm requested
+  *    available in the environment, and if there is more than one, if there is
+  *    a preferred one.</li>
+  *    <li>If both an algorithm name and a package provider are specified, the
+  *    system will determine if there is an implementation in the package
+  *    requested, and throw an exception if there is not.</li>
+  * </ul>
+  *
+  * <p>Once an <code>AlgorithmParameters</code> object is returned, it must be
+  * initialized via a call to <code>init()</code>, using an appropriate
+  * parameter specification or parameter encoding.</p>
+  *
+  * <p>A transparent parameter specification is obtained from an
+  * <code>AlgorithmParameters</code> object via a call to
+  * <code>getParameterSpec()</code>, and a byte encoding of the parameters is
+  * obtained via a call to <code>getEncoded()</code>.</p>
+  *
+  * @author Mark Benvenuto
+  * @since 1.2
+  * @see AlgorithmParameterSpec
+  * @see java.security.spec.DSAParameterSpec
+  * @see KeyPairGenerator
+  */
+ public class AlgorithmParameters
+ {
+   /** Service name for algorithm parameters. */
+   private static final String ALGORITHM_PARAMETERS = "AlgorithmParameters";
+ 
+   private AlgorithmParametersSpi paramSpi;
+   private Provider provider;
+   private String algorithm;
+ 
+   /**
+    * Creates an <code>AlgorithmParameters</code> object.
+    *
+    * @param paramSpi the delegate.
+    * @param provider the provider.
+    * @param algorithm the algorithm.
+    */
+   protected AlgorithmParameters(AlgorithmParametersSpi paramSpi,
+                                 Provider provider, String algorithm)
+   {
+     this.paramSpi = paramSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+   }
+ 
+   /**
+    * Returns the name of the algorithm associated with this parameter object.
+    *
+    * @return the algorithm name.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * <p>Generates a parameter object for the specified algorithm.</p>
+    *
+    * <p>If the default provider package provides an implementation of the
+    * requested algorithm, an instance of <code>AlgorithmParameters</code>
+    * containing that implementation is returned. If the algorithm is not
+    * available in the default package, other packages are searched.</p>
+    *
+    * <p>The returned parameter object must be initialized via a call to
+    * <code>init()</code>, using an appropriate parameter specification or
+    * parameter encoding.</p>
+    *
+    * @param algorithm the name of the algorithm requested.
+    * @return the new parameter object.
+    * @throws NoSuchAlgorithmException if the algorithm is not available in the
+    * environment.
+    */
+   public static AlgorithmParameters getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+ 
+     for (int i = 0; i < p.length; i++)
+       try
+         {
+           return getInstance(algorithm, p[i]);
+         }
+       catch (NoSuchAlgorithmException e)
+ 	{
+ 	  // Ignore this.
+ 	}
+ 
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * <p>Generates a parameter object for the specified algorithm, as supplied
+    * by the specified provider, if such an algorithm is available from the
+    * provider.</p>
+    *
+    * <p>The returned parameter object must be initialized via a call to
+    * <code>init()</code>, using an appropriate parameter specification or
+    * parameter encoding.</p>
+    *
+    * @param algorithm the name of the algorithm requested.
+    * @param provider the name of the provider.
+    * @return the new parameter object.
+    * @throws NoSuchAlgorithmException if the algorithm is not available in the
+    * package supplied by the requested provider.
+    * @throws NoSuchProviderException if the provider is not available in the
+    * environment.
+    * @throws IllegalArgumentException if the provider name is null or empty.
+    * @see Provider
+    */
+   public static AlgorithmParameters getInstance(String algorithm, String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     if (provider == null || provider.length() == 0)
+       throw new IllegalArgumentException("Illegal provider");
+     
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+ 
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Generates an <code>AlgorithmParameterGenerator</code> object for the
+    * requested algorithm, as supplied from the specified provider, if such a
+    * parameter generator is available from the provider. Note: the
+    * <code>provider</code> doesn't have to be registered.
+    *
+    * @param algorithm the string name of the algorithm.
+    * @param provider the provider.
+    * @return the new <code>AlgorithmParameterGenerator</code> object.
+    * @throws NoSuchAlgorithmException if the <code>algorithm</code> is not
+    * available from the <code>provider</code>.
+    * @throws IllegalArgumentException if the <code>provider</code> is
+    * <code>null</code>.
+    * @since 1.4
+    */
+   public static AlgorithmParameters getInstance(String algorithm,
+                                                 Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     try
+       {
+ 	return new AlgorithmParameters((AlgorithmParametersSpi)
+ 	  Engine.getInstance(ALGORITHM_PARAMETERS, algorithm, provider),
+ 	  provider, algorithm);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+ 	throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+ 	throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   /**
+    * Returns the provider of this parameter object.
+    *
+    * @return the provider of this parameter object.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Initializes this parameter object using the parameters specified in
+    * <code>paramSpec</code>.
+    *
+    * @param paramSpec the parameter specification.
+    * @throws InvalidParameterSpecException if the given parameter specification
+    * is inappropriate for the initialization of this parameter object, or if
+    * this parameter object has already been initialized.
+    */
+   public final void init(AlgorithmParameterSpec paramSpec)
+     throws InvalidParameterSpecException
+   {
+     paramSpi.engineInit(paramSpec);
+   }
+ 
+   /**
+    * Imports the specified parameters and decodes them according to the primary
+    * decoding format for parameters. The primary decoding format for parameters
+    * is ASN.1, if an ASN.1 specification for this type of parameters exists.
+    *
+    * @param params the encoded parameters.
+    * @throws IOException on decoding errors, or if this parameter object has
+    * already been initialized.
+    */
+   public final void init(byte[]params) throws IOException
+   {
+     paramSpi.engineInit(params);
+   }
+ 
+   /**
+    * Imports the parameters from params and decodes them according to the
+    * specified decoding scheme. If <code>format</code> is <code>null</code>,
+    * the primary decoding format for parameters is used. The primary decoding
+    * format is ASN.1, if an ASN.1 specification for these parameters exists.
+    *
+    * @param params the encoded parameters.
+    * @param format the name of the decoding scheme.
+    * @throws IOException on decoding errors, or if this parameter object has
+    * already been initialized.
+    */
+   public final void init(byte[]params, String format) throws IOException
+   {
+     paramSpi.engineInit(params, format);
+   }
+ 
+   /**
+    * Returns a (transparent) specification of this parameter object.
+    * <code>paramSpec</code> identifies the specification class in which the
+    * parameters should be returned. It could, for example, be
+    * <code>DSAParameterSpec.class</code>, to indicate that the parameters should
+    * be returned in an instance of the {@link java.security.spec.DSAParameterSpec}
+    * class.
+    *
+    * @param paramSpec the specification class in which the parameters should be
+    * returned.
+    * @return the parameter specification.
+    * @throws InvalidParameterSpecException if the requested parameter
+    * specification is inappropriate for this parameter object, or if this
+    * parameter object has not been initialized.
+    */
+   public final AlgorithmParameterSpec getParameterSpec(Class paramSpec)
+     throws InvalidParameterSpecException
+   {
+     return paramSpi.engineGetParameterSpec(paramSpec);
+   }
+ 
+   /**
+    * Returns the parameters in their primary encoding format. The primary
+    * encoding format for parameters is ASN.1, if an ASN.1 specification for
+    * this type of parameters exists.
+    *
+    * @return the parameters encoded using their primary encoding format.
+    * @throws IOException on encoding errors, or if this parameter object has not
+    * been initialized.
+    */
+   public final byte[] getEncoded() throws IOException
+   {
+     return paramSpi.engineGetEncoded();
+   }
+ 
+   /**
+    * Returns the parameters encoded in the specified scheme. If format is
+    * <code>null</code>, the primary encoding format for parameters is used. The
+    * primary encoding format is ASN.1, if an ASN.1 specification for these
+    * parameters exists.
+    *
+    * @param format the name of the encoding format.
+    * @return the parameters encoded using the specified encoding scheme.
+    * @throws IOException on encoding errors, or if this parameter object has
+    * not been initialized.
+    */
+   public final byte[] getEncoded(String format) throws IOException
+   {
+     return paramSpi.engineGetEncoded(format);
+   }
+ 
+   /**
+    * Returns a formatted string describing the parameters.
+    *
+    * @return a formatted string describing the parameters, or <code>null</code>
+    * if this parameter object has not been initialized.
+    */
+   public final String toString()
+   {
+     return paramSpi.engineToString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/AlgorithmParametersSpi.java gcc-4.1.0/libjava/classpath/java/security/AlgorithmParametersSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/AlgorithmParametersSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/AlgorithmParametersSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,149 ----
+ /* AlgorithmParametersSpi.java --- Algorithm Parameters SPI
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.io.IOException;
+ import java.security.spec.AlgorithmParameterSpec;
+ import java.security.spec.InvalidParameterSpecException;
+ 
+ /**
+  * AlgorithmParametersSpi is the Service Provider Interface
+  * for the Algorithm Parameters class. This class is used
+  * to manage the algorithm parameters.
+  *
+  * @since 1.2
+  * @author Mark Benvenuto
+  */
+ public abstract class AlgorithmParametersSpi
+ {
+   /**
+    * Creates a new instance of AlgorithmParametersSpi
+    */
+   public AlgorithmParametersSpi()
+   {
+   }
+ 
+   /**
+    * Initializes the engine with the specified 
+    * AlgorithmParameterSpec class.
+    *
+    * @param paramSpec A AlgorithmParameterSpec to initialize with
+    *
+    * @throws InvalidParameterSpecException For an inapporiate
+    * ParameterSpec class
+    */
+   protected abstract void engineInit(AlgorithmParameterSpec paramSpec)
+     throws InvalidParameterSpecException;
+ 
+   /**
+    * Initializes the engine with the specified 
+    * parameters stored in the byte array and decodes them
+    * according to the ASN.1 specification. If the ASN.1
+    * specification exists then it succeeds or else it throws
+    * IOException.
+    *
+    * @param params Parameters to initialize with
+    *
+    * @throws IOException Decoding Error
+    */
+   protected abstract void engineInit(byte[]params) throws IOException;
+ 
+   /**
+    * Initializes the engine with the specified 
+    * parameters stored in the byte array and decodes them
+    * according to the specified decoding specification. 
+    * If format is null, then it is decoded using the ASN.1 
+    * specification if it exists or else it throws
+    * IOException.
+    *
+    * @param params Parameters to initialize with
+    * @param format Name of decoding format to use
+    *
+    * @throws IOException Decoding Error
+    */
+   protected abstract void engineInit(byte[]params, String format)
+     throws IOException;
+ 
+ 
+   /**
+    * Returns a specification of this AlgorithmParameters object.
+    * paramSpec identifies the class to return the AlgortihmParameters
+    * in.
+    *
+    * @param paramSpec Class to return AlgorithmParameters in
+    *
+    * @return the parameter specification
+    *
+    * @throws InvalidParameterSpecException if the paramSpec is an
+    * invalid parameter class
+    */
+   protected abstract AlgorithmParameterSpec engineGetParameterSpec(Class
+ 								   paramSpec)
+     throws InvalidParameterSpecException;
+ 
+ 
+   /**
+    * Returns the parameters in the default encoding format. 
+    * The primary encoding format is ASN.1 format if it exists
+    * for the specified type.
+    *
+    * @return byte array representing the parameters
+    */
+   protected abstract byte[] engineGetEncoded() throws IOException;
+ 
+ 
+   /**
+    * Returns the parameters in the specified encoding format. 
+    * If <code>format</code> is <code>null</code> then the 
+    * primary encoding format is used, the ASN.1 format, 
+    * if it exists for the specified type.
+    *
+    * @return byte array representing the parameters
+    */
+   protected abstract byte[] engineGetEncoded(String format)
+     throws IOException;
+ 
+   /**
+    * Returns a string describing the parameters in the 
+    * AlgorithmParametersSpi class.
+    *
+    * @return A string representing the format of the parameters.
+    */
+   protected abstract String engineToString();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/AllPermission.java gcc-4.1.0/libjava/classpath/java/security/AllPermission.java
*** gcc-4.0.2/libjava/classpath/java/security/AllPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/AllPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,198 ----
+ /* AllPermission.java -- Permission to do anything
+    Copyright (C) 1998, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import gnu.java.util.EmptyEnumeration;
+ 
+ import java.util.Collections;
+ import java.util.Enumeration;
+ 
+ /**
+  * This class is a permission that implies all other permissions.  Granting
+  * this permission effectively grants all others.  Extreme caution should
+  * be exercised in granting this permission.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see AccessController
+  * @see Permissions
+  * @see SecurityManager
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public final class AllPermission extends Permission
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -2916474571451318075L;
+ 
+   /**
+    * Create a new AllPermission object.
+    */
+   public AllPermission()
+   {
+     super("*");
+   }
+ 
+   /**
+    * Create a new AllPermission object. The parameters are ignored, as all
+    * permission implies ALL PERMISSION.
+    *
+    * @param name ignored
+    * @param actions ignored
+    */
+   public AllPermission(String name, String actions)
+   {
+     super("*");
+   }
+ 
+   /**
+    * This method always returns <code>true</code> to indicate that this
+    * permission always implies that any other permission is also granted.
+    *
+    * @param perm ignored
+    * @return true, the permission is implied
+    */
+   public boolean implies(Permission perm)
+   {
+     return true;
+   }
+ 
+   /**
+    * Checks an object for equality. All AllPermissions are equal.
+    *
+    * @param obj the <code>Object</code> to test for equality
+    */
+   public boolean equals(Object obj)
+   {
+     return obj instanceof AllPermission;
+   }
+ 
+   /**
+    * This method returns a hash code for this object. This returns 1.
+    *
+    * @return a hash value for this object
+    */
+   public int hashCode()
+   {
+     return 1;
+   }
+ 
+   /**
+    * This method returns the list of actions associated with this object.
+    * This will always be the empty string ("") for this class.
+    *
+    * @return the action list
+    */
+   public String getActions()
+   {
+     return "";
+   }
+ 
+   /**
+    * Returns a PermissionCollection which can hold AllPermission.
+    *
+    * @return a permission collection
+    */
+   public PermissionCollection newPermissionCollection()
+   {
+     return new AllPermissionCollection();
+   }
+ 
+   /**
+    * Implements AllPermission.newPermissionCollection, and obeys serialization
+    * of JDK.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class AllPermissionCollection extends PermissionCollection
+   {
+     /**
+      * Compatible with JDK 1.1+.
+      */
+     private static final long serialVersionUID = -4023755556366636806L;
+ 
+     /**
+      * Whether an AllPermission has been added to the collection.
+      *
+      * @serial if all permission is in the collection yet
+      */
+     private boolean all_allowed;
+ 
+     /**
+      * Add an AllPermission.
+      *
+      * @param perm the permission to add
+      * @throws IllegalArgumentException if perm is not an AllPermission
+      * @throws SecurityException if the collection is read-only
+      */
+     public void add(Permission perm)
+     {
+       if (isReadOnly())
+         throw new SecurityException();
+       if (! (perm instanceof AllPermission))
+         throw new IllegalArgumentException();
+       all_allowed = true;
+     }
+ 
+     /**
+      * Returns true if this collection implies a permission.
+      *
+      * @param perm the permission to check
+      * @return true if this collection contains an AllPermission
+      */
+     public boolean implies(Permission perm)
+     {
+       return all_allowed;
+     }
+ 
+     /**
+      * Returns an enumeration of the elements in the collection.
+      *
+      * @return the elements in the collection
+      */
+     public Enumeration elements()
+     {
+       return all_allowed
+         ? Collections.enumeration(Collections.singleton(new AllPermission()))
+         : EmptyEnumeration.getInstance();
+     }
+   } // class AllPermissionCollection
+ } // class AllPermission
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/BasicPermission.java gcc-4.1.0/libjava/classpath/java/security/BasicPermission.java
*** gcc-4.0.2/libjava/classpath/java/security/BasicPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/BasicPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,308 ----
+ /* BasicPermission.java -- implements a simple named permission
+    Copyright (C) 1998, 1999, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ 
+ /**
+  * This class implements a simple model for named permissions without an
+  * associated action list.  That is, either the named permission is granted
+  * or it is not.
+  *
+  * <p>It also supports trailing wildcards to allow the easy granting of
+  * permissions in a hierarchical fashion.  (For example, the name "org.gnu.*"
+  * might grant all permissions under the "org.gnu" permissions hierarchy).
+  * The only valid wildcard character is a '*' which matches anything. It
+  * must be the rightmost element in the permission name and must follow a
+  * '.' or else the Permission name must consist of only a '*'. Any other
+  * occurrence of a '*' is not valid.
+  *
+  * <p>This class ignores the action list.  Subclasses can choose to implement
+  * actions on top of this class if desired.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Permission
+  * @see Permissions
+  * @see PermissionCollection
+  * @see RuntimePermission
+  * @see SecurityPermission
+  * @see PropertyPermission
+  * @see AWTPermission
+  * @see NetPermission
+  * @see SecurityManager
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class BasicPermission extends java.security.Permission
+   implements Serializable
+   // FIXME extends with fully qualified classname as workaround for gcj 3.3.
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 6279438298436773498L;
+ 
+   /**
+    * Create a new instance with the specified permission name. If the
+    * name is empty an exception is thrown.
+    *
+    * @param name the name of this permission
+    * @throws NullPointerException if name is null
+    * @throws IllegalArgumentException if name is invalid
+    */
+   public BasicPermission(String name)
+   {
+     super(name);
+ 
+     // This routine used to check for illegal wildcards, but no such
+     // requirement exists in the specification and Sun's runtime
+     // doesn't appear to do it.
+ 
+     if ("".equals(name))
+       throw new IllegalArgumentException("Empty name");
+   }
+ 
+   /**
+    * Create a new instance with the specified permission name. If the name
+    * is empty, or contains an illegal wildcard character, an exception is
+    * thrown. The actions parameter is ignored.
+    *
+    * @param name the name of this permission
+    * @param actions ignored
+    * @throws NullPointerException if name is null
+    * @throws IllegalArgumentException if name is invalid
+    */
+   public BasicPermission(String name, String actions)
+   {
+     this(name);
+   }
+ 
+   /**
+    * This method tests to see if the specified permission is implied by this
+    * permission.  This will be true if the following conditions are met:<ul>
+    * <li>The specified object is an instance of the same class as this
+    * object.</li>
+    * <li>The name of the specified permission is implied by this permission's
+    * name based on wildcard matching. For example, "a.*" implies "a.b".</li>
+    * </ul>
+    *
+    * @param perm the <code>Permission</code> object to test against
+    * @return true if the specified permission is implied
+    */
+   public boolean implies(Permission perm)
+   {
+     if (! getClass().isInstance(perm))
+       return false;
+ 
+     String otherName = perm.getName();
+     String name = getName();
+ 
+     if (name.equals(otherName))
+       return true;
+ 
+     int last = name.length() - 1;
+     return name.charAt(last) == '*'
+       && otherName.startsWith(name.substring(0, last));
+   }
+ 
+   /**
+    * This method tests to see if this object is equal to the specified
+    * <code>Object</code>.  This will be true if and only if the specified
+    * object meets the following conditions:<ul>
+    * <li>It is an instance of the same class as this.</li>
+    * <li>It has the same name as this permission.</li>
+    * </ul>
+    *
+    * @param obj the <code>Object</code> to test for equality
+    * @return true if obj is semantically equal to this
+    */
+   public boolean equals(Object obj)
+   {
+     return getClass().isInstance(obj)
+       && getName().equals(((BasicPermission) obj).getName());
+   }
+ 
+   /**
+    * This method returns a hash code for this permission object.  The hash
+    * code returned is the value returned by calling the <code>hashCode</code>
+    * method on the <code>String</code> that is the name of this permission.
+    *
+    * @return a hash value for this object
+    */
+   public int hashCode()
+   {
+     return getName().hashCode();
+   }
+ 
+   /**
+    * This method returns a list of the actions associated with this
+    * permission.  This method always returns the empty string ("") since
+    * this class ignores actions.
+    *
+    * @return the action list
+    */
+   public String getActions()
+   {
+     return "";
+   }
+ 
+   /**
+    * This method returns an instance of <code>PermissionCollection</code>
+    * suitable for storing <code>BasicPermission</code> objects.  The
+    * collection returned can only store objects of the same type as this.
+    * Subclasses which use actions must override this method; but a class with
+    * no actions will work fine with this.
+    *
+    * @return a new empty <code>PermissionCollection</code> object
+    */
+   public PermissionCollection newPermissionCollection()
+   {
+     return new BasicPermissionCollection(getClass());
+   }
+ 
+   /**
+    * Implements AllPermission.newPermissionCollection, and obeys serialization
+    * of JDK.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class BasicPermissionCollection extends PermissionCollection
+   {
+     /**
+      * Compatible with JDK 1.1+.
+      */
+     private static final long serialVersionUID = 739301742472979399L;
+ 
+     /**
+      * The permissions in the collection.
+      *
+      * @serial a hash mapping name to permissions, all of type permClass
+      */
+     private final Hashtable permissions = new Hashtable();
+ 
+     /**
+      * If "*" is in the collection.
+      *
+      * @serial true if a permission named "*" is in the collection
+      */
+     private boolean all_allowed;
+ 
+     /**
+      * The runtime class which all entries in the table must belong to.
+      *
+      * @serial the limiting subclass of this collection
+      */
+     private final Class permClass;
+ 
+     /**
+      * Construct a collection over the given runtime class.
+      *
+      * @param c the class
+      */
+     BasicPermissionCollection(Class c)
+     {
+       permClass = c;
+     }
+ 
+     /**
+      * Add a Permission. It must be of the same type as the permission which
+      * created this collection.
+      *
+      * @param perm the permission to add
+      * @throws IllegalArgumentException if perm is not the correct type
+      * @throws SecurityException if the collection is read-only
+      */
+     public void add(Permission perm)
+     {
+       if (isReadOnly())
+         throw new SecurityException("readonly");
+       if (! permClass.isInstance(perm))
+         throw new IllegalArgumentException("Expecting instance of " + permClass);
+       BasicPermission bp = (BasicPermission) perm;
+       String name = bp.getName();
+       if (name.equals("*"))
+         all_allowed = true;
+       permissions.put(name, bp);
+     }
+ 
+     /**
+      * Returns true if this collection implies the given permission.
+      *
+      * @param permission the permission to check
+      * @return true if it is implied by this
+      */
+     public boolean implies(Permission permission)
+     {
+       if (! permClass.isInstance(permission))
+         return false;
+       if (all_allowed)
+         return true;
+       BasicPermission toImply = (BasicPermission) permission;
+       String name = toImply.getName();
+       if (name.equals("*"))
+         return false;
+       int prefixLength = name.length();
+       if (name.endsWith("*"))
+         prefixLength -= 2;
+ 
+       while (true)
+         {
+           if (permissions.get(name) != null)
+             return true;
+           prefixLength = name.lastIndexOf('.', prefixLength);
+           if (prefixLength < 0)
+             return false;
+           name = name.substring(0, prefixLength + 1) + '*';
+         }
+     }
+ 
+     /**
+      * Enumerate over the collection.
+      *
+      * @return an enumeration of the collection contents
+      */
+     public Enumeration elements()
+     {
+       return permissions.elements();
+     }
+   } // class BasicPermissionCollection
+ } // class BasicPermission
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Certificate.java gcc-4.1.0/libjava/classpath/java/security/Certificate.java
*** gcc-4.0.2/libjava/classpath/java/security/Certificate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Certificate.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,125 ----
+ /* Certificate.java -- deprecated interface for modeling digital certificates
+    Copyright (C) 1998, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ 
+ /**
+  * This interface models a digital certificate which verifies the
+  * authenticity of a party.  This class simply allows certificate
+  * information to be queried, it does not guarantee that the certificate
+  * is valid.
+  *
+  * <p>This class is deprecated in favor of the new java.security.cert package.
+  * It exists for backward compatibility only.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @deprecated use {@link java.security.cert} instead
+  * @status updated to 1.4
+  */
+ public interface Certificate
+ {
+   /**
+    * This method returns the <code>Principal</code> that is guaranteeing
+    * this certificate.
+    *
+    * @return the <code>Principal</code> guaranteeing the certificate
+    */
+   Principal getGuarantor();
+ 
+   /**
+    * This method returns the <code>Principal</code> being guaranteed by
+    * this certificate.
+    *
+    * @return the <code>Principal</code> guaranteed by this certificate
+    */
+   Principal getPrincipal();
+ 
+   /**
+    * This method returns the public key for the <code>Principal</code> that
+    * is being guaranteed.
+    *
+    * @return the <code>PublicKey</code> of the Principal being guaranteed
+    */
+   PublicKey getPublicKey();
+ 
+   /**
+    * This method writes the certificate to an <code>OutputStream</code> in
+    * a format that can be understood by the <code>decode</code> method.
+    *
+    * @param out the <code>OutputStream</code> to write to
+    * @throws KeyException if there is a problem with the certificate
+    * @throws IOException if an error occurs writing to the stream
+    * @see #decode(InputStream)
+    * @see #getFormat()
+    */
+   void encode(OutputStream out) throws KeyException, IOException;
+ 
+   /**
+    * This method reads an encoded certificate from an <code>InputStream</code>.
+    *
+    * @param in the <code>InputStream</code> to read from
+    * @throws KeyException if there is a problem with the certificate data
+    * @throws IOException if an error occurs reading from the stream
+    * @see #encode(OutputStream)
+    * @see #getFormat()
+    */
+   void decode(InputStream in) throws KeyException, IOException;
+ 
+   /**
+    * This method returns the encoding format of the certificate (e.g., "PGP",
+    * "X.509").  This format is used by the <code>encode</code> and
+    * <code>decode</code> methods.
+    *
+    * @return the encoding format being used
+    */
+   String getFormat();
+ 
+   /**
+    * This method returns a <code>String</code> representation of the contents
+    * of this certificate.
+    *
+    * @param detail true to provided more detailed information
+    * @return the string representation
+    */
+   String toString(boolean detail);
+ } // interface Certificate
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/CodeSource.java gcc-4.1.0/libjava/classpath/java/security/CodeSource.java
*** gcc-4.0.2/libjava/classpath/java/security/CodeSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/CodeSource.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,354 ----
+ /* CodeSource.java -- Code location and certifcates
+    Copyright (C) 1998, 2002, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.net.SocketPermission;
+ import java.net.URL;
+ // Note that this overrides Certificate in this package.
+ import java.security.cert.Certificate;
+ import java.security.cert.CertificateEncodingException;
+ import java.security.cert.CertificateException;
+ import java.security.cert.CertificateFactory;
+ import java.util.Arrays;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ 
+ /**
+  * This class represents a location from which code is loaded (as
+  * represented by a URL), and the list of certificates that are used to
+  * check the signatures of signed code loaded from this source.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class CodeSource implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 4977541819976013951L;
+ 
+   /**
+    * This is the URL that represents the code base from which code will
+    * be loaded.
+    *
+    * @serial the code location
+    */
+   private final URL location;
+ 
+   /** The set of certificates for this code base. */
+   private transient HashSet certs;
+ 
+   /**
+    * This creates a new instance of <code>CodeSource</code> that loads code
+    * from the specified URL location and which uses the specified certificates
+    * for verifying signatures.
+    *
+    * @param location the location from which code will be loaded
+    * @param certs the list of certificates
+    */
+   public CodeSource(URL location, Certificate[] certs)
+   {
+     this.location = location;
+     if (certs != null)
+       this.certs = new HashSet(Arrays.asList(certs));
+   }
+ 
+   /**
+    * This method returns a hash value for this object.
+    *
+    * @return a hash value for this object
+    */
+   public int hashCode()
+   {
+     return (location == null ? 0 : location.hashCode())
+       ^ (certs == null ? 0 : certs.hashCode());
+   }
+ 
+   /**
+    * This method tests the specified <code>Object</code> for equality with
+    * this object.  This will be true if and only if the locations are equal
+    * and the certificate sets are identical (ignoring order).
+    *
+    * @param obj the <code>Object</code> to test against
+    * @return true if the specified object is equal to this one
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof CodeSource))
+       return false;
+     CodeSource cs = (CodeSource) obj;
+     return (certs == null ? cs.certs == null : certs.equals(cs.certs))
+       && (location == null ? cs.location == null
+           : location.equals(cs.location));
+   }
+ 
+   /**
+    * This method returns the URL specifying the location from which code
+    * will be loaded under this <code>CodeSource</code>.
+    *
+    * @return the code location for this <code>CodeSource</code>
+    */
+   public final URL getLocation()
+   {
+     return location;
+   }
+ 
+   /**
+    * This method returns the list of digital certificates that can be used
+    * to verify the signatures of code loaded under this
+    * <code>CodeSource</code>.
+    *
+    * @return the certifcate list for this <code>CodeSource</code>
+    */
+   public final Certificate[] getCertificates()
+   {
+     if (certs == null)
+       return null;
+     Certificate[] c = new Certificate[certs.size()];
+     certs.toArray(c);
+     return c;
+   }
+ 
+   /**
+    * This method tests to see if a specified <code>CodeSource</code> is
+    * implied by this object.  Effectively, to meet this test, the specified
+    * object must have all the certifcates this object has (but may have more),
+    * and must have a location that is a subset of this object's.  In order
+    * for this object to imply the specified object, the following must be
+    * true:
+    *
+    * <ol>
+    * <li><em>codesource</em> must not be <code>null</code>.</li>
+    * <li>If <em>codesource</em> has a certificate list, all of it's
+    *     certificates must be present in the certificate list of this
+    *     code source.</li>
+    * <li>If this object does not have a <code>null</code> location, then
+    *     the following addtional tests must be passed.
+    *
+    *     <ol>
+    *     <li><em>codesource</em> must not have a <code>null</code>
+    *         location.</li>
+    *     <li><em>codesource</em>'s location must be equal to this object's
+    *         location, or
+    *         <ul>
+    *         <li><em>codesource</em>'s location protocol, port, and ref (aka,
+    *             anchor) must equal this objects</li>
+    *         <li><em>codesource</em>'s location host must imply this object's
+    *             location host, as determined by contructing
+    *             <code>SocketPermission</code> objects from each with no
+    *             action list and using that classes's <code>implies</code>
+    *             method</li>
+    *         <li>If this object's location file ends with a '/', then the
+    *             specified object's location file must start with this
+    *             object's location file. Otherwise, the specified object's
+    *             location file must start with this object's location file
+    *             with the '/' character appended to it.</li>
+    *         </ul></li>
+    *     </ol></li>
+    * </ol>
+    *
+    * <p>For example, each of these locations imply the location
+    * "http://java.sun.com/classes/foo.jar":</p>
+    * 
+    * <pre>
+    * http:
+    * http://*.sun.com/classes/*
+    * http://java.sun.com/classes/-
+    * http://java.sun.com/classes/foo.jar
+    * </pre>
+    * 
+    * <p>Note that the code source with null location and null certificates implies
+    * all other code sources.</p>
+    *
+    * @param cs the <code>CodeSource</code> to test against this object
+    * @return true if this specified <code>CodeSource</code> is implied
+    */
+   public boolean implies(CodeSource cs)
+   {
+     if (cs == null)
+       return false;
+     // First check the certificate list.
+     if (certs != null && (cs.certs == null || ! certs.containsAll(cs.certs)))
+       return false;
+     // Next check the location.
+     if (location == null)
+       return true;
+     if (cs.location == null
+         || ! location.getProtocol().equals(cs.location.getProtocol())
+         || (location.getPort() != -1
+             && location.getPort() != cs.location.getPort())
+         || (location.getRef() != null
+             && ! location.getRef().equals(cs.location.getRef())))
+       return false;
+     if (location.getHost() != null)
+       {
+         String their_host = cs.location.getHost();
+         if (their_host == null)
+           return false;
+         SocketPermission our_sockperm =
+           new SocketPermission(location.getHost(), "accept");
+         SocketPermission their_sockperm =
+           new SocketPermission(their_host, "accept");
+         if (! our_sockperm.implies(their_sockperm))
+           return false;
+       }
+     String our_file = location.getFile();
+     if (our_file != null)
+       {
+         if (! our_file.endsWith("/"))
+           our_file += "/";
+         String their_file = cs.location.getFile();
+         if (their_file == null
+             || ! their_file.startsWith(our_file))
+           return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * This method returns a <code>String</code> that represents this object.
+    * The result is in the format <code>"(" + getLocation()</code> followed
+    * by a space separated list of certificates (or "&lt;no certificates&gt;"),
+    * followed by <code>")"</code>.
+    *
+    * @return a <code>String</code> for this object
+    */
+   public String toString()
+   {
+     StringBuffer sb = new StringBuffer("(").append(location);
+     if (certs == null || certs.isEmpty())
+       sb.append(" <no certificates>");
+     else
+       {
+         Iterator iter = certs.iterator();
+         for (int i = certs.size(); --i >= 0; )
+           sb.append(' ').append(iter.next());
+       }
+     return sb.append(")").toString();
+   }
+ 
+   /**
+    * Reads this object from a serialization stream.
+    *
+    * @param s the input stream
+    * @throws IOException if reading fails
+    * @throws ClassNotFoundException if deserialization fails
+    * @serialData this reads the location, then expects an int indicating the
+    *             number of certificates. Each certificate is a String type
+    *             followed by an int encoding length, then a byte[] encoding
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     int count = s.readInt();
+     certs = new HashSet();
+     while (--count >= 0)
+       {
+         String type = (String) s.readObject();
+         int bytes = s.readInt();
+         byte[] encoded = new byte[bytes];
+         for (int i = 0; i < bytes; i++)
+           encoded[i] = s.readByte();
+         ByteArrayInputStream stream = new ByteArrayInputStream(encoded);
+         try
+           {
+             CertificateFactory factory = CertificateFactory.getInstance(type);
+             certs.add(factory.generateCertificate(stream));
+           }
+         catch (CertificateException e)
+           {
+             // XXX Should we ignore this certificate?
+           }
+       }
+   }
+ 
+   /**
+    * Writes this object to a serialization stream.
+    *
+    * @param s the output stream
+    * @throws IOException if writing fails
+    * @serialData this writes the location, then writes an int indicating the
+    *             number of certificates. Each certificate is a String type
+    *             followed by an int encoding length, then a byte[] encoding
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     s.defaultWriteObject();
+     if (certs == null)
+       s.writeInt(0);
+     else
+       {
+         int count = certs.size();
+         s.writeInt(count);
+         Iterator iter = certs.iterator();
+         while (--count >= 0)
+           {
+             Certificate c = (Certificate) iter.next();
+             s.writeObject(c.getType());
+             byte[] encoded;
+             try
+               {
+                 encoded = c.getEncoded();
+               }
+             catch (CertificateEncodingException e)
+               {
+                 // XXX Should we ignore this certificate?
+                 encoded = null;
+               }
+             if (encoded == null)
+               s.writeInt(0);
+             else
+               {
+                 s.writeInt(encoded.length);
+                 for (int i = 0; i < encoded.length; i++)
+                   s.writeByte(encoded[i]);
+               }
+           }
+       }
+   }
+ } // class CodeSource
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/DigestException.java gcc-4.1.0/libjava/classpath/java/security/DigestException.java
*** gcc-4.0.2/libjava/classpath/java/security/DigestException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/DigestException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* DigestException.java -- A generic message digest exception
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception indicates that a generic message digest exception has
+  * occurred.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class DigestException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5821450303093652515L;
+ 
+   /**
+    * Create a new instance with no descriptive message.
+    */
+   public DigestException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param msg the descriptive message
+    */
+   public DigestException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/DigestInputStream.java gcc-4.1.0/libjava/classpath/java/security/DigestInputStream.java
*** gcc-4.0.2/libjava/classpath/java/security/DigestInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/DigestInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,167 ----
+ /* DigestInputStream.java --- An Input stream tied to a message digest
+    Copyright (C) 1999, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * DigestInputStream is a class that ties an InputStream with a 
+  * MessageDigest. The Message Digest is used by the class to 
+  * update it self as bytes are read from the InputStream.
+  *
+  * The updating to the digest depends on the on flag which is set
+  * to true by default to tell the class to update the data
+  * in the message digest.
+  *
+  * @version 0.0
+  * @author Mark Benvenuto (ivymccough@worldnet.att.net)
+  */
+ public class DigestInputStream extends FilterInputStream
+ {
+   /**
+    * The message digest for the DigestInputStream 
+    */
+   protected MessageDigest digest;
+ 
+   //Manages the on flag
+   private boolean state = true;
+ 
+   /**
+    * Constructs a new DigestInputStream.
+    * It associates a MessageDigest with the stream to 
+    * compute the stream as data is written.
+    *
+    * @param stream An InputStream to associate this stream with
+    * @param digest A MessageDigest to hash the stream with
+    */
+   public DigestInputStream(InputStream stream, MessageDigest digest)
+   {
+     super(stream);
+     //this.in = stream;
+     this.digest = digest;
+   }
+ 
+   /**
+    * Returns the MessageDigest associated with this DigestInputStream 
+    *
+    * @return The MessageDigest used to hash this stream
+    */
+   public MessageDigest getMessageDigest()
+   {
+     return digest;
+   }
+ 
+   /**
+    * Sets the current MessageDigest to current parameter
+    *
+    * @param digest A MessageDigest to associate with this stream
+    */
+   public void setMessageDigest(MessageDigest digest)
+   {
+     this.digest = digest;
+   }
+ 
+   /** 
+    * Reads a byte from the input stream and updates the digest.
+    * This method reads the underlying input stream and if the 
+    * on flag is true then updates the message digest.
+    *
+    * @return Returns a byte from the input stream, -1 is returned to indicate that 
+    * the end of stream was reached before this read call
+    *
+    * @throws IOException if an IO error occurs in the underlying input stream,
+    * this error is thrown
+    */
+   public int read() throws IOException
+   {
+     int temp = in.read();
+ 
+     if (state == true && temp != -1)
+       digest.update((byte) temp);
+ 
+     return temp;
+   }
+ 
+   /** 
+    * Reads bytes from the input stream and updates the digest.
+    * This method reads the underlying input stream and if the 
+    * on flag is true then updates the message digest.
+    *
+    * @param b a byte array to store the data from the input stream
+    * @param off an offset to start at in the array
+    * @param len length of data to read
+    * @return Returns count of bytes read, -1 is returned to indicate that 
+    * the end of stream was reached before this read call
+    *
+    * @throws IOException if an IO error occurs in the underlying input stream,
+    * this error is thrown
+    */
+   public int read(byte[]b, int off, int len) throws IOException
+   {
+     int temp = in.read(b, off, len);
+ 
+     if (state == true && temp != -1)
+       digest.update(b, off, temp);
+ 
+     return temp;
+   }
+ 
+   /**
+    * Sets the flag specifing if this DigestInputStream updates the
+    * digest in the write() methods. The default is on;
+    *
+    * @param on True means it digests stream, false means it does not
+    */
+   public void on(boolean on)
+   {
+     state = on;
+   }
+ 
+   /**
+    * Converts the input stream and underlying message digest to a string.
+    *
+    * @return A string representing the input stream and message digest.
+    */
+   public String toString()
+   {
+     return "[Digest Input Stream] " + digest.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/DigestOutputStream.java gcc-4.1.0/libjava/classpath/java/security/DigestOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/security/DigestOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/DigestOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,158 ----
+ /* DigestOutputStream.java --- An output stream tied to a message digest
+    Copyright (C) 1999, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.io.FilterOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * DigestOutputStream is a class that ties an OutputStream with a
+  * MessageDigest. The Message Digest is used by the class to update it
+  * self as bytes are written to the OutputStream.
+  *
+  * The updating to the digest depends on the on flag which is set to
+  * true by default that tells the class to update the data in the
+  * message digest.
+  *
+  * @version 0.0
+  * @author Mark Benvenuto (ivymccough@worldnet.att.net)
+  */
+ public class DigestOutputStream extends FilterOutputStream
+ {
+   /**
+    * The message digest for the DigestOutputStream
+    */
+   protected MessageDigest digest;
+ 
+   //Manages the on flag
+   private boolean state = true;
+ 
+   /**
+    * Constructs a new DigestOutputStream.  It associates a
+    * MessageDigest with the stream to compute the stream as data is
+    * written.
+    *
+    * @param stream An OutputStream to associate this stream with
+    * @param digest A MessageDigest to hash the stream with
+    */
+   public DigestOutputStream(OutputStream stream, MessageDigest digest)
+   {
+     super(stream);
+     this.digest = digest;
+   }
+ 
+   /**
+    * Returns the MessageDigest associated with this DigestOutputStream
+    *
+    * @return The MessageDigest used to hash this stream
+    */
+   public MessageDigest getMessageDigest()
+   {
+     return digest;
+   }
+ 
+   /**
+    * Sets the current MessageDigest to current parameter
+    *
+    * @param digest A MessageDigest to associate with this stream
+    */
+   public void setMessageDigest(MessageDigest digest)
+   {
+     this.digest = digest;
+   }
+ 
+ 
+   /**
+    * Updates the hash if the on flag is true and then writes a byte to
+    * the underlying output stream.
+    *
+    * @param b A byte to write to the output stream
+    *
+    * @exception IOException if the underlying output stream 
+    * cannot write the byte, this is thrown.
+    */
+   public void write(int b) throws IOException
+   {
+     if (state)
+       digest.update((byte) b);
+ 
+     out.write(b);
+   }
+ 
+   /**
+    * Updates the hash if the on flag is true and then writes the bytes
+    * to the underlying output stream.
+    *
+    * @param b Bytes to write to the output stream
+    * @param off Offset to start to start at in array
+    * @param len Length of data to write
+    *
+    * @exception IOException if the underlying output stream 
+    * cannot write the bytes, this is thrown.
+    */
+   public void write(byte[]b, int off, int len) throws IOException
+   {
+     if (state)
+       digest.update(b, off, len);
+ 
+     out.write(b, off, len);
+   }
+ 
+   /**
+    * Sets the flag specifying if this DigestOutputStream updates the
+    * digest in the write() methods. The default is on;
+    *
+    * @param on True means it digests stream, false means it does not
+    */
+   public void on(boolean on)
+   {
+     state = on;
+   }
+ 
+   /**
+    * Converts the output stream and underlying message digest to a string.
+    *
+    * @return A string representing the output stream and message digest.
+    */
+   public String toString()
+   {
+     return "[Digest Output Stream] " + digest.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/DomainCombiner.java gcc-4.1.0/libjava/classpath/java/security/DomainCombiner.java
*** gcc-4.0.2/libjava/classpath/java/security/DomainCombiner.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/DomainCombiner.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* DomainCombiner.java -- Combines ProtectionDomains
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * A public interface used to combine two ProtectionDomains in a new
+  * ProtectionDomain and update the current Protection Domains
+  * associated with the current AccessControlContext.
+  *
+  * It can add, subtract, or update ProtectionDomains or possibly
+  * remove duplicates or any possible complex action but just not add
+  * ones that do not already exist in either array.
+  *
+  * @author Mark Benvenuto
+  * @see AccessControlContext
+  * @see AccessController
+  * @since 1.3
+  * @status updated to 1.4
+  */
+ public interface DomainCombiner
+ {
+   /**
+    * Combines the current ProtectionDomains of the Thread with new
+    * ProtectionDomains.
+    *
+    * @param currentDomains - the ProtectionDomains for the current thread.
+    * @param assignedDomains - ProtectionsDomains to add
+    * @return a new array of all the ProtectionDomains
+    */
+   ProtectionDomain[] combine(ProtectionDomain[] currentDomains,
+                              ProtectionDomain[] assignedDomains);
+ } // interface DomainCombiner
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/DummyKeyPairGenerator.java gcc-4.1.0/libjava/classpath/java/security/DummyKeyPairGenerator.java
*** gcc-4.0.2/libjava/classpath/java/security/DummyKeyPairGenerator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/DummyKeyPairGenerator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* DummyKeyPairGenerator.java - Wrapper for KeyPairGeneratorSpi
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ final class DummyKeyPairGenerator extends KeyPairGenerator
+ {
+   private KeyPairGeneratorSpi kpgSpi = null;
+ 
+   public DummyKeyPairGenerator(KeyPairGeneratorSpi kpgSpi, String algorithm)
+   {
+     super(algorithm);
+     this.kpgSpi = kpgSpi;
+   }
+ 
+   public Object clone() throws CloneNotSupportedException
+   {
+     KeyPairGenerator result = new DummyKeyPairGenerator
+             ((KeyPairGeneratorSpi) kpgSpi.clone(), this.getAlgorithm());
+     result.provider = this.getProvider();
+     return result;
+   }
+ 
+   public void initialize(int keysize, SecureRandom random)
+   {
+     kpgSpi.initialize(keysize, random);
+   }
+ 
+   public void initialize(AlgorithmParameterSpec params, SecureRandom random)
+     throws InvalidAlgorithmParameterException
+   {
+     kpgSpi.initialize(params, random);
+   }
+ 
+   public KeyPair generateKeyPair()
+   {
+     return kpgSpi.generateKeyPair();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/DummyMessageDigest.java gcc-4.1.0/libjava/classpath/java/security/DummyMessageDigest.java
*** gcc-4.0.2/libjava/classpath/java/security/DummyMessageDigest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/DummyMessageDigest.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /* DummyMessageDigest.java - Wrapper for MessageDigestSpi
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ final class DummyMessageDigest extends MessageDigest
+ {
+   private MessageDigestSpi mdSpi = null;
+ 
+   public DummyMessageDigest(MessageDigestSpi mdSpi, String algorithm)
+   {
+     super(algorithm);
+     this.mdSpi = mdSpi;
+   }
+ 
+   public Object clone() throws CloneNotSupportedException
+   {
+     MessageDigest result = new DummyMessageDigest
+         ((MessageDigestSpi) mdSpi.clone(), this.getAlgorithm());
+     result.provider = this.getProvider();
+     return result;
+   }
+ 
+   // java.security.MessageDigestSpi abstract methods implementation ---------
+ 
+   public byte[] engineDigest()
+   {
+     return mdSpi.engineDigest();
+   }
+ 
+   public int engineDigest(byte[] buf, int offset, int len)
+     throws DigestException
+   {
+     return mdSpi.engineDigest(buf, offset, len);
+   }
+ 
+   public int engineGetDigestLength()
+   {
+     return mdSpi.engineGetDigestLength();
+   }
+ 
+   public void engineReset()
+   {
+     mdSpi.engineReset();
+   }
+ 
+   public void engineUpdate(byte input)
+   {
+     mdSpi.engineUpdate(input);
+   }
+ 
+   public void engineUpdate(byte[] input, int offset, int len)
+   {
+     mdSpi.engineUpdate(input, offset, len);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/DummySignature.java gcc-4.1.0/libjava/classpath/java/security/DummySignature.java
*** gcc-4.0.2/libjava/classpath/java/security/DummySignature.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/DummySignature.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* DummySignature.java - Signature wrapper for SignatureSpi.
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ final class DummySignature extends Signature
+ {
+   private SignatureSpi sigSpi = null;
+ 
+   public DummySignature(SignatureSpi sigSpi, String algorithm)
+   {
+     super(algorithm);
+     this.sigSpi = sigSpi;
+   }
+ 
+   public Object clone() throws CloneNotSupportedException
+   {
+     Signature result = new DummySignature
+             ((SignatureSpi) sigSpi.clone(), this.getAlgorithm());
+     result.provider = this.getProvider();
+     return result;
+   }
+ 
+   protected void engineInitVerify(PublicKey publicKey)
+     throws InvalidKeyException
+   {
+     sigSpi.engineInitVerify(publicKey);
+   }
+ 
+   protected void engineInitSign(PrivateKey privateKey)
+     throws InvalidKeyException
+   {
+     sigSpi.engineInitSign(privateKey);
+   }
+ 
+   protected void engineUpdate(byte b) throws SignatureException
+   {
+     sigSpi.engineUpdate(b);
+   }
+ 
+   protected void engineUpdate(byte[]b, int off, int len)
+     throws SignatureException
+   {
+     sigSpi.engineUpdate(b, off, len);
+   }
+ 
+   protected byte[] engineSign() throws SignatureException
+   {
+     return sigSpi.engineSign();
+   }
+ 
+   protected boolean engineVerify(byte[]sigBytes) throws SignatureException
+   {
+     return sigSpi.engineVerify(sigBytes);
+   }
+ 
+   protected void engineSetParameter(String param, Object value)
+     throws InvalidParameterException
+   {
+     sigSpi.engineSetParameter(param, value);
+   }
+ 
+   protected Object engineGetParameter(String param)
+     throws InvalidParameterException
+   {
+     return sigSpi.engineGetParameter(param);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/GeneralSecurityException.java gcc-4.1.0/libjava/classpath/java/security/GeneralSecurityException.java
*** gcc-4.0.2/libjava/classpath/java/security/GeneralSecurityException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/GeneralSecurityException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* GeneralSecurityException.java -- Common superclass of security exceptions
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This class is the common superclass of all security exceptions.  All
+  * exceptions in java.security extend this class with the exception (no
+  * pun intended) of <code>AccessControlException</code> and 
+  * <code>CertificateException</code> (which extend
+  * <code>SecurityException</code>), <code>ProviderException</code>
+  * (<code>RuntimeException</code>), and <code>InvalidParamterException</code>
+  * (<code>IllegalArgumentException</code>).
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class GeneralSecurityException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 894798122053539237L;
+ 
+   /**
+    * Create a new instance with no descriptive error message.
+    */
+   public GeneralSecurityException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param msg the descriptive error message
+    */
+   public GeneralSecurityException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Guard.java gcc-4.1.0/libjava/classpath/java/security/Guard.java
*** gcc-4.0.2/libjava/classpath/java/security/Guard.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Guard.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* Guard.java -- Check access to a guarded object
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This interface specifies a mechanism for querying whether or not
+  * access is allowed to a guarded object.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see GuardedObject
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface Guard
+ {
+   /**
+    * This method tests whether or not access is allowed to the specified
+    * guarded object. Access is allowed if this method returns silently. If
+    * access is denied, an exception is generated.
+    *
+    * @param obj the <code>Object</code> to test
+    * @throws SecurityException if access to the object is denied
+    */
+   void checkGuard(Object obj);
+ } // interface Guard
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/GuardedObject.java gcc-4.1.0/libjava/classpath/java/security/GuardedObject.java
*** gcc-4.0.2/libjava/classpath/java/security/GuardedObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/GuardedObject.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,121 ----
+ /* GuardedObject.java -- An object protected by a Guard
+    Copyright (C) 1998, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.io.IOException;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * This class is an object that is guarded by a <code>Guard</code> object.
+  * The object that is being guarded is retrieved by a call to the only
+  * method in this class - <code>getObject</code>.  That method returns the
+  * guarded <code>Object</code> after first checking with the
+  * <code>Guard</code>.  If the <code>Guard</code> disallows access, an
+  * exception will be thrown.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class GuardedObject implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -5240450096227834308L;
+ 
+   /**
+    * This is the Guard that is protecting the object.
+    *
+    * @serial the guard
+    */
+   private final Guard guard;
+ 
+   /**
+    * This is the object that is being guarded.
+    *
+    * @serial the protected object
+    */
+   private final Object object;
+ 
+   /**
+    * This method initializes a new instance of <code>GuardedObject</code>
+    * that protects the specified <code>Object</code> using the specified
+    * <code>Guard</code>. A null guard means there are no restrictions on
+    * accessing the object.
+    *
+    * @param object the <code>Object</code> to guard
+    * @param guard the <code>Guard</code> that is protecting the object
+    */
+   public GuardedObject(Object object, Guard guard)
+   {
+     this.object = object;
+     this.guard = guard;
+   }
+ 
+   /**
+    * This method first call the <code>checkGuard</code> method on the
+    * <code>Guard</code> object protecting the guarded object.  If the
+    * <code>Guard</code> disallows access, an exception is thrown, otherwise
+    * the <code>Object</code> is returned.
+    *
+    * @return The object being guarded
+    * @throws SecurityException if access is denied
+    */
+   public Object getObject()
+   {
+     if (guard != null)
+       guard.checkGuard(object);
+     return object;
+   }
+ 
+   /**
+    * Ensures that serialization is legal, by checking the guard.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     if (guard != null)
+       guard.checkGuard(object);
+     s.defaultWriteObject();
+   }
+ } // class GuardedObject
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Identity.java gcc-4.1.0/libjava/classpath/java/security/Identity.java
*** gcc-4.0.2/libjava/classpath/java/security/Identity.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Identity.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,407 ----
+ /* Identity.java --- Identity Class
+    Copyright (C) 1999, 2003, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.io.Serializable;
+ import java.util.Vector;
+ 
+ /**
+  * <p>This class represents identities: real-world objects such as people,
+  * companies or organizations whose identities can be authenticated using their
+  * public keys. Identities may also be more abstract (or concrete) constructs,
+  * such as daemon threads or smart cards.</p>
+  *
+  * <p>All Identity objects have a <i>name</i> and a <i>public key</i>. Names
+  * are immutable. <i>Identities</i> may also be <b>scoped</b>. That is, if an
+  * <i>Identity</i> is specified to have a particular <i>scope</i>, then the
+  * <i>name</i> and <i>public key</i> of the <i>Identity</i> are unique within
+  * that <i>scope</i>.</p>
+  *
+  * <p>An <i>Identity</i> also has a <i>set of certificates</i> (all certifying
+  * its own <i>public key</i>). The <i>Principal</i> names specified in these
+  * certificates need not be the same, only the key.</p>
+  *
+  * <p>An <i>Identity</i> can be subclassed, to include postal and email
+  * addresses, telephone numbers, images of faces and logos, and so on.</p>
+  *
+  * @author Mark Benvenuto
+  * @see IdentityScope
+  * @see Signer
+  * @see Principal
+  * @deprecated This class is no longer used. Its functionality has been replaced
+  * by <code>java.security.KeyStore</code>, the <code>java.security.cert</code>
+  * package, and <code>java.security.Principal</code>.
+  */
+ public abstract class Identity implements Principal, Serializable
+ {
+   private static final long serialVersionUID = 3609922007826600659L;
+ 
+   private String name;
+   private IdentityScope scope;
+   private PublicKey publicKey;
+   private String info;
+   private Vector certificates;
+ 
+   /** Constructor for serialization only. */
+   protected Identity()
+   {
+   }
+ 
+   /**
+    * Constructs an identity with the specified name and scope.
+    *
+    * @param name the identity name.
+    * @param scope the scope of the identity.
+    * @throws KeyManagementException if there is already an identity with the
+    * same name in the scope.
+    */
+   public Identity(String name, IdentityScope scope)
+     throws KeyManagementException
+   {
+     this.name = name;
+     this.scope = scope;
+   }
+ 
+   /**
+    * Constructs an identity with the specified name and no scope.
+    *
+    * @param name the identity name.
+    */
+   public Identity(String name)
+   {
+     this.name = name;
+     this.scope = null;
+   }
+ 
+   /**
+    * Returns this identity's name.
+    *
+    * @return the name of this identity.
+    */
+   public final String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Returns this identity's scope.
+    *
+    * @return the scope of this identity.
+    */
+   public final IdentityScope getScope()
+   {
+     return scope;
+   }
+ 
+   /**
+    * Returns this identity's public key.
+    *
+    * @return the public key for this identity.
+    * @see #setPublicKey(java.security.PublicKey)
+    */
+   public PublicKey getPublicKey()
+   {
+     return publicKey;
+   }
+ 
+   /**
+    * <p>Sets this identity's public key. The old key and all of this identity's
+    * certificates are removed by this operation.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with <code>"setIdentityPublicKey"</code> as its
+    * argument to see if it's ok to set the public key.</p>
+    *
+    * @param key the public key for this identity.
+    * @throws KeyManagementException if another identity in the identity's scope
+    * has the same public key, or if another exception occurs.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkSecurityAccess()</code> method doesn't allow setting the public
+    * key.
+    * @see #getPublicKey()
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public void setPublicKey(PublicKey key) throws KeyManagementException
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("setIdentityPublicKey");
+ 
+     this.publicKey = key;
+   }
+ 
+   /**
+    * <p>Specifies a general information string for this identity.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with <code>"setIdentityInfo"</code> as its
+    * argument to see if it's ok to specify the information string.</p>
+    *
+    * @param info the information string.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkSecurityAccess()</code> method doesn't allow setting the
+    * information string.
+    * @see #getInfo()
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public void setInfo(String info)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("setIdentityInfo");
+ 
+     this.info = info;
+   }
+ 
+   /**
+    * Returns general information previously specified for this identity.
+    *
+    * @return general information about this identity.
+    * @see #setInfo(String)
+    */
+   public String getInfo()
+   {
+     return info;
+   }
+ 
+   /**
+    * <p>Adds a certificate for this identity. If the identity has a public key,
+    * the public key in the certificate must be the same, and if the identity
+    * does not have a public key, the identity's public key is set to be that
+    * specified in the certificate.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with <code>"addIdentityCertificate"</code> as its
+    * argument to see if it's ok to add a certificate.</p>
+    *
+    * @param certificate the certificate to be added.
+    * @throws KeyManagementException if the certificate is not valid, if the
+    * public key in the certificate being added conflicts with this identity's
+    * public key, or if another exception occurs.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkSecurityAccess()</code> method doesn't allow adding a
+    * certificate.
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public void addCertificate(Certificate certificate)
+     throws KeyManagementException
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("addIdentityCertificate");
+ 
+     // Check public key of this certificate against the first one in the vector
+     if (certificates.size() > 0)
+       {
+ 	if (((Certificate) certificates.firstElement()).getPublicKey() != publicKey)
+ 	  throw new KeyManagementException("Public key does not match");
+       }
+     certificates.addElement(certificate);
+   }
+ 
+   /**
+    * <p>Removes a certificate from this identity.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with <code>"removeIdentityCertificate"</code> as
+    * its argument to see if it's ok to remove a certificate.</p>
+    *
+    * @param certificate the certificate to be removed.
+    * @throws KeyManagementException if the certificate is missing, or if
+    * another exception occurs.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkSecurityAccess()</code> method doesn't allow removing a
+    * certificate.
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public void removeCertificate(Certificate certificate)
+     throws KeyManagementException
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("removeIdentityCertificate");
+ 
+     if (certificates.contains(certificate) == false)
+       throw new KeyManagementException("Certificate not found");
+ 
+     certificates.removeElement(certificate);
+   }
+ 
+   /**
+    * Returns a copy of all the certificates for this identity.
+    *
+    * @return a copy of all the certificates for this identity.
+    */
+   public Certificate[] certificates()
+   {
+     Certificate[] certs = new Certificate[certificates.size()];
+     int max = certificates.size();
+     for (int i = 0; i < max; i++)
+       certs[i] = (Certificate) certificates.elementAt(i);
+ 
+     return certs;
+   }
+ 
+   /**
+    * Tests for equality between the specified object and this identity. This
+    * first tests to see if the entities actually refer to the same object, in
+    * which case it returns <code>true</code>. Next, it checks to see if the
+    * entities have the same <i>name</i> and the same <i>scope</i>. If they do,
+    * the method returns <code>true</code>. Otherwise, it calls
+    * <code>identityEquals()</code>, which subclasses should override.
+    *
+    * @param identity the object to test for equality with this identity.
+    * @return <code>true</code> if the objects are considered equal, <code>false
+    * </code>otherwise.
+    * @see #identityEquals(Identity)
+    */
+   public final boolean equals(Object identity)
+   {
+     if (identity instanceof Identity)
+       {
+ 	if (identity == this)
+ 	  return true;
+ 
+ 	if ((((Identity) identity).getName().equals(this.name)) &&
+ 	    (((Identity) identity).getScope().equals(this.scope)))
+ 	  return true;
+ 
+ 	return identityEquals((Identity) identity);
+       }
+     return false;
+   }
+ 
+   /**
+    * Tests for equality between the specified <code>identity</code> and this
+    * <i>identity</i>. This method should be overriden by subclasses to test for
+    * equality. The default behavior is to return <code>true</code> if the names
+    * and public keys are equal.
+    *
+    * @param identity the identity to test for equality with this identity.
+    * @return <code>true</code> if the identities are considered equal,
+    * <code>false</code> otherwise.
+    * @see #equals(Object)
+    */
+   protected boolean identityEquals(Identity identity)
+   {
+     return ((identity.getName().equals(this.name)) &&
+ 	    (identity.getPublicKey().equals(this.publicKey)));
+   }
+ 
+   /**
+    * <p>Returns a short string describing this identity, telling its name and
+    * its scope (if any).</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with <code>"printIdentity"</code> as its argument
+    * to see if it's ok to return the string.</p>
+    *
+    * @return information about this identity, such as its name and the name of
+    * its scope (if any).
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkSecurityAccess()</code> method doesn't allow returning a string
+    * describing this identity.
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public String toString()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("printIdentity");
+ 
+     /* TODO: Insert proper format here */
+     return (name + ":@" + scope + " Public Key: " + publicKey);
+   }
+ 
+   /**
+    * <p>Returns a string representation of this identity, with optionally more
+    * details than that provided by the <code>toString()</code> method without
+    * any arguments.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with <code>"printIdentity"</code> as its argument
+    * to see if it's ok to return the string.</p>
+    *
+    * @param detailed whether or not to provide detailed information.
+    * @return information about this identity. If detailed is <code>true</code>,
+    * then this method returns more information than that provided by the
+    * <code>toString()</code> method without any arguments.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkSecurityAccess()</code> method doesn't allow returning a string
+    * describing this identity.
+    * @see #toString()
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public String toString(boolean detailed)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("printIdentity");
+ 
+     if (detailed)
+       {
+ 	/* TODO: Insert proper detailed format here */
+ 	return (name + ":@" + scope + " Public Key: " + publicKey);
+       }
+     else
+       {
+ 	/* TODO: Insert proper format here */
+ 	return (name + ":@" + scope + " Public Key: " + publicKey);
+       }
+   }
+ 
+   /**
+    * Returns a hashcode for this identity.
+    *
+    * @return a hashcode for this identity.
+    */
+   public int hashCode()
+   {
+     int ret = name.hashCode();
+     if (publicKey != null)
+       ret |= publicKey.hashCode();
+     if (scope != null)
+       ret |= scope.hashCode();
+     if (info != null)
+       ret |= info.hashCode();
+     if (certificates != null)
+       ret |= certificates.hashCode();
+ 
+     return ret;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/IdentityScope.java gcc-4.1.0/libjava/classpath/java/security/IdentityScope.java
*** gcc-4.0.2/libjava/classpath/java/security/IdentityScope.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/IdentityScope.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,226 ----
+ /* IdentityScope.java --- IdentityScope Class
+    Copyright (C) 1999, 2003, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.util.Enumeration;
+ 
+ /**
+  * <p>This class represents a scope for identities. It is an Identity itself,
+  * and therefore has a name and can have a scope. It can also optionally have a
+  * public key and associated certificates.</p>
+  *
+  * <p>An <code>IdentityScope</code> can contain {@link Identity} objects of all
+  * kinds, including {@link Signer}s. All types of <code>Identity</code> objects
+  * can be retrieved, added, and removed using the same methods. Note that it is
+  * possible, and in fact expected, that different types of identity scopes will
+  * apply different policies for their various operations on the various types of
+  * Identities.</p>
+  *
+  * <p>There is a one-to-one mapping between keys and identities, and there can
+  * only be one copy of one key per scope. For example, suppose Acme Software,
+  * Inc is a software publisher known to a user. Suppose it is an <i>Identity</i>,
+  * that is, it has a public key, and a set of associated certificates. It is
+  * named in the scope using the name "Acme Software". No other named <i>Identity
+  * </i> in the scope has the same public key. Of course, none has the same name
+  * as well.</p>
+  *
+  * @author Mark Benvenuto
+  * @see Identity
+  * @see Signer
+  * @see Principal
+  * @see Key
+  * @deprecated This class is no longer used. Its functionality has been replaced
+  * by <code>java.security.KeyStore</code>, the <code>java.security.cert</code>
+  * package, and <code>java.security.Principal</code>.
+  */
+ public abstract class IdentityScope extends Identity
+ {
+   private static final long serialVersionUID = -2337346281189773310L;
+   private static IdentityScope systemScope;
+ 
+   /**
+    * This constructor is used for serialization only and should not be used by
+    * subclasses.
+    */
+   protected IdentityScope()
+   {
+     super();
+   }
+ 
+   /**
+    * Constructs a new identity scope with the specified name.
+    *
+    * @param name the scope name.
+    */
+   public IdentityScope(String name)
+   {
+     super(name);
+   }
+ 
+   /**
+    * Constructs a new identity scope with the specified name and scope.
+    *
+    * @param name the scope name.
+    * @param scope the scope for the new identity scope.
+    * @throws KeyManagementException if there is already an identity with the
+    * same name in the scope.
+    */
+   public IdentityScope(String name, IdentityScope scope)
+     throws KeyManagementException
+   {
+     super(name, scope);
+   }
+ 
+   /**
+    * Returns the system's identity scope.
+    *
+    * @return the system's identity scope.
+    * @see #setSystemScope(IdentityScope)
+    */
+   public static IdentityScope getSystemScope()
+   {
+     if (systemScope == null)
+       {
+ 	//Load it
+ 	//systemScope;
+       }
+     return systemScope;
+   }
+ 
+   /**
+    * Sets the system's identity scope.
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with <code>"setSystemScope"</code> as its argument
+    * to see if it's ok to set the identity scope.</p>
+    *
+    * @param scope the scope to set.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkSecurityAccess()</code> method doesn't allow setting the
+    * identity scope.
+    * @see #getSystemScope()
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   protected static void setSystemScope(IdentityScope scope)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("setSystemScope");
+ 
+     systemScope = scope;
+   }
+ 
+   /**
+    * Returns the number of identities within this identity scope.
+    *
+    * @return the number of identities within this identity scope.
+    */
+   public abstract int size();
+ 
+   /**
+    * Returns the identity in this scope with the specified name (if any).
+    *
+    * @param name the name of the identity to be retrieved.
+    * @return the identity named name, or <code>null</code> if there are no
+    * identities named name in this scope.
+    */
+   public abstract Identity getIdentity(String name);
+ 
+   /**
+    * Retrieves the identity whose name is the same as that of the specified
+    * principal. (Note: <code>Identity</code> implements <code>Principal</code>.)
+    *
+    * @param principal the principal corresponding to the identity to be
+    * retrieved.
+    * @return the identity whose name is the same as that of the principal, or
+    * <code>null</code> if there are no identities of the same name in this scope.
+    */
+   public Identity getIdentity(Principal principal)
+   {
+     return getIdentity(principal.getName());
+   }
+ 
+   /**
+    * Retrieves the identity with the specified public key.
+    *
+    * @param key the public key for the identity to be returned.
+    * @return the identity with the given key, or <code>null</code> if there are
+    * no identities in this scope with that key.
+    */
+   public abstract Identity getIdentity(PublicKey key);
+ 
+   /**
+    * Adds an identity to this identity scope.
+    *
+    * @param identity the identity to be added.
+    * @throws KeyManagementException if the identity is not valid, a name
+    * conflict occurs, another identity has the same public key as the identity
+    * being added, or another exception occurs.
+    */
+   public abstract void addIdentity(Identity identity)
+     throws KeyManagementException;
+ 
+   /**
+    * Removes an identity from this identity scope.
+    *
+    * @param identity the identity to be removed.
+    * @throws KeyManagementException if the identity is missing, or another
+    * exception occurs.
+    */
+   public abstract void removeIdentity(Identity identity)
+     throws KeyManagementException;
+ 
+   /**
+    * Returns an enumeration of all identities in this identity scope.
+    *
+    * @return an enumeration of all identities in this identity scope.
+    */
+   public abstract Enumeration identities();
+ 
+   /**
+    * Returns a string representation of this identity scope, including its name,
+    * its scope name, and the number of identities in this identity scope.
+    *
+    * @return a string representation of this identity scope.
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public String toString()
+   {
+     return (super.getName() + " " + super.getScope().getName() + " " + size());
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/IntersectingDomainCombiner.java gcc-4.1.0/libjava/classpath/java/security/IntersectingDomainCombiner.java
*** gcc-4.0.2/libjava/classpath/java/security/IntersectingDomainCombiner.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/IntersectingDomainCombiner.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,82 ----
+ /* IntersectingDomainCombiner.java --
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.util.HashSet;
+ 
+ /**
+  * A trivial implementation of {@link DomainCombiner} that produces the
+  * intersection of the supplied {@link ProtectionDomain} objects.
+  */
+ final class IntersectingDomainCombiner implements DomainCombiner
+ {
+ 
+   // Contstant.
+   // -------------------------------------------------------------------------
+ 
+   static final IntersectingDomainCombiner SINGLETON = new IntersectingDomainCombiner();
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   private IntersectingDomainCombiner()
+   {
+   }
+ 
+   // Methods.
+   // -------------------------------------------------------------------------
+ 
+   public ProtectionDomain[] combine (ProtectionDomain[] currentDomains,
+                                      ProtectionDomain[] assignedDomains)
+   {
+     HashSet newDomains = new HashSet ();
+     for (int i = 0; i < currentDomains.length; i++)
+       {
+         if (currentDomains[i] == null)
+           continue;
+         for (int j = 0; j < assignedDomains.length; j++)
+           {
+             if (currentDomains[i].equals (assignedDomains[j]))
+               newDomains.add (currentDomains[i]);
+           }
+       }
+     return (ProtectionDomain[])
+       newDomains.toArray(new ProtectionDomain[newDomains.size()]);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/InvalidAlgorithmParameterException.java gcc-4.1.0/libjava/classpath/java/security/InvalidAlgorithmParameterException.java
*** gcc-4.0.2/libjava/classpath/java/security/InvalidAlgorithmParameterException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/InvalidAlgorithmParameterException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* InvalidAlgorithmParameterException.java -- an invalid parameter to a
+    security algorithm
+    Copyright (C) 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * Thrown for an invalid security algorithm parameter.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class InvalidAlgorithmParameterException
+   extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 2864672297499471472L;
+ 
+   /**
+    * Construct an exception with no message.
+    */
+   public InvalidAlgorithmParameterException()
+   {
+     super();
+   }
+ 
+   /**
+    * Construct an exception with a message.
+    *
+    * @param msg the message
+    */
+   public InvalidAlgorithmParameterException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/InvalidKeyException.java gcc-4.1.0/libjava/classpath/java/security/InvalidKeyException.java
*** gcc-4.0.2/libjava/classpath/java/security/InvalidKeyException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/InvalidKeyException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* InvalidKeyException -- thrown for an invalid key
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * Thrown for an invalid key.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class InvalidKeyException extends KeyException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5698479920593359816L;
+ 
+   /**
+    * Construct an exception with no message.
+    */
+   public InvalidKeyException()
+   {
+   }
+ 
+   /**
+    * Construct an exception with a message.
+    *
+    * @param msg the message
+    */
+   public InvalidKeyException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/InvalidParameterException.java gcc-4.1.0/libjava/classpath/java/security/InvalidParameterException.java
*** gcc-4.0.2/libjava/classpath/java/security/InvalidParameterException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/InvalidParameterException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* InvalidParameterException.java -- an invalid parameter in the JCA/JCE engine
+    Copyright (C) 2000, 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * Thrown when an invalid parameter is passed to a method of the JCA/JCE
+  * engine classes.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @status updated to 1.4
+  */
+ public class InvalidParameterException extends IllegalArgumentException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -857968536935667808L;
+ 
+   /**
+    * Construct an exception with no message.
+    */
+   public InvalidParameterException()
+   {
+   }
+ 
+   /**
+    * Construct an exception with a message.
+    *
+    * @param msg the message
+    */
+   public InvalidParameterException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Key.java gcc-4.1.0/libjava/classpath/java/security/Key.java
*** gcc-4.0.2/libjava/classpath/java/security/Key.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Key.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* Key.java -- A abstract representation of a digital key
+    Copyright (C) 1998, 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * This interfaces models the base characteristics that all keys must
+  * have.  These are:  a key algorithm, an encoded form, and a format used
+  * to encode the key.  Specific key types inherit from this interface.
+  * Note that since this interface extends <code>Serializable</code>, all
+  * keys may be serialized. Keys are generally obtained through key generators,
+  * including {@link KeyFactory}.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see PublicKey
+  * @see PrivateKey
+  * @see KeyPair
+  * @see KeyPairGenerator
+  * @see KeyFactory
+  * @see KeySpec
+  * @see Identity
+  * @see Signer
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface Key extends Serializable
+ {
+   /**
+    * The version identifier used for serialization.
+    */
+   long serialVersionUID = 6603384152749567654L;
+ 
+   /**
+    * This method returns the name of the algorithm for this key.  This is a
+    * <code>String</code> such as "RSA".
+    *
+    * @return the name of the algorithm in use
+    */
+   String getAlgorithm();
+ 
+   /**
+    * This method returns the name of the encoding format for this key.  This
+    * is the name of the ASN.1 data format used for this key, such as
+    * "X.509" or "PKCS#8".  This method returns <code>null</code> if this key
+    * does not have an encoding format.
+    *
+    * @return the name of the encoding format for this key, or null
+    */
+   String getFormat();
+ 
+   /**
+    * This method returns the encoded form of the key.  If this key does not
+    * support encoding, this method returns <code>null</code>.
+    *
+    * @return the encoded form of the key, or null
+    */
+   byte[] getEncoded();
+ } // interface Key
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyException.java gcc-4.1.0/libjava/classpath/java/security/KeyException.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* KeyException.java -- Thrown when there is a problem with a key
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception is thrown when there is a problem with a key.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Key
+  * @status updated to 1.4
+  */
+ public class KeyException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -7483676942812432108L;
+ 
+   /**
+    * This method initializes a new instance of <code>KeyException</code>
+    * with no descriptive message.
+    */
+   public KeyException()
+   {
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>KeyException</code>
+    * with a descriptive message.
+    *
+    * @param msg the descriptive message
+    */
+   public KeyException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyFactory.java gcc-4.1.0/libjava/classpath/java/security/KeyFactory.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,297 ----
+ /* KeyFactory.java --- Key Factory Class
+    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * <p>Key factories are used to convert keys (opaque cryptographic keys of type
+  * {@link Key}) into key specifications (transparent representations of the
+  * underlying key material), and vice versa.</p>
+  *
+  * <p>Key factories are bi-directional. That is, they allow you to build an
+  * opaque key object from a given key specification (key material), or to
+  * retrieve the underlying key material of a key object in a suitable format.</p>
+  *
+  * <p>Multiple compatible key specifications may exist for the same key. For
+  * example, a <i>DSA</i> public key may be specified using {@link
+  * java.security.spec.DSAPublicKeySpec} or {@link
+  * java.security.spec.X509EncodedKeySpec}. A key factory can be used to
+  * translate between compatible key specifications.</p>
+  *
+  * <p>The following is an example of how to use a key factory in order to
+  * instantiate a <i>DSA</i> public key from its encoding. Assume Alice has
+  * received a digital signature from Bob. Bob also sent her his public key (in
+  * encoded format) to verify his signature. Alice then performs the following
+  * actions:
+  *
+  * <pre>
+  *  X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
+  *  KeyFactory keyFactory = KeyFactory.getInstance("DSA");
+  *  PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
+  *  Signature sig = Signature.getInstance("DSA");
+  *  sig.initVerify(bobPubKey);
+  *  sig.update(data);
+  *  sig.verify(signature);
+  * </pre>
+  *
+  * @since 1.2
+  * @see Key
+  * @see PublicKey
+  * @see PrivateKey
+  * @see KeySpec
+  * @see java.security.spec.DSAPublicKeySpec
+  * @see java.security.spec.X509EncodedKeySpec
+    @author Mark Benvenuto
+  */
+ public class KeyFactory
+ {
+   /** The service name for key factories. */
+   private static final String KEY_FACTORY = "KeyFactory";
+ 
+   private KeyFactorySpi keyFacSpi;
+   private Provider provider;
+   private String algorithm;
+ 
+   /**
+    * Creates a <code>KeyFactory</code> object.
+    *
+    * @param keyFacSpi the delegate.
+    * @param provider the provider.
+    * @param algorithm the name of the algorithm to associate with this
+    * <code>KeyFactory</code>.
+    */
+   protected KeyFactory(KeyFactorySpi keyFacSpi, Provider provider,
+ 		       String algorithm)
+   {
+     this.keyFacSpi = keyFacSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+   }
+ 
+   /**
+    * Generates a <code>KeyFactory</code> object that implements the specified
+    * algorithm. If the default provider package provides an implementation of
+    * the requested algorithm, an instance of <code>KeyFactory</code> containing
+    * that implementation is returned. If the algorithm is not available in the
+    * default package, other packages are searched.
+    *
+    * @param algorithm the name of the requested key algorithm. See Appendix A
+    * in the Java Cryptography Architecture API Specification &amp; Reference
+    * for information about standard algorithm names.
+    * @return a <code>KeyFactory</code> object for the specified algorithm.
+    * @throws NoSuchAlgorithmException if the requested algorithm is not
+    * available in the default provider package or any of the other provider
+    * packages that were searched.
+    */
+   public static KeyFactory getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+     for (int i = 0; i < p.length; i++)
+       try
+         {
+           return getInstance(algorithm, p[i]);
+         }
+       catch (NoSuchAlgorithmException e)
+ 	{
+ 	  // Ignore.
+ 	}
+ 
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Generates a <code>KeyFactory</code> object for the specified algorithm
+    * from the specified provider.
+    *
+    * @param algorithm the name of the requested key algorithm. See Appendix A
+    * in the Java Cryptography Architecture API Specification &amp; Reference
+    * for information about standard algorithm names.
+    * @param provider the name of the provider.
+    * @return a <code>KeyFactory</code> object for the specified algorithm.
+    * @throws NoSuchAlgorithmException if the algorithm is not available from
+    * the specified provider.
+    * @throws NoSuchProviderException if the provider has not been configured.
+    * @throws IllegalArgumentException if the provider name is null or empty.
+    * @see Provider
+    */
+   public static KeyFactory getInstance(String algorithm, String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     if (provider == null || provider.length() == 0)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+ 
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Generates a <code>KeyFactory</code> object for the specified algorithm from
+    * the specified provider. Note: the <code>provider</code> doesn't have to be
+    * registered.
+    *
+    * @param algorithm the name of the requested key algorithm. See Appendix A
+    * in the Java Cryptography Architecture API Specification &amp; Reference for
+    * information about standard algorithm names.
+    * @param provider the provider.
+    * @return a <code>KeyFactory</code> object for the specified algorithm.
+    * @throws NoSuchAlgorithmException if the algorithm is not available from
+    * the specified provider.
+    * @throws IllegalArgumentException if the <code>provider</code> is
+    * <code>null</code>.
+    * @since 1.4
+    * @see Provider
+    */
+   public static KeyFactory getInstance(String algorithm, Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     try
+       {
+ 	return new KeyFactory((KeyFactorySpi)
+ 	  Engine.getInstance(KEY_FACTORY, algorithm, provider),
+           provider, algorithm);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+ 	throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+ 	throw new NoSuchAlgorithmException(algorithm);
+       } 
+   }
+ 
+   /**
+    * Returns the provider of this key factory object.
+    *
+    * @return the provider of this key factory object.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Gets the name of the algorithm associated with this <code>KeyFactory</code>.
+    *
+    * @return the name of the algorithm associated with this
+    * <code>KeyFactory</code>.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Generates a public key object from the provided key specification (key
+    * material).
+    *
+    * @param keySpec the specification (key material) of the public key.
+    * @return the public key.
+    * @throws InvalidKeySpecException if the given key specification is
+    * inappropriate for this key factory to produce a public key.
+    */
+   public final PublicKey generatePublic(KeySpec keySpec)
+     throws InvalidKeySpecException
+   {
+     return keyFacSpi.engineGeneratePublic(keySpec);
+   }
+ 
+   /**
+    * Generates a private key object from the provided key specification (key
+    * material).
+    *
+    * @param keySpec the specification (key material) of the private key.
+    * @return the private key.
+    * @throws InvalidKeySpecException if the given key specification is
+    * inappropriate for this key factory to produce a private key.
+    */
+   public final PrivateKey generatePrivate(KeySpec keySpec)
+     throws InvalidKeySpecException
+   {
+     return keyFacSpi.engineGeneratePrivate(keySpec);
+   }
+ 
+   /**
+    * Returns a specification (key material) of the given key object.
+    * <code>keySpec</code> identifies the specification class in which the key
+    * material should be returned. It could, for example, be
+    * <code>DSAPublicKeySpec.class</code>, to indicate that the key material
+    * should be returned in an instance of the {@link
+    * java.security.spec.DSAPublicKeySpec} class.
+    *
+    * @param key the key.
+    * @param keySpec the specification class in which the key material should be
+    * returned.
+    * @return the underlying key specification (key material) in an instance of
+    * the requested specification class.
+    * @throws InvalidKeySpecException if the requested key specification is
+    * inappropriate for the given key, or the given key cannot be processed
+    * (e.g., the given key has an unrecognized algorithm or format).
+    */
+   public final KeySpec getKeySpec(Key key, Class keySpec)
+     throws InvalidKeySpecException
+   {
+     return keyFacSpi.engineGetKeySpec(key, keySpec);
+   }
+ 
+   /**
+    * Translates a key object, whose provider may be unknown or potentially
+    * untrusted, into a corresponding key object of this key factory.
+    *
+    * @param key the key whose provider is unknown or untrusted.
+    * @return the translated key.
+    * @throws InvalidKeyException if the given key cannot be processed by this
+    * key factory.
+    */
+   public final Key translateKey(Key key) throws InvalidKeyException
+   {
+     return keyFacSpi.engineTranslateKey(key);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyFactorySpi.java gcc-4.1.0/libjava/classpath/java/security/KeyFactorySpi.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyFactorySpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyFactorySpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,133 ----
+ /* KeyFactorySpi.java --- Key Factory Service Provider Interface
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * KeyFactorySpi is the Service Provider Interface (SPI) for the 
+  * KeyFactory class. This is the interface for providers to 
+  * supply to implement a key factory for an algorithm.
+  *
+  * Key factories are used to convert keys (opaque cryptographic 
+  * keys of type Key) into key specifications (transparent 
+  * representations of the underlying key material).
+  *
+  * Key factories are bi-directional. They allow a key class 
+  * to be converted into a key specification (key material) and
+  * back again.
+  *
+  * For example DSA public keys can be specified as 
+  * DSAPublicKeySpec or X509EncodedKeySpec. The key factory
+  * translate these key specifications. 
+  *
+  * @since JDK 1.2
+  * @author Mark Benvenuto
+  */
+ public abstract class KeyFactorySpi
+ {
+   /**
+    * Constucts a new KeyFactorySpi.
+    */
+   public KeyFactorySpi()
+   {
+   }
+ 
+   /**
+    * Generates a public key from the provided key specification.
+    *
+    * @param keySpec key specification
+    *
+    * @return the public key
+    *
+    * @throws InvalidKeySpecException invalid key specification for
+    * this key factory to produce a public key
+    */
+   protected abstract PublicKey engineGeneratePublic(KeySpec keySpec)
+     throws InvalidKeySpecException;
+ 
+ 
+   /**
+    * Generates a private key from the provided key specification.
+    *
+    * @param keySpec key specification
+    *
+    * @return the private key
+    *
+    * @throws InvalidKeySpecException invalid key specification for
+    * this key factory to produce a private key
+    */
+   protected abstract PrivateKey engineGeneratePrivate(KeySpec keySpec)
+     throws InvalidKeySpecException;
+ 
+   /**
+    * Returns a key specification for the given key. keySpec 
+    * identifies the specification class to return the key 
+    * material in.
+    *
+    * @param key the key
+    * @param keySpec the specification class to return the 
+    * key material in.
+    *
+    * @return the key specification in an instance of the requested
+    * specification class
+    *
+    * @throws InvalidKeySpecException the requested key specification
+    * is inappropriate for this key or the key is 
+    * unrecognized.
+    */
+   protected abstract KeySpec engineGetKeySpec(Key key, Class keySpec)
+     throws InvalidKeySpecException;
+ 
+ 
+   /**
+    * Translates the key from an unknown or untrusted provider
+    * into a key for this key factory.
+    *
+    * @param the key from an unknown or untrusted provider
+    *
+    * @return the translated key
+    *
+    * @throws InvalidKeySpecException if the key cannot be 
+    * processed by this key factory
+    */
+   protected abstract Key engineTranslateKey(Key key)
+     throws InvalidKeyException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyManagementException.java gcc-4.1.0/libjava/classpath/java/security/KeyManagementException.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyManagementException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyManagementException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* KeyManagementException.java -- an exception in key management
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception is thrown whenever a problem related to the management of
+  * security keys is encountered.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Key
+  * @status updated to 1.4
+  */
+ public class KeyManagementException extends KeyException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 947674216157062695L;
+ 
+   /**
+    * Create a new instance with no descriptive error message.
+    */
+   public KeyManagementException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param msg the descriptive error message
+    */
+   public KeyManagementException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyPair.java gcc-4.1.0/libjava/classpath/java/security/KeyPair.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyPair.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyPair.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* KeyPair.java --- Key Pair Class
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ import java.io.Serializable;
+ 
+ /**
+    KeyPair serves as a simple container for public and private keys.
+    If properly initialized, this class should be treated like the
+    private key since it contains it and take approriate security
+    measures.
+ 
+    @author Mark Benvenuto
+  */
+ public final class KeyPair implements Serializable
+ {
+   private static final long serialVersionUID = -7565189502268009837L;
+ 
+   private PublicKey publicKey;
+   private PrivateKey privateKey;
+ 
+   /**
+      Initializes the KeyPair with a pubilc and private key.
+ 
+      @param publicKey Public Key to store
+      @param privateKey Private Key to store
+    */
+   public KeyPair(PublicKey publicKey, PrivateKey privateKey)
+   {
+     this.publicKey = publicKey;
+     this.privateKey = privateKey;
+   }
+ 
+   /**
+      Returns the public key stored in the KeyPair
+ 
+      @return The public key
+    */
+   public PublicKey getPublic()
+   {
+     return publicKey;
+   }
+ 
+   /**
+      Returns the private key stored in the KeyPair
+ 
+      @return The private key
+    */
+   public PrivateKey getPrivate()
+   {
+     return privateKey;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyPairGenerator.java gcc-4.1.0/libjava/classpath/java/security/KeyPairGenerator.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyPairGenerator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyPairGenerator.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,400 ----
+ /* KeyPairGenerator.java --- Key Pair Generator Class
+    Copyright (C) 1999, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * <p>The <code>KeyPairGenerator</code> class is used to generate pairs of
+  * public and private keys. Key pair generators are constructed using the
+  * <code>getInstance()</code> factory methods (static methods that return
+  * instances of a given class).</p>
+  *
+  * <p>A Key pair generator for a particular algorithm creates a public/private
+  * key pair that can be used with this algorithm. It also associates
+  * algorithm-specific parameters with each of the generated keys.</p>
+  *
+  * <p>There are two ways to generate a key pair: in an algorithm-independent
+  * manner, and in an algorithm-specific manner. The only difference between the
+  * two is the initialization of the object:</p>
+  *
+  * <ul>
+  * <li><b>Algorithm-Independent Initialization</b><br/>
+  *     All key pair generators share the concepts of a <i>keysize</i> and a
+  *     <i>source of randomness</i>. The <i>keysize</i> is interpreted differently
+  *     for different algorithms (e.g., in the case of the <i>DSA</i> algorithm,
+  *     the <i>keysize</i> corresponds to the length of the modulus). There is an
+  *     <code>initialize()</code> method in this <code>KeyPairGenerator</code>
+  *     class that takes these two universally shared types of arguments. There
+  *     is also one that takes just a <i>keysize</i> argument, and uses the
+  *     {@link SecureRandom} implementation of the highest-priority installed
+  *     provider as the <i>source of randomness</i>. (If none of the installed
+  *     providers supply an implementation of {@link SecureRandom}, a
+  *     system-provided source of randomness is used.)
+  *
+  *     <p>Since no other parameters are specified when you call the above
+  *     algorithm-independent initialize methods, it is up to the provider what
+  *     to do about the algorithm-specific parameters (if any) to be associated
+  *     with each of the keys.</p>
+  *
+  *     <p>If the algorithm is the <i>DSA</i> algorithm, and the <i>keysize</i>
+  *     (modulus size) is <code>512</code>, <code>768</code>, or <code>1024</code>,
+  *     then the <b>GNU</b> provider uses a set of precomputed values for the
+  *     <code>p</code>, <code>q</code>, and <code>g</code> parameters. If the
+  *     <i>modulus size</i> is not one of the above values, the <b>GNU</b>
+  *     provider creates a new set of parameters. Other providers might have
+  *     precomputed parameter sets for more than just the three modulus sizes
+  *     mentioned above. Still others might not have a list of precomputed
+  *     parameters at all and instead always create new parameter sets.</p></li>
+  * <li><b>Algorithm-Specific Initialization</b><br/>
+  *     For situations where a set of algorithm-specific parameters already
+  *     exists (e.g., so-called <i>community parameters</i> in <i>DSA</i>), there
+  *     are two initialize methods that have an {@link AlgorithmParameterSpec}
+  *     argument. One also has a {@link SecureRandom} argument, while the the
+  *     other uses the {@link SecureRandom} implementation of the highest-priority
+  *     installed provider as the source of randomness. (If none of the installed
+  *     providers supply an implementation of {@link SecureRandom}, a
+  *     system-provided source of randomness is used.)</li>
+  * </ul>
+  *
+  * <p>In case the client does not explicitly initialize the
+  * <code>KeyPairGenerator</code> (via a call to an initialize method), each
+  * provider must supply (and document) a default initialization. For example,
+  * the <b>GNU</b> provider uses a default modulus size (keysize) of
+  * <code>1024</code> bits.</p>
+  *
+  * <p>Note that this class is abstract and extends from {@link
+  * KeyPairGeneratorSpi} for historical reasons. Application developers should
+  * only take notice of the methods defined in this <code>KeyPairGenerator</code>
+  * class; all the methods in the superclass are intended for cryptographic
+  * service providers who wish to supply their own implementations of key pair
+  * generators.</p>
+  *
+  * @see Signature
+  * @see KeyPair
+  * @see AlgorithmParameterSpec
+  * @author Mark Benvenuto
+  * @author Casey Marshall
+  */
+ public abstract class KeyPairGenerator extends KeyPairGeneratorSpi
+ {
+   /** The service name for key pair generators. */
+   private static final String KEY_PAIR_GENERATOR = "KeyPairGenerator";
+ 
+   Provider provider;
+   private String algorithm;
+ 
+   /**
+    * Creates a <code>KeyPairGenerator</code> object for the specified 
+    * algorithm.
+    *
+    * @param algorithm the standard string name of the algorithm. 
+    * See Appendix A in the Java Cryptography Architecture API 
+    * Specification &amp; Reference for information about standard 
+    * algorithm names.
+    */
+   protected KeyPairGenerator(String algorithm)
+   {
+     this.algorithm = algorithm;
+     this.provider = null;
+   }
+ 
+   /**
+    * Returns the standard name of the algorithm for this key pair generator.
+    * See Appendix A in the Java Cryptography Architecture API Specification
+    * &amp; Reference for information about standard algorithm names.
+    *
+    * @return the standard string name of the algorithm.
+    */
+   public String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Generates a <code>KeyPairGenerator</code> object that implements the
+    * specified digest algorithm. If the default provider package provides an
+    * implementation of the requested digest algorithm, an instance of
+    * <code>KeyPairGenerator</code> containing that implementation is returned.
+    * If the algorithm is not available in the default package, other packages
+    * are searched.
+    *
+    * @param algorithm the standard string name of the algorithm. See Appendix A
+    * in the Java Cryptography Architecture API Specification &amp; Reference for
+    * information about standard algorithm names.
+    * @return the new <code>KeyPairGenerator</code> object.
+    * @throws NoSuchAlgorithmException if the algorithm is not available in the
+    * environment.
+    */
+   public static KeyPairGenerator getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+     for (int i = 0; i < p.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, p[i]);
+ 	  }
+ 	catch (NoSuchAlgorithmException e)
+ 	  {
+ 	    // Ignored.
+ 	  }
+       }
+ 
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Generates a <code>KeyPairGenerator</code> object implementing the 
+    * specified algorithm, as supplied from the specified provider, if 
+    * such an algorithm is available from the provider.
+    *
+    * @param algorithm the standard string name of the algorithm. See 
+    * Appendix A in the Java Cryptography Architecture API Specification 
+    * &amp; Reference for information about standard algorithm names.
+    * @param provider the string name of the provider.
+    * @return the new <code>KeyPairGenerator</code> object.
+    * @throws NoSuchAlgorithmException if the algorithm is not available 
+    * from the provider.
+    * @throws NoSuchProviderException if the provider is not available in the
+    * environment.
+    * @throws IllegalArgumentException if the provider name is <code>null</code>
+    * or empty.
+    * @see Provider
+    */
+   public static KeyPairGenerator getInstance(String algorithm, String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+ 
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Generates a <code>KeyPairGenerator</code> object implementing the specified
+    * algorithm, as supplied from the specified provider, if such an algorithm is
+    * available from the provider. Note: the provider doesn't have to be
+    * registered.
+    *
+    * @param algorithm the standard string name of the algorithm. See Appendix A
+    * in the Java Cryptography Architecture API Specification &amp; Reference for
+    * information about standard algorithm names.
+    * @param provider the provider.
+    * @return the new <code>KeyPairGenerator</code> object.
+    * @throws NoSuchAlgorithmException if the <code>algorithm</code> is not
+    * available from the <code>provider</code>.
+    * @throws IllegalArgumentException if the <code>provider</code> is
+    * <code>null</code>.
+    * @since 1.4
+    * @see Provider
+    */
+   public static KeyPairGenerator getInstance(String algorithm, 
+ 					     Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     Object o = null;
+     try
+       {
+         o = Engine.getInstance(KEY_PAIR_GENERATOR, algorithm, provider);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+ 	throw new NoSuchAlgorithmException(algorithm);
+       }
+ 
+     KeyPairGenerator result = null;
+     if (o instanceof KeyPairGeneratorSpi)
+       {
+ 	result = new DummyKeyPairGenerator((KeyPairGeneratorSpi) o, algorithm);
+       }
+     else if (o instanceof KeyPairGenerator)
+       {
+         result = (KeyPairGenerator) o;
+         result.algorithm = algorithm;
+       }
+     result.provider = provider;
+     return result;
+   }
+ 
+   /**
+    * Returns the provider of this key pair generator object.
+    *
+    * @return the provider of this key pair generator object.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Initializes the key pair generator for a certain keysize using a default
+    * parameter set and the {@link SecureRandom} implementation of the
+    * highest-priority installed provider as the source of randomness. (If none
+    * of the installed providers supply an implementation of {@link SecureRandom},
+    * a system-provided source of randomness is used.)
+    *
+    * @param keysize the keysize. This is an algorithm-specific metric, such as
+    * modulus length, specified in number of bits.
+    * @throws InvalidParameterException if the keysize is not supported by this
+    * <code>KeyPairGenerator</code> object.
+    */
+   public void initialize(int keysize)
+   {
+     initialize(keysize, new SecureRandom());
+   }
+ 
+   /**
+    * Initializes the key pair generator for a certain keysize with the given
+    * source of randomness (and a default parameter set).
+    *
+    * @param keysize the keysize. This is an algorithm-specific metric, such as
+    * modulus length, specified in number of bits.
+    * @param random the source of randomness.
+    * @throws InvalidParameterException if the <code>keysize</code> is not
+    * supported by this <code>KeyPairGenerator</code> object.
+    * @since 1.2
+    */
+   public void initialize(int keysize, SecureRandom random)
+   {
+   }
+ 
+   /**
+    * <p>Initializes the key pair generator using the specified parameter set and
+    * the {@link SecureRandom} implementation of the highest-priority installed
+    * provider as the source of randomness. (If none of the installed providers
+    * supply an implementation of {@link SecureRandom}, a system-provided source
+    * of randomness is used.)</p>
+    *
+    * <p>This concrete method has been added to this previously-defined abstract
+    * class. This method calls the
+    * {@link KeyPairGeneratorSpi#initialize(AlgorithmParameterSpec, SecureRandom)}
+    * initialize method, passing it <code>params</code> and a source of
+    * randomness (obtained from the highest-priority installed provider or
+    * system-provided if none of the installed providers supply one). That
+    * initialize method always throws an {@link UnsupportedOperationException}
+    * if it is not overridden by the provider.</p>
+    *
+    * @param params the parameter set used to generate the keys.
+    * @throws InvalidAlgorithmParameterException if the given parameters are
+    * inappropriate for this key pair generator.
+    * @since 1.2
+    */
+   public void initialize(AlgorithmParameterSpec params)
+     throws InvalidAlgorithmParameterException
+   {
+     initialize(params, new SecureRandom());
+   }
+ 
+   /**
+    * <p>Initializes the key pair generator with the given parameter set and
+    * source of randomness.</p>
+    *
+    * <p>This concrete method has been added to this previously-defined abstract
+    * class. This method calls the
+    * {@link KeyPairGeneratorSpi#initialize(AlgorithmParameterSpec, SecureRandom)}
+    * initialize method, passing it <code>params</code> and <code>random</code>.
+    * That initialize method always throws an {@link UnsupportedOperationException}
+    * if it is not overridden by the provider.</p>
+    *
+    * @param params the parameter set used to generate the keys.
+    * @param random the source of randomness.
+    * @throws InvalidAlgorithmParameterException if the given parameters are
+    * inappropriate for this key pair generator.
+    * @since 1.2
+    */
+   public void initialize(AlgorithmParameterSpec params, SecureRandom random)
+     throws InvalidAlgorithmParameterException
+   {
+     super.initialize(params, random);
+   }
+ 
+   /**
+    * <p>Generates a key pair.</p>
+    *
+    * <p>If this <code>KeyPairGenerator</code> has not been initialized
+    * explicitly, provider-specific defaults will be used for the size and other
+    * (algorithm-specific) values of the generated keys.</p>
+    *
+    * <p>This will generate a new key pair every time it is called.</p>
+    *
+    * <p>This method is functionally equivalent to {@link #generateKeyPair()}.</p>
+    *
+    * @return the generated key pair.
+    * @since 1.2
+    */
+   public final KeyPair genKeyPair()
+   {
+     try
+       {
+         return getInstance("DSA", "GNU").generateKeyPair();
+       }
+     catch (Exception e)
+       {
+         System.err.println("genKeyPair failed: " + e);
+         e.printStackTrace();
+         return null;
+       }
+   }
+ 
+   /**
+    * <p>Generates a key pair.</p>
+    *
+    * <p>If this <code>KeyPairGenerator</code> has not been initialized
+    * explicitly, provider-specific defaults will be used for the size and other
+    * (algorithm-specific) values of the generated keys.</p>
+    *
+    * <p>This will generate a new key pair every time it is called.</p>
+    *
+    * <p>This method is functionally equivalent to {@link #genKeyPair()}.</p>
+    *
+    * @return the generated key pair.
+    */
+   public KeyPair generateKeyPair()
+   {
+     return genKeyPair();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyPairGeneratorSpi.java gcc-4.1.0/libjava/classpath/java/security/KeyPairGeneratorSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyPairGeneratorSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyPairGeneratorSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* KeyPairGeneratorSpi.java --- Key Pair Generator SPI Class
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+    KeyPairGeneratorSpi is the interface used to generate key pairs
+    for security algorithms.
+ 
+    @author Mark Benvenuto
+  */
+ public abstract class KeyPairGeneratorSpi
+ {
+   /**
+      Constructs a new KeyPairGeneratorSpi
+    */
+   public KeyPairGeneratorSpi()
+   {
+   }
+ 
+   /**
+      Initialize the KeyPairGeneratorSpi with the specified
+      key size and source of randomness
+ 
+      @param keysize size of the key to generate
+      @param random A SecureRandom source of randomness  
+    */
+   public abstract void initialize(int keysize, SecureRandom random);
+ 
+   /**
+      Initialize the KeyPairGeneratorSpi with the specified
+      AlgorithmParameterSpec and source of randomness
+ 
+      This is a concrete method. It may be overridden by the provider
+      and if the AlgorithmParameterSpec class is invalid
+      throw InvalidAlgorithmParameterException. By default this
+      method just throws UnsupportedOperationException.
+ 
+      @param params A AlgorithmParameterSpec to intialize with
+      @param random A SecureRandom source of randomness  
+ 
+      @throws InvalidAlgorithmParameterException
+    */
+   public void initialize(AlgorithmParameterSpec params, SecureRandom random)
+     throws InvalidAlgorithmParameterException
+   {
+     throw new java.lang.UnsupportedOperationException();
+   }
+ 
+   /**
+      Generates a KeyPair according the rules for the algorithm.
+      Unless intialized, algorithm defaults will be used. It 
+      creates a unique key pair each time.
+ 
+      @return a key pair
+    */
+   public abstract KeyPair generateKeyPair();
+ 
+   /**
+    * We override clone here to make it accessible for use by
+    * DummyKeyPairGenerator.
+    */
+   protected Object clone() throws CloneNotSupportedException
+   {
+     return super.clone();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyStore.java gcc-4.1.0/libjava/classpath/java/security/KeyStore.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyStore.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyStore.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,507 ----
+ /* KeyStore.java --- Key Store Class
+    Copyright (C) 1999, 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.security.cert.CertificateException;
+ import java.util.Date;
+ import java.util.Enumeration;
+ 
+ /**
+  * Keystore represents an in-memory collection of keys and 
+  * certificates. There are two types of entries:
+  *
+  * <dl>
+  * <dt>Key Entry</dt>
+  *
+  * <dd><p>This type of keystore entry store sensitive crytographic key
+  * information in a protected format.Typically this is a secret 
+  * key or a private key with a certificate chain.</p></dd>
+  *
+  * <dt>Trusted Ceritificate Entry</dt>
+  *
+  * <dd><p>This type of keystore entry contains a single public key 
+  * certificate belonging to annother entity. It is called trusted
+  * because the keystore owner trusts that the certificates
+  * belongs to the subject (owner) of the certificate.</p></dd>
+  * </dl>
+  *
+  * <p>Entries in a key store are referred to by their "alias": a simple
+  * unique string.
+  *
+  * <p>The structure and persistentence of the key store is not 
+  * specified. Any method could be used to protect sensitive 
+  * (private or secret) keys. Smart cards or integrated 
+  * cryptographic engines could be used or the keystore could 
+  * be simply stored in a file.</p>
+  *
+  * @see java.security.cert.Certificate
+  * @see Key
+  */
+ public class KeyStore
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** Service name for key stores. */
+   private static final String KEY_STORE = "KeyStore";
+ 
+   private KeyStoreSpi keyStoreSpi;
+   private Provider provider;
+   private String type;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+      Creates an instance of KeyStore
+ 
+      @param keyStoreSpi A KeyStore engine to use
+      @param provider A provider to use
+      @param type The type of KeyStore
+    */
+   protected KeyStore(KeyStoreSpi keyStoreSpi, Provider provider, String type)
+   {
+     this.keyStoreSpi = keyStoreSpi;
+     this.provider = provider;
+     this.type = type;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /** 
+    * Gets an instance of the KeyStore class representing
+    * the specified keystore. If the type is not 
+    * found then, it throws KeyStoreException.
+    *
+    * @param type the type of keystore to choose
+    * @return a KeyStore repesenting the desired type
+    * @throws KeyStoreException if the type of keystore is not implemented
+    *         by providers or the implementation cannot be instantiated.
+    */
+   public static KeyStore getInstance(String type) throws KeyStoreException
+   {
+     Provider[] p = Security.getProviders();
+ 
+     for (int i = 0; i < p.length; i++)
+       {
+         try
+           {
+             return getInstance(type, p[i]);
+           }
+         catch (KeyStoreException e)
+           {
+ 	    // Ignore.
+           }
+       }
+ 
+     throw new KeyStoreException(type);
+   }
+ 
+   /** 
+    * Gets an instance of the KeyStore class representing
+    * the specified key store from the specified provider. 
+    * If the type is not found then, it throws KeyStoreException. 
+    * If the provider is not found, then it throws 
+    * NoSuchProviderException.
+    *
+    * @param type the type of keystore to choose
+    * @param provider the provider name
+    * @return a KeyStore repesenting the desired type
+    * @throws KeyStoreException if the type of keystore is not 
+    *          implemented by the given provider
+    * @throws NoSuchProviderException if the provider is not found
+    * @throws IllegalArgumentException if the provider string is 
+    *           null or empty
+    */
+   public static KeyStore getInstance(String type, String provider)
+     throws KeyStoreException, NoSuchProviderException
+   {
+     if (provider == null || provider.length() == 0)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+ 
+     return getInstance(type, p);
+   }
+ 
+   /** 
+    * Gets an instance of the KeyStore class representing
+    * the specified key store from the specified provider. 
+    * If the type is not found then, it throws KeyStoreException. 
+    * If the provider is not found, then it throws 
+    * NoSuchProviderException.
+    *
+    * @param type the type of keystore to choose
+    * @param provider the keystore provider
+    * @return a KeyStore repesenting the desired type
+    * @throws KeyStoreException if the type of keystore is not 
+    *          implemented by the given provider
+    * @throws IllegalArgumentException if the provider object is null
+    * @since 1.4
+    */
+   public static KeyStore getInstance(String type, Provider provider)
+     throws KeyStoreException 
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("Illegal provider");
+     try
+       {
+         return new KeyStore(
+           (KeyStoreSpi) Engine.getInstance(KEY_STORE, type, provider),
+           provider, type);
+       }
+     catch (NoSuchAlgorithmException nsae)
+       {
+         throw new KeyStoreException(type);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+ 	throw new KeyStoreException(type);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new KeyStoreException(type);
+       }
+   }
+ 
+   /**
+    * Returns the default KeyStore type. This method looks up the
+    * type in &lt;JAVA_HOME&gt;/lib/security/java.security with the 
+    * property "keystore.type" or if that fails then "jks" .
+    */
+   public static final String getDefaultType()
+   {
+     // Security reads every property in java.security so it 
+     // will return this property if it exists. 
+     String tmp = Security.getProperty("keystore.type");
+ 
+     if (tmp == null)
+       tmp = "jks";
+ 
+     return tmp;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+      Gets the provider that the class is from.
+ 
+      @return the provider of this class
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+      Returns the type of the KeyStore supported
+ 
+      @return A string with the type of KeyStore
+    */
+   public final String getType()
+   {
+     return type;
+   }
+ 
+   /**
+      Returns the key associated with given alias using the 
+      supplied password.
+ 
+      @param alias an alias for the key to get
+      @param password password to access key with
+ 
+      @return the requested key, or null otherwise
+ 
+      @throws NoSuchAlgorithmException if there is no algorithm
+      for recovering the key
+      @throws UnrecoverableKeyException key cannot be reocovered
+      (wrong password).
+    */
+   public final Key getKey(String alias, char[]password)
+     throws KeyStoreException, NoSuchAlgorithmException,
+     UnrecoverableKeyException
+   {
+     return keyStoreSpi.engineGetKey(alias, password);
+   }
+ 
+   /**
+      Gets a Certificate chain for the specified alias.
+ 
+      @param alias the alias name
+ 
+      @return a chain of Certificates ( ordered from the user's 
+      certificate to the Certificate Authority's ) or 
+      null if the alias does not exist or there is no
+      certificate chain for the alias ( the alias refers
+      to a trusted certificate entry or there is no entry).
+    */
+   public final java.security.cert.
+     Certificate[] getCertificateChain(String alias) throws KeyStoreException
+   {
+     return keyStoreSpi.engineGetCertificateChain(alias);
+   }
+ 
+   /**
+      Gets a Certificate for the specified alias.
+ 
+      If there is a trusted certificate entry then that is returned.
+      it there is a key entry with a certificate chain then the
+      first certificate is return or else null.
+ 
+      @param alias the alias name
+ 
+      @return a Certificate or null if the alias does not exist 
+      or there is no certificate for the alias
+    */
+   public final java.security.cert.Certificate getCertificate(String alias)
+     throws KeyStoreException
+   {
+     return keyStoreSpi.engineGetCertificate(alias);
+   }
+ 
+   /**
+      Gets entry creation date for the specified alias.
+ 
+      @param alias the alias name
+ 
+      @returns the entry creation date or null
+    */
+   public final Date getCreationDate(String alias) throws KeyStoreException
+   {
+     return keyStoreSpi.engineGetCreationDate(alias);
+   }
+ 
+   /**
+      Assign the key to the alias in the keystore, protecting it
+      with the given password. It will overwrite an existing 
+      entry and if the key is a PrivateKey, also add the 
+      certificate chain representing the corresponding public key.
+ 
+      @param alias the alias name
+      @param key the key to add
+      @password the password to protect with
+      @param chain the certificate chain for the corresponding
+      public key
+ 
+      @throws KeyStoreException if it fails
+    */
+   public final void setKeyEntry(String alias, Key key, char[]password,
+ 				java.security.cert.
+ 				Certificate[]chain) throws KeyStoreException
+   {
+     keyStoreSpi.engineSetKeyEntry(alias, key, password, chain);
+   }
+ 
+   /**
+      Assign the key to the alias in the keystore. It will overwrite
+      an existing entry and if the key is a PrivateKey, also 
+      add the certificate chain representing the corresponding 
+      public key.
+ 
+      @param alias the alias name
+      @param key the key to add
+      @param chain the certificate chain for the corresponding
+      public key
+ 
+      @throws KeyStoreException if it fails
+    */
+   public final void setKeyEntry(String alias, byte[]key,
+ 				java.security.cert.
+ 				Certificate[]chain) throws KeyStoreException
+   {
+     keyStoreSpi.engineSetKeyEntry(alias, key, chain);
+   }
+ 
+   /**
+      Assign the certificate to the alias in the keystore. It 
+      will overwrite an existing entry.
+ 
+      @param alias the alias name
+      @param cert the certificate to add
+ 
+      @throws KeyStoreException if it fails
+    */
+   public final void setCertificateEntry(String alias,
+ 					java.security.cert.
+ 					Certificate cert) throws
+     KeyStoreException
+   {
+     keyStoreSpi.engineSetCertificateEntry(alias, cert);
+   }
+ 
+   /**
+      Deletes the entry for the specified entry.
+ 
+      @param alias the alias name
+ 
+      @throws KeyStoreException if it fails
+    */
+   public final void deleteEntry(String alias) throws KeyStoreException
+   {
+     keyStoreSpi.engineDeleteEntry(alias);
+   }
+ 
+   /**
+      Generates a list of all the aliases in the keystore.
+ 
+      @return an Enumeration of the aliases
+    */
+   public final Enumeration aliases() throws KeyStoreException
+   {
+     return keyStoreSpi.engineAliases();
+   }
+ 
+   /**
+      Determines if the keystore contains the specified alias.
+ 
+      @param alias the alias name
+ 
+      @return true if it contains the alias, false otherwise
+    */
+   public final boolean containsAlias(String alias) throws KeyStoreException
+   {
+     return keyStoreSpi.engineContainsAlias(alias);
+   }
+ 
+   /**
+      Returns the number of entries in the keystore.
+ 
+      @returns the number of keystore entries.
+    */
+   public final int size() throws KeyStoreException
+   {
+     return keyStoreSpi.engineSize();
+   }
+ 
+   /**
+      Determines if the keystore contains a key entry for 
+      the specified alias.
+ 
+      @param alias the alias name
+ 
+      @return true if it is a key entry, false otherwise
+    */
+   public final boolean isKeyEntry(String alias) throws KeyStoreException
+   {
+     return keyStoreSpi.engineIsKeyEntry(alias);
+   }
+ 
+ 
+   /**
+      Determines if the keystore contains a certificate entry for 
+      the specified alias.
+ 
+      @param alias the alias name
+ 
+      @return true if it is a certificate entry, false otherwise
+    */
+   public final boolean isCertificateEntry(String alias)
+     throws KeyStoreException
+   {
+     return keyStoreSpi.engineIsCertificateEntry(alias);
+   }
+ 
+   /**
+      Determines if the keystore contains the specified certificate 
+      entry and returns the alias.
+ 
+      It checks every entry and for a key entry checks only the
+      first certificate in the chain.
+ 
+      @param cert Certificate to look for
+ 
+      @return alias of first matching certificate, null if it 
+      does not exist.
+    */
+   public final String getCertificateAlias(java.security.cert.Certificate cert)
+     throws KeyStoreException
+   {
+     return keyStoreSpi.engineGetCertificateAlias(cert);
+   }
+ 
+   /**
+      Stores the keystore in the specified output stream and it
+      uses the specified key it keep it secure.
+ 
+      @param stream the output stream to save the keystore to
+      @param password the password to protect the keystore integrity with
+ 
+      @throws IOException if an I/O error occurs.
+      @throws NoSuchAlgorithmException the data integrity algorithm 
+      used cannot be found.
+      @throws CertificateException if any certificates could not be
+      stored in the output stream.
+    */
+   public final void store(OutputStream stream, char[]password)
+     throws KeyStoreException, IOException, NoSuchAlgorithmException,
+     CertificateException
+   {
+     keyStoreSpi.engineStore(stream, password);
+   }
+ 
+   /**
+      Loads the keystore from the specified input stream and it
+      uses the specified password to check for integrity if supplied.
+ 
+      @param stream the input stream to load the keystore from
+      @param password the password to check the keystore integrity with
+ 
+      @throws IOException if an I/O error occurs.
+      @throws NoSuchAlgorithmException the data integrity algorithm 
+      used cannot be found.
+      @throws CertificateException if any certificates could not be
+      stored in the output stream.
+    */
+   public final void load(InputStream stream, char[]password)
+     throws IOException, NoSuchAlgorithmException, CertificateException
+   {
+     keyStoreSpi.engineLoad(stream, password);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyStoreException.java gcc-4.1.0/libjava/classpath/java/security/KeyStoreException.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyStoreException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyStoreException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* KeyStoreException.java -- Indicates a problem with the key store
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * Indicates a problem with the key store.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class KeyStoreException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -1119353179322377262L;
+ 
+   /**
+    * Create a new instance detailed error message.
+    */
+   public KeyStoreException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a detailed error message.
+    *
+    * @param msg the descriptive error message
+    */
+   public KeyStoreException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/KeyStoreSpi.java gcc-4.1.0/libjava/classpath/java/security/KeyStoreSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/KeyStoreSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/KeyStoreSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,275 ----
+ /* KeyStoreSpi.java --- Key Store Service Provider Interface
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.security.cert.CertificateException;
+ import java.util.Date;
+ import java.util.Enumeration;
+ 
+ /**
+  * KeyStoreSpi is the Service Provider Interface (SPI) for the 
+  * KeyStore class. This is the interface for providers to 
+  * supply to implement a keystore for a particular keystore 
+  * type.
+  *
+  * @since 1.2
+  * @author Mark Benvenuto
+  */
+ public abstract class KeyStoreSpi
+ {
+   /**
+    * Constructs a new KeyStoreSpi
+    */
+   public KeyStoreSpi()
+   {
+   }
+ 
+   /**
+    * Returns the key associated with given alias using the 
+    * supplied password.
+    *
+    * @param alias an alias for the key to get
+    * @param password password to access key with
+    *
+    * @return the requested key, or null otherwise
+    *
+    * @throws NoSuchAlgorithmException if there is no algorithm
+    * for recovering the key
+    * @throws UnrecoverableKeyException key cannot be reocovered
+    * (wrong password).
+    */
+   public abstract Key engineGetKey(String alias, char[]password)
+     throws NoSuchAlgorithmException, UnrecoverableKeyException;
+ 
+   /**
+    * Gets a Certificate chain for the specified alias.
+    *
+    * @param alias the alias name
+    *
+    * @return a chain of Certificates ( ordered from the user's 
+    * certificate to the Certificate Authority's ) or 
+    * null if the alias does not exist or there is no
+    * certificate chain for the alias ( the alias refers
+    * to a trusted certificate entry or there is no entry).
+    */
+   public abstract java.security.cert.
+     Certificate[] engineGetCertificateChain(String alias);
+ 
+ 
+   /**
+    * Gets a Certificate for the specified alias.
+    *
+    * If there is a trusted certificate entry then that is returned.
+    * it there is a key entry with a certificate chain then the
+    * first certificate is return or else null.
+    *
+    * @param alias the alias name
+    *
+    * @return a Certificate or null if the alias does not exist 
+    * or there is no certificate for the alias
+    */
+   public abstract java.security.cert.
+     Certificate engineGetCertificate(String alias);
+ 
+   /**
+    * Gets entry creation date for the specified alias.
+    *
+    * @param alias the alias name
+    *
+    * @returns the entry creation date or null
+    */
+   public abstract Date engineGetCreationDate(String alias);
+ 
+   /**
+    * Assign the key to the alias in the keystore, protecting it
+    * with the given password. It will overwrite an existing 
+    * entry and if the key is a PrivateKey, also add the 
+    * certificate chain representing the corresponding public key.
+    *
+    * @param alias the alias name
+    * @param key the key to add
+    * @password the password to protect with
+    * @param chain the certificate chain for the corresponding
+    * public key
+    *
+    * @throws KeyStoreException if it fails
+    */
+   public abstract void engineSetKeyEntry(String alias, Key key,
+ 					 char[]password,
+ 					 java.security.cert.
+ 					 Certificate[]chain) throws
+     KeyStoreException;
+ 
+   /**
+    * Assign the key to the alias in the keystore. It will overwrite
+    * an existing entry and if the key is a PrivateKey, also 
+    * add the certificate chain representing the corresponding 
+    * public key.
+    *
+    * @param alias the alias name
+    * @param key the key to add
+    * @param chain the certificate chain for the corresponding
+    * public key
+    *
+    * @throws KeyStoreException if it fails
+    */
+   public abstract void engineSetKeyEntry(String alias, byte[]key,
+ 					 java.security.cert.
+ 					 Certificate[]chain) throws
+     KeyStoreException;
+ 
+ 
+   /**
+    * Assign the certificate to the alias in the keystore. It 
+    * will overwrite an existing entry.
+    *
+    * @param alias the alias name
+    * @param cert the certificate to add
+    *
+    * @throws KeyStoreException if it fails
+    */
+   public abstract void engineSetCertificateEntry(String alias,
+ 						 java.security.cert.
+ 						 Certificate cert) throws
+     KeyStoreException;
+ 
+   /**
+    * Deletes the entry for the specified entry.
+    *
+    * @param alias the alias name
+    *
+    * @throws KeyStoreException if it fails
+    */
+   public abstract void engineDeleteEntry(String alias)
+     throws KeyStoreException;
+ 
+   /**
+    * Generates a list of all the aliases in the keystore.
+    *
+    * @return an Enumeration of the aliases
+    */
+   public abstract Enumeration engineAliases();
+ 
+   /**
+    * Determines if the keystore contains the specified alias.
+    *
+    * @param alias the alias name
+    *
+    * @return true if it contains the alias, false otherwise
+    */
+   public abstract boolean engineContainsAlias(String alias);
+ 
+   /**
+    * Returns the number of entries in the keystore.
+    *
+    * @returns the number of keystore entries.
+    */
+   public abstract int engineSize();
+ 
+   /**
+    * Determines if the keystore contains a key entry for 
+    * the specified alias.
+    *
+    * @param alias the alias name
+    *
+    * @return true if it is a key entry, false otherwise
+    */
+   public abstract boolean engineIsKeyEntry(String alias);
+ 
+   /**
+    * Determines if the keystore contains a certificate entry for 
+    * the specified alias.
+    *
+    * @param alias the alias name
+    *
+    * @return true if it is a certificate entry, false otherwise
+    */
+   public abstract boolean engineIsCertificateEntry(String alias);
+ 
+   /**
+    * Determines if the keystore contains the specified certificate 
+    * entry and returns the alias.
+    *
+    * It checks every entry and for a key entry checks only the
+    * first certificate in the chain.
+    *
+    * @param cert Certificate to look for
+    *
+    * @return alias of first matching certificate, null if it 
+    * does not exist.
+    */
+   public abstract String engineGetCertificateAlias(java.security.cert.
+ 						   Certificate cert);
+ 
+   /**
+    * Stores the keystore in the specified output stream and it
+    * uses the specified key it keep it secure.
+    *
+    * @param stream the output stream to save the keystore to
+    * @param password the password to protect the keystore integrity with
+    *
+    * @throws IOException if an I/O error occurs.
+    * @throws NoSuchAlgorithmException the data integrity algorithm 
+    * used cannot be found.
+    * @throws CertificateException if any certificates could not be
+    * stored in the output stream.
+    */
+   public abstract void engineStore(OutputStream stream, char[]password)
+     throws IOException, NoSuchAlgorithmException, CertificateException;
+ 
+ 
+   /**
+    * Loads the keystore from the specified input stream and it
+    * uses the specified password to check for integrity if supplied.
+    *
+    * @param stream the input stream to load the keystore from
+    * @param password the password to check the keystore integrity with
+    *
+    * @throws IOException if an I/O error occurs.
+    * @throws NoSuchAlgorithmException the data integrity algorithm 
+    * used cannot be found.
+    * @throws CertificateException if any certificates could not be
+    * stored in the output stream.
+    */
+   public abstract void engineLoad(InputStream stream, char[]password)
+     throws IOException, NoSuchAlgorithmException, CertificateException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/MessageDigest.java gcc-4.1.0/libjava/classpath/java/security/MessageDigest.java
*** gcc-4.0.2/libjava/classpath/java/security/MessageDigest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/MessageDigest.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,413 ----
+ /* MessageDigest.java --- The message digest interface.
+    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import gnu.java.security.Engine;
+ 
+ /**
+  * <p>This <code>MessageDigest</code> class provides applications the
+  * functionality of a message digest algorithm, such as <i>MD5</i> or <i>SHA</i>.
+  * Message digests are secure one-way hash functions that take arbitrary-sized
+  * data and output a fixed-length hash value.</p>
+  *
+  * <p>A <code>MessageDigest</code> object starts out initialized. The data is
+  * processed through it using the <code>update()</code> methods. At any point
+  * <code>reset()</code> can be called to reset the digest. Once all the data to
+  * be updated has been updated, one of the <code>digest()</code> methods should
+  * be called to complete the hash computation.</p>
+  *
+  * <p>The <code>digest()</code> method can be called <b>once</b> for a given
+  * number of updates. After <code>digest()</code> has been called, the
+  * <code>MessageDigest</code> object is <b>reset</b> to its initialized state.
+  * </p>
+  *
+  * <p>Implementations are free to implement the {@link Cloneable} interface.
+  * Client applications can test cloneability by attempting cloning and catching
+  * the {@link CloneNotSupportedException}:
+  *
+  * <pre>
+  *    MessageDigest md = MessageDigest.getInstance("SHA");
+  *    try
+  *      {
+  *        md.update(toChapter1);
+  *        MessageDigest tc1 = md.clone();
+  *        byte[] toChapter1Digest = tc1.digest();
+  *        md.update(toChapter2);
+  *        // ...
+  *      }
+  *    catch (CloneNotSupportedException x)
+  *      {
+  *        throw new DigestException("couldn't make digest of partial content");
+  *      }
+  * </pre>
+  *
+  * <p>Note that if a given implementation is not cloneable, it is still possible
+  * to compute intermediate digests by instantiating several instances, if the
+  * number of digests is known in advance.</p>
+  *
+  * <p>Note that this class is abstract and extends from {@link MessageDigestSpi}
+  * for historical reasons. Application developers should only take notice of the
+  * methods defined in this <code>MessageDigest</code> class; all the methods in
+  * the superclass are intended for cryptographic service providers who wish to
+  * supply their own implementations of message digest algorithms.</p>
+  *
+  * @see MessageDigestSpi
+  * @see Provider
+  * @since JDK 1.1
+  */
+ public abstract class MessageDigest extends MessageDigestSpi
+ {
+   /** The service name for message digests. */
+   private static final String MESSAGE_DIGEST = "MessageDigest";
+ 
+   private String algorithm;
+   Provider provider;
+   private byte[] lastDigest;
+ 
+   /**
+    * Creates a message digest with the specified algorithm name.
+    *
+    * @param algorithm the standard name of the digest algorithm.
+    * See Appendix A in the Java Cryptography Architecture API
+    * Specification &amp; Reference for information about standard
+    * algorithm names.
+    */
+   protected MessageDigest(String algorithm)
+   {
+     this.algorithm = algorithm;
+     provider = null;
+   }
+ 
+   /**
+    * Generates a <code>MessageDigest</code> object that implements the specified
+    * digest algorithm. If the default provider package provides an
+    * implementation of the requested digest algorithm, an instance of
+    * <code>MessageDigest</code> containing that implementation is returned. If
+    * the algorithm is not available in the default package, other packages are
+    * searched.
+    *
+    * @param algorithm the name of the algorithm requested. See Appendix A in the
+    * Java Cryptography Architecture API Specification &amp; Reference for
+    * information about standard algorithm names.
+    * @return a Message Digest object implementing the specified algorithm.
+    * @throws NoSuchAlgorithmException if the algorithm is not available in the
+    * caller's environment.
+    */
+   public static MessageDigest getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+     for (int i = 0; i < p.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, p[i]);
+           }
+         catch (NoSuchAlgorithmException ignored)
+ 	  {
+ 	    // Ignore.
+ 	  }
+       }
+ 
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Generates a <code>MessageDigest</code> object implementing the specified
+    * algorithm, as supplied from the specified provider, if such an algorithm is
+    * available from the provider.
+    *
+    * @param algorithm the name of the algorithm requested. See Appendix A in the
+    * Java Cryptography Architecture API Specification &amp; Reference for
+    * information about standard algorithm names.
+    * @param provider the name of the provider.
+    * @return a Message Digest object implementing the specified algorithm.
+    * @throws NoSuchAlgorithmException if the algorithm is not available in the
+    * package supplied by the requested provider.
+    * @throws NoSuchProviderException if the provider is not available in the
+    * environment.
+    * @throws IllegalArgumentException if the provider name is null or empty.
+    * @see Provider
+    */
+   public static MessageDigest getInstance(String algorithm, String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     if (provider == null || provider.length() == 0)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+ 
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Generates a <code>MessageDigest</code> object implementing the specified
+    * algorithm, as supplied from the specified provider, if such an algorithm
+    * is available from the provider. Note: the provider doesn't have to be
+    * registered.
+    *
+    * @param algorithm the name of the algorithm requested. See Appendix A in
+    * the Java Cryptography Architecture API Specification &amp; Reference for
+    * information about standard algorithm names.
+    * @param provider the provider.
+    * @return a Message Digest object implementing the specified algorithm.
+    * @throws NoSuchAlgorithmException if the <code>algorithm</code> is not
+    * available in the package supplied by the requested <code>provider</code>.
+    * @throws IllegalArgumentException if the <code>provider</code> is
+    * <code>null</code>.
+    * @since 1.4
+    * @see Provider
+    */
+   public static MessageDigest getInstance(String algorithm, Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     MessageDigest result = null;
+     Object o = null;
+     try
+       {
+         o = Engine.getInstance(MESSAGE_DIGEST, algorithm, provider);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+ 
+     if (o instanceof MessageDigestSpi)
+       {
+         result = new DummyMessageDigest((MessageDigestSpi) o, algorithm);
+       }
+     else if (o instanceof MessageDigest)
+       {
+         result = (MessageDigest) o;
+         result.algorithm = algorithm;
+       }
+     else
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     result.provider = provider;
+     return result;
+   }
+ 
+   /**
+    * Returns the provider of this message digest object.
+    *
+    * @return the provider of this message digest object.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Updates the digest using the specified byte.
+    *
+    * @param input the byte with which to update the digest.
+    */
+   public void update(byte input)
+   {
+     engineUpdate(input);
+   }
+ 
+   /**
+    * Updates the digest using the specified array of bytes, starting at the
+    * specified offset.
+    *
+    * @param input the array of bytes.
+    * @param offset the offset to start from in the array of bytes.
+    * @param len the number of bytes to use, starting at offset.
+    */
+   public void update(byte[] input, int offset, int len)
+   {
+     engineUpdate(input, offset, len);
+   }
+ 
+   /**
+    * Updates the digest using the specified array of bytes.
+    *
+    * @param input the array of bytes.
+    */
+   public void update(byte[] input)
+   {
+     engineUpdate(input, 0, input.length);
+   }
+ 
+   /**
+    * Completes the hash computation by performing final operations such as
+    * padding. The digest is reset after this call is made.
+    *
+    * @return the array of bytes for the resulting hash value.
+    */
+   public byte[] digest()
+   {
+     return lastDigest = engineDigest();
+   }
+ 
+   /**
+    * Completes the hash computation by performing final operations such as
+    * padding. The digest is reset after this call is made.
+    *
+    * @param buf An output buffer for the computed digest.
+    * @param offset The offset into the output buffer to begin storing the digest.
+    * @param len The number of bytes within buf allotted for the digest.
+    * @return The number of bytes placed into buf.
+    * @throws DigestException if an error occurs.
+    */
+   public int digest(byte[] buf, int offset, int len) throws DigestException
+   {
+     return engineDigest(buf, offset, len);
+   }
+ 
+   /**
+    * Performs a final update on the digest using the specified array of bytes,
+    * then completes the digest computation. That is, this method first calls
+    * <code>update(input)</code>, passing the input array to the <code>update()
+    * </code> method, then calls <code>digest()</code>.
+    *
+    * @param input the input to be updated before the digest is completed.
+    * @return the array of bytes for the resulting hash value.
+    */
+   public byte[] digest(byte[] input)
+   {
+     update(input);
+     return digest();
+   }
+ 
+   /**
+    * Returns a string representation of this message digest object.
+    *
+    * @return a string representation of the object.
+    */
+   public String toString()
+   {
+     return (getClass()).getName() + " Message Digest <" + digestToString() + ">";
+   }
+ 
+   /**
+    * Compares two digests for equality. Does a simple byte compare.
+    *
+    * @param digesta one of the digests to compare.
+    * @param digestb the other digest to compare.
+    * @return <code>true</code> if the digests are equal, <code>false</code>
+    * otherwise.
+    */
+   public static boolean isEqual(byte[] digesta, byte[] digestb)
+   {
+     if (digesta.length != digestb.length)
+       return false;
+ 
+     for (int i = digesta.length - 1; i >= 0; --i)
+       if (digesta[i] != digestb[i])
+         return false;
+ 
+     return true;
+   }
+ 
+   /** Resets the digest for further use. */
+   public void reset()
+   {
+     engineReset();
+   }
+ 
+   /**
+    * Returns a string that identifies the algorithm, independent of
+    * implementation details. The name should be a standard Java Security name
+    * (such as <code>"SHA"</code>, <code>"MD5"</code>, and so on). See Appendix
+    * A in the Java Cryptography Architecture API Specification &amp; Reference
+    * for information about standard algorithm names.
+    *
+    * @return the name of the algorithm.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Returns the length of the digest in bytes, or <code>0</code> if this
+    * operation is not supported by the provider and the implementation is not
+    * cloneable.
+    *
+    * @return the digest length in bytes, or <code>0</code> if this operation is
+    * not supported by the provider and the implementation is not cloneable.
+    * @since 1.2
+    */
+   public final int getDigestLength()
+   {
+     return engineGetDigestLength();
+   }
+ 
+   /**
+    * Returns a clone if the implementation is cloneable.
+    *
+    * @return a clone if the implementation is cloneable.
+    * @throws CloneNotSupportedException if this is called on an implementation
+    * that does not support {@link Cloneable}.
+    */
+   public Object clone() throws CloneNotSupportedException
+   {
+     return super.clone();
+   }
+ 
+   private String digestToString()
+   {
+     byte[] digest = lastDigest;
+ 
+     if (digest == null)
+       return "incomplete";
+ 
+     StringBuffer buf = new StringBuffer();
+     int len = digest.length;
+     for (int i = 0; i < len; ++i)
+       {
+         byte b = digest[i];
+         byte high = (byte) ((b & 0xff) >>> 4);
+         byte low = (byte) (b & 0xf);
+ 
+         buf.append(high > 9 ? ('a' - 10) + high : '0' + high);
+         buf.append(low > 9 ? ('a' - 10) + low : '0' + low);
+       }
+ 
+     return buf.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/MessageDigestSpi.java gcc-4.1.0/libjava/classpath/java/security/MessageDigestSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/MessageDigestSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/MessageDigestSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,155 ----
+ /* MessageDigestSpi.java --- The message digest service provider interface.
+    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+    This is the Service Provider Interface (SPI) for MessageDigest
+    class in java.security. It provides the back end functionality
+    for the MessageDigest class so that it can compute message
+    hashes. The default hashes are SHA-1 and MD5. A message hash
+    takes data of arbitrary length and produces a unique number
+    representing it.
+ 
+    Cryptography service providers who want to implement their
+    own message digest hashes need only to subclass this class.
+ 
+    The implementation of a Cloneable interface is left to up to
+    the programmer of a subclass.
+ 
+    @version 0.0
+ 
+    @author Mark Benvenuto (ivymccough@worldnet.att.net)
+  */
+ public abstract class MessageDigestSpi
+ {
+   /**
+      Default constructor of the MessageDigestSpi class
+    */
+   public MessageDigestSpi()
+   {
+   }
+ 
+   /**
+      Returns the length of the digest.  It may be overridden by the
+      provider to return the length of the digest.  Default is to
+      return 0.  It is concrete for backwards compatibility with JDK1.1
+      message digest classes.
+ 
+      @return Length of Digest in Bytes
+ 
+      @since 1.2
+    */
+   protected int engineGetDigestLength()
+   {
+     return 0;
+   }
+ 
+   /**
+      Updates the digest with the specified byte.
+ 
+      @param input the byte to update digest with
+    */
+   protected abstract void engineUpdate(byte input);
+ 
+ 
+   /**
+      Updates the digest with the specified bytes starting with the
+      offset and proceeding for the specified length.
+ 
+      @param input the byte array to update digest with
+      @param offset the offset of the byte to start with
+      @param len the number of the bytes to update with
+    */
+   protected abstract void engineUpdate(byte[]input, int offset, int len);
+ 
+   /**
+      Computes the final digest of the stored bytes and returns
+      them. It performs any necessary padding. The message digest
+      should reset sensitive data after performing the digest.
+ 
+      @return An array of bytes containing the digest
+    */
+   protected abstract byte[] engineDigest();
+ 
+   /**
+      Computes the final digest of the stored bytes and returns
+      them. It performs any necessary padding. The message digest
+      should reset sensitive data after performing the digest.  This
+      method is left concrete for backwards compatibility with JDK1.1
+      message digest classes.
+ 
+      @param buf An array of bytes to store the digest
+      @param offset An offset to start storing the digest at
+      @param len The length of the buffer
+      @return Returns the length of the buffer
+ 
+      @since 1.2
+    */
+   protected int engineDigest(byte[]buf, int offset, int len)
+     throws DigestException
+   {
+     if (engineGetDigestLength() > len)
+       throw new DigestException("Buffer is too small.");
+ 
+     byte[] tmp = engineDigest();
+     if (tmp.length > len)
+       throw new DigestException("Buffer is too small");
+ 
+     System.arraycopy(tmp, 0, buf, offset, tmp.length);
+     return tmp.length;
+   }
+ 
+   /**
+      Resets the digest engine. Reinitializes internal variables
+      and clears sensitive data.
+    */
+   protected abstract void engineReset();
+ 
+   /**
+      Returns a clone of this class.
+ 
+      If cloning is not supported, then by default the class throws a
+      CloneNotSupportedException.  The MessageDigestSpi provider
+      implementation has to overload this class in order to be
+      cloneable.
+    */
+   public Object clone() throws CloneNotSupportedException
+   {
+     return super.clone();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/NoSuchAlgorithmException.java gcc-4.1.0/libjava/classpath/java/security/NoSuchAlgorithmException.java
*** gcc-4.0.2/libjava/classpath/java/security/NoSuchAlgorithmException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/NoSuchAlgorithmException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* NoSuchAlgorithmException.java -- an algorithm was not available
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception is thrown when the requested security algorithm is
+  * not available
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class NoSuchAlgorithmException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -7443947487218346562L;
+ 
+   /**
+    * Create a new instance with no descriptive error message.
+    */
+   public NoSuchAlgorithmException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param msg the descriptive error message
+    */
+   public NoSuchAlgorithmException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/NoSuchProviderException.java gcc-4.1.0/libjava/classpath/java/security/NoSuchProviderException.java
*** gcc-4.0.2/libjava/classpath/java/security/NoSuchProviderException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/NoSuchProviderException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* NoSuchProviderException.java -- thrown when a provider is not found
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception is thrown when the requested security provider is
+  * not available.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class NoSuchProviderException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 8488111756688534474L;
+ 
+   /**
+    * Create a new instance with no descriptive error message.
+    */
+   public NoSuchProviderException()
+   {
+   }
+ 
+   /**
+    * Create a new instance with a descriptive error message.
+    *
+    * @param msg the descriptive error message
+    */
+   public NoSuchProviderException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Permission.java gcc-4.1.0/libjava/classpath/java/security/Permission.java
*** gcc-4.0.2/libjava/classpath/java/security/Permission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Permission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,187 ----
+ /* Permission.java -- The superclass for all permission objects
+    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * This class is the abstract superclass of all classes that implement
+  * the concept of a permission.  A permission consists of a permission name
+  * and optionally a list of actions that relate to the permission.  The
+  * actual meaning of the name of the permission is defined only in the
+  * context of a subclass.  It may name a resource to which access permissions
+  * are granted (for example, the name of a file) or it might represent
+  * something else entirely.  Similarly, the action list only has meaning
+  * within the context of a subclass.  Some permission names may have no
+  * actions associated with them.  That is, you either have the permission
+  * or you don't.
+  *
+  * <p>The most important method in this class is <code>implies</code>.  This
+  * checks whether if one has this permission, then the specified
+  * permission is also implied.  As a conceptual example, consider the
+  * permissions "Read All Files" and "Read File foo".  The permission
+  * "Read All Files" implies that the caller has permission to read the
+  * file foo.
+  *
+  * <p><code>Permission</code>'s must be immutable - do not change their
+  * state after creation.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Permissions
+  * @see PermissionCollection
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class Permission implements Guard, Serializable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -5636570222231596674L;
+ 
+   /**
+    * This is the name assigned to this permission object.
+    *
+    * @serial the name of the permission
+    */
+   private String name;
+ 
+   /**
+    * Create an instance with the specified name.
+    *
+    * @param name the permission name
+    */
+   public Permission(String name)
+   {
+     this.name = name;
+   }
+ 
+   /**
+    * This method implements the <code>Guard</code> interface for this class.
+    * It calls the <code>checkPermission</code> method in
+    * <code>SecurityManager</code> with this <code>Permission</code> as its
+    * argument.  This method returns silently if the security check succeeds
+    * or throws an exception if it fails.
+    *
+    * @param obj the <code>Object</code> being guarded - ignored by this class
+    * @throws SecurityException if the security check fails
+    * @see GuardedObject
+    * @see SecurityManager#checkPermission(Permission)
+    */
+   public void checkGuard(Object obj)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(this);
+   }
+ 
+   /**
+    * This method tests whether this <code>Permission</code> implies that the
+    * specified <code>Permission</code> is also granted.
+    *
+    * @param perm the <code>Permission</code> to test against
+    * @return true if perm is implied by this
+    */
+   public abstract boolean implies(Permission perm);
+ 
+   /**
+    * Check to see if this object equals obj. Use <code>implies</code>, rather
+    * than <code>equals</code>, when making access control decisions.
+    *
+    * @param obj the object to compare to
+    */
+   public abstract boolean equals(Object obj);
+ 
+   /**
+    * This method returns a hash code for this <code>Permission</code>. It
+    * must satisfy the contract of <code>Object.hashCode</code>: it must be
+    * the same for all objects that equals considers to be the same.
+    *
+    * @return a hash value
+    */
+   public abstract int hashCode();
+ 
+   /**
+    * Get the name of this <code>Permission</code>.
+    *
+    * @return the name
+    */
+   public final String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * This method returns the list of actions for this <code>Permission</code>
+    * as a <code>String</code>. The string should be in canonical order, for
+    * example, both <code>new FilePermission(f, "write,read")</code> and
+    * <code>new FilePermission(f, "read,write")</code> have the action list
+    * "read,write".
+    *
+    * @return the action list for this <code>Permission</code>
+    */
+   public abstract String getActions();
+ 
+   /**
+    * This method returns an empty <code>PermissionCollection</code> object
+    * that can store permissions of this type, or <code>null</code> if no
+    * such collection is defined. Subclasses must override this to provide
+    * an appropriate collection when one is needed to accurately calculate
+    * <code>implies</code>.
+    *
+    * @return a new <code>PermissionCollection</code>
+    */
+   public PermissionCollection newPermissionCollection()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns a <code>String</code> representation of this
+    * <code>Permission</code> object. This is in the format:
+    * <code>'(' + getClass().getName() + ' ' + getName() + ' ' + getActions
+    * + ')'</code>.
+    *
+    * @return this object as a <code>String</code>
+    */
+   public String toString()
+   {
+     return '(' + getClass().getName() + ' ' + getName() + ' '
+       + getActions() + ')';
+   }
+ } // class Permission
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/PermissionCollection.java gcc-4.1.0/libjava/classpath/java/security/PermissionCollection.java
*** gcc-4.0.2/libjava/classpath/java/security/PermissionCollection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/PermissionCollection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,167 ----
+ /* PermissionCollection.java -- A collection of permission objects
+    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ 
+ /**
+  * This class models a group of Java permissions.  It has convenient
+  * methods for determining whether or not a given permission is implied
+  * by any of the permissions in this collection.
+  *
+  * <p>Some care must be taken in storing permissions.  First, a collection of
+  * the appropriate type must be created.  This is done by calling the
+  * <code>newPermissionCollection</code> method on an object of the
+  * permission class you wish to add to the collection.  If this method
+  * returns <code>null</code>, any type of <code>PermissionCollection</code>
+  * can be used to store permissions of that type.  However, if a
+  * <code>PermissionCollection</code> collection object is returned, that
+  * type must be used.
+  *
+  * <p>A <code>PermissionCollection</code> returned by the
+  * <code>newPermissionCollection</code> method in a subclass of
+  * <code>Permission</code> is a homogeneous collection.  It only will
+  * hold permissions of one specified type - instances of the class that
+  * created it.  Not all <code>PermissionCollection</code> subclasses
+  * have to hold permissions of only one type however.  For example,
+  * the <code>Permissions</code> class holds permissions of many types.
+  *
+  * <p>Since the <code>newPermissionCollection</code> in <code>Permission</code>
+  * itself returns <code>null</code>, by default a permission can be stored
+  * in any type of collection unless it overrides that method to create its
+  * own collection type.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Permission
+  * @see Permissions
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class PermissionCollection implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -6727011328946861783L;
+ 
+   /**
+    * Indicates whether or not this collection is read only.
+    *
+    * @serial if the collection is read-only
+    */
+   private boolean readOnly;
+ 
+   /**
+    * Create a new collection.
+    */
+   public PermissionCollection()
+   {
+   }
+ 
+   /**
+    * This method adds a new <code>Permission</code> object to the collection.
+    *
+    * @param perm the <code>Permission</code> to add
+    *
+    * @throws SecurityException if the collection is marked read only
+    * @throws IllegalArgumentException if perm is of the wrong type
+    */
+   public abstract void add(Permission perm);
+ 
+   /**
+    * This method tests whether the specified <code>Permission</code> object is
+    * implied by this collection of <code>Permission</code> objects.
+    *
+    * @param perm the <code>Permission</code> object to test
+    * @return true if the collection implies perm
+    */
+   public abstract boolean implies(Permission perm);
+ 
+   /**
+    * This method returns an <code>Enumeration</code> of all the objects in
+    * this collection.
+    *
+    * @return an <code>Enumeration</code> of this collection's objects
+    */
+   public abstract Enumeration elements();
+ 
+   /**
+    * This method sets this <code>PermissionCollection</code> object to be
+    * read only.  No further permissions can be added to it after calling this
+    * method.
+    */
+   public void setReadOnly()
+   {
+     readOnly = true;
+   }
+ 
+   /**
+    * This method tests whether or not this <code>PermissionCollection</code>
+    * object is read only.
+    *
+    * @return true if this collection is read only
+    */
+   public boolean isReadOnly()
+   {
+     return readOnly;
+   }
+ 
+   /**
+    * This method returns a <code>String</code> representation of this
+    * collection.  It is formed by:
+    * <pre>
+    * super.toString()" (\n"
+    *   // enumerate all permissions, one per line
+    * ")\n"
+    * </pre>
+    *
+    * @return a <code>String</code> representing this object
+    */
+   public String toString()
+   {
+     StringBuffer sb = new StringBuffer(super.toString());
+ 
+     sb.append(" (\n");
+     Enumeration e = elements();
+     while (e.hasMoreElements())
+       sb.append(' ').append(e.nextElement()).append('\n');
+     return sb.append(")\n").toString();
+   }
+ } // class PermissionCollection
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Permissions.java gcc-4.1.0/libjava/classpath/java/security/Permissions.java
*** gcc-4.0.2/libjava/classpath/java/security/Permissions.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Permissions.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,254 ----
+ /* Permissions.java -- a collection of permission collections
+    Copyright (C) 1998, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.NoSuchElementException;
+ 
+ /**
+  * This class is a heterogeneous collection of permissions.  It is
+  * organized as a collection of <code>PermissionCollection</code>'s stored
+  * in a hashtable.  Each individual <code>PermissionCollection</code>
+  * contains permissions of a single type.  If a specific type of
+  * <code>Permission</code> does not provide a collection type to use
+  * via its <code>newPermissionCollection</code> method, then a default
+  * collection type which stores its permissions in a hash table will be
+  * used.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.1
+  */
+ public final class Permissions extends PermissionCollection
+   implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 4858622370623524688L;
+ 
+   /**
+    * Holds instances of <code>AllPermission</code>.
+    *
+    * @serial the permission collection for AllPermission
+    */
+   private PermissionCollection allPermission;
+ 
+   // Package-private to avoid a trampoline.
+   /**
+    * This is the <code>Hashtable</code> that contains our collections.
+    *
+    * @serial maps Class to PermissionCollection
+    */
+   final Hashtable perms = new Hashtable();
+ 
+   /**
+    * This method initializes a new instance of <code>Permissions</code>.
+    */
+   public Permissions()
+   {
+   }
+ 
+   /**
+    * This method adds a new <code>Permission</code> to this collection.  It
+    * will be stored in a <code>PermissionCollection</code> of the appropriate
+    * type, as determined by calling <code>newPermissionCollection</code> on
+    * the specified permission (if an appropriate collection does not already
+    * exist). If this object does not specify a particular type of collection,
+    * a default collection, which stores in permissions in a hash table, will
+    * be used.
+    *
+    * @param perm the <code>Permission</code> to add
+    * @throws SecurityException if this collection is marked as read only
+    */
+   public void add(Permission perm)
+   {
+     if (isReadOnly())
+       throw new SecurityException("PermissionCollection is read only");
+     if (perm instanceof AllPermission)
+       {
+         if (allPermission == null)
+           {
+             allPermission = perm.newPermissionCollection();
+             allPermission.add(perm);
+             perms.put(perm.getClass(), allPermission);
+           }
+       }
+     else
+       {
+         PermissionCollection pc
+           = (PermissionCollection) perms.get(perm.getClass());
+         if (pc == null)
+           {
+             pc = perm.newPermissionCollection();
+             if (pc == null)
+               pc = new PermissionsHash();
+             perms.put(perm.getClass(), pc);
+           }
+         pc.add(perm);
+       }
+   }
+ 
+   /**
+    * This method tests whether or not the specified <code>Permission</code>
+    * is implied by this <code>PermissionCollection</code>.
+    *
+    * @param perm the <code>Permission</code> to test
+    * @return true if the specified permission is implied by this
+    */
+   public boolean implies(Permission perm)
+   {
+     if (allPermission != null)
+       return true;
+     PermissionCollection pc
+       = (PermissionCollection) perms.get(perm.getClass());
+     return pc == null ? false : pc.implies(perm);
+   }
+ 
+   /**
+    * This method returns an <code>Enumeration</code> which contains a
+    * list of all <code>Permission</code> objects contained in this
+    * collection.
+    *
+    * @return an <code>Enumeration</code> of this collection's elements
+    */
+   public Enumeration elements()
+   {
+     return new Enumeration()
+     {
+       Enumeration main_enum = perms.elements();
+       Enumeration sub_enum;
+ 
+       public boolean hasMoreElements()
+       {
+         if (sub_enum == null)
+           {
+             if (main_enum == null)
+               return false;
+             if (! main_enum.hasMoreElements())
+               {
+                 main_enum = null;
+                 return false;
+               }
+             PermissionCollection pc =
+               (PermissionCollection) main_enum.nextElement();
+             sub_enum = pc.elements();
+           }
+         if (! sub_enum.hasMoreElements())
+           {
+             sub_enum = null;
+             return hasMoreElements();
+           }
+         return true;
+       }
+ 
+       public Object nextElement()
+       {
+         if (! hasMoreElements())
+           throw new NoSuchElementException();
+         return sub_enum.nextElement();
+       }
+     };
+   }
+ 
+   /**
+    * Implements the permission collection for all permissions without one of
+    * their own, and obeys serialization of JDK.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class PermissionsHash extends PermissionCollection
+   {
+     /**
+      * Compatible with JDK 1.1+.
+      */
+     private static final long serialVersionUID = -8491988220802933440L;
+ 
+     /**
+      * Hashtable where we store permissions.
+      *
+      * @serial the stored permissions, both as key and value
+      */
+     private final Hashtable perms = new Hashtable();
+ 
+     /**
+      * Add a permission. We don't need to check for read-only, as this
+      * collection is never exposed outside of Permissions, which has already
+      * done that check.
+      *
+      * @param perm the permission to add
+      */
+     public void add(Permission perm)
+     {
+       perms.put(perm, perm);
+     }
+ 
+     /**
+      * Returns true if perm is in the collection.
+      *
+      * @param perm the permission to check
+      * @return true if it is implied
+      */
+     // FIXME: Should this method be synchronized?
+     public boolean implies(Permission perm)
+     {
+       Enumeration elements = elements();
+       
+       while (elements.hasMoreElements())
+ 	{
+ 	  Permission p = (Permission)elements.nextElement();
+ 	  if (p.implies(perm))
+ 	    return true;
+ 	}
+       return false;
+     }
+ 
+     /**
+      * Return the elements.
+      *
+      * @return the elements
+      */
+     public Enumeration elements()
+     {
+       return perms.elements();
+     }
+   } // class PermissionsHash
+ } // class Permissions
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Policy.java gcc-4.1.0/libjava/classpath/java/security/Policy.java
*** gcc-4.0.2/libjava/classpath/java/security/Policy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Policy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,310 ----
+ /* Policy.java --- Policy Manager Class
+    Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.LinkedHashMap;
+ import java.util.Map;
+ 
+ /**
+  * <p>This is an abstract class for representing the system security policy for
+  * a Java application environment (specifying which permissions are available
+  * for code from various sources). That is, the security policy is represented
+  * by a <code>Policy</code> subclass providing an implementation of the abstract
+  * methods in this <code>Policy</code> class.</p>
+  *
+  * <p>There is only one <code>Policy</code> object in effect at any given time.
+  * </p>
+  *
+  * <p>The source location for the policy information utilized by the
+  * <code>Policy</code> object is up to the <code>Policy</code> implementation.
+  * The policy configuration may be stored, for example, as a flat ASCII file, as
+  * a serialized binary file of the <code>Policy</code> class, or as a database.
+  * </p>
+  *
+  * <p>The currently-installed <code>Policy</code> object can be obtained by
+  * calling the <code>getPolicy()</code> method, and it can be changed by a call
+  * to the <code>setPolicy()</code> method (by code with permission to reset the
+  * <code>Policy</code>).</p>
+  *
+  * <p>The <code>refresh()</code> method causes the policy object to refresh /
+  * reload its current configuration.</p>
+  *
+  * <p>This is implementation-dependent. For example, if the policy object stores
+  * its policy in configuration files, calling <code>refresh()</code> will cause
+  * it to re-read the configuration policy files. The refreshed policy may not
+  * have an effect on classes in a particular {@link ProtectionDomain}. This is
+  * dependent on the <code>Policy</code> provider's implementation of the
+  * <code>implies()</code> method and the {@link PermissionCollection} caching
+  * strategy.</p>
+  *
+  * <p>The default <code>Policy</code> implementation can be changed by setting
+  * the value of the <code>"policy.provider"</code> security property (in the
+  * Java security properties file) to the fully qualified name of the desired
+  * <code>Policy</code> implementation class. The Java security properties file
+  * is located in the file named <code>&lt;JAVA_HOME>/lib/security/java.security
+  * </code>, where <code>&lt;JAVA_HOME></code> refers to the directory where the
+  * SDK was installed.</p>
+  *
+  * <p><b>IMPLEMENTATION NOTE:</b> This implementation attempts to read the
+  * System property named <code>policy.provider</code> to find the concrete
+  * implementation of the <code>Policy</code>. If/when this fails, it falls back
+  * to a default implementation, which <b>allows everything</b>.
+  *
+  * @author Mark Benvenuto
+  * @see CodeSource
+  * @see PermissionCollection
+  * @see SecureClassLoader
+  * @since 1.2
+  */
+ public abstract class Policy
+ {
+   private static Policy currentPolicy;
+ 
+   /** Map of ProtectionDomains to PermissionCollections for this instance. */
+   private Map pd2pc = null;
+ 
+   /** Constructs a new <code>Policy</code> object. */
+   public Policy()
+   {
+   }
+ 
+   /**
+    * Returns the installed <code>Policy</code> object. This value should not be
+    * cached, as it may be changed by a call to <code>setPolicy()</code>. This
+    * method first calls {@link SecurityManager#checkPermission(Permission)} with
+    * a <code>SecurityPermission("getPolicy")</code> permission to ensure it's ok
+    * to get the <code>Policy</code> object.
+    *
+    * @return the installed <code>Policy</code>.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkPermission()</code> method doesn't allow getting the
+    * <code>Policy</code> object.
+    * @see SecurityManager#checkPermission(Permission)
+    * @see #setPolicy(Policy)
+    */
+   public static Policy getPolicy()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(new SecurityPermission("getPolicy"));
+ 
+     return getCurrentPolicy();
+   }
+ 
+   /**
+    * Sets the system-wide <code>Policy</code> object. This method first calls
+    * {@link SecurityManager#checkPermission(Permission)} with a
+    * <code>SecurityPermission("setPolicy")</code> permission to ensure it's ok
+    * to set the <code>Policy</code>.
+    *
+    * @param policy the new system <code>Policy</code> object.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkPermission()</code> method doesn't allow setting the
+    * <code>Policy</code>.
+    * @see SecurityManager#checkPermission(Permission)
+    * @see #getPolicy()
+    */
+   public static void setPolicy(Policy policy)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(new SecurityPermission("setPolicy"));
+ 
+     setup(policy);
+     currentPolicy = policy;
+   }
+ 
+   private static void setup(final Policy policy)
+   {
+     if (policy.pd2pc == null)
+       policy.pd2pc = Collections.synchronizedMap(new LinkedHashMap());
+ 
+     ProtectionDomain pd = policy.getClass().getProtectionDomain();
+     if (pd.getCodeSource() != null)
+       {
+         PermissionCollection pc = null;
+         if (currentPolicy != null)
+           pc = currentPolicy.getPermissions(pd);
+ 
+         if (pc == null) // assume it has all
+           {
+             pc = new Permissions();
+             pc.add(new AllPermission());
+           }
+ 
+         policy.pd2pc.put(pd, pc); // add the mapping pd -> pc
+       }
+   }
+ 
+   /**
+    * Ensures/forces loading of the configured policy provider, while bypassing
+    * the {@link SecurityManager} checks for <code>"getPolicy"</code> security
+    * permission.  Needed by {@link ProtectionDomain}.
+    */
+   static Policy getCurrentPolicy()
+   {
+     // FIXME: The class name of the Policy provider should really be sourced
+     // from the "java.security" configuration file. For now, just hard-code
+     // a stub implementation.
+     if (currentPolicy == null)
+       {
+         String pp = System.getProperty ("policy.provider");
+         if (pp != null)
+           try
+             {
+               currentPolicy = (Policy) Class.forName(pp).newInstance();
+             }
+ 	  catch (Exception e)
+ 	    {
+ 	      // Ignored.
+ 	    }
+ 
+         if (currentPolicy == null)
+           currentPolicy = new gnu.java.security.provider.DefaultPolicy();
+       }
+     return currentPolicy;
+   }
+ 
+   /**
+    * Tests if <code>currentPolicy</code> is not <code>null</code>,
+    * thus allowing clients to not force loading of any policy
+    * provider; needed by {@link ProtectionDomain}.
+    */
+   static boolean isLoaded()
+   {
+     return currentPolicy != null;
+   }
+ 
+   /**
+    * Evaluates the global policy and returns a {@link PermissionCollection}
+    * object specifying the set of permissions allowed for code from the
+    * specified code source.
+    *
+    * @param codesource the {@link CodeSource} associated with the caller. This
+    * encapsulates the original location of the code (where the code came from)
+    * and the public key(s) of its signer.
+    * @return the set of permissions allowed for code from codesource according
+    * to the policy. The returned set of permissions must be a new mutable
+    * instance and it must support heterogeneous {@link Permission} types.
+    */
+   public abstract PermissionCollection getPermissions(CodeSource codesource);
+ 
+   /**
+    * Evaluates the global policy and returns a {@link PermissionCollection}
+    * object specifying the set of permissions allowed given the characteristics
+    * of the protection domain.
+    *
+    * @param domain the {@link ProtectionDomain} associated with the caller.
+    * @return the set of permissions allowed for the domain according to the
+    * policy. The returned set of permissions must be a new mutable instance and
+    * it must support heterogeneous {@link Permission} types.
+    * @since 1.4
+    * @see ProtectionDomain
+    * @see SecureClassLoader
+    */
+   public PermissionCollection getPermissions(ProtectionDomain domain)
+   {
+     if (domain == null)
+       return new Permissions();
+ 
+     if (pd2pc == null)
+       setup(this);
+ 
+     PermissionCollection result = (PermissionCollection) pd2pc.get(domain);
+     if (result != null)
+       {
+         Permissions realResult = new Permissions();
+         for (Enumeration e = result.elements(); e.hasMoreElements(); )
+           realResult.add((Permission) e.nextElement());
+ 
+         return realResult;
+       }
+ 
+     result = getPermissions(domain.getCodeSource());
+     if (result == null)
+       result = new Permissions();
+ 
+     PermissionCollection pc = domain.getPermissions();
+     if (pc != null)
+       for (Enumeration e = pc.elements(); e.hasMoreElements(); )
+         result.add((Permission) e.nextElement());
+ 
+     return result;
+   }
+ 
+   /**
+    * Evaluates the global policy for the permissions granted to the {@link
+    * ProtectionDomain} and tests whether the <code>permission</code> is granted.
+    *
+    * @param domain the {@link ProtectionDomain} to test.
+    * @param permission the {@link Permission} object to be tested for
+    * implication.
+    * @return <code>true</code> if <code>permission</code> is a proper subset of
+    * a permission granted to this {@link ProtectionDomain}.
+    * @since 1.4
+    * @see ProtectionDomain
+    */
+   public boolean implies(ProtectionDomain domain, Permission permission)
+   {
+     if (pd2pc == null)
+       setup(this);
+ 
+     PermissionCollection pc = (PermissionCollection) pd2pc.get(domain);
+     if (pc != null)
+       return pc.implies(permission);
+ 
+     boolean result = false;
+     pc = getPermissions(domain);
+     if (pc != null)
+       {
+         result = pc.implies(permission);
+         pd2pc.put(domain, pc);
+       }
+ 
+     return result;
+   }
+ 
+   /**
+    * Refreshes/reloads the policy configuration. The behavior of this method
+    * depends on the implementation. For example, calling refresh on a file-based
+    * policy will cause the file to be re-read.
+    */
+   public abstract void refresh();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Principal.java gcc-4.1.0/libjava/classpath/java/security/Principal.java
*** gcc-4.0.2/libjava/classpath/java/security/Principal.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Principal.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* Principal.java -- A security entity
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ /**
+  * This interface models an entity (such as a user or a certificate authority)
+  * for the purposes of applying the Java security model.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see X509Certificate
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface Principal
+ {
+   /**
+    * This method tests another <code>Principal</code> object for equality
+    * with this one.
+    *
+    * @param obj the Object to test for equality
+    * @return true if the specified <code>Principal</code> is equal
+    */
+   boolean equals(Object obj);
+ 
+   /**
+    * This method returns a <code>String</code> representation of this
+    * <code>Principal</code>.
+    *
+    * @return this <code>Principal</code> represented as a <code>String</code>
+    */
+   String toString();
+ 
+   /**
+    * This method returns a hash code value for this <code>Principal</code>.
+    * Remember the contract of hashCode - two objects which compare as
+    * equals() must have the same hashCode().
+    *
+    * @return a hash value
+    */
+   int hashCode();
+ 
+   /**
+    * This method returns a <code>String</code> that names this
+    * <code>Principal</code>.
+    *
+    * @return the name of this <code>Principal</code>
+    */
+   String getName();
+ } // interface Principal
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/PrivateKey.java gcc-4.1.0/libjava/classpath/java/security/PrivateKey.java
*** gcc-4.0.2/libjava/classpath/java/security/PrivateKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/PrivateKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* PrivateKey.java -- tagging interface for all private keys
+    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ /**
+  * This interface specified no methods.  In simply provides a common
+  * super-interface for all algorithm specific private key values.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Key
+  * @see PublicKey
+  * @see Certificate
+  * @see Signature#initVerify(PublicKey)
+  * @see DSAPrivateKey
+  * @see RSAPrivateKey
+  * @see RSAPrivateCrtKey
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface PrivateKey extends Key
+ {
+   /**
+    * The version identifier used for serialization.
+    */
+   long serialVersionUID = 6034044314589513430L;
+ } // interface PrivateKey
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/PrivilegedAction.java gcc-4.1.0/libjava/classpath/java/security/PrivilegedAction.java
*** gcc-4.0.2/libjava/classpath/java/security/PrivilegedAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/PrivilegedAction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* PrivilegedAction.java -- Perform a privileged action
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This interface specifes a single <code>run</code> method that
+  * executes a privileged operation.  This method is called by
+  * <code>AccessController.doPrivileged()</code> after that method
+  * activiates the required privileges.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see AccessController
+  * @see PrivilegedExceptionAction
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface PrivilegedAction
+ {
+   /**
+    * This method performs an operation that requires higher privileges to
+    * perform.  It is called when a section of code invokes
+    * <code>AccessController.doPrivileged()</code>.
+    *
+    * @return obj An implementation dependent return value
+    * @see AccessController#doPrivileged(PrivilegedAction)
+    * @see AccessController#doPrivileged(PrivilegedAction, AccessControlContext)
+    */
+   Object run();
+ } // interface PrivilegedAction
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/PrivilegedActionException.java gcc-4.1.0/libjava/classpath/java/security/PrivilegedActionException.java
*** gcc-4.0.2/libjava/classpath/java/security/PrivilegedActionException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/PrivilegedActionException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,109 ----
+ /* PrivilegedActionException.java -- wrap an exception in a privileged action
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception is thrown when an exception is thrown during a
+  * privileged action being performed with the
+  * <code>AccessController.doPrivileged()</code> method.  It wraps the
+  * actual exception thrown in the privileged code.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see PrivilegedExceptionAction
+  * @see AccessController#doPrivileged(PrivilegedExceptionAction)
+  * @see AccessController#doPrivileged(PrivilegedExceptionAction, AccessControlContext)
+  * @status updated to 1.4
+  */
+ public class PrivilegedActionException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 4724086851538908602L;
+ 
+   /**
+    * This is the actual exception that occurred.
+    *
+    * @serial the wrapped exception
+    */
+   private Exception exception;
+ 
+   /**
+    * Create a new instance that wraps the specified <code>Exception</code>.
+    *
+    * @param e the <code>Exception</code> to wrap
+    */
+   public PrivilegedActionException(Exception e)
+   {
+     super(e);
+     exception = e;
+   }
+ 
+   /**
+    * Get the underlying <code>Exception</code> that caused this one. This
+    * is a legacy method, the preferred way is {@link #getCause()}.
+    *
+    * @return the cause
+    */
+   public Exception getException()
+   {
+     return exception;
+   }
+ 
+   /**
+    * Gets the cause of this exception.
+    *
+    * @return the cause
+    * @since 1.4
+    */
+   public Throwable getCause()
+   {
+     return exception;
+   }
+ 
+   /**
+    * Convert this to a String.
+    *
+    * @return the string representation
+    */
+   public String toString()
+   {
+     return super.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/PrivilegedExceptionAction.java gcc-4.1.0/libjava/classpath/java/security/PrivilegedExceptionAction.java
*** gcc-4.0.2/libjava/classpath/java/security/PrivilegedExceptionAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/PrivilegedExceptionAction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* PrivilegedExceptionAction.java -- Perform a privileged operation
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This interface defines a method that is called by
+  * <code>AccessController.doPrivileged()</code> in order to perform a
+  * privileged operation with higher privileges enabled.  This interface
+  * differs from <code>PrivilegedAction</code> in that the <code>run</code>
+  * method in this interface may throw a checked exception.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface PrivilegedExceptionAction
+ {
+   /**
+    * This method performs an operation that requires higher privileges to
+    * successfully complete.  It is called when a section of code invokes
+    * <code>AccessController.doPrivileged()</code>.
+    *
+    * @return obj An implementation defined return value
+    * @throws Exception An implementation specific exception
+    * @see AccessController#doPrivileged(PrivilegedExceptionAction)
+    * @see AccessController#doPrivileged(PrivilegedExceptionAction,
+    *                                    AccessControlContext)
+    */
+   Object run() throws Exception;
+ } // interface PrivilegedExceptionAction
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/ProtectionDomain.java gcc-4.1.0/libjava/classpath/java/security/ProtectionDomain.java
*** gcc-4.0.2/libjava/classpath/java/security/ProtectionDomain.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/ProtectionDomain.java	Fri Nov 18 00:59:33 2005
***************
*** 0 ****
--- 1,271 ----
+ /* ProtectionDomain.java -- A security domain
+    Copyright (C) 1998, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import gnu.classpath.SystemProperties;
+ 
+ /**
+  * <p>This <code>ProtectionDomain</code> class encapsulates the characteristics
+  * of a domain, which encloses a set of classes whose instances are granted a
+  * set of permissions when being executed on behalf of a given set of
+  * <i>Principals</i>.
+  *
+  * <p>A static set of permissions can be bound to a <code>ProtectionDomain</code>
+  * when it is constructed; such permissions are granted to the domain regardless
+  * of the {@link Policy} in force. However, to support dynamic security
+  * policies, a <code>ProtectionDomain</code> can also be constructed such that
+  * it is dynamically mapped to a set of permissions by the current {@link
+  * Policy} whenever a permission is checked.</p>
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @version 0.0
+  */
+ public class ProtectionDomain
+ {
+   /** This is the <code>CodeSource</code> for this protection domain. */
+   private CodeSource code_source;
+ 
+   /** This is the set of permissions granted to this domain. */
+   private PermissionCollection perms;
+ 
+   /** The {@link ClassLoader} associated with this domain. */
+   private ClassLoader classloader;
+ 
+   /** The array of Principals associated with this domain.. */
+   private Principal[] principals;
+ 
+   /** Post 1.4 the policy may be refreshed! use false for pre 1.4. */
+   private boolean staticBinding;
+ 
+   /**
+    * Creates a new <code>ProtectionDomain</code> with the given {@link
+    * CodeSource} and {@link Permissions}. If the permissions object is not
+    * <code>null</code>, then <code>setReadOnly()</code> will be called on the
+    * passed in {@link Permissions} object. The only permissions granted to this
+    * domain are the ones specified; the current {@link Policy} will not be
+    * consulted.
+    *
+    * @param codesource the codesource associated with this domain.
+    * @param permissions the permissions granted to this domain
+    */
+   public ProtectionDomain(CodeSource codesource, PermissionCollection permissions)
+   {
+     this(codesource, permissions, null, null, true);
+   }
+ 
+   /**
+    * <p>Creates a new ProtectionDomain qualified by the given CodeSource,
+    * Permissions, ClassLoader and array of Principals. If the permissions
+    * object is not null, then <code>setReadOnly()</code> will be called on the
+    * passed in Permissions object. The permissions granted to this domain are
+    * dynamic; they include both the static permissions passed to this
+    * constructor, and any permissions granted to this domain by the current
+    * Policy at the time a permission is checked.</p>
+    *
+    * <p>This constructor is typically used by {@link ClassLoader}s and {@link
+    * DomainCombiner}s which delegate to <code>Policy</code> to actively
+    * associate the permissions granted to this domain. This constructor affords
+    * the Policy provider the opportunity to augment the supplied
+    * PermissionCollection to reflect policy changes.</p>
+    *
+    * @param codesource the CodeSource associated with this domain.
+    * @param permissions the permissions granted to this domain.
+    * @param classloader the ClassLoader associated with this domain.
+    * @param principals the array of Principals associated with this domain.
+    * @since 1.4
+    * @see Policy#refresh()
+    * @see Policy#getPermissions(ProtectionDomain)
+   */
+   public ProtectionDomain(CodeSource codesource,
+                           PermissionCollection permissions,
+                           ClassLoader classloader, Principal[] principals)
+   {
+     this(codesource, permissions, classloader, principals, false);
+   }
+ 
+   private ProtectionDomain(CodeSource codesource,
+                            PermissionCollection permissions,
+                            ClassLoader classloader, Principal[] principals,
+                            boolean staticBinding)
+   {
+     super();
+ 
+     code_source = codesource;
+     if (permissions != null)
+       {
+         perms = permissions;
+         perms.setReadOnly();
+       }
+ 
+     this.classloader = classloader;
+     this.principals =
+         (principals != null ? (Principal[]) principals.clone() : new Principal[0]);
+     this.staticBinding = staticBinding;
+   }
+ 
+   /**
+    * Returns the {@link CodeSource} of this domain.
+    *
+    * @return the {@link CodeSource} of this domain which may be <code>null</code>.
+    * @since 1.2
+    */
+   public final CodeSource getCodeSource()
+   {
+     return code_source;
+   }
+ 
+   /**
+    * Returns the {@link ClassLoader} of this domain.
+    *
+    * @return the {@link ClassLoader} of this domain which may be
+    * <code>null</code>.
+    * @since 1.4
+    */
+   public final ClassLoader getClassLoader()
+   {
+     return this.classloader;
+   }
+ 
+   /**
+    * Returns an array of principals for this domain.
+    *
+    * @return returns a non-null array of principals for this domain. Changes to
+    * this array will have no impact on the <code>ProtectionDomain</code>.
+    * @since 1.4
+    */
+   public final Principal[] getPrincipals()
+   {
+     return (Principal[]) principals.clone();
+   }
+ 
+   /**
+    * Returns the static permissions granted to this domain.
+    *
+    * @return the static set of permissions for this domain which may be
+    * <code>null</code>.
+    * @see Policy#refresh()
+    * @see Policy#getPermissions(ProtectionDomain)
+    */
+   public final PermissionCollection getPermissions()
+   {
+     return perms;
+   }
+ 
+   /**
+    * <p>Check and see if this <code>ProtectionDomain</code> implies the
+    * permissions expressed in the <code>Permission</code> object.</p>
+    *
+    * <p>The set of permissions evaluated is a function of whether the
+    * <code>ProtectionDomain</code> was constructed with a static set of
+    * permissions or it was bound to a dynamically mapped set of permissions.</p>
+    *
+    * <p>If the <code>ProtectionDomain</code> was constructed to a statically
+    * bound {@link PermissionCollection} then the permission will only be checked
+    * against the {@link PermissionCollection} supplied at construction.</p>
+    *
+    * <p>However, if the <code>ProtectionDomain</code> was constructed with the
+    * constructor variant which supports dynamically binding permissions, then
+    * the permission will be checked against the combination of the
+    * {@link PermissionCollection} supplied at construction and the current
+    * {@link Policy} binding.
+    *
+    * @param permission the {@link Permission} object to check.
+    * @return <code>true</code> if <code>permission</code> is implicit to this
+    * <code>ProtectionDomain</code>.
+    */
+   public boolean implies(Permission permission)
+   {
+     if (staticBinding)
+       return (perms == null ? false : perms.implies(permission));
+     // Else dynamically bound.  Do we have it?
+     // NOTE: this will force loading of Policy.currentPolicy
+     return Policy.getCurrentPolicy().implies(this, permission);
+   }
+ 
+   /**
+    * Convert a <code>ProtectionDomain</code> to a String.
+    *
+    * @return a string representation of the object.
+    */
+   public String toString()
+   {
+     String linesep = SystemProperties.getProperty("line.separator");
+     StringBuffer sb = new StringBuffer("ProtectionDomain (").append(linesep);
+ 
+     if (code_source == null)
+       sb.append("CodeSource:null");
+     else
+       sb.append(code_source);
+ 
+     sb.append(linesep);
+     if (classloader == null)
+       sb.append("ClassLoader:null");
+     else
+       sb.append(classloader);
+ 
+     sb.append(linesep);
+     sb.append("Principals:");
+     if (principals != null && principals.length > 0)
+       {
+         sb.append("[");
+         Principal pal;
+         for (int i = 0; i < principals.length; i++)
+           {
+             pal = principals[i];
+             sb.append("'").append(pal.getName())
+                 .append("' of type ").append(pal.getClass().getName());
+             if (i < principals.length-1)
+               sb.append(", ");
+           }
+         sb.append("]");
+       }
+     else
+       sb.append("none");
+ 
+     sb.append(linesep);
+     if (!staticBinding) // include all but dont force loading Policy.currentPolicy
+       if (Policy.isLoaded())
+         sb.append(Policy.getCurrentPolicy().getPermissions(this));
+       else // fallback on this one's permissions
+         sb.append(perms);
+     else
+       sb.append(perms);
+ 
+     return sb.append(linesep).append(")").append(linesep).toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Provider.java gcc-4.1.0/libjava/classpath/java/security/Provider.java
*** gcc-4.0.2/libjava/classpath/java/security/Provider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Provider.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,202 ----
+ /* Provider.java -- Security provider information
+    Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.io.Serializable;
+ import java.util.Properties;
+ 
+ /**
+  * This class represents a Java security architecture service provider.
+  * The services provided by a such a provider can range from security
+  * algorithms to key generation.
+  * <p>
+  * Providers are installed by name and version number.  There is one
+  * standard provider supplied with the class library.  This is the
+  * "GNU" provider, which can also be accessed by the alias "SUN" for
+  * compatibility with the JDK.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public abstract class Provider extends Properties implements Serializable
+ {
+   private static final long serialVersionUID = -4298000515446427739L;
+ 
+   /**
+    * This is a textual description of the provider
+    */
+   private String info;
+ 
+   /**
+    * This is the name of the provider
+    */
+   private String name;
+ 
+   /**
+    * This is the version number of the provider
+    */
+   private double version;
+ 
+   /**
+    * This method initializes a new instance of <code>Provider</code> to have
+    * the specified name, version, and description information.
+    *
+    * @param name The name to assign to this <code>Provider</code>.
+    * @param version The version number for this <code>Provider</code>.
+    * @param info A textual description of this provider.
+    */
+   protected Provider(String name, double version, String info)
+   {
+     this.name = name;
+     this.version = version;
+     this.info = info;
+   }
+ 
+   /**
+    * This method returns the name assigned to this <code>Provider</code>.
+    *
+    * @return The <code>Provider</code>'s name.
+    */
+   public String getName()
+   {
+     return (name);
+   }
+ 
+   /**
+    * This method retunrs the version number of this <code>Provider</code>.
+    * 
+    * @return The <code>Provider</code>'s version number.
+    */
+   public double getVersion()
+   {
+     return (version);
+   }
+ 
+   /**
+    * This method returns a textual description of the <code>Provider</code>.
+    *
+    * @return A description of the <code>Provider</code>.
+    */
+   public String getInfo()
+   {
+     return (info);
+   }
+ 
+   /**
+    * Sets the key property to have the specified value.
+    * <p>
+    * <bold>NOT IMPLEMENTED YET</bold>[
+    * First, if there is a security manager, its <code>checkSecurityAccess</code>
+    * method is called with the string "putProviderProperty."+name, where name is
+    * the provider name, to see if it's ok to set this provider's property
+    * values.
+    * If the default implementation of <code>checkSecurityAccess</code> is used
+    * (that is, that method is not overriden), then this results in a call to the
+    * security manager's <code>checkPermission</code> method with a
+    * <code>SecurityPermission("putProviderProperty."+name)</code>
+    * permission.<br>]
+    *
+    * @param key The property key.
+    * @param value The property value.
+    *
+    * @return The previous value of the specified property (<code>key</code>),
+    *         or <code>null</code> if it did not have one.
+    * @throws SecurityException If a security manager exists and its
+    * {@link java.lang.SecurityManager.checkSecurityAccess(java.lang.String)}
+    * method denies access to set property values.
+    * @since Classpath 0.4+cvs, JDK 1.2
+    * @see java.lang.Object.equals(Object)
+    * @see java.util.Hashtable.get(Object)
+    */
+   public Object put(Object key, Object value)
+   {
+     return super.put(toCanonicalKey(key), value);
+   }
+   
+   // overrides same in java.util.Hashtable
+   public Object get(Object key)
+   {
+     return super.get(toCanonicalKey(key));
+   }
+ 
+   /**
+    * This method removes the specified key entry (and its associated value)
+    * from the property mapping list.
+    * 
+    * @param key The key to remove
+    *
+    * @return The previous value for this key, or <code>null</code> if no
+    * previous value.
+    */
+   public Object remove(Object key)
+   {
+     return super.remove(toCanonicalKey(key));
+   }
+ 
+   /**
+    * This method clears the entire property list such that it no longer
+    * contains the properties used to look up the services provided by
+    * the <code>Provider</code>.
+    */
+   public void clear()
+   {
+     super.clear();
+   }
+ 
+   /**
+    * This method returns a <code>String</code> representation of this
+    * object.  This will include the <code>Provider</code> name and
+    * version number.
+    *
+    * @return A <code>String</code> representation of this object.
+    */
+   public String toString()
+   {
+     return (getClass().getName() + ": name=" + getName() + " version=" +
+ 	    version);
+   }
+   
+   private Object toCanonicalKey(Object key)
+   {
+     if (key.getClass().isAssignableFrom(String.class)) // is it ours?
+       return ((String) key).toUpperCase(); // use default locale
+     else
+       return key;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/ProviderException.java gcc-4.1.0/libjava/classpath/java/security/ProviderException.java
*** gcc-4.0.2/libjava/classpath/java/security/ProviderException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/ProviderException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* ProviderException.java -- Generic security provider runtime exception
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception indicates that a runtime problem was encounterd with
+  * a security provider. 
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class ProviderException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5256023526693665674L;
+ 
+   /**
+    * Create an instance with no descriptive error message.
+    */
+   public ProviderException()
+   {
+   }
+ 
+   /**
+    * Create an instance with a descriptive error message.
+    *
+    * @param msg the descriptive error message
+    */
+   public ProviderException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/PublicKey.java gcc-4.1.0/libjava/classpath/java/security/PublicKey.java
*** gcc-4.0.2/libjava/classpath/java/security/PublicKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/PublicKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* PublicKey.java -- tagging interface for all public keys
+    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This interface specified no methods.  In simply provides a common
+  * super-interface for all algorithm specific public key values.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Key
+  * @see PrivateKey
+  * @see Certificate
+  * @see Signature#initVerify(PublicKey)
+  * @see DSAPublicKey
+  * @see RSAPublicKey
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public interface PublicKey extends Key
+ {
+   /**
+    * The version identifier used for serialization.
+    */
+   long serialVersionUID = 7187392471159151072L;
+ } // interface PublicKey
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/SecureClassLoader.java gcc-4.1.0/libjava/classpath/java/security/SecureClassLoader.java
*** gcc-4.0.2/libjava/classpath/java/security/SecureClassLoader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/SecureClassLoader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,128 ----
+ /* SecureClassLoader.java --- A Secure Class Loader
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * A Secure Class Loader for loading classes with additional 
+  * support for specifying code source and permissions when
+  * they are retrieved by the system policy handler.
+  *
+  * @since 1.2
+  *
+  * @author Mark Benvenuto
+  */
+ public class SecureClassLoader extends ClassLoader
+ {
+   java.util.WeakHashMap protectionDomainCache = new java.util.WeakHashMap();
+ 
+   protected SecureClassLoader(ClassLoader parent)
+   {
+     super(parent);
+     SecurityManager sm = System.getSecurityManager();
+     if(sm != null)
+       sm.checkCreateClassLoader();
+   }
+ 
+   protected SecureClassLoader()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if(sm != null)
+       sm.checkCreateClassLoader();
+   }
+ 
+   /** 
+    * Creates a class using an array of bytes and a 
+    * CodeSource.
+    *
+    * @param name the name to give the class.  null if unknown.
+    * @param b the data representing the classfile, in classfile format.
+    * @param off the offset into the data where the classfile starts.
+    * @param len the length of the classfile data in the array.
+    * @param cs the CodeSource for the class or null when unknown.
+    *
+    * @return the class that was defined and optional CodeSource.
+    *
+    * @exception ClassFormatError if the byte array is not in proper classfile format.
+    */
+   protected final Class defineClass(String name, byte[] b, int off, int len,
+ 				    CodeSource cs)
+   {
+     if (cs != null)
+       {
+ 	ProtectionDomain protectionDomain;
+ 	  
+ 	synchronized (protectionDomainCache)
+ 	  {
+ 	    protectionDomain = (ProtectionDomain)protectionDomainCache.get(cs);
+ 	  }
+ 
+ 	if (protectionDomain == null)
+ 	  {
+ 	    protectionDomain 
+ 	      = new ProtectionDomain(cs, getPermissions(cs), this, null);
+ 	    synchronized (protectionDomainCache)
+ 	      {
+ 		ProtectionDomain domain 
+ 		  = (ProtectionDomain)protectionDomainCache.get(cs);
+ 		if (domain == null)
+ 		  protectionDomainCache.put(cs, protectionDomain);
+ 		else
+ 		  protectionDomain = domain;
+ 	      }
+ 	  }
+ 	return super.defineClass(name, b, off, len, protectionDomain);
+       } 
+     else
+       return super.defineClass(name, b, off, len);
+   }
+ 
+   /**
+    * Returns a PermissionCollection for the specified CodeSource.
+    * The default implementation invokes 
+    * java.security.Policy.getPermissions.
+    *
+    * This method is called by defineClass that takes a CodeSource
+    * arguement to build a proper ProtectionDomain for the class
+    * being defined.
+    */
+   protected PermissionCollection getPermissions(CodeSource cs)
+   {
+     Policy policy = Policy.getCurrentPolicy();
+     return policy.getPermissions(cs);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/SecureRandom.java gcc-4.1.0/libjava/classpath/java/security/SecureRandom.java
*** gcc-4.0.2/libjava/classpath/java/security/SecureRandom.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/SecureRandom.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,380 ----
+ /* SecureRandom.java --- Secure Random class implementation
+    Copyright (C) 1999, 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.util.Enumeration;
+ import java.util.Random;
+ 
+ /**
+  * An interface to a cryptographically secure pseudo-random number
+  * generator (PRNG). Random (or at least unguessable) numbers are used
+  * in all areas of security and cryptography, from the generation of
+  * keys and initialization vectors to the generation of random padding
+  * bytes.
+  *
+  * @author Mark Benvenuto (ivymccough@worldnet.att.net)
+  * @author Casey Marshall
+  */
+ public class SecureRandom extends Random
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** Service name for PRNGs. */
+   private static final String SECURE_RANDOM = "SecureRandom";
+ 
+   private static final long serialVersionUID = 4940670005562187L;
+ 
+   //Serialized Field
+   long counter = 0;		//Serialized
+   Provider provider = null;
+   byte[] randomBytes = null;	//Always null
+   int randomBytesUsed = 0;
+   SecureRandomSpi secureRandomSpi = null;
+   byte[] state = null;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+      Default constructor for SecureRandom. It constructs a 
+      new SecureRandom by instantating the first SecureRandom 
+      algorithm in the default security provier. 
+ 
+      It is not seeded and should be seeded using setSeed or else
+      on the first call to getnextBytes it will force a seed.
+ 
+      It is maintained for backwards compatibility and programs
+      should use {@link #getInstance(java.lang.String)}.
+    */
+   public SecureRandom()
+   {
+     Provider[] p = Security.getProviders();
+ 
+     //Format of Key: SecureRandom.algname
+     String key;
+ 
+     String classname = null;
+     int i;
+     Enumeration e;
+     for (i = 0; i < p.length; i++)
+       {
+         e = p[i].propertyNames();
+         while (e.hasMoreElements())
+           {
+             key = (String) e.nextElement();
+             if (key.startsWith("SECURERANDOM."))
+               {
+                 if ((classname = p[i].getProperty(key)) != null)
+                   {
+                     try
+                       {
+                         secureRandomSpi = (SecureRandomSpi) Class.
+                           forName(classname).newInstance();
+                         provider = p[i];
+                         return;
+                       }
+                     catch (ThreadDeath death)
+                       {
+                         throw death;
+                       }
+                     catch (Throwable t)
+ 		      {
+ 			// Ignore.
+ 		      }
+                   }
+               }
+           }
+       }
+ 
+     // Nothing found. Fall back to SHA1PRNG
+     secureRandomSpi = new gnu.java.security.provider.SHA1PRNG();
+   }
+ 
+   /**
+      A constructor for SecureRandom. It constructs a new 
+      SecureRandom by instantating the first SecureRandom algorithm 
+      in the default security provier. 
+ 
+      It is seeded with the passed function and is useful if the user
+      has access to hardware random device (like a radiation detector).
+ 
+      It is maintained for backwards compatibility and programs
+      should use getInstance.
+ 
+      @param seed Seed bytes for class
+    */
+   public SecureRandom(byte[] seed)
+   {
+     this();
+     setSeed(seed);
+   }
+ 
+   /**
+      A constructor for SecureRandom. It constructs a new 
+      SecureRandom using the specified SecureRandomSpi from
+      the specified security provier. 
+ 
+      @param secureRandomSpi A SecureRandomSpi class
+      @param provider A Provider class
+    */
+   protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
+   {
+     this.secureRandomSpi = secureRandomSpi;
+     this.provider = provider;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns an instance of a SecureRandom. It creates the class from
+    * the first provider that implements it.
+    *
+    * @param algorithm The algorithm name.
+    * @return A new SecureRandom implementing the given algorithm.
+    * @throws NoSuchAlgorithmException If no installed provider implements
+    *         the given algorithm.
+    */
+   public static SecureRandom getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+     
+     for (int i = 0; i < p.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, p[i]);
+           }
+         catch (NoSuchAlgorithmException e)
+           {
+ 	    // Ignore.
+           }
+       }
+ 
+     // None found.
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Returns an instance of a SecureRandom. It creates the class
+    * for the specified algorithm from the named provider.
+    *
+    * @param algorithm The algorithm name.
+    * @param provider  The provider name.
+    * @return A new SecureRandom implementing the chosen algorithm.
+    * @throws NoSuchAlgorithmException If the named provider does not implement
+    *         the algorithm, or if the implementation cannot be
+    *         instantiated.
+    * @throws NoSuchProviderException If no provider named
+    *         <code>provider</code> is currently installed.
+    * @throws IllegalArgumentException If <code>provider</code> is null
+    *         or is empty.
+    */
+   public static SecureRandom getInstance(String algorithm, String provider)
+   throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     if (provider == null || provider.length() == 0)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+     
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Returns an instance of a SecureRandom. It creates the class for
+    * the specified algorithm from the given provider.
+    *
+    * @param algorithm The SecureRandom algorithm to create.
+    * @param provider  The provider to get the instance from.
+    * @throws NoSuchAlgorithmException If the algorithm cannot be found, or
+    *         if the class cannot be instantiated.
+    * @throws IllegalArgumentException If <code>provider</code> is null.
+    */
+   public static SecureRandom getInstance(String algorithm, Provider provider)
+   throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("Illegal provider");
+     try
+       {
+         return new SecureRandom((SecureRandomSpi)
+           Engine.getInstance(SECURE_RANDOM, algorithm, provider),
+           provider);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+ 	throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+      Returns the provider being used by the current SecureRandom class.
+ 
+      @return The provider from which this SecureRandom was attained
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+      Seeds the SecureRandom. The class is re-seeded for each call and 
+      each seed builds on the previous seed so as not to weaken security.
+ 
+      @param seed seed bytes to seed with
+    */
+   public void setSeed(byte[] seed)
+   {
+     secureRandomSpi.engineSetSeed(seed);
+   }
+ 
+   /**
+      Seeds the SecureRandom. The class is re-seeded for each call and 
+      each seed builds on the previous seed so as not to weaken security.
+ 
+      @param seed 8 seed bytes to seed with
+    */
+   public void setSeed(long seed)
+   {
+     // This particular setSeed will be called by Random.Random(), via
+     // our own constructor, before secureRandomSpi is initialized.  In
+     // this case we can't call a method on secureRandomSpi, and we
+     // definitely don't want to throw a NullPointerException.
+     // Therefore we test.
+     if (secureRandomSpi != null)
+       {
+         byte[] tmp = { (byte) (0xff & (seed >> 56)),
+ 		       (byte) (0xff & (seed >> 48)),
+ 		       (byte) (0xff & (seed >> 40)),
+ 		       (byte) (0xff & (seed >> 32)),
+ 		       (byte) (0xff & (seed >> 24)),
+ 		       (byte) (0xff & (seed >> 16)),
+ 		       (byte) (0xff & (seed >> 8)),
+ 		       (byte) (0xff & seed)
+         };
+         secureRandomSpi.engineSetSeed(tmp);
+       }
+   }
+ 
+   /**
+      Generates a user specified number of bytes. This function
+      is the basis for all the random functions.
+ 
+      @param bytes array to store generated bytes in
+    */
+   public void nextBytes(byte[] bytes)
+   {
+     randomBytesUsed += bytes.length;
+     counter++;
+     secureRandomSpi.engineNextBytes(bytes);
+   }
+ 
+   /**
+      Generates an integer containing the user specified
+      number of random bits. It is right justified and padded
+      with zeros.
+ 
+      @param numBits number of random bits to get, 0 <= numBits <= 32;
+ 
+      @return the random bits
+    */
+   protected final int next(int numBits)
+   {
+     if (numBits == 0)
+       return 0;
+ 
+     byte[] tmp = new byte[numBits / 8 + (1 * (numBits % 8))];
+ 
+     secureRandomSpi.engineNextBytes(tmp);
+     randomBytesUsed += tmp.length;
+     counter++;
+ 
+     int ret = 0;
+ 
+     for (int i = 0; i < tmp.length; i++)
+       ret |= (tmp[i] & 0xFF) << (8 * i);
+ 
+     long mask = (1L << numBits) - 1;
+     return (int) (ret & mask);
+   }
+ 
+   /**
+      Returns the given number of seed bytes. This method is
+      maintained only for backwards capability. 
+ 
+      @param numBytes number of seed bytes to get
+ 
+      @return an array containing the seed bytes
+    */
+   public static byte[] getSeed(int numBytes)
+   {
+     byte[] tmp = new byte[numBytes];
+ 
+     new Random().nextBytes(tmp);
+     return tmp;
+     //return secureRandomSpi.engineGenerateSeed( numBytes );
+   }
+ 
+   /**
+      Returns the specified number of seed bytes.
+ 
+      @param numBytes number of seed bytes to get
+ 
+      @return an array containing the seed bytes
+    */
+   public byte[] generateSeed(int numBytes)
+   {
+     return secureRandomSpi.engineGenerateSeed(numBytes);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/SecureRandomSpi.java gcc-4.1.0/libjava/classpath/java/security/SecureRandomSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/SecureRandomSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/SecureRandomSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* SecureRandomSpi.java --- Secure Random Service Provider Interface
+    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ import java.io.Serializable;
+ 
+ /**
+    SecureRandomSpi is the Service Provider Interface for SecureRandom
+    providers. It provides an interface for providers to the 
+    SecureRandom engine to write their own pseudo-random number
+    generator.
+ 
+    @since JDK 1.2       
+ 
+    @author Mark Benvenuto (ivymccough@worldnet.att.net)
+  */
+ public abstract class SecureRandomSpi implements Serializable
+ {
+   private static final long serialVersionUID = -2991854161009191830L;
+ 
+   /**
+      Default Constructor for SecureRandomSpi
+    */
+   public SecureRandomSpi()
+   {
+   }
+ 
+   /**
+      Updates the seed for SecureRandomSpi but does not reset seed. 
+      It does to this so repeated called never decrease randomness.
+    */
+   protected abstract void engineSetSeed(byte[] seed);
+ 
+   /**
+      Gets a user specified number of bytes depending on the length
+      of the array?
+ 
+      @param bytes array to fill with random bytes
+    */
+   protected abstract void engineNextBytes(byte[] bytes);
+ 
+   /**
+      Gets a user specified number of bytes specified by the 
+      parameter.
+ 
+      @param numBytes number of random bytes to generate
+ 
+      @return an array full of random bytes
+    */
+   protected abstract byte[] engineGenerateSeed(int numBytes);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Security.java gcc-4.1.0/libjava/classpath/java/security/Security.java
*** gcc-4.0.2/libjava/classpath/java/security/Security.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Security.java	Thu Feb  2 01:47:04 2006
***************
*** 0 ****
--- 1,741 ----
+ /* Security.java --- Java base security class implementation
+    Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import gnu.classpath.SystemProperties;
+ 
+ import gnu.classpath.Configuration;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedHashSet;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.Set;
+ import java.util.Vector;
+ 
+ /**
+  * This class centralizes all security properties and common security methods.
+  * One of its primary uses is to manage providers.
+  *
+  * @author Mark Benvenuto (ivymccough@worldnet.att.net)
+  */
+ public final class Security
+ {
+   private static final String ALG_ALIAS = "Alg.Alias.";
+ 
+   private static Vector providers = new Vector();
+   private static Properties secprops = new Properties();
+   
+   static
+     {
+       String base = SystemProperties.getProperty("gnu.classpath.home.url");
+       String vendor = SystemProperties.getProperty("gnu.classpath.vm.shortname");
+ 
+       // Try VM specific security file
+       boolean loaded = loadProviders (base, vendor);
+     
+       // Append classpath standard provider if possible
+       if (!loadProviders (base, "classpath")
+ 	  && !loaded
+ 	  && providers.size() == 0)
+ 	  {
+ 	      if (Configuration.DEBUG)
+ 		  {
+ 		      /* No providers found and both security files failed to
+ 		       * load properly. Give a warning in case of DEBUG is
+ 		       * enabled. Could be done with java.util.logging later.
+ 		       */
+ 		      System.err.println
+ 			  ("WARNING: could not properly read security provider files:");
+ 		      System.err.println
+ 			  ("         " + base + "/security/" + vendor
+ 			   + ".security");
+ 		      System.err.println
+ 			  ("         " + base + "/security/" + "classpath"
+ 			   + ".security");
+ 		      System.err.println
+ 			  ("         Falling back to standard GNU security provider");
+ 		  }
+ 	      providers.addElement (new gnu.java.security.provider.Gnu());
+ 	  }
+     }
+   // This class can't be instantiated.
+   private Security()
+   {
+   }
+ 
+   /**
+    * Tries to load the vender specific security providers from the given
+    * base URL. Returns true if the resource could be read and completely
+    * parsed successfully, false otherwise.
+    */
+   private static boolean loadProviders(String baseUrl, String vendor)
+   {
+     if (baseUrl == null || vendor == null)
+       return false;
+ 
+     boolean result = true;
+     String secfilestr = baseUrl + "/security/" + vendor + ".security";
+     try
+       {
+ 	InputStream fin = new URL(secfilestr).openStream();
+ 	secprops.load(fin);
+ 
+ 	int i = 1;
+ 	String name;
+ 	while ((name = secprops.getProperty("security.provider." + i)) != null)
+ 	  {
+ 	    Exception exception = null;
+ 	    try
+ 	      {
+             ClassLoader sys = ClassLoader.getSystemClassLoader();
+ 		providers.addElement(Class.forName(name, true, sys).newInstance());
+ 	      }
+ 	    catch (ClassNotFoundException x)
+ 	      {
+ 	        exception = x;
+ 	      }
+ 	    catch (InstantiationException x)
+ 	      {
+ 	        exception = x;
+ 	      }
+ 	    catch (IllegalAccessException x)
+ 	      {
+ 	        exception = x;
+ 	      }
+ 
+ 	    if (exception != null)
+ 	      {
+ 		System.err.println ("WARNING: Error loading security provider "
+ 				    + name + ": " + exception);
+ 		result = false;
+ 	      }
+ 	    i++;
+ 	  }
+       }
+     catch (IOException ignored)
+       {
+ 	result = false;
+       }
+ 
+     return result;
+   }
+ 
+   /**
+    * Gets a specified property for an algorithm. The algorithm name should be a
+    * standard name. See Appendix A in the Java Cryptography Architecture API
+    * Specification &amp; Reference for information about standard algorithm
+    * names. One possible use is by specialized algorithm parsers, which may map
+    * classes to algorithms which they understand (much like {@link Key} parsers
+    * do).
+    *
+    * @param algName the algorithm name.
+    * @param propName the name of the property to get.
+    * @return the value of the specified property.
+    * @deprecated This method used to return the value of a proprietary property
+    * in the master file of the "SUN" Cryptographic Service Provider in order to
+    * determine how to parse algorithm-specific parameters. Use the new
+    * provider-based and algorithm-independent {@link AlgorithmParameters} and
+    * {@link KeyFactory} engine classes (introduced in the Java 2 platform)
+    * instead.
+    */
+   public static String getAlgorithmProperty(String algName, String propName)
+   {
+     if (algName == null || propName == null)
+       return null;
+ 
+     String property = String.valueOf(propName) + "." + String.valueOf(algName);
+     Provider p;
+     for (Iterator i = providers.iterator(); i.hasNext(); )
+       {
+         p = (Provider) i.next();
+         for (Iterator j = p.keySet().iterator(); j.hasNext(); )
+           {
+             String key = (String) j.next();
+             if (key.equalsIgnoreCase(property))
+               return p.getProperty(key);
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * <p>Adds a new provider, at a specified position. The position is the
+    * preference order in which providers are searched for requested algorithms.
+    * Note that it is not guaranteed that this preference will be respected. The
+    * position is 1-based, that is, <code>1</code> is most preferred, followed by
+    * <code>2</code>, and so on.</p>
+    *
+    * <p>If the given provider is installed at the requested position, the
+    * provider that used to be at that position, and all providers with a
+    * position greater than position, are shifted up one position (towards the
+    * end of the list of installed providers).</p>
+    *
+    * <p>A provider cannot be added if it is already installed.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with the string <code>"insertProvider."+provider.
+    * getName()</code> to see if it's ok to add a new provider. If the default
+    * implementation of <code>checkSecurityAccess()</code> is used (i.e., that
+    * method is not overriden), then this will result in a call to the security
+    * manager's <code>checkPermission()</code> method with a
+    * <code>SecurityPermission("insertProvider."+provider.getName())</code>
+    * permission.</p>
+    *
+    * @param provider the provider to be added.
+    * @param position the preference position that the caller would like for
+    * this provider.
+    * @return the actual preference position in which the provider was added, or
+    * <code>-1</code> if the provider was not added because it is already
+    * installed.
+    * @throws SecurityException if a security manager exists and its
+    * {@link SecurityManager#checkSecurityAccess(String)} method denies access
+    * to add a new provider.
+    * @see #getProvider(String)
+    * @see #removeProvider(String)
+    * @see SecurityPermission
+    */
+   public static int insertProviderAt(Provider provider, int position)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("insertProvider." + provider.getName());
+ 
+     position--;
+     int max = providers.size ();
+     for (int i = 0; i < max; i++)
+       {
+ 	if (((Provider) providers.elementAt(i)).getName().equals(provider.getName()))
+ 	  return -1;
+       }
+ 
+     if (position < 0)
+       position = 0;
+     if (position > max)
+       position = max;
+ 
+     providers.insertElementAt(provider, position);
+ 
+     return position + 1;
+   }
+ 
+   /**
+    * <p>Adds a provider to the next position available.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with the string <code>"insertProvider."+provider.
+    * getName()</code> to see if it's ok to add a new provider. If the default
+    * implementation of <code>checkSecurityAccess()</code> is used (i.e., that
+    * method is not overriden), then this will result in a call to the security
+    * manager's <code>checkPermission()</code> method with a
+    * <code>SecurityPermission("insertProvider."+provider.getName())</code>
+    * permission.</p>
+    *
+    * @param provider the provider to be added.
+    * @return the preference position in which the provider was added, or
+    * <code>-1</code> if the provider was not added because it is already
+    * installed.
+    * @throws SecurityException if a security manager exists and its
+    * {@link SecurityManager#checkSecurityAccess(String)} method denies access
+    * to add a new provider.
+    * @see #getProvider(String)
+    * @see #removeProvider(String)
+    * @see SecurityPermission
+    */
+   public static int addProvider(Provider provider)
+   {
+     return insertProviderAt (provider, providers.size () + 1);
+   }
+ 
+   /**
+    * <p>Removes the provider with the specified name.</p>
+    *
+    * <p>When the specified provider is removed, all providers located at a
+    * position greater than where the specified provider was are shifted down
+    * one position (towards the head of the list of installed providers).</p>
+    *
+    * <p>This method returns silently if the provider is not installed.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with the string <code>"removeProvider."+name</code>
+    * to see if it's ok to remove the provider. If the default implementation of
+    * <code>checkSecurityAccess()</code> is used (i.e., that method is not
+    * overriden), then this will result in a call to the security manager's
+    * <code>checkPermission()</code> method with a <code>SecurityPermission(
+    * "removeProvider."+name)</code> permission.</p>
+    *
+    * @param name the name of the provider to remove.
+    * @throws SecurityException if a security manager exists and its
+    * {@link SecurityManager#checkSecurityAccess(String)} method denies access
+    * to remove the provider.
+    * @see #getProvider(String)
+    * @see #addProvider(Provider)
+    */
+   public static void removeProvider(String name)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("removeProvider." + name);
+ 
+     int max = providers.size ();
+     for (int i = 0; i < max; i++)
+       {
+ 	if (((Provider) providers.elementAt(i)).getName().equals(name))
+ 	  {
+ 	    providers.remove(i);
+ 	    break;
+ 	  }
+       }
+   }
+ 
+   /**
+    * Returns an array containing all the installed providers. The order of the
+    * providers in the array is their preference order.
+    *
+    * @return an array of all the installed providers.
+    */
+   public static Provider[] getProviders()
+   {
+     Provider[] array = new Provider[providers.size ()];
+     providers.copyInto (array);
+     return array;
+   }
+ 
+   /**
+    * Returns the provider installed with the specified name, if any. Returns
+    * <code>null</code> if no provider with the specified name is installed.
+    *
+    * @param name the name of the provider to get.
+    * @return the provider of the specified name.
+    * @see #removeProvider(String)
+    * @see #addProvider(Provider)
+    */
+   public static Provider getProvider(String name)
+   {
+     Provider p;
+     int max = providers.size ();
+     for (int i = 0; i < max; i++)
+       {
+ 	p = (Provider) providers.elementAt(i);
+ 	if (p.getName().equals(name))
+ 	  return p;
+       }
+     return null;
+   }
+ 
+   /**
+    * <p>Gets a security property value.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkPermission()</code>
+    * method is called with a <code>SecurityPermission("getProperty."+key)</code>
+    * permission to see if it's ok to retrieve the specified security property
+    * value.</p>
+    *
+    * @param key the key of the property being retrieved.
+    * @return the value of the security property corresponding to key.
+    * @throws SecurityException if a security manager exists and its
+    * {@link SecurityManager#checkPermission(Permission)} method denies access
+    * to retrieve the specified security property value.
+    * @see #setProperty(String, String)
+    * @see SecurityPermission
+    */
+   public static String getProperty(String key)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("getProperty." + key);
+ 
+     return secprops.getProperty(key);
+   }
+ 
+   /**
+    * <p>Sets a security property value.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkPermission()</code>
+    * method is called with a <code>SecurityPermission("setProperty."+key)</code>
+    * permission to see if it's ok to set the specified security property value.
+    * </p>
+    *
+    * @param key the name of the property to be set.
+    * @param datnum the value of the property to be set.
+    * @throws SecurityException if a security manager exists and its
+    * {@link SecurityManager#checkPermission(Permission)} method denies access
+    * to set the specified security property value.
+    * @see #getProperty(String)
+    * @see SecurityPermission
+    */
+   public static void setProperty(String key, String datnum)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("setProperty." + key);
+ 
+     secprops.put(key, datnum);
+   }
+ 
+   /**
+    * Returns a Set of Strings containing the names of all available algorithms
+    * or types for the specified Java cryptographic service (e.g., Signature,
+    * MessageDigest, Cipher, Mac, KeyStore). Returns an empty Set if there is no
+    * provider that supports the specified service. For a complete list of Java
+    * cryptographic services, please see the Java Cryptography Architecture API
+    * Specification &amp; Reference. Note: the returned set is immutable.
+    *
+    * @param serviceName the name of the Java cryptographic service (e.g.,
+    * Signature, MessageDigest, Cipher, Mac, KeyStore). Note: this parameter is
+    * case-insensitive.
+    * @return a Set of Strings containing the names of all available algorithms
+    * or types for the specified Java cryptographic service or an empty set if
+    * no provider supports the specified service.
+    * @since 1.4
+    */
+   public static Set getAlgorithms(String serviceName)
+   {
+     HashSet result = new HashSet();
+     if (serviceName == null || serviceName.length() == 0)
+       return result;
+ 
+     serviceName = serviceName.trim();
+     if (serviceName.length() == 0)
+       return result;
+ 
+     serviceName = serviceName.toUpperCase()+".";
+     Provider[] providers = getProviders();
+     int ndx;
+     for (int i = 0; i < providers.length; i++)
+       for (Enumeration e = providers[i].propertyNames(); e.hasMoreElements(); )
+         {
+           String service = ((String) e.nextElement()).trim();
+           if (service.toUpperCase().startsWith(serviceName))
+             {
+               service = service.substring(serviceName.length()).trim();
+               ndx = service.indexOf(' '); // get rid of attributes
+               if (ndx != -1)
+                 service = service.substring(0, ndx);
+               result.add(service);
+             }
+         }
+     return Collections.unmodifiableSet(result);
+   }
+ 
+   /**
+    * <p>Returns an array containing all installed providers that satisfy the
+    * specified selection criterion, or <code>null</code> if no such providers
+    * have been installed. The returned providers are ordered according to their
+    * preference order.</p>
+    *
+    * <p>A cryptographic service is always associated with a particular
+    * algorithm or type. For example, a digital signature service is always
+    * associated with a particular algorithm (e.g., <i>DSA</i>), and a
+    * CertificateFactory service is always associated with a particular
+    * certificate type (e.g., <i>X.509</i>).</p>
+    *
+    * <p>The selection criterion must be specified in one of the following two
+    * formats:</p>
+    *
+    * <ul>
+    *    <li><p>&lt;crypto_service&gt;.&lt;algorithm_or_type&gt;</p>
+    *    <p>The cryptographic service name must not contain any dots.</p>
+    *    <p>A provider satisfies the specified selection criterion iff the
+    *    provider implements the specified algorithm or type for the specified
+    *    cryptographic service.</p>
+    *    <p>For example, "CertificateFactory.X.509" would be satisfied by any
+    *    provider that supplied a CertificateFactory implementation for X.509
+    *    certificates.</p></li>
+    *
+    *    <li><p>&lt;crypto_service&gt;.&lt;algorithm_or_type&gt; &lt;attribute_name&gt;:&lt;attribute_value&gt;</p>
+    *    <p>The cryptographic service name must not contain any dots. There must
+    *    be one or more space charaters between the the &lt;algorithm_or_type&gt;
+    *    and the &lt;attribute_name&gt;.</p>
+    *    <p>A provider satisfies this selection criterion iff the provider
+    *    implements the specified algorithm or type for the specified
+    *    cryptographic service and its implementation meets the constraint
+    *    expressed by the specified attribute name/value pair.</p>
+    *    <p>For example, "Signature.SHA1withDSA KeySize:1024" would be satisfied
+    *    by any provider that implemented the SHA1withDSA signature algorithm
+    *    with a keysize of 1024 (or larger).</p></li>
+    * </ul>
+    *
+    * <p>See Appendix A in the Java Cryptogaphy Architecture API Specification
+    * &amp; Reference for information about standard cryptographic service names,
+    * standard algorithm names and standard attribute names.</p>
+    *
+    * @param filter the criterion for selecting providers. The filter is case-
+    * insensitive.
+    * @return all the installed providers that satisfy the selection criterion,
+    * or null if no such providers have been installed.
+    * @throws InvalidParameterException if the filter is not in the required
+    * format.
+    * @see #getProviders(Map)
+    */
+   public static Provider[] getProviders(String filter)
+   {
+     if (providers == null || providers.isEmpty())
+       return null;
+ 
+     if (filter == null || filter.length() == 0)
+       return getProviders();
+ 
+     HashMap map = new HashMap(1);
+     int i = filter.indexOf(':');
+     if (i == -1) // <service>.<algorithm>
+       map.put(filter, "");
+     else // <service>.<algorithm> <attribute>:<value>
+       map.put(filter.substring(0, i), filter.substring(i+1));
+ 
+     return getProviders(map);
+   }
+ 
+  /**
+   * <p>Returns an array containing all installed providers that satisfy the
+   * specified selection criteria, or <code>null</code> if no such providers
+   * have been installed. The returned providers are ordered according to their
+   * preference order.</p>
+   *
+   * <p>The selection criteria are represented by a map. Each map entry
+   * represents a selection criterion. A provider is selected iff it satisfies
+   * all selection criteria. The key for any entry in such a map must be in one
+   * of the following two formats:</p>
+   *
+   * <ul>
+   *    <li><p>&lt;crypto_service&gt;.&lt;algorithm_or_type&gt;</p>
+   *    <p>The cryptographic service name must not contain any dots.</p>
+   *    <p>The value associated with the key must be an empty string.</p>
+   *    <p>A provider satisfies this selection criterion iff the provider
+   *    implements the specified algorithm or type for the specified
+   *    cryptographic service.</p></li>
+   *
+   *    <li><p>&lt;crypto_service&gt;.&lt;algorithm_or_type&gt; &lt;attribute_name&gt;</p>
+   *    <p>The cryptographic service name must not contain any dots. There must
+   *    be one or more space charaters between the &lt;algorithm_or_type&gt; and
+   *    the &lt;attribute_name&gt;.</p>
+   *    <p>The value associated with the key must be a non-empty string. A
+   *    provider satisfies this selection criterion iff the provider implements
+   *    the specified algorithm or type for the specified cryptographic service
+   *    and its implementation meets the constraint expressed by the specified
+   *    attribute name/value pair.</p></li>
+   * </ul>
+   *
+   * <p>See Appendix A in the Java Cryptogaphy Architecture API Specification
+   * &amp; Reference for information about standard cryptographic service names,
+   * standard algorithm names and standard attribute names.</p>
+   *
+   * @param filter the criteria for selecting providers. The filter is case-
+   * insensitive.
+   * @return all the installed providers that satisfy the selection criteria,
+   * or <code>null</code> if no such providers have been installed.
+   * @throws InvalidParameterException if the filter is not in the required
+   * format.
+   * @see #getProviders(String)
+   */
+   public static Provider[] getProviders(Map filter)
+   {
+     if (providers == null || providers.isEmpty())
+       return null;
+ 
+     if (filter == null)
+       return getProviders();
+ 
+     Set querries = filter.keySet();
+     if (querries == null || querries.isEmpty())
+       return getProviders();
+ 
+     LinkedHashSet result = new LinkedHashSet(providers); // assume all
+     int dot, ws;
+     String querry, service, algorithm, attribute, value;
+     LinkedHashSet serviceProviders = new LinkedHashSet(); // preserve insertion order
+     for (Iterator i = querries.iterator(); i.hasNext(); )
+       {
+         querry = (String) i.next();
+         if (querry == null) // all providers
+           continue;
+ 
+         querry = querry.trim();
+         if (querry.length() == 0) // all providers
+           continue;
+ 
+         dot = querry.indexOf('.');
+         if (dot == -1) // syntax error
+           throw new InvalidParameterException(
+               "missing dot in '" + String.valueOf(querry)+"'");
+ 
+         value = (String) filter.get(querry);
+         // deconstruct querry into [service, algorithm, attribute]
+         if (value == null || value.trim().length() == 0) // <service>.<algorithm>
+           {
+             value = null;
+             attribute = null;
+             service = querry.substring(0, dot).trim();
+             algorithm = querry.substring(dot+1).trim();
+           }
+         else // <service>.<algorithm> <attribute>
+           {
+             ws = querry.indexOf(' ');
+             if (ws == -1)
+               throw new InvalidParameterException(
+                   "value (" + String.valueOf(value) +
+                   ") is not empty, but querry (" + String.valueOf(querry) +
+                   ") is missing at least one space character");
+             value = value.trim();
+             attribute = querry.substring(ws+1).trim();
+             // was the dot in the attribute?
+             if (attribute.indexOf('.') != -1)
+               throw new InvalidParameterException(
+                   "attribute_name (" + String.valueOf(attribute) +
+                   ") in querry (" + String.valueOf(querry) + ") contains a dot");
+ 
+             querry = querry.substring(0, ws).trim();
+             service = querry.substring(0, dot).trim();
+             algorithm = querry.substring(dot+1).trim();
+           }
+ 
+         // service and algorithm must not be empty
+         if (service.length() == 0)
+           throw new InvalidParameterException(
+               "<crypto_service> in querry (" + String.valueOf(querry) +
+               ") is empty");
+ 
+         if (algorithm.length() == 0)
+           throw new InvalidParameterException(
+               "<algorithm_or_type> in querry (" + String.valueOf(querry) +
+               ") is empty");
+ 
+         selectProviders(service, algorithm, attribute, value, result, serviceProviders);
+         result.retainAll(serviceProviders); // eval next retaining found providers
+         if (result.isEmpty()) // no point continuing
+           break;
+       }
+ 
+     if (result.isEmpty())
+       return null;
+ 
+     return (Provider[]) result.toArray(new Provider[result.size()]);
+   }
+ 
+   private static void selectProviders(String svc, String algo, String attr,
+                                       String val, LinkedHashSet providerSet,
+                                       LinkedHashSet result)
+   {
+     result.clear(); // ensure we start with an empty result set
+     for (Iterator i = providerSet.iterator(); i.hasNext(); )
+       {
+         Provider p = (Provider) i.next();
+         if (provides(p, svc, algo, attr, val))
+           result.add(p);
+       }
+   }
+ 
+   private static boolean provides(Provider p, String svc, String algo,
+                                   String attr, String val)
+   {
+     Iterator it;
+     String serviceDotAlgorithm = null;
+     String key = null;
+     String realVal;
+     boolean found = false;
+     // if <svc>.<algo> <attr> is in the set then so is <svc>.<algo>
+     // but it may be stored under an alias <algo>. resolve
+     outer: for (int r = 0; r < 3; r++) // guard against circularity
+       {
+         serviceDotAlgorithm = (svc+"."+String.valueOf(algo)).trim();
+         for (it = p.keySet().iterator(); it.hasNext(); )
+           {
+             key = (String) it.next();
+             if (key.equalsIgnoreCase(serviceDotAlgorithm)) // eureka
+               {
+                 found = true;
+                 break outer;
+               }
+             // it may be there but as an alias
+             if (key.equalsIgnoreCase(ALG_ALIAS + serviceDotAlgorithm))
+               {
+                 algo = p.getProperty(key);
+                 continue outer;
+               }
+             // else continue inner
+           }
+       }
+ 
+     if (!found)
+       return false;
+ 
+     // found a candidate for the querry.  do we have an attr to match?
+     if (val == null) // <service>.<algorithm> querry
+       return true;
+ 
+     // <service>.<algorithm> <attribute>; find the key entry that match
+     String realAttr;
+     int limit = serviceDotAlgorithm.length() + 1;
+     for (it = p.keySet().iterator(); it.hasNext(); )
+       {
+         key = (String) it.next();
+         if (key.length() <= limit)
+           continue;
+ 
+         if (key.substring(0, limit).equalsIgnoreCase(serviceDotAlgorithm+" "))
+           {
+             realAttr = key.substring(limit).trim();
+             if (! realAttr.equalsIgnoreCase(attr))
+               continue;
+ 
+             // eveything matches so far.  do the value
+             realVal = p.getProperty(key);
+             if (realVal == null)
+               return false;
+ 
+             realVal = realVal.trim();
+             // is it a string value?
+             if (val.equalsIgnoreCase(realVal))
+               return true;
+ 
+             // assume value is a number. cehck for greater-than-or-equal
+             return (new Integer(val).intValue() >= new Integer(realVal).intValue());
+           }
+       }
+ 
+     return false;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/SecurityPermission.java gcc-4.1.0/libjava/classpath/java/security/SecurityPermission.java
*** gcc-4.0.2/libjava/classpath/java/security/SecurityPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/SecurityPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,178 ----
+ /* SecurityPermission.java -- Class for named security permissions
+    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This class provides a mechanism for specified named permissions
+  * related to the Java security framework.  These permissions have no
+  * associated actions list.  They are either granted or not granted.
+  *
+  * <p>The list of valid permission names is:<br>
+  * <table border=1>
+  * <tr><th>Permission Name</th><th>Permission Allows</th><th>Risks</th</tr>
+  * <tr>
+  *   <td><code>createAccessControlContext</code></td>
+  *   <td>Allows creation of an AccessControlContext</td>
+  *   <td>The new control context can have a rogue DomainCombiner, leading
+  *       to a privacy leak</td></tr>
+  * <tr>
+  *   <td><code>getDomainCombiner</code></td>
+  *   <td>Get a DomainCombiner from an AccessControlContext</td>
+  *   <td>Access to a DomainCombiner can lead to a privacy leak</td></tr>
+  * <tr>
+  *   <td><code>getPolicy</code></td>
+  *   <td>Allows retrieval of the system security policy</td>
+  *   <td>Malicious code can use information from the policy to better plan
+  *       an attack</td></tr>
+  * <tr>
+  *   <td><code>setPolicy</code></td>
+  *   <td>Allows the security policy to be changed</td>
+  *   <td>Malicious code can give itself any permission it wants</td></tr>
+  * <tr>
+  *   <td><code>getProperty.</code><em>key</em></td>
+  *   <td>Retrieve the property specified by the key</td>
+  *   <td>Malicious code can use information from the property to better plan
+  *       an attack</td></tr>
+  * <tr>
+  *   <td><code>setProperty.</code><em>key</em></td>
+  *   <td>Allows changing of the value of all properties implied by key</td>
+  *   <td>Malicious code can insert rogue classes to steal keys or recreate
+  *       the security policy with whatever permissions it desires</td></tr>
+  * <tr>
+  *   <td><code>insertProvider.</code><em>key</em></td>
+  *   <td>Allows the named provider to be added</td>
+  *   <td>Malicious code can insert rogue providers that steal data</td></tr>
+  * <tr>
+  *   <td><code>removeProvider.</code><em>key</em></td>
+  *   <td>Allows the named provider to be removed</td>
+  *   <td>A missing provider can cripple code that relies on it</td></tr>
+  * <tr>
+  *   <td><code>setSystemScope</code></td>
+  *   <td>Allows the system identity scope to be set</td>
+  *   <td>Malicious code can add certificates not available in the original
+  *       identity scope, to gain more permissions</td></tr>
+  * <tr>
+  *   <td><code>setIdentityPublicKey</code></td>
+  *   <td>Allows the public key of an Identity to be set</td>
+  *   <td>Malicious code can install its own key to gain permissions not
+  *       allowed by the original identity scope</td></tr>
+  * <tr>
+  *   <td><code>SetIdentityInfo</code></td>
+  *   <td>Allows the description of an Identity to be set</td>
+  *   <td>Malicious code can spoof users into trusting a fake identity</td></tr>
+  * <tr>
+  *   <td><code>addIdentityCertificate</code></td>
+  *   <td>Allows a certificate to be set for the public key of an identity</td>
+  *   <td>The public key can become trusted to a wider audience than originally
+  *       intended</td></tr>
+  * <tr>
+  *   <td><code>removeIdentityCertificate</code></td>
+  *   <td>Allows removal of a certificate from an identity's public key</td>
+  *   <td>The public key can become less trusted than it should be</td></tr>
+  * <tr>
+  *   <td><code>printIdentity</code></td>
+  *   <td>View the name of the identity and scope, and whether they are
+  *       trusted</td>
+  *   <td>The scope may include a filename, which provides an entry point for
+  *       further security breaches</td></tr>
+  * <tr>
+  *   <td><code>clearProviderProperties.</code><em>key</em></td>
+  *   <td>Allows the properties of the named provider to be cleared</td>
+  *   <td>This can disable parts of the program which depend on finding the
+  *       provider</td></tr>
+  * <tr>
+  *   <td><code>putProviderProperty.</code><em>key</em></td>
+  *   <td>Allows the properties of the named provider to be changed</td>
+  *   <td>Malicious code can replace the implementation of a provider</td></tr>
+  * <tr>
+  *   <td><code>removeProviderProperty.</code><em>key</em></td>
+  *   <td>Allows the properties of the named provider to be deleted</td>
+  *   <td>This can disable parts of the program which depend on finding the
+  *       provider</td></tr>
+  * <tr>
+  *   <td><code>getSignerPrivateKey</code></td>
+  *   <td>Allows the retrieval of the private key for a signer</td>
+  *   <td>Anyone that can access the private key can claim to be the
+  *       Signer</td></tr>
+  * <tr>
+  *   <td><code>setSignerKeyPair</code></td>
+  *   <td>Allows the public and private key of a Signer to be changed</td>
+  *   <td>The replacement might be a weaker encryption, or the attacker
+  *       can use knowledge of the replaced key to decrypt an entire
+  *       communication session</td></tr>
+  * </table>
+  *
+  * <p>There is some degree of security risk in granting any of these
+  * permissions. Some of them can completely compromise system security.
+  * Please exercise extreme caution in granting these permissions.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Permission
+  * @see SecurityManager
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public final class SecurityPermission extends BasicPermission
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5236109936224050470L;
+ 
+   /**
+    * Create a new instance with the specified name.
+    *
+    * @param name the name to assign to this permission
+    */
+   public SecurityPermission(String name)
+   {
+     super(name);
+   }
+ 
+   /**
+    * Create a new instance with the specified name. As SecurityPermission
+    * carries no actions, the second parameter is ignored.
+    *
+    * @param name the name to assign to this permission
+    * @param actions ignored
+    */
+   public SecurityPermission(String name, String actions)
+   {
+     super(name);
+   }
+ } // class SecurityPermission
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Signature.java gcc-4.1.0/libjava/classpath/java/security/Signature.java
*** gcc-4.0.2/libjava/classpath/java/security/Signature.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Signature.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,636 ----
+ /* Signature.java --- Signature Class
+    Copyright (C) 1999, 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.security.cert.Certificate;
+ import java.security.cert.X509Certificate;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * <p>This <code>Signature</code> class is used to provide applications the
+  * functionality of a digital signature algorithm. Digital signatures are used
+  * for authentication and integrity assurance of digital data.</p>
+  *
+  * <p>The signature algorithm can be, among others, the NIST standard <i>DSS</i>,
+  * using <i>DSA</i> and <i>SHA-1</i>. The <i>DSA</i> algorithm using the
+  * <i>SHA-1</i> message digest algorithm can be specified as <code>SHA1withDSA
+  * </code>. In the case of <i>RSA</i>, there are multiple choices for the
+  * message digest algorithm, so the signing algorithm could be specified as, for
+  * example, <code>MD2withRSA</code>, <code>MD5withRSA</code>, or
+  * <code>SHA1withRSA</code>. The algorithm name must be specified, as there is
+  * no default.</p>
+  *
+  * <p>Like other algorithm-based classes in Java Security, <code>Signature</code>
+  * provides implementation-independent algorithms, whereby a caller (application
+  * code) requests a particular signature algorithm and is handed back a properly
+  * initialized <code>Signature</code> object. It is also possible, if desired,
+  * to request a particular algorithm from a particular provider. See the
+  * <code>getInstance()</code> methods.</p>
+  *
+  * <p>Thus, there are two ways to request a <code>Signature</code> algorithm
+  * object: by specifying either just an algorithm name, or both an algorithm
+  * name and a package provider.</p>
+  *
+  * <p>If just an algorithm name is specified, the system will determine if there
+  * is an implementation of the algorithm requested available in the environment,
+  * and if there is more than one, if there is a preferred one.</p>
+  *
+  * <p>If both an algorithm name and a package provider are specified, the system
+  * will determine if there is an implementation of the algorithm in the package
+  * requested, and throw an exception if there is not.</p>
+  *
+  * <p>A <code>Signature</code> object can be used to generate and verify digital
+  * signatures.</p>
+  *
+  * <p>There are three phases to the use of a <code>Signature</code> object for
+  * either signing data or verifying a signature:</p>
+  *
+  * <ol>
+  * <li>Initialization, with either
+  *     <ul>
+  *     <li>a public key, which initializes the signature for verification
+  *         (see <code>initVerify()</code>), or</li>
+  *     <li>a private key (and optionally a Secure Random Number Generator),
+  *         which initializes the signature for signing (see
+  *         {@link #initSign(PrivateKey)} and {@link #initSign(PrivateKey, SecureRandom)}
+  *         ).</li>
+  *     </ul></li>
+  * <li>Updating<br/>
+  *     Depending on the type of initialization, this will update the bytes to
+  *     be signed or verified. See the update methods.<br/></li>
+  * <li>Signing or Verifying a signature on all updated bytes. See the
+  *     <code>sign()</code> methods and the <code>verify()</code> method.</li>
+  *  </ol>
+  *
+  * <p>Note that this class is abstract and extends from {@link SignatureSpi} for
+  * historical reasons. Application developers should only take notice of the
+  * methods defined in this <code>Signature</code> class; all the methods in the
+  * superclass are intended for cryptographic service providers who wish to
+  * supply their own implementations of digital signature algorithms.
+  *
+  * @author Mark Benvenuto  (ivymccough@worldnet.att.net)
+  */
+ public abstract class Signature extends SignatureSpi
+ {
+   /** Service name for signatures. */
+   private static final String SIGNATURE = "Signature";
+ 
+   /**
+    * Possible <code>state</code> value, signifying that this signature object
+    * has not yet been initialized.
+    */
+   protected static final int UNINITIALIZED = 0;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Possible <code>state</code> value, signifying that this signature object
+    * has been initialized for signing.
+    */
+   protected static final int SIGN = 2;
+ 
+   /**
+    * Possible <code>state</code> value, signifying that this signature object
+    * has been initialized for verification.
+    */
+   protected static final int VERIFY = 3;
+ 
+   /** Current state of this signature object. */
+   protected int state = UNINITIALIZED;
+ 
+   private String algorithm;
+   Provider provider;
+ 
+   /**
+    * Creates a <code>Signature</code> object for the specified algorithm.
+    *
+    * @param algorithm the standard string name of the algorithm. See Appendix A
+    * in the Java Cryptography Architecture API Specification &amp; Reference for
+    * information about standard algorithm names.
+    */
+   protected Signature(String algorithm)
+   {
+     this.algorithm = algorithm;
+     state = UNINITIALIZED;
+   }
+ 
+   /**
+    * Generates a <code>Signature</code> object that implements the specified
+    * digest algorithm. If the default provider package provides an
+    * implementation of the requested digest algorithm, an instance of
+    * <code>Signature</code> containing that implementation is returned. If the
+    * algorithm is not available in the default package, other packages are
+    * searched.
+    *
+    * @param algorithm the standard name of the algorithm requested. See Appendix
+    * A in the Java Cryptography Architecture API Specification &amp; Reference
+    * for information about standard algorithm names.
+    * @return the new Signature object.
+    * @throws NoSuchAlgorithmException if the algorithm is not available in the
+    * environment.
+    */
+   public static Signature getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+     for (int i = 0; i < p.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, p[i]);
+           }
+ 	catch (NoSuchAlgorithmException e)
+ 	  {
+ 	    // Ignored.
+ 	  }
+       }
+ 
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Generates a <code>Signature</code> object implementing the specified
+    * algorithm, as supplied from the specified provider, if such an algorithm
+    * is available from the provider.
+    *
+    * @param algorithm the name of the algorithm requested. See Appendix A in
+    * the Java Cryptography Architecture API Specification &amp; Reference for
+    * information about standard algorithm names.
+    * @param provider the name of the provider.
+    * @return the new <code>Signature</code> object.
+    * @throws NoSuchAlgorithmException if the algorithm is not available in the
+    * package supplied by the requested provider.
+    * @throws NoSuchProviderException if the provider is not available in the
+    * environment.
+    * @throws IllegalArgumentException if the provider name is <code>null</code>
+    * or empty.
+    * @see Provider
+    */
+   public static Signature getInstance(String algorithm, String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     if (provider == null || provider.length() == 0)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+ 
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Generates a <code>Signature</code> object implementing the specified
+    * algorithm, as supplied from the specified provider, if such an algorithm
+    * is available from the provider. Note: the provider doesn't have to be
+    * registered.
+    *
+    * @param algorithm the name of the algorithm requested. See Appendix A in
+    * the Java Cryptography Architecture API Specification &amp; Reference for
+    * information about standard algorithm names.
+    * @param provider the provider.
+    * @return the new <code>Signature</code> object.
+    * @throws NoSuchAlgorithmException if the <code>algorithm</code> is not
+    * available in the package supplied by the requested <code>provider</code>.
+    * @throws IllegalArgumentException if the <code>provider</code> is
+    * <code>null</code>.
+    * @since 1.4
+    * @see Provider
+    */
+   public static Signature getInstance(String algorithm, Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("Illegal provider");
+ 
+     Signature result = null;
+     Object o = null;
+     try
+       {
+         o = Engine.getInstance(SIGNATURE, algorithm, provider);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+ 
+     if (o instanceof SignatureSpi)
+       {
+         result = new DummySignature((SignatureSpi) o, algorithm);
+       }
+     else if (o instanceof Signature)
+       {
+         result = (Signature) o;
+         result.algorithm = algorithm;
+       }
+     else
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     result.provider = provider;
+     return result;
+   }
+ 
+   /**
+    * Returns the provider of this signature object.
+    *
+    * @return the provider of this signature object.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Initializes this object for verification. If this method is called again
+    * with a different argument, it negates the effect of this call.
+    *
+    * @param publicKey the public key of the identity whose signature is going
+    * to be verified.
+    * @throws InvalidKeyException if the key is invalid.
+    */
+   public final void initVerify(PublicKey publicKey) throws InvalidKeyException
+   {
+     state = VERIFY;
+     engineInitVerify(publicKey);
+   }
+ 
+   /**
+    * <p>Initializes this object for verification, using the public key from the
+    * given certificate.</p>
+    *
+    * <p>If the certificate is of type <i>X.509</i> and has a <i>key usage</i>
+    * extension field marked as <i>critical</i>, and the value of the <i>key
+    * usage</i> extension field implies that the public key in the certificate
+    * and its corresponding private key are not supposed to be used for digital
+    * signatures, an {@link InvalidKeyException} is thrown.</p>
+    *
+    * @param certificate the certificate of the identity whose signature is
+    * going to be verified.
+    * @throws InvalidKeyException if the public key in the certificate is not
+    * encoded properly or does not include required parameter information or
+    * cannot be used for digital signature purposes.
+    */
+   public final void initVerify(Certificate certificate)
+     throws InvalidKeyException
+   {
+     state = VERIFY;
+     if (certificate.getType().equals("X509"))
+       {
+         X509Certificate cert = (X509Certificate) certificate;
+         boolean[]array = cert.getKeyUsage();
+         if (array != null && array[0] == false)
+           throw new InvalidKeyException(
+               "KeyUsage of this Certificate indicates it cannot be used for digital signing");
+       }
+     this.initVerify(certificate.getPublicKey());
+   }
+ 
+   /**
+    * Initialize this object for signing. If this method is called again with a
+    * different argument, it negates the effect of this call.
+    *
+    * @param privateKey the private key of the identity whose signature is going
+    * to be generated.
+    * @throws InvalidKeyException if the key is invalid.
+    */
+   public final void initSign(PrivateKey privateKey) throws InvalidKeyException
+   {
+     state = SIGN;
+     engineInitSign(privateKey);
+   }
+ 
+   /**
+    * Initialize this object for signing. If this method is called again with a
+    * different argument, it negates the effect of this call.
+    *
+    * @param privateKey the private key of the identity whose signature is going
+    * to be generated.
+    * @param random the source of randomness for this signature.
+    * @throws InvalidKeyException if the key is invalid.
+    */
+   public final void initSign(PrivateKey privateKey, SecureRandom random)
+     throws InvalidKeyException
+   {
+     state = SIGN;
+     engineInitSign(privateKey, random);
+   }
+ 
+   /**
+    * <p>Returns the signature bytes of all the data updated. The format of the
+    * signature depends on the underlying signature scheme.</p>
+    *
+    * <p>A call to this method resets this signature object to the state it was
+    * in when previously initialized for signing via a call to
+    * <code>initSign(PrivateKey)</code>. That is, the object is reset and
+    * available to generate another signature from the same signer, if desired,
+    * via new calls to <code>update()</code> and <code>sign()</code>.</p>
+    *
+    * @return the signature bytes of the signing operation's result.
+    * @throws SignatureException if this signature object is not initialized
+    * properly.
+    */
+   public final byte[] sign() throws SignatureException
+   {
+     if (state == SIGN)
+       return engineSign();
+     else
+       throw new SignatureException();
+   }
+ 
+   /**
+    * <p>Finishes the signature operation and stores the resulting signature
+    * bytes in the provided buffer <code>outbuf</code>, starting at <code>offset
+    * </code>. The format of the signature depends on the underlying signature
+    * scheme.</p>
+    *
+    * <p>This signature object is reset to its initial state (the state it was
+    * in after a call to one of the <code>initSign()</code> methods) and can be
+    * reused to generate further signatures with the same private key.</p>
+    *
+    * @param outbuf buffer for the signature result.
+    * @param offset offset into outbuf where the signature is stored.
+    * @param len number of bytes within outbuf allotted for the signature.
+    * @return the number of bytes placed into outbuf.
+    * @throws SignatureException if an error occurs or len is less than the
+    * actual signature length.
+    * @since 1.2
+    */
+   public final int sign(byte[] outbuf, int offset, int len)
+     throws SignatureException
+   {
+     if (state == SIGN)
+       return engineSign(outbuf, offset, len);
+     else
+       throw new SignatureException();
+   }
+ 
+   /**
+    * <p>Verifies the passed-in signature.</p>
+    *
+    * <p>A call to this method resets this signature object to the state it was
+    * in when previously initialized for verification via a call to
+    * <code>initVerify(PublicKey)</code>. That is, the object is reset and
+    * available to verify another signature from the identity whose public key
+    * was specified in the call to <code>initVerify()</code>.</p>
+    *
+    * @param signature the signature bytes to be verified.
+    * @return <code>true</code> if the signature was verified, <code>false</code>
+    * if not.
+    * @throws SignatureException if this signature object is not initialized
+    * properly, or the passed-in signature is improperly encoded or of the wrong
+    * type, etc.
+    */
+   public final boolean verify(byte[]signature) throws SignatureException
+   {
+     if (state == VERIFY)
+       return engineVerify(signature);
+     else
+       throw new SignatureException();
+   }
+ 
+   /**
+    * <p>Verifies the passed-in <code>signature</code> in the specified array of
+    * bytes, starting at the specified <code>offset</code>.</p>
+    *
+    * <p>A call to this method resets this signature object to the state it was
+    * in when previously initialized for verification via a call to
+    * <code>initVerify(PublicKey)</code>. That is, the object is reset and
+    * available to verify another signature from the identity whose public key
+    * was specified in the call to <code>initVerify()</code>.</p>
+    *
+    * @param signature the signature bytes to be verified.
+    * @param offset the offset to start from in the array of bytes.
+    * @param length the number of bytes to use, starting at offset.
+    * @return <code>true</code> if the signature was verified, <code>false</code>
+    * if not.
+    * @throws SignatureException if this signature object is not initialized
+    * properly, or the passed-in <code>signature</code> is improperly encoded or
+    * of the wrong type, etc.
+    * @throws IllegalArgumentException if the <code>signature</code> byte array
+    * is <code>null</code>, or the <code>offset</code> or <code>length</code> is
+    * less than <code>0</code>, or the sum of the <code>offset</code> and
+    * <code>length</code> is greater than the length of the <code>signature</code>
+    * byte array.
+    */
+   public final boolean verify(byte[] signature, int offset, int length)
+     throws SignatureException
+   {
+     if (state != VERIFY)
+       throw new SignatureException("illegal state");
+ 
+     if (signature == null)
+       throw new IllegalArgumentException("signature is null");
+     if (offset < 0)
+       throw new IllegalArgumentException("offset is less than 0");
+     if (length < 0)
+       throw new IllegalArgumentException("length is less than 0");
+     if (offset + length < signature.length)
+       throw new IllegalArgumentException("range is out of bounds");
+ 
+     return engineVerify(signature, offset, length);
+   }
+ 
+   /**
+    * Updates the data to be signed or verified by a byte.
+    *
+    * @param b the byte to use for the update.
+    * @throws SignatureException if this signature object is not initialized
+    * properly.
+    */
+   public final void update(byte b) throws SignatureException
+   {
+     if (state != UNINITIALIZED)
+       engineUpdate(b);
+     else
+       throw new SignatureException();
+   }
+ 
+   /**
+    * Updates the data to be signed or verified, using the specified array of
+    * bytes.
+    *
+    * @param data the byte array to use for the update.
+    * @throws SignatureException if this signature object is not initialized
+    * properly.
+    */
+   public final void update(byte[]data) throws SignatureException
+   {
+     if (state != UNINITIALIZED)
+       engineUpdate(data, 0, data.length);
+     else
+       throw new SignatureException();
+   }
+ 
+   /**
+    * Updates the data to be signed or verified, using the specified array of
+    * bytes, starting at the specified offset.
+    *
+    * @param data the array of bytes.
+    * @param off the offset to start from in the array of bytes.
+    * @param len the number of bytes to use, starting at offset.
+    * @throws SignatureException if this signature object is not initialized
+    * properly.
+    */
+   public final void update(byte[]data, int off, int len)
+     throws SignatureException
+   {
+     if (state != UNINITIALIZED)
+       engineUpdate(data, off, len);
+     else
+       throw new SignatureException();
+   }
+ 
+   /**
+    * Returns the name of the algorithm for this signature object.
+    *
+    * @return the name of the algorithm for this signature object.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Returns a string representation of this signature object, providing
+    * information that includes the state of the object and the name of the
+    * algorithm used.
+    *
+    * @return a string representation of this signature object.
+    */
+   public String toString()
+   {
+     return (algorithm + " Signature");
+   }
+ 
+   /**
+    * Sets the specified algorithm parameter to the specified value. This method
+    * supplies a general-purpose mechanism through which it is possible to set
+    * the various parameters of this object. A parameter may be any settable
+    * parameter for the algorithm, such as a parameter size, or a source of
+    * random bits for signature generation (if appropriate), or an indication of
+    * whether or not to perform a specific but optional computation. A uniform
+    * algorithm-specific naming scheme for each parameter is desirable but left
+    * unspecified at this time.
+    *
+    * @param param the string identifier of the parameter.
+    * @param value the parameter value.
+    * @throws InvalidParameterException if param is an invalid parameter for this
+    * signature algorithm engine, the parameter is already set and cannot be set
+    * again, a security exception occurs, and so on.
+    * @see #getParameter(String)
+    * @deprecated Use setParameter(AlgorithmParameterSpec).
+    */
+   public final void setParameter(String param, Object value)
+     throws InvalidParameterException
+   {
+     engineSetParameter(param, value);
+   }
+ 
+   /**
+    * Initializes this signature engine with the specified parameter set.
+    *
+    * @param params the parameters.
+    * @throws InvalidAlgorithmParameterException if the given parameters are
+    * inappropriate for this signature engine.
+    * @see #getParameters()
+    */
+   public final void setParameter(AlgorithmParameterSpec params)
+     throws InvalidAlgorithmParameterException
+   {
+     engineSetParameter(params);
+   }
+ 
+   /**
+    * <p>Returns the parameters used with this signature object.</p>
+    *
+    * <p>The returned parameters may be the same that were used to initialize
+    * this signature, or may contain a combination of default and randomly
+    * generated parameter values used by the underlying signature implementation
+    * if this signature requires algorithm parameters but was not initialized
+    * with any.
+    *
+    * @return the parameters used with this signature, or <code>null</code> if
+    * this signature does not use any parameters.
+    * @see #setParameter(AlgorithmParameterSpec)
+    */
+   public final AlgorithmParameters getParameters()
+   {
+     return engineGetParameters();
+   }
+ 
+   /**
+    * Gets the value of the specified algorithm parameter. This method supplies
+    * a general-purpose mechanism through which it is possible to get the various
+    * parameters of this object. A parameter may be any settable parameter for
+    * the algorithm, such as a parameter size, or a source of random bits for
+    * signature generation (if appropriate), or an indication of whether or not
+    * to perform a specific but optional computation. A uniform
+    * algorithm-specific naming scheme for each parameter is desirable but left
+    * unspecified at this time.
+    *
+    * @param param the string name of the parameter.
+    * @return the object that represents the parameter value, or null if there
+    * is none.
+    * @throws InvalidParameterException if param is an invalid parameter for this
+    * engine, or another exception occurs while trying to get this parameter.
+    * @see #setParameter(String, Object)
+    * @deprecated
+    */
+   public final Object getParameter(String param)
+     throws InvalidParameterException
+   {
+     return engineGetParameter(param);
+   }
+ 
+   /**
+    * Returns a clone if the implementation is cloneable.
+    *
+    * @return a clone if the implementation is cloneable.
+    * @throws CloneNotSupportedException if this is called on an implementation
+    * that does not support {@link Cloneable}.
+    */
+   public Object clone() throws CloneNotSupportedException
+   {
+     return super.clone();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/SignatureException.java gcc-4.1.0/libjava/classpath/java/security/SignatureException.java
*** gcc-4.0.2/libjava/classpath/java/security/SignatureException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/SignatureException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,70 ----
+ /* SignatureException.java -- Generic error in signature
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception is thrown when a problem is encountered with a
+  * digital signature.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class SignatureException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 7509989324975124438L;
+ 
+   /**
+    * Create an instance with no descriptive error message.
+    */
+   public SignatureException()
+   {
+   }
+ 
+   /**
+    * Create an instance with a descriptive error message.
+    *
+    * @param msg the message
+    */
+   public SignatureException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/SignatureSpi.java gcc-4.1.0/libjava/classpath/java/security/SignatureSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/SignatureSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/SignatureSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,302 ----
+ /* SignatureSpi.java --- Signature Service Provider Interface
+    Copyright (C) 1999, 2003, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * <p>This class defines the <i>Service Provider Interface (SPI)</i> for the
+  * {@link Signature} class, which is used to provide the functionality of a
+  * digital signature algorithm. Digital signatures are used for authentication
+  * and integrity assurance of digital data.</p>
+  *
+  * <p>All the abstract methods in this class must be implemented by each
+  * cryptographic service provider who wishes to supply the implementation of a
+  * particular signature algorithm.
+  *
+  * @author Mark Benvenuto (ivymccough@worldnet.att.net)
+  * @since 1.2
+  * @see Signature
+  */
+ public abstract class SignatureSpi
+ {
+   /** Application-specified source of randomness. */
+   protected SecureRandom appRandom;
+ 
+   public SignatureSpi()
+   {
+     appRandom = null;
+   }
+ 
+   /**
+    * Initializes this signature object with the specified public key for
+    * verification operations.
+    *
+    * @param publicKey the public key of the identity whose signature is going
+    * to be verified.
+    * @throws InvalidKeyException if the key is improperly encoded, parameters
+    * are missing, and so on.
+    */
+   protected abstract void engineInitVerify(PublicKey publicKey)
+     throws InvalidKeyException;
+ 
+   /**
+    * Initializes this signature object with the specified private key for
+    * signing operations.
+    *
+    * @param privateKey the private key of the identity whose signature will be
+    * generated.
+    * @throws InvalidKeyException if the key is improperly encoded, parameters
+    * are missing, and so on.
+    */
+   protected abstract void engineInitSign(PrivateKey privateKey)
+     throws InvalidKeyException;
+ 
+   /**
+    * <p>Initializes this signature object with the specified private key and
+    * source of randomness for signing operations.</p>
+    *
+    * <p>This concrete method has been added to this previously-defined abstract
+    * class. (For backwards compatibility, it cannot be abstract.)</p>
+    *
+    * @param privateKey the private key of the identity whose signature will be
+    * generated.
+    * @param random the source of randomness.
+    * @throws InvalidKeyException if the key is improperly encoded, parameters
+    * are missing, and so on.
+    * @since 1.2
+    */
+   protected void engineInitSign(PrivateKey privateKey, SecureRandom random)
+     throws InvalidKeyException
+   {
+     appRandom = random;
+     engineInitSign(privateKey);
+   }
+ 
+   /**
+    * Updates the data to be signed or verified using the specified byte.
+    *
+    * @param b the byte to use for the update.
+    * @throws SignatureException if the engine is not initialized properly.
+    */
+   protected abstract void engineUpdate(byte b) throws SignatureException;
+ 
+   /**
+    * Updates the data to be signed or verified, using the specified array of
+    * bytes, starting at the specified offset.
+    *
+    * @param b the array of bytes.
+    * @param off the offset to start from in the array of bytes.
+    * @param len the number of bytes to use, starting at offset.
+    * @throws SignatureException if the engine is not initialized properly.
+    */
+   protected abstract void engineUpdate(byte[] b, int off, int len)
+     throws SignatureException;
+ 
+   /**
+    * Returns the signature bytes of all the data updated so far. The format of
+    * the signature depends on the underlying signature scheme.
+    *
+    * @return the signature bytes of the signing operation's result.
+    * @throws SignatureException if the engine is not initialized properly.
+    */
+   protected abstract byte[] engineSign() throws SignatureException;
+ 
+   /**
+    * <p>Finishes this signature operation and stores the resulting signature
+    * bytes in the provided buffer <code>outbuf</code>, starting at <code>offset
+    * </code>. The format of the signature depends on the underlying signature
+    * scheme.</p>
+    *
+    * <p>The signature implementation is reset to its initial state (the state it
+    * was in after a call to one of the <code>engineInitSign()</code> methods)
+    * and can be reused to generate further signatures with the same private key.
+    * This method should be abstract, but we leave it concrete for binary
+    * compatibility. Knowledgeable providers should override this method.</p>
+    *
+    * @param outbuf buffer for the signature result.
+    * @param offset offset into outbuf where the signature is stored.
+    * @param len number of bytes within outbuf allotted for the signature. Both
+    * this default implementation and the <b>GNU</b> provider do not return
+    * partial digests. If the value of this parameter is less than the actual
+    * signature length, this method will throw a {@link SignatureException}. This
+    * parameter is ignored if its value is greater than or equal to the actual
+    * signature length.
+    * @return the number of bytes placed into <code>outbuf</code>.
+    * @throws SignatureException if an error occurs or len is less than the
+    * actual signature length.
+    * @since 1.2
+    */
+   protected int engineSign(byte[] outbuf, int offset, int len)
+     throws SignatureException
+   {
+     byte[] tmp = engineSign();
+     if (tmp.length > len)
+       throw new SignatureException("Invalid Length");
+ 
+     System.arraycopy(outbuf, offset, tmp, 0, tmp.length);
+     return tmp.length;
+   }
+ 
+   /**
+    * Verifies the passed-in signature.
+    *
+    * @param sigBytes the signature bytes to be verified.
+    * @return <code>true</code> if the signature was verified, <code>false</code>
+    * if not.
+    * @throws SignatureException if the engine is not initialized properly, or
+    * the passed-in signature is improperly encoded or of the wrong type, etc.
+    */
+   protected abstract boolean engineVerify(byte[] sigBytes)
+     throws SignatureException;
+ 
+   /**
+    * <p>Verifies the passed-in <code>signature</code> in the specified array of
+    * bytes, starting at the specified <code>offset</code>.</p>
+    *
+    * <p>Note: Subclasses should overwrite the default implementation.</p>
+    *
+    * @param sigBytes the signature bytes to be verified.
+    * @param offset the offset to start from in the array of bytes.
+    * @param length the number of bytes to use, starting at offset.
+    * @return <code>true</code> if the signature was verified, <code>false</code>
+    * if not.
+    * @throws SignatureException if the engine is not initialized properly, or
+    * the passed-in <code>signature</code> is improperly encoded or of the wrong
+    * type, etc.
+    */
+   protected boolean engineVerify(byte[] sigBytes, int offset, int length)
+     throws SignatureException
+   {
+     byte[] tmp = new byte[length];
+     System.arraycopy(sigBytes, offset, tmp, 0, length);
+     return engineVerify(tmp);
+   }
+ 
+   /**
+    * Sets the specified algorithm parameter to the specified value. This method
+    * supplies a general-purpose mechanism through which it is possible to set
+    * the various parameters of this object. A parameter may be any settable
+    * parameter for the algorithm, such as a parameter size, or a source of
+    * random bits for signature generation (if appropriate), or an indication of
+    * whether or not to perform a specific but optional computation. A uniform
+    * algorithm-specific naming scheme for each parameter is desirable but left
+    * unspecified at this time.
+    *
+    * @param param the string identifier of the parameter.
+    * @param value the parameter value.
+    * @throws InvalidParameterException if <code>param</code> is an invalid
+    * parameter for this signature algorithm engine, the parameter is already set
+    * and cannot be set again, a security exception occurs, and so on.
+    * @deprecated Replaced by engineSetParameter(AlgorithmParameterSpec).
+    */
+   protected abstract void engineSetParameter(String param, Object value)
+     throws InvalidParameterException;
+ 
+   /**
+    * This method is overridden by providers to initialize this signature engine
+    * with the specified parameter set.
+    *
+    * @param params the parameters.
+    * @throws UnsupportedOperationException if this method is not overridden by
+    * a provider.
+    * @throws InvalidAlgorithmParameterException if this method is overridden by
+    * a provider and the the given parameters are inappropriate for this
+    * signature engine.
+    */
+   protected void engineSetParameter(AlgorithmParameterSpec params)
+     throws InvalidAlgorithmParameterException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * <p>This method is overridden by providers to return the parameters used
+    * with this signature engine, or <code>null</code> if this signature engine
+    * does not use any parameters.</p>
+    *
+    * <p>The returned parameters may be the same that were used to initialize
+    * this signature engine, or may contain a combination of default and randomly
+    * generated parameter values used by the underlying signature implementation
+    * if this signature engine requires algorithm parameters but was not
+    * initialized with any.</p>
+    *
+    * @return the parameters used with this signature engine, or <code>null</code>
+    * if this signature engine does not use any parameters.
+    * @throws UnsupportedOperationException if this method is not overridden by
+    * a provider.
+    */
+   protected AlgorithmParameters engineGetParameters()
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Gets the value of the specified algorithm parameter. This method supplies
+    * a general-purpose mechanism through which it is possible to get the various
+    * parameters of this object. A parameter may be any settable parameter for
+    * the algorithm, such as a parameter size, or a source of random bits for
+    * signature generation (if appropriate), or an indication of whether or not
+    * to perform a specific but optional computation. A uniform algorithm-specific
+    * naming scheme for each parameter is desirable but left unspecified at this
+    * time.
+    *
+    * @param param the string name of the parameter.
+    * @return the object that represents the parameter value, or <code>null</code>
+    * if there is none.
+    * @throws InvalidParameterException if <code>param</code> is an invalid
+    * parameter for this engine, or another exception occurs while trying to get
+    * this parameter.
+    * @deprecated
+    */
+   protected abstract Object engineGetParameter(String param)
+     throws InvalidParameterException;
+ 
+   /**
+    * Returns a clone if the implementation is cloneable.
+    *
+    * @return a clone if the implementation is cloneable.
+    * @throws CloneNotSupportedException if this is called on an implementation
+    * that does not support {@link Cloneable}.
+    * @see Cloneable
+    */
+   public Object clone() throws CloneNotSupportedException
+   {
+     return super.clone();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/SignedObject.java gcc-4.1.0/libjava/classpath/java/security/SignedObject.java
*** gcc-4.0.2/libjava/classpath/java/security/SignedObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/SignedObject.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,240 ----
+ /* SignedObject.java --- Signed Object Class
+    Copyright (C) 1999, 2003, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.ObjectInput;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * <p><code>SignedObject</code> is a class for the purpose of creating authentic
+  * runtime objects whose integrity cannot be compromised without being detected.
+  * </p>
+  *
+  * <p>More specifically, a <code>SignedObject</code> contains another
+  * {@link Serializable} object, the (to-be-)signed object and its signature.</p>
+  *
+  * <p>The signed object is a <i>"deep copy"</i> (in serialized form) of an
+  * original object. Once the copy is made, further manipulation of the original
+  * object has no side effect on the copy.</p>
+  *
+  * <p>The underlying signing algorithm is designated by the {@link Signature}
+  * object passed to the constructor and the <code>verify()</code> method. A
+  * typical usage for signing is the following:</p>
+  *
+  * <pre>
+  * Signature signingEngine = Signature.getInstance(algorithm, provider);
+  * SignedObject so = new SignedObject(myobject, signingKey, signingEngine);
+  * </pre>
+  *
+  * <p>A typical usage for verification is the following (having received
+  * <code>SignedObject</code> so):</p>
+  *
+  * <pre>
+  * Signature verificationEngine = Signature.getInstance(algorithm, provider);
+  * if (so.verify(publickey, verificationEngine))
+  *   try
+  *     {
+  *       Object myobj = so.getObject();
+  *     }
+  *   catch (ClassNotFoundException ignored) {};
+  * </pre>
+  *
+  * <p>Several points are worth noting. First, there is no need to initialize the
+  * signing or verification engine, as it will be re-initialized inside the
+  * constructor and the <code>verify()</code> method. Secondly, for verification
+  * to succeed, the specified public key must be the public key corresponding to
+  * the private key used to generate the <code>SignedObject</code>.</p>
+  *
+  * <p>More importantly, for flexibility reasons, the <code>constructor</code>
+  * and <code>verify()</code> method allow for customized signature engines,
+  * which can implement signature algorithms that are not installed formally as
+  * part of a crypto provider. However, it is crucial that the programmer writing
+  * the verifier code be aware what {@link Signature} engine is being used, as
+  * its own implementation of the <code>verify()</code> method is invoked to
+  * verify a signature. In other words, a malicious {@link Signature} may choose
+  * to always return <code>true</code> on verification in an attempt to bypass a
+  * security check.</p>
+  *
+  * <p>The signature algorithm can be, among others, the NIST standard <i>DSS</i>,
+  * using <i>DSA</i> and <i>SHA-1</i>. The algorithm is specified using the same
+  * convention as that for signatures. The <i>DSA</i> algorithm using the
+  * <i>SHA-1</i> message digest algorithm can be specified, for example, as
+  * <code>"SHA/DSA"</code> or <code>"SHA-1/DSA"</code> (they are equivalent). In
+  * the case of <i>RSA</i>, there are multiple choices for the message digest
+  * algorithm, so the signing algorithm could be specified as, for example,
+  * <code>"MD2/RSA"</code>, <code>"MD5/RSA"</code> or <code>"SHA-1/RSA"</code>.
+  * The algorithm name must be specified, as there is no default.</p>
+  *
+  * <p>The name of the Cryptography Package Provider is designated also by the
+  * {@link Signature} parameter to the <code>constructor</code> and the <code>
+  * verify()</code> method. If the provider is not specified, the default
+  * provider is used. Each installation can be configured to use a particular
+  * provider as default.</p>
+  *
+  * <p>Potential applications of <code>SignedObject</code> include:</p>
+  *
+  * <ul>
+  *  <li>It can be used internally to any Java runtime as an unforgeable
+  *  authorization token -- one that can be passed around without the fear that
+  *  the token can be maliciously modified without being detected.</li>
+  *  <li>It can be used to sign and serialize data/object for storage outside the
+  *  Java runtime (e.g., storing critical access control data on disk).</li>
+  *  <li>Nested <i>SignedObjects</i> can be used to construct a logical sequence
+  *  of signatures, resembling a chain of authorization and delegation.</li>
+  * </ul>
+  *
+  * @author Mark Benvenuto (ivymccough@worldnet.att.net)
+  * @since 1.2
+  * @see Signature
+  */
+ public final class SignedObject implements Serializable
+ {
+   private static final long serialVersionUID = 720502720485447167L;
+ 
+   /** @serial */
+   private byte[] content;
+   /** @serial */
+   private byte[] signature;
+   /** @serial */
+   private String thealgorithm;
+ 
+   /**
+    * Constructs a <code>SignedObject</code> from any {@link Serializable}
+    * object. The given object is signed with the given signing key, using the
+    * designated signature engine.
+    *
+    * @param object the object to be signed.
+    * @param signingKey the private key for signing.
+    * @param signingEngine the signature signing engine.
+    * @throws IOException if an error occurs during serialization.
+    * @throws InvalidKeyException if the key is invalid.
+    * @throws SignatureException if signing fails.
+    */
+   public SignedObject(Serializable object, PrivateKey signingKey,
+ 		      Signature signingEngine)
+     throws IOException, InvalidKeyException, SignatureException
+   {
+     thealgorithm = signingEngine.getAlgorithm();
+ 
+     ByteArrayOutputStream ostream = new ByteArrayOutputStream();
+     ObjectOutputStream p = new ObjectOutputStream(ostream);
+     p.writeObject(object);
+     p.flush();
+     p.close();
+ 
+     content = ostream.toByteArray();
+ 
+     signingEngine.initSign(signingKey);
+     signingEngine.update(content);
+     signature = signingEngine.sign();
+   }
+ 
+   /**
+    * Retrieves the encapsulated object. The encapsulated object is de-serialized
+    * before it is returned.
+    *
+    * @return the encapsulated object.
+    * @throws IOException if an error occurs during de-serialization.
+    * @throws ClassNotFoundException if an error occurs during de-serialization.
+    */
+   public Object getObject() throws IOException, ClassNotFoundException
+   {
+     ByteArrayInputStream bais = new ByteArrayInputStream(content);
+     ObjectInput oi = new ObjectInputStream(bais);
+     Object obj = oi.readObject();
+     oi.close();
+     bais.close();
+ 
+     return obj;
+   }
+ 
+   /**
+    * Retrieves the signature on the signed object, in the form of a byte array.
+    *
+    * @return a copy of the signature.
+    */
+   public byte[] getSignature()
+   {
+     return (byte[]) signature.clone();
+ 
+   }
+ 
+   /**
+    * Retrieves the name of the signature algorithm.
+    *
+    * @return the signature algorithm name.
+    */
+   public String getAlgorithm()
+   {
+     return thealgorithm;
+   }
+ 
+   /**
+    * Verifies that the signature in this <code>SignedObject</code> is the valid
+    * signature for the object stored inside, with the given verification key,
+    * using the designated verification engine.
+    *
+    * @param verificationKey the public key for verification.
+    * @param verificationEngine the signature verification engine.
+    * @return <code>true</code> if the signature is valid, <code>false</code>
+    * otherwise.
+    * @throws SignatureException if signature verification failed.
+    * @throws InvalidKeyException if the verification key is invalid.
+    */
+   public boolean verify(PublicKey verificationKey, Signature verificationEngine)
+     throws InvalidKeyException, SignatureException
+   {
+     verificationEngine.initVerify(verificationKey);
+     verificationEngine.update(content);
+     return verificationEngine.verify(signature);
+   }
+ 
+   /** Called to restore the state of the SignedObject from a stream. */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     content = (byte[]) content.clone();
+     signature = (byte[]) signature.clone();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/Signer.java gcc-4.1.0/libjava/classpath/java/security/Signer.java
*** gcc-4.0.2/libjava/classpath/java/security/Signer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/Signer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,164 ----
+ /* Signer.java --- Signer Class
+    Copyright (C) 1999, 2003, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * <p>This class is used to represent an {@link Identity} that can also
+  * digitally sign data.</p>
+  *
+  * <p>The management of a signer's private keys is an important and sensitive
+  * issue that should be handled by subclasses as appropriate to their intended
+  * use.</p>
+  *
+  * @author Mark Benvenuto (ivymccough@worldnet.att.net)
+  * @deprecated This class is no longer used. Its functionality has been replaced
+  * by <code>java.security.KeyStore</code>, the <code>java.security.cert</code>
+  * package, and <code>java.security.Principal</code>.
+  */
+ public abstract class Signer extends Identity
+ {
+   private static final long serialVersionUID = -1763464102261361480L;
+   private PrivateKey privateKey = null;
+ 
+   /**
+    * Creates a <code>Signer</code>. This constructor should only be used for
+    * serialization.
+    */
+   protected Signer()
+   {
+   }
+ 
+   /**
+    * Creates a <code>Signer</code> with the specified identity name.
+    *
+    * @param name the identity name.
+    */
+   public Signer(String name)
+   {
+     super(name);
+   }
+ 
+   /**
+    * Creates a <code>Signer</code> with the specified identity name and scope.
+    *
+    * @param name the identity name.
+    * @param scope the scope of the identity.
+    * @throws KeyManagementException if there is already an identity with the
+    * same name in the scope.
+    */
+   public Signer(String name, IdentityScope scope) throws KeyManagementException
+   {
+     super(name, scope);
+   }
+ 
+   /**
+    * <p>Returns this signer's private key.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with <code>"getSignerPrivateKey"</code> as its
+    * argument to see if it's ok to return the private key.</p>
+    *
+    * @return this signer's private key, or <code>null</code> if the private key
+    * has not yet been set.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkSecurityAccess()</code> method doesn't allow returning the
+    * private key.
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public PrivateKey getPrivateKey()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("getSignerPrivateKey");
+ 
+     return privateKey;
+   }
+ 
+   /**
+    * <p>Sets the key pair (public key and private key) for this signer.</p>
+    *
+    * <p>First, if there is a security manager, its <code>checkSecurityAccess()
+    * </code> method is called with <code>"setSignerKeyPair"</code> as its
+    * argument to see if it's ok to set the key pair.</p>
+    *
+    * @param pair an initialized key pair.
+    * @throws InvalidParameterException if the key pair is not properly
+    * initialized.
+    * @throws KeyException if the key pair cannot be set for any other reason.
+    * @throws SecurityException if a security manager exists and its
+    * <code>checkSecurityAccess()</code> method doesn't allow setting the key
+    * pair.
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public final void setKeyPair(KeyPair pair)
+     throws InvalidParameterException, KeyException
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSecurityAccess("setSignerKeyPair");
+ 
+     try
+       {
+         if (pair.getPublic() != null)
+           setPublicKey(pair.getPublic());
+         else
+           throw new InvalidParameterException();
+ 
+       }
+     catch (KeyManagementException kme)
+       {
+         throw new KeyException();
+       }
+ 
+     if (pair.getPrivate() != null)
+         privateKey = pair.getPrivate();
+     else
+       throw new InvalidParameterException();
+   }
+ 
+   /**
+    * Returns a string of information about the signer.
+    *
+    * @return a string of information about the signer.
+    * @see SecurityManager#checkSecurityAccess(String)
+    */
+   public String toString()
+   {
+     return (getName() + ": " + privateKey);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/UnrecoverableKeyException.java gcc-4.1.0/libjava/classpath/java/security/UnrecoverableKeyException.java
*** gcc-4.0.2/libjava/classpath/java/security/UnrecoverableKeyException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/UnrecoverableKeyException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* UnrecoverableKeyException.java -- Cannot recover a key from the key store
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security;
+ 
+ /**
+  * This exception is thrown when a key cannot be recovered from the key
+  * store.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class UnrecoverableKeyException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 7275063078190151277L;
+ 
+   /**
+    * Create an instance with no descriptive error message.
+    */
+   public UnrecoverableKeyException()
+   {
+   }
+ 
+   /**
+    * Create an instance with a descriptive error message.
+    *
+    * @param msg the descriptive error message
+    */
+   public UnrecoverableKeyException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/UnresolvedPermission.java gcc-4.1.0/libjava/classpath/java/security/UnresolvedPermission.java
*** gcc-4.0.2/libjava/classpath/java/security/UnresolvedPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/UnresolvedPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,304 ----
+ /* UnresolvedPermission.java -- Placeholder for unresolved permissions
+    Copyright (C) 1998, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security;
+ 
+ // All uses of Certificate in this file refer to the one in the listed
+ // package, not this one.
+ import java.security.cert.Certificate;
+ import java.util.Arrays;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.NoSuchElementException;
+ import java.util.Vector;
+ 
+ /**
+  * This class is used to hold instances of all permissions that cannot
+  * be resolved to available permission classes when the security
+  * <code>Policy</code> object is instantiated.  This may happen when the
+  * necessary security class has not yet been downloaded from the network.
+  *
+  * <p>Instances of this class are re-resolved when
+  * <code>AccessController</code> check is done.  At that time, a scan is
+  * made of all existing <code>UnresolvedPermission</code> objects and they
+  * are converted to objects of the appropriate permission type if the class
+  * for that type is then available.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Permission
+  * @see Permissions
+  * @see PermissionCollection
+  * @see Policy
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public final class UnresolvedPermission extends Permission
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -4821973115467008846L;
+ 
+   /**
+    * The list of actions associated with this permission object.
+    *
+    * @serial the permission actions
+    */
+   private final String actions;
+ 
+   /**
+    * The list of <code>Certificates</code> associated with this object.
+    */
+   private final transient Certificate[] certs;
+ 
+   /**
+    * The name of the class this object should be resolved to.
+    *
+    * @serial the fully-qualified classname of the resolved type
+    */
+   // Package visible for use by UnresolvedPermissionCollection.
+   final String type;
+ 
+   /**
+    * The name of the permission.
+    *
+    * @serial the permission name
+    */
+   private final String name;
+ 
+   /**
+    * Create a new instance with all the information necessary to resolve it
+    * to an instance of the proper class at a future time.
+    *
+    * @param type the fully-qualified name of the class of this permission
+    * @param name the name of this permission
+    * @param actions the action list for this permission
+    * @param certs the list of certificates that sign this permission
+    */
+   public UnresolvedPermission(String type, String name, String actions,
+                               Certificate[] certs)
+   {
+     super(name);
+     this.name = name;
+     this.type = type;
+     this.actions = actions;
+     this.certs = certs;
+   }
+ 
+   /**
+    * This method returns <code>false</code> always to indicate that this
+    * permission does not imply the specified permission.  An
+    * <code>UnresolvedPermission</code> never grants any permissions.
+    *
+    * @param perm the <code>Permission</code> object to test
+    * @return false; until a permission is resolved, it implies nothing
+    */
+   public boolean implies(Permission perm)
+   {
+     return false;
+   }
+ 
+   /**
+    * This method tests this permission for equality against the specified
+    * <code>Object</code>. This will be true if and only if the following
+    * conditions are met:<ul>
+    * <li>The specified <code>Object</code> is an UnresolvedPermission</li>
+    * <li>The specified permission has the same type (i.e., desired class name)
+    *     as this permission.</li>
+    * <li>The specified permission has the same name as this one.</li>
+    * <li>The specified permissoin has the same action list as this one.</li>
+    * <li>The specified permission has the same certificate list as this
+    *     one.</li>
+    * </ul>
+    *
+    * @param obj the <code>Object</code> to test for equality
+    * @return true if the specified object is equal to this one
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof UnresolvedPermission))
+       return (false);
+     UnresolvedPermission up = (UnresolvedPermission) obj;
+     return up.name.equals(name) && up.actions.equals(actions)
+       && up.type.equals(type) && Arrays.equals(up.certs, certs);
+   }
+ 
+   /**
+    * Returns a hash code value for this object. Following the lead of
+    * Permission, this returns the hashcode of the permission name.
+    *
+    * @return A hash value
+    */
+   public int hashCode()
+   {
+     return name.hashCode();
+   }
+ 
+   /**
+    * This method returns the list of actions associated with this
+    * permission.
+    *
+    * @return the action list
+    */
+   public String getActions()
+   {
+     return actions;
+   }
+ 
+   /**
+    * This method returns a <code>String</code> representation of this
+    * class.  The format is: '(unresolved "ClassName "name" "actions")'
+    *
+    * @return  <code>String</code> representation of this object
+    */
+   public String toString()
+   {
+     return "(unresolved " + type + ' ' + name + ' ' + actions + ')';
+   }
+ 
+   /**
+    * This class returns a <code>PermissionCollection</code> object that can
+    * be used to store instances of <code>UnresolvedPermission</code>.
+    *
+    * @return a new <code>PermissionCollection</code>
+    */
+   public PermissionCollection newPermissionCollection()
+   {
+     return new UnresolvedPermissionCollection();
+   }
+ } // class UnresolvedPermission
+ 
+ /**
+  * Implements the permission collection for unresolved permissions, and
+  * obeys serialization of JDK.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  */
+ class UnresolvedPermissionCollection extends PermissionCollection
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -7176153071733132400L;
+ 
+   // Package-private to avoid a trampoline.
+   /**
+    * Hashtable where we store permissions.
+    *
+    * @serial map of typename to a Vector of permissions (you'd think Sun
+    *         would document this better!)
+    */
+   final Hashtable permissions = new Hashtable();
+ 
+   /**
+    * Add a permission.
+    *
+    * @param perm the permission to add
+    * @throws IllegalArgumentException if perm is not an UnresolvedPermission
+    * @throws SecurityException if the collection is read-only
+    */
+   public void add(Permission perm)
+   {
+     if (isReadOnly())
+       throw new SecurityException();
+     if (! (perm instanceof UnresolvedPermission))
+       throw new IllegalArgumentException();
+     UnresolvedPermission up = (UnresolvedPermission) perm;
+     Vector v = (Vector) permissions.get(up.type);
+     if (v == null)
+       {
+         v = new Vector();
+         permissions.put(up.type, v);
+       }
+     v.add(up);
+   }
+ 
+   /**
+    * Returns true if perm is implied by the collection.
+    *
+    * @param perm the permission to check
+    * @return false; unresolved permissions imply nothing
+    */
+   public boolean implies(Permission perm)
+   {
+     return false;
+   }
+ 
+   /**
+    * Return the elements.
+    *
+    * @return the elements
+    */
+   public Enumeration elements()
+   {
+     return new Enumeration()
+     {
+       Enumeration main_enum = permissions.elements();
+       Enumeration sub_enum;
+ 
+       public boolean hasMoreElements()
+       {
+         if (sub_enum == null)
+           {
+             if (main_enum == null)
+               return false;
+             if (! main_enum.hasMoreElements())
+               {
+                 main_enum = null;
+                 return false;
+               }
+             Vector v = (Vector) main_enum.nextElement();
+             sub_enum = v.elements();
+           }
+         if (! sub_enum.hasMoreElements())
+           {
+             sub_enum = null;
+             return hasMoreElements();
+           }
+         return true;
+       }
+ 
+       public Object nextElement()
+       {
+         if (! hasMoreElements())
+           throw new NoSuchElementException();
+         return sub_enum.nextElement();
+       }
+     };
+   }
+ } // class UnresolvedPermissionCollection
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/acl/Acl.java gcc-4.1.0/libjava/classpath/java/security/acl/Acl.java
*** gcc-4.0.2/libjava/classpath/java/security/acl/Acl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/acl/Acl.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,153 ----
+ /* Acl.java -- An access control list
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.acl;
+ 
+ import java.security.Principal;
+ import java.util.Enumeration;
+ 
+ /**
+  * A Java access control list (ACL) is a group of individual ACL entries.
+  * These entries consist of a <code>Principal</code> and a list of
+  * permissions this <code>Principal</code> is either granted or denied.
+  * A given <code>Principal</code> can have at most one positive ACL entry
+  * (i.e., one that grants permissions) and one negative ACL entry (i.e., one
+  * that denies permissions).  If a given permission is both granted and
+  * denied, the ACL treats it as if it were never granted or denied.  If
+  * both a <code>Principal</code> and a <code>Group</code> to which the
+  * <code>Principal</code> belongs have an ACL entry, the permissions for
+  * the individual <code>Principal</code> take precedence over the 
+  * permissions of the <code>Group</code> if there is a conflict.
+  * <p>
+  * Additionally, the ACL interface extends the <code>Owner</code> interface
+  * and so an ACL has owners.  Actions which modify the ACL are restricted
+  * to owners.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Acl extends Owner
+ {
+ 
+   /**
+    * This method returns the name of this ACL.
+    *
+    * @return The name of this ACL
+    */
+   String getName();
+ 
+   /**
+    * This method sets the name of the ACL
+    *
+    * @param caller The <code>Principal</code> requesting the action.
+    * @param name The new name for this ACL.
+    *
+    * @exception NotOwnerException If the caller is not an owner of this ACL.
+    */
+   void setName(Principal caller, String name)
+     throws NotOwnerException;
+ 
+   /**
+    * This method adds the specified entry to the ACL
+    *
+    * @param caller The <code>Principal</code> requesting the addition
+    * @param entry The ACL entry to add
+    *
+    * @return <code>true</code> if the entry was added, <code>false</code>
+    * if there is already an entry of the same type for the
+    * <code>Principal</code>.
+    *
+    * @exception NotOwnerException If the caller is not an owner of this ACL.
+    */
+   boolean addEntry(Principal caller, AclEntry entry) 
+     throws NotOwnerException;
+ 
+   /**
+    * This method delets the specified entry from the ACL
+    *
+    * @param caller The <code>Principal</code> requesting the deletion.
+    * @param entry The ACL entry to delete
+    *
+    * @return <code>true</code> if the entry was deleted, or <code>false</code>
+    * if this entry was not part of the ACL to begin with
+    *
+    * @exception NotOwnerException If the caller is not an owner of this ACL.
+    */
+   boolean removeEntry(Principal caller, AclEntry entry)
+     throws NotOwnerException;
+ 
+   /**
+    * This method returns a list of all the entries in the ACL as an
+    * <code>Enumeration</code>.
+    *
+    * @return An enumeration of the ACL entries
+    */
+   Enumeration entries();
+ 
+   /**
+    * This method tests whether or not the specified <code>Principal</code>
+    * has the specified <code>Permission</code>
+    *
+    * @param user The <code>Principal</code> to test
+    * @param perm The <code>Permission</code> to test for
+    *
+    * @return <code>true</code> if the user has been granted the permission,
+    * <code>false</code> otherwise
+    */
+   boolean checkPermission(Principal user, Permission perm);
+ 
+   /**
+    * This method returns a list of <code>Permission</code>'s that are granted
+    * to a particular <code>Principal</code>.  This includes any permissions
+    * that are granted to <code>Group</code>'s to which the <code>Principal</code>
+    * belongs unless they are overridden by a negative ACL.  This permission
+    * list is returned as an <code>Enumeration</code>.
+    *
+    * @param user The <code>Principal</code> to retrieve permissions for.
+    *
+    * @return A list of permissions for the <code>Principal</code>.
+    */
+   Enumeration getPermissions(Principal user);
+ 
+   /**
+    * This method returns the ACL as a <code>String</code>
+    *
+    * @return A <code>String</code> representation of this ACL
+    */
+   String toString();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/acl/AclEntry.java gcc-4.1.0/libjava/classpath/java/security/acl/AclEntry.java
*** gcc-4.0.2/libjava/classpath/java/security/acl/AclEntry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/acl/AclEntry.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,143 ----
+ /* AclEntry.java -- An entry in an ACL list.
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.acl;
+ 
+ import java.security.Principal;
+ import java.util.Enumeration;
+ 
+ /**
+  * This interface models an entry in an access control list (ACL).  Java
+  * ACL's consist of a list of entries, where each consists of a 
+  * <code>Principal</code> and a list of <code>Permission</code>'s which
+  * have been granted to that <code>Principal</code>.  An ACL can also
+  * be <em>negative</em>, which indicates that the list of 
+  * <code>Permission</code>'s is a list of permissions that are <em>not</em>
+  * granted to the <code>Principal</code>.  A <code>Principal</code> can
+  * have at most one regular (or positive) ACL entry and one negative
+  * ACL entry.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface AclEntry extends Cloneable
+ {
+  /**
+    * This method returns the <code>Principal</code> associated with this
+    * ACL entry.
+    *
+    * @return The <code>Principal</code> for this ACL entry
+    */
+   Principal getPrincipal();
+ 
+   /**
+    * This method sets ths <code>Principal</code> associated with this
+    * ACL entry.  This operation will only succeed if there is not already
+    * a <code>Principal</code> assigned.
+    *
+    * @param user The <code>Principal</code> for this ACL entry
+    *
+    * @return <code>true</code> if the <code>Principal</code> was successfully set or <code>false</code> if this entry already has a <code>Principal</code>.
+    */
+   boolean setPrincipal(Principal user);
+ 
+   /**
+    * This method sets this ACL entry to be a <em>negative</em> entry, indicating
+    * that it contains a list of permissions that are <em>not</em> granted
+    * to the entry's <code>Principal</code>.  Note that there is no way to
+    * undo this operation.
+    */
+   void setNegativePermissions();
+ 
+   /**
+    * This method tests whether or not this ACL entry is a negative entry or not.
+    *
+    * @return <code>true</code> if this ACL entry is negative, <code>false</code> otherwise
+    */
+   boolean isNegative();
+ 
+   /**
+    * This method adds the specified permission to this ACL entry.
+    *
+    * @param perm The <code>Permission</code> to add
+    *
+    * @return <code>true</code> if the permission was added or <code>false</code> if it was already set for this entry
+    */
+   boolean addPermission(Permission permission);
+ 
+   /**
+    * This method deletes the specified permission to this ACL entry.
+    *
+    * @param perm The <code>Permission</code> to delete from this ACL entry.
+    *
+    * @return <code>true</code> if the permission was successfully deleted or <code>false</code> if the permission was not part of this ACL to begin with
+    */
+   boolean removePermission(Permission perm);
+ 
+   /**
+    * This method tests whether or not the specified permission is associated
+    * with this ACL entry.
+    *
+    * @param perm The <code>Permission</code> to test
+    *
+    * @return <code>true</code> if this permission is associated with this entry or <code>false</code> otherwise
+    */
+   boolean checkPermission(Permission permission);
+ 
+   /**
+    * This method returns a list of all <code>Permission</code> objects
+    * associated with this ACL entry as an <code>Enumeration</code>.
+    *
+    * @return A list of permissions for this ACL entry
+    */
+   Enumeration permissions();
+ 
+   /**
+    * This method returns this object as a <code>String</code>.
+    *
+    * @return A <code>String</code> representation of this object
+    */
+   String toString();
+ 
+   /**
+    * This method returns a clone of this ACL entry
+    *
+    * @return A clone of this ACL entry
+    */
+   Object clone();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/acl/AclNotFoundException.java gcc-4.1.0/libjava/classpath/java/security/acl/AclNotFoundException.java
*** gcc-4.0.2/libjava/classpath/java/security/acl/AclNotFoundException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/acl/AclNotFoundException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* AclNotFoundException.java -- thrown when an ACL is not found
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.acl;
+ 
+ /**
+  * This exception is thrown when a requested access control list (ACL) is
+  * not found.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class AclNotFoundException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5684295034092681791L;
+ 
+   /**
+    * Initializes a new instance of this class with no descriptive message
+    */
+   public AclNotFoundException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/acl/Group.java gcc-4.1.0/libjava/classpath/java/security/acl/Group.java
*** gcc-4.0.2/libjava/classpath/java/security/acl/Group.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/acl/Group.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /* Group.java -- Represents a group of Principals
+    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.acl;
+ 
+ import java.security.Principal;
+ import java.util.Enumeration;
+ 
+ /**
+  * This interface represents a group of <code>Principals</code>.  Note that
+  * since this interface extends <code>Principal</code>, a <code>Group</code>
+  * can be used where ever a <code>Principal</code> is requested.  This
+  * includes arguments to the methods in this interface.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Group extends Principal
+ {
+   /**
+    * This method adds a new <code>Principal</code> to this group.
+    *
+    * @param user The new <code>Principal</code> to add
+    *
+    * @return <code>true</code> if the user was successfully added or <code>false</code> if the user is already a member
+    */
+   boolean addMember(Principal user);
+ 
+   /**
+    * This method deletes a member from the group.
+    *
+    * @param user The <code>Principal</code> to delete
+    *
+    * @return <code>true</code> if the user was successfully deleted or <code>false</code> if the user is not a member of the group
+    */
+   boolean removeMember(Principal user);
+ 
+   /**
+    * This method tests whether or not a given <code>Principal</code> is a
+    * member of this group.
+    *
+    * @param user The <code>Principal</code> to test for membership
+    *
+    * @return <code>true</code> if the user is member, <code>false</code> otherwise
+    */
+   boolean isMember(Principal member);
+ 
+   /**
+    * This method returns a list of all members of the group as an 
+    * <code>Enumeration</code>.
+    *
+    * @return The list of all members of the group
+    */
+   Enumeration members();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/acl/LastOwnerException.java gcc-4.1.0/libjava/classpath/java/security/acl/LastOwnerException.java
*** gcc-4.0.2/libjava/classpath/java/security/acl/LastOwnerException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/acl/LastOwnerException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* LastOwnerException.java -- User attempted to delete last ACL owner
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.acl;
+ 
+ /**
+  * This exception is thrown when an attempt is made to delete the last owner
+  * of an access control list (ACL)
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @see Owner#deleteOwner(java.security.Principal, java.security.Principal)
+  * @status updated to 1.4
+  */
+ public class LastOwnerException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -5141997548211140359L;
+ 
+   /**
+    * Initialize a new instance of <code>LastOwnerException</code> that does
+    * not have a log message.
+    */
+   public LastOwnerException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/acl/NotOwnerException.java gcc-4.1.0/libjava/classpath/java/security/acl/NotOwnerException.java
*** gcc-4.0.2/libjava/classpath/java/security/acl/NotOwnerException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/acl/NotOwnerException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,62 ----
+ /* NotOwnerException.java -- Attempt to modify an unowned ACL
+    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.acl;
+ 
+ /**
+  * This exception is thrown whenever an operation is attempted that requires
+  * the caller to be the owner of the access control list (ACL) when the caller
+  * is in fact not the owner of the ACL.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @status updated to 1.4
+  */
+ public class NotOwnerException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -5555597911163362399L;
+ 
+   /**
+    * Initializes a new instance of <code>NotOwnerException</code> that does
+    * not have a descriptive message.
+    */
+   public NotOwnerException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/acl/Owner.java gcc-4.1.0/libjava/classpath/java/security/acl/Owner.java
*** gcc-4.0.2/libjava/classpath/java/security/acl/Owner.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/acl/Owner.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,95 ----
+ /* Owner.java -- ACL owner
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.acl;
+ 
+ import java.security.Principal;
+ 
+ /**
+  * This interface provides a mechanism for maintaining a list of owners
+  * of an access control list (ACL).  Since a <code>Principal</code> must
+  * be an owner in order to modify the owner list, a mechanism must be
+  * provided to specify the initial owner of the ACL.  The proper way to do
+  * this is for the implementing class to specify the initial owner in
+  * the contructor for that class.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Owner
+ {
+   /**
+    * This method adds an owner to the access control list (ACL).  Only a
+    * <code>Principal</code> who is already an owner can perform this operation.
+    *
+    * @param caller The <code>Principal</code> who is requesting that an owner be added
+    * @param owner The <code>Principal</code> to add as a new owner
+    *
+    * @param <code>true</code> if the new owner was successfully added or <code>false</code> if the specified new owner is already an owner
+    *
+    * @exception NotOwnerException If the caller is not already an owner of this ACL
+    */
+   boolean addOwner(Principal caller, Principal owner) 
+     throws NotOwnerException;
+ 
+   /**
+    * This method delets an owner from the access control list (ACL).  Only a
+    * <code>Principal</code> who is an owner can perform this operation.  An
+    * owner can delete itself from the list.  If there is only one
+    * owner remaining on this list, any attempt to delete it will throw an
+    * exception.
+    *
+    * @param caller The <code>Principal</code> who is requesting that an owner be deleted
+    * @param owner The <code>Principal</code> to delete as an owner
+    *
+    * @param <code>true</code> if the new owner was successfully deleted or <code>false</code> if the specified owner is not currently an owner
+    *
+    * @exception NotOwnerException If the caller is not already an owner of this ACL
+    * @exception LastOwnerException If completing the operation would delete the last ACL owner
+    */
+   boolean deleteOwner(Principal caller, Principal owner) 
+     throws NotOwnerException, LastOwnerException;
+ 
+   /**
+    * This method tests whether or not a given <code>Principal</code> is an
+    * owner of this access control list (ACL).
+    *
+    * @return <code>true</code> if the <code>Principal</code> is an owner, <code>false</code> otherwise
+    */
+   boolean isOwner(Principal owner);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/acl/Permission.java gcc-4.1.0/libjava/classpath/java/security/acl/Permission.java
*** gcc-4.0.2/libjava/classpath/java/security/acl/Permission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/acl/Permission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,67 ----
+ /* Permission.java -- Information about an ACL permission
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.acl;
+ 
+ /**
+  * This interface provides information about a permission that can be
+  * granted.  Note that this is <em>not</em> the same as the class
+  * <code>java.security.Permission</code>.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Permission
+ {
+   /**
+    * This method tests whether or not a specified <code>Permission</code>
+    * (passed as an <code>Object</code>) is the same as this permission.
+    *
+    * @param perm The permission to check for equality
+    *
+    * @return <code>true</code> if the specified permission is the same as this one, <code>false</code> otherwise
+    */
+   boolean equals (Object perm);
+ 
+   /**
+    * This method returns this <code>Permission</code> as a <code>String</code>.
+    *
+    * @return A <code>String</code> representing this permission.
+    */
+   String toString();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/acl/package.html gcc-4.1.0/libjava/classpath/java/security/acl/package.html
*** gcc-4.0.2/libjava/classpath/java/security/acl/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/acl/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.security.acl package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.security.acl</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CRL.java gcc-4.1.0/libjava/classpath/java/security/cert/CRL.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CRL.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CRL.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,98 ----
+ /* CRL.java --- Certificate Revocation List
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+    Certificate Revocation List class for managing CRLs that
+    have different formats but the same general use. They
+    all serve as lists of revoked certificates and can
+    be queried for a given certificate.
+    
+    Specialized CRLs extend this class.
+    
+    @author Mark Benvenuto
+    
+    @since JDK 1.2
+ */
+ public abstract class CRL
+ {
+ 
+   private String type;
+ 
+   /**
+      Creates a new CRL for the specified type. An example
+      is "X.509".
+ 
+      @param type the standard name for the CRL type. 
+   */
+   protected CRL(String type)
+   {
+     this.type = type;
+   }
+ 
+   /**
+      Returns the CRL type.
+ 
+      @return a string representing the CRL type
+   */
+   public final String getType()
+   {
+     return type;
+   }
+ 
+   /**
+      Returns a string representing the CRL.
+ 
+      @return a string representing the CRL.
+   */
+   public abstract String toString();
+ 
+   /**
+      Determines whether or not the specified Certificate
+      is revoked.
+ 
+      @param cert A certificate to check if it is revoked
+ 
+      @return true if the certificate is revoked,
+      false otherwise.	
+   */
+   public abstract boolean isRevoked(Certificate cert);
+ 
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CRLException.java gcc-4.1.0/libjava/classpath/java/security/cert/CRLException.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CRLException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CRLException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,73 ----
+ /* CRLException.java -- Certificate Revocation List Exception
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.security.GeneralSecurityException;
+ 
+ /**
+  * Exception for a Certificate Revocation List.
+  *
+  * @author Mark Benvenuto
+  * @since 1.2
+  * @status updated to 1.4
+ */
+ public class CRLException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -6694728944094197147L;
+ 
+   /**
+    * Constructs an CRLExceptionwithout a message string.
+    */
+   public CRLException()
+   {
+   }
+ 
+   /**
+    * Constructs an CRLException with a message string.
+    *
+    * @param msg a message to display with exception
+    */
+   public CRLException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CRLSelector.java gcc-4.1.0/libjava/classpath/java/security/cert/CRLSelector.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CRLSelector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CRLSelector.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* CRLSelector.java -- matches CRLs against criteria.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * A generic interface to classes that match certificate revocation
+  * lists (CRLs) to some given criteria. Implementations of this
+  * interface are useful for finding {@link CRL} objects in a {@link
+  * CertStore}.
+  *
+  * @see CertStore
+  * @see CertSelector
+  * @see X509CRLSelector
+  */
+ public interface CRLSelector extends Cloneable
+ {
+ 
+   /**
+    * Returns a clone of this instance.
+    *
+    * @return The clone.
+    */
+   Object clone();
+ 
+   /**
+    * Match a given certificate revocation list to this selector's
+    * criteria, returning true if it matches, false otherwise.
+    *
+    * @param crl The certificate revocation list to test.
+    * @return The boolean result of this test.
+    */
+   boolean match(CRL crl);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPath.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPath.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPath.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPath.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,252 ----
+ /* CertPath.java -- a sequence of certificates
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.cert;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.NotSerializableException;
+ import java.io.ObjectStreamException;
+ import java.io.Serializable;
+ import java.util.Iterator;
+ import java.util.List;
+ 
+ /**
+  * This class represents an immutable sequence, or path, of security
+  * certificates. The path type must match the type of each certificate in the
+  * path, or in other words, for all instances of cert in a certpath object,
+  * <code>cert.getType().equals(certpath.getType())</code> will return true.
+  *
+  * <p>Since this class is immutable, it is thread-safe. During serialization,
+  * the path is consolidated into a {@link CertPathRep}, which preserves the
+  * data regardless of the underlying implementation of the path.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public abstract class CertPath implements Serializable
+ {
+   /**
+    * The serialized representation of a path.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   protected static class CertPathRep implements Serializable
+   {
+     /**
+      * Compatible with JDK 1.4+.
+      */
+     private static final long serialVersionUID = 3015633072427920915L;
+ 
+     /**
+      * The certificate type.
+      *
+      * @serial the type of the certificate path
+      */
+     private final String type;
+ 
+     /**
+      * The encoded form of the path.
+      *
+      * @serial the encoded form
+      */
+     private final byte[] data;
+ 
+     /**
+      * Create the new serial representation.
+      *
+      * @param type the path type
+      * @param data the encoded path data
+      */
+     protected CertPathRep(String type, byte[] data)
+     {
+       this.type = type;
+       this.data = data;
+     }
+ 
+     /**
+      * Decode the data into an actual {@link CertPath} upon deserialization.
+      *
+      * @return the replacement object
+      * @throws ObjectStreamException if replacement fails
+      */
+     protected Object readResolve() throws ObjectStreamException
+     {
+       try
+         {
+           return CertificateFactory.getInstance(type)
+             .generateCertPath(new ByteArrayInputStream(data));
+         }
+       catch (CertificateException e)
+         {
+           throw (ObjectStreamException)
+             new NotSerializableException("java.security.cert.CertPath: "
+                                          + type).initCause(e);
+         }
+     }
+   } // class CertPathRep
+ 
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = 6068470306649138683L;
+ 
+   /**
+    * The path type.
+    *
+    * @serial the type of all certificates in this path
+    */
+   private final String type;
+ 
+   /**
+    * Create a certificate path with the given type. Most code should use
+    * {@link CertificateFactory} to create CertPaths.
+    *
+    * @param type the type of the path
+    */
+   protected CertPath(String type)
+   {
+     this.type = type;
+   }
+ 
+   /**
+    * Get the (non-null) type of all certificates in the path.
+    *
+    * @return the path certificate type
+    */
+   public String getType()
+   {
+     return type;
+   }
+ 
+   /**
+    * Get an immutable iterator over the path encodings (all String names),
+    * starting with the default encoding. The iterator will throw an
+    * <code>UnsupportedOperationException</code> if an attempt is made to
+    * remove items from the list.
+    *
+    * @return the iterator of supported encodings in the path
+    */
+   public abstract Iterator getEncodings();
+ 
+   /**
+    * Compares this path to another for semantic equality. To be equal, both
+    * must be instances of CertPath, with the same type, and identical
+    * certificate lists. Overriding classes must not change this behavior.
+    *
+    * @param o the object to compare to
+    * @return true if the two are equal
+    */
+   public boolean equals(Object o)
+   {
+     if (! (o instanceof CertPath))
+       return false;
+     CertPath cp = (CertPath) o;
+     return type.equals(cp.type)
+       && getCertificates().equals(cp.getCertificates());
+   }
+ 
+   /**
+    * Returns the hashcode of this certificate path. This is defined as:<br>
+    * <code>31 * getType().hashCode() + getCertificates().hashCode()</code>.
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     return 31 * type.hashCode() + getCertificates().hashCode();
+   }
+ 
+   public String toString()
+   {
+     List l = getCertificates();
+     int size = l.size();
+     int i = 0;
+     StringBuffer result = new StringBuffer(type);
+     result.append(" Cert Path: length = ").append(size).append(".\n[\n");
+     while (--size >= 0)
+       result.append(l.get(i++)).append('\n');
+     return result.append("\n]").toString();
+   }
+ 
+   /**
+    * Returns the encoded form of this path, via the default encoding.
+    *
+    * @return the encoded form
+    * @throws CertificateEncodingException if encoding fails
+    */
+   public abstract byte[] getEncoded() throws CertificateEncodingException;
+ 
+   /**
+    * Returns the encoded form of this path, via the specified encoding.
+    *
+    * @param encoding the encoding to use
+    * @return the encoded form
+    * @throws CertificateEncodingException if encoding fails or does not exist
+    */
+   public abstract byte[] getEncoded(String encoding)
+     throws CertificateEncodingException;
+ 
+   /**
+    * Returns the immutable, thread-safe list of certificates in this path.
+    *
+    * @return the list of certificates, non-null but possibly empty
+    */
+   public abstract List getCertificates();
+ 
+   /**
+    * Serializes the path in its encoded form, to ensure reserialization with
+    * the appropriate factory object without worrying about list implementation.
+    * The result will always be an instance of {@link CertPathRep}.
+    *
+    * @return the replacement object
+    * @throws ObjectStreamException if the replacement creation fails
+    */
+   protected Object writeReplace() throws ObjectStreamException
+   {
+     try
+       {
+         return new CertPathRep(type, getEncoded());
+       }
+     catch (CertificateEncodingException e)
+       {
+         throw (ObjectStreamException)
+           new NotSerializableException("java.security.cert.CertPath: "
+                                        + type).initCause(e);
+       }
+   }
+ } // class CertPath
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPathBuilder.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPathBuilder.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPathBuilder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPathBuilder.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,238 ----
+ /* CertPathBuilder.java -- bulids CertPath objects from Certificates.
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.Provider;
+ import java.security.Security;
+ 
+ /**
+  * This class builds certificate paths (also called certificate chains),
+  * which can be used to establish trust for a particular certificate by
+  * building a path from a trusted certificate (a trust anchor) to the
+  * untrusted certificate.
+  *
+  * @see CertPath
+  */
+ public class CertPathBuilder
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** Service name for CertPathBuilder. */
+   private static final String CERT_PATH_BUILDER = "CertPathBuilder";
+ 
+   /** The underlying implementation. */
+   private CertPathBuilderSpi cpbSpi;
+ 
+   /** The provider of this implementation. */
+   private Provider provider;
+ 
+   /** The name of this implementation. */
+   private String algorithm;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new CertPathBuilder.
+    *
+    * @param cpbSpi    The underlying implementation.
+    * @param provider  The provider of the implementation.
+    * @param algorithm This implementation's name.
+    */
+   protected CertPathBuilder(CertPathBuilderSpi cpbSpi, Provider provider,
+                             String algorithm)
+   {
+     this.cpbSpi = cpbSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the default cert path builder type.
+    *
+    * <p>This value can be set at run-time by the security property
+    * <code>"certpathbuilder.type"</code>. If this property is not set,
+    * then the value returned is <code>"PKIX"</code>.
+    *
+    * @return The default CertPathBuilder algorithm.
+    */
+   public static final String getDefaultType()
+   {
+     String type = Security.getProperty("certpathbuilder.type");
+     if (type == null)
+       type = "PKIX";
+     return type;
+   }
+ 
+   /**
+    * Get an instance of a named CertPathBuilder, from the first provider
+    * that implements it.
+    *
+    * @param algorithm The name of the CertPathBuilder to create.
+    * @return The new instance.
+    * @throws NoSuchAlgorithmException If no installed provider
+    *   implements the named algorithm.
+    */
+   public static CertPathBuilder getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+ 
+     for (int i = 0; i < p.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, p[i]);
+           }
+         catch (NoSuchAlgorithmException e)
+           {
+ 	    // Ignored.
+           }
+       }
+ 
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Get an instance of a named CertPathBuilder from the named
+    * provider.
+    *
+    * @param algorithm The name of the CertPathBuilder to create.
+    * @param provider  The name of the provider from which to get the
+    *   implementation.
+    * @return The new instance.
+    * @throws NoSuchAlgorithmException If no installed provider
+    *   implements the named algorithm.
+    * @throws NoSuchProviderException If the named provider does not
+    *   exist.
+    */
+   public static CertPathBuilder getInstance(String algorithm, String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Get an instance of a named CertPathBuilder from the specified
+    * provider.
+    *
+    * @param algorithm The name of the CertPathBuilder to create.
+    * @param provider  The provider from which to get the implementation.
+    * @return The new instance.
+    * @throws NoSuchAlgorithmException If no installed provider
+    *   implements the named algorithm.
+    * @throws IllegalArgumentException If <i>provider</i> in
+    *   <tt>null</tt>.
+    */
+   public static CertPathBuilder getInstance(String algorithm, Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("null provider");
+     try
+       {
+         return new CertPathBuilder((CertPathBuilderSpi)
+           Engine.getInstance(CERT_PATH_BUILDER, algorithm, provider),
+           provider, algorithm);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the name of this CertPathBuilder algorithm.
+    *
+    * @return The algorithm name.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Return the provider of this instance's implementation.
+    *
+    * @return The provider.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Builds a certificate path. The {@link CertPathParameters} parameter
+    * passed to this method is implementation-specific, but in general
+    * should contain some number of certificates and some number of
+    * trusted certificates (or "trust anchors").
+    *
+    * @param params The parameters.
+    * @retrun The certificate path result.
+    * @throws CertPathBuilderException If the certificate path cannot be
+    *   built.
+    * @throws InvalidAlgorithmParameterException If the implementation
+    *   rejects the specified parameters.
+    */
+   public final CertPathBuilderResult build(CertPathParameters params)
+     throws CertPathBuilderException, InvalidAlgorithmParameterException
+   {
+     return cpbSpi.engineBuild(params);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPathBuilderException.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPathBuilderException.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPathBuilderException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPathBuilderException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,159 ----
+ /* CertPathBuilderException.java -- wraps an exception during certificate
+    path building
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.security.GeneralSecurityException;
+ 
+ /**
+  * Indicates a problem while using a <code>CertPathBuilder</code>, wrapping
+  * the lower exception. This class is not thread-safe.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see CertPathBuilder
+  * @since 1.4
+  * @status updated to 1.4
+ */
+ public class CertPathBuilderException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = 5316471420178794402L;
+ 
+   /**
+    * Create an exception without a message. The cause may be initialized.
+    */
+   public CertPathBuilderException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message. The cause may be initialized.
+    *
+    * @param msg a message to display with exception
+    */
+   public CertPathBuilderException(String msg)
+   {
+     super(msg);
+   }
+ 
+   /**
+    * Create an exception with a cause. The message will be
+    * <code>cause == null ? null : cause.toString()</code>.
+    *
+    * @param cause the cause
+    */
+   public CertPathBuilderException(Throwable cause)
+   {
+     this(cause == null ? null : cause.toString(), cause);
+   }
+ 
+   /**
+    * Create an exception with a cause and a message.
+    *
+    * @param msg the message
+    * @param cause the cause
+    */
+   public CertPathBuilderException(String msg, Throwable cause)
+   {
+     super(msg);
+     initCause(cause);
+   }
+ 
+   /**
+    * Get the detail message.
+    *
+    * @return the detail message
+    */
+   public String getMessage()
+   {
+     return super.getMessage();
+   }
+ 
+   /**
+    * Get the cause, null if unknown.
+    *
+    * @return the cause
+    */
+   public Throwable getCause()
+   {
+     return super.getCause();
+   }
+ 
+   /**
+    * Convert this to a string, including its cause.
+    *
+    * @return the string conversion
+    */
+   public String toString()
+   {
+     return super.toString();
+   }
+ 
+   /**
+    * Print the stack trace to <code>System.err</code>.
+    */
+   public void printStackTrace()
+   {
+     super.printStackTrace();
+   }
+ 
+   /**
+    * Print the stack trace to a stream.
+    *
+    * @param stream the stream
+    */
+   public void printStackTrace(PrintStream stream)
+   {
+     super.printStackTrace(stream);
+   }
+ 
+   /**
+    * Print the stack trace to a stream.
+    *
+    * @param stream the stream
+    */
+   public void printStackTrace(PrintWriter stream)
+   {
+     super.printStackTrace(stream);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPathBuilderResult.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPathBuilderResult.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPathBuilderResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPathBuilderResult.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* CertPathBuilderResult -- results from building cert paths.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * A standard interface for the result of building a certificate path.
+  * All implementations of this class must provide a way to get the
+  * certificate path, but may also define additional methods for
+  * returning other result data generated by the certificate path
+  * builder.
+  */
+ public interface CertPathBuilderResult extends Cloneable {
+ 
+ 	/**
+    * Creates a copy of this builder result.
+    *
+    * @return The copy.
+    */
+ 	Object clone();
+ 
+   /**
+    * Get the certificate path that was built.
+    *
+    * @retrn The certificate path.
+    */
+ 	CertPath getCertPath();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPathBuilderSpi.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPathBuilderSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPathBuilderSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPathBuilderSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* CertPathBuilderSpi -- CertPathBuilder service provider interface.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.cert;
+ 
+ /**
+  * The {@link CertPathBuilder} <i>Service Provider Interface</i>
+  * (<b>SPI</b>).
+  *
+  * @see CertPathBuilder
+  */
+ public abstract class CertPathBuilderSpi {
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new CertPathBuilderSpi.
+    */
+   public CertPathBuilderSpi() {
+     super();
+   }
+ 
+   // Abstract methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a certificate path from the specified parameters.
+    *
+    * @param params The parameters to use.
+    * @return The certificate path result.
+    * @throws CertPathBuilderException If the certificate path cannot be
+    *   built.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *   implementation rejects the specified parameters.
+    */
+   public abstract CertPathBuilderResult engineBuild(CertPathParameters params)
+   throws CertPathBuilderException,
+          java.security.InvalidAlgorithmParameterException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPathParameters.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPathParameters.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPathParameters.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPathParameters.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* CertPathParameters.java -- parameters for CertPathBuilder.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.cert;
+ 
+ /**
+  * Parameters for generating and validating certificate paths. This
+  * class does not define any methods (except a required cloneable
+  * interface) and is provided only to provide type safety for
+  * implementations. Concrete implementations implement this interface
+  * in accord with thier own needs.
+  *
+  * @see CertPathBuilder
+  * @see CertPathValidator
+  */
+ public interface CertPathParameters extends Cloneable {
+ 
+    /**
+     * Makes a copy of this CertPathParameters instance.
+     *
+     * @return The copy.
+     */
+    Object clone();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPathValidator.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPathValidator.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPathValidator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPathValidator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,249 ----
+ /* CertPathValidator -- validates certificate paths.
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.security.AccessController;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.PrivilegedAction;
+ import java.security.Provider;
+ import java.security.Security;
+ 
+ /**
+  * Generic interface to classes that validate certificate paths.
+  *
+  * <p>Using this class is similar to all the provider-based security
+  * classes; the method of interest, {@link
+  * #validate(java.security.cert.CertPath,java.security.cert.CertPathParameters)},
+  * which takes provider-specific implementations of {@link
+  * CertPathParameters}, and return provider-specific implementations of
+  * {@link CertPathValidatorResult}.
+  *
+  * @since JDK 1.4
+  * @see CertPath
+  */
+ public class CertPathValidator {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** Service name for CertPathValidator. */
+   private static final String CERT_PATH_VALIDATOR = "CertPathValidator";
+ 
+   /** The underlying implementation. */
+   private final CertPathValidatorSpi validatorSpi;
+ 
+   /** The provider of this implementation. */
+   private final Provider provider;
+ 
+   /** The algorithm's name. */
+   private final String algorithm;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new CertPathValidator.
+    *
+    * @param validatorSpi The underlying implementation.
+    * @param provider     The provider of the implementation.
+    * @param algorithm    The algorithm name.
+    */
+   protected CertPathValidator(CertPathValidatorSpi validatorSpi,
+                               Provider provider, String algorithm)
+   {
+     this.validatorSpi = validatorSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the default validator type.
+    *
+    * <p>This value may be set at run-time via the security property
+    * "certpathvalidator.type", or the value "PKIX" if this property is
+    * not set.
+    *
+    * @return The default validator type.
+    */
+   public static synchronized String getDefaultType() {
+     String type = (String) AccessController.doPrivileged(
+       new PrivilegedAction()
+         {
+           public Object run()
+           {
+             return Security.getProperty("certpathvalidator.type");
+           }
+         }
+     );
+     if (type == null)
+       type = "PKIX";
+     return type;
+   }
+ 
+   /**
+    * Get an instance of the given validator from the first provider that
+    * implements it.
+    *
+    * @param algorithm The name of the algorithm to get.
+    * @return The new instance.
+    * @throws NoSuchAlgorithmException If no installed provider
+    * implements the requested algorithm.
+    */
+   public static CertPathValidator getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+     for (int i = 0; i < p.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, p[i]);
+           }
+         catch (NoSuchAlgorithmException e)
+           {
+ 	    // Ignored.
+           }
+       }
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Get an instance of the given validator from the named provider.
+    *
+    * @param algorithm The name of the algorithm to get.
+    * @param provider  The name of the provider from which to get the
+    * implementation.
+    * @return The new instance.
+    * @throws NoSuchAlgorithmException If the named provider does not
+    * implement the algorithm.
+    * @throws NoSuchProviderException If no provider named
+    * <i>provider</i> is installed.
+    */
+   public static CertPathValidator getInstance(String algorithm,
+                                               String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+ 
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Get an instance of the given validator from the given provider.
+    *
+    * @param algorithm The name of the algorithm to get.
+    * @param provider  The provider from which to get the implementation.
+    * @return The new instance.
+    * @throws NoSuchAlgorithmException If the provider does not implement
+    * the algorithm.
+    * @throws IllegalArgumentException If <i>provider</i> is null.
+    */
+   public static CertPathValidator getInstance(String algorithm,
+                                               Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("null provider");
+ 
+     try
+       {
+         return new CertPathValidator((CertPathValidatorSpi)
+           Engine.getInstance(CERT_PATH_VALIDATOR, algorithm, provider),
+           provider, algorithm);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the name of this validator.
+    *
+    * @return This validator's name.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Return the provider of this implementation.
+    *
+    * @return The provider.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Attempt to validate a certificate path.
+    *
+    * @param certPath The path to validate.
+    * @param params   The algorithm-specific parameters.
+    * @return The result of this validation attempt.
+    * @throws CertPathValidatorException If the certificate path cannot
+    * be validated.
+    * @throws InvalidAlgorithmParameterException If this implementation
+    * rejects the specified parameters.
+    */
+   public final CertPathValidatorResult validate(CertPath certPath,
+                                                 CertPathParameters params)
+     throws CertPathValidatorException, InvalidAlgorithmParameterException
+   {
+     return validatorSpi.engineValidate(certPath, params);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPathValidatorException.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPathValidatorException.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPathValidatorException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPathValidatorException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,226 ----
+ /* CertPathValidatorException.java -- wraps an exception during validation
+    of a CertPath
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.security.GeneralSecurityException;
+ 
+ /**
+  * Indicates a problem while validating a certification path. In addition,
+  * it can store the path an index in that path that caused the problem. This
+  * class is not thread-safe.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see CertPathValidator
+  * @since 1.4
+  * @status updated to 1.4
+ */
+ public class CertPathValidatorException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = -3083180014971893139L;
+ 
+   /**
+    * The index of the certificate path that failed, or -1.
+    *
+    * @serial the failed index
+    */
+   private final int index;
+ 
+   /**
+    * The <code>CertPath</code> that failed.
+    *
+    * @serial the object being validated at time of failure
+    */
+   private final CertPath certPath;
+ 
+   /**
+    * Create an exception without a message. The cause may be initialized. The
+    * index is set to -1 and the failed CertPath object to null.
+    */
+   public CertPathValidatorException()
+   {
+     this((String) null);
+   }
+ 
+   /**
+    * Create an exception with a message. The cause may be initialized. The
+    * index is set to -1 and the failed CertPath object to null.
+    *
+    * @param msg a message to display with exception
+    */
+   public CertPathValidatorException(String msg)
+   {
+     super(msg);
+     index = -1;
+     certPath = null;
+   }
+ 
+   /**
+    * Create an exception with a cause. The message will be
+    * <code>cause == null ? null : cause.toString()</code>. The index is set
+    * to -1 and the failed CertPath object to null.
+    *
+    * @param cause the cause
+    */
+   public CertPathValidatorException(Throwable cause)
+   {
+     this(cause == null ? null : cause.toString(), cause, null, -1);
+   }
+ 
+   /**
+    * Create an exception with a cause and a message. The index is set to -1
+    * and the failed CertPath object to null.
+    *
+    * @param msg the message
+    * @param cause the cause
+    */
+   public CertPathValidatorException(String msg, Throwable cause)
+   {
+     this(msg, cause, null, -1);
+   }
+ 
+   /**
+    * Create an exception with a cause, message, failed object, and index of
+    * failure in that CertPath.
+    *
+    * @param msg the message
+    * @param cause the cause
+    * @param certPath the path that was being validated, or null
+    * @param index the index of the path, or -1
+    * @throws IndexOutOfBoundsException if index is &lt; -1 or
+    *         &gt; certPath.getCertificates().size()
+    * @throws IllegalArgumentException if certPath is null but index != -1
+    */
+   public CertPathValidatorException(String msg, Throwable cause,
+                                     CertPath certPath, int index)
+   {
+     super(msg);
+     initCause(cause);
+     if (index < -1 || (certPath != null
+                        && index >= certPath.getCertificates().size()))
+       throw new IndexOutOfBoundsException();
+     if ((certPath == null) != (index == -1))
+       throw new IllegalArgumentException();
+     this.certPath = certPath;
+     this.index = index;
+   }
+ 
+   /**
+    * Get the detail message.
+    *
+    * @return the detail message
+    */
+   public String getMessage()
+   {
+     return super.getMessage();
+   }
+ 
+   /**
+    * Get the certificate path that had the failure, or null.
+    *
+    * @return the culprit path
+    */
+   public CertPath getCertPath()
+   {
+     return certPath;
+   }
+ 
+   /**
+    * Get the index that failed, or -1.
+    *
+    * @return the colprit index
+    */
+   public int getIndex()
+   {
+     return index;
+   }
+ 
+   /**
+    * Get the cause, null if unknown.
+    *
+    * @return the cause
+    */
+   public Throwable getCause()
+   {
+     return super.getCause();
+   }
+ 
+   /**
+    * Convert this to a string, including its cause.
+    *
+    * @return the string conversion
+    */
+   public String toString()
+   {
+     return super.toString();
+   }
+ 
+   /**
+    * Print the stack trace to <code>System.err</code>.
+    */
+   public void printStackTrace()
+   {
+     super.printStackTrace();
+   }
+ 
+   /**
+    * Print the stack trace to a stream.
+    *
+    * @param stream the stream
+    */
+   public void printStackTrace(PrintStream stream)
+   {
+     super.printStackTrace(stream);
+   }
+ 
+   /**
+    * Print the stack trace to a stream.
+    *
+    * @param stream the stream
+    */
+   public void printStackTrace(PrintWriter stream)
+   {
+     super.printStackTrace(stream);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPathValidatorResult.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPathValidatorResult.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPathValidatorResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPathValidatorResult.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,63 ----
+ /* CertPathValidatorResult -- result of validating certificate paths
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * Interface to the result of calling {@link
+  * CertPathValidator#validate(java.security.cert.CertPath,java.security.cert.CertPathParameters)}.
+  *
+  * <p>This interface defines no methods other than the required
+  * {@link java.lang.Cloneable} interface, and is intended to group and
+  * provide type safety for validator results. Providers that implement
+  * a certificate path validator must also provide an implementation of
+  * this interface, possibly defining additional methods.
+  *
+  * @since JDK 1.4
+  * @see CertPathValidator
+  */
+ public interface CertPathValidatorResult extends Cloneable
+ {
+ 
+   /**
+    * Returns a copy of this validator result.
+    *
+    * @return The copy.
+    */
+   Object clone();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertPathValidatorSpi.java gcc-4.1.0/libjava/classpath/java/security/cert/CertPathValidatorSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertPathValidatorSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertPathValidatorSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* CertPathValidatorSpi -- cert path validator service provider interface
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * The <i>service provider interface</i> (<b>SPI</b>) for the {@link
+  * CertPathValidator} class. Providers implementing certificate path
+  * validators must subclass this class and implement its abstract
+  * methods.
+  */
+ public abstract class CertPathValidatorSpi
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Default constructor.
+    */
+   public CertPathValidatorSpi()
+   {
+     super();
+   }
+ 
+   // Abstract methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Attempt to validate a certificate path.
+    *
+    * @param certPath The path to validate.
+    * @param params   The algorithm-specific parameters.
+    * @return The result of this validation attempt.
+    * @throws CertPathValidatorException If the certificate path cannot
+    * be validated.
+    * @throws InvalidAlgorithmParameterException If this implementation
+    * rejects the specified parameters.
+    */
+   public abstract CertPathValidatorResult
+   engineValidate(CertPath certPath, CertPathParameters params)
+   throws CertPathValidatorException,
+          java.security.InvalidAlgorithmParameterException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertSelector.java gcc-4.1.0/libjava/classpath/java/security/cert/CertSelector.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertSelector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertSelector.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,58 ----
+ /* CertSelector.java -- certificate selector interface.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ public interface CertSelector extends Cloneable
+ {
+ 
+   /**
+    * Returns a copy of this CertSelector.
+    *
+    * @return The copy.
+    */
+   Object clone();
+ 
+   /**
+    * Match a certificate according to this selector's criteria.
+    *
+    * @param cert The certificate to match.
+    * @return true if the certificate matches thin criteria.
+    */
+   boolean match(Certificate cert);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertStore.java gcc-4.1.0/libjava/classpath/java/security/cert/CertStore.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertStore.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertStore.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,294 ----
+ /* CertStore -- stores and retrieves certificates.
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.PrivilegedAction;
+ import java.security.Provider;
+ import java.security.Security;
+ import java.util.Collection;
+ 
+ /**
+  * A CertStore is a read-only repository for certificates and
+  * certificate revocation lists.
+  *
+  * @since JDK 1.4
+  */
+ public class CertStore
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** Service name for CertStore. */
+   private static final String CERT_STORE = "CertStore";
+ 
+   /** The underlying implementation. */
+   private CertStoreSpi storeSpi;
+ 
+   /** This implementation's provider. */
+   private Provider provider;
+ 
+   /** The name of this key store type. */
+   private String type;
+ 
+   /** The parameters used to initialize this instance, if any. */
+   private CertStoreParameters params;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new CertStore.
+    *
+    * @param storeSpi The underlying implementation.
+    * @param provider The provider of this implementation.
+    * @param type     The type of CertStore this class represents.
+    * @param params   The parameters used to initialize this instance, if any.
+    */
+   protected CertStore(CertStoreSpi storeSpi, Provider provider, String type,
+                       CertStoreParameters params)
+   {
+     this.storeSpi = storeSpi;
+     this.provider = provider;
+     this.type = type;
+     this.params = params;
+   }
+ 
+ // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the default certificate store type.
+    *
+    * <p>This value can be set at run-time via the security property
+    * "certstore.type"; if not specified than the default type will be
+    * "LDAP".
+    *
+    * @return The default CertStore type.
+    */
+   public static final synchronized String getDefaultType()
+   {
+     String type = null;
+     type = (String) java.security.AccessController.doPrivileged(
+       new PrivilegedAction() {
+         public Object run() {
+           return Security.getProperty("certstore.type");
+         }
+       }
+     );
+     if (type == null)
+       type = "LDAP";
+     return type;
+   }
+ 
+   /**
+    * Get an instance of the given certificate store from the first
+    * installed provider.
+    *
+    * @param type     The type of CertStore to create.
+    * @param params   The parameters to initialize this cert store with.
+    * @return The new instance.
+    * @throws InvalidAlgorithmParameterException If the instance rejects
+    *         the specified parameters.
+    * @throws NoSuchAlgorithmException If no installed provider
+    *         implements the specified CertStore.
+    * @throws IllegalArgumentException If <i>provider</i> is null.
+    */
+   public static CertStore getInstance(String type, CertStoreParameters params)
+     throws InvalidAlgorithmParameterException, NoSuchAlgorithmException
+   {
+     Provider[] p = Security.getProviders();
+     for (int i = 0; i < p.length; i++)
+       {
+         try
+           {
+             return getInstance(type, params, p[i]);
+           }
+         catch (NoSuchAlgorithmException e)
+           {
+ 	    // Ignored.
+           }
+       }
+ 
+     throw new NoSuchAlgorithmException(type);
+   }
+ 
+   /**
+    * Get an instance of the given certificate store from the named
+    * provider.
+    *
+    * @param type     The type of CertStore to create.
+    * @param params   The parameters to initialize this cert store with.
+    * @param provider The name of the provider from which to get the
+    *        implementation.
+    * @return The new instance.
+    * @throws InvalidAlgorithmParameterException If the instance rejects
+    *         the specified parameters.
+    * @throws NoSuchAlgorithmException If the specified provider does not
+    *         implement the specified CertStore.
+    * @throws NoSuchProviderException If no provider named
+    *         <i>provider</i> is installed.
+    * @throws IllegalArgumentException If <i>provider</i> is null.
+    */
+   public static CertStore getInstance(String type, CertStoreParameters params,
+                                       String provider)
+     throws InvalidAlgorithmParameterException, NoSuchAlgorithmException,
+            NoSuchProviderException
+   {
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+     return getInstance(type, params, p);
+   }
+ 
+   /**
+    * Get an instance of the given certificate store from the given
+    * provider.
+    *
+    * @param type     The type of CertStore to create.
+    * @param params   The parameters to initialize this cert store with.
+    * @param provider The provider from which to get the implementation.
+    * @return The new instance.
+    * @throws InvalidAlgorithmParameterException If the instance rejects
+    *         the specified parameters.
+    * @throws NoSuchAlgorithmException If the specified provider does not
+    *         implement the specified CertStore.
+    * @throws IllegalArgumentException If <i>provider</i> is null.
+    */
+   public static CertStore getInstance(String type, CertStoreParameters params,
+                                       Provider provider)
+     throws InvalidAlgorithmParameterException, NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("null provider");
+ 
+     try
+       {
+         return new CertStore((CertStoreSpi) Engine.getInstance(CERT_STORE,
+           type, provider, new Object[] { params }), provider, type, params);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(type);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+         Throwable cause = ite.getCause();
+         if (cause instanceof InvalidAlgorithmParameterException)
+           throw (InvalidAlgorithmParameterException) cause;
+         else
+           throw new NoSuchAlgorithmException(type);
+       }
+   }
+ 
+ // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the type of certificate store this instance represents.
+    *
+    * @return The CertStore type.
+    */
+   public final String getType()
+   {
+     return type;
+   }
+ 
+   /**
+    * Return the provider of this implementation.
+    *
+    * @return The provider.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Get the parameters this instance was created with, if any. The
+    * parameters will be cloned before they are returned.
+    *
+    * @return The parameters, or null.
+    */
+   public final CertStoreParameters getCertStoreParameters()
+   {
+     return params != null ? (CertStoreParameters) params.clone() : null;
+   }
+ 
+   /**
+    * Get a collection of certificates from this CertStore, optionally
+    * filtered by the specified CertSelector. The Collection returned may
+    * be empty, but will never be null.
+    *
+    * <p>Implementations may not allow a null argument, even if no
+    * filtering is desired.
+    *
+    * @param selector The certificate selector.
+    * @return The collection of certificates.
+    * @throws CertStoreException If the certificates cannot be retrieved.
+    */
+   public final Collection getCertificates(CertSelector selector)
+     throws CertStoreException
+   {
+     return storeSpi.engineGetCertificates(selector);
+   }
+ 
+   /**
+    * Get a collection of certificate revocation lists from this CertStore,
+    * optionally filtered by the specified CRLSelector. The Collection
+    * returned may be empty, but will never be null.
+    *
+    * <p>Implementations may not allow a null argument, even if no
+    * filtering is desired.
+    *
+    * @param selector The certificate selector.
+    * @return The collection of certificate revocation lists.
+    * @throws CertStoreException If the CRLs cannot be retrieved.
+    */
+   public final Collection getCRLs(CRLSelector selector)
+     throws CertStoreException
+   {
+     return storeSpi.engineGetCRLs(selector);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertStoreException.java gcc-4.1.0/libjava/classpath/java/security/cert/CertStoreException.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertStoreException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertStoreException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,159 ----
+ /* CertStoreException.java -- wraps an exception during certificate storage
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.security.GeneralSecurityException;
+ 
+ /**
+  * Indicates a problem while retrieving certificates and CRLs from
+  * <code>CertStore</code>, wrapping the lower exception. This class is not
+  * thread-safe.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see CertStore
+  * @since 1.4
+  * @status updated to 1.4
+ */
+ public class CertStoreException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.4+.
+    */
+   private static final long serialVersionUID = 2395296107471573245L;
+ 
+   /**
+    * Create an exception without a message. The cause may be initialized.
+    */
+   public CertStoreException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message. The cause may be initialized.
+    *
+    * @param msg a message to display with exception
+    */
+   public CertStoreException(String msg)
+   {
+     super(msg);
+   }
+ 
+   /**
+    * Create an exception with a cause. The message will be
+    * <code>cause == null ? null : cause.toString()</code>.
+    *
+    * @param cause the cause
+    */
+   public CertStoreException(Throwable cause)
+   {
+     this(cause == null ? null : cause.toString(), cause);
+   }
+ 
+   /**
+    * Create an exception with a cause and a message.
+    *
+    * @param msg the message
+    * @param cause the cause
+    */
+   public CertStoreException(String msg, Throwable cause)
+   {
+     super(msg);
+     initCause(cause);
+   }
+ 
+   /**
+    * Get the detail message.
+    *
+    * @return the detail message
+    */
+   public String getMessage()
+   {
+     return super.getMessage();
+   }
+ 
+   /**
+    * Get the cause, null if unknown.
+    *
+    * @return the cause
+    */
+   public Throwable getCause()
+   {
+     return super.getCause();
+   }
+ 
+   /**
+    * Convert this to a string, including its cause.
+    *
+    * @return the string conversion
+    */
+   public String toString()
+   {
+     return super.toString();
+   }
+ 
+   /**
+    * Print the stack trace to <code>System.err</code>.
+    */
+   public void printStackTrace()
+   {
+     super.printStackTrace();
+   }
+ 
+   /**
+    * Print the stack trace to a stream.
+    *
+    * @param stream the stream
+    */
+   public void printStackTrace(PrintStream stream)
+   {
+     super.printStackTrace(stream);
+   }
+ 
+   /**
+    * Print the stack trace to a stream.
+    *
+    * @param stream the stream
+    */
+   public void printStackTrace(PrintWriter stream)
+   {
+     super.printStackTrace(stream);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertStoreParameters.java gcc-4.1.0/libjava/classpath/java/security/cert/CertStoreParameters.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertStoreParameters.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertStoreParameters.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* CertStoreParameters -- interface to CertStore parameters.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * Parameters used when creating instances of {@link CertStore}. This
+  * class does not define any methods (except a required cloneable
+  * interface) and is provided only to provide type safety for
+  * implementations. Concrete implementations implement this interface
+  * in accord with thier own needs.
+  *
+  * @see LDAPCertStoreParameters
+  * @see CollectionCertStoreParameters
+  */
+ public interface CertStoreParameters extends Cloneable
+ {
+ 
+   /**
+    * Create a copy of these parameters.
+    *
+    * @return The copy.
+    */
+   Object clone();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertStoreSpi.java gcc-4.1.0/libjava/classpath/java/security/cert/CertStoreSpi.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertStoreSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertStoreSpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* CertStoreSpi -- certificate store service provider interface.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.util.Collection;
+ 
+ /**
+  * The <i>service provider interface</i> (<b>SPI</b>) for the {@link
+  * CertStore} class.
+  *
+  * <p>Providers wishing to implement a CertStore must subclass this
+  * class, implementing all the abstract methods. Providers may also
+  * implement the {@link CertStoreParameters} interface, if they require
+  * parameters.
+  *
+  * @since JDK 1.4
+  * @see CertStore
+  * @see CollectionCertStoreParameters
+  * @see LDAPCertStoreParameters
+  */
+ public abstract class CertStoreSpi
+ {
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new CertStoreSpi.
+    *
+    * @param params The parameters to initialize this instance with, or
+    *        null if no parameters are required.
+    * @throws InvalidAlgorithmParameterException If the specified
+    *         parameters are inappropriate for this class.
+    */
+   public CertStoreSpi(CertStoreParameters params)
+     throws java.security.InvalidAlgorithmParameterException
+   {
+     super();
+   }
+ 
+   // Abstract methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the certificates from this store, filtering them through the
+    * specified CertSelector.
+    *
+    * @param selector The CertSelector to filter certificates.
+    * @return A (non-null) collection of certificates.
+    * @throws CertStoreException If the certificates cannot be retrieved.
+    */
+   public abstract Collection engineGetCertificates(CertSelector selector)
+   throws CertStoreException;
+ 
+   /**
+    * Get the certificate revocation list from this store, filtering them
+    * through the specified CRLSelector.
+    *
+    * @param selector The CRLSelector to filter certificate revocation
+    *        lists.
+    * @return A (non-null) collection of certificate revocation list.
+    * @throws CertStoreException If the CRLs cannot be retrieved.
+    */
+   public abstract Collection engineGetCRLs(CRLSelector selector)
+   throws CertStoreException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/Certificate.java gcc-4.1.0/libjava/classpath/java/security/cert/Certificate.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/Certificate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/Certificate.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,306 ----
+ /* Certificate.java --- Certificate class
+    Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.InvalidObjectException;
+ import java.io.ObjectStreamException;
+ import java.io.Serializable;
+ import java.security.InvalidKeyException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.PublicKey;
+ import java.security.SignatureException;
+ 
+ /**
+  * The Certificate class is an abstract class used to manage 
+  * identity certificates. An identity certificate is a
+  * combination of a principal and a public key which is 
+  * certified by another principal. This is the puprose of 
+  * Certificate Authorities (CA).
+  * 
+  * <p>This class is used to manage different types of certificates
+  * but have important common puposes. Different types of 
+  * certificates like X.509 and OpenPGP share general certificate
+  * functions (like encoding and verifying) and information like
+  * public keys.
+  * 
+  * <p>X.509, OpenPGP, and SDSI can be implemented by subclassing this
+  * class even though they differ in storage methods and information
+  * stored.
+  *
+  * @see CertificateFactory
+  * @see X509Certificate
+  * @since JDK 1.2
+  * @author Mark Benvenuto
+  * @author Casey Marshall
+  */
+ public abstract class Certificate implements Serializable
+ {
+   private static final long serialVersionUID = -6751606818319535583L;
+ 	
+   private String type;
+ 
+   /**
+      Constructs a new certificate of the specified type. An example
+      is "X.509".
+ 
+      @param type a valid standard name for a certificate.
+   */
+   protected Certificate(String type)
+   {
+     this.type = type;
+   }
+ 
+   /**
+      Returns the Certificate type.
+ 
+      @return a string representing the Certificate type
+   */
+   public final String getType()
+   {
+     return type;
+   }
+ 
+   /**
+      Compares this Certificate to other. It checks if the
+      object if instanceOf Certificate and then checks if
+      the encoded form matches.
+ 
+      @param other An Object to test for equality
+ 
+      @return true if equal, false otherwise
+   */
+   public boolean equals(Object other)
+   {
+     if( other instanceof Certificate ) {
+       try {
+ 	Certificate x = (Certificate) other;
+ 	if( getEncoded().length != x.getEncoded().length )
+ 	  return false;
+ 
+ 	byte[] b1 = getEncoded();
+ 	byte[] b2 = x.getEncoded();
+ 
+ 	for( int i = 0; i < b1.length; i++ )
+ 	  if( b1[i] != b2[i] )
+ 	    return false;
+ 
+       } catch( CertificateEncodingException cee ) { 
+ 	return false;
+       }
+       return true;
+     }
+     return false;
+   }
+ 
+   /**
+      Returns a hash code for this Certificate in its encoded
+      form.
+ 
+      @return A hash code of this class
+   */
+   public int hashCode()
+   {
+     return super.hashCode();
+   }
+ 
+   /**
+      Gets the DER ASN.1 encoded format for this Certificate.
+      It assumes each certificate has only one encoding format.
+      Ex: X.509 is encoded as ASN.1 DER
+ 
+      @return byte array containg encoded form
+ 
+      @throws CertificateEncodingException if an error occurs
+   */
+   public abstract byte[] getEncoded() throws CertificateEncodingException;
+ 
+   /**
+      Verifies that this Certificate was properly signed with the
+      PublicKey that corresponds to its private key. 
+ 
+      @param key PublicKey to verify with
+ 
+      @throws CertificateException encoding error
+      @throws NoSuchAlgorithmException unsupported algorithm
+      @throws InvalidKeyException incorrect key
+      @throws NoSuchProviderException no provider
+      @throws SignatureException signature error
+   */
+   public abstract void verify(PublicKey key)
+     throws CertificateException,
+     NoSuchAlgorithmException,
+     InvalidKeyException,
+     NoSuchProviderException,
+     SignatureException;
+ 
+   /**
+      Verifies that this Certificate was properly signed with the
+      PublicKey that corresponds to its private key and uses
+      the signature engine provided by the provider. 
+ 
+      @param key PublicKey to verify with
+      @param sigProvider Provider to use for signature algorithm
+ 
+      @throws CertificateException encoding error
+      @throws NoSuchAlgorithmException unsupported algorithm
+      @throws InvalidKeyException incorrect key
+      @throws NoSuchProviderException incorrect provider
+      @throws SignatureException signature error
+   */
+   public abstract void verify(PublicKey key,
+ 			      String sigProvider)
+     throws CertificateException,
+     NoSuchAlgorithmException,
+     InvalidKeyException,
+     NoSuchProviderException,
+     SignatureException;
+ 
+   /**
+      Returns a string representing the Certificate.
+ 
+      @return a string representing the Certificate.
+   */
+   public abstract String toString();
+ 
+ 
+   /**
+      Returns the public key stored in the Certificate.
+ 
+      @return The public key
+   */
+   public abstract PublicKey getPublicKey();
+ 
+   // Protected methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns a replacement for this certificate to be serialized. This
+    * method returns the equivalent to the following for this class:
+    *
+    * <blockquote>
+    * <pre>new CertificateRep(getType(), getEncoded());</pre>
+    * </blockquote>
+    *
+    * <p>This thusly replaces the certificate with its name and its
+    * encoded form, which can be deserialized later with the {@link
+    * CertificateFactory} implementation for this certificate's type.
+    *
+    * @return The replacement object to be serialized.
+    * @throws ObjectStreamException If the replacement could not be
+    * created.
+    */
+   protected Object writeReplace() throws ObjectStreamException
+   {
+     try
+       {
+         return new CertificateRep(getType(), getEncoded());
+       }
+     catch (CertificateEncodingException cee)
+       {
+         throw new InvalidObjectException(cee.toString());
+       }
+   }
+ 
+   // Inner class.
+   // ------------------------------------------------------------------------
+ 
+   /**
+      Certificate.CertificateRep is an inner class used to provide an alternate
+      storage mechanism for serialized Certificates.
+   */
+   protected static class CertificateRep implements java.io.Serializable
+   {
+ 
+     /** From JDK1.4. */
+     private static final long serialVersionUID = -8563758940495660020L;
+   
+     /** The certificate type, e.g. "X.509". */
+     private String type;
+ 
+     /** The encoded certificate data. */
+     private byte[] data;
+ 
+     /**
+      * Create an alternative representation of this certificate. The
+      * <code>(type, data)</code> pair is typically the certificate's
+      * type as returned by {@link Certificate#getType()} (i.e. the
+      * canonical name of the certificate type) and the encoded form as
+      * returned by {@link Certificate#getEncoded()}.
+      *
+      * <p>For example, X.509 certificates would create an instance of
+      * this class with the parameters "X.509" and the ASN.1
+      * representation of the certificate, encoded as DER bytes.
+      *
+      * @param type The certificate type.
+      * @param data The encoded certificate data.
+      */
+     protected CertificateRep(String type, byte[] data)
+     {
+       this.type = type;
+       this.data = data;
+     }
+ 
+     /**
+      * Deserialize this certificate replacement into the appropriate
+      * certificate object. That is, this method attempts to create a
+      * {@link CertificateFactory} for this certificate's type, then
+      * attempts to parse the encoded data with that factory, returning
+      * the resulting certificate.
+      *
+      * @return The deserialized certificate.
+      * @throws ObjectStreamException If there is no appropriate
+      * certificate factory for the given type, or if the encoded form
+      * cannot be parsed.
+      */
+     protected Object readResolve() throws ObjectStreamException
+     {
+       try
+         {
+           CertificateFactory fact = CertificateFactory.getInstance(type);
+           return fact.generateCertificate(new ByteArrayInputStream(data));
+         }
+       catch (Exception e)
+         {
+           throw new InvalidObjectException(e.toString());
+         }
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertificateEncodingException.java gcc-4.1.0/libjava/classpath/java/security/cert/CertificateEncodingException.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertificateEncodingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertificateEncodingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* CertificateEncodingException.java -- Certificate Encoding Exception
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * Exception for a Certificate Encoding.
+  *
+  * @author Mark Benvenuto
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class CertificateEncodingException extends CertificateException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 6219492851589449162L;
+ 
+   /**
+    * Constructs an exception without a message string.
+    */
+   public CertificateEncodingException()
+   {
+   }
+ 
+   /**
+    * Constructs an exception with a message string.
+    *
+    * @param msg A message to display with exception
+    */
+   public CertificateEncodingException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertificateException.java gcc-4.1.0/libjava/classpath/java/security/cert/CertificateException.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertificateException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertificateException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* CertificateException.java -- Certificate Exception
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.security.GeneralSecurityException;
+ 
+ /**
+  * Exception for a Certificate.
+  *
+  * @author Mark Benvenuto
+  * @see Certificate
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class CertificateException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 3192535253797119798L;
+ 
+   /**
+    * Constructs an exception without a message string.
+    */
+   public CertificateException()
+   {
+   }
+ 
+   /**
+    * Constructs an exception with a message string.
+    *
+    * @param msg a message to display with exception
+    */
+   public CertificateException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertificateExpiredException.java gcc-4.1.0/libjava/classpath/java/security/cert/CertificateExpiredException.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertificateExpiredException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertificateExpiredException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* CertificateExpiredException.java --- Certificate Expired Exception
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * Exception for a Certificate Expiring.
+  *
+  * @author Mark Benvenuto
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class CertificateExpiredException extends CertificateException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 9071001339691533771L;
+ 
+   /**
+    * Constructs an exception without a message string.
+    */
+   public CertificateExpiredException()
+   {
+   }
+ 
+   /**
+    * Constructs an exception with a message string.
+    *
+    * @param msg a message to display with exception
+    */
+   public CertificateExpiredException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertificateFactory.java gcc-4.1.0/libjava/classpath/java/security/cert/CertificateFactory.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertificateFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertificateFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,358 ----
+ /* CertificateFactory.java -- Certificate Factory Class
+    Copyright (C) 1999, 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.io.InputStream;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.Provider;
+ import java.security.Security;
+ import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.List;
+ 
+ /**
+  * This class implements the CertificateFactory class interface used to
+  * generate certificates, certificate revocation lists (CRLs), and certificate
+  * paths objects from their encoded forms.
+  *
+  * @author Mark Benvenuto
+  * @author Casey Marshall
+  * @since JDK 1.2
+  * @status Fully compatible with JDK 1.4.
+  */
+ public class CertificateFactory
+ {
+ 
+   /** The service name for certificate factories. */
+   private static final String CERTIFICATE_FACTORY = "CertificateFactory";
+ 
+   private CertificateFactorySpi certFacSpi;
+   private Provider provider;
+   private String type;
+ 
+   /**
+    * Creates an instance of CertificateFactory.
+    *
+    * @param certFacSpi The underlying CertificateFactory engine.
+    * @param provider   The provider of this implementation.
+    * @param type       The type of Certificate this factory creates.
+    */
+   protected CertificateFactory(CertificateFactorySpi certFacSpi,
+                                Provider provider, String type)
+   {
+     this.certFacSpi = certFacSpi;
+     this.provider = provider;
+     this.type = type;
+   }
+ 
+ // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /** 
+    * Gets an instance of the CertificateFactory class representing
+    * the specified certificate factory. If the type is not 
+    * found then, it throws CertificateException.
+    *
+    * @param type     The type of certificate factory to create.
+    * @return a CertificateFactory repesenting the desired type
+    * @throws CertificateException If the type of certificate is not
+    *    implemented by any installed provider.
+    */
+   public static final CertificateFactory getInstance(String type)
+     throws CertificateException
+   {
+     Provider[] p = Security.getProviders();
+ 
+     for (int i = 0; i < p.length; i++)
+       {
+         try
+           {
+             return getInstance(type, p[i]);
+           }
+         catch (CertificateException e)
+           {
+ 	    // Ignored.
+           }
+       }
+ 
+     throw new CertificateException(type);
+   }
+ 
+   /** 
+    * Gets an instance of the CertificateFactory class representing
+    * the specified certificate factory from the specified provider. 
+    * If the type is not found then, it throws {@link CertificateException}. 
+    * If the provider is not found, then it throws 
+    * {@link java.security.NoSuchProviderException}.
+    *
+    * @param type     The type of certificate factory to create.
+    * @param provider The name of the provider from which to get the
+    *        implementation.
+    * @return A CertificateFactory for the desired type.
+    * @throws CertificateException If the type of certificate is not
+    *         implemented by the named provider.
+    * @throws NoSuchProviderException If the named provider is not installed.
+    */
+   public static final CertificateFactory getInstance(String type,
+                                                      String provider) 
+     throws CertificateException, NoSuchProviderException
+   {
+     Provider p = Security.getProvider(provider);
+     if( p == null)
+       throw new NoSuchProviderException(provider);
+ 
+     return getInstance(type, p);
+   }
+ 
+   /**
+    * Get a certificate factory for the given certificate type from the
+    * given provider.
+    *
+    * @param type     The type of certificate factory to create.
+    * @param provider The provider from which to get the implementation.
+    * @return A CertificateFactory for the desired type.
+    * @throws CertificateException If the type of certificate is not
+    *         implemented by the provider.
+    * @throws IllegalArgumentException If the provider is null.
+    */
+   public static final CertificateFactory getInstance(String type,
+                                                      Provider provider)
+     throws CertificateException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("null provider");
+ 
+     try
+       {
+         return new CertificateFactory((CertificateFactorySpi)
+           Engine.getInstance(CERTIFICATE_FACTORY, type, provider),
+           provider, type);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new CertificateException(type);
+       }
+     catch (java.lang.reflect.InvocationTargetException ite)
+       {
+         throw new CertificateException(type);
+       }
+     catch (NoSuchAlgorithmException nsae)
+       {
+         throw new CertificateException(nsae.getMessage());
+       }
+   }
+ 
+ // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Gets the provider of this implementation.
+    *
+    * @return The provider of this implementation.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Returns the type of the certificate this factory creates.
+    *
+    * @return A string with the type of certificate
+    */
+   public final String getType()
+   {
+     return type;
+   }
+ 
+   /**
+    * Generates a Certificate from the encoded data read
+    * from an InputStream.
+    *
+    * <p>The input stream must contain only one certificate.
+    *
+    * <p>If there exists a specialized certificate class for the
+    * certificate format handled by the certificate factory
+    * then the return Ceritificate should be a typecast of it.
+    * Ex: A X.509 CertificateFactory should return X509Certificate.
+    *
+    * <p>For X.509 certificates, the certificate in inStream must be
+    * DER encoded and supplied in binary or printable (Base64) 
+    * encoding. If the certificate is in Base64 encoding, it must be 
+    * bounded by -----BEGINCERTIFICATE-----, and 
+    * -----END CERTIFICATE-----. 
+    *
+    * @param inStream An input stream containing the certificate data.
+    * @return A certificate initialized from the decoded InputStream data.
+    * @throws CertificateException If an error occurs decoding the
+    *   certificate.
+    */
+   public final Certificate generateCertificate(InputStream inStream)
+     throws CertificateException
+   {
+     return certFacSpi.engineGenerateCertificate(inStream);
+   }
+ 
+   /**
+    * Returns a collection of certificates that were read from the 
+    * input stream. It may be empty, have only one, or have 
+    * multiple certificates.
+    *
+    * For a X.509 certificate factory, the stream may contain a
+    * single DER encoded certificate or a PKCS#7 certificate 
+    * chain. This is a PKCS#7 <I>SignedData</I> object with the 
+    * most significant field being <I>certificates</I>. If no 
+    * CRLs are present, then an empty collection is returned.
+ 	 *
+    * @param inStream An input stream containing the certificate data.
+    * @return A collection of certificates initialized from the decoded
+    *   InputStream data.
+    * @throws CertificateException If an error occurs decoding the
+    *   certificates.
+    */
+   public final Collection generateCertificates(InputStream inStream)
+     throws CertificateException
+   {
+     return certFacSpi.engineGenerateCertificates(inStream);
+   }
+ 
+   /**
+    * Generates a CRL based on the encoded data read
+    * from the InputStream.
+    *
+    * <p>The input stream must contain only one CRL.
+    *
+    * <p>If there exists a specialized CRL class for the
+    * CRL format handled by the certificate factory
+    * then the return CRL should be a typecast of it.
+    * Ex: A X.509 CertificateFactory should return X509CRL.
+    *
+    * @param inStream An input stream containing the CRL data.
+    * @return A CRL initialized from the decoded InputStream data.
+    * @throws CRLException If an error occurs decoding the CRL.
+    */
+   public final CRL generateCRL(InputStream inStream)
+     throws CRLException
+   {
+     return certFacSpi.engineGenerateCRL(inStream);
+   }
+ 
+   /**
+    * <p>Generates CRLs based on the encoded data read
+    * from the InputStream.
+    *
+    * <p>For a X.509 certificate factory, the stream may contain a
+    * single DER encoded CRL or a PKCS#7 CRL set. This is a 
+    * PKCS#7 <I>SignedData</I> object with the most significant 
+    * field being <I>crls</I>. If no CRLs are present, then an
+    * empty collection is returned.
+    *
+    * @param inStream an input stream containing the CRLs.
+    * @return a collection of CRLs initialized from the decoded
+    *    InputStream data.
+    * @throws CRLException If an error occurs decoding the CRLs.
+    */
+   public final Collection generateCRLs(InputStream inStream)
+     throws CRLException
+   {
+     return certFacSpi.engineGenerateCRLs( inStream );
+   }
+ 
+   /**
+    * Generate a {@link CertPath} and initialize it with data parsed from
+    * the input stream. The default encoding of this factory is used.
+    *
+    * @param inStream The InputStream containing the CertPath data.
+    * @return A CertPath initialized from the input stream data.
+    * @throws CertificateException If an error occurs decoding the
+    * CertPath.
+    */
+   public final CertPath generateCertPath(InputStream inStream)
+     throws CertificateException
+   {
+     return certFacSpi.engineGenerateCertPath(inStream);
+   }
+ 
+   /**
+    * Generate a {@link CertPath} and initialize it with data parsed from
+    * the input stream, using the specified encoding.
+    *
+    * @param inStream The InputStream containing the CertPath data.
+    * @param encoding The encoding of the InputStream data.
+    * @return A CertPath initialized from the input stream data.
+    * @throws CertificateException If an error occurs decoding the
+    *   CertPath.
+    */
+   public final CertPath generateCertPath(InputStream inStream, String encoding)
+     throws CertificateException
+   {
+     return certFacSpi.engineGenerateCertPath(inStream, encoding);
+   }
+ 
+   /**
+    * Generate a {@link CertPath} and initialize it with the certificates
+    * in the {@link java.util.List} argument.
+    *
+    * @param certificates The list of certificates with which to create
+    *   the CertPath.
+    * @return A CertPath initialized from the certificates.
+    * @throws CertificateException If an error occurs generating the
+    *   CertPath.
+    */
+   public final CertPath generateCertPath(List certificates)
+     throws CertificateException
+   {
+     return certFacSpi.engineGenerateCertPath(certificates);
+   }
+ 
+   /**
+    * Returns an Iterator of CertPath encodings supported by this
+    * factory, with the default encoding first. The returned Iterator
+    * cannot be modified.
+    *
+    * @return The Iterator of supported encodings.
+    */
+   public final Iterator getCertPathEncodings()
+   {
+     return certFacSpi.engineGetCertPathEncodings();
+   }
+ } // class CertificateFactory
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertificateFactorySpi.java gcc-4.1.0/libjava/classpath/java/security/cert/CertificateFactorySpi.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertificateFactorySpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertificateFactorySpi.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,225 ----
+ /* CertificateFactorySpi.java --- Certificate Factory Class
+    Copyright (C) 1999,2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.io.InputStream;
+ 
+ import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.List;
+ 
+ /**
+    CertificateFactorySpi is the abstract class Service Provider
+    Interface (SPI) for the CertificateFactory class. A provider
+    must implement all the abstract methods if they wish to 
+    supply a certificate factory for a particular certificate
+    type. Ex: X.509
+    
+    Certificate factories are used to generate certificates and
+    certificate revocation lists (CRL) from their encoding.
+    
+    @since JDK 1.2
+    
+    @author Mark Benvenuto
+  */
+ public abstract class CertificateFactorySpi
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Constructs a new CertificateFactorySpi
+    */
+   public CertificateFactorySpi()
+   {}
+ 
+   // Abstract methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+      Generates a Certificate based on the encoded data read
+      from the InputStream.
+ 
+      The input stream must contain only one certificate.
+ 
+      If there exists a specialized certificate class for the
+      certificate format handled by the certificate factory
+      then the return Ceritificate should be a typecast of it.
+      Ex: A X.509 CertificateFactory should return X509Certificate.
+ 
+      For X.509 certificates, the certificate in inStream must be
+      DER encoded and supplied in binary or printable (Base64) 
+      encoding. If the certificate is in Base64 encoding, it must be 
+      bounded by -----BEGIN CERTIFICATE-----, and 
+      -----END CERTIFICATE-----. 
+ 
+      @param inStream an input stream containing the certificate data
+ 
+      @return a certificate initialized with InputStream data.
+ 
+      @throws CertificateException Certificate parsing error
+   */
+   public abstract Certificate engineGenerateCertificate(InputStream inStream)
+     throws CertificateException;
+ 
+   /**
+      Returns a collection of certificates that were read from the 
+      input stream. It may be empty, have only one, or have 
+      multiple certificates.
+ 
+      For a X.509 certificate factory, the stream may contain a
+      single DER encoded certificate or a PKCS#7 certificate 
+      chain. This is a PKCS#7 <I>SignedData</I> object with the 
+      most significant field being <I>certificates</I>. If no 
+      CRLs are present, then an empty collection is returned.
+ 	
+      @param inStream an input stream containing the certificates
+ 
+      @return a collection of certificates initialized with 
+      the InputStream data.
+ 
+      @throws CertificateException Certificate parsing error
+   */
+   public abstract Collection engineGenerateCertificates(InputStream inStream)
+     throws CertificateException;
+ 
+   /**
+      Generates a CRL based on the encoded data read
+      from the InputStream.
+ 
+      The input stream must contain only one CRL.
+ 
+      If there exists a specialized CRL class for the
+      CRL format handled by the certificate factory
+      then the return CRL should be a typecast of it.
+      Ex: A X.509 CertificateFactory should return X509CRL.
+ 
+      @param inStream an input stream containing the CRL data
+ 
+      @return a CRL initialized with InputStream data.
+ 
+      @throws CRLException CRL parsing error
+   */
+   public abstract CRL engineGenerateCRL(InputStream inStream)
+     throws CRLException;
+ 
+   /**
+      Generates CRLs based on the encoded data read
+      from the InputStream.
+ 
+      For a X.509 certificate factory, the stream may contain a
+      single DER encoded CRL or a PKCS#7 CRL set. This is a 
+      PKCS#7 <I>SignedData</I> object with the most significant 
+      field being <I>crls</I>. If no CRLs are present, then an
+      empty collection is returned.
+ 
+      @param inStream an input stream containing the CRLs
+ 
+      @return a collection of CRLs initialized with 
+      the InputStream data.
+ 
+      @throws CRLException CRL parsing error
+   */
+   public abstract Collection engineGenerateCRLs(InputStream inStream)
+     throws CRLException;
+ 
+   // 1.4 instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Generate a {@link CertPath} and initialize it with data parsed from
+    * the input stream. The default encoding of this factory is used.
+    *
+    * @param inStream The InputStream containing the CertPath data.
+    * @return A CertPath initialized from the input stream data.
+    * @throws CertificateException If an error occurs decoding the
+    * CertPath.
+    */
+   public CertPath engineGenerateCertPath(InputStream inStream)
+     throws CertificateException
+   {
+     throw new UnsupportedOperationException("not implemented");
+   }
+ 
+   /**
+    * Generate a {@link CertPath} and initialize it with data parsed from
+    * the input stream, using the specified encoding.
+    *
+    * @param inStream The InputStream containing the CertPath data.
+    * @param encoding The encoding of the InputStream data.
+    * @return A CertPath initialized from the input stream data.
+    * @throws CertificateException If an error occurs decoding the
+    *   CertPath.
+    */
+   public CertPath engineGenerateCertPath(InputStream inStream, String encoding)
+     throws CertificateException
+   {
+     throw new UnsupportedOperationException("not implemented");
+   }
+ 
+   /**
+    * Generate a {@link CertPath} and initialize it with the certificates
+    * in the {@link java.util.List} argument.
+    *
+    * @param certificates The list of certificates with which to create
+    *   the CertPath.
+    * @return A CertPath initialized from the certificates.
+    * @throws CertificateException If an error occurs generating the
+    *   CertPath.
+    */
+   public CertPath engineGenerateCertPath(List certificates)
+     throws CertificateException
+   {
+     throw new UnsupportedOperationException("not implemented");
+   }
+ 
+   /**
+    * Returns an Iterator of CertPath encodings supported by this
+    * factory, with the default encoding first. The returned Iterator
+    * cannot be modified.
+    *
+    * @return The Iterator of supported encodings.
+    */
+   public Iterator engineGetCertPathEncodings()
+   {
+     throw new UnsupportedOperationException("not implemented");
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertificateNotYetValidException.java gcc-4.1.0/libjava/classpath/java/security/cert/CertificateNotYetValidException.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertificateNotYetValidException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertificateNotYetValidException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* CertificateNotYetValidException.java -- Certificate Not Yet Valid Exception
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * Exception for a Certificate that is not yet valid.
+  *
+  * @author Mark Benvenuto
+  * @since 1.2
+  * @status updated to 1.4
+ */
+ public class CertificateNotYetValidException extends CertificateException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 4355919900041064702L;
+ 
+   /**
+    * Constructs an exception without a message string.
+    */
+   public CertificateNotYetValidException()
+   {
+   }
+ 
+   /**
+    * Constructs an exception with a message string.
+    *
+    * @param msg A message to display with exception
+    */
+   public CertificateNotYetValidException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CertificateParsingException.java gcc-4.1.0/libjava/classpath/java/security/cert/CertificateParsingException.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CertificateParsingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CertificateParsingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* CertificateParsingException.java -- Certificate Parsing Exception
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * Exception for parsing a DER-encoded Certificate.
+  *
+  * @author Mark Benvenuto
+  * @since 1.2
+  * @status updated to 1.4
+ */
+ public class CertificateParsingException extends CertificateException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -7989222416793322029L;
+ 
+   /**
+    * Constructs an exception without a message string.
+    */
+   public CertificateParsingException()
+   {
+   }
+ 
+   /**
+    * Constructs an exception with a message string.
+    *
+    * @param msg a message to display with exception
+    */
+   public CertificateParsingException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/CollectionCertStoreParameters.java gcc-4.1.0/libjava/classpath/java/security/cert/CollectionCertStoreParameters.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/CollectionCertStoreParameters.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/CollectionCertStoreParameters.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,121 ----
+ /* CollectionCertStoreParameters -- collection-based cert store parameters
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ 
+ /**
+  * An implementation of {@link CertStoreParameters} with a simple,
+  * in-memory {@link Collection} of certificates and certificate
+  * revocation list.
+  *
+  * <p>Note that this class is not thread-safe, and its underlying
+  * collection may be changed at any time.
+  *
+  * @see CertStore
+  */
+ public class CollectionCertStoreParameters implements CertStoreParameters
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The underlying collection. */
+   private final Collection collection;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new CollectionCertStoreParameters with an empty,
+    * immutable collection.
+    */
+   public CollectionCertStoreParameters()
+   {
+     this(Collections.EMPTY_LIST);
+   }
+ 
+   /**
+    * Create a new CollectionCertStoreParameters with the specified
+    * collection. The argument is not copied, and subsequent changes to
+    * the collection will change this class's collection.
+    *
+    * @param collection The collection.
+    * @throws NullPointerException If <i>collection</i> is null.
+    */
+   public CollectionCertStoreParameters(Collection collection)
+   {
+     if (collection == null)
+       throw new NullPointerException();
+     this.collection = collection;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   public Object clone()
+   {
+     return new CollectionCertStoreParameters(new ArrayList(collection));
+   }
+ 
+   /**
+    * Return the underlying collection. The collection is not copied
+    * before being returned, so callers may update the collection that is
+    * returned.
+    *
+    * @return The collection.
+    */
+   public Collection getCollection()
+   {
+     return collection;
+   }
+ 
+   /**
+    * Return a string representation of these parameters.
+    *
+    * @return The string representation of these parameters.
+    */
+   public String toString()
+   {
+     return "CollectionCertStoreParameters: [ collection: "
+       + collection + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/LDAPCertStoreParameters.java gcc-4.1.0/libjava/classpath/java/security/cert/LDAPCertStoreParameters.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/LDAPCertStoreParameters.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/LDAPCertStoreParameters.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* LDAPCertStoreParameters.java -- LDAP CertStore parameters.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * Parameters for CertStores that are retrieved via the <i>lightweight
+  * directory access protocol</i> (<b>LDAP</b>).
+  *
+  * @see CertStore
+  */
+ public class LDAPCertStoreParameters implements CertStoreParameters
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The default LDAP port. */
+   private static final int LDAP_PORT = 389;
+ 
+   /** The server name. */
+   private final String serverName;
+ 
+   /** The LDAP port. */
+   private final int port;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new LDAPCertStoreParameters object, with a servername of
+    * "localhost" and a port of 389.
+    */
+   public LDAPCertStoreParameters()
+   {
+     this("localhost", LDAP_PORT);
+   }
+ 
+   /**
+    * Create a new LDAPCertStoreParameters object, with a specified
+    * server name and a port of 389.
+    *
+    * @param serverName The LDAP server name.
+    * @throws NullPointerException If <i>serverName</i> is null.
+    */
+   public LDAPCertStoreParameters(String serverName)
+   {
+     this(serverName, LDAP_PORT);
+   }
+ 
+   /**
+    * Create a new LDAPCertStoreParameters object, with a specified
+    * server name and port.
+    *
+    * @param serverName The LDAP server name.
+    * @param port       The LDAP port.
+    * @throws NullPointerException If <i>serverName</i> is null.
+    */
+   public LDAPCertStoreParameters(String serverName, int port)
+   {
+     if (serverName == null)
+       throw new NullPointerException();
+     this.serverName = serverName;
+     this.port = port;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   public Object clone()
+   {
+     return new LDAPCertStoreParameters(serverName, port);
+   }
+ 
+   /**
+    * Return the server name.
+    *
+    * @return The server name.
+    */
+   public String getServerName()
+   {
+     return serverName;
+   }
+ 
+   /**
+    * Return the port.
+    *
+    * @return the port.
+    */
+   public int getPort()
+   {
+     return port;
+   }
+ 
+   /**
+    * Return a string representation of these parameters.
+    *
+    * @return The string representation of these parameters.
+    */
+   public String toString()
+   {
+     return "LDAPCertStoreParameters: [ serverName: " + serverName
+       + "; port: " + port + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/PKIXBuilderParameters.java gcc-4.1.0/libjava/classpath/java/security/cert/PKIXBuilderParameters.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/PKIXBuilderParameters.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/PKIXBuilderParameters.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,145 ----
+ /* PKIXBuilderParameters.java -- parameters for PKIX cert path builders
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.KeyStore;
+ import java.security.KeyStoreException;
+ 
+ import java.util.Set;
+ 
+ /**
+  * Parameters for building certificate paths using the PKIX algorithm.
+  *
+  * @see CertPathBuilder
+  */
+ public class PKIXBuilderParameters extends PKIXParameters
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The maximum path length. */
+   private int maxPathLength;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new PKIXBuilderParameters object, populating the trusted
+    * certificates set with all X.509 certificates found in the given key
+    * store. All certificates found in the key store are assumed to be
+    * trusted by this constructor.
+    *
+    * @param keystore The key store.
+    * @param targetConstraints The target certificate constraints.
+    * @throws KeyStoreException If the certificates cannot be retrieved
+    *         from the key store.
+    * @throws InvalidAlgorithmParameterException If there are no
+    *         certificates in the key store.
+    * @throws NullPointerException If <i>keystore</i> is null.
+    */
+   public PKIXBuilderParameters(KeyStore keystore,
+                                CertSelector targetConstraints)
+     throws KeyStoreException, InvalidAlgorithmParameterException
+   {
+     super(keystore);
+     setTargetCertConstraints(targetConstraints);
+     maxPathLength = 5;
+   }
+ 
+   /**
+    * Create a new PKIXBuilderParameters object, populating the trusted
+    * certificates set with the elements of the given set, each of which
+    * must be a {@link TrustAnchor}.
+    *
+    * @param trustAnchors The set of trust anchors.
+    * @param targetConstraints The target certificate constraints.
+    * @throws InvalidAlgorithmParameterException If there are no
+    *         certificates in the set.
+    * @throws NullPointerException If <i>trustAnchors</i> is null.
+    * @throws ClassCastException If every element in <i>trustAnchors</i>
+    *         is not a {@link TrustAnchor}.
+    */
+   public PKIXBuilderParameters(Set trustAnchors, CertSelector targetConstraints)
+     throws InvalidAlgorithmParameterException
+   {
+     super(trustAnchors);
+     setTargetCertConstraints(targetConstraints);
+     maxPathLength = 5;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the maximum length of certificate paths to build.
+    *
+    * <p>If this value is 0 it is taken to mean that the certificate path
+    * should contain only one certificate. A value of -1 means that the
+    * certificate path length is unconstrained. The default value is 5.
+    *
+    * @return The maximum path length.
+    */
+   public int getMaxPathLength()
+   {
+     return maxPathLength;
+   }
+ 
+   /**
+    * Sets the maximum length of certificate paths to build.
+    *
+    * @param maxPathLength The new path length.
+    * @throws IllegalArgumentException If <i>maxPathLength</i> is less
+    *         than -1.
+    */
+   public void setMaxPathLength(int maxPathLength)
+   {
+     if (maxPathLength < -1)
+       throw new IllegalArgumentException();
+     this.maxPathLength = maxPathLength;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(super.toString());
+     buf.insert(buf.length() - 2, "; Max Path Length=" + maxPathLength);
+     return buf.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/PKIXCertPathBuilderResult.java gcc-4.1.0/libjava/classpath/java/security/cert/PKIXCertPathBuilderResult.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/PKIXCertPathBuilderResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/PKIXCertPathBuilderResult.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* PKIXCertPathBuilderResult.java -- PKIX cert path bulider result
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ /**
+  * The result of calling the {@link
+  * CertPathBuilder#build(java.security.cert.CertPathParameters)} method
+  * of PKIX {@link CertPathBuilder}s.
+  *
+  * @see CertPathBuilder
+  * @see CertPathBuilderResult
+  */
+ public class PKIXCertPathBuilderResult extends PKIXCertPathValidatorResult
+   implements CertPathBuilderResult
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The certificate path. */
+   private CertPath certPath;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new PKIXCertPathBuilderResult.
+    *
+    * @param certPath         The certificate path.
+    * @param trustAnchor      The trust anchor.
+    * @param policyTree       The root node of the policy tree.
+    * @param subjectPublicKey The public key.
+    * @throws NullPointerException If <i>certPath</i>, <i>trustAnchor</i> or
+    *         <i>subjectPublicKey</i> is null.
+    */
+   public PKIXCertPathBuilderResult(CertPath certPath,
+                                    TrustAnchor trustAnchor,
+                                    PolicyNode policyTree,
+                                    java.security.PublicKey subjectPublicKey)
+   {
+     super(trustAnchor, policyTree, subjectPublicKey);
+     if (certPath == null)
+       throw new NullPointerException();
+     this.certPath = certPath;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the certificate path that was built.
+    *
+    * @return The certificate path that was built.
+    */
+   public CertPath getCertPath()
+   {
+     return certPath;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer(super.toString());
+     buf.insert(buf.length() - 2, "; CertPath=" + certPath);
+     return buf.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/PKIXCertPathChecker.java gcc-4.1.0/libjava/classpath/java/security/cert/PKIXCertPathChecker.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/PKIXCertPathChecker.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/PKIXCertPathChecker.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,133 ----
+ /* PKIXCertPathChecker.java -- checks X.509 certificate paths.
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.util.Collection;
+ import java.util.Set;
+ 
+ /**
+  * A validator for X.509 certificates when approving certificate chains.
+  *
+  * <p>Concrete subclasses can be passed to the {@link
+  * PKIXParameters#setCertPathCheckers(java.util.List)} and {@link
+  * PKIXParameters#addCertPathChecker(java.security.cert.PKIXCertPathChecker}
+  * methods, which are then used to set up PKIX certificate chain
+  * builders or validators. These classes then call the {@link
+  * #check(java.security.cert.Certificate,java.util.Collection)} method
+  * of this class, performing whatever checks on the certificate,
+  * throwing an exception if any check fails.
+  *
+  * <p>Subclasses of this must be able to perform their checks in the
+  * backward direction -- from the most-trusted certificate to the target
+  * -- and may optionally support forward checking -- from the target to
+  * the most-trusted certificate.
+  *
+  * @see PKIXParameters
+  */
+ public abstract class PKIXCertPathChecker implements Cloneable
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /** Default constructor. */
+   protected PKIXCertPathChecker()
+   {
+     super();
+   }
+ 
+   // Cloneable interface.
+   // ------------------------------------------------------------------------
+ 
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException cnse)
+       {
+         throw new InternalError(cnse.getMessage());
+       }
+   }
+ 
+   // Abstract methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Initialize this PKIXCertPathChecker. If subclasses support forward
+    * checking, a value of true can be passed to this method, and
+    * certificates can be validated from the target certificate to the
+    * most-trusted certifcate.
+    *
+    * @param forward The direction of this PKIXCertPathChecker.
+    * @throws CertPathValidatorException If <i>forward</i> is true and
+    *         this class does not support forward checking.
+    */
+   public abstract void init(boolean forward) throws CertPathValidatorException;
+ 
+   /**
+    * Returns whether or not this class supports forward checking.
+    *
+    * @return Whether or not this class supports forward checking.
+    */
+   public abstract boolean isForwardCheckingSupported();
+ 
+   /**
+    * Returns an immutable set of X.509 extension object identifiers (OIDs)
+    * supported by this PKIXCertPathChecker.
+    *
+    * @return An immutable set of Strings of the supported X.509 OIDs, or
+    *         null if no extensions are supported.
+    */
+   public abstract Set getSupportedExtensions();
+ 
+   /**
+    * Checks a certificate, removing any critical extensions that are
+    * resolved in this check.
+    *
+    * @param cert               The certificate to check.
+    * @param unresolvedCritExts The (mutable) collection of as-of-yet
+    *        unresolved critical extensions, as OID strings.
+    * @throws CertPathValidatorException If this certificate fails this
+    *         check.
+    */
+   public abstract void check(Certificate cert, Collection unresolvedCritExts)
+   throws CertPathValidatorException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/PKIXCertPathValidatorResult.java gcc-4.1.0/libjava/classpath/java/security/cert/PKIXCertPathValidatorResult.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/PKIXCertPathValidatorResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/PKIXCertPathValidatorResult.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,142 ----
+ /* PKIXCertPathValidatorResult.java -- PKIX cert path builder result
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.security.PublicKey;
+ 
+ /**
+  * Results returned by the {@link
+  * CertPathValidator#validate(java.security.cert.CertPath,java.security.cert.CertPathParameters)}
+  * method for PKIX {@link CertPathValidator}s.
+  *
+  * @see CertPathValidator
+  */
+ public class PKIXCertPathValidatorResult implements CertPathValidatorResult
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The trust anchor. */
+   private final TrustAnchor trustAnchor;
+ 
+   /** The root node of the policy tree. */
+   private final PolicyNode policyTree;
+ 
+   /** The subject's public key. */
+   private final PublicKey subjectPublicKey;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new PKIXCertPathValidatorResult.
+    *
+    * @param trustAnchor      The trust anchor.
+    * @param policyTree       The root node of the policy tree.
+    * @param subjectPublicKey The public key.
+    * @throws NullPointerException If either <i>trustAnchor</i> or
+    *         <i>subjectPublicKey</i> is null.
+    */
+   public PKIXCertPathValidatorResult(TrustAnchor trustAnchor,
+                                      PolicyNode policyTree,
+                                      PublicKey subjectPublicKey)
+   {
+     if (trustAnchor == null || subjectPublicKey == null)
+       throw new NullPointerException();
+     this.trustAnchor = trustAnchor;
+     this.policyTree = policyTree;
+     this.subjectPublicKey = subjectPublicKey;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the trust anchor.
+    *
+    * @return The trust anchor.
+    */
+   public TrustAnchor getTrustAnchor()
+   {
+     return trustAnchor;
+   }
+ 
+   /**
+    * Returns the root node of the policy tree.
+    *
+    * @return The root node of the policy tree.
+    */
+   public PolicyNode getPolicyTree()
+   {
+     return policyTree;
+   }
+ 
+   /**
+    * Returns the subject public key.
+    *
+    * @return The subject public key.
+    */
+   public PublicKey getPublicKey()
+   {
+     return subjectPublicKey;
+   }
+ 
+   /**
+    * Returns a copy of this object.
+    *
+    * @return The copy.
+    */
+   public Object clone()
+   {
+     return new PKIXCertPathValidatorResult(trustAnchor, policyTree,
+                                            subjectPublicKey);
+   }
+ 
+   /**
+    * Returns a printable string representation of this result.
+    *
+    * @return A printable string representation of this result.
+    */
+   public String toString()
+   {
+     return "[ Trust Anchor=" + trustAnchor + "; Policy Tree="
+       + policyTree + "; Subject Public Key=" + subjectPublicKey + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/PKIXParameters.java gcc-4.1.0/libjava/classpath/java/security/cert/PKIXParameters.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/PKIXParameters.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/PKIXParameters.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,546 ----
+ /* PKIXParameters.java -- parameters for the PKIX cert path algorithm
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.KeyStore;
+ import java.security.KeyStoreException;
+ 
+ import java.util.Collections;
+ import java.util.Date;
+ import java.util.Enumeration;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Set;
+ 
+ /**
+  * Parameters for verifying certificate paths using the PKIX
+  * (Public-Key Infrastructure (X.509)) algorithm.
+  *
+  * @see CertPathBulider
+  */
+ public class PKIXParameters implements CertPathParameters
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The trusted certificates. */
+   private final Set trustAnchors;
+ 
+   /** The set of initial policy identifiers. */
+   private final Set initPolicies;
+ 
+   /** The list of certificate stores. */
+   private final List certStores;
+ 
+   /** The list of path checkers. */
+   private final List pathCheckers;
+ 
+   /** The revocation enabled flag. */
+   private boolean revocationEnabled;
+ 
+   /** The explicit policy required flag. */
+   private boolean exPolicyRequired;
+ 
+   /** The policy mapping inhibited flag. */
+   private boolean policyMappingInhibited;
+ 
+   /** The any policy inhibited flag. */
+   private boolean anyPolicyInhibited;
+ 
+   /** The policy qualifiers rejected flag. */
+   private boolean policyQualRejected;
+ 
+   /** The target validation date. */
+   private Date date;
+ 
+   /** The signature algorithm provider. */
+   private String sigProvider;
+ 
+   /** The target constraints. */
+   private CertSelector targetConstraints;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new PKIXParameters object, populating the trusted
+    * certificates set with all certificates found in the given key
+    * store. All certificates found in the key store are assumed to be
+    * trusted by this constructor.
+    *
+    * @param keystore The key store.
+    * @throws KeyStoreException If the certificates cannot be retrieved
+    *         from the key store.
+    * @throws InvalidAlgorithmParameterException If there are no
+    *         certificates in the key store.
+    * @throws NullPointerException If <i>keystore</i> is null.
+    */
+   public PKIXParameters(KeyStore keystore)
+     throws KeyStoreException, InvalidAlgorithmParameterException
+   {
+     this();
+     for (Enumeration e = keystore.aliases(); e.hasMoreElements(); )
+       {
+         String alias = (String) e.nextElement();
+         if (!keystore.isCertificateEntry(alias))
+           continue;
+         Certificate cert = keystore.getCertificate(alias);
+         if (cert instanceof X509Certificate)
+           trustAnchors.add(new TrustAnchor((X509Certificate) cert, null));
+       }
+     if (trustAnchors.isEmpty())
+       throw new InvalidAlgorithmParameterException("no certs in the key store");
+   }
+ 
+   /**
+    * Create a new PKIXParameters object, populating the trusted
+    * certificates set with the elements of the given set, each of which
+    * must be a {@link TrustAnchor}.
+    *
+    * @param trustAnchors The set of trust anchors.
+    * @throws InvalidAlgorithmParameterException If there are no
+    *         certificates in the set.
+    * @throws NullPointerException If <i>trustAnchors</i> is null.
+    * @throws ClassCastException If every element in <i>trustAnchors</i>
+    *         is not a {@link TrustAnchor}.
+    */
+   public PKIXParameters(Set trustAnchors)
+     throws InvalidAlgorithmParameterException
+   {
+     this();
+     setTrustAnchors(trustAnchors);
+   }
+ 
+   /**
+    * Default constructor.
+    */
+   private PKIXParameters()
+   {
+     trustAnchors = new HashSet();
+     initPolicies = new HashSet();
+     certStores = new LinkedList();
+     pathCheckers = new LinkedList();
+     revocationEnabled = true;
+     exPolicyRequired = false;
+     policyMappingInhibited = false;
+     anyPolicyInhibited = false;
+     policyQualRejected = true;
+   }
+ 
+   /**
+    * Copying constructor for cloning.
+    *
+    * @param that The instance being cloned.
+    */
+   private PKIXParameters(PKIXParameters that)
+   {
+     this();
+     this.trustAnchors.addAll(that.trustAnchors);
+     this.initPolicies.addAll(that.initPolicies);
+     this.certStores.addAll(that.certStores);
+     this.pathCheckers.addAll(that.pathCheckers);
+     this.revocationEnabled = that.revocationEnabled;
+     this.exPolicyRequired = that.exPolicyRequired;
+     this.policyMappingInhibited = that.policyMappingInhibited;
+     this.anyPolicyInhibited = that.anyPolicyInhibited;
+     this.policyQualRejected = that.policyQualRejected;
+     this.date = that.date;
+     this.sigProvider = that.sigProvider;
+     this.targetConstraints = that.targetConstraints != null
+       ? (CertSelector) that.targetConstraints.clone() : null;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns an immutable set of trust anchors. The set returned will
+    * never be null and will never be empty.
+    *
+    * @return A (never null, never empty) immutable set of trust anchors.
+    */
+   public Set getTrustAnchors()
+   {
+     return Collections.unmodifiableSet(trustAnchors);
+   }
+ 
+   /**
+    * Sets the trust anchors of this class, replacing the current trust
+    * anchors with those in the given set. The supplied set is copied to
+    * prevent modification.
+    *
+    * @param trustAnchors The new set of trust anchors.
+    * @throws InvalidAlgorithmParameterException If there are no
+    *         certificates in the set.
+    * @throws NullPointerException If <i>trustAnchors</i> is null.
+    * @throws ClassCastException If every element in <i>trustAnchors</i>
+    *         is not a {@link TrustAnchor}.
+    */
+   public void setTrustAnchors(Set trustAnchors)
+     throws InvalidAlgorithmParameterException
+   {
+     if (trustAnchors.isEmpty())
+       throw new InvalidAlgorithmParameterException("no trust anchors");
+     this.trustAnchors.clear();
+     for (Iterator i = trustAnchors.iterator(); i.hasNext(); )
+       {
+         this.trustAnchors.add((TrustAnchor) i.next());
+       }
+   }
+ 
+   /**
+    * Returns the set of initial policy identifiers (as OID strings). If
+    * any policy is accepted, this method returns the empty set.
+    *
+    * @return An immutable set of initial policy OID strings, or the
+    *         empty set if any policy is acceptable.
+    */
+   public Set getInitialPolicies()
+   {
+     return Collections.unmodifiableSet(initPolicies);
+   }
+ 
+   /**
+    * Sets the initial policy identifiers (as OID strings). If the
+    * argument is null or the empty set, then any policy identifier will
+    * be accepted.
+    *
+    * @param initPolicies The new set of policy strings, or null.
+    * @throws ClassCastException If any element in <i>initPolicies</i> is
+    *         not a string.
+    */
+   public void setInitialPolicies(Set initPolicies)
+   {
+     this.initPolicies.clear();
+     if (initPolicies == null)
+       return;
+     for (Iterator i = initPolicies.iterator(); i.hasNext(); )
+       {
+         this.initPolicies.add((String) i.next());
+       }
+   }
+ 
+   /**
+    * Add a {@link CertStore} to the list of cert stores.
+    *
+    * @param store The CertStore to add.
+    */
+   public void addCertStore(CertStore store)
+   {
+     if (store != null)
+       certStores.add(store);
+   }
+ 
+   /**
+    * Returns an immutable list of cert stores. This method never returns
+    * null.
+    *
+    * @return The list of cert stores.
+    */
+   public List getCertStores()
+   {
+     return Collections.unmodifiableList(certStores);
+   }
+ 
+   /**
+    * Set the cert stores. If the argument is null the list of cert
+    * stores will be empty.
+    *
+    * @param certStores The cert stores.
+    */
+   public void setCertStores(List certStores)
+   {
+     this.certStores.clear();
+     if (certStores == null)
+       return;
+     for (Iterator i = certStores.iterator(); i.hasNext(); )
+       {
+         this.certStores.add((CertStore) i.next());
+       }
+   }
+ 
+   /**
+    * Returns the value of the <i>revocation enabled</i> flag. The default
+    * value for this flag is <code>true</code>.
+    *
+    * @return The <i>revocation enabled</i> flag.
+    */
+   public boolean isRevocationEnabled()
+   {
+     return revocationEnabled;
+   }
+ 
+   /**
+    * Sets the value of the <i>revocation enabled</i> flag.
+    *
+    * @param value The new value.
+    */
+   public void setRevocationEnabled(boolean value)
+   {
+     revocationEnabled = value;
+   }
+ 
+   /**
+    * Returns the value of the <i>explicit policy required</i> flag. The
+    * default value of this flag is <code>false</code>.
+    *
+    * @return The <i>explicit policy required</i> flag.
+    */
+   public boolean isExplicitPolicyRequired()
+   {
+     return exPolicyRequired;
+   }
+ 
+   /**
+    * Sets the value of the <i>explicit policy required</i> flag.
+    *
+    * @param value The new value.
+    */
+   public void setExplicitPolicyRequired(boolean value)
+   {
+     exPolicyRequired = value;
+   }
+ 
+   /**
+    * Returns the value of the <i>policy mapping inhibited</i> flag. The
+    * default value of this flag is <code>false</code>.
+    *
+    * @return The <i>policy mapping inhibited</i> flag.
+    */
+   public boolean isPolicyMappingInhibited()
+   {
+     return policyMappingInhibited;
+   }
+ 
+   /**
+    * Sets the value of the <i>policy mapping inhibited</i> flag.
+    *
+    * @param value The new value.
+    */
+   public void setPolicyMappingInhibited(boolean value)
+   {
+     policyMappingInhibited = value;
+   }
+ 
+   /**
+    * Returns the value of the <i>any policy inhibited</i> flag. The
+    * default value of this flag is <code>false</code>.
+    *
+    * @return The <i>any policy inhibited</i> flag.
+    */
+   public boolean isAnyPolicyInhibited()
+   {
+     return anyPolicyInhibited;
+   }
+ 
+   /**
+    * Sets the value of the <i>any policy inhibited</i> flag.
+    *
+    * @param value The new value.
+    */
+   public void setAnyPolicyInhibited(boolean value)
+   {
+     anyPolicyInhibited = value;
+   }
+ 
+   /**
+    * Returns the value of the <i>policy qualifiers enabled</i> flag. The
+    * default value of this flag is <code>true</code>.
+    *
+    * @return The <i>policy qualifiers enabled</i> flag.
+    */
+   public boolean getPolicyQualifiersRejected()
+   {
+     return policyQualRejected;
+   }
+ 
+   /**
+    * Sets the value of the <i>policy qualifiers enabled</i> flag.
+    *
+    * @param value The new value.
+    */
+   public void setPolicyQualifiersRejected(boolean value)
+   {
+     policyQualRejected = value;
+   }
+ 
+   /**
+    * Returns the date for which the certificate path should be
+    * validated, or null if the current time should be used. The date
+    * object is copied to prevent subsequent modification.
+    *
+    * @return The date, or null if not set.
+    */
+   public Date getDate()
+   {
+     return date != null ? (Date) date.clone() : null;
+   }
+ 
+   /**
+    * Sets the date for which the certificate path should be validated,
+    * or null if the current time should be used.
+    *
+    * @param date The new date, or null.
+    */
+   public void setDate(Date date)
+   {
+     if (date != null)
+       this.date = (Date) date.clone();
+     else
+       this.date = null;
+   }
+ 
+   /**
+    * Add a certificate path checker.
+    *
+    * @param checker The certificate path checker to add.
+    */
+   public void addCertPathChecker(PKIXCertPathChecker checker)
+   {
+     if (checker != null)
+       pathCheckers.add(checker);
+   }
+ 
+   /**
+    * Returns an immutable list of all certificate path checkers.
+    *
+    * @return An immutable list of all certificate path checkers.
+    */
+   public List getCertPathCheckers()
+   {
+     return Collections.unmodifiableList(pathCheckers);
+   }
+ 
+   /**
+    * Sets the certificate path checkers. If the argument is null, the
+    * list of checkers will merely be cleared.
+    *
+    * @param pathCheckers The new list of certificate path checkers.
+    * @throws ClassCastException If any element of <i>pathCheckers</i> is
+    *         not a {@link PKIXCertPathChecker}.
+    */
+   public void setCertPathCheckers(List pathCheckers)
+   {
+     this.pathCheckers.clear();
+     if (pathCheckers == null)
+       return;
+     for (Iterator i = pathCheckers.iterator(); i.hasNext(); )
+       {
+         this.pathCheckers.add((PKIXCertPathChecker) i.next());
+       }
+   }
+ 
+   /**
+    * Returns the signature algorithm provider, or null if not set.
+    *
+    * @return The signature algorithm provider, or null if not set.
+    */
+   public String getSigProvider()
+   {
+     return sigProvider;
+   }
+ 
+   /**
+    * Sets the signature algorithm provider, or null if there is no
+    * preferred provider.
+    *
+    * @param sigProvider The signature provider name.
+    */
+   public void setSigProvider(String sigProvider)
+   {
+     this.sigProvider = sigProvider;
+   }
+ 
+   /**
+    * Returns the constraints placed on the target certificate, or null
+    * if there are none. The target constraints are copied to prevent
+    * subsequent modification.
+    *
+    * @return The target constraints, or null.
+    */
+   public CertSelector getTargetCertConstraints()
+   {
+     return targetConstraints != null
+       ? (CertSelector) targetConstraints.clone() : null;
+   }
+ 
+   /**
+    * Sets the constraints placed on the target certificate.
+    *
+    * @param targetConstraints The target constraints.
+    */
+   public void setTargetCertConstraints(CertSelector targetConstraints)
+   {
+     this.targetConstraints = targetConstraints != null
+       ? (CertSelector) targetConstraints.clone() : null;
+   }
+ 
+   /**
+    * Returns a copy of these parameters.
+    *
+    * @return The copy.
+    */
+   public Object clone()
+   {
+     return new PKIXParameters(this);
+   }
+ 
+   /**
+    * Returns a printable representation of these parameters.
+    *
+    * @return A printable representation of these parameters.
+    */
+   public String toString() {
+     return "[ Trust Anchors: " + trustAnchors + "; Initial Policy OIDs="
+       + (initPolicies != null ? initPolicies.toString() : "any")
+       + "; Validity Date=" + date + "; Signature Provider="
+       + sigProvider + "; Default Revocation Enabled=" + revocationEnabled
+       + "; Explicit Policy Required=" + exPolicyRequired
+       + "; Policy Mapping Inhibited=" + policyMappingInhibited
+       + "; Any Policy Inhibited=" + anyPolicyInhibited
+       + "; Policy Qualifiers Rejected=" + policyQualRejected
+       + "; Target Cert Contstraints=" + targetConstraints
+       + "; Certification Path Checkers=" + pathCheckers
+       + "; CertStores=" + certStores + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/PolicyNode.java gcc-4.1.0/libjava/classpath/java/security/cert/PolicyNode.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/PolicyNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/PolicyNode.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* PolicyNode.java -- a single node in a policy tree
+    Copyright (C) 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ public interface PolicyNode
+ {
+ 
+   /**
+    * Get the iterator of the child nodes of this node. The returned
+    * iterator is (naturally) unmodifiable.
+    *
+    * @return An iterator over the child nodes.
+    */
+   java.util.Iterator getChildren();
+ 
+   /**
+    * Get the depth of this node within the tree, starting at 0 for the
+    * root node.
+    *
+    * @return The depth of this node.
+    */
+   int getDepth();
+ 
+   /**
+    * Returns a set of policies (string OIDs) that will satisfy this
+    * node's policy. The root node should always return the singleton set
+    * with the element "any-policy".
+    *
+    * @return The set of expected policies.
+    */
+   java.util.Set getExpectedPolicies();
+ 
+   /**
+    * Returns the parent node of this node, or null if this is the root
+    * node.
+    *
+    * @return The parent node, or null.
+    */
+   PolicyNode getParent();
+ 
+   /**
+    * Returns a set of {@link PolicyQualifierInfo} objects that qualify
+    * the valid policy of this node. The root node should always return
+    * the empty set.
+    *
+    * @return The set of {@link PolicyQualifierInfo} objects.
+    */
+   java.util.Set getPolicyQualifiers();
+ 
+   /**
+    * Get the policy OID this node represents. The root node should return
+    * the special value "any-policy".
+    *
+    * @return The policy of this node.
+    */
+   String getValidPolicy();
+ 
+   /**
+    * Return the criticality flag of this policy node. Nodes who return
+    * true for this method should be considered critical. The root node
+    * is never critical.
+    *
+    * @return The criticality flag.
+    */
+   boolean isCritical();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/PolicyQualifierInfo.java gcc-4.1.0/libjava/classpath/java/security/cert/PolicyQualifierInfo.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/PolicyQualifierInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/PolicyQualifierInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,168 ----
+ /* PolicyQualifierInfo.java -- policy qualifier info object.
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import gnu.java.io.ASN1ParsingException;
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.IOException;
+ 
+ /**
+  * The PolicyQualifierInfo X.509 certificate extension.
+  * PolicyQualifierInfo objects are represented by the ASN.1 structure:
+  *
+  * <pre>
+  * PolicyQualifierInfo ::= SEQUENCE {
+  *    policyQualifierId   PolicyQualifierId,
+  *    qualifier           ANY DEFINED BY policyQualifierId
+  * }
+  *
+  * PolicyQualifierId ::= OBJECT IDENTIFIER
+  * </pre>
+  *
+  * @since JDK 1.4
+  */
+ public final class PolicyQualifierInfo
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The <code>policyQualifierId</code> field. */
+   private OID oid;
+ 
+   /** The DER encoded form of this object. */
+   private byte[] encoded;
+ 
+   /** The DER encoded form of the <code>qualifier</code> field. */
+   private DERValue qualifier;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new PolicyQualifierInfo object from the DER encoded form
+    * passed in the byte array. The argument is copied.
+    *
+    * <p>The ASN.1 form of PolicyQualifierInfo is:
+ <pre>
+ PolicyQualifierInfo ::= SEQUENCE {
+    policyQualifierId     PolicyQualifierId,
+    qualifier             ANY DEFINED BY policyQualifierId
+ }
+ 
+ PolicyQualifierId ::= OBJECT IDENTIFIER
+ </pre>
+    *
+    * @param encoded The DER encoded form.
+    * @throws IOException If the structure cannot be parsed from the
+    *         encoded bytes.
+    */
+   public PolicyQualifierInfo(byte[] encoded) throws IOException
+   {
+     if (encoded == null)
+       throw new IOException("null bytes");
+     this.encoded = (byte[]) encoded.clone();
+     DERReader in = new DERReader(new ByteArrayInputStream(this.encoded));
+     DERValue qualInfo = in.read();
+     if (!qualInfo.isConstructed())
+       throw new ASN1ParsingException("malformed PolicyQualifierInfo");
+     DERValue val = in.read();
+     if (!(val.getValue() instanceof OID))
+       throw new ASN1ParsingException("value read not an OBJECT IDENTIFIER");
+     oid = (OID) val.getValue();
+     if (val.getEncodedLength() < val.getLength())
+       qualifier = in.read();
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the <code>policyQualifierId</code> field of this structure,
+    * as a dotted-decimal representation of the object identifier.
+    *
+    * @return This structure's OID field.
+    */
+   public String getPolicyQualifierId()
+   {
+     return oid.toString();
+   }
+ 
+   /**
+    * Returns the DER encoded form of this object; the contents of the
+    * returned byte array are equivalent to those that were passed to the
+    * constructor. The byte array is cloned every time this method is
+    * called.
+    *
+    * @return The encoded form.
+    */
+   public byte[] getEncoded()
+   {
+     return (byte[]) encoded.clone();
+   }
+ 
+   /**
+    * Get the <code>qualifier</code> field of this object, as a DER
+    * encoded byte array. The byte array returned is cloned every time
+    * this method is called.
+    *
+    * @return The encoded qualifier.
+    */
+   public byte[] getPolicyQualifier()
+   {
+     if (qualifier == null)
+       return new byte[0];
+     return qualifier.getEncoded();
+   }
+ 
+   /**
+    * Returns a printable string representation of this object.
+    *
+    * @return The string representation.
+    */
+   public String toString()
+   {
+     return "PolicyQualifierInfo { policyQualifierId ::= " + oid
+       + ", qualifier ::= " + qualifier + " }";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/TrustAnchor.java gcc-4.1.0/libjava/classpath/java/security/cert/TrustAnchor.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/TrustAnchor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/TrustAnchor.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,185 ----
+ /* TrustAnchor.java -- an ultimately-trusted certificate.
+    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import gnu.java.security.x509.X500DistinguishedName;
+ 
+ import java.security.PublicKey;
+ 
+ /**
+  * An ultimately-trusted certificate to serve as the root of a
+  * certificate chain.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class TrustAnchor
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The certificate authority's distinguished name. */
+   private final X500DistinguishedName caName;
+ 
+   /** The certficate authority's public key. */
+   private final PublicKey caKey;
+ 
+   /** The certficate authority's certificate. */
+   private final X509Certificate trustedCert;
+ 
+   /** The encoded name constraints bytes. */
+   private final byte[] nameConstraints;
+ 
+   // Constnuctors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new trust anchor from a certificate and (optional) name
+    * constraints.
+    *
+    * <p>If the <i>nameConstraints</i> argument in non-null, it will be
+    * copied to prevent modification.
+    *
+    * @param trustedCert The trusted certificate.
+    * @param nameConstraints The encoded nameConstraints.
+    */
+   public TrustAnchor(X509Certificate trustedCert, byte[] nameConstraints)
+   {
+     if (trustedCert == null)
+       throw new NullPointerException();
+     this.trustedCert = trustedCert;
+     caName = null;
+     caKey = null;
+     if (nameConstraints != null)
+       this.nameConstraints = (byte[]) nameConstraints.clone();
+     else
+       this.nameConstraints = null;
+   }
+ 
+   /**
+    * Create a new trust anchor from a certificate authority's
+    * distinguished name, public key, and (optional) name constraints.
+    *
+    * <p>If the <i>nameConstraints</i> argument in non-null, it will be
+    * copied to prevent modification.
+    *
+    * @params caName The CA's distinguished name.
+    * @params caKey The CA's public key.
+    * @params nameConstraints The encoded nameConstraints.
+    */
+   public TrustAnchor(String caName, PublicKey caKey, byte[] nameConstraints)
+   {
+     if (caName == null || caKey == null)
+       throw new NullPointerException();
+     if (caName.length() == 0)
+       throw new IllegalArgumentException();
+     trustedCert = null;
+     this.caName = new X500DistinguishedName(caName);
+     this.caKey = caKey;
+     if (nameConstraints != null)
+       this.nameConstraints = (byte[]) nameConstraints.clone();
+     else
+       this.nameConstraints = null;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the trusted certificate, or null if none was specified.
+    *
+    * @return The trusted certificate.
+    */
+   public final X509Certificate getTrustedCert()
+   {
+     return trustedCert;
+   }
+ 
+   /**
+    * Return the certificate authority's distinguished name, or null if
+    * none was specified.
+    *
+    * @return The CA's distinguished name.
+    */
+   public final String getCAName()
+   {
+     if (caName != null)
+       return caName.toString();
+     return null;
+   }
+ 
+   /**
+    * Return the certificate authority's public key, or null if none was
+    * specified.
+    *
+    * @return The CA's public key.
+    */
+   public final PublicKey getCAPublicKey()
+   {
+     return caKey;
+   }
+ 
+   /**
+    * Return the encoded name constraints, or null if none was specified.
+    *
+    * <p>The name constraints byte array is copied when this method is
+    * called to prevent modification.
+    *
+    * @return The encoded name constraints.
+    */
+   public final byte[] getNameConstraints()
+   {
+     if (nameConstraints == null)
+       return null;
+     return (byte[]) nameConstraints.clone();
+   }
+ 
+   /**
+    * Return a printable representation of this trust anchor.
+    *
+    * @return The printable representation.
+    */
+   public String toString()
+   {
+     if (trustedCert == null)
+       return "[ Trusted CA Public Key=" + caKey + ", Trusted CA Issuer Name="
+         + caName.toString() + " ]";
+     return "[ Trusted CA Certificate=" + trustedCert + " ]";
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/X509CRL.java gcc-4.1.0/libjava/classpath/java/security/cert/X509CRL.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/X509CRL.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/X509CRL.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,397 ----
+ /* X509CRL.java --- X.509 Certificate Revocation List
+    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.math.BigInteger;
+ import java.security.InvalidKeyException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.Principal;
+ import java.security.PublicKey;
+ import java.security.SignatureException;
+ import java.util.Date;
+ import java.util.Set;
+ 
+ import javax.security.auth.x500.X500Principal;
+ 
+ /**
+    The X509CRL class is the abstract class used to manage
+    X.509 Certificate Revocation Lists. The CRL is a list of
+    time stamped entries which indicate which lists have been
+    revoked. The list is signed by a Certificate Authority (CA)
+    and made publically available in a repository.
+    
+    Each revoked certificate in the CRL is identified by its 
+    certificate serial number. When a piece of code uses a 
+    certificate, the certificates validity is checked by 
+    validating its signature and determing that it is not
+    only a recently acquired CRL. The recently aquired CRL
+    is depends on the local policy in affect. The CA issues
+    a new CRL periodically and entries are removed as the 
+    certificate expiration date is reached
+    
+    
+    A description of the X.509 v2 CRL follows below from rfc2459.
+    
+    "The X.509 v2 CRL syntax is as follows.  For signature calculation,
+    the data that is to be signed is ASN.1 DER encoded.  ASN.1 DER
+    encoding is a tag, length, value encoding system for each element.
+    
+ 	   CertificateList  ::=  SEQUENCE  {
+         	tbsCertList          TBSCertList,
+ 	        signatureAlgorithm   AlgorithmIdentifier,
+         	signatureValue       BIT STRING  }
+ 	
+ 	   TBSCertList  ::=  SEQUENCE  {
+         	version                 Version OPTIONAL,
+                                      -- if present, shall be v2
+ 	        signature               AlgorithmIdentifier,
+         	issuer                  Name,
+ 	        thisUpdate              Time,
+ 	        nextUpdate              Time OPTIONAL,
+ 	        revokedCertificates     SEQUENCE OF SEQUENCE  {
+ 	             userCertificate         CertificateSerialNumber,
+ 	             revocationDate          Time,
+ 	             crlEntryExtensions      Extensions OPTIONAL
+ 	                                           -- if present, shall be v2
+ 	                                  }  OPTIONAL,
+ 	        crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
+ 	                                           -- if present, shall be v2
+ 	                                  }"
+ 
+ 	@author Mark Benvenuto
+ 
+ 	@since JDK 1.2
+ */
+ public abstract class X509CRL extends CRL implements X509Extension
+ {
+ 
+   /**
+      Constructs a new X509CRL.
+   */
+   protected X509CRL()
+   {
+     super("X.509");
+   }
+ 
+   /**
+      Compares this X509CRL to other. It checks if the
+      object if instanceOf X509CRL and then checks if
+      the encoded form matches.
+ 
+      @param other An Object to test for equality
+ 
+      @return true if equal, false otherwise
+   */
+   public boolean equals(Object other)
+   {
+     if( other instanceof X509CRL ) {
+       try {
+ 	X509CRL x = (X509CRL) other;
+ 	if( getEncoded().length != x.getEncoded().length )
+ 	  return false;
+ 
+ 	byte[] b1 = getEncoded();
+ 	byte[] b2 = x.getEncoded();
+ 
+ 	for( int i = 0; i < b1.length; i++ )
+ 	  if( b1[i] != b2[i] )
+ 	    return false;
+ 
+       } catch( CRLException crle ) { 
+ 	return false;
+       }
+       return true;
+     }
+     return false;
+   }
+ 
+   /**
+      Returns a hash code for this X509CRL in its encoded
+      form.
+ 
+      @return A hash code of this class
+   */
+   public int hashCode()
+   {
+     return super.hashCode();
+   }
+ 
+   /**
+      Gets the DER ASN.1 encoded format for this X.509 CRL.
+ 
+      @return byte array containg encoded form
+ 
+      @throws CRLException if an error occurs
+   */
+   public abstract byte[] getEncoded() throws CRLException;
+ 
+   /**
+      Verifies that this CRL was properly signed with the
+      PublicKey that corresponds to its private key. 
+ 
+      @param key PublicKey to verify with
+ 
+      @throws CRLException encoding error
+      @throws NoSuchAlgorithmException unsupported algorithm
+      @throws InvalidKeyException incorrect key
+      @throws NoSuchProviderException no provider
+      @throws SignatureException signature error
+   */
+   public abstract void verify(PublicKey key)
+     throws CRLException,
+     NoSuchAlgorithmException,
+     InvalidKeyException,
+     NoSuchProviderException,
+     SignatureException;
+ 
+   /**
+      Verifies that this CRL was properly signed with the
+      PublicKey that corresponds to its private key and uses
+      the signature engine provided by the provider. 
+ 
+      @param key PublicKey to verify with
+      @param sigProvider Provider to use for signature algorithm
+ 
+      @throws CRLException encoding error
+      @throws NoSuchAlgorithmException unsupported algorithm
+      @throws InvalidKeyException incorrect key
+      @throws NoSuchProviderException incorrect provider
+      @throws SignatureException signature error
+   */
+   public abstract void verify(PublicKey key,
+ 			      String sigProvider)
+     throws CRLException,
+     NoSuchAlgorithmException,
+     InvalidKeyException,
+     NoSuchProviderException,
+     SignatureException;
+ 
+   /**
+      Gets the version of this CRL.
+ 
+      The ASN.1 encoding is:
+ 
+      version                 Version OPTIONAL,
+      -- if present, shall be v2
+ 
+      Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return the version number, Ex: 1 or 2
+   */
+   public abstract int getVersion();
+ 
+   /**
+      Returns the issuer (issuer distinguished name) of the CRL.
+      The issuer is the entity who signed and issued the 
+      Certificate Revocation List.
+ 
+      The ASN.1 DER encoding is:
+ 
+      issuer                  Name,
+ 
+      Name ::= CHOICE {
+      RDNSequence }
+ 
+      RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
+ 
+      RelativeDistinguishedName ::=
+      SET OF AttributeTypeAndValue
+ 
+      AttributeTypeAndValue ::= SEQUENCE {
+      type     AttributeType,
+      value    AttributeValue }
+ 
+      AttributeType ::= OBJECT IDENTIFIER
+ 
+      AttributeValue ::= ANY DEFINED BY AttributeType
+ 
+      DirectoryString ::= CHOICE {
+      teletexString           TeletexString (SIZE (1..MAX)),
+      printableString         PrintableString (SIZE (1..MAX)),
+      universalString         UniversalString (SIZE (1..MAX)),
+      utf8String              UTF8String (SIZE (1.. MAX)),
+      bmpString               BMPString (SIZE (1..MAX)) }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return the issuer in the Principal class
+   */
+   public abstract Principal getIssuerDN();
+ 
+   /**
+      Returns the thisUpdate date of the CRL.
+ 
+      The ASN.1 DER encoding is:
+ 
+      thisUpdate              Time,
+ 
+      Time ::= CHOICE {
+      utcTime        UTCTime,
+      generalTime    GeneralizedTime }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return the thisUpdate date
+   */
+   public abstract Date getThisUpdate();
+ 
+   /*
+     Gets the nextUpdate field
+ 
+     The ASN.1 DER encoding is:
+ 
+     nextUpdate              Time OPTIONAL,
+ 
+     Time ::= CHOICE {
+     utcTime        UTCTime,
+     generalTime    GeneralizedTime }
+ 
+     Consult rfc2459 for more information.
+ 
+     @return the nextUpdate date
+   */
+   public abstract Date getNextUpdate();
+ 
+   /**
+      Gets the requeste dX509Entry for the specified
+      certificate serial number.
+ 
+      @return a X509CRLEntry representing the X.509 CRL entry
+   */
+   public abstract X509CRLEntry getRevokedCertificate(BigInteger serialNumber);
+ 
+   /**
+      Returns a Set of revoked certificates.
+ 
+      @return a set of revoked certificates.
+   */
+   public abstract Set getRevokedCertificates();
+ 
+   /**
+      Returns the DER ASN.1 encoded tbsCertList which is 
+      the basic information of the list and associated certificates
+      in the encoded state. See top for more information.
+ 
+      The ASN.1 DER encoding is:
+ 
+      tbsCertList          TBSCertList,
+ 
+      Consult rfc2459 for more information.
+ 
+      @return byte array representing tbsCertList
+   */
+   public abstract byte[] getTBSCertList() throws CRLException;
+ 
+ 
+   /**
+      Returns the signature for the CRL. 
+ 
+      The ASN.1 DER encoding is:
+ 
+      signatureValue       BIT STRING
+ 
+      Consult rfc2459 for more information.
+   */
+   public abstract byte[] getSignature();
+ 
+   /**
+      Returns the signature algorithm used to sign the CRL. 
+      An examples is "SHA-1/DSA".
+ 
+      The ASN.1 DER encoding is:
+ 
+      signatureAlgorithm   AlgorithmIdentifier,
+ 
+      AlgorithmIdentifier  ::=  SEQUENCE  {
+      algorithm               OBJECT IDENTIFIER,
+      parameters              ANY DEFINED BY algorithm OPTIONAL  }
+ 
+      Consult rfc2459 for more information.
+ 
+      The algorithm name is determined from the OID.
+ 
+      @return a string with the signature algorithm name
+   */
+   public abstract String getSigAlgName();
+ 
+   /**
+      Returns the OID for the signature algorithm used.
+      Example "1.2.840.10040.4.3" is return for SHA-1 with DSA.\
+ 
+      The ASN.1 DER encoding for the example is:
+ 
+      id-dsa-with-sha1 ID  ::=  {
+      iso(1) member-body(2) us(840) x9-57 (10040)
+      x9cm(4) 3 }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return a string containing the OID.
+   */
+   public abstract String getSigAlgOID();
+ 
+   /**
+      Returns the AlgorithmParameters in the encoded form
+      for the signature algorithm used. 
+ 
+      If access to the parameters is need, create an 
+      instance of AlgorithmParameters.
+ 
+      @return byte array containing algorithm parameters, null
+      if no parameters are present in CRL
+   */
+   public abstract byte[] getSigAlgParams();
+ 
+   // 1.4 instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the X.500 distinguished name of this CRL's issuer.
+    *
+    * @return The issuer's X.500 distinguished name.
+    * @since JDK 1.4
+    */
+   public X500Principal getIssuerX500Principal()
+   {
+     throw new UnsupportedOperationException();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/X509CRLEntry.java gcc-4.1.0/libjava/classpath/java/security/cert/X509CRLEntry.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/X509CRLEntry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/X509CRLEntry.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,169 ----
+ /* X509CRLEntry.java --- X.509 Certificate Revocation List Entry
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.math.BigInteger;
+ import java.util.Date;
+ 
+ /**
+ 	Abstract class for entries in the CRL (Certificate Revocation 
+ 	List). The ASN.1 definition for <I>revokedCertificates</I> is
+ 
+         revokedCertificates     SEQUENCE OF SEQUENCE  {
+              userCertificate         CertificateSerialNumber,
+              revocationDate          Time,
+              crlEntryExtensions      Extensions OPTIONAL
+                                            -- if present, shall be v2
+                                   }  OPTIONAL,
+ 
+ 	CertificateSerialNumber  ::=  INTEGER
+ 
+ 	Time ::= CHOICE {
+              utcTime        UTCTime,
+ 	     generalTime    GeneralizedTime }
+ 
+ 	Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
+ 
+ 	Extension  ::=  SEQUENCE  {
+ 	     extnID      OBJECT IDENTIFIER,
+              critical    BOOLEAN DEFAULT FALSE,
+              extnValue   OCTET STRING  }
+  
+ 	For more information consult rfc2459.
+ 
+ 	@author Mark Benvenuto
+ 
+ 	@since JDK 1.2
+ */
+ public abstract class X509CRLEntry implements X509Extension
+ {
+ 
+   /**
+      Creates a new X509CRLEntry
+   */
+   public X509CRLEntry()
+   {}
+ 
+   /**
+      Compares this X509CRLEntry to other. It checks if the
+      object if instanceOf X509CRLEntry and then checks if
+      the encoded form( the inner SEQUENCE) matches.
+ 
+      @param other An Object to test for equality
+ 
+      @return true if equal, false otherwise
+   */
+   public boolean equals(Object other)
+   {
+     if( other instanceof X509CRLEntry ) {
+       try {
+ 	X509CRLEntry xe = (X509CRLEntry) other;
+ 	if( getEncoded().length != xe.getEncoded().length )
+ 	  return false;
+ 
+ 	byte[] b1 = getEncoded();
+ 	byte[] b2 = xe.getEncoded();
+ 
+ 	for( int i = 0; i < b1.length; i++ )
+ 	  if( b1[i] != b2[i] )
+ 	    return false;
+ 
+       } catch( CRLException crle ) { 
+ 	return false;
+       }
+       return true;
+     }
+     return false;
+   }
+ 
+   /**
+      Returns a hash code for this X509CRLEntry in its encoded
+      form.
+ 
+      @return A hash code of this class
+   */
+   public int hashCode()
+   {
+     return super.hashCode();
+   }
+ 
+   /**
+      Gets the DER ASN.1 encoded format for this CRL Entry,
+      the inner SEQUENCE.
+ 
+      @return byte array containg encoded form
+ 
+      @throws CRLException if an error occurs
+   */
+   public abstract byte[] getEncoded() throws CRLException;
+ 
+   /**
+      Gets the serial number for <I>userCertificate</I> in
+      this X509CRLEntry.
+ 
+      @return the serial number for this X509CRLEntry.
+   */
+   public abstract BigInteger getSerialNumber();
+ 
+ 
+   /**
+      Gets the revocation date in <I>revocationDate</I> for
+      this X509CRLEntry.
+ 
+      @return the revocation date for this X509CRLEntry.
+   */
+   public abstract Date getRevocationDate();
+ 
+ 
+   /**
+      Checks if this X509CRLEntry has extensions.
+ 
+      @return true if it has extensions, false otherwise
+   */
+   public abstract boolean hasExtensions();
+ 
+ 
+   /**
+      Returns a string that represents this X509CRLEntry.
+ 
+      @return a string representing this X509CRLEntry.
+   */
+   public abstract String toString();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/X509CRLSelector.java gcc-4.1.0/libjava/classpath/java/security/cert/X509CRLSelector.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/X509CRLSelector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/X509CRLSelector.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,440 ----
+ /* X509CRLSelector.java -- selects X.509 CRLs by criteria.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import gnu.classpath.SystemProperties;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.math.BigInteger;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Date;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ 
+ import javax.security.auth.x500.X500Principal;
+ 
+ /**
+  * A class for matching X.509 certificate revocation lists by criteria.
+  *
+  * <p>Use of this class requires extensive knowledge of the Internet
+  * Engineering Task Force's Public Key Infrastructure (X.509). The primary
+  * document describing this standard is <a
+  * href="http://www.ietf.org/rfc/rfc3280.txt">RFC 3280: Internet X.509
+  * Public Key Infrastructure Certificate and Certificate Revocation List
+  * (CRL) Profile</a>.
+  *
+  * <p>Note that this class is not thread-safe. If multiple threads will
+  * use or modify this class then they need to synchronize on the object.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class X509CRLSelector implements CRLSelector, Cloneable
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private static final String CRL_NUMBER_ID = "2.5.29.20";
+ 
+   private List issuerNames;
+   private BigInteger maxCrlNumber;
+   private BigInteger minCrlNumber;
+   private Date date;
+   private X509Certificate cert;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new CRL selector with no criteria enabled; i.e., every CRL
+    * will be matched.
+    */
+   public X509CRLSelector()
+   {
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Add an issuer name to the set of issuer names criteria, as the DER
+    * encoded form.
+    *
+    * @param name The name to add, as DER bytes.
+    * @throws IOException If the argument is not a valid DER-encoding.
+    */
+   public void addIssuerName(byte[] name) throws IOException
+   {
+     X500Principal p = null;
+     try
+       {
+         p = new X500Principal(name);
+       }
+     catch (IllegalArgumentException iae)
+       {
+         IOException ioe = new IOException("malformed name");
+         ioe.initCause(iae);
+         throw ioe;
+       }
+     if (issuerNames == null)
+       issuerNames = new LinkedList();
+     issuerNames.add(p);
+   }
+ 
+   /**
+    * Add an issuer name to the set of issuer names criteria, as a
+    * String representation.
+    *
+    * @param name The name to add.
+    * @throws IOException If the argument is not a valid name.
+    */
+   public void addIssuerName(String name) throws IOException
+   {
+     X500Principal p = null;
+     try
+       {
+         p = new X500Principal(name);
+       }
+     catch (IllegalArgumentException iae)
+       {
+         IOException ioe = new IOException("malformed name: " + name);
+         ioe.initCause(iae);
+         throw ioe;
+       }
+     if (issuerNames == null)
+       issuerNames = new LinkedList();
+     issuerNames.add(p);
+   }
+ 
+   /**
+    * Sets the issuer names criterion. Pass <code>null</code> to clear this
+    * value. CRLs matched by this selector must have an issuer name in this
+    * set.
+    *
+    * @param names The issuer names.
+    * @throws IOException If any of the elements in the collection is not
+    *         a valid name.
+    */
+   public void setIssuerNames(Collection names) throws IOException
+   {
+     if (names == null)
+       {
+         issuerNames = null;
+         return;
+       }
+     List l = new ArrayList(names.size());
+     for (Iterator it = names.iterator(); it.hasNext(); )
+       {
+         Object o = it.next();
+         if (o instanceof X500Principal)
+           l.add(o);
+         else if (o instanceof String)
+           {
+             try
+               {
+                 l.add(new X500Principal((String) o));
+               }
+             catch (IllegalArgumentException iae)
+               {
+                 IOException ioe = new IOException("malformed name: " + o);
+                 ioe.initCause(iae);
+                 throw ioe;
+               }
+           }
+         else if (o instanceof byte[])
+           {
+             try
+               {
+                 l.add(new X500Principal((byte[]) o));
+               }
+             catch (IllegalArgumentException iae)
+               {
+                 IOException ioe = new IOException("malformed name");
+                 ioe.initCause(iae);
+                 throw ioe;
+               }
+           }
+         else if (o instanceof InputStream)
+           {
+             try
+               {
+                 l.add(new X500Principal((InputStream) o));
+               }
+             catch (IllegalArgumentException iae)
+               {
+                 IOException ioe = new IOException("malformed name");
+                 ioe.initCause(iae);
+                 throw ioe;
+               }
+           }
+         else
+           throw new IOException("not a valid name: " +
+                                 (o != null ? o.getClass().getName() : "null"));
+ 
+       }
+     issuerNames = l;
+   }
+ 
+   /**
+    * Returns the set of issuer names that are matched by this selector,
+    * or <code>null</code> if this criteria is not set. The returned
+    * collection is not modifiable.
+    *
+    * @return The set of issuer names.
+    */
+   public Collection getIssuerNames()
+   {
+     if (issuerNames != null)
+       return Collections.unmodifiableList(issuerNames);
+     else
+       return null;
+   }
+ 
+   /**
+    * Returns the maximum value of the CRLNumber extension present in
+    * CRLs matched by this selector, or <code>null</code> if this
+    * criteria is not set.
+    *
+    * @return The maximum CRL number.
+    */
+   public BigInteger getMaxCRL()
+   {
+     return maxCrlNumber;
+   }
+ 
+   /**
+    * Returns the minimum value of the CRLNumber extension present in
+    * CRLs matched by this selector, or <code>null</code> if this
+    * criteria is not set.
+    *
+    * @return The minimum CRL number.
+    */
+   public BigInteger getMinCRL()
+   {
+     return minCrlNumber;
+   }
+ 
+   /**
+    * Sets the maximum value of the CRLNumber extension present in CRLs
+    * matched by this selector. Specify <code>null</code> to clear this
+    * criterion.
+    *
+    * @param maxCrlNumber The maximum CRL number.
+    */
+   public void setMaxCRLNumber(BigInteger maxCrlNumber)
+   {
+     this.maxCrlNumber = maxCrlNumber;
+   }
+ 
+   /**
+    * Sets the minimum value of the CRLNumber extension present in CRLs
+    * matched by this selector. Specify <code>null</code> to clear this
+    * criterion.
+    *
+    * @param minCrlNumber The minimum CRL number.
+    */
+   public void setMinCRLNumber(BigInteger minCrlNumber)
+   {
+     this.minCrlNumber = minCrlNumber;
+   }
+ 
+   /**
+    * Returns the date when this CRL must be valid; that is, the date
+    * must be after the thisUpdate date, but before the nextUpdate date.
+    * Returns <code>null</code> if this criterion is not set.
+    *
+    * @return The date.
+    */
+   public Date getDateAndTime()
+   {
+     return date != null ? (Date) date.clone() : null;
+   }
+ 
+   /**
+    * Sets the date at which this CRL must be valid. Specify
+    * <code>null</code> to clear this criterion.
+    *
+    * @param date The date.
+    */
+   public void setDateAndTime(Date date)
+   {
+     this.date = date != null ? (Date) date.clone() : null;
+   }
+ 
+   /**
+    * Returns the certificate being checked, or <code>null</code> if this
+    * value is not set.
+    *
+    * @return The certificate.
+    */
+   public X509Certificate getCertificateChecking()
+   {
+     return cert;
+   }
+ 
+   /**
+    * Sets the certificate being checked. This is not a criterion, but
+    * info used by certificate store implementations to aid in searching.
+    *
+    * @param cert The certificate.
+    */
+   public void setCertificateChecking(X509Certificate cert)
+   {
+     this.cert = cert;
+   }
+ 
+   /**
+    * Returns a string representation of this selector. The string will
+    * only describe the enabled criteria, so if none are enabled this will
+    * return a string that contains little else besides the class name.
+    *
+    * @return The string.
+    */
+   public String toString()
+   {
+     StringBuffer str = new StringBuffer(X509CRLSelector.class.getName());
+     String nl = SystemProperties.getProperty("line.separator");
+     String eol = ";" + nl;
+ 
+     str.append(" {").append(nl);
+     if (issuerNames != null)
+       str.append("  issuer names = ").append(issuerNames).append(eol);
+     if (maxCrlNumber != null)
+       str.append("  max CRL = ").append(maxCrlNumber).append(eol);
+     if (minCrlNumber != null)
+       str.append("  min CRL = ").append(minCrlNumber).append(eol);
+     if (date != null)
+       str.append("  date = ").append(date).append(eol);
+     if (cert != null)
+       str.append("  certificate = ").append(cert).append(eol);
+     str.append("}").append(nl);
+     return str.toString();
+   }
+ 
+   /**
+    * Checks a CRL against the criteria of this selector, returning
+    * <code>true</code> if the given CRL matches all the criteria.
+    *
+    * @param _crl The CRL being checked.
+    * @return True if the CRL matches, false otherwise.
+    */
+   public boolean match(CRL _crl)
+   {
+     if (!(_crl instanceof X509CRL))
+       return false;
+     X509CRL crl = (X509CRL) _crl;
+     if (issuerNames != null)
+       {
+         if (!issuerNames.contains(crl.getIssuerX500Principal()))
+           return false;
+       }
+     BigInteger crlNumber = null;
+     if (maxCrlNumber != null)
+       {
+         byte[] b = crl.getExtensionValue(CRL_NUMBER_ID);
+         if (b == null)
+           return false;
+         try
+           {
+             DERValue val = DERReader.read(b);
+             if (!(val.getValue() instanceof BigInteger))
+               return false;
+             crlNumber = (BigInteger) val.getValue();
+           }
+         catch (IOException ioe)
+           {
+             return false;
+           }
+         if (maxCrlNumber.compareTo(crlNumber) < 0)
+           return false;
+       }
+     if (minCrlNumber != null)
+       {
+         if (crlNumber == null)
+           {
+             byte[] b = crl.getExtensionValue(CRL_NUMBER_ID);
+             if (b == null)
+               return false;
+             try
+               {
+                 DERValue val = DERReader.read(b);
+                 if (!(val.getValue() instanceof BigInteger))
+                   return false;
+                 crlNumber = (BigInteger) val.getValue();
+               }
+             catch (IOException ioe)
+               {
+                 return false;
+               }
+           }
+         if (minCrlNumber.compareTo(crlNumber) > 0)
+           return false;
+       }
+     if (date != null)
+       {
+         if (date.compareTo(crl.getThisUpdate()) < 0 ||
+             date.compareTo(crl.getNextUpdate()) > 0)
+           return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * Returns a copy of this object.
+    *
+    * @return The copy.
+    */
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException shouldNotHappen)
+       {
+         throw new Error(shouldNotHappen);
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/X509CertSelector.java gcc-4.1.0/libjava/classpath/java/security/cert/X509CertSelector.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/X509CertSelector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/X509CertSelector.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,1106 ----
+ /* X509CertSelector.java -- selects X.509 certificates by criteria.
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import gnu.classpath.SystemProperties;
+ import gnu.java.security.OID;
+ 
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.security.KeyFactory;
+ import java.security.PublicKey;
+ import java.security.spec.X509EncodedKeySpec;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Date;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Set;
+ 
+ import javax.security.auth.x500.X500Principal;
+ 
+ /**
+  * A concrete implementation of {@link CertSelector} for X.509 certificates,
+  * which allows a number of criteria to be set when accepting certificates,
+  * from validity dates, to issuer and subject distinguished names, to some
+  * of the various X.509 extensions.
+  *
+  * <p>Use of this class requires extensive knowledge of the Internet
+  * Engineering Task Force's Public Key Infrastructure (X.509). The primary
+  * document describing this standard is <a
+  * href="http://www.ietf.org/rfc/rfc3280.txt">RFC 3280: Internet X.509
+  * Public Key Infrastructure Certificate and Certificate Revocation List
+  * (CRL) Profile</a>.
+  *
+  * <p>Note that this class is not thread-safe. If multiple threads will
+  * use or modify this class then they need to synchronize on the object.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class X509CertSelector implements CertSelector, Cloneable
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   private static final String AUTH_KEY_ID = "2.5.29.35";
+   private static final String SUBJECT_KEY_ID = "2.5.29.14";
+   private static final String NAME_CONSTRAINTS_ID = "2.5.29.30";
+ 
+   private int basicConstraints;
+   private X509Certificate cert;
+   private BigInteger serialNo;
+   private X500Principal issuer;
+   private X500Principal subject;
+   private byte[] subjectKeyId;
+   private byte[] authKeyId;
+   private boolean[] keyUsage;
+   private Date certValid;
+   private OID sigId;
+   private PublicKey subjectKey;
+   private X509EncodedKeySpec subjectKeySpec;
+   private Set keyPurposeSet;
+   private List altNames;
+   private boolean matchAllNames;
+   private byte[] nameConstraints;
+   private Set policy;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new X.509 certificate selector. The new selector will be
+    * empty, and will accept any certificate (provided that it is an
+    * {@link X509Certificate}).
+    */
+   public X509CertSelector()
+   {
+     basicConstraints = -1;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the certificate criterion, or <code>null</code> if this value
+    * was not set.
+    *
+    * @return The certificate.
+    */
+   public X509Certificate getCertificate()
+   {
+     return cert;
+   }
+ 
+   /**
+    * Sets the certificate criterion. If set, only certificates that are
+    * equal to the certificate passed here will be accepted.
+    *
+    * @param cert The certificate.
+    */
+   public void setCertificate(X509Certificate cert)
+   {
+     this.cert = cert;
+   }
+ 
+   /**
+    * Returns the serial number criterion, or <code>null</code> if this
+    * value was not set.
+    *
+    * @return The serial number.
+    */
+   public BigInteger getSerialNumber()
+   {
+     return serialNo;
+   }
+ 
+   /**
+    * Sets the serial number of the desired certificate. Only certificates that
+    * contain this serial number are accepted.
+    *
+    * @param serialNo The serial number.
+    */
+   public void setSerialNumber(BigInteger serialNo)
+   {
+     this.serialNo = serialNo;
+   }
+ 
+   /**
+    * Returns the issuer criterion as a string, or <code>null</code> if this
+    * value was not set.
+    *
+    * @return The issuer.
+    */
+   public String getIssuerAsString()
+   {
+     if (issuer != null)
+       return issuer.getName();
+     else
+       return null;
+   }
+ 
+   /**
+    * Returns the issuer criterion as a sequence of DER bytes, or
+    * <code>null</code> if this value was not set.
+    *
+    * @return The issuer.
+    */
+   public byte[] getIssuerAsBytes() throws IOException
+   {
+     if (issuer != null)
+       return issuer.getEncoded();
+     else
+       return null;
+   }
+ 
+   /**
+    * Sets the issuer, specified as a string representation of the issuer's
+    * distinguished name. Only certificates issued by this issuer will
+    * be accepted.
+    *
+    * @param name The string representation of the issuer's distinguished name.
+    * @throws IOException If the given name is incorrectly formatted.
+    */
+   public void setIssuer(String name) throws IOException
+   {
+     if (name != null)
+       {
+         try
+           {
+             issuer = new X500Principal(name);
+           }
+         catch (IllegalArgumentException iae)
+           {
+             throw new IOException(iae.getMessage());
+           }
+       }
+     else
+       issuer = null;
+   }
+ 
+   /**
+    * Sets the issuer, specified as the DER encoding of the issuer's
+    * distinguished name. Only certificates issued by this issuer will
+    * be accepted.
+    *
+    * @param name The DER encoding of the issuer's distinguished name.
+    * @throws IOException If the given name is incorrectly formatted.
+    */
+   public void setIssuer(byte[] name) throws IOException
+   {
+     if (name != null)
+       {
+         try
+           {
+             issuer = new X500Principal(name);
+           }
+         catch (IllegalArgumentException iae)
+           {
+             throw new IOException(iae.getMessage());
+           }
+       }
+     else
+       issuer = null;
+   }
+ 
+   /**
+    * Returns the subject criterion as a string, of <code>null</code> if
+    * this value was not set.
+    *
+    * @return The subject.
+    */
+   public String getSubjectAsString()
+   {
+     if (subject != null)
+       return subject.getName();
+     else
+       return null;
+   }
+ 
+   /**
+    * Returns the subject criterion as a sequence of DER bytes, or
+    * <code>null</code> if this value is not set.
+    *
+    * @return The subject.
+    */
+   public byte[] getSubjectAsBytes() throws IOException
+   {
+     if (subject != null)
+       return subject.getEncoded();
+     else
+       return null;
+   }
+ 
+   /**
+    * Sets the subject, specified as a string representation of the
+    * subject's distinguished name. Only certificates with the given
+    * subject will be accepted.
+    *
+    * @param name The string representation of the subject's distinguished name.
+    * @throws IOException If the given name is incorrectly formatted.
+    */
+   public void setSubject(String name) throws IOException
+   {
+     if (name != null)
+       {
+         try
+           {
+             subject = new X500Principal(name);
+           }
+         catch (IllegalArgumentException iae)
+           {
+             throw new IOException(iae.getMessage());
+           }
+       }
+     else
+       subject = null;
+   }
+ 
+   /**
+    * Sets the subject, specified as the DER encoding of the subject's
+    * distinguished name. Only certificates with the given subject will
+    * be accepted.
+    *
+    * @param name The DER encoding of the subject's distinguished name.
+    * @throws IOException If the given name is incorrectly formatted.
+    */
+   public void setSubject(byte[] name) throws IOException
+   {
+     if (name != null)
+       {
+         try
+           {
+             subject = new X500Principal(name);
+           }
+         catch (IllegalArgumentException iae)
+           {
+             throw new IOException(iae.getMessage());
+           }
+       }
+     else
+       subject = null;
+   }
+ 
+   /**
+    * Returns the subject key identifier criterion, or <code>null</code> if
+    * this value was not set. Note that the byte array is cloned to prevent
+    * modification.
+    *
+    * @return The subject key identifier.
+    */
+   public byte[] getSubjectKeyIdentifier()
+   {
+     if (subjectKeyId != null)
+       return (byte[]) subjectKeyId.clone();
+     else
+       return null;
+   }
+ 
+   /**
+    * Sets the subject key identifier criterion, or <code>null</code> to clear
+    * this criterion. Note that the byte array is cloned to prevent modification.
+    *
+    * @param subjectKeyId The subject key identifier.
+    */
+   public void setSubjectKeyIdentifier(byte[] subjectKeyId)
+   {
+     this.subjectKeyId = subjectKeyId != null ? (byte[]) subjectKeyId.clone() :
+       null;
+   }
+ 
+   /**
+    * Returns the authority key identifier criterion, or <code>null</code> if
+    * this value was not set. Note that the byte array is cloned to prevent
+    * modification.
+    *
+    * @return The authority key identifier.
+    */
+   public byte[] getAuthorityKeyIdentifier()
+   {
+     if (authKeyId != null)
+       return (byte[]) authKeyId.clone();
+     else
+       return null;
+   }
+ 
+   /**
+    * Sets the authority key identifier criterion, or <code>null</code> to clear
+    * this criterion. Note that the byte array is cloned to prevent modification.
+    *
+    * @param subjectKeyId The subject key identifier.
+    */
+   public void setAuthorityKeyIdentifier(byte[] authKeyId)
+   {
+     this.authKeyId = authKeyId != null ? (byte[]) authKeyId.clone() : null;
+   }
+ 
+   /**
+    * Returns the date at which certificates must be valid, or <code>null</code>
+    * if this criterion was not set.
+    *
+    * @return The target certificate valitity date.
+    */
+   public Date getCertificateValid()
+   {
+     if (certValid != null)
+       return (Date) certValid.clone();
+     else
+       return null;
+   }
+ 
+   /**
+    * Sets the date at which certificates must be valid. Specify
+    * <code>null</code> to clear this criterion.
+    *
+    * @param certValid The certificate validity date.
+    */
+   public void setCertificateValid(Date certValid)
+   {
+     this.certValid = certValid != null ? (Date) certValid.clone() : null;
+   }
+ 
+   /**
+    * This method, and its related X.509 certificate extension &mdash; the
+    * private key usage period &mdash; is not supported under the Internet
+    * PKI for X.509 certificates (PKIX), described in RFC 3280. As such, this
+    * method is not supported either.
+    *
+    * <p>Do not use this method. It is not deprecated, as it is not deprecated
+    * in the Java standard, but it is basically a no-operation and simply
+    * returns <code>null</code>.
+    *
+    * @return Null.
+    */
+   public Date getPrivateKeyValid()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method, and its related X.509 certificate extension &mdash; the
+    * private key usage period &mdash; is not supported under the Internet
+    * PKI for X.509 certificates (PKIX), described in RFC 3280. As such, this
+    * method is not supported either.
+    *
+    * <p>Do not use this method. It is not deprecated, as it is not deprecated
+    * in the Java standard, but it is basically a no-operation.
+    *
+    * @param UNUSED Is silently ignored.
+    */
+   public void setPrivateKeyValid(Date UNUSED)
+   {
+   }
+ 
+   /**
+    * Returns the public key algorithm ID that matching certificates must have,
+    * or <code>null</code> if this criterion was not set.
+    *
+    * @return The public key algorithm ID.
+    */
+   public String getSubjectPublicKeyAlgID()
+   {
+     return String.valueOf(sigId);
+   }
+ 
+   /**
+    * Sets the public key algorithm ID that matching certificates must have.
+    * Specify <code>null</code> to clear this criterion.
+    *
+    * @param sigId The public key ID.
+    * @throws IOException If the specified ID is not a valid object identifier.
+    */
+   public void setSubjectPublicKeyAlgID(String sigId) throws IOException
+   {
+     if (sigId != null)
+       {
+         try
+           {
+             OID oid = new OID(sigId);
+             int[] comp = oid.getIDs();
+             if (!checkOid(comp))
+               throw new IOException("malformed OID: " + sigId);
+             this.sigId = oid;
+           }
+         catch (IllegalArgumentException iae)
+           {
+             IOException ioe = new IOException("malformed OID: " + sigId);
+             ioe.initCause(iae);
+             throw ioe;
+           }
+       }
+     else
+       this.sigId = null;
+   }
+ 
+   /**
+    * Returns the subject public key criterion, or <code>null</code> if this
+    * value is not set.
+    *
+    * @return The subject public key.
+    */
+   public PublicKey getSubjectPublicKey()
+   {
+     return subjectKey;
+   }
+ 
+   /**
+    * Sets the subject public key criterion as an opaque representation.
+    * Specify <code>null</code> to clear this criterion.
+    *
+    * @param key The public key.
+    */
+   public void setSubjectPublicKey(PublicKey key)
+   {
+     this.subjectKey = key;
+     if (key == null)
+       {
+         subjectKeySpec = null;
+         return;
+       }
+     try
+       {
+         KeyFactory enc = KeyFactory.getInstance("X.509");
+         subjectKeySpec = (X509EncodedKeySpec)
+           enc.getKeySpec(key, X509EncodedKeySpec.class);
+       }
+     catch (Exception x)
+       {
+         subjectKey = null;
+         subjectKeySpec = null;
+       }
+   }
+ 
+   /**
+    * Sets the subject public key criterion as a DER-encoded key. Specify
+    * <code>null</code> to clear this value.
+    *
+    * @param key The DER-encoded key bytes.
+    * @throws IOException If the argument is not a valid DER-encoded key.
+    */
+   public void setSubjectPublicKey(byte[] key) throws IOException
+   {
+     if (key == null)
+       {
+         subjectKey = null;
+         subjectKeySpec = null;
+         return;
+       }
+     try
+       {
+         subjectKeySpec = new X509EncodedKeySpec(key);
+         KeyFactory enc = KeyFactory.getInstance("X.509");
+         subjectKey = enc.generatePublic(subjectKeySpec);
+       }
+     catch (Exception x)
+       {
+         subjectKey = null;
+         subjectKeySpec = null;
+         IOException ioe = new IOException(x.getMessage());
+         ioe.initCause(x);
+         throw ioe;
+       }
+   }
+ 
+   /**
+    * Returns the public key usage criterion, or <code>null</code> if this
+    * value is not set. Note that the array is cloned to prevent modification.
+    *
+    * @return The public key usage.
+    */
+   public boolean[] getKeyUsage()
+   {
+     if (keyUsage != null)
+       return (boolean[]) keyUsage.clone();
+     else
+       return null;
+   }
+ 
+   /**
+    * Sets the public key usage criterion. Specify <code>null</code> to clear
+    * this value.
+    *
+    * @param keyUsage The public key usage.
+    */
+   public void setKeyUsage(boolean[] keyUsage)
+   {
+     this.keyUsage = keyUsage != null ? (boolean[]) keyUsage.clone() : null;
+   }
+ 
+   /**
+    * Returns the set of extended key purpose IDs, as an unmodifiable set
+    * of OID strings. Returns <code>null</code> if this criterion is not
+    * set.
+    *
+    * @return The set of key purpose OIDs (strings).
+    */
+   public Set getExtendedKeyUsage()
+   {
+     if (keyPurposeSet != null)
+       return Collections.unmodifiableSet(keyPurposeSet);
+     else
+       return null;
+   }
+ 
+   /**
+    * Sets the extended key usage criterion, as a set of OID strings. Specify
+    * <code>null</code> to clear this value.
+    *
+    * @param keyPurposeSet The set of key purpose OIDs.
+    * @throws IOException If any element of the set is not a valid OID string.
+    */
+   public void setExtendedKeyUsage(Set keyPurposeSet) throws IOException
+   {
+     if (keyPurposeSet == null)
+       {
+         this.keyPurposeSet = null;
+         return;
+       }
+     Set s = new HashSet();
+     for (Iterator it = keyPurposeSet.iterator(); it.hasNext(); )
+       {
+         Object o = it.next();
+         if (!(o instanceof String))
+           throw new IOException("not a string: " + o);
+         try
+           {
+             OID oid = new OID((String) o);
+             int[] comp = oid.getIDs();
+             if (!checkOid(comp))
+               throw new IOException("malformed OID: " + o);
+           }
+         catch (IllegalArgumentException iae)
+           {
+             IOException ioe = new IOException("malformed OID: " + o);
+             ioe.initCause(iae);
+             throw ioe;
+           }
+       }
+     this.keyPurposeSet = s;
+   }
+ 
+   /**
+    * Returns whether or not all specified alternative names must match.
+    * If false, a certificate is considered a match if <em>one</em> of the
+    * specified alternative names matches.
+    *
+    * @return true if all names must match.
+    */
+   public boolean getMatchAllSubjectAltNames()
+   {
+     return matchAllNames;
+   }
+ 
+   /**
+    * Sets whether or not all subject alternative names must be matched.
+    * If false, then a certificate will be considered a match if one
+    * alternative name matches.
+    *
+    * @param matchAllNames Whether or not all alternative names must be
+    *        matched.
+    */
+   public void setMatchAllSubjectAltNames(boolean matchAllNames)
+   {
+     this.matchAllNames = matchAllNames;
+   }
+ 
+   /**
+    * Sets the subject alternative names critertion. Each element of the
+    * argument must be a {@link java.util.List} that contains exactly two
+    * elements: the first an {@link Integer}, representing the type of
+    * name, and the second either a {@link String} or a byte array,
+    * representing the name itself.
+    *
+    * @param altNames The alternative names.
+    * @throws IOException If any element of the argument is invalid.
+    */
+   public void setSubjectAlternativeNames(Collection altNames)
+     throws IOException
+   {
+     if (altNames == null)
+       {
+         this.altNames = null;
+         return;
+       }
+     List l = new ArrayList(altNames.size());
+     for (Iterator it = altNames.iterator(); it.hasNext(); )
+       {
+         Object o = it.next();
+         if (!(o instanceof List) || ((List) o).size() != 2 ||
+             !(((List) o).get(0) instanceof Integer) ||
+             !(((List) o).get(1) instanceof String) ||
+             !(((List) o).get(1) instanceof byte[]))
+           throw new IOException("illegal alternative name: " + o);
+         Integer i = (Integer) ((List) o).get(0);
+         if (i.intValue() < 0 || i.intValue() > 8)
+           throw new IOException("illegal alternative name: " + o +
+                                 ", bad id: " + i);
+         l.add(new ArrayList((List) o));
+       }
+     this.altNames = l;
+   }
+ 
+   /**
+    * Add a name to the subject alternative names criterion.
+    *
+    * @param id The type of name this is. Must be in the range [0,8].
+    * @param name The name.
+    * @throws IOException If the id is out of range, or if the name
+    *   is null.
+    */
+   public void addSubjectAlternativeName(int id, String name)
+     throws IOException
+   {
+     if (id < 0 || id > 8 || name == null)
+       throw new IOException("illegal alternative name");
+     if (altNames == null)
+       altNames = new LinkedList();
+     ArrayList l = new ArrayList(2);
+     l.add(new Integer(id));
+     l.add(name);
+     altNames.add(l);
+   }
+ 
+   /**
+    * Add a name, as DER-encoded bytes, to the subject alternative names
+    * criterion.
+    *
+    * @param id The type of name this is.
+    */
+   public void addSubjectAlternativeName(int id, byte[] name)
+     throws IOException
+   {
+     if (id < 0 || id > 8 || name == null)
+       throw new IOException("illegal alternative name");
+     if (altNames == null)
+       altNames = new LinkedList();
+     ArrayList l = new ArrayList(2);
+     l.add(new Integer(id));
+     l.add(name);
+     altNames.add(l);
+   }
+ 
+   /**
+    * Returns the name constraints criterion, or <code>null</code> if this
+    * value is not set. Note that the byte array is cloned to prevent
+    * modification.
+    *
+    * @return The name constraints.
+    */
+   public byte[] getNameConstraints()
+   {
+     if (nameConstraints != null)
+       return (byte[]) nameConstraints.clone();
+     else
+       return null;
+   }
+ 
+   /**
+    * Sets the name constraints criterion; specify <code>null</code> to
+    * clear this criterion. Note that if non-null, the argument will be
+    * cloned to prevent modification.
+    *
+    * @param nameConstraints The new name constraints.
+    * @throws IOException If the argument is not a valid DER-encoded
+    *         name constraints.
+    */
+   public void setNameConstraints(byte[] nameConstraints)
+     throws IOException
+   {
+     // FIXME check if the argument is valid.
+     this.nameConstraints = nameConstraints != null
+       ? (byte[]) nameConstraints.clone() : null;
+   }
+ 
+   /**
+    * Returns the basic constraints criterion, or -1 if this value is not set.
+    *
+    * @return The basic constraints.
+    */
+   public int getBasicConstraints()
+   {
+     return basicConstraints;
+   }
+ 
+   /**
+    * Sets the basic constraints criterion. Specify -1 to clear this parameter.
+    *
+    * @param basicConstraints The new basic constraints value.
+    */
+   public void setBasicConstraints(int basicConstraints)
+   {
+     if (basicConstraints < -1)
+       basicConstraints = -1;
+     this.basicConstraints = basicConstraints;
+   }
+ 
+   // The last two criteria not yet implemented are certificate policies
+   // and path-to-names. Both of these are somewhat advanced extensions
+   // (you could probably count the applications that actually use them
+   //  on one hand), and they both have no support in the X509Certificate
+   // class.
+   //
+   // Not having support in X509Certificate is not always a problem; for
+   // example, we can compare DER-encoded values as byte arrays for some
+   // extensions. We can't, however, compare them if they are specified
+   // in a set (as policies are). We need to parse the actual value in the
+   // certificate, and check it against the specified set.
+ 
+   // FIXME
+ //   public void setPolicy(Set policy) throws IOException
+ //   {
+ //     if (policy != null)
+ //       {
+ //         for (Iterator it = policy.iterator(); it.hasNext(); )
+ //           try
+ //             {
+ //               OID oid = new OID((String) it.next());
+ //               int[] i = oid.getIDs();
+ //               if (!checkOid(i))
+ //                 throw new IOException("invalid OID");
+ //             }
+ //           catch (Exception x)
+ //             {
+ //               throw new IOException("invalid OID");
+ //             }
+ //       }
+ //     this.policy = policy != null ? new HashSet(policy) : null;
+ //   }
+ 
+   // FIXME
+ //   public void setPathToNames(Collection names) throws IOException
+ //   {
+ //     if (names == null)
+ //       {
+ //         this.names = null;
+ //         return;
+ //       }
+ //     for (Iterator it = names.iterator(); it.hasNext(); )
+ //       {
+ //         try
+ //           {
+ //             List l = (List) it.next();
+ //             if (l.get(1) instanceof String)
+ //               addPathToName(((Integer)l.get(0)).intValue(), (String)l.get(1));
+ //             else
+ //               addPathToName(((Integer)l.get(0)).intValue(), (byte[])l.get(1));
+ //           }
+ //         catch (Exception x)
+ //           {
+ //            this.names = null;
+ //             throw new IOException("invalid names");
+ //           }
+ //       }
+ //   }
+ 
+   // FIXME
+ //   public void addPathToName(int id, String name) throws IOException
+ //   {
+ //   }
+ 
+   // FIXME
+ //   public void addPathToName(int id, byte[] name) throws IOException
+ //   {
+ //   }
+ 
+   // FIXME
+ //   public Collection getSubjectAlternativeNames()
+ //   {
+ //     return null;
+ //   }
+ 
+   // FIXME
+ //   public Set getPolicy()
+ //   {
+ //     return null;
+ //   }
+ 
+   // FIXME
+ //   public Collection getPathToNames()
+ //   {
+ //     return null;
+ //   }
+ 
+   /**
+    * Match a certificate. This method will check the given certificate
+    * against all the enabled criteria of this selector, and will return
+    * <code>true</code> if the given certificate matches.
+    *
+    * @param certificate The certificate to check.
+    * @return true if the certificate matches all criteria.
+    */
+   public boolean match(Certificate certificate)
+   {
+     if (!(certificate instanceof X509Certificate))
+       return false;
+     X509Certificate cert = (X509Certificate) certificate;
+     if (this.cert != null)
+       {
+         try
+           {
+             byte[] e1 = this.cert.getEncoded();
+             byte[] e2 = cert.getEncoded();
+             if (!Arrays.equals(e1, e2))
+               return false;
+           }
+         catch (CertificateEncodingException cee)
+           {
+             return false;
+           }
+       }
+     if (serialNo != null)
+       {
+         if (!serialNo.equals(cert.getSerialNumber()))
+           return false;
+       }
+     if (certValid != null)
+       {
+         try
+           {
+             cert.checkValidity(certValid);
+           }
+         catch (CertificateException ce)
+           {
+             return false;
+           }
+       }
+     if (issuer != null)
+       {
+         if (!issuer.equals(cert.getIssuerX500Principal()))
+           return false;
+       }
+     if (subject != null)
+       {
+         if (!subject.equals(cert.getSubjectX500Principal()))
+           return false;
+       }
+     if (sigId != null)
+       {
+         if (!sigId.toString().equals(cert.getSigAlgOID()))
+           return false;
+       }
+     if (subjectKeyId != null)
+       {
+         byte[] b = cert.getExtensionValue(SUBJECT_KEY_ID);
+         if (!Arrays.equals(b, subjectKeyId))
+           return false;
+       }
+     if (authKeyId != null)
+       {
+         byte[] b = cert.getExtensionValue(AUTH_KEY_ID);
+         if (!Arrays.equals(b, authKeyId))
+           return false;
+       }
+     if (keyUsage != null)
+       {
+         boolean[] b = cert.getKeyUsage();
+         if (!Arrays.equals(b, keyUsage))
+           return false;
+       }
+     if (basicConstraints >= 0)
+       {
+         if (cert.getBasicConstraints() != basicConstraints)
+           return false;
+       }
+     if (keyPurposeSet != null)
+       {
+         List kp = null;
+         try
+           {
+             kp = cert.getExtendedKeyUsage();
+           }
+         catch (CertificateParsingException cpe)
+           {
+             return false;
+           }
+         if (kp == null)
+           return false;
+         for (Iterator it = keyPurposeSet.iterator(); it.hasNext(); )
+           {
+             if (!kp.contains(it.next()))
+               return false;
+           }
+       }
+     if (altNames != null)
+       {
+         Collection an = null;
+         try
+           {
+             an = cert.getSubjectAlternativeNames();
+           }
+         catch (CertificateParsingException cpe)
+           {
+             return false;
+           }
+         if (an == null)
+           return false;
+         int match = 0;
+         for (Iterator it = altNames.iterator(); it.hasNext(); )
+           {
+             List l = (List) it.next();
+             Integer id = (Integer) l.get(0);
+             String s = null;
+             byte[] b = null;
+             if (l.get(1) instanceof String)
+               s = (String) l.get(1);
+             else if (l.get(1) instanceof byte[])
+               b = (byte[]) l.get(1);
+             else
+               return false;
+             for (Iterator it2 = an.iterator(); it2.hasNext(); )
+               {
+                 Object o = it2.next();
+                 if (!(o instanceof List))
+                   continue;
+                 List l2 = (List) o;
+                 if (l2.size() != 2)
+                   continue;
+                 if (!id.equals(l2.get(0)))
+                   continue;
+                 if (s != null && (l2.get(1) instanceof String) &&
+                     s.equals(l2.get(1)))
+                   match++;
+                 else if (b != null && (l2.get(1) instanceof byte[]) &&
+                          Arrays.equals(b, (byte[]) l2.get(1)))
+                   match++;
+               }
+             if (match == 0 || (matchAllNames && match != altNames.size()))
+               return false;
+           }
+       }
+     if (nameConstraints != null)
+       {
+         byte[] nc = cert.getExtensionValue(NAME_CONSTRAINTS_ID);
+         if (!Arrays.equals(nameConstraints, nc))
+           return false;
+       }
+ 
+     // FIXME check policies.
+     // FIXME check path-to-names.
+ 
+     return true;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer str = new StringBuffer(X509CertSelector.class.getName());
+     String nl = SystemProperties.getProperty("line.separator");
+     String eol = ";" + nl;
+     str.append(" {").append(nl);
+     if (cert != null)
+       str.append("  certificate = ").append(cert).append(eol);
+     if (basicConstraints >= 0)
+       str.append("  basic constraints = ").append(basicConstraints).append(eol);
+     if (serialNo != null)
+       str.append("  serial number = ").append(serialNo).append(eol);
+     if (certValid != null)
+       str.append("  valid date = ").append(certValid).append(eol);
+     if (issuer != null)
+       str.append("  issuer = ").append(issuer).append(eol);
+     if (subject != null)
+       str.append("  subject = ").append(subject).append(eol);
+     if (sigId != null)
+       str.append("  signature OID = ").append(sigId).append(eol);
+     if (subjectKey != null)
+       str.append("  subject public key = ").append(subjectKey).append(eol);
+     if (subjectKeyId != null)
+       {
+         str.append("  subject key ID = ");
+         for (int i = 0; i < subjectKeyId.length; i++)
+           {
+             str.append(Character.forDigit((subjectKeyId[i] & 0xF0) >>> 8, 16));
+             str.append(Character.forDigit((subjectKeyId[i] & 0x0F), 16));
+             if (i < subjectKeyId.length - 1)
+               str.append(':');
+           }
+         str.append(eol);
+       }
+     if (authKeyId != null)
+       {
+         str.append("  authority key ID = ");
+         for (int i = 0; i < authKeyId.length; i++)
+           {
+             str.append(Character.forDigit((authKeyId[i] & 0xF0) >>> 8, 16));
+             str.append(Character.forDigit((authKeyId[i] & 0x0F), 16));
+             if (i < authKeyId.length - 1)
+               str.append(':');
+           }
+         str.append(eol);
+       }
+     if (keyUsage != null)
+       {
+         str.append("  key usage = ");
+         for (int i = 0; i < keyUsage.length; i++)
+           str.append(keyUsage[i] ? '1' : '0');
+         str.append(eol);
+       }
+     if (keyPurposeSet != null)
+       str.append("  key purpose = ").append(keyPurposeSet).append(eol);
+     if (altNames != null)
+       str.append("  alternative names = ").append(altNames).append(eol);
+     if (nameConstraints != null)
+       str.append("  name constraints = <blob of data>").append(eol);
+     str.append("}").append(nl);
+     return str.toString();
+   }
+ 
+   public Object clone()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException shouldNotHappen)
+       {
+         throw new Error(shouldNotHappen);
+       }
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private static boolean checkOid(int[] oid)
+   {
+     return (oid != null && oid.length > 2 &&
+             (oid[0] >= 0 && oid[0] <= 2) && (oid[1] >= 0 && oid[1] <= 39));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/X509Certificate.java gcc-4.1.0/libjava/classpath/java/security/cert/X509Certificate.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/X509Certificate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/X509Certificate.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,588 ----
+ /* X509Certificate.java --- X.509 Certificate class
+    Copyright (C) 1999,2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ 
+ import java.math.BigInteger;
+ import java.security.Principal;
+ import java.util.Date;
+ 
+ /**
+  * X509Certificate is the abstract class for X.509 certificates.
+  * This provides a stanard class interface for accessing all 
+  * the attributes of X.509 certificates.
+  *
+  * <p>In June 1996, the basic X.509 v3 format was finished by 
+  * ISO/IEC and ANSI X.9. The ASN.1 DER format is below:
+  *
+  * <blockquote><pre>
+  * Certificate  ::=  SEQUENCE  {
+  *   tbsCertificate       TBSCertificate,
+  *   signatureAlgorithm   AlgorithmIdentifier,
+  *   signatureValue       BIT STRING  }
+  * </pre></blockquote>
+  *
+  * <p>These certificates are widely used in various Internet 
+  * protocols to support authentication. It is used in 
+  * Privacy Enhanced Mail (PEM), Transport Layer Security (TLS),
+  * Secure Sockets Layer (SSL), code signing for trusted software
+  * distribution, and Secure Electronic Transactions (SET).
+  *
+  * <p>The certificates are managed and vouched for by 
+  * <I>Certificate Authorities</I> (CAs). CAs are companies or 
+  * groups that create certificates by placing the data in the 
+  * X.509 certificate format and signing it with their private
+  * key. CAs serve as trusted third parties by certifying that
+  * the person or group specified in the certificate is who
+  * they say they are. 
+  *
+  * <p>The ASN.1 defintion for <I>tbsCertificate</I> is
+  * 
+  * <blockquote><pre>
+  * TBSCertificate  ::=  SEQUENCE  {
+  *   version         [0]  EXPLICIT Version DEFAULT v1,
+  *   serialNumber         CertificateSerialNumber,
+  *   signature            AlgorithmIdentifier,
+  *   issuer               Name,
+  *   validity             Validity,
+  *   subject              Name,
+  *   subjectPublicKeyInfo SubjectPublicKeyInfo,
+  *   issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
+  *                        -- If present, version shall be v2 or v3
+  *   subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
+  *                        -- If present, version shall be v2 or v3
+  *   extensions      [3]  EXPLICIT Extensions OPTIONAL
+  *                        -- If present, version shall be v3
+  * }
+  *
+  * Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
+  *
+  * CertificateSerialNumber  ::=  INTEGER
+  *
+  * Validity ::= SEQUENCE {
+  *   notBefore      Time,
+  *   notAfter       Time }
+  *
+  * Time ::= CHOICE {
+  *   utcTime        UTCTime,
+  *   generalTime    GeneralizedTime }
+  *
+  * UniqueIdentifier  ::=  BIT STRING
+  *
+  * SubjectPublicKeyInfo  ::=  SEQUENCE  {
+  *   algorithm            AlgorithmIdentifier,
+  *   subjectPublicKey     BIT STRING  }
+  *
+  * Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
+  *
+  * Extension  ::=  SEQUENCE  {
+  *   extnID      OBJECT IDENTIFIER,
+  *   critical    BOOLEAN DEFAULT FALSE,
+  *   extnValue   OCTET STRING  }
+  * </pre></blockquote>
+  * 
+  * Certificates are created with the CertificateFactory.
+  *
+  * <p>References:
+  *
+  * <ol>
+  * <li>Olivier Dubuisson, Philippe Fouquart (Translator) <i>ASN.1 -
+  * Communication between heterogeneous systems</i>, (C) September 2000,
+  * Morgan Kaufmann Publishers, ISBN 0-12-6333361-0. Available on-line at
+  * <a
+  * href="http://www.oss.com/asn1/dubuisson.html">http://www.oss.com/asn1/dubuisson.html</a></li>
+  * <li>R. Housley et al, <i><a href="http://www.ietf.org/rfc/rfc3280.txt">RFC
+  * 3280: Internet X.509 Public Key Infrastructure Certificate and CRL
+  * Profile</a></i>.</li>
+  * </ol>
+  *
+  * @since JDK 1.2
+  * @author Mark Benvenuto
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public abstract class X509Certificate
+   extends java.security.cert.Certificate  // XXX workaround for gcj bug #17845
+   implements X509Extension
+ {
+   private static final long serialVersionUID = -2491127588187038216L;
+ 
+   /**
+    * Constructs a new certificate of the specified type.
+    */
+   protected X509Certificate()
+   {
+     super( "X.509" );
+   }
+ 
+   /**
+      Checks the validity of the X.509 certificate. It is valid
+      if the current date and time are within the period specified
+      by the certificate.
+ 
+      The ASN.1 DER encoding is:
+ 
+      validity             Validity,
+ 
+      Validity ::= SEQUENCE {
+      notBefore      Time,
+      notAfter       Time }
+ 
+      Time ::= CHOICE {
+      utcTime        UTCTime,
+      generalTime    GeneralizedTime }
+ 
+      Consult rfc2459 for more information.
+ 
+      @throws CertificateExpiredException if the certificate expired
+      @throws CertificateNotYetValidException if the certificate is 
+      not yet valid
+   */
+   public abstract void checkValidity()
+     throws CertificateExpiredException,
+     CertificateNotYetValidException;
+ 
+   /**
+      Checks the validity of the X.509 certificate for the 
+      specified time and date. It is valid if the specified 
+      date and time are within the period specified by 
+      the certificate.
+ 
+      @throws CertificateExpiredException if the certificate expired 
+      based on the date
+      @throws CertificateNotYetValidException if the certificate is 
+      not yet valid based on the date
+   */
+   public abstract void checkValidity(Date date)
+     throws CertificateExpiredException,
+     CertificateNotYetValidException;
+ 
+   /**
+      Returns the version of this certificate.
+ 
+      The ASN.1 DER encoding is:
+ 
+      version         [0]  EXPLICIT Version DEFAULT v1,
+ 
+      Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return version number of certificate	
+   */
+   public abstract int getVersion();
+ 
+   /**
+      Gets the serial number for serial Number in
+      this Certifcate. It must be a unique number 
+      unique other serial numbers from the granting CA.
+ 
+      The ASN.1 DER encoding is:
+ 
+      serialNumber         CertificateSerialNumber,
+ 
+      CertificateSerialNumber  ::=  INTEGER
+ 
+      Consult rfc2459 for more information.
+ 
+      @return the serial number for this X509CRLEntry.
+   */
+   public abstract BigInteger getSerialNumber();
+ 
+   /**
+      Returns the issuer (issuer distinguished name) of the 
+      Certificate. The issuer is the entity who signed 
+      and issued the Certificate.
+ 
+      The ASN.1 DER encoding is:
+ 
+      issuer                  Name,
+ 
+      Name ::= CHOICE {
+      RDNSequence }
+ 
+      RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
+ 
+      RelativeDistinguishedName ::=
+      SET OF AttributeTypeAndValue
+ 
+      AttributeTypeAndValue ::= SEQUENCE {
+      type     AttributeType,
+      value    AttributeValue }
+ 
+      AttributeType ::= OBJECT IDENTIFIER
+ 
+      AttributeValue ::= ANY DEFINED BY AttributeType
+ 
+      DirectoryString ::= CHOICE {
+      teletexString           TeletexString (SIZE (1..MAX)),
+      printableString         PrintableString (SIZE (1..MAX)),
+      universalString         UniversalString (SIZE (1..MAX)),
+      utf8String              UTF8String (SIZE (1.. MAX)),
+      bmpString               BMPString (SIZE (1..MAX)) }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return the issuer in the Principal class
+   */
+   public abstract Principal getIssuerDN();
+ 
+   /**
+      Returns the subject (subject distinguished name) of the 
+      Certificate. The subject is the entity who the Certificate
+      identifies.
+ 
+      The ASN.1 DER encoding is:
+ 
+      subject              Name,
+ 
+      Consult rfc2459 for more information.
+ 
+      @return the issuer in the Principal class
+   */
+   public abstract Principal getSubjectDN();
+ 
+   /**
+      Returns the date that this certificate is not to be used
+      before, <I>notBefore</I>.
+ 
+      The ASN.1 DER encoding is:
+ 
+      validity             Validity,
+ 
+      Validity ::= SEQUENCE {
+      notBefore      Time,
+      notAfter       Time }
+ 
+      Time ::= CHOICE {
+      utcTime        UTCTime,
+      generalTime    GeneralizedTime }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return the date <I>notBefore</I>
+   */
+   public abstract Date getNotBefore();
+ 
+   /**
+      Returns the date that this certificate is not to be used
+      after, <I>notAfter</I>.
+ 
+      @return the date <I>notAfter</I>
+   */
+   public abstract Date getNotAfter();
+ 
+ 
+   /**
+      Returns the <I>tbsCertificate</I> from the certificate.
+ 
+      @return the DER encoded tbsCertificate
+ 
+      @throws CertificateEncodingException if encoding error occurred
+   */
+   public abstract byte[] getTBSCertificate() throws CertificateEncodingException;
+ 
+   /**
+      Returns the signature in its raw DER encoded format.
+ 
+      The ASN.1 DER encoding is:
+ 
+      signatureValue       BIT STRING
+ 
+      Consult rfc2459 for more information.
+ 
+      @return byte array representing signature
+   */
+   public abstract byte[] getSignature();
+ 
+   /**
+      Returns the signature algorithm used to sign the CRL. 
+      An examples is "SHA-1/DSA".
+ 
+      The ASN.1 DER encoding is:
+ 
+      signatureAlgorithm   AlgorithmIdentifier,
+ 
+      AlgorithmIdentifier  ::=  SEQUENCE  {
+      algorithm               OBJECT IDENTIFIER,
+      parameters              ANY DEFINED BY algorithm OPTIONAL  }
+ 
+      Consult rfc2459 for more information.
+ 
+      The algorithm name is determined from the OID.
+ 
+      @return a string with the signature algorithm name
+   */
+   public abstract String getSigAlgName();
+ 
+ 
+   /**
+      Returns the OID for the signature algorithm used.
+      Example "1.2.840.10040.4.3" is return for SHA-1 with DSA.\
+ 
+      The ASN.1 DER encoding for the example is:
+ 
+      id-dsa-with-sha1 ID  ::=  {
+      iso(1) member-body(2) us(840) x9-57 (10040)
+      x9cm(4) 3 }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return a string containing the OID.
+   */
+   public abstract String getSigAlgOID();
+ 
+ 
+   /**
+      Returns the AlgorithmParameters in the encoded form
+      for the signature algorithm used. 
+ 
+      If access to the parameters is need, create an 
+      instance of AlgorithmParameters.
+ 
+      @return byte array containing algorithm parameters, null
+      if no parameters are present in certificate
+   */
+   public abstract byte[] getSigAlgParams();
+ 
+ 
+   /**
+      Returns the issuer unique ID for this certificate.
+ 
+      The ASN.1 DER encoding is:
+ 
+      issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
+      -- If present, version shall be v2 or v3
+ 
+      UniqueIdentifier  ::=  BIT STRING
+ 	
+      Consult rfc2459 for more information.
+ 
+      @return bit representation of <I>issuerUniqueID</I>
+   */
+   public abstract boolean[] getIssuerUniqueID();
+ 
+   /**
+      Returns the subject unique ID for this certificate.
+ 
+      The ASN.1 DER encoding is:
+ 
+      subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
+      -- If present, version shall be v2 or v3
+ 
+      UniqueIdentifier  ::=  BIT STRING
+ 	
+      Consult rfc2459 for more information.
+ 
+      @return bit representation of <I>subjectUniqueID</I>
+   */
+   public abstract boolean[] getSubjectUniqueID();
+ 
+   /**
+      Returns a boolean array representing the <I>KeyUsage</I> 
+      extension for the certificate. The KeyUsage (OID = 2.5.29.15)
+      defines the purpose of the key in the certificate.
+ 
+      The ASN.1 DER encoding is:
+ 
+      id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
+ 
+      KeyUsage ::= BIT STRING {
+      digitalSignature        (0),
+      nonRepudiation          (1),
+      keyEncipherment         (2),
+      dataEncipherment        (3),
+      keyAgreement            (4),
+      keyCertSign             (5),
+      cRLSign                 (6),
+      encipherOnly            (7),
+      decipherOnly            (8) }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return bit representation of <I>KeyUsage</I>
+   */
+   public abstract boolean[] getKeyUsage();
+ 
+   /**
+      Returns the certificate constraints path length from the
+      critical BasicConstraints extension, (OID = 2.5.29.19).	
+ 
+      The basic constraints extensions is used to determine if 
+      the subject of the certificate is a Certificate Authority (CA) 
+      and how deep the certification path may exist. The 
+      <I>pathLenConstraint</I> only takes affect if <I>cA</I>
+      is set to true. "A value of zero indicates that only an 
+      end-entity certificate may follow in the path." (rfc2459)
+ 	
+      The ASN.1 DER encoding is:
+ 
+      id-ce-basicConstraints OBJECT IDENTIFIER ::=  { id-ce 19 }
+ 
+      BasicConstraints ::= SEQUENCE {
+      cA                      BOOLEAN DEFAULT FALSE,
+      pathLenConstraint       INTEGER (0..MAX) OPTIONAL }
+ 
+      Consult rfc2459 for more information.
+ 
+      @return the length of the path constraint if BasicConstraints
+      is present and cA is TRUE. Otherwise returns -1.
+   */
+   public abstract int getBasicConstraints();
+ 
+   // 1.4 instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the <code>ExtendedKeyUsage</code> extension of this
+    * certificate, or null if there is no extension present. The returned
+    * value is a {@link java.util.List} strings representing the object
+    * identifiers of the extended key usages. This extension has the OID
+    * 2.5.29.37.
+    *
+    * <p>The ASN.1 definition for this extension is:
+    *
+    * <blockquote><pre> 
+    * ExtendedKeyUsage ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
+    *
+    * KeyPurposeId ::= OBJECT IDENTIFIER
+    * </pre></blockquote>
+    *
+    * @return The list of extension OIDs, or null if there are none
+    * present in this certificate.
+    * @throws CertificateParsingException If this extension cannot be
+    * parsed from its encoded form.
+    */
+   public java.util.List getExtendedKeyUsage()
+     throws CertificateParsingException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Returns the alternative names for this certificate's subject (the
+    * owner), or null if there are none.
+    *
+    * <p>This is an X.509 extension with OID 2.5.29.17 and is defined by
+    * the ASN.1 construction:
+    *
+    * <blockquote><pre>
+    * SubjectAltNames ::= GeneralNames
+    *
+    * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
+    *
+    * GeneralName ::= CHOICE {
+    *   otherName                 [0]   OtherName,
+    *   rfc822Name                [1]   IA5String,
+    *   dNSName                   [2]   IA5String,
+    *   x400Address               [3]   ORAddress,
+    *   directoryName             [4]   Name,
+    *   ediPartyName              [5]   EDIPartyName,
+    *   uniformResourceIdentifier [6]   IA5String,
+    *   iPAddress                 [7]   OCTET STRING,
+    *   registeredID              [8]   OBJECT IDENTIFIER
+    * }
+    * </pre></blockquote>
+    *
+    * <p>The returned collection contains one or more two-element Lists,
+    * with the first object being an Integer representing the choice
+    * above (with value 0 through 8) and the second being an (a) String
+    * if the <code>GeneralName</code> is a rfc822Name, dNSName,
+    * uniformResourceIdentifier, iPAddress, or registeredID, or (b) a
+    * byte array of the DER encoded form for any others.
+    *
+    * @return The collection of alternative names, or null if there are
+    * none.
+    * @throws CertificateParsingException If the encoded extension cannot
+    * be parsed.
+    * @since JDK 1.4
+    */
+   public java.util.Collection getSubjectAlternativeNames()
+     throws CertificateParsingException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Returns the alternative names for this certificate's issuer, or
+    * null if there are none.
+    *
+    * <p>This is an X.509 extension with OID 2.5.29.18, and is defined by
+    * the ASN.1 construction:
+    *
+    * <blockquote><pre>
+    * IssuerAltNames ::= GeneralNames
+    * </pre></blockquote>
+    *
+    * <p>The <code>GeneralNames</code> construct and the form of the
+    * returned collection are the same as with {@link
+    * #getSubjectAlternativeNames()}.
+    *
+    * @return The collection of alternative names, or null if there are
+    * none.
+    * @throws CertificateParsingException If the encoded extension cannot
+    * be parsed.
+    * @since JDK 1.4
+    */
+   public java.util.Collection getIssuerAlternativeNames()
+     throws CertificateParsingException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Returns the X.500 distinguished name of this certificate's subject.
+    *
+    * @return The subject's X.500 distinguished name.
+    * @since JDK 1.4
+    */
+   public javax.security.auth.x500.X500Principal getSubjectX500Principal()
+   {
+     throw new UnsupportedOperationException();
+   }
+  
+   /**
+    * Returns the X.500 distinguished name of this certificate's issuer.
+    *
+    * @return The issuer's X.500 distinguished name.
+    * @since JDK 1.4
+    */
+   public javax.security.auth.x500.X500Principal getIssuerX500Principal()
+   {
+     throw new UnsupportedOperationException();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/X509Extension.java gcc-4.1.0/libjava/classpath/java/security/cert/X509Extension.java
*** gcc-4.0.2/libjava/classpath/java/security/cert/X509Extension.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/X509Extension.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* X509Extension.java --- X.509 Extension
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.cert;
+ import java.util.Set;
+ 
+ /**
+ 	Public interface for the X.509 Extension.
+ 
+ 	This is used for X.509 v3 Certificates and CRL v2 (Certificate
+ 	Revocation Lists) for managing attributes assoicated with
+ 	Certificates, for managing the hierarchy of certificates,
+ 	and for managing the distribution of CRL. This extension
+ 	format is used to define private extensions.
+ 
+ 	Each extensions for a certificate or CRL must be marked
+ 	either critical or non-critical. If the certificate/CRL 
+ 	system encounters a critical extension not recognized then 
+ 	it must reject the certificate. A non-critical extension
+ 	may be just ignored if not recognized.
+ 
+ 
+ 	The ASN.1 definition for this class is: 
+ 
+ 	 Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
+ 
+ 	 Extension  ::=  SEQUENCE  {
+ 	     extnId        OBJECT IDENTIFIER,
+ 	     critical      BOOLEAN DEFAULT FALSE,
+ 	     extnValue     OCTET STRING
+ 	                   -- contains a DER encoding of a value
+ 	                   -- of the type registered for use with
+ 	                   -- the extnId object identifier value
+ 	 }
+  	
+ 	@author Mark Benvenuto
+ 
+ 	@since JDK 1.2
+ */
+ public interface X509Extension
+ {
+ 
+   /**
+      Returns true if the certificate contains a critical extension
+      that is not supported.
+ 
+      @return true if has unsupported extension, false otherwise	
+   */
+   boolean hasUnsupportedCriticalExtension();
+ 
+   /**
+      Returns a set of the CRITICAL extension OIDs from the 
+      certificate/CRL that the object implementing this interface
+      manages.
+ 
+      @return A Set containing the OIDs. If there are no CRITICAL
+      extensions or extensions at all this returns null.
+   */
+   Set getCriticalExtensionOIDs();
+ 
+   /**
+      Returns a set of the NON-CRITICAL extension OIDs from the 
+      certificate/CRL that the object implementing this interface
+      manages.
+ 
+      @return A Set containing the OIDs. If there are no NON-CRITICAL
+      extensions or extensions at all this returns null.
+   */
+   Set getNonCriticalExtensionOIDs();
+ 
+   /**
+      Returns the DER encoded OCTET string for the specified
+      extension value identified by a OID. The OID is a string
+      of number separated by periods. Ex: 12.23.45.67
+   */
+   byte[] getExtensionValue(String oid);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/cert/package.html gcc-4.1.0/libjava/classpath/java/security/cert/package.html
*** gcc-4.0.2/libjava/classpath/java/security/cert/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/cert/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.security.cert package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.security.cert</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAKey.java gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAKey.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,56 ----
+ /* DSAKey.java -- Interface for Digital Signature Algorithm key
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ /**
+  * This interface is implemented by a class to return the parameters
+  * of a Digital Signature Algorithm (DSA) public or private key.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface DSAKey
+ {
+   /**
+    * This method returns non-secret parameters of the DSA key
+    *
+    * @return The DSA parameters
+    */
+   DSAParams getParams();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAKeyPairGenerator.java gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAKeyPairGenerator.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAKeyPairGenerator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAKeyPairGenerator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* DSAKeyPairGenerator.java -- Initialize a DSA key generator
+    Copyright (C) 1998, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ import java.security.InvalidParameterException;
+ import java.security.SecureRandom;
+ 
+ /**
+  * This interface contains methods for intializing a Digital Signature
+  * Algorithm key generation engine.  The initialize methods may be called
+  * any number of times.  If no explicity initialization call is made, then
+  * the engine defaults to generating 1024-bit keys using pre-calculated
+  * base, prime, and subprime values.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface DSAKeyPairGenerator
+ {
+   /**
+    * Initializes the key generator with the specified DSA parameters and
+    * random bit source
+    *
+    * @param params The DSA parameters to use
+    * @param random The random bit source to use
+    *
+    * @exception InvalidParameterException If the parameters passed are not valid
+    */
+   void initialize (DSAParams params, SecureRandom random)
+     throws InvalidParameterException;
+ 
+   /**
+    * Initializes the key generator to a give modulus.  If the <code>genParams</code>
+    * value is <code>true</code> then new base, prime, and subprime values
+    * will be generated for the given modulus.  If not, the pre-calculated
+    * values will be used.  If no pre-calculated values exist for the specified
+    * modulus, an exception will be thrown.  It is guaranteed that there will
+    * always be pre-calculated values for all modulus values between 512 and
+    * 1024 bits inclusives.
+    *
+    * @param modlen The modulus length
+    * @param genParams <code>true</code> to generate new DSA parameters, <code>false</code> otherwise
+    * @param random The random bit source to use
+    *
+    * @exception InvalidParameterException If a parameter is invalid
+    */
+   void initialize (int modlen, boolean genParams, SecureRandom random)
+     throws InvalidParameterException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAParams.java gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAParams.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAParams.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAParams.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* DSAParams.java -- Digital Signature Algorithm parameter access
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ import java.math.BigInteger;
+ 
+ /**
+  * This interface allows the Digital Signature Algorithm (DSA) parameters
+  * to be queried.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface DSAParams
+ {
+   /**
+    * Returns the base, or 'g' value
+    *
+    * @return The DSA base value
+    */
+   BigInteger getG();
+ 
+   /**
+    * Returns the prime, or 'p' value
+    *
+    * @return The DSA prime value
+    */
+   BigInteger getP();
+ 
+   /**
+    * Returns the subprime, or 'q' value
+    *
+    * @return The DSA subprime value
+    */
+   BigInteger getQ();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAPrivateKey.java gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAPrivateKey.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAPrivateKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAPrivateKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* DSAPublicKey.java -- A Digital Signature Algorithm private key
+    Copyright (C) 1998, 2000, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ import java.math.BigInteger;
+ import java.security.PrivateKey;
+ 
+ /**
+  * This interface models a Digital Signature Algorithm (DSA) private key
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface DSAPrivateKey extends DSAKey, PrivateKey
+ {
+   /**
+    * The version identifier used for serialization.
+    */
+   long serialVersionUID = 7776497482533790279L;
+ 
+   /**
+    * This method returns the value of the DSA private key
+    */
+   BigInteger getX();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAPublicKey.java gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAPublicKey.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/DSAPublicKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/DSAPublicKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* DSAPublicKey.java -- A Digital Signature Algorithm public key
+    Copyright (C) 1998, 2000, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ import java.math.BigInteger;
+ import java.security.PublicKey;
+ 
+ /**
+  * This interface models a Digital Signature Algorithm (DSA) public key
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface DSAPublicKey extends DSAKey, PublicKey
+ {
+   /**
+    * The version identifier used for serialization.
+    */
+   long serialVersionUID = 1234526332779022332L;
+ 
+   /**
+    * This method returns the value of the DSA public key
+    */
+   BigInteger getY();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAKey.java gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAKey.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* RSAKey.java --- A generic RSA Key interface
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ import java.math.BigInteger;
+ 
+ /**
+    A generic RSA Key interface for public and private keys
+ 
+    @since JDK 1.3
+ 
+    @author Mark Benvenuto
+  */
+ public interface RSAKey
+ {
+   /**
+      Generates a modulus.
+ 
+      @returns a modulus
+    */
+   BigInteger getModulus();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,111 ----
+ /* RSAMultiPrimePrivateCrtKey.java --
+    Copyright (C) 2003, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ import java.math.BigInteger;
+ import java.security.spec.RSAOtherPrimeInfo;
+ 
+ /**
+  * The interface to an RSA multi-prime private key, as defined in the PKCS#1
+  * v2.1, using the <i>Chinese Remainder Theorem</i> (CRT) information values.
+  *
+  * @since 1.4
+  * @see java.security.spec.RSAPrivateKeySpec
+  * @see java.security.spec.RSAMultiPrimePrivateCrtKeySpec
+  * @see RSAPrivateKey
+  * @see RSAPrivateCrtKey
+  */
+ public interface RSAMultiPrimePrivateCrtKey extends RSAPrivateKey
+ {
+   // Constants
+   // --------------------------------------------------------------------------
+   long serialVersionUID = 618058533534628008L;
+ 
+   // Methods
+   // --------------------------------------------------------------------------
+ 
+   /**
+    * Returns the public exponent.
+    *
+    * @return the public exponent.
+    */
+   BigInteger getPublicExponent();
+ 
+   /**
+    * Returns the primeP.
+    *
+    * @return the primeP.
+    */
+   BigInteger getPrimeP();
+ 
+   /**
+    * Returns the primeQ.
+    *
+    * @return the primeQ.
+    */
+   BigInteger getPrimeQ();
+ 
+   /**
+    * Returns the primeExponentP.
+    *
+    * @return the primeExponentP.
+    */
+   BigInteger getPrimeExponentP();
+ 
+   /**
+    * Returns the primeExponentQ.
+    *
+    * @return the primeExponentQ.
+    */
+   BigInteger getPrimeExponentQ();
+ 
+   /**
+    * Returns the crtCoefficient.
+    *
+    * @return the crtCoefficient.
+    */
+   BigInteger getCrtCoefficient();
+ 
+   /**
+    * Returns the otherPrimeInfo or <code>null</code> if there are only two
+    * prime factors (p and q).
+    *
+    * @return the otherPrimeInfo.
+    */
+   RSAOtherPrimeInfo[] getOtherPrimeInfo();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAPrivateCrtKey.java gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAPrivateCrtKey.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAPrivateCrtKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAPrivateCrtKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,95 ----
+ /* RSAPrivateCrtKey.java -- An RSA private key in CRT format
+    Copyright (C) 1998 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ import java.math.BigInteger;
+ 
+ /**
+  * This interface provides access to information about an RSA private
+  * key in Chinese Remainder Theorem (CRT) format.
+  *
+  * @version 0.0
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface RSAPrivateCrtKey extends RSAPrivateKey
+ {
+   long serialVersionUID = -5682214253527700368L;
+ 
+   /**
+    * Returns the public exponent for this key
+    *
+    * @return The public exponent for this key
+    */
+   BigInteger getPublicExponent();
+ 
+   /**
+    * Returns the primeP value
+    *
+    * @return The primeP value
+    */
+   BigInteger getPrimeP();
+ 
+   /**
+    * Returns the primeQ value
+    *
+    * @return The primeQ value
+    */
+   BigInteger getPrimeQ();
+ 
+   /**
+    * Returns the primeExponentP
+    *
+    * @return The primeExponentP
+    */
+   BigInteger getPrimeExponentP();
+ 
+   /**
+    * Returns the primeExponentQ
+    *
+    * @return The primeExponentQ
+    */
+   BigInteger getPrimeExponentQ();
+ 
+   /**
+    * Returns the CRT coefficient
+    *
+    * @return The CRT coefficient
+    */
+   BigInteger getCrtCoefficient();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAPrivateKey.java gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAPrivateKey.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAPrivateKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAPrivateKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* RSAPrivateKey.java -- An RSA private key
+    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ import java.math.BigInteger;
+ import java.security.PrivateKey;
+ 
+ /**
+  * This interface provides access to information about an RSA private key.
+  *
+  * @version 0.1
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface RSAPrivateKey extends PrivateKey, RSAKey
+ {
+   long serialVersionUID = 5187144804936595022L;
+ 
+   /**
+    * Returns the private exponent value for this key
+    *
+    * @return The private exponent value for this key
+    */
+   BigInteger getPrivateExponent();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAPublicKey.java gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAPublicKey.java
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/RSAPublicKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/RSAPublicKey.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* RSAPublicKey.java -- An RSA public key
+    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.interfaces;
+ 
+ import java.math.BigInteger;
+ import java.security.PublicKey;
+ 
+ /**
+  * This interface provides access to information about an RSA public key.
+  *
+  * @version 0.1
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface RSAPublicKey extends PublicKey, RSAKey
+ {
+   long serialVersionUID = -8727434096241101194L;
+ 
+   /**
+    * Returns the public exponent value for this key
+    *
+    * @return The public exponent value for this key
+    */
+   BigInteger getPublicExponent();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/interfaces/package.html gcc-4.1.0/libjava/classpath/java/security/interfaces/package.html
*** gcc-4.0.2/libjava/classpath/java/security/interfaces/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/interfaces/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.security.interfaces package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.security.interfaces</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/package.html gcc-4.1.0/libjava/classpath/java/security/package.html
*** gcc-4.0.2/libjava/classpath/java/security/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.security package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.security</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/AlgorithmParameterSpec.java gcc-4.1.0/libjava/classpath/java/security/spec/AlgorithmParameterSpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/AlgorithmParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/AlgorithmParameterSpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* AlgorithmParameterSpec.java --- Algorithm Parameter Spec Interface
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ 
+ /**
+ 	A transparent interface for Algorithm Parameter Specifications. 
+ 	It contains no member functions. It is used to group
+ 	algorithm parameter classes.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public interface AlgorithmParameterSpec
+ {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/DSAParameterSpec.java gcc-4.1.0/libjava/classpath/java/security/spec/DSAParameterSpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/DSAParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/DSAParameterSpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* DSAParameterSpec.java --- DSA Parameter Specificaton class
+    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ 
+ import java.math.BigInteger;
+ import java.security.interfaces.DSAParams;
+ 
+ /**
+  * DSA Parameter class Specification. Used to maintain the DSA
+  * Parameters.
+  *
+  * @since 1.2
+  *
+  * @author Mark Benvenuto
+ */
+ public class DSAParameterSpec implements AlgorithmParameterSpec, DSAParams
+ {
+   private BigInteger p = null;
+   private BigInteger q = null;
+   private BigInteger g = null;
+ 
+   /**
+    * Constructs a new DSAParameterSpec with the specified p, q, and g.
+    *
+    * @param p the prime
+    * @param q the sub-prime
+    * @param g the base
+    */
+   public DSAParameterSpec(BigInteger p, BigInteger q, BigInteger g) 
+   {
+     this.p = p;
+     this.q = q;
+     this.g = g;
+   }
+   
+   /**
+    * Returns p for the DSA algorithm.
+    *
+    * @return Returns the requested BigInteger
+    */
+   public BigInteger getP() 
+   {
+     return this.p;
+   }
+ 
+   /**
+    * Returns p for the DSA algorithm.
+    *
+    * @return Returns the requested BigInteger
+    */
+   public BigInteger getQ() 
+   {
+     return this.q;
+   }
+ 
+   /**
+    * Returns g for the DSA algorithm.
+    *
+    * @return Returns the requested BigInteger
+    */
+   public BigInteger getG()
+   {
+     return this.g;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/DSAPrivateKeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/DSAPrivateKeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/DSAPrivateKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/DSAPrivateKeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* DSAPrivateKeySpec.java --- DSA Private Key Specificaton class
+    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ import java.math.BigInteger;
+ 
+ /**
+ 	DSA Private Key class Specification. Used to maintain the DSA
+ 	Private Keys.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public class DSAPrivateKeySpec implements KeySpec 
+ {
+   private BigInteger x = null;
+   private BigInteger p = null;
+   private BigInteger q = null;
+   private BigInteger g = null;
+ 
+   /**
+      Constructs a new DSAPrivateKeySpec with the specified x, p, q, and g.
+ 
+      @param x the private key
+      @param p the prime
+      @param q the sub-prime
+      @param g the base
+   */
+   public DSAPrivateKeySpec(BigInteger x, BigInteger p, BigInteger q, BigInteger g) 
+   {
+     this.x = x;
+     this.p = p;
+     this.q = q;
+     this.g = g;
+   }
+ 
+   /**
+      Returns private key x for the DSA algorithm.
+ 
+      @return Returns the requested BigInteger
+   */
+   public BigInteger getX() 
+   {
+     return this.x;
+   }
+ 
+   /**
+      Returns p for the DSA algorithm.
+ 
+      @return Returns the requested BigInteger
+   */
+   public BigInteger getP() 
+   {
+     return this.p;
+   }
+ 
+   /**
+      Returns p for the DSA algorithm.
+ 
+      @return Returns the requested BigInteger
+   */
+   public BigInteger getQ() 
+   {
+     return this.q;
+   }
+ 
+   /**
+      Returns g for the DSA algorithm.
+ 
+      @return Returns the requested BigInteger
+   */
+   public BigInteger getG() 
+   {
+     return this.g;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/DSAPublicKeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/DSAPublicKeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/DSAPublicKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/DSAPublicKeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* DSAPublicKeySpec.java --- DSA Public Key Specificaton class
+    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ import java.math.BigInteger;
+ 
+ /**
+ 	DSA Public Key class Specification. Used to maintain the DSA
+ 	Public Keys.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public class DSAPublicKeySpec implements KeySpec 
+ {
+   private BigInteger y = null;
+   private BigInteger p = null;
+   private BigInteger q = null;
+   private BigInteger g = null;
+ 
+   /**
+      Constructs a new DSAPublicKeySpec with the specified y, p, q, and g.
+ 
+      @param y the public key
+      @param p the prime
+      @param q the sub-prime
+      @param g the base
+   */
+   public DSAPublicKeySpec(BigInteger y, BigInteger p, BigInteger q, BigInteger g) 
+   {
+     this.y = y;
+     this.p = p;
+     this.q = q;
+     this.g = g;
+   }
+ 
+   /**
+      Returns public key y for the DSA algorithm.
+ 
+      @return Returns the requested BigInteger
+   */
+   public BigInteger getY() 
+   {
+     return this.y;
+   }
+ 
+   /**
+      Returns p for the DSA algorithm.
+ 
+      @return Returns the requested BigInteger
+   */
+   public BigInteger getP() 
+   {
+     return this.p;
+   }
+ 
+   /**
+      Returns p for the DSA algorithm.
+ 
+      @return Returns the requested BigInteger
+   */
+   public BigInteger getQ() 
+   {
+     return this.q;
+   }
+ 
+   /**
+      Returns g for the DSA algorithm.
+ 
+      @return Returns the requested BigInteger
+   */
+   public BigInteger getG() 
+   {
+     return this.g;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/EncodedKeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/EncodedKeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/EncodedKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/EncodedKeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* EncodedKeySpec.java --- Encoded Key Specificaton class
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ 
+ /**
+ 	Encoded Key Specification class which is used to store 
+ 	byte encoded keys.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public abstract class EncodedKeySpec implements KeySpec
+ {
+ 
+   private byte[] encodedKey;
+ 
+   /**
+      Constructs a new EncodedKeySpec with the specified encoded key.
+ 
+      @param encodedKey A key to store
+   */
+   public EncodedKeySpec(byte[] encodedKey) 
+   {
+     this.encodedKey = encodedKey;
+   }
+ 
+   /**
+      Gets the encoded key in byte format.
+ 
+      @returns the encoded key
+   */
+   public byte[] getEncoded() 
+   {
+     return this.encodedKey;
+   }
+ 
+   /**
+      Returns the name of the key format used.
+ 
+      This name is the format such as "PKCS#8" or "X.509" which
+      if it matches a Key class name of the same type can be 
+      transformed using the apporiate KeyFactory. 
+ 
+      @return a string representing the name
+   */
+   public abstract String getFormat();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/InvalidKeySpecException.java gcc-4.1.0/libjava/classpath/java/security/spec/InvalidKeySpecException.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/InvalidKeySpecException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/InvalidKeySpecException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,74 ----
+ /* InvalidKeySpecException.java -- invalid KeySpec Exception
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ 
+ import java.security.GeneralSecurityException;
+ 
+ /**
+  * Exception for an invalid key specification.
+  *
+  * @author Mark Benvenuto
+  * @see KeySpec
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class InvalidKeySpecException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 3546139293998810778L;
+ 
+   /**
+    * Constructs an InvalidKeySpecException without a message string.
+    */
+   public InvalidKeySpecException()
+   {
+   }
+ 
+   /**
+    * Constructs an InvalidKeySpecException with a message string.
+    *
+    * @param msg a message to display with exception
+    */
+   public InvalidKeySpecException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/InvalidParameterSpecException.java gcc-4.1.0/libjava/classpath/java/security/spec/InvalidParameterSpecException.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/InvalidParameterSpecException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/InvalidParameterSpecException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,76 ----
+ /* InvalidParameterSpecException.java --- invalid ParameterSpec Exception
+    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ 
+ import java.security.GeneralSecurityException;
+ 
+ /**
+  * Exception for an invalid algorithm specification.
+  *
+  * @author Mark Benvenuto
+  * @see AlogorithmParameters
+  * @see AlogorithmParameterSpec
+  * @see DSAParameterSpec
+  * @since 1.2
+  * @status updated to 1.4
+ */
+ public class InvalidParameterSpecException extends GeneralSecurityException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = -970468769593399342L;
+ 
+   /**
+    * Constructs an InvalidParameterSpecException without a message string.
+    */
+   public InvalidParameterSpecException() 
+   {
+   }
+ 
+   /**
+    * Constructs an InvalidParameterSpecException with a message string.
+    *
+    * @param msg a message to display with exception
+    */
+   public InvalidParameterSpecException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/KeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/KeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/KeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/KeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,52 ----
+ /* KeySpec.java --- Key Specification interface
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ 
+ /**
+ 	A transparent interface for Key Specifications.
+ 	It contains no member functions. It is used to group
+ 	key classes.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public interface KeySpec 
+ {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/PKCS8EncodedKeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/PKCS8EncodedKeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/PKCS8EncodedKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/PKCS8EncodedKeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,81 ----
+ /* PKCS8EncodedKeySpec.java --- PKCS8 Encoded Key Specificaton class
+    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ 
+ /**
+ 	PKCS8 Encoded Key Specification class which is used to store 
+ 	"PKCS#8" byte encoded keys.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public class PKCS8EncodedKeySpec extends EncodedKeySpec
+ {
+   /**
+      Constructs a new PKCS8EncodedKeySpec with the specified encoded key.
+ 
+      @param encodedKey A key to store, assumed to be "PKCS#8"
+   */
+   public PKCS8EncodedKeySpec(byte[] encodedKey)
+   {
+     super( encodedKey );
+   }
+ 
+   /**
+ 	Gets the encoded key in byte format.
+ 
+ 	@returns the encoded key
+ */
+   public byte[] getEncoded()
+   {
+     return super.getEncoded();
+   }
+ 
+   /**
+ 	Returns the name of the key format used which is "PKCS#8"
+ 
+ 	@return a string representing the name
+ */
+   public final String getFormat()
+   {
+     return "PKCS#8";
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/PSSParameterSpec.java gcc-4.1.0/libjava/classpath/java/security/spec/PSSParameterSpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/PSSParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/PSSParameterSpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,90 ----
+ /* PSSParameterSpec.java --
+    Copyright (C) 2003, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.spec;
+ 
+ /**
+  * This class specifies a parameter spec for RSA PSS encoding scheme, as
+  * defined in the PKCS#1 v2.1.
+  *
+  * @since 1.4
+  * @see AlgorithmParameterSpec
+  * @see java.security.Signature
+  */
+ public class PSSParameterSpec implements AlgorithmParameterSpec
+ {
+   // Constants and fields
+   // --------------------------------------------------------------------------
+ 
+   private int saltLen;
+ 
+   // Constructor(s)
+   // --------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new <code>PSSParameterSpec</code> given the salt length as
+    * defined in PKCS#1.
+    *
+    * @param saltLen the length of salt in bits to be used in PKCS#1 PSS encoding.
+    * @throws IllegalArgumentException if <code>saltLen</code> is less than
+    * <code>0</code>.
+    */
+   public PSSParameterSpec(int saltLen)
+   {
+     super();
+ 
+     if (saltLen < 0)
+       throw new IllegalArgumentException();
+     this.saltLen = saltLen;
+   }
+ 
+   // Class methods
+   // --------------------------------------------------------------------------
+ 
+   // Instance methods
+   // --------------------------------------------------------------------------
+ 
+   /**
+    * Returns the salt length in bits.
+    *
+    * @return the salt length.
+    */
+   public int getSaltLength()
+   {
+     return this.saltLen;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/RSAKeyGenParameterSpec.java gcc-4.1.0/libjava/classpath/java/security/spec/RSAKeyGenParameterSpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/RSAKeyGenParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/RSAKeyGenParameterSpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /* RSAKeyGenParameterSpec.java --- RSA Key Generator Parameter Spec Class
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ import java.math.BigInteger;
+ 
+ /**
+    This class generates a set of RSA Key parameters used in the generation
+    of RSA keys.
+ 
+    @since JDK 1.3
+ 
+    @author Mark Benvenuto
+ */
+ public class RSAKeyGenParameterSpec implements AlgorithmParameterSpec
+ {
+   private int keysize;
+   private BigInteger publicExponent;
+ 
+   /**
+      Public Exponent F0 = 3
+   */
+   public static final BigInteger F0 = new BigInteger("3");
+ 
+   /**
+      Public Exponent F4 = 3
+   */
+   public static final BigInteger F4 = new BigInteger("65537");
+ 
+   /**
+      Create a new RSAKeyGenParameterSpec to store the RSA key's keysize 
+      and public exponent
+ 
+      @param keysize Modulus size of key in bits
+      @param publicExponent - the exponent
+   */
+   public RSAKeyGenParameterSpec(int keysize, BigInteger publicExponent)
+   {
+     this.keysize = keysize;
+     this.publicExponent = publicExponent;
+   }
+     
+   /**
+      Return the size of the key.
+ 
+      @return the size of the key.
+   */
+   public int getKeysize()
+   {
+     return keysize;
+   }
+     
+   /**
+      Return the public exponent.
+ 
+      @return the public exponent.
+   */
+   public BigInteger getPublicExponent()
+   {
+     return publicExponent;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,217 ----
+ /* PSSParameterSpec.java --
+    Copyright (C) 2003, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.spec;
+ 
+ import java.math.BigInteger;
+ 
+ /**
+  * This class specifies an RSA multi-prime private key, as defined in the
+  * PKCS#1 v2.1, using the <i>Chinese Remainder Theorem</i> (CRT) information
+  * values for efficiency.
+  *
+  * @since 1.4
+  * @see java.security.Key
+  * @see java.security.KeyFactory
+  * @see KeySpec
+  * @see PKCS8EncodedKeySpec
+  * @see RSAPrivateKeySpec
+  * @see RSAPublicKeySpec
+  * @see RSAOtherPrimeInfo
+  */
+ public class RSAMultiPrimePrivateCrtKeySpec extends RSAPrivateKeySpec
+ {
+   // Constants and fields
+   // --------------------------------------------------------------------------
+ 
+   private BigInteger publicExponent;
+   private BigInteger primeP;
+   private BigInteger primeQ;
+   private BigInteger primeExponentP;
+   private BigInteger primeExponentQ;
+   private BigInteger crtCoefficient;
+   private RSAOtherPrimeInfo[] otherPrimeInfo;
+ 
+   // Constructor(s)
+   // --------------------------------------------------------------------------
+ 
+   /**
+    * <p>Creates a new <code>RSAMultiPrimePrivateCrtKeySpec</code> given the
+    * modulus, publicExponent, privateExponent, primeP, primeQ, primeExponentP,
+    * primeExponentQ, crtCoefficient, and otherPrimeInfo as defined in PKCS#1
+    * v2.1.</p>
+    *
+    * <p>Note that <code>otherPrimeInfo</code> is cloned when constructing this
+    * object.</p>
+    *
+    * @param modulus the modulus n.
+    * @param publicExponent the public exponent e.
+    * @param privateExponent the private exponent d.
+    * @param primeP the prime factor p of n.
+    * @param primeQ the prime factor q of n.
+    * @param primeExponentP this is d mod (p-1).
+    * @param primeExponentQ this is d mod (q-1).
+    * @param crtCoefficient the Chinese Remainder Theorem coefficient q-1 mod p.
+    * @param otherPrimeInfo triplets of the rest of primes, <code>null</code>
+    * can be specified if there are only two prime factors (p and q).
+    * @throws NullPointerException if any of the parameters, i.e. modulus,
+    * publicExponent, privateExponent, primeP, primeQ, primeExponentP,
+    * primeExponentQ, crtCoefficient, is <code>null</code>.
+    * @throws IllegalArgumentException if an empty, i.e. 0-length,
+    * otherPrimeInfo is specified.
+    */
+   public RSAMultiPrimePrivateCrtKeySpec(BigInteger modulus,
+                                         BigInteger publicExponent,
+                                         BigInteger privateExponent,
+                                         BigInteger primeP,
+                                         BigInteger primeQ,
+                                         BigInteger primeExponentP,
+                                         BigInteger primeExponentQ,
+                                         BigInteger crtCoefficient,
+                                         RSAOtherPrimeInfo[] otherPrimeInfo)
+   {
+     super(modulus, privateExponent);
+ 
+     if (modulus == null)
+       throw new NullPointerException("modulus");
+     if (publicExponent == null)
+       throw new NullPointerException("publicExponent");
+     if (privateExponent == null)
+       throw new NullPointerException("privateExponent");
+     if (primeP == null)
+       throw new NullPointerException("primeP");
+     if (primeQ == null)
+       throw new NullPointerException("primeQ");
+     if (primeExponentP == null)
+       throw new NullPointerException("primeExponentP");
+     if (primeExponentQ == null)
+       throw new NullPointerException("primeExponentQ");
+     if (crtCoefficient == null)
+       throw new NullPointerException("crtCoefficient");
+     if (otherPrimeInfo != null)
+       if (otherPrimeInfo.length == 0)
+         throw new IllegalArgumentException();
+       else
+         this.otherPrimeInfo = (RSAOtherPrimeInfo[]) otherPrimeInfo.clone();
+ 
+     this.publicExponent = publicExponent;
+     this.primeP = primeP;
+     this.primeQ = primeQ;
+     this.primeExponentP = primeExponentP;
+     this.primeExponentQ = primeExponentQ;
+     this.crtCoefficient = crtCoefficient;
+   }
+ 
+   // Class methods
+   // --------------------------------------------------------------------------
+ 
+   // Instance methods
+   // --------------------------------------------------------------------------
+ 
+   /**
+    * Returns the public exponent.
+    *
+    * @return the public exponent.
+    */
+   public BigInteger getPublicExponent()
+   {
+     return this.publicExponent;
+   }
+ 
+   /**
+    * Returns the primeP.
+    *
+    * @return the primeP.
+    */
+   public BigInteger getPrimeP()
+   {
+     return this.primeP;
+   }
+ 
+   /**
+    * Returns the primeQ.
+    *
+    * @return the primeQ.
+    */
+   public BigInteger getPrimeQ()
+   {
+     return this.primeQ;
+   }
+ 
+   /**
+    * Returns the primeExponentP.
+    *
+    * @return the primeExponentP.
+    */
+   public BigInteger getPrimeExponentP()
+   {
+     return this.primeExponentP;
+   }
+ 
+   /**
+    * Returns the primeExponentQ.
+    *
+    * @return the primeExponentQ.
+    */
+   public BigInteger getPrimeExponentQ()
+   {
+     return this.primeExponentQ;
+   }
+ 
+   /**
+    * Returns the crtCoefficient.
+    *
+    * @return the crtCoefficient.
+    */
+   public BigInteger getCrtCoefficient()
+   {
+     return this.crtCoefficient;
+   }
+ 
+   /**
+    * Returns a copy of the otherPrimeInfo or <code>null</code> if there are
+    * only two prime factors (p and q).
+    *
+    * @return the otherPrimeInfo.
+    */
+   public RSAOtherPrimeInfo[] getOtherPrimeInfo()
+   {
+     return this.otherPrimeInfo == null
+         ? null
+         : (RSAOtherPrimeInfo[]) this.otherPrimeInfo.clone();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/RSAOtherPrimeInfo.java gcc-4.1.0/libjava/classpath/java/security/spec/RSAOtherPrimeInfo.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/RSAOtherPrimeInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/RSAOtherPrimeInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,133 ----
+ /* RSAOtherPrimeInfo.java --
+    Copyright (C) 2003, Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.security.spec;
+ 
+ import java.math.BigInteger;
+ 
+ /**
+  * This class represents the triplet (prime, exponent, and coefficient) inside
+  * RSA's OtherPrimeInfo structure, as defined in the PKCS#1 v2.1. The ASN.1
+  * syntax of RSA's OtherPrimeInfo is as follows:
+  *
+  * <pre>
+  *  OtherPrimeInfo ::= SEQUENCE {
+  *    prime INTEGER,
+  *    exponent INTEGER,
+  *    coefficient INTEGER
+  *  }
+  * </pre>
+  *
+  * @since 1.4
+  * @see RSAPrivateCrtKeySpec
+  * @see java.security.interfaces.RSAMultiPrimePrivateCrtKey
+  */
+ public class RSAOtherPrimeInfo
+ {
+   // Constants and fields
+   // --------------------------------------------------------------------------
+ 
+   private BigInteger prime;
+   private BigInteger primeExponent;
+   private BigInteger crtCoefficient;
+ 
+   // Constructor(s)
+   // --------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new <code>RSAOtherPrimeInfo</code> given the prime,
+    * primeExponent, and crtCoefficient as defined in PKCS#1.
+    *
+    * @param prime the prime factor of n.
+    * @param primeExponent the exponent.
+    * @param crtCoefficient the Chinese Remainder Theorem coefficient.
+    * @throws NullPointerException if any of the parameters, i.e. prime,
+    * primeExponent, crtCoefficient, is <code>null</code>.
+    */
+   public RSAOtherPrimeInfo(BigInteger prime, BigInteger primeExponent,
+                            BigInteger crtCoefficient)
+   {
+     super();
+ 
+     if (prime == null)
+       throw new NullPointerException("prime");
+     if (primeExponent == null)
+       throw new NullPointerException("primeExponent");
+     if (crtCoefficient == null)
+       throw new NullPointerException("crtCoefficient");
+ 
+     this.prime = prime;
+     this.primeExponent = primeExponent;
+     this.crtCoefficient = crtCoefficient;
+   }
+ 
+   // Class methods
+   // --------------------------------------------------------------------------
+ 
+   // Instance methods
+   // --------------------------------------------------------------------------
+ 
+   /**
+    * Returns the prime.
+    *
+    * @return the prime.
+    */
+   public final BigInteger getPrime()
+   {
+     return this.prime;
+   }
+ 
+   /**
+    * Returns the prime's exponent.
+    *
+    * @return the primeExponent.
+    */
+   public final BigInteger getExponent()
+   {
+     return this.primeExponent;
+   }
+ 
+   /**
+    * Returns the prime's crtCoefficient.
+    *
+    * @return the crtCoefficient.
+    */
+   public final BigInteger getCrtCoefficient()
+   {
+     return this.crtCoefficient;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/RSAPrivateCrtKeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/RSAPrivateCrtKeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/RSAPrivateCrtKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/RSAPrivateCrtKeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,151 ----
+ /* RSAPrivateCrtKeySpec.java --- RSA Private Certificate Key Specificaton class
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ import java.math.BigInteger;
+ 
+ /**
+ 	RSA Private Certificate Key class Specification. Used to 
+ 	maintain the RSA Private Certificate Keys with the 
+ 	<I>Chinese Remainder Theorem</I>(CRT) as specified by PKCS#1.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public class RSAPrivateCrtKeySpec extends RSAPrivateKeySpec
+ {
+   private BigInteger publicExponent;
+   private BigInteger primeP;
+   private BigInteger primeQ;
+   private BigInteger primeExponentP;
+   private BigInteger primeExponentQ;
+   private BigInteger crtCoefficient;
+ 
+   /**
+      Constructs a new RSAPrivateKeySpec with the specified
+      variables.
+ 
+      @param modulus the RSA modulus
+      @param publicExponent the public key exponent
+      @param privateExponent the private key exponent
+      @param primeP the prime P
+      @param primeQ the prime Q
+      @param primeExponentP the prime exponent P
+      @param primeExponentQ the prime exponent P
+      @param crtCoefficient the CRT coefficient
+   */
+   public RSAPrivateCrtKeySpec(BigInteger modulus,
+ 			      BigInteger publicExponent,
+ 			      BigInteger privateExponent,
+ 			      BigInteger primeP,
+ 			      BigInteger primeQ,
+ 			      BigInteger primeExponentP,
+ 			      BigInteger primeExponentQ,
+ 			      BigInteger crtCoefficient)
+   {
+     super( modulus, privateExponent);
+     this.publicExponent = publicExponent;
+     this.primeP = primeP;
+     this.primeQ = primeQ;
+     this.primeExponentP = primeExponentP;
+     this.primeExponentQ = primeExponentQ;
+     this.crtCoefficient = crtCoefficient;
+   }
+ 
+   /**
+      Gets the RSA public exponent.
+ 
+      @return the RSA public exponent
+   */
+   public BigInteger getPublicExponent()
+   {
+     return this.publicExponent;
+   }
+ 
+   /**
+      Gets the RSA prime P.
+ 
+      @return the RSA prime P
+   */
+   public BigInteger getPrimeP()
+   {
+     return this.primeP;
+   }
+ 
+   /**
+      Gets the RSA prime Q.
+ 
+      @return the RSA prime Q
+   */
+   public BigInteger getPrimeQ()
+   {
+     return this.primeQ;
+   }
+ 
+   /**
+      Gets the RSA prime exponent P.
+ 
+      @return the RSA prime exponent P
+   */
+   public BigInteger getPrimeExponentP()
+   {
+     return this.primeExponentP;
+   }
+ 
+   /**
+      Gets the RSA prime exponent P.
+ 
+      @return the RSA prime exponent Q
+   */
+   public BigInteger getPrimeExponentQ()
+   {
+     return this.primeExponentQ;
+   }
+ 
+   /**
+      Gets the RSA CRT coefficient.
+ 
+      @return the RSA CRT coefficient
+   */
+   public BigInteger getCrtCoefficient()
+   {
+     return this.crtCoefficient;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/RSAPrivateKeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/RSAPrivateKeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/RSAPrivateKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/RSAPrivateKeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* RSAPrivateKeySpec.java --- RSA Private Key Specificaton class
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ import java.math.BigInteger;
+ 
+ /**
+ 	RSA Private Key class Specification. Used to maintain the RSA
+ 	Private Keys.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public class RSAPrivateKeySpec implements KeySpec
+ {
+   private BigInteger modulus;
+   private BigInteger privateExponent;
+ 
+   /**
+      Constructs a new RSAPrivateKeySpec with the specified
+      modulus and privateExponent.
+ 
+      @param modulus the RSA modulus
+      @param privateExponent the private key exponent
+   */
+   public RSAPrivateKeySpec(BigInteger modulus, BigInteger privateExponent)
+   {
+     this.modulus = modulus;
+     this.privateExponent = privateExponent;
+   }
+ 
+   /**
+      Gets the RSA modulus.
+ 
+      @return the RSA modulus
+   */
+   public BigInteger getModulus()
+   {
+     return this.modulus;
+   }
+ 
+   /**
+      Gets the RSA private exponent.
+ 
+      @return the RSA private exponent
+   */
+   public BigInteger getPrivateExponent()
+   {
+     return this.privateExponent;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/RSAPublicKeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/RSAPublicKeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/RSAPublicKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/RSAPublicKeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* RSAPublicKeySpec.java --- RSA Public Key Specificaton class
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ import java.math.BigInteger;
+ 
+ /**
+ 	RSA Public Key class Specification. Used to maintain the RSA
+ 	Public Keys.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public class RSAPublicKeySpec implements KeySpec
+ {
+   private BigInteger modulus;
+   private BigInteger publicExponent;
+ 
+   /**
+      Constructs a new RSAPublicKeySpec with the specified
+      modulus and publicExponent.
+ 
+      @param modulus the RSA modulus
+      @param publicExponent the public key exponent
+   */
+   public RSAPublicKeySpec(BigInteger modulus, BigInteger publicExponent)
+   {
+     this.modulus = modulus;
+     this.publicExponent = publicExponent;
+   }
+ 
+   /**
+      Gets the RSA modulus.
+ 
+      @return the RSA modulus
+   */
+   public BigInteger getModulus()
+   {
+     return this.modulus;
+   }
+ 
+   /**
+      Gets the RSA public exponent.
+ 
+      @return the RSA public exponent
+   */
+   public BigInteger getPublicExponent()
+   {
+     return this.publicExponent;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/X509EncodedKeySpec.java gcc-4.1.0/libjava/classpath/java/security/spec/X509EncodedKeySpec.java
*** gcc-4.0.2/libjava/classpath/java/security/spec/X509EncodedKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/X509EncodedKeySpec.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,82 ----
+ /* X509EncodedKeySpec.java --- X.509 Encoded Key Specificaton class
+    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.security.spec;
+ 
+ /**
+ 	X.509 Encoded Key Specification class which is used to store 
+ 	"X.509" byte encoded keys.
+ 
+ 	@since JDK 1.2
+ 
+ 	@author Mark Benvenuto
+ */
+ public class X509EncodedKeySpec extends EncodedKeySpec
+ {
+ 
+   /**
+      Constructs a new X509EncodedKeySpec with the specified encoded key.
+ 
+      @param encodedKey A key to store, assumed to be "X.509"
+   */
+   public X509EncodedKeySpec(byte[] encodedKey)
+   {
+     super( encodedKey );
+   }
+ 
+   /**
+      Gets the encoded key in byte format.
+ 
+      @returns the encoded key
+   */
+   public byte[] getEncoded()
+   {
+     return super.getEncoded();
+   }
+ 
+   /**
+      Returns the name of the key format used which is "X.509"
+ 
+      @return a string representing the name
+   */
+   public final String getFormat()
+   {
+     return "X.509";
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/security/spec/package.html gcc-4.1.0/libjava/classpath/java/security/spec/package.html
*** gcc-4.0.2/libjava/classpath/java/security/spec/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/security/spec/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.security.spec package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.security.spec</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Array.java gcc-4.1.0/libjava/classpath/java/sql/Array.java
*** gcc-4.0.2/libjava/classpath/java/sql/Array.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Array.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,185 ----
+ /* Array.java -- Interface for accessing SQL array object
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ import java.util.Map;
+ 
+ /**
+  * This interface provides methods for accessing SQL array types.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Array 
+ {
+   /**
+    * Returns the name of the SQL type of the elements in this
+    * array.  This name is database specific.
+    *
+    * @param The name of the SQL type of the elements in this array.
+    * @exception SQLException If an error occurs.
+    */
+   String getBaseTypeName() throws SQLException;
+ 
+   /**
+    * Returns the JDBC type identifier of the elements in this
+    * array.  This will be one of the values defined in the 
+    * <code>Types</code> class.
+    *
+    * @return The JDBC type of the elements in this array.
+    * @exception SQLException If an error occurs.
+    * @see Types
+    */
+   int getBaseType() throws SQLException;
+ 
+   /**
+    * Returns the contents of this array.  This object returned
+    * will be an array of Java objects of the appropriate types.
+    *
+    * @return The contents of the array as an array of Java objects.
+    * @exception SQLException If an error occurs.
+    */
+   Object getArray() throws SQLException;
+ 
+   /**
+    * Returns the contents of this array.  The specified
+    * <code>Map</code> will be used to override selected mappings 
+    * between SQL types and Java classes.
+    * 
+    * @param map A mapping of SQL types to Java classes.
+    * @return The contents of the array as an array of Java objects.
+    * @exception SQLException If an error occurs.
+    */
+   Object getArray(Map map) throws SQLException;
+ 
+   /**
+    * Returns a portion of this array starting at <code>index</code>
+    * into the array and continuing for <code>count</code>
+    * elements.  Fewer than the requested number of elements will be
+    * returned if the array does not contain the requested number of elements.
+    * The object returned will be an array of Java objects of
+    * the appropriate types.
+    *
+    * @param offset The offset into this array to start returning elements from.
+    * @param count The requested number of elements to return.
+    * @return The requested portion of the array.
+    * @exception SQLException If an error occurs.
+    */
+   Object getArray(long index, int count) throws SQLException;
+ 
+   /**
+    * This method returns a portion of this array starting at <code>index</code>
+    * into the array and continuing for <code>count</code>
+    * elements.  Fewer than the requested number of elements will be
+    * returned if the array does not contain the requested number of elements.
+    * The object returned will be an array of Java objects.  The specified
+    * <code>Map</code> will be used for overriding selected SQL type to
+    * Java class mappings.
+    *
+    * @param offset The offset into this array to start returning elements from.
+    * @param count The requested number of elements to return.
+    * @param map A mapping of SQL types to Java classes.
+    * @return The requested portion of the array.
+    * @exception SQLException If an error occurs.
+    */
+   Object getArray(long index, int count, Map map) throws SQLException;
+ 
+   /**
+    * Returns the elements in the array as a <code>ResultSet</code>.
+    * Each row of the result set will have two columns.  The first will be
+    * the index into the array of that row's contents.  The second will be
+    * the actual value of that array element.
+    *
+    * @return The elements of this array as a <code>ResultSet</code>.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   ResultSet getResultSet() throws SQLException;
+ 
+   /**
+    * This method returns the elements in the array as a <code>ResultSet</code>.
+    * Each row of the result set will have two columns.  The first will be
+    * the index into the array of that row's contents.  The second will be
+    * the actual value of that array element.  The specified <code>Map</code>
+    * will be used to override selected default mappings of SQL types to
+    * Java classes.
+    *
+    * @param map A mapping of SQL types to Java classes.
+    * @return The elements of this array as a <code>ResultSet</code>.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   ResultSet getResultSet(Map map) throws SQLException;
+ 
+   /**
+    * This method returns a portion of the array as a <code>ResultSet</code>.
+    * The returned portion will start at <code>index</code> into the
+    * array and up to <code>count</code> elements will be returned.
+    * <p>
+    * Each row of the result set will have two columns.  The first will be
+    * the index into the array of that row's contents.  The second will be
+    * the actual value of that array element.
+    *
+    * @param offset The index into the array to start returning elements from.
+    * @param length The requested number of elements to return.
+    * @return The requested elements of this array as a <code>ResultSet</code>.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   ResultSet getResultSet(long index, int count) throws SQLException;
+   
+   /**
+    * This method returns a portion of the array as a <code>ResultSet</code>.
+    * The returned portion will start at <code>index</code> into the
+    * array and up to <code>count</code> elements will be returned.
+    *
+    * <p> Each row of the result set will have two columns.  The first will be
+    * the index into the array of that row's contents.  The second will be
+    * the actual value of that array element.  The specified <code>Map</code>
+    * will be used to override selected default mappings of SQL types to
+    * Java classes.</p>
+    *
+    * @param offset The index into the array to start returning elements from.
+    * @param length The requested number of elements to return.
+    * @param map A mapping of SQL types to Java classes.
+    * @return The requested elements of this array as a <code>ResultSet</code>.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */  
+   ResultSet getResultSet(long index, int count, Map map)
+     throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/BatchUpdateException.java gcc-4.1.0/libjava/classpath/java/sql/BatchUpdateException.java
*** gcc-4.0.2/libjava/classpath/java/sql/BatchUpdateException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/BatchUpdateException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,141 ----
+ /* BatchUpdateException.java -- Exception for batch oriented SQL errors
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ /**
+  * This class extends <code>SQLException</code> to count the successful
+  * updates in each statement in a batch that was successfully updated prior 
+  * to the error.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class BatchUpdateException extends SQLException 
+ {
+   static final long serialVersionUID = 5977529877145521757L;
+ 
+   /**
+    * This is the array of update counts for the commands which completed
+    * successfully prior to the error.
+    */
+   private int[] updateCounts;
+ 
+   /**
+    * This method initializes a new instance of <code>BatchUpdateException</code>
+    * with the specified descriptive error message, SQL state, and update count
+    * information.  The vendor specific error code will be initialized to 0.
+    *
+    * @param message The descriptive error message.
+    * @param SQLState The SQL state information for this error.
+    * @param vendorCode
+    * @param updateCounts The update count information for this error.
+    */
+   public BatchUpdateException(String message, String SQLState, int vendorCode,
+     int[] updateCounts)
+   {
+     super(message, SQLState, vendorCode);
+     this.updateCounts = updateCounts;
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>BatchUpdateException</code>
+    * with the specified descriptive error message, SQL state, and update count
+    * information.  The vendor specific error code will be initialized to 0.
+    *
+    * @param message The descriptive error message.
+    * @param SQLState The SQL state information for this error.
+    * @param updateCounts The update count information for this error.
+    */
+   public BatchUpdateException(String message, String SQLState,
+     int[] updateCounts)
+   {
+     super(message, SQLState);
+     this.updateCounts = updateCounts;  
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>BatchUpdateException</code>
+    * with the specified descriptive error message and update count information.
+    * The SQL state will be initialized to <code>null</code> and the vendor
+    * specific error code will be initialized to 0.
+    *
+    * @param message The descriptive error message.
+    * @param updateCounts The update count information for this error.
+    */
+   public BatchUpdateException(String message, int[] updateCounts)
+   {
+     super(message);
+     this.updateCounts = updateCounts;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>BatchUpdateException</code>
+    * with the specified update count information and no descriptive error
+    * message.  This SQL state will be initialized to <code>null</code> and
+    * the vendor specific error code will be initialized to 0.
+    *
+    * @param updateCounts The update count array.
+    */
+   public BatchUpdateException(int[] updateCounts)
+   {
+     this.updateCounts = updateCounts;
+   }
+ 
+   /**
+    * Initializes a new instance of <code>BatchUpdateException</code>
+    * with no descriptive error message.  The SQL state and update count will
+    * be initialized to <code>null</code> and the vendor specific error code will 
+    * initialized to 0.
+    */
+   public BatchUpdateException()
+   {
+     super();
+   }
+ 
+   /**
+    * This method returns the update count information for this error.  If
+    * not <code>null</code> this is an array of <code>int</code>'s that are
+    * the update accounts for each command that was successfully executed.
+    * The array elements are in the order that the commands were executed.
+    *
+    * @return The update count information, which may be <code>null</code>.
+    */
+   public int[] getUpdateCounts()
+   {
+     return updateCounts;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Blob.java gcc-4.1.0/libjava/classpath/java/sql/Blob.java
*** gcc-4.0.2/libjava/classpath/java/sql/Blob.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Blob.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,131 ----
+ /* Blob.java -- Access a SQL Binary Large OBject.
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ 
+ /**
+  * This interface specified methods for accessing a SQL BLOB (Binary
+  * Large OBject) type.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.2
+  */
+ public interface Blob 
+ {
+   /**
+    * This method returns the number of bytes in the BLOB.
+    *
+    * @return The number of bytes in the BLOB.
+    * @exception SQLException If an error occurs.
+    */
+   long length() throws SQLException;
+ 
+   /**
+    * This method returns up to the requested bytes of this BLOB as a 
+    * <code>byte</code> array.
+    *
+    * @param pos The index into the BLOB to start returning bytes from.
+    * @param length The requested number of bytes to return.
+    * @return The requested bytes from the BLOB.
+    * @exception SQLException If an error occurs.
+    */
+   byte[] getBytes(long pos, int length) throws SQLException;
+ 
+   /**
+    * This method returns a stream that will read the bytes of the BLOB.
+    *
+    * @return A stream that will read the bytes of the BLOB.
+    * @exception SQLException If an error occurs.
+    */
+   InputStream getBinaryStream() throws SQLException;
+ 
+   /**
+    * This method returns the index into the BLOB at which the first instance
+    * of the specified bytes occur.  The searching starts at the specified
+    * index into the BLOB.
+    *
+    * @param pattern The byte pattern to search for.
+    * @param offset The index into the BLOB to starting searching for the pattern.
+    * @return The offset at which the pattern is first found, or -1 if the
+    *         pattern is not found.
+    * @exception SQLException If an error occurs.
+    */
+   long position(byte[] pattern, long start) throws SQLException;
+ 
+   /**
+    * This method returns the index into the BLOB at which the first instance
+    * of the specified pattern occurs.  The searching starts at the specified
+    * index into this BLOB.  The bytes in the specified <code>Blob</code> are
+    * used as the search pattern.
+    *
+    * @param pattern The <code>Blob</code> containing the byte pattern to
+    *        search for.
+    * @param offset The index into the BLOB to starting searching for the pattern.
+    * @return The offset at which the pattern is first found, or -1 if the
+    *         pattern is not found.
+    * @exception SQLException If an error occurs.
+    */
+   long position(Blob pattern, long start) throws SQLException;
+ 
+   /**
+    * @exception SQLException If an error occurs.
+    * @since 1.4
+    */
+   int setBytes(long pos, byte[] bytes) throws SQLException;
+ 
+   /**
+    * @exception SQLException If an error occurs.
+    * @since 1.4
+    */
+   int setBytes(long pos, byte[] bytes, int offset, int len)
+     throws SQLException;
+ 
+   /**
+    * @exception SQLException If an error occurs.
+    * @since 1.4
+    */
+   OutputStream setBinaryStream(long pos) throws SQLException;
+ 
+   /**
+    * @exception SQLException If an error occurs.
+    * @since 1.4
+    */
+   void truncate(long len) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/CallableStatement.java gcc-4.1.0/libjava/classpath/java/sql/CallableStatement.java
*** gcc-4.0.2/libjava/classpath/java/sql/CallableStatement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/CallableStatement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,651 ----
+ /* CallableStatement.java -- A statement for calling stored procedures.
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ import java.io.InputStream;
+ import java.io.Reader;
+ import java.math.BigDecimal;
+ import java.net.URL;
+ import java.util.Calendar;
+ import java.util.Map;
+ 
+ /**
+  * This interface provides a mechanism for calling stored procedures.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface CallableStatement extends PreparedStatement 
+ {
+   /**
+    * This method registers the specified parameter as an output parameter
+    * of the specified SQL type.
+    *
+    * @param index The index of the parameter to register as output.
+    * @param type The SQL type value from <code>Types</code>.
+    * @exception SQLException If an error occurs.
+    */   
+   void registerOutParameter(int parameterIndex, int sqlType)
+     throws SQLException;
+ 
+   /**
+    * This method registers the specified parameter as an output parameter
+    * of the specified SQL type and scale.
+    *
+    * @param index The index of the parameter to register as output.
+    * @param type The SQL type value from <code>Types</code>.
+    * @param scale The scale of the value that will be returned.
+    * @exception SQLException If an error occurs.
+    */   
+   void registerOutParameter(int parameterIndex, int sqlType, int scale)
+     throws SQLException;
+ 
+   /**
+    * This method tests whether the value of the last parameter that was fetched
+    * was actually a SQL NULL value.
+    *
+    * @return <code>true</code> if the last parameter fetched was a NULL,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean wasNull() throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>String</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>String</code>.
+    * @exception SQLException If an error occurs.
+    */
+   String getString(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>boolean</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>boolean</code>.
+    * @exception SQLException If an error occurs.
+    */
+   boolean getBoolean(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>byte</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>byte</code>.
+    * @exception SQLException If an error occurs.
+    */
+   byte getByte(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>short</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>short</code>.
+    * @exception SQLException If an error occurs.
+    */
+   short getShort(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>int</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>int</code>.
+    * @exception SQLException If an error occurs.
+    */
+   int getInt(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>long</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>long</code>.
+    * @exception SQLException If an error occurs.
+    */
+   long getLong(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>float</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>float</code>.
+    * @exception SQLException If an error occurs.
+    */
+   float getFloat(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>double</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>double</code>.
+    * @exception SQLException If an error occurs.
+    */
+   double getDouble(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>BigDecimal</code>.
+    *
+    * @param parameterIndex The index of the parameter to return.
+    * @param scale The number of digits to the right of the decimal to return.
+    * @return The parameter value as a <code>BigDecimal</code>.
+    * @exception SQLException If an error occurs.
+    * @deprecated Use getBigDecimal(int parameterIndex)
+    *             or getBigDecimal(String parameterName) instead.
+    */
+   BigDecimal getBigDecimal(int parameterIndex, int scale)
+     throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * byte array.
+    *
+    * @param parameterIndex The index of the parameter to return.
+    * @return The parameter value as a byte array
+    * @exception SQLException If an error occurs.
+    */
+   byte[] getBytes(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>java.sql.Date</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>java.sql.Date</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Date getDate(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>java.sql.Time</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>java.sql.Time</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Time getTime(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>java.sql.Timestamp</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>java.sql.Timestamp</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Timestamp getTimestamp(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>Object</code>.
+    *
+    * @param parameterIndex The index of the parameter to return.
+    * @return The parameter value as an <code>Object</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   Object getObject(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>BigDecimal</code>.
+    *
+    * @param parameterIndex The index of the parameter to return.
+    * @return The parameter value as a <code>BigDecimal</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   BigDecimal getBigDecimal(int parameterIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>Object</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @param map The mapping to use for conversion from SQL to Java types.
+    * @return The parameter value as an <code>Object</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   Object getObject(int index, Map map) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>Ref</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>Ref</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   Ref getRef(int index) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>Blob</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>Blob</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */   
+   Blob getBlob(int index) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>Clob</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>Clob</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   Clob getClob(int index) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>Array</code>.
+    *
+    * @param parameterIndex The index of the parameter to return.
+    * @return The parameter value as a <code>Array</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   Array getArray(int index) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>java.sql.Date</code>.
+    *
+    * @param parameterIndex The index of the parameter to return.
+    * @param cal The <code>Calendar</code> to use for timezone and locale.
+    * @return The parameter value as a <code>java.sql.Date</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   Date getDate(int parameterIndex, Calendar cal) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>java.sql.Time</code>.
+    *
+    * @param parameterIndex The index of the parameter to return.
+    * @param cal The <code>Calendar</code> to use for timezone and locale.
+    * @return The parameter value as a <code>java.sql.Time</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   Time getTime(int parameterIndex, Calendar cal) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified parameter as a Java
+    * <code>java.sql.Timestamp</code>.
+    *
+    * @param index The index of the parameter to return.
+    * @return The parameter value as a <code>java.sql.Timestamp</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   Timestamp getTimestamp(int parameterIndex, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * This method registers the specified parameter as an output parameter
+    * of the specified SQL type.
+    *
+    * @param index The index of the parameter to register as output.
+    * @param type The SQL type value from <code>Types</code>.
+    * @param name The user defined data type name.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   void registerOutParameter(int paramIndex, int sqlType,
+ 				   String typeName)
+     throws SQLException;
+ 
+   /**
+    * This method registers the specified parameter as an output parameter
+    * of the specified SQL type.
+    *
+    * @param parameterName The name of the parameter to register as output.
+    * @param sqlType The SQL type value from <code>Types</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.4
+    */
+   void registerOutParameter(String parameterName, int sqlType)
+     throws SQLException;
+ 
+   /**
+    * This method registers the specified parameter as an output parameter
+    * of the specified SQL type.  This version of registerOutParameter is used 
+    * for NUMERIC or DECIMAL types.
+    *
+    * @param parameterName The name of the parameter to register as output.
+    * @param sqlType The SQL type value from <code>Types</code>.
+    * @param scale Number of digits to the right of the decimal point.
+    * @exception SQLException If an error occurs.
+    * @since 1.4
+    */
+   void registerOutParameter(String parameterName, int sqlType,
+ 				   int scale)
+     throws SQLException;
+ 
+ 
+   /**
+    * This method registers the specified parameter as an output parameter
+    * of the specified SQL type.  This version of registerOutParameter is used 
+    * for user-named or REF types. If the type of the output parameter does
+    * not have such a type, the typeName argument is ignored.
+    *
+    * @param parameterName The name of the parameter to register as output.
+    * @param sqlType The SQL type value from <code>Types</code>.
+    * @param typeName The SQL structured type name.
+    * @exception SQLException If an error occurs.
+    * @since 1.4
+    */
+   void registerOutParameter(String parameterName, int sqlType,
+ 				   String typeName) 
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   URL getURL(int parameterIndex) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setURL(String parameterName, URL val) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setNull(String parameterName, int sqlType) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setBoolean(String parameterName, boolean x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setByte(String parameterName, byte x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setShort(String parameterName, short x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setInt(String parameterName, int x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setLong(String parameterName, long x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setFloat(String parameterName, float x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setDouble(String parameterName, double x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setBigDecimal(String parameterName, BigDecimal x)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setString(String parameterName, String x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setBytes(String parameterName, byte[] x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setDate(String parameterName, Date x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setTime(String parameterName, Time x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setTimestamp(String parameterName, Timestamp x)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setAsciiStream(String parameterName, InputStream x, int length)
+       throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setBinaryStream(String parameterName, InputStream x, int length)
+       throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setObject(String parameterName, Object x, int targetSqlType,
+ 			int scale)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setObject(String parameterName, Object x, int targetSqlType)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setObject(String parameterName, Object x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setCharacterStream(String parameterName, Reader reader,
+ 				 int length)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setDate(String parameterName, Date x, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setTime(String parameterName, Time x, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setTimestamp(String parameterName, Timestamp x, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setNull(String parameterName, int sqlType, String typeName)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   String getString(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean getBoolean(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   byte getByte(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   short getShort(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getInt(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   long getLong(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   float getFloat(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   double getDouble(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   byte[] getBytes(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Date getDate(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Time getTime(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Timestamp getTimestamp(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Object getObject(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   BigDecimal getBigDecimal(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Object getObject(String parameterName, Map map) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Ref getRef(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Blob getBlob(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Clob getClob(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Array getArray(String parameterName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Date getDate(String parameterName, Calendar cal) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Time getTime(String parameterName, Calendar cal) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Timestamp getTimestamp(String parameterName, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   URL getURL(String parameterName) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Clob.java gcc-4.1.0/libjava/classpath/java/sql/Clob.java
*** gcc-4.0.2/libjava/classpath/java/sql/Clob.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Clob.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,152 ----
+ /* Clob.java -- Access Character Large OBjects
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.io.Reader;
+ import java.io.Writer;
+ 
+ /**
+  * This interface contains methods for accessing a SQL CLOB (Character
+  * Large OBject) type.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Clob 
+ {
+  /**
+   * This method returns the number of characters in the CLOB.
+   *
+   * @return The number of characters in the CLOB.
+   * @exception SQLException If an error occurs.
+   * @since 1.2
+   */
+   long length() throws SQLException;
+ 
+   /**
+    * This method returns the specified portion of the CLOB as a 
+    * <code>String</code>. 
+    *
+    * @param offset The index into the CLOB (index values start at 1) to 
+    *        start returning characters from.
+    * @param length The requested number of characters to return.
+    * @return The requested CLOB section, as a <code>String</code>.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   String getSubString(long pos, int length) throws SQLException;
+ 
+   /**
+    * This method returns a character stream that reads the contents of the
+    * CLOB.
+    *
+    * @return A character stream to read the CLOB's contents.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   Reader getCharacterStream() throws SQLException;
+ 
+   /**
+    * This method returns a byte stream that reads the contents of the
+    * CLOB as a series of ASCII bytes.
+    *
+    * @return A stream to read the CLOB's contents.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   InputStream getAsciiStream() throws SQLException;
+ 
+   /**
+    * This method returns the index into the CLOB of the first occurrence of
+    * the specified character pattern (supplied by the caller as a
+    * <code>String</code>).  The search begins at the specified index.
+    *
+    * @param searchstr The character pattern to search for, passed as a
+    *        <code>String</code>.
+    * @param start.  The index into the CLOB to start search (indexes start
+    *        at 1).
+    * @return The index at which the pattern was found (indexes start at 1),
+    *         or -1 if the pattern was not found.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   long position(String searchstr, long start) throws SQLException;
+ 
+   /**
+    * This method returns the index into the CLOB of the first occurrence of
+    * the specified character pattern (supplied by the caller as a
+    * <code>Clob</code>).  The search begins at the specified index.
+    *
+    * @param searchstr The character pattern to search for, passed as a
+    *        <code>Clob</code>.
+    * @param start.  The index into the CLOB to start search (indexes start
+    *        at 1).
+    * @return The index at which the pattern was found (indexes start at 1),
+    *         or -1 if the pattern was not found.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   long position(Clob searchstr, long start) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int setString(long pos, String str) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int setString(long pos, String str, int offset, int len)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   OutputStream setAsciiStream(long pos) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Writer setCharacterStream(long pos) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void truncate(long len) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Connection.java gcc-4.1.0/libjava/classpath/java/sql/Connection.java
*** gcc-4.0.2/libjava/classpath/java/sql/Connection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Connection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,420 ----
+ /* Connection.java -- Manage a database connection.
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ import java.util.Map;
+ 
+ /**
+  * This interface provides methods for managing a connection to a database.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Connection 
+ {
+   /**
+    * This transaction isolation level indicates that transactions are not
+    * supported.
+    */
+   int TRANSACTION_NONE = 0;
+ 
+   /**
+    * This transaction isolation level indicates that one transaction can
+    * read modifications by other transactions before the other transactions
+    * have committed their changes.  This could result in invalid reads.
+    */
+   int TRANSACTION_READ_UNCOMMITTED = 1;
+ 
+   /**
+    * This transaction isolation leve indicates that only committed data from
+    * other transactions will be read.  If a transaction reads a row, then
+    * another transaction commits a change to that row, the first transaction
+    * would retrieve the changed row on subsequent reads of the same row.
+    */
+   int TRANSACTION_READ_COMMITTED = 2;
+ 
+   /**
+    * This transaction isolation level indicates that only committed data from
+    * other transactions will be read.  It also ensures that data read from
+    * a row will not be different on a subsequent read even if another
+    * transaction commits a change.
+    */
+   int TRANSACTION_REPEATABLE_READ = 4;
+ 
+   /**
+    * This transaction isolation level indicates that only committed data from
+    * other transactions will be read.  It also ensures that data read from
+    * a row will not be different on a subsequent read even if another
+    * transaction commits a change.  Additionally, rows modified by other
+    * transactions will not affect the result set returned during subsequent
+    * executions of the same WHERE clause in this transaction.
+    */
+   int TRANSACTION_SERIALIZABLE = 8;
+ 
+   /**
+    * This method creates a new SQL statement.  The default result set type
+    * and concurrency will be used.
+    *
+    * @return A new <code>Statement</code> object. 
+    * @exception SQLException If an error occurs.
+    * @see Statement
+    */
+   Statement createStatement() throws SQLException;
+ 
+   /**
+    * This method creates a new <code>PreparedStatement</code> for the specified
+    * SQL string.  This method is designed for use with parameterized
+    * statements.  The default result set type and concurrency will be used.
+    *
+    * @param The SQL statement to use in creating this 
+    *        <code>PreparedStatement</code>.
+    * @return A new <code>PreparedStatement</code>.
+    * @exception SQLException If an error occurs.
+    * @see PreparedStatement
+    */
+   PreparedStatement prepareStatement(String sql) throws SQLException;
+ 
+   /**
+    * This method creates a new <code>CallableStatement</code> for the 
+    * specified SQL string.  Thie method is designed to be used with
+    * stored procedures.  The default result set type and concurrency
+    * will be used.
+    *
+    * @param The SQL statement to use in creating this 
+    *        <code>CallableStatement</code>.
+    * @return A new <code>CallableStatement</code>.
+    * @exception SQLException If an error occurs.
+    * @see CallableStatement
+    */
+   CallableStatement prepareCall(String sql) throws SQLException;
+ 
+   /**
+    * This method converts the specified generic SQL statement into the
+    * native grammer of the database this object is connected to.
+    *
+    * @param The JDBC generic SQL statement.
+    * @return The native SQL statement.
+    * @exception SQLException If an error occurs.
+    */
+   String nativeSQL(String sql) throws SQLException;
+ 
+   /**
+    * This method turns auto commit mode on or off.  In auto commit mode,
+    * every SQL statement is committed its own transaction.  Otherwise a
+    * transaction must be explicitly committed or rolled back.
+    *
+    * @param autoCommit <code>true</code> to enable auto commit mode,
+    *        <code>false</code> to disable it.
+    * @exception SQLException If an error occurs.
+    * @see commit
+    * @see rollback
+    */
+   void setAutoCommit(boolean autoCommit) throws SQLException;
+ 
+   /**
+    * This method tests whether or not auto commit mode is currently enabled.
+    * In auto commit mode,  every SQL statement is committed its own transaction.
+    * Otherwise a transaction must be explicitly committed or rolled back.
+    *
+    * @return <code>true</code> if auto commit mode is enabled, 
+    * <code>false</code> otherwise.
+    *
+    * @exception SQLException If an error occurs.
+    *
+    * @see commit
+    * @see rollback
+    */
+   boolean getAutoCommit() throws SQLException;
+ 
+  /**
+   * This method commits any SQL statements executed on this connection since 
+   * the last commit or rollback.
+   *
+   * @exception SQLException If an error occurs.
+   */
+   void commit() throws SQLException;
+ 
+   /**
+    * This method rolls back any SQL statements executed on this connection
+    * since the last commit or rollback.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void rollback() throws SQLException;
+ 
+   /**
+    * This method immediately closes this database connection.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void close() throws SQLException;
+ 
+   /**
+    * This method tests whether or not this connection has been closed. 
+    *
+    * @return <code>true</code> if the connection is closed, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isClosed() throws SQLException;
+ 
+   /**
+    * This method returns the meta data for this database connection.
+    *
+    * @return The meta data for this database.
+    * @exception SQLException If an error occurs.
+    * @see DatabaseMetaData
+    */
+   DatabaseMetaData getMetaData() throws SQLException;
+ 
+   /**
+    * This method turns read only mode on or off.  It may not be called while
+    * a transaction is in progress.
+    *
+    * @param readOnly <code>true</code> if this connection is read only,
+    *        <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   void setReadOnly(boolean readOnly) throws SQLException;
+ 
+   /**
+    * This method tests whether or not this connection is in read only mode.
+    *
+    * @return <code>true</code> if the connection is read only <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isReadOnly() throws SQLException;
+ 
+   /**
+    * This method sets the name of the catalog in use by this connection.
+    * Note that this method does nothing if catalogs are not supported by
+    * this database.
+    *
+    * @param catalog The name of the catalog to use for this connection.
+    * @exception SQLException If an error occurs.
+    */
+   void setCatalog(String catalog) throws SQLException;
+ 
+   /**
+    * This method returns the name of the catalog in use by this connection,
+    * if any.
+    *
+    * @return The name of the catalog, or <code>null</code> if one does not
+    *         exist or catalogs are not supported by this database.
+    * @exception SQLException If an error occurs.
+    */
+   String getCatalog() throws SQLException;
+ 
+   /**
+    * This method sets the current transaction isolation mode.  This must
+    * be one of the constants defined in this interface.
+    *
+    * @param level The transaction isolation level.
+    * @exception SQLException If an error occurs.
+    */
+   void setTransactionIsolation(int level) throws SQLException;
+ 
+   /**
+    * This method returns the current transaction isolation mode.  This will
+    * be one of the constants defined in this interface.
+    *
+    * @return The transaction isolation level.
+    * @exception SQLException If an error occurs.
+    */
+   int getTransactionIsolation() throws SQLException;
+ 
+   /**
+    * This method returns the first warning that occurred on this connection,
+    * if any.  If there were any subsequence warnings, they will be chained
+    * to the first one.
+    *
+    * @return The first <code>SQLWarning</code> that occurred, or 
+    *         <code>null</code> if there have been no warnings.
+    * @exception SQLException If an error occurs.
+    */
+   SQLWarning getWarnings() throws SQLException;
+ 
+   /**
+    * This method clears all warnings that have occurred on this connection.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void clearWarnings() throws SQLException;
+ 
+   /**
+    * This method creates a new SQL statement with the specified type and
+    * concurrency.  Valid values for these parameters are specified in the
+    * <code>ResultSet</code> class.
+    *
+    * @param resultSetType The type of result set to use for this statement.
+    * @param resultSetConcurrency.  The type of concurrency to be used in
+    *        the result set for this statement.
+    * @return A new <code>Statement</code> object.
+    * @exception SQLException If an error occurs.
+    * @see Statement
+    * @see ResultSet
+    */
+   Statement createStatement(int resultSetType, int resultSetConcurrency)
+     throws SQLException;
+ 
+   /**
+    * This method creates a new <code>PreparedStatement</code> for the specified
+    * SQL string.  This method is designed for use with parameterized
+    * statements.  The specified result set type and concurrency will be used.
+    * Valid values for these parameters are specified in the
+    * <code>ResultSet</code> class.
+    *
+    * @param The SQL statement to use in creating this 
+    *        <code>PreparedStatement</code>.
+    * @param resultSetType The type of result set to use for this statement.
+    * @param resultSetConcurrency.  The type of concurrency to be used in
+    *        the result set for this statement.
+    * @return A new <code>PreparedStatement</code>.
+    * @exception SQLException If an error occurs.
+    * @see PreparedStatement
+    * @see ResultSet
+    */
+   PreparedStatement prepareStatement(String sql, int resultSetType, 
+     int resultSetConcurrency) throws SQLException;
+ 
+   /**
+    * This method creates a new <code>CallableStatement</code> for the 
+    * specified SQL string.  Thie method is designed to be used with
+    * stored procedures.  The specified result set type and concurrency
+    * will be used.  Valid values for these parameters are specified in the
+    * <code>ResultSet</code> class.
+    *
+    * @param The SQL statement to use in creating this 
+    *        <code>PreparedStatement</code>.
+    * @param resultSetType The type of result set to use for this statement.
+    * @param resultSetConcurrency.  The type of concurrency to be used in
+    *        the result set for this statement.
+    * @return A new <code>CallableStatement</code>.
+    * @exception SQLException If an error occurs.
+    * @see CallableStatement
+    * @see ResultSet
+    */
+   CallableStatement prepareCall(String sql, int resultSetType, int
+     resultSetConcurrency) throws SQLException;
+ 
+   /**
+    * This method returns the mapping of SQL types to Java classes
+    * currently in use by this connection.  This mapping will have no
+    * entries unless they have been manually added.
+    *
+    * @return The SQL type to Java class mapping.
+    * @exception SQLException If an error occurs.
+    */
+   Map getTypeMap() throws SQLException;
+ 
+   /**
+    * This method sets the mapping table for SQL types to Java classes.
+    * Any entries in this map override the defaults.
+    *
+    * @param map The new SQL mapping table.
+    * @exception SQLException If an error occurs.
+    */
+   void setTypeMap(Map map) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setHoldability(int holdability) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getHoldability() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Savepoint setSavepoint() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Savepoint setSavepoint(String name) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void rollback(Savepoint savepoint) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void releaseSavepoint(Savepoint savepoint) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Statement createStatement(int resultSetType, int
+       resultSetConcurrency, int resultSetHoldability) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   PreparedStatement prepareStatement(String sql, int resultSetType, int
+       resultSetConcurrency, int resultSetHoldability) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   CallableStatement prepareCall(String sql, int resultSetType, int
+       resultSetConcurrency, int resultSetHoldability) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
+       throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   PreparedStatement prepareStatement(String sql, int[] columnIndexes)
+       throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   PreparedStatement prepareStatement(String sql, String[] columnNames)
+       throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/DataTruncation.java gcc-4.1.0/libjava/classpath/java/sql/DataTruncation.java
*** gcc-4.0.2/libjava/classpath/java/sql/DataTruncation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/DataTruncation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,157 ----
+ /* DataTruncation.java -- Warning when data has been truncated.
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ /**
+   * This exception is thrown when a piece of data is unexpectedly 
+   * truncated in JDBC.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class DataTruncation extends SQLWarning 
+ {
+   static final long serialVersionUID = 6464298989504059473L;
+ 
+   /**
+    * The original size of the data.
+    */
+   private int dataSize;
+ 
+   /**
+    * The index of the parameter or column whose value was truncated.
+    */
+   private int index;
+ 
+   /**
+    * Indicates whether or not a parameter value was truncated.
+    */
+   private boolean parameter;
+ 
+   /**
+    * Indicates whether or not a data column value was truncated.
+    */
+   private boolean read;
+ 
+   /**
+    * This is the size of the data after truncation.
+    */
+   private int transferSize;
+ 
+   /**
+    * This method initializes a new instance of <code>DataTruncation</code>
+    * with the specified values.  The descriptive error message for this 
+    * exception will be "Data truncation", the SQL state will be "01004"
+    * and the vendor specific error code will be set to 0.
+    *
+    * @param index The index of the parameter or column that was truncated.
+    * @param parameter <code>true</code> if a parameter was truncated,
+    *        <code>false</code> otherwise.
+    * @param read <code>true</code> if a data column was truncated,
+    *        <code>false</code> otherwise.
+    * @param dataSize The original size of the data.
+    * @param transferSize The size of the data after truncation.
+    */
+   public DataTruncation(int index, boolean parameter, boolean read, int
+     dataSize, int transferSize)
+   {
+     super("Data truncation", "01004");
+ 
+     this.index = index;
+     this.parameter = parameter;
+     this.read = read;
+     this.dataSize = dataSize;
+     this.transferSize = transferSize;
+   }
+ 
+   /**
+    * This method returns the index of the column or parameter that was
+    * truncated.
+    *
+    * @return The index of the column or parameter that was truncated.
+    */
+   public int getIndex()
+   {
+     return index;
+   }
+ 
+   /**
+    * This method determines whether or not it was a parameter that was
+    * truncated.
+    *
+    * @return <code>true</code> if a parameter was truncated, <code>false</code>
+    * otherwise.
+    */
+   public boolean getParameter()
+   {
+     return parameter;
+   }
+ 
+   /**
+    * This method determines whether or not it was a column that was
+    * truncated.
+    *
+    * @return <code>true</code> if a column was truncated, <code>false</code>
+    * otherwise.
+    */
+   public boolean getRead()
+   {
+     return read;
+   }
+ 
+   /**
+    * This method returns the original size of the parameter or column that
+    * was truncated.
+    *
+    * @return The original size of the parameter or column that was truncated.
+    */
+   public int getDataSize()
+   {
+     return dataSize;
+   }
+ 
+   /**
+    * This method returns the size of the parameter or column after it was
+    * truncated.
+    *
+    * @return The size of the parameter or column after it was truncated.
+    */
+   public int getTransferSize()
+   {
+     return transferSize;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/DatabaseMetaData.java gcc-4.1.0/libjava/classpath/java/sql/DatabaseMetaData.java
*** gcc-4.0.2/libjava/classpath/java/sql/DatabaseMetaData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/DatabaseMetaData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,2214 ----
+ /* DatabaseMetaData.java -- Information about the database itself.
+    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ public interface DatabaseMetaData 
+ {
+   /**
+    * It is unknown whether or not the procedure returns a result.
+    */
+   int procedureResultUnknown = 0;
+ 
+   /**
+    * The procedure does not return a result.
+    */
+   int procedureNoResult = 1;
+ 
+   /**
+    * The procedure returns a result.
+    */
+   int procedureReturnsResult = 2;
+ 
+   /**
+    * The column type is unknown.
+    */
+   int procedureColumnUnknown = 0;
+ 
+   /**
+    * The column type is input.
+    */
+   int procedureColumnIn = 1;
+ 
+   /**
+    * The column type is input/output.
+    */
+   int procedureColumnInOut = 2;
+ 
+   /**
+    * The column type is output
+    */
+   int procedureColumnOut = 4;
+ 
+   /**
+    * The column is used for return values.
+    */
+   int procedureColumnReturn = 5;
+ 
+   /**
+    * The column is used for storing results
+    */
+   int procedureColumnResult = 3;
+ 
+   /**
+    * NULL values are not allowed.
+    */
+   int procedureNoNulls = 0;
+ 
+   /**
+    * NULL values are allowed.
+    */
+   int procedureNullable = 1;
+ 
+   /**
+    * It is unknown whether or not NULL values are allowed.
+    */
+   int procedureNullableUnknown = 2;
+ 
+   /**
+    * The column does not allow NULL
+    */
+   int columnNoNulls = 0;
+ 
+   /**
+    * The column does allow NULL
+    */
+   int columnNullable = 1;
+ 
+   /**
+    * It is unknown whether or not the column allows NULL
+    */
+   int columnNullableUnknown = 2;
+ 
+   /**
+    * The best row's scope is only guaranteed to be valid so long as the
+    * row is actually being used.
+    */
+   int bestRowTemporary = 0;
+ 
+   /**
+    * The best row identifier is valid to the end of the transaction.
+    */
+   int bestRowTransaction = 1;
+ 
+   /**
+    * The best row identifier is valid to the end of the session.
+    */
+   int bestRowSession = 2;
+ 
+   /**
+    * The best row may or may not be a pseudo-column.
+    */
+   int bestRowUnknown = 0;
+ 
+   /**
+    * The best row identifier is not a pseudo-column.
+    */
+   int bestRowNotPseudo = 1;
+ 
+   /**
+    * The best row identifier is a pseudo-column.
+    */
+   int bestRowPseudo = 2;
+ 
+   /**
+    * It is unknown whether or not the version column is a pseudo-column.
+    */
+   int versionColumnUnknown = 0;
+ 
+   /**
+    * The version column is not a pseudo-column
+    */
+   int versionColumnNotPseudo = 1;
+ 
+   /**
+    * The version column is a pseudo-column
+    */
+   int versionColumnPseudo = 2;
+ 
+   /**
+    * Foreign key changes are cascaded in updates or deletes.
+    */
+   int importedKeyCascade = 0;
+ 
+   /**
+    * Column may not be updated or deleted in use as a foreign key.
+    */
+   int importedKeyRestrict = 1;
+ 
+   /**
+    * When primary key is updated or deleted, the foreign key is set to NULL.
+    */
+   int importedKeySetNull = 2;
+ 
+   /**
+    * If the primary key is a foreign key, it cannot be udpated or deleted.
+    */
+   int importedKeyNoAction = 3;
+ 
+   /**
+    * If the primary key is updated or deleted, the foreign key is set to
+    * a default value.
+    */
+   int importedKeySetDefault = 4;
+ 
+   /**
+    * Wish I knew what this meant.
+    */
+   int importedKeyInitiallyDeferred = 5;
+ 
+   /**
+    * Wish I knew what this meant.
+    */
+   int importedKeyInitiallyImmediate = 6;
+ 
+   /**
+    * Wish I knew what this meant.
+    */
+   int importedKeyNotDeferrable = 7;
+ 
+   /**
+    * A NULL value is not allowed for this data type.
+    */
+   int typeNoNulls = 0;
+ 
+   /**
+    * A NULL value is allowed for this data type.
+    */
+   int typeNullable = 1;
+ 
+   /**
+    * It is unknown whether or not NULL values are allowed for this data type.
+    */
+   int typeNullableUnknown = 2;
+ 
+   /**
+    * Where clauses are not supported for this type.
+    */
+   int typePredNone = 0;
+ 
+   /**
+    * Only "WHERE..LIKE" style WHERE clauses are allowed on this data type.
+    */
+   int typePredChar = 1;
+ 
+   /**
+    * All WHERE clauses except "WHERE..LIKE" style are allowed on this data type.
+    */
+   int typePredBasic = 2;
+ 
+   /**
+    * Any type of WHERE clause is allowed for this data type.
+    */
+   int typeSearchable = 3;
+ 
+   /**
+    * This column contains table statistics.
+    */
+   short tableIndexStatistic = 0;
+ 
+   /**
+    * This table index is clustered.
+    */
+   short tableIndexClustered = 1;
+ 
+   /**
+    * This table index is hashed.
+    */
+   short tableIndexHashed = 2;
+ 
+   /**
+    * This table index is of another type.
+    */
+   short tableIndexOther = 3;
+ 
+   short attributeNoNulls = 0;
+ 
+   short attributeNullable = 1;
+ 
+   short attributeNullableUnknown = 2;
+ 
+   int sqlStateXOpen = 1;
+ 
+   int sqlStateSQL99 = 2;
+ 
+   /**
+    * This method tests whether or not all the procedures returned by
+    * the <code>getProcedures</code> method can be called by this user.
+    *
+    * @return <code>true</code> if all the procedures can be called,
+    * <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean allProceduresAreCallable() throws SQLException;
+ 
+   /**
+    * This method tests whether or not all the table returned by the
+    * <code>getTables</code> method can be selected by this user.
+    *
+    * @return <code>true</code> if all the procedures can be called,
+    * <code>false</code> otherwise.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   boolean allTablesAreSelectable() throws SQLException;
+ 
+   /**
+    * This method returns the URL for this database.
+    *
+    * @return The URL string for this database, or <code>null</code> if it
+    *         is not known.
+    * @exception SQLException If an error occurs.
+    */
+   String getURL() throws SQLException;
+ 
+   /**
+    * This method returns the database username for this connection.
+    *
+    * @return The database username.
+    * @exception SQLException If an error occurs.
+    */
+   String getUserName() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database is in read only mode.
+    *
+    * @return <code>true</code> if the database is in read only mode,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isReadOnly() throws SQLException;
+ 
+   /**
+    * This method tests whether or not NULL's sort as high values.
+    *
+    * @return <code>true</code> if NULL's sort as high values, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean nullsAreSortedHigh() throws SQLException;
+ 
+   /**
+    * This method tests whether or not NULL's sort as low values.
+    *
+    * @return <code>true</code> if NULL's sort as low values, <code>false</code>
+    * otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean nullsAreSortedLow() throws SQLException;
+ 
+   /**
+    * This method tests whether or not NULL's sort as high values.
+    *
+    * @return <code>true</code> if NULL's sort as high values, <code>false</code>
+    * otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean nullsAreSortedAtStart() throws SQLException;
+ 
+   /**
+    * This method test whether or not NULL's are sorted to the end
+    * of the list regardless of ascending or descending sort order.
+    *
+    * @return <code>true</code> if NULL's always sort to the end,
+    * <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean nullsAreSortedAtEnd() throws SQLException;
+ 
+   /**
+    * This method returns the name of the database product.
+    *
+    * @return The database product.
+    * @exception SQLException If an error occurs.
+    */
+   String getDatabaseProductName() throws SQLException;
+ 
+   /**
+    * This method returns the version of the database product.
+    *
+    * @return The version of the database product.
+    * @exception SQLException If an error occurs.
+    */
+   String getDatabaseProductVersion() throws SQLException;
+ 
+   /**
+    * This method returns the name of the JDBC driver.
+    *
+    * @return The name of the JDBC driver.
+    * @exception SQLException If an error occurs.
+    */
+   String getDriverName() throws SQLException;
+ 
+   /**
+    * This method returns the version of the JDBC driver.
+    *
+    * @return The version of the JDBC driver.
+    * @exception SQLException If an error occurs.
+    */
+   String getDriverVersion() throws SQLException;
+ 
+   /**
+    * This method returns the major version number of the JDBC driver.
+    *
+    * @return The major version number of the JDBC driver.
+    */
+   int getDriverMajorVersion();
+ 
+   /**
+    * This method returns the minor version number of the JDBC driver.
+    *
+    * @return The minor version number of the JDBC driver.
+    */
+   int getDriverMinorVersion();
+ 
+   /**
+    * This method tests whether or not the database uses local files to
+    * store tables.
+    *
+    * @return <code>true</code> if the database uses local files, 
+    * <code>false</code> otherwise.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   boolean usesLocalFiles() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database uses a separate file for
+    * each table.
+    *
+    * @return <code>true</code> if the database uses a separate file for each
+    * table <code>false</code> otherwise.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   boolean usesLocalFilePerTable() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports identifiers
+    * with mixed case.
+    *
+    * @return <code>true</code> if the database supports mixed case identifiers,
+    * <code>false</code> otherwise.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsMixedCaseIdentifiers() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database treats mixed case
+    * identifiers as all upper case.
+    *
+    * @return <code>true</code> if the database treats all identifiers as
+    *         upper case, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean storesUpperCaseIdentifiers() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database treats mixed case
+    * identifiers as all lower case.
+    *
+    * @return <code>true</code> if the database treats all identifiers as
+    *         lower case, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean storesLowerCaseIdentifiers() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database stores mixed case 
+    * identifers even if it treats them as case insensitive.
+    *
+    * @return <code>true</code> if the database stores mixed case identifiers,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean storesMixedCaseIdentifiers() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports quoted identifiers
+    * with mixed case.
+    *
+    * @return <code>true</code> if the database supports mixed case quoted
+    *         identifiers, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsMixedCaseQuotedIdentifiers() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database treats mixed case
+    * quoted identifiers as all upper case.
+    *
+    * @return <code>true</code> if the database treats all quoted identifiers 
+    *         as upper case, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean storesUpperCaseQuotedIdentifiers() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database treats mixed case
+    * quoted identifiers as all lower case.
+    *
+    * @return <code>true</code> if the database treats all quoted identifiers 
+    *         as lower case, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean storesLowerCaseQuotedIdentifiers() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database stores mixed case 
+    * quoted identifers even if it treats them as case insensitive.
+    *
+    * @return <code>true</code> if the database stores mixed case quoted 
+    *         identifiers, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean storesMixedCaseQuotedIdentifiers() throws SQLException;
+ 
+   /**
+    * This metohd returns the quote string for SQL identifiers.
+    *
+    * @return The quote string for SQL identifers, or a space if quoting
+    *         is not supported.
+    * @exception SQLException If an error occurs.
+    */
+   String getIdentifierQuoteString() throws SQLException;
+ 
+   /**
+    * This method returns a comma separated list of all the SQL keywords in
+    * the database that are not in SQL92.
+    *
+    * @return The list of SQL keywords not in SQL92.
+    * @exception SQLException If an error occurs.
+    */
+   String getSQLKeywords() throws SQLException;
+ 
+   /**
+    * This method returns a comma separated list of math functions.
+    *
+    * @return The list of math functions.
+    * @exception SQLException If an error occurs.
+    */
+   String getNumericFunctions() throws SQLException;
+ 
+   /**
+    * This method returns a comma separated list of string functions.
+    *
+    * @return The list of string functions.
+    * @exception SQLException If an error occurs.
+    */
+   String getStringFunctions() throws SQLException;
+ 
+   /**
+    * This method returns a comma separated list of of system functions.
+    *
+    * @return A comma separated list of system functions.
+    * @exception SQLException If an error occurs.
+    */
+   String getSystemFunctions() throws SQLException;
+ 
+   /**
+    * This method returns comma separated list of time/date functions.
+    * 
+    * @return The list of time/date functions.
+    * @exception SQLException If an error occurs.
+    */
+   String getTimeDateFunctions() throws SQLException;
+ 
+   /**
+    * This method returns the string used to escape wildcards in search strings.
+    *
+    * @return The string used to escape wildcards in search strings.
+    * @exception SQLException If an error occurs.
+    */
+   String getSearchStringEscape() throws SQLException;
+ 
+   /**
+    * This methods returns non-standard characters that can appear in 
+    * unquoted identifiers.
+    *
+    * @return Non-standard characters that can appear in unquoted identifiers.
+    * @exception SQLException If an error occurs.
+    */
+   String getExtraNameCharacters() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports
+    * "ALTER TABLE ADD COLUMN"
+    *
+    * @return <code>true</code> if column add supported, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsAlterTableWithAddColumn() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports
+    * "ALTER TABLE DROP COLUMN"
+    *
+    * @return <code>true</code> if column drop supported, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsAlterTableWithDropColumn() throws SQLException;
+ 
+   /**
+    * This method tests whether or not column aliasing is supported.
+    *
+    * @return <code>true</code> if column aliasing is supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsColumnAliasing() throws SQLException;
+ 
+   /**
+    * This method tests whether the concatenation of a NULL and non-NULL
+    * value results in a NULL.  This will always be true in fully JDBC compliant
+    * drivers.
+    *
+    * @return <code>true</code> if concatenating NULL and a non-NULL value
+    *         returns a NULL, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean nullPlusNonNullIsNull() throws SQLException;
+ 
+   /**
+    * Tests whether or not CONVERT is supported.
+    *
+    * @return <code>true</code> if CONVERT is supported, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsConvert() throws SQLException;
+ 
+   /**
+    * This method tests whether or not CONVERT can be performed between the
+    * specified types.  The types are contants from <code>Types</code>.
+    *
+    * @param fromType The SQL type to convert from.
+    * @param toType The SQL type to convert to.
+    * @return <code>true</code> if the conversion can be performed,
+    *         <code>false</code> otherwise.
+    * @see Types
+    */
+   boolean supportsConvert(int fromType, int toType) throws
+       SQLException;
+ 
+   /**
+    * This method tests whether or not table correlation names are 
+    * supported.  This will be always be <code>true</code> in a fully JDBC
+    * compliant driver.
+    *
+    * @return <code>true</code> if table correlation names are supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsTableCorrelationNames() throws SQLException;
+ 
+   /**
+    * This method tests whether correlation names must be different from the
+    * name of the table.
+    *
+    * @return <code>true</code> if the correlation name must be different from
+    *         the table name, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsDifferentTableCorrelationNames() throws SQLException;
+ 
+   /**
+    * This method tests whether or not expressions are allowed in an
+    * ORDER BY lists.
+    *
+    * @return <code>true</code> if expressions are allowed in ORDER BY
+    *         lists, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsExpressionsInOrderBy() throws SQLException;
+ 
+   /**
+    * This method tests whether or ORDER BY on a non-selected column is
+    * allowed.
+    *
+    * @return <code>true</code> if a non-selected column can be used in an
+    *         ORDER BY, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsOrderByUnrelated() throws SQLException;
+ 
+   /**
+    * This method tests whether or not GROUP BY is supported.
+    *
+    * @return <code>true</code> if GROUP BY is supported, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsGroupBy() throws SQLException;
+ 
+   /**
+    * This method tests whether GROUP BY on a non-selected column is
+    * allowed.
+    *
+    * @return <code>true</code> if a non-selected column can be used in a
+    *         GROUP BY, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsGroupByUnrelated() throws SQLException;
+ 
+   /**
+    * This method tests whether or not a GROUP BY can add columns not in the
+    * select if it includes all the columns in the select.
+    *
+    * @return <code>true</code> if GROUP BY an add columns provided it includes
+    *         all columns in the select, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsGroupByBeyondSelect() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the escape character is supported in
+    * LIKE expressions.  A fully JDBC compliant driver will always return
+    * <code>true</code>.
+    *
+    * @return <code>true</code> if escapes are supported in LIKE expressions,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsLikeEscapeClause() throws SQLException;
+ 
+   /**
+    * This method tests whether multiple result sets for a single statement are
+    * supported.
+    *
+    * @return <code>true</code> if multiple result sets are supported for a 
+    *         single statement, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsMultipleResultSets() throws SQLException;
+ 
+   /**
+    * This method test whether or not multiple transactions may be open
+    * at once, as long as they are on different connections.
+    *
+    * @return <code>true</code> if multiple transactions on different
+    *         connections are supported, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsMultipleTransactions() throws SQLException;
+ 
+   /**
+    * This method tests whether or not columns can be defined as NOT NULL.  A
+    * fully JDBC compliant driver always returns <code>true</code>.
+    *
+    * @return <code>true</code> if NOT NULL columns are supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsNonNullableColumns() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the minimum grammer for ODBC is supported.
+    * A fully JDBC compliant driver will always return <code>true</code>.
+    *
+    * @return <code>true</code> if the ODBC minimum grammar is supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsMinimumSQLGrammar() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the core grammer for ODBC is supported.
+    *
+    * @return <code>true</code> if the ODBC core grammar is supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsCoreSQLGrammar() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the extended grammer for ODBC is supported.
+    *
+    * @return <code>true</code> if the ODBC extended grammar is supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsExtendedSQLGrammar() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the ANSI92 entry level SQL
+    * grammar is supported.  A fully JDBC compliant drivers must return
+    * <code>true</code>.
+    *
+    * @return <code>true</code> if the ANSI92 entry level SQL grammar is
+    *         supported, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsANSI92EntryLevelSQL() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the ANSI92 intermediate SQL
+    * grammar is supported.  
+    *
+    * @return <code>true</code> if the ANSI92 intermediate SQL grammar is
+    *         supported, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsANSI92IntermediateSQL() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the ANSI92 full SQL
+    * grammar is supported.  
+    *
+    * @return <code>true</code> if the ANSI92 full SQL grammar is
+    *         supported, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsANSI92FullSQL() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the SQL integrity enhancement
+    * facility is supported.
+    *
+    * @return <code>true</code> if the integrity enhancement facility is
+    *         supported, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsIntegrityEnhancementFacility() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports outer joins.
+    *
+    * @return <code>true</code> if outer joins are supported, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsOuterJoins() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports full outer joins.
+    *
+    * @return <code>true</code> if full outer joins are supported, 
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsFullOuterJoins() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports limited outer joins.
+    *
+    * @return <code>true</code> if limited outer joins are supported, 
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsLimitedOuterJoins() throws SQLException;
+ 
+   /**
+    * This method returns the vendor's term for "schema".
+    *
+    * @return The vendor's term for schema.
+    * @exception SQLException if an error occurs.
+    */
+   String getSchemaTerm() throws SQLException;
+ 
+   /**
+    * This method returns the vendor's term for "procedure".
+    *
+    * @return The vendor's term for procedure.
+    * @exception SQLException if an error occurs.
+    */
+   String getProcedureTerm() throws SQLException;
+ 
+   /**
+    * This method returns the vendor's term for "catalog".
+    *
+    * @return The vendor's term for catalog.
+    * @exception SQLException if an error occurs.
+    */
+   String getCatalogTerm() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name appears at the beginning of
+    * a fully qualified table name.
+    *
+    * @return <code>true</code> if the catalog name appears at the beginning,
+    *         <code>false</code> if it appears at the end.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isCatalogAtStart() throws SQLException;
+ 
+   /**
+    * This method returns the separator between the catalog name and the
+    * table name.
+    *
+    * @return The separator between the catalog name and the table name.
+    * @exception SQLException If an error occurs.
+    */
+   String getCatalogSeparator() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in a data
+    * manipulation statement.
+    *
+    * @return <code>true</code> if a catalog name can appear in a data
+    *         manipulation statement, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSchemasInDataManipulation() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in a procedure
+    * call
+    *
+    * @return <code>true</code> if a catalog name can appear in a procedure
+    *         call, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSchemasInProcedureCalls() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in a table definition.
+    *
+    * @return <code>true</code> if a catalog name can appear in a table
+    *         definition, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSchemasInTableDefinitions() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in an index definition.
+    *
+    * @return <code>true</code> if a catalog name can appear in an index
+    *         definition, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSchemasInIndexDefinitions() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in privilege definitions.
+    *
+    * @return <code>true</code> if a catalog name can appear in privilege
+    *         definition, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSchemasInPrivilegeDefinitions() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in a data
+    * manipulation statement.
+    *
+    * @return <code>true</code> if a catalog name can appear in a data
+    *         manipulation statement, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsCatalogsInDataManipulation() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in a procedure
+    * call
+    *
+    * @return <code>true</code> if a catalog name can appear in a procedure
+    *         call, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsCatalogsInProcedureCalls() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in a table definition.
+    *
+    * @return <code>true</code> if a catalog name can appear in a table
+    *         definition, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsCatalogsInTableDefinitions() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in an index definition.
+    *
+    * @return <code>true</code> if a catalog name can appear in an index
+    *         definition, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsCatalogsInIndexDefinitions() throws SQLException;
+ 
+   /**
+    * This method tests whether a catalog name can appear in privilege definitions.
+    *
+    * @return <code>true</code> if a catalog name can appear in privilege
+    *         definition, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException;
+ 
+   /**
+    * This method tests whether or not that database supports positioned
+    * deletes.
+    *
+    * @return <code>true</code> if positioned deletes are supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsPositionedDelete() throws SQLException;
+ 
+   /**
+    * This method tests whether or not that database supports positioned
+    * updates.
+    *
+    * @return <code>true</code> if positioned updates are supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsPositionedUpdate() throws SQLException;
+ 
+   /**
+    * This method tests whether or not SELECT FOR UPDATE is supported by the
+    * database.
+    *
+    * @return <code>true</code> if SELECT FOR UPDATE is supported 
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSelectForUpdate() throws SQLException;
+ 
+   /**
+    * This method tests whether or not stored procedures are supported on
+    * this database.
+    *
+    * @return <code>true</code> if stored procedures are supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsStoredProcedures() throws SQLException;
+ 
+   /**
+    * This method tests whether or not subqueries are allowed in comparisons.
+    * A fully JDBC compliant driver will always return <code>true</code>.
+    *
+    * @return <code>true</code> if subqueries are allowed in comparisons,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSubqueriesInComparisons() throws SQLException;
+ 
+   /**
+    * This method tests whether or not subqueries are allowed in exists
+    * expressions.  A fully JDBC compliant driver will always return
+    * <code>true</code>.
+    *
+    * @return <code>true</code> if subqueries are allowed in exists 
+    *         expressions, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSubqueriesInExists() throws SQLException;
+ 
+   /**
+    * This method tests whether subqueries are allowed in IN statements.
+    * A fully JDBC compliant driver will always return <code>true</code>.
+    *
+    * @return <code>true</code> if the driver supports subqueries in IN
+    *         statements, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSubqueriesInIns() throws SQLException;
+ 
+   /**
+    * This method tests whether or not subqueries are allowed in quantified
+    * expressions.  A fully JDBC compliant driver will always return
+    * <code>true</code>.
+    *
+    * @return <code>true</code> if subqueries are allowed in quantified 
+    *         expressions, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsSubqueriesInQuantifieds() throws SQLException;
+ 
+   /**
+    * This method test whether or not correlated subqueries are allowed. A
+    * fully JDBC compliant driver will always return <code>true</code>.
+    *
+    * @return <code>true</code> if correlated subqueries are allowed,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsCorrelatedSubqueries() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the UNION statement is supported.
+    *
+    * @return <code>true</code> if UNION is supported, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsUnion() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the UNION ALL statement is supported.
+    *
+    * @return <code>true</code> if UNION ALL is supported, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsUnionAll() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports cursors
+    * remaining open across commits.
+    *
+    * @return <code>true</code> if cursors can remain open across commits,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsOpenCursorsAcrossCommit() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports cursors
+    * remaining open across rollbacks.
+    *
+    * @return <code>true</code> if cursors can remain open across rollbacks,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsOpenCursorsAcrossRollback() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports statements
+    * remaining open across commits.
+    *
+    * @return <code>true</code> if statements can remain open across commits,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsOpenStatementsAcrossCommit() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports statements
+    * remaining open across rollbacks.
+    *
+    * @return <code>true</code> if statements can remain open across rollbacks,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsOpenStatementsAcrossRollback() throws SQLException;
+ 
+   /**
+    * This method returns the number of hex characters allowed in an inline
+    * binary literal.
+    *
+    * @return The number of hex characters allowed in a binary literal, 0 meaning
+    *         either an unknown or unlimited number.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxBinaryLiteralLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of a character literal.
+    * 
+    * @return The maximum length of a character literal.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxCharLiteralLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of a column name.
+    *
+    * @return The maximum length of a column name.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxColumnNameLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum number of columns in a GROUP BY statement.
+    *
+    * @return The maximum number of columns in a GROUP BY statement.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxColumnsInGroupBy() throws SQLException;
+ 
+   /**
+    * This method returns the maximum number of columns in an index.
+    *
+    * @return The maximum number of columns in an index.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxColumnsInIndex() throws SQLException;
+ 
+   /**
+    * This method returns the maximum number of columns in an ORDER BY statement.
+    *
+    * @return The maximum number of columns in an ORDER BY statement.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxColumnsInOrderBy() throws SQLException;
+ 
+   /**
+    * This method returns the maximum number of columns in a SELECT statement.
+    *
+    * @return The maximum number of columns in a SELECT statement.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxColumnsInSelect() throws SQLException;
+ 
+   /**
+    * This method returns the maximum number of columns in a table.
+    *
+    * @return The maximum number of columns in a table.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxColumnsInTable() throws SQLException;
+ 
+   /**
+    * This method returns the maximum number of connections this client
+    * can have to the database.
+    *
+    * @return The maximum number of database connections.
+    * @SQLException If an error occurs.
+    */
+   int getMaxConnections() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of a cursor name.
+    *
+    * @return The maximum length of a cursor name.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxCursorNameLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of an index.
+    *
+    * @return The maximum length of an index.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxIndexLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of a schema name.
+    *
+    * @return The maximum length of a schema name.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxSchemaNameLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of a procedure name.
+    *
+    * @return The maximum length of a procedure name.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxProcedureNameLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of a catalog name.
+    *
+    * @return The maximum length of a catalog name.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxCatalogNameLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum size of a row in bytes.
+    *
+    * @return The maximum size of a row.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxRowSize() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the maximum row size includes BLOB's
+    *
+    * @return <code>true</code> if the maximum row size includes BLOB's,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean doesMaxRowSizeIncludeBlobs() throws SQLException;
+ 
+   /**
+    * This method includes the maximum length of a SQL statement.
+    *
+    * @return The maximum length of a SQL statement.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxStatementLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum number of statements that can be
+    * active at any time.
+    *
+    * @return The maximum number of statements that can be active at any time.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxStatements() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of a table name.
+    *
+    * @return The maximum length of a table name.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxTableNameLength() throws SQLException;
+ 
+   /**
+    * This method returns the maximum number of tables that may be referenced
+    * in a SELECT statement.
+    *
+    * @return The maximum number of tables allowed in a SELECT statement.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxTablesInSelect() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of a user name.
+    *
+    * @return The maximum length of a user name.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxUserNameLength() throws SQLException;
+ 
+   /**
+    * This method returns the default transaction isolation level of the
+    * database.
+    *
+    * @return The default transaction isolation level of the database.
+    * @exception SQLException If an error occurs.
+    * @see Connection
+    */
+   int getDefaultTransactionIsolation() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports transactions.
+    *
+    * @return <code>true</code> if the database supports transactions,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsTransactions() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports the specified
+    * transaction isolation level.
+    *
+    * @param level The transaction isolation level.
+    *
+    * @return <code>true</code> if the specified transaction isolation level
+    *         is supported, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsTransactionIsolationLevel(int level) throws
+       SQLException;
+ 
+   /**
+    * This method tests whether or not DDL and DML statements allowed within 
+    * the same transaction.
+    *
+    * @return <code>true</code> if DDL and DML statements are allowed in the
+    *         same transaction, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsDataDefinitionAndDataManipulationTransactions()
+       throws SQLException;
+ 
+   /**
+    * This method tests whether or not only DML statement are allowed
+    * inside a transaction.
+    *
+    * @return <code>true</code> if only DML statements are allowed in
+    *         transactions, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsDataManipulationTransactionsOnly() throws
+       SQLException;
+ 
+   /**
+    * This method tests whether or not a DDL statement will cause the
+    * current transaction to be automatically committed.
+    *
+    * @return <code>true</code> if DDL causes an immediate transaction commit,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean dataDefinitionCausesTransactionCommit() throws SQLException;
+ 
+   /**
+    * This method tests whether or not DDL statements are ignored in
+    * transactions.
+    *
+    * @return <code>true</code> if DDL statements are ignored in transactions,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean dataDefinitionIgnoredInTransactions() throws SQLException;
+ 
+   /**
+    * This method returns a list of all the stored procedures matching the
+    * specified pattern in the given schema and catalog.  This is returned
+    * a <code>ResultSet</code> with the following columns:
+    * <p>
+    * <ol>
+    * <li>PROCEDURE_CAT - The catalog the procedure is in, which may be 
+    * <code>null</code>.</li>
+    * <li>PROCEDURE_SCHEM - The schema the procedures is in, which may be
+    * <code>null</code>.</li>
+    * <li>PROCEDURE_NAME - The name of the procedure.</li>
+    * <li>Unused</li>
+    * <li>Unused</li>
+    * <li>Unused</li>
+    * <li>REMARKS - A description of the procedure</li>
+    * <li>PROCEDURE_TYPE - Indicates the return type of the procedure, which 
+    * is one of the contstants defined in this class 
+    * (<code>procedureResultUnknown</code>, <code>procedureNoResult</code>, or
+    * <code>procedureReturnsResult</code>).</li>
+    * </ol>
+    *
+    * @param catalog The name of the catalog to return stored procedured from,
+    *        or "" to return procedures from all catalogs.
+    * @param schemaPattern A schema pattern for the schemas to return stored
+    *        procedures from, or "" to return procedures from all schemas.
+    * @param namePattern The pattern of procedures names to return.
+    * @returns A <code>ResultSet</code> with all the requested procedures.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getProcedures(String catalog, String schemaPattern, String
+       procedureNamePattern) throws SQLException;
+ 
+   /**
+    * This method returns a list of the parameter and result columns for
+    * the requested stored procedures.  This is returned in the form of a
+    * <code>ResultSet</code> with the following columns:
+    * <p>
+    * <ol>
+    * <li>PROCEDURE_CAT - The catalog the procedure is in, which may be 
+    * <code>null</code>.</li>
+    * <li>PROCEDURE_SCHEM - The schema the procedures is in, which may be
+    * <code>null</code>.</li>
+    * <li>PROCEDURE_NAME - The name of the procedure.</li>
+    * <li>COLUMN_NAME - The name of the column</li>
+    * <li>COLUMN_TYPE - The type of the column, which will be one of the
+    * contants defined in this class (<code>procedureColumnUnknown</code>,
+    * <code>procedureColumnIn</code>, <code>procedureColumnInOut</code>,
+    * <code>procedureColumnOut</code>, <code>procedureColumnReturn</code>,
+    * or <code>procedureColumnResult</code>).</li>
+    * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
+    * defined in <code>Types</code>.</li>
+    * <li>TYPE_NAME - The string name of the data type for this column.</li>
+    * <li>PRECISION - The precision of the column.</li>
+    * <li>LENGTH - The length of the column in bytes</li>
+    * <li>SCALE - The scale of the column.</li>
+    * <li>RADIX - The radix of the column.</li>
+    * <li>NULLABLE - Whether or not the column is NULLABLE.  This is one of
+    * the constants defined in this class (<code>procedureNoNulls</code>,
+    * <code>procedureNullable</code>, or <code>procedureNullableUnknown</code>)</li>
+    * <li>REMARKS - A description of the column.</li>
+    * </ol>
+    *
+    * @param catalog The name of the catalog to return stored procedured from,
+    *        or "" to return procedures from all catalogs.
+    * @param schemaPattern A schema pattern for the schemas to return stored
+    *        procedures from, or "" to return procedures from all schemas.
+    * @param namePattern The pattern of procedures names to return.
+    * @param columnPattern The pattern of column names to return.
+    * @returns A <code>ResultSet</code> with all the requested procedures.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getProcedureColumns(String catalog, String schemaPattern,
+       String procedureNamePattern, String columnNamePattern) throws
+       SQLException;
+ 
+   /**
+    * This method returns a list of the requested table as a   
+    * <code>ResultSet</code> with the following columns:
+    *
+    * <ol>
+    * <li>TABLE_CAT - The catalog the table is in, which may be <code>null</code>.</li>
+    * <li>TABLE_SCHEM - The schema the table is in, which may be <code>null</code>.</li>
+    * <li>TABLE_NAME - The name of the table.</li>
+    * <li>TABLE_TYPE - A string describing the table type.  This will be one
+    * of the values returned by the <code>getTableTypes()</code> method.</li>
+    * <li>REMARKS - Comments about the table.</li>
+    * </ol>
+    * 
+    * @param catalog The name of the catalog to return tables from,
+    *        or "" to return tables from all catalogs.
+    * @param schemaPattern A schema pattern for the schemas to return tables
+    *        from, or "" to return tables from all schemas.
+    * @param namePattern The pattern of table names to return.
+    * @param types The list of table types to include; null returns all types.
+    * @returns A <code>ResultSet</code> with all the requested tables.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getTables(String catalog, String schemaPattern, String
+       tableNamePattern, String[] types) throws SQLException;
+ 
+   /**
+    * This method returns the list of database schemas as a 
+    * <code>ResultSet</code>, with one column - TABLE_SCHEM - that is the
+    * name of the schema.
+    *
+    * @return A <code>ResultSet</code> with all the requested schemas.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getSchemas() throws SQLException;
+ 
+   /**
+    * This method returns the list of database catalogs as a
+    * <code>ResultSet</code> with one column - TABLE_CAT - that is the
+    * name of the catalog.
+    *
+    * @return A <code>ResultSet</code> with all the requested catalogs.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getCatalogs() throws SQLException;
+ 
+   /**
+    * This method returns the list of database table types as a
+    * <code>ResultSet</code> with one column - TABLE_TYPE - that is the
+    * name of the table type.
+    *
+    * @return A <code>ResultSet</code> with all the requested table types.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getTableTypes() throws SQLException;
+ 
+   /**
+    * This method returns a list of the tables columns for
+    * the requested tables.  This is returned in the form of a
+    * <code>ResultSet</code> with the following columns:
+    * <p>
+    * <ol>
+    * <li>TABLE_CAT - The catalog the table is in, which may be 
+    * <code>null</code>.</li>
+    * <li>TABLE_SCHEM - The schema the tables is in, which may be
+    * <code>null</code>.</li>
+    * <li>TABLE_NAME - The name of the table.</li>
+    * <li>COLUMN_NAME - The name of the column</li>
+    * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
+    * defined in <code>Types</code>.</li>
+    * <li>TYPE_NAME - The string name of the data type for this column.</li>
+    * <li>COLUMN_SIZE - The size of the column.</li>
+    * <li>Unused</li>
+    * <li>NUM_PREC_RADIX - The radix of the column.</li>
+    * <li>NULLABLE - Whether or not the column is NULLABLE.  This is one of
+    * the constants defined in this class (<code>tableNoNulls</code>,
+    * <code>tableNullable</code>, or <code>tableNullableUnknown</code>)</li>
+    * <li>REMARKS - A description of the column.</li>
+    * <li>COLUMN_DEF - The default value for the column, may be <code>null</code>.</li>
+    * <li>SQL_DATA_TYPE - Unused</li>
+    * <li>SQL_DATETIME_SUB - Unused</li>
+    * <li>CHAR_OCTET_LENGTH - For character columns, the maximum number of bytes
+    * in the column.</li>
+    * <li>ORDINAL_POSITION - The index of the column in the table.</li>
+    * <li>IS_NULLABLE - "NO" means no, "YES" means maybe, and an empty string
+    * means unknown.</li>
+    * </ol>
+    *
+    * @param catalog The name of the catalog to return table from,
+    * or "" to return tables from all catalogs.
+    * @param schemaPattern A schema pattern for the schemas to return 
+    * tables from, or "" to return tables from all schemas.
+    * @param namePattern The pattern of tables names to return.
+    * @param columnPattern The pattern of column names to return.
+    * @returns A <code>ResultSet</code> with all the requested tables.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getColumns(String catalog, String schemaPattern, String
+       tableNamePattern, String columnNamePattern) throws SQLException;
+ 
+   /**
+    * This method returns the access rights that have been granted to the
+    * requested columns.  This information is returned as a <code>ResultSet</code>
+    * with the following columns:
+    *
+    * <ol>
+    * <li>TABLE_CAT - The catalog the table is in, which may be 
+    * <code>null</code>.</li>
+    * <li>TABLE_SCHEM - The schema the tables is in, which may be
+    * <code>null</code>.</li>
+    * <li>TABLE_NAME - The name of the table.</li>
+    * <li>COLUMN_NAME - The name of the column.</li>
+    * <li>GRANTOR - The entity that granted the access.</li>
+    * <li>GRANTEE - The entity granted the access.</li>
+    * <li>PRIVILEGE - The name of the privilege granted.</li>
+    * <li>IS_GRANTABLE - "YES" if the grantee can grant the privilege to
+    * others, "NO" if not, and <code>null</code> if unknown.</li>
+    * </ol>
+    *
+    * @param catalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or <code>null</code>
+    *        to return information from all catalogs.
+    * @param schema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema.
+    * @param table The table name to return information for.
+    * @param columnPattern A pattern of column names to return information for.
+    * @return A <code>ResultSet</code> with all the requested privileges.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getColumnPrivileges(String catalog, String schema, String
+       table, String columnNamePattern) throws SQLException;
+ 
+   /**
+    * This method returns the access rights that have been granted to the
+    * requested tables.  This information is returned as a <code>ResultSet</code>
+    * with the following columns:
+    *
+    * <ol>
+    * <li>TABLE_CAT - The catalog the table is in, which may be 
+    * <code>null</code>.</li>
+    * <li>TABLE_SCHEM - The schema the tables is in, which may be
+    * <code>null</code>.</li>
+    * <li>TABLE_NAME - The name of the table.</li>
+    * <li>GRANTOR - The entity that granted the access.</li>
+    * <li>GRANTEE - The entity granted the access.</li>
+    * <li>PRIVILEGE - The name of the privilege granted.</li>
+    * <li>IS_GRANTABLE - "YES" if the grantee can grant the privilege to
+    * others, "NO" if not, and <code>null</code> if unknown.</li>
+    * </ol>
+    *
+    * @param catalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or <code>null</code>
+    *        to return information from all catalogs.
+    * @param schema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema.
+    * @param tablePattern The table name pattern of tables to return 
+    *        information for.
+    * @return A <code>ResultSet</code> with all the requested privileges.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getTablePrivileges(String catalog, String schemaPattern,
+       String tableNamePattern) throws SQLException;
+ 
+   /**
+    * This method returns the best set of columns for uniquely identifying
+    * a row.  It returns this information as a <code>ResultSet</code> with
+    * the following columns:
+    *
+    * <ol>
+    * <li>SCOPE - The scope of the results returned.  This is one of the 
+    * constants defined in this class (<code>bestRowTemporary</code>,
+    * <code>bestRowTransaction</code>, or <code>bestRowSession</code>).</li>
+    * <li>COLUMN_NAME - The name of the column.</li>
+    * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
+    * defined in <code>Types</code>.</li>
+    * <li>TYPE_NAME - The string name of the data type for this column.</li>
+    * <li>COLUMN_SIZE - The precision of the columns</li>
+    * <li>BUFFER_LENGTH - Unused</li>
+    * <li>DECIMAL_DIGITS - The scale of the column.</li>
+    * <li>PSEUDO_COLUMN - Whether or not the best row identifier is a
+    * pseudo_column.  This is one of the constants defined in this class 
+    * (<code>bestRowUnknown</code>, <code>bestRowNotPseudo</code>, or
+    * <code>bestRowPseudo</code>).</li>
+    * </ol>
+    *
+    * @param catalog The catalog to retrieve information from, or the empty string
+    * to return entities not associated with a catalog, or <code>null</code>
+    * to return information from all catalogs.
+    * @param schema The schema to retrieve information from, or the empty string
+    * to return entities not associated with a schema.
+    * @param table The table name to return information for.
+    * @param columnPattern A pattern of column names to return information for.
+    * @param scope One of the best row id scope constants from this class.
+    * @param nullable <code>true</code> to include columns that are nullable,
+    * <code>false</code> otherwise.
+    * @return A <code>ResultSet</code> with the best row identifier.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getBestRowIdentifier(String catalog, String schema,
+     String table, int scope, boolean nullable) throws SQLException;
+ 
+   /**
+    * This method returns the set of columns that are automatically updated
+    * when the row is update. It returns this information as a 
+    * <code>ResultSet</code> with the following columns:
+    *
+    * <ol>
+    * <li>SCOPE - Unused</li>
+    * <li>COLUMN_NAME - The name of the column.</li>
+    * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
+    * defined in <code>Types</code>.</li>
+    * <li>TYPE_NAME - The string name of the data type for this column.</li>
+    * <li>COLUMN_SIZE - The precision of the columns</li>
+    * <li>BUFFER_LENGTH - Unused</li>
+    * <li>DECIMAL_DIGITS - The scale of the column.</li>
+    * <li>PSEUDO_COLUMN - Whether or not the best row identifier is a
+    * pseudo_column.  This is one of the constants defined in this class 
+    * (<code>versionRowUnknown</code>, <code>versionRowNotPseudo</code>, or
+    * <code>versionRowPseudo</code>).</li>
+    * </ol>
+    *
+    * @param catalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or <code>null</code>
+    *        to return information from all catalogs.
+    * @param schema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema.
+    * @param table The table name to return information for.
+    * @param columnPattern A pattern of column names to return information for.
+    * @return A <code>ResultSet</code> with the version columns.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getVersionColumns(String catalog, String schema,
+     String table) throws SQLException;
+ 
+   /**
+    * This method returns a list of a table's primary key columns.  These
+    * are returned as a <code>ResultSet</code> with the following columns.
+    *
+    * <ol>
+    * <li>TABLE_CAT - The catalog of the table, which may be <code>null</code>.</li>
+    * <li>TABLE_SCHEM - The schema of the table, which may be <code>null</code>.</li>
+    * <li>TABLE_NAME - The name of the table.</li>
+    * <li>COLUMN_NAME - The name of the column.</li>
+    * <li>KEY_SEQ - The sequence number of the column within the primary key.</li>
+    * <li>PK_NAME - The name of the primary key, which may be <code>null</code>.</li>
+    * </ol>
+    *
+    * @param catalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or <code>null</code>
+    *        to return information from all catalogs.
+    * @param schema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema.
+    * @param table The table name to return information for.
+    * @param columnPattern A pattern of column names to return information for.
+    * @return A <code>ResultSet</code> with the primary key columns.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getPrimaryKeys(String catalog, String schema, String table)
+       throws SQLException;
+ 
+   /**
+    * This method returns a list of the table's foreign keys.  These are
+    * returned as a <code>ResultSet</code> with the following columns:
+    *
+    * <ol>
+    * <li>PKTABLE_CAT - The catalog of the table the key was imported from.</li>
+    * <li>PKTABLE_SCHEM - The schema of the table the key was imported from.</li>
+    * <li>PKTABLE_NAME - The name of the table the key was imported from.</li>
+    * <li>PKCOLUMN_NAME - The name of the column that was imported.</li>
+    * <li>FKTABLE_CAT - The foreign key catalog name.</li>
+    * <li>FKTABLE_SCHEM - The foreign key schema name.</li>
+    * <li>FKTABLE_NAME - The foreign key table name.</li>
+    * <li>FKCOLUMN_NAME - The foreign key column name.</li>
+    * <li>KEY_SEQ - The sequence number of the column within the foreign key.</li>
+    * <li>UPDATE_RULE - How the foreign key behaves when the primary key is
+    * updated.  This is one of the constants defined in this class 
+    * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+    * <code>importedKeySetNull</code>, <code>importedKeySetDefault</code>, or
+    * <code>importedKeyRestrict</code>).</li>
+    * <li>DELETE_RULE - How the foreign key behaves when the primary key is
+    * deleted.  This is one of the constants defined in this class 
+    * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+    * <code>importedKeySetNull</code>, or <code>importedKeySetDefault</code>)</li>
+    * <li>FK_NAME - The name of the foreign key.</li>
+    * <li>PK_NAME - The name of the primary key.</li>
+    * <li>DEFERRABILITY - The deferrability value.  This is one of the
+    * constants defined in this table (<code>importedKeyInitiallyDeferred</code>,
+    * <code>importedKeyInitiallyImmediate</code>, or
+    * <code>importedKeyNotDeferrable</code>).</li>
+    * </ol>
+    *
+    * @param catalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or <code>null</code>
+    *        to return information from all catalogs.
+    * @param schema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema.
+    * @param table The table name to return information for.
+    *
+    * @return A <code>ResultSet</code> with the foreign key columns.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getImportedKeys(String catalog, String schema,
+     String table) throws SQLException;
+ 
+   /**
+    * This method returns a list of the table's which use this table's
+    * primary key as a foreign key.  The information is
+    * returned as a <code>ResultSet</code> with the following columns:
+    *
+    * <ol>
+    * <li>PKTABLE_CAT - The catalog of the table the key was imported from.</li>
+    * <li>PKTABLE_SCHEM - The schema of the table the key was imported from.</li>
+    * <li>PKTABLE_NAME - The name of the table the key was imported from.</li>
+    * <li>PKCOLUMN_NAME - The name of the column that was imported.</li>
+    * <li>FKTABLE_CAT - The foreign key catalog name.</li>
+    * <li>FKTABLE_SCHEM - The foreign key schema name.</li>
+    * <li>FKTABLE_NAME - The foreign key table name.</li>
+    * <li>FKCOLUMN_NAME - The foreign key column name.</li>
+    * <li>KEY_SEQ - The sequence number of the column within the foreign key.</li>
+    * <li>UPDATE_RULE - How the foreign key behaves when the primary key is
+    * updated.  This is one of the constants defined in this class 
+    * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+    * <code>importedKeySetNull</code>, <code>importedKeySetDefault</code>, or
+    * <code>importedKeyRestrict</code>).</li>
+    * <li>DELETE_RULE - How the foreign key behaves when the primary key is
+    * deleted.  This is one of the constants defined in this class 
+    * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+    * <code>importedKeySetNull</code>, or <code>importedKeySetDefault</code>)</li>
+    * <li>FK_NAME - The name of the foreign key.</li>
+    * <li>PK_NAME - The name of the primary key.</li>
+    * <li>DEFERRABILITY - The deferrability value.  This is one of the
+    * constants defined in this table (<code>importedKeyInitiallyDeferred</code>,
+    * <code>importedKeyInitiallyImmediate</code>, or
+    * <code>importedKeyNotDeferrable</code>).</li>
+    * </ol>
+    *
+    * @param catalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or <code>null</code>
+    *        to return information from all catalogs.
+    * @param schema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema.
+    * @param table The table name to return information for.
+    * @return A <code>ResultSet</code> with the requested information
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getExportedKeys(String catalog, String schema,
+     String table) throws SQLException;
+ 
+   /**
+    * This method returns a description of how one table imports another
+    * table's primary key as a foreign key.  The information is
+    * returned as a <code>ResultSet</code> with the following columns:
+    *
+    * <ol>
+    * <li>PKTABLE_CAT - The catalog of the table the key was imported from.</li>
+    * <li>PKTABLE_SCHEM - The schema of the table the key was imported from.</li>
+    * <li>PKTABLE_NAME - The name of the table the key was imported from.</li>
+    * <li>PKCOLUMN_NAME - The name of the column that was imported.</li>
+    * <li>FKTABLE_CAT - The foreign key catalog name.</li>
+    * <li>FKTABLE_SCHEM - The foreign key schema name.</li>
+    * <li>FKTABLE_NAME - The foreign key table name.</li>
+    * <li>FKCOLUMN_NAME - The foreign key column name.</li>
+    * <li>KEY_SEQ - The sequence number of the column within the foreign key.</li>
+    * <li>UPDATE_RULE - How the foreign key behaves when the primary key is
+    * updated.  This is one of the constants defined in this class 
+    * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+    * <code>importedKeySetNull</code>, <code>importedKeySetDefault</code>, or
+    * <code>importedKeyRestrict</code>).</li>
+    * <li>DELETE_RULE - How the foreign key behaves when the primary key is
+    * deleted.  This is one of the constants defined in this class 
+    * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+    * <code>importedKeySetNull</code>, or <code>importedKeySetDefault</code>)</li>
+    * <li>FK_NAME - The name of the foreign key.</li>
+    * <li>PK_NAME - The name of the primary key.</li>
+    * <li>DEFERRABILITY - The deferrability value.  This is one of the
+    * constants defined in this table (<code>importedKeyInitiallyDeferred</code>,
+    * <code>importedKeyInitiallyImmediate</code>, or
+    * <code>importedKeyNotDeferrable</code>).</li>
+    * </ol>
+    *
+    * @param primCatalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or <code>null</code>
+    *        to return information from all catalogs, on the exporting side.
+    * @param primSchema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema, on the exporting side.
+    * @param primTable The table name to return information for, on the exporting
+    *        side.
+    * @param forCatalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or <code>null</code>
+    *        to return information from all catalogs, on the importing side.
+    * @param forSchema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema on the importing side.
+    * @param forTable The table name to return information for on the importing
+    *        side.
+    * @return A <code>ResultSet</code> with the requested information
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getCrossReference(String primaryCatalog, String
+     primarySchema, String primaryTable, String foreignCatalog, String
+     foreignSchema, String foreignTable) throws SQLException;
+ 
+   /**
+    * This method returns a list of the SQL types supported by this
+    * database.  The information is returned as a <code>ResultSet</code>
+    * with the following columns:
+    *
+    * <ol>
+    * <li>TYPE_NAME - The name of the data type.</li>
+    * <li>DATA_TYPE - A data type constant from <code>Types</code> for this
+    * type.</li>
+    * <li>PRECISION - The maximum precision of this type.</li>
+    * <li>LITERAL_PREFIX - Prefix value used to quote a literal, which may be
+    * <code>null</code>.</li>
+    * <li>LITERAL_SUFFIX - Suffix value used to quote a literal, which may be
+    * <code>null</code>.</li>
+    * <li>CREATE_PARAMS - The parameters used to create the type, which may be
+    * <code>null</code>.</li>
+    * <li>NULLABLE - Whether or not this type supports NULL values.  This will
+    * be one of the constants defined in this interface 
+    * (<code>typeNoNulls</code>, <code>typeNullable</code>, or
+    * <code>typeNullableUnknown</code>).</li>
+    * <li>CASE_SENSITIVE - Whether or not the value is case sensitive.</li>
+    * <li>SEARCHABLE - Whether or not "LIKE" expressions are supported in
+    * WHERE clauses for this type.  This will be one of the constants defined
+    * in this interface (<code>typePredNone</code>, <code>typePredChar</code>,
+    * <code>typePredBasic</code>, or <code>typeSearchable</code>).</li>
+    * <li>UNSIGNED_ATTRIBUTE - Is the value of this type unsigned.</li>
+    * <li>FIXED_PREC_SCALE - Whether or not this type can be used for money.</li>
+    * <li>AUTO_INCREMENT - Whether or not this type supports auto-incrementing.</li>
+    * <li>LOCAL_TYPE_NAME - A localized name for this data type.</li>
+    * <li>MINIMUM_SCALE - The minimum scale supported by this type.</li>
+    * <li>MAXIMUM_SCALE - The maximum scale supported by this type.</li>
+    * <li>SQL_DATA_TYPE - Unused.</li>
+    * <li>SQL_DATETIME_SUB - Unused.</li>
+    * <li>NUM_PREC_RADIX - The radix of this data type.</li>
+    * </ol>
+    * 
+    * @return A <code>ResultSet</code> with the list of available data types.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getTypeInfo() throws SQLException;
+ 
+   /**
+    * This method returns information about a tables indices and statistics.
+    * It is returned as a <code>ResultSet</code> with the following columns:
+    *
+    * <ol>
+    * <li>TABLE_CAT - The catalog of the table, which may be <code>null</code>.</li>
+    * <li>TABLE_SCHEM - The schema of the table, which may be <code>null</code>.</li>
+    * <li>TABLE_NAME - The name of the table.</li>
+    * <li>NON_UNIQUE - Are index values non-unique?</li>
+    * <li>INDEX_QUALIFIER The index catalog, which may be <code>null</code></li>
+    * <li>INDEX_NAME - The name of the index.</li>
+    * <li>TYPE - The type of index, which will be one of the constants defined
+    * in this interface (<code>tableIndexStatistic</code>,
+    * <code>tableIndexClustered</code>, <code>tableIndexHashed</code>, or
+    * <code>tableIndexOther</code>).</li>
+    * <li>ORDINAL_POSITION - The sequence number of this column in the index.
+    * This will be 0 when the index type is <code>tableIndexStatistic</code>.</li>
+    * <li>COLUMN_NAME - The name of this column in the index.</li>
+    * <li>ASC_OR_DESC - "A" for an ascending sort sequence, "D" for a
+    * descending sort sequence or <code>null</code> if a sort sequence is not
+    * supported.</li>
+    * <li>CARDINALITY - The number of unique rows in the index, or the number
+    * of rows in the table if the index type is <code>tableIndexStatistic</code>.</li>
+    * <li>PAGES - The number of pages used for the index, or the number of pages
+    * in the table if the index type is <code>tableIndexStatistic</code>.</li>
+    * <li>FILTER_CONDITION - The filter condition for this index, which may be
+    * <code>null</code>.</li>
+    * </ol>
+    *
+    * @param catalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or 
+    *        <code>null</code> to return information from all catalogs.
+    * @param schema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema.
+    * @param table The table name to return information for.
+    * @param unique <code>true</code> to return only unique indexes, 
+    *        <code>false</code> otherwise.
+    * @param approx <code>true</code> if data values can be approximations,
+    *        <code>false</code> otherwise.
+    * @return A <code>ResultSet</code> with the requested index information
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getIndexInfo(String catalog, String schema, String table,
+     boolean unique, boolean approximate) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the datbase supports the specified
+    * result type.
+    *
+    * @param type The desired result type, which is one of the constants
+    * defined in <code>ResultSet</code>.
+    *
+    * @return <code>true</code> if the result set type is supported,
+    * <code>false</code> otherwise.
+    *
+    * @exception SQLException If an error occurs.
+    *
+    * @see ResultSet
+    */
+   boolean supportsResultSetType(int type) throws SQLException;
+ 
+   /**
+    * This method tests whether the specified result set type and result set
+    * concurrency type are supported by the database.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @param concur The desired concurrency type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type is supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean supportsResultSetConcurrency(int type, int concurrency)
+       throws SQLException;
+ 
+   /**
+    * This method tests whether or not the specified result set type sees its
+    * own updates.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type sees its own updates,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean ownUpdatesAreVisible(int type) throws SQLException;
+ 
+  /**
+    * This method tests whether or not the specified result set type sees its
+    * own deletes.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type sees its own deletes,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean ownDeletesAreVisible(int type) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the specified result set type sees its
+    * own inserts.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type sees its own inserts,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean ownInsertsAreVisible(int type) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the specified result set type sees 
+    * updates committed by others.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type sees other updates,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean othersUpdatesAreVisible(int type) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the specified result set type sees 
+    * deletes committed by others.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type sees other deletes,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean othersDeletesAreVisible(int type) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the specified result set type sees 
+    * inserts committed by others.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type sees other inserts,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean othersInsertsAreVisible(int type) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the specified result set type can detect
+    * a visible update by calling the <code>rowUpdated</code> method.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type can detect visible updates
+    *         using <code>rowUpdated</code>, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean updatesAreDetected(int type) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the specified result set type can detect
+    * a visible delete by calling the <code>rowUpdated</code> method.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type can detect visible deletes
+    *         using <code>rowUpdated</code>, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean deletesAreDetected(int type) throws SQLException;
+   
+   /**
+    * This method tests whether or not the specified result set type can detect
+    * a visible insert by calling the <code>rowUpdated</code> method.
+    *
+    * @param type The desired result type, which is one of the constants
+    *        defined in <code>ResultSet</code>.
+    * @return <code>true</code> if the result set type can detect visible inserts
+    *         using <code>rowUpdated</code>, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   boolean insertsAreDetected(int type) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the database supports batch updates.
+    *
+    * @return <code>true</code> if batch updates are supported,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean supportsBatchUpdates() throws SQLException;
+ 
+   /**
+    * This method returns the list of user defined data types in use.  These
+    * are returned as a <code>ResultSet</code> with the following columns:
+    *
+    * <ol>
+    * <li>TYPE_CAT - The catalog name, which may be <code>null</code>.</li>
+    * <li>TYPE_SCEHM - The schema name, which may be <code>null</code>.</li>
+    * <li>TYPE_NAME - The user defined data type name.</li>
+    * <li>CLASS_NAME - The Java class name this type maps to.</li>
+    * <li>DATA_TYPE - A type identifier from <code>Types</code> for this type.
+    * This will be one of <code>JAVA_OBJECT</code>, <code>STRUCT</code>, or
+    * <code>DISTINCT</code>.</li>
+    * <li>REMARKS - Comments about this data type.</li>
+    * </ol>
+    *
+    * @param catalog The catalog to retrieve information from, or the empty string
+    *        to return entities not associated with a catalog, or <code>null</code>
+    *        to return information from all catalogs.
+    * @param schema The schema to retrieve information from, or the empty string
+    *        to return entities not associated with a schema.
+    * @param typePattern The type name pattern to match.
+    * @param types The type identifier patterns (from <code>Types</code>) to
+    *        match.
+    * @return A <code>ResultSet</code> with the requested type information
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet getUDTs(String catalog, String schemaPattern, String
+       typeNamePattern, int[] types) throws SQLException;
+ 
+   /**
+    * This method returns the <code>Connection</code> object that was used
+    * to generate the metadata in this object.
+    *
+    * @return The connection for this object.
+    * @exception SQLException If an error occurs.
+    */
+   Connection getConnection() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean supportsSavepoints() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean supportsNamedParameters() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean supportsMultipleOpenResults() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean supportsGetGeneratedKeys() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   ResultSet getSuperTypes(String catalog, String schemaPattern,
+     String typeNamePattern) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   ResultSet getSuperTables(String catalog, String schemaPattern,
+     String tableNamePattern) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   ResultSet getAttributes(String catalog, String schemaPattern, String
+     typeNamePattern, String attributeNamePattern) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean supportsResultSetHoldability(int holdability)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getResultSetHoldability() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getDatabaseMajorVersion() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getDatabaseMinorVersion() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getJDBCMajorVersion() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getJDBCMinorVersion() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getSQLStateType() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean locatorsUpdateCopy() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean supportsStatementPooling() throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Date.java gcc-4.1.0/libjava/classpath/java/sql/Date.java
*** gcc-4.0.2/libjava/classpath/java/sql/Date.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Date.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,184 ----
+ /* Date.java -- Wrapper around java.util.Date
+    Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ import java.text.ParseException;
+ import java.text.SimpleDateFormat;
+ 
+ /**
+   * This class is a wrapper around java.util.Date to allow the JDBC
+   * driver to identify the value as a SQL Date.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class Date extends java.util.Date 
+ {
+   static final long serialVersionUID = 1511598038487230103L;
+ 
+   /**
+    * Used for parsing and formatting this date.
+    */
+   private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ 
+   /**
+    * This method initializes a new instance of this class with the
+    * specified year, month, and day.
+    *
+    * @param year The year of this date minue 1900.
+    * @param month The month of this date (0-11).
+    * @param day The day of this date (1-31).
+    *
+    * @deprecated
+    */
+   public Date(int year, int month, int day)
+   {
+     super(year, month, day);  
+   }
+ 
+   /**
+    * This method initializes a new instance of this class with the
+    * specified time value representing the number of seconds since 
+    * Jan 1, 1970 at 12:00 midnight GMT.
+    *
+    * @param time The time value to intialize this date to.
+    */
+   public Date(long date)
+   {
+     super(date);
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public int getHours() throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public int getMinutes() throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public int getSeconds() throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public void setHours(int newValue) throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public void setMinutes(int newValue) throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public void setSeconds(int newValue) throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method returns a new instance of this class by parsing a
+    * date in JDBC format into a Java date.
+    *
+    * @param str The string to parse.
+    * @return The resulting <code>java.sql.Date</code> value.
+    */
+   public static Date valueOf (String str)
+   {
+     try 
+       {
+ 	java.util.Date d = (java.util.Date) sdf.parseObject(str);
+ 
+ 	if (d == null)
+ 	  throw new IllegalArgumentException(str);
+ 	else
+ 	  return new Date(d.getTime());
+       }
+     catch (ParseException e)
+       {
+ 	throw new IllegalArgumentException(str);
+       }
+   }
+ 
+   /**
+    * This method returns this date in JDBC format.
+    *
+    * @return This date as a string.
+    */
+   public String toString()
+   {
+     return sdf.format(this);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Driver.java gcc-4.1.0/libjava/classpath/java/sql/Driver.java
*** gcc-4.0.2/libjava/classpath/java/sql/Driver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Driver.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,123 ----
+ /* Driver.java -- A JDBC driver
+    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ import java.util.Properties;
+ 
+ /**
+   * This interface specifies a mechanism for accessing a JDBC database
+   * driver.  When the class implementing this method is loaded, it should
+   * register an instance of itself with the <code>DriverManager</code> in
+   * a static initializer.  
+   * <p>
+   * Because the <code>DriverManager</code> might attempt to use several
+   * drivers to find one that can connect to the requested database, 
+   * this driver should not cause large numbers of classes and code to
+   * be loaded.  If another driver is the one that ends up performing the
+   * request, any loading done by this driver would be wasted.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public interface Driver 
+ {
+   /**
+    * This method connects to the specified database using the connection
+    * properties supplied.  If the driver does not understand the database
+    * URL, it should return <code>null</code> instead of throwing an
+    * exception since the <code>DriverManager</code> will probe a driver
+    * in this manner.
+    * 
+    * @param url The URL string for this connection.
+    * @param properties The list of database connection properties.
+    * @return A <code>Connection</code> object for the newly established
+    *         connection, or <code>null</code> if the URL is not understood.
+    * @exception SQLException If an error occurs.
+    */
+   Connection connect(String url, Properties info) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the driver believes it can connect to
+    * the specified database.  The driver should only test whether it 
+    * understands and accepts the URL. It should not necessarily attempt to 
+    * probe the database for a connection.
+    *
+    * @param The database URL string.
+    * @return <code>true</code> if the drivers can connect to the database, 
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean acceptsURL(String url) throws SQLException;
+ 
+   /**
+    * This method returns an array of possible properties that could be
+    * used to connect to the specified database.
+    *
+    * @param url The URL string of the database to connect to.
+    * @param properties The list of properties the caller is planning to use
+    *        to connect to the database.
+    * @return A list of possible additional properties for a connection to this
+    *         database.  This list may be empty.
+    * @exception SQLException If an error occurs.
+    */
+   DriverPropertyInfo[] getPropertyInfo(String url, Properties properties)
+     throws SQLException;
+ 
+   /**
+    * This method returns the major version number of the driver.
+    *
+    * @return The major version number of the driver.
+    */      
+   int getMajorVersion();
+ 
+   /**
+    * This method returns the minor version number of the driver.
+    *
+    * @return The minor version number of the driver.
+    */
+   int getMinorVersion();
+ 
+   /**
+    * This method tests whether or not the driver is JDBC compliant.  This
+    * method should only return <code>true</code> if the driver has been
+    * certified as JDBC compliant.
+    *
+    * @return <code>true</code> if the driver has been certified JDBC compliant,
+    *         <code>false</code> otherwise.
+    */
+   boolean jdbcCompliant();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/DriverManager.java gcc-4.1.0/libjava/classpath/java/sql/DriverManager.java
*** gcc-4.0.2/libjava/classpath/java/sql/DriverManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/DriverManager.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,346 ----
+ /* DriverManager.java -- Manage JDBC drivers
+    Copyright (C) 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.util.Enumeration;
+ import java.util.Properties;
+ import java.util.StringTokenizer;
+ import java.util.Vector;
+ 
+ /**
+   * This class manages the JDBC drivers in the system. It maintains a
+   * registry of drivers and locates the appropriate driver to handle a
+   * JDBC database URL.
+   * <p>
+   * On startup, <code>DriverManager</code> loads all the managers specified
+   * by the system property <code>jdbc.drivers</code>.  The value of this
+   * property should be a colon separated list of fully qualified driver
+   * class names.  Additional drivers can be loaded at any time by
+   * simply loading the driver class with <code>class.forName(String)</code>.
+   * The driver should automatically register itself in a static 
+   * initializer.
+   * <p>
+   * The methods in this class are all <code>static</code>. This class
+   * cannot be instantiated.
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class DriverManager 
+ {
+   /**
+    * This is the log stream for JDBC drivers.
+    */
+   private static PrintStream log_stream;
+ 
+   /**
+    * This is the log writer for JDBC drivers.
+    */
+   private static PrintWriter log_writer;
+ 
+   /**
+    * This is the login timeout used by JDBC drivers.
+    */
+   private static int login_timeout;
+ 
+   /**
+    * This is the list of JDBC drivers that are loaded.
+    */
+   private static Vector drivers;
+    // Hmm, seems like we might want to do a Hashtable and lookup by something,
+    // but what would it be?
+ 
+   // Load all drivers on startup
+   static
+   {
+     drivers = new Vector();
+ 
+     String driver_string = System.getProperty("jdbc.drivers");
+     if (driver_string != null)
+       {
+ 	StringTokenizer st = new StringTokenizer(driver_string);
+ 	while (st.hasMoreTokens())
+           {
+             String driver_classname = st.nextToken();
+ 
+             try
+               {
+         	Class.forName(driver_classname); // The driver registers itself
+               }
+             catch (Exception e)
+ 	      {
+ 		// Ignore not founds
+ 	      }
+           }
+       }
+ 
+   }
+ 
+   /** Can't be instantiated. */
+   private DriverManager()
+   {
+   }
+ 
+   /**
+    * This method returns the log writer being used by all JDBC drivers.
+    * This method should be used in place of the deprecated
+    * <code>getLogStream</code> method.
+    *
+    * @return The log writer in use by JDBC drivers.
+    */
+   public static PrintWriter getLogWriter()
+   {
+     return log_writer;
+   }
+   
+   /**
+    * This method sets the log writer being used by JDBC drivers.  This is a
+    * system-wide parameter that affects all drivers.  Note that since there
+    * is no way to retrieve a <code>PrintStream</code> from a 
+    * <code>PrintWriter</code>, this method cannot set the log stream in
+    * use by JDBC.  Thus any older drivers may not see this setting.
+    *
+    * @param out The new log writer for JDBC.
+    */
+   public static void setLogWriter(PrintWriter out)
+   {
+     DriverManager.log_writer = out;
+   }
+ 
+ /**
+   * This method attempts to return a connection to the specified
+   * JDBC URL string using the specified connection properties.
+   *
+   * @param url The JDBC URL string to connect to.
+   * @param properties The connection properties.
+   *
+   * @return A <code>Connection</code> to that URL.
+   *
+   * @exception SQLException If an error occurs.
+   */
+   public static Connection getConnection(String url, Properties properties)
+     throws SQLException
+   {
+     Driver d = getDriver(url);
+     if (d == null)
+       throw new SQLException("Driver not found for URL: " + url);
+ 
+     return d.connect(url, properties);
+   }
+ 
+ 
+   /**
+    * This method attempts to return a connection to the specified
+    * JDBC URL string using the specified username and password.
+    *
+    * @param url The JDBC URL string to connect to.
+    * @param user The username to connect with.
+    * @param password The password to connect with.
+    * @return A <code>Connection</code> to that URL.
+    * @exception SQLException If an error occurs.
+    */
+   public static Connection getConnection(String url, String user,
+     String password) throws SQLException
+   {
+     Properties p = new Properties();
+ 
+     if (user != null)
+       p.setProperty("user", user);
+     if (password != null)
+       p.setProperty("password", password);
+ 
+     return getConnection(url, p);
+   }
+ 
+   /**
+    * This method attempts to return a connection to the specified
+    * JDBC URL string.
+    *
+    * @param url The JDBC URL string to connect to.
+    *
+    * @return A <code>Connection</code> to that URL.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   public static Connection getConnection(String url) throws SQLException
+   {
+     return getConnection(url, new Properties());
+   }
+ 
+   /**
+    * This method returns a driver that can connect to the specified
+    * JDBC URL string.  This will be selected from among drivers loaded
+    * at initialization time and those drivers manually loaded by the
+    * same class loader as the caller.
+    *
+    * @param url The JDBC URL string to find a driver for.
+    *
+    * @return A <code>Driver</code> that can connect to the specified
+    * URL.
+    *
+    * @exception SQLException If an error occurs, or no suitable driver can be found.
+    */
+   public static Driver getDriver(String url) throws SQLException
+   {
+     // FIXME: Limit driver search to the appropriate subset of loaded drivers.
+     Enumeration e = drivers.elements();
+     while(e.hasMoreElements())
+       {
+ 	Driver d = (Driver)e.nextElement();
+ 	if (d.acceptsURL(url))
+           return d;
+       }
+ 
+     throw new SQLException("No driver found for " + url);
+   }
+ 
+   /**
+    * This method registers a new driver with the manager.  This is normally
+    * called by the driver itself in a static initializer.
+    *
+    * @param driver The new <code>Driver</code> to add.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   public static void registerDriver(Driver driver) throws SQLException
+   {
+     if (! drivers.contains(driver))
+       drivers.addElement(driver);  
+   }
+ 
+ /**
+   * This method de-registers a driver from the manager.
+   *
+   * @param driver The <code>Driver</code> to unregister.
+   *
+   * @exception SQLException If an error occurs.
+   */
+   public static void deregisterDriver(Driver driver) throws SQLException
+   {
+     if (drivers.contains(driver))
+       drivers.removeElement(driver);
+   }
+ 
+   /**
+    * This method returns a list of all the currently registered JDBC drivers
+    * that were loaded by the current <code>ClassLoader</code>.
+    *
+    * @return An <code>Enumeration</code> of all currently loaded JDBC drivers.
+    */
+   public static Enumeration getDrivers()
+   {
+     Vector v = new Vector();
+     Enumeration e = drivers.elements();
+ 
+     // Is this right?
+     ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ 
+     while(e.hasMoreElements())
+       {
+ 	Object obj = e.nextElement();
+ 
+ 	ClassLoader loader = obj.getClass().getClassLoader();
+ 
+ 	if (loader == null)
+ 	  loader = ClassLoader.getSystemClassLoader();
+ 	if (! loader.equals(cl))
+ 	  continue;
+ 
+ 	v.addElement(obj);
+       } 
+ 
+     return v.elements();
+   }
+ 
+   /**
+    * This method set the login timeout used by JDBC drivers.  This is a
+    * system-wide parameter that applies to all drivers.
+    *
+    * @param login_timeout The new login timeout value.
+    */
+   public static void setLoginTimeout(int seconds)
+   {
+     DriverManager.login_timeout = login_timeout;  
+   }
+ 
+   /**
+    * This method returns the login timeout in use by JDBC drivers systemwide.
+    *
+    * @return The login timeout.
+    */
+   public static int getLoginTimeout()
+   {
+     return login_timeout;
+   }
+ 
+   /**
+    * This method sets the log stream in use by JDBC.
+    *
+    * @param log_stream The log stream in use by JDBC.
+    *
+    * @deprecated Use <code>setLogWriter</code> instead.
+    */
+   public static void setLogStream(PrintStream out)
+   {
+     DriverManager.log_stream = log_stream;
+   }
+ 
+   /**
+    * This method returns the log stream in use by JDBC.
+    *
+    * @return The log stream in use by JDBC.
+    *
+    * @deprecated Use <code>getLogWriter()</code> instead.
+    */
+   public static PrintStream getLogStream()
+   {
+     return log_stream;
+   }
+ 
+   /**
+    * This method prints the specified line to the log stream.
+    *
+    * @param str The string to write to the log stream.
+    */
+   public static void println(String message)
+   {
+     if (log_stream != null) // Watch for user not using logging
+       log_stream.println(message);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/DriverPropertyInfo.java gcc-4.1.0/libjava/classpath/java/sql/DriverPropertyInfo.java
*** gcc-4.0.2/libjava/classpath/java/sql/DriverPropertyInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/DriverPropertyInfo.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* DriverPropertyInfo.java -- Property information about drivers.
+    Copyright (C) 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ /**
+  * This class holds a driver property that can be used for querying or
+  * setting driver configuration parameters.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class DriverPropertyInfo 
+ {
+   /**
+    * The name of the property.
+    */
+   public String name;
+ 
+   /**
+    * A description of the property, possibly <code>null</code>.
+    */
+   public String description;
+ 
+   /**
+    * A flag indicating whether or not a value for this property is required
+    * in order to connect to the database.
+    */
+   public boolean required;
+ 
+   /**
+    * This is the value of the property.
+    */
+   public String value;
+ 
+   /**
+     * If values are restricted to certain choices, this is the list of valid
+     * ones.  Otherwise it is <code>null</code>.
+     */
+   public String[] choices;
+ 
+   /**
+    * This method initializes a new instance of <code>DriverPropertyInfo</code>
+    * with the specified name and value.  All other fields are defaulted.
+    *
+    * @param name The name of the property.
+    * @param value The value to assign to the property.
+    */
+   public DriverPropertyInfo(String name, String value)
+   {
+     this.name = name;
+     this.value = value;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/ParameterMetaData.java gcc-4.1.0/libjava/classpath/java/sql/ParameterMetaData.java
*** gcc-4.0.2/libjava/classpath/java/sql/ParameterMetaData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/ParameterMetaData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,103 ----
+ /* ParameterMetaData.java
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ /**
+  * @since 1.4
+  */
+ public interface ParameterMetaData 
+ {
+   int parameterNoNulls = 0;
+ 
+   int parameterNullable = 1;
+ 
+   int parameterNullableUnknown = 2;
+ 
+   int parameterModeUnknown = 0;
+ 
+   int parameterModeIn = 1;
+ 
+   int parameterModeInOut = 2;
+ 
+   int parameterModeOut = 4;
+ 
+   /**
+    * @since 1.4
+    */
+   int getParameterCount() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int isNullable(int param) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean isSigned(int param) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getPrecision(int param) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getScale(int param) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getParameterType(int param) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   String getParameterTypeName(int param) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   String getParameterClassName(int param) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getParameterMode(int param) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/PreparedStatement.java gcc-4.1.0/libjava/classpath/java/sql/PreparedStatement.java
*** gcc-4.0.2/libjava/classpath/java/sql/PreparedStatement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/PreparedStatement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,438 ----
+ /* PreparedStatement.java -- Interface for pre-compiled statements.
+    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ import java.io.InputStream;
+ import java.io.Reader;
+ import java.math.BigDecimal;
+ import java.net.URL;
+ import java.util.Calendar;
+ 
+ /**
+  * This interface provides a mechanism for executing pre-compiled
+  * statements.  This provides greater efficiency when calling the same
+  * statement multiple times.  Parameters are allowed in a statement,
+  * providings for maximum reusability.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface PreparedStatement extends Statement 
+ {
+   /**
+    * This method executes a prepared SQL query and returns its ResultSet.
+    *
+    * @return The ResultSet of the SQL statement.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet executeQuery() throws SQLException;
+ 
+   /**
+    * This method executes an SQL INSERT, UPDATE or DELETE statement.  SQL
+    * statements that return nothing such as SQL DDL statements can be executed.
+    *
+    * @return The result is either the row count for INSERT, UPDATE or DELETE
+    *         statements; or 0 for SQL statements that return nothing.
+    * @exception SQLException If an error occurs.
+    */
+   int executeUpdate() throws SQLException;
+ 
+   /**
+    * This method populates the specified parameter with a SQL NULL value
+    * for the specified type.
+    *
+    * @param index The index of the parameter to set.
+    * @param type The SQL type identifier of the parameter from <code>Types</code>
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void setNull(int parameterIndex, int sqlType) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>boolean</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setBoolean(int parameterIndex, boolean x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>byte</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setByte(int parameterIndex, byte x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>short</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setShort(int parameterIndex, short x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>int</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setInt(int parameterIndex, int x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>long</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setLong(int parameterIndex, long x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>float</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setFloat(int parameterIndex, float x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>double</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setDouble(int parameterIndex, double x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>java.math.BigDecimal</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setBigDecimal(int parameterIndex, BigDecimal x) throws
+       SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>String</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setString(int parameterIndex, String x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>byte</code> array value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setBytes(int parameterIndex, byte[] x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>java.sql.Date</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setDate(int parameterIndex, Date x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>java.sql.Time</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setTime(int parameterIndex, Time x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>java.sql.Timestamp</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setTimestamp(int parameterIndex, Timestamp x)
+     throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * ASCII <code>InputStream</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @param length The number of bytes in the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void setAsciiStream(int parameterIndex, InputStream x, int length)
+     throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * Unicode UTF-8 <code>InputStream</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @param length The number of bytes in the stream.
+    * @exception SQLException If an error occurs.
+    * @deprecated
+    */
+   void setUnicodeStream(int parameterIndex, InputStream x, int length)
+     throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * binary <code>InputStream</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @param length The number of bytes in the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void setBinaryStream(int parameterIndex, InputStream x, int length)
+     throws SQLException;
+ 
+   /**
+    * This method clears all of the input parameter that have been
+    * set on this statement.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void clearParameters() throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>Object</code> value.  The specified SQL object type will be used.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @param type The SQL type to use for the parameter, from <code>Types</code>
+    * @param scale The scale of the value, for numeric values only.
+    * @exception SQLException If an error occurs.
+    * @see Types
+    */
+   void setObject(int parameterIndex, Object x, int targetSqlType,
+     int scale) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>Object</code> value.  The specified SQL object type will be used.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @param type The SQL type to use for the parameter, from <code>Types</code>
+    * @exception SQLException If an error occurs.
+    * @see Types
+    */
+   void setObject(int parameterIndex, Object x, int targetSqlType)
+     throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>Object</code> value.  The default object type to SQL type mapping
+    * will be used.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setObject(int parameterIndex, Object x) throws SQLException;
+ 
+   /**
+    * This method executes a prepared SQL query.
+    * Some prepared statements return multiple results; the execute method
+    * handles these complex statements as well as the simpler form of
+    * statements handled by executeQuery and executeUpdate.
+    *
+    * @return The result of the SQL statement.
+    * @exception SQLException If an error occurs.
+    */
+   boolean execute() throws SQLException;
+ 
+   /**
+    * This method adds a set of parameters to the batch for JDBC 2.0.
+    * @exception SQLException If an error occurs.
+    */
+   void addBatch() throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * character <code>Reader</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @param length The number of bytes in the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void setCharacterStream(int parameterIndex, Reader reader,
+     int length) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>Ref</code> value.  The default object type to SQL type mapping
+    * will be used.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setRef(int i, Ref x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>Blob</code> value.  The default object type to SQL type mapping
+    * will be used.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setBlob(int i, Blob x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>Clob</code> value.  The default object type to SQL type mapping
+    * will be used.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setClob(int i, Clob x) throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>Array</code> value.  The default object type to SQL type mapping
+    * will be used.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @exception SQLException If an error occurs.
+    */
+   void setArray(int i, Array x) throws SQLException;
+ 
+   /**
+    * This method returns meta data for the result set from this statement.
+    *
+    * @return Meta data for the result set from this statement.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSetMetaData getMetaData() throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>java.sql.Date</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @param calendar The <code>Calendar</code> to use for timezone and locale.
+    * @exception SQLException If an error occurs.
+    */
+   void setDate(int parameterIndex, Date x, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>java.sql.Time</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @param calendar The <code>Calendar</code> to use for timezone and locale.
+    * @exception SQLException If an error occurs.
+    */
+   void setTime(int parameterIndex, Time x, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * This method sets the specified parameter from the given Java
+    * <code>java.sql.Timestamp</code> value.
+    *
+    * @param index The index of the parameter value to set.
+    * @param value The value of the parameter.
+    * @param calendar The <code>Calendar</code> to use for timezone and locale.
+    * @exception SQLException If an error occurs.
+    */
+   void setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * This method populates the specified parameter with a SQL NULL value
+    * for the specified type.
+    *
+    * @param index The index of the parameter to set.
+    * @param type The SQL type identifier of the parameter from <code>Types</code>
+    * @param name The name of the data type, for user defined types.
+    * @exception SQLException If an error occurs.
+    */
+   void setNull(int paramIndex, int sqlType, String typeName)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setURL(int parameterIndex, URL x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   ParameterMetaData getParameterMetaData() throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Ref.java gcc-4.1.0/libjava/classpath/java/sql/Ref.java
*** gcc-4.0.2/libjava/classpath/java/sql/Ref.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Ref.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* Ref.java -- Reference to a SQL structured type.
+    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.sql;
+ 
+ import java.util.Map;
+ 
+ /**
+  * This interface provides a mechanism for obtaining information about
+  * a SQL structured type
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @since 1.2
+  */
+ public interface Ref 
+ {
+   /**
+    * This method returns the fully qualified name of the SQL structured
+    * type of the referenced item.
+    *
+    * @return The fully qualified name of the SQL structured type.
+    * @exception SQLException If an error occurs.
+    * @since 1.2
+    */
+   String getBaseTypeName() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Object getObject(Map map) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   Object getObject() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void setObject(Object value) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/ResultSet.java gcc-4.1.0/libjava/classpath/java/sql/ResultSet.java
*** gcc-4.0.2/libjava/classpath/java/sql/ResultSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/ResultSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1530 ----
+ /* ResultSet.java -- A SQL statement result set.
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ import java.io.InputStream;
+ import java.io.Reader;
+ import java.math.BigDecimal;
+ import java.net.URL;
+ import java.util.Calendar;
+ import java.util.Map;
+ 
+ /**
+  * This interface provides access to the data set returned by a SQL
+  * statement.  An instance of this interface is returned by the various
+  * execution methods in the <code>Statement</code>.
+  *
+  * <p> This class models a cursor, which can be stepped through one row at a
+  * time.  Methods are provided for accessing columns by column name or by
+  * index.</p>
+  *
+  * <p> Note that a result set is invalidated if the statement that returned
+  * it is closed.</p>
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface ResultSet 
+ {
+   /**
+    * The rows will be processed in order from first to last.
+    */
+   int FETCH_FORWARD = 1000;
+ 
+   /**
+    * The rows will be processed in order from last to first.
+    */
+   int FETCH_REVERSE = 1001;
+ 
+   /**
+    * The rows will be processed in an unknown order
+    */
+   int FETCH_UNKNOWN = 1002;
+ 
+   /**
+    * This type of result set may only step forward through the rows returned.
+    */
+   int TYPE_FORWARD_ONLY = 1003;
+ 
+   /**
+    * This type of result set is scrollable and is not sensitive to changes
+    * made by other statements.
+    */
+   int TYPE_SCROLL_INSENSITIVE = 1004;
+ 
+   /**
+    * This type of result set is scrollable and is also sensitive to changes
+    * made by other statements.
+    */
+   int TYPE_SCROLL_SENSITIVE = 1005;
+ 
+   /**
+    * The concurrency mode of for the result set may not be modified.
+    */
+   int CONCUR_READ_ONLY = 1007;
+ 
+   /**
+    * The concurrency mode of for the result set may be modified.
+    */
+   int CONCUR_UPDATABLE = 1008;
+ 
+   int HOLD_CURSORS_OVER_COMMIT = 1;
+ 
+   int CLOSE_CURSORS_AT_COMMIT = 2;
+ 
+   /**
+    * This method advances to the next row in the result set.  Any streams
+    * open on the current row are closed automatically.
+    *
+    * @return <code>true</code> if the next row exists, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean next() throws SQLException;
+ 
+   /**
+    * This method closes the result set and frees any associated resources.
+    * 
+    * @exception SQLException If an error occurs.
+    */
+   void close() throws SQLException;
+ 
+   /**
+    * This method tests whether the value of the last column that was fetched
+    * was actually a SQL NULL value.
+    *
+    * @return <code>true</code> if the last column fetched was a NULL,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean wasNull() throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>String</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>String</code>.
+    * @exception SQLException If an error occurs.
+    */
+   String getString(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>boolean</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>boolean</code>.
+    * @exception SQLException If an error occurs.
+    */
+   boolean getBoolean(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>byte</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>byte</code>.
+    * @exception SQLException If an error occurs.
+    */
+   byte getByte(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>short</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>short</code>.
+    * @exception SQLException If an error occurs.
+    */
+   short getShort(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>int</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>int</code>.
+    * @exception SQLException If an error occurs.
+    */
+   int getInt(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>long</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>long</code>.
+    * @exception SQLException If an error occurs.
+    */
+   long getLong(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>float</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>float</code>.
+    * @exception SQLException If an error occurs.
+    */
+   float getFloat(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>double</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>double</code>.
+    * @exception SQLException If an error occurs.
+    */
+   double getDouble(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>BigDecimal</code>.
+    *
+    * @param index The index of the column to return.
+    * @param scale The number of digits to the right of the decimal to return.
+    * @return The column value as a <code>BigDecimal</code>.
+    * @exception SQLException If an error occurs.
+    * @deprecated
+    */
+   BigDecimal getBigDecimal(int columnIndex, int scale)
+     throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * byte array.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a byte array
+    * @exception SQLException If an error occurs.
+    */
+   byte[] getBytes(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>java.sql.Date</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>java.sql.Date</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Date getDate(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>java.sql.Time</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>java.sql.Time</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Time getTime(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>java.sql.Timestamp</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>java.sql.Timestamp</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Timestamp getTimestamp(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as an ASCII 
+    * stream.  Note that all the data from this stream must be read before
+    * fetching the value of any other column.  Please also be aware that 
+    * calling <code>next()</code> or <code>close()</code> on this result set
+    * will close this stream as well.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as an ASCII <code>InputStream</code>.
+    * @exception SQLException If an error occurs.
+    */
+   InputStream getAsciiStream(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Unicode UTF-8
+    * stream.  Note that all the data from this stream must be read before
+    * fetching the value of any other column.  Please also be aware that 
+    * calling <code>next()</code> or <code>close()</code> on this result set
+    * will close this stream as well.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a Unicode UTF-8 <code>InputStream</code>.
+    * @exception SQLException If an error occurs.
+    * @deprecated Use getCharacterStream instead.
+    */
+   InputStream getUnicodeStream(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a raw byte
+    * stream.  Note that all the data from this stream must be read before
+    * fetching the value of any other column.  Please also be aware that 
+    * calling <code>next()</code> or <code>close()</code> on this result set
+    * will close this stream as well.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a raw byte <code>InputStream</code>.
+    * @exception SQLException If an error occurs.
+    */
+   InputStream getBinaryStream(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>String</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>String</code>.
+    * @exception SQLException If an error occurs.
+    */
+   String getString(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>boolean</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>boolean</code>.
+    * @exception SQLException If an error occurs.
+    */
+   boolean getBoolean(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>byte</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>byte</code>.
+    * @exception SQLException If an error occurs.
+    */
+   byte getByte(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>short</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>short</code>.
+    * @exception SQLException If an error occurs.
+    */
+   short getShort(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>int</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>int</code>.
+    * @exception SQLException If an error occurs.
+    */
+   int getInt(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>long</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>long</code>.
+    * @exception SQLException If an error occurs.
+    */
+   long getLong(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>float</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>float</code>.
+    * @exception SQLException If an error occurs.
+    */
+   float getFloat(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>double</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>double</code>.
+    * @exception SQLException If an error occurs.
+    */
+   double getDouble(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>BigDecimal</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>BigDecimal</code>.
+    * @exception SQLException If an error occurs.
+    * @deprecated
+    */
+   BigDecimal getBigDecimal(String columnName, int scale)
+     throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * byte array.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a byte array
+    * @exception SQLException If an error occurs.
+    */
+   byte[] getBytes(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>java.sql.Date</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>java.sql.Date</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Date getDate(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>java.sql.Time</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>java.sql.Time</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Time getTime(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>java.sql.Timestamp</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>java.sql.Timestamp</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Timestamp getTimestamp(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as an ASCII 
+    * stream.  Note that all the data from this stream must be read before
+    * fetching the value of any other column.  Please also be aware that 
+    * calling <code>next()</code> or <code>close()</code> on this result set
+    * will close this stream as well.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as an ASCII <code>InputStream</code>.
+    * @exception SQLException If an error occurs.
+    */
+   InputStream getAsciiStream(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Unicode UTF-8
+    * stream.  Note that all the data from this stream must be read before
+    * fetching the value of any other column.  Please also be aware that 
+    * calling <code>next()</code> or <code>close()</code> on this result set
+    * will close this stream as well.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a Unicode UTF-8 <code>InputStream</code>.
+    * @exception SQLException If an error occurs.
+    * @deprecated Use getCharacterStream instead.
+    */
+   InputStream getUnicodeStream(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a raw byte
+    * stream.  Note that all the data from this stream must be read before
+    * fetching the value of any other column.  Please also be aware that 
+    * calling <code>next()</code> or <code>close()</code> on this result set
+    * will close this stream as well.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a raw byte <code>InputStream</code>.
+    * @exception SQLException If an error occurs.
+    */
+   InputStream getBinaryStream(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the first SQL warning associated with this result
+    * set.  Any additional warnings will be chained to this one.
+    *
+    * @return The first SQLWarning for this result set, or <code>null</code> if
+    *         there are no warnings.
+    * @exception SQLException If an error occurs.
+    */
+   SQLWarning getWarnings() throws SQLException;
+ 
+   /**
+    * This method clears all warnings associated with this result set.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void clearWarnings() throws SQLException;
+ 
+   /**
+    * This method returns the name of the database cursor used by this
+    * result set.
+    *
+    * @return The name of the database cursor used by this result set.
+    * @exception SQLException If an error occurs.
+    */
+   String getCursorName() throws SQLException;
+ 
+   /**
+    * This method returns data about the columns returned as part of the
+    * result set as a <code>ResultSetMetaData</code> instance.
+    *
+    * @return The <code>ResultSetMetaData</code> instance for this result set.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSetMetaData getMetaData() throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>Object</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as an <code>Object</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Object getObject(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>Object</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as an <code>Object</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Object getObject(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the column index of the specified named column.
+    *
+    * @param column The name of the column.
+    * @return The index of the column.
+    * @exception SQLException If an error occurs.
+    */
+   int findColumn(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a character
+    * stream.  Note that all the data from this stream must be read before
+    * fetching the value of any other column.  Please also be aware that 
+    * calling <code>next()</code> or <code>close()</code> on this result set
+    * will close this stream as well.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as an character <code>Reader</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Reader getCharacterStream(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a character
+    * stream.  Note that all the data from this stream must be read before
+    * fetching the value of any other column.  Please also be aware that 
+    * calling <code>next()</code> or <code>close()</code> on this result set
+    * will close this stream as well.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as an character <code>Reader</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Reader getCharacterStream(String columnName) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>BigDecimal</code>.
+    *
+    * @param index The index of the column to return.
+    * @return The column value as a <code>BigDecimal</code>.
+    * @exception SQLException If an error occurs.
+    */
+   BigDecimal getBigDecimal(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>BigDecimal</code>.
+    *
+    * @param column The name of the column to return.
+    * @return The column value as a <code>BigDecimal</code>.
+    * @exception SQLException If an error occurs.
+    */
+   BigDecimal getBigDecimal(String columnName) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the cursor is before the first row
+    * in the result set.
+    *
+    * @return <code>true</code> if the cursor is positioned before the first
+    *         row, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isBeforeFirst() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the cursor is after the last row
+    * in the result set.
+    *
+    * @return <code>true</code> if the cursor is positioned after the last
+    *         row, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isAfterLast() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the cursor is positioned on the first
+    * row in the result set.
+    *
+    * @return <code>true</code> if the cursor is positioned on the first
+    *         row, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isFirst() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the cursor is on the last row
+    * in the result set.
+    *
+    * @return <code>true</code> if the cursor is positioned on the last
+    *         row, <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isLast() throws SQLException;
+ 
+   /**
+    * This method repositions the cursor to before the first row in the
+    * result set.
+    * 
+    * @exception SQLException If an error occurs.
+    */
+   void beforeFirst() throws SQLException;
+ 
+   /**
+    * This method repositions the cursor to after the last row in the result
+    * set.
+    * 
+    * @exception SQLException If an error occurs.
+    */
+   void afterLast() throws SQLException;
+ 
+   /**
+    * This method repositions the cursor on the first row in the
+    * result set.
+    *
+    * @return <code>true</code> if the cursor is on a valid row;
+    *         <code>false</code> if there are no rows in the result set.
+    * @exception SQLException If an error occurs.
+    */
+   boolean first() throws SQLException;
+ 
+   /**
+    * This method repositions the cursor on the last row in the result
+    * set.
+    * 
+    * @return <code>true</code> if the cursor is on a valid row;
+    *         <code>false</code> if there are no rows in the result set.
+    * @exception SQLException If an error occurs.
+    */
+   boolean last() throws SQLException;
+ 
+   /**
+    * This method returns the current row number in the cursor.  Numbering
+    * begins at index 1.
+    *
+    * @return The current row number, or 0 if there is not current row.
+    * @exception SQLException If an error occurs.
+    */
+   int getRow() throws SQLException;
+ 
+   /**
+    * This method positions the result set to the specified absolute row.
+    * Positive numbers are row offsets from the beginning of the result
+    * set (numbering starts from row 1) and negative numbers are row offsets
+    * from the end of the result set (numbering starts from -1).
+    *
+    * @param row The row to position the result set to.
+    *
+    * @return <code>true</code> if the current position was changed,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean absolute(int row) throws SQLException;
+ 
+   /**
+    * This method moves the result set position relative to the current row.
+    * The offset can be positive or negative.
+    *
+    * @param row The relative row position to move to.
+    * @return <code>true</code> if the current position was changed,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean relative(int rows) throws SQLException;
+ 
+   /**
+    * This method moves the current position to the previous row in the
+    * result set.
+    *
+    * @return <code>true</code> if the previous row exists, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean previous() throws SQLException;
+ 
+   /**
+    * This method provides a hint to the driver about which direction the
+    * result set will be processed in. 
+    *
+    * @param direction The direction in which rows will be processed. (Values?)
+    * @exception SQLException If an error occurs.
+    */
+   void setFetchDirection(int direction) throws SQLException;
+ 
+   /**
+    * This method returns the current fetch direction for this result set.
+    *
+    * @return The fetch direction for this result set.
+    * @exception SQLException If an error occurs.
+    */
+   int getFetchDirection() throws SQLException;
+ 
+   /**
+    * This method provides a hint to the driver about how many rows at a
+    * time it should fetch from the database.
+    *
+    * @param rows The number of rows the driver should fetch per call.
+    * @exception SQLException If an error occurs.
+    */
+   void setFetchSize(int rows) throws SQLException;
+ 
+   /**
+    * This method returns the current number of rows that will be fetched 
+    * from the database at a time.
+    *
+    * @return The current fetch size for this result set.
+    * @exception SQLException If an error occurs.
+    */
+   int getFetchSize() throws SQLException;
+ 
+   /**
+    * This method returns the result set type of this result set.  This will
+    * be one of the TYPE_* constants defined in this interface.
+    *
+    * @return The result set type.
+    * @exception SQLException If an error occurs.
+    */
+   int getType() throws SQLException;
+ 
+   /**
+    * This method returns the concurrency type of this result set.  This will
+    * be one of the CONCUR_* constants defined in this interface.
+    *
+    * @return The result set concurrency type.
+    * @exception SQLException If an error occurs.
+    */
+   int getConcurrency() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the current row in the result set
+    * has been updated.  Updates must be visible in order of this method to
+    * detect the update.
+    *
+    * @return <code>true</code> if the row has been updated, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean rowUpdated() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the current row in the result set
+    * has been inserted.  Inserts must be visible in order of this method to
+    * detect the insert.
+    *
+    * @return <code>true</code> if the row has been inserted, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean rowInserted() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the current row in the result set
+    * has been deleted.  Deletes must be visible in order of this method to
+    * detect the deletion.
+    *
+    * @return <code>true</code> if the row has been deleted, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean rowDeleted() throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a NULL value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @return index The index of the column to update.
+    * @exception SQLException If an error occurs.
+    */
+   void updateNull(int columnIndex) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a boolean value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateBoolean(int columnIndex, boolean x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a byte value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateByte(int columnIndex, byte x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a short value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateShort(int columnIndex, short x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have an int value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateInt(int columnIndex, int x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a long value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateLong(int columnIndex, long x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a float value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateFloat(int columnIndex, float x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a double value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateDouble(int columnIndex, double x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a BigDecimal value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateBigDecimal(int columnIndex, BigDecimal x)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a String value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateString(int columnIndex, String x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a byte array value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateBytes(int columnIndex, byte[] x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a java.sql.Date value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateDate(int columnIndex, Date x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a java.sql.Time value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateTime(int columnIndex, Time x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a java.sql.Timestamp value.  
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateTimestamp(int columnIndex, Timestamp x)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column from an ASCII text stream.
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @param length The length of the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void updateAsciiStream(int columnIndex, InputStream x, int length)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column from a binary stream.
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @param length The length of the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void updateBinaryStream(int columnIndex, InputStream x, int length)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column from a character stream.
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @param length The length of the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void updateCharacterStream(int columnIndex, Reader x, int length)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have an Object value.  
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void updateObject(int columnIndex, Object x, int scale)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have an Object value.  
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param index The index of the column to update.
+    * @param value The new value of the column.
+    * @param scale The scale of the object in question, which is used only
+    *        for numeric type objects.
+    * @exception SQLException If an error occurs.
+    */
+   void updateObject(int columnIndex, Object x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a NULL value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @return name The name of the column to update.
+    * @exception SQLException If an error occurs.
+    */
+   void updateNull(String columnName) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a boolean value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateBoolean(String columnName, boolean x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a byte value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateByte(String columnName, byte x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a short value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateShort(String columnName, short x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have an int value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateInt(String columnName, int x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a long value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateLong(String columnName, long x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a float value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateFloat(String columnName, float x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a double value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateDouble(String columnName, double x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a BigDecimal value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateBigDecimal(String columnName, BigDecimal x)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a String value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateString(String columnName, String x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a byte array value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateBytes(String columnName, byte[] x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a java.sql.Date value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateDate(String columnName, Date x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a java.sql.Time value.  This
+    * does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateTime(String columnName, Time x) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have a java.sql.Timestamp value.  
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateTimestamp(String columnName, Timestamp x)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column from an ASCII text stream.
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @param length The length of the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void updateAsciiStream(String columnName, InputStream x, int length)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column from a binary stream.
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @param length The length of the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void updateBinaryStream(String columnName, InputStream x, int length)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column from a character stream.
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @param length The length of the stream.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void updateCharacterStream(String columnName, Reader reader,
+     int length) throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have an Object value.  
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @exception SQLException If an error occurs.
+    */
+   void updateObject(String columnName, Object x, int scale)
+     throws SQLException;
+ 
+   /**
+    * This method updates the specified column to have an Object value.  
+    * This does not update the actual database.  <code>updateRow</code> must be
+    * called in order to do that.
+    *
+    * @param name The name of the column to update.
+    * @param value The new value of the column.
+    * @param scale The scale of the object in question, which is used only
+    *        for numeric type objects.
+    * @exception SQLException If an error occurs.
+    */
+   void updateObject(String columnName, Object x) throws SQLException;
+ 
+   /**
+    * This method inserts the current row into the database.  The result set
+    * must be positioned on the insert row in order to call this method
+    * successfully.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void insertRow() throws SQLException;
+ 
+   /**
+    * This method updates the current row in the database.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void updateRow() throws SQLException;
+ 
+   /**
+    * This method deletes the current row in the database.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void deleteRow() throws SQLException;
+ 
+   /**
+    * This method refreshes the contents of the current row from the database.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void refreshRow() throws SQLException;
+ 
+   /**
+    * This method cancels any changes that have been made to a row.  If 
+    * the <code>rowUpdate</code> method has been called, then the changes
+    * cannot be undone.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void cancelRowUpdates() throws SQLException;
+ 
+   /**
+    * This method positions the result set to the "insert row", which allows
+    * a new row to be inserted into the database from the result set.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void moveToInsertRow() throws SQLException;
+ 
+   /**
+    * This method moves the result set position from the insert row back to
+    * the current row that was selected prior to moving to the insert row.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void moveToCurrentRow() throws SQLException;
+ 
+   /**
+    * This method returns a the <code>Statement</code> that was used to
+    * produce this result set.
+    *
+    * @return The <code>Statement</code> used to produce this result set.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   Statement getStatement() throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>Object</code> using the specified SQL type to Java type map.
+    *
+    * @param index The index of the column to return.
+    * @param map The SQL type to Java type map to use.
+    * @return The value of the column as an <code>Object</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Object getObject(int i, Map map) throws SQLException;
+ 
+   /**
+    * This method returns a <code>Ref</code> for the specified column which
+    * represents the structured type for the column.
+    *
+    * @param index  The index of the column to return.
+    * @return A <code>Ref</code> object for the column
+    * @exception SQLException If an error occurs.
+    */
+   Ref getRef(int i) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a BLOB.
+    *
+    * @param index The index of the column value to return.
+    * @return The value of the column as a BLOB.
+    * @exception SQLException If an error occurs.
+    */
+   Blob getBlob(int i) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a CLOB.
+    *
+    * @param index The index of the column value to return.
+    * @return The value of the column as a CLOB.
+    * @exception SQLException If an error occurs.
+    */
+   Clob getClob(int i) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as an <code>Array</code>.
+    *
+    * @param index The index of the column value to return.
+    * @return The value of the column as an <code>Array</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Array getArray(int i) throws SQLException;
+ 
+   /**
+    * This method returns the value of the specified column as a Java
+    * <code>Object</code> using the specified SQL type to Java type map.
+    *
+    * @param name The name of the column to return.
+    * @param map The SQL type to Java type map to use.
+    * @return The value of the column as an <code>Object</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Object getObject(String colName, Map map) throws SQLException;
+ 
+   /**
+    * This method returns a <code>Ref</code> for the specified column which
+    * represents the structured type for the column.
+    *
+    * @param index  The index of the column to return.
+    * @return A <code>Ref</code> object for the column
+    * @exception SQLException If an error occurs.
+    */
+   Ref getRef(String colName) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a BLOB.
+    *
+    * @param name The name of the column value to return.
+    * @return The value of the column as a BLOB.
+    * @exception SQLException If an error occurs.
+    */
+   Blob getBlob(String colName) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a CLOB.
+    *
+    * @param name The name of the column value to return.
+    * @return The value of the column as a CLOB.
+    * @exception SQLException If an error occurs.
+    */
+   Clob getClob(String colName) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as an <code>Array</code>.
+    *
+    * @param name The name of the column value to return.
+    * @return The value of the column as an <code>Array</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Array getArray(String colName) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a 
+    * <code>java.sql.Date</code>.  The specified <code>Calendar</code> is used
+    * to generate a value for the date if the database does not support
+    * timezones.
+    *
+    * @param index The index of the column value to return.
+    * @param cal The <code>Calendar</code> to use for calculating timezones.
+    * @return The value of the column as a <code>java.sql.Date</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Date getDate(int columnIndex, Calendar cal) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a 
+    * <code>java.sql.Date</code>.  The specified <code>Calendar</code> is used
+    * to generate a value for the date if the database does not support
+    * timezones.
+    *
+    * @param name The name of the column value to return.
+    * @param cal The <code>Calendar</code> to use for calculating timezones.
+    * @return The value of the column as a <code>java.sql.Date</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Date getDate(String columnName, Calendar cal) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a 
+    * <code>java.sql.Time</code>.  The specified <code>Calendar</code> is used
+    * to generate a value for the time if the database does not support
+    * timezones.
+    *
+    * @param index The index of the column value to return.
+    * @param cal The <code>Calendar</code> to use for calculating timezones.
+    * @return The value of the column as a <code>java.sql.Time</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Time getTime(int columnIndex, Calendar cal) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a 
+    * <code>java.sql.Time</code>.  The specified <code>Calendar</code> is used
+    * to generate a value for the time if the database does not support
+    * timezones.
+    *
+    * @param name The name of the column value to return.
+    * @param cal The <code>Calendar</code> to use for calculating timezones.
+    * @return The value of the column as a <code>java.sql.Time</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Time getTime(String columnName, Calendar cal) throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a 
+    * <code>java.sql.Timestamp</code>.  The specified <code>Calendar</code> is used
+    * to generate a value for the timestamp if the database does not support
+    * timezones.
+    *
+    * @param index The index of the column value to return.
+    * @param cal The <code>Calendar</code> to use for calculating timezones.
+    * @return The value of the column as a <code>java.sql.Timestamp</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Timestamp getTimestamp(int columnIndex, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * This method returns the specified column value as a 
+    * <code>java.sql.Timestamp</code>.  The specified <code>Calendar</code> is used
+    * to generate a value for the timestamp if the database does not support
+    * timezones.
+    *
+    * @param name The name of the column value to return.
+    * @param cal The <code>Calendar</code> to use for calculating timezones.
+    *
+    * @return The value of the column as a <code>java.sql.Timestamp</code>.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   Timestamp getTimestamp(String columnName, Calendar cal)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   URL getURL(int columnIndex) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   URL getURL(String columnName) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void updateRef(int columnIndex, Ref x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void updateRef(String columnName, Ref x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void updateBlob(int columnIndex, Blob x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void updateBlob(String columnName, Blob x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void updateClob(int columnIndex, Clob x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void updateClob(String columnName, Clob x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void updateArray(int columnIndex, Array x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void updateArray(String columnName, Array x) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/ResultSetMetaData.java gcc-4.1.0/libjava/classpath/java/sql/ResultSetMetaData.java
*** gcc-4.0.2/libjava/classpath/java/sql/ResultSetMetaData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/ResultSetMetaData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,281 ----
+ /* ResultSetMetaData.java -- Returns information about the ResultSet
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ /**
+  * This interface provides a mechanism for obtaining information about
+  * the columns that are present in a <code>ResultSet</code>.
+  * <p>
+  * Note that in this class column indexes start at 1, not 0.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface ResultSetMetaData 
+ {
+   /**
+    * The column does not allow NULL's.
+    */
+   int columnNoNulls = 0;
+ 
+   /**
+    * The column allows NULL's.
+    */
+   int columnNullable = 1;
+ 
+   /**
+    * It is unknown whether or not the column allows NULL's.
+    */
+   int columnNullableUnknown = 2;
+ 
+   /**
+    * This method returns the number of columns in the result set.
+    *
+    * @return The number of columns in the result set.
+    * @exception SQLException If an error occurs.
+    */
+   int getColumnCount() throws SQLException;
+ 
+   /**
+    * This method test whether or not the column is an auto-increment column.
+    * Auto-increment columns are read-only.
+    *
+    * @param index The index of the column to test.
+    * @return <code>true</code> if the column is auto-increment, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isAutoIncrement(int column) throws SQLException;
+ 
+   /**
+    * This method tests whether or not a column is case sensitive in its values.
+    *
+    * @param index The index of the column to test.
+    * @return <code>true</code> if the column value is case sensitive,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isCaseSensitive(int column) throws SQLException;
+ 
+   /**
+    * This method tests whether not the specified column can be used in 
+    * a WHERE clause.
+    *
+    * @param index The index of the column to test.
+    * @return <code>true</code> if the column may be used in a WHERE clause,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isSearchable(int column) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the column stores a monetary value.
+    *
+    * @param index The index of the column to test.
+    * @return <code>true</code> if the column contains a monetary value,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isCurrency(int column) throws SQLException;
+ 
+   /**
+    * This method returns a value indicating whether or not the specified
+    * column may contain a NULL value.
+    *
+    * @param index The index of the column to test.
+    * @return A constant indicating whether or not the column can contain NULL,
+    *         which will be one of <code>columnNoNulls</code>,
+    *         <code>columnNullable</code>, or <code>columnNullableUnknown</code>.
+    * @exception SQLException If an error occurs.
+    */
+   int isNullable(int column) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the value of the specified column
+    * is signed or unsigned.
+    *
+    * @param index The index of the column to test.
+    * @return <code>true</code> if the column value is signed, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isSigned(int column) throws SQLException;
+ 
+   /**
+    * This method returns the maximum number of characters that can be used
+    * to display a value in this column.
+    *
+    * @param index The index of the column to check.
+    * @return The maximum number of characters that can be used to display a
+    *         value for this column.
+    * @exception SQLException If an error occurs.
+    */
+   int getColumnDisplaySize(int column) throws SQLException;
+ 
+   /**
+    * This method returns a string that should be used as a caption for this
+    * column for user display purposes.
+    *
+    * @param index The index of the column to check.
+    * @return A display string for the column.
+    * @exception SQLException If an error occurs.
+    */
+   String getColumnLabel(int column) throws SQLException;
+ 
+   /**
+    * This method returns the name of the specified column.
+    *
+    * @param index The index of the column to return the name of.
+    * @return The name of the column.
+    * @exception SQLException If an error occurs.
+    */
+   String getColumnName(int column) throws SQLException;
+ 
+   /**
+    * This method returns the name of the schema that contains the specified
+    * column.
+    *
+    * @param index The index of the column to check the schema name for.
+    * @return The name of the schema that contains the column.
+    * @exception SQLException If an error occurs.
+    */
+   String getSchemaName(int column) throws SQLException;
+ 
+   /**
+    * This method returns the precision of the specified column, which is the
+    * number of decimal digits it contains.
+    *
+    * @param index The index of the column to check the precision on.
+    * @return The precision of the specified column.
+    * @exception SQLException If an error occurs.
+    */
+   int getPrecision(int column) throws SQLException;
+ 
+   /**
+    * This method returns the scale of the specified column, which is the
+    * number of digits to the right of the decimal point.
+    *
+    * @param index The index column to check the scale of.
+    * @return The scale of the column.
+    * @exception SQLException If an error occurs.
+    */
+   int getScale(int column) throws SQLException;
+ 
+   /**
+    * This method returns the name of the table containing the specified
+    * column.
+    *
+    * @param index The index of the column to check the table name for.
+    * @return The name of the table containing the column.
+    * @exception SQLException If an error occurs.
+    */
+   String getTableName(int column) throws SQLException;
+ 
+   /**
+    * This method returns the name of the catalog containing the specified
+    * column.
+    *
+    * @param index The index of the column to check the catalog name for.
+    * @return The name of the catalog containing the column.
+    * @exception SQLException If an error occurs.
+    */
+   String getCatalogName(int column) throws SQLException;
+ 
+   /**
+    * This method returns the SQL type of the specified column.  This will
+    * be one of the constants from <code>Types</code>.
+    *
+    * @param index The index of the column to check the SQL type of.
+    * @return The SQL type for this column.
+    * @exception SQLException If an error occurs.
+    * @see Types
+    */
+   int getColumnType(int column) throws SQLException;
+ 
+   /**
+    * This method returns the name of the SQL type for this column.
+    *
+    * @param index The index of the column to check the SQL type name for.
+    * @return The name of the SQL type for this column.
+    * @exception SQLException If an error occurs.
+    */
+   String getColumnTypeName(int column) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the specified column is read only.
+    *
+    * @param index The index of the column to check.
+    * @return <code>true</code> if the column is read only, <code>false</code>
+    *         otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isReadOnly(int column) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the column may be writable.  This
+    * does not guarantee that a write will be successful.
+    *
+    * @param index The index of the column to check for writability.
+    * @return <code>true</code> if the column may be writable,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isWritable(int column) throws SQLException;
+ 
+   /**
+    * This method tests whether or not the column is writable.  This
+    * does guarantee that a write will be successful.
+    *
+    * @param index The index of the column to check for writability.
+    * @return <code>true</code> if the column is writable,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean isDefinitelyWritable(int column) throws SQLException;
+ 
+   /**
+    * This method returns the name of the Java class which will be used to
+    * create objects representing the data in this column.
+    *
+    * @param index The index of the column to check.
+    * @return The name of the Java class that will be used for values in
+    *         this column.
+    * @exception SQLException If an error occurs.
+    */
+   String getColumnClassName(int column) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/SQLData.java gcc-4.1.0/libjava/classpath/java/sql/SQLData.java
*** gcc-4.0.2/libjava/classpath/java/sql/SQLData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/SQLData.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* SQLData.java -- Custom mapping for a user defined datatype
+    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ /**
+  * This interface is used for mapping SQL data to user defined datatypes.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface SQLData 
+ {
+   /**
+    * This method returns the user defined datatype name for this object.
+    *
+    * @return The user defined data type name for this object.
+    * @exception SQLException If an error occurs.
+    */
+   String getSQLTypeName() throws SQLException;
+ 
+   /**
+    * This method populates the data in the object from the specified stream.
+    *
+    * @param stream The stream to read the data from.
+    * @param name The data type name of the data on the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void readSQL(SQLInput stream, String typeName) throws SQLException;
+ 
+   /**
+    * This method writes the data in this object to the specified stream.
+    *
+    * @param stream The stream to write the data to.
+    * @exception SQLException If an error occurs.
+    */
+   void writeSQL(SQLOutput stream) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/SQLException.java gcc-4.1.0/libjava/classpath/java/sql/SQLException.java
*** gcc-4.0.2/libjava/classpath/java/sql/SQLException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/SQLException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,167 ----
+ /* SQLException.java -- General SQL exception
+    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ /**
+  * This exception is thrown when a database error occurs.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class SQLException extends Exception 
+ {
+   static final long serialVersionUID = 2135244094396331484L;
+ 
+   /**
+    * This is the next exception in the chain
+    */
+   private SQLException next;
+ 
+   /**
+    * This is the state of the SQL statement at the time of the error.
+    */
+   private String SQLState;
+ 
+   /**
+    * The vendor error code for this error
+    */
+   private int vendorCode;
+ 
+   /**
+    * This method initializes a nwe instance of <code>SQLException</code>
+    * with the specified descriptive error message, SQL state string, and
+    * vendor code.
+    *
+    * @param message A string describing the nature of the error.
+    * @param SQLState A string containing the SQL state of the error.
+    * @param vendorCode The vendor error code associated with this error.
+    */
+   public SQLException(String message, String SQLState, int vendorCode)
+   {
+     super(message);
+     this.SQLState = SQLState;
+     this.vendorCode = vendorCode;  
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>SQLException</code>
+    * with the specified descriptive error message and SQL state string.
+    * The vendor error code of this instance will be 0.
+    *
+    * @param message A string describing the nature of the error.
+    * @param SQLState A string containing the SQL state of the error.
+    */
+   public SQLException(String message, String SQLState)
+   {
+     this(message, SQLState, 0);
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>SQLException</code>
+    * with the specified descriptive error message.  The SQL state of this
+    * instance will be <code>null</code> and the vendor error code will be 0.
+    *
+    * @param message A string describing the nature of the error.
+    */
+   public SQLException(String message)
+   {
+     this(message, null, 0);  
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>SQLException</code>
+    * that does not have a descriptive messages and SQL state, and which
+    * has a vendor error code of 0.
+    */
+   public SQLException()
+   {
+     this(null, null, 0);  
+   }
+ 
+   /**
+    * This method returns the SQLState information associated with this
+    * error.  The value returned is a <code>String</code> which is formatted
+    * using the XOPEN SQL state conventions.
+    *
+    * @return The SQL state, which may be <code>null</code>.
+    */
+   public String getSQLState()
+   {
+     return SQLState;
+   }
+ 
+   /**
+    * This method returns the vendor specific error code associated with 
+    * this error.
+    *
+    * @return The vendor specific error code associated with this error.
+    */
+   public int getErrorCode()
+   {
+     return vendorCode;
+   }
+ 
+   /**
+    * This method returns the exception that is chained to this object.
+    *
+    * @return The exception chained to this object, which may be 
+    *         <code>null</code>.
+    */
+   public SQLException getNextException()
+   {
+     return next;
+   }
+ 
+   /**
+    * This method adds a new exception to the end of the chain of exceptions
+    * that are chained to this object.
+    *
+    * @param e The exception to add to the end of the chain.
+    */
+   public void setNextException(SQLException e)
+   {
+     if (e == null)
+       return;
+ 
+     SQLException list_entry = this;
+     while (list_entry.getNextException() != null)
+       list_entry = list_entry.getNextException();
+ 
+     list_entry.next = e;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/SQLInput.java gcc-4.1.0/libjava/classpath/java/sql/SQLInput.java
*** gcc-4.0.2/libjava/classpath/java/sql/SQLInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/SQLInput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,259 ----
+ /* SQLInput.java -- Read SQL values from a stream
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ import java.io.InputStream;
+ import java.io.Reader;
+ import java.math.BigDecimal;
+ import java.net.URL;
+ 
+ /**
+  * This interface provides methods for reading values from a stream
+  * that is connected to a SQL structured or distinct type.  It is used
+  * for custom mapping of user defined data types.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface SQLInput 
+ {
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>String</code>.
+    *
+    * @return The value read from the stream as a <code>String</code>.
+    * @exception SQLException If an error occurs.
+    */
+   String readString() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>boolean</code>.
+    *
+    * @return The value read from the stream as a <code>boolean</code>.
+    * @exception SQLException If an error occurs.
+    */
+   boolean readBoolean() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>byte</code>.
+    *
+    * @return The value read from the stream as a <code>byte</code>.
+    * @exception SQLException If an error occurs.
+    */
+   byte readByte() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>short</code>.
+    *
+    * @return The value read from the stream as a <code>short</code>.
+    * @exception SQLException If an error occurs.
+    */
+   short readShort() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>int</code>.
+    *
+    * @return The value read from the stream as an <code>int</code>.
+    * @exception SQLException If an error occurs.
+    */
+   int readInt() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>long</code>.
+    *
+    * @return The value read from the stream as a <code>long</code>.
+    * @exception SQLException If an error occurs.
+    */
+   long readLong() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>float</code>.
+    *
+    * @return The value read from the stream as a <code>float</code>.
+    * @exception SQLException If an error occurs.
+    */
+   float readFloat() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>double</code>.
+    *
+    * @return The value read from the stream as a <code>double</code>.
+    * @exception SQLException If an error occurs.
+    */
+   double readDouble() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>BigDecimal</code>.
+    *
+    * @return The value read from the stream as a <code>BigDecimal</code>.
+    * @exception SQLException If an error occurs.
+    */
+   BigDecimal readBigDecimal() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * byte array
+    *
+    * @return The value read from the stream as a byte array. 
+    * @exception SQLException If an error occurs.
+    */
+   byte[] readBytes() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>java.sql.Date</code>.
+    *
+    * @return The value read from the stream as a <code>java.sql.Date</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Date readDate() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>java.sql.Time</code>.
+    *
+    * @return The value read from the stream as a <code>java.sql.Time</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Time readTime() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>java.sql.Timestamp</code>.
+    *
+    * @return The value read from the stream as a <code>java.sql.Timestamp</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Timestamp readTimestamp() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a character
+    * <code>Reader</code>.
+    *
+    * @return The value read from the stream as a <code>Reader</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Reader readCharacterStream() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a ASCII text
+    * <code>InputStream</code>.
+    *
+    * @return The value read from the stream as an <code>InputStream</code>.
+    * @exception SQLException If an error occurs.
+    */
+   InputStream readAsciiStream() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a binary
+    * <code>InputStream</code>.
+    *
+    * @return The value read from the stream as an <code>InputStream</code>.
+    * @exception SQLException If an error occurs.
+    */
+   InputStream readBinaryStream() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java
+    * <code>Object</code>.
+    *
+    * @return The value read from the stream as an <code>Object</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Object readObject() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java SQL
+    * <code>Ref</code>.
+    *
+    * @return The value read from the stream as an <code>Ref</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Ref readRef() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java SQL
+    * <code>Blob</code>.
+    *
+    * @return The value read from the stream as a <code>Blob</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Blob readBlob() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java SQL
+    * <code>Clob</code>.
+    *
+    * @return The value read from the stream as a <code>Clob</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Clob readClob() throws SQLException;
+ 
+   /**
+    * This method reads the next item from the stream a Java SQL
+    * <code>Array</code>.
+    *
+    * @return The value read from the stream as an <code>Array</code>.
+    * @exception SQLException If an error occurs.
+    */
+   Array readArray() throws SQLException;
+ 
+   /**
+    * This method tests whether or not the last value read was a SQL
+    * NULL value.
+    *
+    * @return <code>true</code> if the last value read was a NULL,
+    *         <code>false</code> otherwise.
+    * @exception SQLException If an error occurs.
+    */
+   boolean wasNull() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   URL readURL() throws SQLException;
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/SQLOutput.java gcc-4.1.0/libjava/classpath/java/sql/SQLOutput.java
*** gcc-4.0.2/libjava/classpath/java/sql/SQLOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/SQLOutput.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,257 ----
+ /* SQLOutput.java -- Write SQL values to a stream
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ import java.io.InputStream;
+ import java.io.Reader;
+ import java.math.BigDecimal;
+ import java.net.URL;
+ 
+ /**
+  * This interface provides methods for writing Java types to a SQL stream.
+  * It is used for implemented custom type mappings for user defined data
+  * types.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface SQLOutput 
+ {
+   /**
+    * This method writes the specified Java <code>String</code>
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeString(String x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>boolean</code>
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeBoolean(boolean x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>byte</code>
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeByte(byte x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>short</code>
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeShort(short x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>int</code>
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeInt(int x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>long</code>
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeLong(long x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>float</code>
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeFloat(float x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>double</code>
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeDouble(double x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>BigDecimal</code>
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeBigDecimal(BigDecimal x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>byte</code> array
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeBytes(byte[] x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>java.sql.Date</code> 
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeDate(Date x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>java.sql.Time</code> 
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeTime(Time x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>java.sql.Timestamp</code> 
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeTimestamp(Timestamp x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java character stream
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeCharacterStream(Reader x) throws SQLException;
+ 
+   /**
+    * This method writes the specified ASCII text stream
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeAsciiStream(InputStream x) throws SQLException;
+ 
+   /**
+    * This method writes the specified uninterpreted binary byte stream
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeBinaryStream(InputStream x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java <code>SQLData</code> object
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeObject(SQLData x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java SQL <code>Ref</code> object
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeRef(Ref x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java SQL <code>Blob</code> object
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeBlob(Blob x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java SQL <code>Clob</code> object
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeClob(Clob x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java SQL <code>Struct</code> object
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeStruct(Struct x) throws SQLException;
+ 
+   /**
+    * This method writes the specified Java SQL <code>Array</code> object
+    * to the SQL stream.
+    *
+    * @param value The value to write to the stream.
+    * @exception SQLException If an error occurs.
+    */
+   void writeArray(Array x) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   void writeURL(URL x) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/SQLPermission.java gcc-4.1.0/libjava/classpath/java/sql/SQLPermission.java
*** gcc-4.0.2/libjava/classpath/java/sql/SQLPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/SQLPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,57 ----
+ /* SQLPermission.java
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ import java.security.BasicPermission;
+ 
+ /**
+  * @since 1.3
+  */
+ public final class SQLPermission extends BasicPermission 
+ {
+   public SQLPermission(String name)
+   {
+     super(name);
+   }
+ 
+   public SQLPermission(String name, String actions)
+   {
+     super(name, actions);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/SQLWarning.java gcc-4.1.0/libjava/classpath/java/sql/SQLWarning.java
*** gcc-4.0.2/libjava/classpath/java/sql/SQLWarning.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/SQLWarning.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,120 ----
+ /* SQLWarning.java -- Database access warnings.
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ /**
+  * This exception is thrown when a database warning occurs.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class SQLWarning extends SQLException 
+ {
+   static final long serialVersionUID = 3917336774604784856L;
+ 
+   /**
+    * This method initializes a nwe instance of <code>SQLWarning</code>
+    * with the specified descriptive error message, SQL state string, and
+    * vendor code.
+    *
+    * @param message A string describing the nature of the error.
+    * @param SQLState A string containing the SQL state of the error.
+    * @param vendorCode The vendor error code associated with this error.
+    */
+   public SQLWarning(String reason, String SQLState, int vendorCode)
+   {
+     super(reason, SQLState, vendorCode);
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>SQLWarning</code>
+    * with the specified descriptive error message and SQL state string.
+    * The vendor error code of this instance will be 0.
+    *
+    * @param message A string describing the nature of the error.
+    * @param SQLState A string containing the SQL state of the error.
+    */
+   public SQLWarning(String message, String SQLState)
+   {
+     super(message, SQLState);
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>SQLWarning</code>
+    * with the specified descriptive error message.  The SQL state of this
+    * instance will be <code>null</code> and the vendor error code will be 0.
+    *
+    * @param message A string describing the nature of the error.
+    */
+   public SQLWarning(String message)
+   {
+     super(message);
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>SQLWarning</code>
+    * that does not have a descriptive messages and SQL state, and which
+    * has a vendor error code of 0.
+    */
+   public SQLWarning()
+   {
+     super();
+   }
+ 
+   /**
+    * This method returns the exception that is chained to this object.
+    *
+    * @return The exception chained to this object, which may be 
+    *         <code>null</code>.
+    */
+   public SQLWarning getNextWarning()
+   {
+     return (SQLWarning) super.getNextException();
+   }
+ 
+   /**
+    * This method adds a new exception to the end of the chain of exceptions
+    * that are chained to this object.
+    *
+    * @param w The exception to add to the end of the chain.
+    */
+   public void setNextWarning(SQLWarning w)
+   {
+     super.setNextException(w);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Savepoint.java gcc-4.1.0/libjava/classpath/java/sql/Savepoint.java
*** gcc-4.0.2/libjava/classpath/java/sql/Savepoint.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Savepoint.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,55 ----
+ /* SavePoint.java -- Returns information about the ResultSet
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ /**
+  * @since 1.4
+  */
+ public interface Savepoint 
+ {
+   /**
+    * @since 1.4
+    */
+   int getSavepointId() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   String getSavepointName() throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Statement.java gcc-4.1.0/libjava/classpath/java/sql/Statement.java
*** gcc-4.0.2/libjava/classpath/java/sql/Statement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Statement.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,366 ----
+ /* Statement.java -- Interface for executing SQL statements.
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ /**
+  * This interface provides a mechanism for executing SQL statements.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Statement 
+ {
+   int CLOSE_CURRENT_RESULT = 1;
+   int KEEP_CURRENT_RESULT = 2;
+   int CLOSE_ALL_RESULTS = 3;
+   int SUCCESS_NO_INFO = -2;
+   int EXECUTE_FAILED = -3;
+   int RETURN_GENERATED_KEYS = 1;
+   int NO_GENERATED_KEYS = 2;
+ 
+   /**
+    * This method executes the specified SQL SELECT statement and returns a
+    * (possibly empty) <code>ResultSet</code> with the results of the query.
+    *
+    * @param sql The SQL statement to execute.
+    * @return The result set of the SQL statement.
+    * @exception SQLException If an error occurs.
+    */
+   ResultSet executeQuery(String sql) throws SQLException;
+ 
+   /**
+    * This method executes the specified SQL INSERT, UPDATE, or DELETE statement
+    * and returns the number of rows affected, which may be 0.
+    * 
+    * @param sql The SQL statement to execute.
+    * @return The number of rows affected by the SQL statement.
+    * @exception SQLException If an error occurs.
+    */
+   int executeUpdate(String sql) throws SQLException;
+ 
+   /**
+    * This method closes the statement and frees any associated resources.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void close() throws SQLException;
+ 
+   /**
+    * This method returns the maximum length of any column value in bytes.
+    *
+    * @return The maximum length of any column value in bytes.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxFieldSize() throws SQLException;
+ 
+   /**
+    * This method sets the limit for the maximum length of any column in bytes.
+    *
+    * @param maxsize The new maximum length of any column in bytes.
+    * @exception SQLException If an error occurs.
+    */
+   void setMaxFieldSize(int max) throws SQLException;
+ 
+   /**
+    * This method returns the maximum possible number of rows in a result set.
+    *
+    * @return The maximum possible number of rows in a result set.
+    * @exception SQLException If an error occurs.
+    */
+   int getMaxRows() throws SQLException;
+ 
+   /**
+    * This method sets the maximum number of rows that can be present in a
+    * result set.
+    *
+    * @param maxrows The maximum possible number of rows in a result set.
+    * @exception SQLException If an error occurs.
+    */
+   void setMaxRows(int max) throws SQLException;
+ 
+   /**
+    * This method sets the local escape processing mode on or off.  The
+    * default value is on.
+    *
+    * @param escape <code>true</code> to enable local escape processing, 
+    *        <code>false</code> to disable it.
+    * @exception SQLException If an error occurs.
+    */
+   void setEscapeProcessing(boolean enable) throws SQLException;
+ 
+   /**
+    * The method returns the number of seconds a statement may be in process
+    * before timing out.  A value of 0 means there is no timeout.
+    *
+    * @return The SQL statement timeout in seconds.
+    * @exception SQLException If an error occurs.
+    */
+   int getQueryTimeout() throws SQLException;
+ 
+   /**
+    * This method sets the number of seconds a statement may be in process
+    * before timing out.  A value of 0 means there is no timeout.
+    *
+    * @param timeout The new SQL statement timeout value.
+    * @exception SQLException If an error occurs.
+    */
+   void setQueryTimeout(int seconds) throws SQLException;
+ 
+   /**
+    * This method cancels an outstanding statement, if the database supports
+    * that operation.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void cancel() throws SQLException;
+ 
+   /**
+    * This method returns the first SQL warning attached to this statement.
+    * Subsequent warnings will be chained to this one.
+    *
+    * @return The first SQL warning for this statement.
+    * @exception SQLException If an error occurs.
+    */
+   SQLWarning getWarnings() throws SQLException;
+ 
+   /**
+    * This method clears any SQL warnings that have been attached to this
+    * statement.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void clearWarnings() throws SQLException;
+ 
+   /**
+    * This method sets the cursor name that will be used by the result set.
+    *
+    * @param name The cursor name to use for this statement.
+    * @exception SQLException If an error occurs.
+    */
+   void setCursorName(String name) throws SQLException;
+ 
+   /**
+    * This method executes an arbitrary SQL statement of any time.  The
+    * methods <code>getResultSet</code>, <code>getMoreResults</code> and
+    * <code>getUpdateCount</code> retrieve the results.
+    *
+    * @return <code>true</code> if a result set was returned, <code>false</code>
+    *         if an update count was returned.
+    * @exception SQLException If an error occurs.
+    */
+   boolean execute(String sql) throws SQLException;
+ 
+   /**
+    * This method returns the result set of the SQL statement that was
+    * executed.  This should be called only once per result set returned.
+    *
+    * @return The result set of the query, or <code>null</code> if there was
+    *         no result set (for example, if the statement was an UPDATE).
+    * @exception SQLException If an error occurs.
+    * @see execute
+    */
+   ResultSet getResultSet() throws SQLException;
+ 
+   /**
+    * This method returns the update count of the SQL statement that was
+    * executed.  This should be called only once per executed SQL statement.
+    *
+    * @return The update count of the query, or -1 if there was no update
+    *         count (for example, if the statement was a SELECT).
+    * @exception SQLException If an error occurs.
+    * @see execute
+    */
+   int getUpdateCount() throws SQLException;
+ 
+   /**
+    * This method advances the result set pointer to the next result set, 
+    * which can then be retrieved using <code>getResultSet</code>
+    *
+    * @return <code>true</code> if there is another result set, 
+    *         <code>false</code> otherwise (for example, the next result is an
+    *         update count).
+    * @exception SQLException If an error occurs.
+    * @see execute
+    */
+   boolean getMoreResults() throws SQLException;
+ 
+   /**
+    * This method informs the driver which direction the result set will
+    * be accessed in.
+    *
+    * @param direction The direction the result set will be accessed in (?????)
+    * @exception SQLException If an error occurs.
+    */
+   void setFetchDirection(int direction) throws SQLException;
+ 
+   /**
+    * This method returns the current direction that the driver thinks the
+    * result set will be accessed int.
+    *
+    * @return The direction the result set will be accessed in (????)
+    * @exception SQLException If an error occurs.
+    */
+   int getFetchDirection() throws SQLException;
+ 
+   /**
+    * This method informs the driver how many rows it should fetch from the
+    * database at a time.
+    *
+    * @param numrows The number of rows the driver should fetch at a time
+    *        to populate the result set.
+    * @exception SQLException If an error occurs.
+    */
+   void setFetchSize(int rows) throws SQLException;
+ 
+   /**
+    * This method returns the number of rows the driver believes should be
+    * fetched from the database at a time.
+    *
+    * @return The number of rows that will be fetched from the database at a time.
+    * @exception SQLException If an error occurs.
+    */
+   int getFetchSize() throws SQLException;
+ 
+   /**
+    * This method returns the concurrency type of the result set for this
+    * statement. This will be one of the concurrency types defined in
+    * <code>ResultSet</code>.
+    *
+    * @return The concurrency type of the result set for this statement.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   int getResultSetConcurrency() throws SQLException;
+ 
+   /**
+    * This method returns the result set type for this statement.  This will
+    * be one of the result set types defined in <code>ResultSet</code>.
+    *
+    * @return The result set type for this statement.
+    * @exception SQLException If an error occurs.
+    * @see ResultSet
+    */
+   int getResultSetType() throws SQLException;
+ 
+   /**
+    * This method adds a SQL statement to a SQL batch.  A driver is not
+    * required to implement this method.
+    *
+    * @param sql The sql statement to add to the batch.
+    * @exception SQLException If an error occurs.
+    */
+   void addBatch(String sql) throws SQLException;
+ 
+   /**
+    * This method clears out any SQL statements that have been populated in
+    * the current batch.  A driver is not required to implement this method.
+    *
+    * @exception SQLException If an error occurs.
+    */
+   void clearBatch() throws SQLException;
+ 
+   /**
+    * This method executes the SQL batch and returns an array of update
+    * counts - one for each SQL statement in the batch - ordered in the same
+    * order the statements were added to the batch.  A driver is not required
+    * to implement this method.
+    *
+    * @return An array of update counts for this batch.
+    * @exception SQLException If an error occurs.
+    */
+   int[] executeBatch() throws SQLException;
+ 
+   /**
+    * This method returns the <code>Connection</code> instance that was
+    * used to create this object.
+    *
+    * @return The connection used to create this object.
+    * @exception SQLException If an error occurs.
+    */
+   Connection getConnection() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean getMoreResults(int current) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   ResultSet getGeneratedKeys() throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int executeUpdate(String sql, int autoGeneratedKeys)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int executeUpdate(String sql, int[] columnIndexes)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int executeUpdate(String sql, String[] columnNames)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean execute(String sql, int autoGeneratedKeys)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean execute(String sql, int[] columnIndexes) throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   boolean execute(String sql, String[] columnNames)
+     throws SQLException;
+ 
+   /**
+    * @since 1.4
+    */
+   int getResultSetHoldability() throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Struct.java gcc-4.1.0/libjava/classpath/java/sql/Struct.java
*** gcc-4.0.2/libjava/classpath/java/sql/Struct.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Struct.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* Struct.java -- Mapping for a SQL structured type.
+    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ import java.util.Map;
+ 
+ /**
+  * This interface implements the standard type mapping for a SQL 
+  * structured type.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface Struct 
+ {
+   /**
+    * This method returns the name of the SQL structured type for this
+    * object.
+    *
+    * @return The SQL structured type name.
+    * @exception SQLException If an error occurs.
+    */
+   String getSQLTypeName() throws SQLException;
+ 
+   /**
+    * This method returns the attributes of this SQL structured type.
+    *
+    * @return The attributes of this structure type.
+    * @exception SQLException If an error occurs.
+    */
+   Object[] getAttributes() throws SQLException;
+ 
+   /**
+    * This method returns the attributes of this SQL structured type.
+    * The specified map of type mappings overrides the default mappings.
+    *
+    * @param map The map of SQL type mappings.
+    * @return The attributes of this structure type.
+    * @exception SQLException If a error occurs.
+    */
+   Object[] getAttributes(Map map) throws SQLException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Time.java gcc-4.1.0/libjava/classpath/java/sql/Time.java
*** gcc-4.0.2/libjava/classpath/java/sql/Time.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Time.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,201 ----
+ /* Time.java -- Wrapper around java.util.Date
+    Copyright (C) 1999, 2000, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ import java.text.ParseException;
+ import java.text.SimpleDateFormat;
+ 
+ /**
+  * This class is a wrapper around java.util.Date to allow the JDBC
+  * driver to identify the value as a SQL Time.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class Time extends java.util.Date
+ {
+   static final long serialVersionUID = 8397324403548013681L;
+ 
+   /**
+    * Used for parsing and formatting this date.
+    */
+   private static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public int getDate() throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public int getDay() throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public int getMonth() throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public int getYear() throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public void setDate(int newValue) throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public void setMonth(int newValue) throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method always throws an IllegalArgumentException.
+    *
+    * @throws IllegalArgumentException when it's called.
+    * @deprecated
+    */
+   public void setYear(int newValue) throws IllegalArgumentException
+   {
+     throw new IllegalArgumentException();
+   }
+ 
+   /**
+    * This method returns a new instance of this class by parsing a
+    * date in JDBC format into a Java date.
+    *
+    * @param str The string to parse.
+    * @return The resulting <code>java.sql.Time</code> value.
+    */
+   public static Time valueOf (String str)
+   {
+     try
+       {
+ 	java.util.Date d = (java.util.Date) sdf.parseObject(str);
+ 
+ 	if (d == null)
+ 	  throw new IllegalArgumentException(str);
+ 	else
+ 	  return new Time(d.getTime());
+       }
+     catch (ParseException e)
+       {
+ 	throw new IllegalArgumentException(str);
+       }
+   }
+ 
+   /**
+     * This method initializes a new instance of this class with the
+     * specified year, month, and day.
+     *
+     * @param hour The hour for this Time (0-23)
+     * @param minute The minute for this time (0-59)
+     * @param second The second for this time (0-59)
+     * @deprecated
+     */
+   public Time(int hour, int minute, int second)
+   {
+     super(System.currentTimeMillis());
+ 
+     setHours(hour);
+     setMinutes(minute);
+     setSeconds(second);
+   }
+ 
+   /**
+    * This method initializes a new instance of this class with the
+    * specified time value representing the number of seconds since 
+    * Jan 1, 1970 at 12:00 midnight GMT.
+    *
+    * @param time The time value to intialize this <code>Time</code> to.
+    */
+   public Time(long date)
+   {
+     super(date);
+   }
+ 
+   /**
+    * This method returns this date in JDBC format.
+    *
+    * @return This date as a string.
+    */
+   public String toString ()
+   {
+     return sdf.format (this);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Timestamp.java gcc-4.1.0/libjava/classpath/java/sql/Timestamp.java
*** gcc-4.0.2/libjava/classpath/java/sql/Timestamp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Timestamp.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,315 ----
+ /* Time.java -- Wrapper around java.util.Date
+    Copyright (C) 1999, 2000, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ import java.text.DecimalFormat;
+ import java.text.ParseException;
+ import java.text.SimpleDateFormat;
+ 
+ /**
+  * This class is a wrapper around java.util.Date to allow the JDBC
+  * driver to identify the value as a SQL Timestamp.  Note that this
+  * class also adds an additional field for nano-seconds, and so 
+  * is not completely identical to <code>java.util.Date</code> as
+  * the <code>java.sql.Date</code> and <code>java.sql.Time</code>
+  * classes are.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class Timestamp extends java.util.Date
+ {
+   static final long serialVersionUID = 2745179027874758501L;
+ 
+   /**
+    * Used for parsing and formatting this date.
+    */
+   private static SimpleDateFormat dateFormat =
+     new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+   private static DecimalFormat decimalFormat = new DecimalFormat("000000000");
+   private static StringBuffer sbuf = new StringBuffer(29);
+ 
+   /**
+     * The nanosecond value for this object
+     */
+   private int nanos;
+ 
+   /**
+    * This method returns a new instance of this class by parsing a
+    * date in JDBC format into a Java date.
+    *
+    * @param str The string to parse.
+    * @return The resulting <code>java.sql.Timestamp</code> value. 
+    */
+   public static Timestamp valueOf(String str)
+   {
+     int nanos = 0;
+     int dot = str.indexOf('.');
+     if (dot != -1)
+       {
+ 	if (str.lastIndexOf('.') != dot)
+ 	  throw new IllegalArgumentException(str);
+ 
+ 	int len = str.length() - dot - 1;
+ 	if (len < 1 || len > 9)
+ 	  throw new IllegalArgumentException(str);
+ 
+ 	nanos = Integer.parseInt(str.substring(dot + 1));
+ 	for (int i = len; i < 9; i++)
+ 	  nanos *= 10;
+ 	
+ 	str = str.substring(0, dot);
+ 
+       }
+ 
+     try
+       {
+         java.util.Date d;
+         synchronized (dateFormat)
+ 	  {
+ 	    d = (java.util.Date) dateFormat.parseObject(str);
+ 	  }
+ 
+ 	if (d == null)
+ 	  throw new IllegalArgumentException(str);
+ 
+ 	Timestamp ts = new Timestamp(d.getTime() + nanos / 1000000);
+ 	ts.nanos = nanos;
+ 	return ts;
+       }
+     catch (ParseException e)
+       {
+ 	throw new IllegalArgumentException(str);
+       }
+   }
+ 
+   /**
+    * This method initializes a new instance of this class with the
+    * specified year, month, and day.
+    *
+    * @param year The year for this Timestamp (year - 1900)
+    * @param month The month for this Timestamp (0-11)
+    * @param day The day for this Timestamp (1-31)
+    * @param hour The hour for this Timestamp (0-23)
+    * @param minute The minute for this Timestamp (0-59)
+    * @param second The second for this Timestamp (0-59)
+    * @param nanos The nanosecond value for this Timestamp (0 to 999,999,9999)
+    * @deprecated
+    */
+   public Timestamp(int year, int month, int day, int hour, int minute, 
+     int second, int nanos)
+   {
+     super(year, month, day, hour, minute, second);
+     this.nanos = nanos;
+   }
+ 
+   /**
+    * This method initializes a new instance of this class with the
+    * specified time value representing the number of milliseconds since 
+    * Jan 1, 1970 at 12:00 midnight GMT.
+    *
+    * @param time The time value to intialize this <code>Time</code> to.
+    */
+   public Timestamp(long date)
+   {
+     super(date - (date % 1000));
+     nanos = (int) (date % 1000) * 1000000;
+   }
+ 
+   /**
+    * Return the value of this Timestamp as the number of milliseconds 
+    * since Jan 1, 1970 at 12:00 midnight GMT.
+    */
+   public long getTime()
+   {
+     return super.getTime() + (nanos / 1000000);
+   }
+ 
+   /**
+    * This method returns this date in JDBC format.
+    *
+    * @return This date as a string.
+    */
+   public String toString()
+   {
+     synchronized (dateFormat)
+       {
+         sbuf.setLength(0);
+ 	dateFormat.format(this, sbuf, null);
+ 	sbuf.append('.');
+ 	decimalFormat.format(nanos, sbuf, null);
+ 	int end = sbuf.length() - 1;
+ 	while (end > 20 && sbuf.charAt(end) == '0')
+ 	  end--;
+ 	return sbuf.substring(0, end + 1);
+       }
+   }
+ 
+   /**
+     * This method returns the nanosecond value for this object.
+     * @return The nanosecond value for this object.
+     */
+   public int getNanos()
+   {
+     return nanos;
+   }
+ 
+   /**
+    * This method sets the nanosecond value for this object.
+    *
+    * @param nanos The nanosecond value for this object.
+    */
+   public void setNanos(int nanos)
+   {
+     this.nanos = nanos;
+   }
+ 
+   /**
+    * This methods tests whether this object is earlier than the specified
+    * object.
+    *
+    * @param ts The other <code>Timestamp</code> to test against.
+    * @return <code>true</code> if this object is earlier than the other object,
+    *         <code>false</code> otherwise.
+    */
+   public boolean before(Timestamp ts)
+   {
+     long time1 = getTime();
+     long time2 = ts.getTime();
+     if (time1 < time2 || (time1 == time2 && getNanos() < ts.getNanos()))
+       return true;
+     return false;
+   }
+ 
+   /**
+    * This methods tests whether this object is later than the specified
+    * object.
+    *
+    * @param ts The other <code>Timestamp</code> to test against.
+    *
+    * @return <code>true</code> if this object is later than the other object,
+    * <code>false</code> otherwise.
+    */
+   public boolean after(Timestamp ts)
+   {
+     long time1 = getTime();
+     long time2 = ts.getTime();
+     if (time1 > time2 || (time1 == time2 && getNanos() > ts.getNanos()))
+       return true;
+     return false;
+   }
+ 
+   /**
+    * This method these the specified <code>Object</code> for equality
+    * against this object.  This will be true if an only if the specified
+    * object is an instance of <code>Timestamp</code> and has the same
+    * time value fields.
+    *
+    * @param obj The object to test against for equality.
+    *
+    * @return <code>true</code> if the specified object is equal to this
+    * object, <code>false</code> otherwise.
+    */
+   public boolean equals(Object obj)
+   {
+     if (!(obj instanceof Timestamp))
+       return false;
+ 
+     return equals((Timestamp) obj);
+   }
+ 
+   /**
+    * This method tests the specified timestamp for equality against this
+    * object.  This will be true if and only if the specified object is
+    * not <code>null</code> and contains all the same time value fields
+    * as this object.
+    *
+    * @param ts The <code>Timestamp</code> to test against for equality.
+    *
+    * @return <code>true</code> if the specified object is equal to this
+    * object, <code>false</code> otherwise.
+    */
+   public boolean equals(Timestamp ts)
+   {
+     if (ts == null)
+       return false;
+ 
+     if (ts.getTime() != getTime())
+       return false;
+ 
+     if (ts.getNanos() != getNanos())
+       return false;
+ 
+     return true;
+   }
+ 
+   /**
+    * Compare two Timestamp
+    * @param when the other Timestamp.
+    * @return 0, if the date represented
+    * by obj is exactly the same as the time represented by this
+    * object, a negative if this Timestamp is before the other Timestamp, and
+    * a positive value otherwise.  
+    * @since 1.2
+    */
+   public int compareTo(Timestamp ts)
+   {
+     int s = super.compareTo((java.util.Date) ts);
+     if (s != 0)
+       return s;
+     // If Date components were equal, then we check the nanoseconds.
+     return nanos - ts.nanos;
+   }
+ 
+   /**
+    * Compares this Timestamp to another.  This behaves like
+    * <code>compareTo(Timestamp)</code>, but it may throw a
+    * <code>ClassCastException</code>
+    * @param obj the other Timestamp.
+    * @return 0, if the Timestamp represented
+    * by obj is exactly the same as the time represented by this
+    * object, a negative if this Timestamp is before the other Timestamp, and
+    * a positive value otherwise.  
+    * @exception ClassCastException if obj is not of type Timestamp.
+    * @since 1.2
+    */
+   public int compareTo(Object obj)
+   {
+     return compareTo((Timestamp) obj);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/Types.java gcc-4.1.0/libjava/classpath/java/sql/Types.java
*** gcc-4.0.2/libjava/classpath/java/sql/Types.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/Types.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* Types.java -- SQL type constants
+    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.sql;
+ 
+ /**
+  * This class contains constants that are used to identify SQL data types.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class Types 
+ {
+   // These should be self explanatory.  People need a SQL book, not
+   // Javadoc comments for these.
+   public static final int BIT = -7;
+   public static final int TINYINT = -6;
+   public static final int SMALLINT = 5;
+   public static final int INTEGER = 4;
+   public static final int BIGINT = -5;
+   public static final int FLOAT = 6;
+   public static final int REAL = 7;
+   public static final int DOUBLE = 8;
+   public static final int NUMERIC = 2;
+   public static final int DECIMAL = 3;
+   public static final int CHAR = 1;
+   public static final int VARCHAR = 12;
+   public static final int LONGVARCHAR = -1;
+   public static final int DATE = 91;
+   public static final int TIME = 92;
+   public static final int TIMESTAMP = 93;
+   public static final int BINARY = -2;
+   public static final int VARBINARY = -3;
+   public static final int LONGVARBINARY = -4;
+   public static final int NULL = 0;
+   public static final int OTHER = 1111;
+   public static final int JAVA_OBJECT = 2000;
+   public static final int DISTINCT = 2001;
+   public static final int STRUCT = 2002;
+   public static final int ARRAY = 2003;
+   public static final int BLOB = 2004;
+   public static final int CLOB = 2005;
+   public static final int REF = 2006;
+   public static final int DATALINK = 70;
+   public static final int BOOLEAN = 16;
+ 
+   // This class can't be instantiated.
+   private Types()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/sql/package.html gcc-4.1.0/libjava/classpath/java/sql/package.html
*** gcc-4.0.2/libjava/classpath/java/sql/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/sql/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.sql package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.sql</title></head>
+ 
+ <body>
+ <p>Interfaces and classes to connect to a database and wrappers for data
+ in the database and result queries.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/Annotation.java gcc-4.1.0/libjava/classpath/java/text/Annotation.java
*** gcc-4.0.2/libjava/classpath/java/text/Annotation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/Annotation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* Annotation.java -- Wrapper for a text attribute object
+    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ /**
+   * This class is used as a wrapper for a text attribute object.  Annotation
+   * objects are associated with a specific range of text.  Changing either
+   * the text range or the underlying text invalidates the object.
+   *
+   * @version 0.0
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public class Annotation
+ {
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * This is the attribute object being wrappered
+   */
+ private Object attrib;
+ 
+ /*************************************************************************/
+ 
+ /**
+   * Constructors
+   */
+ 
+ /**
+   * This method initializes a new instance of <code>Annotation</code> to
+   * wrapper the specified text attribute object.
+   *
+   * @param attrib The text attribute <code>Object</code> to wrapper.
+   */
+ public
+ Annotation(Object attrib)
+ {
+   this.attrib = attrib;
+ }
+ 
+ /*************************************************************************/
+ 
+ /*
+  * Instance Variables
+  */
+ 
+ /**
+   * This method returns the text attribute object this <code>Annotation</code>
+   * instance is wrappering.
+   *
+   * @return The text attribute object for this <code>Annotation</code>.
+   */
+ public Object
+ getValue()
+ {
+   return(attrib);
+ }
+ 
+ /*************************************************************************/
+ 
+ /**
+   * This method returns a <code>String</code> representation of this
+   * object.
+   *
+   * @return This object as a <code>String</code>.
+   */
+ public String
+ toString()
+ {
+   return(getClass().getName() + "[value=" + attrib.toString() + "]");
+ }
+ 
+ } // class Annotation
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/AttributedCharacterIterator.java gcc-4.1.0/libjava/classpath/java/text/AttributedCharacterIterator.java
*** gcc-4.0.2/libjava/classpath/java/text/AttributedCharacterIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/AttributedCharacterIterator.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,274 ----
+ /* AttributedCharacterIterator.java -- Iterate over attributes
+    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.io.InvalidObjectException;
+ import java.io.Serializable;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ /**
+  * This interface extends the <code>CharacterIterator</code> interface
+  * in order to support iteration over character attributes as well as
+  * over the characters themselves.
+  * <p>
+  * In addition to attributes of specific characters, this interface
+  * supports the concept of the "attribute run", which is an attribute
+  * that is defined for a particular value across an entire range of
+  * characters or which is undefined over a range of characters.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public interface AttributedCharacterIterator extends CharacterIterator
+ {
+   /**
+    * Defines attribute keys that are used as text attributes.
+    */
+   public static class Attribute implements Serializable
+   {
+     private static final long serialVersionUID = -9142742483513960612L;
+ 
+     /**
+      * This is the attribute for the language of the text.  The value of
+      * attributes of this key type are instances of <code>Locale</code>.
+      */
+     public static final Attribute LANGUAGE = new Attribute ("LANGUAGE");
+ 
+     /**
+      * This is the attribute for the reading form of text.  This is used
+      * for storing pronunciation along with the written text for languages
+      * which need it.  The value of attributes of this key type are
+      * instances of <code>Annotation</code> which wrappers a 
+      * <code>String</code>.
+      */
+     public static final Attribute READING = new Attribute ("READING");
+ 
+     /**
+      * This is the attribute for input method segments.  The value of attributes
+      * of this key type are instances of <code>Annotation</code> which wrapper
+      * a <code>String</code>.
+      */
+     public static final Attribute INPUT_METHOD_SEGMENT =
+       new Attribute ("INPUT_METHOD_SEGMENT");
+ 
+     /**
+      * The name of the attribute key
+      * @serial
+      */
+     private String name;
+ 
+     /**
+      * Initializes a new instance of this class with the specified name.
+      *
+      * @param name The name of this attribute key.
+      */
+     protected Attribute (String name)
+     {
+       this.name = name;
+     }
+ 
+     /**
+      * Returns the name of this attribute.
+      *
+      * @return The attribute name
+      */
+     protected String getName()
+     {
+       return name;
+     }
+ 
+     /**
+      * Resolves an instance of 
+      * <code>AttributedCharacterIterator.Attribute</code>
+      * that is being deserialized to one of the three pre-defined attribute
+      * constants.  It does this by comparing the names of the attributes.  The
+      * constant that the deserialized object resolves to is returned.
+      *
+      * @return The resolved contant value
+      *
+      * @exception InvalidObjectException If the object being deserialized 
+      *            cannot be resolved.
+      */
+     protected Object readResolve() throws InvalidObjectException
+     {
+       if (this.equals (READING))
+         return READING;
+ 
+       if (this.equals (LANGUAGE))
+         return LANGUAGE;
+ 
+       if (this.equals (INPUT_METHOD_SEGMENT))
+         return INPUT_METHOD_SEGMENT;
+ 
+       throw new InvalidObjectException ("Can't resolve Attribute: " 
+               + getName());
+     }
+     
+     /**
+      * Tests this object for equality against the specified object.
+      * The two objects will be considered equal if and only if:
+      * <ul>
+      * <li>The specified object is not <code>null</code>.
+      * <li>The specified object is an instance of 
+      * <code>AttributedCharacterIterator.Attribute</code>.
+      * <li>The specified object has the same attribute name as this object.
+      * </ul>
+      *
+      * @param obj  the <code>Object</code> to test for equality against this 
+      *             object.
+      *
+      * @return <code>true</code> if the specified object is equal to this one, 
+      *         <code>false</code> otherwise.
+      */
+     public final boolean equals (Object obj)
+     {
+       if (obj == this)
+         return true;
+       else 
+         return false;
+     }
+ 
+     /**
+      * Returns a hash value for this object.
+      *
+      * @return A hash value for this object.
+      */
+     public final int hashCode()
+     {
+       return super.hashCode();
+     }
+ 
+     /**
+      * Returns a <code>String</code> representation of this object.
+      *
+      * @return A <code>String</code> representation of this object.
+      */
+     public String toString()
+     {
+       return getClass().getName() + "(" + getName() + ")";
+     }
+ 
+   } // Inner class Attribute
+ 
+   /**
+    * Returns a list of all keys that are defined for the 
+    * text range.  This can be an empty list if no attributes are defined.
+    *
+    * @return A list of keys 
+    */
+   Set getAllAttributeKeys();
+ 
+   /**
+    * Returns a <code>Map</code> of the attributes defined for the current 
+    * character.
+    *
+    * @return A <code>Map</code> of the attributes for the current character.
+    */
+   Map getAttributes();
+ 
+   /**
+    * Returns the value of the specified attribute for the
+    * current character.  If the attribute is not defined for the current
+    * character, <code>null</code> is returned.
+    *
+    * @param attrib The attribute to retrieve the value of.
+    *
+    * @return The value of the specified attribute
+    */
+   Object getAttribute (AttributedCharacterIterator.Attribute attrib);
+ 
+   /**
+    * Returns the index of the first character in the run that
+    * contains all attributes defined for the current character.
+    *
+    * @return The start index of the run
+    */
+   int getRunStart();
+ 
+   /**
+    * Returns the index of the first character in the run that
+    * contains all attributes in the specified <code>Set</code> defined for
+    * the current character.
+    *
+    * @param attribs The <code>Set</code> of attributes.
+    *
+    * @return The start index of the run.
+    */
+   int getRunStart (Set attribs);
+   
+   /**
+    * Returns the index of the first character in the run that
+    * contains the specified attribute defined for the current character.
+    *
+    * @param attrib The attribute.
+    *
+    * @return The start index of the run.
+    */
+   int getRunStart (AttributedCharacterIterator.Attribute attrib);
+   
+   /**
+    * Returns the index of the character after the end of the run
+    * that contains all attributes defined for the current character.
+    *
+    * @return The end index of the run.
+    */
+   int getRunLimit();
+   
+   /**
+    * Returns the index of the character after the end of the run
+    * that contains all attributes in the specified <code>Set</code> defined
+    * for the current character.
+    *
+    * @param attribs The <code>Set</code> of attributes.
+    *
+    * @return The end index of the run.
+    */
+   int getRunLimit (Set attribs);
+   
+   /**
+    * Returns the index of the character after the end of the run
+    * that contains the specified attribute defined for the current character.
+    *
+    * @param attrib The attribute.
+    * 
+    * @return The end index of the run.
+    */
+   int getRunLimit (AttributedCharacterIterator.Attribute attrib);
+ 
+ } // interface AttributedCharacterIterator
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/AttributedString.java gcc-4.1.0/libjava/classpath/java/text/AttributedString.java
*** gcc-4.0.2/libjava/classpath/java/text/AttributedString.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/AttributedString.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,374 ----
+ /* AttributedString.java -- Models text with attributes
+    Copyright (C) 1998, 1999, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.HashMap;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ /**
+  * This class models a <code>String</code> with attributes over various
+  * subranges of the string.  It allows applications to access this 
+  * information via the <code>AttributedCharacterIterator</code> interface.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+ public class AttributedString
+ {
+ 
+   /** 
+    * The attributes and ranges of text over which those attributes apply. 
+    */
+   final class AttributeRange
+   {
+ 
+     /** A Map of the attributes */
+     Map attribs;
+ 
+     /** The beginning index of the attributes */
+     int begin_index;
+ 
+     /** The ending index of the attributes */
+     int end_index;
+ 
+     /**
+      * Creates a new attribute range.
+      * 
+      * @param attribs  the attributes.
+      * @param begin_index  the start index.
+      * @param end_index  the end index.
+      */
+     AttributeRange(Map attribs, int begin_index, int end_index) 
+     {
+       this.attribs = attribs;
+       this.begin_index = begin_index;
+       this.end_index = end_index;
+     }
+ 
+   } // Inner class AttributeRange
+ 
+   /** The string we are representing. */
+   private StringCharacterIterator sci;
+ 
+   /** The attribute information */
+   private AttributeRange[] attribs;
+ 
+   /**
+    * Creates a new instance of <code>AttributedString</code>
+    * that represents the specified <code>String</code> with no attributes.
+    *
+    * @param str The <code>String</code> to be attributed (<code>null</code> not
+    *            permitted).
+    * 
+    * @throws NullPointerException if <code>str</code> is <code>null</code>.
+    */
+   public AttributedString(String str)
+   {
+     sci = new StringCharacterIterator(str);
+     attribs = new AttributeRange[0];
+   }
+ 
+   /**
+    * Creates a new instance of <code>AttributedString</code>
+    * that represents that specified <code>String</code> with the specified
+    * attributes over the entire length of the <code>String</code>.
+    *
+    * @param str The <code>String</code> to be attributed.
+    * @param attributes The attribute list.
+    */
+   public AttributedString(String str, Map attributes)
+   {
+     this(str);
+ 
+     attribs = new AttributeRange[1];
+     attribs[0] = new AttributeRange(attributes, 0, str.length());
+   }
+ 
+   /**
+    * Initializes a new instance of <code>AttributedString</code>
+    * that will use the text and attribute information from the specified
+    * <code>AttributedCharacterIterator</code>.
+    *
+    * @param aci The <code>AttributedCharacterIterator</code> containing the 
+    *            text and attribute information (<code>null</code> not 
+    *            permitted).
+    * 
+    * @throws NullPointerException if <code>aci</code> is <code>null</code>.
+    */
+   public AttributedString(AttributedCharacterIterator aci)
+   {
+     this(aci, aci.getBeginIndex(), aci.getEndIndex(), null);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>AttributedString</code>
+    * that will use the text and attribute information from the specified
+    * subrange of the specified <code>AttributedCharacterIterator</code>.
+    *
+    * @param aci The <code>AttributedCharacterIterator</code> containing the 
+    *            text and attribute information.
+    * @param begin_index The beginning index of the text subrange.
+    * @param end_index The ending index of the text subrange.
+    */
+   public AttributedString(AttributedCharacterIterator aci, int begin_index,
+                           int end_index)
+   {
+     this(aci, begin_index, end_index, null);
+   }
+ 
+   /**
+    * Initializes a new instance of <code>AttributedString</code>
+    * that will use the text and attribute information from the specified
+    * subrange of the specified <code>AttributedCharacterIterator</code>.
+    * Only attributes from the source iterator that are present in the
+    * specified array of attributes will be included in the attribute list
+    * for this object.
+    *
+    * @param aci The <code>AttributedCharacterIterator</code> containing the 
+    *            text and attribute information.
+    * @param begin The beginning index of the text subrange.
+    * @param end The ending index of the text subrange.
+    * @param attributes A list of attributes to include from the iterator, or 
+    *                   <code>null</code> to include all attributes.
+    */
+   public AttributedString(AttributedCharacterIterator aci, int begin, int end, 
+                           AttributedCharacterIterator.Attribute[] attributes)
+   {
+     // Validate some arguments
+     if ((begin < 0) || (end < begin) || end > aci.getEndIndex())
+       throw new IllegalArgumentException("Bad index values");
+ 
+     StringBuffer sb = new StringBuffer("");
+ 
+     // Get the valid attribute list
+     Set all_attribs = aci.getAllAttributeKeys();
+     if (attributes != null)
+       all_attribs.retainAll(Arrays.asList(attributes));
+ 
+     // Loop through and extract the attributes
+     char c = aci.setIndex(begin);
+ 
+     ArrayList accum = new ArrayList();
+     do
+       { 
+         sb.append(c);
+ 
+         Iterator iter = all_attribs.iterator();
+         while(iter.hasNext())
+           {
+             Object obj = iter.next();
+ 
+             // What should we do if this is not true?
+             if (!(obj instanceof AttributedCharacterIterator.Attribute))
+               continue;
+ 
+             AttributedCharacterIterator.Attribute attrib = 
+               (AttributedCharacterIterator.Attribute)obj;
+ 
+             // Make sure the attribute is defined.
+             int rl = aci.getRunLimit(attrib);
+             if (rl == -1)
+               continue;
+             if (rl > end)
+               rl = end;
+             rl -= begin;
+ 
+             // Check to see if we already processed this one
+             int rs = aci.getRunStart(attrib);
+             if ((rs < aci.getIndex()) && (aci.getIndex() != begin))
+               continue;
+ 
+             // If the attribute run starts before the beginning index, we
+             // need to junk it if it is an Annotation.
+             Object attrib_obj = aci.getAttribute(attrib);
+             if (rs < begin)
+               {
+                 if (attrib_obj instanceof Annotation)
+                    continue;
+ 
+                 rs = begin;
+               }
+             else
+               {
+                 rs -= begin;
+               }
+ 
+             // Create a map object.  Yes this will only contain one attribute
+             Map new_map = new Hashtable();
+             new_map.put(attrib, attrib_obj);
+ 
+             // Add it to the attribute list.
+             accum.add(new AttributeRange(new_map, rs, rl));
+           }
+ 
+         c = aci.next();
+       }
+     while(c != CharacterIterator.DONE);
+ 
+     attribs = new AttributeRange[accum.size()];
+     attribs = (AttributeRange[]) accum.toArray(attribs);
+ 
+     sci = new StringCharacterIterator(sb.toString());
+   }
+ 
+   /**
+    * Adds a new attribute that will cover the entire string.
+    *
+    * @param attrib The attribute to add.
+    * @param value The value of the attribute.
+    */
+   public void addAttribute(AttributedCharacterIterator.Attribute attrib, 
+           Object value)
+   {
+     addAttribute(attrib, value, 0, sci.getEndIndex());
+   }
+ 
+   /**
+    * Adds a new attribute that will cover the specified subrange
+    * of the string.
+    *
+    * @param attrib The attribute to add.
+    * @param value The value of the attribute, which may be <code>null</code>.
+    * @param begin The beginning index of the subrange.
+    * @param end The ending index of the subrange.
+    *
+    * @exception IllegalArgumentException If attribute is <code>null</code> or 
+    *            the subrange is not valid.
+    */
+   public void addAttribute(AttributedCharacterIterator.Attribute attrib, 
+           Object value, int begin, int end)
+   {
+     if (attrib == null)
+       throw new IllegalArgumentException("null attribute");
+     if (end <= begin)
+       throw new IllegalArgumentException("Requires end > begin");
+     HashMap hm = new HashMap();
+     hm.put(attrib, value);
+ 
+     addAttributes(hm, begin, end);
+   }
+ 
+   /**
+    * Adds all of the attributes in the specified list to the
+    * specified subrange of the string.
+    *
+    * @param attributes The list of attributes.
+    * @param begin_index The beginning index.
+    * @param end_index The ending index
+    *
+    * @throws NullPointerException if <code>attributes</code> is 
+    *         <code>null</code>.
+    * @throws IllegalArgumentException if the subrange is not valid.
+    */
+   public void addAttributes(Map attributes, int begin_index, int end_index)
+   {
+     if (attributes == null)
+       throw new NullPointerException("null attribute");
+ 
+     if ((begin_index < 0) || (end_index > sci.getEndIndex()) ||
+         (end_index <= begin_index))
+       throw new IllegalArgumentException("bad range");
+ 
+     AttributeRange[] new_list = new AttributeRange[attribs.length + 1];
+     System.arraycopy(attribs, 0, new_list, 0, attribs.length);
+     attribs = new_list;
+     attribs[attribs.length - 1] = new AttributeRange(attributes, begin_index, 
+                                                      end_index);
+   } 
+ 
+   /**
+    * Returns an <code>AttributedCharacterIterator</code> that 
+    * will iterate over the entire string.
+    *
+    * @return An <code>AttributedCharacterIterator</code> for the entire string.
+    */
+   public AttributedCharacterIterator getIterator()
+   {
+     return(new AttributedStringIterator(sci, attribs, 0, sci.getEndIndex(), 
+             null));
+   }
+ 
+   /**
+    * Returns an <code>AttributedCharacterIterator</code> that
+    * will iterate over the entire string.  This iterator will return information
+    * about the list of attributes in the specified array.  Attributes not in
+    * the array may or may not be returned by the iterator.  If the specified
+    * array is <code>null</code>, all attributes will be returned.
+    *
+    * @param attributes A list of attributes to include in the returned iterator.
+    *
+    * @return An <code>AttributedCharacterIterator</code> for this string.
+    */
+   public AttributedCharacterIterator getIterator(
+           AttributedCharacterIterator.Attribute[] attributes)
+   {
+     return(getIterator(attributes, 0, sci.getEndIndex()));
+   }
+ 
+   /**
+    * Returns an <code>AttributedCharacterIterator</code> that
+    * will iterate over the specified subrange.  This iterator will return 
+    * information about the list of attributes in the specified array.  
+    * Attributes not in the array may or may not be returned by the iterator.  
+    * If the specified array is <code>null</code>, all attributes will be 
+    * returned.  
+    *
+    * @param attributes A list of attributes to include in the returned iterator.
+    * @param begin_index The beginning index of the subrange.
+    * @param end_index The ending index of the subrange.
+    *
+    * @return An <code>AttributedCharacterIterator</code> for this string.
+    */
+   public AttributedCharacterIterator getIterator(
+           AttributedCharacterIterator.Attribute[] attributes, 
+           int begin_index, int end_index)
+   {
+     if ((begin_index < 0) || (end_index > sci.getEndIndex()) ||
+         (end_index < begin_index))
+       throw new IllegalArgumentException("bad range");
+ 
+     return(new AttributedStringIterator(sci, attribs, begin_index, end_index,
+                                         attributes));
+   }
+ 
+ } // class AttributedString
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/AttributedStringIterator.java gcc-4.1.0/libjava/classpath/java/text/AttributedStringIterator.java
*** gcc-4.0.2/libjava/classpath/java/text/AttributedStringIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/AttributedStringIterator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,384 ----
+ /* AttributedStringIterator.java -- Class to iterate over AttributedString
+    Copyright (C) 1998, 1999, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ /**
+   * This class implements the AttributedCharacterIterator interface.  It
+   * is used by AttributedString.getIterator().
+   *
+   * @version 0.0
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ class AttributedStringIterator implements AttributedCharacterIterator
+ {
+ 
+   /*************************************************************************/
+ 
+   /** The character iterator containing the text */
+   private CharacterIterator ci;
+ 
+   /** The list of attributes and ranges */
+   private AttributedString.AttributeRange[] attribs;
+ 
+   /**
+    * The list of attributes that the user is interested in.  We may,
+    * at our option, not return any other attributes.
+    */
+   private AttributedCharacterIterator.Attribute[] restricts;
+ 
+   /*************************************************************************/
+ 
+   AttributedStringIterator(StringCharacterIterator sci, 
+                            AttributedString.AttributeRange[] attribs,
+                            int begin_index, int end_index,
+                            AttributedCharacterIterator.Attribute[] restricts)
+   {
+     this.ci = new StringCharacterIterator(sci, begin_index, end_index);
+     this.attribs = attribs;
+     this.restricts = restricts;
+   }
+ 
+   /*************************************************************************/
+ 
+   // First we have a bunch of stupid redirects.  If StringCharacterIterator
+   // weren't final, I just would have extended that for this class.  Alas, no.
+ 
+   public Object clone()
+   {
+     return(ci.clone());
+   }
+ 
+   public char current()
+   {
+     return(ci.current());
+   }
+ 
+   public char next()
+   {
+     return(ci.next());
+   }
+ 
+   public char previous()
+   {
+     return(ci.previous());
+   }
+ 
+   public char first()
+   {
+     return(ci.first());
+   }
+ 
+   public char last()
+   {
+     return(ci.last());
+   }
+ 
+   public int getIndex()
+   {
+     return(ci.getIndex());
+   }
+ 
+   public char setIndex(int index)
+   {
+     return(ci.setIndex(index));  
+   }
+ 
+   public int getBeginIndex()
+   {
+     return(ci.getBeginIndex());
+   }
+ 
+   public int getEndIndex()
+   {
+     return(ci.getEndIndex());
+   }
+ 
+   /*
+    * Here is where the AttributedCharacterIterator methods start.
+    */ 
+ 
+   /*************************************************************************/
+ 
+   /**
+    * Returns a list of all the attribute keys that are defined anywhere
+    * on this string.
+    */
+   public Set getAllAttributeKeys()
+   {
+     HashSet s = new HashSet();
+     if (attribs == null)
+       return(s);
+ 
+     for (int i = 0; i < attribs.length; i++)
+     {
+       if (attribs[i].begin_index > getEndIndex()
+ 	  || attribs[i].end_index <= getBeginIndex())
+ 	continue;
+ 
+       Set key_set = attribs[i].attribs.keySet();
+       Iterator iter = key_set.iterator();
+       while (iter.hasNext())
+         {
+           s.add(iter.next());
+         }
+     }
+ 
+     return(s);
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * Various methods that determine how far the run extends for various
+    * attribute combinations.
+    */
+ 
+   public int getRunLimit()
+   {
+     return(getRunLimit(getAttributes().keySet()));
+   }
+ 
+   public int getRunLimit(AttributedCharacterIterator.Attribute attrib)
+   {
+     HashSet s = new HashSet();
+     s.add(attrib);
+     return(getRunLimit(s));
+   }
+ 
+   public synchronized int getRunLimit(Set attributeSet)
+   {
+     if (attributeSet == null)
+       return ci.getEndIndex();
+     
+     int current = ci.getIndex();
+     int end = ci.getEndIndex();
+     int limit = current;
+     if (current == end) 
+       return end;
+     Map runValues = getAttributes();
+     while (limit < end) 
+     {
+       Iterator iterator = attributeSet.iterator();
+       while (iterator.hasNext()) 
+       {
+ 	// Qualified name is a workaround for a gcj 4.0 bug.
+         AttributedCharacterIterator.Attribute attributeKey
+ 	  = (AttributedCharacterIterator.Attribute) iterator.next();
+         Object v1 = runValues.get(attributeKey);
+         Object v2 = getAttribute(attributeKey, limit + 1);
+         boolean changed = false;
+         // check for equal or both null, if NO return start
+         if (v1 != null) 
+           {
+             changed = !v1.equals(v2);
+           }
+         else 
+           {
+             changed = (v2 != null);  
+           }
+         if (changed)
+           return limit + 1;
+       }
+       // no differences, so increment limit and next and loop again
+       limit++;
+     }
+     return end;
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * Various methods that determine where the run begins for various
+    * attribute combinations.
+    */
+ 
+   /**
+    * Returns the index of the first character in the run containing the current
+    * character and defined by all the attributes defined for that character
+    * position.
+    * 
+    * @return The run start index.
+    */
+   public int getRunStart()
+   {
+     return(getRunStart(getAttributes().keySet()));
+   }
+ 
+   /**
+    * Returns the index of the first character in the run, defined by the 
+    * specified attribute, that contains the current character.
+    * 
+    * @param attrib  the attribute (<code>null</code> permitted).
+    * 
+    * return The index of the first character in the run.
+    */
+   public int getRunStart(AttributedCharacterIterator.Attribute attrib)
+   {
+     if (attrib == null)
+       return ci.getBeginIndex();
+     HashSet s = new HashSet();
+     s.add(attrib);
+     return(getRunStart(s));
+   }
+ 
+   /**
+    * Returns the index of the first character in the run, defined by the 
+    * specified attribute set, that contains the current character.
+    * 
+    * @param attributeSet  the attribute set (<code>null</code> permitted).
+    * 
+    * return The index of the first character in the run.
+    */
+   public int getRunStart(Set attributeSet)
+   {
+     if (attributeSet == null)
+       return ci.getBeginIndex();
+     
+     int current = ci.getIndex();
+     int begin = ci.getBeginIndex();
+     int start = current;
+     if (start == begin) 
+       return begin;
+     Map runValues = getAttributes();
+     int prev = start - 1;
+     while (start > begin) 
+     {
+       Iterator iterator = attributeSet.iterator();
+       while (iterator.hasNext()) 
+       {
+ 	// Qualified name is a workaround for a gcj 4.0 bug.
+         AttributedCharacterIterator.Attribute attributeKey
+ 	  = (AttributedCharacterIterator.Attribute) iterator.next();
+         Object v1 = runValues.get(attributeKey);
+         Object v2 = getAttribute(attributeKey, prev);
+         boolean changed = false;
+         // check for equal or both null, if NO return start
+         if (v1 != null) 
+           {
+             changed = !v1.equals(v2);
+           }
+         else 
+           {
+             changed = (v2 != null);  
+           }
+         if (changed)
+           return start;
+       }
+       // no differences, so decrement start and prev and loop again
+       start--;
+       prev--;
+     }
+     return start;
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * Returns the value for an attribute at the specified position.  If the
+    * attribute key (<code>key</code>) is <code>null</code>, the method returns
+    * <code>null</code>.
+    * 
+    * @param key  the key (<code>null</code> permitted).
+    * @param pos  the character position.
+    * 
+    * @return The attribute value (possibly <code>null</code>).
+    */
+   private Object getAttribute(AttributedCharacterIterator.Attribute key, 
+           int pos)
+   {
+     if (attribs == null)
+       return null;
+     for (int i = attribs.length - 1; i >= 0; i--)
+       {
+         if (pos >= attribs[i].begin_index && pos < attribs[i].end_index)
+           {
+             Set keys = attribs[i].attribs.keySet();
+             if (keys.contains(key)) 
+               {
+                 return attribs[i].attribs.get(key);
+               }
+           }
+       }
+     return null;   
+   }
+   
+   /**
+    * Returns the value for an attribute at the current position.  If the
+    * attribute key (<code>key</code>) is <code>null</code>, the method returns
+    * <code>null</code>.
+    * 
+    * @param key  the key (<code>null</code> permitted).
+    * 
+    * @return The attribute value (possibly <code>null</code>).
+    */
+   public Object getAttribute(AttributedCharacterIterator.Attribute key)
+   {
+     return getAttribute(key, ci.getIndex());
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * Return a list of all the attributes and values defined for this
+    * character
+    */
+   public Map getAttributes()
+   {
+     HashMap m = new HashMap();
+     if (attribs == null)
+       return(m);
+   
+     for (int i = 0; i < attribs.length; i++)
+       {
+          if ((ci.getIndex() >= attribs[i].begin_index) &&
+              (ci.getIndex() < attribs[i].end_index))
+            m.putAll(attribs[i].attribs);
+       }
+ 
+     return(m);
+   }
+ 
+ } // class AttributedStringIterator
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/BreakIterator.java gcc-4.1.0/libjava/classpath/java/text/BreakIterator.java
*** gcc-4.0.2/libjava/classpath/java/text/BreakIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/BreakIterator.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,373 ----
+ /* BreakIterator.java -- Breaks text into elements
+    Copyright (C) 1998, 1999, 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * This class iterates over text elements such as words, lines, sentences,
+  * and characters.  It can only iterate over one of these text elements at
+  * a time.  An instance of this class configured for the desired iteration
+  * type is created by calling one of the static factory methods, not
+  * by directly calling a constructor.
+  *
+  * The standard iterators created by the factory methods in this
+  * class will be valid upon creation.  That is, their methods will
+  * not cause exceptions if called before you call setText().
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @date March 19, 1999
+  */
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct to 1.1.
+  */
+ public abstract class BreakIterator implements Cloneable
+ {
+   /**
+    * This value is returned by the <code>next()</code> and
+    * <code>previous</code> in order to indicate that the end of the
+    * text has been reached.
+    */
+   // The value was discovered by writing a test program.
+   public static final int DONE = -1;
+ 
+   /**
+    * This method initializes a new instance of <code>BreakIterator</code>.
+    * This protected constructor is available to subclasses as a default
+    * no-arg superclass constructor.
+    */
+   protected BreakIterator ()
+   {
+   }
+ 
+   /**
+    * Create a clone of this object.
+    */
+   public Object clone ()
+   {
+     try
+       {
+         return super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         return null;
+       }
+   }
+   
+   /**
+    * This method returns the index of the current text element boundary.
+    *
+    * @return The current text boundary.
+    */
+   public abstract int current ();
+ 
+   /**
+    * This method returns the first text element boundary in the text being
+    * iterated over.
+    *
+    * @return The first text boundary.
+    */
+   public abstract int first ();
+ 
+   /**
+    * This methdod returns the offset of the text element boundary following
+    * the specified offset.
+    *
+    * @param pos The text index from which to find the next text boundary.
+    *
+    * @return The next text boundary following the specified index.
+    */
+   public abstract int following (int pos);
+ 
+   /**
+    * This method returns a list of locales for which instances of
+    * <code>BreakIterator</code> are available.
+    *
+    * @return A list of available locales
+    */
+   public static synchronized Locale[] getAvailableLocales ()
+   {
+     Locale[] l = new Locale[1];
+     l[0] = Locale.US;
+     return l;
+   }
+ 
+   private static BreakIterator getInstance (String type, Locale loc)
+   {
+     String className;
+     try
+       {
+ 	ResourceBundle res
+ 	  = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+ 				     loc, ClassLoader.getSystemClassLoader());
+ 	className = res.getString(type);
+       }
+     catch (MissingResourceException x)
+       {
+ 	return null;
+       }
+     try
+       {
+ 	Class k = Class.forName(className);
+ 	return (BreakIterator) k.newInstance();
+       }
+     catch (ClassNotFoundException x1)
+       {
+ 	return null;
+       }
+     catch (InstantiationException x2)
+       {
+ 	return null;
+       }
+     catch (IllegalAccessException x3)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * This method returns an instance of <code>BreakIterator</code> that will
+    * iterate over characters as defined in the default locale.
+    *
+    * @return A <code>BreakIterator</code> instance for the default locale.
+    */
+   public static BreakIterator getCharacterInstance ()
+   {
+     return getCharacterInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>BreakIterator</code> that will
+    * iterate over characters as defined in the specified locale.  If the
+    * desired locale is not available, the default locale is used.
+    *
+    * @param locale The desired locale.
+    *
+    * @return A <code>BreakIterator</code> instance for the default locale.
+    */
+   public static BreakIterator getCharacterInstance (Locale locale)
+   {
+     BreakIterator r = getInstance ("CharacterIterator", locale);
+     if (r == null)
+       r = new gnu.java.text.CharacterBreakIterator ();
+     return r;
+   }
+ 
+   /**
+    * This method returns an instance of <code>BreakIterator</code> that will
+    * iterate over line breaks as defined in the default locale.
+    *
+    * @return A <code>BreakIterator</code> instance for the default locale.
+    */
+   public static BreakIterator getLineInstance ()
+   {
+     return getLineInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>BreakIterator</code> that will
+    * iterate over line breaks as defined in the specified locale.  If the
+    * desired locale is not available, the default locale is used.
+    *
+    * @param locale The desired locale.
+    *
+    * @return A <code>BreakIterator</code> instance for the default locale.
+    */
+   public static BreakIterator getLineInstance (Locale locale)
+   {
+     BreakIterator r = getInstance ("LineIterator", locale);
+     if (r == null)
+       r = new gnu.java.text.LineBreakIterator ();
+     return r;
+   }
+ 
+   /**
+    * This method returns an instance of <code>BreakIterator</code> that will
+    * iterate over sentences as defined in the default locale.
+    *
+    * @return A <code>BreakIterator</code> instance for the default locale.
+    */
+   public static BreakIterator getSentenceInstance ()
+   {
+     return getSentenceInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>BreakIterator</code> that will
+    * iterate over sentences as defined in the specified locale.  If the
+    * desired locale is not available, the default locale is used.
+    *
+    * @param locale The desired locale.
+    *
+    * @return A <code>BreakIterator</code> instance for the default locale.
+    */
+   public static BreakIterator getSentenceInstance (Locale locale)
+   {
+     BreakIterator r = getInstance ("SentenceIterator", locale);
+     if (r == null)
+       r = new gnu.java.text.SentenceBreakIterator ();
+     return r;
+   }
+ 
+   /**
+    * This method returns the text this object is iterating over as a
+    * <code>CharacterIterator</code>.
+    *
+    * @return The text being iterated over.
+    */
+   public abstract CharacterIterator getText ();
+ 
+   /**
+    * This method returns an instance of <code>BreakIterator</code> that will
+    * iterate over words as defined in the default locale.
+    *
+    * @return A <code>BreakIterator</code> instance for the default locale.
+    */
+   public static BreakIterator getWordInstance ()
+   {
+     return getWordInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>BreakIterator</code> that will
+    * iterate over words as defined in the specified locale.  If the
+    * desired locale is not available, the default locale is used.
+    *
+    * @param locale The desired locale.
+    *
+    * @return A <code>BreakIterator</code> instance for the default locale.
+    */
+   public static BreakIterator getWordInstance (Locale locale)
+   {
+     BreakIterator r = getInstance ("WordIterator", locale);
+     if (r == null)
+       r = new gnu.java.text.WordBreakIterator ();
+     return r;
+   }
+ 
+   /**
+    * This method tests whether or not the specified position is a text
+    * element boundary.
+    *
+    * @param pos The text position to test.
+    *
+    * @return <code>true</code> if the position is a boundary,
+    * <code>false</code> otherwise. 
+    */
+   public boolean isBoundary (int pos)
+   {
+     if (pos == 0)
+       return true;
+     return following (pos - 1) == pos;
+   }
+ 
+   /**
+    * This method returns the last text element boundary in the text being
+    * iterated over.
+    *
+    * @return The last text boundary.
+    */
+   public abstract int last ();
+ 
+   /**
+    * This method returns the text element boundary following the current
+    * text position.
+    *
+    * @return The next text boundary.
+    */
+   public abstract int next ();
+ 
+   /**
+    * This method returns the n'th text element boundary following the current
+    * text position.
+    *
+    * @param n The number of text element boundaries to skip.
+    *
+    * @return The next text boundary.
+    */
+   public abstract int next (int n);
+ 
+   /**
+    * This methdod returns the offset of the text element boundary preceding
+    * the specified offset.
+    *
+    * @param pos The text index from which to find the preceding text boundary. 
+    *
+    * @returns The next text boundary preceding the specified index.
+    */
+   public int preceding (int pos)
+   {
+     if (following (pos) == DONE)
+       last ();
+     while (previous () >= pos)
+       ;
+     return current ();
+   }
+ 
+   /**
+    * This method returns the text element boundary preceding the current
+    * text position.
+    *
+    * @return The previous text boundary.
+    */
+   public abstract int previous ();
+ 
+   /**
+    * This method sets the text string to iterate over.
+    *
+    * @param newText The <code>String</code> to iterate over.
+    */
+   public void setText (String newText)
+   {
+     setText (new StringCharacterIterator (newText));
+   }
+ 
+   /**
+    * This method sets the text to iterate over from the specified
+    * <code>CharacterIterator</code>.
+    * 
+    * @param newText The desired <code>CharacterIterator</code>.
+    */
+   public abstract void setText (CharacterIterator newText);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/CharacterIterator.java gcc-4.1.0/libjava/classpath/java/text/CharacterIterator.java
*** gcc-4.0.2/libjava/classpath/java/text/CharacterIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/CharacterIterator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,148 ----
+ /* CharacterIterator.java -- Iterate over a character range
+    Copyright (C) 1998, 2001, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ /**
+   * This interface defines a mechanism for iterating over a range of
+   * characters.  For a given range of text, a beginning and ending index,
+   * as well as a current index are defined.  These values can be queried
+   * by the methods in this interface.  Additionally, various methods allow
+   * the index to be set. 
+   *
+   * @author Aaron M. Renn (arenn@urbanophile.com)
+   */
+ public interface CharacterIterator extends Cloneable
+ {
+   /**
+    * This is a special constant value that is returned when the beginning or
+    * end of the character range has been reached.
+    */
+   char DONE = '\uFFFF';
+ 
+   /**
+    * This method returns the character at the current index position
+    *
+    * @return The character at the current index position.
+    */
+   char current();
+ 
+   /**
+    * This method increments the current index and then returns the character
+    * at the new index value.  If the index is already at 
+    * <code>getEndIndex() - 1</code>, it will not be incremented.
+    *
+    * @return The character at the position of the incremented index value,
+    * or {@link #DONE} if the index has reached getEndIndex() - 1
+    */
+   char next();
+ 
+   /**
+    * This method decrements the current index and then returns the character
+    * at the new index value.  If the index value is already at the beginning
+    * index, it will not be decremented.
+    *
+    * @return The character at the position of the decremented index value,
+    *         or {@link #DONE} if index was already equal to the beginning index
+    *         value.
+    */
+   char previous();
+ 
+   /**
+    * This method sets the index value to the beginning of the range and returns
+    * the character there.
+    *
+    * @return The character at the beginning of the range, or {@link #DONE} if 
+    *         the range is empty.
+    */
+   char first();
+ 
+   /**
+    * This method sets the index value to <code>getEndIndex() - 1</code> and
+    * returns the character there.  If the range is empty, then the index value
+    * will be set equal to the beginning index.
+    *
+    * @return The character at the end of the range, or {@link #DONE} if the 
+    *         range is empty.
+    */
+   char last();  
+ 
+   /**
+    * This method returns the current value of the index.
+    *
+    * @return The current index value
+    */
+   int getIndex();
+ 
+   /**
+    * This method sets the value of the index to the specified value, then
+    * returns the character at that position.
+    *
+    * @param index The new index value.
+    *
+    * @return The character at the new index value or {@link #DONE} if the index
+    *         value is equal to {@link #getEndIndex()}.
+    */
+   char setIndex (int index) throws IllegalArgumentException;
+ 
+   /**
+    * This method returns the character position of the first character in the
+    * range.
+    *
+    * @return The index of the first character in the range.
+    */
+   int getBeginIndex();
+ 
+   /**
+    * This method returns the character position of the end of the text range.
+    * This will actually be the index of the first character following the
+    * end of the range.  In the event the text range is empty, this will be
+    * equal to the first character in the range.
+    *
+    * @return The index of the end of the range.
+    */
+   int getEndIndex();
+ 
+   /**
+    * This method creates a copy of this <code>CharacterIterator</code>.
+    *
+    * @return A copy of this <code>CharacterIterator</code>.
+    */
+   Object clone();
+ 
+ } // interface CharacterIterator
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/ChoiceFormat.java gcc-4.1.0/libjava/classpath/java/text/ChoiceFormat.java
*** gcc-4.0.2/libjava/classpath/java/text/ChoiceFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/ChoiceFormat.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,504 ----
+ /* ChoiceFormat.java -- Format over a range of numbers
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.util.Vector;
+ 
+ /**
+  * This class allows a format to be specified based on a range of numbers.
+  * To use this class, first specify two lists of formats and range terminators.
+  * These lists must be arrays of equal length.  The format of index 
+  * <code>i</code> will be selected for value <code>X</code> if 
+  * <code>terminator[i] &lt;= X &lt; limit[i + 1]</code>.  If the value X is not
+  * included in any range, then either the first or last format will be 
+  * used depending on whether the value X falls outside the range.
+  * <p>
+  * This sounds complicated, but that is because I did a poor job of
+  * explaining it.  Consider the following example:
+  * <p>
+  *
+ <pre>terminators = { 1, ChoiceFormat.nextDouble(1) }
+ formats = { "file", "files" }</pre>
+  *
+  * <p>
+  * In this case if the actual number tested is one or less, then the word
+  * "file" is used as the format value.  If the number tested is greater than
+  * one, then "files" is used.  This allows plurals to be handled
+  * gracefully.  Note the use of the method <code>nextDouble</code>.  This
+  * method selects the next highest double number than its argument.  This
+  * effectively makes any double greater than 1.0 cause the "files" string
+  * to be selected.  (Note that all terminator values are specified as
+  * doubles.
+  * <p>
+  * Note that in order for this class to work properly, the range terminator
+  * array must be sorted in ascending order and the format string array
+  * must be the same length as the terminator array.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @date March 9, 1999
+  */
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 from http://www.javasoft.com.
+  * Status:  Believed complete and correct to 1.1.
+  */
+ public class ChoiceFormat extends NumberFormat
+ {
+   /**
+    * This method sets new range terminators and format strings for this
+    * object based on the specified pattern. This pattern is of the form 
+    * "term#string|term#string...".  For example "1#Sunday|2#Monday|#Tuesday".
+    *
+    * @param newPattern The pattern of terminators and format strings.
+    *
+    * @exception IllegalArgumentException If the pattern is not valid
+    */
+   public void applyPattern (String newPattern)
+   {
+     // Note: we assume the same kind of quoting rules apply here.
+     // This isn't explicitly documented.  But for instance we accept
+     // '#' as a literal hash in a format string.
+     int index = 0, max = newPattern.length();
+     Vector stringVec = new Vector ();
+     Vector limitVec = new Vector ();
+     StringBuffer buf = new StringBuffer ();
+     
+     while (true)
+       {
+ 	// Find end of double.
+ 	int dstart = index;
+ 	while (index < max)
+ 	  {
+ 	    char c = newPattern.charAt(index);
+ 	    if (c == '#' || c == '\u2064' || c == '<')
+ 	      break;
+ 	    ++index;
+ 	  }
+ 	
+ 	if (index == max)
+ 	  throw new IllegalArgumentException ("unexpected end of text");
+ 	Double d = new Double (newPattern.substring(dstart, index));
+ 
+ 	if (newPattern.charAt(index) == '<')
+ 	  d = new Double (nextDouble (d.doubleValue()));
+ 
+ 	limitVec.addElement(d);
+ 
+ 	// Scan text.
+ 	++index;
+ 	buf.setLength(0);
+ 	while (index < max)
+ 	  {
+ 	    char c = newPattern.charAt(index);
+ 	    if (c == '\'' && index < max + 1
+ 		&& newPattern.charAt(index + 1) == '\'')
+ 	      {
+ 		buf.append(c);
+ 		++index;
+ 	      }
+ 	    else if (c == '\'' && index < max + 2)
+ 	      {
+ 		buf.append(newPattern.charAt(index + 1));
+ 		index += 2;
+ 	      }
+ 	    else if (c == '|')
+ 	      break;
+ 	    else
+ 	      buf.append(c);
+ 	    ++index;
+ 	  }
+ 
+ 	stringVec.addElement(buf.toString());
+ 	if (index == max)
+ 	  break;
+ 	++index;
+       }
+ 
+     choiceFormats = new String[stringVec.size()];
+     stringVec.copyInto(choiceFormats);
+ 
+     choiceLimits = new double[limitVec.size()];
+     for (int i = 0; i < choiceLimits.length; ++i)
+       {
+ 	Double d = (Double) limitVec.elementAt(i);
+ 	choiceLimits[i] = d.doubleValue();
+       }
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>ChoiceFormat</code> that
+    * generates its range terminator and format string arrays from the
+    * specified pattern.  This pattern is of the form 
+    * "term#string|term#string...".  For example "1#Sunday|2#Monday|#Tuesday".
+    * This is the same pattern type used by the <code>applyPattern</code>
+    * method.
+    *
+    * @param newPattern The pattern of terminators and format strings.
+    *
+    * @exception IllegalArgumentException If the pattern is not valid
+    */
+   public ChoiceFormat (String newPattern)
+   {
+     super ();
+     applyPattern (newPattern);
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>ChoiceFormat</code> that
+    * will use the specified range terminators and format strings.
+    *
+    * @param choiceLimits The array of range terminators
+    * @param choiceFormats The array of format strings
+    */
+   public ChoiceFormat (double[] choiceLimits, String[] choiceFormats)
+   {
+     super ();
+     setChoices (choiceLimits, choiceFormats);
+   }
+ 
+   /**
+    * This method tests this object for equality with the specified 
+    * object.  This will be true if and only if:
+    * <ul>
+    * <li>The specified object is not <code>null</code>.</li>
+    * <li>The specified object is an instance of <code>ChoiceFormat</code>.</li>
+    * <li>The termination ranges and format strings are identical to
+    *     this object's. </li>
+    * </ul>
+    *
+    * @param obj The object to test for equality against.
+    *
+    * @return <code>true</code> if the specified object is equal to
+    * this one, <code>false</code> otherwise. 
+    */
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof ChoiceFormat))
+       return false;
+     ChoiceFormat cf = (ChoiceFormat) obj;
+     if (choiceLimits.length != cf.choiceLimits.length)
+       return false;
+     for (int i = choiceLimits.length - 1; i >= 0; --i)
+       {
+ 	if (choiceLimits[i] != cf.choiceLimits[i]
+ 	    || !choiceFormats[i].equals(cf.choiceFormats[i]))
+ 	  return false;
+       }
+     return true;
+   }
+ 
+   /**
+    * This method appends the appropriate format string to the specified
+    * <code>StringBuffer</code> based on the supplied <code>long</code>
+    * argument.
+    *
+    * @param num The number used for determine (based on the range
+    *               terminators) which format string to append. 
+    * @param appendBuf The <code>StringBuffer</code> to append the format string 
+    *                  to.
+    * @param pos Unused.
+    *
+    * @return The <code>StringBuffer</code> with the format string appended.
+    */
+   public StringBuffer format (long num, StringBuffer appendBuf,
+ 			      FieldPosition pos)
+   {
+     return format ((double) num, appendBuf, pos);
+   }
+ 
+   /**
+    * This method appends the appropriate format string to the specified
+    * <code>StringBuffer</code> based on the supplied <code>double</code>
+    * argument.
+    *
+    * @param num The number used for determine (based on the range
+    *               terminators) which format string to append. 
+    * @param appendBuf The <code>StringBuffer</code> to append the format string to.
+    * @param pos Unused.
+    *
+    * @return The <code>StringBuffer</code> with the format string appended.
+    */
+   public StringBuffer format (double num, StringBuffer appendBuf,
+ 			      FieldPosition pos)
+   {
+     if (choiceLimits.length == 0)
+       return appendBuf;
+ 
+     int index = 0;
+     if (! Double.isNaN(num) && num >= choiceLimits[0])
+       {
+ 	for (; index < choiceLimits.length - 1; ++index)
+ 	  {
+ 	    if (choiceLimits[index] <= num && num < choiceLimits[index + 1])
+ 	      break;
+ 	  }
+       }
+ 
+     return appendBuf.append(choiceFormats[index]);
+   }
+ 
+   /**
+    * This method returns the list of format strings in use.
+    *
+    * @return The list of format objects.
+    */
+   public Object[] getFormats ()
+   {
+     return (Object[]) choiceFormats.clone();
+   }
+ 
+   /**
+    * This method returns the list of range terminators in use.
+    *
+    * @return The list of range terminators.
+    */
+   public double[] getLimits ()
+   {
+     return (double[]) choiceLimits.clone();
+   }
+ 
+   /**
+    * This method returns a hash value for this object
+    * 
+    * @return A hash value for this object.
+    */
+   public int hashCode ()
+   {
+     int hash = 0;
+     for (int i = 0; i < choiceLimits.length; ++i)
+       {
+ 	long v = Double.doubleToLongBits(choiceLimits[i]);
+ 	hash ^= (v ^ (v >>> 32));
+ 	hash ^= choiceFormats[i].hashCode();
+       }
+     return hash;
+   }
+ 
+   /**
+    * This method returns the lowest possible double greater than the 
+    * specified double.  If the specified double value is equal to
+    * <code>Double.NaN</code> then that is the value returned.
+    *
+    * @param d The specified double
+    *
+    * @return The lowest double value greater than the specified double.
+    */
+   public static final double nextDouble (double d)
+   {
+     return nextDouble (d, true);
+   }
+ 
+   /**
+    * This method returns a double that is either the next highest double
+    * or next lowest double compared to the specified double depending on the
+    * value of the passed boolean parameter.  If the boolean parameter is
+    * <code>true</code>, then the lowest possible double greater than the 
+    * specified double will be returned.  Otherwise the highest possible
+    * double less than the specified double will be returned.
+    *
+    * @param d The specified double
+    * @param next <code>true</code> to return the next highest
+    *                 double, <code>false</code> otherwise. 
+    *
+    * @return The next highest or lowest double value.
+    */
+   public static double nextDouble (double d, boolean next)
+   {
+     if (Double.isInfinite(d) || Double.isNaN(d))
+       return d;
+ 
+     long bits = Double.doubleToLongBits(d);
+ 
+     long mantMask = (1L << mantissaBits) - 1;
+     long mantissa = bits & mantMask;
+ 
+     long expMask = (1L << exponentBits) - 1;
+     long exponent = (bits >>> mantissaBits) & expMask;
+ 
+     if (next ^ (bits < 0)) // Increment magnitude
+       {
+ 	if (mantissa == (1L << mantissaBits) - 1)
+ 	  {
+ 	    mantissa = 0L;
+ 	    exponent++;
+ 	     
+ 	    // Check for absolute overflow.
+ 	    if (exponent >= (1L << mantissaBits))
+ 	      return (bits > 0) ? Double.POSITIVE_INFINITY 
+ 		: Double.NEGATIVE_INFINITY;		      
+ 	  }
+ 	else
+ 	  mantissa++;
+       }
+     else // Decrement magnitude
+       {
+ 	if (exponent == 0L && mantissa == 0L)
+ 	  {
+ 	    // The only case where there is a change of sign
+ 	    return next ? Double.MIN_VALUE : -Double.MIN_VALUE;
+ 	  }
+ 	else
+ 	  {
+ 	    if (mantissa == 0L)
+ 	      {
+ 		mantissa = (1L << mantissaBits) - 1;
+ 		exponent--;
+ 	      }
+ 	    else
+ 	      mantissa--;
+ 	  }
+       }
+ 
+     long result = bits < 0 ? 1 : 0;
+     result = (result << exponentBits) | exponent;
+     result = (result << mantissaBits) | mantissa;
+     return Double.longBitsToDouble(result);
+   }
+ 
+   /**
+    * I'm not sure what this method is really supposed to do, as it is
+    * not documented.
+    */
+   public Number parse (String sourceStr, ParsePosition pos)
+   {
+     int index = pos.getIndex();
+     for (int i = 0; i < choiceLimits.length; ++i)
+       {
+ 	if (sourceStr.startsWith(choiceFormats[i], index))
+ 	  {
+ 	    pos.setIndex(index + choiceFormats[i].length());
+ 	    return new Double (choiceLimits[i]);
+ 	  }
+       }
+     pos.setErrorIndex(index);
+     return new Double (Double.NaN);
+   }
+ 
+   /**
+    * This method returns the highest possible double less than the 
+    * specified double.  If the specified double value is equal to
+    * <code>Double.NaN</code> then that is the value returned.
+    *
+    * @param d The specified double
+    *
+    * @return The highest double value less than the specified double.
+    */
+   public static final double previousDouble (double d)
+   {
+     return nextDouble (d, false);
+   }
+ 
+   /**
+    * This method sets new range terminators and format strings for this
+    * object.
+    *
+    * @param choiceLimits The new range terminators
+    * @param choiceFormats The new choice formats
+    */
+   public void setChoices (double[] choiceLimits, String[] choiceFormats)
+   {
+     if (choiceLimits == null || choiceFormats == null)
+       throw new NullPointerException ();
+     if (choiceLimits.length != choiceFormats.length)
+       throw new IllegalArgumentException ();
+     this.choiceFormats = (String[]) choiceFormats.clone();
+     this.choiceLimits = (double[]) choiceLimits.clone();
+   }
+ 
+   private void quoteString (StringBuffer dest, String text)
+   {
+     int max = text.length();
+     for (int i = 0; i < max; ++i)
+       {
+ 	char c = text.charAt(i);
+ 	if (c == '\'')
+ 	  {
+ 	    dest.append(c);
+ 	    dest.append(c);
+ 	  }
+ 	else if (c == '#' || c == '|' || c == '\u2064' || c == '<')
+ 	  {
+ 	    dest.append('\'');
+ 	    dest.append(c);
+ 	    dest.append('\'');
+ 	  }
+ 	else
+ 	  dest.append(c);
+       }
+   }
+ 
+   /**
+    * This method returns the range terminator list and format string list
+    * as a <code>String</code> suitable for using with the 
+    * <code>applyPattern</code> method.
+    *
+    * @return A pattern string for this object
+    */
+   public String toPattern ()
+   {
+     StringBuffer result = new StringBuffer ();
+     for (int i = 0; i < choiceLimits.length; ++i)
+       {
+ 	result.append(choiceLimits[i]);
+ 	result.append('#');
+ 	quoteString (result, choiceFormats[i]);
+       }
+     return result.toString();
+   }
+ 
+   /**
+    * This is the list of format strings.  Note that this variable is
+    * specified by the serialization spec of this class.
+    */
+   private String[] choiceFormats;
+ 
+   /**
+    * This is the list of range terminator values.  Note that this variable is
+    * specified by the serialization spec of this class.
+    */
+   private double[] choiceLimits;
+ 
+   // Number of mantissa bits in double.
+   private static final int mantissaBits = 52;
+   // Number of exponent bits in a double.
+   private static final int exponentBits = 11;
+ 
+   private static final long serialVersionUID = 1795184449645032964L;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/CollationElementIterator.java gcc-4.1.0/libjava/classpath/java/text/CollationElementIterator.java
*** gcc-4.0.2/libjava/classpath/java/text/CollationElementIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/CollationElementIterator.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,473 ----
+ /* CollationElementIterator.java -- Walks through collation elements
+    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004  Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.util.ArrayList;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 from http://www.javasoft.com.
+  * Status: Believed complete and correct to JDK 1.1.
+  */
+ 
+ /**
+  * This class walks through the character collation elements of a 
+  * <code>String</code> as defined by the collation rules in an instance of 
+  * <code>RuleBasedCollator</code>.  There is no public constructor for
+  * this class.  An instance is created by calling the
+  * <code>getCollationElementIterator</code> method on 
+  * <code>RuleBasedCollator</code>.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Guilhem Lavaux (guilhem.lavaux@free.fr)
+  */
+ public final class CollationElementIterator
+ {
+   /**
+    * This is a constant value that is returned to indicate that the end of 
+    * the string was encountered.
+    */
+   public static final int NULLORDER = -1;
+ 
+   /**
+    * This is the RuleBasedCollator this object was created from.
+    */
+   RuleBasedCollator collator;
+ 
+   /**
+    * This is the String that is being iterated over.
+    */
+   String text;
+ 
+   /**
+    * This is the index into the collation decomposition where we are currently scanning.
+    */
+   int index;
+ 
+   /**
+    * This is the index into the String where we are currently scanning.
+    */
+   int textIndex;
+ 
+   /**
+    * Array containing the collation decomposition of the
+    * text given to the constructor.
+    */
+   private RuleBasedCollator.CollationElement[] text_decomposition;
+ 
+   /**
+    * Array containing the index of the specified block.
+    */
+   private int[] text_indexes;
+ 
+   /**
+    * This method initializes a new instance of <code>CollationElementIterator</code>
+    * to iterate over the specified <code>String</code> using the rules in the
+    * specified <code>RuleBasedCollator</code>.
+    *
+    * @param collator The <code>RuleBasedCollation</code> used for calculating collation values
+    * @param text The <code>String</code> to iterate over.
+    */
+   CollationElementIterator(RuleBasedCollator collator, String text)
+   {
+     this.collator = collator;
+     
+     setText (text);    
+   }
+ 
+   RuleBasedCollator.CollationElement nextBlock()
+   {
+     if (index >= text_decomposition.length)
+       return null;
+     
+     RuleBasedCollator.CollationElement e = text_decomposition[index];
+     
+     textIndex = text_indexes[index+1];
+ 
+     index++;
+ 
+     return e;
+   }
+ 
+   RuleBasedCollator.CollationElement previousBlock()
+   {
+     if (index == 0)
+       return null;
+     
+     index--;
+     RuleBasedCollator.CollationElement e = text_decomposition[index];
+ 
+     textIndex = text_indexes[index+1];
+     
+     return e;
+   }
+ 
+   /**
+    * This method returns the collation ordering value of the next character sequence
+    * in the string (it may be an extended character following collation rules).
+    * This method will return <code>NULLORDER</code> if the
+    * end of the string was reached.
+    *
+    * @return The collation ordering value.
+    */
+   public int next()
+   {
+     RuleBasedCollator.CollationElement e = nextBlock();
+ 
+     if (e == null)
+       return NULLORDER;
+     
+     return e.getValue();
+   }
+ 
+   /**
+    * This method returns the collation ordering value of the previous character
+    * in the string.  This method will return <code>NULLORDER</code> if the
+    * beginning of the string was reached.
+    *
+    * @return The collation ordering value.
+    */
+   public int previous()
+   {
+     RuleBasedCollator.CollationElement e = previousBlock();
+ 
+     if (e == null)
+       return NULLORDER;
+     
+     return e.getValue();
+   }
+ 
+   /**
+    * This method returns the primary order value for the given collation
+    * value.
+    *
+    * @param order The collation value returned from <code>next()</code> or 
+    *              <code>previous()</code>.
+    *
+    * @return The primary order value of the specified collation value.  This is
+    *         the high 16 bits.
+    */
+   public static int primaryOrder(int order)
+   {
+     // From the JDK 1.2 spec.
+     return order >>> 16;
+   }
+ 
+   /**
+    * This method resets the internal position pointer to read from the
+    * beginning of the <code>String</code> again.
+    */
+   public void reset()
+   {
+     index = 0;
+     textIndex = 0;
+   }
+ 
+   /**
+    * This method returns the secondary order value for the given collation
+    * value.
+    *
+    * @param order The collation value returned from <code>next()</code> or 
+    *              <code>previous()</code>.
+    *
+    * @return The secondary order value of the specified collation value.  This 
+    *         is the bits 8-15.
+    */
+   public static short secondaryOrder(int order)
+   {
+     // From the JDK 1.2 spec.
+     return (short) ((order >>> 8) & 255);
+   }
+ 
+   /**
+    * This method returns the tertiary order value for the given collation
+    * value.
+    *
+    * @param order The collation value returned from <code>next()</code> or 
+    *              <code>previous()</code>.
+    *
+    * @return The tertiary order value of the specified collation value.  This 
+    *         is the low eight bits.
+    */
+   public static short tertiaryOrder(int order)
+   {
+     // From the JDK 1.2 spec.
+     return (short) (order & 255);
+   }
+ 
+   /**
+    * This method sets the <code>String</code> that it is iterating over
+    * to the specified <code>String</code>.
+    *
+    * @param text The new <code>String</code> to iterate over.
+    *
+    * @since 1.2
+    */
+   public void setText(String text)
+   {
+     int idx = 0;
+     int idx_idx = 0;
+     int alreadyExpanded = 0;
+     int idxToMove = 0;
+ 
+     this.text = text;
+     this.index = 0;
+ 
+     String work_text = text.intern();
+ 
+     ArrayList a_element = new ArrayList();
+     ArrayList a_idx = new ArrayList();
+ 
+     // Build element collection ordered as they come in "text".
+     while (idx < work_text.length())
+       {
+ 	String key, key_old;
+ 
+ 	Object object = null;
+ 	int p = 1;
+ 	
+ 	// IMPROVE: use a TreeMap with a prefix-ordering rule.
+ 	key_old = key = null;
+ 	do
+ 	  {
+ 	    if (object != null)
+ 	      key_old = key;
+ 	    key = work_text.substring (idx, idx+p);
+ 	    object = collator.prefix_tree.get (key);
+ 	    if (object != null && idx < alreadyExpanded)
+ 	      {
+ 		RuleBasedCollator.CollationElement prefix = (RuleBasedCollator.CollationElement)object;
+ 		if (prefix.expansion != null && 
+ 		    prefix.expansion.startsWith(work_text.substring(0, idx)))
+ 		{
+ 		  object = null;
+ 		  key = key_old;
+ 		}
+ 	      }
+ 	    p++;
+ 	  }
+ 	while (idx+p <= work_text.length());
+ 	
+ 	if (object == null)
+ 	  key = key_old;
+ 	
+ 	RuleBasedCollator.CollationElement prefix =
+ 	  (RuleBasedCollator.CollationElement) collator.prefix_tree.get (key);
+ 
+ 	/*
+ 	 * First case: There is no such sequence in the database.
+ 	 * We will have to build one from the context.
+ 	 */
+ 	if (prefix == null)
+ 	  {
+ 	    /*
+ 	     * We are dealing with sequences in an expansion. They
+ 	     * are treated as accented characters (tertiary order).
+ 	     */
+ 	    if (alreadyExpanded > 0)
+ 	      {
+ 		RuleBasedCollator.CollationElement e =
+ 		  collator.getDefaultAccentedElement (work_text.charAt (idx));
+ 		
+ 		a_element.add (e);
+ 		a_idx.add (new Integer(idx_idx));
+ 		idx++;
+ 		alreadyExpanded--;
+ 		if (alreadyExpanded == 0)
+ 		  {
+ 		    /* There is not any characters left in the expansion set.
+ 		     * We can increase the pointer in the source string.
+ 		     */
+ 		    idx_idx += idxToMove;
+ 		    idxToMove = 0; 
+ 		  }
+ 		else
+ 		  idx_idx++;
+ 	      }
+ 	    else
+ 	      {
+ 		/* This is a normal character. */
+ 		RuleBasedCollator.CollationElement e =
+ 		  collator.getDefaultElement (work_text.charAt (idx));
+ 		Integer i_ref = new Integer(idx_idx);
+ 
+ 		/* Don't forget to mark it as a special sequence so the
+ 		 * string can be ordered.
+ 		 */
+ 		a_element.add (RuleBasedCollator.SPECIAL_UNKNOWN_SEQ);
+ 		a_idx.add (i_ref);
+ 		a_element.add (e);
+ 		a_idx.add (i_ref);
+ 		idx_idx++;
+ 		idx++;
+ 	      }
+ 	    continue;
+ 	  }
+  
+ 	/*
+ 	 * Second case: Here we have found a matching sequence.
+ 	 * Here we have an expansion string prepend it to the "work text" and
+ 	 * add the corresponding sorting element. We must also mark 
+ 	 */
+ 	if (prefix.expansion != null)
+ 	  {
+ 	    work_text = prefix.expansion
+ 	      + work_text.substring (idx+prefix.key.length());
+ 	    idx = 0;
+ 	    a_element.add (prefix);
+ 	    a_idx.add (new Integer(idx_idx));
+ 	    if (alreadyExpanded == 0)
+ 	      idxToMove = prefix.key.length();
+ 	    alreadyExpanded += prefix.expansion.length()-prefix.key.length();
+ 	  }
+ 	else
+ 	  {
+ 	    /* Third case: the simplest. We have got the prefix and it
+ 	     * has not to be expanded.
+ 	     */
+ 	    a_element.add (prefix);
+ 	    a_idx.add (new Integer(idx_idx));
+ 	    idx += prefix.key.length();
+ 	    /* If the sequence is in an expansion, we must decrease the
+ 	     * counter.
+ 	     */
+ 	    if (alreadyExpanded > 0)
+ 	      {
+ 		alreadyExpanded -= prefix.key.length();
+ 		if (alreadyExpanded == 0)
+ 		  {
+ 		    idx_idx += idxToMove;
+ 		    idxToMove = 0;
+ 		  }
+ 	      }
+ 	    else
+ 	      idx_idx += prefix.key.length();
+ 	  }
+       }
+     
+     text_decomposition = (RuleBasedCollator.CollationElement[])
+ 	   a_element.toArray(new RuleBasedCollator.CollationElement[a_element.size()]);
+     text_indexes = new int[a_idx.size()+1];
+     for (int i = 0; i < a_idx.size(); i++) 
+       {
+ 	text_indexes[i] = ((Integer)a_idx.get(i)).intValue();
+       }
+     text_indexes[a_idx.size()] = text.length();
+   }
+ 
+   /**
+    * This method sets the <code>String</code> that it is iterating over
+    * to the <code>String</code> represented by the specified
+    * <code>CharacterIterator</code>.
+    *
+    * @param source The <code>CharacterIterator</code> containing the new
+    * <code>String</code> to iterate over.
+    */
+   public void setText(CharacterIterator source)
+   {
+     StringBuffer expand = new StringBuffer();
+ 
+     // For now assume we read from the beginning of the string.
+     for (char c = source.first();
+ 	 c != CharacterIterator.DONE;
+ 	 c = source.next())
+       expand.append(c);
+ 
+     setText(expand.toString());
+   }
+ 
+   /**
+    * This method returns the current offset into the <code>String</code>
+    * that is being iterated over.
+    *
+    * @return The iteration index position.
+    *
+    * @since 1.2
+    */
+   public int getOffset()
+   {
+     return textIndex;
+   }
+ 
+   /**
+    * This method sets the iteration index position into the current
+    * <code>String</code> to the specified value.  This value must not
+    * be negative and must not be greater than the last index position
+    * in the <code>String</code>.
+    *
+    * @param offset The new iteration index position.
+    *
+    * @exception IllegalArgumentException If the new offset is not valid.
+    */
+   public void setOffset(int offset)
+   {
+     if (offset < 0)
+       throw new IllegalArgumentException("Negative offset: " + offset);
+ 
+     if (offset > (text.length() - 1))
+       throw new IllegalArgumentException("Offset too large: " + offset);
+     
+     for (index = 0; index < text_decomposition.length; index++)
+       {	
+ 	if (offset <= text_indexes[index])
+ 	  break;
+       }
+     /*
+      * As text_indexes[0] == 0, we should not have to take care whether index is
+      * greater than 0. It is always.
+      */
+     if (text_indexes[index] == offset)
+       textIndex = offset;
+     else
+       textIndex = text_indexes[index-1];
+   }
+ 
+   /**
+    * This method returns the maximum length of any expansion sequence that
+    * ends with the specified collation order value.  (Whatever that means).
+    *
+    * @param value The collation order value
+    *
+    * @return The maximum length of an expansion sequence.
+    */
+   public int getMaxExpansion(int value)
+   {
+     return 1;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/CollationKey.java gcc-4.1.0/libjava/classpath/java/text/CollationKey.java
*** gcc-4.0.2/libjava/classpath/java/text/CollationKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/CollationKey.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,201 ----
+ /* CollationKey.java -- Precomputed collation value
+    Copyright (C) 1998, 1999, 2000, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.util.Arrays;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 from http://www.javasoft.com.
+  * Status: Believed complete and correct.
+  */
+ 
+ /**
+  * This class represents a pre-computed series of bits representing a
+  * <code>String</code> for under a particular <code>Collator</code>.  This
+  * value may be compared bitwise against another <code>CollationKey</code>
+  * representing a different <code>String</code> under the same
+  * <code>Collator</code> in a manner than is usually more efficient than
+  * using the raw <code>Collator</code> compare methods.  There is overhead
+  * associated with calculating this value, so it is generally not
+  * advisable to compute <code>CollationKey</code>'s unless multiple 
+  * comparisons against a <code>String</code> will be done.  (For example,
+  * in a sort routine).
+  * <p>
+  * This class cannot be instantiated directly.  Instead, a 
+  * <code>CollationKey</code> is created by calling the
+  * <code>getCollationKey</code> method on an instance of <code>Collator</code>.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @date March 25, 1999
+  */
+ public final class CollationKey implements Comparable
+ {
+   /**
+    * This is the <code>Collator</code> this object was created from.
+    */
+   private Collator collator;
+ 
+   /**
+    * This is the <code>String</code> this object represents.
+    */
+   private String originalText;
+ 
+   /**
+    * This is the bit value for this key.
+    */
+   private byte[] key;
+ 
+   CollationKey (Collator collator, String originalText, byte[] key)
+   {
+     this.collator = collator;
+     this.originalText = originalText;
+     this.key = key;
+   }
+ 
+   /**
+    * This method compares the specified object to this one.  An integer is 
+    * returned which indicates whether the specified object is less than, 
+    * greater than, or equal to this object.
+    *
+    * @param ck The <code>CollationKey</code> to compare against this one.
+    *
+    * @return A negative integer if this object is less than the specified object, 0 if it is equal or a positive integer if it is greater than the specified object.
+    */
+   public int compareTo (CollationKey ck)
+   {
+     int max = Math.min (key.length, ck.key.length);
+ 
+     for (int i = 0; i < max; ++i)
+       {
+ 	if (key[i] != ck.key[i])
+ 	  return key[i] - ck.key[i];
+       }
+ 
+     return key.length - ck.key.length;
+   }
+ 
+   /**
+    * This method compares the specified object to this one.  The specified
+    * object must be an instance of <code>CollationKey</code> or an exception
+    * will be thrown.  An integer is returned which indicates whether the
+    * specified object is less than, greater than, or equal to this object.
+    *
+    * @param obj The <code>Object</code> to compare against this one.
+    *
+    * @return A negative integer if this object is less than the specified object, 0 if it is equal or a positive integer if it is greater than the specified object.
+    */
+   public int compareTo (Object obj)
+   {
+     return compareTo ((CollationKey) obj);
+   }
+ 
+   /**
+    * This method tests the specified <code>Object</code> for equality with
+    * this object.  This will be true if and only if:
+    * <p>
+    * <ul>
+    * <li>The specified object must not be <code>null</code></li>
+    * <li>The specified object is an instance of <code>CollationKey</code>.</li>
+    * <li>The specified object was created from the same <code>Collator</code>
+    * as this object.</li>
+    * <li>The specified object has the same source string and bit key as
+    * this object.</li>
+    * </ul>
+    *
+    * @param obj The <code>Object</code> to test for equality.
+    *
+    * @return <code>true</code> if the specified object is equal to this one, <code>false</code> otherwise.
+    */
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof CollationKey))
+       return false;
+ 
+     CollationKey ck = (CollationKey) obj;
+ 
+     if (ck.collator != collator)
+       return false;
+ 
+     if (!ck.getSourceString ().equals (getSourceString ()))
+       return false;
+ 
+     if (! Arrays.equals (ck.toByteArray (), toByteArray ()))
+       return false;
+ 
+     return true;
+   }
+ 
+   /**
+    * This method returns the <code>String</code> that this object was created
+    * from.
+    *
+    * @return The source <code>String</code> for this object.
+    */
+   public String getSourceString()
+   {
+     return originalText;
+   }
+ 
+   /**
+    * This method returns a hash value for this object.  The hash value
+    * returned will be the hash code of the bit key so that identical bit
+    * keys will return the same value.
+    *
+    * @return A hash value for this object.
+    */
+   public int hashCode()
+   {
+     // We just follow BitSet instead of thinking up something new.
+     long h = originalText.hashCode();
+     for (int i = key.length - 1; i >= 0; --i)
+       h ^= key[i] * (i + 1);
+     return (int) ((h >> 32) ^ h);
+   }
+   
+   /**
+    * This method returns the collation bit sequence as a byte array.
+    *
+    * @return A byte array containing the collation bit sequence.
+    */
+   public byte[] toByteArray()
+   {
+     return key;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/Collator.java gcc-4.1.0/libjava/classpath/java/text/Collator.java
*** gcc-4.0.2/libjava/classpath/java/text/Collator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/Collator.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,400 ----
+ /* Collator.java -- Perform locale dependent String comparisons.
+    Copyright (C) 1998, 1999, 2000, 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.util.Comparator;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * This class is the abstract superclass of classes which perform 
+  * locale dependent <code>String</code> comparisons.  A caller requests
+  * an instance of <code>Collator</code> for a particular locale using
+  * the <code>getInstance()</code> static method in this class.  That method
+  * will return a locale specific subclass of <code>Collator</code> which
+  * can be used to perform <code>String</code> comparisons for that locale.
+  * If a subclass of <code>Collator</code> cannot be located for a particular
+  * locale, a default instance for the current locale will be returned.  
+  *
+  * In addition to setting the correct locale, there are two additional
+  * settings that can be adjusted to affect <code>String</code> comparisons:
+  * strength and decomposition.  The strength value determines the level
+  * of signficance of character differences required for them to sort
+  * differently.  (For example, whether or not capital letters are considered
+  * different from lower case letters).  The decomposition value affects how
+  * variants of the same character are treated for sorting purposes.  (For
+  * example, whether or not an accent is signficant or not).  These settings
+  * are described in detail in the documentation for the methods and values
+  * that are related to them.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @date March 18, 1999
+  */
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 from http://www.javasoft.com.
+  * Status: Mostly complete, but parts stubbed out.  Look for FIXME.
+  */
+ public abstract class Collator implements Comparator, Cloneable
+ {
+   /**
+    * This constant is a strength value which indicates that only primary
+    * differences between characters will be considered signficant.  As an
+    * example, two completely different English letters such as 'a' and 'b'
+    * are considered to have a primary difference.
+    */
+   public static final int PRIMARY = 0;
+   
+   /**
+    * This constant is a strength value which indicates that only secondary
+    * or primary differences between characters will be considered
+    * significant.  An example of a secondary difference between characters
+    * are instances of the same letter with different accented forms.
+    */
+   public static final int SECONDARY = 1;
+   
+   /**
+    * This constant is a strength value which indicates that tertiary,
+    * secondary, and primary differences will be considered during sorting.
+    * An example of a tertiary difference is capitalization of a given letter.
+    * This is the default value for the strength setting.
+    */
+   public static final int TERTIARY = 2;
+   
+   /**
+    * This constant is a strength value which indicates that any difference
+    * at all between character values are considered significant.
+    */
+   public static final int IDENTICAL = 3;
+   
+   /**
+    * This constant indicates that accented characters won't be decomposed
+    * when performing comparisons.  This will yield the fastest results, but
+    * will only work correctly in call cases for languages which do not
+    * use accents such as English.
+    */
+   public static final int NO_DECOMPOSITION = 0;
+   
+   /**
+    * This constant indicates that only characters which are canonical variants
+    * in Unicode 2.0 will be decomposed prior to performing comparisons.  This
+    * will cause accented languages to be sorted correctly.  This is the
+    * default decomposition value.
+    */
+   public static final int CANONICAL_DECOMPOSITION = 1;
+   
+   /**
+    * This constant indicates that both canonical variants and compatibility
+    * variants in Unicode 2.0 will be decomposed prior to performing
+    * comparisons.  This is the slowest mode, but is required to get the
+    * correct sorting for certain languages with certain special formats.
+    */
+   public static final int FULL_DECOMPOSITION = 2;
+ 
+   /**
+    * This method initializes a new instance of <code>Collator</code> to have
+    * the default strength (TERTIARY) and decomposition 
+    * (CANONICAL_DECOMPOSITION) settings.  This constructor is protected and
+    * is for use by subclasses only.  Non-subclass callers should use the
+    * static <code>getInstance()</code> methods of this class to instantiate
+    * <code>Collation</code> objects for the desired locale.
+    */
+   protected Collator ()
+   {
+     strength = TERTIARY;
+     decmp = CANONICAL_DECOMPOSITION;
+   }
+ 
+   /**
+    * This method compares the two <code>String</code>'s and returns an
+    * integer indicating whether or not the first argument is less than,
+    * equal to, or greater than the second argument.  The comparison is
+    * performed according to the rules of the locale for this 
+    * <code>Collator</code> and the strength and decomposition rules in
+    * effect.
+    *
+    * @param source The first object to compare
+    * @param target The second object to compare
+    *
+    * @return A negative integer if str1 &lt; str2, 0 if str1 == str2, or
+    * a positive integer if str1 &gt; str2. 
+    */
+   public abstract int compare (String source, String target);
+ 
+   /**
+    * This method compares the two <code>Object</code>'s and returns an
+    * integer indicating whether or not the first argument is less than,
+    * equal to, or greater than the second argument.  These two objects
+    * must be <code>String</code>'s or an exception will be thrown.
+    *
+    * @param o1 The first object to compare
+    * @param o2 The second object to compare
+    *
+    * @return A negative integer if obj1 &lt; obj2, 0 if obj1 == obj2, or
+    * a positive integer if obj1 &gt; obj2. 
+    *
+    * @exception ClassCastException If the arguments are not instances
+    * of <code>String</code>. 
+    */
+   public int compare (Object o1, Object o2)
+   {
+     return compare ((String) o1, (String) o2);
+   }
+ 
+   /**
+    * This method tests the specified object for equality against this
+    * object.  This will be true if and only if the following conditions are
+    * met:
+    * <ul>
+    * <li>The specified object is not <code>null</code>.</li>
+    * <li>The specified object is an instance of <code>Collator</code>.</li>
+    * <li>The specified object has the same strength and decomposition
+    * settings as this object.</li>
+    * </ul>
+    *
+    * @param obj The <code>Object</code> to test for equality against
+    *            this object. 
+    *
+    * @return <code>true</code> if the specified object is equal to
+    * this one, <code>false</code> otherwise.
+    */
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof Collator))
+       return false;
+     Collator c = (Collator) obj;
+     return decmp == c.decmp && strength == c.strength;
+   }
+ 
+   /**
+    * This method tests whether the specified <code>String</code>'s are equal
+    * according to the collation rules for the locale of this object and
+    * the current strength and decomposition settings.
+    *
+    * @param source The first <code>String</code> to compare
+    * @param target The second <code>String</code> to compare
+    *
+    * @return <code>true</code> if the two strings are equal,
+    * <code>false</code> otherwise. 
+    */
+   public boolean equals (String source, String target)
+   {
+     return compare (source, target) == 0;
+   }
+ 
+   /**
+    * This method returns a copy of this <code>Collator</code> object.
+    *
+    * @return A duplicate of this object.
+    */
+   public Object clone ()
+   {
+     try
+       {
+ 	return super.clone ();
+       }
+     catch (CloneNotSupportedException _)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * This method returns an array of <code>Locale</code> objects which is
+    * the list of locales for which <code>Collator</code> objects exist.
+    *
+    * @return The list of locales for which <code>Collator</code>'s exist.
+    */
+   public static synchronized Locale[] getAvailableLocales ()
+   {
+     // FIXME
+     Locale[] l = new Locale[1];
+     l[0] = Locale.US;
+     return l;
+   }
+ 
+   /**
+    * This method transforms the specified <code>String</code> into a
+    * <code>CollationKey</code> for faster comparisons.  This is useful when
+    * comparisons against a string might be performed multiple times, such
+    * as during a sort operation.
+    *
+    * @param source The <code>String</code> to convert.
+    *
+    * @return A <code>CollationKey</code> for the specified <code>String</code>.
+    */
+   public abstract CollationKey getCollationKey (String source);
+ 
+   /**
+    * This method returns the current decomposition setting for this
+    * object.  This * will be one of NO_DECOMPOSITION,
+    * CANONICAL_DECOMPOSITION, or * FULL_DECOMPOSITION.  See the
+    * documentation for those constants for an * explanation of this
+    * setting.
+    *
+    * @return The current decomposition setting.
+    */
+   public synchronized int getDecomposition ()
+   {
+     return decmp;
+   }
+ 
+   /**
+    * This method returns an instance of <code>Collator</code> for the
+    * default locale.
+    *
+    * @return A <code>Collator</code> for the default locale.
+    */
+   public static Collator getInstance ()
+   {
+     return getInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>Collator</code> for the
+    * specified locale.  If no <code>Collator</code> exists for the desired
+    * locale, a <code>Collator</code> for the default locale will be returned.
+    *
+    * @param loc The desired localed to load a <code>Collator</code> for.
+    *
+    * @return A <code>Collator</code> for the requested locale
+    */
+   public static Collator getInstance (Locale loc)
+   {
+     ResourceBundle res;
+     String pattern;
+     try
+       {
+ 	res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+ 				       loc, ClassLoader.getSystemClassLoader());
+ 	pattern = res.getString("collation_rules");
+       }
+     catch (MissingResourceException x)
+       {
+ 	pattern = "<0<1<2<3<4<5<6<7<8<9<A,a<b,B<c,C<d,D<e,E<f,F<g,G<h,H<i,I<j,J<k,K" +
+ 		"<l,L<m,M<n,N<o,O<p,P<q,Q<r,R<s,S<t,T<u,U<v,V<w,W<x,X<y,Y<z,Z";
+       }
+     try
+       {
+ 	return new RuleBasedCollator (pattern);
+       }
+     catch (ParseException x)
+       {
+ 	throw (InternalError)new InternalError().initCause(x);
+       }
+   }
+ 
+   /**
+    * This method returns the current strength setting for this object.  This
+    * will be one of PRIMARY, SECONDARY, TERTIARY, or IDENTICAL.  See the
+    * documentation for those constants for an explanation of this setting.
+    *
+    * @return The current strength setting.
+    */
+   public synchronized int getStrength ()
+   {
+     return strength;
+   }
+ 
+   /**
+    * This method returns a hash code value for this object.
+    *
+    * @return A hash value for this object.
+    */
+   public abstract int hashCode ();
+ 
+   /**
+    * This method sets the decomposition setting for this object to the
+    * specified value.  This must be one of NO_DECOMPOSITION,
+    * CANONICAL_DECOMPOSITION, or FULL_DECOMPOSITION.  Otherwise an
+    * exception will be thrown.  See the documentation for those
+    * contants for an explanation of this setting.
+    *
+    * @param mode The new decomposition setting.
+    *
+    * @exception IllegalArgumentException If the requested
+    * decomposition setting is not valid.
+    */
+   public synchronized void setDecomposition (int mode)
+   {
+     if (mode != NO_DECOMPOSITION
+ 	&& mode != CANONICAL_DECOMPOSITION
+ 	&& mode != FULL_DECOMPOSITION)
+       throw new IllegalArgumentException ();
+     decmp = mode;
+   }
+ 
+   /**
+    * This method sets the strength setting for this object to the specified
+    * value.  This must be one of PRIMARY, SECONDARY, TERTIARY, or IDENTICAL.
+    * Otherwise an exception is thrown. See the documentation for these
+    * constants for an explanation of this setting.
+    * 
+    * @param strength The new strength setting.
+    *
+    * @exception IllegalArgumentException If the requested strength
+    * setting value is not valid.
+    */
+   public synchronized void setStrength (int strength)
+   {
+     if (strength != PRIMARY && strength != SECONDARY
+ 	&& strength != TERTIARY && strength != IDENTICAL)
+       throw new IllegalArgumentException ();
+     this.strength = strength;
+   }
+ 
+   // Decompose a single character and append results to the buffer.
+   // FIXME: for libgcj this is a native method which handles
+   // decomposition.  For Classpath, for now, it does nothing.
+   final void decomposeCharacter (char c, StringBuffer buf)
+   {
+     buf.append (c);
+   }
+ 
+   /**
+    * This is the current collation decomposition setting.
+    */
+   int decmp;
+ 
+   /**
+    * This is the current collation strength setting.
+    */
+   int strength;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/DateFormat.java gcc-4.1.0/libjava/classpath/java/text/DateFormat.java
*** gcc-4.0.2/libjava/classpath/java/text/DateFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/DateFormat.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,921 ----
+ /* DateFormat.java -- Class for formatting/parsing date/times
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.io.InvalidObjectException;
+ import java.util.Calendar;
+ import java.util.Date;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ import java.util.TimeZone;
+ 
+ /**
+  * @author Per Bothner (bothner@cygnus.com)
+  * @date October 25, 1998.
+  */
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Mostly complete; search for FIXME to see omissions.
+  */
+ 
+ public abstract class DateFormat extends Format implements Cloneable
+ {
+   private static final long serialVersionUID = 7218322306649953788L;
+ 
+   // Names fixed by serialization spec.
+   protected Calendar calendar;
+   protected NumberFormat numberFormat;
+ 
+   // (Values determined using a test program.)
+   public static final int FULL = 0;
+   public static final int LONG = 1;
+   public static final int MEDIUM = 2;
+   public static final int SHORT = 3;
+   public static final int DEFAULT = MEDIUM;
+ 
+   /* These constants need to have these exact values.  They
+    * correspond to index positions within the localPatternChars
+    * string for a given locale.  Each locale may specify its
+    * own character for a particular field, but the position
+    * of these characters must correspond to an appropriate field
+    * number (as listed below), in order for their meaning to
+    * be determined.  For example, the US locale uses
+    * the string "GyMdkHmsSEDFwWahKzYeugAZ", where 'G' is the character
+    * for era, 'y' for year, and so on down to 'Z' for time zone.
+    */
+   /**
+    * Represents the position of the era
+    * pattern character in the array of
+    * localized pattern characters. 
+    * For example, 'AD' is an era used
+    * in the Gregorian calendar system.
+    * In the U.S. locale, this is 'G'.
+    */  
+   public static final int ERA_FIELD = 0;
+   /**
+    * Represents the position of the year
+    * pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'y'.
+    */
+   public static final int YEAR_FIELD = 1;
+   /**
+    * Represents the position of the month
+    * pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'M'.
+    */
+   public static final int MONTH_FIELD = 2;
+   /**
+    * Represents the position of the date
+    * or day of the month pattern character
+    * in the array of localized pattern
+    * characters.  In the U.S. locale,
+    * this is 'd'.
+    */
+   public static final int DATE_FIELD = 3;
+   /**
+    * Represents the position of the 24
+    * hour pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'k'.
+    * This field numbers hours from 1 to 24.
+    */
+   public static final int HOUR_OF_DAY1_FIELD = 4;
+   /**
+    * Represents the position of the 24
+    * hour pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'H'.
+    * This field numbers hours from 0 to 23.
+    */
+   public static final int HOUR_OF_DAY0_FIELD = 5;
+   /**
+    * Represents the position of the minute
+    * pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'm'.
+    */
+   public static final int MINUTE_FIELD = 6;
+   /**
+    * Represents the position of the second
+    * pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 's'.
+    */
+   public static final int SECOND_FIELD = 7;
+   /**
+    * Represents the position of the millisecond
+    * pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'S'.
+    */
+   public static final int MILLISECOND_FIELD = 8;
+   /**
+    * Represents the position of the day of the
+    * week pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'E'.
+    */
+   public static final int DAY_OF_WEEK_FIELD = 9;
+   /**
+    * Represents the position of the day of the
+    * year pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'D'.
+    */
+   public static final int DAY_OF_YEAR_FIELD = 10;
+   /**
+    * Represents the position of the day of the
+    * week in the month pattern character in the
+    * array of localized pattern characters.
+    * In the U.S. locale, this is 'F'.
+    */
+   public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11;
+   /**
+    * Represents the position of the week of the
+    * year pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'w'.
+    */
+   public static final int WEEK_OF_YEAR_FIELD = 12;
+   /**
+    * Represents the position of the week of the
+    * month pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'W'.
+    */
+   public static final int WEEK_OF_MONTH_FIELD = 13;
+   /**
+    * Represents the position of the am/pm
+    * pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'a'.
+    */
+   public static final int AM_PM_FIELD = 14;
+   /**
+    * Represents the position of the 12 
+    * hour pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'h'.
+    * This field numbers hours from 1 to 12.
+    */
+   public static final int HOUR1_FIELD = 15;
+   /**
+    * Represents the position of the 12 
+    * hour pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'K'.
+    * This field numbers hours from 0 to 11.
+    */
+   public static final int HOUR0_FIELD = 16;
+   /**
+    * Represents the position of the generic
+    * timezone pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'z'.
+    */
+   public static final int TIMEZONE_FIELD = 17;
+   /**
+    * Represents the position of the ISO year
+    * pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'Y'.
+    * This is a GNU extension in accordance with
+    * the CLDR data used.  This value may
+    * differ from the normal year value.
+    */
+   public static final int ISO_YEAR_FIELD = 18;
+   /**
+    * Represents the position of the localized
+    * day of the week pattern character in the
+    * array of localized pattern characters.
+    * In the U.S. locale, this is 'e'.
+    * This is a GNU extension in accordance with
+    * the CLDR data used.  This value only
+    * differs from the day of the week with
+    * numeric formatting, in which case the
+    * locale's first day of the week is used.
+    */
+   public static final int LOCALIZED_DAY_OF_WEEK_FIELD = 19;
+   /**
+    * Represents the position of the extended year
+    * pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'u'.
+    * This is a GNU extension in accordance with
+    * the CLDR data used.  This value modifies
+    * the year value, so as to incorporate the era.
+    * For example, in the Gregorian calendar system,
+    * the extended year is negative instead of being
+    * marked as BC.
+    */
+   public static final int EXTENDED_YEAR_FIELD = 20;
+   /**
+    * Represents the position of the modified Julian
+    * day pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'g'.
+    * This is a GNU extension in accordance with
+    * the CLDR data used.  This value differs
+    * from the standard Julian day in that days
+    * are marked from midnight onwards rather than
+    * noon, and the local time zone affects the value.
+    * In simple terms, it can be thought of as all
+    * the date fields represented as a single number.
+    */
+   public static final int MODIFIED_JULIAN_DAY_FIELD = 21;
+   /**
+    * Represents the position of the millisecond
+    * in the day pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'A'.
+    * This is a GNU extension in accordance with
+    * the CLDR data used.  This value represents
+    * all the time fields (excluding the time zone)
+    * numerically, giving the number of milliseconds
+    * into the day (e.g. 10 in the morning would
+    * be 10 * 60 * 60 * 1000).  Any daylight savings
+    * offset also affects this value.
+    */
+   public static final int MILLISECOND_IN_DAY_FIELD = 22;
+   /**
+    * Represents the position of the RFC822
+    * timezone pattern character in the array of
+    * localized pattern characters.
+    * In the U.S. locale, this is 'Z'.
+    * This is a GNU extension in accordance with
+    * the CLDR data used.  The value is the offset
+    * of the current time from GMT e.g. -0500 would
+    * be five hours prior to GMT.
+    */
+   public static final int RFC822_TIMEZONE_FIELD = 23;
+ 
+   public static class Field extends Format.Field
+   {
+     static final long serialVersionUID = 7441350119349544720L;
+     
+     private int calendarField;
+ 
+     public static final DateFormat.Field ERA
+ 	= new Field("era", Calendar.ERA);
+     public static final DateFormat.Field YEAR
+ 	= new Field("year", Calendar.YEAR);
+     public static final DateFormat.Field MONTH
+ 	= new Field("month", Calendar.MONTH);
+     public static final DateFormat.Field DAY_OF_MONTH
+ 	= new Field("day of month", Calendar.DAY_OF_MONTH);
+     public static final DateFormat.Field HOUR_OF_DAY1
+ 	= new Field("hour of day 1", Calendar.HOUR_OF_DAY);
+     public static final DateFormat.Field HOUR_OF_DAY0
+ 	= new Field("hour of day 0", Calendar.HOUR_OF_DAY);
+     public static final DateFormat.Field MINUTE
+ 	= new Field("minute", Calendar.MINUTE);
+     public static final DateFormat.Field SECOND
+ 	= new Field("second", Calendar.SECOND);
+     public static final DateFormat.Field MILLISECOND
+ 	= new Field("millisecond", Calendar.MILLISECOND);
+     public static final DateFormat.Field DAY_OF_WEEK
+ 	= new Field("day of week", Calendar.DAY_OF_WEEK);
+     public static final DateFormat.Field DAY_OF_YEAR
+ 	= new Field("day of year", Calendar.DAY_OF_YEAR);
+     public static final DateFormat.Field DAY_OF_WEEK_IN_MONTH
+ 	= new Field("day of week in month", Calendar.DAY_OF_WEEK_IN_MONTH);
+     public static final DateFormat.Field WEEK_OF_YEAR
+ 	= new Field("week of year", Calendar.WEEK_OF_YEAR);
+     public static final DateFormat.Field WEEK_OF_MONTH
+ 	= new Field("week of month", Calendar.WEEK_OF_MONTH);
+     public static final DateFormat.Field AM_PM
+ 	= new Field("am/pm", Calendar.AM_PM);
+     public static final DateFormat.Field HOUR1
+ 	= new Field("hour1", Calendar.HOUR);
+     public static final DateFormat.Field HOUR0
+ 	= new Field("hour0", Calendar.HOUR);
+     public static final DateFormat.Field TIME_ZONE
+ 	= new Field("timezone", Calendar.ZONE_OFFSET);
+     public static final DateFormat.Field ISO_YEAR
+ 	= new Field("iso year", Calendar.YEAR);
+     public static final DateFormat.Field LOCALIZED_DAY_OF_WEEK
+ 	= new Field("localized day of week", Calendar.DAY_OF_WEEK);
+     public static final DateFormat.Field EXTENDED_YEAR
+       = new Field("extended year", Calendar.YEAR);
+     public static final DateFormat.Field MODIFIED_JULIAN_DAY
+ 	= new Field("julian day", -1);
+     public static final DateFormat.Field MILLISECOND_IN_DAY
+ 	= new Field("millisecond in day", -1);
+     public static final DateFormat.Field RFC822_TIME_ZONE
+ 	= new Field("rfc822 timezone", Calendar.ZONE_OFFSET);
+ 
+     static final DateFormat.Field[] allFields =
+     {
+       ERA, YEAR, MONTH, DAY_OF_MONTH, HOUR_OF_DAY1,
+       HOUR_OF_DAY0, MINUTE, SECOND, MILLISECOND,
+       DAY_OF_WEEK, DAY_OF_YEAR, DAY_OF_WEEK_IN_MONTH,
+       WEEK_OF_YEAR, WEEK_OF_MONTH, AM_PM, HOUR1, HOUR0,
+       TIME_ZONE, ISO_YEAR, LOCALIZED_DAY_OF_WEEK,
+       EXTENDED_YEAR, MODIFIED_JULIAN_DAY, MILLISECOND_IN_DAY,
+       RFC822_TIME_ZONE
+     };
+ 
+     // For deserialization
+     private Field()
+     {
+       super("");
+     }
+ 
+     protected Field(String name, int calendarField)
+     {
+       super(name);
+       this.calendarField = calendarField;
+     }
+     
+     public int getCalendarField()
+     {
+       return calendarField;
+     }
+ 
+     public static Field ofCalendarField(int calendarField)
+     {
+       if (calendarField >= allFields.length || calendarField < 0)
+ 	throw new IllegalArgumentException("no such calendar field ("
+ 					   + calendarField + ")");
+       
+       return allFields[calendarField];
+     }
+     
+     protected Object readResolve() throws InvalidObjectException
+     {
+       String s = getName();
+ 
+       for (int i=0;i<allFields.length;i++)
+ 	if (s.equals(allFields[i].getName()))
+ 	  return allFields[i];
+       
+       throw new InvalidObjectException("no such DateFormat field called " + s);
+     }
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>DateFormat</code>.
+    */
+   protected DateFormat ()
+   {
+   }
+ 
+   /**
+    * This method tests this object for equality against the specified object.
+    * The two objects will be considered equal if an only if the specified
+    * object:
+    * <P>
+    * <ul>
+    * <li>Is not <code>null</code>.</li>
+    * <li>Is an instance of <code>DateFormat</code>.</li>
+    * <li>Has equal numberFormat field as this object.</li>
+    * <li>Has equal (Calendar) TimeZone rules as this object.</li>
+    * <li>Has equal (Calendar) isLenient results.</li> 
+    * <li>Has equal Calendar first day of week and minimal days in week
+    * values.</li>
+    * </ul>
+    * Note that not all properties of the Calendar are relevant for a
+    * DateFormat. For formatting only the fact whether or not the
+    * TimeZone has the same rules and whether the calendar is lenient
+    * and has the same week rules is compared for this implementation
+    * of equals. Other properties of the Calendar (such as the time)
+    * are not taken into account.
+    *
+    * @param obj The object to test for equality against.
+    * 
+    * @return <code>true</code> if the specified object is equal to this object,
+    * <code>false</code> otherwise.
+    */
+   public boolean equals (Object obj)
+   {
+     if (!(obj instanceof DateFormat))
+       return false;
+ 
+     DateFormat d = (DateFormat) obj;
+     TimeZone tz = getTimeZone();
+     TimeZone tzd = d.getTimeZone();
+     if (tz.hasSameRules(tzd))
+       if (isLenient() == d.isLenient())
+ 	{
+ 	  Calendar c = getCalendar();
+ 	  Calendar cd = d.getCalendar();
+ 	  if ((c == null && cd == null)
+ 	      ||
+ 	      (c.getFirstDayOfWeek() == cd.getFirstDayOfWeek()
+ 	       &&
+ 	       c.getMinimalDaysInFirstWeek()
+ 	       == cd.getMinimalDaysInFirstWeek()))
+ 	    return ((numberFormat == null && d.numberFormat == null)
+ 		    || numberFormat.equals(d.numberFormat));
+ 	}
+ 
+     return false;
+   }
+ 
+   /**
+    * This method returns a copy of this object.
+    *
+    * @return A copy of this object.
+    */
+   public Object clone ()
+   {
+     // We know the superclass just call's Object's generic cloner.
+     return super.clone ();
+   }
+ 
+   /**
+    * This method formats the specified <code>Object</code> into a date string
+    * and appends it to the specified <code>StringBuffer</code>.
+    * The specified object must be an instance of <code>Number</code> or
+    * <code>Date</code> or an <code>IllegalArgumentException</code> will be
+    * thrown.
+    *
+    * @param obj The <code>Object</code> to format.
+    * @param buf The <code>StringBuffer</code> to append the resultant
+    * <code>String</code> to.
+    * @param pos Is updated to the start and end index of the
+    * specified field.
+    *
+    * @return The <code>StringBuffer</code> supplied on input, with the
+    * formatted date/time appended.
+    */
+   public final StringBuffer format (Object obj,
+ 				    StringBuffer buf, FieldPosition pos)
+   {
+     if (obj instanceof Number)
+       obj = new Date(((Number) obj).longValue());
+     else if (! (obj instanceof Date))
+       throw new IllegalArgumentException
+ 	("Cannot format given Object as a Date");
+ 
+     return format ((Date) obj, buf, pos);
+   }
+ 
+   /**  
+     * Formats the date argument according to the pattern specified. 
+     *
+     * @param date The formatted date.
+     */
+   public final String format (Date date)
+   {
+     StringBuffer sb = new StringBuffer ();
+     format (date, sb, new FieldPosition (MONTH_FIELD));
+     return sb.toString();
+   }
+ 
+   /**
+    * This method formats a <code>Date</code> into a string and appends it
+    * to the specified <code>StringBuffer</code>.
+    *
+    * @param date The <code>Date</code> value to format.
+    * @param buf The <code>StringBuffer</code> to append the resultant
+    * <code>String</code> to.
+    * @param pos Is updated to the start and end index of the
+    * specified field.
+    *
+    * @return The <code>StringBuffer</code> supplied on input, with the
+    * formatted date/time appended.
+    */
+   public abstract StringBuffer format (Date date,
+ 				       StringBuffer buf, FieldPosition pos);
+ 
+   /**
+    * This method returns a list of available locales supported by this
+    * class.
+    */
+   public static Locale[] getAvailableLocales()
+   {
+     return Locale.getAvailableLocales();
+   }
+ 
+   /**
+     * This method returns the <code>Calendar</code> object being used by
+     * this object to parse/format datetimes.
+     *
+     * @return The <code>Calendar</code> being used by this object.
+     *
+     * @see java.util.Calendar
+     */
+   public Calendar getCalendar ()
+   {
+     return calendar;
+   }
+ 
+   private static DateFormat computeInstance (int style, Locale loc,
+                                              boolean use_date, boolean use_time)
+   {
+     return computeInstance (style, style, loc, use_date, use_time);
+   }
+ 
+   private static DateFormat computeInstance (int dateStyle, int timeStyle,
+                                              Locale loc, boolean use_date,
+                                              boolean use_time)
+   {
+     ResourceBundle res;
+     try
+       {
+ 	res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+ 				       loc, ClassLoader.getSystemClassLoader());
+       }
+     catch (MissingResourceException x)
+       {
+ 	res = null;
+       }
+ 
+     String pattern = null;
+     if (use_date)
+       {
+ 	String name, def;
+ 	switch (dateStyle)
+ 	  {
+ 	  case FULL:
+ 	    name = "fullDateFormat";
+ 	    def = "EEEE MMMM d, yyyy G";
+ 	    break;
+ 	  case LONG:
+ 	    name = "longDateFormat";
+ 	    def = "MMMM d, yyyy";
+ 	    break;
+ 	  case MEDIUM:
+ 	    name = "mediumDateFormat";
+ 	    def = "d-MMM-yy";
+ 	    break;
+ 	  case SHORT:
+ 	    name = "shortDateFormat";
+ 	    def = "M/d/yy";
+ 	    break;
+ 	  default:
+ 	    throw new IllegalArgumentException ();
+ 	  }
+ 	try
+ 	  {
+ 	    pattern = res == null ? def : res.getString(name);
+ 	  }
+ 	catch (MissingResourceException x)
+ 	  {
+ 	    pattern = def;
+ 	  }
+       }
+ 
+     if (use_time)
+       {
+ 	if (pattern == null)
+ 	  pattern = "";
+ 	else
+ 	  pattern += " ";
+ 
+ 	String name, def;
+ 	switch (timeStyle)
+ 	  {
+ 	  case FULL:
+ 	    name = "fullTimeFormat";
+ 	    def = "h:mm:ss;S 'o''clock' a z";
+ 	    break;
+ 	  case LONG:
+ 	    name = "longTimeFormat";
+ 	    def = "h:mm:ss a z";
+ 	    break;
+ 	  case MEDIUM:
+ 	    name = "mediumTimeFormat";
+ 	    def = "h:mm:ss a";
+ 	    break;
+ 	  case SHORT:
+ 	    name = "shortTimeFormat";
+ 	    def = "h:mm a";
+ 	    break;
+ 	  default:
+ 	    throw new IllegalArgumentException ();
+ 	  }
+ 
+ 	String s;
+ 	try
+ 	  {
+ 	    s = res == null ? def : res.getString(name);
+ 	  }
+ 	catch (MissingResourceException x)
+ 	  {
+ 	    s = def;
+ 	  }
+ 	pattern += s;
+       }
+ 
+     return new SimpleDateFormat (pattern, loc);
+   }
+ 
+  /**
+    * This method returns an instance of <code>DateFormat</code> that will
+    * format using the default formatting style for dates.
+    *
+    * @return A new <code>DateFormat</code> instance.
+    */
+   public static final DateFormat getDateInstance ()
+   {
+     return getDateInstance (DEFAULT, Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>DateFormat</code> that will
+    * format using the specified formatting style for dates.
+    *
+    * @param style The type of formatting to perform. 
+    * 
+    * @return A new <code>DateFormat</code> instance.
+    */
+   public static final DateFormat getDateInstance (int style)
+   {
+     return getDateInstance (style, Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>DateFormat</code> that will
+    * format using the specified formatting style for dates.  The specified
+    * localed will be used in place of the default.
+    *
+    * @param style The type of formatting to perform. 
+    * @param loc The desired locale.
+    * 
+    * @return A new <code>DateFormat</code> instance.
+    */
+   public static final DateFormat getDateInstance (int style, Locale loc)
+   {
+     return computeInstance (style, loc, true, false);
+   }
+ 
+   /**
+    * This method returns a new instance of <code>DateFormat</code> that
+    * formats both dates and times using the <code>SHORT</code> style.
+    *
+    * @return A new <code>DateFormat</code>instance.
+    */
+   public static final DateFormat getDateTimeInstance ()
+   {
+     return getDateTimeInstance (DEFAULT, DEFAULT, Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns a new instance of <code>DateFormat</code> that
+    * formats both dates and times using the <code>DEFAULT</code> style.
+    *
+    * @return A new <code>DateFormat</code>instance.
+    */
+   public static final DateFormat getDateTimeInstance (int dateStyle, 
+ 						      int timeStyle)
+   {
+     return getDateTimeInstance (dateStyle, timeStyle, Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns a new instance of <code>DateFormat</code> that
+    * formats both dates and times using the specified styles.
+    * 
+    * @param dateStyle The desired style for date formatting.
+    * @param timeStyle The desired style for time formatting
+    *
+    * @return A new <code>DateFormat</code>instance.
+    */
+   public static final DateFormat getDateTimeInstance (int dateStyle, 
+ 						      int timeStyle, 
+ 						      Locale loc)
+   {
+     return computeInstance (dateStyle, timeStyle, loc, true, true);
+   }
+ 
+   /**
+    * This method returns a new instance of <code>DateFormat</code> that
+    * formats both dates and times using the <code>SHORT</code> style.
+    *
+    * @return A new <code>DateFormat</code>instance.
+    */
+   public static final DateFormat getInstance ()
+   {
+     // JCL book says SHORT.
+     return getDateTimeInstance (SHORT, SHORT, Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns the <code>NumberFormat</code> object being used
+    * by this object to parse/format time values.
+    *
+    * @return The <code>NumberFormat</code> in use by this object.
+    */
+   public NumberFormat getNumberFormat ()
+   {
+     return numberFormat;
+   }
+ 
+  /**
+    * This method returns an instance of <code>DateFormat</code> that will
+    * format using the default formatting style for times.
+    *
+    * @return A new <code>DateFormat</code> instance.
+    */
+   public static final DateFormat getTimeInstance ()
+   {
+     return getTimeInstance (DEFAULT, Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>DateFormat</code> that will
+    * format using the specified formatting style for times.
+    *
+    * @param style The type of formatting to perform. 
+    * 
+    * @return A new <code>DateFormat</code> instance.
+    */
+   public static final DateFormat getTimeInstance (int style)
+   {
+     return getTimeInstance (style, Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>DateFormat</code> that will
+    * format using the specified formatting style for times.  The specified
+    * localed will be used in place of the default.
+    *
+    * @param style The type of formatting to perform. 
+    * @param loc The desired locale.
+    * 
+    * @return A new <code>DateFormat</code> instance.
+    */
+   public static final DateFormat getTimeInstance (int style, Locale loc)
+   {
+     return computeInstance (style, loc, false, true);
+   }
+ 
+   /**
+    * This method returns the <code>TimeZone</code> object being used by
+    * this instance.
+    *
+    * @return The time zone in use.
+    */
+   public TimeZone getTimeZone ()
+   {
+     return calendar.getTimeZone();
+   }
+ 
+   /**
+    * This method returns a hash value for this object.
+    * 
+    * @return A hash value for this object.
+    */
+   public int hashCode ()
+   {
+     if (numberFormat != null)
+       return numberFormat.hashCode();
+     else
+       return 0;
+   }
+ 
+   /**
+    * This method indicates whether or not the parsing of date and time
+    * values should be done in a lenient value.
+    *
+    * @return <code>true</code> if date/time parsing is lenient,
+    * <code>false</code> otherwise.
+    */
+   public boolean isLenient ()
+   {
+     return calendar.isLenient();
+   }
+ 
+   /**
+    * This method parses the specified date/time string.
+    *
+    * @param source The string to parse.
+    * @return The resultant date.
+    *
+    * @exception ParseException If the specified string cannot be parsed.
+    */
+   public Date parse (String source) throws ParseException
+   {
+     ParsePosition pos = new ParsePosition(0);
+     Date result = parse (source, pos);
+     if (result == null)
+       {
+ 	int index = pos.getErrorIndex();
+ 	if (index < 0)
+ 	  index = pos.getIndex();
+ 	throw new ParseException("invalid Date syntax in \""
+ 				 + source + '\"', index);
+       }
+     return result;
+   }
+ 
+   /** 
+    * This method parses the specified <code>String</code> into a 
+    * <code>Date</code>.  The <code>pos</code> argument contains the
+    * starting parse position on method entry and the ending parse
+    * position on method exit.
+    *
+    * @param source The string to parse.
+    * @param pos The starting parse position in entry, the ending parse
+    * position on exit.
+    *
+    * @return The parsed date, or <code>null</code> if the string cannot
+    * be parsed.
+    */
+   public abstract Date parse (String source, ParsePosition pos);
+ 
+   /**
+    * This method is identical to <code>parse(String, ParsePosition)</code>,
+    * but returns its result as an <code>Object</code> instead of a
+    * <code>Date</code>.
+    * 
+    * @param source The string to parse.
+    * @param pos The starting parse position in entry, the ending parse
+    * position on exit.
+    *
+    * @return The parsed date, or <code>null</code> if the string cannot
+    * be parsed.
+    */
+   public Object parseObject (String source, ParsePosition pos)
+   {
+     return parse(source, pos);
+   }
+ 
+   /**
+    * This method specified the <code>Calendar</code> that should be used 
+    * by this object to parse/format datetimes.
+    *
+    * @param calendar The new <code>Calendar</code> for this object.
+    *
+    * @see java.util.Calendar
+    */
+   public void setCalendar (Calendar calendar)
+   {
+     this.calendar = calendar;
+   }
+ 
+   /**
+    * This method specifies whether or not this object should be lenient in 
+    * the syntax it accepts while parsing date/time values.
+    *
+    * @param lenient <code>true</code> if parsing should be lenient,
+    * <code>false</code> otherwise.
+    */
+   public void setLenient (boolean lenient)
+   {
+     calendar.setLenient(lenient);
+   }
+ 
+   /**
+    * This method specifies the <code>NumberFormat</code> object that should
+    * be used by this object to parse/format times.
+    *
+    * @param numberFormat The <code>NumberFormat</code> in use by this object.
+    */
+   public void setNumberFormat (NumberFormat numberFormat)
+   {
+     this.numberFormat = numberFormat;
+   }
+ 
+   /**
+    * This method sets the time zone that should be used by this object.
+    *
+    * @param timeZone The new time zone.
+    */
+   public void setTimeZone (TimeZone timeZone)
+   {
+     calendar.setTimeZone(timeZone);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/DateFormatSymbols.java gcc-4.1.0/libjava/classpath/java/text/DateFormatSymbols.java
*** gcc-4.0.2/libjava/classpath/java/text/DateFormatSymbols.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/DateFormatSymbols.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,524 ----
+ /* DateFormatSymbols.java -- Format over a range of numbers
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * This class acts as container for locale specific date/time formatting
+  * information such as the days of the week and the months of the year.
+  * @author Per Bothner (bothner@cygnus.com)
+  * @date October 24, 1998.
+  */
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3.
+  * Status:  Believed complete and correct.
+  */
+ public class DateFormatSymbols implements java.io.Serializable, Cloneable
+ {
+   String[] ampms;
+   String[] eras;
+   private String localPatternChars;
+   String[] months;
+   String[] shortMonths;
+   String[] shortWeekdays;
+   String[] weekdays;
+   private String[][] zoneStrings;
+ 
+   private static final long serialVersionUID = -5987973545549424702L;
+ 
+   // The order of these prefixes must be the same as in DateFormat
+   private static final String[] formatPrefixes =
+   {
+     "full", "long", "medium", "short"
+   };
+ 
+   // These are each arrays with a value for SHORT, MEDIUM, LONG, FULL,
+   // and DEFAULT (constants defined in java.text.DateFormat).  While
+   // not part of the official spec, we need a way to get at locale-specific
+   // default formatting patterns.  They are declared package scope so
+   // as to be easily accessible where needed (DateFormat, SimpleDateFormat).
+   transient String[] dateFormats;
+   transient String[] timeFormats;
+ 
+   private static String[] getStringArray(ResourceBundle res, String name)
+   { 
+     return res.getString(name).split("\u00ae");
+   }
+ 
+   private String[][] getZoneStrings(ResourceBundle res)
+   {
+     try
+       {
+         int index = 0;
+         String data = res.getString("zoneStrings");
+ 	String[] zones = data.split("\u00a9");
+ 	String[][] array = new String[zones.length][];
+ 	for (int a = 0; a < zones.length; ++a)
+ 	  array[a] = zones[a].split("\u00ae");
+ 	return array;
+       }
+     catch (MissingResourceException e)
+       {
+ 	return new String[0][];
+       }
+   }
+   
+   private String[] formatsForKey(ResourceBundle res, String key) 
+   {
+     String[] values = new String[formatPrefixes.length];
+     
+     for (int i = 0; i < formatPrefixes.length; i++)
+       values[i] = res.getString(formatPrefixes[i] + key);
+   
+     return values;
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>DateFormatSymbols</code>
+    * by loading the date format information for the specified locale.
+    *
+    * @param locale The locale for which date formatting symbols should
+    *               be loaded. 
+    */
+   public DateFormatSymbols (Locale locale) throws MissingResourceException
+   {
+     ResourceBundle res
+       = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation", locale,
+       				 ClassLoader.getSystemClassLoader());
+ 
+     ampms = getStringArray(res, "ampms");
+     eras = getStringArray(res, "eras");
+     localPatternChars = res.getString("localPatternChars");
+     months = getStringArray(res, "months");
+     shortMonths = getStringArray(res, "shortMonths");
+     shortWeekdays = getStringArray(res, "shortWeekdays");
+     weekdays = getStringArray(res, "weekdays");
+     zoneStrings = getZoneStrings(res);
+     dateFormats = formatsForKey(res, "DateFormat");
+     timeFormats = formatsForKey(res, "TimeFormat");
+   }
+ 
+   /**
+    * This method loads the format symbol information for the default
+    * locale.
+    */
+   public DateFormatSymbols () throws MissingResourceException
+   {
+     this (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns the list of strings used for displaying AM or PM.
+    * This is a two element <code>String</code> array indexed by
+    * <code>Calendar.AM</code> and <code>Calendar.PM</code>
+    *
+    * @return The list of AM/PM display strings.
+    */
+   public String[] getAmPmStrings()
+   {
+     return ampms;
+   }
+ 
+   /**
+     * This method returns the list of strings used for displaying eras
+     * (e.g., "BC" and "AD").  This is a two element <code>String</code>
+     * array indexed by <code>Calendar.BC</code> and <code>Calendar.AD</code>.
+     *
+     * @return The list of era disply strings.
+     */
+   public String[] getEras()
+   {
+     return eras;
+   }
+ 
+   /**
+     * This method returns the pattern character information for this
+     * object.  This is an 18 character string that contains the characters
+     * that are used in creating the date formatting strings in 
+     * <code>SimpleDateFormat</code>.   The following are the character
+     * positions in the string and which format character they correspond
+     * to (the character in parentheses is the default value in the US English
+     * locale):
+     * <p>
+     * <ul>
+     * <li>0 - era (G)</li>
+     * <li>1 - year (y)</li>
+     * <li>2 - month (M)</li>
+     * <li>3 - day of month (d)</li>
+     * <li>4 - hour out of 12, from 1-12 (h)</li>
+     * <li>5 - hour out of 24, from 0-23 (H)</li>
+     * <li>6 - minute (m)</li>
+     * <li>7 - second (s)</li>
+     * <li>8 - millisecond (S)</li>
+     * <li>9 - date of week (E)</li>
+     * <li>10 - date of year (D)</li>
+     * <li>11 - day of week in month, eg. "4th Thur in Nov" (F)</li>
+     * <li>12 - week in year (w)</li>
+     * <li>13 - week in month (W)</li>
+     * <li>14 - am/pm (a)</li>
+     * <li>15 - hour out of 24, from 1-24 (k)</li>
+     * <li>16 - hour out of 12, from 0-11 (K)</li>
+     * <li>17 - time zone (z)</li>
+     * </ul>
+     *
+     * @return The format patter characters
+     */
+   public String getLocalPatternChars()
+   {
+     return localPatternChars;
+   }
+ 
+   /**
+    * This method returns the list of strings used for displaying month
+    * names (e.g., "January" and "February").  This is a thirteen element
+    * string array indexed by <code>Calendar.JANUARY</code> through
+    * <code>Calendar.UNDECEMBER</code>.  Note that there are thirteen
+    * elements because some calendars have thriteen months.
+    *
+    * @return The list of month display strings.
+    */
+   public String[] getMonths ()
+   {
+     return months;
+   }
+ 
+   /**
+    * This method returns the list of strings used for displaying abbreviated
+    * month names (e.g., "Jan" and "Feb").  This is a thirteen element
+    * <code>String</code> array indexed by <code>Calendar.JANUARY</code>
+    * through <code>Calendar.UNDECEMBER</code>.  Note that there are thirteen
+    * elements because some calendars have thirteen months.
+    *
+    * @return The list of abbreviated month display strings.
+    */
+   public String[] getShortMonths ()
+   {
+     return shortMonths;
+   }
+ 
+   /**
+    * This method returns the list of strings used for displaying abbreviated 
+    * weekday names (e.g., "Sun" and "Mon").  This is an eight element
+    * <code>String</code> array indexed by <code>Calendar.SUNDAY</code>
+    * through <code>Calendar.SATURDAY</code>.  Note that the first element
+    * of this array is ignored.
+    *
+    * @return This list of abbreviated weekday display strings.
+    */
+   public String[] getShortWeekdays ()
+   {
+     return shortWeekdays;
+   }
+ 
+   /**
+    * This method returns the list of strings used for displaying weekday
+    * names (e.g., "Sunday" and "Monday").  This is an eight element
+    * <code>String</code> array indexed by <code>Calendar.SUNDAY</code>
+    * through <code>Calendar.SATURDAY</code>.  Note that the first element
+    * of this array is ignored.
+    *
+    * @return This list of weekday display strings.
+    */
+   public String[] getWeekdays ()
+   {
+     return weekdays;
+   }
+ 
+   /**
+    * This method returns this list of localized timezone display strings.
+    * This is a two dimensional <code>String</code> array where each row in
+    * the array contains five values:
+    * <P>
+    * <ul>
+    * <li>0 - The non-localized time zone id string.</li>
+    * <li>1 - The long name of the time zone (standard time).</li>
+    * <li>2 - The short name of the time zone (standard time).</li>
+    * <li>3 - The long name of the time zone (daylight savings time).</li>
+    * <li>4 - the short name of the time zone (daylight savings time).</li>
+    * </ul>
+    *
+    * @return The list of time zone display strings.
+    */
+   public String[] [] getZoneStrings ()
+   {
+     return zoneStrings;
+   }
+ 
+   /**
+    * This method sets the list of strings used to display AM/PM values to
+    * the specified list.
+    * This is a two element <code>String</code> array indexed by
+    * <code>Calendar.AM</code> and <code>Calendar.PM</code>
+    *
+    * @param value The new list of AM/PM display strings.
+    */
+   public void setAmPmStrings (String[] value)
+   {
+     ampms = value;
+   }
+ 
+   /**
+    * This method sets the list of strings used to display time eras to
+    * to the specified list.
+    * This is a two element <code>String</code>
+    * array indexed by <code>Calendar.BC</code> and <code>Calendar.AD</code>.
+    *
+    * @param labels The new list of era display strings.
+    */
+   public void setEras (String[] labels)
+   {
+     eras = labels;
+   }
+ 
+   /**
+     * This method sets the list of characters used to specific date/time
+     * formatting strings.
+     * This is an 18 character string that contains the characters
+     * that are used in creating the date formatting strings in 
+     * <code>SimpleDateFormat</code>.   The following are the character
+     * positions in the string and which format character they correspond
+     * to (the character in parentheses is the default value in the US English
+     * locale):
+     * <p>
+     * <ul>
+     * <li>0 - era (G)</li>
+     * <li>1 - year (y)</li>
+     * <li>2 - month (M)</li>
+     * <li>3 - day of month (d)</li>
+     * <li>4 - hour out of 12, from 1-12 (h)</li>
+     * <li>5 - hour out of 24, from 0-23 (H)</li>
+     * <li>6 - minute (m)</li>
+     * <li>7 - second (s)</li>
+     * <li>8 - millisecond (S)</li>
+     * <li>9 - date of week (E)</li>
+     * <li>10 - date of year (D)</li>
+     * <li>11 - day of week in month, eg. "4th Thur in Nov" (F)</li>
+     * <li>12 - week in year (w)</li>
+     * <li>13 - week in month (W)</li>
+     * <li>14 - am/pm (a)</li>
+     * <li>15 - hour out of 24, from 1-24 (k)</li>
+     * <li>16 - hour out of 12, from 0-11 (K)</li>
+     * <li>17 - time zone (z)</li>
+     * </ul>
+     *
+     * @param chars The new format pattern characters
+     */
+   public void setLocalPatternChars (String chars)
+   {
+     localPatternChars = chars;
+   }
+ 
+   /**
+     * This method sets the list of strings used to display month names.
+     * This is a thirteen element
+     * string array indexed by <code>Calendar.JANUARY</code> through
+     * <code>Calendar.UNDECEMBER</code>.  Note that there are thirteen
+     * elements because some calendars have thriteen months.
+     *
+     * @param labels The list of month display strings.
+     */
+   public void setMonths (String[] labels)
+   {
+     months = labels;
+   }
+ 
+   /**
+    * This method sets the list of strings used to display abbreviated month
+    * names.
+    * This is a thirteen element
+    * <code>String</code> array indexed by <code>Calendar.JANUARY</code>
+    * through <code>Calendar.UNDECEMBER</code>.  Note that there are thirteen
+    * elements because some calendars have thirteen months.
+    *
+    * @param labels The new list of abbreviated month display strings.
+    */
+   public void setShortMonths (String[] labels)
+   {
+     shortMonths = labels;
+   }
+ 
+   /**
+    * This method sets the list of strings used to display abbreviated
+    * weekday names.
+    * This is an eight element
+    * <code>String</code> array indexed by <code>Calendar.SUNDAY</code>
+    * through <code>Calendar.SATURDAY</code>.  Note that the first element
+    * of this array is ignored.
+    *
+    * @param labels This list of abbreviated weekday display strings.
+    */
+   public void setShortWeekdays (String[] labels)
+   {
+     shortWeekdays = labels;
+   }
+ 
+   /**
+    * This method sets the list of strings used to display weekday names.
+    * This is an eight element
+    * <code>String</code> array indexed by <code>Calendar.SUNDAY</code>
+    * through <code>Calendar.SATURDAY</code>.  Note that the first element
+    * of this array is ignored.
+    *
+    * @param labels This list of weekday display strings.
+    */
+   public void setWeekdays (String[] labels)
+   {
+     weekdays = labels;
+   }
+ 
+   /**
+    * This method sets the list of display strings for time zones.
+    * This is a two dimensional <code>String</code> array where each row in
+    * the array contains five values:
+    * <P>
+    * <ul>
+    * <li>0 - The non-localized time zone id string.</li>
+    * <li>1 - The long name of the time zone (standard time).</li>
+    * <li>2 - The short name of the time zone (standard time).</li>
+    * <li>3 - The long name of the time zone (daylight savings time).</li>
+    * <li>4 - the short name of the time zone (daylight savings time).</li>
+    * </ul>
+    *
+    * @params zones The list of time zone display strings.
+    */
+   public void setZoneStrings (String[][] zones)
+   {
+     zoneStrings = zones;
+   }
+ 
+   /* Does a "deep" equality test - recurses into arrays. */
+   private static boolean equals (Object x, Object y)
+   {
+     if (x == y)
+       return true;
+     if (x == null || y == null)
+       return false;
+     if (! (x instanceof Object[]) || ! (y instanceof Object[]))
+       return x.equals(y);
+     Object[] xa = (Object[]) x;
+     Object[] ya = (Object[]) y;
+     if (xa.length != ya.length)
+       return false;
+     for (int i = xa.length;  --i >= 0; )
+       {
+ 	if (! equals(xa[i], ya[i]))
+ 	  return false;
+       }
+     return true;
+   }
+ 
+   private static int hashCode (Object x)
+   {
+     if (x == null)
+       return 0;
+     if (! (x instanceof Object[]))
+       return x.hashCode();
+     Object[] xa = (Object[]) x;
+     int hash = 0;
+     for (int i = 0;  i < xa.length;  i++)
+       hash = 37 * hashCode(xa[i]);
+     return hash;
+   }
+ 
+   /**
+    * This method tests a specified object for equality against this object.
+    * This will be true if and only if the specified object:
+    * <p>
+    * <ul>
+    * <li> Is not <code>null</code>.</li>
+    * <li> Is an instance of <code>DateFormatSymbols</code>.</li>
+    * <li> Contains identical formatting symbols to this object.</li>
+    * </ul>
+    * 
+    * @param obj The <code>Object</code> to test for equality against.
+    *
+    * @return <code>true</code> if the specified object is equal to this one,
+    * <code>false</code> otherwise.
+    */
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof DateFormatSymbols))
+       return false;
+     DateFormatSymbols other = (DateFormatSymbols) obj;
+     return (equals(ampms, other.ampms)
+ 	    && equals(eras, other.eras)
+ 	    && equals(localPatternChars, other.localPatternChars)
+ 	    && equals(months, other.months)
+ 	    && equals(shortMonths, other.shortMonths)
+ 	    && equals(shortWeekdays, other.shortWeekdays)
+ 	    && equals(weekdays, other.weekdays)
+ 	    && equals(zoneStrings, other.zoneStrings));
+   }
+ 
+   /**
+    * Returns a new copy of this object.
+    *
+    * @return A copy of this object
+    */
+   public Object clone ()
+   {
+     try
+       {
+         return super.clone ();
+       } 
+     catch (CloneNotSupportedException e) 
+       {
+         return null;
+       }
+   }
+ 
+   /**
+    * This method returns a hash value for this object.
+    *
+    * @return A hash value for this object.
+    */
+   public int hashCode ()
+   {
+     return (hashCode(ampms)
+ 	    ^ hashCode(eras)
+ 	    ^ hashCode(localPatternChars)
+ 	    ^ hashCode(months)
+ 	    ^ hashCode(shortMonths)
+ 	    ^ hashCode(shortWeekdays)
+ 	    ^ hashCode(weekdays)
+ 	    ^ hashCode(zoneStrings));
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/DecimalFormat.java gcc-4.1.0/libjava/classpath/java/text/DecimalFormat.java
*** gcc-4.0.2/libjava/classpath/java/text/DecimalFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/DecimalFormat.java	Sat Feb  4 20:21:48 2006
***************
*** 0 ****
--- 1,1437 ----
+ /* DecimalFormat.java -- Formats and parses numbers
+    Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.text;
+ 
+ import gnu.java.text.AttributedFormatBuffer;
+ import gnu.java.text.FormatBuffer;
+ import gnu.java.text.FormatCharacterIterator;
+ import gnu.java.text.StringFormatBuffer;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.util.Currency;
+ import java.util.HashMap;
+ import java.util.Locale;
+ 
+ /**
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @date March 4, 1999
+  */
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 from http://www.javasoft.com.
+  * Status:  Believed complete and correct to 1.2.
+  * Note however that the docs are very unclear about how format parsing
+  * should work.  No doubt there are problems here.
+  */
+ public class DecimalFormat extends NumberFormat
+ {
+   // This is a helper for applyPatternWithSymbols.  It reads a prefix
+   // or a suffix.  It can cause some side-effects.
+   private int scanFix (String pattern, int index, FormatBuffer buf,
+                        String patChars, DecimalFormatSymbols syms,
+                        boolean is_suffix)
+     {
+     int len = pattern.length();
+     boolean quoteStarted = false;
+     buf.clear();
+     
+     boolean multiplierSet = false;
+     while (index < len)
+       {
+ 	char c = pattern.charAt(index);
+ 
+ 	if (quoteStarted)
+ 	  {
+ 	    if (c == '\'')
+ 	      quoteStarted = false;
+ 	    else
+ 	      buf.append(c);
+ 	    index++;
+ 	    continue;
+ 	  }
+ 
+ 	if (c == '\'' && index + 1 < len
+ 	    && pattern.charAt(index + 1) == '\'')
+ 	  {
+ 	    buf.append(c);
+ 	    index++;
+ 	  }
+ 	else if (c == '\'')
+ 	  {
+ 	    quoteStarted = true;
+ 	  }
+ 	else if (c == '\u00a4')
+ 	  {
+ 			/* Currency interpreted later */
+ 			buf.append(c);
+ 		}
+ 	else if (c == syms.getPercent())
+ 	  {
+ 	    if (multiplierSet)
+ 	      throw new IllegalArgumentException ("multiplier already set " +
+ 						  "- index: " + index);
+ 	    multiplierSet = true;
+ 	    multiplier = 100;
+ 	    buf.append(c, NumberFormat.Field.PERCENT);
+ 	  }
+ 	else if (c == syms.getPerMill())
+ 	  {
+ 	    if (multiplierSet)
+ 	      throw new IllegalArgumentException ("multiplier already set " +
+ 						  "- index: " + index);
+ 	    multiplierSet = true;
+ 	    multiplier = 1000;
+ 	    buf.append(c, NumberFormat.Field.PERMILLE);
+ 	  }
+ 	else if (patChars.indexOf(c) != -1)
+ 	  {
+ 	    // This is a pattern character.
+ 	    break;
+ 	  }
+ 	else
+ 		{
+ 			buf.append(c);
+ 		}
+ 	index++;
+       }
+ 
+     if (quoteStarted)
+       throw new IllegalArgumentException ("pattern is lacking a closing quote");
+ 
+     return index;
+   }
+ 
+   // A helper which reads a number format.
+   private int scanFormat (String pattern, int index, String patChars,
+                           DecimalFormatSymbols syms, boolean is_positive)
+   {
+     int max = pattern.length();
+ 
+     int countSinceGroup = 0;
+     int zeroCount = 0;
+     boolean saw_group = false;
+ 
+     //
+     // Scan integer part.
+     //
+     while (index < max)
+       {
+ 	char c = pattern.charAt(index);
+ 
+ 	if (c == syms.getDigit())
+ 	  {
+ 	    if (zeroCount > 0)
+ 	      throw new IllegalArgumentException ("digit mark following " +
+ 						  "zero - index: " + index);
+ 	    ++countSinceGroup;
+ 	  }
+ 	else if (c == syms.getZeroDigit())
+ 	  {
+ 	    ++zeroCount;
+ 	    ++countSinceGroup;
+ 	  }
+ 	else if (c == syms.getGroupingSeparator())
+ 	  {
+ 	    countSinceGroup = 0;
+ 	    saw_group = true;
+ 	  }
+ 	else
+ 	  break;
+ 
+ 	++index;
+       }
+ 
+     // We can only side-effect when parsing the positive format.
+     if (is_positive)
+       {
+ 	groupingUsed = saw_group;
+ 	groupingSize = (byte) countSinceGroup;
+ 	// Checking "zeroCount > 0" avoids 0 being formatted into "" with "#".
+ 	if (zeroCount > 0)
+ 	  minimumIntegerDigits = zeroCount;
+       }
+ 
+     // Early termination.
+     if (index == max || pattern.charAt(index) == syms.getGroupingSeparator())
+       {
+ 	if (is_positive)
+ 	  decimalSeparatorAlwaysShown = false;
+ 	return index;
+       }
+ 
+     if (pattern.charAt(index) == syms.getDecimalSeparator())
+       {
+ 	++index;
+ 
+ 	//
+ 	// Scan fractional part.
+ 	//
+ 	int hashCount = 0;
+ 	zeroCount = 0;
+ 	while (index < max)
+ 	  {
+ 	    char c = pattern.charAt(index);
+ 	    if (c == syms.getZeroDigit())
+ 	      {
+ 		if (hashCount > 0)
+ 		  throw new IllegalArgumentException ("zero mark " +
+ 						      "following digit - index: " + index);
+ 		++zeroCount;
+ 	      }
+ 	    else if (c == syms.getDigit())
+ 	      {
+ 		++hashCount;
+ 	      }
+ 	    else if (c != syms.getExponential()
+ 		     && c != syms.getPatternSeparator()
+ 		     && c != syms.getPercent()
+ 		     && c != syms.getPerMill()
+ 		     && patChars.indexOf(c) != -1)
+ 	      throw new IllegalArgumentException ("unexpected special " +
+ 						  "character - index: " + index);
+ 	    else
+ 	      break;
+ 
+ 	    ++index;
+ 	  }
+ 
+ 	if (is_positive)
+ 	  {
+ 	    maximumFractionDigits = hashCount + zeroCount;
+ 	    minimumFractionDigits = zeroCount;
+ 	  }
+ 
+ 	if (index == max)
+ 	  return index;
+       }
+ 
+     if (pattern.charAt(index) == syms.getExponential())
+       {
+ 	//
+ 	// Scan exponential format.
+ 	//
+ 	zeroCount = 0;
+ 	++index;
+ 	while (index < max)
+ 	  {
+ 	    char c = pattern.charAt(index);
+ 	    if (c == syms.getZeroDigit())
+ 	      ++zeroCount;
+ 	    else if (c == syms.getDigit())
+ 	      {
+ 		if (zeroCount > 0)
+ 		  throw new
+ 		    IllegalArgumentException ("digit mark following zero " +
+ 					      "in exponent - index: " +
+ 					      index);
+ 	      }
+ 	    else if (patChars.indexOf(c) != -1)
+ 	      throw new IllegalArgumentException ("unexpected special " +
+ 						  "character - index: " +
+ 						  index);
+ 	    else
+ 	      break;
+ 
+ 	    ++index;
+ 	  }
+ 
+ 	if (is_positive)
+ 	  {
+ 	    useExponentialNotation = true;
+ 	    minExponentDigits = (byte) zeroCount;
+ 	  }
+ 
+ 	maximumIntegerDigits = groupingSize;
+ 	groupingSize = 0;
+ 	if (maximumIntegerDigits > minimumIntegerDigits && maximumIntegerDigits > 0)
+ 	  {
+ 	    minimumIntegerDigits = 1;
+ 	    exponentRound = maximumIntegerDigits;
+ 	  }
+ 	else
+ 	  exponentRound = 1;
+       }
+ 
+     return index;
+   }
+ 
+   // This helper function creates a string consisting of all the
+   // characters which can appear in a pattern and must be quoted.
+   private String patternChars (DecimalFormatSymbols syms)
+   {
+     StringBuffer buf = new StringBuffer ();
+     buf.append(syms.getDecimalSeparator());
+     buf.append(syms.getDigit());
+     buf.append(syms.getExponential());
+     buf.append(syms.getGroupingSeparator());
+     // Adding this one causes pattern application to fail.
+     // Of course, omitting is causes toPattern to fail.
+     // ... but we already have bugs there.  FIXME.
+     // buf.append(syms.getMinusSign());
+     buf.append(syms.getPatternSeparator());
+     buf.append(syms.getPercent());
+     buf.append(syms.getPerMill());
+     buf.append(syms.getZeroDigit());
+     buf.append('\u00a4');
+     return buf.toString();
+   }
+ 
+   private void applyPatternWithSymbols(String pattern, DecimalFormatSymbols syms)
+   {
+     // Initialize to the state the parser expects.
+     negativePrefix = "";
+     negativeSuffix = "";
+     positivePrefix = "";
+     positiveSuffix = "";
+     decimalSeparatorAlwaysShown = false;
+     groupingSize = 0;
+     minExponentDigits = 0;
+     multiplier = 1;
+     useExponentialNotation = false;
+     groupingUsed = false;
+     maximumFractionDigits = 0;
+     maximumIntegerDigits = MAXIMUM_INTEGER_DIGITS;
+     minimumFractionDigits = 0;
+     minimumIntegerDigits = 1;
+ 
+     AttributedFormatBuffer buf = new AttributedFormatBuffer ();
+     String patChars = patternChars (syms);
+ 
+     int max = pattern.length();
+     int index = scanFix (pattern, 0, buf, patChars, syms, false);
+     buf.sync();
+     positivePrefix = buf.getBuffer().toString();
+     positivePrefixRanges = buf.getRanges();
+     positivePrefixAttrs = buf.getAttributes();
+ 
+     index = scanFormat (pattern, index, patChars, syms, true);
+ 
+     index = scanFix (pattern, index, buf, patChars, syms, true);
+     buf.sync();
+     positiveSuffix = buf.getBuffer().toString();
+     positiveSuffixRanges = buf.getRanges();
+     positiveSuffixAttrs = buf.getAttributes();
+ 
+     if (index == pattern.length())
+       {
+ 	// No negative info.
+ 	negativePrefix = null;
+ 	negativeSuffix = null;
+       }
+     else
+       {
+ 	if (pattern.charAt(index) != syms.getPatternSeparator())
+ 	  throw new IllegalArgumentException ("separator character " +
+ 					      "expected - index: " + index);
+ 
+ 	index = scanFix (pattern, index + 1, buf, patChars, syms, false);
+ 	buf.sync();
+ 	negativePrefix = buf.getBuffer().toString();
+ 	negativePrefixRanges = buf.getRanges();
+ 	negativePrefixAttrs = buf.getAttributes();
+ 
+ 	// We parse the negative format for errors but we don't let
+ 	// it side-effect this object.
+ 	index = scanFormat (pattern, index, patChars, syms, false);
+ 
+ 	index = scanFix (pattern, index, buf, patChars, syms, true);
+ 	buf.sync();
+ 	negativeSuffix = buf.getBuffer().toString();
+ 	negativeSuffixRanges = buf.getRanges();
+ 	negativeSuffixAttrs = buf.getAttributes();
+ 
+ 	if (index != pattern.length())
+ 	  throw new IllegalArgumentException ("end of pattern expected " +
+ 					      "- index: " + index);
+       }
+   }
+ 
+   public void applyLocalizedPattern (String pattern)
+   {
+     // JCL p. 638 claims this throws a ParseException but p. 629
+     // contradicts this.  Empirical tests with patterns of "0,###.0"
+     // and "#.#.#" corroborate the p. 629 statement that an
+     // IllegalArgumentException is thrown.
+     applyPatternWithSymbols (pattern, symbols);
+   }
+ 
+   public void applyPattern (String pattern)
+   {
+     // JCL p. 638 claims this throws a ParseException but p. 629
+     // contradicts this.  Empirical tests with patterns of "0,###.0"
+     // and "#.#.#" corroborate the p. 629 statement that an
+     // IllegalArgumentException is thrown.
+     applyPatternWithSymbols (pattern, nonLocalizedSymbols);
+   }
+ 
+   public Object clone ()
+   {
+     DecimalFormat c = (DecimalFormat) super.clone ();
+     c.symbols = (DecimalFormatSymbols) symbols.clone ();
+     return c;
+   }
+ 
+   /**
+    * Constructs a <code>DecimalFormat</code> which uses the default
+    * pattern and symbols.
+    */
+   public DecimalFormat ()
+   {
+     this ("#,##0.###");
+   }
+ 
+   /**
+    * Constructs a <code>DecimalFormat</code> which uses the given
+    * pattern and the default symbols for formatting and parsing.
+    *
+    * @param pattern the non-localized pattern to use.
+    * @throws NullPointerException if any argument is null.
+    * @throws IllegalArgumentException if the pattern is invalid.
+    */
+   public DecimalFormat (String pattern)
+   {
+     this (pattern, new DecimalFormatSymbols ());
+   }
+ 
+   /**
+    * Constructs a <code>DecimalFormat</code> using the given pattern
+    * and formatting symbols.  This construction method is used to give
+    * complete control over the formatting process.  
+    *
+    * @param pattern the non-localized pattern to use.
+    * @param symbols the set of symbols used for parsing and formatting.
+    * @throws NullPointerException if any argument is null.
+    * @throws IllegalArgumentException if the pattern is invalid.
+    */
+   public DecimalFormat(String pattern, DecimalFormatSymbols symbols)
+   {
+     this.symbols = (DecimalFormatSymbols) symbols.clone();
+     applyPattern(pattern);
+   }
+ 
+   private boolean equals(String s1, String s2)
+   {
+     if (s1 == null || s2 == null)
+       return s1 == s2;
+     return s1.equals(s2);
+   }
+ 
+   /**
+    * Tests this instance for equality with an arbitrary object.  This method
+    * returns <code>true</code> if:
+    * <ul>
+    * <li><code>obj</code> is not <code>null</code>;</li>
+    * <li><code>obj</code> is an instance of <code>DecimalFormat</code>;</li>
+    * <li>this instance and <code>obj</code> have the same attributes;</li>
+    * </ul>
+    * 
+    * @param obj  the object (<code>null</code> permitted).
+    * 
+    * @return A boolean.
+    */
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof DecimalFormat))
+       return false;
+     DecimalFormat dup = (DecimalFormat) obj;
+     return (decimalSeparatorAlwaysShown == dup.decimalSeparatorAlwaysShown 
+            && groupingUsed == dup.groupingUsed 
+            && groupingSize == dup.groupingSize 
+            && multiplier == dup.multiplier
+            && useExponentialNotation == dup.useExponentialNotation
+            && minExponentDigits == dup.minExponentDigits
+            && minimumIntegerDigits == dup.minimumIntegerDigits
+            && maximumIntegerDigits == dup.maximumIntegerDigits
+            && minimumFractionDigits == dup.minimumFractionDigits
+            && maximumFractionDigits == dup.maximumFractionDigits
+            && equals(negativePrefix, dup.negativePrefix)
+            && equals(negativeSuffix, dup.negativeSuffix)
+            && equals(positivePrefix, dup.positivePrefix)
+            && equals(positiveSuffix, dup.positiveSuffix)
+            && symbols.equals(dup.symbols));
+   }
+ 
+   private void formatInternal (double number, FormatBuffer dest,
+ 			       FieldPosition fieldPos)
+   {
+     // A very special case.
+     if (Double.isNaN(number))
+       {
+ 	dest.append(symbols.getNaN());
+ 	if (fieldPos != null && 
+ 	    (fieldPos.getField() == INTEGER_FIELD ||
+ 	     fieldPos.getFieldAttribute() == NumberFormat.Field.INTEGER))
+ 	  {
+ 	    int index = dest.length();
+ 	    fieldPos.setBeginIndex(index - symbols.getNaN().length());
+ 	    fieldPos.setEndIndex(index);
+ 	  }
+ 	return;
+       }
+ 		
+     boolean is_neg = number < 0;
+     if (is_neg)
+       {
+ 	if (negativePrefix != null)
+ 	  {
+ 	    dest.append(substituteCurrency(negativePrefix, number),
+ 			negativePrefixRanges, negativePrefixAttrs);
+ 	  }
+ 	else
+ 	  {
+ 	    dest.append(symbols.getMinusSign(), NumberFormat.Field.SIGN);
+ 	    dest.append(substituteCurrency(positivePrefix, number),
+ 			positivePrefixRanges, positivePrefixAttrs);
+ 	  }
+ 	number = - number;
+       }
+     else
+       {
+ 	dest.append(substituteCurrency(positivePrefix, number),
+ 		    positivePrefixRanges, positivePrefixAttrs);
+       }
+     int integerBeginIndex = dest.length();
+     int integerEndIndex = 0;
+     int zeroStart = symbols.getZeroDigit() - '0';
+ 		
+     if (Double.isInfinite (number))
+       {
+ 	dest.append(symbols.getInfinity());
+ 	integerEndIndex = dest.length();
+       }
+     else
+       {
+ 	number *= multiplier;
+ 	
+ 	// Compute exponent.
+ 	long exponent = 0;
+ 	double baseNumber;
+ 	if (useExponentialNotation)
+ 	  {
+ 	    exponent = (long) Math.floor (Math.log(number) / Math.log(10));
+ 	    exponent = exponent - (exponent % exponentRound);
+ 	    if (minimumIntegerDigits > 0)
+ 	      exponent -= minimumIntegerDigits - 1;
+ 	    baseNumber = (number / Math.pow(10.0, exponent));
+ 	  }
+ 	else
+ 	  baseNumber = number;
+ 
+ 	// Round to the correct number of digits.
+ 	baseNumber += 5 * Math.pow(10.0, - maximumFractionDigits - 1);
+ 
+ 	int index = dest.length();
+ 	//double intPart = Math.floor(baseNumber);
+ 	String intPart = Long.toString((long)Math.floor(baseNumber));
+ 	int count, groupPosition = intPart.length();
+ 
+ 	dest.setDefaultAttribute(NumberFormat.Field.INTEGER);
+ 
+ 	for (count = 0; count < minimumIntegerDigits-intPart.length(); count++)
+ 	  dest.append(symbols.getZeroDigit());
+ 
+ 	for (count = 0;
+ 	     count < maximumIntegerDigits && count < intPart.length();
+ 	     count++)
+ 	  {
+ 	    int dig = intPart.charAt(count);
+ 
+ 	    // Append group separator if required.
+ 	    if (groupingUsed && count > 0 && groupingSize != 0 && groupPosition % groupingSize == 0)
+ 	      {
+ 		dest.append(symbols.getGroupingSeparator(), NumberFormat.Field.GROUPING_SEPARATOR);
+ 		dest.setDefaultAttribute(NumberFormat.Field.INTEGER);
+ 	      }
+ 	    dest.append((char) (zeroStart + dig));
+ 
+ 	    groupPosition--;
+ 	  }
+ 	dest.setDefaultAttribute(null);
+ 
+ 	integerEndIndex = dest.length();
+ 	   
+ 	int decimal_index = integerEndIndex;
+ 	int consecutive_zeros = 0;
+ 	int total_digits = 0;
+ 
+ 	int localMaximumFractionDigits = maximumFractionDigits;
+ 
+ 	if (useExponentialNotation)
+ 	  localMaximumFractionDigits += minimumIntegerDigits - count;
+ 
+ 	// Strip integer part from NUMBER.
+ 	double fracPart = baseNumber - Math.floor(baseNumber);
+ 	
+ 	if ( ((fracPart != 0 || minimumFractionDigits > 0) && localMaximumFractionDigits > 0)
+ 	     || decimalSeparatorAlwaysShown)
+ 	  {
+ 	    dest.append (symbols.getDecimalSeparator(), NumberFormat.Field.DECIMAL_SEPARATOR);
+ 	  }
+ 
+ 	int fraction_begin = dest.length();
+ 	dest.setDefaultAttribute(NumberFormat.Field.FRACTION);
+ 	for (count = 0;
+ 	     count < localMaximumFractionDigits
+ 	       && (fracPart != 0 || count < minimumFractionDigits);
+ 	     ++count)
+ 	  {
+ 	    ++total_digits;
+ 	    fracPart *= 10;
+ 	    long dig = (long) fracPart;
+ 	    if (dig == 0)
+ 	      ++consecutive_zeros;
+ 	    else
+ 	      consecutive_zeros = 0;
+ 	    dest.append((char) (symbols.getZeroDigit() + dig));
+ 
+ 	    // Strip integer part from FRACPART.
+ 	    fracPart = fracPart - Math.floor (fracPart);
+ 	  }
+ 
+ 	// Strip extraneous trailing `0's.  We can't always detect
+ 	// these in the loop.
+ 	int extra_zeros = Math.min (consecutive_zeros,
+ 				    total_digits - minimumFractionDigits);
+ 	if (extra_zeros > 0)
+ 	  {
+ 	    dest.cutTail(extra_zeros);
+ 	    total_digits -= extra_zeros;
+ 	    if (total_digits == 0 && !decimalSeparatorAlwaysShown)
+ 	      dest.cutTail(1);
+ 	  }
+ 
+ 	if (fieldPos != null && fieldPos.getField() == FRACTION_FIELD)
+ 	  {
+ 	    fieldPos.setBeginIndex(fraction_begin);
+ 	    fieldPos.setEndIndex(dest.length());
+ 	  }
+ 
+ 	// Finally, print the exponent.
+ 	if (useExponentialNotation)
+ 	  {
+ 	    dest.append(symbols.getExponential(), NumberFormat.Field.EXPONENT_SYMBOL);	    
+ 	    if (exponent < 0)
+ 	      {
+ 		dest.append (symbols.getMinusSign (), NumberFormat.Field.EXPONENT_SIGN);
+ 		exponent = - exponent;
+ 	      }
+ 	    index = dest.length();
+ 	    dest.setDefaultAttribute(NumberFormat.Field.EXPONENT);
+ 	    String exponentString = Long.toString ((long) exponent);
+ 	    
+ 	    for (count = 0; count < minExponentDigits-exponentString.length();
+ 		 count++)
+ 	      dest.append((char) symbols.getZeroDigit());
+ 
+ 	    for (count = 0;
+ 		 count < exponentString.length();
+ 		 ++count)
+ 	      {
+ 		int dig = exponentString.charAt(count);
+ 		dest.append((char) (zeroStart + dig));
+ 	      }
+ 	  }
+       }
+ 
+     if (fieldPos != null && 
+ 	(fieldPos.getField() == INTEGER_FIELD ||
+ 	 fieldPos.getFieldAttribute() == NumberFormat.Field.INTEGER))
+       {
+ 	fieldPos.setBeginIndex(integerBeginIndex);
+ 	fieldPos.setEndIndex(integerEndIndex);
+       }
+ 		
+     if (is_neg && negativeSuffix != null)
+       {
+ 	dest.append(substituteCurrency(negativeSuffix, number),
+ 		    negativeSuffixRanges, negativeSuffixAttrs);
+       }
+     else
+       {
+ 	dest.append(substituteCurrency(positiveSuffix, number),
+ 		    positiveSuffixRanges, positiveSuffixAttrs);
+       }
+   }
+ 
+   public StringBuffer format (double number, StringBuffer dest,
+ 			      FieldPosition fieldPos)
+   {
+     formatInternal (number, new StringFormatBuffer(dest), fieldPos);
+     return dest;
+   }
+ 
+   public AttributedCharacterIterator formatToCharacterIterator (Object value)
+   {
+     AttributedFormatBuffer sbuf = new AttributedFormatBuffer();
+ 
+     if (value instanceof Number)
+       formatInternal(((Number) value).doubleValue(), sbuf, null);
+     else
+       throw new IllegalArgumentException 
+ 	("Cannot format given Object as a Number");
+     
+     sbuf.sync();
+     return new FormatCharacterIterator(sbuf.getBuffer().toString(), 
+ 				       sbuf.getRanges(), 
+ 				       sbuf.getAttributes());
+   }
+ 
+   public StringBuffer format (long number, StringBuffer dest,
+ 			      FieldPosition fieldPos)
+   {
+     // If using exponential notation, we just format as a double.
+     if (useExponentialNotation)
+        return format ((double) number, dest, fieldPos);
+ 
+     boolean is_neg = number < 0;
+     if (is_neg)
+       {
+ 	if (negativePrefix != null)
+ 	  dest.append(substituteCurrency(negativePrefix, number));
+ 	else
+ 	  {
+ 	    dest.append(symbols.getMinusSign());
+ 	    dest.append(substituteCurrency(positivePrefix, number));
+ 	  }
+ 	number = - number;
+       }
+     else
+       dest.append(substituteCurrency(positivePrefix, number));
+ 
+     int integerBeginIndex = dest.length();
+     int index = dest.length();
+     int count = 0;
+ 
+     /* Handle percentages, etc. */
+     number *= multiplier;
+     while (count < maximumIntegerDigits
+ 	   && (number > 0 || count < minimumIntegerDigits))
+       {
+ 	long dig = number % 10;
+ 	number /= 10;
+ 	// NUMBER and DIG will be less than 0 if the original number
+ 	// was the most negative long.
+ 	if (dig < 0)
+ 	  {
+ 	    dig = - dig;
+ 	    number = - number;
+ 	  }
+ 
+ 	// Append group separator if required.
+ 	if (groupingUsed && count > 0 && groupingSize != 0 && count % groupingSize == 0)
+ 	  dest.insert(index, symbols.getGroupingSeparator());
+ 
+ 	dest.insert(index, (char) (symbols.getZeroDigit() + dig));
+ 
+ 	++count;
+       }
+ 
+     if (fieldPos != null && fieldPos.getField() == INTEGER_FIELD)
+       {
+ 	fieldPos.setBeginIndex(integerBeginIndex);
+ 	fieldPos.setEndIndex(dest.length());
+       }
+ 
+     if (decimalSeparatorAlwaysShown || minimumFractionDigits > 0)
+       {
+ 	dest.append(symbols.getDecimalSeparator());
+ 	if (fieldPos != null && fieldPos.getField() == FRACTION_FIELD)
+ 	  {
+ 	    fieldPos.setBeginIndex(dest.length());
+ 	    fieldPos.setEndIndex(dest.length() + minimumFractionDigits);
+ 	  }
+       }
+ 
+     for (count = 0; count < minimumFractionDigits; ++count)
+       dest.append(symbols.getZeroDigit());
+ 
+     dest.append((is_neg && negativeSuffix != null)
+ 		? substituteCurrency(negativeSuffix, number)
+ 		: substituteCurrency(positiveSuffix, number));
+     return dest;
+   }
+ 
+   /**
+    * Returns the currency corresponding to the currency symbol stored
+    * in the instance of <code>DecimalFormatSymbols</code> used by this
+    * <code>DecimalFormat</code>.
+    *
+    * @return A new instance of <code>Currency</code> if
+    * the currency code matches a known one, null otherwise.
+    */
+   public Currency getCurrency()
+   {
+     return symbols.getCurrency();
+   }
+ 
+   /**
+    * Returns a copy of the symbols used by this instance.
+    * 
+    * @return A copy of the symbols.
+    */
+   public DecimalFormatSymbols getDecimalFormatSymbols()
+   {
+     return (DecimalFormatSymbols) symbols.clone();
+   }
+ 
+   public int getGroupingSize ()
+   {
+     return groupingSize;
+   }
+ 
+   public int getMultiplier ()
+   {
+     return multiplier;
+   }
+ 
+   public String getNegativePrefix ()
+   {
+     return negativePrefix;
+   }
+ 
+   public String getNegativeSuffix ()
+   {
+     return negativeSuffix;
+   }
+ 
+   public String getPositivePrefix ()
+   {
+     return positivePrefix;
+   }
+ 
+   public String getPositiveSuffix ()
+   {
+     return positiveSuffix;
+   }
+ 
+   /**
+    * Returns a hash code for this object.
+    *
+    * @return A hash code.
+    */
+   public int hashCode()
+   {
+     return toPattern().hashCode();
+   }
+ 
+   public boolean isDecimalSeparatorAlwaysShown ()
+   {
+     return decimalSeparatorAlwaysShown;
+   }
+ 
+   public Number parse (String str, ParsePosition pos)
+   {
+     /*
+      * Our strategy is simple: copy the text into separate buffers: one for the int part,
+      * one for the fraction part and for the exponential part.
+      * We translate or omit locale-specific information.  
+      * If exponential is sufficiently big we merge the fraction and int part and
+      * remove the '.' and then we use Long to convert the number. In the other
+      * case, we use Double to convert the full number.
+      */
+ 
+     boolean is_neg = false;
+     int index = pos.getIndex();
+     StringBuffer int_buf = new StringBuffer ();
+         
+     // We have to check both prefixes, because one might be empty.  We
+     // want to pick the longest prefix that matches.
+     boolean got_pos = str.startsWith(positivePrefix, index);
+     String np = (negativePrefix != null
+ 		 ? negativePrefix
+ 		 : positivePrefix + symbols.getMinusSign());
+     boolean got_neg = str.startsWith(np, index);
+ 
+     if (got_pos && got_neg)
+       {
+ 	// By checking this way, we preserve ambiguity in the case
+ 	// where the negative format differs only in suffix.  We
+ 	// check this again later.
+ 	if (np.length() > positivePrefix.length())
+ 	  {
+ 	    is_neg = true;
+ 	    index += np.length();
+ 	  }
+ 	else
+ 	  index += positivePrefix.length();
+       }
+     else if (got_neg)
+       {
+ 	is_neg = true;
+ 	index += np.length();
+       }
+     else if (got_pos)
+       index += positivePrefix.length();
+     else
+       {
+ 	pos.setErrorIndex (index);
+ 	return null;
+       }
+ 
+     // FIXME: handle Inf and NaN.
+ 
+     // FIXME: do we have to respect minimum digits?
+     // What about multiplier?
+ 
+     StringBuffer buf = int_buf;
+     StringBuffer frac_buf = null;
+     StringBuffer exp_buf = null;
+     int start_index = index;
+     int max = str.length();
+     int exp_index = -1;
+     int last = index + maximumIntegerDigits; 
+ 
+     if (maximumFractionDigits > 0)
+       last += maximumFractionDigits + 1;
+     
+     if (useExponentialNotation)
+       last += minExponentDigits + 1;
+ 
+     if (last > 0 && max > last)
+       max = last;
+ 
+     char zero = symbols.getZeroDigit();
+     int last_group = -1;
+     boolean int_part = true;
+     boolean exp_part = false;
+     for (; index < max; ++index)
+       {
+ 	char c = str.charAt(index);
+ 
+ 	// FIXME: what about grouping size?
+ 	if (groupingUsed && c == symbols.getGroupingSeparator())
+ 	  {
+ 	    if (last_group != -1 
+ 		&& groupingSize != 0  
+ 		&& (index - last_group) % groupingSize != 0)
+ 	      {
+ 		pos.setErrorIndex(index);
+ 		return null;
+ 	      }
+ 	    last_group = index+1;
+ 	  }
+ 	else if (c >= zero && c <= zero + 9)
+ 	  {
+ 	    buf.append((char) (c - zero + '0'));
+ 	  }
+ 	else if (parseIntegerOnly)
+ 	  break;
+ 	else if (c == symbols.getDecimalSeparator())
+ 	  {
+ 	    if (last_group != -1 
+ 		&& groupingSize != 0 
+ 		&& (index - last_group) % groupingSize != 0)
+ 	      {
+ 		pos.setErrorIndex(index);
+ 		return null;
+ 	      }
+ 	    buf = frac_buf = new StringBuffer();
+ 	    frac_buf.append('.');
+ 	    int_part = false;
+ 	  }
+ 	else if (c == symbols.getExponential())
+ 	  {
+ 	    buf = exp_buf = new StringBuffer();
+ 	    int_part = false;
+ 	    exp_part = true;
+ 	    exp_index = index+1;
+ 	  }
+ 	else if (exp_part
+ 		 && (c == '+' || c == '-' || c == symbols.getMinusSign()))
+ 	  {
+ 	    // For exponential notation.
+ 	    buf.append(c);
+ 	  }
+ 	else
+ 	  break;
+       }
+ 
+     if (index == start_index)
+       {
+ 	// Didn't see any digits.
+ 	pos.setErrorIndex(index);
+ 	return null;
+       }
+ 
+     // Check the suffix.  We must do this before converting the
+     // buffer to a number to handle the case of a number which is
+     // the most negative Long.
+     boolean got_pos_suf = str.startsWith(positiveSuffix, index);
+     String ns = (negativePrefix == null ? positiveSuffix : negativeSuffix);
+     boolean got_neg_suf = str.startsWith(ns, index);
+     if (is_neg)
+       {
+ 	if (! got_neg_suf)
+ 	  {
+ 	    pos.setErrorIndex(index);
+ 	    return null;
+ 	  }
+       }
+     else if (got_pos && got_neg && got_neg_suf)
+       {
+ 	is_neg = true;
+       }
+     else if (got_pos != got_pos_suf && got_neg != got_neg_suf)
+       {
+ 	pos.setErrorIndex(index);
+ 	return null;
+       }
+     else if (! got_pos_suf)
+       {
+        pos.setErrorIndex(index);
+        return null;
+       }
+ 
+     String suffix = is_neg ? ns : positiveSuffix;
+     long parsedMultiplier = 1;
+     boolean use_long;
+ 
+     if (is_neg)
+       int_buf.insert(0, '-');
+ 
+     // Now handle the exponential part if there is one.
+     if (exp_buf != null)
+       {
+ 	int exponent_value;
+ 
+ 	try
+ 	  {
+ 	    exponent_value = Integer.parseInt(exp_buf.toString());
+ 	  }
+ 	catch (NumberFormatException x1)
+ 	  {
+ 	    pos.setErrorIndex(exp_index);
+ 	    return null;
+ 	  }
+ 
+ 	if (frac_buf == null)
+ 	  {
+ 	    // We only have to add some zeros to the int part.
+ 	    // Build a multiplier.
+ 	    for (int i = 0; i < exponent_value; i++)
+ 	      int_buf.append('0');
+ 	    
+ 	    use_long = true;
+ 	  }
+ 	else
+ 	  {
+ 	    boolean long_sufficient;
+ 
+ 	    if (exponent_value < frac_buf.length()-1)
+ 	      {
+ 		int lastNonNull = -1;
+ 		/* We have to check the fraction buffer: it may only be full of '0'
+ 		 * or be sufficiently filled with it to convert the number into Long.
+ 		 */
+ 		for (int i = 1; i < frac_buf.length(); i++)
+ 		  if (frac_buf.charAt(i) != '0')
+ 		    lastNonNull = i;
+ 
+ 		long_sufficient = (lastNonNull < 0 || lastNonNull <= exponent_value);
+ 	      }
+ 	    else
+ 	      long_sufficient = true;
+ 	    
+ 	    if (long_sufficient)
+ 	      {
+ 		for (int i = 1; i < frac_buf.length() && i < exponent_value; i++)
+ 		  int_buf.append(frac_buf.charAt(i));
+ 		for (int i = frac_buf.length()-1; i < exponent_value; i++)
+ 		  int_buf.append('0');
+ 		use_long = true;
+ 	      }
+ 	    else
+ 	      {
+ 		/*
+ 		 * A long type is not sufficient, we build the full buffer to
+ 		 * be parsed by Double.
+ 		 */
+ 		int_buf.append(frac_buf);
+ 		int_buf.append('E');
+ 		int_buf.append(exp_buf);
+ 		use_long = false;
+ 	      }
+ 	  }
+       }
+     else
+       {
+ 	if (frac_buf != null)
+ 	  {
+ 	    /* Check whether the fraction buffer contains only '0' */
+ 	    int i;
+ 	    for (i = 1; i < frac_buf.length(); i++)
+ 	      if (frac_buf.charAt(i) != '0')
+ 		break;
+ 	   
+ 	    if (i != frac_buf.length())
+ 	      {
+ 		use_long = false;
+ 		int_buf.append(frac_buf);
+ 	      }
+ 	    else
+ 	      use_long = true;
+ 	  }
+ 	else
+ 	  use_long = true;
+       }
+ 
+     String t = int_buf.toString();
+     Number result = null;
+     if (use_long)
+       {
+ 	try
+ 	  {
+ 	    result = new Long (t);
+ 	  }
+ 	catch (NumberFormatException x1)
+ 	  {
+ 	  }
+       }
+     else
+       {
+ 	try
+ 	  {
+ 	    result = new Double (t);
+ 	  }
+ 	catch (NumberFormatException x2)
+ 	  {
+ 	  }
+       }
+     if (result == null)
+       {
+ 	pos.setErrorIndex(index);
+ 	return null;
+       }
+ 
+     pos.setIndex(index + suffix.length());
+ 
+     return result;
+   }
+ 
+   /**
+    * Sets the <code>Currency</code> on the
+    * <code>DecimalFormatSymbols</code> used, which also sets the
+    * currency symbols on those symbols.
+    */
+   public void setCurrency(Currency currency)
+   {
+     symbols.setCurrency(currency);
+   }
+ 
+   /**
+    * Sets the symbols used by this instance.  This method makes a copy of 
+    * the supplied symbols.
+    * 
+    * @param newSymbols  the symbols (<code>null</code> not permitted).
+    */
+   public void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols)
+   {
+     symbols = (DecimalFormatSymbols) newSymbols.clone();
+   }
+ 
+   public void setDecimalSeparatorAlwaysShown (boolean newValue)
+   {
+     decimalSeparatorAlwaysShown = newValue;
+   }
+ 
+   public void setGroupingSize (int groupSize)
+   {
+     groupingSize = (byte) groupSize;
+   }
+ 
+   public void setMaximumFractionDigits (int newValue)
+   {
+     super.setMaximumFractionDigits(Math.min(newValue, 340));
+   }
+ 
+   public void setMaximumIntegerDigits (int newValue)
+   {
+     super.setMaximumIntegerDigits(Math.min(newValue, 309));
+   }
+ 
+   public void setMinimumFractionDigits (int newValue)
+   {
+     super.setMinimumFractionDigits(Math.min(newValue, 340));
+   }
+ 
+   public void setMinimumIntegerDigits (int newValue)
+   {
+     super.setMinimumIntegerDigits(Math.min(newValue, 309));
+   }
+ 
+   public void setMultiplier (int newValue)
+   {
+     multiplier = newValue;
+   }
+ 
+   public void setNegativePrefix (String newValue)
+   {
+     negativePrefix = newValue;
+   }
+ 
+   public void setNegativeSuffix (String newValue)
+   {
+     negativeSuffix = newValue;
+   }
+ 
+   public void setPositivePrefix (String newValue)
+   {
+     positivePrefix = newValue;
+   }
+ 
+   public void setPositiveSuffix (String newValue)
+   {
+     positiveSuffix = newValue;
+   }
+ 
+   private void quoteFix(StringBuffer buf, String text, String patChars)
+   {
+     int len = text.length();
+     for (int index = 0; index < len; ++index)
+       {
+ 	char c = text.charAt(index);
+ 	if (patChars.indexOf(c) != -1)
+ 	  {
+ 	    buf.append('\'');
+ 	    buf.append(c);
+ 	    buf.append('\'');
+ 	  }
+ 	else
+ 	  buf.append(c);
+       }
+   }
+ 
+   private String computePattern(DecimalFormatSymbols syms)
+   {
+     StringBuffer mainPattern = new StringBuffer ();
+     // We have to at least emit a zero for the minimum number of
+     // digits.  Past that we need hash marks up to the grouping
+     // separator (and one beyond).
+     int total_digits = Math.max(minimumIntegerDigits,
+ 				groupingUsed ? groupingSize + 1: groupingSize);
+     for (int i = 0; i < total_digits - minimumIntegerDigits; ++i)
+       mainPattern.append(syms.getDigit());
+     for (int i = total_digits - minimumIntegerDigits; i < total_digits; ++i)
+       mainPattern.append(syms.getZeroDigit());
+     // Inserting the gropuing operator afterwards is easier.
+     if (groupingUsed)
+       mainPattern.insert(mainPattern.length() - groupingSize,
+ 			 syms.getGroupingSeparator());
+     // See if we need decimal info.
+     if (minimumFractionDigits > 0 || maximumFractionDigits > 0
+ 	|| decimalSeparatorAlwaysShown)
+       mainPattern.append(syms.getDecimalSeparator());
+     for (int i = 0; i < minimumFractionDigits; ++i)
+       mainPattern.append(syms.getZeroDigit());
+     for (int i = minimumFractionDigits; i < maximumFractionDigits; ++i)
+       mainPattern.append(syms.getDigit());
+     if (useExponentialNotation)
+       {
+ 	mainPattern.append(syms.getExponential());
+ 	for (int i = 0; i < minExponentDigits; ++i)
+ 	  mainPattern.append(syms.getZeroDigit());
+ 	if (minExponentDigits == 0)
+ 	  mainPattern.append(syms.getDigit());
+       }
+ 
+     String main = mainPattern.toString();
+     String patChars = patternChars (syms);
+     mainPattern.setLength(0);
+ 
+     quoteFix (mainPattern, positivePrefix, patChars);
+     mainPattern.append(main);
+     quoteFix (mainPattern, positiveSuffix, patChars);
+ 
+     if (negativePrefix != null)
+       {
+ 	quoteFix (mainPattern, negativePrefix, patChars);
+ 	mainPattern.append(main);
+ 	quoteFix (mainPattern, negativeSuffix, patChars);
+       }
+ 
+     return mainPattern.toString();
+   }
+ 
+   public String toLocalizedPattern ()
+   {
+     return computePattern (symbols);
+   }
+ 
+   public String toPattern ()
+   {
+     return computePattern (nonLocalizedSymbols);
+   }
+ 
+   private static final int MAXIMUM_INTEGER_DIGITS = 309; 
+ 
+   // These names are fixed by the serialization spec.
+   private boolean decimalSeparatorAlwaysShown;
+   private byte groupingSize;
+   private byte minExponentDigits;
+   private int exponentRound;
+   private int multiplier;
+   private String negativePrefix;
+   private String negativeSuffix;
+   private String positivePrefix;
+   private String positiveSuffix;
+   private int[] negativePrefixRanges, positivePrefixRanges;
+   private HashMap[] negativePrefixAttrs, positivePrefixAttrs;
+   private int[] negativeSuffixRanges, positiveSuffixRanges;
+   private HashMap[] negativeSuffixAttrs, positiveSuffixAttrs;
+   private int serialVersionOnStream = 1;
+   private DecimalFormatSymbols symbols;
+   private boolean useExponentialNotation;
+   private static final long serialVersionUID = 864413376551465018L;
+ 
+   private void readObject(ObjectInputStream stream)
+     throws IOException, ClassNotFoundException
+   {
+     stream.defaultReadObject();
+     if (serialVersionOnStream < 1)
+       {
+         useExponentialNotation = false;
+ 	serialVersionOnStream = 1;
+       }
+   }
+ 
+   // The locale-independent pattern symbols happen to be the same as
+   // the US symbols.
+   private static final DecimalFormatSymbols nonLocalizedSymbols
+     = new DecimalFormatSymbols (Locale.US);
+ 
+   /**
+    * <p>
+    * Substitutes the currency symbol into the given string,
+    * based on the value used.  Currency symbols can either
+    * be a simple series of characters (e.g. '$'), which are
+    * simply used as is, or they can be of a more complex
+    * form:
+    * </p>
+    * <p>
+    * (lower bound)|(mid value)|(upper bound)
+    * </p>
+    * <p>
+    * where each bound has the syntax '(value)(# or <)(symbol)',
+    * to indicate the bounding value and the symbol used.
+    * </p>
+    * <p>
+    * The currency symbol replaces the currency specifier, '\u00a4',
+    * an unlocalised character, which thus is used as such in all formats.
+    * If this symbol occurs twice, the international currency code is used
+    * instead.
+    * </p>
+    *
+    * @param string The string containing the currency specifier, '\u00a4'.
+    * @param number the number being formatted.
+    * @return a string formatted for the correct currency.
+    */
+   private String substituteCurrency(String string, double number)
+   {
+     int index;
+     int length;
+     char currentChar;
+     StringBuffer buf;
+     
+     index = 0;
+     length = string.length();
+     buf = new StringBuffer();
+     
+     while (index < length)
+       {
+ 	currentChar = string.charAt(index);
+ 	if (string.charAt(index) == '\u00a4')
+ 	  {
+ 	    if ((index + 1) < length && string.charAt(index + 1) == '\u00a4')
+ 	      {
+ 		buf.append(symbols.getInternationalCurrencySymbol());
+ 		index += 2;
+ 	      }
+ 	    else
+ 	      {
+ 		String symbol;
+ 		
+ 		symbol = symbols.getCurrencySymbol();
+ 		if (symbol.startsWith("="))
+ 		  {
+ 		    String[] bounds;
+ 		    int[] boundValues;
+ 		    String[] boundSymbols;
+ 		    
+ 		    bounds = symbol.substring(1).split("\\|");
+ 		    boundValues = new int[3];
+ 		    boundSymbols = new String[3];
+ 		    for (int a = 0; a < 3; ++a)
+ 		      {
+ 			String[] bound;
+ 			
+ 			bound = bounds[a].split("[#<]");
+ 			boundValues[a] = Integer.parseInt(bound[0]);
+ 			boundSymbols[a] = bound[1];
+ 		      }
+ 		    if (number <= boundValues[0])
+ 		      {
+ 			buf.append(boundSymbols[0]);
+ 		      }
+ 		    else if (number >= boundValues[2])
+ 		      {
+ 			buf.append(boundSymbols[2]);
+ 		      }
+ 		    else 
+ 		      {
+ 			buf.append(boundSymbols[1]);
+ 		      }
+ 		    ++index;
+ 		  }
+ 		else
+ 		  {
+ 		    buf.append(symbol);
+ 		    ++index;
+ 		  }
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    buf.append(string.charAt(index));
+ 	    ++index;
+ 	  }
+       }
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/DecimalFormatSymbols.java gcc-4.1.0/libjava/classpath/java/text/DecimalFormatSymbols.java
*** gcc-4.0.2/libjava/classpath/java/text/DecimalFormatSymbols.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/DecimalFormatSymbols.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,687 ----
+ /* DecimalFormatSymbols.java -- Format symbols used by DecimalFormat
+    Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.Serializable;
+ import java.util.Currency;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * This class is a container for the symbols used by 
+  * <code>DecimalFormat</code> to format numbers and currency
+  * for a particular locale.  These are
+  * normally handled automatically, but an application can override
+  * values as desired using this class.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @date February 24, 1999
+  * @see java.text.DecimalFormat
+  */
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 from http://www.javasoft.com.
+  * Status:  Believed complete and correct to 1.2.
+  */
+ public final class DecimalFormatSymbols implements Cloneable, Serializable
+ {
+   public Object clone ()
+   {
+     try
+       {
+ 	return super.clone ();
+       }
+     catch(CloneNotSupportedException e)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * This method initializes a new instance of
+    * <code>DecimalFormatSymbols</code> for the default locale.
+    */
+   public DecimalFormatSymbols ()
+   {
+     this (Locale.getDefault());
+   }
+ 
+   /**
+    * Retrieves a valid string, either using the supplied resource
+    * bundle or the default value.
+    *
+    * @param bundle the resource bundle to use to find the string.
+    * @param name key for the string in the resource bundle.
+    * @param def default value for the string.
+    */
+   private String safeGetString(ResourceBundle bundle,
+                                String name, String def)
+   {
+     if (bundle != null)
+       {
+ 	try
+ 	  {
+ 	    return bundle.getString(name);
+ 	  }
+ 	catch (MissingResourceException x)
+ 	  {
+ 	  }
+       }
+     return def;
+   }
+ 
+   private char safeGetChar(ResourceBundle bundle,
+                            String name, char def)
+   {
+     String r = null;
+     if (bundle != null)
+       {
+ 	try
+ 	  {
+ 	    r = bundle.getString(name);
+ 	  }
+ 	catch (MissingResourceException x)
+ 	  {
+ 	  }
+       }
+     if (r == null || r.length() < 1)
+       return def;
+     return r.charAt(0);
+   }
+ 
+   /**
+    * This method initializes a new instance of
+    * <code>DecimalFormatSymbols</code> for the specified locale.
+    * <strong>Note</strong>: if the locale does not have an associated
+    * <code>Currency</code> instance, the currency symbol and
+    * international currency symbol will be set to the strings "?"
+    * and "XXX" respectively.  This generally happens with language
+    * locales (those with no specified country), such as
+    * <code>Locale.ENGLISH</code>.
+    *
+    * @param loc The local to load symbols for.
+    * @throws NullPointerException if the locale is null.
+    */
+   public DecimalFormatSymbols (Locale loc)
+   {
+     ResourceBundle res;
+ 
+     currency = Currency.getInstance("XXX");
+     currencySymbol = "?";
+     intlCurrencySymbol = "XXX";
+     try
+       {
+ 	res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+ 		loc, ClassLoader.getSystemClassLoader());
+       }
+     catch (MissingResourceException x)
+       {
+ 	res = null;
+       }
+     try
+       {
+ 	Currency localeCurrency = Currency.getInstance(loc);
+ 	if (localeCurrency != null)
+ 	  {
+ 	    setCurrency(localeCurrency);
+ 	  }
+       }
+     catch(IllegalArgumentException exception)
+       {
+ 	/* Locale has an invalid currency */
+       }
+     decimalSeparator = safeGetChar (res, "decimalSeparator", '.');
+     digit = safeGetChar (res, "digit", '#');
+     exponential = safeGetChar (res, "exponential", 'E');
+     groupingSeparator = safeGetChar (res, "groupingSeparator", ',');
+     infinity = safeGetString (res, "infinity", "\u221e");
+     try
+       {
+ 	monetarySeparator = safeGetChar (res, "monetarySeparator", '.');
+       }
+     catch (MissingResourceException x)
+       {
+ 	monetarySeparator = decimalSeparator;
+       }
+     minusSign = safeGetChar (res, "minusSign", '-');
+     NaN = safeGetString (res, "NaN", "\ufffd");
+     patternSeparator = safeGetChar (res, "patternSeparator", ';');
+     percent = safeGetChar (res, "percent", '%');
+     perMill = safeGetChar (res, "perMill", '\u2030');
+     zeroDigit = safeGetChar (res, "zeroDigit", '0');
+     locale = loc;
+   }
+ 
+   /**
+    * This method this this object for equality against the specified object.
+    * This will be true if and only if the following criteria are met with
+    * regard to the specified object:
+    * <p>
+    * <ul>
+    * <li>It is not <code>null</code>.</li>
+    * <li>It is an instance of <code>DecimalFormatSymbols</code>.</li>
+    * <li>All of its symbols are identical to the symbols in this object.</li>
+    * </ul>
+    *
+    * @return <code>true</code> if the specified object is equal to this
+    * object, <code>false</code> otherwise.
+    */
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof DecimalFormatSymbols))
+       return false;
+     DecimalFormatSymbols dfs = (DecimalFormatSymbols) obj;
+     return (currencySymbol.equals(dfs.currencySymbol)
+ 	    && decimalSeparator == dfs.decimalSeparator
+ 	    && digit == dfs.digit
+ 	    && exponential == dfs.exponential
+ 	    && groupingSeparator == dfs.groupingSeparator
+ 	    && infinity.equals(dfs.infinity)
+ 	    && intlCurrencySymbol.equals(dfs.intlCurrencySymbol)
+ 	    && minusSign == dfs.minusSign
+ 	    && monetarySeparator == dfs.monetarySeparator
+ 	    && NaN.equals(dfs.NaN)
+ 	    && patternSeparator == dfs.patternSeparator
+ 	    && percent == dfs.percent
+ 	    && perMill == dfs.perMill
+ 	    && zeroDigit == dfs.zeroDigit);
+   }
+ 
+   /**
+    * Returns the currency corresponding to the currency symbol stored
+    * in this instance of <code>DecimalFormatSymbols</code>.
+    *
+    * @return An instance of <code>Currency</code> which matches
+    *         the currency used, or null if there is no corresponding
+    *         instance.
+    */
+   public Currency getCurrency ()
+   {
+     return currency;
+   }
+ 
+   /**
+    * This method returns the currency symbol in local format.  For example,
+    * "$" for Canadian dollars.
+    *
+    * @return The currency symbol in local format.
+    */
+   public String getCurrencySymbol ()
+   {
+     return currencySymbol;
+   }
+ 
+   /**
+    * This method returns the character used as the decimal point.
+    *
+    * @return The character used as the decimal point.
+    */
+   public char getDecimalSeparator ()
+   {
+     return decimalSeparator;
+   }
+ 
+   /**
+    * This method returns the character used to represent a digit in a
+    * format pattern string.
+    *
+    * @return The character used to represent a digit in a format
+    * pattern string. 
+    */
+   public char getDigit ()
+   {
+     return digit;
+   }
+ 
+   /**
+    * This method returns the character used to represent the exponential
+    * format.  This is a GNU Classpath extension.
+    *
+    * @return the character used to represent an exponential in a format
+    *         pattern string.
+    */
+   char getExponential ()
+   {
+     return exponential;
+   }
+ 
+   /**
+    * This method sets the character used to separate groups of digits.  For
+    * example, the United States uses a comma (,) to separate thousands in
+    * a number.
+    *
+    * @return The character used to separate groups of digits.
+    */
+   public char getGroupingSeparator ()
+   {
+     return groupingSeparator;
+   }
+ 
+   /**
+    * This method returns the character used to represent infinity.
+    *
+    * @return The character used to represent infinity.
+    */
+   public String getInfinity ()
+   {
+     return infinity;
+   }
+ 
+   /**
+    * This method returns the ISO 4217 currency code for
+    * the currency used.
+    *
+    * @return the ISO 4217 currency code.
+    */
+   public String getInternationalCurrencySymbol ()
+   {
+     return intlCurrencySymbol;
+   }
+ 
+   /**
+    * This method returns the character used to represent the minus sign.
+    *
+    * @return The character used to represent the minus sign.
+    */
+   public char getMinusSign ()
+   {
+     return minusSign;
+   }
+ 
+   /**
+    * This method returns the character used to represent the decimal
+    * point for currency values.
+    *
+    * @return The decimal point character used in currency values.
+    */
+   public char getMonetaryDecimalSeparator ()
+   {
+     return monetarySeparator;
+   }
+ 
+   /**
+    * This method returns the string used to represent the NaN (not a number)
+    * value.
+    *
+    * @return The string used to represent NaN
+    */
+   public String getNaN ()
+   {
+     return NaN;
+   }
+ 
+   /**
+    * This method returns the character used to separate positive and negative
+    * subpatterns in a format pattern.
+    *
+    * @return The character used to separate positive and negative subpatterns
+    * in a format pattern.
+    */
+   public char getPatternSeparator ()
+   {
+     return patternSeparator;
+   }
+ 
+   /**
+    * This method returns the character used as the percent sign.
+    *
+    * @return The character used as the percent sign.
+    */
+   public char getPercent ()
+   {
+     return percent;
+   }
+ 
+   /**
+    * This method returns the character used as the per mille character.
+    *
+    * @return The per mille character.
+    */
+   public char getPerMill ()
+   {
+     return perMill;
+   }
+ 
+   /**
+    * This method returns the character used to represent the digit zero.
+    *
+    * @return The character used to represent the digit zero.
+    */
+   public char getZeroDigit ()
+   {
+     return zeroDigit;
+   }
+ 
+   /**
+    * This method returns a hash value for this object.
+    *
+    * @return A hash value for this object.
+    */
+   public int hashCode ()
+   {
+     // Compute based on zero digit, grouping separator, and decimal
+     // separator -- JCL book.  This probably isn't a very good hash
+     // code.
+     return zeroDigit << 16 + groupingSeparator << 8 + decimalSeparator;
+   }
+ 
+   /**
+    * This method sets the currency symbol and ISO 4217 currency
+    * code to the values obtained from the supplied currency.
+    *
+    * @param currency the currency from which to obtain the values.
+    * @throws NullPointerException if the currency is null.
+    */
+   public void setCurrency (Currency currency)
+   {
+     intlCurrencySymbol = currency.getCurrencyCode();
+     currencySymbol = currency.getSymbol();
+     this.currency = currency;
+   }
+ 
+   /**
+    * This method sets the currency symbol to the specified value.
+    *
+    * @param currency The new currency symbol
+    */
+   public void setCurrencySymbol (String currency)
+   {
+     currencySymbol = currency;
+   }
+ 
+   /**
+    * This method sets the decimal point character to the specified value.
+    *
+    * @param decimalSep The new decimal point character
+    */
+   public void setDecimalSeparator (char decimalSep)
+   {
+     decimalSeparator = decimalSep;
+   }
+ 
+   /**
+    * This method sets the character used to represents a digit in a format
+    * string to the specified value.
+    *
+    * @param digit The character used to represent a digit in a format pattern.
+    */
+   public void setDigit (char digit)
+   {
+     this.digit = digit;
+   }
+ 
+   /**
+    * This method sets the exponential character used in the format string to
+    * the specified value.  This is a GNU Classpath extension.
+    *
+    * @param exp the character used for the exponential in a format pattern.
+    */
+   void setExponential (char exp)
+   {
+     exponential = exp;
+   }
+ 
+   /**
+    * This method sets the character used to separate groups of digits.
+    *
+    * @param groupSep The character used to separate groups of digits.
+    */
+   public void setGroupingSeparator (char groupSep)
+   {
+     groupingSeparator = groupSep;
+   }
+ 
+   /**
+    * This method sets the string used to represents infinity.
+    *
+    * @param infinity The string used to represent infinity.
+    */
+   public void setInfinity (String infinity)
+   {
+     this.infinity = infinity;
+   }
+ 
+   /**
+    * This method sets the international currency symbol to the
+    * specified value. If a valid <code>Currency</code> instance
+    * exists for the international currency code, then this is
+    * used for the currency attribute, and the currency symbol
+    * is set to the corresponding value from this instance.
+    * Otherwise, the currency attribute is set to null and the
+    * symbol is left unmodified. 
+    *
+    * @param currencyCode The new international currency symbol.
+    */
+   public void setInternationalCurrencySymbol (String currencyCode)
+   {
+     intlCurrencySymbol = currencyCode;
+     try
+       {
+ 	currency = Currency.getInstance(currencyCode);
+       }
+     catch (IllegalArgumentException exception)
+       {
+ 	currency = null;
+       }
+     if (currency != null)
+       {
+         setCurrencySymbol(currency.getSymbol(locale));
+       }
+   }
+ 
+   /**
+    * This method sets the character used to represent the minus sign.
+    *
+    * @param minusSign The character used to represent the minus sign.
+    */
+   public void setMinusSign (char minusSign)
+   {
+     this.minusSign = minusSign;
+   }
+ 
+   /**
+    * This method sets the character used for the decimal point in currency
+    * values.
+    *
+    * @param decimalSep The decimal point character used in currency values. 
+    */
+   public void setMonetaryDecimalSeparator (char decimalSep)
+   {
+     monetarySeparator = decimalSep;
+   }
+ 
+   /**
+    * This method sets the string used to represent the NaN (not a
+    * number) value. 
+    *
+    * @param nan The string used to represent NaN
+    */
+   public void setNaN (String nan)
+   {
+     NaN = nan;
+   }
+ 
+   /**
+    * This method sets the character used to separate positive and negative
+    * subpatterns in a format pattern.
+    *
+    * @param patternSep The character used to separate positive and
+    * negative subpatterns in a format pattern.
+    */
+   public void setPatternSeparator (char patternSep)
+   {
+     patternSeparator = patternSep;
+   }
+ 
+   /**
+    * This method sets the character used as the percent sign.
+    *
+    * @param percent  The character used as the percent sign.
+    */
+   public void setPercent (char percent)
+   {
+     this.percent = percent;
+   }
+ 
+   /**
+    * This method sets the character used as the per mille character.
+    *
+    * @param perMill The per mille character.
+    */
+   public void setPerMill (char perMill)
+   {
+     this.perMill = perMill;
+   }
+ 
+   /**
+    * This method sets the character used to represent the digit zero.
+    *
+    * @param zeroDigit The character used to represent the digit zero.
+    */
+   public void setZeroDigit (char zeroDigit)
+   {
+     this.zeroDigit = zeroDigit;
+   }
+ 
+   /**
+    * @serial A string used for the local currency
+    */
+   private String currencySymbol;
+   /**
+    * @serial The <code>char</code> used to separate decimals in a number.
+    */
+   private char decimalSeparator;
+   /**
+    * @serial This is the <code>char</code> used to represent a digit in
+    * a format specification.
+    */
+   private char digit;
+   /**
+    * @serial This is the <code>char</code> used to represent the exponent
+    * separator in exponential notation.
+    */
+   private char exponential;
+   /**
+    * @serial This separates groups of thousands in numbers.
+    */
+   private char groupingSeparator;
+   /**
+    * @serial This string represents infinity.
+    */
+   private String infinity;
+   /**
+    * @serial This string represents the local currency in an international
+    * context, eg, "C$" for Canadian dollars.
+    */
+   private String intlCurrencySymbol;
+   /**
+    * @serial This is the character used to represent the minus sign.
+    */
+   private char minusSign;
+   /**
+    * @serial This character is used to separate decimals when formatting
+    * currency values.
+    */
+   private char monetarySeparator;
+   /**
+    * @serial This string is used the represent the Java NaN value for
+    * "not a number".
+    */
+   private String NaN;
+   /**
+    * @serial This is the character used to separate positive and negative
+    * subpatterns in a format pattern.
+    */
+   private char patternSeparator;
+   /**
+    * @serial This is the percent symbols
+    */
+   private char percent;
+   /**
+    * @serial This character is used for the mille percent sign.
+    */
+   private char perMill;
+   /**
+    * @serial This value represents the type of object being de-serialized.
+    * 0 indicates a pre-Java 1.1.6 version, 1 indicates 1.1.6 or later.
+    * 0 indicates a pre-Java 1.1.6 version, 1 indicates 1.1.6 or later,
+    * 2 indicates 1.4 or later
+     */
+   private int serialVersionOnStream = 2;
+   /**
+    * @serial This is the character used to represent 0.
+    */
+   private char zeroDigit;
+ 
+   /**
+    * @serial The locale of these currency symbols.
+    */
+   private Locale locale;
+ 
+   /**
+    * The currency used for the symbols in this instance.
+    * This is stored temporarily for efficiency reasons,
+    * as well as to ensure that the correct instance
+    * is restored from the currency code.
+    *
+    * @serial Ignored.
+    */
+   private transient Currency currency;
+ 
+   private static final long serialVersionUID = 5772796243397350300L;
+ 
+   private void readObject(ObjectInputStream stream)
+     throws IOException, ClassNotFoundException
+   {
+     stream.defaultReadObject();
+     if (serialVersionOnStream < 1)
+       {
+         monetarySeparator = decimalSeparator;
+ 	exponential = 'E';
+       }
+     if (serialVersionOnStream < 2)
+ 	locale = Locale.getDefault();
+ 
+     serialVersionOnStream = 2;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/FieldPosition.java gcc-4.1.0/libjava/classpath/java/text/FieldPosition.java
*** gcc-4.0.2/libjava/classpath/java/text/FieldPosition.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/FieldPosition.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,232 ----
+ /* FieldPosition.java -- Keeps track of field positions while formatting
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ /**
+  * This class is used by the java.text formatting classes to track
+  * field positions.  A field position is defined by an identifier value
+  * and begin and end index positions.  The formatting classes in java.text
+  * typically define constant values for the field identifiers.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  */
+ public class FieldPosition
+ {
+   /**
+    * This is the field identifier value.
+    */
+   private int field_id;
+ 
+   /**
+    * This is the beginning index of the field.
+    */
+   private int begin;
+ 
+   /**
+    * This is the ending index of the field.
+    */
+   private int end;
+ 
+   /**
+    * This is the field attribute value.
+    */
+   private Format.Field field_attribute;
+ 
+   /**
+    * This method initializes a new instance of <code>FieldPosition</code>
+    * to have the specified field attribute. The attribute will be used as
+    * an id. It is formally equivalent to calling FieldPosition(field, -1).
+    *
+    * @param field The field format attribute.
+    */
+   public FieldPosition (Format.Field field)
+   {
+     this(field, -1);
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>FieldPosition</code>
+    * to have the specified field attribute. The attribute will be used as
+    * an id is non null. The integer field id is only used if the Format.Field
+    * attribute is not used by the formatter.
+    *
+    * @param field The field format attribute.
+    * @param field_id The field identifier value.
+    */
+   public FieldPosition (Format.Field field, int field_id)
+   {
+     this.field_attribute = field;
+     this.field_id = field_id;
+   }
+ 
+   /**
+    * This method initializes a new instance of <code>FieldPosition</code> to
+    * have the specified field id.
+    *
+    * @param field_id The field identifier value.
+    */
+   public FieldPosition (int field_id)
+   {
+     this.field_id = field_id;
+   }
+ 
+   /**
+    * This method returns the field identifier value for this object.
+    *
+    * @return The field identifier.
+    */
+   public int getField ()
+   {
+     return field_id;
+   }
+ 
+   public Format.Field getFieldAttribute ()
+   {
+     return field_attribute;
+   }
+ 
+   /**
+    * This method returns the beginning index for this field.
+    *
+    * @return The beginning index.
+    */
+   public int getBeginIndex ()
+   {
+     return begin;
+   }
+ 
+   /**
+    * This method sets the beginning index of this field to the specified value.
+    *
+    * @param begin The new beginning index.
+    */
+   public void setBeginIndex (int begin)
+   {
+     this.begin = begin;
+   }
+ 
+   /**
+    * This method returns the ending index for the field.
+    *
+    * @return The ending index.
+    */
+   public int getEndIndex ()
+   {
+     return end;
+   }
+ 
+   /**
+    * This method sets the ending index of this field to the specified value.
+    *
+    * @param end The new ending index.
+    */
+   public void setEndIndex (int end)
+   {
+     this.end = end;
+   }
+ 
+   /**
+    * This method tests this object for equality against the specified object.
+    * The objects will be considered equal if and only if:
+    * <p>
+    * <ul>
+    * <li>The specified object is not <code>null</code>.
+    * <li>The specified object has the same class as this object.
+    * <li>The specified object has the same field identifier, field attribute 
+    * and beginning and ending index as this object.
+    * </ul>
+    *
+    * @param obj The object to test for equality to this object.
+    *
+    * @return <code>true</code> if the specified object is equal to
+    * this object, <code>false</code> otherwise. 
+    */
+   public boolean equals (Object obj)
+   {
+     if (this == obj)
+       return true;
+ 
+     if (obj == null || obj.getClass() != this.getClass())
+       return false;
+ 
+     FieldPosition fp = (FieldPosition) obj;
+     return (field_id == fp.field_id
+ 	    && (field_attribute == fp.field_attribute 
+ 		|| (field_attribute != null 
+ 		    && field_attribute.equals(fp.field_attribute)))
+ 	    && begin == fp.begin
+ 	    && end == fp.end);
+   }
+ 
+ 
+   /**
+    * This method returns a hash value for this object
+    * 
+    * @return A hash value for this object.
+    */
+   public int hashCode ()
+   {
+     int hash = 5;
+ 
+     hash = 31 * hash + field_id;
+     hash = 31 * hash + begin;
+     hash = 31 * hash + end;
+     hash = 31 * hash + 
+       (null == field_attribute ? 0 : field_attribute.hashCode());
+ 
+     return hash;
+   }
+ 
+   /**
+    * This method returns a <code>String</code> representation of this
+    * object.
+    *
+    * @return A <code>String</code> representation of this object.
+    */
+   public String toString ()
+   {
+     return (getClass ().getName ()
+ 	    + "[field=" + getField ()
+ 	    + ",attribute=" + getFieldAttribute ()
+ 	    + ",beginIndex=" + getBeginIndex () 
+ 	    + ",endIndex=" + getEndIndex () 
+ 	    + "]");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/Format.java gcc-4.1.0/libjava/classpath/java/text/Format.java
*** gcc-4.0.2/libjava/classpath/java/text/Format.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/Format.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,181 ----
+ /* Format.java -- Abstract superclass for formatting/parsing strings.
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import gnu.java.text.FormatCharacterIterator;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * This class is the abstract superclass of classes that format and parse
+  * data to/from <code>Strings</code>.  It is guaranteed that any 
+  * <code>String</code> produced by a concrete subclass of <code>Format</code>
+  * will be parseable by that same subclass.
+  * <p>
+  * In addition to implementing the abstract methods in this class, subclasses
+  * should provide static factory methods of the form 
+  * <code>getInstance()</code> and <code>getInstance(Locale)</code> if the
+  * subclass loads different formatting/parsing schemes based on locale.
+  * These subclasses should also implement a static method called
+  * <code>getAvailableLocales()</code> which returns an array of 
+  * available locales in the current runtime environment.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  */
+ public abstract class Format implements Serializable, Cloneable
+ {
+   /**
+    * For compatability with Sun's JDK 1.4.2 rev. 5
+    */
+   static final long serialVersionUID = -299282585814624189L;
+ 
+   public static class Field extends AttributedCharacterIterator.Attribute
+   {
+     static final long serialVersionUID = 276966692217360283L;
+    
+     protected Field(String name)
+     {
+       super(name);
+     }
+   }
+   
+   /**
+    * This method initializes a new instance of <code>Format</code>.
+    * It performs no actions, but acts as a default constructor for
+    * subclasses.
+    */
+   public Format ()
+   {
+   }
+ 
+   /**
+    * This method formats an <code>Object</code> into a <code>String</code>.
+    * 
+    * @param obj The <code>Object</code> to format.
+    *
+    * @return The formatted <code>String</code>.
+    *
+    * @exception IllegalArgumentException If the <code>Object</code>
+    * cannot be formatted. 
+    */
+   public final String format(Object obj) throws IllegalArgumentException
+   {
+     StringBuffer sb = new StringBuffer ();
+     format (obj, sb, new FieldPosition (0));
+     return sb.toString ();
+   }
+ 
+   /**
+    * This method formats an <code>Object</code> into a <code>String</code> and
+    * appends the <code>String</code> to a <code>StringBuffer</code>.
+    *
+    * @param obj The <code>Object</code> to format.
+    * @param sb The <code>StringBuffer</code> to append to.
+    * @param pos The desired <code>FieldPosition</code>, which is also
+    *            updated by this call. 
+    *
+    * @return The updated <code>StringBuffer</code>.
+    *
+    * @exception IllegalArgumentException If the <code>Object</code>
+    * cannot be formatted. 
+    */
+   public abstract StringBuffer format (Object obj, StringBuffer sb,
+ 				       FieldPosition pos)
+     throws IllegalArgumentException;
+ 
+   /**
+    * This method parses a <code>String</code> and converts the parsed 
+    * contents into an <code>Object</code>.
+    *
+    * @param str The <code>String</code> to parse.
+    *
+    * @return The resulting <code>Object</code>.
+    *
+    * @exception ParseException If the <code>String</code> cannot be parsed.
+    */
+   public Object parseObject (String str) throws ParseException
+   {
+     ParsePosition pos = new ParsePosition(0);
+     Object result = parseObject (str, pos);
+     if (result == null)
+       {
+ 	int index = pos.getErrorIndex();
+ 	if (index < 0)
+ 	  index = pos.getIndex();
+ 	throw new ParseException("parseObject failed", index);
+       }
+     return result;
+   }
+ 
+   /**
+    * This method parses a <code>String</code> and converts the parsed
+    * contents into an <code>Object</code>. 
+    *
+    * @param str The <code>String</code> to parse.
+    * @param pos The starting parse index on input, the ending parse
+    *            index on output. 
+    *
+    * @return The parsed <code>Object</code>, or <code>null</code> in
+    *         case of error.
+    */
+   public abstract Object parseObject (String str, ParsePosition pos);
+ 
+   public AttributedCharacterIterator formatToCharacterIterator(Object obj)
+   {
+     return new FormatCharacterIterator(format(obj), null, null);
+   }
+ 
+   /**
+    * Creates a copy of this object.
+    *
+    * @return The copied <code>Object</code>.
+    */
+   public Object clone ()
+   {
+     try
+       {
+ 	return super.clone ();
+       }
+     catch (CloneNotSupportedException e)
+       {
+ 	return null;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/MessageFormat.java gcc-4.1.0/libjava/classpath/java/text/MessageFormat.java
*** gcc-4.0.2/libjava/classpath/java/text/MessageFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/MessageFormat.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,831 ----
+ /* MessageFormat.java - Localized message formatting.
+    Copyright (C) 1999, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import gnu.java.text.FormatCharacterIterator;
+ 
+ import java.io.InvalidObjectException;
+ import java.util.Date;
+ import java.util.HashMap;
+ import java.util.Locale;
+ import java.util.Vector;
+ 
+ public class MessageFormat extends Format
+ {
+   /**
+    * @author Tom Tromey (tromey@cygnus.com)
+    * @author Jorge Aliss (jaliss@hotmail.com)
+    * @date March 3, 1999
+    */
+   /* Written using "Java Class Libraries", 2nd edition, plus online
+    * API docs for JDK 1.2 from http://www.javasoft.com.
+    * Status:  Believed complete and correct to 1.2, except serialization.
+    *          and parsing.
+    */
+   private static final class MessageFormatElement
+   {
+     // Argument number.
+     int argNumber;
+     // Formatter to be used.  This is the format set by setFormat.
+     Format setFormat;
+     // Formatter to be used based on the type.
+     Format format;
+ 
+     // Argument will be checked to make sure it is an instance of this
+     // class.
+     Class formatClass;
+ 
+     // Formatter type.
+     String type;
+     // Formatter style.
+     String style;
+ 
+     // Text to follow this element.
+     String trailer;
+ 
+     // Recompute the locale-based formatter.
+     void setLocale (Locale loc)
+     {
+       if (type == null)
+         ;
+       else if (type.equals("number"))
+         {
+ 	  formatClass = java.lang.Number.class;
+ 
+ 	  if (style == null)
+ 	    format = NumberFormat.getInstance(loc);
+ 	  else if (style.equals("currency"))
+ 	    format = NumberFormat.getCurrencyInstance(loc);
+ 	  else if (style.equals("percent"))
+ 	    format = NumberFormat.getPercentInstance(loc);
+ 	  else if (style.equals("integer"))
+ 	    {
+ 	      NumberFormat nf = NumberFormat.getNumberInstance(loc);
+ 	      nf.setMaximumFractionDigits(0);
+ 	      nf.setGroupingUsed(false);
+ 	      format = nf;
+ 	    }
+ 	  else
+ 	    {
+ 	      format = NumberFormat.getNumberInstance(loc);
+ 	      DecimalFormat df = (DecimalFormat) format;
+ 	      df.applyPattern(style);
+ 	    }
+         }
+       else if (type.equals("time") || type.equals("date"))
+         {
+ 	  formatClass = java.util.Date.class;
+ 
+ 	  int val = DateFormat.DEFAULT;
+ 	  boolean styleIsPattern = false;
+ 	  if (style == null)
+ 	    ;
+ 	  else if (style.equals("short"))
+ 	    val = DateFormat.SHORT;
+ 	  else if (style.equals("medium"))
+ 	    val = DateFormat.MEDIUM;
+ 	  else if (style.equals("long"))
+ 	    val = DateFormat.LONG;
+ 	  else if (style.equals("full"))
+ 	    val = DateFormat.FULL;
+ 	  else
+ 	    styleIsPattern = true;
+ 
+ 	  if (type.equals("time"))
+ 	    format = DateFormat.getTimeInstance(val, loc);
+ 	  else
+ 	    format = DateFormat.getDateInstance(val, loc);
+ 
+ 	  if (styleIsPattern)
+ 	    {
+ 	      SimpleDateFormat sdf = (SimpleDateFormat) format;
+ 	      sdf.applyPattern(style);
+ 	    }
+         }
+       else if (type.equals("choice"))
+         {
+ 	  formatClass = java.lang.Number.class;
+ 
+ 	  if (style == null)
+ 	    throw new
+ 	      IllegalArgumentException ("style required for choice format");
+ 	  format = new ChoiceFormat (style);
+         }
+     }
+   }
+ 
+   private static final long serialVersionUID = 6479157306784022952L;
+ 
+   public static class Field extends Format.Field
+   {
+     static final long serialVersionUID = 7899943957617360810L;
+ 
+     /**
+      * This is the attribute set for all characters produced
+      * by MessageFormat during a formatting.
+      */
+     public static final MessageFormat.Field ARGUMENT = new MessageFormat.Field("argument");
+ 
+     // For deserialization
+     private Field()
+     {
+       super("");
+     }
+     
+     protected Field(String s)
+     {
+       super(s);
+     }
+ 
+     /**
+      * invoked to resolve the true static constant by
+      * comparing the deserialized object to know name.
+      *
+      * @return object constant
+      */
+     protected Object readResolve() throws InvalidObjectException
+     {
+       if (getName().equals(ARGUMENT.getName()))
+ 	return ARGUMENT;
+ 
+       throw new InvalidObjectException("no such MessageFormat field called " + getName());
+     }
+ 
+   }
+ 
+   // Helper that returns the text up to the next format opener.  The
+   // text is put into BUFFER.  Returns index of character after end of
+   // string.  Throws IllegalArgumentException on error.
+   private static int scanString(String pat, int index, StringBuffer buffer)
+   {
+     int max = pat.length();
+     buffer.setLength(0);
+     boolean quoted = false;
+     for (; index < max; ++index)
+       {
+ 	char c = pat.charAt(index);
+ 	if (quoted)
+ 	  {
+ 	    // In a quoted context, a single quote ends the quoting.
+ 	    if (c == '\'')
+ 	      quoted = false;
+ 	    else
+ 	      buffer.append(c);
+ 	  }
+ 	// Check for '', which is a single quote.
+ 	else if (c == '\'' && index + 1 < max && pat.charAt(index + 1) == '\'')
+ 	  {
+ 	    buffer.append(c);
+ 	    ++index;
+ 	  }
+ 	else if (c == '\'')
+ 	  {
+ 	    // Start quoting.
+ 	    quoted = true;
+ 	  }
+ 	else if (c == '{')
+ 	  break;
+ 	else
+ 	  buffer.append(c);
+       }
+     // Note that we explicitly allow an unterminated quote.  This is
+     // done for compatibility.
+     return index;
+   }
+ 
+   // This helper retrieves a single part of a format element.  Returns
+   // the index of the terminating character.
+   private static int scanFormatElement(String pat, int index,
+                                        StringBuffer buffer, char term)
+   {
+     int max = pat.length();
+     buffer.setLength(0);
+     int brace_depth = 1;
+     boolean quoted = false;
+ 
+     for (; index < max; ++index)
+       {
+ 	char c = pat.charAt(index);
+ 	// First see if we should turn off quoting.
+ 	if (quoted)
+ 	  {
+ 	    if (c == '\'')
+ 	      quoted = false;
+ 	    // In both cases we fall through to inserting the
+ 	    // character here.
+ 	  }
+ 	// See if we have just a plain quote to insert.
+ 	else if (c == '\'' && index + 1 < max
+ 		 && pat.charAt(index + 1) == '\'')
+ 	  {
+ 	    buffer.append(c);
+ 	    ++index;
+ 	  }
+ 	// See if quoting should turn on.
+ 	else if (c == '\'')
+ 	  quoted = true;
+ 	else if (c == '{')
+ 	  ++brace_depth;
+ 	else if (c == '}')
+ 	  {
+ 	    if (--brace_depth == 0)
+ 	      break;
+ 	  }
+ 	// Check for TERM after braces, because TERM might be `}'.
+ 	else if (c == term)
+ 	  break;
+ 	// All characters, including opening and closing quotes, are
+ 	// inserted here.
+ 	buffer.append(c);
+       }
+     return index;
+   }
+ 
+   // This is used to parse a format element and whatever non-format
+   // text might trail it.
+   private static int scanFormat(String pat, int index, StringBuffer buffer,
+                                 Vector elts, Locale locale)
+   {
+     MessageFormatElement mfe = new MessageFormatElement ();
+     elts.addElement(mfe);
+ 
+     int max = pat.length();
+ 
+     // Skip the opening `{'.
+     ++index;
+ 
+     // Fetch the argument number.
+     index = scanFormatElement (pat, index, buffer, ',');
+     try
+       {
+ 	mfe.argNumber = Integer.parseInt(buffer.toString());
+       }
+     catch (NumberFormatException nfx)
+       {
+ 	IllegalArgumentException iae = new IllegalArgumentException(pat);
+ 	iae.initCause(nfx);
+ 	throw iae;
+       }
+ 
+     // Extract the element format.
+     if (index < max && pat.charAt(index) == ',')
+       {
+ 	index = scanFormatElement (pat, index + 1, buffer, ',');
+ 	mfe.type = buffer.toString();
+ 
+ 	// Extract the style.
+ 	if (index < max && pat.charAt(index) == ',')
+ 	  {
+ 	    index = scanFormatElement (pat, index + 1, buffer, '}');
+ 	    mfe.style = buffer.toString ();
+ 	  }
+       }
+ 
+     // Advance past the last terminator.
+     if (index >= max || pat.charAt(index) != '}')
+       throw new IllegalArgumentException("Missing '}' at end of message format");
+     ++index;
+ 
+     // Now fetch trailing string.
+     index = scanString (pat, index, buffer);
+     mfe.trailer = buffer.toString ();
+ 
+     mfe.setLocale(locale);
+ 
+     return index;
+   }
+ 
+   /**
+    * Applies the specified pattern to this MessageFormat.
+    *
+    * @param newPattern The Pattern
+    */
+   public void applyPattern (String newPattern)
+   {
+     pattern = newPattern;
+ 
+     StringBuffer tempBuffer = new StringBuffer ();
+ 
+     int index = scanString (newPattern, 0, tempBuffer);
+     leader = tempBuffer.toString();
+ 
+     Vector elts = new Vector ();
+     while (index < newPattern.length())
+       index = scanFormat (newPattern, index, tempBuffer, elts, locale);
+ 
+     elements = new MessageFormatElement[elts.size()];
+     elts.copyInto(elements);
+   }
+ 
+   /**
+    * Overrides Format.clone()
+    */
+   public Object clone ()
+   {
+     MessageFormat c = (MessageFormat) super.clone ();
+     c.elements = (MessageFormatElement[]) elements.clone ();
+     return c;
+   }
+ 
+   /**
+    * Overrides Format.equals(Object obj)
+    */
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof MessageFormat))
+       return false;
+     MessageFormat mf = (MessageFormat) obj;
+     return (pattern.equals(mf.pattern)
+ 	    && locale.equals(mf.locale));
+   }
+ 
+   /**
+    * A convinience method to format patterns.
+    *
+    * @param arguments The array containing the objects to be formatted.
+    */
+   public AttributedCharacterIterator formatToCharacterIterator (Object arguments)
+   {
+     Object[] arguments_array = (Object[])arguments;
+     FormatCharacterIterator iterator = new FormatCharacterIterator();
+     
+     formatInternal(arguments_array, new StringBuffer(), null, iterator);
+   
+     return iterator;
+   }
+ 
+   /**
+    * A convinience method to format patterns.
+    *
+    * @param pattern The pattern used when formatting.
+    * @param arguments The array containing the objects to be formatted.
+    */
+   public static String format (String pattern, Object arguments[])
+   {
+     MessageFormat mf = new MessageFormat (pattern);
+     StringBuffer sb = new StringBuffer ();
+     FieldPosition fp = new FieldPosition (NumberFormat.INTEGER_FIELD);
+     return mf.formatInternal(arguments, sb, fp, null).toString();
+   }
+ 
+   /**
+    * Returns the pattern with the formatted objects.
+    *
+    * @param arguments The array containing the objects to be formatted.
+    * @param appendBuf The StringBuffer where the text is appened.
+    * @param fp A FieldPosition object (it is ignored).
+    */
+   public final StringBuffer format (Object arguments[], StringBuffer appendBuf,
+ 				    FieldPosition fp)
+   {
+     return formatInternal(arguments, appendBuf, fp, null);
+   }
+ 
+   private StringBuffer formatInternal (Object arguments[],
+                                        StringBuffer appendBuf,
+ 				       FieldPosition fp,
+ 				       FormatCharacterIterator output_iterator)
+   {
+     appendBuf.append(leader);
+     if (output_iterator != null)
+       output_iterator.append(leader);
+ 
+     for (int i = 0; i < elements.length; ++i)
+       {
+ 	Object thisArg = null;
+ 	boolean unavailable = false;
+ 	if (arguments == null || elements[i].argNumber >= arguments.length)
+ 	  unavailable = true;
+ 	else
+ 	  thisArg = arguments[elements[i].argNumber];
+ 
+ 	AttributedCharacterIterator iterator = null;
+ 
+ 	Format formatter = null;
+ 
+ 	if (fp != null && i == fp.getField() && fp.getFieldAttribute() == Field.ARGUMENT)
+ 	  fp.setBeginIndex(appendBuf.length());
+ 
+ 	if (unavailable)
+ 	  appendBuf.append("{" + elements[i].argNumber + "}");
+ 	else
+ 	  {
+ 	    if (elements[i].setFormat != null)
+ 	      formatter = elements[i].setFormat;
+ 	    else if (elements[i].format != null)
+ 	      {
+ 	        if (elements[i].formatClass != null
+ 		    && ! elements[i].formatClass.isInstance(thisArg))
+ 	          throw new IllegalArgumentException("Wrong format class");
+ 	    
+ 	        formatter = elements[i].format;
+ 	      }
+ 	    else if (thisArg instanceof Number)
+ 	      formatter = NumberFormat.getInstance(locale);
+ 	    else if (thisArg instanceof Date)
+ 	      formatter = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
+ 	    else
+ 	      appendBuf.append(thisArg);
+ 	  }
+ 
+ 	if (fp != null && fp.getField() == i && fp.getFieldAttribute() == Field.ARGUMENT)
+ 	  fp.setEndIndex(appendBuf.length());
+ 
+ 	if (formatter != null)
+ 	  {
+ 	    // Special-case ChoiceFormat.
+ 	    if (formatter instanceof ChoiceFormat)
+ 	      {
+ 		StringBuffer buf = new StringBuffer ();
+ 		formatter.format(thisArg, buf, fp);
+ 		MessageFormat mf = new MessageFormat ();
+ 		mf.setLocale(locale);
+ 		mf.applyPattern(buf.toString());
+ 		mf.format(arguments, appendBuf, fp);
+ 	      }
+ 	    else
+ 	      {
+ 		if (output_iterator != null)
+ 		  iterator = formatter.formatToCharacterIterator(thisArg);
+ 		else
+ 		  formatter.format(thisArg, appendBuf, fp);
+ 	      }
+ 
+ 	    elements[i].format = formatter;
+ 	  }
+ 
+ 	if (output_iterator != null)
+ 	  {
+ 	    HashMap hash_argument = new HashMap();
+ 	    int position = output_iterator.getEndIndex();
+ 	    
+ 	    hash_argument.put (MessageFormat.Field.ARGUMENT,
+ 			       new Integer(elements[i].argNumber));
+ 
+ 	    
+ 	    if (iterator != null)
+ 	      {
+ 		output_iterator.append(iterator);
+ 		output_iterator.addAttributes(hash_argument, position, 
+ 					      output_iterator.getEndIndex());
+ 	      }	
+ 	    else
+ 	      output_iterator.append(thisArg.toString(), hash_argument);
+ 	    
+ 	    output_iterator.append(elements[i].trailer);
+ 	  }
+ 	
+ 	appendBuf.append(elements[i].trailer);
+       }
+     
+     return appendBuf;
+   }
+ 
+   /**
+    * Returns the pattern with the formatted objects.  The first argument
+    * must be a array of Objects.
+    * This is equivalent to format((Object[]) objectArray, appendBuf, fpos)
+    *
+    * @param objectArray The object array to be formatted.
+    * @param appendBuf The StringBuffer where the text is appened.
+    * @param fpos A FieldPosition object (it is ignored).
+    */
+   public final StringBuffer format (Object objectArray, StringBuffer appendBuf,
+ 				    FieldPosition fpos)
+   {
+     return format ((Object[])objectArray, appendBuf, fpos);
+   }
+ 
+   /**
+    * Returns an array with the Formats for
+    * the arguments.
+    */
+   public Format[] getFormats ()
+   {
+     Format[] f = new Format[elements.length];
+     for (int i = elements.length - 1; i >= 0; --i)
+       f[i] = elements[i].setFormat;
+     return f;
+   }
+ 
+   /**
+    * Returns the locale.
+    */
+   public Locale getLocale ()
+   {
+     return locale;
+   }
+ 
+   /**
+    * Overrides Format.hashCode()
+    */
+   public int hashCode ()
+   {
+     // FIXME: not a very good hash.
+     return pattern.hashCode() + locale.hashCode();
+   }
+ 
+   private MessageFormat ()
+   {
+   }
+ 
+   /**
+    * Creates a new MessageFormat object with
+    * the specified pattern
+    *
+    * @param pattern The Pattern
+    */
+   public MessageFormat(String pattern)
+   {
+     this(pattern, Locale.getDefault());
+   }
+ 
+   /**
+    * Creates a new MessageFormat object with
+    * the specified pattern
+    *
+    * @param pattern The Pattern
+    * @param locale The Locale to use
+    *
+    * @since 1.4
+    */
+   public MessageFormat(String pattern, Locale locale)
+   {
+     this.locale = locale;
+     applyPattern (pattern);
+   }
+ 
+   /**
+    * Parse a string <code>sourceStr</code> against the pattern specified
+    * to the MessageFormat constructor.
+    *
+    * @param sourceStr the string to be parsed.
+    * @param pos the current parse position (and eventually the error position).
+    * @return the array of parsed objects sorted according to their argument number
+    * in the pattern.
+    */ 
+   public Object[] parse (String sourceStr, ParsePosition pos)
+   {
+     // Check initial text.
+     int index = pos.getIndex();
+     if (! sourceStr.startsWith(leader, index))
+       {
+ 	pos.setErrorIndex(index);
+ 	return null;
+       }
+     index += leader.length();
+ 
+     Vector results = new Vector (elements.length, 1);
+     // Now check each format.
+     for (int i = 0; i < elements.length; ++i)
+       {
+ 	Format formatter = null;
+ 	if (elements[i].setFormat != null)
+ 	  formatter = elements[i].setFormat;
+ 	else if (elements[i].format != null)
+ 	  formatter = elements[i].format;
+ 
+ 	Object value = null;
+ 	if (formatter instanceof ChoiceFormat)
+ 	  {
+ 	    // We must special-case a ChoiceFormat because it might
+ 	    // have recursive formatting.
+ 	    ChoiceFormat cf = (ChoiceFormat) formatter;
+ 	    String[] formats = (String[]) cf.getFormats();
+ 	    double[] limits = (double[]) cf.getLimits();
+ 	    MessageFormat subfmt = new MessageFormat ();
+ 	    subfmt.setLocale(locale);
+ 	    ParsePosition subpos = new ParsePosition (index);
+ 
+ 	    int j;
+ 	    for (j = 0; value == null && j < limits.length; ++j)
+ 	      {
+ 		subfmt.applyPattern(formats[j]);
+ 		subpos.setIndex(index);
+ 		value = subfmt.parse(sourceStr, subpos);
+ 	      }
+ 	    if (value != null)
+ 	      {
+ 		index = subpos.getIndex();
+ 		value = new Double (limits[j]);
+ 	      }
+ 	  }
+ 	else if (formatter != null)
+ 	  {
+ 	    pos.setIndex(index);
+ 	    value = formatter.parseObject(sourceStr, pos);
+ 	    if (value != null)
+ 	      index = pos.getIndex();
+ 	  }
+ 	else
+ 	  {
+ 	    // We have a String format.  This can lose in a number
+ 	    // of ways, but we give it a shot.
+ 	    int next_index;
+ 	    if (elements[i].trailer.length() > 0)
+ 	      next_index = sourceStr.indexOf(elements[i].trailer, index);
+ 	    else
+ 	      next_index = sourceStr.length();
+ 	    if (next_index == -1)
+ 	      {
+ 		pos.setErrorIndex(index);
+ 		return null;
+ 	      }
+ 	    value = sourceStr.substring(index, next_index);
+ 	    index = next_index;
+ 	  }
+ 
+ 	if (value == null
+ 	    || ! sourceStr.startsWith(elements[i].trailer, index))
+ 	  {
+ 	    pos.setErrorIndex(index);
+ 	    return null;
+ 	  }
+ 
+ 	if (elements[i].argNumber >= results.size())
+ 	  results.setSize(elements[i].argNumber + 1);
+ 	results.setElementAt(value, elements[i].argNumber);
+ 
+ 	index += elements[i].trailer.length();
+       }
+ 
+     Object[] r = new Object[results.size()];
+     results.copyInto(r);
+     return r;
+   }
+ 
+   public Object[] parse (String sourceStr) throws ParseException
+   {
+     ParsePosition pp = new ParsePosition (0);
+     Object[] r = parse (sourceStr, pp);
+     if (r == null)
+       throw new ParseException ("couldn't parse string", pp.getErrorIndex());
+     return r;
+   }
+ 
+   public Object parseObject (String sourceStr, ParsePosition pos)
+   {
+     return parse (sourceStr, pos);
+   }
+ 
+   /**
+    * Sets the format for the argument at an specified
+    * index.
+    *
+    * @param variableNum The index.
+    * @param newFormat The Format object.
+    */
+   public void setFormat (int variableNum, Format newFormat)
+   {
+     elements[variableNum].setFormat = newFormat;
+   }
+ 
+   /**
+    * Sets the formats for the arguments.
+    *
+    * @param newFormats An array of Format objects.
+    */
+   public void setFormats (Format[] newFormats)
+   {
+     if (newFormats.length < elements.length)
+       throw new IllegalArgumentException("Not enough format objects");
+ 
+     int len = Math.min(newFormats.length, elements.length);
+     for (int i = 0; i < len; ++i)
+       elements[i].setFormat = newFormats[i];
+   }
+ 
+   /**
+    * Sets the locale.
+    *
+    * @param loc A Locale
+    */
+   public void setLocale (Locale loc)
+   {
+     locale = loc;
+     if (elements != null)
+       {
+ 	for (int i = 0; i < elements.length; ++i)
+ 	  elements[i].setLocale(loc);
+       }
+   }
+ 
+   /**
+    * Returns the pattern.
+    */
+   public String toPattern ()
+   {
+     return pattern;
+   }
+ 
+   /**
+    * Return the formatters used sorted by argument index. It uses the
+    * internal table to fill in this array: if a format has been
+    * set using <code>setFormat</code> or <code>setFormatByArgumentIndex</code>
+    * then it returns it at the right index. If not it uses the detected
+    * formatters during a <code>format</code> call. If nothing is known
+    * about that argument index it just puts null at that position.
+    * To get useful informations you may have to call <code>format</code>
+    * at least once.
+    *
+    * @return an array of formatters sorted by argument index.
+    */
+   public Format[] getFormatsByArgumentIndex()
+   {
+     int argNumMax = 0;
+     // First, find the greatest argument number.
+     for (int i=0;i<elements.length;i++)
+       if (elements[i].argNumber > argNumMax)
+ 	argNumMax = elements[i].argNumber;
+ 
+     Format[] formats = new Format[argNumMax];
+     for (int i=0;i<elements.length;i++)
+       {
+ 	if (elements[i].setFormat != null)
+ 	  formats[elements[i].argNumber] = elements[i].setFormat;
+ 	else if (elements[i].format != null)
+ 	  formats[elements[i].argNumber] = elements[i].format;
+       }
+     return formats;
+   }
+ 
+   /**
+    * Set the format to used using the argument index number.
+    *
+    * @param argumentIndex the argument index.
+    * @param newFormat the format to use for this argument.
+    */
+   public void setFormatByArgumentIndex(int argumentIndex,
+ 				       Format newFormat)
+   {
+     for (int i=0;i<elements.length;i++)
+       {
+ 	if (elements[i].argNumber == argumentIndex)
+ 	  elements[i].setFormat = newFormat;
+       }
+   }
+ 
+   /**
+    * Set the format for argument using a specified array of formatters
+    * which is sorted according to the argument index. If the number of
+    * elements in the array is fewer than the number of arguments only
+    * the arguments specified by the array are touched.
+    *
+    * @param newFormats array containing the new formats to set.
+    *
+    * @throws NullPointerException if newFormats is null
+    */
+   public void setFormatsByArgumentIndex(Format[] newFormats)
+   {
+     for (int i=0;i<newFormats.length;i++)
+       {
+ 	// Nothing better than that can exist here.
+ 	setFormatByArgumentIndex(i, newFormats[i]);
+       }
+   }
+ 
+   // The pattern string.
+   private String pattern;
+   // The locale.
+   private Locale locale;
+   // Variables.
+   private MessageFormatElement[] elements;
+   // Leader text.
+   private String leader;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/NumberFormat.java gcc-4.1.0/libjava/classpath/java/text/NumberFormat.java
*** gcc-4.0.2/libjava/classpath/java/text/NumberFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/NumberFormat.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,808 ----
+ /* NumberFormat.java -- Formats and parses numbers
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.io.IOException;
+ import java.io.InvalidObjectException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.util.Currency;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * This is the abstract superclass of all classes which format and 
+  * parse numeric values such as decimal numbers, integers, currency values,
+  * and percentages.  These classes perform their parsing and formatting
+  * in a locale specific manner, accounting for such items as differing
+  * currency symbols and thousands separators.
+  * <p>
+  * To create an instance of a concrete subclass of <code>NumberFormat</code>,
+  * do not call a class constructor directly.  Instead, use one of the
+  * static factory methods in this class such as 
+  * <code>getCurrencyInstance</code>.
+  * 
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @date March 4, 1999
+  */
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 from http://www.javasoft.com.
+  * Status:  Believed complete and correct to 1.2, except getAvailableLocales.
+  */
+ public abstract class NumberFormat extends Format implements Cloneable
+ {
+   /**
+    * This is a constant used to create a <code>FieldPosition</code> object
+    * that will return the integer portion of a formatted number.
+    */
+   public static final int INTEGER_FIELD = 0;
+ 
+   /**
+    * This is a constant used to create a <code>FieldPosition</code> object
+    * that will return the fractional portion of a formatted number.
+    */
+   public static final int FRACTION_FIELD = 1;
+ 
+   public static class Field extends Format.Field
+   {
+     static final long serialVersionUID = 7494728892700160890L;
+ 
+     /**
+      * Attribute set to all characters containing digits of the integer
+      * part.
+      */
+     public static final NumberFormat.Field INTEGER
+       = new Field("integer");
+ 
+     /**
+      * Attribute set to all characters containing digits of the fractional
+      * part.
+      */
+     public static final NumberFormat.Field FRACTION
+       = new Field("fraction");
+ 
+     /**
+      * Attribute set to all characters containing digits of the exponential
+      * part.
+      */
+     public static final NumberFormat.Field EXPONENT
+       = new Field("exponent");
+ 
+     /**
+      * Attribute set to all characters containing a decimal separator.
+      */
+     public static final NumberFormat.Field DECIMAL_SEPARATOR
+       = new Field("decimal separator");
+ 
+     /**
+      * Attribute set to all characters containing a sign (plus or minus).
+      */
+     public static final NumberFormat.Field SIGN
+       = new Field("sign");
+ 
+     /**
+      * Attribute set to all characters containing a grouping separator (e.g.
+      * a comma, a white space,...).
+      */
+     public static final NumberFormat.Field GROUPING_SEPARATOR
+       = new Field("grouping separator");
+ 
+     /**
+      * Attribute set to all characters containing an exponential symbol (e.g.
+      * 'E')
+      */
+     public static final NumberFormat.Field EXPONENT_SYMBOL
+       = new Field("exponent symbol");
+ 
+     /**
+      * Attribute set to all characters containing a percent symbol (e.g. '%')
+      */
+     public static final NumberFormat.Field PERCENT
+       = new Field("percent");
+ 
+     /**
+      * Attribute set to all characters containing a permille symbol.
+      */
+     public static final NumberFormat.Field PERMILLE
+       = new Field("permille");
+ 
+     /**
+      * Attribute set to all characters containing the currency unit.
+      */
+     public static final NumberFormat.Field CURRENCY
+       = new Field("currency");
+ 
+     /**
+      * Attribute set to all characters containing the exponent sign.
+      */
+     public static final NumberFormat.Field EXPONENT_SIGN
+       = new Field("exponent sign");
+ 
+     /**
+      * Private fields to register all fields contained in this descriptor.
+      */
+     private static final NumberFormat.Field[] allFields =
+     {
+       INTEGER, FRACTION, EXPONENT, DECIMAL_SEPARATOR, SIGN,
+       GROUPING_SEPARATOR, EXPONENT_SYMBOL, PERCENT,
+       PERMILLE, CURRENCY, EXPONENT_SIGN
+     };
+ 
+     /**
+      * This constructor is only used by the deserializer. Without it,
+      * it would fail to construct a valid object.
+      */
+     private Field()
+     {
+       super("");
+     }
+ 
+     /**
+      * Create a Field instance with the specified field name.
+      *
+      * @param field_name Field name for the new Field instance.
+      */
+     protected Field(String field_name)
+     {
+       super (field_name);
+     }
+ 
+     /**
+      * This function is used by the deserializer to know which object
+      * to use when it encounters an encoded NumberFormat.Field in a 
+      * serialization stream. If the stream is valid it should return
+      * one of the above field. In the other case we throw an exception.
+      *
+      * @return a valid official NumberFormat.Field instance.
+      *
+      * @throws InvalidObjectException if the field name is invalid.
+      */
+     protected Object readResolve() throws InvalidObjectException
+     {
+       String s = getName();
+       for (int i = 0; i < allFields.length; i++)
+ 	if (s.equals(allFields[i].getName()))
+ 	  return allFields[i];
+ 
+       throw new InvalidObjectException("no such NumberFormat field called "
+ 				       + s);
+     }
+   }
+ 
+   /**
+    * This method is a specialization of the format method that performs
+    * a simple formatting of the specified <code>long</code> number.
+    *
+    * @param number The <code>long</code> to format.
+    *
+    * @return The formatted number
+    */
+   public final String format (long number)
+   {
+     StringBuffer sbuf = new StringBuffer(50);
+     format (number, sbuf, null);
+     return sbuf.toString();
+   }
+ 
+   public final StringBuffer format (Object obj, StringBuffer sbuf,
+ 				    FieldPosition pos)
+   {
+     if (obj instanceof Number)
+       return format(((Number) obj).doubleValue(), sbuf, pos);
+     else
+       throw new IllegalArgumentException 
+ 	("Cannot format given Object as a Number");
+   }
+ 
+   /**
+    * This method formats the specified <code>double</code> and appends it to
+    * a <code>StringBuffer</code>.
+    * 
+    * @param number The <code>double</code> to format.
+    * @param sbuf The <code>StringBuffer</code> to append the formatted number 
+    *             to.
+    * @param pos The desired <code>FieldPosition</code>.
+    *
+    * @return The <code>StringBuffer</code> with the appended number.
+    */
+   public abstract StringBuffer format (double number,
+ 				       StringBuffer sbuf, FieldPosition pos);
+ 
+   /**
+    * This method formats the specified <code>long</code> and appends it to
+    * a <code>StringBuffer</code>.
+    * 
+    * @param number The <code>long</code> to format.
+    * @param sbuf The <code>StringBuffer</code> to append the formatted number 
+    *             to.
+    * @param pos The desired <code>FieldPosition</code>.
+    *
+    * @return The <code>StringBuffer</code> with the appended number.
+    */
+   public abstract StringBuffer format (long number,
+ 				       StringBuffer sbuf, FieldPosition pos);
+ 
+   /**
+    * This method tests the specified object for equality against this object.
+    * This will be <code>true</code> if the following conditions are met:
+    * <p>
+    * <ul>
+    * <li>The specified object is not <code>null</code>.
+    * <li>The specified object is an instance of <code>NumberFormat</code>.
+    * </ul>
+    * <p>
+    * Since this method does not test much, it is highly advised that 
+    * concrete subclasses override this method.
+    *
+    * @param obj The <code>Object</code> to test against equality with
+    *            this object. 
+    * 
+    * @return <code>true</code> if the specified object is equal to
+    * this object, <code>false</code> otherwise. 
+    */
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof NumberFormat))
+       return false;
+     NumberFormat nf = (NumberFormat) obj;
+     return (groupingUsed == nf.groupingUsed
+ 	    && maximumFractionDigits == nf.maximumFractionDigits
+ 	    && maximumIntegerDigits == nf.maximumIntegerDigits
+ 	    && minimumFractionDigits == nf.minimumFractionDigits
+ 	    && minimumIntegerDigits == nf.minimumIntegerDigits
+ 	    && parseIntegerOnly == nf.parseIntegerOnly);
+   }
+ 
+   /**
+    * This method returns a list of locales for which concrete instances
+    * of <code>NumberFormat</code> subclasses may be created.
+    *
+    * @return The list of available locales.
+    */
+   public static Locale[] getAvailableLocales ()
+   {
+     Locale[] list = new Locale[1];
+     list[0] = Locale.US;
+     return list;
+   }
+ 
+   private static NumberFormat computeInstance(Locale loc, String resource,
+                                               String def)
+   {
+     ResourceBundle res;
+     try
+       {
+ 	res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+ 		loc, ClassLoader.getSystemClassLoader());
+       }
+     catch (MissingResourceException x)
+       {
+ 	res = null;
+       }
+     String fmt;
+     try
+       {
+ 	fmt = res == null ? def : res.getString(resource);
+       }
+     catch (MissingResourceException x)
+       {
+ 	fmt = def;
+       }
+     DecimalFormatSymbols dfs = new DecimalFormatSymbols (loc);
+     return new DecimalFormat (fmt, dfs);
+   }
+ 
+   /**
+    * This method returns an instance of <code>NumberFormat</code> suitable
+    * for formatting and parsing currency values in the default locale.
+    *
+    * @return An instance of <code>NumberFormat</code> for handling currencies.
+    */
+   public static final NumberFormat getCurrencyInstance ()
+   {
+     return getCurrencyInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>NumberFormat</code> suitable
+    * for formatting and parsing currency values in the specified locale.
+    *
+    * @return An instance of <code>NumberFormat</code> for handling currencies.
+    */
+   public static NumberFormat getCurrencyInstance (Locale loc)
+   {
+     NumberFormat format;
+     
+     format = computeInstance (loc, "currencyFormat", "$#,##0.00;($#,##0.00)");
+     format.setMaximumFractionDigits(format.getCurrency().getDefaultFractionDigits());  
+     return format;
+   }
+ 
+   /**
+    * This method returns a default instance for the default locale. This
+    * will be a concrete subclass of <code>NumberFormat</code>, but the 
+    * actual class returned is dependent on the locale.
+    *
+    * @return An instance of the default <code>NumberFormat</code> class.
+    */
+   public static final NumberFormat getInstance ()
+   {
+     return getInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns a default instance for the specified locale. This
+    * will be a concrete subclass of <code>NumberFormat</code>, but the 
+    * actual class returned is dependent on the locale.
+    *
+    * @param loc The desired locale.
+    *
+    * @return An instance of the default <code>NumberFormat</code> class.
+    */
+   public static NumberFormat getInstance (Locale loc)
+   {
+     // For now always return a number instance.
+     return getNumberInstance (loc);
+   }
+ 
+   /**
+    * This method returns the maximum number of digits allowed in the fraction
+    * portion of a number.
+    *
+    * @return The maximum number of digits allowed in the fraction
+    * portion of a number. 
+    */
+   public int getMaximumFractionDigits ()
+   {
+     return maximumFractionDigits;
+   }
+ 
+   /**
+    * This method returns the maximum number of digits allowed in the integer
+    * portion of a number.
+    *
+    * @return The maximum number of digits allowed in the integer
+    * portion of a number. 
+    */
+   public int getMaximumIntegerDigits ()
+   {
+     return maximumIntegerDigits;
+   }
+ 
+   /**
+    * This method returns the minimum number of digits allowed in the fraction
+    * portion of a number.
+    *
+    * @return The minimum number of digits allowed in the fraction
+    * portion of a number. 
+    */
+   public int getMinimumFractionDigits ()
+   {
+     return minimumFractionDigits;
+   }
+ 
+   /**
+    * This method returns the minimum number of digits allowed in the integer
+    * portion of a number.
+    *
+    * @return The minimum number of digits allowed in the integer
+    * portion of a number. 
+    */
+   public int getMinimumIntegerDigits ()
+   {
+     return minimumIntegerDigits;
+   }
+ 
+   /**
+    * This method returns a default instance for the specified locale. This
+    * will be a concrete subclass of <code>NumberFormat</code>, but the 
+    * actual class returned is dependent on the locale.
+    *
+    * @return An instance of the default <code>NumberFormat</code> class.
+    */
+   public static final NumberFormat getNumberInstance ()
+   {
+     return getNumberInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns a general purpose number formatting and parsing
+    * class for the default locale.  This will be a concrete subclass of
+    * <code>NumberFormat</code>, but the actual class returned is dependent
+    * on the locale.
+    *
+    * @return An instance of a generic number formatter for the default locale.
+    */
+   public static NumberFormat getNumberInstance (Locale loc)
+   {
+     return computeInstance (loc, "numberFormat", "#,##0.###");
+   }
+ 
+   /**
+    * This method returns an integer formatting and parsing class for the
+    * default locale. This will be a concrete subclass of <code>NumberFormat</code>,
+    * but the actual class returned is dependent on the locale.
+    *
+    * @return An instance of an integer number formatter for the default locale.
+    * @since 1.4 
+    */
+   public static final NumberFormat getIntegerInstance()
+   {
+     return getIntegerInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an integer formatting and parsing class for the
+    * default locale. This will be a concrete subclass of <code>NumberFormat</code>,
+    * but the actual class returned is dependent on the locale.
+    *
+    * @param locale the desired locale.
+    *
+    * @return An instance of an integer number formatter for the desired locale.
+    * @since 1.4 
+    */
+   public static NumberFormat getIntegerInstance(Locale locale)
+   {
+     NumberFormat format = computeInstance (locale, "numberFormat", "#,##0");
+     format.setMaximumFractionDigits(0);
+     format.setParseIntegerOnly (true);
+     return format;
+   }
+ 
+   /**
+    * This method returns an instance of <code>NumberFormat</code> suitable
+    * for formatting and parsing percentage values in the default locale.
+    *
+    * @return An instance of <code>NumberFormat</code> for handling percentages.
+    */
+   public static final NumberFormat getPercentInstance ()
+   {
+     return getPercentInstance (Locale.getDefault());
+   }
+ 
+   /**
+    * This method returns an instance of <code>NumberFormat</code> suitable
+    * for formatting and parsing percentage values in the specified locale.
+    *
+    * @param loc The desired locale.
+    *
+    * @return An instance of <code>NumberFormat</code> for handling percentages.
+    */
+   public static NumberFormat getPercentInstance (Locale loc)
+   {
+     return computeInstance (loc, "percentFormat", "#,##0%");
+   }
+ 
+   /**
+    * This method returns a hash value for this object.
+    *
+    * @return The hash code.
+    */
+   public int hashCode ()
+   {
+     int hash = super.hashCode();
+     hash ^= (maximumFractionDigits + maximumIntegerDigits
+ 	     + minimumFractionDigits + minimumIntegerDigits);
+     if (groupingUsed)
+       hash ^= 0xf0f0;
+     if (parseIntegerOnly)
+       hash ^= 0x0f0f;
+     return hash;
+   }
+ 
+   /**
+    * This method tests whether or not grouping is in use.  Grouping is
+    * a method of marking separations in numbers, such as thousand separators
+    * in the US English locale.  The grouping positions and symbols are all
+    * locale specific.  As an example, with grouping disabled, the number one
+    * million would appear as "1000000".  With grouping enabled, this number
+    * might appear as "1,000,000".  (Both of these assume the US English
+    * locale).
+    *
+    * @return <code>true</code> if grouping is enabled,
+    * <code>false</code> otherwise. 
+    */
+   public boolean isGroupingUsed ()
+   {
+     return groupingUsed;
+   }
+ 
+   /**
+    * This method tests whether or not only integer values should be parsed.
+    * If this class is parsing only integers, parsing stops at the decimal
+    * point.
+    *
+    * @return <code>true</code> if only integers are parsed,
+    * <code>false</code> otherwise. 
+    */
+   public boolean isParseIntegerOnly ()
+   {
+     return parseIntegerOnly;
+   }
+ 
+   /**
+    * This is a default constructor for use by subclasses.
+    */
+   public NumberFormat ()
+   {
+   }
+ 
+   /**
+    * This method parses the specified string into a <code>Number</code>.  This
+    * will be a <code>Long</code> if possible, otherwise it will be a
+    * <code>Double</code>.    If no number can be parsed, no exception is
+    * thrown.  Instead, the parse position remains at its initial index.
+    *
+    * @param sourceStr The string to parse.
+    * @param pos The desired <code>ParsePosition</code>.
+    *
+    * @return The parsed <code>Number</code>
+    */
+   public abstract Number parse (String sourceStr, ParsePosition pos);
+ 
+   /**
+    * This method parses the specified string into a <code>Number</code>.  This
+    * will be a <code>Long</code> if possible, otherwise it will be a
+    * <code>Double</code>.  If no number can be parsed, an exception will be
+    * thrown.
+    *
+    * @param sourceStr The string to parse.
+    *
+    * @return The parsed <code>Number</code>
+    *
+    * @exception ParseException If no number can be parsed.
+    */
+   public Number parse (String sourceStr) throws ParseException
+   {
+     ParsePosition pp = new ParsePosition (0);
+     Number r = parse (sourceStr, pp);
+     if (r == null)
+       {
+ 	int index = pp.getErrorIndex();
+ 	if (index < 0)
+ 	  index = pp.getIndex();
+ 	throw new ParseException ("couldn't parse number", index);
+       }
+     return r;
+   }
+ 
+   /**
+    * This method parses the specified string into an <code>Object</code>.  This
+    * will be a <code>Long</code> if possible, otherwise it will be a
+    * <code>Double</code>.    If no number can be parsed, no exception is
+    * thrown.  Instead, the parse position remains at its initial index.
+    *
+    * @param sourceStr The string to parse.
+    * @param pos The desired <code>ParsePosition</code>.
+   *
+   * @return The parsed <code>Object</code>
+   */
+   public final Object parseObject (String sourceStr, ParsePosition pos)
+   {
+     return parse (sourceStr, pos);
+   }
+ 
+   /**
+    * This method sets the grouping behavior of this formatter.  Grouping is
+    * a method of marking separations in numbers, such as thousand separators
+    * in the US English locale.  The grouping positions and symbols are all
+    * locale specific.  As an example, with grouping disabled, the number one
+    * million would appear as "1000000".  With grouping enabled, this number
+    * might appear as "1,000,000".  (Both of these assume the US English
+    * locale).
+    *
+    * @param newValue <code>true</code> to enable grouping,
+    *                     <code>false</code> to disable it. 
+    */
+   public void setGroupingUsed (boolean newValue)
+   {
+     groupingUsed = newValue;
+   }
+ 
+   /**
+    * This method sets the maximum number of digits allowed in the fraction
+    * portion of a number to the specified value.  If this is less than the
+    * current minimum allowed digits, the minimum allowed digits value will
+    * be lowered to be equal to the new maximum allowed digits value.
+    *
+    * @param digits The new maximum fraction digits value.
+    */
+   public void setMaximumFractionDigits (int digits)
+   {
+     maximumFractionDigits = digits;
+     if (getMinimumFractionDigits () > maximumFractionDigits)
+       setMinimumFractionDigits (maximumFractionDigits);
+   }
+ 
+   /**
+    * This method sets the maximum number of digits allowed in the integer
+    * portion of a number to the specified value.  If this is less than the
+    * current minimum allowed digits, the minimum allowed digits value will
+    * be lowered to be equal to the new maximum allowed digits value.
+    *
+    * @param digits The new maximum integer digits value.
+    */
+   public void setMaximumIntegerDigits (int digits)
+   {
+     maximumIntegerDigits = digits;
+     if (getMinimumIntegerDigits () > maximumIntegerDigits)
+       setMinimumIntegerDigits (maximumIntegerDigits);
+   }
+ 
+   /**
+    * This method sets the minimum number of digits allowed in the fraction
+    * portion of a number to the specified value.  If this is greater than the
+    * current maximum allowed digits, the maximum allowed digits value will
+    * be raised to be equal to the new minimum allowed digits value.
+    *
+    * @param digits The new minimum fraction digits value.
+    */
+   public void setMinimumFractionDigits (int digits)
+   {
+     minimumFractionDigits = digits;
+     if (getMaximumFractionDigits () < minimumFractionDigits)
+       setMaximumFractionDigits (minimumFractionDigits);
+   }
+ 
+   /**
+    * This method sets the minimum number of digits allowed in the integer
+    * portion of a number to the specified value.  If this is greater than the
+    * current maximum allowed digits, the maximum allowed digits value will
+    * be raised to be equal to the new minimum allowed digits value.
+    *
+    * @param digits The new minimum integer digits value.
+    */
+   public void setMinimumIntegerDigits (int digits)
+   {
+     minimumIntegerDigits = digits;
+     if (getMaximumIntegerDigits () < minimumIntegerDigits)
+       setMaximumIntegerDigits (minimumIntegerDigits);
+   }
+ 
+   /** 
+    * This method sets the parsing behavior of this object to parse only 
+    * integers or not.
+    *
+    * @param value <code>true</code> to parse only integers,
+    *                         <code>false</code> otherwise. 
+    */
+   public void setParseIntegerOnly (boolean value)
+   {
+     parseIntegerOnly = value;
+   }
+ 
+   /**
+    * This method is a specialization of the format method that performs
+    * a simple formatting of the specified <code>double</code> number.
+    *
+    * @param number The <code>double</code> to format.
+    *
+    * @return The formatted number
+    */
+   public final String format (double number)
+   {
+     StringBuffer sbuf = new StringBuffer(50);
+     format (number, sbuf, null);
+     return sbuf.toString();
+   }
+ 
+   // These field names are fixed by the serialization spec.
+   boolean groupingUsed;
+   int maximumFractionDigits;
+   private byte maxFractionDigits;
+   int maximumIntegerDigits;
+   private byte maxIntegerDigits;
+   int minimumFractionDigits;
+   private byte minFractionDigits;
+   int minimumIntegerDigits;
+   private byte minIntegerDigits;
+   boolean parseIntegerOnly;
+   private int serialVersionOnStream;
+   private static final long serialVersionUID = -2308460125733713944L;
+ 
+   private void readObject(ObjectInputStream stream)
+     throws IOException, ClassNotFoundException
+   {
+     stream.defaultReadObject();
+     if (serialVersionOnStream < 1)
+       {
+         maximumFractionDigits = maxFractionDigits;
+ 	maximumIntegerDigits = maxIntegerDigits;
+ 	minimumFractionDigits = minFractionDigits;
+ 	minimumIntegerDigits = minIntegerDigits;
+ 	serialVersionOnStream = 1;
+       }
+   }
+ 
+   private void writeObject(ObjectOutputStream stream) throws IOException
+   {
+     maxFractionDigits = maximumFractionDigits < Byte.MAX_VALUE ?
+       (byte) maximumFractionDigits : Byte.MAX_VALUE;
+     maxIntegerDigits = maximumIntegerDigits < Byte.MAX_VALUE ?
+       (byte) maximumIntegerDigits : Byte.MAX_VALUE;
+     minFractionDigits = minimumFractionDigits < Byte.MAX_VALUE ?
+       (byte) minimumFractionDigits : Byte.MAX_VALUE;
+     minIntegerDigits = minimumIntegerDigits < Byte.MAX_VALUE ?
+       (byte) minimumIntegerDigits : Byte.MAX_VALUE;
+     serialVersionOnStream = 1;
+     stream.defaultWriteObject();
+   }
+ 
+   /**
+    * Returns the currency used by this number format when formatting currency
+    * values.
+    *
+    * The default implementation throws UnsupportedOperationException.
+    *
+    * @return The used currency object, or null.
+    *
+    * @throws UnsupportedOperationException If the number format class doesn't
+    * implement currency formatting.
+    *
+    * @since 1.4
+    */
+   public Currency getCurrency()
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Sets the currency used by this number format when formatting currency
+    * values.
+    *
+    * The default implementation throws UnsupportedOperationException.
+    *
+    * @param currency The new currency to be used by this number format.
+    *
+    * @throws NullPointerException If currenc is null.
+    * @throws UnsupportedOperationException If the number format class doesn't
+    * implement currency formatting.
+    *
+    * @since 1.4
+    */
+   public void setCurrency(Currency currency)
+   {
+     if (currency == null)
+       throw new NullPointerException("currency may not be null");
+     
+     throw new UnsupportedOperationException();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/ParseException.java gcc-4.1.0/libjava/classpath/java/text/ParseException.java
*** gcc-4.0.2/libjava/classpath/java/text/ParseException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/ParseException.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,86 ----
+ /* ParseException.java -- an error occurred while parsing
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ /**
+  * This exception is thrown when an unexpected error occurs during parsing.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  * @see Format
+  * @see FieldPosition
+  * @status updated to 1.4
+  */
+ public class ParseException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 2703218443322787634L;
+ 
+   /**
+    * This is the position where the error was encountered.
+    *
+    * @serial the zero-based offset in the string where the error occurred
+    */
+   private final int errorOffset;
+ 
+   /**
+    * This method initializes a new instance of <code>ParseException</code>
+    * with a detailed error message and a error position.
+    *
+    * @param s the descriptive message describing the error
+    * @param offset the position where the error was encountered
+    */
+   public ParseException(String s, int offset)
+   {
+     super(s);
+     errorOffset = offset;
+   }
+ 
+   /**
+    * This method returns the position where the error occurred.
+    *
+    * @return the position where the error occurred
+    */
+   public int getErrorOffset()
+   {
+     return errorOffset;
+   }
+ } // class ParseException
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/ParsePosition.java gcc-4.1.0/libjava/classpath/java/text/ParsePosition.java
*** gcc-4.0.2/libjava/classpath/java/text/ParsePosition.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/ParsePosition.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,160 ----
+ /* ParsePosition.java -- Keep track of position while parsing.
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ /**
+  * This class is used to keep track of the current position during parsing
+  * operations.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Per Bothner (bothner@cygnus.com)
+  */
+ public class ParsePosition
+ {
+   /**
+    * This is the index of the current parse position.
+    */
+   private int index;
+ 
+   /**
+    * This is the index of the position where an error occurred during parsing.
+    */
+   private int error_index;
+ 
+   /**
+    * This method initializes a new instance of <code>ParsePosition</code> to
+    * have the specified initial index value.
+    *
+    * @param index The initial parsing index.
+    */
+   public ParsePosition (int index)
+   {
+     this.index = index;
+     error_index = -1;
+   }
+ 
+   /**
+    * This method returns the current parsing index.
+    *
+    * @return The current parsing index
+    */
+   public int getIndex ()
+   {
+     return index;
+   }
+ 
+   /**
+    * This method sets the current parsing index to the specified value.
+    *
+    * @param index The new parsing index.
+    */
+   public void setIndex (int index)
+   {
+     this.index = index;
+   }
+ 
+   /**
+    * This method returns the error index value.  This value defaults to -1
+    * unless explicitly set to another value.
+    *
+    * @return The error index.
+    */
+   public int getErrorIndex ()
+   {
+     return error_index;
+   }
+ 
+   /**
+    * This method sets the error index to the specified value.
+    *
+    * @param error_index The new error index
+    */
+   public void setErrorIndex (int error_index)
+   {
+     this.error_index = error_index;
+   }
+ 
+   /**
+    * This method tests the specified object for equality with this
+    * object.  The two objects will be considered equal if and only if
+    * all of the following conditions are met.
+    * <p>
+    * <ul>
+    * <li>The specified object is not <code>null</code>.</li>
+    * <li>The specified object is an instance of <code>ParsePosition</code>.</li>
+    * <li>The specified object has the same index and error index as
+    *     this object.</li>
+    * </ul>
+    *
+    * @param obj The <code>Object</code> to test for equality against
+    *            this object. 
+    *
+    * @return <code>true</code> if the specified object is equal to
+    * this object, <code>false</code> otherwise.
+    */
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof ParsePosition))
+       return false;
+ 
+     ParsePosition other = (ParsePosition) obj;
+     return index == other.index && error_index == other.error_index;
+   }
+   
+   /**
+    * Return the hash code for this object.
+    * @return the hash code
+    */
+   public int hashCode()
+   {
+     return index ^ error_index;
+   }
+ 
+   /**
+    * This method returns a <code>String</code> representation of this
+    * object.
+    *
+    * @return A <code>String</code> that represents this object.
+    */
+   public String toString ()
+   {
+     return (getClass ().getName () + "[index=" + getIndex ()
+ 	    + ",errorIndex=" + getErrorIndex () + "]");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/RuleBasedCollator.java gcc-4.1.0/libjava/classpath/java/text/RuleBasedCollator.java
*** gcc-4.0.2/libjava/classpath/java/text/RuleBasedCollator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/RuleBasedCollator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1017 ----
+ /* RuleBasedCollator.java -- Concrete Collator Class
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, plus online
+  * API docs for JDK 1.2 from http://www.javasoft.com.
+  * Status: Believed complete and correct
+  */
+ 
+ /**
+  * This class is a concrete subclass of <code>Collator</code> suitable
+  * for string collation in a wide variety of languages.  An instance of
+  * this class is normally returned by the <code>getInstance</code> method
+  * of <code>Collator</code> with rules predefined for the requested
+  * locale.  However, an instance of this class can be created manually
+  * with any desired rules.
+  * <p>
+  * Rules take the form of a <code>String</code> with the following syntax
+  * <ul>
+  * <li> Modifier: '@'</li>
+  * <li> Relation: '&lt;' | ';' | ',' | '=' : &lt;text&gt;</li>
+  * <li> Reset: '&amp;' : &lt;text&gt;</li>
+  * </ul>
+  * The modifier character indicates that accents sort backward as is the
+  * case with French.  The modifier applies to all rules <b>after</b>
+  * the modifier but before the next primary sequence. If placed at the end
+  * of the sequence if applies to all unknown accented character.
+  * The relational operators specify how the text 
+  * argument relates to the previous term.  The relation characters have
+  * the following meanings:
+  * <ul>
+  * <li>'&lt;' - The text argument is greater than the prior term at the primary
+  * difference level.</li>
+  * <li>';' - The text argument is greater than the prior term at the secondary
+  * difference level.</li>
+  * <li>',' - The text argument is greater than the prior term at the tertiary
+  * difference level.</li>
+  * <li>'=' - The text argument is equal to the prior term</li>
+  * </ul>
+  * <p>
+  * As for the text argument itself, this is any sequence of Unicode
+  * characters not in the following ranges: 0x0009-0x000D, 0x0020-0x002F,
+  * 0x003A-0x0040, 0x005B-0x0060, and 0x007B-0x007E. If these characters are 
+  * desired, they must be enclosed in single quotes.  If any whitespace is 
+  * encountered, it is ignored.  (For example, "a b" is equal to "ab").  
+  * <p>
+  * The reset operation inserts the following rule at the point where the
+  * text argument to it exists in the previously declared rule string.  This
+  * makes it easy to add new rules to an existing string by simply including
+  * them in a reset sequence at the end.  Note that the text argument, or
+  * at least the first character of it, must be present somewhere in the
+  * previously declared rules in order to be inserted properly.  If this
+  * is not satisfied, a <code>ParseException</code> will be thrown. 
+  * <p>
+  * This system of configuring <code>RuleBasedCollator</code> is needlessly
+  * complex and the people at Taligent who developed it (along with the folks
+  * at Sun who accepted it into the Java standard library) deserve a slow
+  * and agonizing death.
+  * <p>
+  * Here are a couple of example of rule strings:
+  * <p>
+  * "&lt; a &lt; b &lt; c" - This string says that a is greater than b which is 
+  * greater than c, with all differences being primary differences.
+  * <p>
+  * "&lt; a,A &lt; b,B &lt; c,C" - This string says that 'A' is greater than 'a' with
+  * a tertiary strength comparison.  Both 'b' and 'B' are greater than 'a' and
+  * 'A' during a primary strength comparison.  But 'B' is greater than 'b'
+  * under a tertiary strength comparison.
+  * <p>
+  * "&lt; a &lt; c &amp; a &lt; b " - This sequence is identical in function to the 
+  * "&lt; a &lt; b &lt; c" rule string above.  The '&amp;' reset symbol indicates that
+  * the rule "&lt; b" is to be inserted after the text argument "a" in the
+  * previous rule string segment.
+  * <p>
+  * "&lt; a &lt; b &amp; y &lt; z" - This is an error.  The character 'y' does not appear
+  * anywhere in the previous rule string segment so the rule following the
+  * reset rule cannot be inserted.
+  * <p>
+  * "&lt; a &amp; A @ &lt; e &amp; E &lt; f&amp; F" - This sequence is equivalent to the following
+  * "&lt; a &amp; A &lt; E &amp; e &lt; f &amp; F".
+  * <p>
+  * For a description of the various comparison strength types, see the
+  * documentation for the <code>Collator</code> class.
+  * <p>
+  * As an additional complication to this already overly complex rule scheme,
+  * if any characters precede the first rule, these characters are considered
+  * ignorable.  They will be treated as if they did not exist during 
+  * comparisons.  For example, "- &lt; a &lt; b ..." would make '-' an ignorable
+  * character such that the strings "high-tech" and "hightech" would
+  * be considered identical.
+  * <p>
+  * A <code>ParseException</code> will be thrown for any of the following
+  * conditions:
+  * <ul>
+  * <li>Unquoted punctuation characters in a text argument.</li>
+  * <li>A relational or reset operator not followed by a text argument</li>
+  * <li>A reset operator where the text argument is not present in
+  * the previous rule string section.</li>
+  * </ul>
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Guilhem Lavaux (guilhem@kaffe.org)
+  */
+ public class RuleBasedCollator extends Collator
+ {
+   /**
+    * This class describes what rank has a character (or a sequence of characters) 
+    * in the lexicographic order. Each element in a rule has a collation element.
+    */
+   static final class CollationElement
+   {
+     String key;
+     int primary;
+     short secondary;
+     short tertiary;
+     short equality;
+     boolean ignore;
+     String expansion;
+ 
+     CollationElement(String key, int primary, short secondary, short tertiary,
+ 		     short equality, String expansion, boolean ignore)
+     {
+       this.key = key;
+       this.primary = primary;
+       this.secondary = secondary;
+       this.tertiary = tertiary;
+       this.equality = equality;
+       this.ignore = ignore;
+       this.expansion = expansion;
+     }
+ 
+     int getValue()
+     {
+       return (primary << 16) + (secondary << 8) + tertiary;
+     }
+   }
+ 
+   /**
+    * Basic collation instruction (internal format) to build the series of
+    * collation elements. It contains an instruction which specifies the new
+    * state of the generator. The sequence of instruction should not contain
+    * RESET (it is used by
+    * {@link #mergeRules(int,java.lang.String,java.util.ArrayList,java.util.ArrayList)})
+    * as a temporary state while merging two sets of instructions.
+    */
+   static final class CollationSorter
+   {
+     static final int GREATERP = 0;
+     static final int GREATERS = 1;
+     static final int GREATERT = 2;
+     static final int EQUAL = 3;
+     static final int RESET = 4;
+     static final int INVERSE_SECONDARY = 5;
+     
+     int comparisonType;
+     String textElement;
+     int hashText;
+     int offset;
+     boolean ignore;
+ 
+     String expansionOrdering;
+   }
+ 
+   /**
+    * This the the original rule string.
+    */
+   private String rules;
+ 
+   /**
+    * This is the table of collation element values
+    */
+   private Object[] ce_table;
+ 
+   /**
+    * Quick-prefix finder.
+    */
+   HashMap prefix_tree;
+ 
+   /**
+    * This is the value of the last sequence entered into
+    * <code>ce_table</code>. It is used to compute the
+    * ordering value of unspecified character.
+    */
+   private int last_primary_value;
+ 
+   /**
+    * This is the value of the last secondary sequence of the
+    * primary 0, entered into
+    * <code>ce_table</code>. It is used to compute the
+    * ordering value of an unspecified accented character.
+    */
+   private int last_tertiary_value;
+ 
+   /**
+    * This variable is true if accents need to be sorted
+    * in the other direction.
+    */
+   private boolean inverseAccentComparison;
+ 
+   /**
+    * This collation element is special to unknown sequence.
+    * The JDK uses it to mark and sort the characters which has
+    * no collation rules.
+    */
+   static final CollationElement SPECIAL_UNKNOWN_SEQ = 
+     new CollationElement("", (short) 32767, (short) 0, (short) 0,
+ 			 (short) 0, null, false);
+   
+   /**
+    * This method initializes a new instance of <code>RuleBasedCollator</code>
+    * with the specified collation rules.  Note that an application normally
+    * obtains an instance of <code>RuleBasedCollator</code> by calling the
+    * <code>getInstance</code> method of <code>Collator</code>.  That method
+    * automatically loads the proper set of rules for the desired locale.
+    *
+    * @param rules The collation rule string.
+    *
+    * @exception ParseException If the rule string contains syntax errors.
+    */
+   public RuleBasedCollator(String rules) throws ParseException
+   {
+     if (rules.equals(""))
+       throw new ParseException("empty rule set", 0);
+     
+     this.rules = rules;
+ 
+     buildCollationVector(parseString(rules));
+     buildPrefixAccess();
+   }
+ 
+   /**
+    * This method returns the number of common characters at the beginning
+    * of the string of the two parameters.
+    *
+    * @param prefix A string considered as a prefix to test against
+    * the other string.
+    * @param s A string to test the prefix against.
+    * @return The number of common characters.
+    */
+   static int findPrefixLength(String prefix, String s)
+   {
+     int index;
+     int len = prefix.length();
+ 
+     for (index = 0; index < len && index < s.length(); ++index)
+       {
+ 	if (prefix.charAt(index) != s.charAt(index))
+ 	  return index;
+       }
+ 
+ 
+     return index;
+   }
+ 
+   /**
+    * Here we are merging two sets of sorting instructions: 'patch' into 'main'. This methods
+    * checks whether it is possible to find an anchor point for the rules to be merged and
+    * then insert them at that precise point.
+    *
+    * @param offset Offset in the string containing rules of the beginning of the rules
+    * being merged in.
+    * @param starter Text of the rules being merged.
+    * @param main Repository of all already parsed rules.
+    * @param patch Rules to be merged into the repository.
+    * @throws ParseException if it is impossible to find an anchor point for the new rules.
+    */
+   private void mergeRules(int offset, String starter, ArrayList main, ArrayList patch)
+     throws ParseException 
+   {
+     int insertion_point = -1;
+     int max_length = 0;
+     
+     /* We must check that no rules conflict with another already present. If it
+      * is the case delete the old rule. 
+      */
+     
+     /* For the moment good old O(N^2) algorithm.
+      */
+     for (int i = 0; i < patch.size(); i++)
+       {
+ 	int j = 0;
+ 	
+ 	while (j < main.size())
+ 	  {
+ 	    CollationSorter rule1 = (CollationSorter) patch.get(i);
+ 	    CollationSorter rule2 = (CollationSorter) main.get(j);
+ 	    
+ 	    if (rule1.textElement.equals(rule2.textElement))
+ 	      main.remove(j);
+ 	    else
+ 	      j++;
+ 	  }
+       }
+ 
+     // Find the insertion point... O(N)
+     for (int i = 0; i < main.size(); i++)
+       {
+ 	CollationSorter sorter = (CollationSorter) main.get(i);
+ 	int length = findPrefixLength(starter, sorter.textElement);
+ 		
+ 	if (length > max_length)
+ 	  {
+ 	    max_length = length;
+ 	    insertion_point = i+1;
+ 	  }
+       }
+ 
+     if (insertion_point < 0)
+       throw new ParseException("no insertion point found for " + starter, offset);
+ 
+     if (max_length < starter.length())
+       {
+ 	/*
+ 	 * We need to expand the first entry. It must be sorted
+ 	 * like if it was the reference key itself (like the spec
+ 	 * said. So the first entry is special: the element is
+ 	 * replaced by the specified text element for the sorting.
+ 	 * This text replace the old one for comparisons. However
+ 	 * to preserve the behaviour we replace the first key (corresponding
+ 	 * to the found prefix) by a new code rightly ordered in the
+ 	 * sequence. The rest of the subsequence must be appended
+ 	 * to the end of the sequence.
+ 	 */
+ 	CollationSorter sorter = (CollationSorter) patch.get(0);
+ 	CollationSorter expansionPrefix =
+ 	  (CollationSorter) main.get(insertion_point-1);
+ 	
+ 	sorter.expansionOrdering = starter.substring(max_length); // Skip the first good prefix element
+ 		
+ 	main.add(insertion_point, sorter);
+ 	
+ 	/*
+ 	 * This is a new set of rules. Append to the list.
+ 	 */
+ 	patch.remove(0);
+ 	insertion_point++;
+       }
+ 
+     // Now insert all elements of patch at the insertion point.
+     for (int i = 0; i < patch.size(); i++)
+       main.add(i+insertion_point, patch.get(i));
+   }
+ 
+   /**
+    * This method parses a string and build a set of sorting instructions. The parsing
+    * may only be partial on the case the rules are to be merged sometime later.
+    * 
+    * @param stop_on_reset If this parameter is true then the parser stops when it
+    * encounters a reset instruction. In the other case, it tries to parse the subrules
+    * and merged it in the same repository.
+    * @param v Output vector for the set of instructions.
+    * @param base_offset Offset in the string to begin parsing.
+    * @param rules Rules to be parsed.
+    * @return -1 if the parser reached the end of the string, an integer representing the
+    * offset in the string at which it stopped parsing. 
+    * @throws ParseException if something turned wrong during the parsing. To get details
+    * decode the message.
+    */
+   private int subParseString(boolean stop_on_reset, ArrayList v,
+ 			     int base_offset, String rules)
+     throws ParseException
+   {
+     boolean ignoreChars = (base_offset == 0);
+     int operator = -1;
+     StringBuffer sb = new StringBuffer();
+     boolean doubleQuote = false;
+     boolean eatingChars = false;
+     boolean nextIsModifier = false;
+     boolean isModifier = false;
+     int i;
+     
+ main_parse_loop:
+     for (i = 0; i < rules.length(); i++)
+       {
+ 	char c = rules.charAt(i);
+ 	int type = -1;
+ 	
+ 	if (!eatingChars &&
+ 	    ((c >= 0x09 && c <= 0x0D) || (c == 0x20)))
+ 	      continue;
+ 
+ 	isModifier = nextIsModifier;
+ 	nextIsModifier = false;
+ 
+ 	if (eatingChars && c != '\'')
+ 	  {
+ 	    doubleQuote = false;
+ 	    sb.append(c);
+ 	    continue;
+ 	  }
+ 	if (doubleQuote && eatingChars)
+ 	  {
+ 	    sb.append(c);
+ 	    doubleQuote = false;
+ 	    continue;
+ 	  }
+ 
+ 	switch (c)
+ 	  {
+ 	  case '!':
+ 	    throw new ParseException
+ 	      ("Modifier '!' is not yet supported by Classpath", i + base_offset);
+ 	  case '<':
+ 	    type = CollationSorter.GREATERP;
+ 	    break;
+ 	  case ';':
+ 	    type = CollationSorter.GREATERS;
+ 	    break;
+ 	  case ',':
+ 	    type = CollationSorter.GREATERT;
+ 	    break;
+ 	  case '=':
+ 	    type = CollationSorter.EQUAL;
+ 	    break;
+ 	  case '\'':
+ 	    eatingChars = !eatingChars;
+ 	    doubleQuote = true;
+ 	    break;
+ 	  case '@':
+ 	    if (ignoreChars)
+ 	      throw new ParseException
+ 		("comparison list has not yet been started. You may only use"
+ 		 + "(<,;=&)", i + base_offset);
+ 	    // Inverse the order of secondaries from now on.
+ 	    nextIsModifier = true;
+ 	    type = CollationSorter.INVERSE_SECONDARY;
+ 	    break;
+ 	  case '&':
+ 	    type = CollationSorter.RESET;
+ 	    if (stop_on_reset)
+ 	      break main_parse_loop;
+ 	    break;
+ 	  default:
+ 	    if (operator < 0)
+ 	      throw new ParseException
+ 		("operator missing at " + (i + base_offset), i + base_offset);
+ 	    if (! eatingChars
+ 		&& ((c >= 0x21 && c <= 0x2F) 
+ 		    || (c >= 0x3A && c <= 0x40)
+ 		    || (c >= 0x5B && c <= 0x60)
+ 		    || (c >= 0x7B && c <= 0x7E)))
+ 	      throw new ParseException
+ 		("unquoted punctuation character '" + c + "'", i + base_offset);
+ 
+ 	    //type = ignoreChars ? CollationSorter.IGNORE : -1;
+ 	    sb.append(c);
+ 	    break;
+ 	  }
+ 
+ 	if (type  < 0)
+ 	  continue;
+ 
+ 	if (operator < 0)
+ 	  {
+ 	    operator = type;
+ 	    continue;
+ 	  }
+ 
+ 	if (sb.length() == 0 && !isModifier)
+ 	  throw new ParseException
+ 	    ("text element empty at " + (i+base_offset), i+base_offset);
+ 
+ 	if (operator == CollationSorter.RESET)
+ 	  {
+ 	    /* Reposition in the sorting list at the position
+ 	     * indicated by the text element.
+ 	     */
+ 	    String subrules = rules.substring(i);
+ 	    ArrayList sorted_rules = new ArrayList();
+ 	    int idx;
+ 
+ 	    // Parse the subrules but do not iterate through all
+ 	    // sublist. This is the privilege of the first call.
+ 	    idx = subParseString(true, sorted_rules, base_offset+i, subrules);
+     
+ 	    // Merge new parsed rules into the list.
+ 	    mergeRules(base_offset+i, sb.toString(), v, sorted_rules);
+ 	    sb.setLength(0);
+ 	    
+ 	    // Reset state to none.
+ 	    operator = -1;
+ 	    type = -1;
+ 	    // We have found a new subrule at 'idx' but it has not been parsed.
+ 	    if (idx >= 0)
+ 	      {
+ 		i += idx-1;
+ 		continue main_parse_loop;
+ 	      }
+ 	    else
+ 		// No more rules.
+ 		break main_parse_loop;
+ 	  }
+ 
+ 	CollationSorter sorter = new CollationSorter();
+ 	
+ 	if (operator == CollationSorter.GREATERP)
+ 	  ignoreChars = false;
+ 
+ 	sorter.comparisonType = operator;
+ 	sorter.textElement = sb.toString();
+ 	sorter.hashText = sorter.textElement.hashCode();
+ 	sorter.offset = base_offset+rules.length();
+ 	sorter.ignore = ignoreChars;
+ 	sb.setLength(0);
+ 
+ 	v.add(sorter);
+ 	operator = type;
+       }
+ 
+     if (operator >= 0)
+       {
+ 	CollationSorter sorter = new CollationSorter();
+ 	int pos = rules.length() + base_offset;
+ 
+ 	if ((sb.length() != 0 && nextIsModifier)
+ 	    || (sb.length() == 0 && !nextIsModifier && !eatingChars))
+ 	  throw new ParseException("text element empty at " + pos, pos);
+ 
+ 	if (operator == CollationSorter.GREATERP)
+ 	  ignoreChars = false;
+ 
+ 	sorter.comparisonType = operator;
+ 	sorter.textElement = sb.toString();
+  	sorter.hashText = sorter.textElement.hashCode();
+ 	sorter.offset = base_offset+pos;
+ 	sorter.ignore = ignoreChars;
+ 	v.add(sorter);
+       }
+ 
+     if (i == rules.length())
+       return -1;
+     else
+       return i;
+   }
+ 
+   /**
+    * This method creates a copy of this object.
+    *
+    * @return A copy of this object.
+    */
+   public Object clone()
+   {
+     return super.clone();
+   }
+ 
+   /**
+    * This method completely parses a string 'rules' containing sorting rules.
+    *
+    * @param rules String containing the rules to be parsed. 
+    * @return A set of sorting instructions stored in a Vector.
+    * @throws ParseException if something turned wrong during the parsing. To get details
+    * decode the message.
+    */
+   private ArrayList parseString(String rules) 
+     throws ParseException
+   {
+     ArrayList v = new ArrayList();
+ 
+     // result of the first subParseString is not absolute (may be -1 or a
+     // positive integer). But we do not care.
+     subParseString(false, v, 0, rules);
+     
+     return v;
+   }
+ 
+   /**
+    * This method uses the sorting instructions built by {@link #parseString}
+    * to build collation elements which can be directly used to sort strings.
+    *
+    * @param parsedElements Parsed instructions stored in a ArrayList.
+    * @throws ParseException if the order of the instructions are not valid.
+    */
+   private void buildCollationVector(ArrayList parsedElements)
+     throws ParseException
+   {
+     int primary_seq = 0;
+     int last_tertiary_seq = 0;
+     short secondary_seq = 0;
+     short tertiary_seq = 0;
+     short equality_seq = 0;
+     boolean inverseComparisons = false;
+     final boolean DECREASING = false;
+     final boolean INCREASING = true;
+     boolean secondaryType = INCREASING;
+     ArrayList v = new ArrayList();
+ 
+     // elts is completely sorted.
+ element_loop:
+     for (int i = 0; i < parsedElements.size(); i++)
+       {
+ 	CollationSorter elt = (CollationSorter) parsedElements.get(i);
+ 	boolean ignoreChar = false;
+ 
+ 	switch (elt.comparisonType)
+ 	  {
+ 	  case CollationSorter.GREATERP:
+ 	    primary_seq++;
+ 	    if (inverseComparisons)
+ 	      {
+ 		secondary_seq = Short.MAX_VALUE;
+ 		secondaryType = DECREASING;
+ 	      }
+ 	    else
+ 	      {
+ 		secondary_seq = 0;
+ 		secondaryType = INCREASING;
+ 	      }
+ 	    tertiary_seq = 0;
+ 	    equality_seq = 0;
+ 	    inverseComparisons = false;
+ 	    break;
+ 	  case CollationSorter.GREATERS:
+ 	    if (secondaryType == DECREASING)
+ 	      secondary_seq--;
+ 	    else
+ 	      secondary_seq++;
+ 	    tertiary_seq = 0;
+ 	    equality_seq = 0;
+ 	    break;
+ 	  case CollationSorter.INVERSE_SECONDARY:
+ 	    inverseComparisons = true;
+ 	    continue element_loop;
+ 	  case CollationSorter.GREATERT:
+ 	    tertiary_seq++;
+ 	    if (primary_seq == 0)
+ 	      last_tertiary_seq = tertiary_seq;
+ 	    equality_seq = 0;
+ 	    break;
+ 	  case CollationSorter.EQUAL:
+ 	    equality_seq++;
+ 	    break;
+ 	  case CollationSorter.RESET:
+ 	    throw new ParseException
+ 	      ("Invalid reached state 'RESET'. Internal error", elt.offset);
+ 	  default:
+ 	    throw new ParseException
+ 	      ("Invalid unknown state '" + elt.comparisonType + "'", elt.offset);
+ 	  }
+ 
+ 	v.add(new CollationElement(elt.textElement, primary_seq,
+ 				   secondary_seq, tertiary_seq,
+ 				   equality_seq, elt.expansionOrdering, elt.ignore));
+       }
+ 
+     this.inverseAccentComparison = inverseComparisons; 
+ 
+     ce_table = v.toArray();
+ 
+     last_primary_value = primary_seq+1;
+     last_tertiary_value = last_tertiary_seq+1;
+   }
+ 
+   /**
+    * Build a tree where all keys are the texts of collation elements and data is
+    * the collation element itself. The tree is used when extracting all prefix
+    * for a given text.
+    */
+   private void buildPrefixAccess()
+   {
+     prefix_tree = new HashMap();
+ 
+     for (int i = 0; i < ce_table.length; i++)
+       {
+ 	CollationElement e = (CollationElement) ce_table[i];
+ 
+ 	prefix_tree.put(e.key, e);
+       }
+   }
+ 
+   /**
+    * This method returns an integer which indicates whether the first
+    * specified <code>String</code> is less than, greater than, or equal to
+    * the second.  The value depends not only on the collation rules in
+    * effect, but also the strength and decomposition settings of this object.
+    *
+    * @param source The first <code>String</code> to compare.
+    * @param target A second <code>String</code> to compare to the first.
+    *
+    * @return A negative integer if source &lt; target, a positive integer
+    * if source &gt; target, or 0 if source == target.
+    */
+   public int compare(String source, String target)
+   {
+     CollationElementIterator cs, ct;
+     CollationElement ord1block = null;
+     CollationElement ord2block = null;
+     boolean advance_block_1 = true;
+     boolean advance_block_2 = true;
+ 
+     cs = getCollationElementIterator(source);
+     ct = getCollationElementIterator(target);
+ 
+     for(;;)
+       {
+ 	int ord1;
+ 	int ord2;
+ 
+ 	/*
+ 	 * We have to check whether the characters are ignorable.
+ 	 * If it is the case then forget them. 
+ 	 */
+ 	if (advance_block_1)
+ 	  {
+ 	    ord1block = cs.nextBlock();
+ 	    if (ord1block != null && ord1block.ignore)
+ 	      continue;
+ 	  }
+ 	
+ 	if (advance_block_2)
+ 	  {
+ 	    ord2block = ct.nextBlock();
+ 	    if (ord2block != null && ord2block.ignore)
+ 	      {
+ 	        advance_block_1 = false;
+ 	        continue;
+ 	      }
+ 	 }
+ 	else
+ 	  advance_block_2 = true;
+ 
+ 	if (!advance_block_1)
+ 	  advance_block_1 = true;
+ 
+ 	if (ord1block != null)
+ 	  ord1 = ord1block.getValue();
+ 	else
+ 	  {
+ 	    if (ord2block == null)
+ 	      return 0;
+ 	    return -1;
+ 	  }
+ 
+ 	if (ord2block == null)
+ 	  return 1;
+ 	
+ 	ord2 = ord2block.getValue();
+ 	
+ 	// We know chars are totally equal, so skip
+         if (ord1 == ord2)
+ 	  {
+ 	    if (getStrength() == IDENTICAL)
+ 	      if (!ord1block.key.equals(ord2block.key))
+ 		return ord1block.key.compareTo(ord2block.key);
+ 	    continue;
+ 	  }
+ 
+         // Check for primary strength differences
+         int prim1 = CollationElementIterator.primaryOrder(ord1); 
+         int prim2 = CollationElementIterator.primaryOrder(ord2); 
+ 	
+ 	if (prim1 == 0 && getStrength() < TERTIARY)
+ 	  {
+             advance_block_2 = false;
+ 	    continue;
+ 	  }
+ 	else if (prim2 == 0 && getStrength() < TERTIARY)
+ 	  {
+ 	    advance_block_1 = false;
+ 	    continue;
+ 	  }
+ 
+         if (prim1 < prim2)
+           return -1;
+         else if (prim1 > prim2)
+           return 1;
+         else if (getStrength() == PRIMARY)
+           continue;
+ 
+         // Check for secondary strength differences
+         int sec1 = CollationElementIterator.secondaryOrder(ord1);
+         int sec2 = CollationElementIterator.secondaryOrder(ord2);
+ 
+ 	if (sec1 < sec2)
+           return -1;
+         else if (sec1 > sec2)
+           return 1;
+         else if (getStrength() == SECONDARY)
+           continue;
+ 
+         // Check for tertiary differences
+         int tert1 = CollationElementIterator.tertiaryOrder(ord1);
+         int tert2 = CollationElementIterator.tertiaryOrder(ord2);
+ 
+         if (tert1 < tert2)
+           return -1;
+         else if (tert1 > tert2)
+           return 1;
+ 	else if (getStrength() == TERTIARY)
+ 	  continue;
+ 
+ 	// Apparently JDK does this (at least for my test case).
+ 	return ord1block.key.compareTo(ord2block.key);    
+       }
+   }
+ 
+   /**
+    * This method tests this object for equality against the specified 
+    * object.  This will be true if and only if the specified object is
+    * another reference to this object.
+    *
+    * @param obj The <code>Object</code> to compare against this object.
+    *
+    * @return <code>true</code> if the specified object is equal to this object,
+    * <code>false</code> otherwise.
+    */
+   public boolean equals(Object obj)
+   {
+     if (obj == this)
+       return true;
+     else
+       return false;
+   }
+ 
+   /**
+    * This method builds a default collation element without invoking
+    * the database created from the rules passed to the constructor.
+    *
+    * @param c Character which needs a collation element.
+    * @return A valid brand new CollationElement instance.
+    */
+   CollationElement getDefaultElement(char c)
+   {
+     int v;
+ 
+     // Preliminary support for generic accent sorting inversion (I don't know if all
+     // characters in the range should be sorted backward). This is the place
+     // to fix this if needed.
+     if (inverseAccentComparison && (c >= 0x02B9 && c <= 0x0361))
+       v = 0x0361 - ((int) c - 0x02B9);
+     else
+       v = (short) c;
+     return new CollationElement("" + c, last_primary_value + v,
+ 				(short) 0, (short) 0, (short) 0, null, false);
+   }
+ 
+   /**
+    * This method builds a default collation element for an accented character
+    * without invoking the database created from the rules passed to the constructor.
+    *
+    * @param c Character which needs a collation element.
+    * @return A valid brand new CollationElement instance.
+    */
+   CollationElement getDefaultAccentedElement(char c)
+   {
+     int v;
+ 
+     // Preliminary support for generic accent sorting inversion (I don't know if all
+     // characters in the range should be sorted backward). This is the place
+     // to fix this if needed.
+     if (inverseAccentComparison && (c >= 0x02B9 && c <= 0x0361))
+       v = 0x0361 - ((int) c - 0x02B9);
+     else
+       v = (short) c;
+     return new CollationElement("" + c, (short) 0,
+ 				(short) 0, (short) (last_tertiary_value + v), (short) 0, null, false);
+   }
+ 
+   /**
+    * This method returns an instance for <code>CollationElementIterator</code>
+    * for the specified <code>String</code> under the collation rules for this
+    * object.
+    *
+    * @param source The <code>String</code> to return the
+    * <code>CollationElementIterator</code> instance for.
+    *
+    * @return A <code>CollationElementIterator</code> for the specified
+    * <code>String</code>.
+    */
+   public CollationElementIterator getCollationElementIterator(String source)
+   {
+     return new CollationElementIterator(this, source);
+   }
+ 
+   /**
+    * This method returns an instance of <code>CollationElementIterator</code>
+    * for the <code>String</code> represented by the specified
+    * <code>CharacterIterator</code>.
+    *
+    * @param source The <code>CharacterIterator</code> with the desired <code>String</code>.
+    *
+    * @return A <code>CollationElementIterator</code> for the specified <code>String</code>.
+    */
+   public CollationElementIterator getCollationElementIterator(CharacterIterator source)
+   {
+     StringBuffer expand = new StringBuffer("");
+     
+     // Right now we assume that we will read from the beginning of the string.
+     for (char c = source.first();
+ 	 c != CharacterIterator.DONE;
+ 	 c = source.next())
+       decomposeCharacter(c, expand);
+ 
+     return getCollationElementIterator(expand.toString());
+   }
+ 
+   /**
+    * This method returns an instance of <code>CollationKey</code> for the
+    * specified <code>String</code>.  The object returned will have a
+    * more efficient mechanism for its comparison function that could
+    * provide speed benefits if multiple comparisons are performed, such
+    * as during a sort.
+    *
+    * @param source The <code>String</code> to create a <code>CollationKey</code> for.
+    *
+    * @return A <code>CollationKey</code> for the specified <code>String</code>.
+    */
+   public CollationKey getCollationKey(String source)
+   {
+     CollationElementIterator cei = getCollationElementIterator(source);
+     ArrayList vect = new ArrayList();
+ 
+     int ord = cei.next();
+     cei.reset(); //set to start of string
+ 
+     while (ord != CollationElementIterator.NULLORDER)
+       {
+ 	// If the primary order is null, it means this is an ignorable
+ 	// character.
+ 	if (CollationElementIterator.primaryOrder(ord) == 0)
+ 	  {
+             ord = cei.next();
+ 	    continue;
+ 	  }
+         switch (getStrength())
+           {
+             case PRIMARY:
+ 	      ord = CollationElementIterator.primaryOrder(ord);
+ 	      break;
+ 	      
+             case SECONDARY:
+ 	      ord = CollationElementIterator.primaryOrder(ord) << 8;
+ 	      ord |= CollationElementIterator.secondaryOrder(ord);
+ 
+             default:
+                break;
+           }
+ 
+         vect.add(new Integer(ord)); 
+ 	ord = cei.next(); //increment to next key
+       }
+ 
+     Object[] objarr = vect.toArray();
+     byte[] key = new byte[objarr.length * 4];
+ 
+     for (int i = 0; i < objarr.length; i++)
+       {
+         int j = ((Integer) objarr[i]).intValue();
+         key [i * 4] = (byte) ((j & 0xFF000000) >> 24);
+         key [i * 4 + 1] = (byte) ((j & 0x00FF0000) >> 16);
+         key [i * 4 + 2] = (byte) ((j & 0x0000FF00) >> 8);
+         key [i * 4 + 3] = (byte) (j & 0x000000FF);
+       }
+ 
+     return new CollationKey(this, source, key);
+   }
+ 
+   /**
+    * This method returns a <code>String</code> containing the collation rules
+    * for this object.
+    *
+    * @return The collation rules for this object.
+    */
+   public String getRules()
+   {
+     return rules;
+   }
+ 
+   /**
+    * This method returns a hash value for this object.
+    *
+    * @return A hash value for this object.
+    */
+   public int hashCode()
+   {
+     return System.identityHashCode(this);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/SimpleDateFormat.java gcc-4.1.0/libjava/classpath/java/text/SimpleDateFormat.java
*** gcc-4.0.2/libjava/classpath/java/text/SimpleDateFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/SimpleDateFormat.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,1286 ----
+ /* SimpleDateFormat.java -- A class for parsing/formating simple 
+    date constructs
+    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ import gnu.java.text.AttributedFormatBuffer;
+ import gnu.java.text.FormatBuffer;
+ import gnu.java.text.FormatCharacterIterator;
+ import gnu.java.text.StringFormatBuffer;
+ 
+ import java.io.IOException;
+ import java.io.InvalidObjectException;
+ import java.io.ObjectInputStream;
+ import java.util.ArrayList;
+ import java.util.Calendar;
+ import java.util.Date;
+ import java.util.GregorianCalendar;
+ import java.util.Iterator;
+ import java.util.Locale;
+ import java.util.TimeZone;
+ import java.util.regex.Matcher;
+ import java.util.regex.Pattern;
+ 
+ /**
+  * SimpleDateFormat provides convenient methods for parsing and formatting
+  * dates using Gregorian calendars (see java.util.GregorianCalendar). 
+  */
+ public class SimpleDateFormat extends DateFormat 
+ {
+   /** 
+    * This class is used by <code>SimpleDateFormat</code> as a
+    * compiled representation of a format string.  The field
+    * ID, size, and character used are stored for each sequence
+    * of pattern characters.
+    */
+   private class CompiledField
+   {
+     /**
+      * The ID of the field within the local pattern characters.
+      * Package private for use in out class.
+      */
+     int field;
+ 
+     /**
+      * The size of the character sequence.
+      * Package private for use in out class.
+      */
+     int size;
+ 
+     /**
+      * The character used.
+      */
+     private char character;
+ 
+     /** 
+      * Constructs a compiled field using the
+      * the given field ID, size and character
+      * values.
+      *
+      * @param f the field ID.
+      * @param s the size of the field.
+      * @param c the character used.
+      */
+     public CompiledField(int f, int s, char c)
+     {
+       field = f;
+       size = s;
+       character = c;
+     }
+ 
+     /**
+      * Retrieves the ID of the field relative to
+      * the local pattern characters.
+      */
+     public int getField()
+     {
+       return field;
+     }
+ 
+     /**
+      * Retrieves the size of the character sequence.
+      */
+     public int getSize()
+     {
+       return size;
+     }
+ 
+     /**
+      * Retrieves the character used in the sequence.
+      */
+     public char getCharacter()
+     {
+       return character;
+     }
+ 
+     /**
+      * Returns a <code>String</code> representation
+      * of the compiled field, primarily for debugging
+      * purposes.
+      *
+      * @return a <code>String</code> representation.
+      */
+     public String toString()
+     {
+       StringBuffer builder;
+ 
+       builder = new StringBuffer(getClass().getName());
+       builder.append("[field=");
+       builder.append(field);
+       builder.append(", size=");
+       builder.append(size);
+       builder.append(", character=");
+       builder.append(character);
+       builder.append("]");
+ 
+       return builder.toString();
+     }
+   }
+ 
+   /**
+    * A list of <code>CompiledField</code>s,
+    * representing the compiled version of the pattern.
+    *
+    * @see CompiledField
+    * @serial Ignored.
+    */
+   private transient ArrayList tokens;
+ 
+   /**
+    * The localised data used in formatting,
+    * such as the day and month names in the local
+    * language, and the localized pattern characters.
+    *
+    * @see DateFormatSymbols
+    * @serial The localisation data.  May not be null.
+    */
+   private DateFormatSymbols formatData;
+ 
+   /**
+    * The date representing the start of the century
+    * used for interpreting two digit years.  For
+    * example, 24/10/2004 would cause two digit
+    * years to be interpreted as representing
+    * the years between 2004 and 2104.
+    *
+    * @see #get2DigitYearStart()
+    * @see #set2DigitYearStart(java.util.Date)
+    * @see Date
+    * @serial The start date of the century for parsing two digit years.
+    *         May not be null.
+    */
+   private Date defaultCenturyStart;
+ 
+   /**
+    * The year at which interpretation of two
+    * digit years starts.
+    *
+    * @see #get2DigitYearStart()
+    * @see #set2DigitYearStart(java.util.Date)
+    * @serial Ignored.
+    */
+   private transient int defaultCentury;
+ 
+   /**
+    * The non-localized pattern string.  This
+    * only ever contains the pattern characters
+    * stored in standardChars.  Localized patterns
+    * are translated to this form.
+    *
+    * @see #applyPattern(String)
+    * @see #applyLocalizedPattern(String)
+    * @see #toPattern()
+    * @see #toLocalizedPattern()
+    * @serial The non-localized pattern string.  May not be null.
+    */
+   private String pattern;
+ 
+   /**
+    * The version of serialized data used by this class.
+    * Version 0 only includes the pattern and formatting
+    * data.  Version 1 adds the start date for interpreting
+    * two digit years.
+    *
+    * @serial This specifies the version of the data being serialized.
+    *         Version 0 (or no version) specifies just <code>pattern</code>
+    *         and <code>formatData</code>.  Version 1 adds
+    *         the <code>defaultCenturyStart</code>.  This implementation
+    *         always writes out version 1 data.
+    */
+   private int serialVersionOnStream = 1; // 0 indicates JDK1.1.3 or earlier
+ 
+   /**
+    * For compatability.
+    */
+   private static final long serialVersionUID = 4774881970558875024L;
+ 
+   // This string is specified in the root of the CLDR.  We set it here
+   // rather than doing a DateFormatSymbols(Locale.US).getLocalPatternChars()
+   // since someone could theoretically change those values (though unlikely).
+   private static final String standardChars = "GyMdkHmsSEDFwWahKzYeugAZ";
+ 
+   /**
+    * Reads the serialized version of this object.
+    * If the serialized data is only version 0,
+    * then the date for the start of the century
+    * for interpreting two digit years is computed.
+    * The pattern is parsed and compiled following the process
+    * of reading in the serialized data.
+    *
+    * @param stream the object stream to read the data from.
+    * @throws IOException if an I/O error occurs.
+    * @throws ClassNotFoundException if the class of the serialized data
+    *         could not be found.
+    * @throws InvalidObjectException if the pattern is invalid.
+    */ 
+   private void readObject(ObjectInputStream stream)
+     throws IOException, ClassNotFoundException
+   {
+     stream.defaultReadObject();
+     if (serialVersionOnStream < 1)
+       {
+         computeCenturyStart ();
+ 	serialVersionOnStream = 1;
+       }
+     else
+       // Ensure that defaultCentury gets set.
+       set2DigitYearStart(defaultCenturyStart);
+ 
+     // Set up items normally taken care of by the constructor.
+     tokens = new ArrayList();
+     try
+       {
+ 	compileFormat(pattern);
+       }
+     catch (IllegalArgumentException e)
+       {
+ 	throw new InvalidObjectException("The stream pattern was invalid.");
+       }
+   }
+ 
+   /**
+    * Compiles the supplied non-localized pattern into a form
+    * from which formatting and parsing can be performed.
+    * This also detects errors in the pattern, which will
+    * be raised on later use of the compiled data.
+    *
+    * @param pattern the non-localized pattern to compile.
+    * @throws IllegalArgumentException if the pattern is invalid.
+    */
+   private void compileFormat(String pattern) 
+   {
+     // Any alphabetical characters are treated as pattern characters
+     // unless enclosed in single quotes.
+ 
+     char thisChar;
+     int pos;
+     int field;
+     CompiledField current = null;
+ 
+     for (int i = 0; i < pattern.length(); i++)
+       {
+ 	thisChar = pattern.charAt(i);
+ 	field = standardChars.indexOf(thisChar);
+ 	if (field == -1)
+ 	  {
+ 	    current = null;
+ 	    if ((thisChar >= 'A' && thisChar <= 'Z')
+ 		|| (thisChar >= 'a' && thisChar <= 'z'))
+ 	      {
+ 		// Not a valid letter
+ 		throw new IllegalArgumentException("Invalid letter "
+ 						   + thisChar +
+ 						   "encountered at character "
+ 						   + i + ".");
+ 	      }
+ 	    else if (thisChar == '\'')
+ 	      {
+ 		// Quoted text section; skip to next single quote
+ 		pos = pattern.indexOf('\'', i + 1);
+ 		// First look for '' -- meaning a single quote.
+ 		if (pos == i + 1)
+ 		  tokens.add("'");
+ 		else
+ 		  {
+ 		    // Look for the terminating quote.  However, if we
+ 		    // see a '', that represents a literal quote and
+ 		    // we must iterate.
+ 		    StringBuffer buf = new StringBuffer();
+ 		    int oldPos = i + 1;
+ 		    do
+ 		      {
+ 			if (pos == -1)
+ 			  throw new IllegalArgumentException("Quotes starting at character "
+ 							     + i +
+ 							     " not closed.");
+ 			buf.append(pattern.substring(oldPos, pos));
+ 			if (pos + 1 >= pattern.length()
+ 			    || pattern.charAt(pos + 1) != '\'')
+ 			  break;
+ 			buf.append('\'');
+ 			oldPos = pos + 2;
+ 			pos = pattern.indexOf('\'', pos + 2);
+ 		      }
+ 		    while (true);
+ 		    tokens.add(buf.toString());
+ 		  }
+ 		i = pos;
+ 	      }
+ 	    else
+ 	      {
+ 		// A special character
+ 		tokens.add(new Character(thisChar));
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    // A valid field
+ 	    if ((current != null) && (field == current.field))
+ 	      current.size++;
+ 	    else
+ 	      {
+ 		current = new CompiledField(field, 1, thisChar);
+ 		tokens.add(current);
+ 	      }
+ 	  }
+       }
+   }
+ 
+   /**
+    * Returns a string representation of this
+    * class.
+    *
+    * @return a string representation of the <code>SimpleDateFormat</code>
+    *         instance.
+    */
+   public String toString() 
+   {
+     StringBuffer output = new StringBuffer(getClass().getName());
+     output.append("[tokens=");
+     output.append(tokens);
+     output.append(", formatData=");
+     output.append(formatData);
+     output.append(", defaultCenturyStart=");
+     output.append(defaultCenturyStart);
+     output.append(", defaultCentury=");
+     output.append(defaultCentury);
+     output.append(", pattern=");
+     output.append(pattern);
+     output.append(", serialVersionOnStream=");
+     output.append(serialVersionOnStream);
+     output.append(", standardChars=");
+     output.append(standardChars);
+     output.append("]");
+     return output.toString();
+   }
+ 
+   /**
+    * Constructs a SimpleDateFormat using the default pattern for
+    * the default locale.
+    */
+   public SimpleDateFormat() 
+   {
+     /*
+      * There does not appear to be a standard API for determining 
+      * what the default pattern for a locale is, so use package-scope
+      * variables in DateFormatSymbols to encapsulate this.
+      */
+     super();
+     Locale locale = Locale.getDefault();
+     calendar = new GregorianCalendar(locale);
+     computeCenturyStart();
+     tokens = new ArrayList();
+     formatData = new DateFormatSymbols(locale);
+     pattern = (formatData.dateFormats[DEFAULT] + ' '
+ 	       + formatData.timeFormats[DEFAULT]);
+     compileFormat(pattern);
+     numberFormat = NumberFormat.getInstance(locale);
+     numberFormat.setGroupingUsed (false);
+     numberFormat.setParseIntegerOnly (true);
+     numberFormat.setMaximumFractionDigits (0);
+   }
+   
+   /**
+    * Creates a date formatter using the specified non-localized pattern,
+    * with the default DateFormatSymbols for the default locale.
+    *
+    * @param pattern the pattern to use.
+    * @throws NullPointerException if the pattern is null.
+    * @throws IllegalArgumentException if the pattern is invalid.
+    */
+   public SimpleDateFormat(String pattern) 
+   {
+     this(pattern, Locale.getDefault());
+   }
+ 
+   /**
+    * Creates a date formatter using the specified non-localized pattern,
+    * with the default DateFormatSymbols for the given locale.
+    *
+    * @param pattern the non-localized pattern to use.
+    * @param locale the locale to use for the formatting symbols.
+    * @throws NullPointerException if the pattern is null.
+    * @throws IllegalArgumentException if the pattern is invalid.
+    */
+   public SimpleDateFormat(String pattern, Locale locale) 
+   {
+     super();
+     calendar = new GregorianCalendar(locale);
+     computeCenturyStart();
+     tokens = new ArrayList();
+     formatData = new DateFormatSymbols(locale);
+     compileFormat(pattern);
+     this.pattern = pattern;
+     numberFormat = NumberFormat.getInstance(locale);
+     numberFormat.setGroupingUsed (false);
+     numberFormat.setParseIntegerOnly (true);
+     numberFormat.setMaximumFractionDigits (0);
+   }
+ 
+   /**
+    * Creates a date formatter using the specified non-localized
+    * pattern. The specified DateFormatSymbols will be used when
+    * formatting.
+    *
+    * @param pattern the non-localized pattern to use.
+    * @param formatData the formatting symbols to use.
+    * @throws NullPointerException if the pattern or formatData is null.
+    * @throws IllegalArgumentException if the pattern is invalid.
+    */
+   public SimpleDateFormat(String pattern, DateFormatSymbols formatData)
+   {
+     super();
+     calendar = new GregorianCalendar();
+     computeCenturyStart ();
+     tokens = new ArrayList();
+     if (formatData == null)
+       throw new NullPointerException("formatData");
+     this.formatData = formatData;
+     compileFormat(pattern);
+     this.pattern = pattern;
+     numberFormat = NumberFormat.getInstance();
+     numberFormat.setGroupingUsed (false);
+     numberFormat.setParseIntegerOnly (true);
+     numberFormat.setMaximumFractionDigits (0);
+   }
+ 
+   /**
+    * This method returns a string with the formatting pattern being used
+    * by this object.  This string is unlocalized.
+    *
+    * @return The format string.
+    */
+   public String toPattern()
+   {
+     return pattern;
+   }
+ 
+   /**
+    * This method returns a string with the formatting pattern being used
+    * by this object.  This string is localized.
+    *
+    * @return The format string.
+    */
+   public String toLocalizedPattern()
+   {
+     String localChars = formatData.getLocalPatternChars();
+     return translateLocalizedPattern(pattern, standardChars, localChars);
+   }
+ 
+   /**
+    * This method sets the formatting pattern that should be used by this
+    * object.  This string is not localized.
+    *
+    * @param pattern The new format pattern.
+    * @throws NullPointerException if the pattern is null.
+    * @throws IllegalArgumentException if the pattern is invalid.
+    */
+   public void applyPattern(String pattern)
+   {
+     tokens = new ArrayList();
+     compileFormat(pattern);
+     this.pattern = pattern;
+   }
+ 
+   /**
+    * This method sets the formatting pattern that should be used by this
+    * object.  This string is localized.
+    *
+    * @param pattern The new format pattern.
+    * @throws NullPointerException if the pattern is null.
+    * @throws IllegalArgumentException if the pattern is invalid.
+    */
+   public void applyLocalizedPattern(String pattern)
+   {
+     String localChars = formatData.getLocalPatternChars();
+     pattern = translateLocalizedPattern(pattern, localChars, standardChars);
+     applyPattern(pattern);
+   }
+ 
+   /**
+    * Translates either from or to a localized variant of the pattern
+    * string.  For example, in the German locale, 't' (for 'tag') is
+    * used instead of 'd' (for 'date').  This method translates
+    * a localized pattern (such as 'ttt') to a non-localized pattern
+    * (such as 'ddd'), or vice versa.  Non-localized patterns use
+    * a standard set of characters, which match those of the U.S. English
+    * locale.
+    *
+    * @param pattern the pattern to translate.
+    * @param oldChars the old set of characters (used in the pattern).
+    * @param newChars the new set of characters (which will be used in the
+    *                 pattern).
+    * @return a version of the pattern using the characters in
+    *         <code>newChars</code>.
+    */
+   private String translateLocalizedPattern(String pattern,
+ 					   String oldChars, String newChars)
+   {
+     int len = pattern.length();
+     StringBuffer buf = new StringBuffer(len);
+     boolean quoted = false;
+     for (int i = 0;  i < len;  i++)
+       {
+ 	char ch = pattern.charAt(i);
+ 	if (ch == '\'')
+ 	  quoted = ! quoted;
+ 	if (! quoted)
+ 	  {
+ 	    int j = oldChars.indexOf(ch);
+ 	    if (j >= 0)
+ 	      ch = newChars.charAt(j);
+ 	  }
+ 	buf.append(ch);
+       }
+     return buf.toString();
+   }
+ 
+   /** 
+    * Returns the start of the century used for two digit years.
+    *
+    * @return A <code>Date</code> representing the start of the century
+    * for two digit years.
+    */
+   public Date get2DigitYearStart()
+   {
+     return defaultCenturyStart;
+   }
+ 
+   /**
+    * Sets the start of the century used for two digit years.
+    *
+    * @param date A <code>Date</code> representing the start of the century for
+    * two digit years.
+    */
+   public void set2DigitYearStart(Date date)
+   {
+     defaultCenturyStart = date;
+     calendar.clear();
+     calendar.setTime(date);
+     int year = calendar.get(Calendar.YEAR);
+     defaultCentury = year - (year % 100);
+   }
+ 
+   /**
+    * This method returns a copy of the format symbol information used
+    * for parsing and formatting dates.
+    *
+    * @return a copy of the date format symbols.
+    */
+   public DateFormatSymbols getDateFormatSymbols()
+   {
+     return (DateFormatSymbols) formatData.clone();
+   }
+ 
+   /**
+    * This method sets the format symbols information used for parsing
+    * and formatting dates.
+    *
+    * @param formatData The date format symbols.
+    * @throws NullPointerException if <code>formatData</code> is null.
+    */
+    public void setDateFormatSymbols(DateFormatSymbols formatData)
+    {
+      if (formatData == null)
+        {
+ 	 throw new
+ 	   NullPointerException("The supplied format data was null.");
+        }
+      this.formatData = formatData;
+    }
+ 
+   /**
+    * This methods tests whether the specified object is equal to this
+    * object.  This will be true if and only if the specified object:
+    * <p>
+    * <ul>
+    * <li>Is not <code>null</code>.</li>
+    * <li>Is an instance of <code>SimpleDateFormat</code>.</li>
+    * <li>Is equal to this object at the superclass (i.e., <code>DateFormat</code>)
+    *     level.</li>
+    * <li>Has the same formatting pattern.</li>
+    * <li>Is using the same formatting symbols.</li>
+    * <li>Is using the same century for two digit years.</li>
+    * </ul>
+    *
+    * @param o The object to compare for equality against.
+    *
+    * @return <code>true</code> if the specified object is equal to this object,
+    * <code>false</code> otherwise.
+    */
+   public boolean equals(Object o)
+   {
+     if (!super.equals(o))
+       return false;
+ 
+     if (!(o instanceof SimpleDateFormat))
+       return false;
+ 
+     SimpleDateFormat sdf = (SimpleDateFormat)o;
+ 
+     if (defaultCentury != sdf.defaultCentury)
+       return false;
+ 
+     if (!toPattern().equals(sdf.toPattern()))
+       return false;
+ 
+     if (!getDateFormatSymbols().equals(sdf.getDateFormatSymbols()))
+       return false;
+ 
+     return true;
+   }
+ 
+   /**
+    * This method returns a hash value for this object.
+    *
+    * @return A hash value for this object.
+    */
+   public int hashCode()
+   {
+     return super.hashCode() ^ toPattern().hashCode() ^ defaultCentury ^
+       getDateFormatSymbols().hashCode();
+   }
+ 
+ 
+   /**
+    * Formats the date input according to the format string in use,
+    * appending to the specified StringBuffer.  The input StringBuffer
+    * is returned as output for convenience.
+    */
+   private void formatWithAttribute(Date date, FormatBuffer buffer, FieldPosition pos)
+   {
+     String temp;
+     AttributedCharacterIterator.Attribute attribute;
+     calendar.setTime(date);
+ 
+     // go through vector, filling in fields where applicable, else toString
+     Iterator iter = tokens.iterator();
+     while (iter.hasNext())
+       {
+ 	Object o = iter.next();
+ 	if (o instanceof CompiledField)
+ 	  {
+ 	    CompiledField cf = (CompiledField) o;
+ 	    int beginIndex = buffer.length();
+ 	    
+ 	    switch (cf.getField())
+ 	      {
+ 	      case ERA_FIELD:
+ 		buffer.append (formatData.eras[calendar.get (Calendar.ERA)], DateFormat.Field.ERA);
+ 		break;
+ 	      case YEAR_FIELD:
+ 		// If we have two digits, then we truncate.  Otherwise, we
+ 		// use the size of the pattern, and zero pad.
+ 		buffer.setDefaultAttribute (DateFormat.Field.YEAR);
+ 		if (cf.getSize() == 2)
+ 		  {
+ 		    temp = "00"+String.valueOf (calendar.get (Calendar.YEAR));
+ 		    buffer.append (temp.substring (temp.length() - 2));
+ 		  }
+ 		else
+ 		  withLeadingZeros (calendar.get (Calendar.YEAR), cf.getSize(), buffer);
+ 		break;
+ 	      case MONTH_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.MONTH);
+ 		if (cf.getSize() < 3)
+ 		  withLeadingZeros (calendar.get (Calendar.MONTH) + 1, cf.getSize(), buffer);
+ 		else if (cf.getSize() < 4)
+ 		  buffer.append (formatData.shortMonths[calendar.get (Calendar.MONTH)]);
+ 		else
+ 		  buffer.append (formatData.months[calendar.get (Calendar.MONTH)]);
+ 		break;
+ 	      case DATE_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.DAY_OF_MONTH);
+ 		withLeadingZeros (calendar.get (Calendar.DATE), cf.getSize(), buffer);
+ 		break;
+ 	      case HOUR_OF_DAY1_FIELD: // 1-24
+ 		buffer.setDefaultAttribute(DateFormat.Field.HOUR_OF_DAY1);
+ 		withLeadingZeros ( ((calendar.get (Calendar.HOUR_OF_DAY) + 23) % 24) + 1, 
+ 				   cf.getSize(), buffer);
+ 		break;
+ 	      case HOUR_OF_DAY0_FIELD: // 0-23
+ 		buffer.setDefaultAttribute (DateFormat.Field.HOUR_OF_DAY0);
+ 		withLeadingZeros (calendar.get (Calendar.HOUR_OF_DAY), cf.getSize(), buffer);
+ 		break;
+ 	      case MINUTE_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.MINUTE);
+ 		withLeadingZeros (calendar.get (Calendar.MINUTE),
+ 				  cf.getSize(), buffer);
+ 		break;
+ 	      case SECOND_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.SECOND);
+ 		withLeadingZeros(calendar.get (Calendar.SECOND), 
+ 				 cf.getSize(), buffer);
+ 		break;
+ 	      case MILLISECOND_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.MILLISECOND);
+ 		withLeadingZeros (calendar.get (Calendar.MILLISECOND), cf.getSize(), buffer);
+ 		break;
+ 	      case DAY_OF_WEEK_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.DAY_OF_WEEK);
+ 		if (cf.getSize() < 4)
+ 		  buffer.append (formatData.shortWeekdays[calendar.get (Calendar.DAY_OF_WEEK)]);
+ 		else
+ 		  buffer.append (formatData.weekdays[calendar.get (Calendar.DAY_OF_WEEK)]);
+ 		break;
+ 	      case DAY_OF_YEAR_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.DAY_OF_YEAR);
+ 		withLeadingZeros (calendar.get (Calendar.DAY_OF_YEAR), cf.getSize(), buffer);
+ 		break;
+ 	      case DAY_OF_WEEK_IN_MONTH_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.DAY_OF_WEEK_IN_MONTH);
+ 		withLeadingZeros (calendar.get (Calendar.DAY_OF_WEEK_IN_MONTH), 
+ 				 cf.getSize(), buffer);
+ 		break;
+ 	      case WEEK_OF_YEAR_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.WEEK_OF_YEAR);
+ 		withLeadingZeros (calendar.get (Calendar.WEEK_OF_YEAR),
+ 				  cf.getSize(), buffer);
+ 		break;
+ 	      case WEEK_OF_MONTH_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.WEEK_OF_MONTH);
+ 		withLeadingZeros (calendar.get (Calendar.WEEK_OF_MONTH),
+ 				  cf.getSize(), buffer);
+ 		break;
+ 	      case AM_PM_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.AM_PM);
+ 		buffer.append (formatData.ampms[calendar.get (Calendar.AM_PM)]);
+ 		break;
+ 	      case HOUR1_FIELD: // 1-12
+ 		buffer.setDefaultAttribute (DateFormat.Field.HOUR1);
+ 		withLeadingZeros (((calendar.get (Calendar.HOUR) + 11) % 12) + 1,
+ 				  cf.getSize(), buffer);
+ 		break;
+ 	      case HOUR0_FIELD: // 0-11
+ 		buffer.setDefaultAttribute (DateFormat.Field.HOUR0);
+ 		withLeadingZeros (calendar.get (Calendar.HOUR), cf.getSize(), buffer);
+ 		break;
+ 	      case TIMEZONE_FIELD:
+ 		buffer.setDefaultAttribute (DateFormat.Field.TIME_ZONE);
+ 		TimeZone zone = calendar.getTimeZone();
+ 		boolean isDST = calendar.get (Calendar.DST_OFFSET) != 0;
+ 		// FIXME: XXX: This should be a localized time zone.
+ 		String zoneID = zone.getDisplayName
+ 		  (isDST, cf.getSize() > 3 ? TimeZone.LONG : TimeZone.SHORT);
+ 		buffer.append (zoneID);
+ 		break;
+ 	      case RFC822_TIMEZONE_FIELD:
+ 		buffer.setDefaultAttribute(DateFormat.Field.RFC822_TIME_ZONE);
+ 		int pureMinutes = (calendar.get(Calendar.ZONE_OFFSET) +
+ 				   calendar.get(Calendar.DST_OFFSET)) / (1000 * 60);
+ 		String sign = (pureMinutes < 0) ? "-" : "+";	  
+ 		int hours = pureMinutes / 60;
+ 		int minutes = pureMinutes % 60;
+ 		buffer.append(sign);
+ 		withLeadingZeros(hours, 2, buffer);
+ 		withLeadingZeros(minutes, 2, buffer);
+ 		break;
+ 	      default:
+ 		throw new IllegalArgumentException ("Illegal pattern character " +
+ 						    cf.getCharacter());
+ 	      }
+ 	    if (pos != null && (buffer.getDefaultAttribute() == pos.getFieldAttribute()
+ 				|| cf.getField() == pos.getField()))
+ 	      {
+ 		pos.setBeginIndex(beginIndex);
+ 		pos.setEndIndex(buffer.length());
+ 	      }
+ 	  } 
+       else
+ 	{  
+ 	  buffer.append(o.toString(), null);
+ 	}
+       }
+   }
+   
+   public StringBuffer format(Date date, StringBuffer buffer, FieldPosition pos)
+   {
+     formatWithAttribute(date, new StringFormatBuffer (buffer), pos);
+ 
+     return buffer;
+   }
+ 
+   public AttributedCharacterIterator formatToCharacterIterator(Object date)
+     throws IllegalArgumentException
+   {
+     if (date == null)
+       throw new NullPointerException("null argument");
+     if (!(date instanceof Date))
+       throw new IllegalArgumentException("argument should be an instance of java.util.Date");
+ 
+     AttributedFormatBuffer buf = new AttributedFormatBuffer();
+     formatWithAttribute((Date)date, buf,
+ 			null);
+     buf.sync();
+         
+     return new FormatCharacterIterator(buf.getBuffer().toString(),
+ 				       buf.getRanges(),
+ 				       buf.getAttributes());
+   }
+ 
+   private void withLeadingZeros(int value, int length, FormatBuffer buffer) 
+   {
+     String valStr = String.valueOf(value);
+     for (length -= valStr.length(); length > 0; length--)
+       buffer.append('0');
+     buffer.append(valStr);
+   }
+ 
+   private boolean expect(String source, ParsePosition pos, char ch)
+   {
+     int x = pos.getIndex();
+     boolean r = x < source.length() && source.charAt(x) == ch;
+     if (r)
+       pos.setIndex(x + 1);
+     else
+       pos.setErrorIndex(x);
+     return r;
+   }
+ 
+   /**
+    * This method parses the specified string into a date.
+    * 
+    * @param dateStr The date string to parse.
+    * @param pos The input and output parse position
+    *
+    * @return The parsed date, or <code>null</code> if the string cannot be
+    * parsed.
+    */
+   public Date parse (String dateStr, ParsePosition pos)
+   {
+     int fmt_index = 0;
+     int fmt_max = pattern.length();
+ 
+     calendar.clear();
+     boolean saw_timezone = false;
+     int quote_start = -1;
+     boolean is2DigitYear = false;
+     try
+       {
+ 	for (; fmt_index < fmt_max; ++fmt_index)
+ 	  {
+ 	    char ch = pattern.charAt(fmt_index);
+ 	    if (ch == '\'')
+ 	      {
+ 		int index = pos.getIndex();
+ 		if (fmt_index < fmt_max - 1
+ 		    && pattern.charAt(fmt_index + 1) == '\'')
+ 		  {
+ 		    if (! expect (dateStr, pos, ch))
+ 		      return null;
+ 		    ++fmt_index;
+ 		  }
+ 		else
+ 		  quote_start = quote_start < 0 ? fmt_index : -1;
+ 		continue;
+ 	      }
+ 	    
+ 	    if (quote_start != -1
+ 		|| ((ch < 'a' || ch > 'z')
+ 		    && (ch < 'A' || ch > 'Z')))
+ 	      {
+ 		if (! expect (dateStr, pos, ch))
+ 		  return null;
+ 		continue;
+ 	      }
+ 	    
+ 	    // We've arrived at a potential pattern character in the
+ 	    // pattern.
+ 	    int fmt_count = 1;
+ 	    while (++fmt_index < fmt_max && pattern.charAt(fmt_index) == ch)
+ 	      {
+ 		++fmt_count;
+ 	      }
+ 	    
+ 	    // We might need to limit the number of digits to parse in
+ 	    // some cases.  We look to the next pattern character to
+ 	    // decide.
+ 	    boolean limit_digits = false;
+ 	    if (fmt_index < fmt_max
+ 		&& standardChars.indexOf(pattern.charAt(fmt_index)) >= 0)
+ 	      limit_digits = true;
+ 	    --fmt_index;
+ 	    
+ 	    // We can handle most fields automatically: most either are
+ 	    // numeric or are looked up in a string vector.  In some cases
+ 	    // we need an offset.  When numeric, `offset' is added to the
+ 	    // resulting value.  When doing a string lookup, offset is the
+ 	    // initial index into the string array.
+ 	    int calendar_field;
+ 	    boolean is_numeric = true;
+ 	    int offset = 0;
+ 	    boolean maybe2DigitYear = false;
+ 	    boolean oneBasedHour = false;
+ 	    boolean oneBasedHourOfDay = false;
+ 	    Integer simpleOffset;
+ 	    String[] set1 = null;
+ 	    String[] set2 = null;
+ 	    switch (ch)
+ 	      {
+ 	      case 'd':
+ 		calendar_field = Calendar.DATE;
+ 		break;
+ 	      case 'D':
+ 		calendar_field = Calendar.DAY_OF_YEAR;
+ 		break;
+ 	      case 'F':
+ 		calendar_field = Calendar.DAY_OF_WEEK_IN_MONTH;
+ 		break;
+ 	      case 'E':
+ 		is_numeric = false;
+ 		offset = 1;
+ 		calendar_field = Calendar.DAY_OF_WEEK;
+ 		set1 = formatData.getWeekdays();
+ 		set2 = formatData.getShortWeekdays();
+ 		break;
+ 	      case 'w':
+ 		calendar_field = Calendar.WEEK_OF_YEAR;
+ 		break;
+ 	      case 'W':
+ 		calendar_field = Calendar.WEEK_OF_MONTH;
+ 		break;
+ 	      case 'M':
+ 		calendar_field = Calendar.MONTH;
+ 		if (fmt_count <= 2)
+ 		  offset = -1;
+ 		else
+ 		  {
+ 		    is_numeric = false;
+ 		    set1 = formatData.getMonths();
+ 		    set2 = formatData.getShortMonths();
+ 		  }
+ 		break;
+ 	      case 'y':
+ 		calendar_field = Calendar.YEAR;
+ 		if (fmt_count <= 2)
+ 		  maybe2DigitYear = true;
+ 		break;
+ 	      case 'K':
+ 		calendar_field = Calendar.HOUR;
+ 		break;
+ 	      case 'h':
+ 		calendar_field = Calendar.HOUR;
+ 		oneBasedHour = true;
+ 		break;
+ 	      case 'H':
+ 		calendar_field = Calendar.HOUR_OF_DAY;
+ 		break;
+ 	      case 'k':
+ 		calendar_field = Calendar.HOUR_OF_DAY;
+ 		oneBasedHourOfDay = true;
+ 		break;
+ 	      case 'm':
+ 		calendar_field = Calendar.MINUTE;
+ 		break;
+ 	      case 's':
+ 		calendar_field = Calendar.SECOND;
+ 		break;
+ 	      case 'S':
+ 		calendar_field = Calendar.MILLISECOND;
+ 		break;
+ 	      case 'a':
+ 		is_numeric = false;
+ 		calendar_field = Calendar.AM_PM;
+ 		set1 = formatData.getAmPmStrings();
+ 		break;
+ 	      case 'z':
+ 	      case 'Z':
+ 		// We need a special case for the timezone, because it
+ 		// uses a different data structure than the other cases.
+ 		is_numeric = false;
+ 		calendar_field = Calendar.ZONE_OFFSET;
+ 		String[][] zoneStrings = formatData.getZoneStrings();
+ 		int zoneCount = zoneStrings.length;
+ 		int index = pos.getIndex();
+ 		boolean found_zone = false;
+ 		simpleOffset = computeOffset(dateStr.substring(index), pos);
+ 		if (simpleOffset != null)
+ 		  {
+ 		    found_zone = true;
+ 		    saw_timezone = true;
+ 		    calendar.set(Calendar.DST_OFFSET, 0);
+ 		    offset = simpleOffset.intValue();
+ 		  }
+ 		else
+ 		  {
+ 		    for (int j = 0;  j < zoneCount;  j++)
+ 		      {
+ 			String[] strings = zoneStrings[j];
+ 			int k;
+ 			for (k = 0; k < strings.length; ++k)
+ 			  {
+ 			    if (dateStr.startsWith(strings[k], index))
+ 			      break;
+ 			  }
+ 			if (k != strings.length)
+ 			  {
+ 			    found_zone = true;
+ 			    saw_timezone = true;
+ 			    TimeZone tz = TimeZone.getTimeZone (strings[0]);
+ 			    // Check if it's a DST zone or ordinary 
+ 			    if(k == 3 || k == 4)
+ 			      calendar.set (Calendar.DST_OFFSET, tz.getDSTSavings());
+ 			    else
+ 			      calendar.set (Calendar.DST_OFFSET, 0);
+                             offset = tz.getRawOffset ();
+ 			    pos.setIndex(index + strings[k].length());
+ 			    break;
+ 			  }
+ 		      }
+ 		  }
+ 		if (! found_zone)
+ 		  {
+ 			pos.setErrorIndex(pos.getIndex());
+ 			return null;
+ 		  }
+ 		break;
+ 	      default:
+ 		pos.setErrorIndex(pos.getIndex());
+ 		return null;
+ 	      }
+       
+ 	    // Compute the value we should assign to the field.
+ 	    int value;
+ 	    int index = -1;
+ 	    if (is_numeric)
+ 	      {
+ 		numberFormat.setMinimumIntegerDigits(fmt_count);
+ 		if (limit_digits)
+ 		  numberFormat.setMaximumIntegerDigits(fmt_count);
+ 		if (maybe2DigitYear)
+ 		  index = pos.getIndex();
+ 		Number n = numberFormat.parse(dateStr, pos);
+ 		if (pos == null || ! (n instanceof Long))
+ 		  return null;
+ 		value = n.intValue() + offset;
+ 	      }
+ 	    else if (set1 != null)
+ 	      {
+ 		index = pos.getIndex();
+ 		int i;
+ 		boolean found = false;
+ 		for (i = offset; i < set1.length; ++i)
+ 		  {
+ 		    if (set1[i] != null)
+ 		      if (dateStr.toUpperCase().startsWith(set1[i].toUpperCase(),
+ 							   index))
+ 			{
+ 			  found = true;
+ 			  pos.setIndex(index + set1[i].length());
+ 			  break;
+ 			}
+ 		  }
+ 		if (!found && set2 != null)
+ 		  {
+ 		    for (i = offset; i < set2.length; ++i)
+ 		      {
+ 			if (set2[i] != null)
+ 			  if (dateStr.toUpperCase().startsWith(set2[i].toUpperCase(),
+ 							       index))
+ 			    {
+ 			      found = true;
+ 			      pos.setIndex(index + set2[i].length());
+ 			      break;
+ 			    }
+ 		      }
+ 		  }
+ 		if (!found)
+ 		  {
+ 		    pos.setErrorIndex(index);
+ 		    return null;
+ 		  }
+ 		value = i;
+ 	      }
+ 	    else
+ 	      value = offset;
+ 	  
+ 	    if (maybe2DigitYear)
+ 	      {
+ 		// Parse into default century if the numeric year string has 
+ 		// exactly 2 digits.
+ 		int digit_count = pos.getIndex() - index;
+ 		if (digit_count == 2)
+ 		  {
+ 		    is2DigitYear = true;
+ 		    value += defaultCentury;
+ 		  }
+ 	      }
+ 	    
+ 	    // Calendar uses 0-based hours. 
+ 	    // I.e. 00:00 AM is midnight, not 12 AM or 24:00
+ 	    if (oneBasedHour && value == 12)
+ 	      value = 0;
+ 
+ 	    if (oneBasedHourOfDay && value == 24)
+ 	      value = 0;
+ 	    
+ 	    // Assign the value and move on.
+ 	    calendar.set(calendar_field, value);
+ 	  }
+     
+ 	if (is2DigitYear)
+ 	  {
+ 	    // Apply the 80-20 heuristic to dermine the full year based on 
+ 	    // defaultCenturyStart. 
+ 	    int year = calendar.get(Calendar.YEAR);
+ 	    if (calendar.getTime().compareTo(defaultCenturyStart) < 0)
+ 	      calendar.set(Calendar.YEAR, year + 100);      
+ 	  }
+ 	if (! saw_timezone)
+ 	  {
+ 	    // Use the real rules to determine whether or not this
+ 	    // particular time is in daylight savings.
+ 	    calendar.clear (Calendar.DST_OFFSET);
+ 	    calendar.clear (Calendar.ZONE_OFFSET);
+ 	  }
+         return calendar.getTime();
+       }
+     catch (IllegalArgumentException x)
+       {
+         pos.setErrorIndex(pos.getIndex());
+ 	return null;
+       }
+       }
+ 
+   /**
+    * <p>
+    * Computes the time zone offset in milliseconds
+    * relative to GMT, based on the supplied
+    * <code>String</code> representation.
+    * </p>
+    * <p>
+    * The supplied <code>String</code> must be a three
+    * or four digit signed number, with an optional 'GMT'
+    * prefix.  The first one or two digits represents the hours,
+    * while the last two represent the minutes.  The
+    * two sets of digits can optionally be separated by
+    * ':'.  The mandatory sign prefix (either '+' or '-')
+    * indicates the direction of the offset from GMT.
+    * </p>
+    * <p>
+    * For example, 'GMT+0200' specifies 2 hours after
+    * GMT, while '-05:00' specifies 5 hours prior to
+    * GMT.  The special case of 'GMT' alone can be used
+    * to represent the offset, 0.
+    * </p>
+    * <p>
+    * If the <code>String</code> can not be parsed,
+    * the result will be null.  The resulting offset
+    * is wrapped in an <code>Integer</code> object, in
+    * order to allow such failure to be represented.
+    * </p>
+    *
+    * @param zoneString a string in the form 
+    *        (GMT)? sign hours : minutes
+    *        where sign = '+' or '-', hours
+    *        is a one or two digits representing
+    *        a number between 0 and 23, and
+    *        minutes is two digits representing
+    *        a number between 0 and 59.
+    * @return the parsed offset, or null if parsing
+    *         failed.
+    */
+   private Integer computeOffset(String zoneString, ParsePosition pos)
+   {
+     Pattern pattern = 
+       Pattern.compile("(GMT)?([+-])([012])?([0-9]):?([0-9]{2})");
+     Matcher matcher = pattern.matcher(zoneString);
+ 
+     // Match from start, but ignore trailing parts
+     boolean hasAll = matcher.lookingAt();
+     try
+       {
+ 	// Do we have at least the sign, hour and minute?
+ 	matcher.group(2);
+ 	matcher.group(4);
+ 	matcher.group(5);
+       }
+     catch (IllegalStateException ise)
+       {
+ 	hasAll = false;
+       }
+     if (hasAll)
+       {
+ 	int sign = matcher.group(2).equals("+") ? 1 : -1;
+ 	int hour = Integer.parseInt(matcher.group(4));
+ 	if (!matcher.group(3).equals(""))
+ 	  hour += (Integer.parseInt(matcher.group(3)) * 10);
+ 	int minutes = Integer.parseInt(matcher.group(5));
+ 
+ 	if (hour > 23)
+ 	  return null;
+ 	int offset = sign * ((hour * 60) + minutes) * 60000;
+ 
+ 	// advance the index
+ 	pos.setIndex(pos.getIndex() + matcher.end());
+ 	return new Integer(offset);
+       }
+     else if (zoneString.startsWith("GMT"))
+       {
+ 	pos.setIndex(pos.getIndex() + 3);
+ 	return new Integer(0);
+       }
+     return null;
+   }
+ 
+   // Compute the start of the current century as defined by
+   // get2DigitYearStart.
+   private void computeCenturyStart()
+   {
+     int year = calendar.get(Calendar.YEAR);
+     calendar.set(Calendar.YEAR, year - 80);
+     set2DigitYearStart(calendar.getTime());
+   }
+ 
+   /**
+    * Returns a copy of this instance of
+    * <code>SimpleDateFormat</code>.  The copy contains
+    * clones of the formatting symbols and the 2-digit
+    * year century start date.
+    */
+   public Object clone()
+   {
+     SimpleDateFormat clone = (SimpleDateFormat) super.clone();
+     clone.setDateFormatSymbols((DateFormatSymbols) formatData.clone());
+     clone.set2DigitYearStart((Date) defaultCenturyStart.clone());
+     return clone;
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/StringCharacterIterator.java gcc-4.1.0/libjava/classpath/java/text/StringCharacterIterator.java
*** gcc-4.0.2/libjava/classpath/java/text/StringCharacterIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/StringCharacterIterator.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,369 ----
+ /* StringCharacterIterator.java -- Iterate over a character range in a string
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.text;
+ 
+ /**
+  * This class iterates over a range of characters in a <code>String</code>.  
+  * For a given range of text, a beginning and ending index,
+  * as well as a current index are defined.  These values can be queried
+  * by the methods in this interface.  Additionally, various methods allow
+  * the index to be set. 
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey (tromey@cygnus.com)
+  */
+ public final class StringCharacterIterator implements CharacterIterator
+ {
+   /**
+    * This is the string to iterate over
+    */
+   private String text;
+ 
+   /**
+    * This is the value of the start position of the text range.
+    */
+   private int begin;
+ 
+   /**
+    * This is the value of the ending position of the text range.
+    */
+   private int end;
+ 
+   /**
+    * This is the current value of the scan index.
+    */
+   private int index;
+ 
+   /**
+    * This method initializes a new instance of
+    * <code>StringCharacterIterator</code> to iterate over the entire
+    * text of the specified <code>String</code>.  The initial index
+    * value will be set to the first character in the string.
+    *
+    * @param text The <code>String</code> to iterate through (<code>null</code> 
+    *             not permitted).
+    * 
+    * @throws NullPointerException if <code>text</code> is <code>null</code>.
+    */
+   public StringCharacterIterator (String text)
+   {
+     this (text, 0, text.length (), 0);
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method initializes a new instance of
+    * <code>StringCharacterIterator</code> to iterate over the entire
+    * text of the specified <code>String</code>.  The initial index
+    * value will be set to the specified value.
+    *
+    * @param text The <code>String</code> to iterate through.
+    * @param index The initial index position.
+    */
+   public StringCharacterIterator (String text, int index)
+   {
+     this (text, 0, text.length (), index);
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method initializes a new instance of
+    * <code>StringCharacterIterator</code> that iterates over the text
+    * in a subrange of the specified <code>String</code>.  The
+    * beginning and end of the range are specified by the caller, as is
+    * the initial index position.
+    *
+    * @param text The <code>String</code> to iterate through.
+    * @param begin The beginning position in the character range.
+    * @param end The ending position in the character range.
+    * @param index The initial index position.
+    *
+    * @throws IllegalArgumentException If any of the range values are
+    * invalid.
+    */
+   public StringCharacterIterator (String text, int begin, int end, int index)
+   {
+     int len = text.length ();
+ 
+     if ((begin < 0) || (begin > len))
+       throw new IllegalArgumentException ("Bad begin position");
+ 
+     if ((end < begin) || (end > len))
+       throw new IllegalArgumentException ("Bad end position");
+ 
+     if ((index < begin) || (index > end))
+       throw new IllegalArgumentException ("Bad initial index position");
+ 
+     this.text = text;
+     this.begin = begin;
+     this.end = end;
+     this.index = index;
+   }
+ 
+   /**
+    * This is a package level constructor that copies the text out of
+    * an existing StringCharacterIterator and resets the beginning and
+    * ending index.
+    *
+    * @param sci The StringCharacterIterator to copy the info from
+    * @param begin The beginning index of the range we are interested in.
+    * @param end The ending index of the range we are interested in.
+    */
+   StringCharacterIterator (StringCharacterIterator sci, int begin, int end)
+   {
+     this (sci.text, begin, end, begin);
+   }
+ 
+   /**
+    * This method returns the character at the current index position
+    *
+    * @return The character at the current index position.
+    */
+   public char current ()
+   {
+     return (index < end) ? text.charAt (index) : DONE;
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method increments the current index and then returns the
+    * character at the new index value.  If the index is already at
+    * <code>getEndIndex () - 1</code>, it will not be incremented.
+    *
+    * @return The character at the position of the incremented index
+    * value, or <code>DONE</code> if the index has reached
+    * getEndIndex () - 1.
+    */
+   public char next ()
+   {
+     if (index == end)
+       return DONE;
+ 
+     ++index;
+     return current ();
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method decrements the current index and then returns the
+    * character at the new index value.  If the index value is already
+    * at the beginning index, it will not be decremented.
+    *
+    * @return The character at the position of the decremented index
+    * value, or <code>DONE</code> if index was already equal to the
+    * beginning index value.
+    */
+   public char previous ()
+   {
+     if (index == begin)
+       return DONE;
+ 
+     --index;
+     return current ();
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method sets the index value to the beginning of the range and returns
+    * the character there.
+    *
+    * @return The character at the beginning of the range, or
+    * <code>DONE</code> if the range is empty. 
+    */
+   public char first ()
+   {
+     index = begin;
+     return current ();
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method sets the index value to <code>getEndIndex () - 1</code> and
+    * returns the character there.  If the range is empty, then the index value
+    * will be set equal to the beginning index.
+    *
+    * @return The character at the end of the range, or
+    * <code>DONE</code> if the range is empty. 
+    */
+   public char last ()
+   {
+     if (end == begin)
+       return DONE;
+ 
+     index = end - 1;
+     return current ();
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method returns the current value of the index.
+    *
+    * @return The current index value
+    */
+   public int getIndex ()
+   {
+     return index;
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method sets the value of the index to the specified value, then
+    * returns the character at that position.
+    *
+    * @param index The new index value.
+    *
+    * @return The character at the new index value or <code>DONE</code>
+    * if the index value is equal to <code>getEndIndex</code>. 
+    *
+    * @exception IllegalArgumentException If the specified index is not valid
+    */
+   public char setIndex (int index)
+   {
+     if ((index < begin) || (index > end))
+       throw new IllegalArgumentException ("Bad index specified");
+ 
+     this.index = index;
+     return current ();
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method returns the character position of the first character in the
+    * range.
+    *
+    * @return The index of the first character in the range.
+    */
+   public int getBeginIndex ()
+   {
+     return begin;
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method returns the character position of the end of the text range.
+    * This will actually be the index of the first character following the
+    * end of the range.  In the event the text range is empty, this will be
+    * equal to the first character in the range.
+    *
+    * @return The index of the end of the range.
+    */
+   public int getEndIndex ()
+   {
+     return end;
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method creates a copy of this <code>CharacterIterator</code>.
+    *
+    * @return A copy of this <code>CharacterIterator</code>.
+    */
+   public Object clone ()
+   {
+     return new StringCharacterIterator (text, begin, end, index);
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method tests this object for equality againt the specified 
+    * object.  This will be true if and only if the specified object:
+    * <p>
+    * <ul>
+    * <li>is not <code>null</code>.</li>
+    * <li>is an instance of <code>StringCharacterIterator</code></li>
+    * <li>has the same text as this object</li>
+    * <li>has the same beginning, ending, and current index as this object.</li>
+    * </ul>
+    *
+    * @param obj The object to test for equality against.
+    *
+    * @return <code>true</code> if the specified object is equal to this
+    * object, <code>false</code> otherwise.
+    */
+   public boolean equals (Object obj)
+   {
+     if (! (obj instanceof StringCharacterIterator))
+       return false;
+ 
+     StringCharacterIterator sci = (StringCharacterIterator) obj;
+ 
+     return (begin == sci.begin
+ 	    && end == sci.end
+ 	    && index == sci.index
+ 	    && text.equals (sci.text));
+   }
+   
+   /**
+    * Return the hash code for this object.
+    * @return the hash code
+    */
+   public int hashCode()
+   {
+     // Incorporate all the data in a goofy way.
+     return begin ^ end ^ index ^ text.hashCode();
+   }
+ 
+   /*************************************************************************/
+ 
+   /**
+    * This method allows other classes in java.text to change the value
+    * of the underlying text being iterated through.
+    *
+    * @param text The new <code>String</code> to iterate through.
+    */
+   public void setText (String text)
+   {
+     this.text = text;
+     this.begin = 0;
+     this.end = text.length ();
+     this.index = 0;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/class-dependencies.conf gcc-4.1.0/libjava/classpath/java/text/class-dependencies.conf
*** gcc-4.0.2/libjava/classpath/java/text/class-dependencies.conf	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/class-dependencies.conf	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,220 ----
+ # This property file contains dependencies of classes, methods, and
+ # field on other methods or classes.
+ #
+ # Syntax: 
+ #
+ #   <used>: <needed 1> [... <needed N>]
+ #
+ # means that when <used> is included, <needed 1> (... <needed N>) must
+ # be included as well.
+ #
+ # <needed X> and <used> are of the form
+ #
+ #   <class.methodOrField(signature)>
+ #
+ # or just
+ #
+ #   <class>
+ #
+ # Within dependencies, variables can be used. A variable is defined as 
+ # follows: 
+ #
+ #   {variable}: value1 value2 ... value<n>
+ #
+ # variables can be used on the right side of dependencies as follows: 
+ #
+ #    <used>: com.bla.blu.{variable}.Class.m()V
+ #
+ # The use of the variable will expand to <n> dependencies of the form
+ #
+ #    <used>: com.bla.blu.value1.Class.m()V
+ #    <used>: com.bla.blu.value2.Class.m()V
+ #    ...
+ #    <used>: com.bla.blu.value<n>.Class.m()V
+ #
+ # Variables can be redefined when building a system to select the 
+ # required support for features like encodings, protocols, etc. 
+ #
+ # Hints:
+ #
+ #  - For methods and fields, the signature is mandatory. For
+ #    specification, please see the Java Virtual Machine Specification by
+ #    SUN. Unlike in the spec, field signatures (types) are in brackets.
+ #
+ #  - Package names must be separated by '/' (and not '.'). E.g.,
+ #    java/lang/Class (this is necessary, because the '.' is used to
+ #    separate method or field names from classes)
+ #
+ #  - In case <needed> refers to a class, only the class itself will be
+ #    included in the resulting binary, NOT necessarily all its methods
+ #    and fields. If you want to refer to all methods and fields, you can
+ #    write class.* as an abbreviation.
+ #
+ # -  Abbreviations for packages are also possible: my/package/* means all
+ #    methods and fields of all classes in my/package.
+ #
+ # -  A line with a trailing '\' continues in the next line.
+ 
+ # end of file
+ 
+ # All locales supported are loaded via classes from java.text (see below)
+ # from class gnu/java/locale/LocaleInformation_<locale_id>
+ #
+ # This introduces a dependency for all locales. To allow an easy selection
+ # and addition of locales, the library variable {text_locales} can be set to 
+ # the set of supported locales.
+ #
+ 
+ {text_locales}: \
+ 	af_ZA \
+ 	ar_AE \
+ 	ar_BH \
+ 	ar_DZ \
+ 	ar_EG \
+ 	ar_IN \
+ 	ar_IQ \
+ 	ar_JO \
+ 	ar_KW \
+ 	ar_LB \
+ 	ar_LY \
+ 	ar_MA \
+ 	ar_OM \
+ 	ar_QA \
+ 	ar_SD \
+ 	ar_SY \
+ 	ar_TN \
+ 	ar_YE \
+ 	be_BY \
+ 	bn_IN \
+ 	br_FR \
+ 	bs_BA \
+ 	ca_ES \
+ 	cs_CZ \
+ 	cy_GB \
+ 	da_DK \
+ 	de \
+ 	de_AT \
+ 	de_BE \
+ 	de_CH \
+ 	de_DE \
+ 	de_LU \
+ 	el_GR \
+ 	en \
+ 	en_AU \
+ 	en_BW \
+ 	en_CA \
+ 	en_DK \
+ 	en_GB \
+ 	en_HK \
+ 	en_IE \
+ 	en_IN \
+ 	en_NZ \
+ 	en_PH \
+ 	en_SG \
+ 	en_US \
+ 	en_ZA \
+ 	en_ZW \
+ 	es_AR \
+ 	es_BO \
+ 	es_CL \
+ 	es_CO \
+ 	es_CR \
+ 	es_DO \
+ 	es_EC \
+ 	es_ES \
+ 	es_GT \
+ 	es_HN \
+ 	es_MX \
+ 	es_NI \
+ 	es_PA \
+ 	es_PE \
+ 	es_PR \
+ 	es_PY \
+ 	es_SV \
+ 	es_US \
+ 	es_UY \
+ 	es_VE \
+ 	et_EE \
+ 	eu_ES \
+ 	fa_IR \
+ 	fi_FI \
+ 	fo_FO \
+ 	fr_BE \
+ 	fr_CA \
+ 	fr_CH \
+ 	fr_FR \
+ 	fr_LU \
+ 	ga_IE \
+ 	gd_GB \
+ 	gl_ES \
+ 	gv_GB \
+ 	he_IL \
+ 	hi_IN \
+ 	hr_HR \
+ 	hu_HU \
+ 	id_ID \
+ 	it_CH \
+ 	it_IT \
+ 	iw_IL \
+ 	ja_JP \
+ 	ka_GE \
+ 	kl_GL \
+ 	ko_KR \
+ 	kw_GB \
+ 	lt_LT \
+ 	lv_LV \
+ 	mi_NZ \
+ 	mk_MK \
+ 	mr_IN \
+ 	mt_MT \
+ 	nl \
+ 	nl_BE \
+ 	nl_NL \
+ 	nn_NO \
+ 	no_NO \
+ 	oc_FR \
+ 	pl_PL \
+ 	pt_BR \
+ 	pt_PT \
+ 	ro_RO \
+ 	ru_RU \
+ 	ru_UA \
+ 	se_NO \
+ 	sk_SK \
+ 	sl_SI \
+ 	sq_AL \
+ 	sr_YU \
+ 	sv_FI \
+ 	sv_SE \
+ 	ta_IN \
+ 	te_IN \
+ 	tg_TJ \
+ 	tl_PH \
+ 	tr_TR \
+ 	uk_UA \
+ 	ur_PK \
+ 	uz_UZ \
+ 	vi_VN \
+ 	yi_US \
+ 	zh_CN \
+ 	zh_HK \
+ 	zh_SG \
+ 	zh_TW 
+ 
+ java/text/Collator.getInstance(Ljava/util/Locale;)Ljava/text/Collator;: \
+ 	gnu/java/locale/LocaleInformation_{text_locales}.*
+ 
+ java/text/DateFormatSymbols.<init>(Ljava/util/Locale;)V: \
+ 	gnu/java/locale/LocaleInformation_{text_locales}.*
+ 
+ java/text/DecimalFormatSymbols.<init>(Ljava/util/Locale;)V: \
+ 	gnu/java/locale/LocaleInformation_{text_locales}.*
+ 
+ java/text/BreakIterator.getInstance(Ljava/lang/String;Ljava/util/Locale;)Ljava/text/BreakIterator;: \
+ 	gnu/java/locale/LocaleInformation_{text_locales}.*
+ 
+ java/text/NumberFormat.computeInstance(Ljava/util/Locale;Ljava/lang/String;Ljava/lang/String;)Ljava/text/NumberFormat;: \
+ 	gnu/java/locale/LocaleInformation_{text_locales}.*
+ 
+ java/text/DateFormat.computeInstance(IILjava/util/Locale;ZZ)Ljava/text/DateFormat;: \
+ 	gnu/java/locale/LocaleInformation_{text_locales}.*
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/text/package.html gcc-4.1.0/libjava/classpath/java/text/package.html
*** gcc-4.0.2/libjava/classpath/java/text/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/text/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.text package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.text</title></head>
+ 
+ <body>
+ <p>Classes to iterate over strings and to format texts according to a
+ specific locale.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/AbstractCollection.java gcc-4.1.0/libjava/classpath/java/util/AbstractCollection.java
*** gcc-4.0.2/libjava/classpath/java/util/AbstractCollection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/AbstractCollection.java	Mon Feb  6 19:18:36 2006
***************
*** 0 ****
--- 1,478 ----
+ /* AbstractCollection.java -- Abstract implementation of most of Collection
+    Copyright (C) 1998, 2000, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.lang.reflect.Array;
+ 
+ /**
+  * A basic implementation of most of the methods in the Collection interface to
+  * make it easier to create a collection. To create an unmodifiable Collection,
+  * just subclass AbstractCollection and provide implementations of the
+  * iterator() and size() methods. The Iterator returned by iterator() need only
+  * provide implementations of hasNext() and next() (that is, it may throw an
+  * UnsupportedOperationException if remove() is called). To create a modifiable
+  * Collection, you must in addition provide an implementation of the
+  * add(Object) method and the Iterator returned by iterator() must provide an
+  * implementation of remove(). Other methods should be overridden if the
+  * backing data structure allows for a more efficient implementation. The
+  * precise implementation used by AbstractCollection is documented, so that
+  * subclasses can tell which methods could be implemented more efficiently.
+  * <p>
+  *
+  * The programmer should provide a no-argument constructor, and one that
+  * accepts another Collection, as recommended by the Collection interface.
+  * Unfortunately, there is no way to enforce this in Java.
+  *
+  * @author Original author unknown
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see AbstractSet
+  * @see AbstractList
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class AbstractCollection implements Collection
+ {
+   /**
+    * The main constructor, for use by subclasses.
+    */
+   protected AbstractCollection()
+   {
+   }
+ 
+   /**
+    * Return an Iterator over this collection. The iterator must provide the
+    * hasNext and next methods and should in addition provide remove if the
+    * collection is modifiable.
+    *
+    * @return an iterator
+    */
+   public abstract Iterator iterator();
+ 
+   /**
+    * Return the number of elements in this collection. If there are more than
+    * Integer.MAX_VALUE elements, return Integer.MAX_VALUE.
+    *
+    * @return the size
+    */
+   public abstract int size();
+ 
+   /**
+    * Add an object to the collection (optional operation). This implementation
+    * always throws an UnsupportedOperationException - it should be
+    * overridden if the collection is to be modifiable. If the collection
+    * does not accept duplicates, simply return false. Collections may specify
+    * limitations on what may be added.
+    *
+    * @param o the object to add
+    * @return true if the add operation caused the Collection to change
+    * @throws UnsupportedOperationException if the add operation is not
+    *         supported on this collection
+    * @throws NullPointerException if the collection does not support null
+    * @throws ClassCastException if the object is of the wrong type
+    * @throws IllegalArgumentException if some aspect of the object prevents
+    *         it from being added
+    */
+   public boolean add(Object o)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Add all the elements of a given collection to this collection (optional
+    * operation). This implementation obtains an Iterator over the given
+    * collection and iterates over it, adding each element with the
+    * add(Object) method (thus this method will fail with an
+    * UnsupportedOperationException if the add method does). The behavior is
+    * unspecified if the specified collection is modified during the iteration,
+    * including the special case of trying addAll(this) on a non-empty
+    * collection.
+    *
+    * @param c the collection to add the elements of to this collection
+    * @return true if the add operation caused the Collection to change
+    * @throws UnsupportedOperationException if the add operation is not
+    *         supported on this collection
+    * @throws NullPointerException if the specified collection is null
+    * @throws ClassCastException if the type of any element in c is
+    *         not a valid type for addition.
+    * @throws IllegalArgumentException if some aspect of any element
+    *         in c prevents it being added.
+    * @throws NullPointerException if any element in c is null and this
+    *         collection doesn't allow null values.
+    * @see #add(Object)
+    */
+   public boolean addAll(Collection c)
+   {
+     Iterator itr = c.iterator();
+     boolean modified = false;
+     int pos = c.size();
+     while (--pos >= 0)
+       modified |= add(itr.next());
+     return modified;
+   }
+ 
+   /**
+    * Remove all elements from the collection (optional operation). This
+    * implementation obtains an iterator over the collection and calls next
+    * and remove on it repeatedly (thus this method will fail with an
+    * UnsupportedOperationException if the Iterator's remove method does)
+    * until there are no more elements to remove.
+    * Many implementations will have a faster way of doing this.
+    *
+    * @throws UnsupportedOperationException if the Iterator returned by
+    *         iterator does not provide an implementation of remove
+    * @see Iterator#remove()
+    */
+   public void clear()
+   {
+     Iterator itr = iterator();
+     int pos = size();
+     while (--pos >= 0)
+       {
+         itr.next();
+         itr.remove();
+       }
+   }
+ 
+   /**
+    * Test whether this collection contains a given object. That is, if the
+    * collection has an element e such that (o == null ? e == null :
+    * o.equals(e)). This implementation obtains an iterator over the collection
+    * and iterates over it, testing each element for equality with the given
+    * object. If it is equal, true is returned. Otherwise false is returned when
+    * the end of the collection is reached.
+    *
+    * @param o the object to remove from this collection
+    * @return true if this collection contains an object equal to o
+    */
+   public boolean contains(Object o)
+   {
+     Iterator itr = iterator();
+     int pos = size();
+     while (--pos >= 0)
+       if (equals(o, itr.next()))
+         return true;
+     return false;
+   }
+ 
+   /**
+    * Tests whether this collection contains all the elements in a given
+    * collection. This implementation iterates over the given collection,
+    * testing whether each element is contained in this collection. If any one
+    * is not, false is returned. Otherwise true is returned.
+    *
+    * @param c the collection to test against
+    * @return true if this collection contains all the elements in the given
+    *         collection
+    * @throws NullPointerException if the given collection is null
+    * @see #contains(Object)
+    */
+   public boolean containsAll(Collection c)
+   {
+     Iterator itr = c.iterator();
+     int pos = c.size();
+     while (--pos >= 0)
+       if (!contains(itr.next()))
+         return false;
+     return true;
+   }
+ 
+   /**
+    * Test whether this collection is empty. This implementation returns
+    * size() == 0.
+    *
+    * @return true if this collection is empty.
+    * @see #size()
+    */
+   public boolean isEmpty()
+   {
+     return size() == 0;
+   }
+ 
+   /**
+    * Remove a single instance of an object from this collection (optional
+    * operation). That is, remove one element e such that
+    * <code>(o == null ? e == null : o.equals(e))</code>, if such an element
+    * exists. This implementation obtains an iterator over the collection
+    * and iterates over it, testing each element for equality with the given
+    * object. If it is equal, it is removed by the iterator's remove method
+    * (thus this method will fail with an UnsupportedOperationException if
+    * the Iterator's remove method does). After the first element has been
+    * removed, true is returned; if the end of the collection is reached, false
+    * is returned.
+    *
+    * @param o the object to remove from this collection
+    * @return true if the remove operation caused the Collection to change, or
+    *         equivalently if the collection did contain o.
+    * @throws UnsupportedOperationException if this collection's Iterator
+    *         does not support the remove method
+    * @see Iterator#remove()
+    */
+   public boolean remove(Object o)
+   {
+     Iterator itr = iterator();
+     int pos = size();
+     while (--pos >= 0)
+       if (equals(o, itr.next()))
+         {
+           itr.remove();
+           return true;
+         }
+     return false;
+   }
+ 
+   /**
+    * Remove from this collection all its elements that are contained in a given
+    * collection (optional operation). This implementation iterates over this
+    * collection, and for each element tests if it is contained in the given
+    * collection. If so, it is removed by the Iterator's remove method (thus
+    * this method will fail with an UnsupportedOperationException if the
+    * Iterator's remove method does).
+    *
+    * @param c the collection to remove the elements of
+    * @return true if the remove operation caused the Collection to change
+    * @throws UnsupportedOperationException if this collection's Iterator
+    *         does not support the remove method
+    * @throws NullPointerException if the collection, c, is null.
+    * @see Iterator#remove()
+    */
+   public boolean removeAll(Collection c)
+   {
+     return removeAllInternal(c);
+   }
+ 
+   /**
+    * Remove from this collection all its elements that are contained in a given
+    * collection (optional operation). This implementation iterates over this
+    * collection, and for each element tests if it is contained in the given
+    * collection. If so, it is removed by the Iterator's remove method (thus
+    * this method will fail with an UnsupportedOperationException if the
+    * Iterator's remove method does). This method is necessary for ArrayList,
+    * which cannot publicly override removeAll but can optimize this call.
+    *
+    * @param c the collection to remove the elements of
+    * @return true if the remove operation caused the Collection to change
+    * @throws UnsupportedOperationException if this collection's Iterator
+    *         does not support the remove method
+    * @throws NullPointerException if the collection, c, is null.
+    * @see Iterator#remove()
+    */
+   // Package visible for use throughout java.util.
+   boolean removeAllInternal(Collection c)
+   {
+     Iterator itr = iterator();
+     boolean modified = false;
+     int pos = size();
+     while (--pos >= 0)
+       if (c.contains(itr.next()))
+         {
+           itr.remove();
+           modified = true;
+         }
+     return modified;
+   }
+ 
+   /**
+    * Remove from this collection all its elements that are not contained in a
+    * given collection (optional operation). This implementation iterates over
+    * this collection, and for each element tests if it is contained in the
+    * given collection. If not, it is removed by the Iterator's remove method
+    * (thus this method will fail with an UnsupportedOperationException if
+    * the Iterator's remove method does).
+    *
+    * @param c the collection to retain the elements of
+    * @return true if the remove operation caused the Collection to change
+    * @throws UnsupportedOperationException if this collection's Iterator
+    *         does not support the remove method
+    * @throws NullPointerException if the collection, c, is null.
+    * @see Iterator#remove()
+    */
+   public boolean retainAll(Collection c)
+   {
+     return retainAllInternal(c);
+   }
+ 
+   /**
+    * Remove from this collection all its elements that are not contained in a
+    * given collection (optional operation). This implementation iterates over
+    * this collection, and for each element tests if it is contained in the
+    * given collection. If not, it is removed by the Iterator's remove method
+    * (thus this method will fail with an UnsupportedOperationException if
+    * the Iterator's remove method does). This method is necessary for
+    * ArrayList, which cannot publicly override retainAll but can optimize
+    * this call.
+    *
+    * @param c the collection to retain the elements of
+    * @return true if the remove operation caused the Collection to change
+    * @throws UnsupportedOperationException if this collection's Iterator
+    *         does not support the remove method
+    * @throws NullPointerException if the collection, c, is null.
+    * @see Iterator#remove()
+    */
+   // Package visible for use throughout java.util.
+   boolean retainAllInternal(Collection c)
+   {
+     Iterator itr = iterator();
+     boolean modified = false;
+     int pos = size();
+     while (--pos >= 0)
+       if (!c.contains(itr.next()))
+         {
+           itr.remove();
+           modified = true;
+         }
+     return modified;
+   }
+ 
+   /**
+    * Return an array containing the elements of this collection. This
+    * implementation creates an Object array of size size() and then iterates
+    * over the collection, setting each element of the array from the value
+    * returned by the iterator. The returned array is safe, and is not backed
+    * by the collection.
+    *
+    * @return an array containing the elements of this collection
+    */
+   public Object[] toArray()
+   {
+     Iterator itr = iterator();
+     int size = size();
+     Object[] a = new Object[size];
+     for (int pos = 0; pos < size; pos++)
+       a[pos] = itr.next();
+     return a;
+   }
+ 
+   /**
+    * Copy the collection into a given array if it will fit, or into a
+    * dynamically created array of the same run-time type as the given array if
+    * not. If there is space remaining in the array, the first element after the
+    * end of the collection is set to null (this is only useful if the
+    * collection is known to contain no null elements, however). This
+    * implementation first tests whether the given array is large enough to hold
+    * all the elements of the collection. If not, the reflection API is used to
+    * allocate a new array of the same run-time type. Next an iterator is
+    * obtained over the collection and the elements are placed in the array as
+    * they are returned by the iterator. Finally the first spare element, if
+    * any, of the array is set to null, and the created array is returned.
+    * The returned array is safe; it is not backed by the collection. Note that
+    * null may not mark the last element, if the collection allows null
+    * elements.
+    *
+    * @param a the array to copy into, or of the correct run-time type
+    * @return the array that was produced
+    * @throws NullPointerException if the given array is null
+    * @throws ArrayStoreException if the type of the array precludes holding
+    *         one of the elements of the Collection
+    */
+   public Object[] toArray(Object[] a)
+   {
+     int size = size();
+     if (a.length < size)
+       a = (Object[]) Array.newInstance(a.getClass().getComponentType(),
+                                        size);
+     else if (a.length > size)
+       a[size] = null;
+ 
+     Iterator itr = iterator();
+     for (int pos = 0; pos < size; pos++)
+       a[pos] = itr.next();
+ 
+     return a;
+   }
+ 
+   /**
+    * Creates a String representation of the Collection. The string returned is
+    * of the form "[a, b, ...]" where a and b etc are the results of calling
+    * toString on the elements of the collection. This implementation obtains an
+    * Iterator over the Collection and adds each element to a StringBuffer as it
+    * is returned by the iterator. "<this>" is inserted when the collection
+    * contains itself (only works for direct containment, not for collections
+    * inside collections).
+    *
+    * @return a String representation of the Collection
+    */
+   public String toString()
+   {
+     Iterator itr = iterator();
+     StringBuffer r = new StringBuffer("[");
+     boolean hasNext = itr.hasNext();
+     while (hasNext)
+       {
+         Object o = itr.next();
+ 	if (o == this)
+ 	  r.append("<this>");
+ 	else
+ 	  r.append(o);
+ 	hasNext = itr.hasNext();
+         if (hasNext)
+           r.append(", ");
+       }
+     r.append("]");
+     return r.toString();
+   }
+ 
+   /**
+    * Compare two objects according to Collection semantics.
+    *
+    * @param o1 the first object
+    * @param o2 the second object
+    * @return o1 == null ? o2 == null : o1.equals(o2)
+    */
+   // Package visible for use throughout java.util.
+   // It may be inlined since it is final.
+   static final boolean equals(Object o1, Object o2)
+   {
+     return o1 == null ? o2 == null : o1.equals(o2);
+   }
+ 
+   /**
+    * Hash an object according to Collection semantics.
+    *
+    * @param o the object to hash
+    * @return o1 == null ? 0 : o1.hashCode()
+    */
+   // Package visible for use throughout java.util.
+   // It may be inlined since it is final.
+   static final int hashCode(Object o)
+   {
+     return o == null ? 0 : o.hashCode();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/AbstractList.java gcc-4.1.0/libjava/classpath/java/util/AbstractList.java
*** gcc-4.0.2/libjava/classpath/java/util/AbstractList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/AbstractList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1225 ----
+ /* AbstractList.java -- Abstract implementation of most of List
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * A basic implementation of most of the methods in the List interface to make
+  * it easier to create a List based on a random-access data structure. If
+  * the list is sequential (such as a linked list), use AbstractSequentialList.
+  * To create an unmodifiable list, it is only necessary to override the
+  * size() and get(int) methods (this contrasts with all other abstract
+  * collection classes which require an iterator to be provided). To make the
+  * list modifiable, the set(int, Object) method should also be overridden, and
+  * to make the list resizable, the add(int, Object) and remove(int) methods
+  * should be overridden too. Other methods should be overridden if the
+  * backing data structure allows for a more efficient implementation.
+  * The precise implementation used by AbstractList is documented, so that
+  * subclasses can tell which methods could be implemented more efficiently.
+  * <p>
+  *
+  * As recommended by Collection and List, the subclass should provide at
+  * least a no-argument and a Collection constructor. This class is not
+  * synchronized.
+  *
+  * @author Original author unknown
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see List
+  * @see AbstractSequentialList
+  * @see AbstractCollection
+  * @see ListIterator
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class AbstractList extends AbstractCollection implements List
+ {
+   /**
+    * A count of the number of structural modifications that have been made to
+    * the list (that is, insertions and removals). Structural modifications
+    * are ones which change the list size or affect how iterations would
+    * behave. This field is available for use by Iterator and ListIterator,
+    * in order to throw a {@link ConcurrentModificationException} in response
+    * to the next operation on the iterator. This <i>fail-fast</i> behavior
+    * saves the user from many subtle bugs otherwise possible from concurrent
+    * modification during iteration.
+    * <p>
+    *
+    * To make lists fail-fast, increment this field by just 1 in the
+    * <code>add(int, Object)</code> and <code>remove(int)</code> methods.
+    * Otherwise, this field may be ignored.
+    */
+   protected transient int modCount;
+ 
+   /**
+    * The main constructor, for use by subclasses.
+    */
+   protected AbstractList()
+   {
+   }
+ 
+   /**
+    * Returns the elements at the specified position in the list.
+    *
+    * @param index the element to return
+    * @return the element at that position
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    */
+   public abstract Object get(int index);
+ 
+   /**
+    * Insert an element into the list at a given position (optional operation).
+    * This shifts all existing elements from that position to the end one
+    * index to the right.  This version of add has no return, since it is
+    * assumed to always succeed if there is no exception. This implementation
+    * always throws UnsupportedOperationException, and must be overridden to
+    * make a modifiable List.  If you want fail-fast iterators, be sure to
+    * increment modCount when overriding this.
+    *
+    * @param index the location to insert the item
+    * @param o the object to insert
+    * @throws UnsupportedOperationException if this list does not support the
+    *         add operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    * @see #modCount
+    */
+   public void add(int index, Object o)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Add an element to the end of the list (optional operation). If the list
+    * imposes restraints on what can be inserted, such as no null elements,
+    * this should be documented. This implementation calls
+    * <code>add(size(), o);</code>, and will fail if that version does.
+    *
+    * @param o the object to add
+    * @return true, as defined by Collection for a modified list
+    * @throws UnsupportedOperationException if this list does not support the
+    *         add operation
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    * @see #add(int, Object)
+    */
+   public boolean add(Object o)
+   {
+     add(size(), o);
+     return true;
+   }
+ 
+   /**
+    * Insert the contents of a collection into the list at a given position
+    * (optional operation). Shift all elements at that position to the right
+    * by the number of elements inserted. This operation is undefined if
+    * this list is modified during the operation (for example, if you try
+    * to insert a list into itself). This implementation uses the iterator of
+    * the collection, repeatedly calling add(int, Object); this will fail
+    * if add does. This can often be made more efficient.
+    *
+    * @param index the location to insert the collection
+    * @param c the collection to insert
+    * @return true if the list was modified by this action, that is, if c is
+    *         non-empty
+    * @throws UnsupportedOperationException if this list does not support the
+    *         addAll operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    * @throws ClassCastException if some element of c cannot be added to this
+    *         list due to its type
+    * @throws IllegalArgumentException if some element of c cannot be added
+    *         to this list for some other reason
+    * @throws NullPointerException if the specified collection is null
+    * @see #add(int, Object)
+    */
+   public boolean addAll(int index, Collection c)
+   {
+     Iterator itr = c.iterator();
+     int size = c.size();
+     for (int pos = size; pos > 0; pos--)
+       add(index++, itr.next());
+     return size > 0;
+   }
+ 
+   /**
+    * Clear the list, such that a subsequent call to isEmpty() would return
+    * true (optional operation). This implementation calls
+    * <code>removeRange(0, size())</code>, so it will fail unless remove
+    * or removeRange is overridden.
+    *
+    * @throws UnsupportedOperationException if this list does not support the
+    *         clear operation
+    * @see #remove(int)
+    * @see #removeRange(int, int)
+    */
+   public void clear()
+   {
+     removeRange(0, size());
+   }
+ 
+   /**
+    * Test whether this list is equal to another object. A List is defined to be
+    * equal to an object if and only if that object is also a List, and the two
+    * lists have the same sequence. Two lists l1 and l2 are equal if and only
+    * if <code>l1.size() == l2.size()</code>, and for every integer n between 0
+    * and <code>l1.size() - 1</code> inclusive, <code>l1.get(n) == null ?
+    * l2.get(n) == null : l1.get(n).equals(l2.get(n))</code>.
+    * <p>
+    *
+    * This implementation returns true if the object is this, or false if the
+    * object is not a List.  Otherwise, it iterates over both lists (with
+    * iterator()), returning false if two elements compare false or one list
+    * is shorter, and true if the iteration completes successfully.
+    *
+    * @param o the object to test for equality with this list
+    * @return true if o is equal to this list
+    * @see Object#equals(Object)
+    * @see #hashCode()
+    */
+   public boolean equals(Object o)
+   {
+     if (o == this)
+       return true;
+     if (! (o instanceof List))
+       return false;
+     int size = size();
+     if (size != ((List) o).size())
+       return false;
+ 
+     Iterator itr1 = iterator();
+     Iterator itr2 = ((List) o).iterator();
+ 
+     while (--size >= 0)
+       if (! equals(itr1.next(), itr2.next()))
+         return false;
+     return true;
+   }
+ 
+   /**
+    * Obtains a hash code for this list. In order to obey the general
+    * contract of the hashCode method of class Object, this value is
+    * calculated as follows:
+    * 
+ <pre>hashCode = 1;
+ Iterator i = list.iterator();
+ while (i.hasNext())
+ {
+   Object obj = i.next();
+   hashCode = 31 * hashCode + (obj == null ? 0 : obj.hashCode());
+ }</pre>
+    *
+    * This ensures that the general contract of Object.hashCode() is adhered to.
+    *
+    * @return the hash code of this list
+    *
+    * @see Object#hashCode()
+    * @see #equals(Object)
+    */
+   public int hashCode()
+   {
+     int hashCode = 1;
+     Iterator itr = iterator();
+     int pos = size();
+     while (--pos >= 0)
+       hashCode = 31 * hashCode + hashCode(itr.next());
+     return hashCode;
+   }
+ 
+   /**
+    * Obtain the first index at which a given object is to be found in this
+    * list. This implementation follows a listIterator() until a match is found,
+    * or returns -1 if the list end is reached.
+    *
+    * @param o the object to search for
+    * @return the least integer n such that <code>o == null ? get(n) == null :
+    *         o.equals(get(n))</code>, or -1 if there is no such index
+    */
+   public int indexOf(Object o)
+   {
+     ListIterator itr = listIterator();
+     int size = size();
+     for (int pos = 0; pos < size; pos++)
+       if (equals(o, itr.next()))
+         return pos;
+     return -1;
+   }
+ 
+   /**
+    * Obtain an Iterator over this list, whose sequence is the list order.
+    * This implementation uses size(), get(int), and remove(int) of the
+    * backing list, and does not support remove unless the list does. This
+    * implementation is fail-fast if you correctly maintain modCount.
+    * Also, this implementation is specified by Sun to be distinct from
+    * listIterator, although you could easily implement it as
+    * <code>return listIterator(0)</code>.
+    *
+    * @return an Iterator over the elements of this list, in order
+    * @see #modCount
+    */
+   public Iterator iterator()
+   {
+     // Bah, Sun's implementation forbids using listIterator(0).
+     return new Iterator()
+     {
+       private int pos = 0;
+       private int size = size();
+       private int last = -1;
+       private int knownMod = modCount;
+ 
+       // This will get inlined, since it is private.
+       /**
+        * Checks for modifications made to the list from
+        * elsewhere while iteration is in progress.
+        *
+        * @throws ConcurrentModificationException if the
+        *         list has been modified elsewhere.
+        */
+       private void checkMod()
+       {
+         if (knownMod != modCount)
+           throw new ConcurrentModificationException();
+       }
+ 
+       /**
+        * Tests to see if there are any more objects to
+        * return.
+        *
+        * @return True if the end of the list has not yet been
+        *         reached.
+        * @throws ConcurrentModificationException if the
+        *         list has been modified elsewhere.
+        */
+       public boolean hasNext()
+       {
+         checkMod();
+         return pos < size;
+       }
+ 
+       /**
+        * Retrieves the next object from the list.
+        *
+        * @return The next object.
+        * @throws NoSuchElementException if there are
+        *         no more objects to retrieve.
+        * @throws ConcurrentModificationException if the
+        *         list has been modified elsewhere.
+        */
+       public Object next()
+       {
+         checkMod();
+         if (pos == size)
+           throw new NoSuchElementException();
+         last = pos;
+         return get(pos++);
+       }
+ 
+       /**
+        * Removes the last object retrieved by <code>next()</code>
+        * from the list, if the list supports object removal.
+        *
+        * @throws ConcurrentModificationException if the list
+        *         has been modified elsewhere.
+        * @throws IllegalStateException if the iterator is positioned
+        *         before the start of the list or the last object has already
+        *         been removed.
+        * @throws UnsupportedOperationException if the list does
+        *         not support removing elements.
+        */
+       public void remove()
+       {
+         checkMod();
+         if (last < 0)
+           throw new IllegalStateException();
+         AbstractList.this.remove(last);
+         pos--;
+         size--;
+         last = -1;
+         knownMod = modCount;
+       }
+     };
+   }
+ 
+   /**
+    * Obtain the last index at which a given object is to be found in this
+    * list. This implementation grabs listIterator(size()), then searches
+    * backwards for a match or returns -1.
+    *
+    * @return the greatest integer n such that <code>o == null ? get(n) == null
+    *         : o.equals(get(n))</code>, or -1 if there is no such index
+    */
+   public int lastIndexOf(Object o)
+   {
+     int pos = size();
+     ListIterator itr = listIterator(pos);
+     while (--pos >= 0)
+       if (equals(o, itr.previous()))
+         return pos;
+     return -1;
+   }
+ 
+   /**
+    * Obtain a ListIterator over this list, starting at the beginning. This
+    * implementation returns listIterator(0).
+    *
+    * @return a ListIterator over the elements of this list, in order, starting
+    *         at the beginning
+    */
+   public ListIterator listIterator()
+   {
+     return listIterator(0);
+   }
+ 
+   /**
+    * Obtain a ListIterator over this list, starting at a given position.
+    * A first call to next() would return the same as get(index), and a
+    * first call to previous() would return the same as get(index - 1).
+    * <p>
+    *
+    * This implementation uses size(), get(int), set(int, Object),
+    * add(int, Object), and remove(int) of the backing list, and does not
+    * support remove, set, or add unless the list does. This implementation
+    * is fail-fast if you correctly maintain modCount.
+    *
+    * @param index the position, between 0 and size() inclusive, to begin the
+    *        iteration from
+    * @return a ListIterator over the elements of this list, in order, starting
+    *         at index
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    * @see #modCount
+    */
+   public ListIterator listIterator(final int index)
+   {
+     if (index < 0 || index > size())
+       throw new IndexOutOfBoundsException("Index: " + index + ", Size:"
+                                           + size());
+ 
+     return new ListIterator()
+     {
+       private int knownMod = modCount;
+       private int position = index;
+       private int lastReturned = -1;
+       private int size = size();
+ 
+       // This will get inlined, since it is private.
+       /**
+        * Checks for modifications made to the list from
+        * elsewhere while iteration is in progress.
+        *
+        * @throws ConcurrentModificationException if the
+        *         list has been modified elsewhere.
+        */
+       private void checkMod()
+       {
+         if (knownMod != modCount)
+           throw new ConcurrentModificationException();
+       }
+ 
+       /**
+        * Tests to see if there are any more objects to
+        * return.
+        *
+        * @return True if the end of the list has not yet been
+        *         reached.
+        * @throws ConcurrentModificationException if the
+        *         list has been modified elsewhere.
+        */
+       public boolean hasNext()
+       {
+         checkMod();
+         return position < size;
+       }
+ 
+       /**
+        * Tests to see if there are objects prior to the
+        * current position in the list.
+        *
+        * @return True if objects exist prior to the current
+        *         position of the iterator.
+        * @throws ConcurrentModificationException if the
+        *         list has been modified elsewhere.
+        */
+       public boolean hasPrevious()
+       {
+         checkMod();
+         return position > 0;
+       }
+ 
+       /**
+        * Retrieves the next object from the list.
+        *
+        * @return The next object.
+        * @throws NoSuchElementException if there are no
+        *         more objects to retrieve.
+        * @throws ConcurrentModificationException if the
+        *         list has been modified elsewhere.
+        */
+       public Object next()
+       {
+         checkMod();
+         if (position == size)
+           throw new NoSuchElementException();
+         lastReturned = position;
+         return get(position++);
+       }
+ 
+       /**
+        * Retrieves the previous object from the list.
+        *
+        * @return The next object.
+        * @throws NoSuchElementException if there are no
+        *         previous objects to retrieve.
+        * @throws ConcurrentModificationException if the
+        *         list has been modified elsewhere.
+        */
+       public Object previous()
+       {
+         checkMod();
+         if (position == 0)
+           throw new NoSuchElementException();
+         lastReturned = --position;
+         return get(lastReturned);
+       }
+ 
+       /**
+        * Returns the index of the next element in the
+        * list, which will be retrieved by <code>next()</code>
+        *
+        * @return The index of the next element.
+        * @throws ConcurrentModificationException if the list
+        *         has been modified elsewhere.
+        */
+       public int nextIndex()
+       {
+         checkMod();
+         return position;
+       }
+ 
+       /**
+        * Returns the index of the previous element in the
+        * list, which will be retrieved by <code>previous()</code>
+        *
+        * @return The index of the previous element.
+        * @throws ConcurrentModificationException if the list
+        *         has been modified elsewhere.
+        */
+       public int previousIndex()
+       {
+         checkMod();
+         return position - 1;
+       }
+ 
+      /**
+       * Removes the last object retrieved by <code>next()</code>
+       * or <code>previous()</code> from the list, if the list
+       * supports object removal.
+       *
+       * @throws IllegalStateException if the iterator is positioned
+       *         before the start of the list or the last object has already
+       *         been removed.
+       * @throws UnsupportedOperationException if the list does
+       *         not support removing elements.
+       * @throws ConcurrentModificationException if the list
+       *         has been modified elsewhere.
+       */
+       public void remove()
+       {
+         checkMod();
+         if (lastReturned < 0)
+           throw new IllegalStateException();
+         AbstractList.this.remove(lastReturned);
+         size--;
+         position = lastReturned;
+         lastReturned = -1;
+         knownMod = modCount;
+       }
+ 
+      /**
+       * Replaces the last object retrieved by <code>next()</code>
+       * or <code>previous</code> with o, if the list supports object
+       * replacement and an add or remove operation has not already
+       * been performed.
+       *
+       * @throws IllegalStateException if the iterator is positioned
+       *         before the start of the list or the last object has already
+       *         been removed.
+       * @throws UnsupportedOperationException if the list doesn't support
+       *         the addition or removal of elements.
+       * @throws ClassCastException if the type of o is not a valid type
+       *         for this list.
+       * @throws IllegalArgumentException if something else related to o
+       *         prevents its addition.
+       * @throws ConcurrentModificationException if the list
+       *         has been modified elsewhere.
+       */
+       public void set(Object o)
+       {
+         checkMod();
+         if (lastReturned < 0)
+           throw new IllegalStateException();
+         AbstractList.this.set(lastReturned, o);
+       }
+ 
+       /**
+        * Adds the supplied object before the element that would be returned
+        * by a call to <code>next()</code>, if the list supports addition.
+        * 
+        * @param o The object to add to the list.
+        * @throws UnsupportedOperationException if the list doesn't support
+        *         the addition of new elements.
+        * @throws ClassCastException if the type of o is not a valid type
+        *         for this list.
+        * @throws IllegalArgumentException if something else related to o
+        *         prevents its addition.
+        * @throws ConcurrentModificationException if the list
+        *         has been modified elsewhere.
+        */
+       public void add(Object o)
+       {
+         checkMod();
+         AbstractList.this.add(position++, o);
+         size++;
+         lastReturned = -1;
+         knownMod = modCount;
+       }
+     };
+   }
+ 
+   /**
+    * Remove the element at a given position in this list (optional operation).
+    * Shifts all remaining elements to the left to fill the gap. This
+    * implementation always throws an UnsupportedOperationException.
+    * If you want fail-fast iterators, be sure to increment modCount when
+    * overriding this.
+    *
+    * @param index the position within the list of the object to remove
+    * @return the object that was removed
+    * @throws UnsupportedOperationException if this list does not support the
+    *         remove operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    * @see #modCount
+    */
+   public Object remove(int index)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Remove a subsection of the list. This is called by the clear and
+    * removeRange methods of the class which implements subList, which are
+    * difficult for subclasses to override directly. Therefore, this method
+    * should be overridden instead by the more efficient implementation, if one
+    * exists. Overriding this can reduce quadratic efforts to constant time
+    * in some cases!
+    * <p>
+    *
+    * This implementation first checks for illegal or out of range arguments. It
+    * then obtains a ListIterator over the list using listIterator(fromIndex).
+    * It then calls next() and remove() on this iterator repeatedly, toIndex -
+    * fromIndex times.
+    *
+    * @param fromIndex the index, inclusive, to remove from.
+    * @param toIndex the index, exclusive, to remove to.
+    * @throws UnsupportedOperationException if the list does
+    *         not support removing elements.
+    */
+   protected void removeRange(int fromIndex, int toIndex)
+   {
+     ListIterator itr = listIterator(fromIndex);
+     for (int index = fromIndex; index < toIndex; index++)
+       {
+         itr.next();
+         itr.remove();
+       }
+   }
+ 
+   /**
+    * Replace an element of this list with another object (optional operation).
+    * This implementation always throws an UnsupportedOperationException.
+    *
+    * @param index the position within this list of the element to be replaced
+    * @param o the object to replace it with
+    * @return the object that was replaced
+    * @throws UnsupportedOperationException if this list does not support the
+    *         set operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    */
+   public Object set(int index, Object o)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Obtain a List view of a subsection of this list, from fromIndex
+    * (inclusive) to toIndex (exclusive). If the two indices are equal, the
+    * sublist is empty. The returned list should be modifiable if and only
+    * if this list is modifiable. Changes to the returned list should be
+    * reflected in this list. If this list is structurally modified in
+    * any way other than through the returned list, the result of any subsequent
+    * operations on the returned list is undefined.
+    * <p>
+    *
+    * This implementation returns a subclass of AbstractList. It stores, in
+    * private fields, the offset and size of the sublist, and the expected
+    * modCount of the backing list. If the backing list implements RandomAccess,
+    * the sublist will also.
+    * <p>
+    *
+    * The subclass's <code>set(int, Object)</code>, <code>get(int)</code>,
+    * <code>add(int, Object)</code>, <code>remove(int)</code>,
+    * <code>addAll(int, Collection)</code> and
+    * <code>removeRange(int, int)</code> methods all delegate to the
+    * corresponding methods on the backing abstract list, after
+    * bounds-checking the index and adjusting for the offset. The
+    * <code>addAll(Collection c)</code> method merely returns addAll(size, c).
+    * The <code>listIterator(int)</code> method returns a "wrapper object"
+    * over a list iterator on the backing list, which is created with the
+    * corresponding method on the backing list. The <code>iterator()</code>
+    * method merely returns listIterator(), and the <code>size()</code> method
+    * merely returns the subclass's size field.
+    * <p>
+    *
+    * All methods first check to see if the actual modCount of the backing
+    * list is equal to its expected value, and throw a
+    * ConcurrentModificationException if it is not. 
+    *
+    * @param fromIndex the index that the returned list should start from
+    *        (inclusive)
+    * @param toIndex the index that the returned list should go to (exclusive)
+    * @return a List backed by a subsection of this list
+    * @throws IndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; size()
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @see ConcurrentModificationException
+    * @see RandomAccess
+    */
+   public List subList(int fromIndex, int toIndex)
+   {
+     // This follows the specification of AbstractList, but is inconsistent
+     // with the one in List. Don't you love Sun's inconsistencies?
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException(fromIndex + " > " + toIndex);
+     if (fromIndex < 0 || toIndex > size())
+       throw new IndexOutOfBoundsException();
+ 
+     if (this instanceof RandomAccess)
+       return new RandomAccessSubList(this, fromIndex, toIndex);
+     return new SubList(this, fromIndex, toIndex);
+   }
+ 
+   /**
+    * This class follows the implementation requirements set forth in
+    * {@link AbstractList#subList(int, int)}. It matches Sun's implementation
+    * by using a non-public top-level class in the same package.
+    *
+    * @author Original author unknown
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class SubList extends AbstractList
+   {
+     // Package visible, for use by iterator.
+     /** The original list. */
+     final AbstractList backingList;
+     /** The index of the first element of the sublist. */
+     final int offset;
+     /** The size of the sublist. */
+     int size;
+ 
+     /**
+      * Construct the sublist.
+      *
+      * @param backing the list this comes from
+      * @param fromIndex the lower bound, inclusive
+      * @param toIndex the upper bound, exclusive
+      */
+     SubList(AbstractList backing, int fromIndex, int toIndex)
+     {
+       backingList = backing;
+       modCount = backing.modCount;
+       offset = fromIndex;
+       size = toIndex - fromIndex;
+     }
+ 
+     /**
+      * This method checks the two modCount fields to ensure that there has
+      * not been a concurrent modification, returning if all is okay.
+      *
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      */
+     // This can be inlined. Package visible, for use by iterator.
+     void checkMod()
+     {
+       if (modCount != backingList.modCount)
+         throw new ConcurrentModificationException();
+     }
+ 
+     /**
+      * This method checks that a value is between 0 and size (inclusive). If
+      * it is not, an exception is thrown.
+      *
+      * @param index the value to check
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+      */
+     // This will get inlined, since it is private.
+     private void checkBoundsInclusive(int index)
+     {
+       if (index < 0 || index > size)
+         throw new IndexOutOfBoundsException("Index: " + index + ", Size:"
+                                             + size);
+     }
+ 
+     /**
+      * This method checks that a value is between 0 (inclusive) and size
+      * (exclusive). If it is not, an exception is thrown.
+      *
+      * @param index the value to check
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+      */
+     // This will get inlined, since it is private.
+     private void checkBoundsExclusive(int index)
+     {
+       if (index < 0 || index >= size)
+         throw new IndexOutOfBoundsException("Index: " + index + ", Size:"
+                                             + size);
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to return the private field size.
+      *
+      * @return the sublist size
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      */
+     public int size()
+     {
+       checkMod();
+       return size;
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to delegate to the backing list.
+      *
+      * @param index the location to modify
+      * @param o the new value
+      * @return the old value
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      * @throws UnsupportedOperationException if the backing list does not
+      *         support the set operation
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+      * @throws ClassCastException if o cannot be added to the backing list due
+      *         to its type
+      * @throws IllegalArgumentException if o cannot be added to the backing list
+      *         for some other reason
+      */
+     public Object set(int index, Object o)
+     {
+       checkMod();
+       checkBoundsExclusive(index);
+       return backingList.set(index + offset, o);
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to delegate to the backing list.
+      *
+      * @param index the location to get from
+      * @return the object at that location
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+      */
+     public Object get(int index)
+     {
+       checkMod();
+       checkBoundsExclusive(index);
+       return backingList.get(index + offset);
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to delegate to the backing list.
+      *
+      * @param index the index to insert at
+      * @param o the object to add
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+      * @throws UnsupportedOperationException if the backing list does not
+      *         support the add operation.
+      * @throws ClassCastException if o cannot be added to the backing list due
+      *         to its type.
+      * @throws IllegalArgumentException if o cannot be added to the backing
+      *         list for some other reason.
+      */
+     public void add(int index, Object o)
+     {
+       checkMod();
+       checkBoundsInclusive(index);
+       backingList.add(index + offset, o);
+       size++;
+       modCount = backingList.modCount;
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to delegate to the backing list.
+      *
+      * @param index the index to remove
+      * @return the removed object
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+      * @throws UnsupportedOperationException if the backing list does not
+      *         support the remove operation
+      */
+     public Object remove(int index)
+     {
+       checkMod();
+       checkBoundsExclusive(index);
+       Object o = backingList.remove(index + offset);
+       size--;
+       modCount = backingList.modCount;
+       return o;
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to delegate to the backing list.
+      * This does no bounds checking, as it assumes it will only be called
+      * by trusted code like clear() which has already checked the bounds.
+      *
+      * @param fromIndex the lower bound, inclusive
+      * @param toIndex the upper bound, exclusive
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      * @throws UnsupportedOperationException if the backing list does
+      *         not support removing elements.
+      */
+     protected void removeRange(int fromIndex, int toIndex)
+     {
+       checkMod();
+ 
+       backingList.removeRange(offset + fromIndex, offset + toIndex);
+       size -= toIndex - fromIndex;
+       modCount = backingList.modCount;
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to delegate to the backing list.
+      *
+      * @param index the location to insert at
+      * @param c the collection to insert
+      * @return true if this list was modified, in other words, c is non-empty
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+      * @throws UnsupportedOperationException if this list does not support the
+      *         addAll operation
+      * @throws ClassCastException if some element of c cannot be added to this
+      *         list due to its type
+      * @throws IllegalArgumentException if some element of c cannot be added
+      *         to this list for some other reason
+      * @throws NullPointerException if the specified collection is null
+      */
+     public boolean addAll(int index, Collection c)
+     {
+       checkMod();
+       checkBoundsInclusive(index);
+       int csize = c.size();
+       boolean result = backingList.addAll(offset + index, c);
+       size += csize;
+       modCount = backingList.modCount;
+       return result;
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to return addAll(size, c).
+      *
+      * @param c the collection to insert
+      * @return true if this list was modified, in other words, c is non-empty
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      * @throws UnsupportedOperationException if this list does not support the
+      *         addAll operation
+      * @throws ClassCastException if some element of c cannot be added to this
+      *         list due to its type
+      * @throws IllegalArgumentException if some element of c cannot be added
+      *         to this list for some other reason
+      * @throws NullPointerException if the specified collection is null
+      */
+     public boolean addAll(Collection c)
+     {
+       return addAll(size, c);
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to return listIterator().
+      *
+      * @return an iterator over the sublist
+      */
+     public Iterator iterator()
+     {
+       return listIterator();
+     }
+ 
+     /**
+      * Specified by AbstractList.subList to return a wrapper around the
+      * backing list's iterator.
+      *
+      * @param index the start location of the iterator
+      * @return a list iterator over the sublist
+      * @throws ConcurrentModificationException if the backing list has been
+      *         modified externally to this sublist
+      * @throws IndexOutOfBoundsException if the value is out of range
+      */
+     public ListIterator listIterator(final int index)
+     {
+       checkMod();
+       checkBoundsInclusive(index);
+ 
+       return new ListIterator()
+       {
+         private final ListIterator i = backingList.listIterator(index + offset);
+         private int position = index;
+ 
+         /**
+          * Tests to see if there are any more objects to
+          * return.
+          *
+          * @return True if the end of the list has not yet been
+          *         reached.
+          * @throws ConcurrentModificationException if the
+          *         list has been modified elsewhere.
+          */
+         public boolean hasNext()
+         {
+           checkMod();
+           return position < size;
+         }
+ 
+         /**
+          * Tests to see if there are objects prior to the
+          * current position in the list.
+          *
+          * @return True if objects exist prior to the current
+          *         position of the iterator.
+          * @throws ConcurrentModificationException if the
+          *         list has been modified elsewhere.
+          */
+         public boolean hasPrevious()
+         {
+           checkMod();
+           return position > 0;
+         }
+ 
+         /**
+          * Retrieves the next object from the list.
+          *
+          * @return The next object.
+          * @throws NoSuchElementException if there are no
+          *         more objects to retrieve.
+          * @throws ConcurrentModificationException if the
+          *         list has been modified elsewhere.
+          */
+         public Object next()
+         {
+           if (position == size)
+             throw new NoSuchElementException();
+           position++;
+           return i.next();
+         }
+ 
+         /**
+          * Retrieves the previous object from the list.
+          *
+          * @return The next object.
+          * @throws NoSuchElementException if there are no
+          *         previous objects to retrieve.
+          * @throws ConcurrentModificationException if the
+          *         list has been modified elsewhere.
+          */
+         public Object previous()
+         {
+           if (position == 0)
+             throw new NoSuchElementException();
+           position--;
+           return i.previous();
+         }
+ 
+         /**
+          * Returns the index of the next element in the
+          * list, which will be retrieved by <code>next()</code>
+          *
+          * @return The index of the next element.
+          * @throws ConcurrentModificationException if the
+          *         list has been modified elsewhere.
+          */
+         public int nextIndex()
+         {
+           return i.nextIndex() - offset;
+         }
+ 
+         /**
+          * Returns the index of the previous element in the
+          * list, which will be retrieved by <code>previous()</code>
+          *
+          * @return The index of the previous element.
+          * @throws ConcurrentModificationException if the
+          *         list has been modified elsewhere.
+          */
+         public int previousIndex()
+         {
+           return i.previousIndex() - offset;
+         }
+ 
+         /**
+          * Removes the last object retrieved by <code>next()</code>
+          * from the list, if the list supports object removal.
+          *
+          * @throws IllegalStateException if the iterator is positioned
+          *         before the start of the list or the last object has already
+          *         been removed.
+          * @throws UnsupportedOperationException if the list does
+          *         not support removing elements.
+          */
+         public void remove()
+         {
+           i.remove();
+           size--;
+           position = nextIndex();
+           modCount = backingList.modCount;
+         }
+ 
+ 
+        /**
+         * Replaces the last object retrieved by <code>next()</code>
+         * or <code>previous</code> with o, if the list supports object
+         * replacement and an add or remove operation has not already
+         * been performed.
+         *
+         * @throws IllegalStateException if the iterator is positioned
+         *         before the start of the list or the last object has already
+         *         been removed.
+         * @throws UnsupportedOperationException if the list doesn't support
+         *         the addition or removal of elements.
+         * @throws ClassCastException if the type of o is not a valid type
+         *         for this list.
+         * @throws IllegalArgumentException if something else related to o
+         *         prevents its addition.
+         * @throws ConcurrentModificationException if the list
+         *         has been modified elsewhere.
+         */
+         public void set(Object o)
+         {
+           i.set(o);
+         }
+ 
+         /**
+          * Adds the supplied object before the element that would be returned
+          * by a call to <code>next()</code>, if the list supports addition.
+          * 
+          * @param o The object to add to the list.
+          * @throws UnsupportedOperationException if the list doesn't support
+          *         the addition of new elements.
+          * @throws ClassCastException if the type of o is not a valid type
+          *         for this list.
+          * @throws IllegalArgumentException if something else related to o
+          *         prevents its addition.
+          * @throws ConcurrentModificationException if the list
+          *         has been modified elsewhere.
+          */
+         public void add(Object o)
+         {
+           i.add(o);
+           size++;
+           position++;
+           modCount = backingList.modCount;
+         }
+ 
+         // Here is the reason why the various modCount fields are mostly
+         // ignored in this wrapper listIterator.
+         // If the backing listIterator is failfast, then the following holds:
+         //   Using any other method on this list will call a corresponding
+         //   method on the backing list *after* the backing listIterator
+         //   is created, which will in turn cause a ConcurrentModException
+         //   when this listIterator comes to use the backing one. So it is
+         //   implicitly failfast.
+         // If the backing listIterator is NOT failfast, then the whole of
+         //   this list isn't failfast, because the modCount field of the
+         //   backing list is not valid. It would still be *possible* to
+         //   make the iterator failfast wrt modifications of the sublist
+         //   only, but somewhat pointless when the list can be changed under
+         //   us.
+         // Either way, no explicit handling of modCount is needed.
+         // However modCount = backingList.modCount must be executed in add
+         // and remove, and size must also be updated in these two methods,
+         // since they do not go through the corresponding methods of the subList.
+       };
+     }
+   } // class SubList
+ 
+   /**
+    * This class is a RandomAccess version of SubList, as required by
+    * {@link AbstractList#subList(int, int)}.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class RandomAccessSubList extends SubList
+     implements RandomAccess
+   {
+     /**
+      * Construct the sublist.
+      *
+      * @param backing the list this comes from
+      * @param fromIndex the lower bound, inclusive
+      * @param toIndex the upper bound, exclusive
+      */
+     RandomAccessSubList(AbstractList backing, int fromIndex, int toIndex)
+     {
+       super(backing, fromIndex, toIndex);
+     }
+   } // class RandomAccessSubList
+ 
+ } // class AbstractList
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/AbstractMap.java gcc-4.1.0/libjava/classpath/java/util/AbstractMap.java
*** gcc-4.0.2/libjava/classpath/java/util/AbstractMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/AbstractMap.java	Sat Feb  4 20:21:48 2006
***************
*** 0 ****
--- 1,749 ----
+ /* AbstractMap.java -- Abstract implementation of most of Map
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * An abstract implementation of Map to make it easier to create your own
+  * implementations. In order to create an unmodifiable Map, subclass
+  * AbstractMap and implement the <code>entrySet</code> (usually via an
+  * AbstractSet).  To make it modifiable, also implement <code>put</code>,
+  * and have <code>entrySet().iterator()</code> support <code>remove</code>.
+  * <p>
+  *
+  * It is recommended that classes which extend this support at least the
+  * no-argument constructor, and a constructor which accepts another Map.
+  * Further methods in this class may be overridden if you have a more
+  * efficient implementation.
+  *
+  * @author Original author unknown
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Map
+  * @see Collection
+  * @see HashMap
+  * @see LinkedHashMap
+  * @see TreeMap
+  * @see WeakHashMap
+  * @see IdentityHashMap
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class AbstractMap implements Map
+ {
+   /** An "enum" of iterator types. */
+   // Package visible for use by subclasses.
+   static final int KEYS = 0,
+                    VALUES = 1,
+                    ENTRIES = 2;
+ 
+   /**
+    * The cache for {@link #keySet()}.
+    */
+   // Package visible for use by subclasses.
+   Set keys;
+ 
+   /**
+    * The cache for {@link #values()}.
+    */
+   // Package visible for use by subclasses.
+   Collection values;
+ 
+   /**
+    * The main constructor, for use by subclasses.
+    */
+   protected AbstractMap()
+   {
+   }
+ 
+   /**
+    * Returns a set view of the mappings in this Map.  Each element in the
+    * set must be an implementation of Map.Entry.  The set is backed by
+    * the map, so that changes in one show up in the other.  Modifications
+    * made while an iterator is in progress cause undefined behavior.  If
+    * the set supports removal, these methods must be valid:
+    * <code>Iterator.remove</code>, <code>Set.remove</code>,
+    * <code>removeAll</code>, <code>retainAll</code>, and <code>clear</code>.
+    * Element addition is not supported via this set.
+    *
+    * @return the entry set
+    * @see Map.Entry
+    */
+   public abstract Set entrySet();
+ 
+   /**
+    * Remove all entries from this Map (optional operation). This default
+    * implementation calls entrySet().clear(). NOTE: If the entry set does
+    * not permit clearing, then this will fail, too. Subclasses often
+    * override this for efficiency.  Your implementation of entrySet() should
+    * not call <code>AbstractMap.clear</code> unless you want an infinite loop.
+    *
+    * @throws UnsupportedOperationException if <code>entrySet().clear()</code>
+    *         does not support clearing.
+    * @see Set#clear()
+    */
+   public void clear()
+   {
+     entrySet().clear();
+   }
+ 
+   /**
+    * Create a shallow copy of this Map, no keys or values are copied. The
+    * default implementation simply calls <code>super.clone()</code>.
+    *
+    * @return the shallow clone
+    * @throws CloneNotSupportedException if a subclass is not Cloneable
+    * @see Cloneable
+    * @see Object#clone()
+    */
+   protected Object clone() throws CloneNotSupportedException
+   {
+     AbstractMap copy = (AbstractMap) super.clone();
+     // Clear out the caches; they are stale.
+     copy.keys = null;
+     copy.values = null;
+     return copy;
+   }
+ 
+   /**
+    * Returns true if this contains a mapping for the given key. This
+    * implementation does a linear search, O(n), over the
+    * <code>entrySet()</code>, returning <code>true</code> if a match
+    * is found, <code>false</code> if the iteration ends. Many subclasses
+    * can implement this more efficiently.
+    *
+    * @param key the key to search for
+    * @return true if the map contains the key
+    * @throws NullPointerException if key is <code>null</code> but the map
+    *         does not permit null keys
+    * @see #containsValue(Object)
+    */
+   public boolean containsKey(Object key)
+   {
+     Iterator entries = entrySet().iterator();
+     int pos = size();
+     while (--pos >= 0)
+       if (equals(key, ((Map.Entry) entries.next()).getKey()))
+         return true;
+     return false;
+   }
+ 
+   /**
+    * Returns true if this contains at least one mapping with the given value.
+    * This implementation does a linear search, O(n), over the
+    * <code>entrySet()</code>, returning <code>true</code> if a match
+    * is found, <code>false</code> if the iteration ends. A match is
+    * defined as a value, v, where <code>(value == null ? v == null :
+    * value.equals(v))</code>.  Subclasses are unlikely to implement
+    * this more efficiently.
+    *
+    * @param value the value to search for
+    * @return true if the map contains the value
+    * @see #containsKey(Object)
+    */
+   public boolean containsValue(Object value)
+   {
+     Iterator entries = entrySet().iterator();
+     int pos = size();
+     while (--pos >= 0)
+       if (equals(value, ((Map.Entry) entries.next()).getValue()))
+         return true;
+     return false;
+   }
+ 
+   /**
+    * Compares the specified object with this map for equality. Returns
+    * <code>true</code> if the other object is a Map with the same mappings,
+    * that is,<br>
+    * <code>o instanceof Map && entrySet().equals(((Map) o).entrySet();</code>
+    *
+    * @param o the object to be compared
+    * @return true if the object equals this map
+    * @see Set#equals(Object)
+    */
+   public boolean equals(Object o)
+   {
+     return (o == this ||
+             (o instanceof Map &&
+              entrySet().equals(((Map) o).entrySet())));
+   }
+ 
+   /**
+    * Returns the value mapped by the given key. Returns <code>null</code> if
+    * there is no mapping.  However, in Maps that accept null values, you
+    * must rely on <code>containsKey</code> to determine if a mapping exists.
+    * This iteration takes linear time, searching entrySet().iterator() of
+    * the key.  Many implementations override this method.
+    *
+    * @param key the key to look up
+    * @return the value associated with the key, or null if key not in map
+    * @throws NullPointerException if this map does not accept null keys
+    * @see #containsKey(Object)
+    */
+   public Object get(Object key)
+   {
+     Iterator entries = entrySet().iterator();
+     int pos = size();
+     while (--pos >= 0)
+       {
+         Map.Entry entry = (Map.Entry) entries.next();
+         if (equals(key, entry.getKey()))
+           return entry.getValue();
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns the hash code for this map. As defined in Map, this is the sum
+    * of all hashcodes for each Map.Entry object in entrySet, or basically
+    * entrySet().hashCode().
+    *
+    * @return the hash code
+    * @see Map.Entry#hashCode()
+    * @see Set#hashCode()
+    */
+   public int hashCode()
+   {
+     return entrySet().hashCode();
+   }
+ 
+   /**
+    * Returns true if the map contains no mappings. This is implemented by
+    * <code>size() == 0</code>.
+    *
+    * @return true if the map is empty
+    * @see #size()
+    */
+   public boolean isEmpty()
+   {
+     return size() == 0;
+   }
+ 
+   /**
+    * Returns a set view of this map's keys. The set is backed by the map,
+    * so changes in one show up in the other. Modifications while an iteration
+    * is in progress produce undefined behavior. The set supports removal
+    * if entrySet() does, but does not support element addition.
+    * <p>
+    *
+    * This implementation creates an AbstractSet, where the iterator wraps
+    * the entrySet iterator, size defers to the Map's size, and contains
+    * defers to the Map's containsKey. The set is created on first use, and
+    * returned on subsequent uses, although since no synchronization occurs,
+    * there is a slight possibility of creating two sets.
+    *
+    * @return a Set view of the keys
+    * @see Set#iterator()
+    * @see #size()
+    * @see #containsKey(Object)
+    * @see #values()
+    */
+   public Set keySet()
+   {
+     if (keys == null)
+       keys = new AbstractSet()
+       {
+ 	/**
+ 	 * Retrieves the number of keys in the backing map.
+ 	 *
+ 	 * @return The number of keys.
+ 	 */
+         public int size()
+         {
+           return AbstractMap.this.size();
+         }
+ 
+ 	/**
+ 	 * Returns true if the backing map contains the
+ 	 * supplied key.
+ 	 *
+ 	 * @param key The key to search for.
+ 	 * @return True if the key was found, false otherwise.
+ 	 */
+         public boolean contains(Object key)
+         {
+           return containsKey(key);
+         }
+ 
+ 	/**
+ 	 * Returns an iterator which iterates over the keys
+ 	 * in the backing map, using a wrapper around the
+ 	 * iterator returned by <code>entrySet()</code>.
+ 	 *
+ 	 * @return An iterator over the keys.
+ 	 */
+         public Iterator iterator()
+         {
+           return new Iterator()
+           {
+ 	    /**
+ 	     * The iterator returned by <code>entrySet()</code>.
+ 	     */
+             private final Iterator map_iterator = entrySet().iterator();
+ 
+ 	    /**
+ 	     * Returns true if a call to <code>next()</code> will
+ 	     * return another key.
+ 	     *
+ 	     * @return True if the iterator has not yet reached
+ 	     *         the last key.
+ 	     */
+             public boolean hasNext()
+             {
+               return map_iterator.hasNext();
+             }
+ 
+ 	    /**
+ 	     * Returns the key from the next entry retrieved
+ 	     * by the underlying <code>entrySet()</code> iterator.
+ 	     *
+ 	     * @return The next key.
+ 	     */
+             public Object next()
+             {
+               return ((Map.Entry) map_iterator.next()).getKey();
+             }
+ 
+ 	    /**
+ 	     * Removes the map entry which has a key equal
+ 	     * to that returned by the last call to
+ 	     * <code>next()</code>.
+ 	     *
+ 	     * @throws UnsupportedOperationException if the
+ 	     *         map doesn't support removal.
+ 	     */
+             public void remove()
+             {
+               map_iterator.remove();
+             }
+           };
+         }
+       };
+     return keys;
+   }
+ 
+   /**
+    * Associates the given key to the given value (optional operation). If the
+    * map already contains the key, its value is replaced. This implementation
+    * simply throws an UnsupportedOperationException. Be aware that in a map
+    * that permits <code>null</code> values, a null return does not always
+    * imply that the mapping was created.
+    *
+    * @param key the key to map
+    * @param value the value to be mapped
+    * @return the previous value of the key, or null if there was no mapping
+    * @throws UnsupportedOperationException if the operation is not supported
+    * @throws ClassCastException if the key or value is of the wrong type
+    * @throws IllegalArgumentException if something about this key or value
+    *         prevents it from existing in this map
+    * @throws NullPointerException if the map forbids null keys or values
+    * @see #containsKey(Object)
+    */
+   public Object put(Object key, Object value)
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Copies all entries of the given map to this one (optional operation). If
+    * the map already contains a key, its value is replaced. This implementation
+    * simply iterates over the map's entrySet(), calling <code>put</code>,
+    * so it is not supported if puts are not.
+    *
+    * @param m the mapping to load into this map
+    * @throws UnsupportedOperationException if the operation is not supported
+    *         by this map.
+    * @throws ClassCastException if a key or value is of the wrong type for
+    *         adding to this map.
+    * @throws IllegalArgumentException if something about a key or value
+    *         prevents it from existing in this map.
+    * @throws NullPointerException if the map forbids null keys or values.
+    * @throws NullPointerException if <code>m</code> is null.
+    * @see #put(Object, Object)
+    */
+   public void putAll(Map m)
+   {
+     Iterator entries = m.entrySet().iterator();
+     int pos = m.size();
+     while (--pos >= 0)
+       {
+         Map.Entry entry = (Map.Entry) entries.next();
+         put(entry.getKey(), entry.getValue());
+       }
+   }
+ 
+   /**
+    * Removes the mapping for this key if present (optional operation). This
+    * implementation iterates over the entrySet searching for a matching
+    * key, at which point it calls the iterator's <code>remove</code> method.
+    * It returns the result of <code>getValue()</code> on the entry, if found,
+    * or null if no entry is found. Note that maps which permit null values
+    * may also return null if the key was removed.  If the entrySet does not
+    * support removal, this will also fail. This is O(n), so many
+    * implementations override it for efficiency.
+    *
+    * @param key the key to remove
+    * @return the value the key mapped to, or null if not present.
+    *         Null may also be returned if null values are allowed
+    *         in the map and the value of this mapping is null.
+    * @throws UnsupportedOperationException if deletion is unsupported
+    * @see Iterator#remove()
+    */
+   public Object remove(Object key)
+   {
+     Iterator entries = entrySet().iterator();
+     int pos = size();
+     while (--pos >= 0)
+       {
+         Map.Entry entry = (Map.Entry) entries.next();
+         if (equals(key, entry.getKey()))
+           {
+             // Must get the value before we remove it from iterator.
+             Object r = entry.getValue();
+             entries.remove();
+             return r;
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns the number of key-value mappings in the map. If there are more
+    * than Integer.MAX_VALUE mappings, return Integer.MAX_VALUE. This is
+    * implemented as <code>entrySet().size()</code>.
+    *
+    * @return the number of mappings
+    * @see Set#size()
+    */
+   public int size()
+   {
+     return entrySet().size();
+   }
+ 
+   /**
+    * Returns a String representation of this map. This is a listing of the
+    * map entries (which are specified in Map.Entry as being
+    * <code>getKey() + "=" + getValue()</code>), separated by a comma and
+    * space (", "), and surrounded by braces ('{' and '}'). This implementation
+    * uses a StringBuffer and iterates over the entrySet to build the String.
+    * Note that this can fail with an exception if underlying keys or
+    * values complete abruptly in toString().
+    *
+    * @return a String representation
+    * @see Map.Entry#toString()
+    */
+   public String toString()
+   {
+     Iterator entries = entrySet().iterator();
+     StringBuffer r = new StringBuffer("{");
+     for (int pos = size(); pos > 0; pos--)
+       {
+         Map.Entry entry = (Map.Entry) entries.next();
+         r.append(entry.getKey());
+         r.append('=');
+         r.append(entry.getValue());
+         if (pos > 1)
+           r.append(", ");
+       }
+     r.append("}");
+     return r.toString();
+   }
+ 
+   /**
+    * Returns a collection or bag view of this map's values. The collection
+    * is backed by the map, so changes in one show up in the other.
+    * Modifications while an iteration is in progress produce undefined
+    * behavior. The collection supports removal if entrySet() does, but
+    * does not support element addition.
+    * <p>
+    *
+    * This implementation creates an AbstractCollection, where the iterator
+    * wraps the entrySet iterator, size defers to the Map's size, and contains
+    * defers to the Map's containsValue. The collection is created on first
+    * use, and returned on subsequent uses, although since no synchronization
+    * occurs, there is a slight possibility of creating two collections.
+    *
+    * @return a Collection view of the values
+    * @see Collection#iterator()
+    * @see #size()
+    * @see #containsValue(Object)
+    * @see #keySet()
+    */
+   public Collection values()
+   {
+     if (values == null)
+       values = new AbstractCollection()
+       {
+ 	/**
+ 	 * Returns the number of values stored in
+ 	 * the backing map.
+ 	 *
+ 	 * @return The number of values.
+ 	 */
+         public int size()
+         {
+           return AbstractMap.this.size();
+         }
+ 
+ 	/**
+ 	 * Returns true if the backing map contains
+ 	 * the supplied value.
+ 	 *
+ 	 * @param value The value to search for.
+ 	 * @return True if the value was found, false otherwise.
+ 	 */
+         public boolean contains(Object value)
+         {
+           return containsValue(value);
+         }
+ 
+ 	/**
+ 	 * Returns an iterator which iterates over the
+ 	 * values in the backing map, by using a wrapper
+ 	 * around the iterator returned by <code>entrySet()</code>.
+ 	 *
+ 	 * @return An iterator over the values.
+ 	 */
+         public Iterator iterator()
+         {
+           return new Iterator()
+           {
+ 	    /**
+ 	     * The iterator returned by <code>entrySet()</code>.
+ 	     */
+             private final Iterator map_iterator = entrySet().iterator();
+ 
+ 	    /**
+ 	     * Returns true if a call to <code>next()</call> will
+ 	     * return another value.
+ 	     *
+ 	     * @return True if the iterator has not yet reached
+ 	     * the last value.
+ 	     */
+             public boolean hasNext()
+             {
+               return map_iterator.hasNext();
+             }
+ 
+ 	    /**
+ 	     * Returns the value from the next entry retrieved
+ 	     * by the underlying <code>entrySet()</code> iterator.
+ 	     *
+ 	     * @return The next value.
+ 	     */
+             public Object next()
+             {
+               return ((Map.Entry) map_iterator.next()).getValue();
+             }
+ 
+ 	    /**
+ 	     * Removes the map entry which has a key equal
+ 	     * to that returned by the last call to
+ 	     * <code>next()</code>.
+ 	     *
+ 	     * @throws UnsupportedOperationException if the
+ 	     *         map doesn't support removal.
+ 	     */
+             public void remove()
+             {
+               map_iterator.remove();
+             }
+           };
+         }
+       };
+     return values;
+   }
+ 
+   /**
+    * Compare two objects according to Collection semantics.
+    *
+    * @param o1 the first object
+    * @param o2 the second object
+    * @return o1 == o2 || (o1 != null && o1.equals(o2))
+    */
+   // Package visible for use throughout java.util.
+   // It may be inlined since it is final.
+   static final boolean equals(Object o1, Object o2)
+   {
+     return o1 == o2 || (o1 != null && o1.equals(o2));
+   }
+ 
+   /**
+    * Hash an object according to Collection semantics.
+    *
+    * @param o the object to hash
+    * @return o1 == null ? 0 : o1.hashCode()
+    */
+   // Package visible for use throughout java.util.
+   // It may be inlined since it is final.
+   static final int hashCode(Object o)
+   {
+     return o == null ? 0 : o.hashCode();
+   }
+ 
+   /**
+    * A class which implements Map.Entry. It is shared by HashMap, TreeMap,
+    * Hashtable, and Collections. It is not specified by the JDK, but makes
+    * life much easier.
+    *
+    * @author Jon Zeppieri
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   // XXX - FIXME Use fully qualified implements as gcj 3.1 workaround.
+   //       Bug still exists in 3.4.1
+   static class BasicMapEntry implements Map.Entry
+   {
+     /**
+      * The key. Package visible for direct manipulation.
+      */
+     Object key;
+ 
+     /**
+      * The value. Package visible for direct manipulation.
+      */
+     Object value;
+ 
+     /**
+      * Basic constructor initializes the fields.
+      * @param newKey the key
+      * @param newValue the value
+      */
+     BasicMapEntry(Object newKey, Object newValue)
+     {
+       key = newKey;
+       value = newValue;
+     }
+ 
+     /**
+      * Compares the specified object with this entry. Returns true only if
+      * the object is a mapping of identical key and value. In other words,
+      * this must be:<br>
+      * <pre>(o instanceof Map.Entry)
+      *       && (getKey() == null ? ((HashMap) o).getKey() == null
+      *           : getKey().equals(((HashMap) o).getKey()))
+      *       && (getValue() == null ? ((HashMap) o).getValue() == null
+      *           : getValue().equals(((HashMap) o).getValue()))</pre>
+      *
+      * @param o the object to compare
+      * @return <code>true</code> if it is equal
+      */
+     public final boolean equals(Object o)
+     {
+       if (! (o instanceof Map.Entry))
+         return false;
+       // Optimize for our own entries.
+       if (o instanceof BasicMapEntry)
+         {
+           BasicMapEntry e = (BasicMapEntry) o;
+           return (AbstractMap.equals(key, e.key)
+                   && AbstractMap.equals(value, e.value));
+         }
+       Map.Entry e = (Map.Entry) o;
+       return (AbstractMap.equals(key, e.getKey())
+               && AbstractMap.equals(value, e.getValue()));
+     }
+ 
+     /**
+      * Get the key corresponding to this entry.
+      *
+      * @return the key
+      */
+     public final Object getKey()
+     {
+       return key;
+     }
+ 
+     /**
+      * Get the value corresponding to this entry. If you already called
+      * Iterator.remove(), the behavior undefined, but in this case it works.
+      *
+      * @return the value
+      */
+     public final Object getValue()
+     {
+       return value;
+     }
+ 
+     /**
+      * Returns the hash code of the entry.  This is defined as the exclusive-or
+      * of the hashcodes of the key and value (using 0 for null). In other
+      * words, this must be:<br>
+      * <pre>(getKey() == null ? 0 : getKey().hashCode())
+      *       ^ (getValue() == null ? 0 : getValue().hashCode())</pre>
+      *
+      * @return the hash code
+      */
+     public final int hashCode()
+     {
+       return (AbstractMap.hashCode(key) ^ AbstractMap.hashCode(value));
+     }
+ 
+     /**
+      * Replaces the value with the specified object. This writes through
+      * to the map, unless you have already called Iterator.remove(). It
+      * may be overridden to restrict a null value.
+      *
+      * @param newVal the new value to store
+      * @return the old value
+      * @throws NullPointerException if the map forbids null values.
+      * @throws UnsupportedOperationException if the map doesn't support
+      *          <code>put()</code>.
+      * @throws ClassCastException if the value is of a type unsupported
+      *         by the map.
+      * @throws IllegalArgumentException if something else about this
+      *         value prevents it being stored in the map.
+      */
+     public Object setValue(Object newVal)
+     {
+       Object r = value;
+       value = newVal;
+       return r;
+     }
+ 
+     /**
+      * This provides a string representation of the entry. It is of the form
+      * "key=value", where string concatenation is used on key and value.
+      *
+      * @return the string representation
+      */
+     public final String toString()
+     {
+       return key + "=" + value;
+     }
+   } // class BasicMapEntry
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/AbstractSequentialList.java gcc-4.1.0/libjava/classpath/java/util/AbstractSequentialList.java
*** gcc-4.0.2/libjava/classpath/java/util/AbstractSequentialList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/AbstractSequentialList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,235 ----
+ /* AbstractSequentialList.java -- List implementation for sequential access
+    Copyright (C) 1998, 1999, 2000, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * Abstract superclass to make it easier to implement the List interface when
+  * backed by a sequential-access store, such as a linked list. For random
+  * access data, use AbstractList. This class implements the random access
+  * methods (<code>get</code>, <code>set</code>, <code>add</code>, and
+  * <code>remove</code>) atop the list iterator, opposite of AbstractList's
+  * approach of implementing the iterator atop random access.
+  * <p>
+  *
+  * To implement a list, you need an implementation for <code>size()</code>
+  * and <code>listIterator</code>.  With just <code>hasNext</code>,
+  * <code>next</code>, <code>hasPrevious</code>, <code>previous</code>,
+  * <code>nextIndex</code>, and <code>previousIndex</code>, you have an
+  * unmodifiable list. For a modifiable one, add <code>set</code>, and for
+  * a variable-size list, add <code>add</code> and <code>remove</code>.
+  * <p>
+  *
+  * The programmer should provide a no-argument constructor, and one that
+  * accepts another Collection, as recommended by the Collection interface.
+  * Unfortunately, there is no way to enforce this in Java.
+  *
+  * @author Original author unknown
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see List
+  * @see AbstractList
+  * @see AbstractCollection
+  * @see ListIterator
+  * @see LinkedList
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class AbstractSequentialList extends AbstractList
+ {
+   /**
+    * The main constructor, for use by subclasses.
+    */
+   protected AbstractSequentialList()
+   {
+   }
+ 
+   /**
+    * Returns a ListIterator over the list, starting from position index.
+    * Subclasses must provide an implementation of this method.
+    *
+    * @param index the starting position of the list
+    * @return the list iterator
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    */
+   public abstract ListIterator listIterator(int index);
+ 
+   /**
+    * Insert an element into the list at a given position (optional operation).
+    * This shifts all existing elements from that position to the end one
+    * index to the right. This version of add has no return, since it is
+    * assumed to always succeed if there is no exception. This iteration
+    * uses listIterator(index).add(o).
+    *
+    * @param index the location to insert the item
+    * @param o the object to insert
+    * @throws UnsupportedOperationException if this list does not support the
+    *         add operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason.
+    * @throws NullPointerException if o is null and the list does not permit
+    *         the addition of null values.
+    */
+   public void add(int index, Object o)
+   {
+     listIterator(index).add(o);
+   }
+ 
+   /**
+    * Insert the contents of a collection into the list at a given position
+    * (optional operation). Shift all elements at that position to the right
+    * by the number of elements inserted. This operation is undefined if
+    * this list is modified during the operation (for example, if you try
+    * to insert a list into itself).
+    * <p>
+    *
+    * This implementation grabs listIterator(index), then proceeds to use add
+    * for each element returned by c's iterator. Sun's online specs are wrong,
+    * claiming that this also calls next(): listIterator.add() correctly
+    * skips the added element.
+    *
+    * @param index the location to insert the collection
+    * @param c the collection to insert
+    * @return true if the list was modified by this action, that is, if c is
+    *         non-empty
+    * @throws UnsupportedOperationException if this list does not support the
+    *         addAll operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    * @throws ClassCastException if some element of c cannot be added to this
+    *         list due to its type
+    * @throws IllegalArgumentException if some element of c cannot be added
+    *         to this list for some other reason
+    * @throws NullPointerException if the specified collection is null
+    * @throws NullPointerException if an object, o, in c is null and the list
+    *         does not permit the addition of null values.
+    * @see #add(int, Object)
+    */
+   public boolean addAll(int index, Collection c)
+   {
+     Iterator ci = c.iterator();
+     int size = c.size();
+     ListIterator i = listIterator(index);
+     for (int pos = size; pos > 0; pos--)
+       i.add(ci.next());
+     return size > 0;
+   }
+ 
+   /**
+    * Get the element at a given index in this list. This implementation
+    * returns listIterator(index).next().
+    *
+    * @param index the index of the element to be returned
+    * @return the element at index index in this list
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    */
+   public Object get(int index)
+   {
+     // This is a legal listIterator position, but an illegal get.
+     if (index == size())
+       throw new IndexOutOfBoundsException("Index: " + index + ", Size:"
+                                           + size());
+     return listIterator(index).next();
+   }
+ 
+   /**
+    * Obtain an Iterator over this list, whose sequence is the list order. This
+    * implementation returns listIterator().
+    *
+    * @return an Iterator over the elements of this list, in order
+    */
+   public Iterator iterator()
+   {
+     return listIterator();
+   }
+ 
+   /**
+    * Remove the element at a given position in this list (optional operation).
+    * Shifts all remaining elements to the left to fill the gap. This
+    * implementation uses listIterator(index) and ListIterator.remove().
+    *
+    * @param index the position within the list of the object to remove
+    * @return the object that was removed
+    * @throws UnsupportedOperationException if this list does not support the
+    *         remove operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    */
+   public Object remove(int index)
+   {
+     // This is a legal listIterator position, but an illegal remove.
+     if (index == size())
+       throw new IndexOutOfBoundsException("Index: " + index + ", Size:"
+                                           + size());
+     ListIterator i = listIterator(index);
+     Object removed = i.next();
+     i.remove();
+     return removed;
+   }
+ 
+   /**
+    * Replace an element of this list with another object (optional operation).
+    * This implementation uses listIterator(index) and ListIterator.set(o).
+    *
+    * @param index the position within this list of the element to be replaced
+    * @param o the object to replace it with
+    * @return the object that was replaced
+    * @throws UnsupportedOperationException if this list does not support the
+    *         set operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    * @throws NullPointerException if o is null and the list does not allow
+    *         a value to be set to null.
+    */
+   public Object set(int index, Object o)
+   {
+     // This is a legal listIterator position, but an illegal set.
+     if (index == size())
+       throw new IndexOutOfBoundsException("Index: " + index + ", Size:"
+                                           + size());
+     ListIterator i = listIterator(index);
+     Object old = i.next();
+     i.set(o);
+     return old;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/AbstractSet.java gcc-4.1.0/libjava/classpath/java/util/AbstractSet.java
*** gcc-4.0.2/libjava/classpath/java/util/AbstractSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/AbstractSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,139 ----
+ /* AbstractSet.java -- Abstract implementation of most of Set
+    Copyright (C) 1998, 2000, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * An abstract implementation of Set to make it easier to create your own
+  * implementations. In order to create a Set, subclass AbstractSet and
+  * implement the same methods that are required for AbstractCollection
+  * (although these methods must of course meet the requirements that Set puts
+  * on them - specifically, no element may be in the set more than once). This
+  * class simply provides implementations of equals() and hashCode() to fulfil
+  * the requirements placed on them by the Set interface.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see AbstractCollection
+  * @see Set
+  * @see HashSet
+  * @see TreeSet
+  * @see LinkedHashSet
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class AbstractSet extends AbstractCollection implements Set
+ {
+   /**
+    * The main constructor, for use by subclasses.
+    */
+   protected AbstractSet()
+   {
+   }
+ 
+   /**
+    * Tests whether the given object is equal to this Set. This implementation
+    * first checks whether this set <em>is</em> the given object, and returns
+    * true if so. Otherwise, if o is a Set and is the same size as this one, it
+    * returns the result of calling containsAll on the given Set. Otherwise, it
+    * returns false.
+    *
+    * @param o the Object to be tested for equality with this Set
+    * @return true if the given object is equal to this Set
+    */
+   public boolean equals(Object o)
+   {
+     return (o == this ||
+             (o instanceof Set && ((Set) o).size() == size()
+              && containsAll((Collection) o)));
+   }
+ 
+   /**
+    * Returns a hash code for this Set. The hash code of a Set is the sum of the
+    * hash codes of all its elements, except that the hash code of null is
+    * defined to be zero. This implementation obtains an Iterator over the Set,
+    * and sums the results.
+    *
+    * @return a hash code for this Set
+    */
+   public int hashCode()
+   {
+     Iterator itr = iterator();
+     int hash = 0;
+     int pos = size();
+     while (--pos >= 0)
+       hash += hashCode(itr.next());
+     return hash;
+   }
+ 
+   /**
+    * Removes from this set all elements in the given collection (optional
+    * operation). This implementation uses <code>size()</code> to determine
+    * the smaller collection.  Then, if this set is smaller, it iterates
+    * over the set, calling Iterator.remove if the collection contains
+    * the element.  If this set is larger, it iterates over the collection,
+    * calling Set.remove for all elements in the collection. Note that
+    * this operation will fail if a remove methods is not supported.
+    *
+    * @param c the collection of elements to remove
+    * @return true if the set was modified as a result
+    * @throws UnsupportedOperationException if remove is not supported
+    * @throws NullPointerException if the collection is null
+    * @see AbstractCollection#remove(Object)
+    * @see Collection#contains(Object)
+    * @see Iterator#remove()
+    */
+   public boolean removeAll(Collection c)
+   {
+     int oldsize = size();
+     int count = c.size();
+     Iterator i;
+     if (oldsize < count)
+       {
+ 	for (i = iterator(), count = oldsize; count > 0; count--)
+           if (c.contains(i.next()))
+             i.remove();
+       }
+     else
+       for (i = c.iterator(); count > 0; count--)
+         remove(i.next());
+     return oldsize != size();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/ArrayList.java gcc-4.1.0/libjava/classpath/java/util/ArrayList.java
*** gcc-4.0.2/libjava/classpath/java/util/ArrayList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/ArrayList.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,591 ----
+ /* ArrayList.java -- JDK1.2's answer to Vector; this is an array-backed
+    implementation of the List interface
+    Copyright (C) 1998, 1999, 2000, 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.lang.reflect.Array;
+ 
+ /**
+  * An array-backed implementation of the List interface.  This implements
+  * all optional list operations, and permits null elements, so that it is
+  * better than Vector, which it replaces. Random access is roughly constant
+  * time, and iteration is roughly linear time, so it is nice and fast, with
+  * less overhead than a LinkedList.
+  * <p>
+  *
+  * Each list has a capacity, and as the array reaches that capacity it
+  * is automatically transferred to a larger array. You also have access to
+  * ensureCapacity and trimToSize to control the backing array's size, avoiding
+  * reallocation or wasted memory.
+  * <p>
+  *
+  * ArrayList is not synchronized, so if you need multi-threaded access,
+  * consider using:<br>
+  * <code>List l = Collections.synchronizedList(new ArrayList(...));</code>
+  * <p>
+  *
+  * The iterators are <i>fail-fast</i>, meaning that any structural
+  * modification, except for <code>remove()</code> called on the iterator
+  * itself, cause the iterator to throw a
+  * {@link ConcurrentModificationException} rather than exhibit
+  * non-deterministic behavior.
+  *
+  * @author Jon A. Zeppieri
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see List
+  * @see LinkedList
+  * @see Vector
+  * @see Collections#synchronizedList(List)
+  * @see AbstractList
+  * @status updated to 1.4
+  */
+ public class ArrayList extends AbstractList
+   implements List, RandomAccess, Cloneable, Serializable
+ {
+   /**
+    * Compatible with JDK 1.2
+    */
+   private static final long serialVersionUID = 8683452581122892189L;
+ 
+   /**
+    * The default capacity for new ArrayLists.
+    */
+   private static final int DEFAULT_CAPACITY = 16;
+ 
+   /**
+    * The number of elements in this list.
+    * @serial the list size
+    */
+   private int size;
+ 
+   /**
+    * Where the data is stored.
+    */
+   private transient Object[] data;
+ 
+   /**
+    * Construct a new ArrayList with the supplied initial capacity.
+    *
+    * @param capacity initial capacity of this ArrayList
+    * @throws IllegalArgumentException if capacity is negative
+    */
+   public ArrayList(int capacity)
+   {
+     // Must explicitly check, to get correct exception.
+     if (capacity < 0)
+       throw new IllegalArgumentException();
+     data = new Object[capacity];
+   }
+ 
+   /**
+    * Construct a new ArrayList with the default capacity (16).
+    */
+   public ArrayList()
+   {
+     this(DEFAULT_CAPACITY);
+   }
+ 
+   /**
+    * Construct a new ArrayList, and initialize it with the elements
+    * in the supplied Collection. The initial capacity is 110% of the
+    * Collection's size.
+    *
+    * @param c the collection whose elements will initialize this list
+    * @throws NullPointerException if c is null
+    */
+   public ArrayList(Collection c)
+   {
+     this((int) (c.size() * 1.1f));
+     addAll(c);
+   }
+ 
+   /**
+    * Trims the capacity of this List to be equal to its size;
+    * a memory saver.
+    */
+   public void trimToSize()
+   {
+     // Not a structural change from the perspective of iterators on this list,
+     // so don't update modCount.
+     if (size != data.length)
+       {
+         Object[] newData = new Object[size];
+         System.arraycopy(data, 0, newData, 0, size);
+         data = newData;
+       }
+   }
+ 
+   /**
+    * Guarantees that this list will have at least enough capacity to
+    * hold minCapacity elements. This implementation will grow the list to
+    * max(current * 2, minCapacity) if (minCapacity &gt; current). The JCL says
+    * explictly that "this method increases its capacity to minCap", while
+    * the JDK 1.3 online docs specify that the list will grow to at least the
+    * size specified.
+    *
+    * @param minCapacity the minimum guaranteed capacity
+    */
+   public void ensureCapacity(int minCapacity)
+   {
+     int current = data.length;
+ 
+     if (minCapacity > current)
+       {
+         Object[] newData = new Object[Math.max(current * 2, minCapacity)];
+         System.arraycopy(data, 0, newData, 0, size);
+         data = newData;
+       }
+   }
+ 
+   /**
+    * Returns the number of elements in this list.
+    *
+    * @return the list size
+    */
+   public int size()
+   {
+     return size;
+   }
+ 
+   /**
+    * Checks if the list is empty.
+    *
+    * @return true if there are no elements
+    */
+   public boolean isEmpty()
+   {
+     return size == 0;
+   }
+ 
+   /**
+    * Returns true iff element is in this ArrayList.
+    *
+    * @param e the element whose inclusion in the List is being tested
+    * @return true if the list contains e
+    */
+   public boolean contains(Object e)
+   {
+     return indexOf(e) != -1;
+   }
+ 
+   /**
+    * Returns the lowest index at which element appears in this List, or
+    * -1 if it does not appear.
+    *
+    * @param e the element whose inclusion in the List is being tested
+    * @return the index where e was found
+    */
+   public int indexOf(Object e)
+   {
+     for (int i = 0; i < size; i++)
+       if (equals(e, data[i]))
+         return i;
+     return -1;
+   }
+ 
+   /**
+    * Returns the highest index at which element appears in this List, or
+    * -1 if it does not appear.
+    *
+    * @param e the element whose inclusion in the List is being tested
+    * @return the index where e was found
+    */
+   public int lastIndexOf(Object e)
+   {
+     for (int i = size - 1; i >= 0; i--)
+       if (equals(e, data[i]))
+         return i;
+     return -1;
+   }
+ 
+   /**
+    * Creates a shallow copy of this ArrayList (elements are not cloned).
+    *
+    * @return the cloned object
+    */
+   public Object clone()
+   {
+     ArrayList clone = null;
+     try
+       {
+         clone = (ArrayList) super.clone();
+         clone.data = (Object[]) data.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         // Impossible to get here.
+       }
+     return clone;
+   }
+ 
+   /**
+    * Returns an Object array containing all of the elements in this ArrayList.
+    * The array is independent of this list.
+    *
+    * @return an array representation of this list
+    */
+   public Object[] toArray()
+   {
+     Object[] array = new Object[size];
+     System.arraycopy(data, 0, array, 0, size);
+     return array;
+   }
+ 
+   /**
+    * Returns an Array whose component type is the runtime component type of
+    * the passed-in Array.  The returned Array is populated with all of the
+    * elements in this ArrayList.  If the passed-in Array is not large enough
+    * to store all of the elements in this List, a new Array will be created
+    * and returned; if the passed-in Array is <i>larger</i> than the size
+    * of this List, then size() index will be set to null.
+    *
+    * @param a the passed-in Array
+    * @return an array representation of this list
+    * @throws ArrayStoreException if the runtime type of a does not allow
+    *         an element in this list
+    * @throws NullPointerException if a is null
+    */
+   public Object[] toArray(Object[] a)
+   {
+     if (a.length < size)
+       a = (Object[]) Array.newInstance(a.getClass().getComponentType(),
+                                        size);
+     else if (a.length > size)
+       a[size] = null;
+     System.arraycopy(data, 0, a, 0, size);
+     return a;
+   }
+ 
+   /**
+    * Retrieves the element at the user-supplied index.
+    *
+    * @param index the index of the element we are fetching
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    */
+   public Object get(int index)
+   {
+     checkBoundExclusive(index);
+     return data[index];
+   }
+ 
+   /**
+    * Sets the element at the specified index.  The new element, e,
+    * can be an object of any type or null.
+    *
+    * @param index the index at which the element is being set
+    * @param e the element to be set
+    * @return the element previously at the specified index
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= 0
+    */
+   public Object set(int index, Object e)
+   {
+     checkBoundExclusive(index);
+     Object result = data[index];
+     data[index] = e;
+     return result;
+   }
+ 
+   /**
+    * Appends the supplied element to the end of this list.
+    * The element, e, can be an object of any type or null.
+    *
+    * @param e the element to be appended to this list
+    * @return true, the add will always succeed
+    */
+   public boolean add(Object e)
+   {
+     modCount++;
+     if (size == data.length)
+       ensureCapacity(size + 1);
+     data[size++] = e;
+     return true;
+   }
+ 
+   /**
+    * Adds the supplied element at the specified index, shifting all
+    * elements currently at that index or higher one to the right.
+    * The element, e, can be an object of any type or null.
+    *
+    * @param index the index at which the element is being added
+    * @param e the item being added
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    */
+   public void add(int index, Object e)
+   {
+     checkBoundInclusive(index);
+     modCount++;
+     if (size == data.length)
+       ensureCapacity(size + 1);
+     if (index != size)
+       System.arraycopy(data, index, data, index + 1, size - index);
+     data[index] = e;
+     size++;
+   }
+ 
+   /**
+    * Removes the element at the user-supplied index.
+    *
+    * @param index the index of the element to be removed
+    * @return the removed Object
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    */
+   public Object remove(int index)
+   {
+     checkBoundExclusive(index);
+     Object r = data[index];
+     modCount++;
+     if (index != --size)
+       System.arraycopy(data, index + 1, data, index, size - index);
+     // Aid for garbage collection by releasing this pointer.
+     data[size] = null;
+     return r;
+   }
+ 
+   /**
+    * Removes all elements from this List
+    */
+   public void clear()
+   {
+     if (size > 0)
+       {
+         modCount++;
+         // Allow for garbage collection.
+         Arrays.fill(data, 0, size, null);
+         size = 0;
+       }
+   }
+ 
+   /**
+    * Add each element in the supplied Collection to this List. It is undefined
+    * what happens if you modify the list while this is taking place; for
+    * example, if the collection contains this list.  c can contain objects
+    * of any type, as well as null values.
+    *
+    * @param c a Collection containing elements to be added to this List
+    * @return true if the list was modified, in other words c is not empty
+    * @throws NullPointerException if c is null
+    */
+   public boolean addAll(Collection c)
+   {
+     return addAll(size, c);
+   }
+ 
+   /**
+    * Add all elements in the supplied collection, inserting them beginning
+    * at the specified index.  c can contain objects of any type, as well
+    * as null values.
+    *
+    * @param index the index at which the elements will be inserted
+    * @param c the Collection containing the elements to be inserted
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; 0
+    * @throws NullPointerException if c is null
+    */
+   public boolean addAll(int index, Collection c)
+   {
+     checkBoundInclusive(index);
+     Iterator itr = c.iterator();
+     int csize = c.size();
+ 
+     modCount++;
+     if (csize + size > data.length)
+       ensureCapacity(size + csize);
+     int end = index + csize;
+     if (size > 0 && index != size)
+       System.arraycopy(data, index, data, end, size - index);
+     size += csize;
+     for ( ; index < end; index++)
+       data[index] = itr.next();
+     return csize > 0;
+   }
+ 
+   /**
+    * Removes all elements in the half-open interval [fromIndex, toIndex).
+    * Does nothing when toIndex is equal to fromIndex.
+    *
+    * @param fromIndex the first index which will be removed
+    * @param toIndex one greater than the last index which will be removed
+    * @throws IndexOutOfBoundsException if fromIndex &gt; toIndex
+    */
+   protected void removeRange(int fromIndex, int toIndex)
+   {
+     int change = toIndex - fromIndex;
+     if (change > 0)
+       {
+         modCount++;
+         System.arraycopy(data, toIndex, data, fromIndex, size - toIndex);
+         size -= change;
+       }
+     else if (change < 0)
+       throw new IndexOutOfBoundsException();
+   }
+ 
+   /**
+    * Checks that the index is in the range of possible elements (inclusive).
+    *
+    * @param index the index to check
+    * @throws IndexOutOfBoundsException if index &gt; size
+    */
+   private void checkBoundInclusive(int index)
+   {
+     // Implementation note: we do not check for negative ranges here, since
+     // use of a negative index will cause an ArrayIndexOutOfBoundsException,
+     // a subclass of the required exception, with no effort on our part.
+     if (index > size)
+       throw new IndexOutOfBoundsException("Index: " + index + ", Size: "
+                                           + size);
+   }
+ 
+   /**
+    * Checks that the index is in the range of existing elements (exclusive).
+    *
+    * @param index the index to check
+    * @throws IndexOutOfBoundsException if index &gt;= size
+    */
+   private void checkBoundExclusive(int index)
+   {
+     // Implementation note: we do not check for negative ranges here, since
+     // use of a negative index will cause an ArrayIndexOutOfBoundsException,
+     // a subclass of the required exception, with no effort on our part.
+     if (index >= size)
+       throw new IndexOutOfBoundsException("Index: " + index + ", Size: "
+                                           + size);
+   }
+ 
+   /**
+    * Remove from this list all elements contained in the given collection.
+    * This is not public, due to Sun's API, but this performs in linear
+    * time while the default behavior of AbstractList would be quadratic.
+    *
+    * @param c the collection to filter out
+    * @return true if this list changed
+    * @throws NullPointerException if c is null
+    */
+   boolean removeAllInternal(Collection c)
+   {
+     int i;
+     int j;
+     for (i = 0; i < size; i++)
+       if (c.contains(data[i]))
+         break;
+     if (i == size)
+       return false;
+ 
+     modCount++;
+     for (j = i++; i < size; i++)
+       if (! c.contains(data[i]))
+         data[j++] = data[i];
+     size -= i - j;
+     return true;
+   }
+ 
+   /**
+    * Retain in this vector only the elements contained in the given collection.
+    * This is not public, due to Sun's API, but this performs in linear
+    * time while the default behavior of AbstractList would be quadratic.
+    *
+    * @param c the collection to filter by
+    * @return true if this vector changed
+    * @throws NullPointerException if c is null
+    * @since 1.2
+    */
+   boolean retainAllInternal(Collection c)
+   {
+     int i;
+     int j;
+     for (i = 0; i < size; i++)
+       if (! c.contains(data[i]))
+         break;
+     if (i == size)
+       return false;
+ 
+     modCount++;
+     for (j = i++; i < size; i++)
+       if (c.contains(data[i]))
+         data[j++] = data[i];
+     size -= i - j;
+     return true;
+   }
+ 
+   /**
+    * Serializes this object to the given stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    * @serialData the size field (int), the length of the backing array
+    *             (int), followed by its elements (Objects) in proper order.
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     // The 'size' field.
+     s.defaultWriteObject();
+     // We serialize unused list entries to preserve capacity.
+     int len = data.length;
+     s.writeInt(len);
+     // it would be more efficient to just write "size" items,
+     // this need readObject read "size" items too.
+     for (int i = 0; i < size; i++)
+       s.writeObject(data[i]);
+   }
+ 
+   /**
+    * Deserializes this object from the given stream.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if the underlying stream fails
+    * @throws IOException if the underlying stream fails
+    * @serialData the size field (int), the length of the backing array
+    *             (int), followed by its elements (Objects) in proper order.
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     // the `size' field.
+     s.defaultReadObject();
+     int capacity = s.readInt();
+     data = new Object[capacity];
+     for (int i = 0; i < size; i++)
+       data[i] = s.readObject();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Arrays.java gcc-4.1.0/libjava/classpath/java/util/Arrays.java
*** gcc-4.0.2/libjava/classpath/java/util/Arrays.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Arrays.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,2690 ----
+ /* Arrays.java -- Utility class with methods to operate on arrays
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.Serializable;
+ import java.lang.reflect.Array;
+ 
+ /**
+  * This class contains various static utility methods performing operations on
+  * arrays, and a method to provide a List "view" of an array to facilitate
+  * using arrays with Collection-based APIs. All methods throw a
+  * {@link NullPointerException} if the parameter array is null.
+  * <p>
+  *
+  * Implementations may use their own algorithms, but must obey the general
+  * properties; for example, the sort must be stable and n*log(n) complexity.
+  * Sun's implementation of sort, and therefore ours, is a tuned quicksort,
+  * adapted from Jon L. Bentley and M. Douglas McIlroy's "Engineering a Sort
+  * Function", Software-Practice and Experience, Vol. 23(11) P. 1249-1265
+  * (November 1993). This algorithm offers n*log(n) performance on many data
+  * sets that cause other quicksorts to degrade to quadratic performance.
+  *
+  * @author Original author unknown
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Comparable
+  * @see Comparator
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class Arrays
+ {
+   /**
+    * This class is non-instantiable.
+    */
+   private Arrays()
+   {
+   }
+ 
+ 
+ // binarySearch
+   /**
+    * Perform a binary search of a byte array for a key. The array must be
+    * sorted (as by the sort() method) - if it is not, the behaviour of this
+    * method is undefined, and may be an infinite loop. If the array contains
+    * the key more than once, any one of them may be found. Note: although the
+    * specification allows for an infinite loop if the array is unsorted, it
+    * will not happen in this implementation.
+    *
+    * @param a the array to search (must be sorted)
+    * @param key the value to search for
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value.
+    */
+   public static int binarySearch(byte[] a, byte key)
+   {
+     int low = 0;
+     int hi = a.length - 1;
+     int mid = 0;
+     while (low <= hi)
+       {
+         mid = (low + hi) >> 1;
+         final byte d = a[mid];
+         if (d == key)
+           return mid;
+         else if (d > key)
+           hi = mid - 1;
+         else
+           // This gets the insertion point right on the last loop.
+           low = ++mid;
+       }
+     return -mid - 1;
+   }
+ 
+   /**
+    * Perform a binary search of a char array for a key. The array must be
+    * sorted (as by the sort() method) - if it is not, the behaviour of this
+    * method is undefined, and may be an infinite loop. If the array contains
+    * the key more than once, any one of them may be found. Note: although the
+    * specification allows for an infinite loop if the array is unsorted, it
+    * will not happen in this implementation.
+    *
+    * @param a the array to search (must be sorted)
+    * @param key the value to search for
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value.
+    */
+   public static int binarySearch(char[] a, char key)
+   {
+     int low = 0;
+     int hi = a.length - 1;
+     int mid = 0;
+     while (low <= hi)
+       {
+         mid = (low + hi) >> 1;
+         final char d = a[mid];
+         if (d == key)
+           return mid;
+         else if (d > key)
+           hi = mid - 1;
+         else
+           // This gets the insertion point right on the last loop.
+           low = ++mid;
+       }
+     return -mid - 1;
+   }
+ 
+   /**
+    * Perform a binary search of a short array for a key. The array must be
+    * sorted (as by the sort() method) - if it is not, the behaviour of this
+    * method is undefined, and may be an infinite loop. If the array contains
+    * the key more than once, any one of them may be found. Note: although the
+    * specification allows for an infinite loop if the array is unsorted, it
+    * will not happen in this implementation.
+    *
+    * @param a the array to search (must be sorted)
+    * @param key the value to search for
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value.
+    */
+   public static int binarySearch(short[] a, short key)
+   {
+     int low = 0;
+     int hi = a.length - 1;
+     int mid = 0;
+     while (low <= hi)
+       {
+         mid = (low + hi) >> 1;
+         final short d = a[mid];
+         if (d == key)
+           return mid;
+         else if (d > key)
+           hi = mid - 1;
+         else
+           // This gets the insertion point right on the last loop.
+           low = ++mid;
+       }
+     return -mid - 1;
+   }
+ 
+   /**
+    * Perform a binary search of an int array for a key. The array must be
+    * sorted (as by the sort() method) - if it is not, the behaviour of this
+    * method is undefined, and may be an infinite loop. If the array contains
+    * the key more than once, any one of them may be found. Note: although the
+    * specification allows for an infinite loop if the array is unsorted, it
+    * will not happen in this implementation.
+    *
+    * @param a the array to search (must be sorted)
+    * @param key the value to search for
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value.
+    */
+   public static int binarySearch(int[] a, int key)
+   {
+     int low = 0;
+     int hi = a.length - 1;
+     int mid = 0;
+     while (low <= hi)
+       {
+         mid = (low + hi) >> 1;
+         final int d = a[mid];
+         if (d == key)
+           return mid;
+         else if (d > key)
+           hi = mid - 1;
+         else
+           // This gets the insertion point right on the last loop.
+           low = ++mid;
+       }
+     return -mid - 1;
+   }
+ 
+   /**
+    * Perform a binary search of a long array for a key. The array must be
+    * sorted (as by the sort() method) - if it is not, the behaviour of this
+    * method is undefined, and may be an infinite loop. If the array contains
+    * the key more than once, any one of them may be found. Note: although the
+    * specification allows for an infinite loop if the array is unsorted, it
+    * will not happen in this implementation.
+    *
+    * @param a the array to search (must be sorted)
+    * @param key the value to search for
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value.
+    */
+   public static int binarySearch(long[] a, long key)
+   {
+     int low = 0;
+     int hi = a.length - 1;
+     int mid = 0;
+     while (low <= hi)
+       {
+         mid = (low + hi) >> 1;
+         final long d = a[mid];
+         if (d == key)
+           return mid;
+         else if (d > key)
+           hi = mid - 1;
+         else
+           // This gets the insertion point right on the last loop.
+           low = ++mid;
+       }
+     return -mid - 1;
+   }
+ 
+   /**
+    * Perform a binary search of a float array for a key. The array must be
+    * sorted (as by the sort() method) - if it is not, the behaviour of this
+    * method is undefined, and may be an infinite loop. If the array contains
+    * the key more than once, any one of them may be found. Note: although the
+    * specification allows for an infinite loop if the array is unsorted, it
+    * will not happen in this implementation.
+    *
+    * @param a the array to search (must be sorted)
+    * @param key the value to search for
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value.
+    */
+   public static int binarySearch(float[] a, float key)
+   {
+     // Must use Float.compare to take into account NaN, +-0.
+     int low = 0;
+     int hi = a.length - 1;
+     int mid = 0;
+     while (low <= hi)
+       {
+         mid = (low + hi) >> 1;
+         final int r = Float.compare(a[mid], key);
+         if (r == 0)
+           return mid;
+         else if (r > 0)
+           hi = mid - 1;
+         else
+           // This gets the insertion point right on the last loop
+           low = ++mid;
+       }
+     return -mid - 1;
+   }
+ 
+   /**
+    * Perform a binary search of a double array for a key. The array must be
+    * sorted (as by the sort() method) - if it is not, the behaviour of this
+    * method is undefined, and may be an infinite loop. If the array contains
+    * the key more than once, any one of them may be found. Note: although the
+    * specification allows for an infinite loop if the array is unsorted, it
+    * will not happen in this implementation.
+    *
+    * @param a the array to search (must be sorted)
+    * @param key the value to search for
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value.
+    */
+   public static int binarySearch(double[] a, double key)
+   {
+     // Must use Double.compare to take into account NaN, +-0.
+     int low = 0;
+     int hi = a.length - 1;
+     int mid = 0;
+     while (low <= hi)
+       {
+         mid = (low + hi) >> 1;
+         final int r = Double.compare(a[mid], key);
+         if (r == 0)
+           return mid;
+         else if (r > 0)
+           hi = mid - 1;
+         else
+           // This gets the insertion point right on the last loop
+           low = ++mid;
+       }
+     return -mid - 1;
+   }
+ 
+   /**
+    * Perform a binary search of an Object array for a key, using the natural
+    * ordering of the elements. The array must be sorted (as by the sort()
+    * method) - if it is not, the behaviour of this method is undefined, and may
+    * be an infinite loop. Further, the key must be comparable with every item
+    * in the array. If the array contains the key more than once, any one of
+    * them may be found. Note: although the specification allows for an infinite
+    * loop if the array is unsorted, it will not happen in this (JCL)
+    * implementation.
+    *
+    * @param a the array to search (must be sorted)
+    * @param key the value to search for
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value.
+    * @throws ClassCastException if key could not be compared with one of the
+    *         elements of a
+    * @throws NullPointerException if a null element in a is compared
+    */
+   public static int binarySearch(Object[] a, Object key)
+   {
+     return binarySearch(a, key, null);
+   }
+ 
+   /**
+    * Perform a binary search of an Object array for a key, using a supplied
+    * Comparator. The array must be sorted (as by the sort() method with the
+    * same Comparator) - if it is not, the behaviour of this method is
+    * undefined, and may be an infinite loop. Further, the key must be
+    * comparable with every item in the array. If the array contains the key
+    * more than once, any one of them may be found. Note: although the
+    * specification allows for an infinite loop if the array is unsorted, it
+    * will not happen in this (JCL) implementation.
+    *
+    * @param a the array to search (must be sorted)
+    * @param key the value to search for
+    * @param c the comparator by which the array is sorted; or null to
+    *        use the elements' natural order
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value.
+    * @throws ClassCastException if key could not be compared with one of the
+    *         elements of a
+    * @throws NullPointerException if a null element is compared with natural
+    *         ordering (only possible when c is null)
+    */
+   public static int binarySearch(Object[] a, Object key, Comparator c)
+   {
+     int low = 0;
+     int hi = a.length - 1;
+     int mid = 0;
+     while (low <= hi)
+       {
+         mid = (low + hi) >> 1;
+         final int d = Collections.compare(key, a[mid], c);
+         if (d == 0)
+           return mid;
+         else if (d < 0)
+           hi = mid - 1;
+         else
+           // This gets the insertion point right on the last loop
+           low = ++mid;
+       }
+     return -mid - 1;
+   }
+ 
+ 
+ // equals
+   /**
+    * Compare two boolean arrays for equality.
+    *
+    * @param a1 the first array to compare
+    * @param a2 the second array to compare
+    * @return true if a1 and a2 are both null, or if a2 is of the same length
+    *         as a1, and for each 0 <= i < a1.length, a1[i] == a2[i]
+    */
+   public static boolean equals(boolean[] a1, boolean[] a2)
+   {
+     // Quick test which saves comparing elements of the same array, and also
+     // catches the case that both are null.
+     if (a1 == a2)
+       return true;
+ 
+     if (null == a1 || null == a2)
+       return false;
+     
+     // If they're the same length, test each element
+     if (a1.length == a2.length)
+       {
+ 	int i = a1.length;
+ 	while (--i >= 0)
+ 	  if (a1[i] != a2[i])
+ 	    return false;
+ 	return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Compare two byte arrays for equality.
+    *
+    * @param a1 the first array to compare
+    * @param a2 the second array to compare
+    * @return true if a1 and a2 are both null, or if a2 is of the same length
+    *         as a1, and for each 0 <= i < a1.length, a1[i] == a2[i]
+    */
+   public static boolean equals(byte[] a1, byte[] a2)
+   {
+     // Quick test which saves comparing elements of the same array, and also
+     // catches the case that both are null.
+     if (a1 == a2)
+       return true;
+ 
+     if (null == a1 || null == a2)
+       return false;
+ 
+     // If they're the same length, test each element
+     if (a1.length == a2.length)
+       {
+ 	int i = a1.length;
+ 	while (--i >= 0)
+ 	  if (a1[i] != a2[i])
+ 	    return false;
+ 	return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Compare two char arrays for equality.
+    *
+    * @param a1 the first array to compare
+    * @param a2 the second array to compare
+    * @return true if a1 and a2 are both null, or if a2 is of the same length
+    *         as a1, and for each 0 <= i < a1.length, a1[i] == a2[i]
+    */
+   public static boolean equals(char[] a1, char[] a2)
+   {
+     // Quick test which saves comparing elements of the same array, and also
+     // catches the case that both are null.
+     if (a1 == a2)
+       return true;
+ 
+     if (null == a1 || null == a2)
+       return false;
+     
+     // If they're the same length, test each element
+     if (a1.length == a2.length)
+       {
+ 	int i = a1.length;
+ 	while (--i >= 0)
+ 	  if (a1[i] != a2[i])
+ 	    return false;
+ 	return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Compare two short arrays for equality.
+    *
+    * @param a1 the first array to compare
+    * @param a2 the second array to compare
+    * @return true if a1 and a2 are both null, or if a2 is of the same length
+    *         as a1, and for each 0 <= i < a1.length, a1[i] == a2[i]
+    */
+   public static boolean equals(short[] a1, short[] a2)
+   {
+     // Quick test which saves comparing elements of the same array, and also
+     // catches the case that both are null.
+     if (a1 == a2)
+       return true;
+ 
+     if (null == a1 || null == a2)
+       return false;
+ 
+     // If they're the same length, test each element
+     if (a1.length == a2.length)
+       {
+ 	int i = a1.length;
+ 	while (--i >= 0)
+ 	  if (a1[i] != a2[i])
+ 	    return false;
+ 	return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Compare two int arrays for equality.
+    *
+    * @param a1 the first array to compare
+    * @param a2 the second array to compare
+    * @return true if a1 and a2 are both null, or if a2 is of the same length
+    *         as a1, and for each 0 <= i < a1.length, a1[i] == a2[i]
+    */
+   public static boolean equals(int[] a1, int[] a2)
+   {
+     // Quick test which saves comparing elements of the same array, and also
+     // catches the case that both are null.
+     if (a1 == a2)
+       return true;
+ 
+     if (null == a1 || null == a2)
+       return false;
+ 
+     // If they're the same length, test each element
+     if (a1.length == a2.length)
+       {
+ 	int i = a1.length;
+ 	while (--i >= 0)
+ 	  if (a1[i] != a2[i])
+ 	    return false;
+ 	return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Compare two long arrays for equality.
+    *
+    * @param a1 the first array to compare
+    * @param a2 the second array to compare
+    * @return true if a1 and a2 are both null, or if a2 is of the same length
+    *         as a1, and for each 0 <= i < a1.length, a1[i] == a2[i]
+    */
+   public static boolean equals(long[] a1, long[] a2)
+   {
+     // Quick test which saves comparing elements of the same array, and also
+     // catches the case that both are null.
+     if (a1 == a2)
+       return true;
+ 
+     if (null == a1 || null == a2)
+       return false;
+ 
+     // If they're the same length, test each element
+     if (a1.length == a2.length)
+       {
+ 	int i = a1.length;
+ 	while (--i >= 0)
+ 	  if (a1[i] != a2[i])
+ 	    return false;
+ 	return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Compare two float arrays for equality.
+    *
+    * @param a1 the first array to compare
+    * @param a2 the second array to compare
+    * @return true if a1 and a2 are both null, or if a2 is of the same length
+    *         as a1, and for each 0 <= i < a1.length, a1[i] == a2[i]
+    */
+   public static boolean equals(float[] a1, float[] a2)
+   {
+     // Quick test which saves comparing elements of the same array, and also
+     // catches the case that both are null.
+     if (a1 == a2)
+       return true;
+ 
+     if (null == a1 || null == a2)
+       return false;
+ 
+     // Must use Float.compare to take into account NaN, +-0.
+     // If they're the same length, test each element
+     if (a1.length == a2.length)
+       {
+ 	int i = a1.length;
+ 	while (--i >= 0)
+ 	  if (Float.compare(a1[i], a2[i]) != 0)
+ 	    return false;
+ 	return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Compare two double arrays for equality.
+    *
+    * @param a1 the first array to compare
+    * @param a2 the second array to compare
+    * @return true if a1 and a2 are both null, or if a2 is of the same length
+    *         as a1, and for each 0 <= i < a1.length, a1[i] == a2[i]
+    */
+   public static boolean equals(double[] a1, double[] a2)
+   {
+     // Quick test which saves comparing elements of the same array, and also
+     // catches the case that both are null.
+     if (a1 == a2)
+       return true;
+ 
+     if (null == a1 || null == a2)
+       return false;
+     
+     // Must use Double.compare to take into account NaN, +-0.
+     // If they're the same length, test each element
+     if (a1.length == a2.length)
+       {
+ 	int i = a1.length;
+ 	while (--i >= 0)
+ 	  if (Double.compare(a1[i], a2[i]) != 0)
+ 	    return false;
+ 	return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Compare two Object arrays for equality.
+    *
+    * @param a1 the first array to compare
+    * @param a2 the second array to compare
+    * @return true if a1 and a2 are both null, or if a1 is of the same length
+    *         as a2, and for each 0 <= i < a.length, a1[i] == null ?
+    *         a2[i] == null : a1[i].equals(a2[i]).
+    */
+   public static boolean equals(Object[] a1, Object[] a2)
+   {
+     // Quick test which saves comparing elements of the same array, and also
+     // catches the case that both are null.
+     if (a1 == a2)
+       return true;
+ 
+     if (null == a1 || null == a2)
+       return false;
+     
+     // If they're the same length, test each element
+     if (a1.length == a2.length)
+       {
+ 	int i = a1.length;
+ 	while (--i >= 0)
+ 	  if (! AbstractCollection.equals(a1[i], a2[i]))
+ 	    return false;
+ 	return true;
+       }
+     return false;
+   }
+ 
+ 
+ // fill
+   /**
+    * Fill an array with a boolean value.
+    *
+    * @param a the array to fill
+    * @param val the value to fill it with
+    */
+   public static void fill(boolean[] a, boolean val)
+   {
+     fill(a, 0, a.length, val);
+   }
+ 
+   /**
+    * Fill a range of an array with a boolean value.
+    *
+    * @param a the array to fill
+    * @param fromIndex the index to fill from, inclusive
+    * @param toIndex the index to fill to, exclusive
+    * @param val the value to fill with
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void fill(boolean[] a, int fromIndex, int toIndex, boolean val)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     for (int i = fromIndex; i < toIndex; i++)
+       a[i] = val;
+   }
+ 
+   /**
+    * Fill an array with a byte value.
+    *
+    * @param a the array to fill
+    * @param val the value to fill it with
+    */
+   public static void fill(byte[] a, byte val)
+   {
+     fill(a, 0, a.length, val);
+   }
+ 
+   /**
+    * Fill a range of an array with a byte value.
+    *
+    * @param a the array to fill
+    * @param fromIndex the index to fill from, inclusive
+    * @param toIndex the index to fill to, exclusive
+    * @param val the value to fill with
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void fill(byte[] a, int fromIndex, int toIndex, byte val)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     for (int i = fromIndex; i < toIndex; i++)
+       a[i] = val;
+   }
+ 
+   /**
+    * Fill an array with a char value.
+    *
+    * @param a the array to fill
+    * @param val the value to fill it with
+    */
+   public static void fill(char[] a, char val)
+   {
+     fill(a, 0, a.length, val);
+   }
+ 
+   /**
+    * Fill a range of an array with a char value.
+    *
+    * @param a the array to fill
+    * @param fromIndex the index to fill from, inclusive
+    * @param toIndex the index to fill to, exclusive
+    * @param val the value to fill with
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void fill(char[] a, int fromIndex, int toIndex, char val)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     for (int i = fromIndex; i < toIndex; i++)
+       a[i] = val;
+   }
+ 
+   /**
+    * Fill an array with a short value.
+    *
+    * @param a the array to fill
+    * @param val the value to fill it with
+    */
+   public static void fill(short[] a, short val)
+   {
+     fill(a, 0, a.length, val);
+   }
+ 
+   /**
+    * Fill a range of an array with a short value.
+    *
+    * @param a the array to fill
+    * @param fromIndex the index to fill from, inclusive
+    * @param toIndex the index to fill to, exclusive
+    * @param val the value to fill with
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void fill(short[] a, int fromIndex, int toIndex, short val)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     for (int i = fromIndex; i < toIndex; i++)
+       a[i] = val;
+   }
+ 
+   /**
+    * Fill an array with an int value.
+    *
+    * @param a the array to fill
+    * @param val the value to fill it with
+    */
+   public static void fill(int[] a, int val)
+   {
+     fill(a, 0, a.length, val);
+   }
+ 
+   /**
+    * Fill a range of an array with an int value.
+    *
+    * @param a the array to fill
+    * @param fromIndex the index to fill from, inclusive
+    * @param toIndex the index to fill to, exclusive
+    * @param val the value to fill with
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void fill(int[] a, int fromIndex, int toIndex, int val)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     for (int i = fromIndex; i < toIndex; i++)
+       a[i] = val;
+   }
+ 
+   /**
+    * Fill an array with a long value.
+    *
+    * @param a the array to fill
+    * @param val the value to fill it with
+    */
+   public static void fill(long[] a, long val)
+   {
+     fill(a, 0, a.length, val);
+   }
+ 
+   /**
+    * Fill a range of an array with a long value.
+    *
+    * @param a the array to fill
+    * @param fromIndex the index to fill from, inclusive
+    * @param toIndex the index to fill to, exclusive
+    * @param val the value to fill with
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void fill(long[] a, int fromIndex, int toIndex, long val)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     for (int i = fromIndex; i < toIndex; i++)
+       a[i] = val;
+   }
+ 
+   /**
+    * Fill an array with a float value.
+    *
+    * @param a the array to fill
+    * @param val the value to fill it with
+    */
+   public static void fill(float[] a, float val)
+   {
+     fill(a, 0, a.length, val);
+   }
+ 
+   /**
+    * Fill a range of an array with a float value.
+    *
+    * @param a the array to fill
+    * @param fromIndex the index to fill from, inclusive
+    * @param toIndex the index to fill to, exclusive
+    * @param val the value to fill with
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void fill(float[] a, int fromIndex, int toIndex, float val)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     for (int i = fromIndex; i < toIndex; i++)
+       a[i] = val;
+   }
+ 
+   /**
+    * Fill an array with a double value.
+    *
+    * @param a the array to fill
+    * @param val the value to fill it with
+    */
+   public static void fill(double[] a, double val)
+   {
+     fill(a, 0, a.length, val);
+   }
+ 
+   /**
+    * Fill a range of an array with a double value.
+    *
+    * @param a the array to fill
+    * @param fromIndex the index to fill from, inclusive
+    * @param toIndex the index to fill to, exclusive
+    * @param val the value to fill with
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void fill(double[] a, int fromIndex, int toIndex, double val)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     for (int i = fromIndex; i < toIndex; i++)
+       a[i] = val;
+   }
+ 
+   /**
+    * Fill an array with an Object value.
+    *
+    * @param a the array to fill
+    * @param val the value to fill it with
+    * @throws ClassCastException if val is not an instance of the element
+    *         type of a.
+    */
+   public static void fill(Object[] a, Object val)
+   {
+     fill(a, 0, a.length, val);
+   }
+ 
+   /**
+    * Fill a range of an array with an Object value.
+    *
+    * @param a the array to fill
+    * @param fromIndex the index to fill from, inclusive
+    * @param toIndex the index to fill to, exclusive
+    * @param val the value to fill with
+    * @throws ClassCastException if val is not an instance of the element
+    *         type of a.
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void fill(Object[] a, int fromIndex, int toIndex, Object val)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     for (int i = fromIndex; i < toIndex; i++)
+       a[i] = val;
+   }
+ 
+ 
+ // sort
+   // Thanks to Paul Fisher (rao@gnu.org) for finding this quicksort algorithm
+   // as specified by Sun and porting it to Java. The algorithm is an optimised
+   // quicksort, as described in Jon L. Bentley and M. Douglas McIlroy's
+   // "Engineering a Sort Function", Software-Practice and Experience, Vol.
+   // 23(11) P. 1249-1265 (November 1993). This algorithm gives n*log(n)
+   // performance on many arrays that would take quadratic time with a standard
+   // quicksort.
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the byte array to sort
+    */
+   public static void sort(byte[] a)
+   {
+     qsort(a, 0, a.length);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the byte array to sort
+    * @param fromIndex the first index to sort (inclusive)
+    * @param toIndex the last index to sort (exclusive)
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void sort(byte[] a, int fromIndex, int toIndex)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
+     qsort(a, fromIndex, toIndex - fromIndex);
+   }
+ 
+   /**
+    * Finds the index of the median of three array elements.
+    *
+    * @param a the first index
+    * @param b the second index
+    * @param c the third index
+    * @param d the array
+    * @return the index (a, b, or c) which has the middle value of the three
+    */
+   private static int med3(int a, int b, int c, byte[] d)
+   {
+     return (d[a] < d[b]
+             ? (d[b] < d[c] ? b : d[a] < d[c] ? c : a)
+             : (d[b] > d[c] ? b : d[a] > d[c] ? c : a));
+   }
+ 
+   /**
+    * Swaps the elements at two locations of an array
+    *
+    * @param i the first index
+    * @param j the second index
+    * @param a the array
+    */
+   private static void swap(int i, int j, byte[] a)
+   {
+     byte c = a[i];
+     a[i] = a[j];
+     a[j] = c;
+   }
+ 
+   /**
+    * Swaps two ranges of an array.
+    *
+    * @param i the first range start
+    * @param j the second range start
+    * @param n the element count
+    * @param a the array
+    */
+   private static void vecswap(int i, int j, int n, byte[] a)
+   {
+     for ( ; n > 0; i++, j++, n--)
+       swap(i, j, a);
+   }
+ 
+   /**
+    * Performs a recursive modified quicksort.
+    *
+    * @param array the array to sort
+    * @param from the start index (inclusive)
+    * @param count the number of elements to sort
+    */
+   private static void qsort(byte[] array, int from, int count)
+   {
+     // Use an insertion sort on small arrays.
+     if (count <= 7)
+       {
+         for (int i = from + 1; i < from + count; i++)
+           for (int j = i; j > from && array[j - 1] > array[j]; j--)
+             swap(j, j - 1, array);
+         return;
+       }
+ 
+     // Determine a good median element.
+     int mid = count / 2;
+     int lo = from;
+     int hi = from + count - 1;
+ 
+     if (count > 40)
+       { // big arrays, pseudomedian of 9
+         int s = count / 8;
+         lo = med3(lo, lo + s, lo + 2 * s, array);
+         mid = med3(mid - s, mid, mid + s, array);
+         hi = med3(hi - 2 * s, hi - s, hi, array);
+       }
+     mid = med3(lo, mid, hi, array);
+ 
+     int a, b, c, d;
+     int comp;
+ 
+     // Pull the median element out of the fray, and use it as a pivot.
+     swap(from, mid, array);
+     a = b = from;
+     c = d = from + count - 1;
+ 
+     // Repeatedly move b and c to each other, swapping elements so
+     // that all elements before index b are less than the pivot, and all
+     // elements after index c are greater than the pivot. a and b track
+     // the elements equal to the pivot.
+     while (true)
+       {
+         while (b <= c && (comp = array[b] - array[from]) <= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(a, b, array);
+                 a++;
+               }
+             b++;
+           }
+         while (c >= b && (comp = array[c] - array[from]) >= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(c, d, array);
+                 d--;
+               }
+             c--;
+           }
+         if (b > c)
+           break;
+         swap(b, c, array);
+         b++;
+         c--;
+       }
+ 
+     // Swap pivot(s) back in place, the recurse on left and right sections.
+     hi = from + count;
+     int span;
+     span = Math.min(a - from, b - a);
+     vecswap(from, b - span, span, array);
+ 
+     span = Math.min(d - c, hi - d - 1);
+     vecswap(b, hi - span, span, array);
+ 
+     span = b - a;
+     if (span > 1)
+       qsort(array, from, span);
+ 
+     span = d - c;
+     if (span > 1)
+       qsort(array, hi - span, span);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the char array to sort
+    */
+   public static void sort(char[] a)
+   {
+     qsort(a, 0, a.length);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the char array to sort
+    * @param fromIndex the first index to sort (inclusive)
+    * @param toIndex the last index to sort (exclusive)
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void sort(char[] a, int fromIndex, int toIndex)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
+     qsort(a, fromIndex, toIndex - fromIndex);
+   }
+ 
+   /**
+    * Finds the index of the median of three array elements.
+    *
+    * @param a the first index
+    * @param b the second index
+    * @param c the third index
+    * @param d the array
+    * @return the index (a, b, or c) which has the middle value of the three
+    */
+   private static int med3(int a, int b, int c, char[] d)
+   {
+     return (d[a] < d[b]
+             ? (d[b] < d[c] ? b : d[a] < d[c] ? c : a)
+             : (d[b] > d[c] ? b : d[a] > d[c] ? c : a));
+   }
+ 
+   /**
+    * Swaps the elements at two locations of an array
+    *
+    * @param i the first index
+    * @param j the second index
+    * @param a the array
+    */
+   private static void swap(int i, int j, char[] a)
+   {
+     char c = a[i];
+     a[i] = a[j];
+     a[j] = c;
+   }
+ 
+   /**
+    * Swaps two ranges of an array.
+    *
+    * @param i the first range start
+    * @param j the second range start
+    * @param n the element count
+    * @param a the array
+    */
+   private static void vecswap(int i, int j, int n, char[] a)
+   {
+     for ( ; n > 0; i++, j++, n--)
+       swap(i, j, a);
+   }
+ 
+   /**
+    * Performs a recursive modified quicksort.
+    *
+    * @param array the array to sort
+    * @param from the start index (inclusive)
+    * @param count the number of elements to sort
+    */
+   private static void qsort(char[] array, int from, int count)
+   {
+     // Use an insertion sort on small arrays.
+     if (count <= 7)
+       {
+         for (int i = from + 1; i < from + count; i++)
+           for (int j = i; j > from && array[j - 1] > array[j]; j--)
+             swap(j, j - 1, array);
+         return;
+       }
+ 
+     // Determine a good median element.
+     int mid = count / 2;
+     int lo = from;
+     int hi = from + count - 1;
+ 
+     if (count > 40)
+       { // big arrays, pseudomedian of 9
+         int s = count / 8;
+         lo = med3(lo, lo + s, lo + 2 * s, array);
+         mid = med3(mid - s, mid, mid + s, array);
+         hi = med3(hi - 2 * s, hi - s, hi, array);
+       }
+     mid = med3(lo, mid, hi, array);
+ 
+     int a, b, c, d;
+     int comp;
+ 
+     // Pull the median element out of the fray, and use it as a pivot.
+     swap(from, mid, array);
+     a = b = from;
+     c = d = from + count - 1;
+ 
+     // Repeatedly move b and c to each other, swapping elements so
+     // that all elements before index b are less than the pivot, and all
+     // elements after index c are greater than the pivot. a and b track
+     // the elements equal to the pivot.
+     while (true)
+       {
+         while (b <= c && (comp = array[b] - array[from]) <= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(a, b, array);
+                 a++;
+               }
+             b++;
+           }
+         while (c >= b && (comp = array[c] - array[from]) >= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(c, d, array);
+                 d--;
+               }
+             c--;
+           }
+         if (b > c)
+           break;
+         swap(b, c, array);
+         b++;
+         c--;
+       }
+ 
+     // Swap pivot(s) back in place, the recurse on left and right sections.
+     hi = from + count;
+     int span;
+     span = Math.min(a - from, b - a);
+     vecswap(from, b - span, span, array);
+ 
+     span = Math.min(d - c, hi - d - 1);
+     vecswap(b, hi - span, span, array);
+ 
+     span = b - a;
+     if (span > 1)
+       qsort(array, from, span);
+ 
+     span = d - c;
+     if (span > 1)
+       qsort(array, hi - span, span);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the short array to sort
+    */
+   public static void sort(short[] a)
+   {
+     qsort(a, 0, a.length);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the short array to sort
+    * @param fromIndex the first index to sort (inclusive)
+    * @param toIndex the last index to sort (exclusive)
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void sort(short[] a, int fromIndex, int toIndex)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
+     qsort(a, fromIndex, toIndex - fromIndex);
+   }
+ 
+   /**
+    * Finds the index of the median of three array elements.
+    *
+    * @param a the first index
+    * @param b the second index
+    * @param c the third index
+    * @param d the array
+    * @return the index (a, b, or c) which has the middle value of the three
+    */
+   private static int med3(int a, int b, int c, short[] d)
+   {
+     return (d[a] < d[b]
+             ? (d[b] < d[c] ? b : d[a] < d[c] ? c : a)
+             : (d[b] > d[c] ? b : d[a] > d[c] ? c : a));
+   }
+ 
+   /**
+    * Swaps the elements at two locations of an array
+    *
+    * @param i the first index
+    * @param j the second index
+    * @param a the array
+    */
+   private static void swap(int i, int j, short[] a)
+   {
+     short c = a[i];
+     a[i] = a[j];
+     a[j] = c;
+   }
+ 
+   /**
+    * Swaps two ranges of an array.
+    *
+    * @param i the first range start
+    * @param j the second range start
+    * @param n the element count
+    * @param a the array
+    */
+   private static void vecswap(int i, int j, int n, short[] a)
+   {
+     for ( ; n > 0; i++, j++, n--)
+       swap(i, j, a);
+   }
+ 
+   /**
+    * Performs a recursive modified quicksort.
+    *
+    * @param array the array to sort
+    * @param from the start index (inclusive)
+    * @param count the number of elements to sort
+    */
+   private static void qsort(short[] array, int from, int count)
+   {
+     // Use an insertion sort on small arrays.
+     if (count <= 7)
+       {
+         for (int i = from + 1; i < from + count; i++)
+ 	  for (int j = i; j > from && array[j - 1] > array[j]; j--)
+ 	    swap(j, j - 1, array);
+         return;
+       }
+ 
+     // Determine a good median element.
+     int mid = count / 2;
+     int lo = from;
+     int hi = from + count - 1;
+ 
+     if (count > 40)
+       { // big arrays, pseudomedian of 9
+         int s = count / 8;
+         lo = med3(lo, lo + s, lo + 2 * s, array);
+         mid = med3(mid - s, mid, mid + s, array);
+         hi = med3(hi - 2 * s, hi - s, hi, array);
+       }
+     mid = med3(lo, mid, hi, array);
+ 
+     int a, b, c, d;
+     int comp;
+ 
+     // Pull the median element out of the fray, and use it as a pivot.
+     swap(from, mid, array);
+     a = b = from;
+     c = d = from + count - 1;
+ 
+     // Repeatedly move b and c to each other, swapping elements so
+     // that all elements before index b are less than the pivot, and all
+     // elements after index c are greater than the pivot. a and b track
+     // the elements equal to the pivot.
+     while (true)
+       {
+         while (b <= c && (comp = array[b] - array[from]) <= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(a, b, array);
+                 a++;
+               }
+             b++;
+           }
+         while (c >= b && (comp = array[c] - array[from]) >= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(c, d, array);
+                 d--;
+               }
+             c--;
+           }
+         if (b > c)
+           break;
+         swap(b, c, array);
+         b++;
+         c--;
+       }
+ 
+     // Swap pivot(s) back in place, the recurse on left and right sections.
+     hi = from + count;
+     int span;
+     span = Math.min(a - from, b - a);
+     vecswap(from, b - span, span, array);
+ 
+     span = Math.min(d - c, hi - d - 1);
+     vecswap(b, hi - span, span, array);
+ 
+     span = b - a;
+     if (span > 1)
+       qsort(array, from, span);
+ 
+     span = d - c;
+     if (span > 1)
+       qsort(array, hi - span, span);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the int array to sort
+    */
+   public static void sort(int[] a)
+   {
+     qsort(a, 0, a.length);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the int array to sort
+    * @param fromIndex the first index to sort (inclusive)
+    * @param toIndex the last index to sort (exclusive)
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void sort(int[] a, int fromIndex, int toIndex)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
+     qsort(a, fromIndex, toIndex - fromIndex);
+   }
+ 
+   /**
+    * Finds the index of the median of three array elements.
+    *
+    * @param a the first index
+    * @param b the second index
+    * @param c the third index
+    * @param d the array
+    * @return the index (a, b, or c) which has the middle value of the three
+    */
+   private static int med3(int a, int b, int c, int[] d)
+   {
+     return (d[a] < d[b]
+             ? (d[b] < d[c] ? b : d[a] < d[c] ? c : a)
+             : (d[b] > d[c] ? b : d[a] > d[c] ? c : a));
+   }
+ 
+   /**
+    * Swaps the elements at two locations of an array
+    *
+    * @param i the first index
+    * @param j the second index
+    * @param a the array
+    */
+   private static void swap(int i, int j, int[] a)
+   {
+     int c = a[i];
+     a[i] = a[j];
+     a[j] = c;
+   }
+ 
+   /**
+    * Swaps two ranges of an array.
+    *
+    * @param i the first range start
+    * @param j the second range start
+    * @param n the element count
+    * @param a the array
+    */
+   private static void vecswap(int i, int j, int n, int[] a)
+   {
+     for ( ; n > 0; i++, j++, n--)
+       swap(i, j, a);
+   }
+ 
+   /**
+    * Compares two integers in natural order, since a - b is inadequate.
+    *
+    * @param a the first int
+    * @param b the second int
+    * @return &lt; 0, 0, or &gt; 0 accorting to the comparison
+    */
+   private static int compare(int a, int b)
+   {
+     return a < b ? -1 : a == b ? 0 : 1;
+   }
+ 
+   /**
+    * Performs a recursive modified quicksort.
+    *
+    * @param array the array to sort
+    * @param from the start index (inclusive)
+    * @param count the number of elements to sort
+    */
+   private static void qsort(int[] array, int from, int count)
+   {
+     // Use an insertion sort on small arrays.
+     if (count <= 7)
+       {
+         for (int i = from + 1; i < from + count; i++)
+           for (int j = i; j > from && array[j - 1] > array[j]; j--)
+             swap(j, j - 1, array);
+         return;
+       }
+ 
+     // Determine a good median element.
+     int mid = count / 2;
+     int lo = from;
+     int hi = from + count - 1;
+ 
+     if (count > 40)
+       { // big arrays, pseudomedian of 9
+         int s = count / 8;
+         lo = med3(lo, lo + s, lo + 2 * s, array);
+         mid = med3(mid - s, mid, mid + s, array);
+         hi = med3(hi - 2 * s, hi - s, hi, array);
+       }
+     mid = med3(lo, mid, hi, array);
+ 
+     int a, b, c, d;
+     int comp;
+ 
+     // Pull the median element out of the fray, and use it as a pivot.
+     swap(from, mid, array);
+     a = b = from;
+     c = d = from + count - 1;
+ 
+     // Repeatedly move b and c to each other, swapping elements so
+     // that all elements before index b are less than the pivot, and all
+     // elements after index c are greater than the pivot. a and b track
+     // the elements equal to the pivot.
+     while (true)
+       {
+         while (b <= c && (comp = compare(array[b], array[from])) <= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(a, b, array);
+                 a++;
+               }
+             b++;
+           }
+         while (c >= b && (comp = compare(array[c], array[from])) >= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(c, d, array);
+                 d--;
+               }
+             c--;
+           }
+         if (b > c)
+           break;
+         swap(b, c, array);
+         b++;
+         c--;
+       }
+ 
+     // Swap pivot(s) back in place, the recurse on left and right sections.
+     hi = from + count;
+     int span;
+     span = Math.min(a - from, b - a);
+     vecswap(from, b - span, span, array);
+ 
+     span = Math.min(d - c, hi - d - 1);
+     vecswap(b, hi - span, span, array);
+ 
+     span = b - a;
+     if (span > 1)
+       qsort(array, from, span);
+ 
+     span = d - c;
+     if (span > 1)
+       qsort(array, hi - span, span);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the long array to sort
+    */
+   public static void sort(long[] a)
+   {
+     qsort(a, 0, a.length);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the long array to sort
+    * @param fromIndex the first index to sort (inclusive)
+    * @param toIndex the last index to sort (exclusive)
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void sort(long[] a, int fromIndex, int toIndex)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
+     qsort(a, fromIndex, toIndex - fromIndex);
+   }
+ 
+   /**
+    * Finds the index of the median of three array elements.
+    *
+    * @param a the first index
+    * @param b the second index
+    * @param c the third index
+    * @param d the array
+    * @return the index (a, b, or c) which has the middle value of the three
+    */
+   private static int med3(int a, int b, int c, long[] d)
+   {
+     return (d[a] < d[b]
+             ? (d[b] < d[c] ? b : d[a] < d[c] ? c : a)
+             : (d[b] > d[c] ? b : d[a] > d[c] ? c : a));
+   }
+ 
+   /**
+    * Swaps the elements at two locations of an array
+    *
+    * @param i the first index
+    * @param j the second index
+    * @param a the array
+    */
+   private static void swap(int i, int j, long[] a)
+   {
+     long c = a[i];
+     a[i] = a[j];
+     a[j] = c;
+   }
+ 
+   /**
+    * Swaps two ranges of an array.
+    *
+    * @param i the first range start
+    * @param j the second range start
+    * @param n the element count
+    * @param a the array
+    */
+   private static void vecswap(int i, int j, int n, long[] a)
+   {
+     for ( ; n > 0; i++, j++, n--)
+       swap(i, j, a);
+   }
+ 
+   /**
+    * Compares two longs in natural order, since a - b is inadequate.
+    *
+    * @param a the first long
+    * @param b the second long
+    * @return &lt; 0, 0, or &gt; 0 accorting to the comparison
+    */
+   private static int compare(long a, long b)
+   {
+     return a < b ? -1 : a == b ? 0 : 1;
+   }
+ 
+   /**
+    * Performs a recursive modified quicksort.
+    *
+    * @param array the array to sort
+    * @param from the start index (inclusive)
+    * @param count the number of elements to sort
+    */
+   private static void qsort(long[] array, int from, int count)
+   {
+     // Use an insertion sort on small arrays.
+     if (count <= 7)
+       {
+         for (int i = from + 1; i < from + count; i++)
+           for (int j = i; j > from && array[j - 1] > array[j]; j--)
+             swap(j, j - 1, array);
+         return;
+       }
+ 
+     // Determine a good median element.
+     int mid = count / 2;
+     int lo = from;
+     int hi = from + count - 1;
+ 
+     if (count > 40)
+       { // big arrays, pseudomedian of 9
+         int s = count / 8;
+         lo = med3(lo, lo + s, lo + 2 * s, array);
+         mid = med3(mid - s, mid, mid + s, array);
+         hi = med3(hi - 2 * s, hi - s, hi, array);
+       }
+     mid = med3(lo, mid, hi, array);
+ 
+     int a, b, c, d;
+     int comp;
+ 
+     // Pull the median element out of the fray, and use it as a pivot.
+     swap(from, mid, array);
+     a = b = from;
+     c = d = from + count - 1;
+ 
+     // Repeatedly move b and c to each other, swapping elements so
+     // that all elements before index b are less than the pivot, and all
+     // elements after index c are greater than the pivot. a and b track
+     // the elements equal to the pivot.
+     while (true)
+       {
+         while (b <= c && (comp = compare(array[b], array[from])) <= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(a, b, array);
+                 a++;
+               }
+             b++;
+           }
+         while (c >= b && (comp = compare(array[c], array[from])) >= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(c, d, array);
+                 d--;
+               }
+             c--;
+           }
+         if (b > c)
+           break;
+         swap(b, c, array);
+         b++;
+         c--;
+       }
+ 
+     // Swap pivot(s) back in place, the recurse on left and right sections.
+     hi = from + count;
+     int span;
+     span = Math.min(a - from, b - a);
+     vecswap(from, b - span, span, array);
+ 
+     span = Math.min(d - c, hi - d - 1);
+     vecswap(b, hi - span, span, array);
+ 
+     span = b - a;
+     if (span > 1)
+       qsort(array, from, span);
+ 
+     span = d - c;
+     if (span > 1)
+       qsort(array, hi - span, span);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the float array to sort
+    */
+   public static void sort(float[] a)
+   {
+     qsort(a, 0, a.length);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the float array to sort
+    * @param fromIndex the first index to sort (inclusive)
+    * @param toIndex the last index to sort (exclusive)
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void sort(float[] a, int fromIndex, int toIndex)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
+     qsort(a, fromIndex, toIndex - fromIndex);
+   }
+ 
+   /**
+    * Finds the index of the median of three array elements.
+    *
+    * @param a the first index
+    * @param b the second index
+    * @param c the third index
+    * @param d the array
+    * @return the index (a, b, or c) which has the middle value of the three
+    */
+   private static int med3(int a, int b, int c, float[] d)
+   {
+     return (Float.compare(d[a], d[b]) < 0
+             ? (Float.compare(d[b], d[c]) < 0 ? b
+                : Float.compare(d[a], d[c]) < 0 ? c : a)
+             : (Float.compare(d[b], d[c]) > 0 ? b
+                : Float.compare(d[a], d[c]) > 0 ? c : a));
+   }
+ 
+   /**
+    * Swaps the elements at two locations of an array
+    *
+    * @param i the first index
+    * @param j the second index
+    * @param a the array
+    */
+   private static void swap(int i, int j, float[] a)
+   {
+     float c = a[i];
+     a[i] = a[j];
+     a[j] = c;
+   }
+ 
+   /**
+    * Swaps two ranges of an array.
+    *
+    * @param i the first range start
+    * @param j the second range start
+    * @param n the element count
+    * @param a the array
+    */
+   private static void vecswap(int i, int j, int n, float[] a)
+   {
+     for ( ; n > 0; i++, j++, n--)
+       swap(i, j, a);
+   }
+ 
+   /**
+    * Performs a recursive modified quicksort.
+    *
+    * @param array the array to sort
+    * @param from the start index (inclusive)
+    * @param count the number of elements to sort
+    */
+   private static void qsort(float[] array, int from, int count)
+   {
+     // Use an insertion sort on small arrays.
+     if (count <= 7)
+       {
+         for (int i = from + 1; i < from + count; i++)
+           for (int j = i;
+                j > from && Float.compare(array[j - 1], array[j]) > 0;
+                j--)
+             {
+               swap(j, j - 1, array);
+             }
+         return;
+       }
+ 
+     // Determine a good median element.
+     int mid = count / 2;
+     int lo = from;
+     int hi = from + count - 1;
+ 
+     if (count > 40)
+       { // big arrays, pseudomedian of 9
+         int s = count / 8;
+         lo = med3(lo, lo + s, lo + 2 * s, array);
+         mid = med3(mid - s, mid, mid + s, array);
+         hi = med3(hi - 2 * s, hi - s, hi, array);
+       }
+     mid = med3(lo, mid, hi, array);
+ 
+     int a, b, c, d;
+     int comp;
+ 
+     // Pull the median element out of the fray, and use it as a pivot.
+     swap(from, mid, array);
+     a = b = from;
+     c = d = from + count - 1;
+ 
+     // Repeatedly move b and c to each other, swapping elements so
+     // that all elements before index b are less than the pivot, and all
+     // elements after index c are greater than the pivot. a and b track
+     // the elements equal to the pivot.
+     while (true)
+       {
+         while (b <= c && (comp = Float.compare(array[b], array[from])) <= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(a, b, array);
+                 a++;
+               }
+             b++;
+           }
+         while (c >= b && (comp = Float.compare(array[c], array[from])) >= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(c, d, array);
+                 d--;
+               }
+             c--;
+           }
+         if (b > c)
+           break;
+         swap(b, c, array);
+         b++;
+         c--;
+       }
+ 
+     // Swap pivot(s) back in place, the recurse on left and right sections.
+     hi = from + count;
+     int span;
+     span = Math.min(a - from, b - a);
+     vecswap(from, b - span, span, array);
+ 
+     span = Math.min(d - c, hi - d - 1);
+     vecswap(b, hi - span, span, array);
+ 
+     span = b - a;
+     if (span > 1)
+       qsort(array, from, span);
+ 
+     span = d - c;
+     if (span > 1)
+       qsort(array, hi - span, span);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the double array to sort
+    */
+   public static void sort(double[] a)
+   {
+     qsort(a, 0, a.length);
+   }
+ 
+   /**
+    * Performs a stable sort on the elements, arranging them according to their
+    * natural order.
+    *
+    * @param a the double array to sort
+    * @param fromIndex the first index to sort (inclusive)
+    * @param toIndex the last index to sort (exclusive)
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws ArrayIndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; a.length
+    */
+   public static void sort(double[] a, int fromIndex, int toIndex)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
+     qsort(a, fromIndex, toIndex - fromIndex);
+   }
+ 
+   /**
+    * Finds the index of the median of three array elements.
+    *
+    * @param a the first index
+    * @param b the second index
+    * @param c the third index
+    * @param d the array
+    * @return the index (a, b, or c) which has the middle value of the three
+    */
+   private static int med3(int a, int b, int c, double[] d)
+   {
+     return (Double.compare(d[a], d[b]) < 0
+             ? (Double.compare(d[b], d[c]) < 0 ? b
+                : Double.compare(d[a], d[c]) < 0 ? c : a)
+             : (Double.compare(d[b], d[c]) > 0 ? b
+                : Double.compare(d[a], d[c]) > 0 ? c : a));
+   }
+ 
+   /**
+    * Swaps the elements at two locations of an array
+    *
+    * @param i the first index
+    * @param j the second index
+    * @param a the array
+    */
+   private static void swap(int i, int j, double[] a)
+   {
+     double c = a[i];
+     a[i] = a[j];
+     a[j] = c;
+   }
+ 
+   /**
+    * Swaps two ranges of an array.
+    *
+    * @param i the first range start
+    * @param j the second range start
+    * @param n the element count
+    * @param a the array
+    */
+   private static void vecswap(int i, int j, int n, double[] a)
+   {
+     for ( ; n > 0; i++, j++, n--)
+       swap(i, j, a);
+   }
+ 
+   /**
+    * Performs a recursive modified quicksort.
+    *
+    * @param array the array to sort
+    * @param from the start index (inclusive)
+    * @param count the number of elements to sort
+    */
+   private static void qsort(double[] array, int from, int count)
+   {
+     // Use an insertion sort on small arrays.
+     if (count <= 7)
+       {
+         for (int i = from + 1; i < from + count; i++)
+           for (int j = i;
+                j > from && Double.compare(array[j - 1], array[j]) > 0;
+                j--)
+             {
+               swap(j, j - 1, array);
+             }
+         return;
+       }
+ 
+     // Determine a good median element.
+     int mid = count / 2;
+     int lo = from;
+     int hi = from + count - 1;
+ 
+     if (count > 40)
+       { // big arrays, pseudomedian of 9
+         int s = count / 8;
+         lo = med3(lo, lo + s, lo + 2 * s, array);
+         mid = med3(mid - s, mid, mid + s, array);
+         hi = med3(hi - 2 * s, hi - s, hi, array);
+       }
+     mid = med3(lo, mid, hi, array);
+ 
+     int a, b, c, d;
+     int comp;
+ 
+     // Pull the median element out of the fray, and use it as a pivot.
+     swap(from, mid, array);
+     a = b = from;
+     c = d = from + count - 1;
+ 
+     // Repeatedly move b and c to each other, swapping elements so
+     // that all elements before index b are less than the pivot, and all
+     // elements after index c are greater than the pivot. a and b track
+     // the elements equal to the pivot.
+     while (true)
+       {
+         while (b <= c && (comp = Double.compare(array[b], array[from])) <= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(a, b, array);
+                 a++;
+               }
+             b++;
+           }
+         while (c >= b && (comp = Double.compare(array[c], array[from])) >= 0)
+           {
+             if (comp == 0)
+               {
+                 swap(c, d, array);
+                 d--;
+               }
+             c--;
+           }
+         if (b > c)
+           break;
+         swap(b, c, array);
+         b++;
+         c--;
+       }
+ 
+     // Swap pivot(s) back in place, the recurse on left and right sections.
+     hi = from + count;
+     int span;
+     span = Math.min(a - from, b - a);
+     vecswap(from, b - span, span, array);
+ 
+     span = Math.min(d - c, hi - d - 1);
+     vecswap(b, hi - span, span, array);
+ 
+     span = b - a;
+     if (span > 1)
+       qsort(array, from, span);
+ 
+     span = d - c;
+     if (span > 1)
+       qsort(array, hi - span, span);
+   }
+ 
+   /**
+    * Sort an array of Objects according to their natural ordering. The sort is
+    * guaranteed to be stable, that is, equal elements will not be reordered.
+    * The sort algorithm is a mergesort with the merge omitted if the last
+    * element of one half comes before the first element of the other half. This
+    * algorithm gives guaranteed O(n*log(n)) time, at the expense of making a
+    * copy of the array.
+    *
+    * @param a the array to be sorted
+    * @throws ClassCastException if any two elements are not mutually
+    *         comparable
+    * @throws NullPointerException if an element is null (since
+    *         null.compareTo cannot work)
+    * @see Comparable
+    */
+   public static void sort(Object[] a)
+   {
+     sort(a, 0, a.length, null);
+   }
+ 
+   /**
+    * Sort an array of Objects according to a Comparator. The sort is
+    * guaranteed to be stable, that is, equal elements will not be reordered.
+    * The sort algorithm is a mergesort with the merge omitted if the last
+    * element of one half comes before the first element of the other half. This
+    * algorithm gives guaranteed O(n*log(n)) time, at the expense of making a
+    * copy of the array.
+    *
+    * @param a the array to be sorted
+    * @param c a Comparator to use in sorting the array; or null to indicate
+    *        the elements' natural order
+    * @throws ClassCastException if any two elements are not mutually
+    *         comparable by the Comparator provided
+    * @throws NullPointerException if a null element is compared with natural
+    *         ordering (only possible when c is null)
+    */
+   public static void sort(Object[] a, Comparator c)
+   {
+     sort(a, 0, a.length, c);
+   }
+ 
+   /**
+    * Sort an array of Objects according to their natural ordering. The sort is
+    * guaranteed to be stable, that is, equal elements will not be reordered.
+    * The sort algorithm is a mergesort with the merge omitted if the last
+    * element of one half comes before the first element of the other half. This
+    * algorithm gives guaranteed O(n*log(n)) time, at the expense of making a
+    * copy of the array.
+    *
+    * @param a the array to be sorted
+    * @param fromIndex the index of the first element to be sorted
+    * @param toIndex the index of the last element to be sorted plus one
+    * @throws ClassCastException if any two elements are not mutually
+    *         comparable
+    * @throws NullPointerException if an element is null (since
+    *         null.compareTo cannot work)
+    * @throws ArrayIndexOutOfBoundsException if fromIndex and toIndex
+    *         are not in range.
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    */
+   public static void sort(Object[] a, int fromIndex, int toIndex)
+   {
+     sort(a, fromIndex, toIndex, null);
+   }
+ 
+   /**
+    * Sort an array of Objects according to a Comparator. The sort is
+    * guaranteed to be stable, that is, equal elements will not be reordered.
+    * The sort algorithm is a mergesort with the merge omitted if the last
+    * element of one half comes before the first element of the other half. This
+    * algorithm gives guaranteed O(n*log(n)) time, at the expense of making a
+    * copy of the array.
+    *
+    * @param a the array to be sorted
+    * @param fromIndex the index of the first element to be sorted
+    * @param toIndex the index of the last element to be sorted plus one
+    * @param c a Comparator to use in sorting the array; or null to indicate
+    *        the elements' natural order
+    * @throws ClassCastException if any two elements are not mutually
+    *         comparable by the Comparator provided
+    * @throws ArrayIndexOutOfBoundsException if fromIndex and toIndex
+    *         are not in range.
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @throws NullPointerException if a null element is compared with natural
+    *         ordering (only possible when c is null)
+    */
+   public static void sort(Object[] a, int fromIndex, int toIndex, Comparator c)
+   {
+     if (fromIndex > toIndex)
+       throw new IllegalArgumentException("fromIndex " + fromIndex
+                                          + " > toIndex " + toIndex);
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
+ 
+     // In general, the code attempts to be simple rather than fast, the
+     // idea being that a good optimising JIT will be able to optimise it
+     // better than I can, and if I try it will make it more confusing for
+     // the JIT. First presort the array in chunks of length 6 with insertion
+     // sort. A mergesort would give too much overhead for this length.
+     for (int chunk = fromIndex; chunk < toIndex; chunk += 6)
+       {
+         int end = Math.min(chunk + 6, toIndex);
+         for (int i = chunk + 1; i < end; i++)
+           {
+             if (Collections.compare(a[i - 1], a[i], c) > 0)
+               {
+                 // not already sorted
+                 int j = i;
+                 Object elem = a[j];
+                 do
+                   {
+                     a[j] = a[j - 1];
+                     j--;
+                   }
+                 while (j > chunk
+                        && Collections.compare(a[j - 1], elem, c) > 0);
+                 a[j] = elem;
+               }
+           }
+       }
+ 
+     int len = toIndex - fromIndex;
+     // If length is smaller or equal 6 we are done.
+     if (len <= 6)
+       return;
+ 
+     Object[] src = a;
+     Object[] dest = new Object[len];
+     Object[] t = null; // t is used for swapping src and dest
+ 
+     // The difference of the fromIndex of the src and dest array.
+     int srcDestDiff = -fromIndex;
+ 
+     // The merges are done in this loop
+     for (int size = 6; size < len; size <<= 1)
+       {
+         for (int start = fromIndex; start < toIndex; start += size << 1)
+           {
+             // mid is the start of the second sublist;
+             // end the start of the next sublist (or end of array).
+             int mid = start + size;
+             int end = Math.min(toIndex, mid + size);
+ 
+             // The second list is empty or the elements are already in
+             // order - no need to merge
+             if (mid >= end
+                 || Collections.compare(src[mid - 1], src[mid], c) <= 0)
+               {
+                 System.arraycopy(src, start,
+                                  dest, start + srcDestDiff, end - start);
+ 
+                 // The two halves just need swapping - no need to merge
+               }
+             else if (Collections.compare(src[start], src[end - 1], c) > 0)
+               {
+                 System.arraycopy(src, start,
+                                  dest, end - size + srcDestDiff, size);
+                 System.arraycopy(src, mid,
+                                  dest, start + srcDestDiff, end - mid);
+ 
+               }
+             else
+               {
+                 // Declare a lot of variables to save repeating
+                 // calculations.  Hopefully a decent JIT will put these
+                 // in registers and make this fast
+                 int p1 = start;
+                 int p2 = mid;
+                 int i = start + srcDestDiff;
+ 
+                 // The main merge loop; terminates as soon as either
+                 // half is ended
+                 while (p1 < mid && p2 < end)
+                   {
+                     dest[i++] =
+                       src[(Collections.compare(src[p1], src[p2], c) <= 0
+                            ? p1++ : p2++)];
+                   }
+ 
+                 // Finish up by copying the remainder of whichever half
+                 // wasn't finished.
+                 if (p1 < mid)
+                   System.arraycopy(src, p1, dest, i, mid - p1);
+                 else
+                   System.arraycopy(src, p2, dest, i, end - p2);
+               }
+           }
+         // swap src and dest ready for the next merge
+         t = src;
+         src = dest;
+         dest = t;
+         fromIndex += srcDestDiff;
+         toIndex += srcDestDiff;
+         srcDestDiff = -srcDestDiff;
+       }
+ 
+     // make sure the result ends up back in the right place.  Note
+     // that src and dest may have been swapped above, so src
+     // contains the sorted array.
+     if (src != a)
+       {
+         // Note that fromIndex == 0.
+         System.arraycopy(src, 0, a, srcDestDiff, toIndex);
+       }
+   }
+ 
+   /**
+    * Returns a list "view" of the specified array. This method is intended to
+    * make it easy to use the Collections API with existing array-based APIs and
+    * programs. Changes in the list or the array show up in both places. The
+    * list does not support element addition or removal, but does permit
+    * value modification. The returned list implements both Serializable and
+    * RandomAccess.
+    *
+    * @param a the array to return a view of
+    * @return a fixed-size list, changes to which "write through" to the array
+    * @see Serializable
+    * @see RandomAccess
+    * @see Arrays.ArrayList
+    */
+   public static List asList(final Object[] a)
+   {
+     return new Arrays.ArrayList(a);
+   }
+ 
+   /**
+    * Returns a String representation of the argument array.  Returns "null"
+    * if <code>a</code> is null.
+    * @param a the array to represent
+    * @return a String representing this array
+    * @since 1.5
+    */
+   public static String toString (long[] a)
+   {
+     if (a == null)
+       return "null";
+     if (a.length == 0)
+       return "[]";
+     String result = "[";
+     for (int i = 0; i < a.length - 1; i++)
+       result += String.valueOf(a[i]) + ", ";
+     result += String.valueOf(a[a.length - 1]) + "]";
+     return result;
+   }  
+   
+   /**
+    * Returns a String representation of the argument array.  Returns "null"
+    * if <code>a</code> is null.
+    * @param a the array to represent
+    * @return a String representing this array
+    * @since 1.5
+    */
+   public static String toString (int[] a)
+   {
+     if (a == null)
+       return "null";
+     if (a.length == 0)
+       return "[]";
+     String result = "[";
+     for (int i = 0; i < a.length - 1; i++)
+       result += String.valueOf(a[i]) + ", ";
+     result += String.valueOf(a[a.length - 1]) + "]";
+     return result;
+   }  
+   
+   /**
+    * Returns a String representation of the argument array.  Returns "null"
+    * if <code>a</code> is null.
+    * @param a the array to represent
+    * @return a String representing this array
+    * @since 1.5
+    */
+   public static String toString (short[] a)
+   {
+     if (a == null)
+       return "null";
+     if (a.length == 0)
+       return "[]";
+     String result = "[";
+     for (int i = 0; i < a.length - 1; i++)
+       result += String.valueOf(a[i]) + ", ";
+     result += String.valueOf(a[a.length - 1]) + "]";
+     return result;
+   }  
+ 
+   /**
+    * Returns a String representation of the argument array.  Returns "null"
+    * if <code>a</code> is null.
+    * @param a the array to represent
+    * @return a String representing this array
+    * @since 1.5
+    */
+   public static String toString (char[] a)
+   {
+     if (a == null)
+       return "null";
+     if (a.length == 0)
+       return "[]";
+     String result = "[";
+     for (int i = 0; i < a.length - 1; i++)
+       result += String.valueOf(a[i]) + ", ";
+     result += String.valueOf(a[a.length - 1]) + "]";
+     return result;
+   }  
+ 
+   /**
+    * Returns a String representation of the argument array.  Returns "null"
+    * if <code>a</code> is null.
+    * @param a the array to represent
+    * @return a String representing this array
+    * @since 1.5
+    */
+   public static String toString (byte[] a)
+   {
+     if (a == null)
+       return "null";
+     if (a.length == 0)
+       return "[]";
+     String result = "[";
+     for (int i = 0; i < a.length - 1; i++)
+       result += String.valueOf(a[i]) + ", ";
+     result += String.valueOf(a[a.length - 1]) + "]";
+     return result;
+   }  
+ 
+   /**
+    * Returns a String representation of the argument array.  Returns "null"
+    * if <code>a</code> is null.
+    * @param a the array to represent
+    * @return a String representing this array
+    * @since 1.5
+    */
+   public static String toString (boolean[] a)
+   {
+     if (a == null)
+       return "null";
+     if (a.length == 0)
+       return "[]";
+     String result = "[";
+     for (int i = 0; i < a.length - 1; i++)
+       result += String.valueOf(a[i]) + ", ";
+     result += String.valueOf(a[a.length - 1]) + "]";
+     return result;
+   }  
+ 
+   /**
+    * Returns a String representation of the argument array.  Returns "null"
+    * if <code>a</code> is null.
+    * @param a the array to represent
+    * @return a String representing this array
+    * @since 1.5
+    */
+   public static String toString (float[] a)
+   {
+     if (a == null)
+       return "null";
+     if (a.length == 0)
+       return "[]";
+     String result = "[";
+     for (int i = 0; i < a.length - 1; i++)
+       result += String.valueOf(a[i]) + ", ";
+     result += String.valueOf(a[a.length - 1]) + "]";
+     return result;
+   }  
+   
+   /**
+    * Returns a String representation of the argument array.  Returns "null"
+    * if <code>a</code> is null.
+    * @param a the array to represent
+    * @return a String representing this array
+    * @since 1.5
+    */
+   public static String toString (double[] a)
+   {
+     if (a == null)
+       return "null";
+     if (a.length == 0)
+       return "[]";
+     String result = "[";
+     for (int i = 0; i < a.length - 1; i++)
+       result += String.valueOf(a[i]) + ", ";
+     result += String.valueOf(a[a.length - 1]) + "]";
+     return result;
+   }  
+ 
+   /**
+    * Returns a String representation of the argument array.  Returns "null"
+    * if <code>a</code> is null.
+    * @param a the array to represent
+    * @return a String representing this array
+    * @since 1.5
+    */
+   public static String toString (Object[] a)
+   {
+     if (a == null)
+       return "null";
+     if (a.length == 0)
+       return "[]";
+     String result = "[";
+     for (int i = 0; i < a.length - 1; i++)
+       result += String.valueOf(a[i]) + ", ";
+     result += String.valueOf(a[a.length - 1]) + "]";
+     return result;
+   }  
+ 
+   /**
+    * Inner class used by {@link #asList(Object[])} to provide a list interface
+    * to an array. The name, though it clashes with java.util.ArrayList, is
+    * Sun's choice for Serialization purposes. Element addition and removal
+    * is prohibited, but values can be modified.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @status updated to 1.4
+    */
+   private static final class ArrayList extends AbstractList
+     implements Serializable, RandomAccess
+   {
+     // We override the necessary methods, plus others which will be much
+     // more efficient with direct iteration rather than relying on iterator().
+ 
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -2764017481108945198L;
+ 
+     /**
+      * The array we are viewing.
+      * @serial the array
+      */
+     private final Object[] a;
+ 
+     /**
+      * Construct a list view of the array.
+      * @param a the array to view
+      * @throws NullPointerException if a is null
+      */
+     ArrayList(Object[] a)
+     {
+       // We have to explicitly check.
+       if (a == null)
+         throw new NullPointerException();
+       this.a = a;
+     }
+ 
+     /**
+      * Returns the object at the specified index in
+      * the array.
+      *
+      * @param index The index to retrieve an object from.
+      * @return The object at the array index specified.
+      */ 
+     public Object get(int index)
+     {
+       return a[index];
+     }
+ 
+     /**
+      * Returns the size of the array.
+      *
+      * @return The size.
+      */
+     public int size()
+     {
+       return a.length;
+     }
+ 
+     /**
+      * Replaces the object at the specified index
+      * with the supplied element.
+      *
+      * @param index The index at which to place the new object.
+      * @param element The new object.
+      * @return The object replaced by this operation.
+      */
+     public Object set(int index, Object element)
+     {
+       Object old = a[index];
+       a[index] = element;
+       return old;
+     }
+ 
+     /**
+      * Returns true if the array contains the
+      * supplied object.
+      *
+      * @param o The object to look for.
+      * @return True if the object was found.
+      */
+     public boolean contains(Object o)
+     {
+       return lastIndexOf(o) >= 0;
+     }
+ 
+     /**
+      * Returns the first index at which the
+      * object, o, occurs in the array.
+      *
+      * @param o The object to search for.
+      * @return The first relevant index.
+      */
+     public int indexOf(Object o)
+     {
+       int size = a.length;
+       for (int i = 0; i < size; i++)
+         if (ArrayList.equals(o, a[i]))
+           return i;
+       return -1;
+     }
+ 
+     /**
+      * Returns the last index at which the
+      * object, o, occurs in the array.
+      *
+      * @param o The object to search for.
+      * @return The last relevant index.
+      */
+     public int lastIndexOf(Object o)
+     {
+       int i = a.length;
+       while (--i >= 0)
+         if (ArrayList.equals(o, a[i]))
+           return i;
+       return -1;
+     }
+ 
+     /**
+      * Transforms the list into an array of
+      * objects, by simplying cloning the array
+      * wrapped by this list.
+      *
+      * @return A clone of the internal array.
+      */
+     public Object[] toArray()
+     {
+       return (Object[]) a.clone();
+     }
+ 
+     /**
+      * Copies the objects from this list into
+      * the supplied array.  The supplied array
+      * is shrunk or enlarged to the size of the
+      * internal array, and filled with its objects.
+      *
+      * @param array The array to fill with the objects in this list.
+      * @return The array containing the objects in this list,
+      *         which may or may not be == to array.
+      */
+     public Object[] toArray(Object[] array)
+     {
+       int size = a.length;
+       if (array.length < size)
+         array = (Object[])
+           Array.newInstance(array.getClass().getComponentType(), size);
+       else if (array.length > size)
+         array[size] = null;
+ 
+       System.arraycopy(a, 0, array, 0, size);
+       return array;
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/BitSet.java gcc-4.1.0/libjava/classpath/java/util/BitSet.java
*** gcc-4.0.2/libjava/classpath/java/util/BitSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/BitSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,744 ----
+ /* BitSet.java -- A vector of bits.
+    Copyright (C) 1998, 1999, 2000, 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util;
+ import java.io.Serializable;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * hashCode algorithm taken from JDK 1.2 docs.
+  */
+ 
+ /**
+  * This class can be thought of in two ways.  You can see it as a
+  * vector of bits or as a set of non-negative integers.  The name
+  * <code>BitSet</code> is a bit misleading.
+  *
+  * It is implemented by a bit vector, but its equally possible to see
+  * it as set of non-negative integer; each integer in the set is
+  * represented by a set bit at the corresponding index.  The size of
+  * this structure is determined by the highest integer in the set.
+  *
+  * You can union, intersect and build (symmetric) remainders, by
+  * invoking the logical operations and, or, andNot, resp. xor.
+  *
+  * This implementation is NOT synchronized against concurrent access from
+  * multiple threads. Specifically, if one thread is reading from a bitset
+  * while another thread is simultaneously modifying it, the results are
+  * undefined.
+  *
+  * @author Jochen Hoenicke
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @status updated to 1.4
+  */
+ public class BitSet implements Cloneable, Serializable
+ {
+   /**
+    * Compatible with JDK 1.0.
+    */
+   private static final long serialVersionUID = 7997698588986878753L;
+ 
+   /**
+    * A common mask.
+    */
+   private static final int LONG_MASK = 0x3f;
+ 
+   /**
+    * The actual bits.
+    * @serial the i'th bit is in bits[i/64] at position i%64 (where position
+    *         0 is the least significant).
+    */
+   private long[] bits;
+ 
+   /**
+    * Create a new empty bit set. All bits are initially false.
+    */
+   public BitSet()
+   {
+     this(64);
+   }
+ 
+   /**
+    * Create a new empty bit set, with a given size.  This
+    * constructor reserves enough space to represent the integers
+    * from <code>0</code> to <code>nbits-1</code>.
+    *
+    * @param nbits the initial size of the bit set
+    * @throws NegativeArraySizeException if nbits &lt; 0
+    */
+   public BitSet(int nbits)
+   {
+     if (nbits < 0)
+       throw new NegativeArraySizeException();
+     
+     int length = nbits >>> 6;
+     if ((nbits & LONG_MASK) != 0)
+       ++length;
+     bits = new long[length];
+   }
+ 
+   /**
+    * Performs the logical AND operation on this bit set and the
+    * given <code>set</code>.  This means it builds the intersection
+    * of the two sets.  The result is stored into this bit set.
+    *
+    * @param bs the second bit set
+    * @throws NullPointerException if bs is null
+    */
+   public void and(BitSet bs)
+   {
+     int max = Math.min(bits.length, bs.bits.length);
+     int i;
+     for (i = 0; i < max; ++i)
+       bits[i] &= bs.bits[i];
+     while (i < bits.length)
+       bits[i++] = 0;
+   }
+ 
+   /**
+    * Performs the logical AND operation on this bit set and the
+    * complement of the given <code>bs</code>.  This means it
+    * selects every element in the first set, that isn't in the
+    * second set.  The result is stored into this bit set and is
+    * effectively the set difference of the two.
+    *
+    * @param bs the second bit set
+    * @throws NullPointerException if bs is null
+    * @since 1.2
+    */
+   public void andNot(BitSet bs)
+   {
+     int i = Math.min(bits.length, bs.bits.length);
+     while (--i >= 0)
+       bits[i] &= ~bs.bits[i];
+   }
+ 
+   /**
+    * Returns the number of bits set to true.
+    *
+    * @return the number of true bits
+    * @since 1.4
+    */
+   public int cardinality()
+   {
+     int card = 0;
+     for (int i = bits.length - 1; i >= 0; i--)
+       {
+         long a = bits[i];
+         // Take care of common cases.
+         if (a == 0)
+           continue;
+         if (a == -1)
+           {
+             card += 64;
+             continue;
+           }
+ 
+         // Successively collapse alternating bit groups into a sum.
+         a = ((a >> 1) & 0x5555555555555555L) + (a & 0x5555555555555555L);
+         a = ((a >> 2) & 0x3333333333333333L) + (a & 0x3333333333333333L);
+         int b = (int) ((a >>> 32) + a);
+         b = ((b >> 4) & 0x0f0f0f0f) + (b & 0x0f0f0f0f);
+         b = ((b >> 8) & 0x00ff00ff) + (b & 0x00ff00ff);
+         card += ((b >> 16) & 0x0000ffff) + (b & 0x0000ffff);
+       }
+     return card;
+   }
+ 
+   /**
+    * Sets all bits in the set to false.
+    *
+    * @since 1.4
+    */
+   public void clear()
+   {
+     Arrays.fill(bits, 0);
+   }
+ 
+   /**
+    * Removes the integer <code>pos</code> from this set. That is
+    * the corresponding bit is cleared.  If the index is not in the set,
+    * this method does nothing.
+    *
+    * @param pos a non-negative integer
+    * @throws IndexOutOfBoundsException if pos &lt; 0
+    */
+   public void clear(int pos)
+   {
+     int offset = pos >> 6;
+     ensure(offset);
+     // ArrayIndexOutOfBoundsException subclasses IndexOutOfBoundsException,
+     // so we'll just let that be our exception.
+     bits[offset] &= ~(1L << pos);
+   }
+ 
+   /**
+    * Sets the bits between from (inclusive) and to (exclusive) to false.
+    *
+    * @param from the start range (inclusive)
+    * @param to the end range (exclusive)
+    * @throws IndexOutOfBoundsException if from &lt; 0 || to &lt; 0 ||
+    *         from &gt; to
+    * @since 1.4
+    */
+   public void clear(int from, int to)
+   {
+     if (from < 0 || from > to)
+       throw new IndexOutOfBoundsException();
+     if (from == to)
+       return;
+     int lo_offset = from >>> 6;
+     int hi_offset = to >>> 6;
+     ensure(hi_offset);
+     if (lo_offset == hi_offset)
+       {
+         bits[hi_offset] &= ((1L << from) - 1) | (-1L << to);
+         return;
+       }
+ 
+     bits[lo_offset] &= (1L << from) - 1;
+     bits[hi_offset] &= -1L << to;
+     for (int i = lo_offset + 1; i < hi_offset; i++)
+       bits[i] = 0;
+   }
+ 
+   /**
+    * Create a clone of this bit set, that is an instance of the same
+    * class and contains the same elements.  But it doesn't change when
+    * this bit set changes.
+    *
+    * @return the clone of this object.
+    */
+   public Object clone()
+   {
+     try
+       {
+         BitSet bs = (BitSet) super.clone();
+         bs.bits = (long[]) bits.clone();
+         return bs;
+       }
+     catch (CloneNotSupportedException e)
+       {
+         // Impossible to get here.
+         return null;
+       }
+   }
+ 
+   /**
+    * Returns true if the <code>obj</code> is a bit set that contains
+    * exactly the same elements as this bit set, otherwise false.
+    *
+    * @param obj the object to compare to
+    * @return true if obj equals this bit set
+    */
+   public boolean equals(Object obj)
+   {
+     if (!(obj instanceof BitSet))
+       return false;
+     BitSet bs = (BitSet) obj;
+     int max = Math.min(bits.length, bs.bits.length);
+     int i;
+     for (i = 0; i < max; ++i)
+       if (bits[i] != bs.bits[i])
+         return false;
+     // If one is larger, check to make sure all extra bits are 0.
+     for (int j = i; j < bits.length; ++j)
+       if (bits[j] != 0)
+         return false;
+     for (int j = i; j < bs.bits.length; ++j)
+       if (bs.bits[j] != 0)
+         return false;
+     return true;
+   }
+ 
+   /**
+    * Sets the bit at the index to the opposite value.
+    *
+    * @param index the index of the bit
+    * @throws IndexOutOfBoundsException if index is negative
+    * @since 1.4
+    */
+   public void flip(int index)
+   {
+     int offset = index >> 6;
+     ensure(offset);
+     // ArrayIndexOutOfBoundsException subclasses IndexOutOfBoundsException,
+     // so we'll just let that be our exception.
+     bits[offset] ^= 1L << index;
+   }
+ 
+   /**
+    * Sets a range of bits to the opposite value.
+    *
+    * @param from the low index (inclusive)
+    * @param to the high index (exclusive)
+    * @throws IndexOutOfBoundsException if from &gt; to || from &lt; 0 ||
+    *         to &lt; 0
+    * @since 1.4
+    */
+   public void flip(int from, int to)
+   {
+     if (from < 0 || from > to)
+       throw new IndexOutOfBoundsException();
+     if (from == to)
+       return;
+     int lo_offset = from >>> 6;
+     int hi_offset = to >>> 6;
+     ensure(hi_offset);
+     if (lo_offset == hi_offset)
+       {
+         bits[hi_offset] ^= (-1L << from) & ((1L << to) - 1);
+         return;
+       }
+ 
+     bits[lo_offset] ^= -1L << from;
+     bits[hi_offset] ^= (1L << to) - 1;
+     for (int i = lo_offset + 1; i < hi_offset; i++)
+       bits[i] ^= -1;
+   }
+ 
+   /**
+    * Returns true if the integer <code>bitIndex</code> is in this bit
+    * set, otherwise false.
+    *
+    * @param pos a non-negative integer
+    * @return the value of the bit at the specified position
+    * @throws IndexOutOfBoundsException if the pos is negative
+    */
+   public boolean get(int pos)
+   {
+     int offset = pos >> 6;
+     if (offset >= bits.length)
+       return false;
+     // ArrayIndexOutOfBoundsException subclasses IndexOutOfBoundsException,
+     // so we'll just let that be our exception.
+     return (bits[offset] & (1L << pos)) != 0;
+   }
+ 
+   /**
+    * Returns a new <code>BitSet</code> composed of a range of bits from
+    * this one.
+    *
+    * @param from the low index (inclusive)
+    * @param to the high index (exclusive)
+    * @throws IndexOutOfBoundsException if from &gt; to || from &lt; 0 ||
+    *         to &lt; 0
+    * @since 1.4
+    */
+   public BitSet get(int from, int to)
+   {
+     if (from < 0 || from > to)
+       throw new IndexOutOfBoundsException();
+     BitSet bs = new BitSet(to - from);
+     int lo_offset = from >>> 6;
+     if (lo_offset >= bits.length)
+       return bs;
+ 
+     int lo_bit = from & LONG_MASK;
+     int hi_offset = to >>> 6;
+     if (lo_bit == 0)
+       {
+         int len = Math.min(hi_offset - lo_offset + 1, bits.length - lo_offset);
+         System.arraycopy(bits, lo_offset, bs.bits, 0, len);
+         if (hi_offset < bits.length)
+           bs.bits[hi_offset - lo_offset] &= (1L << to) - 1;
+         return bs;
+       }
+ 
+     int len = Math.min(hi_offset, bits.length - 1);
+     int reverse = 64 - lo_bit;
+     int i;
+     for (i = 0; lo_offset < len; lo_offset++, i++)
+       bs.bits[i] = ((bits[lo_offset] >>> lo_bit)
+                     | (bits[lo_offset + 1] << reverse));
+     if ((to & LONG_MASK) > lo_bit)
+       bs.bits[i++] = bits[lo_offset] >>> lo_bit;
+     if (hi_offset < bits.length)
+       bs.bits[i - 1] &= (1L << (to - from)) - 1;
+     return bs;
+   }
+ 
+   /**
+    * Returns a hash code value for this bit set.  The hash code of
+    * two bit sets containing the same integers is identical.  The algorithm
+    * used to compute it is as follows:
+    *
+    * Suppose the bits in the BitSet were to be stored in an array of
+    * long integers called <code>bits</code>, in such a manner that
+    * bit <code>k</code> is set in the BitSet (for non-negative values
+    * of <code>k</code>) if and only if
+    *
+    * <code>((k/64) &lt; bits.length)
+    * && ((bits[k/64] & (1L &lt;&lt; (bit % 64))) != 0)
+    * </code>
+    *
+    * Then the following definition of the hashCode method
+    * would be a correct implementation of the actual algorithm:
+    *
+    * 
+ <pre>public int hashCode()
+ {
+   long h = 1234;
+   for (int i = bits.length-1; i &gt;= 0; i--)
+   {
+     h ^= bits[i] * (i + 1);
+   }
+ 
+   return (int)((h >> 32) ^ h);
+ }</pre>
+    *
+    * Note that the hash code values changes, if the set is changed.
+    *
+    * @return the hash code value for this bit set.
+    */
+   public int hashCode()
+   {
+     long h = 1234;
+     for (int i = bits.length; i > 0; )
+       h ^= i * bits[--i];
+     return (int) ((h >> 32) ^ h);
+   }
+ 
+   /**
+    * Returns true if the specified BitSet and this one share at least one
+    * common true bit.
+    *
+    * @param set the set to check for intersection
+    * @return true if the sets intersect
+    * @throws NullPointerException if set is null
+    * @since 1.4
+    */
+   public boolean intersects(BitSet set)
+   {
+     int i = Math.min(bits.length, set.bits.length);
+     while (--i >= 0)
+       if ((bits[i] & set.bits[i]) != 0)
+         return true;
+     return false;
+   }
+ 
+   /**
+    * Returns true if this set contains no true bits.
+    *
+    * @return true if all bits are false
+    * @since 1.4
+    */
+   public boolean isEmpty()
+   {
+     for (int i = bits.length - 1; i >= 0; i--)
+       if (bits[i] != 0)
+         return false;
+     return true;
+   }
+ 
+   /**
+    * Returns the logical number of bits actually used by this bit
+    * set.  It returns the index of the highest set bit plus one.
+    * Note that this method doesn't return the number of set bits.
+    *
+    * @return the index of the highest set bit plus one.
+    */
+   public int length()
+   {
+     // Set i to highest index that contains a non-zero value.
+     int i;
+     for (i = bits.length - 1; i >= 0 && bits[i] == 0; --i)
+       ;
+ 
+     // if i < 0 all bits are cleared.
+     if (i < 0)
+       return 0;
+ 
+     // Now determine the exact length.
+     long b = bits[i];
+     int len = (i + 1) * 64;
+     // b >= 0 checks if the highest bit is zero.
+     while (b >= 0)
+       {
+         --len;
+         b <<= 1;
+       }
+ 
+     return len;
+   }
+ 
+   /**
+    * Returns the index of the next false bit, from the specified bit
+    * (inclusive).
+    *
+    * @param from the start location
+    * @return the first false bit
+    * @throws IndexOutOfBoundsException if from is negative
+    * @since 1.4
+    */
+   public int nextClearBit(int from)
+   {
+     int offset = from >> 6;
+     long mask = 1L << from;
+     while (offset < bits.length)
+       {
+         // ArrayIndexOutOfBoundsException subclasses IndexOutOfBoundsException,
+         // so we'll just let that be our exception.
+         long h = bits[offset];
+         do
+           {
+             if ((h & mask) == 0)
+               return from;
+             mask <<= 1;
+             from++;
+           }
+         while (mask != 0);
+         mask = 1;
+         offset++;
+       }
+     return from;
+   }
+ 
+   /**
+    * Returns the index of the next true bit, from the specified bit
+    * (inclusive). If there is none, -1 is returned. You can iterate over
+    * all true bits with this loop:<br>
+    * 
+ <pre>for (int i = bs.nextSetBit(0); i &gt;= 0; i = bs.nextSetBit(i + 1))
+ {
+   // operate on i here
+ }</pre>
+    *
+    * @param from the start location
+    * @return the first true bit, or -1
+    * @throws IndexOutOfBoundsException if from is negative
+    * @since 1.4
+    */
+   public int nextSetBit(int from)
+   {
+     int offset = from >> 6;
+     long mask = 1L << from;
+     while (offset < bits.length)
+       {
+         // ArrayIndexOutOfBoundsException subclasses IndexOutOfBoundsException,
+         // so we'll just let that be our exception.
+         long h = bits[offset];
+         do
+           {
+             if ((h & mask) != 0)
+               return from;
+             mask <<= 1;
+             from++;
+           }
+         while (mask != 0);
+         mask = 1;
+         offset++;
+       }
+     return -1;
+   }
+ 
+   /**
+    * Performs the logical OR operation on this bit set and the
+    * given <code>set</code>.  This means it builds the union
+    * of the two sets.  The result is stored into this bit set, which
+    * grows as necessary.
+    *
+    * @param bs the second bit set
+    * @throws NullPointerException if bs is null
+    */
+   public void or(BitSet bs)
+   {
+     ensure(bs.bits.length - 1);
+     for (int i = bs.bits.length - 1; i >= 0; i--)
+       bits[i] |= bs.bits[i];
+   }
+ 
+   /**
+    * Add the integer <code>bitIndex</code> to this set.  That is
+    * the corresponding bit is set to true.  If the index was already in
+    * the set, this method does nothing.  The size of this structure
+    * is automatically increased as necessary.
+    *
+    * @param pos a non-negative integer.
+    * @throws IndexOutOfBoundsException if pos is negative
+    */
+   public void set(int pos)
+   {
+     int offset = pos >> 6;
+     ensure(offset);
+     // ArrayIndexOutOfBoundsException subclasses IndexOutOfBoundsException,
+     // so we'll just let that be our exception.
+     bits[offset] |= 1L << pos;
+   }
+ 
+   /**
+    * Sets the bit at the given index to the specified value. The size of
+    * this structure is automatically increased as necessary.
+    *
+    * @param index the position to set
+    * @param value the value to set it to
+    * @throws IndexOutOfBoundsException if index is negative
+    * @since 1.4
+    */
+   public void set(int index, boolean value)
+   {
+     if (value)
+       set(index);
+     else
+       clear(index);
+   }
+ 
+   /**
+    * Sets the bits between from (inclusive) and to (exclusive) to true.
+    *
+    * @param from the start range (inclusive)
+    * @param to the end range (exclusive)
+    * @throws IndexOutOfBoundsException if from &lt; 0 || from &gt; to ||
+    *         to &lt; 0
+    * @since 1.4
+    */
+   public void set(int from, int to)
+   {
+     if (from < 0 || from > to)
+       throw new IndexOutOfBoundsException();
+     if (from == to)
+       return;
+     int lo_offset = from >>> 6;
+     int hi_offset = to >>> 6;
+     ensure(hi_offset);
+     if (lo_offset == hi_offset)
+       {
+         bits[hi_offset] |= (-1L << from) & ((1L << to) - 1);
+         return;
+       }
+ 
+     bits[lo_offset] |= -1L << from;
+     bits[hi_offset] |= (1L << to) - 1;
+     for (int i = lo_offset + 1; i < hi_offset; i++)
+       bits[i] = -1;
+   }
+ 
+   /**
+    * Sets the bits between from (inclusive) and to (exclusive) to the
+    * specified value.
+    *
+    * @param from the start range (inclusive)
+    * @param to the end range (exclusive)
+    * @param value the value to set it to
+    * @throws IndexOutOfBoundsException if from &lt; 0 || from &gt; to ||
+    *         to &lt; 0
+    * @since 1.4
+    */
+   public void set(int from, int to, boolean value)
+   {
+     if (value)
+       set(from, to);
+     else
+       clear(from, to);
+   }
+ 
+   /**
+    * Returns the number of bits actually used by this bit set.  Note
+    * that this method doesn't return the number of set bits, and that
+    * future requests for larger bits will make this automatically grow.
+    *
+    * @return the number of bits currently used.
+    */
+   public int size()
+   {
+     return bits.length * 64;
+   }
+ 
+   /**
+    * Returns the string representation of this bit set.  This
+    * consists of a comma separated list of the integers in this set
+    * surrounded by curly braces.  There is a space after each comma.
+    * A sample string is thus "{1, 3, 53}".
+    * @return the string representation.
+    */
+   public String toString()
+   {
+     StringBuffer r = new StringBuffer("{");
+     boolean first = true;
+     for (int i = 0; i < bits.length; ++i)
+       {
+         long bit = 1;
+         long word = bits[i];
+         if (word == 0)
+           continue;
+         for (int j = 0; j < 64; ++j)
+           {
+             if ((word & bit) != 0)
+               {
+                 if (! first)
+                   r.append(", ");
+                 r.append(64 * i + j);
+                 first = false;
+               }
+             bit <<= 1;
+           }
+       }
+     return r.append("}").toString();
+   }
+ 
+   /**
+    * Performs the logical XOR operation on this bit set and the
+    * given <code>set</code>.  This means it builds the symmetric
+    * remainder of the two sets (the elements that are in one set,
+    * but not in the other).  The result is stored into this bit set,
+    * which grows as necessary.
+    *
+    * @param bs the second bit set
+    * @throws NullPointerException if bs is null
+    */
+   public void xor(BitSet bs)
+   {
+     ensure(bs.bits.length - 1);
+     for (int i = bs.bits.length - 1; i >= 0; i--)
+       bits[i] ^= bs.bits[i];
+   }
+ 
+   /**
+    * Make sure the vector is big enough.
+    *
+    * @param lastElt the size needed for the bits array
+    */
+   private void ensure(int lastElt)
+   {
+     if (lastElt >= bits.length)
+       {
+         long[] nd = new long[lastElt + 1];
+         System.arraycopy(bits, 0, nd, 0, bits.length);
+         bits = nd;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Calendar.java gcc-4.1.0/libjava/classpath/java/util/Calendar.java
*** gcc-4.0.2/libjava/classpath/java/util/Calendar.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Calendar.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1294 ----
+ /* Calendar.java --
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.InvocationTargetException;
+ 
+ /**
+  * This class is an abstract base class for Calendars, which can be
+  * used to convert between <code>Date</code> objects and a set of
+  * integer fields which represent <code>YEAR</code>,
+  * <code>MONTH</code>, <code>DAY</code>, etc.  The <code>Date</code>
+  * object represents a time in milliseconds since the Epoch. <br>
+  *
+  * This class is locale sensitive.  To get the Object matching the
+  * current locale you can use <code>getInstance</code>.  You can even provide
+  * a locale or a timezone.  <code>getInstance</code> returns currently
+  * a <code>GregorianCalendar</code> for the current date. <br>
+  *
+  * If you want to convert a date from the Year, Month, Day, DayOfWeek,
+  * etc.  Representation to a <code>Date</code>-Object, you can create
+  * a new Calendar with <code>getInstance()</code>,
+  * <code>clear()</code> all fields, <code>set(int,int)</code> the
+  * fields you need and convert it with <code>getTime()</code>. <br>
+  *
+  * If you want to convert a <code>Date</code>-object to the Calendar
+  * representation, create a new Calendar, assign the
+  * <code>Date</code>-Object with <code>setTime()</code>, and read the
+  * fields with <code>get(int)</code>. <br>
+  *
+  * When computing the date from time fields, it may happen, that there
+  * are either two few fields set, or some fields are inconsistent.  This
+  * cases will handled in a calendar specific way.  Missing fields are
+  * replaced by the fields of the epoch: 1970 January 1 00:00. <br>
+  *
+  * To understand, how the day of year is computed out of the fields
+  * look at the following table.  It is traversed from top to bottom,
+  * and for the first line all fields are set, that line is used to
+  * compute the day. <br>
+  *
+  *
+ <pre>month + day_of_month
+ month + week_of_month + day_of_week
+ month + day_of_week_of_month + day_of_week
+ day_of_year
+ day_of_week + week_of_year</pre>
+  *
+  * The hour_of_day-field takes precedence over the ampm and
+  * hour_of_ampm fields. <br>
+  *
+  * <STRONG>Note:</STRONG> This can differ for non-Gregorian calendar. <br>
+  *
+  * To convert a calendar to a human readable form and vice versa,  use
+  * the <code>java.text.DateFormat</code> class. <br>
+  *
+  * Other useful things you can do with an calendar, is
+  * <code>roll</code>ing fields (that means increase/decrease a
+  * specific field by one, propagating overflows), or
+  * <code>add</code>ing/substracting a fixed amount to a field.
+  *
+  * @see Date
+  * @see GregorianCalendar
+  * @see TimeZone
+  * @see java.text.DateFormat
+  */
+ public abstract class Calendar implements Serializable, Cloneable
+ {
+   /**
+    * Constant representing the era time field.
+    */
+   public static final int ERA = 0;
+ 
+   /**
+    * Constant representing the year time field.
+    */
+   public static final int YEAR = 1;
+ 
+   /**
+    * Constant representing the month time field.  This field
+    * should contain one of the JANUARY,...,DECEMBER constants below.
+    */
+   public static final int MONTH = 2;
+ 
+   /**
+    * Constant representing the week of the year field.
+    * @see #setFirstDayOfWeek(int)
+    */
+   public static final int WEEK_OF_YEAR = 3;
+ 
+   /**
+    * Constant representing the week of the month time field.
+    * @see #setFirstDayOfWeek(int)
+    */
+   public static final int WEEK_OF_MONTH = 4;
+ 
+   /**
+    * Constant representing the day time field, synonym for DAY_OF_MONTH.
+    */
+   public static final int DATE = 5;
+ 
+   /**
+    * Constant representing the day time field.
+    */
+   public static final int DAY_OF_MONTH = 5;
+ 
+   /**
+    * Constant representing the day of year time field.  This is
+    * 1 for the first day in month.
+    */
+   public static final int DAY_OF_YEAR = 6;
+ 
+   /**
+    * Constant representing the day of week time field.  This field
+    * should contain one of the SUNDAY,...,SATURDAY constants below.
+    */
+   public static final int DAY_OF_WEEK = 7;
+ 
+   /**
+    * Constant representing the day-of-week-in-month field.  For
+    * instance this field contains 2 for the second thursday in a
+    * month.  If you give a negative number here, the day will count
+    * from the end of the month.
+    */
+   public static final int DAY_OF_WEEK_IN_MONTH = 8;
+ 
+   /**
+    * Constant representing the part of the day for 12-hour clock.  This
+    * should be one of AM or PM.
+    */
+   public static final int AM_PM = 9;
+ 
+   /**
+    * Constant representing the hour time field for 12-hour clock.
+    */
+   public static final int HOUR = 10;
+ 
+   /**
+    * Constant representing the hour of day time field for 24-hour clock.
+    */
+   public static final int HOUR_OF_DAY = 11;
+ 
+   /**
+    * Constant representing the minute of hour time field.
+    */
+   public static final int MINUTE = 12;
+ 
+   /**
+    * Constant representing the second time field.
+    */
+   public static final int SECOND = 13;
+ 
+   /**
+    * Constant representing the millisecond time field.
+    */
+   public static final int MILLISECOND = 14;
+ 
+   /**
+    * Constant representing the time zone offset time field for the
+    * time given in the other fields.  It is measured in
+    * milliseconds.  The default is the offset of the time zone.
+    */
+   public static final int ZONE_OFFSET = 15;
+ 
+   /**
+    * Constant representing the daylight saving time offset in
+    * milliseconds.  The default is the value given by the time zone.
+    */
+   public static final int DST_OFFSET = 16;
+ 
+   /**
+    * Number of time fields.
+    */
+   public static final int FIELD_COUNT = 17;
+ 
+   /**
+    * Constant representing Sunday.
+    */
+   public static final int SUNDAY = 1;
+ 
+   /**
+    * Constant representing Monday.
+    */
+   public static final int MONDAY = 2;
+ 
+   /**
+    * Constant representing Tuesday.
+    */
+   public static final int TUESDAY = 3;
+ 
+   /**
+    * Constant representing Wednesday.
+    */
+   public static final int WEDNESDAY = 4;
+ 
+   /**
+    * Constant representing Thursday.
+    */
+   public static final int THURSDAY = 5;
+ 
+   /**
+    * Constant representing Friday.
+    */
+   public static final int FRIDAY = 6;
+ 
+   /**
+    * Constant representing Saturday.
+    */
+   public static final int SATURDAY = 7;
+ 
+   /**
+    * Constant representing January.
+    */
+   public static final int JANUARY = 0;
+ 
+   /**
+    * Constant representing February.
+    */
+   public static final int FEBRUARY = 1;
+ 
+   /**
+    * Constant representing March.
+    */
+   public static final int MARCH = 2;
+ 
+   /**
+    * Constant representing April.
+    */
+   public static final int APRIL = 3;
+ 
+   /**
+    * Constant representing May.
+    */
+   public static final int MAY = 4;
+ 
+   /**
+    * Constant representing June.
+    */
+   public static final int JUNE = 5;
+ 
+   /**
+    * Constant representing July.
+    */
+   public static final int JULY = 6;
+ 
+   /**
+    * Constant representing August.
+    */
+   public static final int AUGUST = 7;
+ 
+   /**
+    * Constant representing September.
+    */
+   public static final int SEPTEMBER = 8;
+ 
+   /**
+    * Constant representing October.
+    */
+   public static final int OCTOBER = 9;
+ 
+   /**
+    * Constant representing November.
+    */
+   public static final int NOVEMBER = 10;
+ 
+   /**
+    * Constant representing December.
+    */
+   public static final int DECEMBER = 11;
+ 
+   /**
+    * Constant representing Undecimber. This is an artificial name useful
+    * for lunar calendars.
+    */
+   public static final int UNDECIMBER = 12;
+ 
+   /**
+    * Useful constant for 12-hour clock.
+    */
+   public static final int AM = 0;
+ 
+   /**
+    * Useful constant for 12-hour clock.
+    */
+   public static final int PM = 1;
+ 
+   /**
+    * The time fields.  The array is indexed by the constants YEAR to
+    * DST_OFFSET.
+    * @serial
+    */
+   protected int[] fields = new int[FIELD_COUNT];
+ 
+   /**
+    * The flags which tell if the fields above have a value.
+    * @serial
+    */
+   protected boolean[] isSet = new boolean[FIELD_COUNT];
+ 
+   /**
+    * The time in milliseconds since the epoch.
+    * @serial
+    */
+   protected long time;
+ 
+   /**
+    * Tells if the above field has a valid value.
+    * @serial
+    */
+   protected boolean isTimeSet;
+ 
+   /**
+    * Tells if the fields have a valid value.  This superseeds the isSet
+    * array.
+    * @serial
+    */
+   protected boolean areFieldsSet;
+ 
+   /**
+    * The time zone of this calendar.  Used by sub classes to do UTC / local
+    * time conversion.  Sub classes can access this field with getTimeZone().
+    * @serial
+    */
+   private TimeZone zone;
+ 
+   /**
+    * This is the default calendar class, that is returned on
+    * java.util.Calendar.getInstance().
+    * XXX - this isn't localized anywhere, is it?
+    * @see java.util.Calendar#getInstance()
+    */
+   private static final String calendarClassName = "java.util.GregorianCalendar";
+ 
+   /**
+    * Specifies if the date/time interpretation should be lenient.
+    * If the flag is set, a date such as "February 30, 1996" will be
+    * treated as the 29th day after the February 1.  If this flag
+    * is false, such dates will cause an exception.
+    * @serial
+    */
+   private boolean lenient;
+ 
+   /**
+    * Sets what the first day of week is.  This is used for
+    * WEEK_OF_MONTH and WEEK_OF_YEAR fields.
+    * @serial
+    */
+   private int firstDayOfWeek;
+ 
+   /**
+    * Sets how many days are required in the first week of the year.
+    * If the first day of the year should be the first week you should
+    * set this value to 1.  If the first week must be a full week, set
+    * it to 7.
+    * @serial
+    */
+   private int minimalDaysInFirstWeek;
+ 
+   /**
+    * Is set to true if DST_OFFSET is explicitly set. In that case
+    * it's value overrides the value computed from the current
+    * time and the timezone.
+    */
+   private boolean explicitDSTOffset = false;
+ 
+   /**
+    * The version of the serialized data on the stream.
+    * <dl><dt>0 or not present</dt>
+    * <dd> JDK 1.1.5 or later.</dd>
+    * <dt>1</dt>
+    * <dd>JDK 1.1.6 or later.  This always writes a correct `time' value
+    * on the stream, as well as the other fields, to be compatible with
+    * earlier versions</dd></dl>
+    * @since JDK1.1.6
+    * @serial
+    */
+   private int serialVersionOnStream = 1;
+ 
+   /**
+    * XXX - I have not checked the compatibility.  The documentation of
+    * the serialized-form is quite hairy...
+    */
+   static final long serialVersionUID = -1807547505821590642L;
+ 
+   /**
+    * The name of the resource bundle. Used only by getBundle()
+    */
+   private static final String bundleName = "gnu.java.locale.LocaleInformation";
+ 
+   /**
+    * get resource bundle:
+    * The resources should be loaded via this method only. Iff an application
+    * uses this method, the resourcebundle is required.
+    */
+   private static ResourceBundle getBundle(Locale locale)
+   {
+     return ResourceBundle.getBundle(bundleName, locale,
+                                     ClassLoader.getSystemClassLoader());
+   }
+ 
+   /**
+    * Constructs a new Calendar with the default time zone and the default
+    * locale.
+    */
+   protected Calendar()
+   {
+     this(TimeZone.getDefault(), Locale.getDefault());
+   }
+ 
+   /**
+    * Constructs a new Calendar with the given time zone and the given
+    * locale.
+    * @param zone a time zone.
+    * @param locale a locale.
+    */
+   protected Calendar(TimeZone zone, Locale locale)
+   {
+     this.zone = zone;
+     lenient = true;
+     String[] days = { "", "sun", "mon", "tue", "wed", "thu", "fri", "sat" };
+ 
+     ResourceBundle rb = getBundle(locale);
+     String min = (String) rb.getObject("minNumberOfDaysInFirstWeek");
+     String first = (String) rb.getObject("firstDayOfWeek");
+     try
+       {
+ 	if (min != null)
+ 	  minimalDaysInFirstWeek = Integer.parseInt(min);
+       }
+     catch (NumberFormatException ex)
+       {
+ 	minimalDaysInFirstWeek = 1;
+       }
+ 
+     firstDayOfWeek = 1;
+     if (first != null)
+       for (int i = 0; i < 8; i++)
+ 	if (days[i].equals(first))
+ 	  firstDayOfWeek = i;
+ 
+     clear();
+   }
+ 
+   /**
+    * Creates a calendar representing the actual time, using the default
+    * time zone and locale.
+    */
+   public static synchronized Calendar getInstance()
+   {
+     return getInstance(TimeZone.getDefault(), Locale.getDefault());
+   }
+ 
+   /**
+    * Creates a calendar representing the actual time, using the given
+    * time zone and the default locale.
+    * @param zone a time zone.
+    */
+   public static synchronized Calendar getInstance(TimeZone zone)
+   {
+     return getInstance(zone, Locale.getDefault());
+   }
+ 
+   /**
+    * Creates a calendar representing the actual time, using the default
+    * time zone and the given locale.
+    * @param locale a locale.
+    */
+   public static synchronized Calendar getInstance(Locale locale)
+   {
+     return getInstance(TimeZone.getDefault(), locale);
+   }
+ 
+   /**
+    * Cache of locale->calendar-class mappings. This avoids having to do a ResourceBundle
+    * lookup for every getInstance call.
+    */
+   private static HashMap cache = new HashMap();
+ 
+   /** Preset argument types for calendar-class constructor lookup.  */
+   private static Class[] ctorArgTypes = new Class[]
+                                         {
+                                           TimeZone.class, Locale.class
+                                         };
+ 
+   /**
+    * Creates a calendar representing the actual time, using the given
+    * time zone and locale.
+    * @param zone a time zone.
+    * @param locale a locale.
+    */
+   public static synchronized Calendar getInstance(TimeZone zone, Locale locale)
+   {
+     Class calendarClass = (Class) cache.get(locale);
+     Throwable exception = null;
+ 
+     try
+       {
+ 	if (calendarClass == null)
+ 	  {
+ 	    calendarClass = Class.forName(calendarClassName);
+ 	    if (Calendar.class.isAssignableFrom(calendarClass))
+ 	      cache.put(locale, calendarClass);
+ 	  }
+ 
+ 	// GregorianCalendar is by far the most common case. Optimize by 
+ 	// avoiding reflection.
+ 	if (calendarClass == GregorianCalendar.class)
+ 	  return new GregorianCalendar(zone, locale);
+ 
+ 	if (Calendar.class.isAssignableFrom(calendarClass))
+ 	  {
+ 	    Constructor ctor = calendarClass.getConstructor(ctorArgTypes);
+ 	    return (Calendar) ctor.newInstance(new Object[] { zone, locale });
+ 	  }
+       }
+     catch (ClassNotFoundException ex)
+       {
+ 	exception = ex;
+       }
+     catch (IllegalAccessException ex)
+       {
+ 	exception = ex;
+       }
+     catch (NoSuchMethodException ex)
+       {
+ 	exception = ex;
+       }
+     catch (InstantiationException ex)
+       {
+ 	exception = ex;
+       }
+     catch (InvocationTargetException ex)
+       {
+ 	exception = ex;
+       }
+ 
+     throw new RuntimeException("Error instantiating calendar for locale "
+                                + locale, exception);
+   }
+ 
+   /**
+    * Gets the set of locales for which a Calendar is available.
+    * @exception MissingResourceException if locale data couldn't be found.
+    * @return the set of locales.
+    */
+   public static synchronized Locale[] getAvailableLocales()
+   {
+     ResourceBundle rb = getBundle(new Locale("", ""));
+     return (Locale[]) rb.getObject("availableLocales");
+   }
+ 
+   /**
+    * Converts the time field values (<code>fields</code>) to
+    * milliseconds since the epoch UTC (<code>time</code>).  Override
+    * this method if you write your own Calendar.  */
+   protected abstract void computeTime();
+ 
+   /**
+    * Converts the milliseconds since the epoch UTC
+    * (<code>time</code>) to time fields
+    * (<code>fields</code>). Override this method if you write your
+    * own Calendar.
+    */
+   protected abstract void computeFields();
+ 
+   /**
+    * Converts the time represented by this object to a
+    * <code>Date</code>-Object.
+    * @return the Date.
+    */
+   public final Date getTime()
+   {
+     if (! isTimeSet)
+       computeTime();
+     return new Date(time);
+   }
+ 
+   /**
+    * Sets this Calendar's time to the given Date.  All time fields
+    * are invalidated by this method.
+    */
+   public final void setTime(Date date)
+   {
+     setTimeInMillis(date.getTime());
+   }
+ 
+   /**
+    * Returns the time represented by this Calendar.
+    * @return the time in milliseconds since the epoch.
+    * @specnote This was made public in 1.4.
+    */
+   public long getTimeInMillis()
+   {
+     if (! isTimeSet)
+       computeTime();
+     return time;
+   }
+ 
+   /**
+    * Sets this Calendar's time to the given Time.  All time fields
+    * are invalidated by this method.
+    * @param time the time in milliseconds since the epoch
+    * @specnote This was made public in 1.4.
+    */
+   public void setTimeInMillis(long time)
+   {
+     clear();
+     this.time = time;
+     isTimeSet = true;
+     computeFields();
+   }
+ 
+   /**
+    * Gets the value of the specified field.  They are recomputed
+    * if they are invalid.
+    * @param field the time field. One of the time field constants.
+    * @return the value of the specified field
+    * @throws ArrayIndexOutOfBoundsException if the field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    * @specnote Not final since JDK 1.4
+    */
+   public int get(int field)
+   {
+     // If the requested field is invalid, force all fields to be recomputed.
+     if (! isSet[field])
+       areFieldsSet = false;
+     complete();
+     return fields[field];
+   }
+ 
+   /**
+    * Gets the value of the specified field. This method doesn't
+    * recompute the fields, if they are invalid.
+    * @param field the time field. One of the time field constants.
+    * @return the value of the specified field, undefined if
+    * <code>areFieldsSet</code> or <code>isSet[field]</code> is false.
+    * @throws ArrayIndexOutOfBoundsException if the field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    */
+   protected final int internalGet(int field)
+   {
+     return fields[field];
+   }
+ 
+   /**
+    * Sets the time field with the given value.  This does invalidate
+    * the time in milliseconds.
+    * @param field the time field. One of the time field constants
+    * @param value the value to be set.
+    * @throws ArrayIndexOutOfBoundsException if field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    * @specnote Not final since JDK 1.4
+    */
+   public void set(int field, int value)
+   {
+     if (isTimeSet)
+       for (int i = 0; i < FIELD_COUNT; i++)
+ 	isSet[i] = false;
+     isTimeSet = false;
+     fields[field] = value;
+     isSet[field] = true;
+ 
+     // The five valid date patterns, in order of priority
+     // 1  YEAR + MONTH + DAY_OF_MONTH
+     // 2  YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
+     // 3  YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
+     // 4  YEAR + DAY_OF_YEAR
+     // 5  YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
+     switch (field)
+       {
+       case MONTH: // pattern 1,2 or 3
+ 	isSet[DAY_OF_YEAR] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	break;
+       case DAY_OF_MONTH: // pattern 1
+ 	isSet[YEAR] = true;
+ 	isSet[MONTH] = true;
+ 	isSet[WEEK_OF_MONTH] = true;
+ 	isSet[DAY_OF_WEEK] = false;
+ 	isSet[DAY_OF_WEEK_IN_MONTH] = false;
+ 	isSet[DAY_OF_YEAR] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	break;
+       case WEEK_OF_MONTH: // pattern 2
+ 	if (! isSet[DAY_OF_WEEK])
+ 	  fields[DAY_OF_WEEK] = getFirstDayOfWeek();
+ 	isSet[YEAR] = true;
+ 	isSet[MONTH] = true;
+ 	isSet[DAY_OF_WEEK] = true;
+ 	isSet[DAY_OF_MONTH] = false;
+ 	isSet[DAY_OF_WEEK_IN_MONTH] = false;
+ 	isSet[DAY_OF_YEAR] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	break;
+       case DAY_OF_WEEK_IN_MONTH: // pattern 3
+ 	if (! isSet[DAY_OF_WEEK])
+ 	  fields[DAY_OF_WEEK] = getFirstDayOfWeek();
+ 	isSet[YEAR] = true;
+ 	isSet[MONTH] = true;
+ 	isSet[DAY_OF_WEEK] = true;
+ 	isSet[DAY_OF_YEAR] = false;
+ 	isSet[DAY_OF_MONTH] = false;
+ 	isSet[WEEK_OF_MONTH] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	break;
+       case DAY_OF_YEAR: // pattern 4
+ 	isSet[YEAR] = true;
+ 	isSet[MONTH] = false;
+ 	isSet[WEEK_OF_MONTH] = false;
+ 	isSet[DAY_OF_MONTH] = false;
+ 	isSet[DAY_OF_WEEK] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	isSet[DAY_OF_WEEK_IN_MONTH] = false;
+ 	break;
+       case WEEK_OF_YEAR: // pattern 5
+ 	if (! isSet[DAY_OF_WEEK])
+ 	  fields[DAY_OF_WEEK] = getFirstDayOfWeek();
+ 	isSet[YEAR] = true;
+ 	isSet[DAY_OF_WEEK] = true;
+ 	isSet[MONTH] = false;
+ 	isSet[DAY_OF_MONTH] = false;
+ 	isSet[WEEK_OF_MONTH] = false;
+ 	isSet[DAY_OF_YEAR] = false;
+ 	isSet[DAY_OF_WEEK_IN_MONTH] = false;
+ 	break;
+       case AM_PM:
+ 	isSet[HOUR] = true;
+ 	isSet[HOUR_OF_DAY] = false;
+ 	break;
+       case HOUR_OF_DAY:
+ 	isSet[AM_PM] = false;
+ 	isSet[HOUR] = false;
+ 	break;
+       case HOUR:
+ 	isSet[AM_PM] = true;
+ 	isSet[HOUR_OF_DAY] = false;
+ 	break;
+       case DST_OFFSET:
+ 	explicitDSTOffset = true;
+       }
+ 
+     // May have crossed over a DST boundary.
+     if (! explicitDSTOffset && (field != DST_OFFSET && field != ZONE_OFFSET))
+       isSet[DST_OFFSET] = false;
+   }
+ 
+   /**
+    * Sets the fields for year, month, and date
+    * @param year the year.
+    * @param month the month, one of the constants JANUARY..UNDICEMBER.
+    * @param date the day of the month
+    */
+   public final void set(int year, int month, int date)
+   {
+     isTimeSet = false;
+     fields[YEAR] = year;
+     fields[MONTH] = month;
+     fields[DATE] = date;
+     isSet[YEAR] = isSet[MONTH] = isSet[DATE] = true;
+     isSet[WEEK_OF_YEAR] = false;
+     isSet[DAY_OF_YEAR] = false;
+     isSet[WEEK_OF_MONTH] = false;
+     isSet[DAY_OF_WEEK] = false;
+     isSet[DAY_OF_WEEK_IN_MONTH] = false;
+     isSet[ERA] = false;
+ 
+     if (! explicitDSTOffset)
+       isSet[DST_OFFSET] = false; // May have crossed a DST boundary.
+   }
+ 
+   /**
+    * Sets the fields for year, month, date, hour, and minute
+    * @param year the year.
+    * @param month the month, one of the constants JANUARY..UNDICEMBER.
+    * @param date the day of the month
+    * @param hour the hour of day.
+    * @param minute the minute.
+    */
+   public final void set(int year, int month, int date, int hour, int minute)
+   {
+     set(year, month, date);
+     fields[HOUR_OF_DAY] = hour;
+     fields[MINUTE] = minute;
+     isSet[HOUR_OF_DAY] = isSet[MINUTE] = true;
+     isSet[AM_PM] = false;
+     isSet[HOUR] = false;
+   }
+ 
+   /**
+    * Sets the fields for year, month, date, hour, and minute
+    * @param year the year.
+    * @param month the month, one of the constants JANUARY..UNDICEMBER.
+    * @param date the day of the month
+    * @param hour the hour of day.
+    * @param minute the minute.
+    * @param second the second.
+    */
+   public final void set(int year, int month, int date, int hour, int minute,
+                         int second)
+   {
+     set(year, month, date, hour, minute);
+     fields[SECOND] = second;
+     isSet[SECOND] = true;
+   }
+ 
+   /**
+    * Clears the values of all the time fields.
+    */
+   public final void clear()
+   {
+     isTimeSet = false;
+     areFieldsSet = false;
+     int zoneOffs = zone.getRawOffset();
+     int[] tempFields = 
+                        {
+                          1, 1970, JANUARY, 1, 1, 1, 1, THURSDAY, 1, AM, 0, 0, 0,
+                          0, 0, zoneOffs, 0
+                        };
+     fields = tempFields;
+     for (int i = 0; i < FIELD_COUNT; i++)
+       isSet[i] = false;
+   }
+ 
+   /**
+    * Clears the values of the specified time field.
+    * @param field the time field. One of the time field constants.
+    * @throws ArrayIndexOutOfBoundsException if field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    */
+   public final void clear(int field)
+   {
+     int[] tempFields = 
+                        {
+                          1, 1970, JANUARY, 1, 1, 1, 1, THURSDAY, 1, AM, 0, 0, 0,
+                          0, 0, zone.getRawOffset(), 0
+                        };
+     isTimeSet = false;
+     areFieldsSet = false;
+     isSet[field] = false;
+     fields[field] = tempFields[field];
+   }
+ 
+   /**
+    * Determines if the specified field has a valid value.
+    * @return true if the specified field has a value.
+    * @throws ArrayIndexOutOfBoundsException if the field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    */
+   public final boolean isSet(int field)
+   {
+     return isSet[field];
+   }
+ 
+   /**
+    * Fills any unset fields in the time field list
+    */
+   protected void complete()
+   {
+     if (! isTimeSet)
+       computeTime();
+     if (! areFieldsSet)
+       computeFields();
+   }
+ 
+   /**
+    * Compares the given calendar with this.
+    * @param o the object to that we should compare.
+    * @return true, if the given object is a calendar, that represents
+    * the same time (but doesn't necessary have the same fields).
+    */
+   public boolean equals(Object o)
+   {
+     if (! (o instanceof Calendar))
+       return false;
+     Calendar cal = (Calendar) o;
+     if (getTimeInMillis() == ((Calendar) o).getTimeInMillis()
+         && cal.getFirstDayOfWeek() == getFirstDayOfWeek()
+         && cal.isLenient() == isLenient()
+         && cal.getMinimalDaysInFirstWeek() == getMinimalDaysInFirstWeek())
+       {
+         TimeZone self = getTimeZone();
+         TimeZone oth = cal.getTimeZone();
+         return self == null ? oth == null : self.equals(oth);
+       }
+     return false;
+   }
+ 
+   /**
+    * Returns a hash code for this calendar.
+    * @return a hash code, which fullfits the general contract of
+    * <code>hashCode()</code>
+    */
+   public int hashCode()
+   {
+     long time = getTimeInMillis();
+     int val = (int) ((time & 0xffffffffL) ^ (time >> 32));
+     val += (getFirstDayOfWeek() + (isLenient() ? 1230 : 1237)
+             + getMinimalDaysInFirstWeek());
+     TimeZone self = getTimeZone();
+     if (self != null)
+       val ^= self.hashCode();
+     return val;
+   }
+ 
+   /**
+    * Compares the given calendar with this.
+    * @param o the object to that we should compare.
+    * @return true, if the given object is a calendar, and this calendar
+    * represents a smaller time than the calendar o.
+    * @exception ClassCastException if o is not an calendar.
+    * @since JDK1.2 you don't need to override this method
+    */
+   public boolean before(Object o)
+   {
+     return getTimeInMillis() < ((Calendar) o).getTimeInMillis();
+   }
+ 
+   /**
+    * Compares the given calendar with this.
+    * @param o the object to that we should compare.
+    * @return true, if the given object is a calendar, and this calendar
+    * represents a bigger time than the calendar o.
+    * @exception ClassCastException if o is not an calendar.
+    * @since JDK1.2 you don't need to override this method
+    */
+   public boolean after(Object o)
+   {
+     return getTimeInMillis() > ((Calendar) o).getTimeInMillis();
+   }
+ 
+   /**
+    * Adds the specified amount of time to the given time field.  The
+    * amount may be negative to subtract the time.  If the field overflows
+    * it does what you expect: Jan, 25 + 10 Days is Feb, 4.
+    * @param field the time field. One of the time field constants.
+    * @param amount the amount of time.
+    * @throws ArrayIndexOutOfBoundsException if the field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    */
+   public abstract void add(int field, int amount);
+ 
+   /**
+    * Rolls the specified time field up or down.  This means add one
+    * to the specified field, but don't change the other fields.  If
+    * the maximum for this field is reached, start over with the
+    * minimum value.  <br>
+    *
+    * <strong>Note:</strong> There may be situation, where the other
+    * fields must be changed, e.g rolling the month on May, 31.
+    * The date June, 31 is automatically converted to July, 1.
+    * @param field the time field. One of the time field constants.
+    * @param up the direction, true for up, false for down.
+    * @throws ArrayIndexOutOfBoundsException if the field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    */
+   public abstract void roll(int field, boolean up);
+ 
+   /**
+    * Rolls up or down the specified time field by the given amount.
+    * A negative amount rolls down.  The default implementation is
+    * call <code>roll(int, boolean)</code> for the specified amount.
+    *
+    * Subclasses should override this method to do more intuitiv things.
+    *
+    * @param field the time field. One of the time field constants.
+    * @param amount the amount to roll by, positive for rolling up,
+    * negative for rolling down.
+    * @throws ArrayIndexOutOfBoundsException if the field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    * @since JDK1.2
+    */
+   public void roll(int field, int amount)
+   {
+     while (amount > 0)
+       {
+ 	roll(field, true);
+ 	amount--;
+       }
+     while (amount < 0)
+       {
+ 	roll(field, false);
+ 	amount++;
+       }
+   }
+ 
+   /**
+    * Sets the time zone to the specified value.
+    * @param zone the new time zone
+    */
+   public void setTimeZone(TimeZone zone)
+   {
+     this.zone = zone;
+   }
+ 
+   /**
+    * Gets the time zone of this calendar
+    * @return the current time zone.
+    */
+   public TimeZone getTimeZone()
+   {
+     return zone;
+   }
+ 
+   /**
+    * Specifies if the date/time interpretation should be lenient.
+    * If the flag is set, a date such as "February 30, 1996" will be
+    * treated as the 29th day after the February 1.  If this flag
+    * is false, such dates will cause an exception.
+    * @param lenient true, if the date should be interpreted linient,
+    * false if it should be interpreted strict.
+    */
+   public void setLenient(boolean lenient)
+   {
+     this.lenient = lenient;
+   }
+ 
+   /**
+    * Tells if the date/time interpretation is lenient.
+    * @return true, if the date should be interpreted linient,
+    * false if it should be interpreted strict.
+    */
+   public boolean isLenient()
+   {
+     return lenient;
+   }
+ 
+   /**
+    * Sets what the first day of week is.  This is used for
+    * WEEK_OF_MONTH and WEEK_OF_YEAR fields.
+    * @param value the first day of week.  One of SUNDAY to SATURDAY.
+    */
+   public void setFirstDayOfWeek(int value)
+   {
+     firstDayOfWeek = value;
+   }
+ 
+   /**
+    * Gets what the first day of week is.  This is used for
+    * WEEK_OF_MONTH and WEEK_OF_YEAR fields.
+    * @return the first day of week.  One of SUNDAY to SATURDAY.
+    */
+   public int getFirstDayOfWeek()
+   {
+     return firstDayOfWeek;
+   }
+ 
+   /**
+    * Sets how many days are required in the first week of the year.
+    * If the first day of the year should be the first week you should
+    * set this value to 1.  If the first week must be a full week, set
+    * it to 7.
+    * @param value the minimal days required in the first week.
+    */
+   public void setMinimalDaysInFirstWeek(int value)
+   {
+     minimalDaysInFirstWeek = value;
+   }
+ 
+   /**
+    * Gets how many days are required in the first week of the year.
+    * @return the minimal days required in the first week.
+    * @see #setMinimalDaysInFirstWeek
+    */
+   public int getMinimalDaysInFirstWeek()
+   {
+     return minimalDaysInFirstWeek;
+   }
+ 
+   /**
+    * Gets the smallest value that is allowed for the specified field.
+    * @param field the time field. One of the time field constants.
+    * @return the smallest value.
+    */
+   public abstract int getMinimum(int field);
+ 
+   /**
+    * Gets the biggest value that is allowed for the specified field.
+    * @param field the time field. One of the time field constants.
+    * @return the biggest value.
+    */
+   public abstract int getMaximum(int field);
+ 
+   /**
+    * Gets the greatest minimum value that is allowed for the specified field.
+    * @param field the time field. One of the time field constants.
+    * @return the greatest minimum value.
+    */
+   public abstract int getGreatestMinimum(int field);
+ 
+   /**
+    * Gets the smallest maximum value that is allowed for the
+    * specified field.  For example this is 28 for DAY_OF_MONTH.
+    * @param field the time field. One of the time field constants.
+    * @return the least maximum value.
+    */
+   public abstract int getLeastMaximum(int field);
+ 
+   /**
+    * Gets the actual minimum value that is allowed for the specified field.
+    * This value is dependent on the values of the other fields.
+    * @param field the time field. One of the time field constants.
+    * @return the actual minimum value.
+    * @throws ArrayIndexOutOfBoundsException if the field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    * @since jdk1.2
+    */
+   public int getActualMinimum(int field)
+   {
+     Calendar tmp = (Calendar) clone(); // To avoid restoring state
+     int min = tmp.getGreatestMinimum(field);
+     int end = tmp.getMinimum(field);
+     tmp.set(field, min);
+     for (; min > end; min--)
+       {
+ 	tmp.add(field, -1); // Try to get smaller
+ 	if (tmp.get(field) != min - 1)
+ 	  break; // Done if not successful
+       }
+     return min;
+   }
+ 
+   /**
+    * Gets the actual maximum value that is allowed for the specified field.
+    * This value is dependent on the values of the other fields.
+    * @param field the time field. One of the time field constants.
+    * @return the actual maximum value.
+    * @throws ArrayIndexOutOfBoundsException if the field is outside
+    *         the valid range.  The value of field must be >= 0 and
+    *         <= <code>FIELD_COUNT</code>.
+    * @since jdk1.2
+    */
+   public int getActualMaximum(int field)
+   {
+     Calendar tmp = (Calendar) clone(); // To avoid restoring state
+     int max = tmp.getLeastMaximum(field);
+     int end = tmp.getMaximum(field);
+     tmp.set(field, max);
+     for (; max < end; max++)
+       {
+ 	tmp.add(field, 1);
+ 	if (tmp.get(field) != max + 1)
+ 	  break;
+       }
+     return max;
+   }
+ 
+   /**
+    * Return a clone of this object.
+    */
+   public Object clone()
+   {
+     try
+       {
+ 	Calendar cal = (Calendar) super.clone();
+ 	cal.fields = (int[]) fields.clone();
+ 	cal.isSet = (boolean[]) isSet.clone();
+ 	return cal;
+       }
+     catch (CloneNotSupportedException ex)
+       {
+ 	return null;
+       }
+   }
+ 
+   private static final String[] fieldNames = 
+                                              {
+                                                ",ERA=", ",YEAR=", ",MONTH=",
+                                                ",WEEK_OF_YEAR=",
+                                                ",WEEK_OF_MONTH=",
+                                                ",DAY_OF_MONTH=",
+                                                ",DAY_OF_YEAR=", ",DAY_OF_WEEK=",
+                                                ",DAY_OF_WEEK_IN_MONTH=",
+                                                ",AM_PM=", ",HOUR=",
+                                                ",HOUR_OF_DAY=", ",MINUTE=",
+                                                ",SECOND=", ",MILLISECOND=",
+                                                ",ZONE_OFFSET=", ",DST_OFFSET="
+                                              };
+ 
+   /**
+    * Returns a string representation of this object.  It is mainly
+    * for debugging purposes and its content is implementation
+    * specific.
+    */
+   public String toString()
+   {
+     StringBuffer sb = new StringBuffer();
+     sb.append(getClass().getName()).append('[');
+     sb.append("time=");
+     if (isTimeSet)
+       sb.append(time);
+     else
+       sb.append("?");
+     sb.append(",zone=" + zone);
+     sb.append(",areFieldsSet=" + areFieldsSet);
+     for (int i = 0; i < FIELD_COUNT; i++)
+       {
+ 	sb.append(fieldNames[i]);
+ 	if (isSet[i])
+ 	  sb.append(fields[i]);
+ 	else
+ 	  sb.append("?");
+       }
+     sb.append(",lenient=").append(lenient);
+     sb.append(",firstDayOfWeek=").append(firstDayOfWeek);
+     sb.append(",minimalDaysInFirstWeek=").append(minimalDaysInFirstWeek);
+     sb.append("]");
+     return sb.toString();
+   }
+ 
+   /**
+    * Saves the state of the object to the stream.  Ideally we would
+    * only write the time field, but we need to be compatible with
+    * earlier versions. <br>
+    *
+    * This doesn't write the JDK1.1 field nextStamp to the stream, as
+    * I don't know what it is good for, and because the documentation
+    * says, that it could be omitted.  */
+   private void writeObject(ObjectOutputStream stream) throws IOException
+   {
+     if (! isTimeSet)
+       computeTime();
+     stream.defaultWriteObject();
+   }
+ 
+   /**
+    * Reads the object back from stream (deserialization).
+    */
+   private void readObject(ObjectInputStream stream)
+     throws IOException, ClassNotFoundException
+   {
+     stream.defaultReadObject();
+     if (! isTimeSet)
+       computeTime();
+ 
+     if (serialVersionOnStream > 1)
+       {
+ 	// This is my interpretation of the serial number:
+ 	// Sun wants to remove all fields from the stream someday
+ 	// and will then increase the serialVersion number again.
+ 	// We prepare to be compatible.
+ 	fields = new int[FIELD_COUNT];
+ 	isSet = new boolean[FIELD_COUNT];
+ 	areFieldsSet = false;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Collection.java gcc-4.1.0/libjava/classpath/java/util/Collection.java
*** gcc-4.0.2/libjava/classpath/java/util/Collection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Collection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,288 ----
+ /* Collection.java -- Interface that represents a collection of objects
+    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * Interface that represents a collection of objects. This interface is the
+  * root of the collection hierarchy, and does not provide any guarantees about
+  * the order of its elements or whether or not duplicate elements are
+  * permitted.
+  * <p>
+  * All methods of this interface that are defined to modify the collection are
+  * defined as <dfn>optional</dfn>. An optional operation may throw an
+  * UnsupportedOperationException if the data backing this collection does not
+  * support such a modification. This may mean that the data structure is
+  * immutable, or that it is read-only but may change ("unmodifiable"), or
+  * that it is modifiable but of fixed size (such as an array), or any number
+  * of other combinations.
+  * <p>
+  * A class that wishes to implement this interface should consider subclassing
+  * AbstractCollection, which provides basic implementations of most of the
+  * methods of this interface. Classes that are prepared to make guarantees
+  * about ordering or about absence of duplicate elements should consider
+  * implementing List or Set respectively, both of which are subinterfaces of
+  * Collection.
+  * <p>
+  * A general-purpose implementation of the Collection interface should in most
+  * cases provide at least two constructors: One which takes no arguments and
+  * creates an empty collection, and one which takes a Collection as an argument
+  * and returns a collection containing the same elements (that is, creates a
+  * copy of the argument using its own implementation).
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see List
+  * @see Set
+  * @see Map
+  * @see SortedSet
+  * @see SortedMap
+  * @see HashSet
+  * @see TreeSet
+  * @see ArrayList
+  * @see LinkedList
+  * @see Vector
+  * @see Collections
+  * @see Arrays
+  * @see AbstractCollection
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface Collection
+ {
+   /**
+    * Add an element to this collection.
+    *
+    * @param o the object to add.
+    * @return true if the collection was modified as a result of this action.
+    * @throws UnsupportedOperationException if this collection does not
+    *   support the add operation.
+    * @throws ClassCastException if o cannot be added to this collection due
+    *   to its type.
+    * @throws NullPointerException if o is null and this collection doesn't
+    *   support the addition of null values.
+    * @throws IllegalArgumentException if o cannot be added to this
+    *   collection for some other reason.
+    */
+   boolean add(Object o);
+ 
+   /**
+    * Add the contents of a given collection to this collection.
+    *
+    * @param c the collection to add.
+    * @return true if the collection was modified as a result of this action.
+    * @throws UnsupportedOperationException if this collection does not
+    *   support the addAll operation.
+    * @throws ClassCastException if some element of c cannot be added to this
+    *   collection due to its type.
+    * @throws NullPointerException if some element of c is null and this
+    *   collection does not support the addition of null values.
+    * @throws NullPointerException if c itself is null.
+    * @throws IllegalArgumentException if some element of c cannot be added
+    *   to this collection for some other reason.
+    */
+   boolean addAll(Collection c);
+ 
+   /**
+    * Clear the collection, such that a subsequent call to isEmpty() would
+    * return true.
+    *
+    * @throws UnsupportedOperationException if this collection does not
+    *   support the clear operation.
+    */
+   void clear();
+ 
+   /**
+    * Test whether this collection contains a given object as one of its
+    * elements.
+    *
+    * @param o the element to look for.
+    * @return true if this collection contains at least one element e such that
+    *   <code>o == null ? e == null : o.equals(e)</code>.
+    * @throws ClassCastException if the type of o is not a valid type for this
+    *   collection.
+    * @throws NullPointerException if o is null and this collection doesn't
+    *   support null values.
+    */
+   boolean contains(Object o);
+ 
+   /**
+    * Test whether this collection contains every element in a given collection.
+    *
+    * @param c the collection to test for.
+    * @return true if for every element o in c, contains(o) would return true.
+    * @throws ClassCastException if the type of any element in c is not a valid
+    *   type for this collection.
+    * @throws NullPointerException if some element of c is null and this
+    *   collection does not support null values.
+    * @throws NullPointerException if c itself is null.
+    */
+   boolean containsAll(Collection c);
+ 
+   /**
+    * Test whether this collection is equal to some object. The Collection
+    * interface does not explicitly require any behaviour from this method, and
+    * it may be left to the default implementation provided by Object. The Set
+    * and List interfaces do, however, require specific behaviour from this
+    * method.
+    * <p>
+    * If an implementation of Collection, which is not also an implementation of
+    * Set or List, should choose to implement this method, it should take care
+    * to obey the contract of the equals method of Object. In particular, care
+    * should be taken to return false when o is a Set or a List, in order to
+    * preserve the symmetry of the relation.
+    *
+    * @param o the object to compare to this collection.
+    * @return true if the o is equal to this collection.
+    */
+   boolean equals(Object o);
+ 
+   /**
+    * Obtain a hash code for this collection. The Collection interface does not
+    * explicitly require any behaviour from this method, and it may be left to
+    * the default implementation provided by Object. The Set and List interfaces
+    * do, however, require specific behaviour from this method.
+    * <p>
+    * If an implementation of Collection, which is not also an implementation of
+    * Set or List, should choose to implement this method, it should take care
+    * to obey the contract of the hashCode method of Object. Note that this
+    * method renders it impossible to correctly implement both Set and List, as
+    * the required implementations are mutually exclusive.
+    *
+    * @return a hash code for this collection.
+    */
+   int hashCode();
+ 
+   /**
+    * Test whether this collection is empty, that is, if size() == 0.
+    *
+    * @return true if this collection contains no elements.
+    */
+   boolean isEmpty();
+ 
+   /**
+    * Obtain an Iterator over this collection.
+    *
+    * @return an Iterator over the elements of this collection, in any order.
+    */
+   Iterator iterator();
+ 
+   /**
+    * Remove a single occurrence of an object from this collection. That is,
+    * remove an element e, if one exists, such that <code>o == null ? e == null
+    *   : o.equals(e)</code>.
+    *
+    * @param o the object to remove.
+    * @return true if the collection changed as a result of this call, that is,
+    *   if the collection contained at least one occurrence of o.
+    * @throws UnsupportedOperationException if this collection does not
+    *   support the remove operation.
+    * @throws ClassCastException if the type of o is not a valid type
+    *   for this collection.
+    * @throws NullPointerException if o is null and the collection doesn't
+    *   support null values.
+    */
+   boolean remove(Object o);
+ 
+   /**
+    * Remove all elements of a given collection from this collection. That is,
+    * remove every element e such that c.contains(e).
+    *
+    * @param c The collection of objects to be removed.
+    * @return true if this collection was modified as a result of this call.
+    * @throws UnsupportedOperationException if this collection does not
+    *   support the removeAll operation.
+    * @throws ClassCastException if the type of any element in c is not a valid
+    *   type for this collection.
+    * @throws NullPointerException if some element of c is null and this
+    *   collection does not support removing null values.
+    * @throws NullPointerException if c itself is null.
+    */
+   boolean removeAll(Collection c);
+ 
+   /**
+    * Remove all elements of this collection that are not contained in a given
+    * collection. That is, remove every element e such that !c.contains(e).
+    *
+    * @param c The collection of objects to be retained.
+    * @return true if this collection was modified as a result of this call.
+    * @throws UnsupportedOperationException if this collection does not
+    *   support the retainAll operation.
+    * @throws ClassCastException if the type of any element in c is not a valid
+    *   type for this collection.
+    * @throws NullPointerException if some element of c is null and this
+    *   collection does not support retaining null values.
+    * @throws NullPointerException if c itself is null.
+    */
+   boolean retainAll(Collection c);
+ 
+   /**
+    * Get the number of elements in this collection.
+    *
+    * @return the number of elements in the collection.
+    */
+   int size();
+ 
+   /**
+    * Copy the current contents of this collection into an array.
+    *
+    * @return an array of type Object[] and length equal to the size of this
+    *   collection, containing the elements currently in this collection, in
+    *   any order.
+    */
+   Object[] toArray();
+ 
+   /**
+    * Copy the current contents of this collection into an array. If the array
+    * passed as an argument has length less than the size of this collection, an
+    * array of the same run-time type as a, and length equal to the size of this
+    * collection, is allocated using Reflection. Otherwise, a itself is used.
+    * The elements of this collection are copied into it, and if there is space
+    * in the array, the following element is set to null. The resultant array is
+    * returned.
+    * Note: The fact that the following element is set to null is only useful
+    * if it is known that this collection does not contain any null elements.
+    *
+    * @param a the array to copy this collection into.
+    * @return an array containing the elements currently in this collection, in
+    *   any order.
+    * @throws ArrayStoreException if the type of any element of the
+    *   collection is not a subtype of the element type of a.
+    */
+   Object[] toArray(Object[] a);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Collections.java gcc-4.1.0/libjava/classpath/java/util/Collections.java
*** gcc-4.0.2/libjava/classpath/java/util/Collections.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Collections.java	Sat Feb  4 20:21:48 2006
***************
*** 0 ****
--- 1,5494 ----
+ /* Collections.java -- Utility class with methods to operate on collections
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Utility class consisting of static methods that operate on, or return
+  * Collections. Contains methods to sort, search, reverse, fill and shuffle
+  * Collections, methods to facilitate interoperability with legacy APIs that
+  * are unaware of collections, a method to return a list which consists of
+  * multiple copies of one element, and methods which "wrap" collections to give
+  * them extra properties, such as thread-safety and unmodifiability.
+  * <p>
+  *
+  * All methods which take a collection throw a {@link NullPointerException} if
+  * that collection is null. Algorithms which can change a collection may, but
+  * are not required, to throw the {@link UnsupportedOperationException} that
+  * the underlying collection would throw during an attempt at modification.
+  * For example,
+  * <code>Collections.singleton("").addAll(Collections.EMPTY_SET)</code>
+  * does not throw a exception, even though addAll is an unsupported operation
+  * on a singleton; the reason for this is that addAll did not attempt to
+  * modify the set.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see Set
+  * @see List
+  * @see Map
+  * @see Arrays
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class Collections
+ {
+   /**
+    * Constant used to decide cutoff for when a non-RandomAccess list should
+    * be treated as sequential-access. Basically, quadratic behavior is
+    * acceptable for small lists when the overhead is so small in the first
+    * place. I arbitrarily set it to 16, so it may need some tuning.
+    */
+   private static final int LARGE_LIST_SIZE = 16;
+ 
+   /**
+    * Determines if a list should be treated as a sequential-access one.
+    * Rather than the old method of JDK 1.3 of assuming only instanceof
+    * AbstractSequentialList should be sequential, this uses the new method
+    * of JDK 1.4 of assuming anything that does NOT implement RandomAccess
+    * and exceeds a large (unspecified) size should be sequential.
+    *
+    * @param l the list to check
+    * @return <code>true</code> if it should be treated as sequential-access
+    */
+   private static boolean isSequential(List l)
+   {
+     return ! (l instanceof RandomAccess) && l.size() > LARGE_LIST_SIZE;
+   }
+ 
+   /**
+    * This class is non-instantiable.
+    */
+   private Collections()
+   {
+   }
+ 
+   /**
+    * An immutable, serializable, empty Set.
+    * @see Serializable
+    */
+   public static final Set EMPTY_SET = new EmptySet();
+ 
+   /**
+    * The implementation of {@link #EMPTY_SET}. This class name is required
+    * for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class EmptySet extends AbstractSet
+     implements Serializable
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 1582296315990362920L;
+ 
+     /**
+      * A private constructor adds overhead.
+      */
+     EmptySet()
+     {
+     }
+ 
+     /**
+      * The size: always 0!
+      * @return 0.
+      */
+     public int size()
+     {
+       return 0;
+     }
+ 
+     /**
+      * Returns an iterator that does not iterate.
+      * @return A non-iterating iterator.
+      */
+     // This is really cheating! I think it's perfectly valid, though.
+     public Iterator iterator()
+     {
+       return EMPTY_LIST.iterator();
+     }
+ 
+     // The remaining methods are optional, but provide a performance
+     // advantage by not allocating unnecessary iterators in AbstractSet.
+     /**
+      * The empty set never contains anything.
+      * @param o The object to search for.
+      * @return <code>false</code>.
+      */
+     public boolean contains(Object o)
+     {
+       return false;
+     }
+ 
+     /**
+      * This is true only if the given collection is also empty.
+      * @param c The collection of objects which are to be compared
+      *          against the members of this set.
+      * @return <code>true</code> if c is empty.
+      */
+     public boolean containsAll(Collection c)
+     {
+       return c.isEmpty();
+     }
+ 
+     /**
+      * Equal only if the other set is empty.
+      * @param o The object to compare with this set.
+      * @return <code>true</code> if o is an empty instance of <code>Set</code>.
+      */
+     public boolean equals(Object o)
+     {
+       return o instanceof Set && ((Set) o).isEmpty();
+     }
+ 
+     /**
+      * The hashcode is always 0.
+      * @return 0.
+      */
+     public int hashCode()
+     {
+       return 0;
+     }
+ 
+     /**
+      * Always succeeds with a <code>false</code> result.
+      * @param o The object to remove.
+      * @return <code>false</code>.
+      */
+     public boolean remove(Object o)
+     {
+       return false;
+     }
+ 
+     /**
+      * Always succeeds with a <code>false</code> result.
+      * @param c The collection of objects which should
+      *          all be removed from this set.
+      * @return <code>false</code>.
+      */
+     public boolean removeAll(Collection c)
+     {
+       return false;
+     }
+ 
+     /**
+      * Always succeeds with a <code>false</code> result.
+      * @param c The collection of objects which should
+      *          all be retained within this set.
+      * @return <code>false</code>.
+      */
+     public boolean retainAll(Collection c)
+     {
+       return false;
+     }
+ 
+     /**
+      * The array is always empty.
+      * @return A new array with a size of 0.
+      */
+     public Object[] toArray()
+     {
+       return new Object[0];
+     }
+ 
+     /**
+      * We don't even need to use reflection!
+      * @param a An existing array, which can be empty.
+      * @return The original array with any existing
+      *         initial element set to null.
+      */
+     public Object[] toArray(Object[] a)
+     {
+       if (a.length > 0)
+         a[0] = null;
+       return a;
+     }
+ 
+     /**
+      * The string never changes.
+      *
+      * @return the string "[]".
+      */
+     public String toString()
+     {
+       return "[]";
+     }
+   } // class EmptySet
+ 
+   /**
+    * An immutable, serializable, empty List, which implements RandomAccess.
+    * @see Serializable
+    * @see RandomAccess
+    */
+   public static final List EMPTY_LIST = new EmptyList();
+ 
+   /**
+    * The implementation of {@link #EMPTY_LIST}. This class name is required
+    * for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class EmptyList extends AbstractList
+     implements Serializable, RandomAccess
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 8842843931221139166L;
+ 
+     /**
+      * A private constructor adds overhead.
+      */
+     EmptyList()
+     {
+     }
+ 
+     /**
+      * The size is always 0.
+      * @return 0.
+      */
+     public int size()
+     {
+       return 0;
+     }
+ 
+     /**
+      * No matter the index, it is out of bounds.  This
+      * method never returns, throwing an exception instead.
+      *
+      * @param index The index of the element to retrieve.
+      * @return the object at the specified index.
+      * @throws IndexOutOfBoundsException as any given index
+      *         is outside the bounds of an empty array.
+      */
+     public Object get(int index)
+     {
+       throw new IndexOutOfBoundsException();
+     }
+ 
+     // The remaining methods are optional, but provide a performance
+     // advantage by not allocating unnecessary iterators in AbstractList.
+     /**
+      * Never contains anything.
+      * @param o The object to search for.
+      * @return <code>false</code>.
+      */
+     public boolean contains(Object o)
+     {
+       return false;
+     }
+ 
+     /**
+      * This is true only if the given collection is also empty.
+      * @param c The collection of objects, which should be compared
+      *          against the members of this list.
+      * @return <code>true</code> if c is also empty. 
+      */
+     public boolean containsAll(Collection c)
+     {
+       return c.isEmpty();
+     }
+ 
+     /**
+      * Equal only if the other list is empty.
+      * @param o The object to compare against this list.
+      * @return <code>true</code> if o is also an empty instance of
+      *         <code>List</code>.
+      */
+     public boolean equals(Object o)
+     {
+       return o instanceof List && ((List) o).isEmpty();
+     }
+ 
+     /**
+      * The hashcode is always 1.
+      * @return 1.
+      */
+     public int hashCode()
+     {
+       return 1;
+     }
+ 
+     /**
+      * Returns -1.
+      * @param o The object to search for.
+      * @return -1.
+      */
+     public int indexOf(Object o)
+     {
+       return -1;
+     }
+ 
+     /**
+      * Returns -1.
+      * @param o The object to search for.
+      * @return -1.
+      */
+     public int lastIndexOf(Object o)
+     {
+       return -1;
+     }
+ 
+     /**
+      * Always succeeds with <code>false</code> result.
+      * @param o The object to remove.
+      * @return -1.
+      */
+     public boolean remove(Object o)
+     {
+       return false;
+     }
+ 
+     /**
+      * Always succeeds with <code>false</code> result.
+      * @param c The collection of objects which should
+      *          all be removed from this list.
+      * @return <code>false</code>.
+      */
+     public boolean removeAll(Collection c)
+     {
+       return false;
+     }
+ 
+     /**
+      * Always succeeds with <code>false</code> result.
+      * @param c The collection of objects which should
+      *          all be retained within this list.
+      * @return <code>false</code>.
+      */
+     public boolean retainAll(Collection c)
+     {
+       return false;
+     }
+ 
+     /**
+      * The array is always empty.
+      * @return A new array with a size of 0.
+      */
+     public Object[] toArray()
+     {
+       return new Object[0];
+     }
+ 
+     /**
+      * We don't even need to use reflection!
+      * @param a An existing array, which can be empty.
+      * @return The original array with any existing
+      *         initial element set to null.
+      */
+     public Object[] toArray(Object[] a)
+     {
+       if (a.length > 0)
+         a[0] = null;
+       return a;
+     }
+ 
+     /**
+      * The string never changes.
+      *
+      * @return the string "[]".
+      */
+     public String toString()
+     {
+       return "[]";
+     }
+   } // class EmptyList
+ 
+   /**
+    * An immutable, serializable, empty Map.
+    * @see Serializable
+    */
+   public static final Map EMPTY_MAP = new EmptyMap();
+ 
+   /**
+    * The implementation of {@link #EMPTY_MAP}. This class name is required
+    * for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class EmptyMap extends AbstractMap
+     implements Serializable
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 6428348081105594320L;
+ 
+     /**
+      * A private constructor adds overhead.
+      */
+     EmptyMap()
+     {
+     }
+ 
+     /**
+      * There are no entries.
+      * @return The empty set.
+      */
+     public Set entrySet()
+     {
+       return EMPTY_SET;
+     }
+ 
+     // The remaining methods are optional, but provide a performance
+     // advantage by not allocating unnecessary iterators in AbstractMap.
+     /**
+      * No entries!
+      * @param key The key to search for.
+      * @return <code>false</code>.
+      */
+     public boolean containsKey(Object key)
+     {
+       return false;
+     }
+ 
+     /**
+      * No entries!
+      * @param value The value to search for.
+      * @return <code>false</code>.
+      */
+     public boolean containsValue(Object value)
+     {
+       return false;
+     }
+ 
+     /**
+      * Equal to all empty maps.
+      * @param o The object o to compare against this map.
+      * @return <code>true</code> if o is also an empty instance of
+      *         <code>Map</code>.
+      */
+     public boolean equals(Object o)
+     {
+       return o instanceof Map && ((Map) o).isEmpty();
+     }
+ 
+     /**
+      * No mappings, so this returns null.
+      * @param o The key of the object to retrieve.
+      * @return null. 
+      */
+     public Object get(Object o)
+     {
+       return null;
+     }
+ 
+     /**
+      * The hashcode is always 0.
+      * @return 0.
+      */
+     public int hashCode()
+     {
+       return 0;
+     }
+ 
+     /**
+      * No entries.
+      * @return The empty set.
+      */
+     public Set keySet()
+     {
+       return EMPTY_SET;
+     }
+ 
+     /**
+      * Remove always succeeds, with null result.
+      * @param o The key of the mapping to remove.
+      * @return null, as there is never a mapping for o.
+      */
+     public Object remove(Object o)
+     {
+       return null;
+     }
+ 
+     /**
+      * Size is always 0.
+      * @return 0.
+      */
+     public int size()
+     {
+       return 0;
+     }
+ 
+     /**
+      * No entries. Technically, EMPTY_SET, while more specific than a general
+      * Collection, will work. Besides, that's what the JDK uses!
+      * @return The empty set.
+      */
+     public Collection values()
+     {
+       return EMPTY_SET;
+     }
+ 
+     /**
+      * The string never changes.
+      *
+      * @return the string "[]".
+      */
+     public String toString()
+     {
+       return "[]";
+     }
+   } // class EmptyMap
+ 
+ 
+   /**
+    * Compare two objects with or without a Comparator. If c is null, uses the
+    * natural ordering. Slightly slower than doing it inline if the JVM isn't
+    * clever, but worth it for removing a duplicate of the search code.
+    * Note: This code is also used in Arrays (for sort as well as search).
+    */
+   static final int compare(Object o1, Object o2, Comparator c)
+   {
+     return c == null ? ((Comparable) o1).compareTo(o2) : c.compare(o1, o2);
+   }
+ 
+   /**
+    * Perform a binary search of a List for a key, using the natural ordering of
+    * the elements. The list must be sorted (as by the sort() method) - if it is
+    * not, the behavior of this method is undefined, and may be an infinite
+    * loop. Further, the key must be comparable with every item in the list. If
+    * the list contains the key more than once, any one of them may be found.
+    * <p>
+    *
+    * This algorithm behaves in log(n) time for {@link RandomAccess} lists,
+    * and uses a linear search with O(n) link traversals and log(n) comparisons
+    * with {@link AbstractSequentialList} lists. Note: although the
+    * specification allows for an infinite loop if the list is unsorted, it will
+    * not happen in this (Classpath) implementation.
+    *
+    * @param l the list to search (must be sorted)
+    * @param key the value to search for
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value
+    * @throws ClassCastException if key could not be compared with one of the
+    *         elements of l
+    * @throws NullPointerException if a null element has compareTo called
+    * @see #sort(List)
+    */
+   public static int binarySearch(List l, Object key)
+   {
+     return binarySearch(l, key, null);
+   }
+ 
+   /**
+    * Perform a binary search of a List for a key, using a supplied Comparator.
+    * The list must be sorted (as by the sort() method with the same Comparator)
+    * - if it is not, the behavior of this method is undefined, and may be an
+    * infinite loop. Further, the key must be comparable with every item in the
+    * list. If the list contains the key more than once, any one of them may be
+    * found. If the comparator is null, the elements' natural ordering is used.
+    * <p>
+    *
+    * This algorithm behaves in log(n) time for {@link RandomAccess} lists,
+    * and uses a linear search with O(n) link traversals and log(n) comparisons
+    * with {@link AbstractSequentialList} lists. Note: although the
+    * specification allows for an infinite loop if the list is unsorted, it will
+    * not happen in this (Classpath) implementation.
+    *
+    * @param l the list to search (must be sorted)
+    * @param key the value to search for
+    * @param c the comparator by which the list is sorted
+    * @return the index at which the key was found, or -n-1 if it was not
+    *         found, where n is the index of the first value higher than key or
+    *         a.length if there is no such value
+    * @throws ClassCastException if key could not be compared with one of the
+    *         elements of l
+    * @throws NullPointerException if a null element is compared with natural
+    *         ordering (only possible when c is null)
+    * @see #sort(List, Comparator)
+    */
+   public static int binarySearch(List l, Object key, Comparator c)
+   {
+     int pos = 0;
+     int low = 0;
+     int hi = l.size() - 1;
+ 
+     // We use a linear search with log(n) comparisons using an iterator
+     // if the list is sequential-access.
+     if (isSequential(l))
+       {
+ 	ListIterator itr = l.listIterator();
+         int i = 0;
+ 	Object o = itr.next(); // Assumes list is not empty (see isSequential)
+ 	boolean forward = true;
+         while (low <= hi)
+           {
+             pos = (low + hi) >> 1;
+             if (i < pos)
+ 	      {
+ 		if (!forward)
+ 		  itr.next(); // Changing direction first.
+ 		for ( ; i != pos; i++, o = itr.next());
+ 		forward = true;
+ 	      }
+             else
+ 	      {
+ 		if (forward)
+ 		  itr.previous(); // Changing direction first.
+ 		for ( ; i != pos; i--, o = itr.previous());
+ 		forward = false;
+ 	      }
+ 	    final int d = compare(o, key, c);
+ 	    if (d == 0)
+               return pos;
+ 	    else if (d > 0)
+               hi = pos - 1;
+ 	    else
+               // This gets the insertion point right on the last loop
+               low = ++pos;
+           }
+       }
+     else
+       {
+ 	while (low <= hi)
+ 	  {
+ 	    pos = (low + hi) >> 1;
+ 	    final int d = compare(l.get(pos), key, c);
+ 	    if (d == 0)
+               return pos;
+ 	    else if (d > 0)
+               hi = pos - 1;
+ 	    else
+               // This gets the insertion point right on the last loop
+               low = ++pos;
+ 	  }
+       }
+ 
+     // If we failed to find it, we do the same whichever search we did.
+     return -pos - 1;
+   }
+ 
+   /**
+    * Copy one list to another. If the destination list is longer than the
+    * source list, the remaining elements are unaffected. This method runs in
+    * linear time.
+    *
+    * @param dest the destination list
+    * @param source the source list
+    * @throws IndexOutOfBoundsException if the destination list is shorter
+    *         than the source list (the destination will be unmodified)
+    * @throws UnsupportedOperationException if dest.listIterator() does not
+    *         support the set operation
+    */
+   public static void copy(List dest, List source)
+   {
+     int pos = source.size();
+     if (dest.size() < pos)
+       throw new IndexOutOfBoundsException("Source does not fit in dest");
+ 
+     Iterator i1 = source.iterator();
+     ListIterator i2 = dest.listIterator();
+ 
+     while (--pos >= 0)
+       {
+         i2.next();
+         i2.set(i1.next());
+       }
+   }
+ 
+   /**
+    * Returns an Enumeration over a collection. This allows interoperability
+    * with legacy APIs that require an Enumeration as input.
+    *
+    * @param c the Collection to iterate over
+    * @return an Enumeration backed by an Iterator over c
+    */
+   public static Enumeration enumeration(Collection c)
+   {
+     final Iterator i = c.iterator();
+     return new Enumeration()
+     {
+       /**
+        * Returns <code>true</code> if there are more elements to
+        * be enumerated.
+        *
+        * @return The result of <code>hasNext()</code>
+        *         called on the underlying iterator.
+        */
+       public final boolean hasMoreElements()
+       {
+ 	return i.hasNext();
+       }
+ 
+       /**
+        * Returns the next element to be enumerated.
+        *
+        * @return The result of <code>next()</code>
+        *         called on the underlying iterator.
+        */
+       public final Object nextElement()
+       {
+ 	return i.next();
+       }
+     };
+   }
+ 
+   /**
+    * Replace every element of a list with a given value. This method runs in
+    * linear time.
+    *
+    * @param l the list to fill.
+    * @param val the object to vill the list with.
+    * @throws UnsupportedOperationException if l.listIterator() does not
+    *         support the set operation.
+    */
+   public static void fill(List l, Object val)
+   {
+     ListIterator itr = l.listIterator();
+     for (int i = l.size() - 1; i >= 0; --i)
+       {
+ 	itr.next();
+ 	itr.set(val);
+       }
+   }
+ 
+   /**
+    * Returns the starting index where the specified sublist first occurs
+    * in a larger list, or -1 if there is no matching position. If
+    * <code>target.size() &gt; source.size()</code>, this returns -1,
+    * otherwise this implementation uses brute force, checking for
+    * <code>source.sublist(i, i + target.size()).equals(target)</code>
+    * for all possible i.
+    *
+    * @param source the list to search
+    * @param target the sublist to search for
+    * @return the index where found, or -1
+    * @since 1.4
+    */
+   public static int indexOfSubList(List source, List target)
+   {
+     int ssize = source.size();
+     for (int i = 0, j = target.size(); j <= ssize; i++, j++)
+       if (source.subList(i, j).equals(target))
+         return i;
+     return -1;
+   }
+ 
+   /**
+    * Returns the starting index where the specified sublist last occurs
+    * in a larger list, or -1 if there is no matching position. If
+    * <code>target.size() &gt; source.size()</code>, this returns -1,
+    * otherwise this implementation uses brute force, checking for
+    * <code>source.sublist(i, i + target.size()).equals(target)</code>
+    * for all possible i.
+    *
+    * @param source the list to search
+    * @param target the sublist to search for
+    * @return the index where found, or -1
+    * @since 1.4
+    */
+   public static int lastIndexOfSubList(List source, List target)
+   {
+     int ssize = source.size();
+     for (int i = ssize - target.size(), j = ssize; i >= 0; i--, j--)
+       if (source.subList(i, j).equals(target))
+         return i;
+     return -1;
+   }
+ 
+   /**
+    * Returns an ArrayList holding the elements visited by a given
+    * Enumeration. This method exists for interoperability between legacy
+    * APIs and the new Collection API.
+    *
+    * @param e the enumeration to put in a list
+    * @return a list containing the enumeration elements
+    * @see ArrayList
+    * @since 1.4
+    */
+   public static ArrayList list(Enumeration e)
+   {
+     ArrayList l = new ArrayList();
+     while (e.hasMoreElements())
+       l.add(e.nextElement());
+     return l;
+   }
+ 
+   /**
+    * Find the maximum element in a Collection, according to the natural
+    * ordering of the elements. This implementation iterates over the
+    * Collection, so it works in linear time.
+    *
+    * @param c the Collection to find the maximum element of
+    * @return the maximum element of c
+    * @exception NoSuchElementException if c is empty
+    * @exception ClassCastException if elements in c are not mutually comparable
+    * @exception NullPointerException if null.compareTo is called
+    */
+   public static Object max(Collection c)
+   {
+     return max(c, null);
+   }
+ 
+   /**
+    * Find the maximum element in a Collection, according to a specified
+    * Comparator. This implementation iterates over the Collection, so it
+    * works in linear time.
+    *
+    * @param c the Collection to find the maximum element of
+    * @param order the Comparator to order the elements by, or null for natural
+    *        ordering
+    * @return the maximum element of c
+    * @throws NoSuchElementException if c is empty
+    * @throws ClassCastException if elements in c are not mutually comparable
+    * @throws NullPointerException if null is compared by natural ordering
+    *        (only possible when order is null)
+    */
+   public static Object max(Collection c, Comparator order)
+   {
+     Iterator itr = c.iterator();
+     Object max = itr.next(); // throws NoSuchElementException
+     int csize = c.size();
+     for (int i = 1; i < csize; i++)
+       {
+ 	Object o = itr.next();
+ 	if (compare(max, o, order) < 0)
+ 	  max = o;
+       }
+     return max;
+   }
+ 
+   /**
+    * Find the minimum element in a Collection, according to the natural
+    * ordering of the elements. This implementation iterates over the
+    * Collection, so it works in linear time.
+    *
+    * @param c the Collection to find the minimum element of
+    * @return the minimum element of c
+    * @throws NoSuchElementException if c is empty
+    * @throws ClassCastException if elements in c are not mutually comparable
+    * @throws NullPointerException if null.compareTo is called
+    */
+   public static Object min(Collection c)
+   {
+     return min(c, null);
+   }
+ 
+   /**
+    * Find the minimum element in a Collection, according to a specified
+    * Comparator. This implementation iterates over the Collection, so it
+    * works in linear time.
+    *
+    * @param c the Collection to find the minimum element of
+    * @param order the Comparator to order the elements by, or null for natural
+    *        ordering
+    * @return the minimum element of c
+    * @throws NoSuchElementException if c is empty
+    * @throws ClassCastException if elements in c are not mutually comparable
+    * @throws NullPointerException if null is compared by natural ordering
+    *        (only possible when order is null)
+    */
+   public static Object min(Collection c, Comparator order)
+   {
+     Iterator itr = c.iterator();
+     Object min = itr.next();	// throws NoSuchElementExcception
+     int csize = c.size();
+     for (int i = 1; i < csize; i++)
+       {
+ 	Object o = itr.next();
+ 	if (compare(min, o, order) > 0)
+ 	  min = o;
+       }
+     return min;
+   }
+ 
+   /**
+    * Creates an immutable list consisting of the same object repeated n times.
+    * The returned object is tiny, consisting of only a single reference to the
+    * object and a count of the number of elements. It is Serializable, and
+    * implements RandomAccess. You can use it in tandem with List.addAll for
+    * fast list construction.
+    *
+    * @param n the number of times to repeat the object
+    * @param o the object to repeat
+    * @return a List consisting of n copies of o
+    * @throws IllegalArgumentException if n &lt; 0
+    * @see List#addAll(Collection)
+    * @see Serializable
+    * @see RandomAccess
+    */
+   public static List nCopies(final int n, final Object o)
+   {
+     return new CopiesList(n, o);
+   }
+ 
+   /**
+    * The implementation of {@link #nCopies(int, Object)}. This class name
+    * is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class CopiesList extends AbstractList
+     implements Serializable, RandomAccess
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 2739099268398711800L;
+ 
+     /**
+      * The count of elements in this list.
+      * @serial the list size
+      */
+     private final int n;
+ 
+     /**
+      * The repeated list element.
+      * @serial the list contents
+      */
+     private final Object element;
+ 
+     /**
+      * Constructs the list.
+      *
+      * @param n the count
+      * @param o the object
+      * @throws IllegalArgumentException if n &lt; 0
+      */
+     CopiesList(int n, Object o)
+     {
+       if (n < 0)
+ 	throw new IllegalArgumentException();
+       this.n = n;
+       element = o;
+     }
+ 
+     /**
+      * The size is fixed.
+      * @return The size of the list.
+      */
+     public int size()
+     {
+       return n;
+     }
+ 
+     /**
+      * The same element is returned.
+      * @param index The index of the element to be returned (irrelevant
+      *        as the list contains only copies of <code>element</code>).
+      * @return The element used by this list.
+      */
+     public Object get(int index)
+     {
+       if (index < 0 || index >= n)
+         throw new IndexOutOfBoundsException();
+       return element;
+     }
+ 
+     // The remaining methods are optional, but provide a performance
+     // advantage by not allocating unnecessary iterators in AbstractList.
+     /**
+      * This list only contains one element.
+      * @param o The object to search for.
+      * @return <code>true</code> if o is the element used by this list.
+      */
+     public boolean contains(Object o)
+     {
+       return n > 0 && equals(o, element);
+     }
+ 
+     /**
+      * The index is either 0 or -1.
+      * @param o The object to find the index of.
+      * @return 0 if <code>o == element</code>, -1 if not.
+      */
+     public int indexOf(Object o)
+     {
+       return (n > 0 && equals(o, element)) ? 0 : -1;
+     }
+ 
+     /**
+      * The index is either n-1 or -1.
+      * @param o The object to find the last index of.
+      * @return The last index in the list if <code>o == element</code>,
+      *         -1 if not.
+      */
+     public int lastIndexOf(Object o)
+     {
+       return equals(o, element) ? n - 1 : -1;
+     }
+ 
+     /**
+      * A subList is just another CopiesList.
+      * @param from The starting bound of the sublist.
+      * @param to The ending bound of the sublist.
+      * @return A list of copies containing <code>from - to</code>
+      *         elements, all of which are equal to the element
+      *         used by this list.
+      */
+     public List subList(int from, int to)
+     {
+       if (from < 0 || to > n)
+         throw new IndexOutOfBoundsException();
+       return new CopiesList(to - from, element);
+     }
+ 
+     /**
+      * The array is easy.
+      * @return An array of size n filled with copies of
+      *         the element used by this list.
+      */
+     public Object[] toArray()
+     {
+       Object[] a = new Object[n];
+       Arrays.fill(a, element);
+       return a;
+     }
+ 
+     /**
+      * The string is easy to generate.
+      * @return A string representation of the list.
+      */
+     public String toString()
+     {
+       StringBuffer r = new StringBuffer("{");
+       for (int i = n - 1; --i > 0; )
+         r.append(element).append(", ");
+       r.append(element).append("}");
+       return r.toString();
+     }
+   } // class CopiesList
+ 
+   /**
+    * Replace all instances of one object with another in the specified list.
+    * The list does not change size. An element e is replaced if
+    * <code>oldval == null ? e == null : oldval.equals(e)</code>.
+    *
+    * @param list the list to iterate over
+    * @param oldval the element to replace
+    * @param newval the new value for the element
+    * @return <code>true</code> if a replacement occurred.
+    * @throws UnsupportedOperationException if the list iterator does not allow
+    *         for the set operation
+    * @throws ClassCastException if newval is of a type which cannot be added
+    *         to the list
+    * @throws IllegalArgumentException if some other aspect of newval stops
+    *         it being added to the list
+    * @since 1.4
+    */
+   public static boolean replaceAll(List list, Object oldval, Object newval)
+   {
+     ListIterator itr = list.listIterator();
+     boolean replace_occured = false;
+     for (int i = list.size(); --i >= 0; )
+       if (AbstractCollection.equals(oldval, itr.next()))
+         {
+           itr.set(newval);
+           replace_occured = true;
+         }
+     return replace_occured;
+   }
+ 
+   /**
+    * Reverse a given list. This method works in linear time.
+    *
+    * @param l the list to reverse
+    * @throws UnsupportedOperationException if l.listIterator() does not
+    *         support the set operation
+    */
+   public static void reverse(List l)
+   {
+     ListIterator i1 = l.listIterator();
+     int pos1 = 1;
+     int pos2 = l.size();
+     ListIterator i2 = l.listIterator(pos2);
+     while (pos1 < pos2)
+       {
+ 	Object o = i1.next();
+ 	i1.set(i2.previous());
+ 	i2.set(o);
+ 	++pos1;
+ 	--pos2;
+       }
+   }
+ 
+   /**
+    * Get a comparator that implements the reverse of natural ordering. In
+    * other words, this sorts Comparable objects opposite of how their
+    * compareTo method would sort. This makes it easy to sort into reverse
+    * order, by simply passing Collections.reverseOrder() to the sort method.
+    * The return value of this method is Serializable.
+    *
+    * @return a comparator that imposes reverse natural ordering
+    * @see Comparable
+    * @see Serializable
+    */
+   public static Comparator reverseOrder()
+   {
+     return rcInstance;
+   }
+ 
+   /**
+    * The object for {@link #reverseOrder()}.
+    */
+   private static final ReverseComparator rcInstance = new ReverseComparator();
+ 
+   /**
+    * The implementation of {@link #reverseOrder()}. This class name
+    * is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class ReverseComparator
+     implements Comparator, Serializable
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 7207038068494060240L;
+ 
+     /**
+      * A private constructor adds overhead.
+      */
+     ReverseComparator()
+     {
+     }
+ 
+     /**
+      * Compare two objects in reverse natural order.
+      *
+      * @param a the first object
+      * @param b the second object
+      * @return &lt;, ==, or &gt; 0 according to b.compareTo(a)
+      */
+     public int compare(Object a, Object b)
+     {
+       return ((Comparable) b).compareTo(a);
+     }
+   }
+ 
+   /**
+    * Rotate the elements in a list by a specified distance. After calling this
+    * method, the element now at index <code>i</code> was formerly at index
+    * <code>(i - distance) mod list.size()</code>. The list size is unchanged.
+    * <p>
+    *
+    * For example, suppose a list contains <code>[t, a, n, k, s]</code>. After
+    * either <code>Collections.rotate(l, 4)</code> or
+    * <code>Collections.rotate(l, -1)</code>, the new contents are
+    * <code>[s, t, a, n, k]</code>. This can be applied to sublists to rotate
+    * just a portion of the list. For example, to move element <code>a</code>
+    * forward two positions in the original example, use
+    * <code>Collections.rotate(l.subList(1, 3+1), -1)</code>, which will
+    * result in <code>[t, n, k, a, s]</code>.
+    * <p>
+    *
+    * If the list is small or implements {@link RandomAccess}, the
+    * implementation exchanges the first element to its destination, then the
+    * displaced element, and so on until a circuit has been completed. The
+    * process is repeated if needed on the second element, and so forth, until
+    * all elements have been swapped.  For large non-random lists, the
+    * implementation breaks the list into two sublists at index
+    * <code>-distance mod size</code>, calls {@link #reverse(List)} on the
+    * pieces, then reverses the overall list.
+    *
+    * @param list the list to rotate
+    * @param distance the distance to rotate by; unrestricted in value
+    * @throws UnsupportedOperationException if the list does not support set
+    * @since 1.4
+    */
+   public static void rotate(List list, int distance)
+   {
+     int size = list.size();
+     if (size == 0)
+       return;
+     distance %= size;
+     if (distance == 0)
+       return;
+     if (distance < 0)
+       distance += size;
+ 
+     if (isSequential(list))
+       {
+         reverse(list);
+         reverse(list.subList(0, distance));
+         reverse(list.subList(distance, size));
+       }
+     else
+       {
+         // Determine the least common multiple of distance and size, as there
+         // are (distance / LCM) loops to cycle through.
+         int a = size;
+         int lcm = distance;
+         int b = a % lcm;
+         while (b != 0)
+           {
+             a = lcm;
+             lcm = b;
+             b = a % lcm;
+           }
+ 
+         // Now, make the swaps. We must take the remainder every time through
+         // the inner loop so that we don't overflow i to negative values.
+         while (--lcm >= 0)
+           {
+             Object o = list.get(lcm);
+             for (int i = lcm + distance; i != lcm; i = (i + distance) % size)
+               o = list.set(i, o);
+             list.set(lcm, o);
+           }
+       }
+   }
+ 
+   /**
+    * Shuffle a list according to a default source of randomness. The algorithm
+    * used iterates backwards over the list, swapping each element with an
+    * element randomly selected from the elements in positions less than or
+    * equal to it (using r.nextInt(int)).
+    * <p>
+    *
+    * This algorithm would result in a perfectly fair shuffle (that is, each
+    * element would have an equal chance of ending up in any position) if r were
+    * a perfect source of randomness. In practice the results are merely very
+    * close to perfect.
+    * <p>
+    *
+    * This method operates in linear time. To do this on large lists which do
+    * not implement {@link RandomAccess}, a temporary array is used to acheive
+    * this speed, since it would be quadratic access otherwise.
+    *
+    * @param l the list to shuffle
+    * @throws UnsupportedOperationException if l.listIterator() does not
+    *         support the set operation
+    */
+   public static void shuffle(List l)
+   {
+     if (defaultRandom == null)
+       {
+         synchronized (Collections.class)
+ 	{
+ 	  if (defaultRandom == null)
+             defaultRandom = new Random();
+ 	}
+       }
+     shuffle(l, defaultRandom);
+   }
+ 
+   /**
+    * Cache a single Random object for use by shuffle(List). This improves
+    * performance as well as ensuring that sequential calls to shuffle() will
+    * not result in the same shuffle order occurring: the resolution of
+    * System.currentTimeMillis() is not sufficient to guarantee a unique seed.
+    */
+   private static Random defaultRandom = null;
+ 
+   /**
+    * Shuffle a list according to a given source of randomness. The algorithm
+    * used iterates backwards over the list, swapping each element with an
+    * element randomly selected from the elements in positions less than or
+    * equal to it (using r.nextInt(int)).
+    * <p>
+    *
+    * This algorithm would result in a perfectly fair shuffle (that is, each
+    * element would have an equal chance of ending up in any position) if r were
+    * a perfect source of randomness. In practise (eg if r = new Random()) the
+    * results are merely very close to perfect.
+    * <p>
+    *
+    * This method operates in linear time. To do this on large lists which do
+    * not implement {@link RandomAccess}, a temporary array is used to acheive
+    * this speed, since it would be quadratic access otherwise.
+    *
+    * @param l the list to shuffle
+    * @param r the source of randomness to use for the shuffle
+    * @throws UnsupportedOperationException if l.listIterator() does not
+    *         support the set operation
+    */
+   public static void shuffle(List l, Random r)
+   {
+     int lsize = l.size();
+     ListIterator i = l.listIterator(lsize);
+     boolean sequential = isSequential(l);
+     Object[] a = null; // stores a copy of the list for the sequential case
+ 
+     if (sequential)
+       a = l.toArray();
+ 
+     for (int pos = lsize - 1; pos > 0; --pos)
+       {
+ 	// Obtain a random position to swap with. pos + 1 is used so that the
+ 	// range of the random number includes the current position.
+ 	int swap = r.nextInt(pos + 1);
+ 
+ 	// Swap the desired element.
+ 	Object o;
+         if (sequential)
+           {
+             o = a[swap];
+             a[swap] = i.previous();
+           }
+         else
+           o = l.set(swap, i.previous());
+ 
+ 	i.set(o);
+       }
+   }
+ 
+ 
+   /**
+    * Obtain an immutable Set consisting of a single element. The return value
+    * of this method is Serializable.
+    *
+    * @param o the single element
+    * @return an immutable Set containing only o
+    * @see Serializable
+    */
+   public static Set singleton(Object o)
+   {
+     return new SingletonSet(o);
+   }
+ 
+   /**
+    * The implementation of {@link #singleton(Object)}. This class name
+    * is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class SingletonSet extends AbstractSet
+     implements Serializable
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 3193687207550431679L;
+ 
+ 
+     /**
+      * The single element; package visible for use in nested class.
+      * @serial the singleton
+      */
+     final Object element;
+ 
+     /**
+      * Construct a singleton.
+      * @param o the element
+      */
+     SingletonSet(Object o)
+     {
+       element = o;
+     }
+ 
+     /**
+      * The size: always 1!
+      * @return 1.
+      */
+     public int size()
+     {
+       return 1;
+     }
+ 
+     /**
+      * Returns an iterator over the lone element.
+      */
+     public Iterator iterator()
+     {
+       return new Iterator()
+       {
+ 	/**
+ 	 * Flag to indicate whether or not the element has
+ 	 * been retrieved.
+ 	 */
+         private boolean hasNext = true;
+ 
+ 	/**
+ 	 * Returns <code>true</code> if elements still remain to be
+ 	 * iterated through.
+ 	 *
+ 	 * @return <code>true</code> if the element has not yet been returned.
+ 	 */
+         public boolean hasNext()
+         {
+           return hasNext;
+         }
+ 
+ 	/**
+ 	 * Returns the element.
+ 	 *
+ 	 * @return The element used by this singleton.
+ 	 * @throws NoSuchElementException if the object
+ 	 *         has already been retrieved.
+ 	 */ 
+         public Object next()
+         {
+           if (hasNext)
+           {
+             hasNext = false;
+             return element;
+           }
+           else
+             throw new NoSuchElementException();
+         }
+ 
+ 	/**
+ 	 * Removes the element from the singleton.
+ 	 * As this set is immutable, this will always
+ 	 * throw an exception.
+ 	 *
+ 	 * @throws UnsupportedOperationException as the
+ 	 *         singleton set doesn't support
+ 	 *         <code>remove()</code>.
+ 	 */
+         public void remove()
+         {
+           throw new UnsupportedOperationException();
+         }
+       };
+     }
+ 
+     // The remaining methods are optional, but provide a performance
+     // advantage by not allocating unnecessary iterators in AbstractSet.
+     /**
+      * The set only contains one element.
+      *
+      * @param o The object to search for.
+      * @return <code>true</code> if o == the element of the singleton.
+      */
+     public boolean contains(Object o)
+     {
+       return equals(o, element);
+     }
+ 
+     /**
+      * This is true if the other collection only contains the element.
+      *
+      * @param c A collection to compare against this singleton.
+      * @return <code>true</code> if c only contains either no elements or
+      *         elements equal to the element in this singleton.
+      */
+     public boolean containsAll(Collection c)
+     {
+       Iterator i = c.iterator();
+       int pos = c.size();
+       while (--pos >= 0)
+         if (! equals(i.next(), element))
+           return false;
+       return true;
+     }
+ 
+     /**
+      * The hash is just that of the element.
+      * 
+      * @return The hashcode of the element.
+      */
+     public int hashCode()
+     {
+       return hashCode(element);
+     }
+ 
+     /**
+      * Returning an array is simple.
+      *
+      * @return An array containing the element.
+      */
+     public Object[] toArray()
+     {
+       return new Object[] {element};
+     }
+ 
+     /**
+      * Obvious string.
+      *
+      * @return The string surrounded by enclosing
+      *         square brackets.
+      */
+     public String toString()
+     {
+       return "[" + element + "]";
+     }
+   } // class SingletonSet
+ 
+   /**
+    * Obtain an immutable List consisting of a single element. The return value
+    * of this method is Serializable, and implements RandomAccess.
+    *
+    * @param o the single element
+    * @return an immutable List containing only o
+    * @see Serializable
+    * @see RandomAccess
+    * @since 1.3
+    */
+   public static List singletonList(Object o)
+   {
+     return new SingletonList(o);
+   }
+ 
+   /**
+    * The implementation of {@link #singletonList(Object)}. This class name
+    * is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class SingletonList extends AbstractList
+     implements Serializable, RandomAccess
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 3093736618740652951L;
+ 
+     /**
+      * The single element.
+      * @serial the singleton
+      */
+     private final Object element;
+ 
+     /**
+      * Construct a singleton.
+      * @param o the element
+      */
+     SingletonList(Object o)
+     {
+       element = o;
+     }
+ 
+     /**
+      * The size: always 1!
+      * @return 1.
+      */
+     public int size()
+     {
+       return 1;
+     }
+ 
+     /**
+      * Only index 0 is valid.
+      * @param index The index of the element
+      *        to retrieve.
+      * @return The singleton's element if the
+      *         index is 0.
+      * @throws IndexOutOfBoundsException if
+      *         index is not 0.
+      */
+     public Object get(int index)
+     {
+       if (index == 0)
+         return element;
+       throw new IndexOutOfBoundsException();
+     }
+ 
+     // The remaining methods are optional, but provide a performance
+     // advantage by not allocating unnecessary iterators in AbstractList.
+     /**
+      * The set only contains one element.
+      *
+      * @param o The object to search for.
+      * @return <code>true</code> if o == the singleton element.
+      */
+     public boolean contains(Object o)
+     {
+       return equals(o, element);
+     }
+ 
+     /**
+      * This is true if the other collection only contains the element.
+      *
+      * @param c A collection to compare against this singleton.
+      * @return <code>true</code> if c only contains either no elements or
+      *         elements equal to the element in this singleton.
+      */
+     public boolean containsAll(Collection c)
+     {
+       Iterator i = c.iterator();
+       int pos = c.size();
+       while (--pos >= 0)
+         if (! equals(i.next(), element))
+           return false;
+       return true;
+     }
+ 
+     /**
+      * Speed up the hashcode computation.
+      *
+      * @return The hashcode of the list, based
+      *         on the hashcode of the singleton element.
+      */
+     public int hashCode()
+     {
+       return 31 + hashCode(element);
+     }
+ 
+     /**
+      * Either the list has it or not.
+      *
+      * @param o The object to find the first index of.
+      * @return 0 if o is the singleton element, -1 if not.
+      */
+     public int indexOf(Object o)
+     {
+       return equals(o, element) ? 0 : -1;
+     }
+ 
+     /**
+      * Either the list has it or not.
+      *
+      * @param o The object to find the last index of.
+      * @return 0 if o is the singleton element, -1 if not.
+      */
+     public int lastIndexOf(Object o)
+     {
+       return equals(o, element) ? 0 : -1;
+     }
+ 
+     /**
+      * Sublists are limited in scope.
+      * 
+      * @param from The starting bound for the sublist.
+      * @param to The ending bound for the sublist.
+      * @return Either an empty list if both bounds are
+      *         0 or 1, or this list if the bounds are 0 and 1.
+      * @throws IllegalArgumentException if <code>from > to</code>
+      * @throws IndexOutOfBoundsException if either bound is greater
+      *         than 1.
+      */
+     public List subList(int from, int to)
+     {
+       if (from == to && (to == 0 || to == 1))
+         return EMPTY_LIST;
+       if (from == 0 && to == 1)
+         return this;
+       if (from > to)
+         throw new IllegalArgumentException();
+       throw new IndexOutOfBoundsException();
+     }
+ 
+     /**
+      * Returning an array is simple.
+      *
+      * @return An array containing the element.
+      */
+     public Object[] toArray()
+     {
+       return new Object[] {element};
+     }
+ 
+     /**
+      * Obvious string.
+      *
+      * @return The string surrounded by enclosing
+      *         square brackets. 
+      */
+     public String toString()
+     {
+       return "[" + element + "]";
+     }
+   } // class SingletonList
+ 
+   /**
+    * Obtain an immutable Map consisting of a single key-value pair.
+    * The return value of this method is Serializable.
+    *
+    * @param key the single key
+    * @param value the single value
+    * @return an immutable Map containing only the single key-value pair
+    * @see Serializable
+    * @since 1.3
+    */
+   public static Map singletonMap(Object key, Object value)
+   {
+     return new SingletonMap(key, value);
+   }
+ 
+   /**
+    * The implementation of {@link #singletonMap(Object, Object)}. This class
+    * name is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class SingletonMap extends AbstractMap
+     implements Serializable
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -6979724477215052911L;
+ 
+     /**
+      * The single key.
+      * @serial the singleton key
+      */
+     private final Object k;
+ 
+     /**
+      * The corresponding value.
+      * @serial the singleton value
+      */
+     private final Object v;
+ 
+     /**
+      * Cache the entry set.
+      */
+     private transient Set entries;
+ 
+     /**
+      * Construct a singleton.
+      * @param key the key
+      * @param value the value
+      */
+     SingletonMap(Object key, Object value)
+     {
+       k = key;
+       v = value;
+     }
+ 
+     /**
+      * There is a single immutable entry.
+      *
+      * @return A singleton containing the map entry.
+      */
+     public Set entrySet()
+     {
+       if (entries == null)
+         entries = singleton(new AbstractMap.BasicMapEntry(k, v)
+         {
+ 	  /**
+ 	   * Sets the value of the map entry to the supplied value.
+ 	   * An exception is always thrown, as the map is immutable.
+ 	   *
+ 	   * @param o The new value.
+ 	   * @return The old value.
+ 	   * @throws UnsupportedOperationException as setting the value
+ 	   *         is not supported.
+ 	   */
+           public Object setValue(Object o)
+           {
+             throw new UnsupportedOperationException();
+           }
+         });
+       return entries;
+     }
+ 
+     // The remaining methods are optional, but provide a performance
+     // advantage by not allocating unnecessary iterators in AbstractMap.
+     /**
+      * Single entry.
+      *
+      * @param key The key to look for.
+      * @return <code>true</code> if the key is the same as the one used by
+      *         this map.
+      */
+     public boolean containsKey(Object key)
+     {
+       return equals(key, k);
+     }
+ 
+     /**
+      * Single entry.
+      *
+      * @param value The value to look for.
+      * @return <code>true</code> if the value is the same as the one used by
+      *         this map.
+      */
+     public boolean containsValue(Object value)
+     {
+       return equals(value, v);
+     }
+ 
+     /**
+      * Single entry.
+      *
+      * @param key The key of the value to be retrieved.
+      * @return The singleton value if the key is the same as the
+      *         singleton key, null otherwise.
+      */
+     public Object get(Object key)
+     {
+       return equals(key, k) ? v : null;
+     }
+ 
+     /**
+      * Calculate the hashcode directly.
+      *
+      * @return The hashcode computed from the singleton key
+      *         and the singleton value.
+      */
+     public int hashCode()
+     {
+       return hashCode(k) ^ hashCode(v);
+     }
+ 
+     /**
+      * Return the keyset.
+      *
+      * @return A singleton containing the key.
+      */
+     public Set keySet()
+     {
+       if (keys == null)
+         keys = singleton(k);
+       return keys;
+     }
+ 
+     /**
+      * The size: always 1!
+      *
+      * @return 1.
+      */
+     public int size()
+     {
+       return 1;
+     }
+ 
+     /**
+      * Return the values. Technically, a singleton, while more specific than
+      * a general Collection, will work. Besides, that's what the JDK uses!
+      *
+      * @return A singleton containing the value.
+      */
+     public Collection values()
+     {
+       if (values == null)
+         values = singleton(v);
+       return values;
+     }
+ 
+     /**
+      * Obvious string.
+      *
+      * @return A string containing the string representations of the key
+      *         and its associated value.
+      */
+     public String toString()
+     {
+       return "{" + k + "=" + v + "}";
+     }
+   } // class SingletonMap
+ 
+   /**
+    * Sort a list according to the natural ordering of its elements. The list
+    * must be modifiable, but can be of fixed size. The sort algorithm is
+    * precisely that used by Arrays.sort(Object[]), which offers guaranteed
+    * nlog(n) performance. This implementation dumps the list into an array,
+    * sorts the array, and then iterates over the list setting each element from
+    * the array.
+    *
+    * @param l the List to sort
+    * @throws ClassCastException if some items are not mutually comparable
+    * @throws UnsupportedOperationException if the List is not modifiable
+    * @throws NullPointerException if some element is null
+    * @see Arrays#sort(Object[])
+    */
+   public static void sort(List l)
+   {
+     sort(l, null);
+   }
+ 
+   /**
+    * Sort a list according to a specified Comparator. The list must be
+    * modifiable, but can be of fixed size. The sort algorithm is precisely that
+    * used by Arrays.sort(Object[], Comparator), which offers guaranteed
+    * nlog(n) performance. This implementation dumps the list into an array,
+    * sorts the array, and then iterates over the list setting each element from
+    * the array.
+    *
+    * @param l the List to sort
+    * @param c the Comparator specifying the ordering for the elements, or
+    *        null for natural ordering
+    * @throws ClassCastException if c will not compare some pair of items
+    * @throws UnsupportedOperationException if the List is not modifiable
+    * @throws NullPointerException if null is compared by natural ordering
+    *        (only possible when c is null)
+    * @see Arrays#sort(Object[], Comparator)
+    */
+   public static void sort(List l, Comparator c)
+   {
+     Object[] a = l.toArray();
+     Arrays.sort(a, c);
+     ListIterator i = l.listIterator();
+     for (int pos = 0, alen = a.length;  pos < alen;  pos++)
+       {
+         i.next();
+         i.set(a[pos]);
+       }
+   }
+ 
+   /**
+    * Swaps the elements at the specified positions within the list. Equal
+    * positions have no effect.
+    *
+    * @param l the list to work on
+    * @param i the first index to swap
+    * @param j the second index
+    * @throws UnsupportedOperationException if list.set is not supported
+    * @throws IndexOutOfBoundsException if either i or j is &lt; 0 or &gt;=
+    *         list.size()
+    * @since 1.4
+    */
+   public static void swap(List l, int i, int j)
+   {
+     l.set(i, l.set(j, l.get(i)));
+   }
+ 
+ 
+   /**
+    * Returns a synchronized (thread-safe) collection wrapper backed by the
+    * given collection. Notice that element access through the iterators
+    * is thread-safe, but if the collection can be structurally modified
+    * (adding or removing elements) then you should synchronize around the
+    * iteration to avoid non-deterministic behavior:<br>
+    * <pre>
+    * Collection c = Collections.synchronizedCollection(new Collection(...));
+    * ...
+    * synchronized (c)
+    *   {
+    *     Iterator i = c.iterator();
+    *     while (i.hasNext())
+    *       foo(i.next());
+    *   }
+    * </pre><p>
+    *
+    * Since the collection might be a List or a Set, and those have incompatible
+    * equals and hashCode requirements, this relies on Object's implementation
+    * rather than passing those calls on to the wrapped collection. The returned
+    * Collection implements Serializable, but can only be serialized if
+    * the collection it wraps is likewise Serializable.
+    *
+    * @param c the collection to wrap
+    * @return a synchronized view of the collection
+    * @see Serializable
+    */
+   public static Collection synchronizedCollection(Collection c)
+   {
+     return new SynchronizedCollection(c);
+   }
+ 
+   /**
+    * The implementation of {@link #synchronizedCollection(Collection)}. This
+    * class name is required for compatibility with Sun's JDK serializability.
+    * Package visible, so that collections such as the one for
+    * Hashtable.values() can specify which object to synchronize on.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   static class SynchronizedCollection
+     implements Collection, Serializable
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 3053995032091335093L;
+ 
+     /**
+      * The wrapped collection. Package visible for use by subclasses.
+      * @serial the real collection
+      */
+     final Collection c;
+ 
+     /**
+      * The object to synchronize on.  When an instance is created via public
+      * methods, it will be this; but other uses like SynchronizedMap.values()
+      * must specify another mutex. Package visible for use by subclasses.
+      * @serial the lock
+      */
+     final Object mutex;
+ 
+     /**
+      * Wrap a given collection.
+      * @param c the collection to wrap
+      * @throws NullPointerException if c is null
+      */
+     SynchronizedCollection(Collection c)
+     {
+       this.c = c;
+       mutex = this;
+       if (c == null)
+         throw new NullPointerException();
+     }
+ 
+     /**
+      * Called only by trusted code to specify the mutex as well as the
+      * collection.
+      * @param sync the mutex
+      * @param c the collection
+      */
+     SynchronizedCollection(Object sync, Collection c)
+     {
+       this.c = c;
+       mutex = sync;
+     }
+ 
+     /**
+      * Adds the object to the underlying collection, first
+      * obtaining a lock on the mutex.
+      *
+      * @param o The object to add.
+      * @return <code>true</code> if the collection was modified as a result
+      *         of this action.
+      * @throws UnsupportedOperationException if this collection does not
+      *         support the add operation.
+      * @throws ClassCastException if o cannot be added to this collection due
+      *         to its type.
+      * @throws NullPointerException if o is null and this collection doesn't
+      *         support the addition of null values.
+      * @throws IllegalArgumentException if o cannot be added to this
+      *         collection for some other reason.
+      */
+     public boolean add(Object o)
+     {
+       synchronized (mutex)
+         {
+           return c.add(o);
+         }
+     }
+ 
+     /**
+      * Adds the objects in col to the underlying collection, first
+      * obtaining a lock on the mutex.
+      *
+      * @param col The collection to take the new objects from.
+      * @return <code>true</code> if the collection was modified as a result
+      *          of this action.
+      * @throws UnsupportedOperationException if this collection does not
+      *         support the addAll operation.
+      * @throws ClassCastException if some element of col cannot be added to this
+      *         collection due to its type.
+      * @throws NullPointerException if some element of col is null and this
+      *         collection does not support the addition of null values.
+      * @throws NullPointerException if col itself is null.
+      * @throws IllegalArgumentException if some element of col cannot be added
+      *         to this collection for some other reason.
+      */
+     public boolean addAll(Collection col)
+     {
+       synchronized (mutex)
+         {
+           return c.addAll(col);
+         }
+     }
+ 
+     /**
+      * Removes all objects from the underlying collection,
+      * first obtaining a lock on the mutex.
+      *
+      * @throws UnsupportedOperationException if this collection does not
+      *         support the clear operation.
+      */
+     public void clear()
+     {
+       synchronized (mutex)
+         {
+           c.clear();
+         }
+     }
+ 
+     /**
+      * Checks for the existence of o within the underlying
+      * collection, first obtaining a lock on the mutex.
+      *
+      * @param o the element to look for.
+      * @return <code>true</code> if this collection contains at least one
+      *         element e such that <code>o == null ? e == null : o.equals(e)</code>.
+      * @throws ClassCastException if the type of o is not a valid type for this
+      *         collection.
+      * @throws NullPointerException if o is null and this collection doesn't
+      *         support null values.
+      */
+     public boolean contains(Object o)
+     {
+       synchronized (mutex)
+         {
+           return c.contains(o);
+         }
+     }
+ 
+     /**
+      * Checks for the existence of each object in cl
+      * within the underlying collection, first obtaining
+      * a lock on the mutex.
+      *
+      * @param c1 the collection to test for.
+      * @return <code>true</code> if for every element o in c, contains(o)
+      *         would return <code>true</code>.
+      * @throws ClassCastException if the type of any element in cl is not a valid
+      *         type for this collection.
+      * @throws NullPointerException if some element of cl is null and this
+      *         collection does not support null values.
+      * @throws NullPointerException if cl itself is null.
+      */
+     public boolean containsAll(Collection c1)
+     {
+       synchronized (mutex)
+         {
+           return c.containsAll(c1);
+         }
+     }
+ 
+     /**
+      * Returns <code>true</code> if there are no objects in the underlying
+      * collection.  A lock on the mutex is obtained before the
+      * check is performed.
+      *
+      * @return <code>true</code> if this collection contains no elements.
+      */
+     public boolean isEmpty()
+     {
+       synchronized (mutex)
+         {
+           return c.isEmpty();
+         }
+     }
+ 
+     /**
+      * Returns a synchronized iterator wrapper around the underlying
+      * collection's iterator.  A lock on the mutex is obtained before
+      * retrieving the collection's iterator.
+      *
+      * @return An iterator over the elements in the underlying collection,
+      *         which returns each element in any order.
+      */
+     public Iterator iterator()
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedIterator(mutex, c.iterator());
+         }
+     }
+ 
+     /**
+      * Removes the specified object from the underlying collection,
+      * first obtaining a lock on the mutex.
+      *
+      * @param o The object to remove.
+      * @return <code>true</code> if the collection changed as a result of this call, that is,
+      *         if the collection contained at least one occurrence of o.
+      * @throws UnsupportedOperationException if this collection does not
+      *         support the remove operation.
+      * @throws ClassCastException if the type of o is not a valid type
+      *         for this collection.
+      * @throws NullPointerException if o is null and the collection doesn't
+      *         support null values.
+      */
+     public boolean remove(Object o)
+     {
+       synchronized (mutex)
+         {
+           return c.remove(o);
+         }
+     }
+ 
+     /**
+      * Removes all elements, e, of the underlying
+      * collection for which <code>col.contains(e)</code>
+      * returns <code>true</code>.  A lock on the mutex is obtained
+      * before the operation proceeds.
+      *
+      * @param col The collection of objects to be removed.
+      * @return <code>true</code> if this collection was modified as a result of this call.
+      * @throws UnsupportedOperationException if this collection does not
+      *   support the removeAll operation.
+      * @throws ClassCastException if the type of any element in c is not a valid
+      *   type for this collection.
+      * @throws NullPointerException if some element of c is null and this
+      *   collection does not support removing null values.
+      * @throws NullPointerException if c itself is null.
+      */
+     public boolean removeAll(Collection col)
+     {
+       synchronized (mutex)
+         {
+           return c.removeAll(col);
+         }
+     }
+ 
+     /**
+      * Retains all elements, e, of the underlying
+      * collection for which <code>col.contains(e)</code>
+      * returns <code>true</code>.  That is, every element that doesn't
+      * exist in col is removed.  A lock on the mutex is obtained
+      * before the operation proceeds.
+      *
+      * @param col The collection of objects to be removed.
+      * @return <code>true</code> if this collection was modified as a result of this call.
+      * @throws UnsupportedOperationException if this collection does not
+      *   support the removeAll operation.
+      * @throws ClassCastException if the type of any element in c is not a valid
+      *   type for this collection.
+      * @throws NullPointerException if some element of c is null and this
+      *   collection does not support removing null values.
+      * @throws NullPointerException if c itself is null.
+      */
+     public boolean retainAll(Collection col)
+     {
+       synchronized (mutex)
+         {
+           return c.retainAll(col);
+         }
+     }
+ 
+     /**
+      * Retrieves the size of the underlying collection.
+      * A lock on the mutex is obtained before the collection
+      * is accessed.
+      *
+      * @return The size of the collection.
+      */
+     public int size()
+     {
+       synchronized (mutex)
+         {
+           return c.size();
+         }
+     }
+ 
+     /**
+      * Returns an array containing each object within the underlying
+      * collection.  A lock is obtained on the mutex before the collection
+      * is accessed.
+      *
+      * @return An array of objects, matching the collection in size.  The
+      *         elements occur in any order.
+      */
+     public Object[] toArray()
+     {
+       synchronized (mutex)
+         {
+           return c.toArray();
+         }
+     }
+ 
+     /**
+      * Copies the elements in the underlying collection to the supplied
+      * array.  If <code>a.length < size()</code>, a new array of the
+      * same run-time type is created, with a size equal to that of
+      * the collection.  If <code>a.length > size()</code>, then the
+      * elements from 0 to <code>size() - 1</code> contain the elements
+      * from this collection.  The following element is set to null
+      * to indicate the end of the collection objects.  However, this
+      * only makes a difference if null is not a permitted value within
+      * the collection.
+      * Before the copying takes place, a lock is obtained on the mutex.
+      *
+      * @param a An array to copy elements to.
+      * @return An array containing the elements of the underlying collection.
+      * @throws ArrayStoreException if the type of any element of the
+      *         collection is not a subtype of the element type of a.
+      */
+     public Object[] toArray(Object[] a)
+     {
+       synchronized (mutex)
+         {
+           return c.toArray(a);
+         }
+     }
+ 
+     /**
+      * Returns a string representation of the underlying collection.
+      * A lock is obtained on the mutex before the string is created.
+      *
+      * @return A string representation of the collection.
+      */
+     public String toString()
+     {
+       synchronized (mutex)
+         {
+           return c.toString();
+         }
+     }
+   } // class SynchronizedCollection
+ 
+   /**
+    * The implementation of the various iterator methods in the
+    * synchronized classes. These iterators must "sync" on the same object
+    * as the collection they iterate over.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class SynchronizedIterator implements Iterator
+   {
+     /**
+      * The object to synchronize on. Package visible for use by subclass.
+      */
+     final Object mutex;
+ 
+     /**
+      * The wrapped iterator.
+      */
+     private final Iterator i;
+ 
+     /**
+      * Only trusted code creates a wrapper, with the specified sync.
+      * @param sync the mutex
+      * @param i the wrapped iterator
+      */
+     SynchronizedIterator(Object sync, Iterator i)
+     {
+       this.i = i;
+       mutex = sync;
+     }
+ 
+     /**
+      * Retrieves the next object in the underlying collection.
+      * A lock is obtained on the mutex before the collection is accessed.
+      * 
+      * @return The next object in the collection.
+      * @throws NoSuchElementException if there are no more elements
+      */
+     public Object next()
+     {
+       synchronized (mutex)
+         {
+           return i.next();
+         }
+     }
+ 
+     /**
+      * Returns <code>true</code> if objects can still be retrieved from the iterator
+      * using <code>next()</code>.  A lock is obtained on the mutex before
+      * the collection is accessed.
+      *
+      * @return <code>true</code> if at least one element is still to be returned by
+      *         <code>next()</code>.
+      */
+     public boolean hasNext()
+     {
+       synchronized (mutex)
+         {
+           return i.hasNext();
+         }
+     }
+ 
+     /**
+      * Removes the object that was last returned by <code>next()</code>
+      * from the underlying collection.  Only one call to this method is
+      * allowed per call to the <code>next()</code> method, and it does
+      * not affect the value that will be returned by <code>next()</code>.
+      * Thus, if element n was retrieved from the collection by
+      * <code>next()</code>, it is this element that gets removed.
+      * Regardless of whether this takes place or not, element n+1 is
+      * still returned on the subsequent <code>next()</code> call.
+      *
+      * @throws IllegalStateException if next has not yet been called or remove
+      *         has already been called since the last call to next.
+      * @throws UnsupportedOperationException if this Iterator does not support
+      *         the remove operation.
+      */
+     public void remove()
+     {
+       synchronized (mutex)
+         {
+           i.remove();
+         }
+     }
+   } // class SynchronizedIterator
+ 
+   /**
+    * Returns a synchronized (thread-safe) list wrapper backed by the
+    * given list. Notice that element access through the iterators
+    * is thread-safe, but if the list can be structurally modified
+    * (adding or removing elements) then you should synchronize around the
+    * iteration to avoid non-deterministic behavior:<br>
+    * <pre>
+    * List l = Collections.synchronizedList(new List(...));
+    * ...
+    * synchronized (l)
+    *   {
+    *     Iterator i = l.iterator();
+    *     while (i.hasNext())
+    *       foo(i.next());
+    *   }
+    * </pre><p>
+    *
+    * The returned List implements Serializable, but can only be serialized if
+    * the list it wraps is likewise Serializable. In addition, if the wrapped
+    * list implements RandomAccess, this does too.
+    *
+    * @param l the list to wrap
+    * @return a synchronized view of the list
+    * @see Serializable
+    * @see RandomAccess
+    */
+   public static List synchronizedList(List l)
+   {
+     if (l instanceof RandomAccess)
+       return new SynchronizedRandomAccessList(l);
+     return new SynchronizedList(l);
+   }
+ 
+   /**
+    * The implementation of {@link #synchronizedList(List)} for sequential
+    * lists. This class name is required for compatibility with Sun's JDK
+    * serializability. Package visible, so that lists such as Vector.subList()
+    * can specify which object to synchronize on.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   static class SynchronizedList extends SynchronizedCollection
+     implements List
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -7754090372962971524L;
+ 
+     /**
+      * The wrapped list; stored both here and in the superclass to avoid
+      * excessive casting. Package visible for use by subclass.
+      * @serial the wrapped list
+      */
+     final List list;
+ 
+     /**
+      * Wrap a given list.
+      * @param l the list to wrap
+      * @throws NullPointerException if l is null
+      */
+     SynchronizedList(List l)
+     {
+       super(l);
+       list = l;
+     }
+ 
+     /**
+      * Called only by trusted code to specify the mutex as well as the list.
+      * @param sync the mutex
+      * @param l the list
+      */
+     SynchronizedList(Object sync, List l)
+     {
+       super(sync, l);
+       list = l;
+     }
+ 
+   /**
+    * Insert an element into the underlying list at a given position (optional
+    * operation).  This shifts all existing elements from that position to the
+    * end one index to the right. This version of add has no return, since it is
+    * assumed to always succeed if there is no exception.  Before the
+    * addition takes place, a lock is obtained on the mutex.
+    *
+    * @param index the location to insert the item
+    * @param o the object to insert
+    * @throws UnsupportedOperationException if this list does not support the
+    *         add operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    * @throws NullPointerException if o is null and this list doesn't support
+    *         the addition of null values.
+    */
+     public void add(int index, Object o)
+     {
+       synchronized (mutex)
+         {
+           list.add(index, o);
+         }
+     }
+ 
+   /**
+    * Add the contents of a collection to the underlying list at the given
+    * index (optional operation).  If the list imposes restraints on what 
+    * can be inserted, such as no null elements, this should be documented.
+    * A lock is obtained on the mutex before any of the elements are added.
+    *
+    * @param index the index at which to insert
+    * @param c the collection to add
+    * @return <code>true</code>, as defined by Collection for a modified list
+    * @throws UnsupportedOperationException if this list does not support the
+    *         add operation
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    * @throws NullPointerException if o is null and this list doesn't support
+    *         the addition of null values.
+    */
+     public boolean addAll(int index, Collection c)
+     {
+       synchronized (mutex)
+         {
+           return list.addAll(index, c);
+         }
+     }
+ 
+    /**
+     * Tests whether the underlying list is equal to the supplied object.
+     * The object is deemed to be equal if it is also a <code>List</code>
+     * of equal size and with the same elements (i.e. each element, e1,
+     * in list, l1, and each element, e2, in l2, must return <code>true</code> for
+     * <code>e1 == null ? e2 == null : e1.equals(e2)</code>.  Before the
+     * comparison is made, a lock is obtained on the mutex.
+     *
+     * @param o The object to test for equality with the underlying list.
+     * @return <code>true</code> if o is equal to the underlying list under the above
+     *         definition.
+     */
+     public boolean equals(Object o)
+     {
+       synchronized (mutex)
+         {
+           return list.equals(o);
+         }
+     }
+ 
+     /**
+      * Retrieves the object at the specified index.  A lock
+      * is obtained on the mutex before the list is accessed.
+      *
+      * @param index the index of the element to be returned
+      * @return the element at index index in this list
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+      */
+     public Object get(int index)
+     {
+       synchronized (mutex)
+         {
+           return list.get(index);
+         }
+     }
+ 
+     /**
+      * Obtains a hashcode for the underlying list, first obtaining
+      * a lock on the mutex.  The calculation of the hashcode is
+      * detailed in the documentation for the <code>List</code>
+      * interface.
+      *
+      * @return The hashcode of the underlying list.
+      * @see List#hashCode()
+      */
+     public int hashCode()
+     {
+       synchronized (mutex)
+         {
+           return list.hashCode();
+         }
+     }
+ 
+     /**
+      * Obtain the first index at which a given object is to be found in the
+      * underlying list.  A lock is obtained on the mutex before the list is
+      * accessed.
+      *
+      * @param o the object to search for
+      * @return the least integer n such that <code>o == null ? get(n) == null :
+      *         o.equals(get(n))</code>, or -1 if there is no such index.
+      * @throws ClassCastException if the type of o is not a valid
+      *         type for this list.
+      * @throws NullPointerException if o is null and this
+      *         list does not support null values.
+      */
+ 
+     public int indexOf(Object o)
+     {
+       synchronized (mutex)
+         {
+           return list.indexOf(o);
+         }
+     }
+ 
+     /**
+      * Obtain the last index at which a given object is to be found in this
+      * underlying list.  A lock is obtained on the mutex before the list
+      * is accessed.
+      *
+      * @return the greatest integer n such that <code>o == null ? get(n) == null
+      *         : o.equals(get(n))</code>, or -1 if there is no such index.
+      * @throws ClassCastException if the type of o is not a valid
+      *         type for this list.
+      * @throws NullPointerException if o is null and this
+      *         list does not support null values.
+      */
+     public int lastIndexOf(Object o)
+     {
+       synchronized (mutex)
+         {
+           return list.lastIndexOf(o);
+         }
+     }
+ 
+     /**
+      * Retrieves a synchronized wrapper around the underlying list's
+      * list iterator.  A lock is obtained on the mutex before the
+      * list iterator is retrieved.
+      *
+      * @return A list iterator over the elements in the underlying list.
+      *         The list iterator allows additional list-specific operations
+      *         to be performed, in addition to those supplied by the
+      *         standard iterator.
+      */
+     public ListIterator listIterator()
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedListIterator(mutex, list.listIterator());
+         }
+     }
+ 
+     /**
+      * Retrieves a synchronized wrapper around the underlying list's
+      * list iterator.  A lock is obtained on the mutex before the
+      * list iterator is retrieved.  The iterator starts at the
+      * index supplied, leading to the element at that index being
+      * the first one returned by <code>next()</code>.  Calling
+      * <code>previous()</code> from this initial position returns
+      * index - 1.
+      *
+      * @param index the position, between 0 and size() inclusive, to begin the
+      *        iteration from
+      * @return A list iterator over the elements in the underlying list.
+      *         The list iterator allows additional list-specific operations
+      *         to be performed, in addition to those supplied by the
+      *         standard iterator.
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+      */
+     public ListIterator listIterator(int index)
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedListIterator(mutex, list.listIterator(index));
+         }
+     }
+ 
+     /**
+      * Remove the element at a given position in the underlying list (optional
+      * operation).  All remaining elements are shifted to the left to fill the gap.
+      * A lock on the mutex is obtained before the element is removed.
+      *
+      * @param index the position within the list of the object to remove
+      * @return the object that was removed
+      * @throws UnsupportedOperationException if this list does not support the
+      *         remove operation
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+      */
+     public Object remove(int index)
+     {
+       synchronized (mutex)
+         {
+           return list.remove(index);
+         }
+     }
+ 
+   /**
+    * Replace an element of the underlying list with another object (optional
+    * operation).  A lock is obtained on the mutex before the element is
+    * replaced.
+    *
+    * @param index the position within this list of the element to be replaced
+    * @param o the object to replace it with
+    * @return the object that was replaced
+    * @throws UnsupportedOperationException if this list does not support the
+    *         set operation.
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    * @throws NullPointerException if o is null and this
+    *         list does not support null values.
+    */
+     public Object set(int index, Object o)
+     {
+       synchronized (mutex)
+         {
+           return list.set(index, o);
+         }
+     }
+ 
+     /**
+      * Obtain a List view of a subsection of the underlying list, from fromIndex
+      * (inclusive) to toIndex (exclusive). If the two indices are equal, the
+      * sublist is empty. The returned list should be modifiable if and only
+      * if this list is modifiable. Changes to the returned list should be
+      * reflected in this list. If this list is structurally modified in
+      * any way other than through the returned list, the result of any subsequent
+      * operations on the returned list is undefined.  A lock is obtained
+      * on the mutex before the creation of the sublist.  The returned list
+      * is also synchronized, using the same mutex.
+      *
+      * @param fromIndex the index that the returned list should start from
+      *        (inclusive)
+      * @param toIndex the index that the returned list should go to (exclusive)
+      * @return a List backed by a subsection of this list
+      * @throws IndexOutOfBoundsException if fromIndex &lt; 0
+      *         || toIndex &gt; size() || fromIndex &gt; toIndex
+      */
+     public List subList(int fromIndex, int toIndex)
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedList(mutex, list.subList(fromIndex, toIndex));
+         }
+     }
+   } // class SynchronizedList
+ 
+   /**
+    * The implementation of {@link #synchronizedList(List)} for random-access
+    * lists. This class name is required for compatibility with Sun's JDK
+    * serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class SynchronizedRandomAccessList
+     extends SynchronizedList implements RandomAccess
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 1530674583602358482L;
+ 
+     /**
+      * Wrap a given list.
+      * @param l the list to wrap
+      * @throws NullPointerException if l is null
+      */
+     SynchronizedRandomAccessList(List l)
+     {
+       super(l);
+     }
+ 
+     /**
+      * Called only by trusted code to specify the mutex as well as the
+      * collection.
+      * @param sync the mutex
+      * @param l the list
+      */
+     SynchronizedRandomAccessList(Object sync, List l)
+     {
+       super(sync, l);
+     }
+ 
+     /**
+      * Obtain a List view of a subsection of the underlying list, from fromIndex
+      * (inclusive) to toIndex (exclusive). If the two indices are equal, the
+      * sublist is empty. The returned list should be modifiable if and only
+      * if this list is modifiable. Changes to the returned list should be
+      * reflected in this list. If this list is structurally modified in
+      * any way other than through the returned list, the result of any subsequent
+      * operations on the returned list is undefined.    A lock is obtained
+      * on the mutex before the creation of the sublist.  The returned list
+      * is also synchronized, using the same mutex.  Random accessibility
+      * is also extended to the new list.
+      *
+      * @param fromIndex the index that the returned list should start from
+      *        (inclusive)
+      * @param toIndex the index that the returned list should go to (exclusive)
+      * @return a List backed by a subsection of this list
+      * @throws IndexOutOfBoundsException if fromIndex &lt; 0
+      *         || toIndex &gt; size() || fromIndex &gt; toIndex
+      */
+     public List subList(int fromIndex, int toIndex)
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedRandomAccessList(mutex,
+                                                   list.subList(fromIndex,
+                                                                toIndex));
+         }
+     }
+   } // class SynchronizedRandomAccessList
+ 
+   /**
+    * The implementation of {@link SynchronizedList#listIterator()}. This
+    * iterator must "sync" on the same object as the list it iterates over.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class SynchronizedListIterator
+     extends SynchronizedIterator implements ListIterator
+   {
+     /**
+      * The wrapped iterator, stored both here and in the superclass to
+      * avoid excessive casting.
+      */
+     private final ListIterator li;
+ 
+     /**
+      * Only trusted code creates a wrapper, with the specified sync.
+      * @param sync the mutex
+      * @param li the wrapped iterator
+      */
+     SynchronizedListIterator(Object sync, ListIterator li)
+     {
+       super(sync, li);
+       this.li = li;
+     }
+ 
+     /**
+      * Insert an element into the underlying list at the current position of
+      * the iterator (optional operation). The element is inserted in between
+      * the element that would be returned by <code>previous()</code> and the
+      * element that would be returned by <code>next()</code>. After the
+      * insertion, a subsequent call to next is unaffected, but
+      * a call to previous returns the item that was added. The values returned
+      * by nextIndex() and previousIndex() are incremented.  A lock is obtained
+      * on the mutex before the addition takes place.
+      *
+      * @param o the object to insert into the list
+      * @throws ClassCastException if the object is of a type which cannot be added
+      *         to this list.
+      * @throws IllegalArgumentException if some other aspect of the object stops
+      *         it being added to this list.
+      * @throws UnsupportedOperationException if this ListIterator does not
+      *         support the add operation.
+      */
+     public void add(Object o)
+     {
+       synchronized (mutex)
+         {
+           li.add(o);
+         }
+     }
+ 
+     /**
+      * Tests whether there are elements remaining in the underlying list
+      * in the reverse direction. In other words, <code>previous()</code>
+      * will not fail with a NoSuchElementException.  A lock is obtained
+      * on the mutex before the check takes place.
+      *
+      * @return <code>true</code> if the list continues in the reverse direction
+      */
+     public boolean hasPrevious()
+     {
+       synchronized (mutex)
+         {
+           return li.hasPrevious();
+         }
+     }
+ 
+     /**
+       * Find the index of the element that would be returned by a call to
+       * <code>next()</code>.  If hasNext() returns <code>false</code>, this
+       * returns the list size.  A lock is obtained on the mutex before the
+       * query takes place.
+       *
+       * @return the index of the element that would be returned by next()
+       */
+     public int nextIndex()
+     {
+       synchronized (mutex)
+         {
+           return li.nextIndex();
+         }
+     }
+ 
+     /**
+      * Obtain the previous element from the underlying list. Repeated
+      * calls to previous may be used to iterate backwards over the entire list,
+      * or calls to next and previous may be used together to go forwards and
+      * backwards. Alternating calls to next and previous will return the same
+      * element.  A lock is obtained on the mutex before the object is retrieved.
+      *
+      * @return the next element in the list in the reverse direction
+      * @throws NoSuchElementException if there are no more elements
+      */
+     public Object previous()
+     {
+       synchronized (mutex)
+         {
+           return li.previous();
+         }
+     }
+ 
+     /**
+      * Find the index of the element that would be returned by a call to
+      * previous. If hasPrevious() returns <code>false</code>, this returns -1.
+      * A lock is obtained on the mutex before the query takes place.
+      *
+      * @return the index of the element that would be returned by previous()
+      */
+     public int previousIndex()
+     {
+       synchronized (mutex)
+         {
+           return li.previousIndex();
+         }
+     }
+ 
+     /**
+      * Replace the element last returned by a call to <code>next()</code> or
+      * <code>previous()</code> with a given object (optional operation).  This
+      * method may only be called if neither <code>add()</code> nor
+      * <code>remove()</code> have been called since the last call to
+      * <code>next()</code> or <code>previous</code>.  A lock is obtained
+      * on the mutex before the list is modified.
+      *
+      * @param o the object to replace the element with
+      * @throws ClassCastException the object is of a type which cannot be added
+      *         to this list
+      * @throws IllegalArgumentException some other aspect of the object stops
+      *         it being added to this list
+      * @throws IllegalStateException if neither next or previous have been
+      *         called, or if add or remove has been called since the last call
+      *         to next or previous
+      * @throws UnsupportedOperationException if this ListIterator does not
+      *         support the set operation
+      */
+     public void set(Object o)
+     {
+       synchronized (mutex)
+         {
+           li.set(o);
+         }
+     }
+   } // class SynchronizedListIterator
+ 
+   /**
+    * Returns a synchronized (thread-safe) map wrapper backed by the given
+    * map. Notice that element access through the collection views and their
+    * iterators are thread-safe, but if the map can be structurally modified
+    * (adding or removing elements) then you should synchronize around the
+    * iteration to avoid non-deterministic behavior:<br>
+    * <pre>
+    * Map m = Collections.synchronizedMap(new Map(...));
+    * ...
+    * Set s = m.keySet(); // safe outside a synchronized block
+    * synchronized (m) // synch on m, not s
+    *   {
+    *     Iterator i = s.iterator();
+    *     while (i.hasNext())
+    *       foo(i.next());
+    *   }
+    * </pre><p>
+    *
+    * The returned Map implements Serializable, but can only be serialized if
+    * the map it wraps is likewise Serializable.
+    *
+    * @param m the map to wrap
+    * @return a synchronized view of the map
+    * @see Serializable
+    */
+   public static Map synchronizedMap(Map m)
+   {
+     return new SynchronizedMap(m);
+   }
+ 
+   /**
+    * The implementation of {@link #synchronizedMap(Map)}. This
+    * class name is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class SynchronizedMap implements Map, Serializable
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 1978198479659022715L;
+ 
+     /**
+      * The wrapped map.
+      * @serial the real map
+      */
+     private final Map m;
+ 
+     /**
+      * The object to synchronize on.  When an instance is created via public
+      * methods, it will be this; but other uses like
+      * SynchronizedSortedMap.subMap() must specify another mutex. Package
+      * visible for use by subclass.
+      * @serial the lock
+      */
+     final Object mutex;
+ 
+     /**
+      * Cache the entry set.
+      */
+     private transient Set entries;
+ 
+     /**
+      * Cache the key set.
+      */
+     private transient Set keys;
+ 
+     /**
+      * Cache the value collection.
+      */
+     private transient Collection values;
+ 
+     /**
+      * Wrap a given map.
+      * @param m the map to wrap
+      * @throws NullPointerException if m is null
+      */
+     SynchronizedMap(Map m)
+     {
+       this.m = m;
+       mutex = this;
+       if (m == null)
+         throw new NullPointerException();
+     }
+ 
+     /**
+      * Called only by trusted code to specify the mutex as well as the map.
+      * @param sync the mutex
+      * @param m the map
+      */
+     SynchronizedMap(Object sync, Map m)
+     {
+       this.m = m;
+       mutex = sync;
+     }
+ 
+     /**
+      * Clears all the entries from the underlying map.  A lock is obtained
+      * on the mutex before the map is cleared.
+      *
+      * @throws UnsupportedOperationException if clear is not supported
+      */
+     public void clear()
+     {
+       synchronized (mutex)
+         {
+           m.clear();
+         }
+     }
+ 
+     /**
+      * Returns <code>true</code> if the underlying map contains a entry for the given key.
+      * A lock is obtained on the mutex before the map is queried.
+      *
+      * @param key the key to search for.
+      * @return <code>true</code> if the underlying map contains the key.
+      * @throws ClassCastException if the key is of an inappropriate type.
+      * @throws NullPointerException if key is <code>null</code> but the map
+      *         does not permit null keys.
+      */
+     public boolean containsKey(Object key)
+     {
+       synchronized (mutex)
+         {
+           return m.containsKey(key);
+         }
+     }
+ 
+   /**
+    * Returns <code>true</code> if the underlying map contains at least one entry with the
+    * given value.  In other words, returns <code>true</code> if a value v exists where
+    * <code>(value == null ? v == null : value.equals(v))</code>. This usually
+    * requires linear time.  A lock is obtained on the mutex before the map
+    * is queried.
+    *
+    * @param value the value to search for
+    * @return <code>true</code> if the map contains the value
+    * @throws ClassCastException if the type of the value is not a valid type
+    *         for this map.
+    * @throws NullPointerException if the value is null and the map doesn't
+    *         support null values.
+    */
+     public boolean containsValue(Object value)
+     {
+       synchronized (mutex)
+         {
+           return m.containsValue(value);
+         }
+     }
+ 
+     // This is one of the ickiest cases of nesting I've ever seen. It just
+     // means "return a SynchronizedSet, except that the iterator() method
+     // returns an SynchronizedIterator whose next() method returns a
+     // synchronized wrapper around its normal return value".
+     public Set entrySet()
+     {
+       // Define this here to spare some nesting.
+       class SynchronizedMapEntry implements Map.Entry
+       {
+         final Map.Entry e;
+         SynchronizedMapEntry(Object o)
+         {
+           e = (Map.Entry) o;
+         }
+ 
+ 	/**
+ 	 * Returns <code>true</code> if the object, o, implements <code>Map.Entry</code>
+ 	 * with the same key and value as the underlying entry.  A lock is
+ 	 * obtained on the mutex before the comparison takes place.
+ 	 *
+ 	 * @param o The object to compare with this entry.
+ 	 * @return <code>true</code> if o is equivalent to the underlying map entry.
+ 	 */
+         public boolean equals(Object o)
+         {
+           synchronized (mutex)
+             {
+               return e.equals(o);
+             }
+         }
+ 
+ 	/**
+ 	 * Returns the key used in the underlying map entry.  A lock is obtained
+ 	 * on the mutex before the key is retrieved.
+ 	 *
+ 	 * @return The key of the underlying map entry.
+ 	 */
+         public Object getKey()
+         {
+           synchronized (mutex)
+             {
+               return e.getKey();
+             }
+         }
+ 
+ 	/**
+ 	 * Returns the value used in the underlying map entry.  A lock is obtained
+ 	 * on the mutex before the value is retrieved.
+ 	 *
+ 	 * @return The value of the underlying map entry.
+ 	 */
+         public Object getValue()
+         {
+           synchronized (mutex)
+             {
+               return e.getValue();
+             }
+         }
+ 
+ 	/**
+ 	 * Computes the hash code for the underlying map entry.
+ 	 * This computation is described in the documentation for the
+ 	 * <code>Map</code> interface.  A lock is obtained on the mutex
+ 	 * before the underlying map is accessed.
+ 	 *
+ 	 * @return The hash code of the underlying map entry.
+ 	 * @see Map#hashCode()
+ 	 */
+         public int hashCode()
+         {
+           synchronized (mutex)
+             {
+               return e.hashCode();
+             }
+         }
+ 
+ 	/**
+ 	 * Replaces the value in the underlying map entry with the specified
+ 	 * object (optional operation).  A lock is obtained on the mutex
+ 	 * before the map is altered.  The map entry, in turn, will alter
+ 	 * the underlying map object.  The operation is undefined if the
+ 	 * <code>remove()</code> method of the iterator has been called
+ 	 * beforehand.
+ 	 *
+ 	 * @param value the new value to store
+ 	 * @return the old value
+ 	 * @throws UnsupportedOperationException if the operation is not supported.
+ 	 * @throws ClassCastException if the value is of the wrong type.
+ 	 * @throws IllegalArgumentException if something about the value
+ 	 *         prevents it from existing in this map.
+ 	 * @throws NullPointerException if the map forbids null values.
+ 	 */
+         public Object setValue(Object value)
+         {
+           synchronized (mutex)
+             {
+               return e.setValue(value);
+             }
+         }
+ 
+ 	/**
+ 	 * Returns a textual representation of the underlying map entry.
+ 	 * A lock is obtained on the mutex before the entry is accessed.
+ 	 *
+ 	 * @return The contents of the map entry in <code>String</code> form.
+ 	 */
+         public String toString()
+         {
+           synchronized (mutex)
+             {
+               return e.toString();
+             }
+         }
+       } // class SynchronizedMapEntry
+ 
+       // Now the actual code.
+       if (entries == null)
+         synchronized (mutex)
+           {
+             entries = new SynchronizedSet(mutex, m.entrySet())
+             {
+ 	      /**
+ 	       * Returns an iterator over the set.  The iterator has no specific order,
+ 	       * unless further specified.  A lock is obtained on the set's mutex
+ 	       * before the iterator is created.  The created iterator is also
+ 	       * thread-safe.
+ 	       *
+ 	       * @return A synchronized set iterator.
+ 	       */
+ 	      public Iterator iterator()
+               {
+                 synchronized (super.mutex)
+                   {
+                     return new SynchronizedIterator(super.mutex, c.iterator())
+                     {
+ 		      /**
+ 		       * Retrieves the next map entry from the iterator.
+ 		       * A lock is obtained on the iterator's mutex before
+ 		       * the entry is created.  The new map entry is enclosed in
+ 		       * a thread-safe wrapper.
+ 		       *
+ 		       * @return A synchronized map entry.
+ 		       */
+                       public Object next()
+                       {
+                         synchronized (super.mutex)
+                           {
+                             return new SynchronizedMapEntry(super.next());
+                           }
+                       }
+                     };
+                   }
+               }
+             };
+           }
+       return entries;
+     }
+ 
+     /**
+      * Returns <code>true</code> if the object, o, is also an instance
+      * of <code>Map</code> and contains an equivalent
+      * entry set to that of the underlying map.  A lock
+      * is obtained on the mutex before the objects are
+      * compared.
+      *
+      * @param o The object to compare.
+      * @return <code>true</code> if o and the underlying map are equivalent.
+      */
+     public boolean equals(Object o)
+     {
+       synchronized (mutex)
+         {
+           return m.equals(o);
+         }
+     }
+ 
+     /**
+      * Returns the value associated with the given key, or null
+      * if no such mapping exists.  An ambiguity exists with maps
+      * that accept null values as a return value of null could
+      * be due to a non-existent mapping or simply a null value
+      * for that key.  To resolve this, <code>containsKey</code>
+      * should be used.  A lock is obtained on the mutex before
+      * the value is retrieved from the underlying map.
+      *
+      * @param key The key of the required mapping.
+      * @return The value associated with the given key, or
+      *         null if no such mapping exists.
+      * @throws ClassCastException if the key is an inappropriate type.
+      * @throws NullPointerException if this map does not accept null keys.
+      */
+     public Object get(Object key)
+     {
+       synchronized (mutex)
+         {
+           return m.get(key);
+         }
+     }
+ 
+     /**
+      * Calculates the hash code of the underlying map as the
+      * sum of the hash codes of all entries.  A lock is obtained
+      * on the mutex before the hash code is computed.
+      *
+      * @return The hash code of the underlying map.
+      */
+     public int hashCode()
+     {
+       synchronized (mutex)
+         {
+           return m.hashCode();
+         }
+     }
+ 
+     /**
+      * Returns <code>true</code> if the underlying map contains no entries.
+      * A lock is obtained on the mutex before the map is examined.
+      *
+      * @return <code>true</code> if the map is empty.
+      */
+     public boolean isEmpty()
+     {
+       synchronized (mutex)
+         {
+           return m.isEmpty();
+         }
+     }
+ 
+     /**
+      * Returns a thread-safe set view of the keys in the underlying map.  The
+      * set is backed by the map, so that changes in one show up in the other.
+      * Modifications made while an iterator is in progress cause undefined
+      * behavior.  If the set supports removal, these methods remove the
+      * underlying mapping from the map: <code>Iterator.remove</code>,
+      * <code>Set.remove</code>, <code>removeAll</code>, <code>retainAll</code>,
+      * and <code>clear</code>.  Element addition, via <code>add</code> or
+      * <code>addAll</code>, is not supported via this set.  A lock is obtained
+      * on the mutex before the set is created.
+      *
+      * @return A synchronized set containing the keys of the underlying map.
+      */
+     public Set keySet()
+     {
+       if (keys == null)
+         synchronized (mutex)
+           {
+             keys = new SynchronizedSet(mutex, m.keySet());
+           }
+       return keys;
+     }
+ 
+     /**
+      * Associates the given key to the given value (optional operation). If the
+      * underlying map already contains the key, its value is replaced. Be aware
+      * that in a map that permits <code>null</code> values, a null return does not
+      * always imply that the mapping was created.  A lock is obtained on the mutex
+      * before the modification is made.
+      *
+      * @param key the key to map.
+      * @param value the value to be mapped.
+      * @return the previous value of the key, or null if there was no mapping
+      * @throws UnsupportedOperationException if the operation is not supported
+      * @throws ClassCastException if the key or value is of the wrong type
+      * @throws IllegalArgumentException if something about this key or value
+      *         prevents it from existing in this map
+      * @throws NullPointerException if either the key or the value is null,
+      *         and the map forbids null keys or values
+      * @see #containsKey(Object)
+      */
+     public Object put(Object key, Object value)
+     {
+       synchronized (mutex)
+         {
+           return m.put(key, value);
+         }
+     }
+ 
+     /**
+      * Copies all entries of the given map to the underlying one (optional
+      * operation). If the map already contains a key, its value is replaced.
+      * A lock is obtained on the mutex before the operation proceeds.
+      *
+      * @param map the mapping to load into this map
+      * @throws UnsupportedOperationException if the operation is not supported
+      * @throws ClassCastException if a key or value is of the wrong type
+      * @throws IllegalArgumentException if something about a key or value
+      *         prevents it from existing in this map
+      * @throws NullPointerException if the map forbids null keys or values, or
+      *         if <code>m</code> is null.
+      * @see #put(Object, Object)
+      */
+     public void putAll(Map map)
+     {
+       synchronized (mutex)
+         {
+           m.putAll(map);
+         }
+     }
+ 
+     /**
+      * Removes the mapping for the key, o, if present (optional operation). If
+      * the key is not present, this returns null. Note that maps which permit
+      * null values may also return null if the key was removed.  A prior
+      * <code>containsKey()</code> check is required to avoid this ambiguity.
+      * Before the mapping is removed, a lock is obtained on the mutex.
+      *
+      * @param o the key to remove
+      * @return the value the key mapped to, or null if not present
+      * @throws UnsupportedOperationException if deletion is unsupported
+      * @throws NullPointerException if the key is null and this map doesn't
+      *         support null keys.
+      * @throws ClassCastException if the type of the key is not a valid type
+      *         for this map.
+      */
+     public Object remove(Object o)
+     {
+       synchronized (mutex)
+         {
+           return m.remove(o);
+         }
+     }
+ 
+     /**
+      * Retrieves the size of the underlying map.  A lock
+      * is obtained on the mutex before access takes place.
+      * Maps with a size greater than <code>Integer.MAX_VALUE</code>
+      * return <code>Integer.MAX_VALUE</code> instead.
+      *
+      * @return The size of the underlying map.
+      */
+     public int size()
+     {
+       synchronized (mutex)
+         {
+           return m.size();
+         }
+     }
+ 
+     /**
+      * Returns a textual representation of the underlying
+      * map.  A lock is obtained on the mutex before the map
+      * is accessed.
+      *
+      * @return The map in <code>String</code> form.
+      */
+     public String toString()
+     {
+       synchronized (mutex)
+         {
+           return m.toString();
+         }
+     }
+ 
+     /**
+      * Returns a synchronized collection view of the values in the underlying
+      * map.  The collection is backed by the map, so that changes in one show up in
+      * the other.  Modifications made while an iterator is in progress cause
+      * undefined behavior.  If the collection supports removal, these methods
+      * remove the underlying mapping from the map: <code>Iterator.remove</code>,
+      * <code>Collection.remove</code>, <code>removeAll</code>,
+      * <code>retainAll</code>, and <code>clear</code>. Element addition, via
+      * <code>add</code> or <code>addAll</code>, is not supported via this
+      * collection.  A lock is obtained on the mutex before the collection
+      * is created.
+      * 
+      * @return the collection of all values in the underlying map.
+      */
+     public Collection values()
+     {
+       if (values == null)
+         synchronized (mutex)
+           {
+             values = new SynchronizedCollection(mutex, m.values());
+           }
+       return values;
+     }
+   } // class SynchronizedMap
+ 
+   /**
+    * Returns a synchronized (thread-safe) set wrapper backed by the given
+    * set. Notice that element access through the iterator is thread-safe, but
+    * if the set can be structurally modified (adding or removing elements)
+    * then you should synchronize around the iteration to avoid
+    * non-deterministic behavior:<br>
+    * <pre>
+    * Set s = Collections.synchronizedSet(new Set(...));
+    * ...
+    * synchronized (s)
+    *   {
+    *     Iterator i = s.iterator();
+    *     while (i.hasNext())
+    *       foo(i.next());
+    *   }
+    * </pre><p>
+    *
+    * The returned Set implements Serializable, but can only be serialized if
+    * the set it wraps is likewise Serializable.
+    *
+    * @param s the set to wrap
+    * @return a synchronized view of the set
+    * @see Serializable
+    */
+   public static Set synchronizedSet(Set s)
+   {
+     return new SynchronizedSet(s);
+   }
+ 
+   /**
+    * The implementation of {@link #synchronizedSet(Set)}. This class
+    * name is required for compatibility with Sun's JDK serializability.
+    * Package visible, so that sets such as Hashtable.keySet()
+    * can specify which object to synchronize on.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   static class SynchronizedSet extends SynchronizedCollection
+     implements Set
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 487447009682186044L;
+ 
+     /**
+      * Wrap a given set.
+      * @param s the set to wrap
+      * @throws NullPointerException if s is null
+      */
+     SynchronizedSet(Set s)
+     {
+       super(s);
+     }
+ 
+     /**
+      * Called only by trusted code to specify the mutex as well as the set.
+      * @param sync the mutex
+      * @param s the set
+      */
+     SynchronizedSet(Object sync, Set s)
+     {
+       super(sync, s);
+     }
+ 
+     /**
+      * Returns <code>true</code> if the object, o, is a <code>Set</code>
+      * of the same size as the underlying set, and contains
+      * each element, e, which occurs in the underlying set.
+      * A lock is obtained on the mutex before the comparison
+      * takes place.
+      *
+      * @param o The object to compare against.
+      * @return <code>true</code> if o is an equivalent set.
+      */
+     public boolean equals(Object o)
+     {
+       synchronized (mutex)
+         {
+           return c.equals(o);
+         }
+     }
+ 
+     /**
+      * Computes the hash code for the underlying set as the
+      * sum of the hash code of all elements within the set.
+      * A lock is obtained on the mutex before the computation
+      * occurs.
+      *
+      * @return The hash code for the underlying set.
+      */
+     public int hashCode()
+     {
+       synchronized (mutex)
+         {
+           return c.hashCode();
+         }
+     }
+   } // class SynchronizedSet
+ 
+   /**
+    * Returns a synchronized (thread-safe) sorted map wrapper backed by the
+    * given map. Notice that element access through the collection views,
+    * subviews, and their iterators are thread-safe, but if the map can be
+    * structurally modified (adding or removing elements) then you should
+    * synchronize around the iteration to avoid non-deterministic behavior:<br>
+    * <pre>
+    * SortedMap m = Collections.synchronizedSortedMap(new SortedMap(...));
+    * ...
+    * Set s = m.keySet(); // safe outside a synchronized block
+    * SortedMap m2 = m.headMap(foo); // safe outside a synchronized block
+    * Set s2 = m2.keySet(); // safe outside a synchronized block
+    * synchronized (m) // synch on m, not m2, s or s2
+    *   {
+    *     Iterator i = s.iterator();
+    *     while (i.hasNext())
+    *       foo(i.next());
+    *     i = s2.iterator();
+    *     while (i.hasNext())
+    *       bar(i.next());
+    *   }
+    * </pre><p>
+    *
+    * The returned SortedMap implements Serializable, but can only be
+    * serialized if the map it wraps is likewise Serializable.
+    *
+    * @param m the sorted map to wrap
+    * @return a synchronized view of the sorted map
+    * @see Serializable
+    */
+   public static SortedMap synchronizedSortedMap(SortedMap m)
+   {
+     return new SynchronizedSortedMap(m);
+   }
+ 
+   /**
+    * The implementation of {@link #synchronizedSortedMap(SortedMap)}. This
+    * class name is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class SynchronizedSortedMap extends SynchronizedMap
+     implements SortedMap
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -8798146769416483793L;
+ 
+     /**
+      * The wrapped map; stored both here and in the superclass to avoid
+      * excessive casting.
+      * @serial the wrapped map
+      */
+     private final SortedMap sm;
+ 
+     /**
+      * Wrap a given map.
+      * @param sm the map to wrap
+      * @throws NullPointerException if sm is null
+      */
+     SynchronizedSortedMap(SortedMap sm)
+     {
+       super(sm);
+       this.sm = sm;
+     }
+ 
+     /**
+      * Called only by trusted code to specify the mutex as well as the map.
+      * @param sync the mutex
+      * @param sm the map
+      */
+     SynchronizedSortedMap(Object sync, SortedMap sm)
+     {
+       super(sync, sm);
+       this.sm = sm;
+     }
+ 
+     /**
+      * Returns the comparator used in sorting the underlying map, or null if
+      * it is the keys' natural ordering.  A lock is obtained on the mutex
+      * before the comparator is retrieved.
+      *
+      * @return the sorting comparator.
+      */
+     public Comparator comparator()
+     {
+       synchronized (mutex)
+         {
+           return sm.comparator();
+         }
+     }
+ 
+     /**
+      * Returns the first, lowest sorted, key from the underlying map.
+      * A lock is obtained on the mutex before the map is accessed.
+      *
+      * @return the first key.
+      * @throws NoSuchElementException if this map is empty.
+      */
+     public Object firstKey()
+     {
+       synchronized (mutex)
+         {
+           return sm.firstKey();
+         }
+     }
+ 
+     /**
+      * Returns a submap containing the keys from the first
+      * key (as returned by <code>firstKey()</code>) to
+      * the key before that specified.  The submap supports all
+      * operations supported by the underlying map and all actions
+      * taking place on the submap are also reflected in the underlying
+      * map.  A lock is obtained on the mutex prior to submap creation.
+      * This operation is equivalent to <code>subMap(firstKey(), toKey)</code>.
+      * The submap retains the thread-safe status of this map.
+      *
+      * @param toKey the exclusive upper range of the submap.
+      * @return a submap from <code>firstKey()</code> to the
+      *         the key preceding toKey.
+      * @throws ClassCastException if toKey is not comparable to the underlying
+      *         map's contents.
+      * @throws IllegalArgumentException if toKey is outside the map's range.
+      * @throws NullPointerException if toKey is null. but the map does not allow
+      *         null keys.
+      */
+     public SortedMap headMap(Object toKey)
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedSortedMap(mutex, sm.headMap(toKey));
+         }
+     }
+ 
+     /**
+      * Returns the last, highest sorted, key from the underlying map.
+      * A lock is obtained on the mutex before the map is accessed.
+      *
+      * @return the last key.
+      * @throws NoSuchElementException if this map is empty.
+      */
+     public Object lastKey()
+     {
+       synchronized (mutex)
+         {
+           return sm.lastKey();
+         }
+     }
+ 
+     /**
+      * Returns a submap containing the keys from fromKey to
+      * the key before toKey.  The submap supports all
+      * operations supported by the underlying map and all actions
+      * taking place on the submap are also reflected in the underlying
+      * map.  A lock is obtained on the mutex prior to submap creation.
+      * The submap retains the thread-safe status of this map.
+      *
+      * @param fromKey the inclusive lower range of the submap.
+      * @param toKey the exclusive upper range of the submap.
+      * @return a submap from fromKey to the key preceding toKey.
+      * @throws ClassCastException if fromKey or toKey is not comparable
+      *         to the underlying map's contents.
+      * @throws IllegalArgumentException if fromKey or toKey is outside the map's
+      *         range.
+      * @throws NullPointerException if fromKey or toKey is null. but the map does
+      *         not allow  null keys.
+      */
+     public SortedMap subMap(Object fromKey, Object toKey)
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedSortedMap(mutex, sm.subMap(fromKey, toKey));
+         }
+     }
+ 
+     /**
+      * Returns a submap containing all the keys from fromKey onwards.
+      * The submap supports all operations supported by the underlying
+      * map and all actions taking place on the submap are also reflected
+      * in the underlying map.  A lock is obtained on the mutex prior to
+      * submap creation.  The submap retains the thread-safe status of
+      * this map.
+      *
+      * @param fromKey the inclusive lower range of the submap.
+      * @return a submap from fromKey to <code>lastKey()</code>.
+      * @throws ClassCastException if fromKey is not comparable to the underlying
+      *         map's contents.
+      * @throws IllegalArgumentException if fromKey is outside the map's range.
+      * @throws NullPointerException if fromKey is null. but the map does not allow
+      *         null keys.
+      */
+     public SortedMap tailMap(Object fromKey)
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedSortedMap(mutex, sm.tailMap(fromKey));
+         }
+     }
+   } // class SynchronizedSortedMap
+ 
+   /**
+    * Returns a synchronized (thread-safe) sorted set wrapper backed by the
+    * given set. Notice that element access through the iterator and through
+    * subviews are thread-safe, but if the set can be structurally modified
+    * (adding or removing elements) then you should synchronize around the
+    * iteration to avoid non-deterministic behavior:<br>
+    * <pre>
+    * SortedSet s = Collections.synchronizedSortedSet(new SortedSet(...));
+    * ...
+    * SortedSet s2 = s.headSet(foo); // safe outside a synchronized block
+    * synchronized (s) // synch on s, not s2
+    *   {
+    *     Iterator i = s2.iterator();
+    *     while (i.hasNext())
+    *       foo(i.next());
+    *   }
+    * </pre><p>
+    *
+    * The returned SortedSet implements Serializable, but can only be
+    * serialized if the set it wraps is likewise Serializable.
+    *
+    * @param s the sorted set to wrap
+    * @return a synchronized view of the sorted set
+    * @see Serializable
+    */
+   public static SortedSet synchronizedSortedSet(SortedSet s)
+   {
+     return new SynchronizedSortedSet(s);
+   }
+ 
+   /**
+    * The implementation of {@link #synchronizedSortedSet(SortedSet)}. This
+    * class name is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class SynchronizedSortedSet extends SynchronizedSet
+     implements SortedSet
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 8695801310862127406L;
+ 
+     /**
+      * The wrapped set; stored both here and in the superclass to avoid
+      * excessive casting.
+      * @serial the wrapped set
+      */
+     private final SortedSet ss;
+ 
+     /**
+      * Wrap a given set.
+      * @param ss the set to wrap
+      * @throws NullPointerException if ss is null
+      */
+     SynchronizedSortedSet(SortedSet ss)
+     {
+       super(ss);
+       this.ss = ss;
+     }
+ 
+     /**
+      * Called only by trusted code to specify the mutex as well as the set.
+      * @param sync the mutex
+      * @param ss the set
+      */
+     SynchronizedSortedSet(Object sync, SortedSet ss)
+     {
+       super(sync, ss);
+       this.ss = ss;
+     }
+ 
+     /**
+      * Returns the comparator used in sorting the underlying set, or null if
+      * it is the elements' natural ordering.  A lock is obtained on the mutex
+      * before the comparator is retrieved.
+      *
+      * @return the sorting comparator.
+      */
+     public Comparator comparator()
+     {
+       synchronized (mutex)
+         {
+           return ss.comparator();
+         }
+     }
+ 
+     /**
+      * Returns the first, lowest sorted, element from the underlying set.
+      * A lock is obtained on the mutex before the set is accessed.
+      *
+      * @return the first element.
+      * @throws NoSuchElementException if this set is empty.
+      */
+     public Object first()
+     {
+       synchronized (mutex)
+         {
+           return ss.first();
+         }
+     }
+ 
+     /**
+      * Returns a subset containing the element from the first
+      * element (as returned by <code>first()</code>) to
+      * the element before that specified.  The subset supports all
+      * operations supported by the underlying set and all actions
+      * taking place on the subset are also reflected in the underlying
+      * set.  A lock is obtained on the mutex prior to subset creation.
+      * This operation is equivalent to <code>subSet(first(), toElement)</code>.
+      * The subset retains the thread-safe status of this set.
+      *
+      * @param toElement the exclusive upper range of the subset.
+      * @return a subset from <code>first()</code> to the
+      *         the element preceding toElement.
+      * @throws ClassCastException if toElement is not comparable to the underlying
+      *         set's contents.
+      * @throws IllegalArgumentException if toElement is outside the set's range.
+      * @throws NullPointerException if toElement is null. but the set does not allow
+      *         null elements.
+      */
+     public SortedSet headSet(Object toElement)
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedSortedSet(mutex, ss.headSet(toElement));
+         }
+     }
+ 
+     /**
+      * Returns the last, highest sorted, element from the underlying set.
+      * A lock is obtained on the mutex before the set is accessed.
+      *
+      * @return the last element.
+      * @throws NoSuchElementException if this set is empty.
+      */
+     public Object last()
+     {
+       synchronized (mutex)
+         {
+           return ss.last();
+         }
+     }
+ 
+     /**
+      * Returns a subset containing the elements from fromElement to
+      * the element before toElement.  The subset supports all
+      * operations supported by the underlying set and all actions
+      * taking place on the subset are also reflected in the underlying
+      * set.  A lock is obtained on the mutex prior to subset creation.
+      * The subset retains the thread-safe status of this set.
+      *
+      * @param fromElement the inclusive lower range of the subset.
+      * @param toElement the exclusive upper range of the subset.
+      * @return a subset from fromElement to the element preceding toElement.
+      * @throws ClassCastException if fromElement or toElement is not comparable
+      *         to the underlying set's contents.
+      * @throws IllegalArgumentException if fromElement or toElement is outside the set's
+      *         range.
+      * @throws NullPointerException if fromElement or toElement is null. but the set does
+      *         not allow null elements.
+      */
+     public SortedSet subSet(Object fromElement, Object toElement)
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedSortedSet(mutex,
+                                            ss.subSet(fromElement, toElement));
+         }
+     }
+ 
+     /**
+      * Returns a subset containing all the elements from fromElement onwards.
+      * The subset supports all operations supported by the underlying
+      * set and all actions taking place on the subset are also reflected
+      * in the underlying set.  A lock is obtained on the mutex prior to
+      * subset creation.  The subset retains the thread-safe status of
+      * this set.
+      *
+      * @param fromElement the inclusive lower range of the subset.
+      * @return a subset from fromElement to <code>last()</code>.
+      * @throws ClassCastException if fromElement is not comparable to the underlying
+      *         set's contents.
+      * @throws IllegalArgumentException if fromElement is outside the set's range.
+      * @throws NullPointerException if fromElement is null. but the set does not allow
+      *         null elements.
+      */
+     public SortedSet tailSet(Object fromElement)
+     {
+       synchronized (mutex)
+         {
+           return new SynchronizedSortedSet(mutex, ss.tailSet(fromElement));
+         }
+     }
+   } // class SynchronizedSortedSet
+ 
+ 
+   /**
+    * Returns an unmodifiable view of the given collection. This allows
+    * "read-only" access, although changes in the backing collection show up
+    * in this view. Attempts to modify the collection directly or via iterators
+    * will fail with {@link UnsupportedOperationException}.  Although this view
+    * prevents changes to the structure of the collection and its elements, the values
+    * referenced by the objects in the collection can still be modified.
+    * <p>
+    *
+    * Since the collection might be a List or a Set, and those have incompatible
+    * equals and hashCode requirements, this relies on Object's implementation
+    * rather than passing those calls on to the wrapped collection. The returned
+    * Collection implements Serializable, but can only be serialized if
+    * the collection it wraps is likewise Serializable.
+    *
+    * @param c the collection to wrap
+    * @return a read-only view of the collection
+    * @see Serializable
+    */
+   public static Collection unmodifiableCollection(Collection c)
+   {
+     return new UnmodifiableCollection(c);
+   }
+ 
+   /**
+    * The implementation of {@link #unmodifiableCollection(Collection)}. This
+    * class name is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class UnmodifiableCollection
+     implements Collection, Serializable
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = 1820017752578914078L;
+ 
+     /**
+      * The wrapped collection. Package visible for use by subclasses.
+      * @serial the real collection
+      */
+     final Collection c;
+ 
+     /**
+      * Wrap a given collection.
+      * @param c the collection to wrap
+      * @throws NullPointerException if c is null
+      */
+     UnmodifiableCollection(Collection c)
+     {
+       this.c = c;
+       if (c == null)
+         throw new NullPointerException();
+     }
+ 
+     /**
+      * Blocks the addition of elements to the underlying collection.
+      * This method never returns, throwing an exception instead.
+      *
+      * @param o the object to add.
+      * @return <code>true</code> if the collection was modified as a result of this action.
+      * @throws UnsupportedOperationException as an unmodifiable collection does not
+      *         support the add operation.
+      */
+     public boolean add(Object o)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Blocks the addition of a collection of elements to the underlying
+      * collection.  This method never returns, throwing an exception instead.
+      *
+      * @param c the collection to add.
+      * @return <code>true</code> if the collection was modified as a result of this action.
+      * @throws UnsupportedOperationException as an unmodifiable collection does not
+      *         support the <code>addAll</code> operation.
+      */
+     public boolean addAll(Collection c)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Blocks the clearing of the underlying collection.  This method never
+      * returns, throwing an exception instead.
+      *
+      * @throws UnsupportedOperationException as an unmodifiable collection does
+      *         not support the <code>clear()</code> operation.
+      */
+     public void clear()
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Test whether the underlying collection contains a given object as one of its
+      * elements.
+      *
+      * @param o the element to look for.
+      * @return <code>true</code> if the underlying collection contains at least
+      *         one element e such that
+      *         <code>o == null ? e == null : o.equals(e)</code>.
+      * @throws ClassCastException if the type of o is not a valid type for the
+      *         underlying collection.
+      * @throws NullPointerException if o is null and the underlying collection
+      *         doesn't support null values.
+      */
+     public boolean contains(Object o)
+     {
+       return c.contains(o);
+     }
+ 
+     /**
+      * Test whether the underlying collection contains every element in a given
+      * collection.
+      *
+      * @param c1 the collection to test for.
+      * @return <code>true</code> if for every element o in c, contains(o) would
+      *         return <code>true</code>.
+      * @throws ClassCastException if the type of any element in c is not a valid
+      *   type for the underlying collection.
+      * @throws NullPointerException if some element of c is null and the underlying
+      *   collection does not support null values.
+      * @throws NullPointerException if c itself is null.
+      */
+     public boolean containsAll(Collection c1)
+     {
+       return c.containsAll(c1);
+     }
+ 
+     /**
+      * Tests whether the underlying collection is empty, that is,
+      * if size() == 0.
+      *
+      * @return <code>true</code> if this collection contains no elements.
+      */
+     public boolean isEmpty()
+     {
+       return c.isEmpty();
+     }
+ 
+     /**
+      * Obtain an Iterator over the underlying collection, which maintains
+      * its unmodifiable nature.
+      *
+      * @return an UnmodifiableIterator over the elements of the underlying
+      *         collection, in any order.
+      */
+     public Iterator iterator()
+     {
+       return new UnmodifiableIterator(c.iterator());
+     }
+ 
+     /**
+      * Blocks the removal of an object from the underlying collection.
+      * This method never returns, throwing an exception instead.
+      *
+      * @param o The object to remove.
+      * @return <code>true</code> if the object was removed (i.e. the underlying
+      *         collection returned 1 or more instances of o).
+      * @throws UnsupportedOperationException as an unmodifiable collection
+      *         does not support the <code>remove()</code> operation.
+      */
+     public boolean remove(Object o)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Blocks the removal of a collection of objects from the underlying
+      * collection.  This method never returns, throwing an exception
+      * instead.
+      *
+      * @param c The collection of objects to remove.
+      * @return <code>true</code> if the collection was modified.
+      * @throws UnsupportedOperationException as an unmodifiable collection
+      *         does not support the <code>removeAll()</code> operation.
+      */
+     public boolean removeAll(Collection c)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Blocks the removal of all elements from the underlying collection,
+      * except those in the supplied collection.  This method never returns,
+      * throwing an exception instead.
+      *
+      * @param c The collection of objects to retain.
+      * @return <code>true</code> if the collection was modified.
+      * @throws UnsupportedOperationException as an unmodifiable collection
+      *         does not support the <code>retainAll()</code> operation.
+      */
+     public boolean retainAll(Collection c)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Retrieves the number of elements in the underlying collection.
+      *
+      * @return the number of elements in the collection.
+      */
+     public int size()
+     {
+       return c.size();
+     }
+ 
+     /**
+      * Copy the current contents of the underlying collection into an array.
+      *
+      * @return an array of type Object[] with a length equal to the size of the
+      *         underlying collection and containing the elements currently in
+      *         the underlying collection, in any order.
+      */
+     public Object[] toArray()
+     {
+       return c.toArray();
+     }
+ 
+     /**
+      * Copy the current contents of the underlying collection into an array.  If
+      * the array passed as an argument has length less than the size of the
+      * underlying collection, an array of the same run-time type as a, with a length
+      * equal to the size of the underlying collection, is allocated using reflection.
+      * Otherwise, a itself is used.  The elements of the underlying collection are
+      * copied into it, and if there is space in the array, the following element is
+      * set to null. The resultant array is returned.
+      * Note: The fact that the following element is set to null is only useful
+      * if it is known that this collection does not contain any null elements.
+      *
+      * @param a the array to copy this collection into.
+      * @return an array containing the elements currently in the underlying
+      *         collection, in any order.
+      * @throws ArrayStoreException if the type of any element of the
+      *         collection is not a subtype of the element type of a.
+      */
+     public Object[] toArray(Object[] a)
+     {
+       return c.toArray(a);
+     }
+ 
+     /**
+      * A textual representation of the unmodifiable collection.
+      *
+      * @return The unmodifiable collection in the form of a <code>String</code>.
+      */
+     public String toString()
+     {
+       return c.toString();
+     }
+   } // class UnmodifiableCollection
+ 
+   /**
+    * The implementation of the various iterator methods in the
+    * unmodifiable classes.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class UnmodifiableIterator implements Iterator
+   {
+     /**
+      * The wrapped iterator.
+      */
+     private final Iterator i;
+ 
+     /**
+      * Only trusted code creates a wrapper.
+      * @param i the wrapped iterator
+      */
+     UnmodifiableIterator(Iterator i)
+     {
+       this.i = i;
+     }
+ 
+     /**
+      * Obtains the next element in the underlying collection.
+      *
+      * @return the next element in the collection.
+      * @throws NoSuchElementException if there are no more elements.
+      */
+     public Object next()
+     {
+       return i.next();
+     }
+     /**
+      * Tests whether there are still elements to be retrieved from the
+      * underlying collection by <code>next()</code>.  When this method
+      * returns <code>true</code>, an exception will not be thrown on calling
+      * <code>next()</code>.
+      *
+      * @return <code>true</code> if there is at least one more element in the underlying
+      *         collection.
+      */
+     public boolean hasNext()
+     {
+       return i.hasNext();
+     }
+ 
+     /**
+      * Blocks the removal of elements from the underlying collection by the
+      * iterator.
+      *
+      * @throws UnsupportedOperationException as an unmodifiable collection
+      *         does not support the removal of elements by its iterator.
+      */
+     public void remove()
+     {
+       throw new UnsupportedOperationException();
+     }
+   } // class UnmodifiableIterator
+ 
+   /**
+    * Returns an unmodifiable view of the given list. This allows
+    * "read-only" access, although changes in the backing list show up
+    * in this view. Attempts to modify the list directly, via iterators, or
+    * via sublists, will fail with {@link UnsupportedOperationException}.
+    * Although this view prevents changes to the structure of the list and
+    * its elements, the values referenced by the objects in the list can
+    * still be modified.   
+    * <p>
+    *
+    * The returned List implements Serializable, but can only be serialized if
+    * the list it wraps is likewise Serializable. In addition, if the wrapped
+    * list implements RandomAccess, this does too.
+    *
+    * @param l the list to wrap
+    * @return a read-only view of the list
+    * @see Serializable
+    * @see RandomAccess
+    */
+   public static List unmodifiableList(List l)
+   {
+     if (l instanceof RandomAccess)
+       return new UnmodifiableRandomAccessList(l);
+     return new UnmodifiableList(l);
+   }
+ 
+   /**
+    * The implementation of {@link #unmodifiableList(List)} for sequential
+    * lists. This class name is required for compatibility with Sun's JDK
+    * serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class UnmodifiableList extends UnmodifiableCollection
+     implements List
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -283967356065247728L;
+ 
+ 
+     /**
+      * The wrapped list; stored both here and in the superclass to avoid
+      * excessive casting. Package visible for use by subclass.
+      * @serial the wrapped list
+      */
+     final List list;
+ 
+     /**
+      * Wrap a given list.
+      * @param l the list to wrap
+      * @throws NullPointerException if l is null
+      */
+     UnmodifiableList(List l)
+     {
+       super(l);
+       list = l;
+     }
+ 
+     /**
+      * Blocks the addition of an element to the underlying
+      * list at a specific index.  This method never returns,
+      * throwing an exception instead.
+      *
+      * @param index The index at which to place the new element.
+      * @param o the object to add.
+      * @throws UnsupportedOperationException as an unmodifiable
+      *         list doesn't support the <code>add()</code> operation.
+      */
+     public void add(int index, Object o)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Blocks the addition of a collection of elements to the
+      * underlying list at a specific index.  This method never
+      * returns, throwing an exception instead.
+      *
+      * @param index The index at which to place the new element.
+      * @param c the collections of objects to add.
+      * @throws UnsupportedOperationException as an unmodifiable
+      *         list doesn't support the <code>addAll()</code> operation.
+      */
+     public boolean addAll(int index, Collection c)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Returns <code>true</code> if the object, o, is an instance of
+      * <code>List</code> with the same size and elements
+      * as the underlying list.
+      *
+      * @param o The object to compare.
+      * @return <code>true</code> if o is equivalent to the underlying list.
+      */
+     public boolean equals(Object o)
+     {
+       return list.equals(o);
+     }
+ 
+     /**
+      * Retrieves the element at a given index in the underlying list.
+      *
+      * @param index the index of the element to be returned
+      * @return the element at index index in this list
+      * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+      */
+     public Object get(int index)
+     {
+       return list.get(index);
+     }
+ 
+     /**
+      * Computes the hash code for the underlying list.
+      * The exact computation is described in the documentation
+      * of the <code>List</code> interface.
+      *
+      * @return The hash code of the underlying list.
+      * @see List#hashCode()
+      */
+     public int hashCode()
+     {
+       return list.hashCode();
+     }
+ 
+     /**
+      * Obtain the first index at which a given object is to be found in the
+      * underlying list.
+      *
+      * @param o the object to search for
+      * @return the least integer n such that <code>o == null ? get(n) == null :
+      *         o.equals(get(n))</code>, or -1 if there is no such index.
+      * @throws ClassCastException if the type of o is not a valid
+      *         type for the underlying list.
+      * @throws NullPointerException if o is null and the underlying
+      *         list does not support null values.
+      */
+     public int indexOf(Object o)
+     {
+       return list.indexOf(o);
+     }
+ 
+     /**
+      * Obtain the last index at which a given object is to be found in the
+      * underlying list.
+      *
+      * @return the greatest integer n such that <code>o == null ? get(n) == null
+      *         : o.equals(get(n))</code>, or -1 if there is no such index.
+      * @throws ClassCastException if the type of o is not a valid
+      *         type for the underlying list.
+      * @throws NullPointerException if o is null and the underlying
+      *         list does not support null values.
+      */
+     public int lastIndexOf(Object o)
+     {
+       return list.lastIndexOf(o);
+     }
+ 
+   /**
+    * Obtains a list iterator over the underlying list, starting at the beginning
+    * and maintaining the unmodifiable nature of this list.
+    *
+    * @return a <code>UnmodifiableListIterator</code> over the elements of the
+    *         underlying list, in order, starting at the beginning.
+    */
+     public ListIterator listIterator()
+     {
+       return new UnmodifiableListIterator(list.listIterator());
+     }
+ 
+   /**
+    * Obtains a list iterator over the underlying list, starting at the specified
+    * index and maintaining the unmodifiable nature of this list.  An initial call
+    * to <code>next()</code> will retrieve the element at the specified index,
+    * and an initial call to <code>previous()</code> will retrieve the element
+    * at index - 1.
+    *
+    *
+    * @param index the position, between 0 and size() inclusive, to begin the
+    *        iteration from.
+    * @return a <code>UnmodifiableListIterator</code> over the elements of the
+    *         underlying list, in order, starting at the specified index.
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    */
+     public ListIterator listIterator(int index)
+     {
+       return new UnmodifiableListIterator(list.listIterator(index));
+     }
+ 
+     /**
+      * Blocks the removal of the element at the specified index.
+      * This method never returns, throwing an exception instead.
+      *
+      * @param index The index of the element to remove.
+      * @return the removed element.
+      * @throws UnsupportedOperationException as an unmodifiable
+      *         list does not support the <code>remove()</code>
+      *         operation.
+      */
+     public Object remove(int index)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Blocks the replacement of the element at the specified index.
+      * This method never returns, throwing an exception instead.
+      *
+      * @param index The index of the element to replace.
+      * @param o The new object to place at the specified index.
+      * @return the replaced element.
+      * @throws UnsupportedOperationException as an unmodifiable
+      *         list does not support the <code>set()</code>
+      *         operation.
+      */
+     public Object set(int index, Object o)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Obtain a List view of a subsection of the underlying list, from
+      * fromIndex (inclusive) to toIndex (exclusive). If the two indices
+      * are equal, the sublist is empty. The returned list will be
+      * unmodifiable, like this list.  Changes to the elements of the
+      * returned list will be reflected in the underlying list. No structural
+      * modifications can take place in either list.
+      *
+      * @param fromIndex the index that the returned list should start from
+      *        (inclusive).
+      * @param toIndex the index that the returned list should go to (exclusive).
+      * @return a List backed by a subsection of the underlying list.
+      * @throws IndexOutOfBoundsException if fromIndex &lt; 0
+      *         || toIndex &gt; size() || fromIndex &gt; toIndex.
+      */
+     public List subList(int fromIndex, int toIndex)
+     {
+       return unmodifiableList(list.subList(fromIndex, toIndex));
+     }
+   } // class UnmodifiableList
+ 
+   /**
+    * The implementation of {@link #unmodifiableList(List)} for random-access
+    * lists. This class name is required for compatibility with Sun's JDK
+    * serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class UnmodifiableRandomAccessList
+     extends UnmodifiableList implements RandomAccess
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -2542308836966382001L;
+ 
+     /**
+      * Wrap a given list.
+      * @param l the list to wrap
+      * @throws NullPointerException if l is null
+      */
+     UnmodifiableRandomAccessList(List l)
+     {
+       super(l);
+     }
+   } // class UnmodifiableRandomAccessList
+ 
+   /**
+    * The implementation of {@link UnmodifiableList#listIterator()}.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class UnmodifiableListIterator
+     extends UnmodifiableIterator implements ListIterator
+   {
+     /**
+      * The wrapped iterator, stored both here and in the superclass to
+      * avoid excessive casting.
+      */
+     private final ListIterator li;
+ 
+     /**
+      * Only trusted code creates a wrapper.
+      * @param li the wrapped iterator
+      */
+     UnmodifiableListIterator(ListIterator li)
+     {
+       super(li);
+       this.li = li;
+     }
+ 
+     /**
+      * Blocks the addition of an object to the list underlying this iterator.
+      * This method never returns, throwing an exception instead.
+      *
+      * @param o The object to add.
+      * @throws UnsupportedOperationException as the iterator of an unmodifiable
+      *         list does not support the <code>add()</code> operation.
+      */
+     public void add(Object o)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Tests whether there are still elements to be retrieved from the
+      * underlying collection by <code>previous()</code>.  When this method
+      * returns <code>true</code>, an exception will not be thrown on calling
+      * <code>previous()</code>.
+      *
+      * @return <code>true</code> if there is at least one more element prior to the
+      *         current position in the underlying list.
+      */
+     public boolean hasPrevious()
+     {
+       return li.hasPrevious();
+     }
+ 
+     /**
+      * Find the index of the element that would be returned by a call to next.
+      * If <code>hasNext()</code> returns <code>false</code>, this returns the list size.
+      *
+      * @return the index of the element that would be returned by
+      *         <code>next()</code>.
+      */
+     public int nextIndex()
+     {
+       return li.nextIndex();
+     }
+ 
+     /**
+      * Obtains the previous element in the underlying list.
+      *
+      * @return the previous element in the list.
+      * @throws NoSuchElementException if there are no more prior elements.
+      */
+     public Object previous()
+     {
+       return li.previous();
+     }
+ 
+     /**
+      * Find the index of the element that would be returned by a call to
+      * previous. If <code>hasPrevious()</code> returns <code>false</code>,
+      * this returns -1.
+      *
+      * @return the index of the element that would be returned by
+      *         <code>previous()</code>.
+      */
+     public int previousIndex()
+     {
+       return li.previousIndex();
+     }
+ 
+     /**
+      * Blocks the replacement of an element in the list underlying this
+      * iterator.  This method never returns, throwing an exception instead.
+      *
+      * @param o The new object to replace the existing one.
+      * @throws UnsupportedOperationException as the iterator of an unmodifiable
+      *         list does not support the <code>set()</code> operation.
+      */
+     public void set(Object o)
+     {
+       throw new UnsupportedOperationException();
+     }
+   } // class UnmodifiableListIterator
+ 
+   /**
+    * Returns an unmodifiable view of the given map. This allows "read-only"
+    * access, although changes in the backing map show up in this view.
+    * Attempts to modify the map directly, or via collection views or their
+    * iterators will fail with {@link UnsupportedOperationException}.
+    * Although this view prevents changes to the structure of the map and its
+    * entries, the values referenced by the objects in the map can still be
+    * modified.   
+    * <p>
+    *
+    * The returned Map implements Serializable, but can only be serialized if
+    * the map it wraps is likewise Serializable.
+    *
+    * @param m the map to wrap
+    * @return a read-only view of the map
+    * @see Serializable
+    */
+   public static Map unmodifiableMap(Map m)
+   {
+     return new UnmodifiableMap(m);
+   }
+ 
+   /**
+    * The implementation of {@link #unmodifiableMap(Map)}. This
+    * class name is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class UnmodifiableMap implements Map, Serializable
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -1034234728574286014L;
+ 
+     /**
+      * The wrapped map.
+      * @serial the real map
+      */
+     private final Map m;
+ 
+     /**
+      * Cache the entry set.
+      */
+     private transient Set entries;
+ 
+     /**
+      * Cache the key set.
+      */
+     private transient Set keys;
+ 
+     /**
+      * Cache the value collection.
+      */
+     private transient Collection values;
+ 
+     /**
+      * Wrap a given map.
+      * @param m the map to wrap
+      * @throws NullPointerException if m is null
+      */
+     UnmodifiableMap(Map m)
+     {
+       this.m = m;
+       if (m == null)
+         throw new NullPointerException();
+     }
+ 
+     /**
+      * Blocks the clearing of entries from the underlying map.
+      * This method never returns, throwing an exception instead.
+      *
+      * @throws UnsupportedOperationException as an unmodifiable
+      *         map does not support the <code>clear()</code> operation.
+      */
+     public void clear()
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Returns <code>true</code> if the underlying map contains a mapping for
+      * the given key.
+      *
+      * @param key the key to search for
+      * @return <code>true</code> if the map contains the key
+      * @throws ClassCastException if the key is of an inappropriate type
+      * @throws NullPointerException if key is <code>null</code> but the map
+      *         does not permit null keys
+      */
+     public boolean containsKey(Object key)
+     {
+       return m.containsKey(key);
+     }
+ 
+     /**
+      * Returns <code>true</code> if the underlying map contains at least one mapping with
+      * the given value.  In other words, it returns <code>true</code> if a value v exists where
+      * <code>(value == null ? v == null : value.equals(v))</code>. This usually
+      * requires linear time.
+      *
+      * @param value the value to search for
+      * @return <code>true</code> if the map contains the value
+      * @throws ClassCastException if the type of the value is not a valid type
+      *         for this map.
+      * @throws NullPointerException if the value is null and the map doesn't
+      *         support null values.
+      */
+     public boolean containsValue(Object value)
+     {
+       return m.containsValue(value);
+     }
+ 
+     /**
+      * Returns a unmodifiable set view of the entries in the underlying map.
+      * Each element in the set is a unmodifiable variant of <code>Map.Entry</code>.
+      * The set is backed by the map, so that changes in one show up in the other.
+      * Modifications made while an iterator is in progress cause undefined
+      * behavior.  These modifications are again limited to the values of
+      * the objects.
+      *
+      * @return the unmodifiable set view of all mapping entries.
+      * @see Map.Entry
+      */
+     public Set entrySet()
+     {
+       if (entries == null)
+         entries = new UnmodifiableEntrySet(m.entrySet());
+       return entries;
+     }
+ 
+     /**
+      * The implementation of {@link UnmodifiableMap#entrySet()}. This class
+      * name is required for compatibility with Sun's JDK serializability.
+      *
+      * @author Eric Blake (ebb9@email.byu.edu)
+      */
+     private static final class UnmodifiableEntrySet extends UnmodifiableSet
+       implements Serializable
+     {
+       /**
+        * Compatible with JDK 1.4.
+        */
+       private static final long serialVersionUID = 7854390611657943733L;
+ 
+       /**
+        * Wrap a given set.
+        * @param s the set to wrap
+        */
+       UnmodifiableEntrySet(Set s)
+       {
+         super(s);
+       }
+ 
+       // The iterator must return unmodifiable map entries.
+       public Iterator iterator()
+       {
+         return new UnmodifiableIterator(c.iterator())
+ 	{
+ 	  /**
+ 	   * Obtains the next element from the underlying set of
+ 	   * map entries.
+ 	   *
+ 	   * @return the next element in the collection.
+ 	   * @throws NoSuchElementException if there are no more elements.
+ 	   */
+           public Object next()
+           {
+             final Map.Entry e = (Map.Entry) super.next();
+             return new Map.Entry()
+ 	    {
+ 	      /**
+ 	       * Returns <code>true</code> if the object, o, is also a map entry with an
+ 	       * identical key and value.
+ 	       *
+ 	       * @param o the object to compare.
+ 	       * @return <code>true</code> if o is an equivalent map entry.
+ 	       */
+               public boolean equals(Object o)
+               {
+                 return e.equals(o);
+               }
+ 	      
+ 	      /**
+ 	       * Returns the key of this map entry.
+ 	       *
+ 	       * @return the key.
+ 	       */
+               public Object getKey()
+               {
+                 return e.getKey();
+               }
+ 
+ 	      /**
+ 	       * Returns the value of this map entry.
+ 	       *
+ 	       * @return the value.
+ 	       */
+               public Object getValue()
+               {
+                 return e.getValue();
+               }
+ 
+ 	      /**
+ 	       * Computes the hash code of this map entry.
+ 	       * The computation is described in the <code>Map</code>
+ 	       * interface documentation.
+ 	       *
+ 	       * @return the hash code of this entry.
+ 	       * @see Map#hashCode()
+ 	       */
+               public int hashCode()
+               {
+                 return e.hashCode();
+               }
+ 
+ 	      /**
+ 	       * Blocks the alteration of the value of this map entry.
+ 	       * This method never returns, throwing an exception instead.
+ 	       *
+ 	       * @param value The new value.
+ 	       * @throws UnsupportedOperationException as an unmodifiable
+ 	       *         map entry does not support the <code>setValue()</code>
+ 	       *         operation.
+ 	       */
+               public Object setValue(Object value)
+               {
+                 throw new UnsupportedOperationException();
+               }
+ 
+ 	      /**
+ 	       * Returns a textual representation of the map entry.
+ 	       *
+ 	       * @return The map entry as a <code>String</code>.
+ 	       */
+               public String toString()
+               {
+                 return e.toString();
+               }
+ 	    };
+           }
+ 	};
+       }
+     } // class UnmodifiableEntrySet
+ 
+     /**
+      * Returns <code>true</code> if the object, o, is also an instance
+      * of <code>Map</code> with an equal set of map entries.
+      *
+      * @param o The object to compare.
+      * @return <code>true</code> if o is an equivalent map.
+      */
+     public boolean equals(Object o)
+     {
+       return m.equals(o);
+     }
+ 
+     /**
+      * Returns the value associated with the supplied key or
+      * null if no such mapping exists.  An ambiguity can occur
+      * if null values are accepted by the underlying map.
+      * In this case, <code>containsKey()</code> can be used
+      * to separate the two possible cases of a null result.
+      *
+      * @param key The key to look up.
+      * @return the value associated with the key, or null if key not in map.
+      * @throws ClassCastException if the key is an inappropriate type.
+      * @throws NullPointerException if this map does not accept null keys.
+      * @see #containsKey(Object)
+      */
+     public Object get(Object key)
+     {
+       return m.get(key);
+     }
+ 
+     /**
+      * Blocks the addition of a new entry to the underlying map.
+      * This method never returns, throwing an exception instead.
+      *
+      * @param key The new key.
+      * @param value The new value.
+      * @return the previous value of the key, or null if there was no mapping.
+      * @throws UnsupportedOperationException as an unmodifiable
+      *         map does not support the <code>put()</code> operation.
+      */
+     public Object put(Object key, Object value)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Computes the hash code for the underlying map, as the sum
+      * of the hash codes of all entries.
+      *
+      * @return The hash code of the underlying map.
+      * @see Map.Entry#hashCode()
+      */
+     public int hashCode()
+     {
+       return m.hashCode();
+     }
+ 
+     /**
+      * Returns <code>true</code> if the underlying map contains no entries.
+      *
+      * @return <code>true</code> if the map is empty.
+      */
+     public boolean isEmpty()
+     {
+       return m.isEmpty();
+     }
+ 
+     /**
+      * Returns a unmodifiable set view of the keys in the underlying map.
+      * The set is backed by the map, so that changes in one show up in the other.
+      * Modifications made while an iterator is in progress cause undefined
+      * behavior.  These modifications are again limited to the values of
+      * the keys.
+      *
+      * @return the set view of all keys.
+      */
+     public Set keySet()
+     {
+       if (keys == null)
+         keys = new UnmodifiableSet(m.keySet());
+       return keys;
+     }
+ 
+     /**
+      * Blocks the addition of the entries in the supplied map.
+      * This method never returns, throwing an exception instead.
+      *
+      * @param m The map, the entries of which should be added
+      *          to the underlying map.
+      * @throws UnsupportedOperationException as an unmodifiable
+      *         map does not support the <code>putAll</code> operation.
+      */
+     public void putAll(Map m)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+     /**
+      * Blocks the removal of an entry from the map.
+      * This method never returns, throwing an exception instead.
+      *
+      * @param o The key of the entry to remove.
+      * @return The value the key was associated with, or null
+      *         if no such mapping existed.  Null is also returned
+      *         if the removed entry had a null key.
+      * @throws UnsupportedOperationException as an unmodifiable
+      *         map does not support the <code>remove</code> operation.
+      */
+     public Object remove(Object o)
+     {
+       throw new UnsupportedOperationException();
+     }
+ 
+ 
+     /**
+      * Returns the number of key-value mappings in the underlying map.
+      * If there are more than Integer.MAX_VALUE mappings, Integer.MAX_VALUE
+      * is returned.
+      *
+      * @return the number of mappings.
+      */
+     public int size()
+     {
+       return m.size();
+     }
+ 
+     /**
+      * Returns a textual representation of the map.
+      *
+      * @return The map in the form of a <code>String</code>.
+      */
+     public String toString()
+     {
+       return m.toString();
+     }
+ 
+     /**
+      * Returns a unmodifiable collection view of the values in the underlying map.
+      * The collection is backed by the map, so that changes in one show up in the other.
+      * Modifications made while an iterator is in progress cause undefined
+      * behavior.  These modifications are again limited to the values of
+      * the keys.
+      *
+      * @return the collection view of all values.
+      */
+     public Collection values()
+     {
+       if (values == null)
+         values = new UnmodifiableCollection(m.values());
+       return values;
+     }
+   } // class UnmodifiableMap
+ 
+   /**
+    * Returns an unmodifiable view of the given set. This allows
+    * "read-only" access, although changes in the backing set show up
+    * in this view. Attempts to modify the set directly or via iterators
+    * will fail with {@link UnsupportedOperationException}.
+    * Although this view prevents changes to the structure of the set and its
+    * entries, the values referenced by the objects in the set can still be
+    * modified.   
+    * <p>
+    *
+    * The returned Set implements Serializable, but can only be serialized if
+    * the set it wraps is likewise Serializable.
+    *
+    * @param s the set to wrap
+    * @return a read-only view of the set
+    * @see Serializable
+    */
+   public static Set unmodifiableSet(Set s)
+   {
+     return new UnmodifiableSet(s);
+   }
+ 
+   /**
+    * The implementation of {@link #unmodifiableSet(Set)}. This class
+    * name is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class UnmodifiableSet extends UnmodifiableCollection
+     implements Set
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -9215047833775013803L;
+ 
+     /**
+      * Wrap a given set.
+      * @param s the set to wrap
+      * @throws NullPointerException if s is null
+      */
+     UnmodifiableSet(Set s)
+     {
+       super(s);
+     }
+ 
+     /**
+      * Returns <code>true</code> if the object, o, is also an instance of
+      * <code>Set</code> of the same size and with the same entries.
+      *
+      * @return <code>true</code> if o is an equivalent set.
+      */
+     public boolean equals(Object o)
+     {
+       return c.equals(o);
+     }
+ 
+     /**
+      * Computes the hash code of this set, as the sum of the
+      * hash codes of all elements within the set.
+      *
+      * @return the hash code of the set.
+      */ 
+     public int hashCode()
+     {
+       return c.hashCode();
+     }
+   } // class UnmodifiableSet
+ 
+   /**
+    * Returns an unmodifiable view of the given sorted map. This allows
+    * "read-only" access, although changes in the backing map show up in this
+    * view. Attempts to modify the map directly, via subviews, via collection
+    * views, or iterators, will fail with {@link UnsupportedOperationException}.
+    * Although this view prevents changes to the structure of the map and its
+    * entries, the values referenced by the objects in the map can still be
+    * modified.   
+    * <p>
+    *
+    * The returned SortedMap implements Serializable, but can only be
+    * serialized if the map it wraps is likewise Serializable.
+    *
+    * @param m the map to wrap
+    * @return a read-only view of the map
+    * @see Serializable
+    */
+   public static SortedMap unmodifiableSortedMap(SortedMap m)
+   {
+     return new UnmodifiableSortedMap(m);
+   }
+ 
+   /**
+    * The implementation of {@link #unmodifiableSortedMap(SortedMap)}. This
+    * class name is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class UnmodifiableSortedMap extends UnmodifiableMap
+     implements SortedMap
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -8806743815996713206L;
+ 
+     /**
+      * The wrapped map; stored both here and in the superclass to avoid
+      * excessive casting.
+      * @serial the wrapped map
+      */
+     private final SortedMap sm;
+ 
+     /**
+      * Wrap a given map.
+      * @param sm the map to wrap
+      * @throws NullPointerException if sm is null
+      */
+     UnmodifiableSortedMap(SortedMap sm)
+     {
+       super(sm);
+       this.sm = sm;
+     }
+ 
+     /**
+      * Returns the comparator used in sorting the underlying map,
+      * or null if it is the keys' natural ordering.
+      *
+      * @return the sorting comparator.
+      */
+     public Comparator comparator()
+     {
+       return sm.comparator();
+     }
+ 
+     /**
+      * Returns the first (lowest sorted) key in the map.
+      *
+      * @return the first key.
+      * @throws NoSuchElementException if this map is empty.
+      */
+     public Object firstKey()
+     {
+       return sm.firstKey();
+     }
+ 
+     /**
+      * Returns a unmodifiable view of the portion of the map strictly less
+      * than toKey. The view is backed by the underlying map, so changes in
+      * one show up in the other.  The submap supports all optional operations
+      * of the original.  This operation is equivalent to
+      * <code>subMap(firstKey(), toKey)</code>.
+      * <p>
+      *
+      * The returned map throws an IllegalArgumentException any time a key is
+      * used which is out of the range of toKey. Note that the endpoint, toKey,
+      * is not included; if you want this value to be included, pass its successor
+      * object in to toKey.  For example, for Integers, you could request
+      * <code>headMap(new Integer(limit.intValue() + 1))</code>.
+      *
+      * @param toKey the exclusive upper range of the submap.
+      * @return the submap.
+      * @throws ClassCastException if toKey is not comparable to the map contents.
+      * @throws IllegalArgumentException if this is a subMap, and toKey is out
+      *         of range.
+      * @throws NullPointerException if toKey is null but the map does not allow
+      *         null keys.
+      */
+     public SortedMap headMap(Object toKey)
+     {
+       return new UnmodifiableSortedMap(sm.headMap(toKey));
+     }
+ 
+     /**
+      * Returns the last (highest sorted) key in the map.
+      *
+      * @return the last key.
+      * @throws NoSuchElementException if this map is empty.
+      */
+     public Object lastKey()
+     {
+       return sm.lastKey();
+     }
+ 
+     /**
+      * Returns a unmodifiable view of the portion of the map greater than or
+      * equal to fromKey, and strictly less than toKey. The view is backed by
+      * the underlying map, so changes in one show up in the other. The submap
+      * supports all optional operations of the original.
+      * <p>
+      *
+      * The returned map throws an IllegalArgumentException any time a key is
+      * used which is out of the range of fromKey and toKey. Note that the
+      * lower endpoint is included, but the upper is not; if you want to
+      * change the inclusion or exclusion of an endpoint, pass its successor
+      * object in instead.  For example, for Integers, you could request
+      * <code>subMap(new Integer(lowlimit.intValue() + 1),
+      * new Integer(highlimit.intValue() + 1))</code> to reverse
+      * the inclusiveness of both endpoints.
+      *
+      * @param fromKey the inclusive lower range of the submap.
+      * @param toKey the exclusive upper range of the submap.
+      * @return the submap.
+      * @throws ClassCastException if fromKey or toKey is not comparable to
+      *         the map contents.
+      * @throws IllegalArgumentException if this is a subMap, and fromKey or
+      *         toKey is out of range.
+      * @throws NullPointerException if fromKey or toKey is null but the map
+      *         does not allow null keys.
+      */
+     public SortedMap subMap(Object fromKey, Object toKey)
+     {
+       return new UnmodifiableSortedMap(sm.subMap(fromKey, toKey));
+     }
+ 
+     /**
+      * Returns a unmodifiable view of the portion of the map greater than or
+      * equal to fromKey. The view is backed by the underlying map, so changes
+      * in one show up in the other. The submap supports all optional operations
+      * of the original.
+      * <p>
+      *
+      * The returned map throws an IllegalArgumentException any time a key is
+      * used which is out of the range of fromKey. Note that the endpoint, fromKey, is
+      * included; if you do not want this value to be included, pass its successor object in
+      * to fromKey.  For example, for Integers, you could request
+      * <code>tailMap(new Integer(limit.intValue() + 1))</code>.
+      *
+      * @param fromKey the inclusive lower range of the submap
+      * @return the submap
+      * @throws ClassCastException if fromKey is not comparable to the map
+      *         contents
+      * @throws IllegalArgumentException if this is a subMap, and fromKey is out
+      *         of range
+      * @throws NullPointerException if fromKey is null but the map does not allow
+      *         null keys
+      */
+     public SortedMap tailMap(Object fromKey)
+     {
+       return new UnmodifiableSortedMap(sm.tailMap(fromKey));
+     }
+   } // class UnmodifiableSortedMap
+ 
+   /**
+    * Returns an unmodifiable view of the given sorted set. This allows
+    * "read-only" access, although changes in the backing set show up
+    * in this view. Attempts to modify the set directly, via subsets, or via
+    * iterators, will fail with {@link UnsupportedOperationException}.
+    * Although this view prevents changes to the structure of the set and its
+    * entries, the values referenced by the objects in the set can still be
+    * modified.   
+    * <p>
+    *
+    * The returns SortedSet implements Serializable, but can only be
+    * serialized if the set it wraps is likewise Serializable.
+    *
+    * @param s the set to wrap
+    * @return a read-only view of the set
+    * @see Serializable
+    */
+   public static SortedSet unmodifiableSortedSet(SortedSet s)
+   {
+     return new UnmodifiableSortedSet(s);
+   }
+ 
+   /**
+    * The implementation of {@link #synchronizedSortedMap(SortedMap)}. This
+    * class name is required for compatibility with Sun's JDK serializability.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static class UnmodifiableSortedSet extends UnmodifiableSet
+     implements SortedSet
+   {
+     /**
+      * Compatible with JDK 1.4.
+      */
+     private static final long serialVersionUID = -4929149591599911165L;
+ 
+     /**
+      * The wrapped set; stored both here and in the superclass to avoid
+      * excessive casting.
+      * @serial the wrapped set
+      */
+     private SortedSet ss;
+ 
+     /**
+      * Wrap a given set.
+      * @param ss the set to wrap
+      * @throws NullPointerException if ss is null
+      */
+     UnmodifiableSortedSet(SortedSet ss)
+     {
+       super(ss);
+       this.ss = ss;
+     }
+ 
+     /**
+      * Returns the comparator used in sorting the underlying set,
+      * or null if it is the elements' natural ordering.
+      *
+      * @return the sorting comparator
+      */
+     public Comparator comparator()
+     {
+       return ss.comparator();
+     }
+ 
+     /**
+      * Returns the first (lowest sorted) element in the underlying
+      * set.
+      *
+      * @return the first element.
+      * @throws NoSuchElementException if the set is empty.
+      */
+     public Object first()
+     {
+       return ss.first();
+     }
+ 
+     /**
+      * Returns a unmodifiable view of the portion of the set strictly
+      * less than toElement. The view is backed by the underlying set,
+      * so changes in one show up in the other.  The subset supports
+      * all optional operations of the original.  This operation
+      * is equivalent to <code>subSet(first(), toElement)</code>.
+      * <p>
+      *
+      * The returned set throws an IllegalArgumentException any time an element is
+      * used which is out of the range of toElement. Note that the endpoint, toElement,
+      * is not included; if you want this value included, pass its successor object in to
+      * toElement.  For example, for Integers, you could request
+      * <code>headSet(new Integer(limit.intValue() + 1))</code>.
+      *
+      * @param toElement the exclusive upper range of the subset
+      * @return the subset.
+      * @throws ClassCastException if toElement is not comparable to the set
+      *         contents.
+      * @throws IllegalArgumentException if this is a subSet, and toElement is out
+      *         of range.
+      * @throws NullPointerException if toElement is null but the set does not
+      *         allow null elements.
+      */
+     public SortedSet headSet(Object toElement)
+     {
+       return new UnmodifiableSortedSet(ss.headSet(toElement));
+     }
+ 
+     /**
+      * Returns the last (highest sorted) element in the underlying
+      * set.
+      *
+      * @return the last element.
+      * @throws NoSuchElementException if the set is empty.
+      */
+     public Object last()
+     {
+       return ss.last();
+     }
+ 
+     /**
+      * Returns a unmodifiable view of the portion of the set greater than or
+      * equal to fromElement, and strictly less than toElement. The view is backed by
+      * the underlying set, so changes in one show up in the other. The subset
+      * supports all optional operations of the original.
+      * <p>
+      *
+      * The returned set throws an IllegalArgumentException any time an element is
+      * used which is out of the range of fromElement and toElement. Note that the
+      * lower endpoint is included, but the upper is not; if you want to
+      * change the inclusion or exclusion of an endpoint, pass its successor
+      * object in instead.  For example, for Integers, you can request
+      * <code>subSet(new Integer(lowlimit.intValue() + 1),
+      * new Integer(highlimit.intValue() + 1))</code> to reverse
+      * the inclusiveness of both endpoints.
+      *
+      * @param fromElement the inclusive lower range of the subset.
+      * @param toElement the exclusive upper range of the subset.
+      * @return the subset.
+      * @throws ClassCastException if fromElement or toElement is not comparable
+      *         to the set contents.
+      * @throws IllegalArgumentException if this is a subSet, and fromElement or
+      *         toElement is out of range.
+      * @throws NullPointerException if fromElement or toElement is null but the
+      *         set does not allow null elements.
+      */
+     public SortedSet subSet(Object fromElement, Object toElement)
+     {
+       return new UnmodifiableSortedSet(ss.subSet(fromElement, toElement));
+     }
+ 
+     /**
+      * Returns a unmodifiable view of the portion of the set greater than or equal to
+      * fromElement. The view is backed by the underlying set, so changes in one show up
+      * in the other. The subset supports all optional operations of the original.
+      * <p>
+      *
+      * The returned set throws an IllegalArgumentException any time an element is
+      * used which is out of the range of fromElement. Note that the endpoint,
+      * fromElement, is included; if you do not want this value to be included, pass its
+      * successor object in to fromElement.  For example, for Integers, you could request
+      * <code>tailSet(new Integer(limit.intValue() + 1))</code>.
+      *
+      * @param fromElement the inclusive lower range of the subset
+      * @return the subset.
+      * @throws ClassCastException if fromElement is not comparable to the set
+      *         contents.
+      * @throws IllegalArgumentException if this is a subSet, and fromElement is
+      *         out of range.
+      * @throws NullPointerException if fromElement is null but the set does not
+      *         allow null elements.
+      */
+     public SortedSet tailSet(Object fromElement)
+     {
+       return new UnmodifiableSortedSet(ss.tailSet(fromElement));
+     }
+   } // class UnmodifiableSortedSet
+ } // class Collections
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Comparator.java gcc-4.1.0/libjava/classpath/java/util/Comparator.java
*** gcc-4.0.2/libjava/classpath/java/util/Comparator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Comparator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,119 ----
+ /* Comparator.java -- Interface for objects that specify an ordering
+    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * Interface for objects that specify an ordering between objects. The ordering
+  * should be <em>total</em>, such that any two objects of the correct type
+  * can be compared, and the comparison is reflexive, anti-symmetric, and
+  * transitive.  It is also recommended that the comparator be <em>consistent
+  * with equals</em>, although this is not a strict requirement. A relation
+  * is consistent with equals if these two statements always have the same
+  * results (if no exceptions occur):<br>
+  * <code>compare((Object) e1, (Object) e2) == 0</code> and
+  * <code>e1.equals((Object) e2)</code><br>
+  * Comparators that violate consistency with equals may cause strange behavior
+  * in sorted lists and sets.  For example, a case-sensitive dictionary order
+  * comparison of Strings is consistent with equals, but if it is
+  * case-insensitive it is not, because "abc" and "ABC" compare as equal even
+  * though "abc".equals("ABC") returns false.
+  * <P>
+  * In general, Comparators should be Serializable, because when they are passed
+  * to Serializable data structures such as SortedMap or SortedSet, the entire
+  * data structure will only serialize correctly if the comparator is
+  * Serializable.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Comparable
+  * @see TreeMap
+  * @see TreeSet
+  * @see SortedMap
+  * @see SortedSet
+  * @see Arrays#sort(Object[], Comparator)
+  * @see java.io.Serializable
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface Comparator
+ {
+   /**
+    * Return an integer that is negative, zero or positive depending on whether
+    * the first argument is less than, equal to or greater than the second
+    * according to this ordering. This method should obey the following
+    * contract:
+    * <ul>
+    *   <li>if compare(a, b) &lt; 0 then compare(b, a) &gt; 0</li>
+    *   <li>if compare(a, b) throws an exception, so does compare(b, a)</li>
+    *   <li>if compare(a, b) &lt; 0 and compare(b, c) &lt; 0 then compare(a, c)
+    *       &lt; 0</li>
+    *   <li>if compare(a, b) == 0 then compare(a, c) and compare(b, c) must
+    *       have the same sign</li>
+    * </ul>
+    * To be consistent with equals, the following additional constraint is
+    * in place:
+    * <ul>
+    *   <li>if a.equals(b) or both a and b are null, then
+    *       compare(a, b) == 0.</li>
+    * </ul><p>
+    *
+    * Although it is permissible for a comparator to provide an order
+    * inconsistent with equals, that should be documented.
+    *
+    * @param o1 the first object
+    * @param o2 the second object
+    * @return the comparison
+    * @throws ClassCastException if the elements are not of types that can be
+    *         compared by this ordering.
+    */
+   int compare(Object o1, Object o2);
+ 
+   /**
+    * Return true if the object is equal to this object.  To be
+    * considered equal, the argument object must satisfy the constraints
+    * of <code>Object.equals()</code>, be a Comparator, and impose the
+    * same ordering as this Comparator. The default implementation
+    * inherited from Object is usually adequate.
+    *
+    * @param obj The object
+    * @return true if it is a Comparator that imposes the same order
+    * @see Object#equals(Object)
+    */
+   boolean equals(Object obj);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/ConcurrentModificationException.java gcc-4.1.0/libjava/classpath/java/util/ConcurrentModificationException.java
*** gcc-4.0.2/libjava/classpath/java/util/ConcurrentModificationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/ConcurrentModificationException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,92 ----
+ /* ConcurrentModificationException.java -- Data structure concurrently modified
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  */
+ 
+ /**
+  * Exception that is thrown by the collections classes when it is detected that
+  * a modification has been made to a data structure when this is not allowed,
+  * such as when a collection is structurally modified while an Iterator is
+  * operating over it. In cases where this can be detected, a
+  * ConcurrentModificationException will be thrown. An Iterator that detects
+  * this condition is referred to as fail-fast. Notice that this can occur
+  * even in single-threaded designs, if you call methods out of order.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see Iterator
+  * @see ListIterator
+  * @see Vector
+  * @see LinkedList
+  * @see HashSet
+  * @see Hashtable
+  * @see TreeMap
+  * @see AbstractList
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class ConcurrentModificationException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.2.
+    */
+   private static final long serialVersionUID = -3666751008965953603L;
+ 
+   /**
+    * Constructs a ConcurrentModificationException with no detail message.
+    */
+   public ConcurrentModificationException()
+   {
+   }
+ 
+   /**
+    * Constructs a ConcurrentModificationException with a detail message.
+    *
+    * @param detail the detail message for the exception
+    */
+   public ConcurrentModificationException(String detail)
+   {
+     super(detail);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Currency.java gcc-4.1.0/libjava/classpath/java/util/Currency.java
*** gcc-4.0.2/libjava/classpath/java/util/Currency.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Currency.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,437 ----
+ /* Currency.java -- Representation of a currency
+    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import gnu.java.locale.LocaleHelper;
+ 
+ import java.io.IOException;
+ import java.io.ObjectStreamException;
+ import java.io.Serializable;
+ 
+ /**
+  * Representation of a currency for a particular locale.  Each currency
+  * is identified by its ISO 4217 code, and only one instance of this
+  * class exists per currency.  As a result, instances are created
+  * via the <code>getInstance()</code> methods rather than by using
+  * a constructor.
+  *
+  * @see java.util.Locale
+  * @author Guilhem Lavaux  (guilhem.lavaux@free.fr)
+  * @author Dalibor Topic (robilad@kaffe.org)
+  * @author Bryce McKinlay (mckinlay@redhat.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.4
+  */
+ public final class Currency 
+   implements Serializable
+ {
+   /**
+    * For compatability with Sun's JDK
+    */
+   static final long serialVersionUID = -158308464356906721L;
+ 
+   /**
+    * The set of properties which map a currency to
+    * the currency information such as the ISO 4217
+    * currency code and the number of decimal points.
+    *
+    * @see #getCurrencyCode()
+    * @serial ignored.
+    */
+   private static transient Properties properties;
+ 
+   /**
+    * The ISO 4217 currency code associated with this
+    * particular instance.
+    *
+    * @see #getCurrencyCode()
+    * @serial the ISO 4217 currency code
+    */
+   private String currencyCode;
+ 
+   /**
+    * The number of fraction digits associated with this
+    * particular instance.
+    *
+    * @see #getDefaultFractionDigits()
+    * @serial the number of fraction digits
+    */
+   private transient int fractionDigits;
+   
+   /**
+    * A cached map of country codes
+    * instances to international currency code
+    * <code>String</code>s.  Seperating this
+    * from the <code>Currency</code> instances
+    * ensures we have a common lookup between
+    * the two <code>getInstance()</code> methods.
+    *
+    * @see #getInstance(java.util.Locale)
+    * @serial ignored.
+    */
+   private static transient Map countryMap;
+ 
+   /**
+    * A cache of <code>Currency</code> instances to
+    * ensure the singleton nature of this class.  The key
+    * is the international currency code.
+    *
+    * @see #getInstance(java.util.Locale)
+    * @see #getInstance(java.lang.String) 
+    * @see #readResolve()
+    * @serial ignored.
+    */
+   private static transient Map cache;
+ 
+   /**
+    * Instantiates the cache and reads in the properties.
+    */
+   static
+   {
+     /* Create a hash map for the locale mappings */
+     countryMap = new HashMap();
+     /* Create a hash map for the cache */
+     cache = new HashMap();
+     /* Create the properties object */
+     properties = new Properties();
+     /* Try and load the properties from our iso4217.properties resource */
+     try 
+       {
+         properties.load(Currency.class.getResourceAsStream("iso4217.properties"));
+       }
+     catch (IOException exception)
+       {
+         System.out.println("Failed to load currency resource: " + exception);
+       }
+   }
+ 
+   /**
+    * Default constructor for deserialization
+    */
+   private Currency()
+   {
+   }
+ 
+   /**
+    * Constructor to create a <code>Currency</code> object
+    * for a particular <code>Locale</code>.
+    * All components of the given locale, other than the
+    * country code, are ignored.  The results of calling this
+    * method may vary over time, as the currency associated with
+    * a particular country changes.  For countries without
+    * a given currency (e.g. Antarctica), the result is null. 
+    *
+    * @param loc the locale for the new currency, or null if
+    *        there is no country code specified or a currency
+    *        for this country.
+    */
+   private Currency(Locale loc)
+   {
+     String countryCode;
+     String currencyKey;
+     String fractionDigitsKey;
+     int commaPosition;
+ 
+     /* Retrieve the country code from the locale */
+     countryCode = loc.getCountry();
+     /* If there is no country code, return */
+     if (countryCode.equals(""))
+       {
+         throw new
+ 	  IllegalArgumentException("Invalid (empty) country code for locale:"
+ 			  	   + loc);
+       }
+     /* Construct the key for the currency */
+     currencyKey = countryCode + ".currency";
+     /* Construct the key for the fraction digits */
+     fractionDigitsKey = countryCode + ".fractionDigits";
+     /* Retrieve the currency */
+     currencyCode = properties.getProperty(currencyKey);
+     /* Return if the currency code is null */
+     if (currencyCode == null)
+       {
+         return;
+       }
+     /* Split off the first currency code (we only use the first for now) */
+     commaPosition = currencyCode.indexOf(",");
+     if (commaPosition != -1)
+       {
+         currencyCode = currencyCode.substring(0, commaPosition);
+       }
+     /* Retrieve the fraction digits */
+     fractionDigits = Integer.parseInt(properties.getProperty(fractionDigitsKey));
+   }
+ 
+   /**
+    * Constructor for the "XXX" special case.  This allows
+    * a Currency to be constructed from an assumed good
+    * currency code.
+    *
+    * @param code the code to use.
+    */  
+   private Currency(String code)
+   {
+     currencyCode = code;
+     fractionDigits = -1; /* Pseudo currency */
+   }
+ 
+   /**
+    * Returns the ISO4217 currency code of this currency.
+    *
+    * @return a <code>String</code> containing currency code.
+    */
+   public String getCurrencyCode()
+   {
+     return currencyCode;
+   }
+ 
+   /**
+    * Returns the number of digits which occur after the decimal point
+    * for this particular currency.  For example, currencies such
+    * as the U.S. dollar, the Euro and the Great British pound have two
+    * digits following the decimal point to indicate the value which exists
+    * in the associated lower-valued coinage (cents in the case of the first
+    * two, pennies in the latter).  Some currencies such as the Japanese
+    * Yen have no digits after the decimal point.  In the case of pseudo
+    * currencies, such as IMF Special Drawing Rights, -1 is returned.
+    *
+    * @return the number of digits after the decimal separator for this currency.
+    */   
+   public int getDefaultFractionDigits()
+   {
+     return fractionDigits;
+   }
+     
+   /**
+    * Builds a new currency instance for this locale.
+    * All components of the given locale, other than the
+    * country code, are ignored.  The results of calling this
+    * method may vary over time, as the currency associated with
+    * a particular country changes.  For countries without
+    * a given currency (e.g. Antarctica), the result is null. 
+    *
+    * @param locale a <code>Locale</code> instance.
+    * @return a new <code>Currency</code> instance.
+    * @throws NullPointerException if the locale or its
+    *         country code is null.
+    * @throws IllegalArgumentException if the country of
+    *         the given locale is not a supported ISO3166 code.
+    */ 
+   public static Currency getInstance(Locale locale)
+   {
+     /**
+      * The new instance must be the only available instance
+      * for the currency it supports.  We ensure this happens,
+      * while maintaining a suitable performance level, by
+      * creating the appropriate object on the first call to
+      * this method, and returning the cached instance on
+      * later calls.
+      */
+     Currency newCurrency;
+ 
+     String country = locale.getCountry();
+     if (locale == null || country == null)
+       {
+ 	throw new
+ 	  NullPointerException("The locale or its country is null.");
+       }
+     /* Attempt to get the currency from the cache */
+     String code = (String) countryMap.get(country);
+     if (code == null)
+       {
+         /* Create the currency for this locale */
+         newCurrency = new Currency(locale);
+         /* 
+          * If the currency code is null, then creation failed
+          * and we return null.
+          */
+ 	code = newCurrency.getCurrencyCode();
+         if (code == null)
+           {
+             return null;
+           }
+         else 
+           {
+             /* Cache it */
+             countryMap.put(country, code);
+ 	    cache.put(code, newCurrency);
+           }
+       }
+     else
+       {
+ 	newCurrency = (Currency) cache.get(code);
+       }
+     /* Return the instance */
+     return newCurrency;
+   }
+ 
+   /**
+    * Builds the currency corresponding to the specified currency code.
+    *
+    * @param currencyCode a string representing a currency code.
+    * @return a new <code>Currency</code> instance.
+    * @throws NullPointerException if currencyCode is null.
+    * @throws IllegalArgumentException if the supplied currency code
+    *         is not a supported ISO 4217 code.
+    */
+   public static Currency getInstance(String currencyCode)
+   {
+     Locale[] allLocales;
+ 
+     /* 
+      * Throw a null pointer exception explicitly if currencyCode is null.
+      * One is not thrown otherwise.  It results in an
+      * IllegalArgumentException. 
+      */
+     if (currencyCode == null)
+       {
+         throw new NullPointerException("The supplied currency code is null.");
+       }
+     /* Nasty special case to allow an erroneous currency... blame Sun */
+     if (currencyCode.equals("XXX"))
+       return new Currency("XXX");
+     Currency newCurrency = (Currency) cache.get(currencyCode);
+     if (newCurrency == null)
+       {
+ 	/* Get all locales */
+ 	allLocales = Locale.getAvailableLocales();
+ 	/* Loop through each locale, looking for the code */
+ 	for (int i = 0;i < allLocales.length; i++)
+ 	  {
+ 	    try
+ 	      {
+ 		Currency testCurrency = getInstance (allLocales[i]);
+ 		if (testCurrency != null &&
+ 		    testCurrency.getCurrencyCode().equals(currencyCode))
+ 		  {
+ 		    return testCurrency;
+ 		  }
+ 	      }
+ 	    catch (IllegalArgumentException exception)
+ 	      {
+ 		/* Ignore locales without valid countries */
+ 	      }
+ 	  }
+ 	/* 
+ 	 * If we get this far, the code is not supported by any of
+ 	 * our locales.
+ 	 */
+ 	throw new IllegalArgumentException("The currency code, " + currencyCode +
+ 					   ", is not supported.");
+       }
+     else
+       {
+ 	return newCurrency;
+       }
+   }
+ 
+   /**
+    * This method returns the symbol which precedes or follows a
+    * value in this particular currency in the default locale.
+    * In cases where there is no such symbol for the currency,
+    * the ISO 4217 currency code is returned.
+    *
+    * @return the currency symbol, or the ISO 4217 currency code if
+    *         one doesn't exist.
+    */
+   public String getSymbol()
+   {
+     return getSymbol(Locale.getDefault());
+   }
+ 
+   /**
+    * <p>
+    * This method returns the symbol which precedes or follows a
+    * value in this particular currency.  The returned value is
+    * the symbol used to denote the currency in the specified locale.
+    * </p>
+    * <p>
+    * For example, a supplied locale may specify a different symbol
+    * for the currency, due to conflicts with its own currency.
+    * This would be the case with the American currency, the dollar.
+    * Locales that also use a dollar-based currency (e.g. Canada, Australia)
+    * need to differentiate the American dollar using 'US$' rather than '$'.
+    * So, supplying one of these locales to <code>getSymbol()</code> would
+    * return this value, rather than the standard '$'.
+    * </p>
+    * <p>
+    * In cases where there is no such symbol for a particular currency,
+    * the ISO 4217 currency code is returned.
+    * </p>
+    *
+    * @param locale the locale to express the symbol in.
+    * @return the currency symbol, or the ISO 4217 currency code if
+    *         one doesn't exist.
+    * @throws NullPointerException if the locale is null.
+    */
+   public String getSymbol(Locale locale)
+   {
+     return LocaleHelper.getLocalizedString(locale, currencyCode,
+ 					   "currenciesSymbol", false, true);
+   }
+ 
+   /**
+    * Returns the international ISO4217 currency code of this currency.
+    *
+    * @return a <code>String</code> containing the ISO4217 currency code.
+    */
+   public String toString()
+   {
+     return getCurrencyCode();
+   }
+ 
+   /**
+    * Resolves the deserialized object to the singleton instance for its
+    * particular currency.  The currency code of the deserialized instance
+    * is used to return the correct instance.
+    *
+    * @return the singleton instance for the currency specified by the
+    *         currency code of the deserialized object.  This replaces
+    *         the deserialized object as the returned object from
+    *         deserialization.
+    * @throws ObjectStreamException if a problem occurs with deserializing
+    *         the object.
+    */
+   private Object readResolve()
+     throws ObjectStreamException
+   {
+     return getInstance(currencyCode);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Date.java gcc-4.1.0/libjava/classpath/java/util/Date.java
*** gcc-4.0.2/libjava/classpath/java/util/Date.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Date.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1263 ----
+ /* java.util.Date
+    Copyright (C) 1998, 1999, 2000, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.text.DateFormat;
+ import java.text.SimpleDateFormat;
+ 
+ /**
+  * <p>
+  * This class represents a specific time in milliseconds since the epoch.
+  * The epoch is 1970, January 1 00:00:00.0000 UTC.  
+  * </p>
+  * <p>
+  * <code>Date</code> is intended to reflect universal time coordinate (UTC),
+  * but this depends on the underlying host environment.  Most operating systems 
+  * don't handle the leap second, which occurs about once every year or
+  * so.  The leap second is added to the last minute of the day on either
+  * the 30th of June or the 31st of December, creating a minute 61 seconds
+  * in length.
+  * </p>
+  * <p>
+  * The representations of the date fields are as follows:
+  * <ul>
+  * <li>
+  * Years are specified as the difference between the year
+  * and 1900.  Thus, the final year used is equal to
+  * 1900 + y, where y is the input value.
+  * </li>
+  * <li>
+  * Months are represented using zero-based indexing,
+  * making 0 January and 11 December.
+  * </li>
+  * <li>
+  * Dates are represented with the usual values of
+  * 1 through to 31.
+  * </li>
+  * <li>
+  * Hours are represented in the twenty-four hour clock,
+  * with integer values from 0 to 23.  12am is 0, and
+  * 12pm is 12.
+  * </li>
+  * <li>
+  * Minutes are again as usual, with values from 0 to 59.
+  * </li>
+  * <li>
+  * Seconds are represented with the values 0 through to 61,
+  * with 60 and 61 being leap seconds (as per the ISO C standard).
+  * </li>
+  * </ul>
+  * </p>
+  * <p>
+  * Prior to JDK 1.1, this class was the sole class handling date and time
+  * related functionality.  However, this particular solution was not
+  * amenable to internationalization.  The new <code>Calendar</code>
+  * class should now be used to handle dates and times, with <code>Date</code>
+  * being used only for values in milliseconds since the epoch.  The
+  * <code>Calendar</code> class, and its concrete implementations, handle
+  * the interpretation of these values into minutes, hours, days, months
+  * and years.  The formatting and parsing of dates is left to the
+  * <code>DateFormat</code> class, which is able to handle the different
+  * types of date format which occur in different locales.
+  * </p>
+  *
+  * @see Calendar
+  * @see GregorianCalendar
+  * @see java.text.DateFormat
+  * @author Jochen Hoenicke
+  * @author Per Bothner (bothner@cygnus.com)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  */
+ public class Date
+     implements Cloneable, Comparable, Serializable
+ {
+   /**
+    * This is the serialization UID for this class
+    * for compatability with Sun's JDK.
+    */
+   private static final long serialVersionUID = 7523967970034938905L;
+ 
+   /**
+    * The time in milliseconds since the epoch.
+    */
+   private transient long time;
+ 
+   /**
+    * An array of week names used to map names to integer values.
+    */
+   private static final String[] weekNames = { "Sun", "Mon", "Tue", "Wed",
+ 					      "Thu", "Fri", "Sat" };
+   /**
+    * An array of month names used to map names to integer values.
+    */
+   private static final String[] monthNames = { "Jan", "Feb", "Mar", "Apr",
+ 					       "May", "Jun", "Jul", "Aug",
+ 					       "Sep", "Oct", "Nov", "Dec" };
+   /**
+    * Creates a new Date Object representing the current time.
+    */
+   public Date()
+   {
+     time = System.currentTimeMillis();
+   }
+ 
+   /**
+    * Creates a new Date Object representing the given time.
+    *
+    * @param time the time in milliseconds since the epoch.
+    */
+   public Date(long time)
+   {
+     this.time = time;
+   }
+ 
+   /**
+    * Creates a new Date Object representing the given time.
+    *
+    * @deprecated use <code>new GregorianCalendar(year+1900, month,
+    * day)</code> instead.
+    * @param year the difference between the required year and 1900.
+    * @param month the month as a value between 0 and 11.
+    * @param day the day as a value between 0 and 31.
+    */
+   public Date(int year, int month, int day)
+   {
+     this(year, month, day, 0, 0, 0);
+   }
+ 
+   /**
+    * Creates a new Date Object representing the given time.
+    *
+    * @deprecated use <code>new GregorianCalendar(year+1900, month,
+    * day, hour, min)</code> instead.
+    * @param year the difference between the required year and 1900.
+    * @param month the month as a value between 0 and 11.
+    * @param day the day as a value between 0 and 31.
+    * @param hour the hour as a value between 0 and 23, in 24-hour
+    *        clock notation.
+    * @param min the minute as a value between 0 and 59.
+    */
+   public Date(int year, int month, int day, int hour, int min)
+   {
+     this(year, month, day, hour, min, 0);
+   }
+ 
+   /**
+    * Creates a new Date Object representing the given time.
+    *
+    * @deprecated use <code>new GregorianCalendar(year+1900, month,
+    * day, hour, min, sec)</code> instead. 
+    * @param year the difference between the required year and 1900.
+    * @param month the month as a value between 0 and 11.
+    * @param day the day as a value between 0 and 31.
+    * @param hour the hour as a value between 0 and 23, in 24-hour
+    *        clock notation.
+    * @param min the minute as a value between 0 and 59.
+    * @param sec the second as a value between 0 and 61 (with 60
+    *        and 61 being leap seconds).
+    */
+   public Date(int year, int month, int day, int hour, int min, int sec)
+   {
+     GregorianCalendar cal =
+ 	new GregorianCalendar(year + 1900, month, day, hour, min, sec);
+     time = cal.getTimeInMillis();
+   }
+ 
+   /**
+    * Creates a new Date from the given string representation.  This
+    * does the same as <code>new Date(Date.parse(s))</code>
+    * @see #parse
+    * @deprecated use <code>java.text.DateFormat.parse(s)</code> instead.  
+    */
+   public Date(String s)
+   {
+     time = parse(s);
+   }
+ 
+   /**
+    * Returns a copy of this <code>Date</code> object.
+    *
+    * @return a copy, or null if the object couldn't be
+    *         cloned.
+    * @see Object#clone()
+    */
+   public Object clone()
+   {
+     try
+       {
+ 	return super.clone();
+       }
+     catch (CloneNotSupportedException ex)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns the number of milliseconds since the epoch
+    * specified by the given arguments.  The arguments are
+    * interpreted relative to UTC rather than the local
+    * time zone.
+    *
+    * @deprecated Use <code>Calendar</code> with a UTC
+    *             <code>TimeZone</code> instead.
+    * @param year the difference between the required year and 1900.
+    * @param month the month as a value between 0 and 11.
+    * @param date the day as a value between 0 and 31.
+    * @param hrs the hour as a value between 0 and 23, in 24-hour
+    *        clock notation.
+    * @param min the minute as a value between 0 and 59.
+    * @param sec the second as a value between 0 and 61 (with 60
+    *        and 61 being leap seconds).
+    * @return the time in milliseconds since the epoch.
+    */
+   public static long UTC(int year, int month, int date,
+ 			 int hrs, int min, int sec)
+   {
+     GregorianCalendar cal =
+       new GregorianCalendar(year + 1900, month, date, hrs, min, sec);
+     cal.set(Calendar.ZONE_OFFSET, 0);
+     cal.set(Calendar.DST_OFFSET, 0);
+     return cal.getTimeInMillis();
+   }
+ 
+   /**
+    * Gets the time represented by this object.
+    *
+    * @return the time in milliseconds since the epoch.
+    */
+   public long getTime()
+   {
+     return time;
+   }
+ 
+   /**
+    * Returns the number of minutes offset used with UTC to give the time
+    * represented by this object in the current time zone.  The date information
+    * from this object is also used to determine whether or not daylight savings
+    * time is in effect.  For example, the offset for the UK would be 0 if the
+    * month of the date object was January, and 1 if the month was August.
+    * 
+    * @deprecated use
+    * <code>Calendar.get(Calendar.ZONE_OFFSET)+Calendar.get(Calendar.DST_OFFSET)</code>
+    * instead.
+    * @return The time zone offset in minutes of the local time zone
+    * relative to UTC.  The time represented by this object is used to
+    * determine if we should use daylight savings.
+    */
+   public int getTimezoneOffset()
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     return - (cal.get(Calendar.ZONE_OFFSET)
+ 	    + cal.get(Calendar.DST_OFFSET)) / (60 * 1000);
+   }
+ 
+   /**
+    * Sets the time which this object should represent.
+    *
+    * @param time the time in milliseconds since the epoch.  
+    */
+   public void setTime(long time)
+   {
+     this.time = time;
+   }
+ 
+   /**
+    * Tests if this date is after the specified date.
+    *
+    * @param when the other date
+    * @return true, if the date represented by this object is
+    * strictly later than the time represented by when.  
+    */
+   public boolean after(Date when)
+   {
+     return time > when.time;
+   }
+ 
+   /**
+    * Tests if this date is before the specified date.
+    *
+    * @param when the other date
+    * @return true, if the date represented by when is strictly later
+    * than the time represented by this object.
+    */
+   public boolean before(Date when)
+   {
+     return time < when.time;
+   }
+ 
+   /**
+    * Compares two dates for equality.
+    *
+    * @param obj the object to compare.
+    * @return true, if obj is a Date object and the time represented
+    * by obj is exactly the same as the time represented by this
+    * object.  
+    */
+   public boolean equals(Object obj)
+   {
+     return (obj instanceof Date && time == ((Date) obj).time);
+   }
+ 
+   /**
+    * Compares two dates.
+    *
+    * @param when the other date.
+    * @return 0, if the date represented
+    * by obj is exactly the same as the time represented by this
+    * object, a negative if this Date is before the other Date, and
+    * a positive value otherwise.  
+    */
+   public int compareTo(Date when)
+   {
+     return (time < when.time) ? -1 : (time == when.time) ? 0 : 1;
+   }
+ 
+   /**
+    * Compares this Date to another object.  This behaves like
+    * <code>compareTo(Date)</code>, but it takes a generic object
+    * and throws a <code>ClassCastException</code> if obj is
+    * not a <code>Date</code>.
+    * 
+    * @param obj the other date.
+    * @return 0, if the date represented
+    * by obj is exactly the same as the time represented by this
+    * object, a negative if this Date is before the other Date, and
+    * a positive value otherwise.  
+    * @exception ClassCastException if obj is not of type Date.
+    */
+   public int compareTo(Object obj)
+   {
+     return compareTo((Date) obj);
+   }
+ 
+   /**
+    * Computes the hash code of this <code>Date</code> as the
+    * XOR of the most significant and the least significant
+    * 32 bits of the 64 bit milliseconds value.
+    *
+    * @return the hash code.
+    */
+   public int hashCode()
+   {
+     return (int) time ^ (int) (time >>> 32);
+   }
+ 
+   /**
+    * <p>
+    * Returns a string representation of this date using
+    * the following date format:
+    * </p>
+    * <p>
+    * <code>day mon dd hh:mm:ss zz yyyy</code>
+    * </p>
+    * <p>where the fields used here are:
+    * <ul>
+    * <li>
+    * <code>day</code> -- the day of the week
+    * (Sunday through to Saturday).
+    * </li>
+    * <li>
+    * <code>mon</code> -- the month (Jan to Dec).
+    * </li>
+    * <li>
+    * <code>dd</code> -- the day of the month
+    * as two decimal digits (01 to 31).
+    * </li>
+    * <li>
+    * <code>hh</code> -- the hour of the day
+    * as two decimal digits in 24-hour clock notation
+    * (01 to 23).
+    * </li>
+    * <li>
+    * <code>mm</code> -- the minute of the day
+    * as two decimal digits (01 to 59).
+    * </li>
+    * <li>
+    * <code>ss</code> -- the second of the day
+    * as two decimal digits (01 to 61).
+    * </li>
+    * <li>
+    * <code>zz</code> -- the time zone information if available.
+    * The possible time zones used include the abbreviations
+    * recognised by <code>parse()</code> (e.g. GMT, CET, etc.)
+    * and may reflect the fact that daylight savings time is in
+    * effect.  The empty string is used if there is no time zone
+    * information.
+    * </li>
+    * <li>
+    * <code>yyyy</code> -- the year as four decimal digits.
+    * </li>
+    * </ul>
+    * <p>
+    * The <code>DateFormat</code> class should now be 
+    * preferred over using this method.
+    * </p>
+    *
+    * @return A string of the form 'day mon dd hh:mm:ss zz yyyy'
+    * @see #parse(String)
+    * @see DateFormat
+    */
+   public String toString()
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     String day = "0" + cal.get(Calendar.DATE);
+     String hour = "0" + cal.get(Calendar.HOUR_OF_DAY);
+     String min = "0" + cal.get(Calendar.MINUTE);
+     String sec = "0" + cal.get(Calendar.SECOND);
+     String year = "000" + cal.get(Calendar.YEAR);
+     return weekNames[cal.get(Calendar.DAY_OF_WEEK) - 1] + " "
+       + monthNames[cal.get(Calendar.MONTH)] + " "
+       + day.substring(day.length() - 2) + " "
+       + hour.substring(hour.length() - 2) + ":"
+       + min.substring(min.length() - 2) + ":"
+       + sec.substring(sec.length() - 2) + " "
+       +
+       cal.getTimeZone().getDisplayName(cal.getTimeZone().inDaylightTime(this),
+ 				       TimeZone.SHORT) + " " +
+       year.substring(year.length() - 4);
+   }
+ 
+   /** 
+    * Returns a locale-dependent string representation of this
+    * <code>Date</code> object.
+    *
+    * @deprecated Use DateFormat.format(Date)
+    * @return A locale-dependent string representation.
+    * @see #parse(String)
+    * @see DateFormat
+    */
+   public String toLocaleString()
+   {
+     return java.text.DateFormat.getInstance().format(this);
+   }
+ 
+   /** 
+    * <p>
+    * Returns a string representation of this <code>Date</code>
+    * object using GMT rather than the local timezone.
+    * The following date format is used:
+    * </p>
+    * <p>
+    * <code>d mon yyyy hh:mm:ss GMT</code>
+    * </p>
+    * <p>where the fields used here are:
+    * <ul>
+    * <li>
+    * <code>d</code> -- the day of the month
+    * as one or two decimal digits (1 to 31).
+    * </li>
+    * <li>
+    * <code>mon</code> -- the month (Jan to Dec).
+    * </li>
+    * <li>
+    * <code>yyyy</code> -- the year as four decimal digits.
+    * </li>
+    * <li>
+    * <code>hh</code> -- the hour of the day
+    * as two decimal digits in 24-hour clock notation
+    * (01 to 23).
+    * </li>
+    * <li>
+    * <code>mm</code> -- the minute of the day
+    * as two decimal digits (01 to 59).
+    * </li>
+    * <li>
+    * <code>ss</code> -- the second of the day
+    * as two decimal digits (01 to 61).
+    * </li>
+    * <li>
+    * <code>GMT</code> -- the literal string "GMT"
+    * indicating Greenwich Mean Time as opposed to
+    * the local timezone.
+    * </li>
+    * </ul>
+    * 
+    * @deprecated Use DateFormat.format(Date) with a GMT TimeZone.
+    * @return A string of the form 'd mon yyyy hh:mm:ss GMT' using
+    *         GMT as opposed to the local timezone.
+    * @see #parse(String)
+    * @see DateFormat
+    */
+   public String toGMTString()
+   {
+     java.text.DateFormat format = java.text.DateFormat.getInstance();
+     format.setTimeZone(TimeZone.getTimeZone("GMT"));
+     return format.format(this);
+   }
+ 
+   /**
+    * Parses the time zone string.
+    *
+    * @param tok The token containing the time zone.
+    * @param sign The sign (+ or -) used by the time zone.
+    * @return An integer representing the number of minutes offset
+    *         from GMT for the time zone.
+    */
+   private static int parseTz(String tok, char sign)
+     throws IllegalArgumentException
+   {
+     int num;
+ 
+     try
+       {
+ 	// parseInt doesn't handle '+' so strip off sign.
+ 	num = Integer.parseInt(tok.substring(1));
+       }
+     catch (NumberFormatException ex)
+       {
+ 	throw new IllegalArgumentException(tok);
+       }
+ 
+     // Convert hours to minutes.
+     if (num < 24)
+       num *= 60;
+     else
+       num = (num / 100) * 60 + num % 100;
+ 
+     return sign == '-' ? -num : num;
+   }
+ 
+   /**
+    * Parses the month string.
+    *
+    * @param tok the token containing the month.
+    * @return An integer between 0 and 11, representing
+    *         a month from January (0) to December (11),
+    *         or -1 if parsing failed.
+    */
+   private static int parseMonth(String tok)
+   {
+     // Initialize strings for month names.
+     // We could possibly use the fields of DateFormatSymbols but that is
+     // localized and thus might not match the English words specified.
+     String months[] = { "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY",
+ 			"JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER",
+ 			"NOVEMBER", "DECEMBER" };
+ 
+     int i;
+     for (i = 0; i < 12; i++)
+       if (months[i].startsWith(tok))
+         return i;
+ 
+     // Return -1 if not found.
+     return -1;
+   }
+ 
+   /**
+    * Parses the day of the week string.
+    *
+    * @param tok the token containing the day of the week.
+    * @return true if the token was parsed successfully.
+    */
+   private static boolean parseDayOfWeek(String tok)
+   {
+     // Initialize strings for days of the week names.
+     // We could possibly use the fields of DateFormatSymbols but that is
+     // localized and thus might not match the English words specified.
+     String daysOfWeek[] = { "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY",
+ 			    "THURSDAY", "FRIDAY", "SATURDAY" };
+ 
+     int i;
+     for (i = 0; i < 7; i++)
+       if (daysOfWeek[i].startsWith(tok))
+         return true;
+ 
+     return false;
+   }
+ 
+   /** 
+    * <p>
+    * Parses a String and returns the time, in milliseconds since the
+    * epoch, it represents.  Most syntaxes are handled, including
+    * the IETF date standard "day, dd mon yyyy hh:mm:ss zz" (see
+    * <code>toString()</code> for definitions of these fields).
+    * Standard U.S. time zone abbreviations are recognised, in
+    * addition to time zone offsets in positive or negative minutes.
+    * If a time zone is specified, the specified time is assumed to
+    * be in UTC and the appropriate conversion is applied, following
+    * parsing, to convert this to the local time zone.  If no zone
+    * is specified, the time is assumed to already be in the local
+    * time zone.
+    * </p>
+    * <p>
+    * The method parses the string progressively from left to right.
+    * At the end of the parsing process, either a time is returned
+    * or an <code>IllegalArgumentException</code> is thrown to signify
+    * failure.  The ASCII characters A-Z, a-z, 0-9, and ',', '+', '-',
+    * ':' and '/' are the only characters permitted within the string,
+    * besides whitespace and characters enclosed within parantheses
+    * '(' and ')'.  
+    * </p>
+    * <p>
+    * A sequence of consecutive digits are recognised as a number,
+    * and interpreted as follows:
+    * <ul>
+    * <li>
+    * A number preceded by a sign (+ or -) is taken to be a time zone
+    * offset.  The time zone offset can be specified in either hours
+    * or minutes.  The former is assumed if the number is less than 24.
+    * Otherwise, the offset is assumed to be in minutes.  A - indicates
+    * a time zone west of GMT, while a + represents a time zone to the
+    * east of GMT.  The time zones are always assumed to be relative
+    * to GMT, and a (redundant) specification of this can be included
+    * with the time zone.  For example, '-9', 'utc-9' and 'GMT-9' all
+    * represent a time zone nine hours west of GMT.  Similarly,
+    * '+4', 'ut+4' and 'UTC+4' all give 4 hours east of GMT.
+    * </li>
+    * <li>
+    * A number equal to or greater than 70 is regarded as a year specification.
+    * Values lower than 70 are only assumed to indicate a year if both the
+    * day of the month and the month itself have already been recognised.
+    * Year values less than 100 are interpreted as being relative to the current
+    * century when the <code>Date</code> class is initialised..  Given a century,
+    * x, the year is assumed to be within the range x - 80 to x + 19.  The value
+    * itself is then used as a match against the two last digits of one of these
+    * years.  For example, take x to be 2004.  A two-digit year is assumed to fall
+    * within the range x - 80 (1924) and x + 19 (2023).  Thus, any intepreted value
+    * between 0 and 23 is assumed to be 2000 to 2023 and values between 24 and 99
+    * are taken as being 1924 to 1999.  This only applies for the case of 2004.
+    * With a different year, the values will be interpreted differently. 2005
+    * will used 0 to 24 as 2000 to 2024 and 25 to 99 as 1925 to 1999, for example.
+    * This behaviour differs from that of <code>SimpleDateFormat</code> and is
+    * time-dependent (a two-digit year will be interpreted differently depending
+    * on the time the code is run).
+    * </li>
+    * <li>
+    * Numbers followed by a colon are interpreted by first an hour, and then
+    * as a minute, once an hour has been found.
+    * </li>
+    * <li>
+    * <li>
+    * Numbers followed by a slash are regarded first as a month, and then as
+    * a day of the month once the month has been found.  This follows the
+    * U.S. date format of mm/dd, rather than the European dd/mm.  Months
+    * are converted to the recognised value - 1 before storage, in order
+    * to put the number within the range 0 to 11.
+    * </li>
+    * <li>
+    * Numbers followed by commas, whitespace, hyphens or the end of the string
+    * are interpreted in the following order: hour, minute, second, day of month.
+    * The first type not already recognised in the current string being parsed is
+    * assumed.
+    * </li>
+    * </ul>
+    * </p>
+    * <p>
+    * A sequence of consecutive alphabetic characters is recognised as a word,
+    * and interpreted as follows, in a case-insentive fashion:
+    * <ul>
+    * <li>
+    * The characters 'AM' or 'PM' restrict the hour value to a value between 0
+    * and 12.  In the latter case, 12 is added to the hour value before storage.
+    * </li>
+    * <li>
+    * Any words which match any prefix of one of the days of the week ('Monday',
+    * 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' and 'Sunday'),
+    * are simply ignored.
+    * </li>
+    * <li>
+    * Any words which match any prefix of one of the months of the year ('January',
+    * 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',
+    * 'October', 'November', 'December') are recognised and interpreted as the
+    * appropriate value between 0 and 11.  The first match made against a
+    * month is the one used, in the order specified here.  For example, 'Ma' is
+    * intepreted as 'March' (2) and not as 'May' (4).  Similarly, 'Ju' is 'June',
+    * and not 'July'.
+    * </li>
+    * <li>
+    * The words 'GMT', 'UT' and 'UTC' are interpreted as specifying UTC as the
+    * time zone in use for this date.
+    * </li>
+    * <li>
+    * The word pairs 'EST'/'EDT', 'CST'/'CDT', 'MST'/'MDT' and 'PST'/'PDT' are
+    * interpreted as the appropriate U.S. time zone abbreviation.  Each pair
+    * is the standard and daylight savings time zone specification, respectively,
+    * for each zone within the U.S, these being Eastern Standard/Daylight Time
+    * (-5), Central Standard/Daylight Time (-6), Mountain Standard/Daylight Time
+    * (-7) and Pacific Standard/Daylight Time (-8).
+    * </li>
+    * </ul>
+    *
+    * @param string The String to parse.
+    * @return The time in milliseconds since the epoch.
+    * @throws IllegalArgumentException if the string fails to parse.
+    * @deprecated Use DateFormat.parse(String)
+    * @see #toString()
+    * @see SimpleDateFormat
+    */
+   public static long parse(String string)
+   {
+     // Initialize date/time fields before parsing begins.
+     int year = -1;
+     int month = -1;
+     int day = -1;
+     int hour = -1;
+     int minute = -1;
+     int second = -1;
+     int timezone = 0;
+     boolean localTimezone = true;
+ 
+     // Trim out any nested stuff in parentheses now to make parsing easier.
+     StringBuffer buf = new StringBuffer();
+     int parenNesting = 0;
+     int len = string.length();
+     for (int i = 0;  i < len;  i++)
+       {
+ 	char ch = string.charAt(i);
+ 	if (ch >= 'a' && ch <= 'z')
+ 	  ch -= 'a' - 'A';
+ 	if (ch == '(')
+ 	  parenNesting++;
+ 	else if (parenNesting == 0)
+ 	  buf.append(ch);
+ 	else if (ch == ')')
+ 	  parenNesting--;
+       }
+     int tmpMonth;
+ 
+     // Make all chars upper case to simplify comparisons later.
+     // Also ignore commas; treat them as delimiters.
+     StringTokenizer strtok = new StringTokenizer(buf.toString(), " \t\n\r,");
+ 
+     while (strtok.hasMoreTokens())
+       {
+ 	String tok = strtok.nextToken();
+ 	char firstch = tok.charAt(0);
+ 	if ((firstch == '+' || firstch == '-') && year >= 0)
+ 	  {
+ 	    timezone = parseTz(tok, firstch);
+ 	    localTimezone = false;
+ 	  }
+ 	else if (firstch >= '0' && firstch <= '9')
+ 	  {
+ 	    while (tok != null && tok.length() > 0)
+ 	      {
+ 		int punctOffset = tok.length();
+ 		int num = 0;
+ 		int punct;
+ 		for (int i = 0;  ;  i++)
+ 		  {
+ 		    if (i >= punctOffset)
+ 		      {
+ 			punct = -1;
+ 			break;
+ 		      }
+ 		    else
+ 		      {
+ 			punct = tok.charAt(i);
+ 			if (punct >= '0' && punct <= '9')
+ 			  {
+ 			    if (num > 999999999) // in case of overflow
+ 			      throw new IllegalArgumentException(tok);
+ 			    num = 10 * num + (punct - '0');
+ 			  }
+ 			else
+ 			  {
+ 			    punctOffset = i;
+ 			    break;
+ 			  }
+ 		      }
+ 		      
+ 		  }
+ 
+ 		if (punct == ':')
+ 		  {
+ 		    if (hour < 0)
+ 		      hour = num;
+ 		    else
+ 		      minute = num;
+ 		  }
+ 	        else if ((num >= 70
+ 			  && (punct == ' ' || punct == ','
+ 			      || punct == '/' || punct < 0))
+ 			 || (num < 70 && day >= 0 && month >= 0 && year < 0))
+ 		  {
+ 		    if (num >= 100)
+ 		      year = num;
+ 		    else
+ 		      {
+ 			int curYear = 1900 + new Date().getYear();
+ 			int firstYear = curYear - 80;
+ 			year = firstYear / 100 * 100 + num;
+ 			if (year < firstYear)
+ 			  year += 100;
+ 		      }
+ 		  }
+ 		else if (punct == '/')
+ 		  {
+ 		    if (month < 0)
+ 		      month = num - 1;
+ 		    else
+ 		      day = num;
+ 		  }
+ 		else if (hour >= 0 && minute < 0)
+ 		  minute = num;
+ 		else if (minute >= 0 && second < 0)
+ 		  second = num;
+ 		else if (day < 0)
+ 		  day = num;
+ 		else
+ 		  throw new IllegalArgumentException(tok);
+ 
+ 		// Advance string if there's more to process in this token.
+ 		if (punct < 0 || punctOffset + 1 >= tok.length())
+ 		  tok = null;
+ 		else
+ 		  tok = tok.substring(punctOffset + 1);
+ 	      }
+ 	  }
+ 	else if (firstch >= 'A' && firstch <= 'Z')
+ 	  {
+ 	    if (tok.equals("AM"))
+ 	      {
+ 		if (hour < 1 || hour > 12)
+ 		  throw new IllegalArgumentException(tok);
+ 		if (hour == 12)
+ 		  hour = 0;
+ 	      }
+ 	    else if (tok.equals("PM"))
+ 	      {
+ 		if (hour < 1 || hour > 12)
+ 		  throw new IllegalArgumentException(tok);
+ 		if (hour < 12)
+ 		  hour += 12;
+ 	      }
+ 	    else if (parseDayOfWeek(tok))
+ 	      ; // Ignore it; throw the token away.
+ 	    else if (tok.equals("UT") || tok.equals("UTC") || tok.equals("GMT"))
+ 	      localTimezone = false;
+ 	    else if (tok.startsWith("UT") || tok.startsWith("GMT"))
+ 	      {
+ 		int signOffset = 3;
+ 		if (tok.charAt(1) == 'T' && tok.charAt(2) != 'C')
+ 		  signOffset = 2;
+ 
+ 	        char sign = tok.charAt(signOffset);
+ 		if (sign != '+' && sign != '-')
+ 		  throw new IllegalArgumentException(tok);
+ 
+ 	        timezone = parseTz(tok.substring(signOffset), sign);
+ 	        localTimezone = false;
+ 	      }
+ 	    else if ((tmpMonth = parseMonth(tok)) >= 0)
+ 	      month = tmpMonth;
+ 	    else if (tok.length() == 3 && tok.charAt(2) == 'T')
+ 	      {
+ 		// Convert timezone offset from hours to minutes.
+ 		char ch = tok.charAt(0);
+ 		if (ch == 'E')
+ 		  timezone = -5 * 60;
+ 		else if (ch == 'C')
+ 		  timezone = -6 * 60;
+ 		else if (ch == 'M')
+ 		  timezone = -7 * 60;
+ 		else if (ch == 'P')
+ 		  timezone = -8 * 60;
+ 		else
+ 		  throw new IllegalArgumentException(tok);
+ 
+ 		// Shift 60 minutes for Daylight Savings Time.
+ 		if (tok.charAt(1) == 'D')
+ 		  timezone += 60;
+ 		else if (tok.charAt(1) != 'S')
+ 		  throw new IllegalArgumentException(tok);
+ 
+ 	        localTimezone = false;
+ 	      }
+ 	    else
+ 	      throw new IllegalArgumentException(tok);
+ 	  }
+ 	else
+ 	  throw new IllegalArgumentException(tok);
+       }
+ 
+     // Unspecified hours, minutes, or seconds should default to 0.
+     if (hour < 0)
+       hour = 0;
+     if (minute < 0)
+       minute = 0;
+     if (second < 0)
+       second = 0;
+ 
+     // Throw exception if any other fields have not been recognized and set.
+     if (year < 0 || month < 0 || day < 0)
+       throw new IllegalArgumentException("Missing field");
+ 
+     // Return the time in either local time or relative to GMT as parsed.
+     // If no time-zone was specified, get the local one (in minutes) and
+     // convert to milliseconds before adding to the UTC.
+     GregorianCalendar cal
+       = new GregorianCalendar(year, month, day, hour, minute, second);
+     if (!localTimezone)
+       {
+ 	cal.set(Calendar.ZONE_OFFSET, timezone * 60 * 1000);
+ 	cal.set(Calendar.DST_OFFSET, 0);
+       }
+     return cal.getTimeInMillis();
+   }
+ 
+   /**
+    * Returns the difference between the year represented by this
+    * <code>Date</code> object and 1900.
+    *
+    * @return the year minus 1900 represented by this date object.
+    * @deprecated Use Calendar instead of Date, and use get(Calendar.YEAR)
+    * instead.  Note the 1900 difference in the year.
+    * @see Calendar
+    * @see #setYear(int)
+    */
+   public int getYear()
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     return cal.get(Calendar.YEAR) - 1900;
+   }
+ 
+   /**
+    * Sets the year to the specified year, plus 1900.  The other
+    * fields are only altered as required to match the same date
+    * and time in the new year.  Usually, this will mean that
+    * the fields are not changed at all, but in the case of
+    * a leap day or leap second, the fields will change in
+    * relation to the existence of such an event in the new year.
+    * For example, if the date specifies February the 29th, 2000,
+    * then this will become March the 1st if the year is changed
+    * to 2001, as 2001 is not a leap year.  Similarly, a seconds
+    * value of 60 or 61 may result in the seconds becoming 0 and
+    * the minute increasing by 1, if the new time does not include
+    * a leap second.
+    *
+    * @param year the year minus 1900.
+    * @deprecated Use Calendar instead of Date, and use
+    * set(Calendar.YEAR, year) instead.  Note about the 1900
+    * difference in year.  
+    * @see #getYear()
+    * @see Calendar
+    */
+   public void setYear(int year)
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     cal.set(Calendar.YEAR, 1900 + year);
+     time = cal.getTimeInMillis();
+   }
+ 
+   /**
+    * Returns the month represented by this <code>Date</code> object,
+    * as a value between 0 (January) and 11 (December).
+    *
+    * @return the month represented by this date object (zero based).
+    * @deprecated Use Calendar instead of Date, and use get(Calendar.MONTH)
+    * instead.
+    * @see #setMonth(int)
+    * @see Calendar
+    */
+   public int getMonth()
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     return cal.get(Calendar.MONTH);
+   }
+ 
+   /**
+    * Sets the month to the given value.  The other
+    * fields are only altered as necessary to match
+    * the same date and time in the new month.  In most
+    * cases, the other fields won't change at all.  However,
+    * in the case of a shorter month or a leap second, values
+    * may be adjusted.  For example, if the day of the month
+    * is currently 31, and the month value is changed from
+    * January (0) to September (8), the date will become
+    * October the 1st, as September only has 30 days.  Similarly,
+    * a seconds value of 60 or 61 (a leap second) may result
+    * in the seconds value being reset to 0 and the minutes
+    * value being incremented by 1, if the new time does
+    * not include a leap second.
+    * 
+    * @param month the month, with a zero-based index
+    *        from January.
+    * @deprecated Use Calendar instead of Date, and use
+    * set(Calendar.MONTH, month) instead.
+    * @see #getMonth()
+    * @see Calendar 
+    */
+   public void setMonth(int month)
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     cal.set(Calendar.MONTH, month);
+     time = cal.getTimeInMillis();
+   }
+ 
+   /**
+    * Returns the day of the month of this <code>Date</code>
+    * object, as a value between 0 and 31.
+    *
+    * @return the day of month represented by this date object.
+    * @deprecated Use Calendar instead of Date, and use get(Calendar.DATE)
+    * instead.
+    * @see Calendar
+    * @see #setDate(int)
+    */
+   public int getDate()
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     return cal.get(Calendar.DATE);
+   }
+ 
+   /**
+    * Sets the date to the given value. The other
+    * fields are only altered as necessary to match
+    * the same date and time on the new day of the month.  In most
+    * cases, the other fields won't change at all.  However,
+    * in the case of a leap second or the day being out of
+    * the range of the current month, values
+    * may be adjusted.  For example, if the day of the month
+    * is currently 30 and the month is June, a new day of the
+    * month value of 31 will cause the month to change to July,
+    * as June only has 30 days .  Similarly,
+    * a seconds value of 60 or 61 (a leap second) may result
+    * in the seconds value being reset to 0 and the minutes
+    * value being incremented by 1, if the new time does
+    * not include a leap second.
+    *
+    * @param date the date.
+    * @deprecated Use Calendar instead of Date, and use
+    * set(Calendar.DATE, date) instead. 
+    * @see Calendar
+    * @see #getDate()
+    */
+   public void setDate(int date)
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     cal.set(Calendar.DATE, date);
+     time = cal.getTimeInMillis();
+   }
+ 
+   /**
+    * Returns the day represented by this <code>Date</code>
+    * object as an integer between 0 (Sunday) and 6 (Saturday).
+    *
+    * @return the day represented by this date object.
+    * @deprecated Use Calendar instead of Date, and use get(Calendar.DAY_OF_WEEK)
+    * instead.
+    * @see Calendar
+    */
+   public int getDay()
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     // For Calendar, Sunday is 1.  For Date, Sunday is 0.
+     return cal.get(Calendar.DAY_OF_WEEK) - 1;
+   }
+ 
+   /**
+    * Returns the hours represented by this <code>Date</code>
+    * object as an integer between 0 and 23.
+    *
+    * @return the hours represented by this date object.
+    * @deprecated Use Calendar instead of Date, and use get(Calendar.HOUR_OF_DAY)
+    * instead.
+    * @see Calendar
+    * @see #setHours(int)
+    */
+   public int getHours()
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     return cal.get(Calendar.HOUR_OF_DAY);
+   }
+ 
+   /**
+    * Sets the hours to the given value.  The other
+    * fields are only altered as necessary to match
+    * the same date and time in the new hour.  In most
+    * cases, the other fields won't change at all.  However,
+    * in the case of a leap second, values
+    * may be adjusted.  For example,
+    * a seconds value of 60 or 61 (a leap second) may result
+    * in the seconds value being reset to 0 and the minutes
+    * value being incremented by 1 if the new hour does
+    * not contain a leap second.
+    *
+    * @param hours the hours.
+    * @deprecated Use Calendar instead of Date, and use
+    * set(Calendar.HOUR_OF_DAY, hours) instead.
+    * @see Calendar
+    * @see #getHours() 
+    */
+   public void setHours(int hours)
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     cal.set(Calendar.HOUR_OF_DAY, hours);
+     time = cal.getTimeInMillis();
+   }
+ 
+   /**
+    * Returns the number of minutes represented by the <code>Date</code>
+    * object, as an integer between 0 and 59.
+    *
+    * @return the minutes represented by this date object.
+    * @deprecated Use Calendar instead of Date, and use get(Calendar.MINUTE)
+    * instead.
+    * @see Calendar
+    * @see #setMinutes(int)
+    */
+   public int getMinutes()
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     return cal.get(Calendar.MINUTE);
+   }
+ 
+   /**
+    * Sets the minutes to the given value.  The other
+    * fields are only altered as necessary to match
+    * the same date and time in the new minute.  In most
+    * cases, the other fields won't change at all.  However,
+    * in the case of a leap second, values
+    * may be adjusted.  For example,
+    * a seconds value of 60 or 61 (a leap second) may result
+    * in the seconds value being reset to 0 and the minutes
+    * value being incremented by 1 if the new minute does
+    * not contain a leap second.
+    *
+    * @param minutes the minutes.
+    * @deprecated Use Calendar instead of Date, and use
+    * set(Calendar.MINUTE, minutes) instead. 
+    * @see Calendar
+    * @see #getMinutes()
+    */
+   public void setMinutes(int minutes)
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     cal.set(Calendar.MINUTE, minutes);
+     time = cal.getTimeInMillis();
+   }
+ 
+   /**
+    * Returns the number of seconds represented by the <code>Date</code>
+    * object, as an integer between 0 and 61 (60 and 61 being leap seconds).
+    *
+    * @return the seconds represented by this date object.
+    * @deprecated Use Calendar instead of Date, and use get(Calendar.SECOND)
+    * instead.
+    * @see Calendar
+    * @see #setSeconds(int)
+    */
+   public int getSeconds()
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     return cal.get(Calendar.SECOND);
+   }
+ 
+   /**
+    * Sets the seconds to the given value.  The other
+    * fields are only altered as necessary to match
+    * the same date and time in the new minute.  In most
+    * cases, the other fields won't change at all.  However,
+    * in the case of a leap second, values
+    * may be adjusted.  For example, setting the
+    * seconds value to 60 or 61 (a leap second) may result
+    * in the seconds value being reset to 0 and the minutes
+    * value being incremented by 1, if the current time does
+    * not contain a leap second.
+    *
+    * @param seconds the seconds.
+    * @deprecated Use Calendar instead of Date, and use
+    * set(Calendar.SECOND, seconds) instead.
+    * @see Calendar
+    * @see #getSeconds() 
+    */
+   public void setSeconds(int seconds)
+   {
+     Calendar cal = Calendar.getInstance();
+     cal.setTimeInMillis(time);
+     cal.set(Calendar.SECOND, seconds);
+     time = cal.getTimeInMillis();
+   }
+ 
+   /**
+    * Deserializes a <code>Date</code> object from an
+    * input stream, setting the time (in milliseconds
+    * since the epoch) to the long value read from the
+    * stream.
+    *
+    * @param input the input stream.
+    * @throws IOException if an I/O error occurs in the stream.
+    * @throws ClassNotFoundException if the class of the
+    *         serialized object could not be found.
+    */
+   private void readObject(ObjectInputStream input)
+     throws IOException, ClassNotFoundException
+   {
+     input.defaultReadObject();
+     time = input.readLong();
+   }
+ 
+   /**
+    * Serializes a <code>Date</code> object to an output stream,
+    * storing the time (in milliseconds since the epoch) as a long
+    * value in the stream.
+    *
+    * @serialdata A long value representing the offset from the epoch
+    * in milliseconds.  This is the same value that is returned by the
+    * method getTime().
+    * @param output the output stream.
+    * @throws IOException if an I/O error occurs in the stream.
+    */
+   private void writeObject(ObjectOutputStream output)
+     throws IOException
+   {
+     output.defaultWriteObject();
+     output.writeLong(time);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Dictionary.java gcc-4.1.0/libjava/classpath/java/util/Dictionary.java
*** gcc-4.0.2/libjava/classpath/java/util/Dictionary.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Dictionary.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,136 ----
+ /* Dictionary.java -- an abstract (and essentially worthless) 
+    class which is Hashtable's superclass
+    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * A Dictionary maps keys to values; <i>how</i> it does that is
+  * implementation-specific.
+  * 
+  * This is an abstract class which has really gone by the wayside.
+  * People at Javasoft are probably embarrassed by it.  At this point,
+  * it might as well be an interface rather than a class, but it remains
+  * this poor, laughable skeleton for the sake of backwards compatibility.
+  * At any rate, this was what came before the {@link Map} interface 
+  * in the Collections framework.
+  *
+  * @author Jon Zeppieri
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Map
+  * @see Hashtable
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public abstract class Dictionary
+ {
+   // WARNING: Dictionary is a CORE class in the bootstrap cycle. See the
+   // comments in vm/reference/java/lang/Runtime for implications of this fact.
+ 
+   /**
+    * Sole constructor (often called implicitly).
+    */
+   public Dictionary()
+   {
+   }
+ 
+   /**
+    * Returns an Enumeration of the values in this Dictionary.
+    *
+    * @return an Enumeration of the values
+    * @see #keys()
+    */
+   public abstract Enumeration elements();
+ 
+   /** 
+    * Returns the value associated with the supplied key, or null
+    * if no such value exists. Since Dictionaries are not allowed null keys
+    * or elements, a null result always means the key is not present.
+    *
+    * @param key the key to use to fetch the value
+    * @return the mapped value
+    * @throws NullPointerException if key is null
+    * @see #put(Object, Object)
+    */
+   public abstract Object get(Object key);
+ 
+   /**
+    * Returns true when there are no elements in this Dictionary.
+    *
+    * @return <code>size() == 0</code>
+    */
+   public abstract boolean isEmpty();
+ 
+   /**
+    * Returns an Enumeration of the keys in this Dictionary
+    *
+    * @return an Enumeration of the keys
+    * @see #elements()
+    */
+   public abstract Enumeration keys();
+ 
+   /**
+    * Inserts a new value into this Dictionary, located by the
+    * supplied key. Dictionary does not support null keys or values, so
+    * a null return can safely be interpreted as adding a new key.
+    *
+    * @param key the key which locates the value
+    * @param value the value to put into the Dictionary
+    * @return the previous value of the key, or null if there was none
+    * @throws NullPointerException if key or value is null
+    * @see #get(Object)
+    */
+   public abstract Object put(Object key, Object value);
+ 
+   /**
+    * Removes from the Dictionary the value located by the given key. A null
+    * return safely means that the key was not mapped in the Dictionary.
+    *
+    * @param key the key used to locate the value to be removed
+    * @return the value associated with the removed key
+    * @throws NullPointerException if key is null
+    */
+   public abstract Object remove(Object key);
+ 
+   /**
+    * Returns the number of values currently in this Dictionary.
+    *
+    * @return the number of keys in the Dictionary
+    */
+   public abstract int size();
+ } // class Dictionary
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/EmptyStackException.java gcc-4.1.0/libjava/classpath/java/util/EmptyStackException.java
*** gcc-4.0.2/libjava/classpath/java/util/EmptyStackException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/EmptyStackException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,69 ----
+ /* EmptyStackException.java -- Attempt to pop from an empty stack
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  */
+ 
+ /**
+  * This exception is thrown by the Stack class when an attempt is made to pop
+  * or otherwise access elements from an empty stack.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Stack
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class EmptyStackException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0.
+    */
+   private static final long serialVersionUID = 5084686378493302095L;
+ 
+   /**
+    * Constructs an EmptyStackException with no detail message.
+    */
+   public EmptyStackException()
+   {
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Enumeration.java gcc-4.1.0/libjava/classpath/java/util/Enumeration.java
*** gcc-4.0.2/libjava/classpath/java/util/Enumeration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Enumeration.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,81 ----
+ /* Enumeration.java -- Interface for enumerating lists of objects
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1.
+  * Status:  Believed complete and correct
+  */
+ 
+ /**
+  * Interface for lists of objects that can be returned in sequence. Successive
+  * objects are obtained by the nextElement method.
+  * <p>
+  * As of Java 1.2, the Iterator interface provides the same functionality, but
+  * with shorter method names and a new optional method to remove items from the
+  * list. If writing for 1.2, consider using Iterator instead. Enumerations over
+  * the new collections classes, for use with legacy APIs that require them, can
+  * be obtained by the enumeration method in class Collections.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Iterator
+  * @see Hashtable
+  * @see Vector
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public interface Enumeration
+ {
+   /**
+    * Tests whether there are elements remaining in the enumeration.
+    *
+    * @return true if there is at least one more element in the enumeration,
+    *         that is, if the next call to nextElement will not throw a
+    *         NoSuchElementException.
+    */
+   boolean hasMoreElements();
+ 
+   /**
+    * Obtain the next element in the enumeration.
+    *
+    * @return the next element in the enumeration
+    * @throws NoSuchElementException if there are no more elements
+    */
+   Object nextElement();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/EventListener.java gcc-4.1.0/libjava/classpath/java/util/EventListener.java
*** gcc-4.0.2/libjava/classpath/java/util/EventListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/EventListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* EventListener.java -- tagging interface for all event listeners
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * Empty interface that is implemented by classes that need to receive
+  * events. Subinterfaces define methods that can be called to fire an
+  * event notification. Normally the name of these subinterfaces end in
+  * <code>Listener</code> and all method described by the subinterface
+  * take as argument an subclass of <code>EventObject</code>.
+  *
+  * @author Tom Tromey (tromey@cygnus.com)
+  * @see EventObject
+  * @status updated to 1.4
+  */
+ public interface EventListener
+ {
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/EventListenerProxy.java gcc-4.1.0/libjava/classpath/java/util/EventListenerProxy.java
*** gcc-4.0.2/libjava/classpath/java/util/EventListenerProxy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/EventListenerProxy.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* EventListenerProxy.java -- abstract wrapper for event listeners
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * An abstract wrapper for event listeners.  This allows subclasses to
+  * attach additional parameters to an existing event listener to create
+  * a new one.  Subclasses are expected to add methods to set and retrieve
+  * any attached properties.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public abstract class EventListenerProxy implements EventListener
+ {
+   /** The listener that this proxy wraps. */
+   private final EventListener listener;
+ 
+   /**
+    * Construct a proxy event listener, given an existing one to augment.
+    *
+    * @param listener the listener to wrap
+    */
+   public EventListenerProxy(EventListener listener)
+   {
+     this.listener = listener;
+   }
+ 
+   /**
+    * Return the wrapped event listener.
+    *
+    * @return the listener associated with this proxy
+    */
+   public EventListener getListener()
+   {
+     return listener;
+   }
+ } // class EventListenerProxy
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/EventObject.java gcc-4.1.0/libjava/classpath/java/util/EventObject.java
*** gcc-4.0.2/libjava/classpath/java/util/EventObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/EventObject.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,101 ----
+ /* EventObject.java -- represents an event on an object
+    Copyright (C) 1999, 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Represents Events fired by Objects.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see EventListener
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class EventObject implements Serializable
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5516075349620653480L;
+ 
+   /**
+    * The source object; in other words, the object which this event takes
+    * place on.
+    */
+   protected transient Object source;
+ 
+   /**
+    * Constructs an EventObject with the specified source.
+    *
+    * @param source the source of the event
+    * @throws IllegalArgumentException if source is null (This is not
+    *         specified, but matches the behavior of the JDK)
+    */
+   public EventObject(Object source)
+   {
+     // This check for null is stupid, if you ask me, since source is
+     // protected and non-final, so a subclass can set it to null later on.
+     if (source == null)
+       throw new IllegalArgumentException();
+     this.source = source;
+   }
+ 
+   /**
+    * Returns the source of the event.
+    *
+    * @return the event source
+    */
+   public Object getSource()
+   {
+     return source;
+   }
+ 
+   /**
+    * Converts the event to a String. The format is not specified, but by
+    * observation, the JDK uses:
+    * <code>getClass().getName() + "[source=" + source + "]";</code>.
+    *
+    * @return String representation of the Event
+    */
+   public String toString()
+   {
+     return getClass().getName() + "[source=" + source + "]";
+   }
+ } // class EventObject
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/GregorianCalendar.java gcc-4.1.0/libjava/classpath/java/util/GregorianCalendar.java
*** gcc-4.0.2/libjava/classpath/java/util/GregorianCalendar.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/GregorianCalendar.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1355 ----
+ /* java.util.GregorianCalendar
+    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ 
+ /**
+  * <p>
+  * This class represents the Gregorian calendar, that is used in most
+  * countries all over the world.  It does also handle the Julian calendar
+  * for dates smaller than the date of the change to the Gregorian calendar.
+  * The Gregorian calendar differs from the Julian calendar by a different
+  * leap year rule (no leap year every 100 years, except if year is divisible
+  * by 400).
+  * </p>
+  * <p>
+  * This change date is different from country to country, and can be changed with
+  * <code>setGregorianChange</code>.  The first countries to adopt the Gregorian
+  * calendar did so on the 15th of October, 1582.  This date followed October
+  * the 4th, 1582 in the Julian calendar system.  The non-existant days that were
+  * omitted when the change took place are interpreted as Gregorian dates.
+  * </p>
+  * <p>
+  * Prior to the changeover date, New Year's Day occurred on the 25th of March.
+  * However, this class always takes New Year's Day as being the 1st of January.
+  * Client code should manually adapt the year value, if required, for dates
+  * between January the 1st and March the 24th in years prior to the changeover.
+  * </p>
+  * <p>
+  * Any date infinitely forwards or backwards in time can be represented by
+  * this class.  A <em>proleptic</em> calendar system is used, which allows
+  * future dates to be created via the existing rules.  This allows meaningful
+  * and consistent dates to be produced for all years.  However, dates are only
+  * historically accurate following March the 1st, 4AD when the Julian calendar
+  * system was adopted.  Prior to this, leap year rules were applied erraticly.
+  * </p>
+  * <p>
+  * There are two eras available for the Gregorian calendar, namely BC and AD.
+  * </p>
+  * <p>
+  * Weeks are defined as a period of seven days, beginning on the first day
+  * of the week, as returned by <code>getFirstDayOfWeek()</code>, and ending
+  * on the day prior to this.
+  * </p>
+  * <p>
+  * The weeks of the year are numbered from 1 to a possible 53.  The first week
+  * of the year is defined as the first week that contains at least the minimum
+  * number of days of the first week in the new year (retrieved via
+  * <code>getMinimalDaysInFirstWeek()</code>).  All weeks after this are numbered
+  * from 2 onwards.
+  * </p>
+  * <p>
+  * For example, take the year 2004.  It began on a Thursday.  The first week
+  * of 2004 depends both on where a week begins and how long it must minimally
+  * last.  Let's say that the week begins on a Monday and must have a minimum
+  * of 5 days.  In this case, the first week begins on Monday, the 5th of January.
+  * The first 4 days (Thursday to Sunday) are not eligible, as they are too few
+  * to make up the minimum number of days of the first week which must be in
+  * the new year.  If the minimum was lowered to 4 days, then the first week
+  * would instead begin on Monday, the 29th of December, 2003.  This first week
+  * has 4 of its days in the new year, and is now eligible.
+  * </p>
+  * <p>
+  * The weeks of the month are numbered from 0 to a possible 6.  The first week
+  * of the month (numbered 1) is a set of days, prior to the first day of the week,
+  * which number at least the minimum number of days in a week.  Unlike the first
+  * week of the year, the first week of the month only uses days from that particular
+  * month.  As a consequence, it may have a variable number of days (from the minimum
+  * number required up to a full week of 7) and it need not start on the first day of
+  * the week.  It must, however, be following by the first day of the week, as this
+  * marks the beginning of week 2.  Any days of the month which occur prior to the
+  * first week (because the first day of the week occurs before the minimum number
+  * of days is met) are seen as week 0.
+  * </p>
+  * <p>
+  * Again, we will take the example of the year 2004 to demonstrate this.  September
+  * 2004 begins on a Wednesday.  Taking our first day of the week as Monday, and the
+  * minimum length of the first week as 6, we find that week 1 runs from Monday,
+  * the 6th of September to Sunday the 12th.  Prior to the 6th, there are only
+  * 5 days (Wednesday through to Sunday).  This is too small a number to meet the
+  * minimum, so these are classed as being days in week 0.  Week 2 begins on the
+  * 13th, and so on.  This changes if we reduce the minimum to 5.  In this case,
+  * week 1 is a truncated week from Wednesday the 1st to Sunday the 5th, and week
+  * 0 doesn't exist.  The first seven day week is week 2, starting on the 6th.
+  * </p>
+  * <p>
+  * On using the <code>clear()</code> method, the Gregorian calendar returns
+  * to its default value of the 1st of January, 1970 AD 00:00:00 (the epoch).
+  * The day of the week is set to the correct day for that particular time.
+  * The day is also the first of the month, and the date is in week 0.
+  * </p>
+  *
+  * @see Calendar
+  * @see TimeZone
+  * @see Calendar#getFirstDayOfWeek()
+  * @see Calendar#getMinimalDaysInFirstWeek()
+  */
+ public class GregorianCalendar extends Calendar
+ {
+   /**
+    * Constant representing the era BC (Before Christ).
+    */
+   public static final int BC = 0;
+ 
+   /**
+    * Constant representing the era AD (Anno Domini).
+    */
+   public static final int AD = 1;
+ 
+   /**
+    * The point at which the Gregorian calendar rules were used.
+    * This may be changed by using setGregorianChange;
+    * The default is midnight (UTC) on October 5, 1582 (Julian),
+    * or October 15, 1582 (Gregorian).
+    *
+    * @serial the changeover point from the Julian calendar
+    *         system to the Gregorian.
+    */
+   private long gregorianCutover = (new Date((24 * 60 * 60 * 1000L) * (((1582 * (365 * 4
+                                             + 1)) / 4
+                                             + (java.util.Calendar.OCTOBER * (31
+                                             + 30 + 31 + 30 + 31) - 9) / 5 + 5)
+                                             - ((1970 * (365 * 4 + 1)) / 4 + 1
+                                             - 13)))).getTime();
+ 
+   /**
+    * For compatability with Sun's JDK.
+    */
+   static final long serialVersionUID = -8125100834729963327L;
+ 
+   /**
+    * Days in the epoch. Relative Jan 1, year '0' which is not a leap year.
+    * (although there is no year zero, this does not matter.)
+    * This is consistent with the formula:
+    * = (year-1)*365L + ((year-1) >> 2)
+    *
+    * Plus the gregorian correction:
+    *  Math.floor((year-1) / 400.) - Math.floor((year-1) / 100.);
+    * For a correct julian date, the correction is -2 instead.
+    *
+    * The gregorian cutover in 1582 was 10 days, so by calculating the
+    * correction from year zero, we have 15 non-leap days (even centuries)
+    * minus 3 leap days (year 400,800,1200) = 12. Subtracting two corrects
+    * this to the correct number 10.
+    */
+   private static final int EPOCH_DAYS = 719162;
+ 
+   /**
+    * Constructs a new GregorianCalender representing the current
+    * time, using the default time zone and the default locale.
+    */
+   public GregorianCalendar()
+   {
+     this(TimeZone.getDefault(), Locale.getDefault());
+   }
+ 
+   /**
+    * Constructs a new GregorianCalender representing the current
+    * time, using the specified time zone and the default locale.
+    *
+    * @param zone a time zone.
+    */
+   public GregorianCalendar(TimeZone zone)
+   {
+     this(zone, Locale.getDefault());
+   }
+ 
+   /**
+    * Constructs a new GregorianCalender representing the current
+    * time, using the default time zone and the specified locale.
+    *
+    * @param locale a locale.
+    */
+   public GregorianCalendar(Locale locale)
+   {
+     this(TimeZone.getDefault(), locale);
+   }
+ 
+   /**
+    * Constructs a new GregorianCalender representing the current
+    * time with the given time zone and the given locale.
+    *
+    * @param zone a time zone.
+    * @param locale a locale.
+    */
+   public GregorianCalendar(TimeZone zone, Locale locale)
+   {
+     this(zone, locale, false);
+     setTimeInMillis(System.currentTimeMillis());
+     complete();
+   }
+ 
+   /**
+    * Common constructor that all constructors should call.
+    * @param zone a time zone.
+    * @param locale a locale.
+    * @param unused unused parameter to make the signature differ from
+    * the public constructor (TimeZone, Locale).
+    */
+   private GregorianCalendar(TimeZone zone, Locale locale, boolean unused)
+   {
+     super(zone, locale);
+   }
+ 
+   /**
+    * Constructs a new GregorianCalendar representing midnight on the
+    * given date with the default time zone and locale.
+    *
+    * @param year corresponds to the YEAR time field.
+    * @param month corresponds to the MONTH time field.
+    * @param day corresponds to the DAY time field.
+    */
+   public GregorianCalendar(int year, int month, int day)
+   {
+     this(TimeZone.getDefault(), Locale.getDefault(), false);
+     set(year, month, day);
+   }
+ 
+   /**
+    * Constructs a new GregorianCalendar representing midnight on the
+    * given date with the default time zone and locale.
+    *
+    * @param year corresponds to the YEAR time field.
+    * @param month corresponds to the MONTH time field.
+    * @param day corresponds to the DAY time field.
+    * @param hour corresponds to the HOUR_OF_DAY time field.
+    * @param minute corresponds to the MINUTE time field.
+    */
+   public GregorianCalendar(int year, int month, int day, int hour, int minute)
+   {
+     this(TimeZone.getDefault(), Locale.getDefault(), false);
+     set(year, month, day, hour, minute);
+   }
+ 
+   /**
+    * Constructs a new GregorianCalendar representing midnight on the
+    * given date with the default time zone and locale.
+    *
+    * @param year corresponds to the YEAR time field.
+    * @param month corresponds to the MONTH time field.
+    * @param day corresponds to the DAY time field.
+    * @param hour corresponds to the HOUR_OF_DAY time field.
+    * @param minute corresponds to the MINUTE time field.
+    * @param second corresponds to the SECOND time field.
+    */
+   public GregorianCalendar(int year, int month, int day, int hour, int minute,
+                            int second)
+   {
+     this(TimeZone.getDefault(), Locale.getDefault(), false);
+     set(year, month, day, hour, minute, second);
+   }
+ 
+   /**
+    * Sets the date of the switch from Julian dates to Gregorian dates.
+    * You can use <code>new Date(Long.MAX_VALUE)</code> to use a pure
+    * Julian calendar, or <code>Long.MIN_VALUE</code> for a pure Gregorian
+    * calendar.
+    *
+    * @param date the date of the change.
+    */
+   public void setGregorianChange(Date date)
+   {
+     gregorianCutover = date.getTime();
+   }
+ 
+   /**
+    * Gets the date of the switch from Julian dates to Gregorian dates.
+    *
+    * @return the date of the change.
+    */
+   public final Date getGregorianChange()
+   {
+     return new Date(gregorianCutover);
+   }
+ 
+   /**
+    * <p>
+    * Determines if the given year is a leap year.  The result is
+    * undefined if the Gregorian change took place in 1800, so that
+    * the end of February is skipped, and that year is specified.
+    * (well...).
+    * </p>
+    * <p>
+    * To specify a year in the BC era, use a negative value calculated
+    * as 1 - y, where y is the required year in BC.  So, 1 BC is 0,
+    * 2 BC is -1, 3 BC is -2, etc.
+    * </p>
+    *
+    * @param year a year (use a negative value for BC).
+    * @return true, if the given year is a leap year, false otherwise.
+    */
+   public boolean isLeapYear(int year)
+   {
+     // Only years divisible by 4 can be leap years
+     if ((year & 3) != 0)
+       return false;
+ 
+     // Is the leap-day a Julian date? Then it's a leap year
+     if (! isGregorian(year, 31 + 29 - 1))
+       return true;
+ 
+     // Apply gregorian rules otherwise
+     return ((year % 100) != 0 || (year % 400) == 0);
+   }
+ 
+   /**
+    * Retrieves the day of the week corresponding to the specified
+    * day of the specified year.
+    *
+    * @param year the year in which the dayOfYear occurs.
+    * @param dayOfYear the day of the year (an integer between 0 and
+    *        and 366)
+    */
+   private int getWeekDay(int year, int dayOfYear)
+   {
+     boolean greg = isGregorian(year, dayOfYear);
+     int day = (int) getLinearDay(year, dayOfYear, greg);
+ 
+     // The epoch was a thursday.
+     int weekday = (day + THURSDAY) % 7;
+     if (weekday <= 0)
+       weekday += 7;
+     return weekday;
+   }
+ 
+   /**
+    * Returns the day of the week for the first day of a given month (0..11)
+    */
+   private int getFirstDayOfMonth(int year, int month)
+   {
+     int[] dayCount = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
+ 
+     if (month > 11)
+       {
+ 	year += (month / 12);
+ 	month = month % 12;
+       }
+ 
+     if (month < 0)
+       {
+ 	year += (int) month / 12;
+ 	month = month % 12;
+ 	if (month < 0)
+ 	  {
+ 	    month += 12;
+ 	    year--;
+ 	  }
+       }
+ 
+     int dayOfYear = dayCount[month] + 1;
+     if (month > 1)
+       if (isLeapYear(year))
+ 	dayOfYear++;
+ 
+     boolean greg = isGregorian(year, dayOfYear);
+     int day = (int) getLinearDay(year, dayOfYear, greg);
+ 
+     // The epoch was a thursday.
+     int weekday = (day + THURSDAY) % 7;
+     if (weekday <= 0)
+       weekday += 7;
+     return weekday;
+   }
+ 
+   /**
+    * Takes a year, and a (zero based) day of year and determines
+    * if it is gregorian or not.
+    */
+   private boolean isGregorian(int year, int dayOfYear)
+   {
+     int relativeDay = (year - 1) * 365 + ((year - 1) >> 2) + dayOfYear
+                       - EPOCH_DAYS; // gregorian days from 1 to epoch.
+     int gregFactor = (int) Math.floor((double) (year - 1) / 400.)
+                      - (int) Math.floor((double) (year - 1) / 100.);
+ 
+     return ((relativeDay + gregFactor) * 60L * 60L * 24L * 1000L >= gregorianCutover);
+   }
+ 
+   /**
+    * Check set fields for validity, without leniency.
+    *
+    * @throws IllegalArgumentException if a field is invalid
+    */
+   private void nonLeniencyCheck() throws IllegalArgumentException
+   {
+     int[] month_days = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+     int year = fields[YEAR];
+     int month = fields[MONTH];
+     int leap = isLeapYear(year) ? 1 : 0;
+ 
+     if (isSet[ERA] && fields[ERA] != AD && fields[ERA] != BC)
+       throw new IllegalArgumentException("Illegal ERA.");
+     if (isSet[YEAR] && fields[YEAR] < 1)
+       throw new IllegalArgumentException("Illegal YEAR.");
+     if (isSet[MONTH] && (month < 0 || month > 11))
+       throw new IllegalArgumentException("Illegal MONTH.");
+     if (isSet[WEEK_OF_YEAR])
+       {
+ 	int daysInYear = 365 + leap;
+ 	daysInYear += (getFirstDayOfMonth(year, 0) - 1); // pad first week
+ 	int last = getFirstDayOfMonth(year, 11) + 4;
+ 	if (last > 7)
+ 	  last -= 7;
+ 	daysInYear += 7 - last;
+ 	int weeks = daysInYear / 7;
+ 	if (fields[WEEK_OF_YEAR] < 1 || fields[WEEK_OF_YEAR] > weeks)
+ 	  throw new IllegalArgumentException("Illegal WEEK_OF_YEAR.");
+       }
+ 
+     if (isSet[WEEK_OF_MONTH])
+       {
+ 	int weeks = (month == 1 && leap == 0) ? 4 : 5;
+ 	if (fields[WEEK_OF_MONTH] < 1 || fields[WEEK_OF_MONTH] > weeks)
+ 	  throw new IllegalArgumentException("Illegal WEEK_OF_MONTH.");
+       }
+ 
+     if (isSet[DAY_OF_MONTH])
+       if (fields[DAY_OF_MONTH] < 1
+           || fields[DAY_OF_MONTH] > month_days[month]
+           + ((month == 1) ? leap : 0))
+ 	throw new IllegalArgumentException("Illegal DAY_OF_MONTH.");
+ 
+     if (isSet[DAY_OF_YEAR]
+         && (fields[DAY_OF_YEAR] < 1 || fields[DAY_OF_YEAR] > 365 + leap))
+       throw new IllegalArgumentException("Illegal DAY_OF_YEAR.");
+ 
+     if (isSet[DAY_OF_WEEK]
+         && (fields[DAY_OF_WEEK] < 1 || fields[DAY_OF_WEEK] > 7))
+       throw new IllegalArgumentException("Illegal DAY_OF_WEEK.");
+ 
+     if (isSet[DAY_OF_WEEK_IN_MONTH])
+       {
+ 	int weeks = (month == 1 && leap == 0) ? 4 : 5;
+ 	if (fields[DAY_OF_WEEK_IN_MONTH] < -weeks
+ 	    || fields[DAY_OF_WEEK_IN_MONTH] > weeks)
+ 	  throw new IllegalArgumentException("Illegal DAY_OF_WEEK_IN_MONTH.");
+       }
+ 
+     if (isSet[AM_PM] && fields[AM_PM] != AM && fields[AM_PM] != PM)
+       throw new IllegalArgumentException("Illegal AM_PM.");
+     if (isSet[HOUR] && (fields[HOUR] < 0 || fields[HOUR] > 11))
+       throw new IllegalArgumentException("Illegal HOUR.");
+     if (isSet[HOUR_OF_DAY]
+         && (fields[HOUR_OF_DAY] < 0 || fields[HOUR_OF_DAY] > 23))
+       throw new IllegalArgumentException("Illegal HOUR_OF_DAY.");
+     if (isSet[MINUTE] && (fields[MINUTE] < 0 || fields[MINUTE] > 59))
+       throw new IllegalArgumentException("Illegal MINUTE.");
+     if (isSet[SECOND] && (fields[SECOND] < 0 || fields[SECOND] > 59))
+       throw new IllegalArgumentException("Illegal SECOND.");
+     if (isSet[MILLISECOND]
+         && (fields[MILLISECOND] < 0 || fields[MILLISECOND] > 999))
+       throw new IllegalArgumentException("Illegal MILLISECOND.");
+     if (isSet[ZONE_OFFSET]
+         && (fields[ZONE_OFFSET] < -12 * 60 * 60 * 1000L
+         || fields[ZONE_OFFSET] > 12 * 60 * 60 * 1000L))
+       throw new IllegalArgumentException("Illegal ZONE_OFFSET.");
+     if (isSet[DST_OFFSET]
+         && (fields[DST_OFFSET] < -12 * 60 * 60 * 1000L
+         || fields[DST_OFFSET] > 12 * 60 * 60 * 1000L))
+       throw new IllegalArgumentException("Illegal DST_OFFSET.");
+   }
+ 
+   /**
+    * Converts the time field values (<code>fields</code>) to
+    * milliseconds since the epoch UTC (<code>time</code>).
+    *
+    * @throws IllegalArgumentException if any calendar fields
+    *         are invalid.
+    */
+   protected synchronized void computeTime()
+   {
+     int millisInDay = 0;
+     int era = fields[ERA];
+     int year = fields[YEAR];
+     int month = fields[MONTH];
+     int day = fields[DAY_OF_MONTH];
+ 
+     int minute = fields[MINUTE];
+     int second = fields[SECOND];
+     int millis = fields[MILLISECOND];
+     int[] month_days = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+     int[] dayCount = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
+     int hour = 0;
+ 
+     if (! isLenient())
+       nonLeniencyCheck();
+ 
+     if (! isSet[MONTH] && (! isSet[DAY_OF_WEEK] || isSet[WEEK_OF_YEAR]))
+       {
+ 	// 5: YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
+ 	if (isSet[WEEK_OF_YEAR])
+ 	  {
+ 	    int first = getFirstDayOfMonth(year, 0);
+ 	    int offs = 1;
+ 	    int daysInFirstWeek = getFirstDayOfWeek() - first;
+ 	    if (daysInFirstWeek <= 0)
+ 	      daysInFirstWeek += 7;
+ 
+ 	    if (daysInFirstWeek < getMinimalDaysInFirstWeek())
+ 	      offs += daysInFirstWeek;
+ 	    else
+ 	      offs -= 7 - daysInFirstWeek;
+ 	    month = 0;
+ 	    day = offs + 7 * (fields[WEEK_OF_YEAR] - 1);
+ 	    offs = fields[DAY_OF_WEEK] - getFirstDayOfWeek();
+ 
+ 	    if (offs < 0)
+ 	      offs += 7;
+ 	    day += offs;
+ 	  }
+ 	else
+ 	  {
+ 	    // 4:  YEAR + DAY_OF_YEAR
+ 	    month = 0;
+ 	    day = fields[DAY_OF_YEAR];
+ 	  }
+       }
+     else
+       {
+ 	if (isSet[DAY_OF_WEEK])
+ 	  {
+ 	    int first = getFirstDayOfMonth(year, month);
+ 
+ 	    // 3: YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
+ 	    if (isSet[DAY_OF_WEEK_IN_MONTH])
+ 	      {
+ 		if (fields[DAY_OF_WEEK_IN_MONTH] < 0)
+ 		  {
+ 		    month++;
+ 		    first = getFirstDayOfMonth(year, month);
+ 		    day = 1 + 7 * (fields[DAY_OF_WEEK_IN_MONTH]);
+ 		  }
+ 		else
+ 		  day = 1 + 7 * (fields[DAY_OF_WEEK_IN_MONTH] - 1);
+ 
+ 		int offs = fields[DAY_OF_WEEK] - first;
+ 		if (offs < 0)
+ 		  offs += 7;
+ 		day += offs;
+ 	      }
+ 	    else
+ 	      { // 2: YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
+ 		int offs = 1;
+ 		int daysInFirstWeek = getFirstDayOfWeek() - first;
+ 		if (daysInFirstWeek <= 0)
+ 		  daysInFirstWeek += 7;
+ 
+ 		if (daysInFirstWeek < getMinimalDaysInFirstWeek())
+ 		  offs += daysInFirstWeek;
+ 		else
+ 		  offs -= 7 - daysInFirstWeek;
+ 
+ 		day = offs + 7 * (fields[WEEK_OF_MONTH] - 1);
+ 		offs = fields[DAY_OF_WEEK] - getFirstDayOfWeek();
+ 		if (offs <= 0)
+ 		  offs += 7;
+ 		day += offs;
+ 	      }
+ 	  }
+ 
+ 	// 1:  YEAR + MONTH + DAY_OF_MONTH
+       }
+     if (era == BC && year > 0)
+       year = 1 - year;
+ 
+     // rest of code assumes day/month/year set
+     // should negative BC years be AD?
+     // get the hour (but no check for validity)
+     if (isSet[HOUR])
+       {
+ 	hour = fields[HOUR];
+ 	if (fields[AM_PM] == PM)
+ 	  hour += 12;
+       }
+     else
+       hour = fields[HOUR_OF_DAY];
+ 
+     // Read the era,year,month,day fields and convert as appropriate.
+     // Calculate number of milliseconds into the day
+     // This takes care of both h, m, s, ms over/underflows.
+     long allMillis = (((hour * 60L) + minute) * 60L + second) * 1000L + millis;
+     day += allMillis / (24 * 60 * 60 * 1000L);
+     millisInDay = (int) (allMillis % (24 * 60 * 60 * 1000L));
+ 
+     if (month < 0)
+       {
+ 	year += (int) month / 12;
+ 	month = month % 12;
+ 	if (month < 0)
+ 	  {
+ 	    month += 12;
+ 	    year--;
+ 	  }
+       }
+     if (month > 11)
+       {
+ 	year += (month / 12);
+ 	month = month % 12;
+       }
+ 
+     month_days[1] = isLeapYear(year) ? 29 : 28;
+ 
+     while (day <= 0)
+       {
+ 	if (month == 0)
+ 	  {
+ 	    year--;
+ 	    month_days[1] = isLeapYear(year) ? 29 : 28;
+ 	  }
+ 	month = (month + 11) % 12;
+ 	day += month_days[month];
+       }
+     while (day > month_days[month])
+       {
+ 	day -= (month_days[month]);
+ 	month = (month + 1) % 12;
+ 	if (month == 0)
+ 	  {
+ 	    year++;
+ 	    month_days[1] = isLeapYear(year) ? 29 : 28;
+ 	  }
+       }
+ 
+     // ok, by here we have valid day,month,year,era and millisinday
+     int dayOfYear = dayCount[month] + day - 1; // (day starts on 1)
+     if (isLeapYear(year) && month > 1)
+       dayOfYear++;
+ 
+     int relativeDay = (year - 1) * 365 + ((year - 1) >> 2) + dayOfYear
+                       - EPOCH_DAYS; // gregorian days from 1 to epoch.
+     int gregFactor = (int) Math.floor((double) (year - 1) / 400.)
+                      - (int) Math.floor((double) (year - 1) / 100.);
+ 
+     if ((relativeDay + gregFactor) * 60L * 60L * 24L * 1000L >= gregorianCutover)
+       relativeDay += gregFactor;
+     else
+       relativeDay -= 2;
+ 
+     time = relativeDay * (24 * 60 * 60 * 1000L) + millisInDay;
+ 
+     // the epoch was a Thursday.
+     int weekday = (int) (relativeDay + THURSDAY) % 7;
+     if (weekday <= 0)
+       weekday += 7;
+     fields[DAY_OF_WEEK] = weekday;
+ 
+     // Time zone corrections.
+     TimeZone zone = getTimeZone();
+     int rawOffset = isSet[ZONE_OFFSET] ? fields[ZONE_OFFSET]
+                                        : zone.getRawOffset();
+ 
+     int dstOffset = isSet[DST_OFFSET] ? fields[DST_OFFSET]
+                                       : (zone.getOffset((year < 0) ? BC : AD,
+                                                         (year < 0) ? 1 - year
+                                                                    : year,
+                                                         month, day, weekday,
+                                                         millisInDay)
+                                       - zone.getRawOffset());
+ 
+     time -= rawOffset + dstOffset;
+ 
+     isTimeSet = true;
+   }
+ 
+   /**
+    * Get the linear day in days since the epoch, using the
+    * Julian or Gregorian calendar as specified.  If you specify a
+    * nonpositive year it is interpreted as BC as following: 0 is 1
+    * BC, -1 is 2 BC and so on.
+    *
+    * @param year the year of the date.
+    * @param dayOfYear the day of year of the date; 1 based.
+    * @param gregorian <code>true</code>, if we should use the Gregorian rules.
+    * @return the days since the epoch, may be negative.
+    */
+   private long getLinearDay(int year, int dayOfYear, boolean gregorian)
+   {
+     // The 13 is the number of days, that were omitted in the Gregorian
+     // Calender until the epoch.
+     // We shift right by 2 instead of dividing by 4, to get correct
+     // results for negative years (and this is even more efficient).
+     long julianDay = (year - 1) * 365L + ((year - 1) >> 2) + (dayOfYear - 1)
+                      - EPOCH_DAYS; // gregorian days from 1 to epoch.
+ 
+     if (gregorian)
+       {
+ 	// subtract the days that are missing in gregorian calendar
+ 	// with respect to julian calendar.
+ 	//
+ 	// Okay, here we rely on the fact that the gregorian
+ 	// calendar was introduced in the AD era.  This doesn't work
+ 	// with negative years.
+ 	//
+ 	// The additional leap year factor accounts for the fact that
+ 	// a leap day is not seen on Jan 1 of the leap year.
+ 	int gregOffset = (int) Math.floor((double) (year - 1) / 400.)
+ 	                 - (int) Math.floor((double) (year - 1) / 100.);
+ 
+ 	return julianDay + gregOffset;
+       }
+     else
+       julianDay -= 2;
+     return julianDay;
+   }
+ 
+   /**
+    * Converts the given linear day into era, year, month,
+    * day_of_year, day_of_month, day_of_week, and writes the result
+    * into the fields array.
+    *
+    * @param day the linear day.
+    * @param gregorian true, if we should use Gregorian rules.
+    */
+   private void calculateDay(int[] fields, long day, boolean gregorian)
+   {
+     // the epoch was a Thursday.
+     int weekday = (int) (day + THURSDAY) % 7;
+     if (weekday <= 0)
+       weekday += 7;
+     fields[DAY_OF_WEEK] = weekday;
+ 
+     // get a first approximation of the year.  This may be one 
+     // year too big.
+     int year = 1970
+                + (int) (gregorian
+                         ? ((day - 100L) * 400L) / (365L * 400L + 100L - 4L
+                         + 1L) : ((day - 100L) * 4L) / (365L * 4L + 1L));
+     if (day >= 0)
+       year++;
+ 
+     long firstDayOfYear = getLinearDay(year, 1, gregorian);
+ 
+     // Now look in which year day really lies.
+     if (day < firstDayOfYear)
+       {
+ 	year--;
+ 	firstDayOfYear = getLinearDay(year, 1, gregorian);
+       }
+ 
+     day -= firstDayOfYear - 1; // day of year,  one based.
+ 
+     fields[DAY_OF_YEAR] = (int) day;
+     if (year <= 0)
+       {
+ 	fields[ERA] = BC;
+ 	fields[YEAR] = 1 - year;
+       }
+     else
+       {
+ 	fields[ERA] = AD;
+ 	fields[YEAR] = year;
+       }
+ 
+     int leapday = isLeapYear(year) ? 1 : 0;
+     if (day <= 31 + 28 + leapday)
+       {
+ 	fields[MONTH] = (int) day / 32; // 31->JANUARY, 32->FEBRUARY
+ 	fields[DAY_OF_MONTH] = (int) day - 31 * fields[MONTH];
+       }
+     else
+       {
+ 	// A few more magic formulas
+ 	int scaledDay = ((int) day - leapday) * 5 + 8;
+ 	fields[MONTH] = scaledDay / (31 + 30 + 31 + 30 + 31);
+ 	fields[DAY_OF_MONTH] = (scaledDay % (31 + 30 + 31 + 30 + 31)) / 5 + 1;
+       }
+   }
+ 
+   /**
+    * Converts the milliseconds since the epoch UTC
+    * (<code>time</code>) to time fields
+    * (<code>fields</code>).
+    */
+   protected synchronized void computeFields()
+   {
+     boolean gregorian = (time >= gregorianCutover);
+ 
+     TimeZone zone = getTimeZone();
+     fields[ZONE_OFFSET] = zone.getRawOffset();
+     long localTime = time + fields[ZONE_OFFSET];
+ 
+     long day = localTime / (24 * 60 * 60 * 1000L);
+     int millisInDay = (int) (localTime % (24 * 60 * 60 * 1000L));
+ 
+     if (millisInDay < 0)
+       {
+ 	millisInDay += (24 * 60 * 60 * 1000);
+ 	day--;
+       }
+ 
+     calculateDay(fields, day, gregorian);
+     fields[DST_OFFSET] = zone.getOffset(fields[ERA], fields[YEAR],
+                                         fields[MONTH], fields[DAY_OF_MONTH],
+                                         fields[DAY_OF_WEEK], millisInDay)
+                          - fields[ZONE_OFFSET];
+ 
+     millisInDay += fields[DST_OFFSET];
+     if (millisInDay >= 24 * 60 * 60 * 1000)
+       {
+ 	millisInDay -= 24 * 60 * 60 * 1000;
+ 	calculateDay(fields, ++day, gregorian);
+       }
+ 
+     fields[DAY_OF_WEEK_IN_MONTH] = (fields[DAY_OF_MONTH] + 6) / 7;
+ 
+     // which day of the week are we (0..6), relative to getFirstDayOfWeek
+     int relativeWeekday = (7 + fields[DAY_OF_WEEK] - getFirstDayOfWeek()) % 7;
+ 
+     fields[WEEK_OF_MONTH] = (fields[DAY_OF_MONTH] - relativeWeekday + 12) / 7;
+ 
+     int weekOfYear = (fields[DAY_OF_YEAR] - relativeWeekday + 6) / 7;
+ 
+     // Do the Correction: getMinimalDaysInFirstWeek() is always in the 
+     // first week.
+     int minDays = getMinimalDaysInFirstWeek();
+     int firstWeekday = (7 + getWeekDay(fields[YEAR], minDays)
+                        - getFirstDayOfWeek()) % 7;
+     if (minDays - firstWeekday < 1)
+       weekOfYear++;
+     fields[WEEK_OF_YEAR] = weekOfYear;
+ 
+     int hourOfDay = millisInDay / (60 * 60 * 1000);
+     fields[AM_PM] = (hourOfDay < 12) ? AM : PM;
+     int hour = hourOfDay % 12;
+     fields[HOUR] = hour;
+     fields[HOUR_OF_DAY] = hourOfDay;
+     millisInDay %= (60 * 60 * 1000);
+     fields[MINUTE] = millisInDay / (60 * 1000);
+     millisInDay %= (60 * 1000);
+     fields[SECOND] = millisInDay / (1000);
+     fields[MILLISECOND] = millisInDay % 1000;
+ 
+     areFieldsSet = isSet[ERA] = isSet[YEAR] = isSet[MONTH] = isSet[WEEK_OF_YEAR] = isSet[WEEK_OF_MONTH] = isSet[DAY_OF_MONTH] = isSet[DAY_OF_YEAR] = isSet[DAY_OF_WEEK] = isSet[DAY_OF_WEEK_IN_MONTH] = isSet[AM_PM] = isSet[HOUR] = isSet[HOUR_OF_DAY] = isSet[MINUTE] = isSet[SECOND] = isSet[MILLISECOND] = isSet[ZONE_OFFSET] = isSet[DST_OFFSET] = true;
+   }
+   
+   /**
+    * Return a hash code for this object, following the general contract
+    * specified by {@link Object#hashCode()}.
+    * @return the hash code
+    */
+   public int hashCode()
+   {
+     int val = (int) ((gregorianCutover >>> 32) ^ (gregorianCutover & 0xffffffff));
+     return super.hashCode() ^ val;
+   }
+ 
+   /**
+    * Compares the given calendar with this.  An object, o, is
+    * equivalent to this if it is also a <code>GregorianCalendar</code>
+    * with the same time since the epoch under the same conditions
+    * (same change date and same time zone).
+    *
+    * @param o the object to that we should compare.
+    * @return true, if the given object is a calendar, that represents
+    * the same time (but doesn't necessarily have the same fields).
+    * @throws IllegalArgumentException if one of the fields
+    *         <code>ZONE_OFFSET</code> or <code>DST_OFFSET</code> is
+    *         specified, if an unknown field is specified or if one
+    *         of the calendar fields receives an illegal value when
+    *         leniancy is not enabled.
+    */
+   public boolean equals(Object o)
+   {
+     if (! (o instanceof GregorianCalendar))
+       return false;
+ 
+     GregorianCalendar cal = (GregorianCalendar) o;
+     return (cal.gregorianCutover == gregorianCutover
+             && super.equals(o));
+   }
+ 
+   /**
+    * Adds the specified amount of time to the given time field.  The
+    * amount may be negative to subtract the time.  If the field overflows
+    * it does what you expect: Jan, 25 + 10 Days is Feb, 4.
+    * @param field one of the time field constants.
+    * @param amount the amount of time to add.
+    * @exception IllegalArgumentException if <code>field</code> is
+    *   <code>ZONE_OFFSET</code>, <code>DST_OFFSET</code>, or invalid; or
+    *   if <code>amount</code> contains an out-of-range value and the calendar
+    *   is not in lenient mode.
+    */
+   public void add(int field, int amount)
+   {
+     switch (field)
+       {
+       case YEAR:
+ 	complete();
+ 	fields[YEAR] += amount;
+ 	isTimeSet = false;
+ 	break;
+       case MONTH:
+ 	complete();
+ 	int months = fields[MONTH] + amount;
+ 	fields[YEAR] += months / 12;
+ 	fields[MONTH] = months % 12;
+ 	if (fields[MONTH] < 0)
+ 	  {
+ 	    fields[MONTH] += 12;
+ 	    fields[YEAR]--;
+ 	  }
+ 	int maxDay = getActualMaximum(DAY_OF_MONTH);
+ 	if (fields[DAY_OF_MONTH] > maxDay)
+ 	  fields[DAY_OF_MONTH] = maxDay;
+ 	set(YEAR, fields[YEAR]);
+ 	set(MONTH, fields[MONTH]);
+ 	break;
+       case DAY_OF_MONTH:
+       case DAY_OF_YEAR:
+       case DAY_OF_WEEK:
+ 	if (! isTimeSet)
+ 	  computeTime();
+ 	time += amount * (24 * 60 * 60 * 1000L);
+ 	areFieldsSet = false;
+ 	break;
+       case WEEK_OF_YEAR:
+       case WEEK_OF_MONTH:
+       case DAY_OF_WEEK_IN_MONTH:
+ 	if (! isTimeSet)
+ 	  computeTime();
+ 	time += amount * (7 * 24 * 60 * 60 * 1000L);
+ 	areFieldsSet = false;
+ 	break;
+       case AM_PM:
+ 	if (! isTimeSet)
+ 	  computeTime();
+ 	time += amount * (12 * 60 * 60 * 1000L);
+ 	areFieldsSet = false;
+ 	break;
+       case HOUR:
+       case HOUR_OF_DAY:
+ 	if (! isTimeSet)
+ 	  computeTime();
+ 	time += amount * (60 * 60 * 1000L);
+ 	areFieldsSet = false;
+ 	break;
+       case MINUTE:
+ 	if (! isTimeSet)
+ 	  computeTime();
+ 	time += amount * (60 * 1000L);
+ 	areFieldsSet = false;
+ 	break;
+       case SECOND:
+ 	if (! isTimeSet)
+ 	  computeTime();
+ 	time += amount * (1000L);
+ 	areFieldsSet = false;
+ 	break;
+       case MILLISECOND:
+ 	if (! isTimeSet)
+ 	  computeTime();
+ 	time += amount;
+ 	areFieldsSet = false;
+ 	break;
+       case ZONE_OFFSET:
+       case DST_OFFSET:default:
+ 	throw new IllegalArgumentException("Invalid or unknown field");
+       }
+   }
+ 
+   /**
+    * Rolls the specified time field up or down.  This means add one
+    * to the specified field, but don't change the other fields.  If
+    * the maximum for this field is reached, start over with the
+    * minimum value.
+    *
+    * <strong>Note:</strong> There may be situation, where the other
+    * fields must be changed, e.g rolling the month on May, 31.
+    * The date June, 31 is automatically converted to July, 1.
+    * This requires lenient settings.
+    *
+    * @param field the time field. One of the time field constants.
+    * @param up the direction, true for up, false for down.
+    * @throws IllegalArgumentException if one of the fields
+    *         <code>ZONE_OFFSET</code> or <code>DST_OFFSET</code> is
+    *         specified, if an unknown field is specified or if one
+    *         of the calendar fields receives an illegal value when
+    *         leniancy is not enabled.
+    */
+   public void roll(int field, boolean up)
+   {
+     roll(field, up ? 1 : -1);
+   }
+ 
+   /**
+    * Checks that the fields are still within their legal bounds,
+    * following use of the <code>roll()</code> method.
+    *
+    * @param field the field to check.
+    * @param delta multipler for alterations to the <code>time</code>.
+    * @see #roll(int, boolean)
+    * @see #roll(int, int)
+    */
+   private void cleanUpAfterRoll(int field, int delta)
+   {
+     switch (field)
+       {
+       case ERA:
+       case YEAR:
+       case MONTH:
+ 	// check that day of month is still in correct range
+ 	if (fields[DAY_OF_MONTH] > getActualMaximum(DAY_OF_MONTH))
+ 	  fields[DAY_OF_MONTH] = getActualMaximum(DAY_OF_MONTH);
+ 	isTimeSet = false;
+ 	isSet[WEEK_OF_MONTH] = false;
+ 	isSet[DAY_OF_WEEK] = false;
+ 	isSet[DAY_OF_WEEK_IN_MONTH] = false;
+ 	isSet[DAY_OF_YEAR] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	break;
+       case DAY_OF_MONTH:
+ 	isSet[WEEK_OF_MONTH] = false;
+ 	isSet[DAY_OF_WEEK] = false;
+ 	isSet[DAY_OF_WEEK_IN_MONTH] = false;
+ 	isSet[DAY_OF_YEAR] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	time += delta * (24 * 60 * 60 * 1000L);
+ 	break;
+       case WEEK_OF_MONTH:
+ 	isSet[DAY_OF_MONTH] = false;
+ 	isSet[DAY_OF_WEEK_IN_MONTH] = false;
+ 	isSet[DAY_OF_YEAR] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	time += delta * (7 * 24 * 60 * 60 * 1000L);
+ 	break;
+       case DAY_OF_WEEK_IN_MONTH:
+ 	isSet[DAY_OF_MONTH] = false;
+ 	isSet[WEEK_OF_MONTH] = false;
+ 	isSet[DAY_OF_YEAR] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	time += delta * (7 * 24 * 60 * 60 * 1000L);
+ 	break;
+       case DAY_OF_YEAR:
+ 	isSet[MONTH] = false;
+ 	isSet[DAY_OF_MONTH] = false;
+ 	isSet[WEEK_OF_MONTH] = false;
+ 	isSet[DAY_OF_WEEK_IN_MONTH] = false;
+ 	isSet[DAY_OF_WEEK] = false;
+ 	isSet[WEEK_OF_YEAR] = false;
+ 	time += delta * (24 * 60 * 60 * 1000L);
+ 	break;
+       case WEEK_OF_YEAR:
+ 	isSet[MONTH] = false;
+ 	isSet[DAY_OF_MONTH] = false;
+ 	isSet[WEEK_OF_MONTH] = false;
+ 	isSet[DAY_OF_WEEK_IN_MONTH] = false;
+ 	isSet[DAY_OF_YEAR] = false;
+ 	time += delta * (7 * 24 * 60 * 60 * 1000L);
+ 	break;
+       case AM_PM:
+ 	isSet[HOUR_OF_DAY] = false;
+ 	time += delta * (12 * 60 * 60 * 1000L);
+ 	break;
+       case HOUR:
+ 	isSet[HOUR_OF_DAY] = false;
+ 	time += delta * (60 * 60 * 1000L);
+ 	break;
+       case HOUR_OF_DAY:
+ 	isSet[HOUR] = false;
+ 	isSet[AM_PM] = false;
+ 	time += delta * (60 * 60 * 1000L);
+ 	break;
+       case MINUTE:
+ 	time += delta * (60 * 1000L);
+ 	break;
+       case SECOND:
+ 	time += delta * (1000L);
+ 	break;
+       case MILLISECOND:
+ 	time += delta;
+ 	break;
+       }
+   }
+ 
+   /**
+    * Rolls the specified time field by the given amount.  This means
+    * add amount to the specified field, but don't change the other
+    * fields.  If the maximum for this field is reached, start over
+    * with the minimum value and vice versa for negative amounts.
+    *
+    * <strong>Note:</strong> There may be situation, where the other
+    * fields must be changed, e.g rolling the month on May, 31.
+    * The date June, 31 is automatically corrected to June, 30.
+    *
+    * @param field the time field. One of the time field constants.
+    * @param amount the amount by which we should roll.
+    * @throws IllegalArgumentException if one of the fields
+    *         <code>ZONE_OFFSET</code> or <code>DST_OFFSET</code> is
+    *         specified, if an unknown field is specified or if one
+    *         of the calendar fields receives an illegal value when
+    *         leniancy is not enabled.
+    */
+   public void roll(int field, int amount)
+   {
+     switch (field)
+       {
+       case DAY_OF_WEEK:
+ 	// day of week is special: it rolls automatically
+ 	add(field, amount);
+ 	return;
+       case ZONE_OFFSET:
+       case DST_OFFSET:
+ 	throw new IllegalArgumentException("Can't roll time zone");
+       }
+     complete();
+     int min = getActualMinimum(field);
+     int range = getActualMaximum(field) - min + 1;
+     int oldval = fields[field];
+     int newval = (oldval - min + range + amount) % range + min;
+     if (newval < min)
+       newval += range;
+     fields[field] = newval;
+     cleanUpAfterRoll(field, newval - oldval);
+   }
+ 
+   /**
+    * The minimum values for the calendar fields.
+    */
+   private static final int[] minimums = 
+                                         {
+                                           BC, 1, 0, 0, 1, 1, 1, SUNDAY, 1, AM,
+                                           1, 0, 0, 0, 0, -(12 * 60 * 60 * 1000),
+                                           0
+                                         };
+ 
+   /**
+    * The maximum values for the calendar fields.
+    */
+   private static final int[] maximums = 
+                                         {
+                                           AD, 5000000, 11, 53, 5, 31, 366,
+                                           SATURDAY, 5, PM, 12, 23, 59, 59, 999,
+                                           +(12 * 60 * 60 * 1000),
+                                           (12 * 60 * 60 * 1000)
+                                         };
+ 
+   /**
+    * Gets the smallest value that is allowed for the specified field.
+    *
+    * @param field one of the time field constants.
+    * @return the smallest value for the specified field.
+    */
+   public int getMinimum(int field)
+   {
+     return minimums[field];
+   }
+ 
+   /**
+    * Gets the biggest value that is allowed for the specified field.
+    *
+    * @param field one of the time field constants.
+    * @return the biggest value.
+    */
+   public int getMaximum(int field)
+   {
+     return maximums[field];
+   }
+ 
+   /**
+    * Gets the greatest minimum value that is allowed for the specified field.
+    * This is the largest value returned by the <code>getActualMinimum(int)</code>
+    * method.
+    *
+    * @param field the time field. One of the time field constants.
+    * @return the greatest minimum value.
+    * @see #getActualMinimum(int)
+    */
+   public int getGreatestMinimum(int field)
+   {
+     if (field == WEEK_OF_YEAR)
+       return 1;
+     return minimums[field];
+   }
+ 
+   /**
+    * Gets the smallest maximum value that is allowed for the
+    * specified field.  This is the smallest value returned
+    * by the <code>getActualMaximum(int)</code>.  For example,
+    * this is 28 for DAY_OF_MONTH (as all months have at least
+    * 28 days).
+    *
+    * @param field the time field. One of the time field constants.
+    * @return the least maximum value.
+    * @see #getActualMaximum(int)
+    * @since 1.2
+    */
+   public int getLeastMaximum(int field)
+   {
+     switch (field)
+       {
+       case WEEK_OF_YEAR:
+ 	return 52;
+       case DAY_OF_MONTH:
+ 	return 28;
+       case DAY_OF_YEAR:
+ 	return 365;
+       case DAY_OF_WEEK_IN_MONTH:
+       case WEEK_OF_MONTH:
+ 	return 4;
+       default:
+ 	return maximums[field];
+       }
+   }
+ 
+   /**
+    * Gets the actual minimum value that is allowed for the specified field.
+    * This value is dependent on the values of the other fields.  Note that
+    * this calls <code>complete()</code> if not enough fields are set.  This
+    * can have ugly side effects.  The value given depends on the current
+    * time used by this instance.
+    *
+    * @param field the time field. One of the time field constants.
+    * @return the actual minimum value.
+    * @since 1.2
+    */
+   public int getActualMinimum(int field)
+   {
+     if (field == WEEK_OF_YEAR)
+       {
+ 	int min = getMinimalDaysInFirstWeek();
+ 	if (min == 0)
+ 	  return 1;
+ 	if (! areFieldsSet || ! isSet[ERA] || ! isSet[YEAR])
+ 	  complete();
+ 
+ 	int year = fields[ERA] == AD ? fields[YEAR] : 1 - fields[YEAR];
+ 	int weekday = getWeekDay(year, min);
+ 	if ((7 + weekday - getFirstDayOfWeek()) % 7 >= min - 1)
+ 	  return 1;
+ 	return 0;
+       }
+     return minimums[field];
+   }
+ 
+   /**
+    * Gets the actual maximum value that is allowed for the specified field.
+    * This value is dependent on the values of the other fields.  Note that
+    * this calls <code>complete()</code> if not enough fields are set.  This
+    * can have ugly side effects.  The value given depends on the current time
+    * used by this instance; thus, leap years have a maximum day of month value of
+    * 29, rather than 28.
+    *
+    * @param field the time field. One of the time field constants.
+    * @return the actual maximum value.
+    */
+   public int getActualMaximum(int field)
+   {
+     switch (field)
+       {
+       case WEEK_OF_YEAR:
+         {
+ 	  if (! areFieldsSet || ! isSet[ERA] || ! isSet[YEAR])
+ 	    complete();
+ 
+ 	  // This is wrong for the year that contains the gregorian change.
+ 	  // I.e it gives the weeks in the julian year or in the gregorian
+ 	  // year in that case.
+ 	  int year = fields[ERA] == AD ? fields[YEAR] : 1 - fields[YEAR];
+ 	  int lastDay = isLeapYear(year) ? 366 : 365;
+ 	  int weekday = getWeekDay(year, lastDay);
+ 	  int week = (lastDay + 6 - (7 + weekday - getFirstDayOfWeek()) % 7) / 7;
+ 
+ 	  int minimalDays = getMinimalDaysInFirstWeek();
+ 	  int firstWeekday = getWeekDay(year, minimalDays);
+ 	  /*
+ 	   * Is there a set of days at the beginning of the year, before the
+ 	   * first day of the week, equal to or greater than the minimum number
+ 	   * of days required in the first week?
+ 	   */
+ 	  if (minimalDays - (7 + firstWeekday - getFirstDayOfWeek()) % 7 < 1)
+ 	    return week + 1; /* Add week 1: firstWeekday through to firstDayOfWeek */
+         }
+       case DAY_OF_MONTH:
+         {
+ 	  if (! areFieldsSet || ! isSet[MONTH])
+ 	    complete();
+ 	  int month = fields[MONTH];
+ 
+ 	  // If you change this, you should also change 
+ 	  // SimpleTimeZone.getDaysInMonth();
+ 	  if (month == FEBRUARY)
+ 	    {
+ 	      if (! isSet[YEAR] || ! isSet[ERA])
+ 		complete();
+ 	      int year = fields[ERA] == AD ? fields[YEAR] : 1 - fields[YEAR];
+ 	      return isLeapYear(year) ? 29 : 28;
+ 	    }
+ 	  else if (month < AUGUST)
+ 	    return 31 - (month & 1);
+ 	  else
+ 	    return 30 + (month & 1);
+         }
+       case DAY_OF_YEAR:
+         {
+ 	  if (! areFieldsSet || ! isSet[ERA] || ! isSet[YEAR])
+ 	    complete();
+ 	  int year = fields[ERA] == AD ? fields[YEAR] : 1 - fields[YEAR];
+ 	  return isLeapYear(year) ? 366 : 365;
+         }
+       case DAY_OF_WEEK_IN_MONTH:
+         {
+ 	  // This is wrong for the month that contains the gregorian change.
+ 	  int daysInMonth = getActualMaximum(DAY_OF_MONTH);
+ 
+ 	  // That's black magic, I know
+ 	  return (daysInMonth - (fields[DAY_OF_MONTH] - 1) % 7 + 6) / 7;
+         }
+       case WEEK_OF_MONTH:
+         {
+ 	  int daysInMonth = getActualMaximum(DAY_OF_MONTH);
+ 	  int weekday = (daysInMonth - fields[DAY_OF_MONTH]
+ 	                + fields[DAY_OF_WEEK] - SUNDAY) % 7 + SUNDAY;
+ 	  return (daysInMonth + 6 - (7 + weekday - getFirstDayOfWeek()) % 7) / 7;
+         }
+       default:
+ 	return maximums[field];
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/HashMap.java gcc-4.1.0/libjava/classpath/java/util/HashMap.java
*** gcc-4.0.2/libjava/classpath/java/util/HashMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/HashMap.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,906 ----
+ /* HashMap.java -- a class providing a basic hashtable data structure,
+    mapping Object --> Object
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ // NOTE: This implementation is very similar to that of Hashtable. If you fix
+ // a bug in here, chances are you should make a similar change to the Hashtable
+ // code.
+ 
+ // NOTE: This implementation has some nasty coding style in order to
+ // support LinkedHashMap, which extends this.
+ 
+ /**
+  * This class provides a hashtable-backed implementation of the
+  * Map interface.
+  * <p>
+  *
+  * It uses a hash-bucket approach; that is, hash collisions are handled
+  * by linking the new node off of the pre-existing node (or list of
+  * nodes).  In this manner, techniques such as linear probing (which
+  * can cause primary clustering) and rehashing (which does not fit very
+  * well with Java's method of precomputing hash codes) are avoided.
+  * <p>
+  *
+  * Under ideal circumstances (no collisions), HashMap offers O(1)
+  * performance on most operations (<code>containsValue()</code> is,
+  * of course, O(n)).  In the worst case (all keys map to the same
+  * hash code -- very unlikely), most operations are O(n).
+  * <p>
+  *
+  * HashMap is part of the JDK1.2 Collections API.  It differs from
+  * Hashtable in that it accepts the null key and null values, and it
+  * does not support "Enumeration views." Also, it is not synchronized;
+  * if you plan to use it in multiple threads, consider using:<br>
+  * <code>Map m = Collections.synchronizedMap(new HashMap(...));</code>
+  * <p>
+  *
+  * The iterators are <i>fail-fast</i>, meaning that any structural
+  * modification, except for <code>remove()</code> called on the iterator
+  * itself, cause the iterator to throw a
+  * <code>ConcurrentModificationException</code> rather than exhibit
+  * non-deterministic behavior.
+  *
+  * @author Jon Zeppieri
+  * @author Jochen Hoenicke
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Object#hashCode()
+  * @see Collection
+  * @see Map
+  * @see TreeMap
+  * @see LinkedHashMap
+  * @see IdentityHashMap
+  * @see Hashtable
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class HashMap extends AbstractMap
+   implements Map, Cloneable, Serializable
+ {
+   /**
+    * Default number of buckets. This is the value the JDK 1.3 uses. Some
+    * early documentation specified this value as 101. That is incorrect.
+    * Package visible for use by HashSet.
+    */
+   static final int DEFAULT_CAPACITY = 11;
+ 
+   /**
+    * The default load factor; this is explicitly specified by the spec.
+    * Package visible for use by HashSet.
+    */
+   static final float DEFAULT_LOAD_FACTOR = 0.75f;
+ 
+   /**
+    * Compatible with JDK 1.2.
+    */
+   private static final long serialVersionUID = 362498820763181265L;
+ 
+   /**
+    * The rounded product of the capacity and the load factor; when the number
+    * of elements exceeds the threshold, the HashMap calls
+    * <code>rehash()</code>.
+    * @serial the threshold for rehashing
+    */
+   private int threshold;
+ 
+   /**
+    * Load factor of this HashMap:  used in computing the threshold.
+    * Package visible for use by HashSet.
+    * @serial the load factor
+    */
+   final float loadFactor;
+ 
+   /**
+    * Array containing the actual key-value mappings.
+    * Package visible for use by nested and subclasses.
+    */
+   transient HashEntry[] buckets;
+ 
+   /**
+    * Counts the number of modifications this HashMap has undergone, used
+    * by Iterators to know when to throw ConcurrentModificationExceptions.
+    * Package visible for use by nested and subclasses.
+    */
+   transient int modCount;
+ 
+   /**
+    * The size of this HashMap:  denotes the number of key-value pairs.
+    * Package visible for use by nested and subclasses.
+    */
+   transient int size;
+ 
+   /**
+    * The cache for {@link #entrySet()}.
+    */
+   private transient Set entries;
+ 
+   /**
+    * Class to represent an entry in the hash table. Holds a single key-value
+    * pair. Package visible for use by subclass.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   static class HashEntry extends AbstractMap.BasicMapEntry
+   {
+     /**
+      * The next entry in the linked list. Package visible for use by subclass.
+      */
+     HashEntry next;
+ 
+     /**
+      * Simple constructor.
+      * @param key the key
+      * @param value the value
+      */
+     HashEntry(Object key, Object value)
+     {
+       super(key, value);
+     }
+ 
+     /**
+      * Called when this entry is accessed via {@link #put(Object, Object)}.
+      * This version does nothing, but in LinkedHashMap, it must do some
+      * bookkeeping for access-traversal mode.
+      */
+     void access()
+     {
+     }
+ 
+     /**
+      * Called when this entry is removed from the map. This version simply
+      * returns the value, but in LinkedHashMap, it must also do bookkeeping.
+      *
+      * @return the value of this key as it is removed
+      */
+     Object cleanup()
+     {
+       return value;
+     }
+   }
+ 
+   /**
+    * Construct a new HashMap with the default capacity (11) and the default
+    * load factor (0.75).
+    */
+   public HashMap()
+   {
+     this(DEFAULT_CAPACITY, DEFAULT_LOAD_FACTOR);
+   }
+ 
+   /**
+    * Construct a new HashMap from the given Map, with initial capacity
+    * the greater of the size of <code>m</code> or the default of 11.
+    * <p>
+    *
+    * Every element in Map m will be put into this new HashMap.
+    *
+    * @param m a Map whose key / value pairs will be put into the new HashMap.
+    *        <b>NOTE: key / value pairs are not cloned in this constructor.</b>
+    * @throws NullPointerException if m is null
+    */
+   public HashMap(Map m)
+   {
+     this(Math.max(m.size() * 2, DEFAULT_CAPACITY), DEFAULT_LOAD_FACTOR);
+     putAll(m);
+   }
+ 
+   /**
+    * Construct a new HashMap with a specific inital capacity and
+    * default load factor of 0.75.
+    *
+    * @param initialCapacity the initial capacity of this HashMap (&gt;=0)
+    * @throws IllegalArgumentException if (initialCapacity &lt; 0)
+    */
+   public HashMap(int initialCapacity)
+   {
+     this(initialCapacity, DEFAULT_LOAD_FACTOR);
+   }
+ 
+   /**
+    * Construct a new HashMap with a specific inital capacity and load factor.
+    *
+    * @param initialCapacity the initial capacity (&gt;=0)
+    * @param loadFactor the load factor (&gt; 0, not NaN)
+    * @throws IllegalArgumentException if (initialCapacity &lt; 0) ||
+    *                                     ! (loadFactor &gt; 0.0)
+    */
+   public HashMap(int initialCapacity, float loadFactor)
+   {
+     if (initialCapacity < 0)
+       throw new IllegalArgumentException("Illegal Capacity: "
+                                          + initialCapacity);
+     if (! (loadFactor > 0)) // check for NaN too
+       throw new IllegalArgumentException("Illegal Load: " + loadFactor);
+ 
+     if (initialCapacity == 0)
+       initialCapacity = 1;
+     buckets = new HashEntry[initialCapacity];
+     this.loadFactor = loadFactor;
+     threshold = (int) (initialCapacity * loadFactor);
+   }
+ 
+   /**
+    * Returns the number of kay-value mappings currently in this Map.
+    *
+    * @return the size
+    */
+   public int size()
+   {
+     return size;
+   }
+ 
+   /**
+    * Returns true if there are no key-value mappings currently in this Map.
+    *
+    * @return <code>size() == 0</code>
+    */
+   public boolean isEmpty()
+   {
+     return size == 0;
+   }
+ 
+   /**
+    * Return the value in this HashMap associated with the supplied key,
+    * or <code>null</code> if the key maps to nothing.  NOTE: Since the value
+    * could also be null, you must use containsKey to see if this key
+    * actually maps to something.
+    *
+    * @param key the key for which to fetch an associated value
+    * @return what the key maps to, if present
+    * @see #put(Object, Object)
+    * @see #containsKey(Object)
+    */
+   public Object get(Object key)
+   {
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+     while (e != null)
+       {
+         if (equals(key, e.key))
+           return e.value;
+         e = e.next;
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns true if the supplied object <code>equals()</code> a key
+    * in this HashMap.
+    *
+    * @param key the key to search for in this HashMap
+    * @return true if the key is in the table
+    * @see #containsValue(Object)
+    */
+   public boolean containsKey(Object key)
+   {
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+     while (e != null)
+       {
+         if (equals(key, e.key))
+           return true;
+         e = e.next;
+       }
+     return false;
+   }
+ 
+   /**
+    * Puts the supplied value into the Map, mapped by the supplied key.
+    * The value may be retrieved by any object which <code>equals()</code>
+    * this key. NOTE: Since the prior value could also be null, you must
+    * first use containsKey if you want to see if you are replacing the
+    * key's mapping.
+    *
+    * @param key the key used to locate the value
+    * @param value the value to be stored in the HashMap
+    * @return the prior mapping of the key, or null if there was none
+    * @see #get(Object)
+    * @see Object#equals(Object)
+    */
+   public Object put(Object key, Object value)
+   {
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+ 
+     while (e != null)
+       {
+         if (equals(key, e.key))
+           {
+             e.access(); // Must call this for bookkeeping in LinkedHashMap.
+             Object r = e.value;
+             e.value = value;
+             return r;
+           }
+         else
+           e = e.next;
+       }
+ 
+     // At this point, we know we need to add a new entry.
+     modCount++;
+     if (++size > threshold)
+       {
+         rehash();
+         // Need a new hash value to suit the bigger table.
+         idx = hash(key);
+       }
+ 
+     // LinkedHashMap cannot override put(), hence this call.
+     addEntry(key, value, idx, true);
+     return null;
+   }
+ 
+   /**
+    * Copies all elements of the given map into this hashtable.  If this table
+    * already has a mapping for a key, the new mapping replaces the current
+    * one.
+    *
+    * @param m the map to be hashed into this
+    */
+   public void putAll(Map m)
+   {
+     Iterator itr = m.entrySet().iterator();
+     while (itr.hasNext())
+       {
+         Map.Entry e = (Map.Entry) itr.next();
+         // Optimize in case the Entry is one of our own.
+         if (e instanceof AbstractMap.BasicMapEntry)
+           {
+             AbstractMap.BasicMapEntry entry = (AbstractMap.BasicMapEntry) e;
+             put(entry.key, entry.value);
+           }
+         else
+           put(e.getKey(), e.getValue());
+       }
+   }
+   
+   /**
+    * Removes from the HashMap and returns the value which is mapped by the
+    * supplied key. If the key maps to nothing, then the HashMap remains
+    * unchanged, and <code>null</code> is returned. NOTE: Since the value
+    * could also be null, you must use containsKey to see if you are
+    * actually removing a mapping.
+    *
+    * @param key the key used to locate the value to remove
+    * @return whatever the key mapped to, if present
+    */
+   public Object remove(Object key)
+   {
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+     HashEntry last = null;
+ 
+     while (e != null)
+       {
+         if (equals(key, e.key))
+           {
+             modCount++;
+             if (last == null)
+               buckets[idx] = e.next;
+             else
+               last.next = e.next;
+             size--;
+             // Method call necessary for LinkedHashMap to work correctly.
+             return e.cleanup();
+           }
+         last = e;
+         e = e.next;
+       }
+     return null;
+   }
+ 
+   /**
+    * Clears the Map so it has no keys. This is O(1).
+    */
+   public void clear()
+   {
+     if (size != 0)
+       {
+         modCount++;
+         Arrays.fill(buckets, null);
+         size = 0;
+       }
+   }
+ 
+   /**
+    * Returns true if this HashMap contains a value <code>o</code>, such that
+    * <code>o.equals(value)</code>.
+    *
+    * @param value the value to search for in this HashMap
+    * @return true if at least one key maps to the value
+    * @see #containsKey(Object)
+    */
+   public boolean containsValue(Object value)
+   {
+     for (int i = buckets.length - 1; i >= 0; i--)
+       {
+         HashEntry e = buckets[i];
+         while (e != null)
+           {
+             if (equals(value, e.value))
+               return true;
+             e = e.next;
+           }
+       }
+     return false;
+   }
+ 
+   /**
+    * Returns a shallow clone of this HashMap. The Map itself is cloned,
+    * but its contents are not.  This is O(n).
+    *
+    * @return the clone
+    */
+   public Object clone()
+   {
+     HashMap copy = null;
+     try
+       {
+         copy = (HashMap) super.clone();
+       }
+     catch (CloneNotSupportedException x)
+       {
+         // This is impossible.
+       }
+     copy.buckets = new HashEntry[buckets.length];
+     copy.putAllInternal(this);
+     // Clear the entry cache. AbstractMap.clone() does the others.
+     copy.entries = null;
+     return copy;
+   }
+ 
+   /**
+    * Returns a "set view" of this HashMap's keys. The set is backed by the
+    * HashMap, so changes in one show up in the other.  The set supports
+    * element removal, but not element addition.
+    *
+    * @return a set view of the keys
+    * @see #values()
+    * @see #entrySet()
+    */
+   public Set keySet()
+   {
+     if (keys == null)
+       // Create an AbstractSet with custom implementations of those methods
+       // that can be overridden easily and efficiently.
+       keys = new AbstractSet()
+       {
+         public int size()
+         {
+           return size;
+         }
+ 
+         public Iterator iterator()
+         {
+           // Cannot create the iterator directly, because of LinkedHashMap.
+           return HashMap.this.iterator(KEYS);
+         }
+ 
+         public void clear()
+         {
+           HashMap.this.clear();
+         }
+ 
+         public boolean contains(Object o)
+         {
+           return containsKey(o);
+         }
+ 
+         public boolean remove(Object o)
+         {
+           // Test against the size of the HashMap to determine if anything
+           // really got removed. This is necessary because the return value
+           // of HashMap.remove() is ambiguous in the null case.
+           int oldsize = size;
+           HashMap.this.remove(o);
+           return oldsize != size;
+         }
+       };
+     return keys;
+   }
+ 
+   /**
+    * Returns a "collection view" (or "bag view") of this HashMap's values.
+    * The collection is backed by the HashMap, so changes in one show up
+    * in the other.  The collection supports element removal, but not element
+    * addition.
+    *
+    * @return a bag view of the values
+    * @see #keySet()
+    * @see #entrySet()
+    */
+   public Collection values()
+   {
+     if (values == null)
+       // We don't bother overriding many of the optional methods, as doing so
+       // wouldn't provide any significant performance advantage.
+       values = new AbstractCollection()
+       {
+         public int size()
+         {
+           return size;
+         }
+ 
+         public Iterator iterator()
+         {
+           // Cannot create the iterator directly, because of LinkedHashMap.
+           return HashMap.this.iterator(VALUES);
+         }
+ 
+         public void clear()
+         {
+           HashMap.this.clear();
+         }
+       };
+     return values;
+   }
+ 
+   /**
+    * Returns a "set view" of this HashMap's entries. The set is backed by
+    * the HashMap, so changes in one show up in the other.  The set supports
+    * element removal, but not element addition.<p>
+    *
+    * Note that the iterators for all three views, from keySet(), entrySet(),
+    * and values(), traverse the HashMap in the same sequence.
+    *
+    * @return a set view of the entries
+    * @see #keySet()
+    * @see #values()
+    * @see Map.Entry
+    */
+   public Set entrySet()
+   {
+     if (entries == null)
+       // Create an AbstractSet with custom implementations of those methods
+       // that can be overridden easily and efficiently.
+       entries = new AbstractSet()
+       {
+         public int size()
+         {
+           return size;
+         }
+ 
+         public Iterator iterator()
+         {
+           // Cannot create the iterator directly, because of LinkedHashMap.
+           return HashMap.this.iterator(ENTRIES);
+         }
+ 
+         public void clear()
+         {
+           HashMap.this.clear();
+         }
+ 
+         public boolean contains(Object o)
+         {
+           return getEntry(o) != null;
+         }
+ 
+         public boolean remove(Object o)
+         {
+           HashEntry e = getEntry(o);
+           if (e != null)
+             {
+               HashMap.this.remove(e.key);
+               return true;
+             }
+           return false;
+         }
+       };
+     return entries;
+   }
+ 
+   /**
+    * Helper method for put, that creates and adds a new Entry.  This is
+    * overridden in LinkedHashMap for bookkeeping purposes.
+    *
+    * @param key the key of the new Entry
+    * @param value the value
+    * @param idx the index in buckets where the new Entry belongs
+    * @param callRemove whether to call the removeEldestEntry method
+    * @see #put(Object, Object)
+    */
+   void addEntry(Object key, Object value, int idx, boolean callRemove)
+   {
+     HashEntry e = new HashEntry(key, value);
+     e.next = buckets[idx];
+     buckets[idx] = e;
+   }
+ 
+   /**
+    * Helper method for entrySet(), which matches both key and value
+    * simultaneously.
+    *
+    * @param o the entry to match
+    * @return the matching entry, if found, or null
+    * @see #entrySet()
+    */
+   // Package visible, for use in nested classes.
+   final HashEntry getEntry(Object o)
+   {
+     if (! (o instanceof Map.Entry))
+       return null;
+     Map.Entry me = (Map.Entry) o;
+     Object key = me.getKey();
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+     while (e != null)
+       {
+         if (equals(e.key, key))
+           return equals(e.value, me.getValue()) ? e : null;
+         e = e.next;
+       }
+     return null;
+   }
+ 
+   /**
+    * Helper method that returns an index in the buckets array for `key'
+    * based on its hashCode().  Package visible for use by subclasses.
+    *
+    * @param key the key
+    * @return the bucket number
+    */
+   final int hash(Object key)
+   {
+     return key == null ? 0 : Math.abs(key.hashCode() % buckets.length);
+   }
+ 
+   /**
+    * Generates a parameterized iterator.  Must be overrideable, since
+    * LinkedHashMap iterates in a different order.
+    *
+    * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
+    * @return the appropriate iterator
+    */
+   Iterator iterator(int type)
+   {
+     return new HashIterator(type);
+   }
+ 
+   /**
+    * A simplified, more efficient internal implementation of putAll(). clone() 
+    * should not call putAll or put, in order to be compatible with the JDK 
+    * implementation with respect to subclasses.
+    *
+    * @param m the map to initialize this from
+    */
+   void putAllInternal(Map m)
+   {
+     Iterator itr = m.entrySet().iterator();
+     size = 0;
+     while (itr.hasNext())
+       {
+         size++;
+ 	Map.Entry e = (Map.Entry) itr.next();
+ 	Object key = e.getKey();
+ 	int idx = hash(key);
+ 	addEntry(key, e.getValue(), idx, false);
+       }
+   }
+ 
+   /**
+    * Increases the size of the HashMap and rehashes all keys to new
+    * array indices; this is called when the addition of a new value
+    * would cause size() &gt; threshold. Note that the existing Entry
+    * objects are reused in the new hash table.
+    *
+    * <p>This is not specified, but the new size is twice the current size
+    * plus one; this number is not always prime, unfortunately.
+    */
+   private void rehash()
+   {
+     HashEntry[] oldBuckets = buckets;
+ 
+     int newcapacity = (buckets.length * 2) + 1;
+     threshold = (int) (newcapacity * loadFactor);
+     buckets = new HashEntry[newcapacity];
+ 
+     for (int i = oldBuckets.length - 1; i >= 0; i--)
+       {
+         HashEntry e = oldBuckets[i];
+         while (e != null)
+           {
+             int idx = hash(e.key);
+             HashEntry dest = buckets[idx];
+             HashEntry next = e.next;
+             e.next = buckets[idx];
+             buckets[idx] = e;
+             e = next;
+           }
+       }
+   }
+ 
+   /**
+    * Serializes this object to the given stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>capacity</i>(int) that is the length of the
+    *             bucket array, the <i>size</i>(int) of the hash map
+    *             are emitted first.  They are followed by size entries,
+    *             each consisting of a key (Object) and a value (Object).
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     // Write the threshold and loadFactor fields.
+     s.defaultWriteObject();
+ 
+     s.writeInt(buckets.length);
+     s.writeInt(size);
+     // Avoid creating a wasted Set by creating the iterator directly.
+     Iterator it = iterator(ENTRIES);
+     while (it.hasNext())
+       {
+         HashEntry entry = (HashEntry) it.next();
+         s.writeObject(entry.key);
+         s.writeObject(entry.value);
+       }
+   }
+ 
+   /**
+    * Deserializes this object from the given stream.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if the underlying stream fails
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>capacity</i>(int) that is the length of the
+    *             bucket array, the <i>size</i>(int) of the hash map
+    *             are emitted first.  They are followed by size entries,
+    *             each consisting of a key (Object) and a value (Object).
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     // Read the threshold and loadFactor fields.
+     s.defaultReadObject();
+ 
+     // Read and use capacity, followed by key/value pairs.
+     buckets = new HashEntry[s.readInt()];
+     int len = s.readInt();
+     size = len;
+     while (len-- > 0)
+       {
+         Object key = s.readObject();
+         addEntry(key, s.readObject(), hash(key), false);
+       }
+   }
+ 
+   /**
+    * Iterate over HashMap's entries.
+    * This implementation is parameterized to give a sequential view of
+    * keys, values, or entries.
+    *
+    * @author Jon Zeppieri
+    */
+   private final class HashIterator implements Iterator
+   {
+     /**
+      * The type of this Iterator: {@link #KEYS}, {@link #VALUES},
+      * or {@link #ENTRIES}.
+      */
+     private final int type;
+     /**
+      * The number of modifications to the backing HashMap that we know about.
+      */
+     private int knownMod = modCount;
+     /** The number of elements remaining to be returned by next(). */
+     private int count = size;
+     /** Current index in the physical hash table. */
+     private int idx = buckets.length;
+     /** The last Entry returned by a next() call. */
+     private HashEntry last;
+     /**
+      * The next entry that should be returned by next(). It is set to something
+      * if we're iterating through a bucket that contains multiple linked
+      * entries. It is null if next() needs to find a new bucket.
+      */
+     private HashEntry next;
+ 
+     /**
+      * Construct a new HashIterator with the supplied type.
+      * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
+      */
+     HashIterator(int type)
+     {
+       this.type = type;
+     }
+ 
+     /**
+      * Returns true if the Iterator has more elements.
+      * @return true if there are more elements
+      * @throws ConcurrentModificationException if the HashMap was modified
+      */
+     public boolean hasNext()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       return count > 0;
+     }
+ 
+     /**
+      * Returns the next element in the Iterator's sequential view.
+      * @return the next element
+      * @throws ConcurrentModificationException if the HashMap was modified
+      * @throws NoSuchElementException if there is none
+      */
+     public Object next()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       if (count == 0)
+         throw new NoSuchElementException();
+       count--;
+       HashEntry e = next;
+ 
+       while (e == null)
+         e = buckets[--idx];
+ 
+       next = e.next;
+       last = e;
+       if (type == VALUES)
+         return e.value;
+       if (type == KEYS)
+         return e.key;
+       return e;
+     }
+ 
+     /**
+      * Removes from the backing HashMap the last element which was fetched
+      * with the <code>next()</code> method.
+      * @throws ConcurrentModificationException if the HashMap was modified
+      * @throws IllegalStateException if called when there is no last element
+      */
+     public void remove()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       if (last == null)
+         throw new IllegalStateException();
+ 
+       HashMap.this.remove(last.key);
+       last = null;
+       knownMod++;
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/HashSet.java gcc-4.1.0/libjava/classpath/java/util/HashSet.java
*** gcc-4.0.2/libjava/classpath/java/util/HashSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/HashSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,293 ----
+ /* HashSet.java -- a class providing a HashMap-backed Set
+    Copyright (C) 1998, 1999, 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * This class provides a HashMap-backed implementation of the Set interface.
+  * <p>
+  *
+  * Most operations are O(1), assuming no hash collisions.  In the worst
+  * case (where all hashes collide), operations are O(n). Setting the
+  * initial capacity too low will force many resizing operations, but
+  * setting the initial capacity too high (or loadfactor too low) leads
+  * to wasted memory and slower iteration.
+  * <p>
+  *
+  * HashSet accepts the null key and null values.  It is not synchronized,
+  * so if you need multi-threaded access, consider using:<br>
+  * <code>Set s = Collections.synchronizedSet(new HashSet(...));</code>
+  * <p>
+  *
+  * The iterators are <i>fail-fast</i>, meaning that any structural
+  * modification, except for <code>remove()</code> called on the iterator
+  * itself, cause the iterator to throw a
+  * {@link ConcurrentModificationException} rather than exhibit
+  * non-deterministic behavior.
+  *
+  * @author Jon Zeppieri
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see Set
+  * @see TreeSet
+  * @see Collections#synchronizedSet(Set)
+  * @see HashMap
+  * @see LinkedHashSet
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class HashSet extends AbstractSet
+   implements Set, Cloneable, Serializable
+ {
+   /**
+    * Compatible with JDK 1.2.
+    */
+   private static final long serialVersionUID = -5024744406713321676L;
+ 
+   /**
+    * The HashMap which backs this Set.
+    */
+   private transient HashMap map;
+ 
+   /**
+    * Construct a new, empty HashSet whose backing HashMap has the default
+    * capacity (11) and loadFacor (0.75).
+    */
+   public HashSet()
+   {
+     this(HashMap.DEFAULT_CAPACITY, HashMap.DEFAULT_LOAD_FACTOR);
+   }
+ 
+   /**
+    * Construct a new, empty HashSet whose backing HashMap has the supplied
+    * capacity and the default load factor (0.75).
+    *
+    * @param initialCapacity the initial capacity of the backing HashMap
+    * @throws IllegalArgumentException if the capacity is negative
+    */
+   public HashSet(int initialCapacity)
+   {
+     this(initialCapacity, HashMap.DEFAULT_LOAD_FACTOR);
+   }
+ 
+   /**
+    * Construct a new, empty HashSet whose backing HashMap has the supplied
+    * capacity and load factor.
+    *
+    * @param initialCapacity the initial capacity of the backing HashMap
+    * @param loadFactor the load factor of the backing HashMap
+    * @throws IllegalArgumentException if either argument is negative, or
+    *         if loadFactor is POSITIVE_INFINITY or NaN
+    */
+   public HashSet(int initialCapacity, float loadFactor)
+   {
+     map = init(initialCapacity, loadFactor);
+   }
+ 
+   /**
+    * Construct a new HashSet with the same elements as are in the supplied
+    * collection (eliminating any duplicates, of course). The backing storage
+    * has twice the size of the collection, or the default size of 11,
+    * whichever is greater; and the default load factor (0.75).
+    *
+    * @param c a collection of initial set elements
+    * @throws NullPointerException if c is null
+    */
+   public HashSet(Collection c)
+   {
+     this(Math.max(2 * c.size(), HashMap.DEFAULT_CAPACITY));
+     addAll(c);
+   }
+ 
+   /**
+    * Adds the given Object to the set if it is not already in the Set.
+    * This set permits a null element.
+    *
+    * @param o the Object to add to this Set
+    * @return true if the set did not already contain o
+    */
+   public boolean add(Object o)
+   {
+     return map.put(o, "") == null;
+   }
+ 
+   /**
+    * Empties this Set of all elements; this takes constant time.
+    */
+   public void clear()
+   {
+     map.clear();
+   }
+ 
+   /**
+    * Returns a shallow copy of this Set. The Set itself is cloned; its
+    * elements are not.
+    *
+    * @return a shallow clone of the set
+    */
+   public Object clone()
+   {
+     HashSet copy = null;
+     try
+       {
+         copy = (HashSet) super.clone();
+       }
+     catch (CloneNotSupportedException x)
+       {
+         // Impossible to get here.
+       }
+     copy.map = (HashMap) map.clone();
+     return copy;
+   }
+ 
+   /**
+    * Returns true if the supplied element is in this Set.
+    *
+    * @param o the Object to look for
+    * @return true if it is in the set
+    */
+   public boolean contains(Object o)
+   {
+     return map.containsKey(o);
+   }
+ 
+   /**
+    * Returns true if this set has no elements in it.
+    *
+    * @return <code>size() == 0</code>.
+    */
+   public boolean isEmpty()
+   {
+     return map.size == 0;
+   }
+ 
+   /**
+    * Returns an Iterator over the elements of this Set, which visits the
+    * elements in no particular order.  For this class, the Iterator allows
+    * removal of elements. The iterator is fail-fast, and will throw a
+    * ConcurrentModificationException if the set is modified externally.
+    *
+    * @return a set iterator
+    * @see ConcurrentModificationException
+    */
+   public Iterator iterator()
+   {
+     // Avoid creating intermediate keySet() object by using non-public API.
+     return map.iterator(HashMap.KEYS);
+   }
+ 
+   /**
+    * Removes the supplied Object from this Set if it is in the Set.
+    *
+    * @param o the object to remove
+    * @return true if an element was removed
+    */
+   public boolean remove(Object o)
+   {
+     return (map.remove(o) != null);
+   }
+ 
+   /**
+    * Returns the number of elements in this Set (its cardinality).
+    *
+    * @return the size of the set
+    */
+   public int size()
+   {
+     return map.size;
+   }
+ 
+   /**
+    * Helper method which initializes the backing Map. Overridden by
+    * LinkedHashSet for correct semantics.
+    *
+    * @param capacity the initial capacity
+    * @param load the initial load factor
+    * @return the backing HashMap
+    */
+   HashMap init(int capacity, float load)
+   {
+     return new HashMap(capacity, load);
+   }
+ 
+   /**
+    * Serializes this object to the given stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>capacity</i> (int) and <i>loadFactor</i> (float)
+    *             of the backing store, followed by the set size (int),
+    *             then a listing of its elements (Object) in no order
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     s.defaultWriteObject();
+     // Avoid creating intermediate keySet() object by using non-public API.
+     Iterator it = map.iterator(HashMap.KEYS);
+     s.writeInt(map.buckets.length);
+     s.writeFloat(map.loadFactor);
+     s.writeInt(map.size);
+     while (it.hasNext())
+       s.writeObject(it.next());
+   }
+ 
+   /**
+    * Deserializes this object from the given stream.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if the underlying stream fails
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>capacity</i> (int) and <i>loadFactor</i> (float)
+    *             of the backing store, followed by the set size (int),
+    *             then a listing of its elements (Object) in no order
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+ 
+     map = init(s.readInt(), s.readFloat());
+     for (int size = s.readInt(); size > 0; size--)
+       map.put(s.readObject(), "");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Hashtable.java gcc-4.1.0/libjava/classpath/java/util/Hashtable.java
*** gcc-4.0.2/libjava/classpath/java/util/Hashtable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Hashtable.java	Sat Feb  4 20:21:48 2006
***************
*** 0 ****
--- 1,1151 ----
+ /* Hashtable.java -- a class providing a basic hashtable data structure,
+    mapping Object --> Object
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ // NOTE: This implementation is very similar to that of HashMap. If you fix
+ // a bug in here, chances are you should make a similar change to the HashMap
+ // code.
+ 
+ /**
+  * A class which implements a hashtable data structure.
+  * <p>
+  *
+  * This implementation of Hashtable uses a hash-bucket approach. That is:
+  * linear probing and rehashing is avoided; instead, each hashed value maps
+  * to a simple linked-list which, in the best case, only has one node.
+  * Assuming a large enough table, low enough load factor, and / or well
+  * implemented hashCode() methods, Hashtable should provide O(1)
+  * insertion, deletion, and searching of keys.  Hashtable is O(n) in
+  * the worst case for all of these (if all keys hash to the same bucket).
+  * <p>
+  *
+  * This is a JDK-1.2 compliant implementation of Hashtable.  As such, it
+  * belongs, partially, to the Collections framework (in that it implements
+  * Map).  For backwards compatibility, it inherits from the obsolete and
+  * utterly useless Dictionary class.
+  * <p>
+  *
+  * Being a hybrid of old and new, Hashtable has methods which provide redundant
+  * capability, but with subtle and even crucial differences.
+  * For example, one can iterate over various aspects of a Hashtable with
+  * either an Iterator (which is the JDK-1.2 way of doing things) or with an
+  * Enumeration.  The latter can end up in an undefined state if the Hashtable
+  * changes while the Enumeration is open.
+  * <p>
+  *
+  * Unlike HashMap, Hashtable does not accept `null' as a key value. Also,
+  * all accesses are synchronized: in a single thread environment, this is
+  * expensive, but in a multi-thread environment, this saves you the effort
+  * of extra synchronization. However, the old-style enumerators are not
+  * synchronized, because they can lead to unspecified behavior even if
+  * they were synchronized. You have been warned.
+  * <p>
+  *
+  * The iterators are <i>fail-fast</i>, meaning that any structural
+  * modification, except for <code>remove()</code> called on the iterator
+  * itself, cause the iterator to throw a
+  * <code>ConcurrentModificationException</code> rather than exhibit
+  * non-deterministic behavior.
+  *
+  * @author Jon Zeppieri
+  * @author Warren Levy
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see HashMap
+  * @see TreeMap
+  * @see IdentityHashMap
+  * @see LinkedHashMap
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Hashtable extends Dictionary
+   implements Map, Cloneable, Serializable
+ {
+   // WARNING: Hashtable is a CORE class in the bootstrap cycle. See the
+   // comments in vm/reference/java/lang/Runtime for implications of this fact.
+ 
+   /** Default number of buckets. This is the value the JDK 1.3 uses. Some
+    * early documentation specified this value as 101. That is incorrect.
+    */
+   private static final int DEFAULT_CAPACITY = 11;
+ 
+   /** An "enum" of iterator types. */
+   // Package visible for use by nested classes.
+   static final int KEYS = 0,
+                    VALUES = 1,
+                    ENTRIES = 2;
+ 
+   /**
+    * The default load factor; this is explicitly specified by the spec.
+    */
+   private static final float DEFAULT_LOAD_FACTOR = 0.75f;
+ 
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 1421746759512286392L;
+ 
+   /**
+    * The rounded product of the capacity and the load factor; when the number
+    * of elements exceeds the threshold, the Hashtable calls
+    * <code>rehash()</code>.
+    * @serial
+    */
+   private int threshold;
+ 
+   /**
+    * Load factor of this Hashtable:  used in computing the threshold.
+    * @serial
+    */
+   private final float loadFactor;
+ 
+   /**
+    * Array containing the actual key-value mappings.
+    */
+   // Package visible for use by nested classes.
+   transient HashEntry[] buckets;
+ 
+   /**
+    * Counts the number of modifications this Hashtable has undergone, used
+    * by Iterators to know when to throw ConcurrentModificationExceptions.
+    */
+   // Package visible for use by nested classes.
+   transient int modCount;
+ 
+   /**
+    * The size of this Hashtable:  denotes the number of key-value pairs.
+    */
+   // Package visible for use by nested classes.
+   transient int size;
+ 
+   /**
+    * The cache for {@link #keySet()}.
+    */
+   private transient Set keys;
+ 
+   /**
+    * The cache for {@link #values()}.
+    */
+   private transient Collection values;
+ 
+   /**
+    * The cache for {@link #entrySet()}.
+    */
+   private transient Set entries;
+ 
+   /**
+    * Class to represent an entry in the hash table. Holds a single key-value
+    * pair. A Hashtable Entry is identical to a HashMap Entry, except that
+    * `null' is not allowed for keys and values.
+    */
+   private static final class HashEntry extends AbstractMap.BasicMapEntry
+   {
+     /** The next entry in the linked list. */
+     HashEntry next;
+ 
+     /**
+      * Simple constructor.
+      * @param key the key, already guaranteed non-null
+      * @param value the value, already guaranteed non-null
+      */
+     HashEntry(Object key, Object value)
+     {
+       super(key, value);
+     }
+ 
+     /**
+      * Resets the value.
+      * @param newVal the new value
+      * @return the prior value
+      * @throws NullPointerException if <code>newVal</code> is null
+      */
+     public Object setValue(Object newVal)
+     {
+       if (newVal == null)
+         throw new NullPointerException();
+       return super.setValue(newVal);
+     }
+   }
+ 
+   /**
+    * Construct a new Hashtable with the default capacity (11) and the default
+    * load factor (0.75).
+    */
+   public Hashtable()
+   {
+     this(DEFAULT_CAPACITY, DEFAULT_LOAD_FACTOR);
+   }
+ 
+   /**
+    * Construct a new Hashtable from the given Map, with initial capacity
+    * the greater of the size of <code>m</code> or the default of 11.
+    * <p>
+    *
+    * Every element in Map m will be put into this new Hashtable.
+    *
+    * @param m a Map whose key / value pairs will be put into
+    *          the new Hashtable.  <b>NOTE: key / value pairs
+    *          are not cloned in this constructor.</b>
+    * @throws NullPointerException if m is null, or if m contains a mapping
+    *         to or from `null'.
+    * @since 1.2
+    */
+   public Hashtable(Map m)
+   {
+     this(Math.max(m.size() * 2, DEFAULT_CAPACITY), DEFAULT_LOAD_FACTOR);
+     putAll(m);
+   }
+ 
+   /**
+    * Construct a new Hashtable with a specific inital capacity and
+    * default load factor of 0.75.
+    *
+    * @param initialCapacity the initial capacity of this Hashtable (&gt;= 0)
+    * @throws IllegalArgumentException if (initialCapacity &lt; 0)
+    */
+   public Hashtable(int initialCapacity)
+   {
+     this(initialCapacity, DEFAULT_LOAD_FACTOR);
+   }
+ 
+   /**
+    * Construct a new Hashtable with a specific initial capacity and
+    * load factor.
+    *
+    * @param initialCapacity the initial capacity (&gt;= 0)
+    * @param loadFactor the load factor (&gt; 0, not NaN)
+    * @throws IllegalArgumentException if (initialCapacity &lt; 0) ||
+    *                                     ! (loadFactor &gt; 0.0)
+    */
+   public Hashtable(int initialCapacity, float loadFactor)
+   {
+     if (initialCapacity < 0)
+       throw new IllegalArgumentException("Illegal Capacity: "
+                                          + initialCapacity);
+     if (! (loadFactor > 0)) // check for NaN too
+       throw new IllegalArgumentException("Illegal Load: " + loadFactor);
+ 
+     if (initialCapacity == 0)
+       initialCapacity = 1;
+     buckets = new HashEntry[initialCapacity];
+     this.loadFactor = loadFactor;
+     threshold = (int) (initialCapacity * loadFactor);
+   }
+ 
+   /**
+    * Returns the number of key-value mappings currently in this hashtable.
+    * @return the size
+    */
+   public synchronized int size()
+   {
+     return size;
+   }
+ 
+   /**
+    * Returns true if there are no key-value mappings currently in this table.
+    * @return <code>size() == 0</code>
+    */
+   public synchronized boolean isEmpty()
+   {
+     return size == 0;
+   }
+ 
+   /**
+    * Return an enumeration of the keys of this table. There's no point
+    * in synchronizing this, as you have already been warned that the
+    * enumeration is not specified to be thread-safe.
+    *
+    * @return the keys
+    * @see #elements()
+    * @see #keySet()
+    */
+   public Enumeration keys()
+   {
+     return new Enumerator(KEYS);
+   }
+ 
+   /**
+    * Return an enumeration of the values of this table. There's no point
+    * in synchronizing this, as you have already been warned that the
+    * enumeration is not specified to be thread-safe.
+    *
+    * @return the values
+    * @see #keys()
+    * @see #values()
+    */
+   public Enumeration elements()
+   {
+     return new Enumerator(VALUES);
+   }
+ 
+   /**
+    * Returns true if this Hashtable contains a value <code>o</code>,
+    * such that <code>o.equals(value)</code>.  This is the same as
+    * <code>containsValue()</code>, and is O(n).
+    * <p>
+    *
+    * @param value the value to search for in this Hashtable
+    * @return true if at least one key maps to the value
+    * @throws NullPointerException if <code>value</code> is null
+    * @see #containsValue(Object)
+    * @see #containsKey(Object)
+    */
+   public synchronized boolean contains(Object value)
+   {
+     if (value == null)
+       throw new NullPointerException();
+ 
+     for (int i = buckets.length - 1; i >= 0; i--)
+       {
+         HashEntry e = buckets[i];
+         while (e != null)
+           {
+             if (e.value.equals(value))
+               return true;
+             e = e.next;
+           }
+       }
+  
+     return false;  
+   }
+ 
+   /**
+    * Returns true if this Hashtable contains a value <code>o</code>, such that
+    * <code>o.equals(value)</code>. This is the new API for the old
+    * <code>contains()</code>.
+    *
+    * @param value the value to search for in this Hashtable
+    * @return true if at least one key maps to the value
+    * @see #contains(Object)
+    * @see #containsKey(Object)
+    * @throws NullPointerException if <code>value</code> is null
+    * @since 1.2
+    */
+   public boolean containsValue(Object value)
+   {
+     // Delegate to older method to make sure code overriding it continues 
+     // to work.
+     return contains(value);
+   }
+ 
+   /**
+    * Returns true if the supplied object <code>equals()</code> a key
+    * in this Hashtable.
+    *
+    * @param key the key to search for in this Hashtable
+    * @return true if the key is in the table
+    * @throws NullPointerException if key is null
+    * @see #containsValue(Object)
+    */
+   public synchronized boolean containsKey(Object key)
+   {
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+     while (e != null)
+       {
+         if (e.key.equals(key))
+           return true;
+         e = e.next;
+       }
+     return false;
+   }
+ 
+   /**
+    * Return the value in this Hashtable associated with the supplied key,
+    * or <code>null</code> if the key maps to nothing.
+    *
+    * @param key the key for which to fetch an associated value
+    * @return what the key maps to, if present
+    * @throws NullPointerException if key is null
+    * @see #put(Object, Object)
+    * @see #containsKey(Object)
+    */
+   public synchronized Object get(Object key)
+   {
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+     while (e != null)
+       {
+         if (e.key.equals(key))
+           return e.value;
+         e = e.next;
+       }
+     return null;
+   }
+ 
+   /**
+    * Puts the supplied value into the Map, mapped by the supplied key.
+    * Neither parameter may be null.  The value may be retrieved by any
+    * object which <code>equals()</code> this key.
+    *
+    * @param key the key used to locate the value
+    * @param value the value to be stored in the table
+    * @return the prior mapping of the key, or null if there was none
+    * @throws NullPointerException if key or value is null
+    * @see #get(Object)
+    * @see Object#equals(Object)
+    */
+   public synchronized Object put(Object key, Object value)
+   {
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+ 
+     // Check if value is null since it is not permitted.
+     if (value == null)
+       throw new NullPointerException();
+ 
+     while (e != null)
+       {
+         if (e.key.equals(key))
+           {
+             // Bypass e.setValue, since we already know value is non-null.
+             Object r = e.value;
+             e.value = value;
+             return r;
+           }
+         else
+           {
+             e = e.next;
+           }
+       }
+ 
+     // At this point, we know we need to add a new entry.
+     modCount++;
+     if (++size > threshold)
+       {
+         rehash();
+         // Need a new hash value to suit the bigger table.
+         idx = hash(key);
+       }
+ 
+     e = new HashEntry(key, value);
+ 
+     e.next = buckets[idx];
+     buckets[idx] = e;
+ 
+     return null;
+   }
+ 
+   /**
+    * Removes from the table and returns the value which is mapped by the
+    * supplied key. If the key maps to nothing, then the table remains
+    * unchanged, and <code>null</code> is returned.
+    *
+    * @param key the key used to locate the value to remove
+    * @return whatever the key mapped to, if present
+    */
+   public synchronized Object remove(Object key)
+   {
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+     HashEntry last = null;
+ 
+     while (e != null)
+       {
+         if (e.key.equals(key))
+           {
+             modCount++;
+             if (last == null)
+               buckets[idx] = e.next;
+             else
+               last.next = e.next;
+             size--;
+             return e.value;
+           }
+         last = e;
+         e = e.next;
+       }
+     return null;
+   }
+ 
+   /**
+    * Copies all elements of the given map into this hashtable.  However, no
+    * mapping can contain null as key or value.  If this table already has
+    * a mapping for a key, the new mapping replaces the current one.
+    *
+    * @param m the map to be hashed into this
+    * @throws NullPointerException if m is null, or contains null keys or values
+    */
+   public synchronized void putAll(Map m)
+   {
+     Iterator itr = m.entrySet().iterator();
+ 
+     while (itr.hasNext())
+       {
+         Map.Entry e = (Map.Entry) itr.next();
+         // Optimize in case the Entry is one of our own.
+         if (e instanceof AbstractMap.BasicMapEntry)
+           {
+             AbstractMap.BasicMapEntry entry = (AbstractMap.BasicMapEntry) e;
+             put(entry.key, entry.value);
+           }
+         else
+           {
+             put(e.getKey(), e.getValue());
+           }
+       }
+   }
+ 
+   /**
+    * Clears the hashtable so it has no keys.  This is O(1).
+    */
+   public synchronized void clear()
+   {
+     if (size > 0)
+       {
+         modCount++;
+         Arrays.fill(buckets, null);
+         size = 0;
+       }
+   }
+ 
+   /**
+    * Returns a shallow clone of this Hashtable. The Map itself is cloned,
+    * but its contents are not.  This is O(n).
+    *
+    * @return the clone
+    */
+   public synchronized Object clone()
+   {
+     Hashtable copy = null;
+     try
+       {
+         copy = (Hashtable) super.clone();
+       }
+     catch (CloneNotSupportedException x)
+       {
+         // This is impossible.
+       }
+     copy.buckets = new HashEntry[buckets.length];
+     copy.putAllInternal(this);
+     // Clear the caches.
+     copy.keys = null;
+     copy.values = null;
+     copy.entries = null;
+     return copy;
+   }
+ 
+   /**
+    * Converts this Hashtable to a String, surrounded by braces, and with
+    * key/value pairs listed with an equals sign between, separated by a
+    * comma and space. For example, <code>"{a=1, b=2}"</code>.<p>
+    *
+    * NOTE: if the <code>toString()</code> method of any key or value
+    * throws an exception, this will fail for the same reason.
+    *
+    * @return the string representation
+    */
+   public synchronized String toString()
+   {
+     // Since we are already synchronized, and entrySet().iterator()
+     // would repeatedly re-lock/release the monitor, we directly use the
+     // unsynchronized HashIterator instead.
+     Iterator entries = new HashIterator(ENTRIES);
+     StringBuffer r = new StringBuffer("{");
+     for (int pos = size; pos > 0; pos--)
+       {
+         r.append(entries.next());
+         if (pos > 1)
+           r.append(", ");
+       }
+     r.append("}");
+     return r.toString();
+   }
+ 
+   /**
+    * Returns a "set view" of this Hashtable's keys. The set is backed by
+    * the hashtable, so changes in one show up in the other.  The set supports
+    * element removal, but not element addition.  The set is properly
+    * synchronized on the original hashtable.  Sun has not documented the
+    * proper interaction of null with this set, but has inconsistent behavior
+    * in the JDK. Therefore, in this implementation, contains, remove,
+    * containsAll, retainAll, removeAll, and equals just ignore a null key
+    * rather than throwing a {@link NullPointerException}.
+    *
+    * @return a set view of the keys
+    * @see #values()
+    * @see #entrySet()
+    * @since 1.2
+    */
+   public Set keySet()
+   {
+     if (keys == null)
+       {
+         // Create a synchronized AbstractSet with custom implementations of
+         // those methods that can be overridden easily and efficiently.
+         Set r = new AbstractSet()
+         {
+           public int size()
+           {
+             return size;
+           }
+ 
+           public Iterator iterator()
+           {
+             return new HashIterator(KEYS);
+           }
+ 
+           public void clear()
+           {
+             Hashtable.this.clear();
+           }
+ 
+           public boolean contains(Object o)
+           {
+             if (o == null)
+               return false;
+             return containsKey(o);
+           }
+ 
+           public boolean remove(Object o)
+           {
+             return Hashtable.this.remove(o) != null;
+           }
+         };
+         // We must specify the correct object to synchronize upon, hence the
+         // use of a non-public API
+         keys = new Collections.SynchronizedSet(this, r);
+       }
+     return keys;
+   }
+ 
+   /**
+    * Returns a "collection view" (or "bag view") of this Hashtable's values.
+    * The collection is backed by the hashtable, so changes in one show up
+    * in the other.  The collection supports element removal, but not element
+    * addition.  The collection is properly synchronized on the original
+    * hashtable.  Sun has not documented the proper interaction of null with
+    * this set, but has inconsistent behavior in the JDK. Therefore, in this
+    * implementation, contains, remove, containsAll, retainAll, removeAll, and
+    * equals just ignore a null value rather than throwing a
+    * {@link NullPointerException}.
+    *
+    * @return a bag view of the values
+    * @see #keySet()
+    * @see #entrySet()
+    * @since 1.2
+    */
+   public Collection values()
+   {
+     if (values == null)
+       {
+         // We don't bother overriding many of the optional methods, as doing so
+         // wouldn't provide any significant performance advantage.
+         Collection r = new AbstractCollection()
+         {
+           public int size()
+           {
+             return size;
+           }
+ 
+           public Iterator iterator()
+           {
+             return new HashIterator(VALUES);
+           }
+ 
+           public void clear()
+           {
+             Hashtable.this.clear();
+           }
+         };
+         // We must specify the correct object to synchronize upon, hence the
+         // use of a non-public API
+         values = new Collections.SynchronizedCollection(this, r);
+       }
+     return values;
+   }
+ 
+   /**
+    * Returns a "set view" of this Hashtable's entries. The set is backed by
+    * the hashtable, so changes in one show up in the other.  The set supports
+    * element removal, but not element addition.  The set is properly
+    * synchronized on the original hashtable.  Sun has not documented the
+    * proper interaction of null with this set, but has inconsistent behavior
+    * in the JDK. Therefore, in this implementation, contains, remove,
+    * containsAll, retainAll, removeAll, and equals just ignore a null entry,
+    * or an entry with a null key or value, rather than throwing a
+    * {@link NullPointerException}. However, calling entry.setValue(null)
+    * will fail.
+    * <p>
+    *
+    * Note that the iterators for all three views, from keySet(), entrySet(),
+    * and values(), traverse the hashtable in the same sequence.
+    *
+    * @return a set view of the entries
+    * @see #keySet()
+    * @see #values()
+    * @see Map.Entry
+    * @since 1.2
+    */
+   public Set entrySet()
+   {
+     if (entries == null)
+       {
+         // Create an AbstractSet with custom implementations of those methods
+         // that can be overridden easily and efficiently.
+         Set r = new AbstractSet()
+         {
+           public int size()
+           {
+             return size;
+           }
+ 
+           public Iterator iterator()
+           {
+             return new HashIterator(ENTRIES);
+           }
+ 
+           public void clear()
+           {
+             Hashtable.this.clear();
+           }
+ 
+           public boolean contains(Object o)
+           {
+             return getEntry(o) != null;
+           }
+ 
+           public boolean remove(Object o)
+           {
+             HashEntry e = getEntry(o);
+             if (e != null)
+               {
+                 Hashtable.this.remove(e.key);
+                 return true;
+               }
+             return false;
+           }
+         };
+         // We must specify the correct object to synchronize upon, hence the
+         // use of a non-public API
+         entries = new Collections.SynchronizedSet(this, r);
+       }
+     return entries;
+   }
+ 
+   /**
+    * Returns true if this Hashtable equals the supplied Object <code>o</code>.
+    * As specified by Map, this is:
+    * <code>
+    * (o instanceof Map) && entrySet().equals(((Map) o).entrySet());
+    * </code>
+    *
+    * @param o the object to compare to
+    * @return true if o is an equal map
+    * @since 1.2
+    */
+   public boolean equals(Object o)
+   {
+     // no need to synchronize, entrySet().equals() does that
+     if (o == this)
+       return true;
+     if (!(o instanceof Map))
+       return false;
+ 
+     return entrySet().equals(((Map) o).entrySet());
+   }
+ 
+   /**
+    * Returns the hashCode for this Hashtable.  As specified by Map, this is
+    * the sum of the hashCodes of all of its Map.Entry objects
+    *
+    * @return the sum of the hashcodes of the entries
+    * @since 1.2
+    */
+   public synchronized int hashCode()
+   {
+     // Since we are already synchronized, and entrySet().iterator()
+     // would repeatedly re-lock/release the monitor, we directly use the
+     // unsynchronized HashIterator instead.
+     Iterator itr = new HashIterator(ENTRIES);
+     int hashcode = 0;
+     for (int pos = size; pos > 0; pos--)
+       hashcode += itr.next().hashCode();
+ 
+     return hashcode;
+   }
+ 
+   /**
+    * Helper method that returns an index in the buckets array for `key'
+    * based on its hashCode().
+    *
+    * @param key the key
+    * @return the bucket number
+    * @throws NullPointerException if key is null
+    */
+   private int hash(Object key)
+   {
+     // Note: Inline Math.abs here, for less method overhead, and to avoid
+     // a bootstrap dependency, since Math relies on native methods.
+     int hash = key.hashCode() % buckets.length;
+     return hash < 0 ? -hash : hash;
+   }
+ 
+   /**
+    * Helper method for entrySet(), which matches both key and value
+    * simultaneously. Ignores null, as mentioned in entrySet().
+    *
+    * @param o the entry to match
+    * @return the matching entry, if found, or null
+    * @see #entrySet()
+    */
+   // Package visible, for use in nested classes.
+   HashEntry getEntry(Object o)
+   {
+     if (! (o instanceof Map.Entry))
+       return null;
+     Object key = ((Map.Entry) o).getKey();
+     if (key == null)
+       return null;
+ 
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+     while (e != null)
+       {
+         if (e.equals(o))
+           return e;
+         e = e.next;
+       }
+     return null;
+   }
+ 
+   /**
+    * A simplified, more efficient internal implementation of putAll(). clone() 
+    * should not call putAll or put, in order to be compatible with the JDK 
+    * implementation with respect to subclasses.
+    *
+    * @param m the map to initialize this from
+    */
+   void putAllInternal(Map m)
+   {
+     Iterator itr = m.entrySet().iterator();
+     size = 0;
+ 
+     while (itr.hasNext())
+       {
+         size++;
+ 	Map.Entry e = (Map.Entry) itr.next();
+ 	Object key = e.getKey();
+ 	int idx = hash(key);
+ 	HashEntry he = new HashEntry(key, e.getValue());
+ 	he.next = buckets[idx];
+ 	buckets[idx] = he;
+       }
+   }
+ 
+   /**
+    * Increases the size of the Hashtable and rehashes all keys to new array
+    * indices; this is called when the addition of a new value would cause
+    * size() &gt; threshold. Note that the existing Entry objects are reused in
+    * the new hash table.
+    * <p>
+    *
+    * This is not specified, but the new size is twice the current size plus
+    * one; this number is not always prime, unfortunately. This implementation
+    * is not synchronized, as it is only invoked from synchronized methods.
+    */
+   protected void rehash()
+   {
+     HashEntry[] oldBuckets = buckets;
+ 
+     int newcapacity = (buckets.length * 2) + 1;
+     threshold = (int) (newcapacity * loadFactor);
+     buckets = new HashEntry[newcapacity];
+ 
+     for (int i = oldBuckets.length - 1; i >= 0; i--)
+       {
+         HashEntry e = oldBuckets[i];
+         while (e != null)
+           {
+             int idx = hash(e.key);
+             HashEntry dest = buckets[idx];
+ 
+             if (dest != null)
+               {
+                 while (dest.next != null)
+                   dest = dest.next;
+                 dest.next = e;
+               }
+             else
+               {
+                 buckets[idx] = e;
+               }
+ 
+             HashEntry next = e.next;
+             e.next = null;
+             e = next;
+           }
+       }
+   }
+ 
+   /**
+    * Serializes this object to the given stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>capacity</i> (int) that is the length of the
+    *             bucket array, the <i>size</i> (int) of the hash map
+    *             are emitted first.  They are followed by size entries,
+    *             each consisting of a key (Object) and a value (Object).
+    */
+   private synchronized void writeObject(ObjectOutputStream s)
+     throws IOException
+   {
+     // Write the threshold and loadFactor fields.
+     s.defaultWriteObject();
+ 
+     s.writeInt(buckets.length);
+     s.writeInt(size);
+     // Since we are already synchronized, and entrySet().iterator()
+     // would repeatedly re-lock/release the monitor, we directly use the
+     // unsynchronized HashIterator instead.
+     Iterator it = new HashIterator(ENTRIES);
+     while (it.hasNext())
+       {
+         HashEntry entry = (HashEntry) it.next();
+         s.writeObject(entry.key);
+         s.writeObject(entry.value);
+       }
+   }
+ 
+   /**
+    * Deserializes this object from the given stream.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if the underlying stream fails
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>capacity</i> (int) that is the length of the
+    *             bucket array, the <i>size</i> (int) of the hash map
+    *             are emitted first.  They are followed by size entries,
+    *             each consisting of a key (Object) and a value (Object).
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     // Read the threshold and loadFactor fields.
+     s.defaultReadObject();
+ 
+     // Read and use capacity.
+     buckets = new HashEntry[s.readInt()];
+     int len = s.readInt();
+ 
+     // Read and use key/value pairs.
+     // TODO: should we be defensive programmers, and check for illegal nulls?
+     while (--len >= 0)
+       put(s.readObject(), s.readObject());
+   }
+ 
+   /**
+    * A class which implements the Iterator interface and is used for
+    * iterating over Hashtables.
+    * This implementation is parameterized to give a sequential view of
+    * keys, values, or entries; it also allows the removal of elements,
+    * as per the Javasoft spec.  Note that it is not synchronized; this is
+    * a performance enhancer since it is never exposed externally and is
+    * only used within synchronized blocks above.
+    *
+    * @author Jon Zeppieri
+    */
+   private final class HashIterator implements Iterator
+   {
+     /**
+      * The type of this Iterator: {@link #KEYS}, {@link #VALUES},
+      * or {@link #ENTRIES}.
+      */
+     final int type;
+     /**
+      * The number of modifications to the backing Hashtable that we know about.
+      */
+     int knownMod = modCount;
+     /** The number of elements remaining to be returned by next(). */
+     int count = size;
+     /** Current index in the physical hash table. */
+     int idx = buckets.length;
+     /** The last Entry returned by a next() call. */
+     HashEntry last;
+     /**
+      * The next entry that should be returned by next(). It is set to something
+      * if we're iterating through a bucket that contains multiple linked
+      * entries. It is null if next() needs to find a new bucket.
+      */
+     HashEntry next;
+ 
+     /**
+      * Construct a new HashIterator with the supplied type.
+      * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
+      */
+     HashIterator(int type)
+     {
+       this.type = type;
+     }
+ 
+     /**
+      * Returns true if the Iterator has more elements.
+      * @return true if there are more elements
+      * @throws ConcurrentModificationException if the hashtable was modified
+      */
+     public boolean hasNext()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       return count > 0;
+     }
+ 
+     /**
+      * Returns the next element in the Iterator's sequential view.
+      * @return the next element
+      * @throws ConcurrentModificationException if the hashtable was modified
+      * @throws NoSuchElementException if there is none
+      */
+     public Object next()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       if (count == 0)
+         throw new NoSuchElementException();
+       count--;
+       HashEntry e = next;
+ 
+       while (e == null)
+         e = buckets[--idx];
+ 
+       next = e.next;
+       last = e;
+       if (type == VALUES)
+         return e.value;
+       if (type == KEYS)
+         return e.key;
+       return e;
+     }
+ 
+     /**
+      * Removes from the backing Hashtable the last element which was fetched
+      * with the <code>next()</code> method.
+      * @throws ConcurrentModificationException if the hashtable was modified
+      * @throws IllegalStateException if called when there is no last element
+      */
+     public void remove()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       if (last == null)
+         throw new IllegalStateException();
+ 
+       Hashtable.this.remove(last.key);
+       last = null;
+       knownMod++;
+     }
+   } // class HashIterator
+ 
+ 
+   /**
+    * Enumeration view of this Hashtable, providing sequential access to its
+    * elements; this implementation is parameterized to provide access either
+    * to the keys or to the values in the Hashtable.
+    *
+    * <b>NOTE</b>: Enumeration is not safe if new elements are put in the table
+    * as this could cause a rehash and we'd completely lose our place.  Even
+    * without a rehash, it is undetermined if a new element added would
+    * appear in the enumeration.  The spec says nothing about this, but
+    * the "Java Class Libraries" book infers that modifications to the
+    * hashtable during enumeration causes indeterminate results.  Don't do it!
+    *
+    * @author Jon Zeppieri
+    */
+   private final class Enumerator implements Enumeration
+   {
+     /**
+      * The type of this Iterator: {@link #KEYS} or {@link #VALUES}.
+      */
+     final int type;
+     /** The number of elements remaining to be returned by next(). */
+     int count = size;
+     /** Current index in the physical hash table. */
+     int idx = buckets.length;
+     /**
+      * Entry which will be returned by the next nextElement() call. It is
+      * set if we are iterating through a bucket with multiple entries, or null
+      * if we must look in the next bucket.
+      */
+     HashEntry next;
+ 
+     /**
+      * Construct the enumeration.
+      * @param type either {@link #KEYS} or {@link #VALUES}.
+      */
+     Enumerator(int type)
+     {
+       this.type = type;
+     }
+ 
+     /**
+      * Checks whether more elements remain in the enumeration.
+      * @return true if nextElement() will not fail.
+      */
+     public boolean hasMoreElements()
+     {
+       return count > 0;
+     }
+ 
+     /**
+      * Returns the next element.
+      * @return the next element
+      * @throws NoSuchElementException if there is none.
+      */
+     public Object nextElement()
+     {
+       if (count == 0)
+         throw new NoSuchElementException("Hashtable Enumerator");
+       count--;
+       HashEntry e = next;
+ 
+       while (e == null)
+         e = buckets[--idx];
+ 
+       next = e.next;
+       return type == VALUES ? e.value : e.key;
+     }
+   } // class Enumerator
+ } // class Hashtable
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/IdentityHashMap.java gcc-4.1.0/libjava/classpath/java/util/IdentityHashMap.java
*** gcc-4.0.2/libjava/classpath/java/util/IdentityHashMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/IdentityHashMap.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,935 ----
+ /* IdentityHashMap.java -- a class providing a hashtable data structure,
+    mapping Object --> Object, which uses object identity for hashing.
+    Copyright (C) 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * This class provides a hashtable-backed implementation of the
+  * Map interface, but uses object identity to do its hashing.  In fact,
+  * it uses object identity for comparing values, as well. It uses a
+  * linear-probe hash table, which may have faster performance
+  * than the chaining employed by HashMap.
+  * <p>
+  *
+  * <em>WARNING: This is not a general purpose map. Because it uses
+  * System.identityHashCode and ==, instead of hashCode and equals, for
+  * comparison, it violated Map's general contract, and may cause
+  * undefined behavior when compared to other maps which are not
+  * IdentityHashMaps.  This is designed only for the rare cases when
+  * identity semantics are needed.</em> An example use is
+  * topology-preserving graph transformations, such as deep cloning,
+  * or as proxy object mapping such as in debugging.
+  * <p>
+  *
+  * This map permits <code>null</code> keys and values, and does not
+  * guarantee that elements will stay in the same order over time. The
+  * basic operations (<code>get</code> and <code>put</code>) take
+  * constant time, provided System.identityHashCode is decent. You can
+  * tune the behavior by specifying the expected maximum size. As more
+  * elements are added, the map may need to allocate a larger table,
+  * which can be expensive.
+  * <p>
+  *
+  * This implementation is unsynchronized.  If you want multi-thread
+  * access to be consistent, you must synchronize it, perhaps by using
+  * <code>Collections.synchronizedMap(new IdentityHashMap(...));</code>.
+  * The iterators are <i>fail-fast</i>, meaning that a structural modification
+  * made to the map outside of an iterator's remove method cause the
+  * iterator, and in the case of the entrySet, the Map.Entry, to
+  * fail with a {@link ConcurrentModificationException}.
+  *
+  * @author Tom Tromey (tromey@redhat.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see System#identityHashCode(Object)
+  * @see Collection
+  * @see Map
+  * @see HashMap
+  * @see TreeMap
+  * @see LinkedHashMap
+  * @see WeakHashMap
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class IdentityHashMap extends AbstractMap
+   implements Map, Serializable, Cloneable
+ {
+   /** The default capacity. */
+   private static final int DEFAULT_CAPACITY = 21;
+ 
+   /**
+    * This object is used to mark deleted items. Package visible for use by
+    * nested classes.
+    */
+   static final Object tombstone = new Object();
+ 
+   /**
+    * This object is used to mark empty slots.  We need this because
+    * using null is ambiguous. Package visible for use by nested classes.
+    */
+   static final Object emptyslot = new Object();
+ 
+   /**
+    * Compatible with JDK 1.4.
+    */
+   private static final long serialVersionUID = 8188218128353913216L;
+ 
+   /**
+    * The number of mappings in the table. Package visible for use by nested
+    * classes.
+    * @serial
+    */
+   int size;
+ 
+   /**
+    * The table itself. Package visible for use by nested classes.
+    */
+   transient Object[] table;
+ 
+   /**
+    * The number of structural modifications made so far. Package visible for
+    * use by nested classes.
+    */
+   transient int modCount;
+ 
+   /**
+    * The cache for {@link #entrySet()}.
+    */
+   private transient Set entries;
+ 
+   /**
+    * The threshold for rehashing, which is 75% of (table.length / 2).
+    */
+   private transient int threshold;
+ 
+   /**
+    * Create a new IdentityHashMap with the default capacity (21 entries).
+    */
+   public IdentityHashMap()
+   {
+     this(DEFAULT_CAPACITY);
+   }
+ 
+   /**
+    * Create a new IdentityHashMap with the indicated number of
+    * entries.  If the number of elements added to this hash map
+    * exceeds this maximum, the map will grow itself; however, that
+    * incurs a performance penalty.
+    *
+    * @param max initial size
+    * @throws IllegalArgumentException if max is negative
+    */
+   public IdentityHashMap(int max)
+   {
+     if (max < 0)
+       throw new IllegalArgumentException();
+     // Need at least two slots, or hash() will break.
+     if (max < 2)
+       max = 2;
+     table = new Object[max << 1];
+     Arrays.fill(table, emptyslot);
+     threshold = (max >> 2) * 3;
+   }
+ 
+   /**
+    * Create a new IdentityHashMap whose contents are taken from the
+    * given Map.
+    *
+    * @param m The map whose elements are to be put in this map
+    * @throws NullPointerException if m is null
+    */
+   public IdentityHashMap(Map m)
+   {
+     this(Math.max(m.size() << 1, DEFAULT_CAPACITY));
+     putAll(m);
+   }
+ 
+   /**
+    * Remove all mappings from this map.
+    */
+   public void clear()
+   {
+     if (size != 0)
+       {
+         modCount++;
+         Arrays.fill(table, emptyslot);
+         size = 0;
+       }
+   }
+ 
+   /**
+    * Creates a shallow copy where keys and values are not cloned.
+    */
+   public Object clone()
+   {
+     try
+       {
+         IdentityHashMap copy = (IdentityHashMap) super.clone();
+         copy.table = (Object[]) table.clone();
+         copy.entries = null; // invalidate the cache
+         return copy;
+       }
+     catch (CloneNotSupportedException e)
+       {
+         // Can't happen.
+         return null;
+       }
+   }
+ 
+   /**
+    * Tests whether the specified key is in this map.  Unlike normal Maps,
+    * this test uses <code>entry == key</code> instead of
+    * <code>entry == null ? key == null : entry.equals(key)</code>.
+    *
+    * @param key the key to look for
+    * @return true if the key is contained in the map
+    * @see #containsValue(Object)
+    * @see #get(Object)
+    */
+   public boolean containsKey(Object key)
+   {
+     return key == table[hash(key)];
+   }
+ 
+   /**
+    * Returns true if this HashMap contains the value.  Unlike normal maps,
+    * this test uses <code>entry == value</code> instead of
+    * <code>entry == null ? value == null : entry.equals(value)</code>.
+    *
+    * @param value the value to search for in this HashMap
+    * @return true if at least one key maps to the value
+    * @see #containsKey(Object)
+    */
+   public boolean containsValue(Object value)
+   {
+     for (int i = table.length - 1; i > 0; i -= 2)
+       if (table[i] == value)
+         return true;
+     return false;
+   }
+ 
+   /**
+    * Returns a "set view" of this Map's entries. The set is backed by
+    * the Map, so changes in one show up in the other.  The set supports
+    * element removal, but not element addition.
+    * <p>
+    *
+    * <em>The semantics of this set, and of its contained entries, are
+    * different from the contract of Set and Map.Entry in order to make
+    * IdentityHashMap work.  This means that while you can compare these
+    * objects between IdentityHashMaps, comparing them with regular sets
+    * or entries is likely to have undefined behavior.</em>  The entries
+    * in this set are reference-based, rather than the normal object
+    * equality.  Therefore, <code>e1.equals(e2)</code> returns
+    * <code>e1.getKey() == e2.getKey() && e1.getValue() == e2.getValue()</code>,
+    * and <code>e.hashCode()</code> returns
+    * <code>System.identityHashCode(e.getKey()) ^
+    *       System.identityHashCode(e.getValue())</code>.
+    * <p>
+    *
+    * Note that the iterators for all three views, from keySet(), entrySet(),
+    * and values(), traverse the Map in the same sequence.
+    *
+    * @return a set view of the entries
+    * @see #keySet()
+    * @see #values()
+    * @see Map.Entry
+    */
+   public Set entrySet()
+   {
+     if (entries == null)
+       entries = new AbstractSet()
+       {
+         public int size()
+         {
+           return size;
+         }
+ 
+         public Iterator iterator()
+         {
+           return new IdentityIterator(ENTRIES);
+         }
+ 
+         public void clear()
+         {
+           IdentityHashMap.this.clear();
+         }
+ 
+         public boolean contains(Object o)
+         {
+           if (! (o instanceof Map.Entry))
+             return false;
+           Map.Entry m = (Map.Entry) o;
+           return m.getValue() == table[hash(m.getKey()) + 1];
+         }
+ 
+         public int hashCode()
+         {
+           return IdentityHashMap.this.hashCode();
+         }
+ 
+         public boolean remove(Object o)
+         {
+           if (! (o instanceof Map.Entry))
+             return false;
+           Object key = ((Map.Entry) o).getKey();
+           int h = hash(key);
+           if (table[h] == key)
+             {
+               size--;
+               modCount++;
+               table[h] = tombstone;
+               table[h + 1] = tombstone;
+               return true;
+             }
+           return false;
+         }
+       };
+     return entries;
+   }
+ 
+   /**
+    * Compares two maps for equality. This returns true only if both maps
+    * have the same reference-identity comparisons. While this returns
+    * <code>this.entrySet().equals(m.entrySet())</code> as specified by Map,
+    * this will not work with normal maps, since the entry set compares
+    * with == instead of .equals.
+    *
+    * @param o the object to compare to
+    * @return true if it is equal
+    */
+   public boolean equals(Object o)
+   {
+     // Why did Sun specify this one? The superclass does the right thing.
+     return super.equals(o);
+   }
+ 
+   /**
+    * Return the value in this Map associated with the supplied key, or
+    * <code>null</code> if the key maps to nothing.
+    *
+    * <p>NOTE: Since the value could also be null, you must use
+    * containsKey to see if this key actually maps to something.
+    * Unlike normal maps, this tests for the key with <code>entry ==
+    * key</code> instead of <code>entry == null ? key == null :
+    * entry.equals(key)</code>.
+    *
+    * @param key the key for which to fetch an associated value
+    * @return what the key maps to, if present
+    * @see #put(Object, Object)
+    * @see #containsKey(Object)
+    */
+   public Object get(Object key)
+   {
+     int h = hash(key);
+     return table[h] == key ? table[h + 1] : null;
+   }
+ 
+   /**
+    * Returns the hashcode of this map. This guarantees that two
+    * IdentityHashMaps that compare with equals() will have the same hash code,
+    * but may break with comparison to normal maps since it uses
+    * System.identityHashCode() instead of hashCode().
+    *
+    * @return the hash code
+    */
+   public int hashCode()
+   {
+     int hash = 0;
+     for (int i = table.length - 2; i >= 0; i -= 2)
+       {
+         Object key = table[i];
+         if (key == emptyslot || key == tombstone)
+           continue;
+         hash += (System.identityHashCode(key)
+                  ^ System.identityHashCode(table[i + 1]));
+       }
+     return hash;
+   }
+ 
+   /**
+    * Returns true if there are no key-value mappings currently in this Map
+    * @return <code>size() == 0</code>
+    */
+   public boolean isEmpty()
+   {
+     return size == 0;
+   }
+ 
+   /**
+    * Returns a "set view" of this Map's keys. The set is backed by the
+    * Map, so changes in one show up in the other.  The set supports
+    * element removal, but not element addition.
+    * <p>
+    *
+    * <em>The semantics of this set are different from the contract of Set
+    * in order to make IdentityHashMap work.  This means that while you can
+    * compare these objects between IdentityHashMaps, comparing them with
+    * regular sets is likely to have undefined behavior.</em>  The hashCode
+    * of the set is the sum of the identity hash codes, instead of the
+    * regular hashCodes, and equality is determined by reference instead
+    * of by the equals method.
+    * <p>
+    *
+    * @return a set view of the keys
+    * @see #values()
+    * @see #entrySet()
+    */
+   public Set keySet()
+   {
+     if (keys == null)
+       keys = new AbstractSet()
+       {
+         public int size()
+         {
+           return size;
+         }
+ 
+         public Iterator iterator()
+         {
+           return new IdentityIterator(KEYS);
+         }
+ 
+         public void clear()
+         {
+           IdentityHashMap.this.clear();
+         }
+ 
+         public boolean contains(Object o)
+         {
+           return containsKey(o);
+         }
+ 
+         public int hashCode()
+         {
+           int hash = 0;
+           for (int i = table.length - 2; i >= 0; i -= 2)
+             {
+               Object key = table[i];
+               if (key == emptyslot || key == tombstone)
+                 continue;
+               hash += System.identityHashCode(key);
+             }
+           return hash;
+ 
+         }
+ 
+         public boolean remove(Object o)
+         {
+           int h = hash(o);
+           if (table[h] == o)
+             {
+               size--;
+               modCount++;
+               table[h] = tombstone;
+               table[h + 1] = tombstone;
+               return true;
+             }
+           return false;
+         }
+       };
+     return keys;
+   }
+ 
+   /**
+    * Puts the supplied value into the Map, mapped by the supplied key.
+    * The value may be retrieved by any object which <code>equals()</code>
+    * this key. NOTE: Since the prior value could also be null, you must
+    * first use containsKey if you want to see if you are replacing the
+    * key's mapping.  Unlike normal maps, this tests for the key
+    * with <code>entry == key</code> instead of
+    * <code>entry == null ? key == null : entry.equals(key)</code>.
+    *
+    * @param key the key used to locate the value
+    * @param value the value to be stored in the HashMap
+    * @return the prior mapping of the key, or null if there was none
+    * @see #get(Object)
+    */
+   public Object put(Object key, Object value)
+   {
+     // Rehash if the load factor is too high.
+     if (size > threshold)
+       {
+         Object[] old = table;
+         // This isn't necessarily prime, but it is an odd number of key/value
+         // slots, which has a higher probability of fewer collisions.
+         table = new Object[(old.length * 2) + 2];
+         Arrays.fill(table, emptyslot);
+         size = 0;
+         threshold = (table.length >>> 3) * 3;
+ 
+         for (int i = old.length - 2; i >= 0; i -= 2)
+           {
+             Object oldkey = old[i];
+             if (oldkey != tombstone && oldkey != emptyslot)
+               // Just use put.  This isn't very efficient, but it is ok.
+               put(oldkey, old[i + 1]);
+           }
+       }
+ 
+     int h = hash(key);
+     if (table[h] == key)
+       {
+         Object r = table[h + 1];
+         table[h + 1] = value;
+         return r;
+       }
+ 
+     // At this point, we add a new mapping.
+     modCount++;
+     size++;
+     table[h] = key;
+     table[h + 1] = value;
+     return null;
+   }
+ 
+   /**
+    * Copies all of the mappings from the specified map to this. If a key
+    * is already in this map, its value is replaced.
+    *
+    * @param m the map to copy
+    * @throws NullPointerException if m is null
+    */
+   public void putAll(Map m)
+   {
+     // Why did Sun specify this one? The superclass does the right thing.
+     super.putAll(m);
+   }
+ 
+   /**
+    * Removes from the HashMap and returns the value which is mapped by
+    * the supplied key. If the key maps to nothing, then the HashMap
+    * remains unchanged, and <code>null</code> is returned.
+    *
+    * NOTE: Since the value could also be null, you must use
+    * containsKey to see if you are actually removing a mapping.
+    * Unlike normal maps, this tests for the key with <code>entry ==
+    * key</code> instead of <code>entry == null ? key == null :
+    * entry.equals(key)</code>.
+    *
+    * @param key the key used to locate the value to remove
+    * @return whatever the key mapped to, if present
+    */
+   public Object remove(Object key)
+   {
+     int h = hash(key);
+     if (table[h] == key)
+       {
+         modCount++;
+         size--;
+         Object r = table[h + 1];
+         table[h] = tombstone;
+         table[h + 1] = tombstone;
+         return r;
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns the number of kay-value mappings currently in this Map
+    * @return the size
+    */
+   public int size()
+   {
+     return size;
+   }
+ 
+   /**
+    * Returns a "collection view" (or "bag view") of this Map's values.
+    * The collection is backed by the Map, so changes in one show up
+    * in the other.  The collection supports element removal, but not element
+    * addition.
+    * <p>
+    *
+    * <em>The semantics of this set are different from the contract of
+    * Collection in order to make IdentityHashMap work.  This means that
+    * while you can compare these objects between IdentityHashMaps, comparing
+    * them with regular sets is likely to have undefined behavior.</em>
+    * Likewise, contains and remove go by == instead of equals().
+    * <p>
+    *
+    * @return a bag view of the values
+    * @see #keySet()
+    * @see #entrySet()
+    */
+   public Collection values()
+   {
+     if (values == null)
+       values = new AbstractCollection()
+       {
+         public int size()
+         {
+           return size;
+         }
+ 
+         public Iterator iterator()
+         {
+           return new IdentityIterator(VALUES);
+         }
+ 
+         public void clear()
+         {
+           IdentityHashMap.this.clear();
+         }
+ 
+         public boolean remove(Object o)
+         {
+           for (int i = table.length - 1; i > 0; i -= 2)
+             if (table[i] == o)
+               {
+                 modCount++;
+                 table[i - 1] = tombstone;
+                 table[i] = tombstone;
+                 size--;
+                 return true;
+               }
+           return false;
+         }
+       };
+     return values;
+   }
+ 
+   /**
+    * Helper method which computes the hash code, then traverses the table
+    * until it finds the key, or the spot where the key would go.
+    *
+    * @param key the key to check
+    * @return the index where the key belongs
+    * @see #IdentityHashMap(int)
+    * @see #put(Object, Object)
+    */
+   // Package visible for use by nested classes.
+   int hash(Object key)
+   {
+     // Implementation note: it is feasible for the table to have no
+     // emptyslots, if it is full with entries and tombstones, so we must
+     // remember where we started. If we encounter the key or an emptyslot,
+     // we are done.  If we encounter a tombstone, the key may still be in
+     // the array.  If we don't encounter the key, we use the first emptyslot
+     // or tombstone we encountered as the location where the key would go.
+     // By requiring at least 2 key/value slots, and rehashing at 75%
+     // capacity, we guarantee that there will always be either an emptyslot
+     // or a tombstone somewhere in the table.
+     int h = Math.abs(System.identityHashCode(key) % (table.length >> 1)) << 1;
+     int del = -1;
+     int save = h;
+ 
+     do
+       {
+         if (table[h] == key)
+           return h;
+         if (table[h] == emptyslot)
+           break;
+         if (table[h] == tombstone && del < 0)
+           del = h;
+         h -= 2;
+         if (h < 0)
+           h = table.length - 2;
+       }
+     while (h != save);
+ 
+     return del < 0 ? h : del;
+   }
+ 
+   /**
+    * This class allows parameterized iteration over IdentityHashMaps.  Based
+    * on its construction, it returns the key or value of a mapping, or
+    * creates the appropriate Map.Entry object with the correct fail-fast
+    * semantics and identity comparisons.
+    *
+    * @author Tom Tromey (tromey@redhat.com)
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private class IdentityIterator implements Iterator
+   {
+     /**
+      * The type of this Iterator: {@link #KEYS}, {@link #VALUES},
+      * or {@link #ENTRIES}.
+      */
+     final int type;
+     /** The number of modifications to the backing Map that we know about. */
+     int knownMod = modCount;
+     /** The number of elements remaining to be returned by next(). */
+     int count = size;
+     /** Location in the table. */
+     int loc = table.length;
+ 
+     /**
+      * Construct a new Iterator with the supplied type.
+      * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
+      */
+     IdentityIterator(int type)
+     {
+       this.type = type;
+     }
+ 
+     /**
+      * Returns true if the Iterator has more elements.
+      * @return true if there are more elements
+      * @throws ConcurrentModificationException if the Map was modified
+      */
+     public boolean hasNext()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       return count > 0;
+     }
+ 
+     /**
+      * Returns the next element in the Iterator's sequential view.
+      * @return the next element
+      * @throws ConcurrentModificationException if the Map was modified
+      * @throws NoSuchElementException if there is none
+      */
+     public Object next()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       if (count == 0)
+         throw new NoSuchElementException();
+       count--;
+ 
+       Object key;
+       do
+         {
+           loc -= 2;
+           key = table[loc];
+         }
+       while (key == emptyslot || key == tombstone);
+ 
+       return type == KEYS ? key : (type == VALUES ? table[loc + 1]
+                                    : new IdentityEntry(loc));
+     }
+ 
+     /**
+      * Removes from the backing Map the last element which was fetched
+      * with the <code>next()</code> method.
+      *
+      * @throws ConcurrentModificationException if the Map was modified
+      * @throws IllegalStateException if called when there is no last element
+      */
+     public void remove()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       if (loc == table.length || table[loc] == tombstone)
+         throw new IllegalStateException();
+       modCount++;
+       size--;
+       table[loc] = tombstone;
+       table[loc + 1] = tombstone;
+       knownMod++;
+     }
+   } // class IdentityIterator
+ 
+   /**
+    * This class provides Map.Entry objects for IdentityHashMaps.  The entry
+    * is fail-fast, and will throw a ConcurrentModificationException if
+    * the underlying map is modified, or if remove is called on the iterator
+    * that generated this object.  It is identity based, so it violates
+    * the general contract of Map.Entry, and is probably unsuitable for
+    * comparison to normal maps; but it works among other IdentityHashMaps.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private final class IdentityEntry implements Map.Entry
+   {
+     /** The location of this entry. */
+     final int loc;
+     /** The number of modifications to the backing Map that we know about. */
+     final int knownMod = modCount;
+ 
+     /**
+      * Constructs the Entry.
+      *
+      * @param loc the location of this entry in table
+      */
+     IdentityEntry(int loc)
+     {
+       this.loc = loc;
+     }
+ 
+     /**
+      * Compares the specified object with this entry, using identity
+      * semantics. Note that this can lead to undefined results with
+      * Entry objects created by normal maps.
+      *
+      * @param o the object to compare
+      * @return true if it is equal
+      * @throws ConcurrentModificationException if the entry was invalidated
+      *         by modifying the Map or calling Iterator.remove()
+      */
+     public boolean equals(Object o)
+     {
+       if (knownMod != modCount || table[loc] == tombstone)
+         throw new ConcurrentModificationException();
+       if (! (o instanceof Map.Entry))
+         return false;
+       Map.Entry e = (Map.Entry) o;
+       return table[loc] == e.getKey() && table[loc + 1] == e.getValue();
+     }
+ 
+     /**
+      * Returns the key of this entry.
+      *
+      * @return the key
+      * @throws ConcurrentModificationException if the entry was invalidated
+      *         by modifying the Map or calling Iterator.remove()
+      */
+     public Object getKey()
+     {
+       if (knownMod != modCount || table[loc] == tombstone)
+         throw new ConcurrentModificationException();
+       return table[loc];
+     }
+ 
+     /**
+      * Returns the value of this entry.
+      *
+      * @return the value
+      * @throws ConcurrentModificationException if the entry was invalidated
+      *         by modifying the Map or calling Iterator.remove()
+      */
+     public Object getValue()
+     {
+       if (knownMod != modCount || table[loc] == tombstone)
+         throw new ConcurrentModificationException();
+       return table[loc + 1];
+     }
+ 
+     /**
+      * Returns the hashcode of the entry, using identity semantics.
+      * Note that this can lead to undefined results with Entry objects
+      * created by normal maps.
+      *
+      * @return the hash code
+      * @throws ConcurrentModificationException if the entry was invalidated
+      *         by modifying the Map or calling Iterator.remove()
+      */
+     public int hashCode()
+     {
+       if (knownMod != modCount || table[loc] == tombstone)
+         throw new ConcurrentModificationException();
+       return (System.identityHashCode(table[loc])
+               ^ System.identityHashCode(table[loc + 1]));
+     }
+ 
+     /**
+      * Replaces the value of this mapping, and returns the old value.
+      *
+      * @param value the new value
+      * @return the old value
+      * @throws ConcurrentModificationException if the entry was invalidated
+      *         by modifying the Map or calling Iterator.remove()
+      */
+     public Object setValue(Object value)
+     {
+       if (knownMod != modCount || table[loc] == tombstone)
+         throw new ConcurrentModificationException();
+       Object r = table[loc + 1];
+       table[loc + 1] = value;
+       return r;
+     }
+ 
+     /**
+      * This provides a string representation of the entry. It is of the form
+      * "key=value", where string concatenation is used on key and value.
+      *
+      * @return the string representation
+      * @throws ConcurrentModificationException if the entry was invalidated
+      *         by modifying the Map or calling Iterator.remove()
+      */
+     public String toString()
+     {
+       if (knownMod != modCount || table[loc] == tombstone)
+         throw new ConcurrentModificationException();
+       return table[loc] + "=" + table[loc + 1];
+     }
+   } // class IdentityEntry
+ 
+   /**
+    * Reads the object from a serial stream.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if the underlying stream fails
+    * @throws IOException if the underlying stream fails
+    * @serialData expects the size (int), followed by that many key (Object)
+    *             and value (Object) pairs, with the pairs in no particular
+    *             order
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+ 
+     int num = s.readInt();
+     table = new Object[Math.max(num << 1, DEFAULT_CAPACITY) << 1];
+     // Read key/value pairs.
+     while (--num >= 0)
+       put(s.readObject(), s.readObject());
+   }
+ 
+   /**
+    * Writes the object to a serial stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    * @serialData outputs the size (int), followed by that many key (Object)
+    *             and value (Object) pairs, with the pairs in no particular
+    *             order
+    */
+   private void writeObject(ObjectOutputStream s)
+     throws IOException
+   {
+     s.defaultWriteObject();
+     s.writeInt(size);
+     for (int i = table.length - 2; i >= 0; i -= 2)
+       {
+         Object key = table[i];
+         if (key != tombstone && key != emptyslot)
+           {
+             s.writeObject(key);
+             s.writeObject(table[i + 1]);
+           }
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/InvalidPropertiesFormatException.java gcc-4.1.0/libjava/classpath/java/util/InvalidPropertiesFormatException.java
*** gcc-4.0.2/libjava/classpath/java/util/InvalidPropertiesFormatException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/InvalidPropertiesFormatException.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,57 ----
+ /* InvalidPropertiesFormatException.java
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ 
+ // FIXME: serialization methods should throw NotSerializableException
+ /** @since 1.5 */
+ public class InvalidPropertiesFormatException extends IOException
+ {
+   public InvalidPropertiesFormatException(String message)
+   {
+     super(message);
+   }
+ 
+   public InvalidPropertiesFormatException(Throwable cause)
+   {
+     super();
+     initCause(cause);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Iterator.java gcc-4.1.0/libjava/classpath/java/util/Iterator.java
*** gcc-4.0.2/libjava/classpath/java/util/Iterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Iterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,87 ----
+ /* Iterator.java -- Interface for iterating over collections
+    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * An object which iterates over a collection. An Iterator is used to return
+  * the items once only, in sequence, by successive calls to the next method.
+  * It is also possible to remove elements from the underlying collection by
+  * using the optional remove method. Iterator is intended as a replacement
+  * for the Enumeration interface of previous versions of Java, which did not
+  * have the remove method and had less conveniently named methods.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see ListIterator
+  * @see Enumeration
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface Iterator
+ {
+   /**
+    * Tests whether there are elements remaining in the collection. In other
+    * words, calling <code>next()</code> will not throw an exception.
+    *
+    * @return true if there is at least one more element in the collection
+    */
+   boolean hasNext();
+ 
+   /**
+    * Obtain the next element in the collection.
+    *
+    * @return the next element in the collection
+    * @throws NoSuchElementException if there are no more elements
+    */
+   Object next();
+ 
+   /**
+    * Remove from the underlying collection the last element returned by next
+    * (optional operation). This method can be called only once after each
+    * call to <code>next()</code>. It does not affect what will be returned
+    * by subsequent calls to next.
+    *
+    * @throws IllegalStateException if next has not yet been called or remove
+    *         has already been called since the last call to next.
+    * @throws UnsupportedOperationException if this Iterator does not support
+    *         the remove operation.
+    */
+   void remove();
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/LinkedHashMap.java gcc-4.1.0/libjava/classpath/java/util/LinkedHashMap.java
*** gcc-4.0.2/libjava/classpath/java/util/LinkedHashMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/LinkedHashMap.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,501 ----
+ /* LinkedHashMap.java -- a class providing hashtable data structure,
+    mapping Object --> Object, with linked list traversal
+    Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * This class provides a hashtable-backed implementation of the
+  * Map interface, with predictable traversal order.
+  * <p>
+  *
+  * It uses a hash-bucket approach; that is, hash collisions are handled
+  * by linking the new node off of the pre-existing node (or list of
+  * nodes).  In this manner, techniques such as linear probing (which
+  * can cause primary clustering) and rehashing (which does not fit very
+  * well with Java's method of precomputing hash codes) are avoided.  In
+  * addition, this maintains a doubly-linked list which tracks either
+  * insertion or access order.
+  * <p>
+  *
+  * In insertion order, calling <code>put</code> adds the key to the end of
+  * traversal, unless the key was already in the map; changing traversal order
+  * requires removing and reinserting a key.  On the other hand, in access
+  * order, all calls to <code>put</code> and <code>get</code> cause the
+  * accessed key to move to the end of the traversal list.  Note that any
+  * accesses to the map's contents via its collection views and iterators do
+  * not affect the map's traversal order, since the collection views do not
+  * call <code>put</code> or <code>get</code>.
+  * <p>
+  *
+  * One of the nice features of tracking insertion order is that you can
+  * copy a hashtable, and regardless of the implementation of the original,
+  * produce the same results when iterating over the copy.  This is possible
+  * without needing the overhead of <code>TreeMap</code>.
+  * <p>
+  *
+  * When using this {@link #LinkedHashMap(int, float, boolean) constructor},
+  * you can build an access-order mapping.  This can be used to implement LRU
+  * caches, for example.  By overriding {@link #removeEldestEntry(Map.Entry)},
+  * you can also control the removal of the oldest entry, and thereby do
+  * things like keep the map at a fixed size.
+  * <p>
+  *
+  * Under ideal circumstances (no collisions), LinkedHashMap offers O(1) 
+  * performance on most operations (<code>containsValue()</code> is,
+  * of course, O(n)).  In the worst case (all keys map to the same 
+  * hash code -- very unlikely), most operations are O(n).  Traversal is
+  * faster than in HashMap (proportional to the map size, and not the space
+  * allocated for the map), but other operations may be slower because of the
+  * overhead of the maintaining the traversal order list.
+  * <p>
+  *
+  * LinkedHashMap accepts the null key and null values.  It is not
+  * synchronized, so if you need multi-threaded access, consider using:<br>
+  * <code>Map m = Collections.synchronizedMap(new LinkedHashMap(...));</code>
+  * <p>
+  *
+  * The iterators are <i>fail-fast</i>, meaning that any structural
+  * modification, except for <code>remove()</code> called on the iterator
+  * itself, cause the iterator to throw a
+  * {@link ConcurrentModificationException} rather than exhibit
+  * non-deterministic behavior.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Object#hashCode()
+  * @see Collection
+  * @see Map
+  * @see HashMap
+  * @see TreeMap
+  * @see Hashtable
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class LinkedHashMap extends HashMap
+ {
+   /**
+    * Compatible with JDK 1.4.
+    */
+   private static final long serialVersionUID = 3801124242820219131L;
+ 
+   /**
+    * The oldest Entry to begin iteration at.
+    */
+   transient LinkedHashEntry root;
+ 
+   /**
+    * The iteration order of this linked hash map: <code>true</code> for
+    * access-order, <code>false</code> for insertion-order.
+    *
+    * @serial true for access order traversal
+    */
+   final boolean accessOrder;
+ 
+   /**
+    * Class to represent an entry in the hash table. Holds a single key-value
+    * pair and the doubly-linked insertion order list.
+    */
+   class LinkedHashEntry extends HashEntry
+   {
+     /**
+      * The predecessor in the iteration list. If this entry is the root
+      * (eldest), pred points to the newest entry.
+      */
+     LinkedHashEntry pred;
+ 
+     /** The successor in the iteration list, null if this is the newest. */
+     LinkedHashEntry succ;
+ 
+     /**
+      * Simple constructor.
+      *
+      * @param key the key
+      * @param value the value
+      */
+     LinkedHashEntry(Object key, Object value)
+     {
+       super(key, value);
+       if (root == null)
+         {
+           root = this;
+           pred = this;
+         }
+       else
+         {
+           pred = root.pred;
+           pred.succ = this;
+           root.pred = this;
+         }
+     }
+ 
+     /**
+      * Called when this entry is accessed via put or get. This version does
+      * the necessary bookkeeping to keep the doubly-linked list in order,
+      * after moving this element to the newest position in access order.
+      */
+     void access()
+     {
+       if (accessOrder && succ != null)
+         {
+           modCount++;
+           if (this == root)
+             {
+               root = succ;
+               pred.succ = this;
+               succ = null;
+             }
+           else
+             {
+               pred.succ = succ;
+               succ.pred = pred;
+               succ = null;
+               pred = root.pred;
+               pred.succ = this;
+               root.pred = this;
+             }
+         }
+     }
+ 
+     /**
+      * Called when this entry is removed from the map. This version does
+      * the necessary bookkeeping to keep the doubly-linked list in order.
+      *
+      * @return the value of this key as it is removed
+      */
+     Object cleanup()
+     {
+       if (this == root)
+         {
+           root = succ;
+           if (succ != null)
+             succ.pred = pred;
+         }
+       else if (succ == null)
+         {
+           pred.succ = null;
+           root.pred = pred;
+         }
+       else
+         {
+           pred.succ = succ;
+           succ.pred = pred;
+         }
+       return value;
+     }
+   } // class LinkedHashEntry
+ 
+   /**
+    * Construct a new insertion-ordered LinkedHashMap with the default
+    * capacity (11) and the default load factor (0.75).
+    */
+   public LinkedHashMap()
+   {
+     super();
+     accessOrder = false;
+   }
+ 
+   /**
+    * Construct a new insertion-ordered LinkedHashMap from the given Map,
+    * with initial capacity the greater of the size of <code>m</code> or
+    * the default of 11.
+    * <p>
+    *
+    * Every element in Map m will be put into this new HashMap, in the
+    * order of m's iterator.
+    *
+    * @param m a Map whose key / value pairs will be put into
+    *          the new HashMap.  <b>NOTE: key / value pairs
+    *          are not cloned in this constructor.</b>
+    * @throws NullPointerException if m is null
+    */
+   public LinkedHashMap(Map m)
+   {
+     super(m);
+     accessOrder = false;
+   }
+ 
+   /**
+    * Construct a new insertion-ordered LinkedHashMap with a specific
+    * inital capacity and default load factor of 0.75.
+    *
+    * @param initialCapacity the initial capacity of this HashMap (&gt;= 0)
+    * @throws IllegalArgumentException if (initialCapacity &lt; 0)
+    */
+   public LinkedHashMap(int initialCapacity)
+   {
+     super(initialCapacity);
+     accessOrder = false;
+   }
+ 
+   /**
+    * Construct a new insertion-orderd LinkedHashMap with a specific
+    * inital capacity and load factor.
+    *
+    * @param initialCapacity the initial capacity (&gt;= 0)
+    * @param loadFactor the load factor (&gt; 0, not NaN)
+    * @throws IllegalArgumentException if (initialCapacity &lt; 0) ||
+    *                                     ! (loadFactor &gt; 0.0)
+    */
+   public LinkedHashMap(int initialCapacity, float loadFactor)
+   {
+     super(initialCapacity, loadFactor);
+     accessOrder = false;
+   }
+ 
+   /**
+    * Construct a new LinkedHashMap with a specific inital capacity, load
+    * factor, and ordering mode.
+    *
+    * @param initialCapacity the initial capacity (&gt;=0)
+    * @param loadFactor the load factor (&gt;0, not NaN)
+    * @param accessOrder true for access-order, false for insertion-order
+    * @throws IllegalArgumentException if (initialCapacity &lt; 0) ||
+    *                                     ! (loadFactor &gt; 0.0)
+    */
+   public LinkedHashMap(int initialCapacity, float loadFactor,
+                        boolean accessOrder)
+   {
+     super(initialCapacity, loadFactor);
+     this.accessOrder = accessOrder;
+   }
+ 
+   /**
+    * Clears the Map so it has no keys. This is O(1).
+    */
+   public void clear()
+   {
+     super.clear();
+     root = null;
+   }
+ 
+   /**
+    * Returns <code>true</code> if this HashMap contains a value
+    * <code>o</code>, such that <code>o.equals(value)</code>.
+    *
+    * @param value the value to search for in this HashMap
+    * @return <code>true</code> if at least one key maps to the value
+    */
+   public boolean containsValue(Object value)
+   {
+     LinkedHashEntry e = root;
+     while (e != null)
+       {
+         if (equals(value, e.value))
+           return true;
+         e = e.succ;
+       }
+     return false;
+   }
+ 
+   /**
+    * Return the value in this Map associated with the supplied key,
+    * or <code>null</code> if the key maps to nothing.  If this is an
+    * access-ordered Map and the key is found, this performs structural
+    * modification, moving the key to the newest end of the list. NOTE:
+    * Since the value could also be null, you must use containsKey to
+    * see if this key actually maps to something.
+    *
+    * @param key the key for which to fetch an associated value
+    * @return what the key maps to, if present
+    * @see #put(Object, Object)
+    * @see #containsKey(Object)
+    */
+   public Object get(Object key)
+   {
+     int idx = hash(key);
+     HashEntry e = buckets[idx];
+     while (e != null)
+       {
+         if (equals(key, e.key))
+           {
+             e.access();
+             return e.value;
+           }
+         e = e.next;
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns <code>true</code> if this map should remove the eldest entry.
+    * This method is invoked by all calls to <code>put</code> and
+    * <code>putAll</code> which place a new entry in the map, providing
+    * the implementer an opportunity to remove the eldest entry any time
+    * a new one is added.  This can be used to save memory usage of the
+    * hashtable, as well as emulating a cache, by deleting stale entries.
+    * <p>
+    *
+    * For example, to keep the Map limited to 100 entries, override as follows:
+    * <pre>
+    * private static final int MAX_ENTRIES = 100;
+    * protected boolean removeEldestEntry(Map.Entry eldest)
+    * {
+    *   return size() &gt; MAX_ENTRIES;
+    * }
+    * </pre><p>
+    *
+    * Typically, this method does not modify the map, but just uses the
+    * return value as an indication to <code>put</code> whether to proceed.
+    * However, if you override it to modify the map, you must return false
+    * (indicating that <code>put</code> should leave the modified map alone),
+    * or you face unspecified behavior.  Remember that in access-order mode,
+    * even calling <code>get</code> is a structural modification, but using
+    * the collections views (such as <code>keySet</code>) is not.
+    * <p>
+    *
+    * This method is called after the eldest entry has been inserted, so
+    * if <code>put</code> was called on a previously empty map, the eldest
+    * entry is the one you just put in! The default implementation just
+    * returns <code>false</code>, so that this map always behaves like
+    * a normal one with unbounded growth.
+    *
+    * @param eldest the eldest element which would be removed if this
+    *        returns true. For an access-order map, this is the least
+    *        recently accessed; for an insertion-order map, this is the
+    *        earliest element inserted.
+    * @return true if <code>eldest</code> should be removed
+    */
+   protected boolean removeEldestEntry(Map.Entry eldest)
+   {
+     return false;
+   }
+ 
+   /**
+    * Helper method called by <code>put</code>, which creates and adds a
+    * new Entry, followed by performing bookkeeping (like removeEldestEntry).
+    *
+    * @param key the key of the new Entry
+    * @param value the value
+    * @param idx the index in buckets where the new Entry belongs
+    * @param callRemove whether to call the removeEldestEntry method
+    * @see #put(Object, Object)
+    * @see #removeEldestEntry(Map.Entry)
+    * @see LinkedHashEntry#LinkedHashEntry(Object, Object)
+    */
+   void addEntry(Object key, Object value, int idx, boolean callRemove)
+   {
+     LinkedHashEntry e = new LinkedHashEntry(key, value);
+     e.next = buckets[idx];
+     buckets[idx] = e;
+     if (callRemove && removeEldestEntry(root))
+       remove(root.key);
+   }
+ 
+   /**
+    * Helper method, called by clone() to reset the doubly-linked list.
+    *
+    * @param m the map to add entries from
+    * @see #clone()
+    */
+   void putAllInternal(Map m)
+   {
+     root = null;
+     super.putAllInternal(m);
+   }
+ 
+   /**
+    * Generates a parameterized iterator. This allows traversal to follow
+    * the doubly-linked list instead of the random bin order of HashMap.
+    *
+    * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
+    * @return the appropriate iterator
+    */
+   Iterator iterator(final int type)
+   {
+     return new Iterator()
+     {
+       /** The current Entry. */
+       LinkedHashEntry current = root;
+ 
+       /** The previous Entry returned by next(). */
+       LinkedHashEntry last;
+ 
+       /** The number of known modifications to the backing Map. */
+       int knownMod = modCount;
+ 
+       /**
+        * Returns true if the Iterator has more elements.
+        *
+        * @return true if there are more elements
+        * @throws ConcurrentModificationException if the HashMap was modified
+        */
+       public boolean hasNext()
+       {
+         if (knownMod != modCount)
+           throw new ConcurrentModificationException();
+         return current != null;
+       }
+ 
+       /**
+        * Returns the next element in the Iterator's sequential view.
+        *
+        * @return the next element
+        * @throws ConcurrentModificationException if the HashMap was modified
+        * @throws NoSuchElementException if there is none
+        */
+       public Object next()
+       {
+         if (knownMod != modCount)
+           throw new ConcurrentModificationException();
+         if (current == null)
+           throw new NoSuchElementException();
+         last = current;
+         current = current.succ;
+         return type == VALUES ? last.value : type == KEYS ? last.key : last;
+       }
+       
+       /**
+        * Removes from the backing HashMap the last element which was fetched
+        * with the <code>next()</code> method.
+        *
+        * @throws ConcurrentModificationException if the HashMap was modified
+        * @throws IllegalStateException if called when there is no last element
+        */
+       public void remove()
+       {
+         if (knownMod != modCount)
+           throw new ConcurrentModificationException();
+         if (last == null)
+           throw new IllegalStateException();
+         LinkedHashMap.this.remove(last.key);
+         last = null;
+         knownMod++;
+       }
+     };
+   }
+ } // class LinkedHashMap
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/LinkedHashSet.java gcc-4.1.0/libjava/classpath/java/util/LinkedHashSet.java
*** gcc-4.0.2/libjava/classpath/java/util/LinkedHashSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/LinkedHashSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,160 ----
+ /* LinkedHashSet.java -- a set backed by a LinkedHashMap, for linked
+    list traversal.
+    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * This class provides a hashtable-backed implementation of the
+  * Set interface, with predictable traversal order.
+  * <p>
+  *
+  * It uses a hash-bucket approach; that is, hash collisions are handled
+  * by linking the new node off of the pre-existing node (or list of
+  * nodes).  In this manner, techniques such as linear probing (which
+  * can cause primary clustering) and rehashing (which does not fit very
+  * well with Java's method of precomputing hash codes) are avoided.  In
+  * addition, this maintains a doubly-linked list which tracks insertion
+  * order.  Note that the insertion order is not modified if an
+  * <code>add</code> simply reinserts an element in the set.
+  * <p>
+  *
+  * One of the nice features of tracking insertion order is that you can
+  * copy a set, and regardless of the implementation of the original,
+  * produce the same results when iterating over the copy.  This is possible
+  * without needing the overhead of <code>TreeSet</code>.
+  * <p>
+  *
+  * Under ideal circumstances (no collisions), LinkedHashSet offers O(1) 
+  * performance on most operations.  In the worst case (all elements map
+  * to the same hash code -- very unlikely), most operations are O(n).
+  * <p>
+  *
+  * LinkedHashSet accepts the null entry.  It is not synchronized, so if
+  * you need multi-threaded access, consider using:<br>
+  * <code>Set s = Collections.synchronizedSet(new LinkedHashSet(...));</code>
+  * <p>
+  *
+  * The iterators are <i>fail-fast</i>, meaning that any structural
+  * modification, except for <code>remove()</code> called on the iterator
+  * itself, cause the iterator to throw a
+  * {@link ConcurrentModificationException} rather than exhibit
+  * non-deterministic behavior.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Object#hashCode()
+  * @see Collection
+  * @see Set
+  * @see HashSet
+  * @see TreeSet
+  * @see Collections#synchronizedSet(Set)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class LinkedHashSet extends HashSet
+   implements Set, Cloneable, Serializable
+ {
+   /**
+    * Compatible with JDK 1.4.
+    */
+   private static final long serialVersionUID = -2851667679971038690L;
+ 
+   /**
+    * Construct a new, empty HashSet whose backing HashMap has the default
+    * capacity (11) and loadFacor (0.75).
+    */
+   public LinkedHashSet()
+   {
+     super();
+   }
+ 
+   /**
+    * Construct a new, empty HashSet whose backing HashMap has the supplied
+    * capacity and the default load factor (0.75).
+    *
+    * @param initialCapacity the initial capacity of the backing HashMap
+    * @throws IllegalArgumentException if the capacity is negative
+    */
+   public LinkedHashSet(int initialCapacity)
+   {
+     super(initialCapacity);
+   }
+ 
+   /**
+    * Construct a new, empty HashSet whose backing HashMap has the supplied
+    * capacity and load factor.
+    *
+    * @param initialCapacity the initial capacity of the backing HashMap
+    * @param loadFactor the load factor of the backing HashMap
+    * @throws IllegalArgumentException if either argument is negative, or
+    *         if loadFactor is POSITIVE_INFINITY or NaN
+    */
+   public LinkedHashSet(int initialCapacity, float loadFactor)
+   {
+     super(initialCapacity, loadFactor);
+   }
+ 
+   /**
+    * Construct a new HashSet with the same elements as are in the supplied
+    * collection (eliminating any duplicates, of course). The backing storage
+    * has twice the size of the collection, or the default size of 11,
+    * whichever is greater; and the default load factor (0.75).
+    *
+    * @param c a collection of initial set elements
+    * @throws NullPointerException if c is null
+    */
+   public LinkedHashSet(Collection c)
+   {
+     super(c);
+   }
+ 
+   /**
+    * Helper method which initializes the backing Map.
+    *
+    * @param capacity the initial capacity
+    * @param load the initial load factor
+    * @return the backing HashMap
+    */
+   HashMap init(int capacity, float load)
+   {
+     return new LinkedHashMap(capacity, load);
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/LinkedList.java gcc-4.1.0/libjava/classpath/java/util/LinkedList.java
*** gcc-4.0.2/libjava/classpath/java/util/LinkedList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/LinkedList.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,958 ----
+ /* LinkedList.java -- Linked list implementation of the List interface
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.lang.reflect.Array;
+ 
+ /**
+  * Linked list implementation of the List interface. In addition to the
+  * methods of the List interface, this class provides access to the first
+  * and last list elements in O(1) time for easy stack, queue, or double-ended
+  * queue (deque) creation. The list is doubly-linked, with traversal to a
+  * given index starting from the end closest to the element.<p>
+  *
+  * LinkedList is not synchronized, so if you need multi-threaded access,
+  * consider using:<br>
+  * <code>List l = Collections.synchronizedList(new LinkedList(...));</code>
+  * <p>
+  *
+  * The iterators are <i>fail-fast</i>, meaning that any structural
+  * modification, except for <code>remove()</code> called on the iterator
+  * itself, cause the iterator to throw a
+  * {@link ConcurrentModificationException} rather than exhibit
+  * non-deterministic behavior.
+  *
+  * @author Original author unknown
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see List
+  * @see ArrayList
+  * @see Vector
+  * @see Collections#synchronizedList(List)
+  * @since 1.2
+  * @status missing javadoc, but complete to 1.4
+  */
+ public class LinkedList extends AbstractSequentialList
+   implements List, Cloneable, Serializable
+ {
+   /**
+    * Compatible with JDK 1.2.
+    */
+   private static final long serialVersionUID = 876323262645176354L;
+ 
+   /**
+    * The first element in the list.
+    */
+   transient Entry first;
+ 
+   /**
+    * The last element in the list.
+    */
+   transient Entry last;
+ 
+   /**
+    * The current length of the list.
+    */
+   transient int size = 0;
+ 
+   /**
+    * Class to represent an entry in the list. Holds a single element.
+    */
+   private static final class Entry
+   {
+     /** The element in the list. */
+     Object data;
+ 
+     /** The next list entry, null if this is last. */
+     Entry next;
+ 
+     /** The previous list entry, null if this is first. */
+     Entry previous;
+ 
+     /**
+      * Construct an entry.
+      * @param data the list element
+      */
+     Entry(Object data)
+     {
+       this.data = data;
+     }
+   } // class Entry
+ 
+   /**
+    * Obtain the Entry at a given position in a list. This method of course
+    * takes linear time, but it is intelligent enough to take the shorter of the
+    * paths to get to the Entry required. This implies that the first or last
+    * entry in the list is obtained in constant time, which is a very desirable
+    * property.
+    * For speed and flexibility, range checking is not done in this method:
+    * Incorrect values will be returned if (n &lt; 0) or (n &gt;= size).
+    *
+    * @param n the number of the entry to get
+    * @return the entry at position n
+    */
+   // Package visible for use in nested classes.
+   Entry getEntry(int n)
+   {
+     Entry e;
+     if (n < size / 2)
+       {
+         e = first;
+         // n less than size/2, iterate from start
+         while (n-- > 0)
+           e = e.next;
+       }
+     else
+       {
+         e = last;
+         // n greater than size/2, iterate from end
+         while (++n < size)
+           e = e.previous;
+       }
+     return e;
+   }
+ 
+   /**
+    * Remove an entry from the list. This will adjust size and deal with
+    *  `first' and  `last' appropriatly.
+    *
+    * @param e the entry to remove
+    */
+   // Package visible for use in nested classes.
+   void removeEntry(Entry e)
+   {
+     modCount++;
+     size--;
+     if (size == 0)
+       first = last = null;
+     else
+       {
+         if (e == first)
+           {
+             first = e.next;
+             e.next.previous = null;
+           }
+         else if (e == last)
+           {
+             last = e.previous;
+             e.previous.next = null;
+           }
+         else
+           {
+             e.next.previous = e.previous;
+             e.previous.next = e.next;
+           }
+       }
+   }
+ 
+   /**
+    * Checks that the index is in the range of possible elements (inclusive).
+    *
+    * @param index the index to check
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size
+    */
+   private void checkBoundsInclusive(int index)
+   {
+     if (index < 0 || index > size)
+       throw new IndexOutOfBoundsException("Index: " + index + ", Size:"
+                                           + size);
+   }
+ 
+   /**
+    * Checks that the index is in the range of existing elements (exclusive).
+    *
+    * @param index the index to check
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size
+    */
+   private void checkBoundsExclusive(int index)
+   {
+     if (index < 0 || index >= size)
+       throw new IndexOutOfBoundsException("Index: " + index + ", Size:"
+                                           + size);
+   }
+ 
+   /**
+    * Create an empty linked list.
+    */
+   public LinkedList()
+   {
+   }
+ 
+   /**
+    * Create a linked list containing the elements, in order, of a given
+    * collection.
+    *
+    * @param c the collection to populate this list from
+    * @throws NullPointerException if c is null
+    */
+   public LinkedList(Collection c)
+   {
+     addAll(c);
+   }
+ 
+   /**
+    * Returns the first element in the list.
+    *
+    * @return the first list element
+    * @throws NoSuchElementException if the list is empty
+    */
+   public Object getFirst()
+   {
+     if (size == 0)
+       throw new NoSuchElementException();
+     return first.data;
+   }
+ 
+   /**
+    * Returns the last element in the list.
+    *
+    * @return the last list element
+    * @throws NoSuchElementException if the list is empty
+    */
+   public Object getLast()
+   {
+     if (size == 0)
+       throw new NoSuchElementException();
+     return last.data;
+   }
+ 
+   /**
+    * Remove and return the first element in the list.
+    *
+    * @return the former first element in the list
+    * @throws NoSuchElementException if the list is empty
+    */
+   public Object removeFirst()
+   {
+     if (size == 0)
+       throw new NoSuchElementException();
+     modCount++;
+     size--;
+     Object r = first.data;
+ 
+     if (first.next != null)
+       first.next.previous = null;
+     else
+       last = null;
+ 
+     first = first.next;
+ 
+     return r;
+   }
+ 
+   /**
+    * Remove and return the last element in the list.
+    *
+    * @return the former last element in the list
+    * @throws NoSuchElementException if the list is empty
+    */
+   public Object removeLast()
+   {
+     if (size == 0)
+       throw new NoSuchElementException();
+     modCount++;
+     size--;
+     Object r = last.data;
+ 
+     if (last.previous != null)
+       last.previous.next = null;
+     else
+       first = null;
+ 
+     last = last.previous;
+ 
+     return r;
+   }
+ 
+   /**
+    * Insert an element at the first of the list.
+    *
+    * @param o the element to insert
+    */
+   public void addFirst(Object o)
+   {
+     Entry e = new Entry(o);
+ 
+     modCount++;
+     if (size == 0)
+       first = last = e;
+     else
+       {
+         e.next = first;
+         first.previous = e;
+         first = e;
+       }
+     size++;
+   }
+ 
+   /**
+    * Insert an element at the last of the list.
+    *
+    * @param o the element to insert
+    */
+   public void addLast(Object o)
+   {
+     addLastEntry(new Entry(o));
+   }
+ 
+   /**
+    * Inserts an element at the end of the list.
+    *
+    * @param e the entry to add
+    */
+   private void addLastEntry(Entry e)
+   {
+     modCount++;
+     if (size == 0)
+       first = last = e;
+     else
+       {
+         e.previous = last;
+         last.next = e;
+         last = e;
+       }
+     size++;
+   }
+ 
+   /**
+    * Returns true if the list contains the given object. Comparison is done by
+    * <code>o == null ? e = null : o.equals(e)</code>.
+    *
+    * @param o the element to look for
+    * @return true if it is found
+    */
+   public boolean contains(Object o)
+   {
+     Entry e = first;
+     while (e != null)
+       {
+         if (equals(o, e.data))
+           return true;
+         e = e.next;
+       }
+     return false;
+   }
+ 
+   /**
+    * Returns the size of the list.
+    *
+    * @return the list size
+    */
+   public int size()
+   {
+     return size;
+   }
+ 
+   /**
+    * Adds an element to the end of the list.
+    *
+    * @param o the entry to add
+    * @return true, as it always succeeds
+    */
+   public boolean add(Object o)
+   {
+     addLastEntry(new Entry(o));
+     return true;
+   }
+ 
+   /**
+    * Removes the entry at the lowest index in the list that matches the given
+    * object, comparing by <code>o == null ? e = null : o.equals(e)</code>.
+    *
+    * @param o the object to remove
+    * @return true if an instance of the object was removed
+    */
+   public boolean remove(Object o)
+   {
+     Entry e = first;
+     while (e != null)
+       {
+         if (equals(o, e.data))
+           {
+             removeEntry(e);
+             return true;
+           }
+         e = e.next;
+       }
+     return false;
+   }
+ 
+   /**
+    * Append the elements of the collection in iteration order to the end of
+    * this list. If this list is modified externally (for example, if this
+    * list is the collection), behavior is unspecified.
+    *
+    * @param c the collection to append
+    * @return true if the list was modified
+    * @throws NullPointerException if c is null
+    */
+   public boolean addAll(Collection c)
+   {
+     return addAll(size, c);
+   }
+ 
+   /**
+    * Insert the elements of the collection in iteration order at the given
+    * index of this list. If this list is modified externally (for example,
+    * if this list is the collection), behavior is unspecified.
+    *
+    * @param c the collection to append
+    * @return true if the list was modified
+    * @throws NullPointerException if c is null
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    */
+   public boolean addAll(int index, Collection c)
+   {
+     checkBoundsInclusive(index);
+     int csize = c.size();
+ 
+     if (csize == 0)
+       return false;
+ 
+     Iterator itr = c.iterator();
+ 
+     // Get the entries just before and after index. If index is at the start
+     // of the list, BEFORE is null. If index is at the end of the list, AFTER
+     // is null. If the list is empty, both are null.
+     Entry after = null;
+     Entry before = null;
+     if (index != size)
+       {
+         after = getEntry(index);
+         before = after.previous;
+       }
+     else
+       before = last;
+ 
+     // Create the first new entry. We do not yet set the link from `before'
+     // to the first entry, in order to deal with the case where (c == this).
+     // [Actually, we don't have to handle this case to fufill the
+     // contract for addAll(), but Sun's implementation appears to.]
+     Entry e = new Entry(itr.next());
+     e.previous = before;
+     Entry prev = e;
+     Entry firstNew = e;
+ 
+     // Create and link all the remaining entries.
+     for (int pos = 1; pos < csize; pos++)
+       {
+         e = new Entry(itr.next());
+         e.previous = prev;
+         prev.next = e;
+         prev = e;
+       }
+ 
+     // Link the new chain of entries into the list.
+     modCount++;
+     size += csize;
+     prev.next = after;
+     if (after != null)
+       after.previous = e;
+     else
+       last = e;
+ 
+     if (before != null)
+       before.next = firstNew;
+     else
+       first = firstNew;
+     return true;
+   }
+ 
+   /**
+    * Remove all elements from this list.
+    */
+   public void clear()
+   {
+     if (size > 0)
+       {
+         modCount++;
+         first = null;
+         last = null;
+         size = 0;
+       }
+   }
+ 
+   /**
+    * Return the element at index.
+    *
+    * @param index the place to look
+    * @return the element at index
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    */
+   public Object get(int index)
+   {
+     checkBoundsExclusive(index);
+     return getEntry(index).data;
+   }
+ 
+   /**
+    * Replace the element at the given location in the list.
+    *
+    * @param index which index to change
+    * @param o the new element
+    * @return the prior element
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    */
+   public Object set(int index, Object o)
+   {
+     checkBoundsExclusive(index);
+     Entry e = getEntry(index);
+     Object old = e.data;
+     e.data = o;
+     return old;
+   }
+ 
+   /**
+    * Inserts an element in the given position in the list.
+    *
+    * @param index where to insert the element
+    * @param o the element to insert
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    */
+   public void add(int index, Object o)
+   {
+     checkBoundsInclusive(index);
+     Entry e = new Entry(o);
+ 
+     if (index < size)
+       {
+         modCount++;
+         Entry after = getEntry(index);
+         e.next = after;
+         e.previous = after.previous;
+         if (after.previous == null)
+           first = e;
+         else
+           after.previous.next = e;
+         after.previous = e;
+         size++;
+       }
+     else
+       addLastEntry(e);
+   }
+ 
+   /**
+    * Removes the element at the given position from the list.
+    *
+    * @param index the location of the element to remove
+    * @return the removed element
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    */
+   public Object remove(int index)
+   {
+     checkBoundsExclusive(index);
+     Entry e = getEntry(index);
+     removeEntry(e);
+     return e.data;
+   }
+ 
+   /**
+    * Returns the first index where the element is located in the list, or -1.
+    *
+    * @param o the element to look for
+    * @return its position, or -1 if not found
+    */
+   public int indexOf(Object o)
+   {
+     int index = 0;
+     Entry e = first;
+     while (e != null)
+       {
+         if (equals(o, e.data))
+           return index;
+         index++;
+         e = e.next;
+       }
+     return -1;
+   }
+ 
+   /**
+    * Returns the last index where the element is located in the list, or -1.
+    *
+    * @param o the element to look for
+    * @return its position, or -1 if not found
+    */
+   public int lastIndexOf(Object o)
+   {
+     int index = size - 1;
+     Entry e = last;
+     while (e != null)
+       {
+         if (equals(o, e.data))
+           return index;
+         index--;
+         e = e.previous;
+       }
+     return -1;
+   }
+ 
+   /**
+    * Obtain a ListIterator over this list, starting at a given index. The
+    * ListIterator returned by this method supports the add, remove and set
+    * methods.
+    *
+    * @param index the index of the element to be returned by the first call to
+    *        next(), or size() to be initially positioned at the end of the list
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    */
+   public ListIterator listIterator(int index)
+   {
+     checkBoundsInclusive(index);
+     return new LinkedListItr(index);
+   }
+ 
+   /**
+    * Create a shallow copy of this LinkedList (the elements are not cloned).
+    *
+    * @return an object of the same class as this object, containing the
+    *         same elements in the same order
+    */
+   public Object clone()
+   {
+     LinkedList copy = null;
+     try
+       {
+         copy = (LinkedList) super.clone();
+       }
+     catch (CloneNotSupportedException ex)
+       {
+       }
+     copy.clear();
+     copy.addAll(this);
+     return copy;
+   }
+ 
+   /**
+    * Returns an array which contains the elements of the list in order.
+    *
+    * @return an array containing the list elements
+    */
+   public Object[] toArray()
+   {
+     Object[] array = new Object[size];
+     Entry e = first;
+     for (int i = 0; i < size; i++)
+       {
+         array[i] = e.data;
+         e = e.next;
+       }
+     return array;
+   }
+ 
+   /**
+    * Returns an Array whose component type is the runtime component type of
+    * the passed-in Array.  The returned Array is populated with all of the
+    * elements in this LinkedList.  If the passed-in Array is not large enough
+    * to store all of the elements in this List, a new Array will be created 
+    * and returned; if the passed-in Array is <i>larger</i> than the size
+    * of this List, then size() index will be set to null.
+    *
+    * @param a the passed-in Array
+    * @return an array representation of this list
+    * @throws ArrayStoreException if the runtime type of a does not allow
+    *         an element in this list
+    * @throws NullPointerException if a is null
+    */
+   public Object[] toArray(Object[] a)
+   {
+     if (a.length < size)
+       a = (Object[]) Array.newInstance(a.getClass().getComponentType(), size);
+     else if (a.length > size)
+       a[size] = null;
+     Entry e = first;
+     for (int i = 0; i < size; i++)
+       {
+         a[i] = e.data;
+         e = e.next;
+       }
+     return a;
+   }
+ 
+   /**
+    * Serializes this object to the given stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    * @serialData the size of the list (int), followed by all the elements
+    *             (Object) in proper order
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     s.defaultWriteObject();
+     s.writeInt(size);
+     Entry e = first;
+     while (e != null)
+       {
+         s.writeObject(e.data);
+         e = e.next;
+       }
+   }
+ 
+   /**
+    * Deserializes this object from the given stream.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if the underlying stream fails
+    * @throws IOException if the underlying stream fails
+    * @serialData the size of the list (int), followed by all the elements
+    *             (Object) in proper order
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     int i = s.readInt();
+     while (--i >= 0)
+       addLastEntry(new Entry(s.readObject()));
+   }
+ 
+   /**
+    * A ListIterator over the list. This class keeps track of its
+    * position in the list and the two list entries it is between.
+    *
+    * @author Original author unknown
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private final class LinkedListItr implements ListIterator
+   {
+     /** Number of modifications we know about. */
+     private int knownMod = modCount;
+ 
+     /** Entry that will be returned by next(). */
+     private Entry next;
+ 
+     /** Entry that will be returned by previous(). */
+     private Entry previous;
+ 
+     /** Entry that will be affected by remove() or set(). */
+     private Entry lastReturned;
+ 
+     /** Index of `next'. */
+     private int position;
+ 
+     /**
+      * Initialize the iterator.
+      *
+      * @param index the initial index
+      */
+     LinkedListItr(int index)
+     {
+       if (index == size)
+         {
+           next = null;
+           previous = last;
+         }
+       else
+         {
+           next = getEntry(index);
+           previous = next.previous;
+         }
+       position = index;
+     }
+ 
+     /**
+      * Checks for iterator consistency.
+      *
+      * @throws ConcurrentModificationException if the list was modified
+      */
+     private void checkMod()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+     }
+ 
+     /**
+      * Returns the index of the next element.
+      *
+      * @return the next index
+      * @throws ConcurrentModificationException if the list was modified
+      */
+     public int nextIndex()
+     {
+       checkMod();
+       return position;
+     }
+ 
+     /**
+      * Returns the index of the previous element.
+      *
+      * @return the previous index
+      * @throws ConcurrentModificationException if the list was modified
+      */
+     public int previousIndex()
+     {
+       checkMod();
+       return position - 1;
+     }
+ 
+     /**
+      * Returns true if more elements exist via next.
+      *
+      * @return true if next will succeed
+      * @throws ConcurrentModificationException if the list was modified
+      */
+     public boolean hasNext()
+     {
+       checkMod();
+       return (next != null);
+     }
+ 
+     /**
+      * Returns true if more elements exist via previous.
+      *
+      * @return true if previous will succeed
+      * @throws ConcurrentModificationException if the list was modified
+      */
+     public boolean hasPrevious()
+     {
+       checkMod();
+       return (previous != null);
+     }
+ 
+     /**
+      * Returns the next element.
+      *
+      * @return the next element
+      * @throws ConcurrentModificationException if the list was modified
+      * @throws NoSuchElementException if there is no next
+      */
+     public Object next()
+     {
+       checkMod();
+       if (next == null)
+         throw new NoSuchElementException();
+       position++;
+       lastReturned = previous = next;
+       next = lastReturned.next;
+       return lastReturned.data;
+     }
+ 
+     /**
+      * Returns the previous element.
+      *
+      * @return the previous element
+      * @throws ConcurrentModificationException if the list was modified
+      * @throws NoSuchElementException if there is no previous
+      */
+     public Object previous()
+     {
+       checkMod();
+       if (previous == null)
+         throw new NoSuchElementException();
+       position--;
+       lastReturned = next = previous;
+       previous = lastReturned.previous;
+       return lastReturned.data;
+     }
+ 
+     /**
+      * Remove the most recently returned element from the list.
+      *
+      * @throws ConcurrentModificationException if the list was modified
+      * @throws IllegalStateException if there was no last element
+      */
+     public void remove()
+     {
+       checkMod();
+       if (lastReturned == null)
+         throw new IllegalStateException();
+ 
+       // Adjust the position to before the removed element, if the element
+       // being removed is behind the cursor.
+       if (lastReturned == previous)
+         position--;
+ 
+       next = lastReturned.next;
+       previous = lastReturned.previous;
+       removeEntry(lastReturned);
+       knownMod++;
+ 
+       lastReturned = null;
+     }
+ 
+     /**
+      * Adds an element between the previous and next, and advance to the next.
+      *
+      * @param o the element to add
+      * @throws ConcurrentModificationException if the list was modified
+      */
+     public void add(Object o)
+     {
+       checkMod();
+       modCount++;
+       knownMod++;
+       size++;
+       position++;
+       Entry e = new Entry(o);
+       e.previous = previous;
+       e.next = next;
+ 
+       if (previous != null)
+         previous.next = e;
+       else
+         first = e;
+ 
+       if (next != null)
+         next.previous = e;
+       else
+         last = e;
+ 
+       previous = e;
+       lastReturned = null;
+     }
+ 
+     /**
+      * Changes the contents of the element most recently returned.
+      *
+      * @param o the new element
+      * @throws ConcurrentModificationException if the list was modified
+      * @throws IllegalStateException if there was no last element
+      */
+     public void set(Object o)
+     {
+       checkMod();
+       if (lastReturned == null)
+         throw new IllegalStateException();
+       lastReturned.data = o;
+     }
+   } // class LinkedListItr
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/List.java gcc-4.1.0/libjava/classpath/java/util/List.java
*** gcc-4.0.2/libjava/classpath/java/util/List.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/List.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,451 ----
+ /* List.java -- An ordered collection which allows indexed access
+    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * An ordered collection (also known as a list). This collection allows
+  * access to elements by position, as well as control on where elements
+  * are inserted. Unlike sets, duplicate elements are permitted by this
+  * general contract (if a subclass forbids duplicates, this should be
+  * documented).
+  * <p>
+  *
+  * List places additional requirements on <code>iterator</code>,
+  * <code>add</code>, <code>remove</code>, <code>equals</code>, and
+  * <code>hashCode</code>, in addition to requiring more methods. List
+  * indexing is 0-based (like arrays), although some implementations may
+  * require time proportional to the index to obtain an arbitrary element.
+  * The List interface is incompatible with Set; you cannot implement both
+  * simultaneously.
+  * <p>
+  *
+  * Lists also provide a <code>ListIterator</code> which allows bidirectional
+  * traversal and other features atop regular iterators. Lists can be
+  * searched for arbitrary elements, and allow easy insertion and removal
+  * of multiple elements in one method call.
+  * <p>
+  *
+  * Note: While lists may contain themselves as elements, this leads to
+  * undefined (usually infinite recursive) behavior for some methods like
+  * hashCode or equals.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see Set
+  * @see ArrayList
+  * @see LinkedList
+  * @see Vector
+  * @see Arrays#asList(Object[])
+  * @see Collections#nCopies(int, Object)
+  * @see Collections#EMPTY_LIST
+  * @see AbstractList
+  * @see AbstractSequentialList
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface List extends Collection
+ {
+   /**
+    * Insert an element into the list at a given position (optional operation).
+    * This shifts all existing elements from that position to the end one
+    * index to the right. This version of add has no return, since it is
+    * assumed to always succeed if there is no exception.
+    *
+    * @param index the location to insert the item
+    * @param o the object to insert
+    * @throws UnsupportedOperationException if this list does not support the
+    *         add operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    * @throws NullPointerException if o is null and this list doesn't support
+    *         the addition of null values.
+    */
+   void add(int index, Object o);
+ 
+   /**
+    * Add an element to the end of the list (optional operation). If the list
+    * imposes restraints on what can be inserted, such as no null elements,
+    * this should be documented.
+    *
+    * @param o the object to add
+    * @return true, as defined by Collection for a modified list
+    * @throws UnsupportedOperationException if this list does not support the
+    *         add operation
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    * @throws NullPointerException if o is null and this list doesn't support
+    *         the addition of null values.
+    */
+   boolean add(Object o);
+ 
+   /**
+    * Insert the contents of a collection into the list at a given position
+    * (optional operation). Shift all elements at that position to the right
+    * by the number of elements inserted. This operation is undefined if
+    * this list is modified during the operation (for example, if you try
+    * to insert a list into itself).
+    *
+    * @param index the location to insert the collection
+    * @param c the collection to insert
+    * @return true if the list was modified by this action, that is, if c is
+    *         non-empty
+    * @throws UnsupportedOperationException if this list does not support the
+    *         addAll operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    * @throws ClassCastException if some element of c cannot be added to this
+    *         list due to its type
+    * @throws IllegalArgumentException if some element of c cannot be added
+    *         to this list for some other reason
+    * @throws NullPointerException if some element of c is null and this list
+    *         doesn't support the addition of null values.
+    * @throws NullPointerException if the specified collection is null
+    * @see #add(int, Object)
+    */
+   boolean addAll(int index, Collection c);
+ 
+   /**
+    * Add the contents of a collection to the end of the list (optional
+    * operation).  This operation is undefined if this list is modified
+    * during the operation (for example, if you try to insert a list into
+    * itself).
+    *
+    * @param c the collection to add
+    * @return true if the list was modified by this action, that is, if c is
+    *         non-empty
+    * @throws UnsupportedOperationException if this list does not support the
+    *         addAll operation
+    * @throws ClassCastException if some element of c cannot be added to this
+    *         list due to its type
+    * @throws IllegalArgumentException if some element of c cannot be added
+    *         to this list for some other reason
+    * @throws NullPointerException if the specified collection is null
+    * @throws NullPointerException if some element of c is null and this list
+    *         doesn't support the addition of null values.
+    * @see #add(Object)
+    */
+   boolean addAll(Collection c);
+ 
+   /**
+    * Clear the list, such that a subsequent call to isEmpty() would return
+    * true (optional operation).
+    *
+    * @throws UnsupportedOperationException if this list does not support the
+    *         clear operation
+    */
+   void clear();
+ 
+   /**
+    * Test whether this list contains a given object as one of its elements.
+    * This is defined as the existence of an element e such that
+    * <code>o == null ? e == null : o.equals(e)</code>.
+    *
+    * @param o the element to look for
+    * @return true if this list contains the element
+    * @throws ClassCastException if the type of o is not a valid type
+    *         for this list.
+    * @throws NullPointerException if o is null and the list doesn't
+    *         support null values.
+    */
+   boolean contains(Object o);
+ 
+   /**
+    * Test whether this list contains every element in a given collection.
+    *
+    * @param c the collection to test for
+    * @return true if for every element o in c, contains(o) would return true
+    * @throws NullPointerException if the collection is null
+    * @throws ClassCastException if the type of any element in c is not a valid
+    *         type for this list.
+    * @throws NullPointerException if some element of c is null and this
+    *         list does not support null values.
+    * @see #contains(Object)
+    */
+   boolean containsAll(Collection c);
+ 
+   /**
+    * Test whether this list is equal to another object. A List is defined to be
+    * equal to an object if and only if that object is also a List, and the two
+    * lists have the same sequence. Two lists l1 and l2 are equal if and only
+    * if <code>l1.size() == l2.size()</code>, and for every integer n between 0
+    * and <code>l1.size() - 1</code> inclusive, <code>l1.get(n) == null ?
+    * l2.get(n) == null : l1.get(n).equals(l2.get(n))</code>.
+    *
+    * @param o the object to test for equality with this list
+    * @return true if o is equal to this list
+    * @see Object#equals(Object)
+    * @see #hashCode()
+    */
+   boolean equals(Object o);
+ 
+   /**
+    * Get the element at a given index in this list.
+    *
+    * @param index the index of the element to be returned
+    * @return the element at index index in this list
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    */
+   Object get(int index);
+ 
+   /**
+    * Obtains a hash code for this list. In order to obey the general
+    * contract of the hashCode method of class Object, this value is
+    * calculated as follows:
+    * 
+ <p><pre>hashCode = 1;
+ Iterator i = list.iterator();
+ while (i.hasNext())
+ {
+   Object obj = i.next();
+   hashCode = 31 * hashCode + (obj == null ? 0 : obj.hashCode());
+ }</pre>
+    *
+    * <p>This ensures that the general contract of Object.hashCode()
+    * is adhered to.
+    *
+    * @return the hash code of this list
+    * @see Object#hashCode()
+    * @see #equals(Object)
+    */
+   int hashCode();
+ 
+   /**
+    * Obtain the first index at which a given object is to be found in this
+    * list.
+    *
+    * @param o the object to search for
+    * @return the least integer n such that <code>o == null ? get(n) == null :
+    *         o.equals(get(n))</code>, or -1 if there is no such index.
+    * @throws ClassCastException if the type of o is not a valid
+    *         type for this list.
+    * @throws NullPointerException if o is null and this
+    *         list does not support null values.
+    */
+   int indexOf(Object o);
+ 
+   /**
+    * Test whether this list is empty, that is, if size() == 0.
+    *
+    * @return true if this list contains no elements
+    */
+   boolean isEmpty();
+ 
+   /**
+    * Obtain an Iterator over this list, whose sequence is the list order.
+    *
+    * @return an Iterator over the elements of this list, in order
+    */
+   Iterator iterator();
+ 
+   /**
+    * Obtain the last index at which a given object is to be found in this
+    * list.
+    *
+    * @return the greatest integer n such that <code>o == null ? get(n) == null
+    *         : o.equals(get(n))</code>, or -1 if there is no such index.
+    * @throws ClassCastException if the type of o is not a valid
+    *         type for this list.
+    * @throws NullPointerException if o is null and this
+    *         list does not support null values.
+    */
+   int lastIndexOf(Object o);
+ 
+   /**
+    * Obtain a ListIterator over this list, starting at the beginning.
+    *
+    * @return a ListIterator over the elements of this list, in order, starting
+    *         at the beginning
+    */
+   ListIterator listIterator();
+ 
+   /**
+    * Obtain a ListIterator over this list, starting at a given position.
+    * A first call to next() would return the same as get(index), and a
+    * first call to previous() would return the same as get(index - 1).
+    *
+    * @param index the position, between 0 and size() inclusive, to begin the
+    *        iteration from
+    * @return a ListIterator over the elements of this list, in order, starting
+    *         at index
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt; size()
+    */
+   ListIterator listIterator(int index);
+ 
+   /**
+    * Remove the element at a given position in this list (optional operation).
+    * Shifts all remaining elements to the left to fill the gap.
+    *
+    * @param index the position within the list of the object to remove
+    * @return the object that was removed
+    * @throws UnsupportedOperationException if this list does not support the
+    *         remove operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    */
+   Object remove(int index);
+ 
+   /**
+    * Remove the first occurence of an object from this list (optional
+    * operation). That is, remove the first element e such that
+    * <code>o == null ? e == null : o.equals(e)</code>.
+    *
+    * @param o the object to remove
+    * @return true if the list changed as a result of this call, that is, if
+    *         the list contained at least one occurrence of o
+    * @throws UnsupportedOperationException if this list does not support the
+    *         remove operation
+    * @throws ClassCastException if the type of o is not a valid
+    *         type for this list.
+    * @throws NullPointerException if o is null and this
+    *         list does not support removing null values.
+    */
+   boolean remove(Object o);
+ 
+   /**
+    * Remove all elements of a given collection from this list (optional
+    * operation). That is, remove every element e such that c.contains(e).
+    *
+    * @param c the collection to filter out
+    * @return true if this list was modified as a result of this call
+    * @throws UnsupportedOperationException if this list does not support the
+    *         removeAll operation
+    * @throws NullPointerException if the collection is null
+    * @throws ClassCastException if the type of any element in c is not a valid
+    *         type for this list.
+    * @throws NullPointerException if some element of c is null and this
+    *         list does not support removing null values.
+    * @see #remove(Object)
+    * @see #contains(Object)
+    */
+   boolean removeAll(Collection c);
+ 
+   /**
+    * Remove all elements of this list that are not contained in a given
+    * collection (optional operation). That is, remove every element e such
+    * that !c.contains(e).
+    *
+    * @param c the collection to retain
+    * @return true if this list was modified as a result of this call
+    * @throws UnsupportedOperationException if this list does not support the
+    *         retainAll operation
+    * @throws NullPointerException if the collection is null
+    * @throws ClassCastException if the type of any element in c is not a valid
+    *         type for this list.
+    * @throws NullPointerException if some element of c is null and this
+    *         list does not support retaining null values.
+    * @see #remove(Object)
+    * @see #contains(Object)
+    */
+   boolean retainAll(Collection c);
+ 
+   /**
+    * Replace an element of this list with another object (optional operation).
+    *
+    * @param index the position within this list of the element to be replaced
+    * @param o the object to replace it with
+    * @return the object that was replaced
+    * @throws UnsupportedOperationException if this list does not support the
+    *         set operation
+    * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= size()
+    * @throws ClassCastException if o cannot be added to this list due to its
+    *         type
+    * @throws IllegalArgumentException if o cannot be added to this list for
+    *         some other reason
+    * @throws NullPointerException if o is null and this
+    *         list does not support null values.
+    */
+   Object set(int index, Object o);
+ 
+   /**
+    * Get the number of elements in this list. If the list contains more
+    * than Integer.MAX_VALUE elements, return Integer.MAX_VALUE.
+    *
+    * @return the number of elements in the list
+    */
+   int size();
+ 
+   /**
+    * Obtain a List view of a subsection of this list, from fromIndex
+    * (inclusive) to toIndex (exclusive). If the two indices are equal, the
+    * sublist is empty. The returned list should be modifiable if and only
+    * if this list is modifiable. Changes to the returned list should be
+    * reflected in this list. If this list is structurally modified in
+    * any way other than through the returned list, the result of any subsequent
+    * operations on the returned list is undefined.
+    *
+    * @param fromIndex the index that the returned list should start from
+    *        (inclusive)
+    * @param toIndex the index that the returned list should go to (exclusive)
+    * @return a List backed by a subsection of this list
+    * @throws IndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; size() || fromIndex &gt; toIndex
+    */
+   List subList(int fromIndex, int toIndex);
+ 
+   /**
+    * Copy the current contents of this list into an array.
+    *
+    * @return an array of type Object[] and length equal to the length of this
+    *         list, containing the elements currently in this list, in order
+    */
+   Object[] toArray();
+ 
+   /**
+    * Copy the current contents of this list into an array. If the array passed
+    * as an argument has length less than that of this list, an array of the
+    * same run-time type as a, and length equal to the length of this list, is
+    * allocated using Reflection. Otherwise, a itself is used. The elements of
+    * this list are copied into it, and if there is space in the array, the
+    * following element is set to null. The resultant array is returned.
+    * Note: The fact that the following element is set to null is only useful
+    * if it is known that this list does not contain any null elements.
+    *
+    * @param a the array to copy this list into
+    * @return an array containing the elements currently in this list, in
+    *         order
+    * @throws ArrayStoreException if the type of any element of the
+    *         collection is not a subtype of the element type of a
+    * @throws NullPointerException if the specified array is null
+    */
+   Object[] toArray(Object[] a);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/ListIterator.java gcc-4.1.0/libjava/classpath/java/util/ListIterator.java
*** gcc-4.0.2/libjava/classpath/java/util/ListIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/ListIterator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,170 ----
+ /* ListIterator.java -- Extended Iterator for iterating over ordered lists
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * An extended version of Iterator to support the extra features of Lists. The
+  * elements may be accessed in forward or reverse order, elements may be
+  * replaced as well as removed, and new elements may be inserted, during the
+  * traversal of the list.
+  * <p>
+  *
+  * A list with n elements provides n+1 iterator positions (the front, the end,
+  * or between two elements). Note that <code>remove</code> and <code>set</code>
+  * operate on the last element returned, whether it was by <code>next</code>
+  * or <code>previous</code>.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see List
+  * @see Iterator
+  * @see Enumeration
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface ListIterator extends Iterator
+ {
+   /**
+    * Tests whether there are elements remaining in the list in the forward
+    * direction. In other words, next() will not fail with a
+    * NoSuchElementException.
+    *
+    * @return true if the list continues in the forward direction
+    */
+   boolean hasNext();
+ 
+   /**
+    * Tests whether there are elements remaining in the list in the reverse
+    * direction. In other words, previous() will not fail with a
+    * NoSuchElementException.
+    *
+    * @return true if the list continues in the reverse direction
+    */
+   boolean hasPrevious();
+ 
+   /**
+    * Obtain the next element in the list in the forward direction. Repeated
+    * calls to next may be used to iterate over the entire list, or calls to
+    * next and previous may be used together to go forwards and backwards.
+    * Alternating calls to next and previous will return the same element.
+    *
+    * @return the next element in the list in the forward direction
+    * @throws NoSuchElementException if there are no more elements
+    */
+   Object next();
+ 
+   /**
+    * Obtain the next element in the list in the reverse direction. Repeated
+    * calls to previous may be used to iterate backwards over the entire list,
+    * or calls to next and previous may be used together to go forwards and
+    * backwards. Alternating calls to next and previous will return the same
+    * element.
+    *
+    * @return the next element in the list in the reverse direction
+    * @throws NoSuchElementException if there are no more elements
+    */
+   Object previous();
+ 
+   /**
+    * Find the index of the element that would be returned by a call to next.
+    * If hasNext() returns false, this returns the list size.
+    *
+    * @return the index of the element that would be returned by next()
+    */
+   int nextIndex();
+ 
+   /**
+    * Find the index of the element that would be returned by a call to
+    * previous. If hasPrevious() returns false, this returns -1.
+    *
+    * @return the index of the element that would be returned by previous()
+    */
+   int previousIndex();
+ 
+   /**
+    * Insert an element into the list at the current position of the iterator
+    * (optional operation). The element is inserted in between the element that
+    * would be returned by previous and the element that would be returned by
+    * next. After the insertion, a subsequent call to next is unaffected, but
+    * a call to previous returns the item that was added. The values returned
+    * by nextIndex() and previousIndex() are incremented.
+    *
+    * @param o the object to insert into the list
+    * @throws ClassCastException if the object is of a type which cannot be added
+    *         to this list.
+    * @throws IllegalArgumentException if some other aspect of the object stops
+    *         it being added to this list.
+    * @throws UnsupportedOperationException if this ListIterator does not
+    *         support the add operation.
+    */
+   void add(Object o);
+ 
+   /**
+    * Remove from the list the element last returned by a call to next or
+    * previous (optional operation). This method may only be called if neither
+    * add nor remove have been called since the last call to next or previous.
+    *
+    * @throws IllegalStateException if neither next or previous have been
+    *         called, or if add or remove has been called since the last call
+    *         to next or previous
+    * @throws UnsupportedOperationException if this ListIterator does not
+    *         support the remove operation
+    */
+   void remove();
+ 
+   /**
+    * Replace the element last returned by a call to next or previous with a
+    * given object (optional operation). This method may only be called if
+    * neither add nor remove have been called since the last call to next or
+    * previous.
+    *
+    * @param o the object to replace the element with
+    * @throws ClassCastException the object is of a type which cannot be added
+    *         to this list
+    * @throws IllegalArgumentException some other aspect of the object stops
+    *         it being added to this list
+    * @throws IllegalStateException if neither next or previous have been
+    *         called, or if add or remove has been called since the last call
+    *         to next or previous
+    * @throws UnsupportedOperationException if this ListIterator does not
+    *         support the set operation
+    */
+   void set(Object o);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/ListResourceBundle.java gcc-4.1.0/libjava/classpath/java/util/ListResourceBundle.java
*** gcc-4.0.2/libjava/classpath/java/util/ListResourceBundle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/ListResourceBundle.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,140 ----
+ /* ListResourceBundle -- a resource bundle build around a list
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * A <code>ListResouceBundle</code> provides an easy way, to create your own
+  * resource bundle. It is an abstract class that you can subclass. You should
+  * then overwrite the getContents method, that provides a key/value list.
+  *
+  * <p>The key/value list is a two dimensional list of Object.  The first
+  * dimension ranges over the resources. The second dimension ranges from
+  * zero (key) to one (value). The keys must be of type String, and they are
+  * case-sensitive. For example:
+  *
+ <br><pre>public class MyResources
+   extends ListResourceBundle
+ {
+   public Object[][] getContents()
+   {
+     return contents;
+   }
+ 
+   static final Object[][] contents =
+   {
+     // LOCALIZED STRINGS
+     {"s1", "The disk \"{1}\" contains {0}."},  // MessageFormat pattern
+     {"s2", "1"},                       // location of {0} in pattern
+     {"s3", "My Disk"},                 // sample disk name
+     {"s4", "no files"},                // first ChoiceFormat choice
+     {"s5", "one file"},                // second ChoiceFormat choice
+     {"s6", "{0,number} files"}         // third ChoiceFormat choice
+     {"s7", "3 Mar 96"},                // sample date
+     {"s8", new Dimension(1,5)}         // real object, not just string
+     // END OF LOCALIZED MATERIAL
+   };
+ }</pre>
+  *
+  * @author Jochen Hoenicke
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Locale
+  * @see PropertyResourceBundle
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class ListResourceBundle extends ResourceBundle
+ {
+   /**
+    * The constructor. It does nothing special.
+    */
+   public ListResourceBundle()
+   {
+   }
+ 
+   /**
+    * Gets a resource for a given key. This is called by <code>getObject</code>.
+    *
+    * @param key the key of the resource
+    * @return the resource for the key, or null if it doesn't exist
+    */
+   public final Object handleGetObject(String key)
+   {
+     Object[][] contents = getContents();
+     int i = contents.length;
+     while (--i >= 0)
+       if (key.equals(contents[i][0]))
+         return contents[i][1];
+     return null;
+   }
+ 
+   /**
+    * This method should return all keys for which a resource exists.
+    *
+    * @return an enumeration of the keys
+    */
+   public Enumeration getKeys()
+   {
+     // We make a new Set that holds all the keys, then return an enumeration
+     // for that. This prevents modifications from ruining the enumeration,
+     // as well as ignoring duplicates.
+     final Object[][] contents = getContents();
+     Set s = new HashSet();
+     int i = contents.length;
+     while (--i >= 0)
+       s.add(contents[i][0]);
+     ResourceBundle bundle = parent;
+     // Eliminate tail recursion.
+     while (bundle != null)
+       {
+         Enumeration e = bundle.getKeys();
+         while (e.hasMoreElements())
+           s.add(e.nextElement());
+         bundle = bundle.parent;
+       }
+     return Collections.enumeration(s);
+   }
+ 
+   /**
+    * Gets the key/value list. You must override this method, and should not
+    * provide duplicate keys or null entries.
+    *
+    * @return a two dimensional list of String key / Object resouce pairs
+    */
+   protected abstract Object[][] getContents();
+ } // class ListResourceBundle
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Locale.java gcc-4.1.0/libjava/classpath/java/util/Locale.java
*** gcc-4.0.2/libjava/classpath/java/util/Locale.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Locale.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,952 ----
+ /* Locale.java -- i18n locales
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import gnu.classpath.SystemProperties;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * Locales represent a specific country and culture. Classes which can be
+  * passed a Locale object tailor their information for a given locale. For
+  * instance, currency number formatting is handled differently for the USA
+  * and France.
+  *
+  * <p>Locales are made up of a language code, a country code, and an optional
+  * set of variant strings. Language codes are represented by
+  * <a href="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">
+  * ISO 639:1988</a> w/ additions from ISO 639/RA Newsletter No. 1/1989
+  * and a decision of the Advisory Committee of ISO/TC39 on August 8, 1997.
+  *
+  * <p>Country codes are represented by
+  * <a href="http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html">
+  * ISO 3166</a>. Variant strings are vendor and browser specific. Standard
+  * variant strings include "POSIX" for POSIX, "WIN" for MS-Windows, and
+  * "MAC" for Macintosh. When there is more than one variant string, they must
+  * be separated by an underscore (U+005F).
+  *
+  * <p>The default locale is determined by the values of the system properties
+  * user.language, user.region, and user.variant, defaulting to "en". Note that
+  * the locale does NOT contain the conversion and formatting capabilities (for
+  * that, use ResourceBundle and java.text). Rather, it is an immutable tag
+  * object for identifying a given locale, which is referenced by these other
+  * classes when they must make locale-dependent decisions.
+  *
+  * @see ResourceBundle
+  * @see java.text.Format
+  * @see java.text.NumberFormat
+  * @see java.text.Collator
+  * @author Jochen Hoenicke
+  * @author Paul Fisher
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public final class Locale implements Serializable, Cloneable
+ {
+   /** Locale which represents the English language. */
+   public static final Locale ENGLISH = getLocale("en");
+ 
+   /** Locale which represents the French language. */
+   public static final Locale FRENCH = getLocale("fr");
+ 
+   /** Locale which represents the German language. */
+   public static final Locale GERMAN = getLocale("de");
+ 
+   /** Locale which represents the Italian language. */
+   public static final Locale ITALIAN = getLocale("it");
+ 
+   /** Locale which represents the Japanese language. */
+   public static final Locale JAPANESE = getLocale("ja");
+ 
+   /** Locale which represents the Korean language. */
+   public static final Locale KOREAN = getLocale("ko");
+ 
+   /** Locale which represents the Chinese language. */
+   public static final Locale CHINESE = getLocale("zh");
+ 
+   /** Locale which represents the Chinese language as used in China. */
+   public static final Locale SIMPLIFIED_CHINESE = getLocale("zh", "CN");
+ 
+   /**
+    * Locale which represents the Chinese language as used in Taiwan.
+    * Same as TAIWAN Locale.
+    */
+   public static final Locale TRADITIONAL_CHINESE = getLocale("zh", "TW");
+ 
+   /** Locale which represents France. */
+   public static final Locale FRANCE = getLocale("fr", "FR");
+ 
+   /** Locale which represents Germany. */
+   public static final Locale GERMANY = getLocale("de", "DE");
+ 
+   /** Locale which represents Italy. */
+   public static final Locale ITALY = getLocale("it", "IT");
+ 
+   /** Locale which represents Japan. */
+   public static final Locale JAPAN = getLocale("ja", "JP");
+ 
+   /** Locale which represents Korea. */
+   public static final Locale KOREA = getLocale("ko", "KR");
+ 
+   /**
+    * Locale which represents China.
+    * Same as SIMPLIFIED_CHINESE Locale.
+    */
+   public static final Locale CHINA = SIMPLIFIED_CHINESE;
+ 
+   /**
+    * Locale which represents the People's Republic of China.
+    * Same as CHINA Locale.
+    */
+   public static final Locale PRC = CHINA;
+ 
+   /**
+    * Locale which represents Taiwan.
+    * Same as TRADITIONAL_CHINESE Locale.
+    */
+   public static final Locale TAIWAN = TRADITIONAL_CHINESE;
+ 
+   /** Locale which represents the United Kingdom. */
+   public static final Locale UK = getLocale("en", "GB");
+ 
+   /** Locale which represents the United States. */
+   public static final Locale US = getLocale("en", "US");
+ 
+   /** Locale which represents the English speaking portion of Canada. */
+   public static final Locale CANADA = getLocale("en", "CA");
+ 
+   /** Locale which represents the French speaking portion of Canada. */
+   public static final Locale CANADA_FRENCH = getLocale("fr", "CA");
+ 
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 9149081749638150636L;
+ 
+   /**
+    * The language code, as returned by getLanguage().
+    *
+    * @serial the languange, possibly ""
+    */
+   private String language;
+ 
+   /**
+    * The country code, as returned by getCountry().
+    *
+    * @serial the country, possibly ""
+    */
+   private String country;
+ 
+   /**
+    * The variant code, as returned by getVariant().
+    *
+    * @serial the variant, possibly ""
+    */
+   private String variant;
+ 
+   /**
+    * This is the cached hashcode. When writing to stream, we write -1.
+    *
+    * @serial should be -1 in serial streams
+    */
+   private transient int hashcode;
+ 
+   /**
+    * Array storing all available locales.
+    */
+   private static transient Locale[] availableLocales;
+ 
+   /**
+    * Locale cache. Only created locale objects are stored.
+    * Contains all supported locales when getAvailableLocales()
+    * got called.
+    */
+   private static transient HashMap localeMap;
+   
+   /**
+    * The default locale. Except for during bootstrapping, this should never be
+    * null. Note the logic in the main constructor, to detect when
+    * bootstrapping has completed.
+    */
+   private static Locale defaultLocale =
+     getLocale(SystemProperties.getProperty("user.language", "en"),
+               SystemProperties.getProperty("user.region", ""),
+               SystemProperties.getProperty("user.variant", ""));
+ 
+   /**
+    * Array storing all the available two-letter ISO639 languages.
+    */
+   private static transient String[] languageCache;
+ 
+   /**
+    * Array storing all the available two-letter ISO3166 country codes.
+    */
+   private static transient String[] countryCache;
+ 
+   /**
+    * Retrieves the locale with the specified language from the cache.
+    *
+    * @param language the language of the locale to retrieve.
+    * @return the locale.
+    */ 
+   private static Locale getLocale(String language)
+   {
+     return getLocale(language, "", "");
+   }
+   
+   /**
+    * Retrieves the locale with the specified language and region
+    * from the cache.
+    *
+    * @param language the language of the locale to retrieve.
+    * @param region the region of the locale to retrieve.
+    * @return the locale.
+    */ 
+   private static Locale getLocale(String language, String region)
+   {
+     return getLocale(language, region, "");
+   }
+   
+   /**
+    * Retrieves the locale with the specified language, region
+    * and variant from the cache.
+    *
+    * @param language the language of the locale to retrieve.
+    * @param region the region of the locale to retrieve.
+    * @param variant the variant of the locale to retrieve.
+    * @return the locale.
+    */ 
+   private static Locale getLocale(String language, String region, String variant)
+   {
+     if (localeMap == null)
+       localeMap = new HashMap(256);
+ 
+     String name = language + "_" + region + "_" + variant;
+     Locale locale = (Locale) localeMap.get(name);
+ 
+     if (locale == null)
+       {
+ 	locale = new Locale(language, region, variant);
+ 	localeMap.put(name, locale);
+       }
+ 
+     return locale;
+   }
+   
+   /**
+    * Convert new iso639 codes to the old ones.
+    *
+    * @param language the language to check
+    * @return the appropriate code
+    */
+   private String convertLanguage(String language)
+   {
+     if (language.equals(""))
+       return language;
+     language = language.toLowerCase();
+     int index = "he,id,yi".indexOf(language);
+     if (index != -1)
+       return "iw,in,ji".substring(index, index + 2);
+     return language;
+   }
+ 
+   /**
+    * Creates a new locale for the given language and country.
+    *
+    * @param language lowercase two-letter ISO-639 A2 language code
+    * @param country uppercase two-letter ISO-3166 A2 contry code
+    * @param variant vendor and browser specific
+    * @throws NullPointerException if any argument is null
+    */
+   public Locale(String language, String country, String variant)
+   {
+     // During bootstrap, we already know the strings being passed in are
+     // the correct capitalization, and not null. We can't call
+     // String.toUpperCase during this time, since that depends on the
+     // default locale.
+     if (defaultLocale != null)
+       {
+         language = convertLanguage(language).intern();
+         country = country.toUpperCase().intern();
+         variant = variant.intern();
+       }
+     this.language = language;
+     this.country = country;
+     this.variant = variant;
+     hashcode = language.hashCode() ^ country.hashCode() ^ variant.hashCode();
+   }
+ 
+   /**
+    * Creates a new locale for the given language and country.
+    *
+    * @param language lowercase two-letter ISO-639 A2 language code
+    * @param country uppercase two-letter ISO-3166 A2 country code
+    * @throws NullPointerException if either argument is null
+    */
+   public Locale(String language, String country)
+   {
+     this(language, country, "");
+   }
+ 
+   /**
+    * Creates a new locale for a language.
+    *
+    * @param language lowercase two-letter ISO-639 A2 language code
+    * @throws NullPointerException if either argument is null
+    * @since 1.4
+    */
+   public Locale(String language)
+   {
+     this(language, "", "");
+   }
+ 
+   /**
+    * Returns the default Locale. The default locale is generally once set
+    * on start up and then never changed. Normally you should use this locale
+    * for everywhere you need a locale. The initial setting matches the
+    * default locale, the user has chosen.
+    *
+    * @return the default locale for this virtual machine
+    */
+   public static Locale getDefault()
+   {
+     return defaultLocale;
+   }
+ 
+   /**
+    * Changes the default locale. Normally only called on program start up.
+    * Note that this doesn't change the locale for other programs. This has
+    * a security check,
+    * <code>PropertyPermission("user.language", "write")</code>, because of
+    * its potential impact to running code.
+    *
+    * @param newLocale the new default locale
+    * @throws NullPointerException if newLocale is null
+    * @throws SecurityException if permission is denied
+    */
+   public static void setDefault(Locale newLocale)
+   {
+     if (newLocale == null)
+       throw new NullPointerException();
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(new PropertyPermission("user.language", "write"));
+     defaultLocale = newLocale;
+   }
+ 
+   /**
+    * Returns the list of available locales.
+    *
+    * @return the installed locales
+    */
+   public static synchronized Locale[] getAvailableLocales()
+   {
+     if (availableLocales == null)
+       {
+ 	String[] localeNames = LocaleData.localeNames;
+         availableLocales = new Locale[localeNames.length];
+ 
+         for (int i = 0; i < localeNames.length; i++)
+           {
+             String language;
+             String region = "";
+             String variant = "";
+             String name = localeNames[i];
+ 
+             language = name.substring(0, 2);
+ 
+             if (name.length() > 2)
+               region = name.substring(3);
+ 
+ 	    int index = region.indexOf("_");
+ 	    if (index > 0)
+ 	      {
+ 		variant = region.substring(index + 1);
+ 		region = region.substring(0, index - 1);
+ 	      }
+ 
+             availableLocales[i] = getLocale(language, region, variant);
+           }
+       }
+     
+     return availableLocales;
+   }
+ 
+   /**
+    * Returns a list of all 2-letter uppercase country codes as defined
+    * in ISO 3166.
+    *
+    * @return a list of acceptable country codes
+    */
+   public static String[] getISOCountries()
+   {
+     if (countryCache == null)
+       {
+ 	countryCache = getISOStrings("territories");
+       }
+ 
+     return countryCache;
+   }
+ 
+   /**
+    * Returns a list of all 2-letter lowercase language codes as defined
+    * in ISO 639 (both old and new variant).
+    *
+    * @return a list of acceptable language codes
+    */
+   public static String[] getISOLanguages()
+   {
+     if (languageCache == null)
+       {
+ 	languageCache = getISOStrings("languages");
+       }
+     return languageCache;
+   }
+ 
+   /**
+    * Returns the set of keys from the specified resource hashtable, filtered
+    * so that only two letter strings are returned.
+    *
+    * @param tableName the name of the table from which to retrieve the keys.
+    * @return an array of two-letter strings.
+    */
+   private static String[] getISOStrings(String tableName)
+   {
+     int count = 0;
+     ResourceBundle bundle =
+       ResourceBundle.getBundle("gnu.java.locale.LocaleInformation");
+     Enumeration e = bundle.getKeys();
+     ArrayList tempList = new ArrayList();
+ 
+     while (e.hasMoreElements())
+       {
+ 	String key = (String) e.nextElement();
+ 	
+ 	if (key.startsWith(tableName + "."))
+ 	  {
+ 	    String str = key.substring(tableName.length() + 1);
+ 
+ 	    if (str.length() == 2
+ 		&& Character.isLetter(str.charAt(0))
+ 		&& Character.isLetter(str.charAt(1)))
+ 	      {
+ 		tempList.add(str);
+ 		++count;
+ 	      }
+ 	  }
+       }
+ 
+     String[] strings = new String[count];
+     
+     for (int a = 0; a < count; ++a)
+       strings[a] = (String) tempList.get(a);
+     
+     return strings;
+   }
+ 
+   /**
+    * Returns the language code of this locale. Some language codes have changed
+    * as ISO 639 has evolved; this returns the old name, even if you built
+    * the locale with the new one.
+    *
+    * @return language code portion of this locale, or an empty String
+    */
+   public String getLanguage()
+   {
+     return language;
+   }
+ 
+   /**
+    * Returns the country code of this locale.
+    *
+    * @return country code portion of this locale, or an empty String
+    */
+   public String getCountry()
+   {
+     return country;
+   }
+ 
+   /**
+    * Returns the variant code of this locale.
+    *
+    * @return the variant code portion of this locale, or an empty String
+    */
+   public String getVariant()
+   {
+     return variant;
+   }
+ 
+   /**
+    * Gets the string representation of the current locale. This consists of
+    * the language, the country, and the variant, separated by an underscore.
+    * The variant is listed only if there is a language or country. Examples:
+    * "en", "de_DE", "_GB", "en_US_WIN", "de__POSIX", "fr__MAC".
+    *
+    * @return the string representation of this Locale
+    * @see #getDisplayName()
+    */
+   public String toString()
+   {
+     if (language.length() == 0 && country.length() == 0)
+       return "";
+     else if (country.length() == 0 && variant.length() == 0)
+       return language;
+     StringBuffer result = new StringBuffer(language);
+     result.append('_').append(country);
+     if (variant.length() != 0)
+       result.append('_').append(variant);
+     return result.toString();
+   }
+ 
+   /**
+    * Returns the three-letter ISO language abbrevation of this locale.
+    *
+    * @throws MissingResourceException if the three-letter code is not known
+    */
+   public String getISO3Language()
+   {
+     // We know all strings are interned so we can use '==' for better performance.
+     if (language == "")
+       return "";
+     int index
+       = ("aa,ab,af,am,ar,as,ay,az,ba,be,bg,bh,bi,bn,bo,br,ca,co,cs,cy,da,"
+          + "de,dz,el,en,eo,es,et,eu,fa,fi,fj,fo,fr,fy,ga,gd,gl,gn,gu,ha,iw,"
+          + "hi,hr,hu,hy,ia,in,ie,ik,in,is,it,iu,iw,ja,ji,jw,ka,kk,kl,km,kn,"
+          + "ko,ks,ku,ky,la,ln,lo,lt,lv,mg,mi,mk,ml,mn,mo,mr,ms,mt,my,na,ne,"
+          + "nl,no,oc,om,or,pa,pl,ps,pt,qu,rm,rn,ro,ru,rw,sa,sd,sg,sh,si,sk,"
+          + "sl,sm,sn,so,sq,sr,ss,st,su,sv,sw,ta,te,tg,th,ti,tk,tl,tn,to,tr,"
+          + "ts,tt,tw,ug,uk,ur,uz,vi,vo,wo,xh,ji,yo,za,zh,zu")
+       .indexOf(language);
+ 
+     if (index % 3 != 0 || language.length() != 2)
+       throw new MissingResourceException
+         ("Can't find ISO3 language for " + language,
+          "java.util.Locale", language);
+ 
+     // Don't read this aloud. These are the three letter language codes.
+     return
+       ("aarabkaframharaasmaymazebakbelbulbihbisbenbodbrecatcoscescymdandeu"
+        + "dzoellengepospaesteusfasfinfijfaofrafrygaigdhglggrngujhauhebhinhrv"
+        + "hunhyeinaindileipkindislitaikuhebjpnyidjawkatkazkalkhmkankorkaskur"
+        + "kirlatlinlaolitlavmlgmrimkdmalmonmolmarmsamltmyanaunepnldnorociorm"
+        + "oripanpolpusporquerohrunronruskinsansndsagsrpsinslkslvsmosnasomsqi"
+        + "srpsswsotsunsweswatamteltgkthatirtuktgltsntonturtsotattwiuigukrurd"
+        + "uzbvievolwolxhoyidyorzhazhozul")
+       .substring(index, index + 3);
+   }
+ 
+   /**
+    * Returns the three-letter ISO country abbrevation of the locale.
+    *
+    * @throws MissingResourceException if the three-letter code is not known
+    */
+   public String getISO3Country()
+   {
+     // We know all strings are interned so we can use '==' for better performance.
+     if (country == "")
+       return "";
+     int index
+       = ("AD,AE,AF,AG,AI,AL,AM,AN,AO,AQ,AR,AS,AT,AU,AW,AZ,BA,BB,BD,BE,BF,"
+          + "BG,BH,BI,BJ,BM,BN,BO,BR,BS,BT,BV,BW,BY,BZ,CA,CC,CF,CG,CH,CI,CK,"
+          + "CL,CM,CN,CO,CR,CU,CV,CX,CY,CZ,DE,DJ,DK,DM,DO,DZ,EC,EE,EG,EH,ER,"
+          + "ES,ET,FI,FJ,FK,FM,FO,FR,FX,GA,GB,GD,GE,GF,GH,GI,GL,GM,GN,GP,GQ,"
+          + "GR,GS,GT,GU,GW,GY,HK,HM,HN,HR,HT,HU,ID,IE,IL,IN,IO,IQ,IR,IS,IT,"
+          + "JM,JO,JP,KE,KG,KH,KI,KM,KN,KP,KR,KW,KY,KZ,LA,LB,LC,LI,LK,LR,LS,"
+          + "LT,LU,LV,LY,MA,MC,MD,MG,MH,MK,ML,MM,MN,MO,MP,MQ,MR,MS,MT,MU,MV,"
+          + "MW,MX,MY,MZ,NA,NC,NE,NF,NG,NI,NL,NO,NP,NR,NU,NZ,OM,PA,PE,PF,PG,"
+          + "PH,PK,PL,PM,PN,PR,PT,PW,PY,QA,RE,RO,RU,RW,SA,SB,SC,SD,SE,SG,SH,"
+          + "SI,SJ,SK,SL,SM,SN,SO,SR,ST,SV,SY,SZ,TC,TD,TF,TG,TH,TJ,TK,TM,TN,"
+          + "TO,TP,TR,TT,TV,TW,TZ,UA,UG,UM,US,UY,UZ,VA,VC,VE,VG,VI,VN,VU,WF,"
+          + "WS,YE,YT,YU,ZA,ZM,ZR,ZW")
+       .indexOf(country);
+ 
+     if (index % 3 != 0 || country.length() != 2)
+       throw new MissingResourceException
+         ("Can't find ISO3 country for " + country,
+          "java.util.Locale", country);
+ 
+     // Don't read this aloud. These are the three letter country codes.
+     return
+       ("ANDAREAFGATGAIAALBARMANTAGOATAARGASMAUTAUSABWAZEBIHBRBBGDBELBFABGR"
+        + "BHRBDIBENBMUBRNBOLBRABHSBTNBVTBWABLRBLZCANCCKCAFCOGCHECIVCOKCHLCMR"
+        + "CHNCOLCRICUBCPVCXRCYPCZEDEUDJIDNKDMADOMDZAECUESTEGYESHERIESPETHFIN"
+        + "FJIFLKFSMFROFRAFXXGABGBRGRDGEOGUFGHAGIBGRLGMBGINGLPGNQGRCSGSGTMGUM"
+        + "GNBGUYHKGHMDHNDHRVHTIHUNIDNIRLISRINDIOTIRQIRNISLITAJAMJORJPNKENKGZ"
+        + "KHMKIRCOMKNAPRKKORKWTCYMKAZLAOLBNLCALIELKALBRLSOLTULUXLVALBYMARMCO"
+        + "MDAMDGMHLMKDMLIMMRMNGMACMNPMTQMRTMSRMLTMUSMDVMWIMEXMYSMOZNAMNCLNER"
+        + "NFKNGANICNLDNORNPLNRUNIUNZLOMNPANPERPYFPNGPHLPAKPOLSPMPCNPRIPRTPLW"
+        + "PRYQATREUROMRUSRWASAUSLBSYCSDNSWESGPSHNSVNSJMSVKSLESMRSENSOMSURSTP"
+        + "SLVSYRSWZTCATCDATFTGOTHATJKTKLTKMTUNTONTMPTURTTOTUVTWNTZAUKRUGAUMI"
+        + "USAURYUZBVATVCTVENVGBVIRVNMVUTWLFWSMYEMMYTYUGZAFZMBZARZWE")
+       .substring(index, index + 3);
+   }
+ 
+   /**
+    * Gets the country name suitable for display to the user, formatted
+    * for the default locale.  This has the same effect as
+    * <pre>
+    * getDisplayLanguage(Locale.getDefault());
+    * </pre>
+    *
+    * @return the language name of this locale localized to the default locale,
+    *         with the ISO code as backup
+    */
+   public String getDisplayLanguage()
+   {
+     return getDisplayLanguage(defaultLocale);
+   }
+ 
+   /**
+    * <p>
+    * Gets the name of the language specified by this locale, in a form suitable
+    * for display to the user.  If possible, the display name will be localized
+    * to the specified locale.  For example, if the locale instance is
+    * <code>Locale.GERMANY</code>, and the specified locale is <code>Locale.UK</code>,
+    * the result would be 'German'.  Using the German locale would instead give
+    * 'Deutsch'.  If the display name can not be localized to the supplied
+    * locale, it will fall back on other output in the following order:
+    * </p>
+    * <ul>
+    * <li>the display name in the default locale</li>
+    * <li>the display name in English</li>
+    * <li>the ISO code</li>
+    * </ul>
+    * <p>
+    * If the language is unspecified by this locale, then the empty string is
+    * returned.
+    * </p>
+    *
+    * @param inLocale the locale to use for formatting the display string.
+    * @return the language name of this locale localized to the given locale,
+    *         with the default locale, English and the ISO code as backups.
+    * @throws NullPointerException if the supplied locale is null.
+    */
+   public String getDisplayLanguage(Locale inLocale)
+   {
+     try
+       {
+ 	ResourceBundle res =
+           ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+                                    inLocale,
+                                    ClassLoader.getSystemClassLoader());
+ 
+         return res.getString("languages." + language);
+       }
+     catch (MissingResourceException e)
+       {
+ 	return language;
+       }
+   }
+ 
+   /**
+    * Returns the country name of this locale localized to the
+    * default locale. If the localized is not found, the ISO code
+    * is returned. This has the same effect as
+    * <pre>
+    * getDisplayCountry(Locale.getDefault());
+    * </pre>
+    *
+    * @return the country name of this locale localized to the given locale,
+    *         with the ISO code as backup
+    */
+   public String getDisplayCountry()
+   {
+     return getDisplayCountry(defaultLocale);
+   }
+ 
+   /**
+    * <p>
+    * Gets the name of the country specified by this locale, in a form suitable
+    * for display to the user.  If possible, the display name will be localized
+    * to the specified locale.  For example, if the locale instance is
+    * <code>Locale.GERMANY</code>, and the specified locale is <code>Locale.UK</code>,
+    * the result would be 'Germany'.  Using the German locale would instead give
+    * 'Deutschland'.  If the display name can not be localized to the supplied
+    * locale, it will fall back on other output in the following order:
+    * </p>
+    * <ul>
+    * <li>the display name in the default locale</li>
+    * <li>the display name in English</li>
+    * <li>the ISO code</li>
+    * </ul>
+    * <p>
+    * If the country is unspecified by this locale, then the empty string is
+    * returned.
+    * </p>
+    *
+    * @param inLocale the locale to use for formatting the display string.
+    * @return the country name of this locale localized to the given locale,
+    *         with the default locale, English and the ISO code as backups.
+    * @throws NullPointerException if the supplied locale is null.
+    */
+   public String getDisplayCountry(Locale inLocale)
+   {
+     try
+       {
+         ResourceBundle res =
+           ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+                                    inLocale,
+                                    ClassLoader.getSystemClassLoader());
+     
+         return res.getString("territories." + country);
+       }
+     catch (MissingResourceException e)
+       {
+         return country;
+       }
+   }
+ 
+   /**
+    * Returns the variant name of this locale localized to the
+    * default locale. If the localized is not found, the variant code
+    * itself is returned. This has the same effect as
+    * <pre>
+    * getDisplayVariant(Locale.getDefault());
+    * </pre>
+    *
+    * @return the variant code of this locale localized to the given locale,
+    *         with the ISO code as backup
+    */
+   public String getDisplayVariant()
+   {
+     return getDisplayVariant(defaultLocale);
+   }
+ 
+ 
+   /**
+    * <p>
+    * Gets the name of the variant specified by this locale, in a form suitable
+    * for display to the user.  If possible, the display name will be localized
+    * to the specified locale.  For example, if the locale instance is a revised
+    * variant, and the specified locale is <code>Locale.UK</code>, the result
+    * would be 'REVISED'.  Using the German locale would instead give
+    * 'Revidiert'.  If the display name can not be localized to the supplied
+    * locale, it will fall back on other output in the following order:
+    * </p>
+    * <ul>
+    * <li>the display name in the default locale</li>
+    * <li>the display name in English</li>
+    * <li>the ISO code</li>
+    * </ul>
+    * <p>
+    * If the variant is unspecified by this locale, then the empty string is
+    * returned.
+    * </p>
+    *
+    * @param inLocale the locale to use for formatting the display string.
+    * @return the variant name of this locale localized to the given locale,
+    *         with the default locale, English and the ISO code as backups.
+    * @throws NullPointerException if the supplied locale is null.
+    */
+   public String getDisplayVariant(Locale inLocale)
+   {
+     try
+       {
+         ResourceBundle res =
+           ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
+                                    inLocale,
+                                    ClassLoader.getSystemClassLoader());
+     
+         return res.getString("variants." + variant);
+       }
+     catch (MissingResourceException e)
+       {
+         return variant;
+       }
+   }
+ 
+   /**
+    * Gets all local components suitable for display to the user, formatted
+    * for the default locale. For the language component, getDisplayLanguage
+    * is called. For the country component, getDisplayCountry is called.
+    * For the variant set component, getDisplayVariant is called.
+    *
+    * <p>The returned String will be one of the following forms:<br>
+    * <pre>
+    * language (country, variant)
+    * language (country)
+    * language (variant)
+    * country (variant)
+    * language
+    * country
+    * variant
+    * </pre>
+    *
+    * @return String version of this locale, suitable for display to the user
+    */
+   public String getDisplayName()
+   {
+     return getDisplayName(defaultLocale);
+   }
+ 
+   /**
+    * Gets all local components suitable for display to the user, formatted
+    * for a specified locale. For the language component,
+    * getDisplayLanguage(Locale) is called. For the country component,
+    * getDisplayCountry(Locale) is called. For the variant set component,
+    * getDisplayVariant(Locale) is called.
+    *
+    * <p>The returned String will be one of the following forms:<br>
+    * <pre>
+    * language (country, variant)
+    * language (country)
+    * language (variant)
+    * country (variant)
+    * language
+    * country
+    * variant
+    * </pre>
+    *
+    * @param locale locale to use for formatting
+    * @return String version of this locale, suitable for display to the user
+    */
+   public String getDisplayName(Locale locale)
+   {
+     StringBuffer result = new StringBuffer();
+     int count = 0;
+     String[] delimiters = {"", " (", ","};
+     if (language.length() != 0)
+       {
+         result.append(delimiters[count++]);
+         result.append(getDisplayLanguage(locale));
+       }
+     if (country.length() != 0)
+       {
+         result.append(delimiters[count++]);
+         result.append(getDisplayCountry(locale));
+       }
+     if (variant.length() != 0)
+       {
+         result.append(delimiters[count++]);
+         result.append(getDisplayVariant(locale));
+       }
+     if (count > 1)
+       result.append(")");
+     return result.toString();
+   }
+ 
+   /**
+    * Does the same as <code>Object.clone()</code> but does not throw
+    * a <code>CloneNotSupportedException</code>. Why anyone would
+    * use this method is a secret to me, since this class is immutable.
+    *
+    * @return the clone
+    */
+   public Object clone()
+   {
+     // This class is final, so no need to use native super.clone().
+     return new Locale(language, country, variant);
+   }
+ 
+   /**
+    * Return the hash code for this locale. The hashcode is the logical
+    * xor of the hash codes of the language, the country and the variant.
+    * The hash code is precomputed, since <code>Locale</code>s are often
+    * used in hash tables.
+    *
+    * @return the hashcode
+    */
+   public int hashCode()
+   {
+     return hashcode;
+   }
+ 
+   /**
+    * Compares two locales. To be equal, obj must be a Locale with the same
+    * language, country, and variant code.
+    *
+    * @param obj the other locale
+    * @return true if obj is equal to this
+    */
+   public boolean equals(Object obj)
+   {
+     if (this == obj)
+       return true;
+     if (! (obj instanceof Locale))
+       return false;
+     Locale l = (Locale) obj;
+ 
+     return (language == l.language
+             && country == l.country
+             && variant == l.variant);
+   }
+ 
+   /**
+    * Write the locale to an object stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the write fails
+    * @serialData The first three fields are Strings representing language,
+    *             country, and variant. The fourth field is a placeholder for 
+    *             the cached hashcode, but this is always written as -1, and 
+    *             recomputed when reading it back.
+    */
+   private void writeObject(ObjectOutputStream s)
+     throws IOException
+   {
+     s.writeObject(language);
+     s.writeObject(country);
+     s.writeObject(variant);
+     // Hashcode field is always written as -1.
+     s.writeInt(-1);
+   }
+ 
+   /**
+    * Reads a locale from the input stream.
+    *
+    * @param s the stream to read from
+    * @throws IOException if reading fails
+    * @throws ClassNotFoundException if reading fails
+    * @serialData the hashCode is always invalid and must be recomputed
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     language = ((String) s.readObject()).intern();
+     country = ((String) s.readObject()).intern();
+     variant = ((String) s.readObject()).intern();
+     // Recompute hashcode.
+     hashcode = language.hashCode() ^ country.hashCode() ^ variant.hashCode();
+   }
+ } // class Locale
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Map.java gcc-4.1.0/libjava/classpath/java/util/Map.java
*** gcc-4.0.2/libjava/classpath/java/util/Map.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Map.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,338 ----
+ /* Map.java: interface Map -- An object that maps keys to values
+              interface Map.Entry -- an Entry in a Map
+    Copyright (C) 1998, 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * An object that maps keys onto values. Keys cannot be duplicated. This
+  * interface replaces the obsolete {@link Dictionary} abstract class.
+  * <p>
+  *
+  * The map has three collection views, which are backed by the map
+  * (modifications on one show up on the other): a set of keys, a collection
+  * of values, and a set of key-value mappings. Some maps have a guaranteed
+  * order, but not all do.
+  * <p>
+  *
+  * Note: Be careful about using mutable keys.  Behavior is unspecified if
+  * a key's comparison behavior is changed after the fact.  As a corollary
+  * to this rule, don't use a Map as one of its own keys or values, as it makes
+  * hashCode and equals have undefined behavior.
+  * <p>
+  *
+  * All maps are recommended to provide a no argument constructor, which builds
+  * an empty map, and one that accepts a Map parameter and copies the mappings
+  * (usually by putAll), to create an equivalent map.  Unfortunately, Java
+  * cannot enforce these suggestions.
+  * <p>
+  *
+  * The map may be unmodifiable, in which case unsupported operations will
+  * throw an UnsupportedOperationException.  Note that some operations may be
+  * safe, such as putAll(m) where m is empty, even if the operation would
+  * normally fail with a non-empty argument.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see HashMap
+  * @see TreeMap
+  * @see Hashtable
+  * @see SortedMap
+  * @see Collection
+  * @see Set
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface Map
+ {
+   /**
+    * Remove all entries from this Map (optional operation).
+    *
+    * @throws UnsupportedOperationException if clear is not supported
+    */
+   void clear();
+ 
+   /**
+    * Returns true if this contains a mapping for the given key.
+    *
+    * @param key the key to search for
+    * @return true if the map contains the key
+    * @throws ClassCastException if the key is of an inappropriate type
+    * @throws NullPointerException if key is <code>null</code> but the map
+    *         does not permit null keys
+    */
+   boolean containsKey(Object key);
+ 
+   /**
+    * Returns true if this contains at least one mapping with the given value.
+    * In other words, returns true if a value v exists where
+    * <code>(value == null ? v == null : value.equals(v))</code>. This usually
+    * requires linear time.
+    *
+    * @param value the value to search for
+    * @return true if the map contains the value
+    * @throws ClassCastException if the type of the value is not a valid type
+    *         for this map.
+    * @throws NullPointerException if the value is null and the map doesn't
+    *         support null values.
+    */
+   boolean containsValue(Object value);
+ 
+   /**
+    * Returns a set view of the mappings in this Map.  Each element in the
+    * set is a Map.Entry.  The set is backed by the map, so that changes in
+    * one show up in the other.  Modifications made while an iterator is
+    * in progress cause undefined behavior.  If the set supports removal,
+    * these methods remove the underlying mapping from the map:
+    * <code>Iterator.remove</code>, <code>Set.remove</code>,
+    * <code>removeAll</code>, <code>retainAll</code>, and <code>clear</code>.
+    * Element addition, via <code>add</code> or <code>addAll</code>, is
+    * not supported via this set.
+    *
+    * @return the set view of all mapping entries
+    * @see Map.Entry
+    */
+   Set entrySet();
+ 
+   /**
+    * Compares the specified object with this map for equality. Returns
+    * <code>true</code> if the other object is a Map with the same mappings,
+    * that is,<br>
+    * <code>o instanceof Map && entrySet().equals(((Map) o).entrySet();</code>
+    * This allows comparison of maps, regardless of implementation.
+    *
+    * @param o the object to be compared
+    * @return true if the object equals this map
+    * @see Set#equals(Object)
+    */
+   boolean equals(Object o);
+ 
+   /**
+    * Returns the value mapped by the given key. Returns <code>null</code> if
+    * there is no mapping.  However, in Maps that accept null values, you
+    * must rely on <code>containsKey</code> to determine if a mapping exists.
+    *
+    * @param key the key to look up
+    * @return the value associated with the key, or null if key not in map
+    * @throws ClassCastException if the key is an inappropriate type
+    * @throws NullPointerException if this map does not accept null keys
+    * @see #containsKey(Object)
+    */
+   Object get(Object key);
+ 
+   /**
+    * Associates the given key to the given value (optional operation). If the
+    * map already contains the key, its value is replaced. Be aware that in
+    * a map that permits <code>null</code> values, a null return does not
+    * always imply that the mapping was created.
+    *
+    * @param key the key to map
+    * @param value the value to be mapped
+    * @return the previous value of the key, or null if there was no mapping
+    * @throws UnsupportedOperationException if the operation is not supported
+    * @throws ClassCastException if the key or value is of the wrong type
+    * @throws IllegalArgumentException if something about this key or value
+    *         prevents it from existing in this map
+    * @throws NullPointerException if either the key or the value is null,
+    *         and the map forbids null keys or values
+    * @see #containsKey(Object)
+    */
+   Object put(Object key, Object value);
+ 
+   /**
+    * Returns the hash code for this map. This is the sum of all hashcodes
+    * for each Map.Entry object in entrySet.  This allows comparison of maps,
+    * regardless of implementation, and satisfies the contract of
+    * Object.hashCode.
+    *
+    * @return the hash code
+    * @see Map.Entry#hashCode()
+    */
+   int hashCode();
+ 
+   /**
+    * Returns true if the map contains no mappings.
+    *
+    * @return true if the map is empty
+    */
+   boolean isEmpty();
+ 
+   /**
+    * Returns a set view of the keys in this Map.  The set is backed by the
+    * map, so that changes in one show up in the other.  Modifications made
+    * while an iterator is in progress cause undefined behavior.  If the set
+    * supports removal, these methods remove the underlying mapping from
+    * the map: <code>Iterator.remove</code>, <code>Set.remove</code>,
+    * <code>removeAll</code>, <code>retainAll</code>, and <code>clear</code>.
+    * Element addition, via <code>add</code> or <code>addAll</code>, is
+    * not supported via this set.
+    *
+    * @return the set view of all keys
+    */
+   Set keySet();
+ 
+   /**
+    * Copies all entries of the given map to this one (optional operation). If
+    * the map already contains a key, its value is replaced.
+    *
+    * @param m the mapping to load into this map
+    * @throws UnsupportedOperationException if the operation is not supported
+    * @throws ClassCastException if a key or value is of the wrong type
+    * @throws IllegalArgumentException if something about a key or value
+    *         prevents it from existing in this map
+    * @throws NullPointerException if the map forbids null keys or values, or
+    *         if <code>m</code> is null.
+    * @see #put(Object, Object)
+    */
+   void putAll(Map m);
+ 
+   /**
+    * Removes the mapping for this key if present (optional operation). If
+    * the key is not present, this returns null. Note that maps which permit
+    * null values may also return null if the key was removed.
+    *
+    * @param key the key to remove
+    * @return the value the key mapped to, or null if not present.
+    * @throws UnsupportedOperationException if deletion is unsupported
+    * @throws NullPointerException if the key is null and this map doesn't
+    *         support null keys.
+    * @throws ClassCastException if the type of the key is not a valid type
+    *         for this map.
+    */
+   Object remove(Object key);
+ 
+   /**
+    * Returns the number of key-value mappings in the map. If there are more
+    * than Integer.MAX_VALUE mappings, return Integer.MAX_VALUE.
+    *
+    * @return the number of mappings
+    */
+   int size();
+ 
+   /**
+    * Returns a collection (or bag) view of the values in this Map.  The
+    * collection is backed by the map, so that changes in one show up in
+    * the other.  Modifications made while an iterator is in progress cause
+    * undefined behavior.  If the collection supports removal, these methods
+    * remove the underlying mapping from the map: <code>Iterator.remove</code>,
+    * <code>Collection.remove</code>, <code>removeAll</code>,
+    * <code>retainAll</code>, and <code>clear</code>. Element addition, via
+    * <code>add</code> or <code>addAll</code>, is not supported via this
+    * collection.
+    *
+    * @return the collection view of all values
+    */
+   Collection values();
+ 
+   /**
+    * A map entry (key-value pair). The Map.entrySet() method returns a set
+    * view of these objects; there is no other valid way to come across them.
+    * These objects are only valid for the duration of an iteration; in other
+    * words, if you mess with one after modifying the map, you are asking
+    * for undefined behavior.
+    *
+    * @author Original author unknown
+    * @author Eric Blake (ebb9@email.byu.edu)
+    * @see Map
+    * @see Map#entrySet()
+    * @since 1.2
+    * @status updated to 1.4
+    */
+   interface Entry
+   {
+     /**
+      * Get the key corresponding to this entry.
+      *
+      * @return the key
+      */
+     Object getKey();
+ 
+     /**
+      * Get the value corresponding to this entry. If you already called
+      * Iterator.remove(), this is undefined.
+      *
+      * @return the value
+      */
+     Object getValue();
+ 
+     /**
+      * Replaces the value with the specified object (optional operation).
+      * This writes through to the map, and is undefined if you already
+      * called Iterator.remove().
+      *
+      * @param value the new value to store
+      * @return the old value
+      * @throws UnsupportedOperationException if the operation is not supported
+      * @throws ClassCastException if the value is of the wrong type
+      * @throws IllegalArgumentException if something about the value
+      *         prevents it from existing in this map
+      * @throws NullPointerException if the map forbids null values
+      */
+     Object setValue(Object value);
+ 
+ 
+     /**
+      * Returns the hash code of the entry.  This is defined as the
+      * exclusive-or of the hashcodes of the key and value (using 0 for
+      * <code>null</code>). In other words, this must be:
+      * 
+ <p><pre>(getKey() == null ? 0 : getKey().hashCode())
+ ^ (getValue() == null ? 0 : getValue().hashCode())</pre>
+      *
+      * @return the hash code
+      */
+     int hashCode();
+ 
+     /**
+      * Compares the specified object with this entry. Returns true only if
+      * the object is a mapping of identical key and value. In other words,
+      * this must be:
+      * 
+ <p><pre>(o instanceof Map.Entry)
+ && (getKey() == null ? ((Map.Entry) o).getKey() == null
+                      : getKey().equals(((Map.Entry) o).getKey()))
+ && (getValue() == null ? ((Map.Entry) o).getValue() == null
+                        : getValue().equals(((Map.Entry) o).getValue()))</pre>
+      *
+      * @param o the object to compare
+      *
+      * @return <code>true</code> if it is equal
+      */
+     boolean equals(Object o);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/MissingResourceException.java gcc-4.1.0/libjava/classpath/java/util/MissingResourceException.java
*** gcc-4.0.2/libjava/classpath/java/util/MissingResourceException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/MissingResourceException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,105 ----
+ /* MissingResourceException.java -- thrown for a missing resource
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * This exception is thrown when a resource is missing.
+  *
+  * @author Jochen Hoenicke
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see ResourceBundle
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class MissingResourceException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = -4876345176062000401L;
+ 
+   /**
+    * The name of the resource bundle requested by user.
+    *
+    * @serial the class name of the resource bundle
+    */
+   private final String className;
+ 
+   /**
+    * The key of the resource in the bundle requested by user.
+    *
+    * @serial the name of the resouce
+    */
+   private final String key;
+ 
+   /**
+    * Creates a new exception, with the specified parameters.
+    *
+    * @param s the detail message
+    * @param className the name of the resource bundle
+    * @param key the key of the missing resource
+    */
+   public MissingResourceException(String s, String className, String key)
+   {
+     super(s);
+     this.className = className;
+     this.key = key;
+   }
+ 
+   /**
+    * Gets the name of the resource bundle, for which a resource is missing.
+    *
+    * @return the name of the resource bundle
+    */
+   public String getClassName()
+   {
+     return className;
+   }
+ 
+   /**
+    * Gets the key of the resource that is missing bundle, this is an empty
+    * string if the whole resource bundle is missing.
+    *
+    * @return the name of the resource bundle
+    */
+   public String getKey()
+   {
+     return key;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/NoSuchElementException.java gcc-4.1.0/libjava/classpath/java/util/NoSuchElementException.java
*** gcc-4.0.2/libjava/classpath/java/util/NoSuchElementException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/NoSuchElementException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,88 ----
+ /* NoSuchElementException.java -- Attempt to access element that does not exist
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  */
+ 
+ /**
+  * Exception thrown when an attempt is made to access an element that does not
+  * exist. This exception is thrown by the Enumeration, Iterator and
+  * ListIterator classes if the nextElement, next or previous method goes
+  * beyond the end of the list of elements that are being accessed. It is also
+  * thrown by Vector and Stack when attempting to access the first or last
+  * element of an empty collection.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Enumeration
+  * @see Iterator
+  * @see ListIterator
+  * @see Enumeration#nextElement()
+  * @see Iterator#next()
+  * @see ListIterator#previous()
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class NoSuchElementException extends RuntimeException
+ {
+   /**
+    * Compatible with JDK 1.0.
+    */
+   private static final long serialVersionUID = 6769829250639411880L;
+ 
+   /**
+    * Constructs a NoSuchElementException with no detail message.
+    */
+   public NoSuchElementException()
+   {
+   }
+ 
+   /**
+    * Constructs a NoSuchElementException with a detail message.
+    *
+    * @param detail the detail message for the exception
+    */
+   public NoSuchElementException(String detail)
+   {
+     super(detail);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Observable.java gcc-4.1.0/libjava/classpath/java/util/Observable.java
*** gcc-4.0.2/libjava/classpath/java/util/Observable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Observable.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,182 ----
+ /* Observable.java -- an object to be observed
+    Copyright (C) 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * This class represents an object which is observable.  Other objects may
+  * register their intent to be notified when this object changes; and when
+  * this object does change, it will trigger the <code>update</code> method
+  * of each observer.
+  *
+  * Note that the <code>notifyObservers()</code> method of this class is
+  * unrelated to the <code>notify()</code> of Object.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Observer
+  * @status updated to 1.4
+  */
+ public class Observable
+ {
+   /** Tracks whether this object has changed. */
+   private boolean changed;
+ 
+   /* List of the Observers registered as interested in this Observable. */
+   private LinkedHashSet observers;
+ 
+   /**
+    * Constructs an Observable with zero Observers.
+    */
+   public Observable()
+   {
+     observers = new LinkedHashSet();
+   }
+ 
+   /**
+    * Adds an Observer. If the observer was already added this method does
+    * nothing.
+    *
+    * @param observer Observer to add
+    * @throws NullPointerException if observer is null
+    */
+   public synchronized void addObserver(Observer observer)
+   {
+     if (observer == null)
+       throw new NullPointerException("can't add null observer");
+     observers.add(observer);
+   }
+ 
+   /**
+    * Reset this Observable's state to unchanged. This is called automatically
+    * by <code>notifyObservers</code> once all observers have been notified.
+    *
+    * @see #notifyObservers()
+    */
+   protected synchronized void clearChanged()
+   {
+     changed = false;
+   }
+ 
+   /**
+    * Returns the number of observers for this object.
+    *
+    * @return number of Observers for this
+    */
+   public synchronized int countObservers()
+   {
+     return observers.size();
+   }
+ 
+   /**
+    * Deletes an Observer of this Observable.
+    *
+    * @param victim Observer to delete
+    */
+   public synchronized void deleteObserver(Observer victim)
+   {
+     observers.remove(victim);
+   }
+ 
+   /**
+    * Deletes all Observers of this Observable.
+    */
+   public synchronized void deleteObservers()
+   {
+     observers.clear();
+   }
+ 
+   /**
+    * True if <code>setChanged</code> has been called more recently than
+    * <code>clearChanged</code>.
+    *
+    * @return whether or not this Observable has changed
+    */
+   public synchronized boolean hasChanged()
+   {
+     return changed;
+   }
+ 
+   /**
+    * If the Observable has actually changed then tell all Observers about it,
+    * then reset state to unchanged.
+    *
+    * @see #notifyObservers(Object)
+    * @see Observer#update(Observable, Object)
+    */
+   public void notifyObservers()
+   {
+     notifyObservers(null);
+   }
+ 
+   /**
+    * If the Observable has actually changed then tell all Observers about it,
+    * then reset state to unchanged. Note that though the order of
+    * notification is unspecified in subclasses, in Observable it is in the
+    * order of registration.
+    *
+    * @param obj argument to Observer's update method
+    * @see Observer#update(Observable, Object)
+    */
+   public void notifyObservers(Object obj)
+   {
+     if (! hasChanged())
+       return;
+     // Create clone inside monitor, as that is relatively fast and still
+     // important to keep threadsafe, but update observers outside of the
+     // lock since update() can call arbitrary code.
+     Set s;
+     synchronized (this)
+       {
+         s = (Set) observers.clone();
+       }
+     int i = s.size();
+     Iterator iter = s.iterator();
+     while (--i >= 0)
+       ((Observer) iter.next()).update(this, obj);
+     clearChanged();
+   }
+ 
+   /**
+    * Marks this Observable as having changed.
+    */
+   protected synchronized void setChanged()
+   {
+     changed = true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Observer.java gcc-4.1.0/libjava/classpath/java/util/Observer.java
*** gcc-4.0.2/libjava/classpath/java/util/Observer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Observer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* Observer.java -- an object that will be informed of changes in an Observable
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * Interface that is implemented when a class wants to be informed of changes
+  * in Observable objects.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see Observable
+  * @status updated to 1.4
+  */
+ public interface Observer
+ {
+   /**
+    * This method is called whenever the observable object changes, and has
+    * called <code>notifyObservers</code>. The Observable object can pass
+    * arbitrary information in the second parameter.
+    *
+    * @param observable the Observable object that changed
+    * @param arg arbitrary information, usually relating to the change
+    */
+   void update(Observable observable, Object arg);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Properties.java gcc-4.1.0/libjava/classpath/java/util/Properties.java
*** gcc-4.0.2/libjava/classpath/java/util/Properties.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Properties.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,915 ----
+ /* Properties.java -- a set of persistent properties
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.BufferedReader;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ 
+ import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.parsers.SAXParser;
+ import javax.xml.parsers.SAXParserFactory;
+ 
+ import org.xml.sax.Attributes;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.ext.DefaultHandler2;
+ 
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DocumentType;
+ import org.w3c.dom.DOMImplementation;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.bootstrap.DOMImplementationRegistry;
+ import org.w3c.dom.ls.DOMImplementationLS;
+ import org.w3c.dom.ls.LSOutput;
+ import org.w3c.dom.ls.LSSerializer;
+ 
+ /**
+  * A set of persistent properties, which can be saved or loaded from a stream.
+  * A property list may also contain defaults, searched if the main list
+  * does not contain a property for a given key.
+  *
+  * An example of a properties file for the german language is given
+  * here.  This extends the example given in ListResourceBundle.
+  * Create a file MyResource_de.properties with the following contents
+  * and put it in the CLASSPATH.  (The character
+  * <code>\</code><code>u00e4</code> is the german umlaut)
+  *
+  * 
+ <pre>s1=3
+ s2=MeineDisk
+ s3=3. M\<code></code>u00e4rz 96
+ s4=Die Diskette ''{1}'' enth\<code></code>u00e4lt {0} in {2}.
+ s5=0
+ s6=keine Dateien
+ s7=1
+ s8=eine Datei
+ s9=2
+ s10={0,number} Dateien
+ s11=Das Formatieren schlug fehl mit folgender Exception: {0}
+ s12=FEHLER
+ s13=Ergebnis
+ s14=Dialog
+ s15=Auswahlkriterium
+ s16=1,3</pre>
+  *
+  * <p>Although this is a sub class of a hash table, you should never
+  * insert anything other than strings to this property, or several
+  * methods, that need string keys and values, will fail.  To ensure
+  * this, you should use the <code>get/setProperty</code> method instead
+  * of <code>get/put</code>.
+  *
+  * Properties are saved in ISO 8859-1 encoding, using Unicode escapes with
+  * a single <code>u</code> for any character which cannot be represented.
+  *
+  * @author Jochen Hoenicke
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see PropertyResourceBundle
+  * @status updated to 1.4
+  */
+ public class Properties extends Hashtable
+ {
+   // WARNING: Properties is a CORE class in the bootstrap cycle. See the
+   // comments in vm/reference/java/lang/Runtime for implications of this fact.
+ 
+   /**
+    * The property list that contains default values for any keys not
+    * in this property list.
+    *
+    * @serial the default properties
+    */
+   protected Properties defaults;
+ 
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 4112578634029874840L;
+ 
+   /**
+    * Creates a new empty property list with no default values.
+    */
+   public Properties()
+   {
+   }
+ 
+   /**
+    * Create a new empty property list with the specified default values.
+    *
+    * @param defaults a Properties object containing the default values
+    */
+   public Properties(Properties defaults)
+   {
+     this.defaults = defaults;
+   }
+ 
+   /**
+    * Adds the given key/value pair to this properties.  This calls
+    * the hashtable method put.
+    *
+    * @param key the key for this property
+    * @param value the value for this property
+    * @return The old value for the given key
+    * @see #getProperty(String)
+    * @since 1.2
+    */
+   public Object setProperty(String key, String value)
+   {
+     return put(key, value);
+   }
+ 
+   /**
+    * Reads a property list from an input stream.  The stream should
+    * have the following format: <br>
+    *
+    * An empty line or a line starting with <code>#</code> or
+    * <code>!</code> is ignored.  An backslash (<code>\</code>) at the
+    * end of the line makes the line continueing on the next line
+    * (but make sure there is no whitespace after the backslash).
+    * Otherwise, each line describes a key/value pair. <br>
+    *
+    * The chars up to the first whitespace, = or : are the key.  You
+    * can include this caracters in the key, if you precede them with
+    * a backslash (<code>\</code>). The key is followed by optional
+    * whitespaces, optionally one <code>=</code> or <code>:</code>,
+    * and optionally some more whitespaces.  The rest of the line is
+    * the resource belonging to the key. <br>
+    *
+    * Escape sequences <code>\t, \n, \r, \\, \", \', \!, \#, \ </code>(a
+    * space), and unicode characters with the
+    * <code>\\u</code><em>xxxx</em> notation are detected, and
+    * converted to the corresponding single character. <br>
+    *
+    * 
+ <pre># This is a comment
+ key     = value
+ k\:5      \ a string starting with space and ending with newline\n
+ # This is a multiline specification; note that the value contains
+ # no white space.
+ weekdays: Sunday,Monday,Tuesday,Wednesday,\\
+           Thursday,Friday,Saturday
+ # The safest way to include a space at the end of a value:
+ label   = Name:\\u0020</pre>
+    *
+    * @param inStream the input stream
+    * @throws IOException if an error occurred when reading the input
+    * @throws NullPointerException if in is null
+    */
+   public void load(InputStream inStream) throws IOException
+   {
+     // The spec says that the file must be encoded using ISO-8859-1.
+     BufferedReader reader =
+       new BufferedReader(new InputStreamReader(inStream, "ISO-8859-1"));
+     String line;
+ 
+     while ((line = reader.readLine()) != null)
+       {
+         char c = 0;
+         int pos = 0;
+ 	// Leading whitespaces must be deleted first.
+         while (pos < line.length()
+                && Character.isWhitespace(c = line.charAt(pos)))
+           pos++;
+ 
+         // If empty line or begins with a comment character, skip this line.
+         if ((line.length() - pos) == 0
+ 	    || line.charAt(pos) == '#' || line.charAt(pos) == '!')
+           continue;
+ 
+         // The characters up to the next Whitespace, ':', or '='
+         // describe the key.  But look for escape sequences.
+ 	// Try to short-circuit when there is no escape char.
+ 	int start = pos;
+ 	boolean needsEscape = line.indexOf('\\', pos) != -1;
+         StringBuilder key = needsEscape ? new StringBuilder() : null;
+         while (pos < line.length()
+                && ! Character.isWhitespace(c = line.charAt(pos++))
+                && c != '=' && c != ':')
+           {
+             if (needsEscape && c == '\\')
+               {
+                 if (pos == line.length())
+                   {
+                     // The line continues on the next line.  If there
+                     // is no next line, just treat it as a key with an
+                     // empty value.
+                     line = reader.readLine();
+ 		    if (line == null)
+ 		      line = "";
+                     pos = 0;
+                     while (pos < line.length()
+                            && Character.isWhitespace(c = line.charAt(pos)))
+                       pos++;
+                   }
+                 else
+                   {
+                     c = line.charAt(pos++);
+                     switch (c)
+                       {
+                       case 'n':
+                         key.append('\n');
+                         break;
+                       case 't':
+                         key.append('\t');
+                         break;
+                       case 'r':
+                         key.append('\r');
+                         break;
+                       case 'u':
+                         if (pos + 4 <= line.length())
+                           {
+                             char uni = (char) Integer.parseInt
+                               (line.substring(pos, pos + 4), 16);
+                             key.append(uni);
+                             pos += 4;
+                           }        // else throw exception?
+                         break;
+                       default:
+                         key.append(c);
+                         break;
+                       }
+                   }
+               }
+             else if (needsEscape)
+               key.append(c);
+           }
+ 
+         boolean isDelim = (c == ':' || c == '=');
+ 
+ 	String keyString;
+ 	if (needsEscape)
+ 	  keyString = key.toString();
+ 	else if (isDelim || Character.isWhitespace(c))
+ 	  keyString = line.substring(start, pos - 1);
+ 	else
+ 	  keyString = line.substring(start, pos);
+ 
+         while (pos < line.length()
+                && Character.isWhitespace(c = line.charAt(pos)))
+           pos++;
+ 
+         if (! isDelim && (c == ':' || c == '='))
+           {
+             pos++;
+             while (pos < line.length()
+                    && Character.isWhitespace(c = line.charAt(pos)))
+               pos++;
+           }
+ 
+ 	// Short-circuit if no escape chars found.
+ 	if (!needsEscape)
+ 	  {
+ 	    put(keyString, line.substring(pos));
+ 	    continue;
+ 	  }
+ 
+ 	// Escape char found so iterate through the rest of the line.
+         StringBuilder element = new StringBuilder(line.length() - pos);
+         while (pos < line.length())
+           {
+             c = line.charAt(pos++);
+             if (c == '\\')
+               {
+                 if (pos == line.length())
+                   {
+                     // The line continues on the next line.
+                     line = reader.readLine();
+ 
+ 		    // We might have seen a backslash at the end of
+ 		    // the file.  The JDK ignores the backslash in
+ 		    // this case, so we follow for compatibility.
+ 		    if (line == null)
+ 		      break;
+ 
+                     pos = 0;
+                     while (pos < line.length()
+                            && Character.isWhitespace(c = line.charAt(pos)))
+                       pos++;
+                     element.ensureCapacity(line.length() - pos +
+                                            element.length());
+                   }
+                 else
+                   {
+                     c = line.charAt(pos++);
+                     switch (c)
+                       {
+                       case 'n':
+                         element.append('\n');
+                         break;
+                       case 't':
+                         element.append('\t');
+                         break;
+                       case 'r':
+                         element.append('\r');
+                         break;
+                       case 'u':
+                         if (pos + 4 <= line.length())
+                           {
+                             char uni = (char) Integer.parseInt
+                               (line.substring(pos, pos + 4), 16);
+                             element.append(uni);
+                             pos += 4;
+                           }        // else throw exception?
+                         break;
+                       default:
+                         element.append(c);
+                         break;
+                       }
+                   }
+               }
+             else
+               element.append(c);
+           }
+         put(keyString, element.toString());
+       }
+   }
+ 
+   /**
+    * Calls <code>store(OutputStream out, String header)</code> and
+    * ignores the IOException that may be thrown.
+    *
+    * @param out the stream to write to
+    * @param header a description of the property list
+    * @throws ClassCastException if this property contains any key or
+    *         value that are not strings
+    * @deprecated use {@link #store(OutputStream, String)} instead
+    */
+   public void save(OutputStream out, String header)
+   {
+     try
+       {
+         store(out, header);
+       }
+     catch (IOException ex)
+       {
+       }
+   }
+ 
+   /**
+    * Writes the key/value pairs to the given output stream, in a format
+    * suitable for <code>load</code>.<br>
+    *
+    * If header is not null, this method writes a comment containing
+    * the header as first line to the stream.  The next line (or first
+    * line if header is null) contains a comment with the current date.
+    * Afterwards the key/value pairs are written to the stream in the
+    * following format.<br>
+    *
+    * Each line has the form <code>key = value</code>.  Newlines,
+    * Returns and tabs are written as <code>\n,\t,\r</code> resp.
+    * The characters <code>\, !, #, =</code> and <code>:</code> are
+    * preceeded by a backslash.  Spaces are preceded with a backslash,
+    * if and only if they are at the beginning of the key.  Characters
+    * that are not in the ascii range 33 to 127 are written in the
+    * <code>\</code><code>u</code>xxxx Form.<br>
+    *
+    * Following the listing, the output stream is flushed but left open.
+    *
+    * @param out the output stream
+    * @param header the header written in the first line, may be null
+    * @throws ClassCastException if this property contains any key or
+    *         value that isn't a string
+    * @throws IOException if writing to the stream fails
+    * @throws NullPointerException if out is null
+    * @since 1.2
+    */
+   public void store(OutputStream out, String header) throws IOException
+   {
+     // The spec says that the file must be encoded using ISO-8859-1.
+     PrintWriter writer
+       = new PrintWriter(new OutputStreamWriter(out, "ISO-8859-1"));
+     if (header != null)
+       writer.println("#" + header);
+     writer.println ("#" + Calendar.getInstance ().getTime ());
+     
+     Iterator iter = entrySet ().iterator ();
+     int i = size ();
+     StringBuilder s = new StringBuilder (); // Reuse the same buffer.
+     while (--i >= 0)
+       {
+         Map.Entry entry = (Map.Entry) iter.next ();
+         formatForOutput ((String) entry.getKey (), s, true);
+         s.append ('=');
+         formatForOutput ((String) entry.getValue (), s, false);
+         writer.println (s);
+       }
+ 
+     writer.flush ();
+   }
+ 
+   /**
+    * Gets the property with the specified key in this property list.
+    * If the key is not found, the default property list is searched.
+    * If the property is not found in the default, null is returned.
+    *
+    * @param key The key for this property
+    * @return the value for the given key, or null if not found
+    * @throws ClassCastException if this property contains any key or
+    *         value that isn't a string
+    * @see #defaults
+    * @see #setProperty(String, String)
+    * @see #getProperty(String, String)
+    */
+   public String getProperty(String key)
+   {
+     Properties prop = this;
+     // Eliminate tail recursion.
+     do
+       {
+         String value = (String) prop.get(key);
+         if (value != null)
+           return value;
+         prop = prop.defaults;
+       }
+     while (prop != null);
+     return null;
+   }
+ 
+   /**
+    * Gets the property with the specified key in this property list.  If
+    * the key is not found, the default property list is searched.  If the
+    * property is not found in the default, the specified defaultValue is
+    * returned.
+    *
+    * @param key The key for this property
+    * @param defaultValue A default value
+    * @return The value for the given key
+    * @throws ClassCastException if this property contains any key or
+    *         value that isn't a string
+    * @see #defaults
+    * @see #setProperty(String, String)
+    */
+   public String getProperty(String key, String defaultValue)
+   {
+     String prop = getProperty(key);
+     if (prop == null)
+       prop = defaultValue;
+     return prop;
+   }
+ 
+   /**
+    * Returns an enumeration of all keys in this property list, including
+    * the keys in the default property list.
+    *
+    * @return an Enumeration of all defined keys
+    */
+   public Enumeration propertyNames()
+   {
+     // We make a new Set that holds all the keys, then return an enumeration
+     // for that. This prevents modifications from ruining the enumeration,
+     // as well as ignoring duplicates.
+     Properties prop = this;
+     Set s = new HashSet();
+     // Eliminate tail recursion.
+     do
+       {
+         s.addAll(prop.keySet());
+         prop = prop.defaults;
+       }
+     while (prop != null);
+     return Collections.enumeration(s);
+   }
+ 
+   /**
+    * Prints the key/value pairs to the given print stream.  This is 
+    * mainly useful for debugging purposes.
+    *
+    * @param out the print stream, where the key/value pairs are written to
+    * @throws ClassCastException if this property contains a key or a
+    *         value that isn't a string
+    * @see #list(PrintWriter)
+    */
+   public void list(PrintStream out)
+   {
+     PrintWriter writer = new PrintWriter (out);
+     list (writer);
+   }
+ 
+   /**
+    * Prints the key/value pairs to the given print writer.  This is
+    * mainly useful for debugging purposes.
+    *
+    * @param out the print writer where the key/value pairs are written to
+    * @throws ClassCastException if this property contains a key or a
+    *         value that isn't a string
+    * @see #list(PrintStream)
+    * @since 1.1
+    */
+   public void list(PrintWriter out)
+   {
+     out.println ("-- listing properties --");
+ 
+     Iterator iter = entrySet ().iterator ();
+     int i = size ();
+     while (--i >= 0)
+       {
+         Map.Entry entry = (Map.Entry) iter.next ();
+         out.print ((String) entry.getKey () + "=");
+ 
+         // JDK 1.3/1.4 restrict the printed value, but not the key,
+         // to 40 characters, including the truncating ellipsis.
+         String s = (String ) entry.getValue ();
+         if (s != null && s.length () > 40)
+           out.println (s.substring (0, 37) + "...");
+         else
+           out.println (s);
+       }
+     out.flush ();
+   }
+ 
+   /**
+    * Formats a key or value for output in a properties file.
+    * See store for a description of the format.
+    *
+    * @param str the string to format
+    * @param buffer the buffer to add it to
+    * @param key true if all ' ' must be escaped for the key, false if only
+    *        leading spaces must be escaped for the value
+    * @see #store(OutputStream, String)
+    */
+   private void formatForOutput(String str, StringBuilder buffer, boolean key)
+   {
+     if (key)
+       {
+         buffer.setLength(0);
+         buffer.ensureCapacity(str.length());
+       }
+     else
+       buffer.ensureCapacity(buffer.length() + str.length());
+     boolean head = true;
+     int size = str.length();
+     for (int i = 0; i < size; i++)
+       {
+         char c = str.charAt(i);
+         switch (c)
+           {
+           case '\n':
+             buffer.append("\\n");
+             break;
+           case '\r':
+             buffer.append("\\r");
+             break;
+           case '\t':
+             buffer.append("\\t");
+             break;
+           case ' ':
+             buffer.append(head ? "\\ " : " ");
+             break;
+           case '\\':
+           case '!':
+           case '#':
+           case '=':
+           case ':':
+             buffer.append('\\').append(c);
+             break;
+           default:
+             if (c < ' ' || c > '~')
+               {
+                 String hex = Integer.toHexString(c);
+                 buffer.append("\\u0000".substring(0, 6 - hex.length()));
+                 buffer.append(hex);
+               }
+             else
+               buffer.append(c);
+           }
+         if (c != ' ')
+           head = key;
+       }
+   }
+ 
+   /**
+    * <p>
+    * Encodes the properties as an XML file using the UTF-8 encoding.
+    * The format of the XML file matches the DTD
+    * <a href="http://java.sun.com/dtd/properties.dtd">
+    * http://java.sun.com/dtd/properties.dtd</a>.
+    * </p>
+    * <p>
+    * Invoking this method provides the same behaviour as invoking
+    * <code>storeToXML(os, comment, "UTF-8")</code>.
+    * </p>
+    * 
+    * @param os the stream to output to.
+    * @param comment a comment to include at the top of the XML file, or
+    *                <code>null</code> if one is not required.
+    * @throws IOException if the serialization fails.
+    * @throws NullPointerException if <code>os</code> is null.
+    * @since 1.5
+    */
+   public void storeToXML(OutputStream os, String comment)
+     throws IOException
+   {
+     storeToXML(os, comment, "UTF-8");
+   }
+ 
+   /**
+    * <p>
+    * Encodes the properties as an XML file using the supplied encoding.
+    * The format of the XML file matches the DTD
+    * <a href="http://java.sun.com/dtd/properties.dtd">
+    * http://java.sun.com/dtd/properties.dtd</a>.
+    * </p>
+    * 
+    * @param os the stream to output to.
+    * @param comment a comment to include at the top of the XML file, or
+    *                <code>null</code> if one is not required.
+    * @param encoding the encoding to use for the XML output.
+    * @throws IOException if the serialization fails.
+    * @throws NullPointerException if <code>os</code> or <code>encoding</code>
+    *                              is null.
+    * @since 1.5
+    */
+   public void storeToXML(OutputStream os, String comment, String encoding)
+     throws IOException
+   {
+     if (os == null)
+       throw new NullPointerException("Null output stream supplied.");
+     if (encoding == null)
+       throw new NullPointerException("Null encoding supplied.");
+     try
+       {
+ 	DOMImplementationRegistry registry = 
+ 	  DOMImplementationRegistry.newInstance();
+ 	DOMImplementation domImpl = registry.getDOMImplementation("LS 3.0");
+ 	DocumentType doctype =
+ 	  domImpl.createDocumentType("properties", null,
+ 				     "http://java.sun.com/dtd/properties.dtd");
+ 	Document doc = domImpl.createDocument(null, "properties", doctype);
+ 	Element root = doc.getDocumentElement();
+ 	if (comment != null)
+ 	  {
+ 	    Element commentElement = doc.createElement("comment");
+ 	    commentElement.appendChild(doc.createTextNode(comment));
+ 	    root.appendChild(commentElement);
+ 	  }
+ 	Iterator iterator = entrySet().iterator();
+ 	while (iterator.hasNext())
+ 	  {
+ 	    Map.Entry entry = (Map.Entry) iterator.next();
+ 	    Element entryElement = doc.createElement("entry");
+ 	    entryElement.setAttribute("key", (String) entry.getKey());
+ 	    entryElement.appendChild(doc.createTextNode((String)
+ 							entry.getValue()));
+ 	    root.appendChild(entryElement);
+ 	  }
+ 	DOMImplementationLS loadAndSave = (DOMImplementationLS) domImpl;
+ 	LSSerializer serializer = loadAndSave.createLSSerializer();
+ 	LSOutput output = loadAndSave.createLSOutput();
+ 	output.setByteStream(os);
+ 	output.setEncoding(encoding);
+ 	serializer.write(doc, output);
+       }
+     catch (ClassNotFoundException e)
+       {
+ 	throw (IOException) 
+ 	  new IOException("The XML classes could not be found.").initCause(e);
+       }
+     catch (InstantiationException e)
+       {
+ 	throw (IOException)
+ 	  new IOException("The XML classes could not be instantiated.")
+ 	  .initCause(e);
+       }
+     catch (IllegalAccessException e)
+       {
+ 	throw (IOException)
+ 	  new IOException("The XML classes could not be accessed.")
+ 	  .initCause(e);
+       }
+   }
+ 
+   /**
+    * <p>
+    * Decodes the contents of the supplied <code>InputStream</code> as
+    * an XML file, which represents a set of properties.  The format of
+    * the XML file must match the DTD
+    * <a href="http://java.sun.com/dtd/properties.dtd">
+    * http://java.sun.com/dtd/properties.dtd</a>.
+    * </p>
+    *
+    * @param in the input stream from which to receive the XML data.
+    * @throws IOException if an I/O error occurs in reading the input data.
+    * @throws InvalidPropertiesFormatException if the input data does not
+    *                                          constitute an XML properties
+    *                                          file.
+    * @throws NullPointerException if <code>in</code> is null.
+    * @since 1.5
+    */
+   public void loadFromXML(InputStream in)
+     throws IOException, InvalidPropertiesFormatException
+   {
+     if (in == null)
+       throw new NullPointerException("Null input stream supplied.");
+     try
+       {
+ 	SAXParserFactory factory = SAXParserFactory.newInstance();
+ 	factory.setValidating(false); /* Don't use the URI */
+ 	XMLReader parser = factory.newSAXParser().getXMLReader();
+ 	PropertiesHandler handler = new PropertiesHandler();
+ 	parser.setContentHandler(handler);
+ 	parser.setProperty("http://xml.org/sax/properties/lexical-handler",
+ 			   handler);
+ 	parser.parse(new InputSource(in));
+       }
+     catch (SAXException e)
+       {
+ 	throw (InvalidPropertiesFormatException)
+ 	  new InvalidPropertiesFormatException("Error in parsing XML.").
+ 	  initCause(e);
+       }
+     catch (ParserConfigurationException e)
+       {
+ 	throw (IOException)
+ 	  new IOException("An XML parser could not be found.").
+ 	  initCause(e);
+       }
+   }
+ 
+   /**
+    * This class deals with the parsing of XML using 
+    * <a href="http://java.sun.com/dtd/properties.dtd">
+    * http://java.sun.com/dtd/properties.dtd</a>.
+    *   
+    * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+    * @since 1.5
+    */
+   private class PropertiesHandler
+     extends DefaultHandler2
+   {
+     
+     /**
+      * The current key.
+      */
+     private String key;
+     
+     /**
+      * The current value.
+      */
+     private String value;
+ 
+     /**
+      * A flag to check whether a valid DTD declaration has been seen.
+      */
+     private boolean dtdDeclSeen;
+ 
+     /**
+      * Constructs a new Properties handler.
+      */
+     public PropertiesHandler()
+     {
+       key = null;
+       value = null;
+       dtdDeclSeen = false;
+     }
+ 
+     /**
+      * <p>
+      * Captures the start of the DTD declarations, if they exist.
+      * A valid properties file must declare the following doctype:
+      * </p>
+      * <p>
+      * <code>!DOCTYPE properties SYSTEM
+      * "http://java.sun.com/dtd/properties.dtd"</code>
+      * </p>
+      * 
+      * @param name the name of the document type.
+      * @param publicId the public identifier that was declared, or
+      *                 null if there wasn't one.
+      * @param systemId the system identifier that was declared, or
+      *                 null if there wasn't one.
+      * @throws SAXException if some error occurs in parsing.
+      */
+     public void startDTD(String name, String publicId, String systemId)
+       throws SAXException
+     {
+       if (name.equals("properties") &&
+ 	  publicId == null &&
+ 	  systemId.equals("http://java.sun.com/dtd/properties.dtd"))
+ 	{
+ 	  dtdDeclSeen = true;
+ 	}
+       else
+ 	throw new SAXException("Invalid DTD declaration: " + name);
+     }
+ 
+     /**
+      * Captures the start of an XML element.
+      *
+      * @param uri the namespace URI.
+      * @param localName the local name of the element inside the namespace.
+      * @param qName the local name qualified with the namespace URI.
+      * @param attributes the attributes of this element.
+      * @throws SAXException if some error occurs in parsing.
+      */
+     public void startElement(String uri, String localName,
+ 			     String qName, Attributes attributes)
+       throws SAXException
+     {
+       if (qName.equals("entry"))
+ 	{
+ 	  int index = attributes.getIndex("key");
+ 	  if (index != -1)
+ 	    key = attributes.getValue(index);
+ 	}
+       else if (qName.equals("comment") || qName.equals("properties"))
+ 	{
+ 	  /* Ignore it */
+ 	}
+       else
+ 	throw new SAXException("Invalid tag: " + qName);
+     }
+     
+     /**
+      * Captures characters within an XML element.
+      *
+      * @param ch the array of characters.
+      * @param start the start index of the characters to use.
+      * @param length the number of characters to use from the start index on.
+      * @throws SAXException if some error occurs in parsing.
+      */
+     public void characters(char[] ch, int start, int length)
+       throws SAXException
+     {
+       if (key != null)
+ 	value = new String(ch,start,length);
+     }
+     
+     /**
+      * Captures the end of an XML element.
+      *
+      * @param uri the namespace URI.
+      * @param localName the local name of the element inside the namespace.
+      * @param qName the local name qualified with the namespace URI.
+      * @throws SAXException if some error occurs in parsing.
+      */
+     public void endElement(String uri, String localName,
+ 			   String qName)
+       throws SAXException
+     {
+       if (qName.equals("entry"))
+ 	{
+ 	  if (value == null)
+ 	    value = "";
+ 	  setProperty(key, value);
+ 	  key = null;
+ 	  value = null;
+ 	}
+     }
+ 
+     /**
+      * Captures the end of the XML document.  If a DTD declaration has
+      * not been seen, the document is erroneous and an exception is thrown.
+      *
+      * @throws SAXException if the correct DTD declaration didn't appear.
+      */
+     public void endDocument()
+       throws SAXException
+     {
+       if (!dtdDeclSeen)
+ 	throw new SAXException("No appropriate DTD declaration was seen.");
+     }
+ 
+   } // class PropertiesHandler
+ 
+ } // class Properties
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/PropertyPermission.java gcc-4.1.0/libjava/classpath/java/util/PropertyPermission.java
*** gcc-4.0.2/libjava/classpath/java/util/PropertyPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/PropertyPermission.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,271 ----
+ /* PropertyPermission.java -- permission to get and set System properties
+    Copyright (C) 1999, 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.ObjectStreamField;
+ import java.security.BasicPermission;
+ import java.security.Permission;
+ import java.security.PermissionCollection;
+ 
+ /**
+  * This class represents the permission to access and modify a property.<br>
+  *
+  * The name is the name of the property, e.g. xxx.  You can also
+  * use an asterisk "*" as described in BasicPermission.<br>
+  *
+  * The action string is a comma-separated list of keywords.  There are
+  * two possible actions:
+  * <dl>
+  * <dt>read</dt>
+  * <dd>Allows to read the property via <code>System.getProperty</code>.</dd>
+  * <dt>write</dt>
+  * <dd>Allows to write the property via <code>System.setProperty</code>.</dd>
+  * </dl>
+  *
+  * The action string is case insensitive (it is converted to lower case).
+  *
+  * @see Permission
+  * @see BasicPermission
+  * @see SecurityManager
+  * @author Jochen Hoenicke
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public final class PropertyPermission extends BasicPermission
+ {
+   /**
+    * PropertyPermission uses a more efficient representation than the
+    * serialized form; this documents the difference.
+    *
+    * @serialField action String the action string
+    */
+   private static final ObjectStreamField[] serialPersistentFields =
+   {
+     new ObjectStreamField("action", String.class)
+   };
+ 
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 885438825399942851L;
+ 
+   /** Permission to read. */
+   private static final int READ = 1;
+   /** Permission to write. */
+   private static final int WRITE = 2;
+ 
+   /** The set of actions permitted. */
+   // Package visible for use by PropertyPermissionCollection.
+   transient int actions;
+ 
+   /**
+    * The String forms of the actions permitted.
+    */
+   private static final String actionStrings[] =
+   {
+     "", "read", "write", "read,write"
+   };
+ 
+   /**
+    * Constructs a PropertyPermission with the specified property.  Possible
+    * actions are read and write, comma-separated and case-insensitive.
+    *
+    * @param name the name of the property
+    * @param actions the action string
+    * @throws NullPointerException if name is null
+    * @throws IllegalArgumentException if name string contains an
+    *         illegal wildcard or actions string contains an illegal action
+    *         (this includes a null actions string)
+    */
+   public PropertyPermission(String name, String actions)
+   {
+     super(name);
+     if (actions == null)
+       throw new IllegalArgumentException();
+     setActions(actions);
+   }
+ 
+   /**
+    * Parse the action string and convert actions from external to internal
+    * form.  This will set the internal actions field.
+    *
+    * @param str the action string
+    * @throws IllegalArgumentException if actions string contains an
+    *         illegal action
+    */
+   private void setActions(String str)
+   {
+     // Initialising the class java.util.Locale ...
+     //    tries to initialise the Locale.defaultLocale static
+     //    which calls System.getProperty, 
+     //    which calls SecurityManager.checkPropertiesAccess,
+     //    which creates a PropertyPermission with action "read,write",
+     //    which calls setActions("read,write").
+     // If we now were to call toLowerCase on 'str',
+     //    this would call Locale.getDefault() which returns null
+     //       because Locale.defaultLocale hasn't been set yet
+     //    then toLowerCase will fail with a null pointer exception.
+     // 
+     // The solution is to take a punt on 'str' being lower case, and
+     // test accordingly.  If that fails, we convert 'str' to lower case 
+     // and try the tests again.
+     if ("read".equals(str))
+       actions = READ;
+     else if ("write".equals(str))
+       actions = WRITE;
+     else if ("read,write".equals(str) || "write,read".equals(str))
+       actions = READ | WRITE;
+     else
+       {
+ 	String lstr = str.toLowerCase();
+ 	if ("read".equals(lstr))
+  	  actions = READ;
+ 	else if ("write".equals(lstr))
+ 	  actions = WRITE;
+ 	else if ("read,write".equals(lstr) || "write,read".equals(lstr))
+ 	  actions = READ | WRITE;
+ 	else
+ 	  throw new IllegalArgumentException("illegal action " + str);
+       }
+   }
+ 
+   /**
+    * Reads an object from the stream. This converts the external to the
+    * internal representation.
+    *
+    * @param s the stream to read from
+    * @throws IOException if the stream fails
+    * @throws ClassNotFoundException if reserialization fails
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     ObjectInputStream.GetField fields = s.readFields();
+     setActions((String) fields.get("actions", null));
+   }
+ 
+   /**
+    * Writes an object to the stream. This converts the internal to the
+    * external representation.
+    *
+    * @param s the stram to write to
+    * @throws IOException if the stream fails
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     ObjectOutputStream.PutField fields = s.putFields();
+     fields.put("actions", getActions());
+     s.writeFields();
+   }
+ 
+   /**
+    * Check if this permission implies p.  This returns true iff all of
+    * the following conditions are true:
+    * <ul>
+    * <li> p is a PropertyPermission </li>
+    * <li> this.getName() implies p.getName(),
+    *  e.g. <code>java.*</code> implies <code>java.home</code> </li>
+    * <li> this.getActions is a subset of p.getActions </li>
+    * </ul>
+    *
+    * @param p the permission to check
+    * @return true if this permission implies p
+    */
+   public boolean implies(Permission p)
+   {
+     // BasicPermission checks for name and type.
+     if (super.implies(p))
+       {
+         // We have to check the actions.
+         PropertyPermission pp = (PropertyPermission) p;
+         return (pp.actions & ~actions) == 0;
+       }
+     return false;
+   }
+ 
+   /**
+    * Check to see whether this object is the same as another
+    * PropertyPermission object; this is true if it has the same name and
+    * actions.
+    *
+    * @param obj the other object
+    * @return true if the two are equivalent
+    */
+   public boolean equals(Object obj)
+   {
+     return super.equals(obj) && actions == ((PropertyPermission) obj).actions;
+   }
+ 
+   /**
+    * Returns the hash code for this permission.  It is equivalent to
+    * <code>getName().hashCode()</code>.
+    *
+    * @return the hash code
+    */
+   public int hashCode()
+   {
+     return super.hashCode();
+   }
+ 
+   /**
+    * Returns the action string.  Note that this may differ from the string
+    * given at the constructor:  The actions are converted to lowercase and
+    * may be reordered.
+    *
+    * @return one of "read", "write", or "read,write"
+    */
+   public String getActions()
+   {
+     return actionStrings[actions];
+   }
+ 
+   /**
+    * Returns a permission collection suitable to take
+    * PropertyPermission objects.
+    *
+    * @return a new empty PermissionCollection
+    */
+   public PermissionCollection newPermissionCollection()
+   {
+     return new PropertyPermissionCollection();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/PropertyPermissionCollection.java gcc-4.1.0/libjava/classpath/java/util/PropertyPermissionCollection.java
*** gcc-4.0.2/libjava/classpath/java/util/PropertyPermissionCollection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/PropertyPermissionCollection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,166 ----
+ /* PropertyPermissionCollection.java -- a collection of PropertyPermissions
+    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.security.Permission;
+ import java.security.PermissionCollection;
+ 
+ /**
+  * This class provides the implementation for
+  * <code>PropertyPermission.newPermissionCollection()</code>. It only accepts
+  * PropertyPermissions, and correctly implements <code>implies</code>. It
+  * is synchronized, as specified in the superclass.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @status an undocumented class, but this matches Sun's serialization
+  */
+ class PropertyPermissionCollection extends PermissionCollection
+ {
+   /**
+    * Compatible with JDK 1.4.
+    */
+   private static final long serialVersionUID = 7015263904581634791L;
+ 
+   /**
+    * The permissions.
+    *
+    * @serial the table of permissions in the collection
+    */
+   private final Hashtable permissions = new Hashtable();
+ 
+   /**
+    * A flag to detect if "*" is in the collection.
+    *
+    * @serial true if "*" is in the collection 
+    */
+   private boolean all_allowed;
+ 
+   /**
+    * Adds a PropertyPermission to this collection.
+    *
+    * @param permission the permission to add
+    * @throws IllegalArgumentException if permission is not a PropertyPermission
+    * @throws SecurityException if collection is read-only
+    */
+   public void add(Permission permission)
+   {
+     if (isReadOnly())
+       throw new SecurityException("readonly");
+     if (! (permission instanceof PropertyPermission))
+       throw new IllegalArgumentException();
+     PropertyPermission pp = (PropertyPermission) permission;
+     String name = pp.getName();
+     if (name.equals("*"))
+         all_allowed = true;
+     PropertyPermission old = (PropertyPermission) permissions.get(name);
+     if (old != null)
+       {
+         if ((pp.actions | old.actions) == old.actions)
+           pp = old; // Old implies pp.
+         else if ((pp.actions | old.actions) != pp.actions)
+           // Here pp doesn't imply old; the only case left is both actions.
+           pp = new PropertyPermission(name, "read,write");
+       }
+     permissions.put(name, pp);
+   }
+ 
+   /**
+    * Returns true if this collection implies the given permission. This even
+    * returns true for this case:
+    *
+    * <pre>
+    * collection.add(new PropertyPermission("a.*", "read"));
+    * collection.add(new PropertyPermission("a.b.*", "write"));
+    * collection.implies(new PropertyPermission("a.b.c", "read,write"));
+    * </pre>
+    *
+    * @param permission the permission to check
+    * @return true if it is implied by this
+    */
+   public boolean implies(Permission permission)
+   {
+     if (! (permission instanceof PropertyPermission))
+       return false;
+     PropertyPermission toImply = (PropertyPermission) permission;
+     int actions = toImply.actions;
+ 
+     if (all_allowed)
+       {
+         int all_actions = ((PropertyPermission) permissions.get("*")).actions;
+         actions &= ~all_actions;
+         if (actions == 0)
+           return true;
+       }
+ 
+     String name = toImply.getName();
+     if (name.equals("*"))
+       return false;
+ 
+     int prefixLength = name.length();
+     if (name.endsWith("*"))
+       prefixLength -= 2;
+ 
+     while (true)
+       {
+         PropertyPermission forName =
+           (PropertyPermission) permissions.get(name);
+         if (forName != null)
+           {
+             actions &= ~forName.actions;
+             if (actions == 0)
+               return true;
+           }
+ 
+         prefixLength = name.lastIndexOf('.', prefixLength - 1);
+         if (prefixLength < 0)
+           return false;
+         name = name.substring(0, prefixLength + 1) + '*';
+       }
+   }
+ 
+   /**
+    * Enumerate over the collection.
+    *
+    * @return an enumeration of the collection contents
+    */
+   public Enumeration elements()
+   {
+     return permissions.elements();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/PropertyResourceBundle.java gcc-4.1.0/libjava/classpath/java/util/PropertyResourceBundle.java
*** gcc-4.0.2/libjava/classpath/java/util/PropertyResourceBundle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/PropertyResourceBundle.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,152 ----
+ /* PropertyResourceBundle -- a resource bundle built from a Property file
+    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * This class is a concrete <code>ResourceBundle</code> that gets it
+  * resources from a property file. This implies that the resources are
+  * strings. For more information about resource bundles see the class
+  * <code>ResourceBundle</code>.
+  *
+  * You should not use this class directly, or subclass it, but you get
+  * an object of this class automatically when you call
+  * <code>ResourceBundle.getBundle()</code> and there is a properties
+  * file.
+  *
+  * If there is also a class for this resource and the same locale, the
+  * class will be chosen. The properties file should have the name of the
+  * resource bundle, appended with the locale (e.g. <code>_de</code> and the
+  * extension <code>.properties</code>. The file should have the same format
+  * as for <code>Properties.load()</code>
+  *
+  * An example of a properties file for the german language is given
+  * here. This extends the example given in ListResourceBundle.
+  * Create a file MyResource_de.properties with the following contents
+  * and put it in the CLASSPATH. (The char <code>\u00e4</code> is the
+  * german umlaut)
+  *
+  *
+ <pre>
+ s1=3
+ s2=MeineDisk
+ s3=3. M\u00e4rz 96
+ s4=Die Diskette ''{1}'' enth\u00e4lt {0} in {2}.
+ s5=0
+ s6=keine Dateien
+ s7=1
+ s8=eine Datei
+ s9=2
+ s10={0,number} Dateien
+ s11=Die Formatierung warf eine Exception: {0}
+ s12=FEHLER
+ s13=Ergebnis
+ s14=Dialog
+ s15=Auswahlkriterium
+ s16=1,3
+ </pre>
+  *
+  * @author Jochen Hoenicke
+  * @see ResourceBundle
+  * @see ListResourceBundle
+  * @see Properties#load(InputStream)
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class PropertyResourceBundle extends ResourceBundle
+ {
+   /** The properties file this bundle is based on. */
+   private Properties properties;
+ 
+   /**
+    * Creates a new property resource bundle.
+    *
+    * @param stream an input stream, where the resources are read from
+    * @throws NullPointerException if stream is null
+    * @throws IOException if reading the stream fails
+    */
+   public PropertyResourceBundle(InputStream stream) throws IOException
+   {
+     properties = new Properties();
+     properties.load(stream);
+   }
+ 
+   /**
+    * Called by <code>getObject</code> when a resource is needed. This
+    * returns the resource given by the key.
+    *
+    * @param key the key of the resource
+    * @return the resource for the key, or null if it doesn't exist
+    */
+   public Object handleGetObject(String key)
+   {
+     return properties.getProperty(key);
+   }
+ 
+   /**
+    * This method should return all keys for which a resource exists.
+    *
+    * @return an enumeration of the keys
+    */
+   public Enumeration getKeys()
+   {
+     if (parent == null)
+       return properties.propertyNames();
+     // We make a new Set that holds all the keys, then return an enumeration
+     // for that. This prevents modifications from ruining the enumeration,
+     // as well as ignoring duplicates.
+     Set s = new HashSet();
+     Enumeration e = properties.propertyNames();
+     while (e.hasMoreElements())
+       s.add(e.nextElement());
+     ResourceBundle bundle = parent;
+     // Eliminate tail recursion.
+     do
+       {
+         e = bundle.getKeys();
+         while (e.hasMoreElements())
+           s.add(e.nextElement());
+         bundle = bundle.parent;
+       }
+     while (bundle != null);
+     return Collections.enumeration(s);
+   }
+ } // class PropertyResourceBundle
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Random.java gcc-4.1.0/libjava/classpath/java/util/Random.java
*** gcc-4.0.2/libjava/classpath/java/util/Random.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Random.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,429 ----
+ /* Random.java -- a pseudo-random number generator
+    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * This class generates pseudorandom numbers.  It uses the same
+  * algorithm as the original JDK-class, so that your programs behave
+  * exactly the same way, if started with the same seed.
+  *
+  * The algorithm is described in <em>The Art of Computer Programming,
+  * Volume 2</em> by Donald Knuth in Section 3.2.1.  It is a 48-bit seed,
+  * linear congruential formula.
+  *
+  * If two instances of this class are created with the same seed and
+  * the same calls to these classes are made, they behave exactly the
+  * same way.  This should be even true for foreign implementations
+  * (like this), so every port must use the same algorithm as described
+  * here.
+  *
+  * If you want to implement your own pseudorandom algorithm, you
+  * should extend this class and overload the <code>next()</code> and
+  * <code>setSeed(long)</code> method.  In that case the above
+  * paragraph doesn't apply to you.
+  *
+  * This class shouldn't be used for security sensitive purposes (like
+  * generating passwords or encryption keys.  See <code>SecureRandom</code>
+  * in package <code>java.security</code> for this purpose.
+  *
+  * For simple random doubles between 0.0 and 1.0, you may consider using
+  * Math.random instead.
+  *
+  * @see java.security.SecureRandom
+  * @see Math#random()
+  * @author Jochen Hoenicke
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @status updated to 1.4
+  */
+ public class Random implements Serializable
+ {
+   /**
+    * True if the next nextGaussian is available.  This is used by
+    * nextGaussian, which generates two gaussian numbers by one call,
+    * and returns the second on the second call.
+    *
+    * @serial whether nextNextGaussian is available
+    * @see #nextGaussian()
+    * @see #nextNextGaussian
+    */
+   private boolean haveNextNextGaussian;
+ 
+   /**
+    * The next nextGaussian, when available.  This is used by nextGaussian,
+    * which generates two gaussian numbers by one call, and returns the
+    * second on the second call.
+    *
+    * @serial the second gaussian of a pair
+    * @see #nextGaussian()
+    * @see #haveNextNextGaussian
+    */
+   private double nextNextGaussian;
+ 
+   /**
+    * The seed.  This is the number set by setSeed and which is used
+    * in next.
+    *
+    * @serial the internal state of this generator
+    * @see #next(int)
+    */
+   private long seed;
+ 
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 3905348978240129619L;
+ 
+   /**
+    * Creates a new pseudorandom number generator.  The seed is initialized
+    * to the current time, as if by
+    * <code>setSeed(System.currentTimeMillis());</code>.
+    *
+    * @see System#currentTimeMillis()
+    */
+   public Random()
+   {
+     this(System.currentTimeMillis());
+   }
+ 
+   /**
+    * Creates a new pseudorandom number generator, starting with the
+    * specified seed, using <code>setSeed(seed);</code>.
+    *
+    * @param seed the initial seed
+    */
+   public Random(long seed)
+   {
+     setSeed(seed);
+   }
+ 
+   /**
+    * Sets the seed for this pseudorandom number generator.  As described
+    * above, two instances of the same random class, starting with the
+    * same seed, should produce the same results, if the same methods
+    * are called.  The implementation for java.util.Random is:
+    *
+ <pre>public synchronized void setSeed(long seed)
+ {
+   this.seed = (seed ^ 0x5DEECE66DL) & ((1L &lt;&lt; 48) - 1);
+   haveNextNextGaussian = false;
+ }</pre>
+    *
+    * @param seed the new seed
+    */
+   public synchronized void setSeed(long seed)
+   {
+     this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
+     haveNextNextGaussian = false;
+   }
+ 
+   /**
+    * Generates the next pseudorandom number.  This returns
+    * an int value whose <code>bits</code> low order bits are
+    * independent chosen random bits (0 and 1 are equally likely).
+    * The implementation for java.util.Random is:
+    *
+ <pre>protected synchronized int next(int bits)
+ {
+   seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L &lt;&lt; 48) - 1);
+   return (int) (seed &gt;&gt;&gt; (48 - bits));
+ }</pre>
+    *
+    * @param bits the number of random bits to generate, in the range 1..32
+    * @return the next pseudorandom value
+    * @since 1.1
+    */
+   protected synchronized int next(int bits)
+   {
+     seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
+     return (int) (seed >>> (48 - bits));
+   }
+ 
+   /**
+    * Fills an array of bytes with random numbers.  All possible values
+    * are (approximately) equally likely.
+    * The JDK documentation gives no implementation, but it seems to be:
+    *
+ <pre>public void nextBytes(byte[] bytes)
+ {
+   for (int i = 0; i &lt; bytes.length; i += 4)
+   {
+     int random = next(32);
+     for (int j = 0; i + j &lt; bytes.length && j &lt; 4; j++)
+     {
+       bytes[i+j] = (byte) (random & 0xff)
+       random &gt;&gt;= 8;
+     }
+   }
+ }</pre>
+    *
+    * @param bytes the byte array that should be filled
+    * @throws NullPointerException if bytes is null
+    * @since 1.1
+    */
+   public void nextBytes(byte[] bytes)
+   {
+     int random;
+     // Do a little bit unrolling of the above algorithm.
+     int max = bytes.length & ~0x3;
+     for (int i = 0; i < max; i += 4)
+       {
+         random = next(32);
+         bytes[i] = (byte) random;
+         bytes[i + 1] = (byte) (random >> 8);
+         bytes[i + 2] = (byte) (random >> 16);
+         bytes[i + 3] = (byte) (random >> 24);
+       }
+     if (max < bytes.length)
+       {
+         random = next(32);
+         for (int j = max; j < bytes.length; j++)
+           {
+             bytes[j] = (byte) random;
+             random >>= 8;
+           }
+       }
+   }
+ 
+   /**
+    * Generates the next pseudorandom number.  This returns
+    * an int value whose 32 bits are independent chosen random bits
+    * (0 and 1 are equally likely).  The implementation for
+    * java.util.Random is:
+    * 
+ <pre>public int nextInt()
+ {
+   return next(32);
+ }</pre>
+    *
+    * @return the next pseudorandom value
+    */
+   public int nextInt()
+   {
+     return next(32);
+   }
+ 
+   /**
+    * Generates the next pseudorandom number.  This returns
+    * a value between 0(inclusive) and <code>n</code>(exclusive), and
+    * each value has the same likelihodd (1/<code>n</code>).
+    * (0 and 1 are equally likely).  The implementation for
+    * java.util.Random is:
+    * 
+ <pre>
+ public int nextInt(int n)
+ {
+   if (n &lt;= 0)
+     throw new IllegalArgumentException("n must be positive");
+ 
+   if ((n & -n) == n)  // i.e., n is a power of 2
+     return (int)((n * (long) next(31)) &gt;&gt; 31);
+ 
+   int bits, val;
+   do
+   {
+     bits = next(31);
+     val = bits % n;
+   }
+   while(bits - val + (n-1) &lt; 0);
+ 
+   return val;
+ }</pre>
+    *   
+    * <p>This algorithm would return every value with exactly the same
+    * probability, if the next()-method would be a perfect random number
+    * generator.
+    *
+    * The loop at the bottom only accepts a value, if the random
+    * number was between 0 and the highest number less then 1<<31,
+    * which is divisible by n.  The probability for this is high for small
+    * n, and the worst case is 1/2 (for n=(1<<30)+1).
+    *
+    * The special treatment for n = power of 2, selects the high bits of
+    * the random number (the loop at the bottom would select the low order
+    * bits).  This is done, because the low order bits of linear congruential
+    * number generators (like the one used in this class) are known to be
+    * ``less random'' than the high order bits.
+    *
+    * @param n the upper bound
+    * @throws IllegalArgumentException if the given upper bound is negative
+    * @return the next pseudorandom value
+    * @since 1.2
+    */
+   public int nextInt(int n)
+   {
+     if (n <= 0)
+       throw new IllegalArgumentException("n must be positive");
+     if ((n & -n) == n) // i.e., n is a power of 2
+       return (int) ((n * (long) next(31)) >> 31);
+     int bits, val;
+     do
+       {
+         bits = next(31);
+         val = bits % n;
+       }
+     while (bits - val + (n - 1) < 0);
+     return val;
+   }
+ 
+   /**
+    * Generates the next pseudorandom long number.  All bits of this
+    * long are independently chosen and 0 and 1 have equal likelihood.
+    * The implementation for java.util.Random is:
+    *
+ <pre>public long nextLong()
+ {
+   return ((long) next(32) &lt;&lt; 32) + next(32);
+ }</pre>
+    *
+    * @return the next pseudorandom value
+    */
+   public long nextLong()
+   {
+     return ((long) next(32) << 32) + next(32);
+   }
+ 
+   /**
+    * Generates the next pseudorandom boolean.  True and false have
+    * the same probability.  The implementation is:
+    * 
+ <pre>public boolean nextBoolean()
+ {
+   return next(1) != 0;
+ }</pre>
+    *
+    * @return the next pseudorandom boolean
+    * @since 1.2
+    */
+   public boolean nextBoolean()
+   {
+     return next(1) != 0;
+   }
+ 
+   /**
+    * Generates the next pseudorandom float uniformly distributed
+    * between 0.0f (inclusive) and 1.0f (exclusive).  The
+    * implementation is as follows.
+    * 
+ <pre>public float nextFloat()
+ {
+   return next(24) / ((float)(1 &lt;&lt; 24));
+ }</pre>
+    *
+    * @return the next pseudorandom float
+    */
+   public float nextFloat()
+   {
+     return next(24) / (float) (1 << 24);
+   }
+ 
+   /**
+    * Generates the next pseudorandom double uniformly distributed
+    * between 0.0 (inclusive) and 1.0 (exclusive).  The
+    * implementation is as follows.
+    *
+ <pre>public double nextDouble()
+ {
+   return (((long) next(26) &lt;&lt; 27) + next(27)) / (double)(1L &lt;&lt; 53);
+ }</pre>
+    *
+    * @return the next pseudorandom double
+    */
+   public double nextDouble()
+   {
+     return (((long) next(26) << 27) + next(27)) / (double) (1L << 53);
+   }
+ 
+   /**
+    * Generates the next pseudorandom, Gaussian (normally) distributed
+    * double value, with mean 0.0 and standard deviation 1.0.
+    * The algorithm is as follows.
+    * 
+ <pre>public synchronized double nextGaussian()
+ {
+   if (haveNextNextGaussian)
+   {
+     haveNextNextGaussian = false;
+     return nextNextGaussian;
+   }
+   else
+   {
+     double v1, v2, s;
+     do
+     {
+       v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0
+       v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0
+       s = v1 * v1 + v2 * v2;
+     }
+     while (s >= 1);
+ 
+     double norm = Math.sqrt(-2 * Math.log(s) / s);
+     nextNextGaussian = v2 * norm;
+     haveNextNextGaussian = true;
+     return v1 * norm;
+   }
+ }</pre>
+    *
+    * <p>This is described in section 3.4.1 of <em>The Art of Computer
+    * Programming, Volume 2</em> by Donald Knuth.
+    *
+    * @return the next pseudorandom Gaussian distributed double
+    */
+   public synchronized double nextGaussian()
+   {
+     if (haveNextNextGaussian)
+       {
+         haveNextNextGaussian = false;
+         return nextNextGaussian;
+       }
+     double v1, v2, s;
+     do
+       {
+         v1 = 2 * nextDouble() - 1; // Between -1.0 and 1.0.
+         v2 = 2 * nextDouble() - 1; // Between -1.0 and 1.0.
+         s = v1 * v1 + v2 * v2;
+       }
+     while (s >= 1);
+     double norm = Math.sqrt(-2 * Math.log(s) / s);
+     nextNextGaussian = v2 * norm;
+     haveNextNextGaussian = true;
+     return v1 * norm;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/RandomAccess.java gcc-4.1.0/libjava/classpath/java/util/RandomAccess.java
*** gcc-4.0.2/libjava/classpath/java/util/RandomAccess.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/RandomAccess.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* RandomAccess.java -- A tagging interface that lists can use to tailor
+    operations to the correct algorithm
+    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * Marker interface used to inform <code>List</code> implementations that
+  * they support fast (usually constant time) random access. This allows
+  * generic list algorithms to tailor their behavior based on the list
+  * type.
+  * <p>
+  *
+  * For example, some sorts are n*log(n) on an array, but decay to quadratic
+  * time on a linked list.  As a rule of thumb, this interface should be
+  * used is this loop:<br>
+  * <code>for (int i = 0, n = list.size(); i &lt; n; i++) list.get(i);</code>
+  * <br>runs faster than this loop:<br>
+  * <code>for (Iterator i = list.iterator(); i.hasNext(); ) i.next();</code>
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see List
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public interface RandomAccess
+ {
+   // Tagging interface only.
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/ResourceBundle.java gcc-4.1.0/libjava/classpath/java/util/ResourceBundle.java
*** gcc-4.0.2/libjava/classpath/java/util/ResourceBundle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/ResourceBundle.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,583 ----
+ /* ResourceBundle -- aids in loading resource bundles
+    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import gnu.classpath.VMStackWalker;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * A resource bundle contains locale-specific data. If you need localized
+  * data, you can load a resource bundle that matches the locale with
+  * <code>getBundle</code>. Now you can get your object by calling
+  * <code>getObject</code> or <code>getString</code> on that bundle.
+  *
+  * <p>When a bundle is demanded for a specific locale, the ResourceBundle
+  * is searched in following order (<i>def. language</i> stands for the
+  * two letter ISO language code of the default locale (see
+  * <code>Locale.getDefault()</code>).
+  *
+ <pre>baseName_<i>language code</i>_<i>country code</i>_<i>variant</i>
+ baseName_<i>language code</i>_<i>country code</i>
+ baseName_<i>language code</i>
+ baseName_<i>def. language</i>_<i>def. country</i>_<i>def. variant</i>
+ baseName_<i>def. language</i>_<i>def. country</i>
+ baseName_<i>def. language</i>
+ baseName</pre>
+  *
+  * <p>A bundle is backed up by less specific bundles (omitting variant, country
+  * or language). But it is not backed up by the default language locale.
+  *
+  * <p>If you provide a bundle for a given locale, say
+  * <code>Bundle_en_UK_POSIX</code>, you must also provide a bundle for
+  * all sub locales, ie. <code>Bundle_en_UK</code>, <code>Bundle_en</code>, and
+  * <code>Bundle</code>.
+  *
+  * <p>When a bundle is searched, we look first for a class with the given
+  * name, then for a file with <code>.properties</code> extension in the
+  * classpath. The name must be a fully qualified classname (with dots as
+  * path separators).
+  *
+  * <p>(Note: This implementation always backs up the class with a properties
+  * file if that is existing, but you shouldn't rely on this, if you want to
+  * be compatible to the standard JDK.)
+  *
+  * @author Jochen Hoenicke
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Locale
+  * @see ListResourceBundle
+  * @see PropertyResourceBundle
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public abstract class ResourceBundle
+ {
+   /**
+    * The parent bundle. This is consulted when you call getObject and there
+    * is no such resource in the current bundle. This field may be null.
+    */
+   protected ResourceBundle parent;
+ 
+   /**
+    * The locale of this resource bundle. You can read this with
+    * <code>getLocale</code> and it is automatically set in
+    * <code>getBundle</code>.
+    */
+   private Locale locale;
+ 
+   /**
+    * The resource bundle cache.
+    */
+   private static Map bundleCache;
+ 
+   /**
+    * The last default Locale we saw. If this ever changes then we have to
+    * reset our caches.
+    */
+   private static Locale lastDefaultLocale;
+ 
+   /**
+    * The `empty' locale is created once in order to optimize
+    * tryBundle().
+    */
+   private static final Locale emptyLocale = new Locale("");
+ 
+   /**
+    * The constructor. It does nothing special.
+    */
+   public ResourceBundle()
+   {
+   }
+ 
+   /**
+    * Get a String from this resource bundle. Since most localized Objects
+    * are Strings, this method provides a convenient way to get them without
+    * casting.
+    *
+    * @param key the name of the resource
+    * @throws MissingResourceException if the resource can't be found
+    * @throws NullPointerException if key is null
+    * @throws ClassCastException if resource is not a string
+    */
+   public final String getString(String key)
+   {
+     return (String) getObject(key);
+   }
+ 
+   /**
+    * Get an array of Strings from this resource bundle. This method
+    * provides a convenient way to get it without casting.
+    *
+    * @param key the name of the resource
+    * @throws MissingResourceException if the resource can't be found
+    * @throws NullPointerException if key is null
+    * @throws ClassCastException if resource is not a string
+    */
+   public final String[] getStringArray(String key)
+   {
+     return (String[]) getObject(key);
+   }
+ 
+   /**
+    * Get an object from this resource bundle. This will call
+    * <code>handleGetObject</code> for this resource and all of its parents,
+    * until it finds a non-null resource.
+    *
+    * @param key the name of the resource
+    * @throws MissingResourceException if the resource can't be found
+    * @throws NullPointerException if key is null
+    */
+   public final Object getObject(String key)
+   {
+     for (ResourceBundle bundle = this; bundle != null; bundle = bundle.parent)
+       {
+         Object o = bundle.handleGetObject(key);
+         if (o != null)
+           return o;
+       }
+ 
+     String className = getClass().getName();
+     throw new MissingResourceException("Key '" + key
+ 				       + "'not found in Bundle: "
+ 				       + className, className, key);
+   }
+ 
+   /**
+    * Return the actual locale of this bundle. You can use it after calling
+    * getBundle, to know if the bundle for the desired locale was loaded or
+    * if the fall back was used.
+    *
+    * @return the bundle's locale
+    */
+   public Locale getLocale()
+   {
+     return locale;
+   }
+ 
+   /**
+    * Set the parent of this bundle. The parent is consulted when you call
+    * getObject and there is no such resource in the current bundle.
+    *
+    * @param parent the parent of this bundle
+    */
+   protected void setParent(ResourceBundle parent)
+   {
+     this.parent = parent;
+   }
+ 
+   /**
+    * Get the appropriate ResourceBundle for the default locale. This is like
+    * calling <code>getBundle(baseName, Locale.getDefault(),
+    * getClass().getClassLoader()</code>, except that any security check of
+    * getClassLoader won't fail.
+    *
+    * @param baseName the name of the ResourceBundle
+    * @return the desired resource bundle
+    * @throws MissingResourceException if the resource bundle can't be found
+    * @throws NullPointerException if baseName is null
+    */
+   public static ResourceBundle getBundle(String baseName)
+   {
+     ClassLoader cl = VMStackWalker.getCallingClassLoader();
+     if (cl == null)
+       cl = ClassLoader.getSystemClassLoader();
+     return getBundle(baseName, Locale.getDefault(), cl);
+   }
+ 
+   /**
+    * Get the appropriate ResourceBundle for the given locale. This is like
+    * calling <code>getBundle(baseName, locale,
+    * getClass().getClassLoader()</code>, except that any security check of
+    * getClassLoader won't fail.
+    *
+    * @param baseName the name of the ResourceBundle
+    * @param locale A locale
+    * @return the desired resource bundle
+    * @throws MissingResourceException if the resource bundle can't be found
+    * @throws NullPointerException if baseName or locale is null
+    */
+   public static ResourceBundle getBundle(String baseName, Locale locale)
+   {
+     ClassLoader cl = VMStackWalker.getCallingClassLoader();
+     if (cl == null)
+       cl = ClassLoader.getSystemClassLoader();
+     return getBundle(baseName, locale, cl);
+   }
+ 
+   /** Cache key for the ResourceBundle cache.  Resource bundles are keyed
+       by the combination of bundle name, locale, and class loader. */
+   private static class BundleKey
+   {
+     String baseName;
+     Locale locale;
+     ClassLoader classLoader;
+     int hashcode;
+ 
+     BundleKey() {}
+ 
+     BundleKey(String s, Locale l, ClassLoader cl)
+     {
+       set(s, l, cl);
+     }
+     
+     void set(String s, Locale l, ClassLoader cl)
+     {
+       baseName = s;
+       locale = l;
+       classLoader = cl;
+       hashcode = baseName.hashCode() ^ locale.hashCode() ^
+         classLoader.hashCode();
+     }
+     
+     public int hashCode()
+     {
+       return hashcode;
+     }
+     
+     public boolean equals(Object o)
+     {
+       if (! (o instanceof BundleKey))
+         return false;
+       BundleKey key = (BundleKey) o;
+       return hashcode == key.hashcode &&
+ 	baseName.equals(key.baseName) &&
+         locale.equals(key.locale) &&
+ 	classLoader.equals(key.classLoader);
+     }    
+   }
+   
+   /** A cache lookup key. This avoids having to a new one for every
+    *  getBundle() call. */
+   private static BundleKey lookupKey = new BundleKey();
+   
+   /** Singleton cache entry to represent previous failed lookups. */
+   private static Object nullEntry = new Object();
+ 
+   /**
+    * Get the appropriate ResourceBundle for the given locale. The following
+    * strategy is used:
+    *
+    * <p>A sequence of candidate bundle names are generated, and tested in
+    * this order, where the suffix 1 means the string from the specified
+    * locale, and the suffix 2 means the string from the default locale:</p>
+    *
+    * <ul>
+    * <li>baseName + "_" + language1 + "_" + country1 + "_" + variant1</li>
+    * <li>baseName + "_" + language1 + "_" + country1</li>
+    * <li>baseName + "_" + language1</li>
+    * <li>baseName + "_" + language2 + "_" + country2 + "_" + variant2</li>
+    * <li>baseName + "_" + language2 + "_" + country2</li>
+    * <li>baseName + "_" + language2</li>
+    * <li>baseName</li>
+    * </ul>
+    *
+    * <p>In the sequence, entries with an empty string are ignored. Next,
+    * <code>getBundle</code> tries to instantiate the resource bundle:</p>
+    *
+    * <ul>
+    * <li>First, an attempt is made to load a class in the specified classloader
+    * which is a subclass of ResourceBundle, and which has a public constructor
+    * with no arguments, via reflection.</li>
+    * <li>Next, a search is made for a property resource file, by replacing
+    * '.' with '/' and appending ".properties", and using
+    * ClassLoader.getResource(). If a file is found, then a
+    * PropertyResourceBundle is created from the file's contents.</li>
+    * </ul>
+    * If no resource bundle was found, a MissingResourceException is thrown.
+    *
+    * <p>Next, the parent chain is implemented. The remaining candidate names
+    * in the above sequence are tested in a similar manner, and if any results
+    * in a resource bundle, it is assigned as the parent of the first bundle
+    * using the <code>setParent</code> method (unless the first bundle already
+    * has a parent).</p>
+    *
+    * <p>For example, suppose the following class and property files are
+    * provided: MyResources.class, MyResources_fr_CH.properties,
+    * MyResources_fr_CH.class, MyResources_fr.properties,
+    * MyResources_en.properties, and MyResources_es_ES.class. The contents of
+    * all files are valid (that is, public non-abstract subclasses of
+    * ResourceBundle with public nullary constructors for the ".class" files,
+    * syntactically correct ".properties" files). The default locale is
+    * Locale("en", "UK").</p>
+    *
+    * <p>Calling getBundle with the shown locale argument values instantiates
+    * resource bundles from the following sources:</p>
+    *
+    * <ul>
+    * <li>Locale("fr", "CH"): result MyResources_fr_CH.class, parent
+    *   MyResources_fr.properties, parent MyResources.class</li>
+    * <li>Locale("fr", "FR"): result MyResources_fr.properties, parent
+    *   MyResources.class</li>
+    * <li>Locale("de", "DE"): result MyResources_en.properties, parent
+    *   MyResources.class</li>
+    * <li>Locale("en", "US"): result MyResources_en.properties, parent
+    *   MyResources.class</li>
+    * <li>Locale("es", "ES"): result MyResources_es_ES.class, parent
+    *   MyResources.class</li>
+    * </ul>
+    * 
+    * <p>The file MyResources_fr_CH.properties is never used because it is hidden
+    * by MyResources_fr_CH.class.</p>
+    *
+    * @param baseName the name of the ResourceBundle
+    * @param locale A locale
+    * @param classLoader a ClassLoader
+    * @return the desired resource bundle
+    * @throws MissingResourceException if the resource bundle can't be found
+    * @throws NullPointerException if any argument is null
+    * @since 1.2
+    */
+   // This method is synchronized so that the cache is properly
+   // handled.
+   public static synchronized ResourceBundle getBundle
+     (String baseName, Locale locale, ClassLoader classLoader)
+   {
+     // If the default locale changed since the last time we were called,
+     // all cache entries are invalidated.
+     Locale defaultLocale = Locale.getDefault();
+     if (defaultLocale != lastDefaultLocale)
+       {
+ 	bundleCache = new HashMap();
+ 	lastDefaultLocale = defaultLocale;
+       }
+ 
+     // This will throw NullPointerException if any arguments are null.
+     lookupKey.set(baseName, locale, classLoader);
+     
+     Object obj = bundleCache.get(lookupKey);
+     ResourceBundle rb = null;
+     
+     if (obj instanceof ResourceBundle)
+       {
+         return (ResourceBundle) obj;
+       }
+     else if (obj == nullEntry)
+       {
+         // Lookup has failed previously. Fall through.
+       }
+     else
+       {
+ 	// First, look for a bundle for the specified locale. We don't want
+ 	// the base bundle this time.
+ 	boolean wantBase = locale.equals(defaultLocale);
+ 	ResourceBundle bundle = tryBundle(baseName, locale, classLoader, 
+ 					  wantBase);
+ 
+         // Try the default locale if neccessary.
+ 	if (bundle == null && !locale.equals(defaultLocale))
+ 	  bundle = tryBundle(baseName, defaultLocale, classLoader, true);
+ 
+ 	BundleKey key = new BundleKey(baseName, locale, classLoader);
+         if (bundle == null)
+ 	  {
+ 	    // Cache the fact that this lookup has previously failed.
+ 	    bundleCache.put(key, nullEntry);
+ 	  }
+ 	else
+ 	  {
+             // Cache the result and return it.
+ 	    bundleCache.put(key, bundle);
+ 	    return bundle;
+ 	  }
+       }
+ 
+     throw new MissingResourceException("Bundle " + baseName 
+ 				       + " not found for locale "
+ 				       + locale
+ 				       + " by classloader "
+ 				       + classLoader,
+ 				       baseName, "");
+   }
+ 
+   /**
+    * Override this method to provide the resource for a keys. This gets
+    * called by <code>getObject</code>. If you don't have a resource
+    * for the given key, you should return null instead throwing a
+    * MissingResourceException. You don't have to ask the parent, getObject()
+    * already does this; nor should you throw a MissingResourceException.
+    *
+    * @param key the key of the resource
+    * @return the resource for the key, or null if not in bundle
+    * @throws NullPointerException if key is null
+    */
+   protected abstract Object handleGetObject(String key);
+ 
+   /**
+    * This method should return all keys for which a resource exists; you
+    * should include the enumeration of any parent's keys, after filtering out
+    * duplicates.
+    *
+    * @return an enumeration of the keys
+    */
+   public abstract Enumeration getKeys();
+ 
+   /**
+    * Tries to load a class or a property file with the specified name.
+    *
+    * @param localizedName the name
+    * @param classloader the classloader
+    * @return the resource bundle if it was loaded, otherwise the backup
+    */
+   private static ResourceBundle tryBundle(String localizedName,
+                                           ClassLoader classloader)
+   {
+     ResourceBundle bundle = null;
+     try
+       {
+         Class rbClass;
+         if (classloader == null)
+           rbClass = Class.forName(localizedName);
+         else
+           rbClass = classloader.loadClass(localizedName);
+ 	// Note that we do the check up front instead of catching
+ 	// ClassCastException.  The reason for this is that some crazy
+ 	// programs (Eclipse) have classes that do not extend
+ 	// ResourceBundle but that have the same name as a property
+ 	// bundle; in fact Eclipse relies on ResourceBundle not
+ 	// instantiating these classes.
+ 	if (ResourceBundle.class.isAssignableFrom(rbClass))
+ 	  bundle = (ResourceBundle) rbClass.newInstance();
+       }
+     catch (IllegalAccessException ex) {}
+     catch (InstantiationException ex) {}
+     catch (ClassNotFoundException ex) {}
+ 
+     if (bundle == null)
+       {
+ 	try
+ 	  {
+ 	    InputStream is;
+ 	    String resourceName
+ 	      = localizedName.replace('.', '/') + ".properties";
+ 	    if (classloader == null)
+ 	      is = ClassLoader.getSystemResourceAsStream(resourceName);
+ 	    else
+ 	      is = classloader.getResourceAsStream(resourceName);
+ 	    if (is != null)
+ 	      bundle = new PropertyResourceBundle(is);
+ 	  }
+ 	catch (IOException ex)
+ 	  {
+ 	    MissingResourceException mre = new MissingResourceException
+ 	      ("Failed to load bundle: " + localizedName, localizedName, "");
+ 	    mre.initCause(ex);
+ 	    throw mre;
+ 	  }
+       }
+ 
+     return bundle;
+   }
+ 
+   /**
+    * Tries to load a the bundle for a given locale, also loads the backup
+    * locales with the same language.
+    *
+    * @param baseName the raw bundle name, without locale qualifiers
+    * @param locale the locale
+    * @param classLoader the classloader
+    * @param wantBase whether a resource bundle made only from the base name
+    *        (with no locale information attached) should be returned.
+    * @return the resource bundle if it was loaded, otherwise the backup
+    */
+   private static ResourceBundle tryBundle(String baseName, Locale locale,
+                                           ClassLoader classLoader, 
+ 					  boolean wantBase)
+   {
+     String language = locale.getLanguage();
+     String country = locale.getCountry();
+     String variant = locale.getVariant();
+     
+     int baseLen = baseName.length();
+ 
+     // Build up a StringBuffer containing the complete bundle name, fully
+     // qualified by locale.
+     StringBuffer sb = new StringBuffer(baseLen + variant.length() + 7);
+ 
+     sb.append(baseName);
+     
+     if (language.length() > 0)
+       {
+ 	sb.append('_');
+ 	sb.append(language);
+ 	
+ 	if (country.length() > 0)
+ 	  {
+ 	    sb.append('_');
+ 	    sb.append(country);
+ 	    
+ 	    if (variant.length() > 0)
+ 	      {
+ 	        sb.append('_');
+ 		sb.append(variant);
+ 	      }
+ 	  }
+       }
+ 
+     // Now try to load bundles, starting with the most specialized name.
+     // Build up the parent chain as we go.
+     String bundleName = sb.toString();
+     ResourceBundle first = null; // The most specialized bundle.
+     ResourceBundle last = null; // The least specialized bundle.
+     
+     while (true)
+       {
+         ResourceBundle foundBundle = tryBundle(bundleName, classLoader);
+ 	if (foundBundle != null)
+ 	  {
+ 	    if (first == null)
+ 	      first = foundBundle;
+ 	    if (last != null)
+ 	      last.parent = foundBundle;
+ 	    foundBundle.locale = locale;
+ 	    last = foundBundle;
+ 	  }
+ 	int idx = bundleName.lastIndexOf('_');
+ 	// Try the non-localized base name only if we already have a
+ 	// localized child bundle, or wantBase is true.
+ 	if (idx > baseLen || (idx == baseLen && (first != null || wantBase)))
+ 	  bundleName = bundleName.substring(0, idx);
+ 	else
+ 	  break;
+       }
+     
+     return first;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Set.java gcc-4.1.0/libjava/classpath/java/util/Set.java
*** gcc-4.0.2/libjava/classpath/java/util/Set.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Set.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,264 ----
+ /* Set.java -- A collection that prohibits duplicates
+    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * A collection that contains no duplicates. In other words, for two set
+  * elements e1 and e2, <code>e1.equals(e2)</code> returns false. There
+  * are additional stipulations on <code>add</code>, <code>equals</code>
+  * and <code>hashCode</code>, as well as the requirements that constructors
+  * do not permit duplicate elements. The Set interface is incompatible with
+  * List; you cannot implement both simultaneously.
+  * <p>
+  *
+  * Note: Be careful about using mutable objects in sets.  In particular,
+  * if a mutable object changes to become equal to another set element, you
+  * have violated the contract.  As a special case of this, a Set is not
+  * allowed to be an element of itself, without risking undefined behavior.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see List
+  * @see SortedSet
+  * @see HashSet
+  * @see TreeSet
+  * @see LinkedHashSet
+  * @see AbstractSet
+  * @see Collections#singleton(Object)
+  * @see Collections#EMPTY_SET
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface Set extends Collection
+ {
+   /**
+    * Adds the specified element to the set if it is not already present
+    * (optional operation). In particular, the comparison algorithm is
+    * <code>o == null ? e == null : o.equals(e)</code>. Sets need not permit
+    * all values, and may document what exceptions will be thrown if
+    * a value is not permitted.
+    *
+    * @param o the object to add
+    * @return true if the object was not previously in the set
+    * @throws UnsupportedOperationException if this operation is not allowed
+    * @throws ClassCastException if the class of o prevents it from being added
+    * @throws IllegalArgumentException if some aspect of o prevents it from
+    *         being added
+    * @throws NullPointerException if null is not permitted in this set
+    */
+   boolean add(Object o);
+ 
+   /**
+    * Adds all of the elements of the given collection to this set (optional
+    * operation). If the argument is also a Set, this returns the mathematical
+    * <i>union</i> of the two. The behavior is unspecified if the set is
+    * modified while this is taking place.
+    *
+    * @param c the collection to add
+    * @return true if the set changed as a result
+    * @throws UnsupportedOperationException if this operation is not allowed
+    * @throws ClassCastException if the class of an element prevents it from
+    *         being added
+    * @throws IllegalArgumentException if something about an element prevents
+    *         it from being added
+    * @throws NullPointerException if null is not permitted in this set, or
+    *         if the argument c is null
+    * @see #add(Object)
+    */
+   boolean addAll(Collection c);
+ 
+   /**
+    * Removes all elements from this set (optional operation). This set will
+    * be empty afterwords, unless an exception occurs.
+    *
+    * @throws UnsupportedOperationException if this operation is not allowed
+    */
+   void clear();
+ 
+   /**
+    * Returns true if the set contains the specified element. In other words,
+    * this looks for <code>o == null ? e == null : o.equals(e)</code>.
+    *
+    * @param o the object to look for
+    * @return true if it is found in the set
+    * @throws ClassCastException if the type of o is not a valid type
+    *         for this set.
+    * @throws NullPointerException if o is null and this set doesn't
+    *         support null values.
+    */
+   boolean contains(Object o);
+ 
+   /**
+    * Returns true if this set contains all elements in the specified
+    * collection. If the argument is also a set, this is the <i>subset</i>
+    * relationship.
+    *
+    * @param c the collection to check membership in
+    * @return true if all elements in this set are in c
+    * @throws NullPointerException if c is null
+    * @throws ClassCastException if the type of any element in c is not
+    *         a valid type for this set.
+    * @throws NullPointerException if some element of c is null and this
+    *         set doesn't support null values.
+    * @see #contains(Object)
+    */
+   boolean containsAll(Collection c);
+ 
+   /**
+    * Compares the specified object to this for equality. For sets, the object
+    * must be a set, the two must have the same size, and every element in
+    * one must be in the other.
+    *
+    * @param o the object to compare to
+    * @return true if it is an equal set
+    */
+   boolean equals(Object o);
+ 
+   /**
+    * Returns the hash code for this set. In order to satisfy the contract of
+    * equals, this is the sum of the hashcode of all elements in the set.
+    *
+    * @return the sum of the hashcodes of all set elements
+    * @see #equals(Object)
+    */
+   int hashCode();
+ 
+   /**
+    * Returns true if the set contains no elements.
+    *
+    * @return true if the set is empty
+    */
+   boolean isEmpty();
+ 
+   /**
+    * Returns an iterator over the set.  The iterator has no specific order,
+    * unless further specified.
+    *
+    * @return a set iterator
+    */
+   Iterator iterator();
+ 
+   /**
+    * Removes the specified element from this set (optional operation). If
+    * an element e exists, <code>o == null ? e == null : o.equals(e)</code>,
+    * it is removed from the set.
+    *
+    * @param o the object to remove
+    * @return true if the set changed (an object was removed)
+    * @throws UnsupportedOperationException if this operation is not allowed
+    * @throws ClassCastException if the type of o is not a valid type
+    *         for this set.
+    * @throws NullPointerException if o is null and this set doesn't allow
+    *         the removal of a null value.
+    */
+   boolean remove(Object o);
+ 
+   /**
+    * Removes from this set all elements contained in the specified collection
+    * (optional operation). If the argument is a set, this returns the
+    * <i>asymmetric set difference</i> of the two sets.
+    *
+    * @param c the collection to remove from this set
+    * @return true if this set changed as a result
+    * @throws UnsupportedOperationException if this operation is not allowed
+    * @throws NullPointerException if c is null
+    * @throws ClassCastException if the type of any element in c is not
+    *         a valid type for this set.
+    * @throws NullPointerException if some element of c is null and this
+    *         set doesn't support removing null values.
+    * @see #remove(Object)
+    */
+   boolean removeAll(Collection c);
+ 
+   /**
+    * Retains only the elements in this set that are also in the specified
+    * collection (optional operation). If the argument is also a set, this
+    * performs the <i>intersection</i> of the two sets.
+    *
+    * @param c the collection to keep
+    * @return true if this set was modified
+    * @throws UnsupportedOperationException if this operation is not allowed
+    * @throws NullPointerException if c is null
+    * @throws ClassCastException if the type of any element in c is not
+    *         a valid type for this set.
+    * @throws NullPointerException if some element of c is null and this
+    *         set doesn't support retaining null values.
+    * @see #remove(Object)
+    */
+   boolean retainAll(Collection c);
+ 
+   /**
+    * Returns the number of elements in the set. If there are more
+    * than Integer.MAX_VALUE mappings, return Integer.MAX_VALUE. This is
+    * the <i>cardinality</i> of the set.
+    *
+    * @return the number of elements
+    */
+   int size();
+ 
+   /**
+    * Returns an array containing the elements of this set. If the set
+    * makes a guarantee about iteration order, the array has the same
+    * order. The array is distinct from the set; modifying one does not
+    * affect the other.
+    *
+    * @return an array of this set's elements
+    * @see #toArray(Object[])
+    */
+   Object[] toArray();
+ 
+   /**
+    * Returns an array containing the elements of this set, of the same runtime
+    * type of the argument. If the given set is large enough, it is reused,
+    * and null is inserted in the first unused slot. Otherwise, reflection
+    * is used to build a new array. If the set makes a guarantee about iteration
+    * order, the array has the same order. The array is distinct from the set;
+    * modifying one does not affect the other.
+    *
+    * @param a the array to determine the return type; if it is big enough
+    *        it is used and returned
+    * @return an array holding the elements of the set
+    * @throws ArrayStoreException if the runtime type of a is not a supertype
+    *         of all elements in the set
+    * @throws NullPointerException if a is null
+    * @see #toArray()
+    */
+   Object[] toArray(Object[] a);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/SimpleTimeZone.java gcc-4.1.0/libjava/classpath/java/util/SimpleTimeZone.java
*** gcc-4.0.2/libjava/classpath/java/util/SimpleTimeZone.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/SimpleTimeZone.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1078 ----
+ /* java.util.SimpleTimeZone
+    Copyright (C) 1998, 1999, 2000, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ 
+ /**
+  * This class represents a simple time zone offset and handles
+  * daylight savings.  It can only handle one daylight savings rule, so
+  * it can't represent historical changes.
+  *
+  * This object is tightly bound to the Gregorian calendar.  It assumes
+  * a regular seven days week, and the month lengths are that of the
+  * Gregorian Calendar.  It can only handle daylight savings for years
+  * lying in the AD era.
+  *
+  * @see Calendar
+  * @see GregorianCalendar
+  * @author Jochen Hoenicke
+  */
+ public class SimpleTimeZone extends TimeZone
+ {
+   /**
+    * The raw time zone offset in milliseconds to GMT, ignoring
+    * daylight savings.
+    * @serial
+    */
+   private int rawOffset;
+ 
+   /**
+    * True, if this timezone uses daylight savings, false otherwise.
+    * @serial
+    */
+   private boolean useDaylight;
+ 
+   /**
+    * The daylight savings offset.  This is a positive offset in
+    * milliseconds with respect to standard time.  Typically this
+    * is one hour, but for some time zones this may be half an hour.
+    * @serial
+    * @since JDK1.1.4
+    */
+   private int dstSavings = 60 * 60 * 1000;
+ 
+   /**
+    * The first year, in which daylight savings rules applies.
+    * @serial
+    */
+   private int startYear;
+   private static final int DOM_MODE = 1;
+   private static final int DOW_IN_MONTH_MODE = 2;
+   private static final int DOW_GE_DOM_MODE = 3;
+   private static final int DOW_LE_DOM_MODE = 4;
+ 
+   /**
+    * The mode of the start rule. This takes one of the following values:
+    * <dl>
+    * <dt>DOM_MODE (1)</dt>
+    * <dd> startDay contains the day in month of the start date,
+    * startDayOfWeek is unused. </dd>
+    * <dt>DOW_IN_MONTH_MODE (2)</dt>
+    * <dd> The startDay gives the day of week in month, and
+    * startDayOfWeek the day of week.  For example startDay=2 and
+    * startDayOfWeek=Calender.SUNDAY specifies that the change is on
+    * the second sunday in that month.  You must make sure, that this
+    * day always exists (ie. don't specify the 5th sunday).
+    * </dd>
+    * <dt>DOW_GE_DOM_MODE (3)</dt>
+    * <dd> The start is on the first startDayOfWeek on or after
+    * startDay.  For example startDay=13 and
+    * startDayOfWeek=Calendar.FRIDAY specifies that the daylight
+    * savings start on the first FRIDAY on or after the 13th of that
+    * Month. Make sure that the change is always in the given month, or
+    * the result is undefined.
+    * </dd>
+    * <dt>DOW_LE_DOM_MONTH (4)</dt>
+    * <dd> The start is on the first startDayOfWeek on or before the
+    * startDay.  Make sure that the change is always in the given
+    * month, or the result is undefined.
+    </dd>
+    * </dl>
+    * @serial */
+   private int startMode;
+ 
+   /**
+    * The month in which daylight savings start.  This is one of the
+    * constants Calendar.JANUARY, ..., Calendar.DECEMBER.
+    * @serial
+    */
+   private int startMonth;
+ 
+   /**
+    * This variable can have different meanings.  See startMode for details
+    * @see #startMode
+    * @serial
+    */
+   private int startDay;
+ 
+   /**
+    * This variable specifies the day of week the change takes place.  If
+    * startMode == DOM_MODE, this is undefined.
+    * @serial
+    * @see #startMode
+    */
+   private int startDayOfWeek;
+ 
+   /**
+    * This variable specifies the time of change to daylight savings.
+    * This time is given in milliseconds after midnight local
+    * standard time.
+    * @serial
+    */
+   private int startTime;
+ 
+   /**
+    * This variable specifies the mode that startTime is specified in.  By
+    * default it is WALL_TIME, but can also be STANDARD_TIME or UTC_TIME.  For
+    * startTime, STANDARD_TIME and WALL_TIME are equivalent.
+    * @serial
+    */
+   private int startTimeMode = WALL_TIME;
+ 
+   /**
+    * The month in which daylight savings ends.  This is one of the
+    * constants Calendar.JANUARY, ..., Calendar.DECEMBER.
+    * @serial
+    */
+   private int endMonth;
+ 
+   /**
+    * This variable gives the mode for the end of daylight savings rule.
+    * It can take the same values as startMode.
+    * @serial
+    * @see #startMode
+    */
+   private int endMode;
+ 
+   /**
+    * This variable can have different meanings.  See startMode for details
+    * @serial
+    * @see #startMode
+    */
+   private int endDay;
+ 
+   /**
+    * This variable specifies the day of week the change takes place.  If
+    * endMode == DOM_MODE, this is undefined.
+    * @serial
+    * @see #startMode
+    */
+   private int endDayOfWeek;
+ 
+   /**
+    * This variable specifies the time of change back to standard time.
+    * This time is given in milliseconds after midnight local
+    * standard time.
+    * @serial
+    */
+   private int endTime;
+ 
+   /**
+    * This variable specifies the mode that endTime is specified in.  By
+    * default it is WALL_TIME, but can also be STANDARD_TIME or UTC_TIME.
+    * @serial
+    */
+   private int endTimeMode = WALL_TIME;
+ 
+   /**
+    * This variable points to a deprecated array from JDK 1.1.  It is
+    * ignored in JDK 1.2 but streamed out for compatibility with JDK 1.1.
+    * The array contains the lengths of the months in the year and is
+    * assigned from a private static final field to avoid allocating
+    * the array for every instance of the object.
+    * Note that static final fields are not serialized.
+    * @serial
+    */
+   private byte[] monthLength = monthArr;
+   private static final byte[] monthArr = 
+                                          {
+                                            31, 28, 31, 30, 31, 30, 31, 31, 30,
+                                            31, 30, 31
+                                          };
+ 
+   /**
+    * The version of the serialized data on the stream.
+    * <dl>
+    * <dt>0 or not present on stream</dt>
+    * <dd> JDK 1.1.3 or earlier, only provides this fields:
+    * rawOffset, startDay, startDayOfWeek, startMonth, startTime,
+    * startYear, endDay, endDayOfWeek, endMonth, endTime
+    * </dd>
+    * <dd> JDK 1.1.4 or later. This includes three new fields, namely
+    * startMode, endMode and dstSavings.  And there is a optional section
+    * as described in writeObject.
+    * </dd>
+    * </dl>
+    *
+    * XXX - JDK 1.2 Beta 4 docu states 1.1.4, but my 1.1.5 has the old
+    * version.
+    *
+    * When streaming out this class it is always written in the latest
+    * version.
+    * @serial
+    * @since JDK1.1.4
+    */
+   private int serialVersionOnStream = 2;
+   private static final long serialVersionUID = -403250971215465050L;
+ 
+   /**
+    * Constant to indicate that start and end times are specified in standard
+    * time, without adjusting for daylight savings.
+    */
+   public static final int STANDARD_TIME = 1;
+ 
+   /**
+    * Constant to indicate that start and end times are specified in wall
+    * time, adjusting for daylight savings.  This is the default.
+    */
+   public static final int WALL_TIME = 0;
+ 
+   /**
+    * Constant to indicate that start and end times are specified in UTC.
+    */
+   public static final int UTC_TIME = 2;
+ 
+   /**
+    * Create a <code>SimpleTimeZone</code> with the given time offset
+    * from GMT and without daylight savings.
+    * @param rawOffset the time offset from GMT in milliseconds.
+    * @param id The identifier of this time zone.
+    */
+   public SimpleTimeZone(int rawOffset, String id)
+   {
+     this.rawOffset = rawOffset;
+     setID(id);
+     useDaylight = false;
+     startYear = 0;
+   }
+ 
+   /**
+    * Create a <code>SimpleTimeZone</code> with the given time offset
+    * from GMT and with daylight savings.  The start/end parameters
+    * can have different meaning (replace WEEKDAY with a real day of
+    * week). Only the first two meanings were supported by earlier
+    * versions of jdk.
+    *
+    * <dl>
+    * <dt><code>day &gt; 0, dayOfWeek = Calendar.WEEKDAY</code></dt>
+    * <dd>The start/end of daylight savings is on the <code>day</code>-th
+    * <code>WEEKDAY</code> in the given month. </dd>
+    * <dt><code>day &lt; 0, dayOfWeek = Calendar.WEEKDAY</code></dt>
+    * <dd>The start/end of daylight savings is on the <code>-day</code>-th
+    * <code>WEEKDAY</code> counted from the <i>end</i> of the month. </dd>
+    * <dt><code>day &gt; 0, dayOfWeek = 0</code></dt>
+    * <dd>The start/end of daylight is on the <code>day</code>-th day of
+    * the month. </dd>
+    * <dt><code>day &gt; 0, dayOfWeek = -Calendar.WEEKDAY</code></dt>
+    * <dd>The start/end of daylight is on the first WEEKDAY on or after
+    * the <code>day</code>-th day of the month.  You must make sure that
+    * this day lies in the same month. </dd>
+    * <dt><code>day &lt; 0, dayOfWeek = -Calendar.WEEKDAY</code></dt>
+    * <dd>The start/end of daylight is on the first WEEKDAY on or
+    * <i>before</i> the <code>-day</code>-th day of the month.  You
+    * must make sure that this day lies in the same month. </dd>
+    * </dl>
+    *
+    * If you give a non existing month, a day that is zero, or too big,
+    * or a dayOfWeek that is too big,  the result is undefined.
+    *
+    * The start rule must have a different month than the end rule.
+    * This restriction shouldn't hurt for all possible time zones.
+    *
+    * @param rawOffset The time offset from GMT in milliseconds.
+    * @param id  The identifier of this time zone.
+    * @param startMonth The start month of daylight savings; use the
+    * constants in Calendar.
+    * @param startDayOfWeekInMonth A day in month or a day of week number, as
+    * described above.
+    * @param startDayOfWeek The start rule day of week; see above.
+    * @param startTime A time in millis in standard time.
+    * @param endMonth The end month of daylight savings; use the
+    * constants in Calendar.
+    * @param endDayOfWeekInMonth A day in month or a day of week number, as
+    * described above.
+    * @param endDayOfWeek The end rule day of week; see above.
+    * @param endTime A time in millis in standard time.
+    * @throws IllegalArgumentException if parameters are invalid or out of
+    * range.
+    */
+   public SimpleTimeZone(int rawOffset, String id, int startMonth,
+                         int startDayOfWeekInMonth, int startDayOfWeek,
+                         int startTime, int endMonth, int endDayOfWeekInMonth,
+                         int endDayOfWeek, int endTime)
+   {
+     this.rawOffset = rawOffset;
+     setID(id);
+     useDaylight = true;
+ 
+     setStartRule(startMonth, startDayOfWeekInMonth, startDayOfWeek, startTime);
+     setEndRule(endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime);
+     if (startMonth == endMonth)
+       throw new IllegalArgumentException("startMonth and endMonth must be different");
+     this.startYear = 0;
+   }
+ 
+   /**
+    * This constructs a new SimpleTimeZone that supports a daylight savings
+    * rule.  The parameter are the same as for the constructor above, except
+    * there is the additional dstSavaings parameter.
+    *
+    * @param dstSavings the amount of savings for daylight savings
+    * time in milliseconds.  This must be positive.
+    * @since 1.2
+    */
+   public SimpleTimeZone(int rawOffset, String id, int startMonth,
+                         int startDayOfWeekInMonth, int startDayOfWeek,
+                         int startTime, int endMonth, int endDayOfWeekInMonth,
+                         int endDayOfWeek, int endTime, int dstSavings)
+   {
+     this(rawOffset, id, startMonth, startDayOfWeekInMonth, startDayOfWeek,
+          startTime, endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime);
+ 
+     this.dstSavings = dstSavings;
+   }
+ 
+   /**
+    * This constructs a new SimpleTimeZone that supports a daylight savings
+    * rule.  The parameter are the same as for the constructor above, except
+    * there are the additional startTimeMode, endTimeMode, and dstSavings
+    * parameters.
+    *
+    * @param startTimeMode the mode that start times are specified in.  One of
+    * WALL_TIME, STANDARD_TIME, or UTC_TIME.
+    * @param endTimeMode the mode that end times are specified in.  One of
+    * WALL_TIME, STANDARD_TIME, or UTC_TIME.
+    * @param dstSavings the amount of savings for daylight savings
+    * time in milliseconds.  This must be positive.
+    * @throws IllegalArgumentException if parameters are invalid or out of
+    * range.
+    * @since 1.4
+    */
+   public SimpleTimeZone(int rawOffset, String id, int startMonth,
+                         int startDayOfWeekInMonth, int startDayOfWeek,
+                         int startTime, int startTimeMode, int endMonth,
+                         int endDayOfWeekInMonth, int endDayOfWeek,
+                         int endTime, int endTimeMode, int dstSavings)
+   {
+     this.rawOffset = rawOffset;
+     setID(id);
+     useDaylight = true;
+ 
+     if (startTimeMode < WALL_TIME || startTimeMode > UTC_TIME)
+       throw new IllegalArgumentException("startTimeMode must be one of WALL_TIME, STANDARD_TIME, or UTC_TIME");
+     if (endTimeMode < WALL_TIME || endTimeMode > UTC_TIME)
+       throw new IllegalArgumentException("endTimeMode must be one of WALL_TIME, STANDARD_TIME, or UTC_TIME");
+     this.startTimeMode = startTimeMode;
+     this.endTimeMode = endTimeMode;
+ 
+     setStartRule(startMonth, startDayOfWeekInMonth, startDayOfWeek, startTime);
+     setEndRule(endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime);
+     if (startMonth == endMonth)
+       throw new IllegalArgumentException("startMonth and endMonth must be different");
+     this.startYear = 0;
+ 
+     this.dstSavings = dstSavings;
+   }
+ 
+   /**
+    * Sets the first year, where daylight savings applies.  The daylight
+    * savings rule never apply for years in the BC era.  Note that this
+    * is gregorian calendar specific.
+    * @param year the start year.
+    */
+   public void setStartYear(int year)
+   {
+     startYear = year;
+     useDaylight = true;
+   }
+ 
+   /**
+    * Checks if the month, day, dayOfWeek arguments are in range and
+    * returns the mode of the rule.
+    * @param month the month parameter as in the constructor
+    * @param day the day parameter as in the constructor
+    * @param dayOfWeek the day of week parameter as in the constructor
+    * @return the mode of this rule see startMode.
+    * @exception IllegalArgumentException if parameters are out of range.
+    * @see #SimpleTimeZone(int, String, int, int, int, int, int, int, int, int)
+    * @see #startMode
+    */
+   private int checkRule(int month, int day, int dayOfWeek)
+   {
+     if (month < 0 || month > 11)
+       throw new IllegalArgumentException("month out of range");
+ 
+     int daysInMonth = getDaysInMonth(month, 1);
+     if (dayOfWeek == 0)
+       {
+ 	if (day <= 0 || day > daysInMonth)
+ 	  throw new IllegalArgumentException("day out of range");
+ 	return DOM_MODE;
+       }
+     else if (dayOfWeek > 0)
+       {
+ 	if (Math.abs(day) > (daysInMonth + 6) / 7)
+ 	  throw new IllegalArgumentException("dayOfWeekInMonth out of range");
+ 	if (dayOfWeek > Calendar.SATURDAY)
+ 	  throw new IllegalArgumentException("dayOfWeek out of range");
+ 	return DOW_IN_MONTH_MODE;
+       }
+     else
+       {
+ 	if (day == 0 || Math.abs(day) > daysInMonth)
+ 	  throw new IllegalArgumentException("day out of range");
+ 	if (dayOfWeek < -Calendar.SATURDAY)
+ 	  throw new IllegalArgumentException("dayOfWeek out of range");
+ 	if (day < 0)
+ 	  return DOW_LE_DOM_MODE;
+ 	else
+ 	  return DOW_GE_DOM_MODE;
+       }
+   }
+ 
+   /**
+    * Sets the daylight savings start rule.  You must also set the
+    * end rule with <code>setEndRule</code> or the result of
+    * getOffset is undefined.  For the parameters see the ten-argument
+    * constructor above.
+    *
+    * @param month The month where daylight savings start, zero
+    * based.  You should use the constants in Calendar.
+    * @param day A day of month or day of week in month.
+    * @param dayOfWeek The day of week where daylight savings start.
+    * @param time The time in milliseconds standard time where daylight
+    * savings start.
+    * @exception IllegalArgumentException if parameters are out of range.
+    * @see SimpleTimeZone
+    */
+   public void setStartRule(int month, int day, int dayOfWeek, int time)
+   {
+     this.startMode = checkRule(month, day, dayOfWeek);
+     this.startMonth = month;
+     this.startDay = day;
+     this.startDayOfWeek = Math.abs(dayOfWeek);
+     if (this.startTimeMode == WALL_TIME || this.startTimeMode == STANDARD_TIME)
+       this.startTime = time;
+     else
+       // Convert from UTC to STANDARD
+       this.startTime = time + this.rawOffset;
+     useDaylight = true;
+   }
+ 
+   /**
+    * Sets the daylight savings start rule.  You must also set the
+    * end rule with <code>setEndRule</code> or the result of
+    * getOffset is undefined.  For the parameters see the ten-argument
+    * constructor above.
+    *
+    * Note that this API isn't incredibly well specified.  It appears that the
+    * after flag must override the parameters, since normally, the day and
+    * dayofweek can select this.  I.e., if day < 0 and dayOfWeek < 0, on or
+    * before mode is chosen.  But if after == true, this implementation
+    * overrides the signs of the other arguments.  And if dayOfWeek == 0, it
+    * falls back to the behavior in the other APIs.  I guess this should be
+    * checked against Sun's implementation.
+    *
+    * @param month The month where daylight savings start, zero
+    * based.  You should use the constants in Calendar.
+    * @param day A day of month or day of week in month.
+    * @param dayOfWeek The day of week where daylight savings start.
+    * @param time The time in milliseconds standard time where daylight
+    * savings start.
+    * @param after If true, day and dayOfWeek specify first day of week on or
+    * after day, else first day of week on or before.
+    * @since 1.2
+    * @see SimpleTimeZone
+    */
+   public void setStartRule(int month, int day, int dayOfWeek, int time,
+                            boolean after)
+   {
+     // FIXME: XXX: Validate that checkRule and offset processing work with on
+     // or before mode.
+     this.startDay = after ? Math.abs(day) : -Math.abs(day);
+     this.startDayOfWeek = after ? Math.abs(dayOfWeek) : -Math.abs(dayOfWeek);
+     this.startMode = (dayOfWeek != 0)
+                      ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE)
+                      : checkRule(month, day, dayOfWeek);
+     this.startDay = Math.abs(this.startDay);
+     this.startDayOfWeek = Math.abs(this.startDayOfWeek);
+ 
+     this.startMonth = month;
+ 
+     if (this.startTimeMode == WALL_TIME || this.startTimeMode == STANDARD_TIME)
+       this.startTime = time;
+     else
+       // Convert from UTC to STANDARD
+       this.startTime = time + this.rawOffset;
+     useDaylight = true;
+   }
+ 
+   /**
+    * Sets the daylight savings start rule.  You must also set the
+    * end rule with <code>setEndRule</code> or the result of
+    * getOffset is undefined.  For the parameters see the ten-argument
+    * constructor above.
+    *
+    * @param month The month where daylight savings start, zero
+    * based.  You should use the constants in Calendar.
+    * @param day A day of month or day of week in month.
+    * @param time The time in milliseconds standard time where daylight
+    * savings start.
+    * @see SimpleTimeZone
+    * @since 1.2
+    */
+   public void setStartRule(int month, int day, int time)
+   {
+     setStartRule(month, day, 0, time);
+   }
+ 
+   /**
+    * Sets the daylight savings end rule.  You must also set the
+    * start rule with <code>setStartRule</code> or the result of
+    * getOffset is undefined. For the parameters see the ten-argument
+    * constructor above.
+    *
+    * @param month The end month of daylight savings.
+    * @param day A day in month, or a day of week in month.
+    * @param dayOfWeek A day of week, when daylight savings ends.
+    * @param time A time in millis in standard time.
+    * @see #setStartRule(int, int, int, int)
+    */
+   public void setEndRule(int month, int day, int dayOfWeek, int time)
+   {
+     this.endMode = checkRule(month, day, dayOfWeek);
+     this.endMonth = month;
+     this.endDay = day;
+     this.endDayOfWeek = Math.abs(dayOfWeek);
+     if (this.endTimeMode == WALL_TIME)
+       this.endTime = time;
+     else if (this.endTimeMode == STANDARD_TIME)
+       // Convert from STANDARD to DST
+       this.endTime = time + this.dstSavings;
+     else
+       // Convert from UTC to DST
+       this.endTime = time + this.rawOffset + this.dstSavings;
+     useDaylight = true;
+   }
+ 
+   /**
+    * Sets the daylight savings end rule.  You must also set the
+    * start rule with <code>setStartRule</code> or the result of
+    * getOffset is undefined. For the parameters see the ten-argument
+    * constructor above.
+    *
+    * Note that this API isn't incredibly well specified.  It appears that the
+    * after flag must override the parameters, since normally, the day and
+    * dayofweek can select this.  I.e., if day < 0 and dayOfWeek < 0, on or
+    * before mode is chosen.  But if after == true, this implementation
+    * overrides the signs of the other arguments.  And if dayOfWeek == 0, it
+    * falls back to the behavior in the other APIs.  I guess this should be
+    * checked against Sun's implementation.
+    *
+    * @param month The end month of daylight savings.
+    * @param day A day in month, or a day of week in month.
+    * @param dayOfWeek A day of week, when daylight savings ends.
+    * @param time A time in millis in standard time.
+    * @param after If true, day and dayOfWeek specify first day of week on or
+    * after day, else first day of week on or before.
+    * @since 1.2
+    * @see #setStartRule(int, int, int, int, boolean)
+    */
+   public void setEndRule(int month, int day, int dayOfWeek, int time,
+                          boolean after)
+   {
+     // FIXME: XXX: Validate that checkRule and offset processing work with on
+     // or before mode.
+     this.endDay = after ? Math.abs(day) : -Math.abs(day);
+     this.endDayOfWeek = after ? Math.abs(dayOfWeek) : -Math.abs(dayOfWeek);
+     this.endMode = (dayOfWeek != 0)
+                    ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE)
+                    : checkRule(month, day, dayOfWeek);
+     this.endDay = Math.abs(this.endDay);
+     this.endDayOfWeek = Math.abs(endDayOfWeek);
+ 
+     this.endMonth = month;
+ 
+     if (this.endTimeMode == WALL_TIME)
+       this.endTime = time;
+     else if (this.endTimeMode == STANDARD_TIME)
+       // Convert from STANDARD to DST
+       this.endTime = time + this.dstSavings;
+     else
+       // Convert from UTC to DST
+       this.endTime = time + this.rawOffset + this.dstSavings;
+     useDaylight = true;
+   }
+ 
+   /**
+    * Sets the daylight savings end rule.  You must also set the
+    * start rule with <code>setStartRule</code> or the result of
+    * getOffset is undefined. For the parameters see the ten-argument
+    * constructor above.
+    *
+    * @param month The end month of daylight savings.
+    * @param day A day in month, or a day of week in month.
+    * @param time A time in millis in standard time.
+    * @see #setStartRule(int, int, int)
+    */
+   public void setEndRule(int month, int day, int time)
+   {
+     setEndRule(month, day, 0, time);
+   }
+ 
+   /**
+    * Gets the time zone offset, for current date, modified in case of
+    * daylight savings.  This is the offset to add to UTC to get the local
+    * time.
+    *
+    * In the standard JDK the results given by this method may result in
+    * inaccurate results at the end of February or the beginning of March.
+    * To avoid this, you should use Calendar instead:
+    * <code>offset = cal.get(Calendar.ZONE_OFFSET)
+    * + cal.get(Calendar.DST_OFFSET);</code>
+    *
+    * This version doesn't suffer this inaccuracy.
+    *
+    * The arguments don't follow the approach for setting start and end rules.
+    * The day must be a positive number and dayOfWeek must be a positive value
+    * from Calendar.  dayOfWeek is redundant, but must match the other values
+    * or an inaccurate result may be returned.
+    *
+    * @param era the era of the given date
+    * @param year the year of the given date
+    * @param month the month of the given date, 0 for January.
+    * @param day the day of month
+    * @param dayOfWeek the day of week; this must match the other fields.
+    * @param millis the millis in the day (in local standard time)
+    * @return the time zone offset in milliseconds.
+    * @throws IllegalArgumentException if arguments are incorrect.
+    */
+   public int getOffset(int era, int year, int month, int day, int dayOfWeek,
+                        int millis)
+   {
+     int daysInMonth = getDaysInMonth(month, year);
+     if (day < 1 || day > daysInMonth)
+       throw new IllegalArgumentException("day out of range");
+     if (dayOfWeek < Calendar.SUNDAY || dayOfWeek > Calendar.SATURDAY)
+       throw new IllegalArgumentException("dayOfWeek out of range");
+     if (month < Calendar.JANUARY || month > Calendar.DECEMBER)
+       throw new IllegalArgumentException("month out of range:" + month);
+ 
+     // This method is called by Calendar, so we mustn't use that class.
+     int daylightSavings = 0;
+     if (useDaylight && era == GregorianCalendar.AD && year >= startYear)
+       {
+ 	// This does only work for Gregorian calendars :-(
+ 	// This is mainly because setStartYear doesn't take an era.
+ 	boolean afterStart = ! isBefore(year, month, day, dayOfWeek, millis,
+ 	                                startMode, startMonth, startDay,
+ 	                                startDayOfWeek, startTime);
+ 	boolean beforeEnd = isBefore(year, month, day, dayOfWeek,
+ 				     millis + dstSavings,
+ 	                             endMode, endMonth, endDay, endDayOfWeek,
+ 	                             endTime);
+ 
+ 	if (startMonth < endMonth)
+ 	  // use daylight savings, if the date is after the start of
+ 	  // savings, and before the end of savings.
+ 	  daylightSavings = afterStart && beforeEnd ? dstSavings : 0;
+ 	else
+ 	  // use daylight savings, if the date is before the end of
+ 	  // savings, or after the start of savings.
+ 	  daylightSavings = beforeEnd || afterStart ? dstSavings : 0;
+       }
+     return rawOffset + daylightSavings;
+   }
+ 
+   /**
+    * Returns the time zone offset to GMT in milliseconds, ignoring
+    * day light savings.
+    * @return the time zone offset.
+    */
+   public int getRawOffset()
+   {
+     return rawOffset;
+   }
+ 
+   /**
+    * Sets the standard time zone offset to GMT.
+    * @param rawOffset The time offset from GMT in milliseconds.
+    */
+   public void setRawOffset(int rawOffset)
+   {
+     this.rawOffset = rawOffset;
+   }
+ 
+   /**
+    * Gets the daylight savings offset.  This is a positive offset in
+    * milliseconds with respect to standard time.  Typically this
+    * is one hour, but for some time zones this may be half an our.
+    * @return the daylight savings offset in milliseconds.
+    *
+    * @since 1.2
+    */
+   public int getDSTSavings()
+   {
+     return dstSavings;
+   }
+ 
+   /**
+    * Sets the daylight savings offset.  This is a positive offset in
+    * milliseconds with respect to standard time.
+    *
+    * @param dstSavings the daylight savings offset in milliseconds.
+    *
+    * @since 1.2
+    */
+   public void setDSTSavings(int dstSavings)
+   {
+     if (dstSavings <= 0)
+       throw new IllegalArgumentException("illegal value for dstSavings");
+ 
+     this.dstSavings = dstSavings;
+   }
+ 
+   /**
+    * Returns if this time zone uses daylight savings time.
+    * @return true, if we use daylight savings time, false otherwise.
+    */
+   public boolean useDaylightTime()
+   {
+     return useDaylight;
+   }
+ 
+   /**
+    * Returns the number of days in the given month.
+    * Uses gregorian rules prior to 1582 (The default and earliest cutover)
+    * @param month The month, zero based; use one of the Calendar constants.
+    * @param year  The year.
+    */
+   private int getDaysInMonth(int month, int year)
+   {
+     if (month == Calendar.FEBRUARY)
+       {
+ 	if ((year & 3) != 0)
+ 	  return 28;
+ 
+ 	// Assume default Gregorian cutover, 
+ 	// all years prior to this must be Julian
+ 	if (year < 1582)
+ 	  return 29;
+ 
+ 	// Gregorian rules 
+ 	return ((year % 100) != 0 || (year % 400) == 0) ? 29 : 28;
+       }
+     else
+       return monthArr[month];
+   }
+ 
+   /**
+    * Checks if the date given in calXXXX, is before the change between
+    * dst and standard time.
+    * @param calYear the year of the date to check (for leap day checking).
+    * @param calMonth the month of the date to check.
+    * @param calDayOfMonth the day of month of the date to check.
+    * @param calDayOfWeek the day of week of the date to check.
+    * @param calMillis the millis of day of the date to check (standard time).
+    * @param mode  the change mode; same semantic as startMode.
+    * @param month the change month; same semantic as startMonth.
+    * @param day   the change day; same semantic as startDay.
+    * @param dayOfWeek the change day of week;
+    * @param millis the change time in millis since midnight standard time.
+    * same semantic as startDayOfWeek.
+    * @return true, if cal is before the change, false if cal is on
+    * or after the change.
+    */
+   private boolean isBefore(int calYear, int calMonth, int calDayOfMonth,
+                            int calDayOfWeek, int calMillis, int mode,
+                            int month, int day, int dayOfWeek, int millis)
+   {
+     // This method is called by Calendar, so we mustn't use that class.
+     // We have to do all calculations by hand.
+     // check the months:
+     // XXX - this is not correct:
+     // for the DOW_GE_DOM and DOW_LE_DOM modes the change date may
+     // be in a different month.
+     if (calMonth != month)
+       return calMonth < month;
+ 
+     // check the day:
+     switch (mode)
+       {
+       case DOM_MODE:
+ 	if (calDayOfMonth != day)
+ 	  return calDayOfMonth < day;
+ 	break;
+       case DOW_IN_MONTH_MODE:
+         {
+ 	  // This computes the day of month of the day of type
+ 	  // "dayOfWeek" that lies in the same (sunday based) week as cal.
+ 	  calDayOfMonth += (dayOfWeek - calDayOfWeek);
+ 
+ 	  // Now we convert it to 7 based number (to get a one based offset
+ 	  // after dividing by 7).  If we count from the end of the
+ 	  // month, we get want a -7 based number counting the days from 
+ 	  // the end:
+ 	  if (day < 0)
+ 	    calDayOfMonth -= getDaysInMonth(calMonth, calYear) + 7;
+ 	  else
+ 	    calDayOfMonth += 6;
+ 
+ 	  //  day > 0                    day < 0
+ 	  //  S  M  T  W  T  F  S        S  M  T  W  T  F  S
+ 	  //     7  8  9 10 11 12         -36-35-34-33-32-31
+ 	  // 13 14 15 16 17 18 19      -30-29-28-27-26-25-24
+ 	  // 20 21 22 23 24 25 26      -23-22-21-20-19-18-17
+ 	  // 27 28 29 30 31 32 33      -16-15-14-13-12-11-10
+ 	  // 34 35 36                   -9 -8 -7
+ 	  // Now we calculate the day of week in month:
+ 	  int week = calDayOfMonth / 7;
+ 
+ 	  //  day > 0                    day < 0
+ 	  //  S  M  T  W  T  F  S        S  M  T  W  T  F  S
+ 	  //     1  1  1  1  1  1          -5 -5 -4 -4 -4 -4
+ 	  //  1  2  2  2  2  2  2       -4 -4 -4 -3 -3 -3 -3
+ 	  //  2  3  3  3  3  3  3       -3 -3 -3 -2 -2 -2 -2
+ 	  //  3  4  4  4  4  4  4       -2 -2 -2 -1 -1 -1 -1
+ 	  //  4  5  5                   -1 -1 -1
+ 	  if (week != day)
+ 	    return week < day;
+ 
+ 	  if (calDayOfWeek != dayOfWeek)
+ 	    return calDayOfWeek < dayOfWeek;
+ 
+ 	  // daylight savings starts/ends  on the given day.
+ 	  break;
+         }
+       case DOW_LE_DOM_MODE:
+ 	// The greatest sunday before or equal December, 12
+ 	// is the same as smallest sunday after or equal December, 6.
+ 	day = Math.abs(day) - 6;
+       case DOW_GE_DOM_MODE:
+ 	// Calculate the day of month of the day of type
+ 	// "dayOfWeek" that lies before (or on) the given date.
+ 	calDayOfMonth -= (calDayOfWeek < dayOfWeek ? 7 : 0) + calDayOfWeek
+ 	- dayOfWeek;
+ 	if (calDayOfMonth < day)
+ 	  return true;
+ 	if (calDayOfWeek != dayOfWeek || calDayOfMonth >= day + 7)
+ 	  return false;
+ 
+ 	// now we have the same day
+ 	break;
+       }
+ 
+     // the millis decides:
+     return (calMillis < millis);
+   }
+ 
+   /**
+    * Determines if the given date is in daylight savings time.
+    * @return true, if it is in daylight savings time, false otherwise.
+    */
+   public boolean inDaylightTime(Date date)
+   {
+     Calendar cal = Calendar.getInstance(this);
+     cal.setTime(date);
+     return (cal.get(Calendar.DST_OFFSET) != 0);
+   }
+ 
+   /**
+    * Generates the hashCode for the SimpleDateFormat object.  It is
+    * the rawOffset, possibly, if useDaylightSavings is true, xored
+    * with startYear, startMonth, startDayOfWeekInMonth, ..., endTime.
+    */
+   public synchronized int hashCode()
+   {
+     return rawOffset
+            ^ (useDaylight
+               ? startMonth ^ startDay ^ startDayOfWeek ^ startTime ^ endMonth
+               ^ endDay ^ endDayOfWeek ^ endTime : 0);
+   }
+ 
+   public synchronized boolean equals(Object o)
+   {
+     if (this == o)
+       return true;
+     if (! (o instanceof SimpleTimeZone))
+       return false;
+     SimpleTimeZone zone = (SimpleTimeZone) o;
+     if (zone.hashCode() != hashCode() || ! getID().equals(zone.getID())
+         || rawOffset != zone.rawOffset || useDaylight != zone.useDaylight)
+       return false;
+     if (! useDaylight)
+       return true;
+     return (startYear == zone.startYear && startMonth == zone.startMonth
+            && startDay == zone.startDay
+            && startDayOfWeek == zone.startDayOfWeek
+            && startTime == zone.startTime
+            && startTimeMode == zone.startTimeMode && endMonth == zone.endMonth
+            && endDay == zone.endDay && endDayOfWeek == zone.endDayOfWeek
+            && endTime == zone.endTime && endTimeMode == zone.endTimeMode);
+   }
+ 
+   /**
+    * Test if the other time zone uses the same rule and only
+    * possibly differs in ID.  This implementation for this particular
+    * class will return true if the other object is a SimpleTimeZone,
+    * the raw offsets and useDaylight are identical and if useDaylight
+    * is true, also the start and end datas are identical.
+    * @return true if this zone uses the same rule.
+    */
+   public boolean hasSameRules(TimeZone other)
+   {
+     if (this == other)
+       return true;
+     if (! (other instanceof SimpleTimeZone))
+       return false;
+     SimpleTimeZone zone = (SimpleTimeZone) other;
+     if (zone.hashCode() != hashCode() || rawOffset != zone.rawOffset
+         || useDaylight != zone.useDaylight)
+       return false;
+     if (! useDaylight)
+       return true;
+     return (startYear == zone.startYear && startMonth == zone.startMonth
+            && startDay == zone.startDay
+            && startDayOfWeek == zone.startDayOfWeek
+            && startTime == zone.startTime
+            && startTimeMode == zone.startTimeMode && endMonth == zone.endMonth
+            && endDay == zone.endDay && endDayOfWeek == zone.endDayOfWeek
+            && endTime == zone.endTime && endTimeMode == zone.endTimeMode);
+   }
+ 
+   /**
+    * Returns a string representation of this SimpleTimeZone object.
+    * @return a string representation of this SimpleTimeZone object.
+    */
+   public String toString()
+   {
+     // the test for useDaylight is an incompatibility to jdk1.2, but
+     // I think this shouldn't hurt.
+     return getClass().getName() + "[" + "id=" + getID() + ",offset="
+            + rawOffset + ",dstSavings=" + dstSavings + ",useDaylight="
+            + useDaylight
+            + (useDaylight
+               ? ",startYear=" + startYear + ",startMode=" + startMode
+               + ",startMonth=" + startMonth + ",startDay=" + startDay
+               + ",startDayOfWeek=" + startDayOfWeek + ",startTime="
+               + startTime + ",startTimeMode=" + startTimeMode + ",endMode="
+               + endMode + ",endMonth=" + endMonth + ",endDay=" + endDay
+               + ",endDayOfWeek=" + endDayOfWeek + ",endTime=" + endTime
+               + ",endTimeMode=" + endTimeMode : "") + "]";
+   }
+ 
+   /**
+    * Reads a serialized simple time zone from stream.
+    * @see #writeObject
+    */
+   private void readObject(java.io.ObjectInputStream input)
+     throws java.io.IOException, ClassNotFoundException
+   {
+     input.defaultReadObject();
+     if (serialVersionOnStream == 0)
+       {
+ 	// initialize the new fields to default values.
+ 	dstSavings = 60 * 60 * 1000;
+ 	endMode = DOW_IN_MONTH_MODE;
+ 	startMode = DOW_IN_MONTH_MODE;
+ 	startTimeMode = WALL_TIME;
+ 	endTimeMode = WALL_TIME;
+ 	serialVersionOnStream = 2;
+       }
+     else
+       {
+ 	int length = input.readInt();
+ 	byte[] byteArray = new byte[length];
+ 	input.read(byteArray, 0, length);
+ 	if (length >= 4)
+ 	  {
+ 	    // Lets hope that Sun does extensions to the serialized
+ 	    // form in a sane manner.
+ 	    startDay = byteArray[0];
+ 	    startDayOfWeek = byteArray[1];
+ 	    endDay = byteArray[2];
+ 	    endDayOfWeek = byteArray[3];
+ 	  }
+       }
+   }
+ 
+   /**
+    * Serializes this object to a stream.  @serialdata The object is
+    * first written in the old JDK 1.1 format, so that it can be read
+    * by by the old classes.  This means, that the
+    * <code>start/endDay(OfWeek)</code>-Fields are written in the
+    * DOW_IN_MONTH_MODE rule, since this was the only supported rule
+    * in 1.1.
+    *
+    * In the optional section, we write first the length of an byte
+    * array as int and afterwards the byte array itself.  The byte
+    * array contains in this release four elements, namely the real
+    * startDay, startDayOfWeek endDay, endDayOfWeek in that Order.
+    * These fields are needed, because for compatibility reasons only
+    * approximative values are written to the required section, as
+    * described above.
+    */
+   private void writeObject(java.io.ObjectOutputStream output)
+     throws java.io.IOException
+   {
+     byte[] byteArray = new byte[]
+                        {
+                          (byte) startDay, (byte) startDayOfWeek, (byte) endDay,
+                          (byte) endDayOfWeek
+                        };
+ 
+     /* calculate the approximation for JDK 1.1 */
+     switch (startMode)
+       {
+       case DOM_MODE:
+ 	startDayOfWeek = Calendar.SUNDAY; // random day of week
+ 
+       // fall through
+       case DOW_GE_DOM_MODE:
+       case DOW_LE_DOM_MODE:
+ 	startDay = (startDay + 6) / 7;
+       }
+     switch (endMode)
+       {
+       case DOM_MODE:
+ 	endDayOfWeek = Calendar.SUNDAY;
+ 
+       // fall through
+       case DOW_GE_DOM_MODE:
+       case DOW_LE_DOM_MODE:
+ 	endDay = (endDay + 6) / 7;
+       }
+ 
+     // the required part:
+     output.defaultWriteObject();
+     // the optional part:
+     output.writeInt(byteArray.length);
+     output.write(byteArray, 0, byteArray.length);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/SortedMap.java gcc-4.1.0/libjava/classpath/java/util/SortedMap.java
*** gcc-4.0.2/libjava/classpath/java/util/SortedMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/SortedMap.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,173 ----
+ /* SortedMap.java -- A map that makes guarantees about the order of its keys
+    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * A map which guarantees its key's iteration order. The entries in the
+  * map are related by the <i>natural ordering</i> of the keys if they
+  * are Comparable, or by the provided Comparator.  Additional operations
+  * take advantage of the sorted nature of the map.
+  * <p>
+  *
+  * All keys entered in the map must be mutually comparable; in other words,
+  * <code>k1.compareTo(k2)</code> or <code>comparator.compare(k1, k2)</code>
+  * must not throw a ClassCastException. The ordering must be <i>consistent
+  * with equals</i> (see {@link Comparator} for this definition), if the
+  * map is to obey the general contract of the Map interface.  If not,
+  * the results are well-defined, but probably not what you wanted.
+  * <p>
+  *
+  * It is recommended that all implementing classes provide four constructors:
+  * 1) one that takes no arguments and builds an empty map sorted by natural
+  * order of the keys; 2) one that takes a Comparator for the sorting order;
+  * 3) one that takes a Map and sorts according to the natural order of its
+  * keys; and 4) one that takes a SortedMap and sorts by the same comparator.
+  * Unfortunately, the Java language does not provide a way to enforce this.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Map
+  * @see TreeMap
+  * @see SortedSet
+  * @see Comparable
+  * @see Comparator
+  * @see Collection
+  * @see ClassCastException
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface SortedMap extends Map
+ {
+   /**
+    * Returns the comparator used in sorting this map, or null if it is
+    * the keys' natural ordering.
+    *
+    * @return the sorting comparator
+    */
+   Comparator comparator();
+ 
+   /**
+    * Returns the first (lowest sorted) key in the map.
+    *
+    * @return the first key
+    * @throws NoSuchElementException if this map is empty.
+    */
+   Object firstKey();
+ 
+   /**
+    * Returns a view of the portion of the map strictly less than toKey. The
+    * view is backed by this map, so changes in one show up in the other.
+    * The submap supports all optional operations of the original.
+    * <p>
+    *
+    * The returned map throws an IllegalArgumentException any time a key is
+    * used which is out of the range of toKey. Note that the endpoint, toKey,
+    * is not included; if you want this value to be included, pass its successor
+    * object in to toKey.  For example, for Integers, you could request
+    * <code>headMap(new Integer(limit.intValue() + 1))</code>.
+    *
+    * @param toKey the exclusive upper range of the submap
+    * @return the submap
+    * @throws ClassCastException if toKey is not comparable to the map contents
+    * @throws IllegalArgumentException if this is a subMap, and toKey is out
+    *         of range
+    * @throws NullPointerException if toKey is null but the map does not allow
+    *         null keys
+    */
+   SortedMap headMap(Object toKey);
+ 
+   /**
+    * Returns the last (highest sorted) key in the map.
+    *
+    * @return the last key
+    * @throws NoSuchElementException if this map is empty.
+    */
+   Object lastKey();
+ 
+   /**
+    * Returns a view of the portion of the map greater than or equal to
+    * fromKey, and strictly less than toKey. The view is backed by this map,
+    * so changes in one show up in the other. The submap supports all
+    * optional operations of the original.
+    * <p>
+    *
+    * The returned map throws an IllegalArgumentException any time a key is
+    * used which is out of the range of fromKey and toKey. Note that the
+    * lower endpoint is included, but the upper is not; if you want to
+    * change the inclusion or exclusion of an endpoint, pass its successor
+    * object in instead.  For example, for Integers, you could request
+    * <code>subMap(new Integer(lowlimit.intValue() + 1),
+    * new Integer(highlimit.intValue() + 1))</code> to reverse
+    * the inclusiveness of both endpoints.
+    *
+    * @param fromKey the inclusive lower range of the submap
+    * @param toKey the exclusive upper range of the submap
+    * @return the submap
+    * @throws ClassCastException if fromKey or toKey is not comparable to
+    *         the map contents
+    * @throws IllegalArgumentException if this is a subMap, and fromKey or
+    *         toKey is out of range
+    * @throws NullPointerException if fromKey or toKey is null but the map
+    *         does not allow null keys
+    */
+   SortedMap subMap(Object fromKey, Object toKey);
+ 
+   /**
+    * Returns a view of the portion of the map greater than or equal to
+    * fromKey. The view is backed by this map, so changes in one show up
+    * in the other. The submap supports all optional operations of the original.
+    * <p>
+    *
+    * The returned map throws an IllegalArgumentException any time a key is
+    * used which is out of the range of fromKey. Note that the endpoint, fromKey, is
+    * included; if you do not want this value to be included, pass its successor object in
+    * to fromKey.  For example, for Integers, you could request
+    * <code>tailMap(new Integer(limit.intValue() + 1))</code>.
+    *
+    * @param fromKey the inclusive lower range of the submap
+    * @return the submap
+    * @throws ClassCastException if fromKey is not comparable to the map
+    *         contents
+    * @throws IllegalArgumentException if this is a subMap, and fromKey is out
+    *         of range
+    * @throws NullPointerException if fromKey is null but the map does not allow
+    *         null keys
+    */
+   SortedMap tailMap(Object fromKey);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/SortedSet.java gcc-4.1.0/libjava/classpath/java/util/SortedSet.java
*** gcc-4.0.2/libjava/classpath/java/util/SortedSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/SortedSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,176 ----
+ /* SortedSet.java -- A set that makes guarantees about the order of its
+    elements
+    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * A set which guarantees its iteration order. The elements in the set
+  * are related by the <i>natural ordering</i> if they are Comparable, or
+  * by the provided Comparator.  Additional operations take advantage of
+  * the sorted nature of the set.
+  * <p>
+  *
+  * All elements entered in the set must be mutually comparable; in other words,
+  * <code>k1.compareTo(k2)</code> or <code>comparator.compare(k1, k2)</code>
+  * must not throw a ClassCastException. The ordering must be <i>consistent
+  * with equals</i> (see {@link Comparator} for this definition), if the
+  * set is to obey the general contract of the Set interface.  If not,
+  * the results are well-defined, but probably not what you wanted.
+  * <p>
+  *
+  * It is recommended that all implementing classes provide four constructors:
+  * 1) one that takes no arguments and builds an empty set sorted by natural
+  * order of the elements; 2) one that takes a Comparator for the sorting order;
+  * 3) one that takes a Set and sorts according to the natural order of its
+  * elements; and 4) one that takes a SortedSet and sorts by the same
+  * comparator. Unfortunately, the Java language does not provide a way to
+  * enforce this.
+  *
+  * @author Original author unknown
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Set
+  * @see TreeSet
+  * @see SortedMap
+  * @see Collection
+  * @see Comparable
+  * @see Comparator
+  * @see ClassCastException
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface SortedSet extends Set
+ {
+   /**
+    * Returns the comparator used in sorting this set, or null if it is
+    * the elements' natural ordering.
+    *
+    * @return the sorting comparator
+    */
+   Comparator comparator();
+ 
+   /**
+    * Returns the first (lowest sorted) element in the set.
+    *
+    * @return the first element
+    * @throws NoSuchElementException if the set is empty.
+    */
+   Object first();
+ 
+   /**
+    * Returns a view of the portion of the set strictly less than toElement. The
+    * view is backed by this set, so changes in one show up in the other.
+    * The subset supports all optional operations of the original.
+    * <p>
+    *
+    * The returned set throws an IllegalArgumentException any time an element is
+    * used which is out of the range of toElement. Note that the endpoint, toElement,
+    * is not included; if you want this value included, pass its successor object in to
+    * toElement.  For example, for Integers, you could request
+    * <code>headSet(new Integer(limit.intValue() + 1))</code>.
+    *
+    * @param toElement the exclusive upper range of the subset
+    * @return the subset
+    * @throws ClassCastException if toElement is not comparable to the set
+    *         contents
+    * @throws IllegalArgumentException if this is a subSet, and toElement is out
+    *         of range
+    * @throws NullPointerException if toElement is null but the set does not
+    *         allow null elements
+    */
+   SortedSet headSet(Object toElement);
+ 
+   /**
+    * Returns the last (highest sorted) element in the set.
+    *
+    * @return the last element
+    * @throws NoSuchElementException if the set is empty.
+    */
+   Object last();
+ 
+   /**
+    * Returns a view of the portion of the set greater than or equal to
+    * fromElement, and strictly less than toElement. The view is backed by
+    * this set, so changes in one show up in the other. The subset supports all
+    * optional operations of the original.
+    * <p>
+    *
+    * The returned set throws an IllegalArgumentException any time an element is
+    * used which is out of the range of fromElement and toElement. Note that the
+    * lower endpoint is included, but the upper is not; if you want to
+    * change the inclusion or exclusion of an endpoint, pass its successor
+    * object in instead.  For example, for Integers, you can request
+    * <code>subSet(new Integer(lowlimit.intValue() + 1),
+    * new Integer(highlimit.intValue() + 1))</code> to reverse
+    * the inclusiveness of both endpoints.
+    *
+    * @param fromElement the inclusive lower range of the subset
+    * @param toElement the exclusive upper range of the subset
+    * @return the subset
+    * @throws ClassCastException if fromElement or toElement is not comparable
+    *         to the set contents
+    * @throws IllegalArgumentException if this is a subSet, and fromElement or
+    *         toElement is out of range
+    * @throws NullPointerException if fromElement or toElement is null but the
+    *         set does not allow null elements
+    */
+   SortedSet subSet(Object fromElement, Object toElement);
+ 
+   /**
+    * Returns a view of the portion of the set greater than or equal to
+    * fromElement. The view is backed by this set, so changes in one show up
+    * in the other. The subset supports all optional operations of the original.
+    * <p>
+    *
+    * The returned set throws an IllegalArgumentException any time an element is
+    * used which is out of the range of fromElement. Note that the endpoint,
+    * fromElement, is included; if you do not want this value to be included, pass its
+    * successor object in to fromElement.  For example, for Integers, you could request
+    * <code>tailSet(new Integer(limit.intValue() + 1))</code>.
+    *
+    * @param fromElement the inclusive lower range of the subset
+    * @return the subset
+    * @throws ClassCastException if fromElement is not comparable to the set
+    *         contents
+    * @throws IllegalArgumentException if this is a subSet, and fromElement is
+    *         out of range
+    * @throws NullPointerException if fromElement is null but the set does not
+    *         allow null elements
+    */
+   SortedSet tailSet(Object fromElement);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Stack.java gcc-4.1.0/libjava/classpath/java/util/Stack.java
*** gcc-4.0.2/libjava/classpath/java/util/Stack.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Stack.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,158 ----
+ /* Stack.java - Class that provides a Last In First Out (LIFO)
+    datatype, known more commonly as a Stack
+    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+  * "The Java Language Specification", ISBN 0-201-63451-1
+  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+  * Status:  Believed complete and correct
+ 
+ /**
+  * Stack provides a Last In First Out (LIFO) data type, commonly known
+  * as a Stack.  Stack itself extends Vector and provides the additional
+  * methods for stack manipulation (push, pop, peek). You can also seek for
+  * the 1-based position of an element on the stack.
+  *
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see List
+  * @see AbstractList
+  * @see LinkedList
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Stack extends Vector
+ {
+   // We could use Vector methods internally for the following methods,
+   // but have used Vector fields directly for efficiency (i.e. this
+   // often reduces out duplicate bounds checking).
+ 
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 1224463164541339165L;
+ 
+   /**
+    * This constructor creates a new Stack, initially empty
+    */
+   public Stack()
+   {
+   }
+ 
+   /**
+    * Pushes an Object onto the top of the stack.  This method is effectively
+    * the same as addElement(item).
+    *
+    * @param item the Object to push onto the stack
+    * @return the Object pushed onto the stack
+    * @see Vector#addElement(Object)
+    */
+   public Object push(Object item)
+   {
+     // When growing the Stack, use the Vector routines in case more
+     // memory is needed.
+     // Note: spec indicates that this method *always* returns obj passed in!
+ 
+     addElement(item);
+     return item;
+   }
+ 
+   /**
+    * Pops an item from the stack and returns it.  The item popped is
+    * removed from the Stack.
+    *
+    * @return the Object popped from the stack
+    * @throws EmptyStackException if the stack is empty
+    */
+   public synchronized Object pop()
+   {
+     if (elementCount == 0)
+       throw new EmptyStackException();
+ 
+     modCount++;
+     Object obj = elementData[--elementCount];
+ 
+     // Set topmost element to null to assist the gc in cleanup.
+     elementData[elementCount] = null;
+     return obj;
+   }
+ 
+   /**
+    * Returns the top Object on the stack without removing it.
+    *
+    * @return the top Object on the stack
+    * @throws EmptyStackException if the stack is empty
+    */
+   public synchronized Object peek()
+   {
+     if (elementCount == 0)
+       throw new EmptyStackException();
+ 
+     return elementData[elementCount - 1];
+   }
+ 
+   /**
+    * Tests if the stack is empty.
+    *
+    * @return true if the stack contains no items, false otherwise
+    */
+   public synchronized boolean empty()
+   {
+     return elementCount == 0;
+   }
+ 
+   /**
+    * Returns the position of an Object on the stack, with the top
+    * most Object being at position 1, and each Object deeper in the
+    * stack at depth + 1.
+    *
+    * @param o The object to search for
+    * @return The 1 based depth of the Object, or -1 if the Object
+    *         is not on the stack
+    */
+   public synchronized int search(Object o)
+   {
+     int i = elementCount;
+     while (--i >= 0)
+       if (equals(o, elementData[i]))
+         return elementCount - i;
+     return -1;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/StringTokenizer.java gcc-4.1.0/libjava/classpath/java/util/StringTokenizer.java
*** gcc-4.0.2/libjava/classpath/java/util/StringTokenizer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/StringTokenizer.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,268 ----
+ /* StringTokenizer -- breaks a String into tokens
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * This class splits a string into tokens.  The caller can set on which
+  * delimiters the string should be split and if the delimiters should be
+  * returned. This is much simpler than {@link java.io.StreamTokenizer}.
+  *
+  * <p>You may change the delimiter set on the fly by calling
+  * nextToken(String).  But the semantic is quite difficult; it even
+  * depends on calling <code>hasMoreTokens()</code>.  You should call
+  * <code>hasMoreTokens()</code> before, otherwise the old delimiters
+  * after the last token are candidates for being returned.
+  *
+  * <p>If you want to get the delimiters, you have to use the three argument
+  * constructor.  The delimiters are returned as token consisting of a
+  * single character.
+  *
+  * @author Jochen Hoenicke
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see java.io.StreamTokenizer
+  * @status updated to 1.4
+  */
+ public class StringTokenizer implements Enumeration
+ {
+   // WARNING: StringTokenizer is a CORE class in the bootstrap cycle. See the
+   // comments in vm/reference/java/lang/Runtime for implications of this fact.
+ 
+   /**
+    * The position in the str, where we currently are.
+    */
+   private int pos;
+ 
+   /**
+    * The string that should be split into tokens.
+    */
+   private final String str;
+ 
+   /**
+    * The length of the string.
+    */
+   private final int len;
+ 
+   /**
+    * The string containing the delimiter characters.
+    */
+   private String delim;
+ 
+   /**
+    * Tells, if we should return the delimiters.
+    */
+   private final boolean retDelims;
+ 
+   /**
+    * Creates a new StringTokenizer for the string <code>str</code>,
+    * that should split on the default delimiter set (space, tab,
+    * newline, return and formfeed), and which doesn't return the
+    * delimiters.
+    *
+    * @param str The string to split
+    * @throws NullPointerException if str is null
+    */
+   public StringTokenizer(String str)
+   {
+     this(str, " \t\n\r\f", false);
+   }
+ 
+   /**
+    * Create a new StringTokenizer, that splits the given string on
+    * the given delimiter characters.  It doesn't return the delimiter
+    * characters.
+    *
+    * @param str the string to split
+    * @param delim a string containing all delimiter characters
+    * @throws NullPointerException if either argument is null
+    */
+   public StringTokenizer(String str, String delim)
+   {
+     this(str, delim, false);
+   }
+ 
+   /**
+    * Create a new StringTokenizer, that splits the given string on
+    * the given delimiter characters.  If you set
+    * <code>returnDelims</code> to <code>true</code>, the delimiter
+    * characters are returned as tokens of their own.  The delimiter
+    * tokens always consist of a single character.
+    *
+    * @param str the string to split
+    * @param delim a string containing all delimiter characters
+    * @param returnDelims tells, if you want to get the delimiters
+    * @throws NullPointerException if str or delim is null
+    */
+   public StringTokenizer(String str, String delim, boolean returnDelims)
+   {
+     len = str.length();
+     this.str = str;
+     // The toString() hack causes the NullPointerException.
+     this.delim = delim.toString();
+     this.retDelims = returnDelims;
+     this.pos = 0;
+   }
+ 
+   /**
+    * Tells if there are more tokens.
+    *
+    * @return true if the next call of nextToken() will succeed
+    */
+   public boolean hasMoreTokens()
+   {
+     if (! retDelims)
+       {
+         while (pos < len && delim.indexOf(str.charAt(pos)) >= 0)
+           pos++;
+       }
+     return pos < len;
+   }
+ 
+   /**
+    * Returns the nextToken, changing the delimiter set to the given
+    * <code>delim</code>.  The change of the delimiter set is
+    * permanent, ie. the next call of nextToken(), uses the same
+    * delimiter set.
+    *
+    * @param delim a string containing the new delimiter characters
+    * @return the next token with respect to the new delimiter characters
+    * @throws NoSuchElementException if there are no more tokens
+    * @throws NullPointerException if delim is null
+    */
+   public String nextToken(String delim) throws NoSuchElementException
+   {
+     this.delim = delim;
+     return nextToken();
+   }
+ 
+   /**
+    * Returns the nextToken of the string.
+    *
+    * @return the next token with respect to the current delimiter characters
+    * @throws NoSuchElementException if there are no more tokens
+    */
+   public String nextToken() throws NoSuchElementException
+   {
+     if (pos < len && delim.indexOf(str.charAt(pos)) >= 0)
+       {
+         if (retDelims)
+           return str.substring(pos, ++pos);
+         while (++pos < len && delim.indexOf(str.charAt(pos)) >= 0);
+       }
+     if (pos < len)
+       {
+         int start = pos;
+         while (++pos < len && delim.indexOf(str.charAt(pos)) < 0);
+ 
+         return str.substring(start, pos);
+       }
+     throw new NoSuchElementException();
+   }
+ 
+   /**
+    * This does the same as hasMoreTokens. This is the
+    * <code>Enumeration</code> interface method.
+    *
+    * @return true, if the next call of nextElement() will succeed
+    * @see #hasMoreTokens()
+    */
+   public boolean hasMoreElements()
+   {
+     return hasMoreTokens();
+   }
+ 
+   /**
+    * This does the same as nextTokens. This is the
+    * <code>Enumeration</code> interface method.
+    *
+    * @return the next token with respect to the current delimiter characters
+    * @throws NoSuchElementException if there are no more tokens
+    * @see #nextToken()
+    */
+   public Object nextElement() throws NoSuchElementException
+   {
+     return nextToken();
+   }
+ 
+   /**
+    * This counts the number of remaining tokens in the string, with
+    * respect to the current delimiter set.
+    *
+    * @return the number of times <code>nextTokens()</code> will succeed
+    * @see #nextToken()
+    */
+   public int countTokens()
+   {
+     int count = 0;
+     int delimiterCount = 0;
+     boolean tokenFound = false; // Set when a non-delimiter is found
+     int tmpPos = pos;
+ 
+     // Note for efficiency, we count up the delimiters rather than check
+     // retDelims every time we encounter one.  That way, we can
+     // just do the conditional once at the end of the method
+     while (tmpPos < len)
+       {
+         if (delim.indexOf(str.charAt(tmpPos++)) >= 0)
+           {
+             if (tokenFound)
+               {
+                 // Got to the end of a token
+                 count++;
+                 tokenFound = false;
+               }
+             delimiterCount++; // Increment for this delimiter
+           }
+         else
+           {
+             tokenFound = true;
+             // Get to the end of the token
+             while (tmpPos < len
+                    && delim.indexOf(str.charAt(tmpPos)) < 0)
+               ++tmpPos;
+           }
+       }
+ 
+     // Make sure to count the last token
+     if (tokenFound)
+       count++;
+ 
+     // if counting delmiters add them into the token count
+     return retDelims ? count + delimiterCount : count;
+   }
+ } // class StringTokenizer
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/TimeZone.java gcc-4.1.0/libjava/classpath/java/util/TimeZone.java
*** gcc-4.0.2/libjava/classpath/java/util/TimeZone.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/TimeZone.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,1547 ----
+ /* java.util.TimeZone
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.text.DateFormatSymbols;
+ 
+ /**
+  * This class represents a time zone offset and handles daylight savings.
+  * 
+  * You can get the default time zone with <code>getDefault</code>.
+  * This represents the time zone where program is running.
+  *
+  * Another way to create a time zone is <code>getTimeZone</code>, where
+  * you can give an identifier as parameter.  For instance, the identifier
+  * of the Central European Time zone is "CET".
+  *
+  * With the <code>getAvailableIDs</code> method, you can get all the
+  * supported time zone identifiers.
+  *
+  * @see Calendar
+  * @see SimpleTimeZone
+  * @author Jochen Hoenicke
+  */
+ public abstract class TimeZone implements java.io.Serializable, Cloneable
+ {
+ 
+   /**
+    * Constant used to indicate that a short timezone abbreviation should
+    * be returned, such as "EST"
+    */
+   public static final int SHORT = 0;
+ 
+   /**
+    * Constant used to indicate that a long timezone name should be
+    * returned, such as "Eastern Standard Time".
+    */
+   public static final int LONG = 1;
+ 
+   /**
+    * The time zone identifier, e.g. PST.
+    */
+   private String ID;
+ 
+   /**
+    * The default time zone, as returned by getDefault.
+    */
+   private static TimeZone defaultZone0;
+ 
+   /**
+    * Tries to get the default TimeZone for this system if not already
+    * set.  It will call <code>getDefaultTimeZone(String)</code> with
+    * the result of <code>System.getProperty("user.timezone")</code>.
+    * If that fails it calls <code>VMTimeZone.getDefaultTimeZoneId()</code>.
+    * If that also fails GMT is returned.
+    */
+   private static synchronized TimeZone defaultZone()
+   {
+     /* Look up default timezone */
+     if (defaultZone0 == null) 
+       {
+ 	defaultZone0 = (TimeZone) AccessController.doPrivileged
+ 	  (new PrivilegedAction()
+ 	    {
+ 	      public Object run()
+ 	      {
+ 		TimeZone zone = null;
+ 		
+ 		// Prefer System property user.timezone.
+ 		String tzid = System.getProperty("user.timezone");
+ 		if (tzid != null && !tzid.equals(""))
+ 		  zone = getDefaultTimeZone(tzid);
+ 		
+ 		// Try platfom specific way.
+ 		if (zone == null)
+ 		  zone = VMTimeZone.getDefaultTimeZoneId();
+ 		
+ 		// Fall back on GMT.
+ 		if (zone == null)
+ 		  zone = (TimeZone) timezones().get("GMT");
+ 		
+ 		return zone;
+ 	      }
+ 	    });
+       }
+     
+     return defaultZone0; 
+   }
+   
+   private static final long serialVersionUID = 3581463369166924961L;
+ 
+   /**
+    * HashMap for timezones by ID.  
+    */
+   private static HashMap timezones0;
+   /* initialize this static field lazily to overhead if
+    * it is not needed: 
+    */
+   // Package-private to avoid a trampoline.
+   static synchronized HashMap timezones()
+   {
+     if (timezones0 == null) 
+       {
+ 	HashMap timezones = new HashMap();
+ 	timezones0 = timezones;
+ 
+ 	TimeZone tz;
+ 	// Automatically generated by scripts/timezones.pl
+ 	// XXX - Should we read this data from a file?
+ 	tz = new SimpleTimeZone(-11000 * 3600, "MIT");
+ 	timezones0.put("MIT", tz);
+ 	timezones0.put("Pacific/Apia", tz);
+ 	timezones0.put("Pacific/Midway", tz);
+ 	timezones0.put("Pacific/Niue", tz);
+ 	timezones0.put("Pacific/Pago_Pago", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-10000 * 3600, "America/Adak",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("America/Adak", tz);
+ 	tz = new SimpleTimeZone(-10000 * 3600, "HST");
+ 	timezones0.put("HST", tz);
+ 	timezones0.put("Pacific/Fakaofo", tz);
+ 	timezones0.put("Pacific/Honolulu", tz);
+ 	timezones0.put("Pacific/Johnston", tz);
+ 	timezones0.put("Pacific/Rarotonga", tz);
+ 	timezones0.put("Pacific/Tahiti", tz);
+ 	tz = new SimpleTimeZone(-9500 * 3600, "Pacific/Marquesas");
+ 	timezones0.put("Pacific/Marquesas", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-9000 * 3600, "AST",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("AST", tz);
+ 	timezones0.put("America/Anchorage", tz);
+ 	timezones0.put("America/Juneau", tz);
+ 	timezones0.put("America/Nome", tz);
+ 	timezones0.put("America/Yakutat", tz);
+ 	tz = new SimpleTimeZone(-9000 * 3600, "Pacific/Gambier");
+ 	timezones0.put("Pacific/Gambier", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-8000 * 3600, "PST",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("PST", tz);
+ 	timezones0.put("PST8PDT", tz);
+ 	timezones0.put("America/Dawson", tz);
+ 	timezones0.put("America/Los_Angeles", tz);
+ 	timezones0.put("America/Tijuana", tz);
+ 	timezones0.put("America/Vancouver", tz);
+ 	timezones0.put("America/Whitehorse", tz);
+ 	timezones0.put("US/Pacific-New", tz);
+ 	tz = new SimpleTimeZone(-8000 * 3600, "Pacific/Pitcairn");
+ 	timezones0.put("Pacific/Pitcairn", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-7000 * 3600, "MST",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("MST", tz);
+ 	timezones0.put("MST7MDT", tz);
+ 	timezones0.put("America/Boise", tz);
+ 	timezones0.put("America/Cambridge_Bay", tz);
+ 	timezones0.put("America/Chihuahua", tz);
+ 	timezones0.put("America/Denver", tz);
+ 	timezones0.put("America/Edmonton", tz);
+ 	timezones0.put("America/Inuvik", tz);
+ 	timezones0.put("America/Mazatlan", tz);
+ 	timezones0.put("America/Shiprock", tz);
+ 	timezones0.put("America/Yellowknife", tz);
+ 	tz = new SimpleTimeZone(-7000 * 3600, "MST7");
+ 	timezones0.put("MST7", tz);
+ 	timezones0.put("PNT", tz);
+ 	timezones0.put("America/Dawson_Creek", tz);
+ 	timezones0.put("America/Hermosillo", tz);
+ 	timezones0.put("America/Phoenix", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-6000 * 3600, "CST",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("CST", tz);
+ 	timezones0.put("CST6CDT", tz);
+ 	timezones0.put("America/Cancun", tz);
+ 	timezones0.put("America/Chicago", tz);
+ 	timezones0.put("America/Menominee", tz);
+ 	timezones0.put("America/Merida", tz);
+ 	timezones0.put("America/Mexico_City", tz);
+ 	timezones0.put("America/Monterrey", tz);
+ 	timezones0.put("America/North_Dakota/Center", tz);
+ 	timezones0.put("America/Rainy_River", tz);
+ 	timezones0.put("America/Rankin_Inlet", tz);
+ 	tz = new SimpleTimeZone(-6000 * 3600, "America/Belize");
+ 	timezones0.put("America/Belize", tz);
+ 	timezones0.put("America/Costa_Rica", tz);
+ 	timezones0.put("America/El_Salvador", tz);
+ 	timezones0.put("America/Guatemala", tz);
+ 	timezones0.put("America/Managua", tz);
+ 	timezones0.put("America/Regina", tz);
+ 	timezones0.put("America/Swift_Current", tz);
+ 	timezones0.put("America/Tegucigalpa", tz);
+ 	timezones0.put("Pacific/Galapagos", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-6000 * 3600, "America/Winnipeg",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("America/Winnipeg", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-6000 * 3600, "Pacific/Easter",
+ 	   Calendar.OCTOBER, 2, Calendar.SATURDAY, 23000 * 3600,
+ 	   Calendar.MARCH, 2, Calendar.SATURDAY, 22000 * 3600);
+ 	timezones0.put("Pacific/Easter", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-5000 * 3600, "America/Grand_Turk",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 0 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600);
+ 	timezones0.put("America/Grand_Turk", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-5000 * 3600, "America/Havana",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 1000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 1000 * 3600);
+ 	timezones0.put("America/Havana", tz);
+ 	tz = new SimpleTimeZone(-5000 * 3600, "EST5");
+ 	timezones0.put("EST5", tz);
+ 	timezones0.put("IET", tz);
+ 	timezones0.put("America/Bogota", tz);
+ 	timezones0.put("America/Cayman", tz);
+ 	timezones0.put("America/Eirunepe", tz);
+ 	timezones0.put("America/Guayaquil", tz);
+ 	timezones0.put("America/Indiana/Indianapolis", tz);
+ 	timezones0.put("America/Indiana/Knox", tz);
+ 	timezones0.put("America/Indiana/Marengo", tz);
+ 	timezones0.put("America/Indiana/Vevay", tz);
+ 	timezones0.put("America/Indianapolis", tz);
+ 	timezones0.put("America/Jamaica", tz);
+ 	timezones0.put("America/Lima", tz);
+ 	timezones0.put("America/Panama", tz);
+ 	timezones0.put("America/Port-au-Prince", tz);
+ 	timezones0.put("America/Rio_Branco", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-5000 * 3600, "EST",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("EST", tz);
+ 	timezones0.put("EST5EDT", tz);
+ 	timezones0.put("America/Detroit", tz);
+ 	timezones0.put("America/Iqaluit", tz);
+ 	timezones0.put("America/Kentucky/Louisville", tz);
+ 	timezones0.put("America/Kentucky/Monticello", tz);
+ 	timezones0.put("America/Louisville", tz);
+ 	timezones0.put("America/Montreal", tz);
+ 	timezones0.put("America/Nassau", tz);
+ 	timezones0.put("America/New_York", tz);
+ 	timezones0.put("America/Nipigon", tz);
+ 	timezones0.put("America/Pangnirtung", tz);
+ 	timezones0.put("America/Thunder_Bay", tz);
+ 	timezones0.put("America/Toronto", tz);
+ 	tz = new SimpleTimeZone(-4000 * 3600, "PRT");
+ 	timezones0.put("PRT", tz);
+ 	timezones0.put("America/Anguilla", tz);
+ 	timezones0.put("America/Antigua", tz);
+ 	timezones0.put("America/Aruba", tz);
+ 	timezones0.put("America/Barbados", tz);
+ 	timezones0.put("America/Boa_Vista", tz);
+ 	timezones0.put("America/Caracas", tz);
+ 	timezones0.put("America/Curacao", tz);
+ 	timezones0.put("America/Dominica", tz);
+ 	timezones0.put("America/Grenada", tz);
+ 	timezones0.put("America/Guadeloupe", tz);
+ 	timezones0.put("America/Guyana", tz);
+ 	timezones0.put("America/La_Paz", tz);
+ 	timezones0.put("America/Manaus", tz);
+ 	timezones0.put("America/Martinique", tz);
+ 	timezones0.put("America/Montserrat", tz);
+ 	timezones0.put("America/Port_of_Spain", tz);
+ 	timezones0.put("America/Porto_Velho", tz);
+ 	timezones0.put("America/Puerto_Rico", tz);
+ 	timezones0.put("America/Santo_Domingo", tz);
+ 	timezones0.put("America/St_Kitts", tz);
+ 	timezones0.put("America/St_Lucia", tz);
+ 	timezones0.put("America/St_Thomas", tz);
+ 	timezones0.put("America/St_Vincent", tz);
+ 	timezones0.put("America/Tortola", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-4000 * 3600, "America/Asuncion",
+ 	   Calendar.OCTOBER, 3, Calendar.SUNDAY, 0 * 3600,
+ 	   Calendar.MARCH, 2, Calendar.SUNDAY, 0 * 3600);
+ 	timezones0.put("America/Asuncion", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-4000 * 3600, "America/Campo_Grande",
+ 	   Calendar.OCTOBER, 3, Calendar.SUNDAY, 0 * 3600,
+ 	   Calendar.FEBRUARY, 3, Calendar.SUNDAY, 0 * 3600);
+ 	timezones0.put("America/Campo_Grande", tz);
+ 	timezones0.put("America/Cuiaba", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-4000 * 3600, "America/Goose_Bay",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 60000,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 60000);
+ 	timezones0.put("America/Goose_Bay", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-4000 * 3600, "America/Santiago",
+ 	   Calendar.OCTOBER, 9, -Calendar.SUNDAY, 1000 * 3600,
+ 	   Calendar.MARCH, 9, -Calendar.SUNDAY, 0 * 3600);
+ 	timezones0.put("America/Santiago", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-4000 * 3600, "America/Glace_Bay",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("America/Glace_Bay", tz);
+ 	timezones0.put("America/Halifax", tz);
+ 	timezones0.put("America/Thule", tz);
+ 	timezones0.put("Atlantic/Bermuda", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-4000 * 3600, "Antarctica/Palmer",
+ 	   Calendar.OCTOBER, 9, -Calendar.SUNDAY, 0 * 3600,
+ 	   Calendar.MARCH, 9, -Calendar.SUNDAY, 0 * 3600);
+ 	timezones0.put("Antarctica/Palmer", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-4000 * 3600, "Atlantic/Stanley",
+ 	   Calendar.SEPTEMBER, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.APRIL, 3, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("Atlantic/Stanley", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-3500 * 3600, "CNT",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 60000,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 60000);
+ 	timezones0.put("CNT", tz);
+ 	timezones0.put("America/St_Johns", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-3000 * 3600, "America/Godthab",
+ 	   Calendar.MARCH, 30, -Calendar.SATURDAY, 23000 * 3600,
+ 	   Calendar.OCTOBER, 30, -Calendar.SATURDAY, 23000 * 3600);
+ 	timezones0.put("America/Godthab", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-3000 * 3600, "America/Miquelon",
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("America/Miquelon", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-3000 * 3600, "America/Sao_Paulo",
+ 	   Calendar.OCTOBER, 3, Calendar.SUNDAY, 0 * 3600,
+ 	   Calendar.FEBRUARY, 3, Calendar.SUNDAY, 0 * 3600);
+ 	timezones0.put("America/Sao_Paulo", tz);
+ 	tz = new SimpleTimeZone(-3000 * 3600, "AGT");
+ 	timezones0.put("AGT", tz);
+ 	timezones0.put("America/Araguaina", tz);
+ 	timezones0.put("America/Argentina/Buenos_Aires", tz);
+ 	timezones0.put("America/Argentina/Catamarca", tz);
+ 	timezones0.put("America/Argentina/ComodRivadavia", tz);
+ 	timezones0.put("America/Argentina/Cordoba", tz);
+ 	timezones0.put("America/Argentina/Jujuy", tz);
+ 	timezones0.put("America/Argentina/La_Rioja", tz);
+ 	timezones0.put("America/Argentina/Mendoza", tz);
+ 	timezones0.put("America/Argentina/Rio_Gallegos", tz);
+ 	timezones0.put("America/Argentina/San_Juan", tz);
+ 	timezones0.put("America/Argentina/Tucuman", tz);
+ 	timezones0.put("America/Argentina/Ushuaia", tz);
+ 	timezones0.put("America/Bahia", tz);
+ 	timezones0.put("America/Belem", tz);
+ 	timezones0.put("America/Cayenne", tz);
+ 	timezones0.put("America/Fortaleza", tz);
+ 	timezones0.put("America/Maceio", tz);
+ 	timezones0.put("America/Montevideo", tz);
+ 	timezones0.put("America/Paramaribo", tz);
+ 	timezones0.put("America/Recife", tz);
+ 	timezones0.put("Antarctica/Rothera", tz);
+ 	tz = new SimpleTimeZone(-2000 * 3600, "America/Noronha");
+ 	timezones0.put("America/Noronha", tz);
+ 	timezones0.put("Atlantic/South_Georgia", tz);
+ 	tz = new SimpleTimeZone
+ 	  (-1000 * 3600, "America/Scoresbysund",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 1000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 1000 * 3600);
+ 	timezones0.put("America/Scoresbysund", tz);
+ 	timezones0.put("Atlantic/Azores", tz);
+ 	tz = new SimpleTimeZone(-1000 * 3600, "Atlantic/Cape_Verde");
+ 	timezones0.put("Atlantic/Cape_Verde", tz);
+ 	tz = new SimpleTimeZone(0 * 3600, "GMT");
+ 	timezones0.put("GMT", tz);
+ 	timezones0.put("UTC", tz);
+ 	timezones0.put("Africa/Abidjan", tz);
+ 	timezones0.put("Africa/Accra", tz);
+ 	timezones0.put("Africa/Bamako", tz);
+ 	timezones0.put("Africa/Banjul", tz);
+ 	timezones0.put("Africa/Bissau", tz);
+ 	timezones0.put("Africa/Casablanca", tz);
+ 	timezones0.put("Africa/Conakry", tz);
+ 	timezones0.put("Africa/Dakar", tz);
+ 	timezones0.put("Africa/El_Aaiun", tz);
+ 	timezones0.put("Africa/Freetown", tz);
+ 	timezones0.put("Africa/Lome", tz);
+ 	timezones0.put("Africa/Monrovia", tz);
+ 	timezones0.put("Africa/Nouakchott", tz);
+ 	timezones0.put("Africa/Ouagadougou", tz);
+ 	timezones0.put("Africa/Sao_Tome", tz);
+ 	timezones0.put("Africa/Timbuktu", tz);
+ 	timezones0.put("America/Danmarkshavn", tz);
+ 	timezones0.put("Atlantic/Reykjavik", tz);
+ 	timezones0.put("Atlantic/St_Helena", tz);
+ 	timezones0.put("Europe/Belfast", tz);
+ 	timezones0.put("Europe/Dublin", tz);
+ 	timezones0.put("Europe/London", tz);
+ 	tz = new SimpleTimeZone
+ 	  (0 * 3600, "WET",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("WET", tz);
+ 	timezones0.put("Atlantic/Canary", tz);
+ 	timezones0.put("Atlantic/Faeroe", tz);
+ 	timezones0.put("Atlantic/Madeira", tz);
+ 	timezones0.put("Europe/Lisbon", tz);
+ 	tz = new SimpleTimeZone(1000 * 3600, "Africa/Algiers");
+ 	timezones0.put("Africa/Algiers", tz);
+ 	timezones0.put("Africa/Bangui", tz);
+ 	timezones0.put("Africa/Brazzaville", tz);
+ 	timezones0.put("Africa/Douala", tz);
+ 	timezones0.put("Africa/Kinshasa", tz);
+ 	timezones0.put("Africa/Lagos", tz);
+ 	timezones0.put("Africa/Libreville", tz);
+ 	timezones0.put("Africa/Luanda", tz);
+ 	timezones0.put("Africa/Malabo", tz);
+ 	timezones0.put("Africa/Ndjamena", tz);
+ 	timezones0.put("Africa/Niamey", tz);
+ 	timezones0.put("Africa/Porto-Novo", tz);
+ 	timezones0.put("Africa/Tunis", tz);
+ 	tz = new SimpleTimeZone
+ 	  (1000 * 3600, "Africa/Windhoek",
+ 	   Calendar.SEPTEMBER, 1, Calendar.SUNDAY, 2000 * 3600,
+ 	   Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600);
+ 	timezones0.put("Africa/Windhoek", tz);
+ 	tz = new SimpleTimeZone
+ 	  (1000 * 3600, "CET",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("CET", tz);
+ 	timezones0.put("ECT", tz);
+ 	timezones0.put("MET", tz);
+ 	timezones0.put("Africa/Ceuta", tz);
+ 	timezones0.put("Arctic/Longyearbyen", tz);
+ 	timezones0.put("Atlantic/Jan_Mayen", tz);
+ 	timezones0.put("Europe/Amsterdam", tz);
+ 	timezones0.put("Europe/Andorra", tz);
+ 	timezones0.put("Europe/Belgrade", tz);
+ 	timezones0.put("Europe/Berlin", tz);
+ 	timezones0.put("Europe/Bratislava", tz);
+ 	timezones0.put("Europe/Brussels", tz);
+ 	timezones0.put("Europe/Budapest", tz);
+ 	timezones0.put("Europe/Copenhagen", tz);
+ 	timezones0.put("Europe/Gibraltar", tz);
+ 	timezones0.put("Europe/Ljubljana", tz);
+ 	timezones0.put("Europe/Luxembourg", tz);
+ 	timezones0.put("Europe/Madrid", tz);
+ 	timezones0.put("Europe/Malta", tz);
+ 	timezones0.put("Europe/Monaco", tz);
+ 	timezones0.put("Europe/Oslo", tz);
+ 	timezones0.put("Europe/Paris", tz);
+ 	timezones0.put("Europe/Prague", tz);
+ 	timezones0.put("Europe/Rome", tz);
+ 	timezones0.put("Europe/San_Marino", tz);
+ 	timezones0.put("Europe/Sarajevo", tz);
+ 	timezones0.put("Europe/Skopje", tz);
+ 	timezones0.put("Europe/Stockholm", tz);
+ 	timezones0.put("Europe/Tirane", tz);
+ 	timezones0.put("Europe/Vaduz", tz);
+ 	timezones0.put("Europe/Vatican", tz);
+ 	timezones0.put("Europe/Vienna", tz);
+ 	timezones0.put("Europe/Warsaw", tz);
+ 	timezones0.put("Europe/Zagreb", tz);
+ 	timezones0.put("Europe/Zurich", tz);
+ 	tz = new SimpleTimeZone
+ 	  (2000 * 3600, "ART",
+ 	   Calendar.APRIL, -1, Calendar.FRIDAY, 1000 * 3600,
+ 	   Calendar.SEPTEMBER, -1, Calendar.THURSDAY, 24000 * 3600);
+ 	timezones0.put("ART", tz);
+ 	timezones0.put("Africa/Cairo", tz);
+ 	tz = new SimpleTimeZone(2000 * 3600, "CAT");
+ 	timezones0.put("CAT", tz);
+ 	timezones0.put("Africa/Blantyre", tz);
+ 	timezones0.put("Africa/Bujumbura", tz);
+ 	timezones0.put("Africa/Gaborone", tz);
+ 	timezones0.put("Africa/Harare", tz);
+ 	timezones0.put("Africa/Johannesburg", tz);
+ 	timezones0.put("Africa/Kigali", tz);
+ 	timezones0.put("Africa/Lubumbashi", tz);
+ 	timezones0.put("Africa/Lusaka", tz);
+ 	timezones0.put("Africa/Maputo", tz);
+ 	timezones0.put("Africa/Maseru", tz);
+ 	timezones0.put("Africa/Mbabane", tz);
+ 	timezones0.put("Africa/Tripoli", tz);
+ 	timezones0.put("Asia/Jerusalem", tz);
+ 	tz = new SimpleTimeZone
+ 	  (2000 * 3600, "Asia/Amman",
+ 	   Calendar.MARCH, -1, Calendar.THURSDAY, 1000 * 3600,
+ 	   Calendar.SEPTEMBER, -1, Calendar.THURSDAY, 1000 * 3600);
+ 	timezones0.put("Asia/Amman", tz);
+ 	tz = new SimpleTimeZone
+ 	  (2000 * 3600, "Asia/Beirut",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600);
+ 	timezones0.put("Asia/Beirut", tz);
+ 	tz = new SimpleTimeZone
+ 	  (2000 * 3600, "Asia/Damascus",
+ 	   Calendar.APRIL, 1, 0, 0 * 3600,
+ 	   Calendar.OCTOBER, 1, 0, 0 * 3600);
+ 	timezones0.put("Asia/Damascus", tz);
+ 	tz = new SimpleTimeZone
+ 	  (2000 * 3600, "Asia/Gaza",
+ 	   Calendar.APRIL, 3, Calendar.FRIDAY, 0 * 3600,
+ 	   Calendar.OCTOBER, 3, Calendar.FRIDAY, 0 * 3600);
+ 	timezones0.put("Asia/Gaza", tz);
+ 	tz = new SimpleTimeZone
+ 	  (2000 * 3600, "EET",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 4000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 4000 * 3600);
+ 	timezones0.put("EET", tz);
+ 	timezones0.put("Asia/Istanbul", tz);
+ 	timezones0.put("Asia/Nicosia", tz);
+ 	timezones0.put("Europe/Athens", tz);
+ 	timezones0.put("Europe/Bucharest", tz);
+ 	timezones0.put("Europe/Chisinau", tz);
+ 	timezones0.put("Europe/Helsinki", tz);
+ 	timezones0.put("Europe/Istanbul", tz);
+ 	timezones0.put("Europe/Kiev", tz);
+ 	timezones0.put("Europe/Mariehamn", tz);
+ 	timezones0.put("Europe/Nicosia", tz);
+ 	timezones0.put("Europe/Riga", tz);
+ 	timezones0.put("Europe/Simferopol", tz);
+ 	timezones0.put("Europe/Sofia", tz);
+ 	timezones0.put("Europe/Tallinn", tz);
+ 	timezones0.put("Europe/Uzhgorod", tz);
+ 	timezones0.put("Europe/Vilnius", tz);
+ 	timezones0.put("Europe/Zaporozhye", tz);
+ 	tz = new SimpleTimeZone
+ 	  (2000 * 3600, "Europe/Kaliningrad",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Europe/Kaliningrad", tz);
+ 	timezones0.put("Europe/Minsk", tz);
+ 	tz = new SimpleTimeZone
+ 	  (3000 * 3600, "Asia/Baghdad",
+ 	   Calendar.APRIL, 1, 0, 4000 * 3600,
+ 	   Calendar.OCTOBER, 1, 0, 4000 * 3600);
+ 	timezones0.put("Asia/Baghdad", tz);
+ 	tz = new SimpleTimeZone
+ 	  (3000 * 3600, "Asia/Tbilisi",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Tbilisi", tz);
+ 	timezones0.put("Europe/Moscow", tz);
+ 	tz = new SimpleTimeZone(3000 * 3600, "EAT");
+ 	timezones0.put("EAT", tz);
+ 	timezones0.put("Africa/Addis_Ababa", tz);
+ 	timezones0.put("Africa/Asmera", tz);
+ 	timezones0.put("Africa/Dar_es_Salaam", tz);
+ 	timezones0.put("Africa/Djibouti", tz);
+ 	timezones0.put("Africa/Kampala", tz);
+ 	timezones0.put("Africa/Khartoum", tz);
+ 	timezones0.put("Africa/Mogadishu", tz);
+ 	timezones0.put("Africa/Nairobi", tz);
+ 	timezones0.put("Antarctica/Syowa", tz);
+ 	timezones0.put("Asia/Aden", tz);
+ 	timezones0.put("Asia/Bahrain", tz);
+ 	timezones0.put("Asia/Kuwait", tz);
+ 	timezones0.put("Asia/Qatar", tz);
+ 	timezones0.put("Asia/Riyadh", tz);
+ 	timezones0.put("Indian/Antananarivo", tz);
+ 	timezones0.put("Indian/Comoro", tz);
+ 	timezones0.put("Indian/Mayotte", tz);
+ 	tz = new SimpleTimeZone(3500 * 3600, "Asia/Tehran");
+ 	timezones0.put("Asia/Tehran", tz);
+ 	tz = new SimpleTimeZone
+ 	  (4000 * 3600, "Asia/Baku",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 1000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 1000 * 3600);
+ 	timezones0.put("Asia/Baku", tz);
+ 	tz = new SimpleTimeZone
+ 	  (4000 * 3600, "Asia/Yerevan",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Yerevan", tz);
+ 	timezones0.put("Europe/Samara", tz);
+ 	tz = new SimpleTimeZone(4000 * 3600, "NET");
+ 	timezones0.put("NET", tz);
+ 	timezones0.put("Asia/Aqtau", tz);
+ 	timezones0.put("Asia/Dubai", tz);
+ 	timezones0.put("Asia/Muscat", tz);
+ 	timezones0.put("Asia/Oral", tz);
+ 	timezones0.put("Indian/Mahe", tz);
+ 	timezones0.put("Indian/Mauritius", tz);
+ 	timezones0.put("Indian/Reunion", tz);
+ 	tz = new SimpleTimeZone(4500 * 3600, "Asia/Kabul");
+ 	timezones0.put("Asia/Kabul", tz);
+ 	tz = new SimpleTimeZone
+ 	  (5000 * 3600, "Asia/Bishkek",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 2500 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2500 * 3600);
+ 	timezones0.put("Asia/Bishkek", tz);
+ 	tz = new SimpleTimeZone
+ 	  (5000 * 3600, "Asia/Yekaterinburg",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Yekaterinburg", tz);
+ 	tz = new SimpleTimeZone(5000 * 3600, "PLT");
+ 	timezones0.put("PLT", tz);
+ 	timezones0.put("Asia/Aqtobe", tz);
+ 	timezones0.put("Asia/Ashgabat", tz);
+ 	timezones0.put("Asia/Dushanbe", tz);
+ 	timezones0.put("Asia/Karachi", tz);
+ 	timezones0.put("Asia/Samarkand", tz);
+ 	timezones0.put("Asia/Tashkent", tz);
+ 	timezones0.put("Indian/Kerguelen", tz);
+ 	timezones0.put("Indian/Maldives", tz);
+ 	tz = new SimpleTimeZone(5500 * 3600, "IST");
+ 	timezones0.put("IST", tz);
+ 	timezones0.put("Asia/Calcutta", tz);
+ 	tz = new SimpleTimeZone(5750 * 3600, "Asia/Katmandu");
+ 	timezones0.put("Asia/Katmandu", tz);
+ 	tz = new SimpleTimeZone(6000 * 3600, "BST");
+ 	timezones0.put("BST", tz);
+ 	timezones0.put("Antarctica/Mawson", tz);
+ 	timezones0.put("Antarctica/Vostok", tz);
+ 	timezones0.put("Asia/Almaty", tz);
+ 	timezones0.put("Asia/Colombo", tz);
+ 	timezones0.put("Asia/Dhaka", tz);
+ 	timezones0.put("Asia/Qyzylorda", tz);
+ 	timezones0.put("Asia/Thimphu", tz);
+ 	timezones0.put("Indian/Chagos", tz);
+ 	tz = new SimpleTimeZone
+ 	  (6000 * 3600, "Asia/Novosibirsk",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Novosibirsk", tz);
+ 	timezones0.put("Asia/Omsk", tz);
+ 	tz = new SimpleTimeZone(6500 * 3600, "Asia/Rangoon");
+ 	timezones0.put("Asia/Rangoon", tz);
+ 	timezones0.put("Indian/Cocos", tz);
+ 	tz = new SimpleTimeZone(7000 * 3600, "VST");
+ 	timezones0.put("VST", tz);
+ 	timezones0.put("Antarctica/Davis", tz);
+ 	timezones0.put("Asia/Bangkok", tz);
+ 	timezones0.put("Asia/Jakarta", tz);
+ 	timezones0.put("Asia/Phnom_Penh", tz);
+ 	timezones0.put("Asia/Pontianak", tz);
+ 	timezones0.put("Asia/Saigon", tz);
+ 	timezones0.put("Asia/Vientiane", tz);
+ 	timezones0.put("Indian/Christmas", tz);
+ 	tz = new SimpleTimeZone
+ 	  (7000 * 3600, "Asia/Hovd",
+ 	   Calendar.MARCH, -1, Calendar.SATURDAY, 2000 * 3600,
+ 	   Calendar.SEPTEMBER, -1, Calendar.SATURDAY, 2000 * 3600);
+ 	timezones0.put("Asia/Hovd", tz);
+ 	tz = new SimpleTimeZone
+ 	  (7000 * 3600, "Asia/Krasnoyarsk",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Krasnoyarsk", tz);
+ 	tz = new SimpleTimeZone(8000 * 3600, "CTT");
+ 	timezones0.put("CTT", tz);
+ 	timezones0.put("Antarctica/Casey", tz);
+ 	timezones0.put("Asia/Brunei", tz);
+ 	timezones0.put("Asia/Chongqing", tz);
+ 	timezones0.put("Asia/Harbin", tz);
+ 	timezones0.put("Asia/Hong_Kong", tz);
+ 	timezones0.put("Asia/Kashgar", tz);
+ 	timezones0.put("Asia/Kuala_Lumpur", tz);
+ 	timezones0.put("Asia/Kuching", tz);
+ 	timezones0.put("Asia/Macau", tz);
+ 	timezones0.put("Asia/Makassar", tz);
+ 	timezones0.put("Asia/Manila", tz);
+ 	timezones0.put("Asia/Shanghai", tz);
+ 	timezones0.put("Asia/Singapore", tz);
+ 	timezones0.put("Asia/Taipei", tz);
+ 	timezones0.put("Asia/Urumqi", tz);
+ 	timezones0.put("Australia/Perth", tz);
+ 	tz = new SimpleTimeZone
+ 	  (8000 * 3600, "Asia/Irkutsk",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Irkutsk", tz);
+ 	tz = new SimpleTimeZone
+ 	  (8000 * 3600, "Asia/Ulaanbaatar",
+ 	   Calendar.MARCH, -1, Calendar.SATURDAY, 2000 * 3600,
+ 	   Calendar.SEPTEMBER, -1, Calendar.SATURDAY, 2000 * 3600);
+ 	timezones0.put("Asia/Ulaanbaatar", tz);
+ 	tz = new SimpleTimeZone
+ 	  (9000 * 3600, "Asia/Choibalsan",
+ 	   Calendar.MARCH, -1, Calendar.SATURDAY, 2000 * 3600,
+ 	   Calendar.SEPTEMBER, -1, Calendar.SATURDAY, 2000 * 3600);
+ 	timezones0.put("Asia/Choibalsan", tz);
+ 	tz = new SimpleTimeZone(9000 * 3600, "JST");
+ 	timezones0.put("JST", tz);
+ 	timezones0.put("Asia/Dili", tz);
+ 	timezones0.put("Asia/Jayapura", tz);
+ 	timezones0.put("Asia/Pyongyang", tz);
+ 	timezones0.put("Asia/Seoul", tz);
+ 	timezones0.put("Asia/Tokyo", tz);
+ 	timezones0.put("Pacific/Palau", tz);
+ 	tz = new SimpleTimeZone
+ 	  (9000 * 3600, "Asia/Yakutsk",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Yakutsk", tz);
+ 	tz = new SimpleTimeZone
+ 	  (9500 * 3600, "Australia/Adelaide",
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Australia/Adelaide", tz);
+ 	timezones0.put("Australia/Broken_Hill", tz);
+ 	tz = new SimpleTimeZone(9500 * 3600, "ACT");
+ 	timezones0.put("ACT", tz);
+ 	timezones0.put("Australia/Darwin", tz);
+ 	tz = new SimpleTimeZone(10000 * 3600, "Antarctica/DumontDUrville");
+ 	timezones0.put("Antarctica/DumontDUrville", tz);
+ 	timezones0.put("Australia/Brisbane", tz);
+ 	timezones0.put("Australia/Lindeman", tz);
+ 	timezones0.put("Pacific/Guam", tz);
+ 	timezones0.put("Pacific/Port_Moresby", tz);
+ 	timezones0.put("Pacific/Saipan", tz);
+ 	timezones0.put("Pacific/Truk", tz);
+ 	timezones0.put("Pacific/Yap", tz);
+ 	tz = new SimpleTimeZone
+ 	  (10000 * 3600, "Asia/Sakhalin",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Sakhalin", tz);
+ 	timezones0.put("Asia/Vladivostok", tz);
+ 	tz = new SimpleTimeZone
+ 	  (10000 * 3600, "Australia/Hobart",
+ 	   Calendar.OCTOBER, 1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Australia/Hobart", tz);
+ 	tz = new SimpleTimeZone
+ 	  (10000 * 3600, "AET",
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("AET", tz);
+ 	timezones0.put("Australia/Melbourne", tz);
+ 	timezones0.put("Australia/Sydney", tz);
+ 	tz = new SimpleTimeZone
+ 	  (10500 * 3600, "Australia/Lord_Howe",
+ 	  Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600,
+ 	  Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, 500 * 3600);
+ 	timezones0.put("Australia/Lord_Howe", tz);
+ 	tz = new SimpleTimeZone
+ 	  (11000 * 3600, "Asia/Magadan",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Magadan", tz);
+ 	tz = new SimpleTimeZone(11000 * 3600, "SST");
+ 	timezones0.put("SST", tz);
+ 	timezones0.put("Pacific/Efate", tz);
+ 	timezones0.put("Pacific/Guadalcanal", tz);
+ 	timezones0.put("Pacific/Kosrae", tz);
+ 	timezones0.put("Pacific/Noumea", tz);
+ 	timezones0.put("Pacific/Ponape", tz);
+ 	tz = new SimpleTimeZone(11500 * 3600, "Pacific/Norfolk");
+ 	timezones0.put("Pacific/Norfolk", tz);
+ 	tz = new SimpleTimeZone
+ 	  (12000 * 3600, "NST",
+ 	   Calendar.OCTOBER, 1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.MARCH, 3, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("NST", tz);
+ 	timezones0.put("Antarctica/McMurdo", tz);
+ 	timezones0.put("Antarctica/South_Pole", tz);
+ 	timezones0.put("Pacific/Auckland", tz);
+ 	tz = new SimpleTimeZone
+ 	  (12000 * 3600, "Asia/Anadyr",
+ 	   Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
+ 	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
+ 	timezones0.put("Asia/Anadyr", tz);
+ 	timezones0.put("Asia/Kamchatka", tz);
+ 	tz = new SimpleTimeZone(12000 * 3600, "Pacific/Fiji");
+ 	timezones0.put("Pacific/Fiji", tz);
+ 	timezones0.put("Pacific/Funafuti", tz);
+ 	timezones0.put("Pacific/Kwajalein", tz);
+ 	timezones0.put("Pacific/Majuro", tz);
+ 	timezones0.put("Pacific/Nauru", tz);
+ 	timezones0.put("Pacific/Tarawa", tz);
+ 	timezones0.put("Pacific/Wake", tz);
+ 	timezones0.put("Pacific/Wallis", tz);
+ 	tz = new SimpleTimeZone
+ 	  (12750 * 3600, "Pacific/Chatham",
+ 	   Calendar.OCTOBER, 1, Calendar.SUNDAY, 3750 * 3600,
+ 	   Calendar.MARCH, 3, Calendar.SUNDAY, 3750 * 3600);
+ 	timezones0.put("Pacific/Chatham", tz);
+ 	tz = new SimpleTimeZone(13000 * 3600, "Pacific/Enderbury");
+ 	timezones0.put("Pacific/Enderbury", tz);
+ 	timezones0.put("Pacific/Tongatapu", tz);
+ 	tz = new SimpleTimeZone(14000 * 3600, "Pacific/Kiritimati");
+ 	timezones0.put("Pacific/Kiritimati", tz);
+       }
+     return timezones0;
+   }
+ 
+   /**
+    * Maps a time zone name (with optional GMT offset and daylight time
+    * zone name) to one of the known time zones.  This method called
+    * with the result of <code>System.getProperty("user.timezone")</code>
+    * or <code>getDefaultTimeZoneId()</code>.  Note that giving one of
+    * the standard tz data names from ftp://elsie.nci.nih.gov/pub/ is
+    * preferred.  
+    * The time zone name can be given as follows:
+    * <code>(standard zone name)[(GMT offset)[(DST zone name)[DST offset]]]
+    * </code>
+    * <p>
+    * If only a (standard zone name) is given (no numbers in the
+    * String) then it gets mapped directly to the TimeZone with that
+    * name, if that fails null is returned.
+    * <p>
+    * Alternately, a POSIX-style TZ string can be given, defining the time zone:
+    * <code>std offset dst offset,date/time,date/time</code>
+    * See the glibc manual, or the man page for <code>tzset</code> for details
+    * of this format.
+    * <p>
+    * A GMT offset is the offset to add to the local time to get GMT.
+    * If a (GMT offset) is included (either in seconds or hours) then
+    * an attempt is made to find a TimeZone name matching both the name
+    * and the offset (that doesn't observe daylight time, if the
+    * timezone observes daylight time then you must include a daylight
+    * time zone name after the offset), if that fails then a TimeZone
+    * with the given GMT offset is returned (whether or not the
+    * TimeZone observes daylight time is ignored), if that also fails
+    * the GMT TimeZone is returned.
+    * <p>
+    * If the String ends with (GMT offset)(daylight time zone name)
+    * then an attempt is made to find a TimeZone with the given name and
+    * GMT offset that also observes (the daylight time zone name is not
+    * currently used in any other way), if that fails a TimeZone with
+    * the given GMT offset that observes daylight time is returned, if
+    * that also fails the GMT TimeZone is returned.
+    * <p>
+    * Examples: In Chicago, the time zone id could be "CST6CDT", but
+    * the preferred name would be "America/Chicago".  In Indianapolis
+    * (which does not have Daylight Savings Time) the string could be
+    * "EST5", but the preferred name would be "America/Indianapolis".
+    * The standard time zone name for The Netherlands is "Europe/Amsterdam",
+    * but can also be given as "CET-1CEST".
+    */
+   static TimeZone getDefaultTimeZone(String sysTimeZoneId)
+   {
+     String stdName = null;
+     String dstName;
+     int stdOffs;
+     int dstOffs;
+     try
+       {
+ 	int idLength = sysTimeZoneId.length();
+ 
+ 	int index = 0;
+ 	int prevIndex;
+ 	char c;
+ 
+ 	// get std
+ 	do
+ 	  c = sysTimeZoneId.charAt(index++);
+ 	while (c != '+' && c != '-' && c != ',' && c != ':'
+ 	       && ! Character.isDigit(c) && c != '\0' && index < idLength);
+ 
+ 	if (index >= idLength)
+ 	  return (TimeZone)timezones().get(sysTimeZoneId);
+ 
+ 	stdName = sysTimeZoneId.substring(0, --index);
+ 	prevIndex = index;
+ 
+ 	// get the std offset
+ 	do
+ 	  c = sysTimeZoneId.charAt(index++);
+ 	while ((c == '-' || c == '+' || c == ':' || Character.isDigit(c))
+ 	       && index < idLength);
+ 	if (index < idLength)
+ 	  index--;
+ 
+ 	{ // convert the dst string to a millis number
+ 	    String offset = sysTimeZoneId.substring(prevIndex, index);
+ 	    prevIndex = index;
+ 
+ 	    if (offset.charAt(0) == '+' || offset.charAt(0) == '-')
+ 	      stdOffs = parseTime(offset.substring(1));
+ 	    else
+ 	      stdOffs = parseTime(offset);
+ 
+ 	    if (offset.charAt(0) == '-')
+ 	      stdOffs = -stdOffs;
+ 
+ 	    // TZ timezone offsets are positive when WEST of the meridian.
+ 	    stdOffs = -stdOffs;
+ 	}
+ 
+ 	// Done yet? (Format: std offset)
+ 	if (index >= idLength)
+ 	  {
+ 	    // Do we have an existing timezone with that name and offset?
+ 	    TimeZone tz = (TimeZone) timezones().get(stdName);
+ 	    if (tz != null)
+ 	      if (tz.getRawOffset() == stdOffs)
+ 		return tz;
+ 
+ 	    // Custom then.
+ 	    return new SimpleTimeZone(stdOffs, stdName);
+ 	  }
+ 
+ 	// get dst
+ 	do
+ 	  c = sysTimeZoneId.charAt(index++);
+ 	while (c != '+' && c != '-' && c != ',' && c != ':'
+ 	       && ! Character.isDigit(c) && c != '\0' && index < idLength);
+ 
+ 	// Done yet? (Format: std offset dst)
+ 	if (index >= idLength)
+ 	  {
+ 	    // Do we have an existing timezone with that name and offset 
+ 	    // which has DST?
+ 	    TimeZone tz = (TimeZone) timezones().get(stdName);
+ 	    if (tz != null)
+ 	      if (tz.getRawOffset() == stdOffs && tz.useDaylightTime())
+ 		return tz;
+ 
+ 	    // Custom then.
+ 	    return new SimpleTimeZone(stdOffs, stdName);
+ 	  }
+ 
+ 	// get the dst offset
+ 	dstName = sysTimeZoneId.substring(prevIndex, --index);
+ 	prevIndex = index;
+ 	do
+ 	  c = sysTimeZoneId.charAt(index++);
+ 	while ((c == '-' || c == '+' || c == ':' || Character.isDigit(c))
+ 	       && index < idLength);
+ 	if (index < idLength)
+ 	  index--;
+ 
+ 	{ // convert the dst string to a millis number
+ 	    String offset = sysTimeZoneId.substring(prevIndex, index);
+ 	    prevIndex = index;
+ 
+ 	    if (offset.charAt(0) == '+' || offset.charAt(0) == '-')
+ 	      dstOffs = parseTime(offset.substring(1));
+ 	    else
+ 	      dstOffs = parseTime(offset);
+ 
+ 	    if (offset.charAt(0) == '-')
+ 	      dstOffs = -dstOffs;
+ 
+ 	    // TZ timezone offsets are positive when WEST of the meridian.
+ 	    dstOffs = -dstOffs;
+ 	}
+ 
+ 	// Done yet? (Format: std offset dst offset)
+ 	// FIXME: We don't support DST without a rule given. Should we?
+ 	if (index >= idLength)
+ 	  {
+ 	    // Time Zone existing with same name, dst and offsets?
+ 	    TimeZone tz = (TimeZone) timezones().get(stdName);
+ 	    if (tz != null)
+ 	      if (tz.getRawOffset() == stdOffs && tz.useDaylightTime()
+ 	          && tz.getDSTSavings() == (dstOffs - stdOffs))
+ 		return tz;
+ 
+ 	    return new SimpleTimeZone(stdOffs, stdName);
+ 	  }
+ 
+ 	// get the DST rule
+ 	if (sysTimeZoneId.charAt(index) == ','
+ 	    || sysTimeZoneId.charAt(index) == ';')
+ 	  {
+ 	    index++;
+ 	    int offs = index;
+ 	    while (sysTimeZoneId.charAt(index) != ','
+ 	           && sysTimeZoneId.charAt(index) != ';')
+ 	      index++;
+ 	    String startTime = sysTimeZoneId.substring(offs, index);
+ 	    index++;
+ 	    String endTime = sysTimeZoneId.substring(index);
+ 
+ 	    index = startTime.indexOf('/');
+ 	    int startMillis;
+ 	    int endMillis;
+ 	    String startDate;
+ 	    String endDate;
+ 	    if (index != -1)
+ 	      {
+ 		startDate = startTime.substring(0, index);
+ 		startMillis = parseTime(startTime.substring(index + 1));
+ 	      }
+ 	    else
+ 	      {
+ 		startDate = startTime;
+ 		// if time isn't given, default to 2:00:00 AM.
+ 		startMillis = 2 * 60 * 60 * 1000;
+ 	      }
+ 	    index = endTime.indexOf('/');
+ 	    if (index != -1)
+ 	      {
+ 		endDate = endTime.substring(0, index);
+ 		endMillis = parseTime(endTime.substring(index + 1));
+ 	      }
+ 	    else
+ 	      {
+ 		endDate = endTime;
+ 		// if time isn't given, default to 2:00:00 AM.
+ 		endMillis = 2 * 60 * 60 * 1000;
+ 	      }
+ 
+ 	    int[] start = getDateParams(startDate);
+ 	    int[] end = getDateParams(endDate);
+ 	    return new SimpleTimeZone(stdOffs, stdName, start[0], start[1],
+ 	                              start[2], startMillis, end[0], end[1],
+ 	                              end[2], endMillis, (dstOffs - stdOffs));
+ 	  }
+       }
+ 
+     // FIXME: Produce a warning here?
+     catch (IndexOutOfBoundsException _)
+       {
+       }
+     catch (NumberFormatException _)
+       {
+       }
+ 
+     return null;
+   }
+ 
+   /**
+    * Parses and returns the params for a POSIX TZ date field,
+    * in the format int[]{ month, day, dayOfWeek }, following the
+    * SimpleTimeZone constructor rules.
+    */
+   private static int[] getDateParams(String date)
+   {
+     int[] dayCount = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
+     int month;
+ 
+     if (date.charAt(0) == 'M' || date.charAt(0) == 'm')
+       {
+ 	int day;
+ 
+ 	// Month, week of month, day of week
+ 	month = Integer.parseInt(date.substring(1, date.indexOf('.')));
+ 	int week = Integer.parseInt(date.substring(date.indexOf('.') + 1,
+ 	                                           date.lastIndexOf('.')));
+ 	int dayOfWeek = Integer.parseInt(date.substring(date.lastIndexOf('.')
+ 	                                                + 1));
+ 	if (week == 5)
+ 	  day = -1; // last day of month is -1 in java, 5 in TZ
+ 	else
+ 	  // first day of week starting on or after.
+ 	  day = (week - 1) * 7 + 1;
+ 
+ 	dayOfWeek++; // Java day of week is one-based, Sunday is first day.
+ 	month--; // Java month is zero-based.
+ 	return new int[] { month, day, dayOfWeek };
+       }
+ 
+     // julian day, either zero-based 0<=n<=365 (incl feb 29)
+     // or one-based 1<=n<=365 (no feb 29)
+     int julianDay; // Julian day, 
+ 
+     if (date.charAt(0) != 'J' || date.charAt(0) != 'j')
+       {
+ 	julianDay = Integer.parseInt(date.substring(1));
+ 	julianDay++; // make 1-based
+ 	// Adjust day count to include feb 29.
+ 	dayCount = new int[]
+ 	           {
+ 	             0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335
+ 	           };
+       }
+     else
+       // 1-based julian day
+       julianDay = Integer.parseInt(date);
+ 
+     int i = 11;
+     while (i > 0)
+       if (dayCount[i] < julianDay)
+ 	break;
+       else
+ 	i--;
+     julianDay -= dayCount[i];
+     month = i;
+     return new int[] { month, julianDay, 0 };
+   }
+ 
+   /**
+    * Parses a time field hh[:mm[:ss]], returning the result
+    * in milliseconds. No leading sign.
+    */
+   private static int parseTime(String time)
+   {
+     int millis = 0;
+     int i = 0;
+ 
+     while (i < time.length())
+       if (time.charAt(i) == ':')
+ 	break;
+       else
+ 	i++;
+     millis = 60 * 60 * 1000 * Integer.parseInt(time.substring(0, i));
+     if (i >= time.length())
+       return millis;
+ 
+     int iprev = ++i;
+     while (i < time.length())
+       if (time.charAt(i) == ':')
+ 	break;
+       else
+ 	i++;
+     if (i >= time.length())
+       return millis;
+ 
+     millis += 60 * 1000 * Integer.parseInt(time.substring(iprev, i));
+     millis += 1000 * Integer.parseInt(time.substring(++i));
+     return millis;
+   }
+ 
+   /**
+    * Gets the time zone offset, for current date, modified in case of 
+    * daylight savings.  This is the offset to add to UTC to get the local
+    * time.
+    * @param era the era of the given date
+    * @param year the year of the given date
+    * @param month the month of the given date, 0 for January.
+    * @param day the day of month
+    * @param dayOfWeek the day of week
+    * @param milliseconds the millis in the day (in local standard time)
+    * @return the time zone offset in milliseconds.
+    */
+   public abstract int getOffset(int era, int year, int month,
+ 				int day, int dayOfWeek, int milliseconds);
+ 
+   /**
+    * Get the time zone offset for the specified date, modified in case of
+    * daylight savings.  This is the offset to add to UTC to get the local
+    * time.
+    * @param date the date represented in millisecends
+    * since January 1, 1970 00:00:00 GMT.
+    * @since 1.4
+    */
+   public int getOffset(long date)
+   {
+     return (inDaylightTime(new Date(date))
+             ? getRawOffset() + getDSTSavings()
+             : getRawOffset());
+   }
+   
+   /**
+    * Gets the time zone offset, ignoring daylight savings.  This is
+    * the offset to add to UTC to get the local time.
+    * @return the time zone offset in milliseconds.  
+    */
+   public abstract int getRawOffset();
+ 
+   /**
+    * Sets the time zone offset, ignoring daylight savings.  This is
+    * the offset to add to UTC to get the local time.
+    * @param offsetMillis the time zone offset to GMT.
+    */
+   public abstract void setRawOffset(int offsetMillis);
+ 
+   /**
+    * Gets the identifier of this time zone. For instance, PST for
+    * Pacific Standard Time.
+    * @returns the ID of this time zone.  
+    */
+   public String getID()
+   {
+     return ID;
+   }
+ 
+   /**
+    * Sets the identifier of this time zone. For instance, PST for
+    * Pacific Standard Time.
+    * @param id the new time zone ID.
+    * @throws NullPointerException if <code>id</code> is <code>null</code>
+    */
+   public void setID(String id)
+   {
+     if (id == null)
+       throw new NullPointerException();
+     
+     this.ID = id;
+   }
+ 
+   /**
+    * This method returns a string name of the time zone suitable
+    * for displaying to the user.  The string returned will be the long
+    * description of the timezone in the current locale.  The name
+    * displayed will assume daylight savings time is not in effect.
+    *
+    * @return The name of the time zone.
+    */
+   public final String getDisplayName()
+   {
+     return (getDisplayName(false, LONG, Locale.getDefault()));
+   }
+ 
+   /**
+    * This method returns a string name of the time zone suitable
+    * for displaying to the user.  The string returned will be the long
+    * description of the timezone in the specified locale. The name
+    * displayed will assume daylight savings time is not in effect.
+    *
+    * @param locale The locale for this timezone name.
+    *
+    * @return The name of the time zone.
+    */
+   public final String getDisplayName(Locale locale)
+   {
+     return (getDisplayName(false, LONG, locale));
+   }
+ 
+   /**
+    * This method returns a string name of the time zone suitable
+    * for displaying to the user.  The string returned will be of the
+    * specified type in the current locale. 
+    *
+    * @param dst Whether or not daylight savings time is in effect.
+    * @param style <code>LONG</code> for a long name, <code>SHORT</code> for
+    * a short abbreviation.
+    *
+    * @return The name of the time zone.
+    */
+   public final String getDisplayName(boolean dst, int style)
+   {
+     return (getDisplayName(dst, style, Locale.getDefault()));
+   }
+ 
+ 
+   /**
+    * This method returns a string name of the time zone suitable
+    * for displaying to the user.  The string returned will be of the
+    * specified type in the specified locale. 
+    *
+    * @param dst Whether or not daylight savings time is in effect.
+    * @param style <code>LONG</code> for a long name, <code>SHORT</code> for
+    * a short abbreviation.
+    * @param locale The locale for this timezone name.
+    *
+    * @return The name of the time zone.
+    */
+   public String getDisplayName(boolean dst, int style, Locale locale)
+   {
+     DateFormatSymbols dfs;
+     try
+       {
+ 	dfs = new DateFormatSymbols(locale);
+ 
+ 	// The format of the value returned is defined by us.
+ 	String[][]zoneinfo = dfs.getZoneStrings();
+ 	for (int i = 0; i < zoneinfo.length; i++)
+ 	  {
+ 	    if (zoneinfo[i][0].equals(getID()))
+ 	      {
+ 		if (!dst)
+ 		  {
+ 		    if (style == SHORT)
+ 		      return (zoneinfo[i][2]);
+ 		    else
+ 		      return (zoneinfo[i][1]);
+ 		  }
+ 		else
+ 		  {
+ 		    if (style == SHORT)
+ 		      return (zoneinfo[i][4]);
+ 		    else
+ 		      return (zoneinfo[i][3]);
+ 		  }
+ 	      }
+ 	  }
+       }
+     catch (MissingResourceException e)
+       {
+       }
+ 
+     return getDefaultDisplayName(dst);
+   }
+ 
+   private String getDefaultDisplayName(boolean dst)
+   {
+     int offset = getRawOffset();
+     if (dst && this instanceof SimpleTimeZone)
+       {
+ 	// ugly, but this is a design failure of the API:
+ 	// getDisplayName takes a dst parameter even though
+ 	// TimeZone knows nothing about daylight saving offsets.
+ 	offset += ((SimpleTimeZone) this).getDSTSavings();
+       }
+ 
+     StringBuffer sb = new StringBuffer(9);
+     sb.append("GMT");
+ 
+     offset = offset / (1000 * 60);
+     int hours = Math.abs(offset) / 60;
+     int minutes = Math.abs(offset) % 60;
+ 
+     if (minutes != 0 || hours != 0)
+       {
+ 	sb.append(offset >= 0 ? '+' : '-');
+ 	sb.append((char) ('0' + hours / 10));
+ 	sb.append((char) ('0' + hours % 10));
+ 	sb.append(':');
+ 	sb.append((char) ('0' + minutes / 10));
+ 	sb.append((char) ('0' + minutes % 10));
+       }
+ 
+     return sb.toString();
+   }
+ 
+   /** 
+    * Returns true, if this time zone uses Daylight Savings Time.
+    */
+   public abstract boolean useDaylightTime();
+ 
+   /**
+    * Returns true, if the given date is in Daylight Savings Time in this
+    * time zone.
+    * @param date the given Date.
+    */
+   public abstract boolean inDaylightTime(Date date);
+ 
+   /**
+    * Gets the daylight savings offset.  This is a positive offset in
+    * milliseconds with respect to standard time.  Typically this
+    * is one hour, but for some time zones this may be half an our.
+    * <p>The default implementation returns 3600000 milliseconds
+    * (one hour) if the time zone uses daylight savings time
+    * (as specified by {@link #useDaylightTime()}), otherwise
+    * it returns 0.
+    * @return the daylight savings offset in milliseconds.
+    * @since 1.4
+    */
+   public int getDSTSavings ()
+   {
+     return useDaylightTime () ? 3600000 : 0;
+   }
+ 
+   /**
+    * Gets the TimeZone for the given ID.
+    * @param ID the time zone identifier.
+    * @return The time zone for the identifier or GMT, if no such time
+    * zone exists.
+    */
+   // FIXME: XXX: JCL indicates this and other methods are synchronized.
+   public static TimeZone getTimeZone(String ID)
+   {
+     // First check timezones hash
+     TimeZone tz = (TimeZone) timezones().get(ID);
+     if (tz != null)
+       {
+ 	if (tz.getID().equals(ID))
+ 	  return tz;
+ 
+ 	// We always return a timezone with the requested ID.
+ 	// This is the same behaviour as with JDK1.2.
+ 	tz = (TimeZone) tz.clone();
+ 	tz.setID(ID);
+ 	// We also save the alias, so that we return the same
+ 	// object again if getTimeZone is called with the same
+ 	// alias.
+ 	timezones().put(ID, tz);
+ 	return tz;
+       }
+ 
+     // See if the ID is really a GMT offset form.
+     // Note that GMT is in the table so we know it is different.
+     if (ID.startsWith("GMT"))
+       {
+ 	int pos = 3;
+ 	int offset_direction = 1;
+ 
+ 	if (ID.charAt(pos) == '-')
+ 	  {
+ 	    offset_direction = -1;
+ 	    pos++;
+ 	  }
+ 	else if (ID.charAt(pos) == '+')
+ 	  {
+ 	    pos++;
+ 	  }
+ 
+ 	try
+ 	  {
+ 	    int hour, minute;
+ 
+ 	    String offset_str = ID.substring(pos);
+ 	    int idx = offset_str.indexOf(":");
+ 	    if (idx != -1)
+ 	      {
+ 		hour = Integer.parseInt(offset_str.substring(0, idx));
+ 		minute = Integer.parseInt(offset_str.substring(idx + 1));
+ 	      }
+ 	    else
+ 	      {
+ 		int offset_length = offset_str.length();
+ 		if (offset_length <= 2)
+ 		  {
+ 		    // Only hour
+ 		    hour = Integer.parseInt(offset_str);
+ 		    minute = 0;
+ 		  }
+ 		else
+ 		  {
+ 		    // hour and minute, not separated by colon
+ 		    hour = Integer.parseInt
+ 		      (offset_str.substring(0, offset_length - 2));
+ 		    minute = Integer.parseInt
+ 		      (offset_str.substring(offset_length - 2));
+ 		  }
+ 	      }
+ 
+ 	    return new SimpleTimeZone((hour * (60 * 60 * 1000) +
+ 				       minute * (60 * 1000))
+ 				      * offset_direction, ID);
+ 	  }
+ 	catch (NumberFormatException e)
+ 	  {
+ 	  }
+       }
+ 
+     // Finally, return GMT per spec
+     return getTimeZone("GMT");
+   }
+ 
+   /**
+    * Gets the available IDs according to the given time zone
+    * offset.  
+    * @param rawOffset the given time zone GMT offset.
+    * @return An array of IDs, where the time zone has the specified GMT
+    * offset. For example <code>{"Phoenix", "Denver"}</code>, since both have
+    * GMT-07:00, but differ in daylight savings behaviour.
+    */
+   public static String[] getAvailableIDs(int rawOffset)
+   {
+     int count = 0;
+     Iterator iter = timezones().entrySet().iterator();
+     while (iter.hasNext())
+       {
+ 	// Don't iterate the values, since we want to count 
+ 	// doubled values (aliases)
+ 	Map.Entry entry = (Map.Entry) iter.next();
+ 	if (((TimeZone) entry.getValue()).getRawOffset() == rawOffset)
+ 	  count++;
+       }
+ 
+     String[] ids = new String[count];
+     count = 0;
+     iter = timezones().entrySet().iterator();
+     while (iter.hasNext())
+       {
+ 	Map.Entry entry = (Map.Entry) iter.next();
+ 	if (((TimeZone) entry.getValue()).getRawOffset() == rawOffset)
+ 	  ids[count++] = (String) entry.getKey();
+       }
+     return ids;
+   }
+ 
+   /**
+    * Gets all available IDs.
+    * @return An array of all supported IDs.
+    */
+   public static String[] getAvailableIDs()
+   {
+     return (String[])
+       timezones().keySet().toArray(new String[timezones().size()]);
+   }
+ 
+   /**
+    * Returns the time zone under which the host is running.  This
+    * can be changed with setDefault.
+    *
+    * @return A clone of the current default time zone for this host.
+    * @see #setDefault
+    */
+   public static TimeZone getDefault()
+   {
+     return (TimeZone) defaultZone().clone();
+   }
+ 
+   public static void setDefault(TimeZone zone)
+   {
+     // Hmmmm. No Security checks?
+     defaultZone0 = zone;
+   }
+ 
+   /**
+    * Test if the other time zone uses the same rule and only
+    * possibly differs in ID.  This implementation for this particular
+    * class will return true if the raw offsets are identical.  Subclasses
+    * should override this method if they use daylight savings.
+    * @return true if this zone has the same raw offset
+    */
+   public boolean hasSameRules(TimeZone other)
+   {
+     return other.getRawOffset() == getRawOffset();
+   }
+ 
+   /**
+    * Returns a clone of this object.  I can't imagine, why this is
+    * useful for a time zone.
+    */
+   public Object clone()
+   {
+     try
+       {
+ 	return super.clone();
+       }
+     catch (CloneNotSupportedException ex)
+       {
+ 	return null;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Timer.java gcc-4.1.0/libjava/classpath/java/util/Timer.java
*** gcc-4.0.2/libjava/classpath/java/util/Timer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Timer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,704 ----
+ /* Timer.java -- Timer that runs TimerTasks at a later time.
+    Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util;
+ 
+ /**
+  * Timer that can run TimerTasks at a later time.
+  * TimerTasks can be scheduled for one time execution at some time in the
+  * future. They can be scheduled to be rescheduled at a time period after the
+  * task was last executed. Or they can be scheduled to be executed repeatedly
+  * at a fixed rate.
+  * <p>
+  * The normal scheduling will result in a more or less even delay in time
+  * between successive executions, but the executions could drift in time if
+  * the task (or other tasks) takes a long time to execute. Fixed delay
+  * scheduling guarantees more or less that the task will be executed at a
+  * specific time, but if there is ever a delay in execution then the period
+  * between successive executions will be shorter. The first method of
+  * repeated scheduling is preferred for repeated tasks in response to user
+  * interaction, the second method of repeated scheduling is preferred for tasks
+  * that act like alarms.
+  * <p>
+  * The Timer keeps a binary heap as a task priority queue which means that
+  * scheduling and serving of a task in a queue of n tasks costs O(log n).
+  *
+  * @see TimerTask
+  * @since 1.3
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class Timer
+ {
+   /**
+    * Priority Task Queue.
+    * TimerTasks are kept in a binary heap.
+    * The scheduler calls sleep() on the queue when it has nothing to do or
+    * has to wait. A sleeping scheduler can be notified by calling interrupt()
+    * which is automatically called by the enqueue(), cancel() and
+    * timerFinalized() methods.
+    */
+   private static final class TaskQueue
+   {
+     /** Default size of this queue */
+     private static final int DEFAULT_SIZE = 32;
+ 
+     /** Whether to return null when there is nothing in the queue */
+     private boolean nullOnEmpty;
+ 
+     /**
+      * The heap containing all the scheduled TimerTasks
+      * sorted by the TimerTask.scheduled field.
+      * Null when the stop() method has been called.
+      */
+     private TimerTask heap[];
+ 
+     /**
+      * The actual number of elements in the heap
+      * Can be less then heap.length.
+      * Note that heap[0] is used as a sentinel.
+      */
+     private int elements;
+ 
+     /**
+      * Creates a TaskQueue of default size without any elements in it.
+      */
+     public TaskQueue()
+     {
+       heap = new TimerTask[DEFAULT_SIZE];
+       elements = 0;
+       nullOnEmpty = false;
+     }
+ 
+     /**
+      * Adds a TimerTask at the end of the heap.
+      * Grows the heap if necessary by doubling the heap in size.
+      */
+     private void add(TimerTask task)
+     {
+       elements++;
+       if (elements == heap.length)
+ 	{
+ 	  TimerTask new_heap[] = new TimerTask[heap.length * 2];
+ 	  System.arraycopy(heap, 0, new_heap, 0, heap.length);
+ 	  heap = new_heap;
+ 	}
+       heap[elements] = task;
+     }
+ 
+     /**
+      * Removes the last element from the heap.
+      * Shrinks the heap in half if
+      * elements+DEFAULT_SIZE/2 <= heap.length/4.
+      */
+     private void remove()
+     {
+       // clear the entry first
+       heap[elements] = null;
+       elements--;
+       if (elements + DEFAULT_SIZE / 2 <= (heap.length / 4))
+ 	{
+ 	  TimerTask new_heap[] = new TimerTask[heap.length / 2];
+ 	  System.arraycopy(heap, 0, new_heap, 0, elements + 1);
+ 	  heap = new_heap;
+ 	}
+     }
+ 
+     /**
+      * Adds a task to the queue and puts it at the correct place
+      * in the heap.
+      */
+     public synchronized void enqueue(TimerTask task)
+     {
+       // Check if it is legal to add another element
+       if (heap == null)
+ 	{
+ 	  throw new IllegalStateException
+ 	    ("cannot enqueue when stop() has been called on queue");
+ 	}
+ 
+       heap[0] = task;		// sentinel
+       add(task);		// put the new task at the end
+       // Now push the task up in the heap until it has reached its place
+       int child = elements;
+       int parent = child / 2;
+       while (heap[parent].scheduled > task.scheduled)
+ 	{
+ 	  heap[child] = heap[parent];
+ 	  child = parent;
+ 	  parent = child / 2;
+ 	}
+       // This is the correct place for the new task
+       heap[child] = task;
+       heap[0] = null;		// clear sentinel
+       // Maybe sched() is waiting for a new element
+       this.notify();
+     }
+ 
+     /**
+      * Returns the top element of the queue.
+      * Can return null when no task is in the queue.
+      */
+     private TimerTask top()
+     {
+       if (elements == 0)
+ 	{
+ 	  return null;
+ 	}
+       else
+ 	{
+ 	  return heap[1];
+ 	}
+     }
+ 
+     /**
+      * Returns the top task in the Queue.
+      * Removes the element from the heap and reorders the heap first.
+      * Can return null when there is nothing in the queue.
+      */
+     public synchronized TimerTask serve()
+     {
+       // The task to return
+       TimerTask task = null;
+ 
+       while (task == null)
+ 	{
+ 	  // Get the next task
+ 	  task = top();
+ 
+ 	  // return null when asked to stop
+ 	  // or if asked to return null when the queue is empty
+ 	  if ((heap == null) || (task == null && nullOnEmpty))
+ 	    {
+ 	      return null;
+ 	    }
+ 
+ 	  // Do we have a task?
+ 	  if (task != null)
+ 	    {
+ 	      // The time to wait until the task should be served
+ 	      long time = task.scheduled - System.currentTimeMillis();
+ 	      if (time > 0)
+ 		{
+ 		  // This task should not yet be served
+ 		  // So wait until this task is ready
+ 		  // or something else happens to the queue
+ 		  task = null;	// set to null to make sure we call top()
+ 		  try
+ 		    {
+ 		      this.wait(time);
+ 		    }
+ 		  catch (InterruptedException _)
+ 		    {
+ 		    }
+ 		}
+ 	    }
+ 	  else
+ 	    {
+ 	      // wait until a task is added
+ 	      // or something else happens to the queue
+ 	      try
+ 		{
+ 		  this.wait();
+ 		}
+ 	      catch (InterruptedException _)
+ 		{
+ 		}
+ 	    }
+ 	}
+ 
+       // reconstruct the heap
+       TimerTask lastTask = heap[elements];
+       remove();
+ 
+       // drop lastTask at the beginning and move it down the heap
+       int parent = 1;
+       int child = 2;
+       heap[1] = lastTask;
+       while (child <= elements)
+ 	{
+ 	  if (child < elements)
+ 	    {
+ 	      if (heap[child].scheduled > heap[child + 1].scheduled)
+ 		{
+ 		  child++;
+ 		}
+ 	    }
+ 
+ 	  if (lastTask.scheduled <= heap[child].scheduled)
+ 	    break;		// found the correct place (the parent) - done
+ 
+ 	  heap[parent] = heap[child];
+ 	  parent = child;
+ 	  child = parent * 2;
+ 	}
+ 
+       // this is the correct new place for the lastTask
+       heap[parent] = lastTask;
+ 
+       // return the task
+       return task;
+     }
+ 
+     /**
+      * When nullOnEmpty is true the serve() method will return null when
+      * there are no tasks in the queue, otherwise it will wait until
+      * a new element is added to the queue. It is used to indicate to
+      * the scheduler that no new tasks will ever be added to the queue.
+      */
+     public synchronized void setNullOnEmpty(boolean nullOnEmpty)
+     {
+       this.nullOnEmpty = nullOnEmpty;
+       this.notify();
+     }
+ 
+     /**
+      * When this method is called the current and all future calls to
+      * serve() will return null. It is used to indicate to the Scheduler
+      * that it should stop executing since no more tasks will come.
+      */
+     public synchronized void stop()
+     {
+       this.heap = null;
+       this.elements = 0;
+       this.notify();
+     }
+ 
+     /**
+      * Remove all canceled tasks from the queue.
+      */
+     public synchronized int purge()
+     {
+       int removed = 0;
+       // Null out any elements that are canceled.  Skip element 0 as
+       // it is the sentinel.
+       for (int i = elements; i > 0; --i)
+         {
+           if (heap[i].scheduled < 0)
+             {
+               ++removed;
+               
+               // Remove an element by pushing the appropriate child
+               // into place, and then iterating to the bottom of the
+               // tree.
+               int index = i;
+               while (heap[index] != null)
+                 {
+                   int child = 2 * index;
+                   if (child >= heap.length)
+                     {
+                       // Off end; we're done.
+                       heap[index] = null;
+                       break;
+                     }
+                   
+                   if (child + 1 >= heap.length || heap[child + 1] == null)
+                     {
+                       // Nothing -- we're done.
+                     }
+                   else if (heap[child] == null
+                       || (heap[child].scheduled
+                           > heap[child + 1].scheduled))
+                     ++child;
+                   heap[index] = heap[child];
+                   index = child;
+                 }
+             }
+         }
+       
+       // Make a new heap if we shrank enough.
+       int newLen = heap.length;
+       while (elements - removed + DEFAULT_SIZE / 2 <= newLen / 4)
+         newLen /= 2;
+       if (newLen != heap.length)
+         {
+           TimerTask[] newHeap = new TimerTask[newLen];
+           System.arraycopy(heap, 0, newHeap, 0, elements + 1);
+           heap = newHeap;
+         }
+       
+       return removed;
+     }
+   }				// TaskQueue
+ 
+   /**
+    * The scheduler that executes all the tasks on a particular TaskQueue,
+    * reschedules any repeating tasks and that waits when no task has to be
+    * executed immediately. Stops running when canceled or when the parent
+    * Timer has been finalized and no more tasks have to be executed.
+    */
+   private static final class Scheduler implements Runnable
+   {
+     // The priority queue containing all the TimerTasks.
+     private TaskQueue queue;
+ 
+     /**
+      * Creates a new Scheduler that will schedule the tasks on the
+      * given TaskQueue.
+      */
+     public Scheduler(TaskQueue queue)
+     {
+       this.queue = queue;
+     }
+ 
+     public void run()
+     {
+       TimerTask task;
+       while ((task = queue.serve()) != null)
+ 	{
+ 	  // If this task has not been canceled
+ 	  if (task.scheduled >= 0)
+ 	    {
+ 
+ 	      // Mark execution time
+ 	      task.lastExecutionTime = task.scheduled;
+ 
+ 	      // Repeatable task?
+ 	      if (task.period < 0)
+ 		{
+ 		  // Last time this task is executed
+ 		  task.scheduled = -1;
+ 		}
+ 
+ 	      // Run the task
+ 	      try
+ 		{
+ 		  task.run();
+ 		}
+               catch (ThreadDeath death)
+                 {
+                   // If an exception escapes, the Timer becomes invalid.
+                   queue.stop();
+                   throw death;
+                 }
+ 	      catch (Throwable t)
+ 		{
+ 		  // If an exception escapes, the Timer becomes invalid.
+                   queue.stop();
+ 		}
+ 	    }
+ 
+ 	  // Calculate next time and possibly re-enqueue.
+ 	  if (task.scheduled >= 0)
+ 	    {
+ 	      if (task.fixed)
+ 		{
+ 		  task.scheduled += task.period;
+ 		}
+ 	      else
+ 		{
+ 		  task.scheduled = task.period + System.currentTimeMillis();
+ 		}
+ 
+ 	      try
+ 	        {
+ 	          queue.enqueue(task);
+ 		}
+ 	      catch (IllegalStateException ise)
+ 	        {
+ 		  // Ignore. Apparently the Timer queue has been stopped.
+ 		}
+ 	    }
+ 	}
+     }
+   }				// Scheduler
+ 
+   // Number of Timers created.
+   // Used for creating nice Thread names.
+   private static int nr;
+ 
+   // The queue that all the tasks are put in.
+   // Given to the scheduler
+   private TaskQueue queue;
+ 
+   // The Scheduler that does all the real work
+   private Scheduler scheduler;
+ 
+   // Used to run the scheduler.
+   // Also used to checked if the Thread is still running by calling
+   // thread.isAlive(). Sometimes a Thread is suddenly killed by the system
+   // (if it belonged to an Applet).
+   private Thread thread;
+ 
+   // When cancelled we don't accept any more TimerTasks.
+   private boolean canceled;
+ 
+   /**
+    * Creates a new Timer with a non daemon Thread as Scheduler, with normal
+    * priority and a default name.
+    */
+   public Timer()
+   {
+     this(false);
+   }
+ 
+   /**
+    * Creates a new Timer with a daemon Thread as scheduler if daemon is true,
+    * with normal priority and a default name.
+    */
+   public Timer(boolean daemon)
+   {
+     this(daemon, Thread.NORM_PRIORITY);
+   }
+ 
+   /**
+    * Create a new Timer whose Thread has the indicated name.  It will have 
+    * normal priority and will not be a daemon thread. 
+    * @param name the name of the Thread
+    * @since 1.5
+    */
+   public Timer(String name)
+   {
+     this(false, Thread.NORM_PRIORITY, name);
+   }
+ 
+   /**
+    * Create a new Timer whose Thread has the indicated name.  It will have 
+    * normal priority.  The boolean argument controls whether or not it
+    * will be a daemon thread.
+    * @param name the name of the Thread
+    * @param daemon true if the Thread should be a daemon thread
+    * @since 1.5
+    */
+   public Timer(String name, boolean daemon)
+   {
+     this(daemon, Thread.NORM_PRIORITY, name);
+   }
+ 
+   /**
+    * Creates a new Timer with a daemon Thread as scheduler if daemon is true,
+    * with the priority given and a default name.
+    */
+   private Timer(boolean daemon, int priority)
+   {
+     this(daemon, priority, "Timer-" + (++nr));
+   }
+ 
+   /**
+    * Creates a new Timer with a daemon Thread as scheduler if daemon is true,
+    * with the priority and name given.E
+    */
+   private Timer(boolean daemon, int priority, String name)
+   {
+     canceled = false;
+     queue = new TaskQueue();
+     scheduler = new Scheduler(queue);
+     thread = new Thread(scheduler, name);
+     thread.setDaemon(daemon);
+     thread.setPriority(priority);
+     thread.start();
+   }
+ 
+   /**
+    * Cancels the execution of the scheduler. If a task is executing it will
+    * normally finish execution, but no other tasks will be executed and no
+    * more tasks can be scheduled.
+    */
+   public void cancel()
+   {
+     canceled = true;
+     queue.stop();
+   }
+ 
+   /**
+    * Schedules the task at Time time, repeating every period
+    * milliseconds if period is positive and at a fixed rate if fixed is true.
+    *
+    * @exception IllegalArgumentException if time is negative
+    * @exception IllegalStateException if the task was already scheduled or
+    * canceled or this Timer is canceled or the scheduler thread has died
+    */
+   private void schedule(TimerTask task, long time, long period, boolean fixed)
+   {
+     if (time < 0)
+       throw new IllegalArgumentException("negative time");
+ 
+     if (task.scheduled == 0 && task.lastExecutionTime == -1)
+       {
+ 	task.scheduled = time;
+ 	task.period = period;
+ 	task.fixed = fixed;
+       }
+     else
+       {
+ 	throw new IllegalStateException
+ 	  ("task was already scheduled or canceled");
+       }
+ 
+     if (!this.canceled && this.thread != null)
+       {
+ 	queue.enqueue(task);
+       }
+     else
+       {
+ 	throw new IllegalStateException
+ 	  ("timer was canceled or scheduler thread has died");
+       }
+   }
+ 
+   private static void positiveDelay(long delay)
+   {
+     if (delay < 0)
+       {
+ 	throw new IllegalArgumentException("delay is negative");
+       }
+   }
+ 
+   private static void positivePeriod(long period)
+   {
+     if (period < 0)
+       {
+ 	throw new IllegalArgumentException("period is negative");
+       }
+   }
+ 
+   /**
+    * Schedules the task at the specified data for one time execution.
+    *
+    * @exception IllegalArgumentException if date.getTime() is negative
+    * @exception IllegalStateException if the task was already scheduled or
+    * canceled or this Timer is canceled or the scheduler thread has died
+    */
+   public void schedule(TimerTask task, Date date)
+   {
+     long time = date.getTime();
+     schedule(task, time, -1, false);
+   }
+ 
+   /**
+    * Schedules the task at the specified date and reschedules the task every
+    * period milliseconds after the last execution of the task finishes until
+    * this timer or the task is canceled.
+    *
+    * @exception IllegalArgumentException if period or date.getTime() is
+    * negative
+    * @exception IllegalStateException if the task was already scheduled or
+    * canceled or this Timer is canceled or the scheduler thread has died
+    */
+   public void schedule(TimerTask task, Date date, long period)
+   {
+     positivePeriod(period);
+     long time = date.getTime();
+     schedule(task, time, period, false);
+   }
+ 
+   /**
+    * Schedules the task after the specified delay milliseconds for one time
+    * execution.
+    *
+    * @exception IllegalArgumentException if delay or
+    * System.currentTimeMillis + delay is negative
+    * @exception IllegalStateException if the task was already scheduled or
+    * canceled or this Timer is canceled or the scheduler thread has died
+    */
+   public void schedule(TimerTask task, long delay)
+   {
+     positiveDelay(delay);
+     long time = System.currentTimeMillis() + delay;
+     schedule(task, time, -1, false);
+   }
+ 
+   /**
+    * Schedules the task after the delay milliseconds and reschedules the
+    * task every period milliseconds after the last execution of the task
+    * finishes until this timer or the task is canceled.
+    *
+    * @exception IllegalArgumentException if delay or period is negative
+    * @exception IllegalStateException if the task was already scheduled or
+    * canceled or this Timer is canceled or the scheduler thread has died
+    */
+   public void schedule(TimerTask task, long delay, long period)
+   {
+     positiveDelay(delay);
+     positivePeriod(period);
+     long time = System.currentTimeMillis() + delay;
+     schedule(task, time, period, false);
+   }
+ 
+   /**
+    * Schedules the task at the specified date and reschedules the task at a
+    * fixed rate every period milliseconds until this timer or the task is
+    * canceled.
+    *
+    * @exception IllegalArgumentException if period or date.getTime() is
+    * negative
+    * @exception IllegalStateException if the task was already scheduled or
+    * canceled or this Timer is canceled or the scheduler thread has died
+    */
+   public void scheduleAtFixedRate(TimerTask task, Date date, long period)
+   {
+     positivePeriod(period);
+     long time = date.getTime();
+     schedule(task, time, period, true);
+   }
+ 
+   /**
+    * Schedules the task after the delay milliseconds and reschedules the task
+    * at a fixed rate every period milliseconds until this timer or the task
+    * is canceled.
+    *
+    * @exception IllegalArgumentException if delay or
+    * System.currentTimeMillis + delay is negative
+    * @exception IllegalStateException if the task was already scheduled or
+    * canceled or this Timer is canceled or the scheduler thread has died
+    */
+   public void scheduleAtFixedRate(TimerTask task, long delay, long period)
+   {
+     positiveDelay(delay);
+     positivePeriod(period);
+     long time = System.currentTimeMillis() + delay;
+     schedule(task, time, period, true);
+   }
+ 
+   /**
+    * Tells the scheduler that the Timer task died
+    * so there will be no more new tasks scheduled.
+    */
+   protected void finalize() throws Throwable
+   {
+     queue.setNullOnEmpty(true);
+   }
+   
+   /**
+    * Removes all cancelled tasks from the queue.
+    * @return the number of tasks removed
+    * @since 1.5
+    */
+   public int purge()
+   {
+     return queue.purge();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/TimerTask.java gcc-4.1.0/libjava/classpath/java/util/TimerTask.java
*** gcc-4.0.2/libjava/classpath/java/util/TimerTask.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/TimerTask.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,145 ----
+ /* TimerTask.java -- Task that can be run at a later time if given to a Timer.
+    Copyright (C) 2000 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util;
+ 
+ /**
+  * Task that can be run at a later time if given to a Timer.
+  * The TimerTask must implement a run method that will be called by the
+  * Timer when the task is scheduled for execution. The task can check when
+  * it should have been scheduled and cancel itself when no longer needed.
+  * <p>
+  * Example:
+  * <pre>
+  *  Timer timer = new Timer();
+  *  TimerTask task = new TimerTask() {
+  *      public void run() {
+  *      if (this.scheduledExecutionTime() &lt; System.currentTimeMillis() + 500)
+  *          // Do something
+  *      else
+  *          // Complain: We are more then half a second late!
+  *      if (someStopCondition)
+  *          this.cancel(); // This was our last execution
+  *  };
+  *  timer.scheduleAtFixedRate(task, 1000, 1000); // schedule every second
+  * </pre>
+  * <p>
+  * Note that a TimerTask object is a one shot object and can only given once
+  * to a Timer. (The Timer will use the TimerTask object for bookkeeping,
+  * in this implementation).
+  * <p>
+  * This class also implements <code>Runnable</code> to make it possible to
+  * give a TimerTask directly as a target to a <code>Thread</code>.
+  *
+  * @see Timer
+  * @since 1.3
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public abstract class TimerTask implements Runnable
+ {
+   /**
+    * If positive the next time this task should be run.
+    * If negative this TimerTask is canceled or executed for the last time.
+    */
+   long scheduled;
+ 
+   /**
+    * If positive the last time this task was run.
+    * If negative this TimerTask has not yet been scheduled.
+    */
+   long lastExecutionTime;
+ 
+   /**
+    * If positive the number of milliseconds between runs of this task.
+    * If -1 this task doesn't have to be run more then once.
+    */
+   long period;
+ 
+   /**
+    * If true the next time this task should be run is relative to
+    * the last scheduled time, otherwise it can drift in time.
+    */
+   boolean fixed;
+ 
+   /**
+    * Creates a TimerTask and marks it as not yet scheduled.
+    */
+   protected TimerTask()
+   {
+     this.scheduled = 0;
+     this.lastExecutionTime = -1;
+   }
+ 
+   /**
+    * Marks the task as canceled and prevents any further execution.
+    * Returns true if the task was scheduled for any execution in the future
+    * and this cancel operation prevents that execution from happening.
+    * <p>
+    * A task that has been canceled can never be scheduled again.
+    * <p>
+    * In this implementation the TimerTask it is possible that the Timer does
+    * keep a reference to the TimerTask until the first time the TimerTask
+    * is actually scheduled. But the reference will disappear immediatly when
+    * cancel is called from within the TimerTask run method.
+    */
+   public boolean cancel()
+   {
+     boolean prevented_execution = (this.scheduled >= 0);
+     this.scheduled = -1;
+     return prevented_execution;
+   }
+ 
+   /**
+    * Method that is called when this task is scheduled for execution.
+    */
+   public abstract void run();
+ 
+   /**
+    * Returns the last time this task was scheduled or (when called by the
+    * task from the run method) the time the current execution of the task
+    * was scheduled. When the task has not yet run the return value is
+    * undefined.
+    * <p>
+    * Can be used (when the task is scheduled at fixed rate) to see the
+    * difference between the requested schedule time and the actual time
+    * that can be found with <code>System.currentTimeMillis()</code>.
+    */
+   public long scheduledExecutionTime()
+   {
+     return lastExecutionTime;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/TooManyListenersException.java gcc-4.1.0/libjava/classpath/java/util/TooManyListenersException.java
*** gcc-4.0.2/libjava/classpath/java/util/TooManyListenersException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/TooManyListenersException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* TooManyListenersException.java -- thrown when a unicast event can't accept
+    another Listener
+    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ /**
+  * This exception is part of the java event model.  It is thrown if an
+  * event listener is added via the addXyzEventListener method, but the
+  * object doesn't support any more listeners, e.g. it only supports a
+  * single event listener.
+  *
+  * @author Jochen Hoenicke
+  * @author Warren Levy (warrenl@cygnus.com)
+  * @see EventListener
+  * @see EventObject
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class TooManyListenersException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 5074640544770687831L;
+ 
+   /**
+    * Constructs a TooManyListenersException with no detail message.
+    */
+   public TooManyListenersException()
+   {
+   }
+ 
+   /**
+    * Constructs a TooManyListenersException with a detail message.
+    *
+    * @param detail the detail message
+    */
+   public TooManyListenersException(String detail)
+   {
+     super(detail);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/TreeMap.java gcc-4.1.0/libjava/classpath/java/util/TreeMap.java
*** gcc-4.0.2/libjava/classpath/java/util/TreeMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/TreeMap.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,1781 ----
+ /* TreeMap.java -- a class providing a basic Red-Black Tree data structure,
+    mapping Object --> Object
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * This class provides a red-black tree implementation of the SortedMap
+  * interface.  Elements in the Map will be sorted by either a user-provided
+  * Comparator object, or by the natural ordering of the keys.
+  *
+  * The algorithms are adopted from Corman, Leiserson, and Rivest's
+  * <i>Introduction to Algorithms.</i>  TreeMap guarantees O(log n)
+  * insertion and deletion of elements.  That being said, there is a large
+  * enough constant coefficient in front of that "log n" (overhead involved
+  * in keeping the tree balanced), that TreeMap may not be the best choice
+  * for small collections. If something is already sorted, you may want to
+  * just use a LinkedHashMap to maintain the order while providing O(1) access.
+  *
+  * TreeMap is a part of the JDK1.2 Collections API.  Null keys are allowed
+  * only if a Comparator is used which can deal with them; natural ordering
+  * cannot cope with null.  Null values are always allowed. Note that the
+  * ordering must be <i>consistent with equals</i> to correctly implement
+  * the Map interface. If this condition is violated, the map is still
+  * well-behaved, but you may have suprising results when comparing it to
+  * other maps.<p>
+  *
+  * This implementation is not synchronized. If you need to share this between
+  * multiple threads, do something like:<br>
+  * <code>SortedMap m
+  *       = Collections.synchronizedSortedMap(new TreeMap(...));</code><p>
+  *
+  * The iterators are <i>fail-fast</i>, meaning that any structural
+  * modification, except for <code>remove()</code> called on the iterator
+  * itself, cause the iterator to throw a
+  * <code>ConcurrentModificationException</code> rather than exhibit
+  * non-deterministic behavior.
+  *
+  * @author Jon Zeppieri
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Map
+  * @see HashMap
+  * @see Hashtable
+  * @see LinkedHashMap
+  * @see Comparable
+  * @see Comparator
+  * @see Collection
+  * @see Collections#synchronizedSortedMap(SortedMap)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class TreeMap extends AbstractMap
+   implements SortedMap, Cloneable, Serializable
+ {
+   // Implementation note:
+   // A red-black tree is a binary search tree with the additional properties
+   // that all paths to a leaf node visit the same number of black nodes,
+   // and no red node has red children. To avoid some null-pointer checks,
+   // we use the special node nil which is always black, has no relatives,
+   // and has key and value of null (but is not equal to a mapping of null).
+ 
+   /**
+    * Compatible with JDK 1.2.
+    */
+   private static final long serialVersionUID = 919286545866124006L;
+ 
+   /**
+    * Color status of a node. Package visible for use by nested classes.
+    */
+   static final int RED = -1,
+                    BLACK = 1;
+ 
+   /**
+    * Sentinal node, used to avoid null checks for corner cases and make the
+    * delete rebalance code simpler. The rebalance code must never assign
+    * the parent, left, or right of nil, but may safely reassign the color
+    * to be black. This object must never be used as a key in a TreeMap, or
+    * it will break bounds checking of a SubMap.
+    */
+   static final Node nil = new Node(null, null, BLACK);
+   static
+     {
+       // Nil is self-referential, so we must initialize it after creation.
+       nil.parent = nil;
+       nil.left = nil;
+       nil.right = nil;
+     }
+ 
+   /**
+    * The root node of this TreeMap.
+    */
+   private transient Node root;
+ 
+   /**
+    * The size of this TreeMap. Package visible for use by nested classes.
+    */
+   transient int size;
+ 
+   /**
+    * The cache for {@link #entrySet()}.
+    */
+   private transient Set entries;
+ 
+   /**
+    * Counts the number of modifications this TreeMap has undergone, used
+    * by Iterators to know when to throw ConcurrentModificationExceptions.
+    * Package visible for use by nested classes.
+    */
+   transient int modCount;
+ 
+   /**
+    * This TreeMap's comparator, or null for natural ordering.
+    * Package visible for use by nested classes.
+    * @serial the comparator ordering this tree, or null
+    */
+   final Comparator comparator;
+ 
+   /**
+    * Class to represent an entry in the tree. Holds a single key-value pair,
+    * plus pointers to parent and child nodes.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private static final class Node extends AbstractMap.BasicMapEntry
+   {
+     // All fields package visible for use by nested classes.
+     /** The color of this node. */
+     int color;
+ 
+     /** The left child node. */
+     Node left = nil;
+     /** The right child node. */
+     Node right = nil;
+     /** The parent node. */
+     Node parent = nil;
+ 
+     /**
+      * Simple constructor.
+      * @param key the key
+      * @param value the value
+      */
+     Node(Object key, Object value, int color)
+     {
+       super(key, value);
+       this.color = color;
+     }
+   }
+ 
+   /**
+    * Instantiate a new TreeMap with no elements, using the keys' natural
+    * ordering to sort. All entries in the map must have a key which implements
+    * Comparable, and which are <i>mutually comparable</i>, otherwise map
+    * operations may throw a {@link ClassCastException}. Attempts to use
+    * a null key will throw a {@link NullPointerException}.
+    *
+    * @see Comparable
+    */
+   public TreeMap()
+   {
+     this((Comparator) null);
+   }
+ 
+   /**
+    * Instantiate a new TreeMap with no elements, using the provided comparator
+    * to sort. All entries in the map must have keys which are mutually
+    * comparable by the Comparator, otherwise map operations may throw a
+    * {@link ClassCastException}.
+    *
+    * @param c the sort order for the keys of this map, or null
+    *        for the natural order
+    */
+   public TreeMap(Comparator c)
+   {
+     comparator = c;
+     fabricateTree(0);
+   }
+ 
+   /**
+    * Instantiate a new TreeMap, initializing it with all of the elements in
+    * the provided Map.  The elements will be sorted using the natural
+    * ordering of the keys. This algorithm runs in n*log(n) time. All entries
+    * in the map must have keys which implement Comparable and are mutually
+    * comparable, otherwise map operations may throw a
+    * {@link ClassCastException}.
+    *
+    * @param map a Map, whose entries will be put into this TreeMap
+    * @throws ClassCastException if the keys in the provided Map are not
+    *         comparable
+    * @throws NullPointerException if map is null
+    * @see Comparable
+    */
+   public TreeMap(Map map)
+   {
+     this((Comparator) null);
+     putAll(map);
+   }
+ 
+   /**
+    * Instantiate a new TreeMap, initializing it with all of the elements in
+    * the provided SortedMap.  The elements will be sorted using the same
+    * comparator as in the provided SortedMap. This runs in linear time.
+    *
+    * @param sm a SortedMap, whose entries will be put into this TreeMap
+    * @throws NullPointerException if sm is null
+    */
+   public TreeMap(SortedMap sm)
+   {
+     this(sm.comparator());
+     int pos = sm.size();
+     Iterator itr = sm.entrySet().iterator();
+ 
+     fabricateTree(pos);
+     Node node = firstNode();
+ 
+     while (--pos >= 0)
+       {
+         Map.Entry me = (Map.Entry) itr.next();
+         node.key = me.getKey();
+         node.value = me.getValue();
+         node = successor(node);
+       }
+   }
+ 
+   /**
+    * Clears the Map so it has no keys. This is O(1).
+    */
+   public void clear()
+   {
+     if (size > 0)
+       {
+         modCount++;
+         root = nil;
+         size = 0;
+       }
+   }
+ 
+   /**
+    * Returns a shallow clone of this TreeMap. The Map itself is cloned,
+    * but its contents are not.
+    *
+    * @return the clone
+    */
+   public Object clone()
+   {
+     TreeMap copy = null;
+     try
+       {
+         copy = (TreeMap) super.clone();
+       }
+     catch (CloneNotSupportedException x)
+       {
+       }
+     copy.entries = null;
+     copy.fabricateTree(size);
+ 
+     Node node = firstNode();
+     Node cnode = copy.firstNode();
+ 
+     while (node != nil)
+       {
+         cnode.key = node.key;
+         cnode.value = node.value;
+         node = successor(node);
+         cnode = copy.successor(cnode);
+       }
+     return copy;
+   }
+ 
+   /**
+    * Return the comparator used to sort this map, or null if it is by
+    * natural order.
+    *
+    * @return the map's comparator
+    */
+   public Comparator comparator()
+   {
+     return comparator;
+   }
+ 
+   /**
+    * Returns true if the map contains a mapping for the given key.
+    *
+    * @param key the key to look for
+    * @return true if the key has a mapping
+    * @throws ClassCastException if key is not comparable to map elements
+    * @throws NullPointerException if key is null and the comparator is not
+    *         tolerant of nulls
+    */
+   public boolean containsKey(Object key)
+   {
+     return getNode(key) != nil;
+   }
+ 
+   /**
+    * Returns true if the map contains at least one mapping to the given value.
+    * This requires linear time.
+    *
+    * @param value the value to look for
+    * @return true if the value appears in a mapping
+    */
+   public boolean containsValue(Object value)
+   {
+     Node node = firstNode();
+     while (node != nil)
+       {
+         if (equals(value, node.value))
+           return true;
+         node = successor(node);
+       }
+     return false;
+   }
+ 
+   /**
+    * Returns a "set view" of this TreeMap's entries. The set is backed by
+    * the TreeMap, so changes in one show up in the other.  The set supports
+    * element removal, but not element addition.<p>
+    *
+    * Note that the iterators for all three views, from keySet(), entrySet(),
+    * and values(), traverse the TreeMap in sorted sequence.
+    *
+    * @return a set view of the entries
+    * @see #keySet()
+    * @see #values()
+    * @see Map.Entry
+    */
+   public Set entrySet()
+   {
+     if (entries == null)
+       // Create an AbstractSet with custom implementations of those methods
+       // that can be overriden easily and efficiently.
+       entries = new AbstractSet()
+       {
+         public int size()
+         {
+           return size;
+         }
+ 
+         public Iterator iterator()
+         {
+           return new TreeIterator(ENTRIES);
+         }
+ 
+         public void clear()
+         {
+           TreeMap.this.clear();
+         }
+ 
+         public boolean contains(Object o)
+         {
+           if (! (o instanceof Map.Entry))
+             return false;
+           Map.Entry me = (Map.Entry) o;
+           Node n = getNode(me.getKey());
+           return n != nil && AbstractSet.equals(me.getValue(), n.value);
+       }
+ 
+         public boolean remove(Object o)
+         {
+           if (! (o instanceof Map.Entry))
+             return false;
+           Map.Entry me = (Map.Entry) o;
+           Node n = getNode(me.getKey());
+           if (n != nil && AbstractSet.equals(me.getValue(), n.value))
+             {
+               removeNode(n);
+               return true;
+             }
+           return false;
+         }
+       };
+     return entries;
+   }
+ 
+   /**
+    * Returns the first (lowest) key in the map.
+    *
+    * @return the first key
+    * @throws NoSuchElementException if the map is empty
+    */
+   public Object firstKey()
+   {
+     if (root == nil)
+       throw new NoSuchElementException();
+     return firstNode().key;
+   }
+ 
+   /**
+    * Return the value in this TreeMap associated with the supplied key,
+    * or <code>null</code> if the key maps to nothing.  NOTE: Since the value
+    * could also be null, you must use containsKey to see if this key
+    * actually maps to something.
+    *
+    * @param key the key for which to fetch an associated value
+    * @return what the key maps to, if present
+    * @throws ClassCastException if key is not comparable to elements in the map
+    * @throws NullPointerException if key is null but the comparator does not
+    *         tolerate nulls
+    * @see #put(Object, Object)
+    * @see #containsKey(Object)
+    */
+   public Object get(Object key)
+   {
+     // Exploit fact that nil.value == null.
+     return getNode(key).value;
+   }
+ 
+   /**
+    * Returns a view of this Map including all entries with keys less than
+    * <code>toKey</code>. The returned map is backed by the original, so changes
+    * in one appear in the other. The submap will throw an
+    * {@link IllegalArgumentException} for any attempt to access or add an
+    * element beyond the specified cutoff. The returned map does not include
+    * the endpoint; if you want inclusion, pass the successor element.
+    *
+    * @param toKey the (exclusive) cutoff point
+    * @return a view of the map less than the cutoff
+    * @throws ClassCastException if <code>toKey</code> is not compatible with
+    *         the comparator (or is not Comparable, for natural ordering)
+    * @throws NullPointerException if toKey is null, but the comparator does not
+    *         tolerate null elements
+    */
+   public SortedMap headMap(Object toKey)
+   {
+     return new SubMap(nil, toKey);
+   }
+ 
+   /**
+    * Returns a "set view" of this TreeMap's keys. The set is backed by the
+    * TreeMap, so changes in one show up in the other.  The set supports
+    * element removal, but not element addition.
+    *
+    * @return a set view of the keys
+    * @see #values()
+    * @see #entrySet()
+    */
+   public Set keySet()
+   {
+     if (keys == null)
+       // Create an AbstractSet with custom implementations of those methods
+       // that can be overriden easily and efficiently.
+       keys = new AbstractSet()
+       {
+         public int size()
+         {
+           return size;
+         }
+ 
+         public Iterator iterator()
+         {
+           return new TreeIterator(KEYS);
+         }
+ 
+         public void clear()
+         {
+           TreeMap.this.clear();
+         }
+ 
+         public boolean contains(Object o)
+         {
+           return containsKey(o);
+         }
+ 
+         public boolean remove(Object key)
+         {
+           Node n = getNode(key);
+           if (n == nil)
+             return false;
+           removeNode(n);
+           return true;
+         }
+       };
+     return keys;
+   }
+ 
+   /**
+    * Returns the last (highest) key in the map.
+    *
+    * @return the last key
+    * @throws NoSuchElementException if the map is empty
+    */
+   public Object lastKey()
+   {
+     if (root == nil)
+       throw new NoSuchElementException("empty");
+     return lastNode().key;
+   }
+ 
+   /**
+    * Puts the supplied value into the Map, mapped by the supplied key.
+    * The value may be retrieved by any object which <code>equals()</code>
+    * this key. NOTE: Since the prior value could also be null, you must
+    * first use containsKey if you want to see if you are replacing the
+    * key's mapping.
+    *
+    * @param key the key used to locate the value
+    * @param value the value to be stored in the Map
+    * @return the prior mapping of the key, or null if there was none
+    * @throws ClassCastException if key is not comparable to current map keys
+    * @throws NullPointerException if key is null, but the comparator does
+    *         not tolerate nulls
+    * @see #get(Object)
+    * @see Object#equals(Object)
+    */
+   public Object put(Object key, Object value)
+   {
+     Node current = root;
+     Node parent = nil;
+     int comparison = 0;
+ 
+     // Find new node's parent.
+     while (current != nil)
+       {
+         parent = current;
+         comparison = compare(key, current.key);
+         if (comparison > 0)
+           current = current.right;
+         else if (comparison < 0)
+           current = current.left;
+         else // Key already in tree.
+           return current.setValue(value);
+       }
+ 
+     // Set up new node.
+     Node n = new Node(key, value, RED);
+     n.parent = parent;
+ 
+     // Insert node in tree.
+     modCount++;
+     size++;
+     if (parent == nil)
+       {
+         // Special case inserting into an empty tree.
+         root = n;
+         return null;
+       }
+     if (comparison > 0)
+       parent.right = n;
+     else
+       parent.left = n;
+ 
+     // Rebalance after insert.
+     insertFixup(n);
+     return null;
+   }
+ 
+   /**
+    * Copies all elements of the given map into this TreeMap.  If this map
+    * already has a mapping for a key, the new mapping replaces the current
+    * one.
+    *
+    * @param m the map to be added
+    * @throws ClassCastException if a key in m is not comparable with keys
+    *         in the map
+    * @throws NullPointerException if a key in m is null, and the comparator
+    *         does not tolerate nulls
+    */
+   public void putAll(Map m)
+   {
+     Iterator itr = m.entrySet().iterator();
+     int pos = m.size();
+     while (--pos >= 0)
+       {
+         Map.Entry e = (Map.Entry) itr.next();
+         put(e.getKey(), e.getValue());
+       }
+   }
+ 
+   /**
+    * Removes from the TreeMap and returns the value which is mapped by the
+    * supplied key. If the key maps to nothing, then the TreeMap remains
+    * unchanged, and <code>null</code> is returned. NOTE: Since the value
+    * could also be null, you must use containsKey to see if you are
+    * actually removing a mapping.
+    *
+    * @param key the key used to locate the value to remove
+    * @return whatever the key mapped to, if present
+    * @throws ClassCastException if key is not comparable to current map keys
+    * @throws NullPointerException if key is null, but the comparator does
+    *         not tolerate nulls
+    */
+   public Object remove(Object key)
+   {
+     Node n = getNode(key);
+     if (n == nil)
+       return null;
+     // Note: removeNode can alter the contents of n, so save value now.
+     Object result = n.value;
+     removeNode(n);
+     return result;
+   }
+ 
+   /**
+    * Returns the number of key-value mappings currently in this Map.
+    *
+    * @return the size
+    */
+   public int size()
+   {
+     return size;
+   }
+ 
+   /**
+    * Returns a view of this Map including all entries with keys greater or
+    * equal to <code>fromKey</code> and less than <code>toKey</code> (a
+    * half-open interval). The returned map is backed by the original, so
+    * changes in one appear in the other. The submap will throw an
+    * {@link IllegalArgumentException} for any attempt to access or add an
+    * element beyond the specified cutoffs. The returned map includes the low
+    * endpoint but not the high; if you want to reverse this behavior on
+    * either end, pass in the successor element.
+    *
+    * @param fromKey the (inclusive) low cutoff point
+    * @param toKey the (exclusive) high cutoff point
+    * @return a view of the map between the cutoffs
+    * @throws ClassCastException if either cutoff is not compatible with
+    *         the comparator (or is not Comparable, for natural ordering)
+    * @throws NullPointerException if fromKey or toKey is null, but the
+    *         comparator does not tolerate null elements
+    * @throws IllegalArgumentException if fromKey is greater than toKey
+    */
+   public SortedMap subMap(Object fromKey, Object toKey)
+   {
+     return new SubMap(fromKey, toKey);
+   }
+ 
+   /**
+    * Returns a view of this Map including all entries with keys greater or
+    * equal to <code>fromKey</code>. The returned map is backed by the
+    * original, so changes in one appear in the other. The submap will throw an
+    * {@link IllegalArgumentException} for any attempt to access or add an
+    * element beyond the specified cutoff. The returned map includes the
+    * endpoint; if you want to exclude it, pass in the successor element.
+    *
+    * @param fromKey the (inclusive) low cutoff point
+    * @return a view of the map above the cutoff
+    * @throws ClassCastException if <code>fromKey</code> is not compatible with
+    *         the comparator (or is not Comparable, for natural ordering)
+    * @throws NullPointerException if fromKey is null, but the comparator
+    *         does not tolerate null elements
+    */
+   public SortedMap tailMap(Object fromKey)
+   {
+     return new SubMap(fromKey, nil);
+   }
+ 
+   /**
+    * Returns a "collection view" (or "bag view") of this TreeMap's values.
+    * The collection is backed by the TreeMap, so changes in one show up
+    * in the other.  The collection supports element removal, but not element
+    * addition.
+    *
+    * @return a bag view of the values
+    * @see #keySet()
+    * @see #entrySet()
+    */
+   public Collection values()
+   {
+     if (values == null)
+       // We don't bother overriding many of the optional methods, as doing so
+       // wouldn't provide any significant performance advantage.
+       values = new AbstractCollection()
+       {
+         public int size()
+         {
+           return size;
+         }
+ 
+         public Iterator iterator()
+         {
+           return new TreeIterator(VALUES);
+         }
+ 
+         public void clear()
+         {
+           TreeMap.this.clear();
+         }
+       };
+     return values;
+   }
+ 
+   /**
+    * Compares two elements by the set comparator, or by natural ordering.
+    * Package visible for use by nested classes.
+    *
+    * @param o1 the first object
+    * @param o2 the second object
+    * @throws ClassCastException if o1 and o2 are not mutually comparable,
+    *         or are not Comparable with natural ordering
+    * @throws NullPointerException if o1 or o2 is null with natural ordering
+    */
+   final int compare(Object o1, Object o2)
+   {
+     return (comparator == null
+             ? ((Comparable) o1).compareTo(o2)
+             : comparator.compare(o1, o2));
+   }
+ 
+   /**
+    * Maintain red-black balance after deleting a node.
+    *
+    * @param node the child of the node just deleted, possibly nil
+    * @param parent the parent of the node just deleted, never nil
+    */
+   private void deleteFixup(Node node, Node parent)
+   {
+     // if (parent == nil)
+     //   throw new InternalError();
+     // If a black node has been removed, we need to rebalance to avoid
+     // violating the "same number of black nodes on any path" rule. If
+     // node is red, we can simply recolor it black and all is well.
+     while (node != root && node.color == BLACK)
+       {
+         if (node == parent.left)
+           {
+             // Rebalance left side.
+             Node sibling = parent.right;
+             // if (sibling == nil)
+             //   throw new InternalError();
+             if (sibling.color == RED)
+               {
+                 // Case 1: Sibling is red.
+                 // Recolor sibling and parent, and rotate parent left.
+                 sibling.color = BLACK;
+                 parent.color = RED;
+                 rotateLeft(parent);
+                 sibling = parent.right;
+               }
+ 
+             if (sibling.left.color == BLACK && sibling.right.color == BLACK)
+               {
+                 // Case 2: Sibling has no red children.
+                 // Recolor sibling, and move to parent.
+                 sibling.color = RED;
+                 node = parent;
+                 parent = parent.parent;
+               }
+             else
+               {
+                 if (sibling.right.color == BLACK)
+                   {
+                     // Case 3: Sibling has red left child.
+                     // Recolor sibling and left child, rotate sibling right.
+                     sibling.left.color = BLACK;
+                     sibling.color = RED;
+                     rotateRight(sibling);
+                     sibling = parent.right;
+                   }
+                 // Case 4: Sibling has red right child. Recolor sibling,
+                 // right child, and parent, and rotate parent left.
+                 sibling.color = parent.color;
+                 parent.color = BLACK;
+                 sibling.right.color = BLACK;
+                 rotateLeft(parent);
+                 node = root; // Finished.
+               }
+           }
+         else
+           {
+             // Symmetric "mirror" of left-side case.
+             Node sibling = parent.left;
+             // if (sibling == nil)
+             //   throw new InternalError();
+             if (sibling.color == RED)
+               {
+                 // Case 1: Sibling is red.
+                 // Recolor sibling and parent, and rotate parent right.
+                 sibling.color = BLACK;
+                 parent.color = RED;
+                 rotateRight(parent);
+                 sibling = parent.left;
+               }
+ 
+             if (sibling.right.color == BLACK && sibling.left.color == BLACK)
+               {
+                 // Case 2: Sibling has no red children.
+                 // Recolor sibling, and move to parent.
+                 sibling.color = RED;
+                 node = parent;
+                 parent = parent.parent;
+               }
+             else
+               {
+                 if (sibling.left.color == BLACK)
+                   {
+                     // Case 3: Sibling has red right child.
+                     // Recolor sibling and right child, rotate sibling left.
+                     sibling.right.color = BLACK;
+                     sibling.color = RED;
+                     rotateLeft(sibling);
+                     sibling = parent.left;
+                   }
+                 // Case 4: Sibling has red left child. Recolor sibling,
+                 // left child, and parent, and rotate parent right.
+                 sibling.color = parent.color;
+                 parent.color = BLACK;
+                 sibling.left.color = BLACK;
+                 rotateRight(parent);
+                 node = root; // Finished.
+               }
+           }
+       }
+     node.color = BLACK;
+   }
+ 
+   /**
+    * Construct a perfectly balanced tree consisting of n "blank" nodes. This
+    * permits a tree to be generated from pre-sorted input in linear time.
+    *
+    * @param count the number of blank nodes, non-negative
+    */
+   private void fabricateTree(final int count)
+   {
+     if (count == 0)
+       {
+ 	root = nil;
+ 	size = 0;
+ 	return;
+       }
+ 
+     // We color every row of nodes black, except for the overflow nodes.
+     // I believe that this is the optimal arrangement. We construct the tree
+     // in place by temporarily linking each node to the next node in the row,
+     // then updating those links to the children when working on the next row.
+ 
+     // Make the root node.
+     root = new Node(null, null, BLACK);
+     size = count;
+     Node row = root;
+     int rowsize;
+ 
+     // Fill each row that is completely full of nodes.
+     for (rowsize = 2; rowsize + rowsize <= count; rowsize <<= 1)
+       {
+         Node parent = row;
+         Node last = null;
+         for (int i = 0; i < rowsize; i += 2)
+           {
+             Node left = new Node(null, null, BLACK);
+             Node right = new Node(null, null, BLACK);
+             left.parent = parent;
+             left.right = right;
+             right.parent = parent;
+             parent.left = left;
+             Node next = parent.right;
+             parent.right = right;
+             parent = next;
+             if (last != null)
+               last.right = left;
+             last = right;
+           }
+         row = row.left;
+       }
+ 
+     // Now do the partial final row in red.
+     int overflow = count - rowsize;
+     Node parent = row;
+     int i;
+     for (i = 0; i < overflow; i += 2)
+       {
+         Node left = new Node(null, null, RED);
+         Node right = new Node(null, null, RED);
+         left.parent = parent;
+         right.parent = parent;
+         parent.left = left;
+         Node next = parent.right;
+         parent.right = right;
+         parent = next;
+       }
+     // Add a lone left node if necessary.
+     if (i - overflow == 0)
+       {
+         Node left = new Node(null, null, RED);
+         left.parent = parent;
+         parent.left = left;
+         parent = parent.right;
+         left.parent.right = nil;
+       }
+     // Unlink the remaining nodes of the previous row.
+     while (parent != nil)
+       {
+         Node next = parent.right;
+         parent.right = nil;
+         parent = next;
+       }
+   }
+ 
+   /**
+    * Returns the first sorted node in the map, or nil if empty. Package
+    * visible for use by nested classes.
+    *
+    * @return the first node
+    */
+   final Node firstNode()
+   {
+     // Exploit fact that nil.left == nil.
+     Node node = root;
+     while (node.left != nil)
+       node = node.left;
+     return node;
+   }
+ 
+   /**
+    * Return the TreeMap.Node associated with key, or the nil node if no such
+    * node exists in the tree. Package visible for use by nested classes.
+    *
+    * @param key the key to search for
+    * @return the node where the key is found, or nil
+    */
+   final Node getNode(Object key)
+   {
+     Node current = root;
+     while (current != nil)
+       {
+         int comparison = compare(key, current.key);
+         if (comparison > 0)
+           current = current.right;
+         else if (comparison < 0)
+           current = current.left;
+         else
+           return current;
+       }
+     return current;
+   }
+ 
+   /**
+    * Find the "highest" node which is &lt; key. If key is nil, return last
+    * node. Package visible for use by nested classes.
+    *
+    * @param key the upper bound, exclusive
+    * @return the previous node
+    */
+   final Node highestLessThan(Object key)
+   {
+     if (key == nil)
+       return lastNode();
+ 
+     Node last = nil;
+     Node current = root;
+     int comparison = 0;
+ 
+     while (current != nil)
+       {
+         last = current;
+         comparison = compare(key, current.key);
+         if (comparison > 0)
+           current = current.right;
+         else if (comparison < 0)
+           current = current.left;
+         else // Exact match.
+           return predecessor(last);
+       }
+     return comparison <= 0 ? predecessor(last) : last;
+   }
+ 
+   /**
+    * Maintain red-black balance after inserting a new node.
+    *
+    * @param n the newly inserted node
+    */
+   private void insertFixup(Node n)
+   {
+     // Only need to rebalance when parent is a RED node, and while at least
+     // 2 levels deep into the tree (ie: node has a grandparent). Remember
+     // that nil.color == BLACK.
+     while (n.parent.color == RED && n.parent.parent != nil)
+       {
+         if (n.parent == n.parent.parent.left)
+           {
+             Node uncle = n.parent.parent.right;
+             // Uncle may be nil, in which case it is BLACK.
+             if (uncle.color == RED)
+               {
+                 // Case 1. Uncle is RED: Change colors of parent, uncle,
+                 // and grandparent, and move n to grandparent.
+                 n.parent.color = BLACK;
+                 uncle.color = BLACK;
+                 uncle.parent.color = RED;
+                 n = uncle.parent;
+               }
+             else
+               {
+                 if (n == n.parent.right)
+                   {
+                     // Case 2. Uncle is BLACK and x is right child.
+                     // Move n to parent, and rotate n left.
+                     n = n.parent;
+                     rotateLeft(n);
+                   }
+                 // Case 3. Uncle is BLACK and x is left child.
+                 // Recolor parent, grandparent, and rotate grandparent right.
+                 n.parent.color = BLACK;
+                 n.parent.parent.color = RED;
+                 rotateRight(n.parent.parent);
+               }
+           }
+         else
+           {
+             // Mirror image of above code.
+             Node uncle = n.parent.parent.left;
+             // Uncle may be nil, in which case it is BLACK.
+             if (uncle.color == RED)
+               {
+                 // Case 1. Uncle is RED: Change colors of parent, uncle,
+                 // and grandparent, and move n to grandparent.
+                 n.parent.color = BLACK;
+                 uncle.color = BLACK;
+                 uncle.parent.color = RED;
+                 n = uncle.parent;
+               }
+             else
+               {
+                 if (n == n.parent.left)
+                 {
+                     // Case 2. Uncle is BLACK and x is left child.
+                     // Move n to parent, and rotate n right.
+                     n = n.parent;
+                     rotateRight(n);
+                   }
+                 // Case 3. Uncle is BLACK and x is right child.
+                 // Recolor parent, grandparent, and rotate grandparent left.
+                 n.parent.color = BLACK;
+                 n.parent.parent.color = RED;
+                 rotateLeft(n.parent.parent);
+               }
+           }
+       }
+     root.color = BLACK;
+   }
+ 
+   /**
+    * Returns the last sorted node in the map, or nil if empty.
+    *
+    * @return the last node
+    */
+   private Node lastNode()
+   {
+     // Exploit fact that nil.right == nil.
+     Node node = root;
+     while (node.right != nil)
+       node = node.right;
+     return node;
+   }
+ 
+   /**
+    * Find the "lowest" node which is &gt;= key. If key is nil, return either
+    * nil or the first node, depending on the parameter first.
+    * Package visible for use by nested classes.
+    *
+    * @param key the lower bound, inclusive
+    * @param first true to return the first element instead of nil for nil key
+    * @return the next node
+    */
+   final Node lowestGreaterThan(Object key, boolean first)
+   {
+     if (key == nil)
+       return first ? firstNode() : nil;
+ 
+     Node last = nil;
+     Node current = root;
+     int comparison = 0;
+ 
+     while (current != nil)
+       {
+         last = current;
+         comparison = compare(key, current.key);
+         if (comparison > 0)
+           current = current.right;
+         else if (comparison < 0)
+           current = current.left;
+         else
+           return current;
+       }
+     return comparison > 0 ? successor(last) : last;
+   }
+ 
+   /**
+    * Return the node preceding the given one, or nil if there isn't one.
+    *
+    * @param node the current node, not nil
+    * @return the prior node in sorted order
+    */
+   private Node predecessor(Node node)
+   {
+     if (node.left != nil)
+       {
+         node = node.left;
+         while (node.right != nil)
+           node = node.right;
+         return node;
+       }
+ 
+     Node parent = node.parent;
+     // Exploit fact that nil.left == nil and node is non-nil.
+     while (node == parent.left)
+       {
+         node = parent;
+         parent = node.parent;
+       }
+     return parent;
+   }
+ 
+   /**
+    * Construct a tree from sorted keys in linear time. Package visible for
+    * use by TreeSet.
+    *
+    * @param s the stream to read from
+    * @param count the number of keys to read
+    * @param readValues true to read values, false to insert "" as the value
+    * @throws ClassNotFoundException if the underlying stream fails
+    * @throws IOException if the underlying stream fails
+    * @see #readObject(ObjectInputStream)
+    * @see TreeSet#readObject(ObjectInputStream)
+    */
+   final void putFromObjStream(ObjectInputStream s, int count,
+                               boolean readValues)
+     throws IOException, ClassNotFoundException
+   {
+     fabricateTree(count);
+     Node node = firstNode();
+ 
+     while (--count >= 0)
+       {
+         node.key = s.readObject();
+         node.value = readValues ? s.readObject() : "";
+         node = successor(node);
+       }
+   }
+ 
+   /**
+    * Construct a tree from sorted keys in linear time, with values of "".
+    * Package visible for use by TreeSet.
+    *
+    * @param keys the iterator over the sorted keys
+    * @param count the number of nodes to insert
+    * @see TreeSet#TreeSet(SortedSet)
+    */
+   final void putKeysLinear(Iterator keys, int count)
+   {
+     fabricateTree(count);
+     Node node = firstNode();
+ 
+     while (--count >= 0)
+       {
+         node.key = keys.next();
+         node.value = "";
+         node = successor(node);
+       }
+   }
+ 
+   /**
+    * Deserializes this object from the given stream.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if the underlying stream fails
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>size</i> (int), followed by key (Object) and value
+    *             (Object) pairs in sorted order
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     int size = s.readInt();
+     putFromObjStream(s, size, true);
+   }
+ 
+   /**
+    * Remove node from tree. This will increment modCount and decrement size.
+    * Node must exist in the tree. Package visible for use by nested classes.
+    *
+    * @param node the node to remove
+    */
+   final void removeNode(Node node)
+   {
+     Node splice;
+     Node child;
+ 
+     modCount++;
+     size--;
+ 
+     // Find splice, the node at the position to actually remove from the tree.
+     if (node.left == nil)
+       {
+         // Node to be deleted has 0 or 1 children.
+         splice = node;
+         child = node.right;
+       }
+     else if (node.right == nil)
+       {
+         // Node to be deleted has 1 child.
+         splice = node;
+         child = node.left;
+       }
+     else
+       {
+         // Node has 2 children. Splice is node's predecessor, and we swap
+         // its contents into node.
+         splice = node.left;
+         while (splice.right != nil)
+           splice = splice.right;
+         child = splice.left;
+         node.key = splice.key;
+         node.value = splice.value;
+       }
+ 
+     // Unlink splice from the tree.
+     Node parent = splice.parent;
+     if (child != nil)
+       child.parent = parent;
+     if (parent == nil)
+       {
+         // Special case for 0 or 1 node remaining.
+         root = child;
+         return;
+       }
+     if (splice == parent.left)
+       parent.left = child;
+     else
+       parent.right = child;
+ 
+     if (splice.color == BLACK)
+       deleteFixup(child, parent);
+   }
+ 
+   /**
+    * Rotate node n to the left.
+    *
+    * @param node the node to rotate
+    */
+   private void rotateLeft(Node node)
+   {
+     Node child = node.right;
+     // if (node == nil || child == nil)
+     //   throw new InternalError();
+ 
+     // Establish node.right link.
+     node.right = child.left;
+     if (child.left != nil)
+       child.left.parent = node;
+ 
+     // Establish child->parent link.
+     child.parent = node.parent;
+     if (node.parent != nil)
+       {
+         if (node == node.parent.left)
+           node.parent.left = child;
+         else
+           node.parent.right = child;
+       }
+     else
+       root = child;
+ 
+     // Link n and child.
+     child.left = node;
+     node.parent = child;
+   }
+ 
+   /**
+    * Rotate node n to the right.
+    *
+    * @param node the node to rotate
+    */
+   private void rotateRight(Node node)
+   {
+     Node child = node.left;
+     // if (node == nil || child == nil)
+     //   throw new InternalError();
+ 
+     // Establish node.left link.
+     node.left = child.right;
+     if (child.right != nil)
+       child.right.parent = node;
+ 
+     // Establish child->parent link.
+     child.parent = node.parent;
+     if (node.parent != nil)
+       {
+         if (node == node.parent.right)
+           node.parent.right = child;
+         else
+           node.parent.left = child;
+       }
+     else
+       root = child;
+ 
+     // Link n and child.
+     child.right = node;
+     node.parent = child;
+   }
+ 
+   /**
+    * Return the node following the given one, or nil if there isn't one.
+    * Package visible for use by nested classes.
+    *
+    * @param node the current node, not nil
+    * @return the next node in sorted order
+    */
+   final Node successor(Node node)
+   {
+     if (node.right != nil)
+       {
+         node = node.right;
+         while (node.left != nil)
+           node = node.left;
+         return node;
+       }
+ 
+     Node parent = node.parent;
+     // Exploit fact that nil.right == nil and node is non-nil.
+     while (node == parent.right)
+       {
+         node = parent;
+         parent = parent.parent;
+       }
+     return parent;
+   }
+ 
+   /**
+    * Serializes this object to the given stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>size</i> (int), followed by key (Object) and value
+    *             (Object) pairs in sorted order
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     s.defaultWriteObject();
+ 
+     Node node = firstNode();
+     s.writeInt(size);
+     while (node != nil)
+       {
+         s.writeObject(node.key);
+         s.writeObject(node.value);
+         node = successor(node);
+       }
+   }
+ 
+   /**
+    * Iterate over TreeMap's entries. This implementation is parameterized
+    * to give a sequential view of keys, values, or entries.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private final class TreeIterator implements Iterator
+   {
+     /**
+      * The type of this Iterator: {@link #KEYS}, {@link #VALUES},
+      * or {@link #ENTRIES}.
+      */
+     private final int type;
+     /** The number of modifications to the backing Map that we know about. */
+     private int knownMod = modCount;
+     /** The last Entry returned by a next() call. */
+     private Node last;
+     /** The next entry that should be returned by next(). */
+     private Node next;
+     /**
+      * The last node visible to this iterator. This is used when iterating
+      * on a SubMap.
+      */
+     private final Node max;
+ 
+     /**
+      * Construct a new TreeIterator with the supplied type.
+      * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
+      */
+     TreeIterator(int type)
+     {
+       // FIXME gcj cannot handle this. Bug java/4695
+       // this(type, firstNode(), nil);
+       this.type = type;
+       this.next = firstNode();
+       this.max = nil;
+     }
+ 
+     /**
+      * Construct a new TreeIterator with the supplied type. Iteration will
+      * be from "first" (inclusive) to "max" (exclusive).
+      *
+      * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
+      * @param first where to start iteration, nil for empty iterator
+      * @param max the cutoff for iteration, nil for all remaining nodes
+      */
+     TreeIterator(int type, Node first, Node max)
+     {
+       this.type = type;
+       this.next = first;
+       this.max = max;
+     }
+ 
+     /**
+      * Returns true if the Iterator has more elements.
+      * @return true if there are more elements
+      * @throws ConcurrentModificationException if the TreeMap was modified
+      */
+     public boolean hasNext()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       return next != max;
+     }
+ 
+     /**
+      * Returns the next element in the Iterator's sequential view.
+      * @return the next element
+      * @throws ConcurrentModificationException if the TreeMap was modified
+      * @throws NoSuchElementException if there is none
+      */
+     public Object next()
+     {
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+       if (next == max)
+         throw new NoSuchElementException();
+       last = next;
+       next = successor(last);
+ 
+       if (type == VALUES)
+         return last.value;
+       else if (type == KEYS)
+         return last.key;
+       return last;
+     }
+ 
+     /**
+      * Removes from the backing TreeMap the last element which was fetched
+      * with the <code>next()</code> method.
+      * @throws ConcurrentModificationException if the TreeMap was modified
+      * @throws IllegalStateException if called when there is no last element
+      */
+     public void remove()
+     {
+       if (last == null)
+         throw new IllegalStateException();
+       if (knownMod != modCount)
+         throw new ConcurrentModificationException();
+ 
+       removeNode(last);
+       last = null;
+       knownMod++;
+     }
+   } // class TreeIterator
+ 
+   /**
+    * Implementation of {@link #subMap(Object, Object)} and other map
+    * ranges. This class provides a view of a portion of the original backing
+    * map, and throws {@link IllegalArgumentException} for attempts to
+    * access beyond that range.
+    *
+    * @author Eric Blake (ebb9@email.byu.edu)
+    */
+   private final class SubMap extends AbstractMap implements SortedMap
+   {
+     /**
+      * The lower range of this view, inclusive, or nil for unbounded.
+      * Package visible for use by nested classes.
+      */
+     final Object minKey;
+ 
+     /**
+      * The upper range of this view, exclusive, or nil for unbounded.
+      * Package visible for use by nested classes.
+      */
+     final Object maxKey;
+ 
+     /**
+      * The cache for {@link #entrySet()}.
+      */
+     private Set entries;
+ 
+     /**
+      * Create a SubMap representing the elements between minKey (inclusive)
+      * and maxKey (exclusive). If minKey is nil, SubMap has no lower bound
+      * (headMap). If maxKey is nil, the SubMap has no upper bound (tailMap).
+      *
+      * @param minKey the lower bound
+      * @param maxKey the upper bound
+      * @throws IllegalArgumentException if minKey &gt; maxKey
+      */
+     SubMap(Object minKey, Object maxKey)
+     {
+       if (minKey != nil && maxKey != nil && compare(minKey, maxKey) > 0)
+         throw new IllegalArgumentException("fromKey > toKey");
+       this.minKey = minKey;
+       this.maxKey = maxKey;
+     }
+ 
+     /**
+      * Check if "key" is in within the range bounds for this SubMap. The
+      * lower ("from") SubMap range is inclusive, and the upper ("to") bound
+      * is exclusive. Package visible for use by nested classes.
+      *
+      * @param key the key to check
+      * @return true if the key is in range
+      */
+     boolean keyInRange(Object key)
+     {
+       return ((minKey == nil || compare(key, minKey) >= 0)
+               && (maxKey == nil || compare(key, maxKey) < 0));
+     }
+ 
+     public void clear()
+     {
+       Node next = lowestGreaterThan(minKey, true);
+       Node max = lowestGreaterThan(maxKey, false);
+       while (next != max)
+         {
+           Node current = next;
+           next = successor(current);
+           removeNode(current);
+         }
+     }
+ 
+     public Comparator comparator()
+     {
+       return comparator;
+     }
+ 
+     public boolean containsKey(Object key)
+     {
+       return keyInRange(key) && TreeMap.this.containsKey(key);
+     }
+ 
+     public boolean containsValue(Object value)
+     {
+       Node node = lowestGreaterThan(minKey, true);
+       Node max = lowestGreaterThan(maxKey, false);
+       while (node != max)
+         {
+           if (equals(value, node.getValue()))
+             return true;
+           node = successor(node);
+         }
+       return false;
+     }
+ 
+     public Set entrySet()
+     {
+       if (entries == null)
+         // Create an AbstractSet with custom implementations of those methods
+         // that can be overriden easily and efficiently.
+         entries = new AbstractSet()
+         {
+           public int size()
+           {
+             return SubMap.this.size();
+           }
+ 
+           public Iterator iterator()
+           {
+             Node first = lowestGreaterThan(minKey, true);
+             Node max = lowestGreaterThan(maxKey, false);
+             return new TreeIterator(ENTRIES, first, max);
+           }
+ 
+           public void clear()
+           {
+             SubMap.this.clear();
+           }
+ 
+           public boolean contains(Object o)
+           {
+             if (! (o instanceof Map.Entry))
+               return false;
+             Map.Entry me = (Map.Entry) o;
+             Object key = me.getKey();
+             if (! keyInRange(key))
+               return false;
+             Node n = getNode(key);
+             return n != nil && AbstractSet.equals(me.getValue(), n.value);
+           }
+ 
+           public boolean remove(Object o)
+           {
+             if (! (o instanceof Map.Entry))
+               return false;
+             Map.Entry me = (Map.Entry) o;
+             Object key = me.getKey();
+             if (! keyInRange(key))
+               return false;
+             Node n = getNode(key);
+             if (n != nil && AbstractSet.equals(me.getValue(), n.value))
+               {
+                 removeNode(n);
+                 return true;
+               }
+             return false;
+           }
+         };
+       return entries;
+     }
+ 
+     public Object firstKey()
+     {
+       Node node = lowestGreaterThan(minKey, true);
+       if (node == nil || ! keyInRange(node.key))
+         throw new NoSuchElementException();
+       return node.key;
+     }
+ 
+     public Object get(Object key)
+     {
+       if (keyInRange(key))
+         return TreeMap.this.get(key);
+       return null;
+     }
+ 
+     public SortedMap headMap(Object toKey)
+     {
+       if (! keyInRange(toKey))
+         throw new IllegalArgumentException("key outside range");
+       return new SubMap(minKey, toKey);
+     }
+ 
+     public Set keySet()
+     {
+       if (this.keys == null)
+         // Create an AbstractSet with custom implementations of those methods
+         // that can be overriden easily and efficiently.
+         this.keys = new AbstractSet()
+         {
+           public int size()
+           {
+             return SubMap.this.size();
+           }
+ 
+           public Iterator iterator()
+           {
+             Node first = lowestGreaterThan(minKey, true);
+             Node max = lowestGreaterThan(maxKey, false);
+             return new TreeIterator(KEYS, first, max);
+           }
+ 
+           public void clear()
+           {
+             SubMap.this.clear();
+           }
+ 
+           public boolean contains(Object o)
+           {
+             if (! keyInRange(o))
+               return false;
+             return getNode(o) != nil;
+           }
+ 
+           public boolean remove(Object o)
+           {
+             if (! keyInRange(o))
+               return false;
+             Node n = getNode(o);
+             if (n != nil)
+               {
+                 removeNode(n);
+                 return true;
+               }
+             return false;
+           }
+         };
+       return this.keys;
+     }
+ 
+     public Object lastKey()
+     {
+       Node node = highestLessThan(maxKey);
+       if (node == nil || ! keyInRange(node.key))
+         throw new NoSuchElementException();
+       return node.key;
+     }
+ 
+     public Object put(Object key, Object value)
+     {
+       if (! keyInRange(key))
+         throw new IllegalArgumentException("Key outside range");
+       return TreeMap.this.put(key, value);
+     }
+ 
+     public Object remove(Object key)
+     {
+       if (keyInRange(key))
+         return TreeMap.this.remove(key);
+       return null;
+     }
+ 
+     public int size()
+     {
+       Node node = lowestGreaterThan(minKey, true);
+       Node max = lowestGreaterThan(maxKey, false);
+       int count = 0;
+       while (node != max)
+         {
+           count++;
+           node = successor(node);
+         }
+       return count;
+     }
+ 
+     public SortedMap subMap(Object fromKey, Object toKey)
+     {
+       if (! keyInRange(fromKey) || ! keyInRange(toKey))
+         throw new IllegalArgumentException("key outside range");
+       return new SubMap(fromKey, toKey);
+     }
+ 
+     public SortedMap tailMap(Object fromKey)
+     {
+       if (! keyInRange(fromKey))
+         throw new IllegalArgumentException("key outside range");
+       return new SubMap(fromKey, maxKey);
+     }
+ 
+     public Collection values()
+     {
+       if (this.values == null)
+         // Create an AbstractCollection with custom implementations of those
+         // methods that can be overriden easily and efficiently.
+         this.values = new AbstractCollection()
+         {
+           public int size()
+           {
+             return SubMap.this.size();
+           }
+ 
+           public Iterator iterator()
+           {
+             Node first = lowestGreaterThan(minKey, true);
+             Node max = lowestGreaterThan(maxKey, false);
+             return new TreeIterator(VALUES, first, max);
+           }
+ 
+           public void clear()
+           {
+             SubMap.this.clear();
+           }
+         };
+       return this.values;
+     }
+   } // class SubMap  
+ } // class TreeMap
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/TreeSet.java gcc-4.1.0/libjava/classpath/java/util/TreeSet.java
*** gcc-4.0.2/libjava/classpath/java/util/TreeSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/TreeSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,416 ----
+ /* TreeSet.java -- a class providing a TreeMap-backed SortedSet
+    Copyright (C) 1999, 2000, 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ /**
+  * This class provides a TreeMap-backed implementation of the SortedSet
+  * interface. The elements will be sorted according to their <i>natural
+  * order</i>, or according to the provided <code>Comparator</code>.<p>
+  *
+  * Most operations are O(log n), but there is so much overhead that this
+  * makes small sets expensive. Note that the ordering must be <i>consistent
+  * with equals</i> to correctly implement the Set interface. If this
+  * condition is violated, the set is still well-behaved, but you may have
+  * suprising results when comparing it to other sets.<p>
+  *
+  * This implementation is not synchronized. If you need to share this between
+  * multiple threads, do something like:<br>
+  * <code>SortedSet s
+  *       = Collections.synchronizedSortedSet(new TreeSet(...));</code><p>
+  *
+  * The iterators are <i>fail-fast</i>, meaning that any structural
+  * modification, except for <code>remove()</code> called on the iterator
+  * itself, cause the iterator to throw a
+  * <code>ConcurrentModificationException</code> rather than exhibit
+  * non-deterministic behavior.
+  *
+  * @author Jon Zeppieri
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see Set
+  * @see HashSet
+  * @see LinkedHashSet
+  * @see Comparable
+  * @see Comparator
+  * @see Collections#synchronizedSortedSet(SortedSet)
+  * @see TreeMap
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class TreeSet extends AbstractSet
+   implements SortedSet, Cloneable, Serializable
+ {
+   /**
+    * Compatible with JDK 1.2.
+    */
+   private static final long serialVersionUID = -2479143000061671589L;
+ 
+   /**
+    * The SortedMap which backs this Set.
+    */
+   // Not final because of readObject. This will always be one of TreeMap or
+   // TreeMap.SubMap, which both extend AbstractMap.
+   private transient SortedMap map;
+ 
+   /**
+    * Construct a new TreeSet whose backing TreeMap using the "natural"
+    * ordering of keys. Elements that are not mutually comparable will cause
+    * ClassCastExceptions down the road.
+    *
+    * @see Comparable
+    */
+   public TreeSet()
+   {
+     map = new TreeMap();
+   }
+ 
+   /**
+    * Construct a new TreeSet whose backing TreeMap uses the supplied
+    * Comparator. Elements that are not mutually comparable will cause
+    * ClassCastExceptions down the road.
+    *
+    * @param comparator the Comparator this Set will use
+    */
+   public TreeSet(Comparator comparator)
+   {
+     map = new TreeMap(comparator);
+   }
+ 
+   /**
+    * Construct a new TreeSet whose backing TreeMap uses the "natural"
+    * orering of the keys and which contains all of the elements in the
+    * supplied Collection. This runs in n*log(n) time.
+    *
+    * @param collection the new Set will be initialized with all
+    *        of the elements in this Collection
+    * @throws ClassCastException if the elements of the collection are not
+    *         comparable
+    * @throws NullPointerException if the collection is null
+    * @see Comparable
+    */
+   public TreeSet(Collection collection)
+   {
+     map = new TreeMap();
+     addAll(collection);
+   }
+ 
+   /**
+    * Construct a new TreeSet, using the same key ordering as the supplied
+    * SortedSet and containing all of the elements in the supplied SortedSet.
+    * This constructor runs in linear time.
+    *
+    * @param sortedSet the new TreeSet will use this SortedSet's comparator
+    *        and will initialize itself with all its elements
+    * @throws NullPointerException if sortedSet is null
+    */
+   public TreeSet(SortedSet sortedSet)
+   {
+     map = new TreeMap(sortedSet.comparator());
+     Iterator itr = sortedSet.iterator();
+     ((TreeMap) map).putKeysLinear(itr, sortedSet.size());
+   }
+ 
+   /**
+    * This private constructor is used to implement the subSet() calls around
+    * a backing TreeMap.SubMap.
+    *
+    * @param backingMap the submap
+    */
+   private TreeSet(SortedMap backingMap)
+   {
+     map = backingMap;
+   }
+ 
+   /**
+    * Adds the spplied Object to the Set if it is not already in the Set;
+    * returns true if the element is added, false otherwise.
+    *
+    * @param obj the Object to be added to this Set
+    * @throws ClassCastException if the element cannot be compared with objects
+    *         already in the set
+    */
+   public boolean add(Object obj)
+   {
+     return map.put(obj, "") == null;
+   }
+ 
+   /**
+    * Adds all of the elements in the supplied Collection to this TreeSet.
+    *
+    * @param c The collection to add
+    * @return true if the Set is altered, false otherwise
+    * @throws NullPointerException if c is null
+    * @throws ClassCastException if an element in c cannot be compared with
+    *         objects already in the set
+    */
+   public boolean addAll(Collection c)
+   {
+     boolean result = false;
+     int pos = c.size();
+     Iterator itr = c.iterator();
+     while (--pos >= 0)
+       result |= (map.put(itr.next(), "") == null);
+     return result;
+   }
+ 
+   /**
+    * Removes all elements in this Set.
+    */
+   public void clear()
+   {
+     map.clear();
+   }
+ 
+   /**
+    * Returns a shallow copy of this Set. The elements are not cloned.
+    *
+    * @return the cloned set
+    */
+   public Object clone()
+   {
+     TreeSet copy = null;
+     try
+       {
+         copy = (TreeSet) super.clone();
+         // Map may be either TreeMap or TreeMap.SubMap, hence the ugly casts.
+         copy.map = (SortedMap) ((AbstractMap) map).clone();
+       }
+     catch (CloneNotSupportedException x)
+       {
+         // Impossible result.
+       }
+     return copy;
+   }
+ 
+   /**
+    * Returns this Set's comparator.
+    *
+    * @return the comparator, or null if the set uses natural ordering
+    */
+   public Comparator comparator()
+   {
+     return map.comparator();
+   }
+ 
+   /**
+    * Returns true if this Set contains the supplied Object, false otherwise.
+    *
+    * @param obj the Object to check for
+    * @return true if it is in the set
+    * @throws ClassCastException if obj cannot be compared with objects
+    *         already in the set
+    */
+   public boolean contains(Object obj)
+   {
+     return map.containsKey(obj);
+   }
+ 
+   /**
+    * Returns the first (by order) element in this Set.
+    *
+    * @return the first element
+    * @throws NoSuchElementException if the set is empty
+    */
+   public Object first()
+   {
+     return map.firstKey();
+   }
+ 
+   /**
+    * Returns a view of this Set including all elements less than
+    * <code>to</code>. The returned set is backed by the original, so changes
+    * in one appear in the other. The subset will throw an
+    * {@link IllegalArgumentException} for any attempt to access or add an
+    * element beyond the specified cutoff. The returned set does not include
+    * the endpoint; if you want inclusion, pass the successor element.
+    *
+    * @param to the (exclusive) cutoff point
+    * @return a view of the set less than the cutoff
+    * @throws ClassCastException if <code>to</code> is not compatible with
+    *         the comparator (or is not Comparable, for natural ordering)
+    * @throws NullPointerException if to is null, but the comparator does not
+    *         tolerate null elements
+    */
+   public SortedSet headSet(Object to)
+   {
+     return new TreeSet(map.headMap(to));
+   }
+ 
+   /**
+    * Returns true if this Set has size 0, false otherwise.
+    *
+    * @return true if the set is empty
+    */
+   public boolean isEmpty()
+   {
+     return map.isEmpty();
+   }
+ 
+   /**
+    * Returns in Iterator over the elements in this TreeSet, which traverses
+    * in ascending order.
+    *
+    * @return an iterator
+    */
+   public Iterator iterator()
+   {
+     return map.keySet().iterator();
+   }
+ 
+   /**
+    * Returns the last (by order) element in this Set.
+    *
+    * @return the last element
+    * @throws NoSuchElementException if the set is empty
+    */
+   public Object last()
+   {
+     return map.lastKey();
+   }
+ 
+   /**
+    * If the supplied Object is in this Set, it is removed, and true is
+    * returned; otherwise, false is returned.
+    *
+    * @param obj the Object to remove from this Set
+    * @return true if the set was modified
+    * @throws ClassCastException if obj cannot be compared to set elements
+    */
+   public boolean remove(Object obj)
+   {
+     return map.remove(obj) != null;
+   }
+ 
+   /**
+    * Returns the number of elements in this Set
+    *
+    * @return the set size
+    */
+   public int size()
+   {
+     return map.size();
+   }
+ 
+   /**
+    * Returns a view of this Set including all elements greater or equal to
+    * <code>from</code> and less than <code>to</code> (a half-open interval).
+    * The returned set is backed by the original, so changes in one appear in
+    * the other. The subset will throw an {@link IllegalArgumentException}
+    * for any attempt to access or add an element beyond the specified cutoffs.
+    * The returned set includes the low endpoint but not the high; if you want
+    * to reverse this behavior on either end, pass in the successor element.
+    *
+    * @param from the (inclusive) low cutoff point
+    * @param to the (exclusive) high cutoff point
+    * @return a view of the set between the cutoffs
+    * @throws ClassCastException if either cutoff is not compatible with
+    *         the comparator (or is not Comparable, for natural ordering)
+    * @throws NullPointerException if from or to is null, but the comparator
+    *         does not tolerate null elements
+    * @throws IllegalArgumentException if from is greater than to
+    */
+   public SortedSet subSet(Object from, Object to)
+   {
+     return new TreeSet(map.subMap(from, to));
+   }
+ 
+   /**
+    * Returns a view of this Set including all elements greater or equal to
+    * <code>from</code>. The returned set is backed by the original, so
+    * changes in one appear in the other. The subset will throw an
+    * {@link IllegalArgumentException} for any attempt to access or add an
+    * element beyond the specified cutoff. The returned set includes the
+    * endpoint; if you want to exclude it, pass in the successor element.
+    *
+    * @param from the (inclusive) low cutoff point
+    * @return a view of the set above the cutoff
+    * @throws ClassCastException if <code>from</code> is not compatible with
+    *         the comparator (or is not Comparable, for natural ordering)
+    * @throws NullPointerException if from is null, but the comparator
+    *         does not tolerate null elements
+    */
+   public SortedSet tailSet(Object from)
+   {
+     return new TreeSet(map.tailMap(from));
+   }
+ 
+   /**
+    * Serializes this object to the given stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>comparator</i> (Object), followed by the set size
+    *             (int), the the elements in sorted order (Object)
+    */
+   private void writeObject(ObjectOutputStream s) throws IOException
+   {
+     s.defaultWriteObject();
+     Iterator itr = map.keySet().iterator();
+     int pos = map.size();
+     s.writeObject(map.comparator());
+     s.writeInt(pos);
+     while (--pos >= 0)
+       s.writeObject(itr.next());
+   }
+ 
+   /**
+    * Deserializes this object from the given stream.
+    *
+    * @param s the stream to read from
+    * @throws ClassNotFoundException if the underlying stream fails
+    * @throws IOException if the underlying stream fails
+    * @serialData the <i>comparator</i> (Object), followed by the set size
+    *             (int), the the elements in sorted order (Object)
+    */
+   private void readObject(ObjectInputStream s)
+     throws IOException, ClassNotFoundException
+   {
+     s.defaultReadObject();
+     Comparator comparator = (Comparator) s.readObject();
+     int size = s.readInt();
+     map = new TreeMap(comparator);
+     ((TreeMap) map).putFromObjStream(s, size, false);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/Vector.java gcc-4.1.0/libjava/classpath/java/util/Vector.java
*** gcc-4.0.2/libjava/classpath/java/util/Vector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/Vector.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,931 ----
+ /* Vector.java -- Class that provides growable arrays.
+    Copyright (C) 1998, 1999, 2000, 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ import java.io.IOException;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.lang.reflect.Array;
+ 
+ /**
+  * The <code>Vector</code> classes implements growable arrays of Objects.
+  * You can access elements in a Vector with an index, just as you
+  * can in a built in array, but Vectors can grow and shrink to accommodate
+  * more or fewer objects.<p>
+  *
+  * Vectors try to mantain efficiency in growing by having a
+  * <code>capacityIncrement</code> that can be specified at instantiation.
+  * When a Vector can no longer hold a new Object, it grows by the amount
+  * in <code>capacityIncrement</code>. If this value is 0, the vector doubles in
+  * size.<p>
+  *
+  * Vector implements the JDK 1.2 List interface, and is therefore a fully
+  * compliant Collection object. The iterators are fail-fast - if external
+  * code structurally modifies the vector, any operation on the iterator will
+  * then throw a {@link ConcurrentModificationException}. The Vector class is
+  * fully synchronized, but the iterators are not. So, when iterating over a
+  * vector, be sure to synchronize on the vector itself.  If you don't want the
+  * expense of synchronization, use ArrayList instead. On the other hand, the
+  * Enumeration of elements() is not thread-safe, nor is it fail-fast; so it
+  * can lead to undefined behavior even in a single thread if you modify the
+  * vector during iteration.<p>
+  *
+  * Note: Some methods, especially those specified by List, specify throwing
+  * {@link IndexOutOfBoundsException}, but it is easier to implement by
+  * throwing the subclass {@link ArrayIndexOutOfBoundsException}. Others
+  * directly specify this subclass.
+  *
+  * @author Scott G. Miller
+  * @author Bryce McKinlay
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Collection
+  * @see List
+  * @see ArrayList
+  * @see LinkedList
+  * @since 1.0
+  * @status updated to 1.4
+  */
+ public class Vector extends AbstractList
+   implements List, RandomAccess, Cloneable, Serializable
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = -2767605614048989439L;
+ 
+   /**
+    * The internal array used to hold members of a Vector. The elements are
+    * in positions 0 through elementCount - 1, and all remaining slots are null.
+    * @serial the elements
+    */
+   protected Object[] elementData;
+ 
+   /**
+    * The number of elements currently in the vector, also returned by
+    * {@link #size}.
+    * @serial the size
+    */
+   protected int elementCount;
+ 
+   /**
+    * The amount the Vector's internal array should be increased in size when
+    * a new element is added that exceeds the current size of the array,
+    * or when {@link #ensureCapacity} is called. If &lt;= 0, the vector just
+    * doubles in size.
+    * @serial the amount to grow the vector by
+    */
+   protected int capacityIncrement;
+ 
+   /**
+    * Constructs an empty vector with an initial size of 10, and
+    * a capacity increment of 0
+    */
+   public Vector()
+   {
+     this(10, 0);
+   }
+ 
+   /**
+    * Constructs a vector containing the contents of Collection, in the
+    * order given by the collection.
+    *
+    * @param c collection of elements to add to the new vector
+    * @throws NullPointerException if c is null
+    * @since 1.2
+    */
+   public Vector(Collection c)
+   {
+     elementCount = c.size();
+     elementData = c.toArray(new Object[elementCount]);
+   }
+ 
+   /**
+    * Constructs a Vector with the initial capacity and capacity
+    * increment specified.
+    *
+    * @param initialCapacity the initial size of the Vector's internal array
+    * @param capacityIncrement the amount the internal array should be
+    *        increased by when necessary, 0 to double the size
+    * @throws IllegalArgumentException if initialCapacity &lt; 0
+    */
+   public Vector(int initialCapacity, int capacityIncrement)
+   {
+     if (initialCapacity < 0)
+       throw new IllegalArgumentException();
+     elementData = new Object[initialCapacity];
+     this.capacityIncrement = capacityIncrement;
+   }
+ 
+   /**
+    * Constructs a Vector with the initial capacity specified, and a capacity
+    * increment of 0 (double in size).
+    *
+    * @param initialCapacity the initial size of the Vector's internal array
+    * @throws IllegalArgumentException if initialCapacity &lt; 0
+    */
+   public Vector(int initialCapacity)
+   {
+     this(initialCapacity, 0);
+   }
+ 
+   /**
+    * Copies the contents of the Vector into the provided array.  If the
+    * array is too small to fit all the elements in the Vector, an 
+    * {@link IndexOutOfBoundsException} is thrown without modifying the array.  
+    * Old elements in the array are overwritten by the new elements.
+    *
+    * @param a target array for the copy
+    * @throws IndexOutOfBoundsException the array is not large enough
+    * @throws NullPointerException the array is null
+    * @see #toArray(Object[])
+    */
+   public synchronized void copyInto(Object[] a)
+   {
+     System.arraycopy(elementData, 0, a, 0, elementCount);
+   }
+ 
+   /**
+    * Trims the Vector down to size.  If the internal data array is larger
+    * than the number of Objects its holding, a new array is constructed
+    * that precisely holds the elements. Otherwise this does nothing.
+    */
+   public synchronized void trimToSize()
+   {
+     // Don't bother checking for the case where size() == the capacity of the
+     // vector since that is a much less likely case; it's more efficient to
+     // not do the check and lose a bit of performance in that infrequent case
+ 
+     Object[] newArray = new Object[elementCount];
+     System.arraycopy(elementData, 0, newArray, 0, elementCount);
+     elementData = newArray;
+   }
+ 
+   /**
+    * Ensures that <code>minCapacity</code> elements can fit within this Vector.
+    * If <code>elementData</code> is too small, it is expanded as follows:
+    * If the <code>elementCount + capacityIncrement</code> is adequate, that
+    * is the new size. If <code>capacityIncrement</code> is non-zero, the
+    * candidate size is double the current. If that is not enough, the new
+    * size is <code>minCapacity</code>.
+    *
+    * @param minCapacity the desired minimum capacity, negative values ignored
+    */
+   public synchronized void ensureCapacity(int minCapacity)
+   {
+     if (elementData.length >= minCapacity)
+       return;
+ 
+     int newCapacity;
+     if (capacityIncrement <= 0)
+       newCapacity = elementData.length * 2;
+     else
+       newCapacity = elementData.length + capacityIncrement;
+ 
+     Object[] newArray = new Object[Math.max(newCapacity, minCapacity)];
+ 
+     System.arraycopy(elementData, 0, newArray, 0, elementCount);
+     elementData = newArray;
+   }
+ 
+   /**
+    * Explicitly sets the size of the vector (but not necessarily the size of
+    * the internal data array). If the new size is smaller than the old one,
+    * old values that don't fit are lost. If the new size is larger than the
+    * old one, the vector is padded with null entries.
+    *
+    * @param newSize The new size of the internal array
+    * @throws ArrayIndexOutOfBoundsException if the new size is negative
+    */
+   public synchronized void setSize(int newSize)
+   {
+     // Don't bother checking for the case where size() == the capacity of the
+     // vector since that is a much less likely case; it's more efficient to
+     // not do the check and lose a bit of performance in that infrequent case
+     modCount++;
+     ensureCapacity(newSize);
+     if (newSize < elementCount)
+       Arrays.fill(elementData, newSize, elementCount, null);
+     elementCount = newSize;
+   }
+ 
+   /**
+    * Returns the size of the internal data array (not the amount of elements
+    * contained in the Vector).
+    *
+    * @return capacity of the internal data array
+    */
+   public synchronized int capacity()
+   {
+     return elementData.length;
+   }
+ 
+   /**
+    * Returns the number of elements stored in this Vector.
+    *
+    * @return the number of elements in this Vector
+    */
+   public synchronized int size()
+   {
+     return elementCount;
+   }
+ 
+   /**
+    * Returns true if this Vector is empty, false otherwise
+    *
+    * @return true if the Vector is empty, false otherwise
+    */
+   public synchronized boolean isEmpty()
+   {
+     return elementCount == 0;
+   }
+ 
+   /**
+    * Returns an Enumeration of the elements of this Vector. The enumeration
+    * visits the elements in increasing index order, but is NOT thread-safe.
+    *
+    * @return an Enumeration
+    * @see #iterator()
+    */
+   // No need to synchronize as the Enumeration is not thread-safe!
+   public Enumeration elements()
+   {
+     return new Enumeration()
+     {
+       private int i = 0;
+ 
+       public boolean hasMoreElements()
+       {
+         return i < elementCount;
+       }
+ 
+       public Object nextElement()
+       {
+         if (i >= elementCount)
+           throw new NoSuchElementException();
+         return elementData[i++];
+       }
+     };
+   }
+ 
+   /**
+    * Returns true when <code>elem</code> is contained in this Vector.
+    *
+    * @param elem the element to check
+    * @return true if the object is contained in this Vector, false otherwise
+    */
+   public boolean contains(Object elem)
+   {
+     return indexOf(elem, 0) >= 0;
+   }
+ 
+   /**
+    * Returns the first occurrence of <code>elem</code> in the Vector, or -1 if
+    * <code>elem</code> is not found.
+    *
+    * @param elem the object to search for
+    * @return the index of the first occurrence, or -1 if not found
+    */
+   public int indexOf(Object elem)
+   {
+     return indexOf(elem, 0);
+   }
+ 
+   /**
+    * Searches the vector starting at <code>index</code> for object
+    * <code>elem</code> and returns the index of the first occurrence of this
+    * Object.  If the object is not found, or index is larger than the size
+    * of the vector, -1 is returned.
+    *
+    * @param e the Object to search for
+    * @param index start searching at this index
+    * @return the index of the next occurrence, or -1 if it is not found
+    * @throws IndexOutOfBoundsException if index &lt; 0
+    */
+   public synchronized int indexOf(Object e, int index)
+   {
+     for (int i = index; i < elementCount; i++)
+       if (equals(e, elementData[i]))
+         return i;
+     return -1;
+   }
+ 
+   /**
+    * Returns the last index of <code>elem</code> within this Vector, or -1
+    * if the object is not within the Vector.
+    *
+    * @param elem the object to search for
+    * @return the last index of the object, or -1 if not found
+    */
+   public int lastIndexOf(Object elem)
+   {
+     return lastIndexOf(elem, elementCount - 1);
+   }
+ 
+   /**
+    * Returns the index of the first occurrence of <code>elem</code>, when
+    * searching backwards from <code>index</code>.  If the object does not
+    * occur in this Vector, or index is less than 0, -1 is returned.
+    *
+    * @param e the object to search for
+    * @param index the index to start searching in reverse from
+    * @return the index of the Object if found, -1 otherwise
+    * @throws IndexOutOfBoundsException if index &gt;= size()
+    */
+   public synchronized int lastIndexOf(Object e, int index)
+   {
+     checkBoundExclusive(index);
+     for (int i = index; i >= 0; i--)
+       if (equals(e, elementData[i]))
+         return i;
+     return -1;
+   }
+ 
+   /**
+    * Returns the Object stored at <code>index</code>.
+    *
+    * @param index the index of the Object to retrieve
+    * @return the object at <code>index</code>
+    * @throws ArrayIndexOutOfBoundsException index &lt; 0 || index &gt;= size()
+    * @see #get(int)
+    */
+   public synchronized Object elementAt(int index)
+   {
+     checkBoundExclusive(index);
+     return elementData[index];
+   }
+ 
+   /**
+    * Returns the first element (index 0) in the Vector.
+    *
+    * @return the first Object in the Vector
+    * @throws NoSuchElementException the Vector is empty
+    */
+   public synchronized Object firstElement()
+   {
+     if (elementCount == 0)
+       throw new NoSuchElementException();
+ 
+     return elementData[0];
+   }
+ 
+   /**
+    * Returns the last element in the Vector.
+    *
+    * @return the last Object in the Vector
+    * @throws NoSuchElementException the Vector is empty
+    */
+   public synchronized Object lastElement()
+   {
+     if (elementCount == 0)
+       throw new NoSuchElementException();
+ 
+     return elementData[elementCount - 1];
+   }
+ 
+   /**
+    * Changes the element at <code>index</code> to be <code>obj</code>
+    *
+    * @param obj the object to store
+    * @param index the position in the Vector to store the object
+    * @throws ArrayIndexOutOfBoundsException the index is out of range
+    * @see #set(int, Object)
+    */
+   public void setElementAt(Object obj, int index)
+   {
+     set(index, obj);
+   }
+ 
+   /**
+    * Removes the element at <code>index</code>, and shifts all elements at
+    * positions greater than index to their index - 1.
+    *
+    * @param index the index of the element to remove
+    * @throws ArrayIndexOutOfBoundsException index &lt; 0 || index &gt;= size();
+    * @see #remove(int)
+    */
+   public void removeElementAt(int index)
+   {
+     remove(index);
+   }
+ 
+   /**
+    * Inserts a new element into the Vector at <code>index</code>.  Any elements
+    * at or greater than index are shifted up one position.
+    *
+    * @param obj the object to insert
+    * @param index the index at which the object is inserted
+    * @throws ArrayIndexOutOfBoundsException index &lt; 0 || index &gt; size()
+    * @see #add(int, Object)
+    */
+   public synchronized void insertElementAt(Object obj, int index)
+   {
+     checkBoundInclusive(index);
+     if (elementCount == elementData.length)
+       ensureCapacity(elementCount + 1);
+     modCount++;
+     System.arraycopy(elementData, index, elementData, index + 1,
+                      elementCount - index);
+     elementCount++;
+     elementData[index] = obj;
+   }
+ 
+   /**
+    * Adds an element to the Vector at the end of the Vector.  The vector
+    * is increased by ensureCapacity(size() + 1) if needed.
+    *
+    * @param obj the object to add to the Vector
+    */
+   public synchronized void addElement(Object obj)
+   {
+     if (elementCount == elementData.length)
+       ensureCapacity(elementCount + 1);
+     modCount++;
+     elementData[elementCount++] = obj;
+   }
+ 
+   /**
+    * Removes the first (the lowestindex) occurance of the given object from
+    * the Vector. If such a remove was performed (the object was found), true
+    * is returned. If there was no such object, false is returned.
+    *
+    * @param obj the object to remove from the Vector
+    * @return true if the Object was in the Vector, false otherwise
+    * @see #remove(Object)
+    */
+   public synchronized boolean removeElement(Object obj)
+   {
+     int idx = indexOf(obj, 0);
+     if (idx >= 0)
+       {
+         remove(idx);
+         return true;
+       }
+     return false;
+   }
+ 
+   /**
+    * Removes all elements from the Vector.  Note that this does not
+    * resize the internal data array.
+    *
+    * @see #clear()
+    */
+   public synchronized void removeAllElements()
+   {
+     if (elementCount == 0)
+       return;
+ 
+     modCount++;
+     Arrays.fill(elementData, 0, elementCount, null);
+     elementCount = 0;
+   }
+ 
+   /**
+    * Creates a new Vector with the same contents as this one. The clone is
+    * shallow; elements are not cloned.
+    *
+    * @return the clone of this vector
+    */
+   public synchronized Object clone()
+   {
+     try
+       {
+         Vector clone = (Vector) super.clone();
+         clone.elementData = (Object[]) elementData.clone();
+         return clone;
+       }
+     catch (CloneNotSupportedException ex)
+       {
+         // Impossible to get here.
+         throw new InternalError(ex.toString());
+       }
+   }
+ 
+   /**
+    * Returns an Object array with the contents of this Vector, in the order
+    * they are stored within this Vector.  Note that the Object array returned
+    * is not the internal data array, and that it holds only the elements
+    * within the Vector.  This is similar to creating a new Object[] with the
+    * size of this Vector, then calling Vector.copyInto(yourArray).
+    *
+    * @return an Object[] containing the contents of this Vector in order
+    * @since 1.2
+    */
+   public synchronized Object[] toArray()
+   {
+     Object[] newArray = new Object[elementCount];
+     copyInto(newArray);
+     return newArray;
+   }
+ 
+   /**
+    * Returns an array containing the contents of this Vector.
+    * If the provided array is large enough, the contents are copied
+    * into that array, and a null is placed in the position size().
+    * In this manner, you can obtain the size of a Vector by the position
+    * of the null element, if you know the vector does not itself contain
+    * null entries.  If the array is not large enough, reflection is used
+    * to create a bigger one of the same runtime type.
+    *
+    * @param a an array to copy the Vector into if large enough
+    * @return an array with the contents of this Vector in order
+    * @throws ArrayStoreException the runtime type of the provided array
+    *         cannot hold the elements of the Vector
+    * @throws NullPointerException if <code>a</code> is null
+    * @since 1.2
+    */
+   public synchronized Object[] toArray(Object[] a)
+   {
+     if (a.length < elementCount)
+       a = (Object[]) Array.newInstance(a.getClass().getComponentType(),
+                                        elementCount);
+     else if (a.length > elementCount)
+       a[elementCount] = null;
+     System.arraycopy(elementData, 0, a, 0, elementCount);
+     return a;
+   }
+ 
+   /**
+    * Returns the element at position <code>index</code>.
+    *
+    * @param index the position from which an element will be retrieved
+    * @return the element at that position
+    * @throws ArrayIndexOutOfBoundsException index &lt; 0 || index &gt;= size()
+    * @since 1.2
+    */
+   public Object get(int index)
+   {
+     return elementAt(index);
+   }
+ 
+   /**
+    * Puts <code>element</code> into the Vector at position <code>index</code>
+    * and returns the Object that previously occupied that position.
+    *
+    * @param index the index within the Vector to place the Object
+    * @param element the Object to store in the Vector
+    * @return the previous object at the specified index
+    * @throws ArrayIndexOutOfBoundsException index &lt; 0 || index &gt;= size()
+    * @since 1.2
+    */
+   public synchronized Object set(int index, Object element)
+   {
+     checkBoundExclusive(index);
+     Object temp = elementData[index];
+     elementData[index] = element;
+     return temp;
+   }
+ 
+   /**
+    * Adds an object to the Vector.
+    *
+    * @param o the element to add to the Vector
+    * @return true, as specified by List
+    * @since 1.2
+    */
+   public boolean add(Object o)
+   {
+     addElement(o);
+     return true;
+   }
+ 
+   /**
+    * Removes the given Object from the Vector.  If it exists, true
+    * is returned, if not, false is returned.
+    *
+    * @param o the object to remove from the Vector
+    * @return true if the Object existed in the Vector, false otherwise
+    * @since 1.2
+    */
+   public boolean remove(Object o)
+   {
+     return removeElement(o);
+   }
+ 
+   /**
+    * Adds an object at the specified index.  Elements at or above
+    * index are shifted up one position.
+    *
+    * @param index the index at which to add the element
+    * @param element the element to add to the Vector
+    * @throws ArrayIndexOutOfBoundsException index &lt; 0 || index &gt; size()
+    * @since 1.2
+    */
+   public void add(int index, Object element)
+   {
+     insertElementAt(element, index);
+   }
+ 
+   /**
+    * Removes the element at the specified index, and returns it.
+    *
+    * @param index the position from which to remove the element
+    * @return the object removed
+    * @throws ArrayIndexOutOfBoundsException index &lt; 0 || index &gt;= size()
+    * @since 1.2
+    */
+   public synchronized Object remove(int index)
+   {
+     checkBoundExclusive(index);
+     Object temp = elementData[index];
+     modCount++;
+     elementCount--;
+     if (index < elementCount)
+       System.arraycopy(elementData, index + 1, elementData, index,
+                        elementCount - index);
+     elementData[elementCount] = null;
+     return temp;
+   }
+ 
+   /**
+    * Clears all elements in the Vector and sets its size to 0.
+    */
+   public void clear()
+   {
+     removeAllElements();
+   }
+ 
+   /**
+    * Returns true if this Vector contains all the elements in c.
+    *
+    * @param c the collection to compare to
+    * @return true if this vector contains all elements of c
+    * @throws NullPointerException if c is null
+    * @since 1.2
+    */
+   public synchronized boolean containsAll(Collection c)
+   {
+     // Here just for the sychronization.
+     return super.containsAll(c);
+   }
+ 
+   /**
+    * Appends all elements of the given collection to the end of this Vector.
+    * Behavior is undefined if the collection is modified during this operation
+    * (for example, if this == c).
+    *
+    * @param c the collection to append
+    * @return true if this vector changed, in other words c was not empty
+    * @throws NullPointerException if c is null
+    * @since 1.2
+    */
+   public synchronized boolean addAll(Collection c)
+   {
+     return addAll(elementCount, c);
+   }
+ 
+   /**
+    * Remove from this vector all elements contained in the given collection.
+    *
+    * @param c the collection to filter out
+    * @return true if this vector changed
+    * @throws NullPointerException if c is null
+    * @since 1.2
+    */
+   public synchronized boolean removeAll(Collection c)
+   {
+     if (c == null)
+       throw new NullPointerException();
+ 
+     int i;
+     int j;
+     for (i = 0; i < elementCount; i++)
+       if (c.contains(elementData[i]))
+         break;
+     if (i == elementCount)
+       return false;
+ 
+     modCount++;
+     for (j = i++; i < elementCount; i++)
+       if (! c.contains(elementData[i]))
+         elementData[j++] = elementData[i];
+     elementCount -= i - j;
+     return true;
+   }
+ 
+   /**
+    * Retain in this vector only the elements contained in the given collection.
+    *
+    * @param c the collection to filter by
+    * @return true if this vector changed
+    * @throws NullPointerException if c is null
+    * @since 1.2
+    */
+   public synchronized boolean retainAll(Collection c)
+   {
+     if (c == null)
+       throw new NullPointerException();
+ 
+     int i;
+     int j;
+     for (i = 0; i < elementCount; i++)
+       if (! c.contains(elementData[i]))
+         break;
+     if (i == elementCount)
+       return false;
+ 
+     modCount++;
+     for (j = i++; i < elementCount; i++)
+       if (c.contains(elementData[i]))
+         elementData[j++] = elementData[i];
+     elementCount -= i - j;
+     return true;
+   }
+ 
+   /**
+    * Inserts all elements of the given collection at the given index of
+    * this Vector. Behavior is undefined if the collection is modified during
+    * this operation (for example, if this == c).
+    *
+    * @param c the collection to append
+    * @return true if this vector changed, in other words c was not empty
+    * @throws NullPointerException if c is null
+    * @throws ArrayIndexOutOfBoundsException index &lt; 0 || index &gt; size()
+    * @since 1.2
+    */
+   public synchronized boolean addAll(int index, Collection c)
+   {
+     checkBoundInclusive(index);
+     Iterator itr = c.iterator();
+     int csize = c.size();
+ 
+     modCount++;
+     ensureCapacity(elementCount + csize);
+     int end = index + csize;
+     if (elementCount > 0 && index != elementCount)
+       System.arraycopy(elementData, index,
+ 		       elementData, end, elementCount - index);
+     elementCount += csize;
+     for ( ; index < end; index++)
+       elementData[index] = itr.next();
+     return (csize > 0);
+   }
+ 
+   /**
+    * Compares this to the given object.
+    *
+    * @param o the object to compare to
+    * @return true if the two are equal
+    * @since 1.2
+    */
+   public synchronized boolean equals(Object o)
+   {
+     // Here just for the sychronization.
+     return super.equals(o);
+   }
+ 
+   /**
+    * Computes the hashcode of this object.
+    *
+    * @return the hashcode
+    * @since 1.2
+    */
+   public synchronized int hashCode()
+   {
+     // Here just for the sychronization.
+     return super.hashCode();
+   }
+ 
+   /**
+    * Returns a string representation of this Vector in the form
+    * "[element0, element1, ... elementN]".
+    *
+    * @return the String representation of this Vector
+    */
+   public synchronized String toString()
+   {
+     // Here just for the sychronization.
+     return super.toString();
+   }
+ 
+   /**
+    * Obtain a List view of a subsection of this list, from fromIndex
+    * (inclusive) to toIndex (exclusive). If the two indices are equal, the
+    * sublist is empty. The returned list is modifiable, and changes in one
+    * reflect in the other. If this list is structurally modified in
+    * any way other than through the returned list, the result of any subsequent
+    * operations on the returned list is undefined.
+    * <p>
+    *
+    * @param fromIndex the index that the returned list should start from
+    *        (inclusive)
+    * @param toIndex the index that the returned list should go to (exclusive)
+    * @return a List backed by a subsection of this vector
+    * @throws IndexOutOfBoundsException if fromIndex &lt; 0
+    *         || toIndex &gt; size()
+    * @throws IllegalArgumentException if fromIndex &gt; toIndex
+    * @see ConcurrentModificationException
+    * @since 1.2
+    */
+   public synchronized List subList(int fromIndex, int toIndex)
+   {
+     List sub = super.subList(fromIndex, toIndex);
+     // We must specify the correct object to synchronize upon, hence the
+     // use of a non-public API
+     return new Collections.SynchronizedList(this, sub);
+   }
+ 
+   /**
+    * Removes a range of elements from this list.
+    * Does nothing when toIndex is equal to fromIndex.
+    *
+    * @param fromIndex the index to start deleting from (inclusive)
+    * @param toIndex the index to delete up to (exclusive)
+    * @throws IndexOutOfBoundsException if fromIndex &gt; toIndex
+    */
+   // This does not need to be synchronized, because it is only called through
+   // clear() of a sublist, and clear() had already synchronized.
+   protected void removeRange(int fromIndex, int toIndex)
+   {
+     int change = toIndex - fromIndex;
+     if (change > 0)
+       {
+         modCount++;
+         System.arraycopy(elementData, toIndex, elementData, fromIndex,
+                          elementCount - toIndex);
+         int save = elementCount;
+         elementCount -= change;
+         Arrays.fill(elementData, elementCount, save, null);
+       }
+     else if (change < 0)
+       throw new IndexOutOfBoundsException();
+   }
+ 
+   /**
+    * Checks that the index is in the range of possible elements (inclusive).
+    *
+    * @param index the index to check
+    * @throws ArrayIndexOutOfBoundsException if index &gt; size
+    */
+   private void checkBoundInclusive(int index)
+   {
+     // Implementation note: we do not check for negative ranges here, since
+     // use of a negative index will cause an ArrayIndexOutOfBoundsException
+     // with no effort on our part.
+     if (index > elementCount)
+       throw new ArrayIndexOutOfBoundsException(index + " > " + elementCount);
+   }
+ 
+   /**
+    * Checks that the index is in the range of existing elements (exclusive).
+    *
+    * @param index the index to check
+    * @throws ArrayIndexOutOfBoundsException if index &gt;= size
+    */
+   private void checkBoundExclusive(int index)
+   {
+     // Implementation note: we do not check for negative ranges here, since
+     // use of a negative index will cause an ArrayIndexOutOfBoundsException
+     // with no effort on our part.
+     if (index >= elementCount)
+       throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);
+   }
+ 
+   /**
+    * Serializes this object to the given stream.
+    *
+    * @param s the stream to write to
+    * @throws IOException if the underlying stream fails
+    * @serialData just calls default write function
+    */
+   private synchronized void writeObject(ObjectOutputStream s)
+     throws IOException
+   {
+     s.defaultWriteObject();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/WeakHashMap.java gcc-4.1.0/libjava/classpath/java/util/WeakHashMap.java
*** gcc-4.0.2/libjava/classpath/java/util/WeakHashMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/WeakHashMap.java	Sat Feb  4 20:21:48 2006
***************
*** 0 ****
--- 1,881 ----
+ /* WeakHashMap -- a hashtable that keeps only weak references
+    to its keys, allowing the virtual machine to reclaim them
+    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util;
+ 
+ import java.lang.ref.ReferenceQueue;
+ import java.lang.ref.WeakReference;
+ 
+ /**
+  * A weak hash map has only weak references to the key. This means that it
+  * allows the key to be garbage collected if it is not used otherwise. If
+  * this happens, the entry will eventually disappear from the map,
+  * asynchronously.
+  *
+  * <p>A weak hash map makes most sense when the keys doesn't override the
+  * <code>equals</code> method: If there is no other reference to the
+  * key nobody can ever look up the key in this table and so the entry
+  * can be removed.  This table also works when the <code>equals</code>
+  * method is overloaded, such as String keys, but you should be prepared
+  * to deal with some entries disappearing spontaneously.
+  *
+  * <p>Other strange behaviors to be aware of: The size of this map may
+  * spontaneously shrink (even if you use a synchronized map and synchronize
+  * it); it behaves as if another thread removes entries from this table
+  * without synchronization.  The entry set returned by <code>entrySet</code>
+  * has similar phenomenons: The size may spontaneously shrink, or an
+  * entry, that was in the set before, suddenly disappears.
+  *
+  * <p>A weak hash map is not meant for caches; use a normal map, with
+  * soft references as values instead, or try {@link LinkedHashMap}.
+  *
+  * <p>The weak hash map supports null values and null keys.  The null key
+  * is never deleted from the map (except explictly of course). The
+  * performance of the methods are similar to that of a hash map.
+  *
+  * <p>The value objects are strongly referenced by this table.  So if a
+  * value object maintains a strong reference to the key (either direct
+  * or indirect) the key will never be removed from this map.  According
+  * to Sun, this problem may be fixed in a future release.  It is not
+  * possible to do it with the jdk 1.2 reference model, though.
+  *
+  * @author Jochen Hoenicke
+  * @author Eric Blake (ebb9@email.byu.edu)
+  *
+  * @see HashMap
+  * @see WeakReference
+  * @see LinkedHashMap
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class WeakHashMap extends AbstractMap implements Map
+ {
+   // WARNING: WeakHashMap is a CORE class in the bootstrap cycle. See the
+   // comments in vm/reference/java/lang/Runtime for implications of this fact.
+ 
+   /**
+    * The default capacity for an instance of HashMap.
+    * Sun's documentation mildly suggests that this (11) is the correct
+    * value.
+    */
+   private static final int DEFAULT_CAPACITY = 11;
+ 
+   /**
+    * The default load factor of a HashMap.
+    */
+   private static final float DEFAULT_LOAD_FACTOR = 0.75F;
+ 
+   /**
+    * This is used instead of the key value <i>null</i>.  It is needed
+    * to distinguish between an null key and a removed key.
+    */
+   // Package visible for use by nested classes.
+   static final Object NULL_KEY = new Object()
+   {
+     /**
+      * Sets the hashCode to 0, since that's what null would map to.
+      * @return the hash code 0
+      */
+     public int hashCode()
+     {
+       return 0;
+     }
+ 
+     /**
+      * Compares this key to the given object. Normally, an object should
+      * NEVER compare equal to null, but since we don't publicize NULL_VALUE,
+      * it saves bytecode to do so here.
+      * @return true iff o is this or null
+      */
+     public boolean equals(Object o)
+     {
+       return null == o || this == o;
+     }
+   };
+ 
+   /**
+    * The reference queue where our buckets (which are WeakReferences) are
+    * registered to.
+    */
+   private final ReferenceQueue queue;
+ 
+   /**
+    * The number of entries in this hash map.
+    */
+   // Package visible for use by nested classes.
+   int size;
+ 
+   /**
+    * The load factor of this WeakHashMap.  This is the maximum ratio of
+    * size versus number of buckets.  If size grows the number of buckets
+    * must grow, too.
+    */
+   private float loadFactor;
+ 
+   /**
+    * The rounded product of the capacity (i.e. number of buckets) and
+    * the load factor. When the number of elements exceeds the
+    * threshold, the HashMap calls <code>rehash()</code>.
+    */
+   private int threshold;
+ 
+   /**
+    * The number of structural modifications.  This is used by
+    * iterators, to see if they should fail.  This doesn't count
+    * the silent key removals, when a weak reference is cleared
+    * by the garbage collection.  Instead the iterators must make
+    * sure to have strong references to the entries they rely on.
+    */
+   // Package visible for use by nested classes.
+   int modCount;
+ 
+   /**
+    * The entry set.  There is only one instance per hashmap, namely
+    * theEntrySet.  Note that the entry set may silently shrink, just
+    * like the WeakHashMap.
+    */
+   private final class WeakEntrySet extends AbstractSet
+   {
+     /**
+      * Non-private constructor to reduce bytecode emitted.
+      */
+     WeakEntrySet()
+     {
+     }
+ 
+     /**
+      * Returns the size of this set.
+      *
+      * @return the set size
+      */
+     public int size()
+     {
+       return size;
+     }
+ 
+     /**
+      * Returns an iterator for all entries.
+      *
+      * @return an Entry iterator
+      */
+     public Iterator iterator()
+     {
+       return new Iterator()
+       {
+         /**
+          * The entry that was returned by the last
+          * <code>next()</code> call.  This is also the entry whose
+          * bucket should be removed by the <code>remove</code> call. <br>
+          *
+          * It is null, if the <code>next</code> method wasn't
+          * called yet, or if the entry was already removed.  <br>
+          *
+          * Remembering this entry here will also prevent it from
+          * being removed under us, since the entry strongly refers
+          * to the key.
+          */
+         WeakBucket.WeakEntry lastEntry;
+ 
+         /**
+          * The entry that will be returned by the next
+          * <code>next()</code> call.  It is <code>null</code> if there
+          * is no further entry. <br>
+          *
+          * Remembering this entry here will also prevent it from
+          * being removed under us, since the entry strongly refers
+          * to the key.
+          */
+         WeakBucket.WeakEntry nextEntry = findNext(null);
+ 
+         /**
+          * The known number of modification to the list, if it differs
+          * from the real number, we throw an exception.
+          */
+         int knownMod = modCount;
+ 
+         /**
+          * Check the known number of modification to the number of
+          * modifications of the table.  If it differs from the real
+          * number, we throw an exception.
+          * @throws ConcurrentModificationException if the number
+          *         of modifications doesn't match.
+          */
+         private void checkMod()
+         {
+           // This method will get inlined.
+           cleanQueue();
+           if (knownMod != modCount)
+             throw new ConcurrentModificationException(knownMod + " != "
+                                                       + modCount);
+         }
+ 
+         /**
+          * Get a strong reference to the next entry after
+          * lastBucket.
+          * @param lastEntry the previous bucket, or null if we should
+          * get the first entry.
+          * @return the next entry.
+          */
+         private WeakBucket.WeakEntry findNext(WeakBucket.WeakEntry lastEntry)
+         {
+           int slot;
+           WeakBucket nextBucket;
+           if (lastEntry != null)
+             {
+               nextBucket = lastEntry.getBucket().next;
+               slot = lastEntry.getBucket().slot;
+             }
+           else
+             {
+               nextBucket = buckets[0];
+               slot = 0;
+             }
+ 
+           while (true)
+             {
+               while (nextBucket != null)
+                 {
+                   WeakBucket.WeakEntry entry = nextBucket.getEntry();
+                   if (entry != null)
+                     // This is the next entry.
+                     return entry;
+ 
+                   // Entry was cleared, try next.
+                   nextBucket = nextBucket.next;
+                 }
+ 
+               slot++;
+               if (slot == buckets.length)
+                 // No more buckets, we are through.
+                 return null;
+ 
+               nextBucket = buckets[slot];
+             }
+         }
+ 
+         /**
+          * Checks if there are more entries.
+          * @return true, iff there are more elements.
+          * @throws ConcurrentModificationException if the hash map was
+          *         modified.
+          */
+         public boolean hasNext()
+         {
+           checkMod();
+           return nextEntry != null;
+         }
+ 
+         /**
+          * Returns the next entry.
+          * @return the next entry.
+          * @throws ConcurrentModificationException if the hash map was
+          *         modified.
+          * @throws NoSuchElementException if there is no entry.
+          */
+         public Object next()
+         {
+           checkMod();
+           if (nextEntry == null)
+             throw new NoSuchElementException();
+           lastEntry = nextEntry;
+           nextEntry = findNext(lastEntry);
+           return lastEntry;
+         }
+ 
+         /**
+          * Removes the last returned entry from this set.  This will
+          * also remove the bucket of the underlying weak hash map.
+          * @throws ConcurrentModificationException if the hash map was
+          *         modified.
+          * @throws IllegalStateException if <code>next()</code> was
+          *         never called or the element was already removed.
+          */
+         public void remove()
+         {
+           checkMod();
+           if (lastEntry == null)
+             throw new IllegalStateException();
+           modCount++;
+           internalRemove(lastEntry.getBucket());
+           lastEntry = null;
+           knownMod++;
+         }
+       };
+     }
+   }
+ 
+   /**
+    * A bucket is a weak reference to the key, that contains a strong
+    * reference to the value, a pointer to the next bucket and its slot
+    * number. <br>
+    *
+    * It would be cleaner to have a WeakReference as field, instead of
+    * extending it, but if a weak reference gets cleared, we only get
+    * the weak reference (by queue.poll) and wouldn't know where to
+    * look for this reference in the hashtable, to remove that entry.
+    *
+    * @author Jochen Hoenicke
+    */
+   private static class WeakBucket extends WeakReference
+   {
+     /**
+      * The value of this entry.  The key is stored in the weak
+      * reference that we extend.
+      */
+     Object value;
+ 
+     /**
+      * The next bucket describing another entry that uses the same
+      * slot.
+      */
+     WeakBucket next;
+ 
+     /**
+      * The slot of this entry. This should be
+      * <code>Math.abs(key.hashCode() % buckets.length)</code>.
+      *
+      * But since the key may be silently removed we have to remember
+      * the slot number.
+      *
+      * If this bucket was removed the slot is -1.  This marker will
+      * prevent the bucket from being removed twice.
+      */
+     int slot;
+ 
+     /**
+      * Creates a new bucket for the given key/value pair and the specified
+      * slot.
+      * @param key the key
+      * @param queue the queue the weak reference belongs to
+      * @param value the value
+      * @param slot the slot.  This must match the slot where this bucket
+      *        will be enqueued.
+      */
+     public WeakBucket(Object key, ReferenceQueue queue, Object value,
+                       int slot)
+     {
+       super(key, queue);
+       this.value = value;
+       this.slot = slot;
+     }
+ 
+     /**
+      * This class gives the <code>Entry</code> representation of the
+      * current bucket.  It also keeps a strong reference to the
+      * key; bad things may happen otherwise.
+      */
+     class WeakEntry implements Map.Entry
+     {
+       /**
+        * The strong ref to the key.
+        */
+       Object key;
+ 
+       /**
+        * Creates a new entry for the key.
+        * @param key the key
+        */
+       public WeakEntry(Object key)
+       {
+         this.key = key;
+       }
+ 
+       /**
+        * Returns the underlying bucket.
+        * @return the owning bucket
+        */
+       public WeakBucket getBucket()
+       {
+         return WeakBucket.this;
+       }
+ 
+       /**
+        * Returns the key.
+        * @return the key
+        */
+       public Object getKey()
+       {
+         return key == NULL_KEY ? null : key;
+       }
+ 
+       /**
+        * Returns the value.
+        * @return the value
+        */
+       public Object getValue()
+       {
+         return value;
+       }
+ 
+       /**
+        * This changes the value.  This change takes place in
+        * the underlying hash map.
+        * @param newVal the new value
+        * @return the old value
+        */
+       public Object setValue(Object newVal)
+       {
+         Object oldVal = value;
+         value = newVal;
+         return oldVal;
+       }
+ 
+       /**
+        * The hashCode as specified in the Entry interface.
+        * @return the hash code
+        */
+       public int hashCode()
+       {
+         return key.hashCode() ^ WeakHashMap.hashCode(value);
+       }
+ 
+       /**
+        * The equals method as specified in the Entry interface.
+        * @param o the object to compare to
+        * @return true iff o represents the same key/value pair
+        */
+       public boolean equals(Object o)
+       {
+         if (o instanceof Map.Entry)
+           {
+             Map.Entry e = (Map.Entry) o;
+             return WeakHashMap.equals(getKey(), e.getKey())
+               && WeakHashMap.equals(value, e.getValue());
+           }
+         return false;
+       }
+ 
+       public String toString()
+       {
+         return getKey() + "=" + value;
+       }
+     }
+ 
+     /**
+      * This returns the entry stored in this bucket, or null, if the
+      * bucket got cleared in the mean time.
+      * @return the Entry for this bucket, if it exists
+      */
+     WeakEntry getEntry()
+     {
+       final Object key = this.get();
+       if (key == null)
+         return null;
+       return new WeakEntry(key);
+     }
+   }
+ 
+   /**
+    * The entry set returned by <code>entrySet()</code>.
+    */
+   private final WeakEntrySet theEntrySet;
+ 
+   /**
+    * The hash buckets.  These are linked lists. Package visible for use in
+    * nested classes.
+    */
+   WeakBucket[] buckets;
+ 
+   /**
+    * Creates a new weak hash map with default load factor and default
+    * capacity.
+    */
+   public WeakHashMap()
+   {
+     this(DEFAULT_CAPACITY, DEFAULT_LOAD_FACTOR);
+   }
+ 
+   /**
+    * Creates a new weak hash map with default load factor and the given
+    * capacity.
+    * @param initialCapacity the initial capacity
+    * @throws IllegalArgumentException if initialCapacity is negative
+    */
+   public WeakHashMap(int initialCapacity)
+   {
+     this(initialCapacity, DEFAULT_LOAD_FACTOR);
+   }
+ 
+   /**
+    * Creates a new weak hash map with the given initial capacity and
+    * load factor.
+    * @param initialCapacity the initial capacity.
+    * @param loadFactor the load factor (see class description of HashMap).
+    * @throws IllegalArgumentException if initialCapacity is negative, or
+    *         loadFactor is non-positive
+    */
+   public WeakHashMap(int initialCapacity, float loadFactor)
+   {
+     // Check loadFactor for NaN as well.
+     if (initialCapacity < 0 || ! (loadFactor > 0))
+       throw new IllegalArgumentException();
+     if (initialCapacity == 0)
+       initialCapacity = 1;
+     this.loadFactor = loadFactor;
+     threshold = (int) (initialCapacity * loadFactor);
+     theEntrySet = new WeakEntrySet();
+     queue = new ReferenceQueue();
+     buckets = new WeakBucket[initialCapacity];
+   }
+ 
+   /**
+    * Construct a new WeakHashMap with the same mappings as the given map.
+    * The WeakHashMap has a default load factor of 0.75.
+    *
+    * @param m the map to copy
+    * @throws NullPointerException if m is null
+    * @since 1.3
+    */
+   public WeakHashMap(Map m)
+   {
+     this(m.size(), DEFAULT_LOAD_FACTOR);
+     putAll(m);
+   }
+ 
+   /**
+    * Simply hashes a non-null Object to its array index.
+    * @param key the key to hash
+    * @return its slot number
+    */
+   private int hash(Object key)
+   {
+     return Math.abs(key.hashCode() % buckets.length);
+   }
+ 
+   /**
+    * Cleans the reference queue.  This will poll all references (which
+    * are WeakBuckets) from the queue and remove them from this map.
+    * This will not change modCount, even if it modifies the map.  The
+    * iterators have to make sure that nothing bad happens.  <br>
+    *
+    * Currently the iterator maintains a strong reference to the key, so
+    * that is no problem.
+    */
+   // Package visible for use by nested classes.
+   void cleanQueue()
+   {
+     Object bucket = queue.poll();
+     while (bucket != null)
+       {
+         internalRemove((WeakBucket) bucket);
+         bucket = queue.poll();
+       }
+   }
+ 
+   /**
+    * Rehashes this hashtable.  This will be called by the
+    * <code>add()</code> method if the size grows beyond the threshold.
+    * It will grow the bucket size at least by factor two and allocates
+    * new buckets.
+    */
+   private void rehash()
+   {
+     WeakBucket[] oldBuckets = buckets;
+     int newsize = buckets.length * 2 + 1; // XXX should be prime.
+     threshold = (int) (newsize * loadFactor);
+     buckets = new WeakBucket[newsize];
+ 
+     // Now we have to insert the buckets again.
+     for (int i = 0; i < oldBuckets.length; i++)
+       {
+         WeakBucket bucket = oldBuckets[i];
+         WeakBucket nextBucket;
+         while (bucket != null)
+           {
+             nextBucket = bucket.next;
+ 
+             Object key = bucket.get();
+             if (key == null)
+               {
+                 // This bucket should be removed; it is probably
+                 // already on the reference queue.  We don't insert it
+                 // at all, and mark it as cleared.
+                 bucket.slot = -1;
+                 size--;
+               }
+             else
+               {
+                 // Add this bucket to its new slot.
+                 int slot = hash(key);
+                 bucket.slot = slot;
+                 bucket.next = buckets[slot];
+                 buckets[slot] = bucket;
+               }
+             bucket = nextBucket;
+           }
+       }
+   }
+ 
+   /**
+    * Finds the entry corresponding to key.  Since it returns an Entry
+    * it will also prevent the key from being removed under us.
+    * @param key the key, may be null
+    * @return The WeakBucket.WeakEntry or null, if the key wasn't found.
+    */
+   private WeakBucket.WeakEntry internalGet(Object key)
+   {
+     if (key == null)
+       key = NULL_KEY;
+     int slot = hash(key);
+     WeakBucket bucket = buckets[slot];
+     while (bucket != null)
+       {
+         WeakBucket.WeakEntry entry = bucket.getEntry();
+         if (entry != null && equals(key, entry.key))
+           return entry;
+ 
+         bucket = bucket.next;
+       }
+     return null;
+   }
+ 
+   /**
+    * Adds a new key/value pair to the hash map.
+    * @param key the key. This mustn't exists in the map. It may be null.
+    * @param value the value.
+    */
+   private void internalAdd(Object key, Object value)
+   {
+     if (key == null)
+       key = NULL_KEY;
+     int slot = hash(key);
+     WeakBucket bucket = new WeakBucket(key, queue, value, slot);
+     bucket.next = buckets[slot];
+     buckets[slot] = bucket;
+     size++;
+   }
+ 
+   /**
+    * Removes a bucket from this hash map, if it wasn't removed before
+    * (e.g. one time through rehashing and one time through reference queue).
+    * Package visible for use in nested classes.
+    *
+    * @param bucket the bucket to remove.
+    */
+   void internalRemove(WeakBucket bucket)
+   {
+     int slot = bucket.slot;
+     if (slot == -1)
+       // This bucket was already removed.
+       return;
+ 
+     // Mark the bucket as removed.  This is necessary, since the
+     // bucket may be enqueued later by the garbage collection, and
+     // internalRemove will be called a second time.
+     bucket.slot = -1;
+ 
+     WeakBucket prev = null;
+     WeakBucket next = buckets[slot];
+     while (next != bucket)
+       {
+          if (next == null) throw new InternalError("WeakHashMap in incosistent state");
+          prev = next; 
+          next = prev.next;
+       }
+     if (prev == null)
+       buckets[slot] = bucket.next;
+     else 
+       prev.next = bucket.next;
+ 
+     size--;
+   }
+ 
+   /**
+    * Returns the size of this hash map.  Note that the size() may shrink
+    * spontaneously, if the some of the keys were only weakly reachable.
+    * @return the number of entries in this hash map.
+    */
+   public int size()
+   {
+     cleanQueue();
+     return size;
+   }
+ 
+   /**
+    * Tells if the map is empty.  Note that the result may change
+    * spontanously, if all of the keys were only weakly reachable.
+    * @return true, iff the map is empty.
+    */
+   public boolean isEmpty()
+   {
+     cleanQueue();
+     return size == 0;
+   }
+ 
+   /**
+    * Tells if the map contains the given key.  Note that the result
+    * may change spontanously, if the key was only weakly
+    * reachable.
+    * @param key the key to look for
+    * @return true, iff the map contains an entry for the given key.
+    */
+   public boolean containsKey(Object key)
+   {
+     cleanQueue();
+     return internalGet(key) != null;
+   }
+ 
+   /**
+    * Gets the value the key is mapped to.
+    * @return the value the key was mapped to.  It returns null if
+    *         the key wasn't in this map, or if the mapped value was
+    *         explicitly set to null.
+    */
+   public Object get(Object key)
+   {
+     cleanQueue();
+     WeakBucket.WeakEntry entry = internalGet(key);
+     return entry == null ? null : entry.getValue();
+   }
+ 
+   /**
+    * Adds a new key/value mapping to this map.
+    * @param key the key, may be null
+    * @param value the value, may be null
+    * @return the value the key was mapped to previously.  It returns
+    *         null if the key wasn't in this map, or if the mapped value
+    *         was explicitly set to null.
+    */
+   public Object put(Object key, Object value)
+   {
+     cleanQueue();
+     WeakBucket.WeakEntry entry = internalGet(key);
+     if (entry != null)
+       return entry.setValue(value);
+ 
+     modCount++;
+     if (size >= threshold)
+       rehash();
+ 
+     internalAdd(key, value);
+     return null;
+   }
+ 
+   /**
+    * Removes the key and the corresponding value from this map.
+    * @param key the key. This may be null.
+    * @return the value the key was mapped to previously.  It returns
+    *         null if the key wasn't in this map, or if the mapped value was
+    *         explicitly set to null.
+    */
+   public Object remove(Object key)
+   {
+     cleanQueue();
+     WeakBucket.WeakEntry entry = internalGet(key);
+     if (entry == null)
+       return null;
+ 
+     modCount++;
+     internalRemove(entry.getBucket());
+     return entry.getValue();
+   }
+ 
+   /**
+    * Returns a set representation of the entries in this map.  This
+    * set will not have strong references to the keys, so they can be
+    * silently removed.  The returned set has therefore the same
+    * strange behaviour (shrinking size(), disappearing entries) as
+    * this weak hash map.
+    * @return a set representation of the entries.
+    */
+   public Set entrySet()
+   {
+     cleanQueue();
+     return theEntrySet;
+   }
+ 
+   /**
+    * Clears all entries from this map.
+    */
+   public void clear()
+   {
+     super.clear();
+   }
+ 
+   /**
+    * Returns true if the map contains at least one key which points to
+    * the specified object as a value.  Note that the result
+    * may change spontanously, if its key was only weakly reachable.
+    * @param value the value to search for
+    * @return true if it is found in the set.
+    */
+   public boolean containsValue(Object value)
+   {
+     cleanQueue();
+     return super.containsValue(value);
+   }
+ 
+   /**
+    * Returns a set representation of the keys in this map.  This
+    * set will not have strong references to the keys, so they can be
+    * silently removed.  The returned set has therefore the same
+    * strange behaviour (shrinking size(), disappearing entries) as
+    * this weak hash map.
+    * @return a set representation of the keys.
+    */
+   public Set keySet()
+   {
+     cleanQueue();
+     return super.keySet();
+   }
+ 
+   /**
+    * Puts all of the mappings from the given map into this one. If the
+    * key already exists in this map, its value is replaced.
+    * @param m the map to copy in
+    */
+   public void putAll(Map m)
+   {
+     super.putAll(m);
+   }
+ 
+   /**
+    * Returns a collection representation of the values in this map.  This
+    * collection will not have strong references to the keys, so mappings
+    * can be silently removed.  The returned collection has therefore the same
+    * strange behaviour (shrinking size(), disappearing entries) as
+    * this weak hash map.
+    * @return a collection representation of the values.
+    */
+   public Collection values()
+   {
+     cleanQueue();
+     return super.values();
+   }
+ } // class WeakHashMap
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/class-dependencies.conf gcc-4.1.0/libjava/classpath/java/util/class-dependencies.conf
*** gcc-4.0.2/libjava/classpath/java/util/class-dependencies.conf	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/class-dependencies.conf	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ # This property file contains dependencies of classes, methods, and
+ # field on other methods or classes.
+ #
+ # Syntax: 
+ #
+ #   <used>: <needed 1> [... <needed N>]
+ #
+ # means that when <used> is included, <needed 1> (... <needed N>) must
+ # be included as well.
+ #
+ # <needed X> and <used> are of the form
+ #
+ #   <class.methodOrField(signature)>
+ #
+ # or just
+ #
+ #   <class>
+ #
+ # Within dependencies, variables can be used. A variable is defined as 
+ # follows: 
+ #
+ #   {variable}: value1 value2 ... value<n>
+ #
+ # variables can be used on the right side of dependencies as follows: 
+ #
+ #    <used>: com.bla.blu.{variable}.Class.m()V
+ #
+ # The use of the variable will expand to <n> dependencies of the form
+ #
+ #    <used>: com.bla.blu.value1.Class.m()V
+ #    <used>: com.bla.blu.value2.Class.m()V
+ #    ...
+ #    <used>: com.bla.blu.value<n>.Class.m()V
+ #
+ # Variables can be redefined when building a system to select the 
+ # required support for features like encodings, protocols, etc. 
+ #
+ # Hints:
+ #
+ #  - For methods and fields, the signature is mandatory. For
+ #    specification, please see the Java Virtual Machine Specification by
+ #    SUN. Unlike in the spec, field signatures (types) are in brackets.
+ #
+ #  - Package names must be separated by '/' (and not '.'). E.g.,
+ #    java/lang/Class (this is necessary, because the '.' is used to
+ #    separate method or field names from classes)
+ #
+ #  - In case <needed> refers to a class, only the class itself will be
+ #    included in the resulting binary, NOT necessarily all its methods
+ #    and fields. If you want to refer to all methods and fields, you can
+ #    write class.* as an abbreviation.
+ #
+ # -  Abbreviations for packages are also possible: my/package/* means all
+ #    methods and fields of all classes in my/package.
+ #
+ # -  A line with a trailing '\' continues in the next line.
+ 
+ 
+ # All calendars supported are loaded via java/util/Calendar.getBundle or
+ # java/util/GregorianCalendar.getBundle from class 
+ #  gnu/java/locale/Calendar_{locale_id}
+ #
+ # This introduces a dependency for the localized calendars. To allow an easy 
+ # selection and addition of locales, the library variable {calendar_locales} 
+ # can be set to the set of supported calendar locales.
+ #
+ 
+ {calendar_locales}: de en nl
+ 
+ java/util/Calendar.getBundle(Ljava/util/Locale;)Ljava/util/ResourceBundle;: \
+         gnu/java/locale/Calendar.* \
+ 	gnu/java/locale/Calendar_{calendar_locales}.*
+ 
+ java/util/GregorianCalendar.getBundle(Ljava/util/Locale;)Ljava/util/ResourceBundle;: \
+         gnu/java/locale/Calendar.* \
+ 	gnu/java/locale/Calendar_{calendar_locales}.* 
+ 
+ # end of file
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/jar/Attributes.java gcc-4.1.0/libjava/classpath/java/util/jar/Attributes.java
*** gcc-4.0.2/libjava/classpath/java/util/jar/Attributes.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/jar/Attributes.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,630 ----
+ /* Attributes.java -- Represents attribute name/value pairs from a Manifest
+    Copyright (C) 2000, 2002, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.jar;
+ 
+ import java.util.Collection;
+ import java.util.Hashtable;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ /**
+  * Represents attribute name/value pairs from a Manifest as a Map.
+  * The names of an attribute are represented by the
+  * <code>Attributes.Name</code> class and should confirm to the restrictions
+  * described in that class. Note that the Map interface that Attributes
+  * implements allows you to put names and values into the attribute that don't
+  * follow these restriction (and are not really Atrribute.Names, but if you do
+  * that it might cause undefined behaviour later).
+  * <p>
+  * If you use the constants defined in the inner class Name then you can be
+  * sure that you always access the right attribute names. This makes
+  * manipulating the Attributes more or less type safe.
+  * <p>
+  * Most of the methods are wrappers to implement the Map interface. The really
+  * useful and often used methods are <code>getValue(Name)</code> and
+  * <code>getValue(String)</code>. If you actually want to set attributes you
+  * may want to use the <code>putValue(String, String)</code> method
+  * (sorry there is no public type safe <code>putValue(Name, String)</code>
+  * method).
+  *
+  * @see java.util.jar.Attributes.Name
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class Attributes implements Cloneable, Map
+ {
+ 
+   // Fields
+ 
+   /**
+    * The map that holds all the attribute name/value pairs. In this
+    * implementation it is actually a Hashtable, but that can be different in
+    * other implementations.
+    */
+   protected Map map;
+ 
+   // Inner class
+ 
+   /**
+    * Represents a name of a Manifest Attribute. Defines a couple of well
+    * know names for the general main attributes, stand alone application
+    * attributes, applet attributes, extension identification attributes,
+    * package versioning and sealing attributes, file contents attributes,
+    * bean objects attribute and signing attributes. See the 
+    * 
+    * <p>The characters of a Name must obey the following restrictions:</p>
+    * 
+    * <ul>
+    * <li>Must contain at least one character</li>
+    * <li>The first character must be alphanumeric (a-z, A-Z, 0-9)</li>
+    * <li>All other characters must be alphanumeric, a '-' or a '_'</li>
+    * </ul>
+    * 
+    * <p>When comparing Names (with <code>equals</code>) all characters are
+    * converted to lowercase. But you can get the original case sensitive
+    * string with the <code>toString()</code> method.</p>
+    *
+    * <p>Most important attributes have a constant defined in this
+    * class. Some other attributes used in Manifest files are:
+    * <ul>
+    * <li> "Created-By" - General main attribute, tool and version
+    * that created this Manifest file.</li>
+    * <li> "Java-Bean" - Bean objects attribute, whether the entry is a Bean.
+    * Value is either "true" or "false".</li>
+    * <li> "Magic" - Signing attribute, application specific signing attribute.
+    * Must be understood by the manifest parser when present to validate the
+    * jar (entry).</li>
+    * </ul>
+    *
+    * @since 1.2
+    * @author Mark Wielaard (mark@klomp.org)
+    */
+   public static class Name
+   {
+     // General Main Attributes
+ 
+     /**
+      * General main attribute -
+      * the version of this Manifest file.
+      */
+     public static final Name MANIFEST_VERSION = new Name("Manifest-Version");
+     
+     /**
+      * General main attribute -
+      * the version of the jar file signature.
+      */
+     public static final Name SIGNATURE_VERSION
+       = new Name("Signature-Version");
+     
+     /**
+      * General main attribute -
+      * (relative) file paths of the libraries/classpaths that the Classes in
+      * this jar file depend on. Paths are separated by spaces.
+      */
+     public static final Name CLASS_PATH = new Name("Class-Path");
+ 
+     /**
+      * Stand alone application attribute -
+      * the entry (without the .class ending) that is the main
+      * class of this jar file.
+      */
+     public static final Name MAIN_CLASS = new Name("Main-Class");
+ 
+     /**
+      * Applet attribute -
+      * a list of extension libraries that the applet in this
+      * jar file depends on.
+      * For every named extension there should be some Attributes in the
+      * Manifest manifest file with the following Names:
+      * <ul>
+      * <li> &lt;extension&gt;-Extension-Name:
+      * unique name of the extension</li>
+      * <li> &lt;extension&gt;-Specification-Version:
+      * minimum specification version</li>
+      * <li> &lt;extension&gt;-Implementation-Version:
+      * minimum implementation version</li>
+      * <li> &lt;extension&gt;-Implementation-Vendor-Id:
+      * unique id of implementation vendor</li>
+      * <li> &lt;extension&gt;-Implementation-URL:
+      * where the latest version of the extension library can be found</li>
+      * </ul>
+      */
+     public static final Name EXTENSION_LIST = new Name("Extension-List");
+ 
+     /**
+      * Extension identification attribute -
+      * the name if the extension library contained in the jar.
+      */
+     public static final Name EXTENSION_NAME = new Name("Extension-Name");
+     
+     /**
+      * Extension identification attribute -
+      * synonym for <code>EXTENSTION_NAME</code>.
+      */
+     public static final Name EXTENSION_INSTALLATION = EXTENSION_NAME;
+ 
+     // Package versioning and sealing attributes
+     
+     /**
+      * Package versioning -
+      * name of extension library contained in this jar.
+      */
+     public static final Name IMPLEMENTATION_TITLE
+       = new Name("Implementation-Title");
+     
+     /**
+      * Package versioning -
+      * version of the extension library contained in this jar.
+      */
+     public static final Name IMPLEMENTATION_VERSION
+       = new Name("Implementation-Version");
+     
+     /**
+      * Package versioning -
+      * name of extension library creator contained in this jar.
+      */
+     public static final Name IMPLEMENTATION_VENDOR
+       = new Name("Implementation-Vendor");
+     
+     /**
+      * Package versioning -
+      * unique id of extension library creator.
+      */
+     public static final Name IMPLEMENTATION_VENDOR_ID
+       = new Name("Implementation-Vendor-Id");
+     
+     /**
+      * Package versioning -
+      * location where this implementation can be downloaded.
+      */
+     public static final Name IMPLEMENTATION_URL
+       = new Name("Implementation-URL");
+     
+     /**
+      * Package versioning -
+      * title of the specification contained in this jar.
+      */
+     public static final Name SPECIFICATION_TITLE
+       = new Name("Specification-Title");
+ 
+     /**
+      * Package versioning -
+      * version of the specification contained in this jar.
+      */
+     public static final Name SPECIFICATION_VERSION
+       = new Name("Specification-Version");
+ 
+     /**
+      * Package versioning -
+      * organisation that maintains the specification contains in this
+      * jar.
+      */
+     public static final Name SPECIFICATION_VENDOR
+       = new Name("Specification-Vendor");
+ 
+     /**
+      * Package sealing -
+      * whether (all) package(s) is(/are) sealed. Value is either "true"
+      * or "false".
+      */
+     public static final Name SEALED = new Name("Sealed");
+ 
+     /**
+      * File contents attribute -
+      * Mime type and subtype for the jar entry.
+      */
+     public static final Name CONTENT_TYPE = new Name("Content-Type");
+ 
+     /** The (lowercase) String representation of this Name */
+     private final String name;
+ 
+     /** The original String given to the constructor */
+     private final String origName;
+ 
+     // Constructor
+ 
+     /**
+      * Creates a new Name from the given String.
+      * Throws an IllegalArgumentException if the given String is empty or
+      * contains any illegal Name characters.
+      * 
+      * @param name the name of the new Name
+      * @exception IllegalArgumentException if name isn't a valid String
+      * representation of a Name
+      * @exception NullPointerException if name is null
+      */
+     public Name(String name) throws IllegalArgumentException,
+       NullPointerException
+     {
+       // name must not be null
+       // this will throw a NullPointerException if it is
+       char chars[] = name.toCharArray();
+ 
+       // there must be at least one character
+       if (chars.length == 0)
+ 	throw new
+ 	  IllegalArgumentException
+ 	  ("There must be at least one character in a name");
+ 
+       // first character must be alphanum
+       char c = chars[0];
+       if (!((c >= 'a' && c <= 'z') ||
+ 	    (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')))
+ 	throw new
+ 	  IllegalArgumentException("First character must be alphanum");
+ 
+       // all other characters must be alphanums, '-' or '_'
+       for (int i = 1; i < chars.length; i++)
+ 	{
+ 	  c = chars[i];
+ 	  if (!((c >= 'a' && c <= 'z') ||
+ 		(c >= 'A' && c <= 'Z') ||
+ 		(c >= '0' && c <= '9') || (c == '-') || (c == '_')))
+ 	    throw new
+ 	      IllegalArgumentException
+ 	      ("Characters must be alphanums, '-' or '_'");
+ 	}
+ 
+       // Still here? Then convert to lower case and be done.
+       // Store the original name for toString();
+       this.origName = name;
+       this.name = name.toLowerCase();
+     }
+ 
+     /**
+      * Returns the hash code of the (lowercase) String representation of
+      * this Name.
+      */
+     public int hashCode()
+     {
+       return name.hashCode();
+     }
+ 
+     /**
+      * Checks if another object is equal to this Name object.
+      * Another object is equal to this Name object if it is an instance of
+      * Name and the (lowercase) string representation of the name is equal.
+      */
+     public boolean equals(Object o)
+     {
+       // Quick and dirty check
+       if (name == o)
+ 	return true;
+ 
+       try
+ 	{
+ 	  // Note that the constructor already converts the strings to
+ 	  // lowercase.
+ 	  String otherName = ((Name) o).name;
+ 	  return name.equals(otherName);
+ 	}
+       catch (ClassCastException cce)
+ 	{
+ 	  return false;
+ 	}
+       catch (NullPointerException npe)
+ 	{
+ 	  return false;
+ 	}
+     }
+ 
+     /**
+      * Returns the string representation of this Name as given to the
+      * constructor (not neccesarily the lower case representation).
+      */
+     public String toString()
+     {
+       return origName;
+     }
+   }
+ 
+   // Constructors
+ 
+   /**
+    * Creates an empty Attributes map.
+    */
+   public Attributes()
+   {
+     map = new Hashtable();
+   }
+ 
+   /**
+    * Creates an empty Attributes map with the given initial size.
+    * @param size the initial size of the underlying map
+    */
+   public Attributes(int size)
+   {
+     map = new Hashtable(size);
+   }
+ 
+   /**
+    * Creates an Attributes map with the initial values taken from another
+    * Attributes map.
+    * @param attr Attributes map to take the initial values from
+    */
+   public Attributes(Attributes attr)
+   {
+     map = new Hashtable(attr.map);
+   }
+ 
+   // Methods
+ 
+   /**
+    * Gets the value of an attribute name given as a String.
+    *
+    * @param name a String describing the Name to look for
+    * @return the value gotten from the map of null when not found
+    */
+   public String getValue(String name)
+   {
+     return (String) get(new Name(name));
+   }
+ 
+   /**
+    * Gets the value of the given attribute name.
+    *
+    * @param name the Name to look for
+    * @return the value gotten from the map of null when not found
+    */
+   public String getValue(Name name)
+   {
+     return (String) get(name);
+   }
+ 
+   /**
+    * Stores an attribute name (represented by a String) and value in this
+    * Attributes map.
+    * When the (case insensitive string) name already exists the value is
+    * replaced and the old value is returned.
+    *
+    * @param name a (case insensitive) String representation of the attribite
+    * name to add/replace
+    * @param value the (new) value of the attribute name
+    * @returns the old value of the attribute name or null if it didn't exist
+    * yet
+    */
+   public String putValue(String name, String value)
+   {
+     return putValue(new Name(name), value);
+   }
+ 
+   /**
+    * Stores an attribute name (represented by a String) and value in this
+    * Attributes map.
+    * When the name already exists the value is replaced and the old value
+    * is returned.
+    * <p>
+    * I don't know why there is no public method with this signature. I think
+    * there should be one.
+    *
+    * @param name the attribite name to add/replace
+    * @param value the (new) value of the attribute name
+    * @returns the old value of the attribute name or null if it didn't exist
+    * yet
+    */
+   String putValue(Name name, String value)
+   {
+     return (String) put(name, value);
+   }
+ 
+   // Methods from Cloneable interface
+ 
+   /**
+    * Return a clone of this attribute map.
+    */
+   public Object clone()
+   {
+     return new Attributes(this);
+   }
+ 
+   // Methods from Map interface
+ 
+   /**
+    * Removes all attributes.
+    */
+   public void clear()
+   {
+     map.clear();
+   }
+ 
+   /**
+    * Checks to see if there is an attribute with the specified name.
+    * XXX - what if the object is a String?
+    *
+    * @param attrName the name of the attribute to check
+    * @return true if there is an attribute with the specified name, false
+    * otherwise
+    */
+   public boolean containsKey(Object attrName)
+   {
+     return map.containsKey(attrName);
+   }
+ 
+   /**
+    * Checks to see if there is an attribute name with the specified value.
+    *
+    * @param attrValue the value of a attribute to check
+    * @return true if there is an attribute name with the specified value,
+    * false otherwise
+    */
+   public boolean containsValue(Object attrValue)
+   {
+     return map.containsValue(attrValue);
+   }
+ 
+   /**
+    * Gives a Set of attribute name and values pairs as MapEntries.
+    * @see java.util.Map.Entry
+    * @see java.util.Map#entrySet()
+    *
+    * @return a set of attribute name value pairs
+    */
+   public Set entrySet()
+   {
+     return map.entrySet();
+   }
+ 
+   /**
+    * Checks to see if two Attributes are equal. The supplied object must be
+    * a real instance of Attributes and contain the same attribute name/value
+    * pairs.
+    *
+    * @param o another Attribute object which should be checked for equality
+    * @return true if the object is an instance of Attributes and contains the
+    * same name/value pairs, false otherwise
+    */
+   public boolean equals(Object o)
+   {
+     // quick and dirty check
+     if (this == o)
+       return true;
+ 
+     try
+       {
+ 	return map.equals(((Attributes) o).map);
+       }
+     catch (ClassCastException cce)
+       {
+ 	return false;
+       }
+     catch (NullPointerException npe)
+       {
+ 	return false;
+       }
+   }
+ 
+   /**
+    * Gets the value of a specified attribute name.
+    * XXX - what if the object is a String?
+    *
+    * @param attrName the name of the attribute we want the value of
+    * @return the value of the specified attribute name or null when there is
+    * no such attribute name
+    */
+   public Object get(Object attrName)
+   {
+     return map.get(attrName);
+   }
+ 
+   /**
+    * Returns the hashcode of the attribute name/value map.
+    */
+   public int hashCode()
+   {
+     return map.hashCode();
+   }
+ 
+   /**
+    * Returns true if there are no attributes set, false otherwise.
+    */
+   public boolean isEmpty()
+   {
+     return map.isEmpty();
+   }
+ 
+   /**
+    * Gives a Set of all the values of defined attribute names.
+    */
+   public Set keySet()
+   {
+     return map.keySet();
+   }
+ 
+   /**
+    * Adds or replaces a attribute name/value pair.
+    * XXX - What if the name is a string? What if the name is neither a Name
+    * nor a String? What if the value is not a string?
+    *
+    * @param name the name of the attribute
+    * @param value the (new) value of the attribute
+    * @return the old value of the attribute or null when there was no old
+    * attribute with this name
+    */
+   public Object put(Object name, Object value)
+   {
+     return map.put(name, value);
+   }
+ 
+   /**
+    * Adds or replaces all attribute name/value pairs from another
+    * Attributes object to this one. The supplied Map must be an instance of
+    * Attributes.
+    *
+    * @param attr the Attributes object to merge with this one
+    * @exception ClassCastException if the supplied map is not an instance of
+    * Attributes
+    */
+   public void putAll(Map attr)
+   {
+     if (!(attr instanceof Attributes))
+       {
+ 	throw new
+ 	  ClassCastException("Supplied Map is not an instance of Attributes");
+       }
+     map.putAll(attr);
+   }
+ 
+   /**
+    * Remove a attribute name/value pair.
+    * XXX - What if the name is a String?
+    *
+    * @param name the name of the attribute name/value pair to remove
+    * @return the old value of the attribute or null if the attribute didn't
+    * exist
+    */
+   public Object remove(Object name)
+   {
+     return map.remove(name);
+   }
+ 
+   /**
+    * Returns the number of defined attribute name/value pairs.
+    */
+   public int size()
+   {
+     return map.size();
+   }
+ 
+   /**
+    * Returns all the values of the defined attribute name/value pairs as a
+    * Collection.
+    */
+   public Collection values()
+   {
+     return map.values();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/jar/JarEntry.java gcc-4.1.0/libjava/classpath/java/util/jar/JarEntry.java
*** gcc-4.0.2/libjava/classpath/java/util/jar/JarEntry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/jar/JarEntry.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,165 ----
+ /* JarEntry.java - Represents an entry in a jar file
+    Copyright (C) 2000 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.jar;
+ 
+ import java.io.IOException;
+ import java.security.cert.Certificate;
+ import java.util.zip.ZipEntry;
+ 
+ /**
+  * Extension to a ZipEntry that contains manifest attributes and certificates.
+  * Both the Atrributes and the Certificates can be null when not set.
+  * Note that the <code>getCertificates()</code> method only returns a
+  * valid value after all of the data of the entry has been read.
+  * <p>
+  * There are no public methods to set the attributes or certificate of an
+  * Entru. Only JarEntries created by the classes in <code>java.util.jar</code>
+  * will have these properties set.
+  *
+  * @since 1.2
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ 
+ public class JarEntry extends ZipEntry
+ {
+   // (Package local) fields
+ 
+   Attributes attr;
+   Certificate certs[];
+ 
+   // Constructors
+ 
+   /**
+    * Creates a new JarEntry with the specified name and no attributes or
+    * or certificates. Calls <code>super(name)</code> so all other (zip)entry
+    * fields are null or -1.
+    *
+    * @param name the name of the new jar entry
+    * @exception NullPointerException when the supplied name is null
+    * @exception IllegalArgumentException when the supplied name is longer
+    * than 65535 bytes
+    */
+   public JarEntry(String name) throws NullPointerException,
+     IllegalArgumentException
+   {
+     super(name);
+     attr = null;
+     certs = null;
+   }
+ 
+   /**
+    * Creates a new JarEntry with the specified ZipEntry as template for
+    * all properties of the entry. Both attributes and certificates will be
+    * null.
+    *
+    * @param entry the ZipEntry whose fields should be copied
+    */
+   public JarEntry(ZipEntry entry)
+   {
+     super(entry);
+     attr = null;
+     certs = null;
+   }
+ 
+   /**
+    * Creates a new JarEntry with the specified JarEntry as template for
+    * all properties of the entry.
+    *
+    * @param entry the jarEntry whose fields should be copied
+    */
+   public JarEntry(JarEntry entry)
+   {
+     super(entry);
+     try
+       {
+ 	attr = entry.getAttributes();
+       }
+     catch (IOException _)
+       {
+       }
+     certs = entry.getCertificates();
+   }
+ 
+   // Methods
+ 
+   /**
+    * Returns a copy of the Attributes set for this entry.
+    * When no Attributes are set in the manifest null is returned.
+    *
+    * @return a copy of the Attributes set for this entry
+    * @exception IOException This will never be thrown. It is here for
+    * binary compatibility.
+    */
+   public Attributes getAttributes() throws IOException
+   {
+     if (attr != null)
+       {
+ 	return (Attributes) attr.clone();
+       }
+     else
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns a copy of the certificates set for this entry.
+    * When no certificates are set or when not all data of this entry has
+    * been read null is returned.
+    * <p>
+    * To make sure that this call returns a valid value you must read all
+    * data from the JarInputStream for this entry.
+    * When you don't need the data for an entry but want to know the
+    * certificates that are set for the entry then you can skip all data by
+    * calling <code>skip(entry.getSize())</code> on the JarInputStream for
+    * the entry.
+    *
+    * @return a copy of the certificates set for this entry
+    */
+   public Certificate[] getCertificates()
+   {
+     if (certs != null)
+       {
+ 	return (Certificate[])certs.clone();
+       }
+     else
+       {
+ 	return null;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/jar/JarException.java gcc-4.1.0/libjava/classpath/java/util/jar/JarException.java
*** gcc-4.0.2/libjava/classpath/java/util/jar/JarException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/jar/JarException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,77 ----
+ /* JarException.java -- thrown to indicate an problem with a jar file
+    Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.jar;
+ 
+ import java.util.zip.ZipException;
+ 
+ /**
+  * This exception is thrown to indicate an problem with a jar file.
+  * Note that none of the methods in the java.util.jar package actually declare
+  * to throw this exception, most just declare that they throw an IOException
+  * which is super class of JarException.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @since 1.2
+  */
+ public class JarException extends ZipException
+ {
+   /**
+    * Compatible with JDK 1.2+.
+    */
+   private static final long serialVersionUID = 7159778400963954473L;
+ 
+   /**
+    * Create a new JarException without a descriptive error message.
+    */
+   public JarException()
+   {
+   }
+ 
+   /**
+    * Create a new JarException with a descriptive error message indicating
+    * what went wrong. This message can later be retrieved by calling the
+    * <code>getMessage()</code> method.
+    *
+    * @param message The descriptive error message
+    * @see #getMessage()
+    */
+   public JarException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/jar/JarFile.java gcc-4.1.0/libjava/classpath/java/util/jar/JarFile.java
*** gcc-4.0.2/libjava/classpath/java/util/jar/JarFile.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/jar/JarFile.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,1059 ----
+ /* JarFile.java - Representation of a jar file
+    Copyright (C) 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.jar;
+ 
+ import gnu.java.io.Base64InputStream;
+ import gnu.java.security.OID;
+ import gnu.java.security.pkcs.PKCS7SignedData;
+ import gnu.java.security.pkcs.SignerInfo;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.File;
+ import java.io.FileNotFoundException;
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.security.InvalidKeyException;
+ import java.security.MessageDigest;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.Signature;
+ import java.security.SignatureException;
+ import java.security.cert.CRLException;
+ import java.security.cert.Certificate;
+ import java.security.cert.CertificateException;
+ import java.security.cert.X509Certificate;
+ import java.util.Arrays;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.zip.ZipEntry;
+ import java.util.zip.ZipException;
+ import java.util.zip.ZipFile;
+ 
+ /**
+  * Representation of a jar file.
+  * <p>
+  * Note that this class is not a subclass of java.io.File but a subclass of
+  * java.util.zip.ZipFile and you can only read JarFiles with it (although
+  * there are constructors that take a File object).
+  *
+  * @since 1.2
+  * @author Mark Wielaard (mark@klomp.org)
+  * @author Casey Marshall (csm@gnu.org) wrote the certificate and entry
+  *  verification code.
+  */
+ public class JarFile extends ZipFile
+ {
+   // Fields
+ 
+   /** The name of the manifest entry: META-INF/MANIFEST.MF */
+   public static final String MANIFEST_NAME = "META-INF/MANIFEST.MF";
+ 
+   /** The META-INF directory entry. */
+   private static final String META_INF = "META-INF/";
+ 
+   /** The suffix for PKCS7 DSA signature entries. */
+   private static final String PKCS7_DSA_SUFFIX = ".DSA";
+ 
+   /** The suffix for PKCS7 RSA signature entries. */
+   private static final String PKCS7_RSA_SUFFIX = ".RSA";
+ 
+   /** The suffix for digest attributes. */
+   private static final String DIGEST_KEY_SUFFIX = "-Digest";
+ 
+   /** The suffix for signature files. */
+   private static final String SF_SUFFIX = ".SF";
+ 
+   // Signature OIDs.
+   private static final OID MD2_OID = new OID("1.2.840.113549.2.2");
+   private static final OID MD4_OID = new OID("1.2.840.113549.2.4");
+   private static final OID MD5_OID = new OID("1.2.840.113549.2.5");
+   private static final OID SHA1_OID = new OID("1.3.14.3.2.26");
+   private static final OID DSA_ENCRYPTION_OID = new OID("1.2.840.10040.4.1");
+   private static final OID RSA_ENCRYPTION_OID = new OID("1.2.840.113549.1.1.1");
+ 
+   /**
+    * The manifest of this file, if any, otherwise null.
+    * Read when first needed.
+    */
+   private Manifest manifest;
+ 
+   /** Whether to verify the manifest and all entries. */
+   boolean verify;
+ 
+   /** Whether the has already been loaded. */
+   private boolean manifestRead = false;
+ 
+   /** Whether the signature files have been loaded. */
+   boolean signaturesRead = false;
+ 
+   /**
+    * A map between entry names and booleans, signaling whether or
+    * not that entry has been verified.
+    * Only be accessed with lock on this JarFile*/
+   HashMap verified = new HashMap();
+ 
+   /**
+    * A mapping from entry name to certificates, if any.
+    * Only accessed with lock on this JarFile.
+    */
+   HashMap entryCerts;
+ 
+   static boolean DEBUG = false;
+   static void debug(Object msg)
+   {
+     System.err.print(JarFile.class.getName());
+     System.err.print(" >>> ");
+     System.err.println(msg);
+   }
+ 
+   // Constructors
+ 
+   /**
+    * Creates a new JarFile. All jar entries are verified (when a Manifest file
+    * for this JarFile exists). You need to actually open and read the complete
+    * jar entry (with <code>getInputStream()</code>) to check its signature.
+    *
+    * @param fileName the name of the file to open
+    * @exception FileNotFoundException if the fileName cannot be found
+    * @exception IOException if another IO exception occurs while reading
+    */
+   public JarFile(String fileName) throws FileNotFoundException, IOException
+   {
+     this(fileName, true);
+   }
+ 
+   /**
+    * Creates a new JarFile. If verify is true then all jar entries are
+    * verified (when a Manifest file for this JarFile exists). You need to
+    * actually open and read the complete jar entry
+    * (with <code>getInputStream()</code>) to check its signature.
+    *
+    * @param fileName the name of the file to open
+    * @param verify checks manifest and entries when true and a manifest
+    * exists, when false no checks are made
+    * @exception FileNotFoundException if the fileName cannot be found
+    * @exception IOException if another IO exception occurs while reading
+    */
+   public JarFile(String fileName, boolean verify) throws
+     FileNotFoundException, IOException
+   {
+     super(fileName);
+     if (verify)
+       {
+ 	manifest = readManifest();
+ 	verify();
+       }
+   }
+ 
+   /**
+    * Creates a new JarFile. All jar entries are verified (when a Manifest file
+    * for this JarFile exists). You need to actually open and read the complete
+    * jar entry (with <code>getInputStream()</code>) to check its signature.
+    *
+    * @param file the file to open as a jar file
+    * @exception FileNotFoundException if the file does not exits
+    * @exception IOException if another IO exception occurs while reading
+    */
+   public JarFile(File file) throws FileNotFoundException, IOException
+   {
+     this(file, true);
+   }
+ 
+   /**
+    * Creates a new JarFile. If verify is true then all jar entries are
+    * verified (when a Manifest file for this JarFile exists). You need to
+    * actually open and read the complete jar entry
+    * (with <code>getInputStream()</code>) to check its signature.
+    *
+    * @param file the file to open to open as a jar file
+    * @param verify checks manifest and entries when true and a manifest
+    * exists, when false no checks are made
+    * @exception FileNotFoundException if file does not exist
+    * @exception IOException if another IO exception occurs while reading
+    */
+   public JarFile(File file, boolean verify) throws FileNotFoundException,
+     IOException
+   {
+     super(file);
+     if (verify)
+       {
+ 	manifest = readManifest();
+ 	verify();
+       }
+   }
+ 
+   /**
+    * Creates a new JarFile with the indicated mode. If verify is true then
+    * all jar entries are verified (when a Manifest file for this JarFile
+    * exists). You need to actually open and read the complete jar entry
+    * (with <code>getInputStream()</code>) to check its signature.
+    * manifest and if the manifest exists and verify is true verfies it.
+    *
+    * @param file the file to open to open as a jar file
+    * @param verify checks manifest and entries when true and a manifest
+    * exists, when false no checks are made
+    * @param mode either ZipFile.OPEN_READ or
+    *             (ZipFile.OPEN_READ | ZipFile.OPEN_DELETE)
+    * @exception FileNotFoundException if the file does not exist
+    * @exception IOException if another IO exception occurs while reading
+    * @exception IllegalArgumentException when given an illegal mode
+    * 
+    * @since 1.3
+    */
+   public JarFile(File file, boolean verify, int mode) throws
+     FileNotFoundException, IOException, IllegalArgumentException
+   {
+     super(file, mode);
+     if (verify)
+       {
+ 	manifest = readManifest();
+ 	verify();
+       }
+   }
+ 
+   // Methods
+ 
+   /**
+    * XXX - should verify the manifest file
+    */
+   private void verify()
+   {
+     // only check if manifest is not null
+     if (manifest == null)
+       {
+ 	verify = false;
+ 	return;
+       }
+ 
+     verify = true;
+     // XXX - verify manifest
+   }
+ 
+   /**
+    * Parses and returns the manifest if it exists, otherwise returns null.
+    */
+   private Manifest readManifest()
+   {
+     try
+       {
+ 	ZipEntry manEntry = super.getEntry(MANIFEST_NAME);
+ 	if (manEntry != null)
+ 	  {
+ 	    InputStream in = super.getInputStream(manEntry);
+ 	    manifestRead = true;
+ 	    return new Manifest(in);
+ 	  }
+ 	else
+ 	  {
+ 	    manifestRead = true;
+ 	    return null;
+ 	  }
+       }
+     catch (IOException ioe)
+       {
+ 	manifestRead = true;
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns a enumeration of all the entries in the JarFile.
+    * Note that also the Jar META-INF entries are returned.
+    *
+    * @exception IllegalStateException when the JarFile is already closed
+    */
+   public Enumeration entries() throws IllegalStateException
+   {
+     return new JarEnumeration(super.entries(), this);
+   }
+ 
+   /**
+    * Wraps a given Zip Entries Enumeration. For every zip entry a
+    * JarEntry is created and the corresponding Attributes are looked up.
+    */
+   private static class JarEnumeration implements Enumeration
+   {
+ 
+     private final Enumeration entries;
+     private final JarFile jarfile;
+ 
+     JarEnumeration(Enumeration e, JarFile f)
+     {
+       entries = e;
+       jarfile = f;
+     }
+ 
+     public boolean hasMoreElements()
+     {
+       return entries.hasMoreElements();
+     }
+ 
+     public Object nextElement()
+     {
+       ZipEntry zip = (ZipEntry) entries.nextElement();
+       JarEntry jar = new JarEntry(zip);
+       Manifest manifest;
+       try
+ 	{
+ 	  manifest = jarfile.getManifest();
+ 	}
+       catch (IOException ioe)
+ 	{
+ 	  manifest = null;
+ 	}
+ 
+       if (manifest != null)
+ 	{
+ 	  jar.attr = manifest.getAttributes(jar.getName());
+ 	}
+ 
+       synchronized(jarfile)
+ 	{
+ 	  if (jarfile.verify && !jarfile.signaturesRead)
+ 	    try
+ 	      {
+ 		jarfile.readSignatures();
+ 	      }
+ 	    catch (IOException ioe)
+ 	      {
+ 		if (JarFile.DEBUG)
+ 		  {
+ 		    JarFile.debug(ioe);
+ 		    ioe.printStackTrace();
+ 		  }
+ 		jarfile.signaturesRead = true; // fudge it.
+ 	      }
+ 
+ 	  // Include the certificates only if we have asserted that the
+ 	  // signatures are valid. This means the certificates will not be
+ 	  // available if the entry hasn't been read yet.
+ 	  if (jarfile.entryCerts != null
+ 	      && jarfile.verified.get(zip.getName()) == Boolean.TRUE)
+ 	    {
+ 	      Set certs = (Set) jarfile.entryCerts.get(jar.getName());
+ 	      if (certs != null)
+ 		jar.certs = (Certificate[])
+ 		  certs.toArray(new Certificate[certs.size()]);
+ 	    }
+ 	}
+       return jar;
+     }
+   }
+ 
+   /**
+    * XXX
+    * It actually returns a JarEntry not a zipEntry
+    * @param name XXX
+    */
+   public synchronized ZipEntry getEntry(String name)
+   {
+     ZipEntry entry = super.getEntry(name);
+     if (entry != null)
+       {
+ 	JarEntry jarEntry = new JarEntry(entry);
+ 	Manifest manifest;
+ 	try
+ 	  {
+ 	    manifest = getManifest();
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	    manifest = null;
+ 	  }
+ 
+ 	if (manifest != null)
+ 	  {
+ 	    jarEntry.attr = manifest.getAttributes(name);
+           }
+ 
+ 	if (verify && !signaturesRead)
+ 	  try
+ 	    {
+ 	      readSignatures();
+ 	    }
+ 	  catch (IOException ioe)
+ 	    {
+ 	      if (DEBUG)
+ 		{
+ 		  debug(ioe);
+ 		  ioe.printStackTrace();
+ 		}
+ 	      signaturesRead = true;
+ 	    }
+ 	// See the comments in the JarEnumeration for why we do this
+ 	// check.
+ 	if (DEBUG)
+ 	  debug("entryCerts=" + entryCerts + " verified " + name
+ 		+ " ? " + verified.get(name));
+ 	if (entryCerts != null && verified.get(name) == Boolean.TRUE)
+ 	  {
+ 	    Set certs = (Set) entryCerts.get(name);
+ 	    if (certs != null)
+ 	      jarEntry.certs = (Certificate[])
+ 		certs.toArray(new Certificate[certs.size()]);
+ 	  }
+ 	return jarEntry;
+       }
+     return null;
+   }
+ 
+   /**
+    * Returns an input stream for the given entry. If configured to
+    * verify entries, the input stream returned will verify them while
+    * the stream is read, but only on the first time.
+    *
+    * @param entry The entry to get the input stream for.
+    * @exception ZipException XXX
+    * @exception IOException XXX
+    */
+   public synchronized InputStream getInputStream(ZipEntry entry) throws
+     ZipException, IOException
+   {
+     // If we haven't verified the hash, do it now.
+     if (!verified.containsKey(entry.getName()) && verify)
+       {
+         if (DEBUG)
+           debug("reading and verifying " + entry);
+         return new EntryInputStream(entry, super.getInputStream(entry), this);
+       }
+     else
+       {
+         if (DEBUG)
+           debug("reading already verified entry " + entry);
+         if (verify && verified.get(entry.getName()) == Boolean.FALSE)
+           throw new ZipException("digest for " + entry + " is invalid");
+         return super.getInputStream(entry);
+       }
+   }
+ 
+   /**
+    * Returns the JarEntry that belongs to the name if such an entry
+    * exists in the JarFile. Returns null otherwise
+    * Convenience method that just casts the result from <code>getEntry</code>
+    * to a JarEntry.
+    *
+    * @param name the jar entry name to look up
+    * @return the JarEntry if it exists, null otherwise
+    */
+   public JarEntry getJarEntry(String name)
+   {
+     return (JarEntry) getEntry(name);
+   }
+ 
+   /**
+    * Returns the manifest for this JarFile or null when the JarFile does not
+    * contain a manifest file.
+    */
+   public synchronized Manifest getManifest() throws IOException
+   {
+     if (!manifestRead)
+       manifest = readManifest();
+ 
+     return manifest;
+   }
+ 
+   // Only called with lock on this JarFile.
+   // Package private for use in inner classes.
+   void readSignatures() throws IOException
+   {
+     Map pkcs7Dsa = new HashMap();
+     Map pkcs7Rsa = new HashMap();
+     Map sigFiles = new HashMap();
+ 
+     // Phase 1: Read all signature files. These contain the user
+     // certificates as well as the signatures themselves.
+     for (Enumeration e = super.entries(); e.hasMoreElements(); )
+       {
+         ZipEntry ze = (ZipEntry) e.nextElement();
+         String name = ze.getName();
+         if (name.startsWith(META_INF))
+           {
+             String alias = name.substring(META_INF.length());
+             if (alias.lastIndexOf('.') >= 0)
+               alias = alias.substring(0, alias.lastIndexOf('.'));
+ 
+             if (name.endsWith(PKCS7_DSA_SUFFIX) || name.endsWith(PKCS7_RSA_SUFFIX))
+               {
+                 if (DEBUG)
+                   debug("reading PKCS7 info from " + name + ", alias=" + alias);
+                 PKCS7SignedData sig = null;
+                 try
+                   {
+                     sig = new PKCS7SignedData(super.getInputStream(ze));
+                   }
+                 catch (CertificateException ce)
+                   {
+                     IOException ioe = new IOException("certificate parsing error");
+                     ioe.initCause(ce);
+                     throw ioe;
+                   }
+                 catch (CRLException crle)
+                   {
+                     IOException ioe = new IOException("CRL parsing error");
+                     ioe.initCause(crle);
+                     throw ioe;
+                   }
+                 if (name.endsWith(PKCS7_DSA_SUFFIX))
+                   pkcs7Dsa.put(alias, sig);
+                 else if (name.endsWith(PKCS7_RSA_SUFFIX))
+                   pkcs7Rsa.put(alias, sig);
+               }
+             else if (name.endsWith(SF_SUFFIX))
+               {
+                 if (DEBUG)
+                   debug("reading signature file for " + alias + ": " + name);
+                 Manifest sf = new Manifest(super.getInputStream(ze));
+                 sigFiles.put(alias, sf);
+                 if (DEBUG)
+                   debug("result: " + sf);
+               }
+           }
+       }
+ 
+     // Phase 2: verify the signatures on any signature files.
+     Set validCerts = new HashSet();
+     Map entryCerts = new HashMap();
+     for (Iterator it = sigFiles.entrySet().iterator(); it.hasNext(); )
+       {
+         int valid = 0;
+         Map.Entry e = (Map.Entry) it.next();
+         String alias = (String) e.getKey();
+ 
+         PKCS7SignedData sig = (PKCS7SignedData) pkcs7Dsa.get(alias);
+         if (sig != null)
+           {
+             Certificate[] certs = sig.getCertificates();
+             Set signerInfos = sig.getSignerInfos();
+             for (Iterator it2 = signerInfos.iterator(); it2.hasNext(); )
+               verify(certs, (SignerInfo) it2.next(), alias, validCerts);
+           }
+ 
+         sig = (PKCS7SignedData) pkcs7Rsa.get(alias);
+         if (sig != null)
+           {
+             Certificate[] certs = sig.getCertificates();
+             Set signerInfos = sig.getSignerInfos();
+             for (Iterator it2 = signerInfos.iterator(); it2.hasNext(); )
+               verify(certs, (SignerInfo) it2.next(), alias, validCerts);
+           }
+ 
+         // It isn't a signature for anything. Punt it.
+         if (validCerts.isEmpty())
+           {
+             it.remove();
+             continue;
+           }
+ 
+         entryCerts.put(e.getValue(), new HashSet(validCerts));
+         validCerts.clear();
+       }
+ 
+     // Phase 3: verify the signature file signatures against the manifest,
+     // mapping the entry name to the target certificates.
+     this.entryCerts = new HashMap();
+     for (Iterator it = entryCerts.entrySet().iterator(); it.hasNext(); )
+       {
+         Map.Entry e = (Map.Entry) it.next();
+         Manifest sigfile = (Manifest) e.getKey();
+         Map entries = sigfile.getEntries();
+         Set certificates = (Set) e.getValue();
+ 
+         for (Iterator it2 = entries.entrySet().iterator(); it2.hasNext(); )
+           {
+             Map.Entry e2 = (Map.Entry) it2.next();
+             String entryname = String.valueOf(e2.getKey());
+             Attributes attr = (Attributes) e2.getValue();
+             if (verifyHashes(entryname, attr))
+               {
+                 if (DEBUG)
+                   debug("entry " + entryname + " has certificates " + certificates);
+                 Set s = (Set) this.entryCerts.get(entryname);
+                 if (s != null)
+                   s.addAll(certificates);
+                 else
+                   this.entryCerts.put(entryname, new HashSet(certificates));
+               }
+           }
+       }
+ 
+     signaturesRead = true;
+   }
+ 
+   /**
+    * Tell if the given signer info is over the given alias's signature file,
+    * given one of the certificates specified.
+    */
+   private void verify(Certificate[] certs, SignerInfo signerInfo,
+                       String alias, Set validCerts)
+   {
+     Signature sig = null;
+     try
+       {
+         OID alg = signerInfo.getDigestEncryptionAlgorithmId();
+         if (alg.equals(DSA_ENCRYPTION_OID))
+           {
+             if (!signerInfo.getDigestAlgorithmId().equals(SHA1_OID))
+               return;
+             sig = Signature.getInstance("SHA1withDSA");
+           }
+         else if (alg.equals(RSA_ENCRYPTION_OID))
+           {
+             OID hash = signerInfo.getDigestAlgorithmId();
+             if (hash.equals(MD2_OID))
+               sig = Signature.getInstance("md2WithRsaEncryption");
+             else if (hash.equals(MD4_OID))
+               sig = Signature.getInstance("md4WithRsaEncryption");
+             else if (hash.equals(MD5_OID))
+               sig = Signature.getInstance("md5WithRsaEncryption");
+             else if (hash.equals(SHA1_OID))
+               sig = Signature.getInstance("sha1WithRsaEncryption");
+             else
+               return;
+           }
+         else
+           {
+             if (DEBUG)
+               debug("unsupported signature algorithm: " + alg);
+             return;
+           }
+       }
+     catch (NoSuchAlgorithmException nsae)
+       {
+         if (DEBUG)
+           {
+             debug(nsae);
+             nsae.printStackTrace();
+           }
+         return;
+       }
+     ZipEntry sigFileEntry = super.getEntry(META_INF + alias + SF_SUFFIX);
+     if (sigFileEntry == null)
+       return;
+     for (int i = 0; i < certs.length; i++)
+       {
+         if (!(certs[i] instanceof X509Certificate))
+           continue;
+         X509Certificate cert = (X509Certificate) certs[i];
+         if (!cert.getIssuerX500Principal().equals(signerInfo.getIssuer()) ||
+             !cert.getSerialNumber().equals(signerInfo.getSerialNumber()))
+           continue;
+         try
+           {
+             sig.initVerify(cert.getPublicKey());
+             InputStream in = super.getInputStream(sigFileEntry);
+             if (in == null)
+               continue;
+             byte[] buf = new byte[1024];
+             int len = 0;
+             while ((len = in.read(buf)) != -1)
+               sig.update(buf, 0, len);
+             if (sig.verify(signerInfo.getEncryptedDigest()))
+               {
+                 if (DEBUG)
+                   debug("signature for " + cert.getSubjectDN() + " is good");
+                 validCerts.add(cert);
+               }
+           }
+         catch (IOException ioe)
+           {
+             continue;
+           }
+         catch (InvalidKeyException ike)
+           {
+             continue;
+           }
+         catch (SignatureException se)
+           {
+             continue;
+           }
+       }
+   }
+ 
+   /**
+    * Verifies that the digest(s) in a signature file were, in fact, made
+    * over the manifest entry for ENTRY.
+    *
+    * @param entry The entry name.
+    * @param attr The attributes from the signature file to verify.
+    */
+   private boolean verifyHashes(String entry, Attributes attr)
+   {
+     int verified = 0;
+ 
+     // The bytes for ENTRY's manifest entry, which are signed in the
+     // signature file.
+     byte[] entryBytes = null;
+     try
+       {
+ 	ZipEntry e = super.getEntry(entry);
+ 	if (e == null)
+ 	  {
+ 	    if (DEBUG)
+ 	      debug("verifyHashes: no entry '" + entry + "'");
+ 	    return false;
+ 	  }
+         entryBytes = readManifestEntry(e);
+       }
+     catch (IOException ioe)
+       {
+         if (DEBUG)
+           {
+             debug(ioe);
+             ioe.printStackTrace();
+           }
+         return false;
+       }
+ 
+     for (Iterator it = attr.entrySet().iterator(); it.hasNext(); )
+       {
+         Map.Entry e = (Map.Entry) it.next();
+         String key = String.valueOf(e.getKey());
+         if (!key.endsWith(DIGEST_KEY_SUFFIX))
+           continue;
+         String alg = key.substring(0, key.length() - DIGEST_KEY_SUFFIX.length());
+         try
+           {
+             byte[] hash = Base64InputStream.decode((String) e.getValue());
+             MessageDigest md = MessageDigest.getInstance(alg);
+             md.update(entryBytes);
+             byte[] hash2 = md.digest();
+             if (DEBUG)
+               debug("verifying SF entry " + entry + " alg: " + md.getAlgorithm()
+                     + " expect=" + new java.math.BigInteger(hash).toString(16)
+                     + " comp=" + new java.math.BigInteger(hash2).toString(16));
+             if (!Arrays.equals(hash, hash2))
+               return false;
+             verified++;
+           }
+         catch (IOException ioe)
+           {
+             if (DEBUG)
+               {
+                 debug(ioe);
+                 ioe.printStackTrace();
+               }
+             return false;
+           }
+         catch (NoSuchAlgorithmException nsae)
+           {
+             if (DEBUG)
+               {
+                 debug(nsae);
+                 nsae.printStackTrace();
+               }
+             return false;
+           }
+       }
+ 
+     // We have to find at least one valid digest.
+     return verified > 0;
+   }
+ 
+   /**
+    * Read the raw bytes that comprise a manifest entry. We can't use the
+    * Manifest object itself, because that loses information (such as line
+    * endings, and order of entries).
+    */
+   private byte[] readManifestEntry(ZipEntry entry) throws IOException
+   {
+     InputStream in = super.getInputStream(super.getEntry(MANIFEST_NAME));
+     ByteArrayOutputStream out = new ByteArrayOutputStream();
+     byte[] target = ("Name: " + entry.getName()).getBytes();
+     int t = 0, c, prev = -1, state = 0, l = -1;
+ 
+     while ((c = in.read()) != -1)
+       {
+ //         if (DEBUG)
+ //           debug("read "
+ //                 + (c == '\n' ? "\\n" : (c == '\r' ? "\\r" : String.valueOf((char) c)))
+ //                 + " state=" + state + " prev="
+ //                 + (prev == '\n' ? "\\n" : (prev == '\r' ? "\\r" : String.valueOf((char) prev)))
+ //                 + " t=" + t + (t < target.length ? (" target[t]=" + (char) target[t]) : "")
+ //                 + " l=" + l);
+         switch (state)
+           {
+ 
+           // Step 1: read until we find the "target" bytes: the start
+           // of the entry we need to read.
+           case 0:
+             if (((byte) c) != target[t])
+               t = 0;
+             else
+               {
+                 t++;
+                 if (t == target.length)
+                   {
+                     out.write(target);
+                     state = 1;
+                   }
+               }
+             break;
+ 
+           // Step 2: assert that there is a newline character after
+           // the "target" bytes.
+           case 1:
+             if (c != '\n' && c != '\r')
+               {
+                 out.reset();
+                 t = 0;
+                 state = 0;
+               }
+             else
+               {
+                 out.write(c);
+                 state = 2;
+               }
+             break;
+ 
+           // Step 3: read this whole entry, until we reach an empty
+           // line.
+           case 2:
+             if (c == '\n')
+               {
+                 out.write(c);
+                 // NL always terminates a line.
+                 if (l == 0 || (l == 1 && prev == '\r'))
+                   return out.toByteArray();
+                 l = 0;
+               }
+             else
+               {
+                 // Here we see a blank line terminated by a CR,
+                 // followed by the next entry. Technically, `c' should
+                 // always be 'N' at this point.
+                 if (l == 1 && prev == '\r')
+                   return out.toByteArray();
+                 out.write(c);
+                 l++;
+               }
+             prev = c;
+             break;
+ 
+           default:
+             throw new RuntimeException("this statement should be unreachable");
+           }
+       }
+ 
+     // The last entry, with a single CR terminating the line.
+     if (state == 2 && prev == '\r' && l == 0)
+       return out.toByteArray();
+ 
+     // We should not reach this point, we didn't find the entry (or, possibly,
+     // it is the last entry and is malformed).
+     throw new IOException("could not find " + entry + " in manifest");
+   }
+ 
+   /**
+    * A utility class that verifies jar entries as they are read.
+    */
+   private static class EntryInputStream extends FilterInputStream
+   {
+     private final JarFile jarfile;
+     private final long length;
+     private long pos;
+     private final ZipEntry entry;
+     private final byte[][] hashes;
+     private final MessageDigest[] md;
+     private boolean checked;
+ 
+     EntryInputStream(final ZipEntry entry,
+ 		     final InputStream in,
+ 		     final JarFile jar)
+       throws IOException
+     {
+       super(in);
+       this.entry = entry;
+       this.jarfile = jar;
+ 
+       length = entry.getSize();
+       pos = 0;
+       checked = false;
+ 
+       Attributes attr;
+       Manifest manifest = jarfile.getManifest();
+       if (manifest != null)
+ 	attr = manifest.getAttributes(entry.getName());
+       else
+ 	attr = null;
+       if (DEBUG)
+         debug("verifying entry " + entry + " attr=" + attr);
+       if (attr == null)
+         {
+           hashes = new byte[0][];
+           md = new MessageDigest[0];
+         }
+       else
+         {
+           List hashes = new LinkedList();
+           List md = new LinkedList();
+           for (Iterator it = attr.entrySet().iterator(); it.hasNext(); )
+             {
+               Map.Entry e = (Map.Entry) it.next();
+               String key = String.valueOf(e.getKey());
+               if (key == null)
+                 continue;
+               if (!key.endsWith(DIGEST_KEY_SUFFIX))
+                 continue;
+               hashes.add(Base64InputStream.decode((String) e.getValue()));
+               try
+                 {
+                   md.add(MessageDigest.getInstance
+                          (key.substring(0, key.length() - DIGEST_KEY_SUFFIX.length())));
+                 }
+               catch (NoSuchAlgorithmException nsae)
+                 {
+                   IOException ioe = new IOException("no such message digest: " + key);
+                   ioe.initCause(nsae);
+                   throw ioe;
+                 }
+             }
+           if (DEBUG)
+             debug("digests=" + md);
+           this.hashes = (byte[][]) hashes.toArray(new byte[hashes.size()][]);
+           this.md = (MessageDigest[]) md.toArray(new MessageDigest[md.size()]);
+         }
+     }
+ 
+     public boolean markSupported()
+     {
+       return false;
+     }
+ 
+     public void mark(int readLimit)
+     {
+     }
+ 
+     public void reset()
+     {
+     }
+ 
+     public int read() throws IOException
+     {
+       int b = super.read();
+       if (b == -1)
+         {
+           eof();
+           return -1;
+         }
+       for (int i = 0; i < md.length; i++)
+         md[i].update((byte) b);
+       pos++;
+       if (length > 0 && pos >= length)
+         eof();
+       return b;
+     }
+ 
+     public int read(byte[] buf, int off, int len) throws IOException
+     {
+       int count = super.read(buf, off, (int) Math.min(len, (length != 0
+                                                             ? length - pos
+                                                             : Integer.MAX_VALUE)));
+       if (count == -1 || (length > 0 && pos >= length))
+         {
+           eof();
+           return -1;
+         }
+       for (int i = 0; i < md.length; i++)
+         md[i].update(buf, off, count);
+       pos += count;
+       if (length != 0 && pos >= length)
+         eof();
+       return count;
+     }
+ 
+     public int read(byte[] buf) throws IOException
+     {
+       return read(buf, 0, buf.length);
+     }
+ 
+     public long skip(long bytes) throws IOException
+     {
+       byte[] b = new byte[1024];
+       long amount = 0;
+       while (amount < bytes)
+         {
+           int l = read(b, 0, (int) Math.min(b.length, bytes - amount));
+           if (l == -1)
+             break;
+           amount += l;
+         }
+       return amount;
+     }
+ 
+     private void eof() throws IOException
+     {
+       if (checked)
+         return;
+       checked = true;
+       for (int i = 0; i < md.length; i++)
+         {
+           byte[] hash = md[i].digest();
+           if (DEBUG)
+             debug("verifying " + md[i].getAlgorithm() + " expect="
+                   + new java.math.BigInteger(hashes[i]).toString(16)
+                   + " comp=" + new java.math.BigInteger(hash).toString(16));
+           if (!Arrays.equals(hash, hashes[i]))
+             {
+ 	      synchronized(jarfile)
+ 		{
+ 		  if (DEBUG)
+ 		    debug(entry + " could NOT be verified");
+ 		  jarfile.verified.put(entry.getName(), Boolean.FALSE);
+ 		}
+ 	      return;
+ 	      // XXX ??? what do we do here?
+ 	      // throw new ZipException("message digest mismatch");
+             }
+         }
+ 
+       synchronized(jarfile)
+ 	{
+ 	  if (DEBUG)
+ 	    debug(entry + " has been VERIFIED");
+ 	  jarfile.verified.put(entry.getName(), Boolean.TRUE);
+ 	}
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/jar/JarInputStream.java gcc-4.1.0/libjava/classpath/java/util/jar/JarInputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/jar/JarInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/jar/JarInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,200 ----
+ /* JarInputStream.java - InputStream for reading jar files
+    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.jar;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.util.zip.ZipEntry;
+ import java.util.zip.ZipInputStream;
+ 
+ /**
+  * InputStream for reading jar files.
+  * XXX - verification of the signatures in the Manifest file is not yet
+  * implemented.
+  *
+  * @since 1.2
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ 
+ public class JarInputStream extends ZipInputStream
+ {
+   // Fields
+ 
+   /** The manifest for this file or null when there was no manifest. */
+   private Manifest manifest;
+ 
+   /** The first real JarEntry for this file. Used by readManifest() to store
+      an entry that isn't the manifest but that should be returned by
+      getNextEntry next time it is called. Null when no firstEntry was read
+      while searching for the manifest entry, or when it has already been
+      returned by getNextEntry(). */
+   private JarEntry firstEntry;
+ 
+   // Constructors
+ 
+   /**
+    * Creates a new JarInputStream and tries to read the manifest.
+    * If such a manifest is present the JarInputStream tries to verify all
+    * the entry signatures while reading.
+    *
+    * @param in InputStream to read the jar from
+    * @exception IOException when an error occurs when opening or reading
+    */
+   public JarInputStream(InputStream in) throws IOException
+   {
+     this(in, true);
+   }
+ 
+   /**
+    * Creates a new JarInputStream and tries to read the manifest.
+    * If such a manifest is present and verify is true, the JarInputStream
+    * tries to verify all the entry signatures while reading.
+    *
+    * @param in InputStream to read the jar from
+    * @param verify whether or not to verify the manifest entries
+    * @exception IOException when an error occurs when opening or reading
+    */
+   public JarInputStream(InputStream in, boolean verify) throws IOException
+   {
+     super(in);
+     readManifest(verify);
+   }
+ 
+   // Methods
+ 
+   /**
+    * Set the manifest if found. Skips all entries that start with "META-INF/"
+    *
+    * @param verify when true (and a Manifest is found) checks the Manifest,
+    * when false no check is performed
+    * @exception IOException if an error occurs while reading
+    */
+   private void readManifest(boolean verify) throws IOException
+   {
+     firstEntry = (JarEntry) super.getNextEntry();
+     while ((firstEntry != null) &&
+ 	   firstEntry.getName().startsWith("META-INF/"))
+       {
+ 	if (firstEntry.getName().equals(JarFile.MANIFEST_NAME))
+ 	  {
+ 	    manifest = new Manifest(this);
+ 	  }
+ 	firstEntry = (JarEntry) super.getNextEntry();
+       }
+ 
+     if (verify)
+       {
+ 	// XXX
+       }
+   }
+ 
+   /**
+    * Creates a JarEntry for a particular name and consults the manifest
+    * for the Attributes of the entry.
+    * Used by <code>ZipEntry.getNextEntry()</code>
+    *
+    * @param name the name of the new entry
+    */
+   protected ZipEntry createZipEntry(String name)
+   {
+     ZipEntry zipEntry = super.createZipEntry(name);
+     JarEntry jarEntry = new JarEntry(zipEntry);
+     if (manifest != null)
+       {
+ 	jarEntry.attr = manifest.getAttributes(name);
+       }
+     return jarEntry;
+   }
+ 
+   /**
+    * Returns the Manifest for the jar file or null if there was no Manifest.
+    */
+   public Manifest getManifest()
+   {
+     return manifest;
+   }
+ 
+   /**
+    * Returns the next entry or null when there are no more entries.
+    * Does actually return a JarEntry, if you don't want to cast it yourself
+    * use <code>getNextJarEntry()</code>. Does not return any entries found
+    * at the beginning of the ZipFile that are special
+    * (those that start with "META-INF/").
+    *
+    * @exception IOException if an IO error occurs when reading the entry
+    */
+   public ZipEntry getNextEntry() throws IOException
+   {
+     ZipEntry entry;
+     if (firstEntry != null)
+       {
+ 	entry = firstEntry;
+ 	firstEntry = null;
+       }
+     else
+       {
+ 	entry = super.getNextEntry();
+       }
+     return entry;
+   }
+ 
+   /**
+    * Returns the next jar entry or null when there are no more entries.
+    *
+    * @exception IOException if an IO error occurs when reading the entry
+    */
+   public JarEntry getNextJarEntry() throws IOException
+   {
+     return (JarEntry) getNextEntry();
+   }
+ 
+   /**
+    * XXX
+    *
+    * @param buf XXX
+    * @param off XXX
+    * @param len XXX
+    * @return XXX
+    * @exception IOException XXX
+    */
+   public int read(byte[]buf, int off, int len) throws IOException
+   {
+     // XXX if (verify) {}
+     return super.read(buf, off, len);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/jar/JarOutputStream.java gcc-4.1.0/libjava/classpath/java/util/jar/JarOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/jar/JarOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/jar/JarOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* JarOutputStream.java - OutputStream for writing jar files
+    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.jar;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.util.zip.ZipEntry;
+ import java.util.zip.ZipOutputStream;
+ 
+ /**
+  * OutputStream for writing jar files.
+  * A special ZipOutputStream that can take JarEntries and can have a optional
+  * Manifest as first entry.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ 
+ public class JarOutputStream extends ZipOutputStream
+ {
+   // Constructors
+ 
+   /**
+    * Creates a new JarOutputStream without a manifest entry.
+    *
+    * @param out the stream to create the new jar on
+    * @exception IOException if something unexpected happend
+    */
+   public JarOutputStream(OutputStream out) throws IOException
+   {
+     this(out, null);
+   }
+ 
+   /**
+    * Creates a new JarOutputStream with a manifest entry.
+    * The manifest will be the first entry in the jar.
+    *
+    * @param out the stream to create the new jar on
+    * @param man the manifest that should be put in the jar file or null
+    * for no manifest entry
+    * @exception IOException if something unexpected happend
+    */
+   public JarOutputStream(OutputStream out, Manifest man) throws IOException
+   {
+     super(out);
+     if (man != null)
+       writeManifest(man);
+   }
+ 
+   // Methods
+ 
+   /**
+    * Writes the manifest to a new JarEntry in this JarOutputStream with as
+    * name JarFile.MANIFEST_NAME.
+    *
+    * @param manifest the non null manifest to be written
+    * @exception IOException if something unexpected happend
+    */
+   private void writeManifest(Manifest manifest) throws IOException
+   {
+     // Create a new Jar Entry for the Manifest
+     JarEntry entry = new JarEntry(JarFile.MANIFEST_NAME);
+     putNextEntry(entry);
+     manifest.write(this);
+     closeEntry();
+   }
+ 
+   /**
+    * Prepares the JarOutputStream for writing the next entry. 
+    * This implementation just calls <code>super.putNextEntre()</code>.
+    *
+    * @param entry The information for the next entry
+    * @exception IOException when some unexpected I/O exception occurred
+    */
+   public void putNextEntry(ZipEntry entry) throws IOException
+   {
+     super.putNextEntry(entry);	// XXX
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/jar/Manifest.java gcc-4.1.0/libjava/classpath/java/util/jar/Manifest.java
*** gcc-4.0.2/libjava/classpath/java/util/jar/Manifest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/jar/Manifest.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,472 ----
+ /* Manifest.java -- Reads, writes and manipulaties jar manifest files
+    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.jar;
+ 
+ import java.io.BufferedReader;
+ import java.io.BufferedWriter;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.io.PrintWriter;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Map;
+ 
+ /**
+  * Reads, writes and manipulaties jar manifest files.
+  * XXX
+  * 
+  * @since 1.2
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class Manifest implements Cloneable
+ {
+   // Fields
+ 
+   /** The main attributes of the manifest (jar file). */
+   private final Attributes mainAttr;
+ 
+   /** A map of atrributes for all entries described in this Manifest. */
+   private final Map entries;
+ 
+   // Constructors
+ 
+   /**
+    * Creates a new empty Manifest.
+    */
+   public Manifest()
+   {
+     mainAttr = new Attributes();
+     entries = new Hashtable();
+   }
+ 
+   /**
+    * Creates a Manifest from the supplied input stream.
+    *
+    * @see #read(InputStream)
+    * @see #write(OutputStream)
+    *
+    * @param in the input stream to read the manifest from
+    * @exception IOException when an i/o exception occurs or the input stream
+    * does not describe a valid manifest
+    */
+   public Manifest(InputStream in) throws IOException
+   {
+     this();
+     read(in);
+   }
+ 
+   /**
+    * Creates a Manifest from another Manifest.
+    * Makes a deep copy of the main attributes, but a shallow copy of
+    * the other entries. This means that you can freely add, change or remove
+    * the main attributes or the entries of the new manifest without effecting
+    * the original manifest, but adding, changing or removing attributes from
+    * a particular entry also changes the attributes of that entry in the
+    * original manifest.
+    *
+    * @see #clone()
+    * @param man the Manifest to copy from
+    */
+   public Manifest(Manifest man)
+   {
+     mainAttr = new Attributes(man.getMainAttributes());
+     entries = new Hashtable(man.getEntries());
+   }
+ 
+   // Methods
+ 
+   /**
+    * Gets the main attributes of this Manifest.
+    */
+   public Attributes getMainAttributes()
+   {
+     return mainAttr;
+   }
+ 
+   /**
+    * Gets a map of entry Strings to Attributes for all the entries described
+    * in this manifest. Adding, changing or removing from this entries map
+    * changes the entries of this manifest.
+    */
+   public Map getEntries()
+   {
+     return entries;
+   }
+ 
+   /**
+    * Returns the Attributes associated with the Entry.
+    * <p>
+    * Implemented as:
+    * <code>return (Attributes)getEntries().get(entryName)</code>
+    *
+    * @param entryName the name of the entry to look up
+    * @return the attributes associated with the entry or null when none
+    */
+   public Attributes getAttributes(String entryName)
+   {
+     return (Attributes) getEntries().get(entryName);
+   }
+ 
+   /**
+    * Clears the main attributes and removes all the entries from the
+    * manifest.
+    */
+   public void clear()
+   {
+     mainAttr.clear();
+     entries.clear();
+   }
+ 
+   /**
+    * XXX
+    */
+   public void read(InputStream in) throws IOException
+   {
+     BufferedReader br =
+       new BufferedReader(new InputStreamReader(in, "8859_1"));
+     read_main_section(getMainAttributes(), br);
+     read_individual_sections(getEntries(), br);
+   }
+ 
+   // Private Static methods for reading the Manifest file from BufferedReader
+ 
+   private static void read_main_section(Attributes attr,
+ 					BufferedReader br) throws IOException
+   {
+     // According to the spec we should actually call read_version_info() here.
+     read_attributes(attr, br);
+     // Explicitly set Manifest-Version attribute if not set in Main
+     // attributes of Manifest.
+     if (attr.getValue(Attributes.Name.MANIFEST_VERSION) == null)
+ 	    attr.putValue(Attributes.Name.MANIFEST_VERSION, "0.0");
+   }
+ 
+   /**
+    * Pedantic method that requires the next attribute in the Manifest to be
+    * the "Manifest-Version". This follows the Manifest spec closely but
+    * reject some jar Manifest files out in the wild.
+    */
+   private static void read_version_info(Attributes attr,
+ 					BufferedReader br) throws IOException
+   {
+     String version_header = Attributes.Name.MANIFEST_VERSION.toString();
+     try
+       {
+ 	String value = expect_header(version_header, br);
+ 	attr.putValue(Attributes.Name.MANIFEST_VERSION, value);
+       }
+     catch (IOException ioe)
+       {
+ 	throw new JarException("Manifest should start with a " +
+ 			       version_header + ": " + ioe.getMessage());
+       }
+   }
+ 
+   private static String expect_header(String header, BufferedReader br)
+     throws IOException
+   {
+     String s = br.readLine();
+     if (s == null)
+       {
+ 	throw new JarException("unexpected end of file");
+       }
+     return expect_header(header, br, s);
+   }
+ 
+   private static String expect_header(String header, BufferedReader br,
+ 				      String s) throws IOException
+   {
+     try
+       {
+ 	String name = s.substring(0, header.length() + 1);
+ 	if (name.equalsIgnoreCase(header + ":"))
+ 	  {
+ 	    String value_start = s.substring(header.length() + 2);
+ 	    return read_header_value(value_start, br);
+ 	  }
+       }
+     catch (IndexOutOfBoundsException iobe)
+       {
+       }
+     // If we arrive here, something went wrong
+     throw new JarException("unexpected '" + s + "'");
+   }
+ 
+   private static String read_header_value(String s, BufferedReader br)
+     throws IOException
+   {
+     boolean try_next = true;
+     while (try_next)
+       {
+ 	// Lets see if there is something on the next line
+ 	br.mark(1);
+ 	if (br.read() == ' ')
+ 	  {
+ 	    s += br.readLine();
+ 	  }
+ 	else
+ 	  {
+ 	    br.reset();
+ 	    try_next = false;
+ 	  }
+       }
+     return s;
+   }
+ 
+   private static void read_attributes(Attributes attr,
+ 				      BufferedReader br) throws IOException
+   {
+     String s = br.readLine();
+     while (s != null && (!s.equals("")))
+       {
+ 	read_attribute(attr, s, br);
+ 	s = br.readLine();
+       }
+   }
+ 
+   private static void read_attribute(Attributes attr, String s,
+ 				     BufferedReader br) throws IOException
+   {
+     try
+       {
+ 	int colon = s.indexOf(": ");
+ 	String name = s.substring(0, colon);
+ 	String value_start = s.substring(colon + 2);
+ 	String value = read_header_value(value_start, br);
+ 	attr.putValue(name, value);
+       }
+     catch (IndexOutOfBoundsException iobe)
+       {
+ 	throw new JarException("Manifest contains a bad header: " + s);
+       }
+   }
+ 
+   private static void read_individual_sections(Map entries,
+ 					       BufferedReader br) throws
+     IOException
+   {
+     String s = br.readLine();
+     while (s != null && (!s.equals("")))
+       {
+ 	Attributes attr = read_section_name(s, br, entries);
+ 	read_attributes(attr, br);
+ 	s = br.readLine();
+       }
+   }
+ 
+   private static Attributes read_section_name(String s, BufferedReader br,
+ 					      Map entries) throws JarException
+   {
+     try
+       {
+ 	String name = expect_header("Name", br, s);
+ 	Attributes attr = new Attributes();
+ 	entries.put(name, attr);
+ 	return attr;
+       }
+     catch (IOException ioe)
+       {
+ 	throw new JarException
+ 	  ("Section should start with a Name header: " + ioe.getMessage());
+       }
+   }
+ 
+   /**
+    * XXX
+    */
+   public void write(OutputStream out) throws IOException
+   {
+     PrintWriter pw =
+       new PrintWriter(new
+ 		      BufferedWriter(new OutputStreamWriter(out, "8859_1")));
+     write_main_section(getMainAttributes(), pw);
+     pw.println();
+     write_individual_sections(getEntries(), pw);
+     if (pw.checkError())
+       {
+ 	throw new JarException("Error while writing manifest");
+       }
+   }
+ 
+   // Private Static functions for writing the Manifest file to a PrintWriter
+ 
+   private static void write_main_section(Attributes attr,
+ 					 PrintWriter pw) throws JarException
+   {
+     write_version_info(attr, pw);
+     write_main_attributes(attr, pw);
+   }
+ 
+   private static void write_version_info(Attributes attr, PrintWriter pw)
+   {
+     // First check if there is already a version attribute set
+     String version = attr.getValue(Attributes.Name.MANIFEST_VERSION);
+     if (version == null)
+       {
+ 	version = "1.0";
+       }
+     write_header(Attributes.Name.MANIFEST_VERSION.toString(), version, pw);
+   }
+ 
+   private static void write_header(String name, String value, PrintWriter pw)
+   {
+     pw.print(name + ": ");
+ 
+     int last = 68 - name.length();
+     if (last > value.length())
+       {
+ 	pw.println(value);
+       }
+     else
+       {
+ 	pw.println(value.substring(0, last));
+       }
+     while (last < value.length())
+       {
+ 	pw.print(" ");
+ 	int end = (last + 69);
+ 	if (end > value.length())
+ 	  {
+ 	    pw.println(value.substring(last));
+ 	  }
+ 	else
+ 	  {
+ 	    pw.println(value.substring(last, end));
+ 	  }
+ 	last = end;
+       }
+   }
+ 
+   private static void write_main_attributes(Attributes attr, PrintWriter pw) 
+     throws JarException
+   {
+     Iterator it = attr.entrySet().iterator();
+     while (it.hasNext())
+       {
+ 	Map.Entry entry = (Map.Entry) it.next();
+ 	// Don't print the manifest version again
+ 	if (!Attributes.Name.MANIFEST_VERSION.equals(entry.getKey()))
+ 	  {
+ 	    write_attribute_entry(entry, pw);
+ 	  }
+       }
+   }
+ 
+   private static void write_attribute_entry(Map.Entry entry, PrintWriter pw) 
+     throws JarException
+   {
+     String name = entry.getKey().toString();
+     String value = entry.getValue().toString();
+ 
+     if (name.equalsIgnoreCase("Name"))
+       {
+ 	throw new JarException("Attributes cannot be called 'Name'");
+       }
+     if (name.startsWith("From"))
+       {
+ 	throw new
+ 	  JarException("Header cannot start with the four letters 'From'" +
+ 		       name);
+       }
+     write_header(name, value, pw);
+   }
+ 
+   private static void write_individual_sections(Map entries, PrintWriter pw)
+     throws JarException
+   {
+ 
+     Iterator it = entries.entrySet().iterator();
+     while (it.hasNext())
+       {
+ 	Map.Entry entry = (Map.Entry) it.next();
+ 	write_header("Name", entry.getKey().toString(), pw);
+ 	write_entry_attributes((Attributes) entry.getValue(), pw);
+ 	pw.println();
+       }
+   }
+ 
+   private static void write_entry_attributes(Attributes attr, PrintWriter pw) 
+     throws JarException
+   {
+     Iterator it = attr.entrySet().iterator();
+     while (it.hasNext())
+       {
+ 	Map.Entry entry = (Map.Entry) it.next();
+ 	write_attribute_entry(entry, pw);
+       }
+   }
+ 
+   /**
+    * Makes a deep copy of the main attributes, but a shallow copy of
+    * the other entries. This means that you can freely add, change or remove
+    * the main attributes or the entries of the new manifest without effecting
+    * the original manifest, but adding, changing or removing attributes from
+    * a particular entry also changes the attributes of that entry in the
+    * original manifest. Calls <CODE>new Manifest(this)</CODE>.
+    */
+   public Object clone()
+   {
+     return new Manifest(this);
+   }
+ 
+   /**
+    * Checks if another object is equal to this Manifest object.
+    * Another Object is equal to this Manifest object if it is an instance of
+    * Manifest and the main attributes and the entries of the other manifest
+    * are equal to this one.
+    */
+   public boolean equals(Object o)
+   {
+     return (o instanceof Manifest) &&
+       (mainAttr.equals(((Manifest) o).mainAttr)) &&
+       (entries.equals(((Manifest) o).entries));
+   }
+ 
+   /**
+    * Calculates the hash code of the manifest. Implemented by a xor of the
+    * hash code of the main attributes with the hash code of the entries map.
+    */
+   public int hashCode()
+   {
+     return mainAttr.hashCode() ^ entries.hashCode();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/jar/package.html gcc-4.1.0/libjava/classpath/java/util/jar/package.html
*** gcc-4.0.2/libjava/classpath/java/util/jar/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/jar/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.util.jar package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.util.jar</title></head>
+ 
+ <body>
+ <p>Utility classes for manipulating java archives
+ (zip files with a manifest file with attributes).</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/ConsoleHandler.java gcc-4.1.0/libjava/classpath/java/util/logging/ConsoleHandler.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/ConsoleHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/ConsoleHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,125 ----
+ /* ConsoleHandler.java -- a class for publishing log messages to System.err
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ /**
+  * A <code>ConsoleHandler</code> publishes log records to
+  * <code>System.err</code>.
+  *
+  * <p><strong>Configuration:</strong> Values of the subsequent
+  * <code>LogManager</code> properties are taken into consideration
+  * when a <code>ConsoleHandler</code> is initialized.
+  * If a property is not defined, or if it has an invalid
+  * value, a default is taken without an exception being thrown.
+  *
+  * <ul>
+  *
+  * <li><code>java.util.logging.ConsoleHandler.level</code> - specifies
+  *     the initial severity level threshold. Default value:
+  *     <code>Level.INFO</code>.</li>
+  *
+  * <li><code>java.util.logging.ConsoleHandler.filter</code> - specifies
+  *     the name of a Filter class. Default value: No Filter.</li>
+  *
+  * <li><code>java.util.logging.ConsoleHandler.formatter</code> - specifies
+  *     the name of a Formatter class. Default value:
+  *     <code>java.util.logging.SimpleFormatter</code>.</li>
+  *
+  * <li><code>java.util.logging.ConsoleHandler.encoding</code> - specifies
+  *     the name of the character encoding. Default value:
+  *     the default platform encoding.</li>
+  *
+  * </ul>
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class ConsoleHandler
+   extends StreamHandler
+ {
+   /**
+    * Constructs a <code>StreamHandler</code> that publishes
+    * log records to <code>System.err</code>.  The initial
+    * configuration is determined by the <code>LogManager</code>
+    * properties described above.
+    */
+   public ConsoleHandler()
+   {
+     super(System.err, "java.util.logging.ConsoleHandler", Level.INFO,
+ 	 /* formatter */ null, SimpleFormatter.class);
+   }
+ 
+ 
+   /**
+    * Forces any data that may have been buffered to the underlying
+    * output device, but does <i>not</i> close <code>System.err</code>.
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code>
+    * of this <code>ConsoleHandler</code> will be informed, but the caller
+    * of this method will not receive an exception.
+    */
+   public void close()
+   {
+     flush();
+   }
+ 
+ 
+   /**
+    * Publishes a <code>LogRecord</code> to the console, provided the
+    * record passes all tests for being loggable.
+    *
+    * <p>Most applications do not need to call this method directly.
+    * Instead, they will use use a <code>Logger</code>, which will
+    * create LogRecords and distribute them to registered handlers.
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code>
+    * of this <code>SocketHandler</code> will be informed, but the caller
+    * of this method will not receive an exception.
+    *
+    * <p>The GNU implementation of <code>ConsoleHandler.publish</code>
+    * calls flush() for every request to publish a record, so
+    * they appear immediately on the console.
+    *
+    * @param record the log event to be published.
+    */
+   public void publish(LogRecord record)
+   {
+     super.publish(record);
+     flush();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/ErrorManager.java gcc-4.1.0/libjava/classpath/java/util/logging/ErrorManager.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/ErrorManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/ErrorManager.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,194 ----
+ /* ErrorManager.java --
+    A class for dealing with errors that a Handler encounters
+    during logging
+    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ /**
+  * An <code>ErrorManager</code> deals with errors that a <code>Handler</code>
+  * encounters while logging.
+  *
+  * @see Handler#setErrorManager(ErrorManager)
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class ErrorManager
+ {
+   /* The values have been taken from Sun's public J2SE 1.4 API
+    * documentation.
+    * See http://java.sun.com/j2se/1.4/docs/api/constant-values.html
+    */
+ 
+   /**
+    * Indicates that there was a failure that does not readily
+    * fall into any of the other categories.
+    */
+   public static final int GENERIC_FAILURE = 0;
+ 
+ 
+   /**
+    * Indicates that there was a problem upon writing to
+    * an output stream.
+    */
+   public static final int WRITE_FAILURE = 1;
+ 
+ 
+   /**
+    * Indicates that there was a problem upon flushing
+    * an output stream.
+    */
+   public static final int FLUSH_FAILURE = 2;
+ 
+ 
+   /**
+    * Indicates that there was a problem upon closing
+    * an output stream.
+    */
+   public static final int CLOSE_FAILURE = 3;
+ 
+     
+   /**
+    * Indicates that there was a problem upon opening
+    * an output stream.
+    */
+   public static final int OPEN_FAILURE = 4;
+ 
+ 
+   /**
+    * Indicates that there was a problem upon formatting
+    * the message of a log record.
+    */
+   public static final int FORMAT_FAILURE = 5;
+ 
+ 
+   /**
+    * Indicates whether the {@link #error} method of this ErrorManager
+    * has ever been used.
+    *
+    * Declared volatile in order to correctly support the
+    * double-checked locking idiom (once the revised Java Memory Model
+    * gets adopted); see Classpath bug #2944.
+    */
+   private volatile boolean everUsed = false;
+ 
+ 
+   public ErrorManager()
+   {
+   }
+ 
+ 
+   /**
+    * Reports an error that occured upon logging.  The default implementation
+    * emits the very first error to System.err, ignoring subsequent errors.
+    *
+    * @param message a message describing the error, or <code>null</code> if
+    *                there is no suitable description.
+    *
+    * @param ex      an exception, or <code>null</code> if the error is not
+    *                related to an exception.
+    *
+    * @param errorCode  one of the defined error codes, for example
+    *                   <code>ErrorManager.CLOSE_FAILURE</code>.
+    */
+   public void error(String message, Exception ex, int errorCode)
+   {
+     if (everUsed)
+       return;
+ 
+     synchronized (this)
+     {
+       /* The double check is intentional. If the first check was
+        * omitted, the monitor would have to be entered every time
+        * error() method was called. If the second check was
+        * omitted, the code below could be executed by multiple
+        * threads simultaneously.
+        *
+        * This is the 'double-checked locking' idiom, which is broken
+        * with the current version of the Java memory model.  However,
+        * we assume that JVMs will have adopted a revised version of
+        * the Java Memory Model by the time GNU Classpath gains
+        * widespread acceptance. See Classpath bug #2944.
+        */
+       if (everUsed)
+ 	return;
+ 
+       everUsed = true;
+     }
+ 
+     String codeMsg;
+     switch (errorCode)
+     {
+     case GENERIC_FAILURE:
+       codeMsg = "GENERIC_FAILURE";
+       break;
+ 
+     case WRITE_FAILURE:
+       codeMsg = "WRITE_FAILURE";
+       break;
+ 
+     case FLUSH_FAILURE:
+       codeMsg = "FLUSH_FAILURE";
+       break;
+ 
+     case CLOSE_FAILURE:
+       codeMsg = "CLOSE_FAILURE";
+       break;
+ 
+     case OPEN_FAILURE:
+       codeMsg = "OPEN_FAILURE";
+       break;
+ 
+     case FORMAT_FAILURE:
+       codeMsg = "FORMAT_FAILURE";
+       break;
+ 
+     default:
+       codeMsg = String.valueOf(errorCode);
+       break;
+     }
+ 
+     System.err.println("Error upon logging: " + codeMsg);
+     if ((message != null) && (message.length() > 0))
+       System.err.println(message);
+ 
+     if (ex != null)
+       ex.printStackTrace();
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/FileHandler.java gcc-4.1.0/libjava/classpath/java/util/logging/FileHandler.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/FileHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/FileHandler.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,642 ----
+ /* FileHandler.java -- a class for publishing log messages to log files
+    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.io.File;
+ import java.io.FileOutputStream;
+ import java.io.FilterOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.util.LinkedList;
+ import java.util.ListIterator;
+ 
+ /**
+  * A <code>FileHandler</code> publishes log records to a set of log
+  * files.  A maximum file size can be specified; as soon as a log file
+  * reaches the size limit, it is closed and the next file in the set
+  * is taken.
+  *
+  * <p><strong>Configuration:</strong> Values of the subsequent
+  * <code>LogManager</code> properties are taken into consideration
+  * when a <code>FileHandler</code> is initialized.  If a property is
+  * not defined, or if it has an invalid value, a default is taken
+  * without an exception being thrown.
+  *
+  * <ul>
+  *
+  * <li><code>java.util.FileHandler.level</code> - specifies
+  *     the initial severity level threshold. Default value:
+  *     <code>Level.ALL</code>.</li>
+  *
+  * <li><code>java.util.FileHandler.filter</code> - specifies
+  *     the name of a Filter class. Default value: No Filter.</li>
+  *
+  * <li><code>java.util.FileHandler.formatter</code> - specifies
+  *     the name of a Formatter class. Default value:
+  *     <code>java.util.logging.XMLFormatter</code>.</li>
+  *
+  * <li><code>java.util.FileHandler.encoding</code> - specifies
+  *     the name of the character encoding. Default value:
+  *     the default platform encoding.</li>
+  *
+  * <li><code>java.util.FileHandler.limit</code> - specifies the number
+  *     of bytes a log file is approximately allowed to reach before it
+  *     is closed and the handler switches to the next file in the
+  *     rotating set.  A value of zero means that files can grow
+  *     without limit.  Default value: 0 (unlimited growth).</li>
+  *
+  * <li><code>java.util.FileHandler.count</code> - specifies the number
+  *     of log files through which this handler cycles.  Default value:
+  *     1.</li>
+  *
+  * <li><code>java.util.FileHandler.pattern</code> - specifies a
+  *     pattern for the location and name of the produced log files.
+  *     See the section on <a href="#filePatterns">file name
+  *     patterns</a> for details.  Default value:
+  *     <code>"%h/java%u.log"</code>.</li>
+  *
+  * <li><code>java.util.FileHandler.append</code> - specifies
+  *     whether the handler will append log records to existing
+  *     files, or whether the handler will clear log files
+  *     upon switching to them. Default value: <code>false</code>,
+  *     indicating that files will be cleared.</li>
+  *
+  * </ul>
+  *
+  * <p><a name="filePatterns"><strong>File Name Patterns:</strong></a>
+  * The name and location and log files are specified with pattern
+  * strings. The handler will replace the following character sequences
+  * when opening log files:
+  *
+  * <p><ul>
+  * <li><code>/</code> - replaced by the platform-specific path name
+  *     separator.  This value is taken from the system property
+  *     <code>file.separator</code>.</li>
+  *
+  * <li><code>%t</code> - replaced by the platform-specific location of
+  *     the directory intended for temporary files.  This value is
+  *     taken from the system property <code>java.io.tmpdir</code>.</li>
+  *
+  * <li><code>%h</code> - replaced by the location of the home
+  *     directory of the current user.  This value is taken from the
+  *     system property <code>file.separator</code>.</li>
+  *
+  * <li><code>%g</code> - replaced by a generation number for
+  *     distinguisthing the individual items in the rotating set 
+  *     of log files.  The generation number cycles through the
+  *     sequence 0, 1, ..., <code>count</code> - 1.</li>
+  *
+  * <li><code>%u</code> - replaced by a unique number for
+  *     distinguisthing the output files of several concurrently
+  *     running processes.  The <code>FileHandler</code> starts
+  *     with 0 when it tries to open a log file.  If the file
+  *     cannot be opened because it is currently in use,
+  *     the unique number is incremented by one and opening
+  *     is tried again.  These steps are repeated until the
+  *     opening operation succeeds.
+  *
+  *     <p>FIXME: Is the following correct? Please review.  The unique
+  *     number is determined for each log file individually when it is
+  *     opened upon switching to the next file.  Therefore, it is not
+  *     correct to assume that all log files in a rotating set bear the
+  *     same unique number.
+  *
+  *     <p>FIXME: The Javadoc for the Sun reference implementation
+  *     says: "Note that the use of unique ids to avoid conflicts is
+  *     only guaranteed to work reliably when using a local disk file
+  *     system." Why? This needs to be mentioned as well, in case
+  *     the reviewers decide the statement is true.  Otherwise,
+  *     file a bug report with Sun.</li>
+  *
+  * <li><code>%%</code> - replaced by a single percent sign.</li>
+  * </ul>
+  *
+  * <p>If the pattern string does not contain <code>%g</code> and
+  * <code>count</code> is greater than one, the handler will append
+  * the string <code>.%g</code> to the specified pattern.
+  *
+  * <p>If the handler attempts to open a log file, this log file
+  * is being used at the time of the attempt, and the pattern string
+  * does not contain <code>%u</code>, the handler will append
+  * the string <code>.%u</code> to the specified pattern. This
+  * step is performed after any generation number has been
+  * appended.
+  *
+  * <p><em>Examples for the GNU platform:</em> 
+  *
+  * <p><ul>
+  *
+  * <li><code>%h/java%u.log</code> will lead to a single log file
+  *     <code>/home/janet/java0.log</code>, assuming <code>count</code>
+  *     equals 1, the user's home directory is
+  *     <code>/home/janet</code>, and the attempt to open the file
+  *     succeeds.</li>
+  *
+  * <li><code>%h/java%u.log</code> will lead to three log files
+  *     <code>/home/janet/java0.log.0</code>,
+  *     <code>/home/janet/java0.log.1</code>, and
+  *     <code>/home/janet/java0.log.2</code>,
+  *     assuming <code>count</code> equals 3, the user's home
+  *     directory is <code>/home/janet</code>, and all attempts
+  *     to open files succeed.</li>
+  *
+  * <li><code>%h/java%u.log</code> will lead to three log files
+  *     <code>/home/janet/java0.log.0</code>,
+  *     <code>/home/janet/java1.log.1</code>, and
+  *     <code>/home/janet/java0.log.2</code>,
+  *     assuming <code>count</code> equals 3, the user's home
+  *     directory is <code>/home/janet</code>, and the attempt
+  *     to open <code>/home/janet/java0.log.1</code> fails.</li>
+  *
+  * </ul>
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class FileHandler
+   extends StreamHandler
+ {
+   /**
+    * The number of bytes a log file is approximately allowed to reach
+    * before it is closed and the handler switches to the next file in
+    * the rotating set.  A value of zero means that files can grow
+    * without limit.
+    */
+   private final int limit;
+ 
+ 
+  /**
+   * The number of log files through which this handler cycles.
+   */
+   private final int count;
+ 
+ 
+   /**
+    * The pattern for the location and name of the produced log files.
+    * See the section on <a href="#filePatterns">file name patterns</a>
+    * for details.
+    */
+   private final String pattern;
+ 
+ 
+   /**
+    * Indicates whether the handler will append log records to existing
+    * files (<code>true</code>), or whether the handler will clear log files
+    * upon switching to them (<code>false</code>).
+    */
+   private final boolean append;
+ 
+ 
+   /**
+    * The number of bytes that have currently been written to the stream.
+    * Package private for use in inner classes.
+    */
+   long written;
+ 
+ 
+   /**
+    * A linked list of files we are, or have written to. The entries
+    * are file path strings, kept in the order 
+    */
+   private LinkedList logFiles;
+ 
+ 
+   /**
+    * Constructs a <code>FileHandler</code>, taking all property values
+    * from the current {@link LogManager LogManager} configuration.
+    *
+    * @throws java.io.IOException FIXME: The Sun Javadoc says: "if
+    *         there are IO problems opening the files."  This conflicts
+    *         with the general principle that configuration errors do
+    *         not prohibit construction. Needs review.
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure.
+    */
+   public FileHandler()
+     throws IOException, SecurityException
+   {
+     this(/* pattern: use configiguration */ null,
+ 
+ 	 LogManager.getIntProperty("java.util.logging.FileHandler.limit",
+ 				   /* default */ 0),
+ 
+ 	 LogManager.getIntProperty("java.util.logging.FileHandler.count",
+ 				   /* default */ 1),
+ 
+ 	 LogManager.getBooleanProperty("java.util.logging.FileHandler.append",
+ 				       /* default */ false));
+   }
+ 
+ 
+   /* FIXME: Javadoc missing. */
+   public FileHandler(String pattern)
+     throws IOException, SecurityException
+   {
+     this(pattern,
+ 	 /* limit */ 0,
+ 	 /* count */ 1,
+ 	 /* append */ false);
+   }
+ 
+ 
+   /* FIXME: Javadoc missing. */
+   public FileHandler(String pattern, boolean append)
+     throws IOException, SecurityException
+   {
+     this(pattern,
+ 	 /* limit */ 0,
+ 	 /* count */ 1,
+ 	 append);
+   }
+ 
+ 
+   /* FIXME: Javadoc missing. */
+   public FileHandler(String pattern, int limit, int count)
+     throws IOException, SecurityException
+   {
+     this(pattern, limit, count, 
+ 	 LogManager.getBooleanProperty(
+ 	   "java.util.logging.FileHandler.append",
+ 	   /* default */ false));
+   }
+ 
+ 
+   /**
+    * Constructs a <code>FileHandler</code> given the pattern for the
+    * location and name of the produced log files, the size limit, the
+    * number of log files thorough which the handler will rotate, and
+    * the <code>append</code> property.  All other property values are
+    * taken from the current {@link LogManager LogManager}
+    * configuration.
+    *
+    * @param pattern The pattern for the location and name of the
+    *        produced log files.  See the section on <a
+    *        href="#filePatterns">file name patterns</a> for details.
+    *        If <code>pattern</code> is <code>null</code>, the value is
+    *        taken from the {@link LogManager LogManager} configuration
+    *        property
+    *        <code>java.util.logging.FileHandler.pattern</code>.
+    *        However, this is a pecularity of the GNU implementation,
+    *        and Sun's API specification does not mention what behavior
+    *        is to be expected for <code>null</code>. Therefore,
+    *        applications should not rely on this feature.
+    *
+    * @param limit specifies the number of bytes a log file is
+    *        approximately allowed to reach before it is closed and the
+    *        handler switches to the next file in the rotating set.  A
+    *        value of zero means that files can grow without limit.
+    *
+    * @param count specifies the number of log files through which this
+    *        handler cycles.
+    *
+    * @param append specifies whether the handler will append log
+    *        records to existing files (<code>true</code>), or whether the
+    *        handler will clear log files upon switching to them
+    *        (<code>false</code>).
+    *
+    * @throws java.io.IOException FIXME: The Sun Javadoc says: "if
+    *         there are IO problems opening the files."  This conflicts
+    *         with the general principle that configuration errors do
+    *         not prohibit construction. Needs review.
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure.
+    *         <p>FIXME: This seems in contrast to all other handler
+    *         constructors -- verify this by running tests against
+    *         the Sun reference implementation.
+    */
+   public FileHandler(String pattern,
+ 		     int limit,
+ 		     int count,
+ 		     boolean append)
+     throws IOException, SecurityException
+   {
+     super(/* output stream, created below */ null,
+ 	  "java.util.logging.FileHandler",
+ 	  /* default level */ Level.ALL,
+ 	  /* formatter */ null,
+ 	  /* default formatter */ XMLFormatter.class);
+ 
+     if ((limit <0) || (count < 1))
+       throw new IllegalArgumentException();
+ 
+     this.pattern = pattern;
+     this.limit = limit;
+     this.count = count;
+     this.append = append;
+     this.written = 0;
+     this.logFiles = new LinkedList ();
+ 
+     setOutputStream (createFileStream (pattern, limit, count, append,
+                                        /* generation */ 0));
+   }
+ 
+ 
+   /* FIXME: Javadoc missing. */
+   private OutputStream createFileStream(String pattern,
+                                         int limit,
+                                         int count,
+                                         boolean append,
+                                         int generation)
+   {
+     String  path;
+     int     unique = 0;
+ 
+     /* Throws a SecurityException if the caller does not have
+      * LoggingPermission("control").
+      */
+     LogManager.getLogManager().checkAccess();
+ 
+     /* Default value from the java.util.logging.FileHandler.pattern
+      * LogManager configuration property.
+      */
+     if (pattern == null)
+       pattern = LogManager.getLogManager().getProperty(
+                               "java.util.logging.FileHandler.pattern");
+     if (pattern == null)
+       pattern = "%h/java%u.log";
+ 
+     if (count > 1 && !has (pattern, 'g'))
+       pattern = pattern + ".%g";
+ 
+     do
+     {
+       path = replaceFileNameEscapes(pattern, generation, unique, count);
+ 
+       try
+       {
+ 	File file = new File(path);
+         if (!file.exists () || append)
+           {
+             FileOutputStream fout = new FileOutputStream (file, append);
+             // FIXME we need file locks for this to work properly, but they
+             // are not implemented yet in Classpath! Madness!
+ //             FileChannel channel = fout.getChannel ();
+ //             FileLock lock = channel.tryLock ();
+ //             if (lock != null) // We've locked the file.
+ //               {
+                 if (logFiles.isEmpty ())
+                   logFiles.addFirst (path);
+                 return new ostr (fout);
+ //               }
+           }
+       }
+       catch (Exception ex)
+       {
+         reportError (null, ex, ErrorManager.OPEN_FAILURE);
+       }
+ 
+       unique = unique + 1;
+       if (!has (pattern, 'u'))
+         pattern = pattern + ".%u";
+     }
+     while (true);
+   }
+ 
+ 
+   /**
+    * Replaces the substrings <code>"/"</code> by the value of the
+    * system property <code>"file.separator"</code>, <code>"%t"</code>
+    * by the value of the system property
+    * <code>"java.io.tmpdir"</code>, <code>"%h"</code> by the value of
+    * the system property <code>"user.home"</code>, <code>"%g"</code>
+    * by the value of <code>generation</code>, <code>"%u"</code> by the
+    * value of <code>uniqueNumber</code>, and <code>"%%"</code> by a
+    * single percent character.  If <code>pattern</code> does
+    * <em>not</em> contain the sequence <code>"%g"</code>,
+    * the value of <code>generation</code> will be appended to
+    * the result.
+    *
+    * @throws NullPointerException if one of the system properties
+    *         <code>"file.separator"</code>,
+    *         <code>"java.io.tmpdir"</code>, or
+    *         <code>"user.home"</code> has no value and the
+    *         corresponding escape sequence appears in
+    *         <code>pattern</code>.
+    */
+   private static String replaceFileNameEscapes(String pattern,
+ 					       int generation,
+ 					       int uniqueNumber,
+ 					       int count)
+   {
+     StringBuffer buf = new StringBuffer(pattern);
+     String       replaceWith;
+     boolean      foundGeneration = false;
+ 
+     int pos = 0;
+     do
+     {
+       // Uncomment the next line for finding bugs.
+       // System.out.println(buf.substring(0,pos) + '|' + buf.substring(pos));
+       
+       if (buf.charAt(pos) == '/')
+       {
+ 	/* The same value is also provided by java.io.File.separator. */
+ 	replaceWith = System.getProperty("file.separator");
+ 	buf.replace(pos, pos + 1, replaceWith);
+ 	pos = pos + replaceWith.length() - 1;
+ 	continue;
+       }
+ 
+       if (buf.charAt(pos) == '%')
+       {
+         switch (buf.charAt(pos + 1))
+ 	{
+ 	case 't':
+ 	  replaceWith = System.getProperty("java.io.tmpdir");
+ 	  break;
+ 
+ 	case 'h':
+ 	  replaceWith = System.getProperty("user.home");
+ 	  break;
+ 
+ 	case 'g':
+ 	  replaceWith = Integer.toString(generation);
+ 	  foundGeneration = true;
+ 	  break;
+ 
+ 	case 'u':
+ 	  replaceWith = Integer.toString(uniqueNumber);
+ 	  break;
+ 
+ 	case '%':
+ 	  replaceWith = "%";
+ 	  break;
+ 
+ 	default:
+ 	  replaceWith = "??";
+ 	  break; // FIXME: Throw exception?
+ 	}
+ 
+ 	buf.replace(pos, pos + 2, replaceWith);
+ 	pos = pos + replaceWith.length() - 1;
+ 	continue;
+       }
+     }
+     while (++pos < buf.length() - 1);
+ 
+     if (!foundGeneration && (count > 1))
+     {
+       buf.append('.');
+       buf.append(generation);
+     }
+ 
+     return buf.toString();
+   }
+ 
+ 
+   /* FIXME: Javadoc missing. */
+   public void publish(LogRecord record)
+   {
+     if (limit > 0 && written >= limit)
+       rotate ();
+     super.publish(record);
+     flush ();
+   }
+ 
+   /**
+    * Rotates the current log files, possibly removing one if we
+    * exceed the file count.
+    */
+   private synchronized void rotate ()
+   {
+     if (logFiles.size () > 0)
+       {
+         File f1 = null;
+         ListIterator lit = null;
+ 
+         // If we reach the file count, ditch the oldest file.
+         if (logFiles.size () == count)
+           {
+             f1 = new File ((String) logFiles.getLast ());
+             f1.delete ();
+             lit = logFiles.listIterator (logFiles.size () - 1);
+           }
+         // Otherwise, move the oldest to a new location.
+         else
+           {
+             String path = replaceFileNameEscapes (pattern, logFiles.size (),
+                                                   /* unique */ 0, count);
+             f1 = new File (path);
+             logFiles.addLast (path);
+             lit = logFiles.listIterator (logFiles.size () - 1);
+           }
+ 
+         // Now rotate the files.
+         while (lit.hasPrevious ())
+           {
+             String s = (String) lit.previous ();
+             File f2 = new File (s);
+             f2.renameTo (f1);
+             f1 = f2;
+           }
+       }
+ 
+     setOutputStream (createFileStream (pattern, limit, count, append,
+                                        /* generation */ 0));
+ 
+     // Reset written count.
+     written = 0;
+   }
+ 
+   /**
+    * Tell if <code>pattern</code> contains the pattern sequence
+    * with character <code>escape</code>. That is, if <code>escape</code>
+    * is 'g', this method returns true if the given pattern contains
+    * "%g", and not just the substring "%g" (for example, in the case of
+    * "%%g").
+    *
+    * @param pattern The pattern to test.
+    * @param escape The escape character to search for.
+    * @return True iff the pattern contains the escape sequence with the
+    *  given character.
+    */
+   private static boolean has (final String pattern, final char escape)
+   {
+     final int len = pattern.length ();
+     boolean sawPercent = false;
+     for (int i = 0; i < len; i++)
+       {
+         char c = pattern.charAt (i);
+         if (sawPercent)
+           {
+             if (c == escape)
+               return true;
+             if (c == '%') // Double percent
+               {
+                 sawPercent = false;
+                 continue;
+               }
+           }
+         sawPercent = (c == '%');
+       }
+     return false;
+   }
+ 
+   /**
+    * An output stream that tracks the number of bytes written to it.
+    */
+   private final class ostr extends FilterOutputStream
+   {
+     private ostr (OutputStream out)
+     {
+       super (out);
+     }
+ 
+     public void write (final int b) throws IOException
+     {
+       out.write (b);
+       FileHandler.this.written++; // FIXME: synchronize?
+     }
+ 
+     public void write (final byte[] b) throws IOException
+     {
+       write (b, 0, b.length);
+     }
+ 
+     public void write (final byte[] b, final int offset, final int length)
+       throws IOException
+     {
+       out.write (b, offset, length);
+       FileHandler.this.written += length; // FIXME: synchronize?
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/Filter.java gcc-4.1.0/libjava/classpath/java/util/logging/Filter.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/Filter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/Filter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* Filter.java -- an interface for filters that decide whether a
+    LogRecord should be published or discarded
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ /**
+  * By implementing the <code>Filter</code> interface, applications
+  * can control what is being logged based on arbitrary properties,
+  * not just the severity level.  Both <code>Handler</code> and
+  * <code>Logger</code> allow to register Filters whose
+  * <code>isLoggable</code> method will be called when a
+  * <code>LogRecord</code> has passed the test based on the
+  * severity level.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public interface Filter
+ {
+   /**
+    * Determines whether a LogRecord should be published or discarded.
+    *
+    * @param record the <code>LogRecord</code> to be inspected.
+    *
+    * @return <code>true</code> if the record should be published,
+    *         <code>false</code> if it should be discarded.
+    */
+   boolean isLoggable(LogRecord record);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/Formatter.java gcc-4.1.0/libjava/classpath/java/util/logging/Formatter.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/Formatter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/Formatter.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,171 ----
+ /* Formatter.java --
+    A class for formatting log messages by localizing message texts
+    and performing substitution of parameters
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.text.MessageFormat;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * A <code>Formatter</code> supports handlers by localizing
+  * message texts and by subsituting parameter values for their
+  * placeholders.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public abstract class Formatter
+ {
+   /**
+    * Constructs a new Formatter.
+    */
+   protected Formatter()
+   {
+   }
+ 
+ 
+   /**
+    * Formats a LogRecord into a string.  Usually called by handlers
+    * which need a string for a log record, for example to append
+    * a record to a log file or to transmit a record over the network.
+    *
+    * @param record the log record for which a string form is requested.
+    */
+   public abstract String format(LogRecord record);
+ 
+ 
+   /**
+    * Returns a string that handlers are supposed to emit before
+    * the first log record.  The base implementation returns an
+    * empty string, but subclasses such as {@link XMLFormatter}
+    * override this method in order to provide a suitable header.
+    *
+    * @return a string for the header.
+    *
+    * @param handler the handler which will prepend the returned
+    *     string in front of the first log record.  This method
+    *     may inspect certain properties of the handler, for
+    *     example its encoding, in order to construct the header.
+    */
+   public String getHead(Handler handler)
+   {
+     return "";
+   }
+ 
+ 
+   /**
+    * Returns a string that handlers are supposed to emit after
+    * the last log record.  The base implementation returns an
+    * empty string, but subclasses such as {@link XMLFormatter}
+    * override this method in order to provide a suitable tail.
+    *
+    * @return a string for the header.
+    *
+    * @param handler the handler which will append the returned
+    *     string after the last log record.  This method
+    *     may inspect certain properties of the handler
+    *     in order to construct the tail.
+    */
+   public String getTail(Handler handler)
+   {
+     return "";
+   }
+ 
+ 
+   /**
+    * Formats the message part of a log record.
+    *
+    * <p>First, the Formatter localizes the record message to the
+    * default locale by looking up the message in the record's
+    * localization resource bundle.  If this step fails because there
+    * is no resource bundle associated with the record, or because the
+    * record message is not a key in the bundle, the raw message is
+    * used instead.
+    *
+    * <p>Second, the Formatter substitutes appropriate strings for
+    * the message parameters. If the record returns a non-empty
+    * array for <code>getParameters()</code> and the localized
+    * message string contains the character sequence "{0", the
+    * formatter uses <code>java.text.MessageFormat</code> to format
+    * the message.  Otherwise, no parameter substitution is performed.
+    *
+    * @param record the log record to be localized and formatted.
+    *
+    * @return the localized message text where parameters have been
+    *         substituted by suitable strings.
+    *
+    * @throws NullPointerException if <code>record</code>
+    *         is <code>null</code>.
+    */
+   public String formatMessage(LogRecord record)
+   {
+     String          msg;
+     ResourceBundle  bundle;
+     Object[]        params;
+ 
+     /* This will throw a NullPointerExceptionif record is null. */
+     msg = record.getMessage();
+     if (msg == null)
+       msg = "";
+ 
+     /* Try to localize the message. */
+     bundle = record.getResourceBundle();
+     if (bundle != null)
+     {
+       try
+       {
+ 	msg = bundle.getString(msg);
+       }
+       catch (java.util.MissingResourceException _)
+       {
+       }
+     }
+ 
+     /* Format the message if there are parameters. */
+     params = record.getParameters();
+     if ((params != null)
+ 	&& (params.length > 0)
+ 	&& (msg.indexOf("{0") >= 0))
+     {
+       msg = MessageFormat.format(msg, params);
+     }
+ 
+     return msg;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/Handler.java gcc-4.1.0/libjava/classpath/java/util/logging/Handler.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/Handler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/Handler.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,386 ----
+ /* Handler.java -- a class for publishing log messages
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.io.UnsupportedEncodingException;
+ 
+ /**
+  * A <code>Handler</code> publishes <code>LogRecords</code> to
+  * a sink, for example a file, the console or a network socket.
+  * There are different subclasses of <code>Handler</code>
+  * to deal with different kinds of sinks.
+  *
+  * <p>FIXME: Are handlers thread-safe, or is the assumption that only
+  * loggers are, and a handler can belong only to one single logger? If
+  * the latter, should we enforce it? (Spec not clear). In any
+  * case, it needs documentation.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public abstract class Handler
+ {
+   Formatter     formatter;
+   Filter        filter;
+   Level         level;
+   ErrorManager  errorManager;
+   String        encoding;
+ 
+   /**
+    * Constructs a Handler with a logging severity level of
+    * <code>Level.ALL</code>, no formatter, no filter, and
+    * an instance of <code>ErrorManager</code> managing errors.
+    *
+    * <p><strong>Specification Note:</strong> The specification of the
+    * Java<sup>TM</sup> Logging API does not mention which character
+    * encoding is to be used by freshly constructed Handlers.  The GNU
+    * implementation uses the default platform encoding, but other
+    * Java implementations might behave differently.
+    *
+    * <p><strong>Specification Note:</strong> While a freshly constructed
+    * Handler is required to have <em>no filter</em> according to the
+    * specification, <code>null</code> is not a valid parameter for
+    * <code>Handler.setFormatter</code>.  Therefore, the following
+    * code will throw a <code>java.lang.NullPointerException</code>:
+    *
+    * <p><pre>Handler h = new MyConcreteSubclassOfHandler();
+ h.setFormatter(h.getFormatter());</pre>
+    *
+    * It seems strange that a freshly constructed Handler is not
+    * supposed to provide a Formatter, but this is what the specification
+    * says.
+    */
+   protected Handler()
+   {
+     level = Level.ALL;
+   }
+ 
+ 
+   /**
+    * Publishes a <code>LogRecord</code> to an appropriate sink,
+    * provided the record passes all tests for being loggable.  The
+    * <code>Handler</code> will localize the message of the log
+    * record and substitute any message parameters.
+    *
+    * <p>Most applications do not need to call this method directly.
+    * Instead, they will use use a {@link Logger}, which will
+    * create LogRecords and distribute them to registered handlers.
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code>
+    * of this <code>Handler</code> will be informed, but the caller
+    * of this method will not receive an exception.
+    *
+    * @param record the log event to be published.
+    */
+   public abstract void publish(LogRecord record);
+ 
+ 
+   /**
+    * Forces any data that may have been buffered to the underlying
+    * output device.
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code>
+    * of this <code>Handler</code> will be informed, but the caller
+    * of this method will not receive an exception.
+    */
+   public abstract void flush();
+ 
+ 
+   /**
+    * Closes this <code>Handler</code> after having flushed
+    * the buffers.  As soon as <code>close</code> has been called,
+    * a <code>Handler</code> should not be used anymore. Attempts
+    * to publish log records, to flush buffers, or to modify the
+    * <code>Handler</code> in any other way may throw runtime
+    * exceptions after calling <code>close</code>.
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code>
+    * of this <code>Handler</code> will be informed, but the caller
+    * of this method will not receive an exception.
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure.
+    */
+   public abstract void close()
+     throws SecurityException;
+ 
+ 
+   /**
+    * Returns the <code>Formatter</code> which will be used to
+    * localize the text of log messages and to substitute
+    * message parameters.  A <code>Handler</code> is encouraged,
+    * but not required to actually use an assigned
+    * <code>Formatter</code>.
+    *
+    * @return the <code>Formatter</code> being used, or
+    *         <code>null</code> if this <code>Handler</code>
+    *         does not use formatters and no formatter has
+    *         ever been set by calling <code>setFormatter</code>.
+    */
+   public Formatter getFormatter()
+   {
+     return formatter;
+   }
+ 
+ 
+   /**
+    * Sets the <code>Formatter</code> which will be used to
+    * localize the text of log messages and to substitute
+    * message parameters.  A <code>Handler</code> is encouraged,
+    * but not required to actually use an assigned
+    * <code>Formatter</code>.
+    *
+    * @param formatter the new <code>Formatter</code> to use.
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure.
+    *
+    * @throws NullPointerException if <code>formatter</code> is
+    *         <code>null</code>.
+    */
+   public void setFormatter(Formatter formatter)
+     throws SecurityException
+   {
+     LogManager.getLogManager().checkAccess();
+     
+     /* Throws a NullPointerException if formatter is null. */
+     formatter.getClass();
+ 
+     this.formatter = formatter;
+   }
+ 
+ 
+   /**
+    * Returns the character encoding which this handler uses for publishing
+    * log records.
+    *
+    * @return the name of a character encoding, or <code>null</code>
+    *         for the default platform encoding.
+    */
+   public String getEncoding()
+   {
+     return encoding;
+   }
+ 
+ 
+   /**
+    * Sets the character encoding which this handler uses for publishing
+    * log records.  The encoding of a <code>Handler</code> must be
+    * set before any log records have been published.
+    *
+    * @param encoding the name of a character encoding, or <code>null</code>
+    *            for the default encoding.
+    *
+    * @exception SecurityException if a security manager exists and
+    *            the caller is not granted the permission to control
+    *            the logging infrastructure.
+    *
+    */
+   public void setEncoding(String encoding)
+     throws SecurityException, UnsupportedEncodingException
+   {
+     /* Should any developer ever change this implementation, they are
+      * advised to have a look at StreamHandler.setEncoding(String),
+      * which overrides this method without calling super.setEncoding.
+      */
+     LogManager.getLogManager().checkAccess();
+ 
+     /* Simple check for supported encodings. This is more expensive
+      * than it could be, but this method is overwritten by StreamHandler
+      * anyway.
+      */
+     if (encoding != null)
+       new String(new byte[0], encoding);
+ 
+     this.encoding = encoding;
+   }
+ 
+ 
+   /**
+    * Returns the <code>Filter</code> that currently controls which
+    * log records are being published by this <code>Handler</code>.
+    *
+    * @return the currently active <code>Filter</code>, or
+    *         <code>null</code> if no filter has been associated.
+    *         In the latter case, log records are filtered purely
+    *         based on their severity level.
+    */
+   public Filter getFilter()
+   {
+     return filter;
+   }
+ 
+ 
+   /**
+    * Sets the <code>Filter</code> for controlling which
+    * log records will be published by this <code>Handler</code>.
+    *
+    * @param filter the <code>Filter</code> to use, or
+    *         <code>null</code> to filter log records purely based
+    *         on their severity level.
+    */
+   public void setFilter(Filter filter)
+     throws SecurityException
+   {
+     LogManager.getLogManager().checkAccess();
+     this.filter = filter;
+   }
+ 
+ 
+   /**
+    * Returns the <code>ErrorManager</code> that currently deals
+    * with errors originating from this Handler.
+    *
+    * @exception SecurityException if a security manager exists and
+    *            the caller is not granted the permission to control
+    *            the logging infrastructure.
+    */
+   public ErrorManager getErrorManager()
+   {
+     LogManager.getLogManager().checkAccess();
+ 
+     /* Developers wanting to change the subsequent code should
+      * have a look at Handler.reportError -- it also can create
+      * an ErrorManager, but does so without checking permissions
+      * to control the logging infrastructure.
+      */
+     if (errorManager == null)
+       errorManager = new ErrorManager();
+ 
+     return errorManager;
+   }
+ 
+ 
+   public void setErrorManager(ErrorManager manager)
+   {
+     LogManager.getLogManager().checkAccess();
+ 
+     /* Make sure manager is not null. */
+     manager.getClass();
+ 
+     this.errorManager = manager;
+   }
+ 
+ 
+   protected void reportError(String message, Exception ex, int code)
+   {
+     if (errorManager == null)
+       errorManager = new ErrorManager();
+ 
+     errorManager.error(message, ex, code);
+   }
+ 
+ 
+   /**
+    * Returns the severity level threshold for this <code>Handler</code>
+    * All log records with a lower severity level will be discarded;
+    * a log record of the same or a higher level will be published
+    * unless an installed <code>Filter</code> decides to discard it.
+    *
+    * @return the severity level below which all log messages
+    *         will be discarded.
+    */
+   public Level getLevel()
+   {
+     return level;
+   }
+ 
+ 
+   /**
+    * Sets the severity level threshold for this <code>Handler</code>.
+    * All log records with a lower severity level will be discarded;
+    * a log record of the same or a higher level will be published
+    * unless an installed <code>Filter</code> decides to discard it.
+    *
+    * @param level the severity level below which all log messages
+    *              will be discarded.
+    *
+    * @exception SecurityException if a security manager exists and
+    *            the caller is not granted the permission to control
+    *            the logging infrastructure.
+    *
+    * @exception NullPointerException if <code>level</code> is
+    *            <code>null</code>.
+    */
+   public void setLevel(Level level)
+   {
+     LogManager.getLogManager().checkAccess();
+ 
+     /* Throw NullPointerException if level is null.  */
+     level.getClass();
+     this.level = level;
+   }
+ 
+ 
+   /**
+    * Checks whether a <code>LogRecord</code> would be logged
+    * if it was passed to this <code>Handler</code> for publication.
+    *
+    * <p>The <code>Handler</code> implementation considers a record as
+    * loggable if its level is greater than or equal to the severity
+    * level threshold.  In a second step, if a {@link Filter} has
+    * been installed, its {@link Filter#isLoggable(LogRecord) isLoggable}
+    * method is invoked. Subclasses of <code>Handler</code> can override
+    * this method to impose their own constraints.
+    *
+    * @param record the <code>LogRecord</code> to be checked.
+    *
+    * @return <code>true</code> if <code>record</code> would
+    *         be published by {@link #publish(LogRecord) publish},
+    *         <code>false</code> if it would be discarded.
+    *
+    * @see #setLevel(Level)
+    * @see #setFilter(Filter)
+    * @see Filter#isLoggable(LogRecord)
+    *
+    * @throws NullPointerException if <code>record</code>
+    *         is <code>null</code>.
+    */
+   public boolean isLoggable(LogRecord record)
+   {
+     if (record.getLevel().intValue() < level.intValue())
+       return false;
+     
+     if (filter != null)
+       return filter.isLoggable(record);
+     else
+       return true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/Level.java gcc-4.1.0/libjava/classpath/java/util/logging/Level.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/Level.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/Level.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,414 ----
+ /* Level.java -- a class for indicating logging levels
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.io.Serializable;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * A class for indicating logging levels.  A number of commonly used
+  * levels is pre-defined (such as <code>java.util.logging.Level.INFO</code>),
+  * and applications should utilize those whenever possible.  For specialized
+  * purposes, however, applications can sub-class Level in order to define
+  * custom logging levels.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class Level implements Serializable
+ {
+   /* The integer values are the same as in the Sun J2SE 1.4.
+    * They have been obtained with a test program. In J2SE 1.4.1,
+    * Sun has amended the API documentation; these values are now
+    * publicly documented.
+    */
+ 
+   /**
+    * The <code>OFF</code> level is used as a threshold for filtering
+    * log records, meaning that no message should be logged.
+    *
+    * @see Logger#setLevel(java.util.logging.Level)
+    */
+   public static final Level OFF = new Level ("OFF", Integer.MAX_VALUE);
+ 
+   /**
+    * Log records whose level is <code>SEVERE</code> indicate a serious
+    * failure that prevents normal program execution.  Messages at this
+    * level should be understandable to an inexperienced, non-technical
+    * end user.  Ideally, they explain in simple words what actions the
+    * user can take in order to resolve the problem.
+    */
+   public static final Level SEVERE = new Level ("SEVERE", 1000);
+ 
+ 
+   /**
+    * Log records whose level is <code>WARNING</code> indicate a
+    * potential problem that does not prevent normal program execution.
+    * Messages at this level should be understandable to an
+    * inexperienced, non-technical end user.  Ideally, they explain in
+    * simple words what actions the user can take in order to resolve
+    * the problem.
+    */
+   public static final Level WARNING = new Level ("WARNING", 900);
+ 
+ 
+   /**
+    * Log records whose level is <code>INFO</code> are used in purely
+    * informational situations that do not constitute serious errors or
+    * potential problems. In the default logging configuration, INFO
+    * messages will be written to the system console.  For this reason,
+    * the INFO level should be used only for messages that are
+    * important to end users and system administrators.  Messages at
+    * this level should be understandable to an inexperienced,
+    * non-technical user.
+    */
+   public static final Level INFO = new Level ("INFO", 800);
+ 
+ 
+   /**
+    * Log records whose level is <code>CONFIG</code> are used for
+    * describing the static configuration, for example the windowing
+    * environment, the operating system version, etc.
+    */
+   public static final Level CONFIG = new Level ("CONFIG", 700);
+ 
+ 
+   /**
+    * Log records whose level is <code>FINE</code> are typically used
+    * for messages that are relevant for developers using
+    * the component generating log messages.  Examples include minor,
+    * recoverable failures, or possible inefficiencies.
+    */
+   public static final Level FINE = new Level ("FINE", 500);
+ 
+ 
+   /**
+    * Log records whose level is <code>FINER</code> are intended for
+    * rather detailed tracing, for example entering a method, returning
+    * from a method, or throwing an exception.
+    */
+   public static final Level FINER = new Level ("FINER", 400);
+ 
+ 
+   /**
+    * Log records whose level is <code>FINEST</code> are used for
+    * highly detailed tracing, for example to indicate that a certain
+    * point inside the body of a method has been reached.
+    */
+   public static final Level FINEST = new Level ("FINEST", 300);
+ 
+ 
+   /**
+    * The <code>ALL</code> level is used as a threshold for filtering
+    * log records, meaning that every message should be logged.
+    *
+    * @see Logger#setLevel(java.util.logging.Level)
+    */
+   public static final Level ALL = new Level ("ALL", Integer.MIN_VALUE);
+ 
+ 
+   private static final Level[] knownLevels = {
+     ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE, OFF
+   };
+ 
+ 
+   /**
+    * The name of the Level without localizing it, for example
+    * "WARNING".
+    */
+   private String name;
+ 
+ 
+   /**
+    * The integer value of this <code>Level</code>.
+    */
+   private int value;
+ 
+ 
+   /**
+    * The name of the resource bundle used for localizing the level
+    * name, or <code>null</code> if the name does not undergo
+    * localization.
+    */
+   private String resourceBundleName;
+ 
+ 
+   /**
+    * Creates a logging level given a name and an integer value.
+    * It rarely is necessary to create custom levels,
+    * as most applications should be well served with one of the
+    * standard levels such as <code>Level.CONFIG</code>,
+    * <code>Level.INFO</code>, or <code>Level.FINE</code>.
+    *
+    * @param name the name of the level.
+    *
+    * @param value the integer value of the level.  Please note
+    *     that the Java<small><sup>TM</sup></small>
+    *     Logging API does not specify integer
+    *	 values for standard levels (such as
+    *	 Level.FINE).  Therefore, a custom
+    *	 level should pass an integer value that
+    *	 is calculated at run-time, e.g.
+    *	 <code>(Level.FINE.intValue() + Level.CONFIG.intValue())
+    *	 / 2</code> for a level between FINE and CONFIG.
+    */
+   protected Level(String name, int value)
+   {
+     this(name, value, null);
+   }
+ 
+ 
+   /**
+    * Create a logging level given a name, an integer value and a name
+    * of a resource bundle for localizing the level name.  It rarely
+    * is necessary to create custom levels, as most applications
+    * should be well served with one of the standard levels such as
+    * <code>Level.CONFIG</code>, <code>Level.INFO</code>, or
+    * <code>Level.FINE</code>.
+    *
+    * @param name the name of the level.
+    *
+    * @param value the integer value of the level.  Please note
+    *        that the Java<small><sup>TM</sup></small>
+    *	    Logging API does not specify integer
+    *	    values for standard levels (such as
+    *	    Level.FINE).  Therefore, a custom
+    *	    level should pass an integer value that
+    *	    is calculated at run-time, e.g.
+    *	    <code>(Level.FINE.intValue() + Level.CONFIG.intValue())
+    *	    / 2</code> for a level between FINE and CONFIG.
+    *
+    * @param resourceBundleName the name of a resource bundle
+    *       for localizing the level name, or <code>null</code>
+    *       if the name does not need to be localized.
+    */
+   protected Level(String name, int value, String resourceBundleName)
+   {
+     this.name = name;
+     this.value = value;
+     this.resourceBundleName = resourceBundleName;
+   }
+ 
+ 
+   static final long serialVersionUID = -8176160795706313070L;
+ 
+ 
+   /**
+    * Checks whether the Level has the same intValue as one of the
+    * pre-defined levels.  If so, the pre-defined level object is
+    * returned.
+    *
+    * <br/>Since the resource bundle name is not taken into
+    * consideration, it is possible to resolve Level objects that have
+    * been de-serialized by another implementation, even if the other
+    * implementation uses a different resource bundle for localizing
+    * the names of pre-defined levels.
+    */
+   private Object readResolve()
+   {
+     for (int i = 0; i < knownLevels.length; i++)
+       if (value == knownLevels[i].intValue())
+ 	return knownLevels[i];
+ 
+     return this;
+   }
+ 
+ 
+   /**
+    * Returns the name of the resource bundle used for localizing the
+    * level name.
+    *
+    * @return the name of the resource bundle used for localizing the
+    * level name, or <code>null</code> if the name does not undergo
+    * localization.
+    */
+   public String getResourceBundleName()
+   {
+     return resourceBundleName;
+   }
+ 
+ 
+   /**
+    * Returns the name of the Level without localizing it, for example
+    * "WARNING".
+    */
+   public String getName()
+   {
+     return name;
+   }
+ 
+ 
+   /**
+    * Returns the name of the Level after localizing it, for example
+    * "WARNUNG".
+    */
+   public String getLocalizedName()
+   {
+     String localizedName = null;
+ 
+     if (resourceBundleName != null)
+     {
+       try
+       {
+         ResourceBundle b = ResourceBundle.getBundle(resourceBundleName);
+ 	localizedName = b.getString(name);
+       }
+       catch (Exception _)
+       {
+       }
+     }
+ 
+     if (localizedName != null)
+       return localizedName;
+     else
+       return name;
+   }
+ 
+ 
+   /**
+    * Returns the name of the Level without localizing it, for example
+    * "WARNING".
+    */
+   public final String toString()
+   {
+     return getName();
+   }
+ 
+ 
+   /**
+    * Returns the integer value of the Level.
+    */
+   public final int intValue()
+   {
+     return value;
+   }
+ 
+ 
+   /**
+    * Returns one of the standard Levels given either its name or its
+    * integer value.  Custom subclasses of Level will not be returned
+    * by this method.
+    *
+    * @throws IllegalArgumentException if <code>name</code> is neither
+    * the name nor the integer value of one of the pre-defined standard
+    * logging levels.
+    *
+    * @throws NullPointerException if <code>name</code> is null.
+    *
+    */
+   public static Level parse(String name)
+     throws IllegalArgumentException
+   {
+     /* This will throw a NullPointerException if name is null,
+      * as required by the API specification.
+      */
+     name = name.intern();
+ 
+     for (int i = 0; i < knownLevels.length; i++)
+     {
+       if (name == knownLevels[i].name)
+ 	return knownLevels[i];
+     }
+     
+     try
+     {
+       int num = Integer.parseInt(name);
+       for (int i = 0; i < knownLevels.length; i++)
+ 	if (num == knownLevels[i].value)
+ 	  return knownLevels[i];
+     }
+     catch (NumberFormatException _)
+     {
+     }
+ 
+     String msg = "Not the name of a standard logging level: \"" + name + "\"";
+     throw new IllegalArgumentException(msg);
+   }
+ 
+ 
+   /**
+    * Checks whether this Level's integer value is equal to that of
+    * another object.
+    *
+    * @return <code>true</code> if <code>other</code> is an instance of
+    *	 <code>java.util.logging.Level</code> and has the same integer
+    * value, <code>false</code> otherwise.
+    */
+   public boolean equals(Object other)
+   {
+     if (!(other instanceof Level))
+       return false;
+ 
+     return value == ((Level) other).value;
+   }
+ 
+ 
+   /**
+    * Returns a hash code for this Level which is based on its numeric
+    * value.
+    */
+   public int hashCode()
+   {
+     return value;
+   }  
+ 
+ 
+   /**
+    * Determines whether or not this Level is one of the standard
+    * levels specified in the Logging API.
+    *
+    * <p>This method is package-private because it is not part
+    * of the logging API specification.  However, an XMLFormatter
+    * is supposed to emit the numeric value for a custom log
+    * level, but the name for a pre-defined level. It seems
+    * cleaner to put this method to Level than to write some
+    * procedural code for XMLFormatter.
+    *
+    * @return <code>true</code> if this Level is a standard level,
+    *         <code>false</code> otherwise.
+    */
+   final boolean isStandardLevel()
+   {
+     for (int i = 0; i < knownLevels.length; i++)
+       if (knownLevels[i] == this)
+ 	return true;
+ 
+     return false;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/LogManager.java gcc-4.1.0/libjava/classpath/java/util/logging/LogManager.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/LogManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/LogManager.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,829 ----
+ /* LogManager.java -- a class for maintaining Loggers and managing
+    configuration properties
+    Copyright (C) 2002,2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyChangeSupport;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.lang.ref.WeakReference;
+ import java.net.URL;
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * The <code>LogManager</code> maintains a hierarchical namespace
+  * of Logger objects and manages properties for configuring the logging
+  * framework. There exists only one single <code>LogManager</code>
+  * per virtual machine. This instance can be retrieved using the
+  * static method {@link #getLogManager()}.
+  *
+  * <p><strong>Configuration Process:</strong> The global LogManager
+  * object is created and configured when the class
+  * <code>java.util.logging.LogManager</code> is initialized.
+  * The configuration process includes the subsequent steps:
+  *
+  * <ul>
+  * <li>If the system property <code>java.util.logging.manager</code>
+  *     is set to the name of a subclass of
+  *     <code>java.util.logging.LogManager</code>, an instance of
+  *     that subclass is created and becomes the global LogManager.
+  *     Otherwise, a new instance of LogManager is created.</li>
+  * <li>The <code>LogManager</code> constructor tries to create
+  *     a new instance of the class specified by the system
+  *     property <code>java.util.logging.config.class</code>.
+  *     Typically, the constructor of this class will call
+  *     <code>LogManager.getLogManager().readConfiguration(java.io.InputStream)</code>
+  *     for configuring the logging framework.
+  *     The configuration process stops at this point if
+  *     the system property <code>java.util.logging.config.class</code>
+  *     is set (irrespective of whether the class constructor
+  *     could be called or an exception was thrown).</li>
+  *
+  * <li>If the system property <code>java.util.logging.config.class</code>
+  *     is <em>not</em> set, the configuration parameters are read in from
+  *     a file and passed to
+  *     {@link #readConfiguration(java.io.InputStream)}.
+  *     The name and location of this file are specified by the system
+  *     property <code>java.util.logging.config.file</code>.</li>
+  * <li>If the system property <code>java.util.logging.config.file</code>
+  *     is not set, however, the contents of the URL
+  *     "{gnu.classpath.home.url}/logging.properties" are passed to
+  *     {@link #readConfiguration(java.io.InputStream)}.
+  *     Here, "{gnu.classpath.home.url}" stands for the value of
+  *     the system property <code>gnu.classpath.home.url</code>.</li>
+  * </ul>
+  *
+  * <p>The <code>LogManager</code> has a level of <code>INFO</code> by
+  * default, and this will be inherited by <code>Logger</code>s unless they
+  * override it either by properties or programmatically.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class LogManager
+ {
+   /**
+    * The singleton LogManager instance.
+    */
+   private static LogManager logManager;
+ 
+   /**
+    * The registered named loggers; maps the name of a Logger to
+    * a WeakReference to it.
+    */
+   private Map loggers;
+   final Logger rootLogger;
+ 
+   /**
+    * The properties for the logging framework which have been
+    * read in last.
+    */
+   private Properties properties;
+ 
+   /**
+    * A delegate object that provides support for handling
+    * PropertyChangeEvents.  The API specification does not
+    * mention which bean should be the source in the distributed
+    * PropertyChangeEvents, but Mauve test code has determined that
+    * the Sun J2SE 1.4 reference implementation uses the LogManager
+    * class object. This is somewhat strange, as the class object
+    * is not the bean with which listeners have to register, but
+    * there is no reason for the GNU Classpath implementation to
+    * behave differently from the reference implementation in
+    * this case.
+    */
+   private final PropertyChangeSupport pcs = new PropertyChangeSupport( /* source bean */
+   LogManager.class);
+ 
+   protected LogManager()
+   {
+     if (logManager != null)
+       throw new IllegalStateException("there can be only one LogManager; use LogManager.getLogManager()");
+ 
+     logManager = this;
+     loggers = new java.util.HashMap();
+     rootLogger = new Logger("", null);
+     rootLogger.setLevel(Level.INFO);
+     addLogger(rootLogger);
+ 
+     /* Make sure that Logger.global has the rootLogger as its parent.
+      *
+      * Logger.global is set during class initialization of Logger,
+      * which may or may not be before this code is being executed.
+      * For example, on the Sun 1.3.1 and 1.4.0 JVMs, Logger.global
+      * has been set before this code is being executed. In contrast,
+      * Logger.global still is null on GCJ 3.2.  Since the LogManager
+      * and Logger classes are mutually dependent, both behaviors are
+      * correct.
+      *
+      * This means that we cannot depend on Logger.global to have its
+      * value when this code executes, although that variable is final.
+      * Since Logger.getLogger will always return the same logger for
+      * the same name, the subsequent line works fine irrespective of
+      * the order in which classes are initialized.
+      */
+     Logger.getLogger("global").setParent(rootLogger);
+     Logger.getLogger("global").setUseParentHandlers(true);
+   }
+ 
+   /**
+    * Returns the globally shared LogManager instance.
+    */
+   public static LogManager getLogManager()
+   {
+     return logManager;
+   }
+ 
+   static
+     {
+       makeLogManager();
+ 
+       /* The Javadoc description of the class explains
+        * what is going on here.
+        */
+       Object configurator = createInstance(System.getProperty("java.util.logging.config.class"),
+                                            /* must be instance of */ Object.class);
+ 
+       try
+         {
+ 	  if (configurator == null)
+ 	    getLogManager().readConfiguration();
+         }
+       catch (IOException ex)
+         {
+ 	  /* FIXME: Is it ok to ignore exceptions here? */
+         }
+     }
+ 
+   private static LogManager makeLogManager()
+   {
+     String managerClassName;
+     LogManager manager;
+ 
+     managerClassName = System.getProperty("java.util.logging.manager");
+     manager = (LogManager) createInstance(managerClassName, LogManager.class);
+     if (manager != null)
+       return manager;
+ 
+     if (managerClassName != null)
+       System.err.println("WARNING: System property \"java.util.logging.manager\""
+                          + " should be the name of a subclass of java.util.logging.LogManager");
+ 
+     return new LogManager();
+   }
+ 
+   /**
+    * Registers a listener which will be notified when the
+    * logging properties are re-read.
+    */
+   public synchronized void addPropertyChangeListener(PropertyChangeListener listener)
+   {
+     /* do not register null. */
+     listener.getClass();
+ 
+     pcs.addPropertyChangeListener(listener);
+   }
+ 
+   /**
+    * Unregisters a listener.
+    *
+    * If <code>listener</code> has not been registered previously,
+    * nothing happens.  Also, no exception is thrown if
+    * <code>listener</code> is <code>null</code>.
+    */
+   public synchronized void removePropertyChangeListener(PropertyChangeListener listener)
+   {
+     if (listener != null)
+       pcs.removePropertyChangeListener(listener);
+   }
+ 
+   /**
+    * Adds a named logger.  If a logger with the same name has
+    * already been registered, the method returns <code>false</code>
+    * without adding the logger.
+    *
+    * <p>The <code>LogManager</code> only keeps weak references
+    * to registered loggers.  Therefore, names can become available
+    * after automatic garbage collection.
+    *
+    * @param logger the logger to be added.
+    *
+    * @return <code>true</code>if <code>logger</code> was added,
+    *         <code>false</code> otherwise.
+    *
+    * @throws NullPointerException if <code>name</code> is
+    *         <code>null</code>.
+    */
+   public synchronized boolean addLogger(Logger logger)
+   {
+     /* To developers thinking about to remove the 'synchronized'
+      * declaration from this method: Please read the comment
+      * in java.util.logging.Logger.getLogger(String, String)
+      * and make sure that whatever you change wrt. synchronization
+      * does not endanger thread-safety of Logger.getLogger.
+      * The current implementation of Logger.getLogger assumes
+      * that LogManager does its synchronization on the globally
+      * shared instance of LogManager.
+      */
+     String name;
+     WeakReference ref;
+ 
+     /* This will throw a NullPointerException if logger is null,
+      * as required by the API specification.
+      */
+     name = logger.getName();
+ 
+     ref = (WeakReference) loggers.get(name);
+     if (ref != null)
+       {
+ 	if (ref.get() != null)
+ 	  return false;
+ 
+ 	/* There has been a logger under this name in the past,
+ 	 * but it has been garbage collected.
+ 	 */
+ 	loggers.remove(ref);
+       }
+ 
+     /* Adding a named logger requires a security permission. */
+     if ((name != null) && ! name.equals(""))
+       checkAccess();
+ 
+     Logger parent = findAncestor(logger);
+     loggers.put(name, new WeakReference(logger));
+     if (parent != logger.getParent())
+       logger.setParent(parent);
+ 
+     /* It can happen that existing loggers should be children of
+      * the newly added logger. For example, assume that there
+      * already exist loggers under the names "", "foo", and "foo.bar.baz".
+      * When adding "foo.bar", the logger "foo.bar.baz" should change
+      * its parent to "foo.bar".
+      */
+     if (parent != rootLogger)
+       {
+ 	for (Iterator iter = loggers.keySet().iterator(); iter.hasNext();)
+ 	  {
+ 	    Logger possChild = (Logger) ((WeakReference) loggers.get(iter.next()))
+ 	                       .get();
+ 	    if ((possChild == null) || (possChild == logger)
+ 	        || (possChild.getParent() != parent))
+ 	      continue;
+ 
+ 	    if (! possChild.getName().startsWith(name))
+ 	      continue;
+ 
+ 	    if (possChild.getName().charAt(name.length()) != '.')
+ 	      continue;
+ 
+ 	    possChild.setParent(logger);
+ 	  }
+       }
+ 
+     return true;
+   }
+ 
+   /**
+    * Finds the closest ancestor for a logger among the currently
+    * registered ones.  For example, if the currently registered
+    * loggers have the names "", "foo", and "foo.bar", the result for
+    * "foo.bar.baz" will be the logger whose name is "foo.bar".
+    *
+    * @param child a logger for whose name no logger has been
+    *        registered.
+    *
+    * @return the closest ancestor for <code>child</code>,
+    *         or <code>null</code> if <code>child</code>
+    *         is the root logger.
+    *
+    * @throws NullPointerException if <code>child</code>
+    *         is <code>null</code>.
+    */
+   private synchronized Logger findAncestor(Logger child)
+   {
+     String childName = child.getName();
+     int childNameLength = childName.length();
+     Logger best = rootLogger;
+     int bestNameLength = 0;
+ 
+     Logger cand;
+     String candName;
+     int candNameLength;
+ 
+     if (child == rootLogger)
+       return null;
+ 
+     for (Iterator iter = loggers.keySet().iterator(); iter.hasNext();)
+       {
+ 	candName = (String) iter.next();
+ 	candNameLength = candName.length();
+ 
+ 	if (candNameLength > bestNameLength
+ 	    && childNameLength > candNameLength
+ 	    && childName.startsWith(candName)
+ 	    && childName.charAt(candNameLength) == '.')
+ 	  {
+ 	    cand = (Logger) ((WeakReference) loggers.get(candName)).get();
+ 	    if ((cand == null) || (cand == child))
+ 	      continue;
+ 
+ 	    bestNameLength = candName.length();
+ 	    best = cand;
+ 	  }
+       }
+ 
+     return best;
+   }
+ 
+   /**
+    * Returns a Logger given its name.
+    *
+    * @param name the name of the logger.
+    *
+    * @return a named Logger, or <code>null</code> if there is no
+    *     logger with that name.
+    *
+    * @throw java.lang.NullPointerException if <code>name</code>
+    *     is <code>null</code>.
+    */
+   public synchronized Logger getLogger(String name)
+   {
+     WeakReference ref;
+ 
+     /* Throw a NullPointerException if name is null. */
+     name.getClass();
+ 
+     ref = (WeakReference) loggers.get(name);
+     if (ref != null)
+       return (Logger) ref.get();
+     else
+       return null;
+   }
+ 
+   /**
+    * Returns an Enumeration of currently registered Logger names.
+    * Since other threads can register loggers at any time, the
+    * result could be different any time this method is called.
+    *
+    * @return an Enumeration with the names of the currently
+    *    registered Loggers.
+    */
+   public synchronized Enumeration getLoggerNames()
+   {
+     return Collections.enumeration(loggers.keySet());
+   }
+ 
+   /**
+    * Resets the logging configuration by removing all handlers for
+    * registered named loggers and setting their level to <code>null</code>.
+    * The level of the root logger will be set to <code>Level.INFO</code>.
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure.
+    */
+   public synchronized void reset() throws SecurityException
+   {
+     /* Throw a SecurityException if the caller does not have the
+      * permission to control the logging infrastructure.
+      */
+     checkAccess();
+ 
+     properties = new Properties();
+ 
+     Iterator iter = loggers.values().iterator();
+     while (iter.hasNext())
+       {
+ 	WeakReference ref;
+ 	Logger logger;
+ 
+ 	ref = (WeakReference) iter.next();
+ 	if (ref != null)
+ 	  {
+ 	    logger = (Logger) ref.get();
+ 
+ 	    if (logger == null)
+ 	      iter.remove();
+ 	    else if (logger != rootLogger)
+ 	      {
+ 	        logger.resetLogger();
+ 	        logger.setLevel(null);
+ 	      }
+ 	  }
+       }
+ 
+     rootLogger.setLevel(Level.INFO);
+     rootLogger.resetLogger();
+   }
+ 
+   /**
+    * Configures the logging framework by reading a configuration file.
+    * The name and location of this file are specified by the system
+    * property <code>java.util.logging.config.file</code>.  If this
+    * property is not set, the URL
+    * "{gnu.classpath.home.url}/logging.properties" is taken, where
+    * "{gnu.classpath.home.url}" stands for the value of the system
+    * property <code>gnu.classpath.home.url</code>.
+    *
+    * <p>The task of configuring the framework is then delegated to
+    * {@link #readConfiguration(java.io.InputStream)}, which will
+    * notify registered listeners after having read the properties.
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure, or if the caller is
+    *         not granted the permission to read the configuration
+    *         file.
+    *
+    * @throws IOException if there is a problem reading in the
+    *         configuration file.
+    */
+   public synchronized void readConfiguration()
+     throws IOException, SecurityException
+   {
+     String path;
+     InputStream inputStream;
+ 
+     path = System.getProperty("java.util.logging.config.file");
+     if ((path == null) || (path.length() == 0))
+       {
+ 	String url = (System.getProperty("gnu.classpath.home.url")
+ 	             + "/logging.properties");
+ 	inputStream = new URL(url).openStream();
+       }
+     else
+       inputStream = new java.io.FileInputStream(path);
+ 
+     try
+       {
+ 	readConfiguration(inputStream);
+       }
+     finally
+       {
+ 	/* Close the stream in order to save
+ 	 * resources such as file descriptors.
+ 	 */
+ 	inputStream.close();
+       }
+   }
+ 
+   public synchronized void readConfiguration(InputStream inputStream)
+     throws IOException, SecurityException
+   {
+     Properties newProperties;
+     Enumeration keys;
+ 
+     checkAccess();
+     newProperties = new Properties();
+     newProperties.load(inputStream);
+     reset();
+     this.properties = newProperties;
+     keys = newProperties.propertyNames();
+ 
+     while (keys.hasMoreElements())
+       {
+ 	String key = ((String) keys.nextElement()).trim();
+ 	String value = newProperties.getProperty(key);
+ 
+ 	if (value == null)
+ 	  continue;
+ 
+ 	value = value.trim();
+ 
+ 	if ("handlers".equals(key))
+ 	  {
+ 	    StringTokenizer tokenizer = new StringTokenizer(value);
+ 	    while (tokenizer.hasMoreTokens())
+ 	      {
+ 		String handlerName = tokenizer.nextToken();
+ 		try
+ 		  {
+ 		    Class handlerClass = ClassLoader.getSystemClassLoader().loadClass(handlerName);
+ 		    getLogger("").addHandler((Handler) handlerClass
+ 		                             .newInstance());
+ 		  }
+ 		catch (ClassCastException ex)
+ 		  {
+ 		    System.err.println("[LogManager] class " + handlerName
+ 		                       + " is not subclass of java.util.logging.Handler");
+ 		  }
+ 		catch (Exception ex)
+ 		  {
+ 		    //System.out.println("[LogManager.readConfiguration]"+ex);
+ 		  }
+ 	      }
+ 	  }
+ 
+ 	if (key.endsWith(".level"))
+ 	  {
+ 	    String loggerName = key.substring(0, key.length() - 6);
+ 	    Logger logger = getLogger(loggerName);
+ 
+ 	    if (logger == null)
+ 	      {
+ 		logger = Logger.getLogger(loggerName);
+ 		addLogger(logger);
+ 	      }
+ 	    try
+ 	      {
+ 		logger.setLevel(Level.parse(value));
+ 	      }
+ 	    catch (Exception _)
+ 	      {
+ 		//System.out.println("[LogManager.readConfiguration] "+_);
+ 	      }
+ 	    continue;
+ 	  }
+       }
+ 
+     /* The API specification does not talk about the
+      * property name that is distributed with the
+      * PropertyChangeEvent.  With test code, it could
+      * be determined that the Sun J2SE 1.4 reference
+      * implementation uses null for the property name.
+      */
+     pcs.firePropertyChange(null, null, null);
+   }
+ 
+   /**
+    * Returns the value of a configuration property as a String.
+    */
+   public synchronized String getProperty(String name)
+   {
+     if (properties != null)
+       return properties.getProperty(name);
+     else
+       return null;
+   }
+ 
+   /**
+    * Returns the value of a configuration property as an integer.
+    * This function is a helper used by the Classpath implementation
+    * of java.util.logging, it is <em>not</em> specified in the
+    * logging API.
+    *
+    * @param name the name of the configuration property.
+    *
+    * @param defaultValue the value that will be returned if the
+    *        property is not defined, or if its value is not an integer
+    *        number.
+    */
+   static int getIntProperty(String name, int defaultValue)
+   {
+     try
+       {
+ 	return Integer.parseInt(getLogManager().getProperty(name));
+       }
+     catch (Exception ex)
+       {
+ 	return defaultValue;
+       }
+   }
+ 
+   /**
+    * Returns the value of a configuration property as an integer,
+    * provided it is inside the acceptable range.
+    * This function is a helper used by the Classpath implementation
+    * of java.util.logging, it is <em>not</em> specified in the
+    * logging API.
+    *
+    * @param name the name of the configuration property.
+    *
+    * @param minValue the lowest acceptable value.
+    *
+    * @param maxValue the highest acceptable value.
+    *
+    * @param defaultValue the value that will be returned if the
+    *        property is not defined, or if its value is not an integer
+    *        number, or if it is less than the minimum value,
+    *        or if it is greater than the maximum value.
+    */
+   static int getIntPropertyClamped(String name, int defaultValue,
+                                    int minValue, int maxValue)
+   {
+     int val = getIntProperty(name, defaultValue);
+     if ((val < minValue) || (val > maxValue))
+       val = defaultValue;
+     return val;
+   }
+ 
+   /**
+    * Returns the value of a configuration property as a boolean.
+    * This function is a helper used by the Classpath implementation
+    * of java.util.logging, it is <em>not</em> specified in the
+    * logging API.
+    *
+    * @param name the name of the configuration property.
+    *
+    * @param defaultValue the value that will be returned if the
+    *        property is not defined, or if its value is neither
+    *        <code>"true"</code> nor <code>"false"</code>.
+    */
+   static boolean getBooleanProperty(String name, boolean defaultValue)
+   {
+     try
+       {
+ 	return (Boolean.valueOf(getLogManager().getProperty(name))).booleanValue();
+       }
+     catch (Exception ex)
+       {
+ 	return defaultValue;
+       }
+   }
+ 
+   /**
+    * Returns the value of a configuration property as a Level.
+    * This function is a helper used by the Classpath implementation
+    * of java.util.logging, it is <em>not</em> specified in the
+    * logging API.
+    *
+    * @param propertyName the name of the configuration property.
+    *
+    * @param defaultValue the value that will be returned if the
+    *        property is not defined, or if
+    *        {@link Level#parse(java.lang.String)} does not like
+    *        the property value.
+    */
+   static Level getLevelProperty(String propertyName, Level defaultValue)
+   {
+     try
+       {
+ 	return Level.parse(getLogManager().getProperty(propertyName));
+       }
+     catch (Exception ex)
+       {
+ 	return defaultValue;
+       }
+   }
+ 
+   /**
+    * Returns the value of a configuration property as a Class.
+    * This function is a helper used by the Classpath implementation
+    * of java.util.logging, it is <em>not</em> specified in the
+    * logging API.
+    *
+    * @param propertyName the name of the configuration property.
+    *
+    * @param defaultValue the value that will be returned if the
+    *        property is not defined, or if it does not specify
+    *        the name of a loadable class.
+    */
+   static final Class getClassProperty(String propertyName, Class defaultValue)
+   {
+     Class usingClass = null;
+ 
+     try
+       {
+ 	String propertyValue = logManager.getProperty(propertyName);
+ 	if (propertyValue != null)
+ 	  usingClass = Class.forName(propertyValue);
+ 	if (usingClass != null)
+ 	  return usingClass;
+       }
+     catch (Exception _)
+       {
+       }
+ 
+     return defaultValue;
+   }
+ 
+   static final Object getInstanceProperty(String propertyName, Class ofClass,
+                                           Class defaultClass)
+   {
+     Class klass = getClassProperty(propertyName, defaultClass);
+     if (klass == null)
+       return null;
+ 
+     try
+       {
+ 	Object obj = klass.newInstance();
+ 	if (ofClass.isInstance(obj))
+ 	  return obj;
+       }
+     catch (Exception _)
+       {
+       }
+ 
+     if (defaultClass == null)
+       return null;
+ 
+     try
+       {
+ 	return defaultClass.newInstance();
+       }
+     catch (java.lang.InstantiationException ex)
+       {
+ 	throw new RuntimeException(ex.getMessage());
+       }
+     catch (java.lang.IllegalAccessException ex)
+       {
+ 	throw new RuntimeException(ex.getMessage());
+       }
+   }
+ 
+   /**
+    * An instance of <code>LoggingPermission("control")</code>
+    * that is shared between calls to <code>checkAccess()</code>.
+    */
+   private static final LoggingPermission controlPermission = new LoggingPermission("control",
+                                                                                    null);
+ 
+   /**
+    * Checks whether the current security context allows changing
+    * the configuration of the logging framework.  For the security
+    * context to be trusted, it has to be granted
+    * a LoggingPermission("control").
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure.
+    */
+   public void checkAccess() throws SecurityException
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(controlPermission);
+   }
+ 
+   /**
+    * Creates a new instance of a class specified by name.
+    *
+    * @param className the name of the class of which a new instance
+    *        should be created.
+    *
+    * @param ofClass the class to which the new instance should
+    *        be either an instance or an instance of a subclass.
+    *        FIXME: This description is just terrible.
+    *
+    * @return the new instance, or <code>null</code> if
+    *         <code>className</code> is <code>null</code>, if no class
+    *         with that name could be found, if there was an error
+    *         loading that class, or if the constructor of the class
+    *         has thrown an exception.
+    */
+   static final Object createInstance(String className, Class ofClass)
+   {
+     Class klass;
+ 
+     if ((className == null) || (className.length() == 0))
+       return null;
+ 
+     try
+       {
+ 	klass = Class.forName(className);
+ 	if (! ofClass.isAssignableFrom(klass))
+ 	  return null;
+ 
+ 	return klass.newInstance();
+       }
+     catch (Exception _)
+       {
+ 	return null;
+       }
+     catch (java.lang.LinkageError _)
+       {
+ 	return null;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/LogRecord.java gcc-4.1.0/libjava/classpath/java/util/logging/LogRecord.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/LogRecord.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/LogRecord.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,672 ----
+ /* LogRecord.java --
+    A class for the state associated with individual logging events
+    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.util.ResourceBundle;
+ 
+ 
+ /**
+  * A <code>LogRecord</code> contains the state for an individual
+  * event to be logged.
+  *
+  * <p>As soon as a LogRecord instance has been handed over to the
+  * logging framework, applications should not manipulate it anymore.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class LogRecord
+   implements java.io.Serializable
+ {
+   /**
+    * The severity level of this <code>LogRecord</code>.
+    */
+   private Level      level;
+ 
+ 
+   /**
+    * The sequence number of this <code>LogRecord</code>.
+    */
+   private long       sequenceNumber;
+ 
+ 
+   /**
+    * The name of the class that issued the logging request, or
+    * <code>null</code> if this information could not be obtained.
+    */
+   private String     sourceClassName;
+ 
+ 
+   /**
+    * The name of the method that issued the logging request, or
+    * <code>null</code> if this information could not be obtained.
+    */
+   private String sourceMethodName;
+ 
+ 
+   /**
+    * The message for this <code>LogRecord</code> before
+    * any localization or formatting.
+    */
+   private String message;
+ 
+ 
+   /**
+    * An identifier for the thread in which this <code>LogRecord</code>
+    * was created.  The identifier is not necessarily related to any
+    * thread identifiers used by the operating system.
+    */
+   private int threadID;
+ 
+ 
+   /**
+    * The time when this <code>LogRecord</code> was created,
+    * in milliseconds since the beginning of January 1, 1970.
+    */
+   private long millis;
+ 
+ 
+   /**
+    * The Throwable associated with this <code>LogRecord</code>, or
+    * <code>null</code> if the logged event is not related to an
+    * exception or error.
+    */
+   private Throwable thrown;
+ 
+ 
+   /**
+    * The name of the logger where this <code>LogRecord</code> has
+    * originated, or <code>null</code> if this <code>LogRecord</code>
+    * does not originate from a <code>Logger</code>.
+    */
+   private String  loggerName;
+ 
+ 
+   /**
+    * The name of the resource bundle used for localizing log messages,
+    * or <code>null</code> if no bundle has been specified.
+    */
+   private String resourceBundleName;
+ 
+   private transient Object[] parameters;
+ 
+   private transient ResourceBundle bundle;
+ 
+ 
+   /**
+    * Constructs a <code>LogRecord</code> given a severity level and
+    * an unlocalized message text.  In addition, the sequence number,
+    * creation time (as returned by <code>getMillis()</code>) and
+    * thread ID are assigned. All other properties are set to
+    * <code>null</code>.
+    *
+    * @param level the severity level, for example <code>Level.WARNING</code>.
+    *
+    * @param message the message text (which will be used as key
+    *                for looking up the localized message text
+    *                if a resource bundle has been associated). 
+    */
+   public LogRecord(Level level, String message)
+   {
+     this.level = level;
+     this.message = message;
+     this.millis = System.currentTimeMillis();
+ 
+     /* A subclass of java.lang.Thread could override hashCode(),
+      * in which case the result would not be guaranteed anymore
+      * to be unique among all threads.  While System.identityHashCode
+      * is not necessarily unique either, it at least cannot be
+      * overridden by user code.  However, is might be a good idea
+      * to use something better for generating thread IDs.
+      */
+     this.threadID = System.identityHashCode(Thread.currentThread());
+ 
+     sequenceNumber = allocateSeqNum();
+   }
+ 
+ 
+   /**
+    * Determined with the serialver tool of the Sun J2SE 1.4.
+    */
+   static final long serialVersionUID = 5372048053134512534L;
+ 
+   private void readObject(java.io.ObjectInputStream in)
+     throws java.io.IOException, java.lang.ClassNotFoundException
+   {
+     in.defaultReadObject();
+ 
+     /* We assume that future versions will be downwards compatible,
+      * so we can ignore the versions.
+      */
+     byte majorVersion = in.readByte();
+     byte minorVersion = in.readByte();
+ 
+     int numParams = in.readInt();
+     if (numParams >= 0)
+     {
+       parameters = new Object[numParams];
+       for (int i = 0; i < numParams; i++)
+ 	parameters[i] = in.readObject();
+     }
+   }
+ 
+ 
+   /**
+    * @serialData The default fields, followed by a major byte version
+    * number, followed by a minor byte version number, followed by
+    * information about the log record parameters.  If
+    * <code>parameters</code> is <code>null</code>, the integer -1 is
+    * written, otherwise the length of the <code>parameters</code>
+    * array (which can be zero), followed by the result of calling
+    * {@link Object#toString() toString()} on the parameter (or
+    * <code>null</code> if the parameter is <code>null</code>).
+    *
+    * <p><strong>Specification Note:</strong> The Javadoc for the
+    * Sun reference implementation does not specify the version
+    * number. FIXME: Reverse-engineer the JDK and file a bug
+    * report with Sun, asking for amendment of the specification.
+    */
+   private void writeObject(java.io.ObjectOutputStream out)
+     throws java.io.IOException
+   {
+     out.defaultWriteObject();
+ 
+     /* Major, minor version number: The Javadoc for J2SE1.4 does not
+      * specify the values.
+      */
+     out.writeByte(0);
+     out.writeByte(0);
+ 
+     if (parameters == null)
+       out.writeInt(-1);
+     else
+     {
+       out.writeInt(parameters.length);
+       for (int i = 0; i < parameters.length; i++)
+       {
+ 	if (parameters[i] == null)
+ 	  out.writeObject(null);
+ 	else
+ 	  out.writeObject(parameters[i].toString());
+       }
+     }
+   }
+ 
+ 
+   /**
+    * Returns the name of the logger where this <code>LogRecord</code>
+    * has originated.
+    *
+    * @return the name of the source {@link Logger}, or
+    *         <code>null</code> if this <code>LogRecord</code>
+    *         does not originate from a <code>Logger</code>.
+    */
+   public String getLoggerName()
+   {
+     return loggerName;
+   }
+ 
+ 
+   /**
+    * Sets the name of the logger where this <code>LogRecord</code>
+    * has originated.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    *
+    * @param name the name of the source logger, or <code>null</code> to
+    *             indicate that this <code>LogRecord</code> does not
+    *             originate from a <code>Logger</code>.
+    */
+   public void setLoggerName(String name)
+   {
+     loggerName = name;
+   }
+ 
+ 
+   /**
+    * Returns the resource bundle that is used when the message
+    * of this <code>LogRecord</code> needs to be localized.
+    *
+    * @return the resource bundle used for localization,
+    *         or <code>null</code> if this message does not need
+    *         to be localized.
+    */
+   public ResourceBundle getResourceBundle()
+   {
+     return bundle;
+   }
+ 
+ 
+   /**
+    * Sets the resource bundle that is used when the message
+    * of this <code>LogRecord</code> needs to be localized.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    *
+    * @param bundle  the resource bundle to be used, or
+    *                <code>null</code> to indicate that this
+    *                message does not need to be localized.
+    */
+   public void setResourceBundle(ResourceBundle bundle)
+   {
+     this.bundle = bundle;
+ 
+     /* FIXME: Is there a way to infer the name
+      * of a resource bundle from a ResourceBundle object?
+      */
+     this.resourceBundleName = null;
+   }
+ 
+ 
+   /**
+    * Returns the name of the resource bundle that is used when the
+    * message of this <code>LogRecord</code> needs to be localized.
+    *
+    * @return the name of the resource bundle used for localization,
+    *         or <code>null</code> if this message does not need
+    *         to be localized.
+    */
+   public String getResourceBundleName()
+   {
+     return resourceBundleName;
+   }
+ 
+ 
+   /**
+    * Sets the name of the resource bundle that is used when the
+    * message of this <code>LogRecord</code> needs to be localized.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    *
+    * @param name the name of the resource bundle to be used, or
+    *             <code>null</code> to indicate that this message
+    *             does not need to be localized.
+    */
+   public void setResourceBundleName(String name)
+   {
+     resourceBundleName = name;
+     bundle = null;
+     
+     try
+     {
+       if (resourceBundleName != null)
+ 	bundle = ResourceBundle.getBundle(resourceBundleName);
+     }
+     catch (java.util.MissingResourceException _)
+     {
+     }
+   }
+ 
+ 
+   /**
+    * Returns the level of the LogRecord.
+    *
+    * <p>Applications should be aware of the possibility that the
+    *  result is not necessarily one of the standard logging levels,
+    *  since the logging framework allows to create custom subclasses
+    *  of <code>java.util.logging.Level</code>.  Therefore, filters
+    *  should perform checks like <code>theRecord.getLevel().intValue()
+    *  == Level.INFO.intValue()</code> instead of <code>theRecord.getLevel()
+    *  == Level.INFO</code>.
+    */
+   public Level getLevel()
+   {
+     return level;
+   }
+ 
+ 
+   /**
+    * Sets the severity level of this <code>LogRecord</code> to a new
+    * value.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    *
+    * @param level the new severity level, for example
+    *              <code>Level.WARNING</code>.
+    */
+   public void setLevel(Level level)
+   {
+     this.level = level;
+   }
+ 
+ 
+   /**
+    * The last used sequence number for any LogRecord.
+    */
+   private static long lastSeqNum;
+ 
+ 
+   /**
+    * Allocates a sequence number for a new LogRecord.  This class
+    * method is only called by the LogRecord constructor.
+    */
+   private static synchronized long allocateSeqNum()
+   {
+     lastSeqNum += 1;
+     return lastSeqNum;
+   }
+ 
+ 
+   /**
+    * Returns the sequence number of this <code>LogRecord</code>.
+    */
+   public long getSequenceNumber()
+   {
+     return sequenceNumber;
+   }
+ 
+ 
+   /**
+    * Sets the sequence number of this <code>LogRecord</code> to a new
+    * value.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    *
+    * @param seqNum the new sequence number.
+    */
+   public void setSequenceNumber(long seqNum)
+   {
+     this.sequenceNumber = seqNum;
+   }
+ 
+ 
+   /**
+    * Returns the name of the class where the event being logged
+    * has had its origin.  This information can be passed as
+    * parameter to some logging calls, and in certain cases, the
+    * logging framework tries to determine an approximation
+    * (which may or may not be accurate).
+    * 
+    * @return the name of the class that issued the logging request,
+    *         or <code>null</code> if this information could not
+    *         be obtained.
+    */
+   public String getSourceClassName()
+   {
+     if (sourceClassName != null)
+       return sourceClassName;
+ 
+     /*  FIXME: Should infer this information from the call stack. */
+     return null;
+   }
+ 
+ 
+   /**
+    * Sets the name of the class where the event being logged
+    * has had its origin.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    * 
+    * @param sourceClassName the name of the class that issued the
+    *          logging request, or <code>null</code> to indicate that
+    *          this information could not be obtained.
+    */
+   public void setSourceClassName(String sourceClassName)
+   {
+     this.sourceClassName = sourceClassName;
+   }
+ 
+ 
+   /**
+    * Returns the name of the method where the event being logged
+    * has had its origin.  This information can be passed as
+    * parameter to some logging calls, and in certain cases, the
+    * logging framework tries to determine an approximation
+    * (which may or may not be accurate).
+    * 
+    * @return the name of the method that issued the logging request,
+    *         or <code>null</code> if this information could not
+    *         be obtained.
+    */
+   public String getSourceMethodName()
+   {
+     if (sourceMethodName != null)
+       return sourceMethodName;
+ 
+     /* FIXME: Should infer this information from the call stack. */
+     return null;
+   }
+ 
+ 
+   /**
+    * Sets the name of the method where the event being logged
+    * has had its origin.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    * 
+    * @param sourceMethodName the name of the method that issued the
+    *          logging request, or <code>null</code> to indicate that
+    *          this information could not be obtained.
+    */
+   public void setSourceMethodName(String sourceMethodName)
+   {
+     this.sourceMethodName = sourceMethodName;
+   }
+ 
+ 
+   /**
+    * Returns the message for this <code>LogRecord</code> before
+    * any localization or parameter substitution.
+    *
+    * <p>A {@link Logger} will try to localize the message
+    * if a resource bundle has been associated with this
+    * <code>LogRecord</code>.  In this case, the logger will call
+    * <code>getMessage()</code> and use the result as the key
+    * for looking up the localized message in the bundle.
+    * If no bundle has been associated, or if the result of
+    * <code>getMessage()</code> is not a valid key in the
+    * bundle, the logger will use the raw message text as
+    * returned by this method.
+    *
+    * @return the message text, or <code>null</code> if there
+    *         is no message text.
+    */
+   public String getMessage()
+   {
+     return message;
+   }
+ 
+ 
+   /**
+    * Sets the message for this <code>LogRecord</code>.
+    *
+    * <p>A <code>Logger</code> will try to localize the message
+    * if a resource bundle has been associated with this
+    * <code>LogRecord</code>.  In this case, the logger will call
+    * <code>getMessage()</code> and use the result as the key
+    * for looking up the localized message in the bundle.
+    * If no bundle has been associated, or if the result of
+    * <code>getMessage()</code> is not a valid key in the
+    * bundle, the logger will use the raw message text as
+    * returned by this method.
+    *
+    * <p>It is possible to set the message to either an empty String or
+    * <code>null</code>, although this does not make the the message
+    * very helpful to human users.
+    *
+    * @param message the message text (which will be used as key
+    *                for looking up the localized message text
+    *                if a resource bundle has been associated). 
+    */
+   public void setMessage(String message)
+   {
+     this.message = message;
+   }
+ 
+ 
+   /**
+    * Returns the parameters to the log message.
+    *
+    * @return the parameters to the message, or <code>null</code> if
+    *         the message has no parameters.
+    */
+   public Object[] getParameters()
+   {
+     return parameters;
+   }
+ 
+ 
+   /**
+    * Sets the parameters to the log message.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    *
+    * @param parameters the parameters to the message, or <code>null</code>
+    *                   to indicate that the message has no parameters.
+    */
+   public void setParameters(Object[] parameters)
+   {
+     this.parameters = parameters;
+   }
+ 
+ 
+   /**
+    * Returns an identifier for the thread in which this
+    * <code>LogRecord</code> was created.  The identifier is not
+    * necessarily related to any thread identifiers used by the
+    * operating system.
+    *
+    * @return an identifier for the source thread.
+    */
+   public int getThreadID()
+   {
+     return threadID;
+   }
+ 
+ 
+   /**
+    * Sets the identifier indicating in which thread this
+    * <code>LogRecord</code> was created.  The identifier is not
+    * necessarily related to any thread identifiers used by the
+    * operating system.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    *
+    * @param threadID the identifier for the source thread.
+    */
+   public void setThreadID(int threadID)
+   {
+     this.threadID = threadID;
+   }
+ 
+ 
+   /**
+    * Returns the time when this <code>LogRecord</code> was created.
+    *
+    * @return the time of creation in milliseconds since the beginning
+    *         of January 1, 1970.
+    */
+   public long getMillis()
+   {
+     return millis;
+   }
+ 
+ 
+   /**
+    * Sets the time when this <code>LogRecord</code> was created.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    *
+    * @param millis the time of creation in milliseconds since the
+    *               beginning of January 1, 1970.
+    */
+   public void setMillis(long millis)
+   {
+     this.millis = millis;
+   }
+ 
+ 
+   /**
+    * Returns the Throwable associated with this <code>LogRecord</code>,
+    * or <code>null</code> if the logged event is not related to an exception
+    * or error.
+    */
+   public Throwable getThrown()
+   {
+     return thrown;
+   }
+ 
+ 
+   /**
+    * Associates this <code>LogRecord</code> with an exception or error.
+    *
+    * <p>As soon as a <code>LogRecord</code> has been handed over
+    * to the logging framework, applications should not modify it
+    * anymore.  Therefore, this method should only be called on
+    * freshly constructed LogRecords.
+    *
+    * @param thrown the exception or error to associate with, or
+    *               <code>null</code> if this <code>LogRecord</code>
+    *               should be made unrelated to an exception or error.
+    */
+   public void setThrown(Throwable thrown)
+   {
+     this.thrown = thrown;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/Logger.java gcc-4.1.0/libjava/classpath/java/util/logging/Logger.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/Logger.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/Logger.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,1209 ----
+ /* Logger.java -- a class for logging messages
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.util.List;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * A Logger is used for logging information about events. Usually, there
+  * is a seprate logger for each subsystem or component, although there
+  * is a shared instance for components that make only occasional use of
+  * the logging framework.
+  *
+  * <p>It is common to name a logger after the name of a corresponding
+  * Java package.  Loggers are organized into a hierarchical namespace;
+  * for example, the logger <code>"org.gnu.foo"</code> is the
+  * <em>parent</em> of logger <code>"org.gnu.foo.bar"</code>.
+  *
+  * <p>A logger for a named subsystem can be obtained through {@link
+  * java.util.logging.Logger#getLogger(java.lang.String)}.  However,
+  * only code which has been granted the permission to control the
+  * logging infrastructure will be allowed to customize that logger.
+  * Untrusted code can obtain a private, anonymous logger through
+  * {@link #getAnonymousLogger()} if it wants to perform any
+  * modifications to the logger.
+  *
+  * <p>FIXME: Write more documentation.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class Logger
+ {
+   /**
+    * A logger provided to applications that make only occasional use
+    * of the logging framework, typically early prototypes.  Serious
+    * products are supposed to create and use their own Loggers, so
+    * they can be controlled individually.
+    */
+   public static final Logger global = getLogger("global");
+ 
+ 
+   /**
+    * The name of the Logger, or <code>null</code> if the logger is
+    * anonymous.
+    *
+    * <p>A previous version of the GNU Classpath implementation granted
+    * untrusted code the permission to control any logger whose name
+    * was null.  However, test code revealed that the Sun J2SE 1.4
+    * reference implementation enforces the security control for any
+    * logger that was not created through getAnonymousLogger, even if
+    * it has a null name.  Therefore, a separate flag {@link
+    * Logger#anonymous} was introduced.
+    */
+   private final String name;
+ 
+ 
+   /**
+    * The name of the resource bundle used for localization.
+    *
+    * <p>This variable cannot be declared as <code>final</code>
+    * because its value can change as a result of calling
+    * getLogger(String,String).
+    */
+   private String resourceBundleName;
+ 
+ 
+   /**
+    * The resource bundle used for localization.
+    *
+    * <p>This variable cannot be declared as <code>final</code>
+    * because its value can change as a result of calling
+    * getLogger(String,String).
+    */
+   private ResourceBundle resourceBundle;
+ 
+   private Filter filter;
+ 
+   private final List handlerList = new java.util.ArrayList(4);
+   private Handler[] handlers = new Handler[0];
+ 
+   /**
+    * Indicates whether or not this logger is anonymous.  While
+    * a LoggingPermission is required for any modifications to
+    * a normal logger, untrusted code can obtain an anonymous logger
+    * and modify it according to its needs.
+    *
+    * <p>A previous version of the GNU Classpath implementation
+    * granted access to every logger whose name was null.
+    * However, test code revealed that the Sun J2SE 1.4 reference
+    * implementation enforces the security control for any logger
+    * that was not created through getAnonymousLogger, even
+    * if it has a null name.
+    */
+   private boolean anonymous;
+ 
+ 
+   private boolean useParentHandlers;
+ 
+   private Level level;
+ 
+   private Logger parent;
+ 
+   /**
+    * Constructs a Logger for a subsystem.  Most applications do not
+    * need to create new Loggers explicitly; instead, they should call
+    * the static factory methods
+    * {@link #getLogger(java.lang.String,java.lang.String) getLogger}
+    * (with ResourceBundle for localization) or
+    * {@link #getLogger(java.lang.String) getLogger} (without
+    * ResourceBundle), respectively.
+    *
+    * @param name the name for the logger, for example "java.awt"
+    *             or "com.foo.bar". The name should be based on
+    *             the name of the package issuing log records
+    *             and consist of dot-separated Java identifiers.
+    *
+    * @param resourceBundleName the name of a resource bundle
+    *        for localizing messages, or <code>null</code>
+    *	    to indicate that messages do not need to be localized.
+    *
+    * @throws java.util.MissingResourceException if
+    *         <code>resourceBundleName</code> is not <code>null</code>
+    *         and no such bundle could be located.
+    */
+   protected Logger(String name, String resourceBundleName)
+     throws MissingResourceException
+   {
+     this.name = name;
+     this.resourceBundleName = resourceBundleName;
+ 
+     if (resourceBundleName == null)
+       resourceBundle = null;
+     else
+       resourceBundle = ResourceBundle.getBundle(resourceBundleName);
+ 
+     level = null;
+ 
+     /* This is null when the root logger is being constructed,
+      * and the root logger afterwards.
+      */
+     parent = LogManager.getLogManager().rootLogger;
+ 
+     useParentHandlers = (parent != null);
+   }
+ 
+ 
+ 
+   /**
+    * Finds a registered logger for a subsystem, or creates one in
+    * case no logger has been registered yet.
+    *
+    * @param name the name for the logger, for example "java.awt"
+    *             or "com.foo.bar". The name should be based on
+    *             the name of the package issuing log records
+    *             and consist of dot-separated Java identifiers.
+    *
+    * @throws IllegalArgumentException if a logger for the subsystem
+    *         identified by <code>name</code> has already been created,
+    *         but uses a a resource bundle for localizing messages.
+    *
+    * @throws NullPointerException if <code>name</code> is
+    *         <code>null</code>.
+    *
+    * @return a logger for the subsystem specified by <code>name</code>
+    *         that does not localize messages.
+    */
+   public static Logger getLogger(String name)
+   {
+     return getLogger(name, null);
+   }
+ 
+     
+   /**
+    * Finds a registered logger for a subsystem, or creates one in case
+    * no logger has been registered yet.
+    *
+    * <p>If a logger with the specified name has already been
+    * registered, the behavior depends on the resource bundle that is
+    * currently associated with the existing logger.
+    *
+    * <ul><li>If the existing logger uses the same resource bundle as
+    * specified by <code>resourceBundleName</code>, the existing logger
+    * is returned.</li>
+    *
+    * <li>If the existing logger currently does not localize messages,
+    * the existing logger is modified to use the bundle specified by
+    * <code>resourceBundleName</code>.  The existing logger is then
+    * returned.  Therefore, all subsystems currently using this logger
+    * will produce localized messages from now on.</li>
+    *
+    * <li>If the existing logger already has an associated resource
+    * bundle, but a different one than specified by
+    * <code>resourceBundleName</code>, an
+    * <code>IllegalArgumentException</code> is thrown.</li></ul>
+    *
+    * @param name the name for the logger, for example "java.awt"
+    *             or "org.gnu.foo". The name should be based on
+    *             the name of the package issuing log records
+    *             and consist of dot-separated Java identifiers.
+    *
+    * @param resourceBundleName the name of a resource bundle
+    *        for localizing messages, or <code>null</code>
+    *	    to indicate that messages do not need to be localized.
+    *
+    * @return a logger for the subsystem specified by <code>name</code>.
+    *
+    * @throws java.util.MissingResourceException if
+    *         <code>resourceBundleName</code> is not <code>null</code>
+    *         and no such bundle could be located.   
+    *
+    * @throws IllegalArgumentException if a logger for the subsystem
+    *         identified by <code>name</code> has already been created,
+    *         but uses a different resource bundle for localizing
+    *         messages.
+    *
+    * @throws NullPointerException if <code>name</code> is
+    *         <code>null</code>.
+    */
+   public static Logger getLogger(String name, String resourceBundleName)
+   {
+     LogManager lm = LogManager.getLogManager();
+     Logger     result;
+ 
+     /* Throw NullPointerException if name is null. */
+     name.getClass();
+ 
+     /* Without synchronized(lm), it could happen that another thread
+      * would create a logger between our calls to getLogger and
+      * addLogger.  While addLogger would indicate this by returning
+      * false, we could not be sure that this other logger was still
+      * existing when we called getLogger a second time in order
+      * to retrieve it -- note that LogManager is only allowed to
+      * keep weak references to registered loggers, so Loggers
+      * can be garbage collected at any time in general, and between
+      * our call to addLogger and our second call go getLogger
+      * in particular.
+      *
+      * Of course, we assume here that LogManager.addLogger etc.
+      * are synchronizing on the global LogManager object. There
+      * is a comment in the implementation of LogManager.addLogger
+      * referring to this comment here, so that any change in
+      * the synchronization of LogManager will be reflected here.
+      */
+     synchronized (lm)
+     {
+       result = lm.getLogger(name);
+       if (result == null)
+       {
+ 	boolean couldBeAdded;
+ 
+ 	result = new Logger(name, resourceBundleName);
+ 	couldBeAdded = lm.addLogger(result);
+ 	if (!couldBeAdded)
+ 	  throw new IllegalStateException("cannot register new logger");
+       }
+       else
+       {
+ 	/* The logger already exists. Make sure it uses
+ 	 * the same resource bundle for localizing messages.
+ 	 */
+ 	String existingBundleName = result.getResourceBundleName();
+ 
+ 	/* The Sun J2SE 1.4 reference implementation will return the
+ 	 * registered logger object, even if it does not have a resource
+ 	 * bundle associated with it. However, it seems to change the
+ 	 * resourceBundle of the registered logger to the bundle
+ 	 * whose name was passed to getLogger.
+ 	 */
+ 	if ((existingBundleName == null) && (resourceBundleName != null))
+ 	{
+ 	  /* If ResourceBundle.getBundle throws an exception, the
+ 	   * existing logger will be unchanged.  This would be
+ 	   * different if the assignment to resourceBundleName
+ 	   * came first.
+ 	   */
+ 	  result.resourceBundle = ResourceBundle.getBundle(resourceBundleName);
+ 	  result.resourceBundleName = resourceBundleName;
+ 	  return result;
+ 	}
+ 
+ 	if ((existingBundleName != resourceBundleName)
+ 	    && ((existingBundleName == null)
+ 		|| !existingBundleName.equals(resourceBundleName)))
+ 	{
+ 	  throw new IllegalArgumentException();
+ 	}
+       }
+     }
+ 
+     return result;
+   }
+ 
+   
+   /**
+    * Creates a new, unnamed logger.  Unnamed loggers are not
+    * registered in the namespace of the LogManager, and no special
+    * security permission is required for changing their state.
+    * Therefore, untrusted applets are able to modify their private
+    * logger instance obtained through this method.
+    *
+    * <p>The parent of the newly created logger will the the root
+    * logger, from which the level threshold and the handlers are
+    * inherited.
+    */
+   public static Logger getAnonymousLogger()
+   {
+     return getAnonymousLogger(null);
+   }
+ 
+ 
+   /**
+    * Creates a new, unnamed logger.  Unnamed loggers are not
+    * registered in the namespace of the LogManager, and no special
+    * security permission is required for changing their state.
+    * Therefore, untrusted applets are able to modify their private
+    * logger instance obtained through this method.
+    *
+    * <p>The parent of the newly created logger will the the root
+    * logger, from which the level threshold and the handlers are
+    * inherited.
+    *
+    * @param resourceBundleName the name of a resource bundle
+    *        for localizing messages, or <code>null</code>
+    *	    to indicate that messages do not need to be localized.
+    *
+    * @throws java.util.MissingResourceException if
+    *         <code>resourceBundleName</code> is not <code>null</code>
+    *         and no such bundle could be located.
+    */
+   public static Logger getAnonymousLogger(String resourceBundleName)
+     throws MissingResourceException
+   {
+     Logger  result;
+ 
+     result = new Logger(null, resourceBundleName);
+     result.anonymous = true;
+     return result;
+   }
+ 
+ 
+   /**
+    * Returns the name of the resource bundle that is being used for
+    * localizing messages.
+    *
+    * @return the name of the resource bundle used for localizing messages,
+    *         or <code>null</code> if the parent's resource bundle
+    *         is used for this purpose.
+    */
+   public synchronized String getResourceBundleName()
+   {
+     return resourceBundleName;
+   }
+ 
+ 
+   /**
+    * Returns the resource bundle that is being used for localizing
+    * messages.
+    *
+    * @return the resource bundle used for localizing messages,
+    *         or <code>null</code> if the parent's resource bundle
+    *         is used for this purpose.
+    */
+   public synchronized ResourceBundle getResourceBundle()
+   {
+     return resourceBundle;
+   }
+ 
+ 
+   /**
+    * Returns the severity level threshold for this <code>Handler</code>.
+    * All log records with a lower severity level will be discarded;
+    * a log record of the same or a higher level will be published
+    * unless an installed <code>Filter</code> decides to discard it.
+    *
+    * @return the severity level below which all log messages will be
+    *         discarded, or <code>null</code> if the logger inherits
+    *         the threshold from its parent.
+    */
+   public synchronized Level getLevel()
+   {
+     return level;
+   }
+ 
+ 
+   /**
+    * Returns whether or not a message of the specified level
+    * would be logged by this logger.
+    *
+    * @throws NullPointerException if <code>level</code>
+    *         is <code>null</code>.
+    */
+   public synchronized boolean isLoggable(Level level)
+   {
+     if (this.level != null)
+       return this.level.intValue() <= level.intValue();
+ 
+     if (parent != null)
+       return parent.isLoggable(level);
+     else
+       return false;
+   }
+ 
+ 
+   /**
+    * Sets the severity level threshold for this <code>Handler</code>.
+    * All log records with a lower severity level will be discarded
+    * immediately.  A log record of the same or a higher level will be
+    * published unless an installed <code>Filter</code> decides to
+    * discard it.
+    *
+    * @param level the severity level below which all log messages
+    *              will be discarded, or <code>null</code> to
+    *              indicate that the logger should inherit the
+    *              threshold from its parent.
+    *
+    * @throws SecurityException if this logger is not anonymous, a
+    *     security manager exists, and the caller is not granted
+    *     the permission to control the logging infrastructure by
+    *     having LoggingPermission("control").  Untrusted code can
+    *     obtain an anonymous logger through the static factory method
+    *     {@link #getAnonymousLogger(java.lang.String) getAnonymousLogger}.
+    */
+   public synchronized void setLevel(Level level)
+   {
+     /* An application is allowed to control an anonymous logger
+      * without having the permission to control the logging
+      * infrastructure.
+      */
+     if (!anonymous)
+       LogManager.getLogManager().checkAccess();
+ 
+     this.level = level;
+   }
+ 
+ 
+   public synchronized Filter getFilter()
+   {
+     return filter;
+   }
+ 
+ 
+   /**
+    * @throws SecurityException if this logger is not anonymous, a
+    *     security manager exists, and the caller is not granted
+    *     the permission to control the logging infrastructure by
+    *     having LoggingPermission("control").  Untrusted code can
+    *     obtain an anonymous logger through the static factory method
+    *     {@link #getAnonymousLogger(java.lang.String) getAnonymousLogger}.
+    */
+   public synchronized void setFilter(Filter filter)
+     throws SecurityException
+   {
+     /* An application is allowed to control an anonymous logger
+      * without having the permission to control the logging
+      * infrastructure.
+      */
+     if (!anonymous)
+       LogManager.getLogManager().checkAccess();
+ 
+     this.filter = filter;
+   }
+ 
+ 
+ 
+ 
+   /**
+    * Returns the name of this logger.
+    *
+    * @return the name of this logger, or <code>null</code> if
+    *         the logger is anonymous.
+    */
+   public String getName()
+   {
+     /* Note that the name of a logger cannot be changed during
+      * its lifetime, so no synchronization is needed.
+      */
+     return name;
+   }
+ 
+ 
+   /**
+    * Passes a record to registered handlers, provided the record
+    * is considered as loggable both by {@link #isLoggable(Level)}
+    * and a possibly installed custom {@link #setFilter(Filter) filter}.
+    *
+    * <p>If the logger has been configured to use parent handlers,
+    * the record will be forwarded to the parent of this logger
+    * in addition to being processed by the handlers registered with
+    * this logger.
+    *
+    * <p>The other logging methods in this class are convenience methods
+    * that merely create a new LogRecord and pass it to this method.
+    * Therefore, subclasses usually just need to override this single
+    * method for customizing the logging behavior.
+    *
+    * @param record the log record to be inspected and possibly forwarded.
+    */
+   public synchronized void log(LogRecord record)
+   {
+     if (!isLoggable(record.getLevel()))
+       return;
+ 
+     if ((filter != null) && !filter.isLoggable(record))
+       return;
+ 
+     /* If no logger name has been set for the log record,
+      * use the name of this logger.
+      */
+     if (record.getLoggerName() == null)
+       record.setLoggerName(name);
+ 
+     /* Avoid that some other thread is changing the logger hierarchy
+      * while we are traversing it.
+      */
+     synchronized (LogManager.getLogManager())
+     {
+       Logger curLogger = this;
+ 
+       do
+       {
+         /* The Sun J2SE 1.4 reference implementation seems to call the
+ 	 * filter only for the logger whose log method is called,
+ 	 * never for any of its parents.  Also, parent loggers publish
+ 	 * log record whatever their level might be.  This is pretty
+ 	 * weird, but GNU Classpath tries to be as compatible as
+ 	 * possible to the reference implementation.
+ 	 */
+         for (int i = 0; i < curLogger.handlers.length; i++)
+           curLogger.handlers[i].publish(record);
+ 
+ 	if (curLogger.getUseParentHandlers() == false)
+ 	  break;
+ 	
+ 	curLogger = curLogger.getParent();
+       }
+       while (parent != null);
+     }
+   }
+ 
+ 
+   public void log(Level level, String message)
+   {
+     if (isLoggable(level))
+       log(level, message, (Object[]) null);
+   }
+ 
+ 
+   public synchronized void log(Level level,
+ 			       String message,
+ 			       Object param)
+   {
+     if (isLoggable(level))
+       {
+         StackTraceElement caller = getCallerStackFrame();
+         logp(level,
+              caller != null ? caller.getClassName() : "<unknown>",
+              caller != null ? caller.getMethodName() : "<unknown>",
+              message,
+              param);
+       }
+   }
+ 
+ 
+   public synchronized void log(Level level,
+ 			       String message,
+ 			       Object[] params)
+   {
+     if (isLoggable(level))
+       {
+         StackTraceElement caller = getCallerStackFrame();
+         logp(level,
+              caller != null ? caller.getClassName() : "<unknown>",
+              caller != null ? caller.getMethodName() : "<unknown>",
+              message,
+              params);
+       }
+   }
+ 
+ 
+   public synchronized void log(Level level,
+ 			       String message,
+ 			       Throwable thrown)
+   {
+     if (isLoggable(level))
+       {
+         StackTraceElement caller = getCallerStackFrame();    
+         logp(level,
+              caller != null ? caller.getClassName() : "<unknown>",
+              caller != null ? caller.getMethodName() : "<unknown>",
+              message,
+              thrown);
+       }
+   }
+ 
+ 
+   public synchronized void logp(Level level,
+ 				String sourceClass,
+ 				String sourceMethod,
+ 				String message)
+   {
+     logp(level, sourceClass, sourceMethod, message,
+ 	 (Object[]) null);
+   }
+ 
+ 
+   public synchronized void logp(Level level,
+ 				String sourceClass,
+ 				String sourceMethod,
+ 				String message,
+ 				Object param)
+   {
+     logp(level, sourceClass, sourceMethod, message,
+ 	 new Object[] { param });
+   }
+ 
+ 
+   private synchronized ResourceBundle findResourceBundle()
+   {
+     if (resourceBundle != null)
+       return resourceBundle;
+ 
+     if (parent != null)
+       return parent.findResourceBundle();
+ 
+     return null;
+   }
+ 
+ 
+   private synchronized void logImpl(Level level,
+ 				    String sourceClass,
+ 				    String sourceMethod,
+ 				    String message,
+ 				    Object[] params)
+   {
+     LogRecord rec = new LogRecord(level, message);
+ 
+     rec.setResourceBundle(findResourceBundle());
+     rec.setSourceClassName(sourceClass);
+     rec.setSourceMethodName(sourceMethod);
+     rec.setParameters(params);
+ 
+     log(rec);
+   }
+ 
+ 
+   public synchronized void logp(Level level,
+ 				String sourceClass,
+ 				String sourceMethod,
+ 				String message,
+ 				Object[] params)
+   {
+     logImpl(level, sourceClass, sourceMethod, message, params);
+   }
+ 
+ 
+   public synchronized void logp(Level level,
+ 				String sourceClass,
+ 				String sourceMethod,
+ 				String message,
+ 				Throwable thrown)
+   {
+     LogRecord rec = new LogRecord(level, message);
+ 
+     rec.setResourceBundle(resourceBundle);
+     rec.setSourceClassName(sourceClass);
+     rec.setSourceMethodName(sourceMethod);
+     rec.setThrown(thrown);
+ 
+     log(rec);
+   }
+ 
+ 
+   public synchronized void logrb(Level level,
+ 				 String sourceClass,
+ 				 String sourceMethod,
+ 				 String bundleName,
+ 				 String message)
+   {
+     logrb(level, sourceClass, sourceMethod, bundleName,
+ 	  message, (Object[]) null);
+   }
+ 
+ 
+   public synchronized void logrb(Level level,
+ 				 String sourceClass,
+ 				 String sourceMethod,
+ 				 String bundleName,
+ 				 String message,
+ 				 Object param)
+   {
+     logrb(level, sourceClass, sourceMethod, bundleName,
+ 	  message, new Object[] { param });
+   }
+ 
+ 
+   public synchronized void logrb(Level level,
+ 				 String sourceClass,
+ 				 String sourceMethod,
+ 				 String bundleName,
+ 				 String message,
+ 				 Object[] params)
+   {
+     LogRecord rec = new LogRecord(level, message);
+ 
+     rec.setResourceBundleName(bundleName);
+     rec.setSourceClassName(sourceClass);
+     rec.setSourceMethodName(sourceMethod);
+     rec.setParameters(params);
+ 
+     log(rec);
+   }
+ 
+ 
+   public synchronized void logrb(Level level,
+ 				 String sourceClass,
+ 				 String sourceMethod,
+ 				 String bundleName,
+ 				 String message,
+ 				 Throwable thrown)
+   {
+     LogRecord rec = new LogRecord(level, message);
+ 
+     rec.setResourceBundleName(bundleName);
+     rec.setSourceClassName(sourceClass);
+     rec.setSourceMethodName(sourceMethod);
+     rec.setThrown(thrown);
+ 
+     log(rec);
+   }
+ 
+ 
+   public synchronized void entering(String sourceClass,
+ 				    String sourceMethod)
+   {
+     if (isLoggable(Level.FINER))
+       logp(Level.FINER, sourceClass, sourceMethod, "ENTRY");
+   }
+ 
+ 
+   public synchronized void entering(String sourceClass,
+ 				    String sourceMethod,
+ 				    Object param)
+   {
+     if (isLoggable(Level.FINER))
+       logp(Level.FINER, sourceClass, sourceMethod, "ENTRY {0}", param);
+   }
+ 
+ 
+   public synchronized void entering(String sourceClass,
+ 				    String sourceMethod,
+ 				    Object[] params)
+   {
+     if (isLoggable(Level.FINER))
+     {
+       StringBuffer buf = new StringBuffer(80);
+       buf.append("ENTRY");
+       for (int i = 0; i < params.length; i++)
+       {
+ 	buf.append(" {");
+ 	buf.append(i);
+ 	buf.append('}');
+       }
+       
+       logp(Level.FINER, sourceClass, sourceMethod, buf.toString(), params);
+     }
+   }
+ 
+ 
+   public synchronized void exiting(String sourceClass,
+ 				   String sourceMethod)
+   {
+     if (isLoggable(Level.FINER))
+       logp(Level.FINER, sourceClass, sourceMethod, "RETURN");
+   }
+ 
+    
+   public synchronized void exiting(String sourceClass,
+ 				   String sourceMethod,
+ 				   Object result)
+   {
+     if (isLoggable(Level.FINER))
+       logp(Level.FINER, sourceClass, sourceMethod, "RETURN {0}", result);
+   }
+ 
+  
+   public synchronized void throwing(String sourceClass,
+ 				    String sourceMethod,
+ 				    Throwable thrown)
+   {
+     if (isLoggable(Level.FINER))
+       logp(Level.FINER, sourceClass, sourceMethod, "THROW", thrown);
+   }
+ 
+ 
+   /**
+    * Logs a message with severity level SEVERE, indicating a serious
+    * failure that prevents normal program execution.  Messages at this
+    * level should be understandable to an inexperienced, non-technical
+    * end user.  Ideally, they explain in simple words what actions the
+    * user can take in order to resolve the problem.
+    *
+    * @see Level#SEVERE
+    *
+    * @param message the message text, also used as look-up key if the
+    *                logger is localizing messages with a resource
+    *                bundle.  While it is possible to pass
+    *                <code>null</code>, this is not recommended, since
+    *                a logging message without text is unlikely to be
+    *                helpful.
+    */
+   public synchronized void severe(String message)
+   {
+     if (isLoggable(Level.SEVERE))
+       log(Level.SEVERE, message);
+   }
+ 
+ 
+   /**
+    * Logs a message with severity level WARNING, indicating a
+    * potential problem that does not prevent normal program execution.
+    * Messages at this level should be understandable to an
+    * inexperienced, non-technical end user.  Ideally, they explain in
+    * simple words what actions the user can take in order to resolve
+    * the problem.
+    *
+    * @see Level#WARNING
+    *
+    * @param message the message text, also used as look-up key if the
+    *                logger is localizing messages with a resource
+    *                bundle.  While it is possible to pass
+    *                <code>null</code>, this is not recommended, since
+    *                a logging message without text is unlikely to be
+    *                helpful.
+    */
+   public synchronized void warning(String message)
+   {
+     if (isLoggable(Level.WARNING))
+       log(Level.WARNING, message);
+   }
+ 
+ 
+   /**
+    * Logs a message with severity level INFO.  {@link Level#INFO} is
+    * intended for purely informational messages that do not indicate
+    * error or warning situations. In the default logging
+    * configuration, INFO messages will be written to the system
+    * console.  For this reason, the INFO level should be used only for
+    * messages that are important to end users and system
+    * administrators.  Messages at this level should be understandable
+    * to an inexperienced, non-technical user.
+    *
+    * @param message the message text, also used as look-up key if the
+    *                logger is localizing messages with a resource
+    *                bundle.  While it is possible to pass
+    *                <code>null</code>, this is not recommended, since
+    *                a logging message without text is unlikely to be
+    *                helpful.
+    */
+   public synchronized void info(String message)
+   {
+     if (isLoggable(Level.INFO))
+       log(Level.INFO, message);
+   }
+ 
+ 
+   /**
+    * Logs a message with severity level CONFIG.  {@link Level#CONFIG} is
+    * intended for static configuration messages, for example about the
+    * windowing environment, the operating system version, etc.
+    *
+    * @param message the message text, also used as look-up key if the
+    *     logger is localizing messages with a resource bundle.  While
+    *     it is possible to pass <code>null</code>, this is not
+    *     recommended, since a logging message without text is unlikely
+    *     to be helpful.
+    */
+   public synchronized void config(String message)
+   {
+     if (isLoggable(Level.CONFIG))
+       log(Level.CONFIG, message);
+   }
+ 
+ 
+   /**
+    * Logs a message with severity level FINE.  {@link Level#FINE} is
+    * intended for messages that are relevant for developers using
+    * the component generating log messages. Examples include minor,
+    * recoverable failures, or possible inefficiencies.
+    *
+    * @param message the message text, also used as look-up key if the
+    *                logger is localizing messages with a resource
+    *                bundle.  While it is possible to pass
+    *                <code>null</code>, this is not recommended, since
+    *                a logging message without text is unlikely to be
+    *                helpful.
+    */
+   public synchronized void fine(String message)
+   {
+     if (isLoggable(Level.FINE))
+       log(Level.FINE, message);
+   }
+ 
+ 
+   /**
+    * Logs a message with severity level FINER.  {@link Level#FINER} is
+    * intended for rather detailed tracing, for example entering a
+    * method, returning from a method, or throwing an exception.
+    *
+    * @param message the message text, also used as look-up key if the
+    *                logger is localizing messages with a resource
+    *                bundle.  While it is possible to pass
+    *                <code>null</code>, this is not recommended, since
+    *                a logging message without text is unlikely to be
+    *                helpful.
+    */
+   public synchronized void finer(String message)
+   {
+     if (isLoggable(Level.FINER))
+       log(Level.FINER, message);
+   }
+ 
+ 
+   /**
+    * Logs a message with severity level FINEST.  {@link Level#FINEST}
+    * is intended for highly detailed tracing, for example reaching a
+    * certain point inside the body of a method.
+    *
+    * @param message the message text, also used as look-up key if the
+    *                logger is localizing messages with a resource
+    *                bundle.  While it is possible to pass
+    *                <code>null</code>, this is not recommended, since
+    *                a logging message without text is unlikely to be
+    *                helpful.
+    */
+   public synchronized void finest(String message)
+   {
+     if (isLoggable(Level.FINEST))
+       log(Level.FINEST, message);
+   }
+ 
+ 
+   /**
+    * Adds a handler to the set of handlers that get notified
+    * when a log record is to be published.
+    *
+    * @param handler the handler to be added.
+    *
+    * @throws NullPointerException if <code>handler</code>
+    *     is <code>null</code>.
+    *
+    * @throws SecurityException if this logger is not anonymous, a
+    *     security manager exists, and the caller is not granted
+    *     the permission to control the logging infrastructure by
+    *     having LoggingPermission("control").  Untrusted code can
+    *     obtain an anonymous logger through the static factory method
+    *     {@link #getAnonymousLogger(java.lang.String) getAnonymousLogger}.
+    */
+   public synchronized void addHandler(Handler handler)
+     throws SecurityException
+   {
+     /* Throw a new NullPointerException if handler is null. */
+     handler.getClass();
+ 
+     /* An application is allowed to control an anonymous logger
+      * without having the permission to control the logging
+      * infrastructure.
+      */
+     if (!anonymous)
+       LogManager.getLogManager().checkAccess();
+ 
+     if (!handlerList.contains(handler))
+     {
+       handlerList.add(handler);
+       handlers = getHandlers();
+     }
+   }
+ 
+ 
+   /**
+    * Removes a handler from the set of handlers that get notified
+    * when a log record is to be published.
+    *
+    * @param handler the handler to be removed.
+    *
+    * @throws SecurityException if this logger is not anonymous, a
+    *     security manager exists, and the caller is not granted the
+    *     permission to control the logging infrastructure by having
+    *     LoggingPermission("control").  Untrusted code can obtain an
+    *     anonymous logger through the static factory method {@link
+    *     #getAnonymousLogger(java.lang.String) getAnonymousLogger}.
+    *
+    * @throws NullPointerException if <code>handler</code>
+    *     is <code>null</code>.
+    */
+   public synchronized void removeHandler(Handler handler)
+     throws SecurityException
+   {
+     /* An application is allowed to control an anonymous logger
+      * without having the permission to control the logging
+      * infrastructure.
+      */
+     if (!anonymous)
+       LogManager.getLogManager().checkAccess();
+ 
+     /* Throw a new NullPointerException if handler is null. */
+     handler.getClass();
+ 
+     handlerList.remove(handler);
+     handlers = getHandlers();
+   }
+ 
+ 
+   /**
+    * Returns the handlers currently registered for this Logger.
+    * When a log record has been deemed as being loggable,
+    * it will be passed to all registered handlers for
+    * publication.  In addition, if the logger uses parent handlers
+    * (see {@link #getUseParentHandlers() getUseParentHandlers}
+    * and {@link #setUseParentHandlers(boolean) setUseParentHandlers},
+    * the log record will be passed to the parent's handlers.
+    */
+   public synchronized Handler[] getHandlers()
+   {
+     /* We cannot return our internal handlers array
+      * because we do not have any guarantee that the
+      * caller would not change the array entries.
+      */
+     return (Handler[]) handlerList.toArray(new Handler[handlerList.size()]);
+   }
+ 
+ 
+   /**
+    * Returns whether or not this Logger forwards log records to
+    * handlers registered for its parent loggers.
+    *
+    * @return <code>false</code> if this Logger sends log records
+    *         merely to Handlers registered with itself;
+    *         <code>true</code> if this Logger sends log records
+    *         not only to Handlers registered with itself, but also
+    *         to those Handlers registered with parent loggers.
+    */
+   public synchronized boolean getUseParentHandlers()
+   {
+     return useParentHandlers;
+   }
+ 
+ 
+   /**
+    * Sets whether or not this Logger forwards log records to
+    * handlers registered for its parent loggers.
+    *
+    * @param useParentHandlers <code>false</code> to let this
+    *         Logger send log records merely to Handlers registered
+    *         with itself; <code>true</code> to let this Logger
+    *         send log records not only to Handlers registered
+    *         with itself, but also to those Handlers registered with
+    *         parent loggers.
+    *
+    * @throws SecurityException if this logger is not anonymous, a
+    *     security manager exists, and the caller is not granted
+    *     the permission to control the logging infrastructure by
+    *     having LoggingPermission("control").  Untrusted code can
+    *     obtain an anonymous logger through the static factory method
+    *     {@link #getAnonymousLogger(java.lang.String) getAnonymousLogger}.
+    *
+    */
+   public synchronized void setUseParentHandlers(boolean useParentHandlers)
+   {
+     /* An application is allowed to control an anonymous logger
+      * without having the permission to control the logging
+      * infrastructure.
+      */
+     if (!anonymous)
+       LogManager.getLogManager().checkAccess();
+ 
+     this.useParentHandlers = useParentHandlers;
+   }
+ 
+ 
+   /**
+    * Returns the parent of this logger.  By default, the parent is
+    * assigned by the LogManager by inspecting the logger's name.
+    *
+    * @return the parent of this logger (as detemined by the LogManager
+    *     by inspecting logger names), the root logger if no other
+    *     logger has a name which is a prefix of this logger's name, or
+    *     <code>null</code> for the root logger.
+    */
+   public synchronized Logger getParent()
+   {
+     return parent;
+   }
+ 
+ 
+   /**
+    * Sets the parent of this logger.  Usually, applications do not
+    * call this method directly.  Instead, the LogManager will ensure
+    * that the tree of loggers reflects the hierarchical logger
+    * namespace.  Basically, this method should not be public at all,
+    * but the GNU implementation follows the API specification.
+    *
+    * @throws NullPointerException if <code>parent</code> is
+    *     <code>null</code>.
+    *
+    * @throws SecurityException if this logger is not anonymous, a
+    *     security manager exists, and the caller is not granted
+    *     the permission to control the logging infrastructure by
+    *     having LoggingPermission("control").  Untrusted code can
+    *     obtain an anonymous logger through the static factory method
+    *     {@link #getAnonymousLogger(java.lang.String) getAnonymousLogger}.
+    */
+   public synchronized void setParent(Logger parent)
+   {
+     LogManager lm;
+ 
+     /* Throw a new NullPointerException if parent is null. */
+     parent.getClass();
+ 
+     lm = LogManager.getLogManager();
+ 
+     if (this == lm.rootLogger)
+         throw new IllegalArgumentException(
+           "only the root logger can have a null parent");
+ 
+     /* An application is allowed to control an anonymous logger
+      * without having the permission to control the logging
+      * infrastructure.
+      */
+     if (!anonymous)
+       LogManager.getLogManager().checkAccess();
+ 
+     this.parent = parent;
+   }
+   
+   /**
+    * Gets the StackTraceElement of the first class that is not this class.
+    * That should be the initial caller of a logging method.
+    * @return caller of the initial logging method or null if unknown.
+    */
+   private StackTraceElement getCallerStackFrame()
+   {
+     Throwable t = new Throwable();
+     StackTraceElement[] stackTrace = t.getStackTrace();
+     int index = 0;
+ 
+     // skip to stackentries until this class
+     while(index < stackTrace.length
+ 	  && !stackTrace[index].getClassName().equals(getClass().getName()))
+       index++;
+ 
+     // skip the stackentries of this class
+     while(index < stackTrace.length
+ 	  && stackTrace[index].getClassName().equals(getClass().getName()))
+       index++;
+ 
+     return index < stackTrace.length ? stackTrace[index] : null;
+   }
+   
+   /**
+    * Reset and close handlers attached to this logger. This function is package
+    * private because it must only be avaiable to the LogManager.
+    */
+   void resetLogger()
+   {
+     for (int i = 0; i < handlers.length; i++)
+       {
+         handlers[i].close();
+         handlerList.remove(handlers[i]);
+       }
+     handlers = getHandlers();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/LoggingPermission.java gcc-4.1.0/libjava/classpath/java/util/logging/LoggingPermission.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/LoggingPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/LoggingPermission.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,75 ----
+ /* LoggingPermission.java -- a class for logging permissions.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ public final class LoggingPermission
+   extends java.security.BasicPermission
+ {
+   private static final long serialVersionUID = 63564341580231582L;
+ 
+   /**
+    * Creates a new LoggingPermission.
+    *
+    * @param name the name of the permission, which must be "control".
+    *
+    * @param actions the list of actions for the permission, which
+    *                must be either <code>null</code> or an empty
+    *                string.
+    *
+    * @exception IllegalArgumentException if <code>name</code>
+    *            is not "control", or <code>actions</code> is
+    *            neither <code>null</code> nor empty.
+    */
+   public LoggingPermission(String name, String actions)
+   {
+     super("control", "");
+     
+     if (!"control".equals(name))
+     {
+       throw new IllegalArgumentException(
+         "name of LoggingPermission must be \"control\"");
+     }
+     
+     if ((actions != null) && (actions.length() != 0))
+     {
+       throw new IllegalArgumentException(
+ 	"actions of LoggingPermissions must be null or empty");
+     }    
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/MemoryHandler.java gcc-4.1.0/libjava/classpath/java/util/logging/MemoryHandler.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/MemoryHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/MemoryHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,345 ----
+ /* MemoryHandler.java -- a class for buffering log messages in a memory buffer
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.logging;
+ 
+ /**
+  * A <code>MemoryHandler</code> maintains a circular buffer of
+  * log records.
+  *
+  * <p><strong>Configuration:</strong> Values of the subsequent
+  * <code>LogManager</code> properties are taken into consideration
+  * when a <code>MemoryHandler</code> is initialized.
+  * If a property is not defined, or if it has an invalid
+  * value, a default is taken without an exception being thrown.
+  *
+  * <ul>
+  * <li><code>java.util.MemoryHandler.level</code> - specifies
+  *     the initial severity level threshold. Default value:
+  *     <code>Level.ALL</code>.</li>
+  * <li><code>java.util.MemoryHandler.filter</code> - specifies
+  *     the name of a Filter class. Default value: No Filter.</li>
+  * <li><code>java.util.MemoryHandler.size</code> - specifies the
+  *     maximum number of log records that are kept in the circular
+  *     buffer.  Default value: 1000.</li>
+  * <li><code>java.util.MemoryHandler.push</code> - specifies the
+  *     <code>pushLevel</code>. Default value:
+  *     <code>Level.SEVERE</code>.</li>
+  * <li><code>java.util.MemoryHandler.target</code> - specifies the
+  *     name of a subclass of {@link Handler} that will be used as the
+  *     target handler.  There is no default value for this property;
+  *     if it is not set, the no-argument MemoryHandler constructor
+  *     will throw an exception.</li>
+  * </ul>
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class MemoryHandler
+   extends Handler
+ {
+   /**
+    * The storage area used for buffering the unpushed log records in
+    * memory.
+    */
+   private final LogRecord[] buffer;
+ 
+ 
+   /**
+    * The current position in the circular buffer. For a new
+    * MemoryHandler, or immediately after {@link #push()} was called,
+    * the value of this variable is zero.  Each call to {@link
+    * #publish(LogRecord)} will store the published LogRecord into
+    * <code>buffer[position]</code> before position is incremented by
+    * one.  If position becomes greater than the size of the buffer, it
+    * is reset to zero.
+    */
+   private int position;
+ 
+ 
+   /**
+    * The number of log records which have been published, but not
+    * pushed yet to the target handler.
+    */
+   private int numPublished;
+ 
+ 
+   /**
+    * The push level threshold for this <code>Handler</code>.  When a
+    * record is published whose severity level is greater than or equal
+    * to the <code>pushLevel</code> of this <code>MemoryHandler</code>,
+    * the {@link #push()} method will be invoked for pushing the buffer
+    * contents to the target <code>Handler</code>.
+    */
+   private Level pushLevel;
+ 
+ 
+   /**
+    * The Handler to which log records are forwarded for actual
+    * publication.
+    */
+   private final Handler target;
+ 
+ 
+   /**
+    * Constructs a <code>MemoryHandler</code> for keeping a circular
+    * buffer of LogRecords; the initial configuration is determined by
+    * the <code>LogManager</code> properties described above.
+    */
+   public MemoryHandler()
+   {
+     this((Handler) LogManager.getInstanceProperty(
+ 	   "java.util.logging.MemoryHandler.target",
+ 	   Handler.class, /* default */ null),
+ 	 LogManager.getIntPropertyClamped(
+ 	   "java.util.logging.MemoryHandler.size",
+ 	   /* default */ 1000,
+ 	   /* minimum value */ 1,
+ 	   /* maximum value */ Integer.MAX_VALUE),
+ 	 LogManager.getLevelProperty(
+ 	   "java.util.logging.MemoryHandler.push",
+ 	   /* default push level */ Level.SEVERE));
+   }
+ 
+   
+   /**
+    * Constructs a <code>MemoryHandler</code> for keeping a circular
+    * buffer of LogRecords, given some parameters. The values of the
+    * other parameters are taken from LogManager properties, as
+    * described above.
+    *
+    * @param target the target handler that will receive those
+    *               log records that are passed on for publication.
+    *
+    * @param size the number of log records that are kept in the buffer.
+    *             The value must be a at least one.
+    *
+    * @param pushLevel the push level threshold for this
+    *     <code>MemoryHandler</code>.  When a record is published whose
+    *     severity level is greater than or equal to
+    *     <code>pushLevel</code>, the {@link #push()} method will be
+    *     invoked in order to push the bufffer contents to
+    *     <code>target</code>.
+    *
+    * @throws java.lang.IllegalArgumentException if <code>size</code>
+    *         is negative or zero. The GNU implementation also throws
+    *         an IllegalArgumentException if <code>target</code> or
+    *         <code>pushLevel</code> are <code>null</code>, but the
+    *         API specification does not prescribe what should happen
+    *         in those cases.
+    */
+   public MemoryHandler(Handler target, int size, Level pushLevel)
+   { 
+     if ((target == null) || (size <= 0) || (pushLevel == null))
+       throw new IllegalArgumentException();
+ 
+     buffer = new LogRecord[size];
+     this.pushLevel = pushLevel;
+     this.target = target;
+ 
+     setLevel(LogManager.getLevelProperty(
+       "java.util.logging.MemoryHandler.level",
+       /* default value */ Level.ALL));
+ 
+     setFilter((Filter) LogManager.getInstanceProperty(
+       "java.util.logging.MemoryHandler.filter",
+       /* must be instance of */ Filter.class,
+       /* default value */ null));
+   }
+ 
+ 
+   /**
+    * Stores a <code>LogRecord</code> in a fixed-size circular buffer,
+    * provided the record passes all tests for being loggable.  If the
+    * buffer is full, the oldest record will be discarded.
+    *
+    * <p>If the record has a severity level which is greater than or
+    * equal to the <code>pushLevel</code> of this
+    * <code>MemoryHandler</code>, the {@link #push()} method will be
+    * invoked for pushing the buffer contents to the target
+    * <code>Handler</code>.
+    *
+    * <p>Most applications do not need to call this method directly.
+    * Instead, they will use use a {@link Logger}, which will create
+    * LogRecords and distribute them to registered handlers.
+    *
+    * @param record the log event to be published.
+    */
+   public void publish(LogRecord record)
+   {
+     if (!isLoggable(record))
+       return;
+ 
+     buffer[position] = record;
+     position = (position + 1) % buffer.length;
+     numPublished = numPublished + 1;
+ 
+     if (record.getLevel().intValue() >= pushLevel.intValue())
+       push();
+   }
+ 
+ 
+   /**
+    * Pushes the contents of the memory buffer to the target
+    * <code>Handler</code> and clears the buffer. Note that
+    * the target handler will discard those records that do
+    * not satisfy its own severity level threshold, or that are
+    * not considered loggable by an installed {@link Filter}.
+    *
+    * <p>In case of an I/O failure, the {@link ErrorManager} of the
+    * target <code>Handler</code> will be notified, but the caller of
+    * this method will not receive an exception.
+    */
+   public void push()
+   {
+     int i;
+ 
+     if (numPublished < buffer.length)
+     {
+       for (i = 0; i < position; i++)
+         target.publish(buffer[i]);
+     }
+     else
+     {
+       for (i = position; i < buffer.length; i++)
+ 	target.publish(buffer[i]);
+       for (i = 0; i < position; i++)
+ 	target.publish(buffer[i]);
+     }
+ 
+     numPublished = 0;
+     position = 0;
+   }
+ 
+ 
+   /**
+    * Forces any data that may have been buffered by the target
+    * <code>Handler</code> to the underlying output device, but
+    * does <em>not</em> push the contents of the circular memory
+    * buffer to the target handler.
+    *
+    * <p>In case of an I/O failure, the {@link ErrorManager} of the
+    * target <code>Handler</code> will be notified, but the caller of
+    * this method will not receive an exception.
+    *
+    * @see #push()
+    */
+   public void flush()
+   {
+     target.flush();
+   }
+ 
+ 
+   /**
+    * Closes this <code>MemoryHandler</code> and its associated target
+    * handler, discarding the contents of the memory buffer.  However,
+    * any data that may have been buffered by the target
+    * <code>Handler</code> is forced to the underlying output device.
+    *
+    * <p>As soon as <code>close</code> has been called,
+    * a <code>Handler</code> should not be used anymore. Attempts
+    * to publish log records, to flush buffers, or to modify the
+    * <code>Handler</code> in any other way may throw runtime
+    * exceptions after calling <code>close</code>.</p>
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code> of
+    * the associated target <code>Handler</code> will be informed, but
+    * the caller of this method will not receive an exception.</p>
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure.
+    *
+    * @see #push()
+    */
+   public void close()
+     throws SecurityException
+   {
+     push();
+ 
+     /* This will check for LoggingPermission("control"). If the
+      * current security context does not grant this permission,
+      * push() has been executed, but this does not impose a
+      * security risk.
+      */
+     target.close();
+   }
+ 
+     
+ 
+   /**
+    * Returns the push level threshold for this <code>Handler</code>.
+    * When a record is published whose severity level is greater
+    * than or equal to the <code>pushLevel</code> of this
+    * <code>MemoryHandler</code>, the {@link #push()} method will be
+    * invoked for pushing the buffer contents to the target
+    * <code>Handler</code>.
+    *
+    * @return the push level threshold for automatic pushing.
+    */
+   public Level getPushLevel()
+   {
+     return pushLevel;
+   }
+ 
+ 
+   /**
+    * Sets the push level threshold for this <code>Handler</code>.
+    * When a record is published whose severity level is greater
+    * than or equal to the <code>pushLevel</code> of this
+    * <code>MemoryHandler</code>, the {@link #push()} method will be
+    * invoked for pushing the buffer contents to the target
+    * <code>Handler</code>.
+    *
+    * @param pushLevel the push level threshold for automatic pushing.
+    *
+    * @exception SecurityException if a security manager exists and
+    *            the caller is not granted the permission to control
+    *            the logging infrastructure.
+    *
+    * @exception NullPointerException if <code>pushLevel</code> is
+    *            <code>null</code>.
+    */
+   public void setPushLevel(Level pushLevel)
+   {
+     LogManager.getLogManager().checkAccess();
+ 
+     /* Throws a NullPointerException if pushLevel is null. */
+     pushLevel.getClass();
+ 
+     this.pushLevel = pushLevel;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/SimpleFormatter.java gcc-4.1.0/libjava/classpath/java/util/logging/SimpleFormatter.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/SimpleFormatter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/SimpleFormatter.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,119 ----
+ /* SimpleFormatter.java --
+    A class for formatting log records into short human-readable messages
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.text.DateFormat;
+ import java.util.Date;
+ 
+ /**
+  * A <code>SimpleFormatter</code> formats log records into
+  * short human-readable messages, typically one or two lines.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class SimpleFormatter
+   extends Formatter
+ {
+   /**
+    * Constructs a SimpleFormatter.
+    */
+   public SimpleFormatter()
+   {
+   }
+ 
+ 
+   /**
+    * An instance of a DateFormatter that is used for formatting
+    * the time of a log record into a human-readable string,
+    * according to the rules of the current locale.  The value
+    * is set after the first invocation of format, since it is
+    * common that a JVM will instantiate a SimpleFormatter without
+    * ever using it.
+    */
+   private DateFormat dateFormat;
+ 
+   /**
+    * The character sequence that is used to separate lines in the
+    * generated stream. Somewhat surprisingly, the Sun J2SE 1.4
+    * reference implementation always uses UNIX line endings, even on
+    * platforms that have different line ending conventions (i.e.,
+    * DOS). The GNU implementation does not replicate this bug.
+    *
+    * @see Sun bug parade, bug #4462871,
+    * "java.util.logging.SimpleFormatter uses hard-coded line separator".
+    */
+   static final String lineSep = System.getProperty("line.separator");
+ 
+ 
+   /**
+    * Formats a log record into a String.
+    *
+    * @param record the log record to be formatted.
+    *
+    * @return a short human-readable message, typically one or two
+    *   lines.  Lines are separated using the default platform line
+    *   separator.
+    *
+    * @throws NullPointerException if <code>record</code>
+    *         is <code>null</code>.
+    */
+   public String format(LogRecord record)
+   {
+     StringBuffer buf = new StringBuffer(180);
+ 
+     if (dateFormat == null)
+       dateFormat = DateFormat.getDateTimeInstance();
+ 
+     buf.append(dateFormat.format(new Date(record.getMillis())));
+     buf.append(' ');
+     buf.append(record.getSourceClassName());
+     buf.append(' ');
+     buf.append(record.getSourceMethodName());
+     buf.append(lineSep);
+ 
+     buf.append(record.getLevel());
+     buf.append(": ");
+     buf.append(formatMessage(record));
+ 
+     buf.append(lineSep);
+ 
+     return buf.toString();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/SocketHandler.java gcc-4.1.0/libjava/classpath/java/util/logging/SocketHandler.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/SocketHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/SocketHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,221 ----
+ /* SocketHandler.java -- a class for publishing log messages to network sockets
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ 
+ /**
+  * A <code>SocketHandler</code> publishes log records to
+  * a TCP/IP socket.
+  *
+  * <p><strong>Configuration:</strong> Values of the subsequent
+  * <code>LogManager</code> properties are taken into consideration
+  * when a <code>SocketHandler</code> is initialized.
+  * If a property is not defined, or if it has an invalid
+  * value, a default is taken without an exception being thrown.
+  *
+  * <ul>
+  *
+  * <li><code>java.util.SocketHandler.level</code> - specifies
+  *     the initial severity level threshold. Default value:
+  *     <code>Level.ALL</code>.</li>
+  *
+  * <li><code>java.util.SocketHandler.filter</code> - specifies
+  *     the name of a Filter class. Default value: No Filter.</li>
+  *
+  * <li><code>java.util.SocketHandler.formatter</code> - specifies
+  *     the name of a Formatter class. Default value:
+  *     <code>java.util.logging.XMLFormatter</code>.</li>
+  *
+  * <li><code>java.util.SocketHandler.encoding</code> - specifies
+  *     the name of the character encoding. Default value:
+  *     the default platform encoding.</li>
+  *
+  * <li><code>java.util.SocketHandler.host</code> - specifies
+  *     the name of the host to which records are published.
+  *     There is no default value for this property; if it is
+  *     not set, the SocketHandler constructor will throw
+  *     an exception.</li>
+  *
+  * <li><code>java.util.SocketHandler.port</code> - specifies
+  *     the TCP/IP port to which records are published.
+  *     There is no default value for this property; if it is
+  *     not set, the SocketHandler constructor will throw
+  *     an exception.</li>
+  *
+  * </ul>
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class SocketHandler
+   extends StreamHandler
+ {
+   /**
+    * Constructs a <code>SocketHandler</code> that publishes log
+    * records to a TCP/IP socket.  Tthe initial configuration is
+    * determined by the <code>LogManager</code> properties described
+    * above.
+    *
+    * @throws java.io.IOException if the connection to the specified
+    *         network host and port cannot be established.
+    *
+    * @throws java.lang.IllegalArgumentException if either the
+    *         <code>java.util.logging.SocketHandler.host</code>
+    *         or <code>java.util.logging.SocketHandler.port</code>
+    *         LogManager properties is not defined, or specifies
+    *         an invalid value.
+    */
+   public SocketHandler()
+     throws java.io.IOException
+   {
+     this(LogManager.getLogManager().getProperty("java.util.logging.SocketHandler.host"),
+ 	 getPortNumber());
+   }
+ 
+     
+   /**
+    * Constructs a <code>SocketHandler</code> that publishes log
+    * records to a TCP/IP socket.  With the exception of the internet
+    * host and port, the initial configuration is determined by the
+    * <code>LogManager</code> properties described above.
+    *
+    * @param host the Internet host to which log records will be
+    *        forwarded.
+    *
+    * @param port the port at the host which will accept a request
+    *        for a TCP/IP connection.
+    *
+    * @throws java.io.IOException if the connection to the specified
+    *         network host and port cannot be established.
+    *
+    * @throws java.lang.IllegalArgumentException if either
+    *         <code>host</code> or <code>port</code> specify
+    *         an invalid value.
+    */
+   public SocketHandler(String host, int port)
+     throws java.io.IOException
+   {
+     super(createSocket(host, port),
+ 	  "java.util.logging.SocketHandler",
+ 	  /* default level */ Level.ALL,
+ 	  /* formatter */ null,
+ 	  /* default formatter */ XMLFormatter.class);
+   }
+ 
+ 
+   /**
+    * Retrieves the port number from the java.util.logging.SocketHandler.port
+    * LogManager property.
+    *
+    * @throws IllegalArgumentException if the property is not defined or
+    *         does not specify an integer value.
+    */
+   private static int getPortNumber()
+   {
+     try {
+       return Integer.parseInt(LogManager.getLogManager().getProperty("java.util.logging.SocketHandler.port"));
+     } catch (Exception ex) {
+       throw new IllegalArgumentException();
+     }
+   }
+ 
+ 
+   /**
+    * Creates an OutputStream for publishing log records to an Internet
+    * host and port.  This private method is a helper for use by the
+    * constructor of SocketHandler.
+    *
+    * @param host the Internet host to which log records will be
+    *        forwarded.
+    *
+    * @param port the port at the host which will accept a request
+    *        for a TCP/IP connection.
+    *
+    * @throws java.io.IOException if the connection to the specified
+    *         network host and port cannot be established.
+    *
+    * @throws java.lang.IllegalArgumentException if either
+    *         <code>host</code> or <code>port</code> specify
+    *         an invalid value.
+    */
+   private static java.io.OutputStream createSocket(String host, int port)
+     throws java.io.IOException, java.lang.IllegalArgumentException
+   {
+     java.net.Socket  socket;
+ 
+     if ((host == null) || (port < 1))
+       throw new IllegalArgumentException();
+ 
+     socket = new java.net.Socket(host, port);
+ 
+     socket.shutdownInput();
+ 
+     /* The architecture of the logging framework provides replaceable
+      * formatters.  Because these formatters perform their task by
+      * returning one single String for each LogRecord to be formatted,
+      * there is no need to buffer.
+      */
+     socket.setTcpNoDelay(true);
+ 
+     return socket.getOutputStream();
+   }
+ 
+ 
+   /**
+    * Publishes a <code>LogRecord</code> to the network socket,
+    * provided the record passes all tests for being loggable.
+    * In addition, all data that may have been buffered will
+    * be forced to the network stream.
+    *
+    * <p>Most applications do not need to call this method directly.
+    * Instead, they will use a {@link Logger} instance, which will
+    * create LogRecords and distribute them to registered handlers.
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code>
+    * of this <code>SocketHandler</code> will be informed, but the caller
+    * of this method will not receive an exception.
+    *
+    * @param record the log event to be published.
+    */
+   public void publish(LogRecord record)
+   {
+     super.publish(record);
+     flush();
+   }
+ }
+     
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/StreamHandler.java gcc-4.1.0/libjava/classpath/java/util/logging/StreamHandler.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/StreamHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/StreamHandler.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,521 ----
+ /* StreamHandler.java --
+    A class for publishing log messages to instances of java.io.OutputStream
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.io.OutputStream;
+ import java.io.OutputStreamWriter;
+ import java.io.UnsupportedEncodingException;
+ import java.io.Writer;
+ 
+ /**
+  * A <code>StreamHandler</code> publishes <code>LogRecords</code> to
+  * a instances of <code>java.io.OutputStream</code>.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class StreamHandler
+   extends Handler
+ {
+   private OutputStream  out;
+   private Writer        writer;
+ 
+ 
+  /**
+   * Indicates the current state of this StreamHandler.  The value
+   * should be one of STATE_FRESH, STATE_PUBLISHED, or STATE_CLOSED.
+   */
+   private int streamState = STATE_FRESH;
+ 
+ 
+   /**
+    * streamState having this value indicates that the StreamHandler
+    * has been created, but the publish(LogRecord) method has not been
+    * called yet.  If the StreamHandler has been constructed without an
+    * OutputStream, writer will be null, otherwise it is set to a
+    * freshly created OutputStreamWriter.
+    */
+   private static final int STATE_FRESH = 0;
+ 
+ 
+   /**
+    * streamState having this value indicates that the publish(LocRecord)
+    * method has been called at least once.
+    */
+   private static final int STATE_PUBLISHED = 1;
+ 
+ 
+   /**
+    * streamState having this value indicates that the close() method
+    * has been called.
+    */
+   private static final int STATE_CLOSED = 2;
+ 
+ 
+   /**
+    * Creates a <code>StreamHandler</code> without an output stream.
+    * Subclasses can later use {@link
+    * #setOutputStream(java.io.OutputStream)} to associate an output
+    * stream with this StreamHandler.
+    */
+   public StreamHandler()
+   {
+     this(null, null);
+   }
+ 
+ 
+   /**
+    * Creates a <code>StreamHandler</code> that formats log messages
+    * with the specified Formatter and publishes them to the specified
+    * output stream.
+    *
+    * @param out the output stream to which the formatted log messages
+    *     are published.
+    *
+    * @param formatter the <code>Formatter</code> that will be used
+    *     to format log messages.
+    */
+   public StreamHandler(OutputStream out, Formatter formatter)
+   {
+     this(out, "java.util.logging.StreamHandler", Level.INFO,
+ 	 formatter, SimpleFormatter.class);
+   }
+ 
+ 
+   StreamHandler(
+     OutputStream out,
+     String propertyPrefix,
+     Level defaultLevel,
+     Formatter formatter, Class defaultFormatterClass)
+   {
+     this.level = LogManager.getLevelProperty(propertyPrefix + ".level",
+ 					     defaultLevel);
+ 
+     this.filter = (Filter) LogManager.getInstanceProperty(
+       propertyPrefix + ".filter",
+       /* must be instance of */       Filter.class,
+       /* default: new instance of */  null);
+ 
+     if (formatter != null)
+       this.formatter = formatter;
+     else
+       this.formatter = (Formatter) LogManager.getInstanceProperty(
+ 	propertyPrefix + ".formatter",
+         /* must be instance of */       Formatter.class,
+         /* default: new instance of */  defaultFormatterClass);
+ 
+     try
+     {
+       String enc = LogManager.getLogManager().getProperty(propertyPrefix
+ 							  + ".encoding");
+ 
+       /* make sure enc actually is a valid encoding */
+       if ((enc != null) && (enc.length() > 0))
+         new String(new byte[0], enc);
+ 
+       this.encoding = enc;
+     }
+     catch (Exception _)
+     {
+     }
+ 
+     if (out != null)
+     {
+       try
+       {
+         changeWriter(out, getEncoding());
+       }
+       catch (UnsupportedEncodingException uex)
+       {
+ 	/* This should never happen, since the validity of the encoding
+ 	 * name has been checked above.
+ 	 */
+ 	throw new RuntimeException(uex.getMessage());
+       }
+     }
+   }
+ 
+ 
+   private void checkOpen()
+   {
+     if (streamState == STATE_CLOSED)
+       throw new IllegalStateException(this.toString() + " has been closed");
+   }
+ 
+   private void checkFresh()
+   {
+     checkOpen();
+     if (streamState != STATE_FRESH)
+       throw new IllegalStateException("some log records have been published to " + this);
+   }
+ 
+ 
+   private void changeWriter(OutputStream out, String encoding)
+     throws UnsupportedEncodingException
+   {
+     OutputStreamWriter writer;
+ 
+     /* The logging API says that a null encoding means the default
+      * platform encoding. However, java.io.OutputStreamWriter needs
+      * another constructor for the default platform encoding,
+      * passing null would throw an exception.
+      */
+     if (encoding == null)
+       writer = new OutputStreamWriter(out);
+     else
+       writer = new OutputStreamWriter(out, encoding);
+ 
+     /* Closing the stream has side effects -- do this only after
+      * creating a new writer has been successful.
+      */
+     if ((streamState != STATE_FRESH) || (this.writer != null))
+       close();
+ 
+     this.writer = writer;
+     this.out = out;
+     this.encoding = encoding;
+     streamState = STATE_FRESH;
+   }
+ 
+ 
+   /**
+    * Sets the character encoding which this handler uses for publishing
+    * log records.  The encoding of a <code>StreamHandler</code> must be
+    * set before any log records have been published.
+    *
+    * @param encoding the name of a character encoding, or <code>null</code>
+    *            for the default encoding.
+    *
+    * @throws SecurityException if a security manager exists and
+    *     the caller is not granted the permission to control the
+    *     the logging infrastructure.
+    *
+    * @exception IllegalStateException if any log records have been
+    *     published to this <code>StreamHandler</code> before.  Please
+    *     be aware that this is a pecularity of the GNU implementation.
+    *     While the API specification indicates that it is an error
+    *     if the encoding is set after records have been published,
+    *     it does not mandate any specific behavior for that case.
+    */
+   public void setEncoding(String encoding)
+     throws SecurityException, UnsupportedEncodingException
+   {
+     /* The inherited implementation first checks whether the invoking
+      * code indeed has the permission to control the logging infra-
+      * structure, and throws a SecurityException if this was not the
+      * case.
+      *
+      * Next, it verifies that the encoding is supported and throws
+      * an UnsupportedEncodingExcpetion otherwise. Finally, it remembers
+      * the name of the encoding.
+      */
+     super.setEncoding(encoding);
+ 
+     checkFresh();
+ 
+     /* If out is null, setEncoding is being called before an output
+      * stream has been set. In that case, we need to check that the
+      * encoding is valid, and remember it if this is the case.  Since
+      * this is exactly what the inherited implementation of
+      * Handler.setEncoding does, we can delegate.
+      */
+     if (out != null)
+     {
+       /* The logging API says that a null encoding means the default
+        * platform encoding. However, java.io.OutputStreamWriter needs
+        * another constructor for the default platform encoding, passing
+        * null would throw an exception.
+        */
+       if (encoding == null)
+ 	writer = new OutputStreamWriter(out);
+       else
+ 	writer = new OutputStreamWriter(out, encoding);
+     }
+   }
+ 
+ 
+   /**
+    * Changes the output stream to which this handler publishes
+    * logging records.
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure.
+    *
+    * @throws NullPointerException if <code>out</code>
+    *         is <code>null</code>.
+    */
+   protected void setOutputStream(OutputStream out)
+     throws SecurityException
+   {
+     LogManager.getLogManager().checkAccess();
+ 
+     /* Throw a NullPointerException if out is null. */
+     out.getClass();
+ 
+     try
+     {
+       changeWriter(out, getEncoding());
+     }
+     catch (UnsupportedEncodingException ex)
+     {
+       /* This seems quite unlikely to happen, unless the underlying
+        * implementation of java.io.OutputStreamWriter changes its
+        * mind (at runtime) about the set of supported character
+        * encodings.
+        */
+       throw new RuntimeException(ex.getMessage());
+     }
+   }
+ 
+ 
+   /**
+    * Publishes a <code>LogRecord</code> to the associated output
+    * stream, provided the record passes all tests for being loggable.
+    * The <code>StreamHandler</code> will localize the message of the
+    * log record and substitute any message parameters.
+    *
+    * <p>Most applications do not need to call this method directly.
+    * Instead, they will use use a {@link Logger}, which will create
+    * LogRecords and distribute them to registered handlers.
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code>
+    * of this <code>Handler</code> will be informed, but the caller
+    * of this method will not receive an exception.
+    *
+    * <p>If a log record is being published to a
+    * <code>StreamHandler</code> that has been closed earlier, the Sun
+    * J2SE 1.4 reference can be observed to silently ignore the
+    * call. The GNU implementation, however, intentionally behaves
+    * differently by informing the <code>ErrorManager</code> associated
+    * with this <code>StreamHandler</code>.  Since the condition
+    * indicates a programming error, the programmer should be
+    * informed. It also seems extremely unlikely that any application
+    * would depend on the exact behavior in this rather obscure,
+    * erroneous case -- especially since the API specification does not
+    * prescribe what is supposed to happen.
+    * 
+    * @param record the log event to be published.
+    */
+   public void publish(LogRecord record)
+   {
+     String formattedMessage;
+ 
+     if (!isLoggable(record))
+       return;
+ 
+     if (streamState == STATE_FRESH)
+     {
+       try
+       {
+         writer.write(formatter.getHead(this));
+       }
+       catch (java.io.IOException ex)
+       {
+ 	reportError(null, ex, ErrorManager.WRITE_FAILURE);
+ 	return;
+       }
+       catch (Exception ex)
+       {
+ 	reportError(null, ex, ErrorManager.GENERIC_FAILURE);
+ 	return;
+       }
+ 
+       streamState = STATE_PUBLISHED;
+     }
+ 
+     try
+     {
+       formattedMessage = formatter.format(record);
+     }
+     catch (Exception ex)
+     {
+       reportError(null, ex, ErrorManager.FORMAT_FAILURE);
+       return;
+     }
+ 
+     try
+     {
+       writer.write(formattedMessage);
+     }
+     catch (Exception ex)
+     {
+       reportError(null, ex, ErrorManager.WRITE_FAILURE);
+     }
+   }
+ 
+ 
+   /**
+    * Checks whether or not a <code>LogRecord</code> would be logged
+    * if it was passed to this <code>StreamHandler</code> for publication.
+    *
+    * <p>The <code>StreamHandler</code> implementation first checks
+    * whether a writer is present and the handler's level is greater
+    * than or equal to the severity level threshold.  In a second step,
+    * if a {@link Filter} has been installed, its {@link
+    * Filter#isLoggable(LogRecord) isLoggable} method is
+    * invoked. Subclasses of <code>StreamHandler</code> can override
+    * this method to impose their own constraints.
+    *
+    * @param record the <code>LogRecord</code> to be checked.
+    *
+    * @return <code>true</code> if <code>record</code> would
+    *         be published by {@link #publish(LogRecord) publish},
+    *         <code>false</code> if it would be discarded.
+    *
+    * @see #setLevel(Level)
+    * @see #setFilter(Filter)
+    * @see Filter#isLoggable(LogRecord)
+    *
+    * @throws NullPointerException if <code>record</code> is
+    *         <code>null</code>.  */
+   public boolean isLoggable(LogRecord record)
+   {
+     return (writer != null) && super.isLoggable(record);
+   }
+ 
+ 
+   /**
+    * Forces any data that may have been buffered to the underlying
+    * output device.
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code>
+    * of this <code>Handler</code> will be informed, but the caller
+    * of this method will not receive an exception.
+    *
+    * <p>If a <code>StreamHandler</code> that has been closed earlier
+    * is closed a second time, the Sun J2SE 1.4 reference can be
+    * observed to silently ignore the call. The GNU implementation,
+    * however, intentionally behaves differently by informing the
+    * <code>ErrorManager</code> associated with this
+    * <code>StreamHandler</code>.  Since the condition indicates a
+    * programming error, the programmer should be informed. It also
+    * seems extremely unlikely that any application would depend on the
+    * exact behavior in this rather obscure, erroneous case --
+    * especially since the API specification does not prescribe what is
+    * supposed to happen.
+    */
+   public void flush()
+   {
+     try
+     {
+       checkOpen();
+       if (writer != null)
+         writer.flush();
+     }
+     catch (Exception ex)
+     {
+       reportError(null, ex, ErrorManager.FLUSH_FAILURE);
+     }
+   }
+ 
+ 
+   /**
+    * Closes this <code>StreamHandler</code> after having forced any
+    * data that may have been buffered to the underlying output
+    * device. 
+    *
+    * <p>As soon as <code>close</code> has been called,
+    * a <code>Handler</code> should not be used anymore. Attempts
+    * to publish log records, to flush buffers, or to modify the
+    * <code>Handler</code> in any other way may throw runtime
+    * exceptions after calling <code>close</code>.</p>
+    *
+    * <p>In case of an I/O failure, the <code>ErrorManager</code>
+    * of this <code>Handler</code> will be informed, but the caller
+    * of this method will not receive an exception.</p>
+    *
+    * <p>If a <code>StreamHandler</code> that has been closed earlier
+    * is closed a second time, the Sun J2SE 1.4 reference can be
+    * observed to silently ignore the call. The GNU implementation,
+    * however, intentionally behaves differently by informing the
+    * <code>ErrorManager</code> associated with this
+    * <code>StreamHandler</code>.  Since the condition indicates a
+    * programming error, the programmer should be informed. It also
+    * seems extremely unlikely that any application would depend on the
+    * exact behavior in this rather obscure, erroneous case --
+    * especially since the API specification does not prescribe what is
+    * supposed to happen.
+    *
+    * @throws SecurityException if a security manager exists and
+    *         the caller is not granted the permission to control
+    *         the logging infrastructure.
+    */
+   public void close()
+     throws SecurityException
+   {
+     LogManager.getLogManager().checkAccess();
+ 
+     try
+     {
+       /* Although  flush also calls checkOpen, it catches
+        * any exceptions and reports them to the ErrorManager
+        * as flush failures.  However, we want to report
+        * a closed stream as a close failure, not as a
+        * flush failure here.  Therefore, we call checkOpen()
+        * before flush().
+        */
+       checkOpen();
+       flush();
+ 
+       if (writer != null)
+       {
+ 	if (formatter != null)
+ 	{
+ 	  /* Even if the StreamHandler has never published a record,
+ 	   * it emits head and tail upon closing. An earlier version
+ 	   * of the GNU Classpath implementation did not emitted
+ 	   * anything. However, this had caused XML log files to be
+ 	   * entirely empty instead of containing no log records.
+ 	   */
+ 	  if (streamState == STATE_FRESH)
+             writer.write(formatter.getHead(this));
+ 	  if (streamState != STATE_CLOSED)
+ 	    writer.write(formatter.getTail(this));
+ 	}
+ 	streamState = STATE_CLOSED;
+         writer.close();
+       }
+     }
+     catch (Exception ex)
+     {
+       reportError(null, ex, ErrorManager.CLOSE_FAILURE);
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/XMLFormatter.java gcc-4.1.0/libjava/classpath/java/util/logging/XMLFormatter.java
*** gcc-4.0.2/libjava/classpath/java/util/logging/XMLFormatter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/XMLFormatter.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,387 ----
+ /* XMLFormatter.java --
+    A class for formatting log messages into a standard XML format
+    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.logging;
+ 
+ import java.text.SimpleDateFormat;
+ import java.util.Date;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * An <code>XMLFormatter</code> formats LogRecords into
+  * a standard XML format.
+  *
+  * @author Sascha Brawer (brawer@acm.org)
+  */
+ public class XMLFormatter
+   extends Formatter
+ {
+   /**
+    * Constructs a new XMLFormatter.
+    */
+   public XMLFormatter()
+   {
+   }
+ 
+ 
+   /**
+    * The character sequence that is used to separate lines in the
+    * generated XML stream. Somewhat surprisingly, the Sun J2SE 1.4
+    * reference implementation always uses UNIX line endings, even on
+    * platforms that have different line ending conventions (i.e.,
+    * DOS). The GNU Classpath implementation does not replicates this
+    * bug.
+    *
+    * See also the Sun bug parade, bug #4462871,
+    * "java.util.logging.SimpleFormatter uses hard-coded line separator".
+    */
+   private static final String lineSep = SimpleFormatter.lineSep;
+ 
+     
+   /**
+    * A DateFormat for emitting time in the ISO 8601 format.
+    * Since the API specification of SimpleDateFormat does not talk
+    * about its thread-safety, we cannot share a singleton instance.
+    */
+   private final SimpleDateFormat iso8601
+     = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+ 
+ 
+   /**
+    * Appends a line consisting of indentation, opening element tag,
+    * element content, closing element tag and line separator to
+    * a StringBuffer, provided that the element content is
+    * actually existing.
+    *
+    * @param buf the StringBuffer to which the line will be appended.
+    *
+    * @param indent the indentation level.
+    *
+    * @param tag the element tag name, for instance <code>method</code>.
+    *
+    * @param content the element content, or <code>null</code> to
+    *        have no output whatsoever appended to <code>buf</code>.
+    */
+   private static void appendTag(StringBuffer buf, int indent,
+                                 String tag, String content)
+   {
+     int i;
+ 
+     if (content == null)
+       return;
+ 
+     for (i = 0; i < indent * 2; i++)
+       buf.append(' ');
+ 
+     buf.append("<");
+     buf.append(tag);
+     buf.append('>');
+ 
+     /* Append the content, but escape for XML by replacing
+      * '&', '<', '>' and all non-ASCII characters with
+      * appropriate escape sequences.
+      * The Sun J2SE 1.4 reference implementation does not
+      * escape non-ASCII characters. This is a bug in their
+      * implementation which has been reported in the Java
+      * bug parade as bug number (FIXME: Insert number here).
+      */
+     for (i = 0; i < content.length(); i++)
+     {
+       char c = content.charAt(i);
+       switch (c)
+       {
+       case '&':
+ 	buf.append("&amp;");
+ 	break;
+ 
+       case '<':
+ 	buf.append("&lt;");
+ 	break;
+ 
+       case '>':
+ 	buf.append("&gt;");
+ 	break;
+ 
+       default:
+ 	if (((c >= 0x20) && (c <= 0x7e))
+ 	    || (c == /* line feed */ 10)
+ 	    || (c == /* carriage return */ 13))
+ 	  buf.append(c);
+ 	else
+ 	{
+ 	  buf.append("&#");
+ 	  buf.append((int) c);
+ 	  buf.append(';');
+ 	}
+ 	break;
+       } /* switch (c) */
+     } /* for i */
+ 
+     buf.append("</");
+     buf.append(tag);
+     buf.append(">");
+     buf.append(lineSep);
+   }
+ 
+ 
+   /**
+    * Appends a line consisting of indentation, opening element tag,
+    * numeric element content, closing element tag and line separator
+    * to a StringBuffer.
+    *
+    * @param buf the StringBuffer to which the line will be appended.
+    *
+    * @param indent the indentation level.
+    *
+    * @param tag the element tag name, for instance <code>method</code>.
+    *
+    * @param content the element content.
+    */
+   private static void appendTag(StringBuffer buf, int indent,
+                                 String tag, long content)
+   {
+     appendTag(buf, indent, tag, Long.toString(content));
+   }
+ 
+ 
+   public String format(LogRecord record)
+   {
+     StringBuffer    buf = new StringBuffer(400);
+     Level           level = record.getLevel();
+     long            millis = record.getMillis();
+     Object[]        params = record.getParameters();
+     ResourceBundle  bundle = record.getResourceBundle();
+     String          message;
+     
+     buf.append("<record>");
+     buf.append(lineSep);
+     
+     
+     appendTag(buf, 1, "date", iso8601.format(new Date(millis)));
+     appendTag(buf, 1, "millis", record.getMillis());
+     appendTag(buf, 1, "sequence", record.getSequenceNumber());
+     appendTag(buf, 1, "logger", record.getLoggerName());
+ 
+     if (level.isStandardLevel())
+       appendTag(buf, 1, "level", level.toString());
+     else
+       appendTag(buf, 1, "level", level.intValue());
+ 
+     appendTag(buf, 1, "class", record.getSourceClassName());
+     appendTag(buf, 1, "method", record.getSourceMethodName());
+     appendTag(buf, 1, "thread", record.getThreadID());
+ 
+     /* The Sun J2SE 1.4 reference implementation does not emit the
+      * message in localized form. This is in violation of the API
+      * specification. The GNU Classpath implementation intentionally
+      * replicates the buggy behavior of the Sun implementation, as
+      * different log files might be a big nuisance to users.
+      */
+     try
+     {
+       record.setResourceBundle(null);
+       message = formatMessage(record);
+     }
+     finally
+     {
+       record.setResourceBundle(bundle);
+     }
+     appendTag(buf, 1, "message", message);
+ 
+     /* The Sun J2SE 1.4 reference implementation does not
+      * emit key, catalog and param tags. This is in violation
+      * of the API specification.  The Classpath implementation
+      * intentionally replicates the buggy behavior of the
+      * Sun implementation, as different log files might be
+      * a big nuisance to users.
+      *
+      * FIXME: File a bug report with Sun. Insert bug number here.
+      *
+      *
+      * key = record.getMessage();
+      * if (key == null)
+      *   key = "";
+      *
+      * if ((bundle != null) && !key.equals(message))
+      * {
+      *   appendTag(buf, 1, "key", key);
+      *   appendTag(buf, 1, "catalog", record.getResourceBundleName());
+      * }
+      *
+      * if (params != null)
+      * {
+      *   for (int i = 0; i < params.length; i++)
+      *     appendTag(buf, 1, "param", params[i].toString());
+      * }
+      */
+ 
+     /* FIXME: We have no way to obtain the stacktrace before free JVMs
+      * support the corresponding method in java.lang.Throwable.  Well,
+      * it would be possible to parse the output of printStackTrace,
+      * but this would be pretty kludgy. Instead, we postpose the
+      * implementation until Throwable has made progress.
+      */
+     Throwable thrown = record.getThrown();
+     if (thrown != null)
+     {
+       buf.append("  <exception>");
+       buf.append(lineSep);
+ 
+       /* The API specification is not clear about what exactly
+        * goes into the XML record for a thrown exception: It
+        * could be the result of getMessage(), getLocalizedMessage(),
+        * or toString(). Therefore, it was necessary to write a
+        * Mauve testlet and run it with the Sun J2SE 1.4 reference
+        * implementation. It turned out that the we need to call
+        * toString().
+        *
+        * FIXME: File a bug report with Sun, asking for clearer
+        * specs.
+        */
+       appendTag(buf, 2, "message", thrown.toString());
+ 
+       /* FIXME: The Logging DTD specifies:
+        *
+        * <!ELEMENT exception (message?, frame+)>
+        *
+        * However, java.lang.Throwable.getStackTrace() is
+        * allowed to return an empty array. So, what frame should
+        * be emitted for an empty stack trace? We probably
+        * should file a bug report with Sun, asking for the DTD
+        * to be changed.
+        */
+ 
+       buf.append("  </exception>");
+       buf.append(lineSep);
+     }
+ 
+ 
+     buf.append("</record>");
+     buf.append(lineSep);
+ 
+     return buf.toString();
+   }
+ 
+ 
+   /**
+    * Returns a string that handlers are supposed to emit before
+    * the first log record.  The base implementation returns an
+    * empty string, but subclasses such as {@link XMLFormatter}
+    * override this method in order to provide a suitable header.
+    *
+    * @return a string for the header.
+    *
+    * @param h the handler which will prepend the returned
+    *     string in front of the first log record.  This method
+    *     will inspect certain properties of the handler, for
+    *     example its encoding, in order to construct the header.
+    */
+   public String getHead(Handler h)
+   {
+     StringBuffer  buf;
+     String        encoding;
+ 
+     buf = new StringBuffer(80);
+     buf.append("<?xml version=\"1.0\" encoding=\"");
+ 
+     encoding = h.getEncoding();
+ 
+     /* file.encoding is a system property with the Sun JVM, indicating
+      * the platform-default file encoding. Unfortunately, the API
+      * specification for java.lang.System.getProperties() does not
+      * list this property.
+      */
+     if (encoding == null)
+       encoding = System.getProperty("file.encoding");
+ 
+     /* Since file.encoding is not listed with the API specification of
+      * java.lang.System.getProperties(), there might be some VMs that
+      * do not define this system property.  Therefore, we use UTF-8 as
+      * a reasonable default. Please note that if the platform encoding
+      * uses the same codepoints as US-ASCII for the US-ASCII character
+      * set (e.g, 65 for A), it does not matter whether we emit the
+      * wrong encoding into the XML header -- the GNU Classpath will
+      * emit XML escape sequences like &#1234; for any non-ASCII
+      * character.  Virtually all character encodings use the same code
+      * points as US-ASCII for ASCII characters.  Probably, EBCDIC is
+      * the only exception.
+      */
+     if (encoding == null)
+       encoding = "UTF-8";
+     
+     /* On Windows XP localized for Swiss German (this is one of
+      * my [Sascha Brawer's] test machines), the default encoding
+      * has the canonical name "windows-1252". The "historical" name
+      * of this encoding is "Cp1252" (see the Javadoc for the class
+      * java.nio.charset.Charset for the distinction). Now, that class
+      * does have a method for mapping historical to canonical encoding
+      * names. However, if we used it here, we would be come dependent
+      * on java.nio.*, which was only introduced with J2SE 1.4.
+      * Thus, we do this little hack here. As soon as Classpath supports
+      * java.nio.charset.CharSet, this hack should be replaced by
+      * code that correctly canonicalizes the encoding name.
+      */
+     if ((encoding.length() > 2) && encoding.startsWith("Cp"))
+       encoding = "windows-" + encoding.substring(2);
+ 
+     buf.append(encoding);
+ 
+     buf.append("\" standalone=\"no\"?>");
+     buf.append(lineSep);
+ 
+     /* SYSTEM is not a fully qualified URL so that validating
+      * XML parsers do not need to connect to the Internet in
+      * order to read in a log file.  See also the Sun Bug Parade,
+      * bug #4372790, "Logging APIs: need to use relative URL for XML
+      * doctype".
+      */
+     buf.append("<!DOCTYPE log SYSTEM \"logger.dtd\">");
+     buf.append(lineSep);
+     buf.append("<log>");
+     buf.append(lineSep);
+ 
+     return buf.toString();
+   }
+ 
+ 
+   public String getTail(Handler h)
+   {
+     return "</log>" + lineSep;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/logging/package.html gcc-4.1.0/libjava/classpath/java/util/logging/package.html
*** gcc-4.0.2/libjava/classpath/java/util/logging/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/logging/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.util.logging package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.util.logging</title></head>
+ 
+ <body>
+ <p>Utility classes for logging events.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/package.html gcc-4.1.0/libjava/classpath/java/util/package.html
*** gcc-4.0.2/libjava/classpath/java/util/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,48 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.util package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.util</title></head>
+ 
+ <body>
+ <p>Utility classes such as collections (maps, sets, lists, dictionaries and
+ stacks), calendars, dates, locales, properties, timers, resource bundles and
+ event objects.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/AbstractPreferences.java gcc-4.1.0/libjava/classpath/java/util/prefs/AbstractPreferences.java
*** gcc-4.0.2/libjava/classpath/java/util/prefs/AbstractPreferences.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/AbstractPreferences.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1272 ----
+ /* AbstractPreferences -- Partial implementation of a Preference node
+    Copyright (C) 2001, 2003, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.prefs;
+ 
+ import gnu.java.util.prefs.NodeWriter;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.TreeSet;
+ 
+ /**
+  * Partial implementation of a Preference node.
+  *
+  * @since 1.4
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public abstract class AbstractPreferences extends Preferences {
+ 
+     // protected fields
+ 
+     /**
+      * Object used to lock this preference node. Any thread only locks nodes
+      * downwards when it has the lock on the current node. No method should
+      * synchronize on the lock of any of its parent nodes while holding the
+      * lock on the current node.
+      */
+     protected final Object lock = new Object();
+ 
+     /**
+      * Set to true in the contructor if the node did not exist in the backing
+      * store when this preference node object was created. Should be set in
+      * the contructor of a subclass. Defaults to false. Used to fire node
+      * changed events.
+      */
+     protected boolean newNode = false;
+ 
+     // private fields
+ 
+     /**
+      * The parent preferences node or null when this is the root node.
+      */
+     private final AbstractPreferences parent;
+ 
+     /**
+      * The name of this node.
+      * Only when this is a root node (parent == null) the name is empty.
+      * It has a maximum of 80 characters and cannot contain any '/' characters.
+      */
+     private final String name;
+ 
+     /** True when this node has been remove, false otherwise. */
+     private boolean removed = false;
+ 
+     /**
+      * Holds all the child names and nodes of this node that have been
+      * accessed by earlier <code>getChild()</code> or <code>childSpi()</code>
+      * invocations and that have not been removed.
+      */
+     private HashMap childCache = new HashMap();
+ 
+     // constructor
+ 
+     /**
+      * Creates a new AbstractPreferences node with the given parent and name.
+      * 
+      * @param parent the parent of this node or null when this is the root node
+      * @param name the name of this node, can not be null, only 80 characters
+      *             maximum, must be empty when parent is null and cannot
+      *             contain any '/' characters
+      * @exception IllegalArgumentException when name is null, greater then 80
+      *            characters, not the empty string but parent is null or
+      *            contains a '/' character
+      */
+     protected AbstractPreferences(AbstractPreferences parent, String name) {
+         if (  (name == null)                            // name should be given
+            || (name.length() > MAX_NAME_LENGTH)         // 80 characters max
+            || (parent == null && name.length() != 0)    // root has no name
+            || (parent != null && name.length() == 0)    // all other nodes do
+            || (name.indexOf('/') != -1))                // must not contain '/'
+             throw new IllegalArgumentException("Illegal name argument '"
+                                                + name
+                                                + "' (parent is "
+                                                + (parent == null ? "" : "not ")
+                                                + "null)");
+         this.parent = parent;
+         this.name = name;
+     }
+ 
+     // identification methods
+ 
+     /**
+      * Returns the absolute path name of this preference node.
+      * The absolute path name of a node is the path name of its parent node
+      * plus a '/' plus its own name. If the node is the root node and has no
+      * parent then its path name is "" and its absolute path name is "/".
+      */
+     public String absolutePath() {
+         if (parent == null)
+             return "/";
+         else
+             return parent.path() + '/' + name;
+     }
+ 
+     /**
+      * Private helper method for absolutePath. Returns the empty string for a
+      * root node and otherwise the parentPath of its parent plus a '/'.
+      */
+     private String path() {
+         if (parent == null)
+             return "";
+         else
+             return parent.path() + '/' + name;
+     }
+ 
+     /**
+      * Returns true if this node comes from the user preferences tree, false
+      * if it comes from the system preferences tree.
+      */
+     public boolean isUserNode() {
+         AbstractPreferences root = this;
+ 	while (root.parent != null)
+ 	    root = root.parent;
+ 	return root == Preferences.userRoot();
+     }
+ 
+     /**
+      * Returns the name of this preferences node. The name of the node cannot
+      * be null, can be mostly 80 characters and cannot contain any '/'
+      * characters. The root node has as name "".
+      */
+     public String name() {
+         return name;
+     }
+ 
+     /**
+      * Returns the String given by
+      * <code>
+      * (isUserNode() ? "User":"System") + " Preference Node: " + absolutePath()
+      * </code>
+      */
+     public String toString() {
+         return (isUserNode() ? "User":"System")
+                + " Preference Node: "
+                + absolutePath();
+     }
+ 
+     /**
+      * Returns all known unremoved children of this node.
+      *
+      * @return All known unremoved children of this node
+      */
+     protected final AbstractPreferences[] cachedChildren()
+     {
+       return (AbstractPreferences[]) childCache.values().toArray();
+     }
+ 
+     /**
+      * Returns all the direct sub nodes of this preferences node.
+      * Needs access to the backing store to give a meaningfull answer.
+      * <p>
+      * This implementation locks this node, checks if the node has not yet
+      * been removed and throws an <code>IllegalStateException</code> when it
+      * has been. Then it creates a new <code>TreeSet</code> and adds any
+      * already cached child nodes names. To get any uncached names it calls
+      * <code>childrenNamesSpi()</code> and adds the result to the set. Finally
+      * it calls <code>toArray()</code> on the created set. When the call to
+      * <code>childrenNamesSpi</code> thows an <code>BackingStoreException</code>
+      * this method will not catch that exception but propagate the exception
+      * to the caller.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException when this node has been removed
+      */
+     public String[] childrenNames() throws BackingStoreException {
+         synchronized(lock) {
+             if (isRemoved())
+                 throw new IllegalStateException("Node removed");
+ 
+             TreeSet childrenNames = new TreeSet();
+ 
+             // First get all cached node names
+             childrenNames.addAll(childCache.keySet());
+             
+             // Then add any others
+             String names[] = childrenNamesSpi();
+             for (int i = 0; i < names.length; i++) {
+                 childrenNames.add(names[i]);
+             }
+ 
+             // And return the array of names
+             String[] children = new String[childrenNames.size()];
+             childrenNames.toArray(children);
+             return children;
+ 
+         }
+     }
+ 
+     /**
+      * Returns a sub node of this preferences node if the given path is
+      * relative (does not start with a '/') or a sub node of the root
+      * if the path is absolute (does start with a '/').
+      * <p>
+      * This method first locks this node and checks if the node has not been
+      * removed, if it has been removed it throws an exception. Then if the
+      * path is relative (does not start with a '/') it checks if the path is
+      * legal (does not end with a '/' and has no consecutive '/' characters).
+      * Then it recursively gets a name from the path, gets the child node
+      * from the child-cache of this node or calls the <code>childSpi()</code>
+      * method to create a new child sub node. This is done recursively on the
+      * newly created sub node with the rest of the path till the path is empty.
+      * If the path is absolute (starts with a '/') the lock on this node is
+      * droped and this method is called on the root of the preferences tree
+      * with as argument the complete path minus the first '/'.
+      *
+      * @exception IllegalStateException if this node has been removed
+      * @exception IllegalArgumentException if the path contains two or more
+      * consecutive '/' characters, ends with a '/' charactor and is not the
+      * string "/" (indicating the root node) or any name on the path is more
+      * then 80 characters long
+      */
+     public Preferences node(String path) {
+         synchronized(lock) {
+             if (isRemoved())
+                 throw new IllegalStateException("Node removed");
+ 
+             // Is it a relative path?
+             if (!path.startsWith("/")) {
+ 
+                 // Check if it is a valid path
+                 if (path.indexOf("//") != -1 || path.endsWith("/"))
+                     throw new IllegalArgumentException(path);
+ 
+                 return getNode(path);
+             }
+         }
+ 
+         // path started with a '/' so it is absolute
+         // we drop the lock and start from the root (omitting the first '/')
+         Preferences root = isUserNode() ? userRoot() : systemRoot();
+         return root.node(path.substring(1));
+ 
+     }
+ 
+     /**
+      * Private helper method for <code>node()</code>. Called with this node
+      * locked. Returns this node when path is the empty string, if it is not
+      * empty the next node name is taken from the path (all chars till the
+      * next '/' or end of path string) and the node is either taken from the
+      * child-cache of this node or the <code>childSpi()</code> method is called
+      * on this node with the name as argument. Then this method is called
+      * recursively on the just constructed child node with the rest of the
+      * path.
+      *
+      * @param path should not end with a '/' character and should not contain
+      *        consecutive '/' characters
+      * @exception IllegalArgumentException if path begins with a name that is
+      *            larger then 80 characters.
+      */
+     private Preferences getNode(String path) {
+         // if mark is dom then goto end
+ 
+         // Empty String "" indicates this node
+         if (path.length() == 0)
+             return this;
+ 
+         // Calculate child name and rest of path
+         String childName;
+         String childPath;
+         int nextSlash = path.indexOf('/');
+         if (nextSlash == -1) {
+             childName = path;
+             childPath = "";
+         } else {
+             childName = path.substring(0, nextSlash);
+             childPath = path.substring(nextSlash+1);
+         }
+ 
+         // Get the child node
+         AbstractPreferences child;
+         child = (AbstractPreferences)childCache.get(childName);
+         if (child == null) {
+ 
+             if (childName.length() > MAX_NAME_LENGTH)
+                throw new IllegalArgumentException(childName); 
+ 
+             // Not in childCache yet so create a new sub node
+             child = childSpi(childName);
+             // XXX - check if node is new
+             childCache.put(childName, child);
+         }
+ 
+         // Lock the child and go down
+         synchronized(child.lock) {
+             return child.getNode(childPath);
+         }
+     }
+ 
+     /**
+      * Returns true if the node that the path points to exists in memory or
+      * in the backing store. Otherwise it returns false or an exception is
+      * thrown. When this node is removed the only valid parameter is the
+      * empty string (indicating this node), the return value in that case
+      * will be false.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has been removed
+      *            and the path is not the empty string (indicating this node)
+      * @exception IllegalArgumentException if the path contains two or more
+      * consecutive '/' characters, ends with a '/' charactor and is not the
+      * string "/" (indicating the root node) or any name on the path is more
+      * then 80 characters long
+      */
+     public boolean nodeExists(String path) throws BackingStoreException {
+         synchronized(lock) {
+             if (isRemoved() && path.length() != 0)
+                 throw new IllegalStateException("Node removed");
+ 
+             // Is it a relative path?
+             if (!path.startsWith("/")) {
+ 
+                 // Check if it is a valid path
+                 if (path.indexOf("//") != -1 || path.endsWith("/"))
+                     throw new IllegalArgumentException(path);
+ 
+                 return existsNode(path);
+             }
+         }
+ 
+         // path started with a '/' so it is absolute
+         // we drop the lock and start from the root (omitting the first '/')
+         Preferences root = isUserNode() ? userRoot() : systemRoot();
+         return root.nodeExists(path.substring(1));
+ 
+     }
+ 
+     private boolean existsNode(String path) throws BackingStoreException {
+ 
+         // Empty String "" indicates this node
+         if (path.length() == 0)
+             return(!isRemoved());
+ 
+         // Calculate child name and rest of path
+         String childName;
+         String childPath;
+         int nextSlash = path.indexOf('/');
+         if (nextSlash == -1) {
+             childName = path;
+             childPath = "";
+         } else {
+             childName = path.substring(0, nextSlash);
+             childPath = path.substring(nextSlash+1);
+         }
+ 
+         // Get the child node
+         AbstractPreferences child;
+         child = (AbstractPreferences)childCache.get(childName);
+         if (child == null) {
+ 
+             if (childName.length() > MAX_NAME_LENGTH)
+                throw new IllegalArgumentException(childName);
+ 
+             // Not in childCache yet so create a new sub node
+             child = getChild(childName);
+ 
+             if (child == null)
+                 return false;
+ 
+             childCache.put(childName, child);
+         }
+ 
+         // Lock the child and go down
+         synchronized(child.lock) {
+             return child.existsNode(childPath);
+         }
+     }
+ 
+     /**
+      * Returns the child sub node if it exists in the backing store or null
+      * if it does not exist. Called (indirectly) by <code>nodeExists()</code>
+      * when a child node name can not be found in the cache.
+      * <p>
+      * Gets the lock on this node, calls <code>childrenNamesSpi()</code> to
+      * get an array of all (possibly uncached) children and compares the
+      * given name with the names in the array. If the name is found in the
+      * array <code>childSpi()</code> is called to get an instance, otherwise
+      * null is returned.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      */
+     protected AbstractPreferences getChild(String name)
+                                     throws BackingStoreException
+     {
+         synchronized(lock) {
+             // Get all the names (not yet in the cache)
+             String[] names = childrenNamesSpi();
+             for (int i=0; i < names.length; i++)
+                 if (name.equals(names[i]))
+                     return childSpi(name);
+            
+             // No child with that name found
+             return null;
+         }
+     }
+ 
+     /**
+      * Returns true if this node has been removed with the
+      * <code>removeNode()</code> method, false otherwise.
+      * <p>
+      * Gets the lock on this node and then returns a boolean field set by
+      * <code>removeNode</code> methods.
+      */
+     protected boolean isRemoved() {
+         synchronized(lock) {
+             return removed;
+         }
+     }
+ 
+     /**
+      * Returns the parent preferences node of this node or null if this is
+      * the root of the preferences tree.
+      * <p>
+      * Gets the lock on this node, checks that the node has not been removed
+      * and returns the parent given to the constructor.
+      *
+      * @exception IllegalStateException if this node has been removed
+      */
+     public Preferences parent() {
+         synchronized(lock) {
+             if (isRemoved())
+                 throw new IllegalStateException("Node removed");
+ 
+             return parent;
+         }
+     }
+ 
+     // export methods
+ 
+     /**
+      * XXX
+      */
+     public void exportNode(OutputStream os)
+                                     throws BackingStoreException,
+                                            IOException
+     {
+         NodeWriter nodeWriter = new NodeWriter(this, os);
+         nodeWriter.writePrefs();
+     }
+ 
+     /**
+      * XXX
+      */
+     public void exportSubtree(OutputStream os)
+                                     throws BackingStoreException,
+                                            IOException
+     {
+         NodeWriter nodeWriter = new NodeWriter(this, os);
+         nodeWriter.writePrefsTree();
+     }
+ 
+     // preference entry manipulation methods
+ 
+     /**
+      * Returns an (possibly empty) array with all the keys of the preference
+      * entries of this node.
+      * <p>
+      * This method locks this node and checks if the node has not been
+      * removed, if it has been removed it throws an exception, then it returns
+      * the result of calling <code>keysSpi()</code>.
+      * 
+      * @exception BackingStoreException when the backing store cannot be     
+      *            reached
+      * @exception IllegalStateException if this node has been removed
+      */
+     public String[] keys() throws BackingStoreException {
+         synchronized(lock) {
+             if (isRemoved())
+                 throw new IllegalStateException("Node removed");
+ 
+             return keysSpi();
+         }
+     }
+ 
+ 
+     /**
+      * Returns the value associated with the key in this preferences node. If
+      * the default value of the key cannot be found in the preferences node
+      * entries or something goes wrong with the backing store the supplied
+      * default value is returned.
+      * <p>
+      * Checks that key is not null and not larger then 80 characters,
+      * locks this node, and checks that the node has not been removed.
+      * Then it calls <code>keySpi()</code> and returns
+      * the result of that method or the given default value if it returned
+      * null or throwed an exception.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public String get(String key, String defaultVal) {
+         if (key.length() > MAX_KEY_LENGTH)
+             throw new IllegalArgumentException(key);
+ 
+         synchronized(lock) {
+             if (isRemoved())
+                 throw new IllegalStateException("Node removed");
+ 
+             String value;
+             try {
+                 value = getSpi(key);
+             } catch (ThreadDeath death) {
+                 throw death;
+             } catch (Throwable t) {
+                 value = null;
+             }
+ 
+             if (value != null) {
+                 return value;
+             } else {
+                 return defaultVal;
+             }
+         }
+     }
+ 
+     /**
+      * Convenience method for getting the given entry as a boolean.
+      * When the string representation of the requested entry is either
+      * "true" or "false" (ignoring case) then that value is returned,
+      * otherwise the given default boolean value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public boolean getBoolean(String key, boolean defaultVal) {
+         String value = get(key, null);
+ 
+         if ("true".equalsIgnoreCase(value))
+             return true;
+ 
+         if ("false".equalsIgnoreCase(value))
+             return false;
+         
+         return defaultVal;
+     }
+ 
+     /**
+      * Convenience method for getting the given entry as a byte array.
+      * When the string representation of the requested entry is a valid
+      * Base64 encoded string (without any other characters, such as newlines)
+      * then the decoded Base64 string is returned as byte array,
+      * otherwise the given default byte array value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public byte[] getByteArray(String key, byte[] defaultVal) {
+         String value = get(key, null);
+ 
+         byte[] b = null;
+         if (value != null) {
+             b = decode64(value);
+         }
+ 
+         if (b != null)
+             return b;
+         else
+             return defaultVal;
+     }
+     
+     /**
+      * Helper method for decoding a Base64 string as an byte array.
+      * Returns null on encoding error. This method does not allow any other
+      * characters present in the string then the 65 special base64 chars.
+      */
+     private static byte[] decode64(String s) {
+         ByteArrayOutputStream bs = new ByteArrayOutputStream((s.length()/4)*3);
+         char[] c = new char[s.length()];
+         s.getChars(0, s.length(), c, 0);
+ 
+         // Convert from base64 chars
+         int endchar = -1;
+         for(int j = 0; j < c.length && endchar == -1; j++) {
+             if (c[j] >= 'A' && c[j] <= 'Z') {
+                 c[j] -= 'A';
+             } else if (c[j] >= 'a' && c[j] <= 'z') {
+                 c[j] = (char) (c[j] + 26 - 'a');
+             } else if (c[j] >= '0' && c[j] <= '9') {
+                 c[j] = (char) (c[j] + 52 - '0');
+             } else if (c[j] == '+') {
+                 c[j] = 62;
+             } else if (c[j] == '/') {
+                 c[j] = 63;
+             } else if (c[j] == '=') {
+                 endchar = j;
+             } else {
+                 return null; // encoding exception
+             }
+         }
+ 
+         int remaining = endchar == -1 ? c.length : endchar;
+         int i = 0;
+         while (remaining > 0) {
+             // Four input chars (6 bits) are decoded as three bytes as
+             // 000000 001111 111122 222222
+ 
+             byte b0 = (byte) (c[i] << 2);
+             if (remaining >= 2) {
+                 b0 += (c[i+1] & 0x30) >> 4;
+             }
+             bs.write(b0);
+ 
+             if (remaining >= 3) {
+                 byte b1 = (byte) ((c[i+1] & 0x0F) << 4);
+                 b1 += (byte) ((c[i+2] & 0x3C) >> 2);
+                 bs.write(b1);
+             }
+ 
+             if (remaining >= 4) {
+                 byte b2 = (byte) ((c[i+2] & 0x03) << 6);
+                 b2 += c[i+3];
+                 bs.write(b2);
+             }
+ 
+             i += 4;
+             remaining -= 4;
+         }
+ 
+         return bs.toByteArray();
+     }
+ 
+     /**
+      * Convenience method for getting the given entry as a double.
+      * When the string representation of the requested entry can be decoded
+      * with <code>Double.parseDouble()</code> then that double is returned,
+      * otherwise the given default double value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public double getDouble(String key, double defaultVal) {
+         String value = get(key, null);
+ 
+         if (value != null) {
+             try {
+                 return Double.parseDouble(value);
+             } catch (NumberFormatException nfe) { /* ignore */ }
+         }
+ 
+         return defaultVal;
+     }
+ 
+     /**
+      * Convenience method for getting the given entry as a float.
+      * When the string representation of the requested entry can be decoded
+      * with <code>Float.parseFloat()</code> then that float is returned,
+      * otherwise the given default float value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public float getFloat(String key, float defaultVal) {
+         String value = get(key, null);
+ 
+         if (value != null) {
+             try {
+                 return Float.parseFloat(value);
+             } catch (NumberFormatException nfe) { /* ignore */ }
+         }
+ 
+         return defaultVal;
+     }
+ 
+     /**
+      * Convenience method for getting the given entry as an integer.
+      * When the string representation of the requested entry can be decoded
+      * with <code>Integer.parseInt()</code> then that integer is returned,
+      * otherwise the given default integer value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public int getInt(String key, int defaultVal) {
+         String value = get(key, null);
+ 
+         if (value != null) {
+             try {
+                 return Integer.parseInt(value);
+             } catch (NumberFormatException nfe) { /* ignore */ }
+         }
+ 
+         return defaultVal;
+     }
+ 
+     /**
+      * Convenience method for getting the given entry as a long.
+      * When the string representation of the requested entry can be decoded
+      * with <code>Long.parseLong()</code> then that long is returned,
+      * otherwise the given default long value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public long getLong(String key, long defaultVal) {
+         String value = get(key, null);
+ 
+         if (value != null) {
+             try {
+                 return Long.parseLong(value);
+             } catch (NumberFormatException nfe) { /* ignore */ }
+         }
+ 
+         return defaultVal;
+     }
+ 
+     /**
+      * Sets the value of the given preferences entry for this node.
+      * Key and value cannot be null, the key cannot exceed 80 characters
+      * and the value cannot exceed 8192 characters.
+      * <p>
+      * The result will be immediatly visible in this VM, but may not be
+      * immediatly written to the backing store.
+      * <p>
+      * Checks that key and value are valid, locks this node, and checks that
+      * the node has not been removed. Then it calls <code>putSpi()</code>.
+      *
+      * @exception NullPointerException if either key or value are null
+      * @exception IllegalArgumentException if either key or value are to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public void put(String key, String value) {
+         if (key.length() > MAX_KEY_LENGTH
+             || value.length() > MAX_VALUE_LENGTH)
+             throw new IllegalArgumentException("key ("
+                                                + key.length() + ")"
+                                                + " or value ("
+                                                + value.length() + ")"
+                                                + " to large");
+         synchronized(lock) {
+             if (isRemoved())
+                 throw new IllegalStateException("Node removed");
+ 
+             putSpi(key, value);
+ 
+             // XXX - fire events
+         }
+             
+     }
+ 
+     /**
+      * Convenience method for setting the given entry as a boolean.
+      * The boolean is converted with <code>Boolean.toString(value)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public void putBoolean(String key, boolean value) {
+         put(key, String.valueOf(value));
+         // XXX - Use when using 1.4 compatible Boolean
+         // put(key, Boolean.toString(value));
+     }
+ 
+     /**
+      * Convenience method for setting the given entry as an array of bytes.
+      * The byte array is converted to a Base64 encoded string
+      * and then stored in the preference entry as that string.
+      * <p>
+      * Note that a byte array encoded as a Base64 string will be about 1.3
+      * times larger then the original length of the byte array, which means
+      * that the byte array may not be larger about 6 KB.
+      *
+      * @exception NullPointerException if either key or value are null
+      * @exception IllegalArgumentException if either key or value are to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public void putByteArray(String key, byte[] value) {
+         put(key, encode64(value));
+     }
+ 
+     /**
+      * Helper method for encoding an array of bytes as a Base64 String.
+      */
+     private static String encode64(byte[] b) {
+         StringBuffer sb = new StringBuffer((b.length/3)*4);
+ 
+         int i = 0;
+         int remaining = b.length;
+         char c[] = new char[4];
+         while (remaining > 0) {
+             // Three input bytes are encoded as four chars (6 bits) as
+             // 00000011 11112222 22333333
+ 
+             c[0] = (char) ((b[i] & 0xFC) >> 2);
+             c[1] = (char) ((b[i] & 0x03) << 4);
+             if (remaining >= 2) {
+                 c[1] += (char) ((b[i+1] & 0xF0) >> 4);
+                 c[2] = (char) ((b[i+1] & 0x0F) << 2);
+                 if (remaining >= 3) {
+                     c[2] += (char) ((b[i+2] & 0xC0) >> 6);
+                     c[3] = (char) (b[i+2] & 0x3F);
+                 } else {
+                     c[3] = 64;
+                 }
+             } else {
+                 c[2] = 64;
+                 c[3] = 64;
+             }
+ 
+             // Convert to base64 chars
+             for(int j = 0; j < 4; j++) {
+                 if (c[j] < 26) {
+                     c[j] += 'A';
+                 } else if (c[j] < 52) {
+                     c[j] = (char) (c[j] - 26 + 'a');
+                 } else if (c[j] < 62) {
+                     c[j] = (char) (c[j] - 52 + '0');
+                 } else if (c[j] == 62) {
+                     c[j] = '+';
+                 } else if (c[j] == 63) {
+                     c[j] = '/';
+                 } else {
+                     c[j] = '=';
+                 }
+             }
+ 
+             sb.append(c);
+             i += 3;
+             remaining -= 3;
+         }
+ 
+         return sb.toString();
+     }
+ 
+     /**
+      * Convenience method for setting the given entry as a double.
+      * The double is converted with <code>Double.toString(double)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public void putDouble(String key, double value) {
+         put(key, Double.toString(value));
+     }
+ 
+     /**
+      * Convenience method for setting the given entry as a float.
+      * The float is converted with <code>Float.toString(float)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public void putFloat(String key, float value) {
+         put(key, Float.toString(value));
+     }
+ 
+     /**
+      * Convenience method for setting the given entry as an integer.
+      * The integer is converted with <code>Integer.toString(int)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public void putInt(String key, int value) {
+         put(key, Integer.toString(value));
+     }
+ 
+     /**
+      * Convenience method for setting the given entry as a long.
+      * The long is converted with <code>Long.toString(long)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public void putLong(String key, long value) {
+         put(key, Long.toString(value));
+     }
+ 
+     /**
+      * Removes the preferences entry from this preferences node.
+      * <p>     
+      * The result will be immediatly visible in this VM, but may not be
+      * immediatly written to the backing store.
+      * <p>
+      * This implementation checks that the key is not larger then 80
+      * characters, gets the lock of this node, checks that the node has
+      * not been removed and calls <code>removeSpi</code> with the given key.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public void remove(String key) {
+         if (key.length() > MAX_KEY_LENGTH)
+             throw new IllegalArgumentException(key);
+ 
+         synchronized(lock) {
+             if (isRemoved())
+                 throw new IllegalStateException("Node removed");
+ 
+             removeSpi(key);
+         }
+     }
+ 
+     /**
+      * Removes all entries from this preferences node. May need access to the
+      * backing store to get and clear all entries.
+      * <p>
+      * The result will be immediatly visible in this VM, but may not be
+      * immediatly written to the backing store.
+      * <p>
+      * This implementation locks this node, checks that the node has not been
+      * removed and calls <code>keys()</code> to get a complete array of keys
+      * for this node. For every key found <code>removeSpi()</code> is called.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has been removed
+      */
+     public void clear() throws BackingStoreException {
+         synchronized(lock) {
+             if (isRemoved())
+                 throw new IllegalStateException("Node Removed");
+ 
+             String[] keys = keys();
+             for (int i = 0; i < keys.length; i++) {
+                 removeSpi(keys[i]);
+             }
+         }
+     }
+ 
+     /**
+      * Writes all preference changes on this and any subnode that have not
+      * yet been written to the backing store. This has no effect on the
+      * preference entries in this VM, but it makes sure that all changes
+      * are visible to other programs (other VMs might need to call the
+      * <code>sync()</code> method to actually see the changes to the backing
+      * store.
+      * <p>
+      * Locks this node, calls the <code>flushSpi()</code> method, gets all
+      * the (cached - already existing in this VM) subnodes and then calls
+      * <code>flushSpi()</code> on every subnode with this node unlocked and
+      * only that particular subnode locked.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      */
+     public void flush() throws BackingStoreException {
+         flushNode(false);
+     }
+ 
+     /**
+      * Writes and reads all preference changes to and from this and any
+      * subnodes. This makes sure that all local changes are written to the
+      * backing store and that all changes to the backing store are visible
+      * in this preference node (and all subnodes).
+      * <p>
+      * Checks that this node is not removed, locks this node, calls the
+      * <code>syncSpi()</code> method, gets all the subnodes and then calls
+      * <code>syncSpi()</code> on every subnode with this node unlocked and
+      * only that particular subnode locked.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has been removed
+      */
+     public void sync() throws BackingStoreException {
+         flushNode(true);
+     }
+     
+ 
+     /**
+      * Private helper method that locks this node and calls either
+      * <code>flushSpi()</code> if <code>sync</code> is false, or
+      * <code>flushSpi()</code> if <code>sync</code> is true. Then it gets all
+      * the currently cached subnodes. For every subnode it calls this method
+      * recursively with this node no longer locked.
+      * <p>
+      * Called by either <code>flush()</code> or <code>sync()</code>
+      */
+     private void flushNode(boolean sync) throws BackingStoreException {
+         String[] keys = null;
+         synchronized(lock) {
+             if (sync) {
+                 syncSpi();
+             } else {
+                 flushSpi();
+             }
+             keys = (String[]) childCache.keySet().toArray(new String[]{});
+         }
+ 
+         if (keys != null) {
+             for (int i = 0; i < keys.length; i++) {
+                 // Have to lock this node again to access the childCache
+                 AbstractPreferences subNode;
+                 synchronized(this) {
+                     subNode = (AbstractPreferences) childCache.get(keys[i]);
+                 }
+ 
+                 // The child could already have been removed from the cache
+                 if (subNode != null) {
+                     subNode.flushNode(sync);
+                 }
+             }
+         }
+     }
+ 
+     /**
+      * Removes this and all subnodes from the backing store and clears all
+      * entries. After removal this instance will not be useable (except for
+      * a few methods that don't throw a <code>InvalidStateException</code>),
+      * even when a new node with the same path name is created this instance
+      * will not be usable again.
+      * <p>
+      * Checks that this is not a root node. If not it locks the parent node,
+      * then locks this node and checks that the node has not yet been removed.
+      * Then it makes sure that all subnodes of this node are in the child cache,
+      * by calling <code>childSpi()</code> on any children not yet in the cache.
+      * Then for all children it locks the subnode and removes it. After all
+      * subnodes have been purged the child cache is cleared, this nodes removed
+      * flag is set and any listeners are called. Finally this node is removed
+      * from the child cache of the parent node.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has already been removed
+      * @exception UnsupportedOperationException if this is a root node
+      */
+     public void removeNode() throws BackingStoreException {
+         // Check if it is a root node
+         if (parent == null)
+             throw new UnsupportedOperationException("Cannot remove root node");
+ 
+         synchronized(parent) {
+             synchronized(this) {
+                 if (isRemoved())
+                     throw new IllegalStateException("Node Removed");
+ 
+                 purge();
+             }
+             parent.childCache.remove(name);
+         }
+     }
+ 
+     /**
+      * Private helper method used to completely remove this node.
+      * Called by <code>removeNode</code> with the parent node and this node
+      * locked.
+      * <p>
+      * Makes sure that all subnodes of this node are in the child cache,
+      * by calling <code>childSpi()</code> on any children not yet in the
+      * cache. Then for all children it locks the subnode and calls this method
+      * on that node. After all subnodes have been purged the child cache is
+      * cleared, this nodes removed flag is set and any listeners are called.
+      */
+     private void purge() throws BackingStoreException
+     {
+         // Make sure all children have an AbstractPreferences node in cache
+         String children[] = childrenNamesSpi();
+         for (int i = 0; i < children.length; i++) {
+             if (childCache.get(children[i]) == null)
+                 childCache.put(children[i], childSpi(children[i]));
+         }
+ 
+         // purge all children
+         Iterator i = childCache.values().iterator();
+         while (i.hasNext()) {
+             AbstractPreferences node = (AbstractPreferences) i.next();
+             synchronized(node) {
+                 node.purge();
+             }
+         }
+ 
+         // Cache is empty now
+         childCache.clear();
+ 
+         // remove this node
+         removeNodeSpi();
+         removed = true;
+ 
+         // XXX - check for listeners
+     }
+ 
+     // listener methods
+ 
+     /**
+      * XXX
+      */
+     public void addNodeChangeListener(NodeChangeListener listener) {
+         // XXX
+     }
+ 
+     public void addPreferenceChangeListener(PreferenceChangeListener listener) {
+         // XXX
+     }
+ 
+     public void removeNodeChangeListener(NodeChangeListener listener) {
+         // XXX
+     }
+ 
+     public void removePreferenceChangeListener
+                             (PreferenceChangeListener listener)
+     {
+         // XXX
+     }
+ 
+     // abstract spi methods
+ 
+     /**
+      * Returns the names of the sub nodes of this preference node.
+      * This method only has to return any not yet cached child names,
+      * but may return all names if that is easier. It must not return
+      * null when there are no children, it has to return an empty array
+      * in that case. Since this method must consult the backing store to
+      * get all the sub node names it may throw a BackingStoreException.
+      * <p>
+      * Called by <code>childrenNames()</code> with this node locked.
+      */
+     protected abstract String[] childrenNamesSpi() throws BackingStoreException;
+ 
+     /**
+      * Returns a child note with the given name.
+      * This method is called by the <code>node()</code> method (indirectly
+      * through the <code>getNode()</code> helper method) with this node locked
+      * if a sub node with this name does not already exist in the child cache.
+      * If the child node did not aleady exist in the backing store the boolean
+      * field <code>newNode</code> of the returned node should be set.
+      * <p>
+      * Note that this method should even return a non-null child node if the
+      * backing store is not available since it may not throw a
+      * <code>BackingStoreException</code>.
+      */
+     protected abstract AbstractPreferences childSpi(String name);
+ 
+     /**
+      * Returns an (possibly empty) array with all the keys of the preference
+      * entries of this node.
+      * <p>
+      * Called by <code>keys()</code> with this node locked if this node has
+      * not been removed. May throw an exception when the backing store cannot
+      * be accessed.
+      *
+      * @exception BackingStoreException when the backing store cannot be     
+      *            reached
+      */
+     protected abstract String[] keysSpi() throws BackingStoreException;
+      
+     /**
+      * Returns the value associated with the key in this preferences node or
+      * null when the key does not exist in this preferences node.
+      * <p>
+      * Called by <code>key()</code> with this node locked after checking that
+      * key is valid, not null and that the node has not been removed.
+      * <code>key()</code> will catch any exceptions that this method throws.
+      */
+     protected abstract String getSpi(String key);
+ 
+     /**
+      * Sets the value of the given preferences entry for this node.
+      * The implementation is not required to propagate the change to the
+      * backing store immediatly. It may not throw an exception when it tries
+      * to write to the backing store and that operation fails, the failure
+      * should be registered so a later invocation of <code>flush()</code>
+      * or <code>sync()</code> can signal the failure.
+      * <p>
+      * Called by <code>put()</code> with this node locked after checking that
+      * key and value are valid and non-null.
+      */
+     protected abstract void putSpi(String key, String value);
+ 
+     /**
+      * Removes the given key entry from this preferences node.
+      * The implementation is not required to propagate the change to the
+      * backing store immediatly.  It may not throw an exception when it tries
+      * to write to the backing store and that operation fails, the failure
+      * should be registered so a later invocation of <code>flush()</code>
+      * or <code>sync()</code> can signal the failure.
+      * <p>
+      * Called by <code>remove()</code> with this node locked after checking
+      * that the key is valid and non-null.
+      */
+     protected abstract void removeSpi(String key);
+ 
+     /**
+      * Writes all entries of this preferences node that have not yet been
+      * written to the backing store and possibly creates this node in the
+      * backing store, if it does not yet exist. Should only write changes to
+      * this node and not write changes to any subnodes.
+      * Note that the node can be already removed in this VM. To check if
+      * that is the case the implementation can call <code>isRemoved()</code>.
+      * <p>
+      * Called (indirectly) by <code>flush()</code> with this node locked.
+      */
+     protected abstract void flushSpi() throws BackingStoreException;
+ 
+     /**
+      * Writes all entries of this preferences node that have not yet been
+      * written to the backing store and reads any entries that have changed
+      * in the backing store but that are not yet visible in this VM.
+      * Should only sync this node and not change any of the subnodes.
+      * Note that the node can be already removed in this VM. To check if
+      * that is the case the implementation can call <code>isRemoved()</code>.
+      * <p>
+      * Called (indirectly) by <code>sync()</code> with this node locked.
+      */
+     protected abstract void syncSpi() throws BackingStoreException;
+ 
+     /**
+      * Clears this node from this VM and removes it from the backing store.
+      * After this method has been called the node is marked as removed.
+      * <p>
+      * Called (indirectly) by <code>removeNode()</code> with this node locked
+      * after all the sub nodes of this node have already been removed.
+      */
+     protected abstract void removeNodeSpi() throws BackingStoreException;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/BackingStoreException.java gcc-4.1.0/libjava/classpath/java/util/prefs/BackingStoreException.java
*** gcc-4.0.2/libjava/classpath/java/util/prefs/BackingStoreException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/BackingStoreException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,104 ----
+ /* BackingStoreException.java - chained exception thrown when backing store
+    fails
+    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.prefs;
+ 
+ import java.io.NotSerializableException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ 
+ /**
+  * Chained exception thrown when backing store fails. This exception is
+  * only thrown from methods that actually have to access the backing store,
+  * such as <code>clear(), keys(), childrenNames(), nodeExists(), removeNode(),
+  * flush(), sync(), exportNode(), exportSubTree()</code>; normal operations
+  * do not throw BackingStoreExceptions.
+  *
+  * <p>Note that although this class inherits the Serializable interface, an
+  * attempt to serialize will fail with a <code>NotSerializableException</code>.
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class BackingStoreException extends Exception
+ {
+   static final long serialVersionUID = 859796500401108469L;
+ 
+   /**
+    * Creates a new exception with a descriptive message.
+    *
+    * @param message the message
+    */
+   public BackingStoreException(String message)
+   {
+     super(message);
+   }
+ 
+   /**
+    * Create a new exception with the given cause.
+    *
+    * @param cause the cause
+    */
+   public BackingStoreException(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+   /**
+    * This class should not be serialized.
+    *
+    * @param o the output stream
+    */
+   private void writeObject(ObjectOutputStream o) throws NotSerializableException
+   {
+     throw new NotSerializableException
+       ("java.util.prefs.BackingStoreException");
+   }
+ 
+   /**
+    * This class should not be serialized.
+    *
+    * @param i the input stream
+    */
+   private void readObject(ObjectInputStream i) throws NotSerializableException
+   {
+     throw new NotSerializableException
+       ("java.util.prefs.BackingStoreException");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/InvalidPreferencesFormatException.java gcc-4.1.0/libjava/classpath/java/util/prefs/InvalidPreferencesFormatException.java
*** gcc-4.0.2/libjava/classpath/java/util/prefs/InvalidPreferencesFormatException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/InvalidPreferencesFormatException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,116 ----
+ /* InvalidPreferencesFormatException - indicates reading prefs from stream
+    failed
+    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.prefs;
+ 
+ import java.io.NotSerializableException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ 
+ /**
+  * Indicates reading prefs from stream failed. Thrown by the
+  * <code>importPreferences()</code> method when the supplied input stream
+  * could not be read because it was not in the correct XML format.
+  *
+  * <p>Note that although this class inherits the Serializable interface, an
+  * attempt to serialize will fail with a <code>NotSerializableException</code>.
+  * </p>
+  *
+  * @author Mark Wielaard (mark@klomp.org)
+  * @see Preferences
+  * @since 1.4
+  * @status updated to 1.4
+  */
+ public class InvalidPreferencesFormatException extends Exception
+ {
+   static final long serialVersionUID = -791715184232119669L;
+ 
+   /**
+    * Creates a new exception with a descriptive message. The cause remains
+    * uninitialized.
+    *
+    * @param message the message
+    */
+   public InvalidPreferencesFormatException(String message)
+   {
+     super(message);
+   }
+ 
+   /**
+    * Creates a new exception with the given cause.
+    *
+    * @param cause the cause
+    */
+   public InvalidPreferencesFormatException(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+   /**
+    * Creates a new exception with a descriptive message and a cause.
+    *
+    * @param message the message
+    * @param cause the cause
+    */
+   public InvalidPreferencesFormatException(String message, Throwable cause)
+   {
+     super(message, cause);
+   }
+ 
+   /**
+    * This class should not be serialized.
+    *
+    * @param o the output stream
+    */
+   private void writeObject(ObjectOutputStream o) throws NotSerializableException
+   {
+     throw new NotSerializableException
+       ("java.util.prefs.InvalidPreferencesFormatException");
+   }
+ 
+   /**
+    * This class should not be serialized.
+    *
+    * @param i the input stream
+    */
+   private void readObject(ObjectInputStream i) throws NotSerializableException
+   {
+     throw new NotSerializableException
+       ("java.util.prefs.InvalidPreferencesFormatException");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/NodeChangeEvent.java gcc-4.1.0/libjava/classpath/java/util/prefs/NodeChangeEvent.java
*** gcc-4.0.2/libjava/classpath/java/util/prefs/NodeChangeEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/NodeChangeEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,91 ----
+ /* NodeChangeEvent - ObjectEvent fired when a Preference node is added/removed
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.prefs;
+ 
+ import java.util.EventObject;
+ 
+ /**
+  * ObjectEvent fired when a Preference node is added/removed.
+  * This event is only generated when a new subnode is added or a subnode is
+  * removed from a preference node. Changes in the entries of a preference node
+  * are indicated with a <code>PreferenceChangeEvent</code>.
+  *
+  * @since 1.4
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class NodeChangeEvent extends EventObject {
+ 
+   private static final long serialVersionUID =8068949086596572957L; 
+   
+     /**
+      * The sub node that was added or removed.
+      * Defined transient just like <code>EventObject.source</code> since
+      * this object should be serializable, but Preferences is in general not
+      * serializable.
+      */
+     private final transient Preferences child;
+ 
+     /**
+      * Creates a new NodeChangeEvent.
+      *
+      * @param parentNode The source preference node from which a subnode was
+      * added or removed
+      * @param childNode The preference node that was added or removed
+      */
+     public NodeChangeEvent(Preferences parentNode, Preferences childNode) {
+         super(parentNode);
+         child = childNode;
+     }
+ 
+     /**
+      * Returns the source parent preference node from which a subnode was
+      * added or removed.
+      */
+     public Preferences getParent() {
+         return (Preferences) source;
+     }
+ 
+     /**
+      * Returns the child preference subnode that was added or removed.
+      * To see wether it is still a valid preference node one has to call
+      * <code>event.getChild().nodeExists("")</code>.
+      */
+     public Preferences getChild() {
+         return child;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/NodeChangeListener.java gcc-4.1.0/libjava/classpath/java/util/prefs/NodeChangeListener.java
*** gcc-4.0.2/libjava/classpath/java/util/prefs/NodeChangeListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/NodeChangeListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,64 ----
+ /* NodeChangeListener - EventListener for Preferences node addition/removal
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.prefs;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * EventListener for Preferences node addition/removal.
+  * <p>
+  * Note that these events are only generated for the addition and removal
+  * of sub nodes from the preference node. Entry changes in the preference
+  * node can be monitored with a <code>PreferenceChangeListener</code>.
+  *
+  * @since 1.4
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public interface NodeChangeListener extends EventListener {
+ 
+     /**
+      * Fired when a sub node is added to the preference node.
+      */
+     void childAdded(NodeChangeEvent event);
+ 
+     /**
+      * Fired when a sub node is removed from the preference node.
+      */
+     void childRemoved(NodeChangeEvent event);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/PreferenceChangeEvent.java gcc-4.1.0/libjava/classpath/java/util/prefs/PreferenceChangeEvent.java
*** gcc-4.0.2/libjava/classpath/java/util/prefs/PreferenceChangeEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/PreferenceChangeEvent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,105 ----
+ /* PreferenceChangeEvent - ObjectEvent fired when a Preferences entry changes
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.prefs;
+ 
+ import java.util.EventObject;
+ 
+ /**
+  * ObjectEvent fired when a Preferences entry changes.
+  * This event is generated when a entry is added, changed or removed.
+  * When an entry is removed then <code>getNewValue</code> will return null.
+  * <p>
+  * Preference change events are only generated for entries in one particular
+  * preference node. Notification of subnode addition/removal is given by a
+  * <code>NodeChangeEvent</code>.
+  *
+  * @since 1.4
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public class PreferenceChangeEvent extends EventObject {
+ 
+   private static final long serialVersionUID = 793724513368024975L;
+   
+     /**
+      * The key of the changed entry.
+      */
+     private final String key;
+ 
+     /**
+      * The new value of the changed entry, or null when the entry was removed.
+      */
+     private final String newValue;
+ 
+     /**
+      * Creates a new PreferenceChangeEvent.
+      *
+      * @param node The source preference node for which an entry was added,
+      * changed or removed
+      * @param key The key of the entry that was added, changed or removed
+      * @param value The new value of the entry that was added or changed, or
+      * null when the entry was removed
+      */
+     public PreferenceChangeEvent(Preferences node, String key, String value) {
+         super(node);
+         this.key = key;
+         this.newValue = value;
+     }
+ 
+     /**
+      * Returns the source Preference node from which an entry was added,
+      * changed or removed.
+      */
+     public Preferences getNode() {
+         return (Preferences) source;
+     }
+ 
+     /**
+      * Returns the key of the entry that was added, changed or removed.
+      */
+     public String getKey() {
+         return key;
+     }
+ 
+     /**
+      * Returns the new value of the entry that was added or changed, or
+      * returns null when the entry was removed.
+      */
+     public String getNewValue() {
+         return newValue;
+     }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/PreferenceChangeListener.java gcc-4.1.0/libjava/classpath/java/util/prefs/PreferenceChangeListener.java
*** gcc-4.0.2/libjava/classpath/java/util/prefs/PreferenceChangeListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/PreferenceChangeListener.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,60 ----
+ /* PreferenceChangeListener - EventListener for Preferences entry changes
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.prefs;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * EventListener for Preferences entry addition, change or removal.
+  * <p>
+  * Preference change events are only generated for entries in one particular
+  * preference node. Notification of subnode addition/removal can be monitored
+  * with a <code>NodeChangeListener</code>.
+  *
+  * @since 1.4
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public interface PreferenceChangeListener extends EventListener {
+ 
+     /**
+      * Fired when a entry has been added, changed or removed from the
+      * preference node.
+      */
+     void preferenceChange(PreferenceChangeEvent event);
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/Preferences.java gcc-4.1.0/libjava/classpath/java/util/prefs/Preferences.java
*** gcc-4.0.2/libjava/classpath/java/util/prefs/Preferences.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/Preferences.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,668 ----
+ /* Preferences -- Preference node containing key value entries and subnodes
+    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.prefs;
+ 
+ import gnu.java.util.prefs.NodeReader;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.security.AccessController;
+ import java.security.Permission;
+ import java.security.PrivilegedAction;
+ 
+ /**
+  * Preference node containing key value entries and subnodes.
+  * <p>
+  * There are two preference node trees, a system tree which can be accessed
+  * by calling <code>systemRoot()</code> containing system preferences usefull
+  * for all users, and a user tree that can be accessed by calling
+  * <code>userRoot()</code> containing preferences that can differ between
+  * different users. How different users are identified is implementation
+  * depended. It can be determined by Thread, Access Control Context or Subject.
+  * <p>
+  * This implementation uses the "java.util.prefs.PreferencesFactory" system
+  * property to find a class that implement <code>PreferencesFactory</code>
+  * and initialized that class (if it has a public no arguments contructor)
+  * to get at the actual system or user root. If the system property is not set,
+  * or the class cannot be initialized it uses the default implementation
+  * <code>gnu.java.util.prefs.FileBasedFactory</code>.
+  * <p>
+  * Besides the two static method above to get the roots of the system and user
+  * preference node trees there are also two convenience methods to access the
+  * default preference node for a particular package an object is in. These are
+  * <code>userNodeForPackage()</code> and <code>systemNodeForPackage()</code>.
+  * Both methods take an Object as an argument so accessing preferences values
+  * can be as easy as calling <code>Preferences.userNodeForPackage(this)</code>.
+  * <p>
+  * Note that if a security manager is installed all static methods check for
+  * <code>RuntimePermission("preferences")</code>. But if this permission is
+  * given to the code then it can access and change all (user) preference nodes
+  * and entries. So you should be carefull not to store to sensitive information
+  * or make security decissions based on preference values since there is no
+  * more fine grained control over what preference values can be changed once
+  * code has been given the correct runtime permission.
+  * <p>
+  * XXX
+  *
+  * @since 1.4
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public abstract class Preferences {
+ 
+     // Static Fields
+ 
+     /**
+      * Default PreferencesFactory class used when the system property
+      * "java.util.prefs.PreferencesFactory" is not set.
+ 	 * <p>
+ 	 * XXX - Currently set to MemoryBasedFactory, should be changed
+ 	 * when FileBasedPreferences backend works.
+      */
+     private static final String defaultFactoryClass
+         = "gnu.java.util.prefs.MemoryBasedFactory";
+ 
+     /** Permission needed to access system or user root. */
+     private static final Permission prefsPermission
+         = new RuntimePermission("preferences");
+ 
+     /**
+      * The preferences factory object that supplies the system and user root.
+      * Set and returned by the getFactory() method.
+      */
+     private static PreferencesFactory factory;
+ 
+     /** Maximum node name length. 80 characters. */
+     public static final int MAX_NAME_LENGTH = 80;
+ 
+     /** Maximum entry key length. 80 characters. */
+     public static final int MAX_KEY_LENGTH = 80;
+ 
+     /** Maximum entry value length. 8192 characters. */
+     public static final int MAX_VALUE_LENGTH = 8192;
+ 
+     // Constructors
+ 
+     /**
+      * Creates a new Preferences node. Can only be used by subclasses.
+      * Empty implementation.
+      */
+     protected Preferences() {}
+ 
+     // Static methods
+ 
+     /**
+      * Returns the system preferences root node containing usefull preferences
+      * for all users. It is save to cache this value since it should always
+      * return the same preference node.
+      *
+      * @return the root system preference node
+      * @exception SecurityException when a security manager is installed and
+      * the caller does not have <code>RuntimePermission("preferences")</code>.
+      */
+     public static Preferences systemRoot() throws SecurityException {
+         // Get the preferences factory and check for permission
+         PreferencesFactory factory = getFactory();
+ 
+         return factory.systemRoot();
+     }
+ 
+     /**
+      * Returns the user preferences root node containing preferences for the
+      * the current user. How different users are identified is implementation
+      * depended. It can be determined by Thread, Access Control Context or
+      * Subject.
+      *
+      * @return the root user preference node
+      * @exception SecurityException when a security manager is installed and
+      * the caller does not have <code>RuntimePermission("preferences")</code>.
+      */
+     public static Preferences userRoot() throws SecurityException {
+         // Get the preferences factory and check for permission
+         PreferencesFactory factory = getFactory();
+         return factory.userRoot();
+     }
+ 
+     /**
+      * Private helper method for <code>systemRoot()</code> and
+      * <code>userRoot()</code>. Checks security permission and instantiates the
+      * correct factory if it has not yet been set.
+      * <p>
+      * When the preferences factory has not yet been set this method first
+      * tries to get the system propery "java.util.prefs.PreferencesFactory"
+      * and tries to initializes that class. If the system property is not set
+      * or initialization fails it returns an instance of the default factory
+      * <code>gnu.java.util.prefs.FileBasedPreferencesFactory</code>.
+      *
+      * @return the preferences factory to use
+      * @exception SecurityException when a security manager is installed and
+      * the caller does not have <code>RuntimePermission("preferences")</code>.
+      */
+     private static PreferencesFactory getFactory() throws SecurityException {
+ 
+         // First check for permission
+         SecurityManager sm = System.getSecurityManager();
+         if (sm != null) {
+             sm.checkPermission(prefsPermission);
+         }
+ 
+         // Get the factory
+         if (factory == null) {
+             // Caller might not have enough permissions
+             factory = (PreferencesFactory) AccessController.doPrivileged(
+                         new PrivilegedAction() {
+                             public Object run() {
+                                 PreferencesFactory pf = null;
+                                 String className = System.getProperty
+                                     ("java.util.prefs.PreferencesFactory");
+                                 if (className != null) {
+                                     try {
+                                         Class fc = Class.forName(className);
+                                         Object o = fc.newInstance();
+                                         pf = (PreferencesFactory) o;
+                                     } catch (ClassNotFoundException cnfe)
+                                         {/*ignore*/}
+                                     catch (InstantiationException ie)
+                                         {/*ignore*/}
+                                     catch (IllegalAccessException iae)
+                                         {/*ignore*/}
+                                     catch (ClassCastException cce)
+                                         {/*ignore*/}
+                                 }
+                                 return pf;
+                             }
+                         });
+ 
+             // Still no factory? Use our default.
+             if (factory == null)
+ 	      {
+                 try
+ 		  {
+                     Class cls = Class.forName (defaultFactoryClass);
+                     factory = (PreferencesFactory) cls.newInstance();
+                   }
+ 		catch (Exception e)
+ 		  {
+                     throw new RuntimeException ("Couldn't load default factory"
+                         + " '"+ defaultFactoryClass +"'");
+                     // XXX - when using 1.4 compatible throwables add cause
+                   }
+               }
+ 
+         }
+ 	
+         return factory;
+     }
+ 
+     /**
+      * Returns the system preferences node for the package of a class.
+      * The package node name of the class is determined by dropping the
+      * final component of the fully qualified class name and
+      * changing all '.' to '/' in the package name. If the class of the
+      * object has no package then the package node name is "&lt;unnamed&gt;".
+      * The returned node is <code>systemRoot().node(packageNodeName)</code>.
+      *
+      * @param c Object whose default system preference node is requested
+      * @returns system preferences node that should be used by class c
+      * @exception SecurityException when a security manager is installed and
+      * the caller does not have <code>RuntimePermission("preferences")</code>.
+      */
+     public static Preferences systemNodeForPackage(Class c)
+             throws SecurityException
+     {
+         return nodeForPackage(c, systemRoot());
+     }
+ 
+     /**
+      * Returns the user preferences node for the package of a class.
+      * The package node name of the class is determined by dropping the
+      * final component of the fully qualified class name and
+      * changing all '.' to '/' in the package name. If the class of the
+      * object has no package then the package node name is "&lt;unnamed&gt;".
+      * The returned node is <code>userRoot().node(packageNodeName)</code>.
+      *
+      * @param c Object whose default userpreference node is requested
+      * @returns userpreferences node that should be used by class c
+      * @exception SecurityException when a security manager is installed and
+      * the caller does not have <code>RuntimePermission("preferences")</code>.
+      */
+     public static Preferences userNodeForPackage(Class c)
+             throws SecurityException
+     {
+         return nodeForPackage(c, userRoot());
+     }
+ 
+     /**
+      * Private helper method for <code>systemNodeForPackage()</code> and
+      * <code>userNodeForPackage()</code>. Given the correct system or user
+      * root it returns the correct Preference node for the package node name
+      * of the given object.
+      */
+     private static Preferences nodeForPackage(Class c, Preferences root) {
+         // Get the package path
+         String className = c.getName();
+         String packagePath;
+         int index = className.lastIndexOf('.');
+         if(index == -1) {
+             packagePath = "<unnamed>";
+         } else {
+             packagePath = className.substring(0,index).replace('.','/');
+         }
+ 
+         return root.node(packagePath);
+     }
+ 
+     /**
+      * XXX
+      */
+     public static void importPreferences(InputStream is) 
+                                     throws InvalidPreferencesFormatException,
+                                            IOException
+     {
+         PreferencesFactory factory = getFactory();
+         NodeReader reader = new NodeReader(is, factory);
+         reader.importPreferences();
+     }
+ 
+     // abstract methods (identification)
+ 
+     /**
+      * Returns the absolute path name of this preference node.
+      * The absolute path name of a node is the path name of its parent node 
+      * plus a '/' plus its own name. If the node is the root node and has no
+      * parent then its name is "" and its absolute path name is "/".
+      */
+     public abstract String absolutePath();
+ 
+     /**
+      * Returns true if this node comes from the user preferences tree, false
+      * if it comes from the system preferences tree.
+      */
+     public abstract boolean isUserNode();
+ 
+     /**
+      * Returns the name of this preferences node. The name of the node cannot
+      * be null, can be mostly 80 characters and cannot contain any '/'
+      * characters. The root node has as name "".
+      */
+     public abstract String name();
+ 
+     /**
+      * Returns the String given by
+      * <code>
+      * (isUserNode() ? "User":"System") + " Preference Node: " + absolutePath()
+      * </code>
+      */
+     public abstract String toString();
+ 
+     // abstract methods (navigation)
+ 
+     /**
+      * Returns all the direct sub nodes of this preferences node.
+      * Needs access to the backing store to give a meaningfull answer.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException when this node has been removed
+      */
+     public abstract String[] childrenNames() throws BackingStoreException;
+ 
+     /**
+      * Returns a sub node of this preferences node if the given path is
+      * relative (does not start with a '/') or a sub node of the root
+      * if the path is absolute (does start with a '/').
+      *
+      * @exception IllegalStateException if this node has been removed
+      * @exception IllegalArgumentException if the path contains two or more
+      * consecutive '/' characters, ends with a '/' charactor and is not the
+      * string "/" (indicating the root node) or any name on the path is more
+      * then 80 characters long
+      */
+     public abstract Preferences node(String path);
+ 
+     /**
+      * Returns true if the node that the path points to exists in memory or
+      * in the backing store. Otherwise it returns false or an exception is
+      * thrown. When this node is removed the only valid parameter is the
+      * empty string (indicating this node), the return value in that case
+      * will be false.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has been removed
+      *            and the path is not the empty string (indicating this node)
+      * @exception IllegalArgumentException if the path contains two or more
+      * consecutive '/' characters, ends with a '/' charactor and is not the
+      * string "/" (indicating the root node) or any name on the path is more
+      * then 80 characters long
+      */
+     public abstract boolean nodeExists(String path)
+                                 throws BackingStoreException;
+ 
+     /**
+      * Returns the parent preferences node of this node or null if this is
+      * the root of the preferences tree.
+      *
+      * @exception IllegalStateException if this node has been removed
+      */
+     public abstract Preferences parent();
+ 
+     // abstract methods (export)
+ 
+     /**
+      * XXX
+      */
+     public abstract void exportNode(OutputStream os)
+                                 throws BackingStoreException,
+                                        IOException;
+ 
+     /**
+      * XXX
+      */
+     public abstract void exportSubtree(OutputStream os)
+                                 throws BackingStoreException,
+                                        IOException;
+ 
+     // abstract methods (preference entry manipulation)
+ 
+     /**
+      * Returns an (possibly empty) array with all the keys of the preference
+      * entries of this node.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has been removed
+      */
+     public abstract String[] keys() throws BackingStoreException;
+ 
+     /**
+      * Returns the value associated with the key in this preferences node. If
+      * the default value of the key cannot be found in the preferences node
+      * entries or something goes wrong with the backing store the supplied
+      * default value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public abstract String get(String key, String defaultVal);
+ 
+     /**
+      * Convenience method for getting the given entry as a boolean.
+      * When the string representation of the requested entry is either
+      * "true" or "false" (ignoring case) then that value is returned,
+      * otherwise the given default boolean value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public abstract boolean getBoolean(String key, boolean defaultVal);
+ 
+     /**
+      * Convenience method for getting the given entry as a byte array.
+      * When the string representation of the requested entry is a valid
+      * Base64 encoded string (without any other characters, such as newlines)
+      * then the decoded Base64 string is returned as byte array,
+      * otherwise the given default byte array value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public abstract byte[] getByteArray(String key, byte[] defaultVal);
+ 
+     /**
+      * Convenience method for getting the given entry as a double.
+      * When the string representation of the requested entry can be decoded
+      * with <code>Double.parseDouble()</code> then that double is returned,
+      * otherwise the given default double value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public abstract double getDouble(String key, double defaultVal);
+ 
+     /**
+      * Convenience method for getting the given entry as a float.
+      * When the string representation of the requested entry can be decoded
+      * with <code>Float.parseFloat()</code> then that float is returned,
+      * otherwise the given default float value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public abstract float getFloat(String key, float defaultVal);
+ 
+     /**
+      * Convenience method for getting the given entry as an integer.
+      * When the string representation of the requested entry can be decoded
+      * with <code>Integer.parseInt()</code> then that integer is returned,
+      * otherwise the given default integer value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public abstract int getInt(String key, int defaultVal);
+ 
+     /**
+      * Convenience method for getting the given entry as a long.
+      * When the string representation of the requested entry can be decoded
+      * with <code>Long.parseLong()</code> then that long is returned,
+      * otherwise the given default long value is returned.
+      *
+      * @exception IllegalArgumentException if key is larger then 80 characters
+      * @exception IllegalStateException if this node has been removed
+      * @exception NullPointerException if key is null
+      */
+     public abstract long getLong(String key, long defaultVal);
+ 
+     /**
+      * Sets the value of the given preferences entry for this node.
+      * Key and value cannot be null, the key cannot exceed 80 characters
+      * and the value cannot exceed 8192 characters.
+      * <p>
+      * The result will be immediatly visible in this VM, but may not be
+      * immediatly written to the backing store.
+      *
+      * @exception NullPointerException if either key or value are null
+      * @exception IllegalArgumentException if either key or value are to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public abstract void put(String key, String value);
+ 
+     /**
+      * Convenience method for setting the given entry as a boolean.
+      * The boolean is converted with <code>Boolean.toString(value)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public abstract void putBoolean(String key, boolean value);
+ 
+     /**
+      * Convenience method for setting the given entry as an array of bytes.
+      * The byte array is converted to a Base64 encoded string
+      * and then stored in the preference entry as that string.
+      * <p>
+      * Note that a byte array encoded as a Base64 string will be about 1.3
+      * times larger then the original length of the byte array, which means
+      * that the byte array may not be larger about 6 KB.
+      *
+      * @exception NullPointerException if either key or value are null
+      * @exception IllegalArgumentException if either key or value are to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public abstract void putByteArray(String key, byte[] value);
+ 
+     /**
+      * Convenience method for setting the given entry as a double.
+      * The double is converted with <code>Double.toString(double)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public abstract void putDouble(String key, double value);
+ 
+     /**
+      * Convenience method for setting the given entry as a float.
+      * The float is converted with <code>Float.toString(float)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public abstract void putFloat(String key, float value);
+ 
+     /**
+      * Convenience method for setting the given entry as an integer.
+      * The integer is converted with <code>Integer.toString(int)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public abstract void putInt(String key, int value);
+ 
+     /**
+      * Convenience method for setting the given entry as a long.
+      * The long is converted with <code>Long.toString(long)</code>
+      * and then stored in the preference entry as that string.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public abstract void putLong(String key, long value);
+ 
+     /**
+      * Removes the preferences entry from this preferences node.
+      * <p>
+      * The result will be immediatly visible in this VM, but may not be
+      * immediatly written to the backing store.
+      *
+      * @exception NullPointerException if the key is null
+      * @exception IllegalArgumentException if the key length is to large
+      * @exception IllegalStateException when this node has been removed
+      */
+     public abstract void remove(String key);
+ 
+     // abstract methods (preference node manipulation)
+ 
+     /**
+      * Removes all entries from this preferences node. May need access to the
+      * backing store to get and clear all entries.
+      * <p>
+      * The result will be immediatly visible in this VM, but may not be
+      * immediatly written to the backing store.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has been removed
+      */
+     public abstract void clear() throws BackingStoreException;
+ 
+     /**
+      * Writes all preference changes on this and any subnode that have not
+      * yet been written to the backing store. This has no effect on the
+      * preference entries in this VM, but it makes sure that all changes
+      * are visible to other programs (other VMs might need to call the
+      * <code>sync()</code> method to actually see the changes to the backing
+      * store.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has been removed
+      */
+     public abstract void flush() throws BackingStoreException;
+ 
+     /**
+      * Writes and reads all preference changes to and from this and any
+      * subnodes. This makes sure that all local changes are written to the
+      * backing store and that all changes to the backing store are visible
+      * in this preference node (and all subnodes).
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has been removed
+      */
+     public abstract void sync() throws BackingStoreException;
+ 
+     /**
+      * Removes this and all subnodes from the backing store and clears all
+      * entries. After removal this instance will not be useable (except for
+      * a few methods that don't throw a <code>InvalidStateException</code>),
+      * even when a new node with the same path name is created this instance
+      * will not be usable again. The root (system or user) may never be removed.
+      * <p>
+      * Note that according to the specification an implementation may delay
+      * removal of the node from the backing store till the <code>flush()</code>
+      * method is called. But the <code>flush()</code> method may throw a 
+      * <code>IllegalStateException</code> when the node has been removed.
+      * So most implementations will actually remove the node and any subnodes
+      * from the backing store immediatly.
+      *
+      * @exception BackingStoreException when the backing store cannot be
+      *            reached
+      * @exception IllegalStateException if this node has already been removed
+      * @exception UnsupportedOperationException if this is a root node
+      */
+     public abstract void removeNode() throws BackingStoreException;
+ 
+     // abstract methods (listeners)
+ 
+     public abstract void addNodeChangeListener(NodeChangeListener listener);
+ 
+     public abstract void addPreferenceChangeListener
+                             (PreferenceChangeListener listener);
+ 
+     public abstract void removeNodeChangeListener(NodeChangeListener listener);
+ 
+     public abstract void removePreferenceChangeListener
+                             (PreferenceChangeListener listener);
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/PreferencesFactory.java gcc-4.1.0/libjava/classpath/java/util/prefs/PreferencesFactory.java
*** gcc-4.0.2/libjava/classpath/java/util/prefs/PreferencesFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/PreferencesFactory.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,65 ----
+ /* PreferencesFactory - Preferences system and user root factory interface
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.prefs;
+ 
+ /**
+  * Preferences system and user root factory interface. Defines how to get
+  * to the system and user root preferences objects. Should be implemented by
+  * new preferences backends.
+  *
+  * @since 1.4
+  * @author Mark Wielaard (mark@klomp.org)
+  */
+ public interface PreferencesFactory {
+ 
+     /**
+      * Returns the system root preferences node. Should always return the
+      * same object.
+      */
+     Preferences systemRoot();
+ 
+     /**
+      * Returns the user root preferences node. May return different objects
+      * depending on the user that called this method. The user may for example
+      * be determined by the current Thread or the Subject associated with the
+      * current AccessControllContext.
+      */
+     Preferences userRoot();
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/prefs/package.html gcc-4.1.0/libjava/classpath/java/util/prefs/package.html
*** gcc-4.0.2/libjava/classpath/java/util/prefs/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/prefs/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.util.prefs package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.util.prefs</title></head>
+ 
+ <body>
+ <p>Utility classes for storing and retrieving user and system preferences.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/regex/MatchResult.java gcc-4.1.0/libjava/classpath/java/util/regex/MatchResult.java
*** gcc-4.0.2/libjava/classpath/java/util/regex/MatchResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/regex/MatchResult.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,81 ----
+ /* MatchResult.java -- Result of a regular expression match.
+    Copyright (C) 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.regex;
+ 
+ /**
+  * This interface represents the result of a regular expression match.
+  * It can be used to query the contents of the match, but not to modify
+  * them.
+  * @since 1.5
+  */
+ public interface MatchResult
+ {
+   /** Returns the index just after the last matched character.  */
+   int end();
+   
+   /**
+    * Returns the index just after the last matched character of the
+    * given sub-match group.
+    * @param group the sub-match group
+    */ 
+   int end(int group);
+ 
+   /** Returns the substring of the input which was matched.  */
+   String group();
+   
+   /** 
+    * Returns the substring of the input which was matched by the
+    * given sub-match group.
+    * @param group the sub-match group
+    */
+   String group(int group);
+ 
+   /** Returns the number of sub-match groups in the matching pattern.  */  
+   int groupCount();
+ 
+   /** Returns the index of the first character of the match.  */
+   int start();
+ 
+   /**
+    * Returns the index of the first character of the given sub-match
+    * group.
+    * @param group the sub-match group
+    */
+   int start(int group);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/regex/Matcher.java gcc-4.1.0/libjava/classpath/java/util/regex/Matcher.java
*** gcc-4.0.2/libjava/classpath/java/util/regex/Matcher.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/regex/Matcher.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,307 ----
+ /* Matcher.java -- Instance of a regular expression applied to a char sequence.
+    Copyright (C) 2002, 2004, 2006 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.regex;
+ 
+ import gnu.regexp.RE;
+ import gnu.regexp.REMatch;
+ 
+ /**
+  * Instance of a regular expression applied to a char sequence.
+  *
+  * @since 1.4
+  */
+ public final class Matcher implements MatchResult
+ {
+   private Pattern pattern;
+   private CharSequence input;
+   private int position;
+   private int appendPosition;
+   private REMatch match;
+ 
+   Matcher(Pattern pattern, CharSequence input)
+   {
+     this.pattern = pattern;
+     this.input = input;
+   }
+   
+   /**
+    * @param sb The target string buffer
+    * @param replacement The replacement string
+    *
+    * @exception IllegalStateException If no match has yet been attempted,
+    * or if the previous match operation failed
+    * @exception IndexOutOfBoundsException If the replacement string refers
+    * to a capturing group that does not exist in the pattern
+    */
+   public Matcher appendReplacement (StringBuffer sb, String replacement)
+     throws IllegalStateException
+   {
+     assertMatchOp();
+     sb.append(input.subSequence(appendPosition,
+ 				match.getStartIndex()).toString());
+     sb.append(match.substituteInto(replacement));
+     appendPosition = match.getEndIndex();
+     return this;
+   }
+ 
+   /**
+    * @param sb The target string buffer
+    */
+   public StringBuffer appendTail (StringBuffer sb)
+   {
+     sb.append(input.subSequence(appendPosition, input.length()).toString());
+     return sb;
+   }
+  
+   /**
+    * @exception IllegalStateException If no match has yet been attempted,
+    * or if the previous match operation failed
+    */
+   public int end ()
+     throws IllegalStateException
+   {
+     assertMatchOp();
+     return match.getEndIndex();
+   }
+   
+   /**
+    * @param group The index of a capturing group in this matcher's pattern
+    *
+    * @exception IllegalStateException If no match has yet been attempted,
+    * or if the previous match operation failed
+    * @exception IndexOutOfBoundsException If the replacement string refers
+    * to a capturing group that does not exist in the pattern
+    */
+   public int end (int group)
+     throws IllegalStateException
+   {
+     assertMatchOp();
+     return match.getEndIndex(group);
+   }
+  
+   public boolean find ()
+   {
+     boolean first = (match == null);
+     match = pattern.getRE().getMatch(input, position);
+     if (match != null)
+       {
+ 	int endIndex = match.getEndIndex();
+ 	// Are we stuck at the same position?
+ 	if (!first && endIndex == position)
+ 	  {
+ 	    match = null;
+ 	    // Not at the end of the input yet?
+ 	    if (position < input.length() - 1)
+ 	      {
+ 		position++;
+ 		return find(position);
+ 	      }
+ 	    else
+ 	      return false;
+ 	  }
+ 	position = endIndex;
+ 	return true;
+       }
+     return false;
+   } 
+ 
+   /**
+    * @param start The index to start the new pattern matching
+    *
+    * @exception IndexOutOfBoundsException If the replacement string refers
+    * to a capturing group that does not exist in the pattern
+    */
+   public boolean find (int start)
+   {
+     match = pattern.getRE().getMatch(input, start);
+     if (match != null)
+       {
+ 	position = match.getEndIndex();
+ 	return true;
+       }
+     return false;
+   }
+  
+   /**
+    * @exception IllegalStateException If no match has yet been attempted,
+    * or if the previous match operation failed
+    */
+   public String group ()
+   {
+     assertMatchOp();
+     return match.toString();
+   }
+   
+   /**
+    * @param group The index of a capturing group in this matcher's pattern
+    *
+    * @exception IllegalStateException If no match has yet been attempted,
+    * or if the previous match operation failed
+    * @exception IndexOutOfBoundsException If the replacement string refers
+    * to a capturing group that does not exist in the pattern
+    */
+   public String group (int group)
+     throws IllegalStateException
+   {
+     assertMatchOp();
+     return match.toString(group);
+   }
+ 
+   /**
+    * @param replacement The replacement string
+    */
+   public String replaceFirst (String replacement)
+   {
+     reset();
+     // Semantics might not quite match
+     return pattern.getRE().substitute(input, replacement, position);
+   }
+ 
+   /**
+    * @param replacement The replacement string
+    */
+   public String replaceAll (String replacement)
+   {
+     reset();
+     return pattern.getRE().substituteAll(input, replacement, position);
+   }
+   
+   public int groupCount ()
+   {
+     return pattern.getRE().getNumSubs();
+   }
+  
+   public boolean lookingAt ()
+   {
+     match = pattern.getRE().getMatch(input, 0);
+     if (match != null)
+       {
+ 	if (match.getStartIndex() == 0)
+ 	  {
+ 	    position = match.getEndIndex();
+ 	    return true;
+ 	  }
+ 	match = null;
+       }
+     return false;
+   }
+   
+   /**
+    * Attempts to match the entire input sequence against the pattern. 
+    *
+    * If the match succeeds then more information can be obtained via the
+    * start, end, and group methods.
+    *
+    * @see #start()
+    * @see #end()
+    * @see #group()
+    */
+   public boolean matches ()
+   {
+     match = pattern.getRE().getMatch(input, 0, RE.REG_TRY_ENTIRE_MATCH);
+     if (match != null)
+       {
+ 	if (match.getStartIndex() == 0)
+ 	  {
+ 	    position = match.getEndIndex();
+ 	    if (position == input.length())
+ 	        return true;
+ 	  }
+ 	match = null;
+       }
+     return false;
+   }
+   
+   /**
+    * Returns the Pattern that is interpreted by this Matcher
+    */
+   public Pattern pattern ()
+   {
+     return pattern;
+   }
+   
+   public Matcher reset ()
+   {
+     position = 0;
+     match = null;
+     return this;
+   }
+   
+   /**
+    * @param input The new input character sequence
+    */
+   public Matcher reset (CharSequence input)
+   {
+     this.input = input;
+     return reset();
+   }
+   
+   /**
+    * @returns the index of a capturing group in this matcher's pattern
+    *
+    * @exception IllegalStateException If no match has yet been attempted,
+    * or if the previous match operation failed
+    */
+   public int start ()
+     throws IllegalStateException
+   {
+     assertMatchOp();
+     return match.getStartIndex();
+   }
+ 
+   /**
+    * @param group The index of a capturing group in this matcher's pattern
+    *
+    * @exception IllegalStateException If no match has yet been attempted,
+    * or if the previous match operation failed
+    * @exception IndexOutOfBoundsException If the replacement string refers
+    * to a capturing group that does not exist in the pattern
+    */
+   public int start (int group)
+     throws IllegalStateException
+   {
+     assertMatchOp();
+     return match.getStartIndex(group);
+   }
+ 
+   private void assertMatchOp()
+   {
+     if (match == null) throw new IllegalStateException();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/regex/Pattern.java gcc-4.1.0/libjava/classpath/java/util/regex/Pattern.java
*** gcc-4.0.2/libjava/classpath/java/util/regex/Pattern.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/regex/Pattern.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,257 ----
+ /* Pattern.java -- Compiled regular expression ready to be applied.
+    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.regex;
+ 
+ import gnu.regexp.RE;
+ import gnu.regexp.REException;
+ import gnu.regexp.RESyntax;
+ 
+ import java.io.Serializable;
+ import java.util.ArrayList;
+ 
+ 
+ /**
+  * Compiled regular expression ready to be applied. 
+  *
+  * @since 1.4
+  */
+ public final class Pattern implements Serializable
+ {
+   private static final long serialVersionUID = 5073258162644648461L;
+   
+   public static final int CANON_EQ = 128;
+   public static final int CASE_INSENSITIVE = 2;
+   public static final int COMMENTS = 4;
+   public static final int DOTALL = 32;
+   public static final int MULTILINE = 8;
+   public static final int UNICODE_CASE = 64;
+   public static final int UNIX_LINES = 1;
+   
+   private final String regex;
+   private final int flags;
+ 
+   private final RE re;
+ 
+   private Pattern (String regex, int flags)
+     throws PatternSyntaxException
+   {
+     this.regex = regex;
+     this.flags = flags;
+ 
+     int gnuFlags = 0;
+     if ((flags & CASE_INSENSITIVE) != 0)
+       gnuFlags |= RE.REG_ICASE;
+     if ((flags & MULTILINE) != 0)
+       gnuFlags |= RE.REG_MULTILINE;
+     if ((flags & DOTALL) != 0)
+       gnuFlags |= RE.REG_DOT_NEWLINE;
+     // not yet supported:
+     // if ((flags & UNICODE_CASE) != 0) gnuFlags =
+     // if ((flags & CANON_EQ) != 0) gnuFlags =
+ 
+     RESyntax syntax = RESyntax.RE_SYNTAX_JAVA_1_4;
+     if ((flags & UNIX_LINES) != 0)
+       {
+ 	// Use a syntax set with \n for linefeeds?
+ 	syntax = new RESyntax(syntax);
+ 	syntax.setLineSeparator("\n");
+       }
+ 
+     if ((flags & COMMENTS) != 0)
+       {
+ 	// Use a syntax with support for comments?
+       }
+ 
+     try
+       {
+ 	this.re = new RE(regex, gnuFlags, syntax);
+       }
+     catch (REException e)
+       {
+ 	PatternSyntaxException pse;
+ 	pse = new PatternSyntaxException(e.getMessage(),
+ 					 regex, e.getPosition());
+ 	pse.initCause(e);
+ 	throw pse;
+       }
+   }
+  
+   // package private accessor method
+   RE getRE()
+   {
+     return re;
+   }
+ 
+   /**
+    * @param regex The regular expression
+    *
+    * @exception PatternSyntaxException If the expression's syntax is invalid
+    */
+   public static Pattern compile (String regex)
+     throws PatternSyntaxException
+   {
+     return compile(regex, 0);
+   }
+   
+   /**
+    * @param regex The regular expression
+    * @param flags The match flags, a bit mask
+    *
+    * @exception PatternSyntaxException If the expression's syntax is invalid
+    * @exception IllegalArgumentException If bit values other than those
+    * corresponding to the defined match flags are set in flags
+    */
+   public static Pattern compile (String regex, int flags)
+     throws PatternSyntaxException
+   {
+     // FIXME: check which flags are really accepted
+     if ((flags & ~0xEF) != 0)
+       throw new IllegalArgumentException ();
+     
+     return new Pattern (regex, flags); 
+   }
+   
+   public int flags ()
+   {
+     return this.flags;
+   }
+   
+   /**
+    * @param regex The regular expression
+    * @param input The character sequence to be matched
+    *
+    * @exception PatternSyntaxException If the expression's syntax is invalid
+    */
+   public static boolean matches (String regex, CharSequence input) 
+   {
+     return compile(regex).matcher(input).matches();
+   }
+   
+   /**
+    * @param input The character sequence to be matched
+    */
+   public Matcher matcher (CharSequence input)
+   {
+     return new Matcher(this, input);
+   }
+   
+   /**
+    * @param input The character sequence to be matched
+    */
+   public String[] split (CharSequence input)
+   {
+     return split(input, 0);
+   }
+   
+   /**
+    * @param input The character sequence to be matched
+    * @param limit The result threshold
+    */
+   public String[] split (CharSequence input, int limit)
+   {
+     Matcher matcher = new Matcher(this, input);
+     ArrayList list = new ArrayList();
+     int empties = 0;
+     int count = 0;
+     int start = 0;
+     int end;
+     boolean matched = matcher.find();
+ 
+     while (matched && (limit <= 0 || count < limit - 1))
+       {
+ 	++count;
+ 	end = matcher.start();
+ 	if (start == end)
+ 	  empties++;
+ 	else
+ 	  {
+ 	    while (empties > 0)
+ 	      {
+ 		list.add("");
+ 		empties--;
+ 	      }
+ 
+ 	    String text = input.subSequence(start, end).toString();
+ 	    list.add(text);
+ 	  }
+ 	start = matcher.end();
+ 	matched = matcher.find();
+       }
+ 
+     // We matched nothing.
+     if (!matched && count == 0)
+       return new String[] { input.toString() };
+     
+     // Is the last token empty?
+     boolean emptyLast = (start == input.length());
+ 
+     // Can/Must we add empties or an extra last token at the end?
+     if (list.size() < limit || limit < 0 || (limit == 0 && !emptyLast))
+       {
+ 	if (limit > list.size())
+ 	  {
+ 	    int max = limit - list.size();
+ 	    empties = (empties > max) ? max : empties;
+ 	  }
+ 	while (empties > 0)
+ 	  {
+ 	    list.add("");
+ 	    empties--;
+ 	  }
+       }
+ 
+     // last token at end
+     if (limit != 0 || (limit == 0 && !emptyLast))
+       {
+ 	String t = input.subSequence(start, input.length()).toString();
+ 	if ("".equals(t) && limit == 0)
+ 	  ; // Don't add.
+ 	else
+ 	  list.add(t);
+       }
+ 
+     String[] output = new String [list.size()];
+     list.toArray(output);
+     return output;
+   }
+   
+   public String pattern ()
+   {
+     return regex;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/regex/PatternSyntaxException.java gcc-4.1.0/libjava/classpath/java/util/regex/PatternSyntaxException.java
*** gcc-4.0.2/libjava/classpath/java/util/regex/PatternSyntaxException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/regex/PatternSyntaxException.java	Fri Feb 10 19:52:44 2006
***************
*** 0 ****
--- 1,133 ----
+ /* PatternSyntaxException - Indicates illegal pattern for regular expression.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.regex;
+ 
+ /**
+  * Indicates illegal pattern for regular expression.
+  * Includes state to inspect the pattern and what and where the expression
+  * was not valid regular expression.
+  * @since 1.4
+  */
+ public class PatternSyntaxException extends IllegalArgumentException
+ {
+   private static final long serialVersionUID = -3864639126226059218L;
+ 
+   /**
+    * Human readable escription of the syntax error.
+    */
+   private final String desc;
+ 
+   /**
+    * The original pattern that contained the syntax error.
+    */
+   private final String pattern;
+   
+   /**
+    * Index of the first character in the String that was probably invalid,
+    * or -1 when unknown.
+    */
+   private final int index;
+ 
+   /**
+    * Creates a new PatternSyntaxException.
+    *
+    * @param description Human readable escription of the syntax error.
+    * @param pattern The original pattern that contained the syntax error.
+    * @param index Index of the first character in the String that was
+    *        probably invalid, or -1 when unknown.
+    */
+   public PatternSyntaxException(String description,
+ 		                String pattern,
+ 				int index)
+   {
+     super(description);
+     this.desc = description;
+     this.pattern = pattern;
+     this.index = index;
+   }
+ 
+   /**
+    * Returns a human readable escription of the syntax error.
+    */
+   public String getDescription()
+   {
+     return desc;
+   }
+ 
+   /**
+    * Returns the original pattern that contained the syntax error.
+    */
+   public String getPattern()
+   {
+     return pattern;
+   }
+ 
+   /**
+    * Returns the index of the first character in the String that was probably
+    * invalid, or -1 when unknown.
+    */
+   public int getIndex()
+   {
+     return index;
+   }
+ 
+   /**
+    * Returns a string containing a line with the description, a line with
+    * the original pattern and a line indicating with a ^ which character is
+    * probably the first invalid character in the pattern if the index is not
+    * negative.
+    */
+   public String getMessage()
+   {
+     String lineSep = System.getProperty("line.separator");
+     StringBuffer sb = new StringBuffer(desc);
+     sb.append(lineSep);
+     sb.append('\t');
+     sb.append(pattern);
+     if (index != -1)
+       {
+ 	sb.append(lineSep);
+ 	sb.append('\t');
+ 	for (int i=0; i<index; i++)
+ 	  sb.append(' ');
+ 	sb.append('^');
+       }
+     return sb.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/regex/package.html gcc-4.1.0/libjava/classpath/java/util/regex/package.html
*** gcc-4.0.2/libjava/classpath/java/util/regex/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/regex/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.util.regex package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.util.regex</title></head>
+ 
+ <body>
+ <p>Regular expression patterns and matchers.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/Adler32.java gcc-4.1.0/libjava/classpath/java/util/zip/Adler32.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/Adler32.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/Adler32.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,205 ----
+ /* Adler32.java - Computes Adler32 data checksum of a data stream
+    Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /*
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * The actual Adler32 algorithm is taken from RFC 1950.
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * Computes Adler32 checksum for a stream of data. An Adler32 
+  * checksum is not as reliable as a CRC32 checksum, but a lot faster to 
+  * compute.
+  *<p>
+  * The specification for Adler32 may be found in RFC 1950.
+  * (ZLIB Compressed Data Format Specification version 3.3)
+  *<p>
+  *<p>
+  * From that document:
+  *<p>
+  *      "ADLER32 (Adler-32 checksum)
+  *       This contains a checksum value of the uncompressed data
+  *       (excluding any dictionary data) computed according to Adler-32
+  *       algorithm. This algorithm is a 32-bit extension and improvement
+  *       of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073
+  *       standard. 
+  *<p>
+  *       Adler-32 is composed of two sums accumulated per byte: s1 is
+  *       the sum of all bytes, s2 is the sum of all s1 values. Both sums
+  *       are done modulo 65521. s1 is initialized to 1, s2 to zero.  The
+  *       Adler-32 checksum is stored as s2*65536 + s1 in most-
+  *       significant-byte first (network) order."
+  *<p>
+  * "8.2. The Adler-32 algorithm
+  *<p>
+  *    The Adler-32 algorithm is much faster than the CRC32 algorithm yet
+  *    still provides an extremely low probability of undetected errors.
+  *<p>
+  *    The modulo on unsigned long accumulators can be delayed for 5552
+  *    bytes, so the modulo operation time is negligible.  If the bytes
+  *    are a, b, c, the second sum is 3a + 2b + c + 3, and so is position
+  *    and order sensitive, unlike the first sum, which is just a
+  *    checksum.  That 65521 is prime is important to avoid a possible
+  *    large class of two-byte errors that leave the check unchanged.
+  *    (The Fletcher checksum uses 255, which is not prime and which also
+  *    makes the Fletcher check insensitive to single byte changes 0 <->
+  *    255.)
+  *<p>
+  *    The sum s1 is initialized to 1 instead of zero to make the length
+  *    of the sequence part of s2, so that the length does not have to be
+  *   checked separately. (Any sequence of zeroes has a Fletcher
+  *    checksum of zero.)"
+  *
+  * @author John Leuner, Per Bothner
+  * @since JDK 1.1
+  *
+  * @see InflaterInputStream
+  * @see DeflaterOutputStream
+  */
+ public class Adler32 implements Checksum
+ {
+ 
+   /** largest prime smaller than 65536 */
+   private static final int BASE = 65521;
+ 
+   private int checksum; //we do all in int.
+ 
+   //Note that java doesn't have unsigned integers,
+   //so we have to be careful with what arithmetic 
+   //we do. We return the checksum as a long to 
+   //avoid sign confusion.
+ 
+   /**
+    * Creates a new instance of the <code>Adler32</code> class. 
+    * The checksum starts off with a value of 1. 
+    */
+   public Adler32 ()
+   {
+     reset();
+   }
+ 
+   /**
+    * Resets the Adler32 checksum to the initial value.
+    */
+   public void reset () 
+   {
+     checksum = 1; //Initialize to 1    
+   }
+ 
+   /**
+    * Updates the checksum with the byte b. 
+    *
+    * @param bval the data value to add. The high byte of the int is ignored.
+    */
+   public void update (int bval)
+   {
+     //We could make a length 1 byte array and call update again, but I
+     //would rather not have that overhead
+     int s1 = checksum & 0xffff;
+     int s2 = checksum >>> 16;
+     
+     s1 = (s1 + (bval & 0xFF)) % BASE;
+     s2 = (s1 + s2) % BASE;
+     
+     checksum = (s2 << 16) + s1;
+   }
+ 
+   /**
+    * Updates the checksum with the bytes taken from the array. 
+    * 
+    * @param buffer an array of bytes
+    */
+   public void update (byte[] buffer)
+   {
+     update(buffer, 0, buffer.length);
+   }
+ 
+   /**
+    * Updates the checksum with the bytes taken from the array. 
+    * 
+    * @param buf an array of bytes
+    * @param off the start of the data used for this update
+    * @param len the number of bytes to use for this update
+    */
+   public void update (byte[] buf, int off, int len)
+   {
+     //(By Per Bothner)
+     int s1 = checksum & 0xffff;
+     int s2 = checksum >>> 16;
+ 
+     while (len > 0)
+       {
+ 	// We can defer the modulo operation:
+ 	// s1 maximally grows from 65521 to 65521 + 255 * 3800
+ 	// s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31
+ 	int n = 3800;
+ 	if (n > len)
+ 	  n = len;
+ 	len -= n;
+ 	while (--n >= 0)
+ 	  {
+ 	    s1 = s1 + (buf[off++] & 0xFF);
+ 	    s2 = s2 + s1;
+ 	  }
+ 	s1 %= BASE;
+ 	s2 %= BASE;
+       }
+ 
+     /*Old implementation, borrowed from somewhere:
+     int n;
+     
+     while (len-- > 0) {
+ 
+       s1 = (s1 + (bs[offset++] & 0xff)) % BASE; 
+       s2 = (s2 + s1) % BASE;
+     }*/
+     
+     checksum = (s2 << 16) | s1;
+   }
+ 
+   /**
+    * Returns the Adler32 data checksum computed so far.
+    */
+   public long getValue()
+   {
+     return (long) checksum & 0xffffffffL;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/CRC32.java gcc-4.1.0/libjava/classpath/java/util/zip/CRC32.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/CRC32.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/CRC32.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,132 ----
+ /* CRC32.java - Computes CRC32 data checksum of a data stream
+    Copyright (C) 1999. 2000, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /*
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * The actual CRC32 algorithm is taken from RFC 1952.
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * Computes CRC32 data checksum of a data stream.
+  * The actual CRC32 algorithm is described in RFC 1952
+  * (GZIP file format specification version 4.3).
+  * Can be used to get the CRC32 over a stream if used with checked input/output
+  * streams.
+  *
+  * @see InflaterInputStream
+  * @see DeflaterOutputStream
+  *
+  * @author Per Bothner
+  * @date April 1, 1999.
+  */
+ public class CRC32 implements Checksum
+ {
+   /** The crc data checksum so far. */
+   private int crc = 0;
+ 
+   /** The fast CRC table. Computed once when the CRC32 class is loaded. */
+   private static int[] crc_table = make_crc_table();
+ 
+   /** Make the table for a fast CRC. */
+   private static int[] make_crc_table ()
+   {
+     int[] crc_table = new int[256];
+     for (int n = 0; n < 256; n++)
+       {
+ 	int c = n;
+ 	for (int k = 8;  --k >= 0; )
+ 	  {
+ 	    if ((c & 1) != 0)
+ 	      c = 0xedb88320 ^ (c >>> 1);
+ 	    else
+ 	      c = c >>> 1;
+ 	  }
+ 	crc_table[n] = c;
+       }
+     return crc_table;
+   }
+ 
+   /**
+    * Returns the CRC32 data checksum computed so far.
+    */
+   public long getValue ()
+   {
+     return (long) crc & 0xffffffffL;
+   }
+ 
+   /**
+    * Resets the CRC32 data checksum as if no update was ever called.
+    */
+   public void reset () { crc = 0; }
+ 
+   /**
+    * Updates the checksum with the int bval. 
+    *
+    * @param bval (the byte is taken as the lower 8 bits of bval)
+    */
+ 
+   public void update (int bval)
+   {
+     int c = ~crc;
+     c = crc_table[(c ^ bval) & 0xff] ^ (c >>> 8);
+     crc = ~c;
+   }
+ 
+   /**
+    * Adds the byte array to the data checksum.
+    *
+    * @param buf the buffer which contains the data
+    * @param off the offset in the buffer where the data starts
+    * @param len the length of the data
+    */
+   public void update (byte[] buf, int off, int len)
+   {
+     int c = ~crc;
+     while (--len >= 0)
+       c = crc_table[(c ^ buf[off++]) & 0xff] ^ (c >>> 8);
+     crc = ~c;
+   }
+ 
+   /**
+    * Adds the complete byte array to the data checksum.
+    */
+   public void update (byte[] buf) { update(buf, 0, buf.length); }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/CheckedInputStream.java gcc-4.1.0/libjava/classpath/java/util/zip/CheckedInputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/CheckedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/CheckedInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,135 ----
+ /* CheckedInputStream.java - Compute checksum of data being read
+    Copyright (C) 1999, 2000, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.zip;
+ 
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /* Written using on-line Java Platform 1.2 API Specification
+  * and JCL book.
+  * Believed complete and correct.
+  */
+ 
+ /**
+  * InputStream that computes a checksum of the data being read using a
+  * supplied Checksum object.
+  *
+  * @see Checksum
+  *
+  * @author Tom Tromey
+  * @date May 17, 1999
+  */
+ public class CheckedInputStream extends FilterInputStream
+ {
+   /**
+    * Creates a new CheckInputStream on top of the supplied OutputStream
+    * using the supplied Checksum.
+    */
+   public CheckedInputStream (InputStream in, Checksum sum)
+   {
+     super (in);
+     this.sum = sum;
+   }
+ 
+   /**
+    * Returns the Checksum object used. To get the data checksum computed so
+    * far call <code>getChecksum.getValue()</code>.
+    */
+   public Checksum getChecksum ()
+   {
+     return sum;
+   }
+ 
+   /**
+    * Reads one byte, updates the checksum and returns the read byte
+    * (or -1 when the end of file was reached).
+    */
+   public int read () throws IOException
+   {
+     int x = in.read();
+     if (x != -1)
+       sum.update(x);
+     return x;
+   }
+ 
+   /**
+    * Reads at most len bytes in the supplied buffer and updates the checksum
+    * with it. Returns the number of bytes actually read or -1 when the end
+    * of file was reached.
+    */
+   public int read (byte[] buf, int off, int len) throws IOException
+   {
+     int r = in.read(buf, off, len);
+     if (r != -1)
+       sum.update(buf, off, r);
+     return r;
+   }
+ 
+   /**
+    * Skips n bytes by reading them in a temporary buffer and updating the
+    * the checksum with that buffer. Returns the actual number of bytes skiped
+    * which can be less then requested when the end of file is reached.
+    */
+   public long skip (long n) throws IOException
+   {
+     if (n == 0)
+       return 0;
+ 
+     int min = (int) Math.min(n, 1024);
+     byte[] buf = new byte[min];
+ 
+     long s = 0;
+     while (n > 0)
+       {
+ 	int r = in.read(buf, 0, min);
+ 	if (r == -1)
+ 	  break;
+ 	n -= r;
+ 	s += r;
+ 	min = (int) Math.min(n, 1024);
+ 	sum.update(buf, 0, r);
+       }
+ 
+     return s;
+   }
+ 
+   /** The checksum object. */
+   private Checksum sum;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/CheckedOutputStream.java gcc-4.1.0/libjava/classpath/java/util/zip/CheckedOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/CheckedOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/CheckedOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,100 ----
+ /* CheckedOutputStream.java - Compute checksum of data being written.
+    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.zip;
+ 
+ import java.io.FilterOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /* Written using on-line Java Platform 1.2 API Specification
+  * and JCL book.
+  * Believed complete and correct.
+  */
+ 
+ /**
+  * OutputStream that computes a checksum of data being written using a
+  * supplied Checksum object.
+  *
+  * @see Checksum
+  *
+  * @author Tom Tromey
+  * @date May 17, 1999
+  */
+ public class CheckedOutputStream extends FilterOutputStream
+ {
+   /**
+    * Creates a new CheckInputStream on top of the supplied OutputStream
+    * using the supplied Checksum.
+    */
+   public CheckedOutputStream (OutputStream out, Checksum cksum)
+   {
+     super (out);
+     this.sum = cksum;
+   }
+ 
+   /**
+    * Returns the Checksum object used. To get the data checksum computed so
+    * far call <code>getChecksum.getValue()</code>.
+    */
+   public Checksum getChecksum ()
+   {
+     return sum;
+   }
+ 
+   /**
+    * Writes one byte to the OutputStream and updates the Checksum.
+    */
+   public void write (int bval) throws IOException
+   {
+     out.write(bval);
+     sum.update(bval);
+   }
+ 
+   /**
+    * Writes the byte array to the OutputStream and updates the Checksum.
+    */
+   public void write (byte[] buf, int off, int len) throws IOException
+   {
+     out.write(buf, off, len);
+     sum.update(buf, off, len);
+   }
+ 
+   /** The checksum object. */
+   private Checksum sum;
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/Checksum.java gcc-4.1.0/libjava/classpath/java/util/zip/Checksum.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/Checksum.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/Checksum.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,86 ----
+ /* Checksum.java - Interface to compute a data checksum
+    Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /*
+  * Written using on-line Java Platform 1.2 API Specification, as well
+  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+  * Status:  Believed complete and correct.
+  */
+ 
+ /**
+  * Interface to compute a data checksum used by checked input/output streams.
+  * A data checksum can be updated by one byte or with a byte array. After each
+  * update the value of the current checksum can be returned by calling
+  * <code>getValue</code>. The complete checksum object can also be reset
+  * so it can be used again with new data.
+  *
+  * @see CheckedInputStream
+  * @see CheckedOutputStream
+  *
+  * @author Per Bothner
+  * @author Jochen Hoenicke
+  */
+ public interface Checksum
+ {
+   /**
+    * Returns the data checksum computed so far.
+    */
+   long getValue();
+ 
+   /**
+    * Resets the data checksum as if no update was ever called.
+    */
+   void reset();
+ 
+   /**
+    * Adds one byte to the data checksum.
+    *
+    * @param bval the data value to add. The high byte of the int is ignored.
+    */
+   void update (int bval);
+ 
+   /**
+    * Adds the byte array to the data checksum.
+    *
+    * @param buf the buffer which contains the data
+    * @param off the offset in the buffer where the data starts
+    * @param len the length of the data
+    */
+   void update (byte[] buf, int off, int len);
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/DataFormatException.java gcc-4.1.0/libjava/classpath/java/util/zip/DataFormatException.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/DataFormatException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/DataFormatException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,71 ----
+ /* DataformatException.java -- thrown when compressed data is corrupt
+    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /**
+  * Exception thrown when compressed data is corrupt.
+  *
+  * @author Tom Tromey
+  * @author John Leuner
+  * @since 1.1
+  * @status updated to 1.4
+  */
+ public class DataFormatException extends Exception
+ {
+   /**
+    * Compatible with JDK 1.1+.
+    */
+   private static final long serialVersionUID = 2219632870893641452L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public DataFormatException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param msg the message
+    */
+   public DataFormatException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/Deflater.java gcc-4.1.0/libjava/classpath/java/util/zip/Deflater.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/Deflater.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/Deflater.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,520 ----
+ /* Deflater.java - Compress a data stream
+    Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /**
+  * This is the Deflater class.  The deflater class compresses input
+  * with the deflate algorithm described in RFC 1951.  It has several
+  * compression levels and three different strategies described below.
+  * 
+  * This class is <i>not</i> thread safe.  This is inherent in the API, due
+  * to the split of deflate and setInput.
+  * 
+  * @author Jochen Hoenicke
+  * @author Tom Tromey
+  */
+ public class Deflater
+ {
+   /**
+    * The best and slowest compression level.  This tries to find very
+    * long and distant string repetitions.  
+    */
+   public static final int BEST_COMPRESSION = 9;
+   /**
+    * The worst but fastest compression level.  
+    */
+   public static final int BEST_SPEED = 1;
+   /**
+    * The default compression level.
+    */
+   public static final int DEFAULT_COMPRESSION = -1;
+   /**
+    * This level won't compress at all but output uncompressed blocks.
+    */
+   public static final int NO_COMPRESSION = 0;
+ 
+   /**
+    * The default strategy.
+    */
+   public static final int DEFAULT_STRATEGY = 0;
+   /**
+    * This strategy will only allow longer string repetitions.  It is
+    * useful for random data with a small character set.
+    */
+   public static final int FILTERED = 1;
+ 
+   /** 
+    * This strategy will not look for string repetitions at all.  It
+    * only encodes with Huffman trees (which means, that more common
+    * characters get a smaller encoding.  
+    */
+   public static final int HUFFMAN_ONLY = 2;
+ 
+   /**
+    * The compression method.  This is the only method supported so far.
+    * There is no need to use this constant at all.
+    */
+   public static final int DEFLATED = 8;
+ 
+   /*
+    * The Deflater can do the following state transitions:
+    *
+    * (1) -> INIT_STATE   ----> INIT_FINISHING_STATE ---.
+    *        /  | (2)      (5)                         |
+    *       /   v          (5)                         |
+    *   (3)| SETDICT_STATE ---> SETDICT_FINISHING_STATE |(3)
+    *       \   | (3)                 |        ,-------'
+    *        |  |                     | (3)   /
+    *        v  v          (5)        v      v
+    * (1) -> BUSY_STATE   ----> FINISHING_STATE
+    *                                | (6)
+    *                                v
+    *                           FINISHED_STATE
+    *    \_____________________________________/
+    *          | (7)
+    *          v
+    *        CLOSED_STATE
+    *
+    * (1) If we should produce a header we start in INIT_STATE, otherwise
+    *     we start in BUSY_STATE.
+    * (2) A dictionary may be set only when we are in INIT_STATE, then
+    *     we change the state as indicated.
+    * (3) Whether a dictionary is set or not, on the first call of deflate
+    *     we change to BUSY_STATE.
+    * (4) -- intentionally left blank -- :)
+    * (5) FINISHING_STATE is entered, when flush() is called to indicate that
+    *     there is no more INPUT.  There are also states indicating, that
+    *     the header wasn't written yet.
+    * (6) FINISHED_STATE is entered, when everything has been flushed to the
+    *     internal pending output buffer.
+    * (7) At any time (7)
+    * 
+    */
+ 
+   private static final int IS_SETDICT              = 0x01;
+   private static final int IS_FLUSHING             = 0x04;
+   private static final int IS_FINISHING            = 0x08;
+   
+   private static final int INIT_STATE              = 0x00;
+   private static final int SETDICT_STATE           = 0x01;
+   private static final int INIT_FINISHING_STATE    = 0x08;
+   private static final int SETDICT_FINISHING_STATE = 0x09;
+   private static final int BUSY_STATE              = 0x10;
+   private static final int FLUSHING_STATE          = 0x14;
+   private static final int FINISHING_STATE         = 0x1c;
+   private static final int FINISHED_STATE          = 0x1e;
+   private static final int CLOSED_STATE            = 0x7f;
+ 
+   /** Compression level. */
+   private int level;
+ 
+   /** should we include a header. */
+   private boolean noHeader;
+ 
+   /** The current state. */
+   private int state;
+ 
+   /** The total bytes of output written. */
+   private int totalOut;
+  
+   /** The pending output. */
+   private DeflaterPending pending;
+ 
+   /** The deflater engine. */
+   private DeflaterEngine engine;
+ 
+   /**
+    * Creates a new deflater with default compression level.
+    */
+   public Deflater()
+   {
+     this(DEFAULT_COMPRESSION, false);
+   }
+ 
+   /**
+    * Creates a new deflater with given compression level.
+    * @param lvl the compression level, a value between NO_COMPRESSION
+    * and BEST_COMPRESSION, or DEFAULT_COMPRESSION.  
+    * @exception IllegalArgumentException if lvl is out of range.
+    */
+   public Deflater(int lvl)
+   {
+     this(lvl, false);
+   }
+ 
+   /**
+    * Creates a new deflater with given compression level.
+    * @param lvl the compression level, a value between NO_COMPRESSION
+    * and BEST_COMPRESSION.  
+    * @param nowrap true, iff we should suppress the deflate header at the
+    * beginning and the adler checksum at the end of the output.  This is
+    * useful for the GZIP format.
+    * @exception IllegalArgumentException if lvl is out of range.
+    */
+   public Deflater(int lvl, boolean nowrap)
+   {
+     if (lvl == DEFAULT_COMPRESSION)
+       lvl = 6;
+     else if (lvl < NO_COMPRESSION || lvl > BEST_COMPRESSION)
+       throw new IllegalArgumentException();
+ 
+     pending = new DeflaterPending();
+     engine = new DeflaterEngine(pending);
+     this.noHeader = nowrap;
+     setStrategy(DEFAULT_STRATEGY);
+     setLevel(lvl);
+     reset();
+   }
+ 
+   /** 
+    * Resets the deflater.  The deflater acts afterwards as if it was
+    * just created with the same compression level and strategy as it
+    * had before.  
+    */
+   public void reset() 
+   {
+     state = (noHeader ? BUSY_STATE : INIT_STATE);
+     totalOut = 0;
+     pending.reset();
+     engine.reset();
+   }
+   
+   /**
+    * Frees all objects allocated by the compressor.  There's no
+    * reason to call this, since you can just rely on garbage
+    * collection.  Exists only for compatibility against Sun's JDK,
+    * where the compressor allocates native memory.
+    * If you call any method (even reset) afterwards the behaviour is
+    * <i>undefined</i>.  
+    * @deprecated Just clear all references to deflater instead.
+    */
+   public void end()
+   {
+     engine = null;
+     pending = null;
+     state = CLOSED_STATE;
+   }
+ 
+   /** 
+    * Gets the current adler checksum of the data that was processed so
+    * far.
+    */
+   public int getAdler()
+   {
+     return engine.getAdler();
+   }
+ 
+   /** 
+    * Gets the number of input bytes processed so far.
+    */
+   public int getTotalIn()
+   {
+     return engine.getTotalIn();
+   }
+ 
+   /** 
+    * Gets the number of output bytes so far.
+    */
+   public int getTotalOut()
+   {
+     return totalOut;
+   }
+ 
+   /** 
+    * Finalizes this object.
+    */
+   protected void finalize()
+   {
+     /* Exists solely for compatibility.  We don't have any native state. */
+   }
+ 
+   /** 
+    * Flushes the current input block.  Further calls to deflate() will
+    * produce enough output to inflate everything in the current input
+    * block.  This is not part of Sun's JDK so I have made it package
+    * private.  It is used by DeflaterOutputStream to implement
+    * flush().
+    */
+   void flush() {
+     state |= IS_FLUSHING;
+   }
+ 
+   /** 
+    * Finishes the deflater with the current input block.  It is an error
+    * to give more input after this method was called.  This method must
+    * be called to force all bytes to be flushed.
+    */
+   public void finish() {
+     state |= IS_FLUSHING | IS_FINISHING;
+   }
+ 
+   /** 
+    * Returns true iff the stream was finished and no more output bytes
+    * are available.
+    */
+   public boolean finished()
+   {
+     return state == FINISHED_STATE && pending.isFlushed();
+   }
+ 
+   /**
+    * Returns true, if the input buffer is empty.
+    * You should then call setInput(). <br>
+    *
+    * <em>NOTE</em>: This method can also return true when the stream
+    * was finished.  
+    */
+   public boolean needsInput()
+   {
+     return engine.needsInput();
+   }
+ 
+   /**
+    * Sets the data which should be compressed next.  This should be only
+    * called when needsInput indicates that more input is needed.
+    * If you call setInput when needsInput() returns false, the
+    * previous input that is still pending will be thrown away.
+    * The given byte array should not be changed, before needsInput() returns
+    * true again.
+    * This call is equivalent to <code>setInput(input, 0, input.length)</code>.
+    * @param input the buffer containing the input data.
+    * @exception IllegalStateException if the buffer was finished() or ended().
+    */
+   public void setInput(byte[] input)
+   {
+     setInput(input, 0, input.length);
+   }
+ 
+   /**
+    * Sets the data which should be compressed next.  This should be
+    * only called when needsInput indicates that more input is needed.
+    * The given byte array should not be changed, before needsInput() returns
+    * true again.
+    * @param input the buffer containing the input data.
+    * @param off the start of the data.
+    * @param len the length of the data.  
+    * @exception IllegalStateException if the buffer was finished() or ended()
+    * or if previous input is still pending.
+    */
+   public void setInput(byte[] input, int off, int len)
+   {
+     if ((state & IS_FINISHING) != 0)
+       throw new IllegalStateException("finish()/end() already called");
+     engine.setInput(input, off, len);
+   }
+ 
+   /** 
+    * Sets the compression level.  There is no guarantee of the exact
+    * position of the change, but if you call this when needsInput is
+    * true the change of compression level will occur somewhere near
+    * before the end of the so far given input.  
+    * @param lvl the new compression level.
+    */
+   public void setLevel(int lvl)
+   {
+     if (lvl == DEFAULT_COMPRESSION)
+       lvl = 6;
+     else if (lvl < NO_COMPRESSION || lvl > BEST_COMPRESSION)
+       throw new IllegalArgumentException();
+ 
+ 
+     if (level != lvl)
+       {
+ 	level = lvl;
+ 	engine.setLevel(lvl);
+       }
+   }
+ 
+   /** 
+    * Sets the compression strategy. Strategy is one of
+    * DEFAULT_STRATEGY, HUFFMAN_ONLY and FILTERED.  For the exact
+    * position where the strategy is changed, the same as for
+    * setLevel() applies.
+    * @param stgy the new compression strategy.
+    */
+   public void setStrategy(int stgy)
+   {
+     if (stgy != DEFAULT_STRATEGY && stgy != FILTERED
+ 	&& stgy != HUFFMAN_ONLY)
+       throw new IllegalArgumentException();
+     engine.setStrategy(stgy);
+   }
+ 
+   /**
+    * Deflates the current input block to the given array.  It returns 
+    * the number of bytes compressed, or 0 if either 
+    * needsInput() or finished() returns true or length is zero.
+    * @param output the buffer where to write the compressed data.
+    */
+   public int deflate(byte[] output)
+   {
+     return deflate(output, 0, output.length);
+   }
+ 
+   /**
+    * Deflates the current input block to the given array.  It returns 
+    * the number of bytes compressed, or 0 if either 
+    * needsInput() or finished() returns true or length is zero.
+    * @param output the buffer where to write the compressed data.
+    * @param offset the offset into the output array.
+    * @param length the maximum number of bytes that may be written.
+    * @exception IllegalStateException if end() was called.
+    * @exception IndexOutOfBoundsException if offset and/or length
+    * don't match the array length.  
+    */
+   public int deflate(byte[] output, int offset, int length)
+   {
+     int origLength = length;
+ 
+     if (state == CLOSED_STATE)
+       throw new IllegalStateException("Deflater closed");
+ 
+     if (state < BUSY_STATE)
+       {
+ 	/* output header */
+ 	int header = (DEFLATED + 
+ 		      ((DeflaterConstants.MAX_WBITS - 8) << 4)) << 8;
+ 	int level_flags = (level - 1) >> 1;
+ 	if (level_flags < 0 || level_flags > 3) 
+ 	  level_flags = 3;
+ 	header |= level_flags << 6;
+ 	if ((state & IS_SETDICT) != 0)
+ 	  /* Dictionary was set */
+ 	  header |= DeflaterConstants.PRESET_DICT;
+ 	header += 31 - (header % 31);
+ 
+ 	pending.writeShortMSB(header);
+ 	if ((state & IS_SETDICT) != 0)
+ 	  {
+ 	    int chksum = engine.getAdler();
+ 	    engine.resetAdler();
+ 	    pending.writeShortMSB(chksum >> 16);
+ 	    pending.writeShortMSB(chksum & 0xffff);
+ 	  }
+ 
+ 	state = BUSY_STATE | (state & (IS_FLUSHING | IS_FINISHING));
+       }
+ 
+     for (;;)
+       {
+ 	int count = pending.flush(output, offset, length);
+ 	offset += count;
+ 	totalOut += count;
+ 	length -= count;
+ 	if (length == 0 || state == FINISHED_STATE)
+ 	  break;
+ 
+ 	if (!engine.deflate((state & IS_FLUSHING) != 0, 
+ 			    (state & IS_FINISHING) != 0))
+ 	  {
+ 	    if (state == BUSY_STATE)
+ 	      /* We need more input now */
+ 	      return origLength - length;
+ 	    else if (state == FLUSHING_STATE)
+ 	      {
+ 		if (level != NO_COMPRESSION)
+ 		  {
+ 		    /* We have to supply some lookahead.  8 bit lookahead
+ 		     * are needed by the zlib inflater, and we must fill 
+ 		     * the next byte, so that all bits are flushed.
+ 		     */
+ 		    int neededbits = 8 + ((-pending.getBitCount()) & 7);
+ 		    while (neededbits > 0)
+ 		      {
+ 			/* write a static tree block consisting solely of
+ 			 * an EOF:
+ 			 */
+ 			pending.writeBits(2, 10);
+ 			neededbits -= 10;
+ 		      }
+ 		  }
+ 		state = BUSY_STATE;
+ 	      }
+ 	    else if (state == FINISHING_STATE)
+ 	      {
+ 		pending.alignToByte();
+ 		/* We have completed the stream */
+ 		if (!noHeader)
+ 		  {
+ 		    int adler = engine.getAdler();
+ 		    pending.writeShortMSB(adler >> 16);
+ 		    pending.writeShortMSB(adler & 0xffff);
+ 		  }
+ 		state = FINISHED_STATE;
+ 	      }
+ 	  }
+       }
+ 
+     return origLength - length;
+   }
+ 
+   /**
+    * Sets the dictionary which should be used in the deflate process.
+    * This call is equivalent to <code>setDictionary(dict, 0,
+    * dict.length)</code>.  
+    * @param dict the dictionary.  
+    * @exception IllegalStateException if setInput () or deflate ()
+    * were already called or another dictionary was already set.  
+    */
+   public void setDictionary(byte[] dict)
+   {
+     setDictionary(dict, 0, dict.length);
+   }
+ 
+   /**
+    * Sets the dictionary which should be used in the deflate process.
+    * The dictionary should be a byte array containing strings that are
+    * likely to occur in the data which should be compressed.  The
+    * dictionary is not stored in the compressed output, only a
+    * checksum.  To decompress the output you need to supply the same
+    * dictionary again.
+    * @param dict the dictionary.
+    * @param offset an offset into the dictionary.
+    * @param length the length of the dictionary.
+    * @exception IllegalStateException if setInput () or deflate () were
+    * already called or another dictionary was already set.
+    */
+   public void setDictionary(byte[] dict, int offset, int length)
+   {
+     if (state != INIT_STATE)
+       throw new IllegalStateException();
+ 
+     state = SETDICT_STATE;
+     engine.setDictionary(dict, offset, length);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterConstants.java gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterConstants.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterConstants.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* java.util.zip.DeflaterConstants
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ interface DeflaterConstants
+ {
+   boolean DEBUGGING = false;
+ 
+   int STORED_BLOCK = 0;
+   int STATIC_TREES = 1;
+   int DYN_TREES    = 2;
+   int PRESET_DICT  = 0x20;
+ 
+   int DEFAULT_MEM_LEVEL = 8;
+ 
+   int MAX_MATCH = 258;
+   int MIN_MATCH = 3;
+ 
+   int MAX_WBITS = 15;
+   int WSIZE = 1 << MAX_WBITS;
+   int WMASK = WSIZE - 1;
+ 
+   int HASH_BITS = DEFAULT_MEM_LEVEL + 7;
+   int HASH_SIZE = 1 << HASH_BITS;
+   int HASH_MASK = HASH_SIZE - 1;
+   int HASH_SHIFT = (HASH_BITS + MIN_MATCH - 1) / MIN_MATCH;
+ 
+   int MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;
+   int MAX_DIST = WSIZE - MIN_LOOKAHEAD;
+ 
+   int PENDING_BUF_SIZE = 1 << (DEFAULT_MEM_LEVEL + 8);
+   int MAX_BLOCK_SIZE = Math.min(65535, PENDING_BUF_SIZE-5);
+ 
+   int DEFLATE_STORED = 0;
+   int DEFLATE_FAST   = 1;
+   int DEFLATE_SLOW   = 2;
+ 
+   int GOOD_LENGTH[] = { 0,4, 4, 4, 4, 8,  8,  8,  32,  32 };
+   int MAX_LAZY[]    = { 0,4, 5, 6, 4,16, 16, 32, 128, 258 };
+   int NICE_LENGTH[] = { 0,8,16,32,16,32,128,128, 258, 258 };
+   int MAX_CHAIN[]   = { 0,4, 8,32,16,32,128,256,1024,4096 };
+   int COMPR_FUNC[]  = { 0,1, 1, 1, 1, 2,  2,  2,   2,   2 };
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterEngine.java gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterEngine.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterEngine.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterEngine.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,696 ----
+ /* DeflaterEngine.java --
+    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ class DeflaterEngine implements DeflaterConstants
+ {
+   private static final int TOO_FAR = 4096;
+ 
+   private int ins_h;
+ 
+   /**
+    * Hashtable, hashing three characters to an index for window, so
+    * that window[index]..window[index+2] have this hash code.  
+    * Note that the array should really be unsigned short, so you need
+    * to and the values with 0xffff.
+    */
+   private short[] head;
+ 
+   /**
+    * prev[index & WMASK] points to the previous index that has the
+    * same hash code as the string starting at index.  This way 
+    * entries with the same hash code are in a linked list.
+    * Note that the array should really be unsigned short, so you need
+    * to and the values with 0xffff.
+    */
+   private short[] prev;
+ 
+   private int matchStart, matchLen;
+   private boolean prevAvailable;
+   private int blockStart;
+ 
+   /**
+    * strstart points to the current character in window.
+    */
+   private int strstart;
+ 
+   /**
+    * lookahead is the number of characters starting at strstart in
+    * window that are valid.
+    * So window[strstart] until window[strstart+lookahead-1] are valid
+    * characters.
+    */
+   private int lookahead;
+ 
+   /**
+    * This array contains the part of the uncompressed stream that 
+    * is of relevance.  The current character is indexed by strstart.
+    */
+   private byte[] window;
+ 
+   private int strategy, max_chain, max_lazy, niceLength, goodLength;
+ 
+   /** The current compression function. */
+   private int comprFunc;
+ 
+   /** The input data for compression. */
+   private byte[] inputBuf;
+ 
+   /** The total bytes of input read. */
+   private int totalIn;
+ 
+   /** The offset into inputBuf, where input data starts. */
+   private int inputOff;
+ 
+   /** The end offset of the input data. */
+   private int inputEnd;
+ 
+   private DeflaterPending pending;
+   private DeflaterHuffman huffman;
+ 
+   /** The adler checksum */
+   private Adler32 adler;
+ 
+   /* DEFLATE ALGORITHM:
+    *
+    * The uncompressed stream is inserted into the window array.  When
+    * the window array is full the first half is thrown away and the
+    * second half is copied to the beginning.
+    *
+    * The head array is a hash table.  Three characters build a hash value
+    * and they the value points to the corresponding index in window of 
+    * the last string with this hash.  The prev array implements a
+    * linked list of matches with the same hash: prev[index & WMASK] points
+    * to the previous index with the same hash.
+    * 
+    * 
+    */
+ 
+ 
+   DeflaterEngine(DeflaterPending pending) {
+     this.pending = pending;
+     huffman = new DeflaterHuffman(pending);
+     adler = new Adler32();
+ 
+     window = new byte[2*WSIZE];
+     head   = new short[HASH_SIZE];
+     prev   = new short[WSIZE];
+ 
+     /* We start at index 1, to avoid a implementation deficiency, that
+      * we cannot build a repeat pattern at index 0.
+      */
+     blockStart = strstart = 1;
+   }
+ 
+   public void reset()
+   {
+     huffman.reset();
+     adler.reset();
+     blockStart = strstart = 1;
+     lookahead = 0;
+     totalIn = 0;
+     prevAvailable = false;
+     matchLen = MIN_MATCH - 1;
+     for (int i = 0; i < HASH_SIZE; i++)
+       head[i] = 0;
+     for (int i = 0; i < WSIZE; i++)
+       prev[i] = 0;
+   }
+ 
+   public final void resetAdler()
+   {
+     adler.reset();
+   }
+ 
+   public final int getAdler()
+   {
+     int chksum = (int) adler.getValue();
+     return chksum;
+   }
+ 
+   public final int getTotalIn()
+   {
+     return totalIn;
+   }
+ 
+   public final void setStrategy(int strat)
+   {
+     strategy = strat;
+   }
+ 
+   public void setLevel(int lvl)
+   {
+     goodLength = DeflaterConstants.GOOD_LENGTH[lvl];
+     max_lazy    = DeflaterConstants.MAX_LAZY[lvl];
+     niceLength = DeflaterConstants.NICE_LENGTH[lvl];
+     max_chain   = DeflaterConstants.MAX_CHAIN[lvl];
+ 
+     if (DeflaterConstants.COMPR_FUNC[lvl] != comprFunc) 
+       {
+ 	if (DeflaterConstants.DEBUGGING)
+ 	  System.err.println("Change from "+comprFunc +" to "
+ 			     + DeflaterConstants.COMPR_FUNC[lvl]);
+ 	switch (comprFunc)
+ 	  {
+ 	  case DEFLATE_STORED:
+ 	    if (strstart > blockStart)
+ 	      {
+ 		huffman.flushStoredBlock(window, blockStart, 
+ 					 strstart - blockStart, false);
+ 		blockStart = strstart;
+ 	      }
+ 	    updateHash();
+ 	    break;
+ 	  case DEFLATE_FAST:
+ 	    if (strstart > blockStart)
+ 	      {
+ 		huffman.flushBlock(window, blockStart, strstart - blockStart,
+ 				   false);
+ 		blockStart = strstart;
+ 	      }
+ 	    break;
+ 	  case DEFLATE_SLOW:
+ 	    if (prevAvailable)
+ 	      huffman.tallyLit(window[strstart-1] & 0xff);
+ 	    if (strstart > blockStart)
+ 	      {
+ 		huffman.flushBlock(window, blockStart, strstart - blockStart,
+ 				   false);
+ 		blockStart = strstart;
+ 	      }
+ 	    prevAvailable = false;
+ 	    matchLen = MIN_MATCH - 1;
+ 	    break;
+ 	  }
+ 	comprFunc = COMPR_FUNC[lvl];
+       }
+   }
+ 
+   private void updateHash() {
+     if (DEBUGGING)
+       System.err.println("updateHash: "+strstart);
+     ins_h = (window[strstart] << HASH_SHIFT) ^ window[strstart + 1];
+   }    
+ 
+   /**
+    * Inserts the current string in the head hash and returns the previous
+    * value for this hash.
+    */
+   private int insertString() {
+     short match;
+     int hash = ((ins_h << HASH_SHIFT) ^ window[strstart + (MIN_MATCH -1)])
+       & HASH_MASK;
+ 
+     if (DEBUGGING)
+       {
+ 	if (hash != (((window[strstart] << (2*HASH_SHIFT))
+ 		      ^ (window[strstart + 1] << HASH_SHIFT)
+ 		      ^ (window[strstart + 2])) & HASH_MASK))
+ 	  throw new InternalError("hash inconsistent: "+hash+"/"
+ 				  +window[strstart]+","
+ 				  +window[strstart+1]+","
+ 				  +window[strstart+2]+","+HASH_SHIFT);
+       }
+ 
+     prev[strstart & WMASK] = match = head[hash];
+     head[hash] = (short) strstart;
+     ins_h = hash;
+     return match & 0xffff;
+   }
+ 
+   private void slideWindow()
+   {
+     System.arraycopy(window, WSIZE, window, 0, WSIZE);
+     matchStart -= WSIZE;
+     strstart -= WSIZE;
+     blockStart -= WSIZE;
+     
+     /* Slide the hash table (could be avoided with 32 bit values
+      * at the expense of memory usage).
+      */
+     for (int i = 0; i < HASH_SIZE; i++) 
+       {
+ 	int m = head[i] & 0xffff;
+ 	head[i] = m >= WSIZE ? (short) (m - WSIZE) : 0;
+       }
+ 
+     /* Slide the prev table.
+      */
+     for (int i = 0; i < WSIZE; i++) 
+       {
+ 	int m = prev[i] & 0xffff;
+ 	prev[i] = m >= WSIZE ? (short) (m - WSIZE) : 0;
+       }
+   }
+ 
+   /**
+    * Fill the window when the lookahead becomes insufficient.
+    * Updates strstart and lookahead.
+    *
+    * OUT assertions: strstart + lookahead <= 2*WSIZE
+    *    lookahead >= MIN_LOOKAHEAD or inputOff == inputEnd
+    */
+   private void fillWindow()
+   {
+     /* If the window is almost full and there is insufficient lookahead,
+      * move the upper half to the lower one to make room in the upper half.
+      */
+     if (strstart >= WSIZE + MAX_DIST)
+       slideWindow();
+ 
+     /* If there is not enough lookahead, but still some input left,
+      * read in the input
+      */
+     while (lookahead < DeflaterConstants.MIN_LOOKAHEAD && inputOff < inputEnd)
+       {
+ 	int more = 2*WSIZE - lookahead - strstart;
+ 	
+ 	if (more > inputEnd - inputOff)
+ 	  more = inputEnd - inputOff;
+ 
+ 	System.arraycopy(inputBuf, inputOff, 
+ 			 window, strstart + lookahead, more);
+ 	adler.update(inputBuf, inputOff, more);
+ 	inputOff += more;
+ 	totalIn  += more;
+ 	lookahead += more;
+       }
+ 
+     if (lookahead >= MIN_MATCH) 
+       updateHash();
+   }
+ 
+   /**
+    * Find the best (longest) string in the window matching the 
+    * string starting at strstart.
+    *
+    * Preconditions:
+    *    strstart + MAX_MATCH <= window.length.
+    *    
+    *
+    * @param curMatch
+    */
+   private boolean findLongestMatch(int curMatch) {
+     int chainLength = this.max_chain;
+     int niceLength = this.niceLength;
+     short[] prev = this.prev;
+     int scan  = this.strstart;
+     int match;
+     int best_end = this.strstart + matchLen;
+     int best_len = Math.max(matchLen, MIN_MATCH - 1);
+     
+     int limit = Math.max(strstart - MAX_DIST, 0);
+ 
+     int strend = scan + MAX_MATCH - 1;
+     byte scan_end1 = window[best_end - 1];
+     byte scan_end  = window[best_end];
+ 
+     /* Do not waste too much time if we already have a good match: */
+     if (best_len >= this.goodLength)
+       chainLength >>= 2;
+ 
+     /* Do not look for matches beyond the end of the input. This is necessary
+      * to make deflate deterministic.
+      */
+     if (niceLength > lookahead)
+       niceLength = lookahead;
+ 
+     if (DeflaterConstants.DEBUGGING 
+ 	&& strstart > 2*WSIZE - MIN_LOOKAHEAD)
+       throw new InternalError("need lookahead");
+     
+     do {
+       if (DeflaterConstants.DEBUGGING && curMatch >= strstart)
+ 	throw new InternalError("future match");
+       if (window[curMatch + best_len] != scan_end
+ 	  || window[curMatch + best_len - 1] != scan_end1
+ 	  || window[curMatch] != window[scan]
+ 	  || window[curMatch+1] != window[scan + 1])
+ 	continue;
+ 
+       match = curMatch + 2;      
+       scan += 2;
+ 
+       /* We check for insufficient lookahead only every 8th comparison;
+        * the 256th check will be made at strstart+258.
+        */
+       while (window[++scan] == window[++match]
+ 	     && window[++scan] == window[++match]
+ 	     && window[++scan] == window[++match]
+ 	     && window[++scan] == window[++match]
+ 	     && window[++scan] == window[++match]
+ 	     && window[++scan] == window[++match]
+ 	     && window[++scan] == window[++match]
+ 	     && window[++scan] == window[++match]
+ 	     && scan < strend);
+ 
+       if (scan > best_end) {
+ //  	if (DeflaterConstants.DEBUGGING && ins_h == 0)
+ //  	  System.err.println("Found match: "+curMatch+"-"+(scan-strstart));
+ 	matchStart = curMatch;
+ 	best_end = scan;
+ 	best_len = scan - strstart;
+ 	if (best_len >= niceLength)
+ 	  break;
+ 
+ 	scan_end1  = window[best_end-1];
+ 	scan_end   = window[best_end];
+       }
+       scan = strstart;
+     } while ((curMatch = (prev[curMatch & WMASK] & 0xffff)) > limit
+ 	     && --chainLength != 0);
+ 
+     matchLen = Math.min(best_len, lookahead);
+     return matchLen >= MIN_MATCH;
+   }
+ 
+   void setDictionary(byte[] buffer, int offset, int length) {
+     if (DeflaterConstants.DEBUGGING && strstart != 1)
+       throw new IllegalStateException("strstart not 1");
+     adler.update(buffer, offset, length);
+     if (length < MIN_MATCH)
+       return;
+     if (length > MAX_DIST) {
+       offset += length - MAX_DIST;
+       length = MAX_DIST;
+     }
+ 
+     System.arraycopy(buffer, offset, window, strstart, length);
+ 
+     updateHash();
+     length--;
+     while (--length > 0)
+       {
+ 	insertString();
+ 	strstart++;
+       }
+     strstart += 2;
+     blockStart = strstart;
+   }    
+     
+   private boolean deflateStored(boolean flush, boolean finish)
+   {
+     if (!flush && lookahead == 0)
+       return false;
+ 
+     strstart += lookahead;
+     lookahead = 0;
+ 
+     int storedLen = strstart - blockStart;
+ 
+     if ((storedLen >= DeflaterConstants.MAX_BLOCK_SIZE) 
+ 	/* Block is full */
+ 	|| (blockStart < WSIZE && storedLen >= MAX_DIST)
+ 	/* Block may move out of window */
+ 	|| flush)
+       {
+ 	boolean lastBlock = finish;
+ 	if (storedLen > DeflaterConstants.MAX_BLOCK_SIZE)
+ 	  {
+ 	    storedLen = DeflaterConstants.MAX_BLOCK_SIZE;
+ 	    lastBlock = false;
+ 	  }
+ 
+ 	if (DeflaterConstants.DEBUGGING)
+ 	  System.err.println("storedBlock["+storedLen+","+lastBlock+"]");
+ 
+ 	huffman.flushStoredBlock(window, blockStart, storedLen, lastBlock);
+ 	blockStart += storedLen;
+ 	return !lastBlock;
+       }
+     return true;
+   }
+ 
+   private boolean deflateFast(boolean flush, boolean finish)
+   {
+     if (lookahead < MIN_LOOKAHEAD && !flush)
+       return false;
+ 
+     while (lookahead >= MIN_LOOKAHEAD || flush)
+       {
+ 	if (lookahead == 0)
+ 	  {
+ 	    /* We are flushing everything */
+ 	    huffman.flushBlock(window, blockStart, strstart - blockStart,
+ 			       finish);
+ 	    blockStart = strstart;
+ 	    return false;
+ 	  }
+ 
+ 	if (strstart > 2 * WSIZE - MIN_LOOKAHEAD)
+ 	  {
+ 	    /* slide window, as findLongestMatch need this.
+ 	     * This should only happen when flushing and the window
+ 	     * is almost full.
+ 	     */
+ 	    slideWindow();
+ 	  }
+ 
+ 	int hashHead;
+ 	if (lookahead >= MIN_MATCH 
+ 	    && (hashHead = insertString()) != 0
+ 	    && strategy != Deflater.HUFFMAN_ONLY
+ 	    && strstart - hashHead <= MAX_DIST
+ 	    && findLongestMatch(hashHead))
+ 	  {
+ 	    /* longestMatch sets matchStart and matchLen */
+ 	    if (DeflaterConstants.DEBUGGING)
+ 	      {
+ 		for (int i = 0 ; i < matchLen; i++)
+ 		  {
+ 		    if (window[strstart+i] != window[matchStart + i])
+ 		      throw new InternalError();
+ 		  }
+ 	      }
+ 	    huffman.tallyDist(strstart - matchStart, matchLen);
+ 	    
+ 	    lookahead -= matchLen;
+ 	    if (matchLen <= max_lazy && lookahead >= MIN_MATCH)
+ 	      {
+ 		while (--matchLen > 0)
+ 		  {
+ 		    strstart++;
+ 		    insertString();
+ 		  }
+ 		strstart++;
+ 	      }
+ 	    else
+ 	      {
+ 		strstart += matchLen;
+ 		if (lookahead >= MIN_MATCH - 1)
+ 		  updateHash();
+ 	      }
+ 	    matchLen = MIN_MATCH - 1;
+ 	    continue;
+ 	  }
+ 	else
+ 	  {
+ 	    /* No match found */
+ 	    huffman.tallyLit(window[strstart] & 0xff);
+ 	    strstart++;
+ 	    lookahead--;
+ 	  }
+ 
+ 	if (huffman.isFull())
+ 	  {
+ 	    boolean lastBlock = finish && lookahead == 0;
+ 	    huffman.flushBlock(window, blockStart, strstart - blockStart,
+ 			       lastBlock);
+ 	    blockStart = strstart;
+ 	    return !lastBlock;
+ 	  }
+       }
+     return true;
+   }
+ 
+   private boolean deflateSlow(boolean flush, boolean finish)
+   {
+     if (lookahead < MIN_LOOKAHEAD && !flush)
+       return false;
+ 
+     while (lookahead >= MIN_LOOKAHEAD || flush)
+       {
+ 	if (lookahead == 0)
+ 	  {
+ 	    if (prevAvailable)
+ 	      huffman.tallyLit(window[strstart-1] & 0xff);
+ 	    prevAvailable = false;
+ 
+ 	    /* We are flushing everything */
+ 	    if (DeflaterConstants.DEBUGGING && !flush)
+ 	      throw new InternalError("Not flushing, but no lookahead");
+ 	    huffman.flushBlock(window, blockStart, strstart - blockStart,
+ 			       finish);
+ 	    blockStart = strstart;
+ 	    return false;
+ 	  }
+ 
+ 	if (strstart >= 2 * WSIZE - MIN_LOOKAHEAD)
+ 	  {
+ 	    /* slide window, as findLongestMatch need this.
+ 	     * This should only happen when flushing and the window
+ 	     * is almost full.
+ 	     */
+ 	    slideWindow();
+ 	  }
+ 
+ 	int prevMatch = matchStart;
+ 	int prevLen = matchLen;
+ 	if (lookahead >= MIN_MATCH)
+ 	  {
+ 	    int hashHead = insertString();
+ 	    if (strategy != Deflater.HUFFMAN_ONLY
+ 		&& hashHead != 0 && strstart - hashHead <= MAX_DIST
+ 		&& findLongestMatch(hashHead))
+ 	      {
+ 		/* longestMatch sets matchStart and matchLen */
+ 		
+ 		/* Discard match if too small and too far away */
+ 		if (matchLen <= 5
+ 		    && (strategy == Deflater.FILTERED
+ 			|| (matchLen == MIN_MATCH
+ 			    && strstart - matchStart > TOO_FAR))) {
+ 		  matchLen = MIN_MATCH - 1;
+ 		}
+ 	      }
+ 	  }
+ 	
+ 	/* previous match was better */
+ 	if (prevLen >= MIN_MATCH && matchLen <= prevLen)
+ 	  {
+ 	    if (DeflaterConstants.DEBUGGING)
+ 	      {
+ 		for (int i = 0 ; i < matchLen; i++)
+ 		  {
+ 		    if (window[strstart-1+i] != window[prevMatch + i])
+ 		      throw new InternalError();
+ 		  }
+ 	      }
+ 	    huffman.tallyDist(strstart - 1 - prevMatch, prevLen);
+ 	    prevLen -= 2;
+ 	    do 
+ 	      {
+ 		strstart++;
+ 		lookahead--;
+ 		if (lookahead >= MIN_MATCH)
+ 		  insertString();
+ 	      }
+ 	    while (--prevLen > 0);
+ 	    strstart ++;
+ 	    lookahead--;
+ 	    prevAvailable = false;
+ 	    matchLen = MIN_MATCH - 1;
+ 	  }
+ 	else
+ 	  {
+ 	    if (prevAvailable)
+ 	      huffman.tallyLit(window[strstart-1] & 0xff);
+ 	    prevAvailable = true;
+ 	    strstart++;
+ 	    lookahead--;
+ 	  }
+ 
+ 	if (huffman.isFull())
+ 	  {
+ 	    int len = strstart - blockStart;
+ 	    if (prevAvailable)
+ 	      len--;
+ 	    boolean lastBlock = (finish && lookahead == 0 && !prevAvailable);
+ 	    huffman.flushBlock(window, blockStart, len, lastBlock);
+ 	    blockStart += len;
+ 	    return !lastBlock;
+ 	  }
+       }
+     return true;
+   } 
+ 
+   public boolean deflate(boolean flush, boolean finish) 
+   {
+     boolean progress;
+     do
+       {
+ 	fillWindow();
+ 	boolean canFlush = flush && inputOff == inputEnd;
+ 	if (DeflaterConstants.DEBUGGING)
+ 	  System.err.println("window: ["+blockStart+","+strstart+","
+ 			     +lookahead+"], "+comprFunc+","+canFlush);
+ 	switch (comprFunc)
+ 	  {
+ 	  case DEFLATE_STORED:
+ 	    progress = deflateStored(canFlush, finish);
+ 	    break;
+ 	  case DEFLATE_FAST:
+ 	    progress = deflateFast(canFlush, finish);
+ 	    break;
+ 	  case DEFLATE_SLOW:
+ 	    progress = deflateSlow(canFlush, finish);
+ 	    break;
+ 	  default:
+ 	    throw new InternalError();
+ 	  }
+       }
+     while (pending.isFlushed()  /* repeat while we have no pending output */
+ 	   && progress);        /* and progress was made */
+ 
+     return progress;
+   }
+ 
+   public void setInput(byte[] buf, int off, int len)
+   {
+     if (inputOff < inputEnd)
+       throw new IllegalStateException
+ 	("Old input was not completely processed");
+ 
+     int end = off + len;
+ 
+     /* We want to throw an ArrayIndexOutOfBoundsException early.  The
+      * check is very tricky: it also handles integer wrap around.  
+      */
+     if (0 > off || off > end || end > buf.length)
+       throw new ArrayIndexOutOfBoundsException();
+ 
+     inputBuf = buf;
+     inputOff = off;
+     inputEnd = end;
+   }
+ 
+   public final boolean needsInput()
+   {
+     return inputEnd == inputOff;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterHuffman.java gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterHuffman.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterHuffman.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterHuffman.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,776 ----
+ /* DeflaterHuffman.java --
+    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /**
+  * This is the DeflaterHuffman class.
+  *
+  * This class is <i>not</i> thread safe.  This is inherent in the API, due
+  * to the split of deflate and setInput.
+  *
+  * @author Jochen Hoenicke
+  * @date Jan 6, 2000 
+  */
+ class DeflaterHuffman
+ {
+   private static final int BUFSIZE = 1 << (DeflaterConstants.DEFAULT_MEM_LEVEL + 6);
+   private static final int LITERAL_NUM = 286;
+   private static final int DIST_NUM = 30;
+   private static final int BITLEN_NUM = 19;
+   private static final int REP_3_6    = 16;
+   private static final int REP_3_10   = 17;
+   private static final int REP_11_138 = 18;
+   private static final int EOF_SYMBOL = 256;
+   private static final int[] BL_ORDER =
+   { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
+ 
+   private static final String bit4Reverse =
+     "\000\010\004\014\002\012\006\016\001\011\005\015\003\013\007\017";
+ 
+   class Tree {
+     short[] freqs;
+     short[] codes;
+     byte[]  length;
+     int[]   bl_counts;
+     int     minNumCodes, numCodes;
+     int     maxLength;
+ 
+     Tree(int elems, int minCodes, int maxLength) {
+       this.minNumCodes = minCodes;
+       this.maxLength  = maxLength;
+       freqs  = new short[elems];
+       bl_counts = new int[maxLength];
+     }
+ 
+     void reset() {
+       for (int i = 0; i < freqs.length; i++)
+ 	freqs[i] = 0;
+       codes = null;
+       length = null;
+     }
+ 
+     final void writeSymbol(int code)
+     {
+       if (DeflaterConstants.DEBUGGING)
+  	{
+  	  freqs[code]--;
+ //  	  System.err.print("writeSymbol("+freqs.length+","+code+"): ");
+  	}
+       pending.writeBits(codes[code] & 0xffff, length[code]);
+     }
+ 
+     final void checkEmpty()
+     {
+       boolean empty = true;
+       for (int i = 0; i < freqs.length; i++)
+ 	if (freqs[i] != 0)
+ 	  {
+ 	    System.err.println("freqs["+i+"] == "+freqs[i]);
+ 	    empty = false;
+ 	  }
+       if (!empty)
+ 	throw new InternalError();
+       System.err.println("checkEmpty suceeded!");
+     }
+ 
+     void setStaticCodes(short[] stCodes, byte[] stLength)
+     {
+       codes = stCodes;
+       length = stLength;
+     }
+ 
+     public void buildCodes() {
+       int[] nextCode = new int[maxLength];
+       int code = 0;
+       codes = new short[freqs.length];
+ 
+       if (DeflaterConstants.DEBUGGING)
+ 	System.err.println("buildCodes: "+freqs.length);
+       for (int bits = 0; bits < maxLength; bits++) 
+ 	{
+ 	  nextCode[bits] = code;
+ 	  code += bl_counts[bits] << (15 - bits);
+ 	  if (DeflaterConstants.DEBUGGING)
+ 	    System.err.println("bits: "+(bits+1)+" count: "+bl_counts[bits]
+ 			       +" nextCode: "+Integer.toHexString(code));
+ 	}
+       if (DeflaterConstants.DEBUGGING && code != 65536)
+ 	throw new RuntimeException("Inconsistent bl_counts!");
+       
+       for (int i=0; i < numCodes; i++)
+ 	{
+ 	  int bits = length[i];
+ 	  if (bits > 0)
+ 	    {
+ 	      if (DeflaterConstants.DEBUGGING)
+ 		System.err.println("codes["+i+"] = rev("
+ 				   +Integer.toHexString(nextCode[bits-1])+"),"
+ 				   +bits);
+ 	      codes[i] = bitReverse(nextCode[bits-1]);
+ 	      nextCode[bits-1] += 1 << (16 - bits);
+ 	    }
+ 	}
+     }
+ 
+     private void buildLength(int childs[])
+     {
+       this.length = new byte [freqs.length];
+       int numNodes = childs.length / 2;
+       int numLeafs = (numNodes + 1) / 2;
+       int overflow = 0;
+       
+       for (int i = 0; i < maxLength; i++)
+ 	bl_counts[i] = 0;
+ 
+       /* First calculate optimal bit lengths */
+       int lengths[] = new int[numNodes];
+       lengths[numNodes-1] = 0;
+       for (int i = numNodes - 1; i >= 0; i--)
+ 	{
+ 	  if (childs[2*i+1] != -1)
+ 	    {
+ 	      int bitLength = lengths[i] + 1;
+ 	      if (bitLength > maxLength)
+ 		{
+ 		  bitLength = maxLength;
+ 		  overflow++;
+ 		}
+ 	      lengths[childs[2*i]] = lengths[childs[2*i+1]] = bitLength;
+ 	    }
+ 	  else
+ 	    {
+ 	      /* A leaf node */
+ 	      int bitLength = lengths[i];
+ 	      bl_counts[bitLength - 1]++;
+ 	      this.length[childs[2*i]] = (byte) lengths[i];
+ 	    }
+ 	}
+       
+       if (DeflaterConstants.DEBUGGING)
+ 	{
+ 	  System.err.println("Tree "+freqs.length+" lengths:");
+ 	  for (int i=0; i < numLeafs; i++)
+ 	    System.err.println("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]]
+ 			       + " len: "+length[childs[2*i]]);
+ 	}
+       
+       if (overflow == 0)
+ 	return;
+       
+       int incrBitLen = maxLength - 1;
+       do
+ 	{
+ 	  /* Find the first bit length which could increase: */
+ 	  while (bl_counts[--incrBitLen] == 0)
+ 	    ;
+ 	  
+ 	  /* Move this node one down and remove a corresponding
+ 	   * amount of overflow nodes.
+ 	   */
+ 	  do
+ 	    {
+ 	      bl_counts[incrBitLen]--;
+ 	      bl_counts[++incrBitLen]++;
+ 	      overflow -= 1 << (maxLength - 1 - incrBitLen);
+ 	    }
+ 	  while (overflow > 0 && incrBitLen < maxLength - 1);
+ 	}
+       while (overflow > 0);
+ 
+       /* We may have overshot above.  Move some nodes from maxLength to
+        * maxLength-1 in that case.
+        */
+       bl_counts[maxLength-1] += overflow;
+       bl_counts[maxLength-2] -= overflow;
+       
+       /* Now recompute all bit lengths, scanning in increasing
+        * frequency.  It is simpler to reconstruct all lengths instead of
+        * fixing only the wrong ones. This idea is taken from 'ar'
+        * written by Haruhiko Okumura.
+        *
+        * The nodes were inserted with decreasing frequency into the childs
+        * array.
+        */
+       int nodePtr = 2 * numLeafs;
+       for (int bits = maxLength; bits != 0; bits--) 
+ 	{
+ 	  int n = bl_counts[bits-1];
+ 	  while (n > 0) 
+ 	    {
+ 	      int childPtr = 2*childs[nodePtr++];
+ 	      if (childs[childPtr + 1] == -1)
+ 		{
+ 		  /* We found another leaf */
+ 		  length[childs[childPtr]] = (byte) bits;
+ 		  n--;
+ 		}
+ 	    }
+ 	}
+       if (DeflaterConstants.DEBUGGING)
+ 	{
+ 	  System.err.println("*** After overflow elimination. ***");
+ 	  for (int i=0; i < numLeafs; i++)
+ 	    System.err.println("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]]
+ 			       + " len: "+length[childs[2*i]]);
+ 	}
+     }
+     
+     void buildTree() 
+     {
+       int numSymbols = freqs.length;
+ 
+       /* heap is a priority queue, sorted by frequency, least frequent
+        * nodes first.  The heap is a binary tree, with the property, that
+        * the parent node is smaller than both child nodes.  This assures
+        * that the smallest node is the first parent.
+        *
+        * The binary tree is encoded in an array:  0 is root node and
+        * the nodes 2*n+1, 2*n+2 are the child nodes of node n.
+        */
+       int[] heap = new int[numSymbols];
+       int heapLen = 0;
+       int maxCode = 0;
+       for (int n = 0; n < numSymbols; n++)
+ 	{
+ 	  int freq = freqs[n];
+ 	  if (freq != 0)
+ 	    {
+ 	      /* Insert n into heap */
+ 	      int pos = heapLen++;
+ 	      int ppos;
+ 	      while (pos > 0 &&
+ 		     freqs[heap[ppos = (pos - 1) / 2]] > freq) {
+ 		heap[pos] = heap[ppos];
+ 		pos = ppos;
+ 	      }
+ 	      heap[pos] = n;
+ 	      maxCode = n;
+ 	    }
+ 	}
+       
+       /* We could encode a single literal with 0 bits but then we
+        * don't see the literals.  Therefore we force at least two
+        * literals to avoid this case.  We don't care about order in
+        * this case, both literals get a 1 bit code.  
+        */
+       while (heapLen < 2)
+ 	{
+ 	  int node = maxCode < 2 ? ++maxCode : 0;
+ 	  heap[heapLen++] = node;
+ 	}
+ 
+       numCodes = Math.max(maxCode + 1, minNumCodes);
+       
+       int numLeafs = heapLen;
+       int[] childs = new int[4*heapLen - 2];
+       int[] values = new int[2*heapLen - 1];
+       int numNodes = numLeafs;
+       for (int i = 0; i < heapLen; i++)
+ 	{
+ 	  int node = heap[i];
+ 	  childs[2*i]   = node;
+ 	  childs[2*i+1] = -1;
+ 	  values[i] = freqs[node] << 8;
+ 	  heap[i] = i;
+ 	}
+       
+       /* Construct the Huffman tree by repeatedly combining the least two
+        * frequent nodes.
+        */
+       do
+ 	{
+ 	  int first = heap[0];
+ 	  int last  = heap[--heapLen];
+ 	  
+ 	  /* Propagate the hole to the leafs of the heap */
+ 	  int ppos = 0;
+ 	  int path = 1;
+ 	  while (path < heapLen)
+ 	    {
+ 	      if (path + 1 < heapLen 
+ 		  && values[heap[path]] > values[heap[path+1]])
+ 		path++;
+ 	      
+ 	      heap[ppos] = heap[path];
+ 	      ppos = path;
+ 	      path = path * 2 + 1;
+ 	    }
+ 	  
+ 	  /* Now propagate the last element down along path.  Normally
+ 	   * it shouldn't go too deep.
+ 	   */
+ 	  int lastVal = values[last];
+ 	  while ((path = ppos) > 0
+ 		 && values[heap[ppos = (path - 1)/2]] > lastVal)
+ 	    heap[path] = heap[ppos];
+ 	  heap[path] = last;
+ 	  
+ 	  
+ 	  int second = heap[0];
+ 	  
+ 	  /* Create a new node father of first and second */
+ 	  last = numNodes++;
+ 	  childs[2*last] = first;
+ 	  childs[2*last+1] = second;
+ 	  int mindepth = Math.min(values[first] & 0xff, values[second] & 0xff);
+ 	  values[last] = lastVal = values[first] + values[second] - mindepth + 1;
+ 	  
+ 	  /* Again, propagate the hole to the leafs */
+ 	  ppos = 0;
+ 	  path = 1;
+ 	  while (path < heapLen)
+ 	    {
+ 	      if (path + 1 < heapLen 
+ 		  && values[heap[path]] > values[heap[path+1]])
+ 		path++;
+ 	      
+ 	      heap[ppos] = heap[path];
+ 	      ppos = path;
+ 	      path = ppos * 2 + 1;
+ 	    }
+ 	  
+ 	  /* Now propagate the new element down along path */
+ 	  while ((path = ppos) > 0
+ 		 && values[heap[ppos = (path - 1)/2]] > lastVal)
+ 	    heap[path] = heap[ppos];
+ 	  heap[path] = last;
+ 	}
+       while (heapLen > 1);
+       
+       if (heap[0] != childs.length / 2 - 1)
+ 	throw new RuntimeException("Weird!");
+       
+       buildLength(childs);
+     }
+ 
+     int getEncodedLength() 
+     {
+       int len = 0;
+       for (int i = 0; i < freqs.length; i++)
+ 	len += freqs[i] * length[i];
+       return len;
+     }
+ 
+     void calcBLFreq(Tree blTree) {
+       int max_count;               /* max repeat count */
+       int min_count;               /* min repeat count */
+       int count;                   /* repeat count of the current code */
+       int curlen = -1;             /* length of current code */
+       
+       int i = 0;
+       while (i < numCodes)
+ 	{
+ 	  count = 1;
+ 	  int nextlen = length[i];
+ 	  if (nextlen == 0) 
+ 	    {
+ 	      max_count = 138;
+ 	      min_count = 3;
+ 	    }
+ 	  else
+ 	    {
+ 	      max_count = 6;
+ 	      min_count = 3;
+ 	      if (curlen != nextlen)
+ 		{
+ 		  blTree.freqs[nextlen]++;
+ 		  count = 0;
+ 		}
+ 	    }
+ 	  curlen = nextlen;
+ 	  i++;
+ 
+ 	  while (i < numCodes && curlen == length[i])
+ 	    {
+ 	      i++;
+ 	      if (++count >= max_count)
+ 		break;
+ 	    }
+ 
+ 	  if (count < min_count)
+ 	    blTree.freqs[curlen] += count;
+ 	  else if (curlen != 0)
+ 	    blTree.freqs[REP_3_6]++;
+ 	  else if (count <= 10)
+ 	    blTree.freqs[REP_3_10]++;
+ 	  else
+ 	    blTree.freqs[REP_11_138]++;
+ 	}
+     }
+ 
+     void writeTree(Tree blTree)
+     {
+       int max_count;               /* max repeat count */
+       int min_count;               /* min repeat count */
+       int count;                   /* repeat count of the current code */
+       int curlen = -1;             /* length of current code */
+       
+       int i = 0;
+       while (i < numCodes)
+ 	{
+ 	  count = 1;
+ 	  int nextlen = length[i];
+ 	  if (nextlen == 0) 
+ 	    {
+ 	      max_count = 138;
+ 	      min_count = 3;
+ 	    }
+ 	  else
+ 	    {
+ 	      max_count = 6;
+ 	      min_count = 3;
+ 	      if (curlen != nextlen)
+ 		{
+ 		  blTree.writeSymbol(nextlen);
+ 		  count = 0;
+ 		}
+ 	    }
+ 	  curlen = nextlen;
+ 	  i++;
+ 
+ 	  while (i < numCodes && curlen == length[i])
+ 	    {
+ 	      i++;
+ 	      if (++count >= max_count)
+ 		break;
+ 	    }
+ 
+ 	  if (count < min_count)
+ 	    {
+ 	      while (count-- > 0)
+ 		blTree.writeSymbol(curlen);
+ 	    }
+ 	  else if (curlen != 0)
+ 	    {
+ 	      blTree.writeSymbol(REP_3_6);
+ 	      pending.writeBits(count - 3, 2);
+ 	    }
+ 	  else if (count <= 10)
+ 	    {
+ 	      blTree.writeSymbol(REP_3_10);
+ 	      pending.writeBits(count - 3, 3);
+ 	    }
+ 	  else
+ 	    {
+ 	      blTree.writeSymbol(REP_11_138);
+ 	      pending.writeBits(count - 11, 7);
+ 	    }
+ 	}
+     }
+   }
+ 
+ 
+ 
+   DeflaterPending pending;
+   private Tree literalTree, distTree, blTree;
+ 
+   private short d_buf[];
+   private byte l_buf[];
+   private int last_lit;
+   private int extra_bits;
+ 
+   private static short staticLCodes[];
+   private static byte  staticLLength[];
+   private static short staticDCodes[];
+   private static byte  staticDLength[];
+ 
+   /**
+    * Reverse the bits of a 16 bit value.
+    */
+   static short bitReverse(int value) {
+     return (short) (bit4Reverse.charAt(value & 0xf) << 12
+ 		    | bit4Reverse.charAt((value >> 4) & 0xf) << 8
+ 		    | bit4Reverse.charAt((value >> 8) & 0xf) << 4
+ 		    | bit4Reverse.charAt(value >> 12));
+   }
+ 
+   static {
+     /* See RFC 1951 3.2.6 */
+     /* Literal codes */
+     staticLCodes = new short[LITERAL_NUM];
+     staticLLength = new byte[LITERAL_NUM];
+     int i = 0;
+     while (i < 144) {
+       staticLCodes[i] = bitReverse((0x030 + i) << 8);
+       staticLLength[i++] = 8;
+     }
+     while (i < 256) {
+       staticLCodes[i] = bitReverse((0x190 - 144 + i) << 7);
+       staticLLength[i++] = 9;
+     }
+     while (i < 280) {
+       staticLCodes[i] = bitReverse((0x000 - 256 + i) << 9);
+       staticLLength[i++] = 7;
+     }
+     while (i < LITERAL_NUM) {
+       staticLCodes[i] = bitReverse((0x0c0 - 280 + i)  << 8);
+       staticLLength[i++] = 8;
+     }
+ 
+     /* Distant codes */
+     staticDCodes = new short[DIST_NUM];
+     staticDLength = new byte[DIST_NUM];
+     for (i = 0; i < DIST_NUM; i++) {
+       staticDCodes[i] = bitReverse(i << 11);
+       staticDLength[i] = 5;
+     }
+   }
+     
+   public DeflaterHuffman(DeflaterPending pending) 
+   {
+     this.pending = pending;
+ 
+     literalTree = new Tree(LITERAL_NUM, 257, 15);
+     distTree    = new Tree(DIST_NUM, 1, 15);
+     blTree      = new Tree(BITLEN_NUM, 4, 7);
+ 
+     d_buf = new short[BUFSIZE];
+     l_buf = new byte [BUFSIZE];
+   }
+ 
+   public final void reset() {
+     last_lit = 0;
+     extra_bits = 0;
+     literalTree.reset();
+     distTree.reset();
+     blTree.reset();
+   }
+ 
+   private int l_code(int len) {
+     if (len == 255)
+       return 285;
+ 
+     int code = 257;
+     while (len >= 8)
+       {
+ 	code += 4;
+ 	len >>= 1;
+       }
+     return code + len;
+   }
+ 
+   private int d_code(int distance) {
+     int code = 0;
+     while (distance >= 4)
+       {
+ 	code += 2;
+ 	distance >>= 1;
+       }
+     return code + distance;
+   }
+ 
+   public void sendAllTrees(int blTreeCodes) {
+     blTree.buildCodes();
+     literalTree.buildCodes();
+     distTree.buildCodes();
+     pending.writeBits(literalTree.numCodes - 257, 5);
+     pending.writeBits(distTree.numCodes - 1, 5);
+     pending.writeBits(blTreeCodes - 4, 4);
+     for (int rank = 0; rank < blTreeCodes; rank++)
+       pending.writeBits(blTree.length[BL_ORDER[rank]], 3);
+     literalTree.writeTree(blTree);
+     distTree.writeTree(blTree);
+     if (DeflaterConstants.DEBUGGING)
+       blTree.checkEmpty();
+   }
+ 
+   public void compressBlock() {
+     for (int i = 0; i < last_lit; i++) 
+       {
+ 	int litlen = l_buf[i] & 0xff;
+ 	int dist = d_buf[i];
+ 	if (dist-- != 0)
+ 	  {
+ 	    if (DeflaterConstants.DEBUGGING)
+ 	      System.err.print("["+(dist+1)+","+(litlen+3)+"]: ");
+ 
+ 	    int lc = l_code(litlen);
+ 	    literalTree.writeSymbol(lc);
+ 
+ 	    int bits = (lc - 261) / 4;
+ 	    if (bits > 0 && bits <= 5)
+ 	      pending.writeBits(litlen & ((1 << bits) - 1), bits);
+ 
+ 	    int dc = d_code(dist);
+ 	    distTree.writeSymbol(dc);
+ 
+ 	    bits = dc / 2 - 1;
+ 	    if (bits > 0)
+ 	      pending.writeBits(dist & ((1 << bits) - 1), bits);
+ 	  }
+ 	else
+ 	  {
+ 	    if (DeflaterConstants.DEBUGGING)
+ 	      {
+ 		if (litlen > 32 && litlen < 127)
+ 		  System.err.print("("+(char)litlen+"): ");
+ 		else
+ 		  System.err.print("{"+litlen+"}: ");
+ 	      }
+ 	    literalTree.writeSymbol(litlen);
+ 	  }
+       }
+     if (DeflaterConstants.DEBUGGING)
+       System.err.print("EOF: ");
+     literalTree.writeSymbol(EOF_SYMBOL);
+     if (DeflaterConstants.DEBUGGING)
+       {
+ 	literalTree.checkEmpty();
+ 	distTree.checkEmpty();
+       }
+   }
+ 
+   public void flushStoredBlock(byte[] stored, 
+ 			       int stored_offset, int stored_len,
+ 			       boolean lastBlock) {
+     if (DeflaterConstants.DEBUGGING)
+       System.err.println("Flushing stored block "+ stored_len);
+     pending.writeBits((DeflaterConstants.STORED_BLOCK << 1)
+ 		      + (lastBlock ? 1 : 0), 3);
+     pending.alignToByte();
+     pending.writeShort(stored_len);
+     pending.writeShort(~stored_len);
+     pending.writeBlock(stored, stored_offset, stored_len);
+     reset();
+   }
+ 
+   public void flushBlock(byte[] stored, int stored_offset, int stored_len,
+ 			 boolean lastBlock) {
+     literalTree.freqs[EOF_SYMBOL]++;
+ 
+     /* Build trees */
+     literalTree.buildTree();
+     distTree.buildTree();
+ 
+     /* Calculate bitlen frequency */
+     literalTree.calcBLFreq(blTree);
+     distTree.calcBLFreq(blTree);
+ 
+     /* Build bitlen tree */
+     blTree.buildTree();
+ 
+     int blTreeCodes = 4;
+     for (int i = 18; i > blTreeCodes; i--)
+       {
+ 	if (blTree.length[BL_ORDER[i]] > 0)
+ 	  blTreeCodes = i+1;
+       }
+     int opt_len = 14 + blTreeCodes * 3 + blTree.getEncodedLength()
+       + literalTree.getEncodedLength() + distTree.getEncodedLength()
+       + extra_bits;
+ 
+     int static_len = extra_bits;
+     for (int i = 0; i < LITERAL_NUM; i++)
+       static_len += literalTree.freqs[i] * staticLLength[i];
+     for (int i = 0; i < DIST_NUM; i++)
+       static_len += distTree.freqs[i] * staticDLength[i];
+     if (opt_len >= static_len)
+       {
+ 	/* Force static trees */
+ 	opt_len = static_len;
+       }
+ 
+     if (stored_offset >= 0 && stored_len+4 < opt_len >> 3)
+       {
+ 	/* Store Block */
+ 	if (DeflaterConstants.DEBUGGING)
+ 	  System.err.println("Storing, since " + stored_len + " < " + opt_len
+ 			     + " <= " + static_len);
+ 	flushStoredBlock(stored, stored_offset, stored_len, lastBlock);
+       }
+     else if (opt_len == static_len)
+       {
+ 	/* Encode with static tree */
+ 	pending.writeBits((DeflaterConstants.STATIC_TREES << 1)
+ 			  + (lastBlock ? 1 : 0), 3);
+ 	literalTree.setStaticCodes(staticLCodes, staticLLength);
+ 	distTree.setStaticCodes(staticDCodes, staticDLength);
+ 	compressBlock();
+ 	reset();
+       }
+     else
+       {
+ 	/* Encode with dynamic tree */
+ 	pending.writeBits((DeflaterConstants.DYN_TREES << 1)
+ 			  + (lastBlock ? 1 : 0), 3);
+ 	sendAllTrees(blTreeCodes);
+ 	compressBlock();
+ 	reset();
+       }
+   }
+ 
+   public final boolean isFull()
+   {
+     return last_lit == BUFSIZE;
+   }
+ 
+   public final boolean tallyLit(int lit) 
+   {
+     if (DeflaterConstants.DEBUGGING)
+       {
+ 	if (lit > 32 && lit < 127)
+ 	  System.err.println("("+(char)lit+")");
+ 	else
+ 	  System.err.println("{"+lit+"}");
+       }
+     d_buf[last_lit] = 0;
+     l_buf[last_lit++] = (byte) lit;
+     literalTree.freqs[lit]++;
+     return last_lit == BUFSIZE;
+   }
+ 
+   public final boolean tallyDist(int dist, int len) 
+   {
+     if (DeflaterConstants.DEBUGGING)
+       System.err.println("["+dist+","+len+"]");
+ 
+     d_buf[last_lit] = (short) dist;
+     l_buf[last_lit++] = (byte) (len - 3);
+ 
+     int lc = l_code(len-3);
+     literalTree.freqs[lc]++;
+     if (lc >= 265 && lc < 285)
+       extra_bits += (lc - 261) / 4;
+ 
+     int dc = d_code(dist-1);
+     distTree.freqs[dc]++;
+     if (dc >= 4)
+       extra_bits += dc / 2 - 1;
+     return last_lit == BUFSIZE;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterOutputStream.java gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterOutputStream.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,198 ----
+ /* DeflaterOutputStream.java - Output filter for compressing.
+    Copyright (C) 1999, 2000, 2001, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.zip;
+ 
+ import java.io.FilterOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /* Written using on-line Java Platform 1.2 API Specification
+  * and JCL book.
+  * Believed complete and correct.
+  */
+ 
+ /**
+  * This is a special FilterOutputStream deflating the bytes that are
+  * written through it.  It uses the Deflater for deflating.
+  *
+  * A special thing to be noted is that flush() doesn't flush
+  * everything in Sun's JDK, but it does so in jazzlib. This is because
+  * Sun's Deflater doesn't have a way to flush() everything, without
+  * finishing the stream.
+  *
+  * @author Tom Tromey, Jochen Hoenicke
+  * @date Jan 11, 2001 
+  */
+ public class DeflaterOutputStream extends FilterOutputStream
+ {
+   /** 
+    * This buffer is used temporarily to retrieve the bytes from the
+    * deflater and write them to the underlying output stream.  
+    */
+   protected byte[] buf;
+ 
+   /** 
+    * The deflater which is used to deflate the stream.
+    */
+   protected Deflater def;
+   
+   /**
+    * Deflates everything in the def's input buffers.  This will call
+    * <code>def.deflate()</code> until all bytes from the input buffers
+    * are processed.
+    */
+   protected void deflate() throws IOException
+   {
+     while (! def.needsInput())
+       {
+ 	int len = def.deflate(buf, 0, buf.length);
+ 
+ 	//	System.err.println("DOS deflated " + len + " out of " + buf.length);
+ 	if (len <= 0)
+ 	  break;
+ 	out.write(buf, 0, len);
+       }
+ 
+     if (! def.needsInput())
+       throw new InternalError("Can't deflate all input?");
+   }
+ 
+   /** 
+    * Creates a new DeflaterOutputStream with a default Deflater and
+    * default buffer size.
+    * @param out the output stream where deflated output should be written.
+    */
+   public DeflaterOutputStream(OutputStream out)
+   {
+     this(out, new Deflater(), 4096);
+   }
+ 
+   /** 
+    * Creates a new DeflaterOutputStream with the given Deflater and
+    * default buffer size.
+    * @param out the output stream where deflated output should be written.
+    * @param defl the underlying deflater.
+    */
+   public DeflaterOutputStream(OutputStream out, Deflater defl)
+   {
+     this(out, defl, 4096);
+   }
+ 
+   /** 
+    * Creates a new DeflaterOutputStream with the given Deflater and
+    * buffer size.
+    * @param out the output stream where deflated output should be written.
+    * @param defl the underlying deflater.
+    * @param bufsize the buffer size.
+    * @exception IllegalArgumentException if bufsize isn't positive.
+    */
+   public DeflaterOutputStream(OutputStream out, Deflater defl, int bufsize)
+   {
+     super(out);
+     if (bufsize <= 0)
+       throw new IllegalArgumentException("bufsize <= 0");
+     buf = new byte[bufsize];
+     def = defl;
+   }
+ 
+   /**  
+    * Flushes the stream by calling flush() on the deflater and then
+    * on the underlying stream.  This ensures that all bytes are
+    * flushed.  This function doesn't work in Sun's JDK, but only in
+    * jazzlib.
+    */
+   public void flush() throws IOException
+   {
+     def.flush();
+     deflate();
+     out.flush();
+   }
+ 
+   /**
+    * Finishes the stream by calling finish() on the deflater.  This
+    * was the only way to ensure that all bytes are flushed in Sun's
+    * JDK.  
+    */
+   public void finish() throws IOException
+   {
+     def.finish();
+     while (! def.finished())
+       {
+ 	int len = def.deflate(buf, 0, buf.length);
+ 	if (len <= 0)
+ 	  break;
+ 	out.write(buf, 0, len);
+       }
+     if (! def.finished())
+       throw new InternalError("Can't deflate all input?");
+     out.flush();
+   }
+ 
+   /**
+    * Calls finish() and closes the stream. 
+    */
+   public void close() throws IOException
+   {
+     finish();
+     out.close();
+   }
+ 
+   /**
+    * Writes a single byte to the compressed output stream.
+    * @param bval the byte value.
+    */
+   public void write(int bval) throws IOException
+   {
+     byte[] b = new byte[1];
+     b[0] = (byte) bval;
+     write(b, 0, 1);
+   }
+ 
+   /**
+    * Writes a len bytes from an array to the compressed stream.
+    * @param buf the byte array.
+    * @param off the offset into the byte array where to start.
+    * @param len the number of bytes to write.
+    */
+   public void write(byte[] buf, int off, int len) throws IOException
+   {
+     def.setInput(buf, off, len);
+     deflate();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterPending.java gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterPending.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/DeflaterPending.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/DeflaterPending.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,54 ----
+ /* java.util.zip.DeflaterPending
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /**
+  * This class stores the pending output of the Deflater.
+  *
+  * @author Jochen Hoenicke
+  * @date Jan 5, 2000 
+  */
+ 
+ class DeflaterPending extends PendingBuffer
+ {
+   public DeflaterPending()
+   {
+     super(DeflaterConstants.PENDING_BUF_SIZE);
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/GZIPInputStream.java gcc-4.1.0/libjava/classpath/java/util/zip/GZIPInputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/GZIPInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/GZIPInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,355 ----
+ /* GZIPInputStream.java - Input filter for reading gzip file
+    Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.zip;
+ 
+ import java.io.EOFException;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * This filter stream is used to decompress a "GZIP" format stream. 
+  * The "GZIP" format is described in RFC 1952.
+  *
+  * @author John Leuner
+  * @author Tom Tromey
+  * @since JDK 1.1
+  */
+ public class GZIPInputStream
+   extends InflaterInputStream
+ {
+   /**
+    * The magic number found at the start of a GZIP stream.
+    */
+   public static final int GZIP_MAGIC = 0x8b1f;
+ 
+   /**
+    * The mask for bit 0 of the flag byte.
+    */
+   static final int FTEXT = 0x1;
+ 
+   /**
+    * The mask for bit 1 of the flag byte.
+    */
+   static final int FHCRC = 0x2;
+ 
+   /**
+    * The mask for bit 2 of the flag byte.
+    */
+   static final int FEXTRA = 0x4;
+ 
+   /**
+    * The mask for bit 3 of the flag byte.
+    */
+   static final int FNAME = 0x8;
+ 
+   /**
+    * The mask for bit 4 of the flag byte.
+    */
+   static final int FCOMMENT = 0x10;
+ 
+   /**
+    * The CRC-32 checksum value for uncompressed data.
+    */
+   protected CRC32 crc; 
+ 
+   /**
+    * Indicates whether or not the end of the stream has been reached.
+    */  
+   protected boolean eos;
+ 
+   /**
+    * Indicates whether or not the GZIP header has been read in.
+    */
+   private boolean readGZIPHeader;
+ 
+   /**
+    * Creates a GZIPInputStream with the default buffer size.
+    *
+    * @param in The stream to read compressed data from 
+    *           (in GZIP format).
+    *
+    * @throws IOException if an error occurs during an I/O operation.
+    */
+   public GZIPInputStream(InputStream in)
+     throws IOException
+   {
+     this(in, 4096);
+   }
+ 
+   /**
+    * Creates a GZIPInputStream with the specified buffer size.
+    *
+    * @param in The stream to read compressed data from 
+    *           (in GZIP format).
+    * @param size The size of the buffer to use.
+    *
+    * @throws IOException if an error occurs during an I/O operation.
+    * @throws IllegalArgumentException if <code>size</code>
+    * is less than or equal to 0.
+    */
+   public GZIPInputStream(InputStream in, int size)
+     throws IOException
+   {
+     super(in, new Inflater(true), size);
+     crc = new CRC32();
+     readHeader();
+   }
+ 
+   /**
+    * Closes the input stream.
+    *
+    * @throws IOException if an error occurs during an I/O operation.
+    */
+   public void close()
+     throws IOException
+   {
+     // Nothing to do here.
+     super.close();
+   }
+ 
+   /**
+    * Reads in GZIP-compressed data and stores it in uncompressed form
+    * into an array of bytes.  The method will block until either
+    * enough input data becomes available or the compressed stream
+    * reaches its end.
+    *
+    * @param buf the buffer into which the uncompressed data will
+    *            be stored.
+    * @param offset the offset indicating where in <code>buf</code>
+    *               the uncompressed data should be placed.
+    * @param len the number of uncompressed bytes to be read.
+    */
+   public int read(byte[] buf, int offset, int len) throws IOException
+   {
+     // We first have to slurp in the GZIP header, then we feed all the
+     // rest of the data to the superclass.
+     //
+     // As we do that we continually update the CRC32. Once the data is
+     // finished, we check the CRC32.
+     //
+     // This means we don't need our own buffer, as everything is done
+     // in the superclass.
+     if (!readGZIPHeader)
+       readHeader();
+ 
+     if (eos)
+       return -1;
+ 
+     //  System.err.println("GZIPIS.read(byte[], off, len ... " + offset + " and len " + len);
+ 
+     /* We don't have to read the header,
+      * so we just grab data from the superclass.
+      */
+     int numRead = super.read(buf, offset, len);
+     if (numRead > 0)
+       crc.update(buf, offset, numRead);
+ 
+     if (inf.finished())
+       readFooter();
+     return numRead;
+   }
+ 
+ 
+   /**
+    * Reads in the GZIP header.
+    */
+   private void readHeader() throws IOException
+   {
+     /* 1. Check the two magic bytes */
+     CRC32 headCRC = new CRC32();
+     int magic = in.read();
+     if (magic < 0)
+     {
+       eos = true;
+       return;
+     }
+     int magic2 = in.read();
+     if ((magic + (magic2 << 8)) != GZIP_MAGIC)
+       throw new IOException("Error in GZIP header, bad magic code");
+     headCRC.update(magic);
+     headCRC.update(magic2);
+     
+     /* 2. Check the compression type (must be 8) */
+     int CM = in.read();
+     if (CM != 8)
+       throw new IOException("Error in GZIP header, data not in deflate format");
+     headCRC.update(CM);
+ 
+     /* 3. Check the flags */
+     int flags = in.read();
+     if (flags < 0)
+       throw new EOFException("Early EOF in GZIP header");
+     headCRC.update(flags);
+     
+     /*    This flag byte is divided into individual bits as follows:
+ 	  
+ 	  bit 0   FTEXT
+ 	  bit 1   FHCRC
+ 	  bit 2   FEXTRA
+ 	  bit 3   FNAME
+ 	  bit 4   FCOMMENT
+ 	  bit 5   reserved
+ 	  bit 6   reserved
+ 	  bit 7   reserved
+     */
+     
+     /* 3.1 Check the reserved bits are zero */    
+     if ((flags & 0xd0) != 0)
+       throw new IOException("Reserved flag bits in GZIP header != 0");
+     
+     /* 4.-6. Skip the modification time, extra flags, and OS type */
+     for (int i=0; i< 6; i++)
+     {
+       int readByte = in.read();
+       if (readByte < 0)
+ 	throw new EOFException("Early EOF in GZIP header");
+       headCRC.update(readByte);
+     }
+     
+     /* 7. Read extra field */
+     if ((flags & FEXTRA) != 0)
+     {
+       /* Skip subfield id */
+       for (int i=0; i< 2; i++)
+       {
+         int readByte = in.read();
+ 	if (readByte < 0)
+ 	  throw new EOFException("Early EOF in GZIP header");
+ 	headCRC.update(readByte);
+       }
+       if (in.read() < 0 || in.read() < 0)
+ 	throw new EOFException("Early EOF in GZIP header");
+ 	
+       int len1, len2, extraLen;
+       len1 = in.read();
+       len2 = in.read();
+       if ((len1 < 0) || (len2 < 0))
+ 	throw new EOFException("Early EOF in GZIP header");
+       headCRC.update(len1);
+       headCRC.update(len2);
+ 
+       extraLen = (len1 << 8) | len2;
+       for (int i = 0; i < extraLen;i++)
+       {
+ 	int readByte = in.read();
+ 	if (readByte < 0)
+ 	  throw new EOFException("Early EOF in GZIP header");
+ 	headCRC.update(readByte);
+       }
+     }
+     
+     /* 8. Read file name */
+     if ((flags & FNAME) != 0)
+     {
+       int readByte;
+       while ( (readByte = in.read()) > 0)
+ 	headCRC.update(readByte);
+       if (readByte < 0)
+ 	throw new EOFException("Early EOF in GZIP file name");
+       headCRC.update(readByte);
+     }
+ 
+     /* 9. Read comment */
+     if ((flags & FCOMMENT) != 0)
+     {
+       int readByte;
+       while ( (readByte = in.read()) > 0)
+         headCRC.update(readByte);
+ 
+       if (readByte < 0)
+         throw new EOFException("Early EOF in GZIP comment");
+       headCRC.update(readByte);
+     }
+     
+     /* 10. Read header CRC */
+     if ((flags & FHCRC) != 0)
+     {
+       int tempByte;
+       int crcval = in.read();
+       if (crcval < 0)
+         throw new EOFException("Early EOF in GZIP header");
+ 	
+       tempByte = in.read();
+       if (tempByte < 0)
+         throw new EOFException("Early EOF in GZIP header");
+ 	
+       crcval = (crcval << 8) | tempByte;
+       if (crcval != ((int) headCRC.getValue() & 0xffff))
+         throw new IOException("Header CRC value mismatch");
+     }
+     
+     readGZIPHeader = true;
+     //System.err.println("Read GZIP header");
+   }
+ 
+   private void readFooter() throws IOException
+   {
+     byte[] footer = new byte[8];
+     int avail = inf.getRemaining();
+     if (avail > 8)
+       avail = 8;
+     System.arraycopy(buf, len - inf.getRemaining(), footer, 0, avail);
+     int needed = 8 - avail;
+     while (needed > 0)
+     {
+       int count = in.read(footer, 8-needed, needed);
+       if (count <= 0)
+ 	throw new EOFException("Early EOF in GZIP footer");
+       needed -= count; //Jewel Jan 16
+     }
+ 
+     int crcval = (footer[0] & 0xff) | ((footer[1] & 0xff) << 8)
+       | ((footer[2] & 0xff) << 16) | (footer[3] << 24);
+     if (crcval != (int) crc.getValue())
+       throw new IOException("GZIP crc sum mismatch, theirs \""
+ 			    + Integer.toHexString(crcval)
+ 			    + "\" and ours \""
+ 			    + Integer.toHexString( (int) crc.getValue()));
+ 
+     int total = (footer[4] & 0xff) | ((footer[5] & 0xff) << 8)
+       | ((footer[6] & 0xff) << 16) | (footer[7] << 24);
+     if (total != inf.getTotalOut())
+       throw new IOException("Number of bytes mismatch");
+ 
+     /* FIXME" XXX Should we support multiple members.
+      * Difficult, since there may be some bytes still in buf
+      */
+     eos = true;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/GZIPOutputStream.java gcc-4.1.0/libjava/classpath/java/util/zip/GZIPOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/GZIPOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/GZIPOutputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,151 ----
+ /* GZIPOutputStream.java - Create a file in gzip format
+    Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * This filter stream is used to compress a stream into a "GZIP" stream. 
+  * The "GZIP" format is described in RFC 1952.
+  *
+  * @author John Leuner
+  * @author Tom Tromey
+  * @since JDK 1.1
+  */
+ 
+ /* Written using on-line Java Platform 1.2 API Specification
+  * and JCL book.
+  * Believed complete and correct.
+  */
+ 
+ public class GZIPOutputStream extends DeflaterOutputStream
+ {
+   /**
+    * CRC-32 value for uncompressed data
+    */
+   protected CRC32 crc;
+ 
+   /**
+    * Creates a GZIPOutputStream with the default buffer size
+    *
+    * @param out The stream to read data (to be compressed) from 
+    * 
+    */
+   public GZIPOutputStream(OutputStream out) throws IOException
+   {
+     this(out, 4096);
+   }
+ 
+   /**
+    * Creates a GZIPOutputStream with the specified buffer size
+    *
+    * @param out The stream to read compressed data from 
+    * @param size Size of the buffer to use 
+    */
+   public GZIPOutputStream(OutputStream out, int size) throws IOException
+   {
+     super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true), size);
+     crc = new CRC32();
+     int mod_time = (int) (System.currentTimeMillis() / 1000L);
+     byte[] gzipHeader =
+       {
+ 	/* The two magic bytes */
+ 	(byte) GZIPInputStream.GZIP_MAGIC,
+ 	(byte) (GZIPInputStream.GZIP_MAGIC >> 8),
+ 	  
+ 	/* The compression type */
+ 	(byte) Deflater.DEFLATED,
+ 	
+         /* The flags (not set) */
+ 	0,
+ 	
+ 	/* The modification time */
+ 	(byte) mod_time, (byte) (mod_time >> 8), 
+ 	(byte) (mod_time >> 16), (byte) (mod_time >> 24), 
+ 
+ 	/* The extra flags */
+ 	0,
+     
+ 	/* The OS type (unknown) */
+ 	(byte) 255
+       };
+ 
+     out.write(gzipHeader);
+     //    System.err.println("wrote GZIP header (" + gzipHeader.length + " bytes )");
+   }
+ 
+   public synchronized void write(byte[] buf, int off, int len)
+     throws IOException
+   {
+     super.write(buf, off, len);
+     crc.update(buf, off, len);
+   }
+ 
+   /**
+    * Writes remaining compressed output data to the output stream
+    * and closes it.
+    */
+   public void close() throws IOException
+   {
+     finish();
+     out.close();
+   }
+ 
+   public void finish() throws IOException
+   {
+     super.finish();
+ 
+     int totalin = def.getTotalIn();
+     int crcval = (int) (crc.getValue() & 0xffffffff);
+ 
+     //    System.err.println("CRC val is " + Integer.toHexString( crcval ) 		       + " and length " + Integer.toHexString(totalin));
+     
+     byte[] gzipFooter = 
+       {
+ 	(byte) crcval, (byte) (crcval >> 8),
+ 	(byte) (crcval >> 16), (byte) (crcval >> 24),
+ 
+ 	(byte) totalin, (byte) (totalin >> 8),
+ 	(byte) (totalin >> 16), (byte) (totalin >> 24)
+       };
+ 
+     out.write(gzipFooter);
+   //    System.err.println("wrote GZIP trailer (" + gzipFooter.length + " bytes )");    
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/Inflater.java gcc-4.1.0/libjava/classpath/java/util/zip/Inflater.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/Inflater.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/Inflater.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,715 ----
+ /* Inflater.java - Decompress a data stream
+    Copyright (C) 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /* Written using on-line Java Platform 1.2 API Specification
+  * and JCL book.
+  * Believed complete and correct.
+  */
+ 
+ /**
+  * Inflater is used to decompress data that has been compressed according 
+  * to the "deflate" standard described in rfc1950.
+  *
+  * The usage is as following.  First you have to set some input with
+  * <code>setInput()</code>, then inflate() it.  If inflate doesn't
+  * inflate any bytes there may be three reasons:
+  * <ul>
+  * <li>needsInput() returns true because the input buffer is empty.
+  * You have to provide more input with <code>setInput()</code>.  
+  * NOTE: needsInput() also returns true when, the stream is finished.
+  * </li>
+  * <li>needsDictionary() returns true, you have to provide a preset 
+  *     dictionary with <code>setDictionary()</code>.</li>
+  * <li>finished() returns true, the inflater has finished.</li>
+  * </ul>
+  * Once the first output byte is produced, a dictionary will not be
+  * needed at a later stage.
+  *
+  * @author John Leuner, Jochen Hoenicke
+  * @author Tom Tromey
+  * @date May 17, 1999
+  * @since JDK 1.1
+  */
+ public class Inflater
+ {
+   /* Copy lengths for literal codes 257..285 */
+   private static final int CPLENS[] = 
+   { 
+     3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+     35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258
+   };
+   
+   /* Extra bits for literal codes 257..285 */  
+   private static final int CPLEXT[] = 
+   { 
+     0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
+     3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0
+   };
+ 
+   /* Copy offsets for distance codes 0..29 */
+   private static final int CPDIST[] = {
+     1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+     257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+     8193, 12289, 16385, 24577
+   };
+   
+   /* Extra bits for distance codes */
+   private static final int CPDEXT[] = {
+     0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
+     7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 
+     12, 12, 13, 13
+   };
+ 
+   /* This are the state in which the inflater can be.  */
+   private static final int DECODE_HEADER           = 0;
+   private static final int DECODE_DICT             = 1;
+   private static final int DECODE_BLOCKS           = 2;
+   private static final int DECODE_STORED_LEN1      = 3;
+   private static final int DECODE_STORED_LEN2      = 4;
+   private static final int DECODE_STORED           = 5;
+   private static final int DECODE_DYN_HEADER       = 6;
+   private static final int DECODE_HUFFMAN          = 7;
+   private static final int DECODE_HUFFMAN_LENBITS  = 8;
+   private static final int DECODE_HUFFMAN_DIST     = 9;
+   private static final int DECODE_HUFFMAN_DISTBITS = 10;
+   private static final int DECODE_CHKSUM           = 11;
+   private static final int FINISHED                = 12;
+ 
+   /** This variable contains the current state. */
+   private int mode;
+ 
+   /**
+    * The adler checksum of the dictionary or of the decompressed
+    * stream, as it is written in the header resp. footer of the
+    * compressed stream.  <br>
+    *
+    * Only valid if mode is DECODE_DICT or DECODE_CHKSUM.
+    */
+   private int readAdler;
+   /** 
+    * The number of bits needed to complete the current state.  This
+    * is valid, if mode is DECODE_DICT, DECODE_CHKSUM,
+    * DECODE_HUFFMAN_LENBITS or DECODE_HUFFMAN_DISTBITS.  
+    */
+   private int neededBits;
+   private int repLength, repDist;
+   private int uncomprLen;
+   /**
+    * True, if the last block flag was set in the last block of the
+    * inflated stream.  This means that the stream ends after the
+    * current block.  
+    */
+   private boolean isLastBlock;
+ 
+   /**
+    * The total number of inflated bytes.
+    */
+   private int totalOut;
+   /**
+    * The total number of bytes set with setInput().  This is not the
+    * value returned by getTotalIn(), since this also includes the 
+    * unprocessed input.
+    */
+   private int totalIn;
+   /**
+    * This variable stores the nowrap flag that was given to the constructor.
+    * True means, that the inflated stream doesn't contain a header nor the
+    * checksum in the footer.
+    */
+   private boolean nowrap;
+ 
+   private StreamManipulator input;
+   private OutputWindow outputWindow;
+   private InflaterDynHeader dynHeader;
+   private InflaterHuffmanTree litlenTree, distTree;
+   private Adler32 adler;
+ 
+   /**
+    * Creates a new inflater.
+    */
+   public Inflater ()
+   {
+     this (false);
+   }
+ 
+   /**
+    * Creates a new inflater.
+    * @param nowrap true if no header and checksum field appears in the
+    * stream.  This is used for GZIPed input.  For compatibility with
+    * Sun JDK you should provide one byte of input more than needed in
+    * this case.
+    */
+   public Inflater (boolean nowrap)
+   {
+     this.nowrap = nowrap;
+     this.adler = new Adler32();
+     input = new StreamManipulator();
+     outputWindow = new OutputWindow();
+     mode = nowrap ? DECODE_BLOCKS : DECODE_HEADER;
+   }
+ 
+   /**
+    * Finalizes this object.
+    */
+   protected void finalize ()
+   {
+     /* Exists only for compatibility */
+   }
+ 
+   /**
+    * Frees all objects allocated by the inflater.  There's no reason
+    * to call this, since you can just rely on garbage collection (even
+    * for the Sun implementation).  Exists only for compatibility
+    * with Sun's JDK, where the compressor allocates native memory.
+    * If you call any method (even reset) afterwards the behaviour is
+    * <i>undefined</i>.  
+    * @deprecated Just clear all references to inflater instead.
+    */
+   public void end ()
+   {
+     outputWindow = null;
+     input = null;
+     dynHeader = null;
+     litlenTree = null;
+     distTree = null;
+     adler = null;
+   }
+ 
+   /**
+    * Returns true, if the inflater has finished.  This means, that no
+    * input is needed and no output can be produced.
+    */
+   public boolean finished() 
+   {
+     return mode == FINISHED && outputWindow.getAvailable() == 0;
+   }
+ 
+   /**
+    * Gets the adler checksum.  This is either the checksum of all
+    * uncompressed bytes returned by inflate(), or if needsDictionary()
+    * returns true (and thus no output was yet produced) this is the
+    * adler checksum of the expected dictionary.
+    * @returns the adler checksum.
+    */
+   public int getAdler()
+   {
+     return needsDictionary() ? readAdler : (int) adler.getValue();
+   }
+   
+   /**
+    * Gets the number of unprocessed input.  Useful, if the end of the
+    * stream is reached and you want to further process the bytes after
+    * the deflate stream.  
+    * @return the number of bytes of the input which were not processed.
+    */
+   public int getRemaining()
+   {
+     return input.getAvailableBytes();
+   }
+   
+   /**
+    * Gets the total number of processed compressed input bytes.
+    * @return the total number of bytes of processed input bytes.
+    */
+   public int getTotalIn()
+   {
+     return totalIn - getRemaining();
+   }
+ 
+   /**
+    * Gets the total number of output bytes returned by inflate().
+    * @return the total number of output bytes.
+    */
+   public int getTotalOut()
+   {
+     return totalOut;
+   }
+ 
+   /**
+    * Inflates the compressed stream to the output buffer.  If this
+    * returns 0, you should check, whether needsDictionary(),
+    * needsInput() or finished() returns true, to determine why no 
+    * further output is produced.
+    * @param buf the output buffer.
+    * @return the number of bytes written to the buffer, 0 if no further
+    * output can be produced.  
+    * @exception DataFormatException if deflated stream is invalid.
+    * @exception IllegalArgumentException if buf has length 0.
+    */
+   public int inflate (byte[] buf) throws DataFormatException
+   {
+     return inflate (buf, 0, buf.length);
+   }
+ 
+   /**
+    * Inflates the compressed stream to the output buffer.  If this
+    * returns 0, you should check, whether needsDictionary(),
+    * needsInput() or finished() returns true, to determine why no 
+    * further output is produced.
+    * @param buf the output buffer.
+    * @param off the offset into buffer where the output should start.
+    * @param len the maximum length of the output.
+    * @return the number of bytes written to the buffer, 0 if no further
+    * output can be produced.  
+    * @exception DataFormatException if deflated stream is invalid.
+    * @exception IndexOutOfBoundsException if the off and/or len are wrong.
+    */
+   public int inflate (byte[] buf, int off, int len) throws DataFormatException
+   {
+     /* Special case: len may be zero */
+     if (len == 0)
+       return 0;
+     /* Check for correct buff, off, len triple */
+     if (0 > off || off > off + len || off + len > buf.length)
+       throw new ArrayIndexOutOfBoundsException();
+     int count = 0;
+     int more;
+     do
+       {
+ 	if (mode != DECODE_CHKSUM)
+ 	  {
+ 	    /* Don't give away any output, if we are waiting for the
+ 	     * checksum in the input stream.
+ 	     *
+ 	     * With this trick we have always:
+ 	     *   needsInput() and not finished() 
+ 	     *   implies more output can be produced.  
+ 	     */
+ 	    more = outputWindow.copyOutput(buf, off, len);
+ 	    adler.update(buf, off, more);
+ 	    off += more;
+ 	    count += more;
+ 	    totalOut += more;
+ 	    len -= more;
+ 	    if (len == 0)
+ 	      return count;
+ 	  }
+       }
+     while (decode() || (outputWindow.getAvailable() > 0
+ 			&& mode != DECODE_CHKSUM));
+     return count;
+   }
+ 
+   /**
+    * Returns true, if a preset dictionary is needed to inflate the input.
+    */
+   public boolean needsDictionary ()
+   {
+     return mode == DECODE_DICT && neededBits == 0;
+   }
+ 
+   /**
+    * Returns true, if the input buffer is empty.
+    * You should then call setInput(). <br>
+    *
+    * <em>NOTE</em>: This method also returns true when the stream is finished.
+    */
+   public boolean needsInput () 
+   {
+     return input.needsInput ();
+   }
+ 
+   /**
+    * Resets the inflater so that a new stream can be decompressed.  All
+    * pending input and output will be discarded.
+    */
+   public void reset ()
+   {
+     mode = nowrap ? DECODE_BLOCKS : DECODE_HEADER;
+     totalIn = totalOut = 0;
+     input.reset();
+     outputWindow.reset();
+     dynHeader = null;
+     litlenTree = null;
+     distTree = null;
+     isLastBlock = false;
+     adler.reset();
+   }
+ 
+   /**
+    * Sets the preset dictionary.  This should only be called, if
+    * needsDictionary() returns true and it should set the same
+    * dictionary, that was used for deflating.  The getAdler()
+    * function returns the checksum of the dictionary needed.
+    * @param buffer the dictionary.
+    * @exception IllegalStateException if no dictionary is needed.
+    * @exception IllegalArgumentException if the dictionary checksum is
+    * wrong.  
+    */
+   public void setDictionary (byte[] buffer)
+   {
+     setDictionary(buffer, 0, buffer.length);
+   }
+ 
+   /**
+    * Sets the preset dictionary.  This should only be called, if
+    * needsDictionary() returns true and it should set the same
+    * dictionary, that was used for deflating.  The getAdler()
+    * function returns the checksum of the dictionary needed.
+    * @param buffer the dictionary.
+    * @param off the offset into buffer where the dictionary starts.
+    * @param len the length of the dictionary.
+    * @exception IllegalStateException if no dictionary is needed.
+    * @exception IllegalArgumentException if the dictionary checksum is
+    * wrong.  
+    * @exception IndexOutOfBoundsException if the off and/or len are wrong.
+    */
+   public void setDictionary (byte[] buffer, int off, int len)
+   {
+     if (!needsDictionary())
+       throw new IllegalStateException();
+ 
+     adler.update(buffer, off, len);
+     if ((int) adler.getValue() != readAdler)
+       throw new IllegalArgumentException("Wrong adler checksum");
+     adler.reset();
+     outputWindow.copyDict(buffer, off, len);
+     mode = DECODE_BLOCKS;
+   }
+ 
+   /**
+    * Sets the input.  This should only be called, if needsInput()
+    * returns true.
+    * @param buf the input.
+    * @exception IllegalStateException if no input is needed.
+    */
+   public void setInput (byte[] buf) 
+   {
+     setInput (buf, 0, buf.length);
+   }
+ 
+   /**
+    * Sets the input.  This should only be called, if needsInput()
+    * returns true.
+    * @param buf the input.
+    * @param off the offset into buffer where the input starts.
+    * @param len the length of the input.  
+    * @exception IllegalStateException if no input is needed.
+    * @exception IndexOutOfBoundsException if the off and/or len are wrong.
+    */
+   public void setInput (byte[] buf, int off, int len) 
+   {
+     input.setInput (buf, off, len);
+     totalIn += len;
+   }
+ 
+   /**
+    * Decodes the deflate header.
+    * @return false if more input is needed. 
+    * @exception DataFormatException if header is invalid.
+    */
+   private boolean decodeHeader () throws DataFormatException
+   {
+     int header = input.peekBits(16);
+     if (header < 0)
+       return false;
+     input.dropBits(16);
+     
+     /* The header is written in "wrong" byte order */
+     header = ((header << 8) | (header >> 8)) & 0xffff;
+     if (header % 31 != 0)
+       throw new DataFormatException("Header checksum illegal");
+     
+     if ((header & 0x0f00) != (Deflater.DEFLATED << 8))
+       throw new DataFormatException("Compression Method unknown");
+ 
+     /* Maximum size of the backwards window in bits. 
+      * We currently ignore this, but we could use it to make the
+      * inflater window more space efficient. On the other hand the
+      * full window (15 bits) is needed most times, anyway.
+      int max_wbits = ((header & 0x7000) >> 12) + 8;
+      */
+     
+     if ((header & 0x0020) == 0) // Dictionary flag?
+       {
+ 	mode = DECODE_BLOCKS;
+       }
+     else
+       {
+ 	mode = DECODE_DICT;
+ 	neededBits = 32;      
+       }
+     return true;
+   }
+    
+   /**
+    * Decodes the dictionary checksum after the deflate header.
+    * @return false if more input is needed. 
+    */
+   private boolean decodeDict ()
+   {
+     while (neededBits > 0)
+       {
+ 	int dictByte = input.peekBits(8);
+ 	if (dictByte < 0)
+ 	  return false;
+ 	input.dropBits(8);
+ 	readAdler = (readAdler << 8) | dictByte;
+ 	neededBits -= 8;
+       }
+     return false;
+   }
+ 
+   /**
+    * Decodes the huffman encoded symbols in the input stream.
+    * @return false if more input is needed, true if output window is
+    * full or the current block ends.
+    * @exception DataFormatException if deflated stream is invalid.  
+    */
+   private boolean decodeHuffman () throws DataFormatException
+   {
+     int free = outputWindow.getFreeSpace();
+     while (free >= 258)
+       {
+ 	int symbol;
+ 	switch (mode)
+ 	  {
+ 	  case DECODE_HUFFMAN:
+ 	    /* This is the inner loop so it is optimized a bit */
+ 	    while (((symbol = litlenTree.getSymbol(input)) & ~0xff) == 0)
+ 	      {
+ 		outputWindow.write(symbol);
+ 		if (--free < 258)
+ 		  return true;
+ 	      } 
+ 	    if (symbol < 257)
+ 	      {
+ 		if (symbol < 0)
+ 		  return false;
+ 		else
+ 		  {
+ 		    /* symbol == 256: end of block */
+ 		    distTree = null;
+ 		    litlenTree = null;
+ 		    mode = DECODE_BLOCKS;
+ 		    return true;
+ 		  }
+ 	      }
+ 		
+ 	    try
+ 	      {
+ 		repLength = CPLENS[symbol - 257];
+ 		neededBits = CPLEXT[symbol - 257];
+ 	      }
+ 	    catch (ArrayIndexOutOfBoundsException ex)
+ 	      {
+ 		throw new DataFormatException("Illegal rep length code");
+ 	      }
+ 	    /* fall through */
+ 	  case DECODE_HUFFMAN_LENBITS:
+ 	    if (neededBits > 0)
+ 	      {
+ 		mode = DECODE_HUFFMAN_LENBITS;
+ 		int i = input.peekBits(neededBits);
+ 		if (i < 0)
+ 		  return false;
+ 		input.dropBits(neededBits);
+ 		repLength += i;
+ 	      }
+ 	    mode = DECODE_HUFFMAN_DIST;
+ 	    /* fall through */
+ 	  case DECODE_HUFFMAN_DIST:
+ 	    symbol = distTree.getSymbol(input);
+ 	    if (symbol < 0)
+ 	      return false;
+ 	    try 
+ 	      {
+ 		repDist = CPDIST[symbol];
+ 		neededBits = CPDEXT[symbol];
+ 	      }
+ 	    catch (ArrayIndexOutOfBoundsException ex)
+ 	      {
+ 		throw new DataFormatException("Illegal rep dist code");
+ 	      }
+ 	    /* fall through */
+ 	  case DECODE_HUFFMAN_DISTBITS:
+ 	    if (neededBits > 0)
+ 	      {
+ 		mode = DECODE_HUFFMAN_DISTBITS;
+ 		int i = input.peekBits(neededBits);
+ 		if (i < 0)
+ 		  return false;
+ 		input.dropBits(neededBits);
+ 		repDist += i;
+ 	      }
+ 	    outputWindow.repeat(repLength, repDist);
+ 	    free -= repLength;
+ 	    mode = DECODE_HUFFMAN;
+ 	    break;
+ 	  default:
+ 	    throw new IllegalStateException();
+ 	  }
+       }
+     return true;
+   }
+ 
+   /**
+    * Decodes the adler checksum after the deflate stream.
+    * @return false if more input is needed. 
+    * @exception DataFormatException if checksum doesn't match.
+    */
+   private boolean decodeChksum () throws DataFormatException
+   {
+     while (neededBits > 0)
+       {
+ 	int chkByte = input.peekBits(8);
+ 	if (chkByte < 0)
+ 	  return false;
+ 	input.dropBits(8);
+ 	readAdler = (readAdler << 8) | chkByte;
+ 	neededBits -= 8;
+       }
+     if ((int) adler.getValue() != readAdler)
+       throw new DataFormatException("Adler chksum doesn't match: "
+ 				    +Integer.toHexString((int)adler.getValue())
+ 				    +" vs. "+Integer.toHexString(readAdler));
+     mode = FINISHED;
+     return false;
+   }
+ 
+   /**
+    * Decodes the deflated stream.
+    * @return false if more input is needed, or if finished. 
+    * @exception DataFormatException if deflated stream is invalid.
+    */
+   private boolean decode () throws DataFormatException
+   {
+     switch (mode) 
+       {
+       case DECODE_HEADER:
+ 	return decodeHeader();
+       case DECODE_DICT:
+ 	return decodeDict();
+       case DECODE_CHKSUM:
+ 	return decodeChksum();
+ 
+       case DECODE_BLOCKS:
+ 	if (isLastBlock)
+ 	  {
+ 	    if (nowrap)
+ 	      {
+ 		mode = FINISHED;
+ 		return false;
+ 	      }
+ 	    else
+ 	      {
+ 		input.skipToByteBoundary();
+ 		neededBits = 32;
+ 		mode = DECODE_CHKSUM;
+ 		return true;
+ 	      }
+ 	  }
+ 
+ 	int type = input.peekBits(3);
+ 	if (type < 0)
+ 	  return false;
+ 	input.dropBits(3);
+ 
+ 	if ((type & 1) != 0)
+ 	  isLastBlock = true;
+ 	switch (type >> 1)
+ 	  {
+ 	  case DeflaterConstants.STORED_BLOCK:
+ 	    input.skipToByteBoundary();
+ 	    mode = DECODE_STORED_LEN1;
+ 	    break;
+ 	  case DeflaterConstants.STATIC_TREES:
+ 	    litlenTree = InflaterHuffmanTree.defLitLenTree;
+ 	    distTree = InflaterHuffmanTree.defDistTree;
+ 	    mode = DECODE_HUFFMAN;
+ 	    break;
+ 	  case DeflaterConstants.DYN_TREES:
+ 	    dynHeader = new InflaterDynHeader();
+ 	    mode = DECODE_DYN_HEADER;
+ 	    break;
+ 	  default:
+ 	    throw new DataFormatException("Unknown block type "+type);
+ 	  }
+ 	return true;
+ 
+       case DECODE_STORED_LEN1:
+ 	{
+ 	  if ((uncomprLen = input.peekBits(16)) < 0)
+ 	    return false;
+ 	  input.dropBits(16);
+ 	  mode = DECODE_STORED_LEN2;
+ 	}
+ 	/* fall through */
+       case DECODE_STORED_LEN2:
+ 	{
+ 	  int nlen = input.peekBits(16);
+ 	  if (nlen < 0)
+ 	    return false;
+ 	  input.dropBits(16);
+ 	  if (nlen != (uncomprLen ^ 0xffff))
+ 	    throw new DataFormatException("broken uncompressed block");
+ 	  mode = DECODE_STORED;
+ 	}
+ 	/* fall through */
+       case DECODE_STORED:
+ 	{
+ 	  int more = outputWindow.copyStored(input, uncomprLen);
+ 	  uncomprLen -= more;
+ 	  if (uncomprLen == 0)
+ 	    {
+ 	      mode = DECODE_BLOCKS;
+ 	      return true;
+ 	    }
+ 	  return !input.needsInput();
+ 	}
+ 
+       case DECODE_DYN_HEADER:
+ 	if (!dynHeader.decode(input))
+ 	  return false;
+ 	litlenTree = dynHeader.buildLitLenTree();
+ 	distTree = dynHeader.buildDistTree();
+ 	mode = DECODE_HUFFMAN;
+ 	/* fall through */
+       case DECODE_HUFFMAN:
+       case DECODE_HUFFMAN_LENBITS:
+       case DECODE_HUFFMAN_DIST:
+       case DECODE_HUFFMAN_DISTBITS:
+ 	return decodeHuffman();
+       case FINISHED:
+ 	return false;
+       default:
+ 	throw new IllegalStateException();
+       }	
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/InflaterDynHeader.java gcc-4.1.0/libjava/classpath/java/util/zip/InflaterDynHeader.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/InflaterDynHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/InflaterDynHeader.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,203 ----
+ /* java.util.zip.InflaterDynHeader
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ class InflaterDynHeader
+ {
+   private static final int LNUM   = 0;
+   private static final int DNUM   = 1;
+   private static final int BLNUM  = 2;
+   private static final int BLLENS = 3;
+   private static final int LENS   = 4;
+   private static final int REPS   = 5;
+ 
+   private static final int repMin[]  = { 3, 3, 11 };
+   private static final int repBits[] = { 2, 3,  7 };
+ 
+   
+   private byte[] blLens;
+   private byte[] litdistLens;
+ 
+   private InflaterHuffmanTree blTree;
+   
+   private int mode;
+   private int lnum, dnum, blnum, num;
+   private int repSymbol;
+   private byte lastLen;
+   private int ptr;
+ 
+   private static final int[] BL_ORDER =
+   { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
+   
+   public InflaterDynHeader()
+   {
+   }
+   
+   public boolean decode(StreamManipulator input) throws DataFormatException
+   {
+   decode_loop:
+     for (;;)
+       {
+ 	switch (mode)
+ 	  {
+ 	  case LNUM:
+ 	    lnum = input.peekBits(5);
+ 	    if (lnum < 0)
+ 	      return false;
+ 	    lnum += 257;
+ 	    input.dropBits(5);
+ //  	    System.err.println("LNUM: "+lnum);
+ 	    mode = DNUM;
+ 	    /* fall through */
+ 	  case DNUM:
+ 	    dnum = input.peekBits(5);
+ 	    if (dnum < 0)
+ 	      return false;
+ 	    dnum++;
+ 	    input.dropBits(5);
+ //  	    System.err.println("DNUM: "+dnum);
+ 	    num = lnum+dnum;
+ 	    litdistLens = new byte[num];
+ 	    mode = BLNUM;
+ 	    /* fall through */
+ 	  case BLNUM:
+ 	    blnum = input.peekBits(4);
+ 	    if (blnum < 0)
+ 	      return false;
+ 	    blnum += 4;
+ 	    input.dropBits(4);
+ 	    blLens = new byte[19];
+ 	    ptr = 0;
+ //  	    System.err.println("BLNUM: "+blnum);
+ 	    mode = BLLENS;
+ 	    /* fall through */
+ 	  case BLLENS:
+ 	    while (ptr < blnum)
+ 	      {
+ 		int len = input.peekBits(3);
+ 		if (len < 0)
+ 		  return false;
+ 		input.dropBits(3);
+ //  		System.err.println("blLens["+BL_ORDER[ptr]+"]: "+len);
+ 		blLens[BL_ORDER[ptr]] = (byte) len;
+ 		ptr++;
+ 	      }
+ 	    blTree = new InflaterHuffmanTree(blLens);
+ 	    blLens = null;
+ 	    ptr = 0;
+ 	    mode = LENS;
+ 	    /* fall through */
+ 	  case LENS:
+ 	    {
+ 	      int symbol;
+ 	      while (((symbol = blTree.getSymbol(input)) & ~15) == 0)
+ 		{
+ 		  /* Normal case: symbol in [0..15] */
+ 
+ //  		  System.err.println("litdistLens["+ptr+"]: "+symbol);
+ 		  litdistLens[ptr++] = lastLen = (byte) symbol;
+ 
+ 		  if (ptr == num)
+ 		    {
+ 		      /* Finished */
+ 		      return true;
+ 		    }
+ 		}
+ 	      
+ 	      /* need more input ? */
+ 	      if (symbol < 0)
+ 		return false;
+ 
+ 	      /* otherwise repeat code */
+ 	      if (symbol >= 17)
+ 		{
+ 		  /* repeat zero */
+ //  		  System.err.println("repeating zero");
+ 		  lastLen = 0;
+ 		}
+ 	      else
+ 		{
+ 		  if (ptr == 0)
+ 		    throw new DataFormatException();
+ 		}
+ 	      repSymbol = symbol-16;
+ 	      mode = REPS;
+ 	    }
+ 	    /* fall through */
+ 
+ 	  case REPS:
+ 	    {
+ 	      int bits = repBits[repSymbol];
+ 	      int count = input.peekBits(bits);
+ 	      if (count < 0)
+ 		return false;
+ 	      input.dropBits(bits);
+ 	      count += repMin[repSymbol];
+ //  	      System.err.println("litdistLens repeated: "+count);
+ 
+ 	      if (ptr + count > num)
+ 		throw new DataFormatException();
+ 	      while (count-- > 0)
+ 		litdistLens[ptr++] = lastLen;
+ 
+ 	      if (ptr == num)
+ 		{
+ 		  /* Finished */
+ 		  return true;
+ 		}
+ 	    }
+ 	    mode = LENS;
+ 	    continue decode_loop;
+ 	  }
+       }
+   }
+ 
+   public InflaterHuffmanTree buildLitLenTree() throws DataFormatException
+   {
+     byte[] litlenLens = new byte[lnum];
+     System.arraycopy(litdistLens, 0, litlenLens, 0, lnum);
+     return new InflaterHuffmanTree(litlenLens);
+   }
+ 
+   public InflaterHuffmanTree buildDistTree() throws DataFormatException
+   {
+     byte[] distLens = new byte[dnum];
+     System.arraycopy(litdistLens, lnum, distLens, 0, dnum);
+     return new InflaterHuffmanTree(distLens);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/InflaterHuffmanTree.java gcc-4.1.0/libjava/classpath/java/util/zip/InflaterHuffmanTree.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/InflaterHuffmanTree.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/InflaterHuffmanTree.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,217 ----
+ /* InflaterHuffmanTree.java --
+    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ class InflaterHuffmanTree
+ {
+   private static final int MAX_BITLEN = 15;
+   
+   private short[] tree;
+ 
+   static InflaterHuffmanTree defLitLenTree, defDistTree;
+ 
+   static
+   {
+     try 
+       {
+ 	byte[] codeLengths = new byte[288];
+ 	int i = 0;
+ 	while (i < 144)
+ 	  codeLengths[i++] = 8;
+ 	while (i < 256)
+ 	  codeLengths[i++] = 9;
+ 	while (i < 280)
+ 	  codeLengths[i++] = 7;
+ 	while (i < 288)
+ 	  codeLengths[i++] = 8;
+ 	defLitLenTree = new InflaterHuffmanTree(codeLengths);
+ 	
+ 	codeLengths = new byte[32];
+ 	i = 0;
+ 	while (i < 32)
+ 	  codeLengths[i++] = 5;
+ 	defDistTree = new InflaterHuffmanTree(codeLengths);
+       } 
+     catch (DataFormatException ex)
+       {
+ 	throw new InternalError
+ 	  ("InflaterHuffmanTree: static tree length illegal");
+       }
+   }
+ 
+   /**
+    * Constructs a Huffman tree from the array of code lengths.
+    *
+    * @param codeLengths the array of code lengths
+    */
+   InflaterHuffmanTree(byte[] codeLengths) throws DataFormatException
+   {
+     buildTree(codeLengths);
+   }
+   
+   private void buildTree(byte[] codeLengths) throws DataFormatException
+   {
+     int[] blCount = new int[MAX_BITLEN+1];
+     int[] nextCode = new int[MAX_BITLEN+1];
+     for (int i = 0; i < codeLengths.length; i++)
+       {
+ 	int bits = codeLengths[i];
+ 	if (bits > 0)
+ 	  blCount[bits]++;
+       }
+ 
+     int code = 0;
+     int treeSize = 512;
+     for (int bits = 1; bits <= MAX_BITLEN; bits++)
+       {
+ 	nextCode[bits] = code;
+ 	code += blCount[bits] << (16 - bits);
+ 	if (bits >= 10)
+ 	  {
+ 	    /* We need an extra table for bit lengths >= 10. */
+ 	    int start = nextCode[bits] & 0x1ff80;
+ 	    int end   = code & 0x1ff80;
+ 	    treeSize += (end - start) >> (16 - bits);
+ 	  }
+       }
+     if (code != 65536)
+       throw new DataFormatException("Code lengths don't add up properly.");
+ 
+     /* Now create and fill the extra tables from longest to shortest
+      * bit len.  This way the sub trees will be aligned.
+      */
+     tree = new short[treeSize];
+     int treePtr = 512;
+     for (int bits = MAX_BITLEN; bits >= 10; bits--)
+       {
+ 	int end   = code & 0x1ff80;
+ 	code -= blCount[bits] << (16 - bits);
+ 	int start = code & 0x1ff80;
+ 	for (int i = start; i < end; i += 1 << 7)
+ 	  {
+ 	    tree[DeflaterHuffman.bitReverse(i)]
+ 	      = (short) ((-treePtr << 4) | bits);
+ 	    treePtr += 1 << (bits-9);
+ 	  }
+       }
+     
+     for (int i = 0; i < codeLengths.length; i++)
+       {
+ 	int bits = codeLengths[i];
+ 	if (bits == 0)
+ 	  continue;
+ 	code = nextCode[bits];
+ 	int revcode = DeflaterHuffman.bitReverse(code);
+ 	if (bits <= 9)
+ 	  {
+ 	    do
+ 	      {
+ 		tree[revcode] = (short) ((i << 4) | bits);
+ 		revcode += 1 << bits;
+ 	      }
+ 	    while (revcode < 512);
+ 	  }
+ 	else
+ 	  {
+ 	    int subTree = tree[revcode & 511];
+ 	    int treeLen = 1 << (subTree & 15);
+ 	    subTree = -(subTree >> 4);
+ 	    do
+ 	      { 
+ 		tree[subTree | (revcode >> 9)] = (short) ((i << 4) | bits);
+ 		revcode += 1 << bits;
+ 	      }
+ 	    while (revcode < treeLen);
+ 	  }
+ 	nextCode[bits] = code + (1 << (16 - bits));
+       }
+   }
+ 
+   /**
+    * Reads the next symbol from input.  The symbol is encoded using the
+    * huffman tree.
+    * @param input the input source.
+    * @return the next symbol, or -1 if not enough input is available.
+    */
+   int getSymbol(StreamManipulator input) throws DataFormatException
+   {
+     int lookahead, symbol;
+     if ((lookahead = input.peekBits(9)) >= 0)
+       {
+ 	if ((symbol = tree[lookahead]) >= 0)
+ 	  {
+ 	    input.dropBits(symbol & 15);
+ 	    return symbol >> 4;
+ 	  }
+ 	int subtree = -(symbol >> 4);
+ 	int bitlen = symbol & 15;
+ 	if ((lookahead = input.peekBits(bitlen)) >= 0)
+ 	  {
+ 	    symbol = tree[subtree | (lookahead >> 9)];
+ 	    input.dropBits(symbol & 15);
+ 	    return symbol >> 4;
+ 	  }
+ 	else
+ 	  {
+ 	    int bits = input.getAvailableBits();
+ 	    lookahead = input.peekBits(bits);
+ 	    symbol = tree[subtree | (lookahead >> 9)];
+ 	    if ((symbol & 15) <= bits)
+ 	      {
+ 		input.dropBits(symbol & 15);
+ 		return symbol >> 4;
+ 	      }
+ 	    else
+ 	      return -1;
+ 	  }
+       }
+     else
+       {
+ 	int bits = input.getAvailableBits();
+ 	lookahead = input.peekBits(bits);
+ 	symbol = tree[lookahead];
+ 	if (symbol >= 0 && (symbol & 15) <= bits)
+ 	  {
+ 	    input.dropBits(symbol & 15);
+ 	    return symbol >> 4;
+ 	  }
+ 	else
+ 	  return -1;
+       }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/InflaterInputStream.java gcc-4.1.0/libjava/classpath/java/util/zip/InflaterInputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/InflaterInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/InflaterInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,261 ----
+ /* InflaterInputStream.java - Input stream filter for decompressing
+    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.zip;
+ 
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * This filter stream is used to decompress data compressed in the "deflate"
+  * format. The "deflate" format is described in RFC 1951.
+  *
+  * This stream may form the basis for other decompression filters, such
+  * as the <code>GZIPInputStream</code>.
+  *
+  * @author John Leuner
+  * @author Tom Tromey
+  * @since 1.1
+  */
+ public class InflaterInputStream extends FilterInputStream
+ {
+   /**
+    * Decompressor for this filter 
+    */
+   protected Inflater inf;
+ 
+   /**
+    * Byte array used as a buffer 
+    */
+   protected byte[] buf;
+ 
+   /**
+    * Size of buffer   
+    */
+   protected int len;
+ 
+   // We just use this if we are decoding one byte at a time with the
+   // read() call.
+   private byte[] onebytebuffer = new byte[1];
+ 
+   /**
+    * Create an InflaterInputStream with the default decompresseor
+    * and a default buffer size.
+    *
+    * @param in the InputStream to read bytes from
+    */
+   public InflaterInputStream(InputStream in) 
+   {
+     this(in, new Inflater(), 4096);
+   }
+ 
+   /**
+    * Create an InflaterInputStream with the specified decompresseor
+    * and a default buffer size.
+    *
+    * @param in the InputStream to read bytes from
+    * @param inf the decompressor used to decompress data read from in
+    */
+   public InflaterInputStream(InputStream in, Inflater inf) 
+   {
+     this(in, inf, 4096);
+   }
+ 
+   /**
+    * Create an InflaterInputStream with the specified decompresseor
+    * and a specified buffer size.
+    *
+    * @param in the InputStream to read bytes from
+    * @param inf the decompressor used to decompress data read from in
+    * @param size size of the buffer to use
+    */
+   public InflaterInputStream(InputStream in, Inflater inf, int size) 
+   {
+     super(in);
+ 
+     if (in == null)
+       throw new NullPointerException("in may not be null");
+     if (inf == null)
+       throw new NullPointerException("inf may not be null");
+     if (size < 0)
+       throw new IllegalArgumentException("size may not be negative");
+     
+     this.inf = inf;
+     this.buf = new byte [size];
+   }
+ 
+   /**
+    * Returns 0 once the end of the stream (EOF) has been reached.
+    * Otherwise returns 1.
+    */
+   public int available() throws IOException
+   {
+     // According to the JDK 1.2 docs, this should only ever return 0
+     // or 1 and should not be relied upon by Java programs.
+     if (inf == null)
+       throw new IOException("stream closed");
+     return inf.finished() ? 0 : 1;
+   }
+ 
+   /**
+    * Closes the input stream
+    */
+   public synchronized void close() throws IOException
+   {
+     if (in != null)
+       in.close();
+     in = null;
+   }
+ 
+   /**
+    * Fills the buffer with more data to decompress.
+    */
+   protected void fill() throws IOException
+   {
+     if (in == null)
+       throw new ZipException ("InflaterInputStream is closed");
+     
+     len = in.read(buf, 0, buf.length);
+ 
+     if (len < 0)
+       throw new ZipException("Deflated stream ends early.");
+     
+     inf.setInput(buf, 0, len);
+   }
+ 
+   /**
+    * Reads one byte of decompressed data.
+    *
+    * The byte is in the lower 8 bits of the int.
+    */
+   public int read() throws IOException
+   { 
+     int nread = read(onebytebuffer, 0, 1);
+     if (nread > 0)
+       return onebytebuffer[0] & 0xff;
+     return -1;
+   }
+ 
+   /**
+    * Decompresses data into the byte array
+    *
+    * @param b the array to read and decompress data into
+    * @param off the offset indicating where the data should be placed
+    * @param len the number of bytes to decompress
+    */
+   public int read(byte[] b, int off, int len) throws IOException
+   {
+     if (inf == null)
+       throw new IOException("stream closed");
+     if (len == 0)
+       return 0;
+ 
+     int count = 0;
+     for (;;)
+       {
+ 	
+ 	try
+ 	  {
+ 	    count = inf.inflate(b, off, len);
+ 	  } 
+ 	catch (DataFormatException dfe) 
+ 	  {
+ 	    throw new ZipException(dfe.getMessage());
+ 	  }
+ 
+ 	if (count > 0)
+ 	  return count;
+ 	
+ 	if (inf.needsDictionary()
+ 	    | inf.finished())
+ 	  return -1;
+ 	else if (inf.needsInput())
+ 	  fill();
+ 	else
+ 	  throw new InternalError("Don't know what to do");
+       }
+   }
+ 
+   /**
+    * Skip specified number of bytes of uncompressed data
+    *
+    * @param n number of bytes to skip
+    */
+   public long skip(long n) throws IOException
+   {
+     if (inf == null)
+       throw new IOException("stream closed");
+     if (n < 0)
+       throw new IllegalArgumentException();
+ 
+     if (n == 0)
+       return 0;
+ 
+     int buflen = (int) Math.min(n, 2048);
+     byte[] tmpbuf = new byte[buflen];
+ 
+     long skipped = 0L;
+     while (n > 0L)
+       {
+ 	int numread = read(tmpbuf, 0, buflen);
+ 	if (numread <= 0)
+ 	  break;
+ 	n -= numread;
+ 	skipped += numread;
+ 	buflen = (int) Math.min(n, 2048);
+       }
+ 
+     return skipped;
+  }
+ 
+   public boolean markSupported()
+   {
+     return false;
+   }
+ 
+   public void mark(int readLimit)
+   {
+   }
+ 
+   public void reset() throws IOException
+   {
+     throw new IOException("reset not supported");
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/OutputWindow.java gcc-4.1.0/libjava/classpath/java/util/zip/OutputWindow.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/OutputWindow.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/OutputWindow.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,178 ----
+ /* OutputWindow.java --
+    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /**
+  * Contains the output from the Inflation process.
+  *
+  * We need to have a window so that we can refer backwards into the output stream
+  * to repeat stuff.
+  *
+  * @author John Leuner
+  * @since 1.1
+  */
+ class OutputWindow
+ {
+   private static final int WINDOW_SIZE = 1 << 15;
+   private static final int WINDOW_MASK = WINDOW_SIZE - 1;
+ 
+   private byte[] window = new byte[WINDOW_SIZE]; //The window is 2^15 bytes
+   private int window_end  = 0;
+   private int window_filled = 0;
+ 
+   public void write(int abyte)
+   {
+     if (window_filled++ == WINDOW_SIZE)
+       throw new IllegalStateException("Window full");
+     window[window_end++] = (byte) abyte;
+     window_end &= WINDOW_MASK;
+   }
+ 
+   private void slowRepeat(int rep_start, int len, int dist)
+   {
+     while (len-- > 0)
+       {
+ 	window[window_end++] = window[rep_start++];
+ 	window_end &= WINDOW_MASK;
+ 	rep_start &= WINDOW_MASK;
+       }
+   }
+ 
+   public void repeat(int len, int dist)
+   {
+     if ((window_filled += len) > WINDOW_SIZE)
+       throw new IllegalStateException("Window full");
+ 
+     int rep_start = (window_end - dist) & WINDOW_MASK;
+     int border = WINDOW_SIZE - len;
+     if (rep_start <= border && window_end < border)
+       {
+ 	if (len <= dist)
+ 	  {
+ 	    System.arraycopy(window, rep_start, window, window_end, len);
+ 	    window_end += len;
+ 	  }
+ 	else
+ 	  {
+ 	    /* We have to copy manually, since the repeat pattern overlaps.
+ 	     */
+ 	    while (len-- > 0)
+ 	      window[window_end++] = window[rep_start++];
+ 	  }
+       }
+     else
+       slowRepeat(rep_start, len, dist);
+   }
+ 
+   public int copyStored(StreamManipulator input, int len)
+   {
+     len = Math.min(Math.min(len, WINDOW_SIZE - window_filled), 
+ 		   input.getAvailableBytes());
+     int copied;
+ 
+     int tailLen = WINDOW_SIZE - window_end;
+     if (len > tailLen)
+       {
+ 	copied = input.copyBytes(window, window_end, tailLen);
+ 	if (copied == tailLen)
+ 	  copied += input.copyBytes(window, 0, len - tailLen);
+       }
+     else
+       copied = input.copyBytes(window, window_end, len);
+ 
+     window_end = (window_end + copied) & WINDOW_MASK;
+     window_filled += copied;
+     return copied;
+   }
+ 
+   public void copyDict(byte[] dict, int offset, int len)
+   {
+     if (window_filled > 0)
+       throw new IllegalStateException();
+ 
+     if (len > WINDOW_SIZE)
+       {
+ 	offset += len - WINDOW_SIZE;
+ 	len = WINDOW_SIZE;
+       }
+     System.arraycopy(dict, offset, window, 0, len);
+     window_end = len & WINDOW_MASK;
+   }
+ 
+   public int getFreeSpace()
+   {
+     return WINDOW_SIZE - window_filled;
+   }
+ 
+   public int getAvailable()
+   {
+     return window_filled;
+   }
+ 
+   public int copyOutput(byte[] output, int offset, int len)
+   {
+     int copy_end = window_end;
+     if (len > window_filled)
+       len = window_filled;
+     else
+       copy_end = (window_end - window_filled + len) & WINDOW_MASK;
+ 
+     int copied = len;
+     int tailLen = len - copy_end;
+ 
+     if (tailLen > 0)
+       {
+ 	System.arraycopy(window, WINDOW_SIZE - tailLen,
+ 			 output, offset, tailLen);
+ 	offset += tailLen;
+ 	len = copy_end;
+       }
+     System.arraycopy(window, copy_end - len, output, offset, len);
+     window_filled -= copied;
+     if (window_filled < 0)
+       throw new IllegalStateException();
+     return copied;
+   }
+ 
+   public void reset() {
+     window_filled = window_end = 0;
+   }
+ }
+ 
+ 
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/PendingBuffer.java gcc-4.1.0/libjava/classpath/java/util/zip/PendingBuffer.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/PendingBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/PendingBuffer.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,200 ----
+ /* java.util.zip.PendingBuffer
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /**
+  * This class is general purpose class for writing data to a buffer.
+  *
+  * It allows you to write bits as well as bytes 
+  *
+  * Based on DeflaterPending.java
+  *
+  * @author Jochen Hoenicke
+  * @date Jan 5, 2000 
+  */
+ 
+ class PendingBuffer
+ {
+   protected byte[] buf;
+   int    start;
+   int    end;
+ 
+   int    bits;
+   int    bitCount;
+ 
+   public PendingBuffer()
+   {
+     this( 4096 );
+   }
+ 
+   public PendingBuffer(int bufsize)
+   {
+     buf = new byte[bufsize];
+   }
+ 
+   public final void reset() {
+     start = end = bitCount = 0;
+   }
+ 
+   public final void writeByte(int b) 
+   {
+     if (DeflaterConstants.DEBUGGING && start != 0)
+       throw new IllegalStateException();
+     buf[end++] = (byte) b;
+   }
+ 
+   public final void writeShort(int s) 
+   {
+     if (DeflaterConstants.DEBUGGING && start != 0)
+       throw new IllegalStateException();
+     buf[end++] = (byte) s;
+     buf[end++] = (byte) (s >> 8);
+   }
+ 
+   public final void writeInt(int s) 
+   {
+     if (DeflaterConstants.DEBUGGING && start != 0)
+       throw new IllegalStateException();
+     buf[end++] = (byte) s;
+     buf[end++] = (byte) (s >> 8);
+     buf[end++] = (byte) (s >> 16);
+     buf[end++] = (byte) (s >> 24);
+   }
+ 
+   public final void writeBlock(byte[] block, int offset, int len) 
+   {
+     if (DeflaterConstants.DEBUGGING && start != 0)
+       throw new IllegalStateException();
+     System.arraycopy(block, offset, buf, end, len);
+     end += len;
+   }
+ 
+   public final int getBitCount() {
+     return bitCount;
+   }
+ 
+   public final void alignToByte() {
+     if (DeflaterConstants.DEBUGGING && start != 0)
+       throw new IllegalStateException();
+     if (bitCount > 0)
+       {
+ 	buf[end++] = (byte) bits;
+ 	if (bitCount > 8)
+ 	  buf[end++] = (byte) (bits >>> 8);
+       }
+     bits = 0;
+     bitCount = 0;
+   }
+ 
+   public final void writeBits(int b, int count)
+   {
+      if (DeflaterConstants.DEBUGGING && start != 0)
+        throw new IllegalStateException();
+      if (DeflaterConstants.DEBUGGING)
+        System.err.println("writeBits("+Integer.toHexString(b)+","+count+")");
+     bits |= b << bitCount;
+     bitCount += count;
+     if (bitCount >= 16) {
+       buf[end++] = (byte) bits;
+       buf[end++] = (byte) (bits >>> 8);
+       bits >>>= 16;
+       bitCount -= 16;
+     }
+   }
+ 
+   public final void writeShortMSB(int s) {
+     if (DeflaterConstants.DEBUGGING && start != 0)
+       throw new IllegalStateException();
+     buf[end++] = (byte) (s >> 8);
+     buf[end++] = (byte) s;
+   }
+ 
+   public final boolean isFlushed() {
+     return end == 0;
+   }
+ 
+   /**
+    * Flushes the pending buffer into the given output array.  If the
+    * output array is to small, only a partial flush is done.
+    *
+    * @param output the output array;
+    * @param offset the offset into output array;
+    * @param length the maximum number of bytes to store;
+    * @exception IndexOutOfBoundsException if offset or length are
+    * invalid.
+    */
+   public final int flush(byte[] output, int offset, int length) {
+     if (bitCount >= 8)
+       {
+ 	buf[end++] = (byte) bits;
+ 	bits >>>= 8;
+ 	bitCount -= 8;
+       }
+     if (length > end - start)
+       {
+ 	length = end - start;
+ 	System.arraycopy(buf, start, output, offset, length);
+ 	start = 0;
+ 	end = 0;
+       }
+     else
+       {
+ 	System.arraycopy(buf, start, output, offset, length);
+ 	start += length;
+       }
+     return length;
+   }
+ 
+   /**
+    * Flushes the pending buffer and returns that data in a new array
+    * 
+    * @return the output stream
+    */
+ 
+   public final byte[] toByteArray()
+   {
+     byte[] ret = new byte[ end - start ];
+     System.arraycopy(buf, start, ret, 0, ret.length);
+     start = 0;
+     end = 0;
+     return ret;
+   }
+ 
+ 
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/StreamManipulator.java gcc-4.1.0/libjava/classpath/java/util/zip/StreamManipulator.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/StreamManipulator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/StreamManipulator.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,216 ----
+ /* java.util.zip.StreamManipulator
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ /**
+  * This class allows us to retrieve a specified amount of bits from
+  * the input buffer, as well as copy big byte blocks.
+  *
+  * It uses an int buffer to store up to 31 bits for direct
+  * manipulation.  This guarantees that we can get at least 16 bits,
+  * but we only need at most 15, so this is all safe.
+  *
+  * There are some optimizations in this class, for example, you must
+  * never peek more then 8 bits more than needed, and you must first 
+  * peek bits before you may drop them.  This is not a general purpose
+  * class but optimized for the behaviour of the Inflater.
+  *
+  * @author John Leuner, Jochen Hoenicke
+  */
+ 
+ class StreamManipulator
+ {
+   private byte[] window;
+   private int window_start = 0;
+   private int window_end = 0;
+ 
+   private int buffer = 0;
+   private int bits_in_buffer = 0;
+ 
+   /**
+    * Get the next n bits but don't increase input pointer.  n must be
+    * less or equal 16 and if you if this call succeeds, you must drop
+    * at least n-8 bits in the next call.
+    * 
+    * @return the value of the bits, or -1 if not enough bits available.  */
+   public final int peekBits(int n)
+   {
+     if (bits_in_buffer < n)
+       {
+ 	if (window_start == window_end)
+ 	  return -1;
+ 	buffer |= (window[window_start++] & 0xff
+ 		   | (window[window_start++] & 0xff) << 8) << bits_in_buffer;
+ 	bits_in_buffer += 16;
+       }
+     return buffer & ((1 << n) - 1);
+   }
+ 
+   /* Drops the next n bits from the input.  You should have called peekBits
+    * with a bigger or equal n before, to make sure that enough bits are in
+    * the bit buffer.
+    */
+   public final void dropBits(int n)
+   {
+     buffer >>>= n;
+     bits_in_buffer -= n;
+   }
+ 
+   /**
+    * Gets the next n bits and increases input pointer.  This is equivalent
+    * to peekBits followed by dropBits, except for correct error handling.
+    * @return the value of the bits, or -1 if not enough bits available. 
+    */
+   public final int getBits(int n)
+   {
+     int bits = peekBits(n);
+     if (bits >= 0)
+       dropBits(n);
+     return bits;
+   }
+   /**
+    * Gets the number of bits available in the bit buffer.  This must be
+    * only called when a previous peekBits() returned -1.
+    * @return the number of bits available.
+    */
+   public final int getAvailableBits()
+   {
+     return bits_in_buffer;
+   }
+ 
+   /**
+    * Gets the number of bytes available.  
+    * @return the number of bytes available.
+    */
+   public final int getAvailableBytes()
+   {
+     return window_end - window_start + (bits_in_buffer >> 3);
+   }
+ 
+   /**
+    * Skips to the next byte boundary.
+    */
+   public void skipToByteBoundary()
+   {
+     buffer >>= (bits_in_buffer & 7);
+     bits_in_buffer &= ~7;
+   }
+ 
+   public final boolean needsInput() {
+     return window_start == window_end;
+   }
+ 
+ 
+   /* Copies length bytes from input buffer to output buffer starting
+    * at output[offset].  You have to make sure, that the buffer is
+    * byte aligned.  If not enough bytes are available, copies fewer
+    * bytes.
+    * @param length the length to copy, 0 is allowed.
+    * @return the number of bytes copied, 0 if no byte is available.  
+    */
+   public int copyBytes(byte[] output, int offset, int length)
+   {
+     if (length < 0)
+       throw new IllegalArgumentException("length negative");
+     if ((bits_in_buffer & 7) != 0)  
+       /* bits_in_buffer may only be 0 or 8 */
+       throw new IllegalStateException("Bit buffer is not aligned!");
+ 
+     int count = 0;
+     while (bits_in_buffer > 0 && length > 0)
+       {
+ 	output[offset++] = (byte) buffer;
+ 	buffer >>>= 8;
+ 	bits_in_buffer -= 8;
+ 	length--;
+ 	count++;
+       }
+     if (length == 0)
+       return count;
+ 
+     int avail = window_end - window_start;
+     if (length > avail)
+       length = avail;
+     System.arraycopy(window, window_start, output, offset, length);
+     window_start += length;
+ 
+     if (((window_start - window_end) & 1) != 0)
+       {
+ 	/* We always want an even number of bytes in input, see peekBits */
+ 	buffer = (window[window_start++] & 0xff);
+ 	bits_in_buffer = 8;
+       }
+     return count + length;
+   }
+ 
+   public StreamManipulator()
+   {
+   }
+ 
+   public void reset()
+   {
+     window_start = window_end = buffer = bits_in_buffer = 0;
+   }
+ 
+   public void setInput(byte[] buf, int off, int len)
+   {
+     if (window_start < window_end)
+       throw new IllegalStateException
+ 	("Old input was not completely processed");
+ 
+     int end = off + len;
+ 
+     /* We want to throw an ArrayIndexOutOfBoundsException early.  The
+      * check is very tricky: it also handles integer wrap around.  
+      */
+     if (0 > off || off > end || end > buf.length)
+       throw new ArrayIndexOutOfBoundsException();
+     
+     if ((len & 1) != 0)
+       {
+ 	/* We always want an even number of bytes in input, see peekBits */
+ 	buffer |= (buf[off++] & 0xff) << bits_in_buffer;
+ 	bits_in_buffer += 8;
+       }
+     
+     window = buf;
+     window_start = off;
+     window_end = end;
+   }
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/ZipConstants.java gcc-4.1.0/libjava/classpath/java/util/zip/ZipConstants.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/ZipConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/ZipConstants.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,97 ----
+ /* java.util.zip.ZipConstants
+    Copyright (C) 2001 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ interface ZipConstants
+ {
+   /* The local file header */
+   int LOCHDR = 30;
+   int LOCSIG = 'P'|('K'<<8)|(3<<16)|(4<<24);
+ 
+   int LOCVER =  4;
+   int LOCFLG =  6;
+   int LOCHOW =  8;
+   int LOCTIM = 10;
+   int LOCCRC = 14;
+   int LOCSIZ = 18;
+   int LOCLEN = 22;
+   int LOCNAM = 26;
+   int LOCEXT = 28;
+ 
+   /* The Data descriptor */
+   int EXTSIG = 'P'|('K'<<8)|(7<<16)|(8<<24);
+   int EXTHDR = 16;
+ 
+   int EXTCRC =  4;
+   int EXTSIZ =  8;
+   int EXTLEN = 12;
+ 
+   /* The central directory file header */
+   int CENSIG = 'P'|('K'<<8)|(1<<16)|(2<<24);
+   int CENHDR = 46;
+ 
+   int CENVEM =  4;
+   int CENVER =  6;
+   int CENFLG =  8;
+   int CENHOW = 10;
+   int CENTIM = 12;
+   int CENCRC = 16;
+   int CENSIZ = 20;
+   int CENLEN = 24;
+   int CENNAM = 28;
+   int CENEXT = 30;
+   int CENCOM = 32;
+   int CENDSK = 34;
+   int CENATT = 36;
+   int CENATX = 38;
+   int CENOFF = 42;
+ 
+   /* The entries in the end of central directory */
+   int ENDSIG = 'P'|('K'<<8)|(5<<16)|(6<<24);
+   int ENDHDR = 22;
+ 
+   /* The following two fields are missing in SUN JDK */
+   int ENDNRD =  4;
+   int ENDDCD =  6;
+   int ENDSUB =  8;
+   int ENDTOT = 10;
+   int ENDSIZ = 12;
+   int ENDOFF = 16;
+   int ENDCOM = 20;
+ }
+ 
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/ZipEntry.java gcc-4.1.0/libjava/classpath/java/util/zip/ZipEntry.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/ZipEntry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/ZipEntry.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,431 ----
+ /* ZipEntry.java --
+    Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.zip;
+ 
+ import java.util.Calendar;
+ 
+ /**
+  * This class represents a member of a zip archive.  ZipFile and
+  * ZipInputStream will give you instances of this class as information
+  * about the members in an archive.  On the other hand ZipOutputStream
+  * needs an instance of this class to create a new member.
+  *
+  * @author Jochen Hoenicke 
+  */
+ public class ZipEntry implements ZipConstants, Cloneable
+ {
+   private static final int KNOWN_SIZE   = 1;
+   private static final int KNOWN_CSIZE  = 2;
+   private static final int KNOWN_CRC    = 4;
+   private static final int KNOWN_TIME   = 8;
+   private static final int KNOWN_EXTRA  = 16;
+ 
+   private static Calendar cal;
+ 
+   private String name;
+   private int size;
+   private long compressedSize = -1;
+   private int crc;
+   private int dostime;
+   private short known = 0;
+   private short method = -1;
+   private byte[] extra = null;
+   private String comment = null;
+ 
+   int flags;              /* used by ZipOutputStream */
+   int offset;             /* used by ZipFile and ZipOutputStream */
+ 
+   /**
+    * Compression method.  This method doesn't compress at all.
+    */
+   public static final int STORED = 0;
+   /**
+    * Compression method.  This method uses the Deflater.
+    */
+   public static final int DEFLATED = 8;
+ 
+   /**
+    * Creates a zip entry with the given name.
+    * @param name the name. May include directory components separated
+    * by '/'.
+    *
+    * @exception NullPointerException when name is null.
+    * @exception IllegalArgumentException when name is bigger then 65535 chars.
+    */
+   public ZipEntry(String name)
+   {
+     int length = name.length();
+     if (length > 65535)
+       throw new IllegalArgumentException("name length is " + length);
+     this.name = name;
+   }
+ 
+   /**
+    * Creates a copy of the given zip entry.
+    * @param e the entry to copy.
+    */
+   public ZipEntry(ZipEntry e)
+   {
+     this(e, e.name);
+   }
+ 
+   ZipEntry(ZipEntry e, String name)
+   {
+     this.name = name;
+     known = e.known;
+     size = e.size;
+     compressedSize = e.compressedSize;
+     crc = e.crc;
+     dostime = e.dostime;
+     method = e.method;
+     extra = e.extra;
+     comment = e.comment;
+   }
+ 
+   final void setDOSTime(int dostime)
+   {
+     this.dostime = dostime;
+     known |= KNOWN_TIME;
+   }
+ 
+   final int getDOSTime()
+   {
+     if ((known & KNOWN_TIME) == 0)
+       return 0;
+     else
+       return dostime;
+   }
+ 
+   /**
+    * Creates a copy of this zip entry.
+    */
+   /**
+    * Clones the entry.
+    */
+   public Object clone()
+   {
+     try
+       {
+ 	// The JCL says that the `extra' field is also copied.
+ 	ZipEntry clone = (ZipEntry) super.clone();
+ 	if (extra != null)
+ 	  clone.extra = (byte[]) extra.clone();
+ 	return clone;
+       }
+     catch (CloneNotSupportedException ex)
+       {
+ 	throw new InternalError();
+       }
+   }
+ 
+   /**
+    * Returns the entry name.  The path components in the entry are
+    * always separated by slashes ('/').  
+    */
+   public String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Sets the time of last modification of the entry.
+    * @time the time of last modification of the entry.
+    */
+   public void setTime(long time)
+   {
+     Calendar cal = getCalendar();
+     synchronized (cal)
+       {
+ 	cal.setTimeInMillis(time);
+ 	dostime = (cal.get(Calendar.YEAR) - 1980 & 0x7f) << 25
+ 	  | (cal.get(Calendar.MONTH) + 1) << 21
+ 	  | (cal.get(Calendar.DAY_OF_MONTH)) << 16
+ 	  | (cal.get(Calendar.HOUR_OF_DAY)) << 11
+ 	  | (cal.get(Calendar.MINUTE)) << 5
+ 	  | (cal.get(Calendar.SECOND)) >> 1;
+       }
+     this.known |= KNOWN_TIME;
+   }
+ 
+   /**
+    * Gets the time of last modification of the entry.
+    * @return the time of last modification of the entry, or -1 if unknown.
+    */
+   public long getTime()
+   {
+     // The extra bytes might contain the time (posix/unix extension)
+     parseExtra();
+ 
+     if ((known & KNOWN_TIME) == 0)
+       return -1;
+ 
+     int sec = 2 * (dostime & 0x1f);
+     int min = (dostime >> 5) & 0x3f;
+     int hrs = (dostime >> 11) & 0x1f;
+     int day = (dostime >> 16) & 0x1f;
+     int mon = ((dostime >> 21) & 0xf) - 1;
+     int year = ((dostime >> 25) & 0x7f) + 1980; /* since 1900 */
+    
+     try
+       {
+ 	cal = getCalendar();
+ 	synchronized (cal)
+ 	  {
+ 	    cal.set(year, mon, day, hrs, min, sec);
+ 	    return cal.getTimeInMillis();
+ 	  }
+       }
+     catch (RuntimeException ex)
+       {
+ 	/* Ignore illegal time stamp */
+ 	known &= ~KNOWN_TIME;
+ 	return -1;
+       }
+   }
+ 
+   private static synchronized Calendar getCalendar()
+   {
+     if (cal == null)
+       cal = Calendar.getInstance();
+ 
+     return cal;
+   }
+ 
+   /**
+    * Sets the size of the uncompressed data.
+    * @exception IllegalArgumentException if size is not in 0..0xffffffffL
+    */
+   public void setSize(long size)
+   {
+     if ((size & 0xffffffff00000000L) != 0)
+ 	throw new IllegalArgumentException();
+     this.size = (int) size;
+     this.known |= KNOWN_SIZE;
+   }
+ 
+   /**
+    * Gets the size of the uncompressed data.
+    * @return the size or -1 if unknown.
+    */
+   public long getSize()
+   {
+     return (known & KNOWN_SIZE) != 0 ? size & 0xffffffffL : -1L;
+   }
+ 
+   /**
+    * Sets the size of the compressed data.
+    */
+   public void setCompressedSize(long csize)
+   {
+     this.compressedSize = csize;
+   }
+ 
+   /**
+    * Gets the size of the compressed data.
+    * @return the size or -1 if unknown.
+    */
+   public long getCompressedSize()
+   {
+     return compressedSize;
+   }
+ 
+   /**
+    * Sets the crc of the uncompressed data.
+    * @exception IllegalArgumentException if crc is not in 0..0xffffffffL
+    */
+   public void setCrc(long crc)
+   {
+     if ((crc & 0xffffffff00000000L) != 0)
+ 	throw new IllegalArgumentException();
+     this.crc = (int) crc;
+     this.known |= KNOWN_CRC;
+   }
+ 
+   /**
+    * Gets the crc of the uncompressed data.
+    * @return the crc or -1 if unknown.
+    */
+   public long getCrc()
+   {
+     return (known & KNOWN_CRC) != 0 ? crc & 0xffffffffL : -1L;
+   }
+ 
+   /**
+    * Sets the compression method.  Only DEFLATED and STORED are
+    * supported.
+    * @exception IllegalArgumentException if method is not supported.
+    * @see ZipOutputStream#DEFLATED
+    * @see ZipOutputStream#STORED 
+    */
+   public void setMethod(int method)
+   {
+     if (method != ZipOutputStream.STORED
+ 	&& method != ZipOutputStream.DEFLATED)
+ 	throw new IllegalArgumentException();
+     this.method = (short) method;
+   }
+ 
+   /**
+    * Gets the compression method.  
+    * @return the compression method or -1 if unknown.
+    */
+   public int getMethod()
+   {
+     return method;
+   }
+ 
+   /**
+    * Sets the extra data.
+    * @exception IllegalArgumentException if extra is longer than 0xffff bytes.
+    */
+   public void setExtra(byte[] extra)
+   {
+     if (extra == null) 
+       {
+ 	this.extra = null;
+ 	return;
+       }
+     if (extra.length > 0xffff)
+       throw new IllegalArgumentException();
+     this.extra = extra;
+   }
+ 
+   private void parseExtra()
+   {
+     // Already parsed?
+     if ((known & KNOWN_EXTRA) != 0)
+       return;
+ 
+     if (extra == null)
+       {
+ 	known |= KNOWN_EXTRA;
+ 	return;
+       }
+ 
+     try
+       {
+ 	int pos = 0;
+ 	while (pos < extra.length) 
+ 	  {
+ 	    int sig = (extra[pos++] & 0xff)
+ 	      | (extra[pos++] & 0xff) << 8;
+ 	    int len = (extra[pos++] & 0xff)
+ 	      | (extra[pos++] & 0xff) << 8;
+ 	    if (sig == 0x5455) 
+ 	      {
+ 		/* extended time stamp */
+ 		int flags = extra[pos];
+ 		if ((flags & 1) != 0)
+ 		  {
+ 		    long time = ((extra[pos+1] & 0xff)
+ 			    | (extra[pos+2] & 0xff) << 8
+ 			    | (extra[pos+3] & 0xff) << 16
+ 			    | (extra[pos+4] & 0xff) << 24);
+ 		    setTime(time);
+ 		  }
+ 	      }
+ 	    pos += len;
+ 	  }
+       }
+     catch (ArrayIndexOutOfBoundsException ex)
+       {
+ 	/* be lenient */
+       }
+ 
+     known |= KNOWN_EXTRA;
+     return;
+   }
+ 
+   /**
+    * Gets the extra data.
+    * @return the extra data or null if not set.
+    */
+   public byte[] getExtra()
+   {
+     return extra;
+   }
+ 
+   /**
+    * Sets the entry comment.
+    * @exception IllegalArgumentException if comment is longer than 0xffff.
+    */
+   public void setComment(String comment)
+   {
+     if (comment != null && comment.length() > 0xffff)
+       throw new IllegalArgumentException();
+     this.comment = comment;
+   }
+ 
+   /**
+    * Gets the comment.
+    * @return the comment or null if not set.
+    */
+   public String getComment()
+   {
+     return comment;
+   }
+ 
+   /**
+    * Gets true, if the entry is a directory.  This is solely
+    * determined by the name, a trailing slash '/' marks a directory.  
+    */
+   public boolean isDirectory()
+   {
+     int nlen = name.length();
+     return nlen > 0 && name.charAt(nlen - 1) == '/';
+   }
+ 
+   /**
+    * Gets the string representation of this ZipEntry.  This is just
+    * the name as returned by getName().
+    */
+   public String toString()
+   {
+     return name;
+   }
+ 
+   /**
+    * Gets the hashCode of this ZipEntry.  This is just the hashCode
+    * of the name.  Note that the equals method isn't changed, though.
+    */
+   public int hashCode()
+   {
+     return name.hashCode();
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/ZipException.java gcc-4.1.0/libjava/classpath/java/util/zip/ZipException.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/ZipException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/ZipException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,72 ----
+ /* ZipException.java - exception representing a zip related error
+    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package java.util.zip;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * Thrown during the creation or input of a zip file.
+  *
+  * @author Jochen Hoenicke
+  * @author Per Bothner
+  * @status updated to 1.4
+  */
+ public class ZipException extends IOException
+ {
+   /**
+    * Compatible with JDK 1.0+.
+    */
+   private static final long serialVersionUID = 8000196834066748623L;
+ 
+   /**
+    * Create an exception without a message.
+    */
+   public ZipException()
+   {
+   }
+ 
+   /**
+    * Create an exception with a message.
+    *
+    * @param msg the message
+    */
+   public ZipException (String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/ZipFile.java gcc-4.1.0/libjava/classpath/java/util/zip/ZipFile.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/ZipFile.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/ZipFile.java	Tue Nov 15 23:20:01 2005
***************
*** 0 ****
--- 1,624 ----
+ /* ZipFile.java --
+    Copyright (C) 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.zip;
+ 
+ import gnu.java.util.EmptyEnumeration;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.DataInput;
+ import java.io.EOFException;
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.RandomAccessFile;
+ import java.io.UnsupportedEncodingException;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ 
+ /**
+  * This class represents a Zip archive.  You can ask for the contained
+  * entries, or get an input stream for a file entry.  The entry is
+  * automatically decompressed.
+  *
+  * This class is thread safe:  You can open input streams for arbitrary
+  * entries in different threads.
+  *
+  * @author Jochen Hoenicke
+  * @author Artur Biesiadowski
+  */
+ public class ZipFile implements ZipConstants
+ {
+ 
+   /**
+    * Mode flag to open a zip file for reading.
+    */
+   public static final int OPEN_READ = 0x1;
+ 
+   /**
+    * Mode flag to delete a zip file after reading.
+    */
+   public static final int OPEN_DELETE = 0x4;
+ 
+   // Name of this zip file.
+   private final String name;
+ 
+   // File from which zip entries are read.
+   private final RandomAccessFile raf;
+ 
+   // The entries of this zip file when initialized and not yet closed.
+   private HashMap entries;
+ 
+   private boolean closed = false;
+ 
+   /**
+    * Opens a Zip file with the given name for reading.
+    * @exception IOException if a i/o error occured.
+    * @exception ZipException if the file doesn't contain a valid zip
+    * archive.  
+    */
+   public ZipFile(String name) throws ZipException, IOException
+   {
+     this.raf = new RandomAccessFile(name, "r");
+     this.name = name;
+     checkZipFile();
+   }
+ 
+   /**
+    * Opens a Zip file reading the given File.
+    * @exception IOException if a i/o error occured.
+    * @exception ZipException if the file doesn't contain a valid zip
+    * archive.  
+    */
+   public ZipFile(File file) throws ZipException, IOException
+   {
+     this.raf = new RandomAccessFile(file, "r");
+     this.name = file.getPath();
+     checkZipFile();
+   }
+ 
+   /**
+    * Opens a Zip file reading the given File in the given mode.
+    *
+    * If the OPEN_DELETE mode is specified, the zip file will be deleted at
+    * some time moment after it is opened. It will be deleted before the zip
+    * file is closed or the Virtual Machine exits.
+    * 
+    * The contents of the zip file will be accessible until it is closed.
+    *
+    * @since JDK1.3
+    * @param mode Must be one of OPEN_READ or OPEN_READ | OPEN_DELETE
+    *
+    * @exception IOException if a i/o error occured.
+    * @exception ZipException if the file doesn't contain a valid zip
+    * archive.  
+    */
+   public ZipFile(File file, int mode) throws ZipException, IOException
+   {
+     if (mode != OPEN_READ && mode != (OPEN_READ | OPEN_DELETE))
+       throw new IllegalArgumentException("invalid mode");
+     if ((mode & OPEN_DELETE) != 0)
+       file.deleteOnExit();
+     this.raf = new RandomAccessFile(file, "r");
+     this.name = file.getPath();
+     checkZipFile();
+   }
+ 
+   private void checkZipFile() throws IOException, ZipException
+   {
+     byte[] magicBuf = new byte[4];
+     boolean validRead = true;
+ 
+     try 
+       {
+ 	raf.readFully(magicBuf);
+       } 
+     catch (EOFException eof) 
+       {
+ 	validRead = false;
+       } 
+ 
+     if (validRead == false || readLeInt(magicBuf, 0) != LOCSIG)
+       {
+ 	raf.close();
+ 	throw new ZipException("Not a valid zip file");
+       }
+   }
+ 
+   /**
+    * Checks if file is closed and throws an exception.
+    */
+   private void checkClosed()
+   {
+     if (closed)
+       throw new IllegalStateException("ZipFile has closed: " + name);
+   }
+ 
+   /**
+    * Read an unsigned short in little endian byte order from the given
+    * DataInput stream using the given byte buffer.
+    *
+    * @param di DataInput stream to read from.
+    * @param b the byte buffer to read in (must be at least 2 bytes long).
+    * @return The value read.
+    *
+    * @exception IOException if a i/o error occured.
+    * @exception EOFException if the file ends prematurely
+    */
+   private int readLeShort(DataInput di, byte[] b) throws IOException
+   {
+     di.readFully(b, 0, 2);
+     return (b[0] & 0xff) | (b[1] & 0xff) << 8;
+   }
+ 
+   /**
+    * Read an int in little endian byte order from the given
+    * DataInput stream using the given byte buffer.
+    *
+    * @param di DataInput stream to read from.
+    * @param b the byte buffer to read in (must be at least 4 bytes long).
+    * @return The value read.
+    *
+    * @exception IOException if a i/o error occured.
+    * @exception EOFException if the file ends prematurely
+    */
+   private int readLeInt(DataInput di, byte[] b) throws IOException
+   {
+     di.readFully(b, 0, 4);
+     return ((b[0] & 0xff) | (b[1] & 0xff) << 8)
+ 	    | ((b[2] & 0xff) | (b[3] & 0xff) << 8) << 16;
+   }
+ 
+   /**
+    * Read an unsigned short in little endian byte order from the given
+    * byte buffer at the given offset.
+    *
+    * @param b the byte array to read from.
+    * @param off the offset to read from.
+    * @return The value read.
+    */
+   private int readLeShort(byte[] b, int off)
+   {
+     return (b[off] & 0xff) | (b[off+1] & 0xff) << 8;
+   }
+ 
+   /**
+    * Read an int in little endian byte order from the given
+    * byte buffer at the given offset.
+    *
+    * @param b the byte array to read from.
+    * @param off the offset to read from.
+    * @return The value read.
+    */
+   private int readLeInt(byte[] b, int off)
+   {
+     return ((b[off] & 0xff) | (b[off+1] & 0xff) << 8)
+ 	    | ((b[off+2] & 0xff) | (b[off+3] & 0xff) << 8) << 16;
+   }
+   
+ 
+   /**
+    * Read the central directory of a zip file and fill the entries
+    * array.  This is called exactly once when first needed. It is called
+    * while holding the lock on <code>raf</code>.
+    *
+    * @exception IOException if a i/o error occured.
+    * @exception ZipException if the central directory is malformed 
+    */
+   private void readEntries() throws ZipException, IOException
+   {
+     /* Search for the End Of Central Directory.  When a zip comment is 
+      * present the directory may start earlier.
+      * FIXME: This searches the whole file in a very slow manner if the
+      * file isn't a zip file.
+      */
+     long pos = raf.length() - ENDHDR;
+     byte[] ebs  = new byte[CENHDR];
+     
+     do
+       {
+ 	if (pos < 0)
+ 	  throw new ZipException
+ 	    ("central directory not found, probably not a zip file: " + name);
+ 	raf.seek(pos--);
+       }
+     while (readLeInt(raf, ebs) != ENDSIG);
+     
+     if (raf.skipBytes(ENDTOT - ENDNRD) != ENDTOT - ENDNRD)
+       throw new EOFException(name);
+     int count = readLeShort(raf, ebs);
+     if (raf.skipBytes(ENDOFF - ENDSIZ) != ENDOFF - ENDSIZ)
+       throw new EOFException(name);
+     int centralOffset = readLeInt(raf, ebs);
+ 
+     entries = new HashMap(count+count/2);
+     raf.seek(centralOffset);
+     
+     byte[] buffer = new byte[16];
+     for (int i = 0; i < count; i++)
+       {
+       	raf.readFully(ebs);
+ 	if (readLeInt(ebs, 0) != CENSIG)
+ 	  throw new ZipException("Wrong Central Directory signature: " + name);
+ 
+ 	int method = readLeShort(ebs, CENHOW);
+ 	int dostime = readLeInt(ebs, CENTIM);
+ 	int crc = readLeInt(ebs, CENCRC);
+ 	int csize = readLeInt(ebs, CENSIZ);
+ 	int size = readLeInt(ebs, CENLEN);
+ 	int nameLen = readLeShort(ebs, CENNAM);
+ 	int extraLen = readLeShort(ebs, CENEXT);
+ 	int commentLen = readLeShort(ebs, CENCOM);
+ 	
+ 	int offset = readLeInt(ebs, CENOFF);
+ 
+ 	int needBuffer = Math.max(nameLen, commentLen);
+ 	if (buffer.length < needBuffer)
+ 	  buffer = new byte[needBuffer];
+ 
+ 	raf.readFully(buffer, 0, nameLen);
+ 	String name;
+ 	try
+ 	  {
+ 	    name = new String(buffer, 0, nameLen, "UTF-8");
+ 	  }
+ 	catch (UnsupportedEncodingException uee)
+ 	  {
+ 	    throw new AssertionError(uee);
+ 	  }
+ 
+ 	ZipEntry entry = new ZipEntry(name);
+ 	entry.setMethod(method);
+ 	entry.setCrc(crc & 0xffffffffL);
+ 	entry.setSize(size & 0xffffffffL);
+ 	entry.setCompressedSize(csize & 0xffffffffL);
+ 	entry.setDOSTime(dostime);
+ 	if (extraLen > 0)
+ 	  {
+ 	    byte[] extra = new byte[extraLen];
+ 	    raf.readFully(extra);
+ 	    entry.setExtra(extra);
+ 	  }
+ 	if (commentLen > 0)
+ 	  {
+ 	    raf.readFully(buffer, 0, commentLen);
+ 	    try
+ 	      {
+ 		entry.setComment(new String(buffer, 0, commentLen, "UTF-8"));
+ 	      }
+ 	    catch (UnsupportedEncodingException uee)
+ 	      {
+ 		throw new AssertionError(uee);
+ 	      }
+ 	  }
+ 	entry.offset = offset;
+ 	entries.put(name, entry);
+       }
+   }
+ 
+   /**
+    * Closes the ZipFile.  This also closes all input streams given by
+    * this class.  After this is called, no further method should be
+    * called.
+    * 
+    * @exception IOException if a i/o error occured.
+    */
+   public void close() throws IOException
+   {
+     RandomAccessFile raf = this.raf;
+     if (raf == null)
+       return;
+ 
+     synchronized (raf)
+       {
+ 	closed = true;
+ 	entries = null;
+ 	raf.close();
+       }
+   }
+ 
+   /**
+    * Calls the <code>close()</code> method when this ZipFile has not yet
+    * been explicitly closed.
+    */
+   protected void finalize() throws IOException
+   {
+     if (!closed && raf != null) close();
+   }
+ 
+   /**
+    * Returns an enumeration of all Zip entries in this Zip file.
+    *
+    * @exception IllegalStateException when the ZipFile has already been closed
+    */
+   public Enumeration entries()
+   {
+     checkClosed();
+     
+     try
+       {
+ 	return new ZipEntryEnumeration(getEntries().values().iterator());
+       }
+     catch (IOException ioe)
+       {
+ 	return EmptyEnumeration.getInstance();
+       }
+   }
+ 
+   /**
+    * Checks that the ZipFile is still open and reads entries when necessary.
+    *
+    * @exception IllegalStateException when the ZipFile has already been closed.
+    * @exception IOException when the entries could not be read.
+    */
+   private HashMap getEntries() throws IOException
+   {
+     synchronized(raf)
+       {
+ 	checkClosed();
+ 
+ 	if (entries == null)
+ 	  readEntries();
+ 
+ 	return entries;
+       }
+   }
+ 
+   /**
+    * Searches for a zip entry in this archive with the given name.
+    *
+    * @param name the name. May contain directory components separated by
+    * slashes ('/').
+    * @return the zip entry, or null if no entry with that name exists.
+    *
+    * @exception IllegalStateException when the ZipFile has already been closed
+    */
+   public ZipEntry getEntry(String name)
+   {
+     checkClosed();
+ 
+     try
+       {
+ 	HashMap entries = getEntries();
+ 	ZipEntry entry = (ZipEntry) entries.get(name);
+         // If we didn't find it, maybe it's a directory.
+         if (entry == null && !name.endsWith("/"))
+             entry = (ZipEntry) entries.get(name + '/');
+ 	return entry != null ? new ZipEntry(entry, name) : null;
+       }
+     catch (IOException ioe)
+       {
+ 	return null;
+       }
+   }
+ 
+ 
+   //access should be protected by synchronized(raf)
+   private byte[] locBuf = new byte[LOCHDR];
+ 
+   /**
+    * Checks, if the local header of the entry at index i matches the
+    * central directory, and returns the offset to the data.
+    * 
+    * @param entry to check.
+    * @return the start offset of the (compressed) data.
+    *
+    * @exception IOException if a i/o error occured.
+    * @exception ZipException if the local header doesn't match the 
+    * central directory header
+    */
+   private long checkLocalHeader(ZipEntry entry) throws IOException
+   {
+     synchronized (raf)
+       {
+ 	raf.seek(entry.offset);
+ 	raf.readFully(locBuf);
+ 	
+ 	if (readLeInt(locBuf, 0) != LOCSIG)
+ 	  throw new ZipException("Wrong Local header signature: " + name);
+ 
+ 	if (entry.getMethod() != readLeShort(locBuf, LOCHOW))
+ 	  throw new ZipException("Compression method mismatch: " + name);
+ 
+ 	if (entry.getName().length() != readLeShort(locBuf, LOCNAM))
+ 	  throw new ZipException("file name length mismatch: " + name);
+ 
+ 	int extraLen = entry.getName().length() + readLeShort(locBuf, LOCEXT);
+ 	return entry.offset + LOCHDR + extraLen;
+       }
+   }
+ 
+   /**
+    * Creates an input stream reading the given zip entry as
+    * uncompressed data.  Normally zip entry should be an entry
+    * returned by getEntry() or entries().
+    *
+    * This implementation returns null if the requested entry does not
+    * exist.  This decision is not obviously correct, however, it does
+    * appear to mirror Sun's implementation, and it is consistant with
+    * their javadoc.  On the other hand, the old JCL book, 2nd Edition,
+    * claims that this should return a "non-null ZIP entry".  We have
+    * chosen for now ignore the old book, as modern versions of Ant (an
+    * important application) depend on this behaviour.  See discussion
+    * in this thread:
+    * http://gcc.gnu.org/ml/java-patches/2004-q2/msg00602.html
+    *
+    * @param entry the entry to create an InputStream for.
+    * @return the input stream, or null if the requested entry does not exist.
+    *
+    * @exception IllegalStateException when the ZipFile has already been closed
+    * @exception IOException if a i/o error occured.
+    * @exception ZipException if the Zip archive is malformed.  
+    */
+   public InputStream getInputStream(ZipEntry entry) throws IOException
+   {
+     checkClosed();
+ 
+     HashMap entries = getEntries();
+     String name = entry.getName();
+     ZipEntry zipEntry = (ZipEntry) entries.get(name);
+     if (zipEntry == null)
+       return null;
+ 
+     long start = checkLocalHeader(zipEntry);
+     int method = zipEntry.getMethod();
+     InputStream is = new BufferedInputStream(new PartialInputStream
+       (raf, start, zipEntry.getCompressedSize()));
+     switch (method)
+       {
+       case ZipOutputStream.STORED:
+ 	return is;
+       case ZipOutputStream.DEFLATED:
+ 	return new InflaterInputStream(is, new Inflater(true));
+       default:
+ 	throw new ZipException("Unknown compression method " + method);
+       }
+   }
+   
+   /**
+    * Returns the (path) name of this zip file.
+    */
+   public String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Returns the number of entries in this zip file.
+    *
+    * @exception IllegalStateException when the ZipFile has already been closed
+    */
+   public int size()
+   {
+     checkClosed();
+     
+     try
+       {
+ 	return getEntries().size();
+       }
+     catch (IOException ioe)
+       {
+ 	return 0;
+       }
+   }
+   
+   private static class ZipEntryEnumeration implements Enumeration
+   {
+     private final Iterator elements;
+ 
+     public ZipEntryEnumeration(Iterator elements)
+     {
+       this.elements = elements;
+     }
+ 
+     public boolean hasMoreElements()
+     {
+       return elements.hasNext();
+     }
+ 
+     public Object nextElement()
+     {
+       /* We return a clone, just to be safe that the user doesn't
+        * change the entry.  
+        */
+       return ((ZipEntry)elements.next()).clone();
+     }
+   }
+ 
+   private static class PartialInputStream extends InputStream
+   {
+     private final RandomAccessFile raf;
+     long filepos, end;
+ 
+     public PartialInputStream(RandomAccessFile raf, long start, long len)
+     {
+       this.raf = raf;
+       filepos = start;
+       end = start + len;
+     }
+     
+     public int available()
+     {
+       long amount = end - filepos;
+       if (amount > Integer.MAX_VALUE)
+ 	return Integer.MAX_VALUE;
+       return (int) amount;
+     }
+     
+     public int read() throws IOException
+     {
+       if (filepos == end)
+ 	return -1;
+       synchronized (raf)
+ 	{
+ 	  raf.seek(filepos++);
+ 	  return raf.read();
+ 	}
+     }
+ 
+     public int read(byte[] b, int off, int len) throws IOException
+     {
+       if (len > end - filepos)
+ 	{
+ 	  len = (int) (end - filepos);
+ 	  if (len == 0)
+ 	    return -1;
+ 	}
+       synchronized (raf)
+ 	{
+ 	  raf.seek(filepos);
+ 	  int count = raf.read(b, off, len);
+ 	  if (count > 0)
+ 	    filepos += len;
+ 	  return count;
+ 	}
+     }
+ 
+     public long skip(long amount)
+     {
+       if (amount < 0)
+ 	throw new IllegalArgumentException();
+       if (amount > end - filepos)
+ 	amount = end - filepos;
+       filepos += amount;
+       return amount;
+     }
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/ZipInputStream.java gcc-4.1.0/libjava/classpath/java/util/zip/ZipInputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/ZipInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/ZipInputStream.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,380 ----
+ /* ZipInputStream.java --
+    Copyright (C) 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.zip;
+ 
+ import java.io.EOFException;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.UnsupportedEncodingException;
+ 
+ /**
+  * This is a FilterInputStream that reads the files in an zip archive
+  * one after another.  It has a special method to get the zip entry of
+  * the next file.  The zip entry contains information about the file name
+  * size, compressed size, CRC, etc.
+  *
+  * It includes support for STORED and DEFLATED entries.
+  *
+  * @author Jochen Hoenicke
+  */
+ public class ZipInputStream extends InflaterInputStream implements ZipConstants
+ {
+   private CRC32 crc = new CRC32();
+   private ZipEntry entry = null;
+ 
+   private int csize;
+   private int size;
+   private int method;
+   private int flags;
+   private int avail;
+   private boolean entryAtEOF;
+ 
+   /**
+    * Creates a new Zip input stream, reading a zip archive.
+    */
+   public ZipInputStream(InputStream in)
+   {
+     super(in, new Inflater(true));
+   }
+ 
+   private void fillBuf() throws IOException
+   {
+     avail = len = in.read(buf, 0, buf.length);
+   }
+ 
+   private int readBuf(byte[] out, int offset, int length) throws IOException
+   {
+     if (avail <= 0)
+       {
+ 	fillBuf();
+ 	if (avail <= 0)
+ 	  return -1;
+       }
+     if (length > avail)
+       length = avail;
+     System.arraycopy(buf, len - avail, out, offset, length);
+     avail -= length;
+     return length;
+   }
+   
+   private void readFully(byte[] out) throws IOException
+   {
+     int off = 0;
+     int len = out.length;
+     while (len > 0)
+       {
+ 	int count = readBuf(out, off, len);
+ 	if (count == -1)
+ 	  throw new EOFException();
+ 	off += count;
+ 	len -= count;
+       }
+   }
+   
+   private int readLeByte() throws IOException
+   {
+     if (avail <= 0)
+       {
+ 	fillBuf();
+ 	if (avail <= 0)
+ 	  throw new ZipException("EOF in header");
+       }
+     return buf[len - avail--] & 0xff;
+   }
+ 
+   /**
+    * Read an unsigned short in little endian byte order.
+    */
+   private int readLeShort() throws IOException 
+   {
+     return readLeByte() | (readLeByte() << 8);
+   }
+ 
+   /**
+    * Read an int in little endian byte order.
+    */
+   private int readLeInt() throws IOException 
+   {
+     return readLeShort() | (readLeShort() << 16);
+   }
+ 
+   /**
+    * Open the next entry from the zip archive, and return its description.
+    * If the previous entry wasn't closed, this method will close it.
+    */
+   public ZipEntry getNextEntry() throws IOException
+   {
+     if (crc == null)
+       throw new IOException("Stream closed.");
+     if (entry != null)
+       closeEntry();
+ 
+     int header = readLeInt();
+     if (header == CENSIG)
+       {
+ 	/* Central Header reached. */
+ 	close();
+ 	return null;
+       }
+     if (header != LOCSIG)
+       throw new ZipException("Wrong Local header signature: "
+ 			     + Integer.toHexString(header));
+     /* skip version */
+     readLeShort();
+     flags = readLeShort();
+     method = readLeShort();
+     int dostime = readLeInt();
+     int crc = readLeInt();
+     csize = readLeInt();
+     size = readLeInt();
+     int nameLen = readLeShort();
+     int extraLen = readLeShort();
+ 
+     if (method == ZipOutputStream.STORED && csize != size)
+       throw new ZipException("Stored, but compressed != uncompressed");
+ 
+ 
+     byte[] buffer = new byte[nameLen];
+     readFully(buffer);
+     String name;
+     try
+       {
+ 	name = new String(buffer, "UTF-8");
+       }
+     catch (UnsupportedEncodingException uee)
+       {
+ 	throw new AssertionError(uee);
+       }
+     
+     entry = createZipEntry(name);
+     entryAtEOF = false;
+     entry.setMethod(method);
+     if ((flags & 8) == 0)
+       {
+ 	entry.setCrc(crc & 0xffffffffL);
+ 	entry.setSize(size & 0xffffffffL);
+ 	entry.setCompressedSize(csize & 0xffffffffL);
+       }
+     entry.setDOSTime(dostime);
+     if (extraLen > 0)
+       {
+ 	byte[] extra = new byte[extraLen];
+ 	readFully(extra);
+ 	entry.setExtra(extra);
+       }
+ 
+     if (method == ZipOutputStream.DEFLATED && avail > 0)
+       {
+ 	System.arraycopy(buf, len - avail, buf, 0, avail);
+ 	len = avail;
+ 	avail = 0;
+ 	inf.setInput(buf, 0, len);
+       }
+     return entry;
+   }
+ 
+   private void readDataDescr() throws IOException
+   {
+     if (readLeInt() != EXTSIG)
+       throw new ZipException("Data descriptor signature not found");
+     entry.setCrc(readLeInt() & 0xffffffffL);
+     csize = readLeInt();
+     size = readLeInt();
+     entry.setSize(size & 0xffffffffL);
+     entry.setCompressedSize(csize & 0xffffffffL);
+   }
+ 
+   /**
+    * Closes the current zip entry and moves to the next one.
+    */
+   public void closeEntry() throws IOException
+   {
+     if (crc == null)
+       throw new IOException("Stream closed.");
+     if (entry == null)
+       return;
+ 
+     if (method == ZipOutputStream.DEFLATED)
+       {
+ 	if ((flags & 8) != 0)
+ 	  {
+ 	    /* We don't know how much we must skip, read until end. */
+ 	    byte[] tmp = new byte[2048];
+ 	    while (read(tmp) > 0)
+ 	      ;
+ 	    /* read will close this entry */
+ 	    return;
+ 	  }
+ 	csize -= inf.getTotalIn();
+ 	avail = inf.getRemaining();
+       }
+ 
+     if (avail > csize && csize >= 0)
+       avail -= csize;
+     else
+       {
+ 	csize -= avail;
+ 	avail = 0;
+ 	while (csize != 0)
+ 	  {
+ 	    long skipped = in.skip(csize & 0xffffffffL);
+ 	    if (skipped <= 0)
+ 	      throw new ZipException("zip archive ends early.");
+ 	    csize -= skipped;
+ 	  }
+       }
+ 
+     size = 0;
+     crc.reset();
+     if (method == ZipOutputStream.DEFLATED)
+       inf.reset();
+     entry = null;
+     entryAtEOF = true;
+   }
+ 
+   public int available() throws IOException
+   {
+     return entryAtEOF ? 0 : 1;
+   }
+ 
+   /**
+    * Reads a byte from the current zip entry.
+    * @return the byte or -1 on EOF.
+    * @exception IOException if a i/o error occured.
+    * @exception ZipException if the deflated stream is corrupted.
+    */
+   public int read() throws IOException
+   {
+     byte[] b = new byte[1];
+     if (read(b, 0, 1) <= 0)
+       return -1;
+     return b[0] & 0xff;
+   }
+ 
+   /**
+    * Reads a block of bytes from the current zip entry.
+    * @return the number of bytes read (may be smaller, even before
+    * EOF), or -1 on EOF.
+    * @exception IOException if a i/o error occured.
+    * @exception ZipException if the deflated stream is corrupted.
+    */
+   public int read(byte[] b, int off, int len) throws IOException
+   {
+     if (len == 0)
+       return 0;
+     if (crc == null)
+       throw new IOException("Stream closed.");
+     if (entry == null)
+       return -1;
+     boolean finished = false;
+     switch (method)
+       {
+       case ZipOutputStream.DEFLATED:
+ 	len = super.read(b, off, len);
+ 	if (len < 0)
+ 	  {
+ 	    if (!inf.finished())
+ 	      throw new ZipException("Inflater not finished!?");
+ 	    avail = inf.getRemaining();
+ 	    if ((flags & 8) != 0)
+ 	      readDataDescr();
+ 
+ 	    if (inf.getTotalIn() != csize
+ 		|| inf.getTotalOut() != size)
+ 	      throw new ZipException("size mismatch: "+csize+";"+size+" <-> "+inf.getTotalIn()+";"+inf.getTotalOut());
+ 	    inf.reset();
+ 	    finished = true;
+ 	  }
+ 	break;
+ 	
+       case ZipOutputStream.STORED:
+ 
+ 	if (len > csize && csize >= 0)
+ 	  len = csize;
+ 	
+ 	len = readBuf(b, off, len);
+ 	if (len > 0)
+ 	  {
+ 	    csize -= len;
+ 	    size -= len;
+ 	  }
+ 
+ 	if (csize == 0)
+ 	  finished = true;
+ 	else if (len < 0)
+ 	  throw new ZipException("EOF in stored block");
+ 	break;
+       }
+ 
+     if (len > 0)
+       crc.update(b, off, len);
+ 
+     if (finished)
+       {
+ 	if ((crc.getValue() & 0xffffffffL) != entry.getCrc())
+ 	  throw new ZipException("CRC mismatch");
+ 	crc.reset();
+ 	entry = null;
+ 	entryAtEOF = true;
+       }
+     return len;
+   }
+ 
+   /**
+    * Closes the zip file.
+    * @exception IOException if a i/o error occured.
+    */
+   public void close() throws IOException
+   {
+     super.close();
+     crc = null;
+     entry = null;
+     entryAtEOF = true;
+   }
+ 
+   /**
+    * Creates a new zip entry for the given name.  This is equivalent
+    * to new ZipEntry(name).
+    * @param name the name of the zip entry.
+    */
+   protected ZipEntry createZipEntry(String name) 
+   {
+     return new ZipEntry(name);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/ZipOutputStream.java gcc-4.1.0/libjava/classpath/java/util/zip/ZipOutputStream.java
*** gcc-4.0.2/libjava/classpath/java/util/zip/ZipOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/ZipOutputStream.java	Fri Sep 23 21:31:04 2005
***************
*** 0 ****
--- 1,430 ----
+ /* ZipOutputStream.java --
+    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package java.util.zip;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.UnsupportedEncodingException;
+ import java.util.Enumeration;
+ import java.util.Vector;
+ 
+ /**
+  * This is a FilterOutputStream that writes the files into a zip
+  * archive one after another.  It has a special method to start a new
+  * zip entry.  The zip entries contains information about the file name
+  * size, compressed size, CRC, etc.
+  *
+  * It includes support for STORED and DEFLATED entries.
+  *
+  * This class is not thread safe.
+  *
+  * @author Jochen Hoenicke 
+  */
+ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstants
+ {
+   private Vector entries = new Vector();
+   private CRC32 crc = new CRC32();
+   private ZipEntry curEntry = null;
+ 
+   private int curMethod;
+   private int size;
+   private int offset = 0;
+ 
+   private byte[] zipComment = new byte[0];
+   private int defaultMethod = DEFLATED;
+ 
+   /**
+    * Our Zip version is hard coded to 1.0 resp. 2.0
+    */
+   private static final int ZIP_STORED_VERSION = 10;
+   private static final int ZIP_DEFLATED_VERSION = 20;
+ 
+   /**
+    * Compression method.  This method doesn't compress at all.
+    */
+   public static final int STORED = 0;
+   
+   /**
+    * Compression method.  This method uses the Deflater.
+    */
+   public static final int DEFLATED = 8;
+ 
+   /**
+    * Creates a new Zip output stream, writing a zip archive.
+    * @param out the output stream to which the zip archive is written.
+    */
+   public ZipOutputStream(OutputStream out)
+   {
+     super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true));
+   }
+ 
+   /**
+    * Set the zip file comment.
+    * @param comment the comment.
+    * @exception IllegalArgumentException if encoding of comment is
+    * longer than 0xffff bytes.
+    */
+   public void setComment(String comment)
+   {
+     byte[] commentBytes;
+     try
+       {
+ 	commentBytes = comment.getBytes("UTF-8");
+       }
+     catch (UnsupportedEncodingException uee)
+       {
+ 	throw new AssertionError(uee);
+       }
+     if (commentBytes.length > 0xffff)
+       throw new IllegalArgumentException("Comment too long.");
+     zipComment = commentBytes;
+   }
+   
+   /**
+    * Sets default compression method.  If the Zip entry specifies
+    * another method its method takes precedence.
+    * @param method the method.
+    * @exception IllegalArgumentException if method is not supported.
+    * @see #STORED
+    * @see #DEFLATED
+    */
+   public void setMethod(int method)
+   {
+     if (method != STORED && method != DEFLATED)
+       throw new IllegalArgumentException("Method not supported.");
+     defaultMethod = method;
+   }
+ 
+   /**
+    * Sets default compression level.  The new level will be activated
+    * immediately.  
+    * @exception IllegalArgumentException if level is not supported.
+    * @see Deflater
+    */
+   public void setLevel(int level)
+   {
+     def.setLevel(level);
+   }
+   
+   /**
+    * Write an unsigned short in little endian byte order.
+    */
+   private void writeLeShort(int value) throws IOException 
+   {
+     out.write(value & 0xff);
+     out.write((value >> 8) & 0xff);
+   }
+ 
+   /**
+    * Write an int in little endian byte order.
+    */
+   private void writeLeInt(int value) throws IOException 
+   {
+     writeLeShort(value);
+     writeLeShort(value >> 16);
+   }
+ 
+   /**
+    * Starts a new Zip entry. It automatically closes the previous
+    * entry if present.  If the compression method is stored, the entry
+    * must have a valid size and crc, otherwise all elements (except
+    * name) are optional, but must be correct if present.  If the time
+    * is not set in the entry, the current time is used.
+    * @param entry the entry.
+    * @exception IOException if an I/O error occured.
+    * @exception ZipException if stream was finished.
+    */
+   public void putNextEntry(ZipEntry entry) throws IOException
+   {
+     if (entries == null)
+       throw new ZipException("ZipOutputStream was finished");
+ 
+     int method = entry.getMethod();
+     int flags = 0;
+     if (method == -1)
+       method = defaultMethod;
+ 
+     if (method == STORED)
+       {
+ 	if (entry.getCompressedSize() >= 0)
+ 	  {
+ 	    if (entry.getSize() < 0)
+ 	      entry.setSize(entry.getCompressedSize());
+ 	    else if (entry.getSize() != entry.getCompressedSize())
+ 	      throw new ZipException
+ 		("Method STORED, but compressed size != size");
+ 	  }
+ 	else
+ 	  entry.setCompressedSize(entry.getSize());
+ 
+ 	if (entry.getSize() < 0)
+ 	  throw new ZipException("Method STORED, but size not set");
+ 	if (entry.getCrc() < 0)
+ 	  throw new ZipException("Method STORED, but crc not set");
+       }
+     else if (method == DEFLATED)
+       {
+ 	if (entry.getCompressedSize() < 0
+ 	    || entry.getSize() < 0 || entry.getCrc() < 0)
+ 	  flags |= 8;
+       }
+ 
+     if (curEntry != null)
+       closeEntry();
+ 
+     if (entry.getTime() < 0)
+       entry.setTime(System.currentTimeMillis());
+ 
+     entry.flags = flags;
+     entry.offset = offset;
+     entry.setMethod(method);
+     curMethod = method;
+     /* Write the local file header */
+     writeLeInt(LOCSIG);
+     writeLeShort(method == STORED
+ 		 ? ZIP_STORED_VERSION : ZIP_DEFLATED_VERSION);
+     writeLeShort(flags);
+     writeLeShort(method);
+     writeLeInt(entry.getDOSTime());
+     if ((flags & 8) == 0)
+       {
+ 	writeLeInt((int)entry.getCrc());
+ 	writeLeInt((int)entry.getCompressedSize());
+ 	writeLeInt((int)entry.getSize());
+       }
+     else
+       {
+ 	writeLeInt(0);
+ 	writeLeInt(0);
+ 	writeLeInt(0);
+       }
+     byte[] name;
+     try
+       {
+ 	name = entry.getName().getBytes("UTF-8");
+       }
+     catch (UnsupportedEncodingException uee)
+       {
+ 	throw new AssertionError(uee);
+       }
+     if (name.length > 0xffff)
+       throw new ZipException("Name too long.");
+     byte[] extra = entry.getExtra();
+     if (extra == null)
+       extra = new byte[0];
+     writeLeShort(name.length);
+     writeLeShort(extra.length);
+     out.write(name);
+     out.write(extra);
+ 
+     offset += LOCHDR + name.length + extra.length;
+ 
+     /* Activate the entry. */
+ 
+     curEntry = entry;
+     crc.reset();
+     if (method == DEFLATED)
+       def.reset();
+     size = 0;
+   }
+ 
+   /**
+    * Closes the current entry.
+    * @exception IOException if an I/O error occured.
+    * @exception ZipException if no entry is active.
+    */
+   public void closeEntry() throws IOException
+   {
+     if (curEntry == null)
+       throw new ZipException("No open entry");
+ 
+     /* First finish the deflater, if appropriate */
+     if (curMethod == DEFLATED)
+       super.finish();
+ 
+     int csize = curMethod == DEFLATED ? def.getTotalOut() : size;
+ 
+     if (curEntry.getSize() < 0)
+       curEntry.setSize(size);
+     else if (curEntry.getSize() != size)
+       throw new ZipException("size was "+size
+ 			     +", but I expected "+curEntry.getSize());
+ 
+     if (curEntry.getCompressedSize() < 0)
+       curEntry.setCompressedSize(csize);
+     else if (curEntry.getCompressedSize() != csize)
+       throw new ZipException("compressed size was "+csize
+ 			     +", but I expected "+curEntry.getSize());
+ 
+     if (curEntry.getCrc() < 0)
+       curEntry.setCrc(crc.getValue());
+     else if (curEntry.getCrc() != crc.getValue())
+       throw new ZipException("crc was " + Long.toHexString(crc.getValue())
+ 			     + ", but I expected " 
+ 			     + Long.toHexString(curEntry.getCrc()));
+ 
+     offset += csize;
+ 
+     /* Now write the data descriptor entry if needed. */
+     if (curMethod == DEFLATED && (curEntry.flags & 8) != 0)
+       {
+ 	writeLeInt(EXTSIG);
+ 	writeLeInt((int)curEntry.getCrc());
+ 	writeLeInt((int)curEntry.getCompressedSize());
+ 	writeLeInt((int)curEntry.getSize());
+ 	offset += EXTHDR;
+       }
+ 
+     entries.addElement(curEntry);
+     curEntry = null;
+   }
+ 
+   /**
+    * Writes the given buffer to the current entry.
+    * @exception IOException if an I/O error occured.
+    * @exception ZipException if no entry is active.
+    */
+   public void write(byte[] b, int off, int len) throws IOException
+   {
+     if (curEntry == null)
+       throw new ZipException("No open entry.");
+ 
+     switch (curMethod)
+       {
+       case DEFLATED:
+ 	super.write(b, off, len);
+ 	break;
+ 	
+       case STORED:
+ 	out.write(b, off, len);
+ 	break;
+       }
+ 
+     crc.update(b, off, len);
+     size += len;
+   }
+ 
+   /**
+    * Finishes the stream.  This will write the central directory at the
+    * end of the zip file and flush the stream.
+    * @exception IOException if an I/O error occured.
+    */
+   public void finish() throws IOException
+   {
+     if (entries == null)
+       return;
+     if (curEntry != null)
+       closeEntry();
+ 
+     int numEntries = 0;
+     int sizeEntries = 0;
+     
+     Enumeration e = entries.elements();
+     while (e.hasMoreElements())
+       {
+ 	ZipEntry entry = (ZipEntry) e.nextElement();
+ 	
+ 	int method = entry.getMethod();
+ 	writeLeInt(CENSIG);
+ 	writeLeShort(method == STORED
+ 		     ? ZIP_STORED_VERSION : ZIP_DEFLATED_VERSION);
+ 	writeLeShort(method == STORED
+ 		     ? ZIP_STORED_VERSION : ZIP_DEFLATED_VERSION);
+ 	writeLeShort(entry.flags);
+ 	writeLeShort(method);
+ 	writeLeInt(entry.getDOSTime());
+ 	writeLeInt((int)entry.getCrc());
+ 	writeLeInt((int)entry.getCompressedSize());
+ 	writeLeInt((int)entry.getSize());
+ 
+ 	byte[] name;
+ 	try
+ 	  {
+ 	    name = entry.getName().getBytes("UTF-8");
+ 	  }
+ 	catch (UnsupportedEncodingException uee)
+ 	  {
+ 	    throw new AssertionError(uee);
+ 	  }
+ 	if (name.length > 0xffff)
+ 	  throw new ZipException("Name too long.");
+ 	byte[] extra = entry.getExtra();
+ 	if (extra == null)
+ 	  extra = new byte[0];
+ 	String str = entry.getComment();
+ 	byte[] comment;
+ 	try
+ 	  {
+ 	    comment = str != null ? str.getBytes("UTF-8") : new byte[0];
+ 	  }
+ 	catch (UnsupportedEncodingException uee)
+ 	  {
+ 	    throw new AssertionError(uee);
+ 	  }
+ 	if (comment.length > 0xffff)
+ 	  throw new ZipException("Comment too long.");
+ 
+ 	writeLeShort(name.length);
+ 	writeLeShort(extra.length);
+ 	writeLeShort(comment.length);
+ 	writeLeShort(0); /* disk number */
+ 	writeLeShort(0); /* internal file attr */
+ 	writeLeInt(0);   /* external file attr */
+ 	writeLeInt(entry.offset);
+ 
+ 	out.write(name);
+ 	out.write(extra);
+ 	out.write(comment);
+ 	numEntries++;
+ 	sizeEntries += CENHDR + name.length + extra.length + comment.length;
+       }
+ 
+     writeLeInt(ENDSIG);
+     writeLeShort(0); /* disk number */
+     writeLeShort(0); /* disk with start of central dir */
+     writeLeShort(numEntries);
+     writeLeShort(numEntries);
+     writeLeInt(sizeEntries);
+     writeLeInt(offset);
+     writeLeShort(zipComment.length);
+     out.write(zipComment);
+     out.flush();
+     entries = null;
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/java/util/zip/package.html gcc-4.1.0/libjava/classpath/java/util/zip/package.html
*** gcc-4.0.2/libjava/classpath/java/util/zip/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/java/util/zip/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,47 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in java.util.zip package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - java.util.zip</title></head>
+ 
+ <body>
+ <p>Utility classes to manipulate zip and gzip archives as files or streams,
+ includes checksum and compression support.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/Accessible.java gcc-4.1.0/libjava/classpath/javax/accessibility/Accessible.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/Accessible.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/Accessible.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,61 ----
+ /* Accessible.java -- primary Java accessibility interface
+    Copyright (C) 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * Implementing the Accessibility API must start with implementation
+  * of this interface at a bare minimum.  This is the major interface
+  * for the Accessibility API which must be implemented by all user
+  * interface components.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface Accessible
+ {
+   /**
+    * If a component supports the Accessibility API then this method should
+    * not return <code>null</code>. Only classes which must extend an accessible
+    * class, but must not itself be accessible, may return null.
+    *
+    * @return the context associated with this accessible object
+    */
+   AccessibleContext getAccessibleContext();
+ } // interface Accessible
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleAction.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleAction.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleAction.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,82 ----
+ /* AccessibleAction.java -- aids in accessibly performing actions
+    Copyright (C) 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * If an object implements this interface then it must be able to perform one
+  * or more actions. Accessibility software can use the implementations of this
+  * interface to discover and perform actions on an object.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleAction()</code> method should
+  * return <code>null</code> if an object does not implement this interface.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleAction()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleAction
+ {
+   /**
+    * Get the number possible actions for this object, with the zeroth
+    * representing the default action.
+    *
+    * @return the 0-based number of actions
+    */
+   int getAccessibleActionCount();
+ 
+   /**
+    * Get a description for the specified action. Returns null if out of
+    * bounds.
+    *
+    * @param i the action to describe, 0-based
+    * @return description of the action
+    */
+   String getAccessibleActionDescription(int i);
+ 
+   /**
+    * Perform the specified action. Does nothing if out of bounds.
+    *
+    * @param i the action to perform, 0-based
+    * @return true if the action was performed
+    */
+   boolean doAccessibleAction(int i);
+ } // interface AccessibleAction
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleBundle.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleBundle.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleBundle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleBundle.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,120 ----
+ /* AccessibleBundle.java -- base class for accessibility "enumerations"
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ import java.util.Locale;
+ 
+ /**
+  * This serves as a base class for accessibility "enumerations".  These
+  * objects are strongly typed; to make up for the lack of true enums in Java.
+  * Display should be locale dependent.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see AccessibleRole
+  * @see AccessibleState
+  * @since 1.2
+  * @status updated to 1.4, but missing Locale support
+  */
+ public abstract class AccessibleBundle
+ {
+   /**
+    * The locale independent name of the object. This is for the computer, not
+    * necessarily for humans; changing it in subclasses is frowned upon.
+    *
+    * @see #toDisplayString(String, Locale)
+    */
+   protected String key;
+ 
+   /**
+    * Default constructor.
+    */
+   public AccessibleBundle()
+   {
+   }
+ 
+   /**
+    * Obtains the key as a localized string, falling back to the
+    * locale-independent version if necessary.
+    *
+    * @param resourceBundle the resource to use for lookup
+    * @param locale the locale to translate to
+    * @return the translated name
+    * @throws NullPointerException if resourceBundle or locale is null
+    * @XXX For now, no transformation is done.
+    */
+   protected String toDisplayString(String resourceBundle, Locale locale)
+   {
+     return key;
+   }
+ 
+   /**
+    * Obtains the key as a localized string, falling back to the
+    * locale-independent version if necessary.
+    *
+    * @param locale the locale to translate to
+    * @return the translated name
+    * @throws NullPointerException if locale is null
+    * @XXX For now, no transformation is done.
+    */
+   public String toDisplayString(Locale locale)
+   {
+     return key;
+   }
+ 
+   /**
+    * Obtains the key as a localized string, using the default locale.
+    *
+    * @return the translated name
+    * @XXX For now, no transformation is done.
+    */
+   public String toDisplayString()
+   {
+     return toDisplayString(Locale.getDefault());
+   }
+ 
+   /**
+    * Obtains the key as a localized string, using the default locale.
+    *
+    * @return the translated name
+    * @XXX For now, no transformation is done.
+    */
+   public String toString()
+   {
+     return toDisplayString(Locale.getDefault());
+   }
+ } // class AccessibleBundle
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleComponent.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleComponent.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleComponent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleComponent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,321 ----
+ /* AccessibleComponent.java -- aids in accessibly rendering Java components
+    Copyright (C) 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ import java.awt.Color;
+ import java.awt.Cursor;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.event.FocusListener;
+ 
+ /**
+  * Objects which are to be rendered to a screen as part of a graphical
+  * user interface should implement this interface.  Accessibility
+  * software can use the implementations of this interface to determine
+  * and set the screen representation for an object.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleComponent()</code> method
+  * should return <code>null</code> if an object does not implement this
+  * interface.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleComponent()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleComponent
+ {
+   /**
+    * Get the background color of this component.
+    *
+    * @return the background color of this component, or null if not supported
+    * @see #setBackground(Color)
+    */
+   Color getBackground();
+ 
+   /**
+    * Set the background color of this component to the specified color.
+    *
+    * @param color the color to set the background to
+    * @see #getBackground()
+    */
+   void setBackground(Color color);
+ 
+   /**
+    * Get the foreground color of this component.
+    *
+    * @return the foreground color of this component, or null if not supported
+    * @see #setForeground(Color)
+    */
+   Color getForeground();
+ 
+   /**
+    * Set the foreground color of this component.
+    *
+    * @param color the color to set the foreground to
+    * @see #getForeground()
+    */
+   void setForeground(Color color);
+ 
+   /**
+    * Get the cursor of this component.
+    *
+    * @return the Cursor of this component, or null if not supported
+    * @see #setCursor(Cursor)
+    */
+   Cursor getCursor();
+ 
+   /**
+    * Set the cursor of the component.
+    *
+    * @param cursor the graphical representation of the cursor to use
+    * @see #getCursor()
+    */
+   void setCursor(Cursor cursor);
+ 
+   /**
+    * Get the font of this component
+    *
+    * @return the font of the component, or null if not supported
+    * @see #setFont(Font)
+    */
+   Font getFont();
+ 
+   /**
+    * Set the font of this component.
+    *
+    * @param font the font to use
+    * @see #getFont()
+    */
+   void setFont(Font font);
+ 
+   /**
+    * Get the <code>FontMetrics</code> of the specified font in this component.
+    *
+    * @param font the specified font
+    * @return the metrics for the specified font, or null if not supported
+    * @throws NullPointerException if font is null
+    * @see #getFont()
+    */
+   FontMetrics getFontMetrics(Font font);
+ 
+   /**
+    * Indicates whether or not this component is enabled. An object which is
+    * enabled also has AccessibleState.ENABLED in its StateSet.
+    *
+    * @return true if the component is enabled
+    * @see #setEnabled(boolean)
+    * @see AccessibleContext#getAccessibleStateSet()
+    * @see AccessibleState#ENABLED
+    */
+   boolean isEnabled();
+ 
+   /**
+    * Set this component to an enabled or disabled state.
+    *
+    * @param b true to enable the component, else disable it
+    * @see #isEnabled()
+    */
+   void setEnabled(boolean b);
+ 
+   /**
+    * Indicates whether or not this component is visible or intends to be
+    * visible although one of its ancestors may not be. An object which is
+    * visible also has AccessibleState.VISIBLE in its StateSet. Check
+    * <code>isShowing()</code> to see if the object is on screen.
+    *
+    * @return true if the component is visible
+    * @see #setVisible(boolean)
+    * @see AccessibleContext#getAccessibleStateSet()
+    * @see AccessibleState#VISIBLE
+    */
+   boolean isVisible();
+ 
+   /**
+    * Set the visible state of this component.
+    *
+    * @param b true to make the component visible, else hide it
+    * @see #isVisible()
+    */
+   void setVisible(boolean b);
+ 
+   /**
+    * Indicates whether or not this component is visible by checking
+    * the visibility of this component and its ancestors. The component may
+    * be hidden on screen by another component like pop-up help. An object
+    * which is showing on screen also has AccessibleState.SHOWING in its
+    * StateSet.
+    *
+    * @return true if component and ancestors are visible
+    * @see #isVisible()
+    * @see #setVisible(boolean)
+    * @see AccessibleContext#getAccessibleStateSet()
+    * @see AccessibleState#SHOWING
+    */
+   boolean isShowing();
+ 
+   /**
+    * Tests whether or not the specified point is contained within
+    * this component.  The coordinates are specified relative to this
+    * component's coordinate system.
+    *
+    * @param point the Point to locate
+    * @return true if the point is within this component
+    * @throws NullPointerException if point is null
+    * @see #getBounds()
+    */
+   boolean contains(Point point);
+ 
+   /**
+    * Get the location of this component in the screen's coordinate space.
+    * The point specified is the top-left corner of this component.
+    *
+    * @return the location on screen, or null if off-screen
+    * @see #getBounds()
+    * @see #getLocation()
+    */
+   Point getLocationOnScreen();
+ 
+   /**
+    * Get the location of this component in the parent's coordinate system.
+    * The point specified is the top-left corner of this component.
+    *
+    * @return the location in the parent on screen, or null if off-screen
+    * @see #getBounds()
+    * @see #getLocationOnScreen()
+    * @see #setLocation(Point)
+    */
+   Point getLocation();
+ 
+   /**
+    * Set the location of this component relative to its parent.  The point
+    * specified represents the top-left corner of this component.
+    *
+    * @param point the top-left corner of this component relative to the parent
+    * @throws NullPointerException if point is null
+    * @see #getLocation()
+    */
+   void setLocation(Point point);
+ 
+   /**
+    * Get the bounds of this component relative to its parent - it's width,
+    * height, and relative location to its parent.
+    *
+    * @return the bounds of this component, or null if not on screen
+    * @see #contains(Point)
+    */
+   Rectangle getBounds();
+ 
+   /**
+    * Set the bounds of this component to the specified height and width, and
+    * relative location to its parent.
+    *
+    * @param rectangle the new height, width, and relative location
+    * @throws NullPointerException if rectangle is null
+    */
+   void setBounds(Rectangle rectangle);
+ 
+   /**
+    * Get the size of this component - it's width and height.
+    *
+    * @return the dimensions of this component, or null if not on screen
+    * @see #setSize(Dimension)
+    */
+   Dimension getSize();
+ 
+   /**
+    * Set the size of this component to the given dimensions.
+    *
+    * @param dimension the new size of the component
+    * @throws NullPointerException if dimension is null
+    * @see #getSize()
+    */
+   void setSize(Dimension dimension);
+ 
+   /**
+    * If an object exists at the specified point which is a child of this
+    * parent component, and it is accessible, then it is returned.
+    *
+    * @param point the location within this component's coordinate system
+    * @return the accessible child object at that point, or null
+    */
+   Accessible getAccessibleAt(Point point);
+ 
+   /**
+    * Indicates whether or not this component can accept focus. An object
+    * which can accept focus also has AccessibleState.FOCUSABLE in its
+    * StateSet.
+    *
+    * @return true if the component can accept focus
+    * @see AccessibleContext#getAccessibleStateSet()
+    * @see AccessibleState#FOCUSABLE
+    * @see AccessibleState#FOCUSED
+    */
+   boolean isFocusTraversable();
+ 
+   /**
+    * If this method is called this component will attempt to gain focus,
+    * but if it cannot accept focus nothing happens. On success, the StateSet
+    * will contain AccessibleState.FOCUSED
+    *
+    * @see #isFocusTraversable()
+    * @see AccessibleState#FOCUSED
+    */
+   void requestFocus();
+ 
+   /**
+    * Adds the specified listener to this component.
+    *
+    * @param listener the listener to add to this component
+    * @see #removeFocusListener(FocusListener)
+    */
+   void addFocusListener(FocusListener listener);
+ 
+   /**
+    * Removes the specified listener from this component.
+    *
+    * @param listener the listener to remove
+    * @see #addFocusListener(FocusListener)
+    */
+   void removeFocusListener(FocusListener listener);
+ } // interface AccessibleComponent
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleContext.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleContext.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleContext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,589 ----
+ /* AccessibleContext.java -- the context of an accessible object
+    Copyright (C) 2002 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyChangeSupport;
+ import java.util.Locale;
+ 
+ /**
+  * The minimum information that all accessible objects return. This includes
+  * name, description, role, and state of the object, parents and children,
+  * and any other useful information. If a component supports further details,
+  * it should implement one of the following:<ul>
+  * <li>{@link AccessibleAction} - the object can perform actions</li>
+  * <li>{@link AccessibleComponent} - the object has a graphical
+  *     representation</li>
+  * <li>{@link AccessibleSelection} - the object allows its children to be
+  *     selected</li>
+  * <li>{@link AccessibleText} - the object represents editable text</li>
+  * <li>{@link AccessibleValue} - the object represents a numerical value</li>
+  * </ul>
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class AccessibleContext
+ {
+   /**
+    * Constant used when the accessible name has changed. Both the old and new
+    * values are listed in the event.
+    *
+    * @see #getAccessibleName()
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_NAME_PROPERTY
+     = "AccessibleName";
+ 
+   /**
+    * Constant used when the accessible description has changed. Both the old
+    * and new values are listed in the event.
+    *
+    * @see #getAccessibleDescription()
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_DESCRIPTION_PROPERTY
+     = "AccessibleDescription";
+ 
+   /**
+    * Constant used when the accessibleStateSet has changed. Both the old and
+    * new values are listed in the event, although either may be null if a
+    * state was disabled at that time.
+    *
+    * @see #getAccessibleStateSet()
+    * @see AccessibleState
+    * @see AccessibleStateSet
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_STATE_PROPERTY
+     = "AccessibleState";
+ 
+   /**
+    * Constant used when the accessibleValue has changed. Both the old and new
+    * values are listed in the event.
+    *
+    * @see #getAccessibleValue()
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_VALUE_PROPERTY
+     = "AccessibleValue";
+ 
+   /**
+    * Constant used when the accessibleSelection has changed. Both the old and
+    * new values of the event are reserved for future use.
+    *
+    * @see #getAccessibleSelection()
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_SELECTION_PROPERTY
+     = "AccessibleSelection";
+ 
+   /**
+    * Constant used when the accessibleText has changed. Both the old and new
+    * values of the event are reserved for future use.
+    *
+    * @see #getAccessibleText()
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_TEXT_PROPERTY
+     = "AccessibleText";
+ 
+   /**
+    * Constant used when the accessibleText caret has changed. Both the old and
+    * new values are listed in the event.
+    *
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_CARET_PROPERTY
+     = "AccessibleCaret";
+ 
+   /**
+    * Constant used when the visible data has changed. Both the old and new
+    * values of the event are reserved for future use.
+    *
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_VISIBLE_DATA_PROPERTY
+     = "AccessibleVisibleData";
+ 
+   /**
+    * Constant used when children are added or removed. On addition, the new
+    * value of the event holds the new child; on removal, the old value holds
+    * the removed child.
+    *
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_CHILD_PROPERTY
+     = "AccessibleChild";
+ 
+   /**
+    * Constant used when active descendent of a component has changed. Both
+    * the old and new values are listed in the event.
+    *
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public static final String ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY
+     = "AccessibleActiveDescendant";
+ 
+   /**
+    * Constant used when the accessible table caption has changed. Both the
+    * old and new values are listed in the event.
+    *
+    * @see Accessible
+    * @see AccessibleTable
+    */
+   public static final String ACCESSIBLE_TABLE_CAPTION_CHANGED
+     = "accessibleTableCaptionChanged";
+ 
+   /**
+    * Constant used when the accessible table summary has changed. Both the
+    * old and new values are listed in the event.
+    *
+    * @see Accessible
+    * @see AccessibleTable
+    */
+   public static final String ACCESSIBLE_TABLE_SUMMARY_CHANGED
+     = "accessibleTableSummaryChanged";
+ 
+   /**
+    * Constant used when the accessible table model has changed. Only the new
+    * value of the event has meaning.
+    *
+    * @see AccessibleTable
+    * @see AccessibleTableModelChange
+    */
+   public static final String ACCESSIBLE_TABLE_MODEL_CHANGED
+     = "accessibleTableModelChanged";
+ 
+   /**
+    * Constant used when the accessible table row header has changed. Only the
+    * new value of the event has meaning.
+    *
+    * @see AccessibleTable
+    * @see AccessibleTableModelChange
+    */
+   public static final String ACCESSIBLE_TABLE_ROW_HEADER_CHANGED
+     = "accessibleTableRowHeaderChanged";
+ 
+   /**
+    * Constant used when the accessible table row description has changed. Only
+    * the new value of the event has meaning.
+    *
+    * @see AccessibleTable
+    */
+   public static final String ACCESSIBLE_TABLE_ROW_DESCRIPTION_CHANGED
+     = "accessibleTableRowDescriptionChanged";
+ 
+   /**
+    * Constant used when the accessible table column header has changed. Only
+    * the new value of the event has meaning.
+    *
+    * @see AccessibleTable
+    * @see AccessibleTableModelChange
+    */
+   public static final String ACCESSIBLE_TABLE_COLUMN_HEADER_CHANGED
+     = "accessibleTableColumnHeaderChanged";
+ 
+   /**
+    * Constant used when the accessible table column description has changed.
+    * Only the new value of the event has meaning.
+    *
+    * @see AccessibleTable
+    */
+   public static final String ACCESSIBLE_TABLE_COLUMN_DESCRIPTION_CHANGED
+     = "accessibleTableColumnDescriptionChanged";
+ 
+   /**
+    * Constant used when supported set of actions has changed. Both the old
+    * and new values are listed in the event.
+    *
+    * @see AccessibleAction
+    */
+   public static final String ACCESSIBLE_ACTION_PROPERTY
+     = "accessibleActionProperty";
+ 
+   /**
+    * Constant used when a hypertext element received focus. Both the old
+    * and new values are listed in the event, with -1 indicating that no link
+    * had focus.
+    *
+    * @see AccessibleHyperlink
+    */
+   public static final String ACCESSIBLE_HYPERTEXT_OFFSET
+     = "AccessibleHypertextOffset";
+ 
+   /**
+    * The accessible parent of this object.
+    *
+    * @see #getAccessibleParent()
+    * @see #setAccessibleParent(Accessible)
+    */
+   protected Accessible accessibleParent;
+ 
+   /**
+    * A localized string naming this object.
+    *
+    * @see #getAccessibleName()
+    * @see #setAccessibleName(String)
+    */
+   protected String accessibleName;
+ 
+   /**
+    * A localized string describing this object.
+    *
+    * @see #getAccessibleDescription()
+    * @see #setAccessibleDescription(String)
+    */
+   protected String accessibleDescription;
+ 
+   /**
+    * The listener tool.
+    *
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    * @see #removePropertyChangeListener(PropertyChangeListener)
+    * @see #firePropertyChange(String, Object, Object)
+    */
+   private final PropertyChangeSupport listeners
+     = new PropertyChangeSupport(this);
+ 
+   /**
+    * Default constructor.
+    */
+   public AccessibleContext()
+   {
+   }
+ 
+   /**
+    * Get the localized name of the object. For example, a label may just
+    * return the text of the label, while an entry field for city may return
+    * "city" in en_US.
+    *
+    * @return the accessible object's name, or null if it is unnamed
+    * @see #setAccessibleName(String)
+    */
+   public String getAccessibleName()
+   {
+     return accessibleName;
+   }
+ 
+   /**
+    * Set the localized name of the object. This will fire a
+    * PropertyChangeEvent with ACCESSIBLE_NAME_PROPERTY.
+    *
+    * @param s the new name
+    * @see #getAccessibleName()
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public void setAccessibleName(String s)
+   {
+     listeners.firePropertyChange(ACCESSIBLE_NAME_PROPERTY, accessibleName, s);
+     accessibleName = s;
+   }
+ 
+   /**
+    * Get the localized description of the object. For example, a 'Cancel'
+    * button may be described as "Ignore changes and close dialog box" in
+    * en_US.
+    *
+    * @return the accessible object's description, or null if there is none
+    * @see #setAccessibleDescription(String)
+    */
+   public String getAccessibleDescription()
+   {
+     return accessibleDescription;
+   }
+ 
+   /**
+    * Set the localized name of the object. This will fire a
+    * PropertyChangeEvent with ACCESSIBLE_DESCRIPTION_PROPERTY.
+    *
+    * @param s the new description
+    * @see #getAccessibleDescription()
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public void setAccessibleDescription(String s)
+   {
+     listeners.firePropertyChange(ACCESSIBLE_DESCRIPTION_PROPERTY,
+                                  accessibleDescription, s);
+     accessibleDescription = s;
+   }
+ 
+   /**
+    * Gets the role of this object. For example, a button serves the role of
+    * AccessibleRole.PUSH_BUTTON. This allows assistive technologies to funnel
+    * similar objects into the same assistance classes. Note that the class
+    * is extensible, to define new roles if necessary.
+    *
+    * @return the role of the object
+    * @see AccessibleRole
+    */
+   public abstract AccessibleRole getAccessibleRole();
+ 
+   /**
+    * Gets the state set of this object. A change in the state of the object
+    * will fire a PropertyChangeEvent for ACCESSIBLE_STATE_PROPERTY.
+    *
+    * @return the current state of the object
+    * @see AccessibleState
+    * @see AccessibleStateSet
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public abstract AccessibleStateSet getAccessibleStateSet();
+ 
+   /**
+    * Return the accessible parent of this object.
+    *
+    * @return the accessible parent, or null if there is none
+    */
+   public Accessible getAccessibleParent()
+   {
+     return accessibleParent;
+   }
+ 
+   /**
+    * Sets the accessible parent of this object. This should only be used when
+    * the current parent object should not be the accessible parent; only the
+    * parent of the accessible child should call this method.
+    *
+    * @param a the new parent
+    */
+   public void setAccessibleParent(Accessible a)
+   {
+     accessibleParent = a;
+   }
+ 
+   /**
+    * Gets the index of this object within its accessible parent.
+    *
+    * @return the 0-based index, or -1 if there is no accessible parent
+    * @see #getAccessibleParent()
+    * @see #getAccessibleChildrenCount()
+    * @see #getAccessibleChild(int)
+    */
+   public abstract int getAccessibleIndexInParent();
+ 
+   /**
+    * Returns the number of accessible children of this object.
+    *
+    * @return the number of accessible children
+    * @see #getAccessibleChild(int)
+    */
+   public abstract int getAccessibleChildrenCount();
+ 
+   /**
+    * Returns the specified accessible chile.
+    *
+    * @param i the 0-based index to get
+    * @return the child, or null if out of bounds
+    * @see #getAccessibleChildrenCount()
+    */
+   public abstract Accessible getAccessibleChild(int i);
+ 
+   /**
+    * Gets the component locale, deferring to the parent if one is not declared.
+    *
+    * @return the locale
+    * @throws java.awt.IllegalComponentStateException if there is no locale
+    *         or parent
+    */
+   public abstract Locale getLocale();
+ 
+   /**
+    * Add a PropertyChangeListener to the listener list. This listener will
+    * be notified of all property changes to the accessible object.
+    *
+    * @param l the listener to add
+    * @see #ACCESSIBLE_NAME_PROPERTY
+    * @see #ACCESSIBLE_DESCRIPTION_PROPERTY
+    * @see #ACCESSIBLE_STATE_PROPERTY
+    * @see #ACCESSIBLE_VALUE_PROPERTY
+    * @see #ACCESSIBLE_SELECTION_PROPERTY
+    * @see #ACCESSIBLE_TEXT_PROPERTY
+    * @see #ACCESSIBLE_VISIBLE_DATA_PROPERTY
+    * @see #removePropertyChangeListener(PropertyChangeListener)
+    */
+   public void addPropertyChangeListener(PropertyChangeListener l)
+   {
+     listeners.addPropertyChangeListener(l);
+   }
+ 
+   /**
+    * Remove a PropertyChangeListener from the listener list.
+    *
+    * @param l the listener to remove
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    */
+   public void removePropertyChangeListener(PropertyChangeListener l)
+   {
+     listeners.removePropertyChangeListener(l);
+   }
+ 
+   /**
+    * Get any supported accessible actions. The default implementation returns
+    * null.
+    *
+    * @return the supported action, or null
+    * @see AccessibleAction
+    */
+   public AccessibleAction getAccessibleAction()
+   {
+     return null;
+   }
+ 
+   /**
+    * Get any supported accessible compoent. The default implementation returns
+    * null.
+    *
+    * @return the supported component, or null
+    * @see AccessibleComponent
+    */
+   public AccessibleComponent getAccessibleComponent()
+   {
+     return null;
+   }
+ 
+   /**
+    * Get any supported accessible selection. The default implementation returns
+    * null.
+    *
+    * @return the supported selection, or null
+    * @see AccessibleSelection
+    */
+   public AccessibleSelection getAccessibleSelection()
+   {
+     return null;
+   }
+ 
+   /**
+    * Get any supported accessible text. The default implementation returns
+    * null.
+    *
+    * @return the supported text, or null
+    * @see AccessibleText
+    */
+   public AccessibleText getAccessibleText()
+   {
+     return null;
+   }
+ 
+   /**
+    * Get any supported accessible editable text. The default implementation
+    * returns null.
+    *
+    * @return the supported editable text, or null
+    * @see AccessibleEditableText
+    */
+   public AccessibleEditableText getAccessibleEditableText()
+   {
+     return null;
+   }
+ 
+   /**
+    * Get any supported accessible value. The default implementation returns
+    * null.
+    *
+    * @return the supported value, or null
+    * @see AccessibleValue
+    */
+   public AccessibleValue getAccessibleValue()
+   {
+     return null;
+   }
+ 
+   /**
+    * Get all supported accessible icons. The default implementation returns
+    * null.
+    *
+    * @return the supported icons, or null
+    * @see AccessibleIcon
+    */
+   public AccessibleIcon[] getAccessibleIcon()
+   {
+     return null;
+   }
+ 
+   /**
+    * Get any supported accessible relation set. The default implementation
+    * returns null.
+    *
+    * @return the supported relation set, or null
+    * @see AccessibleRelationSet
+    */
+   public AccessibleRelationSet getAccessibleRelationSet()
+   {
+     return null;
+   }
+ 
+   /**
+    * Get any supported accessible table. The default implementation returns
+    * null.
+    *
+    * @return the supported table, or null
+    * @see AccessibleTable
+    */
+   public AccessibleTable getAccessibleTable()
+   {
+     return null;
+   }
+ 
+   /**
+    * Fire an event to report property changes. This is intended for use by
+    * the accessible objects, not general application programs. If oldValue and
+    * newValue differ, and the listenter list is not empty, a PropertyChange
+    * event is fired to each listener.
+    *
+    * @param name the property name
+    * @param oldValue the prior value
+    * @param newValue the updated value
+    * @see PropertyChangeSupport
+    * @see #addPropertyChangeListener(PropertyChangeListener)
+    * @see #removePropertyChangeListener(PropertyChangeListener)
+    * @see #ACCESSIBLE_NAME_PROPERTY
+    * @see #ACCESSIBLE_DESCRIPTION_PROPERTY
+    * @see #ACCESSIBLE_STATE_PROPERTY
+    * @see #ACCESSIBLE_VALUE_PROPERTY
+    * @see #ACCESSIBLE_SELECTION_PROPERTY
+    * @see #ACCESSIBLE_TEXT_PROPERTY
+    * @see #ACCESSIBLE_VISIBLE_DATA_PROPERTY
+    */
+   public void firePropertyChange(String name, Object oldValue, Object newValue)
+   {
+     listeners.firePropertyChange(name, oldValue, newValue);
+   }
+ } // class AccessibleContext
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleEditableText.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleEditableText.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleEditableText.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleEditableText.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,142 ----
+ /* AccessibleEditableText.java -- aids in accessibly for editable text
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ import javax.swing.text.AttributeSet;
+ 
+ /**
+  * Objects which present editable textual information on the display should
+  * implement this interface.  Accessibility software can use the
+  * implementations of this interface to change the content, attributes,
+  * and spacial location of the text.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleEditableText()</code> method
+  * should return <code>null</code> if an object does not implement this
+  * interface.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleText()
+  * @see AccessibleContext#getAccessibleEditableText()
+  * @since 1.2
+  * @status updated to 1.4, except for javax.swing support
+  */
+ public interface AccessibleEditableText extends AccessibleText
+ {
+   /**
+    * Set the text contents to the given string.
+    *
+    * @param s the new text
+    */
+   // XXX What happens if s is null?
+   void setTextContents(String s);
+ 
+   /**
+    * Inserts the given string at the specified location.
+    *
+    * @param index the index for insertion
+    * @param s the new text
+    */
+   // XXX What happens if index is out of bounds, or s is null?
+   void insertTextAtIndex(int index, String s);
+ 
+   /**
+    * Return the text between two points.
+    *
+    * @param start the start position, inclusive
+    * @param end the end position, exclusive
+    */
+   // XXX What happens if indices are out of bounds?
+   String getTextRange(int start, int end);
+ 
+   /**
+    * Delete the text between two points.
+    *
+    * @param start the start position, inclusive
+    * @param end the end position, exclusive
+    */
+   // XXX What happens if indices are out of bounds?
+   void delete(int start, int end);
+ 
+   /**
+    * Cut the text between two points to the system clipboard.
+    *
+    * @param start the start position, inclusive
+    * @param end the end position, exclusive
+    */
+   // XXX What happens if indices are out of bounds?
+   void cut(int start, int end);
+ 
+   /**
+    * Paste the text from the system clipboard at the given index.
+    *
+    * @param start the start position
+    */
+   // XXX What happens if start is out of bounds?
+   void paste(int start);
+ 
+   /**
+    * Replace the text between two points with the given string.
+    *
+    * @param start the start position, inclusive
+    * @param end the end position, exclusive
+    * @param s the string to paste
+    */
+   // XXX What happens if indices are out of bounds, or s is null?
+   void replaceText(int start, int end, String s);
+ 
+   /**
+    * Select the text between two points.
+    *
+    * @param start the start position, inclusive
+    * @param end the end position, exclusive
+    */
+   // XXX What happens if indices are out of bounds?
+   void selectText(int start, int stop);
+ 
+   /**
+    * Set the attributes of text between two points.
+    *
+    * @param start the start position, inclusive
+    * @param end the end position, exclusive
+    * @param s the new attribute set for the range
+    */
+   // XXX What happens if indices are out of bounds, or s is null?
+   void setAttributes(int start, int end, AttributeSet s);
+ } // interface AccessibleEditableText
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleExtendedComponent.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleExtendedComponent.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleExtendedComponent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleExtendedComponent.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* AccessibleExtendedComponent.java -- aids in extended component access
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ /**
+  * Objects which present graphical components with extensions such as key
+  * bindings or tool-tips should implement this interface.  Accessibility
+  * software can use the implementations of this interface to display the
+  * extended information of the component.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleComponent()</code> method
+  * should return an instance of this interface only when it is supported.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleComponent()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleExtendedComponent extends AccessibleComponent
+ {
+   /**
+    * Returns the tool-tip text for this component.
+    *
+    * @return the tool-tip, or null if not supported
+    */
+   String getToolTipText();
+ 
+   /**
+    * Returns the title border text for this component.
+    *
+    * @return the titled border text, or null if not supported
+    */
+   String getTitledBorderText();
+ 
+   /**
+    * Returns the accessible key bindings for this component.
+    *
+    * @return the key bindings, or null if not supported
+    */
+   AccessibleKeyBinding getAccessibleKeyBinding();
+ } // interface AccessibleExtendedComponent
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleExtendedTable.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleExtendedTable.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleExtendedTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleExtendedTable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,81 ----
+ /* AccessibleExtendedTable.java -- aids in extended table access
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ /**
+  * Objects which present 2-D tables with the extension of a flat address
+  * space should implement this interface.  Accessibility software can use the
+  * implementations of this interface to better manipulate the table.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleTable()</code> method
+  * should return an instance of this interface only when it is supported.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleTable()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleExtendedTable extends AccessibleTable
+ {
+   /**
+    * Returns the row number of an index in the table.
+    *
+    * @param index the cell index, in row-major form from (0,0)
+    * @return the row number, or -1 if out of bounds
+    */
+   int getAccessibleRow(int index);
+ 
+   /**
+    * Returns the column number of an index in the table.
+    *
+    * @param index the cell index, in row-major form from (0,0)
+    * @return the column number, or -1 if out of bounds
+    */
+   int getAccessibleColumn(int index);
+ 
+   /**
+    * Returns the cell number for a row-major address from (0,0).
+    *
+    * @param r the row
+    * @param c the column
+    * @return the cell index
+    */
+    int getAccessibleIndex(int r, int c);
+ } // interface AccessibleExtendedTable
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleHyperlink.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleHyperlink.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleHyperlink.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleHyperlink.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,139 ----
+ /* AccessibleHyperlink.java -- aids in accessibly navigating hypertext
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * This object encapsulates actions associated with navigating hypertext.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleText
+  * @see AccessibleContext#getAccessibleText()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public abstract class AccessibleHyperlink implements AccessibleAction
+ {
+   /**
+    * The default constructor.
+    */
+   public AccessibleHyperlink()
+   {
+   }
+ 
+   /**
+    * Returns whether the document the link references is still valid, as the
+    * association may have changed with a text edit.
+    *
+    * @return true if the link is valid with respect to the AccessibleHypertext
+    */
+   public abstract boolean isValid();
+ 
+   /**
+    * Get the number possible actions for this object, starting from 0. In
+    * general, a hypertext link has only one action, except for an image map,
+    * so there isn't really a default action.
+    *
+    * @return the 0-based number of actions
+    */
+   public abstract int getAccessibleActionCount();
+ 
+   /**
+    * Perform the specified action. Does nothing if out of bounds.
+    *
+    * @param i the action to perform, 0-based
+    * @return true if the action was performed
+    * @see #getAccessibleActionCount()
+    */
+   public abstract boolean doAccessibleAction(int i);
+ 
+   /**
+    * Get the anchor text of the link, or null if the index is out of bounds.
+    * For example, &lt;a href="http://www.gnu.org/"&gt;GNU Home Page&lt;/a&gt;
+    * would return "GNU Home Page", while &lt;a HREF="#top"&gt;
+    * &lt;img src="top-hat.png" alt="top hat"&gt;&lt;/a&gt; would return
+    * "top hat".
+    *
+    * @param i the link to retrieve, 0-based
+    * @return the link anchor text
+    * @see #getAccessibleActionCount()
+    */
+   public abstract String getAccessibleActionDescription(int i);
+ 
+   /**
+    * Get the link location, or null if the index is out of bounds. For
+    * example, &lt;a href="http://www.gnu.org/"&gt;GNU Home Page&lt;/a&gt;
+    * would return a java.net.URL("http://www.gnu.org/").
+    *
+    * @param i the link to retrieve, 0-based
+    * @return the link location
+    * @see #getAccessibleActionCount()
+    */
+   public abstract Object getAccessibleActionObject(int i);
+ 
+   /**
+    * Get the anchor appropriate for the link, or null if the index is out of
+    * bounds. For example, &lt;a href="http://www.gnu.org/"&gt;GNU Home Page
+    * &lt;/a&gt; would return "GNU Home Page", while &lt;a HREF="#top"&gt;
+    * &lt;img src="top-hat.png" alt="top hat"&gt;&lt;/a&gt; would return
+    * an ImageIcon("top-hat.png", "top hat").
+    *
+    * @param i the link to retrieve, 0-based
+    * @return the link anchor object
+    * @see #getAccessibleActionCount()
+    */
+   public abstract Object getAccessibleActionAnchor(int i);
+ 
+   /**
+    * Gets the character index where this link starts in the parent hypertext
+    * document.
+    *
+    * @return the starting index
+    */
+   public abstract int getStartIndex();
+ 
+   /**
+    * Gets the character index where this link ends in the parent hypertext
+    * document.
+    *
+    * @return the ending index
+    */
+   public abstract int getEndIndex();
+ } // class AccessibleAction
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleHypertext.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleHypertext.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleHypertext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleHypertext.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,84 ----
+ /* AccessibleHypertext.java -- aids in accessibly rendering hypertext
+    Copyright (C) 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * Objects which present hyperlinks in a document should implement this
+  * interface.  Accessibility software can use the implementations of this
+  * interface to aid the user in navigating the links.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleText()</code> method
+  * should return an instance of this interface only when it is supported.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleText
+  * @see AccessibleContext#getAccessibleText()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleHypertext extends AccessibleText
+ {
+   /**
+    * Returns the number of links in the document, if any exist.
+    *
+    * @return the number of links, or -1
+    */
+   int getLinkCount();
+ 
+   /**
+    * Returns link object denoted by the number <code>i</code> in this
+    * document, or null if i is out of bounds.
+    *
+    * @param i the ith hyperlink of the document
+    * @return link object denoted by <code>i</code>
+    */
+   AccessibleHyperlink getLink(int i);
+ 
+   /**
+    * Returns the link index for this character index if it resides within
+    * one of the hyperlinks of the document. If no association exists at that
+    * character, or c is out of bounds, returns -1.
+    *
+    * @param c the character index
+    * @return the link index, or -1
+    */
+   int getLinkIndex(int c);
+ } // interface AccessibleHypertext
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleIcon.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleIcon.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleIcon.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleIcon.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,85 ----
+ /* AccessibleIcon.java -- aids in accessibly rendering icons
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * Objects which have an associated icon, such as buttons, should implement
+  * this interface.  Accessibility software can use the implementations of this
+  * interface to aid the user in navigating the links.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleIcon()</code> method should
+  * return <code>null</code> if an object does not implement this interface.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleIcon()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleIcon
+ {
+   /**
+    * Returns a textual description of the icon and its purpose.
+    *
+    * @return the description, or null if there is none
+    */
+   String getAccessibleIconDescription();
+ 
+   /**
+    * Modify the textual description of the icon and its purpose.
+    *
+    * @param s the new descrption string
+    */
+   void setAccessibleIconDescription(String s);
+ 
+   /**
+    * Get the icon width.
+    *
+    * @return the width
+    */
+   int getAccessibleIconWidth();
+ 
+   /**
+    * Get the icon height.
+    *
+    * @return the height
+    */
+   int getAccessibleIconHeight();
+ } // interface AccessibleIcon
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleKeyBinding.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleKeyBinding.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleKeyBinding.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleKeyBinding.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,78 ----
+ /* AccessibleKeyBinding.java -- aids in using keyboard navigation
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * Objects which have keyboard bindings for mneumonics or shortcuts should
+  * implement this interface.  Accessibility software can use the
+  * implementations of this interface to aid the user in using the key
+  * bindings.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleKeyBinding()</code> method
+  * should return <code>null</code> if an object does not implement this
+  * interface.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleKeyBinding()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleKeyBinding
+ {
+   /**
+    * Returns the count of key bindings for this object.
+    *
+    * @return the 0-based count, or -1 if there are none
+    */
+   int getAccessibleKeyBindingCount();
+ 
+   /**
+    * Return the numbered key binding, which can then be cast in an
+    * implementation dependent way to the appropriate object type. For example,
+    * swing uses <code>javax.swing.KeyStroke</code>. This returns null if i
+    * is out of bounds.
+    *
+    * @param i the 0-based index of key bindings
+    * @return the key binding
+    * @see #getAccessibleKeyBindingCount()
+    */
+   Object getAccessibleKeyBinding(int i);
+ } // interface AccessibleKeyBinding
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleRelation.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleRelation.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleRelation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleRelation.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,222 ----
+ /* AccessibleRelation.java -- the relation between accessible objects
+    Copyright (C) 2002, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ import java.util.Locale;
+ 
+ /**
+  * The relation between one accessible object and one or more other objects.
+  * For example, a button may control an action. An AccessibleRelationSet
+  * summarizes all relations of the object. This strongly typed "enumeration"
+  * supports localized strings. If the constants of this class are not
+  * adequate, new ones may be added in a similar matter.
+  * 
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class AccessibleRelation extends AccessibleBundle
+ {
+   /**
+    * Indicates the object labels other objects.
+    *
+    * @see #getTarget()
+    * @see #CONTROLLER_FOR
+    * @see #CONTROLLED_BY
+    * @see #LABELED_BY
+    * @see #MEMBER_OF
+    */
+   public static final String LABEL_FOR = "labelFor";
+ 
+   /**
+    * Indicates the object is labeled by other objects.
+    *
+    * @see #getTarget()
+    * @see #CONTROLLER_FOR
+    * @see #CONTROLLED_BY
+    * @see #LABEL_FOR
+    * @see #MEMBER_OF
+    */
+   public static final String LABELED_BY = "labeledBy";
+ 
+   /**
+    * Indicates an object is a member of a group of target objects.
+    *
+    * @see #getTarget()
+    * @see #CONTROLLER_FOR
+    * @see #CONTROLLED_BY
+    * @see #LABEL_FOR
+    * @see #LABELED_BY
+    */
+   public static final String MEMBER_OF = "memberOf";
+ 
+   /**
+    * Indicates an object is a controller for other objects.
+    *
+    * @see #getTarget()
+    * @see #CONTROLLED_BY
+    * @see #LABEL_FOR
+    * @see #LABELED_BY
+    * @see #MEMBER_OF
+    */
+   public static final String CONTROLLER_FOR = "controllerFor";
+ 
+   /**
+    * Indicates an object is controlled by other objects.
+    *
+    * @see #getTarget()
+    * @see #CONTROLLER_FOR
+    * @see #LABEL_FOR
+    * @see #LABELED_BY
+    * @see #MEMBER_OF
+    */
+   public static final String CONTROLLED_BY = "controlledBy";
+ 
+   /** Indicates that the label target group has changed. */
+   public static final String LABEL_FOR_PROPERTY = "labelForProperty";
+ 
+   /** Indicates that the labelling objects have changed. */
+   public static final String LABELED_BY_PROPERTY = "labeledByProperty";
+ 
+   /** Indicates that group membership has changed. */
+   public static final String MEMBER_OF_PROPERTY = "memberOfProperty";
+ 
+   /** Indicates that the controller target group has changed. */
+   public static final String CONTROLLER_FOR_PROPERTY = "controllerForProperty";
+ 
+   /** Indicates that the controlling objects have changed. */
+   public static final String CONTROLLED_BY_PROPERTY = "controlledByProperty";
+ 
+   /** An empty set of targets. */
+   private static final Object[] EMPTY_TARGETS = { };
+ 
+   /**
+    * The related objects.
+    *
+    * @see #getTarget()
+    * @see #setTarget(Object)
+    * @see #setTarget(Object[])
+    */
+   Object[] targets;
+ 
+   /**
+    * Create a new relation with a locale independent key, and no related
+    * objects.
+    *
+    * @param key the name of the role
+    * @see #toDisplayString(String, Locale)
+    */
+   public AccessibleRelation(String key)
+   {
+     this.key = key;
+     targets = EMPTY_TARGETS;
+   }
+ 
+   /**
+    * Create a new relation with a locale independent key, and a single related
+    * object.
+    *
+    * @param key the name of the role
+    * @param target the related object
+    * @see #toDisplayString(String, Locale)
+    */
+   public AccessibleRelation(String key, Object target)
+   {
+     this.key = key;
+     targets = new Object[] { target };
+   }
+ 
+   /**
+    * Create a new relation with a locale independent key, and the given
+    * related objects.
+    *
+    * @param key the name of the role
+    * @param targets the related objects
+    * @see #toDisplayString(String, Locale)
+    */
+   public AccessibleRelation(String key, Object[] targets)
+   {
+     this.key = key;
+     this.targets = targets == null ? EMPTY_TARGETS : targets;
+   }
+ 
+   /**
+    * Return the key for this relation.
+    *
+    * @return the key
+    * @see #CONTROLLER_FOR
+    * @see #CONTROLLED_BY
+    * @see #LABEL_FOR
+    * @see #LABELED_BY
+    * @see #MEMBER_OF
+    */
+   public String getKey()
+   {
+     return key;
+   }
+ 
+   /**
+    * Return the targets of this relation.
+    *
+    * @return the targets, may be empty, but never null
+    */
+   public Object[] getTarget()
+   {
+     return targets;
+   }
+ 
+   /**
+    * Set the target to a single object.
+    *
+    * @param target the new target
+    */
+   public void setTarget(Object target)
+   {
+     targets = new Object[] { target };
+   }
+ 
+   /**
+    * Set the target to an array of objects.
+    *
+    * @param targets the new targets
+    */
+   public void setTarget(Object[] targets)
+   {
+     this.targets = targets == null ? EMPTY_TARGETS : targets;
+   }
+ } // class AccessibleRelation
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleRelationSet.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleRelationSet.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleRelationSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleRelationSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,223 ----
+ /* AccessibleRelationSet.java -- the combined relations of an accessible object
+    Copyright (C) 2002, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ import java.util.Locale;
+ import java.util.Vector;
+ 
+ /**
+  * Describes all relations of an accessible object. For example, an object
+  * by labeled by one object and control another.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see AccessibleRelation
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class AccessibleRelationSet
+ {
+   /**
+    * The list of relations, should be instances of AccessibleRelation. Don't
+    * set this to null.
+    *
+    * @see #add(AccessibleRelation)
+    * @see #addAll(AccessibleRelation[])
+    * @see #remove(AccessibleRelation)
+    * @see #contains(String)
+    * @see #get(String)
+    * @see #size()
+    * @see #toArray()
+    * @see #clear()
+    */
+   protected Vector relations = new Vector();
+ 
+   /**
+    * Create an empty relation set.
+    */
+   public AccessibleRelationSet()
+   {
+   }
+ 
+   /**
+    * Create a relation set initialized with the given relations, duplicates are
+    * ignored.
+    *
+    * @param relations the relations to insert
+    * @throws NullPointerException if relations is null
+    */
+   public AccessibleRelationSet(AccessibleRelation[] relations)
+   {
+     addAll(relations);
+   }
+ 
+   /**
+    * Add a new relation to the current set. If the relation is already in
+    * the set, the targets are merged with the existing relation, possibly
+    * resulting in an object being in the target list more than once. Do not
+    * add a relation with a null key, as it will cause problems later.
+    *
+    * @param relation the relation to add
+    * @return true if the set was modified, which is always the case
+    * @throws NullPointerException if relation is null
+    */
+   public boolean add(AccessibleRelation relation)
+   {
+     AccessibleRelation old = get(relation.key);
+     if (old == null)
+       return relations.add(relation);
+     if (old.targets.length == 0)
+       old.targets = relation.targets;
+     else if (relation.targets.length != 0)
+       {
+         Object[] t = new Object[old.targets.length + relation.targets.length];
+         System.arraycopy(old.targets, 0, t, 0, old.targets.length);
+         System.arraycopy(relation.targets, 0, t, old.targets.length,
+                          relation.targets.length);
+         old.targets = t;
+       }
+     return true;
+   }
+ 
+   /**
+    * Add all of the relations to the current set. Duplicates are ignored.
+    *
+    * @param array the array of relations to add
+    * @throws NullPointerException if array is null or has null entries
+    */
+   public void addAll(AccessibleRelation[] array)
+   {
+     int i = array.length;
+     while (--i >= 0)
+       add(array[i]);
+   }
+ 
+   /**
+    * Remove a relation from the set. If a relation was removed, return true.
+    * Note that this uses AccessibleRelation.equals, which defaults to ==, so a
+    * relation with the same key may still exist in the set afterwords.
+    *
+    * @param relation the state to remove
+    * @return true if the set changed
+    */
+   public boolean remove(AccessibleRelation relation)
+   {
+     return relations.remove(relation);
+   }
+ 
+   /**
+    * Clear all relations in the set.
+    */
+   public void clear()
+   {
+     relations.clear();
+   }
+ 
+   /**
+    * Return the number of relations in the set.
+    *
+    * @return the set size
+    */
+   public int size()
+   {
+     return relations.size();
+   }
+ 
+   /**
+    * Check if the relation key is in the set.
+    *
+    * @param key the relation to locate
+    * @return true if it is in the set
+    */
+   public boolean contains(String key)
+   {
+     int i = relations.size();
+     while (--i >= 0)
+       if (((AccessibleRelation) relations.get(i)).key.equals(key))
+         return true;
+     return false;
+   }
+ 
+   /**
+    * Get the relation that matches the key.
+    *
+    * @param key the relation to locate
+    * @return the relation in the set, or null
+    */
+   public AccessibleRelation get(String key)
+   {
+     int i = relations.size();
+     while (--i >= 0)
+       {
+         AccessibleRelation r = (AccessibleRelation) relations.get(i);
+         if (r.key.equals(key))
+           return r;
+       }
+     return null;
+   }
+ 
+   /**
+    * Return the relation set as an array.
+    *
+    * @return an array of the current relations
+    */
+   public AccessibleRelation[] toArray()
+   {
+     AccessibleRelation[] result = new AccessibleRelation[relations.size()];
+     relations.toArray(result);
+     return result;
+   }
+ 
+   /**
+    * Return a localized, comma-separated string representing all relations
+    * in the set. This is in arbitrary order.
+    *
+    * @return the string representation
+    * @see AccessibleBundle#toDisplayString(String, Locale)
+    */
+   public String toString()
+   {
+     int i = relations.size();
+     if (i == 0)
+       return "";
+     // Pre-allocate an average of 10 chars per state.
+     StringBuffer b = new StringBuffer(i * 10);
+     while (--i >= 0)
+       b.append(relations.get(i)).append(',');
+     return b.substring(0, b.length() - 1);
+   }
+ } // class AccessibleRelationSet
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleResourceBundle.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleResourceBundle.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleResourceBundle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleResourceBundle.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,75 ----
+ /* AccessibleResourceBundle.java -- deprecated class
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ import java.util.ListResourceBundle;
+ import java.util.Locale;
+ 
+ /**
+  * This class is deprecated. It once was used for localizing accessibility
+  * strings, and was never meant for external use anyway.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see AccessibleBundle#toDisplayString(String, Locale)
+  * @since 1.2
+  * @deprecated this class is no longer used
+  * @status updated to 1.4
+  */
+ public class AccessibleResourceBundle extends ListResourceBundle
+ {
+   /**
+    * Default constructor.
+    *
+    * @deprecated do not use this class
+    */
+   public AccessibleResourceBundle()
+   {
+   }
+ 
+   /**
+    * Returns the mapping between keys and display strings.
+    *
+    * @return null
+    * @deprecated do not use this class
+    */
+   public Object[][] getContents()
+   {
+     return null;
+   }
+ } // class AccessibleResourceBundle
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleRole.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleRole.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleRole.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleRole.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,480 ----
+ /* AccessibleRole.java -- the primary role of an accessible object
+    Copyright (C) 2002, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ import java.util.Locale;
+ 
+ /**
+  * The role of an accessible object. For example, this could be "button" or
+  * "table". This strongly typed "enumeration" supports localized strings. If
+  * the constants of this class are not adequate, new ones may be added in a
+  * similar matter, while avoiding a public constructor.
+  * 
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class AccessibleRole extends AccessibleBundle
+ {
+   /** The object alerts the user about something. */
+   public static final AccessibleRole ALERT
+     = new AccessibleRole("alert");
+ 
+   /** The header for a column of data. */
+   public static final AccessibleRole COLUMN_HEADER
+     = new AccessibleRole("column header");
+ 
+   /**
+    * The object can be drawn into, and traps events.
+    *
+    * @see #FRAME
+    * @see #GLASS_PANE
+    * @see #LAYERED_PANE
+    */
+   public static final AccessibleRole CANVAS
+     = new AccessibleRole("canvas");
+ 
+   /**
+    * A list of choices, which may optionally allow the user to create a new
+    * choice.
+    */
+   public static final AccessibleRole COMBO_BOX
+     = new AccessibleRole("combo box");
+ 
+   /**
+    * An iconified frame in a desktop.
+    *
+    * @see #DESKTOP_PANE
+    * @see #INTERNAL_FRAME
+    */
+   public static final AccessibleRole DESKTOP_ICON
+     = new AccessibleRole("desktop icon");
+ 
+   /**
+    * A frame-like object clipped by a desktop pane.
+    *
+    * @see #DESKTOP_ICON
+    * @see #DESKTOP_PANE
+    * @see #FRAME
+    */
+   public static final AccessibleRole INTERNAL_FRAME
+     = new AccessibleRole("internal frame");
+ 
+   /**
+    * A pane which supports internal frames and their icons.
+    *
+    * @see #DESKTOP_ICON
+    * @see #INTERNAL_FRAME
+    */
+   public static final AccessibleRole DESKTOP_PANE
+     = new AccessibleRole("desktop pane");
+ 
+   /**
+    * A specialized pane for use in a dialog.
+    *
+    * @see #DIALOG
+    */
+   public static final AccessibleRole OPTION_PANE
+     = new AccessibleRole("option pane");
+ 
+   /**
+    * A top level window with no title or border.
+    *
+    * @see #FRAME
+    * @see #DIALOG
+    */
+   public static final AccessibleRole WINDOW
+     = new AccessibleRole("window");
+ 
+   /**
+    * A top level window with title, menu bar, border, and so forth. It is
+    * often the primary window of an application.
+    *
+    * @see #DIALOG
+    * @see #CANVAS
+    * @see #WINDOW
+    */
+   public static final AccessibleRole FRAME
+     = new AccessibleRole("frame");
+ 
+   /**
+    * A top level window title bar and border. It is limited compared to a
+    * frame, and is often a secondary window.
+    *
+    * @see #FRAME
+    * @see #WINDOW
+    */
+   public static final AccessibleRole DIALOG
+     = new AccessibleRole("dialog");
+ 
+   /** A specialized dialog for choosing a color. */
+   public static final AccessibleRole COLOR_CHOOSER
+     = new AccessibleRole("color chooser");
+ 
+   /**
+    * A pane for navigating through directories.
+    *
+    * @see #FILE_CHOOSER
+    */
+   public static final AccessibleRole DIRECTORY_PANE
+     = new AccessibleRole("directory pane");
+ 
+   /**
+    * A specialized dialog that allows a user to select a file.
+    *
+    * @see #DIRECTORY_PANE
+    */
+   public static final AccessibleRole FILE_CHOOSER
+     = new AccessibleRole("file chooser");
+ 
+   /** An object to fill space between other components. */
+   public static final AccessibleRole FILLER
+     = new AccessibleRole("filler");
+ 
+   /** A hypertext anchor. */
+   public static final AccessibleRole HYPERLINK
+     = new AccessibleRole("hyperlink");
+ 
+   /** A small picture to decorate components. */
+   public static final AccessibleRole ICON
+     = new AccessibleRole("icon");
+ 
+   /** An object to label something in a graphic interface. */
+   public static final AccessibleRole LABEL
+     = new AccessibleRole("label");
+ 
+   /**
+    * A specialized pane with a glass pane and layered pane as children.
+    *
+    * @see #GLASS_PANE
+    * @see #LAYERED_PANE
+    */
+   public static final AccessibleRole ROOT_PANE
+     = new AccessibleRole("root pane");
+ 
+   /**
+    * A pane guaranteed to be painted on top of panes beneath it.
+    *
+    * @see #ROOT_PANE
+    * @see #LAYERED_PANE
+    */
+   public static final AccessibleRole GLASS_PANE
+     = new AccessibleRole("glass pane");
+ 
+   /**
+    * A specialized pane that allows drawing children in layers. This is often
+    * used in menus and other visual components.
+    *
+    * @see #ROOT_PANE
+    * @see #GLASS_PANE
+    */
+   public static final AccessibleRole LAYERED_PANE
+     = new AccessibleRole("layered pane");
+ 
+   /**
+    * An object which presents a list of items for selection. Often contained
+    * in a scroll pane.
+    *
+    * @see #SCROLL_PANE
+    * @see #LIST_ITEM
+    */
+   public static final AccessibleRole LIST
+     = new AccessibleRole("list");
+ 
+   /**
+    * An object which represents an item in a list. Often contained in a scroll
+    * pane.
+    *
+    * @see #SCROLL_PANE
+    * @see #LIST
+    */
+   public static final AccessibleRole LIST_ITEM
+     = new AccessibleRole("list item");
+ 
+   /**
+    * An object usually at the top of a frame to list available menus.
+    *
+    * @see #MENU
+    * @see #POPUP_MENU
+    * @see #LAYERED_PANE
+    */
+   public static final AccessibleRole MENU_BAR
+     = new AccessibleRole("menu bar");
+ 
+   /**
+    * A temporary window with a menu of options, which hides on selection.
+    *
+    * @see #MENU
+    * @see #MENU_ITEM
+    */
+   public static final AccessibleRole POPUP_MENU
+     = new AccessibleRole("popup menu");
+ 
+   /**
+    * An object usually in a menu bar which contains a list of actions to
+    * perform. Such actions are usually associated with menu items or submenus.
+    *
+    * @see #MENU_BAR
+    * @see #MENU_ITEM
+    * @see #SEPARATOR
+    * @see #RADIO_BUTTON
+    * @see #CHECK_BOX
+    * @see #POPUP_MENU
+    */
+   public static final AccessibleRole MENU
+     = new AccessibleRole("menu");
+ 
+   /**
+    * An object usually in a menu with an action available for the user.
+    *
+    * @see #MENU_BAR
+    * @see #SEPARATOR
+    * @see #POPUP_MENU
+    */
+   public static final AccessibleRole MENU_ITEM
+     = new AccessibleRole("menu item");
+ 
+   /**
+    * An object usually in a menu which separates logical sections of items.
+    *
+    * @see #MENU
+    * @see #MENU_ITEM
+    */
+   public static final AccessibleRole SEPARATOR
+     = new AccessibleRole("separator");
+ 
+   /**
+    * An object which presents a series of panels, usually via tabs along the
+    * top. Children are all page tabs.
+    *
+    * @see #PAGE_TAB
+    */
+   public static final AccessibleRole PAGE_TAB_LIST
+     = new AccessibleRole("page tab list");
+ 
+   /**
+    * An object in a page tab list, which contains the panel to display when
+    * selected from the list.
+    *
+    * @see #PAGE_TAB_LIST
+    */
+   public static final AccessibleRole PAGE_TAB
+     = new AccessibleRole("page tab");
+ 
+   /** A generic container to group objects. */
+   public static final AccessibleRole PANEL
+     = new AccessibleRole("panel");
+ 
+   /** An object used to track amount of a task that has completed. */
+   public static final AccessibleRole PROGRESS_BAR
+     = new AccessibleRole("progress bar");
+ 
+   /** An object for passwords which should not be shown to the user. */
+   public static final AccessibleRole PASSWORD_TEXT
+     = new AccessibleRole("password text");
+ 
+   /**
+    * An object that can be manipulated to do something.
+    *
+    * @see #CHECK_BOX
+    * @see #TOGGLE_BUTTON
+    * @see #RADIO_BUTTON
+    */
+   public static final AccessibleRole PUSH_BUTTON
+     = new AccessibleRole("push button");
+ 
+   /**
+    * A specialized button which can be on or off, with no separate indicator.
+    *
+    * @see #PUSH_BUTTON
+    * @see #CHECK_BOX
+    * @see #RADIO_BUTTON
+    */
+   public static final AccessibleRole TOGGLE_BUTTON
+     = new AccessibleRole("toggle button");
+ 
+   /**
+    * A choice which can be on or off, and has a separate indicator.
+    *
+    * @see #PUSH_BUTTON
+    * @see #TOGGLE_BUTTON
+    * @see #RADIO_BUTTON
+    */
+   public static final AccessibleRole CHECK_BOX
+     = new AccessibleRole("check box");
+ 
+   /**
+    * A specialized choice which toggles radio buttons in the group when it
+    * is selected.
+    *
+    * @see #PUSH_BUTTON
+    * @see #TOGGLE_BUTTON
+    * @see #CHECK_BOX
+    */
+   public static final AccessibleRole RADIO_BUTTON
+     = new AccessibleRole("radio button");
+ 
+   /** The header for a row of data. */
+   public static final AccessibleRole ROW_HEADER
+     = new AccessibleRole("row header");
+ 
+   /**
+    * An object which allows an incremental view of a larger pane.
+    *
+    * @see #SCROLL_BAR
+    * @see #VIEWPORT
+    */
+   public static final AccessibleRole SCROLL_PANE
+     = new AccessibleRole("scroll pane");
+ 
+   /**
+    * An object which allows selection of the view in a scroll pane.
+    *
+    * @see #SCROLL_PANE
+    */
+   public static final AccessibleRole SCROLL_BAR
+     = new AccessibleRole("scroll bar");
+ 
+   /**
+    * An object which represents the visual section in a scroll pane.
+    *
+    * @see #SCROLL_PANE
+    */
+   public static final AccessibleRole VIEWPORT
+     = new AccessibleRole("viewport");
+ 
+   /** An object which allows selection in a bounded range. */
+   public static final AccessibleRole SLIDER
+     = new AccessibleRole("slider");
+ 
+   /**
+    * A specialized pane which presents two other panels, and can often adjust
+    * the divider between them.
+    */
+   public static final AccessibleRole SPLIT_PANE
+     = new AccessibleRole("split pane");
+ 
+   /** An object for presenting data in rows and columns. */
+   public static final AccessibleRole TABLE
+     = new AccessibleRole("table");
+ 
+   /**
+    * An object which represents text, usually editable by the user.
+    *
+    * @see #LABEL
+    */
+   public static final AccessibleRole TEXT
+     = new AccessibleRole("text");
+ 
+   /**
+    * An object which represents a hierachical view of data. Subnodes can
+    * often be expanded or collapsed.
+    */
+   public static final AccessibleRole TREE
+     = new AccessibleRole("tree");
+ 
+   /** A bar or pallete with buttons for common actions in an application. */
+   public static final AccessibleRole TOOL_BAR
+     = new AccessibleRole("tool bar");
+ 
+   /**
+    * An object which provides information about another object. This is often
+    * displayed as a "help bubble" when a mouse hovers over the other object.
+    */
+   public static final AccessibleRole TOOL_TIP
+     = new AccessibleRole("tool tip");
+ 
+   /**
+    * An AWT component with nothing else known about it.
+    *
+    * @see #SWING_COMPONENT
+    * @see #UNKNOWN
+    */
+   public static final AccessibleRole AWT_COMPONENT
+     = new AccessibleRole("AWT component");
+ 
+   /**
+    * A swing component with nothing else known about it.
+    *
+    * @see #AWT_COMPONENT
+    * @see #UNKNOWN
+    */
+   public static final AccessibleRole SWING_COMPONENT
+     = new AccessibleRole("SWING component");
+ 
+   /**
+    * An accessible object whose role is unknown.
+    *
+    * @see #AWT_COMPONENT
+    * @see #SWING_COMPONENT
+    */
+   public static final AccessibleRole UNKNOWN
+     = new AccessibleRole("unknown");
+ 
+   /** A component with multiple labels of status information. */
+   public static final AccessibleRole STATUS_BAR
+     = new AccessibleRole("statusbar");
+ 
+   /** A component which allows editing of Date and Time objects. */
+   public static final AccessibleRole DATE_EDITOR
+     = new AccessibleRole("dateeditor");
+ 
+   /** A component with spinner arrows for simple numbers. */
+   public static final AccessibleRole SPIN_BOX
+     = new AccessibleRole("spinbox");
+ 
+   /** A component for choosing fonts and their attributes. */
+   public static final AccessibleRole FONT_CHOOSER
+     = new AccessibleRole("fontchooser");
+ 
+   /** A component with a border to group other components. */
+   public static final AccessibleRole GROUP_BOX
+     = new AccessibleRole("groupbox");
+ 
+   /**
+    * Create a new constant with a locale independent key. Follow the example,
+    * keep the constructor private and make public constants instead.
+    *
+    * @param key the name of the role
+    * @see #toDisplayString(String, Locale)
+    */
+   protected AccessibleRole(String key)
+   {
+     this.key = key;
+   }
+ } // class AccessibleRole
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleSelection.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleSelection.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleSelection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleSelection.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,113 ----
+ /* AccessibleSelection.java -- aids in accessibly selecting components
+    Copyright (C) 2000, 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * If an object implements this interface then it must be able to control
+  * the selection of its children. Accessibility software can use the
+  * implementations of this interface to change the selection set of children.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleSelection()</code> method should
+  * return <code>null</code> if an object does not implement this interface.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleSelection()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleSelection
+ {
+   /**
+    * Returns the number of currently selected Accessible children, which may
+    * be 0 if nothing is selected.
+    *
+    * @return the number of selected children
+    */
+   int getAccessibleSelectionCount();
+ 
+   /**
+    * Returns the i-th selected child (not necessarily the overall i-th child)
+    * of this Accessible object. If i is out of bounds, null is returned.
+    *
+    * @param i zero-based index of selected child objects
+    * @return the Accessible child, or null
+    * @see #getAccessibleSelectionCount()
+    */
+   Accessible getAccessibleSelection(int i);
+ 
+   /**
+    * Determine if i-th overall child of this accessible object is selected.
+    * If i is out of bounds, false is returned.
+    *
+    * @param i zero-based index of child objects
+    * @return true if specified child exists and is selected
+    */
+   boolean isAccessibleChildSelected(int i);
+ 
+   /**
+    * Select the specified child if it is not already selected, placing it in
+    * the object's current selection. If the object does not support multiple
+    * selections then the new selection replaces the old. If the specified
+    * child is already selected, or is out of bounds, this method does nothing.
+    *
+    * @param i zero-based index of child objects
+    */
+   void addAccessibleSelection(int i);
+ 
+   /**
+    * Unselect the specified child of this Accessible object. If the specified
+    * child is not selected, or is out of bounds, this method does nothing.
+    *
+    * @param i the zero-based index of the child objects
+    */
+   void removeAccessibleSelection(int i);
+ 
+   /**
+    * Unselect all children of this Accessible object.
+    */
+   void clearAccessibleSelection();
+ 
+   /**
+    * Select all children of this Accessible object if the object supports
+    * multiple selections or has a single child. Otherwise this does nothing.
+    */
+   void selectAllAccessibleSelection();
+ } // interface AccessibleSelection
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleState.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleState.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleState.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleState.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,318 ----
+ /* AccessibleState.java -- a state of an accessible object
+    Copyright (C) 2002, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ import java.awt.Dimension;
+ import java.util.Locale;
+ 
+ /**
+  * A state portion of an accessible object. A combination of states represent
+  * the entire object state, in an AccessibleStateSet. For example, this could
+  * be "active" or "selected". This strongly typed "enumeration" supports
+  * localized strings. If the constants of this class are not adequate, new
+  * ones may be added in a similar matter, while avoiding a public constructor.
+  * 
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class AccessibleState extends AccessibleBundle
+ {
+   /**
+    * Indicates an active window, as well as an active child in a list or other
+    * collection.
+    *
+    * @see AccessibleRole#WINDOW
+    * @see AccessibleRole#FRAME
+    * @see AccessibleRole#DIALOG
+    */
+   public static final AccessibleState ACTIVE
+     = new AccessibleState("active");
+ 
+   /**
+    * Indicates a pushed button, usually when the mouse has been pressed but
+    * not released.
+    *
+    * @see AccessibleRole#PUSH_BUTTON
+    */
+   public static final AccessibleState PRESSED
+     = new AccessibleState("pressed");
+ 
+   /**
+    * Indicates an armed object, usually a button which has been pushed and
+    * the mouse has not left the button area.
+    *
+    * @see AccessibleRole#PUSH_BUTTON
+    */
+   public static final AccessibleState ARMED
+     = new AccessibleState("armed");
+ 
+   /**
+    * Indicates an object is busy, such as a slider, scroll bar, or progress
+    * bar in transition.
+    *
+    * @see AccessibleRole#PROGRESS_BAR
+    * @see AccessibleRole#SCROLL_BAR
+    * @see AccessibleRole#SLIDER
+    */
+   public static final AccessibleState BUSY
+     = new AccessibleState("busy");
+ 
+   /**
+    * Indicates an object is checked.
+    *
+    * @see AccessibleRole#TOGGLE_BUTTON
+    * @see AccessibleRole#RADIO_BUTTON
+    * @see AccessibleRole#CHECK_BOX
+    */
+   public static final AccessibleState CHECKED
+     = new AccessibleState("checked");
+ 
+   /**
+    * Indicates the user can edit the component contents. This is usually for
+    * text, as other objects like scroll bars are automatically editable.
+    *
+    * @see #ENABLED
+    */
+   public static final AccessibleState EDITABLE
+     = new AccessibleState("editable");
+ 
+   /**
+    * Indicates the object allows progressive disclosure of its children,
+    * usually in a collapsible tree or other hierachical object.
+    *
+    * @see #EXPANDED
+    * @see #COLLAPSED
+    * @see AccessibleRole#TREE
+    */
+   public static final AccessibleState EXPANDABLE
+     = new AccessibleState("expandable");
+ 
+   /**
+    * Indicates that the object is collapsed, usually in a tree.
+    *
+    * @see #EXPANDABLE
+    * @see #EXPANDED
+    * @see AccessibleRole#TREE
+    */
+   public static final AccessibleState COLLAPSED
+     = new AccessibleState("collapsed");
+ 
+   /**
+    * Indicates that the object is expanded, usually in a tree.
+    *
+    * @see #EXPANDABLE
+    * @see #COLLAPSED
+    * @see AccessibleRole#TREE
+    */
+   public static final AccessibleState EXPANDED
+     = new AccessibleState("expanded");
+ 
+   /**
+    * Indicates that an object is enabled. In the absence of this state,
+    * graphics are often grayed out, and cannot be manipulated.
+    */
+   public static final AccessibleState ENABLED
+     = new AccessibleState("enabled");
+ 
+   /**
+    * Indicates that an object can accept focus, which means it will process
+    * keyboard events when focused.
+    *
+    * @see #FOCUSED
+    */
+   public static final AccessibleState FOCUSABLE
+     = new AccessibleState("focusable");
+ 
+   /**
+    * Indicates that an object has keyboard focus.
+    *
+    * @see #FOCUSABLE
+    */
+   public static final AccessibleState FOCUSED
+     = new AccessibleState("focused");
+ 
+   /**
+    * Indicates that an object is minimized to an icon.
+    *
+    * @see AccessibleRole#FRAME
+    * @see AccessibleRole#INTERNAL_FRAME
+    */
+   public static final AccessibleState ICONIFIED
+     = new AccessibleState("iconified");
+ 
+   /**
+    * Indicates that something must be done in the current object before
+    * interaction is allowed on other windows, usually for dialogs.
+    *
+    * @see AccessibleRole#DIALOG
+    */
+   public static final AccessibleState MODAL
+     = new AccessibleState("modal");
+ 
+   /**
+    * Indicates that all pixels in the object are painted. If this state is not
+    * present, then the object has some degree of transparency, letting lower
+    * panes show through.
+    *
+    * @see Accessible#getAccessibleContext()
+    * @see AccessibleContext#getAccessibleComponent()
+    * @see AccessibleComponent#getBounds()
+    */
+   public static final AccessibleState OPAQUE
+     = new AccessibleState("opaque");
+ 
+   /**
+    * Indicates the size of this object is not fixed.
+    *
+    * @see Accessible#getAccessibleContext()
+    * @see AccessibleContext#getAccessibleComponent()
+    * @see AccessibleComponent#getSize()
+    * @see AccessibleComponent#setSize(Dimension)
+    */
+   public static final AccessibleState RESIZABLE
+     = new AccessibleState("resizable");
+ 
+   /**
+    * Indicates that multiple children can be selected at once.
+    *
+    * @see Accessible#getAccessibleContext()
+    * @see AccessibleContext#getAccessibleSelection()
+    * @see AccessibleSelection
+    */
+   public static final AccessibleState MULTISELECTABLE
+     = new AccessibleState("multiselectable");
+ 
+   /**
+    * Indicates that this child is one which can be selected from its parent.
+    *
+    * @see #SELECTED
+    * @see Accessible#getAccessibleContext()
+    * @see AccessibleContext#getAccessibleSelection()
+    * @see AccessibleSelection
+    */
+   public static final AccessibleState SELECTABLE
+     = new AccessibleState("selectable");
+ 
+   /**
+    * Indicates that this child has been selected from its parent.
+    *
+    * @see #SELECTABLE
+    * @see Accessible#getAccessibleContext()
+    * @see AccessibleContext#getAccessibleSelection()
+    * @see AccessibleSelection
+    */
+   public static final AccessibleState SELECTED
+     = new AccessibleState("selected");
+ 
+   /**
+    * Indicates that this object and all its parents are visible, so that it
+    * is on the screen. However, something opaque may be on top of it.
+    *
+    * @see #VISIBLE
+    */
+   public static final AccessibleState SHOWING
+     = new AccessibleState("showing");
+ 
+   /**
+    * Indicates that this object intends to be visible. However, if its
+    * parent is invisible, this object is as well.
+    *
+    * @see #SHOWING
+    */
+   public static final AccessibleState VISIBLE
+     = new AccessibleState("visible");
+ 
+   /**
+    * Indicates that an object has vertical orientation.
+    *
+    * @see #HORIZONTAL
+    * @see AccessibleRole#SCROLL_BAR
+    * @see AccessibleRole#SLIDER
+    * @see AccessibleRole#PROGRESS_BAR
+    */
+   public static final AccessibleState VERTICAL
+     = new AccessibleState("vertical");
+ 
+   /**
+    * Indicates that an object has horizontal orientation.
+    *
+    * @see #VERTICAL
+    * @see AccessibleRole#SCROLL_BAR
+    * @see AccessibleRole#SLIDER
+    * @see AccessibleRole#PROGRESS_BAR
+    */
+   public static final AccessibleState HORIZONTAL
+     = new AccessibleState("horizontal");
+ 
+   /**
+    * Indicates that this text object can only hold a single line.
+    *
+    * @see #MULTI_LINE
+    */
+   public static final AccessibleState SINGLE_LINE
+     = new AccessibleState("single line");
+ 
+   /**
+    * Indicates that this text object can hold multiple lines.
+    *
+    * @see #SINGLE_LINE
+    */
+   public static final AccessibleState MULTI_LINE
+     = new AccessibleState("multiple line");
+ 
+   /**
+    * Indicates that this object is transient. This means the object is
+    * generated for method queries, but will never generate events, because
+    * its container (such as a tree, list, or table) does all the work.
+    */
+   public static final AccessibleState TRANSIENT
+     = new AccessibleState("transient");
+ 
+   /**
+    * Create a new constant with a locale independent key. Follow the example,
+    * keep the constructor private and make public constants instead.
+    *
+    * @param key the name of the state
+    * @see #toDisplayString(String, Locale)
+    */
+   protected AccessibleState(String key)
+   {
+     this.key = key;
+   }
+ } // class AccessibleState
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleStateSet.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleStateSet.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleStateSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleStateSet.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,173 ----
+ /* AccessibleStateSet.java -- the combined state of an accessible object
+    Copyright (C) 2002, 2005 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ package javax.accessibility;
+ 
+ import java.util.Locale;
+ import java.util.Vector;
+ 
+ /**
+  * Describes all elements of an accessible object's state. For example, an
+  * object may be enabled and have focus.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see AccessibleState
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public class AccessibleStateSet
+ {
+   /**
+    * The list of states, should be instances of AccessibleState. Don't set
+    * this to null.
+    *
+    * @see #add(AccessibleState)
+    * @see #addAll(AccessibleState[])
+    * @see #remove(AccessibleState)
+    * @see #contains(AccessibleState)
+    * @see #toArray()
+    * @see #clear()
+    */
+   protected Vector states = new Vector();
+ 
+   /**
+    * Create an empty state set.
+    */
+   public AccessibleStateSet()
+   {
+   }
+ 
+   /**
+    * Create a state set initialized with the given states, duplicates are
+    * ignored.
+    *
+    * @param states the states to insert
+    * @throws NullPointerException if states is null
+    */
+   public AccessibleStateSet(AccessibleState[] states)
+   {
+     addAll(states);
+   }
+ 
+   /**
+    * Add a new state to the current set. Return true if the state was added,
+    * as duplicates are ignored. Entering a null state will cause problems
+    * later, so don't do it.
+    *
+    * @param state the state to add
+    * @return true if the state was added
+    */
+   public boolean add(AccessibleState state)
+   {
+     return states.contains(state) ? false : states.add(state);
+   }
+ 
+   /**
+    * Add all of the states to the current set. Duplicates are ignored.
+    * Entering a null state will cause problems later, so don't do it.
+    *
+    * @param array the array of states to add
+    * @throws NullPointerException if array is null
+    */
+   public void addAll(AccessibleState[] array)
+   {
+     int i = array.length;
+     while (--i >= 0)
+       add(array[i]);
+   }
+ 
+   /**
+    * Remove a state from the set. If a state was removed, return true.
+    *
+    * @param state the state to remove
+    * @return true if the set changed
+    */
+   public boolean remove(AccessibleState state)
+   {
+     return states.remove(state);
+   }
+ 
+   /**
+    * Clear all states in the set.
+    */
+   public void clear()
+   {
+     states.clear();
+   }
+ 
+   /**
+    * Check if the current state is in the set.
+    *
+    * @param state the state to locate
+    * @return true if it is in the set
+    */
+   public boolean contains(AccessibleState state)
+   {
+     return states.contains(state);
+   }
+ 
+   /**
+    * Return the state set as an array.
+    *
+    * @return an array of the current states
+    */
+   public AccessibleState[] toArray()
+   {
+     AccessibleState[] result = new AccessibleState[states.size()];
+     states.toArray(result);
+     return result;
+   }
+ 
+   /**
+    * Return a localized, comma-separated string representing all states
+    * in the set. This is in arbitrary order.
+    *
+    * @return the string representation
+    * @see AccessibleBundle#toDisplayString(String, Locale)
+    */
+   public String toString()
+   {
+     int i = states.size();
+     if (i == 0)
+       return "";
+     // Pre-allocate an average of 10 chars per state.
+     StringBuffer b = new StringBuffer(i * 10);
+     while (--i >= 0)
+       b.append(states.get(i)).append(',');
+     return b.substring(0, b.length() - 1);
+   }
+ } // class AccessibleStateSet
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleTable.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleTable.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleTable.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,236 ----
+ /* AccessibleTable.java -- aids in accessibly manipulating tables
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * Objects which present information in a 2-dimensional table should implement
+  * this interface. Accessibility software can use the implementations of
+  * this interface to navigate and change the attributes of the table.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleTable()</code> method
+  * should return <code>null</code> if an object does not implement this
+  * interface.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleTable()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleTable
+ {
+   /**
+    * Return the caption for the table, or null if unknown.
+    *
+    * @return the table caption
+    */
+   Accessible getAccessibleCaption();
+ 
+   /**
+    * Set the table caption.
+    *
+    * @param caption the new caption
+    */
+   void setAccessibleCaption(Accessible caption);
+ 
+   /**
+    * Return the summary description of the table, or null if unknown.
+    *
+    * @return the summary description
+    */
+   Accessible getAccessibleSummary();
+ 
+   /**
+    * Set the table summary description.
+    *
+    * @param summary the new summary
+    */
+   void setAccessibleSummary(Accessible summary);
+ 
+   /**
+    * Return the number of rows in the table.
+    *
+    * @return the row count
+    */
+   int getAccessibleRowCount();
+ 
+   /**
+    * Return the number of columns in the table.
+    *
+    * @return the column count
+    */
+   int getAccessibleColumnCount();
+ 
+   /**
+    * Return the cell at the specified row and column, or null if out of bounds.
+    *
+    * @param r the 0-based row index
+    * @param c the 0-based column index
+    * @return the cell at (r,c)
+    */
+   Accessible getAccessibleAt(int r, int c);
+ 
+   /**
+    * Returns the number of merged rows occupied at the specified row and
+    * column, or 0 if out of bounds.
+    *
+    * @param r the 0-based row index
+    * @param c the 0-based column index
+    * @return the row extent at (r,c)
+    */
+   int getAccessibleRowExtentAt(int r, int c);
+ 
+   /**
+    * Returns the number of merged columns occupied at the specified row and
+    * column, or 0 if out of bounds.
+    *
+    * @param r the 0-based row index
+    * @param c the 0-based column index
+    * @return the column extent at (r,c)
+    */
+   int getAccessibleColumnExtentAt(int r, int c);
+ 
+   /**
+    * Return the row headers as a table.
+    *
+    * @return the row headers, or null if there are none
+    */
+   AccessibleTable getAccessibleRowHeader();
+ 
+   /**
+    * Set the row headers.
+    *
+    * @param header the new row header
+    */
+   // XXX What happens if header is incompatible size?
+   void setAccessibleRowHeader(AccessibleTable header);
+ 
+   /**
+    * Return the column headers as a table.
+    *
+    * @return the column headers, or null if there are none
+    */
+   AccessibleTable getAccessibleColumnHeader();
+ 
+   /**
+    * Set the column headers.
+    *
+    * @param header the new column header
+    */
+   // XXX What happens if header is incompatible size?
+   void setAccessibleColumnHeader(AccessibleTable header);
+ 
+   /**
+    * Return the description of a row, or null if there is none or the index
+    * is out of bounds.
+    *
+    * @param r the 0-based row index
+    * @return the description
+    */
+   Accessible getAccessibleRowDescription(int r);
+ 
+   /**
+    * Set the description of a row. Does nothing if the index is invalid.
+    *
+    * @param r the 0-based row index
+    * @param description the new description
+    */
+   void setAccessibleRowDescription(int r, Accessible description);
+ 
+   /**
+    * Return the description of a column, or null if there is none or the index
+    * is out of bounds.
+    *
+    * @param c the 0-based column index
+    * @return the description
+    */
+   Accessible getAccessibleColumnDescription(int c);
+ 
+   /**
+    * Set the description of a column. Does nothing if the index is invalid.
+    *
+    * @param c the 0-based column index
+    * @param description the new description
+    */
+   void setAccessibleColumnDescription(int c, Accessible description);
+ 
+   /**
+    * Return whether the cell at the specified location is selected. Returns
+    * false if the index is out of bounds.
+    *
+    * @param r the 0-based row index
+    * @param c the 0-based column index
+    * @return true if that cell is selected
+    */
+   boolean isAccessibleSelected(int r, int c);
+ 
+   /**
+    * Return whether the specified row is selected. Returns false if the
+    * index is out of bounds.
+    *
+    * @param r the 0-based row index
+    * @return true if that row is selected
+    */
+   boolean isAccessibleRowSelected(int r);
+ 
+   /**
+    * Return whether the specified column is selected. Returns false if the
+    * index is out of bounds.
+    *
+    * @param c the 0-based column index
+    * @return true if that column is selected
+    */
+   boolean isAccessibleColumnSelected(int c);
+ 
+   /**
+    * Return the selected rows. May be null or empty if there is no selection.
+    *
+    * @return the indices of selected rows
+    */
+   int[] getSelectedAccessibleRows();
+ 
+   /**
+    * Return the selected columns. May be null or empty if there is no
+    * selection.
+    *
+    * @return the indices of selected columns
+    */
+   int[] getSelectedAccessibleColumns();
+ } // interface AccessibleTable
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleTableModelChange.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleTableModelChange.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleTableModelChange.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleTableModelChange.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,102 ----
+ /* AccessibleTableModelChange.java -- describes change to an accessible table
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * Describes a change to an accessible table. Accessibility software can use
+  * the implementations of this interface to update their state after a
+  * change to a table.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleTable()
+  * @see AccessibleTable
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleTableModelChange
+ {
+   /** Identifies insertion of rows or columns. */
+   int INSERT = 1;
+ 
+   /** Identifies change to existing data. */
+   int UPDATE = 0;
+ 
+   /** Identifies deletion of rows or columns. */
+   int DELETE = -1;
+ 
+   /**
+    * Returns the change type.
+    *
+    * @return the type
+    * @see #INSERT
+    * @see #UPDATE
+    * @see #DELETE
+    */
+   int getType();
+ 
+   /**
+    * Returns the first row that changed.
+    *
+    * @return the 0-based index of the first row to change
+    */
+   int getFirstRow();
+ 
+   /**
+    * Returns the last row that changed.
+    *
+    * @return the 0-based index of the last row to change
+    */
+   int getLastRow();
+ 
+   /**
+    * Returns the first column that changed.
+    *
+    * @return the 0-based index of the first column to change
+    */
+   int getFirstColumn();
+ 
+   /**
+    * Returns the last column that changed.
+    *
+    * @return the 0-based index of the last column to change
+    */
+   int getLastColumn();
+ } // interface AccessibleTableModelChange
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleText.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleText.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleText.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleText.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,185 ----
+ /* AccessibleText.java -- aids in accessibly manipulating text
+    Copyright (C) 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ 
+ import javax.swing.text.AttributeSet;
+ 
+ /**
+  * Objects which present textual information on the display should implement
+  * this interface.  Accessibility software can use the implementations of
+  * this interface to change the attributes and spacial location of the text.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleText()</code> method
+  * should return <code>null</code> if an object does not implement this
+  * interface.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleText()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleText
+ {
+   /**
+    * Constant designating that the next selection should be a character.
+    *
+    * @see #getAtIndex(int, int)
+    * @see #getAfterIndex(int, int)
+    * @see #getBeforeIndex(int, int)
+    */
+   int CHARACTER = 1;
+ 
+   /**
+    * Constant designating that the next selection should be a word.
+    *
+    * @see #getAtIndex(int, int)
+    * @see #getAfterIndex(int, int)
+    * @see #getBeforeIndex(int, int)
+    */
+   int WORD = 2;
+ 
+   /**
+    * Constant designating that the next selection should be a sentence.
+    *
+    * @see #getAtIndex(int, int)
+    * @see #getAfterIndex(int, int)
+    * @see #getBeforeIndex(int, int)
+    */
+   int SENTENCE = 3;
+ 
+   /**
+    * Given a point in the coordinate system of this object, return the
+    * 0-based index of the character at that point, or -1 if there is none.
+    *
+    * @param p the point to look at
+    * @return the character index, or -1
+    */
+   int getIndexAtPoint(Point point);
+ 
+   /**
+    * Determines the bounding box of the indexed character. Returns an empty
+    * rectangle if the index is out of bounds.
+    *
+    * @param index the 0-based character index
+    * @return the bounding box, may be empty
+    */
+   Rectangle getCharacterBounds(int index);
+ 
+   /**
+    * Return the number of characters.
+    *
+    * @return the character count
+    */
+   int getCharCount();
+ 
+   /**
+    * Return the offset of the character. The offset matches the index of the
+    * character to the right, since the carat lies between characters.
+    *
+    * @return the 0-based caret position
+    */
+   int getCaretPosition();
+ 
+   /**
+    * Returns the section of text at the index, or null if the index or part
+    * is invalid.
+    *
+    * @param part {@link #CHARACTER}, {@link #WORD}, or {@link #SENTENCE}
+    * @param index the 0-based character index
+    * @return the selection of text at that index, or null
+    */
+   String getAtIndex(int part, int index);
+ 
+   /**
+    * Returns the section of text after the index, or null if the index or part
+    * is invalid.
+    *
+    * @param part {@link #CHARACTER}, {@link #WORD}, or {@link #SENTENCE}
+    * @param index the 0-based character index
+    * @return the selection of text after that index, or null
+    */
+   String getAfterIndex(int part, int index);
+ 
+   /**
+    * Returns the section of text before the index, or null if the index or part
+    * is invalid.
+    *
+    * @param part {@link #CHARACTER}, {@link #WORD}, or {@link #SENTENCE}
+    * @param index the 0-based character index
+    * @return the selection of text before that index, or null
+    */
+   String getBeforeIndex(int part, int index);
+ 
+   /**
+    * Returns the attributes of a character at an index, or null if the index
+    * is out of bounds.
+    *
+    * @param index the 0-based character index
+    * @return the character's attributes
+    */
+   AttributeSet getCharacterAttribute(int index);
+ 
+   /**
+    * Returns the start index of the selection. If there is no selection, this
+    * is the same as the caret location.
+    *
+    * @return the 0-based character index of the selection start
+    */
+   int getSelectionStart();
+ 
+   /**
+    * Returns the end index of the selection. If there is no selection, this
+    * is the same as the caret location.
+    *
+    * @return the 0-based character index of the selection end
+    */
+   int getSelectionEnd();
+ 
+   /**
+    * Returns the selected text. This may be null or "" if no text is selected.
+    *
+    * @return the selected text
+    */
+   String getSelectedText();
+ } // interface AccessibleText
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleValue.java gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleValue.java
*** gcc-4.0.2/libjava/classpath/javax/accessibility/AccessibleValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/AccessibleValue.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* AccessibleValue.java -- aids in accessibly controlling values
+    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.accessibility;
+ 
+ /**
+  * If an object implements this interface then it must be able to control
+  * a numerical value. For example, a scroll bar has a position represented
+  * by a number. Accessibility software can use the implementations of this
+  * interface to change the associated value.
+  *
+  * <p>The <code>AccessibleContext.getAccessibleValue()</code> method should
+  * return <code>null</code> if an object does not implement this interface.
+  *
+  * @author Eric Blake (ebb9@email.byu.edu)
+  * @see Accessible
+  * @see AccessibleContext
+  * @see AccessibleContext#getAccessibleValue()
+  * @since 1.2
+  * @status updated to 1.4
+  */
+ public interface AccessibleValue
+ {
+   /**
+    * Gets the current value of this object, or null if it has not been set.
+    *
+    * @return the current value, or null
+    * @see #setCurrentAccessibleValue(Number)
+    */
+   Number getCurrentAccessibleValue();
+ 
+   /**
+    * Sets the current value of this object. Returns true if the number
+    * successfully changed.
+    *
+    * @param number the new value
+    * @return true on success
+    */
+   // XXX What happens if number is null?
+   boolean setCurrentAccessibleValue(Number number);
+ 
+   /**
+    * Gets the minimum value in the range of this object, or null if there is
+    * no minimum.
+    *
+    * @return the minimum
+    * @see #getMaximumAccessibleValue()
+    */
+   Number getMinimumAccessibleValue();
+ 
+   /**
+    * Gets the maximum value in the range of this object, or null if there is
+    * no maximum.
+    *
+    * @return the maximum
+    * @see #getMinimumAccessibleValue()
+    */
+   Number getMaximumAccessibleValue();
+ } // interface AccessibleValue
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/accessibility/package.html gcc-4.1.0/libjava/classpath/javax/accessibility/package.html
*** gcc-4.0.2/libjava/classpath/javax/accessibility/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/accessibility/package.html	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.accessibility package.
+    Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. -->
+ 
+ <html>
+ <head><title>GNU Classpath - javax.accessibility</title></head>
+ 
+ <body>
+ <p>Provides a contract between objects and accessibility software.</p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/crypto/BadPaddingException.java gcc-4.1.0/libjava/classpath/javax/crypto/BadPaddingException.java
*** gcc-4.0.2/libjava/classpath/javax/crypto/BadPaddingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/crypto/BadPaddingException.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,79 ----
+ /* BadPaddingException -- Signals bad padding bytes on decryption.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.crypto;
+ 
+ import java.security.GeneralSecurityException;
+ 
+ /**
+  * This exception is thrown during decryption when the decrypted input
+  * does not have the proper padding bytes that are expected by the padding
+  * mechanism.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class BadPaddingException extends GeneralSecurityException
+ {
+ 
+   // Constant.
+   // ------------------------------------------------------------------------
+ 
+   /** Serialization constant. */
+   private static final long serialVersionUID = -5315033893984728443L;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new bad padding exception with no detail message.
+    */
+   public BadPaddingException()
+   {
+     super();
+   }
+ 
+   /**
+    * Creates a new bad padding exception with a detail message.
+    *
+    * @param message The detail message.
+    */
+   public BadPaddingException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/crypto/Cipher.java gcc-4.1.0/libjava/classpath/javax/crypto/Cipher.java
*** gcc-4.0.2/libjava/classpath/javax/crypto/Cipher.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/crypto/Cipher.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,1095 ----
+ /* Cipher.java -- Interface to a cryptographic cipher.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.crypto;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.security.AlgorithmParameters;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.Provider;
+ import java.security.SecureRandom;
+ import java.security.Security;
+ import java.security.cert.Certificate;
+ import java.security.cert.X509Certificate;
+ import java.security.spec.AlgorithmParameterSpec;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * <p>This class implements a cryptographic cipher for transforming
+  * data.</p>
+  *
+  * <p>Ciphers cannot be instantiated directly; rather one of the
+  * <code>getInstance</code> must be used to instantiate a given
+  * <i>transformation</i>, optionally with a specific provider.</p>
+  *
+  * <p>A transformation is of the form:</p>
+  *
+  * <ul>
+  * <li><i>algorithm</i>/<i>mode</i>/<i>padding</i>, or</li>
+  * <li><i>algorithm</i>
+  * </ul>
+  *
+  * <p>where <i>algorithm</i> is the base name of a cryptographic cipher
+  * (such as "AES"), <i>mode</i> is the abbreviated name of a block
+  * cipher mode (such as "CBC" for cipher block chaining mode), and
+  * <i>padding</i> is the name of a padding scheme (such as
+  * "PKCS5Padding"). If only the algorithm name is supplied, then the
+  * provider-specific default mode and padding will be used.</p>
+  *
+  * <p>An example transformation is:</p>
+  *
+  * <blockquote><code>Cipher c =
+  * Cipher.getInstance("AES/CBC/PKCS5Padding");</code></blockquote>
+  *
+  * <p>Finally, when requesting a block cipher in stream cipher mode
+  * (such as <acronym title="Advanced Encryption Standard">AES</acronym>
+  * in OFB or CFB mode) the number of bits to be processed
+  * at a time may be specified by appending it to the name of the mode;
+  * e.g. <code>"AES/OFB8/NoPadding"</code>. If no such number is
+  * specified a provider-specific default value is used.</p>
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @see java.security.KeyGenerator
+  * @see javax.crypto.SecretKey
+  */
+ public class Cipher
+ {
+ 
+   // Constants and variables.
+   // ------------------------------------------------------------------------
+ 
+   private static final String SERVICE = "Cipher";
+ 
+   /**
+    * The decryption operation mode.
+    */
+   public static final int DECRYPT_MODE = 2;
+ 
+   /**
+    * The encryption operation mode.
+    */
+   public static final int ENCRYPT_MODE = 1;
+ 
+   /**
+    * Constant for when the key to be unwrapped is a private key.
+    */
+   public static final int PRIVATE_KEY = 2;
+ 
+   /**
+    * Constant for when the key to be unwrapped is a public key.
+    */
+   public static final int PUBLIC_KEY = 1;
+ 
+   /**
+    * Constant for when the key to be unwrapped is a secret key.
+    */
+   public static final int SECRET_KEY = 3;
+ 
+   /**
+    * The key unwrapping operation mode.
+    */
+   public static final int UNWRAP_MODE = 4;
+ 
+   /**
+    * The key wrapping operation mode.
+    */
+   public static final int WRAP_MODE = 3;
+ 
+   /**
+    * The uninitialized state. This state signals that any of the
+    * <code>init</code> methods have not been called, and therefore no
+    * transformations can be done.
+    */
+   private static final int INITIAL_STATE = 0;
+ 
+   /** The underlying cipher service provider interface. */
+   private CipherSpi cipherSpi;
+ 
+   /** The provider from which this instance came. */
+   private Provider provider;
+ 
+   /** The transformation requested. */
+   private String transformation;
+ 
+   /** Our current state (encrypting, wrapping, etc.) */
+   private int state;
+ 
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * <p>Creates a new cipher instance for the given transformation.</p>
+    *
+    * <p>The installed providers are tried in order for an
+    * implementation, and the first appropriate instance is returned. If
+    * no installed provider can provide the implementation, an
+    * appropriate exception is thrown.</p>
+    *
+    * @param transformation The transformation to create.
+    * @return An appropriate cipher for this transformation.
+    * @throws java.security.NoSuchAlgorithmException If no installed
+    *         provider can supply the appropriate cipher or mode.
+    * @throws javax.crypto.NoSuchPaddingException If no installed
+    *         provider can supply the appropriate padding.
+    */
+   public static final Cipher getInstance(String transformation)
+     throws NoSuchAlgorithmException, NoSuchPaddingException
+   {
+     Provider[] providers = Security.getProviders();
+     NoSuchPaddingException ex = null;
+     String msg = "";
+     for (int i = 0; i < providers.length; i++)
+       {
+         try
+           {
+             return getInstance(transformation, providers[i]);
+           }
+         catch (NoSuchAlgorithmException nsae)
+           {
+             msg = nsae.getMessage();
+             ex = null;
+           }
+         catch (NoSuchPaddingException nspe)
+           {
+             ex = nspe;
+           }
+       }
+     if (ex != null)
+       {
+         throw ex;
+       }
+     throw new NoSuchAlgorithmException(msg);
+   }
+ 
+   /**
+    * <p>Creates a new cipher instance for the given transformation and
+    * the named provider.</p>
+    *
+    * @param transformation The transformation to create.
+    * @param provider       The name of the provider to use.
+    * @return An appropriate cipher for this transformation.
+    * @throws java.security.NoSuchAlgorithmException If the provider cannot
+    *         supply the appropriate cipher or mode.
+    * @throws java.security.NoSuchProviderException If the named provider
+    *         is not installed.
+    * @throws javax.crypto.NoSuchPaddingException If the provider cannot
+    *         supply the appropriate padding.
+    */
+   public static final Cipher getInstance(String transformation, String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException,
+            NoSuchPaddingException
+   {
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       {
+         throw new NoSuchProviderException(provider);
+       }
+     return getInstance(transformation, p);
+   }
+ 
+   /**
+    * Creates a new cipher instance for the given transform and the given
+    * provider.
+    *
+    * @param transformation The transformation to create.
+    * @param provider       The provider to use.
+    * @return An appropriate cipher for this transformation.
+    * @throws java.security.NoSuchAlgorithmException If the given
+    *         provider cannot supply the appropriate cipher or mode.
+    * @throws javax.crypto.NoSuchPaddingException If the given
+    *         provider cannot supply the appropriate padding scheme.
+    */
+   public static final Cipher getInstance(String transformation, Provider provider)
+     throws NoSuchAlgorithmException, NoSuchPaddingException
+   {
+     CipherSpi result = null;
+     String key = null;
+     String alg = null, mode = null, pad = null;
+     String msg = "";
+     if (transformation.indexOf('/') < 0)
+       {
+         try
+           {
+             result = (CipherSpi) Engine.getInstance(SERVICE, transformation,
+                                                     provider);
+             return new Cipher(result, provider, transformation);
+           }
+         catch (Exception e)
+           {
+             msg = e.getMessage();
+           }
+       }
+     else
+       {
+         StringTokenizer tok = new StringTokenizer(transformation, "/");
+         if (tok.countTokens() != 3)
+           {
+             throw new NoSuchAlgorithmException("badly formed transformation");
+           }
+         alg = tok.nextToken();
+         mode = tok.nextToken();
+         pad = tok.nextToken();
+         try
+           {
+             result = (CipherSpi) Engine.getInstance(SERVICE, transformation,
+                                                     provider);
+             return new Cipher(result, provider, transformation);
+           }
+         catch (Exception e)
+           {
+             msg = e.getMessage();
+           }
+         try
+           {
+             result = (CipherSpi) Engine.getInstance(SERVICE, alg + '/' + mode,
+                                                     provider);
+             result.engineSetPadding(pad);
+             return new Cipher(result, provider, transformation);
+           }
+         catch (Exception e)
+           {
+             if (e instanceof NoSuchPaddingException)
+               {
+                 throw (NoSuchPaddingException) e;
+               }
+             msg = e.getMessage();
+           }
+         try
+           {
+             result = (CipherSpi) Engine.getInstance(SERVICE, alg + "//" + pad,
+                                                     provider);
+             result.engineSetMode(mode);
+             return new Cipher(result, provider, transformation);
+           }
+         catch (Exception e)
+           {
+             msg = e.getMessage();
+           }
+         try
+           {
+             result = (CipherSpi) Engine.getInstance(SERVICE, alg, provider);
+             result.engineSetMode(mode);
+             result.engineSetPadding(pad);
+             return new Cipher(result, provider, transformation);
+           }
+         catch (Exception e)
+           {
+             if (e instanceof NoSuchPaddingException)
+               {
+                 throw (NoSuchPaddingException) e;
+               }
+             msg = e.getMessage();
+           }
+       }
+     throw new NoSuchAlgorithmException(transformation + ": " + msg);
+   }
+ 
+ // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a cipher.
+    *
+    * @param cipherSpi The underlying implementation of the cipher.
+    * @param provider  The provider of this cipher implementation.
+    * @param transformation The transformation this cipher performs.
+    */
+   protected
+   Cipher(CipherSpi cipherSpi, Provider provider, String transformation)
+   {
+     this.cipherSpi = cipherSpi;
+     this.provider = provider;
+     this.transformation = transformation;
+     state = INITIAL_STATE;
+   }
+ 
+ // Public instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the name that this cipher instance was created with; this is
+    * equivalent to the "transformation" argument given to any of the
+    * {@link #getInstance()} methods.
+    *
+    * @return The cipher name.
+    */
+   public final String getAlgorithm()
+   {
+     return transformation;
+   }
+ 
+   /**
+    * Return the size of blocks, in bytes, that this cipher processes.
+    *
+    * @return The block size.
+    */
+   public final int getBlockSize()
+   {
+     if (cipherSpi != null)
+       {
+         return cipherSpi.engineGetBlockSize();
+       }
+     return 1;
+   }
+ 
+   /**
+    * Return the currently-operating {@link ExemptionMechanism}.
+    *
+    * @return null, currently.
+    */
+   public final ExemptionMechanism getExemptionMechanism()
+   {
+     return null;
+   }
+ 
+   /**
+    * Return the <i>initialization vector</i> that this instance was
+    * initialized with.
+    *
+    * @return The IV.
+    */
+   public final byte[] getIV()
+   {
+     if (cipherSpi != null)
+       {
+         return cipherSpi.engineGetIV();
+       }
+     return null;
+   }
+ 
+   /**
+    * Return the {@link java.security.AlgorithmParameters} that this
+    * instance was initialized with.
+    *
+    * @return The parameters.
+    */
+   public final AlgorithmParameters getParameters()
+   {
+     if (cipherSpi != null) {
+       return cipherSpi.engineGetParameters();
+     }
+     return null;
+   }
+ 
+   /**
+    * Return this cipher's provider.
+    *
+    * @return The provider.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Finishes a multi-part transformation, and returns the final
+    * transformed bytes.
+    *
+    * @return The final transformed bytes.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized, or if a <tt>doFinal</tt> call has already
+    *         been made.
+    * @throws javax.crypto.IllegalBlockSizeException If this instance has
+    *         no padding and the input is not a multiple of this cipher's
+    *         block size.
+    * @throws javax.crypto.BadPaddingException If this instance is
+    *         decrypting and the padding bytes do not match this
+    *         instance's padding scheme.
+    */
+   public final byte[] doFinal()
+     throws IllegalStateException, IllegalBlockSizeException, BadPaddingException
+   {
+     return doFinal(new byte[0], 0, 0);
+   }
+ 
+   /**
+    * Finishes a multi-part transformation or does an entire
+    * transformation on the input, and returns the transformed bytes.
+    *
+    * @param input The final input bytes.
+    * @return The final transformed bytes.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized, or if a <tt>doFinal</tt> call has already
+    *         been made.
+    * @throws javax.crypto.IllegalBlockSizeException If this instance has
+    *         no padding and the input is not a multiple of this cipher's
+    *         block size.
+    * @throws javax.crypto.BadPaddingException If this instance is
+    *         decrypting and the padding bytes do not match this
+    *         instance's padding scheme.
+    */
+   public final byte[] doFinal(byte[] input)
+     throws IllegalStateException, IllegalBlockSizeException, BadPaddingException
+   {
+     return doFinal(input, 0, input.length);
+   }
+ 
+   /**
+    * Finishes a multi-part transformation or does an entire
+    * transformation on the input, and returns the transformed bytes.
+    *
+    * @param input       The final input bytes.
+    * @param inputOffset The index in the input bytes to start.
+    * @param inputLength The number of bytes to read from the input.
+    * @return The final transformed bytes.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized, or if a <tt>doFinal</tt> call has already
+    *         been made.
+    * @throws javax.crypto.IllegalBlockSizeException If this instance has
+    *         no padding and the input is not a multiple of this cipher's
+    *         block size.
+    * @throws javax.crypto.BadPaddingException If this instance is
+    *         decrypting and the padding bytes do not match this
+    *         instance's padding scheme.
+    */
+   public final byte[] doFinal(byte[] input, int inputOffset, int inputLength)
+     throws IllegalStateException, IllegalBlockSizeException, BadPaddingException
+   {
+     if (cipherSpi == null)
+       {
+         byte[] b = new byte[inputLength];
+         System.arraycopy(input, inputOffset, b, 0, inputLength);
+         return b;
+       }
+     if (state != ENCRYPT_MODE && state != DECRYPT_MODE)
+       {
+         throw new IllegalStateException("neither encrypting nor decrypting");
+       }
+     state = INITIAL_STATE;
+     return cipherSpi.engineDoFinal(input, inputOffset, inputLength);
+   }
+ 
+   /**
+    * Finishes a multi-part transformation and stores the transformed
+    * bytes into the given array.
+    *
+    * @param output       The destination for the transformed bytes.
+    * @param outputOffset The offset in <tt>output</tt> to start storing
+    *        bytes.
+    * @return The number of bytes placed into the output array.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized, or if a <tt>doFinal</tt> call has already
+    *         been made.
+    * @throws javax.crypto.IllegalBlockSizeException If this instance has
+    *         no padding and the input is not a multiple of this cipher's
+    *         block size.
+    * @throws javax.crypto.BadPaddingException If this instance is
+    *         decrypting and the padding bytes do not match this
+    *         instance's padding scheme.
+    * @throws javax.crypto.ShortBufferException If the output array is
+    *         not large enough to hold the transformed bytes.
+    */
+   public final int doFinal(byte[] output, int outputOffset)
+     throws IllegalStateException, IllegalBlockSizeException, BadPaddingException,
+            ShortBufferException
+   {
+     if (cipherSpi == null)
+       {
+         return 0;
+       }
+     if (state != ENCRYPT_MODE && state != DECRYPT_MODE)
+       {
+         throw new IllegalStateException("neither encrypting nor decrypting");
+       }
+     state = INITIAL_STATE;
+     return cipherSpi.engineDoFinal(new byte[0], 0, 0, output, outputOffset);
+   }
+ 
+   /**
+    * Finishes a multi-part transformation or transforms a portion of a
+    * byte array, and stores the result in the given byte array.
+    *
+    * @param input        The input bytes.
+    * @param inputOffset  The index in <tt>input</tt> to start.
+    * @param inputLength  The number of bytes to transform.
+    * @param output       The output buffer.
+    * @param outputOffset The index in <tt>output</tt> to start.
+    * @return The number of bytes placed into the output array.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized, or if a <tt>doFinal</tt> call has already
+    *         been made.
+    * @throws javax.crypto.IllegalBlockSizeException If this instance has
+    *         no padding and the input is not a multiple of this cipher's
+    *         block size.
+    * @throws javax.crypto.BadPaddingException If this instance is
+    *         decrypting and the padding bytes do not match this
+    *         instance's padding scheme.
+    * @throws javax.crypto.ShortBufferException If the output array is
+    *         not large enough to hold the transformed bytes.
+    */
+   public final int doFinal(byte[] input, int inputOffset, int inputLength,
+                            byte[] output, int outputOffset)
+     throws IllegalStateException, IllegalBlockSizeException, BadPaddingException,
+            ShortBufferException
+   {
+     if (cipherSpi == null)
+       {
+         if (inputLength > output.length - outputOffset)
+           {
+             throw new ShortBufferException();
+           }
+         System.arraycopy(input, inputOffset, output, outputOffset, inputLength);
+         return inputLength;
+       }
+     if (state != ENCRYPT_MODE && state != DECRYPT_MODE)
+       {
+         throw new IllegalStateException("neither encrypting nor decrypting");
+       }
+     state = INITIAL_STATE;
+     return cipherSpi.engineDoFinal(input, inputOffset, inputLength,
+                                    output, outputOffset);
+   }
+ 
+   public final int doFinal(byte[] input, int inputOffset, int inputLength,
+                            byte[] output)
+     throws IllegalStateException, IllegalBlockSizeException, BadPaddingException,
+            ShortBufferException
+   {
+     return doFinal(input, inputOffset, inputLength, output, 0);
+   }
+ 
+   /**
+    * Returns the size an output buffer needs to be if this cipher is
+    * updated with a number of bytes.
+    *
+    * @param inputLength The input length.
+    * @return The output length given this input length.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized, or if a <tt>doFinal</tt> call has already
+    *         been made.
+    */
+   public final int getOutputSize(int inputLength) throws IllegalStateException
+   {
+     if (cipherSpi == null)
+       {
+         return inputLength;
+       }
+     if (state != ENCRYPT_MODE && state != DECRYPT_MODE)
+       {
+         throw new IllegalStateException("neither encrypting nor decrypting");
+       }
+     return cipherSpi.engineGetOutputSize(inputLength);
+   }
+ 
+   /**
+    * <p>Initialize this cipher with the public key from the given
+    * certificate.</p>
+    *
+    * <p>The cipher will be initialized for encryption, decryption, key
+    * wrapping, or key unwrapping, depending upon whether the
+    * <code>opmode</code> argument is {@link #ENCRYPT_MODE}, {@link
+    * #DECRYPT_MODE}, {@link #WRAP_MODE}, or {@link #UNWRAP_MODE},
+    * respectively.</p>
+    *
+    * <p>As per the Java 1.4 specification, if <code>cert</code> is an
+    * instance of an {@link java.security.cert.X509Certificate} and its
+    * <i>key usage</i> extension field is incompatible with
+    * <code>opmode</code> then an {@link
+    * java.security.InvalidKeyException} is thrown.</p>
+    *
+    * <p>If this cipher requires any random bytes (for example for an
+    * initilization vector) than the {@link java.security.SecureRandom}
+    * with the highest priority is used as the source of these bytes.</p>
+    *
+    * <p>A call to any of the <code>init</code> methods overrides the
+    * state of the instance, and is equivalent to creating a new instance
+    * and calling its <code>init</code> method.</p>
+    *
+    * @param opmode      The operation mode to use.
+    * @param certificate The certificate.
+    * @throws java.security.InvalidKeyException If the underlying cipher
+    *         instance rejects the certificate's public key, or if the
+    *         public key cannot be used as described above.
+    */
+   public final void init(int opmode, Certificate certificate)
+     throws InvalidKeyException
+   {
+     init(opmode, certificate, new SecureRandom());
+   }
+ 
+   /**
+    * <p>Initialize this cipher with the supplied key.</p>
+    *
+    * <p>The cipher will be initialized for encryption, decryption, key
+    * wrapping, or key unwrapping, depending upon whether the
+    * <code>opmode</code> argument is {@link #ENCRYPT_MODE}, {@link
+    * #DECRYPT_MODE}, {@link #WRAP_MODE}, or {@link #UNWRAP_MODE},
+    * respectively.</p>
+    *
+    * <p>If this cipher requires any random bytes (for example for an
+    * initilization vector) than the {@link java.security.SecureRandom}
+    * with the highest priority is used as the source of these bytes.</p>
+    *
+    * <p>A call to any of the <code>init</code> methods overrides the
+    * state of the instance, and is equivalent to creating a new instance
+    * and calling its <code>init</code> method.</p>
+    *
+    * @param opmode The operation mode to use.
+    * @param key    The key.
+    * @throws java.security.InvalidKeyException If the underlying cipher
+    *         instance rejects the given key.
+    */
+   public final void init(int opmode, Key key) throws InvalidKeyException
+   {
+     state = opmode;
+     if (cipherSpi != null)
+       {
+         cipherSpi.engineInit(opmode, key, new SecureRandom());
+       }
+   }
+ 
+   /**
+    * <p>Initialize this cipher with the public key from the given
+    * certificate and the specified source of randomness.</p>
+    *
+    * <p>The cipher will be initialized for encryption, decryption, key
+    * wrapping, or key unwrapping, depending upon whether the
+    * <code>opmode</code> argument is {@link #ENCRYPT_MODE}, {@link
+    * #DECRYPT_MODE}, {@link #WRAP_MODE}, or {@link #UNWRAP_MODE},
+    * respectively.</p>
+    *
+    * <p>As per the Java 1.4 specification, if <code>cert</code> is an
+    * instance of an {@link java.security.cert.X509Certificate} and its
+    * <i>key usage</i> extension field is incompatible with
+    * <code>opmode</code> then an {@link
+    * java.security.InvalidKeyException} is thrown.</p>
+    *
+    * <p>If this cipher requires any random bytes (for example for an
+    * initilization vector) than the {@link java.security.SecureRandom}
+    * with the highest priority is used as the source of these bytes.</p>
+    *
+    * <p>A call to any of the <code>init</code> methods overrides the
+    * state of the instance, and is equivalent to creating a new instance
+    * and calling its <code>init</code> method.</p>
+    *
+    * @param opmode      The operation mode to use.
+    * @param certificate The certificate.
+    * @param random      The source of randomness.
+    * @throws java.security.InvalidKeyException If the underlying cipher
+    *         instance rejects the certificate's public key, or if the
+    *         public key cannot be used as described above.
+    */
+   public final void
+   init(int opmode, Certificate certificate, SecureRandom random)
+   throws InvalidKeyException
+   {
+     if (certificate instanceof X509Certificate)
+       {
+         boolean[] keyInfo = ((X509Certificate) certificate).getKeyUsage();
+         if (keyInfo != null)
+           {
+             switch (opmode)
+               {
+               case DECRYPT_MODE:
+                 if (!keyInfo[3])
+                   {
+                     throw new InvalidKeyException(
+                       "the certificate's key cannot be used for transforming data");
+                   }
+                 if (keyInfo[7])
+                   {
+                     throw new InvalidKeyException(
+                       "the certificate's key can only be used for encryption");
+                   }
+                 break;
+ 
+               case ENCRYPT_MODE:
+                 if (!keyInfo[3])
+                   {
+                     throw new InvalidKeyException(
+                       "the certificate's key cannot be used for transforming data");
+                   }
+                 if (keyInfo[8])
+                   {
+                     throw new InvalidKeyException(
+                       "the certificate's key can only be used for decryption");
+                   }
+                 break;
+ 
+               case UNWRAP_MODE:
+                 if (!keyInfo[2] || keyInfo[7])
+                   {
+                     throw new InvalidKeyException(
+                       "the certificate's key cannot be used for key unwrapping");
+                   }
+                 break;
+ 
+               case WRAP_MODE:
+                 if (!keyInfo[2] || keyInfo[8])
+                   {
+                     throw new InvalidKeyException(
+                       "the certificate's key cannot be used for key wrapping");
+                   }
+                 break;
+               }
+           }
+       }
+     init(opmode, certificate.getPublicKey(), random);
+   }
+ 
+   /**
+    * <p>Initialize this cipher with the supplied key and source of
+    * randomness.</p>
+    *
+    * <p>The cipher will be initialized for encryption, decryption, key
+    * wrapping, or key unwrapping, depending upon whether the
+    * <code>opmode</code> argument is {@link #ENCRYPT_MODE}, {@link
+    * #DECRYPT_MODE}, {@link #WRAP_MODE}, or {@link #UNWRAP_MODE},
+    * respectively.</p>
+    *
+    * <p>A call to any of the <code>init</code> methods overrides the
+    * state of the instance, and is equivalent to creating a new instance
+    * and calling its <code>init</code> method.</p>
+    *
+    * @param opmode The operation mode to use.
+    * @param key    The key.
+    * @param random The source of randomness to use.
+    * @throws java.security.InvalidKeyException If the underlying cipher
+    *         instance rejects the given key.
+    */
+   public final void init(int opmode, Key key, SecureRandom random)
+     throws InvalidKeyException
+   {
+     state = opmode;
+     if (cipherSpi != null)
+       {
+         cipherSpi.engineInit(opmode, key, random);
+       }
+   }
+ 
+   /**
+    * <p>Initialize this cipher with the supplied key and parameters.</p>
+    *
+    * <p>The cipher will be initialized for encryption, decryption, key
+    * wrapping, or key unwrapping, depending upon whether the
+    * <code>opmode</code> argument is {@link #ENCRYPT_MODE}, {@link
+    * #DECRYPT_MODE}, {@link #WRAP_MODE}, or {@link #UNWRAP_MODE},
+    * respectively.</p>
+    *
+    * <p>If this cipher requires any random bytes (for example for an
+    * initilization vector) then the {@link java.security.SecureRandom}
+    * with the highest priority is used as the source of these bytes.</p>
+    *
+    * <p>A call to any of the <code>init</code> methods overrides the
+    * state of the instance, and is equivalent to creating a new instance
+    * and calling its <code>init</code> method.</p>
+    *
+    * @param opmode The operation mode to use.
+    * @param key    The key.
+    * @param params The algorithm parameters to initialize this instance
+    *               with.
+    * @throws java.security.InvalidKeyException If the underlying cipher
+    *         instance rejects the given key.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         supplied parameters are inappropriate for this cipher.
+    */
+   public final void init(int opmode, Key key, AlgorithmParameters params)
+     throws InvalidKeyException, InvalidAlgorithmParameterException
+   {
+     init(opmode, key, params, new SecureRandom());
+   }
+ 
+   /**
+    * <p>Initialize this cipher with the supplied key and parameters.</p>
+    *
+    * <p>The cipher will be initialized for encryption, decryption, key
+    * wrapping, or key unwrapping, depending upon whether the
+    * <code>opmode</code> argument is {@link #ENCRYPT_MODE}, {@link
+    * #DECRYPT_MODE}, {@link #WRAP_MODE}, or {@link #UNWRAP_MODE},
+    * respectively.</p>
+    *
+    * <p>If this cipher requires any random bytes (for example for an
+    * initilization vector) then the {@link java.security.SecureRandom}
+    * with the highest priority is used as the source of these bytes.</p>
+    *
+    * <p>A call to any of the <code>init</code> methods overrides the
+    * state of the instance, and is equivalent to creating a new instance
+    * and calling its <code>init</code> method.</p>
+    *
+    * @param opmode The operation mode to use.
+    * @param key    The key.
+    * @param params The algorithm parameters to initialize this instance
+    *               with.
+    * @throws java.security.InvalidKeyException If the underlying cipher
+    *         instance rejects the given key.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         supplied parameters are inappropriate for this cipher.
+    */
+   public final void init(int opmode, Key key, AlgorithmParameterSpec params)
+     throws InvalidKeyException, InvalidAlgorithmParameterException
+   {
+     init(opmode, key, params, new SecureRandom());
+   }
+ 
+   /**
+    * <p>Initialize this cipher with the supplied key, parameters, and
+    * source of randomness.</p>
+    *
+    * <p>The cipher will be initialized for encryption, decryption, key
+    * wrapping, or key unwrapping, depending upon whether the
+    * <code>opmode</code> argument is {@link #ENCRYPT_MODE}, {@link
+    * #DECRYPT_MODE}, {@link #WRAP_MODE}, or {@link #UNWRAP_MODE},
+    * respectively.</p>
+    *
+    * <p>A call to any of the <code>init</code> methods overrides the
+    * state of the instance, and is equivalent to creating a new instance
+    * and calling its <code>init</code> method.</p>
+    *
+    * @param opmode The operation mode to use.
+    * @param key    The key.
+    * @param params The algorithm parameters to initialize this instance
+    *               with.
+    * @param random The source of randomness to use.
+    * @throws java.security.InvalidKeyException If the underlying cipher
+    *         instance rejects the given key.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         supplied parameters are inappropriate for this cipher.
+    */
+   public final void init(int opmode, Key key, AlgorithmParameters params,
+                          SecureRandom random)
+     throws InvalidKeyException, InvalidAlgorithmParameterException
+   {
+     state = opmode;
+     if (cipherSpi != null)
+       {
+         cipherSpi.engineInit(opmode, key, params, random);
+       }
+   }
+ 
+   /**
+    * <p>Initialize this cipher with the supplied key, parameters, and
+    * source of randomness.</p>
+    *
+    * <p>The cipher will be initialized for encryption, decryption, key
+    * wrapping, or key unwrapping, depending upon whether the
+    * <code>opmode</code> argument is {@link #ENCRYPT_MODE}, {@link
+    * #DECRYPT_MODE}, {@link #WRAP_MODE}, or {@link #UNWRAP_MODE},
+    * respectively.</p>
+    *
+    * <p>A call to any of the <code>init</code> methods overrides the
+    * state of the instance, and is equivalent to creating a new instance
+    * and calling its <code>init</code> method.</p>
+    *
+    * @param opmode The operation mode to use.
+    * @param key    The key.
+    * @param params The algorithm parameters to initialize this instance
+    *               with.
+    * @param random The source of randomness to use.
+    * @throws java.security.InvalidKeyException If the underlying cipher
+    *         instance rejects the given key.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         supplied parameters are inappropriate for this cipher.
+    */
+   public final void init(int opmode, Key key, AlgorithmParameterSpec params,
+                          SecureRandom random)
+     throws InvalidKeyException, InvalidAlgorithmParameterException
+   {
+     state = opmode;
+     if (cipherSpi != null)
+       {
+         cipherSpi.engineInit(opmode, key, params, random);
+       }
+   }
+ 
+   /**
+    * Unwrap a previously-wrapped key.
+    *
+    * @param wrappedKey          The wrapped key.
+    * @param wrappedKeyAlgorithm The algorithm with which the key was
+    *        wrapped.
+    * @param wrappedKeyType      The type of key (public, private, or
+    *        secret) that this wrapped key respresents.
+    * @return The unwrapped key.
+    * @throws java.lang.IllegalStateException If this instance has not be
+    *         initialized for unwrapping.
+    * @throws java.security.InvalidKeyException If <code>wrappedKey</code>
+    *         is not a wrapped key, if the algorithm cannot unwrap this
+    *         key, or if the unwrapped key's type differs from the
+    *         specified type.
+    * @throws java.security.NoSuchAlgorithmException If
+    *         <code>wrappedKeyAlgorithm</code> is not a valid algorithm
+    *         name.
+    */
+   public final Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm,
+                           int wrappedKeyType)
+     throws IllegalStateException, InvalidKeyException, NoSuchAlgorithmException
+   {
+     if (cipherSpi == null)
+       {
+         return null;
+       }
+     if (state != UNWRAP_MODE)
+       {
+         throw new IllegalStateException("instance is not for unwrapping");
+       }
+     return cipherSpi.engineUnwrap(wrappedKey, wrappedKeyAlgorithm,
+                                   wrappedKeyType);
+   }
+ 
+   /**
+    * Continue a multi-part transformation on an entire byte array,
+    * returning the transformed bytes.
+    *
+    * @param input The input bytes.
+    * @return The transformed bytes.
+    * @throws java.lang.IllegalStateException If this cipher was not
+    *         initialized for encryption or decryption.
+    */
+   public final byte[] update(byte[] input) throws IllegalStateException
+   {
+     return update(input, 0, input.length);
+   }
+ 
+   /**
+    * Continue a multi-part transformation on part of a byte array,
+    * returning the transformed bytes.
+    *
+    * @param input       The input bytes.
+    * @param inputOffset The index in the input to start.
+    * @param inputLength The number of bytes to transform.
+    * @return The transformed bytes.
+    * @throws java.lang.IllegalStateException If this cipher was not
+    *         initialized for encryption or decryption.
+    */
+   public final byte[] update(byte[] input, int inputOffset, int inputLength)
+     throws IllegalStateException
+   {
+     if (cipherSpi == null)
+       {
+         byte[] b = new byte[inputLength];
+         System.arraycopy(input, inputOffset, b, 0, inputLength);
+         return b;
+       }
+     if (state != ENCRYPT_MODE && state != DECRYPT_MODE)
+       {
+         throw new IllegalStateException(
+           "cipher is not for encrypting or decrypting");
+       }
+     return cipherSpi.engineUpdate(input, inputOffset, inputLength);
+   }
+ 
+   /**
+    * Continue a multi-part transformation on part of a byte array,
+    * placing the transformed bytes into the given array.
+    *
+    * @param input       The input bytes.
+    * @param inputOffset The index in the input to start.
+    * @param inputLength The number of bytes to transform.
+    * @param output      The output byte array.
+    * @return The number of transformed bytes.
+    * @throws java.lang.IllegalStateException If this cipher was not
+    *         initialized for encryption or decryption.
+    * @throws javax.security.ShortBufferException If there is not enough
+    *         room in the output array to hold the transformed bytes.
+    */
+   public final int update(byte[] input, int inputOffset, int inputLength,
+                           byte[] output)
+     throws IllegalStateException, ShortBufferException
+   {
+     return update(input, inputOffset, inputLength, output, 0);
+   }
+ 
+   /**
+    * Continue a multi-part transformation on part of a byte array,
+    * placing the transformed bytes into the given array.
+    *
+    * @param input        The input bytes.
+    * @param inputOffset  The index in the input to start.
+    * @param inputLength  The number of bytes to transform.
+    * @param output       The output byte array.
+    * @param outputOffset The index in the output array to start.
+    * @return The number of transformed bytes.
+    * @throws java.lang.IllegalStateException If this cipher was not
+    *         initialized for encryption or decryption.
+    * @throws javax.security.ShortBufferException If there is not enough
+    *         room in the output array to hold the transformed bytes.
+    */
+   public final int update(byte[] input, int inputOffset, int inputLength,
+                           byte[] output, int outputOffset)
+     throws IllegalStateException, ShortBufferException
+   {
+     if (cipherSpi == null)
+       {
+         if (inputLength > output.length - outputOffset)
+           {
+             throw new ShortBufferException();
+           }
+         System.arraycopy(input, inputOffset, output, outputOffset, inputLength);
+         return inputLength;
+       }
+     if (state != ENCRYPT_MODE && state != DECRYPT_MODE)
+       {
+         throw new IllegalStateException(
+           "cipher is not for encrypting or decrypting");
+       }
+     return cipherSpi.engineUpdate(input, inputOffset, inputLength,
+                                   output, outputOffset);
+   }
+ 
+   /**
+    * Wrap a key.
+    *
+    * @param key The key to wrap.
+    * @return The wrapped key.
+    * @throws java.lang.IllegalStateException If this instance was not
+    *         initialized for key wrapping.
+    * @throws javax.crypto.IllegalBlockSizeException If this instance has
+    *         no padding and the key is not a multiple of the block size.
+    * @throws java.security.InvalidKeyException If this instance cannot
+    *         wrap this key.
+    */
+   public final byte[] wrap(Key key)
+     throws IllegalStateException, IllegalBlockSizeException, InvalidKeyException
+   {
+     if (cipherSpi == null)
+       {
+         return null;
+       }
+     if (state != WRAP_MODE)
+       {
+         throw new IllegalStateException("instance is not for key wrapping");
+       }
+     return cipherSpi.engineWrap(key);
+   }
+ }
diff -Nrcpad gcc-4.0.2/libjava/classpath/javax/crypto/CipherInputStream.java gcc-4.1.0/libjava/classpath/javax/crypto/CipherInputStream.java
*** gcc-4.0.2/libjava/classpath/javax/crypto/CipherInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.1.0/libjava/classpath/javax/crypto/CipherInputStream.java	Fri Sep 23 17:31:48 2005
***************
*** 0 ****
--- 1,383 ----
+ /* CipherInputStream.java -- Filters input through a cipher.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath 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
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package javax.crypto;
+ 
+ import java.io.FilterInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * This is an {@link java.io.InputStream} that filters its data
+  * through a {@link Cipher} before returning it. The <code>Cipher</code>
+  * argument must have been initialized before it is passed to the
+  * constructor.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class CipherInputStream extends FilterInputStream
+ {
+ 
+   // Constants and variables.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * The underlying {@link Cipher} instance.
+    */
+   private Cipher cipher;
+ 
+   /**
+    * Data that has been transformed but not read.
+    */
+   private byte[] outBuffer;
+ 
+   /**
+    * The offset into {@link #outBuffer} where valid data starts.
+    */
+   private int outOffset;
+ 
+   /**
+    * The number of valid bytes in the {@link #outBuffer}.
+    */
+   private int outLength;
+ 
+   /**
+    * Byte buffer that is filled with raw data from the underlying input
+    * stream.
+    */
+   private byte[][] inBuffer;
+ 
+   /**
+    * The amount of bytes in inBuffer[0] that may be input to the cipher.
+    */
+   private int inLength;
+ 
+   /**
+    * We set this when the cipher block size is 1, meaning that we can
+    * transform any amount of data.
+    */
+   private boolean isStream;
+ 
+   private static final int VIRGIN = 0;  /